From 5046dbb4a7eba5eccfd258f92f4735c9ffc8d069 Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Thu, 8 Jun 2017 15:39:03 -0400 Subject: Prepare for radical source tree reorganization. All top-level files and directories are moved into a temporary storage directory, REORG.TODO, except for files that will certainly still exist in their current form at top level when we're done (COPYING, COPYING.LIB, LICENSES, NEWS, README), all old ChangeLog files (which are moved to the new directory OldChangeLogs, instead), and the generated file INSTALL (which is just deleted; in the new order, there will be no generated files checked into version control). --- sysdeps/aarch64/Implies | 6 - sysdeps/aarch64/Makefile | 18 - sysdeps/aarch64/Versions | 5 - sysdeps/aarch64/__longjmp.S | 118 - sysdeps/aarch64/abort-instr.h | 1 - sysdeps/aarch64/atomic-machine.h | 170 - sysdeps/aarch64/backtrace.c | 1 - sysdeps/aarch64/bits/endian.h | 30 - sysdeps/aarch64/bits/fenv.h | 82 - sysdeps/aarch64/bits/fp-fast.h | 34 - sysdeps/aarch64/bits/link.h | 60 - sysdeps/aarch64/bits/setjmp.h | 33 - sysdeps/aarch64/bits/string.h | 24 - sysdeps/aarch64/bits/wordsize.h | 28 - sysdeps/aarch64/bsd-_setjmp.S | 1 - sysdeps/aarch64/bsd-setjmp.S | 1 - sysdeps/aarch64/configure | 174 - sysdeps/aarch64/configure.ac | 22 - sysdeps/aarch64/crti.S | 91 - sysdeps/aarch64/crtn.S | 46 - sysdeps/aarch64/dl-irel.h | 53 - sysdeps/aarch64/dl-link.sym | 15 - sysdeps/aarch64/dl-machine.h | 447 - sysdeps/aarch64/dl-sysdep.h | 25 - sysdeps/aarch64/dl-tls.h | 27 - sysdeps/aarch64/dl-tlsdesc.S | 373 - sysdeps/aarch64/dl-tlsdesc.h | 68 - sysdeps/aarch64/dl-trampoline.S | 300 - sysdeps/aarch64/fpu/e_sqrt.c | 28 - sysdeps/aarch64/fpu/e_sqrtf.c | 28 - sysdeps/aarch64/fpu/fclrexcpt.c | 38 - sysdeps/aarch64/fpu/fedisblxcpt.c | 36 - sysdeps/aarch64/fpu/feenablxcpt.c | 47 - sysdeps/aarch64/fpu/fegetenv.c | 35 - sysdeps/aarch64/fpu/fegetexcept.c | 28 - sysdeps/aarch64/fpu/fegetmode.c | 27 - sysdeps/aarch64/fpu/fegetround.c | 29 - sysdeps/aarch64/fpu/feholdexcpt.c | 30 - sysdeps/aarch64/fpu/fesetenv.c | 78 - sysdeps/aarch64/fpu/fesetexcept.c | 34 - sysdeps/aarch64/fpu/fesetmode.c | 34 - sysdeps/aarch64/fpu/fesetround.c | 34 - sysdeps/aarch64/fpu/feupdateenv.c | 89 - sysdeps/aarch64/fpu/fgetexcptflg.c | 27 - sysdeps/aarch64/fpu/fpu_control.h | 81 - sysdeps/aarch64/fpu/fraiseexcpt.c | 93 - sysdeps/aarch64/fpu/fsetexcptflg.c | 41 - sysdeps/aarch64/fpu/ftestexcept.c | 27 - sysdeps/aarch64/fpu/get-rounding-mode.h | 38 - sysdeps/aarch64/fpu/math_private.h | 324 - sysdeps/aarch64/fpu/s_ceil.c | 21 - sysdeps/aarch64/fpu/s_ceilf.c | 21 - sysdeps/aarch64/fpu/s_floor.c | 21 - sysdeps/aarch64/fpu/s_floorf.c | 21 - sysdeps/aarch64/fpu/s_fma.c | 45 - sysdeps/aarch64/fpu/s_fmaf.c | 22 - sysdeps/aarch64/fpu/s_fmax.c | 21 - sysdeps/aarch64/fpu/s_fmaxf.c | 23 - sysdeps/aarch64/fpu/s_fmin.c | 49 - sysdeps/aarch64/fpu/s_fminf.c | 22 - sysdeps/aarch64/fpu/s_frint.c | 49 - sysdeps/aarch64/fpu/s_frintf.c | 24 - sysdeps/aarch64/fpu/s_llrint.c | 21 - sysdeps/aarch64/fpu/s_llrintf.c | 23 - sysdeps/aarch64/fpu/s_llround.c | 21 - sysdeps/aarch64/fpu/s_llroundf.c | 23 - sysdeps/aarch64/fpu/s_lrint.c | 53 - sysdeps/aarch64/fpu/s_lrintf.c | 22 - sysdeps/aarch64/fpu/s_lround.c | 51 - sysdeps/aarch64/fpu/s_lroundf.c | 22 - sysdeps/aarch64/fpu/s_nearbyint.c | 21 - sysdeps/aarch64/fpu/s_nearbyintf.c | 21 - sysdeps/aarch64/fpu/s_rint.c | 21 - sysdeps/aarch64/fpu/s_rintf.c | 21 - sysdeps/aarch64/fpu/s_round.c | 21 - sysdeps/aarch64/fpu/s_roundf.c | 21 - sysdeps/aarch64/fpu/s_trunc.c | 21 - sysdeps/aarch64/fpu/s_truncf.c | 21 - sysdeps/aarch64/jmpbuf-offsets.h | 60 - sysdeps/aarch64/jmpbuf-unwind.h | 37 - sysdeps/aarch64/ldsodefs.h | 49 - sysdeps/aarch64/libc-tls.c | 32 - sysdeps/aarch64/libm-test-ulps | 2276 ---- sysdeps/aarch64/libm-test-ulps-name | 1 - sysdeps/aarch64/linkmap.h | 23 - sysdeps/aarch64/machine-gmon.h | 34 - sysdeps/aarch64/math-tests.h | 22 - sysdeps/aarch64/mcount.c | 33 - sysdeps/aarch64/memchr.S | 157 - sysdeps/aarch64/memcmp.S | 154 - sysdeps/aarch64/memcpy.S | 267 - sysdeps/aarch64/memmove.S | 1 - sysdeps/aarch64/memset.S | 195 - sysdeps/aarch64/memusage.h | 21 - sysdeps/aarch64/multiarch/Makefile | 3 - sysdeps/aarch64/multiarch/ifunc-impl-list.c | 51 - sysdeps/aarch64/multiarch/init-arch.h | 23 - sysdeps/aarch64/multiarch/memcpy.c | 39 - sysdeps/aarch64/multiarch/memcpy_generic.S | 42 - sysdeps/aarch64/multiarch/memcpy_thunderx.S | 326 - sysdeps/aarch64/multiarch/memmove.c | 39 - sysdeps/aarch64/nptl/Makefile | 21 - sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h | 69 - sysdeps/aarch64/nptl/bits/semaphore.h | 39 - sysdeps/aarch64/nptl/pthreaddef.h | 32 - sysdeps/aarch64/nptl/tcb-offsets.sym | 6 - sysdeps/aarch64/nptl/tls.h | 136 - sysdeps/aarch64/preconfigure | 6 - sysdeps/aarch64/rawmemchr.S | 42 - sysdeps/aarch64/setjmp.S | 75 - sysdeps/aarch64/soft-fp/Makefile | 3 - sysdeps/aarch64/soft-fp/e_sqrtl.c | 39 - sysdeps/aarch64/soft-fp/sfp-machine.h | 120 - sysdeps/aarch64/sotruss-lib.c | 51 - sysdeps/aarch64/stackinfo.h | 33 - sysdeps/aarch64/start.S | 94 - sysdeps/aarch64/stpcpy.S | 20 - sysdeps/aarch64/strchr.S | 139 - sysdeps/aarch64/strchrnul.S | 131 - sysdeps/aarch64/strcmp.S | 157 - sysdeps/aarch64/strcpy.S | 328 - sysdeps/aarch64/string_private.h | 20 - sysdeps/aarch64/strlen.S | 220 - sysdeps/aarch64/strncmp.S | 207 - sysdeps/aarch64/strnlen.S | 165 - sysdeps/aarch64/strrchr.S | 166 - sysdeps/aarch64/sysdep.h | 148 - sysdeps/aarch64/tls-macros.h | 51 - sysdeps/aarch64/tlsdesc.c | 166 - sysdeps/aarch64/tlsdesc.sym | 18 - sysdeps/aarch64/tst-audit.h | 25 - sysdeps/alpha/Implies | 7 - sysdeps/alpha/Makefile | 62 - sysdeps/alpha/Subdirs | 1 - sysdeps/alpha/Versions | 17 - sysdeps/alpha/__longjmp.S | 63 - sysdeps/alpha/_mcount.S | 105 - sysdeps/alpha/add_n.S | 118 - sysdeps/alpha/addmul_1.S | 90 - sysdeps/alpha/alphaev5/add_n.S | 146 - sysdeps/alpha/alphaev5/lshift.S | 172 - sysdeps/alpha/alphaev5/rshift.S | 170 - sysdeps/alpha/alphaev5/sub_n.S | 147 - sysdeps/alpha/alphaev6/Implies | 1 - sysdeps/alpha/alphaev6/addmul_1.S | 477 - sysdeps/alpha/alphaev6/fpu/e_sqrt.S | 53 - sysdeps/alpha/alphaev6/fpu/e_sqrtf.S | 53 - sysdeps/alpha/alphaev6/memcpy.S | 255 - sysdeps/alpha/alphaev6/memset.S | 223 - sysdeps/alpha/alphaev6/stxcpy.S | 314 - sysdeps/alpha/alphaev6/stxncpy.S | 392 - sysdeps/alpha/alphaev67/Implies | 1 - sysdeps/alpha/alphaev67/ffs.S | 51 - sysdeps/alpha/alphaev67/ffsll.S | 44 - sysdeps/alpha/alphaev67/fpu/Implies | 1 - sysdeps/alpha/alphaev67/rawmemchr.S | 92 - sysdeps/alpha/alphaev67/stpcpy.S | 53 - sysdeps/alpha/alphaev67/stpncpy.S | 115 - sysdeps/alpha/alphaev67/strcat.S | 61 - sysdeps/alpha/alphaev67/strchr.S | 100 - sysdeps/alpha/alphaev67/strlen.S | 60 - sysdeps/alpha/alphaev67/strncat.S | 87 - sysdeps/alpha/alphaev67/strrchr.S | 116 - sysdeps/alpha/atomic-machine.h | 370 - sysdeps/alpha/backtrace.c | 1 - sysdeps/alpha/bb_init_func.S | 86 - sysdeps/alpha/bits/endian.h | 7 - sysdeps/alpha/bits/link.h | 68 - sysdeps/alpha/bits/mathdef.h | 44 - sysdeps/alpha/bits/setjmp.h | 61 - sysdeps/alpha/bsd-_setjmp.S | 1 - sysdeps/alpha/bsd-setjmp.S | 1 - sysdeps/alpha/bzero.S | 110 - sysdeps/alpha/configure | 8 - sysdeps/alpha/configure.ac | 7 - sysdeps/alpha/crti.S | 99 - sysdeps/alpha/crtn.S | 49 - sysdeps/alpha/div.S | 87 - sysdeps/alpha/div_libc.h | 163 - sysdeps/alpha/divl.S | 83 - sysdeps/alpha/divlu.S | 4 - sysdeps/alpha/divq.S | 273 - sysdeps/alpha/divqu.S | 256 - sysdeps/alpha/dl-dtprocnum.h | 3 - sysdeps/alpha/dl-machine.h | 529 - sysdeps/alpha/dl-procinfo.c | 63 - sysdeps/alpha/dl-procinfo.h | 60 - sysdeps/alpha/dl-sysdep.h | 23 - sysdeps/alpha/dl-tls.h | 27 - sysdeps/alpha/dl-trampoline.S | 540 - sysdeps/alpha/ffs.S | 91 - sysdeps/alpha/ffsll.S | 1 - sysdeps/alpha/fpu/Versions | 23 - sysdeps/alpha/fpu/bits/fenv.h | 141 - sysdeps/alpha/fpu/bits/mathinline.h | 125 - sysdeps/alpha/fpu/cabsf.c | 41 - sysdeps/alpha/fpu/cargf.c | 41 - sysdeps/alpha/fpu/cfloat-compat.h | 58 - sysdeps/alpha/fpu/cimagf.c | 40 - sysdeps/alpha/fpu/conjf.c | 42 - sysdeps/alpha/fpu/crealf.c | 40 - sysdeps/alpha/fpu/e_sqrt.c | 187 - sysdeps/alpha/fpu/e_sqrtf.c | 14 - sysdeps/alpha/fpu/fclrexcpt.c | 47 - sysdeps/alpha/fpu/fedisblxcpt.c | 35 - sysdeps/alpha/fpu/feenablxcpt.c | 35 - sysdeps/alpha/fpu/fegetenv.c | 48 - sysdeps/alpha/fpu/fegetexcept.c | 30 - sysdeps/alpha/fpu/fegetmode.c | 33 - sysdeps/alpha/fpu/fegetround.c | 33 - sysdeps/alpha/fpu/feholdexcpt.c | 35 - sysdeps/alpha/fpu/fenv_libc.h | 39 - sysdeps/alpha/fpu/fesetenv.c | 57 - sysdeps/alpha/fpu/fesetexcept.c | 31 - sysdeps/alpha/fpu/fesetmode.c | 44 - sysdeps/alpha/fpu/fesetround.c | 44 - sysdeps/alpha/fpu/feupdateenv.c | 50 - sysdeps/alpha/fpu/fgetexcptflg.c | 43 - sysdeps/alpha/fpu/fpu_control.h | 105 - sysdeps/alpha/fpu/fsetexcptflg.c | 46 - sysdeps/alpha/fpu/ftestexcept.c | 32 - sysdeps/alpha/fpu/get-rounding-mode.h | 35 - sysdeps/alpha/fpu/libm-test-ulps | 2262 ---- sysdeps/alpha/fpu/libm-test-ulps-name | 1 - sysdeps/alpha/fpu/math_private.h | 50 - sysdeps/alpha/fpu/s_cacosf.c | 57 - sysdeps/alpha/fpu/s_cacoshf.c | 56 - sysdeps/alpha/fpu/s_casinf.c | 54 - sysdeps/alpha/fpu/s_casinhf.c | 54 - sysdeps/alpha/fpu/s_catanf.c | 54 - sysdeps/alpha/fpu/s_catanhf.c | 54 - sysdeps/alpha/fpu/s_ccosf.c | 54 - sysdeps/alpha/fpu/s_ccoshf.c | 54 - sysdeps/alpha/fpu/s_ceil.c | 56 - sysdeps/alpha/fpu/s_ceilf.c | 53 - sysdeps/alpha/fpu/s_cexpf.c | 54 - sysdeps/alpha/fpu/s_clog10f.c | 64 - sysdeps/alpha/fpu/s_clogf.c | 54 - sysdeps/alpha/fpu/s_copysign.c | 39 - sysdeps/alpha/fpu/s_copysignf.c | 27 - sysdeps/alpha/fpu/s_cpowf.c | 54 - sysdeps/alpha/fpu/s_cprojf.c | 54 - sysdeps/alpha/fpu/s_csinf.c | 54 - sysdeps/alpha/fpu/s_csinhf.c | 54 - sysdeps/alpha/fpu/s_csqrtf.c | 54 - sysdeps/alpha/fpu/s_ctanf.c | 54 - sysdeps/alpha/fpu/s_ctanhf.c | 54 - sysdeps/alpha/fpu/s_fabs.c | 35 - sysdeps/alpha/fpu/s_fabsf.c | 27 - sysdeps/alpha/fpu/s_floor.c | 57 - sysdeps/alpha/fpu/s_floorf.c | 54 - sysdeps/alpha/fpu/s_fmax.S | 57 - sysdeps/alpha/fpu/s_fmaxf.S | 1 - sysdeps/alpha/fpu/s_fmin.S | 57 - sysdeps/alpha/fpu/s_fminf.S | 1 - sysdeps/alpha/fpu/s_isnan.c | 58 - sysdeps/alpha/fpu/s_isnanf.c | 1 - sysdeps/alpha/fpu/s_llrint.c | 1 - sysdeps/alpha/fpu/s_llrintf.c | 1 - sysdeps/alpha/fpu/s_llround.c | 1 - sysdeps/alpha/fpu/s_llroundf.c | 1 - sysdeps/alpha/fpu/s_lrint.c | 47 - sysdeps/alpha/fpu/s_lrintf.c | 38 - sysdeps/alpha/fpu/s_lround.c | 47 - sysdeps/alpha/fpu/s_lroundf.c | 37 - sysdeps/alpha/fpu/s_nearbyint.c | 25 - sysdeps/alpha/fpu/s_rint.c | 51 - sysdeps/alpha/fpu/s_rintf.c | 50 - sysdeps/alpha/fpu/s_trunc.c | 51 - sysdeps/alpha/fpu/s_truncf.c | 43 - sysdeps/alpha/gccframe.h | 21 - sysdeps/alpha/hp-timing.h | 46 - sysdeps/alpha/htonl.S | 43 - sysdeps/alpha/htons.S | 39 - sysdeps/alpha/jmpbuf-offsets.h | 35 - sysdeps/alpha/jmpbuf-unwind.h | 47 - sysdeps/alpha/ldiv.S | 218 - sysdeps/alpha/ldsodefs.h | 42 - sysdeps/alpha/libc-tls.c | 32 - sysdeps/alpha/lldiv.S | 1 - sysdeps/alpha/lshift.S | 107 - sysdeps/alpha/machine-gmon.h | 25 - sysdeps/alpha/memchr.c | 177 - sysdeps/alpha/memset.S | 127 - sysdeps/alpha/memusage.h | 20 - sysdeps/alpha/mul_1.S | 83 - sysdeps/alpha/nptl/Makefile | 20 - sysdeps/alpha/nptl/bits/pthreadtypes-arch.h | 59 - sysdeps/alpha/nptl/pthread_spin_lock.S | 44 - sysdeps/alpha/nptl/pthread_spin_trylock.S | 45 - sysdeps/alpha/nptl/pthreaddef.h | 31 - sysdeps/alpha/nptl/tcb-offsets.sym | 13 - sysdeps/alpha/nptl/tls.h | 132 - sysdeps/alpha/nscd-types.h | 21 - sysdeps/alpha/preconfigure | 3 - sysdeps/alpha/rawmemchr.S | 89 - sysdeps/alpha/reml.S | 86 - sysdeps/alpha/remlu.S | 4 - sysdeps/alpha/remq.S | 268 - sysdeps/alpha/remqu.S | 271 - sysdeps/alpha/rshift.S | 105 - sysdeps/alpha/setjmp.S | 120 - sysdeps/alpha/soft-fp/Makefile | 11 - sysdeps/alpha/soft-fp/Versions | 8 - sysdeps/alpha/soft-fp/e_sqrtl.c | 49 - sysdeps/alpha/soft-fp/local-soft-fp.h | 55 - sysdeps/alpha/soft-fp/ots_add.c | 38 - sysdeps/alpha/soft-fp/ots_cmp.c | 63 - sysdeps/alpha/soft-fp/ots_cmpe.c | 77 - sysdeps/alpha/soft-fp/ots_cvtqux.c | 39 - sysdeps/alpha/soft-fp/ots_cvtqx.c | 38 - sysdeps/alpha/soft-fp/ots_cvttx.c | 47 - sysdeps/alpha/soft-fp/ots_cvtxq.c | 41 - sysdeps/alpha/soft-fp/ots_cvtxt.c | 43 - sysdeps/alpha/soft-fp/ots_div.c | 38 - sysdeps/alpha/soft-fp/ots_mul.c | 38 - sysdeps/alpha/soft-fp/ots_nintxq.c | 51 - sysdeps/alpha/soft-fp/ots_sub.c | 38 - sysdeps/alpha/soft-fp/sfp-machine.h | 99 - sysdeps/alpha/sotruss-lib.c | 50 - sysdeps/alpha/stackinfo.h | 33 - sysdeps/alpha/start.S | 85 - sysdeps/alpha/stpcpy.S | 55 - sysdeps/alpha/stpncpy.S | 106 - sysdeps/alpha/strcat.S | 71 - sysdeps/alpha/strchr.S | 94 - sysdeps/alpha/strcmp.S | 194 - sysdeps/alpha/strcpy.S | 41 - sysdeps/alpha/strlen.S | 76 - sysdeps/alpha/strncat.S | 94 - sysdeps/alpha/strncmp.S | 277 - sysdeps/alpha/strncpy.S | 87 - sysdeps/alpha/strrchr.S | 110 - sysdeps/alpha/stxcpy.S | 294 - sysdeps/alpha/stxncpy.S | 352 - sysdeps/alpha/sub_n.S | 118 - sysdeps/alpha/submul_1.S | 90 - sysdeps/alpha/tininess.h | 1 - sysdeps/alpha/tls-macros.h | 25 - sysdeps/alpha/tst-audit.h | 24 - sysdeps/alpha/udiv_qrnnd.S | 159 - sysdeps/arm/Implies | 3 - sysdeps/arm/Makefile | 79 - sysdeps/arm/Versions | 24 - sysdeps/arm/__longjmp.S | 121 - sysdeps/arm/abi-note.S | 8 - sysdeps/arm/add_n.S | 90 - sysdeps/arm/addmul_1.S | 67 - sysdeps/arm/aeabi_assert.c | 26 - sysdeps/arm/aeabi_atexit.c | 27 - sysdeps/arm/aeabi_errno_addr.c | 24 - sysdeps/arm/aeabi_lcsts.c | 98 - sysdeps/arm/aeabi_localeconv.c | 24 - sysdeps/arm/aeabi_math.c | 41 - sysdeps/arm/aeabi_mb_cur_max.c | 27 - sysdeps/arm/aeabi_memclr.c | 30 - sysdeps/arm/aeabi_memcpy.c | 31 - sysdeps/arm/aeabi_memmove.c | 31 - sysdeps/arm/aeabi_memset.c | 30 - sysdeps/arm/aeabi_sighandlers.S | 53 - sysdeps/arm/aeabi_unwind_cpp_pr1.c | 51 - sysdeps/arm/arm-features.h | 59 - sysdeps/arm/arm-mcount.S | 128 - sysdeps/arm/arm-unwind-resume.S | 46 - sysdeps/arm/armv6/rawmemchr.S | 105 - sysdeps/arm/armv6/stpcpy.S | 1 - sysdeps/arm/armv6/strchr.S | 143 - sysdeps/arm/armv6/strcpy.S | 218 - sysdeps/arm/armv6/strlen.S | 99 - sysdeps/arm/armv6/strrchr.S | 129 - sysdeps/arm/armv6t2/Implies | 2 - sysdeps/arm/armv6t2/ffs.S | 36 - sysdeps/arm/armv6t2/ffsll.S | 50 - sysdeps/arm/armv6t2/memchr.S | 184 - sysdeps/arm/armv6t2/strlen.S | 164 - sysdeps/arm/armv7/Implies | 2 - sysdeps/arm/armv7/multiarch/Makefile | 3 - sysdeps/arm/armv7/multiarch/aeabi_memcpy.c | 2 - sysdeps/arm/armv7/multiarch/ifunc-impl-list.c | 56 - sysdeps/arm/armv7/multiarch/memcpy.S | 76 - sysdeps/arm/armv7/multiarch/memcpy_impl.S | 728 -- sysdeps/arm/armv7/multiarch/memcpy_neon.S | 9 - sysdeps/arm/armv7/multiarch/memcpy_vfp.S | 7 - sysdeps/arm/armv7/strcmp.S | 519 - sysdeps/arm/atomic-machine.h | 155 - sysdeps/arm/backtrace.c | 126 - sysdeps/arm/bits/endian.h | 10 - sysdeps/arm/bits/fenv.h | 90 - sysdeps/arm/bits/link.h | 65 - sysdeps/arm/bits/setjmp.h | 36 - sysdeps/arm/bsd-_setjmp.S | 29 - sysdeps/arm/bsd-setjmp.S | 28 - sysdeps/arm/configure | 279 - sysdeps/arm/configure.ac | 112 - sysdeps/arm/crti.S | 95 - sysdeps/arm/crtn.S | 57 - sysdeps/arm/dl-irel.h | 52 - sysdeps/arm/dl-lookupcfg.h | 27 - sysdeps/arm/dl-machine.h | 698 -- sysdeps/arm/dl-sysdep.h | 25 - sysdeps/arm/dl-tls.h | 28 - sysdeps/arm/dl-tlsdesc.S | 218 - sysdeps/arm/dl-tlsdesc.h | 62 - sysdeps/arm/dl-trampoline.S | 212 - sysdeps/arm/e_sqrt.c | 45 - sysdeps/arm/e_sqrtf.c | 45 - sysdeps/arm/fclrexcpt.c | 43 - sysdeps/arm/fedisblxcpt.c | 43 - sysdeps/arm/feenablxcpt.c | 51 - sysdeps/arm/fegetenv.c | 39 - sysdeps/arm/fegetexcept.c | 37 - sysdeps/arm/fegetmode.c | 29 - sysdeps/arm/fegetround.c | 29 - sysdeps/arm/feholdexcpt.c | 35 - sysdeps/arm/fenv_private.h | 249 - sysdeps/arm/fesetenv.c | 66 - sysdeps/arm/fesetexcept.c | 38 - sysdeps/arm/fesetmode.c | 45 - sysdeps/arm/fesetround.c | 39 - sysdeps/arm/feupdateenv.c | 78 - sysdeps/arm/fgetexcptflg.c | 33 - sysdeps/arm/find_exidx.c | 79 - sysdeps/arm/fix-fp-int-convert-overflow.h | 34 - sysdeps/arm/fpu_control.h | 75 - sysdeps/arm/fraiseexcpt.c | 107 - sysdeps/arm/frame.h | 27 - sysdeps/arm/framestate.c | 1 - sysdeps/arm/fsetexcptflg.c | 45 - sysdeps/arm/ftestexcept.c | 32 - sysdeps/arm/gcc-compat.h | 35 - sysdeps/arm/gccframe.h | 21 - sysdeps/arm/get-rounding-mode.h | 42 - sysdeps/arm/gmp-mparam.h | 36 - sysdeps/arm/include/bits/setjmp.h | 36 - sysdeps/arm/jmpbuf-unwind.h | 45 - sysdeps/arm/ldsodefs.h | 40 - sysdeps/arm/libc-aeabi_read_tp.S | 1 - sysdeps/arm/libc-tls.c | 32 - sysdeps/arm/libm-test-ulps | 1690 --- sysdeps/arm/libm-test-ulps-name | 1 - sysdeps/arm/linkmap.h | 5 - sysdeps/arm/machine-gmon.h | 33 - sysdeps/arm/math-tests.h | 35 - sysdeps/arm/math_private.h | 11 - sysdeps/arm/memcpy.S | 320 - sysdeps/arm/memmove.S | 336 - sysdeps/arm/memset.S | 69 - sysdeps/arm/memusage.h | 20 - sysdeps/arm/nptl-aeabi_unwind_cpp_pr1.c | 1 - sysdeps/arm/nptl/Makefile | 33 - sysdeps/arm/nptl/bits/pthreadtypes-arch.h | 69 - sysdeps/arm/nptl/bits/semaphore.h | 34 - sysdeps/arm/nptl/pthreaddef.h | 41 - sysdeps/arm/nptl/tcb-offsets.sym | 10 - sysdeps/arm/nptl/tls.h | 127 - sysdeps/arm/preconfigure | 55 - sysdeps/arm/preconfigure.ac | 50 - sysdeps/arm/pt-arm-unwind-resume.S | 2 - sysdeps/arm/rt-aeabi_unwind_cpp_pr1.c | 1 - sysdeps/arm/rt-arm-unwind-resume.S | 1 - sysdeps/arm/rtld-global-offsets.sym | 7 - sysdeps/arm/s_fma.c | 5 - sysdeps/arm/s_fmaf.c | 5 - sysdeps/arm/setfpucw.c | 43 - sysdeps/arm/setjmp.S | 101 - sysdeps/arm/sfp-machine.h | 51 - sysdeps/arm/sotruss-lib.c | 49 - sysdeps/arm/stackinfo.h | 33 - sysdeps/arm/start.S | 148 - sysdeps/arm/static-stubs.c | 7 - sysdeps/arm/strlen.S | 77 - sysdeps/arm/sub_n.S | 2 - sysdeps/arm/submul_1.S | 68 - sysdeps/arm/sys/ucontext.h | 111 - sysdeps/arm/sysdep.h | 339 - sysdeps/arm/test-fpucw.c | 5 - sysdeps/arm/tls-macros.h | 72 - sysdeps/arm/tlsdesc.c | 160 - sysdeps/arm/tlsdesc.sym | 15 - sysdeps/arm/tst-armtlsdescextlazy.c | 1 - sysdeps/arm/tst-armtlsdescextlazymod.c | 1 - sysdeps/arm/tst-armtlsdescextnow.c | 1 - sysdeps/arm/tst-armtlsdescextnowmod.c | 1 - sysdeps/arm/tst-armtlsdescloc.c | 28 - sysdeps/arm/tst-armtlsdesclocmod.c | 44 - sysdeps/arm/tst-audit.h | 25 - sysdeps/arm/unwind-dw2-fde-glibc.c | 79 - sysdeps/arm/unwind-pe.c | 1 - sysdeps/arm/unwind-resume.h | 33 - sysdeps/arm/unwind.h | 278 - sysdeps/generic/Makefile | 28 - sysdeps/generic/_G_config.h | 58 - sysdeps/generic/_itoa.h | 105 - sysdeps/generic/a.out.h | 339 - sysdeps/generic/abort-instr.h | 31 - sysdeps/generic/aio_misc.h | 47 - sysdeps/generic/allocalim.h | 4 - sysdeps/generic/asm-syntax.h | 3 - sysdeps/generic/atomic-machine.h | 42 - sysdeps/generic/c++-types.data | 2 - sysdeps/generic/confstr.h | 4 - sysdeps/generic/device-nrs.h | 27 - sysdeps/generic/dirstream.h | 29 - sysdeps/generic/dl-cache.h | 104 - sysdeps/generic/dl-dtprocnum.h | 21 - sysdeps/generic/dl-dtv.h | 38 - sysdeps/generic/dl-fcntl.h | 21 - sysdeps/generic/dl-fileid.h | 46 - sysdeps/generic/dl-fptr.h | 45 - sysdeps/generic/dl-hash.h | 75 - sysdeps/generic/dl-irel.h | 29 - sysdeps/generic/dl-librecon.h | 25 - sysdeps/generic/dl-lookupcfg.h | 28 - sysdeps/generic/dl-machine.h | 133 - sysdeps/generic/dl-mman.h | 22 - sysdeps/generic/dl-osinfo.h | 59 - sysdeps/generic/dl-procinfo.c | 1 - sysdeps/generic/dl-procinfo.h | 42 - sysdeps/generic/dl-sysdep.h | 34 - sysdeps/generic/dl-tls.h | 2 - sysdeps/generic/dl-unistd.h | 30 - sysdeps/generic/dwarf2.h | 590 - sysdeps/generic/elide.h | 25 - sysdeps/generic/eloop-threshold.h | 72 - sysdeps/generic/entry.h | 5 - sysdeps/generic/errqueue.h | 7 - sysdeps/generic/exit-thread.h | 28 - sysdeps/generic/fd_to_filename.h | 25 - sysdeps/generic/fips-private.h | 36 - sysdeps/generic/fix-fp-int-compare-invalid.h | 27 - sysdeps/generic/fix-fp-int-convert-overflow.h | 35 - sysdeps/generic/fix-int-fp-convert-zero.h | 27 - sysdeps/generic/fork.h | 8 - sysdeps/generic/fpu_control.h | 38 - sysdeps/generic/frame.h | 23 - sysdeps/generic/framestate.c | 52 - sysdeps/generic/gcc-compat.h | 42 - sysdeps/generic/gccframe.h | 49 - sysdeps/generic/get-rounding-mode.h | 125 - sysdeps/generic/gmp-mparam.h | 27 - sysdeps/generic/hp-timing-common.h | 62 - sysdeps/generic/hp-timing.h | 40 - sysdeps/generic/ifreq.h | 43 - sysdeps/generic/ifunc-sel.h | 28 - sysdeps/generic/intr-msg.h | 15 - sysdeps/generic/inttypes.h | 434 - sysdeps/generic/ld.abilist | 0 sysdeps/generic/ldconfig.h | 94 - sysdeps/generic/ldsodefs.h | 1092 -- sysdeps/generic/libBrokenLocale.abilist | 0 sysdeps/generic/libanl.abilist | 0 sysdeps/generic/libc-lock.h | 140 - sysdeps/generic/libc-mmap.h | 26 - sysdeps/generic/libc-tsd.h | 60 - sysdeps/generic/libc.abilist | 0 sysdeps/generic/libcidn.abilist | 0 sysdeps/generic/libcrypt.abilist | 0 sysdeps/generic/libdl.abilist | 0 sysdeps/generic/libm-test-ulps | 5 - sysdeps/generic/libm-test-ulps-name | 1 - sysdeps/generic/libm.abilist | 0 sysdeps/generic/libnsl.abilist | 0 sysdeps/generic/libnss_compat.abilist | 0 sysdeps/generic/libnss_db.abilist | 0 sysdeps/generic/libnss_dns.abilist | 0 sysdeps/generic/libnss_files.abilist | 0 sysdeps/generic/libnss_hesiod.abilist | 0 sysdeps/generic/libnss_nis.abilist | 0 sysdeps/generic/libnss_nisplus.abilist | 0 sysdeps/generic/libpthread.abilist | 0 sysdeps/generic/libresolv.abilist | 0 sysdeps/generic/librt.abilist | 0 sysdeps/generic/libutil.abilist | 0 sysdeps/generic/linkmap.h | 4 - sysdeps/generic/local-setxid.h | 4 - sysdeps/generic/localplt.data | 18 - sysdeps/generic/machine-gmon.h | 47 - sysdeps/generic/machine-lock.h | 63 - sysdeps/generic/machine-sp.h | 35 - sysdeps/generic/malloc-machine.h | 41 - sysdeps/generic/malloc-sysdep.h | 28 - sysdeps/generic/math-tests-arch.h | 24 - sysdeps/generic/math-tests.h | 106 - sysdeps/generic/math-type-macros-double.h | 53 - sysdeps/generic/math-type-macros-float.h | 39 - sysdeps/generic/math-type-macros-float128.h | 42 - sysdeps/generic/math-type-macros-ldouble.h | 36 - sysdeps/generic/math-type-macros.h | 137 - sysdeps/generic/math_ldbl.h | 7 - sysdeps/generic/math_ldbl_opt.h | 14 - sysdeps/generic/math_private.h | 658 -- sysdeps/generic/math_private_calls.h | 124 - sysdeps/generic/memcopy.h | 202 - sysdeps/generic/memusage.h | 51 - sysdeps/generic/nan-high-order-bit.h | 27 - sysdeps/generic/net/if.h | 49 - sysdeps/generic/netinet/if_ether.h | 32 - sysdeps/generic/netinet/in_systm.h | 40 - sysdeps/generic/netinet/ip.h | 302 - sysdeps/generic/netinet/tcp.h | 108 - sysdeps/generic/nfs/nfs.h | 31 - sysdeps/generic/not-cancel.h | 54 - sysdeps/generic/nscd-types.h | 21 - sysdeps/generic/pagecopy.h | 37 - sysdeps/generic/paths.h | 75 - sysdeps/generic/profil-counter.h | 26 - sysdeps/generic/pty-private.h | 45 - sysdeps/generic/register-dump.h | 20 - sysdeps/generic/rtld-lowlevel.h | 1 - sysdeps/generic/safe-fatal.h | 37 - sysdeps/generic/sigcontextinfo.h | 26 - sysdeps/generic/siglist.h | 76 - sysdeps/generic/sigset-cvt-mask.h | 63 - sysdeps/generic/sigsetops.h | 77 - sysdeps/generic/stackguard-macros.h | 12 - sysdeps/generic/stackinfo.h | 20 - sysdeps/generic/stdint.h | 329 - sysdeps/generic/stdio-lock.h | 71 - sysdeps/generic/string_private.h | 21 - sysdeps/generic/symbol-hacks.h | 19 - sysdeps/generic/sys/ptrace.h | 137 - sysdeps/generic/sys/reboot.h | 9 - sysdeps/generic/sys/socketvar.h | 3 - sysdeps/generic/sys/swap.h | 32 - sysdeps/generic/sys/syscall.h | 2 - sysdeps/generic/sys/sysinfo.h | 40 - sysdeps/generic/sys/ttydefaults.h | 100 - sysdeps/generic/sys/ucontext.h | 44 - sysdeps/generic/sysdep-cancel.h | 8 - sysdeps/generic/sysdep.h | 97 - sysdeps/generic/thread_state.h | 46 - sysdeps/generic/tininess.h | 33 - sysdeps/generic/tls-macros.h | 12 - sysdeps/generic/tls.h | 74 - sysdeps/generic/tst-audit.h | 11 - sysdeps/generic/tst-stack-align.h | 34 - sysdeps/generic/unsecvars.h | 34 - sysdeps/generic/unwind-dw2-fde-glibc.c | 279 - sysdeps/generic/unwind-dw2-fde.c | 1079 -- sysdeps/generic/unwind-dw2-fde.h | 169 - sysdeps/generic/unwind-dw2.c | 1306 --- sysdeps/generic/unwind-pe.c | 5 - sysdeps/generic/unwind-pe.h | 305 - sysdeps/generic/unwind-resume.h | 33 - sysdeps/generic/unwind.h | 219 - sysdeps/generic/utmp-equal.h | 52 - sysdeps/gnu/Makefile | 89 - sysdeps/gnu/bits/ipc.h | 51 - sysdeps/gnu/bits/msq.h | 76 - sysdeps/gnu/bits/sem.h | 87 - sysdeps/gnu/bits/shm.h | 95 - sysdeps/gnu/bits/utmp.h | 123 - sysdeps/gnu/bits/utmpx.h | 102 - sysdeps/gnu/configure | 37 - sysdeps/gnu/configure.ac | 26 - sysdeps/gnu/errlist-compat.awk | 133 - sysdeps/gnu/errlist.awk | 110 - sysdeps/gnu/errlist.c | 1482 --- sysdeps/gnu/getutmp.c | 34 - sysdeps/gnu/getutmpx.c | 1 - sysdeps/gnu/glob64.c | 25 - sysdeps/gnu/ifaddrs.c | 164 - sysdeps/gnu/ldsodefs.h | 48 - sysdeps/gnu/net/if.h | 204 - sysdeps/gnu/netinet/ip_icmp.h | 282 - sysdeps/gnu/netinet/tcp.h | 324 - sysdeps/gnu/netinet/udp.h | 94 - sysdeps/gnu/rt-unwind-resume.c | 1 - sysdeps/gnu/siglist.c | 78 - sysdeps/gnu/sys/mtio.h | 276 - sysdeps/gnu/unwind-resume.c | 82 - sysdeps/gnu/updwtmp.c | 29 - sysdeps/gnu/utmp_file.c | 29 - sysdeps/gnu/utmpx.h | 125 - sysdeps/hppa/Makefile | 44 - sysdeps/hppa/Versions | 12 - sysdeps/hppa/__longjmp.c | 84 - sysdeps/hppa/abort-instr.h | 6 - sysdeps/hppa/add_n.S | 57 - sysdeps/hppa/bits/endian.h | 7 - sysdeps/hppa/bits/link.h | 56 - sysdeps/hppa/bits/setjmp.h | 60 - sysdeps/hppa/bsd-_setjmp.S | 38 - sysdeps/hppa/bsd-setjmp.S | 35 - sysdeps/hppa/configure | 32 - sysdeps/hppa/configure.ac | 21 - sysdeps/hppa/crti.S | 79 - sysdeps/hppa/crtn.S | 87 - sysdeps/hppa/dl-fptr.c | 368 - sysdeps/hppa/dl-fptr.h | 39 - sysdeps/hppa/dl-irel.h | 46 - sysdeps/hppa/dl-lookupcfg.h | 81 - sysdeps/hppa/dl-machine.h | 782 -- sysdeps/hppa/dl-symaddr.c | 36 - sysdeps/hppa/dl-tls.h | 28 - sysdeps/hppa/dl-trampoline.S | 287 - sysdeps/hppa/entry.h | 13 - sysdeps/hppa/fpu/bits/fenv.h | 99 - sysdeps/hppa/fpu/fclrexcpt.c | 36 - sysdeps/hppa/fpu/fedisblxcpt.c | 37 - sysdeps/hppa/fpu/feenablxcpt.c | 37 - sysdeps/hppa/fpu/fegetenv.c | 37 - sysdeps/hppa/fpu/fegetexcept.c | 33 - sysdeps/hppa/fpu/fegetmode.c | 27 - sysdeps/hppa/fpu/fegetround.c | 29 - sysdeps/hppa/fpu/feholdexcpt.c | 53 - sysdeps/hppa/fpu/fesetenv.c | 65 - sysdeps/hppa/fpu/fesetexcept.c | 35 - sysdeps/hppa/fpu/fesetmode.c | 36 - sysdeps/hppa/fpu/fesetround.c | 42 - sysdeps/hppa/fpu/feupdateenv.c | 55 - sysdeps/hppa/fpu/fgetexcptflg.c | 36 - sysdeps/hppa/fpu/fpu_control.h | 71 - sysdeps/hppa/fpu/fraiseexcpt.c | 103 - sysdeps/hppa/fpu/fsetexcptflg.c | 43 - sysdeps/hppa/fpu/ftestexcept.c | 34 - sysdeps/hppa/fpu/libm-test-ulps | 1764 --- sysdeps/hppa/fpu/libm-test-ulps-name | 1 - sysdeps/hppa/frame.h | 27 - sysdeps/hppa/gccframe.h | 22 - sysdeps/hppa/get-rounding-mode.h | 35 - sysdeps/hppa/hppa1.1/Implies | 3 - sysdeps/hppa/hppa1.1/addmul_1.S | 103 - sysdeps/hppa/hppa1.1/mul_1.S | 99 - sysdeps/hppa/hppa1.1/s_signbit.c | 34 - sysdeps/hppa/hppa1.1/submul_1.S | 112 - sysdeps/hppa/hppa1.1/udiv_qrnnd.S | 77 - sysdeps/hppa/jmpbuf-offsets.h | 19 - sysdeps/hppa/jmpbuf-unwind.h | 26 - sysdeps/hppa/ldsodefs.h | 41 - sysdeps/hppa/libc-tls.c | 32 - sysdeps/hppa/libgcc-compat.c | 42 - sysdeps/hppa/linkmap.h | 6 - sysdeps/hppa/lshift.S | 65 - sysdeps/hppa/machine-gmon.h | 24 - sysdeps/hppa/memusage.h | 21 - sysdeps/hppa/mp_clz_tab.c | 1 - sysdeps/hppa/nan-high-order-bit.h | 27 - sysdeps/hppa/nptl/Makefile | 20 - sysdeps/hppa/nptl/bits/pthreadtypes-arch.h | 89 - sysdeps/hppa/nptl/bits/semaphore.h | 31 - sysdeps/hppa/nptl/jmpbuf-unwind.h | 30 - sysdeps/hppa/nptl/pthread_spin_init.c | 44 - sysdeps/hppa/nptl/pthread_spin_unlock.c | 44 - sysdeps/hppa/nptl/pthreaddef.h | 33 - sysdeps/hppa/nptl/tcb-offsets.sym | 17 - sysdeps/hppa/nptl/tls.h | 161 - sysdeps/hppa/nptl/tst-oddstacklimit.c | 26 - sysdeps/hppa/preconfigure | 6 - sysdeps/hppa/rshift.S | 62 - sysdeps/hppa/setjmp.S | 73 - sysdeps/hppa/shlib-versions | 1 - sysdeps/hppa/sotruss-lib.c | 51 - sysdeps/hppa/stackinfo.h | 33 - sysdeps/hppa/start.S | 157 - sysdeps/hppa/sub_n.S | 58 - sysdeps/hppa/sysdep.h | 74 - sysdeps/hppa/tininess.h | 1 - sysdeps/hppa/tls-macros.h | 114 - sysdeps/hppa/tst-audit.h | 25 - sysdeps/hppa/udiv_qrnnd.S | 285 - sysdeps/i386/Implies | 5 - sysdeps/i386/Makefile | 103 - sysdeps/i386/Versions | 35 - sysdeps/i386/____longjmp_chk.S | 1 - sysdeps/i386/__longjmp.S | 72 - sysdeps/i386/abort-instr.h | 2 - sysdeps/i386/add_n.S | 111 - sysdeps/i386/addmul_1.S | 86 - sysdeps/i386/asm-syntax.h | 24 - sysdeps/i386/atomic-machine.h | 545 - sysdeps/i386/backtrace.c | 163 - sysdeps/i386/bcopy.S | 4 - sysdeps/i386/bsd-_setjmp.S | 56 - sysdeps/i386/bsd-setjmp.S | 66 - sysdeps/i386/bzero.S | 5 - sysdeps/i386/cacheinfo.c | 3 - sysdeps/i386/configure | 84 - sysdeps/i386/configure.ac | 52 - sysdeps/i386/crti.S | 84 - sysdeps/i386/crtn.S | 47 - sysdeps/i386/dl-irel.h | 51 - sysdeps/i386/dl-lookupcfg.h | 32 - sysdeps/i386/dl-machine.h | 757 -- sysdeps/i386/dl-procinfo.c | 65 - sysdeps/i386/dl-tls.h | 61 - sysdeps/i386/dl-tlsdesc.S | 285 - sysdeps/i386/dl-tlsdesc.h | 61 - sysdeps/i386/dl-trampoline.S | 215 - sysdeps/i386/ffs.c | 50 - sysdeps/i386/fpu/Implies | 1 - sysdeps/i386/fpu/Versions | 6 - sysdeps/i386/fpu/doasin.c | 1 - sysdeps/i386/fpu/e_acos.S | 25 - sysdeps/i386/fpu/e_acosf.S | 24 - sysdeps/i386/fpu/e_acosh.S | 101 - sysdeps/i386/fpu/e_acoshf.S | 101 - sysdeps/i386/fpu/e_acoshl.S | 107 - sysdeps/i386/fpu/e_acosl.c | 29 - sysdeps/i386/fpu/e_asin.S | 38 - sysdeps/i386/fpu/e_asinf.S | 39 - sysdeps/i386/fpu/e_atan2.S | 30 - sysdeps/i386/fpu/e_atan2f.S | 30 - sysdeps/i386/fpu/e_atan2l.c | 19 - sysdeps/i386/fpu/e_atanh.S | 112 - sysdeps/i386/fpu/e_atanhf.S | 109 - sysdeps/i386/fpu/e_atanhl.S | 127 - sysdeps/i386/fpu/e_exp.S | 73 - sysdeps/i386/fpu/e_exp10.S | 53 - sysdeps/i386/fpu/e_exp10f.S | 53 - sysdeps/i386/fpu/e_exp10l.S | 2 - sysdeps/i386/fpu/e_exp2.S | 52 - sysdeps/i386/fpu/e_exp2f.S | 52 - sysdeps/i386/fpu/e_exp2l.S | 60 - sysdeps/i386/fpu/e_expf.S | 74 - sysdeps/i386/fpu/e_expl.S | 226 - sysdeps/i386/fpu/e_fmod.S | 18 - sysdeps/i386/fpu/e_fmodf.S | 19 - sysdeps/i386/fpu/e_fmodl.c | 23 - sysdeps/i386/fpu/e_hypot.S | 75 - sysdeps/i386/fpu/e_hypotf.S | 64 - sysdeps/i386/fpu/e_ilogb.S | 42 - sysdeps/i386/fpu/e_ilogbf.S | 42 - sysdeps/i386/fpu/e_ilogbl.S | 43 - sysdeps/i386/fpu/e_log.S | 92 - sysdeps/i386/fpu/e_log10.S | 68 - sysdeps/i386/fpu/e_log10f.S | 69 - sysdeps/i386/fpu/e_log10l.S | 71 - sysdeps/i386/fpu/e_log2.S | 69 - sysdeps/i386/fpu/e_log2f.S | 69 - sysdeps/i386/fpu/e_log2l.S | 70 - sysdeps/i386/fpu/e_logf.S | 93 - sysdeps/i386/fpu/e_logl.S | 97 - sysdeps/i386/fpu/e_pow.S | 456 - sysdeps/i386/fpu/e_powf.S | 392 - sysdeps/i386/fpu/e_powl.S | 459 - sysdeps/i386/fpu/e_rem_pio2.c | 3 - sysdeps/i386/fpu/e_remainder.S | 18 - sysdeps/i386/fpu/e_remainderf.S | 18 - sysdeps/i386/fpu/e_remainderl.S | 20 - sysdeps/i386/fpu/e_scalb.S | 100 - sysdeps/i386/fpu/e_scalbf.S | 102 - sysdeps/i386/fpu/e_scalbl.S | 90 - sysdeps/i386/fpu/e_sqrt.S | 23 - sysdeps/i386/fpu/e_sqrtf.S | 13 - sysdeps/i386/fpu/e_sqrtl.c | 20 - sysdeps/i386/fpu/fclrexcpt.c | 69 - sysdeps/i386/fpu/fedisblxcpt.c | 54 - sysdeps/i386/fpu/feenablxcpt.c | 54 - sysdeps/i386/fpu/fegetenv.c | 49 - sysdeps/i386/fpu/fegetexcept.c | 31 - sysdeps/i386/fpu/fegetmode.c | 32 - sysdeps/i386/fpu/fegetround.c | 33 - sysdeps/i386/fpu/feholdexcpt.c | 50 - sysdeps/i386/fpu/fenv_private.h | 501 - sysdeps/i386/fpu/fesetenv.c | 131 - sysdeps/i386/fpu/fesetexcept.c | 31 - sysdeps/i386/fpu/fesetmode.c | 54 - sysdeps/i386/fpu/fesetround.c | 54 - sysdeps/i386/fpu/feupdateenv.c | 60 - sysdeps/i386/fpu/fgetexcptflg.c | 57 - sysdeps/i386/fpu/fraiseexcpt.c | 124 - sysdeps/i386/fpu/fsetexcptflg.c | 69 - sysdeps/i386/fpu/ftestexcept.c | 40 - sysdeps/i386/fpu/halfulp.c | 1 - sysdeps/i386/fpu/i386-math-asm.h | 340 - sysdeps/i386/fpu/libm-test-ulps | 2202 ---- sysdeps/i386/fpu/libm-test-ulps-name | 1 - sysdeps/i386/fpu/math-tests.h | 27 - sysdeps/i386/fpu/math_private.h | 7 - sysdeps/i386/fpu/mpatan.c | 1 - sysdeps/i386/fpu/mpatan2.c | 1 - sysdeps/i386/fpu/mpexp.c | 1 - sysdeps/i386/fpu/mplog.c | 1 - sysdeps/i386/fpu/mpsqrt.c | 1 - sysdeps/i386/fpu/s_asinh.S | 139 - sysdeps/i386/fpu/s_asinhf.S | 139 - sysdeps/i386/fpu/s_asinhl.S | 144 - sysdeps/i386/fpu/s_atan.S | 30 - sysdeps/i386/fpu/s_atanf.S | 30 - sysdeps/i386/fpu/s_atanl.c | 22 - sysdeps/i386/fpu/s_cbrt.S | 200 - sysdeps/i386/fpu/s_cbrtf.S | 177 - sysdeps/i386/fpu/s_cbrtl.S | 229 - sysdeps/i386/fpu/s_ceil.S | 34 - sysdeps/i386/fpu/s_ceilf.S | 34 - sysdeps/i386/fpu/s_ceill.S | 40 - sysdeps/i386/fpu/s_copysign.S | 20 - sysdeps/i386/fpu/s_copysignf.S | 20 - sysdeps/i386/fpu/s_copysignl.S | 21 - sysdeps/i386/fpu/s_expm1.S | 113 - sysdeps/i386/fpu/s_expm1f.S | 113 - sysdeps/i386/fpu/s_expm1l.S | 2 - sysdeps/i386/fpu/s_fabs.S | 9 - sysdeps/i386/fpu/s_fabsf.S | 9 - sysdeps/i386/fpu/s_fabsl.S | 9 - sysdeps/i386/fpu/s_fdim.c | 50 - sysdeps/i386/fpu/s_finite.S | 17 - sysdeps/i386/fpu/s_finitef.S | 16 - sysdeps/i386/fpu/s_finitel.S | 15 - sysdeps/i386/fpu/s_floor.S | 34 - sysdeps/i386/fpu/s_floorf.S | 34 - sysdeps/i386/fpu/s_floorl.S | 40 - sysdeps/i386/fpu/s_fmax.S | 43 - sysdeps/i386/fpu/s_fmaxf.S | 43 - sysdeps/i386/fpu/s_fmaxl.S | 71 - sysdeps/i386/fpu/s_fmin.S | 43 - sysdeps/i386/fpu/s_fminf.S | 43 - sysdeps/i386/fpu/s_fminl.S | 71 - sysdeps/i386/fpu/s_fpclassifyl.c | 42 - sysdeps/i386/fpu/s_frexp.S | 83 - sysdeps/i386/fpu/s_frexpf.S | 80 - sysdeps/i386/fpu/s_frexpl.S | 92 - sysdeps/i386/fpu/s_isinfl.c | 32 - sysdeps/i386/fpu/s_isnanl.c | 43 - sysdeps/i386/fpu/s_llrint.S | 36 - sysdeps/i386/fpu/s_llrintf.S | 36 - sysdeps/i386/fpu/s_llrintl.S | 36 - sysdeps/i386/fpu/s_log1p.S | 67 - sysdeps/i386/fpu/s_log1pf.S | 67 - sysdeps/i386/fpu/s_log1pl.S | 76 - sysdeps/i386/fpu/s_logb.S | 16 - sysdeps/i386/fpu/s_logbf.S | 16 - sysdeps/i386/fpu/s_logbl.c | 19 - sysdeps/i386/fpu/s_lrint.S | 34 - sysdeps/i386/fpu/s_lrintf.S | 34 - sysdeps/i386/fpu/s_lrintl.S | 34 - sysdeps/i386/fpu/s_nearbyint.S | 20 - sysdeps/i386/fpu/s_nearbyintf.S | 20 - sysdeps/i386/fpu/s_nearbyintl.S | 23 - sysdeps/i386/fpu/s_nextafterl.c | 125 - sysdeps/i386/fpu/s_nexttoward.c | 93 - sysdeps/i386/fpu/s_nexttowardf.c | 77 - sysdeps/i386/fpu/s_remquo.S | 45 - sysdeps/i386/fpu/s_remquof.S | 45 - sysdeps/i386/fpu/s_remquol.S | 45 - sysdeps/i386/fpu/s_rint.S | 15 - sysdeps/i386/fpu/s_rintf.S | 15 - sysdeps/i386/fpu/s_rintl.c | 18 - sysdeps/i386/fpu/s_scalbln.c | 2 - sysdeps/i386/fpu/s_scalblnf.c | 2 - sysdeps/i386/fpu/s_scalblnl.c | 2 - sysdeps/i386/fpu/s_scalbn.S | 24 - sysdeps/i386/fpu/s_scalbnf.S | 24 - sysdeps/i386/fpu/s_scalbnl.S | 23 - sysdeps/i386/fpu/s_significand.S | 16 - sysdeps/i386/fpu/s_significandf.S | 16 - sysdeps/i386/fpu/s_significandl.c | 19 - sysdeps/i386/fpu/s_trunc.S | 37 - sysdeps/i386/fpu/s_truncf.S | 37 - sysdeps/i386/fpu/s_truncl.S | 40 - sysdeps/i386/fpu/slowexp.c | 1 - sysdeps/i386/fpu/slowpow.c | 1 - sysdeps/i386/fpu/t_exp.c | 1 - sysdeps/i386/fpu/w_sqrt_compat.c | 8 - sysdeps/i386/gccframe.h | 27 - sysdeps/i386/gmp-mparam.h | 28 - sysdeps/i386/htonl.S | 34 - sysdeps/i386/htons.S | 35 - sysdeps/i386/i386-mcount.S | 79 - sysdeps/i386/i586/add_n.S | 143 - sysdeps/i386/i586/addmul_1.S | 94 - sysdeps/i386/i586/bzero.S | 4 - sysdeps/i386/i586/init-arch.h | 19 - sysdeps/i386/i586/lshift.S | 255 - sysdeps/i386/i586/memcopy.h | 95 - sysdeps/i386/i586/memcpy.S | 124 - sysdeps/i386/i586/mempcpy.S | 8 - sysdeps/i386/i586/memset.S | 121 - sysdeps/i386/i586/memusage.h | 1 - sysdeps/i386/i586/mul_1.S | 90 - sysdeps/i386/i586/rshift.S | 255 - sysdeps/i386/i586/stpcpy.S | 8 - sysdeps/i386/i586/strchr.S | 348 - sysdeps/i386/i586/strcpy.S | 169 - sysdeps/i386/i586/strlen.S | 182 - sysdeps/i386/i586/sub_n.S | 143 - sysdeps/i386/i586/submul_1.S | 94 - sysdeps/i386/i686/Makefile | 12 - sysdeps/i386/i686/add_n.S | 110 - sysdeps/i386/i686/bcopy.S | 3 - sysdeps/i386/i686/bzero.S | 4 - sysdeps/i386/i686/dl-hash.h | 79 - sysdeps/i386/i686/ffs.c | 48 - sysdeps/i386/i686/fpu/e_log.S | 29 - sysdeps/i386/i686/fpu/e_logf.S | 30 - sysdeps/i386/i686/fpu/e_logl.S | 94 - sysdeps/i386/i686/fpu/multiarch/Makefile | 4 - sysdeps/i386/i686/fpu/multiarch/e_expf-ia32.S | 22 - sysdeps/i386/i686/fpu/multiarch/e_expf-sse2.S | 325 - sysdeps/i386/i686/fpu/multiarch/e_expf.c | 37 - sysdeps/i386/i686/fpu/multiarch/libm-test-ulps | 2188 ---- .../i386/i686/fpu/multiarch/libm-test-ulps-name | 1 - sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S | 553 - sysdeps/i386/i686/fpu/multiarch/s_cosf.c | 29 - sysdeps/i386/i686/fpu/multiarch/s_sincosf-sse2.S | 586 - sysdeps/i386/i686/fpu/multiarch/s_sincosf.c | 30 - sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S | 566 - sysdeps/i386/i686/fpu/multiarch/s_sinf.c | 28 - sysdeps/i386/i686/fpu/s_fmax.S | 39 - sysdeps/i386/i686/fpu/s_fmaxf.S | 39 - sysdeps/i386/i686/fpu/s_fmaxl.S | 58 - sysdeps/i386/i686/fpu/s_fmin.S | 37 - sysdeps/i386/i686/fpu/s_fminf.S | 37 - sysdeps/i386/i686/fpu/s_fminl.S | 58 - sysdeps/i386/i686/hp-timing.h | 42 - sysdeps/i386/i686/init-arch.h | 19 - sysdeps/i386/i686/memcmp.S | 408 - sysdeps/i386/i686/memcpy.S | 98 - sysdeps/i386/i686/memmove.S | 120 - sysdeps/i386/i686/mempcpy.S | 65 - sysdeps/i386/i686/memset.S | 100 - sysdeps/i386/i686/memusage.h | 21 - sysdeps/i386/i686/multiarch/Makefile | 44 - sysdeps/i386/i686/multiarch/bcopy-sse2-unaligned.S | 4 - sysdeps/i386/i686/multiarch/bcopy-ssse3-rep.S | 4 - sysdeps/i386/i686/multiarch/bcopy-ssse3.S | 4 - sysdeps/i386/i686/multiarch/bcopy.S | 59 - sysdeps/i386/i686/multiarch/bzero-sse2-rep.S | 3 - sysdeps/i386/i686/multiarch/bzero-sse2.S | 3 - sysdeps/i386/i686/multiarch/bzero.S | 62 - sysdeps/i386/i686/multiarch/ifunc-impl-list.c | 376 - sysdeps/i386/i686/multiarch/locale-defines.sym | 11 - sysdeps/i386/i686/multiarch/memchr-sse2-bsf.S | 502 - sysdeps/i386/i686/multiarch/memchr-sse2.S | 709 -- sysdeps/i386/i686/multiarch/memchr.S | 65 - sysdeps/i386/i686/multiarch/memcmp-sse4.S | 1225 -- sysdeps/i386/i686/multiarch/memcmp-ssse3.S | 2157 ---- sysdeps/i386/i686/multiarch/memcmp.S | 62 - .../i386/i686/multiarch/memcpy-sse2-unaligned.S | 681 -- sysdeps/i386/i686/multiarch/memcpy-ssse3-rep.S | 1809 --- sysdeps/i386/i686/multiarch/memcpy-ssse3.S | 3162 ------ sysdeps/i386/i686/multiarch/memcpy.S | 78 - sysdeps/i386/i686/multiarch/memcpy_chk.S | 50 - .../i386/i686/multiarch/memmove-sse2-unaligned.S | 4 - sysdeps/i386/i686/multiarch/memmove-ssse3-rep.S | 4 - sysdeps/i386/i686/multiarch/memmove-ssse3.S | 4 - sysdeps/i386/i686/multiarch/memmove.S | 89 - sysdeps/i386/i686/multiarch/memmove_chk.S | 94 - .../i386/i686/multiarch/mempcpy-sse2-unaligned.S | 4 - sysdeps/i386/i686/multiarch/mempcpy-ssse3-rep.S | 4 - sysdeps/i386/i686/multiarch/mempcpy-ssse3.S | 4 - sysdeps/i386/i686/multiarch/mempcpy.S | 81 - sysdeps/i386/i686/multiarch/mempcpy_chk.S | 50 - sysdeps/i386/i686/multiarch/memrchr-c.c | 7 - sysdeps/i386/i686/multiarch/memrchr-sse2-bsf.S | 417 - sysdeps/i386/i686/multiarch/memrchr-sse2.S | 724 -- sysdeps/i386/i686/multiarch/memrchr.S | 45 - sysdeps/i386/i686/multiarch/memset-sse2-rep.S | 811 -- sysdeps/i386/i686/multiarch/memset-sse2.S | 860 -- sysdeps/i386/i686/multiarch/memset.S | 75 - sysdeps/i386/i686/multiarch/memset_chk.S | 82 - sysdeps/i386/i686/multiarch/rawmemchr-sse2-bsf.S | 3 - sysdeps/i386/i686/multiarch/rawmemchr-sse2.S | 3 - sysdeps/i386/i686/multiarch/rawmemchr.S | 65 - sysdeps/i386/i686/multiarch/rtld-strnlen.c | 1 - sysdeps/i386/i686/multiarch/s_fma-fma.c | 27 - sysdeps/i386/i686/multiarch/s_fma.c | 34 - sysdeps/i386/i686/multiarch/s_fmaf-fma.c | 27 - sysdeps/i386/i686/multiarch/s_fmaf.c | 34 - sysdeps/i386/i686/multiarch/sched_cpucount.c | 1 - sysdeps/i386/i686/multiarch/stpcpy-sse2.S | 3 - sysdeps/i386/i686/multiarch/stpcpy-ssse3.S | 3 - sysdeps/i386/i686/multiarch/stpcpy.S | 9 - sysdeps/i386/i686/multiarch/stpncpy-sse2.S | 4 - sysdeps/i386/i686/multiarch/stpncpy-ssse3.S | 4 - sysdeps/i386/i686/multiarch/stpncpy.S | 8 - sysdeps/i386/i686/multiarch/strcasecmp-c.c | 12 - sysdeps/i386/i686/multiarch/strcasecmp.S | 39 - sysdeps/i386/i686/multiarch/strcasecmp_l-c.c | 13 - sysdeps/i386/i686/multiarch/strcasecmp_l-sse4.S | 2 - sysdeps/i386/i686/multiarch/strcasecmp_l-ssse3.S | 2 - sysdeps/i386/i686/multiarch/strcasecmp_l.S | 7 - sysdeps/i386/i686/multiarch/strcat-sse2.S | 1245 --- sysdeps/i386/i686/multiarch/strcat-ssse3.S | 572 - sysdeps/i386/i686/multiarch/strcat.S | 92 - sysdeps/i386/i686/multiarch/strchr-sse2-bsf.S | 158 - sysdeps/i386/i686/multiarch/strchr-sse2.S | 348 - sysdeps/i386/i686/multiarch/strchr.S | 57 - sysdeps/i386/i686/multiarch/strcmp-sse4.S | 804 -- sysdeps/i386/i686/multiarch/strcmp-ssse3.S | 2810 ----- sysdeps/i386/i686/multiarch/strcmp.S | 95 - sysdeps/i386/i686/multiarch/strcpy-sse2.S | 2250 ---- sysdeps/i386/i686/multiarch/strcpy-ssse3.S | 3901 ------- sysdeps/i386/i686/multiarch/strcpy.S | 116 - sysdeps/i386/i686/multiarch/strcspn-c.c | 2 - sysdeps/i386/i686/multiarch/strcspn.S | 75 - sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S | 125 - sysdeps/i386/i686/multiarch/strlen-sse2.S | 695 -- sysdeps/i386/i686/multiarch/strlen.S | 60 - sysdeps/i386/i686/multiarch/strncase-c.c | 8 - sysdeps/i386/i686/multiarch/strncase.S | 39 - sysdeps/i386/i686/multiarch/strncase_l-c.c | 13 - sysdeps/i386/i686/multiarch/strncase_l-sse4.S | 2 - sysdeps/i386/i686/multiarch/strncase_l-ssse3.S | 2 - sysdeps/i386/i686/multiarch/strncase_l.S | 7 - sysdeps/i386/i686/multiarch/strncat-c.c | 8 - sysdeps/i386/i686/multiarch/strncat-sse2.S | 4 - sysdeps/i386/i686/multiarch/strncat-ssse3.S | 4 - sysdeps/i386/i686/multiarch/strncat.S | 5 - sysdeps/i386/i686/multiarch/strncmp-c.c | 8 - sysdeps/i386/i686/multiarch/strncmp-sse4.S | 5 - sysdeps/i386/i686/multiarch/strncmp-ssse3.S | 5 - sysdeps/i386/i686/multiarch/strncmp.S | 5 - sysdeps/i386/i686/multiarch/strncpy-c.c | 8 - sysdeps/i386/i686/multiarch/strncpy-sse2.S | 3 - sysdeps/i386/i686/multiarch/strncpy-ssse3.S | 3 - sysdeps/i386/i686/multiarch/strncpy.S | 5 - sysdeps/i386/i686/multiarch/strnlen-c.c | 10 - sysdeps/i386/i686/multiarch/strnlen-sse2.S | 3 - sysdeps/i386/i686/multiarch/strnlen.S | 37 - sysdeps/i386/i686/multiarch/strpbrk-c.c | 2 - sysdeps/i386/i686/multiarch/strpbrk.S | 5 - sysdeps/i386/i686/multiarch/strrchr-sse2-bsf.S | 282 - sysdeps/i386/i686/multiarch/strrchr-sse2.S | 708 -- sysdeps/i386/i686/multiarch/strrchr.S | 57 - sysdeps/i386/i686/multiarch/strspn-c.c | 2 - sysdeps/i386/i686/multiarch/strspn.S | 56 - sysdeps/i386/i686/multiarch/test-multiarch.c | 1 - sysdeps/i386/i686/multiarch/varshift.c | 1 - sysdeps/i386/i686/multiarch/varshift.h | 1 - sysdeps/i386/i686/multiarch/wcschr-c.c | 22 - sysdeps/i386/i686/multiarch/wcschr-sse2.S | 219 - sysdeps/i386/i686/multiarch/wcschr.S | 36 - sysdeps/i386/i686/multiarch/wcscmp-c.c | 14 - sysdeps/i386/i686/multiarch/wcscmp-sse2.S | 1018 -- sysdeps/i386/i686/multiarch/wcscmp.S | 39 - sysdeps/i386/i686/multiarch/wcscpy-c.c | 5 - sysdeps/i386/i686/multiarch/wcscpy-ssse3.S | 600 - sysdeps/i386/i686/multiarch/wcscpy.S | 36 - sysdeps/i386/i686/multiarch/wcslen-c.c | 9 - sysdeps/i386/i686/multiarch/wcslen-sse2.S | 193 - sysdeps/i386/i686/multiarch/wcslen.S | 37 - sysdeps/i386/i686/multiarch/wcsrchr-c.c | 5 - sysdeps/i386/i686/multiarch/wcsrchr-sse2.S | 354 - sysdeps/i386/i686/multiarch/wcsrchr.S | 35 - sysdeps/i386/i686/multiarch/wmemcmp-c.c | 9 - sysdeps/i386/i686/multiarch/wmemcmp-sse4.S | 4 - sysdeps/i386/i686/multiarch/wmemcmp-ssse3.S | 4 - sysdeps/i386/i686/multiarch/wmemcmp.S | 40 - sysdeps/i386/i686/nptl/tls.h | 35 - sysdeps/i386/i686/pthread_spin_trylock.S | 20 - sysdeps/i386/i686/stack-aliasing.h | 23 - sysdeps/i386/i686/strcmp.S | 52 - sysdeps/i386/i686/tst-stack-align.h | 44 - sysdeps/i386/i786/Implies | 2 - sysdeps/i386/init-arch.h | 19 - sysdeps/i386/jmpbuf-offsets.h | 25 - sysdeps/i386/jmpbuf-unwind.h | 47 - sysdeps/i386/ldbl2mpn.c | 120 - sysdeps/i386/ldsodefs.h | 41 - sysdeps/i386/link-defines.sym | 20 - sysdeps/i386/lshift.S | 103 - sysdeps/i386/machine-gmon.h | 40 - sysdeps/i386/memchr.S | 322 - sysdeps/i386/memcmp.S | 73 - sysdeps/i386/memcopy.h | 92 - sysdeps/i386/memcpy.S | 95 - sysdeps/i386/memcpy_chk.S | 34 - sysdeps/i386/memmove.S | 4 - sysdeps/i386/memmove_chk.S | 33 - sysdeps/i386/mempcpy.S | 7 - sysdeps/i386/mempcpy_chk.S | 33 - sysdeps/i386/memset.S | 68 - sysdeps/i386/memset_chk.S | 33 - sysdeps/i386/memusage.h | 20 - sysdeps/i386/mp_clz_tab.c | 1 - sysdeps/i386/mul_1.S | 86 - sysdeps/i386/nptl/Makefile | 26 - sysdeps/i386/nptl/pthread_spin_init.c | 19 - sysdeps/i386/nptl/pthread_spin_lock.S | 37 - sysdeps/i386/nptl/pthread_spin_unlock.S | 31 - sysdeps/i386/nptl/pthreaddef.h | 40 - sysdeps/i386/nptl/tcb-offsets.sym | 17 - sysdeps/i386/nptl/tls.h | 435 - sysdeps/i386/preconfigure | 5 - sysdeps/i386/pthread_spin_trylock.S | 46 - sysdeps/i386/rawmemchr.S | 222 - sysdeps/i386/rshift.S | 105 - sysdeps/i386/setfpucw.c | 54 - sysdeps/i386/setjmp.S | 58 - sysdeps/i386/stackguard-macros.h | 12 - sysdeps/i386/stackinfo.h | 43 - sysdeps/i386/start.S | 139 - sysdeps/i386/stpcpy.S | 88 - sysdeps/i386/stpncpy.S | 147 - sysdeps/i386/strcat.S | 265 - sysdeps/i386/strchr.S | 290 - sysdeps/i386/strchrnul.S | 278 - sysdeps/i386/strcspn.S | 240 - sysdeps/i386/string-inlines.c | 47 - sysdeps/i386/strlen.S | 132 - sysdeps/i386/strlen.c | 35 - sysdeps/i386/strpbrk.S | 243 - sysdeps/i386/strrchr.S | 334 - sysdeps/i386/strspn.S | 240 - sysdeps/i386/sub_n.S | 111 - sysdeps/i386/submul_1.S | 86 - sysdeps/i386/symbol-hacks.h | 21 - sysdeps/i386/sys/ucontext.h | 139 - sysdeps/i386/sysdep.h | 159 - sysdeps/i386/tls-macros.h | 78 - sysdeps/i386/tlsdesc.c | 268 - sysdeps/i386/tlsdesc.sym | 17 - sysdeps/i386/tst-audit.h | 25 - sysdeps/i386/tst-audit3.c | 37 - sysdeps/i386/tst-audit3.h | 20 - sysdeps/i386/tst-auditmod3a.c | 38 - sysdeps/i386/tst-auditmod3b.c | 186 - sysdeps/i386/tst-ld-sse-use.sh | 103 - sysdeps/i386/tst-stack-align.h | 41 - sysdeps/ia64/Implies | 5 - sysdeps/ia64/Makeconfig | 2 - sysdeps/ia64/Makefile | 20 - sysdeps/ia64/Versions | 21 - sysdeps/ia64/_mcount.S | 91 - sysdeps/ia64/abort-instr.h | 3 - sysdeps/ia64/atomic-machine.h | 122 - sysdeps/ia64/backtrace.c | 1 - sysdeps/ia64/bcopy.S | 10 - sysdeps/ia64/bits/byteswap-16.h | 42 - sysdeps/ia64/bits/byteswap.h | 100 - sysdeps/ia64/bits/fenv.h | 104 - sysdeps/ia64/bits/fp-logb.h | 24 - sysdeps/ia64/bits/huge_vall.h | 41 - sysdeps/ia64/bits/link.h | 62 - sysdeps/ia64/bits/xtitypes.h | 33 - sysdeps/ia64/bzero.S | 314 - sysdeps/ia64/configure | 6 - sysdeps/ia64/configure.ac | 7 - sysdeps/ia64/crti.S | 160 - sysdeps/ia64/crtn.S | 69 - sysdeps/ia64/dl-dtprocnum.h | 21 - sysdeps/ia64/dl-fptr.h | 45 - sysdeps/ia64/dl-lookupcfg.h | 76 - sysdeps/ia64/dl-machine.h | 511 - sysdeps/ia64/dl-sysdep.h | 23 - sysdeps/ia64/dl-tls.h | 30 - sysdeps/ia64/dl-trampoline.S | 538 - sysdeps/ia64/entry.h | 13 - sysdeps/ia64/fpu/Makefile | 34 - sysdeps/ia64/fpu/README | 50 - sysdeps/ia64/fpu/Versions | 10 - sysdeps/ia64/fpu/bits/math-finite.h | 24 - sysdeps/ia64/fpu/bits/mathinline.h | 53 - sysdeps/ia64/fpu/branred.c | 1 - sysdeps/ia64/fpu/doasin.c | 1 - sysdeps/ia64/fpu/dosincos.c | 1 - sysdeps/ia64/fpu/e_acos.S | 878 -- sysdeps/ia64/fpu/e_acosf.S | 694 -- sysdeps/ia64/fpu/e_acosh.S | 1202 -- sysdeps/ia64/fpu/e_acoshf.S | 1030 -- sysdeps/ia64/fpu/e_acoshl.S | 1712 --- sysdeps/ia64/fpu/e_acosl.S | 2546 ----- sysdeps/ia64/fpu/e_asin.S | 854 -- sysdeps/ia64/fpu/e_asinf.S | 675 -- sysdeps/ia64/fpu/e_asinl.S | 2523 ----- sysdeps/ia64/fpu/e_atan2.S | 1049 -- sysdeps/ia64/fpu/e_atan2f.S | 900 -- sysdeps/ia64/fpu/e_atan2l.c | 1 - sysdeps/ia64/fpu/e_atanh.S | 1071 -- sysdeps/ia64/fpu/e_atanhf.S | 845 -- sysdeps/ia64/fpu/e_atanhl.S | 1156 -- sysdeps/ia64/fpu/e_cosh.S | 866 -- sysdeps/ia64/fpu/e_coshf.S | 711 -- sysdeps/ia64/fpu/e_coshl.S | 1095 -- sysdeps/ia64/fpu/e_exp.S | 793 -- sysdeps/ia64/fpu/e_exp10.S | 605 - sysdeps/ia64/fpu/e_exp10f.S | 557 - sysdeps/ia64/fpu/e_exp10l.S | 810 -- sysdeps/ia64/fpu/e_exp2.S | 564 - sysdeps/ia64/fpu/e_exp2f.S | 539 - sysdeps/ia64/fpu/e_exp2l.S | 807 -- sysdeps/ia64/fpu/e_expf.S | 716 -- sysdeps/ia64/fpu/e_expl.c | 1 - sysdeps/ia64/fpu/e_fmod.S | 555 - sysdeps/ia64/fpu/e_fmodf.S | 569 - sysdeps/ia64/fpu/e_fmodl.S | 672 -- sysdeps/ia64/fpu/e_gamma_r.c | 1 - sysdeps/ia64/fpu/e_gammaf_r.c | 1 - sysdeps/ia64/fpu/e_gammal_r.c | 1 - sysdeps/ia64/fpu/e_hypot.S | 438 - sysdeps/ia64/fpu/e_hypotf.S | 394 - sysdeps/ia64/fpu/e_hypotl.S | 475 - sysdeps/ia64/fpu/e_ilogbl.S | 268 - sysdeps/ia64/fpu/e_lgamma_r.c | 71 - sysdeps/ia64/fpu/e_lgammaf_r.c | 71 - sysdeps/ia64/fpu/e_lgammal_r.c | 70 - sysdeps/ia64/fpu/e_log.S | 1728 --- sysdeps/ia64/fpu/e_log10.c | 1 - sysdeps/ia64/fpu/e_log10f.c | 1 - sysdeps/ia64/fpu/e_log10l.c | 1 - sysdeps/ia64/fpu/e_log2.S | 709 -- sysdeps/ia64/fpu/e_log2f.S | 547 - sysdeps/ia64/fpu/e_log2l.S | 815 -- sysdeps/ia64/fpu/e_logf.S | 1158 -- sysdeps/ia64/fpu/e_logl.S | 1200 -- sysdeps/ia64/fpu/e_pow.S | 2296 ---- sysdeps/ia64/fpu/e_powf.S | 2065 ---- sysdeps/ia64/fpu/e_powl.S | 2810 ----- sysdeps/ia64/fpu/e_rem_pio2.c | 1 - sysdeps/ia64/fpu/e_rem_pio2f.c | 1 - sysdeps/ia64/fpu/e_rem_pio2l.c | 1 - sysdeps/ia64/fpu/e_remainder.S | 589 - sysdeps/ia64/fpu/e_remainderf.S | 607 - sysdeps/ia64/fpu/e_remainderl.S | 614 - sysdeps/ia64/fpu/e_scalb.S | 599 - sysdeps/ia64/fpu/e_scalbf.S | 599 - sysdeps/ia64/fpu/e_scalbl.S | 599 - sysdeps/ia64/fpu/e_sinh.S | 905 -- sysdeps/ia64/fpu/e_sinhf.S | 748 -- sysdeps/ia64/fpu/e_sinhl.S | 1117 -- sysdeps/ia64/fpu/e_sqrt.S | 342 - sysdeps/ia64/fpu/e_sqrtf.S | 260 - sysdeps/ia64/fpu/e_sqrtl.S | 275 - sysdeps/ia64/fpu/fclrexcpt.c | 39 - sysdeps/ia64/fpu/fedisblxcpt.c | 36 - sysdeps/ia64/fpu/feenablxcpt.c | 36 - sysdeps/ia64/fpu/fegetenv.c | 31 - sysdeps/ia64/fpu/fegetexcept.c | 30 - sysdeps/ia64/fpu/fegetmode.c | 26 - sysdeps/ia64/fpu/fegetround.c | 29 - sysdeps/ia64/fpu/feholdexcpt.c | 43 - sysdeps/ia64/fpu/fesetenv.c | 43 - sysdeps/ia64/fpu/fesetexcept.c | 31 - sysdeps/ia64/fpu/fesetmode.c | 42 - sysdeps/ia64/fpu/fesetround.c | 43 - sysdeps/ia64/fpu/feupdateenv.c | 42 - sysdeps/ia64/fpu/fgetexcptflg.c | 34 - sysdeps/ia64/fpu/fraiseexcpt.c | 80 - sysdeps/ia64/fpu/fsetexcptflg.c | 40 - sysdeps/ia64/fpu/ftestexcept.c | 32 - sysdeps/ia64/fpu/gen_import_file_list | 90 - sysdeps/ia64/fpu/get-rounding-mode.h | 37 - sysdeps/ia64/fpu/halfulp.c | 1 - sysdeps/ia64/fpu/import_check | 81 - sysdeps/ia64/fpu/import_diffs | 7 - sysdeps/ia64/fpu/import_file.awk | 150 - sysdeps/ia64/fpu/import_intel_libm | 106 - sysdeps/ia64/fpu/k_rem_pio2.c | 1 - sysdeps/ia64/fpu/k_rem_pio2f.c | 1 - sysdeps/ia64/fpu/lgamma-compat.h | 42 - sysdeps/ia64/fpu/libc_libm_error.c | 14 - sysdeps/ia64/fpu/libm-symbols.h | 60 - sysdeps/ia64/fpu/libm-test-ulps | 508 - sysdeps/ia64/fpu/libm-test-ulps-name | 1 - sysdeps/ia64/fpu/libm_cpu_defs.h | 156 - sysdeps/ia64/fpu/libm_error.c | 4294 ------- sysdeps/ia64/fpu/libm_error_codes.h | 211 - sysdeps/ia64/fpu/libm_frexp.S | 209 - sysdeps/ia64/fpu/libm_frexp4.S | 199 - sysdeps/ia64/fpu/libm_frexp4f.S | 199 - sysdeps/ia64/fpu/libm_frexp4l.S | 198 - sysdeps/ia64/fpu/libm_frexpf.S | 209 - sysdeps/ia64/fpu/libm_frexpl.S | 209 - sysdeps/ia64/fpu/libm_lgamma.S | 3623 ------ sysdeps/ia64/fpu/libm_lgammaf.S | 2199 ---- sysdeps/ia64/fpu/libm_lgammal.S | 7678 ------------- sysdeps/ia64/fpu/libm_reduce.S | 1578 --- sysdeps/ia64/fpu/libm_scalblnf.S | 450 - sysdeps/ia64/fpu/libm_sincos.S | 782 -- sysdeps/ia64/fpu/libm_sincos_large.S | 2756 ----- sysdeps/ia64/fpu/libm_sincosf.S | 744 -- sysdeps/ia64/fpu/libm_sincosl.S | 2525 ----- sysdeps/ia64/fpu/libm_support.h | 1051 -- sysdeps/ia64/fpu/libm_tan.S | 3332 ------ sysdeps/ia64/fpu/math_ldbl.h | 122 - sysdeps/ia64/fpu/mpa.c | 1 - sysdeps/ia64/fpu/mpatan.c | 1 - sysdeps/ia64/fpu/mpatan2.c | 1 - sysdeps/ia64/fpu/mpexp.c | 1 - sysdeps/ia64/fpu/mplog.c | 1 - sysdeps/ia64/fpu/mpsqrt.c | 1 - sysdeps/ia64/fpu/mptan.c | 1 - sysdeps/ia64/fpu/printf_fphex.c | 82 - sysdeps/ia64/fpu/s_asinh.S | 1137 -- sysdeps/ia64/fpu/s_asinhf.S | 937 -- sysdeps/ia64/fpu/s_asinhl.S | 1344 --- sysdeps/ia64/fpu/s_atan.S | 753 -- sysdeps/ia64/fpu/s_atanf.S | 555 - sysdeps/ia64/fpu/s_atanl.S | 2007 ---- sysdeps/ia64/fpu/s_cbrt.S | 767 -- sysdeps/ia64/fpu/s_cbrtf.S | 761 -- sysdeps/ia64/fpu/s_cbrtl.S | 984 -- sysdeps/ia64/fpu/s_ceil.S | 224 - sysdeps/ia64/fpu/s_ceilf.S | 224 - sysdeps/ia64/fpu/s_ceill.S | 224 - sysdeps/ia64/fpu/s_copysign.S | 37 - sysdeps/ia64/fpu/s_copysignf.S | 1 - sysdeps/ia64/fpu/s_copysignl.S | 1 - sysdeps/ia64/fpu/s_cos.S | 767 -- sysdeps/ia64/fpu/s_cosf.S | 716 -- sysdeps/ia64/fpu/s_cosl.S | 2365 ---- sysdeps/ia64/fpu/s_erf.S | 924 -- sysdeps/ia64/fpu/s_erfc.S | 1196 -- sysdeps/ia64/fpu/s_erfcf.S | 980 -- sysdeps/ia64/fpu/s_erfcl.S | 2063 ---- sysdeps/ia64/fpu/s_erff.S | 558 - sysdeps/ia64/fpu/s_erfl.S | 1237 -- sysdeps/ia64/fpu/s_expm1.S | 886 -- sysdeps/ia64/fpu/s_expm1f.S | 671 -- sysdeps/ia64/fpu/s_expm1l.S | 1431 --- sysdeps/ia64/fpu/s_fabs.S | 82 - sysdeps/ia64/fpu/s_fabsf.S | 82 - sysdeps/ia64/fpu/s_fabsl.S | 82 - sysdeps/ia64/fpu/s_fdim.S | 227 - sysdeps/ia64/fpu/s_fdimf.S | 227 - sysdeps/ia64/fpu/s_fdiml.S | 227 - sysdeps/ia64/fpu/s_finite.S | 44 - sysdeps/ia64/fpu/s_finitef.S | 1 - sysdeps/ia64/fpu/s_finitel.S | 1 - sysdeps/ia64/fpu/s_floor.S | 216 - sysdeps/ia64/fpu/s_floorf.S | 215 - sysdeps/ia64/fpu/s_floorl.S | 215 - sysdeps/ia64/fpu/s_fma.S | 71 - sysdeps/ia64/fpu/s_fmaf.S | 71 - sysdeps/ia64/fpu/s_fmal.S | 71 - sysdeps/ia64/fpu/s_fmax.S | 114 - sysdeps/ia64/fpu/s_fmaxf.S | 114 - sysdeps/ia64/fpu/s_fmaxl.S | 114 - sysdeps/ia64/fpu/s_fpclassify.S | 61 - sysdeps/ia64/fpu/s_fpclassifyf.S | 1 - sysdeps/ia64/fpu/s_fpclassifyl.S | 1 - sysdeps/ia64/fpu/s_frexp.c | 67 - sysdeps/ia64/fpu/s_frexpf.c | 67 - sysdeps/ia64/fpu/s_frexpl.c | 67 - sysdeps/ia64/fpu/s_ilogb.S | 268 - sysdeps/ia64/fpu/s_ilogbf.S | 268 - sysdeps/ia64/fpu/s_isinf.S | 57 - sysdeps/ia64/fpu/s_isinff.S | 1 - sysdeps/ia64/fpu/s_isinfl.S | 1 - sysdeps/ia64/fpu/s_isnan.S | 50 - sysdeps/ia64/fpu/s_isnanf.S | 1 - sysdeps/ia64/fpu/s_isnanl.S | 1 - sysdeps/ia64/fpu/s_ldexp.c | 61 - sysdeps/ia64/fpu/s_ldexpf.c | 61 - sysdeps/ia64/fpu/s_ldexpl.c | 61 - sysdeps/ia64/fpu/s_libm_ldexp.S | 452 - sysdeps/ia64/fpu/s_libm_ldexpf.S | 452 - sysdeps/ia64/fpu/s_libm_ldexpl.S | 452 - sysdeps/ia64/fpu/s_libm_scalbn.S | 452 - sysdeps/ia64/fpu/s_libm_scalbnf.S | 452 - sysdeps/ia64/fpu/s_libm_scalbnl.S | 452 - sysdeps/ia64/fpu/s_log1p.S | 1102 -- sysdeps/ia64/fpu/s_log1pf.S | 788 -- sysdeps/ia64/fpu/s_log1pl.S | 1200 -- sysdeps/ia64/fpu/s_logb.S | 281 - sysdeps/ia64/fpu/s_logbf.S | 281 - sysdeps/ia64/fpu/s_logbl.S | 281 - sysdeps/ia64/fpu/s_matherrf.c | 26 - sysdeps/ia64/fpu/s_matherrl.c | 26 - sysdeps/ia64/fpu/s_modf.S | 278 - sysdeps/ia64/fpu/s_modff.S | 278 - sysdeps/ia64/fpu/s_modfl.S | 273 - sysdeps/ia64/fpu/s_nearbyint.S | 217 - sysdeps/ia64/fpu/s_nearbyintf.S | 217 - sysdeps/ia64/fpu/s_nearbyintl.S | 218 - sysdeps/ia64/fpu/s_nextafter.S | 497 - sysdeps/ia64/fpu/s_nextafterf.S | 503 - sysdeps/ia64/fpu/s_nextafterl.S | 502 - sysdeps/ia64/fpu/s_nexttoward.S | 489 - sysdeps/ia64/fpu/s_nexttowardf.S | 495 - sysdeps/ia64/fpu/s_nexttowardl.S | 493 - sysdeps/ia64/fpu/s_rint.S | 229 - sysdeps/ia64/fpu/s_rintf.S | 229 - sysdeps/ia64/fpu/s_rintl.S | 229 - sysdeps/ia64/fpu/s_round.S | 233 - sysdeps/ia64/fpu/s_roundf.S | 233 - sysdeps/ia64/fpu/s_roundl.S | 233 - sysdeps/ia64/fpu/s_scalblnf.c | 61 - sysdeps/ia64/fpu/s_scalbn.c | 63 - sysdeps/ia64/fpu/s_scalbnf.c | 63 - sysdeps/ia64/fpu/s_scalbnl.c | 63 - sysdeps/ia64/fpu/s_signbit.S | 36 - sysdeps/ia64/fpu/s_signbitf.S | 1 - sysdeps/ia64/fpu/s_signbitl.S | 1 - sysdeps/ia64/fpu/s_significand.S | 153 - sysdeps/ia64/fpu/s_significandf.S | 152 - sysdeps/ia64/fpu/s_significandl.S | 153 - sysdeps/ia64/fpu/s_sin.c | 1 - sysdeps/ia64/fpu/s_sincos.c | 1 - sysdeps/ia64/fpu/s_sincosf.c | 1 - sysdeps/ia64/fpu/s_sincosl.c | 1 - sysdeps/ia64/fpu/s_sinf.c | 1 - sysdeps/ia64/fpu/s_sinl.c | 1 - sysdeps/ia64/fpu/s_tan.S | 877 -- sysdeps/ia64/fpu/s_tanf.S | 691 -- sysdeps/ia64/fpu/s_tanh.S | 984 -- sysdeps/ia64/fpu/s_tanhf.S | 581 - sysdeps/ia64/fpu/s_tanhl.S | 1344 --- sysdeps/ia64/fpu/s_tanl.S | 3248 ------ sysdeps/ia64/fpu/s_trunc.S | 166 - sysdeps/ia64/fpu/s_truncf.S | 166 - sysdeps/ia64/fpu/s_truncl.S | 166 - sysdeps/ia64/fpu/sincos32.c | 1 - sysdeps/ia64/fpu/slowexp.c | 1 - sysdeps/ia64/fpu/slowpow.c | 1 - sysdeps/ia64/fpu/t_exp.c | 1 - sysdeps/ia64/fpu/w_acos_compat.c | 1 - sysdeps/ia64/fpu/w_acosf_compat.c | 1 - sysdeps/ia64/fpu/w_acosh_compat.c | 1 - sysdeps/ia64/fpu/w_acoshf_compat.c | 1 - sysdeps/ia64/fpu/w_acoshl_compat.c | 1 - sysdeps/ia64/fpu/w_acosl_compat.c | 1 - sysdeps/ia64/fpu/w_asin_compat.c | 1 - sysdeps/ia64/fpu/w_asinf_compat.c | 1 - sysdeps/ia64/fpu/w_asinl_compat.c | 1 - sysdeps/ia64/fpu/w_atan2_compat.c | 1 - sysdeps/ia64/fpu/w_atan2f_compat.c | 1 - sysdeps/ia64/fpu/w_atan2l_compat.c | 1 - sysdeps/ia64/fpu/w_atanh_compat.c | 1 - sysdeps/ia64/fpu/w_atanhf_compat.c | 1 - sysdeps/ia64/fpu/w_atanhl_compat.c | 1 - sysdeps/ia64/fpu/w_cosh_compat.c | 1 - sysdeps/ia64/fpu/w_coshf_compat.c | 1 - sysdeps/ia64/fpu/w_coshl_compat.c | 1 - sysdeps/ia64/fpu/w_exp10_compat.c | 1 - sysdeps/ia64/fpu/w_exp10f_compat.c | 1 - sysdeps/ia64/fpu/w_exp10l_compat.c | 1 - sysdeps/ia64/fpu/w_exp2_compat.c | 1 - sysdeps/ia64/fpu/w_exp2f_compat.c | 1 - sysdeps/ia64/fpu/w_exp2l_compat.c | 1 - sysdeps/ia64/fpu/w_exp_compat.c | 1 - sysdeps/ia64/fpu/w_expf_compat.c | 1 - sysdeps/ia64/fpu/w_expl_compat.c | 1 - sysdeps/ia64/fpu/w_fmod_compat.c | 1 - sysdeps/ia64/fpu/w_fmodf_compat.c | 1 - sysdeps/ia64/fpu/w_fmodl_compat.c | 1 - sysdeps/ia64/fpu/w_hypot_compat.c | 1 - sysdeps/ia64/fpu/w_hypotf_compat.c | 1 - sysdeps/ia64/fpu/w_hypotl_compat.c | 1 - sysdeps/ia64/fpu/w_lgamma_main.c | 77 - sysdeps/ia64/fpu/w_lgamma_r_compat.c | 1 - sysdeps/ia64/fpu/w_lgammaf_main.c | 77 - sysdeps/ia64/fpu/w_lgammaf_r_compat.c | 1 - sysdeps/ia64/fpu/w_lgammal_main.c | 76 - sysdeps/ia64/fpu/w_lgammal_r_compat.c | 1 - sysdeps/ia64/fpu/w_log10_compat.c | 1 - sysdeps/ia64/fpu/w_log10f_compat.c | 1 - sysdeps/ia64/fpu/w_log10l_compat.c | 1 - sysdeps/ia64/fpu/w_log1p.c | 20 - sysdeps/ia64/fpu/w_log1pf.c | 20 - sysdeps/ia64/fpu/w_log1pl.c | 20 - sysdeps/ia64/fpu/w_log2_compat.c | 1 - sysdeps/ia64/fpu/w_log2f_compat.c | 1 - sysdeps/ia64/fpu/w_log2l_compat.c | 1 - sysdeps/ia64/fpu/w_log_compat.c | 1 - sysdeps/ia64/fpu/w_logf_compat.c | 1 - sysdeps/ia64/fpu/w_logl_compat.c | 1 - sysdeps/ia64/fpu/w_pow_compat.c | 1 - sysdeps/ia64/fpu/w_powf_compat.c | 1 - sysdeps/ia64/fpu/w_powl_compat.c | 1 - sysdeps/ia64/fpu/w_remainder_compat.c | 1 - sysdeps/ia64/fpu/w_remainderf_compat.c | 1 - sysdeps/ia64/fpu/w_remainderl_compat.c | 1 - sysdeps/ia64/fpu/w_scalb_compat.c | 1 - sysdeps/ia64/fpu/w_scalbf_compat.c | 1 - sysdeps/ia64/fpu/w_scalbl_compat.c | 1 - sysdeps/ia64/fpu/w_scalblnf.c | 20 - sysdeps/ia64/fpu/w_sinh_compat.c | 1 - sysdeps/ia64/fpu/w_sinhf_compat.c | 1 - sysdeps/ia64/fpu/w_sinhl_compat.c | 1 - sysdeps/ia64/fpu/w_sqrt_compat.c | 1 - sysdeps/ia64/fpu/w_sqrtf_compat.c | 1 - sysdeps/ia64/fpu/w_sqrtl_compat.c | 1 - sysdeps/ia64/fpu/w_tgamma_compat.S | 1835 --- sysdeps/ia64/fpu/w_tgammaf_compat.S | 1330 --- sysdeps/ia64/fpu/w_tgammal_compat.S | 4487 -------- sysdeps/ia64/gccframe.h | 31 - sysdeps/ia64/hp-timing.h | 49 - sysdeps/ia64/htonl.S | 30 - sysdeps/ia64/htons.S | 30 - sysdeps/ia64/ia64libgcc.S | 350 - sysdeps/ia64/ieee754.h | 204 - sysdeps/ia64/jmpbuf-unwind.h | 43 - sysdeps/ia64/ldbl2mpn.c | 1 - sysdeps/ia64/ldsodefs.h | 42 - sysdeps/ia64/libc-tls.c | 31 - sysdeps/ia64/linkmap.h | 5 - sysdeps/ia64/machine-gmon.h | 25 - sysdeps/ia64/memccpy.S | 249 - sysdeps/ia64/memchr.S | 157 - sysdeps/ia64/memcmp.S | 164 - sysdeps/ia64/memcpy.S | 435 - sysdeps/ia64/memmove.S | 250 - sysdeps/ia64/memset.S | 399 - sysdeps/ia64/memusage.h | 29 - sysdeps/ia64/nptl/Makefile | 25 - sysdeps/ia64/nptl/bits/pthreadtypes-arch.h | 61 - sysdeps/ia64/nptl/bits/semaphore.h | 35 - sysdeps/ia64/nptl/pthread_spin_lock.c | 34 - sysdeps/ia64/nptl/pthread_spin_trylock.c | 26 - sysdeps/ia64/nptl/pthread_spin_unlock.c | 27 - sysdeps/ia64/nptl/pthreaddef.h | 36 - sysdeps/ia64/nptl/tcb-offsets.sym | 6 - sysdeps/ia64/nptl/tls.h | 182 - sysdeps/ia64/sched_cpucount.c | 20 - sysdeps/ia64/softpipe.h | 28 - sysdeps/ia64/sotruss-lib.c | 50 - sysdeps/ia64/stackguard-macros.h | 7 - sysdeps/ia64/stackinfo.h | 34 - sysdeps/ia64/start.S | 119 - sysdeps/ia64/strchr.S | 111 - sysdeps/ia64/strcmp.S | 53 - sysdeps/ia64/strcpy.S | 144 - sysdeps/ia64/strlen.S | 97 - sysdeps/ia64/strncmp.S | 61 - sysdeps/ia64/strncpy.S | 231 - sysdeps/ia64/sysdep.h | 62 - sysdeps/ia64/tininess.h | 1 - sysdeps/ia64/tls-macros.h | 66 - sysdeps/ia64/tst-audit.h | 25 - sysdeps/ieee754/Makefile | 4 - sysdeps/ieee754/bits/huge_val.h | 53 - sysdeps/ieee754/bits/huge_valf.h | 51 - sysdeps/ieee754/bits/inf.h | 29 - sysdeps/ieee754/bits/nan.h | 52 - sysdeps/ieee754/dbl-64/Makefile | 6 - sysdeps/ieee754/dbl-64/MathLib.h | 100 - sysdeps/ieee754/dbl-64/asincos.tbl | 5168 --------- sysdeps/ieee754/dbl-64/atnat.h | 154 - sysdeps/ieee754/dbl-64/atnat2.h | 161 - sysdeps/ieee754/dbl-64/branred.c | 144 - sysdeps/ieee754/dbl-64/branred.h | 80 - sysdeps/ieee754/dbl-64/dbl2mpn.c | 107 - sysdeps/ieee754/dbl-64/dla.h | 183 - sysdeps/ieee754/dbl-64/doasin.c | 84 - sysdeps/ieee754/dbl-64/doasin.h | 63 - sysdeps/ieee754/dbl-64/dosincos.c | 223 - sysdeps/ieee754/dbl-64/dosincos.h | 80 - sysdeps/ieee754/dbl-64/e_acos.c | 1 - sysdeps/ieee754/dbl-64/e_acosh.c | 69 - sysdeps/ieee754/dbl-64/e_asin.c | 647 -- sysdeps/ieee754/dbl-64/e_atan2.c | 620 -- sysdeps/ieee754/dbl-64/e_atanh.c | 74 - sysdeps/ieee754/dbl-64/e_cosh.c | 88 - sysdeps/ieee754/dbl-64/e_exp.c | 361 - sysdeps/ieee754/dbl-64/e_exp10.c | 50 - sysdeps/ieee754/dbl-64/e_exp2.c | 133 - sysdeps/ieee754/dbl-64/e_fmod.c | 173 - sysdeps/ieee754/dbl-64/e_gamma_r.c | 220 - sysdeps/ieee754/dbl-64/e_hypot.c | 161 - sysdeps/ieee754/dbl-64/e_ilogb.c | 63 - sysdeps/ieee754/dbl-64/e_j0.c | 458 - sysdeps/ieee754/dbl-64/e_j1.c | 466 - sysdeps/ieee754/dbl-64/e_jn.c | 347 - sysdeps/ieee754/dbl-64/e_lgamma_r.c | 310 - sysdeps/ieee754/dbl-64/e_log.c | 262 - sysdeps/ieee754/dbl-64/e_log10.c | 88 - sysdeps/ieee754/dbl-64/e_log2.c | 133 - sysdeps/ieee754/dbl-64/e_pow.c | 481 - sysdeps/ieee754/dbl-64/e_rem_pio2.c | 193 - sysdeps/ieee754/dbl-64/e_remainder.c | 152 - sysdeps/ieee754/dbl-64/e_sinh.c | 90 - sysdeps/ieee754/dbl-64/e_sqrt.c | 139 - sysdeps/ieee754/dbl-64/gamma_product.c | 45 - sysdeps/ieee754/dbl-64/gamma_productf.c | 43 - sysdeps/ieee754/dbl-64/halfulp.c | 152 - sysdeps/ieee754/dbl-64/k_cos.c | 1 - sysdeps/ieee754/dbl-64/k_rem_pio2.c | 362 - sysdeps/ieee754/dbl-64/k_sin.c | 1 - sysdeps/ieee754/dbl-64/k_tan.c | 1 - sysdeps/ieee754/dbl-64/lgamma_neg.c | 383 - sysdeps/ieee754/dbl-64/lgamma_product.c | 52 - sysdeps/ieee754/dbl-64/mpa-arch.h | 47 - sysdeps/ieee754/dbl-64/mpa.c | 906 -- sysdeps/ieee754/dbl-64/mpa.h | 154 - sysdeps/ieee754/dbl-64/mpatan.c | 116 - sysdeps/ieee754/dbl-64/mpatan.h | 145 - sysdeps/ieee754/dbl-64/mpatan2.c | 67 - sysdeps/ieee754/dbl-64/mpexp.c | 163 - sysdeps/ieee754/dbl-64/mplog.c | 65 - sysdeps/ieee754/dbl-64/mpn2dbl.c | 47 - sysdeps/ieee754/dbl-64/mpsqrt.c | 111 - sysdeps/ieee754/dbl-64/mpsqrt.h | 38 - sysdeps/ieee754/dbl-64/mptan.c | 63 - sysdeps/ieee754/dbl-64/mydefs.h | 35 - sysdeps/ieee754/dbl-64/powtwo.tbl | 31 - sysdeps/ieee754/dbl-64/root.tbl | 57 - sysdeps/ieee754/dbl-64/s_asinh.c | 72 - sysdeps/ieee754/dbl-64/s_atan.c | 328 - sysdeps/ieee754/dbl-64/s_cbrt.c | 76 - sysdeps/ieee754/dbl-64/s_ceil.c | 89 - sysdeps/ieee754/dbl-64/s_copysign.c | 39 - sysdeps/ieee754/dbl-64/s_cos.c | 1 - sysdeps/ieee754/dbl-64/s_erf.c | 428 - sysdeps/ieee754/dbl-64/s_expm1.c | 262 - sysdeps/ieee754/dbl-64/s_fabs.c | 32 - sysdeps/ieee754/dbl-64/s_finite.c | 50 - sysdeps/ieee754/dbl-64/s_floor.c | 89 - sysdeps/ieee754/dbl-64/s_fma.c | 301 - sysdeps/ieee754/dbl-64/s_fmaf.c | 64 - sysdeps/ieee754/dbl-64/s_fpclassify.c | 43 - sysdeps/ieee754/dbl-64/s_frexp.c | 58 - sysdeps/ieee754/dbl-64/s_fromfp.c | 7 - sysdeps/ieee754/dbl-64/s_fromfp_main.c | 82 - sysdeps/ieee754/dbl-64/s_fromfpx.c | 7 - sysdeps/ieee754/dbl-64/s_getpayload.c | 37 - sysdeps/ieee754/dbl-64/s_isinf.c | 36 - sysdeps/ieee754/dbl-64/s_isnan.c | 44 - sysdeps/ieee754/dbl-64/s_issignaling.c | 47 - sysdeps/ieee754/dbl-64/s_llrint.c | 103 - sysdeps/ieee754/dbl-64/s_llround.c | 91 - sysdeps/ieee754/dbl-64/s_log1p.c | 195 - sysdeps/ieee754/dbl-64/s_logb.c | 52 - sysdeps/ieee754/dbl-64/s_lrint.c | 127 - sysdeps/ieee754/dbl-64/s_lround.c | 113 - sysdeps/ieee754/dbl-64/s_modf.c | 86 - sysdeps/ieee754/dbl-64/s_nearbyint.c | 78 - sysdeps/ieee754/dbl-64/s_nexttoward.c | 1 - sysdeps/ieee754/dbl-64/s_nextup.c | 58 - sysdeps/ieee754/dbl-64/s_remquo.c | 115 - sysdeps/ieee754/dbl-64/s_rint.c | 67 - sysdeps/ieee754/dbl-64/s_round.c | 83 - sysdeps/ieee754/dbl-64/s_roundeven.c | 106 - sysdeps/ieee754/dbl-64/s_scalbln.c | 63 - sysdeps/ieee754/dbl-64/s_scalbn.c | 63 - sysdeps/ieee754/dbl-64/s_setpayload.c | 6 - sysdeps/ieee754/dbl-64/s_setpayload_main.c | 69 - sysdeps/ieee754/dbl-64/s_setpayloadsig.c | 6 - sysdeps/ieee754/dbl-64/s_signbit.c | 26 - sysdeps/ieee754/dbl-64/s_sin.c | 927 -- sysdeps/ieee754/dbl-64/s_sincos.c | 113 - sysdeps/ieee754/dbl-64/s_tan.c | 848 -- sysdeps/ieee754/dbl-64/s_tanh.c | 98 - sysdeps/ieee754/dbl-64/s_totalorder.c | 54 - sysdeps/ieee754/dbl-64/s_totalordermag.c | 49 - sysdeps/ieee754/dbl-64/s_trunc.c | 62 - sysdeps/ieee754/dbl-64/s_ufromfp.c | 7 - sysdeps/ieee754/dbl-64/s_ufromfpx.c | 7 - sysdeps/ieee754/dbl-64/sincos32.c | 369 - sysdeps/ieee754/dbl-64/sincos32.h | 81 - sysdeps/ieee754/dbl-64/sincostab.c | 914 -- sysdeps/ieee754/dbl-64/slowexp.c | 86 - sysdeps/ieee754/dbl-64/slowpow.c | 125 - sysdeps/ieee754/dbl-64/t_exp.c | 435 - sysdeps/ieee754/dbl-64/t_exp2.h | 585 - sysdeps/ieee754/dbl-64/uasncs.h | 69 - sysdeps/ieee754/dbl-64/uatan.tbl | 11134 ------------------- sysdeps/ieee754/dbl-64/uexp.h | 69 - sysdeps/ieee754/dbl-64/uexp.tbl | 1786 --- sysdeps/ieee754/dbl-64/ulog.h | 187 - sysdeps/ieee754/dbl-64/ulog.tbl | 3326 ------ sysdeps/ieee754/dbl-64/upow.h | 76 - sysdeps/ieee754/dbl-64/upow.tbl | 10188 ----------------- sysdeps/ieee754/dbl-64/urem.h | 46 - sysdeps/ieee754/dbl-64/usncs.h | 48 - sysdeps/ieee754/dbl-64/utan.h | 265 - sysdeps/ieee754/dbl-64/utan.tbl | 1525 --- sysdeps/ieee754/dbl-64/w_exp_compat.c | 38 - sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c | 67 - sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c | 84 - sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c | 105 - sysdeps/ieee754/dbl-64/wordsize-64/e_log10.c | 87 - sysdeps/ieee754/dbl-64/wordsize-64/e_log2.c | 128 - sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c | 54 - sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c | 42 - sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c | 74 - sysdeps/ieee754/dbl-64/wordsize-64/s_frexp.c | 69 - sysdeps/ieee754/dbl-64/wordsize-64/s_getpayload.c | 33 - sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c | 33 - sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c | 39 - sysdeps/ieee754/dbl-64/wordsize-64/s_issignaling.c | 43 - sysdeps/ieee754/dbl-64/wordsize-64/s_llround.c | 82 - sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c | 48 - sysdeps/ieee754/dbl-64/wordsize-64/s_lround.c | 89 - sysdeps/ieee754/dbl-64/wordsize-64/s_modf.c | 66 - sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c | 66 - sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c | 114 - sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c | 60 - sysdeps/ieee754/dbl-64/wordsize-64/s_round.c | 68 - sysdeps/ieee754/dbl-64/wordsize-64/s_roundeven.c | 72 - sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c | 60 - sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c | 60 - .../ieee754/dbl-64/wordsize-64/s_setpayload_main.c | 53 - sysdeps/ieee754/dbl-64/wordsize-64/s_totalorder.c | 50 - .../ieee754/dbl-64/wordsize-64/s_totalordermag.c | 47 - sysdeps/ieee754/dbl-64/wordsize-64/s_trunc.c | 57 - sysdeps/ieee754/dbl-64/x2y2m1.c | 75 - sysdeps/ieee754/dbl-64/x2y2m1f.c | 32 - sysdeps/ieee754/float128/Makeconfig | 3 - sysdeps/ieee754/float128/Makefile | 3 - sysdeps/ieee754/float128/Versions | 150 - sysdeps/ieee754/float128/e_acosf128.c | 2 - sysdeps/ieee754/float128/e_acoshf128.c | 2 - sysdeps/ieee754/float128/e_asinf128.c | 2 - sysdeps/ieee754/float128/e_atan2f128.c | 2 - sysdeps/ieee754/float128/e_atanhf128.c | 2 - sysdeps/ieee754/float128/e_coshf128.c | 2 - sysdeps/ieee754/float128/e_exp10f128.c | 2 - sysdeps/ieee754/float128/e_expf128.c | 2 - sysdeps/ieee754/float128/e_fmodf128.c | 2 - sysdeps/ieee754/float128/e_gammaf128_r.c | 2 - sysdeps/ieee754/float128/e_hypotf128.c | 2 - sysdeps/ieee754/float128/e_ilogbf128.c | 2 - sysdeps/ieee754/float128/e_j0f128.c | 2 - sysdeps/ieee754/float128/e_j1f128.c | 2 - sysdeps/ieee754/float128/e_jnf128.c | 2 - sysdeps/ieee754/float128/e_lgammaf128_r.c | 2 - sysdeps/ieee754/float128/e_log10f128.c | 2 - sysdeps/ieee754/float128/e_log2f128.c | 2 - sysdeps/ieee754/float128/e_logf128.c | 2 - sysdeps/ieee754/float128/e_powf128.c | 2 - sysdeps/ieee754/float128/e_rem_pio2f128.c | 2 - sysdeps/ieee754/float128/e_remainderf128.c | 2 - sysdeps/ieee754/float128/e_scalbf128.c | 1 - sysdeps/ieee754/float128/e_sinhf128.c | 2 - sysdeps/ieee754/float128/float1282mpn.c | 20 - sysdeps/ieee754/float128/float128_private.h | 326 - sysdeps/ieee754/float128/gamma_productf128.c | 2 - sysdeps/ieee754/float128/ieee754_float128.h | 140 - sysdeps/ieee754/float128/k_cosf128.c | 2 - sysdeps/ieee754/float128/k_sincosf128.c | 2 - sysdeps/ieee754/float128/k_sinf128.c | 2 - sysdeps/ieee754/float128/k_tanf128.c | 2 - sysdeps/ieee754/float128/lgamma_negf128.c | 2 - sysdeps/ieee754/float128/lgamma_productf128.c | 2 - sysdeps/ieee754/float128/s_asinhf128.c | 2 - sysdeps/ieee754/float128/s_atanf128.c | 2 - sysdeps/ieee754/float128/s_cbrtf128.c | 2 - sysdeps/ieee754/float128/s_ceilf128.c | 2 - sysdeps/ieee754/float128/s_copysignf128.c | 2 - sysdeps/ieee754/float128/s_cosf128.c | 2 - sysdeps/ieee754/float128/s_erff128.c | 2 - sysdeps/ieee754/float128/s_expm1f128.c | 2 - sysdeps/ieee754/float128/s_fabsf128.c | 2 - sysdeps/ieee754/float128/s_finitef128.c | 2 - sysdeps/ieee754/float128/s_floorf128.c | 2 - sysdeps/ieee754/float128/s_fmaf128.c | 2 - sysdeps/ieee754/float128/s_fpclassifyf128.c | 2 - sysdeps/ieee754/float128/s_frexpf128.c | 2 - sysdeps/ieee754/float128/s_fromfpf128.c | 5 - sysdeps/ieee754/float128/s_fromfpxf128.c | 5 - sysdeps/ieee754/float128/s_getpayloadf128.c | 2 - sysdeps/ieee754/float128/s_isinff128.c | 2 - sysdeps/ieee754/float128/s_isnanf128.c | 2 - sysdeps/ieee754/float128/s_issignalingf128.c | 2 - sysdeps/ieee754/float128/s_llrintf128.c | 2 - sysdeps/ieee754/float128/s_llroundf128.c | 2 - sysdeps/ieee754/float128/s_log1pf128.c | 2 - sysdeps/ieee754/float128/s_logbf128.c | 2 - sysdeps/ieee754/float128/s_lrintf128.c | 2 - sysdeps/ieee754/float128/s_lroundf128.c | 2 - sysdeps/ieee754/float128/s_modff128.c | 2 - sysdeps/ieee754/float128/s_nearbyintf128.c | 2 - sysdeps/ieee754/float128/s_nextafterf128.c | 2 - sysdeps/ieee754/float128/s_nexttowardf128.c | 1 - sysdeps/ieee754/float128/s_nextupf128.c | 2 - sysdeps/ieee754/float128/s_remquof128.c | 2 - sysdeps/ieee754/float128/s_rintf128.c | 2 - sysdeps/ieee754/float128/s_roundevenf128.c | 2 - sysdeps/ieee754/float128/s_roundf128.c | 2 - sysdeps/ieee754/float128/s_scalblnf128.c | 2 - sysdeps/ieee754/float128/s_scalbnf128.c | 2 - sysdeps/ieee754/float128/s_setpayloadf128.c | 4 - sysdeps/ieee754/float128/s_setpayloadsigf128.c | 4 - sysdeps/ieee754/float128/s_signbitf128.c | 2 - sysdeps/ieee754/float128/s_significandf128.c | 1 - sysdeps/ieee754/float128/s_sincosf128.c | 2 - sysdeps/ieee754/float128/s_sinf128.c | 2 - sysdeps/ieee754/float128/s_tanf128.c | 2 - sysdeps/ieee754/float128/s_tanhf128.c | 2 - sysdeps/ieee754/float128/s_totalorderf128.c | 2 - sysdeps/ieee754/float128/s_totalordermagf128.c | 2 - sysdeps/ieee754/float128/s_truncf128.c | 2 - sysdeps/ieee754/float128/s_ufromfpf128.c | 5 - sysdeps/ieee754/float128/s_ufromfpxf128.c | 5 - sysdeps/ieee754/float128/strfromf128.c | 25 - sysdeps/ieee754/float128/t_sincosf128.c | 2 - sysdeps/ieee754/float128/x2y2m1f128.c | 2 - sysdeps/ieee754/flt-32/e_acosf.c | 78 - sysdeps/ieee754/flt-32/e_acoshf.c | 49 - sysdeps/ieee754/flt-32/e_asinf.c | 104 - sysdeps/ieee754/flt-32/e_atan2f.c | 94 - sysdeps/ieee754/flt-32/e_atanhf.c | 74 - sysdeps/ieee754/flt-32/e_coshf.c | 63 - sysdeps/ieee754/flt-32/e_exp2f.c | 132 - sysdeps/ieee754/flt-32/e_expf.c | 133 - sysdeps/ieee754/flt-32/e_fmodf.c | 102 - sysdeps/ieee754/flt-32/e_gammaf_r.c | 212 - sysdeps/ieee754/flt-32/e_hypotf.c | 45 - sysdeps/ieee754/flt-32/e_ilogbf.c | 44 - sysdeps/ieee754/flt-32/e_j0f.c | 337 - sysdeps/ieee754/flt-32/e_j1f.c | 347 - sysdeps/ieee754/flt-32/e_jnf.c | 233 - sysdeps/ieee754/flt-32/e_lgammaf_r.c | 246 - sysdeps/ieee754/flt-32/e_log10f.c | 54 - sysdeps/ieee754/flt-32/e_log2f.c | 86 - sysdeps/ieee754/flt-32/e_logf.c | 85 - sysdeps/ieee754/flt-32/e_powf.c | 258 - sysdeps/ieee754/flt-32/e_rem_pio2f.c | 179 - sysdeps/ieee754/flt-32/e_remainderf.c | 62 - sysdeps/ieee754/flt-32/e_sinhf.c | 60 - sysdeps/ieee754/flt-32/e_sqrtf.c | 86 - sysdeps/ieee754/flt-32/k_cosf.c | 55 - sysdeps/ieee754/flt-32/k_rem_pio2f.c | 208 - sysdeps/ieee754/flt-32/k_sinf.c | 50 - sysdeps/ieee754/flt-32/k_tanf.c | 101 - sysdeps/ieee754/flt-32/lgamma_negf.c | 280 - sysdeps/ieee754/flt-32/lgamma_productf.c | 1 - sysdeps/ieee754/flt-32/mpn2flt.c | 41 - sysdeps/ieee754/flt-32/s_asinhf.c | 50 - sysdeps/ieee754/flt-32/s_atanf.c | 101 - sysdeps/ieee754/flt-32/s_cbrtf.c | 63 - sysdeps/ieee754/flt-32/s_ceilf.c | 48 - sysdeps/ieee754/flt-32/s_copysignf.c | 37 - sysdeps/ieee754/flt-32/s_cosf.c | 63 - sysdeps/ieee754/flt-32/s_erff.c | 230 - sysdeps/ieee754/flt-32/s_expm1f.c | 130 - sysdeps/ieee754/flt-32/s_fabsf.c | 30 - sysdeps/ieee754/flt-32/s_finitef.c | 41 - sysdeps/ieee754/flt-32/s_floorf.c | 54 - sysdeps/ieee754/flt-32/s_fpclassifyf.c | 42 - sysdeps/ieee754/flt-32/s_frexpf.c | 44 - sysdeps/ieee754/flt-32/s_fromfpf.c | 4 - sysdeps/ieee754/flt-32/s_fromfpf_main.c | 82 - sysdeps/ieee754/flt-32/s_fromfpxf.c | 4 - sysdeps/ieee754/flt-32/s_getpayloadf.c | 33 - sysdeps/ieee754/flt-32/s_isinff.c | 29 - sysdeps/ieee754/flt-32/s_isnanf.c | 38 - sysdeps/ieee754/flt-32/s_issignalingf.c | 43 - sysdeps/ieee754/flt-32/s_llrintf.c | 86 - sysdeps/ieee754/flt-32/s_llroundf.c | 73 - sysdeps/ieee754/flt-32/s_log1pf.c | 102 - sysdeps/ieee754/flt-32/s_logbf.c | 41 - sysdeps/ieee754/flt-32/s_lrintf.c | 86 - sysdeps/ieee754/flt-32/s_lroundf.c | 73 - sysdeps/ieee754/flt-32/s_modff.c | 54 - sysdeps/ieee754/flt-32/s_nearbyintf.c | 59 - sysdeps/ieee754/flt-32/s_nextafterf.c | 73 - sysdeps/ieee754/flt-32/s_nextupf.c | 46 - sysdeps/ieee754/flt-32/s_remquof.c | 110 - sysdeps/ieee754/flt-32/s_rintf.c | 50 - sysdeps/ieee754/flt-32/s_roundevenf.c | 68 - sysdeps/ieee754/flt-32/s_roundf.c | 63 - sysdeps/ieee754/flt-32/s_scalblnf.c | 52 - sysdeps/ieee754/flt-32/s_scalbnf.c | 52 - sysdeps/ieee754/flt-32/s_setpayloadf.c | 3 - sysdeps/ieee754/flt-32/s_setpayloadf_main.c | 53 - sysdeps/ieee754/flt-32/s_setpayloadsigf.c | 3 - sysdeps/ieee754/flt-32/s_signbitf.c | 26 - sysdeps/ieee754/flt-32/s_sincosf.c | 84 - sysdeps/ieee754/flt-32/s_sinf.c | 63 - sysdeps/ieee754/flt-32/s_tanf.c | 49 - sysdeps/ieee754/flt-32/s_tanhf.c | 62 - sysdeps/ieee754/flt-32/s_totalorderf.c | 46 - sysdeps/ieee754/flt-32/s_totalordermagf.c | 44 - sysdeps/ieee754/flt-32/s_truncf.c | 53 - sysdeps/ieee754/flt-32/s_ufromfpf.c | 4 - sysdeps/ieee754/flt-32/s_ufromfpxf.c | 4 - sysdeps/ieee754/flt-32/t_exp2f.h | 351 - sysdeps/ieee754/flt-32/w_expf_compat.c | 34 - sysdeps/ieee754/ieee754.h | 198 - sysdeps/ieee754/k_standard.c | 943 -- sysdeps/ieee754/k_standardf.c | 31 - sysdeps/ieee754/k_standardl.c | 107 - sysdeps/ieee754/ldbl-128/Makefile | 1 - sysdeps/ieee754/ldbl-128/bits/long-double.h | 20 - sysdeps/ieee754/ldbl-128/e_acoshl.c | 61 - sysdeps/ieee754/ldbl-128/e_acosl.c | 319 - sysdeps/ieee754/ldbl-128/e_asinl.c | 258 - sysdeps/ieee754/ldbl-128/e_atan2l.c | 122 - sysdeps/ieee754/ldbl-128/e_atanhl.c | 74 - sysdeps/ieee754/ldbl-128/e_coshl.c | 110 - sysdeps/ieee754/ldbl-128/e_exp10l.c | 49 - sysdeps/ieee754/ldbl-128/e_expl.c | 253 - sysdeps/ieee754/ldbl-128/e_fmodl.c | 131 - sysdeps/ieee754/ldbl-128/e_gammal_r.c | 218 - sysdeps/ieee754/ldbl-128/e_hypotl.c | 140 - sysdeps/ieee754/ldbl-128/e_ilogbl.c | 56 - sysdeps/ieee754/ldbl-128/e_j0l.c | 937 -- sysdeps/ieee754/ldbl-128/e_j1l.c | 961 -- sysdeps/ieee754/ldbl-128/e_jnl.c | 419 - sysdeps/ieee754/ldbl-128/e_lgammal_r.c | 1046 -- sysdeps/ieee754/ldbl-128/e_log10l.c | 259 - sysdeps/ieee754/ldbl-128/e_log2l.c | 252 - sysdeps/ieee754/ldbl-128/e_logl.c | 282 - sysdeps/ieee754/ldbl-128/e_powl.c | 451 - sysdeps/ieee754/ldbl-128/e_rem_pio2l.c | 273 - sysdeps/ieee754/ldbl-128/e_remainderl.c | 71 - sysdeps/ieee754/ldbl-128/e_sinhl.c | 117 - sysdeps/ieee754/ldbl-128/gamma_productl.c | 45 - sysdeps/ieee754/ldbl-128/ieee754.h | 170 - sysdeps/ieee754/ldbl-128/k_cosl.c | 131 - sysdeps/ieee754/ldbl-128/k_sincosl.c | 170 - sysdeps/ieee754/ldbl-128/k_sinl.c | 135 - sysdeps/ieee754/ldbl-128/k_tanl.c | 168 - sysdeps/ieee754/ldbl-128/ldbl2mpn.c | 140 - sysdeps/ieee754/ldbl-128/lgamma_negl.c | 551 - sysdeps/ieee754/ldbl-128/lgamma_productl.c | 52 - sysdeps/ieee754/ldbl-128/math_ldbl.h | 120 - sysdeps/ieee754/ldbl-128/mpn2ldbl.c | 52 - sysdeps/ieee754/ldbl-128/printf_fphex.c | 25 - sysdeps/ieee754/ldbl-128/printf_fphex_macros.h | 104 - sysdeps/ieee754/ldbl-128/s_asinhl.c | 79 - sysdeps/ieee754/ldbl-128/s_atanl.c | 253 - sysdeps/ieee754/ldbl-128/s_cbrtl.c | 135 - sysdeps/ieee754/ldbl-128/s_ceill.c | 66 - sysdeps/ieee754/ldbl-128/s_copysignl.c | 38 - sysdeps/ieee754/ldbl-128/s_cosl.c | 86 - sysdeps/ieee754/ldbl-128/s_erfl.c | 948 -- sysdeps/ieee754/ldbl-128/s_expm1l.c | 166 - sysdeps/ieee754/ldbl-128/s_fabsl.c | 34 - sysdeps/ieee754/ldbl-128/s_finitel.c | 36 - sysdeps/ieee754/ldbl-128/s_floorl.c | 67 - sysdeps/ieee754/ldbl-128/s_fma.c | 55 - sysdeps/ieee754/ldbl-128/s_fmal.c | 298 - sysdeps/ieee754/ldbl-128/s_fpclassifyl.c | 44 - sysdeps/ieee754/ldbl-128/s_frexpl.c | 54 - sysdeps/ieee754/ldbl-128/s_fromfpl.c | 4 - sysdeps/ieee754/ldbl-128/s_fromfpl_main.c | 90 - sysdeps/ieee754/ldbl-128/s_fromfpxl.c | 4 - sysdeps/ieee754/ldbl-128/s_getpayloadl.c | 57 - sysdeps/ieee754/ldbl-128/s_isinfl.c | 29 - sysdeps/ieee754/ldbl-128/s_isnanl.c | 38 - sysdeps/ieee754/ldbl-128/s_issignalingl.c | 46 - sysdeps/ieee754/ldbl-128/s_llrintl.c | 108 - sysdeps/ieee754/ldbl-128/s_llroundl.c | 102 - sysdeps/ieee754/ldbl-128/s_log1pl.c | 256 - sysdeps/ieee754/ldbl-128/s_logbl.c | 54 - sysdeps/ieee754/ldbl-128/s_lrintl.c | 137 - sysdeps/ieee754/ldbl-128/s_lroundl.c | 113 - sysdeps/ieee754/ldbl-128/s_modfl.c | 79 - sysdeps/ieee754/ldbl-128/s_nearbyintl.c | 67 - sysdeps/ieee754/ldbl-128/s_nextafterl.c | 86 - sysdeps/ieee754/ldbl-128/s_nexttoward.c | 89 - sysdeps/ieee754/ldbl-128/s_nexttowardf.c | 76 - sysdeps/ieee754/ldbl-128/s_nextupl.c | 56 - sysdeps/ieee754/ldbl-128/s_remquol.c | 112 - sysdeps/ieee754/ldbl-128/s_rintl.c | 62 - sysdeps/ieee754/ldbl-128/s_roundevenl.c | 102 - sysdeps/ieee754/ldbl-128/s_roundl.c | 80 - sysdeps/ieee754/ldbl-128/s_scalblnl.c | 62 - sysdeps/ieee754/ldbl-128/s_scalbnl.c | 62 - sysdeps/ieee754/ldbl-128/s_setpayloadl.c | 3 - sysdeps/ieee754/ldbl-128/s_setpayloadl_main.c | 69 - sysdeps/ieee754/ldbl-128/s_setpayloadsigl.c | 3 - sysdeps/ieee754/ldbl-128/s_signbitl.c | 27 - sysdeps/ieee754/ldbl-128/s_sincosl.c | 73 - sysdeps/ieee754/ldbl-128/s_sinl.c | 86 - sysdeps/ieee754/ldbl-128/s_tanhl.c | 100 - sysdeps/ieee754/ldbl-128/s_tanl.c | 80 - sysdeps/ieee754/ldbl-128/s_totalorderl.c | 54 - sysdeps/ieee754/ldbl-128/s_totalordermagl.c | 48 - sysdeps/ieee754/ldbl-128/s_truncl.c | 56 - sysdeps/ieee754/ldbl-128/s_ufromfpl.c | 4 - sysdeps/ieee754/ldbl-128/s_ufromfpxl.c | 4 - sysdeps/ieee754/ldbl-128/strtod_nan_ldouble.h | 33 - sysdeps/ieee754/ldbl-128/strtold_l.c | 37 - sysdeps/ieee754/ldbl-128/t_expl.h | 970 -- sysdeps/ieee754/ldbl-128/t_sincosl.c | 696 -- sysdeps/ieee754/ldbl-128/w_expl_compat.c | 42 - sysdeps/ieee754/ldbl-128/x2y2m1l.c | 76 - sysdeps/ieee754/ldbl-128ibm/Makefile | 16 - sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h | 41 - sysdeps/ieee754/ldbl-128ibm/e_acoshl.c | 62 - sysdeps/ieee754/ldbl-128ibm/e_acosl.c | 316 - sysdeps/ieee754/ldbl-128ibm/e_asinl.c | 250 - sysdeps/ieee754/ldbl-128ibm/e_atan2l.c | 122 - sysdeps/ieee754/ldbl-128ibm/e_atanhl.c | 71 - sysdeps/ieee754/ldbl-128ibm/e_coshl.c | 81 - sysdeps/ieee754/ldbl-128ibm/e_exp10l.c | 48 - sysdeps/ieee754/ldbl-128ibm/e_expl.c | 256 - sysdeps/ieee754/ldbl-128ibm/e_fmodl.c | 149 - sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c | 218 - sysdeps/ieee754/ldbl-128ibm/e_hypotl.c | 138 - sysdeps/ieee754/ldbl-128ibm/e_ilogbl.c | 70 - sysdeps/ieee754/ldbl-128ibm/e_j0l.c | 5 - sysdeps/ieee754/ldbl-128ibm/e_j1l.c | 4 - sysdeps/ieee754/ldbl-128ibm/e_jnl.c | 421 - sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c | 5 - sysdeps/ieee754/ldbl-128ibm/e_log10l.c | 261 - sysdeps/ieee754/ldbl-128ibm/e_log2l.c | 254 - sysdeps/ieee754/ldbl-128ibm/e_logl.c | 300 - sysdeps/ieee754/ldbl-128ibm/e_powl.c | 415 - sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c | 279 - sysdeps/ieee754/ldbl-128ibm/e_remainderl.c | 81 - sysdeps/ieee754/ldbl-128ibm/e_sinhl.c | 79 - sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c | 102 - sysdeps/ieee754/ldbl-128ibm/gamma_productl.c | 42 - sysdeps/ieee754/ldbl-128ibm/ieee754.h | 133 - .../ieee754/ldbl-128ibm/include/bits/iscanonical.h | 5 - sysdeps/ieee754/ldbl-128ibm/k_cosl.c | 153 - sysdeps/ieee754/ldbl-128ibm/k_sincosl.c | 193 - sysdeps/ieee754/ldbl-128ibm/k_sinl.c | 157 - sysdeps/ieee754/ldbl-128ibm/k_tanl.c | 166 - sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c | 197 - sysdeps/ieee754/ldbl-128ibm/lgamma_negl.c | 532 - sysdeps/ieee754/ldbl-128ibm/lgamma_productl.c | 38 - sysdeps/ieee754/ldbl-128ibm/math_ldbl.h | 290 - sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c | 161 - sysdeps/ieee754/ldbl-128ibm/printf_fphex.c | 139 - sysdeps/ieee754/ldbl-128ibm/s_asinhl.c | 63 - sysdeps/ieee754/ldbl-128ibm/s_atanl.c | 250 - sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c | 10 - sysdeps/ieee754/ldbl-128ibm/s_ceill.c | 62 - sysdeps/ieee754/ldbl-128ibm/s_copysignl.c | 41 - sysdeps/ieee754/ldbl-128ibm/s_cosl.c | 88 - sysdeps/ieee754/ldbl-128ibm/s_erfl.c | 970 -- sysdeps/ieee754/ldbl-128ibm/s_expm1l.c | 152 - sysdeps/ieee754/ldbl-128ibm/s_fabsl.c | 44 - sysdeps/ieee754/ldbl-128ibm/s_finitel.c | 49 - sysdeps/ieee754/ldbl-128ibm/s_floorl.c | 62 - sysdeps/ieee754/ldbl-128ibm/s_fmal.c | 257 - sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c | 97 - sysdeps/ieee754/ldbl-128ibm/s_frexpl.c | 148 - sysdeps/ieee754/ldbl-128ibm/s_fromfpl.c | 4 - sysdeps/ieee754/ldbl-128ibm/s_fromfpl_main.c | 147 - sysdeps/ieee754/ldbl-128ibm/s_fromfpxl.c | 4 - sysdeps/ieee754/ldbl-128ibm/s_getpayloadl.c | 34 - sysdeps/ieee754/ldbl-128ibm/s_iscanonicall.c | 60 - sysdeps/ieee754/ldbl-128ibm/s_isinfl.c | 40 - sysdeps/ieee754/ldbl-128ibm/s_isnanl.c | 46 - sysdeps/ieee754/ldbl-128ibm/s_issignalingl.c | 49 - sysdeps/ieee754/ldbl-128ibm/s_llrintl.c | 140 - sysdeps/ieee754/ldbl-128ibm/s_llroundl.c | 120 - sysdeps/ieee754/ldbl-128ibm/s_log1pl.c | 249 - sysdeps/ieee754/ldbl-128ibm/s_logbl.c | 63 - sysdeps/ieee754/ldbl-128ibm/s_lrintl.c | 155 - sysdeps/ieee754/ldbl-128ibm/s_lroundl.c | 135 - sysdeps/ieee754/ldbl-128ibm/s_modfl.c | 96 - sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c | 21 - sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c | 160 - sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c | 90 - sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c | 79 - sysdeps/ieee754/ldbl-128ibm/s_nextupl.c | 78 - sysdeps/ieee754/ldbl-128ibm/s_remquol.c | 119 - sysdeps/ieee754/ldbl-128ibm/s_rintl.c | 129 - sysdeps/ieee754/ldbl-128ibm/s_roundevenl.c | 69 - sysdeps/ieee754/ldbl-128ibm/s_roundl.c | 87 - sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c | 104 - sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c | 104 - sysdeps/ieee754/ldbl-128ibm/s_setpayloadl.c | 3 - sysdeps/ieee754/ldbl-128ibm/s_setpayloadl_main.c | 60 - sysdeps/ieee754/ldbl-128ibm/s_setpayloadsigl.c | 3 - sysdeps/ieee754/ldbl-128ibm/s_signbitl.c | 32 - sysdeps/ieee754/ldbl-128ibm/s_sincosl.c | 76 - sysdeps/ieee754/ldbl-128ibm/s_sinl.c | 85 - sysdeps/ieee754/ldbl-128ibm/s_tanhl.c | 87 - sysdeps/ieee754/ldbl-128ibm/s_tanl.c | 79 - sysdeps/ieee754/ldbl-128ibm/s_totalorderl.c | 62 - sysdeps/ieee754/ldbl-128ibm/s_totalordermagl.c | 64 - sysdeps/ieee754/ldbl-128ibm/s_truncl.c | 62 - sysdeps/ieee754/ldbl-128ibm/s_ufromfpl.c | 4 - sysdeps/ieee754/ldbl-128ibm/s_ufromfpxl.c | 4 - sysdeps/ieee754/ldbl-128ibm/strtod_nan_ldouble.h | 30 - sysdeps/ieee754/ldbl-128ibm/strtold_l.c | 60 - sysdeps/ieee754/ldbl-128ibm/t_sincosl.c | 693 -- .../ldbl-128ibm/test-canonical-ldbl-128ibm.c | 230 - .../ieee754/ldbl-128ibm/test-fmodl-ldbl-128ibm.c | 21 - .../ieee754/ldbl-128ibm/test-fmodrem-ldbl-128ibm.c | 84 - .../ldbl-128ibm/test-remainderl-ldbl-128ibm.c | 21 - .../ieee754/ldbl-128ibm/test-remquol-ldbl-128ibm.c | 30 - .../ldbl-128ibm/test-totalorderl-ldbl-128ibm.c | 73 - .../ieee754/ldbl-128ibm/tst-strtold-ldbl-128ibm.c | 85 - sysdeps/ieee754/ldbl-128ibm/w_expl_compat.c | 21 - sysdeps/ieee754/ldbl-128ibm/x2y2m1l.c | 93 - sysdeps/ieee754/ldbl-64-128/e_ilogbl.c | 2 - sysdeps/ieee754/ldbl-64-128/s_asinhl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_atanl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_cbrtl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_ceill.c | 5 - sysdeps/ieee754/ldbl-64-128/s_copysignl.c | 9 - sysdeps/ieee754/ldbl-64-128/s_cosl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_erfl.c | 6 - sysdeps/ieee754/ldbl-64-128/s_expm1l.c | 5 - sysdeps/ieee754/ldbl-64-128/s_fabsl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_finitel.c | 17 - sysdeps/ieee754/ldbl-64-128/s_floorl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_fmal.c | 5 - sysdeps/ieee754/ldbl-64-128/s_fpclassifyl.c | 10 - sysdeps/ieee754/ldbl-64-128/s_frexpl.c | 9 - sysdeps/ieee754/ldbl-64-128/s_isinfl.c | 16 - sysdeps/ieee754/ldbl-64-128/s_isnanl.c | 16 - sysdeps/ieee754/ldbl-64-128/s_llrintl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_llroundl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_log1pl.c | 2 - sysdeps/ieee754/ldbl-64-128/s_logbl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_lrintl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_lroundl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_modfl.c | 9 - sysdeps/ieee754/ldbl-64-128/s_nearbyintl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_nextafterl.c | 6 - sysdeps/ieee754/ldbl-64-128/s_nexttoward.c | 5 - sysdeps/ieee754/ldbl-64-128/s_nexttowardf.c | 5 - sysdeps/ieee754/ldbl-64-128/s_remquol.c | 5 - sysdeps/ieee754/ldbl-64-128/s_rintl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_roundl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_scalblnl.c | 4 - sysdeps/ieee754/ldbl-64-128/s_scalbnl.c | 4 - sysdeps/ieee754/ldbl-64-128/s_signbitl.c | 11 - sysdeps/ieee754/ldbl-64-128/s_sincosl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_sinl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_tanhl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_tanl.c | 5 - sysdeps/ieee754/ldbl-64-128/s_truncl.c | 5 - sysdeps/ieee754/ldbl-64-128/strtold_l.c | 60 - sysdeps/ieee754/ldbl-64-128/w_expl_compat.c | 5 - sysdeps/ieee754/ldbl-64-128/w_scalblnl.c | 26 - sysdeps/ieee754/ldbl-96/Makefile | 21 - sysdeps/ieee754/ldbl-96/bits/iscanonical.h | 34 - sysdeps/ieee754/ldbl-96/bits/long-double.h | 20 - sysdeps/ieee754/ldbl-96/e_acoshl.c | 61 - sysdeps/ieee754/ldbl-96/e_asinl.c | 157 - sysdeps/ieee754/ldbl-96/e_atanhl.c | 69 - sysdeps/ieee754/ldbl-96/e_coshl.c | 87 - sysdeps/ieee754/ldbl-96/e_gammal_r.c | 210 - sysdeps/ieee754/ldbl-96/e_hypotl.c | 142 - sysdeps/ieee754/ldbl-96/e_j0l.c | 531 - sysdeps/ieee754/ldbl-96/e_j1l.c | 550 - sysdeps/ieee754/ldbl-96/e_jnl.c | 404 - sysdeps/ieee754/ldbl-96/e_lgammal_r.c | 439 - sysdeps/ieee754/ldbl-96/e_rem_pio2l.c | 236 - sysdeps/ieee754/ldbl-96/e_sinhl.c | 87 - sysdeps/ieee754/ldbl-96/gamma_product.c | 43 - sysdeps/ieee754/ldbl-96/gamma_productl.c | 45 - sysdeps/ieee754/ldbl-96/include/bits/iscanonical.h | 5 - sysdeps/ieee754/ldbl-96/k_cosl.c | 123 - sysdeps/ieee754/ldbl-96/k_sinl.c | 130 - sysdeps/ieee754/ldbl-96/k_tanl.c | 152 - sysdeps/ieee754/ldbl-96/ldbl2mpn.c | 94 - sysdeps/ieee754/ldbl-96/lgamma_negl.c | 418 - sysdeps/ieee754/ldbl-96/lgamma_product.c | 37 - sysdeps/ieee754/ldbl-96/lgamma_productl.c | 52 - sysdeps/ieee754/ldbl-96/math_ldbl.h | 120 - sysdeps/ieee754/ldbl-96/mpn2ldbl.c | 46 - sysdeps/ieee754/ldbl-96/printf_fphex.c | 95 - sysdeps/ieee754/ldbl-96/s_asinhl.c | 65 - sysdeps/ieee754/ldbl-96/s_cbrtl.c | 70 - sysdeps/ieee754/ldbl-96/s_copysignl.c | 38 - sysdeps/ieee754/ldbl-96/s_cosl.c | 88 - sysdeps/ieee754/ldbl-96/s_erfl.c | 451 - sysdeps/ieee754/ldbl-96/s_fma.c | 101 - sysdeps/ieee754/ldbl-96/s_fmal.c | 296 - sysdeps/ieee754/ldbl-96/s_frexpl.c | 61 - sysdeps/ieee754/ldbl-96/s_fromfpl.c | 4 - sysdeps/ieee754/ldbl-96/s_fromfpl_main.c | 84 - sysdeps/ieee754/ldbl-96/s_fromfpxl.c | 4 - sysdeps/ieee754/ldbl-96/s_getpayloadl.c | 32 - sysdeps/ieee754/ldbl-96/s_iscanonicall.c | 44 - sysdeps/ieee754/ldbl-96/s_issignalingl.c | 44 - sysdeps/ieee754/ldbl-96/s_llrintl.c | 91 - sysdeps/ieee754/ldbl-96/s_llroundl.c | 89 - sysdeps/ieee754/ldbl-96/s_lrintl.c | 126 - sysdeps/ieee754/ldbl-96/s_lroundl.c | 111 - sysdeps/ieee754/ldbl-96/s_modfl.c | 73 - sysdeps/ieee754/ldbl-96/s_nexttoward.c | 86 - sysdeps/ieee754/ldbl-96/s_nexttowardf.c | 74 - sysdeps/ieee754/ldbl-96/s_nextupl.c | 84 - sysdeps/ieee754/ldbl-96/s_remquol.c | 111 - sysdeps/ieee754/ldbl-96/s_roundevenl.c | 124 - sysdeps/ieee754/ldbl-96/s_roundl.c | 92 - sysdeps/ieee754/ldbl-96/s_scalblnl.c | 60 - sysdeps/ieee754/ldbl-96/s_setpayloadl.c | 3 - sysdeps/ieee754/ldbl-96/s_setpayloadl_main.c | 68 - sysdeps/ieee754/ldbl-96/s_setpayloadsigl.c | 3 - sysdeps/ieee754/ldbl-96/s_signbitl.c | 26 - sysdeps/ieee754/ldbl-96/s_sincosl.c | 76 - sysdeps/ieee754/ldbl-96/s_sinl.c | 88 - sysdeps/ieee754/ldbl-96/s_tanhl.c | 90 - sysdeps/ieee754/ldbl-96/s_tanl.c | 81 - sysdeps/ieee754/ldbl-96/s_totalorderl.c | 57 - sysdeps/ieee754/ldbl-96/s_totalordermagl.c | 51 - sysdeps/ieee754/ldbl-96/s_ufromfpl.c | 4 - sysdeps/ieee754/ldbl-96/s_ufromfpxl.c | 4 - sysdeps/ieee754/ldbl-96/strtod_nan_ldouble.h | 30 - sysdeps/ieee754/ldbl-96/strtold_l.c | 37 - sysdeps/ieee754/ldbl-96/t_sincosl.c | 483 - sysdeps/ieee754/ldbl-96/test-canonical-ldbl-96.c | 141 - sysdeps/ieee754/ldbl-96/test-totalorderl-ldbl-96.c | 82 - sysdeps/ieee754/ldbl-96/w_expl_compat.c | 34 - sysdeps/ieee754/ldbl-96/x2y2m1.c | 39 - sysdeps/ieee754/ldbl-96/x2y2m1l.c | 75 - sysdeps/ieee754/ldbl-opt/Makefile | 167 - sysdeps/ieee754/ldbl-opt/Versions | 100 - sysdeps/ieee754/ldbl-opt/bits/long-double.h | 24 - sysdeps/ieee754/ldbl-opt/configure | 39 - sysdeps/ieee754/ldbl-opt/configure.ac | 19 - sysdeps/ieee754/ldbl-opt/math-type-macros-double.h | 38 - .../ieee754/ldbl-opt/math-type-macros-ldouble.h | 38 - sysdeps/ieee754/ldbl-opt/math_ldbl_opt.c | 3 - sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h | 46 - sysdeps/ieee754/ldbl-opt/nldbl-acos.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-acosh.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-asin.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-asinh.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-asprintf.c | 17 - sysdeps/ieee754/ldbl-opt/nldbl-asprintf_chk.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-atan.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-atan2.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-atanh.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-cabs.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-cacos.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-cacosh.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-canonicalize.c | 26 - sysdeps/ieee754/ldbl-opt/nldbl-carg.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-casin.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-casinh.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-catan.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-catanh.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-cbrt.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-ccos.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-ccosh.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-ceil.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-cexp.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-cimag.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-clog.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-clog10.c | 11 - sysdeps/ieee754/ldbl-opt/nldbl-compat.c | 1085 -- sysdeps/ieee754/ldbl-opt/nldbl-compat.h | 104 - sysdeps/ieee754/ldbl-opt/nldbl-conj.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-copysign.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-cos.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-cosh.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-cpow.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-cproj.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-creal.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-csin.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-csinh.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-csqrt.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-ctan.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-ctanh.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-dprintf.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-dprintf_chk.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-erf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-erfc.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-exp.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-exp10.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-exp2.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-expm1.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-fabs.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-fdim.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-finite.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-floor.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-fma.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-fmax.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-fmaxmag.c | 26 - sysdeps/ieee754/ldbl-opt/nldbl-fmin.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-fminmag.c | 26 - sysdeps/ieee754/ldbl-opt/nldbl-fmod.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-fprintf.c | 17 - sysdeps/ieee754/ldbl-opt/nldbl-fprintf_chk.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-frexp.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-fromfp.c | 26 - sysdeps/ieee754/ldbl-opt/nldbl-fromfpx.c | 26 - sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-fwprintf.c | 16 - sysdeps/ieee754/ldbl-opt/nldbl-fwprintf_chk.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-fwscanf.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-gamma.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-getpayload.c | 26 - sysdeps/ieee754/ldbl-opt/nldbl-hypot.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-ilogb.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-isinf.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-isnan.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-isoc99_fscanf.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-isoc99_fwscanf.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-isoc99_scanf.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-isoc99_sscanf.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-isoc99_swscanf.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vfscanf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vfwscanf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vscanf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vsscanf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vswscanf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vwscanf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-isoc99_wscanf.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-j0.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-j1.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-jn.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-ldexp.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-lgamma.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-lgamma_r.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-llogb.c | 26 - sysdeps/ieee754/ldbl-opt/nldbl-llrint.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-llround.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-log.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-log10.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-log1p.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-log2.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-logb.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-lrint.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-lround.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-modf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-nan.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-nearbyint.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-nextafter.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-nextdown.c | 27 - sysdeps/ieee754/ldbl-opt/nldbl-nexttoward.c | 14 - sysdeps/ieee754/ldbl-opt/nldbl-nexttowardf.c | 12 - sysdeps/ieee754/ldbl-opt/nldbl-nextup.c | 27 - sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf.c | 13 - .../ieee754/ldbl-opt/nldbl-obstack_printf_chk.c | 13 - sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf.c | 8 - .../ieee754/ldbl-opt/nldbl-obstack_vprintf_chk.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-pow.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-pow10.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-printf.c | 17 - sysdeps/ieee754/ldbl-opt/nldbl-printf_chk.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-printf_fp.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-printf_size.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-qecvt.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-qecvt_r.c | 11 - sysdeps/ieee754/ldbl-opt/nldbl-qfcvt.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-qfcvt_r.c | 11 - sysdeps/ieee754/ldbl-opt/nldbl-qgcvt.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-remainder.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-remquo.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-rint.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-round.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-roundeven.c | 26 - sysdeps/ieee754/ldbl-opt/nldbl-scalb.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-scalbln.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-scalbn.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-scanf.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-setpayload.c | 26 - sysdeps/ieee754/ldbl-opt/nldbl-setpayloadsig.c | 26 - sysdeps/ieee754/ldbl-opt/nldbl-signbit.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-significand.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-sin.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-sincos.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-sinh.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-snprintf.c | 16 - sysdeps/ieee754/ldbl-opt/nldbl-snprintf_chk.c | 16 - sysdeps/ieee754/ldbl-opt/nldbl-sprintf.c | 17 - sysdeps/ieee754/ldbl-opt/nldbl-sprintf_chk.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-sqrt.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-sscanf.c | 17 - sysdeps/ieee754/ldbl-opt/nldbl-strfmon.c | 14 - sysdeps/ieee754/ldbl-opt/nldbl-strfmon_l.c | 16 - sysdeps/ieee754/ldbl-opt/nldbl-strfroml.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-strtold.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c | 20 - sysdeps/ieee754/ldbl-opt/nldbl-strtoldint.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-swprintf.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-swprintf_chk.c | 16 - sysdeps/ieee754/ldbl-opt/nldbl-swscanf.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-syslog.c | 11 - sysdeps/ieee754/ldbl-opt/nldbl-syslog_chk.c | 12 - sysdeps/ieee754/ldbl-opt/nldbl-tan.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-tanh.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-tgamma.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-totalorder.c | 26 - sysdeps/ieee754/ldbl-opt/nldbl-totalordermag.c | 26 - sysdeps/ieee754/ldbl-opt/nldbl-trunc.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-ufromfp.c | 26 - sysdeps/ieee754/ldbl-opt/nldbl-ufromfpx.c | 26 - sysdeps/ieee754/ldbl-opt/nldbl-vasprintf.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-vasprintf_chk.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-vdprintf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-vdprintf_chk.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-vfprintf.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-vfprintf_chk.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf_chk.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-vfwscanf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-vprintf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-vprintf_chk.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf_chk.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-vsprintf.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-vsprintf_chk.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-vsscanf.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-vswprintf.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-vswprintf_chk.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-vswscanf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-vsyslog.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-vsyslog_chk.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-vwprintf.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-vwprintf_chk.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-vwscanf.c | 9 - sysdeps/ieee754/ldbl-opt/nldbl-wcstold.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c | 14 - sysdeps/ieee754/ldbl-opt/nldbl-wcstoldint.c | 10 - sysdeps/ieee754/ldbl-opt/nldbl-wprintf.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-wprintf_chk.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-wscanf.c | 15 - sysdeps/ieee754/ldbl-opt/nldbl-y0.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-y1.c | 8 - sysdeps/ieee754/ldbl-opt/nldbl-yn.c | 8 - sysdeps/ieee754/ldbl-opt/s_asinh.c | 5 - sysdeps/ieee754/ldbl-opt/s_atan.c | 5 - sysdeps/ieee754/ldbl-opt/s_cbrt.c | 5 - sysdeps/ieee754/ldbl-opt/s_ceil.c | 5 - sysdeps/ieee754/ldbl-opt/s_clog10l.c | 31 - sysdeps/ieee754/ldbl-opt/s_copysign.c | 9 - sysdeps/ieee754/ldbl-opt/s_erf.c | 6 - sysdeps/ieee754/ldbl-opt/s_expm1.c | 5 - sysdeps/ieee754/ldbl-opt/s_fabs.c | 5 - sysdeps/ieee754/ldbl-opt/s_finite.c | 18 - sysdeps/ieee754/ldbl-opt/s_floor.c | 5 - sysdeps/ieee754/ldbl-opt/s_fma.c | 5 - sysdeps/ieee754/ldbl-opt/s_fmal.c | 5 - sysdeps/ieee754/ldbl-opt/s_frexp.c | 9 - sysdeps/ieee754/ldbl-opt/s_isinf.c | 8 - sysdeps/ieee754/ldbl-opt/s_isnan.c | 8 - sysdeps/ieee754/ldbl-opt/s_ldexp.c | 30 - sysdeps/ieee754/ldbl-opt/s_ldexpl.c | 31 - sysdeps/ieee754/ldbl-opt/s_llrint.c | 5 - sysdeps/ieee754/ldbl-opt/s_llround.c | 5 - sysdeps/ieee754/ldbl-opt/s_log1p.c | 5 - sysdeps/ieee754/ldbl-opt/s_logb.c | 5 - sysdeps/ieee754/ldbl-opt/s_lrint.c | 5 - sysdeps/ieee754/ldbl-opt/s_lround.c | 5 - sysdeps/ieee754/ldbl-opt/s_modf.c | 9 - sysdeps/ieee754/ldbl-opt/s_nearbyint.c | 5 - sysdeps/ieee754/ldbl-opt/s_nextafter.c | 12 - sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c | 81 - sysdeps/ieee754/ldbl-opt/s_remquo.c | 5 - sysdeps/ieee754/ldbl-opt/s_rint.c | 5 - sysdeps/ieee754/ldbl-opt/s_round.c | 5 - sysdeps/ieee754/ldbl-opt/s_scalbln.c | 9 - sysdeps/ieee754/ldbl-opt/s_scalbn.c | 9 - sysdeps/ieee754/ldbl-opt/s_significand.c | 5 - sysdeps/ieee754/ldbl-opt/s_significandl.c | 5 - sysdeps/ieee754/ldbl-opt/s_sin.c | 15 - sysdeps/ieee754/ldbl-opt/s_sincos.c | 5 - sysdeps/ieee754/ldbl-opt/s_tan.c | 5 - sysdeps/ieee754/ldbl-opt/s_tanh.c | 5 - sysdeps/ieee754/ldbl-opt/s_trunc.c | 5 - sysdeps/ieee754/ldbl-opt/w_acos_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_acosh_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_acoshl_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_acosl_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_asin_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_asinl_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_atan2_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_atan2l_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_atanh_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_atanhl_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_cosh_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_coshl_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_exp10_compat.c | 6 - sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c | 6 - sysdeps/ieee754/ldbl-opt/w_exp_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_fmod_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_fmodl_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_hypot_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_hypotl_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_j0_compat.c | 6 - sysdeps/ieee754/ldbl-opt/w_j0l_compat.c | 6 - sysdeps/ieee754/ldbl-opt/w_j1_compat.c | 6 - sysdeps/ieee754/ldbl-opt/w_j1l_compat.c | 6 - sysdeps/ieee754/ldbl-opt/w_jn_compat.c | 6 - sysdeps/ieee754/ldbl-opt/w_jnl_compat.c | 6 - sysdeps/ieee754/ldbl-opt/w_lgamma_compat.c | 7 - sysdeps/ieee754/ldbl-opt/w_lgamma_compatl.c | 11 - sysdeps/ieee754/ldbl-opt/w_lgamma_r_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_lgammal_r_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_log10_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_log10l_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_log2_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_log2l_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_log_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_logl_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_pow_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_powl_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_remainder_compat.c | 7 - sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c | 7 - sysdeps/ieee754/ldbl-opt/w_scalb_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_scalbl_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_sinh_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_sinhl_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_sqrt_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_sqrtl_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_tgamma_compat.c | 5 - sysdeps/ieee754/ldbl-opt/w_tgammal_compat.c | 5 - sysdeps/ieee754/s_lib_version.c | 41 - sysdeps/ieee754/s_matherr.c | 28 - sysdeps/ieee754/s_signgam.c | 4 - sysdeps/init_array/crti.S | 13 - sysdeps/init_array/crtn.S | 13 - sysdeps/init_array/elf-init.c | 37 - sysdeps/init_array/gmon-start.c | 41 - sysdeps/init_array/pt-crti.S | 23 - sysdeps/m68k/Implies | 4 - sysdeps/m68k/Makefile | 53 - sysdeps/m68k/Versions | 13 - sysdeps/m68k/__longjmp.c | 61 - sysdeps/m68k/abort-instr.h | 2 - sysdeps/m68k/asm-syntax.h | 82 - sysdeps/m68k/backtrace.c | 162 - sysdeps/m68k/bits/byteswap.h | 88 - sysdeps/m68k/bits/endian.h | 7 - sysdeps/m68k/bits/link.h | 57 - sysdeps/m68k/bits/setjmp.h | 46 - sysdeps/m68k/bsd-_setjmp.c | 21 - sysdeps/m68k/bsd-setjmp.c | 20 - sysdeps/m68k/coldfire/atomic-machine.h | 75 - sysdeps/m68k/coldfire/fpu/bits/mathinline.h | 44 - sysdeps/m68k/coldfire/fpu/e_sqrt.c | 24 - sysdeps/m68k/coldfire/fpu/e_sqrtf.c | 25 - sysdeps/m68k/coldfire/fpu/fraiseexcpt.c | 68 - sysdeps/m68k/coldfire/fpu/libm-test-ulps | 228 - sysdeps/m68k/coldfire/fpu/libm-test-ulps-name | 1 - sysdeps/m68k/coldfire/fpu/math_private.h | 10 - sysdeps/m68k/coldfire/fpu/s_fabs.c | 28 - sysdeps/m68k/coldfire/fpu/s_fabsf.c | 24 - sysdeps/m68k/coldfire/fpu/s_lrint.c | 29 - sysdeps/m68k/coldfire/fpu/s_lrintf.c | 25 - sysdeps/m68k/coldfire/fpu/s_rint.c | 28 - sysdeps/m68k/coldfire/fpu/s_rintf.c | 25 - sysdeps/m68k/coldfire/nofpu/s_fma.c | 1 - sysdeps/m68k/coldfire/nofpu/s_fmaf.c | 1 - sysdeps/m68k/coldfire/nofpu/sfp-machine.h | 1 - sysdeps/m68k/coldfire/sysdep.h | 40 - sysdeps/m68k/crti.S | 82 - sysdeps/m68k/crtn.S | 47 - sysdeps/m68k/dl-machine.h | 319 - sysdeps/m68k/dl-tls.h | 47 - sysdeps/m68k/dl-trampoline.S | 222 - sysdeps/m68k/ffs.c | 47 - sysdeps/m68k/fpu/bits/fenv.h | 95 - sysdeps/m68k/fpu/fclrexcpt.c | 50 - sysdeps/m68k/fpu/fedisblxcpt.c | 38 - sysdeps/m68k/fpu/feenablxcpt.c | 38 - sysdeps/m68k/fpu/fegetenv.c | 45 - sysdeps/m68k/fpu/fegetexcept.c | 31 - sysdeps/m68k/fpu/fegetmode.c | 27 - sysdeps/m68k/fpu/fegetround.c | 33 - sysdeps/m68k/fpu/feholdexcpt.c | 47 - sysdeps/m68k/fpu/fesetenv.c | 75 - sysdeps/m68k/fpu/fesetexcept.c | 31 - sysdeps/m68k/fpu/fesetmode.c | 32 - sysdeps/m68k/fpu/fesetround.c | 40 - sysdeps/m68k/fpu/feupdateenv.c | 51 - sysdeps/m68k/fpu/fgetexcptflg.c | 42 - sysdeps/m68k/fpu/fsetexcptflg.c | 48 - sysdeps/m68k/fpu/ftestexcept.c | 32 - sysdeps/m68k/fpu_control.h | 118 - sysdeps/m68k/gccframe.h | 21 - sysdeps/m68k/jmpbuf-unwind.h | 45 - sysdeps/m68k/ldsodefs.h | 42 - sysdeps/m68k/libc-tls.c | 33 - sysdeps/m68k/m680x0/Implies | 1 - sysdeps/m68k/m680x0/Makefile | 2 - sysdeps/m68k/m680x0/add_n.S | 82 - sysdeps/m68k/m680x0/bits/flt-eval-method.h | 25 - sysdeps/m68k/m680x0/bits/fp-logb.h | 24 - sysdeps/m68k/m680x0/bits/huge_vall.h | 41 - sysdeps/m68k/m680x0/fpu/bits/mathinline.h | 444 - sysdeps/m68k/m680x0/fpu/branred.c | 1 - sysdeps/m68k/m680x0/fpu/doasin.c | 1 - sysdeps/m68k/m680x0/fpu/dosincos.c | 1 - sysdeps/m68k/m680x0/fpu/e_acos.c | 37 - sysdeps/m68k/m680x0/fpu/e_acosf.c | 6 - sysdeps/m68k/m680x0/fpu/e_acosl.c | 6 - sysdeps/m68k/m680x0/fpu/e_asin.c | 3 - sysdeps/m68k/m680x0/fpu/e_asinf.c | 3 - sysdeps/m68k/m680x0/fpu/e_asinl.c | 3 - sysdeps/m68k/m680x0/fpu/e_atan2.c | 104 - sysdeps/m68k/m680x0/fpu/e_atan2f.c | 3 - sysdeps/m68k/m680x0/fpu/e_atan2l.c | 3 - sysdeps/m68k/m680x0/fpu/e_atanh.c | 3 - sysdeps/m68k/m680x0/fpu/e_atanhf.c | 3 - sysdeps/m68k/m680x0/fpu/e_atanhl.c | 3 - sysdeps/m68k/m680x0/fpu/e_cosh.c | 3 - sysdeps/m68k/m680x0/fpu/e_coshf.c | 3 - sysdeps/m68k/m680x0/fpu/e_coshl.c | 3 - sysdeps/m68k/m680x0/fpu/e_exp.c | 3 - sysdeps/m68k/m680x0/fpu/e_exp10.c | 3 - sysdeps/m68k/m680x0/fpu/e_exp10f.c | 3 - sysdeps/m68k/m680x0/fpu/e_exp10l.c | 3 - sysdeps/m68k/m680x0/fpu/e_exp2.c | 3 - sysdeps/m68k/m680x0/fpu/e_exp2f.c | 3 - sysdeps/m68k/m680x0/fpu/e_exp2l.c | 3 - sysdeps/m68k/m680x0/fpu/e_expf.c | 3 - sysdeps/m68k/m680x0/fpu/e_expl.c | 3 - sysdeps/m68k/m680x0/fpu/e_fmod.c | 37 - sysdeps/m68k/m680x0/fpu/e_fmodf.c | 6 - sysdeps/m68k/m680x0/fpu/e_fmodl.c | 6 - sysdeps/m68k/m680x0/fpu/e_ilogb.c | 47 - sysdeps/m68k/m680x0/fpu/e_ilogbf.c | 3 - sysdeps/m68k/m680x0/fpu/e_ilogbl.c | 3 - sysdeps/m68k/m680x0/fpu/e_log.c | 3 - sysdeps/m68k/m680x0/fpu/e_log10.c | 3 - sysdeps/m68k/m680x0/fpu/e_log10f.c | 3 - sysdeps/m68k/m680x0/fpu/e_log10l.c | 3 - sysdeps/m68k/m680x0/fpu/e_log2.c | 3 - sysdeps/m68k/m680x0/fpu/e_log2f.c | 3 - sysdeps/m68k/m680x0/fpu/e_log2l.c | 3 - sysdeps/m68k/m680x0/fpu/e_logf.c | 3 - sysdeps/m68k/m680x0/fpu/e_logl.c | 3 - sysdeps/m68k/m680x0/fpu/e_pow.c | 126 - sysdeps/m68k/m680x0/fpu/e_powf.c | 3 - sysdeps/m68k/m680x0/fpu/e_powl.c | 3 - sysdeps/m68k/m680x0/fpu/e_rem_pio2.c | 3 - sysdeps/m68k/m680x0/fpu/e_rem_pio2f.c | 3 - sysdeps/m68k/m680x0/fpu/e_rem_pio2l.c | 3 - sysdeps/m68k/m680x0/fpu/e_remainder.c | 3 - sysdeps/m68k/m680x0/fpu/e_remainderf.c | 3 - sysdeps/m68k/m680x0/fpu/e_remainderl.c | 3 - sysdeps/m68k/m680x0/fpu/e_scalb.c | 60 - sysdeps/m68k/m680x0/fpu/e_scalbf.c | 3 - sysdeps/m68k/m680x0/fpu/e_scalbl.c | 3 - sysdeps/m68k/m680x0/fpu/e_sinh.c | 3 - sysdeps/m68k/m680x0/fpu/e_sinhf.c | 3 - sysdeps/m68k/m680x0/fpu/e_sinhl.c | 3 - sysdeps/m68k/m680x0/fpu/e_sqrt.c | 3 - sysdeps/m68k/m680x0/fpu/e_sqrtf.c | 3 - sysdeps/m68k/m680x0/fpu/e_sqrtl.c | 3 - sysdeps/m68k/m680x0/fpu/fraiseexcpt.c | 83 - sysdeps/m68k/m680x0/fpu/halfulp.c | 1 - sysdeps/m68k/m680x0/fpu/k_cosl.c | 1 - sysdeps/m68k/m680x0/fpu/k_rem_pio2.c | 3 - sysdeps/m68k/m680x0/fpu/k_rem_pio2f.c | 3 - sysdeps/m68k/m680x0/fpu/k_sinl.c | 1 - sysdeps/m68k/m680x0/fpu/k_tanf.c | 1 - sysdeps/m68k/m680x0/fpu/k_tanl.c | 1 - sysdeps/m68k/m680x0/fpu/libm-test-ulps | 1602 --- sysdeps/m68k/m680x0/fpu/libm-test-ulps-name | 1 - sysdeps/m68k/m680x0/fpu/math_private.h | 20 - sysdeps/m68k/m680x0/fpu/mathimpl.h | 93 - sysdeps/m68k/m680x0/fpu/mpa.c | 1 - sysdeps/m68k/m680x0/fpu/mpatan.c | 1 - sysdeps/m68k/m680x0/fpu/mpatan2.c | 1 - sysdeps/m68k/m680x0/fpu/mpexp.c | 1 - sysdeps/m68k/m680x0/fpu/mplog.c | 1 - sysdeps/m68k/m680x0/fpu/mpsqrt.c | 1 - sysdeps/m68k/m680x0/fpu/mptan.c | 1 - sysdeps/m68k/m680x0/fpu/s_atan.c | 34 - sysdeps/m68k/m680x0/fpu/s_atanf.c | 5 - sysdeps/m68k/m680x0/fpu/s_atanl.c | 5 - sysdeps/m68k/m680x0/fpu/s_ccosh_template.c | 68 - sysdeps/m68k/m680x0/fpu/s_ceil.c | 2 - sysdeps/m68k/m680x0/fpu/s_ceilf.c | 2 - sysdeps/m68k/m680x0/fpu/s_ceill.c | 2 - sysdeps/m68k/m680x0/fpu/s_cexp_template.c | 129 - sysdeps/m68k/m680x0/fpu/s_cos.c | 2 - sysdeps/m68k/m680x0/fpu/s_cosf.c | 2 - sysdeps/m68k/m680x0/fpu/s_cosl.c | 2 - sysdeps/m68k/m680x0/fpu/s_csin_template.c | 59 - sysdeps/m68k/m680x0/fpu/s_csinh_template.c | 62 - sysdeps/m68k/m680x0/fpu/s_expm1.c | 41 - sysdeps/m68k/m680x0/fpu/s_expm1f.c | 4 - sysdeps/m68k/m680x0/fpu/s_expm1l.c | 6 - sysdeps/m68k/m680x0/fpu/s_fabs.c | 2 - sysdeps/m68k/m680x0/fpu/s_fabsf.c | 2 - sysdeps/m68k/m680x0/fpu/s_fabsl.c | 2 - sysdeps/m68k/m680x0/fpu/s_finite.c | 2 - sysdeps/m68k/m680x0/fpu/s_finitef.c | 2 - sysdeps/m68k/m680x0/fpu/s_finitel.c | 2 - sysdeps/m68k/m680x0/fpu/s_floor.c | 2 - sysdeps/m68k/m680x0/fpu/s_floorf.c | 2 - sysdeps/m68k/m680x0/fpu/s_floorl.c | 2 - sysdeps/m68k/m680x0/fpu/s_fpclassifyl.c | 43 - sysdeps/m68k/m680x0/fpu/s_frexp.c | 53 - sysdeps/m68k/m680x0/fpu/s_frexpf.c | 3 - sysdeps/m68k/m680x0/fpu/s_frexpl.c | 58 - sysdeps/m68k/m680x0/fpu/s_isinf.c | 37 - sysdeps/m68k/m680x0/fpu/s_isinff.c | 5 - sysdeps/m68k/m680x0/fpu/s_isinfl.c | 5 - sysdeps/m68k/m680x0/fpu/s_isnan.c | 2 - sysdeps/m68k/m680x0/fpu/s_isnanf.c | 2 - sysdeps/m68k/m680x0/fpu/s_isnanl.c | 2 - sysdeps/m68k/m680x0/fpu/s_llrint.c | 75 - sysdeps/m68k/m680x0/fpu/s_llrintf.c | 65 - sysdeps/m68k/m680x0/fpu/s_llrintl.c | 64 - sysdeps/m68k/m680x0/fpu/s_log1p.c | 4 - sysdeps/m68k/m680x0/fpu/s_log1pf.c | 4 - sysdeps/m68k/m680x0/fpu/s_log1pl.c | 4 - sysdeps/m68k/m680x0/fpu/s_logbl.c | 49 - sysdeps/m68k/m680x0/fpu/s_lrint.c | 37 - sysdeps/m68k/m680x0/fpu/s_lrintf.c | 3 - sysdeps/m68k/m680x0/fpu/s_lrintl.c | 3 - sysdeps/m68k/m680x0/fpu/s_modf.c | 53 - sysdeps/m68k/m680x0/fpu/s_modff.c | 3 - sysdeps/m68k/m680x0/fpu/s_modfl.c | 3 - sysdeps/m68k/m680x0/fpu/s_nearbyint.c | 2 - sysdeps/m68k/m680x0/fpu/s_nearbyintf.c | 2 - sysdeps/m68k/m680x0/fpu/s_nearbyintl.c | 2 - sysdeps/m68k/m680x0/fpu/s_nextafterl.c | 108 - sysdeps/m68k/m680x0/fpu/s_remquo.c | 46 - sysdeps/m68k/m680x0/fpu/s_remquof.c | 3 - sysdeps/m68k/m680x0/fpu/s_remquol.c | 3 - sysdeps/m68k/m680x0/fpu/s_rint.c | 2 - sysdeps/m68k/m680x0/fpu/s_rintf.c | 2 - sysdeps/m68k/m680x0/fpu/s_rintl.c | 2 - sysdeps/m68k/m680x0/fpu/s_scalbln.c | 2 - sysdeps/m68k/m680x0/fpu/s_scalblnf.c | 2 - sysdeps/m68k/m680x0/fpu/s_scalblnl.c | 2 - sysdeps/m68k/m680x0/fpu/s_scalbn.c | 52 - sysdeps/m68k/m680x0/fpu/s_scalbnf.c | 3 - sysdeps/m68k/m680x0/fpu/s_scalbnl.c | 3 - sysdeps/m68k/m680x0/fpu/s_significand.c | 2 - sysdeps/m68k/m680x0/fpu/s_significandf.c | 2 - sysdeps/m68k/m680x0/fpu/s_significandl.c | 2 - sysdeps/m68k/m680x0/fpu/s_sin.c | 38 - sysdeps/m68k/m680x0/fpu/s_sincos.c | 34 - sysdeps/m68k/m680x0/fpu/s_sincosf.c | 3 - sysdeps/m68k/m680x0/fpu/s_sincosl.c | 3 - sysdeps/m68k/m680x0/fpu/s_sinf.c | 5 - sysdeps/m68k/m680x0/fpu/s_sinl.c | 5 - sysdeps/m68k/m680x0/fpu/s_tan.c | 2 - sysdeps/m68k/m680x0/fpu/s_tanf.c | 2 - sysdeps/m68k/m680x0/fpu/s_tanh.c | 2 - sysdeps/m68k/m680x0/fpu/s_tanhf.c | 2 - sysdeps/m68k/m680x0/fpu/s_tanhl.c | 2 - sysdeps/m68k/m680x0/fpu/s_tanl.c | 2 - sysdeps/m68k/m680x0/fpu/s_trunc.c | 2 - sysdeps/m68k/m680x0/fpu/s_truncf.c | 2 - sysdeps/m68k/m680x0/fpu/s_truncl.c | 2 - sysdeps/m68k/m680x0/fpu/sincos32.c | 1 - sysdeps/m68k/m680x0/fpu/sincostab.c | 1 - sysdeps/m68k/m680x0/fpu/slowexp.c | 1 - sysdeps/m68k/m680x0/fpu/slowpow.c | 1 - sysdeps/m68k/m680x0/fpu/t_exp.c | 1 - sysdeps/m68k/m680x0/lshift.S | 168 - sysdeps/m68k/m680x0/m68020/Makefile | 3 - sysdeps/m68k/m680x0/m68020/addmul_1.S | 88 - sysdeps/m68k/m680x0/m68020/atomic-machine.h | 261 - sysdeps/m68k/m680x0/m68020/bits/string.h | 24 - sysdeps/m68k/m680x0/m68020/mul_1.S | 83 - sysdeps/m68k/m680x0/m68020/string_private.h | 21 - sysdeps/m68k/m680x0/m68020/submul_1.S | 88 - sysdeps/m68k/m680x0/m68020/wordcopy.S | 1 - sysdeps/m68k/m680x0/printf_fphex.c | 2 - sysdeps/m68k/m680x0/rshift.S | 167 - sysdeps/m68k/m680x0/strtold_l.c | 2 - sysdeps/m68k/m680x0/sub_n.S | 82 - sysdeps/m68k/m680x0/sysdep.h | 39 - sysdeps/m68k/memchr.S | 307 - sysdeps/m68k/memcopy.h | 99 - sysdeps/m68k/memusage.h | 21 - sysdeps/m68k/nptl/Makefile | 21 - sysdeps/m68k/nptl/bits/pthreadtypes-arch.h | 61 - sysdeps/m68k/nptl/bits/semaphore.h | 35 - sysdeps/m68k/nptl/pthreaddef.h | 33 - sysdeps/m68k/nptl/tcb-offsets.sym | 10 - sysdeps/m68k/nptl/tls.h | 161 - sysdeps/m68k/preconfigure | 17 - sysdeps/m68k/rawmemchr.S | 197 - sysdeps/m68k/setjmp.c | 70 - sysdeps/m68k/shlib-versions | 1 - sysdeps/m68k/sotruss-lib.c | 51 - sysdeps/m68k/stackinfo.h | 41 - sysdeps/m68k/start.S | 120 - sysdeps/m68k/strchr.S | 281 - sysdeps/m68k/strchrnul.S | 267 - sysdeps/m68k/symbol-hacks.h | 21 - sysdeps/m68k/sys/ucontext.h | 126 - sysdeps/m68k/sysdep.h | 74 - sysdeps/m68k/tls-macros.h | 68 - sysdeps/m68k/tst-audit.h | 24 - sysdeps/m68k/wcpcpy.c | 36 - sysdeps/m68k/wcpcpy_chk.c | 35 - sysdeps/mach/Makefile | 53 - sysdeps/mach/Subdirs | 9 - sysdeps/mach/_strerror.c | 120 - sysdeps/mach/adjtime.c | 42 - sysdeps/mach/configure | 564 - sysdeps/mach/configure.ac | 135 - sysdeps/mach/getloadavg.c | 53 - sysdeps/mach/getpagesize.c | 28 - sysdeps/mach/getsysstats.c | 105 - sysdeps/mach/gettimeofday.c | 43 - sysdeps/mach/hurd/Implies | 5 - sysdeps/mach/hurd/Makeconfig | 7 - sysdeps/mach/hurd/Makefile | 206 - sysdeps/mach/hurd/Subdirs | 9 - sysdeps/mach/hurd/Versions | 37 - sysdeps/mach/hurd/_exit.c | 55 - sysdeps/mach/hurd/accept.c | 31 - sysdeps/mach/hurd/accept4.c | 98 - sysdeps/mach/hurd/access.c | 173 - sysdeps/mach/hurd/adjtime.c | 52 - sysdeps/mach/hurd/bind.c | 118 - sysdeps/mach/hurd/bits/errno.h | 329 - sysdeps/mach/hurd/bits/fcntl.h | 221 - sysdeps/mach/hurd/bits/ioctls.h | 432 - sysdeps/mach/hurd/bits/local_lim.h | 34 - sysdeps/mach/hurd/bits/param.h | 85 - sysdeps/mach/hurd/bits/posix_opt.h | 182 - sysdeps/mach/hurd/bits/socket.h | 362 - sysdeps/mach/hurd/bits/stat.h | 258 - sysdeps/mach/hurd/bits/statfs.h | 86 - sysdeps/mach/hurd/bits/statvfs.h | 95 - sysdeps/mach/hurd/bits/typesizes.h | 68 - sysdeps/mach/hurd/brk.c | 166 - sysdeps/mach/hurd/chdir.c | 31 - sysdeps/mach/hurd/check_fds.c | 107 - sysdeps/mach/hurd/chflags.c | 38 - sysdeps/mach/hurd/chmod.c | 38 - sysdeps/mach/hurd/chown.c | 38 - sysdeps/mach/hurd/chroot.c | 65 - sysdeps/mach/hurd/clock.c | 53 - sysdeps/mach/hurd/close.c | 34 - sysdeps/mach/hurd/closedir.c | 60 - sysdeps/mach/hurd/configure | 49 - sysdeps/mach/hurd/configure.ac | 32 - sysdeps/mach/hurd/connect.c | 77 - sysdeps/mach/hurd/cthreads.c | 59 - sysdeps/mach/hurd/device-nrs.h | 27 - sysdeps/mach/hurd/dirfd.c | 43 - sysdeps/mach/hurd/dirstream.h | 41 - sysdeps/mach/hurd/dl-execstack.c | 51 - sysdeps/mach/hurd/dl-fcntl.h | 22 - sysdeps/mach/hurd/dl-mman.h | 23 - sysdeps/mach/hurd/dl-sysdep.c | 661 -- sysdeps/mach/hurd/dl-sysdep.h | 31 - sysdeps/mach/hurd/dl-unistd.h | 28 - sysdeps/mach/hurd/dup2.c | 35 - sysdeps/mach/hurd/dup3.c | 139 - sysdeps/mach/hurd/eloop-threshold.h | 37 - sysdeps/mach/hurd/enbl-secure.c | 23 - sysdeps/mach/hurd/err_hurd.sub | 12 - sysdeps/mach/hurd/errlist.c | 28 - sysdeps/mach/hurd/errno-loc.c | 28 - sysdeps/mach/hurd/errno.c | 1 - sysdeps/mach/hurd/errnos.awk | 165 - sysdeps/mach/hurd/euidaccess.c | 57 - sysdeps/mach/hurd/execve.c | 42 - sysdeps/mach/hurd/faccessat.c | 65 - sysdeps/mach/hurd/fchdir.c | 32 - sysdeps/mach/hurd/fchflags.c | 36 - sysdeps/mach/hurd/fchmod.c | 36 - sysdeps/mach/hurd/fchmodat.c | 39 - sysdeps/mach/hurd/fchown.c | 36 - sysdeps/mach/hurd/fchownat.c | 40 - sysdeps/mach/hurd/fcntl.c | 212 - sysdeps/mach/hurd/fdatasync.c | 37 - sysdeps/mach/hurd/fdopendir.c | 57 - sysdeps/mach/hurd/fexecve.c | 33 - sysdeps/mach/hurd/fgetxattr.c | 33 - sysdeps/mach/hurd/flistxattr.c | 33 - sysdeps/mach/hurd/flock.c | 36 - sysdeps/mach/hurd/fork.c | 733 -- sysdeps/mach/hurd/fpathconf.c | 37 - sysdeps/mach/hurd/fremovexattr.c | 33 - sysdeps/mach/hurd/fsetxattr.c | 33 - sysdeps/mach/hurd/fstatfs.c | 31 - sysdeps/mach/hurd/fstatfs64.c | 35 - sysdeps/mach/hurd/fstatvfs.c | 28 - sysdeps/mach/hurd/fstatvfs64.c | 27 - sysdeps/mach/hurd/fsync.c | 37 - sysdeps/mach/hurd/ftruncate.c | 34 - sysdeps/mach/hurd/ftruncate64.c | 34 - sysdeps/mach/hurd/futimes.c | 50 - sysdeps/mach/hurd/fxstat.c | 32 - sysdeps/mach/hurd/fxstat64.c | 42 - sysdeps/mach/hurd/fxstatat.c | 32 - sysdeps/mach/hurd/fxstatat64.c | 46 - sysdeps/mach/hurd/getclktck.c | 36 - sysdeps/mach/hurd/getcwd.c | 320 - sysdeps/mach/hurd/getdents.c | 1 - sysdeps/mach/hurd/getdomain.c | 31 - sysdeps/mach/hurd/getdtsz.c | 43 - sysdeps/mach/hurd/getegid.c | 56 - sysdeps/mach/hurd/geteuid.c | 56 - sysdeps/mach/hurd/getgid.c | 53 - sysdeps/mach/hurd/getgroups.c | 69 - sysdeps/mach/hurd/gethostid.c | 34 - sysdeps/mach/hurd/gethostname.c | 32 - sysdeps/mach/hurd/getitimer.c | 101 - sysdeps/mach/hurd/getlogin.c | 38 - sysdeps/mach/hurd/getlogin_r.c | 48 - sysdeps/mach/hurd/getpeername.c | 69 - sysdeps/mach/hurd/getpgid.c | 42 - sysdeps/mach/hurd/getpid.c | 31 - sysdeps/mach/hurd/getppid.c | 32 - sysdeps/mach/hurd/getpriority.c | 85 - sysdeps/mach/hurd/getresgid.c | 61 - sysdeps/mach/hurd/getresuid.c | 61 - sysdeps/mach/hurd/getrlimit.c | 47 - sysdeps/mach/hurd/getrusage.c | 91 - sysdeps/mach/hurd/getsid.c | 38 - sysdeps/mach/hurd/getsockname.c | 59 - sysdeps/mach/hurd/getsockopt.c | 55 - sysdeps/mach/hurd/getuid.c | 53 - sysdeps/mach/hurd/getxattr.c | 34 - sysdeps/mach/hurd/group_member.c | 54 - sysdeps/mach/hurd/i386/Makefile | 8 - sysdeps/mach/hurd/i386/Versions | 10 - sysdeps/mach/hurd/i386/____longjmp_chk.S | 114 - sysdeps/mach/hurd/i386/bits/sigcontext.h | 121 - sysdeps/mach/hurd/i386/c++-types.data | 67 - sysdeps/mach/hurd/i386/dl-machine.h | 7 - sysdeps/mach/hurd/i386/exc2signal.c | 165 - sysdeps/mach/hurd/i386/init-first.c | 410 - sysdeps/mach/hurd/i386/intr-msg.h | 112 - sysdeps/mach/hurd/i386/ioperm.c | 53 - sysdeps/mach/hurd/i386/longjmp-ts.c | 39 - sysdeps/mach/hurd/i386/sigcontextinfo.h | 24 - sysdeps/mach/hurd/i386/signal-defines.sym | 10 - sysdeps/mach/hurd/i386/sigreturn.c | 139 - sysdeps/mach/hurd/i386/static-start.S | 27 - sysdeps/mach/hurd/i386/sys/io.h | 177 - sysdeps/mach/hurd/i386/tls.h | 169 - sysdeps/mach/hurd/i386/trampoline.c | 265 - sysdeps/mach/hurd/if_index.c | 196 - sysdeps/mach/hurd/ifreq.c | 64 - sysdeps/mach/hurd/ifreq.h | 44 - sysdeps/mach/hurd/init-posix.c | 2 - sysdeps/mach/hurd/ioctl.c | 326 - sysdeps/mach/hurd/isatty.c | 37 - sysdeps/mach/hurd/jmp-unwind.c | 79 - sysdeps/mach/hurd/kernel-features.h | 21 - sysdeps/mach/hurd/kill.c | 149 - sysdeps/mach/hurd/lchmod.c | 38 - sysdeps/mach/hurd/lchown.c | 40 - sysdeps/mach/hurd/lgetxattr.c | 35 - sysdeps/mach/hurd/libc-ldscript | 6 - sysdeps/mach/hurd/libc-lock.h | 216 - sysdeps/mach/hurd/libc-tsd.h | 34 - sysdeps/mach/hurd/libc_p-ldscript | 6 - sysdeps/mach/hurd/link.c | 58 - sysdeps/mach/hurd/linkat.c | 62 - sysdeps/mach/hurd/listen.c | 37 - sysdeps/mach/hurd/listxattr.c | 34 - sysdeps/mach/hurd/llistxattr.c | 35 - sysdeps/mach/hurd/lremovexattr.c | 35 - sysdeps/mach/hurd/lseek.c | 30 - sysdeps/mach/hurd/lseek64.c | 33 - sysdeps/mach/hurd/lsetxattr.c | 36 - sysdeps/mach/hurd/lutimes.c | 57 - sysdeps/mach/hurd/lxstat.c | 31 - sysdeps/mach/hurd/lxstat64.c | 43 - sysdeps/mach/hurd/malloc-machine.h | 36 - sysdeps/mach/hurd/mig-reply.c | 87 - sysdeps/mach/hurd/mkdir.c | 43 - sysdeps/mach/hurd/mkdirat.c | 42 - sysdeps/mach/hurd/mlock.c | 47 - sysdeps/mach/hurd/mmap.c | 188 - sysdeps/mach/hurd/mmap64.c | 47 - sysdeps/mach/hurd/munlock.c | 46 - sysdeps/mach/hurd/net/ethernet.h | 75 - sysdeps/mach/hurd/net/if_arp.h | 144 - sysdeps/mach/hurd/net/if_ether.h | 84 - sysdeps/mach/hurd/net/if_ppp.h | 172 - sysdeps/mach/hurd/net/route.h | 140 - sysdeps/mach/hurd/open.c | 60 - sysdeps/mach/hurd/open64.c | 1 - sysdeps/mach/hurd/openat.c | 59 - sysdeps/mach/hurd/openat64.c | 1 - sysdeps/mach/hurd/opendir.c | 130 - sysdeps/mach/hurd/pathconf.c | 40 - sysdeps/mach/hurd/pipe.c | 50 - sysdeps/mach/hurd/poll.c | 47 - sysdeps/mach/hurd/ppoll.c | 30 - sysdeps/mach/hurd/pread.c | 32 - sysdeps/mach/hurd/pread64.c | 38 - sysdeps/mach/hurd/prof-freq.c | 2 - sysdeps/mach/hurd/profil.c | 285 - sysdeps/mach/hurd/pselect.c | 39 - sysdeps/mach/hurd/ptrace.c | 385 - sysdeps/mach/hurd/ptsname.c | 64 - sysdeps/mach/hurd/pwrite.c | 34 - sysdeps/mach/hurd/pwrite64.c | 39 - sysdeps/mach/hurd/read.c | 32 - sysdeps/mach/hurd/readdir.c | 66 - sysdeps/mach/hurd/readdir64.c | 101 - sysdeps/mach/hurd/readdir64_r.c | 111 - sysdeps/mach/hurd/readdir_r.c | 64 - sysdeps/mach/hurd/readlink.c | 61 - sysdeps/mach/hurd/readlinkat.c | 59 - sysdeps/mach/hurd/reboot.c | 49 - sysdeps/mach/hurd/recv.c | 64 - sysdeps/mach/hurd/recvfrom.c | 103 - sysdeps/mach/hurd/recvmsg.c | 146 - sysdeps/mach/hurd/removexattr.c | 34 - sysdeps/mach/hurd/rename.c | 45 - sysdeps/mach/hurd/renameat.c | 47 - sysdeps/mach/hurd/revoke.c | 38 - sysdeps/mach/hurd/rewinddir.c | 30 - sysdeps/mach/hurd/rmdir.c | 39 - sysdeps/mach/hurd/sbrk.c | 41 - sysdeps/mach/hurd/seekdir.c | 37 - sysdeps/mach/hurd/select.c | 45 - sysdeps/mach/hurd/send.c | 43 - sysdeps/mach/hurd/sendfile.c | 36 - sysdeps/mach/hurd/sendfile64.c | 59 - sysdeps/mach/hurd/sendmsg.c | 165 - sysdeps/mach/hurd/sendto.c | 100 - sysdeps/mach/hurd/setdomain.c | 29 - sysdeps/mach/hurd/setegid.c | 67 - sysdeps/mach/hurd/seteuid.c | 67 - sysdeps/mach/hurd/setgid.c | 94 - sysdeps/mach/hurd/setgroups.c | 62 - sysdeps/mach/hurd/sethostid.c | 42 - sysdeps/mach/hurd/sethostname.c | 30 - sysdeps/mach/hurd/setitimer.c | 372 - sysdeps/mach/hurd/setlogin.c | 30 - sysdeps/mach/hurd/setpgid.c | 54 - sysdeps/mach/hurd/setpriority.c | 98 - sysdeps/mach/hurd/setregid.c | 95 - sysdeps/mach/hurd/setresgid.c | 123 - sysdeps/mach/hurd/setresuid.c | 124 - sysdeps/mach/hurd/setreuid.c | 95 - sysdeps/mach/hurd/setrlimit.c | 56 - sysdeps/mach/hurd/setsid.c | 73 - sysdeps/mach/hurd/setsockopt.c | 42 - sysdeps/mach/hurd/settimeofday.c | 52 - sysdeps/mach/hurd/setuid.c | 99 - sysdeps/mach/hurd/setxattr.c | 35 - sysdeps/mach/hurd/shlib-versions | 12 - sysdeps/mach/hurd/shutdown.c | 38 - sysdeps/mach/hurd/sigaction.c | 91 - sysdeps/mach/hurd/sigaltstack.c | 60 - sysdeps/mach/hurd/siglist.h | 22 - sysdeps/mach/hurd/sigpending.c | 45 - sysdeps/mach/hurd/sigprocmask.c | 83 - sysdeps/mach/hurd/sigstack.c | 43 - sysdeps/mach/hurd/sigsuspend.c | 83 - sysdeps/mach/hurd/sigwait.c | 133 - sysdeps/mach/hurd/socket.c | 65 - sysdeps/mach/hurd/socketpair.c | 94 - sysdeps/mach/hurd/spawni.c | 758 -- sysdeps/mach/hurd/statfs.c | 31 - sysdeps/mach/hurd/statfs64.c | 37 - sysdeps/mach/hurd/statfsconv.c | 48 - sysdeps/mach/hurd/statvfs.c | 28 - sysdeps/mach/hurd/statvfs64.c | 27 - sysdeps/mach/hurd/symlink.c | 69 - sysdeps/mach/hurd/symlinkat.c | 72 - sysdeps/mach/hurd/sync.c | 30 - sysdeps/mach/hurd/syncfs.c | 31 - sysdeps/mach/hurd/sysconf.c | 26 - sysdeps/mach/hurd/telldir.c | 31 - sysdeps/mach/hurd/times.c | 74 - sysdeps/mach/hurd/tls.h | 57 - sysdeps/mach/hurd/tmpfile.c | 68 - sysdeps/mach/hurd/tmpfile64.c | 1 - sysdeps/mach/hurd/truncate.c | 41 - sysdeps/mach/hurd/truncate64.c | 42 - sysdeps/mach/hurd/ttyname.c | 41 - sysdeps/mach/hurd/ttyname_r.c | 53 - sysdeps/mach/hurd/umask.c | 32 - sysdeps/mach/hurd/uname.c | 47 - sysdeps/mach/hurd/unlink.c | 44 - sysdeps/mach/hurd/unlinkat.c | 51 - sysdeps/mach/hurd/utimes.c | 55 - sysdeps/mach/hurd/wait4.c | 53 - sysdeps/mach/hurd/write.c | 32 - sysdeps/mach/hurd/xmknod.c | 33 - sysdeps/mach/hurd/xmknodat.c | 119 - sysdeps/mach/hurd/xstat.c | 31 - sysdeps/mach/hurd/xstat64.c | 46 - sysdeps/mach/hurd/xstatconv.c | 64 - sysdeps/mach/i386/machine-lock.h | 67 - sysdeps/mach/i386/machine-sp.h | 30 - sysdeps/mach/i386/syscall.S | 29 - sysdeps/mach/i386/sysdep.h | 69 - sysdeps/mach/i386/thread_state.h | 42 - sysdeps/mach/libc-lock.h | 145 - sysdeps/mach/mprotect.c | 50 - sysdeps/mach/msync.c | 56 - sysdeps/mach/munmap.c | 46 - sysdeps/mach/nanosleep.c | 70 - sysdeps/mach/pagecopy.h | 32 - sysdeps/mach/readonly-area.c | 56 - sysdeps/mach/sched_yield.c | 31 - sysdeps/mach/sleep.c | 44 - sysdeps/mach/strerror_l.c | 101 - sysdeps/mach/sys/reboot.h | 171 - sysdeps/mach/sys/syscall.h | 1 - sysdeps/mach/sysdep.h | 86 - sysdeps/mach/thread_state.h | 86 - sysdeps/mach/usleep.c | 41 - sysdeps/mach/xpg-strerror.c | 72 - sysdeps/microblaze/Implies | 4 - sysdeps/microblaze/Makefile | 11 - sysdeps/microblaze/__longjmp.S | 55 - sysdeps/microblaze/_mcount.S | 91 - sysdeps/microblaze/abort-instr.h | 2 - sysdeps/microblaze/asm-syntax.h | 24 - sysdeps/microblaze/atomic-machine.h | 269 - sysdeps/microblaze/backtrace.c | 142 - sysdeps/microblaze/backtrace_linux.c | 59 - sysdeps/microblaze/bits/endian.h | 30 - sysdeps/microblaze/bits/fenv.h | 50 - sysdeps/microblaze/bits/link.h | 57 - sysdeps/microblaze/bits/setjmp.h | 37 - sysdeps/microblaze/bsd-_setjmp.S | 22 - sysdeps/microblaze/bsd-setjmp.S | 22 - sysdeps/microblaze/crti.S | 88 - sysdeps/microblaze/crtn.S | 51 - sysdeps/microblaze/dl-machine.h | 299 - sysdeps/microblaze/dl-tls.h | 26 - sysdeps/microblaze/dl-trampoline.S | 109 - sysdeps/microblaze/gccframe.h | 21 - sysdeps/microblaze/jmpbuf-unwind.h | 46 - sysdeps/microblaze/ldsodefs.h | 45 - sysdeps/microblaze/libc-tls.c | 32 - sysdeps/microblaze/libm-test-ulps | 333 - sysdeps/microblaze/libm-test-ulps-name | 1 - sysdeps/microblaze/machine-gmon.h | 30 - sysdeps/microblaze/math_private.h | 39 - sysdeps/microblaze/memusage.h | 21 - sysdeps/microblaze/nptl/Makefile | 21 - sysdeps/microblaze/nptl/bits/pthreadtypes-arch.h | 70 - sysdeps/microblaze/nptl/bits/semaphore.h | 32 - sysdeps/microblaze/nptl/pthreaddef.h | 35 - sysdeps/microblaze/nptl/tcb-offsets.sym | 10 - sysdeps/microblaze/nptl/tls.h | 143 - sysdeps/microblaze/preconfigure | 3 - sysdeps/microblaze/s_fma.c | 1 - sysdeps/microblaze/s_fmaf.c | 1 - sysdeps/microblaze/setjmp.S | 75 - sysdeps/microblaze/sfp-machine.h | 1 - sysdeps/microblaze/sotruss-lib.c | 52 - sysdeps/microblaze/stackinfo.h | 34 - sysdeps/microblaze/start.S | 84 - sysdeps/microblaze/sysdep.h | 85 - sysdeps/microblaze/tls-macros.h | 46 - sysdeps/microblaze/tst-audit.h | 25 - sysdeps/mips/Implies | 3 - sysdeps/mips/Makefile | 85 - sysdeps/mips/__longjmp.c | 84 - sysdeps/mips/abort-instr.h | 6 - sysdeps/mips/add_n.S | 121 - sysdeps/mips/addmul_1.S | 128 - sysdeps/mips/atomic-machine.h | 479 - sysdeps/mips/backtrace.c | 1 - sysdeps/mips/bits/dlfcn.h | 64 - sysdeps/mips/bits/endian.h | 15 - sysdeps/mips/bits/fenv.h | 93 - sysdeps/mips/bits/ipctypes.h | 31 - sysdeps/mips/bits/link.h | 117 - sysdeps/mips/bits/long-double.h | 23 - sysdeps/mips/bits/nan.h | 67 - sysdeps/mips/bits/setjmp.h | 73 - sysdeps/mips/bits/wordsize.h | 31 - sysdeps/mips/bsd-_setjmp.S | 44 - sysdeps/mips/bsd-setjmp.S | 43 - sysdeps/mips/configure | 163 - sysdeps/mips/configure.ac | 15 - sysdeps/mips/dl-dtprocnum.h | 21 - sysdeps/mips/dl-machine-reject-phdr.h | 326 - sysdeps/mips/dl-machine.h | 936 -- sysdeps/mips/dl-procinfo.c | 63 - sysdeps/mips/dl-procinfo.h | 60 - sysdeps/mips/dl-tls.h | 45 - sysdeps/mips/dl-trampoline.c | 513 - sysdeps/mips/fpregdef.h | 23 - sysdeps/mips/fpu/e_sqrt.c | 38 - sysdeps/mips/fpu/e_sqrtf.c | 38 - sysdeps/mips/fpu/fclrexcpt.c | 47 - sysdeps/mips/fpu/fedisblxcpt.c | 40 - sysdeps/mips/fpu/feenablxcpt.c | 40 - sysdeps/mips/fpu/fegetenv.c | 33 - sysdeps/mips/fpu/fegetexcept.c | 33 - sysdeps/mips/fpu/fegetmode.c | 27 - sysdeps/mips/fpu/fegetround.c | 35 - sysdeps/mips/fpu/feholdexcpt.c | 41 - sysdeps/mips/fpu/fenv_libc.h | 31 - sysdeps/mips/fpu/fesetenv.c | 44 - sysdeps/mips/fpu/fesetexcept.c | 32 - sysdeps/mips/fpu/fesetmode.c | 38 - sysdeps/mips/fpu/fesetround.c | 46 - sysdeps/mips/fpu/feupdateenv.c | 45 - sysdeps/mips/fpu/fgetexcptflg.c | 39 - sysdeps/mips/fpu/fraiseexcpt.c | 48 - sysdeps/mips/fpu/fsetexcptflg.c | 42 - sysdeps/mips/fpu/ftestexcept.c | 33 - sysdeps/mips/fpu_control.h | 133 - sysdeps/mips/gccframe.h | 21 - sysdeps/mips/ieee754/ieee754.h | 323 - sysdeps/mips/ieee754/s_fma.c | 5 - sysdeps/mips/ieee754/s_fmaf.c | 5 - sysdeps/mips/ieee754/s_fmal.c | 7 - sysdeps/mips/include/sys/asm.h | 55 - sysdeps/mips/jmpbuf-unwind.h | 47 - sysdeps/mips/ldsodefs.h | 149 - sysdeps/mips/libc-tls.c | 32 - sysdeps/mips/linkmap.h | 6 - sysdeps/mips/localplt.data | 3 - sysdeps/mips/lshift.S | 97 - sysdeps/mips/machine-gmon.h | 146 - sysdeps/mips/math-tests.h | 44 - sysdeps/mips/math_private.h | 249 - sysdeps/mips/memcpy.S | 868 -- sysdeps/mips/memset.S | 426 - sysdeps/mips/memusage.h | 20 - sysdeps/mips/mips32/Implies | 3 - sysdeps/mips/mips32/Makefile | 3 - sysdeps/mips/mips32/crti.S | 100 - sysdeps/mips/mips32/crtn.S | 57 - sysdeps/mips/mips32/fpu/Makefile | 3 - sysdeps/mips/mips32/fpu/Versions | 5 - sysdeps/mips/mips32/fpu/e_sqrt.c | 1 - sysdeps/mips/mips32/fpu/e_sqrtf.c | 1 - .../mips/mips32/fpu/fix-fp-int-convert-overflow.h | 38 - sysdeps/mips/mips32/fpu/fpucw-helpers.c | 34 - sysdeps/mips/mips32/libm-test-ulps | 1690 --- sysdeps/mips/mips32/libm-test-ulps-name | 1 - sysdeps/mips/mips32/mips16/add_n.c | 1 - sysdeps/mips/mips32/mips16/addmul_1.c | 1 - sysdeps/mips/mips32/mips16/fpu/Makefile | 5 - sysdeps/mips/mips32/mips16/lshift.c | 1 - sysdeps/mips/mips32/mips16/mul_1.c | 1 - sysdeps/mips/mips32/mips16/rshift.c | 1 - sysdeps/mips/mips32/mips16/sub_n.c | 1 - sysdeps/mips/mips32/mips16/submul_1.c | 1 - sysdeps/mips/mips32/sfp-machine.h | 80 - sysdeps/mips/mips64/Implies | 5 - sysdeps/mips/mips64/Makefile | 3 - sysdeps/mips/mips64/Versions | 7 - sysdeps/mips/mips64/__longjmp.c | 95 - sysdeps/mips/mips64/add_n.S | 125 - sysdeps/mips/mips64/addmul_1.S | 131 - sysdeps/mips/mips64/bsd-_setjmp.S | 47 - sysdeps/mips/mips64/bsd-setjmp.S | 46 - sysdeps/mips/mips64/e_sqrtl.c | 39 - sysdeps/mips/mips64/gmp-mparam.h | 30 - sysdeps/mips/mips64/libm-test-ulps | 2270 ---- sysdeps/mips/mips64/libm-test-ulps-name | 1 - sysdeps/mips/mips64/lshift.S | 100 - sysdeps/mips/mips64/mul_1.S | 120 - sysdeps/mips/mips64/n32/Implies | 5 - sysdeps/mips/mips64/n32/Makefile | 6 - sysdeps/mips/mips64/n32/_itoa.h | 4 - sysdeps/mips/mips64/n32/crti.S | 100 - sysdeps/mips/mips64/n32/crtn.S | 59 - sysdeps/mips/mips64/n32/fpu/e_sqrt.c | 1 - sysdeps/mips/mips64/n32/fpu/e_sqrtf.c | 1 - sysdeps/mips/mips64/n64/Implies | 5 - sysdeps/mips/mips64/n64/Makefile | 6 - sysdeps/mips/mips64/n64/crti.S | 100 - sysdeps/mips/mips64/n64/crtn.S | 59 - sysdeps/mips/mips64/n64/fpu/e_sqrt.c | 1 - sysdeps/mips/mips64/n64/fpu/e_sqrtf.c | 1 - sysdeps/mips/mips64/rshift.S | 97 - sysdeps/mips/mips64/setjmp.S | 45 - sysdeps/mips/mips64/setjmp_aux.c | 76 - sysdeps/mips/mips64/sfp-machine.h | 108 - sysdeps/mips/mips64/sub_n.S | 125 - sysdeps/mips/mips64/submul_1.S | 132 - sysdeps/mips/mul_1.S | 117 - sysdeps/mips/nan-high-order-bit.h | 32 - sysdeps/mips/nptl/Makefile | 25 - sysdeps/mips/nptl/bits/pthreadtypes-arch.h | 87 - sysdeps/mips/nptl/bits/semaphore.h | 36 - sysdeps/mips/nptl/nptl-sysdep.S | 2 - sysdeps/mips/nptl/pthreaddef.h | 32 - sysdeps/mips/nptl/tcb-offsets.sym | 10 - sysdeps/mips/nptl/tls.h | 186 - sysdeps/mips/preconfigure | 29 - sysdeps/mips/regdef.h | 25 - sysdeps/mips/rshift.S | 94 - sysdeps/mips/setjmp.S | 47 - sysdeps/mips/setjmp_aux.c | 63 - sysdeps/mips/sgidefs.h | 76 - sysdeps/mips/sotruss-lib.c | 117 - sysdeps/mips/stackinfo.h | 33 - sysdeps/mips/start.S | 185 - sysdeps/mips/strcmp.S | 249 - sysdeps/mips/sub_n.S | 121 - sysdeps/mips/submul_1.S | 128 - sysdeps/mips/sys/asm.h | 498 - sysdeps/mips/sys/fpregdef.h | 118 - sysdeps/mips/sys/regdef.h | 81 - sysdeps/mips/sys/tas.h | 69 - sysdeps/mips/sys/ucontext.h | 176 - sysdeps/mips/tininess.h | 1 - sysdeps/mips/tls-macros.h | 130 - sysdeps/mips/tst-abi-fp32mod.c | 22 - sysdeps/mips/tst-abi-fp64amod.c | 22 - sysdeps/mips/tst-abi-fp64mod.c | 22 - sysdeps/mips/tst-abi-fpxxmod.c | 22 - sysdeps/mips/tst-abi-fpxxomod.c | 22 - sysdeps/mips/tst-abi-interlink.c | 844 -- sysdeps/mips/tst-audit.h | 39 - sysdeps/mips/tst-mode-switch-1.c | 126 - sysdeps/mips/tst-mode-switch-2.c | 166 - sysdeps/mips/tst-mode-switch-3.c | 93 - sysdeps/nios2/Implies | 3 - sysdeps/nios2/Makefile | 35 - sysdeps/nios2/Subdirs | 1 - sysdeps/nios2/Versions | 12 - sysdeps/nios2/__longjmp.S | 80 - sysdeps/nios2/abort-instr.h | 2 - sysdeps/nios2/backtrace.c | 1 - sysdeps/nios2/bits/endian.h | 12 - sysdeps/nios2/bits/fenv.h | 52 - sysdeps/nios2/bits/link.h | 54 - sysdeps/nios2/bits/setjmp.h | 30 - sysdeps/nios2/bsd-_setjmp.S | 1 - sysdeps/nios2/bsd-setjmp.S | 1 - sysdeps/nios2/configure | 162 - sysdeps/nios2/configure.ac | 13 - sysdeps/nios2/crti.S | 96 - sysdeps/nios2/crtn.S | 49 - sysdeps/nios2/dl-init.c | 30 - sysdeps/nios2/dl-machine.h | 336 - sysdeps/nios2/dl-sysdep.h | 25 - sysdeps/nios2/dl-tls.h | 45 - sysdeps/nios2/dl-trampoline.S | 79 - sysdeps/nios2/gccframe.h | 21 - sysdeps/nios2/gmp-mparam.h | 23 - sysdeps/nios2/jmpbuf-offsets.h | 48 - sysdeps/nios2/jmpbuf-unwind.h | 37 - sysdeps/nios2/ldsodefs.h | 43 - sysdeps/nios2/libc-tls.c | 32 - sysdeps/nios2/libm-test-ulps | 394 - sysdeps/nios2/libm-test-ulps-name | 1 - sysdeps/nios2/machine-gmon.h | 64 - sysdeps/nios2/math-tests.h | 28 - sysdeps/nios2/math_private.h | 38 - sysdeps/nios2/memusage.h | 23 - sysdeps/nios2/nptl/Makefile | 22 - sysdeps/nios2/nptl/bits/pthreadtypes-arch.h | 70 - sysdeps/nios2/nptl/bits/semaphore.h | 32 - sysdeps/nios2/nptl/pthreaddef.h | 32 - sysdeps/nios2/nptl/tcb-offsets.sym | 13 - sysdeps/nios2/nptl/tls.h | 164 - sysdeps/nios2/preconfigure | 6 - sysdeps/nios2/s_fma.c | 1 - sysdeps/nios2/s_fmaf.c | 1 - sysdeps/nios2/setjmp.S | 73 - sysdeps/nios2/sfp-machine.h | 51 - sysdeps/nios2/sotruss-lib.c | 51 - sysdeps/nios2/stackguard-macros.h | 6 - sysdeps/nios2/stackinfo.h | 33 - sysdeps/nios2/start.S | 146 - sysdeps/nios2/sysdep.h | 65 - sysdeps/nios2/tls-macros.h | 46 - sysdeps/nios2/tst-audit.h | 23 - sysdeps/nptl/Implies | 1 - sysdeps/nptl/Makeconfig | 28 - sysdeps/nptl/Makefile | 33 - sysdeps/nptl/Subdirs | 2 - sysdeps/nptl/aio_misc.h | 74 - sysdeps/nptl/allocrtsig.c | 50 - sysdeps/nptl/bits/pthreadtypes.h | 121 - sysdeps/nptl/bits/thread-shared-types.h | 156 - sysdeps/nptl/fork.c | 255 - sysdeps/nptl/fork.h | 59 - sysdeps/nptl/futex-internal.h | 203 - sysdeps/nptl/gai_misc.h | 123 - sysdeps/nptl/internaltypes.h | 179 - sysdeps/nptl/jmp-unwind.c | 32 - sysdeps/nptl/libc-lock.h | 187 - sysdeps/nptl/libc-lockP.h | 438 - sysdeps/nptl/librt-cancellation.c | 24 - sysdeps/nptl/lowlevellock-futex.h | 86 - sysdeps/nptl/lowlevellock.h | 205 - sysdeps/nptl/malloc-machine.h | 27 - sysdeps/nptl/nptl-signals.h | 22 - sysdeps/nptl/pthread-functions.h | 117 - sysdeps/nptl/pthread.h | 1162 -- sysdeps/nptl/setxid.h | 62 - sysdeps/nptl/shm-directory.h | 31 - sysdeps/nptl/sigfillset.c | 20 - sysdeps/nptl/stdio-lock.h | 111 - sysdeps/nptl/sys/procfs.h | 39 - sysdeps/nptl/tcb-offsets.h | 1 - sysdeps/nptl/tst-mqueue8x.c | 1 - sysdeps/nptl/unwind-forcedunwind.c | 148 - sysdeps/posix/Makefile | 11 - sysdeps/posix/Subdirs | 1 - sysdeps/posix/alarm.c | 49 - sysdeps/posix/clock.c | 31 - sysdeps/posix/clock_getres.c | 118 - sysdeps/posix/closedir.c | 54 - sysdeps/posix/ctermid.c | 35 - sysdeps/posix/cuserid.c | 47 - sysdeps/posix/dirfd.c | 28 - sysdeps/posix/dirstream.h | 55 - sysdeps/posix/dl-fileid.h | 50 - sysdeps/posix/dup.c | 30 - sysdeps/posix/dup2.c | 56 - sysdeps/posix/euidaccess.c | 215 - sysdeps/posix/fdopendir.c | 52 - sysdeps/posix/flock.c | 56 - sysdeps/posix/fpathconf.c | 229 - sysdeps/posix/gai_strerror-strs.h | 17 - sysdeps/posix/gai_strerror.c | 69 - sysdeps/posix/getaddrinfo.c | 2598 ----- sysdeps/posix/getcwd.c | 535 - sysdeps/posix/getdtsz.c | 35 - sysdeps/posix/gethostname.c | 46 - sysdeps/posix/getpagesize.c | 28 - sysdeps/posix/gettimeofday.c | 67 - sysdeps/posix/isatty.c | 30 - sysdeps/posix/isfdtype.c | 37 - sysdeps/posix/killpg.c | 35 - sysdeps/posix/libc_fatal.c | 187 - sysdeps/posix/mkfifo.c | 29 - sysdeps/posix/mkfifoat.c | 28 - sysdeps/posix/nice.c | 51 - sysdeps/posix/open64.c | 50 - sysdeps/posix/opendir.c | 248 - sysdeps/posix/pathconf.c | 227 - sysdeps/posix/pause.c | 56 - sysdeps/posix/posix_fallocate.c | 122 - sysdeps/posix/posix_fallocate64.c | 142 - sysdeps/posix/pread.c | 62 - sysdeps/posix/pread64.c | 62 - sysdeps/posix/preadv.c | 30 - sysdeps/posix/preadv2.c | 38 - sysdeps/posix/preadv64.c | 28 - sysdeps/posix/preadv64v2.c | 37 - sysdeps/posix/preadv_common.c | 83 - sysdeps/posix/profil.c | 120 - sysdeps/posix/pwrite.c | 62 - sysdeps/posix/pwrite64.c | 62 - sysdeps/posix/pwritev.c | 30 - sysdeps/posix/pwritev2.c | 38 - sysdeps/posix/pwritev64.c | 28 - sysdeps/posix/pwritev64v2.c | 38 - sysdeps/posix/pwritev_common.c | 72 - sysdeps/posix/raise.c | 28 - sysdeps/posix/readdir.c | 122 - sysdeps/posix/readdir_r.c | 154 - sysdeps/posix/readv.c | 91 - sysdeps/posix/remove.c | 43 - sysdeps/posix/rename.c | 48 - sysdeps/posix/rewinddir.c | 41 - sysdeps/posix/seekdir.c | 35 - sysdeps/posix/shm-directory.c | 38 - sysdeps/posix/shm-directory.h | 66 - sysdeps/posix/shm_open.c | 55 - sysdeps/posix/shm_unlink.c | 43 - sysdeps/posix/sigblock.c | 38 - sysdeps/posix/sigignore.c | 37 - sysdeps/posix/sigintr.c | 55 - sysdeps/posix/signal.c | 51 - sysdeps/posix/sigpause.c | 89 - sysdeps/posix/sigset.c | 75 - sysdeps/posix/sigsetmask.c | 38 - sysdeps/posix/sigsuspend.c | 51 - sysdeps/posix/sigwait.c | 108 - sysdeps/posix/sleep.c | 66 - sysdeps/posix/spawni.c | 319 - sysdeps/posix/sprofil.c | 355 - sysdeps/posix/sysconf.c | 1227 -- sysdeps/posix/system.c | 186 - sysdeps/posix/sysv_signal.c | 58 - sysdeps/posix/telldir.c | 27 - sysdeps/posix/tempname.c | 305 - sysdeps/posix/time.c | 40 - sysdeps/posix/timespec_get.c | 38 - sysdeps/posix/truncate.c | 44 - sysdeps/posix/ttyname.c | 129 - sysdeps/posix/ttyname_r.c | 156 - sysdeps/posix/ulimit.c | 92 - sysdeps/posix/usleep.c | 33 - sysdeps/posix/utime.c | 47 - sysdeps/posix/utimes.c | 42 - sysdeps/posix/wait.c | 30 - sysdeps/posix/wait3.c | 39 - sysdeps/posix/waitid.c | 166 - sysdeps/posix/writev.c | 91 - sysdeps/powerpc/Implies | 5 - sysdeps/powerpc/Makefile | 42 - sysdeps/powerpc/Versions | 31 - sysdeps/powerpc/abort-instr.h | 2 - sysdeps/powerpc/atomic-machine.h | 339 - sysdeps/powerpc/bits/endian.h | 36 - sysdeps/powerpc/bits/fenv.h | 180 - sysdeps/powerpc/bits/fenvinline.h | 79 - sysdeps/powerpc/bits/fp-fast.h | 39 - sysdeps/powerpc/bits/hwcap.h | 71 - sysdeps/powerpc/bits/link.h | 156 - sysdeps/powerpc/bits/mathinline.h | 132 - sysdeps/powerpc/bits/setjmp.h | 50 - sysdeps/powerpc/dl-procinfo.c | 77 - sysdeps/powerpc/dl-procinfo.h | 185 - sysdeps/powerpc/dl-tls.c | 24 - sysdeps/powerpc/dl-tls.h | 52 - sysdeps/powerpc/ffs.c | 47 - sysdeps/powerpc/fpu/Makefile | 7 - sysdeps/powerpc/fpu/e_hypot.c | 134 - sysdeps/powerpc/fpu/e_hypotf.c | 76 - sysdeps/powerpc/fpu/e_rem_pio2f.c | 188 - sysdeps/powerpc/fpu/e_sqrt.c | 175 - sysdeps/powerpc/fpu/e_sqrtf.c | 150 - sysdeps/powerpc/fpu/fclrexcpt.c | 49 - sysdeps/powerpc/fpu/fe_mask.c | 32 - sysdeps/powerpc/fpu/fe_nomask.c | 32 - sysdeps/powerpc/fpu/fedisblxcpt.c | 57 - sysdeps/powerpc/fpu/feenablxcpt.c | 58 - sysdeps/powerpc/fpu/fegetenv.c | 38 - sysdeps/powerpc/fpu/fegetexcept.c | 43 - sysdeps/powerpc/fpu/fegetmode.c | 26 - sysdeps/powerpc/fpu/fegetround.c | 30 - sysdeps/powerpc/fpu/feholdexcpt.c | 51 - sysdeps/powerpc/fpu/fenv_const.c | 36 - sysdeps/powerpc/fpu/fenv_libc.h | 176 - sysdeps/powerpc/fpu/fenv_private.h | 229 - sysdeps/powerpc/fpu/fesetenv.c | 63 - sysdeps/powerpc/fpu/fesetexcept.c | 42 - sysdeps/powerpc/fpu/fesetmode.c | 49 - sysdeps/powerpc/fpu/fesetround.c | 33 - sysdeps/powerpc/fpu/feupdateenv.c | 68 - sysdeps/powerpc/fpu/fgetexcptflg.c | 42 - sysdeps/powerpc/fpu/fix-fp-int-compare-invalid.h | 28 - sysdeps/powerpc/fpu/fraiseexcpt.c | 68 - sysdeps/powerpc/fpu/fsetexcptflg.c | 63 - sysdeps/powerpc/fpu/ftestexcept.c | 33 - sysdeps/powerpc/fpu/k_cosf.c | 65 - sysdeps/powerpc/fpu/k_rem_pio2f.c | 273 - sysdeps/powerpc/fpu/k_sinf.c | 57 - sysdeps/powerpc/fpu/libm-test-ulps | 2342 ---- sysdeps/powerpc/fpu/libm-test-ulps-name | 1 - sysdeps/powerpc/fpu/math_ldbl.h | 55 - sysdeps/powerpc/fpu/math_private.h | 142 - sysdeps/powerpc/fpu/s_cosf.c | 69 - sysdeps/powerpc/fpu/s_fabs.S | 36 - sysdeps/powerpc/fpu/s_fabsf.S | 1 - sysdeps/powerpc/fpu/s_float_bitwise.h | 115 - sysdeps/powerpc/fpu/s_fma.S | 32 - sysdeps/powerpc/fpu/s_fmaf.S | 27 - sysdeps/powerpc/fpu/s_isnan.c | 62 - sysdeps/powerpc/fpu/s_isnanf.S | 1 - sysdeps/powerpc/fpu/s_lrintf.S | 1 - sysdeps/powerpc/fpu/s_rint.c | 46 - sysdeps/powerpc/fpu/s_rintf.c | 42 - sysdeps/powerpc/fpu/s_sinf.c | 69 - sysdeps/powerpc/fpu/t_sqrt.c | 144 - sysdeps/powerpc/fpu/tst-setcontext-fpscr.c | 370 - sysdeps/powerpc/fpu_control.h | 120 - sysdeps/powerpc/gccframe.h | 21 - sysdeps/powerpc/hwcapinfo.c | 84 - sysdeps/powerpc/hwcapinfo.h | 29 - sysdeps/powerpc/ifunc-sel.h | 51 - sysdeps/powerpc/jmpbuf-offsets.h | 36 - sysdeps/powerpc/jmpbuf-unwind.h | 47 - sysdeps/powerpc/ldsodefs.h | 68 - sysdeps/powerpc/libc-tls.c | 32 - sysdeps/powerpc/locale-defines.sym | 9 - sysdeps/powerpc/longjmp.c | 60 - sysdeps/powerpc/machine-gmon.h | 30 - sysdeps/powerpc/math-tests.h | 33 - sysdeps/powerpc/memusage.h | 20 - sysdeps/powerpc/mp_clz_tab.c | 1 - sysdeps/powerpc/nofpu/Makefile | 32 - sysdeps/powerpc/nofpu/Subdirs | 1 - sysdeps/powerpc/nofpu/Versions | 29 - sysdeps/powerpc/nofpu/atomic-feclearexcept.c | 28 - sysdeps/powerpc/nofpu/atomic-feholdexcept.c | 38 - sysdeps/powerpc/nofpu/atomic-feupdateenv.c | 37 - sysdeps/powerpc/nofpu/fclrexcpt.c | 38 - sysdeps/powerpc/nofpu/fedisblxcpt.c | 34 - sysdeps/powerpc/nofpu/feenablxcpt.c | 33 - sysdeps/powerpc/nofpu/fegetenv.c | 45 - sysdeps/powerpc/nofpu/fegetexcept.c | 27 - sysdeps/powerpc/nofpu/fegetmode.c | 33 - sysdeps/powerpc/nofpu/fegetround.c | 30 - sysdeps/powerpc/nofpu/feholdexcpt.c | 45 - sysdeps/powerpc/nofpu/fenv_const.c | 38 - sysdeps/powerpc/nofpu/fesetenv.c | 47 - sysdeps/powerpc/nofpu/fesetexcept.c | 28 - sysdeps/powerpc/nofpu/fesetmode.c | 34 - sysdeps/powerpc/nofpu/fesetround.c | 36 - sysdeps/powerpc/nofpu/feupdateenv.c | 53 - sysdeps/powerpc/nofpu/fgetexcptflg.c | 37 - sysdeps/powerpc/nofpu/flt-rounds.c | 40 - sysdeps/powerpc/nofpu/fraiseexcpt.c | 43 - sysdeps/powerpc/nofpu/fsetexcptflg.c | 40 - sysdeps/powerpc/nofpu/ftestexcept.c | 28 - sysdeps/powerpc/nofpu/get-rounding-mode.h | 35 - sysdeps/powerpc/nofpu/libm-test-ulps | 2364 ---- sysdeps/powerpc/nofpu/libm-test-ulps-name | 1 - sysdeps/powerpc/nofpu/sim-full.c | 57 - sysdeps/powerpc/nofpu/soft-supp.h | 63 - sysdeps/powerpc/novmx-longjmp.c | 56 - sysdeps/powerpc/novmx-sigjmp.c | 44 - sysdeps/powerpc/novmxsetjmp.h | 132 - sysdeps/powerpc/nptl/Makefile | 20 - sysdeps/powerpc/nptl/bits/pthreadtypes-arch.h | 79 - sysdeps/powerpc/nptl/elide.h | 125 - sysdeps/powerpc/nptl/pthread_spin_lock.c | 43 - sysdeps/powerpc/nptl/pthread_spin_trylock.c | 41 - sysdeps/powerpc/nptl/pthread_spin_unlock.c | 27 - sysdeps/powerpc/nptl/pthreaddef.h | 33 - sysdeps/powerpc/nptl/tcb-offsets.sym | 32 - sysdeps/powerpc/nptl/tls.h | 263 - sysdeps/powerpc/power4/fpu/Makefile | 7 - sysdeps/powerpc/power4/fpu/mpa-arch.h | 56 - sysdeps/powerpc/power4/fpu/mpa.c | 214 - sysdeps/powerpc/power4/wordcopy.c | 212 - sysdeps/powerpc/power5+/fpu/s_modf.c | 58 - sysdeps/powerpc/power5+/fpu/s_modff.c | 46 - sysdeps/powerpc/power6/wcschr.c | 96 - sysdeps/powerpc/power6/wcscpy.c | 105 - sysdeps/powerpc/power6/wcsrchr.c | 89 - sysdeps/powerpc/power6/wordcopy.c | 221 - sysdeps/powerpc/power7/fpu/s_logb.c | 79 - sysdeps/powerpc/power7/fpu/s_logbf.c | 60 - sysdeps/powerpc/power7/fpu/s_logbl.c | 83 - sysdeps/powerpc/powerpc32/405/memcmp.S | 128 - sysdeps/powerpc/powerpc32/405/memcpy.S | 130 - sysdeps/powerpc/powerpc32/405/memset.S | 152 - sysdeps/powerpc/powerpc32/405/strcmp.S | 134 - sysdeps/powerpc/powerpc32/405/strcpy.S | 107 - sysdeps/powerpc/powerpc32/405/strlen.S | 75 - sysdeps/powerpc/powerpc32/405/strncmp.S | 128 - sysdeps/powerpc/powerpc32/440/Implies | 2 - sysdeps/powerpc/powerpc32/464/Implies | 2 - sysdeps/powerpc/powerpc32/476/Implies | 2 - sysdeps/powerpc/powerpc32/476/memset.S | 152 - sysdeps/powerpc/powerpc32/970/Implies | 2 - sysdeps/powerpc/powerpc32/Implies | 1 - sysdeps/powerpc/powerpc32/Makefile | 49 - sysdeps/powerpc/powerpc32/Versions | 40 - sysdeps/powerpc/powerpc32/__longjmp-common.S | 82 - sysdeps/powerpc/powerpc32/__longjmp.S | 39 - sysdeps/powerpc/powerpc32/a2/memcpy.S | 527 - sysdeps/powerpc/powerpc32/add_n.S | 68 - sysdeps/powerpc/powerpc32/addmul_1.S | 48 - sysdeps/powerpc/powerpc32/atomic-machine.h | 126 - sysdeps/powerpc/powerpc32/backtrace.c | 131 - sysdeps/powerpc/powerpc32/bits/wordsize.h | 11 - sysdeps/powerpc/powerpc32/bsd-_setjmp.S | 56 - sysdeps/powerpc/powerpc32/bsd-setjmp.S | 39 - sysdeps/powerpc/powerpc32/bzero.S | 27 - sysdeps/powerpc/powerpc32/cell/memcpy.S | 242 - sysdeps/powerpc/powerpc32/compat-ppc-mcount.S | 11 - sysdeps/powerpc/powerpc32/configure | 29 - sysdeps/powerpc/powerpc32/configure.ac | 16 - sysdeps/powerpc/powerpc32/crti.S | 89 - sysdeps/powerpc/powerpc32/crtn.S | 53 - sysdeps/powerpc/powerpc32/dl-dtprocnum.h | 3 - sysdeps/powerpc/powerpc32/dl-irel.h | 52 - sysdeps/powerpc/powerpc32/dl-machine.c | 608 - sysdeps/powerpc/powerpc32/dl-machine.h | 455 - sysdeps/powerpc/powerpc32/dl-start.S | 103 - sysdeps/powerpc/powerpc32/dl-trampoline.S | 189 - sysdeps/powerpc/powerpc32/e500/nofpu/Makefile | 9 - .../powerpc32/e500/nofpu/atomic-feclearexcept.c | 50 - .../powerpc32/e500/nofpu/atomic-feholdexcept.c | 55 - .../powerpc32/e500/nofpu/atomic-feupdateenv.c | 46 - sysdeps/powerpc/powerpc32/e500/nofpu/fclrexcpt.c | 53 - .../powerpc/powerpc32/e500/nofpu/fe_note_change.c | 39 - sysdeps/powerpc/powerpc32/e500/nofpu/fedisblxcpt.c | 54 - sysdeps/powerpc/powerpc32/e500/nofpu/feenablxcpt.c | 54 - sysdeps/powerpc/powerpc32/e500/nofpu/fegetenv.c | 49 - sysdeps/powerpc/powerpc32/e500/nofpu/fegetexcept.c | 36 - sysdeps/powerpc/powerpc32/e500/nofpu/fegetmode.c | 37 - sysdeps/powerpc/powerpc32/e500/nofpu/fegetround.c | 31 - sysdeps/powerpc/powerpc32/e500/nofpu/feholdexcpt.c | 59 - sysdeps/powerpc/powerpc32/e500/nofpu/fenv_const.c | 45 - sysdeps/powerpc/powerpc32/e500/nofpu/fenv_libc.h | 99 - sysdeps/powerpc/powerpc32/e500/nofpu/fesetenv.c | 50 - sysdeps/powerpc/powerpc32/e500/nofpu/fesetexcept.c | 37 - sysdeps/powerpc/powerpc32/e500/nofpu/fesetmode.c | 43 - sysdeps/powerpc/powerpc32/e500/nofpu/fesetround.c | 37 - .../powerpc32/e500/nofpu/fetestexceptflag.c | 25 - sysdeps/powerpc/powerpc32/e500/nofpu/feupdateenv.c | 48 - .../powerpc32/e500/nofpu/fexcepts_from_prctl.c | 42 - .../powerpc32/e500/nofpu/fexcepts_from_spe.c | 41 - .../powerpc32/e500/nofpu/fexcepts_to_prctl.c | 42 - .../powerpc/powerpc32/e500/nofpu/fexcepts_to_spe.c | 41 - .../powerpc/powerpc32/e500/nofpu/fgetexcptflg.c | 41 - sysdeps/powerpc/powerpc32/e500/nofpu/flt-rounds.c | 39 - .../powerpc32/e500/nofpu/fraiseexcept-soft.c | 25 - sysdeps/powerpc/powerpc32/e500/nofpu/fraiseexcpt.c | 41 - .../powerpc/powerpc32/e500/nofpu/fsetexcptflg.c | 55 - sysdeps/powerpc/powerpc32/e500/nofpu/ftestexcept.c | 31 - .../powerpc32/e500/nofpu/get-rounding-mode.h | 4 - sysdeps/powerpc/powerpc32/e500/nofpu/s_fabsf.S | 27 - sysdeps/powerpc/powerpc32/e500/nofpu/spe-raise.c | 53 - sysdeps/powerpc/powerpc32/fpu/Makefile | 3 - sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S | 178 - sysdeps/powerpc/powerpc32/fpu/__longjmp.S | 40 - sysdeps/powerpc/powerpc32/fpu/configure | 56 - sysdeps/powerpc/powerpc32/fpu/configure.ac | 34 - .../powerpc32/fpu/fix-int-fp-convert-zero.h | 28 - sysdeps/powerpc/powerpc32/fpu/fprrest.S | 94 - sysdeps/powerpc/powerpc32/fpu/fprsave.S | 111 - sysdeps/powerpc/powerpc32/fpu/s_ceil.S | 83 - sysdeps/powerpc/powerpc32/fpu/s_ceilf.S | 75 - sysdeps/powerpc/powerpc32/fpu/s_copysign.S | 59 - sysdeps/powerpc/powerpc32/fpu/s_copysignf.S | 1 - sysdeps/powerpc/powerpc32/fpu/s_copysignl.S | 66 - sysdeps/powerpc/powerpc32/fpu/s_fabs.S | 5 - sysdeps/powerpc/powerpc32/fpu/s_fabsl.S | 52 - sysdeps/powerpc/powerpc32/fpu/s_floor.S | 83 - sysdeps/powerpc/powerpc32/fpu/s_floorf.S | 75 - sysdeps/powerpc/powerpc32/fpu/s_fma.S | 5 - sysdeps/powerpc/powerpc32/fpu/s_isnan.S | 57 - sysdeps/powerpc/powerpc32/fpu/s_llrint.c | 63 - sysdeps/powerpc/powerpc32/fpu/s_llrintf.c | 46 - sysdeps/powerpc/powerpc32/fpu/s_llround.c | 90 - sysdeps/powerpc/powerpc32/fpu/s_llroundf.c | 72 - sysdeps/powerpc/powerpc32/fpu/s_lrint.S | 46 - sysdeps/powerpc/powerpc32/fpu/s_lround.S | 129 - sysdeps/powerpc/powerpc32/fpu/s_lroundf.S | 1 - sysdeps/powerpc/powerpc32/fpu/s_nearbyint.S | 87 - sysdeps/powerpc/powerpc32/fpu/s_nearbyintf.S | 78 - sysdeps/powerpc/powerpc32/fpu/s_rint.S | 76 - sysdeps/powerpc/powerpc32/fpu/s_rintf.S | 65 - sysdeps/powerpc/powerpc32/fpu/s_round.S | 104 - sysdeps/powerpc/powerpc32/fpu/s_roundf.S | 95 - sysdeps/powerpc/powerpc32/fpu/s_trunc.S | 90 - sysdeps/powerpc/powerpc32/fpu/s_truncf.S | 82 - sysdeps/powerpc/powerpc32/fpu/setjmp-common.S | 183 - sysdeps/powerpc/powerpc32/fpu/setjmp.S | 47 - sysdeps/powerpc/powerpc32/gprrest0.S | 69 - sysdeps/powerpc/powerpc32/gprrest1.S | 63 - sysdeps/powerpc/powerpc32/gprsave0.S | 87 - sysdeps/powerpc/powerpc32/gprsave1.S | 63 - sysdeps/powerpc/powerpc32/libgcc-compat.S | 137 - sysdeps/powerpc/powerpc32/lshift.S | 125 - sysdeps/powerpc/powerpc32/mcount.c | 17 - sysdeps/powerpc/powerpc32/memset.S | 307 - sysdeps/powerpc/powerpc32/mul_1.S | 45 - sysdeps/powerpc/powerpc32/power4/Implies | 2 - sysdeps/powerpc/powerpc32/power4/Makefile | 6 - .../powerpc32/power4/fpu/multiarch/Makefile | 43 - .../power4/fpu/multiarch/e_hypot-power7.c | 26 - .../powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c | 26 - .../powerpc32/power4/fpu/multiarch/e_hypot.c | 32 - .../power4/fpu/multiarch/e_hypotf-power7.c | 26 - .../power4/fpu/multiarch/e_hypotf-ppc32.c | 26 - .../powerpc32/power4/fpu/multiarch/e_hypotf.c | 32 - .../power4/fpu/multiarch/s_ceil-power5+.S | 33 - .../powerpc32/power4/fpu/multiarch/s_ceil-ppc32.S | 31 - .../powerpc32/power4/fpu/multiarch/s_ceil.c | 40 - .../power4/fpu/multiarch/s_ceilf-power5+.S | 26 - .../powerpc32/power4/fpu/multiarch/s_ceilf-ppc32.S | 27 - .../powerpc32/power4/fpu/multiarch/s_ceilf.c | 32 - .../power4/fpu/multiarch/s_copysign-power6.S | 33 - .../power4/fpu/multiarch/s_copysign-ppc32.S | 34 - .../powerpc32/power4/fpu/multiarch/s_copysign.c | 51 - .../powerpc32/power4/fpu/multiarch/s_copysignf.c | 32 - .../power4/fpu/multiarch/s_finite-power7.S | 33 - .../power4/fpu/multiarch/s_finite-ppc32.c | 33 - .../powerpc32/power4/fpu/multiarch/s_finite.c | 57 - .../power4/fpu/multiarch/s_finitef-ppc32.c | 31 - .../powerpc32/power4/fpu/multiarch/s_finitef.c | 34 - .../power4/fpu/multiarch/s_floor-power5+.S | 33 - .../powerpc32/power4/fpu/multiarch/s_floor-ppc32.S | 31 - .../powerpc32/power4/fpu/multiarch/s_floor.c | 40 - .../power4/fpu/multiarch/s_floorf-power5+.S | 26 - .../power4/fpu/multiarch/s_floorf-ppc32.S | 27 - .../powerpc32/power4/fpu/multiarch/s_floorf.c | 32 - .../power4/fpu/multiarch/s_isinf-power7.S | 33 - .../powerpc32/power4/fpu/multiarch/s_isinf-ppc32.c | 33 - .../powerpc32/power4/fpu/multiarch/s_isinf.c | 50 - .../power4/fpu/multiarch/s_isinff-ppc32.c | 31 - .../powerpc32/power4/fpu/multiarch/s_isinff.c | 35 - .../power4/fpu/multiarch/s_isnan-power5.S | 33 - .../power4/fpu/multiarch/s_isnan-power6.S | 33 - .../power4/fpu/multiarch/s_isnan-power7.S | 33 - .../powerpc32/power4/fpu/multiarch/s_isnan-ppc32.S | 32 - .../powerpc32/power4/fpu/multiarch/s_isnan.c | 56 - .../power4/fpu/multiarch/s_isnanf-power5.S | 28 - .../power4/fpu/multiarch/s_isnanf-power6.S | 28 - .../powerpc32/power4/fpu/multiarch/s_isnanf.c | 39 - .../power4/fpu/multiarch/s_llrint-power6.S | 31 - .../power4/fpu/multiarch/s_llrint-ppc32.S | 31 - .../powerpc32/power4/fpu/multiarch/s_llrint.c | 40 - .../power4/fpu/multiarch/s_llrintf-power6.S | 26 - .../power4/fpu/multiarch/s_llrintf-ppc32.S | 26 - .../powerpc32/power4/fpu/multiarch/s_llrintf.c | 31 - .../power4/fpu/multiarch/s_llround-power5+.S | 31 - .../power4/fpu/multiarch/s_llround-power6.S | 31 - .../power4/fpu/multiarch/s_llround-ppc32.S | 31 - .../powerpc32/power4/fpu/multiarch/s_llround.c | 43 - .../powerpc32/power4/fpu/multiarch/s_llroundf.c | 34 - .../powerpc32/power4/fpu/multiarch/s_logb-power7.c | 31 - .../powerpc32/power4/fpu/multiarch/s_logb-ppc32.c | 28 - .../powerpc32/power4/fpu/multiarch/s_logb.c | 41 - .../power4/fpu/multiarch/s_logbf-power7.c | 26 - .../powerpc32/power4/fpu/multiarch/s_logbf-ppc32.c | 26 - .../powerpc32/power4/fpu/multiarch/s_logbf.c | 32 - .../power4/fpu/multiarch/s_logbl-power7.c | 21 - .../powerpc32/power4/fpu/multiarch/s_logbl-ppc32.c | 21 - .../powerpc32/power4/fpu/multiarch/s_logbl.c | 32 - .../power4/fpu/multiarch/s_lrint-power6x.S | 33 - .../powerpc32/power4/fpu/multiarch/s_lrint-ppc32.S | 31 - .../powerpc32/power4/fpu/multiarch/s_lrint.c | 40 - .../powerpc32/power4/fpu/multiarch/s_lrintf.c | 31 - .../power4/fpu/multiarch/s_lround-power5+.S | 33 - .../power4/fpu/multiarch/s_lround-power6x.S | 33 - .../power4/fpu/multiarch/s_lround-ppc32.S | 31 - .../powerpc32/power4/fpu/multiarch/s_lround.c | 43 - .../powerpc32/power4/fpu/multiarch/s_lroundf.c | 34 - .../power4/fpu/multiarch/s_modf-power5+.c | 31 - .../powerpc32/power4/fpu/multiarch/s_modf-ppc32.c | 29 - .../powerpc32/power4/fpu/multiarch/s_modf.c | 44 - .../power4/fpu/multiarch/s_modff-power5+.c | 27 - .../powerpc32/power4/fpu/multiarch/s_modff-ppc32.c | 26 - .../powerpc32/power4/fpu/multiarch/s_modff.c | 30 - .../power4/fpu/multiarch/s_round-power5+.S | 33 - .../powerpc32/power4/fpu/multiarch/s_round-ppc32.S | 31 - .../powerpc32/power4/fpu/multiarch/s_round.c | 40 - .../power4/fpu/multiarch/s_roundf-power5+.S | 26 - .../power4/fpu/multiarch/s_roundf-ppc32.S | 27 - .../powerpc32/power4/fpu/multiarch/s_roundf.c | 32 - .../power4/fpu/multiarch/s_trunc-power5+.S | 33 - .../powerpc32/power4/fpu/multiarch/s_trunc-ppc32.S | 31 - .../powerpc32/power4/fpu/multiarch/s_trunc.c | 40 - .../power4/fpu/multiarch/s_truncf-power5+.S | 26 - .../power4/fpu/multiarch/s_truncf-ppc32.S | 27 - .../powerpc32/power4/fpu/multiarch/s_truncf.c | 32 - .../power4/fpu/multiarch/w_sqrt_compat-power5.S | 31 - .../power4/fpu/multiarch/w_sqrt_compat-ppc32.S | 31 - .../powerpc32/power4/fpu/multiarch/w_sqrt_compat.c | 40 - .../power4/fpu/multiarch/w_sqrtf_compat-power5.S | 26 - .../power4/fpu/multiarch/w_sqrtf_compat-ppc32.S | 26 - .../power4/fpu/multiarch/w_sqrtf_compat.c | 32 - sysdeps/powerpc/powerpc32/power4/fpu/s_llrint.S | 46 - sysdeps/powerpc/powerpc32/power4/fpu/s_llrintf.S | 38 - sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S | 106 - sysdeps/powerpc/powerpc32/power4/fpu/s_llroundf.S | 1 - .../powerpc/powerpc32/power4/fpu/w_sqrt_compat.S | 108 - .../powerpc/powerpc32/power4/fpu/w_sqrtf_compat.S | 100 - sysdeps/powerpc/powerpc32/power4/hp-timing.h | 54 - sysdeps/powerpc/powerpc32/power4/memcmp.S | 1375 --- sysdeps/powerpc/powerpc32/power4/memcopy.h | 116 - sysdeps/powerpc/powerpc32/power4/memcpy.S | 481 - sysdeps/powerpc/powerpc32/power4/memset.S | 226 - .../powerpc/powerpc32/power4/multiarch/Makefile | 30 - .../powerpc32/power4/multiarch/bzero-power6.S | 26 - .../powerpc32/power4/multiarch/bzero-power7.S | 26 - .../powerpc32/power4/multiarch/bzero-ppc32.S | 35 - sysdeps/powerpc/powerpc32/power4/multiarch/bzero.c | 37 - .../powerpc32/power4/multiarch/ifunc-impl-list.c | 224 - .../powerpc/powerpc32/power4/multiarch/init-arch.h | 53 - .../powerpc32/power4/multiarch/memchr-power7.S | 40 - .../powerpc32/power4/multiarch/memchr-ppc32.c | 34 - .../powerpc/powerpc32/power4/multiarch/memchr.c | 41 - .../powerpc32/power4/multiarch/memcmp-power7.S | 41 - .../powerpc32/power4/multiarch/memcmp-ppc32.S | 45 - .../powerpc/powerpc32/power4/multiarch/memcmp.c | 36 - .../powerpc/powerpc32/power4/multiarch/memcpy-a2.S | 38 - .../powerpc32/power4/multiarch/memcpy-cell.S | 38 - .../powerpc32/power4/multiarch/memcpy-power6.S | 38 - .../powerpc32/power4/multiarch/memcpy-power7.S | 38 - .../powerpc32/power4/multiarch/memcpy-ppc32.S | 41 - .../powerpc/powerpc32/power4/multiarch/memcpy.c | 48 - .../powerpc32/power4/multiarch/memmove-power7.c | 41 - .../powerpc32/power4/multiarch/memmove-ppc.c | 44 - .../powerpc/powerpc32/power4/multiarch/memmove.c | 36 - .../powerpc32/power4/multiarch/mempcpy-power7.S | 35 - .../powerpc32/power4/multiarch/mempcpy-ppc32.c | 32 - .../powerpc/powerpc32/power4/multiarch/mempcpy.c | 44 - .../powerpc32/power4/multiarch/memrchr-power7.S | 40 - .../powerpc32/power4/multiarch/memrchr-ppc32.c | 25 - .../powerpc/powerpc32/power4/multiarch/memrchr.c | 37 - .../powerpc32/power4/multiarch/memset-power6.S | 38 - .../powerpc32/power4/multiarch/memset-power7.S | 38 - .../powerpc32/power4/multiarch/memset-ppc32.S | 41 - .../powerpc/powerpc32/power4/multiarch/memset.c | 39 - .../powerpc32/power4/multiarch/rawmemchr-power7.S | 40 - .../powerpc32/power4/multiarch/rawmemchr-ppc32.c | 32 - .../powerpc/powerpc32/power4/multiarch/rawmemchr.c | 38 - .../powerpc32/power4/multiarch/rtld-memcmp.S | 19 - .../powerpc32/power4/multiarch/rtld-memset.S | 18 - .../powerpc32/power4/multiarch/rtld-strchr.S | 18 - .../powerpc32/power4/multiarch/rtld-strnlen.c | 18 - .../powerpc32/power4/multiarch/strcasecmp-power7.S | 39 - .../powerpc32/power4/multiarch/strcasecmp.c | 41 - .../power4/multiarch/strcasecmp_l-power7.S | 41 - .../powerpc32/power4/multiarch/strcasecmp_l.c | 41 - .../powerpc32/power4/multiarch/strchr-power7.S | 39 - .../powerpc32/power4/multiarch/strchr-ppc32.S | 41 - .../powerpc/powerpc32/power4/multiarch/strchr.c | 39 - .../powerpc32/power4/multiarch/strchrnul-power7.S | 39 - .../powerpc32/power4/multiarch/strchrnul-ppc32.c | 28 - .../powerpc/powerpc32/power4/multiarch/strchrnul.c | 37 - .../powerpc32/power4/multiarch/strlen-power7.S | 36 - .../powerpc32/power4/multiarch/strlen-ppc32.S | 41 - .../powerpc/powerpc32/power4/multiarch/strlen.c | 33 - .../powerpc32/power4/multiarch/strncase-power7.c | 26 - .../powerpc/powerpc32/power4/multiarch/strncase.c | 41 - .../powerpc32/power4/multiarch/strncase_l-power7.c | 26 - .../powerpc32/power4/multiarch/strncase_l.c | 42 - .../powerpc32/power4/multiarch/strncmp-power7.S | 38 - .../powerpc32/power4/multiarch/strncmp-ppc32.S | 40 - .../powerpc/powerpc32/power4/multiarch/strncmp.c | 39 - .../powerpc32/power4/multiarch/strnlen-power7.S | 40 - .../powerpc32/power4/multiarch/strnlen-ppc32.c | 28 - .../powerpc/powerpc32/power4/multiarch/strnlen.c | 36 - .../powerpc32/power4/multiarch/wcschr-power6.c | 26 - .../powerpc32/power4/multiarch/wcschr-power7.c | 26 - .../powerpc32/power4/multiarch/wcschr-ppc32.c | 43 - .../powerpc/powerpc32/power4/multiarch/wcschr.c | 41 - .../powerpc32/power4/multiarch/wcscpy-power6.c | 22 - .../powerpc32/power4/multiarch/wcscpy-power7.c | 22 - .../powerpc32/power4/multiarch/wcscpy-ppc32.c | 26 - .../powerpc/powerpc32/power4/multiarch/wcscpy.c | 36 - .../powerpc32/power4/multiarch/wcsrchr-power6.c | 20 - .../powerpc32/power4/multiarch/wcsrchr-power7.c | 20 - .../powerpc32/power4/multiarch/wcsrchr-ppc32.c | 26 - .../powerpc/powerpc32/power4/multiarch/wcsrchr.c | 36 - .../powerpc32/power4/multiarch/wordcopy-power7.c | 23 - .../powerpc32/power4/multiarch/wordcopy-ppc32.c | 27 - sysdeps/powerpc/powerpc32/power4/strncmp.S | 196 - sysdeps/powerpc/powerpc32/power5+/Implies | 4 - .../powerpc32/power5+/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc32/power5+/fpu/s_ceil.S | 36 - sysdeps/powerpc/powerpc32/power5+/fpu/s_ceilf.S | 29 - sysdeps/powerpc/powerpc32/power5+/fpu/s_floor.S | 36 - sysdeps/powerpc/powerpc32/power5+/fpu/s_floorf.S | 29 - sysdeps/powerpc/powerpc32/power5+/fpu/s_llround.S | 59 - sysdeps/powerpc/powerpc32/power5+/fpu/s_llroundf.S | 1 - sysdeps/powerpc/powerpc32/power5+/fpu/s_lround.S | 57 - sysdeps/powerpc/powerpc32/power5+/fpu/s_round.S | 36 - sysdeps/powerpc/powerpc32/power5+/fpu/s_roundf.S | 29 - sysdeps/powerpc/powerpc32/power5+/fpu/s_trunc.S | 36 - sysdeps/powerpc/powerpc32/power5+/fpu/s_truncf.S | 29 - .../powerpc/powerpc32/power5+/multiarch/Implies | 1 - sysdeps/powerpc/powerpc32/power5/Implies | 2 - .../powerpc/powerpc32/power5/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc32/power5/fpu/s_isnan.S | 61 - sysdeps/powerpc/powerpc32/power5/fpu/s_isnanf.S | 45 - .../powerpc/powerpc32/power5/fpu/w_sqrt_compat.S | 106 - .../powerpc/powerpc32/power5/fpu/w_sqrtf_compat.S | 98 - sysdeps/powerpc/powerpc32/power5/multiarch/Implies | 1 - sysdeps/powerpc/powerpc32/power6/Implies | 2 - .../powerpc/powerpc32/power6/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc32/power6/fpu/s_copysign.S | 58 - sysdeps/powerpc/powerpc32/power6/fpu/s_copysignf.S | 1 - sysdeps/powerpc/powerpc32/power6/fpu/s_isnan.S | 61 - sysdeps/powerpc/powerpc32/power6/fpu/s_isnanf.S | 44 - sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S | 46 - sysdeps/powerpc/powerpc32/power6/fpu/s_llrintf.S | 38 - sysdeps/powerpc/powerpc32/power6/fpu/s_llround.S | 59 - sysdeps/powerpc/powerpc32/power6/fpu/s_llroundf.S | 1 - sysdeps/powerpc/powerpc32/power6/memcpy.S | 907 -- sysdeps/powerpc/powerpc32/power6/memset.S | 539 - sysdeps/powerpc/powerpc32/power6/multiarch/Implies | 1 - sysdeps/powerpc/powerpc32/power6x/Implies | 2 - sysdeps/powerpc/powerpc32/power6x/fpu/Implies | 1 - .../powerpc32/power6x/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc32/power6x/fpu/s_lrint.S | 41 - sysdeps/powerpc/powerpc32/power6x/fpu/s_lround.S | 51 - .../powerpc/powerpc32/power6x/multiarch/Implies | 1 - sysdeps/powerpc/powerpc32/power7/Implies | 2 - sysdeps/powerpc/powerpc32/power7/Makefile | 4 - .../powerpc/powerpc32/power7/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S | 93 - sysdeps/powerpc/powerpc32/power7/fpu/s_finitef.S | 1 - sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S | 85 - sysdeps/powerpc/powerpc32/power7/fpu/s_isinff.S | 1 - sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S | 90 - sysdeps/powerpc/powerpc32/power7/fpu/s_isnanf.S | 1 - sysdeps/powerpc/powerpc32/power7/memchr.S | 193 - sysdeps/powerpc/powerpc32/power7/memcmp.S | 1375 --- sysdeps/powerpc/powerpc32/power7/memcpy.S | 538 - sysdeps/powerpc/powerpc32/power7/mempcpy.S | 482 - sysdeps/powerpc/powerpc32/power7/memrchr.S | 196 - sysdeps/powerpc/powerpc32/power7/memset.S | 431 - sysdeps/powerpc/powerpc32/power7/multiarch/Implies | 1 - sysdeps/powerpc/powerpc32/power7/rawmemchr.S | 110 - sysdeps/powerpc/powerpc32/power7/strcasecmp.S | 129 - sysdeps/powerpc/powerpc32/power7/strcasecmp_l.S | 5 - sysdeps/powerpc/powerpc32/power7/strchr.S | 225 - sysdeps/powerpc/powerpc32/power7/strchrnul.S | 127 - sysdeps/powerpc/powerpc32/power7/strlen.S | 102 - sysdeps/powerpc/powerpc32/power7/strncmp.S | 199 - sysdeps/powerpc/powerpc32/power7/strnlen.S | 176 - sysdeps/powerpc/powerpc32/power8/Implies | 2 - .../powerpc/powerpc32/power8/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc32/power8/multiarch/Implies | 1 - sysdeps/powerpc/powerpc32/power9/Implies | 2 - .../powerpc/powerpc32/power9/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc32/power9/multiarch/Implies | 1 - sysdeps/powerpc/powerpc32/ppc-mcount.S | 104 - sysdeps/powerpc/powerpc32/register-dump.h | 120 - sysdeps/powerpc/powerpc32/rshift.S | 55 - sysdeps/powerpc/powerpc32/rtld-memset.c | 4 - sysdeps/powerpc/powerpc32/setjmp-common.S | 78 - sysdeps/powerpc/powerpc32/setjmp.S | 46 - sysdeps/powerpc/powerpc32/stackguard-macros.h | 14 - sysdeps/powerpc/powerpc32/start.S | 95 - sysdeps/powerpc/powerpc32/stpcpy.S | 119 - sysdeps/powerpc/powerpc32/strchr.S | 146 - sysdeps/powerpc/powerpc32/strcmp.S | 150 - sysdeps/powerpc/powerpc32/strcpy.S | 117 - sysdeps/powerpc/powerpc32/strlen.S | 190 - sysdeps/powerpc/powerpc32/strncmp.S | 181 - sysdeps/powerpc/powerpc32/sub_n.S | 68 - sysdeps/powerpc/powerpc32/submul_1.S | 51 - sysdeps/powerpc/powerpc32/symbol-hacks.h | 21 - sysdeps/powerpc/powerpc32/sysdep.h | 174 - sysdeps/powerpc/powerpc32/tls-macros.h | 49 - sysdeps/powerpc/powerpc32/tst-audit.h | 25 - sysdeps/powerpc/powerpc64/970/Implies | 2 - sysdeps/powerpc/powerpc64/Implies | 1 - sysdeps/powerpc/powerpc64/Makefile | 49 - sysdeps/powerpc/powerpc64/__longjmp-common.S | 183 - sysdeps/powerpc/powerpc64/__longjmp.S | 39 - sysdeps/powerpc/powerpc64/a2/memcpy.S | 528 - sysdeps/powerpc/powerpc64/addmul_1.S | 208 - sysdeps/powerpc/powerpc64/atomic-machine.h | 242 - sysdeps/powerpc/powerpc64/backtrace.c | 104 - sysdeps/powerpc/powerpc64/bits/wordsize.h | 11 - sysdeps/powerpc/powerpc64/bsd-_setjmp.S | 1 - sysdeps/powerpc/powerpc64/bsd-setjmp.S | 1 - sysdeps/powerpc/powerpc64/bzero.S | 20 - sysdeps/powerpc/powerpc64/cell/memcpy.S | 246 - sysdeps/powerpc/powerpc64/configure | 33 - sysdeps/powerpc/powerpc64/configure.ac | 23 - sysdeps/powerpc/powerpc64/crti.S | 88 - sysdeps/powerpc/powerpc64/crtn.S | 51 - sysdeps/powerpc/powerpc64/dl-dtprocnum.h | 21 - sysdeps/powerpc/powerpc64/dl-irel.h | 63 - sysdeps/powerpc/powerpc64/dl-machine.c | 47 - sysdeps/powerpc/powerpc64/dl-machine.h | 1036 -- sysdeps/powerpc/powerpc64/dl-trampoline.S | 500 - sysdeps/powerpc/powerpc64/entry.h | 37 - sysdeps/powerpc/powerpc64/ffsll.c | 37 - sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile | 44 - .../powerpc64/fpu/multiarch/e_expf-power8.S | 26 - .../powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c | 24 - sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c | 31 - .../powerpc64/fpu/multiarch/e_hypot-power7.c | 19 - .../powerpc64/fpu/multiarch/e_hypot-ppc64.c | 26 - sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c | 32 - .../powerpc64/fpu/multiarch/e_hypotf-power7.c | 19 - .../powerpc64/fpu/multiarch/e_hypotf-ppc64.c | 26 - sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf.c | 32 - .../powerpc64/fpu/multiarch/s_ceil-power5+.S | 31 - .../powerpc/powerpc64/fpu/multiarch/s_ceil-ppc64.S | 31 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil.c | 40 - .../powerpc64/fpu/multiarch/s_ceilf-power5+.S | 26 - .../powerpc64/fpu/multiarch/s_ceilf-ppc64.S | 26 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceilf.c | 32 - .../powerpc64/fpu/multiarch/s_copysign-power6.S | 33 - .../powerpc64/fpu/multiarch/s_copysign-ppc64.S | 35 - .../powerpc/powerpc64/fpu/multiarch/s_copysign.c | 51 - .../powerpc/powerpc64/fpu/multiarch/s_copysignf.c | 32 - .../powerpc64/fpu/multiarch/s_cosf-power8.S | 26 - .../powerpc/powerpc64/fpu/multiarch/s_cosf-ppc64.c | 26 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf.c | 31 - .../powerpc64/fpu/multiarch/s_finite-power7.S | 33 - .../powerpc64/fpu/multiarch/s_finite-power8.S | 33 - .../powerpc64/fpu/multiarch/s_finite-ppc64.c | 34 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c | 60 - .../powerpc64/fpu/multiarch/s_finitef-ppc64.c | 32 - .../powerpc/powerpc64/fpu/multiarch/s_finitef.c | 37 - .../powerpc64/fpu/multiarch/s_floor-power5+.S | 31 - .../powerpc64/fpu/multiarch/s_floor-ppc64.S | 31 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor.c | 40 - .../powerpc64/fpu/multiarch/s_floorf-power5+.S | 26 - .../powerpc64/fpu/multiarch/s_floorf-ppc64.S | 27 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_floorf.c | 32 - .../powerpc64/fpu/multiarch/s_isinf-power7.S | 33 - .../powerpc64/fpu/multiarch/s_isinf-power8.S | 33 - .../powerpc64/fpu/multiarch/s_isinf-ppc64.c | 33 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf.c | 53 - .../powerpc64/fpu/multiarch/s_isinff-ppc64.c | 31 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinff.c | 38 - .../powerpc64/fpu/multiarch/s_isnan-power5.S | 33 - .../powerpc64/fpu/multiarch/s_isnan-power6.S | 33 - .../powerpc64/fpu/multiarch/s_isnan-power6x.S | 33 - .../powerpc64/fpu/multiarch/s_isnan-power7.S | 33 - .../powerpc64/fpu/multiarch/s_isnan-power8.S | 33 - .../powerpc64/fpu/multiarch/s_isnan-ppc64.S | 32 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan.c | 62 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnanf.c | 44 - .../powerpc64/fpu/multiarch/s_llrint-power6x.S | 31 - .../powerpc64/fpu/multiarch/s_llrint-power8.S | 31 - .../powerpc64/fpu/multiarch/s_llrint-ppc64.S | 31 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint.c | 60 - .../powerpc64/fpu/multiarch/s_llround-power5+.S | 32 - .../powerpc64/fpu/multiarch/s_llround-power6x.S | 32 - .../powerpc64/fpu/multiarch/s_llround-power8.S | 31 - .../powerpc64/fpu/multiarch/s_llround-ppc64.S | 28 - .../powerpc/powerpc64/fpu/multiarch/s_llround.c | 63 - .../powerpc64/fpu/multiarch/s_logb-power7.c | 19 - .../powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c | 28 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c | 41 - .../powerpc64/fpu/multiarch/s_logbf-power7.c | 19 - .../powerpc64/fpu/multiarch/s_logbf-ppc64.c | 26 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c | 32 - .../powerpc64/fpu/multiarch/s_logbl-power7.c | 19 - .../powerpc64/fpu/multiarch/s_logbl-ppc64.c | 21 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c | 32 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_lrint.c | 1 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_lround.c | 1 - .../powerpc64/fpu/multiarch/s_modf-power5+.c | 19 - .../powerpc/powerpc64/fpu/multiarch/s_modf-ppc64.c | 29 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf.c | 44 - .../powerpc64/fpu/multiarch/s_modff-power5+.c | 19 - .../powerpc64/fpu/multiarch/s_modff-ppc64.c | 26 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff.c | 30 - .../powerpc64/fpu/multiarch/s_round-power5+.S | 31 - .../powerpc64/fpu/multiarch/s_round-ppc64.S | 31 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_round.c | 40 - .../powerpc64/fpu/multiarch/s_roundf-power5+.S | 26 - .../powerpc64/fpu/multiarch/s_roundf-ppc64.S | 26 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_roundf.c | 32 - .../powerpc64/fpu/multiarch/s_sinf-power8.S | 26 - .../powerpc/powerpc64/fpu/multiarch/s_sinf-ppc64.c | 26 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf.c | 31 - .../powerpc64/fpu/multiarch/s_trunc-power5+.S | 31 - .../powerpc64/fpu/multiarch/s_trunc-ppc64.S | 31 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_trunc.c | 40 - .../powerpc64/fpu/multiarch/s_truncf-power5+.S | 26 - .../powerpc64/fpu/multiarch/s_truncf-ppc64.S | 26 - sysdeps/powerpc/powerpc64/fpu/multiarch/s_truncf.c | 32 - sysdeps/powerpc/powerpc64/fpu/s_ceil.S | 72 - sysdeps/powerpc/powerpc64/fpu/s_ceilf.S | 66 - sysdeps/powerpc/powerpc64/fpu/s_copysign.S | 59 - sysdeps/powerpc/powerpc64/fpu/s_copysignf.S | 1 - sysdeps/powerpc/powerpc64/fpu/s_copysignl.S | 48 - sysdeps/powerpc/powerpc64/fpu/s_fabs.S | 5 - sysdeps/powerpc/powerpc64/fpu/s_fabsl.S | 34 - sysdeps/powerpc/powerpc64/fpu/s_floor.S | 72 - sysdeps/powerpc/powerpc64/fpu/s_floorf.S | 66 - sysdeps/powerpc/powerpc64/fpu/s_fma.S | 5 - sysdeps/powerpc/powerpc64/fpu/s_isnan.S | 56 - sysdeps/powerpc/powerpc64/fpu/s_llrint.S | 47 - sysdeps/powerpc/powerpc64/fpu/s_llrintf.S | 36 - sysdeps/powerpc/powerpc64/fpu/s_llround.S | 96 - sysdeps/powerpc/powerpc64/fpu/s_llroundf.S | 88 - sysdeps/powerpc/powerpc64/fpu/s_lrint.S | 1 - sysdeps/powerpc/powerpc64/fpu/s_lround.S | 1 - sysdeps/powerpc/powerpc64/fpu/s_lroundf.S | 1 - sysdeps/powerpc/powerpc64/fpu/s_nearbyint.S | 75 - sysdeps/powerpc/powerpc64/fpu/s_nearbyintf.S | 68 - sysdeps/powerpc/powerpc64/fpu/s_rint.S | 65 - sysdeps/powerpc/powerpc64/fpu/s_rintf.S | 56 - sysdeps/powerpc/powerpc64/fpu/s_round.S | 87 - sysdeps/powerpc/powerpc64/fpu/s_roundf.S | 81 - sysdeps/powerpc/powerpc64/fpu/s_trunc.S | 79 - sysdeps/powerpc/powerpc64/fpu/s_truncf.S | 73 - sysdeps/powerpc/powerpc64/hp-timing.h | 46 - sysdeps/powerpc/powerpc64/lshift.S | 177 - sysdeps/powerpc/powerpc64/memcpy.S | 397 - sysdeps/powerpc/powerpc64/memset.S | 265 - sysdeps/powerpc/powerpc64/mul_1.S | 135 - sysdeps/powerpc/powerpc64/multiarch/Makefile | 47 - sysdeps/powerpc/powerpc64/multiarch/bcopy-ppc64.c | 27 - sysdeps/powerpc/powerpc64/multiarch/bcopy.c | 29 - sysdeps/powerpc/powerpc64/multiarch/bzero.c | 43 - .../powerpc/powerpc64/multiarch/ifunc-impl-list.c | 389 - sysdeps/powerpc/powerpc64/multiarch/init-arch.h | 18 - .../powerpc/powerpc64/multiarch/memchr-power7.S | 28 - sysdeps/powerpc/powerpc64/multiarch/memchr-ppc64.c | 31 - sysdeps/powerpc/powerpc64/multiarch/memchr.c | 38 - .../powerpc/powerpc64/multiarch/memcmp-power4.S | 28 - .../powerpc/powerpc64/multiarch/memcmp-power7.S | 28 - .../powerpc/powerpc64/multiarch/memcmp-power8.S | 28 - sysdeps/powerpc/powerpc64/multiarch/memcmp-ppc64.c | 33 - sysdeps/powerpc/powerpc64/multiarch/memcmp.c | 44 - sysdeps/powerpc/powerpc64/multiarch/memcpy-a2.S | 26 - sysdeps/powerpc/powerpc64/multiarch/memcpy-cell.S | 26 - .../powerpc/powerpc64/multiarch/memcpy-power4.S | 26 - .../powerpc/powerpc64/multiarch/memcpy-power6.S | 26 - .../powerpc/powerpc64/multiarch/memcpy-power7.S | 26 - sysdeps/powerpc/powerpc64/multiarch/memcpy-ppc64.S | 28 - sysdeps/powerpc/powerpc64/multiarch/memcpy.c | 55 - .../powerpc/powerpc64/multiarch/memmove-power7.S | 29 - .../powerpc/powerpc64/multiarch/memmove-ppc64.c | 44 - sysdeps/powerpc/powerpc64/multiarch/memmove.c | 45 - .../powerpc/powerpc64/multiarch/mempcpy-power7.S | 28 - .../powerpc/powerpc64/multiarch/mempcpy-ppc64.c | 19 - sysdeps/powerpc/powerpc64/multiarch/mempcpy.c | 44 - .../powerpc/powerpc64/multiarch/memrchr-power7.S | 28 - .../powerpc/powerpc64/multiarch/memrchr-ppc64.c | 19 - sysdeps/powerpc/powerpc64/multiarch/memrchr.c | 37 - .../powerpc/powerpc64/multiarch/memset-power4.S | 29 - .../powerpc/powerpc64/multiarch/memset-power6.S | 29 - .../powerpc/powerpc64/multiarch/memset-power7.S | 28 - .../powerpc/powerpc64/multiarch/memset-power8.S | 29 - sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S | 42 - sysdeps/powerpc/powerpc64/multiarch/memset.c | 53 - .../powerpc/powerpc64/multiarch/rawmemchr-power7.S | 23 - .../powerpc/powerpc64/multiarch/rawmemchr-ppc64.c | 19 - sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c | 39 - sysdeps/powerpc/powerpc64/multiarch/rtld-memset.c | 18 - sysdeps/powerpc/powerpc64/multiarch/rtld-strchr.S | 18 - .../powerpc/powerpc64/multiarch/stpcpy-power7.c | 36 - .../powerpc/powerpc64/multiarch/stpcpy-power8.S | 26 - sysdeps/powerpc/powerpc64/multiarch/stpcpy-ppc64.c | 37 - sysdeps/powerpc/powerpc64/multiarch/stpcpy.c | 41 - .../powerpc/powerpc64/multiarch/stpncpy-power7.S | 30 - .../powerpc/powerpc64/multiarch/stpncpy-power8.S | 28 - .../powerpc/powerpc64/multiarch/stpncpy-ppc64.c | 26 - sysdeps/powerpc/powerpc64/multiarch/stpncpy.c | 39 - .../powerpc64/multiarch/strcasecmp-power7.S | 28 - .../powerpc64/multiarch/strcasecmp-power8.S | 28 - .../powerpc/powerpc64/multiarch/strcasecmp-ppc64.c | 21 - sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c | 36 - .../powerpc64/multiarch/strcasecmp_l-power7.S | 31 - sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c | 40 - .../powerpc64/multiarch/strcasestr-power8.S | 35 - .../powerpc/powerpc64/multiarch/strcasestr-ppc64.c | 34 - sysdeps/powerpc/powerpc64/multiarch/strcasestr.c | 37 - .../powerpc/powerpc64/multiarch/strcat-power7.c | 30 - .../powerpc/powerpc64/multiarch/strcat-power8.c | 30 - sysdeps/powerpc/powerpc64/multiarch/strcat-ppc64.c | 29 - sysdeps/powerpc/powerpc64/multiarch/strcat.c | 36 - .../powerpc/powerpc64/multiarch/strchr-power7.S | 26 - .../powerpc/powerpc64/multiarch/strchr-power8.S | 26 - sysdeps/powerpc/powerpc64/multiarch/strchr-ppc64.S | 29 - sysdeps/powerpc/powerpc64/multiarch/strchr.c | 42 - .../powerpc/powerpc64/multiarch/strchrnul-power7.S | 26 - .../powerpc/powerpc64/multiarch/strchrnul-power8.S | 26 - .../powerpc/powerpc64/multiarch/strchrnul-ppc64.c | 19 - sysdeps/powerpc/powerpc64/multiarch/strchrnul.c | 40 - .../powerpc/powerpc64/multiarch/strcmp-power7.S | 26 - .../powerpc/powerpc64/multiarch/strcmp-power8.S | 26 - .../powerpc/powerpc64/multiarch/strcmp-power9.S | 26 - sysdeps/powerpc/powerpc64/multiarch/strcmp-ppc64.S | 29 - sysdeps/powerpc/powerpc64/multiarch/strcmp.c | 42 - .../powerpc/powerpc64/multiarch/strcpy-power7.c | 32 - .../powerpc/powerpc64/multiarch/strcpy-power8.S | 26 - sysdeps/powerpc/powerpc64/multiarch/strcpy-ppc64.c | 35 - sysdeps/powerpc/powerpc64/multiarch/strcpy.c | 36 - .../powerpc/powerpc64/multiarch/strcspn-power8.S | 25 - .../powerpc/powerpc64/multiarch/strcspn-ppc64.c | 26 - sysdeps/powerpc/powerpc64/multiarch/strcspn.c | 35 - .../powerpc/powerpc64/multiarch/strlen-power7.S | 26 - .../powerpc/powerpc64/multiarch/strlen-power8.S | 26 - sysdeps/powerpc/powerpc64/multiarch/strlen-ppc64.S | 28 - sysdeps/powerpc/powerpc64/multiarch/strlen.c | 44 - .../powerpc/powerpc64/multiarch/strncase-power7.c | 24 - .../powerpc/powerpc64/multiarch/strncase-power8.S | 28 - .../powerpc/powerpc64/multiarch/strncase-ppc64.c | 21 - sysdeps/powerpc/powerpc64/multiarch/strncase.c | 36 - .../powerpc64/multiarch/strncase_l-power7.c | 25 - sysdeps/powerpc/powerpc64/multiarch/strncase_l.c | 42 - .../powerpc/powerpc64/multiarch/strncat-power7.c | 31 - .../powerpc/powerpc64/multiarch/strncat-power8.c | 31 - .../powerpc/powerpc64/multiarch/strncat-ppc64.c | 29 - sysdeps/powerpc/powerpc64/multiarch/strncat.c | 34 - .../powerpc/powerpc64/multiarch/strncmp-power4.S | 25 - .../powerpc/powerpc64/multiarch/strncmp-power7.S | 25 - .../powerpc/powerpc64/multiarch/strncmp-power8.S | 25 - .../powerpc/powerpc64/multiarch/strncmp-power9.S | 25 - .../powerpc/powerpc64/multiarch/strncmp-ppc64.S | 28 - sysdeps/powerpc/powerpc64/multiarch/strncmp.c | 47 - .../powerpc/powerpc64/multiarch/strncpy-power7.S | 28 - .../powerpc/powerpc64/multiarch/strncpy-power8.S | 29 - .../powerpc/powerpc64/multiarch/strncpy-ppc64.c | 33 - sysdeps/powerpc/powerpc64/multiarch/strncpy.c | 42 - .../powerpc/powerpc64/multiarch/strnlen-power7.S | 28 - .../powerpc/powerpc64/multiarch/strnlen-power8.S | 28 - .../powerpc/powerpc64/multiarch/strnlen-ppc64.c | 18 - sysdeps/powerpc/powerpc64/multiarch/strnlen.c | 41 - .../powerpc/powerpc64/multiarch/strrchr-power7.S | 26 - .../powerpc/powerpc64/multiarch/strrchr-power8.S | 39 - .../powerpc/powerpc64/multiarch/strrchr-ppc64.c | 33 - sysdeps/powerpc/powerpc64/multiarch/strrchr.c | 40 - .../powerpc/powerpc64/multiarch/strspn-power8.S | 25 - sysdeps/powerpc/powerpc64/multiarch/strspn-ppc64.c | 25 - sysdeps/powerpc/powerpc64/multiarch/strspn.c | 35 - .../powerpc/powerpc64/multiarch/strstr-power7.S | 30 - sysdeps/powerpc/powerpc64/multiarch/strstr-ppc64.c | 29 - sysdeps/powerpc/powerpc64/multiarch/strstr.c | 36 - .../powerpc/powerpc64/multiarch/wcschr-power6.c | 19 - .../powerpc/powerpc64/multiarch/wcschr-power7.c | 19 - sysdeps/powerpc/powerpc64/multiarch/wcschr-ppc64.c | 18 - sysdeps/powerpc/powerpc64/multiarch/wcschr.c | 43 - .../powerpc/powerpc64/multiarch/wcscpy-power6.c | 19 - .../powerpc/powerpc64/multiarch/wcscpy-power7.c | 19 - sysdeps/powerpc/powerpc64/multiarch/wcscpy-ppc64.c | 18 - sysdeps/powerpc/powerpc64/multiarch/wcscpy.c | 36 - .../powerpc/powerpc64/multiarch/wcsrchr-power6.c | 19 - .../powerpc/powerpc64/multiarch/wcsrchr-power7.c | 19 - .../powerpc/powerpc64/multiarch/wcsrchr-ppc64.c | 18 - sysdeps/powerpc/powerpc64/multiarch/wcsrchr.c | 36 - .../powerpc/powerpc64/multiarch/wordcopy-ppc64.c | 18 - sysdeps/powerpc/powerpc64/power4/Implies | 2 - sysdeps/powerpc/powerpc64/power4/Makefile | 6 - sysdeps/powerpc/powerpc64/power4/fpu/Implies | 1 - .../powerpc/powerpc64/power4/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power4/memcmp.S | 1369 --- sysdeps/powerpc/powerpc64/power4/memcopy.h | 1 - sysdeps/powerpc/powerpc64/power4/memcpy.S | 477 - sysdeps/powerpc/powerpc64/power4/memset.S | 251 - sysdeps/powerpc/powerpc64/power4/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power4/strncmp.S | 225 - sysdeps/powerpc/powerpc64/power5+/Implies | 4 - sysdeps/powerpc/powerpc64/power5+/fpu/Implies | 1 - .../powerpc64/power5+/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power5+/fpu/s_ceil.S | 37 - sysdeps/powerpc/powerpc64/power5+/fpu/s_ceilf.S | 30 - sysdeps/powerpc/powerpc64/power5+/fpu/s_floor.S | 37 - sysdeps/powerpc/powerpc64/power5+/fpu/s_floorf.S | 30 - sysdeps/powerpc/powerpc64/power5+/fpu/s_llround.S | 58 - sysdeps/powerpc/powerpc64/power5+/fpu/s_round.S | 37 - sysdeps/powerpc/powerpc64/power5+/fpu/s_roundf.S | 30 - sysdeps/powerpc/powerpc64/power5+/fpu/s_trunc.S | 37 - sysdeps/powerpc/powerpc64/power5+/fpu/s_truncf.S | 30 - .../powerpc/powerpc64/power5+/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power5/Implies | 2 - sysdeps/powerpc/powerpc64/power5/fpu/Implies | 1 - .../powerpc/powerpc64/power5/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power5/fpu/s_isnan.S | 60 - sysdeps/powerpc/powerpc64/power5/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power6/Implies | 2 - sysdeps/powerpc/powerpc64/power6/fpu/Implies | 1 - .../powerpc/powerpc64/power6/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power6/fpu/s_copysign.S | 58 - sysdeps/powerpc/powerpc64/power6/fpu/s_copysignf.S | 1 - sysdeps/powerpc/powerpc64/power6/fpu/s_isnan.S | 59 - sysdeps/powerpc/powerpc64/power6/memcpy.S | 1499 --- sysdeps/powerpc/powerpc64/power6/memset.S | 395 - sysdeps/powerpc/powerpc64/power6/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power6/wcschr.c | 1 - sysdeps/powerpc/powerpc64/power6/wcscpy.c | 1 - sysdeps/powerpc/powerpc64/power6/wcsrchr.c | 1 - sysdeps/powerpc/powerpc64/power6x/Implies | 2 - sysdeps/powerpc/powerpc64/power6x/fpu/Implies | 1 - .../powerpc64/power6x/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power6x/fpu/s_isnan.S | 58 - sysdeps/powerpc/powerpc64/power6x/fpu/s_llrint.S | 44 - sysdeps/powerpc/powerpc64/power6x/fpu/s_llround.S | 54 - .../powerpc/powerpc64/power6x/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power7/Implies | 2 - sysdeps/powerpc/powerpc64/power7/Makefile | 11 - sysdeps/powerpc/powerpc64/power7/add_n.S | 98 - sysdeps/powerpc/powerpc64/power7/bcopy.c | 1 - sysdeps/powerpc/powerpc64/power7/fpu/Implies | 1 - .../powerpc/powerpc64/power7/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S | 70 - sysdeps/powerpc/powerpc64/power7/fpu/s_finitef.S | 1 - sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S | 69 - sysdeps/powerpc/powerpc64/power7/fpu/s_isinff.S | 1 - sysdeps/powerpc/powerpc64/power7/fpu/s_isnan.S | 68 - sysdeps/powerpc/powerpc64/power7/fpu/s_isnanf.S | 1 - sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c | 1 - sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c | 1 - sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c | 1 - sysdeps/powerpc/powerpc64/power7/memchr.S | 199 - sysdeps/powerpc/powerpc64/power7/memcmp.S | 1061 -- sysdeps/powerpc/powerpc64/power7/memcpy.S | 430 - sysdeps/powerpc/powerpc64/power7/memmove.S | 835 -- sysdeps/powerpc/powerpc64/power7/mempcpy.S | 472 - sysdeps/powerpc/powerpc64/power7/memrchr.S | 201 - sysdeps/powerpc/powerpc64/power7/memset.S | 399 - sysdeps/powerpc/powerpc64/power7/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power7/rawmemchr.S | 115 - sysdeps/powerpc/powerpc64/power7/stpncpy.S | 24 - sysdeps/powerpc/powerpc64/power7/strcasecmp.S | 126 - sysdeps/powerpc/powerpc64/power7/strcasecmp_l.S | 5 - sysdeps/powerpc/powerpc64/power7/strchr.S | 230 - sysdeps/powerpc/powerpc64/power7/strchrnul.S | 131 - sysdeps/powerpc/powerpc64/power7/strcmp.S | 168 - sysdeps/powerpc/powerpc64/power7/strlen.S | 107 - sysdeps/powerpc/powerpc64/power7/strncmp.S | 227 - sysdeps/powerpc/powerpc64/power7/strncpy.S | 722 -- sysdeps/powerpc/powerpc64/power7/strnlen.S | 182 - sysdeps/powerpc/powerpc64/power7/strrchr.S | 260 - sysdeps/powerpc/powerpc64/power7/strstr-ppc64.c | 27 - sysdeps/powerpc/powerpc64/power7/strstr.S | 521 - sysdeps/powerpc/powerpc64/power7/sub_n.S | 23 - sysdeps/powerpc/powerpc64/power8/Implies | 2 - sysdeps/powerpc/powerpc64/power8/Makefile | 3 - sysdeps/powerpc/powerpc64/power8/fpu/Implies | 1 - sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S | 303 - .../powerpc/powerpc64/power8/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power8/fpu/s_cosf.S | 508 - sysdeps/powerpc/powerpc64/power8/fpu/s_finite.S | 56 - sysdeps/powerpc/powerpc64/power8/fpu/s_finitef.S | 1 - sysdeps/powerpc/powerpc64/power8/fpu/s_isinf.S | 61 - sysdeps/powerpc/powerpc64/power8/fpu/s_isinff.S | 1 - sysdeps/powerpc/powerpc64/power8/fpu/s_isnan.S | 56 - sysdeps/powerpc/powerpc64/power8/fpu/s_isnanf.S | 1 - sysdeps/powerpc/powerpc64/power8/fpu/s_llrint.S | 45 - sysdeps/powerpc/powerpc64/power8/fpu/s_llround.S | 48 - sysdeps/powerpc/powerpc64/power8/fpu/s_sinf.S | 519 - sysdeps/powerpc/powerpc64/power8/memcmp.S | 1447 --- sysdeps/powerpc/powerpc64/power8/memset.S | 458 - sysdeps/powerpc/powerpc64/power8/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power8/stpcpy.S | 24 - sysdeps/powerpc/powerpc64/power8/stpncpy.S | 24 - sysdeps/powerpc/powerpc64/power8/strcasecmp.S | 457 - .../powerpc/powerpc64/power8/strcasestr-ppc64.c | 29 - sysdeps/powerpc/powerpc64/power8/strcasestr.S | 538 - sysdeps/powerpc/powerpc64/power8/strchr.S | 377 - sysdeps/powerpc/powerpc64/power8/strchrnul.S | 23 - sysdeps/powerpc/powerpc64/power8/strcmp.S | 247 - sysdeps/powerpc/powerpc64/power8/strcpy.S | 270 - sysdeps/powerpc/powerpc64/power8/strcspn.S | 20 - sysdeps/powerpc/powerpc64/power8/strlen.S | 301 - sysdeps/powerpc/powerpc64/power8/strncase.S | 20 - sysdeps/powerpc/powerpc64/power8/strncmp.S | 327 - sysdeps/powerpc/powerpc64/power8/strncpy.S | 465 - sysdeps/powerpc/powerpc64/power8/strnlen.S | 433 - sysdeps/powerpc/powerpc64/power8/strrchr.S | 464 - sysdeps/powerpc/powerpc64/power8/strspn.S | 202 - sysdeps/powerpc/powerpc64/power9/Implies | 2 - sysdeps/powerpc/powerpc64/power9/fpu/Implies | 1 - .../powerpc/powerpc64/power9/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power9/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64/power9/strcmp.S | 268 - sysdeps/powerpc/powerpc64/power9/strncmp.S | 379 - sysdeps/powerpc/powerpc64/ppc-mcount.S | 39 - sysdeps/powerpc/powerpc64/register-dump.h | 124 - sysdeps/powerpc/powerpc64/rtld-memset.c | 4 - sysdeps/powerpc/powerpc64/setjmp-common.S | 245 - sysdeps/powerpc/powerpc64/setjmp.S | 61 - sysdeps/powerpc/powerpc64/stackguard-macros.h | 14 - sysdeps/powerpc/powerpc64/start.S | 92 - sysdeps/powerpc/powerpc64/strchr.S | 155 - sysdeps/powerpc/powerpc64/strcmp.S | 180 - sysdeps/powerpc/powerpc64/strlen.S | 203 - sysdeps/powerpc/powerpc64/strncmp.S | 210 - sysdeps/powerpc/powerpc64/submul_1.S | 21 - sysdeps/powerpc/powerpc64/sysdep.h | 425 - sysdeps/powerpc/powerpc64/tls-macros.h | 44 - sysdeps/powerpc/powerpc64/tst-audit.h | 33 - sysdeps/powerpc/powerpc64le/Implies | 1 - sysdeps/powerpc/powerpc64le/fpu/Implies | 1 - sysdeps/powerpc/powerpc64le/fpu/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64le/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64le/power7/Implies | 1 - sysdeps/powerpc/powerpc64le/power7/fpu/Implies | 1 - .../powerpc64le/power7/fpu/multiarch/Implies | 1 - .../powerpc/powerpc64le/power7/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64le/power8/Implies | 1 - sysdeps/powerpc/powerpc64le/power8/fpu/Implies | 1 - .../powerpc64le/power8/fpu/multiarch/Implies | 1 - .../powerpc/powerpc64le/power8/multiarch/Implies | 1 - sysdeps/powerpc/powerpc64le/power9/Implies | 1 - sysdeps/powerpc/powerpc64le/power9/fpu/Implies | 1 - .../powerpc64le/power9/fpu/multiarch/Implies | 1 - .../powerpc/powerpc64le/power9/multiarch/Implies | 1 - sysdeps/powerpc/preconfigure | 20 - sysdeps/powerpc/rtld-global-offsets.sym | 8 - sysdeps/powerpc/sched_cpucount.c | 22 - sysdeps/powerpc/sigjmp.c | 39 - sysdeps/powerpc/soft-fp/sfp-machine.h | 114 - sysdeps/powerpc/sotruss-lib.c | 69 - sysdeps/powerpc/stackinfo.h | 38 - sysdeps/powerpc/sys/platform/ppc.h | 146 - sysdeps/powerpc/sysdep.h | 189 - sysdeps/powerpc/test-arith.c | 604 - sysdeps/powerpc/test-arithf.c | 6 - sysdeps/powerpc/test-get_hwcap-static.c | 23 - sysdeps/powerpc/test-get_hwcap.c | 177 - sysdeps/powerpc/test-gettimebase.c | 46 - sysdeps/powerpc/tls-macros.h | 3 - sysdeps/powerpc/tst-set_ppr.c | 102 - sysdeps/powerpc/tst-stack-align.h | 46 - sysdeps/powerpc/tst-tlsopt-powerpc.c | 51 - sysdeps/pthread/Makeconfig | 2 - sysdeps/pthread/Makefile | 27 - sysdeps/pthread/Versions | 5 - sysdeps/pthread/aio_cancel.c | 157 - sysdeps/pthread/aio_error.c | 48 - sysdeps/pthread/aio_fsync.c | 57 - sysdeps/pthread/aio_misc.c | 730 -- sysdeps/pthread/aio_misc.h | 143 - sysdeps/pthread/aio_notify.c | 177 - sysdeps/pthread/aio_read.c | 30 - sysdeps/pthread/aio_read64.c | 30 - sysdeps/pthread/aio_suspend.c | 256 - sysdeps/pthread/aio_write.c | 30 - sysdeps/pthread/aio_write64.c | 30 - sysdeps/pthread/allocalim.h | 29 - sysdeps/pthread/bits/sigthread.h | 44 - sysdeps/pthread/flockfile.c | 31 - sysdeps/pthread/ftrylockfile.c | 31 - sysdeps/pthread/funlockfile.c | 31 - sysdeps/pthread/lio_listio.c | 264 - sysdeps/pthread/lio_listio64.c | 33 - sysdeps/pthread/posix-timer.h | 190 - sysdeps/pthread/semaphore.h | 77 - sysdeps/pthread/timer_create.c | 166 - sysdeps/pthread/timer_delete.c | 68 - sysdeps/pthread/timer_getoverr.c | 43 - sysdeps/pthread/timer_gettime.c | 74 - sysdeps/pthread/timer_routines.c | 571 - sysdeps/pthread/timer_settime.c | 133 - sysdeps/pthread/tst-timer.c | 160 - sysdeps/s390/Implies | 3 - sysdeps/s390/Makefile | 31 - sysdeps/s390/Versions | 17 - sysdeps/s390/abort-instr.h | 2 - sysdeps/s390/asm-syntax.h | 24 - sysdeps/s390/atomic-machine.h | 161 - sysdeps/s390/bits/byteswap-16.h | 65 - sysdeps/s390/bits/byteswap.h | 134 - sysdeps/s390/bits/endian.h | 7 - sysdeps/s390/bits/flt-eval-method.h | 24 - sysdeps/s390/bits/link.h | 139 - sysdeps/s390/bits/setjmp.h | 47 - sysdeps/s390/bits/string.h | 252 - sysdeps/s390/bits/xtitypes.h | 33 - sysdeps/s390/configure | 217 - sysdeps/s390/configure.ac | 116 - sysdeps/s390/dl-irel.h | 52 - sysdeps/s390/dl-procinfo.c | 79 - sysdeps/s390/dl-procinfo.h | 98 - sysdeps/s390/dl-tls.h | 104 - sysdeps/s390/ffs.c | 70 - sysdeps/s390/fix-fp-int-convert-overflow.h | 33 - sysdeps/s390/fpu/bits/fenv.h | 100 - sysdeps/s390/fpu/bits/mathinline.h | 100 - sysdeps/s390/fpu/e_sqrt.c | 29 - sysdeps/s390/fpu/e_sqrtf.c | 29 - sysdeps/s390/fpu/e_sqrtl.c | 30 - sysdeps/s390/fpu/fclrexcpt.c | 45 - sysdeps/s390/fpu/fedisblxcpt.c | 34 - sysdeps/s390/fpu/feenablxcpt.c | 34 - sysdeps/s390/fpu/fegetenv.c | 33 - sysdeps/s390/fpu/fegetexcept.c | 30 - sysdeps/s390/fpu/fegetmode.c | 27 - sysdeps/s390/fpu/fegetround.c | 34 - sysdeps/s390/fpu/feholdexcpt.c | 37 - sysdeps/s390/fpu/fenv_libc.h | 39 - sysdeps/s390/fpu/fesetenv.c | 50 - sysdeps/s390/fpu/fesetexcept.c | 33 - sysdeps/s390/fpu/fesetmode.c | 39 - sysdeps/s390/fpu/fesetround.c | 39 - sysdeps/s390/fpu/fetestexceptflag.c | 31 - sysdeps/s390/fpu/feupdateenv.c | 42 - sysdeps/s390/fpu/fgetexcptflg.c | 41 - sysdeps/s390/fpu/fix-fp-int-compare-invalid.h | 36 - sysdeps/s390/fpu/fpu_control.h | 43 - sysdeps/s390/fpu/fraiseexcpt.c | 107 - sysdeps/s390/fpu/fsetexcptflg.c | 53 - sysdeps/s390/fpu/ftestexcept.c | 39 - sysdeps/s390/fpu/get-rounding-mode.h | 37 - sysdeps/s390/fpu/libm-test-ulps | 2270 ---- sysdeps/s390/fpu/libm-test-ulps-name | 1 - sysdeps/s390/fpu/s_fma.c | 36 - sysdeps/s390/fpu/s_fmaf.c | 31 - sysdeps/s390/gccframe.h | 21 - sysdeps/s390/gconv-modules | 50 - sysdeps/s390/gmp-mparam.h | 30 - sysdeps/s390/iso-8859-1_cp037_z900.c | 262 - sysdeps/s390/jmpbuf-offsets.h | 28 - sysdeps/s390/jmpbuf-unwind.h | 54 - sysdeps/s390/ldsodefs.h | 57 - sysdeps/s390/libc-tls.c | 32 - sysdeps/s390/linkmap.h | 13 - sysdeps/s390/longjmp.c | 52 - sysdeps/s390/machine-gmon.h | 35 - sysdeps/s390/mempcpy.S | 19 - sysdeps/s390/memusage.h | 20 - sysdeps/s390/multiarch/8bit-generic.c | 398 - sysdeps/s390/multiarch/Makefile | 59 - sysdeps/s390/multiarch/gconv_simple.c | 1266 --- sysdeps/s390/multiarch/gen-8bit.sh | 6 - sysdeps/s390/multiarch/iconv/skeleton.c | 21 - sysdeps/s390/multiarch/ifunc-impl-list.c | 152 - sysdeps/s390/multiarch/ifunc-resolve.h | 90 - sysdeps/s390/multiarch/memccpy-c.c | 25 - sysdeps/s390/multiarch/memccpy-vx.S | 156 - sysdeps/s390/multiarch/memccpy.c | 28 - sysdeps/s390/multiarch/memchr-vx.S | 159 - sysdeps/s390/multiarch/memchr.c | 27 - sysdeps/s390/multiarch/mempcpy.c | 32 - sysdeps/s390/multiarch/memrchr-c.c | 25 - sysdeps/s390/multiarch/memrchr-vx.S | 160 - sysdeps/s390/multiarch/memrchr.c | 28 - sysdeps/s390/multiarch/rawmemchr-c.c | 34 - sysdeps/s390/multiarch/rawmemchr-vx.S | 92 - sysdeps/s390/multiarch/rawmemchr.c | 31 - sysdeps/s390/multiarch/stpcpy-c.c | 35 - sysdeps/s390/multiarch/stpcpy-vx.S | 104 - sysdeps/s390/multiarch/stpcpy.c | 35 - sysdeps/s390/multiarch/stpncpy-c.c | 28 - sysdeps/s390/multiarch/stpncpy-vx.S | 200 - sysdeps/s390/multiarch/stpncpy.c | 32 - sysdeps/s390/multiarch/strcat-c.c | 28 - sysdeps/s390/multiarch/strcat-vx.S | 161 - sysdeps/s390/multiarch/strcat.c | 29 - sysdeps/s390/multiarch/strchr-c.c | 29 - sysdeps/s390/multiarch/strchr-vx.S | 100 - sysdeps/s390/multiarch/strchr.c | 32 - sysdeps/s390/multiarch/strchrnul-c.c | 26 - sysdeps/s390/multiarch/strchrnul-vx.S | 93 - sysdeps/s390/multiarch/strchrnul.c | 28 - sysdeps/s390/multiarch/strcmp-vx.S | 116 - sysdeps/s390/multiarch/strcmp.c | 29 - sysdeps/s390/multiarch/strcpy-vx.S | 109 - sysdeps/s390/multiarch/strcpy.c | 27 - sysdeps/s390/multiarch/strcspn-c.c | 28 - sysdeps/s390/multiarch/strcspn-vx.S | 281 - sysdeps/s390/multiarch/strcspn.c | 31 - sysdeps/s390/multiarch/strlen-c.c | 28 - sysdeps/s390/multiarch/strlen-vx.S | 84 - sysdeps/s390/multiarch/strlen.c | 29 - sysdeps/s390/multiarch/strncat-c.c | 23 - sysdeps/s390/multiarch/strncat-vx.S | 239 - sysdeps/s390/multiarch/strncat.c | 27 - sysdeps/s390/multiarch/strncmp-c.c | 28 - sysdeps/s390/multiarch/strncmp-vx.S | 137 - sysdeps/s390/multiarch/strncmp.c | 31 - sysdeps/s390/multiarch/strncpy-vx.S | 207 - sysdeps/s390/multiarch/strncpy.c | 29 - sysdeps/s390/multiarch/strnlen-c.c | 30 - sysdeps/s390/multiarch/strnlen-vx.S | 134 - sysdeps/s390/multiarch/strnlen.c | 32 - sysdeps/s390/multiarch/strpbrk-c.c | 28 - sysdeps/s390/multiarch/strpbrk-vx.S | 302 - sysdeps/s390/multiarch/strpbrk.c | 31 - sysdeps/s390/multiarch/strrchr-c.c | 29 - sysdeps/s390/multiarch/strrchr-vx.S | 180 - sysdeps/s390/multiarch/strrchr.c | 30 - sysdeps/s390/multiarch/strspn-c.c | 28 - sysdeps/s390/multiarch/strspn-vx.S | 256 - sysdeps/s390/multiarch/strspn.c | 31 - sysdeps/s390/multiarch/utf16-utf32-z9.c | 44 - sysdeps/s390/multiarch/utf8-utf16-z9.c | 48 - sysdeps/s390/multiarch/utf8-utf32-z9.c | 48 - sysdeps/s390/multiarch/wcpcpy-c.c | 25 - sysdeps/s390/multiarch/wcpcpy-vx.S | 114 - sysdeps/s390/multiarch/wcpcpy.c | 28 - sysdeps/s390/multiarch/wcpncpy-c.c | 25 - sysdeps/s390/multiarch/wcpncpy-vx.S | 222 - sysdeps/s390/multiarch/wcpncpy.c | 28 - sysdeps/s390/multiarch/wcscat-c.c | 25 - sysdeps/s390/multiarch/wcscat-vx.S | 175 - sysdeps/s390/multiarch/wcscat.c | 28 - sysdeps/s390/multiarch/wcschr-c.c | 37 - sysdeps/s390/multiarch/wcschr-vx.S | 103 - sysdeps/s390/multiarch/wcschr.c | 32 - sysdeps/s390/multiarch/wcschrnul-c.c | 25 - sysdeps/s390/multiarch/wcschrnul-vx.S | 97 - sysdeps/s390/multiarch/wcschrnul.c | 28 - sysdeps/s390/multiarch/wcscmp-c.c | 32 - sysdeps/s390/multiarch/wcscmp-vx.S | 131 - sysdeps/s390/multiarch/wcscmp.c | 30 - sysdeps/s390/multiarch/wcscpy-c.c | 25 - sysdeps/s390/multiarch/wcscpy-vx.S | 111 - sysdeps/s390/multiarch/wcscpy.c | 27 - sysdeps/s390/multiarch/wcscspn-c.c | 26 - sysdeps/s390/multiarch/wcscspn-vx.S | 293 - sysdeps/s390/multiarch/wcscspn.c | 27 - sysdeps/s390/multiarch/wcslen-c.c | 25 - sysdeps/s390/multiarch/wcslen-vx.S | 91 - sysdeps/s390/multiarch/wcslen.c | 28 - sysdeps/s390/multiarch/wcsncat-c.c | 25 - sysdeps/s390/multiarch/wcsncat-vx.S | 265 - sysdeps/s390/multiarch/wcsncat.c | 27 - sysdeps/s390/multiarch/wcsncmp-c.c | 25 - sysdeps/s390/multiarch/wcsncmp-vx.S | 177 - sysdeps/s390/multiarch/wcsncmp.c | 27 - sysdeps/s390/multiarch/wcsncpy-c.c | 25 - sysdeps/s390/multiarch/wcsncpy-vx.S | 223 - sysdeps/s390/multiarch/wcsncpy.c | 28 - sysdeps/s390/multiarch/wcsnlen-c.c | 25 - sysdeps/s390/multiarch/wcsnlen-vx.S | 151 - sysdeps/s390/multiarch/wcsnlen.c | 28 - sysdeps/s390/multiarch/wcspbrk-c.c | 31 - sysdeps/s390/multiarch/wcspbrk-vx.S | 315 - sysdeps/s390/multiarch/wcspbrk.c | 29 - sysdeps/s390/multiarch/wcsrchr-c.c | 25 - sysdeps/s390/multiarch/wcsrchr-vx.S | 190 - sysdeps/s390/multiarch/wcsrchr.c | 27 - sysdeps/s390/multiarch/wcsspn-c.c | 31 - sysdeps/s390/multiarch/wcsspn-vx.S | 270 - sysdeps/s390/multiarch/wcsspn.c | 29 - sysdeps/s390/multiarch/wmemchr-c.c | 37 - sysdeps/s390/multiarch/wmemchr-vx.S | 166 - sysdeps/s390/multiarch/wmemchr.c | 32 - sysdeps/s390/multiarch/wmemcmp-c.c | 26 - sysdeps/s390/multiarch/wmemcmp-vx.S | 149 - sysdeps/s390/multiarch/wmemcmp.c | 27 - sysdeps/s390/multiarch/wmemset-c.c | 37 - sysdeps/s390/multiarch/wmemset-vx.S | 142 - sysdeps/s390/multiarch/wmemset.c | 32 - sysdeps/s390/nptl/Makefile | 25 - sysdeps/s390/nptl/bits/pthreadtypes-arch.h | 81 - sysdeps/s390/nptl/bits/semaphore.h | 39 - sysdeps/s390/nptl/pthreaddef.h | 33 - sysdeps/s390/nptl/tcb-offsets.sym | 6 - sysdeps/s390/nptl/tls.h | 196 - sysdeps/s390/preconfigure | 6 - sysdeps/s390/s390-32/Implies | 1 - sysdeps/s390/s390-32/Makefile | 9 - sysdeps/s390/s390-32/Versions | 6 - sysdeps/s390/s390-32/__longjmp.c | 83 - sysdeps/s390/s390-32/add_n.S | 63 - sysdeps/s390/s390-32/addmul_1.S | 58 - sysdeps/s390/s390-32/backtrace.c | 148 - sysdeps/s390/s390-32/bcopy.S | 85 - sysdeps/s390/s390-32/bits/wordsize.h | 11 - sysdeps/s390/s390-32/bsd-_setjmp.S | 1 - sysdeps/s390/s390-32/bsd-setjmp.S | 1 - sysdeps/s390/s390-32/bzero.S | 42 - sysdeps/s390/s390-32/crti.S | 102 - sysdeps/s390/s390-32/crtn.S | 47 - sysdeps/s390/s390-32/dl-machine.h | 522 - sysdeps/s390/s390-32/dl-sysdep.h | 23 - sysdeps/s390/s390-32/dl-trampoline.S | 33 - sysdeps/s390/s390-32/dl-trampoline.h | 231 - sysdeps/s390/s390-32/memchr.S | 41 - sysdeps/s390/s390-32/memcmp.S | 66 - sysdeps/s390/s390-32/memcpy.S | 89 - sysdeps/s390/s390-32/memset.S | 65 - sysdeps/s390/s390-32/mul_1.S | 55 - sysdeps/s390/s390-32/multiarch/Makefile | 4 - sysdeps/s390/s390-32/multiarch/memchr.c | 21 - sysdeps/s390/s390-32/multiarch/memcmp-s390.S | 107 - sysdeps/s390/s390-32/multiarch/memcmp.c | 27 - sysdeps/s390/s390-32/multiarch/memcpy-s390.S | 128 - sysdeps/s390/s390-32/multiarch/memcpy.c | 27 - sysdeps/s390/s390-32/multiarch/memset-s390.S | 116 - sysdeps/s390/s390-32/multiarch/memset.c | 26 - sysdeps/s390/s390-32/multiarch/strcmp.c | 21 - sysdeps/s390/s390-32/multiarch/strcpy.c | 21 - sysdeps/s390/s390-32/multiarch/strncpy.c | 21 - sysdeps/s390/s390-32/s390-mcount.S | 89 - sysdeps/s390/s390-32/setjmp.S | 123 - sysdeps/s390/s390-32/stackguard-macros.h | 15 - sysdeps/s390/s390-32/start.S | 211 - sysdeps/s390/s390-32/strcmp.S | 41 - sysdeps/s390/s390-32/strcpy.S | 36 - sysdeps/s390/s390-32/strncpy.S | 79 - sysdeps/s390/s390-32/sub_n.S | 62 - sysdeps/s390/s390-32/symbol-hacks.h | 21 - sysdeps/s390/s390-32/sysdep.h | 101 - sysdeps/s390/s390-32/tls-macros.h | 104 - sysdeps/s390/s390-32/tst-audit.h | 25 - sysdeps/s390/s390-64/Implies | 1 - sysdeps/s390/s390-64/Makefile | 9 - sysdeps/s390/s390-64/__longjmp.c | 89 - sysdeps/s390/s390-64/add_n.S | 63 - sysdeps/s390/s390-64/backtrace.c | 147 - sysdeps/s390/s390-64/bcopy.S | 71 - sysdeps/s390/s390-64/bits/wordsize.h | 11 - sysdeps/s390/s390-64/bsd-_setjmp.S | 1 - sysdeps/s390/s390-64/bsd-setjmp.S | 1 - sysdeps/s390/s390-64/bzero.S | 41 - sysdeps/s390/s390-64/crti.S | 91 - sysdeps/s390/s390-64/crtn.S | 50 - sysdeps/s390/s390-64/dl-machine.h | 476 - sysdeps/s390/s390-64/dl-trampoline.S | 33 - sysdeps/s390/s390-64/dl-trampoline.h | 225 - sysdeps/s390/s390-64/memchr.S | 40 - sysdeps/s390/s390-64/memcmp.S | 64 - sysdeps/s390/s390-64/memcpy.S | 88 - sysdeps/s390/s390-64/memset.S | 64 - sysdeps/s390/s390-64/multiarch/Makefile | 4 - sysdeps/s390/s390-64/multiarch/memchr.c | 21 - sysdeps/s390/s390-64/multiarch/memcmp-s390x.S | 104 - sysdeps/s390/s390-64/multiarch/memcmp.c | 27 - sysdeps/s390/s390-64/multiarch/memcpy-s390x.S | 122 - sysdeps/s390/s390-64/multiarch/memcpy.c | 27 - sysdeps/s390/s390-64/multiarch/memset-s390x.S | 112 - sysdeps/s390/s390-64/multiarch/memset.c | 26 - sysdeps/s390/s390-64/multiarch/strcmp.c | 21 - sysdeps/s390/s390-64/multiarch/strcpy.c | 21 - sysdeps/s390/s390-64/multiarch/strncpy.c | 21 - sysdeps/s390/s390-64/s390x-mcount.S | 77 - sysdeps/s390/s390-64/setjmp.S | 118 - sysdeps/s390/s390-64/stackguard-macros.h | 18 - sysdeps/s390/s390-64/start.S | 100 - sysdeps/s390/s390-64/strcmp.S | 41 - sysdeps/s390/s390-64/strcpy.S | 35 - sysdeps/s390/s390-64/strncpy.S | 90 - sysdeps/s390/s390-64/sub_n.S | 60 - sysdeps/s390/s390-64/sysdep.h | 94 - sysdeps/s390/s390-64/tls-macros.h | 88 - sysdeps/s390/s390-64/tst-audit.h | 25 - sysdeps/s390/sotruss-lib.c | 62 - sysdeps/s390/stackinfo.h | 33 - sysdeps/s390/string_private.h | 20 - sysdeps/s390/utf16-utf32-z9.c | 603 - sysdeps/s390/utf8-utf16-z9.c | 825 -- sysdeps/s390/utf8-utf32-z9.c | 871 -- sysdeps/sh/Implies | 4 - sysdeps/sh/Makefile | 11 - sysdeps/sh/____longjmp_chk.S | 78 - sysdeps/sh/_mcount.S | 87 - sysdeps/sh/abort-instr.h | 3 - sysdeps/sh/backtrace.c | 1 - sysdeps/sh/bits/endian.h | 13 - sysdeps/sh/bits/fenv.h | 84 - sysdeps/sh/bits/huge_val.h | 54 - sysdeps/sh/bits/link.h | 69 - sysdeps/sh/bits/setjmp.h | 46 - sysdeps/sh/bsd-_setjmp.S | 51 - sysdeps/sh/bsd-setjmp.S | 50 - sysdeps/sh/configure | 5 - sysdeps/sh/configure.ac | 6 - sysdeps/sh/crti.S | 120 - sysdeps/sh/crtn.S | 53 - sysdeps/sh/dl-machine.h | 466 - sysdeps/sh/dl-tls.h | 28 - sysdeps/sh/dl-trampoline.S | 430 - sysdeps/sh/fpu_control.h | 76 - sysdeps/sh/gccframe.h | 21 - sysdeps/sh/gmp-mparam.h | 29 - sysdeps/sh/jmpbuf-offsets.h | 19 - sysdeps/sh/jmpbuf-unwind.h | 46 - sysdeps/sh/ldsodefs.h | 40 - sysdeps/sh/libc-tls.c | 32 - sysdeps/sh/libm-test-ulps | 417 - sysdeps/sh/libm-test-ulps-name | 1 - sysdeps/sh/linkmap.h | 5 - sysdeps/sh/machine-gmon.h | 30 - sysdeps/sh/math_private.h | 10 - sysdeps/sh/memcpy.S | 198 - sysdeps/sh/memset.S | 88 - sysdeps/sh/memusage.h | 20 - sysdeps/sh/nptl/bits/pthreadtypes-arch.h | 69 - sysdeps/sh/nptl/bits/semaphore.h | 35 - sysdeps/sh/nptl/pthread_spin_init.c | 19 - sysdeps/sh/nptl/pthread_spin_lock.c | 33 - sysdeps/sh/nptl/pthread_spin_trylock.S | 31 - sysdeps/sh/nptl/pthread_spin_unlock.S | 29 - sysdeps/sh/nptl/pthreaddef.h | 34 - sysdeps/sh/nptl/tcb-offsets.sym | 15 - sysdeps/sh/nptl/tls.h | 168 - sysdeps/sh/preconfigure | 6 - sysdeps/sh/s_fma.c | 5 - sysdeps/sh/s_fmaf.c | 5 - sysdeps/sh/sh3/__longjmp.S | 63 - sysdeps/sh/sh3/setjmp.S | 81 - sysdeps/sh/sh4/Makefile | 3 - sysdeps/sh/sh4/Versions | 5 - sysdeps/sh/sh4/__longjmp.S | 73 - sysdeps/sh/sh4/dl-trampoline.S | 4 - sysdeps/sh/sh4/fpu/fclrexcpt.c | 42 - sysdeps/sh/sh4/fpu/fedisblxcpt.c | 39 - sysdeps/sh/sh4/fpu/feenablxcpt.c | 38 - sysdeps/sh/sh4/fpu/fegetenv.c | 34 - sysdeps/sh/sh4/fpu/fegetexcept.c | 32 - sysdeps/sh/sh4/fpu/fegetmode.c | 27 - sysdeps/sh/sh4/fpu/fegetround.c | 35 - sysdeps/sh/sh4/fpu/feholdexcpt.c | 44 - sysdeps/sh/sh4/fpu/fesetenv.c | 36 - sysdeps/sh/sh4/fpu/fesetexcept.c | 32 - sysdeps/sh/sh4/fpu/fesetmode.c | 38 - sysdeps/sh/sh4/fpu/fesetround.c | 45 - sysdeps/sh/sh4/fpu/feupdateenv.c | 41 - sysdeps/sh/sh4/fpu/fgetexcptflg.c | 38 - sysdeps/sh/sh4/fpu/fraiseexcpt.c | 75 - sysdeps/sh/sh4/fpu/fsetexcptflg.c | 39 - sysdeps/sh/sh4/fpu/ftestexcept.c | 32 - sysdeps/sh/sh4/setjmp.S | 90 - sysdeps/sh/soft-fp/sfp-machine.h | 57 - sysdeps/sh/sotruss-lib.c | 50 - sysdeps/sh/stackguard-macros.h | 6 - sysdeps/sh/stackinfo.h | 33 - sysdeps/sh/start.S | 111 - sysdeps/sh/strlen.S | 83 - sysdeps/sh/sysdep.h | 75 - sysdeps/sh/tininess.h | 1 - sysdeps/sh/tls-macros.h | 143 - sysdeps/sh/tst-audit.h | 25 - sysdeps/sparc/Makefile | 24 - sysdeps/sparc/Subdirs | 1 - sysdeps/sparc/abort-instr.h | 2 - sysdeps/sparc/backtrace.c | 159 - sysdeps/sparc/bits/endian.h | 12 - sysdeps/sparc/bits/huge_vall.h | 47 - sysdeps/sparc/bits/hwcap.h | 50 - sysdeps/sparc/bits/link.h | 99 - sysdeps/sparc/bits/string.h | 31 - sysdeps/sparc/configure | 83 - sysdeps/sparc/configure.ac | 59 - sysdeps/sparc/crti.S | 93 - sysdeps/sparc/crtn.S | 45 - sysdeps/sparc/dl-dtprocnum.h | 21 - sysdeps/sparc/dl-procinfo.c | 64 - sysdeps/sparc/dl-procinfo.h | 79 - sysdeps/sparc/dl-sysdep.h | 23 - sysdeps/sparc/dl-tls.h | 28 - sysdeps/sparc/fpu/bits/fenv.h | 101 - sysdeps/sparc/fpu/bits/mathinline.h | 290 - sysdeps/sparc/fpu/fclrexcpt.c | 43 - sysdeps/sparc/fpu/fedisblxcpt.c | 35 - sysdeps/sparc/fpu/feenablxcpt.c | 35 - sysdeps/sparc/fpu/fegetenv.c | 38 - sysdeps/sparc/fpu/fegetexcept.c | 29 - sysdeps/sparc/fpu/fegetmode.c | 26 - sysdeps/sparc/fpu/fegetround.c | 32 - sysdeps/sparc/fpu/feholdexcpt.c | 37 - sysdeps/sparc/fpu/fenv_private.h | 182 - sysdeps/sparc/fpu/fesetenv.c | 55 - sysdeps/sparc/fpu/fesetexcept.c | 31 - sysdeps/sparc/fpu/fesetmode.c | 38 - sysdeps/sparc/fpu/fesetround.c | 39 - sysdeps/sparc/fpu/feupdateenv.c | 50 - sysdeps/sparc/fpu/fgetexcptflg.c | 41 - sysdeps/sparc/fpu/fpu_control.h | 72 - sysdeps/sparc/fpu/fraiseexcpt.c | 91 - sysdeps/sparc/fpu/fsetexcptflg.c | 44 - sysdeps/sparc/fpu/ftestexcept.c | 30 - sysdeps/sparc/fpu/libm-test-ulps | 2262 ---- sysdeps/sparc/fpu/libm-test-ulps-name | 1 - sysdeps/sparc/fpu/math_private.h | 7 - sysdeps/sparc/gccframe.h | 21 - sysdeps/sparc/ldsodefs.h | 55 - sysdeps/sparc/machine-gmon.h | 32 - sysdeps/sparc/mempcpy.S | 1 - sysdeps/sparc/memusage.h | 20 - sysdeps/sparc/nptl/Makefile | 8 - sysdeps/sparc/nptl/bits/pthreadtypes-arch.h | 79 - sysdeps/sparc/nptl/bits/semaphore.h | 40 - sysdeps/sparc/nptl/sparc-nptl.h | 33 - sysdeps/sparc/nptl/tcb-offsets.sym | 6 - sysdeps/sparc/nptl/tls.h | 168 - sysdeps/sparc/preconfigure | 24 - sysdeps/sparc/sparc-ifunc.h | 176 - sysdeps/sparc/sparc-mcount.S | 28 - sysdeps/sparc/sparc32/Implies | 6 - sysdeps/sparc/sparc32/Makefile | 55 - sysdeps/sparc/sparc32/Versions | 10 - sysdeps/sparc/sparc32/__longjmp.S | 93 - sysdeps/sparc/sparc32/add_n.S | 237 - sysdeps/sparc/sparc32/addmul_1.S | 146 - sysdeps/sparc/sparc32/alloca.S | 28 - sysdeps/sparc/sparc32/atomic-machine.h | 363 - sysdeps/sparc/sparc32/backtrace.h | 7 - sysdeps/sparc/sparc32/bits/setjmp.h | 26 - sysdeps/sparc/sparc32/bits/wordsize.h | 11 - sysdeps/sparc/sparc32/bsd-_setjmp.S | 1 - sysdeps/sparc/sparc32/bsd-setjmp.S | 1 - sysdeps/sparc/sparc32/bzero.c | 1 - sysdeps/sparc/sparc32/divrem.m4 | 232 - sysdeps/sparc/sparc32/dl-irel.h | 62 - sysdeps/sparc/sparc32/dl-machine.h | 568 - sysdeps/sparc/sparc32/dl-plt.h | 100 - sysdeps/sparc/sparc32/dl-trampoline.S | 187 - sysdeps/sparc/sparc32/dotmul.S | 127 - sysdeps/sparc/sparc32/e_sqrt.c | 33 - sysdeps/sparc/sparc32/fpu/e_sqrtl.c | 30 - sysdeps/sparc/sparc32/fpu/s_copysign.S | 31 - sysdeps/sparc/sparc32/fpu/s_copysignf.S | 31 - sysdeps/sparc/sparc32/fpu/s_fabs.S | 28 - sysdeps/sparc/sparc32/fpu/s_fabsf.S | 28 - sysdeps/sparc/sparc32/fpu/s_fabsl.c | 8 - sysdeps/sparc/sparc32/fpu/s_fma.c | 2 - sysdeps/sparc/sparc32/fpu/s_signbit.S | 30 - sysdeps/sparc/sparc32/fpu/s_signbitf.S | 1 - sysdeps/sparc/sparc32/fpu/s_signbitl.S | 32 - sysdeps/sparc/sparc32/fpu/w_sqrt_compat.S | 53 - sysdeps/sparc/sparc32/fpu/w_sqrtf_compat.S | 51 - sysdeps/sparc/sparc32/ieee754.h | 170 - sysdeps/sparc/sparc32/jmpbuf-offsets.h | 21 - sysdeps/sparc/sparc32/jmpbuf-unwind.h | 47 - sysdeps/sparc/sparc32/lll_timedlock_wait.c | 1 - sysdeps/sparc/sparc32/lll_timedwait_tid.c | 1 - sysdeps/sparc/sparc32/lowlevellock.c | 131 - sysdeps/sparc/sparc32/lshift.S | 96 - sysdeps/sparc/sparc32/memchr.S | 142 - sysdeps/sparc/sparc32/memcpy.S | 653 -- sysdeps/sparc/sparc32/memset.S | 154 - sysdeps/sparc/sparc32/mul_1.S | 198 - sysdeps/sparc/sparc32/pthread_barrier_wait.c | 1 - sysdeps/sparc/sparc32/pthread_spin_lock.S | 32 - sysdeps/sparc/sparc32/pthread_spin_trylock.S | 29 - sysdeps/sparc/sparc32/pthreaddef.h | 33 - sysdeps/sparc/sparc32/rem.S | 363 - sysdeps/sparc/sparc32/rshift.S | 93 - sysdeps/sparc/sparc32/sdiv.S | 363 - sysdeps/sparc/sparc32/sem_post.c | 82 - sysdeps/sparc/sparc32/sem_waitcommon.c | 146 - sysdeps/sparc/sparc32/setjmp.S | 59 - sysdeps/sparc/sparc32/soft-fp/Makefile | 29 - sysdeps/sparc/sparc32/soft-fp/Versions | 8 - sysdeps/sparc/sparc32/soft-fp/q_add.c | 38 - sysdeps/sparc/sparc32/soft-fp/q_cmp.c | 38 - sysdeps/sparc/sparc32/soft-fp/q_cmpe.c | 39 - sysdeps/sparc/sparc32/soft-fp/q_div.c | 38 - sysdeps/sparc/sparc32/soft-fp/q_dtoq.c | 43 - sysdeps/sparc/sparc32/soft-fp/q_feq.c | 37 - sysdeps/sparc/sparc32/soft-fp/q_fge.c | 37 - sysdeps/sparc/sparc32/soft-fp/q_fgt.c | 37 - sysdeps/sparc/sparc32/soft-fp/q_fle.c | 37 - sysdeps/sparc/sparc32/soft-fp/q_flt.c | 37 - sysdeps/sparc/sparc32/soft-fp/q_fne.c | 37 - sysdeps/sparc/sparc32/soft-fp/q_itoq.c | 35 - sysdeps/sparc/sparc32/soft-fp/q_lltoq.c | 35 - sysdeps/sparc/sparc32/soft-fp/q_mul.c | 38 - sysdeps/sparc/sparc32/soft-fp/q_neg.c | 48 - sysdeps/sparc/sparc32/soft-fp/q_qtod.c | 44 - sysdeps/sparc/sparc32/soft-fp/q_qtoi.c | 37 - sysdeps/sparc/sparc32/soft-fp/q_qtoll.c | 37 - sysdeps/sparc/sparc32/soft-fp/q_qtos.c | 44 - sysdeps/sparc/sparc32/soft-fp/q_qtou.c | 37 - sysdeps/sparc/sparc32/soft-fp/q_qtoull.c | 37 - sysdeps/sparc/sparc32/soft-fp/q_sqrt.c | 37 - sysdeps/sparc/sparc32/soft-fp/q_stoq.c | 42 - sysdeps/sparc/sparc32/soft-fp/q_sub.c | 38 - sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c | 35 - sysdeps/sparc/sparc32/soft-fp/q_util.c | 62 - sysdeps/sparc/sparc32/soft-fp/q_utoq.c | 35 - sysdeps/sparc/sparc32/soft-fp/sfp-machine.h | 218 - sysdeps/sparc/sparc32/sparcv8/Makefile | 1 - sysdeps/sparc/sparc32/sparcv8/addmul_1.S | 118 - sysdeps/sparc/sparc32/sparcv8/dotmul.S | 13 - sysdeps/sparc/sparc32/sparcv8/mul_1.S | 102 - sysdeps/sparc/sparc32/sparcv8/rem.S | 21 - sysdeps/sparc/sparc32/sparcv8/sdiv.S | 20 - sysdeps/sparc/sparc32/sparcv8/submul_1.S | 57 - sysdeps/sparc/sparc32/sparcv8/udiv.S | 16 - sysdeps/sparc/sparc32/sparcv8/umul.S | 13 - sysdeps/sparc/sparc32/sparcv8/urem.S | 18 - sysdeps/sparc/sparc32/sparcv9/Makefile | 22 - sysdeps/sparc/sparc32/sparcv9/addmul_1.S | 81 - sysdeps/sparc/sparc32/sparcv9/atomic-machine.h | 108 - sysdeps/sparc/sparc32/sparcv9/backtrace.h | 7 - sysdeps/sparc/sparc32/sparcv9/bzero.c | 1 - sysdeps/sparc/sparc32/sparcv9/cpu_relax.S | 1 - sysdeps/sparc/sparc32/sparcv9/dotmul.S | 17 - .../sparc/sparc32/sparcv9/fpu/multiarch/Makefile | 14 - .../sparcv9/fpu/multiarch/s_copysign-vis3.S | 30 - .../sparc32/sparcv9/fpu/multiarch/s_copysign.S | 12 - .../sparcv9/fpu/multiarch/s_copysignf-vis3.S | 29 - .../sparc32/sparcv9/fpu/multiarch/s_copysignf.S | 12 - .../sparc32/sparcv9/fpu/multiarch/s_fabs-vis3.S | 26 - .../sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S | 12 - .../sparc32/sparcv9/fpu/multiarch/s_fabsf-vis3.S | 26 - .../sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf.S | 12 - .../sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c | 25 - .../sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c | 33 - .../sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.c | 24 - .../sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.c | 34 - .../sparc32/sparcv9/fpu/multiarch/s_fma-vis3.S | 31 - .../sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c | 14 - .../sparc32/sparcv9/fpu/multiarch/s_fmaf-vis3.S | 28 - .../sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf.c | 14 - .../sparc32/sparcv9/fpu/multiarch/s_llrint-vis3.S | 58 - .../sparc/sparc32/sparcv9/fpu/multiarch/s_llrint.S | 24 - .../sparc32/sparcv9/fpu/multiarch/s_llrintf-vis3.S | 54 - .../sparc32/sparcv9/fpu/multiarch/s_llrintf.S | 17 - .../sparcv9/fpu/multiarch/s_nearbyint-vis3.S | 66 - .../sparc32/sparcv9/fpu/multiarch/s_nearbyint.S | 19 - .../sparcv9/fpu/multiarch/s_nearbyintf-vis3.S | 62 - .../sparc32/sparcv9/fpu/multiarch/s_nearbyintf.S | 12 - .../sparc32/sparcv9/fpu/multiarch/s_rint-vis3.S | 55 - .../sparc/sparc32/sparcv9/fpu/multiarch/s_rint.S | 19 - .../sparc32/sparcv9/fpu/multiarch/s_rintf-vis3.S | 51 - .../sparc/sparc32/sparcv9/fpu/multiarch/s_rintf.S | 12 - .../sparcv9/fpu/multiarch/w_sqrt_compat-vis3.S | 49 - .../sparc32/sparcv9/fpu/multiarch/w_sqrt_compat.S | 12 - .../sparcv9/fpu/multiarch/w_sqrtf_compat-vis3.S | 47 - .../sparc32/sparcv9/fpu/multiarch/w_sqrtf_compat.S | 12 - sysdeps/sparc/sparc32/sparcv9/fpu/s_fabs.S | 28 - sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S | 40 - sysdeps/sparc/sparc32/sparcv9/fpu/s_llrint.S | 72 - sysdeps/sparc/sparc32/sparcv9/fpu/s_llrintf.S | 62 - sysdeps/sparc/sparc32/sparcv9/fpu/s_lrintf.S | 62 - sysdeps/sparc/sparc32/sparcv9/fpu/s_nearbyint.S | 73 - sysdeps/sparc/sparc32/sparcv9/fpu/s_nearbyintf.S | 65 - sysdeps/sparc/sparc32/sparcv9/fpu/s_rint.S | 69 - sysdeps/sparc/sparc32/sparcv9/fpu/s_rintf.S | 59 - sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt_compat.S | 51 - sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf_compat.S | 50 - sysdeps/sparc/sparc32/sparcv9/hp-timing.h | 36 - sysdeps/sparc/sparc32/sparcv9/memchr.S | 4 - sysdeps/sparc/sparc32/sparcv9/memcmp.S | 4 - sysdeps/sparc/sparc32/sparcv9/memcpy.S | 4 - sysdeps/sparc/sparc32/sparcv9/memset.S | 4 - sysdeps/sparc/sparc32/sparcv9/mul_1.S | 70 - sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile | 12 - .../sparc32/sparcv9/multiarch/ifunc-impl-list.c | 1 - .../sparc/sparc32/sparcv9/multiarch/md5-block.c | 1 - sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S | 1 - .../sparc32/sparcv9/multiarch/memcpy-niagara1.S | 2 - .../sparc32/sparcv9/multiarch/memcpy-niagara2.S | 2 - .../sparc32/sparcv9/multiarch/memcpy-niagara4.S | 1 - .../sparc32/sparcv9/multiarch/memcpy-ultra3.S | 2 - sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy.S | 4 - .../sparc32/sparcv9/multiarch/memset-niagara1.S | 2 - .../sparc32/sparcv9/multiarch/memset-niagara4.S | 1 - sysdeps/sparc/sparc32/sparcv9/multiarch/memset.S | 4 - .../sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c | 1 - .../sparc/sparc32/sparcv9/multiarch/rtld-memset.c | 1 - .../sparc/sparc32/sparcv9/multiarch/sha256-block.c | 1 - .../sparc/sparc32/sparcv9/multiarch/sha256-crop.S | 1 - .../sparc/sparc32/sparcv9/multiarch/sha512-block.c | 1 - .../sparc/sparc32/sparcv9/multiarch/sha512-crop.S | 1 - .../sparc/sparc32/sparcv9/pthread_barrier_wait.c | 1 - sysdeps/sparc/sparc32/sparcv9/pthread_spin_init.c | 1 - sysdeps/sparc/sparc32/sparcv9/pthread_spin_lock.S | 1 - .../sparc/sparc32/sparcv9/pthread_spin_trylock.S | 1 - .../sparc/sparc32/sparcv9/pthread_spin_unlock.S | 1 - sysdeps/sparc/sparc32/sparcv9/rawmemchr.S | 4 - sysdeps/sparc/sparc32/sparcv9/rem.S | 22 - sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c | 1 - sysdeps/sparc/sparc32/sparcv9/rtld-memset.c | 1 - sysdeps/sparc/sparc32/sparcv9/sdiv.S | 20 - sysdeps/sparc/sparc32/sparcv9/sem_post.c | 1 - sysdeps/sparc/sparc32/sparcv9/sem_waitcommon.c | 1 - sysdeps/sparc/sparc32/sparcv9/stpcpy.S | 4 - sysdeps/sparc/sparc32/sparcv9/stpncpy.S | 4 - sysdeps/sparc/sparc32/sparcv9/strcat.S | 4 - sysdeps/sparc/sparc32/sparcv9/strchr.S | 4 - sysdeps/sparc/sparc32/sparcv9/strcmp.S | 4 - sysdeps/sparc/sparc32/sparcv9/strcpy.S | 4 - sysdeps/sparc/sparc32/sparcv9/strcspn.S | 4 - sysdeps/sparc/sparc32/sparcv9/strlen.S | 1 - sysdeps/sparc/sparc32/sparcv9/strncmp.S | 4 - sysdeps/sparc/sparc32/sparcv9/strncpy.S | 4 - sysdeps/sparc/sparc32/sparcv9/strpbrk.S | 4 - sysdeps/sparc/sparc32/sparcv9/strrchr.c | 1 - sysdeps/sparc/sparc32/sparcv9/strspn.S | 4 - sysdeps/sparc/sparc32/sparcv9/submul_1.S | 82 - sysdeps/sparc/sparc32/sparcv9/udiv.S | 18 - sysdeps/sparc/sparc32/sparcv9/umul.S | 17 - sysdeps/sparc/sparc32/sparcv9/urem.S | 19 - sysdeps/sparc/sparc32/stackguard-macros.h | 7 - sysdeps/sparc/sparc32/start.S | 99 - sysdeps/sparc/sparc32/stpcpy.S | 166 - sysdeps/sparc/sparc32/strcat.S | 352 - sysdeps/sparc/sparc32/strchr.S | 284 - sysdeps/sparc/sparc32/strcmp.S | 259 - sysdeps/sparc/sparc32/strcpy.S | 276 - sysdeps/sparc/sparc32/strlen.S | 75 - sysdeps/sparc/sparc32/strrchr.c | 1 - sysdeps/sparc/sparc32/sub_n.S | 328 - sysdeps/sparc/sparc32/submul_1.S | 146 - sysdeps/sparc/sparc32/tls-macros.h | 66 - sysdeps/sparc/sparc32/tst-audit.h | 25 - sysdeps/sparc/sparc32/udiv.S | 347 - sysdeps/sparc/sparc32/umul.S | 155 - sysdeps/sparc/sparc32/urem.S | 346 - sysdeps/sparc/sparc64/Implies | 7 - sysdeps/sparc/sparc64/Makefile | 21 - sysdeps/sparc/sparc64/Versions | 14 - sysdeps/sparc/sparc64/add_n.S | 57 - sysdeps/sparc/sparc64/addmul_1.S | 83 - sysdeps/sparc/sparc64/align-cpy.S | 84 - sysdeps/sparc/sparc64/atomic-machine.h | 129 - sysdeps/sparc/sparc64/backtrace.h | 7 - sysdeps/sparc/sparc64/bits/wordsize.h | 11 - sysdeps/sparc/sparc64/bzero.c | 1 - sysdeps/sparc/sparc64/cpu_relax.S | 67 - sysdeps/sparc/sparc64/dl-irel.h | 65 - sysdeps/sparc/sparc64/dl-machine.h | 685 -- sysdeps/sparc/sparc64/dl-plt.h | 167 - sysdeps/sparc/sparc64/dl-trampoline.S | 325 - sysdeps/sparc/sparc64/fpu/e_sqrtl.c | 31 - sysdeps/sparc/sparc64/fpu/multiarch/Makefile | 22 - sysdeps/sparc/sparc64/fpu/multiarch/s_ceil-vis3.c | 23 - sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.c | 32 - sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf-vis3.c | 23 - sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.c | 32 - .../sparc/sparc64/fpu/multiarch/s_finite-vis3.S | 28 - sysdeps/sparc/sparc64/fpu/multiarch/s_finite.S | 15 - .../sparc/sparc64/fpu/multiarch/s_finitef-vis3.S | 28 - sysdeps/sparc/sparc64/fpu/multiarch/s_finitef.S | 15 - sysdeps/sparc/sparc64/fpu/multiarch/s_floor-vis3.c | 23 - sysdeps/sparc/sparc64/fpu/multiarch/s_floor.c | 32 - .../sparc/sparc64/fpu/multiarch/s_floorf-vis3.c | 23 - sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.c | 32 - sysdeps/sparc/sparc64/fpu/multiarch/s_fma-vis3.S | 25 - sysdeps/sparc/sparc64/fpu/multiarch/s_fma.c | 14 - sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf-vis3.S | 25 - sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf.c | 14 - sysdeps/sparc/sparc64/fpu/multiarch/s_isinf-vis3.S | 31 - sysdeps/sparc/sparc64/fpu/multiarch/s_isinf.S | 15 - .../sparc/sparc64/fpu/multiarch/s_isinff-vis3.S | 30 - sysdeps/sparc/sparc64/fpu/multiarch/s_isinff.S | 15 - sysdeps/sparc/sparc64/fpu/multiarch/s_isnan-vis3.S | 30 - sysdeps/sparc/sparc64/fpu/multiarch/s_isnan.S | 15 - .../sparc/sparc64/fpu/multiarch/s_isnanf-vis3.S | 29 - sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf.S | 15 - sysdeps/sparc/sparc64/fpu/multiarch/s_lrint-vis3.S | 52 - sysdeps/sparc/sparc64/fpu/multiarch/s_lrint.S | 17 - .../sparc/sparc64/fpu/multiarch/s_lrintf-vis3.S | 51 - sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf.S | 17 - .../sparc/sparc64/fpu/multiarch/s_nearbyint-vis3.S | 62 - sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint.S | 12 - .../sparc64/fpu/multiarch/s_nearbyintf-vis3.S | 61 - sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf.S | 12 - sysdeps/sparc/sparc64/fpu/multiarch/s_rint-vis3.S | 50 - sysdeps/sparc/sparc64/fpu/multiarch/s_rint.S | 12 - sysdeps/sparc/sparc64/fpu/multiarch/s_rintf-vis3.S | 49 - sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.S | 12 - .../sparc/sparc64/fpu/multiarch/s_signbit-vis3.S | 25 - sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S | 20 - .../sparc/sparc64/fpu/multiarch/s_signbitf-vis3.S | 25 - sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S | 10 - sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.c | 23 - sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.c | 32 - .../sparc/sparc64/fpu/multiarch/s_truncf-vis3.c | 23 - sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.c | 32 - sysdeps/sparc/sparc64/fpu/s_copysign.S | 30 - sysdeps/sparc/sparc64/fpu/s_copysignf.S | 30 - sysdeps/sparc/sparc64/fpu/s_fabs.c | 5 - sysdeps/sparc/sparc64/fpu/s_fabsf.c | 5 - sysdeps/sparc/sparc64/fpu/s_fabsl.c | 5 - sysdeps/sparc/sparc64/fpu/s_finite.S | 31 - sysdeps/sparc/sparc64/fpu/s_finitef.S | 31 - sysdeps/sparc/sparc64/fpu/s_fma.c | 2 - sysdeps/sparc/sparc64/fpu/s_isinf.S | 34 - sysdeps/sparc/sparc64/fpu/s_isinff.S | 33 - sysdeps/sparc/sparc64/fpu/s_isnan.S | 33 - sysdeps/sparc/sparc64/fpu/s_isnanf.S | 32 - sysdeps/sparc/sparc64/fpu/s_llrint.S | 1 - sysdeps/sparc/sparc64/fpu/s_llrintf.S | 1 - sysdeps/sparc/sparc64/fpu/s_lrint.S | 63 - sysdeps/sparc/sparc64/fpu/s_lrintf.S | 62 - sysdeps/sparc/sparc64/fpu/s_nearbyint.S | 64 - sysdeps/sparc/sparc64/fpu/s_nearbyintf.S | 63 - sysdeps/sparc/sparc64/fpu/s_rint.S | 57 - sysdeps/sparc/sparc64/fpu/s_rintf.S | 56 - sysdeps/sparc/sparc64/fpu/s_signbit.S | 32 - sysdeps/sparc/sparc64/fpu/s_signbitf.S | 26 - sysdeps/sparc/sparc64/fpu/s_signbitl.S | 1 - sysdeps/sparc/sparc64/fpu/w_sqrt_compat.S | 48 - sysdeps/sparc/sparc64/fpu/w_sqrtf_compat.S | 48 - sysdeps/sparc/sparc64/hp-timing.h | 33 - sysdeps/sparc/sparc64/jmpbuf-unwind.h | 37 - sysdeps/sparc/sparc64/lshift.S | 95 - sysdeps/sparc/sparc64/memchr.S | 260 - sysdeps/sparc/sparc64/memcmp.S | 142 - sysdeps/sparc/sparc64/memcpy.S | 580 - sysdeps/sparc/sparc64/memset.S | 314 - sysdeps/sparc/sparc64/mul_1.S | 82 - sysdeps/sparc/sparc64/multiarch/Makefile | 21 - sysdeps/sparc/sparc64/multiarch/add_n-vis3.S | 67 - sysdeps/sparc/sparc64/multiarch/add_n.S | 56 - sysdeps/sparc/sparc64/multiarch/addmul_1-vis3.S | 87 - sysdeps/sparc/sparc64/multiarch/addmul_1.S | 56 - sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c | 75 - sysdeps/sparc/sparc64/multiarch/md5-block.c | 29 - sysdeps/sparc/sparc64/multiarch/md5-crop.S | 110 - sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S | 347 - sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S | 498 - sysdeps/sparc/sparc64/multiarch/memcpy-niagara4.S | 332 - sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S | 325 - sysdeps/sparc/sparc64/multiarch/memcpy.S | 167 - sysdeps/sparc/sparc64/multiarch/memset-niagara1.S | 177 - sysdeps/sparc/sparc64/multiarch/memset-niagara4.S | 124 - sysdeps/sparc/sparc64/multiarch/memset.S | 124 - sysdeps/sparc/sparc64/multiarch/mul_1-vis3.S | 73 - sysdeps/sparc/sparc64/multiarch/mul_1.S | 56 - sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c | 1 - sysdeps/sparc/sparc64/multiarch/rtld-memset.c | 1 - sysdeps/sparc/sparc64/multiarch/sha256-block.c | 32 - sysdeps/sparc/sparc64/multiarch/sha256-crop.S | 101 - sysdeps/sparc/sparc64/multiarch/sha512-block.c | 32 - sysdeps/sparc/sparc64/multiarch/sha512-crop.S | 131 - sysdeps/sparc/sparc64/multiarch/sub_n-vis3.S | 71 - sysdeps/sparc/sparc64/multiarch/sub_n.S | 56 - sysdeps/sparc/sparc64/multiarch/submul_1-vis3.S | 87 - sysdeps/sparc/sparc64/multiarch/submul_1.S | 56 - sysdeps/sparc/sparc64/pthread_spin_init.c | 1 - sysdeps/sparc/sparc64/pthread_spin_lock.S | 31 - sysdeps/sparc/sparc64/pthread_spin_trylock.S | 27 - sysdeps/sparc/sparc64/pthread_spin_unlock.S | 28 - sysdeps/sparc/sparc64/pthreaddef.h | 33 - sysdeps/sparc/sparc64/rawmemchr.S | 178 - sysdeps/sparc/sparc64/rshift.S | 92 - sysdeps/sparc/sparc64/rtld-memcpy.c | 3 - sysdeps/sparc/sparc64/rtld-memset.c | 1 - sysdeps/sparc/sparc64/soft-fp/Makefile | 33 - sysdeps/sparc/sparc64/soft-fp/Versions | 8 - sysdeps/sparc/sparc64/soft-fp/e_ilogbl.c | 79 - sysdeps/sparc/sparc64/soft-fp/qp_add.c | 44 - sysdeps/sparc/sparc64/soft-fp/qp_cmp.c | 48 - sysdeps/sparc/sparc64/soft-fp/qp_cmpe.c | 49 - sysdeps/sparc/sparc64/soft-fp/qp_div.c | 44 - sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c | 45 - sysdeps/sparc/sparc64/soft-fp/qp_feq.c | 48 - sysdeps/sparc/sparc64/soft-fp/qp_fge.c | 48 - sysdeps/sparc/sparc64/soft-fp/qp_fgt.c | 48 - sysdeps/sparc/sparc64/soft-fp/qp_fle.c | 48 - sysdeps/sparc/sparc64/soft-fp/qp_flt.c | 48 - sysdeps/sparc/sparc64/soft-fp/qp_fne.c | 49 - sysdeps/sparc/sparc64/soft-fp/qp_itoq.c | 34 - sysdeps/sparc/sparc64/soft-fp/qp_mul.c | 49 - sysdeps/sparc/sparc64/soft-fp/qp_neg.S | 30 - sysdeps/sparc/sparc64/soft-fp/qp_qtod.c | 48 - sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c | 46 - sysdeps/sparc/sparc64/soft-fp/qp_qtos.c | 49 - sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c | 46 - sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c | 46 - sysdeps/sparc/sparc64/soft-fp/qp_qtox.c | 46 - sysdeps/sparc/sparc64/soft-fp/qp_sqrt.c | 41 - sysdeps/sparc/sparc64/soft-fp/qp_stoq.c | 45 - sysdeps/sparc/sparc64/soft-fp/qp_sub.c | 44 - sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c | 34 - sysdeps/sparc/sparc64/soft-fp/qp_util.c | 60 - sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c | 34 - sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c | 34 - sysdeps/sparc/sparc64/soft-fp/s_frexpl.c | 51 - sysdeps/sparc/sparc64/soft-fp/s_scalblnl.c | 52 - sysdeps/sparc/sparc64/soft-fp/s_scalbnl.c | 52 - sysdeps/sparc/sparc64/soft-fp/sfp-machine.h | 147 - sysdeps/sparc/sparc64/stackguard-macros.h | 7 - sysdeps/sparc/sparc64/start.S | 100 - sysdeps/sparc/sparc64/stpcpy.S | 274 - sysdeps/sparc/sparc64/stpncpy.S | 424 - sysdeps/sparc/sparc64/strcat.S | 339 - sysdeps/sparc/sparc64/strchr.S | 482 - sysdeps/sparc/sparc64/strcmp.S | 232 - sysdeps/sparc/sparc64/strcpy.S | 244 - sysdeps/sparc/sparc64/strcspn.S | 212 - sysdeps/sparc/sparc64/strlen.S | 85 - sysdeps/sparc/sparc64/strncmp.S | 363 - sysdeps/sparc/sparc64/strncpy.S | 396 - sysdeps/sparc/sparc64/strpbrk.S | 230 - sysdeps/sparc/sparc64/strrchr.c | 1 - sysdeps/sparc/sparc64/strspn.S | 212 - sysdeps/sparc/sparc64/sub_n.S | 54 - sysdeps/sparc/sparc64/submul_1.S | 82 - sysdeps/sparc/sparc64/tls-macros.h | 65 - sysdeps/sparc/sparc64/tst-audit.h | 25 - sysdeps/sparc/stackinfo.h | 33 - sysdeps/sparc/sys/trap.h | 7 - sysdeps/sparc/sysdep.h | 82 - sysdeps/tile/Implies | 2 - sysdeps/tile/Makefile | 13 - sysdeps/tile/Versions | 6 - sysdeps/tile/__longjmp.S | 57 - sysdeps/tile/__tls_get_addr.S | 152 - sysdeps/tile/_mcount.S | 87 - sysdeps/tile/abort-instr.h | 2 - sysdeps/tile/atomic-machine.h | 81 - sysdeps/tile/backtrace.c | 1 - sysdeps/tile/bits/byteswap.h | 37 - sysdeps/tile/bits/endian.h | 11 - sysdeps/tile/bits/fenv.h | 53 - sysdeps/tile/bits/link.h | 57 - sysdeps/tile/bits/mathinline.h | 44 - sysdeps/tile/bits/setjmp.h | 36 - sysdeps/tile/bsd-_setjmp.S | 1 - sysdeps/tile/bsd-setjmp.S | 1 - sysdeps/tile/bzero.S | 30 - sysdeps/tile/configure | 7 - sysdeps/tile/configure.ac | 6 - sysdeps/tile/crti.S | 124 - sysdeps/tile/crtn.S | 55 - sysdeps/tile/dl-lookupcfg.h | 27 - sysdeps/tile/dl-machine.h | 919 -- sysdeps/tile/dl-runtime.c | 159 - sysdeps/tile/dl-start.S | 114 - sysdeps/tile/dl-tls.c | 27 - sysdeps/tile/dl-tls.h | 42 - sysdeps/tile/dl-trampoline.S | 193 - sysdeps/tile/ffs.c | 36 - sysdeps/tile/ffsll.c | 32 - sysdeps/tile/gccframe.h | 21 - sysdeps/tile/jmpbuf-offsets.h | 62 - sysdeps/tile/jmpbuf-unwind.h | 48 - sysdeps/tile/ldsodefs.h | 40 - sysdeps/tile/libm-test-ulps | 394 - sysdeps/tile/libm-test-ulps-name | 1 - sysdeps/tile/machine-gmon.h | 25 - sysdeps/tile/math-tests.h | 30 - sysdeps/tile/math_private.h | 44 - sysdeps/tile/memcmp.c | 357 - sysdeps/tile/memcopy.h | 33 - sysdeps/tile/nptl/Makefile | 20 - sysdeps/tile/nptl/bits/pthreadtypes-arch.h | 79 - sysdeps/tile/nptl/bits/semaphore.h | 41 - sysdeps/tile/nptl/pthread_spin_lock.c | 56 - sysdeps/tile/nptl/pthread_spin_trylock.c | 32 - sysdeps/tile/nptl/pthread_spin_unlock.c | 33 - sysdeps/tile/nptl/pthreaddef.h | 36 - sysdeps/tile/nptl/tcb-offsets.sym | 16 - sysdeps/tile/nptl/tls.h | 189 - sysdeps/tile/preconfigure | 12 - sysdeps/tile/s_fma.c | 1 - sysdeps/tile/s_fmaf.c | 1 - sysdeps/tile/setjmp.S | 47 - sysdeps/tile/sfp-machine.h | 99 - sysdeps/tile/sotruss-lib.c | 49 - sysdeps/tile/stackguard-macros.h | 20 - sysdeps/tile/stackinfo.h | 48 - sysdeps/tile/start.S | 203 - sysdeps/tile/sysdep.h | 110 - sysdeps/tile/tilegx/Implies | 1 - sysdeps/tile/tilegx/Makefile | 35 - sysdeps/tile/tilegx/atomic-machine.h | 61 - sysdeps/tile/tilegx/bits/wordsize.h | 11 - sysdeps/tile/tilegx/memchr.c | 77 - sysdeps/tile/tilegx/memcpy.c | 272 - sysdeps/tile/tilegx/memset.c | 151 - sysdeps/tile/tilegx/memusage.h | 31 - sysdeps/tile/tilegx/rawmemchr.c | 45 - sysdeps/tile/tilegx/strcasestr.c | 53 - sysdeps/tile/tilegx/strchr.c | 67 - sysdeps/tile/tilegx/strchrnul.c | 64 - sysdeps/tile/tilegx/string-endian.h | 58 - sysdeps/tile/tilegx/strlen.c | 39 - sysdeps/tile/tilegx/strnlen.c | 57 - sysdeps/tile/tilegx/strrchr.c | 68 - sysdeps/tile/tilegx/strstr.c | 270 - sysdeps/tile/tilegx/tilegx32/Implies | 3 - sysdeps/tile/tilegx/tilegx64/Implies | 3 - sysdeps/tile/tilepro/Implies | 2 - sysdeps/tile/tilepro/atomic-machine.h | 99 - sysdeps/tile/tilepro/bits/wordsize.h | 6 - sysdeps/tile/tilepro/memchr.c | 76 - sysdeps/tile/tilepro/memcpy.S | 397 - sysdeps/tile/tilepro/memset.c | 151 - sysdeps/tile/tilepro/memusage.h | 29 - sysdeps/tile/tilepro/rawmemchr.c | 45 - sysdeps/tile/tilepro/strchr.c | 68 - sysdeps/tile/tilepro/strchrnul.c | 65 - sysdeps/tile/tilepro/strlen.c | 39 - sysdeps/tile/tilepro/strrchr.c | 73 - sysdeps/tile/tls-macros.h | 84 - sysdeps/tile/tst-audit.h | 23 - sysdeps/tile/wordcopy.c | 437 - sysdeps/unix/Implies | 1 - sysdeps/unix/Makefile | 112 - sysdeps/unix/alpha/Makefile | 4 - sysdeps/unix/alpha/getegid.S | 26 - sysdeps/unix/alpha/geteuid.S | 26 - sysdeps/unix/alpha/getppid.S | 26 - sysdeps/unix/alpha/pipe.S | 31 - sysdeps/unix/alpha/rt-sysdep.S | 1 - sysdeps/unix/alpha/sysdep.S | 65 - sysdeps/unix/alpha/sysdep.h | 382 - sysdeps/unix/arm/sysdep.S | 63 - sysdeps/unix/arm/sysdep.h | 29 - sysdeps/unix/bsd/Implies | 2 - sysdeps/unix/bsd/Makefile | 3 - sysdeps/unix/bsd/Versions | 6 - sysdeps/unix/bsd/bits/signum.h | 73 - sysdeps/unix/bsd/bits/sockaddr.h | 45 - sysdeps/unix/bsd/bsdtty.h | 218 - sysdeps/unix/bsd/cmsg_nxthdr.c | 2 - sysdeps/unix/bsd/ftime.c | 40 - sysdeps/unix/bsd/getpt.c | 91 - sysdeps/unix/bsd/gtty.c | 26 - sysdeps/unix/bsd/sigblock.c | 1 - sysdeps/unix/bsd/sigsetmask.c | 1 - sysdeps/unix/bsd/stty.c | 26 - sysdeps/unix/bsd/syscalls.list | 15 - sysdeps/unix/bsd/tcdrain.c | 27 - sysdeps/unix/bsd/tcflow.c | 55 - sysdeps/unix/bsd/tcflush.c | 48 - sysdeps/unix/bsd/tcgetattr.c | 38 - sysdeps/unix/bsd/tcgetpgrp.c | 33 - sysdeps/unix/bsd/tcsendbrk.c | 53 - sysdeps/unix/bsd/tcsetattr.c | 59 - sysdeps/unix/bsd/tcsetpgrp.c | 28 - sysdeps/unix/bsd/ualarm.c | 40 - sysdeps/unix/bsd/unlockpt.c | 36 - sysdeps/unix/bsd/wait.c | 32 - sysdeps/unix/bsd/wait3.c | 33 - sysdeps/unix/bsd/waitpid.c | 42 - sysdeps/unix/clock_gettime.c | 136 - sysdeps/unix/clock_nanosleep.c | 101 - sysdeps/unix/clock_settime.c | 126 - sysdeps/unix/confstr.h | 1 - sysdeps/unix/get_child_max.c | 36 - sysdeps/unix/getlogin.c | 81 - sysdeps/unix/getlogin_r.c | 103 - sysdeps/unix/getpagesize.c | 39 - sysdeps/unix/grantpt.c | 260 - sysdeps/unix/i386/sysdep.S | 64 - sysdeps/unix/i386/sysdep.h | 35 - sysdeps/unix/ifreq.c | 79 - sysdeps/unix/inet/Subdirs | 8 - sysdeps/unix/make-syscalls.sh | 321 - sysdeps/unix/mips/entry.h | 5 - sysdeps/unix/mips/mips32/sysdep.h | 56 - sysdeps/unix/mips/mips64/n32/sysdep.h | 64 - sysdeps/unix/mips/mips64/n64/sysdep.h | 64 - sysdeps/unix/mips/pipe.S | 32 - sysdeps/unix/mips/rt-sysdep.S | 1 - sysdeps/unix/mips/sysdep.S | 100 - sysdeps/unix/mips/sysdep.h | 85 - sysdeps/unix/powerpc/sysdep.h | 24 - sysdeps/unix/s-proto-cancel.S | 5 - sysdeps/unix/s-proto.S | 4 - sysdeps/unix/setxid.h | 4 - sysdeps/unix/sh/sysdep.S | 116 - sysdeps/unix/sh/sysdep.h | 28 - sysdeps/unix/sockatmark.c | 28 - sysdeps/unix/stime.c | 39 - sysdeps/unix/syscall-template.S | 90 - sysdeps/unix/syscall.S | 29 - sysdeps/unix/syscalls.list | 100 - sysdeps/unix/sysdep.h | 132 - sysdeps/unix/sysv/linux/Implies | 9 - sysdeps/unix/sysv/linux/Makefile | 212 - sysdeps/unix/sysv/linux/Versions | 175 - sysdeps/unix/sysv/linux/_G_config.h | 59 - sysdeps/unix/sysv/linux/_exit.c | 42 - sysdeps/unix/sysv/linux/a.out.h | 138 - sysdeps/unix/sysv/linux/aarch64/Implies | 3 - sysdeps/unix/sysv/linux/aarch64/Makefile | 35 - sysdeps/unix/sysv/linux/aarch64/Versions | 12 - sysdeps/unix/sysv/linux/aarch64/__read_tp.S | 25 - sysdeps/unix/sysv/linux/aarch64/arch-fork.h | 28 - sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h | 61 - sysdeps/unix/sysv/linux/aarch64/bits/hwcap.h | 36 - sysdeps/unix/sysv/linux/aarch64/bits/ipc.h | 54 - sysdeps/unix/sysv/linux/aarch64/bits/local_lim.h | 101 - sysdeps/unix/sysv/linux/aarch64/bits/mman.h | 44 - sysdeps/unix/sysv/linux/aarch64/bits/sigstack.h | 32 - sysdeps/unix/sysv/linux/aarch64/c++-types.data | 67 - sysdeps/unix/sysv/linux/aarch64/clone.S | 92 - sysdeps/unix/sysv/linux/aarch64/configure | 17 - sysdeps/unix/sysv/linux/aarch64/configure.ac | 6 - sysdeps/unix/sysv/linux/aarch64/cpu-features.c | 37 - sysdeps/unix/sysv/linux/aarch64/cpu-features.h | 49 - sysdeps/unix/sysv/linux/aarch64/dl-cache.h | 56 - sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c | 75 - sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h | 86 - sysdeps/unix/sysv/linux/aarch64/dl-static.c | 84 - sysdeps/unix/sysv/linux/aarch64/getcontext.S | 109 - sysdeps/unix/sysv/linux/aarch64/init-first.c | 52 - sysdeps/unix/sysv/linux/aarch64/ioctl.S | 31 - sysdeps/unix/sysv/linux/aarch64/ipc_priv.h | 21 - .../unix/sysv/linux/aarch64/kernel_rt_sigframe.h | 25 - sysdeps/unix/sysv/linux/aarch64/ld.abilist | 10 - sysdeps/unix/sysv/linux/aarch64/ldconfig.h | 30 - sysdeps/unix/sysv/linux/aarch64/ldsodefs.h | 32 - .../sysv/linux/aarch64/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/aarch64/libanl.abilist | 5 - sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S | 19 - sysdeps/unix/sysv/linux/aarch64/libc-start.c | 28 - sysdeps/unix/sysv/linux/aarch64/libc-vdso.h | 33 - sysdeps/unix/sysv/linux/aarch64/libc.abilist | 2105 ---- sysdeps/unix/sysv/linux/aarch64/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/aarch64/libdl.abilist | 10 - sysdeps/unix/sysv/linux/aarch64/libm.abilist | 462 - sysdeps/unix/sysv/linux/aarch64/libnsl.abilist | 122 - sysdeps/unix/sysv/linux/aarch64/libpthread.abilist | 226 - sysdeps/unix/sysv/linux/aarch64/libresolv.abilist | 92 - sysdeps/unix/sysv/linux/aarch64/librt.abilist | 36 - .../unix/sysv/linux/aarch64/libthread_db.abilist | 41 - sysdeps/unix/sysv/linux/aarch64/libutil.abilist | 7 - sysdeps/unix/sysv/linux/aarch64/localplt.data | 20 - sysdeps/unix/sysv/linux/aarch64/makecontext.c | 74 - sysdeps/unix/sysv/linux/aarch64/profil-counter.h | 20 - sysdeps/unix/sysv/linux/aarch64/pt-vfork.c | 54 - sysdeps/unix/sysv/linux/aarch64/readelflib.c | 18 - sysdeps/unix/sysv/linux/aarch64/setcontext.S | 130 - sysdeps/unix/sysv/linux/aarch64/shlib-versions | 7 - sysdeps/unix/sysv/linux/aarch64/sigaction.c | 70 - sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h | 35 - sysdeps/unix/sysv/linux/aarch64/swapcontext.S | 101 - sysdeps/unix/sysv/linux/aarch64/sys/elf.h | 26 - sysdeps/unix/sysv/linux/aarch64/sys/procfs.h | 123 - sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h | 207 - sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h | 59 - sysdeps/unix/sysv/linux/aarch64/sys/user.h | 37 - sysdeps/unix/sysv/linux/aarch64/syscall.S | 44 - sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h | 134 - sysdeps/unix/sysv/linux/aarch64/sysdep.c | 33 - sysdeps/unix/sysv/linux/aarch64/sysdep.h | 297 - .../unix/sysv/linux/aarch64/ucontext-internal.h | 45 - sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym | 55 - sysdeps/unix/sysv/linux/aarch64/vfork.S | 42 - sysdeps/unix/sysv/linux/accept.c | 34 - sysdeps/unix/sysv/linux/accept4.c | 36 - sysdeps/unix/sysv/linux/access.c | 47 - sysdeps/unix/sysv/linux/adjtime.c | 92 - sysdeps/unix/sysv/linux/aio_misc.h | 68 - sysdeps/unix/sysv/linux/aio_sigqueue.c | 52 - sysdeps/unix/sysv/linux/alpha/Implies | 5 - sysdeps/unix/sysv/linux/alpha/Makefile | 46 - sysdeps/unix/sysv/linux/alpha/Versions | 113 - sysdeps/unix/sysv/linux/alpha/____longjmp_chk.S | 144 - sysdeps/unix/sysv/linux/alpha/a.out.h | 197 - sysdeps/unix/sysv/linux/alpha/adjtime.c | 94 - sysdeps/unix/sysv/linux/alpha/aio_cancel.c | 33 - sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h | 18 - sysdeps/unix/sysv/linux/alpha/alpha/regdef.h | 44 - sysdeps/unix/sysv/linux/alpha/alphaev6/fpu/Implies | 2 - .../unix/sysv/linux/alpha/alphaev67/fpu/Implies | 2 - sysdeps/unix/sysv/linux/alpha/arch-fork.h | 28 - sysdeps/unix/sysv/linux/alpha/bits/a.out.h | 9 - sysdeps/unix/sysv/linux/alpha/bits/dirent.h | 57 - sysdeps/unix/sysv/linux/alpha/bits/elfclass.h | 14 - sysdeps/unix/sysv/linux/alpha/bits/epoll.h | 27 - sysdeps/unix/sysv/linux/alpha/bits/errno.h | 65 - sysdeps/unix/sysv/linux/alpha/bits/eventfd.h | 31 - sysdeps/unix/sysv/linux/alpha/bits/fcntl.h | 87 - sysdeps/unix/sysv/linux/alpha/bits/inotify.h | 29 - sysdeps/unix/sysv/linux/alpha/bits/ioctls.h | 36 - sysdeps/unix/sysv/linux/alpha/bits/ipc.h | 54 - sysdeps/unix/sysv/linux/alpha/bits/local_lim.h | 99 - sysdeps/unix/sysv/linux/alpha/bits/mman.h | 66 - sysdeps/unix/sysv/linux/alpha/bits/msq.h | 74 - sysdeps/unix/sysv/linux/alpha/bits/netdb.h | 34 - sysdeps/unix/sysv/linux/alpha/bits/resource.h | 265 - sysdeps/unix/sysv/linux/alpha/bits/sem.h | 84 - sysdeps/unix/sysv/linux/alpha/bits/semaphore.h | 33 - sysdeps/unix/sysv/linux/alpha/bits/shm.h | 100 - sysdeps/unix/sysv/linux/alpha/bits/sigaction.h | 75 - sysdeps/unix/sysv/linux/alpha/bits/signalfd.h | 29 - sysdeps/unix/sysv/linux/alpha/bits/signum.h | 81 - sysdeps/unix/sysv/linux/alpha/bits/sigstack.h | 32 - sysdeps/unix/sysv/linux/alpha/bits/socket_type.h | 55 - sysdeps/unix/sysv/linux/alpha/bits/stat.h | 160 - sysdeps/unix/sysv/linux/alpha/bits/statfs.h | 68 - sysdeps/unix/sysv/linux/alpha/bits/termios.h | 223 - sysdeps/unix/sysv/linux/alpha/bits/timerfd.h | 29 - sysdeps/unix/sysv/linux/alpha/bits/typesizes.h | 76 - sysdeps/unix/sysv/linux/alpha/bits/wordsize.h | 19 - sysdeps/unix/sysv/linux/alpha/brk.S | 84 - sysdeps/unix/sysv/linux/alpha/c++-types.data | 67 - sysdeps/unix/sysv/linux/alpha/clone.S | 120 - sysdeps/unix/sysv/linux/alpha/configure | 5 - sysdeps/unix/sysv/linux/alpha/configure.ac | 5 - sysdeps/unix/sysv/linux/alpha/dl-auxv.h | 35 - sysdeps/unix/sysv/linux/alpha/dl-brk.S | 1 - sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c | 1 - sysdeps/unix/sysv/linux/alpha/dl-support.c | 2 - sysdeps/unix/sysv/linux/alpha/dl-sysdep.c | 5 - sysdeps/unix/sysv/linux/alpha/fpu/Implies | 2 - sysdeps/unix/sysv/linux/alpha/fraiseexcpt.S | 58 - sysdeps/unix/sysv/linux/alpha/fstatfs64.c | 1 - sysdeps/unix/sysv/linux/alpha/fstatvfs.c | 1 - sysdeps/unix/sysv/linux/alpha/fstatvfs64.c | 1 - sysdeps/unix/sysv/linux/alpha/fxstat.c | 58 - sysdeps/unix/sysv/linux/alpha/fxstatat.c | 53 - sysdeps/unix/sysv/linux/alpha/getclktck.c | 2 - sysdeps/unix/sysv/linux/alpha/getcontext.S | 187 - sysdeps/unix/sysv/linux/alpha/getdents.c | 3 - sysdeps/unix/sysv/linux/alpha/getdents64.c | 1 - sysdeps/unix/sysv/linux/alpha/gethostname.c | 45 - sysdeps/unix/sysv/linux/alpha/getsysstats.c | 57 - sysdeps/unix/sysv/linux/alpha/glob.c | 51 - .../unix/sysv/linux/alpha/ieee_get_fp_control.S | 50 - .../unix/sysv/linux/alpha/ieee_set_fp_control.S | 46 - sysdeps/unix/sysv/linux/alpha/internal_statvfs64.c | 1 - sysdeps/unix/sysv/linux/alpha/ioperm.c | 882 -- sysdeps/unix/sysv/linux/alpha/ipc_priv.h | 32 - sysdeps/unix/sysv/linux/alpha/kernel-features.h | 38 - sysdeps/unix/sysv/linux/alpha/kernel_sigaction.h | 15 - sysdeps/unix/sysv/linux/alpha/kernel_stat.h | 89 - sysdeps/unix/sysv/linux/alpha/kernel_sysinfo.h | 6 - sysdeps/unix/sysv/linux/alpha/kernel_termios.h | 43 - sysdeps/unix/sysv/linux/alpha/ld.abilist | 13 - .../unix/sysv/linux/alpha/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/alpha/libanl.abilist | 5 - sysdeps/unix/sysv/linux/alpha/libc.abilist | 2503 ----- sysdeps/unix/sysv/linux/alpha/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/alpha/libdl.abilist | 14 - sysdeps/unix/sysv/linux/alpha/libm.abilist | 622 -- sysdeps/unix/sysv/linux/alpha/libnsl.abilist | 124 - sysdeps/unix/sysv/linux/alpha/libpthread.abilist | 259 - sysdeps/unix/sysv/linux/alpha/libresolv.abilist | 100 - sysdeps/unix/sysv/linux/alpha/librt.abilist | 56 - sysdeps/unix/sysv/linux/alpha/libthread_db.abilist | 44 - sysdeps/unix/sysv/linux/alpha/libutil.abilist | 7 - sysdeps/unix/sysv/linux/alpha/localplt.data | 37 - sysdeps/unix/sysv/linux/alpha/lxstat.c | 58 - sysdeps/unix/sysv/linux/alpha/makecontext.S | 163 - sysdeps/unix/sysv/linux/alpha/nldbl-abi.h | 8 - sysdeps/unix/sysv/linux/alpha/oldglob.c | 99 - sysdeps/unix/sysv/linux/alpha/pipe.S | 1 - sysdeps/unix/sysv/linux/alpha/pt-vfork.S | 43 - sysdeps/unix/sysv/linux/alpha/register-dump.h | 156 - sysdeps/unix/sysv/linux/alpha/rt_sigaction.S | 120 - sysdeps/unix/sysv/linux/alpha/select.c | 53 - sysdeps/unix/sysv/linux/alpha/setcontext.S | 34 - sysdeps/unix/sysv/linux/alpha/setfpucw.c | 61 - sysdeps/unix/sysv/linux/alpha/shlib-versions | 14 - sysdeps/unix/sysv/linux/alpha/sigaction.c | 38 - sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h | 24 - sysdeps/unix/sysv/linux/alpha/sigprocmask.c | 57 - sysdeps/unix/sysv/linux/alpha/sizes.h | 23 - sysdeps/unix/sysv/linux/alpha/statfs64.c | 1 - sysdeps/unix/sysv/linux/alpha/statvfs.c | 1 - sysdeps/unix/sysv/linux/alpha/statvfs64.c | 1 - sysdeps/unix/sysv/linux/alpha/swapcontext.S | 50 - sysdeps/unix/sysv/linux/alpha/sys/acct.h | 63 - sysdeps/unix/sysv/linux/alpha/sys/io.h | 94 - sysdeps/unix/sysv/linux/alpha/sys/procfs.h | 127 - sysdeps/unix/sysv/linux/alpha/sys/ucontext.h | 67 - sysdeps/unix/sysv/linux/alpha/sys/user.h | 52 - sysdeps/unix/sysv/linux/alpha/syscall.S | 70 - sysdeps/unix/sysv/linux/alpha/syscalls.list | 45 - sysdeps/unix/sysv/linux/alpha/sysconf.c | 127 - sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h | 174 - sysdeps/unix/sysv/linux/alpha/sysdep.h | 96 - sysdeps/unix/sysv/linux/alpha/timer_create.c | 1 - sysdeps/unix/sysv/linux/alpha/timer_delete.c | 1 - sysdeps/unix/sysv/linux/alpha/timer_getoverr.c | 1 - sysdeps/unix/sysv/linux/alpha/timer_gettime.c | 1 - sysdeps/unix/sysv/linux/alpha/timer_settime.c | 1 - sysdeps/unix/sysv/linux/alpha/ucontext-offsets.sym | 18 - sysdeps/unix/sysv/linux/alpha/vfork.S | 41 - sysdeps/unix/sysv/linux/alpha/wordexp.c | 1 - sysdeps/unix/sysv/linux/alpha/xstat.c | 58 - sysdeps/unix/sysv/linux/alpha/xstatconv.c | 120 - sysdeps/unix/sysv/linux/alpha/xstatconv.h | 22 - sysdeps/unix/sysv/linux/arch-fork.h | 27 - sysdeps/unix/sysv/linux/arm/Implies | 1 - sysdeps/unix/sysv/linux/arm/Makefile | 69 - sysdeps/unix/sysv/linux/arm/Versions | 19 - sysdeps/unix/sysv/linux/arm/____longjmp_chk.S | 90 - sysdeps/unix/sysv/linux/arm/aeabi_read_tp.S | 55 - sysdeps/unix/sysv/linux/arm/alphasort64.c | 1 - sysdeps/unix/sysv/linux/arm/arch-fork.h | 27 - sysdeps/unix/sysv/linux/arm/arm-features.h | 30 - sysdeps/unix/sysv/linux/arm/atomic-machine.h | 107 - sysdeps/unix/sysv/linux/arm/bits/fcntl.h | 54 - sysdeps/unix/sysv/linux/arm/bits/hwcap.h | 45 - sysdeps/unix/sysv/linux/arm/bits/mman.h | 40 - sysdeps/unix/sysv/linux/arm/bits/shm.h | 103 - sysdeps/unix/sysv/linux/arm/brk.c | 41 - sysdeps/unix/sysv/linux/arm/c++-types.data | 67 - sysdeps/unix/sysv/linux/arm/clone.S | 84 - sysdeps/unix/sysv/linux/arm/dl-cache.h | 34 - sysdeps/unix/sysv/linux/arm/dl-machine.h | 30 - sysdeps/unix/sysv/linux/arm/dl-procinfo.c | 66 - sysdeps/unix/sysv/linux/arm/dl-procinfo.h | 93 - sysdeps/unix/sysv/linux/arm/fcntl.c | 1 - sysdeps/unix/sysv/linux/arm/fxstat.c | 1 - sysdeps/unix/sysv/linux/arm/fxstatat.c | 1 - sysdeps/unix/sysv/linux/arm/getcontext.S | 115 - sysdeps/unix/sysv/linux/arm/getdents64.c | 1 - sysdeps/unix/sysv/linux/arm/glob64.c | 1 - sysdeps/unix/sysv/linux/arm/init-first.c | 44 - sysdeps/unix/sysv/linux/arm/ioperm.c | 183 - sysdeps/unix/sysv/linux/arm/kernel-features.h | 41 - sysdeps/unix/sysv/linux/arm/ld.abilist | 10 - sysdeps/unix/sysv/linux/arm/ldconfig.h | 25 - sysdeps/unix/sysv/linux/arm/ldsodefs.h | 73 - .../unix/sysv/linux/arm/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/arm/libanl.abilist | 5 - sysdeps/unix/sysv/linux/arm/libc-do-syscall.S | 51 - sysdeps/unix/sysv/linux/arm/libc-vdso.h | 33 - sysdeps/unix/sysv/linux/arm/libc.abilist | 2154 ---- sysdeps/unix/sysv/linux/arm/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/arm/libdl.abilist | 10 - sysdeps/unix/sysv/linux/arm/libm.abilist | 432 - sysdeps/unix/sysv/linux/arm/libnsl.abilist | 122 - sysdeps/unix/sysv/linux/arm/libpthread.abilist | 228 - sysdeps/unix/sysv/linux/arm/libresolv.abilist | 93 - sysdeps/unix/sysv/linux/arm/librt.abilist | 42 - sysdeps/unix/sysv/linux/arm/libthread_db.abilist | 41 - sysdeps/unix/sysv/linux/arm/libutil.abilist | 7 - sysdeps/unix/sysv/linux/arm/localplt.data | 19 - sysdeps/unix/sysv/linux/arm/lockf64.c | 1 - sysdeps/unix/sysv/linux/arm/lxstat.c | 1 - sysdeps/unix/sysv/linux/arm/makecontext.c | 73 - sysdeps/unix/sysv/linux/arm/profil-counter.h | 34 - sysdeps/unix/sysv/linux/arm/readahead.c | 37 - sysdeps/unix/sysv/linux/arm/readdir64.c | 1 - sysdeps/unix/sysv/linux/arm/readdir64_r.c | 1 - sysdeps/unix/sysv/linux/arm/readelflib.c | 79 - sysdeps/unix/sysv/linux/arm/register-dump.h | 136 - sysdeps/unix/sysv/linux/arm/scandir64.c | 1 - sysdeps/unix/sysv/linux/arm/setcontext.S | 111 - sysdeps/unix/sysv/linux/arm/shlib-versions | 9 - sysdeps/unix/sysv/linux/arm/sigaction.c | 84 - sysdeps/unix/sysv/linux/arm/sigcontextinfo.h | 48 - sysdeps/unix/sysv/linux/arm/sigrestorer.S | 84 - sysdeps/unix/sysv/linux/arm/swapcontext.S | 63 - sysdeps/unix/sysv/linux/arm/sys/elf.h | 25 - sysdeps/unix/sysv/linux/arm/sys/io.h | 47 - sysdeps/unix/sysv/linux/arm/sys/procfs.h | 122 - sysdeps/unix/sysv/linux/arm/sys/ucontext.h | 114 - sysdeps/unix/sysv/linux/arm/sys/user.h | 71 - sysdeps/unix/sysv/linux/arm/syscall.S | 48 - sysdeps/unix/sysv/linux/arm/syscalls.list | 33 - sysdeps/unix/sysv/linux/arm/sysdep-cancel.h | 241 - sysdeps/unix/sysv/linux/arm/sysdep.S | 33 - sysdeps/unix/sysv/linux/arm/sysdep.h | 442 - sysdeps/unix/sysv/linux/arm/tls.h | 42 - sysdeps/unix/sysv/linux/arm/ucontext_i.sym | 30 - sysdeps/unix/sysv/linux/arm/umount.c | 30 - sysdeps/unix/sysv/linux/arm/versionsort64.c | 1 - sysdeps/unix/sysv/linux/arm/vfork.S | 59 - sysdeps/unix/sysv/linux/arm/xstat.c | 1 - sysdeps/unix/sysv/linux/bind.c | 35 - sysdeps/unix/sysv/linux/bits/a.out.h | 7 - sysdeps/unix/sysv/linux/bits/dirent.h | 57 - sysdeps/unix/sysv/linux/bits/epoll.h | 27 - sysdeps/unix/sysv/linux/bits/errno.h | 66 - sysdeps/unix/sysv/linux/bits/eventfd.h | 31 - sysdeps/unix/sysv/linux/bits/fcntl-linux.h | 411 - sysdeps/unix/sysv/linux/bits/fcntl.h | 3 - sysdeps/unix/sysv/linux/bits/in.h | 256 - sysdeps/unix/sysv/linux/bits/initspin.h | 1 - sysdeps/unix/sysv/linux/bits/inotify.h | 29 - sysdeps/unix/sysv/linux/bits/ioctl-types.h | 77 - sysdeps/unix/sysv/linux/bits/ioctls.h | 108 - sysdeps/unix/sysv/linux/bits/ipc.h | 55 - sysdeps/unix/sysv/linux/bits/local_lim.h | 99 - sysdeps/unix/sysv/linux/bits/mqueue.h | 33 - sysdeps/unix/sysv/linux/bits/msq.h | 77 - sysdeps/unix/sysv/linux/bits/param.h | 42 - sysdeps/unix/sysv/linux/bits/poll.h | 49 - sysdeps/unix/sysv/linux/bits/posix_opt.h | 191 - sysdeps/unix/sysv/linux/bits/resource.h | 327 - sysdeps/unix/sysv/linux/bits/sched.h | 211 - sysdeps/unix/sysv/linux/bits/sem.h | 86 - sysdeps/unix/sysv/linux/bits/shm.h | 103 - sysdeps/unix/sysv/linux/bits/sigaction.h | 78 - sysdeps/unix/sysv/linux/bits/sigcontext.h | 37 - sysdeps/unix/sysv/linux/bits/sigevent-consts.h | 41 - sysdeps/unix/sysv/linux/bits/siginfo-arch.h | 7 - sysdeps/unix/sysv/linux/bits/siginfo-consts-arch.h | 7 - sysdeps/unix/sysv/linux/bits/siginfo-consts.h | 187 - sysdeps/unix/sysv/linux/bits/signalfd.h | 29 - sysdeps/unix/sysv/linux/bits/signum.h | 79 - sysdeps/unix/sysv/linux/bits/sigstack.h | 32 - sysdeps/unix/sysv/linux/bits/socket.h | 447 - sysdeps/unix/sysv/linux/bits/socket_type.h | 55 - sysdeps/unix/sysv/linux/bits/ss_flags.h | 35 - sysdeps/unix/sysv/linux/bits/stat.h | 172 - sysdeps/unix/sysv/linux/bits/statfs.h | 69 - sysdeps/unix/sysv/linux/bits/statvfs.h | 109 - sysdeps/unix/sysv/linux/bits/sys_errlist.h | 32 - sysdeps/unix/sysv/linux/bits/sysctl.h | 1 - sysdeps/unix/sysv/linux/bits/termios.h | 219 - sysdeps/unix/sysv/linux/bits/time.h | 83 - sysdeps/unix/sysv/linux/bits/timerfd.h | 29 - sysdeps/unix/sysv/linux/bits/timex.h | 110 - sysdeps/unix/sysv/linux/bits/types/__sigset_t.h | 10 - sysdeps/unix/sysv/linux/bits/types/sigevent_t.h | 48 - sysdeps/unix/sysv/linux/bits/types/siginfo_t.h | 151 - sysdeps/unix/sysv/linux/bits/types/stack_t.h | 33 - sysdeps/unix/sysv/linux/bits/uio.h | 78 - sysdeps/unix/sysv/linux/bits/utsname.h | 28 - sysdeps/unix/sysv/linux/bits/waitflags.h | 37 - sysdeps/unix/sysv/linux/check_native.c | 177 - sysdeps/unix/sysv/linux/check_pf.c | 391 - sysdeps/unix/sysv/linux/clock.c | 39 - sysdeps/unix/sysv/linux/clock_getcpuclockid.c | 48 - sysdeps/unix/sysv/linux/clock_getres.c | 51 - sysdeps/unix/sysv/linux/clock_gettime.c | 47 - sysdeps/unix/sysv/linux/clock_nanosleep.c | 54 - sysdeps/unix/sysv/linux/clock_settime.c | 38 - sysdeps/unix/sysv/linux/close.c | 30 - sysdeps/unix/sysv/linux/cmsg_nxthdr.c | 39 - sysdeps/unix/sysv/linux/configure | 166 - sysdeps/unix/sysv/linux/configure.ac | 122 - sysdeps/unix/sysv/linux/connect.c | 33 - sysdeps/unix/sysv/linux/creat.c | 40 - sysdeps/unix/sysv/linux/creat64.c | 41 - sysdeps/unix/sysv/linux/createthread.c | 152 - sysdeps/unix/sysv/linux/default-sched.h | 42 - sysdeps/unix/sysv/linux/device-nrs.h | 45 - sysdeps/unix/sysv/linux/dl-brk.c | 5 - sysdeps/unix/sysv/linux/dl-execstack.c | 67 - sysdeps/unix/sysv/linux/dl-fxstatat64.c | 1 - sysdeps/unix/sysv/linux/dl-getcwd.c | 1 - sysdeps/unix/sysv/linux/dl-librecon.h | 60 - sysdeps/unix/sysv/linux/dl-openat64.c | 31 - sysdeps/unix/sysv/linux/dl-opendir.c | 1 - sysdeps/unix/sysv/linux/dl-origin.c | 80 - sysdeps/unix/sysv/linux/dl-osinfo.h | 79 - sysdeps/unix/sysv/linux/dl-sbrk.c | 5 - sysdeps/unix/sysv/linux/dl-sysdep.c | 132 - sysdeps/unix/sysv/linux/dl-sysdep.h | 33 - sysdeps/unix/sysv/linux/dl-vdso.c | 49 - sysdeps/unix/sysv/linux/dl-vdso.h | 53 - sysdeps/unix/sysv/linux/dl-writev.h | 38 - sysdeps/unix/sysv/linux/epoll_pwait.c | 59 - sysdeps/unix/sysv/linux/epoll_wait.c | 32 - sysdeps/unix/sysv/linux/errqueue.h | 45 - sysdeps/unix/sysv/linux/eventfd_read.c | 27 - sysdeps/unix/sysv/linux/eventfd_write.c | 28 - sysdeps/unix/sysv/linux/exit-thread.h | 38 - sysdeps/unix/sysv/linux/faccessat.c | 71 - sysdeps/unix/sysv/linux/fallocate.c | 30 - sysdeps/unix/sysv/linux/fallocate64.c | 33 - sysdeps/unix/sysv/linux/fatal-prepare.h | 24 - sysdeps/unix/sysv/linux/fchmodat.c | 40 - sysdeps/unix/sysv/linux/fcntl.c | 85 - sysdeps/unix/sysv/linux/fd_to_filename.h | 45 - sysdeps/unix/sysv/linux/fdatasync.c | 29 - sysdeps/unix/sysv/linux/fexecve.c | 55 - sysdeps/unix/sysv/linux/fips-private.h | 74 - sysdeps/unix/sysv/linux/fpathconf.c | 52 - sysdeps/unix/sysv/linux/fstatfs64.c | 92 - sysdeps/unix/sysv/linux/fstatvfs.c | 44 - sysdeps/unix/sysv/linux/fstatvfs64.c | 68 - sysdeps/unix/sysv/linux/fsync.c | 28 - sysdeps/unix/sysv/linux/ftime.c | 3 - sysdeps/unix/sysv/linux/ftruncate.c | 35 - sysdeps/unix/sysv/linux/ftruncate64.c | 38 - sysdeps/unix/sysv/linux/futex-internal.h | 251 - sysdeps/unix/sysv/linux/futimens.c | 38 - sysdeps/unix/sysv/linux/futimes.c | 51 - sysdeps/unix/sysv/linux/futimesat.c | 38 - sysdeps/unix/sysv/linux/fxstat.c | 61 - sysdeps/unix/sysv/linux/fxstat64.c | 53 - sysdeps/unix/sysv/linux/fxstatat.c | 65 - sysdeps/unix/sysv/linux/fxstatat64.c | 47 - sysdeps/unix/sysv/linux/gai_sigqueue.c | 52 - sysdeps/unix/sysv/linux/generic/Makefile | 3 - sysdeps/unix/sysv/linux/generic/README | 11 - sysdeps/unix/sysv/linux/generic/____longjmp_chk.c | 57 - sysdeps/unix/sysv/linux/generic/bits/fcntl.h | 56 - sysdeps/unix/sysv/linux/generic/bits/msq.h | 84 - sysdeps/unix/sysv/linux/generic/bits/sem.h | 92 - sysdeps/unix/sysv/linux/generic/bits/shm.h | 111 - sysdeps/unix/sysv/linux/generic/bits/stat.h | 171 - sysdeps/unix/sysv/linux/generic/bits/statfs.h | 86 - sysdeps/unix/sysv/linux/generic/bits/typesizes.h | 84 - sysdeps/unix/sysv/linux/generic/brk.c | 45 - sysdeps/unix/sysv/linux/generic/chmod.c | 31 - sysdeps/unix/sysv/linux/generic/chown.c | 32 - sysdeps/unix/sysv/linux/generic/dl-origin.c | 81 - sysdeps/unix/sysv/linux/generic/dup2.c | 37 - sysdeps/unix/sysv/linux/generic/epoll_create.c | 38 - sysdeps/unix/sysv/linux/generic/futimesat.c | 51 - sysdeps/unix/sysv/linux/generic/getdents.c | 1 - sysdeps/unix/sysv/linux/generic/getdents64.c | 37 - sysdeps/unix/sysv/linux/generic/inotify_init.c | 32 - sysdeps/unix/sysv/linux/generic/kernel_stat.h | 30 - sysdeps/unix/sysv/linux/generic/lchown.c | 32 - sysdeps/unix/sysv/linux/generic/link.c | 31 - sysdeps/unix/sysv/linux/generic/lxstat.c | 48 - sysdeps/unix/sysv/linux/generic/mkdir.c | 33 - sysdeps/unix/sysv/linux/generic/pipe.c | 33 - sysdeps/unix/sysv/linux/generic/readlink.c | 31 - sysdeps/unix/sysv/linux/generic/readlink_chk.c | 39 - sysdeps/unix/sysv/linux/generic/rmdir.c | 31 - sysdeps/unix/sysv/linux/generic/symlink.c | 30 - sysdeps/unix/sysv/linux/generic/syscalls.list | 12 - sysdeps/unix/sysv/linux/generic/sysctl.c | 32 - sysdeps/unix/sysv/linux/generic/sysdep.h | 35 - sysdeps/unix/sysv/linux/generic/umount.c | 30 - sysdeps/unix/sysv/linux/generic/unlink.c | 31 - sysdeps/unix/sysv/linux/generic/ustat.c | 32 - sysdeps/unix/sysv/linux/generic/utimes.c | 45 - .../unix/sysv/linux/generic/wordsize-32/Versions | 5 - .../unix/sysv/linux/generic/wordsize-32/fcntl.c | 86 - .../unix/sysv/linux/generic/wordsize-32/fstatfs.c | 35 - .../unix/sysv/linux/generic/wordsize-32/fxstat.c | 47 - .../unix/sysv/linux/generic/wordsize-32/fxstat64.c | 36 - .../unix/sysv/linux/generic/wordsize-32/fxstatat.c | 46 - .../sysv/linux/generic/wordsize-32/fxstatat64.c | 37 - .../unix/sysv/linux/generic/wordsize-32/getdents.c | 115 - .../unix/sysv/linux/generic/wordsize-32/lxstat.c | 45 - .../unix/sysv/linux/generic/wordsize-32/lxstat64.c | 51 - .../unix/sysv/linux/generic/wordsize-32/overflow.h | 60 - .../unix/sysv/linux/generic/wordsize-32/sendfile.c | 45 - .../unix/sysv/linux/generic/wordsize-32/statfs.c | 36 - .../sysv/linux/generic/wordsize-32/syscalls.list | 5 - .../unix/sysv/linux/generic/wordsize-32/xstat.c | 45 - .../unix/sysv/linux/generic/wordsize-32/xstat64.c | 51 - sysdeps/unix/sysv/linux/generic/xmknod.c | 54 - sysdeps/unix/sysv/linux/generic/xstat.c | 48 - sysdeps/unix/sysv/linux/getclktck.c | 31 - sysdeps/unix/sysv/linux/getcwd.c | 135 - sysdeps/unix/sysv/linux/getdents.c | 272 - sysdeps/unix/sysv/linux/getdents64.c | 3 - sysdeps/unix/sysv/linux/getdirentries.c | 41 - sysdeps/unix/sysv/linux/getdirentries64.c | 3 - sysdeps/unix/sysv/linux/getdtsz.c | 21 - sysdeps/unix/sysv/linux/getentropy.c | 73 - sysdeps/unix/sysv/linux/gethostid.c | 118 - sysdeps/unix/sysv/linux/getipv4sourcefilter.c | 73 - sysdeps/unix/sysv/linux/getloadavg.c | 68 - sysdeps/unix/sysv/linux/getlogin.c | 39 - sysdeps/unix/sysv/linux/getlogin_r.c | 120 - sysdeps/unix/sysv/linux/getpagesize.c | 32 - sysdeps/unix/sysv/linux/getpeername.c | 35 - sysdeps/unix/sysv/linux/getpriority.c | 45 - sysdeps/unix/sysv/linux/getpt.c | 101 - sysdeps/unix/sysv/linux/getrandom.c | 43 - sysdeps/unix/sysv/linux/getrlimit.c | 56 - sysdeps/unix/sysv/linux/getrlimit64.c | 87 - sysdeps/unix/sysv/linux/getsockname.c | 35 - sysdeps/unix/sysv/linux/getsockopt.c | 35 - sysdeps/unix/sysv/linux/getsourcefilter.c | 146 - sysdeps/unix/sysv/linux/getsysstats.c | 330 - sysdeps/unix/sysv/linux/gettimeofday.c | 39 - sysdeps/unix/sysv/linux/grantpt.c | 44 - sysdeps/unix/sysv/linux/hppa/Implies | 1 - sysdeps/unix/sysv/linux/hppa/Makefile | 4 - sysdeps/unix/sysv/linux/hppa/Versions | 38 - sysdeps/unix/sysv/linux/hppa/____longjmp_chk.c | 47 - sysdeps/unix/sysv/linux/hppa/arch-fork.h | 32 - sysdeps/unix/sysv/linux/hppa/atomic-machine.h | 94 - sysdeps/unix/sysv/linux/hppa/bits/epoll.h | 27 - sysdeps/unix/sysv/linux/hppa/bits/errno.h | 66 - sysdeps/unix/sysv/linux/hppa/bits/eventfd.h | 31 - sysdeps/unix/sysv/linux/hppa/bits/fcntl.h | 85 - sysdeps/unix/sysv/linux/hppa/bits/inotify.h | 29 - sysdeps/unix/sysv/linux/hppa/bits/ioctls.h | 36 - sysdeps/unix/sysv/linux/hppa/bits/ipc.h | 62 - sysdeps/unix/sysv/linux/hppa/bits/mman.h | 111 - sysdeps/unix/sysv/linux/hppa/bits/msq.h | 84 - sysdeps/unix/sysv/linux/hppa/bits/sem.h | 91 - sysdeps/unix/sysv/linux/hppa/bits/shm.h | 107 - sysdeps/unix/sysv/linux/hppa/bits/sigaction.h | 81 - sysdeps/unix/sysv/linux/hppa/bits/signalfd.h | 29 - sysdeps/unix/sysv/linux/hppa/bits/signum.h | 89 - sysdeps/unix/sysv/linux/hppa/bits/socket_type.h | 55 - sysdeps/unix/sysv/linux/hppa/bits/timerfd.h | 29 - sysdeps/unix/sysv/linux/hppa/brk.c | 41 - sysdeps/unix/sysv/linux/hppa/c++-types.data | 67 - sysdeps/unix/sysv/linux/hppa/clone.S | 161 - sysdeps/unix/sysv/linux/hppa/fcntl.c | 1 - sysdeps/unix/sysv/linux/hppa/fxstat.c | 1 - sysdeps/unix/sysv/linux/hppa/fxstatat.c | 1 - sysdeps/unix/sysv/linux/hppa/getcontext.S | 165 - sysdeps/unix/sysv/linux/hppa/getdents64.c | 1 - sysdeps/unix/sysv/linux/hppa/internaltypes.h | 84 - sysdeps/unix/sysv/linux/hppa/ipc_priv.h | 21 - sysdeps/unix/sysv/linux/hppa/kernel-features.h | 29 - sysdeps/unix/sysv/linux/hppa/kernel_sigaction.h | 18 - sysdeps/unix/sysv/linux/hppa/kernel_stat.h | 34 - sysdeps/unix/sysv/linux/hppa/ld.abilist | 12 - .../unix/sysv/linux/hppa/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/hppa/libanl.abilist | 5 - sysdeps/unix/sysv/linux/hppa/libc.abilist | 2174 ---- sysdeps/unix/sysv/linux/hppa/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/hppa/libdl.abilist | 14 - sysdeps/unix/sysv/linux/hppa/libm.abilist | 433 - sysdeps/unix/sysv/linux/hppa/libnsl.abilist | 124 - sysdeps/unix/sysv/linux/hppa/libpthread.abilist | 245 - sysdeps/unix/sysv/linux/hppa/libresolv.abilist | 100 - sysdeps/unix/sysv/linux/hppa/librt.abilist | 47 - sysdeps/unix/sysv/linux/hppa/libthread_db.abilist | 44 - sysdeps/unix/sysv/linux/hppa/libutil.abilist | 7 - sysdeps/unix/sysv/linux/hppa/localplt.data | 24 - sysdeps/unix/sysv/linux/hppa/lxstat.c | 1 - sysdeps/unix/sysv/linux/hppa/makecontext.c | 99 - sysdeps/unix/sysv/linux/hppa/profil-counter.h | 24 - sysdeps/unix/sysv/linux/hppa/pt-vfork.S | 79 - sysdeps/unix/sysv/linux/hppa/pthread.h | 1203 -- sysdeps/unix/sysv/linux/hppa/pthreadP.h | 16 - .../unix/sysv/linux/hppa/pthread_cond_broadcast.c | 40 - .../unix/sysv/linux/hppa/pthread_cond_destroy.c | 40 - sysdeps/unix/sysv/linux/hppa/pthread_cond_init.c | 40 - sysdeps/unix/sysv/linux/hppa/pthread_cond_signal.c | 40 - sysdeps/unix/sysv/linux/hppa/pthread_cond_wait.c | 53 - sysdeps/unix/sysv/linux/hppa/setcontext.S | 158 - sysdeps/unix/sysv/linux/hppa/shlib-versions | 9 - sysdeps/unix/sysv/linux/hppa/swapcontext.c | 42 - sysdeps/unix/sysv/linux/hppa/sys/procfs.h | 118 - sysdeps/unix/sysv/linux/hppa/sys/ucontext.h | 67 - sysdeps/unix/sysv/linux/hppa/sys/user.h | 1 - sysdeps/unix/sysv/linux/hppa/syscall.c | 65 - sysdeps/unix/sysv/linux/hppa/syscalls.list | 16 - sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h | 279 - sysdeps/unix/sysv/linux/hppa/sysdep.c | 29 - sysdeps/unix/sysv/linux/hppa/sysdep.h | 512 - sysdeps/unix/sysv/linux/hppa/ucontext_i.sym | 59 - sysdeps/unix/sysv/linux/hppa/umount.c | 1 - sysdeps/unix/sysv/linux/hppa/utimes.c | 30 - sysdeps/unix/sysv/linux/hppa/xstat.c | 1 - sysdeps/unix/sysv/linux/i386/Implies | 2 - sysdeps/unix/sysv/linux/i386/Makefile | 46 - sysdeps/unix/sysv/linux/i386/Versions | 51 - sysdeps/unix/sysv/linux/i386/____longjmp_chk.S | 109 - sysdeps/unix/sysv/linux/i386/_exit.S | 44 - sysdeps/unix/sysv/linux/i386/alphasort64.c | 48 - sysdeps/unix/sysv/linux/i386/arch-fork.h | 27 - sysdeps/unix/sysv/linux/i386/brk.c | 41 - sysdeps/unix/sysv/linux/i386/c++-types.data | 67 - sysdeps/unix/sysv/linux/i386/clone.S | 124 - sysdeps/unix/sysv/linux/i386/configure | 44 - sysdeps/unix/sysv/linux/i386/configure.ac | 22 - sysdeps/unix/sysv/linux/i386/dl-librecon.h | 62 - sysdeps/unix/sysv/linux/i386/dl-procinfo.h | 47 - sysdeps/unix/sysv/linux/i386/dl-sysdep.h | 46 - sysdeps/unix/sysv/linux/i386/fcntl.c | 61 - sysdeps/unix/sysv/linux/i386/fxstat.c | 61 - sysdeps/unix/sysv/linux/i386/fxstatat.c | 56 - sysdeps/unix/sysv/linux/i386/get_clockfreq.c | 88 - sysdeps/unix/sysv/linux/i386/getcontext.S | 83 - sysdeps/unix/sysv/linux/i386/getdents64.c | 39 - sysdeps/unix/sysv/linux/i386/getmsg.c | 33 - sysdeps/unix/sysv/linux/i386/gettimeofday.c | 35 - sysdeps/unix/sysv/linux/i386/glob64.c | 76 - sysdeps/unix/sysv/linux/i386/i686/Implies | 1 - sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h | 29 - sysdeps/unix/sysv/linux/i386/i786/Implies | 2 - sysdeps/unix/sysv/linux/i386/init-first.c | 50 - sysdeps/unix/sysv/linux/i386/kernel-features.h | 50 - sysdeps/unix/sysv/linux/i386/ld.abilist | 13 - sysdeps/unix/sysv/linux/i386/ldconfig.h | 24 - .../unix/sysv/linux/i386/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/i386/libanl.abilist | 5 - sysdeps/unix/sysv/linux/i386/libc-do-syscall.S | 53 - sysdeps/unix/sysv/linux/i386/libc-lowlevellock.S | 19 - sysdeps/unix/sysv/linux/i386/libc.abilist | 2333 ---- sysdeps/unix/sysv/linux/i386/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/i386/libdl.abilist | 14 - sysdeps/unix/sysv/linux/i386/libm.abilist | 476 - sysdeps/unix/sysv/linux/i386/libnsl.abilist | 124 - sysdeps/unix/sysv/linux/i386/libpthread.abilist | 257 - sysdeps/unix/sysv/linux/i386/libresolv.abilist | 100 - sysdeps/unix/sysv/linux/i386/librt.abilist | 47 - sysdeps/unix/sysv/linux/i386/libthread_db.abilist | 44 - sysdeps/unix/sysv/linux/i386/libutil.abilist | 7 - sysdeps/unix/sysv/linux/i386/lll_timedlock_wait.c | 1 - sysdeps/unix/sysv/linux/i386/lll_timedwait_tid.c | 1 - sysdeps/unix/sysv/linux/i386/localplt.data | 18 - sysdeps/unix/sysv/linux/i386/lockf64.c | 70 - sysdeps/unix/sysv/linux/i386/lowlevellock.S | 466 - sysdeps/unix/sysv/linux/i386/lowlevellock.h | 267 - sysdeps/unix/sysv/linux/i386/lxstat.c | 62 - sysdeps/unix/sysv/linux/i386/makecontext.S | 120 - sysdeps/unix/sysv/linux/i386/olddirent.h | 44 - sysdeps/unix/sysv/linux/i386/profil-counter.h | 31 - sysdeps/unix/sysv/linux/i386/putmsg.c | 34 - sysdeps/unix/sysv/linux/i386/readdir64.c | 43 - sysdeps/unix/sysv/linux/i386/readdir64_r.c | 43 - sysdeps/unix/sysv/linux/i386/readelflib.c | 93 - sysdeps/unix/sysv/linux/i386/register-dump.h | 255 - sysdeps/unix/sysv/linux/i386/scandir64.c | 136 - sysdeps/unix/sysv/linux/i386/setcontext.S | 96 - sysdeps/unix/sysv/linux/i386/shlib-versions | 1 - sysdeps/unix/sysv/linux/i386/sigaction.c | 129 - sysdeps/unix/sysv/linux/i386/sigcontextinfo.h | 50 - sysdeps/unix/sysv/linux/i386/smp.h | 55 - sysdeps/unix/sysv/linux/i386/swapcontext.S | 109 - sysdeps/unix/sysv/linux/i386/syscall.S | 35 - sysdeps/unix/sysv/linux/i386/syscalls.list | 26 - sysdeps/unix/sysv/linux/i386/sysdep-cancel.h | 153 - sysdeps/unix/sysv/linux/i386/sysdep.c | 30 - sysdeps/unix/sysv/linux/i386/sysdep.h | 657 -- sysdeps/unix/sysv/linux/i386/time.c | 34 - sysdeps/unix/sysv/linux/i386/ucontext_i.sym | 30 - sysdeps/unix/sysv/linux/i386/versionsort64.c | 48 - sysdeps/unix/sysv/linux/i386/vfork.S | 57 - sysdeps/unix/sysv/linux/i386/xstat.c | 61 - sysdeps/unix/sysv/linux/ia64/Implies | 2 - sysdeps/unix/sysv/linux/ia64/Makefile | 27 - sysdeps/unix/sysv/linux/ia64/Versions | 41 - sysdeps/unix/sysv/linux/ia64/____longjmp_chk.S | 88 - sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S | 158 - sysdeps/unix/sysv/linux/ia64/__longjmp.S | 168 - sysdeps/unix/sysv/linux/ia64/__sigstack_longjmp.c | 167 - sysdeps/unix/sysv/linux/ia64/__start_context.S | 51 - sysdeps/unix/sysv/linux/ia64/arch-fork.h | 31 - sysdeps/unix/sysv/linux/ia64/bits/endian.h | 7 - sysdeps/unix/sysv/linux/ia64/bits/fcntl.h | 53 - sysdeps/unix/sysv/linux/ia64/bits/ipc.h | 53 - sysdeps/unix/sysv/linux/ia64/bits/local_lim.h | 99 - sysdeps/unix/sysv/linux/ia64/bits/mman.h | 41 - sysdeps/unix/sysv/linux/ia64/bits/msq.h | 75 - sysdeps/unix/sysv/linux/ia64/bits/sem.h | 85 - sysdeps/unix/sysv/linux/ia64/bits/setjmp.h | 34 - sysdeps/unix/sysv/linux/ia64/bits/shm.h | 94 - sysdeps/unix/sysv/linux/ia64/bits/sigaction.h | 75 - sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h | 82 - sysdeps/unix/sysv/linux/ia64/bits/siginfo-arch.h | 17 - .../sysv/linux/ia64/bits/siginfo-consts-arch.h | 45 - sysdeps/unix/sysv/linux/ia64/bits/sigstack.h | 36 - sysdeps/unix/sysv/linux/ia64/bits/stat.h | 149 - sysdeps/unix/sysv/linux/ia64/brk.S | 51 - sysdeps/unix/sysv/linux/ia64/bsd-_setjmp.S | 1 - sysdeps/unix/sysv/linux/ia64/bsd-setjmp.S | 1 - sysdeps/unix/sysv/linux/ia64/c++-types.data | 67 - sysdeps/unix/sysv/linux/ia64/clone.S | 1 - sysdeps/unix/sysv/linux/ia64/clone2.S | 91 - sysdeps/unix/sysv/linux/ia64/configure | 8 - sysdeps/unix/sysv/linux/ia64/configure.ac | 8 - sysdeps/unix/sysv/linux/ia64/dl-brk.S | 1 - sysdeps/unix/sysv/linux/ia64/dl-cache.h | 24 - sysdeps/unix/sysv/linux/ia64/dl-static.c | 61 - sysdeps/unix/sysv/linux/ia64/dl-sysdep.h | 55 - sysdeps/unix/sysv/linux/ia64/get_clockfreq.c | 87 - sysdeps/unix/sysv/linux/ia64/getclktck.c | 2 - sysdeps/unix/sysv/linux/ia64/getcontext.S | 157 - sysdeps/unix/sysv/linux/ia64/has_cpuclock.c | 51 - sysdeps/unix/sysv/linux/ia64/ioperm.c | 201 - sysdeps/unix/sysv/linux/ia64/kernel-features.h | 29 - sysdeps/unix/sysv/linux/ia64/kernel_stat.h | 21 - sysdeps/unix/sysv/linux/ia64/ld.abilist | 11 - sysdeps/unix/sysv/linux/ia64/ldconfig.h | 24 - sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed | 1 - sysdeps/unix/sysv/linux/ia64/ldsodefs.h | 32 - .../unix/sysv/linux/ia64/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/ia64/libanl.abilist | 5 - sysdeps/unix/sysv/linux/ia64/libc.abilist | 2194 ---- sysdeps/unix/sysv/linux/ia64/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/ia64/libdl.abilist | 14 - sysdeps/unix/sysv/linux/ia64/libm.abilist | 405 - sysdeps/unix/sysv/linux/ia64/libnsl.abilist | 124 - sysdeps/unix/sysv/linux/ia64/libpthread.abilist | 247 - sysdeps/unix/sysv/linux/ia64/libresolv.abilist | 100 - sysdeps/unix/sysv/linux/ia64/librt.abilist | 53 - sysdeps/unix/sysv/linux/ia64/libthread_db.abilist | 44 - sysdeps/unix/sysv/linux/ia64/libutil.abilist | 7 - sysdeps/unix/sysv/linux/ia64/localplt.data | 17 - sysdeps/unix/sysv/linux/ia64/makecontext.c | 88 - sysdeps/unix/sysv/linux/ia64/pipe.S | 37 - sysdeps/unix/sysv/linux/ia64/profil-counter.h | 31 - sysdeps/unix/sysv/linux/ia64/pt-vfork.S | 48 - sysdeps/unix/sysv/linux/ia64/readelflib.c | 59 - sysdeps/unix/sysv/linux/ia64/register-dump.h | 181 - sysdeps/unix/sysv/linux/ia64/rt-sysdep.S | 1 - sysdeps/unix/sysv/linux/ia64/setcontext.S | 152 - sysdeps/unix/sysv/linux/ia64/setjmp.S | 198 - sysdeps/unix/sysv/linux/ia64/shlib-versions | 8 - sysdeps/unix/sysv/linux/ia64/sigaction.c | 45 - .../unix/sysv/linux/ia64/sigaltstack-offsets.sym | 13 - .../unix/sysv/linux/ia64/sigcontext-offsets.sym | 16 - sysdeps/unix/sysv/linux/ia64/sigcontextinfo.h | 25 - sysdeps/unix/sysv/linux/ia64/sigpending.c | 36 - sysdeps/unix/sysv/linux/ia64/sigprocmask.c | 39 - sysdeps/unix/sysv/linux/ia64/swapcontext.c | 39 - sysdeps/unix/sysv/linux/ia64/sys/io.h | 67 - sysdeps/unix/sysv/linux/ia64/sys/procfs.h | 129 - sysdeps/unix/sysv/linux/ia64/sys/ptrace.h | 227 - sysdeps/unix/sysv/linux/ia64/sys/rse.h | 77 - sysdeps/unix/sysv/linux/ia64/sys/ucontext.h | 67 - sysdeps/unix/sysv/linux/ia64/sys/user.h | 47 - sysdeps/unix/sysv/linux/ia64/syscall.S | 33 - sysdeps/unix/sysv/linux/ia64/syscalls.list | 28 - sysdeps/unix/sysv/linux/ia64/sysconf.c | 30 - sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h | 223 - sysdeps/unix/sysv/linux/ia64/sysdep.S | 58 - sysdeps/unix/sysv/linux/ia64/sysdep.h | 387 - sysdeps/unix/sysv/linux/ia64/system.c | 30 - sysdeps/unix/sysv/linux/ia64/timer_create.c | 1 - sysdeps/unix/sysv/linux/ia64/timer_delete.c | 1 - sysdeps/unix/sysv/linux/ia64/timer_getoverr.c | 1 - sysdeps/unix/sysv/linux/ia64/timer_gettime.c | 1 - sysdeps/unix/sysv/linux/ia64/timer_settime.c | 1 - sysdeps/unix/sysv/linux/ia64/tst-setcontext2.c | 24 - sysdeps/unix/sysv/linux/ia64/ucontext_i.h | 46 - sysdeps/unix/sysv/linux/ia64/umount.c | 29 - sysdeps/unix/sysv/linux/ia64/unwind-dw2-fde.c | 1 - sysdeps/unix/sysv/linux/ia64/unwind-forcedunwind.c | 38 - sysdeps/unix/sysv/linux/ia64/unwind_longjmp.c | 43 - sysdeps/unix/sysv/linux/ia64/vfork.S | 50 - sysdeps/unix/sysv/linux/ia64/wordexp.c | 59 - sysdeps/unix/sysv/linux/if_index.c | 241 - sysdeps/unix/sysv/linux/ifaddrs.c | 846 -- sysdeps/unix/sysv/linux/ifreq.c | 74 - sysdeps/unix/sysv/linux/include/bits/syscall.h | 3 - sysdeps/unix/sysv/linux/include/sys/sysinfo.h | 29 - sysdeps/unix/sysv/linux/include/sys/timex.h | 29 - sysdeps/unix/sysv/linux/internal_statvfs.c | 87 - sysdeps/unix/sysv/linux/internal_statvfs64.c | 4 - sysdeps/unix/sysv/linux/ipc_ops.h | 30 - sysdeps/unix/sysv/linux/ipc_priv.h | 39 - sysdeps/unix/sysv/linux/kernel-features.h | 104 - sysdeps/unix/sysv/linux/kernel-posix-cpu-timers.h | 18 - sysdeps/unix/sysv/linux/kernel-posix-timers.h | 67 - sysdeps/unix/sysv/linux/kernel_sigaction.h | 19 - sysdeps/unix/sysv/linux/kernel_stat.h | 38 - sysdeps/unix/sysv/linux/kernel_termios.h | 34 - sysdeps/unix/sysv/linux/ldd-rewrite.sed | 11 - sysdeps/unix/sysv/linux/lddlibc4.c | 105 - sysdeps/unix/sysv/linux/ldsodefs.h | 39 - sysdeps/unix/sysv/linux/libc_fatal.c | 68 - sysdeps/unix/sysv/linux/linux_fsinfo.h | 271 - sysdeps/unix/sysv/linux/listen.c | 35 - sysdeps/unix/sysv/linux/local-setxid.h | 16 - sysdeps/unix/sysv/linux/lowlevellock-futex.h | 145 - sysdeps/unix/sysv/linux/lseek.c | 57 - sysdeps/unix/sysv/linux/lseek64.c | 54 - sysdeps/unix/sysv/linux/lutimes.c | 44 - sysdeps/unix/sysv/linux/lxstat.c | 60 - sysdeps/unix/sysv/linux/lxstat64.c | 52 - sysdeps/unix/sysv/linux/m68k/Implies | 1 - sysdeps/unix/sysv/linux/m68k/Makefile | 25 - sysdeps/unix/sysv/linux/m68k/Versions | 54 - sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c | 38 - sysdeps/unix/sysv/linux/m68k/alphasort64.c | 1 - sysdeps/unix/sysv/linux/m68k/arch-fork.h | 28 - sysdeps/unix/sysv/linux/m68k/bits/a.out.h | 3 - sysdeps/unix/sysv/linux/m68k/bits/fcntl.h | 54 - sysdeps/unix/sysv/linux/m68k/bits/mman.h | 40 - sysdeps/unix/sysv/linux/m68k/bits/poll.h | 49 - sysdeps/unix/sysv/linux/m68k/bits/sockaddr.h | 42 - sysdeps/unix/sysv/linux/m68k/bits/stat.h | 172 - sysdeps/unix/sysv/linux/m68k/brk.c | 47 - sysdeps/unix/sysv/linux/m68k/c++-types.data | 67 - sysdeps/unix/sysv/linux/m68k/clone.S | 111 - .../unix/sysv/linux/m68k/coldfire/atomic-machine.h | 109 - sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist | 10 - .../linux/m68k/coldfire/libBrokenLocale.abilist | 2 - .../unix/sysv/linux/m68k/coldfire/libanl.abilist | 5 - sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist | 2133 ---- .../unix/sysv/linux/m68k/coldfire/libcrypt.abilist | 8 - .../unix/sysv/linux/m68k/coldfire/libdl.abilist | 10 - sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist | 432 - .../unix/sysv/linux/m68k/coldfire/libnsl.abilist | 122 - .../sysv/linux/m68k/coldfire/libpthread.abilist | 228 - .../sysv/linux/m68k/coldfire/libresolv.abilist | 93 - .../unix/sysv/linux/m68k/coldfire/librt.abilist | 42 - .../sysv/linux/m68k/coldfire/libthread_db.abilist | 41 - .../unix/sysv/linux/m68k/coldfire/libutil.abilist | 7 - .../unix/sysv/linux/m68k/coldfire/shlib-versions | 1 - sysdeps/unix/sysv/linux/m68k/coldfire/sysdep.h | 29 - sysdeps/unix/sysv/linux/m68k/configure | 9 - sysdeps/unix/sysv/linux/m68k/configure.ac | 10 - sysdeps/unix/sysv/linux/m68k/dl-librecon.h | 1 - sysdeps/unix/sysv/linux/m68k/dl-static.c | 84 - sysdeps/unix/sysv/linux/m68k/fcntl.c | 1 - sysdeps/unix/sysv/linux/m68k/fxstat.c | 1 - sysdeps/unix/sysv/linux/m68k/fxstatat.c | 1 - sysdeps/unix/sysv/linux/m68k/getdents64.c | 1 - sysdeps/unix/sysv/linux/m68k/getmsg.c | 1 - sysdeps/unix/sysv/linux/m68k/getpagesize.c | 49 - sysdeps/unix/sysv/linux/m68k/getsysstats.c | 37 - sysdeps/unix/sysv/linux/m68k/glob64.c | 1 - sysdeps/unix/sysv/linux/m68k/init-first.c | 74 - sysdeps/unix/sysv/linux/m68k/kernel-features.h | 57 - sysdeps/unix/sysv/linux/m68k/ldconfig.h | 1 - sysdeps/unix/sysv/linux/m68k/ldsodefs.h | 32 - sysdeps/unix/sysv/linux/m68k/libc-m68k-vdso.c | 1 - sysdeps/unix/sysv/linux/m68k/localplt.data | 17 - sysdeps/unix/sysv/linux/m68k/lockf64.c | 1 - sysdeps/unix/sysv/linux/m68k/lxstat.c | 1 - sysdeps/unix/sysv/linux/m68k/m680x0/Makefile | 3 - sysdeps/unix/sysv/linux/m68k/m680x0/getcontext.S | 63 - sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist | 13 - .../sysv/linux/m68k/m680x0/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/m68k/m680x0/libanl.abilist | 5 - sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist | 2288 ---- .../unix/sysv/linux/m68k/m680x0/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/m68k/m680x0/libdl.abilist | 14 - sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist | 474 - sysdeps/unix/sysv/linux/m68k/m680x0/libnsl.abilist | 124 - .../unix/sysv/linux/m68k/m680x0/libpthread.abilist | 257 - .../unix/sysv/linux/m68k/m680x0/libresolv.abilist | 100 - sysdeps/unix/sysv/linux/m68k/m680x0/librt.abilist | 47 - .../sysv/linux/m68k/m680x0/libthread_db.abilist | 44 - .../unix/sysv/linux/m68k/m680x0/libutil.abilist | 7 - sysdeps/unix/sysv/linux/m68k/m680x0/makecontext.S | 103 - sysdeps/unix/sysv/linux/m68k/m680x0/setcontext.S | 94 - sysdeps/unix/sysv/linux/m68k/m680x0/swapcontext.S | 108 - sysdeps/unix/sysv/linux/m68k/m680x0/sysdep.h | 28 - sysdeps/unix/sysv/linux/m68k/m680x0/ucontext_i.sym | 20 - sysdeps/unix/sysv/linux/m68k/m68k-helpers.S | 95 - sysdeps/unix/sysv/linux/m68k/m68k-vdso.c | 34 - sysdeps/unix/sysv/linux/m68k/m68k-vdso.h | 60 - sysdeps/unix/sysv/linux/m68k/mmap_internal.h | 29 - sysdeps/unix/sysv/linux/m68k/mremap.S | 28 - sysdeps/unix/sysv/linux/m68k/pt-vfork.c | 1 - sysdeps/unix/sysv/linux/m68k/putmsg.c | 1 - sysdeps/unix/sysv/linux/m68k/readdir64.c | 1 - sysdeps/unix/sysv/linux/m68k/readdir64_r.c | 1 - sysdeps/unix/sysv/linux/m68k/register-dump.h | 207 - sysdeps/unix/sysv/linux/m68k/scandir64.c | 1 - sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h | 25 - sysdeps/unix/sysv/linux/m68k/sys/procfs.h | 125 - sysdeps/unix/sysv/linux/m68k/sys/reg.h | 101 - sysdeps/unix/sysv/linux/m68k/sys/ucontext.h | 131 - sysdeps/unix/sysv/linux/m68k/sys/user.h | 65 - sysdeps/unix/sysv/linux/m68k/syscall.S | 32 - sysdeps/unix/sysv/linux/m68k/syscalls.list | 21 - sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h | 138 - sysdeps/unix/sysv/linux/m68k/sysdep.S | 50 - sysdeps/unix/sysv/linux/m68k/sysdep.h | 326 - sysdeps/unix/sysv/linux/m68k/versionsort64.c | 1 - sysdeps/unix/sysv/linux/m68k/vfork.S | 60 - sysdeps/unix/sysv/linux/m68k/xstat.c | 1 - sysdeps/unix/sysv/linux/malloc-sysdep.h | 59 - sysdeps/unix/sysv/linux/microblaze/Implies | 1 - sysdeps/unix/sysv/linux/microblaze/Makefile | 9 - sysdeps/unix/sysv/linux/microblaze/Versions | 5 - .../unix/sysv/linux/microblaze/____longjmp_chk.S | 29 - sysdeps/unix/sysv/linux/microblaze/arch-fork.h | 27 - sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h | 86 - sysdeps/unix/sysv/linux/microblaze/bits/mman.h | 42 - sysdeps/unix/sysv/linux/microblaze/bits/stat.h | 203 - sysdeps/unix/sysv/linux/microblaze/brk.c | 44 - sysdeps/unix/sysv/linux/microblaze/c++-types.data | 67 - sysdeps/unix/sysv/linux/microblaze/clock-compat.c | 31 - sysdeps/unix/sysv/linux/microblaze/clone.S | 73 - sysdeps/unix/sysv/linux/microblaze/fcntl.c | 1 - sysdeps/unix/sysv/linux/microblaze/fxstat.c | 1 - sysdeps/unix/sysv/linux/microblaze/fxstatat.c | 1 - sysdeps/unix/sysv/linux/microblaze/getsysstats.c | 34 - .../unix/sysv/linux/microblaze/kernel-features.h | 49 - sysdeps/unix/sysv/linux/microblaze/kernel_stat.h | 52 - sysdeps/unix/sysv/linux/microblaze/ld.abilist | 10 - .../sysv/linux/microblaze/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/microblaze/libanl.abilist | 5 - sysdeps/unix/sysv/linux/microblaze/libc.abilist | 2105 ---- .../unix/sysv/linux/microblaze/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/microblaze/libdl.abilist | 10 - sysdeps/unix/sysv/linux/microblaze/libm.abilist | 430 - sysdeps/unix/sysv/linux/microblaze/libnsl.abilist | 122 - .../unix/sysv/linux/microblaze/libpthread.abilist | 225 - .../unix/sysv/linux/microblaze/libresolv.abilist | 92 - sysdeps/unix/sysv/linux/microblaze/librt.abilist | 41 - .../sysv/linux/microblaze/libthread_db.abilist | 41 - sysdeps/unix/sysv/linux/microblaze/libutil.abilist | 7 - sysdeps/unix/sysv/linux/microblaze/localplt.data | 18 - sysdeps/unix/sysv/linux/microblaze/lxstat.c | 1 - .../unix/sysv/linux/microblaze/profil-counter.h | 2 - sysdeps/unix/sysv/linux/microblaze/pt-vfork.S | 49 - sysdeps/unix/sysv/linux/microblaze/shlib-versions | 1 - .../unix/sysv/linux/microblaze/sigcontextinfo.h | 25 - sysdeps/unix/sysv/linux/microblaze/sys/procfs.h | 123 - sysdeps/unix/sysv/linux/microblaze/sys/user.h | 69 - sysdeps/unix/sysv/linux/microblaze/syscall.S | 37 - sysdeps/unix/sysv/linux/microblaze/syscalls.list | 7 - sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h | 158 - sysdeps/unix/sysv/linux/microblaze/sysdep.S | 39 - sysdeps/unix/sysv/linux/microblaze/sysdep.h | 313 - sysdeps/unix/sysv/linux/microblaze/vfork.S | 46 - sysdeps/unix/sysv/linux/microblaze/xstat.c | 1 - sysdeps/unix/sysv/linux/mips/Implies | 1 - sysdeps/unix/sysv/linux/mips/Makefile | 112 - sysdeps/unix/sysv/linux/mips/Versions | 44 - sysdeps/unix/sysv/linux/mips/____longjmp_chk.c | 41 - sysdeps/unix/sysv/linux/mips/_test_and_set.c | 29 - sysdeps/unix/sysv/linux/mips/arch-fork.h | 1 - sysdeps/unix/sysv/linux/mips/bits/epoll.h | 27 - sysdeps/unix/sysv/linux/mips/bits/errno.h | 65 - sysdeps/unix/sysv/linux/mips/bits/eventfd.h | 31 - sysdeps/unix/sysv/linux/mips/bits/fcntl.h | 104 - sysdeps/unix/sysv/linux/mips/bits/inotify.h | 29 - sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h | 75 - sysdeps/unix/sysv/linux/mips/bits/ipc.h | 54 - sysdeps/unix/sysv/linux/mips/bits/local_lim.h | 99 - sysdeps/unix/sysv/linux/mips/bits/mman.h | 46 - sysdeps/unix/sysv/linux/mips/bits/msq.h | 92 - sysdeps/unix/sysv/linux/mips/bits/poll.h | 49 - sysdeps/unix/sysv/linux/mips/bits/resource.h | 273 - sysdeps/unix/sysv/linux/mips/bits/sem.h | 84 - sysdeps/unix/sysv/linux/mips/bits/shm.h | 95 - sysdeps/unix/sysv/linux/mips/bits/sigaction.h | 89 - sysdeps/unix/sysv/linux/mips/bits/sigcontext.h | 82 - sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h | 13 - sysdeps/unix/sysv/linux/mips/bits/signalfd.h | 29 - sysdeps/unix/sysv/linux/mips/bits/signum.h | 78 - sysdeps/unix/sysv/linux/mips/bits/socket_type.h | 55 - sysdeps/unix/sysv/linux/mips/bits/stat.h | 263 - sysdeps/unix/sysv/linux/mips/bits/statfs.h | 73 - sysdeps/unix/sysv/linux/mips/bits/termios.h | 222 - sysdeps/unix/sysv/linux/mips/bits/timerfd.h | 29 - sysdeps/unix/sysv/linux/mips/bits/types/stack_t.h | 33 - sysdeps/unix/sysv/linux/mips/brk.c | 47 - sysdeps/unix/sysv/linux/mips/clone.S | 152 - sysdeps/unix/sysv/linux/mips/configure | 477 - sysdeps/unix/sysv/linux/mips/configure.ac | 136 - sysdeps/unix/sysv/linux/mips/dl-cache.h | 72 - sysdeps/unix/sysv/linux/mips/dl-static.c | 84 - sysdeps/unix/sysv/linux/mips/getcontext.S | 154 - sysdeps/unix/sysv/linux/mips/getmsg.c | 1 - sysdeps/unix/sysv/linux/mips/getrlimit64.c | 68 - sysdeps/unix/sysv/linux/mips/getsysstats.c | 36 - sysdeps/unix/sysv/linux/mips/init-first.c | 44 - sysdeps/unix/sysv/linux/mips/kernel-features.h | 49 - sysdeps/unix/sysv/linux/mips/kernel_rt_sigframe.h | 12 - sysdeps/unix/sysv/linux/mips/kernel_sigaction.h | 40 - sysdeps/unix/sysv/linux/mips/kernel_stat.h | 60 - sysdeps/unix/sysv/linux/mips/kernel_termios.h | 34 - sysdeps/unix/sysv/linux/mips/ldsodefs.h | 40 - sysdeps/unix/sysv/linux/mips/libc-abis | 16 - sysdeps/unix/sysv/linux/mips/libc-vdso.h | 33 - sysdeps/unix/sysv/linux/mips/makecontext.S | 198 - sysdeps/unix/sysv/linux/mips/mips32/Makefile | 4 - sysdeps/unix/sysv/linux/mips/mips32/Versions | 6 - sysdeps/unix/sysv/linux/mips/mips32/c++-types.data | 67 - sysdeps/unix/sysv/linux/mips/mips32/fcntl.c | 1 - .../unix/sysv/linux/mips/mips32/fpu/libc.abilist | 2256 ---- sysdeps/unix/sysv/linux/mips/mips32/fxstatat.c | 1 - sysdeps/unix/sysv/linux/mips/mips32/ld.abilist | 14 - .../sysv/linux/mips/mips32/libBrokenLocale.abilist | 3 - sysdeps/unix/sysv/linux/mips/mips32/libanl.abilist | 6 - .../unix/sysv/linux/mips/mips32/libcidn.abilist | 1 - .../unix/sysv/linux/mips/mips32/libcrypt.abilist | 9 - sysdeps/unix/sysv/linux/mips/mips32/libdl.abilist | 15 - sysdeps/unix/sysv/linux/mips/mips32/libm.abilist | 435 - sysdeps/unix/sysv/linux/mips/mips32/libnsl.abilist | 124 - .../sysv/linux/mips/mips32/libnss_compat.abilist | 1 - .../unix/sysv/linux/mips/mips32/libnss_db.abilist | 1 - .../unix/sysv/linux/mips/mips32/libnss_dns.abilist | 1 - .../sysv/linux/mips/mips32/libnss_files.abilist | 1 - .../sysv/linux/mips/mips32/libnss_hesiod.abilist | 1 - .../unix/sysv/linux/mips/mips32/libnss_nis.abilist | 1 - .../sysv/linux/mips/mips32/libnss_nisplus.abilist | 1 - .../unix/sysv/linux/mips/mips32/libpthread.abilist | 257 - .../unix/sysv/linux/mips/mips32/libresolv.abilist | 101 - sysdeps/unix/sysv/linux/mips/mips32/librt.abilist | 47 - .../sysv/linux/mips/mips32/libthread_db.abilist | 45 - .../unix/sysv/linux/mips/mips32/libutil.abilist | 8 - sysdeps/unix/sysv/linux/mips/mips32/lockf64.c | 1 - .../unix/sysv/linux/mips/mips32/mips16/Makefile | 13 - .../unix/sysv/linux/mips/mips32/mips16/Versions | 6 - .../sysv/linux/mips/mips32/mips16/mips16-syscall.h | 89 - .../linux/mips/mips32/mips16/mips16-syscall0.c | 30 - .../linux/mips/mips32/mips16/mips16-syscall1.c | 32 - .../linux/mips/mips32/mips16/mips16-syscall2.c | 32 - .../linux/mips/mips32/mips16/mips16-syscall3.c | 32 - .../linux/mips/mips32/mips16/mips16-syscall4.c | 32 - .../linux/mips/mips32/mips16/mips16-syscall5.c | 33 - .../linux/mips/mips32/mips16/mips16-syscall6.c | 33 - .../linux/mips/mips32/mips16/mips16-syscall7.c | 33 - .../unix/sysv/linux/mips/mips32/nofpu/libc.abilist | 2254 ---- sysdeps/unix/sysv/linux/mips/mips32/readahead.c | 1 - sysdeps/unix/sysv/linux/mips/mips32/syscalls.list | 5 - sysdeps/unix/sysv/linux/mips/mips32/sysdep.h | 396 - sysdeps/unix/sysv/linux/mips/mips64/Makefile | 21 - sysdeps/unix/sysv/linux/mips/mips64/configure | 4 - sysdeps/unix/sysv/linux/mips/mips64/configure.ac | 5 - sysdeps/unix/sysv/linux/mips/mips64/fxstat64.c | 44 - sysdeps/unix/sysv/linux/mips/mips64/fxstatat64.c | 55 - sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h | 32 - sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h | 25 - .../unix/sysv/linux/mips/mips64/ldd-rewrite.sed | 1 - .../sysv/linux/mips/mips64/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/mips/mips64/libanl.abilist | 5 - .../unix/sysv/linux/mips/mips64/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/mips/mips64/libdl.abilist | 14 - sysdeps/unix/sysv/linux/mips/mips64/libm.abilist | 465 - sysdeps/unix/sysv/linux/mips/mips64/libnsl.abilist | 123 - .../unix/sysv/linux/mips/mips64/libpthread.abilist | 256 - sysdeps/unix/sysv/linux/mips/mips64/librt.abilist | 46 - .../sysv/linux/mips/mips64/libthread_db.abilist | 44 - .../unix/sysv/linux/mips/mips64/libutil.abilist | 7 - sysdeps/unix/sysv/linux/mips/mips64/lxstat64.c | 43 - sysdeps/unix/sysv/linux/mips/mips64/msgctl.c | 25 - sysdeps/unix/sysv/linux/mips/mips64/n32/Versions | 6 - .../unix/sysv/linux/mips/mips64/n32/c++-types.data | 67 - sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c | 1 - sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist | 13 - .../unix/sysv/linux/mips/mips64/n32/libc.abilist | 2251 ---- .../sysv/linux/mips/mips64/n32/libresolv.abilist | 100 - sysdeps/unix/sysv/linux/mips/mips64/n32/lockf64.c | 1 - sysdeps/unix/sysv/linux/mips/mips64/n32/lseek.c | 36 - .../sysv/linux/mips/mips64/n32/mmap_internal.h | 28 - .../unix/sysv/linux/mips/mips64/n32/syscalls.list | 13 - sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h | 321 - .../unix/sysv/linux/mips/mips64/n64/c++-types.data | 67 - .../unix/sysv/linux/mips/mips64/n64/fstatfs64.c | 1 - sysdeps/unix/sysv/linux/mips/mips64/n64/fts.c | 1 - sysdeps/unix/sysv/linux/mips/mips64/n64/fts64.c | 1 - sysdeps/unix/sysv/linux/mips/mips64/n64/ftw.c | 1 - sysdeps/unix/sysv/linux/mips/mips64/n64/ftw64.c | 1 - sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c | 1 - sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S | 41 - sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist | 13 - .../unix/sysv/linux/mips/mips64/n64/libc.abilist | 2245 ---- .../sysv/linux/mips/mips64/n64/libresolv.abilist | 100 - .../sysv/linux/mips/mips64/n64/posix_fadvise64.c | 35 - .../unix/sysv/linux/mips/mips64/n64/sendfile64.c | 1 - sysdeps/unix/sysv/linux/mips/mips64/n64/statfs64.c | 1 - .../unix/sysv/linux/mips/mips64/n64/syscalls.list | 12 - sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h | 317 - sysdeps/unix/sysv/linux/mips/mips64/semctl.c | 25 - sysdeps/unix/sysv/linux/mips/mips64/shmctl.c | 25 - sysdeps/unix/sysv/linux/mips/mips64/syscall.S | 63 - .../unix/sysv/linux/mips/mips64/sysdep-cancel.h | 249 - sysdeps/unix/sysv/linux/mips/mips64/umount.c | 30 - sysdeps/unix/sysv/linux/mips/mips64/xstat64.c | 44 - sysdeps/unix/sysv/linux/mips/pipe.S | 1 - sysdeps/unix/sysv/linux/mips/profil-counter.h | 2 - sysdeps/unix/sysv/linux/mips/pt-vfork.S | 1 - sysdeps/unix/sysv/linux/mips/putmsg.c | 1 - sysdeps/unix/sysv/linux/mips/readelflib.c | 91 - sysdeps/unix/sysv/linux/mips/register-dump.h | 121 - sysdeps/unix/sysv/linux/mips/setcontext.S | 196 - sysdeps/unix/sysv/linux/mips/setrlimit64.c | 64 - sysdeps/unix/sysv/linux/mips/shlib-versions | 27 - sysdeps/unix/sysv/linux/mips/sigaction.c | 116 - sysdeps/unix/sysv/linux/mips/sigcontextinfo.h | 42 - sysdeps/unix/sysv/linux/mips/swapcontext.S | 214 - sysdeps/unix/sysv/linux/mips/sys/cachectl.h | 41 - sysdeps/unix/sysv/linux/mips/sys/procfs.h | 126 - sysdeps/unix/sysv/linux/mips/sys/sysmips.h | 42 - sysdeps/unix/sysv/linux/mips/sys/ucontext.h | 125 - sysdeps/unix/sysv/linux/mips/sys/user.h | 210 - sysdeps/unix/sysv/linux/mips/syscalls.list | 23 - sysdeps/unix/sysv/linux/mips/sysdep-cancel.h | 190 - sysdeps/unix/sysv/linux/mips/ucontext_i.sym | 52 - sysdeps/unix/sysv/linux/mips/ustat.c | 35 - sysdeps/unix/sysv/linux/mips/vfork.S | 94 - sysdeps/unix/sysv/linux/mips/xstatconv.c | 201 - sysdeps/unix/sysv/linux/mmap.c | 51 - sysdeps/unix/sysv/linux/mmap64.c | 60 - sysdeps/unix/sysv/linux/mmap_internal.h | 49 - sysdeps/unix/sysv/linux/mq_close.c | 34 - sysdeps/unix/sysv/linux/mq_getattr.c | 34 - sysdeps/unix/sysv/linux/mq_notify.c | 282 - sysdeps/unix/sysv/linux/mq_open.c | 66 - sysdeps/unix/sysv/linux/mq_receive.c | 36 - sysdeps/unix/sysv/linux/mq_send.c | 35 - sysdeps/unix/sysv/linux/mq_timedreceive.c | 34 - sysdeps/unix/sysv/linux/mq_timedsend.c | 33 - sysdeps/unix/sysv/linux/mq_unlink.c | 49 - sysdeps/unix/sysv/linux/msgctl.c | 71 - sysdeps/unix/sysv/linux/msgget.c | 35 - sysdeps/unix/sysv/linux/msgrcv.c | 34 - sysdeps/unix/sysv/linux/msgsnd.c | 33 - sysdeps/unix/sysv/linux/msync.c | 26 - sysdeps/unix/sysv/linux/nanosleep.c | 30 - sysdeps/unix/sysv/linux/net/ethernet.h | 84 - sysdeps/unix/sysv/linux/net/if_arp.h | 182 - sysdeps/unix/sysv/linux/net/if_packet.h | 36 - sysdeps/unix/sysv/linux/net/if_ppp.h | 171 - sysdeps/unix/sysv/linux/net/if_shaper.h | 58 - sysdeps/unix/sysv/linux/net/if_slip.h | 24 - sysdeps/unix/sysv/linux/net/ppp-comp.h | 1 - sysdeps/unix/sysv/linux/net/ppp_defs.h | 8 - sysdeps/unix/sysv/linux/net/route.h | 144 - sysdeps/unix/sysv/linux/netash/ash.h | 39 - sysdeps/unix/sysv/linux/netatalk/at.h | 28 - sysdeps/unix/sysv/linux/netax25/ax25.h | 170 - sysdeps/unix/sysv/linux/neteconet/ec.h | 51 - sysdeps/unix/sysv/linux/netinet/if_ether.h | 104 - sysdeps/unix/sysv/linux/netinet/if_fddi.h | 34 - sysdeps/unix/sysv/linux/netinet/if_tr.h | 110 - sysdeps/unix/sysv/linux/netipx/ipx.h | 111 - sysdeps/unix/sysv/linux/netiucv/iucv.h | 48 - sysdeps/unix/sysv/linux/netlink_assert_response.c | 106 - sysdeps/unix/sysv/linux/netlinkaccess.h | 58 - sysdeps/unix/sysv/linux/netpacket/packet.h | 80 - sysdeps/unix/sysv/linux/netrom/netrom.h | 83 - sysdeps/unix/sysv/linux/netrose/rose.h | 118 - sysdeps/unix/sysv/linux/nfs/nfs.h | 1 - sysdeps/unix/sysv/linux/nice.c | 1 - sysdeps/unix/sysv/linux/nios2/Implies | 3 - sysdeps/unix/sysv/linux/nios2/Makefile | 13 - sysdeps/unix/sysv/linux/nios2/Versions | 6 - sysdeps/unix/sysv/linux/nios2/arch-fork.h | 33 - sysdeps/unix/sysv/linux/nios2/atomic-machine.h | 95 - sysdeps/unix/sysv/linux/nios2/bits/mman.h | 42 - sysdeps/unix/sysv/linux/nios2/c++-types.data | 67 - sysdeps/unix/sysv/linux/nios2/cacheflush.c | 29 - sysdeps/unix/sysv/linux/nios2/clone.S | 95 - sysdeps/unix/sysv/linux/nios2/configure | 4 - sysdeps/unix/sysv/linux/nios2/configure.ac | 4 - sysdeps/unix/sysv/linux/nios2/getcontext.S | 66 - sysdeps/unix/sysv/linux/nios2/ipc_priv.h | 21 - sysdeps/unix/sysv/linux/nios2/kernel_rt_sigframe.h | 26 - sysdeps/unix/sysv/linux/nios2/ld.abilist | 10 - .../unix/sysv/linux/nios2/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/nios2/libanl.abilist | 5 - sysdeps/unix/sysv/linux/nios2/libc.abilist | 2146 ---- sysdeps/unix/sysv/linux/nios2/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/nios2/libdl.abilist | 10 - sysdeps/unix/sysv/linux/nios2/libm.abilist | 430 - sysdeps/unix/sysv/linux/nios2/libnsl.abilist | 122 - sysdeps/unix/sysv/linux/nios2/libpthread.abilist | 223 - sysdeps/unix/sysv/linux/nios2/libresolv.abilist | 92 - sysdeps/unix/sysv/linux/nios2/librt.abilist | 36 - sysdeps/unix/sysv/linux/nios2/libthread_db.abilist | 41 - sysdeps/unix/sysv/linux/nios2/libutil.abilist | 7 - sysdeps/unix/sysv/linux/nios2/localplt.data | 38 - sysdeps/unix/sysv/linux/nios2/makecontext.c | 79 - sysdeps/unix/sysv/linux/nios2/profil-counter.h | 2 - sysdeps/unix/sysv/linux/nios2/setcontext.S | 115 - sysdeps/unix/sysv/linux/nios2/shlib-versions | 2 - sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h | 35 - sysdeps/unix/sysv/linux/nios2/swapcontext.S | 125 - sysdeps/unix/sysv/linux/nios2/sys/cachectl.h | 33 - sysdeps/unix/sysv/linux/nios2/sys/procfs.h | 123 - sysdeps/unix/sysv/linux/nios2/sys/ucontext.h | 62 - sysdeps/unix/sysv/linux/nios2/sys/user.h | 58 - sysdeps/unix/sysv/linux/nios2/syscall.S | 36 - sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h | 141 - sysdeps/unix/sysv/linux/nios2/sysdep.S | 50 - sysdeps/unix/sysv/linux/nios2/sysdep.h | 264 - sysdeps/unix/sysv/linux/nios2/ucontext_i.sym | 29 - sysdeps/unix/sysv/linux/nios2/vfork.S | 34 - sysdeps/unix/sysv/linux/not-cancel.h | 109 - sysdeps/unix/sysv/linux/nptl-signals.h | 85 - sysdeps/unix/sysv/linux/nscd_setup_thread.c | 49 - sysdeps/unix/sysv/linux/ntp_gettime.c | 41 - sysdeps/unix/sysv/linux/ntp_gettimex.c | 42 - sysdeps/unix/sysv/linux/open.c | 51 - sysdeps/unix/sysv/linux/open64.c | 59 - sysdeps/unix/sysv/linux/open_by_handle_at.c | 37 - sysdeps/unix/sysv/linux/openat.c | 61 - sysdeps/unix/sysv/linux/openat64.c | 4 - sysdeps/unix/sysv/linux/opendir.c | 20 - sysdeps/unix/sysv/linux/opensock.c | 114 - sysdeps/unix/sysv/linux/pathconf.c | 293 - sysdeps/unix/sysv/linux/pathconf.h | 40 - sysdeps/unix/sysv/linux/paths.h | 75 - sysdeps/unix/sysv/linux/pause.c | 35 - sysdeps/unix/sysv/linux/personality.c | 49 - sysdeps/unix/sysv/linux/poll.c | 46 - sysdeps/unix/sysv/linux/posix_fadvise.c | 74 - sysdeps/unix/sysv/linux/posix_fadvise64.c | 85 - sysdeps/unix/sysv/linux/posix_fallocate.c | 37 - sysdeps/unix/sysv/linux/posix_fallocate64.c | 44 - sysdeps/unix/sysv/linux/posix_madvise.c | 37 - sysdeps/unix/sysv/linux/powerpc/Implies | 1 - sysdeps/unix/sysv/linux/powerpc/Makefile | 39 - sysdeps/unix/sysv/linux/powerpc/Versions | 19 - sysdeps/unix/sysv/linux/powerpc/arch-fork.h | 1 - .../unix/sysv/linux/powerpc/bits/environments.h | 96 - sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h | 62 - sysdeps/unix/sysv/linux/powerpc/bits/ioctl-types.h | 77 - sysdeps/unix/sysv/linux/powerpc/bits/ipc.h | 54 - sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h | 100 - sysdeps/unix/sysv/linux/powerpc/bits/mman.h | 49 - sysdeps/unix/sysv/linux/powerpc/bits/msq.h | 83 - sysdeps/unix/sysv/linux/powerpc/bits/ppc.h | 33 - sysdeps/unix/sysv/linux/powerpc/bits/sem.h | 90 - sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h | 40 - sysdeps/unix/sysv/linux/powerpc/bits/shm.h | 112 - sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h | 32 - sysdeps/unix/sysv/linux/powerpc/bits/stat.h | 275 - sysdeps/unix/sysv/linux/powerpc/bits/termios.h | 279 - sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h | 11 - sysdeps/unix/sysv/linux/powerpc/configure | 79 - sysdeps/unix/sysv/linux/powerpc/configure.ac | 39 - sysdeps/unix/sysv/linux/powerpc/dl-brk.S | 1 - sysdeps/unix/sysv/linux/powerpc/dl-cache.h | 1 - sysdeps/unix/sysv/linux/powerpc/dl-static.c | 84 - sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c | 33 - sysdeps/unix/sysv/linux/powerpc/elision-conf.c | 83 - sysdeps/unix/sysv/linux/powerpc/elision-conf.h | 42 - sysdeps/unix/sysv/linux/powerpc/elision-lock.c | 86 - sysdeps/unix/sysv/linux/powerpc/elision-timed.c | 28 - sysdeps/unix/sysv/linux/powerpc/elision-trylock.c | 69 - sysdeps/unix/sysv/linux/powerpc/elision-unlock.c | 43 - sysdeps/unix/sysv/linux/powerpc/force-elision.h | 28 - sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c | 107 - .../unix/sysv/linux/powerpc/get_timebase_freq.c | 27 - sysdeps/unix/sysv/linux/powerpc/getdents64.c | 1 - sysdeps/unix/sysv/linux/powerpc/getmsg.c | 1 - sysdeps/unix/sysv/linux/powerpc/gettimeofday.c | 85 - sysdeps/unix/sysv/linux/powerpc/htm.h | 171 - sysdeps/unix/sysv/linux/powerpc/init-first.c | 85 - sysdeps/unix/sysv/linux/powerpc/ioctl.c | 64 - sysdeps/unix/sysv/linux/powerpc/ipc_priv.h | 39 - sysdeps/unix/sysv/linux/powerpc/kernel-features.h | 51 - sysdeps/unix/sysv/linux/powerpc/kernel_termios.h | 53 - sysdeps/unix/sysv/linux/powerpc/ldconfig.h | 27 - sysdeps/unix/sysv/linux/powerpc/ldd-rewrite.sed | 15 - sysdeps/unix/sysv/linux/powerpc/ldsodefs.h | 33 - sysdeps/unix/sysv/linux/powerpc/libc-start.c | 105 - sysdeps/unix/sysv/linux/powerpc/libc-vdso.h | 74 - sysdeps/unix/sysv/linux/powerpc/lowlevellock.h | 48 - sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h | 8 - .../unix/sysv/linux/powerpc/powerpc32/405/Implies | 2 - .../unix/sysv/linux/powerpc/powerpc32/440/Implies | 2 - .../unix/sysv/linux/powerpc/powerpc32/464/Implies | 2 - .../unix/sysv/linux/powerpc/powerpc32/476/Implies | 2 - .../unix/sysv/linux/powerpc/powerpc32/970/Implies | 2 - sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile | 10 - sysdeps/unix/sysv/linux/powerpc/powerpc32/Versions | 46 - .../sysv/linux/powerpc/powerpc32/____longjmp_chk.S | 76 - .../unix/sysv/linux/powerpc/powerpc32/a2/Implies | 2 - sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S | 52 - .../sysv/linux/powerpc/powerpc32/c++-types.data | 67 - .../unix/sysv/linux/powerpc/powerpc32/cell/Implies | 2 - .../sysv/linux/powerpc/powerpc32/cell/fpu/Implies | 3 - sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S | 101 - .../unix/sysv/linux/powerpc/powerpc32/configure | 4 - .../unix/sysv/linux/powerpc/powerpc32/configure.ac | 4 - .../linux/powerpc/powerpc32/e500/nofpu/Implies | 3 - sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c | 1 - .../sysv/linux/powerpc/powerpc32/fpu/fe_mask.c | 33 - .../sysv/linux/powerpc/powerpc32/fpu/fe_nomask.c | 37 - .../sysv/linux/powerpc/powerpc32/fpu/libc.abilist | 2475 ----- .../sysv/linux/powerpc/powerpc32/fpu/libm.abilist | 578 - .../sysv/linux/powerpc/powerpc32/fpu/localplt.data | 16 - sysdeps/unix/sysv/linux/powerpc/powerpc32/fxstat.c | 1 - .../unix/sysv/linux/powerpc/powerpc32/fxstatat.c | 1 - .../linux/powerpc/powerpc32/getcontext-common.S | 284 - .../unix/sysv/linux/powerpc/powerpc32/getcontext.S | 78 - sysdeps/unix/sysv/linux/powerpc/powerpc32/glob64.c | 1 - .../sysv/linux/powerpc/powerpc32/kernel_stat.h | 51 - .../unix/sysv/linux/powerpc/powerpc32/ld.abilist | 16 - .../powerpc/powerpc32/libBrokenLocale.abilist | 2 - .../sysv/linux/powerpc/powerpc32/libanl.abilist | 5 - .../sysv/linux/powerpc/powerpc32/libcrypt.abilist | 8 - .../sysv/linux/powerpc/powerpc32/libdl.abilist | 14 - .../sysv/linux/powerpc/powerpc32/libnsl.abilist | 124 - .../linux/powerpc/powerpc32/libpthread.abilist | 262 - .../sysv/linux/powerpc/powerpc32/libresolv.abilist | 100 - .../sysv/linux/powerpc/powerpc32/librt.abilist | 47 - .../linux/powerpc/powerpc32/libthread_db.abilist | 44 - .../sysv/linux/powerpc/powerpc32/libutil.abilist | 7 - .../unix/sysv/linux/powerpc/powerpc32/lockf64.c | 1 - sysdeps/unix/sysv/linux/powerpc/powerpc32/lxstat.c | 2 - .../sysv/linux/powerpc/powerpc32/makecontext.S | 226 - .../sysv/linux/powerpc/powerpc32/nofpu/Implies | 2 - .../linux/powerpc/powerpc32/nofpu/context-e500.h | 144 - .../linux/powerpc/powerpc32/nofpu/getcontext.S | 60 - .../linux/powerpc/powerpc32/nofpu/libc.abilist | 2521 ----- .../linux/powerpc/powerpc32/nofpu/libm.abilist | 577 - .../linux/powerpc/powerpc32/nofpu/localplt.data | 46 - .../linux/powerpc/powerpc32/nofpu/setcontext.S | 60 - .../linux/powerpc/powerpc32/nofpu/swapcontext.S | 60 - .../unix/sysv/linux/powerpc/powerpc32/scandir64.c | 1 - .../linux/powerpc/powerpc32/setcontext-common.S | 306 - .../unix/sysv/linux/powerpc/powerpc32/setcontext.S | 80 - .../linux/powerpc/powerpc32/swapcontext-common.S | 529 - .../sysv/linux/powerpc/powerpc32/swapcontext.S | 78 - .../sysv/linux/powerpc/powerpc32/syscalls.list | 10 - .../sysv/linux/powerpc/powerpc32/sysdep-cancel.h | 118 - sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h | 234 - .../sysv/linux/powerpc/powerpc32/ucontext_i.sym | 26 - sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S | 38 - sysdeps/unix/sysv/linux/powerpc/powerpc32/xstat.c | 1 - .../unix/sysv/linux/powerpc/powerpc64/970/Implies | 2 - sysdeps/unix/sysv/linux/powerpc/powerpc64/Implies | 1 - sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions | 43 - .../sysv/linux/powerpc/powerpc64/____longjmp_chk.S | 68 - .../unix/sysv/linux/powerpc/powerpc64/a2/Implies | 2 - sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S | 43 - .../sysv/linux/powerpc/powerpc64/c++-types.data | 67 - .../unix/sysv/linux/powerpc/powerpc64/cell/Implies | 2 - .../sysv/linux/powerpc/powerpc64/cell/fpu/Implies | 1 - sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S | 119 - .../unix/sysv/linux/powerpc/powerpc64/configure | 233 - .../unix/sysv/linux/powerpc/powerpc64/configure.ac | 36 - .../unix/sysv/linux/powerpc/powerpc64/dl-cache.h | 24 - sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c | 65 - .../sysv/linux/powerpc/powerpc64/fpu/fe_mask.c | 35 - .../sysv/linux/powerpc/powerpc64/fpu/fe_nomask.c | 39 - .../unix/sysv/linux/powerpc/powerpc64/getcontext.S | 383 - .../sysv/linux/powerpc/powerpc64/kernel_stat.h | 21 - .../sysv/linux/powerpc/powerpc64/ld-le.abilist | 13 - .../unix/sysv/linux/powerpc/powerpc64/ld.abilist | 14 - .../unix/sysv/linux/powerpc/powerpc64/ldsodefs.h | 80 - .../powerpc/powerpc64/libBrokenLocale-le.abilist | 2 - .../powerpc/powerpc64/libBrokenLocale.abilist | 2 - .../sysv/linux/powerpc/powerpc64/libanl-le.abilist | 5 - .../sysv/linux/powerpc/powerpc64/libanl.abilist | 5 - .../sysv/linux/powerpc/powerpc64/libc-le.abilist | 2193 ---- .../unix/sysv/linux/powerpc/powerpc64/libc.abilist | 2327 ---- .../linux/powerpc/powerpc64/libcrypt-le.abilist | 8 - .../sysv/linux/powerpc/powerpc64/libcrypt.abilist | 8 - .../sysv/linux/powerpc/powerpc64/libdl-le.abilist | 10 - .../sysv/linux/powerpc/powerpc64/libdl.abilist | 12 - .../sysv/linux/powerpc/powerpc64/libm-le.abilist | 469 - .../unix/sysv/linux/powerpc/powerpc64/libm.abilist | 569 - .../sysv/linux/powerpc/powerpc64/libnsl-le.abilist | 122 - .../sysv/linux/powerpc/powerpc64/libnsl.abilist | 122 - .../linux/powerpc/powerpc64/libpthread-le.abilist | 226 - .../linux/powerpc/powerpc64/libpthread.abilist | 247 - .../linux/powerpc/powerpc64/libresolv-le.abilist | 92 - .../sysv/linux/powerpc/powerpc64/libresolv.abilist | 94 - .../sysv/linux/powerpc/powerpc64/librt-le.abilist | 36 - .../sysv/linux/powerpc/powerpc64/librt.abilist | 52 - .../powerpc/powerpc64/libthread_db-le.abilist | 41 - .../linux/powerpc/powerpc64/libthread_db.abilist | 42 - .../linux/powerpc/powerpc64/libutil-le.abilist | 7 - .../sysv/linux/powerpc/powerpc64/libutil.abilist | 7 - .../sysv/linux/powerpc/powerpc64/localplt.data | 15 - .../sysv/linux/powerpc/powerpc64/makecontext.S | 187 - .../unix/sysv/linux/powerpc/powerpc64/setcontext.S | 513 - .../sysv/linux/powerpc/powerpc64/shlib-versions | 7 - .../sysv/linux/powerpc/powerpc64/swapcontext.S | 797 -- .../sysv/linux/powerpc/powerpc64/sysdep-cancel.h | 147 - sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h | 239 - .../sysv/linux/powerpc/powerpc64/timer_create.c | 1 - .../sysv/linux/powerpc/powerpc64/timer_delete.c | 1 - .../sysv/linux/powerpc/powerpc64/timer_getoverr.c | 1 - .../sysv/linux/powerpc/powerpc64/timer_gettime.c | 1 - .../sysv/linux/powerpc/powerpc64/timer_settime.c | 1 - .../sysv/linux/powerpc/powerpc64/ucontext_i.sym | 29 - sysdeps/unix/sysv/linux/powerpc/powerpc64/umount.c | 1 - sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S | 39 - .../unix/sysv/linux/powerpc/powerpc64le/Implies | 1 - .../sysv/linux/powerpc/powerpc64le/fpu/Implies | 1 - sysdeps/unix/sysv/linux/powerpc/profil-counter.h | 2 - sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c | 61 - .../sysv/linux/powerpc/pthread_attr_setstack.c | 2 - .../sysv/linux/powerpc/pthread_attr_setstacksize.c | 9 - .../sysv/linux/powerpc/pthread_mutex_cond_lock.c | 22 - .../unix/sysv/linux/powerpc/pthread_mutex_lock.c | 22 - .../sysv/linux/powerpc/pthread_mutex_timedlock.c | 22 - .../sysv/linux/powerpc/pthread_mutex_trylock.c | 22 - sysdeps/unix/sysv/linux/powerpc/putmsg.c | 1 - sysdeps/unix/sysv/linux/powerpc/readdir64.c | 1 - sysdeps/unix/sysv/linux/powerpc/readdir64_r.c | 1 - sysdeps/unix/sysv/linux/powerpc/readelflib.c | 60 - sysdeps/unix/sysv/linux/powerpc/rt-sysdep.c | 1 - sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h | 26 - sysdeps/unix/sysv/linux/powerpc/sys/procfs.h | 139 - sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h | 199 - sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h | 193 - sysdeps/unix/sysv/linux/powerpc/sys/user.h | 40 - sysdeps/unix/sysv/linux/powerpc/syscall.S | 31 - sysdeps/unix/sysv/linux/powerpc/sysdep.c | 28 - .../unix/sysv/linux/powerpc/test-gettimebasefreq.c | 63 - sysdeps/unix/sysv/linux/powerpc/time.c | 84 - sysdeps/unix/sysv/linux/ppoll.c | 41 - sysdeps/unix/sysv/linux/pread.c | 37 - sysdeps/unix/sysv/linux/pread64.c | 40 - sysdeps/unix/sysv/linux/preadv.c | 55 - sysdeps/unix/sysv/linux/preadv2.c | 55 - sysdeps/unix/sysv/linux/preadv64.c | 56 - sysdeps/unix/sysv/linux/preadv64v2.c | 55 - sysdeps/unix/sysv/linux/prlimit.c | 74 - sysdeps/unix/sysv/linux/prof-freq.c | 29 - sysdeps/unix/sysv/linux/profil.c | 3 - sysdeps/unix/sysv/linux/pselect.c | 89 - sysdeps/unix/sysv/linux/pt-raise.c | 20 - sysdeps/unix/sysv/linux/pthread-pids.h | 30 - sysdeps/unix/sysv/linux/pthread_getaffinity.c | 59 - sysdeps/unix/sysv/linux/pthread_getcpuclockid.c | 42 - sysdeps/unix/sysv/linux/pthread_getname.c | 69 - sysdeps/unix/sysv/linux/pthread_kill.c | 59 - sysdeps/unix/sysv/linux/pthread_setaffinity.c | 59 - sysdeps/unix/sysv/linux/pthread_setname.c | 63 - sysdeps/unix/sysv/linux/pthread_sigmask.c | 54 - sysdeps/unix/sysv/linux/pthread_sigqueue.c | 73 - sysdeps/unix/sysv/linux/ptrace.c | 53 - sysdeps/unix/sysv/linux/ptsname.c | 165 - sysdeps/unix/sysv/linux/pwrite.c | 37 - sysdeps/unix/sysv/linux/pwrite64.c | 40 - sysdeps/unix/sysv/linux/pwritev.c | 55 - sysdeps/unix/sysv/linux/pwritev2.c | 51 - sysdeps/unix/sysv/linux/pwritev64.c | 56 - sysdeps/unix/sysv/linux/pwritev64v2.c | 55 - sysdeps/unix/sysv/linux/raise.c | 53 - sysdeps/unix/sysv/linux/read.c | 33 - sysdeps/unix/sysv/linux/readahead.c | 46 - sysdeps/unix/sysv/linux/readdir64.c | 7 - sysdeps/unix/sysv/linux/readdir64_r.c | 7 - sysdeps/unix/sysv/linux/readonly-area.c | 102 - sysdeps/unix/sysv/linux/readv.c | 27 - sysdeps/unix/sysv/linux/reboot.c | 29 - sysdeps/unix/sysv/linux/recv.c | 35 - sysdeps/unix/sysv/linux/recvfrom.c | 35 - sysdeps/unix/sysv/linux/recvmmsg.c | 36 - sysdeps/unix/sysv/linux/recvmsg.c | 34 - sysdeps/unix/sysv/linux/remove.c | 2 - sysdeps/unix/sysv/linux/rename.c | 35 - sysdeps/unix/sysv/linux/renameat.c | 32 - sysdeps/unix/sysv/linux/s390/Implies | 5 - sysdeps/unix/sysv/linux/s390/Makefile | 31 - sysdeps/unix/sysv/linux/s390/Versions | 16 - sysdeps/unix/sysv/linux/s390/arch-fork.h | 29 - sysdeps/unix/sysv/linux/s390/bits/elfclass.h | 38 - sysdeps/unix/sysv/linux/s390/bits/environments.h | 96 - sysdeps/unix/sysv/linux/s390/bits/fcntl.h | 71 - sysdeps/unix/sysv/linux/s390/bits/hwcap.h | 38 - sysdeps/unix/sysv/linux/s390/bits/ipc.h | 60 - sysdeps/unix/sysv/linux/s390/bits/mman.h | 41 - sysdeps/unix/sysv/linux/s390/bits/msq.h | 84 - sysdeps/unix/sysv/linux/s390/bits/sem.h | 90 - sysdeps/unix/sysv/linux/s390/bits/shm.h | 110 - sysdeps/unix/sysv/linux/s390/bits/sigaction.h | 112 - sysdeps/unix/sysv/linux/s390/bits/stat.h | 265 - sysdeps/unix/sysv/linux/s390/bits/statfs.h | 69 - sysdeps/unix/sysv/linux/s390/bits/typesizes.h | 89 - sysdeps/unix/sysv/linux/s390/bits/utmp.h | 123 - sysdeps/unix/sysv/linux/s390/bits/utmpx.h | 102 - sysdeps/unix/sysv/linux/s390/brk.c | 55 - sysdeps/unix/sysv/linux/s390/configure | 5 - sysdeps/unix/sysv/linux/s390/configure.ac | 5 - sysdeps/unix/sysv/linux/s390/dl-cache.h | 1 - sysdeps/unix/sysv/linux/s390/dl-procinfo.h | 49 - sysdeps/unix/sysv/linux/s390/elision-conf.c | 82 - sysdeps/unix/sysv/linux/s390/elision-conf.h | 44 - sysdeps/unix/sysv/linux/s390/elision-lock.c | 125 - sysdeps/unix/sysv/linux/s390/elision-timed.c | 26 - sysdeps/unix/sysv/linux/s390/elision-trylock.c | 97 - sysdeps/unix/sysv/linux/s390/elision-unlock.c | 61 - sysdeps/unix/sysv/linux/s390/force-elision.h | 28 - sysdeps/unix/sysv/linux/s390/fpu/Implies | 2 - sysdeps/unix/sysv/linux/s390/fpu/s_fma.c | 5 - sysdeps/unix/sysv/linux/s390/htm.h | 187 - sysdeps/unix/sysv/linux/s390/init-first.c | 60 - sysdeps/unix/sysv/linux/s390/jmp-unwind.c | 33 - sysdeps/unix/sysv/linux/s390/kernel-features.h | 52 - sysdeps/unix/sysv/linux/s390/ldconfig.h | 25 - sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed | 15 - sysdeps/unix/sysv/linux/s390/libanl.abilist | 5 - sysdeps/unix/sysv/linux/s390/libc-vdso.h | 38 - sysdeps/unix/sysv/linux/s390/localplt.data | 16 - sysdeps/unix/sysv/linux/s390/longjmp_chk.c | 48 - sysdeps/unix/sysv/linux/s390/lowlevellock.h | 50 - sysdeps/unix/sysv/linux/s390/mmap_internal.h | 32 - sysdeps/unix/sysv/linux/s390/nldbl-abi.h | 8 - sysdeps/unix/sysv/linux/s390/opensock.c | 2 - sysdeps/unix/sysv/linux/s390/pt-longjmp.c | 33 - sysdeps/unix/sysv/linux/s390/pt-vfork.S | 1 - .../unix/sysv/linux/s390/pthread_mutex_cond_lock.c | 22 - sysdeps/unix/sysv/linux/s390/pthread_mutex_lock.c | 22 - .../unix/sysv/linux/s390/pthread_mutex_timedlock.c | 22 - .../unix/sysv/linux/s390/pthread_mutex_trylock.c | 22 - sysdeps/unix/sysv/linux/s390/readelflib.c | 59 - sysdeps/unix/sysv/linux/s390/rt-sysdep.S | 1 - sysdeps/unix/sysv/linux/s390/s390-32/Makefile | 31 - sysdeps/unix/sysv/linux/s390/s390-32/Versions | 58 - .../unix/sysv/linux/s390/s390-32/____longjmp_chk.c | 54 - .../sysv/linux/s390/s390-32/__makecontext_ret.S | 56 - sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c | 1 - .../unix/sysv/linux/s390/s390-32/c++-types.data | 67 - sysdeps/unix/sysv/linux/s390/s390-32/clone.S | 65 - sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c | 1 - sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c | 1 - sysdeps/unix/sysv/linux/s390/s390-32/fxstatat.c | 1 - sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S | 89 - sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c | 1 - sysdeps/unix/sysv/linux/s390/s390-32/getutent.c | 32 - sysdeps/unix/sysv/linux/s390/s390-32/getutent_r.c | 38 - sysdeps/unix/sysv/linux/s390/s390-32/getutid.c | 32 - sysdeps/unix/sysv/linux/s390/s390-32/getutid_r.c | 35 - sysdeps/unix/sysv/linux/s390/s390-32/getutline.c | 32 - sysdeps/unix/sysv/linux/s390/s390-32/getutline_r.c | 34 - sysdeps/unix/sysv/linux/s390/s390-32/getutmp.c | 37 - sysdeps/unix/sysv/linux/s390/s390-32/getutxent.c | 30 - sysdeps/unix/sysv/linux/s390/s390-32/getutxid.c | 30 - sysdeps/unix/sysv/linux/s390/s390-32/getutxline.c | 30 - sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist | 12 - .../linux/s390/s390-32/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist | 2476 ----- .../unix/sysv/linux/s390/s390-32/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/s390/s390-32/libdl.abilist | 14 - sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist | 565 - .../unix/sysv/linux/s390/s390-32/libnsl.abilist | 124 - .../sysv/linux/s390/s390-32/libpthread.abilist | 260 - .../unix/sysv/linux/s390/s390-32/libresolv.abilist | 100 - sysdeps/unix/sysv/linux/s390/s390-32/librt.abilist | 47 - .../sysv/linux/s390/s390-32/libthread_db.abilist | 44 - .../unix/sysv/linux/s390/s390-32/libutil.abilist | 9 - sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c | 1 - sysdeps/unix/sysv/linux/s390/s390-32/login.c | 35 - sysdeps/unix/sysv/linux/s390/s390-32/login32.c | 36 - sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c | 1 - sysdeps/unix/sysv/linux/s390/s390-32/makecontext.c | 96 - .../unix/sysv/linux/s390/s390-32/posix_fadvise64.c | 67 - .../unix/sysv/linux/s390/s390-32/profil-counter.h | 26 - sysdeps/unix/sysv/linux/s390/s390-32/pututxline.c | 30 - sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c | 1 - sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c | 1 - .../unix/sysv/linux/s390/s390-32/register-dump.h | 129 - sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c | 1 - sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S | 72 - sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S | 108 - sysdeps/unix/sysv/linux/s390/s390-32/syscall.S | 67 - sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list | 20 - .../unix/sysv/linux/s390/s390-32/sysdep-cancel.h | 139 - sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S | 74 - sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h | 337 - sysdeps/unix/sysv/linux/s390/s390-32/updwtmp.c | 32 - sysdeps/unix/sysv/linux/s390/s390-32/updwtmpx.c | 30 - sysdeps/unix/sysv/linux/s390/s390-32/utmp-compat.h | 21 - .../unix/sysv/linux/s390/s390-32/utmp-convert.h | 86 - sysdeps/unix/sysv/linux/s390/s390-32/utmp32.c | 184 - sysdeps/unix/sysv/linux/s390/s390-32/utmp32.h | 51 - .../unix/sysv/linux/s390/s390-32/utmpx-convert.h | 85 - sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.c | 139 - sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.h | 59 - .../unix/sysv/linux/s390/s390-32/versionsort64.c | 1 - sysdeps/unix/sysv/linux/s390/s390-32/vfork.S | 47 - sysdeps/unix/sysv/linux/s390/s390-32/xstat.c | 1 - sysdeps/unix/sysv/linux/s390/s390-64/Implies | 1 - sysdeps/unix/sysv/linux/s390/s390-64/Makefile | 18 - sysdeps/unix/sysv/linux/s390/s390-64/Versions | 15 - .../unix/sysv/linux/s390/s390-64/____longjmp_chk.c | 54 - .../sysv/linux/s390/s390-64/__makecontext_ret.S | 37 - .../unix/sysv/linux/s390/s390-64/c++-types.data | 67 - sysdeps/unix/sysv/linux/s390/s390-64/clone.S | 66 - sysdeps/unix/sysv/linux/s390/s390-64/configure | 15 - sysdeps/unix/sysv/linux/s390/s390-64/configure.ac | 4 - sysdeps/unix/sysv/linux/s390/s390-64/dl-cache.h | 24 - sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S | 89 - sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h | 21 - sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist | 11 - .../linux/s390/s390-64/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist | 2360 ---- .../unix/sysv/linux/s390/s390-64/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/s390/s390-64/libdl.abilist | 12 - sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist | 563 - .../unix/sysv/linux/s390/s390-64/libnsl.abilist | 122 - .../sysv/linux/s390/s390-64/libpthread.abilist | 248 - .../unix/sysv/linux/s390/s390-64/libresolv.abilist | 94 - sysdeps/unix/sysv/linux/s390/s390-64/librt.abilist | 52 - .../sysv/linux/s390/s390-64/libthread_db.abilist | 44 - .../unix/sysv/linux/s390/s390-64/libutil.abilist | 7 - sysdeps/unix/sysv/linux/s390/s390-64/makecontext.c | 96 - .../unix/sysv/linux/s390/s390-64/profil-counter.h | 26 - .../unix/sysv/linux/s390/s390-64/register-dump.h | 132 - sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S | 72 - .../unix/sysv/linux/s390/s390-64/shlib-versions | 2 - sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c | 43 - sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c | 36 - sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c | 37 - sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S | 108 - sysdeps/unix/sysv/linux/s390/s390-64/syscall.S | 68 - .../unix/sysv/linux/s390/s390-64/sysdep-cancel.h | 152 - sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S | 75 - sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h | 345 - .../unix/sysv/linux/s390/s390-64/timer_create.c | 1 - .../unix/sysv/linux/s390/s390-64/timer_delete.c | 1 - .../unix/sysv/linux/s390/s390-64/timer_getoverr.c | 1 - .../unix/sysv/linux/s390/s390-64/timer_gettime.c | 1 - .../unix/sysv/linux/s390/s390-64/timer_settime.c | 1 - sysdeps/unix/sysv/linux/s390/s390-64/vfork.S | 47 - sysdeps/unix/sysv/linux/s390/sa_len.c | 3 - sysdeps/unix/sysv/linux/s390/semtimedop.c | 36 - sysdeps/unix/sysv/linux/s390/sigcontextinfo.h | 27 - sysdeps/unix/sysv/linux/s390/sys/elf.h | 25 - sysdeps/unix/sysv/linux/s390/sys/procfs.h | 176 - sysdeps/unix/sysv/linux/s390/sys/ptrace.h | 238 - sysdeps/unix/sysv/linux/s390/sys/ucontext.h | 96 - sysdeps/unix/sysv/linux/s390/sys/user.h | 82 - sysdeps/unix/sysv/linux/s390/sysconf.c | 230 - sysdeps/unix/sysv/linux/s390/system.c | 29 - sysdeps/unix/sysv/linux/s390/ucontext_i.sym | 25 - sysdeps/unix/sysv/linux/sa_len.c | 9 - sysdeps/unix/sysv/linux/safe-fatal.h | 33 - sysdeps/unix/sysv/linux/sched_getaffinity.c | 65 - sysdeps/unix/sysv/linux/sched_getcpu.c | 39 - sysdeps/unix/sysv/linux/sched_setaffinity.c | 57 - sysdeps/unix/sysv/linux/scsi/scsi.h | 225 - sysdeps/unix/sysv/linux/scsi/scsi_ioctl.h | 31 - sysdeps/unix/sysv/linux/scsi/sg.h | 276 - sysdeps/unix/sysv/linux/segfault.c | 2 - sysdeps/unix/sysv/linux/select.c | 71 - sysdeps/unix/sysv/linux/semctl.c | 109 - sysdeps/unix/sysv/linux/semget.c | 35 - sysdeps/unix/sysv/linux/semop.c | 34 - sysdeps/unix/sysv/linux/semtimedop.c | 36 - sysdeps/unix/sysv/linux/send.c | 37 - sysdeps/unix/sysv/linux/sendmmsg.c | 37 - sysdeps/unix/sysv/linux/sendmsg.c | 34 - sysdeps/unix/sysv/linux/sendto.c | 35 - sysdeps/unix/sysv/linux/setegid.c | 41 - sysdeps/unix/sysv/linux/seteuid.c | 41 - sysdeps/unix/sysv/linux/setgid.c | 34 - sysdeps/unix/sysv/linux/setgroups.c | 36 - sysdeps/unix/sysv/linux/sethostid.c | 2 - sysdeps/unix/sysv/linux/setipv4sourcefilter.c | 65 - sysdeps/unix/sysv/linux/setregid.c | 34 - sysdeps/unix/sysv/linux/setresgid.c | 35 - sysdeps/unix/sysv/linux/setresuid.c | 35 - sysdeps/unix/sysv/linux/setreuid.c | 34 - sysdeps/unix/sysv/linux/setrlimit.c | 59 - sysdeps/unix/sysv/linux/setrlimit64.c | 46 - sysdeps/unix/sysv/linux/setsockopt.c | 35 - sysdeps/unix/sysv/linux/setsourcefilter.c | 78 - sysdeps/unix/sysv/linux/setuid.c | 33 - sysdeps/unix/sysv/linux/sh/Implies | 1 - sysdeps/unix/sysv/linux/sh/Makefile | 16 - sysdeps/unix/sysv/linux/sh/Versions | 33 - sysdeps/unix/sysv/linux/sh/____longjmp_chk.S | 122 - sysdeps/unix/sysv/linux/sh/arch-fork.h | 28 - sysdeps/unix/sysv/linux/sh/atomic-machine.h | 425 - sysdeps/unix/sysv/linux/sh/bits/fcntl.h | 50 - sysdeps/unix/sysv/linux/sh/bits/mman.h | 40 - sysdeps/unix/sysv/linux/sh/bits/shm.h | 101 - sysdeps/unix/sysv/linux/sh/brk.c | 47 - sysdeps/unix/sysv/linux/sh/c++-types.data | 67 - sysdeps/unix/sysv/linux/sh/clone.S | 103 - sysdeps/unix/sysv/linux/sh/configure | 4 - sysdeps/unix/sysv/linux/sh/configure.ac | 4 - sysdeps/unix/sysv/linux/sh/fcntl.c | 1 - sysdeps/unix/sysv/linux/sh/fxstat.c | 1 - sysdeps/unix/sysv/linux/sh/fxstatat.c | 1 - sysdeps/unix/sysv/linux/sh/kernel-features.h | 54 - sysdeps/unix/sysv/linux/sh/ld.abilist | 12 - sysdeps/unix/sysv/linux/sh/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/sh/libanl.abilist | 5 - sysdeps/unix/sysv/linux/sh/libc.abilist | 2178 ---- sysdeps/unix/sysv/linux/sh/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/sh/libdl.abilist | 14 - sysdeps/unix/sysv/linux/sh/libm.abilist | 433 - sysdeps/unix/sysv/linux/sh/libnsl.abilist | 124 - sysdeps/unix/sysv/linux/sh/libpthread.abilist | 245 - sysdeps/unix/sysv/linux/sh/libresolv.abilist | 100 - sysdeps/unix/sysv/linux/sh/librt.abilist | 47 - sysdeps/unix/sysv/linux/sh/libthread_db.abilist | 44 - sysdeps/unix/sysv/linux/sh/libutil.abilist | 7 - sysdeps/unix/sysv/linux/sh/localplt.data | 21 - sysdeps/unix/sysv/linux/sh/lockf64.c | 1 - sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h | 80 - sysdeps/unix/sysv/linux/sh/lxstat.c | 2 - sysdeps/unix/sysv/linux/sh/makecontext.S | 160 - sysdeps/unix/sysv/linux/sh/pipe.S | 42 - sysdeps/unix/sysv/linux/sh/profil-counter.h | 32 - sysdeps/unix/sysv/linux/sh/pt-vfork.S | 1 - sysdeps/unix/sysv/linux/sh/sh3/getcontext.S | 87 - sysdeps/unix/sysv/linux/sh/sh3/register-dump.h | 150 - sysdeps/unix/sysv/linux/sh/sh3/setcontext.S | 99 - sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S | 132 - sysdeps/unix/sysv/linux/sh/sh3/ucontext_i.sym | 38 - sysdeps/unix/sysv/linux/sh/sh4/getcontext.S | 132 - sysdeps/unix/sysv/linux/sh/sh4/register-dump.h | 263 - sysdeps/unix/sysv/linux/sh/sh4/setcontext.S | 141 - sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S | 218 - sysdeps/unix/sysv/linux/sh/sh4/sysdep.h | 4 - sysdeps/unix/sysv/linux/sh/sh4/ucontext_i.sym | 73 - sysdeps/unix/sysv/linux/sh/shlib-versions | 5 - sysdeps/unix/sysv/linux/sh/sigaltstack-offsets.sym | 13 - sysdeps/unix/sysv/linux/sh/sigcontextinfo.h | 26 - sysdeps/unix/sysv/linux/sh/smp.h | 23 - sysdeps/unix/sysv/linux/sh/sys/procfs.h | 111 - sysdeps/unix/sysv/linux/sh/sys/ucontext.h | 127 - sysdeps/unix/sysv/linux/sh/sys/user.h | 67 - sysdeps/unix/sysv/linux/sh/syscall.S | 43 - sysdeps/unix/sysv/linux/sh/syscalls.list | 22 - sysdeps/unix/sysv/linux/sh/sysdep-cancel.h | 169 - sysdeps/unix/sysv/linux/sh/sysdep.S | 32 - sysdeps/unix/sysv/linux/sh/sysdep.h | 360 - sysdeps/unix/sysv/linux/sh/vfork.S | 52 - sysdeps/unix/sysv/linux/sh/xstat.c | 1 - sysdeps/unix/sysv/linux/shlib-versions | 2 - sysdeps/unix/sysv/linux/shm-directory.c | 147 - sysdeps/unix/sysv/linux/shmat.c | 46 - sysdeps/unix/sysv/linux/shmctl.c | 73 - sysdeps/unix/sysv/linux/shmdt.c | 35 - sysdeps/unix/sysv/linux/shmget.c | 35 - sysdeps/unix/sysv/linux/shutdown.c | 35 - sysdeps/unix/sysv/linux/sigaction.c | 69 - sysdeps/unix/sysv/linux/siglist.h | 24 - sysdeps/unix/sysv/linux/signal.c | 3 - sysdeps/unix/sysv/linux/signalfd.c | 28 - sysdeps/unix/sysv/linux/sigpending.c | 32 - sysdeps/unix/sysv/linux/sigprocmask.c | 56 - sysdeps/unix/sysv/linux/sigqueue.c | 48 - sysdeps/unix/sysv/linux/sigreturn.c | 3 - sysdeps/unix/sysv/linux/sigset-cvt-mask.h | 43 - sysdeps/unix/sysv/linux/sigsetops.h | 108 - sysdeps/unix/sysv/linux/sigstack.c | 66 - sysdeps/unix/sysv/linux/sigsuspend.c | 30 - sysdeps/unix/sysv/linux/sigtimedwait.c | 69 - sysdeps/unix/sysv/linux/sigwait.c | 107 - sysdeps/unix/sysv/linux/sigwaitinfo.c | 73 - sysdeps/unix/sysv/linux/sizes.h | 23 - sysdeps/unix/sysv/linux/socket.c | 36 - sysdeps/unix/sysv/linux/socketcall.h | 104 - sysdeps/unix/sysv/linux/socketpair.c | 35 - sysdeps/unix/sysv/linux/sparc/Implies | 1 - sysdeps/unix/sysv/linux/sparc/Makefile | 20 - sysdeps/unix/sysv/linux/sparc/Versions | 46 - sysdeps/unix/sysv/linux/sparc/a.out.h | 174 - sysdeps/unix/sysv/linux/sparc/aio_cancel.c | 33 - sysdeps/unix/sysv/linux/sparc/arch-fork.h | 27 - sysdeps/unix/sysv/linux/sparc/bits/a.out.h | 13 - sysdeps/unix/sysv/linux/sparc/bits/environments.h | 96 - sysdeps/unix/sysv/linux/sparc/bits/epoll.h | 27 - sysdeps/unix/sysv/linux/sparc/bits/errno.h | 65 - sysdeps/unix/sysv/linux/sparc/bits/eventfd.h | 31 - sysdeps/unix/sysv/linux/sparc/bits/fcntl.h | 101 - sysdeps/unix/sysv/linux/sparc/bits/inotify.h | 29 - sysdeps/unix/sysv/linux/sparc/bits/ioctls.h | 36 - sysdeps/unix/sysv/linux/sparc/bits/ipc.h | 61 - sysdeps/unix/sysv/linux/sparc/bits/local_lim.h | 99 - sysdeps/unix/sysv/linux/sparc/bits/long-double.h | 26 - sysdeps/unix/sysv/linux/sparc/bits/mman.h | 53 - sysdeps/unix/sysv/linux/sparc/bits/msq.h | 84 - sysdeps/unix/sysv/linux/sparc/bits/poll.h | 49 - sysdeps/unix/sysv/linux/sparc/bits/resource.h | 280 - sysdeps/unix/sysv/linux/sparc/bits/sem.h | 91 - sysdeps/unix/sysv/linux/sparc/bits/setjmp.h | 67 - sysdeps/unix/sysv/linux/sparc/bits/shm.h | 110 - sysdeps/unix/sysv/linux/sparc/bits/sigaction.h | 82 - sysdeps/unix/sysv/linux/sparc/bits/sigcontext.h | 82 - sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h | 12 - .../sysv/linux/sparc/bits/siginfo-consts-arch.h | 12 - sysdeps/unix/sysv/linux/sparc/bits/signalfd.h | 29 - sysdeps/unix/sysv/linux/sparc/bits/signum.h | 83 - sysdeps/unix/sysv/linux/sparc/bits/sigstack.h | 32 - sysdeps/unix/sysv/linux/sparc/bits/socket_type.h | 55 - sysdeps/unix/sysv/linux/sparc/bits/stat.h | 173 - sysdeps/unix/sysv/linux/sparc/bits/termios.h | 225 - sysdeps/unix/sysv/linux/sparc/bits/timerfd.h | 29 - sysdeps/unix/sysv/linux/sparc/bits/typesizes.h | 83 - sysdeps/unix/sysv/linux/sparc/bits/wordsize.h | 11 - sysdeps/unix/sysv/linux/sparc/configure | 5 - sysdeps/unix/sysv/linux/sparc/configure.ac | 5 - sysdeps/unix/sysv/linux/sparc/dl-cache.h | 38 - sysdeps/unix/sysv/linux/sparc/getrlimit64.c | 24 - sysdeps/unix/sysv/linux/sparc/getshmlba.c | 39 - sysdeps/unix/sysv/linux/sparc/getsysstats.c | 55 - sysdeps/unix/sysv/linux/sparc/kernel-features.h | 42 - sysdeps/unix/sysv/linux/sparc/kernel_termios.h | 37 - sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed | 3 - sysdeps/unix/sysv/linux/sparc/lowlevellock.h | 135 - sysdeps/unix/sysv/linux/sparc/pt-vfork.S | 1 - sysdeps/unix/sysv/linux/sparc/readelflib.c | 61 - sysdeps/unix/sysv/linux/sparc/rt-sysdep.c | 1 - sysdeps/unix/sysv/linux/sparc/sparc32/Implies | 3 - sysdeps/unix/sysv/linux/sparc/sparc32/Makefile | 28 - sysdeps/unix/sysv/linux/sparc/sparc32/Versions | 26 - .../sysv/linux/sparc/sparc32/____longjmp_chk.S | 113 - sysdeps/unix/sysv/linux/sparc/sparc32/brk.c | 54 - .../unix/sysv/linux/sparc/sparc32/c++-types.data | 67 - sysdeps/unix/sysv/linux/sparc/sparc32/clone.S | 90 - sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c | 1 - sysdeps/unix/sysv/linux/sparc/sparc32/fpu/Implies | 2 - sysdeps/unix/sysv/linux/sparc/sparc32/fxstat.c | 1 - sysdeps/unix/sysv/linux/sparc/sparc32/fxstatat.c | 1 - sysdeps/unix/sysv/linux/sparc/sparc32/getcontext.S | 84 - sysdeps/unix/sysv/linux/sparc/sparc32/getdents64.c | 1 - sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c | 1 - .../unix/sysv/linux/sparc/sparc32/kernel_stat.h | 35 - sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist | 12 - .../linux/sparc/sparc32/libBrokenLocale.abilist | 2 - .../unix/sysv/linux/sparc/sparc32/libanl.abilist | 5 - sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist | 2479 ----- .../unix/sysv/linux/sparc/sparc32/libcrypt.abilist | 8 - .../unix/sysv/linux/sparc/sparc32/libdl.abilist | 14 - sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist | 568 - .../unix/sysv/linux/sparc/sparc32/libnsl.abilist | 124 - .../sysv/linux/sparc/sparc32/libpthread.abilist | 259 - .../sysv/linux/sparc/sparc32/libresolv.abilist | 100 - .../unix/sysv/linux/sparc/sparc32/librt.abilist | 50 - .../sysv/linux/sparc/sparc32/libthread_db.abilist | 44 - .../unix/sysv/linux/sparc/sparc32/libutil.abilist | 7 - .../unix/sysv/linux/sparc/sparc32/localplt.data | 27 - sysdeps/unix/sysv/linux/sparc/sparc32/lockf64.c | 1 - sysdeps/unix/sysv/linux/sparc/sparc32/lxstat.c | 2 - .../unix/sysv/linux/sparc/sparc32/makecontext.c | 92 - sysdeps/unix/sysv/linux/sparc/sparc32/nldbl-abi.h | 8 - sysdeps/unix/sysv/linux/sparc/sparc32/pipe.S | 39 - .../unix/sysv/linux/sparc/sparc32/profil-counter.h | 28 - sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c | 1 - .../unix/sysv/linux/sparc/sparc32/readdir64_r.c | 1 - .../unix/sysv/linux/sparc/sparc32/register-dump.h | 335 - sysdeps/unix/sysv/linux/sparc/sparc32/scandir64.c | 1 - sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S | 118 - .../unix/sysv/linux/sparc/sparc32/shlib-versions | 1 - sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c | 88 - .../unix/sysv/linux/sparc/sparc32/sigcontextinfo.h | 31 - .../sysv/linux/sparc/sparc32/sparcv9/fpu/Implies | 3 - .../sparc/sparc32/sparcv9/fpu/multiarch/Implies | 4 - .../linux/sparc/sparc32/sparcv9/get_clockfreq.c | 1 - .../unix/sysv/linux/sparc/sparc32/swapcontext.S | 118 - sysdeps/unix/sysv/linux/sparc/sparc32/syscall.S | 37 - .../unix/sysv/linux/sparc/sparc32/syscalls.list | 19 - .../unix/sysv/linux/sparc/sparc32/sysdep-cancel.h | 111 - sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h | 147 - .../unix/sysv/linux/sparc/sparc32/ucontext_i.sym | 61 - sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S | 41 - sysdeps/unix/sysv/linux/sparc/sparc32/xstat.c | 1 - sysdeps/unix/sysv/linux/sparc/sparc64/Implies | 1 - sysdeps/unix/sysv/linux/sparc/sparc64/Makefile | 9 - sysdeps/unix/sysv/linux/sparc/sparc64/Versions | 19 - .../sysv/linux/sparc/sparc64/____longjmp_chk.S | 90 - sysdeps/unix/sysv/linux/sparc/sparc64/__longjmp.S | 1 - .../sysv/linux/sparc/sparc64/__start_context.S | 36 - sysdeps/unix/sysv/linux/sparc/sparc64/brk.S | 105 - .../unix/sysv/linux/sparc/sparc64/bsd-_setjmp.S | 1 - sysdeps/unix/sysv/linux/sparc/sparc64/bsd-setjmp.S | 1 - .../unix/sysv/linux/sparc/sparc64/c++-types.data | 67 - sysdeps/unix/sysv/linux/sparc/sparc64/clone.S | 87 - sysdeps/unix/sysv/linux/sparc/sparc64/configure | 15 - sysdeps/unix/sysv/linux/sparc/sparc64/configure.ac | 4 - sysdeps/unix/sysv/linux/sparc/sparc64/dl-brk.S | 1 - sysdeps/unix/sysv/linux/sparc/sparc64/dl-cache.h | 24 - .../unix/sysv/linux/sparc/sparc64/dl-fxstatat64.c | 1 - sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c | 1 - sysdeps/unix/sysv/linux/sparc/sparc64/fxstatat.c | 1 - .../unix/sysv/linux/sparc/sparc64/get_clockfreq.c | 250 - sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S | 64 - sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h | 41 - .../unix/sysv/linux/sparc/sparc64/kernel_stat.h | 48 - sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist | 11 - .../linux/sparc/sparc64/libBrokenLocale.abilist | 2 - .../unix/sysv/linux/sparc/sparc64/libanl.abilist | 5 - sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist | 2220 ---- .../unix/sysv/linux/sparc/sparc64/libcrypt.abilist | 8 - .../unix/sysv/linux/sparc/sparc64/libdl.abilist | 14 - sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist | 464 - .../unix/sysv/linux/sparc/sparc64/libnsl.abilist | 124 - .../sysv/linux/sparc/sparc64/libpthread.abilist | 247 - .../sysv/linux/sparc/sparc64/libresolv.abilist | 100 - .../unix/sysv/linux/sparc/sparc64/librt.abilist | 56 - .../sysv/linux/sparc/sparc64/libthread_db.abilist | 44 - .../unix/sysv/linux/sparc/sparc64/libutil.abilist | 7 - .../unix/sysv/linux/sparc/sparc64/localplt.data | 29 - sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S | 51 - sysdeps/unix/sysv/linux/sparc/sparc64/lxstat.c | 1 - .../unix/sysv/linux/sparc/sparc64/makecontext.c | 57 - .../unix/sysv/linux/sparc/sparc64/personality.c | 3 - sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S | 40 - .../unix/sysv/linux/sparc/sparc64/profil-counter.h | 28 - .../unix/sysv/linux/sparc/sparc64/register-dump.h | 256 - sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S | 38 - sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S | 67 - .../unix/sysv/linux/sparc/sparc64/shlib-versions | 5 - sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c | 78 - .../unix/sysv/linux/sparc/sparc64/sigcontextinfo.h | 31 - sysdeps/unix/sysv/linux/sparc/sparc64/sigjmp.S | 1 - sysdeps/unix/sysv/linux/sparc/sparc64/sigpending.c | 33 - .../unix/sysv/linux/sparc/sparc64/sigprocmask.c | 33 - sysdeps/unix/sysv/linux/sparc/sparc64/sizes.h | 23 - .../unix/sysv/linux/sparc/sparc64/swapcontext.c | 47 - sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S | 39 - .../unix/sysv/linux/sparc/sparc64/syscalls.list | 10 - .../unix/sysv/linux/sparc/sparc64/sysdep-cancel.h | 109 - sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h | 162 - sysdeps/unix/sysv/linux/sparc/sparc64/time.c | 1 - .../unix/sysv/linux/sparc/sparc64/timer_create.c | 1 - .../unix/sysv/linux/sparc/sparc64/timer_delete.c | 1 - .../unix/sysv/linux/sparc/sparc64/timer_getoverr.c | 1 - .../unix/sysv/linux/sparc/sparc64/timer_gettime.c | 1 - .../unix/sysv/linux/sparc/sparc64/timer_settime.c | 1 - sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h | 27 - sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S | 41 - sysdeps/unix/sysv/linux/sparc/sparc64/wordexp.c | 59 - sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c | 1 - sysdeps/unix/sysv/linux/sparc/sparc64/xstatconv.c | 124 - sysdeps/unix/sysv/linux/sparc/sys/procfs.h | 210 - sysdeps/unix/sysv/linux/sparc/sys/ptrace.h | 281 - sysdeps/unix/sysv/linux/sparc/sys/trap.h | 7 - sysdeps/unix/sysv/linux/sparc/sys/ucontext.h | 274 - sysdeps/unix/sysv/linux/sparc/sys/user.h | 86 - sysdeps/unix/sysv/linux/sparc/sysdep.c | 1 - sysdeps/unix/sysv/linux/sparc/sysdep.h | 185 - sysdeps/unix/sysv/linux/sparc/system.c | 29 - sysdeps/unix/sysv/linux/spawni.c | 397 - sysdeps/unix/sysv/linux/speed.c | 97 - sysdeps/unix/sysv/linux/splice.c | 27 - sysdeps/unix/sysv/linux/statfs64.c | 95 - sysdeps/unix/sysv/linux/statvfs.c | 44 - sysdeps/unix/sysv/linux/statvfs64.c | 69 - sysdeps/unix/sysv/linux/sync_file_range.c | 33 - sysdeps/unix/sysv/linux/sys/acct.h | 106 - sysdeps/unix/sysv/linux/sys/epoll.h | 138 - sysdeps/unix/sysv/linux/sys/eventfd.h | 44 - sysdeps/unix/sysv/linux/sys/fanotify.h | 38 - sysdeps/unix/sysv/linux/sys/fsuid.h | 35 - sysdeps/unix/sysv/linux/sys/inotify.h | 99 - sysdeps/unix/sysv/linux/sys/kd.h | 34 - sysdeps/unix/sysv/linux/sys/klog.h | 33 - sysdeps/unix/sysv/linux/sys/mount.h | 150 - sysdeps/unix/sysv/linux/sys/pci.h | 24 - sysdeps/unix/sysv/linux/sys/personality.h | 80 - sysdeps/unix/sysv/linux/sys/prctl.h | 31 - sysdeps/unix/sysv/linux/sys/procfs.h | 114 - sysdeps/unix/sysv/linux/sys/ptrace.h | 229 - sysdeps/unix/sysv/linux/sys/quota.h | 135 - sysdeps/unix/sysv/linux/sys/raw.h | 38 - sysdeps/unix/sysv/linux/sys/reboot.h | 54 - sysdeps/unix/sysv/linux/sys/signalfd.h | 57 - sysdeps/unix/sysv/linux/sys/soundcard.h | 1 - sysdeps/unix/sysv/linux/sys/swap.h | 43 - sysdeps/unix/sysv/linux/sys/syscall.h | 34 - sysdeps/unix/sysv/linux/sys/sysctl.h | 73 - sysdeps/unix/sysv/linux/sys/sysinfo.h | 47 - sysdeps/unix/sysv/linux/sys/timerfd.h | 55 - sysdeps/unix/sysv/linux/sys/timex.h | 71 - sysdeps/unix/sysv/linux/sys/ttydefaults.h | 100 - sysdeps/unix/sysv/linux/sys/user.h | 1 - sysdeps/unix/sysv/linux/sys/vt.h | 1 - sysdeps/unix/sysv/linux/syscalls.list | 111 - sysdeps/unix/sysv/linux/sysconf.c | 146 - sysdeps/unix/sysv/linux/sysctl.c | 43 - sysdeps/unix/sysv/linux/sysctl.mk | 3 - sysdeps/unix/sysv/linux/sysdep-vdso.h | 98 - sysdeps/unix/sysv/linux/sysdep.h | 68 - sysdeps/unix/sysv/linux/syslog.c | 4 - sysdeps/unix/sysv/linux/system.c | 76 - sysdeps/unix/sysv/linux/tcdrain.c | 30 - sysdeps/unix/sysv/linux/tcflow.c | 28 - sysdeps/unix/sysv/linux/tcflush.c | 28 - sysdeps/unix/sysv/linux/tcgetattr.c | 79 - sysdeps/unix/sysv/linux/tcgetpgrp.c | 1 - sysdeps/unix/sysv/linux/tcsendbrk.c | 44 - sysdeps/unix/sysv/linux/tcsetattr.c | 80 - sysdeps/unix/sysv/linux/tcsetpgrp.c | 1 - sysdeps/unix/sysv/linux/tee.c | 26 - sysdeps/unix/sysv/linux/termio.h | 6 - sysdeps/unix/sysv/linux/test-errno-linux.c | 181 - sysdeps/unix/sysv/linux/tile/Implies | 1 - sysdeps/unix/sysv/linux/tile/Makefile | 28 - sysdeps/unix/sysv/linux/tile/Versions | 18 - sysdeps/unix/sysv/linux/tile/arch-fork.h | 29 - sysdeps/unix/sysv/linux/tile/bits/environments.h | 100 - sysdeps/unix/sysv/linux/tile/bits/local_lim.h | 100 - sysdeps/unix/sysv/linux/tile/bits/mman.h | 40 - sysdeps/unix/sysv/linux/tile/bits/sigaction.h | 77 - sysdeps/unix/sysv/linux/tile/bits/siginfo-arch.h | 10 - .../sysv/linux/tile/bits/siginfo-consts-arch.h | 14 - sysdeps/unix/sysv/linux/tile/cacheflush.c | 34 - sysdeps/unix/sysv/linux/tile/clone.S | 178 - sysdeps/unix/sysv/linux/tile/dl-static.c | 84 - sysdeps/unix/sysv/linux/tile/getcontext.S | 95 - sysdeps/unix/sysv/linux/tile/init-first.c | 48 - sysdeps/unix/sysv/linux/tile/ipc_priv.h | 21 - sysdeps/unix/sysv/linux/tile/kernel-features.h | 27 - sysdeps/unix/sysv/linux/tile/ldsodefs.h | 32 - sysdeps/unix/sysv/linux/tile/libc-vdso.h | 42 - sysdeps/unix/sysv/linux/tile/makecontext.c | 67 - sysdeps/unix/sysv/linux/tile/profil-counter.h | 26 - sysdeps/unix/sysv/linux/tile/pt-vfork.c | 1 - sysdeps/unix/sysv/linux/tile/set_dataplane.c | 39 - sysdeps/unix/sysv/linux/tile/setcontext.S | 206 - sysdeps/unix/sysv/linux/tile/shlib-versions | 2 - sysdeps/unix/sysv/linux/tile/sigcontextinfo.h | 27 - sysdeps/unix/sysv/linux/tile/swapcontext.S | 89 - sysdeps/unix/sysv/linux/tile/sys/cachectl.h | 36 - sysdeps/unix/sysv/linux/tile/sys/procfs.h | 128 - sysdeps/unix/sysv/linux/tile/sys/ptrace.h | 196 - sysdeps/unix/sysv/linux/tile/sys/reg.h | 2 - sysdeps/unix/sysv/linux/tile/sys/ucontext.h | 72 - sysdeps/unix/sysv/linux/tile/sys/user.h | 1 - sysdeps/unix/sysv/linux/tile/syscall.S | 32 - sysdeps/unix/sysv/linux/tile/sysconf.c | 75 - sysdeps/unix/sysv/linux/tile/sysdep-cancel.h | 154 - sysdeps/unix/sysv/linux/tile/sysdep.c | 33 - sysdeps/unix/sysv/linux/tile/sysdep.h | 243 - sysdeps/unix/sysv/linux/tile/tilegx/Makefile | 6 - sysdeps/unix/sysv/linux/tile/tilegx/configure | 21 - sysdeps/unix/sysv/linux/tile/tilegx/configure.ac | 10 - sysdeps/unix/sysv/linux/tile/tilegx/ioctl.S | 41 - sysdeps/unix/sysv/linux/tile/tilegx/ldconfig.h | 26 - .../unix/sysv/linux/tile/tilegx/ldd-rewrite.sed | 1 - .../unix/sysv/linux/tile/tilegx/register-dump.h | 123 - sysdeps/unix/sysv/linux/tile/tilegx/sched_getcpu.c | 87 - .../unix/sysv/linux/tile/tilegx/tilegx32/Implies | 4 - .../unix/sysv/linux/tile/tilegx/tilegx32/Makefile | 1 - .../sysv/linux/tile/tilegx/tilegx32/c++-types.data | 67 - .../sysv/linux/tile/tilegx/tilegx32/ld.abilist | 9 - .../tile/tilegx/tilegx32/libBrokenLocale.abilist | 2 - .../sysv/linux/tile/tilegx/tilegx32/libanl.abilist | 5 - .../sysv/linux/tile/tilegx/tilegx32/libc.abilist | 2112 ---- .../linux/tile/tilegx/tilegx32/libcrypt.abilist | 8 - .../sysv/linux/tile/tilegx/tilegx32/libdl.abilist | 10 - .../sysv/linux/tile/tilegx/tilegx32/libm.abilist | 431 - .../sysv/linux/tile/tilegx/tilegx32/libnsl.abilist | 122 - .../linux/tile/tilegx/tilegx32/libpthread.abilist | 226 - .../linux/tile/tilegx/tilegx32/libresolv.abilist | 92 - .../sysv/linux/tile/tilegx/tilegx32/librt.abilist | 41 - .../tile/tilegx/tilegx32/libthread_db.abilist | 41 - .../linux/tile/tilegx/tilegx32/libutil.abilist | 7 - .../unix/sysv/linux/tile/tilegx/tilegx64/Implies | 4 - .../unix/sysv/linux/tile/tilegx/tilegx64/Makefile | 1 - .../sysv/linux/tile/tilegx/tilegx64/c++-types.data | 67 - .../sysv/linux/tile/tilegx/tilegx64/ld.abilist | 9 - .../tile/tilegx/tilegx64/libBrokenLocale.abilist | 2 - .../sysv/linux/tile/tilegx/tilegx64/libanl.abilist | 5 - .../sysv/linux/tile/tilegx/tilegx64/libc.abilist | 2112 ---- .../linux/tile/tilegx/tilegx64/libcrypt.abilist | 8 - .../sysv/linux/tile/tilegx/tilegx64/libdl.abilist | 10 - .../sysv/linux/tile/tilegx/tilegx64/libm.abilist | 431 - .../sysv/linux/tile/tilegx/tilegx64/libnsl.abilist | 122 - .../linux/tile/tilegx/tilegx64/libpthread.abilist | 226 - .../linux/tile/tilegx/tilegx64/libresolv.abilist | 92 - .../sysv/linux/tile/tilegx/tilegx64/librt.abilist | 41 - .../tile/tilegx/tilegx64/libthread_db.abilist | 41 - .../linux/tile/tilegx/tilegx64/libutil.abilist | 7 - sysdeps/unix/sysv/linux/tile/tilepro/Implies | 3 - .../unix/sysv/linux/tile/tilepro/c++-types.data | 67 - sysdeps/unix/sysv/linux/tile/tilepro/ld.abilist | 9 - sysdeps/unix/sysv/linux/tile/tilepro/ldconfig.h | 25 - .../linux/tile/tilepro/libBrokenLocale.abilist | 2 - .../unix/sysv/linux/tile/tilepro/libanl.abilist | 5 - sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist | 2112 ---- .../unix/sysv/linux/tile/tilepro/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/tile/tilepro/libdl.abilist | 10 - sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist | 431 - .../unix/sysv/linux/tile/tilepro/libnsl.abilist | 122 - .../sysv/linux/tile/tilepro/libpthread.abilist | 226 - .../unix/sysv/linux/tile/tilepro/libresolv.abilist | 92 - sysdeps/unix/sysv/linux/tile/tilepro/librt.abilist | 41 - .../sysv/linux/tile/tilepro/libthread_db.abilist | 41 - .../unix/sysv/linux/tile/tilepro/libutil.abilist | 7 - .../unix/sysv/linux/tile/tilepro/register-dump.h | 111 - sysdeps/unix/sysv/linux/tile/ucontext_i.h | 42 - sysdeps/unix/sysv/linux/tile/vfork.S | 49 - sysdeps/unix/sysv/linux/time.c | 41 - sysdeps/unix/sysv/linux/timer_create.c | 176 - sysdeps/unix/sysv/linux/timer_delete.c | 72 - sysdeps/unix/sysv/linux/timer_getoverr.c | 40 - sysdeps/unix/sysv/linux/timer_gettime.c | 41 - sysdeps/unix/sysv/linux/timer_routines.c | 191 - sysdeps/unix/sysv/linux/timer_settime.c | 43 - sysdeps/unix/sysv/linux/times.c | 67 - sysdeps/unix/sysv/linux/timespec_get.c | 46 - sysdeps/unix/sysv/linux/truncate.c | 35 - sysdeps/unix/sysv/linux/truncate64.c | 37 - sysdeps/unix/sysv/linux/tst-affinity-pid.c | 201 - sysdeps/unix/sysv/linux/tst-affinity.c | 43 - sysdeps/unix/sysv/linux/tst-align-clone.c | 95 - sysdeps/unix/sysv/linux/tst-clone.c | 60 - sysdeps/unix/sysv/linux/tst-clone2.c | 146 - sysdeps/unix/sysv/linux/tst-fallocate-common.c | 98 - sysdeps/unix/sysv/linux/tst-fallocate.c | 25 - sysdeps/unix/sysv/linux/tst-fallocate64.c | 47 - sysdeps/unix/sysv/linux/tst-fanotify.c | 61 - sysdeps/unix/sysv/linux/tst-getpid1.c | 122 - sysdeps/unix/sysv/linux/tst-personality.c | 45 - sysdeps/unix/sysv/linux/tst-quota.c | 58 - sysdeps/unix/sysv/linux/tst-setgetname.c | 302 - sysdeps/unix/sysv/linux/tst-skeleton-affinity.c | 278 - .../unix/sysv/linux/tst-skeleton-thread-affinity.c | 280 - sysdeps/unix/sysv/linux/tst-sync_file_range.c | 132 - .../unix/sysv/linux/tst-thread-affinity-pthread.c | 49 - .../unix/sysv/linux/tst-thread-affinity-pthread2.c | 95 - .../unix/sysv/linux/tst-thread-affinity-sched.c | 36 - sysdeps/unix/sysv/linux/ttyname.c | 223 - sysdeps/unix/sysv/linux/ttyname.h | 34 - sysdeps/unix/sysv/linux/ttyname_r.c | 221 - sysdeps/unix/sysv/linux/ualarm.c | 1 - sysdeps/unix/sysv/linux/umount.S | 12 - sysdeps/unix/sysv/linux/umount2.S | 13 - sysdeps/unix/sysv/linux/unlockpt.c | 48 - sysdeps/unix/sysv/linux/updwtmp.c | 33 - sysdeps/unix/sysv/linux/ustat.c | 37 - sysdeps/unix/sysv/linux/utimensat.c | 36 - sysdeps/unix/sysv/linux/utimes.c | 36 - sysdeps/unix/sysv/linux/utmp_file.c | 33 - sysdeps/unix/sysv/linux/vfork.c | 1 - sysdeps/unix/sysv/linux/vmsplice.c | 27 - sysdeps/unix/sysv/linux/wait.c | 35 - sysdeps/unix/sysv/linux/wait3.c | 1 - sysdeps/unix/sysv/linux/waitid.c | 32 - sysdeps/unix/sysv/linux/waitpid.c | 33 - sysdeps/unix/sysv/linux/wordsize-64/Versions | 5 - sysdeps/unix/sysv/linux/wordsize-64/aio_read.c | 7 - sysdeps/unix/sysv/linux/wordsize-64/aio_read64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/aio_write.c | 7 - sysdeps/unix/sysv/linux/wordsize-64/aio_write64.c | 1 - .../unix/sysv/linux/wordsize-64/dl-fxstatat64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/fstatfs64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/fstatvfs.c | 5 - sysdeps/unix/sysv/linux/wordsize-64/fstatvfs64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/fxstat.c | 45 - sysdeps/unix/sysv/linux/wordsize-64/fxstat64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c | 48 - sysdeps/unix/sysv/linux/wordsize-64/fxstatat64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/getdents.c | 4 - sysdeps/unix/sysv/linux/wordsize-64/getdents64.c | 1 - .../unix/sysv/linux/wordsize-64/getdirentries.c | 3 - .../unix/sysv/linux/wordsize-64/getdirentries64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/glob64.c | 2 - .../sysv/linux/wordsize-64/internal_statvfs64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/lio_listio.c | 13 - sysdeps/unix/sysv/linux/wordsize-64/lio_listio64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/lxstat.c | 45 - sysdeps/unix/sysv/linux/wordsize-64/lxstat64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/openat.c | 11 - sysdeps/unix/sysv/linux/wordsize-64/openat64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/readdir.c | 7 - sysdeps/unix/sysv/linux/wordsize-64/readdir64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/readdir64_r.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c | 4 - sysdeps/unix/sysv/linux/wordsize-64/sendfile64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/statfs64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/statvfs.c | 5 - sysdeps/unix/sysv/linux/wordsize-64/statvfs64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/syscalls.list | 11 - sysdeps/unix/sysv/linux/wordsize-64/xstat.c | 44 - sysdeps/unix/sysv/linux/wordsize-64/xstat64.c | 1 - sysdeps/unix/sysv/linux/write.c | 33 - sysdeps/unix/sysv/linux/writev.c | 27 - sysdeps/unix/sysv/linux/x86/Implies | 1 - sysdeps/unix/sysv/linux/x86/Makefile | 24 - sysdeps/unix/sysv/linux/x86/bits/a.out.h | 11 - sysdeps/unix/sysv/linux/x86/bits/environments.h | 105 - sysdeps/unix/sysv/linux/x86/bits/epoll.h | 29 - sysdeps/unix/sysv/linux/x86/bits/fcntl.h | 61 - sysdeps/unix/sysv/linux/x86/bits/ipctypes.h | 33 - sysdeps/unix/sysv/linux/x86/bits/mman.h | 45 - sysdeps/unix/sysv/linux/x86/bits/msq.h | 82 - sysdeps/unix/sysv/linux/x86/bits/sem.h | 86 - sysdeps/unix/sysv/linux/x86/bits/shm.h | 109 - sysdeps/unix/sysv/linux/x86/bits/sigcontext.h | 196 - sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h | 17 - sysdeps/unix/sysv/linux/x86/bits/stat.h | 210 - sysdeps/unix/sysv/linux/x86/bits/sysctl.h | 20 - sysdeps/unix/sysv/linux/x86/bits/typesizes.h | 95 - sysdeps/unix/sysv/linux/x86/elision-conf.c | 78 - sysdeps/unix/sysv/linux/x86/elision-conf.h | 41 - sysdeps/unix/sysv/linux/x86/elision-lock.c | 107 - sysdeps/unix/sysv/linux/x86/elision-timed.c | 26 - sysdeps/unix/sysv/linux/x86/elision-trylock.c | 75 - sysdeps/unix/sysv/linux/x86/elision-unlock.c | 33 - sysdeps/unix/sysv/linux/x86/force-elision.h | 26 - sysdeps/unix/sysv/linux/x86/gettimeofday.c | 61 - sysdeps/unix/sysv/linux/x86/hle.h | 75 - sysdeps/unix/sysv/linux/x86/libc-vdso.h | 36 - .../unix/sysv/linux/x86/pthread_mutex_cond_lock.c | 22 - sysdeps/unix/sysv/linux/x86/pthread_mutex_lock.c | 22 - .../unix/sysv/linux/x86/pthread_mutex_timedlock.c | 22 - .../unix/sysv/linux/x86/pthread_mutex_trylock.c | 22 - sysdeps/unix/sysv/linux/x86/sys/debugreg.h | 88 - sysdeps/unix/sysv/linux/x86/sys/elf.h | 29 - sysdeps/unix/sysv/linux/x86/sys/io.h | 183 - sysdeps/unix/sysv/linux/x86/sys/perm.h | 35 - sysdeps/unix/sysv/linux/x86/sys/procfs.h | 145 - sysdeps/unix/sysv/linux/x86/sys/reg.h | 77 - sysdeps/unix/sysv/linux/x86/sys/ucontext.h | 260 - sysdeps/unix/sysv/linux/x86/sys/user.h | 180 - sysdeps/unix/sysv/linux/x86/sys/vm86.h | 38 - sysdeps/unix/sysv/linux/x86/sysconf.c | 42 - sysdeps/unix/sysv/linux/x86/time.c | 59 - sysdeps/unix/sysv/linux/x86_64/64/Makefile | 2 - sysdeps/unix/sysv/linux/x86_64/64/c++-types.data | 67 - sysdeps/unix/sysv/linux/x86_64/64/configure | 15 - sysdeps/unix/sysv/linux/x86_64/64/configure.ac | 4 - sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h | 44 - sysdeps/unix/sysv/linux/x86_64/64/ld.abilist | 11 - .../sysv/linux/x86_64/64/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/x86_64/64/libanl.abilist | 5 - sysdeps/unix/sysv/linux/x86_64/64/libc.abilist | 2171 ---- sysdeps/unix/sysv/linux/x86_64/64/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/x86_64/64/libdl.abilist | 12 - sysdeps/unix/sysv/linux/x86_64/64/libm.abilist | 465 - sysdeps/unix/sysv/linux/x86_64/64/libnsl.abilist | 122 - .../unix/sysv/linux/x86_64/64/libpthread.abilist | 244 - .../unix/sysv/linux/x86_64/64/libresolv.abilist | 94 - sysdeps/unix/sysv/linux/x86_64/64/librt.abilist | 52 - .../unix/sysv/linux/x86_64/64/libthread_db.abilist | 43 - sysdeps/unix/sysv/linux/x86_64/64/libutil.abilist | 7 - sysdeps/unix/sysv/linux/x86_64/64/mmap_internal.h | 42 - sysdeps/unix/sysv/linux/x86_64/64/shlib-versions | 4 - sysdeps/unix/sysv/linux/x86_64/Implies | 3 - sysdeps/unix/sysv/linux/x86_64/Makefile | 15 - sysdeps/unix/sysv/linux/x86_64/Versions | 17 - sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S | 131 - sysdeps/unix/sysv/linux/x86_64/__start_context.S | 49 - sysdeps/unix/sysv/linux/x86_64/arch-fork.h | 27 - sysdeps/unix/sysv/linux/x86_64/brk.c | 41 - sysdeps/unix/sysv/linux/x86_64/cancellation.S | 115 - sysdeps/unix/sysv/linux/x86_64/clone.S | 107 - sysdeps/unix/sysv/linux/x86_64/compat-timer.h | 45 - sysdeps/unix/sysv/linux/x86_64/configure | 4 - sysdeps/unix/sysv/linux/x86_64/configure.ac | 4 - sysdeps/unix/sysv/linux/x86_64/dl-cache.h | 51 - sysdeps/unix/sysv/linux/x86_64/dl-procinfo.c | 5 - sysdeps/unix/sysv/linux/x86_64/dl-procinfo.h | 5 - sysdeps/unix/sysv/linux/x86_64/get_clockfreq.c | 1 - sysdeps/unix/sysv/linux/x86_64/getcontext.S | 87 - sysdeps/unix/sysv/linux/x86_64/init-first.c | 52 - sysdeps/unix/sysv/linux/x86_64/ipc_priv.h | 32 - sysdeps/unix/sysv/linux/x86_64/kernel-features.h | 26 - sysdeps/unix/sysv/linux/x86_64/kernel_stat.h | 21 - sysdeps/unix/sysv/linux/x86_64/ldconfig.h | 26 - sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed | 3 - sysdeps/unix/sysv/linux/x86_64/libc-cancellation.S | 21 - sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S | 19 - sysdeps/unix/sysv/linux/x86_64/libmvec.abilist | 49 - .../unix/sysv/linux/x86_64/librt-cancellation.S | 21 - .../unix/sysv/linux/x86_64/lll_timedlock_wait.c | 1 - sysdeps/unix/sysv/linux/x86_64/lll_timedwait_tid.c | 1 - sysdeps/unix/sysv/linux/x86_64/lowlevellock.S | 463 - sysdeps/unix/sysv/linux/x86_64/lowlevellock.h | 278 - sysdeps/unix/sysv/linux/x86_64/makecontext.c | 121 - sysdeps/unix/sysv/linux/x86_64/profil-counter.h | 31 - .../unix/sysv/linux/x86_64/pthread_setaffinity.c | 14 - sysdeps/unix/sysv/linux/x86_64/readelflib.c | 2 - sysdeps/unix/sysv/linux/x86_64/register-dump.h | 345 - sysdeps/unix/sysv/linux/x86_64/sched_setaffinity.c | 14 - sysdeps/unix/sysv/linux/x86_64/setcontext.S | 102 - sysdeps/unix/sysv/linux/x86_64/sigaction.c | 176 - .../unix/sysv/linux/x86_64/sigaltstack-offsets.sym | 15 - sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h | 30 - sysdeps/unix/sysv/linux/x86_64/sigpending.c | 36 - sysdeps/unix/sysv/linux/x86_64/sigprocmask.c | 38 - sysdeps/unix/sysv/linux/x86_64/swapcontext.S | 120 - sysdeps/unix/sysv/linux/x86_64/syscall.S | 42 - sysdeps/unix/sysv/linux/x86_64/syscalls.list | 21 - sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h | 109 - sysdeps/unix/sysv/linux/x86_64/sysdep.S | 40 - sysdeps/unix/sysv/linux/x86_64/sysdep.h | 392 - sysdeps/unix/sysv/linux/x86_64/timer_create.c | 65 - sysdeps/unix/sysv/linux/x86_64/timer_delete.c | 44 - sysdeps/unix/sysv/linux/x86_64/timer_getoverr.c | 38 - sysdeps/unix/sysv/linux/x86_64/timer_gettime.c | 37 - sysdeps/unix/sysv/linux/x86_64/timer_settime.c | 39 - sysdeps/unix/sysv/linux/x86_64/ucontext_i.sym | 37 - sysdeps/unix/sysv/linux/x86_64/umount.c | 30 - sysdeps/unix/sysv/linux/x86_64/vfork.S | 55 - sysdeps/unix/sysv/linux/x86_64/x32/Implies | 1 - sysdeps/unix/sysv/linux/x86_64/x32/Makefile | 11 - sysdeps/unix/sysv/linux/x86_64/x32/arch_prctl.c | 63 - sysdeps/unix/sysv/linux/x86_64/x32/c++-types.data | 67 - sysdeps/unix/sysv/linux/x86_64/x32/configure | 17 - sysdeps/unix/sysv/linux/x86_64/x32/configure.ac | 6 - sysdeps/unix/sysv/linux/x86_64/x32/dl-cache.h | 23 - sysdeps/unix/sysv/linux/x86_64/x32/fts.c | 1 - sysdeps/unix/sysv/linux/x86_64/x32/fts64.c | 1 - sysdeps/unix/sysv/linux/x86_64/x32/ftw.c | 1 - sysdeps/unix/sysv/linux/x86_64/x32/ftw64.c | 1 - sysdeps/unix/sysv/linux/x86_64/x32/getcpu.c | 32 - sysdeps/unix/sysv/linux/x86_64/x32/glob.c | 1 - sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist | 9 - .../sysv/linux/x86_64/x32/libBrokenLocale.abilist | 2 - sysdeps/unix/sysv/linux/x86_64/x32/libanl.abilist | 5 - sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist | 2112 ---- .../unix/sysv/linux/x86_64/x32/libcrypt.abilist | 8 - sysdeps/unix/sysv/linux/x86_64/x32/libdl.abilist | 10 - sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist | 463 - sysdeps/unix/sysv/linux/x86_64/x32/libnsl.abilist | 122 - .../unix/sysv/linux/x86_64/x32/libpthread.abilist | 226 - .../unix/sysv/linux/x86_64/x32/libresolv.abilist | 92 - sysdeps/unix/sysv/linux/x86_64/x32/librt.abilist | 41 - .../sysv/linux/x86_64/x32/libthread_db.abilist | 41 - sysdeps/unix/sysv/linux/x86_64/x32/libutil.abilist | 7 - sysdeps/unix/sysv/linux/x86_64/x32/llseek.S | 1 - sysdeps/unix/sysv/linux/x86_64/x32/lseek.S | 43 - sysdeps/unix/sysv/linux/x86_64/x32/lseek64.S | 1 - sysdeps/unix/sysv/linux/x86_64/x32/shlib-versions | 4 - sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list | 7 - sysdeps/unix/sysv/linux/x86_64/x32/sysctl.mk | 1 - sysdeps/unix/sysv/linux/x86_64/x32/sysdep.h | 29 - sysdeps/unix/sysv/linux/x86_64/x32/times.c | 38 - sysdeps/unix/sysv/linux/xmknod.c | 47 - sysdeps/unix/sysv/linux/xmknodat.c | 47 - sysdeps/unix/sysv/linux/xstat.c | 59 - sysdeps/unix/sysv/linux/xstat64.c | 54 - sysdeps/unix/sysv/linux/xstatconv.c | 270 - sysdeps/unix/sysv/linux/xstatconv.h | 26 - sysdeps/unix/x86_64/sysdep.S | 50 - sysdeps/unix/x86_64/sysdep.h | 34 - sysdeps/wordsize-32/Versions | 7 - sysdeps/wordsize-32/bits/wordsize.h | 21 - sysdeps/wordsize-32/divdi3-symbol-hacks.h | 31 - sysdeps/wordsize-32/divdi3.c | 342 - sysdeps/wordsize-32/llabs.c | 22 - sysdeps/wordsize-32/lldiv.c | 26 - sysdeps/wordsize-32/strtoimax.c | 27 - sysdeps/wordsize-32/strtoumax.c | 27 - sysdeps/wordsize-32/wcstoimax.c | 28 - sysdeps/wordsize-32/wcstoumax.c | 28 - sysdeps/wordsize-64/Makefile | 3 - sysdeps/wordsize-64/Versions | 6 - sysdeps/wordsize-64/bits/wordsize.h | 19 - sysdeps/wordsize-64/fts.c | 19 - sysdeps/wordsize-64/fts64.c | 1 - sysdeps/wordsize-64/ftw.c | 16 - sysdeps/wordsize-64/ftw64.c | 1 - sysdeps/wordsize-64/glob.c | 8 - sysdeps/wordsize-64/glob64.c | 1 - sysdeps/wordsize-64/labs.c | 22 - sysdeps/wordsize-64/ldiv.c | 26 - sysdeps/wordsize-64/strtoimax.c | 27 - sysdeps/wordsize-64/strtol.c | 16 - sysdeps/wordsize-64/strtol_l.c | 14 - sysdeps/wordsize-64/strtoll.c | 1 - sysdeps/wordsize-64/strtoll_l.c | 1 - sysdeps/wordsize-64/strtoul.c | 14 - sysdeps/wordsize-64/strtoul_l.c | 14 - sysdeps/wordsize-64/strtoull.c | 1 - sysdeps/wordsize-64/strtoull_l.c | 1 - sysdeps/wordsize-64/strtoumax.c | 27 - sysdeps/wordsize-64/tst-writev.c | 117 - sysdeps/wordsize-64/wcstoimax.c | 28 - sysdeps/wordsize-64/wcstol.c | 14 - sysdeps/wordsize-64/wcstol_l.c | 13 - sysdeps/wordsize-64/wcstoll.c | 1 - sysdeps/wordsize-64/wcstoll_l.c | 1 - sysdeps/wordsize-64/wcstoul.c | 14 - sysdeps/wordsize-64/wcstoul_l.c | 13 - sysdeps/wordsize-64/wcstoull.c | 1 - sysdeps/wordsize-64/wcstoull_l.c | 1 - sysdeps/wordsize-64/wcstoumax.c | 28 - sysdeps/x86/Makefile | 10 - sysdeps/x86/Versions | 5 - sysdeps/x86/bits/byteswap-16.h | 49 - sysdeps/x86/bits/byteswap.h | 155 - sysdeps/x86/bits/endian.h | 7 - sysdeps/x86/bits/flt-eval-method.h | 33 - sysdeps/x86/bits/fp-logb.h | 24 - sysdeps/x86/bits/huge_vall.h | 41 - sysdeps/x86/bits/link.h | 159 - sysdeps/x86/bits/select.h | 63 - sysdeps/x86/bits/semaphore.h | 40 - sysdeps/x86/bits/setjmp.h | 40 - sysdeps/x86/bits/string.h | 1996 ---- sysdeps/x86/bits/wordsize.h | 17 - sysdeps/x86/bits/xtitypes.h | 33 - sysdeps/x86/cacheinfo.c | 783 -- sysdeps/x86/cpu-features-offsets.sym | 23 - sysdeps/x86/cpu-features.c | 363 - sysdeps/x86/cpu-features.h | 355 - sysdeps/x86/dl-get-cpu-features.c | 27 - sysdeps/x86/dl-hwcap.h | 75 - sysdeps/x86/dl-procinfo.c | 88 - sysdeps/x86/dl-procinfo.h | 48 - sysdeps/x86/elide.h | 119 - sysdeps/x86/fpu/Makefile | 11 - sysdeps/x86/fpu/bits/fenv.h | 168 - sysdeps/x86/fpu/bits/math-vector.h | 63 - sysdeps/x86/fpu/bits/mathinline.h | 962 -- sysdeps/x86/fpu/fix-fp-int-compare-invalid.h | 28 - sysdeps/x86/fpu/include/bits/fenv.h | 48 - sysdeps/x86/fpu/powl_helper.c | 236 - sysdeps/x86/fpu/test-fenv-clear-sse.c | 45 - sysdeps/x86/fpu/test-fenv-sse-2.c | 176 - sysdeps/x86/fpu/test-fenv-sse.c | 138 - sysdeps/x86/fpu/test-fenv-x87.c | 169 - sysdeps/x86/fpu/test-flt-eval-method-387.c | 1 - sysdeps/x86/fpu/test-flt-eval-method-sse.c | 1 - sysdeps/x86/fpu/test-math-vector-sincos.h | 98 - sysdeps/x86/fpu_control.h | 109 - sysdeps/x86/init-arch.h | 75 - sysdeps/x86/libc-start.c | 28 - sysdeps/x86/linkmap.h | 16 - sysdeps/x86/nptl/bits/pthreadtypes-arch.h | 99 - sysdeps/x86/string_private.h | 20 - sysdeps/x86/tininess.h | 1 - sysdeps/x86/tst-get-cpu-features-static.c | 1 - sysdeps/x86/tst-get-cpu-features.c | 31 - sysdeps/x86_64/64/Implies-after | 1 - sysdeps/x86_64/Implies | 5 - sysdeps/x86_64/Makefile | 124 - sysdeps/x86_64/Versions | 12 - sysdeps/x86_64/____longjmp_chk.S | 1 - sysdeps/x86_64/__longjmp.S | 68 - sysdeps/x86_64/_mcount.S | 125 - sysdeps/x86_64/abort-instr.h | 2 - sysdeps/x86_64/add_n.S | 100 - sysdeps/x86_64/addmul_1.S | 114 - sysdeps/x86_64/atomic-machine.h | 482 - sysdeps/x86_64/backtrace.c | 133 - sysdeps/x86_64/bsd-_setjmp.S | 37 - sysdeps/x86_64/bsd-setjmp.S | 36 - sysdeps/x86_64/bzero.S | 1 - sysdeps/x86_64/configure | 156 - sysdeps/x86_64/configure.ac | 58 - sysdeps/x86_64/crti.S | 80 - sysdeps/x86_64/crtn.S | 45 - sysdeps/x86_64/dl-irel.h | 51 - sysdeps/x86_64/dl-lookupcfg.h | 32 - sysdeps/x86_64/dl-machine.h | 601 - sysdeps/x86_64/dl-procinfo.c | 45 - sysdeps/x86_64/dl-runtime.c | 9 - sysdeps/x86_64/dl-tls.h | 29 - sysdeps/x86_64/dl-tlsdesc.S | 245 - sysdeps/x86_64/dl-tlsdesc.h | 70 - sysdeps/x86_64/dl-trampoline.S | 147 - sysdeps/x86_64/dl-trampoline.h | 647 -- sysdeps/x86_64/ffs.c | 39 - sysdeps/x86_64/ffsll.c | 42 - sysdeps/x86_64/fpu/Implies | 1 - sysdeps/x86_64/fpu/Makefile | 239 - sysdeps/x86_64/fpu/Versions | 16 - sysdeps/x86_64/fpu/e_acosl.c | 1 - sysdeps/x86_64/fpu/e_atan2l.c | 2 - sysdeps/x86_64/fpu/e_exp10l.S | 2 - sysdeps/x86_64/fpu/e_exp2l.S | 58 - sysdeps/x86_64/fpu/e_expf.S | 339 - sysdeps/x86_64/fpu/e_expl.S | 219 - sysdeps/x86_64/fpu/e_fmodl.S | 23 - sysdeps/x86_64/fpu/e_ilogbl.S | 39 - sysdeps/x86_64/fpu/e_log10l.S | 92 - sysdeps/x86_64/fpu/e_log2l.S | 91 - sysdeps/x86_64/fpu/e_logl.S | 94 - sysdeps/x86_64/fpu/e_powl.S | 433 - sysdeps/x86_64/fpu/e_remainderl.S | 21 - sysdeps/x86_64/fpu/e_scalbl.S | 89 - sysdeps/x86_64/fpu/e_sqrt.c | 31 - sysdeps/x86_64/fpu/e_sqrtf.c | 31 - sysdeps/x86_64/fpu/e_sqrtl.c | 1 - sysdeps/x86_64/fpu/fclrexcpt.c | 52 - sysdeps/x86_64/fpu/fedisblxcpt.c | 46 - sysdeps/x86_64/fpu/feenablxcpt.c | 46 - sysdeps/x86_64/fpu/fegetenv.c | 35 - sysdeps/x86_64/fpu/fegetexcept.c | 31 - sysdeps/x86_64/fpu/fegetmode.c | 28 - sysdeps/x86_64/fpu/fegetround.c | 35 - sysdeps/x86_64/fpu/feholdexcpt.c | 41 - sysdeps/x86_64/fpu/fesetenv.c | 114 - sysdeps/x86_64/fpu/fesetexcept.c | 31 - sysdeps/x86_64/fpu/fesetmode.c | 50 - sysdeps/x86_64/fpu/fesetround.c | 48 - sysdeps/x86_64/fpu/feupdateenv.c | 52 - sysdeps/x86_64/fpu/fgetexcptflg.c | 35 - sysdeps/x86_64/fpu/fraiseexcpt.c | 121 - sysdeps/x86_64/fpu/fsetexcptflg.c | 53 - sysdeps/x86_64/fpu/ftestexcept.c | 33 - sysdeps/x86_64/fpu/libm-test-ulps | 2368 ---- sysdeps/x86_64/fpu/libm-test-ulps-name | 1 - sysdeps/x86_64/fpu/math-tests-arch.h | 53 - sysdeps/x86_64/fpu/math_ldbl.h | 100 - sysdeps/x86_64/fpu/math_private.h | 133 - sysdeps/x86_64/fpu/multiarch/Makefile | 70 - sysdeps/x86_64/fpu/multiarch/doasin-fma4.c | 4 - sysdeps/x86_64/fpu/multiarch/dosincos-fma4.c | 6 - sysdeps/x86_64/fpu/multiarch/e_asin-fma4.c | 11 - sysdeps/x86_64/fpu/multiarch/e_asin.c | 26 - sysdeps/x86_64/fpu/multiarch/e_atan2-avx.c | 9 - sysdeps/x86_64/fpu/multiarch/e_atan2-fma4.c | 10 - sysdeps/x86_64/fpu/multiarch/e_atan2.c | 18 - sysdeps/x86_64/fpu/multiarch/e_exp-avx.c | 6 - sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c | 6 - sysdeps/x86_64/fpu/multiarch/e_exp.c | 18 - sysdeps/x86_64/fpu/multiarch/e_log-avx.c | 8 - sysdeps/x86_64/fpu/multiarch/e_log-fma4.c | 8 - sysdeps/x86_64/fpu/multiarch/e_log.c | 18 - sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c | 6 - sysdeps/x86_64/fpu/multiarch/e_pow.c | 17 - sysdeps/x86_64/fpu/multiarch/halfulp-fma4.c | 4 - sysdeps/x86_64/fpu/multiarch/mpa-avx.c | 14 - sysdeps/x86_64/fpu/multiarch/mpa-fma4.c | 14 - sysdeps/x86_64/fpu/multiarch/mpatan-fma4.c | 10 - sysdeps/x86_64/fpu/multiarch/mpatan2-fma4.c | 9 - sysdeps/x86_64/fpu/multiarch/mpexp-avx.c | 9 - sysdeps/x86_64/fpu/multiarch/mpexp-fma4.c | 9 - sysdeps/x86_64/fpu/multiarch/mplog-avx.c | 8 - sysdeps/x86_64/fpu/multiarch/mplog-fma4.c | 8 - sysdeps/x86_64/fpu/multiarch/mpsqrt-fma4.c | 8 - sysdeps/x86_64/fpu/multiarch/mptan-fma4.c | 7 - sysdeps/x86_64/fpu/multiarch/s_atan-avx.c | 8 - sysdeps/x86_64/fpu/multiarch/s_atan-fma4.c | 9 - sysdeps/x86_64/fpu/multiarch/s_atan.c | 15 - sysdeps/x86_64/fpu/multiarch/s_ceil-c.c | 2 - sysdeps/x86_64/fpu/multiarch/s_ceil.S | 38 - sysdeps/x86_64/fpu/multiarch/s_ceilf-c.c | 2 - sysdeps/x86_64/fpu/multiarch/s_ceilf.S | 38 - sysdeps/x86_64/fpu/multiarch/s_floor-c.c | 3 - sysdeps/x86_64/fpu/multiarch/s_floor.S | 38 - sysdeps/x86_64/fpu/multiarch/s_floorf-c.c | 3 - sysdeps/x86_64/fpu/multiarch/s_floorf.S | 38 - sysdeps/x86_64/fpu/multiarch/s_fma.c | 50 - sysdeps/x86_64/fpu/multiarch/s_fmaf.c | 49 - sysdeps/x86_64/fpu/multiarch/s_nearbyint-c.c | 3 - sysdeps/x86_64/fpu/multiarch/s_nearbyint.S | 38 - sysdeps/x86_64/fpu/multiarch/s_nearbyintf-c.c | 3 - sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S | 38 - sysdeps/x86_64/fpu/multiarch/s_rint-c.c | 3 - sysdeps/x86_64/fpu/multiarch/s_rint.S | 38 - sysdeps/x86_64/fpu/multiarch/s_rintf-c.c | 3 - sysdeps/x86_64/fpu/multiarch/s_rintf.S | 38 - sysdeps/x86_64/fpu/multiarch/s_sin-avx.c | 5 - sysdeps/x86_64/fpu/multiarch/s_sin-fma4.c | 11 - sysdeps/x86_64/fpu/multiarch/s_sin.c | 26 - sysdeps/x86_64/fpu/multiarch/s_tan-avx.c | 6 - sysdeps/x86_64/fpu/multiarch/s_tan-fma4.c | 8 - sysdeps/x86_64/fpu/multiarch/s_tan.c | 15 - sysdeps/x86_64/fpu/multiarch/sincos32-fma4.c | 15 - sysdeps/x86_64/fpu/multiarch/slowexp-avx.c | 9 - sysdeps/x86_64/fpu/multiarch/slowexp-fma4.c | 9 - sysdeps/x86_64/fpu/multiarch/slowpow-fma4.c | 11 - sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.S | 36 - .../x86_64/fpu/multiarch/svml_d_cos2_core_sse4.S | 223 - sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.S | 36 - .../x86_64/fpu/multiarch/svml_d_cos4_core_avx2.S | 207 - sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.S | 37 - .../x86_64/fpu/multiarch/svml_d_cos8_core_avx512.S | 463 - sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.S | 36 - .../x86_64/fpu/multiarch/svml_d_exp2_core_sse4.S | 225 - sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.S | 36 - .../x86_64/fpu/multiarch/svml_d_exp4_core_avx2.S | 212 - sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.S | 37 - .../x86_64/fpu/multiarch/svml_d_exp8_core_avx512.S | 456 - sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.S | 36 - .../x86_64/fpu/multiarch/svml_d_log2_core_sse4.S | 229 - sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.S | 36 - .../x86_64/fpu/multiarch/svml_d_log4_core_avx2.S | 210 - sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.S | 37 - .../x86_64/fpu/multiarch/svml_d_log8_core_avx512.S | 468 - sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.S | 36 - .../x86_64/fpu/multiarch/svml_d_pow2_core_sse4.S | 432 - sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.S | 36 - .../x86_64/fpu/multiarch/svml_d_pow4_core_avx2.S | 387 - sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.S | 37 - .../x86_64/fpu/multiarch/svml_d_pow8_core_avx512.S | 741 -- sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.S | 36 - .../x86_64/fpu/multiarch/svml_d_sin2_core_sse4.S | 229 - sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.S | 36 - .../x86_64/fpu/multiarch/svml_d_sin4_core_avx2.S | 210 - sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.S | 37 - .../x86_64/fpu/multiarch/svml_d_sin8_core_avx512.S | 465 - sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.S | 36 - .../fpu/multiarch/svml_d_sincos2_core_sse4.S | 368 - sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.S | 36 - .../fpu/multiarch/svml_d_sincos4_core_avx2.S | 373 - sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.S | 37 - .../fpu/multiarch/svml_d_sincos8_core_avx512.S | 763 -- sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core.S | 37 - .../fpu/multiarch/svml_s_cosf16_core_avx512.S | 460 - sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core.S | 36 - .../x86_64/fpu/multiarch/svml_s_cosf4_core_sse4.S | 227 - sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core.S | 36 - .../x86_64/fpu/multiarch/svml_s_cosf8_core_avx2.S | 215 - sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core.S | 37 - .../fpu/multiarch/svml_s_expf16_core_avx512.S | 447 - sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core.S | 36 - .../x86_64/fpu/multiarch/svml_s_expf4_core_sse4.S | 212 - sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core.S | 36 - .../x86_64/fpu/multiarch/svml_s_expf8_core_avx2.S | 202 - sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core.S | 37 - .../fpu/multiarch/svml_s_logf16_core_avx512.S | 416 - sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core.S | 36 - .../x86_64/fpu/multiarch/svml_s_logf4_core_sse4.S | 194 - sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core.S | 36 - .../x86_64/fpu/multiarch/svml_s_logf8_core_avx2.S | 184 - sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core.S | 37 - .../fpu/multiarch/svml_s_powf16_core_avx512.S | 653 -- sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core.S | 36 - .../x86_64/fpu/multiarch/svml_s_powf4_core_sse4.S | 374 - sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core.S | 36 - .../x86_64/fpu/multiarch/svml_s_powf8_core_avx2.S | 357 - .../x86_64/fpu/multiarch/svml_s_sincosf16_core.S | 37 - .../fpu/multiarch/svml_s_sincosf16_core_avx512.S | 806 -- .../x86_64/fpu/multiarch/svml_s_sincosf4_core.S | 36 - .../fpu/multiarch/svml_s_sincosf4_core_sse4.S | 346 - .../x86_64/fpu/multiarch/svml_s_sincosf8_core.S | 36 - .../fpu/multiarch/svml_s_sincosf8_core_avx2.S | 389 - sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core.S | 37 - .../fpu/multiarch/svml_s_sinf16_core_avx512.S | 479 - sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core.S | 36 - .../x86_64/fpu/multiarch/svml_s_sinf4_core_sse4.S | 224 - sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core.S | 36 - .../x86_64/fpu/multiarch/svml_s_sinf8_core_avx2.S | 219 - sysdeps/x86_64/fpu/printf_fphex.c | 93 - sysdeps/x86_64/fpu/s_atanl.c | 1 - sysdeps/x86_64/fpu/s_ceill.S | 36 - sysdeps/x86_64/fpu/s_copysign.S | 50 - sysdeps/x86_64/fpu/s_copysignf.S | 45 - sysdeps/x86_64/fpu/s_copysignl.S | 22 - sysdeps/x86_64/fpu/s_cosf.S | 533 - sysdeps/x86_64/fpu/s_expm1l.S | 2 - sysdeps/x86_64/fpu/s_fabs.c | 26 - sysdeps/x86_64/fpu/s_fabsf.c | 26 - sysdeps/x86_64/fpu/s_fabsl.S | 27 - sysdeps/x86_64/fpu/s_finitel.S | 16 - sysdeps/x86_64/fpu/s_floorl.S | 35 - sysdeps/x86_64/fpu/s_fmax.S | 52 - sysdeps/x86_64/fpu/s_fmaxf.S | 52 - sysdeps/x86_64/fpu/s_fmaxl.S | 58 - sysdeps/x86_64/fpu/s_fmin.S | 52 - sysdeps/x86_64/fpu/s_fminf.S | 52 - sysdeps/x86_64/fpu/s_fminl.S | 58 - sysdeps/x86_64/fpu/s_fpclassifyl.c | 2 - sysdeps/x86_64/fpu/s_isinfl.c | 1 - sysdeps/x86_64/fpu/s_isnanl.c | 1 - sysdeps/x86_64/fpu/s_llrint.S | 32 - sysdeps/x86_64/fpu/s_llrintf.S | 32 - sysdeps/x86_64/fpu/s_llrintl.S | 34 - sysdeps/x86_64/fpu/s_log1pl.S | 74 - sysdeps/x86_64/fpu/s_logbl.c | 1 - sysdeps/x86_64/fpu/s_lrint.S | 1 - sysdeps/x86_64/fpu/s_lrintf.S | 1 - sysdeps/x86_64/fpu/s_lrintl.S | 1 - sysdeps/x86_64/fpu/s_nearbyintl.S | 19 - sysdeps/x86_64/fpu/s_nextafterl.c | 1 - sysdeps/x86_64/fpu/s_nexttoward.c | 1 - sysdeps/x86_64/fpu/s_nexttowardf.c | 1 - sysdeps/x86_64/fpu/s_rintl.c | 1 - sysdeps/x86_64/fpu/s_scalbnl.S | 17 - sysdeps/x86_64/fpu/s_signbit.S | 26 - sysdeps/x86_64/fpu/s_signbitf.S | 26 - sysdeps/x86_64/fpu/s_significandl.c | 1 - sysdeps/x86_64/fpu/s_sincosf.S | 564 - sysdeps/x86_64/fpu/s_sinf.S | 559 - sysdeps/x86_64/fpu/s_truncl.S | 36 - sysdeps/x86_64/fpu/svml_d_cos2_core.S | 29 - sysdeps/x86_64/fpu/svml_d_cos4_core.S | 29 - sysdeps/x86_64/fpu/svml_d_cos4_core_avx.S | 25 - sysdeps/x86_64/fpu/svml_d_cos8_core.S | 25 - sysdeps/x86_64/fpu/svml_d_exp2_core.S | 29 - sysdeps/x86_64/fpu/svml_d_exp4_core.S | 29 - sysdeps/x86_64/fpu/svml_d_exp4_core_avx.S | 25 - sysdeps/x86_64/fpu/svml_d_exp8_core.S | 25 - sysdeps/x86_64/fpu/svml_d_exp_data.S | 1088 -- sysdeps/x86_64/fpu/svml_d_exp_data.h | 52 - sysdeps/x86_64/fpu/svml_d_log2_core.S | 29 - sysdeps/x86_64/fpu/svml_d_log4_core.S | 29 - sysdeps/x86_64/fpu/svml_d_log4_core_avx.S | 25 - sysdeps/x86_64/fpu/svml_d_log8_core.S | 25 - sysdeps/x86_64/fpu/svml_d_log_data.S | 1662 --- sysdeps/x86_64/fpu/svml_d_log_data.h | 54 - sysdeps/x86_64/fpu/svml_d_pow2_core.S | 29 - sysdeps/x86_64/fpu/svml_d_pow4_core.S | 29 - sysdeps/x86_64/fpu/svml_d_pow4_core_avx.S | 25 - sysdeps/x86_64/fpu/svml_d_pow8_core.S | 25 - sysdeps/x86_64/fpu/svml_d_pow_data.S | 4863 -------- sysdeps/x86_64/fpu/svml_d_pow_data.h | 104 - sysdeps/x86_64/fpu/svml_d_sin2_core.S | 29 - sysdeps/x86_64/fpu/svml_d_sin4_core.S | 29 - sysdeps/x86_64/fpu/svml_d_sin4_core_avx.S | 25 - sysdeps/x86_64/fpu/svml_d_sin8_core.S | 25 - sysdeps/x86_64/fpu/svml_d_sincos2_core.S | 110 - sysdeps/x86_64/fpu/svml_d_sincos4_core.S | 152 - sysdeps/x86_64/fpu/svml_d_sincos4_core_avx.S | 143 - sysdeps/x86_64/fpu/svml_d_sincos8_core.S | 224 - sysdeps/x86_64/fpu/svml_d_trig_data.S | 130 - sysdeps/x86_64/fpu/svml_d_trig_data.h | 72 - sysdeps/x86_64/fpu/svml_d_wrapper_impl.h | 335 - sysdeps/x86_64/fpu/svml_finite_alias.S | 58 - sysdeps/x86_64/fpu/svml_s_cosf16_core.S | 25 - sysdeps/x86_64/fpu/svml_s_cosf4_core.S | 29 - sysdeps/x86_64/fpu/svml_s_cosf8_core.S | 29 - sysdeps/x86_64/fpu/svml_s_cosf8_core_avx.S | 25 - sysdeps/x86_64/fpu/svml_s_expf16_core.S | 25 - sysdeps/x86_64/fpu/svml_s_expf4_core.S | 30 - sysdeps/x86_64/fpu/svml_s_expf8_core.S | 29 - sysdeps/x86_64/fpu/svml_s_expf8_core_avx.S | 25 - sysdeps/x86_64/fpu/svml_s_expf_data.S | 63 - sysdeps/x86_64/fpu/svml_s_expf_data.h | 45 - sysdeps/x86_64/fpu/svml_s_logf16_core.S | 25 - sysdeps/x86_64/fpu/svml_s_logf4_core.S | 30 - sysdeps/x86_64/fpu/svml_s_logf8_core.S | 29 - sysdeps/x86_64/fpu/svml_s_logf8_core_avx.S | 25 - sysdeps/x86_64/fpu/svml_s_logf_data.S | 102 - sysdeps/x86_64/fpu/svml_s_logf_data.h | 48 - sysdeps/x86_64/fpu/svml_s_powf16_core.S | 25 - sysdeps/x86_64/fpu/svml_s_powf4_core.S | 29 - sysdeps/x86_64/fpu/svml_s_powf8_core.S | 29 - sysdeps/x86_64/fpu/svml_s_powf8_core_avx.S | 25 - sysdeps/x86_64/fpu/svml_s_powf_data.S | 3759 ------- sysdeps/x86_64/fpu/svml_s_powf_data.h | 76 - sysdeps/x86_64/fpu/svml_s_sincosf16_core.S | 358 - sysdeps/x86_64/fpu/svml_s_sincosf4_core.S | 152 - sysdeps/x86_64/fpu/svml_s_sincosf8_core.S | 200 - sysdeps/x86_64/fpu/svml_s_sincosf8_core_avx.S | 198 - sysdeps/x86_64/fpu/svml_s_sinf16_core.S | 25 - sysdeps/x86_64/fpu/svml_s_sinf4_core.S | 30 - sysdeps/x86_64/fpu/svml_s_sinf8_core.S | 29 - sysdeps/x86_64/fpu/svml_s_sinf8_core_avx.S | 25 - sysdeps/x86_64/fpu/svml_s_trig_data.S | 111 - sysdeps/x86_64/fpu/svml_s_trig_data.h | 62 - sysdeps/x86_64/fpu/svml_s_wrapper_impl.h | 371 - .../fpu/test-double-libmvec-alias-avx-main.c | 1 - .../x86_64/fpu/test-double-libmvec-alias-avx-mod.c | 1 - sysdeps/x86_64/fpu/test-double-libmvec-alias-avx.c | 1 - .../fpu/test-double-libmvec-alias-avx2-main.c | 1 - .../fpu/test-double-libmvec-alias-avx2-mod.c | 1 - .../x86_64/fpu/test-double-libmvec-alias-avx2.c | 1 - .../fpu/test-double-libmvec-alias-avx512-main.c | 1 - .../fpu/test-double-libmvec-alias-avx512-mod.c | 1 - .../x86_64/fpu/test-double-libmvec-alias-avx512.c | 1 - .../x86_64/fpu/test-double-libmvec-alias-main.c | 1 - sysdeps/x86_64/fpu/test-double-libmvec-alias-mod.c | 25 - sysdeps/x86_64/fpu/test-double-libmvec-alias.c | 29 - .../fpu/test-double-libmvec-sincos-avx-main.c | 1 - .../x86_64/fpu/test-double-libmvec-sincos-avx.c | 1 - .../fpu/test-double-libmvec-sincos-avx2-main.c | 1 - .../x86_64/fpu/test-double-libmvec-sincos-avx2.c | 1 - .../fpu/test-double-libmvec-sincos-avx512-main.c | 1 - .../x86_64/fpu/test-double-libmvec-sincos-avx512.c | 1 - .../x86_64/fpu/test-double-libmvec-sincos-main.c | 43 - sysdeps/x86_64/fpu/test-double-libmvec-sincos.c | 44 - sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c | 33 - .../x86_64/fpu/test-double-vlen4-avx2-wrappers.c | 40 - sysdeps/x86_64/fpu/test-double-vlen4-avx2.h | 25 - sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c | 37 - sysdeps/x86_64/fpu/test-double-vlen4.h | 21 - sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c | 37 - sysdeps/x86_64/fpu/test-double-vlen8.h | 21 - .../x86_64/fpu/test-float-libmvec-alias-avx-main.c | 1 - .../x86_64/fpu/test-float-libmvec-alias-avx-mod.c | 1 - sysdeps/x86_64/fpu/test-float-libmvec-alias-avx.c | 1 - .../fpu/test-float-libmvec-alias-avx2-main.c | 1 - .../x86_64/fpu/test-float-libmvec-alias-avx2-mod.c | 1 - sysdeps/x86_64/fpu/test-float-libmvec-alias-avx2.c | 1 - .../fpu/test-float-libmvec-alias-avx512-main.c | 1 - .../fpu/test-float-libmvec-alias-avx512-mod.c | 1 - .../x86_64/fpu/test-float-libmvec-alias-avx512.c | 1 - sysdeps/x86_64/fpu/test-float-libmvec-alias-main.c | 1 - sysdeps/x86_64/fpu/test-float-libmvec-alias-mod.c | 25 - sysdeps/x86_64/fpu/test-float-libmvec-alias.c | 29 - .../fpu/test-float-libmvec-sincosf-avx-main.c | 1 - .../x86_64/fpu/test-float-libmvec-sincosf-avx.c | 1 - .../fpu/test-float-libmvec-sincosf-avx2-main.c | 1 - .../x86_64/fpu/test-float-libmvec-sincosf-avx2.c | 1 - .../fpu/test-float-libmvec-sincosf-avx512-main.c | 1 - .../x86_64/fpu/test-float-libmvec-sincosf-avx512.c | 1 - .../x86_64/fpu/test-float-libmvec-sincosf-main.c | 42 - sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c | 44 - sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c | 37 - sysdeps/x86_64/fpu/test-float-vlen16.h | 21 - sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c | 37 - .../x86_64/fpu/test-float-vlen8-avx2-wrappers.c | 43 - sysdeps/x86_64/fpu/test-float-vlen8-avx2.h | 25 - sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c | 37 - sysdeps/x86_64/fpu/test-float-vlen8.h | 21 - sysdeps/x86_64/fpu/test-libmvec-alias-mod.c | 66 - sysdeps/x86_64/fpu/x86_64-math-asm.h | 74 - sysdeps/x86_64/hp-timing.h | 40 - sysdeps/x86_64/htonl.S | 34 - sysdeps/x86_64/ifuncmain8.c | 32 - sysdeps/x86_64/ifuncmod8.c | 37 - sysdeps/x86_64/jmpbuf-offsets.h | 29 - sysdeps/x86_64/jmpbuf-unwind.h | 49 - sysdeps/x86_64/l10nflist.c | 13 - sysdeps/x86_64/ldbl2mpn.c | 1 - sysdeps/x86_64/ldsodefs.h | 56 - sysdeps/x86_64/link-defines.sym | 38 - sysdeps/x86_64/locale-defines.sym | 11 - sysdeps/x86_64/localplt.data | 20 - sysdeps/x86_64/lshift.S | 116 - sysdeps/x86_64/machine-gmon.h | 38 - sysdeps/x86_64/memchr.S | 315 - sysdeps/x86_64/memcmp.S | 358 - sysdeps/x86_64/memcopy.h | 1 - sysdeps/x86_64/memcpy.S | 1 - sysdeps/x86_64/memcpy_chk.S | 33 - sysdeps/x86_64/memmove.S | 71 - sysdeps/x86_64/memmove_chk.S | 33 - sysdeps/x86_64/mempcpy.S | 1 - sysdeps/x86_64/mempcpy_chk.S | 33 - sysdeps/x86_64/memrchr.S | 380 - sysdeps/x86_64/memset.S | 67 - sysdeps/x86_64/memset_chk.S | 33 - sysdeps/x86_64/memusage.h | 21 - sysdeps/x86_64/mp_clz_tab.c | 1 - sysdeps/x86_64/mul_1.S | 128 - sysdeps/x86_64/multiarch/Makefile | 42 - sysdeps/x86_64/multiarch/bcopy.S | 7 - sysdeps/x86_64/multiarch/ifunc-impl-list.c | 460 - sysdeps/x86_64/multiarch/ifunc-wmemset.h | 42 - sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S | 425 - sysdeps/x86_64/multiarch/memcmp-sse4.S | 1776 --- sysdeps/x86_64/multiarch/memcmp-ssse3.S | 1990 ---- sysdeps/x86_64/multiarch/memcmp.S | 78 - sysdeps/x86_64/multiarch/memcpy-ssse3-back.S | 3180 ------ sysdeps/x86_64/multiarch/memcpy-ssse3.S | 3150 ------ sysdeps/x86_64/multiarch/memcpy.S | 75 - sysdeps/x86_64/multiarch/memcpy_chk.S | 72 - .../x86_64/multiarch/memmove-avx-unaligned-erms.S | 12 - .../multiarch/memmove-avx512-no-vzeroupper.S | 420 - .../multiarch/memmove-avx512-unaligned-erms.S | 12 - sysdeps/x86_64/multiarch/memmove-ssse3-back.S | 4 - sysdeps/x86_64/multiarch/memmove-ssse3.S | 4 - .../x86_64/multiarch/memmove-vec-unaligned-erms.S | 553 - sysdeps/x86_64/multiarch/memmove.S | 101 - sysdeps/x86_64/multiarch/memmove_chk.S | 71 - sysdeps/x86_64/multiarch/mempcpy.S | 73 - sysdeps/x86_64/multiarch/mempcpy_chk.S | 72 - .../x86_64/multiarch/memset-avx2-unaligned-erms.S | 22 - .../x86_64/multiarch/memset-avx512-no-vzeroupper.S | 194 - .../multiarch/memset-avx512-unaligned-erms.S | 24 - .../x86_64/multiarch/memset-vec-unaligned-erms.S | 263 - sysdeps/x86_64/multiarch/memset.S | 82 - sysdeps/x86_64/multiarch/memset_chk.S | 61 - sysdeps/x86_64/multiarch/sched_cpucount.c | 36 - sysdeps/x86_64/multiarch/stpcpy-sse2-unaligned.S | 3 - sysdeps/x86_64/multiarch/stpcpy-ssse3.S | 3 - sysdeps/x86_64/multiarch/stpcpy.S | 9 - sysdeps/x86_64/multiarch/stpncpy-c.c | 8 - sysdeps/x86_64/multiarch/stpncpy-sse2-unaligned.S | 4 - sysdeps/x86_64/multiarch/stpncpy-ssse3.S | 4 - sysdeps/x86_64/multiarch/stpncpy.S | 8 - sysdeps/x86_64/multiarch/strcasecmp_l-ssse3.S | 6 - sysdeps/x86_64/multiarch/strcasecmp_l.S | 8 - sysdeps/x86_64/multiarch/strcat-sse2-unaligned.S | 279 - sysdeps/x86_64/multiarch/strcat-ssse3.S | 867 -- sysdeps/x86_64/multiarch/strcat.S | 85 - sysdeps/x86_64/multiarch/strchr-sse2-no-bsf.S | 280 - sysdeps/x86_64/multiarch/strchr.S | 57 - sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S | 213 - sysdeps/x86_64/multiarch/strcmp-sse42.S | 1792 --- sysdeps/x86_64/multiarch/strcmp-ssse3.S | 5 - sysdeps/x86_64/multiarch/strcmp.S | 209 - sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S | 1889 ---- sysdeps/x86_64/multiarch/strcpy-ssse3.S | 3551 ------ sysdeps/x86_64/multiarch/strcpy.S | 99 - sysdeps/x86_64/multiarch/strcspn-c.c | 173 - sysdeps/x86_64/multiarch/strcspn.S | 69 - sysdeps/x86_64/multiarch/strncase_l-ssse3.S | 6 - sysdeps/x86_64/multiarch/strncase_l.S | 8 - sysdeps/x86_64/multiarch/strncat-c.c | 8 - sysdeps/x86_64/multiarch/strncat-sse2-unaligned.S | 3 - sysdeps/x86_64/multiarch/strncat-ssse3.S | 3 - sysdeps/x86_64/multiarch/strncat.S | 5 - sysdeps/x86_64/multiarch/strncmp-ssse3.S | 6 - sysdeps/x86_64/multiarch/strncmp.S | 5 - sysdeps/x86_64/multiarch/strncpy-c.c | 8 - sysdeps/x86_64/multiarch/strncpy-sse2-unaligned.S | 3 - sysdeps/x86_64/multiarch/strncpy-ssse3.S | 3 - sysdeps/x86_64/multiarch/strncpy.S | 5 - sysdeps/x86_64/multiarch/strpbrk-c.c | 8 - sysdeps/x86_64/multiarch/strpbrk.S | 5 - sysdeps/x86_64/multiarch/strspn-c.c | 145 - sysdeps/x86_64/multiarch/strspn.S | 50 - sysdeps/x86_64/multiarch/strstr-sse2-unaligned.S | 374 - sysdeps/x86_64/multiarch/strstr.c | 50 - sysdeps/x86_64/multiarch/test-multiarch.c | 96 - sysdeps/x86_64/multiarch/varshift.c | 25 - sysdeps/x86_64/multiarch/varshift.h | 30 - sysdeps/x86_64/multiarch/wcscpy-c.c | 5 - sysdeps/x86_64/multiarch/wcscpy-ssse3.S | 552 - sysdeps/x86_64/multiarch/wcscpy.S | 40 - sysdeps/x86_64/multiarch/wcsnlen-c.c | 9 - sysdeps/x86_64/multiarch/wcsnlen-sse4_1.S | 5 - sysdeps/x86_64/multiarch/wcsnlen.c | 45 - sysdeps/x86_64/multiarch/wmemcmp-avx2-movbe.S | 4 - sysdeps/x86_64/multiarch/wmemcmp-c.c | 9 - sysdeps/x86_64/multiarch/wmemcmp-sse4.S | 4 - sysdeps/x86_64/multiarch/wmemcmp-ssse3.S | 4 - sysdeps/x86_64/multiarch/wmemcmp.S | 55 - sysdeps/x86_64/multiarch/wmemset.c | 33 - sysdeps/x86_64/multiarch/wmemset_chk-nonshared.S | 21 - sysdeps/x86_64/multiarch/wmemset_chk.c | 31 - sysdeps/x86_64/nptl/Makefile | 20 - sysdeps/x86_64/nptl/pthread_spin_init.c | 1 - sysdeps/x86_64/nptl/pthread_spin_lock.S | 34 - sysdeps/x86_64/nptl/pthread_spin_trylock.S | 37 - sysdeps/x86_64/nptl/pthread_spin_unlock.S | 29 - sysdeps/x86_64/nptl/pthreaddef.h | 44 - sysdeps/x86_64/nptl/tcb-offsets.sym | 27 - sysdeps/x86_64/nptl/tls.h | 367 - sysdeps/x86_64/preconfigure | 42 - sysdeps/x86_64/preconfigure.ac | 20 - sysdeps/x86_64/rawmemchr.S | 202 - sysdeps/x86_64/rshift.S | 114 - sysdeps/x86_64/sched_cpucount.c | 25 - sysdeps/x86_64/setjmp.S | 66 - sysdeps/x86_64/stack-aliasing.h | 1 - sysdeps/x86_64/stackguard-macros.h | 11 - sysdeps/x86_64/stackinfo.h | 43 - sysdeps/x86_64/start.S | 131 - sysdeps/x86_64/stpcpy.S | 8 - sysdeps/x86_64/strcasecmp.S | 1 - sysdeps/x86_64/strcasecmp_l-nonascii.c | 8 - sysdeps/x86_64/strcasecmp_l.S | 6 - sysdeps/x86_64/strcat.S | 258 - sysdeps/x86_64/strchr.S | 187 - sysdeps/x86_64/strchrnul.S | 27 - sysdeps/x86_64/strcmp.S | 2267 ---- sysdeps/x86_64/strcpy.S | 156 - sysdeps/x86_64/strcspn.S | 125 - sysdeps/x86_64/strlen.S | 258 - sysdeps/x86_64/strncase.S | 1 - sysdeps/x86_64/strncase_l-nonascii.c | 8 - sysdeps/x86_64/strncase_l.S | 6 - sysdeps/x86_64/strncmp.S | 3 - sysdeps/x86_64/strnlen.S | 6 - sysdeps/x86_64/strpbrk.S | 2 - sysdeps/x86_64/strrchr.S | 228 - sysdeps/x86_64/strspn.S | 115 - sysdeps/x86_64/sub_n.S | 23 - sysdeps/x86_64/submul_1.S | 23 - sysdeps/x86_64/sysdep.h | 169 - sysdeps/x86_64/tls-macros.h | 39 - sysdeps/x86_64/tlsdesc.c | 150 - sysdeps/x86_64/tlsdesc.sym | 17 - sysdeps/x86_64/tst-audit.h | 32 - sysdeps/x86_64/tst-audit10-aux.c | 41 - sysdeps/x86_64/tst-audit10.c | 57 - sysdeps/x86_64/tst-audit3.c | 23 - sysdeps/x86_64/tst-audit4-aux.c | 39 - sysdeps/x86_64/tst-audit4.c | 49 - sysdeps/x86_64/tst-audit5.c | 24 - sysdeps/x86_64/tst-audit6.c | 45 - sysdeps/x86_64/tst-audit7.c | 1 - sysdeps/x86_64/tst-auditmod10a.c | 65 - sysdeps/x86_64/tst-auditmod10b.c | 231 - sysdeps/x86_64/tst-auditmod3a.c | 24 - sysdeps/x86_64/tst-auditmod3b.c | 153 - sysdeps/x86_64/tst-auditmod4a.c | 48 - sysdeps/x86_64/tst-auditmod4b.c | 213 - sysdeps/x86_64/tst-auditmod5a.c | 46 - sysdeps/x86_64/tst-auditmod5b.c | 185 - sysdeps/x86_64/tst-auditmod6a.c | 46 - sysdeps/x86_64/tst-auditmod6b.c | 227 - sysdeps/x86_64/tst-auditmod6c.c | 232 - sysdeps/x86_64/tst-auditmod7a.c | 1 - sysdeps/x86_64/tst-auditmod7b.c | 225 - sysdeps/x86_64/tst-avx-aux.c | 47 - sysdeps/x86_64/tst-avx.c | 49 - sysdeps/x86_64/tst-avx512-aux.c | 48 - sysdeps/x86_64/tst-avx512.c | 57 - sysdeps/x86_64/tst-avx512mod.c | 48 - sysdeps/x86_64/tst-avxmod.c | 48 - sysdeps/x86_64/tst-mallocalign1.c | 72 - sysdeps/x86_64/tst-quad1.c | 25 - sysdeps/x86_64/tst-quad1pie.c | 1 - sysdeps/x86_64/tst-quad2.c | 1 - sysdeps/x86_64/tst-quad2pie.c | 1 - sysdeps/x86_64/tst-quadmod1.S | 44 - sysdeps/x86_64/tst-quadmod1pie.S | 2 - sysdeps/x86_64/tst-quadmod2.S | 43 - sysdeps/x86_64/tst-quadmod2pie.S | 1 - sysdeps/x86_64/tst-split-dynreloc.c | 28 - sysdeps/x86_64/tst-split-dynreloc.lds | 5 - sysdeps/x86_64/tst-sse.c | 46 - sysdeps/x86_64/tst-ssemod.c | 46 - sysdeps/x86_64/tst-stack-align.h | 46 - sysdeps/x86_64/wcschr.S | 156 - sysdeps/x86_64/wcscmp.S | 950 -- sysdeps/x86_64/wcslen.S | 238 - sysdeps/x86_64/wcsrchr.S | 282 - sysdeps/x86_64/wmemset.S | 1 - sysdeps/x86_64/wmemset_chk.S | 33 - sysdeps/x86_64/wordcopy.c | 1 - sysdeps/x86_64/x32/Implies-after | 1 - sysdeps/x86_64/x32/Makefile | 6 - sysdeps/x86_64/x32/_itoa.h | 4 - sysdeps/x86_64/x32/divdi3.c | 1 - sysdeps/x86_64/x32/dl-machine.h | 86 - sysdeps/x86_64/x32/ffs.c | 4 - sysdeps/x86_64/x32/fpu/s_lrint.S | 27 - sysdeps/x86_64/x32/fpu/s_lrintf.S | 27 - sysdeps/x86_64/x32/fpu/s_lrintl.S | 30 - sysdeps/x86_64/x32/gmp-mparam.h | 33 - sysdeps/x86_64/x32/symbol-hacks.h | 1 - sysdeps/x86_64/x32/sysdep.h | 92 - 8538 files changed, 905857 deletions(-) delete mode 100644 sysdeps/aarch64/Implies delete mode 100644 sysdeps/aarch64/Makefile delete mode 100644 sysdeps/aarch64/Versions delete mode 100644 sysdeps/aarch64/__longjmp.S delete mode 100644 sysdeps/aarch64/abort-instr.h delete mode 100644 sysdeps/aarch64/atomic-machine.h delete mode 100644 sysdeps/aarch64/backtrace.c delete mode 100644 sysdeps/aarch64/bits/endian.h delete mode 100644 sysdeps/aarch64/bits/fenv.h delete mode 100644 sysdeps/aarch64/bits/fp-fast.h delete mode 100644 sysdeps/aarch64/bits/link.h delete mode 100644 sysdeps/aarch64/bits/setjmp.h delete mode 100644 sysdeps/aarch64/bits/string.h delete mode 100644 sysdeps/aarch64/bits/wordsize.h delete mode 100644 sysdeps/aarch64/bsd-_setjmp.S delete mode 100644 sysdeps/aarch64/bsd-setjmp.S delete mode 100644 sysdeps/aarch64/configure delete mode 100644 sysdeps/aarch64/configure.ac delete mode 100644 sysdeps/aarch64/crti.S delete mode 100644 sysdeps/aarch64/crtn.S delete mode 100644 sysdeps/aarch64/dl-irel.h delete mode 100644 sysdeps/aarch64/dl-link.sym delete mode 100644 sysdeps/aarch64/dl-machine.h delete mode 100644 sysdeps/aarch64/dl-sysdep.h delete mode 100644 sysdeps/aarch64/dl-tls.h delete mode 100644 sysdeps/aarch64/dl-tlsdesc.S delete mode 100644 sysdeps/aarch64/dl-tlsdesc.h delete mode 100644 sysdeps/aarch64/dl-trampoline.S delete mode 100644 sysdeps/aarch64/fpu/e_sqrt.c delete mode 100644 sysdeps/aarch64/fpu/e_sqrtf.c delete mode 100644 sysdeps/aarch64/fpu/fclrexcpt.c delete mode 100644 sysdeps/aarch64/fpu/fedisblxcpt.c delete mode 100644 sysdeps/aarch64/fpu/feenablxcpt.c delete mode 100644 sysdeps/aarch64/fpu/fegetenv.c delete mode 100644 sysdeps/aarch64/fpu/fegetexcept.c delete mode 100644 sysdeps/aarch64/fpu/fegetmode.c delete mode 100644 sysdeps/aarch64/fpu/fegetround.c delete mode 100644 sysdeps/aarch64/fpu/feholdexcpt.c delete mode 100644 sysdeps/aarch64/fpu/fesetenv.c delete mode 100644 sysdeps/aarch64/fpu/fesetexcept.c delete mode 100644 sysdeps/aarch64/fpu/fesetmode.c delete mode 100644 sysdeps/aarch64/fpu/fesetround.c delete mode 100644 sysdeps/aarch64/fpu/feupdateenv.c delete mode 100644 sysdeps/aarch64/fpu/fgetexcptflg.c delete mode 100644 sysdeps/aarch64/fpu/fpu_control.h delete mode 100644 sysdeps/aarch64/fpu/fraiseexcpt.c delete mode 100644 sysdeps/aarch64/fpu/fsetexcptflg.c delete mode 100644 sysdeps/aarch64/fpu/ftestexcept.c delete mode 100644 sysdeps/aarch64/fpu/get-rounding-mode.h delete mode 100644 sysdeps/aarch64/fpu/math_private.h delete mode 100644 sysdeps/aarch64/fpu/s_ceil.c delete mode 100644 sysdeps/aarch64/fpu/s_ceilf.c delete mode 100644 sysdeps/aarch64/fpu/s_floor.c delete mode 100644 sysdeps/aarch64/fpu/s_floorf.c delete mode 100644 sysdeps/aarch64/fpu/s_fma.c delete mode 100644 sysdeps/aarch64/fpu/s_fmaf.c delete mode 100644 sysdeps/aarch64/fpu/s_fmax.c delete mode 100644 sysdeps/aarch64/fpu/s_fmaxf.c delete mode 100644 sysdeps/aarch64/fpu/s_fmin.c delete mode 100644 sysdeps/aarch64/fpu/s_fminf.c delete mode 100644 sysdeps/aarch64/fpu/s_frint.c delete mode 100644 sysdeps/aarch64/fpu/s_frintf.c delete mode 100644 sysdeps/aarch64/fpu/s_llrint.c delete mode 100644 sysdeps/aarch64/fpu/s_llrintf.c delete mode 100644 sysdeps/aarch64/fpu/s_llround.c delete mode 100644 sysdeps/aarch64/fpu/s_llroundf.c delete mode 100644 sysdeps/aarch64/fpu/s_lrint.c delete mode 100644 sysdeps/aarch64/fpu/s_lrintf.c delete mode 100644 sysdeps/aarch64/fpu/s_lround.c delete mode 100644 sysdeps/aarch64/fpu/s_lroundf.c delete mode 100644 sysdeps/aarch64/fpu/s_nearbyint.c delete mode 100644 sysdeps/aarch64/fpu/s_nearbyintf.c delete mode 100644 sysdeps/aarch64/fpu/s_rint.c delete mode 100644 sysdeps/aarch64/fpu/s_rintf.c delete mode 100644 sysdeps/aarch64/fpu/s_round.c delete mode 100644 sysdeps/aarch64/fpu/s_roundf.c delete mode 100644 sysdeps/aarch64/fpu/s_trunc.c delete mode 100644 sysdeps/aarch64/fpu/s_truncf.c delete mode 100644 sysdeps/aarch64/jmpbuf-offsets.h delete mode 100644 sysdeps/aarch64/jmpbuf-unwind.h delete mode 100644 sysdeps/aarch64/ldsodefs.h delete mode 100644 sysdeps/aarch64/libc-tls.c delete mode 100644 sysdeps/aarch64/libm-test-ulps delete mode 100644 sysdeps/aarch64/libm-test-ulps-name delete mode 100644 sysdeps/aarch64/linkmap.h delete mode 100644 sysdeps/aarch64/machine-gmon.h delete mode 100644 sysdeps/aarch64/math-tests.h delete mode 100644 sysdeps/aarch64/mcount.c delete mode 100644 sysdeps/aarch64/memchr.S delete mode 100644 sysdeps/aarch64/memcmp.S delete mode 100644 sysdeps/aarch64/memcpy.S delete mode 100644 sysdeps/aarch64/memmove.S delete mode 100644 sysdeps/aarch64/memset.S delete mode 100644 sysdeps/aarch64/memusage.h delete mode 100644 sysdeps/aarch64/multiarch/Makefile delete mode 100644 sysdeps/aarch64/multiarch/ifunc-impl-list.c delete mode 100644 sysdeps/aarch64/multiarch/init-arch.h delete mode 100644 sysdeps/aarch64/multiarch/memcpy.c delete mode 100644 sysdeps/aarch64/multiarch/memcpy_generic.S delete mode 100644 sysdeps/aarch64/multiarch/memcpy_thunderx.S delete mode 100644 sysdeps/aarch64/multiarch/memmove.c delete mode 100644 sysdeps/aarch64/nptl/Makefile delete mode 100644 sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/aarch64/nptl/bits/semaphore.h delete mode 100644 sysdeps/aarch64/nptl/pthreaddef.h delete mode 100644 sysdeps/aarch64/nptl/tcb-offsets.sym delete mode 100644 sysdeps/aarch64/nptl/tls.h delete mode 100644 sysdeps/aarch64/preconfigure delete mode 100644 sysdeps/aarch64/rawmemchr.S delete mode 100644 sysdeps/aarch64/setjmp.S delete mode 100644 sysdeps/aarch64/soft-fp/Makefile delete mode 100644 sysdeps/aarch64/soft-fp/e_sqrtl.c delete mode 100644 sysdeps/aarch64/soft-fp/sfp-machine.h delete mode 100644 sysdeps/aarch64/sotruss-lib.c delete mode 100644 sysdeps/aarch64/stackinfo.h delete mode 100644 sysdeps/aarch64/start.S delete mode 100644 sysdeps/aarch64/stpcpy.S delete mode 100644 sysdeps/aarch64/strchr.S delete mode 100644 sysdeps/aarch64/strchrnul.S delete mode 100644 sysdeps/aarch64/strcmp.S delete mode 100644 sysdeps/aarch64/strcpy.S delete mode 100644 sysdeps/aarch64/string_private.h delete mode 100644 sysdeps/aarch64/strlen.S delete mode 100644 sysdeps/aarch64/strncmp.S delete mode 100644 sysdeps/aarch64/strnlen.S delete mode 100644 sysdeps/aarch64/strrchr.S delete mode 100644 sysdeps/aarch64/sysdep.h delete mode 100644 sysdeps/aarch64/tls-macros.h delete mode 100644 sysdeps/aarch64/tlsdesc.c delete mode 100644 sysdeps/aarch64/tlsdesc.sym delete mode 100644 sysdeps/aarch64/tst-audit.h delete mode 100644 sysdeps/alpha/Implies delete mode 100644 sysdeps/alpha/Makefile delete mode 100644 sysdeps/alpha/Subdirs delete mode 100644 sysdeps/alpha/Versions delete mode 100644 sysdeps/alpha/__longjmp.S delete mode 100644 sysdeps/alpha/_mcount.S delete mode 100644 sysdeps/alpha/add_n.S delete mode 100644 sysdeps/alpha/addmul_1.S delete mode 100644 sysdeps/alpha/alphaev5/add_n.S delete mode 100644 sysdeps/alpha/alphaev5/lshift.S delete mode 100644 sysdeps/alpha/alphaev5/rshift.S delete mode 100644 sysdeps/alpha/alphaev5/sub_n.S delete mode 100644 sysdeps/alpha/alphaev6/Implies delete mode 100644 sysdeps/alpha/alphaev6/addmul_1.S delete mode 100644 sysdeps/alpha/alphaev6/fpu/e_sqrt.S delete mode 100644 sysdeps/alpha/alphaev6/fpu/e_sqrtf.S delete mode 100644 sysdeps/alpha/alphaev6/memcpy.S delete mode 100644 sysdeps/alpha/alphaev6/memset.S delete mode 100644 sysdeps/alpha/alphaev6/stxcpy.S delete mode 100644 sysdeps/alpha/alphaev6/stxncpy.S delete mode 100644 sysdeps/alpha/alphaev67/Implies delete mode 100644 sysdeps/alpha/alphaev67/ffs.S delete mode 100644 sysdeps/alpha/alphaev67/ffsll.S delete mode 100644 sysdeps/alpha/alphaev67/fpu/Implies delete mode 100644 sysdeps/alpha/alphaev67/rawmemchr.S delete mode 100644 sysdeps/alpha/alphaev67/stpcpy.S delete mode 100644 sysdeps/alpha/alphaev67/stpncpy.S delete mode 100644 sysdeps/alpha/alphaev67/strcat.S delete mode 100644 sysdeps/alpha/alphaev67/strchr.S delete mode 100644 sysdeps/alpha/alphaev67/strlen.S delete mode 100644 sysdeps/alpha/alphaev67/strncat.S delete mode 100644 sysdeps/alpha/alphaev67/strrchr.S delete mode 100644 sysdeps/alpha/atomic-machine.h delete mode 100644 sysdeps/alpha/backtrace.c delete mode 100644 sysdeps/alpha/bb_init_func.S delete mode 100644 sysdeps/alpha/bits/endian.h delete mode 100644 sysdeps/alpha/bits/link.h delete mode 100644 sysdeps/alpha/bits/mathdef.h delete mode 100644 sysdeps/alpha/bits/setjmp.h delete mode 100644 sysdeps/alpha/bsd-_setjmp.S delete mode 100644 sysdeps/alpha/bsd-setjmp.S delete mode 100644 sysdeps/alpha/bzero.S delete mode 100644 sysdeps/alpha/configure delete mode 100644 sysdeps/alpha/configure.ac delete mode 100644 sysdeps/alpha/crti.S delete mode 100644 sysdeps/alpha/crtn.S delete mode 100644 sysdeps/alpha/div.S delete mode 100644 sysdeps/alpha/div_libc.h delete mode 100644 sysdeps/alpha/divl.S delete mode 100644 sysdeps/alpha/divlu.S delete mode 100644 sysdeps/alpha/divq.S delete mode 100644 sysdeps/alpha/divqu.S delete mode 100644 sysdeps/alpha/dl-dtprocnum.h delete mode 100644 sysdeps/alpha/dl-machine.h delete mode 100644 sysdeps/alpha/dl-procinfo.c delete mode 100644 sysdeps/alpha/dl-procinfo.h delete mode 100644 sysdeps/alpha/dl-sysdep.h delete mode 100644 sysdeps/alpha/dl-tls.h delete mode 100644 sysdeps/alpha/dl-trampoline.S delete mode 100644 sysdeps/alpha/ffs.S delete mode 100644 sysdeps/alpha/ffsll.S delete mode 100644 sysdeps/alpha/fpu/Versions delete mode 100644 sysdeps/alpha/fpu/bits/fenv.h delete mode 100644 sysdeps/alpha/fpu/bits/mathinline.h delete mode 100644 sysdeps/alpha/fpu/cabsf.c delete mode 100644 sysdeps/alpha/fpu/cargf.c delete mode 100644 sysdeps/alpha/fpu/cfloat-compat.h delete mode 100644 sysdeps/alpha/fpu/cimagf.c delete mode 100644 sysdeps/alpha/fpu/conjf.c delete mode 100644 sysdeps/alpha/fpu/crealf.c delete mode 100644 sysdeps/alpha/fpu/e_sqrt.c delete mode 100644 sysdeps/alpha/fpu/e_sqrtf.c delete mode 100644 sysdeps/alpha/fpu/fclrexcpt.c delete mode 100644 sysdeps/alpha/fpu/fedisblxcpt.c delete mode 100644 sysdeps/alpha/fpu/feenablxcpt.c delete mode 100644 sysdeps/alpha/fpu/fegetenv.c delete mode 100644 sysdeps/alpha/fpu/fegetexcept.c delete mode 100644 sysdeps/alpha/fpu/fegetmode.c delete mode 100644 sysdeps/alpha/fpu/fegetround.c delete mode 100644 sysdeps/alpha/fpu/feholdexcpt.c delete mode 100644 sysdeps/alpha/fpu/fenv_libc.h delete mode 100644 sysdeps/alpha/fpu/fesetenv.c delete mode 100644 sysdeps/alpha/fpu/fesetexcept.c delete mode 100644 sysdeps/alpha/fpu/fesetmode.c delete mode 100644 sysdeps/alpha/fpu/fesetround.c delete mode 100644 sysdeps/alpha/fpu/feupdateenv.c delete mode 100644 sysdeps/alpha/fpu/fgetexcptflg.c delete mode 100644 sysdeps/alpha/fpu/fpu_control.h delete mode 100644 sysdeps/alpha/fpu/fsetexcptflg.c delete mode 100644 sysdeps/alpha/fpu/ftestexcept.c delete mode 100644 sysdeps/alpha/fpu/get-rounding-mode.h delete mode 100644 sysdeps/alpha/fpu/libm-test-ulps delete mode 100644 sysdeps/alpha/fpu/libm-test-ulps-name delete mode 100644 sysdeps/alpha/fpu/math_private.h delete mode 100644 sysdeps/alpha/fpu/s_cacosf.c delete mode 100644 sysdeps/alpha/fpu/s_cacoshf.c delete mode 100644 sysdeps/alpha/fpu/s_casinf.c delete mode 100644 sysdeps/alpha/fpu/s_casinhf.c delete mode 100644 sysdeps/alpha/fpu/s_catanf.c delete mode 100644 sysdeps/alpha/fpu/s_catanhf.c delete mode 100644 sysdeps/alpha/fpu/s_ccosf.c delete mode 100644 sysdeps/alpha/fpu/s_ccoshf.c delete mode 100644 sysdeps/alpha/fpu/s_ceil.c delete mode 100644 sysdeps/alpha/fpu/s_ceilf.c delete mode 100644 sysdeps/alpha/fpu/s_cexpf.c delete mode 100644 sysdeps/alpha/fpu/s_clog10f.c delete mode 100644 sysdeps/alpha/fpu/s_clogf.c delete mode 100644 sysdeps/alpha/fpu/s_copysign.c delete mode 100644 sysdeps/alpha/fpu/s_copysignf.c delete mode 100644 sysdeps/alpha/fpu/s_cpowf.c delete mode 100644 sysdeps/alpha/fpu/s_cprojf.c delete mode 100644 sysdeps/alpha/fpu/s_csinf.c delete mode 100644 sysdeps/alpha/fpu/s_csinhf.c delete mode 100644 sysdeps/alpha/fpu/s_csqrtf.c delete mode 100644 sysdeps/alpha/fpu/s_ctanf.c delete mode 100644 sysdeps/alpha/fpu/s_ctanhf.c delete mode 100644 sysdeps/alpha/fpu/s_fabs.c delete mode 100644 sysdeps/alpha/fpu/s_fabsf.c delete mode 100644 sysdeps/alpha/fpu/s_floor.c delete mode 100644 sysdeps/alpha/fpu/s_floorf.c delete mode 100644 sysdeps/alpha/fpu/s_fmax.S delete mode 100644 sysdeps/alpha/fpu/s_fmaxf.S delete mode 100644 sysdeps/alpha/fpu/s_fmin.S delete mode 100644 sysdeps/alpha/fpu/s_fminf.S delete mode 100644 sysdeps/alpha/fpu/s_isnan.c delete mode 100644 sysdeps/alpha/fpu/s_isnanf.c delete mode 100644 sysdeps/alpha/fpu/s_llrint.c delete mode 100644 sysdeps/alpha/fpu/s_llrintf.c delete mode 100644 sysdeps/alpha/fpu/s_llround.c delete mode 100644 sysdeps/alpha/fpu/s_llroundf.c delete mode 100644 sysdeps/alpha/fpu/s_lrint.c delete mode 100644 sysdeps/alpha/fpu/s_lrintf.c delete mode 100644 sysdeps/alpha/fpu/s_lround.c delete mode 100644 sysdeps/alpha/fpu/s_lroundf.c delete mode 100644 sysdeps/alpha/fpu/s_nearbyint.c delete mode 100644 sysdeps/alpha/fpu/s_rint.c delete mode 100644 sysdeps/alpha/fpu/s_rintf.c delete mode 100644 sysdeps/alpha/fpu/s_trunc.c delete mode 100644 sysdeps/alpha/fpu/s_truncf.c delete mode 100644 sysdeps/alpha/gccframe.h delete mode 100644 sysdeps/alpha/hp-timing.h delete mode 100644 sysdeps/alpha/htonl.S delete mode 100644 sysdeps/alpha/htons.S delete mode 100644 sysdeps/alpha/jmpbuf-offsets.h delete mode 100644 sysdeps/alpha/jmpbuf-unwind.h delete mode 100644 sysdeps/alpha/ldiv.S delete mode 100644 sysdeps/alpha/ldsodefs.h delete mode 100644 sysdeps/alpha/libc-tls.c delete mode 100644 sysdeps/alpha/lldiv.S delete mode 100644 sysdeps/alpha/lshift.S delete mode 100644 sysdeps/alpha/machine-gmon.h delete mode 100644 sysdeps/alpha/memchr.c delete mode 100644 sysdeps/alpha/memset.S delete mode 100644 sysdeps/alpha/memusage.h delete mode 100644 sysdeps/alpha/mul_1.S delete mode 100644 sysdeps/alpha/nptl/Makefile delete mode 100644 sysdeps/alpha/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/alpha/nptl/pthread_spin_lock.S delete mode 100644 sysdeps/alpha/nptl/pthread_spin_trylock.S delete mode 100644 sysdeps/alpha/nptl/pthreaddef.h delete mode 100644 sysdeps/alpha/nptl/tcb-offsets.sym delete mode 100644 sysdeps/alpha/nptl/tls.h delete mode 100644 sysdeps/alpha/nscd-types.h delete mode 100644 sysdeps/alpha/preconfigure delete mode 100644 sysdeps/alpha/rawmemchr.S delete mode 100644 sysdeps/alpha/reml.S delete mode 100644 sysdeps/alpha/remlu.S delete mode 100644 sysdeps/alpha/remq.S delete mode 100644 sysdeps/alpha/remqu.S delete mode 100644 sysdeps/alpha/rshift.S delete mode 100644 sysdeps/alpha/setjmp.S delete mode 100644 sysdeps/alpha/soft-fp/Makefile delete mode 100644 sysdeps/alpha/soft-fp/Versions delete mode 100644 sysdeps/alpha/soft-fp/e_sqrtl.c delete mode 100644 sysdeps/alpha/soft-fp/local-soft-fp.h delete mode 100644 sysdeps/alpha/soft-fp/ots_add.c delete mode 100644 sysdeps/alpha/soft-fp/ots_cmp.c delete mode 100644 sysdeps/alpha/soft-fp/ots_cmpe.c delete mode 100644 sysdeps/alpha/soft-fp/ots_cvtqux.c delete mode 100644 sysdeps/alpha/soft-fp/ots_cvtqx.c delete mode 100644 sysdeps/alpha/soft-fp/ots_cvttx.c delete mode 100644 sysdeps/alpha/soft-fp/ots_cvtxq.c delete mode 100644 sysdeps/alpha/soft-fp/ots_cvtxt.c delete mode 100644 sysdeps/alpha/soft-fp/ots_div.c delete mode 100644 sysdeps/alpha/soft-fp/ots_mul.c delete mode 100644 sysdeps/alpha/soft-fp/ots_nintxq.c delete mode 100644 sysdeps/alpha/soft-fp/ots_sub.c delete mode 100644 sysdeps/alpha/soft-fp/sfp-machine.h delete mode 100644 sysdeps/alpha/sotruss-lib.c delete mode 100644 sysdeps/alpha/stackinfo.h delete mode 100644 sysdeps/alpha/start.S delete mode 100644 sysdeps/alpha/stpcpy.S delete mode 100644 sysdeps/alpha/stpncpy.S delete mode 100644 sysdeps/alpha/strcat.S delete mode 100644 sysdeps/alpha/strchr.S delete mode 100644 sysdeps/alpha/strcmp.S delete mode 100644 sysdeps/alpha/strcpy.S delete mode 100644 sysdeps/alpha/strlen.S delete mode 100644 sysdeps/alpha/strncat.S delete mode 100644 sysdeps/alpha/strncmp.S delete mode 100644 sysdeps/alpha/strncpy.S delete mode 100644 sysdeps/alpha/strrchr.S delete mode 100644 sysdeps/alpha/stxcpy.S delete mode 100644 sysdeps/alpha/stxncpy.S delete mode 100644 sysdeps/alpha/sub_n.S delete mode 100644 sysdeps/alpha/submul_1.S delete mode 100644 sysdeps/alpha/tininess.h delete mode 100644 sysdeps/alpha/tls-macros.h delete mode 100644 sysdeps/alpha/tst-audit.h delete mode 100644 sysdeps/alpha/udiv_qrnnd.S delete mode 100644 sysdeps/arm/Implies delete mode 100644 sysdeps/arm/Makefile delete mode 100644 sysdeps/arm/Versions delete mode 100644 sysdeps/arm/__longjmp.S delete mode 100644 sysdeps/arm/abi-note.S delete mode 100644 sysdeps/arm/add_n.S delete mode 100644 sysdeps/arm/addmul_1.S delete mode 100644 sysdeps/arm/aeabi_assert.c delete mode 100644 sysdeps/arm/aeabi_atexit.c delete mode 100644 sysdeps/arm/aeabi_errno_addr.c delete mode 100644 sysdeps/arm/aeabi_lcsts.c delete mode 100644 sysdeps/arm/aeabi_localeconv.c delete mode 100644 sysdeps/arm/aeabi_math.c delete mode 100644 sysdeps/arm/aeabi_mb_cur_max.c delete mode 100644 sysdeps/arm/aeabi_memclr.c delete mode 100644 sysdeps/arm/aeabi_memcpy.c delete mode 100644 sysdeps/arm/aeabi_memmove.c delete mode 100644 sysdeps/arm/aeabi_memset.c delete mode 100644 sysdeps/arm/aeabi_sighandlers.S delete mode 100644 sysdeps/arm/aeabi_unwind_cpp_pr1.c delete mode 100644 sysdeps/arm/arm-features.h delete mode 100644 sysdeps/arm/arm-mcount.S delete mode 100644 sysdeps/arm/arm-unwind-resume.S delete mode 100644 sysdeps/arm/armv6/rawmemchr.S delete mode 100644 sysdeps/arm/armv6/stpcpy.S delete mode 100644 sysdeps/arm/armv6/strchr.S delete mode 100644 sysdeps/arm/armv6/strcpy.S delete mode 100644 sysdeps/arm/armv6/strlen.S delete mode 100644 sysdeps/arm/armv6/strrchr.S delete mode 100644 sysdeps/arm/armv6t2/Implies delete mode 100644 sysdeps/arm/armv6t2/ffs.S delete mode 100644 sysdeps/arm/armv6t2/ffsll.S delete mode 100644 sysdeps/arm/armv6t2/memchr.S delete mode 100644 sysdeps/arm/armv6t2/strlen.S delete mode 100644 sysdeps/arm/armv7/Implies delete mode 100644 sysdeps/arm/armv7/multiarch/Makefile delete mode 100644 sysdeps/arm/armv7/multiarch/aeabi_memcpy.c delete mode 100644 sysdeps/arm/armv7/multiarch/ifunc-impl-list.c delete mode 100644 sysdeps/arm/armv7/multiarch/memcpy.S delete mode 100644 sysdeps/arm/armv7/multiarch/memcpy_impl.S delete mode 100644 sysdeps/arm/armv7/multiarch/memcpy_neon.S delete mode 100644 sysdeps/arm/armv7/multiarch/memcpy_vfp.S delete mode 100644 sysdeps/arm/armv7/strcmp.S delete mode 100644 sysdeps/arm/atomic-machine.h delete mode 100644 sysdeps/arm/backtrace.c delete mode 100644 sysdeps/arm/bits/endian.h delete mode 100644 sysdeps/arm/bits/fenv.h delete mode 100644 sysdeps/arm/bits/link.h delete mode 100644 sysdeps/arm/bits/setjmp.h delete mode 100644 sysdeps/arm/bsd-_setjmp.S delete mode 100644 sysdeps/arm/bsd-setjmp.S delete mode 100644 sysdeps/arm/configure delete mode 100644 sysdeps/arm/configure.ac delete mode 100644 sysdeps/arm/crti.S delete mode 100644 sysdeps/arm/crtn.S delete mode 100644 sysdeps/arm/dl-irel.h delete mode 100644 sysdeps/arm/dl-lookupcfg.h delete mode 100644 sysdeps/arm/dl-machine.h delete mode 100644 sysdeps/arm/dl-sysdep.h delete mode 100644 sysdeps/arm/dl-tls.h delete mode 100644 sysdeps/arm/dl-tlsdesc.S delete mode 100644 sysdeps/arm/dl-tlsdesc.h delete mode 100644 sysdeps/arm/dl-trampoline.S delete mode 100644 sysdeps/arm/e_sqrt.c delete mode 100644 sysdeps/arm/e_sqrtf.c delete mode 100644 sysdeps/arm/fclrexcpt.c delete mode 100644 sysdeps/arm/fedisblxcpt.c delete mode 100644 sysdeps/arm/feenablxcpt.c delete mode 100644 sysdeps/arm/fegetenv.c delete mode 100644 sysdeps/arm/fegetexcept.c delete mode 100644 sysdeps/arm/fegetmode.c delete mode 100644 sysdeps/arm/fegetround.c delete mode 100644 sysdeps/arm/feholdexcpt.c delete mode 100644 sysdeps/arm/fenv_private.h delete mode 100644 sysdeps/arm/fesetenv.c delete mode 100644 sysdeps/arm/fesetexcept.c delete mode 100644 sysdeps/arm/fesetmode.c delete mode 100644 sysdeps/arm/fesetround.c delete mode 100644 sysdeps/arm/feupdateenv.c delete mode 100644 sysdeps/arm/fgetexcptflg.c delete mode 100644 sysdeps/arm/find_exidx.c delete mode 100644 sysdeps/arm/fix-fp-int-convert-overflow.h delete mode 100644 sysdeps/arm/fpu_control.h delete mode 100644 sysdeps/arm/fraiseexcpt.c delete mode 100644 sysdeps/arm/frame.h delete mode 100644 sysdeps/arm/framestate.c delete mode 100644 sysdeps/arm/fsetexcptflg.c delete mode 100644 sysdeps/arm/ftestexcept.c delete mode 100644 sysdeps/arm/gcc-compat.h delete mode 100644 sysdeps/arm/gccframe.h delete mode 100644 sysdeps/arm/get-rounding-mode.h delete mode 100644 sysdeps/arm/gmp-mparam.h delete mode 100644 sysdeps/arm/include/bits/setjmp.h delete mode 100644 sysdeps/arm/jmpbuf-unwind.h delete mode 100644 sysdeps/arm/ldsodefs.h delete mode 100644 sysdeps/arm/libc-aeabi_read_tp.S delete mode 100644 sysdeps/arm/libc-tls.c delete mode 100644 sysdeps/arm/libm-test-ulps delete mode 100644 sysdeps/arm/libm-test-ulps-name delete mode 100644 sysdeps/arm/linkmap.h delete mode 100644 sysdeps/arm/machine-gmon.h delete mode 100644 sysdeps/arm/math-tests.h delete mode 100644 sysdeps/arm/math_private.h delete mode 100644 sysdeps/arm/memcpy.S delete mode 100644 sysdeps/arm/memmove.S delete mode 100644 sysdeps/arm/memset.S delete mode 100644 sysdeps/arm/memusage.h delete mode 100644 sysdeps/arm/nptl-aeabi_unwind_cpp_pr1.c delete mode 100644 sysdeps/arm/nptl/Makefile delete mode 100644 sysdeps/arm/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/arm/nptl/bits/semaphore.h delete mode 100644 sysdeps/arm/nptl/pthreaddef.h delete mode 100644 sysdeps/arm/nptl/tcb-offsets.sym delete mode 100644 sysdeps/arm/nptl/tls.h delete mode 100644 sysdeps/arm/preconfigure delete mode 100644 sysdeps/arm/preconfigure.ac delete mode 100644 sysdeps/arm/pt-arm-unwind-resume.S delete mode 100644 sysdeps/arm/rt-aeabi_unwind_cpp_pr1.c delete mode 100644 sysdeps/arm/rt-arm-unwind-resume.S delete mode 100644 sysdeps/arm/rtld-global-offsets.sym delete mode 100644 sysdeps/arm/s_fma.c delete mode 100644 sysdeps/arm/s_fmaf.c delete mode 100644 sysdeps/arm/setfpucw.c delete mode 100644 sysdeps/arm/setjmp.S delete mode 100644 sysdeps/arm/sfp-machine.h delete mode 100644 sysdeps/arm/sotruss-lib.c delete mode 100644 sysdeps/arm/stackinfo.h delete mode 100644 sysdeps/arm/start.S delete mode 100644 sysdeps/arm/static-stubs.c delete mode 100644 sysdeps/arm/strlen.S delete mode 100644 sysdeps/arm/sub_n.S delete mode 100644 sysdeps/arm/submul_1.S delete mode 100644 sysdeps/arm/sys/ucontext.h delete mode 100644 sysdeps/arm/sysdep.h delete mode 100644 sysdeps/arm/test-fpucw.c delete mode 100644 sysdeps/arm/tls-macros.h delete mode 100644 sysdeps/arm/tlsdesc.c delete mode 100644 sysdeps/arm/tlsdesc.sym delete mode 100644 sysdeps/arm/tst-armtlsdescextlazy.c delete mode 100644 sysdeps/arm/tst-armtlsdescextlazymod.c delete mode 100644 sysdeps/arm/tst-armtlsdescextnow.c delete mode 100644 sysdeps/arm/tst-armtlsdescextnowmod.c delete mode 100644 sysdeps/arm/tst-armtlsdescloc.c delete mode 100644 sysdeps/arm/tst-armtlsdesclocmod.c delete mode 100644 sysdeps/arm/tst-audit.h delete mode 100644 sysdeps/arm/unwind-dw2-fde-glibc.c delete mode 100644 sysdeps/arm/unwind-pe.c delete mode 100644 sysdeps/arm/unwind-resume.h delete mode 100644 sysdeps/arm/unwind.h delete mode 100644 sysdeps/generic/Makefile delete mode 100644 sysdeps/generic/_G_config.h delete mode 100644 sysdeps/generic/_itoa.h delete mode 100644 sysdeps/generic/a.out.h delete mode 100644 sysdeps/generic/abort-instr.h delete mode 100644 sysdeps/generic/aio_misc.h delete mode 100644 sysdeps/generic/allocalim.h delete mode 100644 sysdeps/generic/asm-syntax.h delete mode 100644 sysdeps/generic/atomic-machine.h delete mode 100644 sysdeps/generic/c++-types.data delete mode 100644 sysdeps/generic/confstr.h delete mode 100644 sysdeps/generic/device-nrs.h delete mode 100644 sysdeps/generic/dirstream.h delete mode 100644 sysdeps/generic/dl-cache.h delete mode 100644 sysdeps/generic/dl-dtprocnum.h delete mode 100644 sysdeps/generic/dl-dtv.h delete mode 100644 sysdeps/generic/dl-fcntl.h delete mode 100644 sysdeps/generic/dl-fileid.h delete mode 100644 sysdeps/generic/dl-fptr.h delete mode 100644 sysdeps/generic/dl-hash.h delete mode 100644 sysdeps/generic/dl-irel.h delete mode 100644 sysdeps/generic/dl-librecon.h delete mode 100644 sysdeps/generic/dl-lookupcfg.h delete mode 100644 sysdeps/generic/dl-machine.h delete mode 100644 sysdeps/generic/dl-mman.h delete mode 100644 sysdeps/generic/dl-osinfo.h delete mode 100644 sysdeps/generic/dl-procinfo.c delete mode 100644 sysdeps/generic/dl-procinfo.h delete mode 100644 sysdeps/generic/dl-sysdep.h delete mode 100644 sysdeps/generic/dl-tls.h delete mode 100644 sysdeps/generic/dl-unistd.h delete mode 100644 sysdeps/generic/dwarf2.h delete mode 100644 sysdeps/generic/elide.h delete mode 100644 sysdeps/generic/eloop-threshold.h delete mode 100644 sysdeps/generic/entry.h delete mode 100644 sysdeps/generic/errqueue.h delete mode 100644 sysdeps/generic/exit-thread.h delete mode 100644 sysdeps/generic/fd_to_filename.h delete mode 100644 sysdeps/generic/fips-private.h delete mode 100644 sysdeps/generic/fix-fp-int-compare-invalid.h delete mode 100644 sysdeps/generic/fix-fp-int-convert-overflow.h delete mode 100644 sysdeps/generic/fix-int-fp-convert-zero.h delete mode 100644 sysdeps/generic/fork.h delete mode 100644 sysdeps/generic/fpu_control.h delete mode 100644 sysdeps/generic/frame.h delete mode 100644 sysdeps/generic/framestate.c delete mode 100644 sysdeps/generic/gcc-compat.h delete mode 100644 sysdeps/generic/gccframe.h delete mode 100644 sysdeps/generic/get-rounding-mode.h delete mode 100644 sysdeps/generic/gmp-mparam.h delete mode 100644 sysdeps/generic/hp-timing-common.h delete mode 100644 sysdeps/generic/hp-timing.h delete mode 100644 sysdeps/generic/ifreq.h delete mode 100644 sysdeps/generic/ifunc-sel.h delete mode 100644 sysdeps/generic/intr-msg.h delete mode 100644 sysdeps/generic/inttypes.h delete mode 100644 sysdeps/generic/ld.abilist delete mode 100644 sysdeps/generic/ldconfig.h delete mode 100644 sysdeps/generic/ldsodefs.h delete mode 100644 sysdeps/generic/libBrokenLocale.abilist delete mode 100644 sysdeps/generic/libanl.abilist delete mode 100644 sysdeps/generic/libc-lock.h delete mode 100644 sysdeps/generic/libc-mmap.h delete mode 100644 sysdeps/generic/libc-tsd.h delete mode 100644 sysdeps/generic/libc.abilist delete mode 100644 sysdeps/generic/libcidn.abilist delete mode 100644 sysdeps/generic/libcrypt.abilist delete mode 100644 sysdeps/generic/libdl.abilist delete mode 100644 sysdeps/generic/libm-test-ulps delete mode 100644 sysdeps/generic/libm-test-ulps-name delete mode 100644 sysdeps/generic/libm.abilist delete mode 100644 sysdeps/generic/libnsl.abilist delete mode 100644 sysdeps/generic/libnss_compat.abilist delete mode 100644 sysdeps/generic/libnss_db.abilist delete mode 100644 sysdeps/generic/libnss_dns.abilist delete mode 100644 sysdeps/generic/libnss_files.abilist delete mode 100644 sysdeps/generic/libnss_hesiod.abilist delete mode 100644 sysdeps/generic/libnss_nis.abilist delete mode 100644 sysdeps/generic/libnss_nisplus.abilist delete mode 100644 sysdeps/generic/libpthread.abilist delete mode 100644 sysdeps/generic/libresolv.abilist delete mode 100644 sysdeps/generic/librt.abilist delete mode 100644 sysdeps/generic/libutil.abilist delete mode 100644 sysdeps/generic/linkmap.h delete mode 100644 sysdeps/generic/local-setxid.h delete mode 100644 sysdeps/generic/localplt.data delete mode 100644 sysdeps/generic/machine-gmon.h delete mode 100644 sysdeps/generic/machine-lock.h delete mode 100644 sysdeps/generic/machine-sp.h delete mode 100644 sysdeps/generic/malloc-machine.h delete mode 100644 sysdeps/generic/malloc-sysdep.h delete mode 100644 sysdeps/generic/math-tests-arch.h delete mode 100644 sysdeps/generic/math-tests.h delete mode 100644 sysdeps/generic/math-type-macros-double.h delete mode 100644 sysdeps/generic/math-type-macros-float.h delete mode 100644 sysdeps/generic/math-type-macros-float128.h delete mode 100644 sysdeps/generic/math-type-macros-ldouble.h delete mode 100644 sysdeps/generic/math-type-macros.h delete mode 100644 sysdeps/generic/math_ldbl.h delete mode 100644 sysdeps/generic/math_ldbl_opt.h delete mode 100644 sysdeps/generic/math_private.h delete mode 100644 sysdeps/generic/math_private_calls.h delete mode 100644 sysdeps/generic/memcopy.h delete mode 100644 sysdeps/generic/memusage.h delete mode 100644 sysdeps/generic/nan-high-order-bit.h delete mode 100644 sysdeps/generic/net/if.h delete mode 100644 sysdeps/generic/netinet/if_ether.h delete mode 100644 sysdeps/generic/netinet/in_systm.h delete mode 100644 sysdeps/generic/netinet/ip.h delete mode 100644 sysdeps/generic/netinet/tcp.h delete mode 100644 sysdeps/generic/nfs/nfs.h delete mode 100644 sysdeps/generic/not-cancel.h delete mode 100644 sysdeps/generic/nscd-types.h delete mode 100644 sysdeps/generic/pagecopy.h delete mode 100644 sysdeps/generic/paths.h delete mode 100644 sysdeps/generic/profil-counter.h delete mode 100644 sysdeps/generic/pty-private.h delete mode 100644 sysdeps/generic/register-dump.h delete mode 100644 sysdeps/generic/rtld-lowlevel.h delete mode 100644 sysdeps/generic/safe-fatal.h delete mode 100644 sysdeps/generic/sigcontextinfo.h delete mode 100644 sysdeps/generic/siglist.h delete mode 100644 sysdeps/generic/sigset-cvt-mask.h delete mode 100644 sysdeps/generic/sigsetops.h delete mode 100644 sysdeps/generic/stackguard-macros.h delete mode 100644 sysdeps/generic/stackinfo.h delete mode 100644 sysdeps/generic/stdint.h delete mode 100644 sysdeps/generic/stdio-lock.h delete mode 100644 sysdeps/generic/string_private.h delete mode 100644 sysdeps/generic/symbol-hacks.h delete mode 100644 sysdeps/generic/sys/ptrace.h delete mode 100644 sysdeps/generic/sys/reboot.h delete mode 100644 sysdeps/generic/sys/socketvar.h delete mode 100644 sysdeps/generic/sys/swap.h delete mode 100644 sysdeps/generic/sys/syscall.h delete mode 100644 sysdeps/generic/sys/sysinfo.h delete mode 100644 sysdeps/generic/sys/ttydefaults.h delete mode 100644 sysdeps/generic/sys/ucontext.h delete mode 100644 sysdeps/generic/sysdep-cancel.h delete mode 100644 sysdeps/generic/sysdep.h delete mode 100644 sysdeps/generic/thread_state.h delete mode 100644 sysdeps/generic/tininess.h delete mode 100644 sysdeps/generic/tls-macros.h delete mode 100644 sysdeps/generic/tls.h delete mode 100644 sysdeps/generic/tst-audit.h delete mode 100644 sysdeps/generic/tst-stack-align.h delete mode 100644 sysdeps/generic/unsecvars.h delete mode 100644 sysdeps/generic/unwind-dw2-fde-glibc.c delete mode 100644 sysdeps/generic/unwind-dw2-fde.c delete mode 100644 sysdeps/generic/unwind-dw2-fde.h delete mode 100644 sysdeps/generic/unwind-dw2.c delete mode 100644 sysdeps/generic/unwind-pe.c delete mode 100644 sysdeps/generic/unwind-pe.h delete mode 100644 sysdeps/generic/unwind-resume.h delete mode 100644 sysdeps/generic/unwind.h delete mode 100644 sysdeps/generic/utmp-equal.h delete mode 100644 sysdeps/gnu/Makefile delete mode 100644 sysdeps/gnu/bits/ipc.h delete mode 100644 sysdeps/gnu/bits/msq.h delete mode 100644 sysdeps/gnu/bits/sem.h delete mode 100644 sysdeps/gnu/bits/shm.h delete mode 100644 sysdeps/gnu/bits/utmp.h delete mode 100644 sysdeps/gnu/bits/utmpx.h delete mode 100644 sysdeps/gnu/configure delete mode 100644 sysdeps/gnu/configure.ac delete mode 100644 sysdeps/gnu/errlist-compat.awk delete mode 100644 sysdeps/gnu/errlist.awk delete mode 100644 sysdeps/gnu/errlist.c delete mode 100644 sysdeps/gnu/getutmp.c delete mode 100644 sysdeps/gnu/getutmpx.c delete mode 100644 sysdeps/gnu/glob64.c delete mode 100644 sysdeps/gnu/ifaddrs.c delete mode 100644 sysdeps/gnu/ldsodefs.h delete mode 100644 sysdeps/gnu/net/if.h delete mode 100644 sysdeps/gnu/netinet/ip_icmp.h delete mode 100644 sysdeps/gnu/netinet/tcp.h delete mode 100644 sysdeps/gnu/netinet/udp.h delete mode 100644 sysdeps/gnu/rt-unwind-resume.c delete mode 100644 sysdeps/gnu/siglist.c delete mode 100644 sysdeps/gnu/sys/mtio.h delete mode 100644 sysdeps/gnu/unwind-resume.c delete mode 100644 sysdeps/gnu/updwtmp.c delete mode 100644 sysdeps/gnu/utmp_file.c delete mode 100644 sysdeps/gnu/utmpx.h delete mode 100644 sysdeps/hppa/Makefile delete mode 100644 sysdeps/hppa/Versions delete mode 100644 sysdeps/hppa/__longjmp.c delete mode 100644 sysdeps/hppa/abort-instr.h delete mode 100644 sysdeps/hppa/add_n.S delete mode 100644 sysdeps/hppa/bits/endian.h delete mode 100644 sysdeps/hppa/bits/link.h delete mode 100644 sysdeps/hppa/bits/setjmp.h delete mode 100644 sysdeps/hppa/bsd-_setjmp.S delete mode 100644 sysdeps/hppa/bsd-setjmp.S delete mode 100644 sysdeps/hppa/configure delete mode 100644 sysdeps/hppa/configure.ac delete mode 100644 sysdeps/hppa/crti.S delete mode 100644 sysdeps/hppa/crtn.S delete mode 100644 sysdeps/hppa/dl-fptr.c delete mode 100644 sysdeps/hppa/dl-fptr.h delete mode 100644 sysdeps/hppa/dl-irel.h delete mode 100644 sysdeps/hppa/dl-lookupcfg.h delete mode 100644 sysdeps/hppa/dl-machine.h delete mode 100644 sysdeps/hppa/dl-symaddr.c delete mode 100644 sysdeps/hppa/dl-tls.h delete mode 100644 sysdeps/hppa/dl-trampoline.S delete mode 100644 sysdeps/hppa/entry.h delete mode 100644 sysdeps/hppa/fpu/bits/fenv.h delete mode 100644 sysdeps/hppa/fpu/fclrexcpt.c delete mode 100644 sysdeps/hppa/fpu/fedisblxcpt.c delete mode 100644 sysdeps/hppa/fpu/feenablxcpt.c delete mode 100644 sysdeps/hppa/fpu/fegetenv.c delete mode 100644 sysdeps/hppa/fpu/fegetexcept.c delete mode 100644 sysdeps/hppa/fpu/fegetmode.c delete mode 100644 sysdeps/hppa/fpu/fegetround.c delete mode 100644 sysdeps/hppa/fpu/feholdexcpt.c delete mode 100644 sysdeps/hppa/fpu/fesetenv.c delete mode 100644 sysdeps/hppa/fpu/fesetexcept.c delete mode 100644 sysdeps/hppa/fpu/fesetmode.c delete mode 100644 sysdeps/hppa/fpu/fesetround.c delete mode 100644 sysdeps/hppa/fpu/feupdateenv.c delete mode 100644 sysdeps/hppa/fpu/fgetexcptflg.c delete mode 100644 sysdeps/hppa/fpu/fpu_control.h delete mode 100644 sysdeps/hppa/fpu/fraiseexcpt.c delete mode 100644 sysdeps/hppa/fpu/fsetexcptflg.c delete mode 100644 sysdeps/hppa/fpu/ftestexcept.c delete mode 100644 sysdeps/hppa/fpu/libm-test-ulps delete mode 100644 sysdeps/hppa/fpu/libm-test-ulps-name delete mode 100644 sysdeps/hppa/frame.h delete mode 100644 sysdeps/hppa/gccframe.h delete mode 100644 sysdeps/hppa/get-rounding-mode.h delete mode 100644 sysdeps/hppa/hppa1.1/Implies delete mode 100644 sysdeps/hppa/hppa1.1/addmul_1.S delete mode 100644 sysdeps/hppa/hppa1.1/mul_1.S delete mode 100644 sysdeps/hppa/hppa1.1/s_signbit.c delete mode 100644 sysdeps/hppa/hppa1.1/submul_1.S delete mode 100644 sysdeps/hppa/hppa1.1/udiv_qrnnd.S delete mode 100644 sysdeps/hppa/jmpbuf-offsets.h delete mode 100644 sysdeps/hppa/jmpbuf-unwind.h delete mode 100644 sysdeps/hppa/ldsodefs.h delete mode 100644 sysdeps/hppa/libc-tls.c delete mode 100644 sysdeps/hppa/libgcc-compat.c delete mode 100644 sysdeps/hppa/linkmap.h delete mode 100644 sysdeps/hppa/lshift.S delete mode 100644 sysdeps/hppa/machine-gmon.h delete mode 100644 sysdeps/hppa/memusage.h delete mode 100644 sysdeps/hppa/mp_clz_tab.c delete mode 100644 sysdeps/hppa/nan-high-order-bit.h delete mode 100644 sysdeps/hppa/nptl/Makefile delete mode 100644 sysdeps/hppa/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/hppa/nptl/bits/semaphore.h delete mode 100644 sysdeps/hppa/nptl/jmpbuf-unwind.h delete mode 100644 sysdeps/hppa/nptl/pthread_spin_init.c delete mode 100644 sysdeps/hppa/nptl/pthread_spin_unlock.c delete mode 100644 sysdeps/hppa/nptl/pthreaddef.h delete mode 100644 sysdeps/hppa/nptl/tcb-offsets.sym delete mode 100644 sysdeps/hppa/nptl/tls.h delete mode 100644 sysdeps/hppa/nptl/tst-oddstacklimit.c delete mode 100644 sysdeps/hppa/preconfigure delete mode 100644 sysdeps/hppa/rshift.S delete mode 100644 sysdeps/hppa/setjmp.S delete mode 100644 sysdeps/hppa/shlib-versions delete mode 100644 sysdeps/hppa/sotruss-lib.c delete mode 100644 sysdeps/hppa/stackinfo.h delete mode 100644 sysdeps/hppa/start.S delete mode 100644 sysdeps/hppa/sub_n.S delete mode 100644 sysdeps/hppa/sysdep.h delete mode 100644 sysdeps/hppa/tininess.h delete mode 100644 sysdeps/hppa/tls-macros.h delete mode 100644 sysdeps/hppa/tst-audit.h delete mode 100644 sysdeps/hppa/udiv_qrnnd.S delete mode 100644 sysdeps/i386/Implies delete mode 100644 sysdeps/i386/Makefile delete mode 100644 sysdeps/i386/Versions delete mode 100644 sysdeps/i386/____longjmp_chk.S delete mode 100644 sysdeps/i386/__longjmp.S delete mode 100644 sysdeps/i386/abort-instr.h delete mode 100644 sysdeps/i386/add_n.S delete mode 100644 sysdeps/i386/addmul_1.S delete mode 100644 sysdeps/i386/asm-syntax.h delete mode 100644 sysdeps/i386/atomic-machine.h delete mode 100644 sysdeps/i386/backtrace.c delete mode 100644 sysdeps/i386/bcopy.S delete mode 100644 sysdeps/i386/bsd-_setjmp.S delete mode 100644 sysdeps/i386/bsd-setjmp.S delete mode 100644 sysdeps/i386/bzero.S delete mode 100644 sysdeps/i386/cacheinfo.c delete mode 100644 sysdeps/i386/configure delete mode 100644 sysdeps/i386/configure.ac delete mode 100644 sysdeps/i386/crti.S delete mode 100644 sysdeps/i386/crtn.S delete mode 100644 sysdeps/i386/dl-irel.h delete mode 100644 sysdeps/i386/dl-lookupcfg.h delete mode 100644 sysdeps/i386/dl-machine.h delete mode 100644 sysdeps/i386/dl-procinfo.c delete mode 100644 sysdeps/i386/dl-tls.h delete mode 100644 sysdeps/i386/dl-tlsdesc.S delete mode 100644 sysdeps/i386/dl-tlsdesc.h delete mode 100644 sysdeps/i386/dl-trampoline.S delete mode 100644 sysdeps/i386/ffs.c delete mode 100644 sysdeps/i386/fpu/Implies delete mode 100644 sysdeps/i386/fpu/Versions delete mode 100644 sysdeps/i386/fpu/doasin.c delete mode 100644 sysdeps/i386/fpu/e_acos.S delete mode 100644 sysdeps/i386/fpu/e_acosf.S delete mode 100644 sysdeps/i386/fpu/e_acosh.S delete mode 100644 sysdeps/i386/fpu/e_acoshf.S delete mode 100644 sysdeps/i386/fpu/e_acoshl.S delete mode 100644 sysdeps/i386/fpu/e_acosl.c delete mode 100644 sysdeps/i386/fpu/e_asin.S delete mode 100644 sysdeps/i386/fpu/e_asinf.S delete mode 100644 sysdeps/i386/fpu/e_atan2.S delete mode 100644 sysdeps/i386/fpu/e_atan2f.S delete mode 100644 sysdeps/i386/fpu/e_atan2l.c delete mode 100644 sysdeps/i386/fpu/e_atanh.S delete mode 100644 sysdeps/i386/fpu/e_atanhf.S delete mode 100644 sysdeps/i386/fpu/e_atanhl.S delete mode 100644 sysdeps/i386/fpu/e_exp.S delete mode 100644 sysdeps/i386/fpu/e_exp10.S delete mode 100644 sysdeps/i386/fpu/e_exp10f.S delete mode 100644 sysdeps/i386/fpu/e_exp10l.S delete mode 100644 sysdeps/i386/fpu/e_exp2.S delete mode 100644 sysdeps/i386/fpu/e_exp2f.S delete mode 100644 sysdeps/i386/fpu/e_exp2l.S delete mode 100644 sysdeps/i386/fpu/e_expf.S delete mode 100644 sysdeps/i386/fpu/e_expl.S delete mode 100644 sysdeps/i386/fpu/e_fmod.S delete mode 100644 sysdeps/i386/fpu/e_fmodf.S delete mode 100644 sysdeps/i386/fpu/e_fmodl.c delete mode 100644 sysdeps/i386/fpu/e_hypot.S delete mode 100644 sysdeps/i386/fpu/e_hypotf.S delete mode 100644 sysdeps/i386/fpu/e_ilogb.S delete mode 100644 sysdeps/i386/fpu/e_ilogbf.S delete mode 100644 sysdeps/i386/fpu/e_ilogbl.S delete mode 100644 sysdeps/i386/fpu/e_log.S delete mode 100644 sysdeps/i386/fpu/e_log10.S delete mode 100644 sysdeps/i386/fpu/e_log10f.S delete mode 100644 sysdeps/i386/fpu/e_log10l.S delete mode 100644 sysdeps/i386/fpu/e_log2.S delete mode 100644 sysdeps/i386/fpu/e_log2f.S delete mode 100644 sysdeps/i386/fpu/e_log2l.S delete mode 100644 sysdeps/i386/fpu/e_logf.S delete mode 100644 sysdeps/i386/fpu/e_logl.S delete mode 100644 sysdeps/i386/fpu/e_pow.S delete mode 100644 sysdeps/i386/fpu/e_powf.S delete mode 100644 sysdeps/i386/fpu/e_powl.S delete mode 100644 sysdeps/i386/fpu/e_rem_pio2.c delete mode 100644 sysdeps/i386/fpu/e_remainder.S delete mode 100644 sysdeps/i386/fpu/e_remainderf.S delete mode 100644 sysdeps/i386/fpu/e_remainderl.S delete mode 100644 sysdeps/i386/fpu/e_scalb.S delete mode 100644 sysdeps/i386/fpu/e_scalbf.S delete mode 100644 sysdeps/i386/fpu/e_scalbl.S delete mode 100644 sysdeps/i386/fpu/e_sqrt.S delete mode 100644 sysdeps/i386/fpu/e_sqrtf.S delete mode 100644 sysdeps/i386/fpu/e_sqrtl.c delete mode 100644 sysdeps/i386/fpu/fclrexcpt.c delete mode 100644 sysdeps/i386/fpu/fedisblxcpt.c delete mode 100644 sysdeps/i386/fpu/feenablxcpt.c delete mode 100644 sysdeps/i386/fpu/fegetenv.c delete mode 100644 sysdeps/i386/fpu/fegetexcept.c delete mode 100644 sysdeps/i386/fpu/fegetmode.c delete mode 100644 sysdeps/i386/fpu/fegetround.c delete mode 100644 sysdeps/i386/fpu/feholdexcpt.c delete mode 100644 sysdeps/i386/fpu/fenv_private.h delete mode 100644 sysdeps/i386/fpu/fesetenv.c delete mode 100644 sysdeps/i386/fpu/fesetexcept.c delete mode 100644 sysdeps/i386/fpu/fesetmode.c delete mode 100644 sysdeps/i386/fpu/fesetround.c delete mode 100644 sysdeps/i386/fpu/feupdateenv.c delete mode 100644 sysdeps/i386/fpu/fgetexcptflg.c delete mode 100644 sysdeps/i386/fpu/fraiseexcpt.c delete mode 100644 sysdeps/i386/fpu/fsetexcptflg.c delete mode 100644 sysdeps/i386/fpu/ftestexcept.c delete mode 100644 sysdeps/i386/fpu/halfulp.c delete mode 100644 sysdeps/i386/fpu/i386-math-asm.h delete mode 100644 sysdeps/i386/fpu/libm-test-ulps delete mode 100644 sysdeps/i386/fpu/libm-test-ulps-name delete mode 100644 sysdeps/i386/fpu/math-tests.h delete mode 100644 sysdeps/i386/fpu/math_private.h delete mode 100644 sysdeps/i386/fpu/mpatan.c delete mode 100644 sysdeps/i386/fpu/mpatan2.c delete mode 100644 sysdeps/i386/fpu/mpexp.c delete mode 100644 sysdeps/i386/fpu/mplog.c delete mode 100644 sysdeps/i386/fpu/mpsqrt.c delete mode 100644 sysdeps/i386/fpu/s_asinh.S delete mode 100644 sysdeps/i386/fpu/s_asinhf.S delete mode 100644 sysdeps/i386/fpu/s_asinhl.S delete mode 100644 sysdeps/i386/fpu/s_atan.S delete mode 100644 sysdeps/i386/fpu/s_atanf.S delete mode 100644 sysdeps/i386/fpu/s_atanl.c delete mode 100644 sysdeps/i386/fpu/s_cbrt.S delete mode 100644 sysdeps/i386/fpu/s_cbrtf.S delete mode 100644 sysdeps/i386/fpu/s_cbrtl.S delete mode 100644 sysdeps/i386/fpu/s_ceil.S delete mode 100644 sysdeps/i386/fpu/s_ceilf.S delete mode 100644 sysdeps/i386/fpu/s_ceill.S delete mode 100644 sysdeps/i386/fpu/s_copysign.S delete mode 100644 sysdeps/i386/fpu/s_copysignf.S delete mode 100644 sysdeps/i386/fpu/s_copysignl.S delete mode 100644 sysdeps/i386/fpu/s_expm1.S delete mode 100644 sysdeps/i386/fpu/s_expm1f.S delete mode 100644 sysdeps/i386/fpu/s_expm1l.S delete mode 100644 sysdeps/i386/fpu/s_fabs.S delete mode 100644 sysdeps/i386/fpu/s_fabsf.S delete mode 100644 sysdeps/i386/fpu/s_fabsl.S delete mode 100644 sysdeps/i386/fpu/s_fdim.c delete mode 100644 sysdeps/i386/fpu/s_finite.S delete mode 100644 sysdeps/i386/fpu/s_finitef.S delete mode 100644 sysdeps/i386/fpu/s_finitel.S delete mode 100644 sysdeps/i386/fpu/s_floor.S delete mode 100644 sysdeps/i386/fpu/s_floorf.S delete mode 100644 sysdeps/i386/fpu/s_floorl.S delete mode 100644 sysdeps/i386/fpu/s_fmax.S delete mode 100644 sysdeps/i386/fpu/s_fmaxf.S delete mode 100644 sysdeps/i386/fpu/s_fmaxl.S delete mode 100644 sysdeps/i386/fpu/s_fmin.S delete mode 100644 sysdeps/i386/fpu/s_fminf.S delete mode 100644 sysdeps/i386/fpu/s_fminl.S delete mode 100644 sysdeps/i386/fpu/s_fpclassifyl.c delete mode 100644 sysdeps/i386/fpu/s_frexp.S delete mode 100644 sysdeps/i386/fpu/s_frexpf.S delete mode 100644 sysdeps/i386/fpu/s_frexpl.S delete mode 100644 sysdeps/i386/fpu/s_isinfl.c delete mode 100644 sysdeps/i386/fpu/s_isnanl.c delete mode 100644 sysdeps/i386/fpu/s_llrint.S delete mode 100644 sysdeps/i386/fpu/s_llrintf.S delete mode 100644 sysdeps/i386/fpu/s_llrintl.S delete mode 100644 sysdeps/i386/fpu/s_log1p.S delete mode 100644 sysdeps/i386/fpu/s_log1pf.S delete mode 100644 sysdeps/i386/fpu/s_log1pl.S delete mode 100644 sysdeps/i386/fpu/s_logb.S delete mode 100644 sysdeps/i386/fpu/s_logbf.S delete mode 100644 sysdeps/i386/fpu/s_logbl.c delete mode 100644 sysdeps/i386/fpu/s_lrint.S delete mode 100644 sysdeps/i386/fpu/s_lrintf.S delete mode 100644 sysdeps/i386/fpu/s_lrintl.S delete mode 100644 sysdeps/i386/fpu/s_nearbyint.S delete mode 100644 sysdeps/i386/fpu/s_nearbyintf.S delete mode 100644 sysdeps/i386/fpu/s_nearbyintl.S delete mode 100644 sysdeps/i386/fpu/s_nextafterl.c delete mode 100644 sysdeps/i386/fpu/s_nexttoward.c delete mode 100644 sysdeps/i386/fpu/s_nexttowardf.c delete mode 100644 sysdeps/i386/fpu/s_remquo.S delete mode 100644 sysdeps/i386/fpu/s_remquof.S delete mode 100644 sysdeps/i386/fpu/s_remquol.S delete mode 100644 sysdeps/i386/fpu/s_rint.S delete mode 100644 sysdeps/i386/fpu/s_rintf.S delete mode 100644 sysdeps/i386/fpu/s_rintl.c delete mode 100644 sysdeps/i386/fpu/s_scalbln.c delete mode 100644 sysdeps/i386/fpu/s_scalblnf.c delete mode 100644 sysdeps/i386/fpu/s_scalblnl.c delete mode 100644 sysdeps/i386/fpu/s_scalbn.S delete mode 100644 sysdeps/i386/fpu/s_scalbnf.S delete mode 100644 sysdeps/i386/fpu/s_scalbnl.S delete mode 100644 sysdeps/i386/fpu/s_significand.S delete mode 100644 sysdeps/i386/fpu/s_significandf.S delete mode 100644 sysdeps/i386/fpu/s_significandl.c delete mode 100644 sysdeps/i386/fpu/s_trunc.S delete mode 100644 sysdeps/i386/fpu/s_truncf.S delete mode 100644 sysdeps/i386/fpu/s_truncl.S delete mode 100644 sysdeps/i386/fpu/slowexp.c delete mode 100644 sysdeps/i386/fpu/slowpow.c delete mode 100644 sysdeps/i386/fpu/t_exp.c delete mode 100644 sysdeps/i386/fpu/w_sqrt_compat.c delete mode 100644 sysdeps/i386/gccframe.h delete mode 100644 sysdeps/i386/gmp-mparam.h delete mode 100644 sysdeps/i386/htonl.S delete mode 100644 sysdeps/i386/htons.S delete mode 100644 sysdeps/i386/i386-mcount.S delete mode 100644 sysdeps/i386/i586/add_n.S delete mode 100644 sysdeps/i386/i586/addmul_1.S delete mode 100644 sysdeps/i386/i586/bzero.S delete mode 100644 sysdeps/i386/i586/init-arch.h delete mode 100644 sysdeps/i386/i586/lshift.S delete mode 100644 sysdeps/i386/i586/memcopy.h delete mode 100644 sysdeps/i386/i586/memcpy.S delete mode 100644 sysdeps/i386/i586/mempcpy.S delete mode 100644 sysdeps/i386/i586/memset.S delete mode 100644 sysdeps/i386/i586/memusage.h delete mode 100644 sysdeps/i386/i586/mul_1.S delete mode 100644 sysdeps/i386/i586/rshift.S delete mode 100644 sysdeps/i386/i586/stpcpy.S delete mode 100644 sysdeps/i386/i586/strchr.S delete mode 100644 sysdeps/i386/i586/strcpy.S delete mode 100644 sysdeps/i386/i586/strlen.S delete mode 100644 sysdeps/i386/i586/sub_n.S delete mode 100644 sysdeps/i386/i586/submul_1.S delete mode 100644 sysdeps/i386/i686/Makefile delete mode 100644 sysdeps/i386/i686/add_n.S delete mode 100644 sysdeps/i386/i686/bcopy.S delete mode 100644 sysdeps/i386/i686/bzero.S delete mode 100644 sysdeps/i386/i686/dl-hash.h delete mode 100644 sysdeps/i386/i686/ffs.c delete mode 100644 sysdeps/i386/i686/fpu/e_log.S delete mode 100644 sysdeps/i386/i686/fpu/e_logf.S delete mode 100644 sysdeps/i386/i686/fpu/e_logl.S delete mode 100644 sysdeps/i386/i686/fpu/multiarch/Makefile delete mode 100644 sysdeps/i386/i686/fpu/multiarch/e_expf-ia32.S delete mode 100644 sysdeps/i386/i686/fpu/multiarch/e_expf-sse2.S delete mode 100644 sysdeps/i386/i686/fpu/multiarch/e_expf.c delete mode 100644 sysdeps/i386/i686/fpu/multiarch/libm-test-ulps delete mode 100644 sysdeps/i386/i686/fpu/multiarch/libm-test-ulps-name delete mode 100644 sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S delete mode 100644 sysdeps/i386/i686/fpu/multiarch/s_cosf.c delete mode 100644 sysdeps/i386/i686/fpu/multiarch/s_sincosf-sse2.S delete mode 100644 sysdeps/i386/i686/fpu/multiarch/s_sincosf.c delete mode 100644 sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S delete mode 100644 sysdeps/i386/i686/fpu/multiarch/s_sinf.c delete mode 100644 sysdeps/i386/i686/fpu/s_fmax.S delete mode 100644 sysdeps/i386/i686/fpu/s_fmaxf.S delete mode 100644 sysdeps/i386/i686/fpu/s_fmaxl.S delete mode 100644 sysdeps/i386/i686/fpu/s_fmin.S delete mode 100644 sysdeps/i386/i686/fpu/s_fminf.S delete mode 100644 sysdeps/i386/i686/fpu/s_fminl.S delete mode 100644 sysdeps/i386/i686/hp-timing.h delete mode 100644 sysdeps/i386/i686/init-arch.h delete mode 100644 sysdeps/i386/i686/memcmp.S delete mode 100644 sysdeps/i386/i686/memcpy.S delete mode 100644 sysdeps/i386/i686/memmove.S delete mode 100644 sysdeps/i386/i686/mempcpy.S delete mode 100644 sysdeps/i386/i686/memset.S delete mode 100644 sysdeps/i386/i686/memusage.h delete mode 100644 sysdeps/i386/i686/multiarch/Makefile delete mode 100644 sysdeps/i386/i686/multiarch/bcopy-sse2-unaligned.S delete mode 100644 sysdeps/i386/i686/multiarch/bcopy-ssse3-rep.S delete mode 100644 sysdeps/i386/i686/multiarch/bcopy-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/bcopy.S delete mode 100644 sysdeps/i386/i686/multiarch/bzero-sse2-rep.S delete mode 100644 sysdeps/i386/i686/multiarch/bzero-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/bzero.S delete mode 100644 sysdeps/i386/i686/multiarch/ifunc-impl-list.c delete mode 100644 sysdeps/i386/i686/multiarch/locale-defines.sym delete mode 100644 sysdeps/i386/i686/multiarch/memchr-sse2-bsf.S delete mode 100644 sysdeps/i386/i686/multiarch/memchr-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/memchr.S delete mode 100644 sysdeps/i386/i686/multiarch/memcmp-sse4.S delete mode 100644 sysdeps/i386/i686/multiarch/memcmp-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/memcmp.S delete mode 100644 sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S delete mode 100644 sysdeps/i386/i686/multiarch/memcpy-ssse3-rep.S delete mode 100644 sysdeps/i386/i686/multiarch/memcpy-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/memcpy.S delete mode 100644 sysdeps/i386/i686/multiarch/memcpy_chk.S delete mode 100644 sysdeps/i386/i686/multiarch/memmove-sse2-unaligned.S delete mode 100644 sysdeps/i386/i686/multiarch/memmove-ssse3-rep.S delete mode 100644 sysdeps/i386/i686/multiarch/memmove-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/memmove.S delete mode 100644 sysdeps/i386/i686/multiarch/memmove_chk.S delete mode 100644 sysdeps/i386/i686/multiarch/mempcpy-sse2-unaligned.S delete mode 100644 sysdeps/i386/i686/multiarch/mempcpy-ssse3-rep.S delete mode 100644 sysdeps/i386/i686/multiarch/mempcpy-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/mempcpy.S delete mode 100644 sysdeps/i386/i686/multiarch/mempcpy_chk.S delete mode 100644 sysdeps/i386/i686/multiarch/memrchr-c.c delete mode 100644 sysdeps/i386/i686/multiarch/memrchr-sse2-bsf.S delete mode 100644 sysdeps/i386/i686/multiarch/memrchr-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/memrchr.S delete mode 100644 sysdeps/i386/i686/multiarch/memset-sse2-rep.S delete mode 100644 sysdeps/i386/i686/multiarch/memset-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/memset.S delete mode 100644 sysdeps/i386/i686/multiarch/memset_chk.S delete mode 100644 sysdeps/i386/i686/multiarch/rawmemchr-sse2-bsf.S delete mode 100644 sysdeps/i386/i686/multiarch/rawmemchr-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/rawmemchr.S delete mode 100644 sysdeps/i386/i686/multiarch/rtld-strnlen.c delete mode 100644 sysdeps/i386/i686/multiarch/s_fma-fma.c delete mode 100644 sysdeps/i386/i686/multiarch/s_fma.c delete mode 100644 sysdeps/i386/i686/multiarch/s_fmaf-fma.c delete mode 100644 sysdeps/i386/i686/multiarch/s_fmaf.c delete mode 100644 sysdeps/i386/i686/multiarch/sched_cpucount.c delete mode 100644 sysdeps/i386/i686/multiarch/stpcpy-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/stpcpy-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/stpcpy.S delete mode 100644 sysdeps/i386/i686/multiarch/stpncpy-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/stpncpy-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/stpncpy.S delete mode 100644 sysdeps/i386/i686/multiarch/strcasecmp-c.c delete mode 100644 sysdeps/i386/i686/multiarch/strcasecmp.S delete mode 100644 sysdeps/i386/i686/multiarch/strcasecmp_l-c.c delete mode 100644 sysdeps/i386/i686/multiarch/strcasecmp_l-sse4.S delete mode 100644 sysdeps/i386/i686/multiarch/strcasecmp_l-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/strcasecmp_l.S delete mode 100644 sysdeps/i386/i686/multiarch/strcat-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/strcat-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/strcat.S delete mode 100644 sysdeps/i386/i686/multiarch/strchr-sse2-bsf.S delete mode 100644 sysdeps/i386/i686/multiarch/strchr-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/strchr.S delete mode 100644 sysdeps/i386/i686/multiarch/strcmp-sse4.S delete mode 100644 sysdeps/i386/i686/multiarch/strcmp-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/strcmp.S delete mode 100644 sysdeps/i386/i686/multiarch/strcpy-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/strcpy-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/strcpy.S delete mode 100644 sysdeps/i386/i686/multiarch/strcspn-c.c delete mode 100644 sysdeps/i386/i686/multiarch/strcspn.S delete mode 100644 sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S delete mode 100644 sysdeps/i386/i686/multiarch/strlen-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/strlen.S delete mode 100644 sysdeps/i386/i686/multiarch/strncase-c.c delete mode 100644 sysdeps/i386/i686/multiarch/strncase.S delete mode 100644 sysdeps/i386/i686/multiarch/strncase_l-c.c delete mode 100644 sysdeps/i386/i686/multiarch/strncase_l-sse4.S delete mode 100644 sysdeps/i386/i686/multiarch/strncase_l-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/strncase_l.S delete mode 100644 sysdeps/i386/i686/multiarch/strncat-c.c delete mode 100644 sysdeps/i386/i686/multiarch/strncat-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/strncat-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/strncat.S delete mode 100644 sysdeps/i386/i686/multiarch/strncmp-c.c delete mode 100644 sysdeps/i386/i686/multiarch/strncmp-sse4.S delete mode 100644 sysdeps/i386/i686/multiarch/strncmp-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/strncmp.S delete mode 100644 sysdeps/i386/i686/multiarch/strncpy-c.c delete mode 100644 sysdeps/i386/i686/multiarch/strncpy-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/strncpy-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/strncpy.S delete mode 100644 sysdeps/i386/i686/multiarch/strnlen-c.c delete mode 100644 sysdeps/i386/i686/multiarch/strnlen-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/strnlen.S delete mode 100644 sysdeps/i386/i686/multiarch/strpbrk-c.c delete mode 100644 sysdeps/i386/i686/multiarch/strpbrk.S delete mode 100644 sysdeps/i386/i686/multiarch/strrchr-sse2-bsf.S delete mode 100644 sysdeps/i386/i686/multiarch/strrchr-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/strrchr.S delete mode 100644 sysdeps/i386/i686/multiarch/strspn-c.c delete mode 100644 sysdeps/i386/i686/multiarch/strspn.S delete mode 100644 sysdeps/i386/i686/multiarch/test-multiarch.c delete mode 100644 sysdeps/i386/i686/multiarch/varshift.c delete mode 100644 sysdeps/i386/i686/multiarch/varshift.h delete mode 100644 sysdeps/i386/i686/multiarch/wcschr-c.c delete mode 100644 sysdeps/i386/i686/multiarch/wcschr-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/wcschr.S delete mode 100644 sysdeps/i386/i686/multiarch/wcscmp-c.c delete mode 100644 sysdeps/i386/i686/multiarch/wcscmp-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/wcscmp.S delete mode 100644 sysdeps/i386/i686/multiarch/wcscpy-c.c delete mode 100644 sysdeps/i386/i686/multiarch/wcscpy-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/wcscpy.S delete mode 100644 sysdeps/i386/i686/multiarch/wcslen-c.c delete mode 100644 sysdeps/i386/i686/multiarch/wcslen-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/wcslen.S delete mode 100644 sysdeps/i386/i686/multiarch/wcsrchr-c.c delete mode 100644 sysdeps/i386/i686/multiarch/wcsrchr-sse2.S delete mode 100644 sysdeps/i386/i686/multiarch/wcsrchr.S delete mode 100644 sysdeps/i386/i686/multiarch/wmemcmp-c.c delete mode 100644 sysdeps/i386/i686/multiarch/wmemcmp-sse4.S delete mode 100644 sysdeps/i386/i686/multiarch/wmemcmp-ssse3.S delete mode 100644 sysdeps/i386/i686/multiarch/wmemcmp.S delete mode 100644 sysdeps/i386/i686/nptl/tls.h delete mode 100644 sysdeps/i386/i686/pthread_spin_trylock.S delete mode 100644 sysdeps/i386/i686/stack-aliasing.h delete mode 100644 sysdeps/i386/i686/strcmp.S delete mode 100644 sysdeps/i386/i686/tst-stack-align.h delete mode 100644 sysdeps/i386/i786/Implies delete mode 100644 sysdeps/i386/init-arch.h delete mode 100644 sysdeps/i386/jmpbuf-offsets.h delete mode 100644 sysdeps/i386/jmpbuf-unwind.h delete mode 100644 sysdeps/i386/ldbl2mpn.c delete mode 100644 sysdeps/i386/ldsodefs.h delete mode 100644 sysdeps/i386/link-defines.sym delete mode 100644 sysdeps/i386/lshift.S delete mode 100644 sysdeps/i386/machine-gmon.h delete mode 100644 sysdeps/i386/memchr.S delete mode 100644 sysdeps/i386/memcmp.S delete mode 100644 sysdeps/i386/memcopy.h delete mode 100644 sysdeps/i386/memcpy.S delete mode 100644 sysdeps/i386/memcpy_chk.S delete mode 100644 sysdeps/i386/memmove.S delete mode 100644 sysdeps/i386/memmove_chk.S delete mode 100644 sysdeps/i386/mempcpy.S delete mode 100644 sysdeps/i386/mempcpy_chk.S delete mode 100644 sysdeps/i386/memset.S delete mode 100644 sysdeps/i386/memset_chk.S delete mode 100644 sysdeps/i386/memusage.h delete mode 100644 sysdeps/i386/mp_clz_tab.c delete mode 100644 sysdeps/i386/mul_1.S delete mode 100644 sysdeps/i386/nptl/Makefile delete mode 100644 sysdeps/i386/nptl/pthread_spin_init.c delete mode 100644 sysdeps/i386/nptl/pthread_spin_lock.S delete mode 100644 sysdeps/i386/nptl/pthread_spin_unlock.S delete mode 100644 sysdeps/i386/nptl/pthreaddef.h delete mode 100644 sysdeps/i386/nptl/tcb-offsets.sym delete mode 100644 sysdeps/i386/nptl/tls.h delete mode 100644 sysdeps/i386/preconfigure delete mode 100644 sysdeps/i386/pthread_spin_trylock.S delete mode 100644 sysdeps/i386/rawmemchr.S delete mode 100644 sysdeps/i386/rshift.S delete mode 100644 sysdeps/i386/setfpucw.c delete mode 100644 sysdeps/i386/setjmp.S delete mode 100644 sysdeps/i386/stackguard-macros.h delete mode 100644 sysdeps/i386/stackinfo.h delete mode 100644 sysdeps/i386/start.S delete mode 100644 sysdeps/i386/stpcpy.S delete mode 100644 sysdeps/i386/stpncpy.S delete mode 100644 sysdeps/i386/strcat.S delete mode 100644 sysdeps/i386/strchr.S delete mode 100644 sysdeps/i386/strchrnul.S delete mode 100644 sysdeps/i386/strcspn.S delete mode 100644 sysdeps/i386/string-inlines.c delete mode 100644 sysdeps/i386/strlen.S delete mode 100644 sysdeps/i386/strlen.c delete mode 100644 sysdeps/i386/strpbrk.S delete mode 100644 sysdeps/i386/strrchr.S delete mode 100644 sysdeps/i386/strspn.S delete mode 100644 sysdeps/i386/sub_n.S delete mode 100644 sysdeps/i386/submul_1.S delete mode 100644 sysdeps/i386/symbol-hacks.h delete mode 100644 sysdeps/i386/sys/ucontext.h delete mode 100644 sysdeps/i386/sysdep.h delete mode 100644 sysdeps/i386/tls-macros.h delete mode 100644 sysdeps/i386/tlsdesc.c delete mode 100644 sysdeps/i386/tlsdesc.sym delete mode 100644 sysdeps/i386/tst-audit.h delete mode 100644 sysdeps/i386/tst-audit3.c delete mode 100644 sysdeps/i386/tst-audit3.h delete mode 100644 sysdeps/i386/tst-auditmod3a.c delete mode 100644 sysdeps/i386/tst-auditmod3b.c delete mode 100755 sysdeps/i386/tst-ld-sse-use.sh delete mode 100644 sysdeps/i386/tst-stack-align.h delete mode 100644 sysdeps/ia64/Implies delete mode 100644 sysdeps/ia64/Makeconfig delete mode 100644 sysdeps/ia64/Makefile delete mode 100644 sysdeps/ia64/Versions delete mode 100644 sysdeps/ia64/_mcount.S delete mode 100644 sysdeps/ia64/abort-instr.h delete mode 100644 sysdeps/ia64/atomic-machine.h delete mode 100644 sysdeps/ia64/backtrace.c delete mode 100644 sysdeps/ia64/bcopy.S delete mode 100644 sysdeps/ia64/bits/byteswap-16.h delete mode 100644 sysdeps/ia64/bits/byteswap.h delete mode 100644 sysdeps/ia64/bits/fenv.h delete mode 100644 sysdeps/ia64/bits/fp-logb.h delete mode 100644 sysdeps/ia64/bits/huge_vall.h delete mode 100644 sysdeps/ia64/bits/link.h delete mode 100644 sysdeps/ia64/bits/xtitypes.h delete mode 100644 sysdeps/ia64/bzero.S delete mode 100644 sysdeps/ia64/configure delete mode 100644 sysdeps/ia64/configure.ac delete mode 100644 sysdeps/ia64/crti.S delete mode 100644 sysdeps/ia64/crtn.S delete mode 100644 sysdeps/ia64/dl-dtprocnum.h delete mode 100644 sysdeps/ia64/dl-fptr.h delete mode 100644 sysdeps/ia64/dl-lookupcfg.h delete mode 100644 sysdeps/ia64/dl-machine.h delete mode 100644 sysdeps/ia64/dl-sysdep.h delete mode 100644 sysdeps/ia64/dl-tls.h delete mode 100644 sysdeps/ia64/dl-trampoline.S delete mode 100644 sysdeps/ia64/entry.h delete mode 100644 sysdeps/ia64/fpu/Makefile delete mode 100644 sysdeps/ia64/fpu/README delete mode 100644 sysdeps/ia64/fpu/Versions delete mode 100644 sysdeps/ia64/fpu/bits/math-finite.h delete mode 100644 sysdeps/ia64/fpu/bits/mathinline.h delete mode 100644 sysdeps/ia64/fpu/branred.c delete mode 100644 sysdeps/ia64/fpu/doasin.c delete mode 100644 sysdeps/ia64/fpu/dosincos.c delete mode 100644 sysdeps/ia64/fpu/e_acos.S delete mode 100644 sysdeps/ia64/fpu/e_acosf.S delete mode 100644 sysdeps/ia64/fpu/e_acosh.S delete mode 100644 sysdeps/ia64/fpu/e_acoshf.S delete mode 100644 sysdeps/ia64/fpu/e_acoshl.S delete mode 100644 sysdeps/ia64/fpu/e_acosl.S delete mode 100644 sysdeps/ia64/fpu/e_asin.S delete mode 100644 sysdeps/ia64/fpu/e_asinf.S delete mode 100644 sysdeps/ia64/fpu/e_asinl.S delete mode 100644 sysdeps/ia64/fpu/e_atan2.S delete mode 100644 sysdeps/ia64/fpu/e_atan2f.S delete mode 100644 sysdeps/ia64/fpu/e_atan2l.c delete mode 100644 sysdeps/ia64/fpu/e_atanh.S delete mode 100644 sysdeps/ia64/fpu/e_atanhf.S delete mode 100644 sysdeps/ia64/fpu/e_atanhl.S delete mode 100644 sysdeps/ia64/fpu/e_cosh.S delete mode 100644 sysdeps/ia64/fpu/e_coshf.S delete mode 100644 sysdeps/ia64/fpu/e_coshl.S delete mode 100644 sysdeps/ia64/fpu/e_exp.S delete mode 100644 sysdeps/ia64/fpu/e_exp10.S delete mode 100644 sysdeps/ia64/fpu/e_exp10f.S delete mode 100644 sysdeps/ia64/fpu/e_exp10l.S delete mode 100644 sysdeps/ia64/fpu/e_exp2.S delete mode 100644 sysdeps/ia64/fpu/e_exp2f.S delete mode 100644 sysdeps/ia64/fpu/e_exp2l.S delete mode 100644 sysdeps/ia64/fpu/e_expf.S delete mode 100644 sysdeps/ia64/fpu/e_expl.c delete mode 100644 sysdeps/ia64/fpu/e_fmod.S delete mode 100644 sysdeps/ia64/fpu/e_fmodf.S delete mode 100644 sysdeps/ia64/fpu/e_fmodl.S delete mode 100644 sysdeps/ia64/fpu/e_gamma_r.c delete mode 100644 sysdeps/ia64/fpu/e_gammaf_r.c delete mode 100644 sysdeps/ia64/fpu/e_gammal_r.c delete mode 100644 sysdeps/ia64/fpu/e_hypot.S delete mode 100644 sysdeps/ia64/fpu/e_hypotf.S delete mode 100644 sysdeps/ia64/fpu/e_hypotl.S delete mode 100644 sysdeps/ia64/fpu/e_ilogbl.S delete mode 100644 sysdeps/ia64/fpu/e_lgamma_r.c delete mode 100644 sysdeps/ia64/fpu/e_lgammaf_r.c delete mode 100644 sysdeps/ia64/fpu/e_lgammal_r.c delete mode 100644 sysdeps/ia64/fpu/e_log.S delete mode 100644 sysdeps/ia64/fpu/e_log10.c delete mode 100644 sysdeps/ia64/fpu/e_log10f.c delete mode 100644 sysdeps/ia64/fpu/e_log10l.c delete mode 100644 sysdeps/ia64/fpu/e_log2.S delete mode 100644 sysdeps/ia64/fpu/e_log2f.S delete mode 100644 sysdeps/ia64/fpu/e_log2l.S delete mode 100644 sysdeps/ia64/fpu/e_logf.S delete mode 100644 sysdeps/ia64/fpu/e_logl.S delete mode 100644 sysdeps/ia64/fpu/e_pow.S delete mode 100644 sysdeps/ia64/fpu/e_powf.S delete mode 100644 sysdeps/ia64/fpu/e_powl.S delete mode 100644 sysdeps/ia64/fpu/e_rem_pio2.c delete mode 100644 sysdeps/ia64/fpu/e_rem_pio2f.c delete mode 100644 sysdeps/ia64/fpu/e_rem_pio2l.c delete mode 100644 sysdeps/ia64/fpu/e_remainder.S delete mode 100644 sysdeps/ia64/fpu/e_remainderf.S delete mode 100644 sysdeps/ia64/fpu/e_remainderl.S delete mode 100644 sysdeps/ia64/fpu/e_scalb.S delete mode 100644 sysdeps/ia64/fpu/e_scalbf.S delete mode 100644 sysdeps/ia64/fpu/e_scalbl.S delete mode 100644 sysdeps/ia64/fpu/e_sinh.S delete mode 100644 sysdeps/ia64/fpu/e_sinhf.S delete mode 100644 sysdeps/ia64/fpu/e_sinhl.S delete mode 100644 sysdeps/ia64/fpu/e_sqrt.S delete mode 100644 sysdeps/ia64/fpu/e_sqrtf.S delete mode 100644 sysdeps/ia64/fpu/e_sqrtl.S delete mode 100644 sysdeps/ia64/fpu/fclrexcpt.c delete mode 100644 sysdeps/ia64/fpu/fedisblxcpt.c delete mode 100644 sysdeps/ia64/fpu/feenablxcpt.c delete mode 100644 sysdeps/ia64/fpu/fegetenv.c delete mode 100644 sysdeps/ia64/fpu/fegetexcept.c delete mode 100644 sysdeps/ia64/fpu/fegetmode.c delete mode 100644 sysdeps/ia64/fpu/fegetround.c delete mode 100644 sysdeps/ia64/fpu/feholdexcpt.c delete mode 100644 sysdeps/ia64/fpu/fesetenv.c delete mode 100644 sysdeps/ia64/fpu/fesetexcept.c delete mode 100644 sysdeps/ia64/fpu/fesetmode.c delete mode 100644 sysdeps/ia64/fpu/fesetround.c delete mode 100644 sysdeps/ia64/fpu/feupdateenv.c delete mode 100644 sysdeps/ia64/fpu/fgetexcptflg.c delete mode 100644 sysdeps/ia64/fpu/fraiseexcpt.c delete mode 100644 sysdeps/ia64/fpu/fsetexcptflg.c delete mode 100644 sysdeps/ia64/fpu/ftestexcept.c delete mode 100644 sysdeps/ia64/fpu/gen_import_file_list delete mode 100644 sysdeps/ia64/fpu/get-rounding-mode.h delete mode 100644 sysdeps/ia64/fpu/halfulp.c delete mode 100644 sysdeps/ia64/fpu/import_check delete mode 100644 sysdeps/ia64/fpu/import_diffs delete mode 100644 sysdeps/ia64/fpu/import_file.awk delete mode 100644 sysdeps/ia64/fpu/import_intel_libm delete mode 100644 sysdeps/ia64/fpu/k_rem_pio2.c delete mode 100644 sysdeps/ia64/fpu/k_rem_pio2f.c delete mode 100644 sysdeps/ia64/fpu/lgamma-compat.h delete mode 100644 sysdeps/ia64/fpu/libc_libm_error.c delete mode 100644 sysdeps/ia64/fpu/libm-symbols.h delete mode 100644 sysdeps/ia64/fpu/libm-test-ulps delete mode 100644 sysdeps/ia64/fpu/libm-test-ulps-name delete mode 100644 sysdeps/ia64/fpu/libm_cpu_defs.h delete mode 100644 sysdeps/ia64/fpu/libm_error.c delete mode 100644 sysdeps/ia64/fpu/libm_error_codes.h delete mode 100644 sysdeps/ia64/fpu/libm_frexp.S delete mode 100644 sysdeps/ia64/fpu/libm_frexp4.S delete mode 100644 sysdeps/ia64/fpu/libm_frexp4f.S delete mode 100644 sysdeps/ia64/fpu/libm_frexp4l.S delete mode 100644 sysdeps/ia64/fpu/libm_frexpf.S delete mode 100644 sysdeps/ia64/fpu/libm_frexpl.S delete mode 100644 sysdeps/ia64/fpu/libm_lgamma.S delete mode 100644 sysdeps/ia64/fpu/libm_lgammaf.S delete mode 100644 sysdeps/ia64/fpu/libm_lgammal.S delete mode 100644 sysdeps/ia64/fpu/libm_reduce.S delete mode 100644 sysdeps/ia64/fpu/libm_scalblnf.S delete mode 100644 sysdeps/ia64/fpu/libm_sincos.S delete mode 100644 sysdeps/ia64/fpu/libm_sincos_large.S delete mode 100644 sysdeps/ia64/fpu/libm_sincosf.S delete mode 100644 sysdeps/ia64/fpu/libm_sincosl.S delete mode 100644 sysdeps/ia64/fpu/libm_support.h delete mode 100644 sysdeps/ia64/fpu/libm_tan.S delete mode 100644 sysdeps/ia64/fpu/math_ldbl.h delete mode 100644 sysdeps/ia64/fpu/mpa.c delete mode 100644 sysdeps/ia64/fpu/mpatan.c delete mode 100644 sysdeps/ia64/fpu/mpatan2.c delete mode 100644 sysdeps/ia64/fpu/mpexp.c delete mode 100644 sysdeps/ia64/fpu/mplog.c delete mode 100644 sysdeps/ia64/fpu/mpsqrt.c delete mode 100644 sysdeps/ia64/fpu/mptan.c delete mode 100644 sysdeps/ia64/fpu/printf_fphex.c delete mode 100644 sysdeps/ia64/fpu/s_asinh.S delete mode 100644 sysdeps/ia64/fpu/s_asinhf.S delete mode 100644 sysdeps/ia64/fpu/s_asinhl.S delete mode 100644 sysdeps/ia64/fpu/s_atan.S delete mode 100644 sysdeps/ia64/fpu/s_atanf.S delete mode 100644 sysdeps/ia64/fpu/s_atanl.S delete mode 100644 sysdeps/ia64/fpu/s_cbrt.S delete mode 100644 sysdeps/ia64/fpu/s_cbrtf.S delete mode 100644 sysdeps/ia64/fpu/s_cbrtl.S delete mode 100644 sysdeps/ia64/fpu/s_ceil.S delete mode 100644 sysdeps/ia64/fpu/s_ceilf.S delete mode 100644 sysdeps/ia64/fpu/s_ceill.S delete mode 100644 sysdeps/ia64/fpu/s_copysign.S delete mode 100644 sysdeps/ia64/fpu/s_copysignf.S delete mode 100644 sysdeps/ia64/fpu/s_copysignl.S delete mode 100644 sysdeps/ia64/fpu/s_cos.S delete mode 100644 sysdeps/ia64/fpu/s_cosf.S delete mode 100644 sysdeps/ia64/fpu/s_cosl.S delete mode 100644 sysdeps/ia64/fpu/s_erf.S delete mode 100644 sysdeps/ia64/fpu/s_erfc.S delete mode 100644 sysdeps/ia64/fpu/s_erfcf.S delete mode 100644 sysdeps/ia64/fpu/s_erfcl.S delete mode 100644 sysdeps/ia64/fpu/s_erff.S delete mode 100644 sysdeps/ia64/fpu/s_erfl.S delete mode 100644 sysdeps/ia64/fpu/s_expm1.S delete mode 100644 sysdeps/ia64/fpu/s_expm1f.S delete mode 100644 sysdeps/ia64/fpu/s_expm1l.S delete mode 100644 sysdeps/ia64/fpu/s_fabs.S delete mode 100644 sysdeps/ia64/fpu/s_fabsf.S delete mode 100644 sysdeps/ia64/fpu/s_fabsl.S delete mode 100644 sysdeps/ia64/fpu/s_fdim.S delete mode 100644 sysdeps/ia64/fpu/s_fdimf.S delete mode 100644 sysdeps/ia64/fpu/s_fdiml.S delete mode 100644 sysdeps/ia64/fpu/s_finite.S delete mode 100644 sysdeps/ia64/fpu/s_finitef.S delete mode 100644 sysdeps/ia64/fpu/s_finitel.S delete mode 100644 sysdeps/ia64/fpu/s_floor.S delete mode 100644 sysdeps/ia64/fpu/s_floorf.S delete mode 100644 sysdeps/ia64/fpu/s_floorl.S delete mode 100644 sysdeps/ia64/fpu/s_fma.S delete mode 100644 sysdeps/ia64/fpu/s_fmaf.S delete mode 100644 sysdeps/ia64/fpu/s_fmal.S delete mode 100644 sysdeps/ia64/fpu/s_fmax.S delete mode 100644 sysdeps/ia64/fpu/s_fmaxf.S delete mode 100644 sysdeps/ia64/fpu/s_fmaxl.S delete mode 100644 sysdeps/ia64/fpu/s_fpclassify.S delete mode 100644 sysdeps/ia64/fpu/s_fpclassifyf.S delete mode 100644 sysdeps/ia64/fpu/s_fpclassifyl.S delete mode 100644 sysdeps/ia64/fpu/s_frexp.c delete mode 100644 sysdeps/ia64/fpu/s_frexpf.c delete mode 100644 sysdeps/ia64/fpu/s_frexpl.c delete mode 100644 sysdeps/ia64/fpu/s_ilogb.S delete mode 100644 sysdeps/ia64/fpu/s_ilogbf.S delete mode 100644 sysdeps/ia64/fpu/s_isinf.S delete mode 100644 sysdeps/ia64/fpu/s_isinff.S delete mode 100644 sysdeps/ia64/fpu/s_isinfl.S delete mode 100644 sysdeps/ia64/fpu/s_isnan.S delete mode 100644 sysdeps/ia64/fpu/s_isnanf.S delete mode 100644 sysdeps/ia64/fpu/s_isnanl.S delete mode 100644 sysdeps/ia64/fpu/s_ldexp.c delete mode 100644 sysdeps/ia64/fpu/s_ldexpf.c delete mode 100644 sysdeps/ia64/fpu/s_ldexpl.c delete mode 100644 sysdeps/ia64/fpu/s_libm_ldexp.S delete mode 100644 sysdeps/ia64/fpu/s_libm_ldexpf.S delete mode 100644 sysdeps/ia64/fpu/s_libm_ldexpl.S delete mode 100644 sysdeps/ia64/fpu/s_libm_scalbn.S delete mode 100644 sysdeps/ia64/fpu/s_libm_scalbnf.S delete mode 100644 sysdeps/ia64/fpu/s_libm_scalbnl.S delete mode 100644 sysdeps/ia64/fpu/s_log1p.S delete mode 100644 sysdeps/ia64/fpu/s_log1pf.S delete mode 100644 sysdeps/ia64/fpu/s_log1pl.S delete mode 100644 sysdeps/ia64/fpu/s_logb.S delete mode 100644 sysdeps/ia64/fpu/s_logbf.S delete mode 100644 sysdeps/ia64/fpu/s_logbl.S delete mode 100644 sysdeps/ia64/fpu/s_matherrf.c delete mode 100644 sysdeps/ia64/fpu/s_matherrl.c delete mode 100644 sysdeps/ia64/fpu/s_modf.S delete mode 100644 sysdeps/ia64/fpu/s_modff.S delete mode 100644 sysdeps/ia64/fpu/s_modfl.S delete mode 100644 sysdeps/ia64/fpu/s_nearbyint.S delete mode 100644 sysdeps/ia64/fpu/s_nearbyintf.S delete mode 100644 sysdeps/ia64/fpu/s_nearbyintl.S delete mode 100644 sysdeps/ia64/fpu/s_nextafter.S delete mode 100644 sysdeps/ia64/fpu/s_nextafterf.S delete mode 100644 sysdeps/ia64/fpu/s_nextafterl.S delete mode 100644 sysdeps/ia64/fpu/s_nexttoward.S delete mode 100644 sysdeps/ia64/fpu/s_nexttowardf.S delete mode 100644 sysdeps/ia64/fpu/s_nexttowardl.S delete mode 100644 sysdeps/ia64/fpu/s_rint.S delete mode 100644 sysdeps/ia64/fpu/s_rintf.S delete mode 100644 sysdeps/ia64/fpu/s_rintl.S delete mode 100644 sysdeps/ia64/fpu/s_round.S delete mode 100644 sysdeps/ia64/fpu/s_roundf.S delete mode 100644 sysdeps/ia64/fpu/s_roundl.S delete mode 100644 sysdeps/ia64/fpu/s_scalblnf.c delete mode 100644 sysdeps/ia64/fpu/s_scalbn.c delete mode 100644 sysdeps/ia64/fpu/s_scalbnf.c delete mode 100644 sysdeps/ia64/fpu/s_scalbnl.c delete mode 100644 sysdeps/ia64/fpu/s_signbit.S delete mode 100644 sysdeps/ia64/fpu/s_signbitf.S delete mode 100644 sysdeps/ia64/fpu/s_signbitl.S delete mode 100644 sysdeps/ia64/fpu/s_significand.S delete mode 100644 sysdeps/ia64/fpu/s_significandf.S delete mode 100644 sysdeps/ia64/fpu/s_significandl.S delete mode 100644 sysdeps/ia64/fpu/s_sin.c delete mode 100644 sysdeps/ia64/fpu/s_sincos.c delete mode 100644 sysdeps/ia64/fpu/s_sincosf.c delete mode 100644 sysdeps/ia64/fpu/s_sincosl.c delete mode 100644 sysdeps/ia64/fpu/s_sinf.c delete mode 100644 sysdeps/ia64/fpu/s_sinl.c delete mode 100644 sysdeps/ia64/fpu/s_tan.S delete mode 100644 sysdeps/ia64/fpu/s_tanf.S delete mode 100644 sysdeps/ia64/fpu/s_tanh.S delete mode 100644 sysdeps/ia64/fpu/s_tanhf.S delete mode 100644 sysdeps/ia64/fpu/s_tanhl.S delete mode 100644 sysdeps/ia64/fpu/s_tanl.S delete mode 100644 sysdeps/ia64/fpu/s_trunc.S delete mode 100644 sysdeps/ia64/fpu/s_truncf.S delete mode 100644 sysdeps/ia64/fpu/s_truncl.S delete mode 100644 sysdeps/ia64/fpu/sincos32.c delete mode 100644 sysdeps/ia64/fpu/slowexp.c delete mode 100644 sysdeps/ia64/fpu/slowpow.c delete mode 100644 sysdeps/ia64/fpu/t_exp.c delete mode 100644 sysdeps/ia64/fpu/w_acos_compat.c delete mode 100644 sysdeps/ia64/fpu/w_acosf_compat.c delete mode 100644 sysdeps/ia64/fpu/w_acosh_compat.c delete mode 100644 sysdeps/ia64/fpu/w_acoshf_compat.c delete mode 100644 sysdeps/ia64/fpu/w_acoshl_compat.c delete mode 100644 sysdeps/ia64/fpu/w_acosl_compat.c delete mode 100644 sysdeps/ia64/fpu/w_asin_compat.c delete mode 100644 sysdeps/ia64/fpu/w_asinf_compat.c delete mode 100644 sysdeps/ia64/fpu/w_asinl_compat.c delete mode 100644 sysdeps/ia64/fpu/w_atan2_compat.c delete mode 100644 sysdeps/ia64/fpu/w_atan2f_compat.c delete mode 100644 sysdeps/ia64/fpu/w_atan2l_compat.c delete mode 100644 sysdeps/ia64/fpu/w_atanh_compat.c delete mode 100644 sysdeps/ia64/fpu/w_atanhf_compat.c delete mode 100644 sysdeps/ia64/fpu/w_atanhl_compat.c delete mode 100644 sysdeps/ia64/fpu/w_cosh_compat.c delete mode 100644 sysdeps/ia64/fpu/w_coshf_compat.c delete mode 100644 sysdeps/ia64/fpu/w_coshl_compat.c delete mode 100644 sysdeps/ia64/fpu/w_exp10_compat.c delete mode 100644 sysdeps/ia64/fpu/w_exp10f_compat.c delete mode 100644 sysdeps/ia64/fpu/w_exp10l_compat.c delete mode 100644 sysdeps/ia64/fpu/w_exp2_compat.c delete mode 100644 sysdeps/ia64/fpu/w_exp2f_compat.c delete mode 100644 sysdeps/ia64/fpu/w_exp2l_compat.c delete mode 100644 sysdeps/ia64/fpu/w_exp_compat.c delete mode 100644 sysdeps/ia64/fpu/w_expf_compat.c delete mode 100644 sysdeps/ia64/fpu/w_expl_compat.c delete mode 100644 sysdeps/ia64/fpu/w_fmod_compat.c delete mode 100644 sysdeps/ia64/fpu/w_fmodf_compat.c delete mode 100644 sysdeps/ia64/fpu/w_fmodl_compat.c delete mode 100644 sysdeps/ia64/fpu/w_hypot_compat.c delete mode 100644 sysdeps/ia64/fpu/w_hypotf_compat.c delete mode 100644 sysdeps/ia64/fpu/w_hypotl_compat.c delete mode 100644 sysdeps/ia64/fpu/w_lgamma_main.c delete mode 100644 sysdeps/ia64/fpu/w_lgamma_r_compat.c delete mode 100644 sysdeps/ia64/fpu/w_lgammaf_main.c delete mode 100644 sysdeps/ia64/fpu/w_lgammaf_r_compat.c delete mode 100644 sysdeps/ia64/fpu/w_lgammal_main.c delete mode 100644 sysdeps/ia64/fpu/w_lgammal_r_compat.c delete mode 100644 sysdeps/ia64/fpu/w_log10_compat.c delete mode 100644 sysdeps/ia64/fpu/w_log10f_compat.c delete mode 100644 sysdeps/ia64/fpu/w_log10l_compat.c delete mode 100644 sysdeps/ia64/fpu/w_log1p.c delete mode 100644 sysdeps/ia64/fpu/w_log1pf.c delete mode 100644 sysdeps/ia64/fpu/w_log1pl.c delete mode 100644 sysdeps/ia64/fpu/w_log2_compat.c delete mode 100644 sysdeps/ia64/fpu/w_log2f_compat.c delete mode 100644 sysdeps/ia64/fpu/w_log2l_compat.c delete mode 100644 sysdeps/ia64/fpu/w_log_compat.c delete mode 100644 sysdeps/ia64/fpu/w_logf_compat.c delete mode 100644 sysdeps/ia64/fpu/w_logl_compat.c delete mode 100644 sysdeps/ia64/fpu/w_pow_compat.c delete mode 100644 sysdeps/ia64/fpu/w_powf_compat.c delete mode 100644 sysdeps/ia64/fpu/w_powl_compat.c delete mode 100644 sysdeps/ia64/fpu/w_remainder_compat.c delete mode 100644 sysdeps/ia64/fpu/w_remainderf_compat.c delete mode 100644 sysdeps/ia64/fpu/w_remainderl_compat.c delete mode 100644 sysdeps/ia64/fpu/w_scalb_compat.c delete mode 100644 sysdeps/ia64/fpu/w_scalbf_compat.c delete mode 100644 sysdeps/ia64/fpu/w_scalbl_compat.c delete mode 100644 sysdeps/ia64/fpu/w_scalblnf.c delete mode 100644 sysdeps/ia64/fpu/w_sinh_compat.c delete mode 100644 sysdeps/ia64/fpu/w_sinhf_compat.c delete mode 100644 sysdeps/ia64/fpu/w_sinhl_compat.c delete mode 100644 sysdeps/ia64/fpu/w_sqrt_compat.c delete mode 100644 sysdeps/ia64/fpu/w_sqrtf_compat.c delete mode 100644 sysdeps/ia64/fpu/w_sqrtl_compat.c delete mode 100644 sysdeps/ia64/fpu/w_tgamma_compat.S delete mode 100644 sysdeps/ia64/fpu/w_tgammaf_compat.S delete mode 100644 sysdeps/ia64/fpu/w_tgammal_compat.S delete mode 100644 sysdeps/ia64/gccframe.h delete mode 100644 sysdeps/ia64/hp-timing.h delete mode 100644 sysdeps/ia64/htonl.S delete mode 100644 sysdeps/ia64/htons.S delete mode 100644 sysdeps/ia64/ia64libgcc.S delete mode 100644 sysdeps/ia64/ieee754.h delete mode 100644 sysdeps/ia64/jmpbuf-unwind.h delete mode 100644 sysdeps/ia64/ldbl2mpn.c delete mode 100644 sysdeps/ia64/ldsodefs.h delete mode 100644 sysdeps/ia64/libc-tls.c delete mode 100644 sysdeps/ia64/linkmap.h delete mode 100644 sysdeps/ia64/machine-gmon.h delete mode 100644 sysdeps/ia64/memccpy.S delete mode 100644 sysdeps/ia64/memchr.S delete mode 100644 sysdeps/ia64/memcmp.S delete mode 100644 sysdeps/ia64/memcpy.S delete mode 100644 sysdeps/ia64/memmove.S delete mode 100644 sysdeps/ia64/memset.S delete mode 100644 sysdeps/ia64/memusage.h delete mode 100644 sysdeps/ia64/nptl/Makefile delete mode 100644 sysdeps/ia64/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/ia64/nptl/bits/semaphore.h delete mode 100644 sysdeps/ia64/nptl/pthread_spin_lock.c delete mode 100644 sysdeps/ia64/nptl/pthread_spin_trylock.c delete mode 100644 sysdeps/ia64/nptl/pthread_spin_unlock.c delete mode 100644 sysdeps/ia64/nptl/pthreaddef.h delete mode 100644 sysdeps/ia64/nptl/tcb-offsets.sym delete mode 100644 sysdeps/ia64/nptl/tls.h delete mode 100644 sysdeps/ia64/sched_cpucount.c delete mode 100644 sysdeps/ia64/softpipe.h delete mode 100644 sysdeps/ia64/sotruss-lib.c delete mode 100644 sysdeps/ia64/stackguard-macros.h delete mode 100644 sysdeps/ia64/stackinfo.h delete mode 100644 sysdeps/ia64/start.S delete mode 100644 sysdeps/ia64/strchr.S delete mode 100644 sysdeps/ia64/strcmp.S delete mode 100644 sysdeps/ia64/strcpy.S delete mode 100644 sysdeps/ia64/strlen.S delete mode 100644 sysdeps/ia64/strncmp.S delete mode 100644 sysdeps/ia64/strncpy.S delete mode 100644 sysdeps/ia64/sysdep.h delete mode 100644 sysdeps/ia64/tininess.h delete mode 100644 sysdeps/ia64/tls-macros.h delete mode 100644 sysdeps/ia64/tst-audit.h delete mode 100644 sysdeps/ieee754/Makefile delete mode 100644 sysdeps/ieee754/bits/huge_val.h delete mode 100644 sysdeps/ieee754/bits/huge_valf.h delete mode 100644 sysdeps/ieee754/bits/inf.h delete mode 100644 sysdeps/ieee754/bits/nan.h delete mode 100644 sysdeps/ieee754/dbl-64/Makefile delete mode 100644 sysdeps/ieee754/dbl-64/MathLib.h delete mode 100644 sysdeps/ieee754/dbl-64/asincos.tbl delete mode 100644 sysdeps/ieee754/dbl-64/atnat.h delete mode 100644 sysdeps/ieee754/dbl-64/atnat2.h delete mode 100644 sysdeps/ieee754/dbl-64/branred.c delete mode 100644 sysdeps/ieee754/dbl-64/branred.h delete mode 100644 sysdeps/ieee754/dbl-64/dbl2mpn.c delete mode 100644 sysdeps/ieee754/dbl-64/dla.h delete mode 100644 sysdeps/ieee754/dbl-64/doasin.c delete mode 100644 sysdeps/ieee754/dbl-64/doasin.h delete mode 100644 sysdeps/ieee754/dbl-64/dosincos.c delete mode 100644 sysdeps/ieee754/dbl-64/dosincos.h delete mode 100644 sysdeps/ieee754/dbl-64/e_acos.c delete mode 100644 sysdeps/ieee754/dbl-64/e_acosh.c delete mode 100644 sysdeps/ieee754/dbl-64/e_asin.c delete mode 100644 sysdeps/ieee754/dbl-64/e_atan2.c delete mode 100644 sysdeps/ieee754/dbl-64/e_atanh.c delete mode 100644 sysdeps/ieee754/dbl-64/e_cosh.c delete mode 100644 sysdeps/ieee754/dbl-64/e_exp.c delete mode 100644 sysdeps/ieee754/dbl-64/e_exp10.c delete mode 100644 sysdeps/ieee754/dbl-64/e_exp2.c delete mode 100644 sysdeps/ieee754/dbl-64/e_fmod.c delete mode 100644 sysdeps/ieee754/dbl-64/e_gamma_r.c delete mode 100644 sysdeps/ieee754/dbl-64/e_hypot.c delete mode 100644 sysdeps/ieee754/dbl-64/e_ilogb.c delete mode 100644 sysdeps/ieee754/dbl-64/e_j0.c delete mode 100644 sysdeps/ieee754/dbl-64/e_j1.c delete mode 100644 sysdeps/ieee754/dbl-64/e_jn.c delete mode 100644 sysdeps/ieee754/dbl-64/e_lgamma_r.c delete mode 100644 sysdeps/ieee754/dbl-64/e_log.c delete mode 100644 sysdeps/ieee754/dbl-64/e_log10.c delete mode 100644 sysdeps/ieee754/dbl-64/e_log2.c delete mode 100644 sysdeps/ieee754/dbl-64/e_pow.c delete mode 100644 sysdeps/ieee754/dbl-64/e_rem_pio2.c delete mode 100644 sysdeps/ieee754/dbl-64/e_remainder.c delete mode 100644 sysdeps/ieee754/dbl-64/e_sinh.c delete mode 100644 sysdeps/ieee754/dbl-64/e_sqrt.c delete mode 100644 sysdeps/ieee754/dbl-64/gamma_product.c delete mode 100644 sysdeps/ieee754/dbl-64/gamma_productf.c delete mode 100644 sysdeps/ieee754/dbl-64/halfulp.c delete mode 100644 sysdeps/ieee754/dbl-64/k_cos.c delete mode 100644 sysdeps/ieee754/dbl-64/k_rem_pio2.c delete mode 100644 sysdeps/ieee754/dbl-64/k_sin.c delete mode 100644 sysdeps/ieee754/dbl-64/k_tan.c delete mode 100644 sysdeps/ieee754/dbl-64/lgamma_neg.c delete mode 100644 sysdeps/ieee754/dbl-64/lgamma_product.c delete mode 100644 sysdeps/ieee754/dbl-64/mpa-arch.h delete mode 100644 sysdeps/ieee754/dbl-64/mpa.c delete mode 100644 sysdeps/ieee754/dbl-64/mpa.h delete mode 100644 sysdeps/ieee754/dbl-64/mpatan.c delete mode 100644 sysdeps/ieee754/dbl-64/mpatan.h delete mode 100644 sysdeps/ieee754/dbl-64/mpatan2.c delete mode 100644 sysdeps/ieee754/dbl-64/mpexp.c delete mode 100644 sysdeps/ieee754/dbl-64/mplog.c delete mode 100644 sysdeps/ieee754/dbl-64/mpn2dbl.c delete mode 100644 sysdeps/ieee754/dbl-64/mpsqrt.c delete mode 100644 sysdeps/ieee754/dbl-64/mpsqrt.h delete mode 100644 sysdeps/ieee754/dbl-64/mptan.c delete mode 100644 sysdeps/ieee754/dbl-64/mydefs.h delete mode 100644 sysdeps/ieee754/dbl-64/powtwo.tbl delete mode 100644 sysdeps/ieee754/dbl-64/root.tbl delete mode 100644 sysdeps/ieee754/dbl-64/s_asinh.c delete mode 100644 sysdeps/ieee754/dbl-64/s_atan.c delete mode 100644 sysdeps/ieee754/dbl-64/s_cbrt.c delete mode 100644 sysdeps/ieee754/dbl-64/s_ceil.c delete mode 100644 sysdeps/ieee754/dbl-64/s_copysign.c delete mode 100644 sysdeps/ieee754/dbl-64/s_cos.c delete mode 100644 sysdeps/ieee754/dbl-64/s_erf.c delete mode 100644 sysdeps/ieee754/dbl-64/s_expm1.c delete mode 100644 sysdeps/ieee754/dbl-64/s_fabs.c delete mode 100644 sysdeps/ieee754/dbl-64/s_finite.c delete mode 100644 sysdeps/ieee754/dbl-64/s_floor.c delete mode 100644 sysdeps/ieee754/dbl-64/s_fma.c delete mode 100644 sysdeps/ieee754/dbl-64/s_fmaf.c delete mode 100644 sysdeps/ieee754/dbl-64/s_fpclassify.c delete mode 100644 sysdeps/ieee754/dbl-64/s_frexp.c delete mode 100644 sysdeps/ieee754/dbl-64/s_fromfp.c delete mode 100644 sysdeps/ieee754/dbl-64/s_fromfp_main.c delete mode 100644 sysdeps/ieee754/dbl-64/s_fromfpx.c delete mode 100644 sysdeps/ieee754/dbl-64/s_getpayload.c delete mode 100644 sysdeps/ieee754/dbl-64/s_isinf.c delete mode 100644 sysdeps/ieee754/dbl-64/s_isnan.c delete mode 100644 sysdeps/ieee754/dbl-64/s_issignaling.c delete mode 100644 sysdeps/ieee754/dbl-64/s_llrint.c delete mode 100644 sysdeps/ieee754/dbl-64/s_llround.c delete mode 100644 sysdeps/ieee754/dbl-64/s_log1p.c delete mode 100644 sysdeps/ieee754/dbl-64/s_logb.c delete mode 100644 sysdeps/ieee754/dbl-64/s_lrint.c delete mode 100644 sysdeps/ieee754/dbl-64/s_lround.c delete mode 100644 sysdeps/ieee754/dbl-64/s_modf.c delete mode 100644 sysdeps/ieee754/dbl-64/s_nearbyint.c delete mode 100644 sysdeps/ieee754/dbl-64/s_nexttoward.c delete mode 100644 sysdeps/ieee754/dbl-64/s_nextup.c delete mode 100644 sysdeps/ieee754/dbl-64/s_remquo.c delete mode 100644 sysdeps/ieee754/dbl-64/s_rint.c delete mode 100644 sysdeps/ieee754/dbl-64/s_round.c delete mode 100644 sysdeps/ieee754/dbl-64/s_roundeven.c delete mode 100644 sysdeps/ieee754/dbl-64/s_scalbln.c delete mode 100644 sysdeps/ieee754/dbl-64/s_scalbn.c delete mode 100644 sysdeps/ieee754/dbl-64/s_setpayload.c delete mode 100644 sysdeps/ieee754/dbl-64/s_setpayload_main.c delete mode 100644 sysdeps/ieee754/dbl-64/s_setpayloadsig.c delete mode 100644 sysdeps/ieee754/dbl-64/s_signbit.c delete mode 100644 sysdeps/ieee754/dbl-64/s_sin.c delete mode 100644 sysdeps/ieee754/dbl-64/s_sincos.c delete mode 100644 sysdeps/ieee754/dbl-64/s_tan.c delete mode 100644 sysdeps/ieee754/dbl-64/s_tanh.c delete mode 100644 sysdeps/ieee754/dbl-64/s_totalorder.c delete mode 100644 sysdeps/ieee754/dbl-64/s_totalordermag.c delete mode 100644 sysdeps/ieee754/dbl-64/s_trunc.c delete mode 100644 sysdeps/ieee754/dbl-64/s_ufromfp.c delete mode 100644 sysdeps/ieee754/dbl-64/s_ufromfpx.c delete mode 100644 sysdeps/ieee754/dbl-64/sincos32.c delete mode 100644 sysdeps/ieee754/dbl-64/sincos32.h delete mode 100644 sysdeps/ieee754/dbl-64/sincostab.c delete mode 100644 sysdeps/ieee754/dbl-64/slowexp.c delete mode 100644 sysdeps/ieee754/dbl-64/slowpow.c delete mode 100644 sysdeps/ieee754/dbl-64/t_exp.c delete mode 100644 sysdeps/ieee754/dbl-64/t_exp2.h delete mode 100644 sysdeps/ieee754/dbl-64/uasncs.h delete mode 100644 sysdeps/ieee754/dbl-64/uatan.tbl delete mode 100644 sysdeps/ieee754/dbl-64/uexp.h delete mode 100644 sysdeps/ieee754/dbl-64/uexp.tbl delete mode 100644 sysdeps/ieee754/dbl-64/ulog.h delete mode 100644 sysdeps/ieee754/dbl-64/ulog.tbl delete mode 100644 sysdeps/ieee754/dbl-64/upow.h delete mode 100644 sysdeps/ieee754/dbl-64/upow.tbl delete mode 100644 sysdeps/ieee754/dbl-64/urem.h delete mode 100644 sysdeps/ieee754/dbl-64/usncs.h delete mode 100644 sysdeps/ieee754/dbl-64/utan.h delete mode 100644 sysdeps/ieee754/dbl-64/utan.tbl delete mode 100644 sysdeps/ieee754/dbl-64/w_exp_compat.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/e_cosh.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/e_log10.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/e_log2.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_frexp.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_getpayload.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_issignaling.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_llround.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_lround.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_modf.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_round.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_roundeven.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_setpayload_main.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_totalorder.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_totalordermag.c delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_trunc.c delete mode 100644 sysdeps/ieee754/dbl-64/x2y2m1.c delete mode 100644 sysdeps/ieee754/dbl-64/x2y2m1f.c delete mode 100644 sysdeps/ieee754/float128/Makeconfig delete mode 100644 sysdeps/ieee754/float128/Makefile delete mode 100644 sysdeps/ieee754/float128/Versions delete mode 100644 sysdeps/ieee754/float128/e_acosf128.c delete mode 100644 sysdeps/ieee754/float128/e_acoshf128.c delete mode 100644 sysdeps/ieee754/float128/e_asinf128.c delete mode 100644 sysdeps/ieee754/float128/e_atan2f128.c delete mode 100644 sysdeps/ieee754/float128/e_atanhf128.c delete mode 100644 sysdeps/ieee754/float128/e_coshf128.c delete mode 100644 sysdeps/ieee754/float128/e_exp10f128.c delete mode 100644 sysdeps/ieee754/float128/e_expf128.c delete mode 100644 sysdeps/ieee754/float128/e_fmodf128.c delete mode 100644 sysdeps/ieee754/float128/e_gammaf128_r.c delete mode 100644 sysdeps/ieee754/float128/e_hypotf128.c delete mode 100644 sysdeps/ieee754/float128/e_ilogbf128.c delete mode 100644 sysdeps/ieee754/float128/e_j0f128.c delete mode 100644 sysdeps/ieee754/float128/e_j1f128.c delete mode 100644 sysdeps/ieee754/float128/e_jnf128.c delete mode 100644 sysdeps/ieee754/float128/e_lgammaf128_r.c delete mode 100644 sysdeps/ieee754/float128/e_log10f128.c delete mode 100644 sysdeps/ieee754/float128/e_log2f128.c delete mode 100644 sysdeps/ieee754/float128/e_logf128.c delete mode 100644 sysdeps/ieee754/float128/e_powf128.c delete mode 100644 sysdeps/ieee754/float128/e_rem_pio2f128.c delete mode 100644 sysdeps/ieee754/float128/e_remainderf128.c delete mode 100644 sysdeps/ieee754/float128/e_scalbf128.c delete mode 100644 sysdeps/ieee754/float128/e_sinhf128.c delete mode 100644 sysdeps/ieee754/float128/float1282mpn.c delete mode 100644 sysdeps/ieee754/float128/float128_private.h delete mode 100644 sysdeps/ieee754/float128/gamma_productf128.c delete mode 100644 sysdeps/ieee754/float128/ieee754_float128.h delete mode 100644 sysdeps/ieee754/float128/k_cosf128.c delete mode 100644 sysdeps/ieee754/float128/k_sincosf128.c delete mode 100644 sysdeps/ieee754/float128/k_sinf128.c delete mode 100644 sysdeps/ieee754/float128/k_tanf128.c delete mode 100644 sysdeps/ieee754/float128/lgamma_negf128.c delete mode 100644 sysdeps/ieee754/float128/lgamma_productf128.c delete mode 100644 sysdeps/ieee754/float128/s_asinhf128.c delete mode 100644 sysdeps/ieee754/float128/s_atanf128.c delete mode 100644 sysdeps/ieee754/float128/s_cbrtf128.c delete mode 100644 sysdeps/ieee754/float128/s_ceilf128.c delete mode 100644 sysdeps/ieee754/float128/s_copysignf128.c delete mode 100644 sysdeps/ieee754/float128/s_cosf128.c delete mode 100644 sysdeps/ieee754/float128/s_erff128.c delete mode 100644 sysdeps/ieee754/float128/s_expm1f128.c delete mode 100644 sysdeps/ieee754/float128/s_fabsf128.c delete mode 100644 sysdeps/ieee754/float128/s_finitef128.c delete mode 100644 sysdeps/ieee754/float128/s_floorf128.c delete mode 100644 sysdeps/ieee754/float128/s_fmaf128.c delete mode 100644 sysdeps/ieee754/float128/s_fpclassifyf128.c delete mode 100644 sysdeps/ieee754/float128/s_frexpf128.c delete mode 100644 sysdeps/ieee754/float128/s_fromfpf128.c delete mode 100644 sysdeps/ieee754/float128/s_fromfpxf128.c delete mode 100644 sysdeps/ieee754/float128/s_getpayloadf128.c delete mode 100644 sysdeps/ieee754/float128/s_isinff128.c delete mode 100644 sysdeps/ieee754/float128/s_isnanf128.c delete mode 100644 sysdeps/ieee754/float128/s_issignalingf128.c delete mode 100644 sysdeps/ieee754/float128/s_llrintf128.c delete mode 100644 sysdeps/ieee754/float128/s_llroundf128.c delete mode 100644 sysdeps/ieee754/float128/s_log1pf128.c delete mode 100644 sysdeps/ieee754/float128/s_logbf128.c delete mode 100644 sysdeps/ieee754/float128/s_lrintf128.c delete mode 100644 sysdeps/ieee754/float128/s_lroundf128.c delete mode 100644 sysdeps/ieee754/float128/s_modff128.c delete mode 100644 sysdeps/ieee754/float128/s_nearbyintf128.c delete mode 100644 sysdeps/ieee754/float128/s_nextafterf128.c delete mode 100644 sysdeps/ieee754/float128/s_nexttowardf128.c delete mode 100644 sysdeps/ieee754/float128/s_nextupf128.c delete mode 100644 sysdeps/ieee754/float128/s_remquof128.c delete mode 100644 sysdeps/ieee754/float128/s_rintf128.c delete mode 100644 sysdeps/ieee754/float128/s_roundevenf128.c delete mode 100644 sysdeps/ieee754/float128/s_roundf128.c delete mode 100644 sysdeps/ieee754/float128/s_scalblnf128.c delete mode 100644 sysdeps/ieee754/float128/s_scalbnf128.c delete mode 100644 sysdeps/ieee754/float128/s_setpayloadf128.c delete mode 100644 sysdeps/ieee754/float128/s_setpayloadsigf128.c delete mode 100644 sysdeps/ieee754/float128/s_signbitf128.c delete mode 100644 sysdeps/ieee754/float128/s_significandf128.c delete mode 100644 sysdeps/ieee754/float128/s_sincosf128.c delete mode 100644 sysdeps/ieee754/float128/s_sinf128.c delete mode 100644 sysdeps/ieee754/float128/s_tanf128.c delete mode 100644 sysdeps/ieee754/float128/s_tanhf128.c delete mode 100644 sysdeps/ieee754/float128/s_totalorderf128.c delete mode 100644 sysdeps/ieee754/float128/s_totalordermagf128.c delete mode 100644 sysdeps/ieee754/float128/s_truncf128.c delete mode 100644 sysdeps/ieee754/float128/s_ufromfpf128.c delete mode 100644 sysdeps/ieee754/float128/s_ufromfpxf128.c delete mode 100644 sysdeps/ieee754/float128/strfromf128.c delete mode 100644 sysdeps/ieee754/float128/t_sincosf128.c delete mode 100644 sysdeps/ieee754/float128/x2y2m1f128.c delete mode 100644 sysdeps/ieee754/flt-32/e_acosf.c delete mode 100644 sysdeps/ieee754/flt-32/e_acoshf.c delete mode 100644 sysdeps/ieee754/flt-32/e_asinf.c delete mode 100644 sysdeps/ieee754/flt-32/e_atan2f.c delete mode 100644 sysdeps/ieee754/flt-32/e_atanhf.c delete mode 100644 sysdeps/ieee754/flt-32/e_coshf.c delete mode 100644 sysdeps/ieee754/flt-32/e_exp2f.c delete mode 100644 sysdeps/ieee754/flt-32/e_expf.c delete mode 100644 sysdeps/ieee754/flt-32/e_fmodf.c delete mode 100644 sysdeps/ieee754/flt-32/e_gammaf_r.c delete mode 100644 sysdeps/ieee754/flt-32/e_hypotf.c delete mode 100644 sysdeps/ieee754/flt-32/e_ilogbf.c delete mode 100644 sysdeps/ieee754/flt-32/e_j0f.c delete mode 100644 sysdeps/ieee754/flt-32/e_j1f.c delete mode 100644 sysdeps/ieee754/flt-32/e_jnf.c delete mode 100644 sysdeps/ieee754/flt-32/e_lgammaf_r.c delete mode 100644 sysdeps/ieee754/flt-32/e_log10f.c delete mode 100644 sysdeps/ieee754/flt-32/e_log2f.c delete mode 100644 sysdeps/ieee754/flt-32/e_logf.c delete mode 100644 sysdeps/ieee754/flt-32/e_powf.c delete mode 100644 sysdeps/ieee754/flt-32/e_rem_pio2f.c delete mode 100644 sysdeps/ieee754/flt-32/e_remainderf.c delete mode 100644 sysdeps/ieee754/flt-32/e_sinhf.c delete mode 100644 sysdeps/ieee754/flt-32/e_sqrtf.c delete mode 100644 sysdeps/ieee754/flt-32/k_cosf.c delete mode 100644 sysdeps/ieee754/flt-32/k_rem_pio2f.c delete mode 100644 sysdeps/ieee754/flt-32/k_sinf.c delete mode 100644 sysdeps/ieee754/flt-32/k_tanf.c delete mode 100644 sysdeps/ieee754/flt-32/lgamma_negf.c delete mode 100644 sysdeps/ieee754/flt-32/lgamma_productf.c delete mode 100644 sysdeps/ieee754/flt-32/mpn2flt.c delete mode 100644 sysdeps/ieee754/flt-32/s_asinhf.c delete mode 100644 sysdeps/ieee754/flt-32/s_atanf.c delete mode 100644 sysdeps/ieee754/flt-32/s_cbrtf.c delete mode 100644 sysdeps/ieee754/flt-32/s_ceilf.c delete mode 100644 sysdeps/ieee754/flt-32/s_copysignf.c delete mode 100644 sysdeps/ieee754/flt-32/s_cosf.c delete mode 100644 sysdeps/ieee754/flt-32/s_erff.c delete mode 100644 sysdeps/ieee754/flt-32/s_expm1f.c delete mode 100644 sysdeps/ieee754/flt-32/s_fabsf.c delete mode 100644 sysdeps/ieee754/flt-32/s_finitef.c delete mode 100644 sysdeps/ieee754/flt-32/s_floorf.c delete mode 100644 sysdeps/ieee754/flt-32/s_fpclassifyf.c delete mode 100644 sysdeps/ieee754/flt-32/s_frexpf.c delete mode 100644 sysdeps/ieee754/flt-32/s_fromfpf.c delete mode 100644 sysdeps/ieee754/flt-32/s_fromfpf_main.c delete mode 100644 sysdeps/ieee754/flt-32/s_fromfpxf.c delete mode 100644 sysdeps/ieee754/flt-32/s_getpayloadf.c delete mode 100644 sysdeps/ieee754/flt-32/s_isinff.c delete mode 100644 sysdeps/ieee754/flt-32/s_isnanf.c delete mode 100644 sysdeps/ieee754/flt-32/s_issignalingf.c delete mode 100644 sysdeps/ieee754/flt-32/s_llrintf.c delete mode 100644 sysdeps/ieee754/flt-32/s_llroundf.c delete mode 100644 sysdeps/ieee754/flt-32/s_log1pf.c delete mode 100644 sysdeps/ieee754/flt-32/s_logbf.c delete mode 100644 sysdeps/ieee754/flt-32/s_lrintf.c delete mode 100644 sysdeps/ieee754/flt-32/s_lroundf.c delete mode 100644 sysdeps/ieee754/flt-32/s_modff.c delete mode 100644 sysdeps/ieee754/flt-32/s_nearbyintf.c delete mode 100644 sysdeps/ieee754/flt-32/s_nextafterf.c delete mode 100644 sysdeps/ieee754/flt-32/s_nextupf.c delete mode 100644 sysdeps/ieee754/flt-32/s_remquof.c delete mode 100644 sysdeps/ieee754/flt-32/s_rintf.c delete mode 100644 sysdeps/ieee754/flt-32/s_roundevenf.c delete mode 100644 sysdeps/ieee754/flt-32/s_roundf.c delete mode 100644 sysdeps/ieee754/flt-32/s_scalblnf.c delete mode 100644 sysdeps/ieee754/flt-32/s_scalbnf.c delete mode 100644 sysdeps/ieee754/flt-32/s_setpayloadf.c delete mode 100644 sysdeps/ieee754/flt-32/s_setpayloadf_main.c delete mode 100644 sysdeps/ieee754/flt-32/s_setpayloadsigf.c delete mode 100644 sysdeps/ieee754/flt-32/s_signbitf.c delete mode 100644 sysdeps/ieee754/flt-32/s_sincosf.c delete mode 100644 sysdeps/ieee754/flt-32/s_sinf.c delete mode 100644 sysdeps/ieee754/flt-32/s_tanf.c delete mode 100644 sysdeps/ieee754/flt-32/s_tanhf.c delete mode 100644 sysdeps/ieee754/flt-32/s_totalorderf.c delete mode 100644 sysdeps/ieee754/flt-32/s_totalordermagf.c delete mode 100644 sysdeps/ieee754/flt-32/s_truncf.c delete mode 100644 sysdeps/ieee754/flt-32/s_ufromfpf.c delete mode 100644 sysdeps/ieee754/flt-32/s_ufromfpxf.c delete mode 100644 sysdeps/ieee754/flt-32/t_exp2f.h delete mode 100644 sysdeps/ieee754/flt-32/w_expf_compat.c delete mode 100644 sysdeps/ieee754/ieee754.h delete mode 100644 sysdeps/ieee754/k_standard.c delete mode 100644 sysdeps/ieee754/k_standardf.c delete mode 100644 sysdeps/ieee754/k_standardl.c delete mode 100644 sysdeps/ieee754/ldbl-128/Makefile delete mode 100644 sysdeps/ieee754/ldbl-128/bits/long-double.h delete mode 100644 sysdeps/ieee754/ldbl-128/e_acoshl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_acosl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_asinl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_atan2l.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_atanhl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_coshl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_exp10l.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_expl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_fmodl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_gammal_r.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_hypotl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_ilogbl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_j0l.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_j1l.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_jnl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_lgammal_r.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_log10l.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_log2l.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_logl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_powl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_rem_pio2l.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_remainderl.c delete mode 100644 sysdeps/ieee754/ldbl-128/e_sinhl.c delete mode 100644 sysdeps/ieee754/ldbl-128/gamma_productl.c delete mode 100644 sysdeps/ieee754/ldbl-128/ieee754.h delete mode 100644 sysdeps/ieee754/ldbl-128/k_cosl.c delete mode 100644 sysdeps/ieee754/ldbl-128/k_sincosl.c delete mode 100644 sysdeps/ieee754/ldbl-128/k_sinl.c delete mode 100644 sysdeps/ieee754/ldbl-128/k_tanl.c delete mode 100644 sysdeps/ieee754/ldbl-128/ldbl2mpn.c delete mode 100644 sysdeps/ieee754/ldbl-128/lgamma_negl.c delete mode 100644 sysdeps/ieee754/ldbl-128/lgamma_productl.c delete mode 100644 sysdeps/ieee754/ldbl-128/math_ldbl.h delete mode 100644 sysdeps/ieee754/ldbl-128/mpn2ldbl.c delete mode 100644 sysdeps/ieee754/ldbl-128/printf_fphex.c delete mode 100644 sysdeps/ieee754/ldbl-128/printf_fphex_macros.h delete mode 100644 sysdeps/ieee754/ldbl-128/s_asinhl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_atanl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_cbrtl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_ceill.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_copysignl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_cosl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_erfl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_expm1l.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_fabsl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_finitel.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_floorl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_fma.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_fmal.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_fpclassifyl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_frexpl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_fromfpl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_fromfpl_main.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_fromfpxl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_getpayloadl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_isinfl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_isnanl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_issignalingl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_llrintl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_llroundl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_log1pl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_logbl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_lrintl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_lroundl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_modfl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_nearbyintl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_nextafterl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_nexttoward.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_nexttowardf.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_nextupl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_remquol.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_rintl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_roundevenl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_roundl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_scalblnl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_scalbnl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_setpayloadl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_setpayloadl_main.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_setpayloadsigl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_signbitl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_sincosl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_sinl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_tanhl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_tanl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_totalorderl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_totalordermagl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_truncl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_ufromfpl.c delete mode 100644 sysdeps/ieee754/ldbl-128/s_ufromfpxl.c delete mode 100644 sysdeps/ieee754/ldbl-128/strtod_nan_ldouble.h delete mode 100644 sysdeps/ieee754/ldbl-128/strtold_l.c delete mode 100644 sysdeps/ieee754/ldbl-128/t_expl.h delete mode 100644 sysdeps/ieee754/ldbl-128/t_sincosl.c delete mode 100644 sysdeps/ieee754/ldbl-128/w_expl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-128/x2y2m1l.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/Makefile delete mode 100644 sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_acoshl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_acosl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_asinl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_atan2l.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_atanhl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_coshl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_exp10l.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_expl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_fmodl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_hypotl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_ilogbl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_j0l.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_j1l.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_jnl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_log10l.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_log2l.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_logl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_powl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_remainderl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_sinhl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/gamma_productl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/ieee754.h delete mode 100644 sysdeps/ieee754/ldbl-128ibm/include/bits/iscanonical.h delete mode 100644 sysdeps/ieee754/ldbl-128ibm/k_cosl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/k_sincosl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/k_sinl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/k_tanl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/lgamma_negl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/lgamma_productl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/math_ldbl.h delete mode 100644 sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/printf_fphex.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_asinhl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_atanl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_ceill.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_copysignl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_cosl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_erfl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_expm1l.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_fabsl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_finitel.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_floorl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_fmal.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_frexpl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_fromfpl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_fromfpl_main.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_fromfpxl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_getpayloadl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_iscanonicall.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_isinfl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_isnanl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_issignalingl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_llrintl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_llroundl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_log1pl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_logbl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_lrintl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_lroundl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_modfl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_nextupl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_remquol.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_rintl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_roundevenl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_roundl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_setpayloadl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_setpayloadl_main.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_setpayloadsigl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_signbitl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_sincosl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_sinl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_tanhl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_tanl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_totalorderl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_totalordermagl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_truncl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_ufromfpl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/s_ufromfpxl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/strtod_nan_ldouble.h delete mode 100644 sysdeps/ieee754/ldbl-128ibm/strtold_l.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/t_sincosl.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/test-canonical-ldbl-128ibm.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/test-fmodl-ldbl-128ibm.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/test-fmodrem-ldbl-128ibm.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/test-remainderl-ldbl-128ibm.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/test-remquol-ldbl-128ibm.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/test-totalorderl-ldbl-128ibm.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/tst-strtold-ldbl-128ibm.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/w_expl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-128ibm/x2y2m1l.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/e_ilogbl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_asinhl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_atanl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_cbrtl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_ceill.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_copysignl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_cosl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_erfl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_expm1l.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_fabsl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_finitel.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_floorl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_fmal.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_fpclassifyl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_frexpl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_isinfl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_isnanl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_llrintl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_llroundl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_log1pl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_logbl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_lrintl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_lroundl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_modfl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_nearbyintl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_nextafterl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_nexttoward.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_nexttowardf.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_remquol.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_rintl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_roundl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_scalblnl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_scalbnl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_signbitl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_sincosl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_sinl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_tanhl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_tanl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/s_truncl.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/strtold_l.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/w_expl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-64-128/w_scalblnl.c delete mode 100644 sysdeps/ieee754/ldbl-96/Makefile delete mode 100644 sysdeps/ieee754/ldbl-96/bits/iscanonical.h delete mode 100644 sysdeps/ieee754/ldbl-96/bits/long-double.h delete mode 100644 sysdeps/ieee754/ldbl-96/e_acoshl.c delete mode 100644 sysdeps/ieee754/ldbl-96/e_asinl.c delete mode 100644 sysdeps/ieee754/ldbl-96/e_atanhl.c delete mode 100644 sysdeps/ieee754/ldbl-96/e_coshl.c delete mode 100644 sysdeps/ieee754/ldbl-96/e_gammal_r.c delete mode 100644 sysdeps/ieee754/ldbl-96/e_hypotl.c delete mode 100644 sysdeps/ieee754/ldbl-96/e_j0l.c delete mode 100644 sysdeps/ieee754/ldbl-96/e_j1l.c delete mode 100644 sysdeps/ieee754/ldbl-96/e_jnl.c delete mode 100644 sysdeps/ieee754/ldbl-96/e_lgammal_r.c delete mode 100644 sysdeps/ieee754/ldbl-96/e_rem_pio2l.c delete mode 100644 sysdeps/ieee754/ldbl-96/e_sinhl.c delete mode 100644 sysdeps/ieee754/ldbl-96/gamma_product.c delete mode 100644 sysdeps/ieee754/ldbl-96/gamma_productl.c delete mode 100644 sysdeps/ieee754/ldbl-96/include/bits/iscanonical.h delete mode 100644 sysdeps/ieee754/ldbl-96/k_cosl.c delete mode 100644 sysdeps/ieee754/ldbl-96/k_sinl.c delete mode 100644 sysdeps/ieee754/ldbl-96/k_tanl.c delete mode 100644 sysdeps/ieee754/ldbl-96/ldbl2mpn.c delete mode 100644 sysdeps/ieee754/ldbl-96/lgamma_negl.c delete mode 100644 sysdeps/ieee754/ldbl-96/lgamma_product.c delete mode 100644 sysdeps/ieee754/ldbl-96/lgamma_productl.c delete mode 100644 sysdeps/ieee754/ldbl-96/math_ldbl.h delete mode 100644 sysdeps/ieee754/ldbl-96/mpn2ldbl.c delete mode 100644 sysdeps/ieee754/ldbl-96/printf_fphex.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_asinhl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_cbrtl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_copysignl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_cosl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_erfl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_fma.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_fmal.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_frexpl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_fromfpl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_fromfpl_main.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_fromfpxl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_getpayloadl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_iscanonicall.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_issignalingl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_llrintl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_llroundl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_lrintl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_lroundl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_modfl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_nexttoward.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_nexttowardf.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_nextupl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_remquol.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_roundevenl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_roundl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_scalblnl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_setpayloadl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_setpayloadl_main.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_setpayloadsigl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_signbitl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_sincosl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_sinl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_tanhl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_tanl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_totalorderl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_totalordermagl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_ufromfpl.c delete mode 100644 sysdeps/ieee754/ldbl-96/s_ufromfpxl.c delete mode 100644 sysdeps/ieee754/ldbl-96/strtod_nan_ldouble.h delete mode 100644 sysdeps/ieee754/ldbl-96/strtold_l.c delete mode 100644 sysdeps/ieee754/ldbl-96/t_sincosl.c delete mode 100644 sysdeps/ieee754/ldbl-96/test-canonical-ldbl-96.c delete mode 100644 sysdeps/ieee754/ldbl-96/test-totalorderl-ldbl-96.c delete mode 100644 sysdeps/ieee754/ldbl-96/w_expl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-96/x2y2m1.c delete mode 100644 sysdeps/ieee754/ldbl-96/x2y2m1l.c delete mode 100644 sysdeps/ieee754/ldbl-opt/Makefile delete mode 100644 sysdeps/ieee754/ldbl-opt/Versions delete mode 100644 sysdeps/ieee754/ldbl-opt/bits/long-double.h delete mode 100644 sysdeps/ieee754/ldbl-opt/configure delete mode 100644 sysdeps/ieee754/ldbl-opt/configure.ac delete mode 100644 sysdeps/ieee754/ldbl-opt/math-type-macros-double.h delete mode 100644 sysdeps/ieee754/ldbl-opt/math-type-macros-ldouble.h delete mode 100644 sysdeps/ieee754/ldbl-opt/math_ldbl_opt.c delete mode 100644 sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-acos.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-acosh.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-asin.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-asinh.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-asprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-asprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-atan.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-atan2.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-atanh.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-cabs.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-cacos.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-cacosh.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-canonicalize.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-carg.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-casin.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-casinh.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-catan.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-catanh.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-cbrt.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-ccos.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-ccosh.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-ceil.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-cexp.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-cimag.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-clog.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-clog10.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-compat.h delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-conj.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-copysign.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-cos.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-cosh.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-cpow.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-cproj.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-creal.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-csin.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-csinh.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-csqrt.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-ctan.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-ctanh.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-dprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-dprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-erf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-erfc.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-exp.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-exp10.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-exp2.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-expm1.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fabs.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fdim.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-finite.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-floor.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fma.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fmax.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fmaxmag.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fmin.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fminmag.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fmod.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-frexp.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fromfp.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fromfpx.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fwprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fwprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-fwscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-gamma.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-getpayload.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-hypot.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-ilogb.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-isinf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-isnan.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-isoc99_fscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-isoc99_fwscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-isoc99_scanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-isoc99_sscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-isoc99_swscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vfscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vfwscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vsscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vswscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vwscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-isoc99_wscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-j0.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-j1.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-jn.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-ldexp.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-lgamma.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-lgamma_r.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-llogb.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-llrint.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-llround.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-log.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-log10.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-log1p.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-log2.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-logb.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-lrint.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-lround.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-modf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-nan.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-nearbyint.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-nextafter.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-nextdown.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-nexttoward.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-nexttowardf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-nextup.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-pow.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-pow10.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-printf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-printf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-printf_fp.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-printf_size.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-qecvt.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-qecvt_r.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-qfcvt.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-qfcvt_r.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-qgcvt.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-remainder.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-remquo.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-rint.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-round.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-roundeven.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-scalb.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-scalbln.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-scalbn.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-scanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-setpayload.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-setpayloadsig.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-signbit.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-significand.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-sin.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-sincos.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-sinh.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-snprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-snprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-sprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-sprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-sqrt.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-sscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-strfmon.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-strfmon_l.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-strfroml.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-strtold.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-strtoldint.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-swprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-swprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-swscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-syslog.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-syslog_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-tan.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-tanh.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-tgamma.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-totalorder.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-totalordermag.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-trunc.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-ufromfp.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-ufromfpx.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vasprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vasprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vdprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vdprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vfprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vfprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vfwscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vsprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vsprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vsscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vswprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vswprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vswscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vsyslog.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vsyslog_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vwprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vwprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vwscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-wcstold.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-wcstoldint.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-wprintf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-wprintf_chk.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-wscanf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-y0.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-y1.c delete mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-yn.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_asinh.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_atan.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_cbrt.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_ceil.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_clog10l.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_copysign.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_erf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_expm1.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_fabs.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_finite.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_floor.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_fma.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_fmal.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_frexp.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_isinf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_isnan.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_ldexp.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_ldexpl.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_llrint.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_llround.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_log1p.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_logb.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_lrint.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_lround.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_modf.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_nearbyint.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_nextafter.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_remquo.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_rint.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_round.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_scalbln.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_scalbn.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_significand.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_significandl.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_sin.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_sincos.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_tan.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_tanh.c delete mode 100644 sysdeps/ieee754/ldbl-opt/s_trunc.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_acos_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_acosh_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_acoshl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_acosl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_asin_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_asinl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_atan2_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_atan2l_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_atanh_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_atanhl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_cosh_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_coshl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_exp10_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_exp_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_fmod_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_fmodl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_hypot_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_hypotl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_j0_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_j0l_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_j1_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_j1l_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_jn_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_jnl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_lgamma_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_lgamma_compatl.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_lgamma_r_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_lgammal_r_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_log10_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_log10l_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_log2_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_log2l_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_log_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_logl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_pow_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_powl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_remainder_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_scalb_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_scalbl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_sinh_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_sinhl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_sqrt_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_sqrtl_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_tgamma_compat.c delete mode 100644 sysdeps/ieee754/ldbl-opt/w_tgammal_compat.c delete mode 100644 sysdeps/ieee754/s_lib_version.c delete mode 100644 sysdeps/ieee754/s_matherr.c delete mode 100644 sysdeps/ieee754/s_signgam.c delete mode 100644 sysdeps/init_array/crti.S delete mode 100644 sysdeps/init_array/crtn.S delete mode 100644 sysdeps/init_array/elf-init.c delete mode 100644 sysdeps/init_array/gmon-start.c delete mode 100644 sysdeps/init_array/pt-crti.S delete mode 100644 sysdeps/m68k/Implies delete mode 100644 sysdeps/m68k/Makefile delete mode 100644 sysdeps/m68k/Versions delete mode 100644 sysdeps/m68k/__longjmp.c delete mode 100644 sysdeps/m68k/abort-instr.h delete mode 100644 sysdeps/m68k/asm-syntax.h delete mode 100644 sysdeps/m68k/backtrace.c delete mode 100644 sysdeps/m68k/bits/byteswap.h delete mode 100644 sysdeps/m68k/bits/endian.h delete mode 100644 sysdeps/m68k/bits/link.h delete mode 100644 sysdeps/m68k/bits/setjmp.h delete mode 100644 sysdeps/m68k/bsd-_setjmp.c delete mode 100644 sysdeps/m68k/bsd-setjmp.c delete mode 100644 sysdeps/m68k/coldfire/atomic-machine.h delete mode 100644 sysdeps/m68k/coldfire/fpu/bits/mathinline.h delete mode 100644 sysdeps/m68k/coldfire/fpu/e_sqrt.c delete mode 100644 sysdeps/m68k/coldfire/fpu/e_sqrtf.c delete mode 100644 sysdeps/m68k/coldfire/fpu/fraiseexcpt.c delete mode 100644 sysdeps/m68k/coldfire/fpu/libm-test-ulps delete mode 100644 sysdeps/m68k/coldfire/fpu/libm-test-ulps-name delete mode 100644 sysdeps/m68k/coldfire/fpu/math_private.h delete mode 100644 sysdeps/m68k/coldfire/fpu/s_fabs.c delete mode 100644 sysdeps/m68k/coldfire/fpu/s_fabsf.c delete mode 100644 sysdeps/m68k/coldfire/fpu/s_lrint.c delete mode 100644 sysdeps/m68k/coldfire/fpu/s_lrintf.c delete mode 100644 sysdeps/m68k/coldfire/fpu/s_rint.c delete mode 100644 sysdeps/m68k/coldfire/fpu/s_rintf.c delete mode 100644 sysdeps/m68k/coldfire/nofpu/s_fma.c delete mode 100644 sysdeps/m68k/coldfire/nofpu/s_fmaf.c delete mode 100644 sysdeps/m68k/coldfire/nofpu/sfp-machine.h delete mode 100644 sysdeps/m68k/coldfire/sysdep.h delete mode 100644 sysdeps/m68k/crti.S delete mode 100644 sysdeps/m68k/crtn.S delete mode 100644 sysdeps/m68k/dl-machine.h delete mode 100644 sysdeps/m68k/dl-tls.h delete mode 100644 sysdeps/m68k/dl-trampoline.S delete mode 100644 sysdeps/m68k/ffs.c delete mode 100644 sysdeps/m68k/fpu/bits/fenv.h delete mode 100644 sysdeps/m68k/fpu/fclrexcpt.c delete mode 100644 sysdeps/m68k/fpu/fedisblxcpt.c delete mode 100644 sysdeps/m68k/fpu/feenablxcpt.c delete mode 100644 sysdeps/m68k/fpu/fegetenv.c delete mode 100644 sysdeps/m68k/fpu/fegetexcept.c delete mode 100644 sysdeps/m68k/fpu/fegetmode.c delete mode 100644 sysdeps/m68k/fpu/fegetround.c delete mode 100644 sysdeps/m68k/fpu/feholdexcpt.c delete mode 100644 sysdeps/m68k/fpu/fesetenv.c delete mode 100644 sysdeps/m68k/fpu/fesetexcept.c delete mode 100644 sysdeps/m68k/fpu/fesetmode.c delete mode 100644 sysdeps/m68k/fpu/fesetround.c delete mode 100644 sysdeps/m68k/fpu/feupdateenv.c delete mode 100644 sysdeps/m68k/fpu/fgetexcptflg.c delete mode 100644 sysdeps/m68k/fpu/fsetexcptflg.c delete mode 100644 sysdeps/m68k/fpu/ftestexcept.c delete mode 100644 sysdeps/m68k/fpu_control.h delete mode 100644 sysdeps/m68k/gccframe.h delete mode 100644 sysdeps/m68k/jmpbuf-unwind.h delete mode 100644 sysdeps/m68k/ldsodefs.h delete mode 100644 sysdeps/m68k/libc-tls.c delete mode 100644 sysdeps/m68k/m680x0/Implies delete mode 100644 sysdeps/m68k/m680x0/Makefile delete mode 100644 sysdeps/m68k/m680x0/add_n.S delete mode 100644 sysdeps/m68k/m680x0/bits/flt-eval-method.h delete mode 100644 sysdeps/m68k/m680x0/bits/fp-logb.h delete mode 100644 sysdeps/m68k/m680x0/bits/huge_vall.h delete mode 100644 sysdeps/m68k/m680x0/fpu/bits/mathinline.h delete mode 100644 sysdeps/m68k/m680x0/fpu/branred.c delete mode 100644 sysdeps/m68k/m680x0/fpu/doasin.c delete mode 100644 sysdeps/m68k/m680x0/fpu/dosincos.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_acos.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_acosf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_acosl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_asin.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_asinf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_asinl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_atan2.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_atan2f.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_atan2l.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_atanh.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_atanhf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_atanhl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_cosh.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_coshf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_coshl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_exp.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_exp10.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_exp10f.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_exp10l.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_exp2.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_exp2f.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_exp2l.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_expf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_expl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_fmod.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_fmodf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_fmodl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_ilogb.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_ilogbf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_ilogbl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_log.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_log10.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_log10f.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_log10l.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_log2.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_log2f.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_log2l.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_logf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_logl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_pow.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_powf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_powl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_rem_pio2.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_rem_pio2f.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_rem_pio2l.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_remainder.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_remainderf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_remainderl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_scalb.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_scalbf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_scalbl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_sinh.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_sinhf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_sinhl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_sqrt.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_sqrtf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/e_sqrtl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/fraiseexcpt.c delete mode 100644 sysdeps/m68k/m680x0/fpu/halfulp.c delete mode 100644 sysdeps/m68k/m680x0/fpu/k_cosl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/k_rem_pio2.c delete mode 100644 sysdeps/m68k/m680x0/fpu/k_rem_pio2f.c delete mode 100644 sysdeps/m68k/m680x0/fpu/k_sinl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/k_tanf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/k_tanl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/libm-test-ulps delete mode 100644 sysdeps/m68k/m680x0/fpu/libm-test-ulps-name delete mode 100644 sysdeps/m68k/m680x0/fpu/math_private.h delete mode 100644 sysdeps/m68k/m680x0/fpu/mathimpl.h delete mode 100644 sysdeps/m68k/m680x0/fpu/mpa.c delete mode 100644 sysdeps/m68k/m680x0/fpu/mpatan.c delete mode 100644 sysdeps/m68k/m680x0/fpu/mpatan2.c delete mode 100644 sysdeps/m68k/m680x0/fpu/mpexp.c delete mode 100644 sysdeps/m68k/m680x0/fpu/mplog.c delete mode 100644 sysdeps/m68k/m680x0/fpu/mpsqrt.c delete mode 100644 sysdeps/m68k/m680x0/fpu/mptan.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_atan.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_atanf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_atanl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_ccosh_template.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_ceil.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_ceilf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_ceill.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_cexp_template.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_cos.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_cosf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_cosl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_csin_template.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_csinh_template.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_expm1.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_expm1f.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_expm1l.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_fabs.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_fabsf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_fabsl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_finite.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_finitef.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_finitel.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_floor.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_floorf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_floorl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_fpclassifyl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_frexp.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_frexpf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_frexpl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_isinf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_isinff.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_isinfl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_isnan.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_isnanf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_isnanl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_llrint.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_llrintf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_llrintl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_log1p.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_log1pf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_log1pl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_logbl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_lrint.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_lrintf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_lrintl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_modf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_modff.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_modfl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_nearbyint.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_nearbyintf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_nearbyintl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_nextafterl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_remquo.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_remquof.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_remquol.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_rint.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_rintf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_rintl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_scalbln.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_scalblnf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_scalblnl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_scalbn.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_scalbnf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_scalbnl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_significand.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_significandf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_significandl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_sin.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_sincos.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_sincosf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_sincosl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_sinf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_sinl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_tan.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_tanf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_tanh.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_tanhf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_tanhl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_tanl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_trunc.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_truncf.c delete mode 100644 sysdeps/m68k/m680x0/fpu/s_truncl.c delete mode 100644 sysdeps/m68k/m680x0/fpu/sincos32.c delete mode 100644 sysdeps/m68k/m680x0/fpu/sincostab.c delete mode 100644 sysdeps/m68k/m680x0/fpu/slowexp.c delete mode 100644 sysdeps/m68k/m680x0/fpu/slowpow.c delete mode 100644 sysdeps/m68k/m680x0/fpu/t_exp.c delete mode 100644 sysdeps/m68k/m680x0/lshift.S delete mode 100644 sysdeps/m68k/m680x0/m68020/Makefile delete mode 100644 sysdeps/m68k/m680x0/m68020/addmul_1.S delete mode 100644 sysdeps/m68k/m680x0/m68020/atomic-machine.h delete mode 100644 sysdeps/m68k/m680x0/m68020/bits/string.h delete mode 100644 sysdeps/m68k/m680x0/m68020/mul_1.S delete mode 100644 sysdeps/m68k/m680x0/m68020/string_private.h delete mode 100644 sysdeps/m68k/m680x0/m68020/submul_1.S delete mode 100644 sysdeps/m68k/m680x0/m68020/wordcopy.S delete mode 100644 sysdeps/m68k/m680x0/printf_fphex.c delete mode 100644 sysdeps/m68k/m680x0/rshift.S delete mode 100644 sysdeps/m68k/m680x0/strtold_l.c delete mode 100644 sysdeps/m68k/m680x0/sub_n.S delete mode 100644 sysdeps/m68k/m680x0/sysdep.h delete mode 100644 sysdeps/m68k/memchr.S delete mode 100644 sysdeps/m68k/memcopy.h delete mode 100644 sysdeps/m68k/memusage.h delete mode 100644 sysdeps/m68k/nptl/Makefile delete mode 100644 sysdeps/m68k/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/m68k/nptl/bits/semaphore.h delete mode 100644 sysdeps/m68k/nptl/pthreaddef.h delete mode 100644 sysdeps/m68k/nptl/tcb-offsets.sym delete mode 100644 sysdeps/m68k/nptl/tls.h delete mode 100644 sysdeps/m68k/preconfigure delete mode 100644 sysdeps/m68k/rawmemchr.S delete mode 100644 sysdeps/m68k/setjmp.c delete mode 100644 sysdeps/m68k/shlib-versions delete mode 100644 sysdeps/m68k/sotruss-lib.c delete mode 100644 sysdeps/m68k/stackinfo.h delete mode 100644 sysdeps/m68k/start.S delete mode 100644 sysdeps/m68k/strchr.S delete mode 100644 sysdeps/m68k/strchrnul.S delete mode 100644 sysdeps/m68k/symbol-hacks.h delete mode 100644 sysdeps/m68k/sys/ucontext.h delete mode 100644 sysdeps/m68k/sysdep.h delete mode 100644 sysdeps/m68k/tls-macros.h delete mode 100644 sysdeps/m68k/tst-audit.h delete mode 100644 sysdeps/m68k/wcpcpy.c delete mode 100644 sysdeps/m68k/wcpcpy_chk.c delete mode 100644 sysdeps/mach/Makefile delete mode 100644 sysdeps/mach/Subdirs delete mode 100644 sysdeps/mach/_strerror.c delete mode 100644 sysdeps/mach/adjtime.c delete mode 100644 sysdeps/mach/configure delete mode 100644 sysdeps/mach/configure.ac delete mode 100644 sysdeps/mach/getloadavg.c delete mode 100644 sysdeps/mach/getpagesize.c delete mode 100644 sysdeps/mach/getsysstats.c delete mode 100644 sysdeps/mach/gettimeofday.c delete mode 100644 sysdeps/mach/hurd/Implies delete mode 100644 sysdeps/mach/hurd/Makeconfig delete mode 100644 sysdeps/mach/hurd/Makefile delete mode 100644 sysdeps/mach/hurd/Subdirs delete mode 100644 sysdeps/mach/hurd/Versions delete mode 100644 sysdeps/mach/hurd/_exit.c delete mode 100644 sysdeps/mach/hurd/accept.c delete mode 100644 sysdeps/mach/hurd/accept4.c delete mode 100644 sysdeps/mach/hurd/access.c delete mode 100644 sysdeps/mach/hurd/adjtime.c delete mode 100644 sysdeps/mach/hurd/bind.c delete mode 100644 sysdeps/mach/hurd/bits/errno.h delete mode 100644 sysdeps/mach/hurd/bits/fcntl.h delete mode 100644 sysdeps/mach/hurd/bits/ioctls.h delete mode 100644 sysdeps/mach/hurd/bits/local_lim.h delete mode 100644 sysdeps/mach/hurd/bits/param.h delete mode 100644 sysdeps/mach/hurd/bits/posix_opt.h delete mode 100644 sysdeps/mach/hurd/bits/socket.h delete mode 100644 sysdeps/mach/hurd/bits/stat.h delete mode 100644 sysdeps/mach/hurd/bits/statfs.h delete mode 100644 sysdeps/mach/hurd/bits/statvfs.h delete mode 100644 sysdeps/mach/hurd/bits/typesizes.h delete mode 100644 sysdeps/mach/hurd/brk.c delete mode 100644 sysdeps/mach/hurd/chdir.c delete mode 100644 sysdeps/mach/hurd/check_fds.c delete mode 100644 sysdeps/mach/hurd/chflags.c delete mode 100644 sysdeps/mach/hurd/chmod.c delete mode 100644 sysdeps/mach/hurd/chown.c delete mode 100644 sysdeps/mach/hurd/chroot.c delete mode 100644 sysdeps/mach/hurd/clock.c delete mode 100644 sysdeps/mach/hurd/close.c delete mode 100644 sysdeps/mach/hurd/closedir.c delete mode 100644 sysdeps/mach/hurd/configure delete mode 100644 sysdeps/mach/hurd/configure.ac delete mode 100644 sysdeps/mach/hurd/connect.c delete mode 100644 sysdeps/mach/hurd/cthreads.c delete mode 100644 sysdeps/mach/hurd/device-nrs.h delete mode 100644 sysdeps/mach/hurd/dirfd.c delete mode 100644 sysdeps/mach/hurd/dirstream.h delete mode 100644 sysdeps/mach/hurd/dl-execstack.c delete mode 100644 sysdeps/mach/hurd/dl-fcntl.h delete mode 100644 sysdeps/mach/hurd/dl-mman.h delete mode 100644 sysdeps/mach/hurd/dl-sysdep.c delete mode 100644 sysdeps/mach/hurd/dl-sysdep.h delete mode 100644 sysdeps/mach/hurd/dl-unistd.h delete mode 100644 sysdeps/mach/hurd/dup2.c delete mode 100644 sysdeps/mach/hurd/dup3.c delete mode 100644 sysdeps/mach/hurd/eloop-threshold.h delete mode 100644 sysdeps/mach/hurd/enbl-secure.c delete mode 100644 sysdeps/mach/hurd/err_hurd.sub delete mode 100644 sysdeps/mach/hurd/errlist.c delete mode 100644 sysdeps/mach/hurd/errno-loc.c delete mode 100644 sysdeps/mach/hurd/errno.c delete mode 100644 sysdeps/mach/hurd/errnos.awk delete mode 100644 sysdeps/mach/hurd/euidaccess.c delete mode 100644 sysdeps/mach/hurd/execve.c delete mode 100644 sysdeps/mach/hurd/faccessat.c delete mode 100644 sysdeps/mach/hurd/fchdir.c delete mode 100644 sysdeps/mach/hurd/fchflags.c delete mode 100644 sysdeps/mach/hurd/fchmod.c delete mode 100644 sysdeps/mach/hurd/fchmodat.c delete mode 100644 sysdeps/mach/hurd/fchown.c delete mode 100644 sysdeps/mach/hurd/fchownat.c delete mode 100644 sysdeps/mach/hurd/fcntl.c delete mode 100644 sysdeps/mach/hurd/fdatasync.c delete mode 100644 sysdeps/mach/hurd/fdopendir.c delete mode 100644 sysdeps/mach/hurd/fexecve.c delete mode 100644 sysdeps/mach/hurd/fgetxattr.c delete mode 100644 sysdeps/mach/hurd/flistxattr.c delete mode 100644 sysdeps/mach/hurd/flock.c delete mode 100644 sysdeps/mach/hurd/fork.c delete mode 100644 sysdeps/mach/hurd/fpathconf.c delete mode 100644 sysdeps/mach/hurd/fremovexattr.c delete mode 100644 sysdeps/mach/hurd/fsetxattr.c delete mode 100644 sysdeps/mach/hurd/fstatfs.c delete mode 100644 sysdeps/mach/hurd/fstatfs64.c delete mode 100644 sysdeps/mach/hurd/fstatvfs.c delete mode 100644 sysdeps/mach/hurd/fstatvfs64.c delete mode 100644 sysdeps/mach/hurd/fsync.c delete mode 100644 sysdeps/mach/hurd/ftruncate.c delete mode 100644 sysdeps/mach/hurd/ftruncate64.c delete mode 100644 sysdeps/mach/hurd/futimes.c delete mode 100644 sysdeps/mach/hurd/fxstat.c delete mode 100644 sysdeps/mach/hurd/fxstat64.c delete mode 100644 sysdeps/mach/hurd/fxstatat.c delete mode 100644 sysdeps/mach/hurd/fxstatat64.c delete mode 100644 sysdeps/mach/hurd/getclktck.c delete mode 100644 sysdeps/mach/hurd/getcwd.c delete mode 100644 sysdeps/mach/hurd/getdents.c delete mode 100644 sysdeps/mach/hurd/getdomain.c delete mode 100644 sysdeps/mach/hurd/getdtsz.c delete mode 100644 sysdeps/mach/hurd/getegid.c delete mode 100644 sysdeps/mach/hurd/geteuid.c delete mode 100644 sysdeps/mach/hurd/getgid.c delete mode 100644 sysdeps/mach/hurd/getgroups.c delete mode 100644 sysdeps/mach/hurd/gethostid.c delete mode 100644 sysdeps/mach/hurd/gethostname.c delete mode 100644 sysdeps/mach/hurd/getitimer.c delete mode 100644 sysdeps/mach/hurd/getlogin.c delete mode 100644 sysdeps/mach/hurd/getlogin_r.c delete mode 100644 sysdeps/mach/hurd/getpeername.c delete mode 100644 sysdeps/mach/hurd/getpgid.c delete mode 100644 sysdeps/mach/hurd/getpid.c delete mode 100644 sysdeps/mach/hurd/getppid.c delete mode 100644 sysdeps/mach/hurd/getpriority.c delete mode 100644 sysdeps/mach/hurd/getresgid.c delete mode 100644 sysdeps/mach/hurd/getresuid.c delete mode 100644 sysdeps/mach/hurd/getrlimit.c delete mode 100644 sysdeps/mach/hurd/getrusage.c delete mode 100644 sysdeps/mach/hurd/getsid.c delete mode 100644 sysdeps/mach/hurd/getsockname.c delete mode 100644 sysdeps/mach/hurd/getsockopt.c delete mode 100644 sysdeps/mach/hurd/getuid.c delete mode 100644 sysdeps/mach/hurd/getxattr.c delete mode 100644 sysdeps/mach/hurd/group_member.c delete mode 100644 sysdeps/mach/hurd/i386/Makefile delete mode 100644 sysdeps/mach/hurd/i386/Versions delete mode 100644 sysdeps/mach/hurd/i386/____longjmp_chk.S delete mode 100644 sysdeps/mach/hurd/i386/bits/sigcontext.h delete mode 100644 sysdeps/mach/hurd/i386/c++-types.data delete mode 100644 sysdeps/mach/hurd/i386/dl-machine.h delete mode 100644 sysdeps/mach/hurd/i386/exc2signal.c delete mode 100644 sysdeps/mach/hurd/i386/init-first.c delete mode 100644 sysdeps/mach/hurd/i386/intr-msg.h delete mode 100644 sysdeps/mach/hurd/i386/ioperm.c delete mode 100644 sysdeps/mach/hurd/i386/longjmp-ts.c delete mode 100644 sysdeps/mach/hurd/i386/sigcontextinfo.h delete mode 100644 sysdeps/mach/hurd/i386/signal-defines.sym delete mode 100644 sysdeps/mach/hurd/i386/sigreturn.c delete mode 100644 sysdeps/mach/hurd/i386/static-start.S delete mode 100644 sysdeps/mach/hurd/i386/sys/io.h delete mode 100644 sysdeps/mach/hurd/i386/tls.h delete mode 100644 sysdeps/mach/hurd/i386/trampoline.c delete mode 100644 sysdeps/mach/hurd/if_index.c delete mode 100644 sysdeps/mach/hurd/ifreq.c delete mode 100644 sysdeps/mach/hurd/ifreq.h delete mode 100644 sysdeps/mach/hurd/init-posix.c delete mode 100644 sysdeps/mach/hurd/ioctl.c delete mode 100644 sysdeps/mach/hurd/isatty.c delete mode 100644 sysdeps/mach/hurd/jmp-unwind.c delete mode 100644 sysdeps/mach/hurd/kernel-features.h delete mode 100644 sysdeps/mach/hurd/kill.c delete mode 100644 sysdeps/mach/hurd/lchmod.c delete mode 100644 sysdeps/mach/hurd/lchown.c delete mode 100644 sysdeps/mach/hurd/lgetxattr.c delete mode 100644 sysdeps/mach/hurd/libc-ldscript delete mode 100644 sysdeps/mach/hurd/libc-lock.h delete mode 100644 sysdeps/mach/hurd/libc-tsd.h delete mode 100644 sysdeps/mach/hurd/libc_p-ldscript delete mode 100644 sysdeps/mach/hurd/link.c delete mode 100644 sysdeps/mach/hurd/linkat.c delete mode 100644 sysdeps/mach/hurd/listen.c delete mode 100644 sysdeps/mach/hurd/listxattr.c delete mode 100644 sysdeps/mach/hurd/llistxattr.c delete mode 100644 sysdeps/mach/hurd/lremovexattr.c delete mode 100644 sysdeps/mach/hurd/lseek.c delete mode 100644 sysdeps/mach/hurd/lseek64.c delete mode 100644 sysdeps/mach/hurd/lsetxattr.c delete mode 100644 sysdeps/mach/hurd/lutimes.c delete mode 100644 sysdeps/mach/hurd/lxstat.c delete mode 100644 sysdeps/mach/hurd/lxstat64.c delete mode 100644 sysdeps/mach/hurd/malloc-machine.h delete mode 100644 sysdeps/mach/hurd/mig-reply.c delete mode 100644 sysdeps/mach/hurd/mkdir.c delete mode 100644 sysdeps/mach/hurd/mkdirat.c delete mode 100644 sysdeps/mach/hurd/mlock.c delete mode 100644 sysdeps/mach/hurd/mmap.c delete mode 100644 sysdeps/mach/hurd/mmap64.c delete mode 100644 sysdeps/mach/hurd/munlock.c delete mode 100644 sysdeps/mach/hurd/net/ethernet.h delete mode 100644 sysdeps/mach/hurd/net/if_arp.h delete mode 100644 sysdeps/mach/hurd/net/if_ether.h delete mode 100644 sysdeps/mach/hurd/net/if_ppp.h delete mode 100644 sysdeps/mach/hurd/net/route.h delete mode 100644 sysdeps/mach/hurd/open.c delete mode 100644 sysdeps/mach/hurd/open64.c delete mode 100644 sysdeps/mach/hurd/openat.c delete mode 100644 sysdeps/mach/hurd/openat64.c delete mode 100644 sysdeps/mach/hurd/opendir.c delete mode 100644 sysdeps/mach/hurd/pathconf.c delete mode 100644 sysdeps/mach/hurd/pipe.c delete mode 100644 sysdeps/mach/hurd/poll.c delete mode 100644 sysdeps/mach/hurd/ppoll.c delete mode 100644 sysdeps/mach/hurd/pread.c delete mode 100644 sysdeps/mach/hurd/pread64.c delete mode 100644 sysdeps/mach/hurd/prof-freq.c delete mode 100644 sysdeps/mach/hurd/profil.c delete mode 100644 sysdeps/mach/hurd/pselect.c delete mode 100644 sysdeps/mach/hurd/ptrace.c delete mode 100644 sysdeps/mach/hurd/ptsname.c delete mode 100644 sysdeps/mach/hurd/pwrite.c delete mode 100644 sysdeps/mach/hurd/pwrite64.c delete mode 100644 sysdeps/mach/hurd/read.c delete mode 100644 sysdeps/mach/hurd/readdir.c delete mode 100644 sysdeps/mach/hurd/readdir64.c delete mode 100644 sysdeps/mach/hurd/readdir64_r.c delete mode 100644 sysdeps/mach/hurd/readdir_r.c delete mode 100644 sysdeps/mach/hurd/readlink.c delete mode 100644 sysdeps/mach/hurd/readlinkat.c delete mode 100644 sysdeps/mach/hurd/reboot.c delete mode 100644 sysdeps/mach/hurd/recv.c delete mode 100644 sysdeps/mach/hurd/recvfrom.c delete mode 100644 sysdeps/mach/hurd/recvmsg.c delete mode 100644 sysdeps/mach/hurd/removexattr.c delete mode 100644 sysdeps/mach/hurd/rename.c delete mode 100644 sysdeps/mach/hurd/renameat.c delete mode 100644 sysdeps/mach/hurd/revoke.c delete mode 100644 sysdeps/mach/hurd/rewinddir.c delete mode 100644 sysdeps/mach/hurd/rmdir.c delete mode 100644 sysdeps/mach/hurd/sbrk.c delete mode 100644 sysdeps/mach/hurd/seekdir.c delete mode 100644 sysdeps/mach/hurd/select.c delete mode 100644 sysdeps/mach/hurd/send.c delete mode 100644 sysdeps/mach/hurd/sendfile.c delete mode 100644 sysdeps/mach/hurd/sendfile64.c delete mode 100644 sysdeps/mach/hurd/sendmsg.c delete mode 100644 sysdeps/mach/hurd/sendto.c delete mode 100644 sysdeps/mach/hurd/setdomain.c delete mode 100644 sysdeps/mach/hurd/setegid.c delete mode 100644 sysdeps/mach/hurd/seteuid.c delete mode 100644 sysdeps/mach/hurd/setgid.c delete mode 100644 sysdeps/mach/hurd/setgroups.c delete mode 100644 sysdeps/mach/hurd/sethostid.c delete mode 100644 sysdeps/mach/hurd/sethostname.c delete mode 100644 sysdeps/mach/hurd/setitimer.c delete mode 100644 sysdeps/mach/hurd/setlogin.c delete mode 100644 sysdeps/mach/hurd/setpgid.c delete mode 100644 sysdeps/mach/hurd/setpriority.c delete mode 100644 sysdeps/mach/hurd/setregid.c delete mode 100644 sysdeps/mach/hurd/setresgid.c delete mode 100644 sysdeps/mach/hurd/setresuid.c delete mode 100644 sysdeps/mach/hurd/setreuid.c delete mode 100644 sysdeps/mach/hurd/setrlimit.c delete mode 100644 sysdeps/mach/hurd/setsid.c delete mode 100644 sysdeps/mach/hurd/setsockopt.c delete mode 100644 sysdeps/mach/hurd/settimeofday.c delete mode 100644 sysdeps/mach/hurd/setuid.c delete mode 100644 sysdeps/mach/hurd/setxattr.c delete mode 100644 sysdeps/mach/hurd/shlib-versions delete mode 100644 sysdeps/mach/hurd/shutdown.c delete mode 100644 sysdeps/mach/hurd/sigaction.c delete mode 100644 sysdeps/mach/hurd/sigaltstack.c delete mode 100644 sysdeps/mach/hurd/siglist.h delete mode 100644 sysdeps/mach/hurd/sigpending.c delete mode 100644 sysdeps/mach/hurd/sigprocmask.c delete mode 100644 sysdeps/mach/hurd/sigstack.c delete mode 100644 sysdeps/mach/hurd/sigsuspend.c delete mode 100644 sysdeps/mach/hurd/sigwait.c delete mode 100644 sysdeps/mach/hurd/socket.c delete mode 100644 sysdeps/mach/hurd/socketpair.c delete mode 100644 sysdeps/mach/hurd/spawni.c delete mode 100644 sysdeps/mach/hurd/statfs.c delete mode 100644 sysdeps/mach/hurd/statfs64.c delete mode 100644 sysdeps/mach/hurd/statfsconv.c delete mode 100644 sysdeps/mach/hurd/statvfs.c delete mode 100644 sysdeps/mach/hurd/statvfs64.c delete mode 100644 sysdeps/mach/hurd/symlink.c delete mode 100644 sysdeps/mach/hurd/symlinkat.c delete mode 100644 sysdeps/mach/hurd/sync.c delete mode 100644 sysdeps/mach/hurd/syncfs.c delete mode 100644 sysdeps/mach/hurd/sysconf.c delete mode 100644 sysdeps/mach/hurd/telldir.c delete mode 100644 sysdeps/mach/hurd/times.c delete mode 100644 sysdeps/mach/hurd/tls.h delete mode 100644 sysdeps/mach/hurd/tmpfile.c delete mode 100644 sysdeps/mach/hurd/tmpfile64.c delete mode 100644 sysdeps/mach/hurd/truncate.c delete mode 100644 sysdeps/mach/hurd/truncate64.c delete mode 100644 sysdeps/mach/hurd/ttyname.c delete mode 100644 sysdeps/mach/hurd/ttyname_r.c delete mode 100644 sysdeps/mach/hurd/umask.c delete mode 100644 sysdeps/mach/hurd/uname.c delete mode 100644 sysdeps/mach/hurd/unlink.c delete mode 100644 sysdeps/mach/hurd/unlinkat.c delete mode 100644 sysdeps/mach/hurd/utimes.c delete mode 100644 sysdeps/mach/hurd/wait4.c delete mode 100644 sysdeps/mach/hurd/write.c delete mode 100644 sysdeps/mach/hurd/xmknod.c delete mode 100644 sysdeps/mach/hurd/xmknodat.c delete mode 100644 sysdeps/mach/hurd/xstat.c delete mode 100644 sysdeps/mach/hurd/xstat64.c delete mode 100644 sysdeps/mach/hurd/xstatconv.c delete mode 100644 sysdeps/mach/i386/machine-lock.h delete mode 100644 sysdeps/mach/i386/machine-sp.h delete mode 100644 sysdeps/mach/i386/syscall.S delete mode 100644 sysdeps/mach/i386/sysdep.h delete mode 100644 sysdeps/mach/i386/thread_state.h delete mode 100644 sysdeps/mach/libc-lock.h delete mode 100644 sysdeps/mach/mprotect.c delete mode 100644 sysdeps/mach/msync.c delete mode 100644 sysdeps/mach/munmap.c delete mode 100644 sysdeps/mach/nanosleep.c delete mode 100644 sysdeps/mach/pagecopy.h delete mode 100644 sysdeps/mach/readonly-area.c delete mode 100644 sysdeps/mach/sched_yield.c delete mode 100644 sysdeps/mach/sleep.c delete mode 100644 sysdeps/mach/strerror_l.c delete mode 100644 sysdeps/mach/sys/reboot.h delete mode 100644 sysdeps/mach/sys/syscall.h delete mode 100644 sysdeps/mach/sysdep.h delete mode 100644 sysdeps/mach/thread_state.h delete mode 100644 sysdeps/mach/usleep.c delete mode 100644 sysdeps/mach/xpg-strerror.c delete mode 100644 sysdeps/microblaze/Implies delete mode 100644 sysdeps/microblaze/Makefile delete mode 100644 sysdeps/microblaze/__longjmp.S delete mode 100644 sysdeps/microblaze/_mcount.S delete mode 100644 sysdeps/microblaze/abort-instr.h delete mode 100644 sysdeps/microblaze/asm-syntax.h delete mode 100644 sysdeps/microblaze/atomic-machine.h delete mode 100644 sysdeps/microblaze/backtrace.c delete mode 100644 sysdeps/microblaze/backtrace_linux.c delete mode 100644 sysdeps/microblaze/bits/endian.h delete mode 100644 sysdeps/microblaze/bits/fenv.h delete mode 100644 sysdeps/microblaze/bits/link.h delete mode 100644 sysdeps/microblaze/bits/setjmp.h delete mode 100644 sysdeps/microblaze/bsd-_setjmp.S delete mode 100644 sysdeps/microblaze/bsd-setjmp.S delete mode 100644 sysdeps/microblaze/crti.S delete mode 100644 sysdeps/microblaze/crtn.S delete mode 100644 sysdeps/microblaze/dl-machine.h delete mode 100644 sysdeps/microblaze/dl-tls.h delete mode 100644 sysdeps/microblaze/dl-trampoline.S delete mode 100644 sysdeps/microblaze/gccframe.h delete mode 100644 sysdeps/microblaze/jmpbuf-unwind.h delete mode 100644 sysdeps/microblaze/ldsodefs.h delete mode 100644 sysdeps/microblaze/libc-tls.c delete mode 100644 sysdeps/microblaze/libm-test-ulps delete mode 100644 sysdeps/microblaze/libm-test-ulps-name delete mode 100644 sysdeps/microblaze/machine-gmon.h delete mode 100644 sysdeps/microblaze/math_private.h delete mode 100644 sysdeps/microblaze/memusage.h delete mode 100644 sysdeps/microblaze/nptl/Makefile delete mode 100644 sysdeps/microblaze/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/microblaze/nptl/bits/semaphore.h delete mode 100644 sysdeps/microblaze/nptl/pthreaddef.h delete mode 100644 sysdeps/microblaze/nptl/tcb-offsets.sym delete mode 100644 sysdeps/microblaze/nptl/tls.h delete mode 100644 sysdeps/microblaze/preconfigure delete mode 100644 sysdeps/microblaze/s_fma.c delete mode 100644 sysdeps/microblaze/s_fmaf.c delete mode 100644 sysdeps/microblaze/setjmp.S delete mode 100644 sysdeps/microblaze/sfp-machine.h delete mode 100644 sysdeps/microblaze/sotruss-lib.c delete mode 100644 sysdeps/microblaze/stackinfo.h delete mode 100644 sysdeps/microblaze/start.S delete mode 100644 sysdeps/microblaze/sysdep.h delete mode 100644 sysdeps/microblaze/tls-macros.h delete mode 100644 sysdeps/microblaze/tst-audit.h delete mode 100644 sysdeps/mips/Implies delete mode 100644 sysdeps/mips/Makefile delete mode 100644 sysdeps/mips/__longjmp.c delete mode 100644 sysdeps/mips/abort-instr.h delete mode 100644 sysdeps/mips/add_n.S delete mode 100644 sysdeps/mips/addmul_1.S delete mode 100644 sysdeps/mips/atomic-machine.h delete mode 100644 sysdeps/mips/backtrace.c delete mode 100644 sysdeps/mips/bits/dlfcn.h delete mode 100644 sysdeps/mips/bits/endian.h delete mode 100644 sysdeps/mips/bits/fenv.h delete mode 100644 sysdeps/mips/bits/ipctypes.h delete mode 100644 sysdeps/mips/bits/link.h delete mode 100644 sysdeps/mips/bits/long-double.h delete mode 100644 sysdeps/mips/bits/nan.h delete mode 100644 sysdeps/mips/bits/setjmp.h delete mode 100644 sysdeps/mips/bits/wordsize.h delete mode 100644 sysdeps/mips/bsd-_setjmp.S delete mode 100644 sysdeps/mips/bsd-setjmp.S delete mode 100644 sysdeps/mips/configure delete mode 100644 sysdeps/mips/configure.ac delete mode 100644 sysdeps/mips/dl-dtprocnum.h delete mode 100644 sysdeps/mips/dl-machine-reject-phdr.h delete mode 100644 sysdeps/mips/dl-machine.h delete mode 100644 sysdeps/mips/dl-procinfo.c delete mode 100644 sysdeps/mips/dl-procinfo.h delete mode 100644 sysdeps/mips/dl-tls.h delete mode 100644 sysdeps/mips/dl-trampoline.c delete mode 100644 sysdeps/mips/fpregdef.h delete mode 100644 sysdeps/mips/fpu/e_sqrt.c delete mode 100644 sysdeps/mips/fpu/e_sqrtf.c delete mode 100644 sysdeps/mips/fpu/fclrexcpt.c delete mode 100644 sysdeps/mips/fpu/fedisblxcpt.c delete mode 100644 sysdeps/mips/fpu/feenablxcpt.c delete mode 100644 sysdeps/mips/fpu/fegetenv.c delete mode 100644 sysdeps/mips/fpu/fegetexcept.c delete mode 100644 sysdeps/mips/fpu/fegetmode.c delete mode 100644 sysdeps/mips/fpu/fegetround.c delete mode 100644 sysdeps/mips/fpu/feholdexcpt.c delete mode 100644 sysdeps/mips/fpu/fenv_libc.h delete mode 100644 sysdeps/mips/fpu/fesetenv.c delete mode 100644 sysdeps/mips/fpu/fesetexcept.c delete mode 100644 sysdeps/mips/fpu/fesetmode.c delete mode 100644 sysdeps/mips/fpu/fesetround.c delete mode 100644 sysdeps/mips/fpu/feupdateenv.c delete mode 100644 sysdeps/mips/fpu/fgetexcptflg.c delete mode 100644 sysdeps/mips/fpu/fraiseexcpt.c delete mode 100644 sysdeps/mips/fpu/fsetexcptflg.c delete mode 100644 sysdeps/mips/fpu/ftestexcept.c delete mode 100644 sysdeps/mips/fpu_control.h delete mode 100644 sysdeps/mips/gccframe.h delete mode 100644 sysdeps/mips/ieee754/ieee754.h delete mode 100644 sysdeps/mips/ieee754/s_fma.c delete mode 100644 sysdeps/mips/ieee754/s_fmaf.c delete mode 100644 sysdeps/mips/ieee754/s_fmal.c delete mode 100644 sysdeps/mips/include/sys/asm.h delete mode 100644 sysdeps/mips/jmpbuf-unwind.h delete mode 100644 sysdeps/mips/ldsodefs.h delete mode 100644 sysdeps/mips/libc-tls.c delete mode 100644 sysdeps/mips/linkmap.h delete mode 100644 sysdeps/mips/localplt.data delete mode 100644 sysdeps/mips/lshift.S delete mode 100644 sysdeps/mips/machine-gmon.h delete mode 100644 sysdeps/mips/math-tests.h delete mode 100644 sysdeps/mips/math_private.h delete mode 100644 sysdeps/mips/memcpy.S delete mode 100644 sysdeps/mips/memset.S delete mode 100644 sysdeps/mips/memusage.h delete mode 100644 sysdeps/mips/mips32/Implies delete mode 100644 sysdeps/mips/mips32/Makefile delete mode 100644 sysdeps/mips/mips32/crti.S delete mode 100644 sysdeps/mips/mips32/crtn.S delete mode 100644 sysdeps/mips/mips32/fpu/Makefile delete mode 100644 sysdeps/mips/mips32/fpu/Versions delete mode 100644 sysdeps/mips/mips32/fpu/e_sqrt.c delete mode 100644 sysdeps/mips/mips32/fpu/e_sqrtf.c delete mode 100644 sysdeps/mips/mips32/fpu/fix-fp-int-convert-overflow.h delete mode 100644 sysdeps/mips/mips32/fpu/fpucw-helpers.c delete mode 100644 sysdeps/mips/mips32/libm-test-ulps delete mode 100644 sysdeps/mips/mips32/libm-test-ulps-name delete mode 100644 sysdeps/mips/mips32/mips16/add_n.c delete mode 100644 sysdeps/mips/mips32/mips16/addmul_1.c delete mode 100644 sysdeps/mips/mips32/mips16/fpu/Makefile delete mode 100644 sysdeps/mips/mips32/mips16/lshift.c delete mode 100644 sysdeps/mips/mips32/mips16/mul_1.c delete mode 100644 sysdeps/mips/mips32/mips16/rshift.c delete mode 100644 sysdeps/mips/mips32/mips16/sub_n.c delete mode 100644 sysdeps/mips/mips32/mips16/submul_1.c delete mode 100644 sysdeps/mips/mips32/sfp-machine.h delete mode 100644 sysdeps/mips/mips64/Implies delete mode 100644 sysdeps/mips/mips64/Makefile delete mode 100644 sysdeps/mips/mips64/Versions delete mode 100644 sysdeps/mips/mips64/__longjmp.c delete mode 100644 sysdeps/mips/mips64/add_n.S delete mode 100644 sysdeps/mips/mips64/addmul_1.S delete mode 100644 sysdeps/mips/mips64/bsd-_setjmp.S delete mode 100644 sysdeps/mips/mips64/bsd-setjmp.S delete mode 100644 sysdeps/mips/mips64/e_sqrtl.c delete mode 100644 sysdeps/mips/mips64/gmp-mparam.h delete mode 100644 sysdeps/mips/mips64/libm-test-ulps delete mode 100644 sysdeps/mips/mips64/libm-test-ulps-name delete mode 100644 sysdeps/mips/mips64/lshift.S delete mode 100644 sysdeps/mips/mips64/mul_1.S delete mode 100644 sysdeps/mips/mips64/n32/Implies delete mode 100644 sysdeps/mips/mips64/n32/Makefile delete mode 100644 sysdeps/mips/mips64/n32/_itoa.h delete mode 100644 sysdeps/mips/mips64/n32/crti.S delete mode 100644 sysdeps/mips/mips64/n32/crtn.S delete mode 100644 sysdeps/mips/mips64/n32/fpu/e_sqrt.c delete mode 100644 sysdeps/mips/mips64/n32/fpu/e_sqrtf.c delete mode 100644 sysdeps/mips/mips64/n64/Implies delete mode 100644 sysdeps/mips/mips64/n64/Makefile delete mode 100644 sysdeps/mips/mips64/n64/crti.S delete mode 100644 sysdeps/mips/mips64/n64/crtn.S delete mode 100644 sysdeps/mips/mips64/n64/fpu/e_sqrt.c delete mode 100644 sysdeps/mips/mips64/n64/fpu/e_sqrtf.c delete mode 100644 sysdeps/mips/mips64/rshift.S delete mode 100644 sysdeps/mips/mips64/setjmp.S delete mode 100644 sysdeps/mips/mips64/setjmp_aux.c delete mode 100644 sysdeps/mips/mips64/sfp-machine.h delete mode 100644 sysdeps/mips/mips64/sub_n.S delete mode 100644 sysdeps/mips/mips64/submul_1.S delete mode 100644 sysdeps/mips/mul_1.S delete mode 100644 sysdeps/mips/nan-high-order-bit.h delete mode 100644 sysdeps/mips/nptl/Makefile delete mode 100644 sysdeps/mips/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/mips/nptl/bits/semaphore.h delete mode 100644 sysdeps/mips/nptl/nptl-sysdep.S delete mode 100644 sysdeps/mips/nptl/pthreaddef.h delete mode 100644 sysdeps/mips/nptl/tcb-offsets.sym delete mode 100644 sysdeps/mips/nptl/tls.h delete mode 100644 sysdeps/mips/preconfigure delete mode 100644 sysdeps/mips/regdef.h delete mode 100644 sysdeps/mips/rshift.S delete mode 100644 sysdeps/mips/setjmp.S delete mode 100644 sysdeps/mips/setjmp_aux.c delete mode 100644 sysdeps/mips/sgidefs.h delete mode 100644 sysdeps/mips/sotruss-lib.c delete mode 100644 sysdeps/mips/stackinfo.h delete mode 100644 sysdeps/mips/start.S delete mode 100644 sysdeps/mips/strcmp.S delete mode 100644 sysdeps/mips/sub_n.S delete mode 100644 sysdeps/mips/submul_1.S delete mode 100644 sysdeps/mips/sys/asm.h delete mode 100644 sysdeps/mips/sys/fpregdef.h delete mode 100644 sysdeps/mips/sys/regdef.h delete mode 100644 sysdeps/mips/sys/tas.h delete mode 100644 sysdeps/mips/sys/ucontext.h delete mode 100644 sysdeps/mips/tininess.h delete mode 100644 sysdeps/mips/tls-macros.h delete mode 100644 sysdeps/mips/tst-abi-fp32mod.c delete mode 100644 sysdeps/mips/tst-abi-fp64amod.c delete mode 100644 sysdeps/mips/tst-abi-fp64mod.c delete mode 100644 sysdeps/mips/tst-abi-fpxxmod.c delete mode 100644 sysdeps/mips/tst-abi-fpxxomod.c delete mode 100644 sysdeps/mips/tst-abi-interlink.c delete mode 100644 sysdeps/mips/tst-audit.h delete mode 100644 sysdeps/mips/tst-mode-switch-1.c delete mode 100644 sysdeps/mips/tst-mode-switch-2.c delete mode 100644 sysdeps/mips/tst-mode-switch-3.c delete mode 100644 sysdeps/nios2/Implies delete mode 100644 sysdeps/nios2/Makefile delete mode 100644 sysdeps/nios2/Subdirs delete mode 100644 sysdeps/nios2/Versions delete mode 100644 sysdeps/nios2/__longjmp.S delete mode 100644 sysdeps/nios2/abort-instr.h delete mode 100644 sysdeps/nios2/backtrace.c delete mode 100644 sysdeps/nios2/bits/endian.h delete mode 100644 sysdeps/nios2/bits/fenv.h delete mode 100644 sysdeps/nios2/bits/link.h delete mode 100644 sysdeps/nios2/bits/setjmp.h delete mode 100644 sysdeps/nios2/bsd-_setjmp.S delete mode 100644 sysdeps/nios2/bsd-setjmp.S delete mode 100644 sysdeps/nios2/configure delete mode 100644 sysdeps/nios2/configure.ac delete mode 100644 sysdeps/nios2/crti.S delete mode 100644 sysdeps/nios2/crtn.S delete mode 100644 sysdeps/nios2/dl-init.c delete mode 100644 sysdeps/nios2/dl-machine.h delete mode 100644 sysdeps/nios2/dl-sysdep.h delete mode 100644 sysdeps/nios2/dl-tls.h delete mode 100644 sysdeps/nios2/dl-trampoline.S delete mode 100644 sysdeps/nios2/gccframe.h delete mode 100644 sysdeps/nios2/gmp-mparam.h delete mode 100644 sysdeps/nios2/jmpbuf-offsets.h delete mode 100644 sysdeps/nios2/jmpbuf-unwind.h delete mode 100644 sysdeps/nios2/ldsodefs.h delete mode 100644 sysdeps/nios2/libc-tls.c delete mode 100644 sysdeps/nios2/libm-test-ulps delete mode 100644 sysdeps/nios2/libm-test-ulps-name delete mode 100644 sysdeps/nios2/machine-gmon.h delete mode 100644 sysdeps/nios2/math-tests.h delete mode 100644 sysdeps/nios2/math_private.h delete mode 100644 sysdeps/nios2/memusage.h delete mode 100644 sysdeps/nios2/nptl/Makefile delete mode 100644 sysdeps/nios2/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/nios2/nptl/bits/semaphore.h delete mode 100644 sysdeps/nios2/nptl/pthreaddef.h delete mode 100644 sysdeps/nios2/nptl/tcb-offsets.sym delete mode 100644 sysdeps/nios2/nptl/tls.h delete mode 100644 sysdeps/nios2/preconfigure delete mode 100644 sysdeps/nios2/s_fma.c delete mode 100644 sysdeps/nios2/s_fmaf.c delete mode 100644 sysdeps/nios2/setjmp.S delete mode 100644 sysdeps/nios2/sfp-machine.h delete mode 100644 sysdeps/nios2/sotruss-lib.c delete mode 100644 sysdeps/nios2/stackguard-macros.h delete mode 100644 sysdeps/nios2/stackinfo.h delete mode 100644 sysdeps/nios2/start.S delete mode 100644 sysdeps/nios2/sysdep.h delete mode 100644 sysdeps/nios2/tls-macros.h delete mode 100644 sysdeps/nios2/tst-audit.h delete mode 100644 sysdeps/nptl/Implies delete mode 100644 sysdeps/nptl/Makeconfig delete mode 100644 sysdeps/nptl/Makefile delete mode 100644 sysdeps/nptl/Subdirs delete mode 100644 sysdeps/nptl/aio_misc.h delete mode 100644 sysdeps/nptl/allocrtsig.c delete mode 100644 sysdeps/nptl/bits/pthreadtypes.h delete mode 100644 sysdeps/nptl/bits/thread-shared-types.h delete mode 100644 sysdeps/nptl/fork.c delete mode 100644 sysdeps/nptl/fork.h delete mode 100644 sysdeps/nptl/futex-internal.h delete mode 100644 sysdeps/nptl/gai_misc.h delete mode 100644 sysdeps/nptl/internaltypes.h delete mode 100644 sysdeps/nptl/jmp-unwind.c delete mode 100644 sysdeps/nptl/libc-lock.h delete mode 100644 sysdeps/nptl/libc-lockP.h delete mode 100644 sysdeps/nptl/librt-cancellation.c delete mode 100644 sysdeps/nptl/lowlevellock-futex.h delete mode 100644 sysdeps/nptl/lowlevellock.h delete mode 100644 sysdeps/nptl/malloc-machine.h delete mode 100644 sysdeps/nptl/nptl-signals.h delete mode 100644 sysdeps/nptl/pthread-functions.h delete mode 100644 sysdeps/nptl/pthread.h delete mode 100644 sysdeps/nptl/setxid.h delete mode 100644 sysdeps/nptl/shm-directory.h delete mode 100644 sysdeps/nptl/sigfillset.c delete mode 100644 sysdeps/nptl/stdio-lock.h delete mode 100644 sysdeps/nptl/sys/procfs.h delete mode 100644 sysdeps/nptl/tcb-offsets.h delete mode 100644 sysdeps/nptl/tst-mqueue8x.c delete mode 100644 sysdeps/nptl/unwind-forcedunwind.c delete mode 100644 sysdeps/posix/Makefile delete mode 100644 sysdeps/posix/Subdirs delete mode 100644 sysdeps/posix/alarm.c delete mode 100644 sysdeps/posix/clock.c delete mode 100644 sysdeps/posix/clock_getres.c delete mode 100644 sysdeps/posix/closedir.c delete mode 100644 sysdeps/posix/ctermid.c delete mode 100644 sysdeps/posix/cuserid.c delete mode 100644 sysdeps/posix/dirfd.c delete mode 100644 sysdeps/posix/dirstream.h delete mode 100644 sysdeps/posix/dl-fileid.h delete mode 100644 sysdeps/posix/dup.c delete mode 100644 sysdeps/posix/dup2.c delete mode 100644 sysdeps/posix/euidaccess.c delete mode 100644 sysdeps/posix/fdopendir.c delete mode 100644 sysdeps/posix/flock.c delete mode 100644 sysdeps/posix/fpathconf.c delete mode 100644 sysdeps/posix/gai_strerror-strs.h delete mode 100644 sysdeps/posix/gai_strerror.c delete mode 100644 sysdeps/posix/getaddrinfo.c delete mode 100644 sysdeps/posix/getcwd.c delete mode 100644 sysdeps/posix/getdtsz.c delete mode 100644 sysdeps/posix/gethostname.c delete mode 100644 sysdeps/posix/getpagesize.c delete mode 100644 sysdeps/posix/gettimeofday.c delete mode 100644 sysdeps/posix/isatty.c delete mode 100644 sysdeps/posix/isfdtype.c delete mode 100644 sysdeps/posix/killpg.c delete mode 100644 sysdeps/posix/libc_fatal.c delete mode 100644 sysdeps/posix/mkfifo.c delete mode 100644 sysdeps/posix/mkfifoat.c delete mode 100644 sysdeps/posix/nice.c delete mode 100644 sysdeps/posix/open64.c delete mode 100644 sysdeps/posix/opendir.c delete mode 100644 sysdeps/posix/pathconf.c delete mode 100644 sysdeps/posix/pause.c delete mode 100644 sysdeps/posix/posix_fallocate.c delete mode 100644 sysdeps/posix/posix_fallocate64.c delete mode 100644 sysdeps/posix/pread.c delete mode 100644 sysdeps/posix/pread64.c delete mode 100644 sysdeps/posix/preadv.c delete mode 100644 sysdeps/posix/preadv2.c delete mode 100644 sysdeps/posix/preadv64.c delete mode 100644 sysdeps/posix/preadv64v2.c delete mode 100644 sysdeps/posix/preadv_common.c delete mode 100644 sysdeps/posix/profil.c delete mode 100644 sysdeps/posix/pwrite.c delete mode 100644 sysdeps/posix/pwrite64.c delete mode 100644 sysdeps/posix/pwritev.c delete mode 100644 sysdeps/posix/pwritev2.c delete mode 100644 sysdeps/posix/pwritev64.c delete mode 100644 sysdeps/posix/pwritev64v2.c delete mode 100644 sysdeps/posix/pwritev_common.c delete mode 100644 sysdeps/posix/raise.c delete mode 100644 sysdeps/posix/readdir.c delete mode 100644 sysdeps/posix/readdir_r.c delete mode 100644 sysdeps/posix/readv.c delete mode 100644 sysdeps/posix/remove.c delete mode 100644 sysdeps/posix/rename.c delete mode 100644 sysdeps/posix/rewinddir.c delete mode 100644 sysdeps/posix/seekdir.c delete mode 100644 sysdeps/posix/shm-directory.c delete mode 100644 sysdeps/posix/shm-directory.h delete mode 100644 sysdeps/posix/shm_open.c delete mode 100644 sysdeps/posix/shm_unlink.c delete mode 100644 sysdeps/posix/sigblock.c delete mode 100644 sysdeps/posix/sigignore.c delete mode 100644 sysdeps/posix/sigintr.c delete mode 100644 sysdeps/posix/signal.c delete mode 100644 sysdeps/posix/sigpause.c delete mode 100644 sysdeps/posix/sigset.c delete mode 100644 sysdeps/posix/sigsetmask.c delete mode 100644 sysdeps/posix/sigsuspend.c delete mode 100644 sysdeps/posix/sigwait.c delete mode 100644 sysdeps/posix/sleep.c delete mode 100644 sysdeps/posix/spawni.c delete mode 100644 sysdeps/posix/sprofil.c delete mode 100644 sysdeps/posix/sysconf.c delete mode 100644 sysdeps/posix/system.c delete mode 100644 sysdeps/posix/sysv_signal.c delete mode 100644 sysdeps/posix/telldir.c delete mode 100644 sysdeps/posix/tempname.c delete mode 100644 sysdeps/posix/time.c delete mode 100644 sysdeps/posix/timespec_get.c delete mode 100644 sysdeps/posix/truncate.c delete mode 100644 sysdeps/posix/ttyname.c delete mode 100644 sysdeps/posix/ttyname_r.c delete mode 100644 sysdeps/posix/ulimit.c delete mode 100644 sysdeps/posix/usleep.c delete mode 100644 sysdeps/posix/utime.c delete mode 100644 sysdeps/posix/utimes.c delete mode 100644 sysdeps/posix/wait.c delete mode 100644 sysdeps/posix/wait3.c delete mode 100644 sysdeps/posix/waitid.c delete mode 100644 sysdeps/posix/writev.c delete mode 100644 sysdeps/powerpc/Implies delete mode 100644 sysdeps/powerpc/Makefile delete mode 100644 sysdeps/powerpc/Versions delete mode 100644 sysdeps/powerpc/abort-instr.h delete mode 100644 sysdeps/powerpc/atomic-machine.h delete mode 100644 sysdeps/powerpc/bits/endian.h delete mode 100644 sysdeps/powerpc/bits/fenv.h delete mode 100644 sysdeps/powerpc/bits/fenvinline.h delete mode 100644 sysdeps/powerpc/bits/fp-fast.h delete mode 100644 sysdeps/powerpc/bits/hwcap.h delete mode 100644 sysdeps/powerpc/bits/link.h delete mode 100644 sysdeps/powerpc/bits/mathinline.h delete mode 100644 sysdeps/powerpc/bits/setjmp.h delete mode 100644 sysdeps/powerpc/dl-procinfo.c delete mode 100644 sysdeps/powerpc/dl-procinfo.h delete mode 100644 sysdeps/powerpc/dl-tls.c delete mode 100644 sysdeps/powerpc/dl-tls.h delete mode 100644 sysdeps/powerpc/ffs.c delete mode 100644 sysdeps/powerpc/fpu/Makefile delete mode 100644 sysdeps/powerpc/fpu/e_hypot.c delete mode 100644 sysdeps/powerpc/fpu/e_hypotf.c delete mode 100644 sysdeps/powerpc/fpu/e_rem_pio2f.c delete mode 100644 sysdeps/powerpc/fpu/e_sqrt.c delete mode 100644 sysdeps/powerpc/fpu/e_sqrtf.c delete mode 100644 sysdeps/powerpc/fpu/fclrexcpt.c delete mode 100644 sysdeps/powerpc/fpu/fe_mask.c delete mode 100644 sysdeps/powerpc/fpu/fe_nomask.c delete mode 100644 sysdeps/powerpc/fpu/fedisblxcpt.c delete mode 100644 sysdeps/powerpc/fpu/feenablxcpt.c delete mode 100644 sysdeps/powerpc/fpu/fegetenv.c delete mode 100644 sysdeps/powerpc/fpu/fegetexcept.c delete mode 100644 sysdeps/powerpc/fpu/fegetmode.c delete mode 100644 sysdeps/powerpc/fpu/fegetround.c delete mode 100644 sysdeps/powerpc/fpu/feholdexcpt.c delete mode 100644 sysdeps/powerpc/fpu/fenv_const.c delete mode 100644 sysdeps/powerpc/fpu/fenv_libc.h delete mode 100644 sysdeps/powerpc/fpu/fenv_private.h delete mode 100644 sysdeps/powerpc/fpu/fesetenv.c delete mode 100644 sysdeps/powerpc/fpu/fesetexcept.c delete mode 100644 sysdeps/powerpc/fpu/fesetmode.c delete mode 100644 sysdeps/powerpc/fpu/fesetround.c delete mode 100644 sysdeps/powerpc/fpu/feupdateenv.c delete mode 100644 sysdeps/powerpc/fpu/fgetexcptflg.c delete mode 100644 sysdeps/powerpc/fpu/fix-fp-int-compare-invalid.h delete mode 100644 sysdeps/powerpc/fpu/fraiseexcpt.c delete mode 100644 sysdeps/powerpc/fpu/fsetexcptflg.c delete mode 100644 sysdeps/powerpc/fpu/ftestexcept.c delete mode 100644 sysdeps/powerpc/fpu/k_cosf.c delete mode 100644 sysdeps/powerpc/fpu/k_rem_pio2f.c delete mode 100644 sysdeps/powerpc/fpu/k_sinf.c delete mode 100644 sysdeps/powerpc/fpu/libm-test-ulps delete mode 100644 sysdeps/powerpc/fpu/libm-test-ulps-name delete mode 100644 sysdeps/powerpc/fpu/math_ldbl.h delete mode 100644 sysdeps/powerpc/fpu/math_private.h delete mode 100644 sysdeps/powerpc/fpu/s_cosf.c delete mode 100644 sysdeps/powerpc/fpu/s_fabs.S delete mode 100644 sysdeps/powerpc/fpu/s_fabsf.S delete mode 100644 sysdeps/powerpc/fpu/s_float_bitwise.h delete mode 100644 sysdeps/powerpc/fpu/s_fma.S delete mode 100644 sysdeps/powerpc/fpu/s_fmaf.S delete mode 100644 sysdeps/powerpc/fpu/s_isnan.c delete mode 100644 sysdeps/powerpc/fpu/s_isnanf.S delete mode 100644 sysdeps/powerpc/fpu/s_lrintf.S delete mode 100644 sysdeps/powerpc/fpu/s_rint.c delete mode 100644 sysdeps/powerpc/fpu/s_rintf.c delete mode 100644 sysdeps/powerpc/fpu/s_sinf.c delete mode 100644 sysdeps/powerpc/fpu/t_sqrt.c delete mode 100644 sysdeps/powerpc/fpu/tst-setcontext-fpscr.c delete mode 100644 sysdeps/powerpc/fpu_control.h delete mode 100644 sysdeps/powerpc/gccframe.h delete mode 100644 sysdeps/powerpc/hwcapinfo.c delete mode 100644 sysdeps/powerpc/hwcapinfo.h delete mode 100644 sysdeps/powerpc/ifunc-sel.h delete mode 100644 sysdeps/powerpc/jmpbuf-offsets.h delete mode 100644 sysdeps/powerpc/jmpbuf-unwind.h delete mode 100644 sysdeps/powerpc/ldsodefs.h delete mode 100644 sysdeps/powerpc/libc-tls.c delete mode 100644 sysdeps/powerpc/locale-defines.sym delete mode 100644 sysdeps/powerpc/longjmp.c delete mode 100644 sysdeps/powerpc/machine-gmon.h delete mode 100644 sysdeps/powerpc/math-tests.h delete mode 100644 sysdeps/powerpc/memusage.h delete mode 100644 sysdeps/powerpc/mp_clz_tab.c delete mode 100644 sysdeps/powerpc/nofpu/Makefile delete mode 100644 sysdeps/powerpc/nofpu/Subdirs delete mode 100644 sysdeps/powerpc/nofpu/Versions delete mode 100644 sysdeps/powerpc/nofpu/atomic-feclearexcept.c delete mode 100644 sysdeps/powerpc/nofpu/atomic-feholdexcept.c delete mode 100644 sysdeps/powerpc/nofpu/atomic-feupdateenv.c delete mode 100644 sysdeps/powerpc/nofpu/fclrexcpt.c delete mode 100644 sysdeps/powerpc/nofpu/fedisblxcpt.c delete mode 100644 sysdeps/powerpc/nofpu/feenablxcpt.c delete mode 100644 sysdeps/powerpc/nofpu/fegetenv.c delete mode 100644 sysdeps/powerpc/nofpu/fegetexcept.c delete mode 100644 sysdeps/powerpc/nofpu/fegetmode.c delete mode 100644 sysdeps/powerpc/nofpu/fegetround.c delete mode 100644 sysdeps/powerpc/nofpu/feholdexcpt.c delete mode 100644 sysdeps/powerpc/nofpu/fenv_const.c delete mode 100644 sysdeps/powerpc/nofpu/fesetenv.c delete mode 100644 sysdeps/powerpc/nofpu/fesetexcept.c delete mode 100644 sysdeps/powerpc/nofpu/fesetmode.c delete mode 100644 sysdeps/powerpc/nofpu/fesetround.c delete mode 100644 sysdeps/powerpc/nofpu/feupdateenv.c delete mode 100644 sysdeps/powerpc/nofpu/fgetexcptflg.c delete mode 100644 sysdeps/powerpc/nofpu/flt-rounds.c delete mode 100644 sysdeps/powerpc/nofpu/fraiseexcpt.c delete mode 100644 sysdeps/powerpc/nofpu/fsetexcptflg.c delete mode 100644 sysdeps/powerpc/nofpu/ftestexcept.c delete mode 100644 sysdeps/powerpc/nofpu/get-rounding-mode.h delete mode 100644 sysdeps/powerpc/nofpu/libm-test-ulps delete mode 100644 sysdeps/powerpc/nofpu/libm-test-ulps-name delete mode 100644 sysdeps/powerpc/nofpu/sim-full.c delete mode 100644 sysdeps/powerpc/nofpu/soft-supp.h delete mode 100644 sysdeps/powerpc/novmx-longjmp.c delete mode 100644 sysdeps/powerpc/novmx-sigjmp.c delete mode 100644 sysdeps/powerpc/novmxsetjmp.h delete mode 100644 sysdeps/powerpc/nptl/Makefile delete mode 100644 sysdeps/powerpc/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/powerpc/nptl/elide.h delete mode 100644 sysdeps/powerpc/nptl/pthread_spin_lock.c delete mode 100644 sysdeps/powerpc/nptl/pthread_spin_trylock.c delete mode 100644 sysdeps/powerpc/nptl/pthread_spin_unlock.c delete mode 100644 sysdeps/powerpc/nptl/pthreaddef.h delete mode 100644 sysdeps/powerpc/nptl/tcb-offsets.sym delete mode 100644 sysdeps/powerpc/nptl/tls.h delete mode 100644 sysdeps/powerpc/power4/fpu/Makefile delete mode 100644 sysdeps/powerpc/power4/fpu/mpa-arch.h delete mode 100644 sysdeps/powerpc/power4/fpu/mpa.c delete mode 100644 sysdeps/powerpc/power4/wordcopy.c delete mode 100644 sysdeps/powerpc/power5+/fpu/s_modf.c delete mode 100644 sysdeps/powerpc/power5+/fpu/s_modff.c delete mode 100644 sysdeps/powerpc/power6/wcschr.c delete mode 100644 sysdeps/powerpc/power6/wcscpy.c delete mode 100644 sysdeps/powerpc/power6/wcsrchr.c delete mode 100644 sysdeps/powerpc/power6/wordcopy.c delete mode 100644 sysdeps/powerpc/power7/fpu/s_logb.c delete mode 100644 sysdeps/powerpc/power7/fpu/s_logbf.c delete mode 100644 sysdeps/powerpc/power7/fpu/s_logbl.c delete mode 100644 sysdeps/powerpc/powerpc32/405/memcmp.S delete mode 100644 sysdeps/powerpc/powerpc32/405/memcpy.S delete mode 100644 sysdeps/powerpc/powerpc32/405/memset.S delete mode 100644 sysdeps/powerpc/powerpc32/405/strcmp.S delete mode 100644 sysdeps/powerpc/powerpc32/405/strcpy.S delete mode 100644 sysdeps/powerpc/powerpc32/405/strlen.S delete mode 100644 sysdeps/powerpc/powerpc32/405/strncmp.S delete mode 100644 sysdeps/powerpc/powerpc32/440/Implies delete mode 100644 sysdeps/powerpc/powerpc32/464/Implies delete mode 100644 sysdeps/powerpc/powerpc32/476/Implies delete mode 100644 sysdeps/powerpc/powerpc32/476/memset.S delete mode 100644 sysdeps/powerpc/powerpc32/970/Implies delete mode 100644 sysdeps/powerpc/powerpc32/Implies delete mode 100644 sysdeps/powerpc/powerpc32/Makefile delete mode 100644 sysdeps/powerpc/powerpc32/Versions delete mode 100644 sysdeps/powerpc/powerpc32/__longjmp-common.S delete mode 100644 sysdeps/powerpc/powerpc32/__longjmp.S delete mode 100644 sysdeps/powerpc/powerpc32/a2/memcpy.S delete mode 100644 sysdeps/powerpc/powerpc32/add_n.S delete mode 100644 sysdeps/powerpc/powerpc32/addmul_1.S delete mode 100644 sysdeps/powerpc/powerpc32/atomic-machine.h delete mode 100644 sysdeps/powerpc/powerpc32/backtrace.c delete mode 100644 sysdeps/powerpc/powerpc32/bits/wordsize.h delete mode 100644 sysdeps/powerpc/powerpc32/bsd-_setjmp.S delete mode 100644 sysdeps/powerpc/powerpc32/bsd-setjmp.S delete mode 100644 sysdeps/powerpc/powerpc32/bzero.S delete mode 100644 sysdeps/powerpc/powerpc32/cell/memcpy.S delete mode 100644 sysdeps/powerpc/powerpc32/compat-ppc-mcount.S delete mode 100644 sysdeps/powerpc/powerpc32/configure delete mode 100644 sysdeps/powerpc/powerpc32/configure.ac delete mode 100644 sysdeps/powerpc/powerpc32/crti.S delete mode 100644 sysdeps/powerpc/powerpc32/crtn.S delete mode 100644 sysdeps/powerpc/powerpc32/dl-dtprocnum.h delete mode 100644 sysdeps/powerpc/powerpc32/dl-irel.h delete mode 100644 sysdeps/powerpc/powerpc32/dl-machine.c delete mode 100644 sysdeps/powerpc/powerpc32/dl-machine.h delete mode 100644 sysdeps/powerpc/powerpc32/dl-start.S delete mode 100644 sysdeps/powerpc/powerpc32/dl-trampoline.S delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/Makefile delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/atomic-feclearexcept.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/atomic-feholdexcept.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/atomic-feupdateenv.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fclrexcpt.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fe_note_change.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fedisblxcpt.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/feenablxcpt.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fegetenv.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fegetexcept.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fegetmode.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fegetround.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/feholdexcpt.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fenv_const.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fenv_libc.h delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fesetenv.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fesetexcept.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fesetmode.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fesetround.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fetestexceptflag.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/feupdateenv.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_from_prctl.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_from_spe.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_to_prctl.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_to_spe.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fgetexcptflg.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/flt-rounds.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fraiseexcept-soft.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fraiseexcpt.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/fsetexcptflg.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/ftestexcept.c delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/get-rounding-mode.h delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/s_fabsf.S delete mode 100644 sysdeps/powerpc/powerpc32/e500/nofpu/spe-raise.c delete mode 100644 sysdeps/powerpc/powerpc32/fpu/Makefile delete mode 100644 sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/__longjmp.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/configure delete mode 100644 sysdeps/powerpc/powerpc32/fpu/configure.ac delete mode 100644 sysdeps/powerpc/powerpc32/fpu/fix-int-fp-convert-zero.h delete mode 100644 sysdeps/powerpc/powerpc32/fpu/fprrest.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/fprsave.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_ceil.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_ceilf.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_copysign.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_copysignf.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_copysignl.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_fabs.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_fabsl.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_floor.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_floorf.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_fma.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_isnan.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_llrint.c delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_llrintf.c delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_llround.c delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_llroundf.c delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_lrint.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_lround.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_lroundf.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_nearbyint.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_nearbyintf.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_rint.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_rintf.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_round.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_roundf.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_trunc.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/s_truncf.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/setjmp-common.S delete mode 100644 sysdeps/powerpc/powerpc32/fpu/setjmp.S delete mode 100644 sysdeps/powerpc/powerpc32/gprrest0.S delete mode 100644 sysdeps/powerpc/powerpc32/gprrest1.S delete mode 100644 sysdeps/powerpc/powerpc32/gprsave0.S delete mode 100644 sysdeps/powerpc/powerpc32/gprsave1.S delete mode 100644 sysdeps/powerpc/powerpc32/libgcc-compat.S delete mode 100644 sysdeps/powerpc/powerpc32/lshift.S delete mode 100644 sysdeps/powerpc/powerpc32/mcount.c delete mode 100644 sysdeps/powerpc/powerpc32/memset.S delete mode 100644 sysdeps/powerpc/powerpc32/mul_1.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power4/Makefile delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceil-power5+.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceil-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceil.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceilf-power5+.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceilf-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceilf.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign-power6.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysignf.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floor-power5+.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floor-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floor.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floorf-power5+.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floorf-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floorf.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinf-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinf-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinf.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinff-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinff.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-power5.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-power6.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnanf-power5.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnanf-power6.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnanf.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrint-power6.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrint-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrint.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrintf-power6.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrintf-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrintf.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-power5+.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-power6.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llroundf.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-power7.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-power7.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-power7.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrint-power6x.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrint-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrint.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrintf.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-power5+.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-power6x.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lroundf.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf-power5+.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modff-power5+.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modff-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modff.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_round-power5+.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_round-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_round.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_roundf-power5+.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_roundf-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_roundf.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_trunc-power5+.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_trunc-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_trunc.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_truncf-power5+.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_truncf-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_truncf.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrt_compat-power5.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrt_compat-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrt_compat.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrtf_compat-power5.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrtf_compat-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrtf_compat.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/s_llrint.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/s_llrintf.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/s_llroundf.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/w_sqrt_compat.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf_compat.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/hp-timing.h delete mode 100644 sysdeps/powerpc/powerpc32/power4/memcmp.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/memcopy.h delete mode 100644 sysdeps/powerpc/powerpc32/power4/memcpy.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/memset.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/Makefile delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/bzero-power6.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/bzero-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/bzero-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/bzero.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/init-arch.h delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memchr-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memchr-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memchr.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memcmp.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-a2.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-cell.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-power6.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memcpy.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memmove-power7.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memmove-ppc.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memmove.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memrchr-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memrchr-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memrchr.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memset-power6.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memset-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memset-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/memset.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/rawmemchr-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/rawmemchr-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/rawmemchr.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/rtld-memcmp.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/rtld-memset.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/rtld-strchr.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/rtld-strnlen.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp_l-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp_l.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strchr-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strchr-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strchr.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strchrnul-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strchrnul-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strchrnul.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strlen-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strlen-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strlen.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strncase-power7.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strncase.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strncase_l-power7.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strncase_l.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strncmp-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strncmp-ppc32.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strncmp.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strnlen-power7.S delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strnlen-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/strnlen.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-power6.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-power7.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcschr.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power6.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power7.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr-power6.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr-power7.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wordcopy-power7.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/multiarch/wordcopy-ppc32.c delete mode 100644 sysdeps/powerpc/powerpc32/power4/strncmp.S delete mode 100644 sysdeps/powerpc/powerpc32/power5+/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power5+/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power5+/fpu/s_ceil.S delete mode 100644 sysdeps/powerpc/powerpc32/power5+/fpu/s_ceilf.S delete mode 100644 sysdeps/powerpc/powerpc32/power5+/fpu/s_floor.S delete mode 100644 sysdeps/powerpc/powerpc32/power5+/fpu/s_floorf.S delete mode 100644 sysdeps/powerpc/powerpc32/power5+/fpu/s_llround.S delete mode 100644 sysdeps/powerpc/powerpc32/power5+/fpu/s_llroundf.S delete mode 100644 sysdeps/powerpc/powerpc32/power5+/fpu/s_lround.S delete mode 100644 sysdeps/powerpc/powerpc32/power5+/fpu/s_round.S delete mode 100644 sysdeps/powerpc/powerpc32/power5+/fpu/s_roundf.S delete mode 100644 sysdeps/powerpc/powerpc32/power5+/fpu/s_trunc.S delete mode 100644 sysdeps/powerpc/powerpc32/power5+/fpu/s_truncf.S delete mode 100644 sysdeps/powerpc/powerpc32/power5+/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power5/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power5/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power5/fpu/s_isnan.S delete mode 100644 sysdeps/powerpc/powerpc32/power5/fpu/s_isnanf.S delete mode 100644 sysdeps/powerpc/powerpc32/power5/fpu/w_sqrt_compat.S delete mode 100644 sysdeps/powerpc/powerpc32/power5/fpu/w_sqrtf_compat.S delete mode 100644 sysdeps/powerpc/powerpc32/power5/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power6/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power6/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power6/fpu/s_copysign.S delete mode 100644 sysdeps/powerpc/powerpc32/power6/fpu/s_copysignf.S delete mode 100644 sysdeps/powerpc/powerpc32/power6/fpu/s_isnan.S delete mode 100644 sysdeps/powerpc/powerpc32/power6/fpu/s_isnanf.S delete mode 100644 sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S delete mode 100644 sysdeps/powerpc/powerpc32/power6/fpu/s_llrintf.S delete mode 100644 sysdeps/powerpc/powerpc32/power6/fpu/s_llround.S delete mode 100644 sysdeps/powerpc/powerpc32/power6/fpu/s_llroundf.S delete mode 100644 sysdeps/powerpc/powerpc32/power6/memcpy.S delete mode 100644 sysdeps/powerpc/powerpc32/power6/memset.S delete mode 100644 sysdeps/powerpc/powerpc32/power6/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power6x/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power6x/fpu/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power6x/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power6x/fpu/s_lrint.S delete mode 100644 sysdeps/powerpc/powerpc32/power6x/fpu/s_lround.S delete mode 100644 sysdeps/powerpc/powerpc32/power6x/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power7/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power7/Makefile delete mode 100644 sysdeps/powerpc/powerpc32/power7/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/fpu/s_finitef.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/fpu/s_isinff.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/fpu/s_isnanf.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/memchr.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/memcmp.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/memcpy.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/mempcpy.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/memrchr.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/memset.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power7/rawmemchr.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/strcasecmp.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/strcasecmp_l.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/strchr.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/strchrnul.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/strlen.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/strncmp.S delete mode 100644 sysdeps/powerpc/powerpc32/power7/strnlen.S delete mode 100644 sysdeps/powerpc/powerpc32/power8/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power8/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power8/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power9/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power9/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc32/power9/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc32/ppc-mcount.S delete mode 100644 sysdeps/powerpc/powerpc32/register-dump.h delete mode 100644 sysdeps/powerpc/powerpc32/rshift.S delete mode 100644 sysdeps/powerpc/powerpc32/rtld-memset.c delete mode 100644 sysdeps/powerpc/powerpc32/setjmp-common.S delete mode 100644 sysdeps/powerpc/powerpc32/setjmp.S delete mode 100644 sysdeps/powerpc/powerpc32/stackguard-macros.h delete mode 100644 sysdeps/powerpc/powerpc32/start.S delete mode 100644 sysdeps/powerpc/powerpc32/stpcpy.S delete mode 100644 sysdeps/powerpc/powerpc32/strchr.S delete mode 100644 sysdeps/powerpc/powerpc32/strcmp.S delete mode 100644 sysdeps/powerpc/powerpc32/strcpy.S delete mode 100644 sysdeps/powerpc/powerpc32/strlen.S delete mode 100644 sysdeps/powerpc/powerpc32/strncmp.S delete mode 100644 sysdeps/powerpc/powerpc32/sub_n.S delete mode 100644 sysdeps/powerpc/powerpc32/submul_1.S delete mode 100644 sysdeps/powerpc/powerpc32/symbol-hacks.h delete mode 100644 sysdeps/powerpc/powerpc32/sysdep.h delete mode 100644 sysdeps/powerpc/powerpc32/tls-macros.h delete mode 100644 sysdeps/powerpc/powerpc32/tst-audit.h delete mode 100644 sysdeps/powerpc/powerpc64/970/Implies delete mode 100644 sysdeps/powerpc/powerpc64/Implies delete mode 100644 sysdeps/powerpc/powerpc64/Makefile delete mode 100644 sysdeps/powerpc/powerpc64/__longjmp-common.S delete mode 100644 sysdeps/powerpc/powerpc64/__longjmp.S delete mode 100644 sysdeps/powerpc/powerpc64/a2/memcpy.S delete mode 100644 sysdeps/powerpc/powerpc64/addmul_1.S delete mode 100644 sysdeps/powerpc/powerpc64/atomic-machine.h delete mode 100644 sysdeps/powerpc/powerpc64/backtrace.c delete mode 100644 sysdeps/powerpc/powerpc64/bits/wordsize.h delete mode 100644 sysdeps/powerpc/powerpc64/bsd-_setjmp.S delete mode 100644 sysdeps/powerpc/powerpc64/bsd-setjmp.S delete mode 100644 sysdeps/powerpc/powerpc64/bzero.S delete mode 100644 sysdeps/powerpc/powerpc64/cell/memcpy.S delete mode 100644 sysdeps/powerpc/powerpc64/configure delete mode 100644 sysdeps/powerpc/powerpc64/configure.ac delete mode 100644 sysdeps/powerpc/powerpc64/crti.S delete mode 100644 sysdeps/powerpc/powerpc64/crtn.S delete mode 100644 sysdeps/powerpc/powerpc64/dl-dtprocnum.h delete mode 100644 sysdeps/powerpc/powerpc64/dl-irel.h delete mode 100644 sysdeps/powerpc/powerpc64/dl-machine.c delete mode 100644 sysdeps/powerpc/powerpc64/dl-machine.h delete mode 100644 sysdeps/powerpc/powerpc64/dl-trampoline.S delete mode 100644 sysdeps/powerpc/powerpc64/entry.h delete mode 100644 sysdeps/powerpc/powerpc64/ffsll.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil-power5+.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceilf-power5+.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceilf-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceilf.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign-power6.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysignf.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor-power5+.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_floorf-power5+.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_floorf-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_floorf.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinff-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinff.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power5.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power6.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power6x.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnanf.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint-power6x.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-power5+.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-power6x.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_lrint.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_lround.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf-power5+.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff-power5+.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_round-power5+.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_round-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_round.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_roundf-power5+.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_roundf-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_roundf.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_trunc-power5+.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_trunc-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_trunc.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_truncf-power5+.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_truncf-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_truncf.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_ceil.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_ceilf.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_copysign.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_copysignf.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_copysignl.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_fabs.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_fabsl.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_floor.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_floorf.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_fma.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_isnan.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_llrint.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_llrintf.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_llround.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_llroundf.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_lrint.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_lround.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_lroundf.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_nearbyint.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_nearbyintf.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_rint.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_rintf.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_round.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_roundf.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_trunc.S delete mode 100644 sysdeps/powerpc/powerpc64/fpu/s_truncf.S delete mode 100644 sysdeps/powerpc/powerpc64/hp-timing.h delete mode 100644 sysdeps/powerpc/powerpc64/lshift.S delete mode 100644 sysdeps/powerpc/powerpc64/memcpy.S delete mode 100644 sysdeps/powerpc/powerpc64/memset.S delete mode 100644 sysdeps/powerpc/powerpc64/mul_1.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/Makefile delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/bcopy-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/bcopy.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/bzero.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/init-arch.h delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memchr-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memchr-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memchr.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memcmp-power4.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memcmp-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memcmp-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memcmp-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memcmp.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memcpy-a2.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memcpy-cell.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memcpy-power4.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memcpy-power6.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memcpy-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memcpy-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memcpy.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memmove-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memmove-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memmove.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/mempcpy-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/mempcpy-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/mempcpy.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memrchr-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memrchr-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memrchr.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memset-power4.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memset-power6.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memset-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memset-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/memset.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/rawmemchr-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/rawmemchr-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/rtld-memset.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/rtld-strchr.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/stpcpy-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/stpcpy-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/stpcpy-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/stpcpy.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/stpncpy-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/stpncpy-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/stpncpy-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/stpncpy.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcasecmp-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcasecmp-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcasecmp-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcasestr-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcasestr-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcasestr.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcat-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcat-power8.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcat-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcat.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strchr-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strchr-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strchr-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strchr.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strchrnul-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strchrnul-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strchrnul-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strchrnul.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcmp-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcmp-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcmp-power9.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcmp-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcmp.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcpy-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcpy-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcpy-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcpy.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcspn-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcspn-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strcspn.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strlen-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strlen-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strlen-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strlen.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncase-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncase-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncase-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncase.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncase_l-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncase_l.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncat-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncat-power8.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncat-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncat.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncmp-power4.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncmp-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncmp-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncmp-power9.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncmp-ppc64.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncmp.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncpy-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncpy-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncpy-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strncpy.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strnlen-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strnlen-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strnlen-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strnlen.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strrchr-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strrchr-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strrchr-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strrchr.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strspn-power8.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strspn-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strspn.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strstr-power7.S delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strstr-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/strstr.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcschr-power6.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcschr-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcschr-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcschr.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcscpy-power6.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcscpy-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcscpy-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcscpy.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcsrchr-power6.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcsrchr-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcsrchr-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wcsrchr.c delete mode 100644 sysdeps/powerpc/powerpc64/multiarch/wordcopy-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/power4/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power4/Makefile delete mode 100644 sysdeps/powerpc/powerpc64/power4/fpu/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power4/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power4/memcmp.S delete mode 100644 sysdeps/powerpc/powerpc64/power4/memcopy.h delete mode 100644 sysdeps/powerpc/powerpc64/power4/memcpy.S delete mode 100644 sysdeps/powerpc/powerpc64/power4/memset.S delete mode 100644 sysdeps/powerpc/powerpc64/power4/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power4/strncmp.S delete mode 100644 sysdeps/powerpc/powerpc64/power5+/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power5+/fpu/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power5+/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power5+/fpu/s_ceil.S delete mode 100644 sysdeps/powerpc/powerpc64/power5+/fpu/s_ceilf.S delete mode 100644 sysdeps/powerpc/powerpc64/power5+/fpu/s_floor.S delete mode 100644 sysdeps/powerpc/powerpc64/power5+/fpu/s_floorf.S delete mode 100644 sysdeps/powerpc/powerpc64/power5+/fpu/s_llround.S delete mode 100644 sysdeps/powerpc/powerpc64/power5+/fpu/s_round.S delete mode 100644 sysdeps/powerpc/powerpc64/power5+/fpu/s_roundf.S delete mode 100644 sysdeps/powerpc/powerpc64/power5+/fpu/s_trunc.S delete mode 100644 sysdeps/powerpc/powerpc64/power5+/fpu/s_truncf.S delete mode 100644 sysdeps/powerpc/powerpc64/power5+/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power5/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power5/fpu/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power5/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power5/fpu/s_isnan.S delete mode 100644 sysdeps/powerpc/powerpc64/power5/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power6/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power6/fpu/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power6/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power6/fpu/s_copysign.S delete mode 100644 sysdeps/powerpc/powerpc64/power6/fpu/s_copysignf.S delete mode 100644 sysdeps/powerpc/powerpc64/power6/fpu/s_isnan.S delete mode 100644 sysdeps/powerpc/powerpc64/power6/memcpy.S delete mode 100644 sysdeps/powerpc/powerpc64/power6/memset.S delete mode 100644 sysdeps/powerpc/powerpc64/power6/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power6/wcschr.c delete mode 100644 sysdeps/powerpc/powerpc64/power6/wcscpy.c delete mode 100644 sysdeps/powerpc/powerpc64/power6/wcsrchr.c delete mode 100644 sysdeps/powerpc/powerpc64/power6x/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power6x/fpu/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power6x/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power6x/fpu/s_isnan.S delete mode 100644 sysdeps/powerpc/powerpc64/power6x/fpu/s_llrint.S delete mode 100644 sysdeps/powerpc/powerpc64/power6x/fpu/s_llround.S delete mode 100644 sysdeps/powerpc/powerpc64/power6x/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power7/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power7/Makefile delete mode 100644 sysdeps/powerpc/powerpc64/power7/add_n.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/bcopy.c delete mode 100644 sysdeps/powerpc/powerpc64/power7/fpu/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power7/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/fpu/s_finitef.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/fpu/s_isinff.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/fpu/s_isnan.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/fpu/s_isnanf.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c delete mode 100644 sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c delete mode 100644 sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c delete mode 100644 sysdeps/powerpc/powerpc64/power7/memchr.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/memcmp.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/memcpy.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/memmove.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/mempcpy.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/memrchr.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/memset.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power7/rawmemchr.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/stpncpy.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/strcasecmp.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/strcasecmp_l.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/strchr.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/strchrnul.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/strcmp.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/strlen.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/strncmp.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/strncpy.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/strnlen.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/strrchr.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/strstr-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/power7/strstr.S delete mode 100644 sysdeps/powerpc/powerpc64/power7/sub_n.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power8/Makefile delete mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/s_cosf.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/s_finite.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/s_finitef.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/s_isinf.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/s_isinff.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/s_isnan.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/s_isnanf.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/s_llrint.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/s_llround.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/fpu/s_sinf.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/memcmp.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/memset.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power8/stpcpy.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/stpncpy.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/strcasecmp.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/strcasestr-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/power8/strcasestr.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/strchr.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/strchrnul.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/strcmp.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/strcpy.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/strcspn.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/strlen.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/strncase.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/strncmp.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/strncpy.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/strnlen.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/strrchr.S delete mode 100644 sysdeps/powerpc/powerpc64/power8/strspn.S delete mode 100644 sysdeps/powerpc/powerpc64/power9/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power9/fpu/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power9/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power9/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64/power9/strcmp.S delete mode 100644 sysdeps/powerpc/powerpc64/power9/strncmp.S delete mode 100644 sysdeps/powerpc/powerpc64/ppc-mcount.S delete mode 100644 sysdeps/powerpc/powerpc64/register-dump.h delete mode 100644 sysdeps/powerpc/powerpc64/rtld-memset.c delete mode 100644 sysdeps/powerpc/powerpc64/setjmp-common.S delete mode 100644 sysdeps/powerpc/powerpc64/setjmp.S delete mode 100644 sysdeps/powerpc/powerpc64/stackguard-macros.h delete mode 100644 sysdeps/powerpc/powerpc64/start.S delete mode 100644 sysdeps/powerpc/powerpc64/strchr.S delete mode 100644 sysdeps/powerpc/powerpc64/strcmp.S delete mode 100644 sysdeps/powerpc/powerpc64/strlen.S delete mode 100644 sysdeps/powerpc/powerpc64/strncmp.S delete mode 100644 sysdeps/powerpc/powerpc64/submul_1.S delete mode 100644 sysdeps/powerpc/powerpc64/sysdep.h delete mode 100644 sysdeps/powerpc/powerpc64/tls-macros.h delete mode 100644 sysdeps/powerpc/powerpc64/tst-audit.h delete mode 100644 sysdeps/powerpc/powerpc64le/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/fpu/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/power7/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/power7/fpu/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/power7/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/power7/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/power8/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/power8/fpu/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/power8/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/power8/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/power9/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/power9/fpu/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/power9/fpu/multiarch/Implies delete mode 100644 sysdeps/powerpc/powerpc64le/power9/multiarch/Implies delete mode 100644 sysdeps/powerpc/preconfigure delete mode 100644 sysdeps/powerpc/rtld-global-offsets.sym delete mode 100644 sysdeps/powerpc/sched_cpucount.c delete mode 100644 sysdeps/powerpc/sigjmp.c delete mode 100644 sysdeps/powerpc/soft-fp/sfp-machine.h delete mode 100644 sysdeps/powerpc/sotruss-lib.c delete mode 100644 sysdeps/powerpc/stackinfo.h delete mode 100644 sysdeps/powerpc/sys/platform/ppc.h delete mode 100644 sysdeps/powerpc/sysdep.h delete mode 100644 sysdeps/powerpc/test-arith.c delete mode 100644 sysdeps/powerpc/test-arithf.c delete mode 100644 sysdeps/powerpc/test-get_hwcap-static.c delete mode 100644 sysdeps/powerpc/test-get_hwcap.c delete mode 100644 sysdeps/powerpc/test-gettimebase.c delete mode 100644 sysdeps/powerpc/tls-macros.h delete mode 100644 sysdeps/powerpc/tst-set_ppr.c delete mode 100644 sysdeps/powerpc/tst-stack-align.h delete mode 100644 sysdeps/powerpc/tst-tlsopt-powerpc.c delete mode 100644 sysdeps/pthread/Makeconfig delete mode 100644 sysdeps/pthread/Makefile delete mode 100644 sysdeps/pthread/Versions delete mode 100644 sysdeps/pthread/aio_cancel.c delete mode 100644 sysdeps/pthread/aio_error.c delete mode 100644 sysdeps/pthread/aio_fsync.c delete mode 100644 sysdeps/pthread/aio_misc.c delete mode 100644 sysdeps/pthread/aio_misc.h delete mode 100644 sysdeps/pthread/aio_notify.c delete mode 100644 sysdeps/pthread/aio_read.c delete mode 100644 sysdeps/pthread/aio_read64.c delete mode 100644 sysdeps/pthread/aio_suspend.c delete mode 100644 sysdeps/pthread/aio_write.c delete mode 100644 sysdeps/pthread/aio_write64.c delete mode 100644 sysdeps/pthread/allocalim.h delete mode 100644 sysdeps/pthread/bits/sigthread.h delete mode 100644 sysdeps/pthread/flockfile.c delete mode 100644 sysdeps/pthread/ftrylockfile.c delete mode 100644 sysdeps/pthread/funlockfile.c delete mode 100644 sysdeps/pthread/lio_listio.c delete mode 100644 sysdeps/pthread/lio_listio64.c delete mode 100644 sysdeps/pthread/posix-timer.h delete mode 100644 sysdeps/pthread/semaphore.h delete mode 100644 sysdeps/pthread/timer_create.c delete mode 100644 sysdeps/pthread/timer_delete.c delete mode 100644 sysdeps/pthread/timer_getoverr.c delete mode 100644 sysdeps/pthread/timer_gettime.c delete mode 100644 sysdeps/pthread/timer_routines.c delete mode 100644 sysdeps/pthread/timer_settime.c delete mode 100644 sysdeps/pthread/tst-timer.c delete mode 100644 sysdeps/s390/Implies delete mode 100644 sysdeps/s390/Makefile delete mode 100644 sysdeps/s390/Versions delete mode 100644 sysdeps/s390/abort-instr.h delete mode 100644 sysdeps/s390/asm-syntax.h delete mode 100644 sysdeps/s390/atomic-machine.h delete mode 100644 sysdeps/s390/bits/byteswap-16.h delete mode 100644 sysdeps/s390/bits/byteswap.h delete mode 100644 sysdeps/s390/bits/endian.h delete mode 100644 sysdeps/s390/bits/flt-eval-method.h delete mode 100644 sysdeps/s390/bits/link.h delete mode 100644 sysdeps/s390/bits/setjmp.h delete mode 100644 sysdeps/s390/bits/string.h delete mode 100644 sysdeps/s390/bits/xtitypes.h delete mode 100644 sysdeps/s390/configure delete mode 100644 sysdeps/s390/configure.ac delete mode 100644 sysdeps/s390/dl-irel.h delete mode 100644 sysdeps/s390/dl-procinfo.c delete mode 100644 sysdeps/s390/dl-procinfo.h delete mode 100644 sysdeps/s390/dl-tls.h delete mode 100644 sysdeps/s390/ffs.c delete mode 100644 sysdeps/s390/fix-fp-int-convert-overflow.h delete mode 100644 sysdeps/s390/fpu/bits/fenv.h delete mode 100644 sysdeps/s390/fpu/bits/mathinline.h delete mode 100644 sysdeps/s390/fpu/e_sqrt.c delete mode 100644 sysdeps/s390/fpu/e_sqrtf.c delete mode 100644 sysdeps/s390/fpu/e_sqrtl.c delete mode 100644 sysdeps/s390/fpu/fclrexcpt.c delete mode 100644 sysdeps/s390/fpu/fedisblxcpt.c delete mode 100644 sysdeps/s390/fpu/feenablxcpt.c delete mode 100644 sysdeps/s390/fpu/fegetenv.c delete mode 100644 sysdeps/s390/fpu/fegetexcept.c delete mode 100644 sysdeps/s390/fpu/fegetmode.c delete mode 100644 sysdeps/s390/fpu/fegetround.c delete mode 100644 sysdeps/s390/fpu/feholdexcpt.c delete mode 100644 sysdeps/s390/fpu/fenv_libc.h delete mode 100644 sysdeps/s390/fpu/fesetenv.c delete mode 100644 sysdeps/s390/fpu/fesetexcept.c delete mode 100644 sysdeps/s390/fpu/fesetmode.c delete mode 100644 sysdeps/s390/fpu/fesetround.c delete mode 100644 sysdeps/s390/fpu/fetestexceptflag.c delete mode 100644 sysdeps/s390/fpu/feupdateenv.c delete mode 100644 sysdeps/s390/fpu/fgetexcptflg.c delete mode 100644 sysdeps/s390/fpu/fix-fp-int-compare-invalid.h delete mode 100644 sysdeps/s390/fpu/fpu_control.h delete mode 100644 sysdeps/s390/fpu/fraiseexcpt.c delete mode 100644 sysdeps/s390/fpu/fsetexcptflg.c delete mode 100644 sysdeps/s390/fpu/ftestexcept.c delete mode 100644 sysdeps/s390/fpu/get-rounding-mode.h delete mode 100644 sysdeps/s390/fpu/libm-test-ulps delete mode 100644 sysdeps/s390/fpu/libm-test-ulps-name delete mode 100644 sysdeps/s390/fpu/s_fma.c delete mode 100644 sysdeps/s390/fpu/s_fmaf.c delete mode 100644 sysdeps/s390/gccframe.h delete mode 100644 sysdeps/s390/gconv-modules delete mode 100644 sysdeps/s390/gmp-mparam.h delete mode 100644 sysdeps/s390/iso-8859-1_cp037_z900.c delete mode 100644 sysdeps/s390/jmpbuf-offsets.h delete mode 100644 sysdeps/s390/jmpbuf-unwind.h delete mode 100644 sysdeps/s390/ldsodefs.h delete mode 100644 sysdeps/s390/libc-tls.c delete mode 100644 sysdeps/s390/linkmap.h delete mode 100644 sysdeps/s390/longjmp.c delete mode 100644 sysdeps/s390/machine-gmon.h delete mode 100644 sysdeps/s390/mempcpy.S delete mode 100644 sysdeps/s390/memusage.h delete mode 100644 sysdeps/s390/multiarch/8bit-generic.c delete mode 100644 sysdeps/s390/multiarch/Makefile delete mode 100644 sysdeps/s390/multiarch/gconv_simple.c delete mode 100644 sysdeps/s390/multiarch/gen-8bit.sh delete mode 100644 sysdeps/s390/multiarch/iconv/skeleton.c delete mode 100644 sysdeps/s390/multiarch/ifunc-impl-list.c delete mode 100644 sysdeps/s390/multiarch/ifunc-resolve.h delete mode 100644 sysdeps/s390/multiarch/memccpy-c.c delete mode 100644 sysdeps/s390/multiarch/memccpy-vx.S delete mode 100644 sysdeps/s390/multiarch/memccpy.c delete mode 100644 sysdeps/s390/multiarch/memchr-vx.S delete mode 100644 sysdeps/s390/multiarch/memchr.c delete mode 100644 sysdeps/s390/multiarch/mempcpy.c delete mode 100644 sysdeps/s390/multiarch/memrchr-c.c delete mode 100644 sysdeps/s390/multiarch/memrchr-vx.S delete mode 100644 sysdeps/s390/multiarch/memrchr.c delete mode 100644 sysdeps/s390/multiarch/rawmemchr-c.c delete mode 100644 sysdeps/s390/multiarch/rawmemchr-vx.S delete mode 100644 sysdeps/s390/multiarch/rawmemchr.c delete mode 100644 sysdeps/s390/multiarch/stpcpy-c.c delete mode 100644 sysdeps/s390/multiarch/stpcpy-vx.S delete mode 100644 sysdeps/s390/multiarch/stpcpy.c delete mode 100644 sysdeps/s390/multiarch/stpncpy-c.c delete mode 100644 sysdeps/s390/multiarch/stpncpy-vx.S delete mode 100644 sysdeps/s390/multiarch/stpncpy.c delete mode 100644 sysdeps/s390/multiarch/strcat-c.c delete mode 100644 sysdeps/s390/multiarch/strcat-vx.S delete mode 100644 sysdeps/s390/multiarch/strcat.c delete mode 100644 sysdeps/s390/multiarch/strchr-c.c delete mode 100644 sysdeps/s390/multiarch/strchr-vx.S delete mode 100644 sysdeps/s390/multiarch/strchr.c delete mode 100644 sysdeps/s390/multiarch/strchrnul-c.c delete mode 100644 sysdeps/s390/multiarch/strchrnul-vx.S delete mode 100644 sysdeps/s390/multiarch/strchrnul.c delete mode 100644 sysdeps/s390/multiarch/strcmp-vx.S delete mode 100644 sysdeps/s390/multiarch/strcmp.c delete mode 100644 sysdeps/s390/multiarch/strcpy-vx.S delete mode 100644 sysdeps/s390/multiarch/strcpy.c delete mode 100644 sysdeps/s390/multiarch/strcspn-c.c delete mode 100644 sysdeps/s390/multiarch/strcspn-vx.S delete mode 100644 sysdeps/s390/multiarch/strcspn.c delete mode 100644 sysdeps/s390/multiarch/strlen-c.c delete mode 100644 sysdeps/s390/multiarch/strlen-vx.S delete mode 100644 sysdeps/s390/multiarch/strlen.c delete mode 100644 sysdeps/s390/multiarch/strncat-c.c delete mode 100644 sysdeps/s390/multiarch/strncat-vx.S delete mode 100644 sysdeps/s390/multiarch/strncat.c delete mode 100644 sysdeps/s390/multiarch/strncmp-c.c delete mode 100644 sysdeps/s390/multiarch/strncmp-vx.S delete mode 100644 sysdeps/s390/multiarch/strncmp.c delete mode 100644 sysdeps/s390/multiarch/strncpy-vx.S delete mode 100644 sysdeps/s390/multiarch/strncpy.c delete mode 100644 sysdeps/s390/multiarch/strnlen-c.c delete mode 100644 sysdeps/s390/multiarch/strnlen-vx.S delete mode 100644 sysdeps/s390/multiarch/strnlen.c delete mode 100644 sysdeps/s390/multiarch/strpbrk-c.c delete mode 100644 sysdeps/s390/multiarch/strpbrk-vx.S delete mode 100644 sysdeps/s390/multiarch/strpbrk.c delete mode 100644 sysdeps/s390/multiarch/strrchr-c.c delete mode 100644 sysdeps/s390/multiarch/strrchr-vx.S delete mode 100644 sysdeps/s390/multiarch/strrchr.c delete mode 100644 sysdeps/s390/multiarch/strspn-c.c delete mode 100644 sysdeps/s390/multiarch/strspn-vx.S delete mode 100644 sysdeps/s390/multiarch/strspn.c delete mode 100644 sysdeps/s390/multiarch/utf16-utf32-z9.c delete mode 100644 sysdeps/s390/multiarch/utf8-utf16-z9.c delete mode 100644 sysdeps/s390/multiarch/utf8-utf32-z9.c delete mode 100644 sysdeps/s390/multiarch/wcpcpy-c.c delete mode 100644 sysdeps/s390/multiarch/wcpcpy-vx.S delete mode 100644 sysdeps/s390/multiarch/wcpcpy.c delete mode 100644 sysdeps/s390/multiarch/wcpncpy-c.c delete mode 100644 sysdeps/s390/multiarch/wcpncpy-vx.S delete mode 100644 sysdeps/s390/multiarch/wcpncpy.c delete mode 100644 sysdeps/s390/multiarch/wcscat-c.c delete mode 100644 sysdeps/s390/multiarch/wcscat-vx.S delete mode 100644 sysdeps/s390/multiarch/wcscat.c delete mode 100644 sysdeps/s390/multiarch/wcschr-c.c delete mode 100644 sysdeps/s390/multiarch/wcschr-vx.S delete mode 100644 sysdeps/s390/multiarch/wcschr.c delete mode 100644 sysdeps/s390/multiarch/wcschrnul-c.c delete mode 100644 sysdeps/s390/multiarch/wcschrnul-vx.S delete mode 100644 sysdeps/s390/multiarch/wcschrnul.c delete mode 100644 sysdeps/s390/multiarch/wcscmp-c.c delete mode 100644 sysdeps/s390/multiarch/wcscmp-vx.S delete mode 100644 sysdeps/s390/multiarch/wcscmp.c delete mode 100644 sysdeps/s390/multiarch/wcscpy-c.c delete mode 100644 sysdeps/s390/multiarch/wcscpy-vx.S delete mode 100644 sysdeps/s390/multiarch/wcscpy.c delete mode 100644 sysdeps/s390/multiarch/wcscspn-c.c delete mode 100644 sysdeps/s390/multiarch/wcscspn-vx.S delete mode 100644 sysdeps/s390/multiarch/wcscspn.c delete mode 100644 sysdeps/s390/multiarch/wcslen-c.c delete mode 100644 sysdeps/s390/multiarch/wcslen-vx.S delete mode 100644 sysdeps/s390/multiarch/wcslen.c delete mode 100644 sysdeps/s390/multiarch/wcsncat-c.c delete mode 100644 sysdeps/s390/multiarch/wcsncat-vx.S delete mode 100644 sysdeps/s390/multiarch/wcsncat.c delete mode 100644 sysdeps/s390/multiarch/wcsncmp-c.c delete mode 100644 sysdeps/s390/multiarch/wcsncmp-vx.S delete mode 100644 sysdeps/s390/multiarch/wcsncmp.c delete mode 100644 sysdeps/s390/multiarch/wcsncpy-c.c delete mode 100644 sysdeps/s390/multiarch/wcsncpy-vx.S delete mode 100644 sysdeps/s390/multiarch/wcsncpy.c delete mode 100644 sysdeps/s390/multiarch/wcsnlen-c.c delete mode 100644 sysdeps/s390/multiarch/wcsnlen-vx.S delete mode 100644 sysdeps/s390/multiarch/wcsnlen.c delete mode 100644 sysdeps/s390/multiarch/wcspbrk-c.c delete mode 100644 sysdeps/s390/multiarch/wcspbrk-vx.S delete mode 100644 sysdeps/s390/multiarch/wcspbrk.c delete mode 100644 sysdeps/s390/multiarch/wcsrchr-c.c delete mode 100644 sysdeps/s390/multiarch/wcsrchr-vx.S delete mode 100644 sysdeps/s390/multiarch/wcsrchr.c delete mode 100644 sysdeps/s390/multiarch/wcsspn-c.c delete mode 100644 sysdeps/s390/multiarch/wcsspn-vx.S delete mode 100644 sysdeps/s390/multiarch/wcsspn.c delete mode 100644 sysdeps/s390/multiarch/wmemchr-c.c delete mode 100644 sysdeps/s390/multiarch/wmemchr-vx.S delete mode 100644 sysdeps/s390/multiarch/wmemchr.c delete mode 100644 sysdeps/s390/multiarch/wmemcmp-c.c delete mode 100644 sysdeps/s390/multiarch/wmemcmp-vx.S delete mode 100644 sysdeps/s390/multiarch/wmemcmp.c delete mode 100644 sysdeps/s390/multiarch/wmemset-c.c delete mode 100644 sysdeps/s390/multiarch/wmemset-vx.S delete mode 100644 sysdeps/s390/multiarch/wmemset.c delete mode 100644 sysdeps/s390/nptl/Makefile delete mode 100644 sysdeps/s390/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/s390/nptl/bits/semaphore.h delete mode 100644 sysdeps/s390/nptl/pthreaddef.h delete mode 100644 sysdeps/s390/nptl/tcb-offsets.sym delete mode 100644 sysdeps/s390/nptl/tls.h delete mode 100644 sysdeps/s390/preconfigure delete mode 100644 sysdeps/s390/s390-32/Implies delete mode 100644 sysdeps/s390/s390-32/Makefile delete mode 100644 sysdeps/s390/s390-32/Versions delete mode 100644 sysdeps/s390/s390-32/__longjmp.c delete mode 100644 sysdeps/s390/s390-32/add_n.S delete mode 100644 sysdeps/s390/s390-32/addmul_1.S delete mode 100644 sysdeps/s390/s390-32/backtrace.c delete mode 100644 sysdeps/s390/s390-32/bcopy.S delete mode 100644 sysdeps/s390/s390-32/bits/wordsize.h delete mode 100644 sysdeps/s390/s390-32/bsd-_setjmp.S delete mode 100644 sysdeps/s390/s390-32/bsd-setjmp.S delete mode 100644 sysdeps/s390/s390-32/bzero.S delete mode 100644 sysdeps/s390/s390-32/crti.S delete mode 100644 sysdeps/s390/s390-32/crtn.S delete mode 100644 sysdeps/s390/s390-32/dl-machine.h delete mode 100644 sysdeps/s390/s390-32/dl-sysdep.h delete mode 100644 sysdeps/s390/s390-32/dl-trampoline.S delete mode 100644 sysdeps/s390/s390-32/dl-trampoline.h delete mode 100644 sysdeps/s390/s390-32/memchr.S delete mode 100644 sysdeps/s390/s390-32/memcmp.S delete mode 100644 sysdeps/s390/s390-32/memcpy.S delete mode 100644 sysdeps/s390/s390-32/memset.S delete mode 100644 sysdeps/s390/s390-32/mul_1.S delete mode 100644 sysdeps/s390/s390-32/multiarch/Makefile delete mode 100644 sysdeps/s390/s390-32/multiarch/memchr.c delete mode 100644 sysdeps/s390/s390-32/multiarch/memcmp-s390.S delete mode 100644 sysdeps/s390/s390-32/multiarch/memcmp.c delete mode 100644 sysdeps/s390/s390-32/multiarch/memcpy-s390.S delete mode 100644 sysdeps/s390/s390-32/multiarch/memcpy.c delete mode 100644 sysdeps/s390/s390-32/multiarch/memset-s390.S delete mode 100644 sysdeps/s390/s390-32/multiarch/memset.c delete mode 100644 sysdeps/s390/s390-32/multiarch/strcmp.c delete mode 100644 sysdeps/s390/s390-32/multiarch/strcpy.c delete mode 100644 sysdeps/s390/s390-32/multiarch/strncpy.c delete mode 100644 sysdeps/s390/s390-32/s390-mcount.S delete mode 100644 sysdeps/s390/s390-32/setjmp.S delete mode 100644 sysdeps/s390/s390-32/stackguard-macros.h delete mode 100644 sysdeps/s390/s390-32/start.S delete mode 100644 sysdeps/s390/s390-32/strcmp.S delete mode 100644 sysdeps/s390/s390-32/strcpy.S delete mode 100644 sysdeps/s390/s390-32/strncpy.S delete mode 100644 sysdeps/s390/s390-32/sub_n.S delete mode 100644 sysdeps/s390/s390-32/symbol-hacks.h delete mode 100644 sysdeps/s390/s390-32/sysdep.h delete mode 100644 sysdeps/s390/s390-32/tls-macros.h delete mode 100644 sysdeps/s390/s390-32/tst-audit.h delete mode 100644 sysdeps/s390/s390-64/Implies delete mode 100644 sysdeps/s390/s390-64/Makefile delete mode 100644 sysdeps/s390/s390-64/__longjmp.c delete mode 100644 sysdeps/s390/s390-64/add_n.S delete mode 100644 sysdeps/s390/s390-64/backtrace.c delete mode 100644 sysdeps/s390/s390-64/bcopy.S delete mode 100644 sysdeps/s390/s390-64/bits/wordsize.h delete mode 100644 sysdeps/s390/s390-64/bsd-_setjmp.S delete mode 100644 sysdeps/s390/s390-64/bsd-setjmp.S delete mode 100644 sysdeps/s390/s390-64/bzero.S delete mode 100644 sysdeps/s390/s390-64/crti.S delete mode 100644 sysdeps/s390/s390-64/crtn.S delete mode 100644 sysdeps/s390/s390-64/dl-machine.h delete mode 100644 sysdeps/s390/s390-64/dl-trampoline.S delete mode 100644 sysdeps/s390/s390-64/dl-trampoline.h delete mode 100644 sysdeps/s390/s390-64/memchr.S delete mode 100644 sysdeps/s390/s390-64/memcmp.S delete mode 100644 sysdeps/s390/s390-64/memcpy.S delete mode 100644 sysdeps/s390/s390-64/memset.S delete mode 100644 sysdeps/s390/s390-64/multiarch/Makefile delete mode 100644 sysdeps/s390/s390-64/multiarch/memchr.c delete mode 100644 sysdeps/s390/s390-64/multiarch/memcmp-s390x.S delete mode 100644 sysdeps/s390/s390-64/multiarch/memcmp.c delete mode 100644 sysdeps/s390/s390-64/multiarch/memcpy-s390x.S delete mode 100644 sysdeps/s390/s390-64/multiarch/memcpy.c delete mode 100644 sysdeps/s390/s390-64/multiarch/memset-s390x.S delete mode 100644 sysdeps/s390/s390-64/multiarch/memset.c delete mode 100644 sysdeps/s390/s390-64/multiarch/strcmp.c delete mode 100644 sysdeps/s390/s390-64/multiarch/strcpy.c delete mode 100644 sysdeps/s390/s390-64/multiarch/strncpy.c delete mode 100644 sysdeps/s390/s390-64/s390x-mcount.S delete mode 100644 sysdeps/s390/s390-64/setjmp.S delete mode 100644 sysdeps/s390/s390-64/stackguard-macros.h delete mode 100644 sysdeps/s390/s390-64/start.S delete mode 100644 sysdeps/s390/s390-64/strcmp.S delete mode 100644 sysdeps/s390/s390-64/strcpy.S delete mode 100644 sysdeps/s390/s390-64/strncpy.S delete mode 100644 sysdeps/s390/s390-64/sub_n.S delete mode 100644 sysdeps/s390/s390-64/sysdep.h delete mode 100644 sysdeps/s390/s390-64/tls-macros.h delete mode 100644 sysdeps/s390/s390-64/tst-audit.h delete mode 100644 sysdeps/s390/sotruss-lib.c delete mode 100644 sysdeps/s390/stackinfo.h delete mode 100644 sysdeps/s390/string_private.h delete mode 100644 sysdeps/s390/utf16-utf32-z9.c delete mode 100644 sysdeps/s390/utf8-utf16-z9.c delete mode 100644 sysdeps/s390/utf8-utf32-z9.c delete mode 100644 sysdeps/sh/Implies delete mode 100644 sysdeps/sh/Makefile delete mode 100644 sysdeps/sh/____longjmp_chk.S delete mode 100644 sysdeps/sh/_mcount.S delete mode 100644 sysdeps/sh/abort-instr.h delete mode 100644 sysdeps/sh/backtrace.c delete mode 100644 sysdeps/sh/bits/endian.h delete mode 100644 sysdeps/sh/bits/fenv.h delete mode 100644 sysdeps/sh/bits/huge_val.h delete mode 100644 sysdeps/sh/bits/link.h delete mode 100644 sysdeps/sh/bits/setjmp.h delete mode 100644 sysdeps/sh/bsd-_setjmp.S delete mode 100644 sysdeps/sh/bsd-setjmp.S delete mode 100644 sysdeps/sh/configure delete mode 100644 sysdeps/sh/configure.ac delete mode 100644 sysdeps/sh/crti.S delete mode 100644 sysdeps/sh/crtn.S delete mode 100644 sysdeps/sh/dl-machine.h delete mode 100644 sysdeps/sh/dl-tls.h delete mode 100644 sysdeps/sh/dl-trampoline.S delete mode 100644 sysdeps/sh/fpu_control.h delete mode 100644 sysdeps/sh/gccframe.h delete mode 100644 sysdeps/sh/gmp-mparam.h delete mode 100644 sysdeps/sh/jmpbuf-offsets.h delete mode 100644 sysdeps/sh/jmpbuf-unwind.h delete mode 100644 sysdeps/sh/ldsodefs.h delete mode 100644 sysdeps/sh/libc-tls.c delete mode 100644 sysdeps/sh/libm-test-ulps delete mode 100644 sysdeps/sh/libm-test-ulps-name delete mode 100644 sysdeps/sh/linkmap.h delete mode 100644 sysdeps/sh/machine-gmon.h delete mode 100644 sysdeps/sh/math_private.h delete mode 100644 sysdeps/sh/memcpy.S delete mode 100644 sysdeps/sh/memset.S delete mode 100644 sysdeps/sh/memusage.h delete mode 100644 sysdeps/sh/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/sh/nptl/bits/semaphore.h delete mode 100644 sysdeps/sh/nptl/pthread_spin_init.c delete mode 100644 sysdeps/sh/nptl/pthread_spin_lock.c delete mode 100644 sysdeps/sh/nptl/pthread_spin_trylock.S delete mode 100644 sysdeps/sh/nptl/pthread_spin_unlock.S delete mode 100644 sysdeps/sh/nptl/pthreaddef.h delete mode 100644 sysdeps/sh/nptl/tcb-offsets.sym delete mode 100644 sysdeps/sh/nptl/tls.h delete mode 100644 sysdeps/sh/preconfigure delete mode 100644 sysdeps/sh/s_fma.c delete mode 100644 sysdeps/sh/s_fmaf.c delete mode 100644 sysdeps/sh/sh3/__longjmp.S delete mode 100644 sysdeps/sh/sh3/setjmp.S delete mode 100644 sysdeps/sh/sh4/Makefile delete mode 100644 sysdeps/sh/sh4/Versions delete mode 100644 sysdeps/sh/sh4/__longjmp.S delete mode 100644 sysdeps/sh/sh4/dl-trampoline.S delete mode 100644 sysdeps/sh/sh4/fpu/fclrexcpt.c delete mode 100644 sysdeps/sh/sh4/fpu/fedisblxcpt.c delete mode 100644 sysdeps/sh/sh4/fpu/feenablxcpt.c delete mode 100644 sysdeps/sh/sh4/fpu/fegetenv.c delete mode 100644 sysdeps/sh/sh4/fpu/fegetexcept.c delete mode 100644 sysdeps/sh/sh4/fpu/fegetmode.c delete mode 100644 sysdeps/sh/sh4/fpu/fegetround.c delete mode 100644 sysdeps/sh/sh4/fpu/feholdexcpt.c delete mode 100644 sysdeps/sh/sh4/fpu/fesetenv.c delete mode 100644 sysdeps/sh/sh4/fpu/fesetexcept.c delete mode 100644 sysdeps/sh/sh4/fpu/fesetmode.c delete mode 100644 sysdeps/sh/sh4/fpu/fesetround.c delete mode 100644 sysdeps/sh/sh4/fpu/feupdateenv.c delete mode 100644 sysdeps/sh/sh4/fpu/fgetexcptflg.c delete mode 100644 sysdeps/sh/sh4/fpu/fraiseexcpt.c delete mode 100644 sysdeps/sh/sh4/fpu/fsetexcptflg.c delete mode 100644 sysdeps/sh/sh4/fpu/ftestexcept.c delete mode 100644 sysdeps/sh/sh4/setjmp.S delete mode 100644 sysdeps/sh/soft-fp/sfp-machine.h delete mode 100644 sysdeps/sh/sotruss-lib.c delete mode 100644 sysdeps/sh/stackguard-macros.h delete mode 100644 sysdeps/sh/stackinfo.h delete mode 100644 sysdeps/sh/start.S delete mode 100644 sysdeps/sh/strlen.S delete mode 100644 sysdeps/sh/sysdep.h delete mode 100644 sysdeps/sh/tininess.h delete mode 100644 sysdeps/sh/tls-macros.h delete mode 100644 sysdeps/sh/tst-audit.h delete mode 100644 sysdeps/sparc/Makefile delete mode 100644 sysdeps/sparc/Subdirs delete mode 100644 sysdeps/sparc/abort-instr.h delete mode 100644 sysdeps/sparc/backtrace.c delete mode 100644 sysdeps/sparc/bits/endian.h delete mode 100644 sysdeps/sparc/bits/huge_vall.h delete mode 100644 sysdeps/sparc/bits/hwcap.h delete mode 100644 sysdeps/sparc/bits/link.h delete mode 100644 sysdeps/sparc/bits/string.h delete mode 100644 sysdeps/sparc/configure delete mode 100644 sysdeps/sparc/configure.ac delete mode 100644 sysdeps/sparc/crti.S delete mode 100644 sysdeps/sparc/crtn.S delete mode 100644 sysdeps/sparc/dl-dtprocnum.h delete mode 100644 sysdeps/sparc/dl-procinfo.c delete mode 100644 sysdeps/sparc/dl-procinfo.h delete mode 100644 sysdeps/sparc/dl-sysdep.h delete mode 100644 sysdeps/sparc/dl-tls.h delete mode 100644 sysdeps/sparc/fpu/bits/fenv.h delete mode 100644 sysdeps/sparc/fpu/bits/mathinline.h delete mode 100644 sysdeps/sparc/fpu/fclrexcpt.c delete mode 100644 sysdeps/sparc/fpu/fedisblxcpt.c delete mode 100644 sysdeps/sparc/fpu/feenablxcpt.c delete mode 100644 sysdeps/sparc/fpu/fegetenv.c delete mode 100644 sysdeps/sparc/fpu/fegetexcept.c delete mode 100644 sysdeps/sparc/fpu/fegetmode.c delete mode 100644 sysdeps/sparc/fpu/fegetround.c delete mode 100644 sysdeps/sparc/fpu/feholdexcpt.c delete mode 100644 sysdeps/sparc/fpu/fenv_private.h delete mode 100644 sysdeps/sparc/fpu/fesetenv.c delete mode 100644 sysdeps/sparc/fpu/fesetexcept.c delete mode 100644 sysdeps/sparc/fpu/fesetmode.c delete mode 100644 sysdeps/sparc/fpu/fesetround.c delete mode 100644 sysdeps/sparc/fpu/feupdateenv.c delete mode 100644 sysdeps/sparc/fpu/fgetexcptflg.c delete mode 100644 sysdeps/sparc/fpu/fpu_control.h delete mode 100644 sysdeps/sparc/fpu/fraiseexcpt.c delete mode 100644 sysdeps/sparc/fpu/fsetexcptflg.c delete mode 100644 sysdeps/sparc/fpu/ftestexcept.c delete mode 100644 sysdeps/sparc/fpu/libm-test-ulps delete mode 100644 sysdeps/sparc/fpu/libm-test-ulps-name delete mode 100644 sysdeps/sparc/fpu/math_private.h delete mode 100644 sysdeps/sparc/gccframe.h delete mode 100644 sysdeps/sparc/ldsodefs.h delete mode 100644 sysdeps/sparc/machine-gmon.h delete mode 100644 sysdeps/sparc/mempcpy.S delete mode 100644 sysdeps/sparc/memusage.h delete mode 100644 sysdeps/sparc/nptl/Makefile delete mode 100644 sysdeps/sparc/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/sparc/nptl/bits/semaphore.h delete mode 100644 sysdeps/sparc/nptl/sparc-nptl.h delete mode 100644 sysdeps/sparc/nptl/tcb-offsets.sym delete mode 100644 sysdeps/sparc/nptl/tls.h delete mode 100644 sysdeps/sparc/preconfigure delete mode 100644 sysdeps/sparc/sparc-ifunc.h delete mode 100644 sysdeps/sparc/sparc-mcount.S delete mode 100644 sysdeps/sparc/sparc32/Implies delete mode 100644 sysdeps/sparc/sparc32/Makefile delete mode 100644 sysdeps/sparc/sparc32/Versions delete mode 100644 sysdeps/sparc/sparc32/__longjmp.S delete mode 100644 sysdeps/sparc/sparc32/add_n.S delete mode 100644 sysdeps/sparc/sparc32/addmul_1.S delete mode 100644 sysdeps/sparc/sparc32/alloca.S delete mode 100644 sysdeps/sparc/sparc32/atomic-machine.h delete mode 100644 sysdeps/sparc/sparc32/backtrace.h delete mode 100644 sysdeps/sparc/sparc32/bits/setjmp.h delete mode 100644 sysdeps/sparc/sparc32/bits/wordsize.h delete mode 100644 sysdeps/sparc/sparc32/bsd-_setjmp.S delete mode 100644 sysdeps/sparc/sparc32/bsd-setjmp.S delete mode 100644 sysdeps/sparc/sparc32/bzero.c delete mode 100644 sysdeps/sparc/sparc32/divrem.m4 delete mode 100644 sysdeps/sparc/sparc32/dl-irel.h delete mode 100644 sysdeps/sparc/sparc32/dl-machine.h delete mode 100644 sysdeps/sparc/sparc32/dl-plt.h delete mode 100644 sysdeps/sparc/sparc32/dl-trampoline.S delete mode 100644 sysdeps/sparc/sparc32/dotmul.S delete mode 100644 sysdeps/sparc/sparc32/e_sqrt.c delete mode 100644 sysdeps/sparc/sparc32/fpu/e_sqrtl.c delete mode 100644 sysdeps/sparc/sparc32/fpu/s_copysign.S delete mode 100644 sysdeps/sparc/sparc32/fpu/s_copysignf.S delete mode 100644 sysdeps/sparc/sparc32/fpu/s_fabs.S delete mode 100644 sysdeps/sparc/sparc32/fpu/s_fabsf.S delete mode 100644 sysdeps/sparc/sparc32/fpu/s_fabsl.c delete mode 100644 sysdeps/sparc/sparc32/fpu/s_fma.c delete mode 100644 sysdeps/sparc/sparc32/fpu/s_signbit.S delete mode 100644 sysdeps/sparc/sparc32/fpu/s_signbitf.S delete mode 100644 sysdeps/sparc/sparc32/fpu/s_signbitl.S delete mode 100644 sysdeps/sparc/sparc32/fpu/w_sqrt_compat.S delete mode 100644 sysdeps/sparc/sparc32/fpu/w_sqrtf_compat.S delete mode 100644 sysdeps/sparc/sparc32/ieee754.h delete mode 100644 sysdeps/sparc/sparc32/jmpbuf-offsets.h delete mode 100644 sysdeps/sparc/sparc32/jmpbuf-unwind.h delete mode 100644 sysdeps/sparc/sparc32/lll_timedlock_wait.c delete mode 100644 sysdeps/sparc/sparc32/lll_timedwait_tid.c delete mode 100644 sysdeps/sparc/sparc32/lowlevellock.c delete mode 100644 sysdeps/sparc/sparc32/lshift.S delete mode 100644 sysdeps/sparc/sparc32/memchr.S delete mode 100644 sysdeps/sparc/sparc32/memcpy.S delete mode 100644 sysdeps/sparc/sparc32/memset.S delete mode 100644 sysdeps/sparc/sparc32/mul_1.S delete mode 100644 sysdeps/sparc/sparc32/pthread_barrier_wait.c delete mode 100644 sysdeps/sparc/sparc32/pthread_spin_lock.S delete mode 100644 sysdeps/sparc/sparc32/pthread_spin_trylock.S delete mode 100644 sysdeps/sparc/sparc32/pthreaddef.h delete mode 100644 sysdeps/sparc/sparc32/rem.S delete mode 100644 sysdeps/sparc/sparc32/rshift.S delete mode 100644 sysdeps/sparc/sparc32/sdiv.S delete mode 100644 sysdeps/sparc/sparc32/sem_post.c delete mode 100644 sysdeps/sparc/sparc32/sem_waitcommon.c delete mode 100644 sysdeps/sparc/sparc32/setjmp.S delete mode 100644 sysdeps/sparc/sparc32/soft-fp/Makefile delete mode 100644 sysdeps/sparc/sparc32/soft-fp/Versions delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_add.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_cmp.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_cmpe.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_div.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_dtoq.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_feq.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_fge.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_fgt.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_fle.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_flt.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_fne.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_itoq.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_lltoq.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_mul.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_neg.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_qtod.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_qtoi.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_qtoll.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_qtos.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_qtou.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_qtoull.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_sqrt.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_stoq.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_sub.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_util.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/q_utoq.c delete mode 100644 sysdeps/sparc/sparc32/soft-fp/sfp-machine.h delete mode 100644 sysdeps/sparc/sparc32/sparcv8/Makefile delete mode 100644 sysdeps/sparc/sparc32/sparcv8/addmul_1.S delete mode 100644 sysdeps/sparc/sparc32/sparcv8/dotmul.S delete mode 100644 sysdeps/sparc/sparc32/sparcv8/mul_1.S delete mode 100644 sysdeps/sparc/sparc32/sparcv8/rem.S delete mode 100644 sysdeps/sparc/sparc32/sparcv8/sdiv.S delete mode 100644 sysdeps/sparc/sparc32/sparcv8/submul_1.S delete mode 100644 sysdeps/sparc/sparc32/sparcv8/udiv.S delete mode 100644 sysdeps/sparc/sparc32/sparcv8/umul.S delete mode 100644 sysdeps/sparc/sparc32/sparcv8/urem.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/Makefile delete mode 100644 sysdeps/sparc/sparc32/sparcv9/addmul_1.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/atomic-machine.h delete mode 100644 sysdeps/sparc/sparc32/sparcv9/backtrace.h delete mode 100644 sysdeps/sparc/sparc32/sparcv9/bzero.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/cpu_relax.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/dotmul.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign-vis3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf-vis3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs-vis3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf-vis3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma-vis3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf-vis3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint-vis3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf-vis3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyint-vis3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyint.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyintf-vis3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyintf.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint-vis3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf-vis3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt_compat-vis3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt_compat.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf_compat-vis3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf_compat.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/s_fabs.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/s_llrint.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/s_llrintf.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/s_lrintf.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/s_nearbyint.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/s_nearbyintf.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/s_rint.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/s_rintf.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt_compat.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf_compat.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/hp-timing.h delete mode 100644 sysdeps/sparc/sparc32/sparcv9/memchr.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/memcmp.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/memcpy.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/memset.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/mul_1.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara1.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara2.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara4.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-ultra3.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/memset-niagara1.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/memset-niagara4.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/memset.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memset.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/pthread_barrier_wait.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/pthread_spin_init.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/pthread_spin_lock.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/pthread_spin_trylock.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/pthread_spin_unlock.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/rawmemchr.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/rem.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/rtld-memset.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/sdiv.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/sem_post.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/sem_waitcommon.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/stpcpy.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/stpncpy.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/strcat.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/strchr.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/strcmp.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/strcpy.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/strcspn.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/strlen.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/strncmp.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/strncpy.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/strpbrk.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/strrchr.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/strspn.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/submul_1.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/udiv.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/umul.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/urem.S delete mode 100644 sysdeps/sparc/sparc32/stackguard-macros.h delete mode 100644 sysdeps/sparc/sparc32/start.S delete mode 100644 sysdeps/sparc/sparc32/stpcpy.S delete mode 100644 sysdeps/sparc/sparc32/strcat.S delete mode 100644 sysdeps/sparc/sparc32/strchr.S delete mode 100644 sysdeps/sparc/sparc32/strcmp.S delete mode 100644 sysdeps/sparc/sparc32/strcpy.S delete mode 100644 sysdeps/sparc/sparc32/strlen.S delete mode 100644 sysdeps/sparc/sparc32/strrchr.c delete mode 100644 sysdeps/sparc/sparc32/sub_n.S delete mode 100644 sysdeps/sparc/sparc32/submul_1.S delete mode 100644 sysdeps/sparc/sparc32/tls-macros.h delete mode 100644 sysdeps/sparc/sparc32/tst-audit.h delete mode 100644 sysdeps/sparc/sparc32/udiv.S delete mode 100644 sysdeps/sparc/sparc32/umul.S delete mode 100644 sysdeps/sparc/sparc32/urem.S delete mode 100644 sysdeps/sparc/sparc64/Implies delete mode 100644 sysdeps/sparc/sparc64/Makefile delete mode 100644 sysdeps/sparc/sparc64/Versions delete mode 100644 sysdeps/sparc/sparc64/add_n.S delete mode 100644 sysdeps/sparc/sparc64/addmul_1.S delete mode 100644 sysdeps/sparc/sparc64/align-cpy.S delete mode 100644 sysdeps/sparc/sparc64/atomic-machine.h delete mode 100644 sysdeps/sparc/sparc64/backtrace.h delete mode 100644 sysdeps/sparc/sparc64/bits/wordsize.h delete mode 100644 sysdeps/sparc/sparc64/bzero.c delete mode 100644 sysdeps/sparc/sparc64/cpu_relax.S delete mode 100644 sysdeps/sparc/sparc64/dl-irel.h delete mode 100644 sysdeps/sparc/sparc64/dl-machine.h delete mode 100644 sysdeps/sparc/sparc64/dl-plt.h delete mode 100644 sysdeps/sparc/sparc64/dl-trampoline.S delete mode 100644 sysdeps/sparc/sparc64/fpu/e_sqrtl.c delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/Makefile delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_ceil-vis3.c delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.c delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf-vis3.c delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.c delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_finite-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_finite.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_finitef-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_finitef.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_floor-vis3.c delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_floor.c delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_floorf-vis3.c delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.c delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_fma-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_fma.c delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf.c delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_isinf-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_isinf.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_isinff-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_isinff.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_isnan-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_isnan.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_lrint-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_lrint.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_rint-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_rint.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_rintf-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_signbit-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf-vis3.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.c delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.c delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_truncf-vis3.c delete mode 100644 sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.c delete mode 100644 sysdeps/sparc/sparc64/fpu/s_copysign.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_copysignf.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_fabs.c delete mode 100644 sysdeps/sparc/sparc64/fpu/s_fabsf.c delete mode 100644 sysdeps/sparc/sparc64/fpu/s_fabsl.c delete mode 100644 sysdeps/sparc/sparc64/fpu/s_finite.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_finitef.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_fma.c delete mode 100644 sysdeps/sparc/sparc64/fpu/s_isinf.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_isinff.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_isnan.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_isnanf.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_llrint.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_llrintf.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_lrint.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_lrintf.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_nearbyint.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_nearbyintf.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_rint.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_rintf.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_signbit.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_signbitf.S delete mode 100644 sysdeps/sparc/sparc64/fpu/s_signbitl.S delete mode 100644 sysdeps/sparc/sparc64/fpu/w_sqrt_compat.S delete mode 100644 sysdeps/sparc/sparc64/fpu/w_sqrtf_compat.S delete mode 100644 sysdeps/sparc/sparc64/hp-timing.h delete mode 100644 sysdeps/sparc/sparc64/jmpbuf-unwind.h delete mode 100644 sysdeps/sparc/sparc64/lshift.S delete mode 100644 sysdeps/sparc/sparc64/memchr.S delete mode 100644 sysdeps/sparc/sparc64/memcmp.S delete mode 100644 sysdeps/sparc/sparc64/memcpy.S delete mode 100644 sysdeps/sparc/sparc64/memset.S delete mode 100644 sysdeps/sparc/sparc64/mul_1.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/Makefile delete mode 100644 sysdeps/sparc/sparc64/multiarch/add_n-vis3.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/add_n.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/addmul_1-vis3.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/addmul_1.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c delete mode 100644 sysdeps/sparc/sparc64/multiarch/md5-block.c delete mode 100644 sysdeps/sparc/sparc64/multiarch/md5-crop.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/memcpy-niagara4.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/memcpy.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/memset-niagara1.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/memset-niagara4.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/memset.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/mul_1-vis3.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/mul_1.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c delete mode 100644 sysdeps/sparc/sparc64/multiarch/rtld-memset.c delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha256-block.c delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha256-crop.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha512-block.c delete mode 100644 sysdeps/sparc/sparc64/multiarch/sha512-crop.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/sub_n-vis3.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/sub_n.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/submul_1-vis3.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/submul_1.S delete mode 100644 sysdeps/sparc/sparc64/pthread_spin_init.c delete mode 100644 sysdeps/sparc/sparc64/pthread_spin_lock.S delete mode 100644 sysdeps/sparc/sparc64/pthread_spin_trylock.S delete mode 100644 sysdeps/sparc/sparc64/pthread_spin_unlock.S delete mode 100644 sysdeps/sparc/sparc64/pthreaddef.h delete mode 100644 sysdeps/sparc/sparc64/rawmemchr.S delete mode 100644 sysdeps/sparc/sparc64/rshift.S delete mode 100644 sysdeps/sparc/sparc64/rtld-memcpy.c delete mode 100644 sysdeps/sparc/sparc64/rtld-memset.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/Makefile delete mode 100644 sysdeps/sparc/sparc64/soft-fp/Versions delete mode 100644 sysdeps/sparc/sparc64/soft-fp/e_ilogbl.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_add.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_cmp.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_cmpe.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_div.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_feq.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_fge.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_fgt.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_fle.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_flt.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_fne.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_itoq.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_mul.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_neg.S delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_qtod.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_qtos.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_qtox.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_sqrt.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_stoq.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_sub.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_util.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/s_frexpl.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/s_scalblnl.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/s_scalbnl.c delete mode 100644 sysdeps/sparc/sparc64/soft-fp/sfp-machine.h delete mode 100644 sysdeps/sparc/sparc64/stackguard-macros.h delete mode 100644 sysdeps/sparc/sparc64/start.S delete mode 100644 sysdeps/sparc/sparc64/stpcpy.S delete mode 100644 sysdeps/sparc/sparc64/stpncpy.S delete mode 100644 sysdeps/sparc/sparc64/strcat.S delete mode 100644 sysdeps/sparc/sparc64/strchr.S delete mode 100644 sysdeps/sparc/sparc64/strcmp.S delete mode 100644 sysdeps/sparc/sparc64/strcpy.S delete mode 100644 sysdeps/sparc/sparc64/strcspn.S delete mode 100644 sysdeps/sparc/sparc64/strlen.S delete mode 100644 sysdeps/sparc/sparc64/strncmp.S delete mode 100644 sysdeps/sparc/sparc64/strncpy.S delete mode 100644 sysdeps/sparc/sparc64/strpbrk.S delete mode 100644 sysdeps/sparc/sparc64/strrchr.c delete mode 100644 sysdeps/sparc/sparc64/strspn.S delete mode 100644 sysdeps/sparc/sparc64/sub_n.S delete mode 100644 sysdeps/sparc/sparc64/submul_1.S delete mode 100644 sysdeps/sparc/sparc64/tls-macros.h delete mode 100644 sysdeps/sparc/sparc64/tst-audit.h delete mode 100644 sysdeps/sparc/stackinfo.h delete mode 100644 sysdeps/sparc/sys/trap.h delete mode 100644 sysdeps/sparc/sysdep.h delete mode 100644 sysdeps/tile/Implies delete mode 100644 sysdeps/tile/Makefile delete mode 100644 sysdeps/tile/Versions delete mode 100644 sysdeps/tile/__longjmp.S delete mode 100644 sysdeps/tile/__tls_get_addr.S delete mode 100644 sysdeps/tile/_mcount.S delete mode 100644 sysdeps/tile/abort-instr.h delete mode 100644 sysdeps/tile/atomic-machine.h delete mode 100644 sysdeps/tile/backtrace.c delete mode 100644 sysdeps/tile/bits/byteswap.h delete mode 100644 sysdeps/tile/bits/endian.h delete mode 100644 sysdeps/tile/bits/fenv.h delete mode 100644 sysdeps/tile/bits/link.h delete mode 100644 sysdeps/tile/bits/mathinline.h delete mode 100644 sysdeps/tile/bits/setjmp.h delete mode 100644 sysdeps/tile/bsd-_setjmp.S delete mode 100644 sysdeps/tile/bsd-setjmp.S delete mode 100644 sysdeps/tile/bzero.S delete mode 100644 sysdeps/tile/configure delete mode 100644 sysdeps/tile/configure.ac delete mode 100644 sysdeps/tile/crti.S delete mode 100644 sysdeps/tile/crtn.S delete mode 100644 sysdeps/tile/dl-lookupcfg.h delete mode 100644 sysdeps/tile/dl-machine.h delete mode 100644 sysdeps/tile/dl-runtime.c delete mode 100644 sysdeps/tile/dl-start.S delete mode 100644 sysdeps/tile/dl-tls.c delete mode 100644 sysdeps/tile/dl-tls.h delete mode 100644 sysdeps/tile/dl-trampoline.S delete mode 100644 sysdeps/tile/ffs.c delete mode 100644 sysdeps/tile/ffsll.c delete mode 100644 sysdeps/tile/gccframe.h delete mode 100644 sysdeps/tile/jmpbuf-offsets.h delete mode 100644 sysdeps/tile/jmpbuf-unwind.h delete mode 100644 sysdeps/tile/ldsodefs.h delete mode 100644 sysdeps/tile/libm-test-ulps delete mode 100644 sysdeps/tile/libm-test-ulps-name delete mode 100644 sysdeps/tile/machine-gmon.h delete mode 100644 sysdeps/tile/math-tests.h delete mode 100644 sysdeps/tile/math_private.h delete mode 100644 sysdeps/tile/memcmp.c delete mode 100644 sysdeps/tile/memcopy.h delete mode 100644 sysdeps/tile/nptl/Makefile delete mode 100644 sysdeps/tile/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/tile/nptl/bits/semaphore.h delete mode 100644 sysdeps/tile/nptl/pthread_spin_lock.c delete mode 100644 sysdeps/tile/nptl/pthread_spin_trylock.c delete mode 100644 sysdeps/tile/nptl/pthread_spin_unlock.c delete mode 100644 sysdeps/tile/nptl/pthreaddef.h delete mode 100644 sysdeps/tile/nptl/tcb-offsets.sym delete mode 100644 sysdeps/tile/nptl/tls.h delete mode 100644 sysdeps/tile/preconfigure delete mode 100644 sysdeps/tile/s_fma.c delete mode 100644 sysdeps/tile/s_fmaf.c delete mode 100644 sysdeps/tile/setjmp.S delete mode 100644 sysdeps/tile/sfp-machine.h delete mode 100644 sysdeps/tile/sotruss-lib.c delete mode 100644 sysdeps/tile/stackguard-macros.h delete mode 100644 sysdeps/tile/stackinfo.h delete mode 100644 sysdeps/tile/start.S delete mode 100644 sysdeps/tile/sysdep.h delete mode 100644 sysdeps/tile/tilegx/Implies delete mode 100644 sysdeps/tile/tilegx/Makefile delete mode 100644 sysdeps/tile/tilegx/atomic-machine.h delete mode 100644 sysdeps/tile/tilegx/bits/wordsize.h delete mode 100644 sysdeps/tile/tilegx/memchr.c delete mode 100644 sysdeps/tile/tilegx/memcpy.c delete mode 100644 sysdeps/tile/tilegx/memset.c delete mode 100644 sysdeps/tile/tilegx/memusage.h delete mode 100644 sysdeps/tile/tilegx/rawmemchr.c delete mode 100644 sysdeps/tile/tilegx/strcasestr.c delete mode 100644 sysdeps/tile/tilegx/strchr.c delete mode 100644 sysdeps/tile/tilegx/strchrnul.c delete mode 100644 sysdeps/tile/tilegx/string-endian.h delete mode 100644 sysdeps/tile/tilegx/strlen.c delete mode 100644 sysdeps/tile/tilegx/strnlen.c delete mode 100644 sysdeps/tile/tilegx/strrchr.c delete mode 100644 sysdeps/tile/tilegx/strstr.c delete mode 100644 sysdeps/tile/tilegx/tilegx32/Implies delete mode 100644 sysdeps/tile/tilegx/tilegx64/Implies delete mode 100644 sysdeps/tile/tilepro/Implies delete mode 100644 sysdeps/tile/tilepro/atomic-machine.h delete mode 100644 sysdeps/tile/tilepro/bits/wordsize.h delete mode 100644 sysdeps/tile/tilepro/memchr.c delete mode 100644 sysdeps/tile/tilepro/memcpy.S delete mode 100644 sysdeps/tile/tilepro/memset.c delete mode 100644 sysdeps/tile/tilepro/memusage.h delete mode 100644 sysdeps/tile/tilepro/rawmemchr.c delete mode 100644 sysdeps/tile/tilepro/strchr.c delete mode 100644 sysdeps/tile/tilepro/strchrnul.c delete mode 100644 sysdeps/tile/tilepro/strlen.c delete mode 100644 sysdeps/tile/tilepro/strrchr.c delete mode 100644 sysdeps/tile/tls-macros.h delete mode 100644 sysdeps/tile/tst-audit.h delete mode 100644 sysdeps/tile/wordcopy.c delete mode 100644 sysdeps/unix/Implies delete mode 100644 sysdeps/unix/Makefile delete mode 100644 sysdeps/unix/alpha/Makefile delete mode 100644 sysdeps/unix/alpha/getegid.S delete mode 100644 sysdeps/unix/alpha/geteuid.S delete mode 100644 sysdeps/unix/alpha/getppid.S delete mode 100644 sysdeps/unix/alpha/pipe.S delete mode 100644 sysdeps/unix/alpha/rt-sysdep.S delete mode 100644 sysdeps/unix/alpha/sysdep.S delete mode 100644 sysdeps/unix/alpha/sysdep.h delete mode 100644 sysdeps/unix/arm/sysdep.S delete mode 100644 sysdeps/unix/arm/sysdep.h delete mode 100644 sysdeps/unix/bsd/Implies delete mode 100644 sysdeps/unix/bsd/Makefile delete mode 100644 sysdeps/unix/bsd/Versions delete mode 100644 sysdeps/unix/bsd/bits/signum.h delete mode 100644 sysdeps/unix/bsd/bits/sockaddr.h delete mode 100644 sysdeps/unix/bsd/bsdtty.h delete mode 100644 sysdeps/unix/bsd/cmsg_nxthdr.c delete mode 100644 sysdeps/unix/bsd/ftime.c delete mode 100644 sysdeps/unix/bsd/getpt.c delete mode 100644 sysdeps/unix/bsd/gtty.c delete mode 100644 sysdeps/unix/bsd/sigblock.c delete mode 100644 sysdeps/unix/bsd/sigsetmask.c delete mode 100644 sysdeps/unix/bsd/stty.c delete mode 100644 sysdeps/unix/bsd/syscalls.list delete mode 100644 sysdeps/unix/bsd/tcdrain.c delete mode 100644 sysdeps/unix/bsd/tcflow.c delete mode 100644 sysdeps/unix/bsd/tcflush.c delete mode 100644 sysdeps/unix/bsd/tcgetattr.c delete mode 100644 sysdeps/unix/bsd/tcgetpgrp.c delete mode 100644 sysdeps/unix/bsd/tcsendbrk.c delete mode 100644 sysdeps/unix/bsd/tcsetattr.c delete mode 100644 sysdeps/unix/bsd/tcsetpgrp.c delete mode 100644 sysdeps/unix/bsd/ualarm.c delete mode 100644 sysdeps/unix/bsd/unlockpt.c delete mode 100644 sysdeps/unix/bsd/wait.c delete mode 100644 sysdeps/unix/bsd/wait3.c delete mode 100644 sysdeps/unix/bsd/waitpid.c delete mode 100644 sysdeps/unix/clock_gettime.c delete mode 100644 sysdeps/unix/clock_nanosleep.c delete mode 100644 sysdeps/unix/clock_settime.c delete mode 100644 sysdeps/unix/confstr.h delete mode 100644 sysdeps/unix/get_child_max.c delete mode 100644 sysdeps/unix/getlogin.c delete mode 100644 sysdeps/unix/getlogin_r.c delete mode 100644 sysdeps/unix/getpagesize.c delete mode 100644 sysdeps/unix/grantpt.c delete mode 100644 sysdeps/unix/i386/sysdep.S delete mode 100644 sysdeps/unix/i386/sysdep.h delete mode 100644 sysdeps/unix/ifreq.c delete mode 100644 sysdeps/unix/inet/Subdirs delete mode 100644 sysdeps/unix/make-syscalls.sh delete mode 100644 sysdeps/unix/mips/entry.h delete mode 100644 sysdeps/unix/mips/mips32/sysdep.h delete mode 100644 sysdeps/unix/mips/mips64/n32/sysdep.h delete mode 100644 sysdeps/unix/mips/mips64/n64/sysdep.h delete mode 100644 sysdeps/unix/mips/pipe.S delete mode 100644 sysdeps/unix/mips/rt-sysdep.S delete mode 100644 sysdeps/unix/mips/sysdep.S delete mode 100644 sysdeps/unix/mips/sysdep.h delete mode 100644 sysdeps/unix/powerpc/sysdep.h delete mode 100644 sysdeps/unix/s-proto-cancel.S delete mode 100644 sysdeps/unix/s-proto.S delete mode 100644 sysdeps/unix/setxid.h delete mode 100644 sysdeps/unix/sh/sysdep.S delete mode 100644 sysdeps/unix/sh/sysdep.h delete mode 100644 sysdeps/unix/sockatmark.c delete mode 100644 sysdeps/unix/stime.c delete mode 100644 sysdeps/unix/syscall-template.S delete mode 100644 sysdeps/unix/syscall.S delete mode 100644 sysdeps/unix/syscalls.list delete mode 100644 sysdeps/unix/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/Implies delete mode 100644 sysdeps/unix/sysv/linux/Makefile delete mode 100644 sysdeps/unix/sysv/linux/Versions delete mode 100644 sysdeps/unix/sysv/linux/_G_config.h delete mode 100644 sysdeps/unix/sysv/linux/_exit.c delete mode 100644 sysdeps/unix/sysv/linux/a.out.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/Implies delete mode 100644 sysdeps/unix/sysv/linux/aarch64/Makefile delete mode 100644 sysdeps/unix/sysv/linux/aarch64/Versions delete mode 100644 sysdeps/unix/sysv/linux/aarch64/__read_tp.S delete mode 100644 sysdeps/unix/sysv/linux/aarch64/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/bits/hwcap.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/bits/ipc.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/bits/local_lim.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/bits/sigstack.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/aarch64/clone.S delete mode 100644 sysdeps/unix/sysv/linux/aarch64/configure delete mode 100644 sysdeps/unix/sysv/linux/aarch64/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/aarch64/cpu-features.c delete mode 100644 sysdeps/unix/sysv/linux/aarch64/cpu-features.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/dl-cache.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c delete mode 100644 sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/dl-static.c delete mode 100644 sysdeps/unix/sysv/linux/aarch64/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/aarch64/init-first.c delete mode 100644 sysdeps/unix/sysv/linux/aarch64/ioctl.S delete mode 100644 sysdeps/unix/sysv/linux/aarch64/ipc_priv.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/aarch64/ldconfig.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/ldsodefs.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/aarch64/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S delete mode 100644 sysdeps/unix/sysv/linux/aarch64/libc-start.c delete mode 100644 sysdeps/unix/sysv/linux/aarch64/libc-vdso.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/aarch64/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/aarch64/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/aarch64/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/aarch64/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/aarch64/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/aarch64/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/aarch64/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/aarch64/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/aarch64/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/aarch64/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/aarch64/makecontext.c delete mode 100644 sysdeps/unix/sysv/linux/aarch64/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/pt-vfork.c delete mode 100644 sysdeps/unix/sysv/linux/aarch64/readelflib.c delete mode 100644 sysdeps/unix/sysv/linux/aarch64/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/aarch64/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/aarch64/sigaction.c delete mode 100644 sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/aarch64/sys/elf.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/sysdep.c delete mode 100644 sysdeps/unix/sysv/linux/aarch64/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h delete mode 100644 sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym delete mode 100644 sysdeps/unix/sysv/linux/aarch64/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/accept.c delete mode 100644 sysdeps/unix/sysv/linux/accept4.c delete mode 100644 sysdeps/unix/sysv/linux/access.c delete mode 100644 sysdeps/unix/sysv/linux/adjtime.c delete mode 100644 sysdeps/unix/sysv/linux/aio_misc.h delete mode 100644 sysdeps/unix/sysv/linux/aio_sigqueue.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/Implies delete mode 100644 sysdeps/unix/sysv/linux/alpha/Makefile delete mode 100644 sysdeps/unix/sysv/linux/alpha/Versions delete mode 100644 sysdeps/unix/sysv/linux/alpha/____longjmp_chk.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/a.out.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/adjtime.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/aio_cancel.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/alpha/regdef.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/alphaev6/fpu/Implies delete mode 100644 sysdeps/unix/sysv/linux/alpha/alphaev67/fpu/Implies delete mode 100644 sysdeps/unix/sysv/linux/alpha/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/a.out.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/dirent.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/elfclass.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/epoll.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/errno.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/eventfd.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/inotify.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/ioctls.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/ipc.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/local_lim.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/msq.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/netdb.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/resource.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/sem.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/semaphore.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/shm.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/sigaction.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/signalfd.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/signum.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/sigstack.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/socket_type.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/stat.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/statfs.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/termios.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/timerfd.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/typesizes.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/wordsize.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/brk.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/alpha/clone.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/configure delete mode 100644 sysdeps/unix/sysv/linux/alpha/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/alpha/dl-auxv.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/dl-brk.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/dl-support.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/dl-sysdep.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/fpu/Implies delete mode 100644 sysdeps/unix/sysv/linux/alpha/fraiseexcpt.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/fstatfs64.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/fstatvfs.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/fstatvfs64.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/fxstat.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/getclktck.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/getdents.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/getdents64.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/gethostname.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/getsysstats.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/glob.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/internal_statvfs64.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/ioperm.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/ipc_priv.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/kernel_sigaction.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/kernel_stat.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/kernel_sysinfo.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/kernel_termios.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/alpha/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/alpha/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/alpha/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/alpha/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/alpha/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/alpha/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/alpha/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/alpha/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/alpha/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/alpha/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/alpha/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/alpha/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/alpha/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/alpha/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/makecontext.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/nldbl-abi.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/oldglob.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/pipe.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/pt-vfork.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/rt_sigaction.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/select.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/setfpucw.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/alpha/sigaction.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/sigprocmask.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/sizes.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/statfs64.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/statvfs.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/statvfs64.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/sys/acct.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/sys/io.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/sys/ucontext.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/alpha/sysconf.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/timer_create.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/timer_delete.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/timer_getoverr.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/timer_gettime.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/timer_settime.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/ucontext-offsets.sym delete mode 100644 sysdeps/unix/sysv/linux/alpha/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/alpha/wordexp.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/xstatconv.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/xstatconv.h delete mode 100644 sysdeps/unix/sysv/linux/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/arm/Implies delete mode 100644 sysdeps/unix/sysv/linux/arm/Makefile delete mode 100644 sysdeps/unix/sysv/linux/arm/Versions delete mode 100644 sysdeps/unix/sysv/linux/arm/____longjmp_chk.S delete mode 100644 sysdeps/unix/sysv/linux/arm/aeabi_read_tp.S delete mode 100644 sysdeps/unix/sysv/linux/arm/alphasort64.c delete mode 100644 sysdeps/unix/sysv/linux/arm/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/arm/arm-features.h delete mode 100644 sysdeps/unix/sysv/linux/arm/atomic-machine.h delete mode 100644 sysdeps/unix/sysv/linux/arm/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/arm/bits/hwcap.h delete mode 100644 sysdeps/unix/sysv/linux/arm/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/arm/bits/shm.h delete mode 100644 sysdeps/unix/sysv/linux/arm/brk.c delete mode 100644 sysdeps/unix/sysv/linux/arm/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/arm/clone.S delete mode 100644 sysdeps/unix/sysv/linux/arm/dl-cache.h delete mode 100644 sysdeps/unix/sysv/linux/arm/dl-machine.h delete mode 100644 sysdeps/unix/sysv/linux/arm/dl-procinfo.c delete mode 100644 sysdeps/unix/sysv/linux/arm/dl-procinfo.h delete mode 100644 sysdeps/unix/sysv/linux/arm/fcntl.c delete mode 100644 sysdeps/unix/sysv/linux/arm/fxstat.c delete mode 100644 sysdeps/unix/sysv/linux/arm/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/arm/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/arm/getdents64.c delete mode 100644 sysdeps/unix/sysv/linux/arm/glob64.c delete mode 100644 sysdeps/unix/sysv/linux/arm/init-first.c delete mode 100644 sysdeps/unix/sysv/linux/arm/ioperm.c delete mode 100644 sysdeps/unix/sysv/linux/arm/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/arm/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/arm/ldconfig.h delete mode 100644 sysdeps/unix/sysv/linux/arm/ldsodefs.h delete mode 100644 sysdeps/unix/sysv/linux/arm/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/arm/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/arm/libc-do-syscall.S delete mode 100644 sysdeps/unix/sysv/linux/arm/libc-vdso.h delete mode 100644 sysdeps/unix/sysv/linux/arm/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/arm/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/arm/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/arm/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/arm/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/arm/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/arm/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/arm/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/arm/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/arm/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/arm/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/arm/lockf64.c delete mode 100644 sysdeps/unix/sysv/linux/arm/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/arm/makecontext.c delete mode 100644 sysdeps/unix/sysv/linux/arm/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/arm/readahead.c delete mode 100644 sysdeps/unix/sysv/linux/arm/readdir64.c delete mode 100644 sysdeps/unix/sysv/linux/arm/readdir64_r.c delete mode 100644 sysdeps/unix/sysv/linux/arm/readelflib.c delete mode 100644 sysdeps/unix/sysv/linux/arm/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/arm/scandir64.c delete mode 100644 sysdeps/unix/sysv/linux/arm/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/arm/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/arm/sigaction.c delete mode 100644 sysdeps/unix/sysv/linux/arm/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/arm/sigrestorer.S delete mode 100644 sysdeps/unix/sysv/linux/arm/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/arm/sys/elf.h delete mode 100644 sysdeps/unix/sysv/linux/arm/sys/io.h delete mode 100644 sysdeps/unix/sysv/linux/arm/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/arm/sys/ucontext.h delete mode 100644 sysdeps/unix/sysv/linux/arm/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/arm/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/arm/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/arm/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/arm/sysdep.S delete mode 100644 sysdeps/unix/sysv/linux/arm/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/arm/tls.h delete mode 100644 sysdeps/unix/sysv/linux/arm/ucontext_i.sym delete mode 100644 sysdeps/unix/sysv/linux/arm/umount.c delete mode 100644 sysdeps/unix/sysv/linux/arm/versionsort64.c delete mode 100644 sysdeps/unix/sysv/linux/arm/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/arm/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/bind.c delete mode 100644 sysdeps/unix/sysv/linux/bits/a.out.h delete mode 100644 sysdeps/unix/sysv/linux/bits/dirent.h delete mode 100644 sysdeps/unix/sysv/linux/bits/epoll.h delete mode 100644 sysdeps/unix/sysv/linux/bits/errno.h delete mode 100644 sysdeps/unix/sysv/linux/bits/eventfd.h delete mode 100644 sysdeps/unix/sysv/linux/bits/fcntl-linux.h delete mode 100644 sysdeps/unix/sysv/linux/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/bits/in.h delete mode 100644 sysdeps/unix/sysv/linux/bits/initspin.h delete mode 100644 sysdeps/unix/sysv/linux/bits/inotify.h delete mode 100644 sysdeps/unix/sysv/linux/bits/ioctl-types.h delete mode 100644 sysdeps/unix/sysv/linux/bits/ioctls.h delete mode 100644 sysdeps/unix/sysv/linux/bits/ipc.h delete mode 100644 sysdeps/unix/sysv/linux/bits/local_lim.h delete mode 100644 sysdeps/unix/sysv/linux/bits/mqueue.h delete mode 100644 sysdeps/unix/sysv/linux/bits/msq.h delete mode 100644 sysdeps/unix/sysv/linux/bits/param.h delete mode 100644 sysdeps/unix/sysv/linux/bits/poll.h delete mode 100644 sysdeps/unix/sysv/linux/bits/posix_opt.h delete mode 100644 sysdeps/unix/sysv/linux/bits/resource.h delete mode 100644 sysdeps/unix/sysv/linux/bits/sched.h delete mode 100644 sysdeps/unix/sysv/linux/bits/sem.h delete mode 100644 sysdeps/unix/sysv/linux/bits/shm.h delete mode 100644 sysdeps/unix/sysv/linux/bits/sigaction.h delete mode 100644 sysdeps/unix/sysv/linux/bits/sigcontext.h delete mode 100644 sysdeps/unix/sysv/linux/bits/sigevent-consts.h delete mode 100644 sysdeps/unix/sysv/linux/bits/siginfo-arch.h delete mode 100644 sysdeps/unix/sysv/linux/bits/siginfo-consts-arch.h delete mode 100644 sysdeps/unix/sysv/linux/bits/siginfo-consts.h delete mode 100644 sysdeps/unix/sysv/linux/bits/signalfd.h delete mode 100644 sysdeps/unix/sysv/linux/bits/signum.h delete mode 100644 sysdeps/unix/sysv/linux/bits/sigstack.h delete mode 100644 sysdeps/unix/sysv/linux/bits/socket.h delete mode 100644 sysdeps/unix/sysv/linux/bits/socket_type.h delete mode 100644 sysdeps/unix/sysv/linux/bits/ss_flags.h delete mode 100644 sysdeps/unix/sysv/linux/bits/stat.h delete mode 100644 sysdeps/unix/sysv/linux/bits/statfs.h delete mode 100644 sysdeps/unix/sysv/linux/bits/statvfs.h delete mode 100644 sysdeps/unix/sysv/linux/bits/sys_errlist.h delete mode 100644 sysdeps/unix/sysv/linux/bits/sysctl.h delete mode 100644 sysdeps/unix/sysv/linux/bits/termios.h delete mode 100644 sysdeps/unix/sysv/linux/bits/time.h delete mode 100644 sysdeps/unix/sysv/linux/bits/timerfd.h delete mode 100644 sysdeps/unix/sysv/linux/bits/timex.h delete mode 100644 sysdeps/unix/sysv/linux/bits/types/__sigset_t.h delete mode 100644 sysdeps/unix/sysv/linux/bits/types/sigevent_t.h delete mode 100644 sysdeps/unix/sysv/linux/bits/types/siginfo_t.h delete mode 100644 sysdeps/unix/sysv/linux/bits/types/stack_t.h delete mode 100644 sysdeps/unix/sysv/linux/bits/uio.h delete mode 100644 sysdeps/unix/sysv/linux/bits/utsname.h delete mode 100644 sysdeps/unix/sysv/linux/bits/waitflags.h delete mode 100644 sysdeps/unix/sysv/linux/check_native.c delete mode 100644 sysdeps/unix/sysv/linux/check_pf.c delete mode 100644 sysdeps/unix/sysv/linux/clock.c delete mode 100644 sysdeps/unix/sysv/linux/clock_getcpuclockid.c delete mode 100644 sysdeps/unix/sysv/linux/clock_getres.c delete mode 100644 sysdeps/unix/sysv/linux/clock_gettime.c delete mode 100644 sysdeps/unix/sysv/linux/clock_nanosleep.c delete mode 100644 sysdeps/unix/sysv/linux/clock_settime.c delete mode 100644 sysdeps/unix/sysv/linux/close.c delete mode 100644 sysdeps/unix/sysv/linux/cmsg_nxthdr.c delete mode 100644 sysdeps/unix/sysv/linux/configure delete mode 100644 sysdeps/unix/sysv/linux/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/connect.c delete mode 100644 sysdeps/unix/sysv/linux/creat.c delete mode 100644 sysdeps/unix/sysv/linux/creat64.c delete mode 100644 sysdeps/unix/sysv/linux/createthread.c delete mode 100644 sysdeps/unix/sysv/linux/default-sched.h delete mode 100644 sysdeps/unix/sysv/linux/device-nrs.h delete mode 100644 sysdeps/unix/sysv/linux/dl-brk.c delete mode 100644 sysdeps/unix/sysv/linux/dl-execstack.c delete mode 100644 sysdeps/unix/sysv/linux/dl-fxstatat64.c delete mode 100644 sysdeps/unix/sysv/linux/dl-getcwd.c delete mode 100644 sysdeps/unix/sysv/linux/dl-librecon.h delete mode 100644 sysdeps/unix/sysv/linux/dl-openat64.c delete mode 100644 sysdeps/unix/sysv/linux/dl-opendir.c delete mode 100644 sysdeps/unix/sysv/linux/dl-origin.c delete mode 100644 sysdeps/unix/sysv/linux/dl-osinfo.h delete mode 100644 sysdeps/unix/sysv/linux/dl-sbrk.c delete mode 100644 sysdeps/unix/sysv/linux/dl-sysdep.c delete mode 100644 sysdeps/unix/sysv/linux/dl-sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/dl-vdso.c delete mode 100644 sysdeps/unix/sysv/linux/dl-vdso.h delete mode 100644 sysdeps/unix/sysv/linux/dl-writev.h delete mode 100644 sysdeps/unix/sysv/linux/epoll_pwait.c delete mode 100644 sysdeps/unix/sysv/linux/epoll_wait.c delete mode 100644 sysdeps/unix/sysv/linux/errqueue.h delete mode 100644 sysdeps/unix/sysv/linux/eventfd_read.c delete mode 100644 sysdeps/unix/sysv/linux/eventfd_write.c delete mode 100644 sysdeps/unix/sysv/linux/exit-thread.h delete mode 100644 sysdeps/unix/sysv/linux/faccessat.c delete mode 100644 sysdeps/unix/sysv/linux/fallocate.c delete mode 100644 sysdeps/unix/sysv/linux/fallocate64.c delete mode 100644 sysdeps/unix/sysv/linux/fatal-prepare.h delete mode 100644 sysdeps/unix/sysv/linux/fchmodat.c delete mode 100644 sysdeps/unix/sysv/linux/fcntl.c delete mode 100644 sysdeps/unix/sysv/linux/fd_to_filename.h delete mode 100644 sysdeps/unix/sysv/linux/fdatasync.c delete mode 100644 sysdeps/unix/sysv/linux/fexecve.c delete mode 100644 sysdeps/unix/sysv/linux/fips-private.h delete mode 100644 sysdeps/unix/sysv/linux/fpathconf.c delete mode 100644 sysdeps/unix/sysv/linux/fstatfs64.c delete mode 100644 sysdeps/unix/sysv/linux/fstatvfs.c delete mode 100644 sysdeps/unix/sysv/linux/fstatvfs64.c delete mode 100644 sysdeps/unix/sysv/linux/fsync.c delete mode 100644 sysdeps/unix/sysv/linux/ftime.c delete mode 100644 sysdeps/unix/sysv/linux/ftruncate.c delete mode 100644 sysdeps/unix/sysv/linux/ftruncate64.c delete mode 100644 sysdeps/unix/sysv/linux/futex-internal.h delete mode 100644 sysdeps/unix/sysv/linux/futimens.c delete mode 100644 sysdeps/unix/sysv/linux/futimes.c delete mode 100644 sysdeps/unix/sysv/linux/futimesat.c delete mode 100644 sysdeps/unix/sysv/linux/fxstat.c delete mode 100644 sysdeps/unix/sysv/linux/fxstat64.c delete mode 100644 sysdeps/unix/sysv/linux/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/fxstatat64.c delete mode 100644 sysdeps/unix/sysv/linux/gai_sigqueue.c delete mode 100644 sysdeps/unix/sysv/linux/generic/Makefile delete mode 100644 sysdeps/unix/sysv/linux/generic/README delete mode 100644 sysdeps/unix/sysv/linux/generic/____longjmp_chk.c delete mode 100644 sysdeps/unix/sysv/linux/generic/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/generic/bits/msq.h delete mode 100644 sysdeps/unix/sysv/linux/generic/bits/sem.h delete mode 100644 sysdeps/unix/sysv/linux/generic/bits/shm.h delete mode 100644 sysdeps/unix/sysv/linux/generic/bits/stat.h delete mode 100644 sysdeps/unix/sysv/linux/generic/bits/statfs.h delete mode 100644 sysdeps/unix/sysv/linux/generic/bits/typesizes.h delete mode 100644 sysdeps/unix/sysv/linux/generic/brk.c delete mode 100644 sysdeps/unix/sysv/linux/generic/chmod.c delete mode 100644 sysdeps/unix/sysv/linux/generic/chown.c delete mode 100644 sysdeps/unix/sysv/linux/generic/dl-origin.c delete mode 100644 sysdeps/unix/sysv/linux/generic/dup2.c delete mode 100644 sysdeps/unix/sysv/linux/generic/epoll_create.c delete mode 100644 sysdeps/unix/sysv/linux/generic/futimesat.c delete mode 100644 sysdeps/unix/sysv/linux/generic/getdents.c delete mode 100644 sysdeps/unix/sysv/linux/generic/getdents64.c delete mode 100644 sysdeps/unix/sysv/linux/generic/inotify_init.c delete mode 100644 sysdeps/unix/sysv/linux/generic/kernel_stat.h delete mode 100644 sysdeps/unix/sysv/linux/generic/lchown.c delete mode 100644 sysdeps/unix/sysv/linux/generic/link.c delete mode 100644 sysdeps/unix/sysv/linux/generic/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/generic/mkdir.c delete mode 100644 sysdeps/unix/sysv/linux/generic/pipe.c delete mode 100644 sysdeps/unix/sysv/linux/generic/readlink.c delete mode 100644 sysdeps/unix/sysv/linux/generic/readlink_chk.c delete mode 100644 sysdeps/unix/sysv/linux/generic/rmdir.c delete mode 100644 sysdeps/unix/sysv/linux/generic/symlink.c delete mode 100644 sysdeps/unix/sysv/linux/generic/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/generic/sysctl.c delete mode 100644 sysdeps/unix/sysv/linux/generic/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/generic/umount.c delete mode 100644 sysdeps/unix/sysv/linux/generic/unlink.c delete mode 100644 sysdeps/unix/sysv/linux/generic/ustat.c delete mode 100644 sysdeps/unix/sysv/linux/generic/utimes.c delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/Versions delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/fstatfs.c delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat64.c delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat64.c delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/getdents.c delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/overflow.h delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/sendfile.c delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/statfs.c delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c delete mode 100644 sysdeps/unix/sysv/linux/generic/xmknod.c delete mode 100644 sysdeps/unix/sysv/linux/generic/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/getclktck.c delete mode 100644 sysdeps/unix/sysv/linux/getcwd.c delete mode 100644 sysdeps/unix/sysv/linux/getdents.c delete mode 100644 sysdeps/unix/sysv/linux/getdents64.c delete mode 100644 sysdeps/unix/sysv/linux/getdirentries.c delete mode 100644 sysdeps/unix/sysv/linux/getdirentries64.c delete mode 100644 sysdeps/unix/sysv/linux/getdtsz.c delete mode 100644 sysdeps/unix/sysv/linux/getentropy.c delete mode 100644 sysdeps/unix/sysv/linux/gethostid.c delete mode 100644 sysdeps/unix/sysv/linux/getipv4sourcefilter.c delete mode 100644 sysdeps/unix/sysv/linux/getloadavg.c delete mode 100644 sysdeps/unix/sysv/linux/getlogin.c delete mode 100644 sysdeps/unix/sysv/linux/getlogin_r.c delete mode 100644 sysdeps/unix/sysv/linux/getpagesize.c delete mode 100644 sysdeps/unix/sysv/linux/getpeername.c delete mode 100644 sysdeps/unix/sysv/linux/getpriority.c delete mode 100644 sysdeps/unix/sysv/linux/getpt.c delete mode 100644 sysdeps/unix/sysv/linux/getrandom.c delete mode 100644 sysdeps/unix/sysv/linux/getrlimit.c delete mode 100644 sysdeps/unix/sysv/linux/getrlimit64.c delete mode 100644 sysdeps/unix/sysv/linux/getsockname.c delete mode 100644 sysdeps/unix/sysv/linux/getsockopt.c delete mode 100644 sysdeps/unix/sysv/linux/getsourcefilter.c delete mode 100644 sysdeps/unix/sysv/linux/getsysstats.c delete mode 100644 sysdeps/unix/sysv/linux/gettimeofday.c delete mode 100644 sysdeps/unix/sysv/linux/grantpt.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/Implies delete mode 100644 sysdeps/unix/sysv/linux/hppa/Makefile delete mode 100644 sysdeps/unix/sysv/linux/hppa/Versions delete mode 100644 sysdeps/unix/sysv/linux/hppa/____longjmp_chk.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/atomic-machine.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/epoll.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/errno.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/eventfd.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/inotify.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/ioctls.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/ipc.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/msq.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/sem.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/shm.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/sigaction.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/signalfd.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/signum.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/socket_type.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/bits/timerfd.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/brk.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/hppa/clone.S delete mode 100644 sysdeps/unix/sysv/linux/hppa/fcntl.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/fxstat.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/hppa/getdents64.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/internaltypes.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/ipc_priv.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/kernel_sigaction.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/kernel_stat.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/hppa/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/hppa/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/hppa/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/hppa/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/hppa/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/hppa/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/hppa/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/hppa/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/hppa/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/hppa/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/hppa/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/hppa/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/hppa/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/hppa/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/makecontext.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/pt-vfork.S delete mode 100644 sysdeps/unix/sysv/linux/hppa/pthread.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/pthreadP.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/pthread_cond_broadcast.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/pthread_cond_destroy.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/pthread_cond_init.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/pthread_cond_signal.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/pthread_cond_wait.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/hppa/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/hppa/swapcontext.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/sys/ucontext.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/syscall.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/sysdep.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/hppa/ucontext_i.sym delete mode 100644 sysdeps/unix/sysv/linux/hppa/umount.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/utimes.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/i386/Implies delete mode 100644 sysdeps/unix/sysv/linux/i386/Makefile delete mode 100644 sysdeps/unix/sysv/linux/i386/Versions delete mode 100644 sysdeps/unix/sysv/linux/i386/____longjmp_chk.S delete mode 100644 sysdeps/unix/sysv/linux/i386/_exit.S delete mode 100644 sysdeps/unix/sysv/linux/i386/alphasort64.c delete mode 100644 sysdeps/unix/sysv/linux/i386/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/i386/brk.c delete mode 100644 sysdeps/unix/sysv/linux/i386/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/i386/clone.S delete mode 100644 sysdeps/unix/sysv/linux/i386/configure delete mode 100644 sysdeps/unix/sysv/linux/i386/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/i386/dl-librecon.h delete mode 100644 sysdeps/unix/sysv/linux/i386/dl-procinfo.h delete mode 100644 sysdeps/unix/sysv/linux/i386/dl-sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/i386/fcntl.c delete mode 100644 sysdeps/unix/sysv/linux/i386/fxstat.c delete mode 100644 sysdeps/unix/sysv/linux/i386/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/i386/get_clockfreq.c delete mode 100644 sysdeps/unix/sysv/linux/i386/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/i386/getdents64.c delete mode 100644 sysdeps/unix/sysv/linux/i386/getmsg.c delete mode 100644 sysdeps/unix/sysv/linux/i386/gettimeofday.c delete mode 100644 sysdeps/unix/sysv/linux/i386/glob64.c delete mode 100644 sysdeps/unix/sysv/linux/i386/i686/Implies delete mode 100644 sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/i386/i786/Implies delete mode 100644 sysdeps/unix/sysv/linux/i386/init-first.c delete mode 100644 sysdeps/unix/sysv/linux/i386/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/i386/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/i386/ldconfig.h delete mode 100644 sysdeps/unix/sysv/linux/i386/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/i386/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/i386/libc-do-syscall.S delete mode 100644 sysdeps/unix/sysv/linux/i386/libc-lowlevellock.S delete mode 100644 sysdeps/unix/sysv/linux/i386/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/i386/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/i386/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/i386/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/i386/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/i386/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/i386/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/i386/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/i386/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/i386/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/i386/lll_timedlock_wait.c delete mode 100644 sysdeps/unix/sysv/linux/i386/lll_timedwait_tid.c delete mode 100644 sysdeps/unix/sysv/linux/i386/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/i386/lockf64.c delete mode 100644 sysdeps/unix/sysv/linux/i386/lowlevellock.S delete mode 100644 sysdeps/unix/sysv/linux/i386/lowlevellock.h delete mode 100644 sysdeps/unix/sysv/linux/i386/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/i386/makecontext.S delete mode 100644 sysdeps/unix/sysv/linux/i386/olddirent.h delete mode 100644 sysdeps/unix/sysv/linux/i386/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/i386/putmsg.c delete mode 100644 sysdeps/unix/sysv/linux/i386/readdir64.c delete mode 100644 sysdeps/unix/sysv/linux/i386/readdir64_r.c delete mode 100644 sysdeps/unix/sysv/linux/i386/readelflib.c delete mode 100644 sysdeps/unix/sysv/linux/i386/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/i386/scandir64.c delete mode 100644 sysdeps/unix/sysv/linux/i386/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/i386/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/i386/sigaction.c delete mode 100644 sysdeps/unix/sysv/linux/i386/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/i386/smp.h delete mode 100644 sysdeps/unix/sysv/linux/i386/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/i386/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/i386/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/i386/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/i386/sysdep.c delete mode 100644 sysdeps/unix/sysv/linux/i386/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/i386/time.c delete mode 100644 sysdeps/unix/sysv/linux/i386/ucontext_i.sym delete mode 100644 sysdeps/unix/sysv/linux/i386/versionsort64.c delete mode 100644 sysdeps/unix/sysv/linux/i386/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/i386/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/Implies delete mode 100644 sysdeps/unix/sysv/linux/ia64/Makefile delete mode 100644 sysdeps/unix/sysv/linux/ia64/Versions delete mode 100644 sysdeps/unix/sysv/linux/ia64/____longjmp_chk.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/__longjmp.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/__sigstack_longjmp.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/__start_context.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/endian.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/ipc.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/local_lim.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/msq.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/sem.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/setjmp.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/shm.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/sigaction.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/siginfo-arch.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/sigstack.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/stat.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/brk.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/bsd-_setjmp.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/bsd-setjmp.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/ia64/clone.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/clone2.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/configure delete mode 100644 sysdeps/unix/sysv/linux/ia64/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/ia64/dl-brk.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/dl-cache.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/dl-static.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/dl-sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/get_clockfreq.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/getclktck.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/has_cpuclock.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/ioperm.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/kernel_stat.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/ia64/ldconfig.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed delete mode 100644 sysdeps/unix/sysv/linux/ia64/ldsodefs.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/ia64/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/ia64/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/ia64/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/ia64/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/ia64/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/ia64/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/ia64/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/ia64/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/ia64/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/ia64/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/ia64/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/ia64/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/ia64/makecontext.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/pipe.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/pt-vfork.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/readelflib.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/rt-sysdep.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/setjmp.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/ia64/sigaction.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/sigaltstack-offsets.sym delete mode 100644 sysdeps/unix/sysv/linux/ia64/sigcontext-offsets.sym delete mode 100644 sysdeps/unix/sysv/linux/ia64/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/sigpending.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/sigprocmask.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/swapcontext.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/sys/io.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/sys/ptrace.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/sys/rse.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/sys/ucontext.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/ia64/sysconf.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/sysdep.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/system.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/timer_create.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/timer_delete.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/timer_getoverr.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/timer_gettime.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/timer_settime.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/tst-setcontext2.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/ucontext_i.h delete mode 100644 sysdeps/unix/sysv/linux/ia64/umount.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/unwind-dw2-fde.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/unwind-forcedunwind.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/unwind_longjmp.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/wordexp.c delete mode 100644 sysdeps/unix/sysv/linux/if_index.c delete mode 100644 sysdeps/unix/sysv/linux/ifaddrs.c delete mode 100644 sysdeps/unix/sysv/linux/ifreq.c delete mode 100644 sysdeps/unix/sysv/linux/include/bits/syscall.h delete mode 100644 sysdeps/unix/sysv/linux/include/sys/sysinfo.h delete mode 100644 sysdeps/unix/sysv/linux/include/sys/timex.h delete mode 100644 sysdeps/unix/sysv/linux/internal_statvfs.c delete mode 100644 sysdeps/unix/sysv/linux/internal_statvfs64.c delete mode 100644 sysdeps/unix/sysv/linux/ipc_ops.h delete mode 100644 sysdeps/unix/sysv/linux/ipc_priv.h delete mode 100644 sysdeps/unix/sysv/linux/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/kernel-posix-cpu-timers.h delete mode 100644 sysdeps/unix/sysv/linux/kernel-posix-timers.h delete mode 100644 sysdeps/unix/sysv/linux/kernel_sigaction.h delete mode 100644 sysdeps/unix/sysv/linux/kernel_stat.h delete mode 100644 sysdeps/unix/sysv/linux/kernel_termios.h delete mode 100644 sysdeps/unix/sysv/linux/ldd-rewrite.sed delete mode 100644 sysdeps/unix/sysv/linux/lddlibc4.c delete mode 100644 sysdeps/unix/sysv/linux/ldsodefs.h delete mode 100644 sysdeps/unix/sysv/linux/libc_fatal.c delete mode 100644 sysdeps/unix/sysv/linux/linux_fsinfo.h delete mode 100644 sysdeps/unix/sysv/linux/listen.c delete mode 100644 sysdeps/unix/sysv/linux/local-setxid.h delete mode 100644 sysdeps/unix/sysv/linux/lowlevellock-futex.h delete mode 100644 sysdeps/unix/sysv/linux/lseek.c delete mode 100644 sysdeps/unix/sysv/linux/lseek64.c delete mode 100644 sysdeps/unix/sysv/linux/lutimes.c delete mode 100644 sysdeps/unix/sysv/linux/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/lxstat64.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/Implies delete mode 100644 sysdeps/unix/sysv/linux/m68k/Makefile delete mode 100644 sysdeps/unix/sysv/linux/m68k/Versions delete mode 100644 sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/alphasort64.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/bits/a.out.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/bits/poll.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/bits/sockaddr.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/bits/stat.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/brk.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/m68k/clone.S delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/atomic-machine.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/m68k/coldfire/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/configure delete mode 100644 sysdeps/unix/sysv/linux/m68k/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/m68k/dl-librecon.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/dl-static.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/fcntl.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/fxstat.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/getdents64.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/getmsg.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/getpagesize.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/getsysstats.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/glob64.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/init-first.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/ldconfig.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/ldsodefs.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/libc-m68k-vdso.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/m68k/lockf64.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/Makefile delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/makecontext.S delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/ucontext_i.sym delete mode 100644 sysdeps/unix/sysv/linux/m68k/m68k-helpers.S delete mode 100644 sysdeps/unix/sysv/linux/m68k/m68k-vdso.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/m68k-vdso.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/mmap_internal.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/mremap.S delete mode 100644 sysdeps/unix/sysv/linux/m68k/pt-vfork.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/putmsg.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/readdir64.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/readdir64_r.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/scandir64.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/sys/reg.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/sys/ucontext.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/m68k/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/sysdep.S delete mode 100644 sysdeps/unix/sysv/linux/m68k/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/versionsort64.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/m68k/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/malloc-sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/microblaze/Implies delete mode 100644 sysdeps/unix/sysv/linux/microblaze/Makefile delete mode 100644 sysdeps/unix/sysv/linux/microblaze/Versions delete mode 100644 sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S delete mode 100644 sysdeps/unix/sysv/linux/microblaze/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/microblaze/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/microblaze/bits/stat.h delete mode 100644 sysdeps/unix/sysv/linux/microblaze/brk.c delete mode 100644 sysdeps/unix/sysv/linux/microblaze/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/microblaze/clock-compat.c delete mode 100644 sysdeps/unix/sysv/linux/microblaze/clone.S delete mode 100644 sysdeps/unix/sysv/linux/microblaze/fcntl.c delete mode 100644 sysdeps/unix/sysv/linux/microblaze/fxstat.c delete mode 100644 sysdeps/unix/sysv/linux/microblaze/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/microblaze/getsysstats.c delete mode 100644 sysdeps/unix/sysv/linux/microblaze/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/microblaze/kernel_stat.h delete mode 100644 sysdeps/unix/sysv/linux/microblaze/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/microblaze/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/microblaze/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/microblaze/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/microblaze/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/microblaze/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/microblaze/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/microblaze/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/microblaze/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/microblaze/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/microblaze/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/microblaze/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/microblaze/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/microblaze/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/microblaze/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/microblaze/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/microblaze/pt-vfork.S delete mode 100644 sysdeps/unix/sysv/linux/microblaze/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/microblaze/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/microblaze/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/microblaze/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/microblaze/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/microblaze/sysdep.S delete mode 100644 sysdeps/unix/sysv/linux/microblaze/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/microblaze/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/microblaze/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/mips/Implies delete mode 100644 sysdeps/unix/sysv/linux/mips/Makefile delete mode 100644 sysdeps/unix/sysv/linux/mips/Versions delete mode 100644 sysdeps/unix/sysv/linux/mips/____longjmp_chk.c delete mode 100644 sysdeps/unix/sysv/linux/mips/_test_and_set.c delete mode 100644 sysdeps/unix/sysv/linux/mips/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/epoll.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/errno.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/eventfd.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/inotify.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/ipc.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/local_lim.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/msq.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/poll.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/resource.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/sem.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/shm.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/sigaction.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/sigcontext.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/signalfd.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/signum.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/socket_type.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/stat.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/statfs.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/termios.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/timerfd.h delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/types/stack_t.h delete mode 100644 sysdeps/unix/sysv/linux/mips/brk.c delete mode 100644 sysdeps/unix/sysv/linux/mips/clone.S delete mode 100644 sysdeps/unix/sysv/linux/mips/configure delete mode 100644 sysdeps/unix/sysv/linux/mips/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/mips/dl-cache.h delete mode 100644 sysdeps/unix/sysv/linux/mips/dl-static.c delete mode 100644 sysdeps/unix/sysv/linux/mips/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/mips/getmsg.c delete mode 100644 sysdeps/unix/sysv/linux/mips/getrlimit64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/getsysstats.c delete mode 100644 sysdeps/unix/sysv/linux/mips/init-first.c delete mode 100644 sysdeps/unix/sysv/linux/mips/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/mips/kernel_rt_sigframe.h delete mode 100644 sysdeps/unix/sysv/linux/mips/kernel_sigaction.h delete mode 100644 sysdeps/unix/sysv/linux/mips/kernel_stat.h delete mode 100644 sysdeps/unix/sysv/linux/mips/kernel_termios.h delete mode 100644 sysdeps/unix/sysv/linux/mips/ldsodefs.h delete mode 100644 sysdeps/unix/sysv/linux/mips/libc-abis delete mode 100644 sysdeps/unix/sysv/linux/mips/libc-vdso.h delete mode 100644 sysdeps/unix/sysv/linux/mips/makecontext.S delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/Makefile delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/Versions delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/fcntl.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libcidn.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libnss_compat.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libnss_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libnss_dns.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libnss_files.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libnss_hesiod.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libnss_nis.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libnss_nisplus.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/lockf64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/mips16/Makefile delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/mips16/Versions delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall.h delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall0.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall1.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall2.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall3.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall4.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall5.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall6.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall7.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/readahead.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/Makefile delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/configure delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/fxstat64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/fxstatat64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/ldd-rewrite.sed delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/lxstat64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/msgctl.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/Versions delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/lockf64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/lseek.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/mmap_internal.h delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/fstatfs64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/fts.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/fts64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/ftw.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/ftw64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/sendfile64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/statfs64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/semctl.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/shmctl.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/umount.c delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/xstat64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/pipe.S delete mode 100644 sysdeps/unix/sysv/linux/mips/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/mips/pt-vfork.S delete mode 100644 sysdeps/unix/sysv/linux/mips/putmsg.c delete mode 100644 sysdeps/unix/sysv/linux/mips/readelflib.c delete mode 100644 sysdeps/unix/sysv/linux/mips/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/mips/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/mips/setrlimit64.c delete mode 100644 sysdeps/unix/sysv/linux/mips/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/mips/sigaction.c delete mode 100644 sysdeps/unix/sysv/linux/mips/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/mips/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/mips/sys/cachectl.h delete mode 100644 sysdeps/unix/sysv/linux/mips/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/mips/sys/sysmips.h delete mode 100644 sysdeps/unix/sysv/linux/mips/sys/ucontext.h delete mode 100644 sysdeps/unix/sysv/linux/mips/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/mips/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/mips/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/mips/ucontext_i.sym delete mode 100644 sysdeps/unix/sysv/linux/mips/ustat.c delete mode 100644 sysdeps/unix/sysv/linux/mips/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/mips/xstatconv.c delete mode 100644 sysdeps/unix/sysv/linux/mmap.c delete mode 100644 sysdeps/unix/sysv/linux/mmap64.c delete mode 100644 sysdeps/unix/sysv/linux/mmap_internal.h delete mode 100644 sysdeps/unix/sysv/linux/mq_close.c delete mode 100644 sysdeps/unix/sysv/linux/mq_getattr.c delete mode 100644 sysdeps/unix/sysv/linux/mq_notify.c delete mode 100644 sysdeps/unix/sysv/linux/mq_open.c delete mode 100644 sysdeps/unix/sysv/linux/mq_receive.c delete mode 100644 sysdeps/unix/sysv/linux/mq_send.c delete mode 100644 sysdeps/unix/sysv/linux/mq_timedreceive.c delete mode 100644 sysdeps/unix/sysv/linux/mq_timedsend.c delete mode 100644 sysdeps/unix/sysv/linux/mq_unlink.c delete mode 100644 sysdeps/unix/sysv/linux/msgctl.c delete mode 100644 sysdeps/unix/sysv/linux/msgget.c delete mode 100644 sysdeps/unix/sysv/linux/msgrcv.c delete mode 100644 sysdeps/unix/sysv/linux/msgsnd.c delete mode 100644 sysdeps/unix/sysv/linux/msync.c delete mode 100644 sysdeps/unix/sysv/linux/nanosleep.c delete mode 100644 sysdeps/unix/sysv/linux/net/ethernet.h delete mode 100644 sysdeps/unix/sysv/linux/net/if_arp.h delete mode 100644 sysdeps/unix/sysv/linux/net/if_packet.h delete mode 100644 sysdeps/unix/sysv/linux/net/if_ppp.h delete mode 100644 sysdeps/unix/sysv/linux/net/if_shaper.h delete mode 100644 sysdeps/unix/sysv/linux/net/if_slip.h delete mode 100644 sysdeps/unix/sysv/linux/net/ppp-comp.h delete mode 100644 sysdeps/unix/sysv/linux/net/ppp_defs.h delete mode 100644 sysdeps/unix/sysv/linux/net/route.h delete mode 100644 sysdeps/unix/sysv/linux/netash/ash.h delete mode 100644 sysdeps/unix/sysv/linux/netatalk/at.h delete mode 100644 sysdeps/unix/sysv/linux/netax25/ax25.h delete mode 100644 sysdeps/unix/sysv/linux/neteconet/ec.h delete mode 100644 sysdeps/unix/sysv/linux/netinet/if_ether.h delete mode 100644 sysdeps/unix/sysv/linux/netinet/if_fddi.h delete mode 100644 sysdeps/unix/sysv/linux/netinet/if_tr.h delete mode 100644 sysdeps/unix/sysv/linux/netipx/ipx.h delete mode 100644 sysdeps/unix/sysv/linux/netiucv/iucv.h delete mode 100644 sysdeps/unix/sysv/linux/netlink_assert_response.c delete mode 100644 sysdeps/unix/sysv/linux/netlinkaccess.h delete mode 100644 sysdeps/unix/sysv/linux/netpacket/packet.h delete mode 100644 sysdeps/unix/sysv/linux/netrom/netrom.h delete mode 100644 sysdeps/unix/sysv/linux/netrose/rose.h delete mode 100644 sysdeps/unix/sysv/linux/nfs/nfs.h delete mode 100644 sysdeps/unix/sysv/linux/nice.c delete mode 100644 sysdeps/unix/sysv/linux/nios2/Implies delete mode 100644 sysdeps/unix/sysv/linux/nios2/Makefile delete mode 100644 sysdeps/unix/sysv/linux/nios2/Versions delete mode 100644 sysdeps/unix/sysv/linux/nios2/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/nios2/atomic-machine.h delete mode 100644 sysdeps/unix/sysv/linux/nios2/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/nios2/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/nios2/cacheflush.c delete mode 100644 sysdeps/unix/sysv/linux/nios2/clone.S delete mode 100644 sysdeps/unix/sysv/linux/nios2/configure delete mode 100644 sysdeps/unix/sysv/linux/nios2/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/nios2/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/nios2/ipc_priv.h delete mode 100644 sysdeps/unix/sysv/linux/nios2/kernel_rt_sigframe.h delete mode 100644 sysdeps/unix/sysv/linux/nios2/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/nios2/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/nios2/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/nios2/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/nios2/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/nios2/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/nios2/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/nios2/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/nios2/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/nios2/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/nios2/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/nios2/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/nios2/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/nios2/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/nios2/makecontext.c delete mode 100644 sysdeps/unix/sysv/linux/nios2/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/nios2/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/nios2/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/nios2/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/nios2/sys/cachectl.h delete mode 100644 sysdeps/unix/sysv/linux/nios2/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/nios2/sys/ucontext.h delete mode 100644 sysdeps/unix/sysv/linux/nios2/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/nios2/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/nios2/sysdep.S delete mode 100644 sysdeps/unix/sysv/linux/nios2/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/nios2/ucontext_i.sym delete mode 100644 sysdeps/unix/sysv/linux/nios2/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/not-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/nptl-signals.h delete mode 100644 sysdeps/unix/sysv/linux/nscd_setup_thread.c delete mode 100644 sysdeps/unix/sysv/linux/ntp_gettime.c delete mode 100644 sysdeps/unix/sysv/linux/ntp_gettimex.c delete mode 100644 sysdeps/unix/sysv/linux/open.c delete mode 100644 sysdeps/unix/sysv/linux/open64.c delete mode 100644 sysdeps/unix/sysv/linux/open_by_handle_at.c delete mode 100644 sysdeps/unix/sysv/linux/openat.c delete mode 100644 sysdeps/unix/sysv/linux/openat64.c delete mode 100644 sysdeps/unix/sysv/linux/opendir.c delete mode 100644 sysdeps/unix/sysv/linux/opensock.c delete mode 100644 sysdeps/unix/sysv/linux/pathconf.c delete mode 100644 sysdeps/unix/sysv/linux/pathconf.h delete mode 100644 sysdeps/unix/sysv/linux/paths.h delete mode 100644 sysdeps/unix/sysv/linux/pause.c delete mode 100644 sysdeps/unix/sysv/linux/personality.c delete mode 100644 sysdeps/unix/sysv/linux/poll.c delete mode 100644 sysdeps/unix/sysv/linux/posix_fadvise.c delete mode 100644 sysdeps/unix/sysv/linux/posix_fadvise64.c delete mode 100644 sysdeps/unix/sysv/linux/posix_fallocate.c delete mode 100644 sysdeps/unix/sysv/linux/posix_fallocate64.c delete mode 100644 sysdeps/unix/sysv/linux/posix_madvise.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/Makefile delete mode 100644 sysdeps/unix/sysv/linux/powerpc/Versions delete mode 100644 sysdeps/unix/sysv/linux/powerpc/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/environments.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/ioctl-types.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/ipc.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/msq.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/ppc.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/sem.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/shm.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/stat.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/termios.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/configure delete mode 100644 sysdeps/unix/sysv/linux/powerpc/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/powerpc/dl-brk.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/dl-cache.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/dl-static.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/elision-conf.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/elision-conf.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/elision-lock.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/elision-timed.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/elision-trylock.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/elision-unlock.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/force-elision.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/get_timebase_freq.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/getdents64.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/getmsg.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/gettimeofday.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/htm.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/init-first.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/ioctl.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/ipc_priv.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/kernel_termios.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/ldconfig.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/ldd-rewrite.sed delete mode 100644 sysdeps/unix/sysv/linux/powerpc/ldsodefs.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/libc-start.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/libc-vdso.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/lowlevellock.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/405/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/440/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/464/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/476/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/970/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/Versions delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/____longjmp_chk.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/a2/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/cell/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/cell/fpu/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/configure delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/e500/nofpu/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_mask.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_nomask.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/fxstat.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/glob64.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/kernel_stat.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/lockf64.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/context-e500.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/scandir64.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/ucontext_i.sym delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/970/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/____longjmp_chk.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/a2/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/cell/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/cell/fpu/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/configure delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/dl-cache.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_mask.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_nomask.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/kernel_stat.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/ld-le.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libBrokenLocale-le.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libanl-le.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libcrypt-le.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libdl-le.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libnsl-le.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libresolv-le.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/librt-le.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libthread_db-le.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libutil-le.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_create.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_delete.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_getoverr.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_gettime.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_settime.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/ucontext_i.sym delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/umount.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64le/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64le/fpu/Implies delete mode 100644 sysdeps/unix/sysv/linux/powerpc/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstack.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstacksize.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/pthread_mutex_cond_lock.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/pthread_mutex_lock.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/pthread_mutex_timedlock.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/pthread_mutex_trylock.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/putmsg.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/readdir64.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/readdir64_r.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/readelflib.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/rt-sysdep.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/powerpc/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/sysdep.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/test-gettimebasefreq.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/time.c delete mode 100644 sysdeps/unix/sysv/linux/ppoll.c delete mode 100644 sysdeps/unix/sysv/linux/pread.c delete mode 100644 sysdeps/unix/sysv/linux/pread64.c delete mode 100644 sysdeps/unix/sysv/linux/preadv.c delete mode 100644 sysdeps/unix/sysv/linux/preadv2.c delete mode 100644 sysdeps/unix/sysv/linux/preadv64.c delete mode 100644 sysdeps/unix/sysv/linux/preadv64v2.c delete mode 100644 sysdeps/unix/sysv/linux/prlimit.c delete mode 100644 sysdeps/unix/sysv/linux/prof-freq.c delete mode 100644 sysdeps/unix/sysv/linux/profil.c delete mode 100644 sysdeps/unix/sysv/linux/pselect.c delete mode 100644 sysdeps/unix/sysv/linux/pt-raise.c delete mode 100644 sysdeps/unix/sysv/linux/pthread-pids.h delete mode 100644 sysdeps/unix/sysv/linux/pthread_getaffinity.c delete mode 100644 sysdeps/unix/sysv/linux/pthread_getcpuclockid.c delete mode 100644 sysdeps/unix/sysv/linux/pthread_getname.c delete mode 100644 sysdeps/unix/sysv/linux/pthread_kill.c delete mode 100644 sysdeps/unix/sysv/linux/pthread_setaffinity.c delete mode 100644 sysdeps/unix/sysv/linux/pthread_setname.c delete mode 100644 sysdeps/unix/sysv/linux/pthread_sigmask.c delete mode 100644 sysdeps/unix/sysv/linux/pthread_sigqueue.c delete mode 100644 sysdeps/unix/sysv/linux/ptrace.c delete mode 100644 sysdeps/unix/sysv/linux/ptsname.c delete mode 100644 sysdeps/unix/sysv/linux/pwrite.c delete mode 100644 sysdeps/unix/sysv/linux/pwrite64.c delete mode 100644 sysdeps/unix/sysv/linux/pwritev.c delete mode 100644 sysdeps/unix/sysv/linux/pwritev2.c delete mode 100644 sysdeps/unix/sysv/linux/pwritev64.c delete mode 100644 sysdeps/unix/sysv/linux/pwritev64v2.c delete mode 100644 sysdeps/unix/sysv/linux/raise.c delete mode 100644 sysdeps/unix/sysv/linux/read.c delete mode 100644 sysdeps/unix/sysv/linux/readahead.c delete mode 100644 sysdeps/unix/sysv/linux/readdir64.c delete mode 100644 sysdeps/unix/sysv/linux/readdir64_r.c delete mode 100644 sysdeps/unix/sysv/linux/readonly-area.c delete mode 100644 sysdeps/unix/sysv/linux/readv.c delete mode 100644 sysdeps/unix/sysv/linux/reboot.c delete mode 100644 sysdeps/unix/sysv/linux/recv.c delete mode 100644 sysdeps/unix/sysv/linux/recvfrom.c delete mode 100644 sysdeps/unix/sysv/linux/recvmmsg.c delete mode 100644 sysdeps/unix/sysv/linux/recvmsg.c delete mode 100644 sysdeps/unix/sysv/linux/remove.c delete mode 100644 sysdeps/unix/sysv/linux/rename.c delete mode 100644 sysdeps/unix/sysv/linux/renameat.c delete mode 100644 sysdeps/unix/sysv/linux/s390/Implies delete mode 100644 sysdeps/unix/sysv/linux/s390/Makefile delete mode 100644 sysdeps/unix/sysv/linux/s390/Versions delete mode 100644 sysdeps/unix/sysv/linux/s390/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/elfclass.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/environments.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/hwcap.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/ipc.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/msq.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/sem.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/shm.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/sigaction.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/stat.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/statfs.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/typesizes.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/utmp.h delete mode 100644 sysdeps/unix/sysv/linux/s390/bits/utmpx.h delete mode 100644 sysdeps/unix/sysv/linux/s390/brk.c delete mode 100644 sysdeps/unix/sysv/linux/s390/configure delete mode 100644 sysdeps/unix/sysv/linux/s390/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/s390/dl-cache.h delete mode 100644 sysdeps/unix/sysv/linux/s390/dl-procinfo.h delete mode 100644 sysdeps/unix/sysv/linux/s390/elision-conf.c delete mode 100644 sysdeps/unix/sysv/linux/s390/elision-conf.h delete mode 100644 sysdeps/unix/sysv/linux/s390/elision-lock.c delete mode 100644 sysdeps/unix/sysv/linux/s390/elision-timed.c delete mode 100644 sysdeps/unix/sysv/linux/s390/elision-trylock.c delete mode 100644 sysdeps/unix/sysv/linux/s390/elision-unlock.c delete mode 100644 sysdeps/unix/sysv/linux/s390/force-elision.h delete mode 100644 sysdeps/unix/sysv/linux/s390/fpu/Implies delete mode 100644 sysdeps/unix/sysv/linux/s390/fpu/s_fma.c delete mode 100644 sysdeps/unix/sysv/linux/s390/htm.h delete mode 100644 sysdeps/unix/sysv/linux/s390/init-first.c delete mode 100644 sysdeps/unix/sysv/linux/s390/jmp-unwind.c delete mode 100644 sysdeps/unix/sysv/linux/s390/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/s390/ldconfig.h delete mode 100644 sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed delete mode 100644 sysdeps/unix/sysv/linux/s390/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/libc-vdso.h delete mode 100644 sysdeps/unix/sysv/linux/s390/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/s390/longjmp_chk.c delete mode 100644 sysdeps/unix/sysv/linux/s390/lowlevellock.h delete mode 100644 sysdeps/unix/sysv/linux/s390/mmap_internal.h delete mode 100644 sysdeps/unix/sysv/linux/s390/nldbl-abi.h delete mode 100644 sysdeps/unix/sysv/linux/s390/opensock.c delete mode 100644 sysdeps/unix/sysv/linux/s390/pt-longjmp.c delete mode 100644 sysdeps/unix/sysv/linux/s390/pt-vfork.S delete mode 100644 sysdeps/unix/sysv/linux/s390/pthread_mutex_cond_lock.c delete mode 100644 sysdeps/unix/sysv/linux/s390/pthread_mutex_lock.c delete mode 100644 sysdeps/unix/sysv/linux/s390/pthread_mutex_timedlock.c delete mode 100644 sysdeps/unix/sysv/linux/s390/pthread_mutex_trylock.c delete mode 100644 sysdeps/unix/sysv/linux/s390/readelflib.c delete mode 100644 sysdeps/unix/sysv/linux/s390/rt-sysdep.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/Makefile delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/Versions delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/clone.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/getutent.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/getutent_r.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/getutid.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/getutid_r.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/getutline.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/getutline_r.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/getutmp.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/getutxent.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/getutxid.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/getutxline.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/login.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/login32.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/makecontext.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/posix_fadvise64.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/pututxline.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/updwtmp.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/updwtmpx.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/utmp-compat.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/utmp-convert.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/utmp32.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/utmp32.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/utmpx-convert.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/Implies delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/Makefile delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/Versions delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/clone.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/configure delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/dl-cache.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/makecontext.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/timer_create.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/timer_delete.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/timer_getoverr.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/timer_gettime.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/timer_settime.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/s390/sa_len.c delete mode 100644 sysdeps/unix/sysv/linux/s390/semtimedop.c delete mode 100644 sysdeps/unix/sysv/linux/s390/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/s390/sys/elf.h delete mode 100644 sysdeps/unix/sysv/linux/s390/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/s390/sys/ptrace.h delete mode 100644 sysdeps/unix/sysv/linux/s390/sys/ucontext.h delete mode 100644 sysdeps/unix/sysv/linux/s390/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/s390/sysconf.c delete mode 100644 sysdeps/unix/sysv/linux/s390/system.c delete mode 100644 sysdeps/unix/sysv/linux/s390/ucontext_i.sym delete mode 100644 sysdeps/unix/sysv/linux/sa_len.c delete mode 100644 sysdeps/unix/sysv/linux/safe-fatal.h delete mode 100644 sysdeps/unix/sysv/linux/sched_getaffinity.c delete mode 100644 sysdeps/unix/sysv/linux/sched_getcpu.c delete mode 100644 sysdeps/unix/sysv/linux/sched_setaffinity.c delete mode 100644 sysdeps/unix/sysv/linux/scsi/scsi.h delete mode 100644 sysdeps/unix/sysv/linux/scsi/scsi_ioctl.h delete mode 100644 sysdeps/unix/sysv/linux/scsi/sg.h delete mode 100644 sysdeps/unix/sysv/linux/segfault.c delete mode 100644 sysdeps/unix/sysv/linux/select.c delete mode 100644 sysdeps/unix/sysv/linux/semctl.c delete mode 100644 sysdeps/unix/sysv/linux/semget.c delete mode 100644 sysdeps/unix/sysv/linux/semop.c delete mode 100644 sysdeps/unix/sysv/linux/semtimedop.c delete mode 100644 sysdeps/unix/sysv/linux/send.c delete mode 100644 sysdeps/unix/sysv/linux/sendmmsg.c delete mode 100644 sysdeps/unix/sysv/linux/sendmsg.c delete mode 100644 sysdeps/unix/sysv/linux/sendto.c delete mode 100644 sysdeps/unix/sysv/linux/setegid.c delete mode 100644 sysdeps/unix/sysv/linux/seteuid.c delete mode 100644 sysdeps/unix/sysv/linux/setgid.c delete mode 100644 sysdeps/unix/sysv/linux/setgroups.c delete mode 100644 sysdeps/unix/sysv/linux/sethostid.c delete mode 100644 sysdeps/unix/sysv/linux/setipv4sourcefilter.c delete mode 100644 sysdeps/unix/sysv/linux/setregid.c delete mode 100644 sysdeps/unix/sysv/linux/setresgid.c delete mode 100644 sysdeps/unix/sysv/linux/setresuid.c delete mode 100644 sysdeps/unix/sysv/linux/setreuid.c delete mode 100644 sysdeps/unix/sysv/linux/setrlimit.c delete mode 100644 sysdeps/unix/sysv/linux/setrlimit64.c delete mode 100644 sysdeps/unix/sysv/linux/setsockopt.c delete mode 100644 sysdeps/unix/sysv/linux/setsourcefilter.c delete mode 100644 sysdeps/unix/sysv/linux/setuid.c delete mode 100644 sysdeps/unix/sysv/linux/sh/Implies delete mode 100644 sysdeps/unix/sysv/linux/sh/Makefile delete mode 100644 sysdeps/unix/sysv/linux/sh/Versions delete mode 100644 sysdeps/unix/sysv/linux/sh/____longjmp_chk.S delete mode 100644 sysdeps/unix/sysv/linux/sh/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/sh/atomic-machine.h delete mode 100644 sysdeps/unix/sysv/linux/sh/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/sh/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/sh/bits/shm.h delete mode 100644 sysdeps/unix/sysv/linux/sh/brk.c delete mode 100644 sysdeps/unix/sysv/linux/sh/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/sh/clone.S delete mode 100644 sysdeps/unix/sysv/linux/sh/configure delete mode 100644 sysdeps/unix/sysv/linux/sh/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/sh/fcntl.c delete mode 100644 sysdeps/unix/sysv/linux/sh/fxstat.c delete mode 100644 sysdeps/unix/sysv/linux/sh/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/sh/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/sh/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/sh/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/sh/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/sh/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/sh/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/sh/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/sh/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/sh/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/sh/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/sh/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/sh/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/sh/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/sh/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/sh/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/sh/lockf64.c delete mode 100644 sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h delete mode 100644 sysdeps/unix/sysv/linux/sh/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/sh/makecontext.S delete mode 100644 sysdeps/unix/sysv/linux/sh/pipe.S delete mode 100644 sysdeps/unix/sysv/linux/sh/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/sh/pt-vfork.S delete mode 100644 sysdeps/unix/sysv/linux/sh/sh3/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/sh/sh3/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/sh/sh3/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/sh/sh3/ucontext_i.sym delete mode 100644 sysdeps/unix/sysv/linux/sh/sh4/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/sh/sh4/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/sh/sh4/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/sh/sh4/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/sh/sh4/ucontext_i.sym delete mode 100644 sysdeps/unix/sysv/linux/sh/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/sh/sigaltstack-offsets.sym delete mode 100644 sysdeps/unix/sysv/linux/sh/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/sh/smp.h delete mode 100644 sysdeps/unix/sysv/linux/sh/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/sh/sys/ucontext.h delete mode 100644 sysdeps/unix/sysv/linux/sh/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/sh/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/sh/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/sh/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/sh/sysdep.S delete mode 100644 sysdeps/unix/sysv/linux/sh/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/sh/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/sh/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/shm-directory.c delete mode 100644 sysdeps/unix/sysv/linux/shmat.c delete mode 100644 sysdeps/unix/sysv/linux/shmctl.c delete mode 100644 sysdeps/unix/sysv/linux/shmdt.c delete mode 100644 sysdeps/unix/sysv/linux/shmget.c delete mode 100644 sysdeps/unix/sysv/linux/shutdown.c delete mode 100644 sysdeps/unix/sysv/linux/sigaction.c delete mode 100644 sysdeps/unix/sysv/linux/siglist.h delete mode 100644 sysdeps/unix/sysv/linux/signal.c delete mode 100644 sysdeps/unix/sysv/linux/signalfd.c delete mode 100644 sysdeps/unix/sysv/linux/sigpending.c delete mode 100644 sysdeps/unix/sysv/linux/sigprocmask.c delete mode 100644 sysdeps/unix/sysv/linux/sigqueue.c delete mode 100644 sysdeps/unix/sysv/linux/sigreturn.c delete mode 100644 sysdeps/unix/sysv/linux/sigset-cvt-mask.h delete mode 100644 sysdeps/unix/sysv/linux/sigsetops.h delete mode 100644 sysdeps/unix/sysv/linux/sigstack.c delete mode 100644 sysdeps/unix/sysv/linux/sigsuspend.c delete mode 100644 sysdeps/unix/sysv/linux/sigtimedwait.c delete mode 100644 sysdeps/unix/sysv/linux/sigwait.c delete mode 100644 sysdeps/unix/sysv/linux/sigwaitinfo.c delete mode 100644 sysdeps/unix/sysv/linux/sizes.h delete mode 100644 sysdeps/unix/sysv/linux/socket.c delete mode 100644 sysdeps/unix/sysv/linux/socketcall.h delete mode 100644 sysdeps/unix/sysv/linux/socketpair.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/Implies delete mode 100644 sysdeps/unix/sysv/linux/sparc/Makefile delete mode 100644 sysdeps/unix/sysv/linux/sparc/Versions delete mode 100644 sysdeps/unix/sysv/linux/sparc/a.out.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/aio_cancel.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/a.out.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/environments.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/epoll.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/errno.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/eventfd.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/inotify.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/ioctls.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/ipc.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/local_lim.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/long-double.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/msq.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/poll.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/resource.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/sem.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/setjmp.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/shm.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/sigaction.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/sigcontext.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/siginfo-consts-arch.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/signalfd.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/signum.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/sigstack.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/socket_type.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/stat.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/termios.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/timerfd.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/typesizes.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/wordsize.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/configure delete mode 100644 sysdeps/unix/sysv/linux/sparc/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/sparc/dl-cache.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/getrlimit64.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/getshmlba.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/getsysstats.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/kernel_termios.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed delete mode 100644 sysdeps/unix/sysv/linux/sparc/lowlevellock.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/pt-vfork.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/readelflib.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/rt-sysdep.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/Implies delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/Makefile delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/Versions delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/brk.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/clone.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/fpu/Implies delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/fxstat.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/getdents64.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/kernel_stat.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/lockf64.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/makecontext.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/nldbl-abi.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/pipe.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/readdir64_r.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/scandir64.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/fpu/Implies delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/fpu/multiarch/Implies delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/get_clockfreq.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/Implies delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/Makefile delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/Versions delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/__longjmp.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/__start_context.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/brk.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/bsd-_setjmp.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/bsd-setjmp.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/clone.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/configure delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/dl-brk.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/dl-cache.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/dl-fxstatat64.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/personality.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sigjmp.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sigpending.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sigprocmask.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sizes.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/time.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/timer_getoverr.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/timer_gettime.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/timer_settime.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/wordexp.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/xstatconv.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sys/ptrace.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sys/trap.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sys/ucontext.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/sysdep.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/sparc/system.c delete mode 100644 sysdeps/unix/sysv/linux/spawni.c delete mode 100644 sysdeps/unix/sysv/linux/speed.c delete mode 100644 sysdeps/unix/sysv/linux/splice.c delete mode 100644 sysdeps/unix/sysv/linux/statfs64.c delete mode 100644 sysdeps/unix/sysv/linux/statvfs.c delete mode 100644 sysdeps/unix/sysv/linux/statvfs64.c delete mode 100644 sysdeps/unix/sysv/linux/sync_file_range.c delete mode 100644 sysdeps/unix/sysv/linux/sys/acct.h delete mode 100644 sysdeps/unix/sysv/linux/sys/epoll.h delete mode 100644 sysdeps/unix/sysv/linux/sys/eventfd.h delete mode 100644 sysdeps/unix/sysv/linux/sys/fanotify.h delete mode 100644 sysdeps/unix/sysv/linux/sys/fsuid.h delete mode 100644 sysdeps/unix/sysv/linux/sys/inotify.h delete mode 100644 sysdeps/unix/sysv/linux/sys/kd.h delete mode 100644 sysdeps/unix/sysv/linux/sys/klog.h delete mode 100644 sysdeps/unix/sysv/linux/sys/mount.h delete mode 100644 sysdeps/unix/sysv/linux/sys/pci.h delete mode 100644 sysdeps/unix/sysv/linux/sys/personality.h delete mode 100644 sysdeps/unix/sysv/linux/sys/prctl.h delete mode 100644 sysdeps/unix/sysv/linux/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/sys/ptrace.h delete mode 100644 sysdeps/unix/sysv/linux/sys/quota.h delete mode 100644 sysdeps/unix/sysv/linux/sys/raw.h delete mode 100644 sysdeps/unix/sysv/linux/sys/reboot.h delete mode 100644 sysdeps/unix/sysv/linux/sys/signalfd.h delete mode 100644 sysdeps/unix/sysv/linux/sys/soundcard.h delete mode 100644 sysdeps/unix/sysv/linux/sys/swap.h delete mode 100644 sysdeps/unix/sysv/linux/sys/syscall.h delete mode 100644 sysdeps/unix/sysv/linux/sys/sysctl.h delete mode 100644 sysdeps/unix/sysv/linux/sys/sysinfo.h delete mode 100644 sysdeps/unix/sysv/linux/sys/timerfd.h delete mode 100644 sysdeps/unix/sysv/linux/sys/timex.h delete mode 100644 sysdeps/unix/sysv/linux/sys/ttydefaults.h delete mode 100644 sysdeps/unix/sysv/linux/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/sys/vt.h delete mode 100644 sysdeps/unix/sysv/linux/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/sysconf.c delete mode 100644 sysdeps/unix/sysv/linux/sysctl.c delete mode 100644 sysdeps/unix/sysv/linux/sysctl.mk delete mode 100644 sysdeps/unix/sysv/linux/sysdep-vdso.h delete mode 100644 sysdeps/unix/sysv/linux/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/syslog.c delete mode 100644 sysdeps/unix/sysv/linux/system.c delete mode 100644 sysdeps/unix/sysv/linux/tcdrain.c delete mode 100644 sysdeps/unix/sysv/linux/tcflow.c delete mode 100644 sysdeps/unix/sysv/linux/tcflush.c delete mode 100644 sysdeps/unix/sysv/linux/tcgetattr.c delete mode 100644 sysdeps/unix/sysv/linux/tcgetpgrp.c delete mode 100644 sysdeps/unix/sysv/linux/tcsendbrk.c delete mode 100644 sysdeps/unix/sysv/linux/tcsetattr.c delete mode 100644 sysdeps/unix/sysv/linux/tcsetpgrp.c delete mode 100644 sysdeps/unix/sysv/linux/tee.c delete mode 100644 sysdeps/unix/sysv/linux/termio.h delete mode 100644 sysdeps/unix/sysv/linux/test-errno-linux.c delete mode 100644 sysdeps/unix/sysv/linux/tile/Implies delete mode 100644 sysdeps/unix/sysv/linux/tile/Makefile delete mode 100644 sysdeps/unix/sysv/linux/tile/Versions delete mode 100644 sysdeps/unix/sysv/linux/tile/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/tile/bits/environments.h delete mode 100644 sysdeps/unix/sysv/linux/tile/bits/local_lim.h delete mode 100644 sysdeps/unix/sysv/linux/tile/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/tile/bits/sigaction.h delete mode 100644 sysdeps/unix/sysv/linux/tile/bits/siginfo-arch.h delete mode 100644 sysdeps/unix/sysv/linux/tile/bits/siginfo-consts-arch.h delete mode 100644 sysdeps/unix/sysv/linux/tile/cacheflush.c delete mode 100644 sysdeps/unix/sysv/linux/tile/clone.S delete mode 100644 sysdeps/unix/sysv/linux/tile/dl-static.c delete mode 100644 sysdeps/unix/sysv/linux/tile/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/tile/init-first.c delete mode 100644 sysdeps/unix/sysv/linux/tile/ipc_priv.h delete mode 100644 sysdeps/unix/sysv/linux/tile/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/tile/ldsodefs.h delete mode 100644 sysdeps/unix/sysv/linux/tile/libc-vdso.h delete mode 100644 sysdeps/unix/sysv/linux/tile/makecontext.c delete mode 100644 sysdeps/unix/sysv/linux/tile/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/tile/pt-vfork.c delete mode 100644 sysdeps/unix/sysv/linux/tile/set_dataplane.c delete mode 100644 sysdeps/unix/sysv/linux/tile/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/tile/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/tile/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/tile/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/tile/sys/cachectl.h delete mode 100644 sysdeps/unix/sysv/linux/tile/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/tile/sys/ptrace.h delete mode 100644 sysdeps/unix/sysv/linux/tile/sys/reg.h delete mode 100644 sysdeps/unix/sysv/linux/tile/sys/ucontext.h delete mode 100644 sysdeps/unix/sysv/linux/tile/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/tile/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/tile/sysconf.c delete mode 100644 sysdeps/unix/sysv/linux/tile/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/tile/sysdep.c delete mode 100644 sysdeps/unix/sysv/linux/tile/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/Makefile delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/configure delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/ioctl.S delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/ldconfig.h delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/ldd-rewrite.sed delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/sched_getcpu.c delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/Implies delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/Makefile delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Implies delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Makefile delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/Implies delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/ldconfig.h delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/tile/ucontext_i.h delete mode 100644 sysdeps/unix/sysv/linux/tile/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/time.c delete mode 100644 sysdeps/unix/sysv/linux/timer_create.c delete mode 100644 sysdeps/unix/sysv/linux/timer_delete.c delete mode 100644 sysdeps/unix/sysv/linux/timer_getoverr.c delete mode 100644 sysdeps/unix/sysv/linux/timer_gettime.c delete mode 100644 sysdeps/unix/sysv/linux/timer_routines.c delete mode 100644 sysdeps/unix/sysv/linux/timer_settime.c delete mode 100644 sysdeps/unix/sysv/linux/times.c delete mode 100644 sysdeps/unix/sysv/linux/timespec_get.c delete mode 100644 sysdeps/unix/sysv/linux/truncate.c delete mode 100644 sysdeps/unix/sysv/linux/truncate64.c delete mode 100644 sysdeps/unix/sysv/linux/tst-affinity-pid.c delete mode 100644 sysdeps/unix/sysv/linux/tst-affinity.c delete mode 100644 sysdeps/unix/sysv/linux/tst-align-clone.c delete mode 100644 sysdeps/unix/sysv/linux/tst-clone.c delete mode 100644 sysdeps/unix/sysv/linux/tst-clone2.c delete mode 100644 sysdeps/unix/sysv/linux/tst-fallocate-common.c delete mode 100644 sysdeps/unix/sysv/linux/tst-fallocate.c delete mode 100644 sysdeps/unix/sysv/linux/tst-fallocate64.c delete mode 100644 sysdeps/unix/sysv/linux/tst-fanotify.c delete mode 100644 sysdeps/unix/sysv/linux/tst-getpid1.c delete mode 100644 sysdeps/unix/sysv/linux/tst-personality.c delete mode 100644 sysdeps/unix/sysv/linux/tst-quota.c delete mode 100644 sysdeps/unix/sysv/linux/tst-setgetname.c delete mode 100644 sysdeps/unix/sysv/linux/tst-skeleton-affinity.c delete mode 100644 sysdeps/unix/sysv/linux/tst-skeleton-thread-affinity.c delete mode 100644 sysdeps/unix/sysv/linux/tst-sync_file_range.c delete mode 100644 sysdeps/unix/sysv/linux/tst-thread-affinity-pthread.c delete mode 100644 sysdeps/unix/sysv/linux/tst-thread-affinity-pthread2.c delete mode 100644 sysdeps/unix/sysv/linux/tst-thread-affinity-sched.c delete mode 100644 sysdeps/unix/sysv/linux/ttyname.c delete mode 100644 sysdeps/unix/sysv/linux/ttyname.h delete mode 100644 sysdeps/unix/sysv/linux/ttyname_r.c delete mode 100644 sysdeps/unix/sysv/linux/ualarm.c delete mode 100644 sysdeps/unix/sysv/linux/umount.S delete mode 100644 sysdeps/unix/sysv/linux/umount2.S delete mode 100644 sysdeps/unix/sysv/linux/unlockpt.c delete mode 100644 sysdeps/unix/sysv/linux/updwtmp.c delete mode 100644 sysdeps/unix/sysv/linux/ustat.c delete mode 100644 sysdeps/unix/sysv/linux/utimensat.c delete mode 100644 sysdeps/unix/sysv/linux/utimes.c delete mode 100644 sysdeps/unix/sysv/linux/utmp_file.c delete mode 100644 sysdeps/unix/sysv/linux/vfork.c delete mode 100644 sysdeps/unix/sysv/linux/vmsplice.c delete mode 100644 sysdeps/unix/sysv/linux/wait.c delete mode 100644 sysdeps/unix/sysv/linux/wait3.c delete mode 100644 sysdeps/unix/sysv/linux/waitid.c delete mode 100644 sysdeps/unix/sysv/linux/waitpid.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/Versions delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/aio_read.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/aio_read64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/aio_write.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/aio_write64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/dl-fxstatat64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/fstatfs64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/fstatvfs.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/fstatvfs64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/fxstat.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/fxstat64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/fxstatat64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/getdents.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/getdents64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/getdirentries.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/getdirentries64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/glob64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/internal_statvfs64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/lio_listio.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/lio_listio64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/lxstat.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/lxstat64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/openat.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/openat64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/readdir.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/readdir64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/readdir64_r.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/sendfile64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/statfs64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/statvfs.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/statvfs64.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/xstat64.c delete mode 100644 sysdeps/unix/sysv/linux/write.c delete mode 100644 sysdeps/unix/sysv/linux/writev.c delete mode 100644 sysdeps/unix/sysv/linux/x86/Implies delete mode 100644 sysdeps/unix/sysv/linux/x86/Makefile delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/a.out.h delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/environments.h delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/epoll.h delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/fcntl.h delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/ipctypes.h delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/mman.h delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/msq.h delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/sem.h delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/shm.h delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/sigcontext.h delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/stat.h delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/sysctl.h delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/typesizes.h delete mode 100644 sysdeps/unix/sysv/linux/x86/elision-conf.c delete mode 100644 sysdeps/unix/sysv/linux/x86/elision-conf.h delete mode 100644 sysdeps/unix/sysv/linux/x86/elision-lock.c delete mode 100644 sysdeps/unix/sysv/linux/x86/elision-timed.c delete mode 100644 sysdeps/unix/sysv/linux/x86/elision-trylock.c delete mode 100644 sysdeps/unix/sysv/linux/x86/elision-unlock.c delete mode 100644 sysdeps/unix/sysv/linux/x86/force-elision.h delete mode 100644 sysdeps/unix/sysv/linux/x86/gettimeofday.c delete mode 100644 sysdeps/unix/sysv/linux/x86/hle.h delete mode 100644 sysdeps/unix/sysv/linux/x86/libc-vdso.h delete mode 100644 sysdeps/unix/sysv/linux/x86/pthread_mutex_cond_lock.c delete mode 100644 sysdeps/unix/sysv/linux/x86/pthread_mutex_lock.c delete mode 100644 sysdeps/unix/sysv/linux/x86/pthread_mutex_timedlock.c delete mode 100644 sysdeps/unix/sysv/linux/x86/pthread_mutex_trylock.c delete mode 100644 sysdeps/unix/sysv/linux/x86/sys/debugreg.h delete mode 100644 sysdeps/unix/sysv/linux/x86/sys/elf.h delete mode 100644 sysdeps/unix/sysv/linux/x86/sys/io.h delete mode 100644 sysdeps/unix/sysv/linux/x86/sys/perm.h delete mode 100644 sysdeps/unix/sysv/linux/x86/sys/procfs.h delete mode 100644 sysdeps/unix/sysv/linux/x86/sys/reg.h delete mode 100644 sysdeps/unix/sysv/linux/x86/sys/ucontext.h delete mode 100644 sysdeps/unix/sysv/linux/x86/sys/user.h delete mode 100644 sysdeps/unix/sysv/linux/x86/sys/vm86.h delete mode 100644 sysdeps/unix/sysv/linux/x86/sysconf.c delete mode 100644 sysdeps/unix/sysv/linux/x86/time.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/Makefile delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/configure delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/mmap_internal.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/x86_64/Implies delete mode 100644 sysdeps/unix/sysv/linux/x86_64/Makefile delete mode 100644 sysdeps/unix/sysv/linux/x86_64/Versions delete mode 100644 sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/__start_context.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/arch-fork.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/brk.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/cancellation.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/clone.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/compat-timer.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/configure delete mode 100644 sysdeps/unix/sysv/linux/x86_64/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/x86_64/dl-cache.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/dl-procinfo.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/dl-procinfo.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/get_clockfreq.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/getcontext.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/init-first.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/ipc_priv.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/kernel-features.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/kernel_stat.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/ldconfig.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed delete mode 100644 sysdeps/unix/sysv/linux/x86_64/libc-cancellation.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/libmvec.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/librt-cancellation.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/lll_timedlock_wait.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/lll_timedwait_tid.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/lowlevellock.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/lowlevellock.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/makecontext.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/profil-counter.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/pthread_setaffinity.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/readelflib.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/register-dump.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/sched_setaffinity.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/setcontext.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/sigaction.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/sigaltstack-offsets.sym delete mode 100644 sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/sigpending.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/sigprocmask.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/swapcontext.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/syscall.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/sysdep.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/timer_create.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/timer_delete.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/timer_getoverr.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/timer_gettime.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/timer_settime.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/ucontext_i.sym delete mode 100644 sysdeps/unix/sysv/linux/x86_64/umount.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/Implies delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/Makefile delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/arch_prctl.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/configure delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/configure.ac delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/dl-cache.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/fts.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/fts64.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/ftw.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/ftw64.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/getcpu.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/glob.c delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/llseek.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/lseek.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/lseek64.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/shlib-versions delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/sysctl.mk delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/sysdep.h delete mode 100644 sysdeps/unix/sysv/linux/x86_64/x32/times.c delete mode 100644 sysdeps/unix/sysv/linux/xmknod.c delete mode 100644 sysdeps/unix/sysv/linux/xmknodat.c delete mode 100644 sysdeps/unix/sysv/linux/xstat.c delete mode 100644 sysdeps/unix/sysv/linux/xstat64.c delete mode 100644 sysdeps/unix/sysv/linux/xstatconv.c delete mode 100644 sysdeps/unix/sysv/linux/xstatconv.h delete mode 100644 sysdeps/unix/x86_64/sysdep.S delete mode 100644 sysdeps/unix/x86_64/sysdep.h delete mode 100644 sysdeps/wordsize-32/Versions delete mode 100644 sysdeps/wordsize-32/bits/wordsize.h delete mode 100644 sysdeps/wordsize-32/divdi3-symbol-hacks.h delete mode 100644 sysdeps/wordsize-32/divdi3.c delete mode 100644 sysdeps/wordsize-32/llabs.c delete mode 100644 sysdeps/wordsize-32/lldiv.c delete mode 100644 sysdeps/wordsize-32/strtoimax.c delete mode 100644 sysdeps/wordsize-32/strtoumax.c delete mode 100644 sysdeps/wordsize-32/wcstoimax.c delete mode 100644 sysdeps/wordsize-32/wcstoumax.c delete mode 100644 sysdeps/wordsize-64/Makefile delete mode 100644 sysdeps/wordsize-64/Versions delete mode 100644 sysdeps/wordsize-64/bits/wordsize.h delete mode 100644 sysdeps/wordsize-64/fts.c delete mode 100644 sysdeps/wordsize-64/fts64.c delete mode 100644 sysdeps/wordsize-64/ftw.c delete mode 100644 sysdeps/wordsize-64/ftw64.c delete mode 100644 sysdeps/wordsize-64/glob.c delete mode 100644 sysdeps/wordsize-64/glob64.c delete mode 100644 sysdeps/wordsize-64/labs.c delete mode 100644 sysdeps/wordsize-64/ldiv.c delete mode 100644 sysdeps/wordsize-64/strtoimax.c delete mode 100644 sysdeps/wordsize-64/strtol.c delete mode 100644 sysdeps/wordsize-64/strtol_l.c delete mode 100644 sysdeps/wordsize-64/strtoll.c delete mode 100644 sysdeps/wordsize-64/strtoll_l.c delete mode 100644 sysdeps/wordsize-64/strtoul.c delete mode 100644 sysdeps/wordsize-64/strtoul_l.c delete mode 100644 sysdeps/wordsize-64/strtoull.c delete mode 100644 sysdeps/wordsize-64/strtoull_l.c delete mode 100644 sysdeps/wordsize-64/strtoumax.c delete mode 100644 sysdeps/wordsize-64/tst-writev.c delete mode 100644 sysdeps/wordsize-64/wcstoimax.c delete mode 100644 sysdeps/wordsize-64/wcstol.c delete mode 100644 sysdeps/wordsize-64/wcstol_l.c delete mode 100644 sysdeps/wordsize-64/wcstoll.c delete mode 100644 sysdeps/wordsize-64/wcstoll_l.c delete mode 100644 sysdeps/wordsize-64/wcstoul.c delete mode 100644 sysdeps/wordsize-64/wcstoul_l.c delete mode 100644 sysdeps/wordsize-64/wcstoull.c delete mode 100644 sysdeps/wordsize-64/wcstoull_l.c delete mode 100644 sysdeps/wordsize-64/wcstoumax.c delete mode 100644 sysdeps/x86/Makefile delete mode 100644 sysdeps/x86/Versions delete mode 100644 sysdeps/x86/bits/byteswap-16.h delete mode 100644 sysdeps/x86/bits/byteswap.h delete mode 100644 sysdeps/x86/bits/endian.h delete mode 100644 sysdeps/x86/bits/flt-eval-method.h delete mode 100644 sysdeps/x86/bits/fp-logb.h delete mode 100644 sysdeps/x86/bits/huge_vall.h delete mode 100644 sysdeps/x86/bits/link.h delete mode 100644 sysdeps/x86/bits/select.h delete mode 100644 sysdeps/x86/bits/semaphore.h delete mode 100644 sysdeps/x86/bits/setjmp.h delete mode 100644 sysdeps/x86/bits/string.h delete mode 100644 sysdeps/x86/bits/wordsize.h delete mode 100644 sysdeps/x86/bits/xtitypes.h delete mode 100644 sysdeps/x86/cacheinfo.c delete mode 100644 sysdeps/x86/cpu-features-offsets.sym delete mode 100644 sysdeps/x86/cpu-features.c delete mode 100644 sysdeps/x86/cpu-features.h delete mode 100644 sysdeps/x86/dl-get-cpu-features.c delete mode 100644 sysdeps/x86/dl-hwcap.h delete mode 100644 sysdeps/x86/dl-procinfo.c delete mode 100644 sysdeps/x86/dl-procinfo.h delete mode 100644 sysdeps/x86/elide.h delete mode 100644 sysdeps/x86/fpu/Makefile delete mode 100644 sysdeps/x86/fpu/bits/fenv.h delete mode 100644 sysdeps/x86/fpu/bits/math-vector.h delete mode 100644 sysdeps/x86/fpu/bits/mathinline.h delete mode 100644 sysdeps/x86/fpu/fix-fp-int-compare-invalid.h delete mode 100644 sysdeps/x86/fpu/include/bits/fenv.h delete mode 100644 sysdeps/x86/fpu/powl_helper.c delete mode 100644 sysdeps/x86/fpu/test-fenv-clear-sse.c delete mode 100644 sysdeps/x86/fpu/test-fenv-sse-2.c delete mode 100644 sysdeps/x86/fpu/test-fenv-sse.c delete mode 100644 sysdeps/x86/fpu/test-fenv-x87.c delete mode 100644 sysdeps/x86/fpu/test-flt-eval-method-387.c delete mode 100644 sysdeps/x86/fpu/test-flt-eval-method-sse.c delete mode 100644 sysdeps/x86/fpu/test-math-vector-sincos.h delete mode 100644 sysdeps/x86/fpu_control.h delete mode 100644 sysdeps/x86/init-arch.h delete mode 100644 sysdeps/x86/libc-start.c delete mode 100644 sysdeps/x86/linkmap.h delete mode 100644 sysdeps/x86/nptl/bits/pthreadtypes-arch.h delete mode 100644 sysdeps/x86/string_private.h delete mode 100644 sysdeps/x86/tininess.h delete mode 100644 sysdeps/x86/tst-get-cpu-features-static.c delete mode 100644 sysdeps/x86/tst-get-cpu-features.c delete mode 100644 sysdeps/x86_64/64/Implies-after delete mode 100644 sysdeps/x86_64/Implies delete mode 100644 sysdeps/x86_64/Makefile delete mode 100644 sysdeps/x86_64/Versions delete mode 100644 sysdeps/x86_64/____longjmp_chk.S delete mode 100644 sysdeps/x86_64/__longjmp.S delete mode 100644 sysdeps/x86_64/_mcount.S delete mode 100644 sysdeps/x86_64/abort-instr.h delete mode 100644 sysdeps/x86_64/add_n.S delete mode 100644 sysdeps/x86_64/addmul_1.S delete mode 100644 sysdeps/x86_64/atomic-machine.h delete mode 100644 sysdeps/x86_64/backtrace.c delete mode 100644 sysdeps/x86_64/bsd-_setjmp.S delete mode 100644 sysdeps/x86_64/bsd-setjmp.S delete mode 100644 sysdeps/x86_64/bzero.S delete mode 100644 sysdeps/x86_64/configure delete mode 100644 sysdeps/x86_64/configure.ac delete mode 100644 sysdeps/x86_64/crti.S delete mode 100644 sysdeps/x86_64/crtn.S delete mode 100644 sysdeps/x86_64/dl-irel.h delete mode 100644 sysdeps/x86_64/dl-lookupcfg.h delete mode 100644 sysdeps/x86_64/dl-machine.h delete mode 100644 sysdeps/x86_64/dl-procinfo.c delete mode 100644 sysdeps/x86_64/dl-runtime.c delete mode 100644 sysdeps/x86_64/dl-tls.h delete mode 100644 sysdeps/x86_64/dl-tlsdesc.S delete mode 100644 sysdeps/x86_64/dl-tlsdesc.h delete mode 100644 sysdeps/x86_64/dl-trampoline.S delete mode 100644 sysdeps/x86_64/dl-trampoline.h delete mode 100644 sysdeps/x86_64/ffs.c delete mode 100644 sysdeps/x86_64/ffsll.c delete mode 100644 sysdeps/x86_64/fpu/Implies delete mode 100644 sysdeps/x86_64/fpu/Makefile delete mode 100644 sysdeps/x86_64/fpu/Versions delete mode 100644 sysdeps/x86_64/fpu/e_acosl.c delete mode 100644 sysdeps/x86_64/fpu/e_atan2l.c delete mode 100644 sysdeps/x86_64/fpu/e_exp10l.S delete mode 100644 sysdeps/x86_64/fpu/e_exp2l.S delete mode 100644 sysdeps/x86_64/fpu/e_expf.S delete mode 100644 sysdeps/x86_64/fpu/e_expl.S delete mode 100644 sysdeps/x86_64/fpu/e_fmodl.S delete mode 100644 sysdeps/x86_64/fpu/e_ilogbl.S delete mode 100644 sysdeps/x86_64/fpu/e_log10l.S delete mode 100644 sysdeps/x86_64/fpu/e_log2l.S delete mode 100644 sysdeps/x86_64/fpu/e_logl.S delete mode 100644 sysdeps/x86_64/fpu/e_powl.S delete mode 100644 sysdeps/x86_64/fpu/e_remainderl.S delete mode 100644 sysdeps/x86_64/fpu/e_scalbl.S delete mode 100644 sysdeps/x86_64/fpu/e_sqrt.c delete mode 100644 sysdeps/x86_64/fpu/e_sqrtf.c delete mode 100644 sysdeps/x86_64/fpu/e_sqrtl.c delete mode 100644 sysdeps/x86_64/fpu/fclrexcpt.c delete mode 100644 sysdeps/x86_64/fpu/fedisblxcpt.c delete mode 100644 sysdeps/x86_64/fpu/feenablxcpt.c delete mode 100644 sysdeps/x86_64/fpu/fegetenv.c delete mode 100644 sysdeps/x86_64/fpu/fegetexcept.c delete mode 100644 sysdeps/x86_64/fpu/fegetmode.c delete mode 100644 sysdeps/x86_64/fpu/fegetround.c delete mode 100644 sysdeps/x86_64/fpu/feholdexcpt.c delete mode 100644 sysdeps/x86_64/fpu/fesetenv.c delete mode 100644 sysdeps/x86_64/fpu/fesetexcept.c delete mode 100644 sysdeps/x86_64/fpu/fesetmode.c delete mode 100644 sysdeps/x86_64/fpu/fesetround.c delete mode 100644 sysdeps/x86_64/fpu/feupdateenv.c delete mode 100644 sysdeps/x86_64/fpu/fgetexcptflg.c delete mode 100644 sysdeps/x86_64/fpu/fraiseexcpt.c delete mode 100644 sysdeps/x86_64/fpu/fsetexcptflg.c delete mode 100644 sysdeps/x86_64/fpu/ftestexcept.c delete mode 100644 sysdeps/x86_64/fpu/libm-test-ulps delete mode 100644 sysdeps/x86_64/fpu/libm-test-ulps-name delete mode 100644 sysdeps/x86_64/fpu/math-tests-arch.h delete mode 100644 sysdeps/x86_64/fpu/math_ldbl.h delete mode 100644 sysdeps/x86_64/fpu/math_private.h delete mode 100644 sysdeps/x86_64/fpu/multiarch/Makefile delete mode 100644 sysdeps/x86_64/fpu/multiarch/doasin-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/dosincos-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/e_asin-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/e_asin.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/e_atan2-avx.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/e_atan2-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/e_atan2.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/e_exp-avx.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/e_exp.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/e_log-avx.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/e_log-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/e_log.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/e_pow.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/halfulp-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/mpa-avx.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/mpa-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/mpatan-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/mpatan2-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/mpexp-avx.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/mpexp-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/mplog-avx.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/mplog-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/mpsqrt-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/mptan-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_atan-avx.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_atan-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_atan.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_ceil-c.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_ceil.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_ceilf-c.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_ceilf.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_floor-c.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_floor.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_floorf-c.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_floorf.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_fma.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_fmaf.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_nearbyint-c.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_nearbyint.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_nearbyintf-c.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_rint-c.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_rint.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_rintf-c.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_rintf.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_sin-avx.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_sin-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_sin.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_tan-avx.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_tan-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/s_tan.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/sincos32-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/slowexp-avx.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/slowexp-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/slowpow-fma4.c delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core_sse4.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core_avx2.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core_avx512.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core_sse4.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core_avx2.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core_avx512.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log2_core_sse4.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log4_core_avx2.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log8_core_avx512.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core_sse4.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core_avx2.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core_avx512.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core_sse4.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core_avx2.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core_avx512.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core_sse4.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core_avx2.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core_avx512.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core_avx512.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core_sse4.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core_avx2.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core_avx512.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core_sse4.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core_avx2.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core_avx512.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core_sse4.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core_avx2.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core_avx512.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core_sse4.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core_avx2.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core_avx512.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core_sse4.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core_avx2.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core_avx512.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core_sse4.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core.S delete mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core_avx2.S delete mode 100644 sysdeps/x86_64/fpu/printf_fphex.c delete mode 100644 sysdeps/x86_64/fpu/s_atanl.c delete mode 100644 sysdeps/x86_64/fpu/s_ceill.S delete mode 100644 sysdeps/x86_64/fpu/s_copysign.S delete mode 100644 sysdeps/x86_64/fpu/s_copysignf.S delete mode 100644 sysdeps/x86_64/fpu/s_copysignl.S delete mode 100644 sysdeps/x86_64/fpu/s_cosf.S delete mode 100644 sysdeps/x86_64/fpu/s_expm1l.S delete mode 100644 sysdeps/x86_64/fpu/s_fabs.c delete mode 100644 sysdeps/x86_64/fpu/s_fabsf.c delete mode 100644 sysdeps/x86_64/fpu/s_fabsl.S delete mode 100644 sysdeps/x86_64/fpu/s_finitel.S delete mode 100644 sysdeps/x86_64/fpu/s_floorl.S delete mode 100644 sysdeps/x86_64/fpu/s_fmax.S delete mode 100644 sysdeps/x86_64/fpu/s_fmaxf.S delete mode 100644 sysdeps/x86_64/fpu/s_fmaxl.S delete mode 100644 sysdeps/x86_64/fpu/s_fmin.S delete mode 100644 sysdeps/x86_64/fpu/s_fminf.S delete mode 100644 sysdeps/x86_64/fpu/s_fminl.S delete mode 100644 sysdeps/x86_64/fpu/s_fpclassifyl.c delete mode 100644 sysdeps/x86_64/fpu/s_isinfl.c delete mode 100644 sysdeps/x86_64/fpu/s_isnanl.c delete mode 100644 sysdeps/x86_64/fpu/s_llrint.S delete mode 100644 sysdeps/x86_64/fpu/s_llrintf.S delete mode 100644 sysdeps/x86_64/fpu/s_llrintl.S delete mode 100644 sysdeps/x86_64/fpu/s_log1pl.S delete mode 100644 sysdeps/x86_64/fpu/s_logbl.c delete mode 100644 sysdeps/x86_64/fpu/s_lrint.S delete mode 100644 sysdeps/x86_64/fpu/s_lrintf.S delete mode 100644 sysdeps/x86_64/fpu/s_lrintl.S delete mode 100644 sysdeps/x86_64/fpu/s_nearbyintl.S delete mode 100644 sysdeps/x86_64/fpu/s_nextafterl.c delete mode 100644 sysdeps/x86_64/fpu/s_nexttoward.c delete mode 100644 sysdeps/x86_64/fpu/s_nexttowardf.c delete mode 100644 sysdeps/x86_64/fpu/s_rintl.c delete mode 100644 sysdeps/x86_64/fpu/s_scalbnl.S delete mode 100644 sysdeps/x86_64/fpu/s_signbit.S delete mode 100644 sysdeps/x86_64/fpu/s_signbitf.S delete mode 100644 sysdeps/x86_64/fpu/s_significandl.c delete mode 100644 sysdeps/x86_64/fpu/s_sincosf.S delete mode 100644 sysdeps/x86_64/fpu/s_sinf.S delete mode 100644 sysdeps/x86_64/fpu/s_truncl.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_cos2_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_cos4_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_cos4_core_avx.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_cos8_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_exp2_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_exp4_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_exp4_core_avx.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_exp8_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_exp_data.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_exp_data.h delete mode 100644 sysdeps/x86_64/fpu/svml_d_log2_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_log4_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_log4_core_avx.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_log8_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_log_data.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_log_data.h delete mode 100644 sysdeps/x86_64/fpu/svml_d_pow2_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_pow4_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_pow4_core_avx.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_pow8_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_pow_data.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_pow_data.h delete mode 100644 sysdeps/x86_64/fpu/svml_d_sin2_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_sin4_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_sin4_core_avx.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_sin8_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_sincos2_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_sincos4_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_sincos4_core_avx.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_sincos8_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_trig_data.S delete mode 100644 sysdeps/x86_64/fpu/svml_d_trig_data.h delete mode 100644 sysdeps/x86_64/fpu/svml_d_wrapper_impl.h delete mode 100644 sysdeps/x86_64/fpu/svml_finite_alias.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_cosf16_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_cosf4_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_cosf8_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_cosf8_core_avx.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_expf16_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_expf4_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_expf8_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_expf8_core_avx.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_expf_data.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_expf_data.h delete mode 100644 sysdeps/x86_64/fpu/svml_s_logf16_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_logf4_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_logf8_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_logf8_core_avx.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_logf_data.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_logf_data.h delete mode 100644 sysdeps/x86_64/fpu/svml_s_powf16_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_powf4_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_powf8_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_powf8_core_avx.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_powf_data.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_powf_data.h delete mode 100644 sysdeps/x86_64/fpu/svml_s_sincosf16_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_sincosf4_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_sincosf8_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_sincosf8_core_avx.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_sinf16_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_sinf4_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_sinf8_core.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_sinf8_core_avx.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_trig_data.S delete mode 100644 sysdeps/x86_64/fpu/svml_s_trig_data.h delete mode 100644 sysdeps/x86_64/fpu/svml_s_wrapper_impl.h delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-alias-avx-main.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-alias-avx-mod.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-alias-avx.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-alias-avx2-main.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-alias-avx2-mod.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-alias-avx2.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-alias-avx512-main.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-alias-avx512-mod.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-alias-avx512.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-alias-main.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-alias-mod.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-alias.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx-main.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2-main.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512-main.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-sincos-main.c delete mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-sincos.c delete mode 100644 sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c delete mode 100644 sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c delete mode 100644 sysdeps/x86_64/fpu/test-double-vlen4-avx2.h delete mode 100644 sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c delete mode 100644 sysdeps/x86_64/fpu/test-double-vlen4.h delete mode 100644 sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c delete mode 100644 sysdeps/x86_64/fpu/test-double-vlen8.h delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-alias-avx-main.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-alias-avx-mod.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-alias-avx.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-alias-avx2-main.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-alias-avx2-mod.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-alias-avx2.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-alias-avx512-main.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-alias-avx512-mod.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-alias-avx512.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-alias-main.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-alias-mod.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-alias.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx-main.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2-main.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512-main.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-sincosf-main.c delete mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c delete mode 100644 sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c delete mode 100644 sysdeps/x86_64/fpu/test-float-vlen16.h delete mode 100644 sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c delete mode 100644 sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c delete mode 100644 sysdeps/x86_64/fpu/test-float-vlen8-avx2.h delete mode 100644 sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c delete mode 100644 sysdeps/x86_64/fpu/test-float-vlen8.h delete mode 100644 sysdeps/x86_64/fpu/test-libmvec-alias-mod.c delete mode 100644 sysdeps/x86_64/fpu/x86_64-math-asm.h delete mode 100644 sysdeps/x86_64/hp-timing.h delete mode 100644 sysdeps/x86_64/htonl.S delete mode 100644 sysdeps/x86_64/ifuncmain8.c delete mode 100644 sysdeps/x86_64/ifuncmod8.c delete mode 100644 sysdeps/x86_64/jmpbuf-offsets.h delete mode 100644 sysdeps/x86_64/jmpbuf-unwind.h delete mode 100644 sysdeps/x86_64/l10nflist.c delete mode 100644 sysdeps/x86_64/ldbl2mpn.c delete mode 100644 sysdeps/x86_64/ldsodefs.h delete mode 100644 sysdeps/x86_64/link-defines.sym delete mode 100644 sysdeps/x86_64/locale-defines.sym delete mode 100644 sysdeps/x86_64/localplt.data delete mode 100644 sysdeps/x86_64/lshift.S delete mode 100644 sysdeps/x86_64/machine-gmon.h delete mode 100644 sysdeps/x86_64/memchr.S delete mode 100644 sysdeps/x86_64/memcmp.S delete mode 100644 sysdeps/x86_64/memcopy.h delete mode 100644 sysdeps/x86_64/memcpy.S delete mode 100644 sysdeps/x86_64/memcpy_chk.S delete mode 100644 sysdeps/x86_64/memmove.S delete mode 100644 sysdeps/x86_64/memmove_chk.S delete mode 100644 sysdeps/x86_64/mempcpy.S delete mode 100644 sysdeps/x86_64/mempcpy_chk.S delete mode 100644 sysdeps/x86_64/memrchr.S delete mode 100644 sysdeps/x86_64/memset.S delete mode 100644 sysdeps/x86_64/memset_chk.S delete mode 100644 sysdeps/x86_64/memusage.h delete mode 100644 sysdeps/x86_64/mp_clz_tab.c delete mode 100644 sysdeps/x86_64/mul_1.S delete mode 100644 sysdeps/x86_64/multiarch/Makefile delete mode 100644 sysdeps/x86_64/multiarch/bcopy.S delete mode 100644 sysdeps/x86_64/multiarch/ifunc-impl-list.c delete mode 100644 sysdeps/x86_64/multiarch/ifunc-wmemset.h delete mode 100644 sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S delete mode 100644 sysdeps/x86_64/multiarch/memcmp-sse4.S delete mode 100644 sysdeps/x86_64/multiarch/memcmp-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/memcmp.S delete mode 100644 sysdeps/x86_64/multiarch/memcpy-ssse3-back.S delete mode 100644 sysdeps/x86_64/multiarch/memcpy-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/memcpy.S delete mode 100644 sysdeps/x86_64/multiarch/memcpy_chk.S delete mode 100644 sysdeps/x86_64/multiarch/memmove-avx-unaligned-erms.S delete mode 100644 sysdeps/x86_64/multiarch/memmove-avx512-no-vzeroupper.S delete mode 100644 sysdeps/x86_64/multiarch/memmove-avx512-unaligned-erms.S delete mode 100644 sysdeps/x86_64/multiarch/memmove-ssse3-back.S delete mode 100644 sysdeps/x86_64/multiarch/memmove-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S delete mode 100644 sysdeps/x86_64/multiarch/memmove.S delete mode 100644 sysdeps/x86_64/multiarch/memmove_chk.S delete mode 100644 sysdeps/x86_64/multiarch/mempcpy.S delete mode 100644 sysdeps/x86_64/multiarch/mempcpy_chk.S delete mode 100644 sysdeps/x86_64/multiarch/memset-avx2-unaligned-erms.S delete mode 100644 sysdeps/x86_64/multiarch/memset-avx512-no-vzeroupper.S delete mode 100644 sysdeps/x86_64/multiarch/memset-avx512-unaligned-erms.S delete mode 100644 sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S delete mode 100644 sysdeps/x86_64/multiarch/memset.S delete mode 100644 sysdeps/x86_64/multiarch/memset_chk.S delete mode 100644 sysdeps/x86_64/multiarch/sched_cpucount.c delete mode 100644 sysdeps/x86_64/multiarch/stpcpy-sse2-unaligned.S delete mode 100644 sysdeps/x86_64/multiarch/stpcpy-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/stpcpy.S delete mode 100644 sysdeps/x86_64/multiarch/stpncpy-c.c delete mode 100644 sysdeps/x86_64/multiarch/stpncpy-sse2-unaligned.S delete mode 100644 sysdeps/x86_64/multiarch/stpncpy-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/stpncpy.S delete mode 100644 sysdeps/x86_64/multiarch/strcasecmp_l-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/strcasecmp_l.S delete mode 100644 sysdeps/x86_64/multiarch/strcat-sse2-unaligned.S delete mode 100644 sysdeps/x86_64/multiarch/strcat-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/strcat.S delete mode 100644 sysdeps/x86_64/multiarch/strchr-sse2-no-bsf.S delete mode 100644 sysdeps/x86_64/multiarch/strchr.S delete mode 100644 sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S delete mode 100644 sysdeps/x86_64/multiarch/strcmp-sse42.S delete mode 100644 sysdeps/x86_64/multiarch/strcmp-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/strcmp.S delete mode 100644 sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S delete mode 100644 sysdeps/x86_64/multiarch/strcpy-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/strcpy.S delete mode 100644 sysdeps/x86_64/multiarch/strcspn-c.c delete mode 100644 sysdeps/x86_64/multiarch/strcspn.S delete mode 100644 sysdeps/x86_64/multiarch/strncase_l-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/strncase_l.S delete mode 100644 sysdeps/x86_64/multiarch/strncat-c.c delete mode 100644 sysdeps/x86_64/multiarch/strncat-sse2-unaligned.S delete mode 100644 sysdeps/x86_64/multiarch/strncat-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/strncat.S delete mode 100644 sysdeps/x86_64/multiarch/strncmp-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/strncmp.S delete mode 100644 sysdeps/x86_64/multiarch/strncpy-c.c delete mode 100644 sysdeps/x86_64/multiarch/strncpy-sse2-unaligned.S delete mode 100644 sysdeps/x86_64/multiarch/strncpy-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/strncpy.S delete mode 100644 sysdeps/x86_64/multiarch/strpbrk-c.c delete mode 100644 sysdeps/x86_64/multiarch/strpbrk.S delete mode 100644 sysdeps/x86_64/multiarch/strspn-c.c delete mode 100644 sysdeps/x86_64/multiarch/strspn.S delete mode 100644 sysdeps/x86_64/multiarch/strstr-sse2-unaligned.S delete mode 100644 sysdeps/x86_64/multiarch/strstr.c delete mode 100644 sysdeps/x86_64/multiarch/test-multiarch.c delete mode 100644 sysdeps/x86_64/multiarch/varshift.c delete mode 100644 sysdeps/x86_64/multiarch/varshift.h delete mode 100644 sysdeps/x86_64/multiarch/wcscpy-c.c delete mode 100644 sysdeps/x86_64/multiarch/wcscpy-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/wcscpy.S delete mode 100644 sysdeps/x86_64/multiarch/wcsnlen-c.c delete mode 100644 sysdeps/x86_64/multiarch/wcsnlen-sse4_1.S delete mode 100644 sysdeps/x86_64/multiarch/wcsnlen.c delete mode 100644 sysdeps/x86_64/multiarch/wmemcmp-avx2-movbe.S delete mode 100644 sysdeps/x86_64/multiarch/wmemcmp-c.c delete mode 100644 sysdeps/x86_64/multiarch/wmemcmp-sse4.S delete mode 100644 sysdeps/x86_64/multiarch/wmemcmp-ssse3.S delete mode 100644 sysdeps/x86_64/multiarch/wmemcmp.S delete mode 100644 sysdeps/x86_64/multiarch/wmemset.c delete mode 100644 sysdeps/x86_64/multiarch/wmemset_chk-nonshared.S delete mode 100644 sysdeps/x86_64/multiarch/wmemset_chk.c delete mode 100644 sysdeps/x86_64/nptl/Makefile delete mode 100644 sysdeps/x86_64/nptl/pthread_spin_init.c delete mode 100644 sysdeps/x86_64/nptl/pthread_spin_lock.S delete mode 100644 sysdeps/x86_64/nptl/pthread_spin_trylock.S delete mode 100644 sysdeps/x86_64/nptl/pthread_spin_unlock.S delete mode 100644 sysdeps/x86_64/nptl/pthreaddef.h delete mode 100644 sysdeps/x86_64/nptl/tcb-offsets.sym delete mode 100644 sysdeps/x86_64/nptl/tls.h delete mode 100644 sysdeps/x86_64/preconfigure delete mode 100644 sysdeps/x86_64/preconfigure.ac delete mode 100644 sysdeps/x86_64/rawmemchr.S delete mode 100644 sysdeps/x86_64/rshift.S delete mode 100644 sysdeps/x86_64/sched_cpucount.c delete mode 100644 sysdeps/x86_64/setjmp.S delete mode 100644 sysdeps/x86_64/stack-aliasing.h delete mode 100644 sysdeps/x86_64/stackguard-macros.h delete mode 100644 sysdeps/x86_64/stackinfo.h delete mode 100644 sysdeps/x86_64/start.S delete mode 100644 sysdeps/x86_64/stpcpy.S delete mode 100644 sysdeps/x86_64/strcasecmp.S delete mode 100644 sysdeps/x86_64/strcasecmp_l-nonascii.c delete mode 100644 sysdeps/x86_64/strcasecmp_l.S delete mode 100644 sysdeps/x86_64/strcat.S delete mode 100644 sysdeps/x86_64/strchr.S delete mode 100644 sysdeps/x86_64/strchrnul.S delete mode 100644 sysdeps/x86_64/strcmp.S delete mode 100644 sysdeps/x86_64/strcpy.S delete mode 100644 sysdeps/x86_64/strcspn.S delete mode 100644 sysdeps/x86_64/strlen.S delete mode 100644 sysdeps/x86_64/strncase.S delete mode 100644 sysdeps/x86_64/strncase_l-nonascii.c delete mode 100644 sysdeps/x86_64/strncase_l.S delete mode 100644 sysdeps/x86_64/strncmp.S delete mode 100644 sysdeps/x86_64/strnlen.S delete mode 100644 sysdeps/x86_64/strpbrk.S delete mode 100644 sysdeps/x86_64/strrchr.S delete mode 100644 sysdeps/x86_64/strspn.S delete mode 100644 sysdeps/x86_64/sub_n.S delete mode 100644 sysdeps/x86_64/submul_1.S delete mode 100644 sysdeps/x86_64/sysdep.h delete mode 100644 sysdeps/x86_64/tls-macros.h delete mode 100644 sysdeps/x86_64/tlsdesc.c delete mode 100644 sysdeps/x86_64/tlsdesc.sym delete mode 100644 sysdeps/x86_64/tst-audit.h delete mode 100644 sysdeps/x86_64/tst-audit10-aux.c delete mode 100644 sysdeps/x86_64/tst-audit10.c delete mode 100644 sysdeps/x86_64/tst-audit3.c delete mode 100644 sysdeps/x86_64/tst-audit4-aux.c delete mode 100644 sysdeps/x86_64/tst-audit4.c delete mode 100644 sysdeps/x86_64/tst-audit5.c delete mode 100644 sysdeps/x86_64/tst-audit6.c delete mode 100644 sysdeps/x86_64/tst-audit7.c delete mode 100644 sysdeps/x86_64/tst-auditmod10a.c delete mode 100644 sysdeps/x86_64/tst-auditmod10b.c delete mode 100644 sysdeps/x86_64/tst-auditmod3a.c delete mode 100644 sysdeps/x86_64/tst-auditmod3b.c delete mode 100644 sysdeps/x86_64/tst-auditmod4a.c delete mode 100644 sysdeps/x86_64/tst-auditmod4b.c delete mode 100644 sysdeps/x86_64/tst-auditmod5a.c delete mode 100644 sysdeps/x86_64/tst-auditmod5b.c delete mode 100644 sysdeps/x86_64/tst-auditmod6a.c delete mode 100644 sysdeps/x86_64/tst-auditmod6b.c delete mode 100644 sysdeps/x86_64/tst-auditmod6c.c delete mode 100644 sysdeps/x86_64/tst-auditmod7a.c delete mode 100644 sysdeps/x86_64/tst-auditmod7b.c delete mode 100644 sysdeps/x86_64/tst-avx-aux.c delete mode 100644 sysdeps/x86_64/tst-avx.c delete mode 100644 sysdeps/x86_64/tst-avx512-aux.c delete mode 100644 sysdeps/x86_64/tst-avx512.c delete mode 100644 sysdeps/x86_64/tst-avx512mod.c delete mode 100644 sysdeps/x86_64/tst-avxmod.c delete mode 100644 sysdeps/x86_64/tst-mallocalign1.c delete mode 100644 sysdeps/x86_64/tst-quad1.c delete mode 100644 sysdeps/x86_64/tst-quad1pie.c delete mode 100644 sysdeps/x86_64/tst-quad2.c delete mode 100644 sysdeps/x86_64/tst-quad2pie.c delete mode 100644 sysdeps/x86_64/tst-quadmod1.S delete mode 100644 sysdeps/x86_64/tst-quadmod1pie.S delete mode 100644 sysdeps/x86_64/tst-quadmod2.S delete mode 100644 sysdeps/x86_64/tst-quadmod2pie.S delete mode 100644 sysdeps/x86_64/tst-split-dynreloc.c delete mode 100644 sysdeps/x86_64/tst-split-dynreloc.lds delete mode 100644 sysdeps/x86_64/tst-sse.c delete mode 100644 sysdeps/x86_64/tst-ssemod.c delete mode 100644 sysdeps/x86_64/tst-stack-align.h delete mode 100644 sysdeps/x86_64/wcschr.S delete mode 100644 sysdeps/x86_64/wcscmp.S delete mode 100644 sysdeps/x86_64/wcslen.S delete mode 100644 sysdeps/x86_64/wcsrchr.S delete mode 100644 sysdeps/x86_64/wmemset.S delete mode 100644 sysdeps/x86_64/wmemset_chk.S delete mode 100644 sysdeps/x86_64/wordcopy.c delete mode 100644 sysdeps/x86_64/x32/Implies-after delete mode 100644 sysdeps/x86_64/x32/Makefile delete mode 100644 sysdeps/x86_64/x32/_itoa.h delete mode 100644 sysdeps/x86_64/x32/divdi3.c delete mode 100644 sysdeps/x86_64/x32/dl-machine.h delete mode 100644 sysdeps/x86_64/x32/ffs.c delete mode 100644 sysdeps/x86_64/x32/fpu/s_lrint.S delete mode 100644 sysdeps/x86_64/x32/fpu/s_lrintf.S delete mode 100644 sysdeps/x86_64/x32/fpu/s_lrintl.S delete mode 100644 sysdeps/x86_64/x32/gmp-mparam.h delete mode 100644 sysdeps/x86_64/x32/symbol-hacks.h delete mode 100644 sysdeps/x86_64/x32/sysdep.h (limited to 'sysdeps') diff --git a/sysdeps/aarch64/Implies b/sysdeps/aarch64/Implies deleted file mode 100644 index e5adf4d63c..0000000000 --- a/sysdeps/aarch64/Implies +++ /dev/null @@ -1,6 +0,0 @@ -wordsize-64 -ieee754/ldbl-128 -ieee754/dbl-64/wordsize-64 -ieee754/dbl-64 -ieee754/flt-32 -aarch64/soft-fp diff --git a/sysdeps/aarch64/Makefile b/sysdeps/aarch64/Makefile deleted file mode 100644 index 562c1373ae..0000000000 --- a/sysdeps/aarch64/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -long-double-fcts = yes - -ifeq ($(subdir),debug) -CFLAGS-backtrace.c += -funwind-tables -endif - -ifeq ($(subdir),elf) -sysdep-dl-routines += tlsdesc dl-tlsdesc -gen-as-const-headers += dl-link.sym -endif - -ifeq ($(subdir),csu) -gen-as-const-headers += tlsdesc.sym -endif - -ifeq ($(subdir),gmon) -CFLAGS-mcount.c += -mgeneral-regs-only -endif diff --git a/sysdeps/aarch64/Versions b/sysdeps/aarch64/Versions deleted file mode 100644 index e1aa44f33d..0000000000 --- a/sysdeps/aarch64/Versions +++ /dev/null @@ -1,5 +0,0 @@ -libc { - GLIBC_2.18 { - _mcount; - } -} diff --git a/sysdeps/aarch64/__longjmp.S b/sysdeps/aarch64/__longjmp.S deleted file mode 100644 index c9056e63e7..0000000000 --- a/sysdeps/aarch64/__longjmp.S +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* __longjmp(jmpbuf, val) */ - -ENTRY (__longjmp) - cfi_def_cfa(x0, 0) - cfi_offset(x19, JB_X19<<3) - cfi_offset(x20, JB_X20<<3) - cfi_offset(x21, JB_X21<<3) - cfi_offset(x22, JB_X22<<3) - cfi_offset(x23, JB_X23<<3) - cfi_offset(x24, JB_X24<<3) - cfi_offset(x25, JB_X25<<3) - cfi_offset(x26, JB_X26<<3) - cfi_offset(x27, JB_X27<<3) - cfi_offset(x28, JB_X28<<3) - cfi_offset(x29, JB_X29<<3) - cfi_offset(x30, JB_LR<<3) - - cfi_offset( d8, JB_D8<<3) - cfi_offset( d9, JB_D9<<3) - cfi_offset(d10, JB_D10<<3) - cfi_offset(d11, JB_D11<<3) - cfi_offset(d12, JB_D12<<3) - cfi_offset(d13, JB_D13<<3) - cfi_offset(d14, JB_D14<<3) - cfi_offset(d15, JB_D15<<3) - - DELOUSE (0) - - ldp x19, x20, [x0, #JB_X19<<3] - ldp x21, x22, [x0, #JB_X21<<3] - ldp x23, x24, [x0, #JB_X23<<3] - ldp x25, x26, [x0, #JB_X25<<3] - ldp x27, x28, [x0, #JB_X27<<3] -#ifdef PTR_DEMANGLE - ldp x29, x4, [x0, #JB_X29<<3] - PTR_DEMANGLE (30, 4, 3, 2) -#else - ldp x29, x30, [x0, #JB_X29<<3] -#endif - /* longjmp probe takes 3 arguments, address of jump buffer as - first argument (8@x0), return value as second argument (-4@x1), - and target address (8@x30), respectively. */ - LIBC_PROBE (longjmp, 3, 8@x0, -4@x1, 8@x30) - ldp d8, d9, [x0, #JB_D8<<3] - ldp d10, d11, [x0, #JB_D10<<3] - ldp d12, d13, [x0, #JB_D12<<3] - ldp d14, d15, [x0, #JB_D14<<3] - - /* Originally this was implemented with a series of - .cfi_restore() directives. - - The theory was that cfi_restore should revert to previous - frame value is the same as the current value. In practice - this doesn't work, even after cfi_restore() gdb continues - to try to recover a previous frame value offset from x0, - which gets stuffed after a few more instructions. The - cfi_same_value() mechanism appears to work fine. */ - - cfi_same_value(x19) - cfi_same_value(x20) - cfi_same_value(x21) - cfi_same_value(x22) - cfi_same_value(x23) - cfi_same_value(x24) - cfi_same_value(x25) - cfi_same_value(x26) - cfi_same_value(x27) - cfi_same_value(x28) - cfi_same_value(x29) - cfi_same_value(x30) - cfi_same_value(d8) - cfi_same_value(d9) - cfi_same_value(d10) - cfi_same_value(d11) - cfi_same_value(d12) - cfi_same_value(d13) - cfi_same_value(d14) - cfi_same_value(d15) -#ifdef PTR_DEMANGLE - ldr x4, [x0, #JB_SP<<3] - PTR_DEMANGLE (5, 4, 3, 2) -#else - ldr x5, [x0, #JB_SP<<3] -#endif - mov sp, x5 - - /* longjmp_target probe takes 3 arguments, address of jump buffer - as first argument (8@x0), return value as second argument (-4@x1), - and target address (8@x30), respectively. */ - LIBC_PROBE (longjmp_target, 3, 8@x0, -4@x1, 8@x30) - cmp x1, #0 - mov x0, #1 - csel x0, x1, x0, ne - /* Use br instead of ret because ret is guaranteed to mispredict */ - br x30 -END (__longjmp) diff --git a/sysdeps/aarch64/abort-instr.h b/sysdeps/aarch64/abort-instr.h deleted file mode 100644 index 8b1c40b57d..0000000000 --- a/sysdeps/aarch64/abort-instr.h +++ /dev/null @@ -1 +0,0 @@ -#define ABORT_INSTRUCTION asm ("brk\t#1000") diff --git a/sysdeps/aarch64/atomic-machine.h b/sysdeps/aarch64/atomic-machine.h deleted file mode 100644 index eb59a5b94c..0000000000 --- a/sysdeps/aarch64/atomic-machine.h +++ /dev/null @@ -1,170 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _AARCH64_ATOMIC_MACHINE_H -#define _AARCH64_ATOMIC_MACHINE_H 1 - -#include - -typedef int8_t atomic8_t; -typedef int16_t atomic16_t; -typedef int32_t atomic32_t; -typedef int64_t atomic64_t; - -typedef uint8_t uatomic8_t; -typedef uint16_t uatomic16_t; -typedef uint32_t uatomic32_t; -typedef uint64_t uatomic64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#define __HAVE_64B_ATOMICS 1 -#define USE_ATOMIC_COMPILER_BUILTINS 1 -#define ATOMIC_EXCHANGE_USES_CAS 0 - -/* Compare and exchange. - For all "bool" routines, we return FALSE if exchange succesful. */ - -# define __arch_compare_and_exchange_bool_8_int(mem, newval, oldval, model) \ - ({ \ - typeof (*mem) __oldval = (oldval); \ - !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ - model, __ATOMIC_RELAXED); \ - }) - -# define __arch_compare_and_exchange_bool_16_int(mem, newval, oldval, model) \ - ({ \ - typeof (*mem) __oldval = (oldval); \ - !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ - model, __ATOMIC_RELAXED); \ - }) - -# define __arch_compare_and_exchange_bool_32_int(mem, newval, oldval, model) \ - ({ \ - typeof (*mem) __oldval = (oldval); \ - !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ - model, __ATOMIC_RELAXED); \ - }) - -# define __arch_compare_and_exchange_bool_64_int(mem, newval, oldval, model) \ - ({ \ - typeof (*mem) __oldval = (oldval); \ - !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ - model, __ATOMIC_RELAXED); \ - }) - -# define __arch_compare_and_exchange_val_8_int(mem, newval, oldval, model) \ - ({ \ - typeof (*mem) __oldval = (oldval); \ - __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ - model, __ATOMIC_RELAXED); \ - __oldval; \ - }) - -# define __arch_compare_and_exchange_val_16_int(mem, newval, oldval, model) \ - ({ \ - typeof (*mem) __oldval = (oldval); \ - __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ - model, __ATOMIC_RELAXED); \ - __oldval; \ - }) - -# define __arch_compare_and_exchange_val_32_int(mem, newval, oldval, model) \ - ({ \ - typeof (*mem) __oldval = (oldval); \ - __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ - model, __ATOMIC_RELAXED); \ - __oldval; \ - }) - -# define __arch_compare_and_exchange_val_64_int(mem, newval, oldval, model) \ - ({ \ - typeof (*mem) __oldval = (oldval); \ - __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ - model, __ATOMIC_RELAXED); \ - __oldval; \ - }) - - -/* Compare and exchange with "acquire" semantics, ie barrier after. */ - -# define atomic_compare_and_exchange_bool_acq(mem, new, old) \ - __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \ - mem, new, old, __ATOMIC_ACQUIRE) - -# define atomic_compare_and_exchange_val_acq(mem, new, old) \ - __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ - mem, new, old, __ATOMIC_ACQUIRE) - -/* Compare and exchange with "release" semantics, ie barrier before. */ - -# define atomic_compare_and_exchange_val_rel(mem, new, old) \ - __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ - mem, new, old, __ATOMIC_RELEASE) - - -/* Atomic exchange (without compare). */ - -# define __arch_exchange_8_int(mem, newval, model) \ - __atomic_exchange_n (mem, newval, model) - -# define __arch_exchange_16_int(mem, newval, model) \ - __atomic_exchange_n (mem, newval, model) - -# define __arch_exchange_32_int(mem, newval, model) \ - __atomic_exchange_n (mem, newval, model) - -# define __arch_exchange_64_int(mem, newval, model) \ - __atomic_exchange_n (mem, newval, model) - -# define atomic_exchange_acq(mem, value) \ - __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_ACQUIRE) - -# define atomic_exchange_rel(mem, value) \ - __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_RELEASE) - - -/* Atomically add value and return the previous (unincremented) value. */ - -# define __arch_exchange_and_add_8_int(mem, value, model) \ - __atomic_fetch_add (mem, value, model) - -# define __arch_exchange_and_add_16_int(mem, value, model) \ - __atomic_fetch_add (mem, value, model) - -# define __arch_exchange_and_add_32_int(mem, value, model) \ - __atomic_fetch_add (mem, value, model) - -# define __arch_exchange_and_add_64_int(mem, value, model) \ - __atomic_fetch_add (mem, value, model) - -# define atomic_exchange_and_add_acq(mem, value) \ - __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, \ - __ATOMIC_ACQUIRE) - -# define atomic_exchange_and_add_rel(mem, value) \ - __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, \ - __ATOMIC_RELEASE) - -/* Barrier macro. */ -#define atomic_full_barrier() __sync_synchronize() - -#endif diff --git a/sysdeps/aarch64/backtrace.c b/sysdeps/aarch64/backtrace.c deleted file mode 100644 index 27ce597b39..0000000000 --- a/sysdeps/aarch64/backtrace.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/aarch64/bits/endian.h b/sysdeps/aarch64/bits/endian.h deleted file mode 100644 index e86b988355..0000000000 --- a/sysdeps/aarch64/bits/endian.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -/* AArch64 can be either big or little endian. */ -#ifdef __AARCH64EB__ -# define __BYTE_ORDER __BIG_ENDIAN -#else -# define __BYTE_ORDER __LITTLE_ENDIAN -#endif - -#define __FLOAT_WORD_ORDER __BYTE_ORDER diff --git a/sysdeps/aarch64/bits/fenv.h b/sysdeps/aarch64/bits/fenv.h deleted file mode 100644 index 23177d7c60..0000000000 --- a/sysdeps/aarch64/bits/fenv.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - -/* Define bits representing exceptions in the FPSR status word. */ -enum - { - FE_INVALID = -#define FE_INVALID 1 - FE_INVALID, - FE_DIVBYZERO = -#define FE_DIVBYZERO 2 - FE_DIVBYZERO, - FE_OVERFLOW = -#define FE_OVERFLOW 4 - FE_OVERFLOW, - FE_UNDERFLOW = -#define FE_UNDERFLOW 8 - FE_UNDERFLOW, - FE_INEXACT = -#define FE_INEXACT 16 - FE_INEXACT, - }; - -/* Amount to shift by to convert an exception bit in FPSR to a an - exception bit mask in FPCR. */ -#define FE_EXCEPT_SHIFT 8 - -/* All supported exceptions. */ -#define FE_ALL_EXCEPT \ - (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) - -/* Define bits representing rounding modes in the FPCR Rmode field. */ -#define FE_TONEAREST 0x000000 -#define FE_UPWARD 0x400000 -#define FE_DOWNWARD 0x800000 -#define FE_TOWARDZERO 0xc00000 - -/* Type representing exception flags. */ -typedef unsigned int fexcept_t; - -/* Type representing floating-point environment. */ -typedef struct - { - unsigned int __fpcr; - unsigned int __fpsr; - } -fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1l) - -#ifdef __USE_GNU -/* Floating-point environment where none of the exceptions are masked. */ -# define FE_NOMASK_ENV ((const fenv_t *) -2) -#endif - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef unsigned int femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) -1L) -#endif diff --git a/sysdeps/aarch64/bits/fp-fast.h b/sysdeps/aarch64/bits/fp-fast.h deleted file mode 100644 index 01a00c8e0c..0000000000 --- a/sysdeps/aarch64/bits/fp-fast.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Define FP_FAST_* macros. AArch64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#ifdef __USE_ISOC99 - -/* The GCC 4.6 compiler will define __FP_FAST_FMA{,F,L} if the fma{,f,l} - builtins are supported. */ -# define FP_FAST_FMA 1 -# define FP_FAST_FMAF 1 - -# ifdef __FP_FAST_FMAL -# define FP_FAST_FMAL 1 -# endif - -#endif diff --git a/sysdeps/aarch64/bits/link.h b/sysdeps/aarch64/bits/link.h deleted file mode 100644 index a8829df4a0..0000000000 --- a/sysdeps/aarch64/bits/link.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - -/* Registers for entry into PLT on AArch64. */ -typedef struct La_aarch64_regs -{ - uint64_t lr_xreg[8]; - uint64_t lr_dreg[8]; - uint64_t lr_sp; - uint64_t lr_lr; -} La_aarch64_regs; - -/* Return values for calls from PLT on AArch64. */ -typedef struct La_aarch64_retval -{ - /* Up to two integer registers can be used for a return value. */ - uint64_t lrv_xreg[2]; - /* Up to four D registers can be used for a return value. */ - uint64_t lrv_dreg[4]; - -} La_aarch64_retval; -__BEGIN_DECLS - -extern ElfW(Addr) -la_aarch64_gnu_pltenter (ElfW(Sym) *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_aarch64_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); - -extern unsigned int -la_aarch64_gnu_pltexit (ElfW(Sym) *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_aarch64_regs *__inregs, - La_aarch64_retval *__outregs, - const char *__symname); - -__END_DECLS diff --git a/sysdeps/aarch64/bits/setjmp.h b/sysdeps/aarch64/bits/setjmp.h deleted file mode 100644 index f8d15ad399..0000000000 --- a/sysdeps/aarch64/bits/setjmp.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include directly; use instead." -#endif - -#ifndef _ASM -/* Jump buffer contains: - x19-x28, x29(fp), x30(lr), (x31)sp, d8-d15. Other registers are not - saved. */ -__extension__ typedef unsigned long long __jmp_buf [22]; - -#endif -#endif diff --git a/sysdeps/aarch64/bits/string.h b/sysdeps/aarch64/bits/string.h deleted file mode 100644 index 295eeb7be9..0000000000 --- a/sysdeps/aarch64/bits/string.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Optimized, inlined string functions. AArch64 version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _STRING_H -# error "Never use directly; include instead." -#endif - -/* AArch64 uses the aligned string inline ABI. */ -#define _STRING_INLINE_unaligned 0 diff --git a/sysdeps/aarch64/bits/wordsize.h b/sysdeps/aarch64/bits/wordsize.h deleted file mode 100644 index ad53d699ca..0000000000 --- a/sysdeps/aarch64/bits/wordsize.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Determine the wordsize from the preprocessor defines. - - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef __LP64__ -# define __WORDSIZE 64 -#else -# define __WORDSIZE 32 -# define __WORDSIZE32_SIZE_ULONG 1 -# define __WORDSIZE32_PTRDIFF_LONG 1 -#endif - -#define __WORDSIZE_TIME64_COMPAT32 0 diff --git a/sysdeps/aarch64/bsd-_setjmp.S b/sysdeps/aarch64/bsd-_setjmp.S deleted file mode 100644 index 4e6a2da560..0000000000 --- a/sysdeps/aarch64/bsd-_setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* _setjmp is in setjmp.S */ diff --git a/sysdeps/aarch64/bsd-setjmp.S b/sysdeps/aarch64/bsd-setjmp.S deleted file mode 100644 index 1da848d2f1..0000000000 --- a/sysdeps/aarch64/bsd-setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* setjmp is in setjmp.S */ diff --git a/sysdeps/aarch64/configure b/sysdeps/aarch64/configure deleted file mode 100644 index 5bd355a691..0000000000 --- a/sysdeps/aarch64/configure +++ /dev/null @@ -1,174 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/aarch64. - -# We check to see if the compiler and flags are -# selecting the big endian ABI and if they are then -# we set libc_cv_aarch64_be to yes which causes -# HAVE_AARCH64_BE to be defined in config.h and -# in include/libc-symbols.h and thus available to -# shlib-versions to select the appropriate name for -# the dynamic linker via %ifdef. - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for big endian" >&5 -$as_echo_n "checking for big endian... " >&6; } -if ${libc_cv_aarch64_be+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __AARCH64EB__ - yes - #endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - libc_cv_aarch64_be=yes -else - libc_cv_aarch64_be=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_aarch64_be" >&5 -$as_echo "$libc_cv_aarch64_be" >&6; } -if test $libc_cv_aarch64_be = yes; then - $as_echo "#define HAVE_AARCH64_BE 1" >>confdefs.h - - config_vars="$config_vars -default-abi = lp64_be" -else - config_vars="$config_vars -default-abi = lp64" -fi diff --git a/sysdeps/aarch64/configure.ac b/sysdeps/aarch64/configure.ac deleted file mode 100644 index 7851dd4dac..0000000000 --- a/sysdeps/aarch64/configure.ac +++ /dev/null @@ -1,22 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/aarch64. - -# We check to see if the compiler and flags are -# selecting the big endian ABI and if they are then -# we set libc_cv_aarch64_be to yes which causes -# HAVE_AARCH64_BE to be defined in config.h and -# in include/libc-symbols.h and thus available to -# shlib-versions to select the appropriate name for -# the dynamic linker via %ifdef. -AC_CACHE_CHECK([for big endian], - [libc_cv_aarch64_be], - [AC_EGREP_CPP(yes,[#ifdef __AARCH64EB__ - yes - #endif - ], libc_cv_aarch64_be=yes, libc_cv_aarch64_be=no)]) -if test $libc_cv_aarch64_be = yes; then - AC_DEFINE(HAVE_AARCH64_BE) - LIBC_CONFIG_VAR([default-abi], [lp64_be]) -else - LIBC_CONFIG_VAR([default-abi], [lp64]) -fi diff --git a/sysdeps/aarch64/crti.S b/sysdeps/aarch64/crti.S deleted file mode 100644 index db91192d81..0000000000 --- a/sysdeps/aarch64/crti.S +++ /dev/null @@ -1,91 +0,0 @@ -/* Special .init and .fini section support for AArch64. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - -#if PREINIT_FUNCTION_WEAK - .align 2 - .type call_weak_fn, %function -call_weak_fn: - adrp x0, :got:PREINIT_FUNCTION - ldr PTR_REG (0), [x0, #:got_lo12:PREINIT_FUNCTION] - cbz x0, 1f - b PREINIT_FUNCTION -1: - RET - .size call_weak_fn, .-call_weak_fn -#endif - - .section .init,"ax",%progbits - .align 2 - .global _init - .type _init, %function -_init: - stp x29, x30, [sp, -16]! - mov x29, sp -#if PREINIT_FUNCTION_WEAK - bl call_weak_fn -#else - bl PREINIT_FUNCTION -#endif - - .section .fini,"ax",%progbits - .align 2 - .global _fini - .type _fini, %function -_fini: - stp x29, x30, [sp, -16]! - mov x29, sp diff --git a/sysdeps/aarch64/crtn.S b/sysdeps/aarch64/crtn.S deleted file mode 100644 index 0549157e14..0000000000 --- a/sysdeps/aarch64/crtn.S +++ /dev/null @@ -1,46 +0,0 @@ -/* Special .init and .fini section support for AArch64. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .section .init,"ax",%progbits - ldp x29, x30, [sp], 16 - RET - - .section .fini,"ax",%progbits - ldp x29, x30, [sp], 16 - RET diff --git a/sysdeps/aarch64/dl-irel.h b/sysdeps/aarch64/dl-irel.h deleted file mode 100644 index 4a8027510b..0000000000 --- a/sysdeps/aarch64/dl-irel.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Machine-dependent ELF indirect relocation inline functions. - AArch64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_IREL_H -#define _DL_IREL_H - -#include -#include -#include -#include - -#define ELF_MACHINE_IRELA 1 - -static inline ElfW(Addr) -__attribute ((always_inline)) -elf_ifunc_invoke (ElfW(Addr) addr) -{ - return ((ElfW(Addr) (*) (unsigned long int)) (addr)) (GLRO(dl_hwcap)); -} - -static inline void -__attribute ((always_inline)) -elf_irela (const ElfW(Rela) *reloc) -{ - ElfW(Addr) *const reloc_addr = (void *) reloc->r_offset; - const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info); - - if (__glibc_likely (r_type == AARCH64_R(IRELATIVE))) - { - ElfW(Addr) value = elf_ifunc_invoke (reloc->r_addend); - *reloc_addr = value; - } - else - __libc_fatal ("unexpected reloc type in static binary"); -} - -#endif diff --git a/sysdeps/aarch64/dl-link.sym b/sysdeps/aarch64/dl-link.sym deleted file mode 100644 index d67d28b40c..0000000000 --- a/sysdeps/aarch64/dl-link.sym +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include -#include -#include - -DL_SIZEOF_RG sizeof(struct La_aarch64_regs) -DL_SIZEOF_RV sizeof(struct La_aarch64_retval) - -DL_OFFSET_RG_X0 offsetof(struct La_aarch64_regs, lr_xreg) -DL_OFFSET_RG_D0 offsetof(struct La_aarch64_regs, lr_dreg) -DL_OFFSET_RG_SP offsetof(struct La_aarch64_regs, lr_sp) -DL_OFFSET_RG_LR offsetof(struct La_aarch64_regs, lr_lr) - -DL_OFFSET_RV_X0 offsetof(struct La_aarch64_retval, lrv_xreg) -DL_OFFSET_RV_D0 offsetof(struct La_aarch64_retval, lrv_dreg) diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h deleted file mode 100644 index 15d79a6961..0000000000 --- a/sysdeps/aarch64/dl-machine.h +++ /dev/null @@ -1,447 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "aarch64" - -#include -#include -#include -#include -#include - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int __attribute__ ((unused)) -elf_machine_matches_host (const ElfW(Ehdr) *ehdr) -{ - return ehdr->e_machine == EM_AARCH64; -} - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. */ -static inline ElfW(Addr) __attribute__ ((unused)) -elf_machine_dynamic (void) -{ - extern const ElfW(Addr) _GLOBAL_OFFSET_TABLE_[] attribute_hidden; - return _GLOBAL_OFFSET_TABLE_[0]; -} - -/* Return the run-time load address of the shared object. */ - -static inline ElfW(Addr) __attribute__ ((unused)) -elf_machine_load_address (void) -{ - /* To figure out the load address we use the definition that for any symbol: - dynamic_addr(symbol) = static_addr(symbol) + load_addr - - The choice of symbol is arbitrary. The static address we obtain - by constructing a non GOT reference to the symbol, the dynamic - address of the symbol we compute using adrp/add to compute the - symbol's address relative to the PC. - This depends on 32/16bit relocations being resolved at link time - and that the static address fits in the 32/16 bits. */ - - ElfW(Addr) static_addr; - ElfW(Addr) dynamic_addr; - - asm (" \n" -" adrp %1, _dl_start; \n" -#ifdef __LP64__ -" add %1, %1, #:lo12:_dl_start \n" -#else -" add %w1, %w1, #:lo12:_dl_start \n" -#endif -" ldr %w0, 1f \n" -" b 2f \n" -"1: \n" -#ifdef __LP64__ -" .word _dl_start \n" -#else -# ifdef __AARCH64EB__ -" .short 0 \n" -# endif -" .short _dl_start \n" -# ifndef __AARCH64EB__ -" .short 0 \n" -# endif -#endif -"2: \n" - : "=r" (static_addr), "=r" (dynamic_addr)); - return dynamic_addr - static_addr; -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int __attribute__ ((unused)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - if (l->l_info[DT_JMPREL] && lazy) - { - ElfW(Addr) *got; - extern void _dl_runtime_resolve (ElfW(Word)); - extern void _dl_runtime_profile (ElfW(Word)); - - got = (ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]); - if (got[1]) - { - l->l_mach.plt = got[1] + l->l_addr; - } - got[1] = (ElfW(Addr)) l; - - /* The got[2] entry contains the address of a function which gets - called to get the address of a so far unresolved function and - jump to it. The profiling extension of the dynamic linker allows - to intercept the calls to collect information. In this case we - don't store the address in the GOT so that all future calls also - end in this function. */ - if ( profile) - { - got[2] = (ElfW(Addr)) &_dl_runtime_profile; - - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - /* Say that we really want profiling and the timers are - started. */ - GL(dl_profile_map) = l; - } - else - { - /* This function will get called to fix up the GOT entry - indicated by the offset on the stack, and then jump to - the resolved address. */ - got[2] = (ElfW(Addr)) &_dl_runtime_resolve; - } - } - - if (l->l_info[ADDRIDX (DT_TLSDESC_GOT)] && lazy) - *(ElfW(Addr)*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_GOT)]) + l->l_addr) - = (ElfW(Addr)) &_dl_tlsdesc_resolve_rela; - - return lazy; -} - -/* Initial entry point for the dynamic linker. The C function - _dl_start is the real entry point, its return value is the user - program's entry point */ -#ifdef __LP64__ -# define RTLD_START RTLD_START_1 ("x", "3", "sp") -#else -# define RTLD_START RTLD_START_1 ("w", "2", "wsp") -#endif - - -#define RTLD_START_1(PTR, PTR_SIZE_LOG, PTR_SP) asm ("\ -.text \n\ -.globl _start \n\ -.type _start, %function \n\ -.globl _dl_start_user \n\ -.type _dl_start_user, %function \n\ -_start: \n\ - mov " PTR "0, " PTR_SP " \n\ - bl _dl_start \n\ - // returns user entry point in x0 \n\ - mov x21, x0 \n\ -_dl_start_user: \n\ - // get the original arg count \n\ - ldr " PTR "1, [sp] \n\ - // get the argv address \n\ - add " PTR "2, " PTR_SP ", #(1<<" PTR_SIZE_LOG ") \n\ - // get _dl_skip_args to see if we were \n\ - // invoked as an executable \n\ - adrp x4, _dl_skip_args \n\ - ldr w4, [x4, #:lo12:_dl_skip_args] \n\ - // do we need to adjust argc/argv \n\ - cmp w4, 0 \n\ - beq .L_done_stack_adjust \n\ - // subtract _dl_skip_args from original arg count \n\ - sub " PTR "1, " PTR "1, " PTR "4 \n\ - // store adjusted argc back to stack \n\ - str " PTR "1, [sp] \n\ - // find the first unskipped argument \n\ - mov " PTR "3, " PTR "2 \n\ - add " PTR "4, " PTR "2, " PTR "4, lsl #" PTR_SIZE_LOG " \n\ - // shuffle argv down \n\ -1: ldr " PTR "5, [x4], #(1<<" PTR_SIZE_LOG ") \n\ - str " PTR "5, [x3], #(1<<" PTR_SIZE_LOG ") \n\ - cmp " PTR "5, #0 \n\ - bne 1b \n\ - // shuffle envp down \n\ -1: ldr " PTR "5, [x4], #(1<<" PTR_SIZE_LOG ") \n\ - str " PTR "5, [x3], #(1<<" PTR_SIZE_LOG ") \n\ - cmp " PTR "5, #0 \n\ - bne 1b \n\ - // shuffle auxv down \n\ -1: ldp " PTR "0, " PTR "5, [x4, #(2<<" PTR_SIZE_LOG ")]! \n\ - stp " PTR "0, " PTR "5, [x3], #(2<<" PTR_SIZE_LOG ") \n\ - cmp " PTR "0, #0 \n\ - bne 1b \n\ - // Update _dl_argv \n\ - adrp x3, _dl_argv \n\ - str " PTR "2, [x3, #:lo12:_dl_argv] \n\ -.L_done_stack_adjust: \n\ - // compute envp \n\ - add " PTR "3, " PTR "2, " PTR "1, lsl #" PTR_SIZE_LOG " \n\ - add " PTR "3, " PTR "3, #(1<<" PTR_SIZE_LOG ") \n\ - adrp x16, _rtld_local \n\ - add " PTR "16, " PTR "16, #:lo12:_rtld_local \n\ - ldr " PTR "0, [x16] \n\ - bl _dl_init \n\ - // load the finalizer function \n\ - adrp x0, _dl_fini \n\ - add " PTR "0, " PTR "0, #:lo12:_dl_fini \n\ - // jump to the user_s entry point \n\ - br x21 \n\ -"); - -#define elf_machine_type_class(type) \ - ((((type) == AARCH64_R(JUMP_SLOT) \ - || (type) == AARCH64_R(TLS_DTPMOD) \ - || (type) == AARCH64_R(TLS_DTPREL) \ - || (type) == AARCH64_R(TLS_TPREL) \ - || (type) == AARCH64_R(TLSDESC)) * ELF_RTYPE_CLASS_PLT) \ - | (((type) == AARCH64_R(COPY)) * ELF_RTYPE_CLASS_COPY) \ - | (((type) == AARCH64_R(GLOB_DAT)) * ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA)) - -#define ELF_MACHINE_JMP_SLOT AARCH64_R(JUMP_SLOT) - -/* AArch64 uses RELA not REL */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -#define DL_PLATFORM_INIT dl_platform_init () - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ - if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') - /* Avoid an empty string which would disturb us. */ - GLRO(dl_platform) = NULL; - -#ifdef SHARED - /* init_cpu_features has been called early from __libc_start_main in - static executable. */ - init_cpu_features (&GLRO(dl_aarch64_cpu_features)); -#endif -} - - -static inline ElfW(Addr) -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const ElfW(Rela) *reloc, - ElfW(Addr) *reloc_addr, - ElfW(Addr) value) -{ - return *reloc_addr = value; -} - -/* Return the final value of a plt relocation. */ -static inline ElfW(Addr) -elf_machine_plt_value (struct link_map *map, - const ElfW(Rela) *reloc, - ElfW(Addr) value) -{ - return value; -} - -#endif - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER aarch64_gnu_pltenter -#define ARCH_LA_PLTEXIT aarch64_gnu_pltexit - -#ifdef RESOLVE_MAP - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, - const ElfW(Sym) *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - ElfW(Addr) *const reloc_addr = reloc_addr_arg; - const unsigned int r_type = ELFW (R_TYPE) (reloc->r_info); - - if (__builtin_expect (r_type == AARCH64_R(RELATIVE), 0)) - *reloc_addr = map->l_addr + reloc->r_addend; - else if (__builtin_expect (r_type == R_AARCH64_NONE, 0)) - return; - else - { - const ElfW(Sym) *const refsym = sym; - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - ElfW(Addr) value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; - - if (sym != NULL - && __glibc_unlikely (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC) - && __glibc_likely (sym->st_shndx != SHN_UNDEF) - && __glibc_likely (!skip_ifunc)) - value = elf_ifunc_invoke (value); - - switch (r_type) - { - case AARCH64_R(COPY): - if (sym == NULL) - break; - - if (sym->st_size > refsym->st_size - || (GLRO(dl_verbose) && sym->st_size < refsym->st_size)) - { - const char *strtab; - - strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - break; - - case AARCH64_R(RELATIVE): - case AARCH64_R(GLOB_DAT): - case AARCH64_R(JUMP_SLOT): - case AARCH64_R(ABS32): -#ifdef __LP64__ - case AARCH64_R(ABS64): -#endif - *reloc_addr = value + reloc->r_addend; - break; - - case AARCH64_R(TLSDESC): - { - struct tlsdesc volatile *td = - (struct tlsdesc volatile *)reloc_addr; -#ifndef RTLD_BOOTSTRAP - if (! sym) - { - td->arg = (void*)reloc->r_addend; - td->entry = _dl_tlsdesc_undefweak; - } - else -#endif - { -#ifndef RTLD_BOOTSTRAP -# ifndef SHARED - CHECK_STATIC_TLS (map, sym_map); -# else - if (!TRY_STATIC_TLS (map, sym_map)) - { - td->arg = _dl_make_tlsdesc_dynamic - (sym_map, sym->st_value + reloc->r_addend); - td->entry = _dl_tlsdesc_dynamic; - } - else -# endif -#endif - { - td->arg = (void*)(sym->st_value + sym_map->l_tls_offset - + reloc->r_addend); - td->entry = _dl_tlsdesc_return; - } - } - break; - } - - case AARCH64_R(TLS_DTPMOD): -#ifdef RTLD_BOOTSTRAP - *reloc_addr = 1; -#else - if (sym_map != NULL) - { - *reloc_addr = sym_map->l_tls_modid; - } -#endif - break; - - case AARCH64_R(TLS_DTPREL): - if (sym) - *reloc_addr = sym->st_value + reloc->r_addend; - break; - - case AARCH64_R(TLS_TPREL): - if (sym) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = - sym->st_value + reloc->r_addend + sym_map->l_tls_offset; - } - break; - - case AARCH64_R(IRELATIVE): - value = map->l_addr + reloc->r_addend; - value = elf_ifunc_invoke (value); - *reloc_addr = value; - break; - - default: - _dl_reloc_bad_type (map, r_type, 0); - break; - } - } -} - -inline void -__attribute__ ((always_inline)) -elf_machine_rela_relative (ElfW(Addr) l_addr, - const ElfW(Rela) *reloc, - void *const reloc_addr_arg) -{ - ElfW(Addr) *const reloc_addr = reloc_addr_arg; - *reloc_addr = l_addr + reloc->r_addend; -} - -inline void -__attribute__ ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - ElfW(Addr) l_addr, - const ElfW(Rela) *reloc, - int skip_ifunc) -{ - ElfW(Addr) *const reloc_addr = (void *) (l_addr + reloc->r_offset); - const unsigned int r_type = ELFW (R_TYPE) (reloc->r_info); - /* Check for unexpected PLT reloc type. */ - if (__builtin_expect (r_type == AARCH64_R(JUMP_SLOT), 1)) - { - if (__builtin_expect (map->l_mach.plt, 0) == 0) - *reloc_addr += l_addr; - else - *reloc_addr = map->l_mach.plt; - } - else if (__builtin_expect (r_type == AARCH64_R(TLSDESC), 1)) - { - struct tlsdesc volatile *td = - (struct tlsdesc volatile *)reloc_addr; - - td->arg = (void*)reloc; - td->entry = (void*)(D_PTR (map, l_info[ADDRIDX (DT_TLSDESC_PLT)]) - + map->l_addr); - } - else if (__glibc_unlikely (r_type == AARCH64_R(IRELATIVE))) - { - ElfW(Addr) value = map->l_addr + reloc->r_addend; - if (__glibc_likely (!skip_ifunc)) - value = elf_ifunc_invoke (value); - *reloc_addr = value; - } - else - _dl_reloc_bad_type (map, r_type, 1); -} - -#endif diff --git a/sysdeps/aarch64/dl-sysdep.h b/sysdeps/aarch64/dl-sysdep.h deleted file mode 100644 index 0b510a69d1..0000000000 --- a/sysdeps/aarch64/dl-sysdep.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include_next - -/* _dl_argv cannot be attribute_relro, because _dl_start_user - might write into it after _dl_start returns. */ -#define DL_ARGV_NOT_RELRO 1 - -#define DL_EXTERN_PROTECTED_DATA diff --git a/sysdeps/aarch64/dl-tls.h b/sysdeps/aarch64/dl-tls.h deleted file mode 100644 index 02068e1410..0000000000 --- a/sysdeps/aarch64/dl-tls.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - - -extern void *__tls_get_addr (tls_index *ti); diff --git a/sysdeps/aarch64/dl-tlsdesc.S b/sysdeps/aarch64/dl-tlsdesc.S deleted file mode 100644 index 94679a04ca..0000000000 --- a/sysdeps/aarch64/dl-tlsdesc.S +++ /dev/null @@ -1,373 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. - AArch64 version. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "tlsdesc.h" - -#define NSAVEDQREGPAIRS 16 -#define SAVE_Q_REGISTERS \ - stp q0, q1, [sp, #-32*NSAVEDQREGPAIRS]!; \ - cfi_adjust_cfa_offset (32*NSAVEDQREGPAIRS); \ - stp q2, q3, [sp, #32*1]; \ - stp q4, q5, [sp, #32*2]; \ - stp q6, q7, [sp, #32*3]; \ - stp q8, q9, [sp, #32*4]; \ - stp q10, q11, [sp, #32*5]; \ - stp q12, q13, [sp, #32*6]; \ - stp q14, q15, [sp, #32*7]; \ - stp q16, q17, [sp, #32*8]; \ - stp q18, q19, [sp, #32*9]; \ - stp q20, q21, [sp, #32*10]; \ - stp q22, q23, [sp, #32*11]; \ - stp q24, q25, [sp, #32*12]; \ - stp q26, q27, [sp, #32*13]; \ - stp q28, q29, [sp, #32*14]; \ - stp q30, q31, [sp, #32*15]; - -#define RESTORE_Q_REGISTERS \ - ldp q2, q3, [sp, #32*1]; \ - ldp q4, q5, [sp, #32*2]; \ - ldp q6, q7, [sp, #32*3]; \ - ldp q8, q9, [sp, #32*4]; \ - ldp q10, q11, [sp, #32*5]; \ - ldp q12, q13, [sp, #32*6]; \ - ldp q14, q15, [sp, #32*7]; \ - ldp q16, q17, [sp, #32*8]; \ - ldp q18, q19, [sp, #32*9]; \ - ldp q20, q21, [sp, #32*10]; \ - ldp q22, q23, [sp, #32*11]; \ - ldp q24, q25, [sp, #32*12]; \ - ldp q26, q27, [sp, #32*13]; \ - ldp q28, q29, [sp, #32*14]; \ - ldp q30, q31, [sp, #32*15]; \ - ldp q0, q1, [sp], #32*NSAVEDQREGPAIRS; \ - cfi_adjust_cfa_offset (-32*NSAVEDQREGPAIRS); - - .text - - /* Compute the thread pointer offset for symbols in the static - TLS block. The offset is the same for all threads. - Prototype: - _dl_tlsdesc_return (tlsdesc *) ; - */ - .hidden _dl_tlsdesc_return - .global _dl_tlsdesc_return - .type _dl_tlsdesc_return,%function - cfi_startproc - .align 2 -_dl_tlsdesc_return: - DELOUSE (0) - ldr PTR_REG (0), [x0, #PTR_SIZE] - RET - cfi_endproc - .size _dl_tlsdesc_return, .-_dl_tlsdesc_return - - /* Same as _dl_tlsdesc_return but with synchronization for - lazy relocation. - Prototype: - _dl_tlsdesc_return_lazy (tlsdesc *) ; - */ - .hidden _dl_tlsdesc_return_lazy - .global _dl_tlsdesc_return_lazy - .type _dl_tlsdesc_return_lazy,%function - cfi_startproc - .align 2 -_dl_tlsdesc_return_lazy: - /* The ldar here happens after the load from [x0] at the call site - (that is generated by the compiler as part of the TLS access ABI), - so it reads the same value (this function is the final value of - td->entry) and thus it synchronizes with the release store to - td->entry in _dl_tlsdesc_resolve_rela_fixup ensuring that the load - from [x0,#PTR_SIZE] here happens after the initialization of td->arg. */ - DELOUSE (0) - ldar PTR_REG (zr), [x0] - ldr PTR_REG (0), [x0, #PTR_SIZE] - RET - cfi_endproc - .size _dl_tlsdesc_return_lazy, .-_dl_tlsdesc_return_lazy - - /* Handler for undefined weak TLS symbols. - Prototype: - _dl_tlsdesc_undefweak (tlsdesc *); - - The second word of the descriptor contains the addend. - Return the addend minus the thread pointer. This ensures - that when the caller adds on the thread pointer it gets back - the addend. */ - - .hidden _dl_tlsdesc_undefweak - .global _dl_tlsdesc_undefweak - .type _dl_tlsdesc_undefweak,%function - cfi_startproc - .align 2 -_dl_tlsdesc_undefweak: - str x1, [sp, #-16]! - cfi_adjust_cfa_offset (16) - /* The ldar here happens after the load from [x0] at the call site - (that is generated by the compiler as part of the TLS access ABI), - so it reads the same value (this function is the final value of - td->entry) and thus it synchronizes with the release store to - td->entry in _dl_tlsdesc_resolve_rela_fixup ensuring that the load - from [x0,#8] here happens after the initialization of td->arg. */ - DELOUSE (0) - ldar PTR_REG (zr), [x0] - ldr PTR_REG (0), [x0, #PTR_SIZE] - mrs x1, tpidr_el0 - sub PTR_REG (0), PTR_REG (0), PTR_REG (1) - ldr x1, [sp], #16 - cfi_adjust_cfa_offset (-16) - RET - cfi_endproc - .size _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak - -#ifdef SHARED - /* Handler for dynamic TLS symbols. - Prototype: - _dl_tlsdesc_dynamic (tlsdesc *) ; - - The second word of the descriptor points to a - tlsdesc_dynamic_arg structure. - - Returns the offset between the thread pointer and the - object referenced by the argument. - - ptrdiff_t - __attribute__ ((__regparm__ (1))) - _dl_tlsdesc_dynamic (struct tlsdesc *tdp) - { - struct tlsdesc_dynamic_arg *td = tdp->arg; - dtv_t *dtv = *(dtv_t **)((char *)__thread_pointer + TCBHEAD_DTV); - if (__builtin_expect (td->gen_count <= dtv[0].counter - && (dtv[td->tlsinfo.ti_module].pointer.val - != TLS_DTV_UNALLOCATED), - 1)) - return dtv[td->tlsinfo.ti_module].pointer.val - + td->tlsinfo.ti_offset - - __thread_pointer; - - return ___tls_get_addr (&td->tlsinfo) - __thread_pointer; - } - */ - - .hidden _dl_tlsdesc_dynamic - .global _dl_tlsdesc_dynamic - .type _dl_tlsdesc_dynamic,%function - cfi_startproc - .align 2 -_dl_tlsdesc_dynamic: -# define NSAVEXREGPAIRS 2 - stp x29, x30, [sp,#-(32+16*NSAVEXREGPAIRS)]! - cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) - mov x29, sp - DELOUSE (0) - - /* Save just enough registers to support fast path, if we fall - into slow path we will save additional registers. */ - - stp x1, x2, [sp, #32+16*0] - stp x3, x4, [sp, #32+16*1] - - mrs x4, tpidr_el0 - /* The ldar here happens after the load from [x0] at the call site - (that is generated by the compiler as part of the TLS access ABI), - so it reads the same value (this function is the final value of - td->entry) and thus it synchronizes with the release store to - td->entry in _dl_tlsdesc_resolve_rela_fixup ensuring that the load - from [x0,#PTR_SIZE] here happens after the initialization of td->arg. */ - ldar PTR_REG (zr), [x0] - ldr PTR_REG (1), [x0,#TLSDESC_ARG] - ldr PTR_REG (0), [x4,#TCBHEAD_DTV] - ldr PTR_REG (3), [x1,#TLSDESC_GEN_COUNT] - ldr PTR_REG (2), [x0,#DTV_COUNTER] - cmp PTR_REG (3), PTR_REG (2) - b.hi 2f - ldr PTR_REG (2), [x1,#TLSDESC_MODID] - add PTR_REG (0), PTR_REG (0), PTR_REG (2), lsl #(PTR_LOG_SIZE + 1) - ldr PTR_REG (0), [x0] /* Load val member of DTV entry. */ - cmp x0, #TLS_DTV_UNALLOCATED - b.eq 2f - ldr PTR_REG (1), [x1,#TLSDESC_MODOFF] - add PTR_REG (0), PTR_REG (0), PTR_REG (1) - sub PTR_REG (0), PTR_REG (0), PTR_REG (4) -1: - ldp x1, x2, [sp, #32+16*0] - ldp x3, x4, [sp, #32+16*1] - - ldp x29, x30, [sp], #(32+16*NSAVEXREGPAIRS) - cfi_adjust_cfa_offset (-32-16*NSAVEXREGPAIRS) -# undef NSAVEXREGPAIRS - RET -2: - /* This is the slow path. We need to call __tls_get_addr() which - means we need to save and restore all the register that the - callee will trash. */ - - /* Save the remaining registers that we must treat as caller save. */ -# define NSAVEXREGPAIRS 7 - stp x5, x6, [sp, #-16*NSAVEXREGPAIRS]! - cfi_adjust_cfa_offset (16*NSAVEXREGPAIRS) - stp x7, x8, [sp, #16*1] - stp x9, x10, [sp, #16*2] - stp x11, x12, [sp, #16*3] - stp x13, x14, [sp, #16*4] - stp x15, x16, [sp, #16*5] - stp x17, x18, [sp, #16*6] - - SAVE_Q_REGISTERS - - mov x0, x1 - bl __tls_get_addr - - mrs x1, tpidr_el0 - sub PTR_REG (0), PTR_REG (0), PTR_REG (1) - - RESTORE_Q_REGISTERS - - ldp x7, x8, [sp, #16*1] - ldp x9, x10, [sp, #16*2] - ldp x11, x12, [sp, #16*3] - ldp x13, x14, [sp, #16*4] - ldp x15, x16, [sp, #16*5] - ldp x17, x18, [sp, #16*6] - ldp x5, x6, [sp], #16*NSAVEXREGPAIRS - cfi_adjust_cfa_offset (-16*NSAVEXREGPAIRS) - b 1b - cfi_endproc - .size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic -# undef NSAVEXREGPAIRS -#endif - - /* This function is a wrapper for a lazy resolver for TLS_DESC - RELA relocations. - When the actual resolver returns, it will have adjusted the - TLS descriptor such that we can tail-call it for it to return - the TP offset of the symbol. */ - - .hidden _dl_tlsdesc_resolve_rela - .global _dl_tlsdesc_resolve_rela - .type _dl_tlsdesc_resolve_rela,%function - cfi_startproc - .align 2 -_dl_tlsdesc_resolve_rela: -#define NSAVEXREGPAIRS 9 - stp x29, x30, [sp, #-(32+16*NSAVEXREGPAIRS)]! - cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) - mov x29, sp - stp x1, x4, [sp, #32+16*0] - stp x5, x6, [sp, #32+16*1] - stp x7, x8, [sp, #32+16*2] - stp x9, x10, [sp, #32+16*3] - stp x11, x12, [sp, #32+16*4] - stp x13, x14, [sp, #32+16*5] - stp x15, x16, [sp, #32+16*6] - stp x17, x18, [sp, #32+16*7] - str x0, [sp, #32+16*8] - - SAVE_Q_REGISTERS - - DELOUSE (3) - ldr PTR_REG (1), [x3, #PTR_SIZE] - bl _dl_tlsdesc_resolve_rela_fixup - - RESTORE_Q_REGISTERS - - ldr x0, [sp, #32+16*8] - DELOUSE (0) - ldr PTR_REG (1), [x0] - blr x1 - - ldp x1, x4, [sp, #32+16*0] - ldp x5, x6, [sp, #32+16*1] - ldp x7, x8, [sp, #32+16*2] - ldp x9, x10, [sp, #32+16*3] - ldp x11, x12, [sp, #32+16*4] - ldp x13, x14, [sp, #32+16*5] - ldp x15, x16, [sp, #32+16*6] - ldp x17, x18, [sp, #32+16*7] - ldp x29, x30, [sp], #(32+16*NSAVEXREGPAIRS) - cfi_adjust_cfa_offset (-32-16*NSAVEXREGPAIRS) - ldp x2, x3, [sp], #16 - cfi_adjust_cfa_offset (-16) - RET -#undef NSAVEXREGPAIRS - cfi_endproc - .size _dl_tlsdesc_resolve_rela, .-_dl_tlsdesc_resolve_rela - - /* This function is a placeholder for lazy resolving of TLS - relocations. Once some thread starts resolving a TLS - relocation, it sets up the TLS descriptor to use this - resolver, such that other threads that would attempt to - resolve it concurrently may skip the call to the original lazy - resolver and go straight to a condition wait. - - When the actual resolver returns, it will have adjusted the - TLS descriptor such that we can tail-call it for it to return - the TP offset of the symbol. */ - - .hidden _dl_tlsdesc_resolve_hold - .global _dl_tlsdesc_resolve_hold - .type _dl_tlsdesc_resolve_hold,%function - cfi_startproc - .align 2 -_dl_tlsdesc_resolve_hold: -#define NSAVEXREGPAIRS 10 -1: - stp x29, x30, [sp, #-(32+16*NSAVEXREGPAIRS)]! - cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) - mov x29, sp - stp x1, x2, [sp, #32+16*0] - stp x3, x4, [sp, #32+16*1] - stp x5, x6, [sp, #32+16*2] - stp x7, x8, [sp, #32+16*3] - stp x9, x10, [sp, #32+16*4] - stp x11, x12, [sp, #32+16*5] - stp x13, x14, [sp, #32+16*6] - stp x15, x16, [sp, #32+16*7] - stp x17, x18, [sp, #32+16*8] - str x0, [sp, #32+16*9] - - SAVE_Q_REGISTERS - - adr x1, 1b - bl _dl_tlsdesc_resolve_hold_fixup - - RESTORE_Q_REGISTERS - - ldr x0, [sp, #32+16*9] - DELOUSE (0) - ldr PTR_REG (1), [x0] - blr x1 - - ldp x1, x2, [sp, #32+16*0] - ldp x3, x4, [sp, #32+16*1] - ldp x5, x6, [sp, #32+16*2] - ldp x7, x8, [sp, #32+16*3] - ldp x9, x10, [sp, #32+16*4] - ldp x11, x12, [sp, #32+16*5] - ldp x13, x14, [sp, #32+16*6] - ldp x15, x16, [sp, #32+16*7] - ldp x17, x18, [sp, #32+16*8] - ldp x29, x30, [sp], #(32+16*NSAVEXREGPAIRS) - cfi_adjust_cfa_offset (-32-16*NSAVEXREGPAIRS) - RET - cfi_endproc - .size _dl_tlsdesc_resolve_hold, .-_dl_tlsdesc_resolve_hold -#undef NSAVEXREGPAIRS diff --git a/sysdeps/aarch64/dl-tlsdesc.h b/sysdeps/aarch64/dl-tlsdesc.h deleted file mode 100644 index 127d1258d3..0000000000 --- a/sysdeps/aarch64/dl-tlsdesc.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Thread-local storage descriptor handling in the ELF dynamic linker. - AArch64 version. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _AARCH64_DL_TLSDESC_H -#define _AARCH64_DL_TLSDESC_H 1 - -/* Type used to represent a TLS descriptor in the GOT. */ -struct tlsdesc -{ - ptrdiff_t (*entry) (struct tlsdesc *); - void *arg; -}; - -typedef struct dl_tls_index -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - -/* Type used as the argument in a TLS descriptor for a symbol that - needs dynamic TLS offsets. */ -struct tlsdesc_dynamic_arg -{ - tls_index tlsinfo; - size_t gen_count; -}; - -extern ptrdiff_t attribute_hidden -_dl_tlsdesc_return (struct tlsdesc *); - -extern ptrdiff_t attribute_hidden -_dl_tlsdesc_return_lazy (struct tlsdesc *); - -extern ptrdiff_t attribute_hidden -_dl_tlsdesc_undefweak (struct tlsdesc *); - -extern ptrdiff_t attribute_hidden -_dl_tlsdesc_resolve_rela (struct tlsdesc *); - -extern ptrdiff_t attribute_hidden -_dl_tlsdesc_resolve_hold (struct tlsdesc *); - -# ifdef SHARED -extern void *internal_function _dl_make_tlsdesc_dynamic (struct link_map *, - size_t); - -extern ptrdiff_t attribute_hidden -_dl_tlsdesc_dynamic (struct tlsdesc *); -#endif - -#endif diff --git a/sysdeps/aarch64/dl-trampoline.S b/sysdeps/aarch64/dl-trampoline.S deleted file mode 100644 index a2a0b7d4b1..0000000000 --- a/sysdeps/aarch64/dl-trampoline.S +++ /dev/null @@ -1,300 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -#include "dl-link.h" - -#define ip0 x16 -#define ip0l PTR_REG (16) -#define ip1 x17 -#define lr x30 - -/* RELA relocatons are 3 pointers */ -#define RELA_SIZE (PTR_SIZE * 3) - - .text - .globl _dl_runtime_resolve - .type _dl_runtime_resolve, #function - cfi_startproc - .align 2 -_dl_runtime_resolve: - /* AArch64 we get called with: - ip0 &PLTGOT[2] - ip1 temp(dl resolver entry point) - [sp, #8] lr - [sp, #0] &PLTGOT[n] - */ - - cfi_rel_offset (lr, 8) - - /* Save arguments. */ - stp x8, x9, [sp, #-(80+8*16)]! - cfi_adjust_cfa_offset (80+8*16) - cfi_rel_offset (x8, 0) - cfi_rel_offset (x9, 8) - - stp x6, x7, [sp, #16] - cfi_rel_offset (x6, 16) - cfi_rel_offset (x7, 24) - - stp x4, x5, [sp, #32] - cfi_rel_offset (x4, 32) - cfi_rel_offset (x5, 40) - - stp x2, x3, [sp, #48] - cfi_rel_offset (x2, 48) - cfi_rel_offset (x3, 56) - - stp x0, x1, [sp, #64] - cfi_rel_offset (x0, 64) - cfi_rel_offset (x1, 72) - - stp q0, q1, [sp, #(80+0*16)] - cfi_rel_offset (q0, 80+0*16) - cfi_rel_offset (q1, 80+1*16) - - stp q2, q3, [sp, #(80+2*16)] - cfi_rel_offset (q0, 80+2*16) - cfi_rel_offset (q1, 80+3*16) - - stp q4, q5, [sp, #(80+4*16)] - cfi_rel_offset (q0, 80+4*16) - cfi_rel_offset (q1, 80+5*16) - - stp q6, q7, [sp, #(80+6*16)] - cfi_rel_offset (q0, 80+6*16) - cfi_rel_offset (q1, 80+7*16) - - /* Get pointer to linker struct. */ - ldr PTR_REG (0), [ip0, #-PTR_SIZE] - - /* Prepare to call _dl_fixup(). */ - ldr x1, [sp, 80+8*16] /* Recover &PLTGOT[n] */ - - sub x1, x1, ip0 - add x1, x1, x1, lsl #1 - lsl x1, x1, #3 - sub x1, x1, #(RELA_SIZE<<3) - lsr x1, x1, #3 - - /* Call fixup routine. */ - bl _dl_fixup - - /* Save the return. */ - mov ip0, x0 - - /* Get arguments and return address back. */ - ldp q0, q1, [sp, #(80+0*16)] - ldp q2, q3, [sp, #(80+2*16)] - ldp q4, q5, [sp, #(80+4*16)] - ldp q6, q7, [sp, #(80+6*16)] - ldp x0, x1, [sp, #64] - ldp x2, x3, [sp, #48] - ldp x4, x5, [sp, #32] - ldp x6, x7, [sp, #16] - ldp x8, x9, [sp], #(80+8*16) - cfi_adjust_cfa_offset (-(80+8*16)) - - ldp ip1, lr, [sp], #16 - cfi_adjust_cfa_offset (-16) - - /* Jump to the newly found address. */ - br ip0 - - cfi_endproc - .size _dl_runtime_resolve, .-_dl_runtime_resolve -#ifndef PROF - .globl _dl_runtime_profile - .type _dl_runtime_profile, #function - cfi_startproc - .align 2 -_dl_runtime_profile: - /* AArch64 we get called with: - ip0 &PLTGOT[2] - ip1 temp(dl resolver entry point) - [sp, #8] lr - [sp, #0] &PLTGOT[n] - - Stack frame layout: - [sp, #...] lr - [sp, #...] &PLTGOT[n] - [sp, #96] La_aarch64_regs - [sp, #48] La_aarch64_retval - [sp, #40] frame size return from pltenter - [sp, #32] dl_profile_call saved x1 - [sp, #24] dl_profile_call saved x0 - [sp, #16] t1 - [sp, #0] x29, lr <- x29 - */ - -# define OFFSET_T1 16 -# define OFFSET_SAVED_CALL_X0 OFFSET_T1 + 8 -# define OFFSET_FS OFFSET_SAVED_CALL_X0 + 16 -# define OFFSET_RV OFFSET_FS + 8 -# define OFFSET_RG OFFSET_RV + DL_SIZEOF_RV - -# define SF_SIZE OFFSET_RG + DL_SIZEOF_RG - -# define OFFSET_PLTGOTN SF_SIZE -# define OFFSET_LR OFFSET_PLTGOTN + 8 - - /* Save arguments. */ - sub sp, sp, #SF_SIZE - cfi_adjust_cfa_offset (SF_SIZE) - stp x29, x30, [SP, #0] - mov x29, sp - cfi_def_cfa_register (x29) - cfi_rel_offset (x29, 0) - cfi_rel_offset (lr, 8) - - stp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*0] - cfi_rel_offset (x0, OFFSET_RG + DL_OFFSET_RG_X0 + 16*0 + 0) - cfi_rel_offset (x1, OFFSET_RG + DL_OFFSET_RG_X0 + 16*0 + 8) - stp x2, x3, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*1] - cfi_rel_offset (x2, OFFSET_RG + DL_OFFSET_RG_X0 + 16*1 + 0) - cfi_rel_offset (x3, OFFSET_RG + DL_OFFSET_RG_X0 + 16*1 + 8) - stp x4, x5, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*2] - cfi_rel_offset (x4, OFFSET_RG + DL_OFFSET_RG_X0 + 16*2 + 0) - cfi_rel_offset (x5, OFFSET_RG + DL_OFFSET_RG_X0 + 16*2 + 8) - stp x6, x7, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*3] - cfi_rel_offset (x6, OFFSET_RG + DL_OFFSET_RG_X0 + 16*3 + 0) - cfi_rel_offset (x7, OFFSET_RG + DL_OFFSET_RG_X0 + 16*3 + 8) - - stp d0, d1, [X29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*0] - cfi_rel_offset (d0, OFFSET_RG + DL_OFFSET_RG_D0 + 16*0) - cfi_rel_offset (d1, OFFSET_RG + DL_OFFSET_RG_D0 + 16*0 + 8) - stp d2, d3, [X29, #OFFSET_RG+ DL_OFFSET_RG_D0 + 16*1] - cfi_rel_offset (d2, OFFSET_RG + DL_OFFSET_RG_D0 + 16*1 + 0) - cfi_rel_offset (d3, OFFSET_RG + DL_OFFSET_RG_D0 + 16*1 + 8) - stp d4, d5, [X29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*2] - cfi_rel_offset (d4, OFFSET_RG + DL_OFFSET_RG_D0 + 16*2 + 0) - cfi_rel_offset (d5, OFFSET_RG + DL_OFFSET_RG_D0 + 16*2 + 8) - stp d6, d7, [X29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*3] - cfi_rel_offset (d6, OFFSET_RG + DL_OFFSET_RG_D0 + 16*3 + 0) - cfi_rel_offset (d7, OFFSET_RG + DL_OFFSET_RG_D0 + 16*3 + 8) - - add x0, x29, #SF_SIZE + 16 - ldr x1, [x29, #OFFSET_LR] - stp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_SP] - - /* Get pointer to linker struct. */ - ldr PTR_REG (0), [ip0, #-PTR_SIZE] - - /* Prepare to call _dl_profile_fixup(). */ - ldr x1, [x29, OFFSET_PLTGOTN] /* Recover &PLTGOT[n] */ - - sub x1, x1, ip0 - add x1, x1, x1, lsl #1 - lsl x1, x1, #3 - sub x1, x1, #(RELA_SIZE<<3) - lsr x1, x1, #3 - - stp x0, x1, [x29, #OFFSET_SAVED_CALL_X0] - - /* Set up extra args for _dl_profile_fixup */ - ldr x2, [x29, #OFFSET_LR] /* load saved LR */ - add x3, x29, #OFFSET_RG /* address of La_aarch64_reg */ - add x4, x29, #OFFSET_FS /* address of framesize */ - bl _dl_profile_fixup - - ldr ip0l, [x29, #OFFSET_FS] /* framesize == 0 */ - cmp ip0l, #0 - bge 1f - cfi_remember_state - - /* Save the return. */ - mov ip0, x0 - - /* Get arguments and return address back. */ - ldp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*0] - ldp x2, x3, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*1] - ldp x4, x5, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*2] - ldp x6, x7, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*3] - ldp d0, d1, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*0] - ldp d2, d3, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*1] - ldp d4, d5, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*2] - ldp d6, d7, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*3] - - cfi_def_cfa_register (sp) - ldp x29, x30, [x29, #0] - cfi_restore(x29) - cfi_restore(x30) - - add sp, sp, SF_SIZE + 16 - cfi_adjust_cfa_offset (- SF_SIZE - 16) - - /* Jump to the newly found address. */ - br ip0 - - cfi_restore_state -1: - /* The new frame size is in ip0. */ - - sub PTR_REG (1), PTR_REG (29), ip0l - and sp, x1, #0xfffffffffffffff0 - - str x0, [x29, #OFFSET_T1] - - mov x0, sp - add x1, x29, #SF_SIZE + 16 - mov x2, ip0 - bl memcpy - - ldr ip0, [x29, #OFFSET_T1] - - /* Call the function. */ - ldp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*0] - ldp x2, x3, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*1] - ldp x4, x5, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*2] - ldp x6, x7, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*3] - ldp d0, d1, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*0] - ldp d2, d3, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*1] - ldp d4, d5, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*2] - ldp d6, d7, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*3] - blr ip0 - stp x0, x1, [x29, #OFFSET_RV + DL_OFFSET_RV_X0] - stp d0, d1, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*0] - stp d2, d3, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*1] - - /* Setup call to pltexit */ - ldp x0, x1, [x29, #OFFSET_SAVED_CALL_X0] - add x2, x29, #OFFSET_RG - add x3, x29, #OFFSET_RV - bl _dl_call_pltexit - - ldp x0, x1, [x29, #OFFSET_RV + DL_OFFSET_RV_X0] - ldp d0, d1, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*0] - ldp d2, d3, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*1] - /* LR from within La_aarch64_reg */ - ldr lr, [x29, #OFFSET_RG + DL_OFFSET_RG_LR] - cfi_restore(lr) - mov sp, x29 - cfi_def_cfa_register (sp) - ldr x29, [x29, #0] - cfi_restore(x29) - add sp, sp, SF_SIZE + 16 - cfi_adjust_cfa_offset (- SF_SIZE - 16) - - br lr - - cfi_endproc - .size _dl_runtime_profile, .-_dl_runtime_profile -#endif - .previous diff --git a/sysdeps/aarch64/fpu/e_sqrt.c b/sysdeps/aarch64/fpu/e_sqrt.c deleted file mode 100644 index f984d877b6..0000000000 --- a/sysdeps/aarch64/fpu/e_sqrt.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Square root of floating point number. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -double -__ieee754_sqrt (double d) -{ - double res; - asm ("fsqrt %d0, %d1" : "=w" (res) : "w" (d)); - return res; -} -strong_alias (__ieee754_sqrt, __sqrt_finite) diff --git a/sysdeps/aarch64/fpu/e_sqrtf.c b/sysdeps/aarch64/fpu/e_sqrtf.c deleted file mode 100644 index 67707ef833..0000000000 --- a/sysdeps/aarch64/fpu/e_sqrtf.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Single-precision floating point square root. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -float -__ieee754_sqrtf (float s) -{ - float res; - asm ("fsqrt %s0, %s1" : "=w" (res) : "w" (s)); - return res; -} -strong_alias (__ieee754_sqrtf, __sqrtf_finite) diff --git a/sysdeps/aarch64/fpu/fclrexcpt.c b/sysdeps/aarch64/fpu/fclrexcpt.c deleted file mode 100644 index 254f6a6b54..0000000000 --- a/sysdeps/aarch64/fpu/fclrexcpt.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -feclearexcept (int excepts) -{ - fpu_fpsr_t fpsr; - fpu_fpsr_t fpsr_new; - - excepts &= FE_ALL_EXCEPT; - - _FPU_GETFPSR (fpsr); - fpsr_new = fpsr & ~excepts; - - if (fpsr != fpsr_new) - _FPU_SETFPSR (fpsr_new); - - return 0; -} -libm_hidden_def (feclearexcept) diff --git a/sysdeps/aarch64/fpu/fedisblxcpt.c b/sysdeps/aarch64/fpu/fedisblxcpt.c deleted file mode 100644 index 900da1f4ec..0000000000 --- a/sysdeps/aarch64/fpu/fedisblxcpt.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fedisableexcept (int excepts) -{ - fpu_control_t fpcr; - fpu_control_t fpcr_new; - - _FPU_GETCW (fpcr); - excepts &= FE_ALL_EXCEPT; - fpcr_new = fpcr & ~(excepts << FE_EXCEPT_SHIFT); - - if (fpcr != fpcr_new) - _FPU_SETCW (fpcr_new); - - return (fpcr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/aarch64/fpu/feenablxcpt.c b/sysdeps/aarch64/fpu/feenablxcpt.c deleted file mode 100644 index 029ef1db8b..0000000000 --- a/sysdeps/aarch64/fpu/feenablxcpt.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -feenableexcept (int excepts) -{ - fpu_control_t fpcr; - fpu_control_t fpcr_new; - fpu_control_t updated_fpcr; - - _FPU_GETCW (fpcr); - excepts &= FE_ALL_EXCEPT; - fpcr_new = fpcr | (excepts << FE_EXCEPT_SHIFT); - - if (fpcr != fpcr_new) - { - _FPU_SETCW (fpcr_new); - - /* Trapping exceptions are optional in AArch64; the relevant enable - bits in FPCR are RES0 hence the absence of support can be detected - by reading back the FPCR and comparing with the required value. */ - _FPU_GETCW (updated_fpcr); - - if (fpcr_new & ~updated_fpcr) - return -1; - } - - return (fpcr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/aarch64/fpu/fegetenv.c b/sysdeps/aarch64/fpu/fegetenv.c deleted file mode 100644 index ac277949d7..0000000000 --- a/sysdeps/aarch64/fpu/fegetenv.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__fegetenv (fenv_t *envp) -{ - fpu_control_t fpcr; - fpu_fpsr_t fpsr; - _FPU_GETCW (fpcr); - _FPU_GETFPSR (fpsr); - envp->__fpcr = fpcr; - envp->__fpsr = fpsr; - return 0; -} -libm_hidden_def (__fegetenv) -weak_alias (__fegetenv, fegetenv) -libm_hidden_weak (fegetenv) diff --git a/sysdeps/aarch64/fpu/fegetexcept.c b/sysdeps/aarch64/fpu/fegetexcept.c deleted file mode 100644 index fa44334644..0000000000 --- a/sysdeps/aarch64/fpu/fegetexcept.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fegetexcept (void) -{ - fpu_control_t fpcr; - _FPU_GETCW (fpcr); - return (fpcr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/aarch64/fpu/fegetmode.c b/sysdeps/aarch64/fpu/fegetmode.c deleted file mode 100644 index 1898732184..0000000000 --- a/sysdeps/aarch64/fpu/fegetmode.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Store current floating-point control modes. AArch64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fegetmode (femode_t *modep) -{ - _FPU_GETCW (*modep); - return 0; -} diff --git a/sysdeps/aarch64/fpu/fegetround.c b/sysdeps/aarch64/fpu/fegetround.c deleted file mode 100644 index 3d51d9b43e..0000000000 --- a/sysdeps/aarch64/fpu/fegetround.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__fegetround (void) -{ - return get_rounding_mode (); -} -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/aarch64/fpu/feholdexcpt.c b/sysdeps/aarch64/fpu/feholdexcpt.c deleted file mode 100644 index df775ffc53..0000000000 --- a/sysdeps/aarch64/fpu/feholdexcpt.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__feholdexcept (fenv_t *envp) -{ - libc_feholdexcept_aarch64 (envp); - return 0; -} -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/aarch64/fpu/fesetenv.c b/sysdeps/aarch64/fpu/fesetenv.c deleted file mode 100644 index 9875188735..0000000000 --- a/sysdeps/aarch64/fpu/fesetenv.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__fesetenv (const fenv_t *envp) -{ - fpu_control_t fpcr; - fpu_control_t fpcr_new; - fpu_control_t updated_fpcr; - fpu_fpsr_t fpsr; - fpu_fpsr_t fpsr_new; - - _FPU_GETCW (fpcr); - - if ((envp != FE_DFL_ENV) && (envp != FE_NOMASK_ENV)) - { - /* The new FPCR/FPSR are valid, so don't merge the reserved flags. */ - fpcr_new = envp->__fpcr; - - if (fpcr != fpcr_new) - _FPU_SETCW (fpcr_new); - - _FPU_SETFPSR (envp->__fpsr); - return 0; - } - - _FPU_GETFPSR (fpsr); - fpcr_new = fpcr & _FPU_RESERVED; - fpsr_new = fpsr & _FPU_FPSR_RESERVED; - - if (envp == FE_DFL_ENV) - { - fpcr_new |= _FPU_DEFAULT; - fpsr_new |= _FPU_FPSR_DEFAULT; - } - else - { - fpcr_new |= _FPU_FPCR_IEEE; - fpsr_new |= _FPU_FPSR_IEEE; - } - - _FPU_SETFPSR (fpsr_new); - - if (fpcr != fpcr_new) - { - _FPU_SETCW (fpcr_new); - - /* Trapping exceptions are optional in AArch64; the relevant enable - bits in FPCR are RES0 hence the absence of support can be detected - by reading back the FPCR and comparing with the required value. */ - _FPU_GETCW (updated_fpcr); - - return fpcr_new & ~updated_fpcr; - } - - return 0; -} -libm_hidden_def (__fesetenv) -weak_alias (__fesetenv, fesetenv) -libm_hidden_weak (fesetenv) diff --git a/sysdeps/aarch64/fpu/fesetexcept.c b/sysdeps/aarch64/fpu/fesetexcept.c deleted file mode 100644 index b8915cd91b..0000000000 --- a/sysdeps/aarch64/fpu/fesetexcept.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Set given exception flags. AArch64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fesetexcept (int excepts) -{ - fpu_fpsr_t fpsr; - fpu_fpsr_t fpsr_new; - - _FPU_GETFPSR (fpsr); - fpsr_new = fpsr | (excepts & FE_ALL_EXCEPT); - if (fpsr != fpsr_new) - _FPU_SETFPSR (fpsr_new); - - return 0; -} diff --git a/sysdeps/aarch64/fpu/fesetmode.c b/sysdeps/aarch64/fpu/fesetmode.c deleted file mode 100644 index 1947eb2a4f..0000000000 --- a/sysdeps/aarch64/fpu/fesetmode.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Install given floating-point control modes. AArch64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fesetmode (const femode_t *modep) -{ - fpu_control_t fpcr, fpcr_new; - _FPU_GETCW (fpcr); - if (modep == FE_DFL_MODE) - fpcr_new = (fpcr & _FPU_RESERVED) | _FPU_DEFAULT; - else - fpcr_new = *modep; - if (fpcr != fpcr_new) - _FPU_SETCW (fpcr_new); - return 0; -} diff --git a/sysdeps/aarch64/fpu/fesetround.c b/sysdeps/aarch64/fpu/fesetround.c deleted file mode 100644 index caae99f75d..0000000000 --- a/sysdeps/aarch64/fpu/fesetround.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__fesetround (int round) -{ - if (round & ~_FPU_FPCR_RM_MASK) - return 1; - - libc_fesetround_aarch64 (round); - return 0; -} -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/aarch64/fpu/feupdateenv.c b/sysdeps/aarch64/fpu/feupdateenv.c deleted file mode 100644 index e56fc3a44f..0000000000 --- a/sysdeps/aarch64/fpu/feupdateenv.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__feupdateenv (const fenv_t *envp) -{ - fpu_control_t fpcr; - fpu_control_t fpcr_new; - fpu_control_t updated_fpcr; - fpu_fpsr_t fpsr; - fpu_fpsr_t fpsr_new; - int excepts; - - _FPU_GETCW (fpcr); - _FPU_GETFPSR (fpsr); - excepts = fpsr & FE_ALL_EXCEPT; - - if ((envp != FE_DFL_ENV) && (envp != FE_NOMASK_ENV)) - { - fpcr_new = envp->__fpcr; - fpsr_new = envp->__fpsr | excepts; - - if (fpcr != fpcr_new) - _FPU_SETCW (fpcr_new); - - if (fpsr != fpsr_new) - _FPU_SETFPSR (fpsr_new); - - if (excepts & (fpcr_new >> FE_EXCEPT_SHIFT)) - return __feraiseexcept (excepts); - - return 0; - } - - fpcr_new = fpcr & _FPU_RESERVED; - fpsr_new = fpsr & (_FPU_FPSR_RESERVED | FE_ALL_EXCEPT); - - if (envp == FE_DFL_ENV) - { - fpcr_new |= _FPU_DEFAULT; - fpsr_new |= _FPU_FPSR_DEFAULT; - } - else - { - fpcr_new |= _FPU_FPCR_IEEE; - fpsr_new |= _FPU_FPSR_IEEE; - } - - _FPU_SETFPSR (fpsr_new); - - if (fpcr != fpcr_new) - { - _FPU_SETCW (fpcr_new); - - /* Trapping exceptions are optional in AArch64; the relevant enable - bits in FPCR are RES0 hence the absence of support can be detected - by reading back the FPCR and comparing with the required value. */ - _FPU_GETCW (updated_fpcr); - - if (fpcr_new & ~updated_fpcr) - return 1; - } - - if (excepts & (fpcr_new >> FE_EXCEPT_SHIFT)) - return __feraiseexcept (excepts); - - return 0; -} -libm_hidden_def (__feupdateenv) -weak_alias (__feupdateenv, feupdateenv) -libm_hidden_weak (feupdateenv) diff --git a/sysdeps/aarch64/fpu/fgetexcptflg.c b/sysdeps/aarch64/fpu/fgetexcptflg.c deleted file mode 100644 index 348c58ac40..0000000000 --- a/sysdeps/aarch64/fpu/fgetexcptflg.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fegetexceptflag (fexcept_t *flagp, int excepts) -{ - *flagp = libc_fetestexcept_aarch64 (excepts); - return 0; -} diff --git a/sysdeps/aarch64/fpu/fpu_control.h b/sysdeps/aarch64/fpu/fpu_control.h deleted file mode 100644 index efad68b98e..0000000000 --- a/sysdeps/aarch64/fpu/fpu_control.h +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _AARCH64_FPU_CONTROL_H -#define _AARCH64_FPU_CONTROL_H - -/* Macros for accessing the FPCR and FPSR. */ - -#define _FPU_GETCW(fpcr) \ - __asm__ __volatile__ ("mrs %0, fpcr" : "=r" (fpcr)) - -#define _FPU_SETCW(fpcr) \ - __asm__ __volatile__ ("msr fpcr, %0" : : "r" (fpcr)) - -#define _FPU_GETFPSR(fpsr) \ - __asm__ __volatile__ ("mrs %0, fpsr" : "=r" (fpsr)) - -#define _FPU_SETFPSR(fpsr) \ - __asm__ __volatile__ ("msr fpsr, %0" : : "r" (fpsr)) - -/* Reserved bits should be preserved when modifying register - contents. These two masks indicate which bits in each of FPCR and - FPSR should not be changed. */ - -#define _FPU_RESERVED 0xfe0fe0ff -#define _FPU_FPSR_RESERVED 0x0fffffe0 - -#define _FPU_DEFAULT 0x00000000 -#define _FPU_FPSR_DEFAULT 0x00000000 - -/* Layout of FPCR and FPSR: - - | | | | | | | | - 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 - s s s s s s s s s s s - c c c c c c c c c c c c - N Z C V Q A D F R R S S S L L L I U U I U O D I I U U I U O D I - C H N Z M M T T B E E E D N N X F F Z O D N N X F F Z O - P O O R R Z N N N E K K E E E E E C K K C C C C C - D D I I P - E E D D - E E - */ - -#define _FPU_FPCR_RM_MASK 0xc00000 - -#define _FPU_FPCR_MASK_IXE 0x1000 -#define _FPU_FPCR_MASK_UFE 0x0800 -#define _FPU_FPCR_MASK_OFE 0x0400 -#define _FPU_FPCR_MASK_DZE 0x0200 -#define _FPU_FPCR_MASK_IOE 0x0100 - -#define _FPU_FPCR_IEEE \ - (_FPU_DEFAULT | _FPU_FPCR_MASK_IXE | \ - _FPU_FPCR_MASK_UFE | _FPU_FPCR_MASK_OFE | \ - _FPU_FPCR_MASK_DZE | _FPU_FPCR_MASK_IOE) - -#define _FPU_FPSR_IEEE 0 - -typedef unsigned int fpu_control_t; -typedef unsigned int fpu_fpsr_t; - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#endif diff --git a/sysdeps/aarch64/fpu/fraiseexcpt.c b/sysdeps/aarch64/fpu/fraiseexcpt.c deleted file mode 100644 index 557b061ca7..0000000000 --- a/sysdeps/aarch64/fpu/fraiseexcpt.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__feraiseexcept (int excepts) -{ - int fpsr; - const float fp_zero = 0.0; - const float fp_one = 1.0; - const float fp_max = FLT_MAX; - const float fp_min = FLT_MIN; - const float fp_1e32 = 1.0e32f; - const float fp_two = 2.0; - const float fp_three = 3.0; - - /* Raise exceptions represented by EXCEPTS. But we must raise only - one signal at a time. It is important that if the OVERFLOW or - UNDERFLOW exception and the inexact exception are given at the - same time, the OVERFLOW or UNDERFLOW exception precedes the - INEXACT exception. - - After each exception we read from the FPSR, to force the - exception to be raised immediately. */ - - if (FE_INVALID & excepts) - __asm__ __volatile__ ( - "ldr s0, %1\n\t" - "fdiv s0, s0, s0\n\t" - "mrs %0, fpsr" : "=r" (fpsr) - : "m" (fp_zero) - : "d0"); - - if (FE_DIVBYZERO & excepts) - __asm__ __volatile__ ( - "ldr s0, %1\n\t" - "ldr s1, %2\n\t" - "fdiv s0, s0, s1\n\t" - "mrs %0, fpsr" : "=r" (fpsr) - : "m" (fp_one), "m" (fp_zero) - : "d0", "d1"); - - if (FE_OVERFLOW & excepts) - /* There's no way to raise overflow without also raising inexact. */ - __asm__ __volatile__ ( - "ldr s0, %1\n\t" - "ldr s1, %2\n\t" - "fadd s0, s0, s1\n\t" - "mrs %0, fpsr" : "=r" (fpsr) - : "m" (fp_max), "m" (fp_1e32) - : "d0", "d1"); - - if (FE_UNDERFLOW & excepts) - __asm__ __volatile__ ( - "ldr s0, %1\n\t" - "ldr s1, %2\n\t" - "fdiv s0, s0, s1\n\t" - "mrs %0, fpsr" : "=r" (fpsr) - : "m" (fp_min), "m" (fp_three) - : "d0", "d1"); - - if (FE_INEXACT & excepts) - __asm__ __volatile__ ( - "ldr s0, %1\n\t" - "ldr s1, %2\n\t" - "fdiv s0, s0, s1\n\t" - "mrs %0, fpsr" : "=r" (fpsr) - : "m" (fp_two), "m" (fp_three) - : "d0", "d1"); - - return 0; -} -libm_hidden_def (__feraiseexcept) -weak_alias (__feraiseexcept, feraiseexcept) -libm_hidden_weak (feraiseexcept) diff --git a/sysdeps/aarch64/fpu/fsetexcptflg.c b/sysdeps/aarch64/fpu/fsetexcptflg.c deleted file mode 100644 index dfa4810f58..0000000000 --- a/sysdeps/aarch64/fpu/fsetexcptflg.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - fpu_fpsr_t fpsr; - fpu_fpsr_t fpsr_new; - - /* Get the current environment. */ - _FPU_GETFPSR (fpsr); - excepts &= FE_ALL_EXCEPT; - - /* Set the desired exception mask. */ - fpsr_new = fpsr & ~excepts; - fpsr_new |= *flagp & excepts; - - /* Save state back to the FPU. */ - if (fpsr != fpsr_new) - _FPU_SETFPSR (fpsr_new); - - return 0; -} diff --git a/sysdeps/aarch64/fpu/ftestexcept.c b/sysdeps/aarch64/fpu/ftestexcept.c deleted file mode 100644 index d41c46bedc..0000000000 --- a/sysdeps/aarch64/fpu/ftestexcept.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fetestexcept (int excepts) -{ - return libc_fetestexcept_aarch64 (excepts); -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/aarch64/fpu/get-rounding-mode.h b/sysdeps/aarch64/fpu/get-rounding-mode.h deleted file mode 100644 index 17ec111abc..0000000000 --- a/sysdeps/aarch64/fpu/get-rounding-mode.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Determine floating-point rounding mode within libc. AArch64 version. - - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _AARCH64_GET_ROUNDING_MODE_H -#define _AARCH64_GET_ROUNDING_MODE_H 1 - -#include -#include - -/* Return the floating-point rounding mode. */ - -static inline int -get_rounding_mode (void) -{ - fpu_control_t fpcr; - - _FPU_GETCW (fpcr); - return fpcr & _FPU_FPCR_RM_MASK; -} - -#endif /* get-rounding-mode.h */ diff --git a/sysdeps/aarch64/fpu/math_private.h b/sysdeps/aarch64/fpu/math_private.h deleted file mode 100644 index 807111ea5a..0000000000 --- a/sysdeps/aarch64/fpu/math_private.h +++ /dev/null @@ -1,324 +0,0 @@ -/* Private floating point rounding and exceptions handling. AArch64 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef AARCH64_MATH_PRIVATE_H -#define AARCH64_MATH_PRIVATE_H 1 - -#include -#include - -#define math_opt_barrier(x) \ -({ __typeof (x) __x = (x); __asm ("" : "+w" (__x)); __x; }) -#define math_force_eval(x) \ -({ __typeof (x) __x = (x); __asm __volatile__ ("" : : "w" (__x)); }) - -extern __always_inline double -__ieee754_sqrt (double d) -{ - double res; - asm __volatile__ ("fsqrt %d0, %d1" : "=w" (res) : "w" (d)); - return res; -} - -extern __always_inline float -__ieee754_sqrtf (float s) -{ - float res; - asm __volatile__ ("fsqrt %s0, %s1" : "=w" (res) : "w" (s)); - return res; -} - -static __always_inline void -libc_feholdexcept_aarch64 (fenv_t *envp) -{ - fpu_control_t fpcr; - fpu_control_t new_fpcr; - fpu_fpsr_t fpsr; - fpu_fpsr_t new_fpsr; - - _FPU_GETCW (fpcr); - _FPU_GETFPSR (fpsr); - envp->__fpcr = fpcr; - envp->__fpsr = fpsr; - - /* Clear exception flags and set all exceptions to non-stop. */ - new_fpcr = fpcr & ~(FE_ALL_EXCEPT << FE_EXCEPT_SHIFT); - new_fpsr = fpsr & ~FE_ALL_EXCEPT; - - if (__glibc_unlikely (new_fpcr != fpcr)) - _FPU_SETCW (new_fpcr); - - if (new_fpsr != fpsr) - _FPU_SETFPSR (new_fpsr); -} - -#define libc_feholdexcept libc_feholdexcept_aarch64 -#define libc_feholdexceptf libc_feholdexcept_aarch64 -#define libc_feholdexceptl libc_feholdexcept_aarch64 - -static __always_inline void -libc_fesetround_aarch64 (int round) -{ - fpu_control_t fpcr; - - _FPU_GETCW (fpcr); - - /* Check whether rounding modes are different. */ - round = (fpcr ^ round) & _FPU_FPCR_RM_MASK; - - /* Set new rounding mode if different. */ - if (__glibc_unlikely (round != 0)) - _FPU_SETCW (fpcr ^ round); -} - -#define libc_fesetround libc_fesetround_aarch64 -#define libc_fesetroundf libc_fesetround_aarch64 -#define libc_fesetroundl libc_fesetround_aarch64 - -static __always_inline void -libc_feholdexcept_setround_aarch64 (fenv_t *envp, int round) -{ - fpu_control_t fpcr; - fpu_control_t new_fpcr; - fpu_fpsr_t fpsr; - fpu_fpsr_t new_fpsr; - - _FPU_GETCW (fpcr); - _FPU_GETFPSR (fpsr); - envp->__fpcr = fpcr; - envp->__fpsr = fpsr; - - /* Clear exception flags, set all exceptions to non-stop, - and set new rounding mode. */ - new_fpcr = fpcr & ~((FE_ALL_EXCEPT << FE_EXCEPT_SHIFT) | _FPU_FPCR_RM_MASK); - new_fpcr |= round; - new_fpsr = fpsr & ~FE_ALL_EXCEPT; - - if (__glibc_unlikely (new_fpcr != fpcr)) - _FPU_SETCW (new_fpcr); - - if (new_fpsr != fpsr) - _FPU_SETFPSR (new_fpsr); -} - -#define libc_feholdexcept_setround libc_feholdexcept_setround_aarch64 -#define libc_feholdexcept_setroundf libc_feholdexcept_setround_aarch64 -#define libc_feholdexcept_setroundl libc_feholdexcept_setround_aarch64 - -static __always_inline int -libc_fetestexcept_aarch64 (int ex) -{ - fpu_fpsr_t fpsr; - - _FPU_GETFPSR (fpsr); - return fpsr & ex & FE_ALL_EXCEPT; -} - -#define libc_fetestexcept libc_fetestexcept_aarch64 -#define libc_fetestexceptf libc_fetestexcept_aarch64 -#define libc_fetestexceptl libc_fetestexcept_aarch64 - -static __always_inline void -libc_fesetenv_aarch64 (const fenv_t *envp) -{ - fpu_control_t fpcr; - fpu_control_t new_fpcr; - - _FPU_GETCW (fpcr); - new_fpcr = envp->__fpcr; - - if (__glibc_unlikely (fpcr != new_fpcr)) - _FPU_SETCW (new_fpcr); - - _FPU_SETFPSR (envp->__fpsr); -} - -#define libc_fesetenv libc_fesetenv_aarch64 -#define libc_fesetenvf libc_fesetenv_aarch64 -#define libc_fesetenvl libc_fesetenv_aarch64 -#define libc_feresetround_noex libc_fesetenv_aarch64 -#define libc_feresetround_noexf libc_fesetenv_aarch64 -#define libc_feresetround_noexl libc_fesetenv_aarch64 - -static __always_inline int -libc_feupdateenv_test_aarch64 (const fenv_t *envp, int ex) -{ - fpu_control_t fpcr; - fpu_control_t new_fpcr; - fpu_fpsr_t fpsr; - fpu_fpsr_t new_fpsr; - int excepts; - - _FPU_GETCW (fpcr); - _FPU_GETFPSR (fpsr); - - /* Merge current exception flags with the saved fenv. */ - excepts = fpsr & FE_ALL_EXCEPT; - new_fpcr = envp->__fpcr; - new_fpsr = envp->__fpsr | excepts; - - if (__glibc_unlikely (fpcr != new_fpcr)) - _FPU_SETCW (new_fpcr); - - if (fpsr != new_fpsr) - _FPU_SETFPSR (new_fpsr); - - /* Raise the exceptions if enabled in the new FP state. */ - if (__glibc_unlikely (excepts & (new_fpcr >> FE_EXCEPT_SHIFT))) - __feraiseexcept (excepts); - - return excepts & ex; -} - -#define libc_feupdateenv_test libc_feupdateenv_test_aarch64 -#define libc_feupdateenv_testf libc_feupdateenv_test_aarch64 -#define libc_feupdateenv_testl libc_feupdateenv_test_aarch64 - -static __always_inline void -libc_feupdateenv_aarch64 (const fenv_t *envp) -{ - libc_feupdateenv_test_aarch64 (envp, 0); -} - -#define libc_feupdateenv libc_feupdateenv_aarch64 -#define libc_feupdateenvf libc_feupdateenv_aarch64 -#define libc_feupdateenvl libc_feupdateenv_aarch64 - -static __always_inline void -libc_feholdsetround_aarch64 (fenv_t *envp, int round) -{ - fpu_control_t fpcr; - fpu_fpsr_t fpsr; - - _FPU_GETCW (fpcr); - _FPU_GETFPSR (fpsr); - envp->__fpcr = fpcr; - envp->__fpsr = fpsr; - - /* Check whether rounding modes are different. */ - round = (fpcr ^ round) & _FPU_FPCR_RM_MASK; - - /* Set new rounding mode if different. */ - if (__glibc_unlikely (round != 0)) - _FPU_SETCW (fpcr ^ round); -} - -#define libc_feholdsetround libc_feholdsetround_aarch64 -#define libc_feholdsetroundf libc_feholdsetround_aarch64 -#define libc_feholdsetroundl libc_feholdsetround_aarch64 - -static __always_inline void -libc_feresetround_aarch64 (fenv_t *envp) -{ - fpu_control_t fpcr; - int round; - - _FPU_GETCW (fpcr); - - /* Check whether rounding modes are different. */ - round = (envp->__fpcr ^ fpcr) & _FPU_FPCR_RM_MASK; - - /* Restore the rounding mode if it was changed. */ - if (__glibc_unlikely (round != 0)) - _FPU_SETCW (fpcr ^ round); -} - -#define libc_feresetround libc_feresetround_aarch64 -#define libc_feresetroundf libc_feresetround_aarch64 -#define libc_feresetroundl libc_feresetround_aarch64 - -/* We have support for rounding mode context. */ -#define HAVE_RM_CTX 1 - -static __always_inline void -libc_feholdsetround_aarch64_ctx (struct rm_ctx *ctx, int r) -{ - fpu_control_t fpcr; - int round; - - _FPU_GETCW (fpcr); - ctx->env.__fpcr = fpcr; - - /* Check whether rounding modes are different. */ - round = (fpcr ^ r) & _FPU_FPCR_RM_MASK; - ctx->updated_status = round != 0; - - /* Set the rounding mode if changed. */ - if (__glibc_unlikely (round != 0)) - _FPU_SETCW (fpcr ^ round); -} - -#define libc_feholdsetround_ctx libc_feholdsetround_aarch64_ctx -#define libc_feholdsetroundf_ctx libc_feholdsetround_aarch64_ctx -#define libc_feholdsetroundl_ctx libc_feholdsetround_aarch64_ctx - -static __always_inline void -libc_feresetround_aarch64_ctx (struct rm_ctx *ctx) -{ - /* Restore the rounding mode if updated. */ - if (__glibc_unlikely (ctx->updated_status)) - _FPU_SETCW (ctx->env.__fpcr); -} - -#define libc_feresetround_ctx libc_feresetround_aarch64_ctx -#define libc_feresetroundf_ctx libc_feresetround_aarch64_ctx -#define libc_feresetroundl_ctx libc_feresetround_aarch64_ctx - -static __always_inline void -libc_feholdsetround_noex_aarch64_ctx (struct rm_ctx *ctx, int r) -{ - fpu_control_t fpcr; - fpu_fpsr_t fpsr; - int round; - - _FPU_GETCW (fpcr); - _FPU_GETFPSR (fpsr); - ctx->env.__fpcr = fpcr; - ctx->env.__fpsr = fpsr; - - /* Check whether rounding modes are different. */ - round = (fpcr ^ r) & _FPU_FPCR_RM_MASK; - ctx->updated_status = round != 0; - - /* Set the rounding mode if changed. */ - if (__glibc_unlikely (round != 0)) - _FPU_SETCW (fpcr ^ round); -} - -#define libc_feholdsetround_noex_ctx libc_feholdsetround_noex_aarch64_ctx -#define libc_feholdsetround_noexf_ctx libc_feholdsetround_noex_aarch64_ctx -#define libc_feholdsetround_noexl_ctx libc_feholdsetround_noex_aarch64_ctx - -static __always_inline void -libc_feresetround_noex_aarch64_ctx (struct rm_ctx *ctx) -{ - /* Restore the rounding mode if updated. */ - if (__glibc_unlikely (ctx->updated_status)) - _FPU_SETCW (ctx->env.__fpcr); - - /* Write new FPSR to restore exception flags. */ - _FPU_SETFPSR (ctx->env.__fpsr); -} - -#define libc_feresetround_noex_ctx libc_feresetround_noex_aarch64_ctx -#define libc_feresetround_noexf_ctx libc_feresetround_noex_aarch64_ctx -#define libc_feresetround_noexl_ctx libc_feresetround_noex_aarch64_ctx - -#include_next - -#endif diff --git a/sysdeps/aarch64/fpu/s_ceil.c b/sysdeps/aarch64/fpu/s_ceil.c deleted file mode 100644 index d0a8bd8981..0000000000 --- a/sysdeps/aarch64/fpu/s_ceil.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC ceil -#define INSN "frintp" -#include diff --git a/sysdeps/aarch64/fpu/s_ceilf.c b/sysdeps/aarch64/fpu/s_ceilf.c deleted file mode 100644 index b9c2e7c3e5..0000000000 --- a/sysdeps/aarch64/fpu/s_ceilf.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC ceilf -#define INSN "frintp" -#include diff --git a/sysdeps/aarch64/fpu/s_floor.c b/sysdeps/aarch64/fpu/s_floor.c deleted file mode 100644 index f7f8731d98..0000000000 --- a/sysdeps/aarch64/fpu/s_floor.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC floor -#define INSN "frintm" -#include diff --git a/sysdeps/aarch64/fpu/s_floorf.c b/sysdeps/aarch64/fpu/s_floorf.c deleted file mode 100644 index 7be63b5a04..0000000000 --- a/sysdeps/aarch64/fpu/s_floorf.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC floorf -#define INSN "frintm" -#include diff --git a/sysdeps/aarch64/fpu/s_fma.c b/sysdeps/aarch64/fpu/s_fma.c deleted file mode 100644 index 6f62ce2365..0000000000 --- a/sysdeps/aarch64/fpu/s_fma.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef FUNC -# define FUNC fma -#endif - -#ifndef TYPE -# define TYPE double -# define REGS "d" -#else -# ifndef REGS -# error REGS not defined -# endif -#endif - -#define __CONCATX(a,b) __CONCAT(a,b) - -TYPE -__CONCATX(__,FUNC) (TYPE x, TYPE y, TYPE z) -{ - TYPE result; - asm ( "fmadd" "\t%" REGS "0, %" REGS "1, %" REGS "2, %" REGS "3" - : "=w" (result) : "w" (x), "w" (y), "w" (z) ); - return result; -} - -weak_alias (__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/aarch64/fpu/s_fmaf.c b/sysdeps/aarch64/fpu/s_fmaf.c deleted file mode 100644 index 880a22dfd4..0000000000 --- a/sysdeps/aarch64/fpu/s_fmaf.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC fmaf -#define TYPE float -#define REGS "s" -#include diff --git a/sysdeps/aarch64/fpu/s_fmax.c b/sysdeps/aarch64/fpu/s_fmax.c deleted file mode 100644 index 395a9bacfd..0000000000 --- a/sysdeps/aarch64/fpu/s_fmax.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC fmax -#define INSN "fmaxnm" -#include diff --git a/sysdeps/aarch64/fpu/s_fmaxf.c b/sysdeps/aarch64/fpu/s_fmaxf.c deleted file mode 100644 index f450d9fe82..0000000000 --- a/sysdeps/aarch64/fpu/s_fmaxf.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC fmaxf -#define INSN "fmaxnm" -#define TYPE float -#define REGS "s" -#include diff --git a/sysdeps/aarch64/fpu/s_fmin.c b/sysdeps/aarch64/fpu/s_fmin.c deleted file mode 100644 index b6d32d5050..0000000000 --- a/sysdeps/aarch64/fpu/s_fmin.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef FUNC -# define FUNC fmin -#endif - -#ifndef INSN -# define INSN "fminnm" -#endif - -#ifndef TYPE -# define TYPE double -# define REGS "d" -#else -# ifndef REGS -# error REGS not defined -# endif -#endif - -#define __CONCATX(a,b) __CONCAT(a,b) - -TYPE -__CONCATX(__,FUNC) (TYPE x, TYPE y) -{ - TYPE result; - asm ( INSN "\t%" REGS "0, %" REGS "1, %" REGS "2" - : "=w" (result) : "w" (x), "w" (y) ); - return result; -} - -weak_alias (__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/aarch64/fpu/s_fminf.c b/sysdeps/aarch64/fpu/s_fminf.c deleted file mode 100644 index 032262d953..0000000000 --- a/sysdeps/aarch64/fpu/s_fminf.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC fminf -#define TYPE float -#define REGS "s" -#include diff --git a/sysdeps/aarch64/fpu/s_frint.c b/sysdeps/aarch64/fpu/s_frint.c deleted file mode 100644 index 48881f5868..0000000000 --- a/sysdeps/aarch64/fpu/s_frint.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef FUNC -# error FUNC not defined -#endif - -#ifndef TYPE -# define TYPE double -# define REGS "d" -#else -# ifndef REGS -# error REGS not defined -# endif -#endif - -#ifndef INSN -# error INSN not defined -#endif - -#define __CONCATX(a,b) __CONCAT(a,b) - -TYPE -__CONCATX(__,FUNC) (TYPE x) -{ - TYPE result; - asm ( INSN "\t%" REGS "0, %" REGS "1" : - "=w" (result) : "w" (x) ); - return result; -} - -weak_alias (__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/aarch64/fpu/s_frintf.c b/sysdeps/aarch64/fpu/s_frintf.c deleted file mode 100644 index dae99d7816..0000000000 --- a/sysdeps/aarch64/fpu/s_frintf.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef FUNC -# error FUNC not defined -#endif -#define TYPE float -#define REGS "s" -#include diff --git a/sysdeps/aarch64/fpu/s_llrint.c b/sysdeps/aarch64/fpu/s_llrint.c deleted file mode 100644 index c0d0d0e879..0000000000 --- a/sysdeps/aarch64/fpu/s_llrint.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC llrint -#define OTYPE long long int -#include diff --git a/sysdeps/aarch64/fpu/s_llrintf.c b/sysdeps/aarch64/fpu/s_llrintf.c deleted file mode 100644 index 67724c6d47..0000000000 --- a/sysdeps/aarch64/fpu/s_llrintf.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC llrintf -#define ITYPE float -#define IREGS "s" -#define OTYPE long long int -#include diff --git a/sysdeps/aarch64/fpu/s_llround.c b/sysdeps/aarch64/fpu/s_llround.c deleted file mode 100644 index ed4b192d5c..0000000000 --- a/sysdeps/aarch64/fpu/s_llround.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC llround -#define OTYPE long long int -#include diff --git a/sysdeps/aarch64/fpu/s_llroundf.c b/sysdeps/aarch64/fpu/s_llroundf.c deleted file mode 100644 index 360ce8b4c5..0000000000 --- a/sysdeps/aarch64/fpu/s_llroundf.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC llroundf -#define ITYPE float -#define IREGS "s" -#define OTYPE long long int -#include diff --git a/sysdeps/aarch64/fpu/s_lrint.c b/sysdeps/aarch64/fpu/s_lrint.c deleted file mode 100644 index 8c61a039bf..0000000000 --- a/sysdeps/aarch64/fpu/s_lrint.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef FUNC -# define FUNC lrint -#endif - -#ifndef ITYPE -# define ITYPE double -# define IREGS "d" -#else -# ifndef IREGS -# error IREGS not defined -# endif -#endif - -#ifndef OTYPE -# define OTYPE long int -#endif - -#define OREGS "x" - -#define __CONCATX(a,b) __CONCAT(a,b) - -OTYPE -__CONCATX(__,FUNC) (ITYPE x) -{ - OTYPE result; - ITYPE temp; - asm ( "frintx" "\t%" IREGS "1, %" IREGS "2\n\t" - "fcvtzs" "\t%" OREGS "0, %" IREGS "1" - : "=r" (result), "=w" (temp) : "w" (x) ); - return result; -} - -weak_alias (__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/aarch64/fpu/s_lrintf.c b/sysdeps/aarch64/fpu/s_lrintf.c deleted file mode 100644 index a995e4b96f..0000000000 --- a/sysdeps/aarch64/fpu/s_lrintf.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC lrintf -#define ITYPE float -#define IREGS "s" -#include diff --git a/sysdeps/aarch64/fpu/s_lround.c b/sysdeps/aarch64/fpu/s_lround.c deleted file mode 100644 index 9be9e7fb0f..0000000000 --- a/sysdeps/aarch64/fpu/s_lround.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef FUNC -# define FUNC lround -#endif - -#ifndef ITYPE -# define ITYPE double -# define IREGS "d" -#else -# ifndef IREGS -# error IREGS not defined -# endif -#endif - -#ifndef OTYPE -# define OTYPE long int -#endif - -#define OREGS "x" - -#define __CONCATX(a,b) __CONCAT(a,b) - -OTYPE -__CONCATX(__,FUNC) (ITYPE x) -{ - OTYPE result; - asm ( "fcvtas" "\t%" OREGS "0, %" IREGS "1" - : "=r" (result) : "w" (x) ); - return result; -} - -weak_alias (__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/aarch64/fpu/s_lroundf.c b/sysdeps/aarch64/fpu/s_lroundf.c deleted file mode 100644 index 4a066d4816..0000000000 --- a/sysdeps/aarch64/fpu/s_lroundf.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC lroundf -#define ITYPE float -#define IREGS "s" -#include diff --git a/sysdeps/aarch64/fpu/s_nearbyint.c b/sysdeps/aarch64/fpu/s_nearbyint.c deleted file mode 100644 index 51067f23c8..0000000000 --- a/sysdeps/aarch64/fpu/s_nearbyint.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC nearbyint -#define INSN "frinti" -#include diff --git a/sysdeps/aarch64/fpu/s_nearbyintf.c b/sysdeps/aarch64/fpu/s_nearbyintf.c deleted file mode 100644 index 8125646c2e..0000000000 --- a/sysdeps/aarch64/fpu/s_nearbyintf.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC nearbyintf -#define INSN "frinti" -#include diff --git a/sysdeps/aarch64/fpu/s_rint.c b/sysdeps/aarch64/fpu/s_rint.c deleted file mode 100644 index 73b4e26786..0000000000 --- a/sysdeps/aarch64/fpu/s_rint.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC rint -#define INSN "frintx" -#include diff --git a/sysdeps/aarch64/fpu/s_rintf.c b/sysdeps/aarch64/fpu/s_rintf.c deleted file mode 100644 index 3560dc2827..0000000000 --- a/sysdeps/aarch64/fpu/s_rintf.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC rintf -#define INSN "frintx" -#include diff --git a/sysdeps/aarch64/fpu/s_round.c b/sysdeps/aarch64/fpu/s_round.c deleted file mode 100644 index 67817485c3..0000000000 --- a/sysdeps/aarch64/fpu/s_round.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC round -#define INSN "frinta" -#include diff --git a/sysdeps/aarch64/fpu/s_roundf.c b/sysdeps/aarch64/fpu/s_roundf.c deleted file mode 100644 index ef6f672c7d..0000000000 --- a/sysdeps/aarch64/fpu/s_roundf.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC roundf -#define INSN "frinta" -#include diff --git a/sysdeps/aarch64/fpu/s_trunc.c b/sysdeps/aarch64/fpu/s_trunc.c deleted file mode 100644 index 2bf5474a7e..0000000000 --- a/sysdeps/aarch64/fpu/s_trunc.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC trunc -#define INSN "frintz" -#include diff --git a/sysdeps/aarch64/fpu/s_truncf.c b/sysdeps/aarch64/fpu/s_truncf.c deleted file mode 100644 index 94865a470b..0000000000 --- a/sysdeps/aarch64/fpu/s_truncf.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC truncf -#define INSN "frintz" -#include diff --git a/sysdeps/aarch64/jmpbuf-offsets.h b/sysdeps/aarch64/jmpbuf-offsets.h deleted file mode 100644 index b877392f7d..0000000000 --- a/sysdeps/aarch64/jmpbuf-offsets.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define JB_X19 0 -#define JB_X20 1 -#define JB_X21 2 -#define JB_X22 3 -#define JB_X23 4 -#define JB_X24 5 -#define JB_X25 6 -#define JB_X26 7 -#define JB_X27 8 -#define JB_X28 9 -#define JB_X29 10 -#define JB_LR 11 -#define JB_SP 13 - -#define JB_D8 14 -#define JB_D9 15 -#define JB_D10 16 -#define JB_D11 17 -#define JB_D12 18 -#define JB_D13 19 -#define JB_D14 20 -#define JB_D15 21 - -#ifndef __ASSEMBLER__ -#include -#include -#include - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf jmpbuf) -{ - uintptr_t sp = jmpbuf[JB_SP]; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return sp; -} -#endif - -/* Helper for generic ____longjmp_chk(). */ -#define JB_FRAME_ADDRESS(buf) \ - ((void *) _jmpbuf_sp (buf)) diff --git a/sysdeps/aarch64/jmpbuf-unwind.h b/sysdeps/aarch64/jmpbuf-unwind.h deleted file mode 100644 index 8073508884..0000000000 --- a/sysdeps/aarch64/jmpbuf-unwind.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((void *) (address) < (void *) demangle (jmpbuf[JB_SP])) - -#define _JMPBUF_CFA_UNWINDS_ADJ(jmpbuf, context, adj) \ - _JMPBUF_UNWINDS_ADJ (jmpbuf, (void *) (uintptr_t) _Unwind_GetCFA (context), \ - adj) - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/aarch64/ldsodefs.h b/sysdeps/aarch64/ldsodefs.h deleted file mode 100644 index ba4ada3a04..0000000000 --- a/sysdeps/aarch64/ldsodefs.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _AARCH64_LDSODEFS_H -#define _AARCH64_LDSODEFS_H 1 - -#include -#include - -struct La_aarch64_regs; -struct La_aarch64_retval; - -#define ARCH_PLTENTER_MEMBERS \ - ElfW(Addr) (*aarch64_gnu_pltenter) (ElfW(Sym) *, \ - unsigned int, \ - uintptr_t *, \ - uintptr_t *, \ - struct La_aarch64_regs *, \ - unsigned int *, \ - const char *, \ - long int *) - -#define ARCH_PLTEXIT_MEMBERS \ - ElfW(Addr) (*aarch64_gnu_pltexit) (ElfW(Sym) *, \ - unsigned int, \ - uintptr_t *, \ - uintptr_t *, \ - const struct La_aarch64_regs *, \ - struct La_aarch64_retval *, \ - const char *) - -#include_next - -#endif diff --git a/sysdeps/aarch64/libc-tls.c b/sysdeps/aarch64/libc-tls.c deleted file mode 100644 index 4aef6f1c11..0000000000 --- a/sysdeps/aarch64/libc-tls.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* On AArch64, linker optimizations are not required, so __tls_get_addr - can be called even in statically linked binaries. In this case module - must be always 1 and PT_TLS segment exist in the binary, otherwise it - would not link. */ - -void * -__tls_get_addr (tls_index *ti) -{ - dtv_t *dtv = THREAD_DTV (); - return (char *) dtv[1].pointer.val + ti->ti_offset; -} diff --git a/sysdeps/aarch64/libm-test-ulps b/sysdeps/aarch64/libm-test-ulps deleted file mode 100644 index 0f987bca59..0000000000 --- a/sysdeps/aarch64/libm-test-ulps +++ /dev/null @@ -1,2276 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "acosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "acosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "acosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "asin": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "asinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "asinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "asinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "atan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atan2_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "atan2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "atan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "atanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "atanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "cabs": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacos_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cacos_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "cacos_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cacos_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "cacos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cacos_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 7 -ldouble: 7 - -Function: Real part of "cacosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cacosh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "cacosh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cacosh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "carg": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "carg_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "carg_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "carg_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casin": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "casin_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "casin_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 7 -ldouble: 7 - -Function: Real part of "casinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casinh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "casinh_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casinh_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "casinh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catan_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catan_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "catanh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "catanh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catanh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cbrt": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_upward": -double: 5 -float: 1 -idouble: 5 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccosh_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cexp_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "clog": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog10": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog10_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog10_downward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog10_towardzero": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_upward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog10_upward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog_towardzero": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "cos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "cos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 2 - -Function: "cosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 2 - -Function: "cosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 3 - -Function: Real part of "cpow": -double: 2 -float: 5 -idouble: 2 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cpow_downward": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cpow_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_towardzero": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cpow_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_upward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cpow_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csin": -ildouble: 1 -ldouble: 1 - -Function: Real part of "csin_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csinh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csinh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csinh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csinh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt_upward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctan_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctan_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_towardzero": -double: 5 -float: 2 -idouble: 5 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erf_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erfc": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "erfc_downward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "erfc_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "erfc_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "exp": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp10": -double: 2 -idouble: 2 -ildouble: 2 -ldouble: 2 - -Function: "exp10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp_downward": -double: 1 -idouble: 1 - -Function: "exp_towardzero": -double: 1 -idouble: 1 - -Function: "exp_upward": -double: 1 -idouble: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "expm1_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "expm1_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "gamma": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "gamma_downward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: "gamma_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "gamma_upward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "hypot": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j0_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "j0_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "j0_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "jn_downward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "jn_towardzero": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "jn_upward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "lgamma": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "lgamma_downward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: "lgamma_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "lgamma_upward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "log": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "log10_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log1p": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log1p_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "log1p_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "log1p_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log2_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "log2_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log2_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "log_downward": -float: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log_towardzero": -float: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "pow": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow10": -double: 2 -idouble: 2 -ildouble: 2 -ldouble: 2 - -Function: "pow10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sin": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sincos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sincos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sincos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sincos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "sinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "sinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "tan": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "tan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "tanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "tanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "tanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "tgamma": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "tgamma_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "y0_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "y0_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "y0_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "y1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_upward": -double: 5 -float: 2 -idouble: 5 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "yn_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -# end of automatic generation diff --git a/sysdeps/aarch64/libm-test-ulps-name b/sysdeps/aarch64/libm-test-ulps-name deleted file mode 100644 index 1f66c5cda0..0000000000 --- a/sysdeps/aarch64/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -AArch64 diff --git a/sysdeps/aarch64/linkmap.h b/sysdeps/aarch64/linkmap.h deleted file mode 100644 index 0ce1f646ef..0000000000 --- a/sysdeps/aarch64/linkmap.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -struct link_map_machine -{ - ElfW(Addr) plt; /* Address of .plt */ - void *tlsdesc_table; /* Address of TLS descriptor hash table. */ -}; diff --git a/sysdeps/aarch64/machine-gmon.h b/sysdeps/aarch64/machine-gmon.h deleted file mode 100644 index 14fe3654d0..0000000000 --- a/sysdeps/aarch64/machine-gmon.h +++ /dev/null @@ -1,34 +0,0 @@ -/* AArch64 definitions for profiling support. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Accept 'frompc' address as argument from the function that calls - __mcount for profiling. Use __builtin_return_address (0) - for the 'selfpc' address. */ - -#include - -static void mcount_internal (u_long frompc, u_long selfpc); - -#define _MCOUNT_DECL(frompc, selfpc) \ -static inline void mcount_internal (u_long frompc, u_long selfpc) - -#define MCOUNT \ -void __mcount (void *frompc) \ -{ \ - mcount_internal ((u_long) frompc, (u_long) RETURN_ADDRESS (0)); \ -} diff --git a/sysdeps/aarch64/math-tests.h b/sysdeps/aarch64/math-tests.h deleted file mode 100644 index 0e5cbcf621..0000000000 --- a/sysdeps/aarch64/math-tests.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Configuration for math tests. AArch64 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Trapping exceptions are optional on AArch64. */ -#define EXCEPTION_ENABLE_SUPPORTED(EXCEPT) ((EXCEPT) == 0) - -#include_next diff --git a/sysdeps/aarch64/mcount.c b/sysdeps/aarch64/mcount.c deleted file mode 100644 index 52456f0da8..0000000000 --- a/sysdeps/aarch64/mcount.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#include - -/* We forgot to add _mcount in glibc 2.17. We added it in 2.18 - therefore we want it to be added with version GLIBC_2_18. However, - setting the version is not straight forward because a generic - Version file includes an earlier 2.xx version for each this symbol - and the linker uses the first version it sees. */ - -#if SHLIB_COMPAT (libc, GLIBC_2_17, GLIBC_2_18) -versioned_symbol (libc, __mcount, _mcount, GLIBC_2_18); -#else -strong_alias (__mcount, _mcount); -#endif diff --git a/sysdeps/aarch64/memchr.S b/sysdeps/aarch64/memchr.S deleted file mode 100644 index 1cde62345b..0000000000 --- a/sysdeps/aarch64/memchr.S +++ /dev/null @@ -1,157 +0,0 @@ -/* memchr - find a character in a memory zone - - Copyright (C) 2015-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Assumptions: - * - * ARMv8-a, AArch64 - * Neon Available. - */ - -/* Arguments and results. */ -#define srcin x0 -#define chrin w1 -#define cntin x2 - -#define result x0 - -#define src x3 -#define tmp x4 -#define wtmp2 w5 -#define synd x6 -#define soff x9 -#define cntrem x10 - -#define vrepchr v0 -#define vdata1 v1 -#define vdata2 v2 -#define vhas_chr1 v3 -#define vhas_chr2 v4 -#define vrepmask v5 -#define vend v6 - -/* - * Core algorithm: - * - * For each 32-byte chunk we calculate a 64-bit syndrome value, with two bits - * per byte. For each tuple, bit 0 is set if the relevant byte matched the - * requested character and bit 1 is not used (faster than using a 32bit - * syndrome). Since the bits in the syndrome reflect exactly the order in which - * things occur in the original string, counting trailing zeros allows to - * identify exactly which byte has matched. - */ - -ENTRY (__memchr) - /* Do not dereference srcin if no bytes to compare. */ - cbz cntin, L(zero_length) - /* - * Magic constant 0x40100401 allows us to identify which lane matches - * the requested byte. - */ - mov wtmp2, #0x0401 - movk wtmp2, #0x4010, lsl #16 - dup vrepchr.16b, chrin - /* Work with aligned 32-byte chunks */ - bic src, srcin, #31 - dup vrepmask.4s, wtmp2 - ands soff, srcin, #31 - and cntrem, cntin, #31 - b.eq L(loop) - - /* - * Input string is not 32-byte aligned. We calculate the syndrome - * value for the aligned 32 bytes block containing the first bytes - * and mask the irrelevant part. - */ - - ld1 {vdata1.16b, vdata2.16b}, [src], #32 - sub tmp, soff, #32 - adds cntin, cntin, tmp - cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b - cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b - and vhas_chr1.16b, vhas_chr1.16b, vrepmask.16b - and vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b - addp vend.16b, vhas_chr1.16b, vhas_chr2.16b /* 256->128 */ - addp vend.16b, vend.16b, vend.16b /* 128->64 */ - mov synd, vend.2d[0] - /* Clear the soff*2 lower bits */ - lsl tmp, soff, #1 - lsr synd, synd, tmp - lsl synd, synd, tmp - /* The first block can also be the last */ - b.ls L(masklast) - /* Have we found something already? */ - cbnz synd, L(tail) - -L(loop): - ld1 {vdata1.16b, vdata2.16b}, [src], #32 - subs cntin, cntin, #32 - cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b - cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b - /* If we're out of data we finish regardless of the result */ - b.ls L(end) - /* Use a fast check for the termination condition */ - orr vend.16b, vhas_chr1.16b, vhas_chr2.16b - addp vend.2d, vend.2d, vend.2d - mov synd, vend.2d[0] - /* We're not out of data, loop if we haven't found the character */ - cbz synd, L(loop) - -L(end): - /* Termination condition found, let's calculate the syndrome value */ - and vhas_chr1.16b, vhas_chr1.16b, vrepmask.16b - and vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b - addp vend.16b, vhas_chr1.16b, vhas_chr2.16b /* 256->128 */ - addp vend.16b, vend.16b, vend.16b /* 128->64 */ - mov synd, vend.2d[0] - /* Only do the clear for the last possible block */ - b.hi L(tail) - -L(masklast): - /* Clear the (32 - ((cntrem + soff) % 32)) * 2 upper bits */ - add tmp, cntrem, soff - and tmp, tmp, #31 - sub tmp, tmp, #32 - neg tmp, tmp, lsl #1 - lsl synd, synd, tmp - lsr synd, synd, tmp - -L(tail): - /* Count the trailing zeros using bit reversing */ - rbit synd, synd - /* Compensate the last post-increment */ - sub src, src, #32 - /* Check that we have found a character */ - cmp synd, #0 - /* And count the leading zeros */ - clz synd, synd - /* Compute the potential result */ - add result, src, synd, lsr #1 - /* Select result or NULL */ - csel result, xzr, result, eq - ret - -L(zero_length): - mov result, #0 - ret -END (__memchr) -weak_alias (__memchr, memchr) -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/aarch64/memcmp.S b/sysdeps/aarch64/memcmp.S deleted file mode 100644 index 4cfcb89297..0000000000 --- a/sysdeps/aarch64/memcmp.S +++ /dev/null @@ -1,154 +0,0 @@ -/* memcmp - compare memory - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Assumptions: - * - * ARMv8-a, AArch64 - */ - -/* Parameters and result. */ -#define src1 x0 -#define src2 x1 -#define limit x2 -#define result x0 - -/* Internal variables. */ -#define data1 x3 -#define data1w w3 -#define data2 x4 -#define data2w w4 -#define has_nul x5 -#define diff x6 -#define endloop x7 -#define tmp1 x8 -#define tmp2 x9 -#define tmp3 x10 -#define pos x11 -#define limit_wd x12 -#define mask x13 - -ENTRY_ALIGN (memcmp, 6) - DELOUSE (0) - DELOUSE (1) - DELOUSE (2) - cbz limit, L(ret0) - eor tmp1, src1, src2 - tst tmp1, #7 - b.ne L(misaligned8) - ands tmp1, src1, #7 - b.ne L(mutual_align) - add limit_wd, limit, #7 - lsr limit_wd, limit_wd, #3 - /* Start of performance-critical section -- one 64B cache line. */ -L(loop_aligned): - ldr data1, [src1], #8 - ldr data2, [src2], #8 -L(start_realigned): - subs limit_wd, limit_wd, #1 - eor diff, data1, data2 /* Non-zero if differences found. */ - csinv endloop, diff, xzr, ne /* Last Dword or differences. */ - cbz endloop, L(loop_aligned) - /* End of performance-critical section -- one 64B cache line. */ - - /* Not reached the limit, must have found a diff. */ - cbnz limit_wd, L(not_limit) - - /* Limit % 8 == 0 => all bytes significant. */ - ands limit, limit, #7 - b.eq L(not_limit) - - lsl limit, limit, #3 /* Bits -> bytes. */ - mov mask, #~0 -#ifdef __AARCH64EB__ - lsr mask, mask, limit -#else - lsl mask, mask, limit -#endif - bic data1, data1, mask - bic data2, data2, mask - - orr diff, diff, mask -L(not_limit): - -#ifndef __AARCH64EB__ - rev diff, diff - rev data1, data1 - rev data2, data2 -#endif - /* The MS-non-zero bit of DIFF marks either the first bit - that is different, or the end of the significant data. - Shifting left now will bring the critical information into the - top bits. */ - clz pos, diff - lsl data1, data1, pos - lsl data2, data2, pos - /* But we need to zero-extend (char is unsigned) the value and then - perform a signed 32-bit subtraction. */ - lsr data1, data1, #56 - sub result, data1, data2, lsr #56 - RET - -L(mutual_align): - /* Sources are mutually aligned, but are not currently at an - alignment boundary. Round down the addresses and then mask off - the bytes that precede the start point. */ - bic src1, src1, #7 - bic src2, src2, #7 - add limit, limit, tmp1 /* Adjust the limit for the extra. */ - lsl tmp1, tmp1, #3 /* Bytes beyond alignment -> bits. */ - ldr data1, [src1], #8 - neg tmp1, tmp1 /* Bits to alignment -64. */ - ldr data2, [src2], #8 - mov tmp2, #~0 -#ifdef __AARCH64EB__ - /* Big-endian. Early bytes are at MSB. */ - lsl tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ -#else - /* Little-endian. Early bytes are at LSB. */ - lsr tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ -#endif - add limit_wd, limit, #7 - orr data1, data1, tmp2 - orr data2, data2, tmp2 - lsr limit_wd, limit_wd, #3 - b L(start_realigned) - -L(ret0): - mov result, #0 - RET - - .p2align 6 -L(misaligned8): - sub limit, limit, #1 -1: - /* Perhaps we can do better than this. */ - ldrb data1w, [src1], #1 - ldrb data2w, [src2], #1 - subs limit, limit, #1 - ccmp data1w, data2w, #0, cs /* NZCV = 0b0000. */ - b.eq 1b - sub result, data1, data2 - RET -END (memcmp) -#undef bcmp -weak_alias (memcmp, bcmp) -libc_hidden_builtin_def (memcmp) diff --git a/sysdeps/aarch64/memcpy.S b/sysdeps/aarch64/memcpy.S deleted file mode 100644 index 88a3b90e16..0000000000 --- a/sysdeps/aarch64/memcpy.S +++ /dev/null @@ -1,267 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Assumptions: - * - * ARMv8-a, AArch64, unaligned accesses. - * - */ - -#define dstin x0 -#define src x1 -#define count x2 -#define dst x3 -#define srcend x4 -#define dstend x5 -#define A_l x6 -#define A_lw w6 -#define A_h x7 -#define A_hw w7 -#define B_l x8 -#define B_lw w8 -#define B_h x9 -#define C_l x10 -#define C_h x11 -#define D_l x12 -#define D_h x13 -#define E_l src -#define E_h count -#define F_l srcend -#define F_h dst -#define G_l count -#define G_h dst -#define tmp1 x14 - -/* Copies are split into 3 main cases: small copies of up to 16 bytes, - medium copies of 17..96 bytes which are fully unrolled. Large copies - of more than 96 bytes align the destination and use an unrolled loop - processing 64 bytes per iteration. - In order to share code with memmove, small and medium copies read all - data before writing, allowing any kind of overlap. So small, medium - and large backwards memmoves are handled by falling through into memcpy. - Overlapping large forward memmoves use a loop that copies backwards. -*/ - -#ifndef MEMMOVE -# define MEMMOVE memmove -#endif -#ifndef MEMCPY -# define MEMCPY memcpy -#endif - -ENTRY_ALIGN (MEMMOVE, 6) - - DELOUSE (0) - DELOUSE (1) - DELOUSE (2) - - sub tmp1, dstin, src - cmp count, 96 - ccmp tmp1, count, 2, hi - b.lo L(move_long) - - /* Common case falls through into memcpy. */ -END (MEMMOVE) -libc_hidden_builtin_def (MEMMOVE) -ENTRY (MEMCPY) - - DELOUSE (0) - DELOUSE (1) - DELOUSE (2) - - prfm PLDL1KEEP, [src] - add srcend, src, count - add dstend, dstin, count - cmp count, 16 - b.ls L(copy16) - cmp count, 96 - b.hi L(copy_long) - - /* Medium copies: 17..96 bytes. */ - sub tmp1, count, 1 - ldp A_l, A_h, [src] - tbnz tmp1, 6, L(copy96) - ldp D_l, D_h, [srcend, -16] - tbz tmp1, 5, 1f - ldp B_l, B_h, [src, 16] - ldp C_l, C_h, [srcend, -32] - stp B_l, B_h, [dstin, 16] - stp C_l, C_h, [dstend, -32] -1: - stp A_l, A_h, [dstin] - stp D_l, D_h, [dstend, -16] - ret - - .p2align 4 - /* Small copies: 0..16 bytes. */ -L(copy16): - cmp count, 8 - b.lo 1f - ldr A_l, [src] - ldr A_h, [srcend, -8] - str A_l, [dstin] - str A_h, [dstend, -8] - ret - .p2align 4 -1: - tbz count, 2, 1f - ldr A_lw, [src] - ldr A_hw, [srcend, -4] - str A_lw, [dstin] - str A_hw, [dstend, -4] - ret - - /* Copy 0..3 bytes. Use a branchless sequence that copies the same - byte 3 times if count==1, or the 2nd byte twice if count==2. */ -1: - cbz count, 2f - lsr tmp1, count, 1 - ldrb A_lw, [src] - ldrb A_hw, [srcend, -1] - ldrb B_lw, [src, tmp1] - strb A_lw, [dstin] - strb B_lw, [dstin, tmp1] - strb A_hw, [dstend, -1] -2: ret - - .p2align 4 - /* Copy 64..96 bytes. Copy 64 bytes from the start and - 32 bytes from the end. */ -L(copy96): - ldp B_l, B_h, [src, 16] - ldp C_l, C_h, [src, 32] - ldp D_l, D_h, [src, 48] - ldp E_l, E_h, [srcend, -32] - ldp F_l, F_h, [srcend, -16] - stp A_l, A_h, [dstin] - stp B_l, B_h, [dstin, 16] - stp C_l, C_h, [dstin, 32] - stp D_l, D_h, [dstin, 48] - stp E_l, E_h, [dstend, -32] - stp F_l, F_h, [dstend, -16] - ret - - /* Align DST to 16 byte alignment so that we don't cross cache line - boundaries on both loads and stores. There are at least 96 bytes - to copy, so copy 16 bytes unaligned and then align. The loop - copies 64 bytes per iteration and prefetches one iteration ahead. */ - - .p2align 4 -L(copy_long): - and tmp1, dstin, 15 - bic dst, dstin, 15 - ldp D_l, D_h, [src] - sub src, src, tmp1 - add count, count, tmp1 /* Count is now 16 too large. */ - ldp A_l, A_h, [src, 16] - stp D_l, D_h, [dstin] - ldp B_l, B_h, [src, 32] - ldp C_l, C_h, [src, 48] - ldp D_l, D_h, [src, 64]! - subs count, count, 128 + 16 /* Test and readjust count. */ - b.ls L(last64) -L(loop64): - stp A_l, A_h, [dst, 16] - ldp A_l, A_h, [src, 16] - stp B_l, B_h, [dst, 32] - ldp B_l, B_h, [src, 32] - stp C_l, C_h, [dst, 48] - ldp C_l, C_h, [src, 48] - stp D_l, D_h, [dst, 64]! - ldp D_l, D_h, [src, 64]! - subs count, count, 64 - b.hi L(loop64) - - /* Write the last full set of 64 bytes. The remainder is at most 64 - bytes, so it is safe to always copy 64 bytes from the end even if - there is just 1 byte left. */ -L(last64): - ldp E_l, E_h, [srcend, -64] - stp A_l, A_h, [dst, 16] - ldp A_l, A_h, [srcend, -48] - stp B_l, B_h, [dst, 32] - ldp B_l, B_h, [srcend, -32] - stp C_l, C_h, [dst, 48] - ldp C_l, C_h, [srcend, -16] - stp D_l, D_h, [dst, 64] - stp E_l, E_h, [dstend, -64] - stp A_l, A_h, [dstend, -48] - stp B_l, B_h, [dstend, -32] - stp C_l, C_h, [dstend, -16] - ret - - .p2align 4 -L(move_long): - cbz tmp1, 3f - - add srcend, src, count - add dstend, dstin, count - - /* Align dstend to 16 byte alignment so that we don't cross cache line - boundaries on both loads and stores. There are at least 96 bytes - to copy, so copy 16 bytes unaligned and then align. The loop - copies 64 bytes per iteration and prefetches one iteration ahead. */ - - and tmp1, dstend, 15 - ldp D_l, D_h, [srcend, -16] - sub srcend, srcend, tmp1 - sub count, count, tmp1 - ldp A_l, A_h, [srcend, -16] - stp D_l, D_h, [dstend, -16] - ldp B_l, B_h, [srcend, -32] - ldp C_l, C_h, [srcend, -48] - ldp D_l, D_h, [srcend, -64]! - sub dstend, dstend, tmp1 - subs count, count, 128 - b.ls 2f - - nop -1: - stp A_l, A_h, [dstend, -16] - ldp A_l, A_h, [srcend, -16] - stp B_l, B_h, [dstend, -32] - ldp B_l, B_h, [srcend, -32] - stp C_l, C_h, [dstend, -48] - ldp C_l, C_h, [srcend, -48] - stp D_l, D_h, [dstend, -64]! - ldp D_l, D_h, [srcend, -64]! - subs count, count, 64 - b.hi 1b - - /* Write the last full set of 64 bytes. The remainder is at most 64 - bytes, so it is safe to always copy 64 bytes from the start even if - there is just 1 byte left. */ -2: - ldp G_l, G_h, [src, 48] - stp A_l, A_h, [dstend, -16] - ldp A_l, A_h, [src, 32] - stp B_l, B_h, [dstend, -32] - ldp B_l, B_h, [src, 16] - stp C_l, C_h, [dstend, -48] - ldp C_l, C_h, [src] - stp D_l, D_h, [dstend, -64] - stp G_l, G_h, [dstin, 48] - stp A_l, A_h, [dstin, 32] - stp B_l, B_h, [dstin, 16] - stp C_l, C_h, [dstin] -3: ret - -END (MEMCPY) -libc_hidden_builtin_def (MEMCPY) diff --git a/sysdeps/aarch64/memmove.S b/sysdeps/aarch64/memmove.S deleted file mode 100644 index 0feeac8414..0000000000 --- a/sysdeps/aarch64/memmove.S +++ /dev/null @@ -1 +0,0 @@ -/* memmove is part of memcpy.S. */ diff --git a/sysdeps/aarch64/memset.S b/sysdeps/aarch64/memset.S deleted file mode 100644 index 110fd22781..0000000000 --- a/sysdeps/aarch64/memset.S +++ /dev/null @@ -1,195 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Assumptions: - * - * ARMv8-a, AArch64, unaligned accesses - * - */ - -#define dstin x0 -#define val x1 -#define valw w1 -#define count x2 -#define dst x3 -#define dstend x4 -#define tmp1 x5 -#define tmp1w w5 -#define tmp2 x6 -#define tmp2w w6 -#define zva_len x7 -#define zva_lenw w7 - -ENTRY_ALIGN (__memset, 6) - - DELOUSE (0) - DELOUSE (2) - - dup v0.16B, valw - add dstend, dstin, count - - cmp count, 96 - b.hi L(set_long) - cmp count, 16 - b.hs L(set_medium) - mov val, v0.D[0] - - /* Set 0..15 bytes. */ - tbz count, 3, 1f - str val, [dstin] - str val, [dstend, -8] - ret - nop -1: tbz count, 2, 2f - str valw, [dstin] - str valw, [dstend, -4] - ret -2: cbz count, 3f - strb valw, [dstin] - tbz count, 1, 3f - strh valw, [dstend, -2] -3: ret - - /* Set 17..96 bytes. */ -L(set_medium): - str q0, [dstin] - tbnz count, 6, L(set96) - str q0, [dstend, -16] - tbz count, 5, 1f - str q0, [dstin, 16] - str q0, [dstend, -32] -1: ret - - .p2align 4 - /* Set 64..96 bytes. Write 64 bytes from the start and - 32 bytes from the end. */ -L(set96): - str q0, [dstin, 16] - stp q0, q0, [dstin, 32] - stp q0, q0, [dstend, -32] - ret - - .p2align 3 - nop -L(set_long): - and valw, valw, 255 - bic dst, dstin, 15 - str q0, [dstin] - cmp count, 256 - ccmp valw, 0, 0, cs - b.eq L(try_zva) -L(no_zva): - sub count, dstend, dst /* Count is 16 too large. */ - add dst, dst, 16 - sub count, count, 64 + 16 /* Adjust count and bias for loop. */ -1: stp q0, q0, [dst], 64 - stp q0, q0, [dst, -32] -L(tail64): - subs count, count, 64 - b.hi 1b -2: stp q0, q0, [dstend, -64] - stp q0, q0, [dstend, -32] - ret - - .p2align 3 -L(try_zva): - mrs tmp1, dczid_el0 - tbnz tmp1w, 4, L(no_zva) - and tmp1w, tmp1w, 15 - cmp tmp1w, 4 /* ZVA size is 64 bytes. */ - b.ne L(zva_128) - - /* Write the first and last 64 byte aligned block using stp rather - than using DC ZVA. This is faster on some cores. - */ -L(zva_64): - str q0, [dst, 16] - stp q0, q0, [dst, 32] - bic dst, dst, 63 - stp q0, q0, [dst, 64] - stp q0, q0, [dst, 96] - sub count, dstend, dst /* Count is now 128 too large. */ - sub count, count, 128+64+64 /* Adjust count and bias for loop. */ - add dst, dst, 128 - nop -1: dc zva, dst - add dst, dst, 64 - subs count, count, 64 - b.hi 1b - stp q0, q0, [dst, 0] - stp q0, q0, [dst, 32] - stp q0, q0, [dstend, -64] - stp q0, q0, [dstend, -32] - ret - - .p2align 3 -L(zva_128): - cmp tmp1w, 5 /* ZVA size is 128 bytes. */ - b.ne L(zva_other) - - str q0, [dst, 16] - stp q0, q0, [dst, 32] - stp q0, q0, [dst, 64] - stp q0, q0, [dst, 96] - bic dst, dst, 127 - sub count, dstend, dst /* Count is now 128 too large. */ - sub count, count, 128+128 /* Adjust count and bias for loop. */ - add dst, dst, 128 -1: dc zva, dst - add dst, dst, 128 - subs count, count, 128 - b.hi 1b - stp q0, q0, [dstend, -128] - stp q0, q0, [dstend, -96] - stp q0, q0, [dstend, -64] - stp q0, q0, [dstend, -32] - ret - -L(zva_other): - mov tmp2w, 4 - lsl zva_lenw, tmp2w, tmp1w - add tmp1, zva_len, 64 /* Max alignment bytes written. */ - cmp count, tmp1 - blo L(no_zva) - - sub tmp2, zva_len, 1 - add tmp1, dst, zva_len - add dst, dst, 16 - subs count, tmp1, dst /* Actual alignment bytes to write. */ - bic tmp1, tmp1, tmp2 /* Aligned dc zva start address. */ - beq 2f -1: stp q0, q0, [dst], 64 - stp q0, q0, [dst, -32] - subs count, count, 64 - b.hi 1b -2: mov dst, tmp1 - sub count, dstend, tmp1 /* Remaining bytes to write. */ - subs count, count, zva_len - b.lo 4f -3: dc zva, dst - add dst, dst, zva_len - subs count, count, zva_len - b.hs 3b -4: add count, count, zva_len - b L(tail64) - -END (__memset) -weak_alias (__memset, memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/aarch64/memusage.h b/sysdeps/aarch64/memusage.h deleted file mode 100644 index 908daab462..0000000000 --- a/sysdeps/aarch64/memusage.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; }) - -#include diff --git a/sysdeps/aarch64/multiarch/Makefile b/sysdeps/aarch64/multiarch/Makefile deleted file mode 100644 index 78d52c717d..0000000000 --- a/sysdeps/aarch64/multiarch/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),string) -sysdep_routines += memcpy_generic memcpy_thunderx -endif diff --git a/sysdeps/aarch64/multiarch/ifunc-impl-list.c b/sysdeps/aarch64/multiarch/ifunc-impl-list.c deleted file mode 100644 index c4f23dfb87..0000000000 --- a/sysdeps/aarch64/multiarch/ifunc-impl-list.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Enumerate available IFUNC implementations of a function. AARCH64 version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -/* Maximum number of IFUNC implementations. */ -#define MAX_IFUNC 2 - -size_t -__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, - size_t max) -{ - assert (max >= MAX_IFUNC); - - size_t i = 0; - - INIT_ARCH (); - - /* Support sysdeps/aarch64/multiarch/memcpy.c and memmove.c. */ - IFUNC_IMPL (i, name, memcpy, - IFUNC_IMPL_ADD (array, i, memcpy, IS_THUNDERX (midr), - __memcpy_thunderx) - IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_generic)) - IFUNC_IMPL (i, name, memmove, - IFUNC_IMPL_ADD (array, i, memmove, IS_THUNDERX (midr), - __memmove_thunderx) - IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_generic)) - - return i; -} diff --git a/sysdeps/aarch64/multiarch/init-arch.h b/sysdeps/aarch64/multiarch/init-arch.h deleted file mode 100644 index 3af442c538..0000000000 --- a/sysdeps/aarch64/multiarch/init-arch.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Define INIT_ARCH so that midr is initialized before use by IFUNCs. - This file is part of the GNU C Library. - Copyright (C) 2017 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define INIT_ARCH() \ - uint64_t __attribute__((unused)) midr = \ - GLRO(dl_aarch64_cpu_features).midr_el1; diff --git a/sysdeps/aarch64/multiarch/memcpy.c b/sysdeps/aarch64/multiarch/memcpy.c deleted file mode 100644 index 9f73efbba7..0000000000 --- a/sysdeps/aarch64/multiarch/memcpy.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Multiple versions of memcpy. AARCH64 version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for the definition in libc. */ - -#if IS_IN (libc) -/* Redefine memcpy so that the compiler won't complain about the type - mismatch with the IFUNC selector in strong_alias, below. */ -# undef memcpy -# define memcpy __redirect_memcpy -# include -# include - -extern __typeof (__redirect_memcpy) __libc_memcpy; - -extern __typeof (__redirect_memcpy) __memcpy_generic attribute_hidden; -extern __typeof (__redirect_memcpy) __memcpy_thunderx attribute_hidden; - -libc_ifunc (__libc_memcpy, - IS_THUNDERX (midr) ? __memcpy_thunderx : __memcpy_generic); - -# undef memcpy -strong_alias (__libc_memcpy, memcpy); -#endif diff --git a/sysdeps/aarch64/multiarch/memcpy_generic.S b/sysdeps/aarch64/multiarch/memcpy_generic.S deleted file mode 100644 index 041a77943d..0000000000 --- a/sysdeps/aarch64/multiarch/memcpy_generic.S +++ /dev/null @@ -1,42 +0,0 @@ -/* A Generic Optimized memcpy implementation for AARCH64. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The actual memcpy and memmove code is in ../memcpy.S. If we are - building libc this file defines __memcpy_generic and __memmove_generic. - Otherwise the include of ../memcpy.S will define the normal __memcpy - and__memmove entry points. */ - -#include - -#if IS_IN (libc) - -# define MEMCPY __memcpy_generic -# define MEMMOVE __memmove_generic - -/* Do not hide the generic versions of memcpy and memmove, we use them - internally. */ -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) - -/* It doesn't make sense to send libc-internal memcpy calls through a PLT. */ - .globl __GI_memcpy; __GI_memcpy = __memcpy_generic - .globl __GI_memmove; __GI_memmove = __memmove_generic - -#endif - -#include "../memcpy.S" diff --git a/sysdeps/aarch64/multiarch/memcpy_thunderx.S b/sysdeps/aarch64/multiarch/memcpy_thunderx.S deleted file mode 100644 index 5ac9e341bb..0000000000 --- a/sysdeps/aarch64/multiarch/memcpy_thunderx.S +++ /dev/null @@ -1,326 +0,0 @@ -/* A Thunderx Optimized memcpy implementation for AARCH64. - Copyright (C) 2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The actual code in this memcpy and memmove should be identical to the - generic version except for the code under '#ifdef THUNDERX'. This is - to make is easier to keep this version and the generic version in sync - for changes that are not specific to thunderx. */ - -#include - -/* Assumptions: - * - * ARMv8-a, AArch64, unaligned accesses. - * - */ - -#define dstin x0 -#define src x1 -#define count x2 -#define dst x3 -#define srcend x4 -#define dstend x5 -#define A_l x6 -#define A_lw w6 -#define A_h x7 -#define A_hw w7 -#define B_l x8 -#define B_lw w8 -#define B_h x9 -#define C_l x10 -#define C_h x11 -#define D_l x12 -#define D_h x13 -#define E_l src -#define E_h count -#define F_l srcend -#define F_h dst -#define G_l count -#define G_h dst -#define tmp1 x14 - -/* Copies are split into 3 main cases: small copies of up to 16 bytes, - medium copies of 17..96 bytes which are fully unrolled. Large copies - of more than 96 bytes align the destination and use an unrolled loop - processing 64 bytes per iteration. - In order to share code with memmove, small and medium copies read all - data before writing, allowing any kind of overlap. So small, medium - and large backwards memmoves are handled by falling through into memcpy. - Overlapping large forward memmoves use a loop that copies backwards. -*/ - -#ifndef MEMMOVE -# define MEMMOVE memmove -#endif -#ifndef MEMCPY -# define MEMCPY memcpy -#endif - -#if IS_IN (libc) - -# undef MEMCPY -# define MEMCPY __memcpy_thunderx -# undef MEMMOVE -# define MEMMOVE __memmove_thunderx -# define USE_THUNDERX - -ENTRY_ALIGN (MEMMOVE, 6) - - DELOUSE (0) - DELOUSE (1) - DELOUSE (2) - - sub tmp1, dstin, src - cmp count, 96 - ccmp tmp1, count, 2, hi - b.lo L(move_long) - - /* Common case falls through into memcpy. */ -END (MEMMOVE) -libc_hidden_builtin_def (MEMMOVE) -ENTRY (MEMCPY) - - DELOUSE (0) - DELOUSE (1) - DELOUSE (2) - - prfm PLDL1KEEP, [src] - add srcend, src, count - add dstend, dstin, count - cmp count, 16 - b.ls L(copy16) - cmp count, 96 - b.hi L(copy_long) - - /* Medium copies: 17..96 bytes. */ - sub tmp1, count, 1 - ldp A_l, A_h, [src] - tbnz tmp1, 6, L(copy96) - ldp D_l, D_h, [srcend, -16] - tbz tmp1, 5, 1f - ldp B_l, B_h, [src, 16] - ldp C_l, C_h, [srcend, -32] - stp B_l, B_h, [dstin, 16] - stp C_l, C_h, [dstend, -32] -1: - stp A_l, A_h, [dstin] - stp D_l, D_h, [dstend, -16] - ret - - .p2align 4 - /* Small copies: 0..16 bytes. */ -L(copy16): - cmp count, 8 - b.lo 1f - ldr A_l, [src] - ldr A_h, [srcend, -8] - str A_l, [dstin] - str A_h, [dstend, -8] - ret - .p2align 4 -1: - tbz count, 2, 1f - ldr A_lw, [src] - ldr A_hw, [srcend, -4] - str A_lw, [dstin] - str A_hw, [dstend, -4] - ret - - /* Copy 0..3 bytes. Use a branchless sequence that copies the same - byte 3 times if count==1, or the 2nd byte twice if count==2. */ -1: - cbz count, 2f - lsr tmp1, count, 1 - ldrb A_lw, [src] - ldrb A_hw, [srcend, -1] - ldrb B_lw, [src, tmp1] - strb A_lw, [dstin] - strb B_lw, [dstin, tmp1] - strb A_hw, [dstend, -1] -2: ret - - .p2align 4 - /* Copy 64..96 bytes. Copy 64 bytes from the start and - 32 bytes from the end. */ -L(copy96): - ldp B_l, B_h, [src, 16] - ldp C_l, C_h, [src, 32] - ldp D_l, D_h, [src, 48] - ldp E_l, E_h, [srcend, -32] - ldp F_l, F_h, [srcend, -16] - stp A_l, A_h, [dstin] - stp B_l, B_h, [dstin, 16] - stp C_l, C_h, [dstin, 32] - stp D_l, D_h, [dstin, 48] - stp E_l, E_h, [dstend, -32] - stp F_l, F_h, [dstend, -16] - ret - - /* Align DST to 16 byte alignment so that we don't cross cache line - boundaries on both loads and stores. There are at least 96 bytes - to copy, so copy 16 bytes unaligned and then align. The loop - copies 64 bytes per iteration and prefetches one iteration ahead. */ - - .p2align 4 -L(copy_long): - -# ifdef USE_THUNDERX - - /* On thunderx, large memcpy's are helped by software prefetching. - This loop is identical to the one below it but with prefetching - instructions included. For loops that are less than 32768 bytes, - the prefetching does not help and slow the code down so we only - use the prefetching loop for the largest memcpys. */ - - cmp count, #32768 - b.lo L(copy_long_without_prefetch) - and tmp1, dstin, 15 - bic dst, dstin, 15 - ldp D_l, D_h, [src] - sub src, src, tmp1 - prfm pldl1strm, [src, 384] - add count, count, tmp1 /* Count is now 16 too large. */ - ldp A_l, A_h, [src, 16] - stp D_l, D_h, [dstin] - ldp B_l, B_h, [src, 32] - ldp C_l, C_h, [src, 48] - ldp D_l, D_h, [src, 64]! - subs count, count, 128 + 16 /* Test and readjust count. */ - -L(prefetch_loop64): - tbz src, #6, 1f - prfm pldl1strm, [src, 512] -1: - stp A_l, A_h, [dst, 16] - ldp A_l, A_h, [src, 16] - stp B_l, B_h, [dst, 32] - ldp B_l, B_h, [src, 32] - stp C_l, C_h, [dst, 48] - ldp C_l, C_h, [src, 48] - stp D_l, D_h, [dst, 64]! - ldp D_l, D_h, [src, 64]! - subs count, count, 64 - b.hi L(prefetch_loop64) - b L(last64) - -L(copy_long_without_prefetch): -# endif - - and tmp1, dstin, 15 - bic dst, dstin, 15 - ldp D_l, D_h, [src] - sub src, src, tmp1 - add count, count, tmp1 /* Count is now 16 too large. */ - ldp A_l, A_h, [src, 16] - stp D_l, D_h, [dstin] - ldp B_l, B_h, [src, 32] - ldp C_l, C_h, [src, 48] - ldp D_l, D_h, [src, 64]! - subs count, count, 128 + 16 /* Test and readjust count. */ - b.ls L(last64) -L(loop64): - stp A_l, A_h, [dst, 16] - ldp A_l, A_h, [src, 16] - stp B_l, B_h, [dst, 32] - ldp B_l, B_h, [src, 32] - stp C_l, C_h, [dst, 48] - ldp C_l, C_h, [src, 48] - stp D_l, D_h, [dst, 64]! - ldp D_l, D_h, [src, 64]! - subs count, count, 64 - b.hi L(loop64) - - /* Write the last full set of 64 bytes. The remainder is at most 64 - bytes, so it is safe to always copy 64 bytes from the end even if - there is just 1 byte left. */ -L(last64): - ldp E_l, E_h, [srcend, -64] - stp A_l, A_h, [dst, 16] - ldp A_l, A_h, [srcend, -48] - stp B_l, B_h, [dst, 32] - ldp B_l, B_h, [srcend, -32] - stp C_l, C_h, [dst, 48] - ldp C_l, C_h, [srcend, -16] - stp D_l, D_h, [dst, 64] - stp E_l, E_h, [dstend, -64] - stp A_l, A_h, [dstend, -48] - stp B_l, B_h, [dstend, -32] - stp C_l, C_h, [dstend, -16] - ret - - .p2align 4 -L(move_long): - cbz tmp1, 3f - - add srcend, src, count - add dstend, dstin, count - - /* Align dstend to 16 byte alignment so that we don't cross cache line - boundaries on both loads and stores. There are at least 96 bytes - to copy, so copy 16 bytes unaligned and then align. The loop - copies 64 bytes per iteration and prefetches one iteration ahead. */ - - and tmp1, dstend, 15 - ldp D_l, D_h, [srcend, -16] - sub srcend, srcend, tmp1 - sub count, count, tmp1 - ldp A_l, A_h, [srcend, -16] - stp D_l, D_h, [dstend, -16] - ldp B_l, B_h, [srcend, -32] - ldp C_l, C_h, [srcend, -48] - ldp D_l, D_h, [srcend, -64]! - sub dstend, dstend, tmp1 - subs count, count, 128 - b.ls 2f - - nop -1: - stp A_l, A_h, [dstend, -16] - ldp A_l, A_h, [srcend, -16] - stp B_l, B_h, [dstend, -32] - ldp B_l, B_h, [srcend, -32] - stp C_l, C_h, [dstend, -48] - ldp C_l, C_h, [srcend, -48] - stp D_l, D_h, [dstend, -64]! - ldp D_l, D_h, [srcend, -64]! - subs count, count, 64 - b.hi 1b - - /* Write the last full set of 64 bytes. The remainder is at most 64 - bytes, so it is safe to always copy 64 bytes from the start even if - there is just 1 byte left. */ -2: - ldp G_l, G_h, [src, 48] - stp A_l, A_h, [dstend, -16] - ldp A_l, A_h, [src, 32] - stp B_l, B_h, [dstend, -32] - ldp B_l, B_h, [src, 16] - stp C_l, C_h, [dstend, -48] - ldp C_l, C_h, [src] - stp D_l, D_h, [dstend, -64] - stp G_l, G_h, [dstin, 48] - stp A_l, A_h, [dstin, 32] - stp B_l, B_h, [dstin, 16] - stp C_l, C_h, [dstin] -3: ret - -END (MEMCPY) -libc_hidden_builtin_def (MEMCPY) - -#endif diff --git a/sysdeps/aarch64/multiarch/memmove.c b/sysdeps/aarch64/multiarch/memmove.c deleted file mode 100644 index 34c6b29bd5..0000000000 --- a/sysdeps/aarch64/multiarch/memmove.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Multiple versions of memmove. AARCH64 version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for the definition in libc. */ - -#if IS_IN (libc) -/* Redefine memmove so that the compiler won't complain about the type - mismatch with the IFUNC selector in strong_alias, below. */ -# undef memmove -# define memmove __redirect_memmove -# include -# include - -extern __typeof (__redirect_memmove) __libc_memmove; - -extern __typeof (__redirect_memmove) __memmove_generic attribute_hidden; -extern __typeof (__redirect_memmove) __memmove_thunderx attribute_hidden; - -libc_ifunc (__libc_memmove, - IS_THUNDERX (midr) ? __memmove_thunderx : __memmove_generic); - -# undef memmove -strong_alias (__libc_memmove, memmove); -#endif diff --git a/sysdeps/aarch64/nptl/Makefile b/sysdeps/aarch64/nptl/Makefile deleted file mode 100644 index 3627748ad8..0000000000 --- a/sysdeps/aarch64/nptl/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2005-2017 Free Software Foundation, Inc. -# -# This file is part of the GNU C Library. -# -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# . - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif diff --git a/sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h b/sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index d13a75db07..0000000000 --- a/sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -#define _BITS_PTHREADTYPES_ARCH_H 1 - -#include - -#ifdef __ILP32__ -# define __SIZEOF_PTHREAD_ATTR_T 32 -# define __SIZEOF_PTHREAD_MUTEX_T 32 -# define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -# define __SIZEOF_PTHREAD_CONDATTR_T 4 -# define __SIZEOF_PTHREAD_RWLOCK_T 48 -# define __SIZEOF_PTHREAD_BARRIER_T 20 -# define __SIZEOF_PTHREAD_BARRIERATTR_T 4 -#else -# define __SIZEOF_PTHREAD_ATTR_T 64 -# define __SIZEOF_PTHREAD_MUTEX_T 48 -# define __SIZEOF_PTHREAD_MUTEXATTR_T 8 -# define __SIZEOF_PTHREAD_CONDATTR_T 8 -# define __SIZEOF_PTHREAD_RWLOCK_T 56 -# define __SIZEOF_PTHREAD_BARRIER_T 32 -# define __SIZEOF_PTHREAD_BARRIERATTR_T 8 -#endif -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 - -/* Definitions for internal mutex struct. */ -#define __PTHREAD_COMPAT_PADDING_MID -#define __PTHREAD_COMPAT_PADDING_END -#define __PTHREAD_MUTEX_LOCK_ELISION 0 - -#define __LOCK_ALIGNMENT -#define __ONCE_ALIGNMENT - -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; - int __cur_writer; - int __shared; - unsigned long int __pad1; - unsigned long int __pad2; - unsigned int __flags; -}; - -#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/aarch64/nptl/bits/semaphore.h b/sysdeps/aarch64/nptl/bits/semaphore.h deleted file mode 100644 index 0c6c05a6b5..0000000000 --- a/sysdeps/aarch64/nptl/bits/semaphore.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - - -#ifdef __ILP32__ -# define __SIZEOF_SEM_T 16 -#else -# define __SIZEOF_SEM_T 32 -#endif - - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long long int __align; -} sem_t; diff --git a/sysdeps/aarch64/nptl/pthreaddef.h b/sysdeps/aarch64/nptl/pthreaddef.h deleted file mode 100644 index d0411a57a1..0000000000 --- a/sysdeps/aarch64/nptl/pthreaddef.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 16 - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME __builtin_frame_address (0) diff --git a/sysdeps/aarch64/nptl/tcb-offsets.sym b/sysdeps/aarch64/nptl/tcb-offsets.sym deleted file mode 100644 index 238647dd47..0000000000 --- a/sysdeps/aarch64/nptl/tcb-offsets.sym +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include - -PTHREAD_MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) -PTHREAD_TID_OFFSET offsetof (struct pthread, tid) -PTHREAD_SIZEOF sizeof (struct pthread) diff --git a/sysdeps/aarch64/nptl/tls.h b/sysdeps/aarch64/nptl/tls.h deleted file mode 100644 index 175df39853..0000000000 --- a/sysdeps/aarch64/nptl/tls.h +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TLS_H -#define _TLS_H 1 - -#include - -#ifndef __ASSEMBLER__ -# include -# include -# include -# include - -#else /* __ASSEMBLER__ */ -# include -#endif /* __ASSEMBLER__ */ - -#ifndef __ASSEMBLER__ - -/* Get system call information. */ -# include - -/* The TP points to the start of the thread blocks. */ -# define TLS_DTV_AT_TP 1 -# define TLS_TCB_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include - -typedef struct -{ - dtv_t *dtv; - void *private; -} tcbhead_t; - -/* This is the size of the initial TCB. */ -# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE sizeof (tcbhead_t) - -/* This is the size we need before TCB. */ -# define TLS_PRE_TCB_SIZE sizeof (struct pthread) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(tcbp, dtvp) \ - (((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1) - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtv) \ - (THREAD_DTV() = (dtv)) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(tcbp) \ - (((tcbhead_t *) (tcbp))->dtv) - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(tcbp) \ - ({ __asm __volatile ("msr tpidr_el0, %0" : : "r" (tcbp)); NULL; }) - -/* Value passed to 'clone' for initialization of the thread register. */ -# define TLS_DEFINE_INIT_TP(tp, pd) void *tp = (pd) + 1 - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - (((tcbhead_t *) __builtin_thread_pointer ())->dtv) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF \ - ((struct pthread *)__builtin_thread_pointer () - 1) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF \ - CONST_THREAD_AREA (64, sizeof (struct pthread)) - -/* Access to data in the thread descriptor is easy. */ -# define THREAD_GETMEM(descr, member) \ - descr->member -# define THREAD_GETMEM_NC(descr, member, idx) \ - descr->member[idx] -# define THREAD_SETMEM(descr, member, value) \ - descr->member = (value) -# define THREAD_SETMEM_NC(descr, member, idx, value) \ - descr->member[idx] = (value) - -/* Get and set the global scope generation counter in struct pthread. */ -# define THREAD_GSCOPE_FLAG_UNUSED 0 -# define THREAD_GSCOPE_FLAG_USED 1 -# define THREAD_GSCOPE_FLAG_WAIT 2 -# define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -# define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -# define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -# endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/aarch64/preconfigure b/sysdeps/aarch64/preconfigure deleted file mode 100644 index d9bd1f8558..0000000000 --- a/sysdeps/aarch64/preconfigure +++ /dev/null @@ -1,6 +0,0 @@ -case "$machine" in -aarch64*) - base_machine=aarch64 - machine=aarch64 - ;; -esac diff --git a/sysdeps/aarch64/rawmemchr.S b/sysdeps/aarch64/rawmemchr.S deleted file mode 100644 index a6e1753ddf..0000000000 --- a/sysdeps/aarch64/rawmemchr.S +++ /dev/null @@ -1,42 +0,0 @@ -/* rawmemchr - find a character in a memory zone - - Copyright (C) 2015-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Special case rawmemchr (s, 0) as strlen, otherwise tailcall memchr. - Call strlen without setting up a full frame - it preserves x14/x15. -*/ - -ENTRY (__rawmemchr) - cbz w1, L(do_strlen) - mov x2, -1 - b __memchr - -L(do_strlen): - mov x15, x30 - cfi_return_column (x15) - mov x14, x0 - bl __strlen - add x0, x14, x0 - ret x15 - -END (__rawmemchr) -weak_alias (__rawmemchr, rawmemchr) -libc_hidden_builtin_def (__rawmemchr) diff --git a/sysdeps/aarch64/setjmp.S b/sysdeps/aarch64/setjmp.S deleted file mode 100644 index adbf21083a..0000000000 --- a/sysdeps/aarch64/setjmp.S +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - - /* Keep traditional entry points in with sigsetjmp(). */ -ENTRY (setjmp) - mov x1, #1 - b 1f -END (setjmp) - -ENTRY (_setjmp) - mov x1, #0 - b 1f -END (_setjmp) -libc_hidden_def (_setjmp) - -ENTRY (__sigsetjmp) - DELOUSE (0) - -1: - stp x19, x20, [x0, #JB_X19<<3] - stp x21, x22, [x0, #JB_X21<<3] - stp x23, x24, [x0, #JB_X23<<3] - stp x25, x26, [x0, #JB_X25<<3] - stp x27, x28, [x0, #JB_X27<<3] - -#ifdef PTR_MANGLE - PTR_MANGLE (4, 30, 3, 2) - stp x29, x4, [x0, #JB_X29<<3] -#else - stp x29, x30, [x0, #JB_X29<<3] -#endif - /* setjmp probe takes 3 arguments, address of jump buffer - first argument (8@x0), return value second argument (-4@x1), - and target address (8@x30), respectively. */ - LIBC_PROBE (setjmp, 3, 8@x0, -4@x1, 8@x30) - stp d8, d9, [x0, #JB_D8<<3] - stp d10, d11, [x0, #JB_D10<<3] - stp d12, d13, [x0, #JB_D12<<3] - stp d14, d15, [x0, #JB_D14<<3] -#ifdef PTR_MANGLE - mov x4, sp - PTR_MANGLE (5, 4, 3, 2) - str x5, [x0, #JB_SP<<3] -#else - mov x2, sp - str x2, [x0, #JB_SP<<3] -#endif -#if IS_IN (rtld) - /* In ld.so we never save the signal mask */ - mov w0, #0 - RET -#else - b C_SYMBOL_NAME(__sigjmp_save) -#endif -END (__sigsetjmp) -hidden_def (__sigsetjmp) diff --git a/sysdeps/aarch64/soft-fp/Makefile b/sysdeps/aarch64/soft-fp/Makefile deleted file mode 100644 index ada13e8b70..0000000000 --- a/sysdeps/aarch64/soft-fp/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),math) -CPPFLAGS += -I../soft-fp -endif diff --git a/sysdeps/aarch64/soft-fp/e_sqrtl.c b/sysdeps/aarch64/soft-fp/e_sqrtl.c deleted file mode 100644 index e80a5b0d5b..0000000000 --- a/sysdeps/aarch64/soft-fp/e_sqrtl.c +++ /dev/null @@ -1,39 +0,0 @@ -/* long double square root in software floating-point emulation. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -long double -__ieee754_sqrtl (const long double a) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(C); - long double c; - - FP_INIT_ROUNDMODE; - FP_UNPACK_Q(A, a); - FP_SQRT_Q(C, A); - FP_PACK_Q(c, C); - FP_HANDLE_EXCEPTIONS; - return c; -} -strong_alias (__ieee754_sqrtl, __sqrtl_finite) diff --git a/sysdeps/aarch64/soft-fp/sfp-machine.h b/sysdeps/aarch64/soft-fp/sfp-machine.h deleted file mode 100644 index 3e969952fa..0000000000 --- a/sysdeps/aarch64/soft-fp/sfp-machine.h +++ /dev/null @@ -1,120 +0,0 @@ -#include -#include - -#define _FP_W_TYPE_SIZE 64 -#define _FP_W_TYPE unsigned long long -#define _FP_WS_TYPE signed long long -#define _FP_I_TYPE long long - -#define _FP_MUL_MEAT_S(R,X,Y) \ - _FP_MUL_MEAT_1_imm(_FP_WFRACBITS_S,R,X,Y) -#define _FP_MUL_MEAT_D(R,X,Y) \ - _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_2_wide_3mul(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y) -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) - -#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) -#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1) -#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1 -#define _FP_NANSIGN_S 0 -#define _FP_NANSIGN_D 0 -#define _FP_NANSIGN_Q 0 - -#define _FP_KEEPNANFRACP 1 -#define _FP_QNANNEGATEDP 0 - -/* From my experiments it seems X is chosen unless one of the - NaNs is sNaN, in which case the result is NANSIGN/NANFRAC. */ -#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - if ((_FP_FRAC_HIGH_RAW_##fs(X) | \ - _FP_FRAC_HIGH_RAW_##fs(Y)) & _FP_QNANBIT_##fs) \ - { \ - R##_s = _FP_NANSIGN_##fs; \ - _FP_FRAC_SET_##wc(R,_FP_NANFRAC_##fs); \ - } \ - else \ - { \ - R##_s = X##_s; \ - _FP_FRAC_COPY_##wc(R,X); \ - } \ - R##_c = FP_CLS_NAN; \ - } while (0) - -#define _FP_DECL_EX fpu_control_t _fcw - -#define FP_ROUNDMODE (_fcw & _FPU_FPCR_RM_MASK) - -#define FP_RND_NEAREST FE_TONEAREST -#define FP_RND_ZERO FE_TOWARDZERO -#define FP_RND_PINF FE_UPWARD -#define FP_RND_MINF FE_DOWNWARD - -#define FP_EX_INVALID FE_INVALID -#define FP_EX_OVERFLOW FE_OVERFLOW -#define FP_EX_UNDERFLOW FE_UNDERFLOW -#define FP_EX_DIVZERO FE_DIVBYZERO -#define FP_EX_INEXACT FE_INEXACT - -#define _FP_TININESS_AFTER_ROUNDING 0 - -#define FP_INIT_ROUNDMODE \ -do { \ - _FPU_GETCW (_fcw); \ -} while (0) - -#define FP_HANDLE_EXCEPTIONS \ - do { \ - const float fp_max = __FLT_MAX__; \ - const float fp_min = __FLT_MIN__; \ - const float fp_1e32 = 1.0e32f; \ - const float fp_zero = 0.0; \ - const float fp_one = 1.0; \ - unsigned fpsr; \ - if (_fex & FP_EX_INVALID) \ - { \ - __asm__ __volatile__ ("fdiv\ts0, %s0, %s0" \ - : \ - : "w" (fp_zero) \ - : "s0"); \ - __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr)); \ - } \ - if (_fex & FP_EX_DIVZERO) \ - { \ - __asm__ __volatile__ ("fdiv\ts0, %s0, %s1" \ - : \ - : "w" (fp_one), "w" (fp_zero) \ - : "s0"); \ - __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr)); \ - } \ - if (_fex & FP_EX_OVERFLOW) \ - { \ - __asm__ __volatile__ ("fadd\ts0, %s0, %s1" \ - : \ - : "w" (fp_max), "w" (fp_1e32) \ - : "s0"); \ - __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr)); \ - } \ - if (_fex & FP_EX_UNDERFLOW) \ - { \ - __asm__ __volatile__ ("fmul\ts0, %s0, %s0" \ - : \ - : "w" (fp_min) \ - : "s0"); \ - __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr)); \ - } \ - if (_fex & FP_EX_INEXACT) \ - { \ - __asm__ __volatile__ ("fsub\ts0, %s0, %s1" \ - : \ - : "w" (fp_max), "w" (fp_one) \ - : "s0"); \ - __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr)); \ - } \ - } while (0) - -#define FP_TRAPPING_EXCEPTIONS ((_fcw >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT) diff --git a/sysdeps/aarch64/sotruss-lib.c b/sysdeps/aarch64/sotruss-lib.c deleted file mode 100644 index adf039d6f4..0000000000 --- a/sysdeps/aarch64/sotruss-lib.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Override generic sotruss-lib.c to define actual functions for AArch64. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define HAVE_ARCH_PLTENTER -#define HAVE_ARCH_PLTEXIT - -#include - -ElfW(Addr) -la_aarch64_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - La_aarch64_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - print_enter (refcook, defcook, symname, - regs->lr_xreg[0], regs->lr_xreg[1], regs->lr_xreg[2], - *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -la_aarch64_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, - const struct La_aarch64_regs *inregs, - struct La_aarch64_retval *outregs, const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_xreg[0]); - - return 0; -} diff --git a/sysdeps/aarch64/stackinfo.h b/sysdeps/aarch64/stackinfo.h deleted file mode 100644 index ccff0c0986..0000000000 --- a/sysdeps/aarch64/stackinfo.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* On AArch64 the stack grows down. */ -#define _STACK_GROWS_DOWN 1 - -/* Default to a non-executable stack. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W) - -#endif /* stackinfo.h */ diff --git a/sysdeps/aarch64/start.S b/sysdeps/aarch64/start.S deleted file mode 100644 index df1c642c12..0000000000 --- a/sysdeps/aarch64/start.S +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* This is the canonical entry point, usually the first thing in the text - segment. - - Note that the code in the .init section has already been run. - This includes _init and _libc_init - - - At this entry point, most registers' values are unspecified, except: - - x0/w0 Contains a function pointer to be registered with `atexit'. - This is how the dynamic linker arranges to have DT_FINI - functions called for shared libraries that have been loaded - before this code runs. - - sp The stack contains the arguments and environment: - 0(sp) argc - 8(sp) argv[0] - ... - (8*argc)(sp) NULL - (8*(argc+1))(sp) envp[0] - ... - NULL - */ - - .text - .globl _start - .type _start,#function -_start: - /* Create an initial frame with 0 LR and FP */ - mov x29, #0 - mov x30, #0 - - /* Setup rtld_fini in argument register */ - mov x5, x0 - - /* Load argc and a pointer to argv */ - ldr PTR_REG (1), [sp, #0] - add x2, sp, #PTR_SIZE - - /* Setup stack limit in argument register */ - mov x6, sp - -#ifdef SHARED - adrp x0, :got:main - ldr PTR_REG (0), [x0, #:got_lo12:main] - - adrp x3, :got:__libc_csu_init - ldr PTR_REG (3), [x3, #:got_lo12:__libc_csu_init] - - adrp x4, :got:__libc_csu_fini - ldr PTR_REG (4), [x4, #:got_lo12:__libc_csu_fini] -#else - /* Set up the other arguments in registers */ - ldr PTR_REG (0), =main - ldr PTR_REG (3), =__libc_csu_init - ldr PTR_REG (4), =__libc_csu_fini -#endif - - /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, - stack_end) */ - - /* Let the libc call main and exit with its return code. */ - bl __libc_start_main - - /* should never get here....*/ - bl abort - - /* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start diff --git a/sysdeps/aarch64/stpcpy.S b/sysdeps/aarch64/stpcpy.S deleted file mode 100644 index 061e2b0342..0000000000 --- a/sysdeps/aarch64/stpcpy.S +++ /dev/null @@ -1,20 +0,0 @@ -/* stpcpy - copy a string returning pointer to end. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define BUILD_STPCPY -#include "strcpy.S" diff --git a/sysdeps/aarch64/strchr.S b/sysdeps/aarch64/strchr.S deleted file mode 100644 index c5bc79a8c3..0000000000 --- a/sysdeps/aarch64/strchr.S +++ /dev/null @@ -1,139 +0,0 @@ -/* strchr - find a character in a string - - Copyright (C) 2014-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Assumptions: - * - * ARMv8-a, AArch64 - */ - -/* Arguments and results. */ -#define srcin x0 -#define chrin w1 - -#define result x0 - -#define src x2 -#define tmp1 x3 -#define wtmp2 w4 -#define tmp3 x5 - -#define vrepchr v0 -#define vdata1 v1 -#define vdata2 v2 -#define vhas_nul1 v3 -#define vhas_nul2 v4 -#define vhas_chr1 v5 -#define vhas_chr2 v6 -#define vrepmask_0 v7 -#define vrepmask_c v16 -#define vend1 v17 -#define vend2 v18 - - /* Core algorithm. - For each 32-byte hunk we calculate a 64-bit syndrome value, with - two bits per byte (LSB is always in bits 0 and 1, for both big - and little-endian systems). Bit 0 is set iff the relevant byte - matched the requested character. Bit 1 is set iff the - relevant byte matched the NUL end of string (we trigger off bit0 - for the special case of looking for NUL). Since the bits - in the syndrome reflect exactly the order in which things occur - in the original string a count_trailing_zeros() operation will - identify exactly which byte is causing the termination, and why. */ - -/* Locals and temporaries. */ - -ENTRY (strchr) - DELOUSE (0) - mov wtmp2, #0x0401 - movk wtmp2, #0x4010, lsl #16 - dup vrepchr.16b, chrin - bic src, srcin, #31 - dup vrepmask_c.4s, wtmp2 - ands tmp1, srcin, #31 - add vrepmask_0.4s, vrepmask_c.4s, vrepmask_c.4s // lsl #1 - b.eq L(loop) - - /* Input string is not 32-byte aligned. Rather than forcing - the padding bytes to a safe value, we calculate the syndrome - for all the bytes, but then mask off those bits of the - syndrome that are related to the padding. */ - ld1 {vdata1.16b, vdata2.16b}, [src], #32 - neg tmp1, tmp1 - cmeq vhas_nul1.16b, vdata1.16b, #0 - cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b - cmeq vhas_nul2.16b, vdata2.16b, #0 - cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b - and vhas_nul1.16b, vhas_nul1.16b, vrepmask_0.16b - and vhas_nul2.16b, vhas_nul2.16b, vrepmask_0.16b - and vhas_chr1.16b, vhas_chr1.16b, vrepmask_c.16b - and vhas_chr2.16b, vhas_chr2.16b, vrepmask_c.16b - orr vend1.16b, vhas_nul1.16b, vhas_chr1.16b - orr vend2.16b, vhas_nul2.16b, vhas_chr2.16b - lsl tmp1, tmp1, #1 - addp vend1.16b, vend1.16b, vend2.16b // 256->128 - mov tmp3, #~0 - addp vend1.16b, vend1.16b, vend2.16b // 128->64 - lsr tmp1, tmp3, tmp1 - - mov tmp3, vend1.2d[0] - bic tmp1, tmp3, tmp1 // Mask padding bits. - cbnz tmp1, L(tail) - -L(loop): - ld1 {vdata1.16b, vdata2.16b}, [src], #32 - cmeq vhas_nul1.16b, vdata1.16b, #0 - cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b - cmeq vhas_nul2.16b, vdata2.16b, #0 - cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b - /* Use a fast check for the termination condition. */ - orr vend1.16b, vhas_nul1.16b, vhas_chr1.16b - orr vend2.16b, vhas_nul2.16b, vhas_chr2.16b - orr vend1.16b, vend1.16b, vend2.16b - addp vend1.2d, vend1.2d, vend1.2d - mov tmp1, vend1.2d[0] - cbz tmp1, L(loop) - - /* Termination condition found. Now need to establish exactly why - we terminated. */ - and vhas_nul1.16b, vhas_nul1.16b, vrepmask_0.16b - and vhas_nul2.16b, vhas_nul2.16b, vrepmask_0.16b - and vhas_chr1.16b, vhas_chr1.16b, vrepmask_c.16b - and vhas_chr2.16b, vhas_chr2.16b, vrepmask_c.16b - orr vend1.16b, vhas_nul1.16b, vhas_chr1.16b - orr vend2.16b, vhas_nul2.16b, vhas_chr2.16b - addp vend1.16b, vend1.16b, vend2.16b // 256->128 - addp vend1.16b, vend1.16b, vend2.16b // 128->64 - - mov tmp1, vend1.2d[0] -L(tail): - sub src, src, #32 - rbit tmp1, tmp1 - clz tmp1, tmp1 - /* Tmp1 is even if the target charager was found first. Otherwise - we've found the end of string and we weren't looking for NUL. */ - tst tmp1, #1 - add result, src, tmp1, lsr #1 - csel result, result, xzr, eq - ret -END (strchr) -libc_hidden_builtin_def (strchr) -weak_alias (strchr, index) diff --git a/sysdeps/aarch64/strchrnul.S b/sysdeps/aarch64/strchrnul.S deleted file mode 100644 index 2a1c4b84fb..0000000000 --- a/sysdeps/aarch64/strchrnul.S +++ /dev/null @@ -1,131 +0,0 @@ -/* strchrnul - find a character or nul in a string - - Copyright (C) 2014-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Assumptions: - * - * ARMv8-a, AArch64 - * Neon Available. - */ - -/* Arguments and results. */ -#define srcin x0 -#define chrin w1 - -#define result x0 - -/* Locals and temporaries. */ - -#define src x2 -#define tmp1 x3 -#define wtmp2 w4 -#define tmp3 x5 - -#define vrepchr v0 -#define vdata1 v1 -#define vdata2 v2 -#define vhas_nul1 v3 -#define vhas_nul2 v4 -#define vhas_chr1 v5 -#define vhas_chr2 v6 -#define vrepmask v7 -#define vend1 v16 - -/* Core algorithm. - - For each 32-byte hunk we calculate a 64-bit syndrome value, with - two bits per byte (LSB is always in bits 0 and 1, for both big - and little-endian systems). For each tuple, bit 0 is set iff - the relevant byte matched the requested character or nul. Since the - bits in the syndrome reflect exactly the order in which things occur - in the original string a count_trailing_zeros() operation will - identify exactly which byte is causing the termination. */ - -ENTRY (__strchrnul) - DELOUSE (0) - /* Magic constant 0x40100401 to allow us to identify which lane - matches the termination condition. */ - mov wtmp2, #0x0401 - movk wtmp2, #0x4010, lsl #16 - dup vrepchr.16b, chrin - bic src, srcin, #31 /* Work with aligned 32-byte hunks. */ - dup vrepmask.4s, wtmp2 - ands tmp1, srcin, #31 - b.eq L(loop) - - /* Input string is not 32-byte aligned. Rather than forcing - the padding bytes to a safe value, we calculate the syndrome - for all the bytes, but then mask off those bits of the - syndrome that are related to the padding. */ - ld1 {vdata1.16b, vdata2.16b}, [src], #32 - neg tmp1, tmp1 - cmeq vhas_nul1.16b, vdata1.16b, #0 - cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b - cmeq vhas_nul2.16b, vdata2.16b, #0 - cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b - orr vhas_chr1.16b, vhas_chr1.16b, vhas_nul1.16b - orr vhas_chr2.16b, vhas_chr2.16b, vhas_nul2.16b - and vhas_chr1.16b, vhas_chr1.16b, vrepmask.16b - and vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b - lsl tmp1, tmp1, #1 - addp vend1.16b, vhas_chr1.16b, vhas_chr2.16b // 256->128 - mov tmp3, #~0 - addp vend1.16b, vend1.16b, vend1.16b // 128->64 - lsr tmp1, tmp3, tmp1 - - mov tmp3, vend1.2d[0] - bic tmp1, tmp3, tmp1 // Mask padding bits. - cbnz tmp1, L(tail) - -L(loop): - ld1 {vdata1.16b, vdata2.16b}, [src], #32 - cmeq vhas_nul1.16b, vdata1.16b, #0 - cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b - cmeq vhas_nul2.16b, vdata2.16b, #0 - cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b - /* Use a fast check for the termination condition. */ - orr vhas_chr1.16b, vhas_nul1.16b, vhas_chr1.16b - orr vhas_chr2.16b, vhas_nul2.16b, vhas_chr2.16b - orr vend1.16b, vhas_chr1.16b, vhas_chr2.16b - addp vend1.2d, vend1.2d, vend1.2d - mov tmp1, vend1.2d[0] - cbz tmp1, L(loop) - - /* Termination condition found. Now need to establish exactly why - we terminated. */ - and vhas_chr1.16b, vhas_chr1.16b, vrepmask.16b - and vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b - addp vend1.16b, vhas_chr1.16b, vhas_chr2.16b // 256->128 - addp vend1.16b, vend1.16b, vend1.16b // 128->64 - - mov tmp1, vend1.2d[0] -L(tail): - /* Count the trailing zeros, by bit reversing... */ - rbit tmp1, tmp1 - /* Re-bias source. */ - sub src, src, #32 - clz tmp1, tmp1 /* ... and counting the leading zeros. */ - /* tmp1 is twice the offset into the fragment. */ - add result, src, tmp1, lsr #1 - ret - -END(__strchrnul) -weak_alias (__strchrnul, strchrnul) diff --git a/sysdeps/aarch64/strcmp.S b/sysdeps/aarch64/strcmp.S deleted file mode 100644 index e99d6625b7..0000000000 --- a/sysdeps/aarch64/strcmp.S +++ /dev/null @@ -1,157 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Assumptions: - * - * ARMv8-a, AArch64 - */ - -#include - -#define REP8_01 0x0101010101010101 -#define REP8_7f 0x7f7f7f7f7f7f7f7f -#define REP8_80 0x8080808080808080 - -/* Parameters and result. */ -#define src1 x0 -#define src2 x1 -#define result x0 - -/* Internal variables. */ -#define data1 x2 -#define data1w w2 -#define data2 x3 -#define data2w w3 -#define has_nul x4 -#define diff x5 -#define syndrome x6 -#define tmp1 x7 -#define tmp2 x8 -#define tmp3 x9 -#define zeroones x10 -#define pos x11 - - /* Start of performance-critical section -- one 64B cache line. */ -ENTRY_ALIGN(strcmp, 6) - - DELOUSE (0) - DELOUSE (1) - eor tmp1, src1, src2 - mov zeroones, #REP8_01 - tst tmp1, #7 - b.ne L(misaligned8) - ands tmp1, src1, #7 - b.ne L(mutual_align) - /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 - (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and - can be done in parallel across the entire word. */ -L(loop_aligned): - ldr data1, [src1], #8 - ldr data2, [src2], #8 -L(start_realigned): - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - eor diff, data1, data2 /* Non-zero if differences found. */ - bic has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */ - orr syndrome, diff, has_nul - cbz syndrome, L(loop_aligned) - /* End of performance-critical section -- one 64B cache line. */ - -#ifndef __AARCH64EB__ - rev syndrome, syndrome - rev data1, data1 - /* The MS-non-zero bit of the syndrome marks either the first bit - that is different, or the top bit of the first zero byte. - Shifting left now will bring the critical information into the - top bits. */ - clz pos, syndrome - rev data2, data2 - lsl data1, data1, pos - lsl data2, data2, pos - /* But we need to zero-extend (char is unsigned) the value and then - perform a signed 32-bit subtraction. */ - lsr data1, data1, #56 - sub result, data1, data2, lsr #56 - RET -#else - /* For big-endian we cannot use the trick with the syndrome value - as carry-propagation can corrupt the upper bits if the trailing - bytes in the string contain 0x01. */ - /* However, if there is no NUL byte in the dword, we can generate - the result directly. We can't just subtract the bytes as the - MSB might be significant. */ - cbnz has_nul, 1f - cmp data1, data2 - cset result, ne - cneg result, result, lo - RET -1: - /* Re-compute the NUL-byte detection, using a byte-reversed value. */ - rev tmp3, data1 - sub tmp1, tmp3, zeroones - orr tmp2, tmp3, #REP8_7f - bic has_nul, tmp1, tmp2 - rev has_nul, has_nul - orr syndrome, diff, has_nul - clz pos, syndrome - /* The MS-non-zero bit of the syndrome marks either the first bit - that is different, or the top bit of the first zero byte. - Shifting left now will bring the critical information into the - top bits. */ - lsl data1, data1, pos - lsl data2, data2, pos - /* But we need to zero-extend (char is unsigned) the value and then - perform a signed 32-bit subtraction. */ - lsr data1, data1, #56 - sub result, data1, data2, lsr #56 - RET -#endif - -L(mutual_align): - /* Sources are mutually aligned, but are not currently at an - alignment boundary. Round down the addresses and then mask off - the bytes that preceed the start point. */ - bic src1, src1, #7 - bic src2, src2, #7 - lsl tmp1, tmp1, #3 /* Bytes beyond alignment -> bits. */ - ldr data1, [src1], #8 - neg tmp1, tmp1 /* Bits to alignment -64. */ - ldr data2, [src2], #8 - mov tmp2, #~0 -#ifdef __AARCH64EB__ - /* Big-endian. Early bytes are at MSB. */ - lsl tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ -#else - /* Little-endian. Early bytes are at LSB. */ - lsr tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ -#endif - orr data1, data1, tmp2 - orr data2, data2, tmp2 - b L(start_realigned) - -L(misaligned8): - /* We can do better than this. */ - ldrb data1w, [src1], #1 - ldrb data2w, [src2], #1 - cmp data1w, #1 - ccmp data1w, data2w, #0, cs /* NZCV = 0b0000. */ - b.eq L(misaligned8) - sub result, data1, data2 - RET -END(strcmp) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/aarch64/strcpy.S b/sysdeps/aarch64/strcpy.S deleted file mode 100644 index 4ef49816fb..0000000000 --- a/sysdeps/aarch64/strcpy.S +++ /dev/null @@ -1,328 +0,0 @@ -/* strcpy/stpcpy - copy a string returning pointer to start/end. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* To build as stpcpy, define BUILD_STPCPY before compiling this file. - - To test the page crossing code path more thoroughly, compile with - -DSTRCPY_TEST_PAGE_CROSS - this will force all unaligned copies through - the slower entry path. This option is not intended for production use. */ - -#include - -/* Assumptions: - * - * ARMv8-a, AArch64, unaligned accesses, min page size 4k. - */ - -/* Arguments and results. */ -#define dstin x0 -#define srcin x1 - -/* Locals and temporaries. */ -#define src x2 -#define dst x3 -#define data1 x4 -#define data1w w4 -#define data2 x5 -#define data2w w5 -#define has_nul1 x6 -#define has_nul2 x7 -#define tmp1 x8 -#define tmp2 x9 -#define tmp3 x10 -#define tmp4 x11 -#define zeroones x12 -#define data1a x13 -#define data2a x14 -#define pos x15 -#define len x16 -#define to_align x17 - -#ifdef BUILD_STPCPY -#define STRCPY __stpcpy -#else -#define STRCPY strcpy -#endif - - /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 - (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and - can be done in parallel across the entire word. */ - -#define REP8_01 0x0101010101010101 -#define REP8_7f 0x7f7f7f7f7f7f7f7f -#define REP8_80 0x8080808080808080 - - /* AArch64 systems have a minimum page size of 4k. We can do a quick - page size check for crossing this boundary on entry and if we - do not, then we can short-circuit much of the entry code. We - expect early page-crossing strings to be rare (probability of - 16/MIN_PAGE_SIZE ~= 0.4%), so the branch should be quite - predictable, even with random strings. - - We don't bother checking for larger page sizes, the cost of setting - up the correct page size is just not worth the extra gain from - a small reduction in the cases taking the slow path. Note that - we only care about whether the first fetch, which may be - misaligned, crosses a page boundary - after that we move to aligned - fetches for the remainder of the string. */ - -#ifdef STRCPY_TEST_PAGE_CROSS - /* Make everything that isn't Qword aligned look like a page cross. */ -#define MIN_PAGE_P2 4 -#else -#define MIN_PAGE_P2 12 -#endif - -#define MIN_PAGE_SIZE (1 << MIN_PAGE_P2) - -ENTRY_ALIGN (STRCPY, 6) - DELOUSE (0) - DELOUSE (1) - /* For moderately short strings, the fastest way to do the copy is to - calculate the length of the string in the same way as strlen, then - essentially do a memcpy of the result. This avoids the need for - multiple byte copies and further means that by the time we - reach the bulk copy loop we know we can always use DWord - accesses. We expect strcpy to rarely be called repeatedly - with the same source string, so branch prediction is likely to - always be difficult - we mitigate against this by preferring - conditional select operations over branches whenever this is - feasible. */ - and tmp2, srcin, #(MIN_PAGE_SIZE - 1) - mov zeroones, #REP8_01 - and to_align, srcin, #15 - cmp tmp2, #(MIN_PAGE_SIZE - 16) - neg tmp1, to_align - /* The first fetch will straddle a (possible) page boundary iff - srcin + 15 causes bit[MIN_PAGE_P2] to change value. A 16-byte - aligned string will never fail the page align check, so will - always take the fast path. */ - b.gt L(page_cross) - -L(page_cross_ok): - ldp data1, data2, [srcin] -#ifdef __AARCH64EB__ - /* Because we expect the end to be found within 16 characters - (profiling shows this is the most common case), it's worth - swapping the bytes now to save having to recalculate the - termination syndrome later. We preserve data1 and data2 - so that we can re-use the values later on. */ - rev tmp2, data1 - sub tmp1, tmp2, zeroones - orr tmp2, tmp2, #REP8_7f - bics has_nul1, tmp1, tmp2 - b.ne L(fp_le8) - rev tmp4, data2 - sub tmp3, tmp4, zeroones - orr tmp4, tmp4, #REP8_7f -#else - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - bics has_nul1, tmp1, tmp2 - b.ne L(fp_le8) - sub tmp3, data2, zeroones - orr tmp4, data2, #REP8_7f -#endif - bics has_nul2, tmp3, tmp4 - b.eq L(bulk_entry) - - /* The string is short (<=16 bytes). We don't know exactly how - short though, yet. Work out the exact length so that we can - quickly select the optimal copy strategy. */ -L(fp_gt8): - rev has_nul2, has_nul2 - clz pos, has_nul2 - mov tmp2, #56 - add dst, dstin, pos, lsr #3 /* Bits to bytes. */ - sub pos, tmp2, pos -#ifdef __AARCH64EB__ - lsr data2, data2, pos -#else - lsl data2, data2, pos -#endif - str data2, [dst, #1] - str data1, [dstin] -#ifdef BUILD_STPCPY - add dstin, dst, #8 -#endif - ret - -L(fp_le8): - rev has_nul1, has_nul1 - clz pos, has_nul1 - add dst, dstin, pos, lsr #3 /* Bits to bytes. */ - subs tmp2, pos, #24 /* Pos in bits. */ - b.lt L(fp_lt4) -#ifdef __AARCH64EB__ - mov tmp2, #56 - sub pos, tmp2, pos - lsr data2, data1, pos - lsr data1, data1, #32 -#else - lsr data2, data1, tmp2 -#endif - /* 4->7 bytes to copy. */ - str data2w, [dst, #-3] - str data1w, [dstin] -#ifdef BUILD_STPCPY - mov dstin, dst -#endif - ret -L(fp_lt4): - cbz pos, L(fp_lt2) - /* 2->3 bytes to copy. */ -#ifdef __AARCH64EB__ - lsr data1, data1, #48 -#endif - strh data1w, [dstin] - /* Fall-through, one byte (max) to go. */ -L(fp_lt2): - /* Null-terminated string. Last character must be zero! */ - strb wzr, [dst] -#ifdef BUILD_STPCPY - mov dstin, dst -#endif - ret - - .p2align 6 - /* Aligning here ensures that the entry code and main loop all lies - within one 64-byte cache line. */ -L(bulk_entry): - sub to_align, to_align, #16 - stp data1, data2, [dstin] - sub src, srcin, to_align - sub dst, dstin, to_align - b L(entry_no_page_cross) - - /* The inner loop deals with two Dwords at a time. This has a - slightly higher start-up cost, but we should win quite quickly, - especially on cores with a high number of issue slots per - cycle, as we get much better parallelism out of the operations. */ -L(main_loop): - stp data1, data2, [dst], #16 -L(entry_no_page_cross): - ldp data1, data2, [src], #16 - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - sub tmp3, data2, zeroones - orr tmp4, data2, #REP8_7f - bic has_nul1, tmp1, tmp2 - bics has_nul2, tmp3, tmp4 - ccmp has_nul1, #0, #0, eq /* NZCV = 0000 */ - b.eq L(main_loop) - - /* Since we know we are copying at least 16 bytes, the fastest way - to deal with the tail is to determine the location of the - trailing NUL, then (re)copy the 16 bytes leading up to that. */ - cmp has_nul1, #0 -#ifdef __AARCH64EB__ - /* For big-endian, carry propagation (if the final byte in the - string is 0x01) means we cannot use has_nul directly. The - easiest way to get the correct byte is to byte-swap the data - and calculate the syndrome a second time. */ - csel data1, data1, data2, ne - rev data1, data1 - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - bic has_nul1, tmp1, tmp2 -#else - csel has_nul1, has_nul1, has_nul2, ne -#endif - rev has_nul1, has_nul1 - clz pos, has_nul1 - add tmp1, pos, #72 - add pos, pos, #8 - csel pos, pos, tmp1, ne - add src, src, pos, lsr #3 - add dst, dst, pos, lsr #3 - ldp data1, data2, [src, #-32] - stp data1, data2, [dst, #-16] -#ifdef BUILD_STPCPY - sub dstin, dst, #1 -#endif - ret - -L(page_cross): - bic src, srcin, #15 - /* Start by loading two words at [srcin & ~15], then forcing the - bytes that precede srcin to 0xff. This means they never look - like termination bytes. */ - ldp data1, data2, [src] - lsl tmp1, tmp1, #3 /* Bytes beyond alignment -> bits. */ - tst to_align, #7 - csetm tmp2, ne -#ifdef __AARCH64EB__ - lsl tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ -#else - lsr tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ -#endif - orr data1, data1, tmp2 - orr data2a, data2, tmp2 - cmp to_align, #8 - csinv data1, data1, xzr, lt - csel data2, data2, data2a, lt - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - sub tmp3, data2, zeroones - orr tmp4, data2, #REP8_7f - bic has_nul1, tmp1, tmp2 - bics has_nul2, tmp3, tmp4 - ccmp has_nul1, #0, #0, eq /* NZCV = 0000 */ - b.eq L(page_cross_ok) - /* We now need to make data1 and data2 look like they've been - loaded directly from srcin. Do a rotate on the 128-bit value. */ - lsl tmp1, to_align, #3 /* Bytes->bits. */ - neg tmp2, to_align, lsl #3 -#ifdef __AARCH64EB__ - lsl data1a, data1, tmp1 - lsr tmp4, data2, tmp2 - lsl data2, data2, tmp1 - orr tmp4, tmp4, data1a - cmp to_align, #8 - csel data1, tmp4, data2, lt - rev tmp2, data1 - rev tmp4, data2 - sub tmp1, tmp2, zeroones - orr tmp2, tmp2, #REP8_7f - sub tmp3, tmp4, zeroones - orr tmp4, tmp4, #REP8_7f -#else - lsr data1a, data1, tmp1 - lsl tmp4, data2, tmp2 - lsr data2, data2, tmp1 - orr tmp4, tmp4, data1a - cmp to_align, #8 - csel data1, tmp4, data2, lt - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - sub tmp3, data2, zeroones - orr tmp4, data2, #REP8_7f -#endif - bic has_nul1, tmp1, tmp2 - cbnz has_nul1, L(fp_le8) - bic has_nul2, tmp3, tmp4 - b L(fp_gt8) -END (STRCPY) - -#ifdef BUILD_STPCPY -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) -#else -libc_hidden_builtin_def (strcpy) -#endif diff --git a/sysdeps/aarch64/string_private.h b/sysdeps/aarch64/string_private.h deleted file mode 100644 index 09dedbf3db..0000000000 --- a/sysdeps/aarch64/string_private.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Define _STRING_ARCH_unaligned. AArch64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* AArch64 implementations support efficient unaligned access. */ -#define _STRING_ARCH_unaligned 1 diff --git a/sysdeps/aarch64/strlen.S b/sysdeps/aarch64/strlen.S deleted file mode 100644 index 4daf8b8500..0000000000 --- a/sysdeps/aarch64/strlen.S +++ /dev/null @@ -1,220 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Assumptions: - * - * ARMv8-a, AArch64, unaligned accesses, min page size 4k. - */ - -/* To test the page crossing code path more thoroughly, compile with - -DTEST_PAGE_CROSS - this will force all calls through the slower - entry path. This option is not intended for production use. */ - -/* Arguments and results. */ -#define srcin x0 -#define len x0 - -/* Locals and temporaries. */ -#define src x1 -#define data1 x2 -#define data2 x3 -#define has_nul1 x4 -#define has_nul2 x5 -#define tmp1 x4 -#define tmp2 x5 -#define tmp3 x6 -#define tmp4 x7 -#define zeroones x8 - - /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 - (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and - can be done in parallel across the entire word. A faster check - (X - 1) & 0x80 is zero for non-NUL ASCII characters, but gives - false hits for characters 129..255. */ - -#define REP8_01 0x0101010101010101 -#define REP8_7f 0x7f7f7f7f7f7f7f7f -#define REP8_80 0x8080808080808080 - -#ifdef TEST_PAGE_CROSS -# define MIN_PAGE_SIZE 15 -#else -# define MIN_PAGE_SIZE 4096 -#endif - - /* Since strings are short on average, we check the first 16 bytes - of the string for a NUL character. In order to do an unaligned ldp - safely we have to do a page cross check first. If there is a NUL - byte we calculate the length from the 2 8-byte words using - conditional select to reduce branch mispredictions (it is unlikely - strlen will be repeatedly called on strings with the same length). - - If the string is longer than 16 bytes, we align src so don't need - further page cross checks, and process 32 bytes per iteration - using the fast NUL check. If we encounter non-ASCII characters, - fallback to a second loop using the full NUL check. - - If the page cross check fails, we read 16 bytes from an aligned - address, remove any characters before the string, and continue - in the main loop using aligned loads. Since strings crossing a - page in the first 16 bytes are rare (probability of - 16/MIN_PAGE_SIZE ~= 0.4%), this case does not need to be optimized. - - AArch64 systems have a minimum page size of 4k. We don't bother - checking for larger page sizes - the cost of setting up the correct - page size is just not worth the extra gain from a small reduction in - the cases taking the slow path. Note that we only care about - whether the first fetch, which may be misaligned, crosses a page - boundary. */ - -ENTRY_ALIGN (__strlen, 6) - DELOUSE (0) - DELOUSE (1) - and tmp1, srcin, MIN_PAGE_SIZE - 1 - mov zeroones, REP8_01 - cmp tmp1, MIN_PAGE_SIZE - 16 - b.gt L(page_cross) - ldp data1, data2, [srcin] -#ifdef __AARCH64EB__ - /* For big-endian, carry propagation (if the final byte in the - string is 0x01) means we cannot use has_nul1/2 directly. - Since we expect strings to be small and early-exit, - byte-swap the data now so has_null1/2 will be correct. */ - rev data1, data1 - rev data2, data2 -#endif - sub tmp1, data1, zeroones - orr tmp2, data1, REP8_7f - sub tmp3, data2, zeroones - orr tmp4, data2, REP8_7f - bics has_nul1, tmp1, tmp2 - bic has_nul2, tmp3, tmp4 - ccmp has_nul2, 0, 0, eq - beq L(main_loop_entry) - - /* Enter with C = has_nul1 == 0. */ - csel has_nul1, has_nul1, has_nul2, cc - mov len, 8 - rev has_nul1, has_nul1 - clz tmp1, has_nul1 - csel len, xzr, len, cc - add len, len, tmp1, lsr 3 - ret - - /* The inner loop processes 32 bytes per iteration and uses the fast - NUL check. If we encounter non-ASCII characters, use a second - loop with the accurate NUL check. */ - .p2align 4 -L(main_loop_entry): - bic src, srcin, 15 - sub src, src, 16 -L(main_loop): - ldp data1, data2, [src, 32]! -L(page_cross_entry): - sub tmp1, data1, zeroones - sub tmp3, data2, zeroones - orr tmp2, tmp1, tmp3 - tst tmp2, zeroones, lsl 7 - bne 1f - ldp data1, data2, [src, 16] - sub tmp1, data1, zeroones - sub tmp3, data2, zeroones - orr tmp2, tmp1, tmp3 - tst tmp2, zeroones, lsl 7 - beq L(main_loop) - add src, src, 16 -1: - /* The fast check failed, so do the slower, accurate NUL check. */ - orr tmp2, data1, REP8_7f - orr tmp4, data2, REP8_7f - bics has_nul1, tmp1, tmp2 - bic has_nul2, tmp3, tmp4 - ccmp has_nul2, 0, 0, eq - beq L(nonascii_loop) - - /* Enter with C = has_nul1 == 0. */ -L(tail): -#ifdef __AARCH64EB__ - /* For big-endian, carry propagation (if the final byte in the - string is 0x01) means we cannot use has_nul1/2 directly. The - easiest way to get the correct byte is to byte-swap the data - and calculate the syndrome a second time. */ - csel data1, data1, data2, cc - rev data1, data1 - sub tmp1, data1, zeroones - orr tmp2, data1, REP8_7f - bic has_nul1, tmp1, tmp2 -#else - csel has_nul1, has_nul1, has_nul2, cc -#endif - sub len, src, srcin - rev has_nul1, has_nul1 - add tmp2, len, 8 - clz tmp1, has_nul1 - csel len, len, tmp2, cc - add len, len, tmp1, lsr 3 - ret - -L(nonascii_loop): - ldp data1, data2, [src, 16]! - sub tmp1, data1, zeroones - orr tmp2, data1, REP8_7f - sub tmp3, data2, zeroones - orr tmp4, data2, REP8_7f - bics has_nul1, tmp1, tmp2 - bic has_nul2, tmp3, tmp4 - ccmp has_nul2, 0, 0, eq - bne L(tail) - ldp data1, data2, [src, 16]! - sub tmp1, data1, zeroones - orr tmp2, data1, REP8_7f - sub tmp3, data2, zeroones - orr tmp4, data2, REP8_7f - bics has_nul1, tmp1, tmp2 - bic has_nul2, tmp3, tmp4 - ccmp has_nul2, 0, 0, eq - beq L(nonascii_loop) - b L(tail) - - /* Load 16 bytes from [srcin & ~15] and force the bytes that precede - srcin to 0x7f, so we ignore any NUL bytes before the string. - Then continue in the aligned loop. */ -L(page_cross): - bic src, srcin, 15 - ldp data1, data2, [src] - lsl tmp1, srcin, 3 - mov tmp4, -1 -#ifdef __AARCH64EB__ - /* Big-endian. Early bytes are at MSB. */ - lsr tmp1, tmp4, tmp1 /* Shift (tmp1 & 63). */ -#else - /* Little-endian. Early bytes are at LSB. */ - lsl tmp1, tmp4, tmp1 /* Shift (tmp1 & 63). */ -#endif - orr tmp1, tmp1, REP8_80 - orn data1, data1, tmp1 - orn tmp2, data2, tmp1 - tst srcin, 8 - csel data1, data1, tmp4, eq - csel data2, data2, tmp2, eq - b L(page_cross_entry) -END (__strlen) -weak_alias (__strlen, strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/aarch64/strncmp.S b/sysdeps/aarch64/strncmp.S deleted file mode 100644 index 3e4d88a5d7..0000000000 --- a/sysdeps/aarch64/strncmp.S +++ /dev/null @@ -1,207 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Assumptions: - * - * ARMv8-a, AArch64 - */ - -#define REP8_01 0x0101010101010101 -#define REP8_7f 0x7f7f7f7f7f7f7f7f -#define REP8_80 0x8080808080808080 - -/* Parameters and result. */ -#define src1 x0 -#define src2 x1 -#define limit x2 -#define result x0 - -/* Internal variables. */ -#define data1 x3 -#define data1w w3 -#define data2 x4 -#define data2w w4 -#define has_nul x5 -#define diff x6 -#define syndrome x7 -#define tmp1 x8 -#define tmp2 x9 -#define tmp3 x10 -#define zeroones x11 -#define pos x12 -#define limit_wd x13 -#define mask x14 -#define endloop x15 - -ENTRY_ALIGN_AND_PAD (strncmp, 6, 7) - DELOUSE (0) - DELOUSE (1) - DELOUSE (2) - cbz limit, L(ret0) - eor tmp1, src1, src2 - mov zeroones, #REP8_01 - tst tmp1, #7 - b.ne L(misaligned8) - ands tmp1, src1, #7 - b.ne L(mutual_align) - /* Calculate the number of full and partial words -1. */ - sub limit_wd, limit, #1 /* limit != 0, so no underflow. */ - lsr limit_wd, limit_wd, #3 /* Convert to Dwords. */ - - /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 - (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and - can be done in parallel across the entire word. */ - /* Start of performance-critical section -- one 64B cache line. */ -L(loop_aligned): - ldr data1, [src1], #8 - ldr data2, [src2], #8 -L(start_realigned): - subs limit_wd, limit_wd, #1 - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - eor diff, data1, data2 /* Non-zero if differences found. */ - csinv endloop, diff, xzr, pl /* Last Dword or differences. */ - bics has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */ - ccmp endloop, #0, #0, eq - b.eq L(loop_aligned) - /* End of performance-critical section -- one 64B cache line. */ - - /* Not reached the limit, must have found the end or a diff. */ - tbz limit_wd, #63, L(not_limit) - - /* Limit % 8 == 0 => all bytes significant. */ - ands limit, limit, #7 - b.eq L(not_limit) - - lsl limit, limit, #3 /* Bits -> bytes. */ - mov mask, #~0 -#ifdef __AARCH64EB__ - lsr mask, mask, limit -#else - lsl mask, mask, limit -#endif - bic data1, data1, mask - bic data2, data2, mask - - /* Make sure that the NUL byte is marked in the syndrome. */ - orr has_nul, has_nul, mask - -L(not_limit): - orr syndrome, diff, has_nul - -#ifndef __AARCH64EB__ - rev syndrome, syndrome - rev data1, data1 - /* The MS-non-zero bit of the syndrome marks either the first bit - that is different, or the top bit of the first zero byte. - Shifting left now will bring the critical information into the - top bits. */ - clz pos, syndrome - rev data2, data2 - lsl data1, data1, pos - lsl data2, data2, pos - /* But we need to zero-extend (char is unsigned) the value and then - perform a signed 32-bit subtraction. */ - lsr data1, data1, #56 - sub result, data1, data2, lsr #56 - RET -#else - /* For big-endian we cannot use the trick with the syndrome value - as carry-propagation can corrupt the upper bits if the trailing - bytes in the string contain 0x01. */ - /* However, if there is no NUL byte in the dword, we can generate - the result directly. We can't just subtract the bytes as the - MSB might be significant. */ - cbnz has_nul, 1f - cmp data1, data2 - cset result, ne - cneg result, result, lo - RET -1: - /* Re-compute the NUL-byte detection, using a byte-reversed value. */ - rev tmp3, data1 - sub tmp1, tmp3, zeroones - orr tmp2, tmp3, #REP8_7f - bic has_nul, tmp1, tmp2 - rev has_nul, has_nul - orr syndrome, diff, has_nul - clz pos, syndrome - /* The MS-non-zero bit of the syndrome marks either the first bit - that is different, or the top bit of the first zero byte. - Shifting left now will bring the critical information into the - top bits. */ - lsl data1, data1, pos - lsl data2, data2, pos - /* But we need to zero-extend (char is unsigned) the value and then - perform a signed 32-bit subtraction. */ - lsr data1, data1, #56 - sub result, data1, data2, lsr #56 - RET -#endif - -L(mutual_align): - /* Sources are mutually aligned, but are not currently at an - alignment boundary. Round down the addresses and then mask off - the bytes that precede the start point. - We also need to adjust the limit calculations, but without - overflowing if the limit is near ULONG_MAX. */ - bic src1, src1, #7 - bic src2, src2, #7 - ldr data1, [src1], #8 - neg tmp3, tmp1, lsl #3 /* 64 - bits(bytes beyond align). */ - ldr data2, [src2], #8 - mov tmp2, #~0 - sub limit_wd, limit, #1 /* limit != 0, so no underflow. */ -#ifdef __AARCH64EB__ - /* Big-endian. Early bytes are at MSB. */ - lsl tmp2, tmp2, tmp3 /* Shift (tmp1 & 63). */ -#else - /* Little-endian. Early bytes are at LSB. */ - lsr tmp2, tmp2, tmp3 /* Shift (tmp1 & 63). */ -#endif - and tmp3, limit_wd, #7 - lsr limit_wd, limit_wd, #3 - /* Adjust the limit. Only low 3 bits used, so overflow irrelevant. */ - add limit, limit, tmp1 - add tmp3, tmp3, tmp1 - orr data1, data1, tmp2 - orr data2, data2, tmp2 - add limit_wd, limit_wd, tmp3, lsr #3 - b L(start_realigned) - -L(ret0): - mov result, #0 - RET - - .p2align 6 -L(misaligned8): - sub limit, limit, #1 -1: - /* Perhaps we can do better than this. */ - ldrb data1w, [src1], #1 - ldrb data2w, [src2], #1 - subs limit, limit, #1 - ccmp data1w, #1, #0, cs /* NZCV = 0b0000. */ - ccmp data1w, data2w, #0, cs /* NZCV = 0b0000. */ - b.eq 1b - sub result, data1, data2 - RET -END (strncmp) -libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/aarch64/strnlen.S b/sysdeps/aarch64/strnlen.S deleted file mode 100644 index 8a4767b75e..0000000000 --- a/sysdeps/aarch64/strnlen.S +++ /dev/null @@ -1,165 +0,0 @@ -/* strnlen - calculate the length of a string with limit. - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Assumptions: - * - * ARMv8-a, AArch64 - */ - -/* Arguments and results. */ -#define srcin x0 -#define len x0 -#define limit x1 - -/* Locals and temporaries. */ -#define src x2 -#define data1 x3 -#define data2 x4 -#define data2a x5 -#define has_nul1 x6 -#define has_nul2 x7 -#define tmp1 x8 -#define tmp2 x9 -#define tmp3 x10 -#define tmp4 x11 -#define zeroones x12 -#define pos x13 -#define limit_wd x14 - -#define REP8_01 0x0101010101010101 -#define REP8_7f 0x7f7f7f7f7f7f7f7f -#define REP8_80 0x8080808080808080 - -ENTRY_ALIGN_AND_PAD (__strnlen, 6, 9) - DELOUSE (0) - DELOUSE (1) - DELOUSE (2) - cbz limit, L(hit_limit) - mov zeroones, #REP8_01 - bic src, srcin, #15 - ands tmp1, srcin, #15 - b.ne L(misaligned) - /* Calculate the number of full and partial words -1. */ - sub limit_wd, limit, #1 /* Limit != 0, so no underflow. */ - lsr limit_wd, limit_wd, #4 /* Convert to Qwords. */ - - /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 - (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and - can be done in parallel across the entire word. */ - /* The inner loop deals with two Dwords at a time. This has a - slightly higher start-up cost, but we should win quite quickly, - especially on cores with a high number of issue slots per - cycle, as we get much better parallelism out of the operations. */ - - /* Start of critial section -- keep to one 64Byte cache line. */ -L(loop): - ldp data1, data2, [src], #16 -L(realigned): - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - sub tmp3, data2, zeroones - orr tmp4, data2, #REP8_7f - bic has_nul1, tmp1, tmp2 - bic has_nul2, tmp3, tmp4 - subs limit_wd, limit_wd, #1 - orr tmp1, has_nul1, has_nul2 - ccmp tmp1, #0, #0, pl /* NZCV = 0000 */ - b.eq L(loop) - /* End of critical section -- keep to one 64Byte cache line. */ - - orr tmp1, has_nul1, has_nul2 - cbz tmp1, L(hit_limit) /* No null in final Qword. */ - - /* We know there's a null in the final Qword. The easiest thing - to do now is work out the length of the string and return - MIN (len, limit). */ - - sub len, src, srcin - cbz has_nul1, L(nul_in_data2) -#ifdef __AARCH64EB__ - mov data2, data1 -#endif - sub len, len, #8 - mov has_nul2, has_nul1 -L(nul_in_data2): -#ifdef __AARCH64EB__ - /* For big-endian, carry propagation (if the final byte in the - string is 0x01) means we cannot use has_nul directly. The - easiest way to get the correct byte is to byte-swap the data - and calculate the syndrome a second time. */ - rev data2, data2 - sub tmp1, data2, zeroones - orr tmp2, data2, #REP8_7f - bic has_nul2, tmp1, tmp2 -#endif - sub len, len, #8 - rev has_nul2, has_nul2 - clz pos, has_nul2 - add len, len, pos, lsr #3 /* Bits to bytes. */ - cmp len, limit - csel len, len, limit, ls /* Return the lower value. */ - RET - -L(misaligned): - /* Deal with a partial first word. - We're doing two things in parallel here; - 1) Calculate the number of words (but avoiding overflow if - limit is near ULONG_MAX) - to do this we need to work out - limit + tmp1 - 1 as a 65-bit value before shifting it; - 2) Load and mask the initial data words - we force the bytes - before the ones we are interested in to 0xff - this ensures - early bytes will not hit any zero detection. */ - sub limit_wd, limit, #1 - neg tmp4, tmp1 - cmp tmp1, #8 - - and tmp3, limit_wd, #15 - lsr limit_wd, limit_wd, #4 - mov tmp2, #~0 - - ldp data1, data2, [src], #16 - lsl tmp4, tmp4, #3 /* Bytes beyond alignment -> bits. */ - add tmp3, tmp3, tmp1 - -#ifdef __AARCH64EB__ - /* Big-endian. Early bytes are at MSB. */ - lsl tmp2, tmp2, tmp4 /* Shift (tmp1 & 63). */ -#else - /* Little-endian. Early bytes are at LSB. */ - lsr tmp2, tmp2, tmp4 /* Shift (tmp1 & 63). */ -#endif - add limit_wd, limit_wd, tmp3, lsr #4 - - orr data1, data1, tmp2 - orr data2a, data2, tmp2 - - csinv data1, data1, xzr, le - csel data2, data2, data2a, le - b L(realigned) - -L(hit_limit): - mov len, limit - RET -END (__strnlen) -libc_hidden_def (__strnlen) -weak_alias (__strnlen, strnlen) -libc_hidden_def (strnlen) diff --git a/sysdeps/aarch64/strrchr.S b/sysdeps/aarch64/strrchr.S deleted file mode 100644 index f8e5e8e036..0000000000 --- a/sysdeps/aarch64/strrchr.S +++ /dev/null @@ -1,166 +0,0 @@ -/* strrchr: find the last instance of a character in a string. - - Copyright (C) 2014-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Assumptions: - * - * ARMv8-a, AArch64 - * Neon Available. - */ - -/* Arguments and results. */ -#define srcin x0 -#define chrin w1 - -#define result x0 - -#define src x2 -#define tmp1 x3 -#define wtmp2 w4 -#define tmp3 x5 -#define src_match x6 -#define src_offset x7 -#define const_m1 x8 -#define tmp4 x9 -#define nul_match x10 -#define chr_match x11 - -#define vrepchr v0 -#define vdata1 v1 -#define vdata2 v2 -#define vhas_nul1 v3 -#define vhas_nul2 v4 -#define vhas_chr1 v5 -#define vhas_chr2 v6 -#define vrepmask_0 v7 -#define vrepmask_c v16 -#define vend1 v17 -#define vend2 v18 - -/* Core algorithm. - - For each 32-byte hunk we calculate a 64-bit syndrome value, with - two bits per byte (LSB is always in bits 0 and 1, for both big - and little-endian systems). For each tuple, bit 0 is set iff - the relevant byte matched the requested character; bit 1 is set - iff the relevant byte matched the NUL end of string (we trigger - off bit0 for the special case of looking for NUL). Since the bits - in the syndrome reflect exactly the order in which things occur - in the original string a count_trailing_zeros() operation will - identify exactly which byte is causing the termination, and why. */ - -ENTRY(strrchr) - DELOUSE (0) - cbz x1, L(null_search) - /* Magic constant 0x40100401 to allow us to identify which lane - matches the requested byte. Magic constant 0x80200802 used - similarly for NUL termination. */ - mov wtmp2, #0x0401 - movk wtmp2, #0x4010, lsl #16 - dup vrepchr.16b, chrin - bic src, srcin, #31 /* Work with aligned 32-byte hunks. */ - dup vrepmask_c.4s, wtmp2 - mov src_offset, #0 - ands tmp1, srcin, #31 - add vrepmask_0.4s, vrepmask_c.4s, vrepmask_c.4s /* equiv: lsl #1 */ - b.eq L(aligned) - - /* Input string is not 32-byte aligned. Rather than forcing - the padding bytes to a safe value, we calculate the syndrome - for all the bytes, but then mask off those bits of the - syndrome that are related to the padding. */ - ld1 {vdata1.16b, vdata2.16b}, [src], #32 - neg tmp1, tmp1 - cmeq vhas_nul1.16b, vdata1.16b, #0 - cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b - cmeq vhas_nul2.16b, vdata2.16b, #0 - cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b - and vhas_nul1.16b, vhas_nul1.16b, vrepmask_0.16b - and vhas_chr1.16b, vhas_chr1.16b, vrepmask_c.16b - and vhas_nul2.16b, vhas_nul2.16b, vrepmask_0.16b - and vhas_chr2.16b, vhas_chr2.16b, vrepmask_c.16b - addp vhas_nul1.16b, vhas_nul1.16b, vhas_nul2.16b // 256->128 - addp vhas_chr1.16b, vhas_chr1.16b, vhas_chr2.16b // 256->128 - addp vhas_nul1.16b, vhas_nul1.16b, vhas_nul1.16b // 128->64 - addp vhas_chr1.16b, vhas_chr1.16b, vhas_chr1.16b // 128->64 - mov nul_match, vhas_nul1.2d[0] - lsl tmp1, tmp1, #1 - mov const_m1, #~0 - mov chr_match, vhas_chr1.2d[0] - lsr tmp3, const_m1, tmp1 - - bic nul_match, nul_match, tmp3 // Mask padding bits. - bic chr_match, chr_match, tmp3 // Mask padding bits. - cbnz nul_match, L(tail) - -L(loop): - cmp chr_match, #0 - csel src_match, src, src_match, ne - csel src_offset, chr_match, src_offset, ne -L(aligned): - ld1 {vdata1.16b, vdata2.16b}, [src], #32 - cmeq vhas_nul1.16b, vdata1.16b, #0 - cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b - cmeq vhas_nul2.16b, vdata2.16b, #0 - cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b - addp vend1.16b, vhas_nul1.16b, vhas_nul2.16b // 256->128 - and vhas_chr1.16b, vhas_chr1.16b, vrepmask_c.16b - and vhas_chr2.16b, vhas_chr2.16b, vrepmask_c.16b - addp vhas_chr1.16b, vhas_chr1.16b, vhas_chr2.16b // 256->128 - addp vend1.16b, vend1.16b, vend1.16b // 128->64 - addp vhas_chr1.16b, vhas_chr1.16b, vhas_chr1.16b // 128->64 - mov nul_match, vend1.2d[0] - mov chr_match, vhas_chr1.2d[0] - cbz nul_match, L(loop) - - and vhas_nul1.16b, vhas_nul1.16b, vrepmask_0.16b - and vhas_nul2.16b, vhas_nul2.16b, vrepmask_0.16b - addp vhas_nul1.16b, vhas_nul1.16b, vhas_nul2.16b - addp vhas_nul1.16b, vhas_nul1.16b, vhas_nul1.16b - mov nul_match, vhas_nul1.2d[0] - -L(tail): - /* Work out exactly where the string ends. */ - sub tmp4, nul_match, #1 - eor tmp4, tmp4, nul_match - ands chr_match, chr_match, tmp4 - /* And pick the values corresponding to the last match. */ - csel src_match, src, src_match, ne - csel src_offset, chr_match, src_offset, ne - - /* Count down from the top of the syndrome to find the last match. */ - clz tmp3, src_offset - /* Src_match points beyond the word containing the match, so we can - simply subtract half the bit-offset into the syndrome. Because - we are counting down, we need to go back one more character. */ - add tmp3, tmp3, #2 - sub result, src_match, tmp3, lsr #1 - /* But if the syndrome shows no match was found, then return NULL. */ - cmp src_offset, #0 - csel result, result, xzr, ne - - ret -L(null_search): - b __strchrnul - -END(strrchr) -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/aarch64/sysdep.h b/sysdeps/aarch64/sysdep.h deleted file mode 100644 index a749a707ec..0000000000 --- a/sysdeps/aarch64/sysdep.h +++ /dev/null @@ -1,148 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _AARCH64_SYSDEP_H -#define _AARCH64_SYSDEP_H - -#include - -#ifdef __LP64__ -# define AARCH64_R(NAME) R_AARCH64_ ## NAME -# define PTR_REG(n) x##n -# define PTR_LOG_SIZE 3 -# define DELOUSE(n) -#else -# define AARCH64_R(NAME) R_AARCH64_P32_ ## NAME -# define PTR_REG(n) w##n -# define PTR_LOG_SIZE 2 -# define DELOUSE(n) mov w##n, w##n -#endif - -#define PTR_SIZE (1<. */ - -#define TLS_LD(x) TLS_GD(x) - -#define TLS_GD(x) \ - ({ register unsigned long __result asm ("x0"); \ - asm ("adrp %0, :tlsgd:" #x "; " \ - "add %0, %0, #:tlsgd_lo12:" #x "; " \ - "bl __tls_get_addr;" \ - "nop" \ - : "=r" (__result) \ - : \ - : "x1", "x2", "x3", "x4", "x5", "x6", \ - "x7", "x8", "x9", "x10", "x11", "x12", \ - "x13", "x14", "x15", "x16", "x17", "x18", \ - "x30", "memory", "cc"); \ - (int *) (__result); }) - -#define TLS_IE(x) \ - ({ register unsigned long __result asm ("x0"); \ - register unsigned long __t; \ - asm ("mrs %1, tpidr_el0; " \ - "adrp %0, :gottprel:" #x "; " \ - "ldr %0, [%0, #:gottprel_lo12:" #x "]; " \ - "add %0, %0, %1" \ - : "=r" (__result), "=r" (__t)); \ - (int *) (__result); }) - -#define TLS_LE(x) \ - ({ register unsigned long __result asm ("x0"); \ - asm ("mrs %0, tpidr_el0; " \ - "add %0, %0, :tprel_hi12:" #x "; " \ - "add %0, %0, :tprel_lo12_nc:" #x \ - : "=r" (__result)); \ - (int *) (__result); }) diff --git a/sysdeps/aarch64/tlsdesc.c b/sysdeps/aarch64/tlsdesc.c deleted file mode 100644 index 0b57031126..0000000000 --- a/sysdeps/aarch64/tlsdesc.c +++ /dev/null @@ -1,166 +0,0 @@ -/* Manage TLS descriptors. AArch64 version. - - Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - -/* The following functions take an entry_check_offset argument. It's - computed by the caller as an offset between its entry point and the - call site, such that by adding the built-in return address that is - implicitly passed to the function with this offset, we can easily - obtain the caller's entry point to compare with the entry point - given in the TLS descriptor. If it's changed, we want to return - immediately. */ - -/* This function is used to lazily resolve TLS_DESC RELA relocations. - The argument location is used to hold a pointer to the relocation. */ - -void -attribute_hidden -_dl_tlsdesc_resolve_rela_fixup (struct tlsdesc *td, struct link_map *l) -{ - const ElfW(Rela) *reloc = atomic_load_relaxed (&td->arg); - - /* After GL(dl_load_lock) is grabbed only one caller can see td->entry in - initial state in _dl_tlsdesc_resolve_early_return_p, other concurrent - callers will return and retry calling td->entry. The updated td->entry - synchronizes with the single writer so all read accesses here can use - relaxed order. */ - if (_dl_tlsdesc_resolve_early_return_p - (td, (void*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_PLT)]) + l->l_addr))) - return; - - /* The code below was borrowed from _dl_fixup(), - except for checking for STB_LOCAL. */ - const ElfW(Sym) *const symtab - = (const void *) D_PTR (l, l_info[DT_SYMTAB]); - const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]); - const ElfW(Sym) *sym = &symtab[ELFW(R_SYM) (reloc->r_info)]; - lookup_t result; - - /* Look up the target symbol. If the normal lookup rules are not - used don't look in the global scope. */ - if (ELFW(ST_BIND) (sym->st_info) != STB_LOCAL - && __builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0) - { - const struct r_found_version *version = NULL; - - if (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL) - { - const ElfW(Half) *vernum = - (const void *) D_PTR (l, l_info[VERSYMIDX (DT_VERSYM)]); - ElfW(Half) ndx = vernum[ELFW(R_SYM) (reloc->r_info)] & 0x7fff; - version = &l->l_versions[ndx]; - if (version->hash == 0) - version = NULL; - } - - result = _dl_lookup_symbol_x (strtab + sym->st_name, l, &sym, - l->l_scope, version, ELF_RTYPE_CLASS_PLT, - DL_LOOKUP_ADD_DEPENDENCY, NULL); - } - else - { - /* We already found the symbol. The module (and therefore its load - address) is also known. */ - result = l; - } - - if (!sym) - { - atomic_store_relaxed (&td->arg, (void *) reloc->r_addend); - /* This release store synchronizes with the ldar acquire load - instruction in _dl_tlsdesc_undefweak. */ - atomic_store_release (&td->entry, _dl_tlsdesc_undefweak); - } - else - { -# ifndef SHARED - CHECK_STATIC_TLS (l, result); -# else - if (!TRY_STATIC_TLS (l, result)) - { - void *p = _dl_make_tlsdesc_dynamic (result, sym->st_value - + reloc->r_addend); - atomic_store_relaxed (&td->arg, p); - /* This release store synchronizes with the ldar acquire load - instruction in _dl_tlsdesc_dynamic. */ - atomic_store_release (&td->entry, _dl_tlsdesc_dynamic); - } - else -# endif - { - void *p = (void*) (sym->st_value + result->l_tls_offset - + reloc->r_addend); - atomic_store_relaxed (&td->arg, p); - /* This release store synchronizes with the ldar acquire load - instruction in _dl_tlsdesc_return_lazy. */ - atomic_store_release (&td->entry, _dl_tlsdesc_return_lazy); - } - } - - _dl_tlsdesc_wake_up_held_fixups (); -} - -/* This function is used to avoid busy waiting for other threads to - complete the lazy relocation. Once another thread wins the race to - relocate a TLS descriptor, it sets the descriptor up such that this - function is called to wait until the resolver releases the - lock. */ - -void -attribute_hidden -_dl_tlsdesc_resolve_hold_fixup (struct tlsdesc *td, void *caller) -{ - /* Maybe we're lucky and can return early. */ - if (caller != atomic_load_relaxed (&td->entry)) - return; - - /* Locking here will stop execution until the running resolver runs - _dl_tlsdesc_wake_up_held_fixups(), releasing the lock. - - FIXME: We'd be better off waiting on a condition variable, such - that we didn't have to hold the lock throughout the relocation - processing. */ - __rtld_lock_lock_recursive (GL(dl_load_lock)); - __rtld_lock_unlock_recursive (GL(dl_load_lock)); -} - - -/* Unmap the dynamic object, but also release its TLS descriptor table - if there is one. */ - -void -internal_function -_dl_unmap (struct link_map *map) -{ - _dl_unmap_segments (map); - -#ifdef SHARED - if (map->l_mach.tlsdesc_table) - htab_delete (map->l_mach.tlsdesc_table); -#endif -} diff --git a/sysdeps/aarch64/tlsdesc.sym b/sysdeps/aarch64/tlsdesc.sym deleted file mode 100644 index a06a719779..0000000000 --- a/sysdeps/aarch64/tlsdesc.sym +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include -#include -#include -#include - --- - --- Abuse tls.h macros to derive offsets relative to the thread register. - -TLSDESC_ARG offsetof(struct tlsdesc, arg) - -TLSDESC_GEN_COUNT offsetof(struct tlsdesc_dynamic_arg, gen_count) -TLSDESC_MODID offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_module) -TLSDESC_MODOFF offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_offset) -TCBHEAD_DTV offsetof(tcbhead_t, dtv) -DTV_COUNTER offsetof(dtv_t, counter) -TLS_DTV_UNALLOCATED TLS_DTV_UNALLOCATED diff --git a/sysdeps/aarch64/tst-audit.h b/sysdeps/aarch64/tst-audit.h deleted file mode 100644 index ea3ed55f11..0000000000 --- a/sysdeps/aarch64/tst-audit.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. AArch64 version. - - Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define pltenter la_aarch64_gnu_pltenter -#define pltexit la_aarch64_gnu_pltexit -#define La_regs La_aarch64_regs -#define La_retval La_aarch64_retval -#define int_retval lrv_xreg[0] diff --git a/sysdeps/alpha/Implies b/sysdeps/alpha/Implies deleted file mode 100644 index d03783b127..0000000000 --- a/sysdeps/alpha/Implies +++ /dev/null @@ -1,7 +0,0 @@ -wordsize-64 -# Alpha uses IEEE 754 single, double and quad precision floating point. -ieee754/ldbl-128 -ieee754/dbl-64/wordsize-64 -ieee754/dbl-64 -ieee754/flt-32 -alpha/soft-fp diff --git a/sysdeps/alpha/Makefile b/sysdeps/alpha/Makefile deleted file mode 100644 index 98da3b57e6..0000000000 --- a/sysdeps/alpha/Makefile +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright (C) 1993-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# Contributed by Brendan Kehoe (brendan@zen.org). - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# . - -ifeq ($(subdir),db2) -CPPFLAGS += -DHAVE_SPINLOCKS=1 -DHAVE_ASSEM_ALPHA=1 -endif - -ifeq ($(subdir),debug) -# Consider making this GCC's default... -CFLAGS-backtrace.c = -fasynchronous-unwind-tables -endif - -ifeq ($(subdir),gmon) -sysdep_routines += _mcount -endif - -ifeq ($(subdir),gnulib) -sysdep_routines += divl divlu divq divqu reml remlu remq remqu -endif - -ifeq ($(subdir),string) -sysdep_routines += stxcpy stxncpy -endif - -ifeq ($(subdir),elf) -# The ld.so startup code cannot use literals until it self-relocates. -CFLAGS-rtld.c = -mbuild-constants -endif - -ifeq ($(subdir),math) -# The fma routines rely on inexact being raised for correct results. -CFLAGS-s_fma.c = -mieee-with-inexact -CFLAGS-s_fmaf.c = -mieee-with-inexact -# This test tries to check for inexact being raised by arithmetic. -CFLAGS-test-misc.c += -mieee-with-inexact -# Avoid "conflicting types for built-in function" warnings -CFLAGS-s_isnan.c += -fno-builtin-isnanf -endif - -# Build everything with full IEEE math support, and with dynamic rounding; -# there are a number of math routines that are defined to work with the -# "current" rounding mode, and it's easiest to set this with all of them. -sysdep-CFLAGS += -mieee -mfp-rounding-mode=d - -# libc.so requires about 16k for the small data area, which is well -# below the 64k maximum. -pic-ccflag = -fpic diff --git a/sysdeps/alpha/Subdirs b/sysdeps/alpha/Subdirs deleted file mode 100644 index 87eadf3024..0000000000 --- a/sysdeps/alpha/Subdirs +++ /dev/null @@ -1 +0,0 @@ -soft-fp diff --git a/sysdeps/alpha/Versions b/sysdeps/alpha/Versions deleted file mode 100644 index ae8fde7b23..0000000000 --- a/sysdeps/alpha/Versions +++ /dev/null @@ -1,17 +0,0 @@ -libc { - GLIBC_2.0 { - # functions with special/multiple interfaces - __divqu; __remqu; __divqs; __remqs; __divlu; __remlu; __divls; - __remls; __divl; __reml; __divq; __remq; __divqu; __remqu; - } -} -libm { - GLIBC_2.0 { - # used in inline functions. - __atan2; - } - GLIBC_2.18 { - # forgotten when the symbols were added to glibc 2.15 for other targets - __sqrt_finite; __sqrtf_finite; __sqrtl_finite; - } -} diff --git a/sysdeps/alpha/__longjmp.S b/sysdeps/alpha/__longjmp.S deleted file mode 100644 index ae8de82669..0000000000 --- a/sysdeps/alpha/__longjmp.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __ASSEMBLY__ - -#include -#include - - -ENTRY(__longjmp) -#ifdef PROF - ldgp gp, 0(pv) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#else - .prologue 0 -#endif - - mov a1, v0 - ldq s0, JB_S0*8(a0) - ldq s1, JB_S1*8(a0) - ldq s2, JB_S2*8(a0) - ldq s3, JB_S3*8(a0) - ldq s4, JB_S4*8(a0) - ldq s5, JB_S5*8(a0) - ldq ra, JB_PC*8(a0) - ldq fp, JB_FP*8(a0) - ldq t0, JB_SP*8(a0) - ldt $f2, JB_F2*8(a0) - ldt $f3, JB_F3*8(a0) - ldt $f4, JB_F4*8(a0) - ldt $f5, JB_F5*8(a0) - ldt $f6, JB_F6*8(a0) - ldt $f7, JB_F7*8(a0) - ldt $f8, JB_F8*8(a0) - ldt $f9, JB_F9*8(a0) -#ifdef PTR_DEMANGLE - PTR_DEMANGLE(ra, t1) - PTR_DEMANGLE2(t0, t1) - PTR_DEMANGLE2(fp, t1) -#endif - cmoveq v0, 1, v0 - mov t0, sp - ret - -END(__longjmp) diff --git a/sysdeps/alpha/_mcount.S b/sysdeps/alpha/_mcount.S deleted file mode 100644 index 8a35f3903b..0000000000 --- a/sysdeps/alpha/_mcount.S +++ /dev/null @@ -1,105 +0,0 @@ -/* Machine-specific calling sequence for `mcount' profiling function. alpha - Copyright (C) 1995-2017 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@cs.arizona.edu). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Assembly stub to invoke _mcount(). Compiler generated code calls - this stub after executing a function's prologue and without saving any - registers. It is therefore necessary to preserve a0..a5 as they may - contain function arguments. To work correctly with frame- less - functions, it is also necessary to preserve ra. Finally, division - routines are invoked with a special calling convention and the - compiler treats those calls as if they were instructions. In - particular, it doesn't save any of the temporary registers (caller - saved registers). It is therefore necessary to preserve all - caller-saved registers as well. - - Upon entering _mcount, register $at holds the return address and ra - holds the return address of the function's caller (selfpc and frompc, - respectively in gmon.c language...). */ - -#include - - .set noat - .set noreorder - -LEAF(_mcount, 0xb0) - subq sp, 0xb0, sp - .prologue 0 - stq a0, 0x00(sp) - mov ra, a0 # a0 = caller-pc - stq a1, 0x08(sp) - mov $at, a1 # a1 = self-pc - stq $at, 0x10(sp) - - stq a2, 0x18(sp) - stq a3, 0x20(sp) - stq a4, 0x28(sp) - stq a5, 0x30(sp) - stq ra, 0x38(sp) - stq gp, 0x40(sp) - - br gp, 1f -1: ldgp gp, 0(gp) - - stq t0, 0x48(sp) - stq t1, 0x50(sp) - stq t2, 0x58(sp) - stq t3, 0x60(sp) - stq t4, 0x68(sp) - stq t5, 0x70(sp) - stq t6, 0x78(sp) - - stq t7, 0x80(sp) - stq t8, 0x88(sp) - stq t9, 0x90(sp) - stq t10, 0x98(sp) - stq t11, 0xa0(sp) - stq v0, 0xa8(sp) - - jsr ra, __mcount - - ldq a0, 0x00(sp) - ldq a1, 0x08(sp) - ldq $at, 0x10(sp) # restore self-pc - ldq a2, 0x18(sp) - ldq a3, 0x20(sp) - ldq a4, 0x28(sp) - ldq a5, 0x30(sp) - ldq ra, 0x38(sp) - ldq gp, 0x40(sp) - mov $at, pv # make pv point to return address - ldq t0, 0x48(sp) # this is important under OSF/1 to - ldq t1, 0x50(sp) # ensure that the code that we return - ldq t2, 0x58(sp) # can correctly compute its gp - ldq t3, 0x60(sp) - ldq t4, 0x68(sp) - ldq t5, 0x70(sp) - ldq t6, 0x78(sp) - ldq t7, 0x80(sp) - ldq t8, 0x88(sp) - ldq t9, 0x90(sp) - ldq t10, 0x98(sp) - ldq t11, 0xa0(sp) - ldq v0, 0xa8(sp) - - addq sp, 0xb0, sp - ret zero,($at),1 - - END(_mcount) - -weak_alias (_mcount, mcount) diff --git a/sysdeps/alpha/add_n.S b/sysdeps/alpha/add_n.S deleted file mode 100644 index 85f8e270cb..0000000000 --- a/sysdeps/alpha/add_n.S +++ /dev/null @@ -1,118 +0,0 @@ - # Alpha __mpn_add_n -- Add two limb vectors of the same length > 0 and - # store sum in a third limb vector. - - # Copyright (C) 1995-2017 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library. If not, see . - - - # INPUT PARAMETERS - # res_ptr $16 - # s1_ptr $17 - # s2_ptr $18 - # size $19 - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_add_n - .ent __mpn_add_n -__mpn_add_n: - .frame $30,0,$26,0 - - ldq $3,0($17) - ldq $4,0($18) - - subq $19,1,$19 - and $19,4-1,$2 # number of limbs in first loop - bis $31,$31,$0 - beq $2,.L0 # if multiple of 4 limbs, skip first loop - - subq $19,$2,$19 - -.Loop0: subq $2,1,$2 - ldq $5,8($17) - addq $4,$0,$4 - ldq $6,8($18) - cmpult $4,$0,$1 - addq $3,$4,$4 - cmpult $4,$3,$0 - stq $4,0($16) - or $0,$1,$0 - - addq $17,8,$17 - addq $18,8,$18 - bis $5,$5,$3 - bis $6,$6,$4 - addq $16,8,$16 - bne $2,.Loop0 - -.L0: beq $19,.Lend - - .align 3 -.Loop: subq $19,4,$19 - - ldq $5,8($17) - addq $4,$0,$4 - ldq $6,8($18) - cmpult $4,$0,$1 - addq $3,$4,$4 - cmpult $4,$3,$0 - stq $4,0($16) - or $0,$1,$0 - - ldq $3,16($17) - addq $6,$0,$6 - ldq $4,16($18) - cmpult $6,$0,$1 - addq $5,$6,$6 - cmpult $6,$5,$0 - stq $6,8($16) - or $0,$1,$0 - - ldq $5,24($17) - addq $4,$0,$4 - ldq $6,24($18) - cmpult $4,$0,$1 - addq $3,$4,$4 - cmpult $4,$3,$0 - stq $4,16($16) - or $0,$1,$0 - - ldq $3,32($17) - addq $6,$0,$6 - ldq $4,32($18) - cmpult $6,$0,$1 - addq $5,$6,$6 - cmpult $6,$5,$0 - stq $6,24($16) - or $0,$1,$0 - - addq $17,32,$17 - addq $18,32,$18 - addq $16,32,$16 - bne $19,.Loop - -.Lend: addq $4,$0,$4 - cmpult $4,$0,$1 - addq $3,$4,$4 - cmpult $4,$3,$0 - stq $4,0($16) - or $0,$1,$0 - ret $31,($26),1 - - .end __mpn_add_n diff --git a/sysdeps/alpha/addmul_1.S b/sysdeps/alpha/addmul_1.S deleted file mode 100644 index 11bd135e83..0000000000 --- a/sysdeps/alpha/addmul_1.S +++ /dev/null @@ -1,90 +0,0 @@ - # Alpha 21064 __mpn_addmul_1 -- Multiply a limb vector with a limb and add - # the result to a second limb vector. - - # Copyright (C) 1992-2017 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library. If not, see . - - - # INPUT PARAMETERS - # res_ptr r16 - # s1_ptr r17 - # size r18 - # s2_limb r19 - - # This code runs at 42 cycles/limb on EV4 and 18 cycles/limb on EV5. - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_addmul_1 - .ent __mpn_addmul_1 2 -__mpn_addmul_1: - .frame $30,0,$26 - - ldq $2,0($17) # $2 = s1_limb - addq $17,8,$17 # s1_ptr++ - subq $18,1,$18 # size-- - mulq $2,$19,$3 # $3 = prod_low - ldq $5,0($16) # $5 = *res_ptr - umulh $2,$19,$0 # $0 = prod_high - beq $18,.Lend1 # jump if size was == 1 - ldq $2,0($17) # $2 = s1_limb - addq $17,8,$17 # s1_ptr++ - subq $18,1,$18 # size-- - addq $5,$3,$3 - cmpult $3,$5,$4 - stq $3,0($16) - addq $16,8,$16 # res_ptr++ - beq $18,.Lend2 # jump if size was == 2 - - .align 3 -.Loop: mulq $2,$19,$3 # $3 = prod_low - ldq $5,0($16) # $5 = *res_ptr - addq $4,$0,$0 # cy_limb = cy_limb + 'cy' - subq $18,1,$18 # size-- - umulh $2,$19,$4 # $4 = cy_limb - ldq $2,0($17) # $2 = s1_limb - addq $17,8,$17 # s1_ptr++ - addq $3,$0,$3 # $3 = cy_limb + prod_low - cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) - addq $5,$3,$3 - cmpult $3,$5,$5 - stq $3,0($16) - addq $16,8,$16 # res_ptr++ - addq $5,$0,$0 # combine carries - bne $18,.Loop - -.Lend2: mulq $2,$19,$3 # $3 = prod_low - ldq $5,0($16) # $5 = *res_ptr - addq $4,$0,$0 # cy_limb = cy_limb + 'cy' - umulh $2,$19,$4 # $4 = cy_limb - addq $3,$0,$3 # $3 = cy_limb + prod_low - cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) - addq $5,$3,$3 - cmpult $3,$5,$5 - stq $3,0($16) - addq $5,$0,$0 # combine carries - addq $4,$0,$0 # cy_limb = prod_high + cy - ret $31,($26),1 -.Lend1: addq $5,$3,$3 - cmpult $3,$5,$5 - stq $3,0($16) - addq $0,$5,$0 - ret $31,($26),1 - - .end __mpn_addmul_1 diff --git a/sysdeps/alpha/alphaev5/add_n.S b/sysdeps/alpha/alphaev5/add_n.S deleted file mode 100644 index d7db8f4672..0000000000 --- a/sysdeps/alpha/alphaev5/add_n.S +++ /dev/null @@ -1,146 +0,0 @@ - # Alpha __mpn_add_n -- Add two limb vectors of the same length > 0 and - # store sum in a third limb vector. - - # Copyright (C) 1995-2017 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library. If not, see . - - - # INPUT PARAMETERS - # res_ptr $16 - # s1_ptr $17 - # s2_ptr $18 - # size $19 - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_add_n - .ent __mpn_add_n -__mpn_add_n: - .frame $30,0,$26,0 - - or $31,$31,$25 # clear cy - subq $19,4,$19 # decr loop cnt - blt $19,.Lend2 # if less than 4 limbs, goto 2nd loop - # Start software pipeline for 1st loop - ldq $0,0($18) - ldq $1,8($18) - ldq $4,0($17) - ldq $5,8($17) - addq $17,32,$17 # update s1_ptr - ldq $2,16($18) - addq $0,$4,$20 # 1st main add - ldq $3,24($18) - subq $19,4,$19 # decr loop cnt - ldq $6,-16($17) - cmpult $20,$0,$25 # compute cy from last add - ldq $7,-8($17) - addq $1,$25,$28 # cy add - addq $18,32,$18 # update s2_ptr - addq $5,$28,$21 # 2nd main add - cmpult $28,$25,$8 # compute cy from last add - blt $19,.Lend1 # if less than 4 limbs remain, jump - # 1st loop handles groups of 4 limbs in a software pipeline - .align 4 -.Loop: cmpult $21,$28,$25 # compute cy from last add - ldq $0,0($18) - or $8,$25,$25 # combine cy from the two adds - ldq $1,8($18) - addq $2,$25,$28 # cy add - ldq $4,0($17) - addq $28,$6,$22 # 3rd main add - ldq $5,8($17) - cmpult $28,$25,$8 # compute cy from last add - cmpult $22,$28,$25 # compute cy from last add - stq $20,0($16) - or $8,$25,$25 # combine cy from the two adds - stq $21,8($16) - addq $3,$25,$28 # cy add - addq $28,$7,$23 # 4th main add - cmpult $28,$25,$8 # compute cy from last add - cmpult $23,$28,$25 # compute cy from last add - addq $17,32,$17 # update s1_ptr - or $8,$25,$25 # combine cy from the two adds - addq $16,32,$16 # update res_ptr - addq $0,$25,$28 # cy add - ldq $2,16($18) - addq $4,$28,$20 # 1st main add - ldq $3,24($18) - cmpult $28,$25,$8 # compute cy from last add - ldq $6,-16($17) - cmpult $20,$28,$25 # compute cy from last add - ldq $7,-8($17) - or $8,$25,$25 # combine cy from the two adds - subq $19,4,$19 # decr loop cnt - stq $22,-16($16) - addq $1,$25,$28 # cy add - stq $23,-8($16) - addq $5,$28,$21 # 2nd main add - addq $18,32,$18 # update s2_ptr - cmpult $28,$25,$8 # compute cy from last add - bge $19,.Loop - # Finish software pipeline for 1st loop -.Lend1: cmpult $21,$28,$25 # compute cy from last add - or $8,$25,$25 # combine cy from the two adds - addq $2,$25,$28 # cy add - addq $28,$6,$22 # 3rd main add - cmpult $28,$25,$8 # compute cy from last add - cmpult $22,$28,$25 # compute cy from last add - stq $20,0($16) - or $8,$25,$25 # combine cy from the two adds - stq $21,8($16) - addq $3,$25,$28 # cy add - addq $28,$7,$23 # 4th main add - cmpult $28,$25,$8 # compute cy from last add - cmpult $23,$28,$25 # compute cy from last add - or $8,$25,$25 # combine cy from the two adds - addq $16,32,$16 # update res_ptr - stq $22,-16($16) - stq $23,-8($16) -.Lend2: addq $19,4,$19 # restore loop cnt - beq $19,.Lret - # Start software pipeline for 2nd loop - ldq $0,0($18) - ldq $4,0($17) - subq $19,1,$19 - beq $19,.Lend0 - # 2nd loop handles remaining 1-3 limbs - .align 4 -.Loop0: addq $0,$25,$28 # cy add - ldq $0,8($18) - addq $4,$28,$20 # main add - ldq $4,8($17) - addq $18,8,$18 - cmpult $28,$25,$8 # compute cy from last add - addq $17,8,$17 - stq $20,0($16) - cmpult $20,$28,$25 # compute cy from last add - subq $19,1,$19 # decr loop cnt - or $8,$25,$25 # combine cy from the two adds - addq $16,8,$16 - bne $19,.Loop0 -.Lend0: addq $0,$25,$28 # cy add - addq $4,$28,$20 # main add - cmpult $28,$25,$8 # compute cy from last add - cmpult $20,$28,$25 # compute cy from last add - stq $20,0($16) - or $8,$25,$25 # combine cy from the two adds - -.Lret: or $25,$31,$0 # return cy - ret $31,($26),1 - .end __mpn_add_n diff --git a/sysdeps/alpha/alphaev5/lshift.S b/sysdeps/alpha/alphaev5/lshift.S deleted file mode 100644 index 24ff8e2fc3..0000000000 --- a/sysdeps/alpha/alphaev5/lshift.S +++ /dev/null @@ -1,172 +0,0 @@ - # Alpha EV5 __mpn_lshift -- - - # Copyright (C) 1994-2017 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library. If not, see . - - - # INPUT PARAMETERS - # res_ptr r16 - # s1_ptr r17 - # size r18 - # cnt r19 - - # This code runs at 3.25 cycles/limb on the EV5. - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_lshift - .ent __mpn_lshift -__mpn_lshift: - .frame $30,0,$26,0 - - s8addq $18,$17,$17 # make r17 point at end of s1 - ldq $4,-8($17) # load first limb - subq $31,$19,$20 - s8addq $18,$16,$16 # make r16 point at end of RES - subq $18,1,$18 - and $18,4-1,$28 # number of limbs in first loop - srl $4,$20,$0 # compute function result - - beq $28,.L0 - subq $18,$28,$18 - - .align 3 -.Loop0: ldq $3,-16($17) - subq $16,8,$16 - sll $4,$19,$5 - subq $17,8,$17 - subq $28,1,$28 - srl $3,$20,$6 - or $3,$3,$4 - or $5,$6,$8 - stq $8,0($16) - bne $28,.Loop0 - -.L0: sll $4,$19,$24 - beq $18,.Lend - # warm up phase 1 - ldq $1,-16($17) - subq $18,4,$18 - ldq $2,-24($17) - ldq $3,-32($17) - ldq $4,-40($17) - beq $18,.Lend1 - # warm up phase 2 - srl $1,$20,$7 - sll $1,$19,$21 - srl $2,$20,$8 - ldq $1,-48($17) - sll $2,$19,$22 - ldq $2,-56($17) - srl $3,$20,$5 - or $7,$24,$7 - sll $3,$19,$23 - or $8,$21,$8 - srl $4,$20,$6 - ldq $3,-64($17) - sll $4,$19,$24 - ldq $4,-72($17) - subq $18,4,$18 - beq $18,.Lend2 - .align 4 - # main loop -.Loop: stq $7,-8($16) - or $5,$22,$5 - stq $8,-16($16) - or $6,$23,$6 - - srl $1,$20,$7 - subq $18,4,$18 - sll $1,$19,$21 - unop # ldq $31,-96($17) - - srl $2,$20,$8 - ldq $1,-80($17) - sll $2,$19,$22 - ldq $2,-88($17) - - stq $5,-24($16) - or $7,$24,$7 - stq $6,-32($16) - or $8,$21,$8 - - srl $3,$20,$5 - unop # ldq $31,-96($17) - sll $3,$19,$23 - subq $16,32,$16 - - srl $4,$20,$6 - ldq $3,-96($17) - sll $4,$19,$24 - ldq $4,-104($17) - - subq $17,32,$17 - bne $18,.Loop - # cool down phase 2/1 -.Lend2: stq $7,-8($16) - or $5,$22,$5 - stq $8,-16($16) - or $6,$23,$6 - srl $1,$20,$7 - sll $1,$19,$21 - srl $2,$20,$8 - sll $2,$19,$22 - stq $5,-24($16) - or $7,$24,$7 - stq $6,-32($16) - or $8,$21,$8 - srl $3,$20,$5 - sll $3,$19,$23 - srl $4,$20,$6 - sll $4,$19,$24 - # cool down phase 2/2 - stq $7,-40($16) - or $5,$22,$5 - stq $8,-48($16) - or $6,$23,$6 - stq $5,-56($16) - stq $6,-64($16) - # cool down phase 2/3 - stq $24,-72($16) - ret $31,($26),1 - - # cool down phase 1/1 -.Lend1: srl $1,$20,$7 - sll $1,$19,$21 - srl $2,$20,$8 - sll $2,$19,$22 - srl $3,$20,$5 - or $7,$24,$7 - sll $3,$19,$23 - or $8,$21,$8 - srl $4,$20,$6 - sll $4,$19,$24 - # cool down phase 1/2 - stq $7,-8($16) - or $5,$22,$5 - stq $8,-16($16) - or $6,$23,$6 - stq $5,-24($16) - stq $6,-32($16) - stq $24,-40($16) - ret $31,($26),1 - -.Lend: stq $24,-8($16) - ret $31,($26),1 - .end __mpn_lshift diff --git a/sysdeps/alpha/alphaev5/rshift.S b/sysdeps/alpha/alphaev5/rshift.S deleted file mode 100644 index 0a44c77d0a..0000000000 --- a/sysdeps/alpha/alphaev5/rshift.S +++ /dev/null @@ -1,170 +0,0 @@ - # Alpha EV5 __mpn_rshift -- - - # Copyright (C) 1994-2017 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library. If not, see . - - - # INPUT PARAMETERS - # res_ptr r16 - # s1_ptr r17 - # size r18 - # cnt r19 - - # This code runs at 3.25 cycles/limb on the EV5. - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_rshift - .ent __mpn_rshift -__mpn_rshift: - .frame $30,0,$26,0 - - ldq $4,0($17) # load first limb - subq $31,$19,$20 - subq $18,1,$18 - and $18,4-1,$28 # number of limbs in first loop - sll $4,$20,$0 # compute function result - - beq $28,.L0 - subq $18,$28,$18 - - .align 3 -.Loop0: ldq $3,8($17) - addq $16,8,$16 - srl $4,$19,$5 - addq $17,8,$17 - subq $28,1,$28 - sll $3,$20,$6 - or $3,$3,$4 - or $5,$6,$8 - stq $8,-8($16) - bne $28,.Loop0 - -.L0: srl $4,$19,$24 - beq $18,.Lend - # warm up phase 1 - ldq $1,8($17) - subq $18,4,$18 - ldq $2,16($17) - ldq $3,24($17) - ldq $4,32($17) - beq $18,.Lend1 - # warm up phase 2 - sll $1,$20,$7 - srl $1,$19,$21 - sll $2,$20,$8 - ldq $1,40($17) - srl $2,$19,$22 - ldq $2,48($17) - sll $3,$20,$5 - or $7,$24,$7 - srl $3,$19,$23 - or $8,$21,$8 - sll $4,$20,$6 - ldq $3,56($17) - srl $4,$19,$24 - ldq $4,64($17) - subq $18,4,$18 - beq $18,.Lend2 - .align 4 - # main loop -.Loop: stq $7,0($16) - or $5,$22,$5 - stq $8,8($16) - or $6,$23,$6 - - sll $1,$20,$7 - subq $18,4,$18 - srl $1,$19,$21 - unop # ldq $31,-96($17) - - sll $2,$20,$8 - ldq $1,72($17) - srl $2,$19,$22 - ldq $2,80($17) - - stq $5,16($16) - or $7,$24,$7 - stq $6,24($16) - or $8,$21,$8 - - sll $3,$20,$5 - unop # ldq $31,-96($17) - srl $3,$19,$23 - addq $16,32,$16 - - sll $4,$20,$6 - ldq $3,88($17) - srl $4,$19,$24 - ldq $4,96($17) - - addq $17,32,$17 - bne $18,.Loop - # cool down phase 2/1 -.Lend2: stq $7,0($16) - or $5,$22,$5 - stq $8,8($16) - or $6,$23,$6 - sll $1,$20,$7 - srl $1,$19,$21 - sll $2,$20,$8 - srl $2,$19,$22 - stq $5,16($16) - or $7,$24,$7 - stq $6,24($16) - or $8,$21,$8 - sll $3,$20,$5 - srl $3,$19,$23 - sll $4,$20,$6 - srl $4,$19,$24 - # cool down phase 2/2 - stq $7,32($16) - or $5,$22,$5 - stq $8,40($16) - or $6,$23,$6 - stq $5,48($16) - stq $6,56($16) - # cool down phase 2/3 - stq $24,64($16) - ret $31,($26),1 - - # cool down phase 1/1 -.Lend1: sll $1,$20,$7 - srl $1,$19,$21 - sll $2,$20,$8 - srl $2,$19,$22 - sll $3,$20,$5 - or $7,$24,$7 - srl $3,$19,$23 - or $8,$21,$8 - sll $4,$20,$6 - srl $4,$19,$24 - # cool down phase 1/2 - stq $7,0($16) - or $5,$22,$5 - stq $8,8($16) - or $6,$23,$6 - stq $5,16($16) - stq $6,24($16) - stq $24,32($16) - ret $31,($26),1 - -.Lend: stq $24,0($16) - ret $31,($26),1 - .end __mpn_rshift diff --git a/sysdeps/alpha/alphaev5/sub_n.S b/sysdeps/alpha/alphaev5/sub_n.S deleted file mode 100644 index 032b0c616b..0000000000 --- a/sysdeps/alpha/alphaev5/sub_n.S +++ /dev/null @@ -1,147 +0,0 @@ - # Alpha __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and - # store difference in a third limb vector. - - # Copyright (C) 1995-2017 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library. If not, see . - - - # INPUT PARAMETERS - # res_ptr $16 - # s1_ptr $17 - # s2_ptr $18 - # size $19 - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_sub_n - .ent __mpn_sub_n -__mpn_sub_n: - .frame $30,0,$26,0 - - or $31,$31,$25 # clear cy - subq $19,4,$19 # decr loop cnt - blt $19,.Lend2 # if less than 4 limbs, goto 2nd loop - # Start software pipeline for 1st loop - ldq $0,0($18) - ldq $1,8($18) - ldq $4,0($17) - ldq $5,8($17) - addq $17,32,$17 # update s1_ptr - ldq $2,16($18) - subq $4,$0,$20 # 1st main sub - ldq $3,24($18) - subq $19,4,$19 # decr loop cnt - ldq $6,-16($17) - cmpult $4,$20,$25 # compute cy from last sub - ldq $7,-8($17) - addq $1,$25,$28 # cy add - addq $18,32,$18 # update s2_ptr - subq $5,$28,$21 # 2nd main sub - cmpult $28,$25,$8 # compute cy from last add - blt $19,.Lend1 # if less than 4 limbs remain, jump - # 1st loop handles groups of 4 limbs in a software pipeline - .align 4 -.Loop: cmpult $5,$21,$25 # compute cy from last add - ldq $0,0($18) - or $8,$25,$25 # combine cy from the two adds - ldq $1,8($18) - addq $2,$25,$28 # cy add - ldq $4,0($17) - subq $6,$28,$22 # 3rd main sub - ldq $5,8($17) - cmpult $28,$25,$8 # compute cy from last add - cmpult $6,$22,$25 # compute cy from last add - stq $20,0($16) - or $8,$25,$25 # combine cy from the two adds - stq $21,8($16) - addq $3,$25,$28 # cy add - subq $7,$28,$23 # 4th main sub - cmpult $28,$25,$8 # compute cy from last add - cmpult $7,$23,$25 # compute cy from last add - addq $17,32,$17 # update s1_ptr - or $8,$25,$25 # combine cy from the two adds - addq $16,32,$16 # update res_ptr - addq $0,$25,$28 # cy add - ldq $2,16($18) - subq $4,$28,$20 # 1st main sub - ldq $3,24($18) - cmpult $28,$25,$8 # compute cy from last add - ldq $6,-16($17) - cmpult $4,$20,$25 # compute cy from last add - ldq $7,-8($17) - or $8,$25,$25 # combine cy from the two adds - subq $19,4,$19 # decr loop cnt - stq $22,-16($16) - addq $1,$25,$28 # cy add - stq $23,-8($16) - subq $5,$28,$21 # 2nd main sub - addq $18,32,$18 # update s2_ptr - cmpult $28,$25,$8 # compute cy from last add - bge $19,.Loop - # Finish software pipeline for 1st loop -.Lend1: cmpult $5,$21,$25 # compute cy from last add - or $8,$25,$25 # combine cy from the two adds - addq $2,$25,$28 # cy add - subq $6,$28,$22 # 3rd main sub - cmpult $28,$25,$8 # compute cy from last add - cmpult $6,$22,$25 # compute cy from last add - stq $20,0($16) - or $8,$25,$25 # combine cy from the two adds - stq $21,8($16) - addq $3,$25,$28 # cy add - subq $7,$28,$23 # 4th main sub - cmpult $28,$25,$8 # compute cy from last add - cmpult $7,$23,$25 # compute cy from last add - or $8,$25,$25 # combine cy from the two adds - addq $16,32,$16 # update res_ptr - stq $22,-16($16) - stq $23,-8($16) -.Lend2: addq $19,4,$19 # restore loop cnt - beq $19,.Lret - # Start software pipeline for 2nd loop - ldq $0,0($18) - ldq $4,0($17) - subq $19,1,$19 - beq $19,.Lend0 - # 2nd loop handles remaining 1-3 limbs - .align 4 -.Loop0: addq $0,$25,$28 # cy add - ldq $0,8($18) - subq $4,$28,$20 # main sub - ldq $1,8($17) - addq $18,8,$18 - cmpult $28,$25,$8 # compute cy from last add - addq $17,8,$17 - stq $20,0($16) - cmpult $4,$20,$25 # compute cy from last add - subq $19,1,$19 # decr loop cnt - or $8,$25,$25 # combine cy from the two adds - addq $16,8,$16 - or $1,$31,$4 - bne $19,.Loop0 -.Lend0: addq $0,$25,$28 # cy add - subq $4,$28,$20 # main sub - cmpult $28,$25,$8 # compute cy from last add - cmpult $4,$20,$25 # compute cy from last add - stq $20,0($16) - or $8,$25,$25 # combine cy from the two adds - -.Lret: or $25,$31,$0 # return cy - ret $31,($26),1 - .end __mpn_sub_n diff --git a/sysdeps/alpha/alphaev6/Implies b/sysdeps/alpha/alphaev6/Implies deleted file mode 100644 index 0e7fc170ba..0000000000 --- a/sysdeps/alpha/alphaev6/Implies +++ /dev/null @@ -1 +0,0 @@ -alpha/alphaev5 diff --git a/sysdeps/alpha/alphaev6/addmul_1.S b/sysdeps/alpha/alphaev6/addmul_1.S deleted file mode 100644 index 1072ea763f..0000000000 --- a/sysdeps/alpha/alphaev6/addmul_1.S +++ /dev/null @@ -1,477 +0,0 @@ - # Alpha ev6 mpn_addmul_1 -- Multiply a limb vector with a limb and add - # the result to a second limb vector. - # - # Copyright (C) 2000-2017 Free Software Foundation, Inc. - # - # This file is part of the GNU MP Library. - # - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published - # by the Free Software Foundation; either version 2.1 of the License, or (at - # your option) any later version. - # - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - # - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library. If not, see . - - # INPUT PARAMETERS - # res_ptr $16 - # s1_ptr $17 - # size $18 - # s2_limb $19 - # - # This code runs at 42 cycles/limb on EV4, 18 cycles/limb on EV5, and - # exactly 3.625 cycles/limb on EV6... - # - # This code was written in close cooperation with ev6 pipeline expert - # Steve Root (root@toober.hlo.dec.com). Any errors are tege's fault, though. - # - # Register usages for unrolled loop: - # 0-3 mul's - # 4-7 acc's - # 8-15 mul results - # 20,21 carry's - # 22,23 save for stores - # - # Sustains 8 mul-adds in 29 cycles in the unrolled inner loop. - # - # The stores can issue a cycle late so we have paired no-op's to 'catch' - # them, so that further disturbance to the schedule is damped. - # - # We couldn't pair the loads, because the entangled schedule of the - # carry's has to happen on one side {0} of the machine. Note, the total - # use of U0, and the total use of L0 (after attending to the stores). - # which is part of the reason why.... - # - # This is a great schedule for the d_cache, a poor schedule for the - # b_cache. The lockup on U0 means that any stall can't be recovered - # from. Consider a ldq in L1. say that load gets stalled because it - # collides with a fill from the b_Cache. On the next cycle, this load - # gets priority. If first looks at L0, and goes there. The instruction - # we intended for L0 gets to look at L1, which is NOT where we want - # it. It either stalls 1, because it can't go in L0, or goes there, and - # causes a further instruction to stall. - # - # So for b_cache, we're likely going to want to put one or more cycles - # back into the code! And, of course, put in prefetches. For the - # accumulator, lds, intent to modify. For the multiplier, you might - # want ldq, evict next, if you're not wanting to use it again soon. Use - # 256 ahead of present pointer value. At a place where we have an mt - # followed by a bookkeeping, put the bookkeeping in upper, and the - # prefetch into lower. - # - # Note, the usage of physical registers per cycle is smoothed off, as - # much as possible. - # - # Note, the ldq's and stq's are at the end of the quadpacks. note, we'd - # like not to have a ldq or stq to preceded a conditional branch in a - # quadpack. The conditional branch moves the retire pointer one cycle - # later. - # - # Optimization notes: - # Callee-saves regs: $9 $10 $11 $12 $13 $14 $15 $26 ?$27? - # Reserved regs: $29 $30 $31 - # Free caller-saves regs in unrolled code: $24 $25 $28 - # We should swap some of the callee-saves regs for some of the free - # caller-saves regs, saving some overhead cycles. - # Most importantly, we should write fast code for the 0-7 case. - # The code we use there are for the 21164, and runs at 7 cycles/limb - # on the 21264. Should not be hard, if we write specialized code for - # 1-7 limbs (the one for 0 limbs should be straightforward). We then just - # need a jump table indexed by the low 3 bits of the count argument. - - .set noreorder - .set noat - .text - - .globl __mpn_addmul_1 - .ent __mpn_addmul_1 -__mpn_addmul_1: - .frame $30,0,$26,0 - .prologue 0 - - cmpult $18, 8, $1 - beq $1, $Large - - ldq $2, 0($17) # $2 = s1_limb - addq $17, 8, $17 # s1_ptr++ - subq $18, 1, $18 # size-- - mulq $2, $19, $3 # $3 = prod_low - ldq $5, 0($16) # $5 = *res_ptr - umulh $2, $19, $0 # $0 = prod_high - beq $18, $Lend0b # jump if size was == 1 - ldq $2, 0($17) # $2 = s1_limb - addq $17, 8, $17 # s1_ptr++ - subq $18, 1, $18 # size-- - addq $5, $3, $3 - cmpult $3, $5, $4 - stq $3, 0($16) - addq $16, 8, $16 # res_ptr++ - beq $18, $Lend0a # jump if size was == 2 - - .align 3 -$Loop0: mulq $2, $19, $3 # $3 = prod_low - ldq $5, 0($16) # $5 = *res_ptr - addq $4, $0, $0 # cy_limb = cy_limb + 'cy' - subq $18, 1, $18 # size-- - umulh $2, $19, $4 # $4 = cy_limb - ldq $2, 0($17) # $2 = s1_limb - addq $17, 8, $17 # s1_ptr++ - addq $3, $0, $3 # $3 = cy_limb + prod_low - cmpult $3, $0, $0 # $0 = carry from (cy_limb + prod_low) - addq $5, $3, $3 - cmpult $3, $5, $5 - stq $3, 0($16) - addq $16, 8, $16 # res_ptr++ - addq $5, $0, $0 # combine carries - bne $18, $Loop0 -$Lend0a: - mulq $2, $19, $3 # $3 = prod_low - ldq $5, 0($16) # $5 = *res_ptr - addq $4, $0, $0 # cy_limb = cy_limb + 'cy' - umulh $2, $19, $4 # $4 = cy_limb - addq $3, $0, $3 # $3 = cy_limb + prod_low - cmpult $3, $0, $0 # $0 = carry from (cy_limb + prod_low) - addq $5, $3, $3 - cmpult $3, $5, $5 - stq $3, 0($16) - addq $5, $0, $0 # combine carries - addq $4, $0, $0 # cy_limb = prod_high + cy - ret $31, ($26), 1 -$Lend0b: - addq $5, $3, $3 - cmpult $3, $5, $5 - stq $3, 0($16) - addq $0, $5, $0 - ret $31, ($26), 1 - -$Large: - lda $30, -240($30) - stq $9, 8($30) - stq $10, 16($30) - stq $11, 24($30) - stq $12, 32($30) - stq $13, 40($30) - stq $14, 48($30) - stq $15, 56($30) - - and $18, 7, $20 # count for the first loop, 0-7 - srl $18, 3, $18 # count for unrolled loop - bis $31, $31, $0 - beq $20, $Lunroll - ldq $2, 0($17) # $2 = s1_limb - addq $17, 8, $17 # s1_ptr++ - subq $20, 1, $20 # size-- - mulq $2, $19, $3 # $3 = prod_low - ldq $5, 0($16) # $5 = *res_ptr - umulh $2, $19, $0 # $0 = prod_high - beq $20, $Lend1b # jump if size was == 1 - ldq $2, 0($17) # $2 = s1_limb - addq $17, 8, $17 # s1_ptr++ - subq $20, 1, $20 # size-- - addq $5, $3, $3 - cmpult $3, $5, $4 - stq $3, 0($16) - addq $16, 8, $16 # res_ptr++ - beq $20, $Lend1a # jump if size was == 2 - - .align 3 -$Loop1: mulq $2, $19, $3 # $3 = prod_low - ldq $5, 0($16) # $5 = *res_ptr - addq $4, $0, $0 # cy_limb = cy_limb + 'cy' - subq $20, 1, $20 # size-- - umulh $2, $19, $4 # $4 = cy_limb - ldq $2, 0($17) # $2 = s1_limb - addq $17, 8, $17 # s1_ptr++ - addq $3, $0, $3 # $3 = cy_limb + prod_low - cmpult $3, $0, $0 # $0 = carry from (cy_limb + prod_low) - addq $5, $3, $3 - cmpult $3, $5, $5 - stq $3, 0($16) - addq $16, 8, $16 # res_ptr++ - addq $5, $0, $0 # combine carries - bne $20, $Loop1 - -$Lend1a: - mulq $2, $19, $3 # $3 = prod_low - ldq $5, 0($16) # $5 = *res_ptr - addq $4, $0, $0 # cy_limb = cy_limb + 'cy' - umulh $2, $19, $4 # $4 = cy_limb - addq $3, $0, $3 # $3 = cy_limb + prod_low - cmpult $3, $0, $0 # $0 = carry from (cy_limb + prod_low) - addq $5, $3, $3 - cmpult $3, $5, $5 - stq $3, 0($16) - addq $16, 8, $16 # res_ptr++ - addq $5, $0, $0 # combine carries - addq $4, $0, $0 # cy_limb = prod_high + cy - br $31, $Lunroll -$Lend1b: - addq $5, $3, $3 - cmpult $3, $5, $5 - stq $3, 0($16) - addq $16, 8, $16 # res_ptr++ - addq $0, $5, $0 - -$Lunroll: - lda $17, -16($17) # L1 bookkeeping - lda $16, -16($16) # L1 bookkeeping - bis $0, $31, $12 - - # ____ UNROLLED LOOP SOFTWARE PIPELINE STARTUP ____ - - ldq $2, 16($17) # L1 - ldq $3, 24($17) # L1 - lda $18, -1($18) # L1 bookkeeping - ldq $6, 16($16) # L1 - ldq $7, 24($16) # L1 - ldq $0, 32($17) # L1 - mulq $19, $2, $13 # U1 - ldq $1, 40($17) # L1 - umulh $19, $2, $14 # U1 - mulq $19, $3, $15 # U1 - lda $17, 64($17) # L1 bookkeeping - ldq $4, 32($16) # L1 - ldq $5, 40($16) # L1 - umulh $19, $3, $8 # U1 - ldq $2, -16($17) # L1 - mulq $19, $0, $9 # U1 - ldq $3, -8($17) # L1 - umulh $19, $0, $10 # U1 - addq $6, $13, $6 # L0 lo + acc - mulq $19, $1, $11 # U1 - cmpult $6, $13, $20 # L0 lo add => carry - lda $16, 64($16) # L1 bookkeeping - addq $6, $12, $22 # U0 hi add => answer - cmpult $22, $12, $21 # L0 hi add => carry - addq $14, $20, $14 # U0 hi mul + carry - ldq $6, -16($16) # L1 - addq $7, $15, $23 # L0 lo + acc - addq $14, $21, $14 # U0 hi mul + carry - ldq $7, -8($16) # L1 - umulh $19, $1, $12 # U1 - cmpult $23, $15, $20 # L0 lo add => carry - addq $23, $14, $23 # U0 hi add => answer - ldq $0, 0($17) # L1 - mulq $19, $2, $13 # U1 - cmpult $23, $14, $21 # L0 hi add => carry - addq $8, $20, $8 # U0 hi mul + carry - ldq $1, 8($17) # L1 - umulh $19, $2, $14 # U1 - addq $4, $9, $4 # L0 lo + acc - stq $22, -48($16) # L0 - stq $23, -40($16) # L1 - mulq $19, $3, $15 # U1 - addq $8, $21, $8 # U0 hi mul + carry - cmpult $4, $9, $20 # L0 lo add => carry - addq $4, $8, $22 # U0 hi add => answer - ble $18, $Lend # U1 bookkeeping - - # ____ MAIN UNROLLED LOOP ____ - .align 4 -$Loop: - bis $31, $31, $31 # U1 mt - cmpult $22, $8, $21 # L0 hi add => carry - addq $10, $20, $10 # U0 hi mul + carry - ldq $4, 0($16) # L1 - - bis $31, $31, $31 # U1 mt - addq $5, $11, $23 # L0 lo + acc - addq $10, $21, $10 # L0 hi mul + carry - ldq $5, 8($16) # L1 - - umulh $19, $3, $8 # U1 - cmpult $23, $11, $20 # L0 lo add => carry - addq $23, $10, $23 # U0 hi add => answer - ldq $2, 16($17) # L1 - - mulq $19, $0, $9 # U1 - cmpult $23, $10, $21 # L0 hi add => carry - addq $12, $20, $12 # U0 hi mul + carry - ldq $3, 24($17) # L1 - - umulh $19, $0, $10 # U1 - addq $6, $13, $6 # L0 lo + acc - stq $22, -32($16) # L0 - stq $23, -24($16) # L1 - - bis $31, $31, $31 # L0 st slosh - mulq $19, $1, $11 # U1 - bis $31, $31, $31 # L1 st slosh - addq $12, $21, $12 # U0 hi mul + carry - - cmpult $6, $13, $20 # L0 lo add => carry - bis $31, $31, $31 # U1 mt - lda $18, -1($18) # L1 bookkeeping - addq $6, $12, $22 # U0 hi add => answer - - bis $31, $31, $31 # U1 mt - cmpult $22, $12, $21 # L0 hi add => carry - addq $14, $20, $14 # U0 hi mul + carry - ldq $6, 16($16) # L1 - - bis $31, $31, $31 # U1 mt - addq $7, $15, $23 # L0 lo + acc - addq $14, $21, $14 # U0 hi mul + carry - ldq $7, 24($16) # L1 - - umulh $19, $1, $12 # U1 - cmpult $23, $15, $20 # L0 lo add => carry - addq $23, $14, $23 # U0 hi add => answer - ldq $0, 32($17) # L1 - - mulq $19, $2, $13 # U1 - cmpult $23, $14, $21 # L0 hi add => carry - addq $8, $20, $8 # U0 hi mul + carry - ldq $1, 40($17) # L1 - - umulh $19, $2, $14 # U1 - addq $4, $9, $4 # U0 lo + acc - stq $22, -16($16) # L0 - stq $23, -8($16) # L1 - - bis $31, $31, $31 # L0 st slosh - mulq $19, $3, $15 # U1 - bis $31, $31, $31 # L1 st slosh - addq $8, $21, $8 # L0 hi mul + carry - - cmpult $4, $9, $20 # L0 lo add => carry - bis $31, $31, $31 # U1 mt - lda $17, 64($17) # L1 bookkeeping - addq $4, $8, $22 # U0 hi add => answer - - bis $31, $31, $31 # U1 mt - cmpult $22, $8, $21 # L0 hi add => carry - addq $10, $20, $10 # U0 hi mul + carry - ldq $4, 32($16) # L1 - - bis $31, $31, $31 # U1 mt - addq $5, $11, $23 # L0 lo + acc - addq $10, $21, $10 # L0 hi mul + carry - ldq $5, 40($16) # L1 - - umulh $19, $3, $8 # U1 - cmpult $23, $11, $20 # L0 lo add => carry - addq $23, $10, $23 # U0 hi add => answer - ldq $2, -16($17) # L1 - - mulq $19, $0, $9 # U1 - cmpult $23, $10, $21 # L0 hi add => carry - addq $12, $20, $12 # U0 hi mul + carry - ldq $3, -8($17) # L1 - - umulh $19, $0, $10 # U1 - addq $6, $13, $6 # L0 lo + acc - stq $22, 0($16) # L0 - stq $23, 8($16) # L1 - - bis $31, $31, $31 # L0 st slosh - mulq $19, $1, $11 # U1 - bis $31, $31, $31 # L1 st slosh - addq $12, $21, $12 # U0 hi mul + carry - - cmpult $6, $13, $20 # L0 lo add => carry - bis $31, $31, $31 # U1 mt - lda $16, 64($16) # L1 bookkeeping - addq $6, $12, $22 # U0 hi add => answer - - bis $31, $31, $31 # U1 mt - cmpult $22, $12, $21 # L0 hi add => carry - addq $14, $20, $14 # U0 hi mul + carry - ldq $6, -16($16) # L1 - - bis $31, $31, $31 # U1 mt - addq $7, $15, $23 # L0 lo + acc - addq $14, $21, $14 # U0 hi mul + carry - ldq $7, -8($16) # L1 - - umulh $19, $1, $12 # U1 - cmpult $23, $15, $20 # L0 lo add => carry - addq $23, $14, $23 # U0 hi add => answer - ldq $0, 0($17) # L1 - - mulq $19, $2, $13 # U1 - cmpult $23, $14, $21 # L0 hi add => carry - addq $8, $20, $8 # U0 hi mul + carry - ldq $1, 8($17) # L1 - - umulh $19, $2, $14 # U1 - addq $4, $9, $4 # L0 lo + acc - stq $22, -48($16) # L0 - stq $23, -40($16) # L1 - - bis $31, $31, $31 # L0 st slosh - mulq $19, $3, $15 # U1 - bis $31, $31, $31 # L1 st slosh - addq $8, $21, $8 # U0 hi mul + carry - - cmpult $4, $9, $20 # L0 lo add => carry - addq $4, $8, $22 # U0 hi add => answer - bis $31, $31, $31 # L1 mt - bgt $18, $Loop # U1 bookkeeping - -# ____ UNROLLED LOOP SOFTWARE PIPELINE FINISH ____ -$Lend: - cmpult $22, $8, $21 # L0 hi add => carry - addq $10, $20, $10 # U0 hi mul + carry - ldq $4, 0($16) # L1 - addq $5, $11, $23 # L0 lo + acc - addq $10, $21, $10 # L0 hi mul + carry - ldq $5, 8($16) # L1 - umulh $19, $3, $8 # U1 - cmpult $23, $11, $20 # L0 lo add => carry - addq $23, $10, $23 # U0 hi add => answer - mulq $19, $0, $9 # U1 - cmpult $23, $10, $21 # L0 hi add => carry - addq $12, $20, $12 # U0 hi mul + carry - umulh $19, $0, $10 # U1 - addq $6, $13, $6 # L0 lo + acc - stq $22, -32($16) # L0 - stq $23, -24($16) # L1 - mulq $19, $1, $11 # U1 - addq $12, $21, $12 # U0 hi mul + carry - cmpult $6, $13, $20 # L0 lo add => carry - addq $6, $12, $22 # U0 hi add => answer - cmpult $22, $12, $21 # L0 hi add => carry - addq $14, $20, $14 # U0 hi mul + carry - addq $7, $15, $23 # L0 lo + acc - addq $14, $21, $14 # U0 hi mul + carry - umulh $19, $1, $12 # U1 - cmpult $23, $15, $20 # L0 lo add => carry - addq $23, $14, $23 # U0 hi add => answer - cmpult $23, $14, $21 # L0 hi add => carry - addq $8, $20, $8 # U0 hi mul + carry - addq $4, $9, $4 # U0 lo + acc - stq $22, -16($16) # L0 - stq $23, -8($16) # L1 - bis $31, $31, $31 # L0 st slosh - addq $8, $21, $8 # L0 hi mul + carry - cmpult $4, $9, $20 # L0 lo add => carry - addq $4, $8, $22 # U0 hi add => answer - cmpult $22, $8, $21 # L0 hi add => carry - addq $10, $20, $10 # U0 hi mul + carry - addq $5, $11, $23 # L0 lo + acc - addq $10, $21, $10 # L0 hi mul + carry - cmpult $23, $11, $20 # L0 lo add => carry - addq $23, $10, $23 # U0 hi add => answer - cmpult $23, $10, $21 # L0 hi add => carry - addq $12, $20, $12 # U0 hi mul + carry - stq $22, 0($16) # L0 - stq $23, 8($16) # L1 - addq $12, $21, $0 # U0 hi mul + carry - - ldq $9, 8($30) - ldq $10, 16($30) - ldq $11, 24($30) - ldq $12, 32($30) - ldq $13, 40($30) - ldq $14, 48($30) - ldq $15, 56($30) - lda $30, 240($30) - ret $31, ($26), 1 - - .end __mpn_addmul_1 diff --git a/sysdeps/alpha/alphaev6/fpu/e_sqrt.S b/sysdeps/alpha/alphaev6/fpu/e_sqrt.S deleted file mode 100644 index 18d03ee9c9..0000000000 --- a/sysdeps/alpha/alphaev6/fpu/e_sqrt.S +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - .arch ev6 - .set noreorder - .set noat - -ENTRY(__ieee754_sqrt) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - .align 4 -#ifdef _IEEE_FP_INEXACT - sqrtt/suid $f16, $f0 -#else - sqrtt/sud $f16, $f0 -#endif - ret - nop - nop - -END(__ieee754_sqrt) - -#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18) -strong_alias(__ieee754_sqrt, __sqrt_finite1) -compat_symbol(libm, __sqrt_finite1, __sqrt_finite, GLIBC_2_15) -versioned_symbol(libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_18) -#else -strong_alias(__ieee754_sqrt, __sqrt_finite) -#endif diff --git a/sysdeps/alpha/alphaev6/fpu/e_sqrtf.S b/sysdeps/alpha/alphaev6/fpu/e_sqrtf.S deleted file mode 100644 index c4ef9c32c6..0000000000 --- a/sysdeps/alpha/alphaev6/fpu/e_sqrtf.S +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - .arch ev6 - .set noreorder - .set noat - -ENTRY(__ieee754_sqrtf) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - .align 4 -#ifdef _IEEE_FP_INEXACT - sqrts/suid $f16, $f0 -#else - sqrts/sud $f16, $f0 -#endif - ret - nop - nop - -END(__ieee754_sqrtf) - -#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18) -strong_alias(__ieee754_sqrtf, __sqrtf_finite1) -compat_symbol(libm, __sqrtf_finite1, __sqrtf_finite, GLIBC_2_15) -versioned_symbol(libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_18) -#else -strong_alias(__ieee754_sqrtf, __sqrtf_finite) -#endif diff --git a/sysdeps/alpha/alphaev6/memcpy.S b/sysdeps/alpha/alphaev6/memcpy.S deleted file mode 100644 index 170a23b5da..0000000000 --- a/sysdeps/alpha/alphaev6/memcpy.S +++ /dev/null @@ -1,255 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - EV6 optimized by Rick Gorton . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* - * Much of the information about 21264 scheduling/coding comes from: - * Compiler Writer's Guide for the Alpha 21264 - * abbreviated as 'CWG' in other comments here - * ftp.digital.com/pub/Digital/info/semiconductor/literature/dsc-library.html - * Scheduling notation: - * E - either cluster - * U - upper subcluster; U0 - subcluster U0; U1 - subcluster U1 - * L - lower subcluster; L0 - subcluster L0; L1 - subcluster L1 - * - * Temp usage notes: - * $0 - destination address - * $1,$2, - scratch - */ - -#include - - .arch ev6 - .set noreorder - .set noat - -ENTRY(memcpy) - .prologue 0 - - mov $16, $0 # E : copy dest to return - ble $18, $nomoredata # U : done with the copy? - xor $16, $17, $1 # E : are source and dest alignments the same? - and $1, 7, $1 # E : are they the same mod 8? - - bne $1, $misaligned # U : Nope - gotta do this the slow way - /* source and dest are same mod 8 address */ - and $16, 7, $1 # E : Are both 0mod8? - beq $1, $both_0mod8 # U : Yes - nop # E : - - /* - * source and dest are same misalignment. move a byte at a time - * until a 0mod8 alignment for both is reached. - * At least one byte more to move - */ - -$head_align: - ldbu $1, 0($17) # L : grab a byte - subq $18, 1, $18 # E : count-- - addq $17, 1, $17 # E : src++ - stb $1, 0($16) # L : - addq $16, 1, $16 # E : dest++ - and $16, 7, $1 # E : Are we at 0mod8 yet? - ble $18, $nomoredata # U : done with the copy? - bne $1, $head_align # U : - -$both_0mod8: - cmple $18, 127, $1 # E : Can we unroll the loop? - bne $1, $no_unroll # U : - and $16, 63, $1 # E : get mod64 alignment - beq $1, $do_unroll # U : no single quads to fiddle - -$single_head_quad: - ldq $1, 0($17) # L : get 8 bytes - subq $18, 8, $18 # E : count -= 8 - addq $17, 8, $17 # E : src += 8 - nop # E : - - stq $1, 0($16) # L : store - addq $16, 8, $16 # E : dest += 8 - and $16, 63, $1 # E : get mod64 alignment - bne $1, $single_head_quad # U : still not fully aligned - -$do_unroll: - addq $16, 64, $7 # E : Initial (+1 trip) wh64 address - cmple $18, 127, $1 # E : Can we go through the unrolled loop? - bne $1, $tail_quads # U : Nope - nop # E : - -$unroll_body: - wh64 ($7) # L1 : memory subsystem hint: 64 bytes at - # ($7) are about to be over-written - ldq $6, 0($17) # L0 : bytes 0..7 - nop # E : - nop # E : - - ldq $4, 8($17) # L : bytes 8..15 - ldq $5, 16($17) # L : bytes 16..23 - addq $7, 64, $7 # E : Update next wh64 address - nop # E : - - ldq $3, 24($17) # L : bytes 24..31 - addq $16, 64, $1 # E : fallback value for wh64 - nop # E : - nop # E : - - addq $17, 32, $17 # E : src += 32 bytes - stq $6, 0($16) # L : bytes 0..7 - nop # E : - nop # E : - - stq $4, 8($16) # L : bytes 8..15 - stq $5, 16($16) # L : bytes 16..23 - subq $18, 192, $2 # E : At least two more trips to go? - nop # E : - - stq $3, 24($16) # L : bytes 24..31 - addq $16, 32, $16 # E : dest += 32 bytes - nop # E : - nop # E : - - ldq $6, 0($17) # L : bytes 0..7 - ldq $4, 8($17) # L : bytes 8..15 - cmovlt $2, $1, $7 # E : Latency 2, extra map slot - Use - # fallback wh64 address if < 2 more trips - nop # E : - - ldq $5, 16($17) # L : bytes 16..23 - ldq $3, 24($17) # L : bytes 24..31 - addq $16, 32, $16 # E : dest += 32 - subq $18, 64, $18 # E : count -= 64 - - addq $17, 32, $17 # E : src += 32 - stq $6, -32($16) # L : bytes 0..7 - stq $4, -24($16) # L : bytes 8..15 - cmple $18, 63, $1 # E : At least one more trip? - - stq $5, -16($16) # L : bytes 16..23 - stq $3, -8($16) # L : bytes 24..31 - nop # E : - beq $1, $unroll_body - -$tail_quads: -$no_unroll: - .align 4 - subq $18, 8, $18 # E : At least a quad left? - blt $18, $less_than_8 # U : Nope - nop # E : - nop # E : - -$move_a_quad: - ldq $1, 0($17) # L : fetch 8 - subq $18, 8, $18 # E : count -= 8 - addq $17, 8, $17 # E : src += 8 - nop # E : - - stq $1, 0($16) # L : store 8 - addq $16, 8, $16 # E : dest += 8 - bge $18, $move_a_quad # U : - nop # E : - -$less_than_8: - .align 4 - addq $18, 8, $18 # E : add back for trailing bytes - ble $18, $nomoredata # U : All-done - nop # E : - nop # E : - - /* Trailing bytes */ -$tail_bytes: - subq $18, 1, $18 # E : count-- - ldbu $1, 0($17) # L : fetch a byte - addq $17, 1, $17 # E : src++ - nop # E : - - stb $1, 0($16) # L : store a byte - addq $16, 1, $16 # E : dest++ - bgt $18, $tail_bytes # U : more to be done? - nop # E : - - /* branching to exit takes 3 extra cycles, so replicate exit here */ - ret $31, ($26), 1 # L0 : - nop # E : - nop # E : - nop # E : - -$misaligned: - mov $0, $4 # E : dest temp - and $0, 7, $1 # E : dest alignment mod8 - beq $1, $dest_0mod8 # U : life doesnt totally suck - nop - -$aligndest: - ble $18, $nomoredata # U : - ldbu $1, 0($17) # L : fetch a byte - subq $18, 1, $18 # E : count-- - addq $17, 1, $17 # E : src++ - - stb $1, 0($4) # L : store it - addq $4, 1, $4 # E : dest++ - and $4, 7, $1 # E : dest 0mod8 yet? - bne $1, $aligndest # U : go until we are aligned. - - /* Source has unknown alignment, but dest is known to be 0mod8 */ -$dest_0mod8: - subq $18, 8, $18 # E : At least a quad left? - blt $18, $misalign_tail # U : Nope - ldq_u $3, 0($17) # L : seed (rotating load) of 8 bytes - nop # E : - -$mis_quad: - ldq_u $16, 8($17) # L : Fetch next 8 - extql $3, $17, $3 # U : masking - extqh $16, $17, $1 # U : masking - bis $3, $1, $1 # E : merged bytes to store - - subq $18, 8, $18 # E : count -= 8 - addq $17, 8, $17 # E : src += 8 - stq $1, 0($4) # L : store 8 (aligned) - mov $16, $3 # E : "rotate" source data - - addq $4, 8, $4 # E : dest += 8 - bge $18, $mis_quad # U : More quads to move - nop - nop - -$misalign_tail: - addq $18, 8, $18 # E : account for tail stuff - ble $18, $nomoredata # U : - nop - nop - -$misalign_byte: - ldbu $1, 0($17) # L : fetch 1 - subq $18, 1, $18 # E : count-- - addq $17, 1, $17 # E : src++ - nop # E : - - stb $1, 0($4) # L : store - addq $4, 1, $4 # E : dest++ - bgt $18, $misalign_byte # U : more to go? - nop - - -$nomoredata: - ret $31, ($26), 1 # L0 : - nop # E : - nop # E : - nop # E : - -END(memcpy) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/alpha/alphaev6/memset.S b/sysdeps/alpha/alphaev6/memset.S deleted file mode 100644 index 185821c7eb..0000000000 --- a/sysdeps/alpha/alphaev6/memset.S +++ /dev/null @@ -1,223 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - EV6 optimized by Rick Gorton . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .arch ev6 - .set noat - .set noreorder - -ENTRY(memset) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - /* - * Serious stalling happens. The only way to mitigate this is to - * undertake a major re-write to interleave the constant materialization - * with other parts of the fall-through code. This is important, even - * though it makes maintenance tougher. - * Do this later. - */ - and $17, 255, $1 # E : 00000000000000ch - insbl $17, 1, $2 # U : 000000000000ch00 - mov $16, $0 # E : return value - ble $18, $end # U : zero length requested? - - addq $18, $16, $6 # E : max address to write to - or $1, $2, $17 # E : 000000000000chch - insbl $1, 2, $3 # U : 0000000000ch0000 - insbl $1, 3, $4 # U : 00000000ch000000 - - or $3, $4, $3 # E : 00000000chch0000 - inswl $17, 4, $5 # U : 0000chch00000000 - xor $16, $6, $1 # E : will complete write be within one quadword? - inswl $17, 6, $2 # U : chch000000000000 - - or $17, $3, $17 # E : 00000000chchchch - or $2, $5, $2 # E : chchchch00000000 - bic $1, 7, $1 # E : fit within a single quadword? - and $16, 7, $3 # E : Target addr misalignment - - or $17, $2, $17 # E : chchchchchchchch - beq $1, $within_quad # U : - nop # E : - beq $3, $aligned # U : target is 0mod8 - - /* - * Target address is misaligned, and won't fit within a quadword. - */ - ldq_u $4, 0($16) # L : Fetch first partial - mov $16, $5 # E : Save the address - insql $17, $16, $2 # U : Insert new bytes - subq $3, 8, $3 # E : Invert (for addressing uses) - - addq $18, $3, $18 # E : $18 is new count ($3 is negative) - mskql $4, $16, $4 # U : clear relevant parts of the quad - subq $16, $3, $16 # E : $16 is new aligned destination - or $2, $4, $1 # E : Final bytes - - nop - stq_u $1,0($5) # L : Store result - nop - nop - - .align 4 -$aligned: - /* - * We are now guaranteed to be quad aligned, with at least - * one partial quad to write. - */ - - sra $18, 3, $3 # U : Number of remaining quads to write - and $18, 7, $18 # E : Number of trailing bytes to write - mov $16, $5 # E : Save dest address - beq $3, $no_quad # U : tail stuff only - - /* - * It's worth the effort to unroll this and use wh64 if possible. - * At this point, entry values are: - * $16 Current destination address - * $5 A copy of $16 - * $6 The max quadword address to write to - * $18 Number trailer bytes - * $3 Number quads to write - */ - - and $16, 0x3f, $2 # E : Forward work (only useful for unrolled loop) - subq $3, 16, $4 # E : Only try to unroll if > 128 bytes - subq $2, 0x40, $1 # E : bias counter (aligning stuff 0mod64) - blt $4, $loop # U : - - /* - * We know we've got at least 16 quads, minimum of one trip - * through unrolled loop. Do a quad at a time to get us 0mod64 - * aligned. - */ - - nop # E : - nop # E : - nop # E : - beq $1, $bigalign # U : - -$alignmod64: - stq $17, 0($5) # L : - subq $3, 1, $3 # E : For consistency later - addq $1, 8, $1 # E : Increment towards zero for alignment - addq $5, 8, $4 # E : Initial wh64 address (filler instruction) - - nop - nop - addq $5, 8, $5 # E : Inc address - blt $1, $alignmod64 # U : - -$bigalign: - /* - * $3 - number quads left to go - * $5 - target address (aligned 0mod64) - * $17 - mask of stuff to store - * Scratch registers available: $7, $2, $4, $1 - * We know that we'll be taking a minimum of one trip through. - * CWG Section 3.7.6: do not expect a sustained store rate of > 1/cycle - * Assumes the wh64 needs to be for 2 trips through the loop in the future. - * The wh64 is issued on for the starting destination address for trip +2 - * through the loop, and if there are less than two trips left, the target - * address will be for the current trip. - */ - -$do_wh64: - wh64 ($4) # L1 : memory subsystem write hint - subq $3, 24, $2 # E : For determining future wh64 addresses - stq $17, 0($5) # L : - nop # E : - - addq $5, 128, $4 # E : speculative target of next wh64 - stq $17, 8($5) # L : - stq $17, 16($5) # L : - addq $5, 64, $7 # E : Fallback address for wh64 (== next trip addr) - - stq $17, 24($5) # L : - stq $17, 32($5) # L : - cmovlt $2, $7, $4 # E : Latency 2, extra mapping cycle - nop - - stq $17, 40($5) # L : - stq $17, 48($5) # L : - subq $3, 16, $2 # E : Repeat the loop at least once more? - nop - - stq $17, 56($5) # L : - addq $5, 64, $5 # E : - subq $3, 8, $3 # E : - bge $2, $do_wh64 # U : - - nop - nop - nop - beq $3, $no_quad # U : Might have finished already - - .align 4 - /* - * Simple loop for trailing quadwords, or for small amounts - * of data (where we can't use an unrolled loop and wh64) - */ -$loop: - stq $17, 0($5) # L : - subq $3, 1, $3 # E : Decrement number quads left - addq $5, 8, $5 # E : Inc address - bne $3, $loop # U : more? - -$no_quad: - /* - * Write 0..7 trailing bytes. - */ - nop # E : - beq $18, $end # U : All done? - ldq $7, 0($5) # L : - mskqh $7, $6, $2 # U : Mask final quad - - insqh $17, $6, $4 # U : New bits - or $2, $4, $1 # E : Put it all together - stq $1, 0($5) # L : And back to memory - ret $31,($26),1 # L0 : - -$within_quad: - ldq_u $1, 0($16) # L : - insql $17, $16, $2 # U : New bits - mskql $1, $16, $4 # U : Clear old - or $2, $4, $2 # E : New result - - mskql $2, $6, $4 # U : - mskqh $1, $6, $2 # U : - or $2, $4, $1 # E : - stq_u $1, 0($16) # L : - -$end: - nop - nop - nop - ret $31,($26),1 # L0 : - - END(memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/alpha/alphaev6/stxcpy.S b/sysdeps/alpha/alphaev6/stxcpy.S deleted file mode 100644 index 84f19581d1..0000000000 --- a/sysdeps/alpha/alphaev6/stxcpy.S +++ /dev/null @@ -1,314 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - EV6 optimized by Rick Gorton . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Copy a null-terminated string from SRC to DST. - - This is an internal routine used by strcpy, stpcpy, and strcat. - As such, it uses special linkage conventions to make implementation - of these public functions more efficient. - - On input: - t9 = return address - a0 = DST - a1 = SRC - - On output: - t8 = bitmask (with one bit set) indicating the last byte written - a0 = unaligned address of the last *word* written - - Furthermore, v0, a3-a5, t11, and t12 are untouched. -*/ - - -#include - - .arch ev6 - .set noat - .set noreorder - - .text - .type __stxcpy, @function - .globl __stxcpy - .usepv __stxcpy, no - - cfi_startproc - cfi_return_column (t9) - - /* On entry to this basic block: - t0 == the first destination word for masking back in - t1 == the first source word. */ - .align 4 -stxcpy_aligned: - /* Create the 1st output word and detect 0's in the 1st input word. */ - lda t2, -1 # E : build a mask against false zero - mskqh t2, a1, t2 # U : detection in the src word (stall) - mskqh t1, a1, t3 # U : - ornot t1, t2, t2 # E : (stall) - - mskql t0, a1, t0 # U : assemble the first output word - cmpbge zero, t2, t10 # E : bits set iff null found - or t0, t3, t1 # E : (stall) - bne t10, $a_eos # U : (stall) - - /* On entry to this basic block: - t0 == the first destination word for masking back in - t1 == a source word not containing a null. */ - /* Nops here to separate store quads from load quads */ - -$a_loop: - stq_u t1, 0(a0) # L : - addq a0, 8, a0 # E : - nop - nop - - ldq_u t1, 0(a1) # L : Latency=3 - addq a1, 8, a1 # E : - cmpbge zero, t1, t10 # E : (3 cycle stall) - beq t10, $a_loop # U : (stall for t10) - - /* Take care of the final (partial) word store. - On entry to this basic block we have: - t1 == the source word containing the null - t10 == the cmpbge mask that found it. */ -$a_eos: - negq t10, t6 # E : find low bit set - and t10, t6, t8 # E : (stall) - /* For the sake of the cache, don't read a destination word - if we're not going to need it. */ - and t8, 0x80, t6 # E : (stall) - bne t6, 1f # U : (stall) - - /* We're doing a partial word store and so need to combine - our source and original destination words. */ - ldq_u t0, 0(a0) # L : Latency=3 - subq t8, 1, t6 # E : - zapnot t1, t6, t1 # U : clear src bytes >= null (stall) - or t8, t6, t10 # E : (stall) - - zap t0, t10, t0 # E : clear dst bytes <= null - or t0, t1, t1 # E : (stall) - nop - nop - -1: stq_u t1, 0(a0) # L : - ret (t9) # L0 : Latency=3 - nop - nop - - .align 4 -__stxcpy: - /* Are source and destination co-aligned? */ - xor a0, a1, t0 # E : - unop # E : - and t0, 7, t0 # E : (stall) - bne t0, $unaligned # U : (stall) - - /* We are co-aligned; take care of a partial first word. */ - ldq_u t1, 0(a1) # L : load first src word - and a0, 7, t0 # E : take care not to load a word ... - addq a1, 8, a1 # E : - beq t0, stxcpy_aligned # U : ... if we wont need it (stall) - - ldq_u t0, 0(a0) # L : - br stxcpy_aligned # L0 : Latency=3 - nop - nop - - -/* The source and destination are not co-aligned. Align the destination - and cope. We have to be very careful about not reading too much and - causing a SEGV. */ - - .align 4 -$u_head: - /* We know just enough now to be able to assemble the first - full source word. We can still find a zero at the end of it - that prevents us from outputting the whole thing. - - On entry to this basic block: - t0 == the first dest word, for masking back in, if needed else 0 - t1 == the low bits of the first source word - t6 == bytemask that is -1 in dest word bytes */ - - ldq_u t2, 8(a1) # L : - addq a1, 8, a1 # E : - extql t1, a1, t1 # U : (stall on a1) - extqh t2, a1, t4 # U : (stall on a1) - - mskql t0, a0, t0 # U : - or t1, t4, t1 # E : - mskqh t1, a0, t1 # U : (stall on t1) - or t0, t1, t1 # E : (stall on t1) - - or t1, t6, t6 # E : - cmpbge zero, t6, t10 # E : (stall) - lda t6, -1 # E : for masking just below - bne t10, $u_final # U : (stall) - - mskql t6, a1, t6 # U : mask out the bits we have - or t6, t2, t2 # E : already extracted before (stall) - cmpbge zero, t2, t10 # E : testing eos (stall) - bne t10, $u_late_head_exit # U : (stall) - - /* Finally, we've got all the stupid leading edge cases taken care - of and we can set up to enter the main loop. */ - - stq_u t1, 0(a0) # L : store first output word - addq a0, 8, a0 # E : - extql t2, a1, t0 # U : position ho-bits of lo word - ldq_u t2, 8(a1) # U : read next high-order source word - - addq a1, 8, a1 # E : - cmpbge zero, t2, t10 # E : (stall for t2) - nop # E : - bne t10, $u_eos # U : (stall) - - /* Unaligned copy main loop. In order to avoid reading too much, - the loop is structured to detect zeros in aligned source words. - This has, unfortunately, effectively pulled half of a loop - iteration out into the head and half into the tail, but it does - prevent nastiness from accumulating in the very thing we want - to run as fast as possible. - - On entry to this basic block: - t0 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word - - We further know that t2 does not contain a null terminator. */ - - .align 3 -$u_loop: - extqh t2, a1, t1 # U : extract high bits for current word - addq a1, 8, a1 # E : (stall) - extql t2, a1, t3 # U : extract low bits for next time (stall) - addq a0, 8, a0 # E : - - or t0, t1, t1 # E : current dst word now complete - ldq_u t2, 0(a1) # L : Latency=3 load high word for next time - stq_u t1, -8(a0) # L : save the current word (stall) - mov t3, t0 # E : - - cmpbge zero, t2, t10 # E : test new word for eos - beq t10, $u_loop # U : (stall) - nop - nop - - /* We've found a zero somewhere in the source word we just read. - If it resides in the lower half, we have one (probably partial) - word to write out, and if it resides in the upper half, we - have one full and one partial word left to write out. - - On entry to this basic block: - t0 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word. */ -$u_eos: - extqh t2, a1, t1 # U : - or t0, t1, t1 # E : first (partial) source word complete (stall) - cmpbge zero, t1, t10 # E : is the null in this first bit? (stall) - bne t10, $u_final # U : (stall) - -$u_late_head_exit: - stq_u t1, 0(a0) # L : the null was in the high-order bits - addq a0, 8, a0 # E : - extql t2, a1, t1 # U : - cmpbge zero, t1, t10 # E : (stall) - - /* Take care of a final (probably partial) result word. - On entry to this basic block: - t1 == assembled source word - t10 == cmpbge mask that found the null. */ -$u_final: - negq t10, t6 # E : isolate low bit set - and t6, t10, t8 # E : (stall) - and t8, 0x80, t6 # E : avoid dest word load if we can (stall) - bne t6, 1f # U : (stall) - - ldq_u t0, 0(a0) # E : - subq t8, 1, t6 # E : - or t6, t8, t10 # E : (stall) - zapnot t1, t6, t1 # U : kill source bytes >= null (stall) - - zap t0, t10, t0 # U : kill dest bytes <= null (2 cycle data stall) - or t0, t1, t1 # E : (stall) - nop - nop - -1: stq_u t1, 0(a0) # L : - ret (t9) # L0 : Latency=3 - nop - nop - - /* Unaligned copy entry point. */ - .align 4 -$unaligned: - - ldq_u t1, 0(a1) # L : load first source word - and a0, 7, t4 # E : find dest misalignment - and a1, 7, t5 # E : find src misalignment - /* Conditionally load the first destination word and a bytemask - with 0xff indicating that the destination byte is sacrosanct. */ - mov zero, t0 # E : - - mov zero, t6 # E : - beq t4, 1f # U : - ldq_u t0, 0(a0) # L : - lda t6, -1 # E : - - mskql t6, a0, t6 # U : - nop - nop - nop -1: - subq a1, t4, a1 # E : sub dest misalignment from src addr - /* If source misalignment is larger than dest misalignment, we need - extra startup checks to avoid SEGV. */ - cmplt t4, t5, t8 # E : - beq t8, $u_head # U : - lda t2, -1 # E : mask out leading garbage in source - - mskqh t2, t5, t2 # U : - ornot t1, t2, t3 # E : (stall) - cmpbge zero, t3, t10 # E : is there a zero? (stall) - beq t10, $u_head # U : (stall) - - /* At this point we've found a zero in the first partial word of - the source. We need to isolate the valid source data and mask - it into the original destination data. (Incidentally, we know - that we'll need at least one byte of that original dest word.) */ - - ldq_u t0, 0(a0) # L : - negq t10, t6 # E : build bitmask of bytes <= zero - and t6, t10, t8 # E : (stall) - and a1, 7, t5 # E : - - subq t8, 1, t6 # E : - or t6, t8, t10 # E : (stall) - srl t8, t5, t8 # U : adjust final null return value - zapnot t2, t10, t2 # U : prepare source word; mirror changes (stall) - - and t1, t2, t1 # E : to source validity mask - extql t2, a1, t2 # U : - extql t1, a1, t1 # U : (stall) - andnot t0, t2, t0 # .. e1 : zero place for source to reside (stall) - - or t0, t1, t1 # e1 : and put it there - stq_u t1, 0(a0) # .. e0 : (stall) - ret (t9) # e1 : - - cfi_endproc diff --git a/sysdeps/alpha/alphaev6/stxncpy.S b/sysdeps/alpha/alphaev6/stxncpy.S deleted file mode 100644 index ad094cc1df..0000000000 --- a/sysdeps/alpha/alphaev6/stxncpy.S +++ /dev/null @@ -1,392 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - EV6 optimized by Rick Gorton . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Copy no more than COUNT bytes of the null-terminated string from - SRC to DST. - - This is an internal routine used by strncpy, stpncpy, and strncat. - As such, it uses special linkage conventions to make implementation - of these public functions more efficient. - - On input: - t9 = return address - a0 = DST - a1 = SRC - a2 = COUNT - - Furthermore, COUNT may not be zero. - - On output: - t0 = last word written - t8 = bitmask (with one bit set) indicating the last byte written - t10 = bitmask (with one bit set) indicating the byte position of - the end of the range specified by COUNT - a0 = unaligned address of the last *word* written - a2 = the number of full words left in COUNT - - Furthermore, v0, a3-a5, t11, and t12 are untouched. -*/ - -#include - - .arch ev6 - .set noat - .set noreorder - - .text - .type __stxncpy, @function - .globl __stxncpy - .usepv __stxncpy, no - - cfi_startproc - cfi_return_column (t9) - - /* On entry to this basic block: - t0 == the first destination word for masking back in - t1 == the first source word. */ - .align 4 -stxncpy_aligned: - /* Create the 1st output word and detect 0's in the 1st input word. */ - lda t2, -1 # E : build a mask against false zero - mskqh t2, a1, t2 # U : detection in the src word (stall) - mskqh t1, a1, t3 # U : - ornot t1, t2, t2 # E : (stall) - - mskql t0, a1, t0 # U : assemble the first output word - cmpbge zero, t2, t7 # E : bits set iff null found - or t0, t3, t0 # E : (stall) - beq a2, $a_eoc # U : - - bne t7, $a_eos # U : - nop - nop - nop - - /* On entry to this basic block: - t0 == a source word not containing a null. */ - - /* - * nops here to: - * separate store quads from load quads - * limit of 1 bcond/quad to permit training - */ -$a_loop: - stq_u t0, 0(a0) # L : - addq a0, 8, a0 # E : - subq a2, 1, a2 # E : - nop - - ldq_u t0, 0(a1) # L : - addq a1, 8, a1 # E : - cmpbge zero, t0, t7 # E : - beq a2, $a_eoc # U : - - beq t7, $a_loop # U : - nop - nop - nop - - /* Take care of the final (partial) word store. At this point - the end-of-count bit is set in t7 iff it applies. - - On entry to this basic block we have: - t0 == the source word containing the null - t7 == the cmpbge mask that found it. */ -$a_eos: - negq t7, t8 # E : find low bit set - and t7, t8, t8 # E : (stall) - /* For the sake of the cache, don't read a destination word - if we're not going to need it. */ - and t8, 0x80, t6 # E : (stall) - bne t6, 1f # U : (stall) - - /* We're doing a partial word store and so need to combine - our source and original destination words. */ - ldq_u t1, 0(a0) # L : - subq t8, 1, t6 # E : - or t8, t6, t7 # E : (stall) - zapnot t0, t7, t0 # U : clear src bytes > null (stall) - - zap t1, t7, t1 # .. e1 : clear dst bytes <= null - or t0, t1, t0 # e1 : (stall) - nop - nop - -1: stq_u t0, 0(a0) # L : - ret (t9) # L0 : Latency=3 - nop - nop - - /* Add the end-of-count bit to the eos detection bitmask. */ -$a_eoc: - or t10, t7, t7 # E : - br $a_eos # L0 : Latency=3 - nop - nop - - .align 4 -__stxncpy: - /* Are source and destination co-aligned? */ - lda t2, -1 # E : - xor a0, a1, t1 # E : - and a0, 7, t0 # E : find dest misalignment - nop # E : - - srl t2, 1, t2 # U : - and t1, 7, t1 # E : - cmovlt a2, t2, a2 # E : bound count to LONG_MAX (stall) - nop # E : - - addq a2, t0, a2 # E : bias count by dest misalignment - subq a2, 1, a2 # E : (stall) - and a2, 7, t2 # E : (stall) - lda t10, 1 # E : - - srl a2, 3, a2 # U : a2 = loop counter = (count - 1)/8 - sll t10, t2, t10 # U : t10 = bitmask of last count byte - nop # E : - bne t1, $unaligned # U : (stall) - - /* We are co-aligned; take care of a partial first word. */ - ldq_u t1, 0(a1) # L : load first src word - addq a1, 8, a1 # E : - beq t0, stxncpy_aligned # U : avoid loading dest word if not needed - ldq_u t0, 0(a0) # L : - - br stxncpy_aligned # U : - nop - nop - nop - - - -/* The source and destination are not co-aligned. Align the destination - and cope. We have to be very careful about not reading too much and - causing a SEGV. */ - - .align 4 -$u_head: - /* We know just enough now to be able to assemble the first - full source word. We can still find a zero at the end of it - that prevents us from outputting the whole thing. - - On entry to this basic block: - t0 == the first dest word, unmasked - t1 == the shifted low bits of the first source word - t6 == bytemask that is -1 in dest word bytes */ - - ldq_u t2, 8(a1) # L : Latency=3 load second src word - addq a1, 8, a1 # E : - mskql t0, a0, t0 # U : mask trailing garbage in dst - extqh t2, a1, t4 # U : (3 cycle stall on t2) - - or t1, t4, t1 # E : first aligned src word complete (stall) - mskqh t1, a0, t1 # U : mask leading garbage in src (stall) - or t0, t1, t0 # E : first output word complete (stall) - or t0, t6, t6 # E : mask original data for zero test (stall) - - cmpbge zero, t6, t7 # E : - beq a2, $u_eocfin # U : - lda t6, -1 # E : - nop - - bne t7, $u_final # U : - mskql t6, a1, t6 # U : mask out bits already seen - stq_u t0, 0(a0) # L : store first output word - or t6, t2, t2 # E : - - cmpbge zero, t2, t7 # E : find nulls in second partial - addq a0, 8, a0 # E : - subq a2, 1, a2 # E : - bne t7, $u_late_head_exit # U : - - /* Finally, we've got all the stupid leading edge cases taken care - of and we can set up to enter the main loop. */ - extql t2, a1, t1 # U : position hi-bits of lo word - beq a2, $u_eoc # U : - ldq_u t2, 8(a1) # L : read next high-order source word - addq a1, 8, a1 # E : - - extqh t2, a1, t0 # U : position lo-bits of hi word (stall) - cmpbge zero, t2, t7 # E : - nop - bne t7, $u_eos # U : - - /* Unaligned copy main loop. In order to avoid reading too much, - the loop is structured to detect zeros in aligned source words. - This has, unfortunately, effectively pulled half of a loop - iteration out into the head and half into the tail, but it does - prevent nastiness from accumulating in the very thing we want - to run as fast as possible. - - On entry to this basic block: - t0 == the shifted low-order bits from the current source word - t1 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word - - We further know that t2 does not contain a null terminator. */ - - .align 4 -$u_loop: - or t0, t1, t0 # E : current dst word now complete - subq a2, 1, a2 # E : decrement word count - extql t2, a1, t1 # U : extract high bits for next time - addq a0, 8, a0 # E : - - stq_u t0, -8(a0) # L : save the current word - beq a2, $u_eoc # U : - ldq_u t2, 8(a1) # L : Latency=3 load high word for next time - addq a1, 8, a1 # E : - - extqh t2, a1, t0 # U : extract low bits (2 cycle stall) - cmpbge zero, t2, t7 # E : test new word for eos - nop - beq t7, $u_loop # U : - - /* We've found a zero somewhere in the source word we just read. - If it resides in the lower half, we have one (probably partial) - word to write out, and if it resides in the upper half, we - have one full and one partial word left to write out. - - On entry to this basic block: - t0 == the shifted low-order bits from the current source word - t1 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word. */ -$u_eos: - or t0, t1, t0 # E : first (partial) source word complete - nop - cmpbge zero, t0, t7 # E : is the null in this first bit? (stall) - bne t7, $u_final # U : (stall) - - stq_u t0, 0(a0) # L : the null was in the high-order bits - addq a0, 8, a0 # E : - subq a2, 1, a2 # E : - nop - -$u_late_head_exit: - extql t2, a1, t0 # U : - cmpbge zero, t0, t7 # E : - or t7, t10, t6 # E : (stall) - cmoveq a2, t6, t7 # E : Latency=2, extra map slot (stall) - - /* Take care of a final (probably partial) result word. - On entry to this basic block: - t0 == assembled source word - t7 == cmpbge mask that found the null. */ -$u_final: - negq t7, t6 # E : isolate low bit set - and t6, t7, t8 # E : (stall) - and t8, 0x80, t6 # E : avoid dest word load if we can (stall) - bne t6, 1f # U : (stall) - - ldq_u t1, 0(a0) # L : - subq t8, 1, t6 # E : - or t6, t8, t7 # E : (stall) - zapnot t0, t7, t0 # U : kill source bytes > null - - zap t1, t7, t1 # U : kill dest bytes <= null - or t0, t1, t0 # E : (stall) - nop - nop - -1: stq_u t0, 0(a0) # L : - ret (t9) # L0 : Latency=3 - - /* Got to end-of-count before end of string. - On entry to this basic block: - t1 == the shifted high-order bits from the previous source word */ -$u_eoc: - and a1, 7, t6 # E : - sll t10, t6, t6 # U : (stall) - and t6, 0xff, t6 # E : (stall) - bne t6, 1f # U : (stall) - - ldq_u t2, 8(a1) # L : load final src word - nop - extqh t2, a1, t0 # U : extract low bits for last word (stall) - or t1, t0, t1 # E : (stall) - -1: cmpbge zero, t1, t7 # E : - mov t1, t0 - -$u_eocfin: # end-of-count, final word - or t10, t7, t7 # E : - br $u_final # L0 : Latency=3 - - /* Unaligned copy entry point. */ - .align 4 -$unaligned: - - ldq_u t1, 0(a1) # L : load first source word - and a0, 7, t4 # E : find dest misalignment - and a1, 7, t5 # E : find src misalignment - /* Conditionally load the first destination word and a bytemask - with 0xff indicating that the destination byte is sacrosanct. */ - mov zero, t0 # E : - - mov zero, t6 # E : - beq t4, 1f # U : - ldq_u t0, 0(a0) # L : - lda t6, -1 # E : - - mskql t6, a0, t6 # U : - nop - nop -1: subq a1, t4, a1 # E : sub dest misalignment from src addr - - /* If source misalignment is larger than dest misalignment, we need - extra startup checks to avoid SEGV. */ - - cmplt t4, t5, t8 # E : - extql t1, a1, t1 # U : shift src into place - lda t2, -1 # E : for creating masks later - beq t8, $u_head # U : (stall) - - mskqh t2, t5, t2 # U : begin src byte validity mask - cmpbge zero, t1, t7 # E : is there a zero? - extql t2, a1, t2 # U : - or t7, t10, t5 # E : test for end-of-count too - - cmpbge zero, t2, t3 # E : - cmoveq a2, t5, t7 # E : Latency=2, extra map slot - nop # E : keep with cmoveq - andnot t7, t3, t7 # E : (stall) - - beq t7, $u_head # U : - /* At this point we've found a zero in the first partial word of - the source. We need to isolate the valid source data and mask - it into the original destination data. (Incidentally, we know - that we'll need at least one byte of that original dest word.) */ - ldq_u t0, 0(a0) # L : - negq t7, t6 # E : build bitmask of bytes <= zero - mskqh t1, t4, t1 # U : - - and t6, t7, t8 # E : - subq t8, 1, t6 # E : (stall) - or t6, t8, t7 # E : (stall) - zapnot t2, t7, t2 # U : prepare source word; mirror changes (stall) - - zapnot t1, t7, t1 # U : to source validity mask - andnot t0, t2, t0 # E : zero place for source to reside - or t0, t1, t0 # E : and put it there (stall both t0, t1) - stq_u t0, 0(a0) # L : (stall) - - ret (t9) # L0 : Latency=3 - - cfi_endproc diff --git a/sysdeps/alpha/alphaev67/Implies b/sysdeps/alpha/alphaev67/Implies deleted file mode 100644 index 49d19c4ad8..0000000000 --- a/sysdeps/alpha/alphaev67/Implies +++ /dev/null @@ -1 +0,0 @@ -alpha/alphaev6 diff --git a/sysdeps/alpha/alphaev67/ffs.S b/sysdeps/alpha/alphaev67/ffs.S deleted file mode 100644 index 6715ae9234..0000000000 --- a/sysdeps/alpha/alphaev67/ffs.S +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Finds the first bit set in an integer. */ - -#include - - .arch ev6 - .set noreorder - .set noat - - -ENTRY(__ffs) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - zap $16, 0xF0, $16 - cttz $16, $0 - addq $0, 1, $0 - cmoveq $16, 0, $0 - - nop - nop - nop - ret - -END(__ffs) - -weak_alias (__ffs, ffs) -libc_hidden_def (__ffs) -libc_hidden_builtin_def (ffs) diff --git a/sysdeps/alpha/alphaev67/ffsll.S b/sysdeps/alpha/alphaev67/ffsll.S deleted file mode 100644 index b469bba063..0000000000 --- a/sysdeps/alpha/alphaev67/ffsll.S +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Finds the first bit set in a long. */ - -#include - - .arch ev6 - .set noreorder - .set noat - -ENTRY(ffsl) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - cttz $16, $0 - addq $0, 1, $0 - cmoveq $16, 0, $0 - ret - -END(ffsl) - -weak_extern (ffsl) -weak_alias (ffsl, ffsll) diff --git a/sysdeps/alpha/alphaev67/fpu/Implies b/sysdeps/alpha/alphaev67/fpu/Implies deleted file mode 100644 index 9e3f12d0ac..0000000000 --- a/sysdeps/alpha/alphaev67/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -alpha/alphaev6/fpu diff --git a/sysdeps/alpha/alphaev67/rawmemchr.S b/sysdeps/alpha/alphaev67/rawmemchr.S deleted file mode 100644 index cddfe2a9f4..0000000000 --- a/sysdeps/alpha/alphaev67/rawmemchr.S +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Return pointer to first occurrence of CH in STR. */ - -#include - - .arch ev6 - .set noreorder - .set noat - -ENTRY(__rawmemchr) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - ldq_u t0, 0(a0) # L : load first quadword Latency=3 - and a1, 0xff, t3 # E : 00000000000000ch - insbl a1, 1, t5 # U : 000000000000ch00 - insbl a1, 7, a2 # U : ch00000000000000 - - insbl t3, 6, a3 # U : 00ch000000000000 - or t5, t3, a1 # E : 000000000000chch - andnot a0, 7, v0 # E : align our loop pointer - lda t4, -1 # E : build garbage mask - - mskqh t4, a0, t4 # U : only want relevant part of first quad - or a2, a3, a2 # E : chch000000000000 - inswl a1, 2, t5 # E : 00000000chch0000 - inswl a1, 4, a3 # E : 0000chch00000000 - - or a1, a2, a1 # E : chch00000000chch - or a3, t5, t5 # E : 0000chchchch0000 - cmpbge zero, t4, t4 # E : bits set iff byte is garbage - nop # E : - - /* This quad is _very_ serialized. Lots of stalling happens */ - or t5, a1, a1 # E : chchchchchchchch - xor t0, a1, t1 # E : make bytes == c zero - cmpbge zero, t1, t0 # E : bits set iff byte == c - andnot t0, t4, t0 # E : clear garbage bits - - cttz t0, a2 # U0 : speculative (in case we get a match) - nop # E : - nop # E : - bne t0, $found # U : - - /* - * Yuk. This loop is going to stall like crazy waiting for the - * data to be loaded. Not much can be done about it unless it's - * unrolled multiple times, which is generally unsafe. - */ -$loop: - ldq t0, 8(v0) # L : Latency=3 - addq v0, 8, v0 # E : - xor t0, a1, t1 # E : - cmpbge zero, t1, t0 # E : bits set iff byte == c - - cttz t0, a2 # U0 : speculative (in case we get a match) - nop # E : - nop # E : - beq t0, $loop # U : - -$found: - negq t0, t1 # E : clear all but least set bit - and t0, t1, t0 # E : - addq v0, a2, v0 # E : Add in the bit number from above - ret # L0 : - - END(__rawmemchr) - -libc_hidden_def (__rawmemchr) -weak_alias (__rawmemchr, rawmemchr) diff --git a/sysdeps/alpha/alphaev67/stpcpy.S b/sysdeps/alpha/alphaev67/stpcpy.S deleted file mode 100644 index 1f277779e0..0000000000 --- a/sysdeps/alpha/alphaev67/stpcpy.S +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Copy SRC to DEST returning the address of the terminating 0 in DEST. */ - -#include - - .arch ev6 - .set noreorder - .set noat - .text - -ENTRY(__stpcpy) - ldgp gp, 0(pv) -#ifdef PROF - lda AT, _mcount - jsr AT, (AT), _mcount -#endif - .prologue 1 - - .align 4 - mov a0, v0 - nop - jsr t9, __stxcpy - - # t8 = bitmask (with one bit set) indicating the last byte written - # a0 = unaligned address of the last *word* written - - cttz t8, t8 - andnot a0, 7, a0 - addq a0, t8, v0 - ret - - END(__stpcpy) - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/alpha/alphaev67/stpncpy.S b/sysdeps/alpha/alphaev67/stpncpy.S deleted file mode 100644 index 1efc86cdb2..0000000000 --- a/sysdeps/alpha/alphaev67/stpncpy.S +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@redhat.com) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Copy no more than N bytes from SRC to DEST, returning the address of - the terminating '\0' in DEST. */ - -#include - - .arch ev6 - .set noat - .set noreorder - .text - -ENTRY(__stpncpy) - ldgp gp, 0(pv) -#ifdef PROF - lda AT, _mcount - jsr AT, (AT), _mcount -#endif - .prologue 1 - - mov a0, v0 - beq a2, $zerocount - - .align 4 - nop - nop - jsr t9, __stxncpy # do the work of the copy - - cttz t8, t4 - zapnot t0, t8, t5 - andnot a0, 7, a0 - bne a2, $multiword # do we have full words left? - - subq t8, 1, t2 - subq t10, 1, t3 - cmpult zero, t5, t5 - addq a0, t4, v0 - - or t2, t8, t2 - or t3, t10, t3 - addq v0, t5, v0 - andnot t3, t2, t3 - - zap t0, t3, t0 - nop - stq t0, 0(a0) - ret - -$multiword: - subq t8, 1, t7 # clear the final bits in the prev word - cmpult zero, t5, t5 - or t7, t8, t7 - zapnot t0, t7, t0 - - subq a2, 1, a2 - stq t0, 0(a0) - addq a0, 8, a1 - beq a2, 1f # loop over full words remaining - - nop - nop - nop - blbc a2, 0f - - stq zero, 0(a1) - subq a2, 1, a2 - addq a1, 8, a1 - beq a2, 1f - -0: stq zero, 0(a1) - subq a2, 2, a2 - nop - nop - - stq zero, 8(a1) - addq a1, 16, a1 - nop - bne a2, 0b - -1: ldq t0, 0(a1) # clear the leading bits in the final word - subq t10, 1, t7 - addq a0, t4, v0 - nop - - or t7, t10, t7 - addq v0, t5, v0 - zap t0, t7, t0 - stq t0, 0(a1) - -$zerocount: - nop - nop - nop - ret - - END(__stpncpy) - -libc_hidden_def (__stpncpy) -weak_alias (__stpncpy, stpncpy) diff --git a/sysdeps/alpha/alphaev67/strcat.S b/sysdeps/alpha/alphaev67/strcat.S deleted file mode 100644 index 1d70061479..0000000000 --- a/sysdeps/alpha/alphaev67/strcat.S +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson , 1996. - EV67 optimized by Rick Gorton . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Append a null-terminated string from SRC to DST. */ - -#include - - .arch ev6 - .set noreorder - .text - -ENTRY(strcat) - ldgp gp, 0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - mov $16, $0 # E : set up return value - /* Find the end of the string. */ - ldq_u $1, 0($16) # L : load first quadword (a0 may be misaligned) - lda $2, -1 # E : - insqh $2, $16, $2 # U : - - andnot $16, 7, $16 # E : - or $2, $1, $1 # E : - cmpbge $31, $1, $2 # E : bits set iff byte == 0 - bne $2, $found # U : - -$loop: ldq $1, 8($16) # L : - addq $16, 8, $16 # E : - cmpbge $31, $1, $2 # E : - beq $2, $loop # U : - -$found: cttz $2, $3 # U0 : - addq $16, $3, $16 # E : - /* Now do the append. */ - mov $26, $23 # E : - jmp $31, __stxcpy # L0 : - - END(strcat) -libc_hidden_builtin_def (strcat) diff --git a/sysdeps/alpha/alphaev67/strchr.S b/sysdeps/alpha/alphaev67/strchr.S deleted file mode 100644 index ac1886eb55..0000000000 --- a/sysdeps/alpha/alphaev67/strchr.S +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson , 1996. - EV67 optimized by Rick Gorton . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Return the address of a given character within a null-terminated - string, or null if it is not found. */ - -#include - - .arch ev6 - .set noreorder - .set noat - -ENTRY(strchr) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - ldq_u t0, 0(a0) # L : load first quadword Latency=3 - and a1, 0xff, t3 # E : 00000000000000ch - insbl a1, 1, t5 # U : 000000000000ch00 - insbl a1, 7, a2 # U : ch00000000000000 - - insbl t3, 6, a3 # U : 00ch000000000000 - or t5, t3, a1 # E : 000000000000chch - andnot a0, 7, v0 # E : align our loop pointer - lda t4, -1 # E : build garbage mask - - mskqh t4, a0, t4 # U : only want relevant part of first quad - or a2, a3, a2 # E : chch000000000000 - inswl a1, 2, t5 # E : 00000000chch0000 - inswl a1, 4, a3 # E : 0000chch00000000 - - or a1, a2, a1 # E : chch00000000chch - or a3, t5, t5 # E : 0000chchchch0000 - cmpbge zero, t0, t2 # E : bits set iff byte == zero - cmpbge zero, t4, t4 # E : bits set iff byte is garbage - - /* This quad is _very_ serialized. Lots of stalling happens */ - or t5, a1, a1 # E : chchchchchchchch - xor t0, a1, t1 # E : make bytes == c zero - cmpbge zero, t1, t3 # E : bits set iff byte == c - or t2, t3, t0 # E : bits set iff char match or zero match - - andnot t0, t4, t0 # E : clear garbage bits - cttz t0, a2 # U0 : speculative (in case we get a match) - nop # E : - bne t0, $found # U : - - /* - * Yuk. This loop is going to stall like crazy waiting for the - * data to be loaded. Not much can be done about it unless it's - * unrolled multiple times, which is generally unsafe. - */ -$loop: - ldq t0, 8(v0) # L : Latency=3 - addq v0, 8, v0 # E : - xor t0, a1, t1 # E : - cmpbge zero, t0, t2 # E : bits set iff byte == 0 - - cmpbge zero, t1, t3 # E : bits set iff byte == c - or t2, t3, t0 # E : - cttz t3, a2 # U0 : speculative (in case we get a match) - beq t0, $loop # U : - -$found: - negq t0, t1 # E : clear all but least set bit - and t0, t1, t0 # E : - and t0, t3, t1 # E : bit set iff byte was the char - addq v0, a2, v0 # E : Add in the bit number from above - - cmoveq t1, $31, v0 # E : Two mapping slots, latency = 2 - nop - nop - ret # L0 : - - END(strchr) - -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/alpha/alphaev67/strlen.S b/sysdeps/alpha/alphaev67/strlen.S deleted file mode 100644 index ead08998a1..0000000000 --- a/sysdeps/alpha/alphaev67/strlen.S +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@cs.arizona.edu). - EV67 optimized by Rick Gorton . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Finds length of a 0-terminated string. */ - -#include - - .arch ev6 - .set noreorder - .set noat - -ENTRY(strlen) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - ldq_u $1, 0($16) # L : load first quadword ($16 may be misaligned) - lda $2, -1($31) # E : - insqh $2, $16, $2 # U : - andnot $16, 7, $0 # E : - - or $2, $1, $1 # E : - cmpbge $31, $1, $2 # E : $2 <- bitmask: bit i == 1 <==> i-th byte == 0 - nop # E : - bne $2, $found # U : - -$loop: ldq $1, 8($0) # L : - addq $0, 8, $0 # E : addr += 8 - cmpbge $31, $1, $2 # E : - beq $2, $loop # U : - -$found: - cttz $2, $3 # U0 : - addq $0, $3, $0 # E : - subq $0, $16, $0 # E : - ret $31, ($26) # L0 : - - END(strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/alpha/alphaev67/strncat.S b/sysdeps/alpha/alphaev67/strncat.S deleted file mode 100644 index 58aac54d64..0000000000 --- a/sysdeps/alpha/alphaev67/strncat.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson , 1996. - EV67 optimized by Rick Gorton . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Append no more than COUNT characters from the null-terminated string SRC - to the null-terminated string DST. Always null-terminate the new DST. */ - -#include - - .arch ev6 - .set noreorder - .text - -ENTRY(strncat) - ldgp gp, 0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - mov a0, v0 # set up return value - beq a2, $zerocount # U : - /* Find the end of the string. */ - ldq_u t0, 0(a0) # L : load first quadword (a0 may be misaligned) - lda t1, -1 # E : - - insqh t1, v0, t1 # U : - andnot a0, 7, a0 # E : - nop # E : - or t1, t0, t0 # E : - - nop # E : - nop # E : - cmpbge zero, t0, t1 # E : bits set iff byte == 0 - bne t1, $found # U : - -$loop: ldq t0, 8(a0) # L : - addq a0, 8, a0 # E : - cmpbge zero, t0, t1 # E : - beq t1, $loop # U : - -$found: cttz t1, t2 # U0 : - addq a0, t2, a0 # E : - jsr t9, __stxncpy # L0 : Now do the append. - - /* Worry about the null termination. */ - - cttz t10, t2 # U0: byte offset of end-of-count. - bic a0, 7, a0 # E : word align the last write address. - zapnot t0, t8, t1 # U : was last byte a null? - nop # E : - - bne t1, 0f # U : - nop # E : - nop # E : - ret # L0 : - -0: addq t2, a0, a0 # E : address of end-of-count - stb zero, 1(a0) # L : - nop # E : - ret # L0 : - -$zerocount: - nop # E : - nop # E : - nop # E : - ret # L0 : - - END(strncat) diff --git a/sysdeps/alpha/alphaev67/strrchr.S b/sysdeps/alpha/alphaev67/strrchr.S deleted file mode 100644 index f2fb4cf677..0000000000 --- a/sysdeps/alpha/alphaev67/strrchr.S +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - EV67 optimized by Rick Gorton . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Return the address of the last occurrence of a given character - within a null-terminated string, or null if it is not found. */ - -#include - - .arch ev6 - .set noreorder - .set noat - -ENTRY(strrchr) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - and a1, 0xff, t2 # E : 00000000000000ch - insbl a1, 1, t4 # U : 000000000000ch00 - insbl a1, 2, t5 # U : 0000000000ch0000 - ldq_u t0, 0(a0) # L : load first quadword Latency=3 - - mov zero, t6 # E : t6 is last match aligned addr - or t2, t4, a1 # E : 000000000000chch - sll t5, 8, t3 # U : 00000000ch000000 - mov zero, t8 # E : t8 is last match byte compare mask - - andnot a0, 7, v0 # E : align source addr - or t5, t3, t3 # E : 00000000chch0000 - sll a1, 32, t2 # U : 0000chch00000000 - sll a1, 48, t4 # U : chch000000000000 - - or t4, a1, a1 # E : chch00000000chch - or t2, t3, t2 # E : 0000chchchch0000 - or a1, t2, a1 # E : chchchchchchchch - lda t5, -1 # E : build garbage mask - - cmpbge zero, t0, t1 # E : bits set iff byte == zero - mskqh t5, a0, t4 # E : Complete garbage mask - xor t0, a1, t2 # E : make bytes == c zero - cmpbge zero, t4, t4 # E : bits set iff byte is garbage - - cmpbge zero, t2, t3 # E : bits set iff byte == c - andnot t1, t4, t1 # E : clear garbage from null test - andnot t3, t4, t3 # E : clear garbage from char test - bne t1, $eos # U : did we already hit the terminator? - - /* Character search main loop */ -$loop: - ldq t0, 8(v0) # L : load next quadword - cmovne t3, v0, t6 # E : save previous comparisons match - nop # : Latency=2, extra map slot (keep nop with cmov) - nop - - cmovne t3, t3, t8 # E : Latency=2, extra map slot - nop # : keep with cmovne - addq v0, 8, v0 # E : - xor t0, a1, t2 # E : - - cmpbge zero, t0, t1 # E : bits set iff byte == zero - cmpbge zero, t2, t3 # E : bits set iff byte == c - beq t1, $loop # U : if we havnt seen a null, loop - nop - - /* Mask out character matches after terminator */ -$eos: - negq t1, t4 # E : isolate first null byte match - and t1, t4, t4 # E : - subq t4, 1, t5 # E : build a mask of the bytes upto... - or t4, t5, t4 # E : ... and including the null - - and t3, t4, t3 # E : mask out char matches after null - cmovne t3, t3, t8 # E : save it, if match found Latency=2, extra map slot - nop # : Keep with cmovne - nop - - cmovne t3, v0, t6 # E : - nop # : Keep with cmovne - /* Locate the address of the last matched character */ - ctlz t8, t2 # U0 : Latency=3 (0x40 for t8=0) - nop - - cmoveq t8, 0x3f, t2 # E : Compensate for case when no match is seen - nop # E : hide the cmov latency (2) behind ctlz latency - lda t5, 0x3f($31) # E : - subq t5, t2, t5 # E : Normalize leading zero count - - addq t6, t5, v0 # E : and add to quadword address - ret # L0 : Latency=3 - nop - nop - -END(strrchr) - -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/alpha/atomic-machine.h b/sysdeps/alpha/atomic-machine.h deleted file mode 100644 index 2cb2290837..0000000000 --- a/sysdeps/alpha/atomic-machine.h +++ /dev/null @@ -1,370 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int16_t atomic16_t; -typedef uint16_t uatomic16_t; -typedef int_fast16_t atomic_fast16_t; -typedef uint_fast16_t uatomic_fast16_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#define __HAVE_64B_ATOMICS 1 -#define USE_ATOMIC_COMPILER_BUILTINS 0 - -/* XXX Is this actually correct? */ -#define ATOMIC_EXCHANGE_USES_CAS 1 - - -#ifdef UP -# define __MB /* nothing */ -#else -# define __MB " mb\n" -#endif - - -/* Compare and exchange. For all of the "xxx" routines, we expect a - "__prev" and a "__cmp" variable to be provided by the enclosing scope, - in which values are returned. */ - -#define __arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2) \ -({ \ - unsigned long __tmp, __snew, __addr64; \ - __asm__ __volatile__ ( \ - mb1 \ - " andnot %[__addr8],7,%[__addr64]\n" \ - " insbl %[__new],%[__addr8],%[__snew]\n" \ - "1: ldq_l %[__tmp],0(%[__addr64])\n" \ - " extbl %[__tmp],%[__addr8],%[__prev]\n" \ - " cmpeq %[__prev],%[__old],%[__cmp]\n" \ - " beq %[__cmp],2f\n" \ - " mskbl %[__tmp],%[__addr8],%[__tmp]\n" \ - " or %[__snew],%[__tmp],%[__tmp]\n" \ - " stq_c %[__tmp],0(%[__addr64])\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - "2:" \ - : [__prev] "=&r" (__prev), \ - [__snew] "=&r" (__snew), \ - [__tmp] "=&r" (__tmp), \ - [__cmp] "=&r" (__cmp), \ - [__addr64] "=&r" (__addr64) \ - : [__addr8] "r" (mem), \ - [__old] "Ir" ((uint64_t)(uint8_t)(uint64_t)(old)), \ - [__new] "r" (new) \ - : "memory"); \ -}) - -#define __arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2) \ -({ \ - unsigned long __tmp, __snew, __addr64; \ - __asm__ __volatile__ ( \ - mb1 \ - " andnot %[__addr16],7,%[__addr64]\n" \ - " inswl %[__new],%[__addr16],%[__snew]\n" \ - "1: ldq_l %[__tmp],0(%[__addr64])\n" \ - " extwl %[__tmp],%[__addr16],%[__prev]\n" \ - " cmpeq %[__prev],%[__old],%[__cmp]\n" \ - " beq %[__cmp],2f\n" \ - " mskwl %[__tmp],%[__addr16],%[__tmp]\n" \ - " or %[__snew],%[__tmp],%[__tmp]\n" \ - " stq_c %[__tmp],0(%[__addr64])\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - "2:" \ - : [__prev] "=&r" (__prev), \ - [__snew] "=&r" (__snew), \ - [__tmp] "=&r" (__tmp), \ - [__cmp] "=&r" (__cmp), \ - [__addr64] "=&r" (__addr64) \ - : [__addr16] "r" (mem), \ - [__old] "Ir" ((uint64_t)(uint16_t)(uint64_t)(old)), \ - [__new] "r" (new) \ - : "memory"); \ -}) - -#define __arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2) \ -({ \ - __asm__ __volatile__ ( \ - mb1 \ - "1: ldl_l %[__prev],%[__mem]\n" \ - " cmpeq %[__prev],%[__old],%[__cmp]\n" \ - " beq %[__cmp],2f\n" \ - " mov %[__new],%[__cmp]\n" \ - " stl_c %[__cmp],%[__mem]\n" \ - " beq %[__cmp],1b\n" \ - mb2 \ - "2:" \ - : [__prev] "=&r" (__prev), \ - [__cmp] "=&r" (__cmp) \ - : [__mem] "m" (*(mem)), \ - [__old] "Ir" ((uint64_t)(atomic32_t)(uint64_t)(old)), \ - [__new] "Ir" (new) \ - : "memory"); \ -}) - -#define __arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2) \ -({ \ - __asm__ __volatile__ ( \ - mb1 \ - "1: ldq_l %[__prev],%[__mem]\n" \ - " cmpeq %[__prev],%[__old],%[__cmp]\n" \ - " beq %[__cmp],2f\n" \ - " mov %[__new],%[__cmp]\n" \ - " stq_c %[__cmp],%[__mem]\n" \ - " beq %[__cmp],1b\n" \ - mb2 \ - "2:" \ - : [__prev] "=&r" (__prev), \ - [__cmp] "=&r" (__cmp) \ - : [__mem] "m" (*(mem)), \ - [__old] "Ir" ((uint64_t)(old)), \ - [__new] "Ir" (new) \ - : "memory"); \ -}) - -/* For all "bool" routines, we return FALSE if exchange succesful. */ - -#define __arch_compare_and_exchange_bool_8_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2); \ - !__cmp; }) - -#define __arch_compare_and_exchange_bool_16_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2); \ - !__cmp; }) - -#define __arch_compare_and_exchange_bool_32_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2); \ - !__cmp; }) - -#define __arch_compare_and_exchange_bool_64_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2); \ - !__cmp; }) - -/* For all "val" routines, return the old value whether exchange - successful or not. */ - -#define __arch_compare_and_exchange_val_8_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2); \ - (typeof (*mem))__prev; }) - -#define __arch_compare_and_exchange_val_16_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2); \ - (typeof (*mem))__prev; }) - -#define __arch_compare_and_exchange_val_32_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2); \ - (typeof (*mem))__prev; }) - -#define __arch_compare_and_exchange_val_64_int(mem, new, old, mb1, mb2) \ -({ unsigned long __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2); \ - (typeof (*mem))__prev; }) - -/* Compare and exchange with "acquire" semantics, ie barrier after. */ - -#define atomic_compare_and_exchange_bool_acq(mem, new, old) \ - __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \ - mem, new, old, "", __MB) - -#define atomic_compare_and_exchange_val_acq(mem, new, old) \ - __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ - mem, new, old, "", __MB) - -/* Compare and exchange with "release" semantics, ie barrier before. */ - -#define atomic_compare_and_exchange_val_rel(mem, new, old) \ - __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ - mem, new, old, __MB, "") - - -/* Atomically store value and return the previous value. */ - -#define __arch_exchange_8_int(mem, value, mb1, mb2) \ -({ \ - unsigned long __tmp, __addr64, __sval; __typeof(*mem) __ret; \ - __asm__ __volatile__ ( \ - mb1 \ - " andnot %[__addr8],7,%[__addr64]\n" \ - " insbl %[__value],%[__addr8],%[__sval]\n" \ - "1: ldq_l %[__tmp],0(%[__addr64])\n" \ - " extbl %[__tmp],%[__addr8],%[__ret]\n" \ - " mskbl %[__tmp],%[__addr8],%[__tmp]\n" \ - " or %[__sval],%[__tmp],%[__tmp]\n" \ - " stq_c %[__tmp],0(%[__addr64])\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - : [__ret] "=&r" (__ret), \ - [__sval] "=&r" (__sval), \ - [__tmp] "=&r" (__tmp), \ - [__addr64] "=&r" (__addr64) \ - : [__addr8] "r" (mem), \ - [__value] "r" (value) \ - : "memory"); \ - __ret; }) - -#define __arch_exchange_16_int(mem, value, mb1, mb2) \ -({ \ - unsigned long __tmp, __addr64, __sval; __typeof(*mem) __ret; \ - __asm__ __volatile__ ( \ - mb1 \ - " andnot %[__addr16],7,%[__addr64]\n" \ - " inswl %[__value],%[__addr16],%[__sval]\n" \ - "1: ldq_l %[__tmp],0(%[__addr64])\n" \ - " extwl %[__tmp],%[__addr16],%[__ret]\n" \ - " mskwl %[__tmp],%[__addr16],%[__tmp]\n" \ - " or %[__sval],%[__tmp],%[__tmp]\n" \ - " stq_c %[__tmp],0(%[__addr64])\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - : [__ret] "=&r" (__ret), \ - [__sval] "=&r" (__sval), \ - [__tmp] "=&r" (__tmp), \ - [__addr64] "=&r" (__addr64) \ - : [__addr16] "r" (mem), \ - [__value] "r" (value) \ - : "memory"); \ - __ret; }) - -#define __arch_exchange_32_int(mem, value, mb1, mb2) \ -({ \ - signed int __tmp; __typeof(*mem) __ret; \ - __asm__ __volatile__ ( \ - mb1 \ - "1: ldl_l %[__ret],%[__mem]\n" \ - " mov %[__val],%[__tmp]\n" \ - " stl_c %[__tmp],%[__mem]\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - : [__ret] "=&r" (__ret), \ - [__tmp] "=&r" (__tmp) \ - : [__mem] "m" (*(mem)), \ - [__val] "Ir" (value) \ - : "memory"); \ - __ret; }) - -#define __arch_exchange_64_int(mem, value, mb1, mb2) \ -({ \ - unsigned long __tmp; __typeof(*mem) __ret; \ - __asm__ __volatile__ ( \ - mb1 \ - "1: ldq_l %[__ret],%[__mem]\n" \ - " mov %[__val],%[__tmp]\n" \ - " stq_c %[__tmp],%[__mem]\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - : [__ret] "=&r" (__ret), \ - [__tmp] "=&r" (__tmp) \ - : [__mem] "m" (*(mem)), \ - [__val] "Ir" (value) \ - : "memory"); \ - __ret; }) - -#define atomic_exchange_acq(mem, value) \ - __atomic_val_bysize (__arch_exchange, int, mem, value, "", __MB) - -#define atomic_exchange_rel(mem, value) \ - __atomic_val_bysize (__arch_exchange, int, mem, value, __MB, "") - - -/* Atomically add value and return the previous (unincremented) value. */ - -#define __arch_exchange_and_add_8_int(mem, value, mb1, mb2) \ - ({ __builtin_trap (); 0; }) - -#define __arch_exchange_and_add_16_int(mem, value, mb1, mb2) \ - ({ __builtin_trap (); 0; }) - -#define __arch_exchange_and_add_32_int(mem, value, mb1, mb2) \ -({ \ - signed int __tmp; __typeof(*mem) __ret; \ - __asm__ __volatile__ ( \ - mb1 \ - "1: ldl_l %[__ret],%[__mem]\n" \ - " addl %[__ret],%[__val],%[__tmp]\n" \ - " stl_c %[__tmp],%[__mem]\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - : [__ret] "=&r" (__ret), \ - [__tmp] "=&r" (__tmp) \ - : [__mem] "m" (*(mem)), \ - [__val] "Ir" ((signed int)(value)) \ - : "memory"); \ - __ret; }) - -#define __arch_exchange_and_add_64_int(mem, value, mb1, mb2) \ -({ \ - unsigned long __tmp; __typeof(*mem) __ret; \ - __asm__ __volatile__ ( \ - mb1 \ - "1: ldq_l %[__ret],%[__mem]\n" \ - " addq %[__ret],%[__val],%[__tmp]\n" \ - " stq_c %[__tmp],%[__mem]\n" \ - " beq %[__tmp],1b\n" \ - mb2 \ - : [__ret] "=&r" (__ret), \ - [__tmp] "=&r" (__tmp) \ - : [__mem] "m" (*(mem)), \ - [__val] "Ir" ((unsigned long)(value)) \ - : "memory"); \ - __ret; }) - -/* ??? Barrier semantics for atomic_exchange_and_add appear to be - undefined. Use full barrier for now, as that's safe. */ -#define atomic_exchange_and_add(mem, value) \ - __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, __MB, __MB) - - -/* ??? Blah, I'm lazy. Implement these later. Can do better than the - compare-and-exchange loop provided by generic code. - -#define atomic_decrement_if_positive(mem) -#define atomic_bit_test_set(mem, bit) - -*/ - -#ifndef UP -# define atomic_full_barrier() __asm ("mb" : : : "memory"); -# define atomic_read_barrier() __asm ("mb" : : : "memory"); -# define atomic_write_barrier() __asm ("wmb" : : : "memory"); -#endif diff --git a/sysdeps/alpha/backtrace.c b/sysdeps/alpha/backtrace.c deleted file mode 100644 index 27ce597b39..0000000000 --- a/sysdeps/alpha/backtrace.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/alpha/bb_init_func.S b/sysdeps/alpha/bb_init_func.S deleted file mode 100644 index a3064d8abc..0000000000 --- a/sysdeps/alpha/bb_init_func.S +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@cs.arizona.edu). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* __bb_init_func is invoked at the beginning of each function, before - any registers have been saved. It is therefore safe to use any - caller-saved (call-used) registers (except for argument registers - a1-a5). */ - -#include - -/* - * These offsets should match with "struct bb" declared in gcc/libgcc2.c. - */ -#define ZERO_WORD 0x00 -#define NEXT 0x20 - - .set noat - .set noreorder - -ENTRY(__bb_init_func) - .prologue 0 - - ldq t0, ZERO_WORD(a0) /* t0 <- blocks->zero_word */ - beq t0, init /* not initialized yet -> */ - ret - -END(__bb_init_func) - - .ent init -init: - .frame sp, 0x38, ra, 0 - subq sp, 0x38, sp - .prologue 0 - - stq pv, 0x30(sp) - br pv, 1f -1: ldgp gp, 0(pv) - - ldiq t1, __bb_head - lda t3, _gmonparam - ldq t2, 0(t1) - ldl t3, 0(t3) /* t3 = _gmonparam.state */ - lda t0, 1 - stq t0, ZERO_WORD(a0) /* blocks->zero_word = 1 */ - stq t2, NEXT(a0) /* blocks->next = __bb_head */ - stq a0, 0(t1) - bne t2, $leave - beq t3, $leave /* t3 == GMON_PROF_ON? yes -> */ - - /* also need to initialize destructor: */ - stq ra, 0x00(sp) - lda a0, __bb_exit_func - stq a1, 0x08(sp) - lda pv, atexit - stq a2, 0x10(sp) - stq a3, 0x18(sp) - stq a4, 0x20(sp) - stq a5, 0x28(sp) - jsr ra, (pv), atexit - ldq ra, 0x00(sp) - ldq a1, 0x08(sp) - ldq a2, 0x10(sp) - ldq a3, 0x18(sp) - ldq a4, 0x20(sp) - ldq a5, 0x28(sp) - -$leave: ldq pv, 0x30(sp) - addq sp, 0x38, sp - ret - - .end init diff --git a/sysdeps/alpha/bits/endian.h b/sysdeps/alpha/bits/endian.h deleted file mode 100644 index 8a16e14e24..0000000000 --- a/sysdeps/alpha/bits/endian.h +++ /dev/null @@ -1,7 +0,0 @@ -/* Alpha is little-endian. */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#define __BYTE_ORDER __LITTLE_ENDIAN diff --git a/sysdeps/alpha/bits/link.h b/sysdeps/alpha/bits/link.h deleted file mode 100644 index f9b8938f07..0000000000 --- a/sysdeps/alpha/bits/link.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - - -/* Registers for entry into PLT on Alpha. */ -typedef struct La_alpha_regs -{ - uint64_t lr_r26; - uint64_t lr_sp; - uint64_t lr_r16; - uint64_t lr_r17; - uint64_t lr_r18; - uint64_t lr_r19; - uint64_t lr_r20; - uint64_t lr_r21; - double lr_f16; - double lr_f17; - double lr_f18; - double lr_f19; - double lr_f20; - double lr_f21; -} La_alpha_regs; - -/* Return values for calls from PLT on Alpha. */ -typedef struct La_alpha_retval -{ - uint64_t lrv_r0; - uint64_t lrv_r1; - double lrv_f0; - double lrv_f1; -} La_alpha_retval; - - -__BEGIN_DECLS - -extern Elf64_Addr la_alpha_gnu_pltenter (Elf64_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_alpha_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_alpha_gnu_pltexit (Elf64_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_alpha_regs *__inregs, - La_alpha_retval *__outregs, - const char *symname); - -__END_DECLS diff --git a/sysdeps/alpha/bits/mathdef.h b/sysdeps/alpha/bits/mathdef.h deleted file mode 100644 index f375bfda7f..0000000000 --- a/sysdeps/alpha/bits/mathdef.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _COMPLEX_H -# error "Never use directly; include instead" -#endif - -#if defined _COMPLEX_H && !defined _COMPLEX_H_MATHDEF -# define _COMPLEX_H_MATHDEF 1 -# if defined(__GNUC__) && !__GNUC_PREREQ(3,4) - -/* Due to an ABI change, we need to remap the complex float symbols. */ -# define _Mdouble_ float -# define __MATHCALL(function, args) \ - __MATHDECL (_Complex float, function, args) -# define __MATHDECL(type, function, args) \ - __MATHDECL_1(type, function##f, args, __c1_##function##f); \ - __MATHDECL_1(type, __##function##f, args, __c1_##function##f) -# define __MATHDECL_1(type, function, args, alias) \ - extern type function args __asm__(#alias) __THROW - -# include - -# undef _Mdouble_ -# undef __MATHCALL -# undef __MATHDECL -# undef __MATHDECL_1 - -# endif /* GNUC before 3.4 */ -#endif /* COMPLEX_H */ diff --git a/sysdeps/alpha/bits/setjmp.h b/sysdeps/alpha/bits/setjmp.h deleted file mode 100644 index d7eb751de8..0000000000 --- a/sysdeps/alpha/bits/setjmp.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Define the machine-dependent type `jmp_buf'. Alpha version. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include directly; use instead." -#endif - -/* The previous bits/setjmp.h had __jmp_buf defined as a structure. - We use an array of 'long int' instead, to make writing the - assembler easier. Naturally, user code should not depend on - either representation. */ - -/* - * Integer registers: - * $0 is the return value (va); - * $1-$8, $22-$25, $28 are call-used (t0-t7, t8-t11, at); - * $9-$14 we save here (s0-s5); - * $15 is the FP and we save it here (fp or s6); - * $16-$21 are input arguments (call-used) (a0-a5); - * $26 is the return PC and we save it here (ra); - * $27 is the procedure value (i.e., the address of __setjmp) (pv or t12); - * $29 is the global pointer, which the caller will reconstruct - * from the return address restored in $26 (gp); - * $30 is the stack pointer and we save it here (sp); - * $31 is always zero (zero). - * - * Floating-point registers: - * $f0 is the floating return value; - * $f1, $f10-$f15, $f22-$f30 are call-used; - * $f2-$f9 we save here; - * $f16-$21 are input args (call-used); - * $f31 is always zero. - * - * Note that even on Alpha hardware that does not have an FPU (there - * isn't such a thing currently) it is required to implement the FP - * registers. - */ - -#ifndef __ASSEMBLY__ -typedef long int __jmp_buf[17]; -#endif - -#endif /* bits/setjmp.h */ diff --git a/sysdeps/alpha/bsd-_setjmp.S b/sysdeps/alpha/bsd-_setjmp.S deleted file mode 100644 index 4e6a2da560..0000000000 --- a/sysdeps/alpha/bsd-_setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* _setjmp is in setjmp.S */ diff --git a/sysdeps/alpha/bsd-setjmp.S b/sysdeps/alpha/bsd-setjmp.S deleted file mode 100644 index 1da848d2f1..0000000000 --- a/sysdeps/alpha/bsd-setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* setjmp is in setjmp.S */ diff --git a/sysdeps/alpha/bzero.S b/sysdeps/alpha/bzero.S deleted file mode 100644 index 9cea9fb59d..0000000000 --- a/sysdeps/alpha/bzero.S +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Fill a block of memory with zeros. Optimized for the Alpha architecture: - - - memory accessed as aligned quadwords only - - destination memory not read unless needed for good cache behaviour - - basic blocks arranged to optimize branch prediction for full-quadword - aligned memory blocks. - - partial head and tail quadwords constructed with byte-mask instructions - - This is generally scheduled for the EV5 (got to look out for my own - interests :-), but with EV4 needs in mind. There *should* be no more - stalls for the EV4 than there are for the EV5. -*/ - - -#include - - .set noat - .set noreorder - - .text - .type __bzero, @function - .globl __bzero - .usepv __bzero, USEPV_PROF - - cfi_startproc - - /* On entry to this basic block: - t3 == loop counter - t4 == bytes in partial final word - a0 == possibly misaligned destination pointer */ - - .align 3 -bzero_loop: - beq t3, $tail # - blbc t3, 0f # skip single store if count even - - stq_u zero, 0(a0) # e0 : store one word - subq t3, 1, t3 # .. e1 : - addq a0, 8, a0 # e0 : - beq t3, $tail # .. e1 : - -0: stq_u zero, 0(a0) # e0 : store two words - subq t3, 2, t3 # .. e1 : - stq_u zero, 8(a0) # e0 : - addq a0, 16, a0 # .. e1 : - bne t3, 0b # e1 : - -$tail: bne t4, 1f # is there a tail to do? - ret # no - -1: ldq_u t0, 0(a0) # yes, load original data - mskqh t0, t4, t0 # - stq_u t0, 0(a0) # - ret # - -__bzero: -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount -#endif - - mov a0, v0 # e0 : move return value in place - beq a1, $done # .. e1 : early exit for zero-length store - and a0, 7, t1 # e0 : - addq a1, t1, a1 # e1 : add dest misalignment to count - srl a1, 3, t3 # e0 : loop = count >> 3 - and a1, 7, t4 # .. e1 : find number of bytes in tail - unop # : - beq t1, bzero_loop # e1 : aligned head, jump right in - - ldq_u t0, 0(a0) # e0 : load original data to mask into - cmpult a1, 8, t2 # .. e1 : is this a sub-word set? - bne t2, $oneq # e1 : - - mskql t0, a0, t0 # e0 : we span words. finish this partial - subq t3, 1, t3 # e0 : - addq a0, 8, a0 # .. e1 : - stq_u t0, -8(a0) # e0 : - br bzero_loop # .. e1 : - - .align 3 -$oneq: - mskql t0, a0, t2 # e0 : - mskqh t0, a1, t3 # e0 : - or t2, t3, t0 # e1 : - stq_u t0, 0(a0) # e0 : - -$done: ret - - cfi_endproc -weak_alias (__bzero, bzero) diff --git a/sysdeps/alpha/configure b/sysdeps/alpha/configure deleted file mode 100644 index 464b596527..0000000000 --- a/sysdeps/alpha/configure +++ /dev/null @@ -1,8 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/alpha. - -# With required gcc+binutils, we can always access static and hidden -# symbols in a position independent way. -$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h - -# work around problem with autoconf and empty lines at the end of files diff --git a/sysdeps/alpha/configure.ac b/sysdeps/alpha/configure.ac deleted file mode 100644 index 38e52e71ac..0000000000 --- a/sysdeps/alpha/configure.ac +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/alpha. - -# With required gcc+binutils, we can always access static and hidden -# symbols in a position independent way. -AC_DEFINE(PI_STATIC_AND_HIDDEN) -# work around problem with autoconf and empty lines at the end of files diff --git a/sysdeps/alpha/crti.S b/sysdeps/alpha/crti.S deleted file mode 100644 index 932b337e29..0000000000 --- a/sysdeps/alpha/crti.S +++ /dev/null @@ -1,99 +0,0 @@ -/* Special .init and .fini section support for Alpha. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. - - This differs from what would be generated for ordinary code in that - we save and restore the GP within the function. In order for linker - relaxation to work, the value in the GP register on exit from a function - must be valid for the function entry point. Normally, a function is - contained within one object file and this is not an issue, provided - that the function reloads the gp after making any function calls. - However, _init and _fini are constructed from pieces of many object - files, all of which may have different GP values. So we must reload - the GP value from crti.o in crtn.o. */ - -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - - .section .init, "ax", @progbits - .globl _init - .type _init, @function - .usepv _init, std -_init: - ldgp $29, 0($27) - subq $30, 16, $30 -#if PREINIT_FUNCTION_WEAK - lda $27, PREINIT_FUNCTION -#endif - stq $26, 0($30) - stq $29, 8($30) -#if PREINIT_FUNCTION_WEAK - beq $27, 1f - jsr $26, ($27), PREINIT_FUNCTION - ldq $29, 8($30) -1: -#else - bsr $26, PREINIT_FUNCTION !samegp -#endif - .p2align 3 - - .section .fini, "ax", @progbits - .globl _fini - .type _fini,@function - .usepv _fini,std -_fini: - ldgp $29, 0($27) - subq $30, 16, $30 - stq $26, 0($30) - stq $29, 8($30) - .p2align 3 diff --git a/sysdeps/alpha/crtn.S b/sysdeps/alpha/crtn.S deleted file mode 100644 index cb310778e1..0000000000 --- a/sysdeps/alpha/crtn.S +++ /dev/null @@ -1,49 +0,0 @@ -/* Special .init and .fini section support for Alpha. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .section .init, "ax", @progbits - ldq $26, 0($30) - ldq $29, 8($30) - addq $30, 16, $30 - ret - - .section .fini, "ax", @progbits - ldq $26, 0($30) - ldq $29, 8($30) - addq $30, 16, $30 - ret diff --git a/sysdeps/alpha/div.S b/sysdeps/alpha/div.S deleted file mode 100644 index a323379067..0000000000 --- a/sysdeps/alpha/div.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "div_libc.h" - -#undef FRAME -#ifdef __alpha_fix__ -#define FRAME 0 -#else -#define FRAME 16 -#endif - - .set noat - - .align 4 - .globl div - .ent div -div: - .frame sp, FRAME, ra -#if FRAME > 0 - lda sp, -FRAME(sp) -#endif -#ifdef PROF - .set macro - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .set nomacro - .prologue 1 -#else - .prologue 0 -#endif - - beq $18, $divbyzero - excb - mf_fpcr $f10 - - _ITOFT2 $17, $f0, 0, $18, $f1, 8 - - cvtqt $f0, $f0 - cvtqt $f1, $f1 - divt/c $f0, $f1, $f0 - cvttq/c $f0, $f0 - excb - mt_fpcr $f10 - _FTOIT $f0, $0, 0 - - mull $0, $18, $1 - subl $17, $1, $1 - - stl $0, 0(a0) - stl $1, 4(a0) - mov a0, v0 - -#if FRAME > 0 - lda sp, FRAME(sp) -#endif - ret - -$divbyzero: - mov a0, v0 - lda a0, GEN_INTDIV - call_pal PAL_gentrap - stl zero, 0(v0) - stl zero, 4(v0) - -#if FRAME > 0 - lda sp, FRAME(sp) -#endif - ret - - .end div diff --git a/sysdeps/alpha/div_libc.h b/sysdeps/alpha/div_libc.h deleted file mode 100644 index 96eb95bc7e..0000000000 --- a/sysdeps/alpha/div_libc.h +++ /dev/null @@ -1,163 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Common bits for implementing software divide. */ - -#include -#ifdef __linux__ -# include -# include -#else -# include -#endif - -/* These are not normal C functions. Argument registers are t10 and t11; - the result goes in t12; the return address is in t9. Only t12 and AT - may be clobbered. */ -#define X t10 -#define Y t11 -#define RV t12 -#define RA t9 - -/* The secureplt format does not allow the division routines to be called - via plt; there aren't enough registers free to be clobbered. Avoid - setting the symbol type to STT_FUNC, so that the linker won't be tempted - to create a plt entry. */ -#define funcnoplt notype - -/* None of these functions should use implicit anything. */ - .set nomacro - .set noat - -/* Code fragment to invoke _mcount for profiling. This should be invoked - directly after allocation of the stack frame. */ -.macro CALL_MCOUNT -#ifdef PROF - stq ra, 0(sp) - stq pv, 8(sp) - stq gp, 16(sp) - cfi_rel_offset (ra, 0) - cfi_rel_offset (pv, 8) - cfi_rel_offset (gp, 16) - br AT, 1f - .set macro -1: ldgp gp, 0(AT) - mov RA, ra - lda AT, _mcount - jsr AT, (AT), _mcount - .set nomacro - ldq ra, 0(sp) - ldq pv, 8(sp) - ldq gp, 16(sp) - cfi_restore (ra) - cfi_restore (pv) - cfi_restore (gp) - /* Realign subsequent code with what we'd have without this - macro at all. This means aligned with one arithmetic insn - used within the bundle. */ - .align 4 - nop -#endif -.endm - -/* In order to make the below work, all top-level divide routines must - use the same frame size. */ -#define FRAME 64 - -/* Code fragment to generate an integer divide-by-zero fault. When - building libc.so, we arrange for there to be one copy of this code - placed late in the dso, such that all branches are forward. When - building libc.a, we use multiple copies to avoid having an out of - range branch. Users should jump to DIVBYZERO. */ - -.macro DO_DIVBYZERO -#ifdef PIC -#define DIVBYZERO __divbyzero - .section .gnu.linkonce.t.divbyzero, "ax", @progbits - .globl __divbyzero - .type __divbyzero, @function - .usepv __divbyzero, no - .hidden __divbyzero -#else -#define DIVBYZERO $divbyzero -#endif - - .align 4 -DIVBYZERO: - cfi_startproc - cfi_return_column (RA) - cfi_def_cfa_offset (FRAME) - - mov a0, RV - unop - lda a0, GEN_INTDIV - call_pal PAL_gentrap - - mov RV, a0 - clr RV - lda sp, FRAME(sp) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - cfi_endproc - .size DIVBYZERO, .-DIVBYZERO -.endm - -/* Like the ev6 instructions, but fall back to stack use on prior machines. */ - - .arch ev6 - -.macro _ITOFS gr, fr, slot -#ifdef __alpha_fix__ - itofs \gr, \fr -#else - stl \gr, \slot(sp) - lds \fr, \slot(sp) -#endif -.endm - -.macro _ITOFT gr, fr, slot -#ifdef __alpha_fix__ - itoft \gr, \fr -#else - stq \gr, \slot(sp) - ldt \fr, \slot(sp) -#endif -.endm - -.macro _FTOIT fr, gr, slot -#ifdef __alpha_fix__ - ftoit \fr, \gr -#else - stt \fr, \slot(sp) - ldq \gr, \slot(sp) -#endif -.endm - -/* Similarly, but move two registers. Schedules better for pre-ev6. */ - -.macro _ITOFT2 gr1, fr1, slot1, gr2, fr2, slot2 -#ifdef __alpha_fix__ - itoft \gr1, \fr1 - itoft \gr2, \fr2 -#else - stq \gr1, \slot1(sp) - stq \gr2, \slot2(sp) - ldt \fr1, \slot1(sp) - ldt \fr2, \slot2(sp) -#endif -.endm diff --git a/sysdeps/alpha/divl.S b/sysdeps/alpha/divl.S deleted file mode 100644 index f09433e993..0000000000 --- a/sysdeps/alpha/divl.S +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "div_libc.h" - -/* 32-bit signed int divide. This is not a normal C function. Argument - registers are t10 and t11, the result goes in t12. Only t12 and AT may - be clobbered. - - The FPU can handle all input values except zero. Whee! - - The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE - for cvttq/c even without /sui being set. It will not, however, properly - raise the exception, so we don't have to worry about FPCR_INED being clear - and so dying by SIGFPE. */ - -#ifndef EXTEND -#define EXTEND(S,D) sextl S, D -#endif - - .text - .align 4 - .globl __divl - .type __divl, @funcnoplt - .usepv __divl, no - - cfi_startproc - cfi_return_column (RA) -__divl: - lda sp, -FRAME(sp) - cfi_def_cfa_offset (FRAME) - CALL_MCOUNT - stt $f0, 0(sp) - excb - beq Y, DIVBYZERO - - stt $f1, 8(sp) - stt $f2, 16(sp) - cfi_rel_offset ($f0, 0) - cfi_rel_offset ($f1, 8) - cfi_rel_offset ($f2, 16) - mf_fpcr $f2 - - EXTEND (X, RV) - EXTEND (Y, AT) - _ITOFT2 RV, $f0, 24, AT, $f1, 32 - cvtqt $f0, $f0 - cvtqt $f1, $f1 - divt/c $f0, $f1, $f0 - cvttq/c $f0, $f0 - excb - mt_fpcr $f2 - _FTOIT $f0, RV, 24 - - ldt $f0, 0(sp) - ldt $f1, 8(sp) - ldt $f2, 16(sp) - lda sp, FRAME(sp) - cfi_restore ($f0) - cfi_restore ($f1) - cfi_restore ($f2) - cfi_def_cfa_offset (0) - sextl RV, RV - ret $31, (RA), 1 - - cfi_endproc - .size __divl, .-__divl - - DO_DIVBYZERO diff --git a/sysdeps/alpha/divlu.S b/sysdeps/alpha/divlu.S deleted file mode 100644 index 5c54bb54c0..0000000000 --- a/sysdeps/alpha/divlu.S +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED -#define EXTEND(S,D) zapnot S, 15, D -#define __divl __divlu -#include diff --git a/sysdeps/alpha/divq.S b/sysdeps/alpha/divq.S deleted file mode 100644 index f9acc1c70e..0000000000 --- a/sysdeps/alpha/divq.S +++ /dev/null @@ -1,273 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "div_libc.h" - - -/* 64-bit signed long divide. These are not normal C functions. Argument - registers are t10 and t11, the result goes in t12. Only t12 and AT may - be clobbered. - - Theory of operation here is that we can use the FPU divider for virtually - all operands that we see: all dividend values between -2**53 and 2**53-1 - can be computed directly. Note that divisor values need not be checked - against that range because the rounded fp value will be close enough such - that the quotient is < 1, which will properly be truncated to zero when we - convert back to integer. - - When the dividend is outside the range for which we can compute exact - results, we use the fp quotent as an estimate from which we begin refining - an exact integral value. This reduces the number of iterations in the - shift-and-subtract loop significantly. - - The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE - for cvttq/c even without /sui being set. It will not, however, properly - raise the exception, so we don't have to worry about FPCR_INED being clear - and so dying by SIGFPE. */ - - .text - .align 4 - .globl __divq - .type __divq, @funcnoplt - .usepv __divq, no - - cfi_startproc - cfi_return_column (RA) -__divq: - lda sp, -FRAME(sp) - cfi_def_cfa_offset (FRAME) - CALL_MCOUNT - - /* Get the fp divide insn issued as quickly as possible. After - that's done, we have at least 22 cycles until its results are - ready -- all the time in the world to figure out how we're - going to use the results. */ - stt $f0, 0(sp) - excb - beq Y, DIVBYZERO - - stt $f1, 8(sp) - stt $f3, 48(sp) - cfi_rel_offset ($f0, 0) - cfi_rel_offset ($f1, 8) - cfi_rel_offset ($f3, 48) - mf_fpcr $f3 - - _ITOFT2 X, $f0, 16, Y, $f1, 24 - cvtqt $f0, $f0 - cvtqt $f1, $f1 - divt/c $f0, $f1, $f0 - - /* Check to see if X fit in the double as an exact value. */ - sll X, (64-53), AT - ldt $f1, 8(sp) - sra AT, (64-53), AT - cmpeq X, AT, AT - beq AT, $x_big - - /* If we get here, we're expecting exact results from the division. - Do nothing else besides convert and clean up. */ - cvttq/c $f0, $f0 - excb - mt_fpcr $f3 - _FTOIT $f0, RV, 16 - - ldt $f0, 0(sp) - ldt $f3, 48(sp) - cfi_restore ($f1) - cfi_remember_state - cfi_restore ($f0) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - lda sp, FRAME(sp) - ret $31, (RA), 1 - - .align 4 - cfi_restore_state -$x_big: - /* If we get here, X is large enough that we don't expect exact - results, and neither X nor Y got mis-translated for the fp - division. Our task is to take the fp result, figure out how - far it's off from the correct result and compute a fixup. */ - stq t0, 16(sp) - stq t1, 24(sp) - stq t2, 32(sp) - stq t5, 40(sp) - cfi_rel_offset (t0, 16) - cfi_rel_offset (t1, 24) - cfi_rel_offset (t2, 32) - cfi_rel_offset (t5, 40) - -#define Q RV /* quotient */ -#define R t0 /* remainder */ -#define SY t1 /* scaled Y */ -#define S t2 /* scalar */ -#define QY t3 /* Q*Y */ - - /* The fixup code below can only handle unsigned values. */ - or X, Y, AT - mov $31, t5 - blt AT, $fix_sign_in -$fix_sign_in_ret1: - cvttq/c $f0, $f0 - - _FTOIT $f0, Q, 8 - .align 3 -$fix_sign_in_ret2: - ldt $f0, 0(sp) - stq t3, 0(sp) - cfi_restore ($f0) - cfi_rel_offset (t3, 0) - - mulq Q, Y, QY - excb - stq t4, 8(sp) - mt_fpcr $f3 - cfi_rel_offset (t4, 8) - - subq QY, X, R - mov Y, SY - mov 1, S - bgt R, $q_high - -$q_high_ret: - subq X, QY, R - mov Y, SY - mov 1, S - bgt R, $q_low - -$q_low_ret: - ldq t0, 16(sp) - ldq t1, 24(sp) - ldq t2, 32(sp) - bne t5, $fix_sign_out - -$fix_sign_out_ret: - ldq t3, 0(sp) - ldq t4, 8(sp) - ldq t5, 40(sp) - ldt $f3, 48(sp) - lda sp, FRAME(sp) - cfi_remember_state - cfi_restore (t0) - cfi_restore (t1) - cfi_restore (t2) - cfi_restore (t3) - cfi_restore (t4) - cfi_restore (t5) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - .align 4 - cfi_restore_state - /* The quotient that we computed was too large. We need to reduce - it by S such that Y*S >= R. Obviously the closer we get to the - correct value the better, but overshooting high is ok, as we'll - fix that up later. */ -0: - addq SY, SY, SY - addq S, S, S -$q_high: - cmpult SY, R, AT - bne AT, 0b - - subq Q, S, Q - unop - subq QY, SY, QY - br $q_high_ret - - .align 4 - /* The quotient that we computed was too small. Divide Y by the - current remainder (R) and add that to the existing quotient (Q). - The expectation, of course, is that R is much smaller than X. */ - /* Begin with a shift-up loop. Compute S such that Y*S >= R. We - already have a copy of Y in SY and the value 1 in S. */ -0: - addq SY, SY, SY - addq S, S, S -$q_low: - cmpult SY, R, AT - bne AT, 0b - - /* Shift-down and subtract loop. Each iteration compares our scaled - Y (SY) with the remainder (R); if SY <= R then X is divisible by - Y's scalar (S) so add it to the quotient (Q). */ -2: addq Q, S, t3 - srl S, 1, S - cmpule SY, R, AT - subq R, SY, t4 - - cmovne AT, t3, Q - cmovne AT, t4, R - srl SY, 1, SY - bne S, 2b - - br $q_low_ret - - .align 4 -$fix_sign_in: - /* If we got here, then X|Y is negative. Need to adjust everything - such that we're doing unsigned division in the fixup loop. */ - /* T5 records the changes we had to make: - bit 0: set if result should be negative. - bit 2: set if X was negated. - bit 3: set if Y was negated. - */ - xor X, Y, AT - cmplt AT, 0, t5 - cmplt X, 0, AT - negq X, t0 - - s4addq AT, t5, t5 - cmovne AT, t0, X - cmplt Y, 0, AT - negq Y, t0 - - s8addq AT, t5, t5 - cmovne AT, t0, Y - unop - blbc t5, $fix_sign_in_ret1 - - cvttq/c $f0, $f0 - _FTOIT $f0, Q, 8 - .align 3 - negq Q, Q - br $fix_sign_in_ret2 - - .align 4 -$fix_sign_out: - /* Now we get to undo what we did above. */ - /* ??? Is this really faster than just increasing the size of - the stack frame and storing X and Y in memory? */ - and t5, 8, AT - negq Y, t4 - cmovne AT, t4, Y - - and t5, 4, AT - negq X, t4 - cmovne AT, t4, X - - negq RV, t4 - cmovlbs t5, t4, RV - - br $fix_sign_out_ret - - cfi_endproc - .size __divq, .-__divq - - DO_DIVBYZERO diff --git a/sysdeps/alpha/divqu.S b/sysdeps/alpha/divqu.S deleted file mode 100644 index 15101fa246..0000000000 --- a/sysdeps/alpha/divqu.S +++ /dev/null @@ -1,256 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "div_libc.h" - - -/* 64-bit unsigned long divide. These are not normal C functions. Argument - registers are t10 and t11, the result goes in t12. Only t12 and AT may be - clobbered. - - Theory of operation here is that we can use the FPU divider for virtually - all operands that we see: all dividend values between -2**53 and 2**53-1 - can be computed directly. Note that divisor values need not be checked - against that range because the rounded fp value will be close enough such - that the quotient is < 1, which will properly be truncated to zero when we - convert back to integer. - - When the dividend is outside the range for which we can compute exact - results, we use the fp quotent as an estimate from which we begin refining - an exact integral value. This reduces the number of iterations in the - shift-and-subtract loop significantly. - - The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE - for cvttq/c even without /sui being set. It will not, however, properly - raise the exception, so we don't have to worry about FPCR_INED being clear - and so dying by SIGFPE. */ - - .text - .align 4 - .globl __divqu - .type __divqu, @funcnoplt - .usepv __divqu, no - - cfi_startproc - cfi_return_column (RA) -__divqu: - lda sp, -FRAME(sp) - cfi_def_cfa_offset (FRAME) - CALL_MCOUNT - - /* Get the fp divide insn issued as quickly as possible. After - that's done, we have at least 22 cycles until its results are - ready -- all the time in the world to figure out how we're - going to use the results. */ - stt $f0, 0(sp) - excb - beq Y, DIVBYZERO - - stt $f1, 8(sp) - stt $f3, 48(sp) - cfi_rel_offset ($f0, 0) - cfi_rel_offset ($f1, 8) - cfi_rel_offset ($f3, 48) - mf_fpcr $f3 - - _ITOFT2 X, $f0, 16, Y, $f1, 24 - cvtqt $f0, $f0 - cvtqt $f1, $f1 - blt X, $x_is_neg - divt/c $f0, $f1, $f0 - - /* Check to see if Y was mis-converted as signed value. */ - ldt $f1, 8(sp) - blt Y, $y_is_neg - - /* Check to see if X fit in the double as an exact value. */ - srl X, 53, AT - bne AT, $x_big - - /* If we get here, we're expecting exact results from the division. - Do nothing else besides convert and clean up. */ - cvttq/c $f0, $f0 - excb - mt_fpcr $f3 - _FTOIT $f0, RV, 16 - - ldt $f0, 0(sp) - ldt $f3, 48(sp) - cfi_remember_state - cfi_restore ($f0) - cfi_restore ($f1) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - lda sp, FRAME(sp) - ret $31, (RA), 1 - - .align 4 - cfi_restore_state -$x_is_neg: - /* If we get here, X is so big that bit 63 is set, which made the - conversion come out negative. Fix it up lest we not even get - a good estimate. */ - ldah AT, 0x5f80 /* 2**64 as float. */ - stt $f2, 24(sp) - cfi_rel_offset ($f2, 24) - _ITOFS AT, $f2, 16 - - .align 4 - addt $f0, $f2, $f0 - unop - divt/c $f0, $f1, $f0 - unop - - /* Ok, we've now the divide issued. Continue with other checks. */ - ldt $f1, 8(sp) - unop - ldt $f2, 24(sp) - blt Y, $y_is_neg - cfi_restore ($f1) - cfi_restore ($f2) - cfi_remember_state /* for y_is_neg */ - - .align 4 -$x_big: - /* If we get here, X is large enough that we don't expect exact - results, and neither X nor Y got mis-translated for the fp - division. Our task is to take the fp result, figure out how - far it's off from the correct result and compute a fixup. */ - stq t0, 16(sp) - stq t1, 24(sp) - stq t2, 32(sp) - stq t3, 40(sp) - cfi_rel_offset (t0, 16) - cfi_rel_offset (t1, 24) - cfi_rel_offset (t2, 32) - cfi_rel_offset (t3, 40) - -#define Q RV /* quotient */ -#define R t0 /* remainder */ -#define SY t1 /* scaled Y */ -#define S t2 /* scalar */ -#define QY t3 /* Q*Y */ - - cvttq/c $f0, $f0 - _FTOIT $f0, Q, 8 - mulq Q, Y, QY - - .align 4 - stq t4, 8(sp) - excb - ldt $f0, 0(sp) - mt_fpcr $f3 - cfi_rel_offset (t4, 8) - cfi_restore ($f0) - - subq QY, X, R - mov Y, SY - mov 1, S - bgt R, $q_high - -$q_high_ret: - subq X, QY, R - mov Y, SY - mov 1, S - bgt R, $q_low - -$q_low_ret: - ldq t4, 8(sp) - ldq t0, 16(sp) - ldq t1, 24(sp) - ldq t2, 32(sp) - - ldq t3, 40(sp) - ldt $f3, 48(sp) - lda sp, FRAME(sp) - cfi_remember_state - cfi_restore (t0) - cfi_restore (t1) - cfi_restore (t2) - cfi_restore (t3) - cfi_restore (t4) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - .align 4 - cfi_restore_state - /* The quotient that we computed was too large. We need to reduce - it by S such that Y*S >= R. Obviously the closer we get to the - correct value the better, but overshooting high is ok, as we'll - fix that up later. */ -0: - addq SY, SY, SY - addq S, S, S -$q_high: - cmpult SY, R, AT - bne AT, 0b - - subq Q, S, Q - unop - subq QY, SY, QY - br $q_high_ret - - .align 4 - /* The quotient that we computed was too small. Divide Y by the - current remainder (R) and add that to the existing quotient (Q). - The expectation, of course, is that R is much smaller than X. */ - /* Begin with a shift-up loop. Compute S such that Y*S >= R. We - already have a copy of Y in SY and the value 1 in S. */ -0: - addq SY, SY, SY - addq S, S, S -$q_low: - cmpult SY, R, AT - bne AT, 0b - - /* Shift-down and subtract loop. Each iteration compares our scaled - Y (SY) with the remainder (R); if SY <= R then X is divisible by - Y's scalar (S) so add it to the quotient (Q). */ -2: addq Q, S, t3 - srl S, 1, S - cmpule SY, R, AT - subq R, SY, t4 - - cmovne AT, t3, Q - cmovne AT, t4, R - srl SY, 1, SY - bne S, 2b - - br $q_low_ret - - .align 4 - cfi_restore_state -$y_is_neg: - /* If we get here, Y is so big that bit 63 is set. The results - from the divide will be completely wrong. Fortunately, the - quotient must be either 0 or 1, so just compute it directly. */ - cmpule Y, X, RV - excb - mt_fpcr $f3 - ldt $f0, 0(sp) - ldt $f3, 48(sp) - lda sp, FRAME(sp) - cfi_restore ($f0) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - cfi_endproc - .size __divqu, .-__divqu - - DO_DIVBYZERO diff --git a/sysdeps/alpha/dl-dtprocnum.h b/sysdeps/alpha/dl-dtprocnum.h deleted file mode 100644 index 67845cdd62..0000000000 --- a/sysdeps/alpha/dl-dtprocnum.h +++ /dev/null @@ -1,3 +0,0 @@ -/* Number of extra dynamic section entries for this architecture. By - default there are none. */ -#define DT_THISPROCNUM DT_ALPHA_NUM diff --git a/sysdeps/alpha/dl-machine.h b/sysdeps/alpha/dl-machine.h deleted file mode 100644 index 7580cd29b6..0000000000 --- a/sysdeps/alpha/dl-machine.h +++ /dev/null @@ -1,529 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. Alpha version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This was written in the absence of an ABI -- don't expect - it to remain unchanged. */ - -#ifndef dl_machine_h -#define dl_machine_h 1 - -#define ELF_MACHINE_NAME "alpha" - -#include - - -/* Mask identifying addresses reserved for the user program, - where the dynamic linker should not map anything. */ -#define ELF_MACHINE_USER_ADDRESS_MASK 0x120000000UL - -/* Translate a processor specific dynamic tag to the index in l_info array. */ -#define DT_ALPHA(x) (DT_ALPHA_##x - DT_LOPROC + DT_NUM) - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf64_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_ALPHA; -} - -/* Return the link-time address of _DYNAMIC. The multiple-got-capable - linker no longer allocates the first .got entry for this. But not to - worry, no special tricks are needed. */ -static inline Elf64_Addr -elf_machine_dynamic (void) -{ -#ifndef NO_AXP_MULTI_GOT_LD - return (Elf64_Addr) &_DYNAMIC; -#else - register Elf64_Addr *gp __asm__ ("$29"); - return gp[-4096]; -#endif -} - -/* Return the run-time load address of the shared object. */ - -static inline Elf64_Addr -elf_machine_load_address (void) -{ - /* This relies on the compiler using gp-relative addresses for static symbols. */ - static void *dot = ˙ - return (void *)&dot - dot; -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int -elf_machine_runtime_setup (struct link_map *map, int lazy, int profile) -{ - extern char _dl_runtime_resolve_new[] attribute_hidden; - extern char _dl_runtime_profile_new[] attribute_hidden; - extern char _dl_runtime_resolve_old[] attribute_hidden; - extern char _dl_runtime_profile_old[] attribute_hidden; - - struct pltgot { - char *resolve; - struct link_map *link; - }; - - struct pltgot *pg; - long secureplt; - char *resolve; - - if (map->l_info[DT_JMPREL] == 0 || !lazy) - return lazy; - - /* Check to see if we're using the read-only plt form. */ - secureplt = map->l_info[DT_ALPHA(PLTRO)] != 0; - - /* If the binary uses the read-only secure plt format, PG points to - the .got.plt section, which is the right place for ld.so to place - its hooks. Otherwise, PG is currently pointing at the start of - the plt; the hooks go at offset 16. */ - pg = (struct pltgot *) D_PTR (map, l_info[DT_PLTGOT]); - pg += !secureplt; - - /* This function will be called to perform the relocation. They're - not declared as functions to convince the compiler to use gp - relative relocations for them. */ - if (secureplt) - resolve = _dl_runtime_resolve_new; - else - resolve = _dl_runtime_resolve_old; - - if (__builtin_expect (profile, 0)) - { - if (secureplt) - resolve = _dl_runtime_profile_new; - else - resolve = _dl_runtime_profile_old; - - if (GLRO(dl_profile) && _dl_name_match_p (GLRO(dl_profile), map)) - { - /* This is the object we are looking for. Say that we really - want profiling and the timers are started. */ - GL(dl_profile_map) = map; - } - } - - pg->resolve = resolve; - pg->link = map; - - return lazy; -} - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START asm ("\ - .section .text \n\ - .set at \n\ - .globl _start \n\ - .ent _start \n\ -_start: \n\ - .frame $31,0,$31,0 \n\ - br $gp, 0f \n\ -0: ldgp $gp, 0($gp) \n\ - .prologue 0 \n\ - /* Pass pointer to argument block to _dl_start. */ \n\ - mov $sp, $16 \n\ - bsr $26, _dl_start !samegp \n\ - .end _start \n\ - /* FALLTHRU */ \n\ - .globl _dl_start_user \n\ - .ent _dl_start_user \n\ -_dl_start_user: \n\ - .frame $31,0,$31,0 \n\ - .prologue 0 \n\ - /* Save the user entry point address in s0. */ \n\ - mov $0, $9 \n\ - /* See if we were run as a command with the executable \n\ - file name as an extra leading argument. */ \n\ - ldah $1, _dl_skip_args($gp) !gprelhigh \n\ - ldl $1, _dl_skip_args($1) !gprellow \n\ - bne $1, $fixup_stack \n\ -$fixup_stack_ret: \n\ - /* The special initializer gets called with the stack \n\ - just as the application's entry point will see it; \n\ - it can switch stacks if it moves these contents \n\ - over. */ \n\ -" RTLD_START_SPECIAL_INIT " \n\ - /* Call _dl_init(_dl_loaded, argc, argv, envp) to run \n\ - initializers. */ \n\ - ldah $16, _rtld_local($gp) !gprelhigh \n\ - ldq $16, _rtld_local($16) !gprellow \n\ - ldq $17, 0($sp) \n\ - lda $18, 8($sp) \n\ - s8addq $17, 8, $19 \n\ - addq $19, $18, $19 \n\ - bsr $26, _dl_init !samegp \n\ - /* Pass our finalizer function to the user in $0. */ \n\ - ldah $0, _dl_fini($gp) !gprelhigh \n\ - lda $0, _dl_fini($0) !gprellow \n\ - /* Jump to the user's entry point. */ \n\ - mov $9, $27 \n\ - jmp ($9) \n\ -$fixup_stack: \n\ - /* Adjust the stack pointer to skip _dl_skip_args words.\n\ - This involves copying everything down, since the \n\ - stack pointer must always be 16-byte aligned. */ \n\ - ldah $7, __GI__dl_argv($gp) !gprelhigh \n\ - ldq $2, 0($sp) \n\ - ldq $5, __GI__dl_argv($7) !gprellow \n\ - subq $31, $1, $6 \n\ - subq $2, $1, $2 \n\ - s8addq $6, $5, $5 \n\ - mov $sp, $4 \n\ - s8addq $1, $sp, $3 \n\ - stq $2, 0($sp) \n\ - stq $5, __GI__dl_argv($7) !gprellow \n\ - /* Copy down argv. */ \n\ -0: ldq $5, 8($3) \n\ - addq $4, 8, $4 \n\ - addq $3, 8, $3 \n\ - stq $5, 0($4) \n\ - bne $5, 0b \n\ - /* Copy down envp. */ \n\ -1: ldq $5, 8($3) \n\ - addq $4, 8, $4 \n\ - addq $3, 8, $3 \n\ - stq $5, 0($4) \n\ - bne $5, 1b \n\ - /* Copy down auxiliary table. */ \n\ -2: ldq $5, 8($3) \n\ - ldq $6, 16($3) \n\ - addq $4, 16, $4 \n\ - addq $3, 16, $3 \n\ - stq $5, -8($4) \n\ - stq $6, 0($4) \n\ - bne $5, 2b \n\ - br $fixup_stack_ret \n\ - .end _dl_start_user \n\ - .set noat \n\ -.previous"); - -#ifndef RTLD_START_SPECIAL_INIT -#define RTLD_START_SPECIAL_INIT /* nothing */ -#endif - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry - or TLS variables, so undefined references should not be allowed - to define the value. - - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve - to one of the main executable's symbols, as for a COPY reloc. - This is unused on Alpha. */ - -# define elf_machine_type_class(type) \ - (((type) == R_ALPHA_JMP_SLOT \ - || (type) == R_ALPHA_DTPMOD64 \ - || (type) == R_ALPHA_DTPREL64 \ - || (type) == R_ALPHA_TPREL64) * ELF_RTYPE_CLASS_PLT) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_ALPHA_JMP_SLOT - -/* The alpha never uses Elf64_Rel relocations. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -/* We define an initialization functions. This is called very early in - * _dl_sysdep_start. */ -#define DL_PLATFORM_INIT dl_platform_init () - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ - if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') - /* Avoid an empty string which would disturb us. */ - GLRO(dl_platform) = NULL; -} - -/* Fix up the instructions of a PLT entry to invoke the function - rather than the dynamic linker. */ -static inline Elf64_Addr -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf64_Rela *reloc, - Elf64_Addr *got_addr, Elf64_Addr value) -{ - const Elf64_Rela *rela_plt; - Elf64_Word *plte; - long int edisp; - - /* Store the value we are going to load. */ - *got_addr = value; - - /* If this binary uses the read-only secure plt format, we're done. */ - if (map->l_info[DT_ALPHA(PLTRO)]) - return value; - - /* Otherwise we have to modify the plt entry in place to do the branch. */ - - /* Recover the PLT entry address by calculating reloc's index into the - .rela.plt, and finding that entry in the .plt. */ - rela_plt = (const Elf64_Rela *) D_PTR (map, l_info[DT_JMPREL]); - plte = (Elf64_Word *) (D_PTR (map, l_info[DT_PLTGOT]) + 32); - plte += 3 * (reloc - rela_plt); - - /* Find the displacement from the plt entry to the function. */ - edisp = (long int) (value - (Elf64_Addr)&plte[3]) / 4; - - if (edisp >= -0x100000 && edisp < 0x100000) - { - /* If we are in range, use br to perfect branch prediction and - elide the dependency on the address load. This case happens, - e.g., when a shared library call is resolved to the same library. */ - - int hi, lo; - hi = value - (Elf64_Addr)&plte[0]; - lo = (short int) hi; - hi = (hi - lo) >> 16; - - /* Emit "lda $27,lo($27)" */ - plte[1] = 0x237b0000 | (lo & 0xffff); - - /* Emit "br $31,function" */ - plte[2] = 0xc3e00000 | (edisp & 0x1fffff); - - /* Think about thread-safety -- the previous instructions must be - committed to memory before the first is overwritten. */ - __asm__ __volatile__("wmb" : : : "memory"); - - /* Emit "ldah $27,hi($27)" */ - plte[0] = 0x277b0000 | (hi & 0xffff); - } - else - { - /* Don't bother with the hint since we already know the hint is - wrong. Eliding it prevents the wrong page from getting pulled - into the cache. */ - - int hi, lo; - hi = (Elf64_Addr)got_addr - (Elf64_Addr)&plte[0]; - lo = (short)hi; - hi = (hi - lo) >> 16; - - /* Emit "ldq $27,lo($27)" */ - plte[1] = 0xa77b0000 | (lo & 0xffff); - - /* Emit "jmp $31,($27)" */ - plte[2] = 0x6bfb0000; - - /* Think about thread-safety -- the previous instructions must be - committed to memory before the first is overwritten. */ - __asm__ __volatile__("wmb" : : : "memory"); - - /* Emit "ldah $27,hi($27)" */ - plte[0] = 0x277b0000 | (hi & 0xffff); - } - - /* At this point, if we've been doing runtime resolution, Icache is dirty. - This will be taken care of in _dl_runtime_resolve. If instead we are - doing this as part of non-lazy startup relocation, that bit of code - hasn't made it into Icache yet, so there's nothing to clean up. */ - - return value; -} - -/* Return the final value of a plt relocation. */ -static inline Elf64_Addr -elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc, - Elf64_Addr value) -{ - return value + reloc->r_addend; -} - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER alpha_gnu_pltenter -#define ARCH_LA_PLTEXIT alpha_gnu_pltexit - -#endif /* !dl_machine_h */ - -#ifdef RESOLVE_MAP - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, - const Elf64_Rela *reloc, - const Elf64_Sym *sym, - const struct r_found_version *version, - void *const reloc_addr_arg, - int skip_ifunc) -{ - Elf64_Addr *const reloc_addr = reloc_addr_arg; - unsigned long int const r_type = ELF64_R_TYPE (reloc->r_info); - -#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED - /* This is defined in rtld.c, but nowhere in the static libc.a; make the - reference weak so static programs can still link. This declaration - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) - because rtld.c contains the common defn for _dl_rtld_map, which is - incompatible with a weak decl in the same file. */ - weak_extern (_dl_rtld_map); -#endif - - /* We cannot use a switch here because we cannot locate the switch - jump table until we've self-relocated. */ - -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC - if (__builtin_expect (r_type == R_ALPHA_RELATIVE, 0)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* Already done in dynamic linker. */ - if (map != &GL(dl_rtld_map)) -# endif - { - /* XXX Make some timings. Maybe it's preferable to test for - unaligned access and only do it the complex way if necessary. */ - Elf64_Addr reloc_addr_val; - - /* Load value without causing unaligned trap. */ - memcpy (&reloc_addr_val, reloc_addr_arg, 8); - reloc_addr_val += map->l_addr; - - /* Store value without causing unaligned trap. */ - memcpy (reloc_addr_arg, &reloc_addr_val, 8); - } - } - else -#endif - if (__builtin_expect (r_type == R_ALPHA_NONE, 0)) - return; - else - { - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - Elf64_Addr sym_value; - Elf64_Addr sym_raw_value; - - sym_raw_value = sym_value = reloc->r_addend; - if (sym_map) - { - sym_raw_value += sym->st_value; - sym_value = sym_raw_value + sym_map->l_addr; - } - - if (r_type == R_ALPHA_GLOB_DAT) - *reloc_addr = sym_value; -#ifdef RESOLVE_CONFLICT_FIND_MAP - /* In .gnu.conflict section, R_ALPHA_JMP_SLOT relocations have - R_ALPHA_JMP_SLOT in lower 8 bits and the remaining 24 bits - are .rela.plt index. */ - else if ((r_type & 0xff) == R_ALPHA_JMP_SLOT) - { - /* elf_machine_fixup_plt needs the map reloc_addr points into, - while in _dl_resolve_conflicts map is _dl_loaded. */ - RESOLVE_CONFLICT_FIND_MAP (map, reloc_addr); - reloc = ((const Elf64_Rela *) D_PTR (map, l_info[DT_JMPREL])) - + (r_type >> 8); - elf_machine_fixup_plt (map, 0, reloc, reloc_addr, sym_value); - } -#else - else if (r_type == R_ALPHA_JMP_SLOT) - elf_machine_fixup_plt (map, 0, reloc, reloc_addr, sym_value); -#endif -#ifndef RTLD_BOOTSTRAP - else if (r_type == R_ALPHA_REFQUAD) - { - /* Store value without causing unaligned trap. */ - memcpy (reloc_addr_arg, &sym_value, 8); - } -#endif - else if (r_type == R_ALPHA_DTPMOD64) - { -# ifdef RTLD_BOOTSTRAP - /* During startup the dynamic linker is always index 1. */ - *reloc_addr = 1; -# else - /* Get the information from the link map returned by the - resolv function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; -# endif - } - else if (r_type == R_ALPHA_DTPREL64) - { -# ifndef RTLD_BOOTSTRAP - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ - *reloc_addr = sym_raw_value; -# endif - } - else if (r_type == R_ALPHA_TPREL64) - { -# ifdef RTLD_BOOTSTRAP - *reloc_addr = sym_raw_value + map->l_tls_offset; -# else - if (sym_map) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = sym_raw_value + sym_map->l_tls_offset; - } -# endif - } - else - _dl_reloc_bad_type (map, r_type, 0); - } -} - -/* Let do-rel.h know that on Alpha if l_addr is 0, all RELATIVE relocs - can be skipped. */ -#define ELF_MACHINE_REL_RELATIVE 1 - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, - void *const reloc_addr_arg) -{ - /* XXX Make some timings. Maybe it's preferable to test for - unaligned access and only do it the complex way if necessary. */ - Elf64_Addr reloc_addr_val; - - /* Load value without causing unaligned trap. */ - memcpy (&reloc_addr_val, reloc_addr_arg, 8); - reloc_addr_val += l_addr; - - /* Store value without causing unaligned trap. */ - memcpy (reloc_addr_arg, &reloc_addr_val, 8); -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf64_Addr l_addr, const Elf64_Rela *reloc, - int skip_ifunc) -{ - Elf64_Addr * const reloc_addr = (void *)(l_addr + reloc->r_offset); - unsigned long int const r_type = ELF64_R_TYPE (reloc->r_info); - - if (r_type == R_ALPHA_JMP_SLOT) - { - /* Perform a RELATIVE reloc on the .got entry that transfers - to the .plt. */ - *reloc_addr += l_addr; - } - else if (r_type == R_ALPHA_NONE) - return; - else - _dl_reloc_bad_type (map, r_type, 1); -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/alpha/dl-procinfo.c b/sysdeps/alpha/dl-procinfo.c deleted file mode 100644 index 7a2e18a978..0000000000 --- a/sysdeps/alpha/dl-procinfo.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Data for Alpha version of processor capability information. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Aurelien Jarno , 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This information must be kept in sync with the _DL_PLATFORM_COUNT - definitions in procinfo.h. - - If anything should be added here check whether the size of each string - is still ok with the given array size. - - All the #ifdefs in the definitions are quite irritating but - necessary if we want to avoid duplicating the information. There - are three different modes: - - - PROCINFO_DECL is defined. This means we are only interested in - declarations. - - - PROCINFO_DECL is not defined: - - + if SHARED is defined the file is included in an array - initializer. The .element = { ... } syntax is needed. - - + if SHARED is not defined a normal array initialization is - needed. - */ - -#ifndef PROCINFO_CLASS -#define PROCINFO_CLASS -#endif - -#if !defined PROCINFO_DECL && defined SHARED - ._dl_alpha_platforms -#else -PROCINFO_CLASS const char _dl_alpha_platforms[5][5] -#endif -#ifndef PROCINFO_DECL -= { - "ev4", "ev5", "ev56", "ev6", "ev67" - } -#endif -#if !defined SHARED || defined PROCINFO_DECL -; -#else -, -#endif - -#undef PROCINFO_DECL -#undef PROCINFO_CLASS diff --git a/sysdeps/alpha/dl-procinfo.h b/sysdeps/alpha/dl-procinfo.h deleted file mode 100644 index ed7a66ee49..0000000000 --- a/sysdeps/alpha/dl-procinfo.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Alpha version of processor capability information handling macros. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Aurelien Jarno , 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _DL_PROCINFO_H -#define _DL_PROCINFO_H 1 - -#include - - -/* Mask to filter out platforms. */ -#define _DL_HWCAP_PLATFORM (-1ULL) - -#define _DL_PLATFORMS_COUNT 5 - -static inline int -__attribute__ ((unused, always_inline)) -_dl_string_platform (const char *str) -{ - int i; - - if (str != NULL) - for (i = 0; i < _DL_PLATFORMS_COUNT; ++i) - { - if (strcmp (str, GLRO(dl_alpha_platforms)[i]) == 0) - return i; - } - return -1; -}; - -/* We cannot provide a general printing function. */ -#define _dl_procinfo(type, word) -1 - -/* There are no hardware capabilities defined. */ -#define _dl_hwcap_string(idx) "" - -/* By default there is no important hardware capability. */ -#define HWCAP_IMPORTANT (0) - -/* We don't have any hardware capabilities. */ -#define _DL_HWCAP_COUNT 0 - -#define _dl_string_hwcap(str) (-1) - -#endif /* dl-procinfo.h */ diff --git a/sysdeps/alpha/dl-sysdep.h b/sysdeps/alpha/dl-sysdep.h deleted file mode 100644 index 67a90f1bd0..0000000000 --- a/sysdeps/alpha/dl-sysdep.h +++ /dev/null @@ -1,23 +0,0 @@ -/* System-specific settings for dynamic linker code. Alpha version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include_next - -/* _dl_argv cannot be attribute_relro, because _dl_start_user - might write into it after _dl_start returns. */ -#define DL_ARGV_NOT_RELRO 1 diff --git a/sysdeps/alpha/dl-tls.h b/sysdeps/alpha/dl-tls.h deleted file mode 100644 index cac369c9d3..0000000000 --- a/sysdeps/alpha/dl-tls.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. Alpha version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - -extern void *__tls_get_addr (tls_index *ti); diff --git a/sysdeps/alpha/dl-trampoline.S b/sysdeps/alpha/dl-trampoline.S deleted file mode 100644 index f527705d27..0000000000 --- a/sysdeps/alpha/dl-trampoline.S +++ /dev/null @@ -1,540 +0,0 @@ -/* PLT trampolines. Alpha version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .set noat - -.macro savei regno, offset - stq $\regno, \offset($30) - cfi_rel_offset(\regno, \offset) -.endm - -.macro savef regno, offset - stt $f\regno, \offset($30) - cfi_rel_offset(\regno+32, \offset) -.endm - - .align 4 - .globl _dl_runtime_resolve_new - .ent _dl_runtime_resolve_new - -#undef FRAMESIZE -#define FRAMESIZE 14*8 - -_dl_runtime_resolve_new: - .frame $30, FRAMESIZE, $26, 0 - .mask 0x4000000, 0 - - ldah $29, 0($27) !gpdisp!1 - lda $30, -FRAMESIZE($30) - stq $26, 0*8($30) - stq $16, 2*8($30) - - stq $17, 3*8($30) - lda $29, 0($29) !gpdisp!1 - stq $18, 4*8($30) - mov $28, $16 /* link_map from .got.plt */ - - stq $19, 5*8($30) - mov $25, $17 /* offset of reloc entry */ - stq $20, 6*8($30) - mov $26, $18 /* return address */ - - stq $21, 7*8($30) - stt $f16, 8*8($30) - stt $f17, 9*8($30) - stt $f18, 10*8($30) - - stt $f19, 11*8($30) - stt $f20, 12*8($30) - stt $f21, 13*8($30) - .prologue 2 - - bsr $26, _dl_fixup !samegp - mov $0, $27 - - ldq $26, 0*8($30) - ldq $16, 2*8($30) - ldq $17, 3*8($30) - ldq $18, 4*8($30) - ldq $19, 5*8($30) - ldq $20, 6*8($30) - ldq $21, 7*8($30) - ldt $f16, 8*8($30) - ldt $f17, 9*8($30) - ldt $f18, 10*8($30) - ldt $f19, 11*8($30) - ldt $f20, 12*8($30) - ldt $f21, 13*8($30) - lda $30, FRAMESIZE($30) - jmp $31, ($27), 0 - .end _dl_runtime_resolve_new - - .globl _dl_runtime_profile_new - .type _dl_runtime_profile_new, @function - -#undef FRAMESIZE -#define FRAMESIZE 20*8 - - /* We save the registers in a different order than desired by - .mask/.fmask, so we have to use explicit cfi directives. */ - cfi_startproc - -_dl_runtime_profile_new: - ldah $29, 0($27) !gpdisp!2 - lda $30, -FRAMESIZE($30) - savei 26, 0*8 - stq $16, 2*8($30) - - stq $17, 3*8($30) - lda $29, 0($29) !gpdisp!2 - stq $18, 4*8($30) - lda $1, FRAMESIZE($30) /* incoming sp value */ - - stq $1, 1*8($30) - stq $19, 5*8($30) - stq $20, 6*8($30) - mov $28, $16 /* link_map from .got.plt */ - - stq $21, 7*8($30) - mov $25, $17 /* offset of reloc entry */ - stt $f16, 8*8($30) - mov $26, $18 /* return address */ - - stt $f17, 9*8($30) - mov $30, $19 /* La_alpha_regs address */ - stt $f18, 10*8($30) - lda $20, 14*8($30) /* framesize address */ - - stt $f19, 11*8($30) - stt $f20, 12*8($30) - stt $f21, 13*8($30) - stq $28, 16*8($30) - stq $25, 17*8($30) - - bsr $26, _dl_profile_fixup !samegp - mov $0, $27 - - /* Discover if we're wrapping this call. */ - ldq $18, 14*8($30) - bge $18, 1f - - ldq $26, 0*8($30) - ldq $16, 2*8($30) - ldq $17, 3*8($30) - ldq $18, 4*8($30) - ldq $19, 5*8($30) - ldq $20, 6*8($30) - ldq $21, 7*8($30) - ldt $f16, 8*8($30) - ldt $f17, 9*8($30) - ldt $f18, 10*8($30) - ldt $f19, 11*8($30) - ldt $f20, 12*8($30) - ldt $f21, 13*8($30) - lda $30, FRAMESIZE($30) - jmp $31, ($27), 0 - -1: - /* Create a frame pointer and allocate a new argument frame. */ - savei 15, 15*8 - mov $30, $15 - cfi_def_cfa_register (15) - addq $18, 15, $18 - bic $18, 15, $18 - subq $30, $18, $30 - - /* Save the call destination around memcpy. */ - stq $0, 14*8($30) - - /* Copy the stack arguments into place. */ - lda $16, 0($30) - lda $17, FRAMESIZE($15) - jsr $26, memcpy - ldgp $29, 0($26) - - /* Reload the argument registers. */ - ldq $27, 14*8($30) - ldq $16, 2*8($15) - ldq $17, 3*8($15) - ldq $18, 4*8($15) - ldq $19, 5*8($15) - ldq $20, 6*8($15) - ldq $21, 7*8($15) - ldt $f16, 8*8($15) - ldt $f17, 9*8($15) - ldt $f18, 10*8($15) - ldt $f19, 11*8($15) - ldt $f20, 12*8($15) - ldt $f21, 13*8($15) - - jsr $26, ($27), 0 - ldgp $29, 0($26) - - /* Set up for call to _dl_call_pltexit. */ - ldq $16, 16*8($15) - ldq $17, 17*8($15) - stq $0, 16*8($15) - lda $18, 0($15) - stq $1, 17*8($15) - lda $19, 16*8($15) - stt $f0, 18*8($15) - stt $f1, 19*8($15) - bsr $26, _dl_call_pltexit !samegp - - mov $15, $30 - cfi_def_cfa_register (30) - ldq $26, 0($30) - ldq $15, 15*8($30) - lda $30, FRAMESIZE($30) - ret - - cfi_endproc - .size _dl_runtime_profile_new, .-_dl_runtime_profile_new - - .align 4 - .globl _dl_runtime_resolve_old - .ent _dl_runtime_resolve_old - -#undef FRAMESIZE -#define FRAMESIZE 44*8 - -_dl_runtime_resolve_old: - lda $30, -FRAMESIZE($30) - .frame $30, FRAMESIZE, $26 - /* Preserve all registers that C normally doesn't. */ - stq $26, 0*8($30) - stq $0, 1*8($30) - stq $1, 2*8($30) - stq $2, 3*8($30) - stq $3, 4*8($30) - stq $4, 5*8($30) - stq $5, 6*8($30) - stq $6, 7*8($30) - stq $7, 8*8($30) - stq $8, 9*8($30) - stq $16, 10*8($30) - stq $17, 11*8($30) - stq $18, 12*8($30) - stq $19, 13*8($30) - stq $20, 14*8($30) - stq $21, 15*8($30) - stq $22, 16*8($30) - stq $23, 17*8($30) - stq $24, 18*8($30) - stq $25, 19*8($30) - stq $29, 20*8($30) - stt $f0, 21*8($30) - stt $f1, 22*8($30) - stt $f10, 23*8($30) - stt $f11, 24*8($30) - stt $f12, 25*8($30) - stt $f13, 26*8($30) - stt $f14, 27*8($30) - stt $f15, 28*8($30) - stt $f16, 29*8($30) - stt $f17, 30*8($30) - stt $f18, 31*8($30) - stt $f19, 32*8($30) - stt $f20, 33*8($30) - stt $f21, 34*8($30) - stt $f22, 35*8($30) - stt $f23, 36*8($30) - stt $f24, 37*8($30) - stt $f25, 38*8($30) - stt $f26, 39*8($30) - stt $f27, 40*8($30) - stt $f28, 41*8($30) - stt $f29, 42*8($30) - stt $f30, 43*8($30) - .mask 0x27ff01ff, -FRAMESIZE - .fmask 0xfffffc03, -FRAMESIZE+21*8 - /* Set up our GP. */ - br $29, .+4 - ldgp $29, 0($29) - .prologue 0 - /* Set up the arguments for _dl_fixup: - $16 = link_map out of plt0 - $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24 - $18 = return address - */ - subq $28, $27, $17 - ldq $16, 8($27) - subq $17, 20, $17 - mov $26, $18 - addq $17, $17, $17 - bsr $26, _dl_fixup !samegp - - /* Move the destination address into position. */ - mov $0, $27 - /* Restore program registers. */ - ldq $26, 0*8($30) - ldq $0, 1*8($30) - ldq $1, 2*8($30) - ldq $2, 3*8($30) - ldq $3, 4*8($30) - ldq $4, 5*8($30) - ldq $5, 6*8($30) - ldq $6, 7*8($30) - ldq $7, 8*8($30) - ldq $8, 9*8($30) - ldq $16, 10*8($30) - ldq $17, 11*8($30) - ldq $18, 12*8($30) - ldq $19, 13*8($30) - ldq $20, 14*8($30) - ldq $21, 15*8($30) - ldq $22, 16*8($30) - ldq $23, 17*8($30) - ldq $24, 18*8($30) - ldq $25, 19*8($30) - ldq $29, 20*8($30) - ldt $f0, 21*8($30) - ldt $f1, 22*8($30) - ldt $f10, 23*8($30) - ldt $f11, 24*8($30) - ldt $f12, 25*8($30) - ldt $f13, 26*8($30) - ldt $f14, 27*8($30) - ldt $f15, 28*8($30) - ldt $f16, 29*8($30) - ldt $f17, 30*8($30) - ldt $f18, 31*8($30) - ldt $f19, 32*8($30) - ldt $f20, 33*8($30) - ldt $f21, 34*8($30) - ldt $f22, 35*8($30) - ldt $f23, 36*8($30) - ldt $f24, 37*8($30) - ldt $f25, 38*8($30) - ldt $f26, 39*8($30) - ldt $f27, 40*8($30) - ldt $f28, 41*8($30) - ldt $f29, 42*8($30) - ldt $f30, 43*8($30) - /* Flush the Icache after having modified the .plt code. */ - imb - /* Clean up and turn control to the destination */ - lda $30, FRAMESIZE($30) - jmp $31, ($27) - - .end _dl_runtime_resolve_old - - .globl _dl_runtime_profile_old - .usepv _dl_runtime_profile_old, no - .type _dl_runtime_profile_old, @function - - /* We save the registers in a different order than desired by - .mask/.fmask, so we have to use explicit cfi directives. */ - cfi_startproc - -#undef FRAMESIZE -#define FRAMESIZE 50*8 - - .align 4 -_dl_runtime_profile_old: - lda $30, -FRAMESIZE($30) - cfi_adjust_cfa_offset (FRAMESIZE) - - /* Preserve all argument registers. This also constructs the - La_alpha_regs structure. */ - savei 26, 0*8 - savei 16, 2*8 - savei 17, 3*8 - savei 18, 4*8 - savei 19, 5*8 - savei 20, 6*8 - savei 21, 7*8 - lda $16, FRAMESIZE($30) - savef 16, 8*8 - savef 17, 9*8 - savef 18, 10*8 - savef 19, 11*8 - savef 20, 12*8 - savef 21, 13*8 - stq $16, 1*8($30) - - /* Preserve all registers that C normally doesn't. */ - savei 0, 14*8 - savei 1, 15*8 - savei 2, 16*8 - savei 3, 17*8 - savei 4, 18*8 - savei 5, 19*8 - savei 6, 20*8 - savei 7, 21*8 - savei 8, 22*8 - savei 22, 23*8 - savei 23, 24*8 - savei 24, 25*8 - savei 25, 26*8 - savei 29, 27*8 - savef 0, 28*8 - savef 1, 29*8 - savef 10, 30*8 - savef 11, 31*8 - savef 12, 32*8 - savef 13, 33*8 - savef 14, 34*8 - savef 15, 35*8 - savef 22, 36*8 - savef 23, 37*8 - savef 24, 38*8 - savef 25, 39*8 - savef 26, 40*8 - savef 27, 41*8 - savef 28, 42*8 - savef 29, 43*8 - savef 30, 44*8 - - /* Set up our GP. */ - br $29, .+4 - ldgp $29, 0($29) - - /* Set up the arguments for _dl_profile_fixup: - $16 = link_map out of plt0 - $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24 - $18 = return address - $19 = La_alpha_regs address - $20 = framesize address - */ - subq $28, $27, $17 - ldq $16, 8($27) - subq $17, 20, $17 - mov $26, $18 - addq $17, $17, $17 - lda $19, 0($30) - lda $20, 45*8($30) - stq $16, 48*8($30) - stq $17, 49*8($30) - - bsr $26, _dl_profile_fixup !samegp - - /* Discover if we're wrapping this call. */ - ldq $18, 45*8($30) - bge $18, 1f - - /* Move the destination address into position. */ - mov $0, $27 - /* Restore program registers. */ - ldq $26, 0*8($30) - ldq $16, 2*8($30) - ldq $17, 3*8($30) - ldq $18, 4*8($30) - ldq $19, 5*8($30) - ldq $20, 6*8($30) - ldq $21, 7*8($30) - ldt $f16, 8*8($30) - ldt $f17, 9*8($30) - ldt $f18, 10*8($30) - ldt $f19, 11*8($30) - ldt $f20, 12*8($30) - ldt $f21, 13*8($30) - ldq $0, 14*8($30) - ldq $1, 15*8($30) - ldq $2, 16*8($30) - ldq $3, 17*8($30) - ldq $4, 18*8($30) - ldq $5, 19*8($30) - ldq $6, 20*8($30) - ldq $7, 21*8($30) - ldq $8, 22*8($30) - ldq $22, 23*8($30) - ldq $23, 24*8($30) - ldq $24, 25*8($30) - ldq $25, 26*8($30) - ldq $29, 27*8($30) - ldt $f0, 28*8($30) - ldt $f1, 29*8($30) - ldt $f10, 30*8($30) - ldt $f11, 31*8($30) - ldt $f12, 32*8($30) - ldt $f13, 33*8($30) - ldt $f14, 34*8($30) - ldt $f15, 35*8($30) - ldt $f22, 36*8($30) - ldt $f23, 37*8($30) - ldt $f24, 38*8($30) - ldt $f25, 39*8($30) - ldt $f26, 40*8($30) - ldt $f27, 41*8($30) - ldt $f28, 42*8($30) - ldt $f29, 43*8($30) - ldt $f30, 44*8($30) - - /* Clean up and turn control to the destination. */ - lda $30, FRAMESIZE($30) - jmp $31, ($27) - -1: - /* Create a frame pointer and allocate a new argument frame. */ - savei 15, 45*8 - mov $30, $15 - cfi_def_cfa_register (15) - addq $18, 15, $18 - bic $18, 15, $18 - subq $30, $18, $30 - - /* Save the call destination around memcpy. */ - stq $0, 46*8($30) - - /* Copy the stack arguments into place. */ - lda $16, 0($30) - lda $17, FRAMESIZE($15) - jsr $26, memcpy - ldgp $29, 0($26) - - /* Reload the argument registers. */ - ldq $27, 46*8($30) - ldq $16, 2*8($15) - ldq $17, 3*8($15) - ldq $18, 4*8($15) - ldq $19, 5*8($15) - ldq $20, 6*8($15) - ldq $21, 7*8($15) - ldt $f16, 8*8($15) - ldt $f17, 9*8($15) - ldt $f18, 10*8($15) - ldt $f19, 11*8($15) - ldt $f20, 12*8($15) - ldt $f21, 13*8($15) - - jsr $26, ($27), 0 - ldgp $29, 0($26) - - /* Set up for call to _dl_call_pltexit. */ - ldq $16, 48*8($15) - ldq $17, 49*8($15) - stq $0, 46*8($15) - lda $18, 0($15) - stq $1, 47*8($15) - lda $19, 46*8($15) - stt $f0, 48*8($15) - stt $f1, 49*8($15) - bsr $26, _dl_call_pltexit !samegp - - mov $15, $30 - cfi_def_cfa_register (30) - ldq $26, 0($30) - ldq $15, 45*8($30) - lda $30, FRAMESIZE($30) - ret - - cfi_endproc - .size _dl_runtime_profile_old, .-_dl_runtime_profile_old diff --git a/sysdeps/alpha/ffs.S b/sysdeps/alpha/ffs.S deleted file mode 100644 index 8cd7e5123a..0000000000 --- a/sysdeps/alpha/ffs.S +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@cs.arizona.edu). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Finds the first bit set in an integer. Optimized for the Alpha - architecture. */ - -#include - - .set noreorder - .set noat - - -ENTRY(__ffs) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 - zap $16, 0xF0, $16 - br $ffsl..ng -#else - .prologue 0 - zap $16, 0xF0, $16 - # FALLTHRU -#endif -END(__ffs) - - .align 4 -ENTRY(ffsl) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -$ffsl..ng: -#else - .prologue 0 -#endif - not $16, $1 # e0 : - ldi $2, -1 # .. e1 : - cmpbge $1, $2, $3 # e0 : bit N == 1 for byte N == 0 - clr $0 # .. e1 : - addq $3, 1, $4 # e0 : - bic $4, $3, $3 # e1 : bit N == 1 for first byte N != 0 - and $3, 0xF0, $4 # e0 : - and $3, 0xCC, $5 # .. e1 : - and $3, 0xAA, $6 # e0 : - cmovne $4, 4, $0 # .. e1 : - cmovne $5, 2, $5 # e0 : - cmovne $6, 1, $6 # .. e1 : - addl $0, $5, $0 # e0 : - addl $0, $6, $0 # e1 : $0 == N - extbl $16, $0, $1 # e0 : $1 == byte N - ldi $2, 1 # .. e1 : - negq $1, $3 # e0 : - and $3, $1, $3 # e1 : bit N == least bit set of byte N - and $3, 0xF0, $4 # e0 : - and $3, 0xCC, $5 # .. e1 : - and $3, 0xAA, $6 # e0 : - cmovne $4, 5, $2 # .. e1 : - cmovne $5, 2, $5 # e0 : - cmovne $6, 1, $6 # .. e1 : - s8addl $0, $2, $0 # e0 : mult byte ofs by 8 and sum - addl $5, $6, $5 # .. e1 : - addl $0, $5, $0 # e0 : - nop # .. e1 : - cmoveq $16, 0, $0 # e0 : trap input == 0 case. - ret # .. e1 : 18 - -END(ffsl) - -weak_alias (__ffs, ffs) -libc_hidden_def (__ffs) -libc_hidden_builtin_def (ffs) -weak_extern (ffsl) -weak_alias (ffsl, ffsll) diff --git a/sysdeps/alpha/ffsll.S b/sysdeps/alpha/ffsll.S deleted file mode 100644 index b2f46d899c..0000000000 --- a/sysdeps/alpha/ffsll.S +++ /dev/null @@ -1 +0,0 @@ -/* This function is defined in ffs.S. */ diff --git a/sysdeps/alpha/fpu/Versions b/sysdeps/alpha/fpu/Versions deleted file mode 100644 index c9b0e03a91..0000000000 --- a/sysdeps/alpha/fpu/Versions +++ /dev/null @@ -1,23 +0,0 @@ -libc { - GLIBC_2.0 { - # functions used in other libraries - __ieee_get_fp_control; __ieee_set_fp_control; - } -} -libm { - GLIBC_2.3.4 { - # functions implementing old complex float abi - __c1_cabsf; __c1_cacosf; __c1_cacoshf; __c1_cargf; __c1_casinf; - __c1_casinhf; __c1_catanf; __c1_catanhf; __c1_ccosf; __c1_ccoshf; - __c1_cexpf; __c1_cimagf; __c1_clog10f; __c1_clogf; __c1_conjf; - __c1_cpowf; __c1_cprojf; __c1_crealf; __c1_csinf; __c1_csinhf; - __c1_csqrtf; __c1_ctanf; __c1_ctanhf; - - # functions implementing new complex float abi - cabsf; cacosf; cacoshf; cargf; casinf; - casinhf; catanf; catanhf; ccosf; ccoshf; - cexpf; cimagf; clog10f; clogf; conjf; - cpowf; cprojf; crealf; csinf; csinhf; - csqrtf; ctanf; ctanhf; - } -} diff --git a/sysdeps/alpha/fpu/bits/fenv.h b/sysdeps/alpha/fpu/bits/fenv.h deleted file mode 100644 index 94ca4a4da0..0000000000 --- a/sysdeps/alpha/fpu/bits/fenv.h +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - - -/* Define the bits representing the exception. - - Note that these are the bit positions as defined by the OSF/1 - ieee_{get,set}_control_word interface and not by the hardware fpcr. - - See the Alpha Architecture Handbook section 4.7.7.3 for details, - but in summary, trap shadows mean the hardware register can acquire - extra exception bits so for proper IEEE support the tracking has to - be done in software -- in this case with kernel support. - - As to why the system call interface isn't in the same format as - the hardware register, only those crazy folks at DEC can tell you. */ - -enum - { -#ifdef __USE_GNU - FE_DENORMAL = -#define FE_DENORMAL (1 << 22) - FE_DENORMAL, -#endif - - FE_INEXACT = -#define FE_INEXACT (1 << 21) - FE_INEXACT, - - FE_UNDERFLOW = -#define FE_UNDERFLOW (1 << 20) - FE_UNDERFLOW, - - FE_OVERFLOW = -#define FE_OVERFLOW (1 << 19) - FE_OVERFLOW, - - FE_DIVBYZERO = -#define FE_DIVBYZERO (1 << 18) - FE_DIVBYZERO, - - FE_INVALID = -#define FE_INVALID (1 << 17) - FE_INVALID, - - FE_ALL_EXCEPT = -#define FE_ALL_EXCEPT (0x3f << 17) - FE_ALL_EXCEPT - }; - -/* Alpha chips support all four defined rouding modes. - - Note that code must be compiled to use dynamic rounding (/d) instructions - to see these changes. For gcc this is -mfp-rounding-mode=d; for DEC cc - this is -fprm d. The default for both is static rounding to nearest. - - These are shifted down 58 bits from the hardware fpcr because the - functions are declared to take integers. */ - -enum - { - FE_TOWARDZERO = -#define FE_TOWARDZERO 0 - FE_TOWARDZERO, - - FE_DOWNWARD = -#define FE_DOWNWARD 1 - FE_DOWNWARD, - - FE_TONEAREST = -#define FE_TONEAREST 2 - FE_TONEAREST, - - FE_UPWARD = -#define FE_UPWARD 3 - FE_UPWARD, - }; - -#ifdef __USE_GNU -/* On later hardware, and later kernels for earlier hardware, we can forcibly - underflow denormal inputs and outputs. This can speed up certain programs - significantly, usually without affecting accuracy. */ -enum - { - FE_MAP_DMZ = 1UL << 12, /* Map denorm inputs to zero */ -#define FE_MAP_DMZ FE_MAP_DMZ - - FE_MAP_UMZ = 1UL << 13, /* Map underflowed outputs to zero */ -#define FE_MAP_UMZ FE_MAP_UMZ - }; -#endif - -/* Type representing exception flags. */ -typedef unsigned long int fexcept_t; - -/* Type representing floating-point environment. */ -typedef unsigned long int fenv_t; - -/* If the default argument is used we use this value. Note that due to - architecture-specified page mappings, no user-space pointer will ever - have its two high bits set. Co-opt one. */ -#define FE_DFL_ENV ((const fenv_t *) 0x8800000000000000UL) - -#ifdef __USE_GNU -/* Floating-point environment where none of the exceptions are masked. */ -# define FE_NOMASK_ENV ((const fenv_t *) 0x880000000000003eUL) - -/* Floating-point environment with (processor-dependent) non-IEEE floating - point. In this case, mapping denormals to zero. */ -# define FE_NONIEEE_ENV ((const fenv_t *) 0x8800000000003000UL) -#endif - -/* The system calls to talk to the kernel's FP code. */ -extern unsigned long int __ieee_get_fp_control (void) __THROW; -extern void __ieee_set_fp_control (unsigned long int __value) __THROW; - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef unsigned long int femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) 0x8800000000000000UL) -#endif diff --git a/sysdeps/alpha/fpu/bits/mathinline.h b/sysdeps/alpha/fpu/bits/mathinline.h deleted file mode 100644 index 00c8c42a83..0000000000 --- a/sysdeps/alpha/fpu/bits/mathinline.h +++ /dev/null @@ -1,125 +0,0 @@ -/* Inline math functions for Alpha. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#ifndef __extern_inline -# define __MATH_INLINE __inline -#else -# define __MATH_INLINE __extern_inline -#endif - -#if defined __USE_ISOC99 && defined __GNUC__ && !__GNUC_PREREQ(3,0) -# undef isgreater -# undef isgreaterequal -# undef isless -# undef islessequal -# undef islessgreater -# undef isunordered -# define isunordered(u, v) \ - (__extension__ \ - ({ double __r, __u = (u), __v = (v); \ - __asm ("cmptun/su %1,%2,%0\n\ttrapb" \ - : "=&f" (__r) : "f" (__u), "f"(__v)); \ - __r != 0; })) -#endif /* ISO C99 */ - -#if (!defined __NO_MATH_INLINES || defined __LIBC_INTERNAL_MATH_INLINES) \ - && defined __OPTIMIZE__ - -#if !__GNUC_PREREQ (4, 0) -# define __inline_copysign(NAME, TYPE) \ -__MATH_INLINE TYPE \ -__NTH (NAME (TYPE __x, TYPE __y)) \ -{ \ - TYPE __z; \ - __asm ("cpys %1, %2, %0" : "=f" (__z) : "f" (__y), "f" (__x)); \ - return __z; \ -} - -__inline_copysign (__copysignf, float) -__inline_copysign (copysignf, float) -__inline_copysign (__copysign, double) -__inline_copysign (copysign, double) - -# undef __inline_copysign -#endif - - -#if !__GNUC_PREREQ (2, 8) -# define __inline_fabs(NAME, TYPE) \ -__MATH_INLINE TYPE \ -__NTH (NAME (TYPE __x)) \ -{ \ - TYPE __z; \ - __asm ("cpys $f31, %1, %0" : "=f" (__z) : "f" (__x)); \ - return __z; \ -} - -__inline_fabs (__fabsf, float) -__inline_fabs (fabsf, float) -__inline_fabs (__fabs, double) -__inline_fabs (fabs, double) - -# undef __inline_fabs -#endif - -#ifdef __USE_ISOC99 - -/* Test for negative number. Used in the signbit() macro. */ -__MATH_INLINE int -__NTH (__signbitf (float __x)) -{ -#if !__GNUC_PREREQ (4, 0) - __extension__ union { float __f; int __i; } __u = { __f: __x }; - return __u.__i < 0; -#else - return __builtin_signbitf (__x); -#endif -} - -__MATH_INLINE int -__NTH (__signbit (double __x)) -{ -#if !__GNUC_PREREQ (4, 0) - __extension__ union { double __d; long __i; } __u = { __d: __x }; - return __u.__i < 0; -#else - return __builtin_signbit (__x); -#endif -} - -__MATH_INLINE int -__NTH (__signbitl (long double __x)) -{ -#if !__GNUC_PREREQ (4, 0) - __extension__ union { - long double __d; - long __i[sizeof(long double)/sizeof(long)]; - } __u = { __d: __x }; - return __u.__i[sizeof(long double)/sizeof(long) - 1] < 0; -#else - return __builtin_signbitl (__x); -#endif -} -#endif /* C99 */ - -#endif /* __NO_MATH_INLINES */ diff --git a/sysdeps/alpha/fpu/cabsf.c b/sysdeps/alpha/fpu/cabsf.c deleted file mode 100644 index 2ffd6a327d..0000000000 --- a/sysdeps/alpha/fpu/cabsf.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Return the complex absolute value of float complex value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __cabsf __cabsf_not_defined -#define cabsf cabsf_not_defined - -#include -#include -#include "cfloat-compat.h" - -#undef __cabsf -#undef cabsf - -float -__c1_cabsf (c1_cfloat_decl (z)) -{ - return __hypotf (c1_cfloat_real (z), c1_cfloat_imag (z)); -} - -float -__c2_cabsf (c2_cfloat_decl (z)) -{ - return __hypotf (c2_cfloat_real (z), c2_cfloat_imag (z)); -} - -cfloat_versions (cabsf); diff --git a/sysdeps/alpha/fpu/cargf.c b/sysdeps/alpha/fpu/cargf.c deleted file mode 100644 index 6bff8a57f9..0000000000 --- a/sysdeps/alpha/fpu/cargf.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Compute argument of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __cargf __cargf_not_defined -#define cargf cargf_not_defined - -#include -#include -#include "cfloat-compat.h" - -#undef __cargf -#undef cargf - -float -__c1_cargf (c1_cfloat_decl (x)) -{ - return __atan2f (c1_cfloat_imag (x), c1_cfloat_real (x)); -} - -float -__c2_cargf (c2_cfloat_decl (x)) -{ - return __atan2f (c2_cfloat_imag (x), c2_cfloat_real (x)); -} - -cfloat_versions (cargf); diff --git a/sysdeps/alpha/fpu/cfloat-compat.h b/sysdeps/alpha/fpu/cfloat-compat.h deleted file mode 100644 index 484cdd0df2..0000000000 --- a/sysdeps/alpha/fpu/cfloat-compat.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Compatibility macros for old and new Alpha complex float ABI. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* The behaviour of complex float changed between GCC 3.3 and 3.4. - - In 3.3 and before (below, complex version 1, or "c1"), complex float - values were packed into one floating point register. - - In 3.4 and later (below, complex version 2, or "c2"), GCC changed to - follow the official Tru64 ABI, which passes the components of a complex - as separate parameters. */ - -typedef union { double d; _Complex float cf; } c1_compat; -# define c1_cfloat_decl(x) double x -# define c1_cfloat_real(x) __real__ c1_cfloat_value (x) -# define c1_cfloat_imag(x) __imag__ c1_cfloat_value (x) -# define c1_cfloat_value(x) (((c1_compat *)(void *)&x)->cf) -# define c1_cfloat_rettype double -# define c1_cfloat_return(x) ({ c1_compat _; _.cf = (x); _.d; }) - -# define c2_cfloat_decl(x) _Complex float x -# define c2_cfloat_real(x) __real__ x -# define c2_cfloat_imag(x) __imag__ x -# define c2_cfloat_value(x) x -# define c2_cfloat_rettype _Complex float -# define c2_cfloat_return(x) x - -/* Get the proper symbol versions defined for each function. */ - -#include - -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_3_4) -#define cfloat_versions_compat(func) \ - compat_symbol (libm, __c1_##func, func, GLIBC_2_1) -#else -#define cfloat_versions_compat(func) -#endif - -#define cfloat_versions(func) \ - cfloat_versions_compat(func); \ - versioned_symbol (libm, __c2_##func, func, GLIBC_2_3_4); \ - extern typeof(__c2_##func) __##func attribute_hidden; \ - strong_alias (__c2_##func, __##func) diff --git a/sysdeps/alpha/fpu/cimagf.c b/sysdeps/alpha/fpu/cimagf.c deleted file mode 100644 index 6318f12297..0000000000 --- a/sysdeps/alpha/fpu/cimagf.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Return imaginary part of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __cimagf __cimagf_not_defined -#define cimagf cimagf_not_defined - -#include -#include "cfloat-compat.h" - -#undef __cimagf -#undef cimagf - -float -__c1_cimagf (c1_cfloat_decl (z)) -{ - return c1_cfloat_imag (z); -} - -float -__c2_cimagf (c2_cfloat_decl (z)) -{ - return c2_cfloat_imag (z); -} - -cfloat_versions (cimagf); diff --git a/sysdeps/alpha/fpu/conjf.c b/sysdeps/alpha/fpu/conjf.c deleted file mode 100644 index 802898a5cb..0000000000 --- a/sysdeps/alpha/fpu/conjf.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Return complex conjugate of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __conjf __conjf_not_defined -#define conjf conjf_not_defined - -#include -#include "cfloat-compat.h" - -#undef __conjf -#undef conjf - -c1_cfloat_rettype -__c1_conjf (c1_cfloat_decl (z)) -{ - _Complex float r = ~ c1_cfloat_value (z); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_conjf (c2_cfloat_decl (z)) -{ - _Complex float r = ~ c2_cfloat_value (z); - return c2_cfloat_return (r); -} - -cfloat_versions (conjf); diff --git a/sysdeps/alpha/fpu/crealf.c b/sysdeps/alpha/fpu/crealf.c deleted file mode 100644 index fdaaf2e59e..0000000000 --- a/sysdeps/alpha/fpu/crealf.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Return real part of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __crealf __crealf_not_defined -#define crealf crealf_not_defined - -#include -#include "cfloat-compat.h" - -#undef __crealf -#undef crealf - -float -__c1_crealf (c1_cfloat_decl (z)) -{ - return c1_cfloat_real (z); -} - -float -__c2_crealf (c2_cfloat_decl (z)) -{ - return c2_cfloat_real (z); -} - -cfloat_versions (crealf); diff --git a/sysdeps/alpha/fpu/e_sqrt.c b/sysdeps/alpha/fpu/e_sqrt.c deleted file mode 100644 index ec9d0d12f2..0000000000 --- a/sysdeps/alpha/fpu/e_sqrt.c +++ /dev/null @@ -1,187 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@cs.arizona.edu). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -#if !defined(_IEEE_FP_INEXACT) - -/* - * This version is much faster than generic sqrt implementation, but - * it doesn't handle the inexact flag. It doesn't handle exceptional - * values either, but will defer to the full ieee754_sqrt routine which - * can. - */ - -/* Careful with rearranging this without consulting the assembly below. */ -const static struct sqrt_data_struct { - unsigned long dn, up, half, almost_three_half; - unsigned long one_and_a_half, two_to_minus_30, one, nan; - const int T2[64]; -} sqrt_data __attribute__((used)) = { - 0x3fefffffffffffff, /* __dn = nextafter(1,-Inf) */ - 0x3ff0000000000001, /* __up = nextafter(1,+Inf) */ - 0x3fe0000000000000, /* half */ - 0x3ff7ffffffc00000, /* almost_three_half = 1.5-2^-30 */ - 0x3ff8000000000000, /* one_and_a_half */ - 0x3e10000000000000, /* two_to_minus_30 */ - 0x3ff0000000000000, /* one */ - 0xffffffffffffffff, /* nan */ - - { 0x1500, 0x2ef8, 0x4d67, 0x6b02, 0x87be, 0xa395, 0xbe7a, 0xd866, - 0xf14a, 0x1091b,0x11fcd,0x13552,0x14999,0x15c98,0x16e34,0x17e5f, - 0x18d03,0x19a01,0x1a545,0x1ae8a,0x1b5c4,0x1bb01,0x1bfde,0x1c28d, - 0x1c2de,0x1c0db,0x1ba73,0x1b11c,0x1a4b5,0x1953d,0x18266,0x16be0, - 0x1683e,0x179d8,0x18a4d,0x19992,0x1a789,0x1b445,0x1bf61,0x1c989, - 0x1d16d,0x1d77b,0x1dddf,0x1e2ad,0x1e5bf,0x1e6e8,0x1e654,0x1e3cd, - 0x1df2a,0x1d635,0x1cb16,0x1be2c,0x1ae4e,0x19bde,0x1868e,0x16e2e, - 0x1527f,0x1334a,0x11051,0xe951, 0xbe01, 0x8e0d, 0x5924, 0x1edd } -}; - -asm ("\ - /* Define offsets into the structure defined in C above. */ \n\ - $DN = 0*8 \n\ - $UP = 1*8 \n\ - $HALF = 2*8 \n\ - $ALMOST_THREE_HALF = 3*8 \n\ - $NAN = 7*8 \n\ - $T2 = 8*8 \n\ - \n\ - /* Stack variables. */ \n\ - $K = 0 \n\ - $Y = 8 \n\ - \n\ - .text \n\ - .align 5 \n\ - .globl __ieee754_sqrt \n\ - .ent __ieee754_sqrt \n\ -__ieee754_sqrt: \n\ - ldgp $29, 0($27) \n\ - subq $sp, 16, $sp \n\ - .frame $sp, 16, $26, 0\n" -#ifdef PROF -" lda $28, _mcount \n\ - jsr $28, ($28), _mcount\n" -#endif -" .prologue 1 \n\ - \n\ - .align 4 \n\ - stt $f16, $K($sp) # e0 : \n\ - mult $f31, $f31, $f31 # .. fm : \n\ - lda $4, sqrt_data # e0 : \n\ - fblt $f16, $fixup # .. fa : \n\ - \n\ - ldah $2, 0x5fe8 # e0 : \n\ - ldq $3, $K($sp) # .. e1 : \n\ - ldt $f12, $HALF($4) # e0 : \n\ - ldt $f18, $ALMOST_THREE_HALF($4) # .. e1 : \n\ - \n\ - sll $3, 52, $5 # e0 : \n\ - lda $6, 0x7fd # .. e1 : \n\ - fnop # .. fa : \n\ - fnop # .. fm : \n\ - \n\ - subq $5, 1, $5 # e1 : \n\ - srl $3, 33, $1 # .. e0 : \n\ - cmpule $5, $6, $5 # e0 : \n\ - beq $5, $fixup # .. e1 : \n\ - \n\ - mult $f16, $f12, $f11 # fm : $f11 = x * 0.5 \n\ - subl $2, $1, $2 # .. e0 : \n\ - addt $f12, $f12, $f17 # .. fa : $f17 = 1.0 \n\ - srl $2, 12, $1 # e0 : \n\ - \n\ - and $1, 0xfc, $1 # e0 : \n\ - addq $1, $4, $1 # e1 : \n\ - ldl $1, $T2($1) # e0 : \n\ - addt $f12, $f17, $f15 # .. fa : $f15 = 1.5 \n\ - \n\ - subl $2, $1, $2 # e0 : \n\ - ldt $f14, $DN($4) # .. e1 : \n\ - sll $2, 32, $2 # e0 : \n\ - stq $2, $Y($sp) # e0 : \n\ - \n\ - ldt $f13, $Y($sp) # e0 : \n\ - mult/su $f11, $f13, $f10 # fm 2: $f10 = (x * 0.5) * y \n\ - mult $f10, $f13, $f10 # fm 4: $f10 = ((x*0.5)*y)*y \n\ - subt $f15, $f10, $f1 # fa 4: $f1 = (1.5-0.5*x*y*y) \n\ - \n\ - mult $f13, $f1, $f13 # fm 4: yp = y*(1.5-0.5*x*y^2)\n\ - mult/su $f11, $f13, $f1 # fm 4: $f11 = x * 0.5 * yp \n\ - mult $f1, $f13, $f11 # fm 4: $f11 = (x*0.5*yp)*yp \n\ - subt $f18, $f11, $f1 # fa 4: $f1=(1.5-2^-30)-x/2*yp^2\n\ - \n\ - mult $f13, $f1, $f13 # fm 4: ypp = $f13 = yp*$f1 \n\ - subt $f15, $f12, $f1 # .. fa : $f1 = (1.5 - 0.5) \n\ - ldt $f15, $UP($4) # .. e0 : \n\ - mult/su $f16, $f13, $f10 # fm 4: z = $f10 = x * ypp \n\ - \n\ - mult $f10, $f13, $f11 # fm 4: $f11 = z*ypp \n\ - mult $f10, $f12, $f12 # fm : $f12 = z*0.5 \n\ - subt $f1, $f11, $f1 # fa 4: $f1 = 1 - z*ypp \n\ - mult $f12, $f1, $f12 # fm 4: $f12 = z/2*(1 - z*ypp)\n\ - \n\ - addt $f10, $f12, $f0 # fa 4: zp=res= z+z/2*(1-z*ypp)\n\ - mult/c $f0, $f14, $f12 # fm 4: zmi = zp * DN \n\ - mult/c $f0, $f15, $f11 # fm : zpl = zp * UP \n\ - mult/c $f0, $f12, $f1 # fm : $f1 = zp * zmi \n\ - \n\ - mult/c $f0, $f11, $f15 # fm : $f15 = zp * zpl \n\ - subt/su $f1, $f16, $f13 # .. fa : y1 = zp*zmi - x \n\ - subt/su $f15, $f16, $f14 # fa 4: y2 = zp*zpl - x \n\ - fcmovge $f13, $f12, $f0 # fa 3: res = (y1>=0)?zmi:res \n\ - \n\ - fcmovlt $f14, $f11, $f0 # fa 4: res = (y2<0)?zpl:res \n\ - addq $sp, 16, $sp # .. e0 : \n\ - ret # .. e1 : \n\ - \n\ - .align 4 \n\ -$fixup: \n\ - addq $sp, 16, $sp \n\ - br __full_ieee754_sqrt !samegp \n\ - \n\ - .end __ieee754_sqrt"); - -/* Avoid the __sqrt_finite alias that dbl-64/e_sqrt.c would give... */ -#undef strong_alias -#define strong_alias(a,b) - -/* ... defining our own. */ -#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18) -asm (".global __sqrt_finite1; __sqrt_finite1 = __ieee754_sqrt"); -#else -asm (".global __sqrt_finite; __sqrt_finite = __ieee754_sqrt"); -#endif - -static double __full_ieee754_sqrt(double) __attribute_used__; -#define __ieee754_sqrt __full_ieee754_sqrt - -#elif SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18) -# define __sqrt_finite __sqrt_finite1 -#endif /* _IEEE_FP_INEXACT */ - -#include - -/* Work around forgotten symbol in alphaev6 build. */ -#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18) -# undef __sqrt_finite -# undef __ieee754_sqrt -compat_symbol (libm, __sqrt_finite1, __sqrt_finite, GLIBC_2_15); -versioned_symbol (libm, __ieee754_sqrt, __sqrt_finite, GLIBC_2_18); -#endif diff --git a/sysdeps/alpha/fpu/e_sqrtf.c b/sysdeps/alpha/fpu/e_sqrtf.c deleted file mode 100644 index ad523f5cf2..0000000000 --- a/sysdeps/alpha/fpu/e_sqrtf.c +++ /dev/null @@ -1,14 +0,0 @@ -#include - -#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18) -# define __sqrtf_finite __sqrtf_finite1 -#endif - -#include - -/* Work around forgotten symbol in alphaev6 build. */ -#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18) -# undef __sqrtf_finite -compat_symbol (libm, __sqrtf_finite1, __sqrtf_finite, GLIBC_2_15); -versioned_symbol (libm, __ieee754_sqrtf, __sqrtf_finite, GLIBC_2_18); -#endif diff --git a/sysdeps/alpha/fpu/fclrexcpt.c b/sysdeps/alpha/fpu/fclrexcpt.c deleted file mode 100644 index 9e9be0b206..0000000000 --- a/sysdeps/alpha/fpu/fclrexcpt.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__feclearexcept (int excepts) -{ - unsigned long int swcr; - - /* Get the current state. */ - swcr = __ieee_get_fp_control (); - - /* Clear the relevant bits. */ - swcr &= ~((unsigned long int) excepts & SWCR_STATUS_MASK); - - /* Put the new state in effect. */ - __ieee_set_fp_control (swcr); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feclearexcept, __old_feclearexcept) -compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1); -#endif - -libm_hidden_ver (__feclearexcept, feclearexcept) -versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2); diff --git a/sysdeps/alpha/fpu/fedisblxcpt.c b/sysdeps/alpha/fpu/fedisblxcpt.c deleted file mode 100644 index 029393e558..0000000000 --- a/sysdeps/alpha/fpu/fedisblxcpt.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -fedisableexcept (int excepts) -{ - unsigned long int new_exc, old_exc; - - new_exc = __ieee_get_fp_control (); - - old_exc = (new_exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT; - new_exc &= ~((excepts >> SWCR_ENABLE_SHIFT) & SWCR_ENABLE_MASK); - - __ieee_set_fp_control (new_exc); - - return old_exc; -} diff --git a/sysdeps/alpha/fpu/feenablxcpt.c b/sysdeps/alpha/fpu/feenablxcpt.c deleted file mode 100644 index 8244f02cd3..0000000000 --- a/sysdeps/alpha/fpu/feenablxcpt.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -feenableexcept (int excepts) -{ - unsigned long int new_exc, old_exc; - - new_exc = __ieee_get_fp_control (); - - old_exc = (new_exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT; - new_exc |= (excepts >> SWCR_ENABLE_SHIFT) & SWCR_ENABLE_MASK; - - __ieee_set_fp_control (new_exc); - - return old_exc; -} diff --git a/sysdeps/alpha/fpu/fegetenv.c b/sysdeps/alpha/fpu/fegetenv.c deleted file mode 100644 index 0b242b3c12..0000000000 --- a/sysdeps/alpha/fpu/fegetenv.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__fegetenv (fenv_t *envp) -{ - unsigned long int fpcr; - unsigned long int swcr; - - /* Get status from software and hardware. Note that we don't need an - excb because the callsys is an implied trap barrier. */ - swcr = __ieee_get_fp_control (); - __asm__ __volatile__ ("mf_fpcr %0" : "=f" (fpcr)); - - /* Merge the two bits of information. */ - *envp = ((fpcr & FPCR_ROUND_MASK) | (swcr & SWCR_ALL_MASK)); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetenv, __old_fegetenv) -compat_symbol (libm, __old_fegetenv, fegetenv, GLIBC_2_1); -#endif - -libm_hidden_def (__fegetenv) -versioned_symbol (libm, __fegetenv, fegetenv, GLIBC_2_2); -libm_hidden_ver(__fegetenv, fegetenv) diff --git a/sysdeps/alpha/fpu/fegetexcept.c b/sysdeps/alpha/fpu/fegetexcept.c deleted file mode 100644 index ccb207433e..0000000000 --- a/sysdeps/alpha/fpu/fegetexcept.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Get enabled floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -fegetexcept (void) -{ - unsigned long int exc; - - exc = __ieee_get_fp_control (); - - return (exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT; -} diff --git a/sysdeps/alpha/fpu/fegetmode.c b/sysdeps/alpha/fpu/fegetmode.c deleted file mode 100644 index 18ab5d328a..0000000000 --- a/sysdeps/alpha/fpu/fegetmode.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Store current floating-point control modes. Alpha version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fegetmode (femode_t *modep) -{ - unsigned long int fpcr; - unsigned long int swcr; - - /* As in fegetenv. */ - swcr = __ieee_get_fp_control (); - __asm__ __volatile__ ("mf_fpcr %0" : "=f" (fpcr)); - *modep = ((fpcr & FPCR_ROUND_MASK) | (swcr & SWCR_ALL_MASK)); - - return 0; -} diff --git a/sysdeps/alpha/fpu/fegetround.c b/sysdeps/alpha/fpu/fegetround.c deleted file mode 100644 index 9befd175b7..0000000000 --- a/sysdeps/alpha/fpu/fegetround.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__fegetround (void) -{ - unsigned long fpcr; - - __asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr)); - - return (fpcr >> FPCR_ROUND_SHIFT) & 3; -} -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/alpha/fpu/feholdexcpt.c b/sysdeps/alpha/fpu/feholdexcpt.c deleted file mode 100644 index 7f4f487ad5..0000000000 --- a/sysdeps/alpha/fpu/feholdexcpt.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__feholdexcept (fenv_t *envp) -{ - /* Save the current state. */ - __fegetenv(envp); - - /* Clear all exception status bits and exception enable bits. */ - __ieee_set_fp_control(*envp & SWCR_MAP_MASK); - - return 0; -} -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/alpha/fpu/fenv_libc.h b/sysdeps/alpha/fpu/fenv_libc.h deleted file mode 100644 index 355d6f0659..0000000000 --- a/sysdeps/alpha/fpu/fenv_libc.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Internal libc stuff for floating point environment routines. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FENV_LIBC_H -#define _FENV_LIBC_H 1 - -#include - -#define FPCR_ROUND_MASK (3UL << 58) -#define FPCR_ROUND_SHIFT 58 - -#define SWCR_MAP_MASK (3UL << 12) -#define SWCR_ENABLE_SHIFT 16 -#define SWCR_ENABLE_MASK (FE_ALL_EXCEPT >> SWCR_ENABLE_SHIFT) -#define SWCR_STATUS_MASK (FE_ALL_EXCEPT) -#define SWCR_ALL_MASK (SWCR_ENABLE_MASK \ - | SWCR_MAP_MASK \ - | SWCR_STATUS_MASK) - -/* These are declared for public consumption in . */ -libc_hidden_proto(__ieee_set_fp_control) -libc_hidden_proto(__ieee_get_fp_control) - -#endif /* fenv_libc.h */ diff --git a/sysdeps/alpha/fpu/fesetenv.c b/sysdeps/alpha/fpu/fesetenv.c deleted file mode 100644 index c115f13a87..0000000000 --- a/sysdeps/alpha/fpu/fesetenv.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__fesetenv (const fenv_t *envp) -{ - unsigned long int fpcr; - fenv_t env; - - /* Magic encoding of default values: high bit set (never possible for a - user-space address) is not indirect. And we don't even have to get - rid of it since we mask things around just below. */ - if ((long int) envp >= 0) - env = *envp; - else - env = (unsigned long int) envp; - - /* Reset the rounding mode with the hardware fpcr. Note that the following - system call is an implied trap barrier for our modification. */ - __asm__ __volatile__ ("excb; mf_fpcr %0" : "=f" (fpcr)); - fpcr = (fpcr & ~FPCR_ROUND_MASK) | (env & FPCR_ROUND_MASK); - __asm__ __volatile__ ("mt_fpcr %0" : : "f" (fpcr)); - - /* Reset the exception status and mask with the kernel's FP code. */ - __ieee_set_fp_control (env & SWCR_ALL_MASK); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetenv, __old_fesetenv) -compat_symbol (libm, __old_fesetenv, fesetenv, GLIBC_2_1); -#endif - -libm_hidden_def (__fesetenv) -libm_hidden_ver (__fesetenv, fesetenv) -versioned_symbol (libm, __fesetenv, fesetenv, GLIBC_2_2); diff --git a/sysdeps/alpha/fpu/fesetexcept.c b/sysdeps/alpha/fpu/fesetexcept.c deleted file mode 100644 index c84a2dfe37..0000000000 --- a/sysdeps/alpha/fpu/fesetexcept.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Set given exception flags. Alpha version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fesetexcept (int excepts) -{ - unsigned long int tmp; - - tmp = __ieee_get_fp_control (); - tmp |= excepts & SWCR_STATUS_MASK; - __ieee_set_fp_control (tmp); - - return 0; -} diff --git a/sysdeps/alpha/fpu/fesetmode.c b/sysdeps/alpha/fpu/fesetmode.c deleted file mode 100644 index 23a7be687b..0000000000 --- a/sysdeps/alpha/fpu/fesetmode.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Install given floating-point control modes. Alpha version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fesetmode (const femode_t *modep) -{ - unsigned long int fpcr; - unsigned long int swcr; - femode_t mode; - - /* As in fesetenv. */ - if ((long int) modep >= 0) - mode = *modep; - else - mode = (unsigned long int) modep; - - __asm__ __volatile__ ("excb; mf_fpcr %0" : "=f" (fpcr)); - fpcr = (fpcr & ~FPCR_ROUND_MASK) | (mode & FPCR_ROUND_MASK); - __asm__ __volatile__ ("mt_fpcr %0" : : "f" (fpcr)); - - swcr = __ieee_get_fp_control (); - swcr = ((mode & SWCR_ALL_MASK & ~SWCR_STATUS_MASK) - | (swcr & SWCR_STATUS_MASK)); - __ieee_set_fp_control (swcr); - - return 0; -} diff --git a/sysdeps/alpha/fpu/fesetround.c b/sysdeps/alpha/fpu/fesetround.c deleted file mode 100644 index af2b695029..0000000000 --- a/sysdeps/alpha/fpu/fesetround.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__fesetround (int round) -{ - unsigned long fpcr; - - if (round & ~3) - return 1; - - /* Get the current state. */ - __asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr)); - - /* Set the relevant bits. */ - fpcr = ((fpcr & ~FPCR_ROUND_MASK) - | ((unsigned long)round << FPCR_ROUND_SHIFT)); - - /* Put the new state in effect. */ - __asm__ __volatile__("mt_fpcr %0; excb" : : "f"(fpcr)); - - return 0; -} -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/alpha/fpu/feupdateenv.c b/sysdeps/alpha/fpu/feupdateenv.c deleted file mode 100644 index d77b276b40..0000000000 --- a/sysdeps/alpha/fpu/feupdateenv.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__feupdateenv (const fenv_t *envp) -{ - unsigned long int tmp; - - /* Get the current exception state. */ - tmp = __ieee_get_fp_control (); - - /* Install new environment. */ - __fesetenv (envp); - - /* Raise the saved exception. Incidently for us the implementation - defined format of the values in objects of type fexcept_t is the - same as the ones specified using the FE_* constants. */ - __feraiseexcept (tmp & SWCR_STATUS_MASK); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feupdateenv, __old_feupdateenv) -compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1); -#endif - -libm_hidden_def (__feupdateenv) -libm_hidden_ver (__feupdateenv, feupdateenv) -versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2); diff --git a/sysdeps/alpha/fpu/fgetexcptflg.c b/sysdeps/alpha/fpu/fgetexcptflg.c deleted file mode 100644 index c69b0a1ce5..0000000000 --- a/sysdeps/alpha/fpu/fgetexcptflg.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__fegetexceptflag (fexcept_t *flagp, int excepts) -{ - unsigned long int tmp; - - /* Get the current state. */ - tmp = __ieee_get_fp_control(); - - /* Return that portion that corresponds to the requested exceptions. */ - *flagp = tmp & excepts & SWCR_STATUS_MASK; - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetexceptflag, __old_fegetexceptflag) -compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2); diff --git a/sysdeps/alpha/fpu/fpu_control.h b/sysdeps/alpha/fpu/fpu_control.h deleted file mode 100644 index fbb55e5461..0000000000 --- a/sysdeps/alpha/fpu/fpu_control.h +++ /dev/null @@ -1,105 +0,0 @@ -/* FPU control word bits. Alpha-mapped-to-Intel version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Olaf Flebbe. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _ALPHA_FPU_CONTROL_H -#define _ALPHA_FPU_CONTROL_H - -/* - * Since many programs seem to hardcode the values passed to __setfpucw() - * (rather than using the manifest constants) we emulate the x87 interface - * here (at least where this makes sense). - * - * 15-13 12 11-10 9-8 7-6 5 4 3 2 1 0 - * | reserved | IC | RC | PC | reserved | PM | UM | OM | ZM | DM | IM - * - * IM: Invalid operation mask - * DM: Denormalized operand mask - * ZM: Zero-divide mask - * OM: Overflow mask - * UM: Underflow mask - * PM: Precision (inexact result) mask - * - * Mask bit is 1 means no interrupt. - * - * PC: Precision control - * 11 - round to extended precision - * 10 - round to double precision - * 00 - round to single precision - * - * RC: Rounding control - * 00 - rounding to nearest - * 01 - rounding down (toward - infinity) - * 10 - rounding up (toward + infinity) - * 11 - rounding toward zero - * - * IC: Infinity control - * That is for 8087 and 80287 only. - * - * The hardware default is 0x037f. I choose 0x1372. - */ - -#include - -/* masking of interrupts */ -#define _FPU_MASK_IM 0x01 -#define _FPU_MASK_DM 0x02 -#define _FPU_MASK_ZM 0x04 -#define _FPU_MASK_OM 0x08 -#define _FPU_MASK_UM 0x10 -#define _FPU_MASK_PM 0x20 - -/* precision control -- without effect on Alpha */ -#define _FPU_EXTENDED 0x300 /* RECOMMENDED */ -#define _FPU_DOUBLE 0x200 -#define _FPU_SINGLE 0x0 /* DO NOT USE */ - -/* - * rounding control---notice that on the Alpha this affects only - * instructions with the dynamic rounding mode qualifier (/d). - */ -#define _FPU_RC_NEAREST 0x000 /* RECOMMENDED */ -#define _FPU_RC_DOWN 0x400 -#define _FPU_RC_UP 0x800 -#define _FPU_RC_ZERO 0xC00 - -#define _FPU_RESERVED 0xF0C0 /* Reserved bits in cw */ - - -/* Now two recommended cw */ - -/* Linux default: - - extended precision - - rounding to positive infinity. There is no /p instruction - qualifier. By setting the dynamic rounding mode to +infinity, - one can use /d to get round to +infinity with no extra overhead - (so long as the default isn't changed, of course...) - - no exceptions enabled. */ - -#define _FPU_DEFAULT 0x137f - -/* IEEE: same as above. */ -#define _FPU_IEEE 0x137f - -/* Type of the control word. */ -typedef unsigned int fpu_control_t; - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#endif /* _ALPHA_FPU_CONTROL */ diff --git a/sysdeps/alpha/fpu/fsetexcptflg.c b/sysdeps/alpha/fpu/fsetexcptflg.c deleted file mode 100644 index f39f6125c7..0000000000 --- a/sysdeps/alpha/fpu/fsetexcptflg.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - unsigned long int tmp; - - /* Get the current exception state. */ - tmp = __ieee_get_fp_control (); - - /* Set all the bits that were called for. */ - tmp = (tmp & ~SWCR_STATUS_MASK) | (*flagp & excepts & SWCR_STATUS_MASK); - - /* And store it back. */ - __ieee_set_fp_control (tmp); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetexceptflag, __old_fesetexceptflag) -compat_symbol (libm, __old_fesetexceptflag, fesetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fesetexceptflag, fesetexceptflag, GLIBC_2_2); diff --git a/sysdeps/alpha/fpu/ftestexcept.c b/sysdeps/alpha/fpu/ftestexcept.c deleted file mode 100644 index 8a0cf74986..0000000000 --- a/sysdeps/alpha/fpu/ftestexcept.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -fetestexcept (int excepts) -{ - unsigned long tmp; - - /* Get current exceptions. */ - tmp = __ieee_get_fp_control(); - - return tmp & excepts & SWCR_STATUS_MASK; -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/alpha/fpu/get-rounding-mode.h b/sysdeps/alpha/fpu/get-rounding-mode.h deleted file mode 100644 index 866fb9926c..0000000000 --- a/sysdeps/alpha/fpu/get-rounding-mode.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Determine floating-point rounding mode within libc. Alpha version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef ALPHA_GET_ROUNDING_MODE_H -#define ALPHA_GET_ROUNDING_MODE_H 1 - -#include -#include - -/* Return the floating-point rounding mode. */ - -static inline int -get_rounding_mode (void) -{ - unsigned long fpcr; - __asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr)); - return (fpcr >> FPCR_ROUND_SHIFT) & 3; -} - -#endif /* get-rounding-mode.h */ diff --git a/sysdeps/alpha/fpu/libm-test-ulps b/sysdeps/alpha/fpu/libm-test-ulps deleted file mode 100644 index 6ec37f72ac..0000000000 --- a/sysdeps/alpha/fpu/libm-test-ulps +++ /dev/null @@ -1,2262 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "acosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "acosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "acosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "asin": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "asinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "asinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "asinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "atan": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atan2_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "atan2_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "atanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "atanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "cabs": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacos_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "cacos_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "cacos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cacos_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: Real part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "carg": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "carg_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "carg_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "carg_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casin": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin_downward": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "casin_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "casin_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: Real part of "casinh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casinh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casinh_downward": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casinh_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catan_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catan_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catan_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan_upward": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catanh": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "catanh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catanh_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "catanh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catanh_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_upward": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_upward": -double: 5 -float: 1 -idouble: 5 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccosh_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cexp_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog10": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog10_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog10_downward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog10_towardzero": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_upward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog10_upward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog_towardzero": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "cos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "cos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 2 - -Function: "cosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 2 - -Function: "cosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 3 - -Function: Real part of "cpow": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cpow_downward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cpow_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_towardzero": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cpow_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_upward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cpow_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csin": -ildouble: 1 -ldouble: 1 - -Function: Real part of "csin_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csinh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csinh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csinh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csinh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt_upward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctan_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctan_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erf_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erfc": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "erfc_downward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 -ildouble: 5 -ldouble: 5 - -Function: "erfc_towardzero": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "erfc_upward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 -ildouble: 5 -ldouble: 5 - -Function: "exp": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp10": -double: 2 -idouble: 2 -ildouble: 2 -ldouble: 2 - -Function: "exp10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp_downward": -double: 1 -idouble: 1 - -Function: "exp_towardzero": -double: 1 -idouble: 1 - -Function: "exp_upward": -double: 1 -idouble: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "expm1_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "expm1_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "gamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "gamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: "gamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "gamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "hypot": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j0_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "j0_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j0_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_upward": -double: 3 -float: 5 -idouble: 3 -ifloat: 5 -ildouble: 3 -ldouble: 3 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "jn_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "jn_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "jn_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 7 -ldouble: 7 - -Function: "lgamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "lgamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: "lgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "lgamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "log": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "log10_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log1p": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log1p_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "log1p_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "log1p_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log2": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log2_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "log2_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log2_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "log_downward": -float: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log_towardzero": -float: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "pow": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow10": -double: 2 -idouble: 2 -ildouble: 2 -ldouble: 2 - -Function: "pow10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sin": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sincos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sincos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sincos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sincos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "sinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "sinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "tan": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "tan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "tanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "tanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "tanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "tgamma": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "tgamma_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "y0_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "y0_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "y0_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "y1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_upward": -double: 7 -float: 2 -idouble: 7 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "yn_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -# end of automatic generation diff --git a/sysdeps/alpha/fpu/libm-test-ulps-name b/sysdeps/alpha/fpu/libm-test-ulps-name deleted file mode 100644 index 5219734094..0000000000 --- a/sysdeps/alpha/fpu/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -Alpha diff --git a/sysdeps/alpha/fpu/math_private.h b/sysdeps/alpha/fpu/math_private.h deleted file mode 100644 index 1e97c867c3..0000000000 --- a/sysdeps/alpha/fpu/math_private.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef ALPHA_MATH_PRIVATE_H -#define ALPHA_MATH_PRIVATE_H 1 - -/* In bits/mathinline.h we define __isnan et al. - In sysdeps/alpha/fpu/s_isnan.c we move the identifier out of the way - via macro hackery. In both cases, tell math/math_private.h that - we have a local copy of the function. */ - -#ifndef __isnan -# define __isnan __isnan -#endif -#ifndef __isnanf -# define __isnanf __isnanf -#endif - -/* Generic code forces values to memory; we don't need to do that. */ -#define math_opt_barrier(x) \ - ({ __typeof (x) __x = (x); __asm ("" : "+frm" (__x)); __x; }) -#define math_force_eval(x) \ - ({ __typeof (x) __x = (x); __asm __volatile__ ("" : : "frm" (__x)); }) - -#include_next - -#ifdef __alpha_fix__ -extern __always_inline double -__ieee754_sqrt (double d) -{ - double ret; -# ifdef _IEEE_FP_INEXACT - asm ("sqrtt/suid %1,%0" : "=&f"(ret) : "f"(d)); -# else - asm ("sqrtt/sud %1,%0" : "=&f"(ret) : "f"(d)); -# endif - return ret; -} - -extern __always_inline float -__ieee754_sqrtf (float d) -{ - float ret; -# ifdef _IEEE_FP_INEXACT - asm ("sqrts/suid %1,%0" : "=&f"(ret) : "f"(d)); -# else - asm ("sqrts/sud %1,%0" : "=&f"(ret) : "f"(d)); -# endif - return ret; -} -#endif /* FIX */ - -#endif /* ALPHA_MATH_PRIVATE_H */ diff --git a/sysdeps/alpha/fpu/s_cacosf.c b/sysdeps/alpha/fpu/s_cacosf.c deleted file mode 100644 index e06b06305f..0000000000 --- a/sysdeps/alpha/fpu/s_cacosf.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Return arc cosine of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __cacosf __cacosf_not_defined -#define cacosf cacosf_not_defined - -#include -#include - -#undef __cacosf -#undef cacosf - -static _Complex float internal_cacosf (_Complex float x); - -#define M_DECL_FUNC(f) internal_cacosf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include - -#include "cfloat-compat.h" - -#undef __cacosf - -c1_cfloat_rettype -__c1_cacosf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_cacosf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_cacosf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_cacosf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (cacosf); diff --git a/sysdeps/alpha/fpu/s_cacoshf.c b/sysdeps/alpha/fpu/s_cacoshf.c deleted file mode 100644 index d67cffb59e..0000000000 --- a/sysdeps/alpha/fpu/s_cacoshf.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Return arc hyperbole cosine of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __cacoshf __cacoshf_not_defined -#define cacoshf cacoshf_not_defined - -#include -#include - -#undef __cacoshf -#undef cacoshf - -static _Complex float internal_cacoshf (_Complex float x); - -#define M_DECL_FUNC(f) internal_cacoshf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -#undef __cacoshf - -c1_cfloat_rettype -__c1_cacoshf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_cacoshf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_cacoshf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_cacoshf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (cacoshf); diff --git a/sysdeps/alpha/fpu/s_casinf.c b/sysdeps/alpha/fpu/s_casinf.c deleted file mode 100644 index 1baa1d4669..0000000000 --- a/sysdeps/alpha/fpu/s_casinf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return arc sine of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __casinf __casinf_not_defined -#define casinf casinf_not_defined - -#include -#include - -#undef __casinf -#undef casinf - -static _Complex float internal_casinf (_Complex float x); - -#define M_DECL_FUNC(f) internal_casinf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_casinf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_casinf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_casinf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_casinf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (casinf); diff --git a/sysdeps/alpha/fpu/s_casinhf.c b/sysdeps/alpha/fpu/s_casinhf.c deleted file mode 100644 index 4cb3a2fe33..0000000000 --- a/sysdeps/alpha/fpu/s_casinhf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return arc hyperbole sine of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __casinhf __casinhf_not_defined -#define casinhf casinhf_not_defined - -#include -#include - -#undef __casinhf -#undef casinhf - -static _Complex float internal_casinhf (_Complex float x); - -#define M_DECL_FUNC(f) internal_casinhf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_casinhf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_casinhf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_casinhf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_casinhf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (casinhf); diff --git a/sysdeps/alpha/fpu/s_catanf.c b/sysdeps/alpha/fpu/s_catanf.c deleted file mode 100644 index 6d928e077d..0000000000 --- a/sysdeps/alpha/fpu/s_catanf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return arc tangent of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __catanf __catanf_not_defined -#define catanf catanf_not_defined - -#include -#include - -#undef __catanf -#undef catanf - -static _Complex float internal_catanf (_Complex float x); - -#define M_DECL_FUNC(f) internal_catanf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_catanf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_catanf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_catanf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_catanf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (catanf); diff --git a/sysdeps/alpha/fpu/s_catanhf.c b/sysdeps/alpha/fpu/s_catanhf.c deleted file mode 100644 index d8942a057e..0000000000 --- a/sysdeps/alpha/fpu/s_catanhf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return arc hyperbole tangent of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __catanhf __catanhf_not_defined -#define catanhf catanhf_not_defined - -#include -#include - -#undef __catanhf -#undef catanhf - -static _Complex float internal_catanhf (_Complex float x); - -#define M_DECL_FUNC(f) internal_catanhf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_catanhf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_catanhf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_catanhf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_catanhf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (catanhf); diff --git a/sysdeps/alpha/fpu/s_ccosf.c b/sysdeps/alpha/fpu/s_ccosf.c deleted file mode 100644 index abc7f10766..0000000000 --- a/sysdeps/alpha/fpu/s_ccosf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return cosine of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __ccosf __ccosf_not_defined -#define ccosf ccosf_not_defined - -#include -#include - -#undef __ccosf -#undef ccosf - -static _Complex float internal_ccosf (_Complex float x); - -#define M_DECL_FUNC(f) internal_ccosf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_ccosf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_ccosf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_ccosf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_ccosf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (ccosf); diff --git a/sysdeps/alpha/fpu/s_ccoshf.c b/sysdeps/alpha/fpu/s_ccoshf.c deleted file mode 100644 index 65deabd9b2..0000000000 --- a/sysdeps/alpha/fpu/s_ccoshf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return hyperbole cosine of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __ccoshf __ccoshf_not_defined -#define ccoshf ccoshf_not_defined - -#include -#include - -#undef __ccoshf -#undef ccoshf - -static _Complex float internal_ccoshf (_Complex float x); - -#define M_DECL_FUNC(f) internal_ccoshf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_ccoshf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_ccoshf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_ccoshf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_ccoshf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (ccoshf); diff --git a/sysdeps/alpha/fpu/s_ceil.c b/sysdeps/alpha/fpu/s_ceil.c deleted file mode 100644 index 029ee09315..0000000000 --- a/sysdeps/alpha/fpu/s_ceil.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* Use the -inf rounding mode conversion instructions to implement - ceil, via something akin to -floor(-x). This is much faster than - playing with the fpcr to achieve +inf rounding mode. */ - -double -__ceil (double x) -{ - if (isnan (x)) - return x + x; - - if (isless (fabs (x), 9007199254740992.0)) /* 1 << DBL_MANT_DIG */ - { - double tmp1, new_x; - - new_x = -x; - __asm ( - "cvttq/svm %2,%1\n\t" - "cvtqt/m %1,%0\n\t" - : "=f"(new_x), "=&f"(tmp1) - : "f"(new_x)); - - /* Fix up the negation we did above, as well as handling -0 properly. */ - x = copysign(new_x, x); - } - return x; -} - -weak_alias (__ceil, ceil) -#ifdef NO_LONG_DOUBLE -strong_alias (__ceil, __ceill) -weak_alias (__ceil, ceill) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __ceil, ceill, GLIBC_2_0); -#endif diff --git a/sysdeps/alpha/fpu/s_ceilf.c b/sysdeps/alpha/fpu/s_ceilf.c deleted file mode 100644 index 8c76c65d7f..0000000000 --- a/sysdeps/alpha/fpu/s_ceilf.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Use the -inf rounding mode conversion instructions to implement - ceil, via something akin to -floor(-x). This is much faster than - playing with the fpcr to achieve +inf rounding mode. */ - -float -__ceilf (float x) -{ - if (isnanf (x)) - return x + x; - - if (isless (fabsf (x), 16777216.0f)) /* 1 << FLT_MANT_DIG */ - { - /* Note that Alpha S_Floating is stored in registers in a - restricted T_Floating format, so we don't even need to - convert back to S_Floating in the end. The initial - conversion to T_Floating is needed to handle denormals. */ - - float tmp1, tmp2, new_x; - - new_x = -x; - __asm ("cvtst/s %3,%2\n\t" - "cvttq/svm %2,%1\n\t" - "cvtqt/m %1,%0\n\t" - : "=f"(new_x), "=&f"(tmp1), "=&f"(tmp2) - : "f"(new_x)); - - /* Fix up the negation we did above, as well as handling -0 properly. */ - x = copysignf(new_x, x); - } - return x; -} - -weak_alias (__ceilf, ceilf) diff --git a/sysdeps/alpha/fpu/s_cexpf.c b/sysdeps/alpha/fpu/s_cexpf.c deleted file mode 100644 index 64daf689d2..0000000000 --- a/sysdeps/alpha/fpu/s_cexpf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return exponent of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __cexpf __cexpf_not_defined -#define cexpf cexpf_not_defined - -#include -#include - -#undef __cexpf -#undef cexpf - -static _Complex float internal_cexpf (_Complex float x); - -#define M_DECL_FUNC(f) internal_cexpf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_cexpf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_cexpf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_cexpf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_cexpf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (cexpf); diff --git a/sysdeps/alpha/fpu/s_clog10f.c b/sysdeps/alpha/fpu/s_clog10f.c deleted file mode 100644 index 0646a09ca5..0000000000 --- a/sysdeps/alpha/fpu/s_clog10f.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Return base 10 logarithm of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __clog10f __clog10f_not_defined -#define clog10f clog10f_not_defined - -#include -#include - -#undef __clog10f -#undef clog10f - -static _Complex float internal_clog10f (_Complex float x); - -#define M_DECL_FUNC(f) internal_clog10f -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_clog10f (c1_cfloat_decl (x)) -{ - _Complex float r = internal_clog10f (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_clog10f (c2_cfloat_decl (x)) -{ - _Complex float r = internal_clog10f (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -/* Ug. __clog10f was exported from GLIBC_2.1. This is the only - complex function whose double-underscore symbol was exported, - so we get to handle that specially. */ -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_3_4) -strong_alias (__c1_clog10f, __c1_clog10f_2); -compat_symbol (libm, __c1_clog10f, clog10f, GLIBC_2_1); -compat_symbol (libm, __c1_clog10f_2, __clog10f, GLIBC_2_1); -#endif -versioned_symbol (libm, __c2_clog10f, clog10f, GLIBC_2_3_4); -extern typeof(__c2_clog10f) __clog10f attribute_hidden; -strong_alias (__c2_clog10f, __clog10f) diff --git a/sysdeps/alpha/fpu/s_clogf.c b/sysdeps/alpha/fpu/s_clogf.c deleted file mode 100644 index 1a7e234aa9..0000000000 --- a/sysdeps/alpha/fpu/s_clogf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return natural logarithm of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __clogf __clogf_not_defined -#define clogf clogf_not_defined - -#include -#include - -#undef __clogf -#undef clogf - -static _Complex float internal_clogf (_Complex float x); - -#define M_DECL_FUNC(f) internal_clogf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_clogf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_clogf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_clogf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_clogf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (clogf); diff --git a/sysdeps/alpha/fpu/s_copysign.c b/sysdeps/alpha/fpu/s_copysign.c deleted file mode 100644 index 3bd3dd48df..0000000000 --- a/sysdeps/alpha/fpu/s_copysign.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -double -__copysign (double x, double y) -{ - return __builtin_copysign (x, y); -} - -weak_alias (__copysign, copysign) -#ifdef NO_LONG_DOUBLE -strong_alias (__copysign, __copysignl) -weak_alias (__copysign, copysignl) -#endif -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __copysign, copysignl, GLIBC_2_0); -# endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __copysign, copysignl, GLIBC_2_0); -#endif diff --git a/sysdeps/alpha/fpu/s_copysignf.c b/sysdeps/alpha/fpu/s_copysignf.c deleted file mode 100644 index 90b20124a6..0000000000 --- a/sysdeps/alpha/fpu/s_copysignf.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -float -__copysignf (float x, float y) -{ - return __builtin_copysignf (x, y); -} - -weak_alias (__copysignf, copysignf) diff --git a/sysdeps/alpha/fpu/s_cpowf.c b/sysdeps/alpha/fpu/s_cpowf.c deleted file mode 100644 index dacf0e12e0..0000000000 --- a/sysdeps/alpha/fpu/s_cpowf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return power of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __cpowf __cpowf_not_defined -#define cpowf cpowf_not_defined - -#include -#include - -#undef __cpowf -#undef cpowf - -static _Complex float internal_cpowf (_Complex float x, _Complex float c); - -#define M_DECL_FUNC(f) internal_cpowf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_cpowf (c1_cfloat_decl (x), c1_cfloat_decl (c)) -{ - _Complex float r = internal_cpowf (c1_cfloat_value (x), c1_cfloat_value (c)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_cpowf (c2_cfloat_decl (x), c2_cfloat_decl (c)) -{ - _Complex float r = internal_cpowf (c2_cfloat_value (x), c2_cfloat_value (c)); - return c2_cfloat_return (r); -} - -cfloat_versions (cpowf); diff --git a/sysdeps/alpha/fpu/s_cprojf.c b/sysdeps/alpha/fpu/s_cprojf.c deleted file mode 100644 index 316cc1f551..0000000000 --- a/sysdeps/alpha/fpu/s_cprojf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return projection of complex float value to Riemann sphere. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __cprojf __cprojf_not_defined -#define cprojf cprojf_not_defined - -#include -#include - -#undef __cprojf -#undef cprojf - -static _Complex float internal_cprojf (_Complex float x); - -#define M_DECL_FUNC(f) internal_cprojf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_cprojf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_cprojf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_cprojf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_cprojf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (cprojf); diff --git a/sysdeps/alpha/fpu/s_csinf.c b/sysdeps/alpha/fpu/s_csinf.c deleted file mode 100644 index f884d29fc9..0000000000 --- a/sysdeps/alpha/fpu/s_csinf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return sine of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __csinf __csinf_not_defined -#define csinf csinf_not_defined - -#include -#include - -#undef __csinf -#undef csinf - -static _Complex float internal_csinf (_Complex float x); - -#define M_DECL_FUNC(f) internal_csinf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_csinf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_csinf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_csinf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_csinf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (csinf); diff --git a/sysdeps/alpha/fpu/s_csinhf.c b/sysdeps/alpha/fpu/s_csinhf.c deleted file mode 100644 index 071ff1227b..0000000000 --- a/sysdeps/alpha/fpu/s_csinhf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return hyperbole sine of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __csinhf __csinhf_not_defined -#define csinhf csinhf_not_defined - -#include -#include - -#undef __csinhf -#undef csinhf - -static _Complex float internal_csinhf (_Complex float x); - -#define M_DECL_FUNC(f) internal_csinhf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_csinhf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_csinhf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_csinhf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_csinhf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (csinhf); diff --git a/sysdeps/alpha/fpu/s_csqrtf.c b/sysdeps/alpha/fpu/s_csqrtf.c deleted file mode 100644 index 0611f09465..0000000000 --- a/sysdeps/alpha/fpu/s_csqrtf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return square root of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __csqrtf __csinhf_not_defined -#define csqrtf csqrtf_not_defined - -#include -#include - -#undef __csqrtf -#undef csqrtf - -static _Complex float internal_csqrtf (_Complex float x); - -#define M_DECL_FUNC(f) internal_csqrtf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_csqrtf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_csqrtf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_csqrtf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_csqrtf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (csqrtf); diff --git a/sysdeps/alpha/fpu/s_ctanf.c b/sysdeps/alpha/fpu/s_ctanf.c deleted file mode 100644 index 7288db23c0..0000000000 --- a/sysdeps/alpha/fpu/s_ctanf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return tangent of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __ctanf __ctanf_not_defined -#define ctanf ctanf_not_defined - -#include -#include - -#undef __ctanf -#undef ctanf - -static _Complex float internal_ctanf (_Complex float x); - -#define M_DECL_FUNC(f) internal_ctanf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_ctanf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_ctanf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_ctanf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_ctanf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (ctanf); diff --git a/sysdeps/alpha/fpu/s_ctanhf.c b/sysdeps/alpha/fpu/s_ctanhf.c deleted file mode 100644 index fc0a5f6837..0000000000 --- a/sysdeps/alpha/fpu/s_ctanhf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Return hyperbole tangent of complex float value. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __ctanhf __ctanhf_not_defined -#define ctanhf ctanhf_not_defined - -#include -#include - -#undef __ctanhf -#undef ctanhf - -static _Complex float internal_ctanhf (_Complex float x); - -#define M_DECL_FUNC(f) internal_ctanhf -#include - -/* Disable any aliasing from base template. */ -#undef declare_mgen_alias -#define declare_mgen_alias(__to, __from) - -#include -#include "cfloat-compat.h" - -c1_cfloat_rettype -__c1_ctanhf (c1_cfloat_decl (x)) -{ - _Complex float r = internal_ctanhf (c1_cfloat_value (x)); - return c1_cfloat_return (r); -} - -c2_cfloat_rettype -__c2_ctanhf (c2_cfloat_decl (x)) -{ - _Complex float r = internal_ctanhf (c2_cfloat_value (x)); - return c2_cfloat_return (r); -} - -cfloat_versions (ctanhf); diff --git a/sysdeps/alpha/fpu/s_fabs.c b/sysdeps/alpha/fpu/s_fabs.c deleted file mode 100644 index abcc6e7c75..0000000000 --- a/sysdeps/alpha/fpu/s_fabs.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -double -__fabs (double x) -{ - return __builtin_fabs (x); -} - -weak_alias (__fabs, fabs) -#ifdef NO_LONG_DOUBLE -strong_alias (__fabs, __fabsl) -weak_alias (__fabs, fabsl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __fabs, fabsl, GLIBC_2_0); -#endif diff --git a/sysdeps/alpha/fpu/s_fabsf.c b/sysdeps/alpha/fpu/s_fabsf.c deleted file mode 100644 index 5b1105cb00..0000000000 --- a/sysdeps/alpha/fpu/s_fabsf.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -float -__fabsf (float x) -{ - return __builtin_fabsf (x); -} - -weak_alias (__fabsf, fabsf) diff --git a/sysdeps/alpha/fpu/s_floor.c b/sysdeps/alpha/fpu/s_floor.c deleted file mode 100644 index 49a0c760a9..0000000000 --- a/sysdeps/alpha/fpu/s_floor.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - -/* Use the -inf rounding mode conversion instructions to implement - floor. We note when the exponent is large enough that the value - must be integral, as this avoids unpleasant integer overflows. */ - -double -__floor (double x) -{ - if (isnan (x)) - return x + x; - - if (isless (fabs (x), 9007199254740992.0)) /* 1 << DBL_MANT_DIG */ - { - double tmp1, new_x; - - __asm ( - "cvttq/svm %2,%1\n\t" - "cvtqt/m %1,%0\n\t" - : "=f"(new_x), "=&f"(tmp1) - : "f"(x)); - - /* floor(-0) == -0, and in general we'll always have the same - sign as our input. */ - x = copysign(new_x, x); - } - return x; -} - -weak_alias (__floor, floor) -#ifdef NO_LONG_DOUBLE -strong_alias (__floor, __floorl) -weak_alias (__floor, floorl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __floor, floorl, GLIBC_2_0); -#endif diff --git a/sysdeps/alpha/fpu/s_floorf.c b/sysdeps/alpha/fpu/s_floorf.c deleted file mode 100644 index 79cae27720..0000000000 --- a/sysdeps/alpha/fpu/s_floorf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - -/* Use the -inf rounding mode conversion instructions to implement - floor. We note when the exponent is large enough that the value - must be integral, as this avoids unpleasant integer overflows. */ - -float -__floorf (float x) -{ - if (isnanf (x)) - return x + x; - - if (isless (fabsf (x), 16777216.0f)) /* 1 << FLT_MANT_DIG */ - { - /* Note that Alpha S_Floating is stored in registers in a - restricted T_Floating format, so we don't even need to - convert back to S_Floating in the end. The initial - conversion to T_Floating is needed to handle denormals. */ - - float tmp1, tmp2, new_x; - - __asm ("cvtst/s %3,%2\n\t" - "cvttq/svm %2,%1\n\t" - "cvtqt/m %1,%0\n\t" - : "=f"(new_x), "=&f"(tmp1), "=&f"(tmp2) - : "f"(x)); - - /* floor(-0) == -0, and in general we'll always have the same - sign as our input. */ - x = copysignf(new_x, x); - } - return x; -} - -weak_alias (__floorf, floorf) diff --git a/sysdeps/alpha/fpu/s_fmax.S b/sysdeps/alpha/fpu/s_fmax.S deleted file mode 100644 index 8a65ae4963..0000000000 --- a/sysdeps/alpha/fpu/s_fmax.S +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - .set noat - .set noreorder - - .text -ENTRY (__fmax) - .prologue 0 - - cmptun/su $f16, $f16, $f10 - cmptun/su $f17, $f17, $f11 - fmov $f17, $f0 - unop - - trapb - fbne $f10, $ret - fmov $f16, $f0 - fbne $f11, $ret - - cmptlt/su $f16, $f17, $f11 - trapb - fcmovne $f11, $f17, $f0 -$ret: ret - -END (__fmax) - -/* Given the in-register format of single-precision, this works there too. */ -strong_alias (__fmax, __fmaxf) -weak_alias (__fmaxf, fmaxf) - -weak_alias (__fmax, fmax) -#ifdef NO_LONG_DOUBLE -strong_alias (__fmax, __fmaxl) -weak_alias (__fmaxl, fmaxl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fmax, fmaxl, GLIBC_2_1); -#endif diff --git a/sysdeps/alpha/fpu/s_fmaxf.S b/sysdeps/alpha/fpu/s_fmaxf.S deleted file mode 100644 index 3c2d62bb81..0000000000 --- a/sysdeps/alpha/fpu/s_fmaxf.S +++ /dev/null @@ -1 +0,0 @@ -/* __fmaxf is in s_fmax.c */ diff --git a/sysdeps/alpha/fpu/s_fmin.S b/sysdeps/alpha/fpu/s_fmin.S deleted file mode 100644 index 926bd32ec4..0000000000 --- a/sysdeps/alpha/fpu/s_fmin.S +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - .set noat - .set noreorder - - .text -ENTRY (__fmin) - .prologue 0 - - cmptun/su $f16, $f16, $f10 - cmptun/su $f17, $f17, $f11 - fmov $f17, $f0 - unop - - trapb - fbne $f10, $ret - fmov $f16, $f0 - fbne $f11, $ret - - cmptlt/su $f17, $f16, $f11 - trapb - fcmovne $f11, $f17, $f0 -$ret: ret - -END (__fmin) - -/* Given the in-register format of single-precision, this works there too. */ -strong_alias (__fmin, __fminf) -weak_alias (__fminf, fminf) - -weak_alias (__fmin, fmin) -#ifdef NO_LONG_DOUBLE -strong_alias (__fmin, __fminl) -weak_alias (__fminl, fminl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fmin, fminl, GLIBC_2_1); -#endif diff --git a/sysdeps/alpha/fpu/s_fminf.S b/sysdeps/alpha/fpu/s_fminf.S deleted file mode 100644 index 10ab7fe53c..0000000000 --- a/sysdeps/alpha/fpu/s_fminf.S +++ /dev/null @@ -1 +0,0 @@ -/* __fminf is in s_fmin.c */ diff --git a/sysdeps/alpha/fpu/s_isnan.c b/sysdeps/alpha/fpu/s_isnan.c deleted file mode 100644 index b56fdbe2c5..0000000000 --- a/sysdeps/alpha/fpu/s_isnan.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Return 1 if argument is a NaN, else 0. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Ugly kludge to avoid declarations. */ -#define __isnanf not___isnanf -#define isnanf not_isnanf -#define __GI___isnanf not__GI___isnanf - -#include -#include - -#undef __isnanf -#undef isnanf -#undef __GI___isnanf - -int -__isnan (double x) -{ - uint64_t ix; - EXTRACT_WORDS64 (ix, x); - return ix * 2 > 0xffe0000000000000ul; -} - -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__isnan, __isnanf) -weak_alias (__isnan, isnanf) - -/* ??? GCC 4.8 fails to look through chains of aliases with asm names - attached. Work around this for now. */ -hidden_ver (__isnan, __isnanf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif -#if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -#endif diff --git a/sysdeps/alpha/fpu/s_isnanf.c b/sysdeps/alpha/fpu/s_isnanf.c deleted file mode 100644 index af41e43850..0000000000 --- a/sysdeps/alpha/fpu/s_isnanf.c +++ /dev/null @@ -1 +0,0 @@ -/* In s_isnan.c */ diff --git a/sysdeps/alpha/fpu/s_llrint.c b/sysdeps/alpha/fpu/s_llrint.c deleted file mode 100644 index 5db97be037..0000000000 --- a/sysdeps/alpha/fpu/s_llrint.c +++ /dev/null @@ -1 +0,0 @@ -/* In s_lrint.c */ diff --git a/sysdeps/alpha/fpu/s_llrintf.c b/sysdeps/alpha/fpu/s_llrintf.c deleted file mode 100644 index 18f2885ef7..0000000000 --- a/sysdeps/alpha/fpu/s_llrintf.c +++ /dev/null @@ -1 +0,0 @@ -/* In s_lrintf.c */ diff --git a/sysdeps/alpha/fpu/s_llround.c b/sysdeps/alpha/fpu/s_llround.c deleted file mode 100644 index b212fbd8e5..0000000000 --- a/sysdeps/alpha/fpu/s_llround.c +++ /dev/null @@ -1 +0,0 @@ -/* In s_lround.c. */ diff --git a/sysdeps/alpha/fpu/s_llroundf.c b/sysdeps/alpha/fpu/s_llroundf.c deleted file mode 100644 index 73bdf3103f..0000000000 --- a/sysdeps/alpha/fpu/s_llroundf.c +++ /dev/null @@ -1 +0,0 @@ -/* In s_lroundf.c. */ diff --git a/sysdeps/alpha/fpu/s_lrint.c b/sysdeps/alpha/fpu/s_lrint.c deleted file mode 100644 index 2a644c57df..0000000000 --- a/sysdeps/alpha/fpu/s_lrint.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __llrint not___llrint -#define llrint not_llrint -#include -#include -#undef __llrint -#undef llrint - -long int -__lrint (double x) -{ - long ret; - - __asm ("cvttq/svd %1,%0" : "=&f"(ret) : "f"(x)); - - return ret; -} - -strong_alias (__lrint, __llrint) -weak_alias (__lrint, lrint) -weak_alias (__llrint, llrint) -#ifdef NO_LONG_DOUBLE -strong_alias (__lrint, __lrintl) -strong_alias (__lrint, __llrintl) -weak_alias (__lrintl, lrintl) -weak_alias (__llrintl, llrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lrint, lrintl, GLIBC_2_1); -compat_symbol (libm, __llrint, llrintl, GLIBC_2_1); -#endif diff --git a/sysdeps/alpha/fpu/s_lrintf.c b/sysdeps/alpha/fpu/s_lrintf.c deleted file mode 100644 index cfcf35caae..0000000000 --- a/sysdeps/alpha/fpu/s_lrintf.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __llrintf not___llrintf -#define llrintf not_llrintf -#include -#undef __llrintf -#undef llrintf - -long int -__lrintf (float x) -{ - double tmp; - long ret; - - __asm ("cvtst/s %2,%1\n\tcvttq/svd %1,%0" - : "=&f"(ret), "=&f"(tmp) : "f"(x)); - - return ret; -} - -strong_alias (__lrintf, __llrintf) -weak_alias (__lrintf, lrintf) -weak_alias (__llrintf, llrintf) diff --git a/sysdeps/alpha/fpu/s_lround.c b/sysdeps/alpha/fpu/s_lround.c deleted file mode 100644 index 78a067daf1..0000000000 --- a/sysdeps/alpha/fpu/s_lround.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __llround not___llround -#define llround not_llround -#include -#include -#undef __llround -#undef llround - -long int -__lround (double x) -{ - double adj, y; - - adj = copysign (0.5, x); - asm("addt/suc %1,%2,%0" : "=&f"(y) : "f"(x), "f"(adj)); - return y; -} - -strong_alias (__lround, __llround) -weak_alias (__lround, lround) -weak_alias (__llround, llround) -#ifdef NO_LONG_DOUBLE -strong_alias (__lround, __lroundl) -strong_alias (__lround, __llroundl) -weak_alias (__lroundl, lroundl) -weak_alias (__llroundl, llroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lround, lroundl, GLIBC_2_1); -compat_symbol (libm, __llround, llroundl, GLIBC_2_1); -#endif diff --git a/sysdeps/alpha/fpu/s_lroundf.c b/sysdeps/alpha/fpu/s_lroundf.c deleted file mode 100644 index 37df944224..0000000000 --- a/sysdeps/alpha/fpu/s_lroundf.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __llroundf not___llroundf -#define llroundf not_llroundf -#include -#undef __llroundf -#undef llroundf - - -long int -__lroundf (float x) -{ - float adj, y; - - adj = copysignf (0.5f, x); - asm("adds/suc %1,%2,%0" : "=&f"(y) : "f"(x), "f"(adj)); - return y; -} - -strong_alias (__lroundf, __llroundf) -weak_alias (__lroundf, lroundf) -weak_alias (__llroundf, llroundf) diff --git a/sysdeps/alpha/fpu/s_nearbyint.c b/sysdeps/alpha/fpu/s_nearbyint.c deleted file mode 100644 index c3f204fff1..0000000000 --- a/sysdeps/alpha/fpu/s_nearbyint.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#include - -#if LONG_DOUBLE_COMPAT (libm, GLIBC_2_1) -compat_symbol (libm, __nearbyint, nearbyintl, GLIBC_2_1); -#endif diff --git a/sysdeps/alpha/fpu/s_rint.c b/sysdeps/alpha/fpu/s_rint.c deleted file mode 100644 index fca35cf961..0000000000 --- a/sysdeps/alpha/fpu/s_rint.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - -double -__rint (double x) -{ - if (isnan (x)) - return x + x; - - if (isless (fabs (x), 9007199254740992.0)) /* 1 << DBL_MANT_DIG */ - { - double tmp1, new_x; - __asm ("cvttq/svid %2,%1\n\t" - "cvtqt/d %1,%0\n\t" - : "=f"(new_x), "=&f"(tmp1) - : "f"(x)); - - /* rint(-0.1) == -0, and in general we'll always have the same - sign as our input. */ - x = copysign(new_x, x); - } - return x; -} - -weak_alias (__rint, rint) -#ifdef NO_LONG_DOUBLE -strong_alias (__rint, __rintl) -weak_alias (__rint, rintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __rint, rintl, GLIBC_2_0); -#endif diff --git a/sysdeps/alpha/fpu/s_rintf.c b/sysdeps/alpha/fpu/s_rintf.c deleted file mode 100644 index b6e8d2dd07..0000000000 --- a/sysdeps/alpha/fpu/s_rintf.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - -float -__rintf (float x) -{ - if (isnanf (x)) - return x + x; - - if (isless (fabsf (x), 16777216.0f)) /* 1 << FLT_MANT_DIG */ - { - /* Note that Alpha S_Floating is stored in registers in a - restricted T_Floating format, so we don't even need to - convert back to S_Floating in the end. The initial - conversion to T_Floating is needed to handle denormals. */ - - float tmp1, tmp2, new_x; - - __asm ("cvtst/s %3,%2\n\t" - "cvttq/svid %2,%1\n\t" - "cvtqt/d %1,%0\n\t" - : "=f"(new_x), "=&f"(tmp1), "=&f"(tmp2) - : "f"(x)); - - /* rint(-0.1) == -0, and in general we'll always have the same - sign as our input. */ - x = copysignf(new_x, x); - } - return x; -} - -weak_alias (__rintf, rintf) diff --git a/sysdeps/alpha/fpu/s_trunc.c b/sysdeps/alpha/fpu/s_trunc.c deleted file mode 100644 index 68a013d222..0000000000 --- a/sysdeps/alpha/fpu/s_trunc.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - -/* Use the chopped rounding mode conversion instructions to implement trunc. */ - -double -__trunc (double x) -{ - double two52 = copysign (0x1.0p52, x); - double r, tmp; - - if (isgreaterequal (fabs (x), 0x1.0p52)) - return x; - - __asm ( - "addt/suc %2, %3, %1\n\tsubt/suc %1, %3, %0" - : "=&f"(r), "=&f"(tmp) - : "f"(x), "f"(two52)); - - /* trunc(-0) == -0, and in general we'll always have the same - sign as our input. */ - return copysign (r, x); -} - -weak_alias (__trunc, trunc) -#ifdef NO_LONG_DOUBLE -strong_alias (__trunc, __truncl) -weak_alias (__trunc, truncl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __trunc, truncl, GLIBC_2_1); -#endif diff --git a/sysdeps/alpha/fpu/s_truncf.c b/sysdeps/alpha/fpu/s_truncf.c deleted file mode 100644 index ca47fdc2b5..0000000000 --- a/sysdeps/alpha/fpu/s_truncf.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - -/* Use the chopped rounding mode conversion instructions to implement trunc. */ - -float -__truncf (float x) -{ - float two23 = copysignf (0x1.0p23, x); - float r, tmp; - - if (isgreaterequal (fabsf (x), 0x1.0p23)) - return x; - - __asm ( - "adds/suc %2, %3, %1\n\tsubs/suc %1, %3, %0" - : "=&f"(r), "=&f"(tmp) - : "f"(x), "f"(two23)); - - /* trunc(-0) == -0, and in general we'll always have the same - sign as our input. */ - return copysignf (r, x); -} - -weak_alias (__truncf, truncf) diff --git a/sysdeps/alpha/gccframe.h b/sysdeps/alpha/gccframe.h deleted file mode 100644 index 769cf2da65..0000000000 --- a/sysdeps/alpha/gccframe.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Definition of object in frame unwind info. alpha version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define FIRST_PSEUDO_REGISTER 64 - -#include diff --git a/sysdeps/alpha/hp-timing.h b/sysdeps/alpha/hp-timing.h deleted file mode 100644 index 84380f34a4..0000000000 --- a/sysdeps/alpha/hp-timing.h +++ /dev/null @@ -1,46 +0,0 @@ -/* High precision, low overhead timing functions. Alpha version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _HP_TIMING_H -#define _HP_TIMING_H 1 - -/* We always have the timestamp register, but it's got only a 4 second - range. Use it for ld.so profiling only. */ -#define HP_TIMING_AVAIL (0) -#define HP_SMALL_TIMING_AVAIL (1) - -/* We indeed have inlined functions. */ -#define HP_TIMING_INLINE (1) - -/* We use 32 bit values for the times. */ -typedef unsigned int hp_timing_t; - -/* The "rpcc" instruction returns a 32-bit counting half and a 32-bit - "virtual cycle counter displacement". Subtracting the two gives us - a virtual cycle count. */ -#define HP_TIMING_NOW(VAR) \ - do { \ - unsigned long int x_; \ - asm volatile ("rpcc %0" : "=r"(x_)); \ - (VAR) = (int) (x_) - (int) (x_ >> 32); \ - } while (0) - -#include - -#endif /* hp-timing.h */ diff --git a/sysdeps/alpha/htonl.S b/sysdeps/alpha/htonl.S deleted file mode 100644 index 17b25c3424..0000000000 --- a/sysdeps/alpha/htonl.S +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -ENTRY(htonl) -#ifdef PROF - ldgp gp, 0(pv) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#else - .prologue 0 -#endif - - inslh a0, 7, t0 # t0 = 0000000000AABBCC - inswl a0, 3, t1 # t1 = 000000CCDD000000 - or t1, t0, t1 # t1 = 000000CCDDAABBCC - srl t1, 16, t2 # t2 = 0000000000CCDDAA - zapnot t1, 0x0A, t0 # t0 = 00000000DD00BB00 - zapnot t2, 0x05, t3 # t3 = 0000000000CC00AA - addl t0, t3, v0 # v0 = ssssssssDDCCBBAA - ret - - END(htonl) - -weak_alias (htonl, ntohl) diff --git a/sysdeps/alpha/htons.S b/sysdeps/alpha/htons.S deleted file mode 100644 index e61322d003..0000000000 --- a/sysdeps/alpha/htons.S +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -ENTRY(htons) -#ifdef PROF - ldgp gp, 0(pv) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#else - .prologue 0 -#endif - - extwh a0, 7, t1 # t1 = bb00 - extbl a0, 1, v0 # v0 = 00aa - bis v0, t1, v0 # v0 = bbaa - ret - - END(htons) - -weak_alias (htons, ntohs) diff --git a/sysdeps/alpha/jmpbuf-offsets.h b/sysdeps/alpha/jmpbuf-offsets.h deleted file mode 100644 index a9e752999f..0000000000 --- a/sysdeps/alpha/jmpbuf-offsets.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Private macros for accessing __jmp_buf contents. Alpha version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define JB_S0 0 -#define JB_S1 1 -#define JB_S2 2 -#define JB_S3 3 -#define JB_S4 4 -#define JB_S5 5 -#define JB_PC 6 -#define JB_FP 7 -#define JB_SP 8 -#define JB_F2 9 -#define JB_F3 10 -#define JB_F4 11 -#define JB_F5 12 -#define JB_F6 13 -#define JB_F7 14 -#define JB_F8 15 -#define JB_F9 16 diff --git a/sysdeps/alpha/jmpbuf-unwind.h b/sysdeps/alpha/jmpbuf-unwind.h deleted file mode 100644 index b90c81c481..0000000000 --- a/sysdeps/alpha/jmpbuf-unwind.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame containing a local - variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(_jmpbuf, _address, _demangle) \ - ((void *)(_address) < (void *) _demangle ((_jmpbuf)[JB_SP])) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf regs) -{ - uintptr_t sp = regs[JB_SP]; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return sp; -} - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/alpha/ldiv.S b/sysdeps/alpha/ldiv.S deleted file mode 100644 index a32264b143..0000000000 --- a/sysdeps/alpha/ldiv.S +++ /dev/null @@ -1,218 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "div_libc.h" - -#undef FRAME -#ifdef __alpha_fix__ -#define FRAME 0 -#else -#define FRAME 16 -#endif - -#undef X -#undef Y -#define X $17 -#define Y $18 - - .set noat - - .align 4 - .globl ldiv - .ent ldiv -ldiv: - .frame sp, FRAME, ra -#if FRAME > 0 - lda sp, -FRAME(sp) -#endif -#ifdef PROF - .set macro - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .set nomacro - .prologue 1 -#else - .prologue 0 -#endif - - beq Y, $divbyzero - excb - mf_fpcr $f10 - - _ITOFT2 X, $f0, 0, Y, $f1, 8 - - .align 4 - cvtqt $f0, $f0 - cvtqt $f1, $f1 - divt/c $f0, $f1, $f0 - unop - - /* Check to see if X fit in the double as an exact value. */ - sll X, (64-53), AT - sra AT, (64-53), AT - cmpeq X, AT, AT - beq AT, $x_big - - /* If we get here, we're expecting exact results from the division. - Do nothing else besides convert and clean up. */ - cvttq/c $f0, $f0 - excb - mt_fpcr $f10 - _FTOIT $f0, $0, 0 - -$egress: - mulq $0, Y, $1 - subq X, $1, $1 - - stq $0, 0($16) - stq $1, 8($16) - mov $16, $0 - -#if FRAME > 0 - lda sp, FRAME(sp) -#endif - ret - - .align 4 -$x_big: - /* If we get here, X is large enough that we don't expect exact - results, and neither X nor Y got mis-translated for the fp - division. Our task is to take the fp result, figure out how - far it's off from the correct result and compute a fixup. */ - -#define Q v0 /* quotient */ -#define R t0 /* remainder */ -#define SY t1 /* scaled Y */ -#define S t2 /* scalar */ -#define QY t3 /* Q*Y */ - - /* The fixup code below can only handle unsigned values. */ - or X, Y, AT - mov $31, t5 - blt AT, $fix_sign_in -$fix_sign_in_ret1: - cvttq/c $f0, $f0 - - _FTOIT $f0, Q, 8 -$fix_sign_in_ret2: - mulq Q, Y, QY - excb - mt_fpcr $f10 - - .align 4 - subq QY, X, R - mov Y, SY - mov 1, S - bgt R, $q_high - -$q_high_ret: - subq X, QY, R - mov Y, SY - mov 1, S - bgt R, $q_low - -$q_low_ret: - negq Q, t4 - cmovlbs t5, t4, Q - br $egress - - .align 4 - /* The quotient that we computed was too large. We need to reduce - it by S such that Y*S >= R. Obviously the closer we get to the - correct value the better, but overshooting high is ok, as we'll - fix that up later. */ -0: - addq SY, SY, SY - addq S, S, S -$q_high: - cmpult SY, R, AT - bne AT, 0b - - subq Q, S, Q - unop - subq QY, SY, QY - br $q_high_ret - - .align 4 - /* The quotient that we computed was too small. Divide Y by the - current remainder (R) and add that to the existing quotient (Q). - The expectation, of course, is that R is much smaller than X. */ - /* Begin with a shift-up loop. Compute S such that Y*S >= R. We - already have a copy of Y in SY and the value 1 in S. */ -0: - addq SY, SY, SY - addq S, S, S -$q_low: - cmpult SY, R, AT - bne AT, 0b - - /* Shift-down and subtract loop. Each iteration compares our scaled - Y (SY) with the remainder (R); if SY <= R then X is divisible by - Y's scalar (S) so add it to the quotient (Q). */ -2: addq Q, S, t3 - srl S, 1, S - cmpule SY, R, AT - subq R, SY, t4 - - cmovne AT, t3, Q - cmovne AT, t4, R - srl SY, 1, SY - bne S, 2b - - br $q_low_ret - - .align 4 -$fix_sign_in: - /* If we got here, then X|Y is negative. Need to adjust everything - such that we're doing unsigned division in the fixup loop. */ - /* T5 is true if result should be negative. */ - xor X, Y, AT - cmplt AT, 0, t5 - cmplt X, 0, AT - negq X, t0 - - cmovne AT, t0, X - cmplt Y, 0, AT - negq Y, t0 - - cmovne AT, t0, Y - blbc t5, $fix_sign_in_ret1 - - cvttq/c $f0, $f0 - _FTOIT $f0, Q, 8 - .align 3 - negq Q, Q - br $fix_sign_in_ret2 - -$divbyzero: - mov a0, v0 - lda a0, GEN_INTDIV - call_pal PAL_gentrap - stq zero, 0(v0) - stq zero, 8(v0) - -#if FRAME > 0 - lda sp, FRAME(sp) -#endif - ret - - .end ldiv - -weak_alias (ldiv, lldiv) -weak_alias (ldiv, imaxdiv) diff --git a/sysdeps/alpha/ldsodefs.h b/sysdeps/alpha/ldsodefs.h deleted file mode 100644 index 09dfed764f..0000000000 --- a/sysdeps/alpha/ldsodefs.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef __LDSODEFS_H - -#include - -struct La_alpha_regs; -struct La_alpha_retval; - -#define ARCH_PLTENTER_MEMBERS \ - Elf64_Addr (*alpha_gnu_pltenter) (Elf64_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - struct La_alpha_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep); - -#define ARCH_PLTEXIT_MEMBERS \ - unsigned int (*alpha_gnu_pltexit) (Elf64_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - const struct La_alpha_regs *, \ - struct La_alpha_retval *, \ - const char *); - -#include_next - -#endif diff --git a/sysdeps/alpha/libc-tls.c b/sysdeps/alpha/libc-tls.c deleted file mode 100644 index 392e6c7289..0000000000 --- a/sysdeps/alpha/libc-tls.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. Alpha version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* On Alpha, linker optimizations are not required, so __tls_get_addr - can be called even in statically linked binaries. In this case module - must be always 1 and PT_TLS segment exist in the binary, otherwise it - would not link. */ - -void * -__tls_get_addr (tls_index *ti) -{ - dtv_t *dtv = THREAD_DTV (); - return (char *) dtv[1].pointer.val + ti->ti_offset; -} diff --git a/sysdeps/alpha/lldiv.S b/sysdeps/alpha/lldiv.S deleted file mode 100644 index 80c450a3fc..0000000000 --- a/sysdeps/alpha/lldiv.S +++ /dev/null @@ -1 +0,0 @@ -/* lldiv is the same as ldiv on the Alpha. */ diff --git a/sysdeps/alpha/lshift.S b/sysdeps/alpha/lshift.S deleted file mode 100644 index a9386e50c0..0000000000 --- a/sysdeps/alpha/lshift.S +++ /dev/null @@ -1,107 +0,0 @@ - # Alpha 21064 __mpn_lshift -- - - # Copyright (C) 1994-2017 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library. If not, see . - - - # INPUT PARAMETERS - # res_ptr r16 - # s1_ptr r17 - # size r18 - # cnt r19 - - # This code runs at 4.8 cycles/limb on the 21064. With infinite unrolling, - # it would take 4 cycles/limb. It should be possible to get down to 3 - # cycles/limb since both ldq and stq can be paired with the other used - # instructions. But there are many restrictions in the 21064 pipeline that - # makes it hard, if not impossible, to get down to 3 cycles/limb: - - # 1. ldq has a 3 cycle delay, srl and sll have a 2 cycle delay. - # 2. Only aligned instruction pairs can be paired. - # 3. The store buffer or silo might not be able to deal with the bandwidth. - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_lshift - .ent __mpn_lshift -__mpn_lshift: - .frame $30,0,$26,0 - - s8addq $18,$17,$17 # make r17 point at end of s1 - ldq $4,-8($17) # load first limb - subq $17,8,$17 - subq $31,$19,$7 - s8addq $18,$16,$16 # make r16 point at end of RES - subq $18,1,$18 - and $18,4-1,$20 # number of limbs in first loop - srl $4,$7,$0 # compute function result - - beq $20,.L0 - subq $18,$20,$18 - - .align 3 -.Loop0: - ldq $3,-8($17) - subq $16,8,$16 - subq $17,8,$17 - subq $20,1,$20 - sll $4,$19,$5 - srl $3,$7,$6 - bis $3,$3,$4 - bis $5,$6,$8 - stq $8,0($16) - bne $20,.Loop0 - -.L0: beq $18,.Lend - - .align 3 -.Loop: ldq $3,-8($17) - subq $16,32,$16 - subq $18,4,$18 - sll $4,$19,$5 - srl $3,$7,$6 - - ldq $4,-16($17) - sll $3,$19,$1 - bis $5,$6,$8 - stq $8,24($16) - srl $4,$7,$2 - - ldq $3,-24($17) - sll $4,$19,$5 - bis $1,$2,$8 - stq $8,16($16) - srl $3,$7,$6 - - ldq $4,-32($17) - sll $3,$19,$1 - bis $5,$6,$8 - stq $8,8($16) - srl $4,$7,$2 - - subq $17,32,$17 - bis $1,$2,$8 - stq $8,0($16) - - bgt $18,.Loop - -.Lend: sll $4,$19,$8 - stq $8,-8($16) - ret $31,($26),1 - .end __mpn_lshift diff --git a/sysdeps/alpha/machine-gmon.h b/sysdeps/alpha/machine-gmon.h deleted file mode 100644 index 6937f6bb99..0000000000 --- a/sysdeps/alpha/machine-gmon.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Machine-specific calling sequence for `mcount' profiling function. alpha - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define _MCOUNT_DECL(from, self) \ - void __mcount (u_long from, u_long self) - -/* Call __mcount with our the return PC for our caller, and the return - PC our caller will return to. Empty since we use an assembly stub - instead. */ -#define MCOUNT diff --git a/sysdeps/alpha/memchr.c b/sysdeps/alpha/memchr.c deleted file mode 100644 index 402088dc9e..0000000000 --- a/sysdeps/alpha/memchr.c +++ /dev/null @@ -1,177 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -typedef unsigned long word; - -static inline word -ldq_u(const void *s) -{ - return *(const word *)((word)s & -8); -} - -#define unlikely(X) __builtin_expect ((X), 0) -#define prefetch(X) __builtin_prefetch ((void *)(X), 0) - -#define cmpbeq0(X) __builtin_alpha_cmpbge(0, (X)) -#define find(X, Y) cmpbeq0 ((X) ^ (Y)) - -/* Search no more than N bytes of S for C. */ - -void * -__memchr (const void *s, int xc, size_t n) -{ - const word *s_align; - word t, current, found, mask, offset; - - if (unlikely (n == 0)) - return 0; - - current = ldq_u (s); - - /* Replicate low byte of XC into all bytes of C. */ - t = xc & 0xff; /* 0000000c */ - t = (t << 8) | t; /* 000000cc */ - t = (t << 16) | t; /* 0000cccc */ - const word c = (t << 32) | t; /* cccccccc */ - - /* Align the source, and decrement the count by the number - of bytes searched in the first word. */ - s_align = (const word *)((word)s & -8); - { - size_t inc = n + ((word)s & 7); - n = inc | -(inc < n); - } - - /* Deal with misalignment in the first word for the comparison. */ - mask = (1ul << ((word)s & 7)) - 1; - - /* If the entire string fits within one word, we may need masking - at both the front and the back of the string. */ - if (unlikely (n <= 8)) - { - mask |= -1ul << n; - goto last_quad; - } - - found = find (current, c) & ~mask; - if (unlikely (found)) - goto found_it; - - s_align++; - n -= 8; - - /* If the block is sufficiently large, align to cacheline and prefetch. */ - if (unlikely (n >= 256)) - { - /* Prefetch 3 cache lines beyond the one we're working on. */ - prefetch (s_align + 8); - prefetch (s_align + 16); - prefetch (s_align + 24); - - while ((word)s_align & 63) - { - current = *s_align; - found = find (current, c); - if (found) - goto found_it; - s_align++; - n -= 8; - } - - /* Within each cacheline, advance the load for the next word - before the test for the previous word is complete. This - allows us to hide the 3 cycle L1 cache load latency. We - only perform this advance load within a cacheline to prevent - reading across page boundary. */ -#define CACHELINE_LOOP \ - do { \ - word i, next = s_align[0]; \ - for (i = 0; i < 7; ++i) \ - { \ - current = next; \ - next = s_align[1]; \ - found = find (current, c); \ - if (unlikely (found)) \ - goto found_it; \ - s_align++; \ - } \ - current = next; \ - found = find (current, c); \ - if (unlikely (found)) \ - goto found_it; \ - s_align++; \ - n -= 64; \ - } while (0) - - /* While there's still lots more data to potentially be read, - continue issuing prefetches for the 4th cacheline out. */ - while (n >= 256) - { - prefetch (s_align + 24); - CACHELINE_LOOP; - } - - /* Up to 3 cache lines remaining. Continue issuing advanced - loads, but stop prefetching. */ - while (n >= 64) - CACHELINE_LOOP; - - /* We may have exhausted the buffer. */ - if (n == 0) - return NULL; - } - - /* Quadword aligned loop. */ - current = *s_align; - while (n > 8) - { - found = find (current, c); - if (unlikely (found)) - goto found_it; - current = *++s_align; - n -= 8; - } - - /* The last word may need masking at the tail of the compare. */ - mask = -1ul << n; - last_quad: - found = find (current, c) & ~mask; - if (found == 0) - return NULL; - - found_it: -#ifdef __alpha_cix__ - offset = __builtin_alpha_cttz (found); -#else - /* Extract LSB. */ - found &= -found; - - /* Binary search for the LSB. */ - offset = (found & 0x0f ? 0 : 4); - offset += (found & 0x33 ? 0 : 2); - offset += (found & 0x55 ? 0 : 1); -#endif - - return (void *)((word)s_align + offset); -} - -#ifdef weak_alias -weak_alias (__memchr, memchr) -#endif -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/alpha/memset.S b/sysdeps/alpha/memset.S deleted file mode 100644 index 2e061b90e6..0000000000 --- a/sysdeps/alpha/memset.S +++ /dev/null @@ -1,127 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Fill a block of memory with a character. Optimized for the Alpha - architecture: - - - memory accessed as aligned quadwords only - - destination memory not read unless needed for good cache behaviour - - basic blocks arranged to optimize branch prediction for full-quadword - aligned memory blocks. - - partial head and tail quadwords constructed with byte-mask instructions - - This is generally scheduled for the EV5 (got to look out for my own - interests :-), but with EV4 needs in mind. There *should* be no more - stalls for the EV4 than there are for the EV5. -*/ - - -#include - - .set noat - .set noreorder - - .text - .type memset, @function - .globl memset - .usepv memset, USEPV_PROF - - cfi_startproc - - /* On entry to this basic block: - t3 == loop counter - t4 == bytes in partial final word - a0 == possibly misaligned destination pointer - a1 == replicated source character */ - - .align 3 -memset_loop: - beq t3, $tail - blbc t3, 0f # skip single store if count even - - stq_u a1, 0(a0) # e0 : store one word - subq t3, 1, t3 # .. e1 : - addq a0, 8, a0 # e0 : - beq t3, $tail # .. e1 : - -0: stq_u a1, 0(a0) # e0 : store two words - subq t3, 2, t3 # .. e1 : - stq_u a1, 8(a0) # e0 : - addq a0, 16, a0 # .. e1 : - bne t3, 0b # e1 : - -$tail: bne t4, 1f # is there a tail to do? - ret # no - - .align 3 -1: ldq_u t0, 0(a0) # e1 : yes, load original data - mskql a1, t4, t1 # .. e0 : - mskqh t0, t4, t0 # e0 : - or t0, t1, t0 # e1 (stall) - stq_u t0, 0(a0) # e0 : - ret # .. e1 : - -memset: -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount -#endif - - and a1, 0xff, a1 # e0 : zero extend input character - mov a0, v0 # .. e1 : move return value in place - sll a1, 8, t0 # e0 : begin replicating the char - beq a2, $done # .. e1 : early exit for zero-length store - or t0, a1, a1 # e0 : - and a0, 7, t1 # .. e1 : dest misalignment - sll a1, 16, t0 # e0 : - addq a2, t1, a2 # .. e1 : add dest misalignment to count - or t0, a1, a1 # e0 : - srl a2, 3, t3 # .. e1 : loop = count >> 3 - sll a1, 32, t0 # e0 : - and a2, 7, t4 # .. e1 : find number of bytes in tail - or t0, a1, a1 # e0 : character replication done - - beq t1, memset_loop # .. e1 : aligned head, jump right in - - ldq_u t0, 0(a0) # e1 : load original data to mask into - mskqh a1, a0, t1 # .. e0 : - - cmpult a2, 8, t2 # e0 : is this a sub-word set? - bne t2, $oneq # .. e1 (zdb) - - mskql t0, a0, t0 # e0 : we span words. finish this partial - subq t3, 1, t3 # .. e1 : - addq a0, 8, a0 # e0 : - or t0, t1, t0 # .. e1 : - stq_u t0, -8(a0) # e0 : - br memset_loop # .. e1 : - - .align 3 -$oneq: - mskql t1, a2, t1 # e0 : entire operation within one word - mskql t0, a0, t2 # e0 : - mskqh t0, a2, t3 # e0 : - or t1, t2, t0 # .. e1 : - or t0, t3, t0 # e1 : - stq_u t0, 0(a0) # e0 (stall) - -$done: ret - - cfi_endproc -libc_hidden_builtin_def (memset) diff --git a/sysdeps/alpha/memusage.h b/sysdeps/alpha/memusage.h deleted file mode 100644 index 83a0ea531b..0000000000 --- a/sysdeps/alpha/memusage.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("$30"); stack_ptr; }) - -#include diff --git a/sysdeps/alpha/mul_1.S b/sysdeps/alpha/mul_1.S deleted file mode 100644 index 099e22b441..0000000000 --- a/sysdeps/alpha/mul_1.S +++ /dev/null @@ -1,83 +0,0 @@ - # Alpha 21064 __mpn_mul_1 -- Multiply a limb vector with a limb and store - # the result in a second limb vector. - - # Copyright (C) 1992-2017 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library. If not, see . - - - # INPUT PARAMETERS - # res_ptr r16 - # s1_ptr r17 - # size r18 - # s2_limb r19 - - # This code runs at 42 cycles/limb on the EV4 and 18 cycles/limb on the EV5. - - # To improve performance for long multiplications, we would use - # 'fetch' for S1 and 'fetch_m' for RES. It's not obvious how to use - # these instructions without slowing down the general code: 1. We can - # only have two prefetches in operation at any time in the Alpha - # architecture. 2. There will seldom be any special alignment - # between RES_PTR and S1_PTR. Maybe we can simply divide the current - # loop into an inner and outer loop, having the inner loop handle - # exactly one prefetch block? - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_mul_1 - .ent __mpn_mul_1 2 -__mpn_mul_1: - .frame $30,0,$26 - - ldq $2,0($17) # $2 = s1_limb - subq $18,1,$18 # size-- - mulq $2,$19,$3 # $3 = prod_low - bic $31,$31,$4 # clear cy_limb - umulh $2,$19,$0 # $0 = prod_high - beq $18,Lend1 # jump if size was == 1 - ldq $2,8($17) # $2 = s1_limb - subq $18,1,$18 # size-- - stq $3,0($16) - beq $18,Lend2 # jump if size was == 2 - - .align 3 -Loop: mulq $2,$19,$3 # $3 = prod_low - addq $4,$0,$0 # cy_limb = cy_limb + 'cy' - subq $18,1,$18 # size-- - umulh $2,$19,$4 # $4 = cy_limb - ldq $2,16($17) # $2 = s1_limb - addq $17,8,$17 # s1_ptr++ - addq $3,$0,$3 # $3 = cy_limb + prod_low - stq $3,8($16) - cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) - addq $16,8,$16 # res_ptr++ - bne $18,Loop - -Lend2: mulq $2,$19,$3 # $3 = prod_low - addq $4,$0,$0 # cy_limb = cy_limb + 'cy' - umulh $2,$19,$4 # $4 = cy_limb - addq $3,$0,$3 # $3 = cy_limb + prod_low - cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) - stq $3,8($16) - addq $4,$0,$0 # cy_limb = prod_high + cy - ret $31,($26),1 -Lend1: stq $3,0($16) - ret $31,($26),1 - - .end __mpn_mul_1 diff --git a/sysdeps/alpha/nptl/Makefile b/sysdeps/alpha/nptl/Makefile deleted file mode 100644 index 90f5fcf350..0000000000 --- a/sysdeps/alpha/nptl/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (C) 2003-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# . - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif diff --git a/sysdeps/alpha/nptl/bits/pthreadtypes-arch.h b/sysdeps/alpha/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index b6f6cb1347..0000000000 --- a/sysdeps/alpha/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Machine-specific pthread type layouts. Alpha version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -#define _BITS_PTHREADTYPES_ARCH_H 1 - -#define __SIZEOF_PTHREAD_ATTR_T 56 -#define __SIZEOF_PTHREAD_MUTEX_T 40 -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_RWLOCK_T 56 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -#define __SIZEOF_PTHREAD_BARRIER_T 32 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - -/* Definitions for internal mutex struct. */ -#define __PTHREAD_COMPAT_PADDING_MID -#define __PTHREAD_COMPAT_PADDING_END -#define __PTHREAD_MUTEX_LOCK_ELISION 0 - -#define __LOCK_ALIGNMENT -#define __ONCE_ALIGNMENT - -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; - int __cur_writer; - int __shared; - unsigned long int __pad1; - unsigned long int __pad2; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned int __flags; -}; - -#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/alpha/nptl/pthread_spin_lock.S b/sysdeps/alpha/nptl/pthread_spin_lock.S deleted file mode 100644 index 5a28bdce3a..0000000000 --- a/sysdeps/alpha/nptl/pthread_spin_lock.S +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - - .text - .align 4 - - .globl pthread_spin_lock - .ent pthread_spin_lock -pthread_spin_lock: - .frame $sp, 0, $26, 0 - .prologue 0 - -0: ldl_l $1, 0($16) - lda $2, 1 - lda $0, 0 - bne $1, 1f - - stl_c $2, 0($16) - beq $2, 1f - mb - ret - -1: ldl $1, 0($16) - bne $1, 1b - unop - br 0b - - .end pthread_spin_lock diff --git a/sysdeps/alpha/nptl/pthread_spin_trylock.S b/sysdeps/alpha/nptl/pthread_spin_trylock.S deleted file mode 100644 index a5eab1353d..0000000000 --- a/sysdeps/alpha/nptl/pthread_spin_trylock.S +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -#define _ERRNO_H 1 -#include - - .text - .align 4 - - .globl pthread_spin_trylock - .ent pthread_spin_trylock -pthread_spin_trylock: - .frame $sp, 0, $26, 0 - .prologue 0 - -0: ldl_l $1, 0($16) - lda $2, 1 - lda $0, EBUSY - bne $1, 1f - - stl_c $2, 0($16) - beq $2, 2f - mb - lda $0, 0 - -1: ret -2: br 0b - - .end pthread_spin_trylock diff --git a/sysdeps/alpha/nptl/pthreaddef.h b/sysdeps/alpha/nptl/pthreaddef.h deleted file mode 100644 index 581dd60a39..0000000000 --- a/sysdeps/alpha/nptl/pthreaddef.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (4 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. The ABI requires 16. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 4096 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 16 - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME __builtin_frame_address (0) diff --git a/sysdeps/alpha/nptl/tcb-offsets.sym b/sysdeps/alpha/nptl/tcb-offsets.sym deleted file mode 100644 index 1005621b37..0000000000 --- a/sysdeps/alpha/nptl/tcb-offsets.sym +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include - --- - --- Abuse tls.h macros to derive offsets relative to the thread register. --- # define __builtin_thread_pointer() ((void *) 0) --- # define thread_offsetof(mem) ((void *) &THREAD_SELF->mem - (void *) 0) --- Ho hum, this doesn't work in gcc4, so Know Things about THREAD_SELF -#define thread_offsetof(mem) (long)(offsetof(struct pthread, mem) - sizeof(struct pthread)) - -MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) -TID_OFFSET thread_offsetof (tid) diff --git a/sysdeps/alpha/nptl/tls.h b/sysdeps/alpha/nptl/tls.h deleted file mode 100644 index c16f5da04a..0000000000 --- a/sysdeps/alpha/nptl/tls.h +++ /dev/null @@ -1,132 +0,0 @@ -/* Definition for thread-local data handling. NPTL/Alpha version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _TLS_H -#define _TLS_H 1 - -# include - -#ifndef __ASSEMBLER__ -# include -# include -# include -# include - -/* Get system call information. */ -# include - -/* The TP points to the start of the thread blocks. */ -# define TLS_DTV_AT_TP 1 -# define TLS_TCB_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include - -typedef struct -{ - dtv_t *dtv; - void *__private; -} tcbhead_t; - -/* This is the size of the initial TCB. */ -# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN 16 - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE sizeof (tcbhead_t) - -/* This is the size we need before TCB. */ -# define TLS_PRE_TCB_SIZE sizeof (struct pthread) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN 16 - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(tcbp, dtvp) \ - (((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1) - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtv) \ - (THREAD_DTV() = (dtv)) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(tcbp) \ - (((tcbhead_t *) (tcbp))->dtv) - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(tcbp) \ - (__builtin_set_thread_pointer ((void *)(tcbp)), NULL) - -/* Value passed to 'clone' for initialization of the thread register. */ -# define TLS_DEFINE_INIT_TP(tp, pd) void *tp = (pd) + 1 - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - (((tcbhead_t *) __builtin_thread_pointer ())->dtv) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF \ - ((struct pthread *)__builtin_thread_pointer () - 1) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF \ - REGISTER (64, 64, 32 * 8, -sizeof (struct pthread)) - -/* Access to data in the thread descriptor is easy. */ -#define THREAD_GETMEM(descr, member) \ - descr->member -#define THREAD_GETMEM_NC(descr, member, idx) \ - descr->member[idx] -#define THREAD_SETMEM(descr, member, value) \ - descr->member = (value) -#define THREAD_SETMEM_NC(descr, member, idx, value) \ - descr->member[idx] = (value) - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#else /* __ASSEMBLER__ */ -# include -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/alpha/nscd-types.h b/sysdeps/alpha/nscd-types.h deleted file mode 100644 index c222ef1204..0000000000 --- a/sysdeps/alpha/nscd-types.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Types for the NSCD implementation. Alpha version. - Copyright (c) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -typedef int64_t nscd_ssize_t; diff --git a/sysdeps/alpha/preconfigure b/sysdeps/alpha/preconfigure deleted file mode 100644 index cb02cffc3a..0000000000 --- a/sysdeps/alpha/preconfigure +++ /dev/null @@ -1,3 +0,0 @@ -case "$machine" in -alpha*) base_machine=alpha machine=alpha/$machine -esac diff --git a/sysdeps/alpha/rawmemchr.S b/sysdeps/alpha/rawmemchr.S deleted file mode 100644 index d32d037bfa..0000000000 --- a/sysdeps/alpha/rawmemchr.S +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Return pointer to first occurrence of CH in STR. */ - -#include - - .set noreorder - .set noat - -ENTRY(__rawmemchr) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - zapnot a1, 1, a1 # e0 : zero extend the search character - ldq_u t0, 0(a0) # .. e1 : load first quadword - sll a1, 8, t5 # e0 : replicate the search character - andnot a0, 7, v0 # .. e1 : align our loop pointer - - or t5, a1, a1 # e0 : - lda t4, -1 # .. e1 : build garbage mask - sll a1, 16, t5 # e0 : - unop # : - - mskqh t4, a0, t4 # e0 : - or t5, a1, a1 # .. e1 : - sll a1, 32, t5 # e0 : - cmpbge zero, t4, t4 # .. e1 : bits set iff byte is garbage - - or t5, a1, a1 # e0 : - xor t0, a1, t1 # .. e1 : make bytes == c zero - cmpbge zero, t1, t3 # e0 : bits set iff byte == c - unop # : - - andnot t3, t4, t0 # e0 : clear garbage bits - fnop # .. fa : - unop # : - bne t0, $found # .. e1 (zdb) - - .align 4 -$loop: - ldq t0, 8(v0) # e0 : - addq v0, 8, v0 # .. e1 : - nop # e0 : - xor t0, a1, t1 # .. e1 (ev5 data stall) - - cmpbge zero, t1, t0 # e0 : bits set iff byte == c - beq t0, $loop # .. e1 (zdb) - -$found: - negq t0, t1 # e0 : clear all but least set bit - and t0, t1, t0 # e1 (stall) - and t0, 0xf0, t2 # e0 : binary search for that set bit - and t0, 0xcc, t3 # .. e1 : - - and t0, 0xaa, t4 # e0 : - cmovne t2, 4, t2 # .. e1 : - cmovne t3, 2, t3 # e0 : - cmovne t4, 1, t4 # .. e1 : - - addq t2, t3, t2 # e0 : - addq v0, t4, v0 # .. e1 : - addq v0, t2, v0 # e0 : - ret # .. e1 : - - END(__rawmemchr) - -libc_hidden_def (__rawmemchr) -weak_alias (__rawmemchr, rawmemchr) diff --git a/sysdeps/alpha/reml.S b/sysdeps/alpha/reml.S deleted file mode 100644 index 60fc6b8cad..0000000000 --- a/sysdeps/alpha/reml.S +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "div_libc.h" - -/* 32-bit signed int remainder. This is not a normal C function. Argument - registers are t10 and t11, the result goes in t12. Only t12 and AT may - be clobbered. - - The FPU can handle the division for all input values except zero. - All we have to do is compute the remainder via multiply-and-subtract. - - The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE - for cvttq/c even without /sui being set. It will not, however, properly - raise the exception, so we don't have to worry about FPCR_INED being clear - and so dying by SIGFPE. */ - -#ifndef EXTEND -#define EXTEND(S,D) sextl S, D -#endif - - .text - .align 4 - .globl __reml - .type __reml, @funcnoplt - .usepv __reml, no - - cfi_startproc - cfi_return_column (RA) -__reml: - lda sp, -FRAME(sp) - cfi_def_cfa_offset (FRAME) - CALL_MCOUNT - stt $f0, 0(sp) - excb - beq Y, DIVBYZERO - - stt $f1, 8(sp) - stt $f2, 16(sp) - cfi_rel_offset ($f0, 0) - cfi_rel_offset ($f1, 8) - cfi_rel_offset ($f2, 16) - mf_fpcr $f2 - - EXTEND (X, RV) - EXTEND (Y, AT) - _ITOFT2 RV, $f0, 24, AT, $f1, 32 - cvtqt $f0, $f0 - cvtqt $f1, $f1 - divt/c $f0, $f1, $f0 - cvttq/c $f0, $f0 - excb - mt_fpcr $f2 - _FTOIT $f0, RV, 24 - - ldt $f0, 0(sp) - mull RV, Y, RV - ldt $f1, 8(sp) - ldt $f2, 16(sp) - lda sp, FRAME(sp) - cfi_restore ($f0) - cfi_restore ($f1) - cfi_restore ($f2) - cfi_def_cfa_offset (0) - subl X, RV, RV - ret $31, (RA), 1 - - cfi_endproc - .size __reml, .-__reml - - DO_DIVBYZERO diff --git a/sysdeps/alpha/remlu.S b/sysdeps/alpha/remlu.S deleted file mode 100644 index f8691e19a4..0000000000 --- a/sysdeps/alpha/remlu.S +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED -#define EXTEND(S,D) zapnot S, 15, D -#define __reml __remlu -#include diff --git a/sysdeps/alpha/remq.S b/sysdeps/alpha/remq.S deleted file mode 100644 index cfc82aeb8b..0000000000 --- a/sysdeps/alpha/remq.S +++ /dev/null @@ -1,268 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "div_libc.h" - - -/* 64-bit signed long remainder. These are not normal C functions. Argument - registers are t10 and t11, the result goes in t12. Only t12 and AT may - be clobbered. - - Theory of operation here is that we can use the FPU divider for virtually - all operands that we see: all dividend values between -2**53 and 2**53-1 - can be computed directly. Note that divisor values need not be checked - against that range because the rounded fp value will be close enough such - that the quotient is < 1, which will properly be truncated to zero when we - convert back to integer. - - When the dividend is outside the range for which we can compute exact - results, we use the fp quotent as an estimate from which we begin refining - an exact integral value. This reduces the number of iterations in the - shift-and-subtract loop significantly. - - The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE - for cvttq/c even without /sui being set. It will not, however, properly - raise the exception, so we don't have to worry about FPCR_INED being clear - and so dying by SIGFPE. */ - - .text - .align 4 - .globl __remq - .type __remq, @funcnoplt - .usepv __remq, no - - cfi_startproc - cfi_return_column (RA) -__remq: - lda sp, -FRAME(sp) - cfi_def_cfa_offset (FRAME) - CALL_MCOUNT - - /* Get the fp divide insn issued as quickly as possible. After - that's done, we have at least 22 cycles until its results are - ready -- all the time in the world to figure out how we're - going to use the results. */ - stt $f0, 0(sp) - excb - beq Y, DIVBYZERO - - stt $f1, 8(sp) - stt $f3, 48(sp) - cfi_rel_offset ($f0, 0) - cfi_rel_offset ($f1, 8) - cfi_rel_offset ($f3, 48) - mf_fpcr $f3 - - _ITOFT2 X, $f0, 16, Y, $f1, 24 - cvtqt $f0, $f0 - cvtqt $f1, $f1 - divt/c $f0, $f1, $f0 - - /* Check to see if X fit in the double as an exact value. */ - sll X, (64-53), AT - ldt $f1, 8(sp) - sra AT, (64-53), AT - cmpeq X, AT, AT - beq AT, $x_big - - /* If we get here, we're expecting exact results from the division. - Do nothing else besides convert, compute remainder, clean up. */ - cvttq/c $f0, $f0 - excb - mt_fpcr $f3 - _FTOIT $f0, AT, 16 - mulq AT, Y, AT - ldt $f0, 0(sp) - ldt $f3, 48(sp) - cfi_restore ($f1) - cfi_remember_state - cfi_restore ($f0) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - lda sp, FRAME(sp) - subq X, AT, RV - ret $31, (RA), 1 - - .align 4 - cfi_restore_state -$x_big: - /* If we get here, X is large enough that we don't expect exact - results, and neither X nor Y got mis-translated for the fp - division. Our task is to take the fp result, figure out how - far it's off from the correct result and compute a fixup. */ - stq t0, 16(sp) - stq t1, 24(sp) - stq t2, 32(sp) - stq t5, 40(sp) - cfi_rel_offset (t0, 16) - cfi_rel_offset (t1, 24) - cfi_rel_offset (t2, 32) - cfi_rel_offset (t5, 40) - -#define Q t0 /* quotient */ -#define R RV /* remainder */ -#define SY t1 /* scaled Y */ -#define S t2 /* scalar */ -#define QY t3 /* Q*Y */ - - /* The fixup code below can only handle unsigned values. */ - or X, Y, AT - mov $31, t5 - blt AT, $fix_sign_in -$fix_sign_in_ret1: - cvttq/c $f0, $f0 - - _FTOIT $f0, Q, 8 - .align 3 -$fix_sign_in_ret2: - ldt $f0, 0(sp) - stq t3, 0(sp) - cfi_restore ($f0) - cfi_rel_offset (t3, 0) - - mulq Q, Y, QY - excb - stq t4, 8(sp) - mt_fpcr $f3 - cfi_rel_offset (t4, 8) - - subq QY, X, R - mov Y, SY - mov 1, S - bgt R, $q_high - -$q_high_ret: - subq X, QY, R - mov Y, SY - mov 1, S - bgt R, $q_low - -$q_low_ret: - ldq t0, 16(sp) - ldq t1, 24(sp) - ldq t2, 32(sp) - bne t5, $fix_sign_out - -$fix_sign_out_ret: - ldq t3, 0(sp) - ldq t4, 8(sp) - ldq t5, 40(sp) - ldt $f3, 48(sp) - lda sp, FRAME(sp) - cfi_remember_state - cfi_restore (t0) - cfi_restore (t1) - cfi_restore (t2) - cfi_restore (t3) - cfi_restore (t4) - cfi_restore (t5) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - .align 4 - cfi_restore_state - /* The quotient that we computed was too large. We need to reduce - it by S such that Y*S >= R. Obviously the closer we get to the - correct value the better, but overshooting high is ok, as we'll - fix that up later. */ -0: - addq SY, SY, SY - addq S, S, S -$q_high: - cmpult SY, R, AT - bne AT, 0b - - subq Q, S, Q - unop - subq QY, SY, QY - br $q_high_ret - - .align 4 - /* The quotient that we computed was too small. Divide Y by the - current remainder (R) and add that to the existing quotient (Q). - The expectation, of course, is that R is much smaller than X. */ - /* Begin with a shift-up loop. Compute S such that Y*S >= R. We - already have a copy of Y in SY and the value 1 in S. */ -0: - addq SY, SY, SY - addq S, S, S -$q_low: - cmpult SY, R, AT - bne AT, 0b - - /* Shift-down and subtract loop. Each iteration compares our scaled - Y (SY) with the remainder (R); if SY <= R then X is divisible by - Y's scalar (S) so add it to the quotient (Q). */ -2: addq Q, S, t3 - srl S, 1, S - cmpule SY, R, AT - subq R, SY, t4 - - cmovne AT, t3, Q - cmovne AT, t4, R - srl SY, 1, SY - bne S, 2b - - br $q_low_ret - - .align 4 -$fix_sign_in: - /* If we got here, then X|Y is negative. Need to adjust everything - such that we're doing unsigned division in the fixup loop. */ - /* T5 records the changes we had to make: - bit 0: set if X was negated. Note that the sign of the - remainder follows the sign of the divisor. - bit 2: set if Y was negated. - */ - xor X, Y, t1 - cmplt X, 0, t5 - negq X, t0 - cmovne t5, t0, X - - cmplt Y, 0, AT - negq Y, t0 - s4addq AT, t5, t5 - cmovne AT, t0, Y - - bge t1, $fix_sign_in_ret1 - cvttq/c $f0, $f0 - _FTOIT $f0, Q, 8 - .align 3 - negq Q, Q - br $fix_sign_in_ret2 - - .align 4 -$fix_sign_out: - /* Now we get to undo what we did above. */ - /* ??? Is this really faster than just increasing the size of - the stack frame and storing X and Y in memory? */ - and t5, 4, AT - negq Y, t4 - cmovne AT, t4, Y - - negq X, t4 - cmovlbs t5, t4, X - negq RV, t4 - cmovlbs t5, t4, RV - - br $fix_sign_out_ret - - cfi_endproc - .size __remq, .-__remq - - DO_DIVBYZERO diff --git a/sysdeps/alpha/remqu.S b/sysdeps/alpha/remqu.S deleted file mode 100644 index 732a350ea9..0000000000 --- a/sysdeps/alpha/remqu.S +++ /dev/null @@ -1,271 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "div_libc.h" - - -/* 64-bit unsigned long remainder. These are not normal C functions. Argument - registers are t10 and t11, the result goes in t12. Only t12 and AT may be - clobbered. - - Theory of operation here is that we can use the FPU divider for virtually - all operands that we see: all dividend values between -2**53 and 2**53-1 - can be computed directly. Note that divisor values need not be checked - against that range because the rounded fp value will be close enough such - that the quotient is < 1, which will properly be truncated to zero when we - convert back to integer. - - When the dividend is outside the range for which we can compute exact - results, we use the fp quotent as an estimate from which we begin refining - an exact integral value. This reduces the number of iterations in the - shift-and-subtract loop significantly. - - The FPCR save/restore is due to the fact that the EV6 _will_ set FPCR_INE - for cvttq/c even without /sui being set. It will not, however, properly - raise the exception, so we don't have to worry about FPCR_INED being clear - and so dying by SIGFPE. */ - - .text - .align 4 - .globl __remqu - .type __remqu, @funcnoplt - .usepv __remqu, no - - cfi_startproc - cfi_return_column (RA) -__remqu: - lda sp, -FRAME(sp) - cfi_def_cfa_offset (FRAME) - CALL_MCOUNT - - /* Get the fp divide insn issued as quickly as possible. After - that's done, we have at least 22 cycles until its results are - ready -- all the time in the world to figure out how we're - going to use the results. */ - subq Y, 1, AT - stt $f0, 0(sp) - and Y, AT, AT - - stt $f1, 8(sp) - excb - stt $f3, 48(sp) - beq AT, $powerof2 - cfi_rel_offset ($f0, 0) - cfi_rel_offset ($f1, 8) - cfi_rel_offset ($f3, 48) - - _ITOFT2 X, $f0, 16, Y, $f1, 24 - mf_fpcr $f3 - cvtqt $f0, $f0 - cvtqt $f1, $f1 - - blt X, $x_is_neg - divt/c $f0, $f1, $f0 - - /* Check to see if Y was mis-converted as signed value. */ - ldt $f1, 8(sp) - blt Y, $y_is_neg - - /* Check to see if X fit in the double as an exact value. */ - srl X, 53, AT - bne AT, $x_big - - /* If we get here, we're expecting exact results from the division. - Do nothing else besides convert, compute remainder, clean up. */ - cvttq/c $f0, $f0 - excb - mt_fpcr $f3 - _FTOIT $f0, AT, 16 - - mulq AT, Y, AT - ldt $f0, 0(sp) - ldt $f3, 48(sp) - lda sp, FRAME(sp) - cfi_remember_state - cfi_restore ($f0) - cfi_restore ($f1) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - - .align 4 - subq X, AT, RV - ret $31, (RA), 1 - - .align 4 - cfi_restore_state -$x_is_neg: - /* If we get here, X is so big that bit 63 is set, which made the - conversion come out negative. Fix it up lest we not even get - a good estimate. */ - ldah AT, 0x5f80 /* 2**64 as float. */ - stt $f2, 24(sp) - cfi_rel_offset ($f2, 24) - _ITOFS AT, $f2, 16 - - addt $f0, $f2, $f0 - divt/c $f0, $f1, $f0 - - /* Ok, we've now the divide issued. Continue with other checks. */ - .align 4 - ldt $f1, 8(sp) - unop - ldt $f2, 24(sp) - blt Y, $y_is_neg - cfi_restore ($f1) - cfi_restore ($f2) - cfi_remember_state /* for y_is_neg */ - - .align 4 -$x_big: - /* If we get here, X is large enough that we don't expect exact - results, and neither X nor Y got mis-translated for the fp - division. Our task is to take the fp result, figure out how - far it's off from the correct result and compute a fixup. */ - stq t0, 16(sp) - stq t1, 24(sp) - stq t2, 32(sp) - stq t3, 40(sp) - cfi_rel_offset (t0, 16) - cfi_rel_offset (t1, 24) - cfi_rel_offset (t2, 32) - cfi_rel_offset (t3, 40) - -#define Q t0 /* quotient */ -#define R RV /* remainder */ -#define SY t1 /* scaled Y */ -#define S t2 /* scalar */ -#define QY t3 /* Q*Y */ - - cvttq/c $f0, $f0 - _FTOIT $f0, Q, 8 - mulq Q, Y, QY - - .align 4 - stq t4, 8(sp) - excb - ldt $f0, 0(sp) - mt_fpcr $f3 - cfi_rel_offset (t4, 8) - cfi_restore ($f0) - - subq QY, X, R - mov Y, SY - mov 1, S - bgt R, $q_high - -$q_high_ret: - subq X, QY, R - mov Y, SY - mov 1, S - bgt R, $q_low - -$q_low_ret: - ldq t4, 8(sp) - ldq t0, 16(sp) - ldq t1, 24(sp) - ldq t2, 32(sp) - - ldq t3, 40(sp) - ldt $f3, 48(sp) - lda sp, FRAME(sp) - cfi_remember_state - cfi_restore (t0) - cfi_restore (t1) - cfi_restore (t2) - cfi_restore (t3) - cfi_restore (t4) - cfi_restore ($f3) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - .align 4 - cfi_restore_state - /* The quotient that we computed was too large. We need to reduce - it by S such that Y*S >= R. Obviously the closer we get to the - correct value the better, but overshooting high is ok, as we'll - fix that up later. */ -0: - addq SY, SY, SY - addq S, S, S -$q_high: - cmpult SY, R, AT - bne AT, 0b - - subq Q, S, Q - unop - subq QY, SY, QY - br $q_high_ret - - .align 4 - /* The quotient that we computed was too small. Divide Y by the - current remainder (R) and add that to the existing quotient (Q). - The expectation, of course, is that R is much smaller than X. */ - /* Begin with a shift-up loop. Compute S such that Y*S >= R. We - already have a copy of Y in SY and the value 1 in S. */ -0: - addq SY, SY, SY - addq S, S, S -$q_low: - cmpult SY, R, AT - bne AT, 0b - - /* Shift-down and subtract loop. Each iteration compares our scaled - Y (SY) with the remainder (R); if SY <= R then X is divisible by - Y's scalar (S) so add it to the quotient (Q). */ -2: addq Q, S, t3 - srl S, 1, S - cmpule SY, R, AT - subq R, SY, t4 - - cmovne AT, t3, Q - cmovne AT, t4, R - srl SY, 1, SY - bne S, 2b - - br $q_low_ret - - .align 4 - cfi_restore_state -$y_is_neg: - /* If we get here, Y is so big that bit 63 is set. The results - from the divide will be completely wrong. Fortunately, the - quotient must be either 0 or 1, so the remainder must be X - or X-Y, so just compute it directly. */ - cmpule Y, X, AT - subq X, Y, RV - ldt $f0, 0(sp) - cmoveq AT, X, RV - - lda sp, FRAME(sp) - cfi_restore ($f0) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - .align 4 - cfi_def_cfa_offset (FRAME) -$powerof2: - subq Y, 1, AT - beq Y, DIVBYZERO - and X, AT, RV - lda sp, FRAME(sp) - cfi_def_cfa_offset (0) - ret $31, (RA), 1 - - cfi_endproc - .size __remqu, .-__remqu - - DO_DIVBYZERO diff --git a/sysdeps/alpha/rshift.S b/sysdeps/alpha/rshift.S deleted file mode 100644 index 65db71c2c9..0000000000 --- a/sysdeps/alpha/rshift.S +++ /dev/null @@ -1,105 +0,0 @@ - # Alpha 21064 __mpn_rshift -- - - # Copyright (C) 1994-2017 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library. If not, see . - - - # INPUT PARAMETERS - # res_ptr r16 - # s1_ptr r17 - # size r18 - # cnt r19 - - # This code runs at 4.8 cycles/limb on the 21064. With infinite unrolling, - # it would take 4 cycles/limb. It should be possible to get down to 3 - # cycles/limb since both ldq and stq can be paired with the other used - # instructions. But there are many restrictions in the 21064 pipeline that - # makes it hard, if not impossible, to get down to 3 cycles/limb: - - # 1. ldq has a 3 cycle delay, srl and sll have a 2 cycle delay. - # 2. Only aligned instruction pairs can be paired. - # 3. The store buffer or silo might not be able to deal with the bandwidth. - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_rshift - .ent __mpn_rshift -__mpn_rshift: - .frame $30,0,$26,0 - - ldq $4,0($17) # load first limb - addq $17,8,$17 - subq $31,$19,$7 - subq $18,1,$18 - and $18,4-1,$20 # number of limbs in first loop - sll $4,$7,$0 # compute function result - - beq $20,.L0 - subq $18,$20,$18 - - .align 3 -.Loop0: - ldq $3,0($17) - addq $16,8,$16 - addq $17,8,$17 - subq $20,1,$20 - srl $4,$19,$5 - sll $3,$7,$6 - bis $3,$3,$4 - bis $5,$6,$8 - stq $8,-8($16) - bne $20,.Loop0 - -.L0: beq $18,.Lend - - .align 3 -.Loop: ldq $3,0($17) - addq $16,32,$16 - subq $18,4,$18 - srl $4,$19,$5 - sll $3,$7,$6 - - ldq $4,8($17) - srl $3,$19,$1 - bis $5,$6,$8 - stq $8,-32($16) - sll $4,$7,$2 - - ldq $3,16($17) - srl $4,$19,$5 - bis $1,$2,$8 - stq $8,-24($16) - sll $3,$7,$6 - - ldq $4,24($17) - srl $3,$19,$1 - bis $5,$6,$8 - stq $8,-16($16) - sll $4,$7,$2 - - addq $17,32,$17 - bis $1,$2,$8 - stq $8,-8($16) - - bgt $18,.Loop - -.Lend: srl $4,$19,$8 - stq $8,0($16) - ret $31,($26),1 - .end __mpn_rshift diff --git a/sysdeps/alpha/setjmp.S b/sysdeps/alpha/setjmp.S deleted file mode 100644 index a6758646f1..0000000000 --- a/sysdeps/alpha/setjmp.S +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __ASSEMBLY__ - -#include -#include - - .ent __sigsetjmp - .global __sigsetjmp -__sigsetjmp: - ldgp gp, 0(pv) - -$sigsetjmp_local: -#ifndef PIC -#define FRAME 16 - subq sp, FRAME, sp - .frame sp, FRAME, ra, 0 - stq ra, 0(sp) - .mask 0x04000000, -FRAME -#else -#define FRAME 0 - .frame sp, FRAME, ra, 0 -#endif -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - stq s0, JB_S0*8(a0) - stq s1, JB_S1*8(a0) - stq s2, JB_S2*8(a0) - stq s3, JB_S3*8(a0) - stq s4, JB_S4*8(a0) - stq s5, JB_S5*8(a0) -#ifdef PTR_MANGLE - PTR_MANGLE(t1, ra, t0) - stq t1, JB_PC*8(a0) -#else - stq ra, JB_PC*8(a0) -#endif -#if defined(PTR_MANGLE) && FRAME == 0 - PTR_MANGLE2(t1, sp, t0) -#else - addq sp, FRAME, t1 -# ifdef PTR_MANGLE - PTR_MANGLE2(t1, t1, t0) -# endif -#endif - stq t1, JB_SP*8(a0) -#ifdef PTR_MANGLE - PTR_MANGLE2(t1, fp, t0) - stq t1, JB_FP*8(a0) -#else - stq fp, JB_FP*8(a0) -#endif - stt $f2, JB_F2*8(a0) - stt $f3, JB_F3*8(a0) - stt $f4, JB_F4*8(a0) - stt $f5, JB_F5*8(a0) - stt $f6, JB_F6*8(a0) - stt $f7, JB_F7*8(a0) - stt $f8, JB_F8*8(a0) - stt $f9, JB_F9*8(a0) - -#ifndef PIC - /* Call to C to (potentially) save our signal mask. */ - jsr ra, __sigjmp_save - ldq ra, 0(sp) - addq sp, 16, sp - ret -#elif IS_IN (rtld) - /* In ld.so we never save the signal mask. */ - mov 0, v0 - ret -#else - /* Tailcall to save the signal mask. */ - br $31, __sigjmp_save !samegp -#endif - -END(__sigsetjmp) -hidden_def (__sigsetjmp) - -/* Put these traditional entry points in the same file so that we can - elide much of the nonsense in trying to jmp to the real function. */ - -ENTRY(_setjmp) - ldgp gp, 0(pv) - .prologue 1 - mov 0, a1 - br $sigsetjmp_local -END(_setjmp) -libc_hidden_def (_setjmp) - -ENTRY(setjmp) - ldgp gp, 0(pv) - .prologue 1 - mov 1, a1 - br $sigsetjmp_local -END(setjmp) - -weak_extern(_setjmp) -weak_extern(setjmp) diff --git a/sysdeps/alpha/soft-fp/Makefile b/sysdeps/alpha/soft-fp/Makefile deleted file mode 100644 index 83baa7c49d..0000000000 --- a/sysdeps/alpha/soft-fp/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -# Software floating-point emulation. - -ifeq ($(subdir),soft-fp) -sysdep_routines += ots_add ots_sub ots_mul ots_div ots_cmp ots_cmpe \ - ots_cvtxq ots_cvtqx ots_cvtqux ots_cvttx ots_cvtxt ots_nintxq \ - fraiseexcpt -endif - -ifeq ($(subdir),math) -CPPFLAGS += -I../soft-fp -endif diff --git a/sysdeps/alpha/soft-fp/Versions b/sysdeps/alpha/soft-fp/Versions deleted file mode 100644 index 3901287115..0000000000 --- a/sysdeps/alpha/soft-fp/Versions +++ /dev/null @@ -1,8 +0,0 @@ -libc { - GLIBC_2.3.4 { - _OtsAddX; _OtsSubX; _OtsMulX; _OtsDivX; - _OtsEqlX; _OtsNeqX; _OtsLssX; _OtsLeqX; _OtsGtrX; _OtsGeqX; - _OtsCvtQX; _OtsCvtQUX; _OtsCvtXQ; _OtsNintXQ; - _OtsConvertFloatTX; _OtsConvertFloatXT; - } -} diff --git a/sysdeps/alpha/soft-fp/e_sqrtl.c b/sysdeps/alpha/soft-fp/e_sqrtl.c deleted file mode 100644 index 8b30bcbc52..0000000000 --- a/sysdeps/alpha/soft-fp/e_sqrtl.c +++ /dev/null @@ -1,49 +0,0 @@ -/* long double square root in software floating-point emulation. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -long double -__ieee754_sqrtl (const long double a) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(C); - long double c; - long _round = 4; /* dynamic rounding */ - - FP_INIT_ROUNDMODE; - FP_UNPACK_Q(A, a); - FP_SQRT_Q(C, A); - FP_PACK_Q(c, C); - FP_HANDLE_EXCEPTIONS; - return c; -} - -/* ??? We forgot to add this symbol in 2.15. Getting this into 2.18 isn't as - straight-forward as just adding the alias, since a generic Versions file - includes the 2.15 version and the linker uses the first one it sees. */ -#if SHLIB_COMPAT (libm, GLIBC_2_15, GLIBC_2_18) -versioned_symbol (libm, __ieee754_sqrtl, __sqrtl_finite, GLIBC_2_18); -#else -strong_alias(__ieee754_sqrtl, __sqrtl_finite) -#endif diff --git a/sysdeps/alpha/soft-fp/local-soft-fp.h b/sysdeps/alpha/soft-fp/local-soft-fp.h deleted file mode 100644 index d562e0829e..0000000000 --- a/sysdeps/alpha/soft-fp/local-soft-fp.h +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include -#include - -/* Helpers for the Ots functions which receive long double arguments - in two integer registers, and return values in $16+$17. */ - -#define AXP_UNPACK_RAW_Q(X, val) \ - do { \ - union _FP_UNION_Q _flo; \ - _flo.longs.a = val##l; \ - _flo.longs.b = val##h; \ - FP_UNPACK_RAW_QP(X, &_flo); \ - } while (0) - -#define AXP_UNPACK_SEMIRAW_Q(X, val) \ - do { \ - union _FP_UNION_Q _flo; \ - _flo.longs.a = val##l; \ - _flo.longs.b = val##h; \ - FP_UNPACK_SEMIRAW_QP(X, &_flo); \ - } while (0) - -#define AXP_UNPACK_Q(X, val) \ - do { \ - AXP_UNPACK_RAW_Q(X, val); \ - _FP_UNPACK_CANONICAL(Q, 2, X); \ - } while (0) - -#define AXP_PACK_RAW_Q(val, X) FP_PACK_RAW_QP(&val##_flo, X) - -#define AXP_PACK_SEMIRAW_Q(val, X) \ - do { \ - _FP_PACK_SEMIRAW(Q, 2, X); \ - AXP_PACK_RAW_Q(val, X); \ - } while (0) - -#define AXP_PACK_Q(val, X) \ - do { \ - _FP_PACK_CANONICAL(Q, 2, X); \ - AXP_PACK_RAW_Q(val, X); \ - } while (0) - -#define AXP_DECL_RETURN_Q(X) union _FP_UNION_Q X##_flo - -/* ??? We don't have a real way to tell the compiler that we're wanting - to return values in $16+$17. Instead use a volatile asm to make sure - that the values are live, and just hope that nothing kills the values - in between here and the end of the function. */ -#define AXP_RETURN_Q(X) \ - do { \ - register long r16 __asm__("16") = X##_flo.longs.a; \ - register long r17 __asm__("17") = X##_flo.longs.b; \ - asm volatile ("" : : "r"(r16), "r"(r17)); \ - } while (0) diff --git a/sysdeps/alpha/soft-fp/ots_add.c b/sysdeps/alpha/soft-fp/ots_add.c deleted file mode 100644 index 7291a730e7..0000000000 --- a/sysdeps/alpha/soft-fp/ots_add.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Software floating-point emulation: addition. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "local-soft-fp.h" - -void -_OtsAddX(long al, long ah, long bl, long bh, long _round) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - AXP_DECL_RETURN_Q(c); - - FP_INIT_ROUNDMODE; - AXP_UNPACK_SEMIRAW_Q(A, a); - AXP_UNPACK_SEMIRAW_Q(B, b); - FP_ADD_Q(C, A, B); - AXP_PACK_SEMIRAW_Q(c, C); - FP_HANDLE_EXCEPTIONS; - - AXP_RETURN_Q(c); -} diff --git a/sysdeps/alpha/soft-fp/ots_cmp.c b/sysdeps/alpha/soft-fp/ots_cmp.c deleted file mode 100644 index 84498f8059..0000000000 --- a/sysdeps/alpha/soft-fp/ots_cmp.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Software floating-point emulation: comparison. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "local-soft-fp.h" - -static long -internal_equality (long al, long ah, long bl, long bh, long neq) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - long r; - - AXP_UNPACK_RAW_Q(A, a); - AXP_UNPACK_RAW_Q(B, b); - - if ((A_e == _FP_EXPMAX_Q && !_FP_FRAC_ZEROP_2(A)) - || (B_e == _FP_EXPMAX_Q && !_FP_FRAC_ZEROP_2(B))) - { - /* EQ and NE signal invalid operation only if either operand is SNaN. */ - if (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B)) - { - FP_SET_EXCEPTION(FP_EX_INVALID); - FP_HANDLE_EXCEPTIONS; - } - return -1; - } - - r = (A_e == B_e - && _FP_FRAC_EQ_2 (A, B) - && (A_s == B_s || (!A_e && _FP_FRAC_ZEROP_2(A)))); - r ^= neq; - - return r; -} - -long -_OtsEqlX (long al, long ah, long bl, long bh) -{ - return internal_equality (al, ah, bl, bh, 0); -} - -long -_OtsNeqX (long al, long ah, long bl, long bh) -{ - return internal_equality (al, ah, bl, bh, 1); -} diff --git a/sysdeps/alpha/soft-fp/ots_cmpe.c b/sysdeps/alpha/soft-fp/ots_cmpe.c deleted file mode 100644 index d1e950d991..0000000000 --- a/sysdeps/alpha/soft-fp/ots_cmpe.c +++ /dev/null @@ -1,77 +0,0 @@ -/* Software floating-point emulation: comparison. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "local-soft-fp.h" - -static long -internal_compare (long al, long ah, long bl, long bh) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - long r; - - AXP_UNPACK_RAW_Q(A, a); - AXP_UNPACK_RAW_Q(B, b); - FP_CMP_Q (r, A, B, 2, 2); - - FP_HANDLE_EXCEPTIONS; - - return r; -} - -long -_OtsLssX (long al, long ah, long bl, long bh) -{ - long r = internal_compare (al, ah, bl, bh); - if (r == 2) - return -1; - else - return r < 0; -} - -long -_OtsLeqX (long al, long ah, long bl, long bh) -{ - long r = internal_compare (al, ah, bl, bh); - if (r == 2) - return -1; - else - return r <= 0; -} - -long -_OtsGtrX (long al, long ah, long bl, long bh) -{ - long r = internal_compare (al, ah, bl, bh); - if (r == 2) - return -1; - else - return r > 0; -} - -long -_OtsGeqX (long al, long ah, long bl, long bh) -{ - long r = internal_compare (al, ah, bl, bh); - if (r == 2) - return -1; - else - return r >= 0; -} diff --git a/sysdeps/alpha/soft-fp/ots_cvtqux.c b/sysdeps/alpha/soft-fp/ots_cvtqux.c deleted file mode 100644 index bb6fac00a3..0000000000 --- a/sysdeps/alpha/soft-fp/ots_cvtqux.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Software floating-point emulation: unsigned integer to float conversion. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "local-soft-fp.h" - -/* Should never actually be used, since we've more bits of precision - than the incomming long, but needed for linkage. */ -#undef FP_ROUNDMODE -#define FP_ROUNDMODE FP_RND_ZERO - -void -_OtsCvtQUX (unsigned long a) -{ - FP_DECL_EX; - FP_DECL_Q(C); - AXP_DECL_RETURN_Q(c); - - FP_FROM_INT_Q(C, a, 64, unsigned long); - AXP_PACK_RAW_Q(c, C); - - AXP_RETURN_Q(c); -} diff --git a/sysdeps/alpha/soft-fp/ots_cvtqx.c b/sysdeps/alpha/soft-fp/ots_cvtqx.c deleted file mode 100644 index e1d8a7a4ae..0000000000 --- a/sysdeps/alpha/soft-fp/ots_cvtqx.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Software floating-point emulation: signed integer to float conversion. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "local-soft-fp.h" - -/* Should never actually be used, since we've more bits of precision - than the incomming long, but needed for linkage. */ -#undef FP_ROUNDMODE -#define FP_ROUNDMODE FP_RND_ZERO - -void -_OtsCvtQX (long a) -{ - FP_DECL_EX; - FP_DECL_Q(C); - AXP_DECL_RETURN_Q(c); - - FP_FROM_INT_Q(C, a, 64, unsigned long); - AXP_PACK_RAW_Q(c, C); - AXP_RETURN_Q(c); -} diff --git a/sysdeps/alpha/soft-fp/ots_cvttx.c b/sysdeps/alpha/soft-fp/ots_cvttx.c deleted file mode 100644 index 00e13f3396..0000000000 --- a/sysdeps/alpha/soft-fp/ots_cvttx.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Software floating-point emulation: floating point extension. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "local-soft-fp.h" -#include "double.h" - -/* Should never actually be used, since we're extending, but needed - for linkage. */ -#undef FP_ROUNDMODE -#define FP_ROUNDMODE FP_RND_ZERO - -void -_OtsConvertFloatTX(double a) -{ - FP_DECL_EX; - FP_DECL_D(A); - FP_DECL_Q(C); - AXP_DECL_RETURN_Q(c); - - FP_UNPACK_RAW_D(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_EXTEND(Q,D,4,2,C,A); -#else - FP_EXTEND(Q,D,2,1,C,A); -#endif - AXP_PACK_RAW_Q(c, C); - FP_HANDLE_EXCEPTIONS; - - AXP_RETURN_Q(c); -} diff --git a/sysdeps/alpha/soft-fp/ots_cvtxq.c b/sysdeps/alpha/soft-fp/ots_cvtxq.c deleted file mode 100644 index eda0074ef0..0000000000 --- a/sysdeps/alpha/soft-fp/ots_cvtxq.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Software floating-point emulation: float to integer conversion. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "local-soft-fp.h" - -long -_OtsCvtXQ (long al, long ah, long _round) -{ - FP_DECL_EX; - FP_DECL_Q(A); - unsigned long r; - long s; - - /* If bit 3 is set, then integer overflow detection is requested. */ - s = _round & 8 ? 1 : -1; - _round = _round & 3; - - FP_INIT_ROUNDMODE; - AXP_UNPACK_RAW_Q(A, a); - FP_TO_INT_Q(r, A, 64, s); - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/alpha/soft-fp/ots_cvtxt.c b/sysdeps/alpha/soft-fp/ots_cvtxt.c deleted file mode 100644 index 59be37e394..0000000000 --- a/sysdeps/alpha/soft-fp/ots_cvtxt.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Software floating-point emulation: floating point truncation. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "local-soft-fp.h" -#include "double.h" - -double -_OtsConvertFloatXT (long al, long ah, long _round) -{ - FP_DECL_EX; - FP_DECL_Q(A); - FP_DECL_D(R); - double r; - - FP_INIT_ROUNDMODE; - AXP_UNPACK_SEMIRAW_Q(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_TRUNC(D,Q,2,4,R,A); -#else - FP_TRUNC(D,Q,1,2,R,A); -#endif - FP_PACK_SEMIRAW_D(r, R); - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/alpha/soft-fp/ots_div.c b/sysdeps/alpha/soft-fp/ots_div.c deleted file mode 100644 index 1ce38ced05..0000000000 --- a/sysdeps/alpha/soft-fp/ots_div.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Software floating-point emulation: division. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "local-soft-fp.h" - -void -_OtsDivX(long al, long ah, long bl, long bh, long _round) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - AXP_DECL_RETURN_Q(c); - - FP_INIT_ROUNDMODE; - AXP_UNPACK_Q(A, a); - AXP_UNPACK_Q(B, b); - FP_DIV_Q(C, A, B); - AXP_PACK_Q(c, C); - FP_HANDLE_EXCEPTIONS; - - AXP_RETURN_Q(c); -} diff --git a/sysdeps/alpha/soft-fp/ots_mul.c b/sysdeps/alpha/soft-fp/ots_mul.c deleted file mode 100644 index 937c24246d..0000000000 --- a/sysdeps/alpha/soft-fp/ots_mul.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Software floating-point emulation: multiplication. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "local-soft-fp.h" - -void -_OtsMulX(long al, long ah, long bl, long bh, long _round) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - AXP_DECL_RETURN_Q(c); - - FP_INIT_ROUNDMODE; - AXP_UNPACK_Q(A, a); - AXP_UNPACK_Q(B, b); - FP_MUL_Q(C, A, B); - AXP_PACK_Q(c, C); - FP_HANDLE_EXCEPTIONS; - - AXP_RETURN_Q(c); -} diff --git a/sysdeps/alpha/soft-fp/ots_nintxq.c b/sysdeps/alpha/soft-fp/ots_nintxq.c deleted file mode 100644 index ce3be4fd62..0000000000 --- a/sysdeps/alpha/soft-fp/ots_nintxq.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Software floating-point emulation: convert to fortran nearest. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "local-soft-fp.h" - -long -_OtsNintXQ (long al, long ah, long _round) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - unsigned long r; - long s; - - /* If bit 3 is set, then integer overflow detection is requested. */ - s = _round & 8 ? 1 : -1; - _round = _round & 3; - - FP_INIT_ROUNDMODE; - AXP_UNPACK_SEMIRAW_Q(A, a); - - /* Build 0.5 * sign(A) */ - B_e = _FP_EXPBIAS_Q; - __FP_FRAC_SET_2 (B, 0, 0); - B_s = A_s; - - FP_ADD_Q(C, A, B); - _FP_FRAC_SRL_2(C, _FP_WORKBITS); - _FP_FRAC_HIGH_RAW_Q(C) &= ~(_FP_W_TYPE)_FP_IMPLBIT_Q; - FP_TO_INT_Q(r, C, 64, s); - if (s > 0 && (_fex &= FP_EX_INVALID)) - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/alpha/soft-fp/ots_sub.c b/sysdeps/alpha/soft-fp/ots_sub.c deleted file mode 100644 index 69893f1ea8..0000000000 --- a/sysdeps/alpha/soft-fp/ots_sub.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Software floating-point emulation: subtraction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "local-soft-fp.h" - -void -_OtsSubX(long al, long ah, long bl, long bh, long _round) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - AXP_DECL_RETURN_Q(c); - - FP_INIT_ROUNDMODE; - AXP_UNPACK_SEMIRAW_Q(A, a); - AXP_UNPACK_SEMIRAW_Q(B, b); - FP_SUB_Q(C, A, B); - AXP_PACK_SEMIRAW_Q(c, C); - FP_HANDLE_EXCEPTIONS; - - AXP_RETURN_Q(c); -} diff --git a/sysdeps/alpha/soft-fp/sfp-machine.h b/sysdeps/alpha/soft-fp/sfp-machine.h deleted file mode 100644 index 7935b540db..0000000000 --- a/sysdeps/alpha/soft-fp/sfp-machine.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Machine-dependent software floating-point definitions. - Alpha userland IEEE 128-bit version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com), - Jakub Jelinek (jj@ultra.linux.cz) and - David S. Miller (davem@redhat.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#define _FP_W_TYPE_SIZE 64 -#define _FP_W_TYPE unsigned long -#define _FP_WS_TYPE signed long -#define _FP_I_TYPE long - -#define _FP_MUL_MEAT_S(R,X,Y) \ - _FP_MUL_MEAT_1_imm(_FP_WFRACBITS_S,R,X,Y) -#define _FP_MUL_MEAT_D(R,X,Y) \ - _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y) -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) - -#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) -#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1) -#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1 -#define _FP_NANSIGN_S 0 -#define _FP_NANSIGN_D 0 -#define _FP_NANSIGN_Q 0 - -#define _FP_KEEPNANFRACP 1 -#define _FP_QNANNEGATEDP 0 - -/* Alpha Architecture Handbook, 4.7.10.4 sez that we should prefer any - type of NaN in Fb, then Fa. */ -#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - R##_s = Y##_s; \ - _FP_FRAC_COPY_##wc(R,X); \ - R##_c = FP_CLS_NAN; \ - } while (0) - -/* Rounding mode settings. */ -#define FP_RND_NEAREST FE_TONEAREST -#define FP_RND_ZERO FE_TOWARDZERO -#define FP_RND_PINF FE_UPWARD -#define FP_RND_MINF FE_DOWNWARD - -/* Obtain the current rounding mode. It's given as an argument to - all the Ots functions, with 4 meaning "dynamic". */ -#define FP_ROUNDMODE _round - -/* Exception flags. */ -#define FP_EX_INVALID FE_INVALID -#define FP_EX_OVERFLOW FE_OVERFLOW -#define FP_EX_UNDERFLOW FE_UNDERFLOW -#define FP_EX_DIVZERO FE_DIVBYZERO -#define FP_EX_INEXACT FE_INEXACT - -#define _FP_TININESS_AFTER_ROUNDING 1 - -#define FP_INIT_ROUNDMODE \ -do { \ - if (__builtin_expect (_round == 4, 0)) \ - { \ - unsigned long t; \ - __asm__ __volatile__("excb; mf_fpcr %0" : "=f"(t)); \ - _round = (t >> FPCR_ROUND_SHIFT) & 3; \ - } \ -} while (0) - -/* We copy the libm function into libc for soft-fp. */ -extern int __feraiseexcept (int __excepts) attribute_hidden; - -#define FP_HANDLE_EXCEPTIONS \ -do { \ - if (__builtin_expect (_fex, 0)) \ - __feraiseexcept (_fex); \ -} while (0) - -#define FP_TRAPPING_EXCEPTIONS \ - ((__ieee_get_fp_control () & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT) diff --git a/sysdeps/alpha/sotruss-lib.c b/sysdeps/alpha/sotruss-lib.c deleted file mode 100644 index 01ded0131a..0000000000 --- a/sysdeps/alpha/sotruss-lib.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Override generic sotruss-lib.c to define actual functions for Alpha. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define HAVE_ARCH_PLTENTER -#define HAVE_ARCH_PLTEXIT - -#include - -ElfW(Addr) -la_alpha_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - La_alpha_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - print_enter (refcook, defcook, symname, - regs->lr_r16, regs->lr_r17, regs->lr_r18, *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -la_alpha_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, - const struct La_alpha_regs *inregs, - struct La_alpha_retval *outregs, const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_r0); - - return 0; -} diff --git a/sysdeps/alpha/stackinfo.h b/sysdeps/alpha/stackinfo.h deleted file mode 100644 index 0796dc8e4c..0000000000 --- a/sysdeps/alpha/stackinfo.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* On Alpha the stack grows down. */ -#define _STACK_GROWS_DOWN 1 - -/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK is - * present, but it is presumed absent. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X) - -#endif /* stackinfo.h */ diff --git a/sysdeps/alpha/start.S b/sysdeps/alpha/start.S deleted file mode 100644 index b149b1fcac..0000000000 --- a/sysdeps/alpha/start.S +++ /dev/null @@ -1,85 +0,0 @@ -/* Startup code for Alpha/ELF. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .text - .align 3 - .globl _start - .ent _start, 0 - .type _start,@function -_start: - .frame $15, 0, $15 - br gp, 1f -1: ldgp gp, 0(gp) - subq sp, 16, sp - mov 0, $15 - .prologue 0 - - /* Load address of the user's main function. */ - lda a0, main - - ldl a1, 16(sp) /* get argc */ - lda a2, 24(sp) /* get argv */ - - /* Load address of our own entry points to .fini and .init. */ - lda a3, __libc_csu_init - lda a4, __libc_csu_fini - - /* Store address of the shared library termination function. */ - mov v0, a5 - - /* Provide the highest stack address to the user code. */ - stq sp, 0(sp) - - /* Call the user's main function, and exit with its value. - But let the libc call main. */ - jsr ra, __libc_start_main - - /* Die very horribly if exit returns. Call_pal hlt is callable from - kernel mode only; this will result in an illegal instruction trap. */ - call_pal 0 - .end _start - -/* For ECOFF backwards compatibility. */ -weak_alias (_start, __start) - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .weak data_start - data_start = __data_start diff --git a/sysdeps/alpha/stpcpy.S b/sysdeps/alpha/stpcpy.S deleted file mode 100644 index 62fd0d9e36..0000000000 --- a/sysdeps/alpha/stpcpy.S +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Copy a null-terminated string from SRC to DST. Return a pointer - to the null-terminator in the source. */ - -#include - - .text - -ENTRY(__stpcpy) - ldgp gp, 0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - jsr t9, __stxcpy # do the work of the copy - - and t8, 0xf0, t2 # binary search for byte offset of the - and t8, 0xcc, t1 # last byte written. - and t8, 0xaa, t0 - andnot a0, 7, a0 - cmovne t2, 4, t2 - cmovne t1, 2, t1 - cmovne t0, 1, t0 - addq a0, t2, v0 - addq t0, t1, t0 - addq v0, t0, v0 - - ret - - END(__stpcpy) - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/alpha/stpncpy.S b/sysdeps/alpha/stpncpy.S deleted file mode 100644 index 62f6a8f2fd..0000000000 --- a/sysdeps/alpha/stpncpy.S +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@tamu.edu) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Copy no more than COUNT bytes of the null-terminated string from - SRC to DST. If SRC does not cover all of COUNT, the balance is - zeroed. Return the address of the terminating null in DEST, if - any, else DEST + COUNT. */ - -#include - - .set noat - .set noreorder - - .text - -ENTRY(__stpncpy) - ldgp gp, 0(pv) -#ifdef PROF - lda AT, _mcount - jsr AT, (AT), _mcount -#endif - .prologue 1 - - beq a2, $zerocount - jsr t9, __stxncpy # do the work of the copy - - and t8, 0xf0, t3 # binary search for byte offset of the - and t8, 0xcc, t2 # last byte written. - and t8, 0xaa, t1 - andnot a0, 7, v0 - cmovne t3, 4, t3 - cmovne t2, 2, t2 - cmovne t1, 1, t1 - addq v0, t3, v0 - addq t1, t2, t1 - addq v0, t1, v0 - - bne a2, $multiword # do we have full words left? - - .align 3 - zapnot t0, t8, t4 # e0 : was last byte a null? - subq t8, 1, t2 # .. e1 : - addq v0, 1, t5 # e0 : - subq t10, 1, t3 # .. e1 : - or t2, t8, t2 # e0 : clear the bits between the last - or t3, t10, t3 # .. e1 : written byte and the last byte in - andnot t3, t2, t3 # e0 : COUNT - cmovne t4, t5, v0 # .. e1 : if last written wasnt null, inc v0 - zap t0, t3, t0 # e0 : - stq_u t0, 0(a0) # e1 : - ret # .. e1 : - - .align 3 -$multiword: - subq t8, 1, t7 # e0 : clear the final bits in the prev - or t7, t8, t7 # e1 : word - zapnot t0, t7, t0 # e0 : - subq a2, 1, a2 # .. e1 : - stq_u t0, 0(a0) # e0 : - addq a0, 8, a0 # .. e1 : - - beq a2, 1f # e1 : - blbc a2, 0f # e1 : - - stq_u zero, 0(a0) # e0 : zero one word - subq a2, 1, a2 # .. e1 : - addq a0, 8, a0 # e0 : - beq a2, 1f # .. e1 : - -0: stq_u zero, 0(a0) # e0 : zero two words - subq a2, 2, a2 # .. e1 : - stq_u zero, 8(a0) # e0 : - addq a0, 16, a0 # .. e1 : - bne a2, 0b # e1 : - unop - -1: ldq_u t0, 0(a0) # e0 : clear the leading bits in the final - subq t10, 1, t7 # .. e1 : word - or t7, t10, t7 # e0 : - zap t0, t7, t0 # e1 (stall) - stq_u t0, 0(a0) # e0 : - ret # .. e1 : - -$zerocount: - mov a0, v0 - ret - - END(__stpncpy) - -libc_hidden_def (__stpncpy) -weak_alias (__stpncpy, stpncpy) diff --git a/sysdeps/alpha/strcat.S b/sysdeps/alpha/strcat.S deleted file mode 100644 index bffd3e8ee0..0000000000 --- a/sysdeps/alpha/strcat.S +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Append a null-terminated string from SRC to DST. */ - -#include - - .text - -ENTRY(strcat) - ldgp gp, 0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - mov a0, v0 # set up return value - - /* Find the end of the string. */ - - ldq_u t0, 0(a0) # load first quadword (a0 may be misaligned) - lda t1, -1(zero) - insqh t1, a0, t1 - andnot a0, 7, a0 - or t1, t0, t0 - cmpbge zero, t0, t1 # t1 <- bitmask: bit i == 1 <==> i-th byte == 0 - bne t1, $found - -$loop: ldq t0, 8(a0) - addq a0, 8, a0 # addr += 8 - cmpbge zero, t0, t1 - beq t1, $loop - -$found: negq t1, t2 # clear all but least set bit - and t1, t2, t1 - - and t1, 0xf0, t2 # binary search for that set bit - and t1, 0xcc, t3 - and t1, 0xaa, t4 - cmovne t2, 4, t2 - cmovne t3, 2, t3 - cmovne t4, 1, t4 - addq t2, t3, t2 - addq a0, t4, a0 - addq a0, t2, a0 - - /* Now do the append. */ - - mov ra, t9 - jmp $31, __stxcpy - - END(strcat) -libc_hidden_builtin_def (strcat) diff --git a/sysdeps/alpha/strchr.S b/sysdeps/alpha/strchr.S deleted file mode 100644 index e3cf75f39f..0000000000 --- a/sysdeps/alpha/strchr.S +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@tamu.edu) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Return the address of a given character within a null-terminated - string, or null if it is not found. - - This is generally scheduled for the EV5 (got to look out for my own - interests :-), but with EV4 needs in mind. There *should* be no more - stalls for the EV4 than there are for the EV5. -*/ - -#include - - .set noreorder - .set noat - -ENTRY(strchr) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - zapnot a1, 1, a1 # e0 : zero extend the search character - ldq_u t0, 0(a0) # .. e1 : load first quadword - sll a1, 8, t5 # e0 : replicate the search character - andnot a0, 7, v0 # .. e1 : align our loop pointer - or t5, a1, a1 # e0 : - lda t4, -1 # .. e1 : build garbage mask - sll a1, 16, t5 # e0 : - cmpbge zero, t0, t2 # .. e1 : bits set iff byte == zero - mskqh t4, a0, t4 # e0 : - or t5, a1, a1 # .. e1 : - sll a1, 32, t5 # e0 : - cmpbge zero, t4, t4 # .. e1 : bits set iff byte is garbage - or t5, a1, a1 # e0 : - xor t0, a1, t1 # .. e1 : make bytes == c zero - cmpbge zero, t1, t3 # e0 : bits set iff byte == c - or t2, t3, t0 # e1 : bits set iff char match or zero match - andnot t0, t4, t0 # e0 : clear garbage bits - bne t0, $found # .. e1 (zdb) - -$loop: ldq t0, 8(v0) # e0 : - addq v0, 8, v0 # .. e1 : - nop # e0 : - xor t0, a1, t1 # .. e1 (ev5 data stall) - cmpbge zero, t0, t2 # e0 : bits set iff byte == 0 - cmpbge zero, t1, t3 # .. e1 : bits set iff byte == c - or t2, t3, t0 # e0 : - beq t0, $loop # .. e1 (zdb) - -$found: negq t0, t1 # e0 : clear all but least set bit - and t0, t1, t0 # e1 (stall) - - and t0, t3, t1 # e0 : bit set iff byte was the char - beq t1, $retnull # .. e1 (zdb) - - and t0, 0xf0, t2 # e0 : binary search for that set bit - and t0, 0xcc, t3 # .. e1 : - and t0, 0xaa, t4 # e0 : - cmovne t2, 4, t2 # .. e1 : - cmovne t3, 2, t3 # e0 : - cmovne t4, 1, t4 # .. e1 : - addq t2, t3, t2 # e0 : - addq v0, t4, v0 # .. e1 : - addq v0, t2, v0 # e0 : - ret # .. e1 : - -$retnull: - mov zero, v0 # e0 : - ret # .. e1 : - - END(strchr) - -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/alpha/strcmp.S b/sysdeps/alpha/strcmp.S deleted file mode 100644 index ae211bb7ae..0000000000 --- a/sysdeps/alpha/strcmp.S +++ /dev/null @@ -1,194 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Bytewise compare two null-terminated strings. */ - -#include - - .set noat - .set noreorder - - .text - -ENTRY(strcmp) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jmp AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - ldq_u t0, 0(a0) # e0 : give cache time to catch up - xor a0, a1, t2 # .. e1 : are s1 and s2 co-aligned? - ldq_u t1, 0(a1) # e0 : - and t2, 7, t2 # .. e1 : - lda t3, -1 # e0 : - bne t2, $unaligned # .. e1 : - - /* On entry to this basic block: - t0 == the first destination word for masking back in - t1 == the first source word. - t3 == -1. */ - -$aligned: - mskqh t3, a0, t3 # e0 : - nop # .. e1 : - ornot t1, t3, t1 # e0 : - ornot t0, t3, t0 # .. e1 : - cmpbge zero, t1, t7 # e0 : bits set iff null found - bne t7, $eos # e1 (zdb) - - /* Aligned compare main loop. - On entry to this basic block: - t0 == an s1 word. - t1 == an s2 word not containing a null. */ - -$a_loop: - xor t0, t1, t2 # e0 : - bne t2, $wordcmp # .. e1 (zdb) - ldq_u t1, 8(a1) # e0 : - ldq_u t0, 8(a0) # .. e1 : - addq a1, 8, a1 # e0 : - addq a0, 8, a0 # .. e1 : - cmpbge zero, t1, t7 # e0 : - beq t7, $a_loop # .. e1 (zdb) - br $eos # e1 : - - /* The two strings are not co-aligned. Align s1 and cope. */ - -$unaligned: - and a0, 7, t4 # e0 : find s1 misalignment - and a1, 7, t5 # .. e1 : find s2 misalignment - subq a1, t4, a1 # e0 : - - /* If s2 misalignment is larger than s2 misalignment, we need - extra startup checks to avoid SEGV. */ - - cmplt t4, t5, t8 # .. e1 : - beq t8, $u_head # e1 : - - mskqh t3, t5, t3 # e0 : - ornot t1, t3, t3 # e0 : - cmpbge zero, t3, t7 # e1 : is there a zero? - beq t7, $u_head # e1 : - - /* We've found a zero in the first partial word of s2. Align - our current s1 and s2 words and compare what we've got. */ - - extql t1, t5, t1 # e0 : - extql t0, a0, t0 # e0 : - cmpbge zero, t1, t7 # .. e1 : find that zero again - br $eos # e1 : and finish up - - .align 3 -$u_head: - /* We know just enough now to be able to assemble the first - full word of s2. We can still find a zero at the end of it. - - On entry to this basic block: - t0 == first word of s1 - t1 == first partial word of s2. */ - - ldq_u t2, 8(a1) # e0 : load second partial s2 word - lda t3, -1 # .. e1 : create leading garbage mask - extql t1, a1, t1 # e0 : create first s2 word - mskqh t3, a0, t3 # e0 : - extqh t2, a1, t4 # e0 : - ornot t0, t3, t0 # .. e1 : kill s1 garbage - or t1, t4, t1 # e0 : s2 word now complete - cmpbge zero, t0, t7 # .. e1 : find zero in first s1 word - ornot t1, t3, t1 # e0 : kill s2 garbage - lda t3, -1 # .. e1 : - mskql t3, a1, t3 # e0 : mask for s2[1] bits we have seen - bne t7, $eos # .. e1 : - xor t0, t1, t4 # e0 : compare aligned words - bne t4, $wordcmp # .. e1 (zdb) - or t2, t3, t3 # e0 : - cmpbge zero, t3, t7 # e1 : - bne t7, $u_final # e1 : - - /* Unaligned copy main loop. In order to avoid reading too much, - the loop is structured to detect zeros in aligned words from s2. - This has, unfortunately, effectively pulled half of a loop - iteration out into the head and half into the tail, but it does - prevent nastiness from accumulating in the very thing we want - to run as fast as possible. - - On entry to this basic block: - t2 == the unshifted low-bits from the next s2 word. */ - - .align 3 -$u_loop: - extql t2, a1, t3 # e0 : - ldq_u t2, 16(a1) # .. e1 : load next s2 high bits - ldq_u t0, 8(a0) # e0 : load next s1 word - addq a1, 8, a1 # .. e1 : - addq a0, 8, a0 # e0 : - nop # .. e1 : - extqh t2, a1, t1 # e0 : - cmpbge zero, t0, t7 # .. e1 : find zero in current s1 word - or t1, t3, t1 # e0 : - bne t7, $eos # .. e1 : - xor t0, t1, t4 # e0 : compare the words - bne t4, $wordcmp # .. e1 (zdb) - cmpbge zero, t2, t4 # e0 : find zero in next low bits - beq t4, $u_loop # .. e1 (zdb) - - /* We've found a zero in the low bits of the last s2 word. Get - the next s1 word and align them. */ -$u_final: - ldq_u t0, 8(a0) # e1 : - extql t2, a1, t1 # .. e0 : - cmpbge zero, t1, t7 # e0 : - - /* We've found a zero somewhere in a word we just read. - On entry to this basic block: - t0 == s1 word - t1 == s2 word - t7 == cmpbge mask containing the zero. */ - - .align 3 -$eos: - negq t7, t6 # e0 : create bytemask of valid data - and t6, t7, t8 # e1 : - subq t8, 1, t6 # e0 : - or t6, t8, t7 # e1 : - zapnot t0, t7, t0 # e0 : kill the garbage - zapnot t1, t7, t1 # .. e1 : - xor t0, t1, v0 # e0 : and compare - beq v0, $done # .. e1 : - - /* Here we have two differing co-aligned words in t0 & t1. - Bytewise compare them and return (t0 > t1 ? 1 : -1). */ -$wordcmp: - cmpbge t0, t1, t2 # e0 : comparison yields bit mask of ge - cmpbge t1, t0, t3 # .. e1 : - xor t2, t3, t0 # e0 : bits set iff t0/t1 bytes differ - negq t0, t1 # e1 : clear all but least bit - and t0, t1, t0 # e0 : - lda v0, -1 # .. e1 : - and t0, t2, t1 # e0 : was bit set in t0 > t1? - cmovne t1, 1, v0 # .. e1 (zdb) - -$done: - ret # e1 : - - END(strcmp) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/alpha/strcpy.S b/sysdeps/alpha/strcpy.S deleted file mode 100644 index 4726630aab..0000000000 --- a/sysdeps/alpha/strcpy.S +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Copy a null-terminated string from SRC to DST. Return a pointer - to the null-terminator in the source. */ - -#include - - .text - -ENTRY(strcpy) - ldgp gp, 0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - mov a0, v0 # set up return value - mov ra, t9 - jmp $31, __stxcpy # do the copy - - END(strcpy) -libc_hidden_builtin_def (strcpy) diff --git a/sysdeps/alpha/strlen.S b/sysdeps/alpha/strlen.S deleted file mode 100644 index 72aef91e0e..0000000000 --- a/sysdeps/alpha/strlen.S +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@cs.arizona.edu). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Finds length of a 0-terminated string. Optimized for the Alpha - architecture: - - - memory accessed as aligned quadwords only - - uses cmpbge to compare 8 bytes in parallel - - does binary search to find 0 byte in last quadword (HAKMEM - needed 12 instructions to do this instead of the 8 instructions - that the binary search needs). -*/ - -#include - - .set noreorder - .set noat - -ENTRY(strlen) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - ldq_u t0, 0(a0) # load first quadword (a0 may be misaligned) - lda t1, -1(zero) - insqh t1, a0, t1 - andnot a0, 7, v0 - or t1, t0, t0 - nop # dual issue the next two on ev5 - cmpbge zero, t0, t1 # t1 <- bitmask: bit i == 1 <==> i-th byte == 0 - bne t1, $found - -$loop: ldq t0, 8(v0) - addq v0, 8, v0 # addr += 8 - cmpbge zero, t0, t1 - beq t1, $loop - -$found: negq t1, t2 # clear all but least set bit - and t1, t2, t1 - - and t1, 0xf0, t2 # binary search for that set bit - and t1, 0xcc, t3 - and t1, 0xaa, t4 - cmovne t2, 4, t2 - cmovne t3, 2, t3 - cmovne t4, 1, t4 - addq t2, t3, t2 - addq v0, t4, v0 - addq v0, t2, v0 - nop # dual issue next two on ev4 and ev5 - - subq v0, a0, v0 - ret - - END(strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/alpha/strncat.S b/sysdeps/alpha/strncat.S deleted file mode 100644 index 61c4445da3..0000000000 --- a/sysdeps/alpha/strncat.S +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Append no more than COUNT characters from the null-terminated string SRC - to the null-terminated string DST. Always null-terminate the new DST. */ - -#include - - .text - -ENTRY(strncat) - ldgp gp, 0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - mov a0, v0 # set up return value - beq a2, $zerocount - - /* Find the end of the string. */ - - ldq_u t0, 0(a0) # load first quadword (a0 may be misaligned) - lda t1, -1(zero) - insqh t1, a0, t1 - andnot a0, 7, a0 - or t1, t0, t0 - cmpbge zero, t0, t1 # t1 <- bitmask: bit i == 1 <==> i-th byte == 0 - bne t1, $found - -$loop: ldq t0, 8(a0) - addq a0, 8, a0 # addr += 8 - cmpbge zero, t0, t1 - beq t1, $loop - -$found: negq t1, t2 # clear all but least set bit - and t1, t2, t1 - - and t1, 0xf0, t2 # binary search for that set bit - and t1, 0xcc, t3 - and t1, 0xaa, t4 - cmovne t2, 4, t2 - cmovne t3, 2, t3 - cmovne t4, 1, t4 - addq t2, t3, t2 - addq a0, t4, a0 - addq a0, t2, a0 - - /* Now do the append. */ - - jsr t9, __stxncpy - - /* Worry about the null termination. */ - - zapnot t0, t8, t1 # was last byte a null? - bne t1, 0f - ret - -0: and t10, 0x80, t1 - bne t1, 1f - - /* Here there are bytes left in the current word. Clear one. */ - addq t10, t10, t10 # end-of-count bit <<= 1 - zap t0, t10, t0 - stq_u t0, 0(a0) - ret - -1: /* Here we must read the next DST word and clear the first byte. */ - ldq_u t0, 8(a0) - zap t0, 1, t0 - stq_u t0, 8(a0) - -$zerocount: - ret - - END(strncat) diff --git a/sysdeps/alpha/strncmp.S b/sysdeps/alpha/strncmp.S deleted file mode 100644 index e5a6e0a832..0000000000 --- a/sysdeps/alpha/strncmp.S +++ /dev/null @@ -1,277 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Bytewise compare two null-terminated strings of length no longer than N. */ - -#include - - .set noat - .set noreorder - -/* EV6 only predicts one branch per octaword. We'll use these to push - subsequent branches back to the next bundle. This will generally add - a fetch+decode cycle to older machines, so skip in that case. */ -#ifdef __alpha_fix__ -# define ev6_unop unop -#else -# define ev6_unop -#endif - - .text - -ENTRY(strncmp) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - xor a0, a1, t2 # are s1 and s2 co-aligned? - beq a2, $zerolength - ldq_u t0, 0(a0) # load asap to give cache time to catch up - ldq_u t1, 0(a1) - lda t3, -1 - and t2, 7, t2 - srl t3, 1, t6 - and a0, 7, t4 # find s1 misalignment - and a1, 7, t5 # find s2 misalignment - cmovlt a2, t6, a2 # bound neg count to LONG_MAX - addq a1, a2, a3 # s2+count - addq a2, t4, a2 # bias count by s1 misalignment - and a2, 7, t10 # ofs of last byte in s1 last word - srl a2, 3, a2 # remaining full words in s1 count - bne t2, $unaligned - - /* On entry to this basic block: - t0 == the first word of s1. - t1 == the first word of s2. - t3 == -1. */ -$aligned: - mskqh t3, a1, t8 # mask off leading garbage - ornot t1, t8, t1 - ornot t0, t8, t0 - cmpbge zero, t1, t7 # bits set iff null found - beq a2, $eoc # check end of count - bne t7, $eos - beq t10, $ant_loop - - /* Aligned compare main loop. - On entry to this basic block: - t0 == an s1 word. - t1 == an s2 word not containing a null. */ - - .align 4 -$a_loop: - xor t0, t1, t2 # e0 : - bne t2, $wordcmp # .. e1 (zdb) - ldq_u t1, 8(a1) # e0 : - ldq_u t0, 8(a0) # .. e1 : - - subq a2, 1, a2 # e0 : - addq a1, 8, a1 # .. e1 : - addq a0, 8, a0 # e0 : - beq a2, $eoc # .. e1 : - - cmpbge zero, t1, t7 # e0 : - beq t7, $a_loop # .. e1 : - - br $eos - - /* Alternate aligned compare loop, for when there's no trailing - bytes on the count. We have to avoid reading too much data. */ - .align 4 -$ant_loop: - xor t0, t1, t2 # e0 : - ev6_unop - ev6_unop - bne t2, $wordcmp # .. e1 (zdb) - - subq a2, 1, a2 # e0 : - beq a2, $zerolength # .. e1 : - ldq_u t1, 8(a1) # e0 : - ldq_u t0, 8(a0) # .. e1 : - - addq a1, 8, a1 # e0 : - addq a0, 8, a0 # .. e1 : - cmpbge zero, t1, t7 # e0 : - beq t7, $ant_loop # .. e1 : - - br $eos - - /* The two strings are not co-aligned. Align s1 and cope. */ - /* On entry to this basic block: - t0 == the first word of s1. - t1 == the first word of s2. - t3 == -1. - t4 == misalignment of s1. - t5 == misalignment of s2. - t10 == misalignment of s1 end. */ - .align 4 -$unaligned: - /* If s1 misalignment is larger than s2 misalignment, we need - extra startup checks to avoid SEGV. */ - subq a1, t4, a1 # adjust s2 for s1 misalignment - cmpult t4, t5, t9 - subq a3, 1, a3 # last byte of s2 - bic a1, 7, t8 - mskqh t3, t5, t7 # mask garbage in s2 - subq a3, t8, a3 - ornot t1, t7, t7 - srl a3, 3, a3 # remaining full words in s2 count - beq t9, $u_head - - /* Failing that, we need to look for both eos and eoc within the - first word of s2. If we find either, we can continue by - pretending that the next word of s2 is all zeros. */ - lda t2, 0 # next = zero - cmpeq a3, 0, t8 # eoc in the first word of s2? - cmpbge zero, t7, t7 # eos in the first word of s2? - or t7, t8, t8 - bne t8, $u_head_nl - - /* We know just enough now to be able to assemble the first - full word of s2. We can still find a zero at the end of it. - - On entry to this basic block: - t0 == first word of s1 - t1 == first partial word of s2. - t3 == -1. - t10 == ofs of last byte in s1 last word. - t11 == ofs of last byte in s2 last word. */ -$u_head: - ldq_u t2, 8(a1) # load second partial s2 word - subq a3, 1, a3 -$u_head_nl: - extql t1, a1, t1 # create first s2 word - mskqh t3, a0, t8 - extqh t2, a1, t4 - ornot t0, t8, t0 # kill s1 garbage - or t1, t4, t1 # s2 word now complete - cmpbge zero, t0, t7 # find eos in first s1 word - ornot t1, t8, t1 # kill s2 garbage - beq a2, $eoc - subq a2, 1, a2 - bne t7, $eos - mskql t3, a1, t8 # mask out s2[1] bits we have seen - xor t0, t1, t4 # compare aligned words - or t2, t8, t8 - bne t4, $wordcmp - cmpbge zero, t8, t7 # eos in high bits of s2[1]? - cmpeq a3, 0, t8 # eoc in s2[1]? - or t7, t8, t7 - bne t7, $u_final - - /* Unaligned copy main loop. In order to avoid reading too much, - the loop is structured to detect zeros in aligned words from s2. - This has, unfortunately, effectively pulled half of a loop - iteration out into the head and half into the tail, but it does - prevent nastiness from accumulating in the very thing we want - to run as fast as possible. - - On entry to this basic block: - t2 == the unshifted low-bits from the next s2 word. - t10 == ofs of last byte in s1 last word. - t11 == ofs of last byte in s2 last word. */ - .align 4 -$u_loop: - extql t2, a1, t3 # e0 : - ldq_u t2, 16(a1) # .. e1 : load next s2 high bits - ldq_u t0, 8(a0) # e0 : load next s1 word - addq a1, 8, a1 # .. e1 : - - addq a0, 8, a0 # e0 : - subq a3, 1, a3 # .. e1 : - extqh t2, a1, t1 # e0 : - cmpbge zero, t0, t7 # .. e1 : eos in current s1 word - - or t1, t3, t1 # e0 : - beq a2, $eoc # .. e1 : eoc in current s1 word - subq a2, 1, a2 # e0 : - cmpbge zero, t2, t4 # .. e1 : eos in s2[1] - - xor t0, t1, t3 # e0 : compare the words - ev6_unop - ev6_unop - bne t7, $eos # .. e1 : - - cmpeq a3, 0, t5 # e0 : eoc in s2[1] - ev6_unop - ev6_unop - bne t3, $wordcmp # .. e1 : - - or t4, t5, t4 # e0 : eos or eoc in s2[1]. - beq t4, $u_loop # .. e1 (zdb) - - /* We've found a zero in the low bits of the last s2 word. Get - the next s1 word and align them. */ - .align 3 -$u_final: - ldq_u t0, 8(a0) - extql t2, a1, t1 - cmpbge zero, t1, t7 - bne a2, $eos - - /* We've hit end of count. Zero everything after the count - and compare whats left. */ - .align 3 -$eoc: - mskql t0, t10, t0 - mskql t1, t10, t1 - cmpbge zero, t1, t7 - - /* We've found a zero somewhere in a word we just read. - On entry to this basic block: - t0 == s1 word - t1 == s2 word - t7 == cmpbge mask containing the zero. */ - .align 3 -$eos: - negq t7, t6 # create bytemask of valid data - and t6, t7, t8 - subq t8, 1, t6 - or t6, t8, t7 - zapnot t0, t7, t0 # kill the garbage - zapnot t1, t7, t1 - xor t0, t1, v0 # ... and compare - beq v0, $done - - /* Here we have two differing co-aligned words in t0 & t1. - Bytewise compare them and return (t0 > t1 ? 1 : -1). */ - .align 3 -$wordcmp: - cmpbge t0, t1, t2 # comparison yields bit mask of ge - cmpbge t1, t0, t3 - xor t2, t3, t0 # bits set iff t0/t1 bytes differ - negq t0, t1 # clear all but least bit - and t0, t1, t0 - lda v0, -1 - and t0, t2, t1 # was bit set in t0 > t1? - cmovne t1, 1, v0 -$done: - ret - - .align 3 -$zerolength: - clr v0 - ret - - END(strncmp) -libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/alpha/strncpy.S b/sysdeps/alpha/strncpy.S deleted file mode 100644 index 96f3973ff7..0000000000 --- a/sysdeps/alpha/strncpy.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Copy no more than COUNT bytes of the null-terminated string from - SRC to DST. If SRC does not cover all of COUNT, the balance is - zeroed. */ - -#include - - .set noat - .set noreorder - - .text - -ENTRY(strncpy) - ldgp gp, 0(pv) -#ifdef PROF - lda AT, _mcount - jsr AT, (AT), _mcount -#endif - .prologue 1 - - mov a0, v0 # set return value now - beq a2, $zerocount - jsr t9, __stxncpy # do the work of the copy - - bne a2, $multiword # do we have full words left? - - .align 3 - subq t8, 1, t2 # e0 : guess not - subq t10, 1, t3 # .. e1 : - or t2, t8, t2 # e0 : clear the bits between the last - or t3, t10, t3 # .. e1 : written byte and the last byte in - andnot t3, t2, t3 # e0 : COUNT - zap t0, t3, t0 # e1 : - stq_u t0, 0(a0) # e0 : - ret # .. e1 : - -$multiword: - subq t8, 1, t7 # e0 : clear the final bits in the prev - or t7, t8, t7 # e1 : word - zapnot t0, t7, t0 # e0 : - subq a2, 1, a2 # .. e1 : - stq_u t0, 0(a0) # e0 : - addq a0, 8, a0 # .. e1 : - - beq a2, 1f # e1 : - blbc a2, 0f # e1 : - - stq_u zero, 0(a0) # e0 : zero one word - subq a2, 1, a2 # .. e1 : - addq a0, 8, a0 # e0 : - beq a2, 1f # .. e1 : - -0: stq_u zero, 0(a0) # e0 : zero two words - subq a2, 2, a2 # .. e1 : - stq_u zero, 8(a0) # e0 : - addq a0, 16, a0 # .. e1 : - bne a2, 0b # e1 : - unop - -1: ldq_u t0, 0(a0) # e0 : clear the leading bits in the final - subq t10, 1, t7 # .. e1 : word - or t7, t10, t7 # e0 : - zap t0, t7, t0 # e1 (stall) - stq_u t0, 0(a0) # e0 : - -$zerocount: - ret # .. e1 : - - END(strncpy) -libc_hidden_builtin_def (strncpy) diff --git a/sysdeps/alpha/strrchr.S b/sysdeps/alpha/strrchr.S deleted file mode 100644 index 6b169ab86c..0000000000 --- a/sysdeps/alpha/strrchr.S +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Return the address of the last occurrence of a given character - within a null-terminated string, or null if it is not found. - - This is generally scheduled for the EV5 (got to look out for my own - interests :-), but with EV4 needs in mind. There are, in fact, fewer - stalls on the EV4 than there are on the EV5. -*/ - -#include - - .set noreorder - .set noat - -ENTRY(strrchr) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - - and a1, 0xff, a1 # e0 : zero extend our test character - mov zero, t6 # .. e1 : t6 is last match aligned addr - sll a1, 8, t5 # e0 : replicate our test character - mov zero, t7 # .. e1 : t7 is last match byte compare mask - or t5, a1, a1 # e0 : - ldq_u t0, 0(a0) # .. e1 : load first quadword - sll a1, 16, t5 # e0 : - andnot a0, 7, v0 # .. e1 : align source addr - or t5, a1, a1 # e0 : - lda t4, -1 # .. e1 : build garbage mask - sll a1, 32, t5 # e0 : - cmpbge zero, t0, t1 # .. e1 : bits set iff byte == zero - mskqh t4, a0, t4 # e0 : - or t5, a1, a1 # .. e1 : character replication complete - xor t0, a1, t2 # e0 : make bytes == c zero - cmpbge zero, t4, t4 # .. e1 : bits set iff byte is garbage - cmpbge zero, t2, t3 # e0 : bits set iff byte == c - andnot t1, t4, t1 # .. e1 : clear garbage from null test - andnot t3, t4, t3 # e0 : clear garbage from char test - bne t1, $eos # .. e1 : did we already hit the terminator? - - /* Character search main loop */ -$loop: - ldq t0, 8(v0) # e0 : load next quadword - cmovne t3, v0, t6 # .. e1 : save previous comparisons match - cmovne t3, t3, t7 # e0 : - addq v0, 8, v0 # .. e1 : - xor t0, a1, t2 # e0 : - cmpbge zero, t0, t1 # .. e1 : bits set iff byte == zero - cmpbge zero, t2, t3 # e0 : bits set iff byte == c - beq t1, $loop # .. e1 : if we havnt seen a null, loop - - /* Mask out character matches after terminator */ -$eos: - negq t1, t4 # e0 : isolate first null byte match - and t1, t4, t4 # e1 : - subq t4, 1, t5 # e0 : build a mask of the bytes upto... - or t4, t5, t4 # e1 : ... and including the null - - and t3, t4, t3 # e0 : mask out char matches after null - cmovne t3, t3, t7 # .. e1 : save it, if match found - cmovne t3, v0, t6 # e0 : - - /* Locate the address of the last matched character */ - - /* Retain the early exit for the ev4 -- the ev5 mispredict penalty - is 5 cycles -- the same as just falling through. */ - beq t7, $retnull # .. e1 : - - and t7, 0xf0, t2 # e0 : binary search for the high bit set - cmovne t2, t2, t7 # .. e1 (zdb) - cmovne t2, 4, t2 # e0 : - and t7, 0xcc, t1 # .. e1 : - cmovne t1, t1, t7 # e0 : - cmovne t1, 2, t1 # .. e1 : - and t7, 0xaa, t0 # e0 : - cmovne t0, 1, t0 # .. e1 (zdb) - addq t2, t1, t1 # e0 : - addq t6, t0, v0 # .. e1 : add our aligned base ptr to the mix - addq v0, t1, v0 # e0 : - ret # .. e1 : - -$retnull: - mov zero, v0 # e0 : - ret # .. e1 : - - END(strrchr) - -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/alpha/stxcpy.S b/sysdeps/alpha/stxcpy.S deleted file mode 100644 index a3efd9ce48..0000000000 --- a/sysdeps/alpha/stxcpy.S +++ /dev/null @@ -1,294 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Copy a null-terminated string from SRC to DST. - - This is an internal routine used by strcpy, stpcpy, and strcat. - As such, it uses special linkage conventions to make implementation - of these public functions more efficient. - - On input: - t9 = return address - a0 = DST - a1 = SRC - - On output: - t8 = bitmask (with one bit set) indicating the last byte written - a0 = unaligned address of the last *word* written - - Furthermore, v0, a3-a5, t11, and t12 are untouched. -*/ - -/* This is generally scheduled for the EV5, but should still be pretty - good for the EV4 too. */ - -#include - - .set noat - .set noreorder - - .text - .type __stxcpy, @function - .globl __stxcpy - .usepv __stxcpy, no - - cfi_startproc - cfi_return_column (t9) - - /* On entry to this basic block: - t0 == the first destination word for masking back in - t1 == the first source word. */ - .align 3 -stxcpy_aligned: - /* Create the 1st output word and detect 0's in the 1st input word. */ - lda t2, -1 # e1 : build a mask against false zero - mskqh t2, a1, t2 # e0 : detection in the src word - mskqh t1, a1, t3 # e0 : - ornot t1, t2, t2 # .. e1 : - mskql t0, a1, t0 # e0 : assemble the first output word - cmpbge zero, t2, t7 # .. e1 : bits set iff null found - or t0, t3, t1 # e0 : - bne t7, $a_eos # .. e1 : - - /* On entry to this basic block: - t0 == the first destination word for masking back in - t1 == a source word not containing a null. */ -$a_loop: - stq_u t1, 0(a0) # e0 : - addq a0, 8, a0 # .. e1 : - ldq_u t1, 0(a1) # e0 : - addq a1, 8, a1 # .. e1 : - cmpbge zero, t1, t7 # e0 (stall) - beq t7, $a_loop # .. e1 (zdb) - - /* Take care of the final (partial) word store. - On entry to this basic block we have: - t1 == the source word containing the null - t7 == the cmpbge mask that found it. */ -$a_eos: - negq t7, t6 # e0 : find low bit set - and t7, t6, t8 # e1 (stall) - - /* For the sake of the cache, don't read a destination word - if we're not going to need it. */ - and t8, 0x80, t6 # e0 : - bne t6, 1f # .. e1 (zdb) - - /* We're doing a partial word store and so need to combine - our source and original destination words. */ - ldq_u t0, 0(a0) # e0 : - subq t8, 1, t6 # .. e1 : - zapnot t1, t6, t1 # e0 : clear src bytes >= null - or t8, t6, t7 # .. e1 : - zap t0, t7, t0 # e0 : clear dst bytes <= null - or t0, t1, t1 # e1 : - -1: stq_u t1, 0(a0) # e0 : - ret (t9) # .. e1 : - - .align 3 -__stxcpy: - /* Are source and destination co-aligned? */ - xor a0, a1, t0 # e0 : - unop # : - and t0, 7, t0 # e0 : - bne t0, $unaligned # .. e1 : - - /* We are co-aligned; take care of a partial first word. */ - ldq_u t1, 0(a1) # e0 : load first src word - and a0, 7, t0 # .. e1 : take care not to load a word ... - addq a1, 8, a1 # e0 : - beq t0, stxcpy_aligned # .. e1 : ... if we wont need it - ldq_u t0, 0(a0) # e0 : - br stxcpy_aligned # .. e1 : - - -/* The source and destination are not co-aligned. Align the destination - and cope. We have to be very careful about not reading too much and - causing a SEGV. */ - - .align 3 -$u_head: - /* We know just enough now to be able to assemble the first - full source word. We can still find a zero at the end of it - that prevents us from outputting the whole thing. - - On entry to this basic block: - t0 == the first dest word, for masking back in, if needed else 0 - t1 == the low bits of the first source word - t6 == bytemask that is -1 in dest word bytes */ - - ldq_u t2, 8(a1) # e0 : - addq a1, 8, a1 # .. e1 : - - extql t1, a1, t1 # e0 : - extqh t2, a1, t4 # e0 : - mskql t0, a0, t0 # e0 : - or t1, t4, t1 # .. e1 : - mskqh t1, a0, t1 # e0 : - or t0, t1, t1 # e1 : - - or t1, t6, t6 # e0 : - cmpbge zero, t6, t7 # .. e1 : - lda t6, -1 # e0 : for masking just below - bne t7, $u_final # .. e1 : - - mskql t6, a1, t6 # e0 : mask out the bits we have - or t6, t2, t2 # e1 : already extracted before - cmpbge zero, t2, t7 # e0 : testing eos - bne t7, $u_late_head_exit # .. e1 (zdb) - - /* Finally, we've got all the stupid leading edge cases taken care - of and we can set up to enter the main loop. */ - - stq_u t1, 0(a0) # e0 : store first output word - addq a0, 8, a0 # .. e1 : - extql t2, a1, t0 # e0 : position ho-bits of lo word - ldq_u t2, 8(a1) # .. e1 : read next high-order source word - addq a1, 8, a1 # e0 : - cmpbge zero, t2, t7 # .. e1 : - nop # e0 : - bne t7, $u_eos # .. e1 : - - /* Unaligned copy main loop. In order to avoid reading too much, - the loop is structured to detect zeros in aligned source words. - This has, unfortunately, effectively pulled half of a loop - iteration out into the head and half into the tail, but it does - prevent nastiness from accumulating in the very thing we want - to run as fast as possible. - - On entry to this basic block: - t0 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word - - We further know that t2 does not contain a null terminator. */ - - .align 3 -$u_loop: - extqh t2, a1, t1 # e0 : extract high bits for current word - addq a1, 8, a1 # .. e1 : - extql t2, a1, t3 # e0 : extract low bits for next time - addq a0, 8, a0 # .. e1 : - or t0, t1, t1 # e0 : current dst word now complete - ldq_u t2, 0(a1) # .. e1 : load high word for next time - stq_u t1, -8(a0) # e0 : save the current word - mov t3, t0 # .. e1 : - cmpbge zero, t2, t7 # e0 : test new word for eos - beq t7, $u_loop # .. e1 : - - /* We've found a zero somewhere in the source word we just read. - If it resides in the lower half, we have one (probably partial) - word to write out, and if it resides in the upper half, we - have one full and one partial word left to write out. - - On entry to this basic block: - t0 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word. */ -$u_eos: - extqh t2, a1, t1 # e0 : - or t0, t1, t1 # e1 : first (partial) source word complete - - cmpbge zero, t1, t7 # e0 : is the null in this first bit? - bne t7, $u_final # .. e1 (zdb) - -$u_late_head_exit: - stq_u t1, 0(a0) # e0 : the null was in the high-order bits - addq a0, 8, a0 # .. e1 : - extql t2, a1, t1 # e0 : - cmpbge zero, t1, t7 # .. e1 : - - /* Take care of a final (probably partial) result word. - On entry to this basic block: - t1 == assembled source word - t7 == cmpbge mask that found the null. */ -$u_final: - negq t7, t6 # e0 : isolate low bit set - and t6, t7, t8 # e1 : - - and t8, 0x80, t6 # e0 : avoid dest word load if we can - bne t6, 1f # .. e1 (zdb) - - ldq_u t0, 0(a0) # e0 : - subq t8, 1, t6 # .. e1 : - or t6, t8, t7 # e0 : - zapnot t1, t6, t1 # .. e1 : kill source bytes >= null - zap t0, t7, t0 # e0 : kill dest bytes <= null - or t0, t1, t1 # e1 : - -1: stq_u t1, 0(a0) # e0 : - ret (t9) # .. e1 : - - /* Unaligned copy entry point. */ - .align 3 -$unaligned: - - ldq_u t1, 0(a1) # e0 : load first source word - - and a0, 7, t4 # .. e1 : find dest misalignment - and a1, 7, t5 # e0 : find src misalignment - - /* Conditionally load the first destination word and a bytemask - with 0xff indicating that the destination byte is sacrosanct. */ - - mov zero, t0 # .. e1 : - mov zero, t6 # e0 : - beq t4, 1f # .. e1 : - ldq_u t0, 0(a0) # e0 : - lda t6, -1 # .. e1 : - mskql t6, a0, t6 # e0 : -1: - subq a1, t4, a1 # .. e1 : sub dest misalignment from src addr - - /* If source misalignment is larger than dest misalignment, we need - extra startup checks to avoid SEGV. */ - - cmplt t4, t5, t8 # e0 : - beq t8, $u_head # .. e1 (zdb) - - lda t2, -1 # e1 : mask out leading garbage in source - mskqh t2, t5, t2 # e0 : - nop # e0 : - ornot t1, t2, t3 # .. e1 : - cmpbge zero, t3, t7 # e0 : is there a zero? - beq t7, $u_head # .. e1 (zdb) - - /* At this point we've found a zero in the first partial word of - the source. We need to isolate the valid source data and mask - it into the original destination data. (Incidentally, we know - that we'll need at least one byte of that original dest word.) */ - - ldq_u t0, 0(a0) # e0 : - - negq t7, t6 # .. e1 : build bitmask of bytes <= zero - and t6, t7, t8 # e0 : - and a1, 7, t5 # .. e1 : - subq t8, 1, t6 # e0 : - or t6, t8, t7 # e1 : - srl t8, t5, t8 # e0 : adjust final null return value - - zapnot t2, t7, t2 # .. e1 : prepare source word; mirror changes - and t1, t2, t1 # e1 : to source validity mask - extql t2, a1, t2 # .. e0 : - extql t1, a1, t1 # e0 : - - andnot t0, t2, t0 # .. e1 : zero place for source to reside - or t0, t1, t1 # e1 : and put it there - stq_u t1, 0(a0) # .. e0 : - ret (t9) - - cfi_endproc diff --git a/sysdeps/alpha/stxncpy.S b/sysdeps/alpha/stxncpy.S deleted file mode 100644 index 718a37ad0a..0000000000 --- a/sysdeps/alpha/stxncpy.S +++ /dev/null @@ -1,352 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - Contributed by Richard Henderson (rth@tamu.edu) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Copy no more than COUNT bytes of the null-terminated string from - SRC to DST. - - This is an internal routine used by strncpy, stpncpy, and strncat. - As such, it uses special linkage conventions to make implementation - of these public functions more efficient. - - On input: - t9 = return address - a0 = DST - a1 = SRC - a2 = COUNT - - Furthermore, COUNT may not be zero. - - On output: - t0 = last word written - t8 = bitmask (with one bit set) indicating the last byte written - t10 = bitmask (with one bit set) indicating the byte position of - the end of the range specified by COUNT - a0 = unaligned address of the last *word* written - a2 = the number of full words left in COUNT - - Furthermore, v0, a3-a5, t11, and t12 are untouched. -*/ - - -/* This is generally scheduled for the EV5, but should still be pretty - good for the EV4 too. */ - -#include - - .set noat - .set noreorder - - .text - .type __stxncpy, @function - .globl __stxncpy - .usepv __stxncpy, no - - cfi_startproc - cfi_return_column (t9) - - /* On entry to this basic block: - t0 == the first destination word for masking back in - t1 == the first source word. */ - .align 3 -stxncpy_aligned: - /* Create the 1st output word and detect 0's in the 1st input word. */ - lda t2, -1 # e1 : build a mask against false zero - mskqh t2, a1, t2 # e0 : detection in the src word - mskqh t1, a1, t3 # e0 : - ornot t1, t2, t2 # .. e1 : - mskql t0, a1, t0 # e0 : assemble the first output word - cmpbge zero, t2, t7 # .. e1 : bits set iff null found - or t0, t3, t0 # e0 : - beq a2, $a_eoc # .. e1 : - bne t7, $a_eos # .. e1 : - - /* On entry to this basic block: - t0 == a source word not containing a null. */ -$a_loop: - stq_u t0, 0(a0) # e0 : - addq a0, 8, a0 # .. e1 : - ldq_u t0, 0(a1) # e0 : - addq a1, 8, a1 # .. e1 : - subq a2, 1, a2 # e0 : - cmpbge zero, t0, t7 # .. e1 (stall) - beq a2, $a_eoc # e1 : - beq t7, $a_loop # e1 : - - /* Take care of the final (partial) word store. At this point - the end-of-count bit is set in t7 iff it applies. - - On entry to this basic block we have: - t0 == the source word containing the null - t7 == the cmpbge mask that found it. */ -$a_eos: - negq t7, t8 # e0 : find low bit set - and t7, t8, t8 # e1 (stall) - - /* For the sake of the cache, don't read a destination word - if we're not going to need it. */ - and t8, 0x80, t6 # e0 : - bne t6, 1f # .. e1 (zdb) - - /* We're doing a partial word store and so need to combine - our source and original destination words. */ - ldq_u t1, 0(a0) # e0 : - subq t8, 1, t6 # .. e1 : - or t8, t6, t7 # e0 : - unop # - zapnot t0, t7, t0 # e0 : clear src bytes > null - zap t1, t7, t1 # .. e1 : clear dst bytes <= null - or t0, t1, t0 # e1 : - -1: stq_u t0, 0(a0) # e0 : - ret (t9) # e1 : - - /* Add the end-of-count bit to the eos detection bitmask. */ -$a_eoc: - or t10, t7, t7 - br $a_eos - - .align 3 -__stxncpy: - /* Are source and destination co-aligned? */ - lda t2, -1 - xor a0, a1, t1 - srl t2, 1, t2 - and a0, 7, t0 # find dest misalignment - cmovlt a2, t2, a2 # bound neg count to LONG_MAX - and t1, 7, t1 - addq a2, t0, a2 # bias count by dest misalignment - subq a2, 1, a2 - and a2, 7, t2 - srl a2, 3, a2 # a2 = loop counter = (count - 1)/8 - addq zero, 1, t10 - sll t10, t2, t10 # t10 = bitmask of last count byte - bne t1, $unaligned - - /* We are co-aligned; take care of a partial first word. */ - - ldq_u t1, 0(a1) # e0 : load first src word - addq a1, 8, a1 # .. e1 : - - beq t0, stxncpy_aligned # avoid loading dest word if not needed - ldq_u t0, 0(a0) # e0 : - br stxncpy_aligned # .. e1 : - - -/* The source and destination are not co-aligned. Align the destination - and cope. We have to be very careful about not reading too much and - causing a SEGV. */ - - .align 3 -$u_head: - /* We know just enough now to be able to assemble the first - full source word. We can still find a zero at the end of it - that prevents us from outputting the whole thing. - - On entry to this basic block: - t0 == the first dest word, unmasked - t1 == the shifted low bits of the first source word - t6 == bytemask that is -1 in dest word bytes */ - - ldq_u t2, 8(a1) # e0 : load second src word - addq a1, 8, a1 # .. e1 : - mskql t0, a0, t0 # e0 : mask trailing garbage in dst - extqh t2, a1, t4 # e0 : - or t1, t4, t1 # e1 : first aligned src word complete - mskqh t1, a0, t1 # e0 : mask leading garbage in src - or t0, t1, t0 # e0 : first output word complete - or t0, t6, t6 # e1 : mask original data for zero test - cmpbge zero, t6, t7 # e0 : - beq a2, $u_eocfin # .. e1 : - lda t6, -1 # e0 : - bne t7, $u_final # .. e1 : - - mskql t6, a1, t6 # e0 : mask out bits already seen - nop # .. e1 : - stq_u t0, 0(a0) # e0 : store first output word - or t6, t2, t2 # .. e1 : - cmpbge zero, t2, t7 # e0 : find nulls in second partial - addq a0, 8, a0 # .. e1 : - subq a2, 1, a2 # e0 : - bne t7, $u_late_head_exit # .. e1 : - - /* Finally, we've got all the stupid leading edge cases taken care - of and we can set up to enter the main loop. */ - - extql t2, a1, t1 # e0 : position hi-bits of lo word - beq a2, $u_eoc # .. e1 : - ldq_u t2, 8(a1) # e0 : read next high-order source word - addq a1, 8, a1 # .. e1 : - extqh t2, a1, t0 # e0 : position lo-bits of hi word - cmpbge zero, t2, t7 # .. e1 : test new word for eos - nop # e0 : - bne t7, $u_eos # .. e1 : - - /* Unaligned copy main loop. In order to avoid reading too much, - the loop is structured to detect zeros in aligned source words. - This has, unfortunately, effectively pulled half of a loop - iteration out into the head and half into the tail, but it does - prevent nastiness from accumulating in the very thing we want - to run as fast as possible. - - On entry to this basic block: - t0 == the shifted low-order bits from the current source word - t1 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word - - We further know that t2 does not contain a null terminator. */ - - .align 3 -$u_loop: - or t0, t1, t0 # e0 : current dst word now complete - subq a2, 1, a2 # .. e1 : decrement word count - stq_u t0, 0(a0) # e0 : save the current word - addq a0, 8, a0 # .. e1 : - extql t2, a1, t1 # e0 : extract high bits for next time - beq a2, $u_eoc # .. e1 : - ldq_u t2, 8(a1) # e0 : load high word for next time - addq a1, 8, a1 # .. e1 : - nop # e0 : - cmpbge zero, t2, t7 # .. e1 : test new word for eos - extqh t2, a1, t0 # e0 : extract low bits for current word - beq t7, $u_loop # .. e1 : - - /* We've found a zero somewhere in the source word we just read. - If it resides in the lower half, we have one (probably partial) - word to write out, and if it resides in the upper half, we - have one full and one partial word left to write out. - - On entry to this basic block: - t0 == the shifted low-order bits from the current source word - t1 == the shifted high-order bits from the previous source word - t2 == the unshifted current source word. */ -$u_eos: - or t0, t1, t0 # e0 : first (partial) source word complete - cmpbge zero, t0, t7 # e0 : is the null in this first bit? - bne t7, $u_final # .. e1 (zdb) - - stq_u t0, 0(a0) # e0 : the null was in the high-order bits - addq a0, 8, a0 # .. e1 : - subq a2, 1, a2 # e0 : - -$u_late_head_exit: - extql t2, a1, t0 # e0 : - cmpbge zero, t0, t7 # e0 : - or t7, t10, t6 # e1 : - cmoveq a2, t6, t7 # e0 : - - /* Take care of a final (probably partial) result word. - On entry to this basic block: - t0 == assembled source word - t7 == cmpbge mask that found the null. */ -$u_final: - negq t7, t6 # e0 : isolate low bit set - and t6, t7, t8 # e1 : - - and t8, 0x80, t6 # e0 : avoid dest word load if we can - bne t6, 1f # .. e1 (zdb) - - ldq_u t1, 0(a0) # e0 : - subq t8, 1, t6 # .. e1 : - or t6, t8, t7 # e0 : - zapnot t0, t7, t0 # .. e1 : kill source bytes > null - zap t1, t7, t1 # e0 : kill dest bytes <= null - or t0, t1, t0 # e1 : - -1: stq_u t0, 0(a0) # e0 : - ret (t9) # .. e1 : - - /* Got to end-of-count before end of string. - On entry to this basic block: - t1 == the shifted high-order bits from the previous source word */ -$u_eoc: - and a1, 7, t6 # e1 : - sll t10, t6, t6 # e0 : - and t6, 0xff, t6 # e0 : - bne t6, 1f # e1 : avoid src word load if we can - - ldq_u t2, 8(a1) # e0 : load final src word - nop # .. e1 : - extqh t2, a1, t0 # e0 : extract high bits for last word - or t1, t0, t1 # e1 : - -1: cmpbge zero, t1, t7 - mov t1, t0 - -$u_eocfin: # end-of-count, final word - or t10, t7, t7 - br $u_final - - /* Unaligned copy entry point. */ - .align 3 -$unaligned: - - ldq_u t1, 0(a1) # e0 : load first source word - - and a0, 7, t4 # .. e1 : find dest misalignment - and a1, 7, t5 # e0 : find src misalignment - - /* Conditionally load the first destination word and a bytemask - with 0xff indicating that the destination byte is sacrosanct. */ - - mov zero, t0 # .. e1 : - mov zero, t6 # e0 : - beq t4, 1f # .. e1 : - ldq_u t0, 0(a0) # e0 : - lda t6, -1 # .. e1 : - mskql t6, a0, t6 # e0 : -1: - subq a1, t4, a1 # .. e1 : sub dest misalignment from src addr - - /* If source misalignment is larger than dest misalignment, we need - extra startup checks to avoid SEGV. */ - - cmplt t4, t5, t8 # e1 : - extql t1, a1, t1 # .. e0 : shift src into place - lda t2, -1 # e0 : for creating masks later - beq t8, $u_head # e1 : - - mskqh t2, t5, t2 # e0 : begin src byte validity mask - cmpbge zero, t1, t7 # .. e1 : is there a zero? - extql t2, a1, t2 # e0 : - or t7, t10, t5 # .. e1 : test for end-of-count too - cmpbge zero, t2, t3 # e0 : - cmoveq a2, t5, t7 # .. e1 : - andnot t7, t3, t7 # e0 : - beq t7, $u_head # .. e1 (zdb) - - /* At this point we've found a zero in the first partial word of - the source. We need to isolate the valid source data and mask - it into the original destination data. (Incidentally, we know - that we'll need at least one byte of that original dest word.) */ - - ldq_u t0, 0(a0) # e0 : - negq t7, t6 # .. e1 : build bitmask of bytes <= zero - mskqh t1, t4, t1 # e0 : - and t6, t7, t8 # .. e1 : - subq t8, 1, t6 # e0 : - or t6, t8, t7 # e1 : - - zapnot t2, t7, t2 # e0 : prepare source word; mirror changes - zapnot t1, t7, t1 # .. e1 : to source validity mask - - andnot t0, t2, t0 # e0 : zero place for source to reside - or t0, t1, t0 # e1 : and put it there - stq_u t0, 0(a0) # e0 : - ret (t9) # .. e1 : - - cfi_endproc diff --git a/sysdeps/alpha/sub_n.S b/sysdeps/alpha/sub_n.S deleted file mode 100644 index bc529e490e..0000000000 --- a/sysdeps/alpha/sub_n.S +++ /dev/null @@ -1,118 +0,0 @@ - # Alpha __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and - # store difference in a third limb vector. - - # Copyright (C) 1995-2017 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library. If not, see . - - - # INPUT PARAMETERS - # res_ptr $16 - # s1_ptr $17 - # s2_ptr $18 - # size $19 - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_sub_n - .ent __mpn_sub_n -__mpn_sub_n: - .frame $30,0,$26,0 - - ldq $3,0($17) - ldq $4,0($18) - - subq $19,1,$19 - and $19,4-1,$2 # number of limbs in first loop - bis $31,$31,$0 - beq $2,.L0 # if multiple of 4 limbs, skip first loop - - subq $19,$2,$19 - -.Loop0: subq $2,1,$2 - ldq $5,8($17) - addq $4,$0,$4 - ldq $6,8($18) - cmpult $4,$0,$1 - subq $3,$4,$4 - cmpult $3,$4,$0 - stq $4,0($16) - or $0,$1,$0 - - addq $17,8,$17 - addq $18,8,$18 - bis $5,$5,$3 - bis $6,$6,$4 - addq $16,8,$16 - bne $2,.Loop0 - -.L0: beq $19,.Lend - - .align 3 -.Loop: subq $19,4,$19 - - ldq $5,8($17) - addq $4,$0,$4 - ldq $6,8($18) - cmpult $4,$0,$1 - subq $3,$4,$4 - cmpult $3,$4,$0 - stq $4,0($16) - or $0,$1,$0 - - ldq $3,16($17) - addq $6,$0,$6 - ldq $4,16($18) - cmpult $6,$0,$1 - subq $5,$6,$6 - cmpult $5,$6,$0 - stq $6,8($16) - or $0,$1,$0 - - ldq $5,24($17) - addq $4,$0,$4 - ldq $6,24($18) - cmpult $4,$0,$1 - subq $3,$4,$4 - cmpult $3,$4,$0 - stq $4,16($16) - or $0,$1,$0 - - ldq $3,32($17) - addq $6,$0,$6 - ldq $4,32($18) - cmpult $6,$0,$1 - subq $5,$6,$6 - cmpult $5,$6,$0 - stq $6,24($16) - or $0,$1,$0 - - addq $17,32,$17 - addq $18,32,$18 - addq $16,32,$16 - bne $19,.Loop - -.Lend: addq $4,$0,$4 - cmpult $4,$0,$1 - subq $3,$4,$4 - cmpult $3,$4,$0 - stq $4,0($16) - or $0,$1,$0 - ret $31,($26),1 - - .end __mpn_sub_n diff --git a/sysdeps/alpha/submul_1.S b/sysdeps/alpha/submul_1.S deleted file mode 100644 index 020866733a..0000000000 --- a/sysdeps/alpha/submul_1.S +++ /dev/null @@ -1,90 +0,0 @@ - # Alpha 21064 __mpn_submul_1 -- Multiply a limb vector with a limb and - # subtract the result from a second limb vector. - - # Copyright (C) 1992-2017 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library. If not, see . - - - # INPUT PARAMETERS - # res_ptr r16 - # s1_ptr r17 - # size r18 - # s2_limb r19 - - # This code runs at 42 cycles/limb on EV4 and 18 cycles/limb on EV5. - - .set noreorder - .set noat -.text - .align 3 - .globl __mpn_submul_1 - .ent __mpn_submul_1 2 -__mpn_submul_1: - .frame $30,0,$26 - - ldq $2,0($17) # $2 = s1_limb - addq $17,8,$17 # s1_ptr++ - subq $18,1,$18 # size-- - mulq $2,$19,$3 # $3 = prod_low - ldq $5,0($16) # $5 = *res_ptr - umulh $2,$19,$0 # $0 = prod_high - beq $18,.Lend1 # jump if size was == 1 - ldq $2,0($17) # $2 = s1_limb - addq $17,8,$17 # s1_ptr++ - subq $18,1,$18 # size-- - subq $5,$3,$3 - cmpult $5,$3,$4 - stq $3,0($16) - addq $16,8,$16 # res_ptr++ - beq $18,.Lend2 # jump if size was == 2 - - .align 3 -.Loop: mulq $2,$19,$3 # $3 = prod_low - ldq $5,0($16) # $5 = *res_ptr - addq $4,$0,$0 # cy_limb = cy_limb + 'cy' - subq $18,1,$18 # size-- - umulh $2,$19,$4 # $4 = cy_limb - ldq $2,0($17) # $2 = s1_limb - addq $17,8,$17 # s1_ptr++ - addq $3,$0,$3 # $3 = cy_limb + prod_low - cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) - subq $5,$3,$3 - cmpult $5,$3,$5 - stq $3,0($16) - addq $16,8,$16 # res_ptr++ - addq $5,$0,$0 # combine carries - bne $18,.Loop - -.Lend2: mulq $2,$19,$3 # $3 = prod_low - ldq $5,0($16) # $5 = *res_ptr - addq $4,$0,$0 # cy_limb = cy_limb + 'cy' - umulh $2,$19,$4 # $4 = cy_limb - addq $3,$0,$3 # $3 = cy_limb + prod_low - cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) - subq $5,$3,$3 - cmpult $5,$3,$5 - stq $3,0($16) - addq $5,$0,$0 # combine carries - addq $4,$0,$0 # cy_limb = prod_high + cy - ret $31,($26),1 -.Lend1: subq $5,$3,$3 - cmpult $5,$3,$5 - stq $3,0($16) - addq $0,$5,$0 - ret $31,($26),1 - - .end __mpn_submul_1 diff --git a/sysdeps/alpha/tininess.h b/sysdeps/alpha/tininess.h deleted file mode 100644 index 1db37790f8..0000000000 --- a/sysdeps/alpha/tininess.h +++ /dev/null @@ -1 +0,0 @@ -#define TININESS_AFTER_ROUNDING 1 diff --git a/sysdeps/alpha/tls-macros.h b/sysdeps/alpha/tls-macros.h deleted file mode 100644 index 00489c289f..0000000000 --- a/sysdeps/alpha/tls-macros.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Macros to support TLS testing in times of missing compiler support. */ - -extern void *__tls_get_addr (void *); - -# define TLS_GD(x) \ - ({ register void *__gp asm ("$29"); void *__result; \ - asm ("lda %0, " #x "($gp) !tlsgd" : "=r" (__result) : "r"(__gp)); \ - __tls_get_addr (__result); }) - -# define TLS_LD(x) \ - ({ register void *__gp asm ("$29"); void *__result; \ - asm ("lda %0, " #x "($gp) !tlsldm" : "=r" (__result) : "r"(__gp)); \ - __result = __tls_get_addr (__result); \ - asm ("lda %0, " #x "(%0) !dtprel" : "+r" (__result)); \ - __result; }) - -# define TLS_IE(x) \ - ({ register void *__gp asm ("$29"); long ofs; \ - asm ("ldq %0, " #x "($gp) !gottprel" : "=r"(ofs) : "r"(__gp)); \ - __builtin_thread_pointer () + ofs; }) - -# define TLS_LE(x) \ - ({ void *__result = __builtin_thread_pointer (); \ - asm ("lda %0, " #x "(%0) !tprel" : "+r" (__result)); \ - __result; }) diff --git a/sysdeps/alpha/tst-audit.h b/sysdeps/alpha/tst-audit.h deleted file mode 100644 index 042a8c7718..0000000000 --- a/sysdeps/alpha/tst-audit.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. Alpha version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define pltenter la_alpha_gnu_pltenter -#define pltexit la_alpha_gnu_pltexit -#define La_regs La_alpha_regs -#define La_retval La_alpha_retval -#define int_retval lrv_r0 diff --git a/sysdeps/alpha/udiv_qrnnd.S b/sysdeps/alpha/udiv_qrnnd.S deleted file mode 100644 index 899b445641..0000000000 --- a/sysdeps/alpha/udiv_qrnnd.S +++ /dev/null @@ -1,159 +0,0 @@ - # Alpha 21064 __udiv_qrnnd - - # Copyright (C) 1992-2017 Free Software Foundation, Inc. - - # This file is part of the GNU MP Library. - - # The GNU MP Library is free software; you can redistribute it and/or modify - # it under the terms of the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library. If not, see . - -#include - - .set noreorder - .set noat - - .text - -LEAF(__udiv_qrnnd, 0) -#ifdef PROF - ldgp gp, 0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount - .prologue 1 -#else - .prologue 0 -#endif - -#define cnt $2 -#define tmp $3 -#define rem_ptr $16 -#define n1 $17 -#define n0 $18 -#define d $19 -#define qb $20 - - ldiq cnt,16 - blt d,$largedivisor - -$loop1: cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule d,n1,qb - subq n1,d,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule d,n1,qb - subq n1,d,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule d,n1,qb - subq n1,d,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule d,n1,qb - subq n1,d,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - subq cnt,1,cnt - bgt cnt,$loop1 - stq n1,0(rem_ptr) - bis $31,n0,$0 - ret $31,($26),1 - -$largedivisor: - and n0,1,$4 - - srl n0,1,n0 - sll n1,63,tmp - or tmp,n0,n0 - srl n1,1,n1 - - and d,1,$6 - srl d,1,$5 - addq $5,$6,$5 - -$loop2: cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule $5,n1,qb - subq n1,$5,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule $5,n1,qb - subq n1,$5,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule $5,n1,qb - subq n1,$5,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule $5,n1,qb - subq n1,$5,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - subq cnt,1,cnt - bgt cnt,$loop2 - - addq n1,n1,n1 - addq $4,n1,n1 - bne $6,$Odd - stq n1,0(rem_ptr) - bis $31,n0,$0 - ret $31,($26),1 - -$Odd: - /* q' in n0. r' in n1 */ - addq n1,n0,n1 - - cmpult n1,n0,tmp # tmp := carry from addq - subq n1,d,AT - addq n0,tmp,n0 - cmovne tmp,AT,n1 - - cmpult n1,d,tmp - addq n0,1,AT - cmoveq tmp,AT,n0 - subq n1,d,AT - cmoveq tmp,AT,n1 - - stq n1,0(rem_ptr) - bis $31,n0,$0 - ret $31,($26),1 - - .end __udiv_qrnnd diff --git a/sysdeps/arm/Implies b/sysdeps/arm/Implies deleted file mode 100644 index 780c4e2467..0000000000 --- a/sysdeps/arm/Implies +++ /dev/null @@ -1,3 +0,0 @@ -wordsize-32 -ieee754/flt-32 -ieee754/dbl-64 diff --git a/sysdeps/arm/Makefile b/sysdeps/arm/Makefile deleted file mode 100644 index 2849aeda42..0000000000 --- a/sysdeps/arm/Makefile +++ /dev/null @@ -1,79 +0,0 @@ -gnulib-arch = $(elf-objpfx)libgcc-stubs.a -static-gnulib-arch = $(elf-objpfx)libgcc-stubs.a - -# All supported build tools support TLS descriptors, but the OS may not. -ifndef have-arm-tls-desc -have-arm-tls-desc = yes -endif - -ifeq ($(subdir),elf) -sysdep-dl-routines += tlsdesc dl-tlsdesc -sysdep_routines += aeabi_unwind_cpp_pr1 find_exidx -sysdep-rtld-routines += aeabi_unwind_cpp_pr1 -shared-only-routines += aeabi_unwind_cpp_pr1 - -$(objpfx)libgcc-stubs.a: $(objpfx)aeabi_unwind_cpp_pr1.os - $(build-extra-lib) - -lib-noranlib: $(objpfx)libgcc-stubs.a - -ifeq ($(build-shared),yes) -ifeq ($(have-arm-tls-desc),yes) -tests += tst-armtlsdescloc tst-armtlsdescextnow tst-armtlsdescextlazy -modules-names += tst-armtlsdesclocmod -modules-names += tst-armtlsdescextlazymod tst-armtlsdescextnowmod -CPPFLAGS-tst-armtlsdescextnowmod.c += -Dstatic= -CPPFLAGS-tst-armtlsdescextlazymod.c += -Dstatic= -CFLAGS-tst-armtlsdesclocmod.c += -mtls-dialect=gnu2 -CFLAGS-tst-armtlsdescextnowmod.c += -mtls-dialect=gnu2 -CFLAGS-tst-armtlsdescextlazymod.c += -mtls-dialect=gnu2 -LDFLAGS-tst-armtlsdescextnowmod.so += -Wl,-z,now -tst-armtlsdescloc-ENV = LD_BIND_NOW=1 -tst-armtlsdescextnow-ENV = LD_BIND_NOW=1 -tst-armtlsdescextlazy-ENV = LD_BIND_NOW=1 -$(objpfx)tst-armtlsdescloc: $(objpfx)tst-armtlsdesclocmod.so -$(objpfx)tst-armtlsdescextnow: $(objpfx)tst-armtlsdescextnowmod.so -$(objpfx)tst-armtlsdescextlazy: $(objpfx)tst-armtlsdescextlazymod.so -endif -endif -endif - -ifeq ($(subdir),csu) -# get offset to rtld_global._dl_hwcap -gen-as-const-headers += rtld-global-offsets.sym tlsdesc.sym -aeabi_constants = aeabi_lcsts aeabi_sighandlers aeabi_math -aeabi_routines = aeabi_assert aeabi_localeconv aeabi_errno_addr \ - aeabi_mb_cur_max aeabi_atexit aeabi_memclr aeabi_memcpy \ - aeabi_memmove aeabi_memset \ - aeabi_read_tp libc-aeabi_read_tp - -sysdep_routines += $(aeabi_constants) $(aeabi_routines) -static-only-routines += $(aeabi_constants) aeabi_read_tp -shared-only-routines += libc-aeabi_read_tp - -# In order for unwinding to fail when it falls out of main, we need a -# cantunwind marker. There's one in start.S. To make sure we reach it, add -# unwind tables for __libc_start_main. -CFLAGS-libc-start.c += -fexceptions - -sysdep_routines += arm-unwind-resume -shared-only-routines += arm-unwind-resume -endif - -ifeq ($(subdir),gmon) -sysdep_routines += arm-mcount -endif - -ifeq ($(subdir),debug) -CFLAGS-backtrace.c += -funwind-tables -endif - -ifeq ($(subdir),rt) -librt-sysdep_routines += rt-aeabi_unwind_cpp_pr1 rt-arm-unwind-resume -librt-shared-only-routines += rt-aeabi_unwind_cpp_pr1 rt-arm-unwind-resume -endif - -ifeq ($(subdir),nptl) -libpthread-sysdep_routines += pt-arm-unwind-resume -libpthread-shared-only-routines += pt-arm-unwind-resume -endif diff --git a/sysdeps/arm/Versions b/sysdeps/arm/Versions deleted file mode 100644 index f26a1a7606..0000000000 --- a/sysdeps/arm/Versions +++ /dev/null @@ -1,24 +0,0 @@ -libc { - GLIBC_2.4 { - # ARM EABI compatibility routines - __aeabi_assert; - __aeabi_atexit; - __aeabi_errno_addr; - __aeabi_localeconv; - __aeabi_MB_CUR_MAX; - __aeabi_memclr; __aeabi_memclr4; __aeabi_memclr8; - __aeabi_memcpy; __aeabi_memcpy4; __aeabi_memcpy8; - __aeabi_memmove; __aeabi_memmove4; __aeabi_memmove8; - __aeabi_memset; __aeabi_memset4; __aeabi_memset8; - - # Helper routines - __gnu_Unwind_Find_exidx; - } - GLIBC_2.8 { - __gnu_mcount_nc; - } - GLIBC_2.19 { - # This set has to exist in some Versions file so we can use 2.19 in - # SHLIB_COMPAT. Since it didn't exist anywhere else, we add it here. - } -} diff --git a/sysdeps/arm/__longjmp.S b/sysdeps/arm/__longjmp.S deleted file mode 100644 index 5202c728bc..0000000000 --- a/sysdeps/arm/__longjmp.S +++ /dev/null @@ -1,121 +0,0 @@ -/* longjmp for ARM. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -/* __longjmp(jmpbuf, val) */ - -ENTRY (__longjmp) - mov ip, r0 - -#ifdef CHECK_SP - ldr r4, [ip] /* jmpbuf's sp */ - cfi_undefined (r4) -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (r4, r4, a3, a4) -#endif - CHECK_SP (r4) -#endif - -#ifdef PTR_DEMANGLE - ldr a4, [ip], #4 - PTR_DEMANGLE (a4, a4, a3, r4) - cfi_undefined (r4) - ldr r4, [ip], #4 - PTR_DEMANGLE2 (r4, r4, a3) -#else - ldr a4, [ip], #4 - ldr r4, [ip], #4 - cfi_undefined (r4) -#endif - /* longjmp probe expects longjmp first argument (4@r0), second - argument (-4@r1), and target address (4@r4), respectively. */ - LIBC_PROBE (longjmp, 3, 4@r0, -4@r1, 4@r4) - mov sp, a4 - mov lr, r4 - ldmia ip!, JMP_BUF_REGLIST - cfi_restore (v1) - cfi_restore (v2) - cfi_restore (v3) - cfi_restore (v4) - cfi_restore (v5) - cfi_restore (v6) - cfi_restore (sl) - cfi_restore (fp) - cfi_restore (sp) - cfi_restore (lr) - -#if !defined ARM_ASSUME_NO_IWMMXT || defined __SOFTFP__ -# define NEED_HWCAP 1 -#endif - -#ifdef NEED_HWCAP -# if IS_IN (rtld) - LDST_PCREL (ldr, a4, a3, \ - C_SYMBOL_NAME(_rtld_local_ro) \ - + RTLD_GLOBAL_RO_DL_HWCAP_OFFSET) -# else -# ifdef SHARED - LDR_GLOBAL (a4, a3, C_SYMBOL_NAME(_rtld_global_ro), \ - RTLD_GLOBAL_RO_DL_HWCAP_OFFSET) -# else - LDR_GLOBAL (a4, a3, C_SYMBOL_NAME(_dl_hwcap), 0) -# endif -# endif -#endif - -#ifdef __SOFTFP__ - tst a4, #HWCAP_ARM_VFP - beq .Lno_vfp -#endif - - /* Restore the VFP registers. */ - /* Following instruction is vldmia ip!, {d8-d15}. */ - ldc p11, cr8, [r12], #64 -.Lno_vfp: - -#ifndef ARM_ASSUME_NO_IWMMXT - tst a4, #HWCAP_ARM_IWMMXT - beq .Lno_iwmmxt - - /* Restore the call-preserved iWMMXt registers. */ - /* Following instructions are wldrd wr10, [ip], #8 (etc.) */ - ldcl p1, cr10, [r12], #8 - ldcl p1, cr11, [r12], #8 - ldcl p1, cr12, [r12], #8 - ldcl p1, cr13, [r12], #8 - ldcl p1, cr14, [r12], #8 - ldcl p1, cr15, [r12], #8 -.Lno_iwmmxt: -#endif - - /* longjmp_target probe expects longjmp first argument (4@r0), second - argument (-4@r1), and target address (4@r14), respectively. */ - LIBC_PROBE (longjmp_target, 3, 4@r0, -4@r1, 4@r14) - - movs r0, r1 /* get the return value in place */ - it eq - moveq r0, #1 /* can't let setjmp() return zero! */ - - DO_RET(lr) - -END (__longjmp) diff --git a/sysdeps/arm/abi-note.S b/sysdeps/arm/abi-note.S deleted file mode 100644 index 07bd4c4619..0000000000 --- a/sysdeps/arm/abi-note.S +++ /dev/null @@ -1,8 +0,0 @@ -/* Tag_ABI_align8_preserved: This code preserves 8-byte - alignment in any callee. */ - .eabi_attribute 25, 1 -/* Tag_ABI_align8_needed: This code may require 8-byte alignment from - the caller. */ - .eabi_attribute 24, 1 - -#include diff --git a/sysdeps/arm/add_n.S b/sysdeps/arm/add_n.S deleted file mode 100644 index 811a769959..0000000000 --- a/sysdeps/arm/add_n.S +++ /dev/null @@ -1,90 +0,0 @@ -/* mpn_add_n -- add (or subtract) bignums. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - .syntax unified - .text - -#ifdef USE_AS_SUB_N -# define INITC cmp r0, r0 -# define OPC sbcs -# define RETC sbc r0, r0, r0; neg r0, r0 -# define FUNC __mpn_sub_n -#else -# define INITC cmn r0, #0 -# define OPC adcs -# define RETC mov r0, #0; adc r0, r0, r0 -# define FUNC __mpn_add_n -#endif - -/* mp_limb_t mpn_add_n(res_ptr, src1_ptr, src2_ptr, size) */ - -ENTRY (FUNC) - push { r4, r5, r6, r7, r8, r10, lr } - cfi_adjust_cfa_offset (28) - cfi_rel_offset (r4, 0) - cfi_rel_offset (r5, 4) - cfi_rel_offset (r6, 8) - cfi_rel_offset (r7, 12) - cfi_rel_offset (r8, 16) - cfi_rel_offset (r10, 20) - cfi_rel_offset (lr, 24) - - INITC /* initialize carry flag */ - tst r3, #1 /* count & 1 == 1? */ - add lr, r1, r3, lsl #2 /* compute end src1 */ - beq 1f - - ldr r4, [r1], #4 /* do one to make count even */ - ldr r5, [r2], #4 - OPC r4, r4, r5 - teq r1, lr /* end of count? (preserve carry) */ - str r4, [r0], #4 - beq 9f -1: - tst r3, #2 /* count & 2 == 2? */ - beq 2f - ldm r1!, { r4, r5 } /* do two to make count 0 mod 4 */ - ldm r2!, { r6, r7 } - OPC r4, r4, r6 - OPC r5, r5, r7 - teq r1, lr /* end of count? */ - stm r0!, { r4, r5 } - beq 9f -2: - ldm r1!, { r3, r5, r7, r10 } /* do four each loop */ - ldm r2!, { r4, r6, r8, ip } - OPC r3, r3, r4 - OPC r5, r5, r6 - OPC r7, r7, r8 - OPC r10, r10, ip - teq r1, lr - stm r0!, { r3, r5, r7, r10 } - bne 2b - -9: - RETC /* copy carry out */ -#ifndef ARM_ALWAYS_BX - pop { r4, r5, r6, r7, r8, r10, pc } -#else - pop { r4, r5, r6, r7, r8, r10, lr } - bx lr -#endif -END (FUNC) diff --git a/sysdeps/arm/addmul_1.S b/sysdeps/arm/addmul_1.S deleted file mode 100644 index c4e54f8723..0000000000 --- a/sysdeps/arm/addmul_1.S +++ /dev/null @@ -1,67 +0,0 @@ -/* mpn_addmul_1 -- multiply and accumulate bignums. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .syntax unified - .text - -@ cycles/limb -@ StrongArm ? -@ Cortex-A8 ? -@ Cortex-A9 ? -@ Cortex-A15 4 - -/* mp_limb_t mpn_addmul_1(res_ptr, src1_ptr, size, s2_limb) */ - -ENTRY (__mpn_addmul_1) - push { r4, r5, r6, r7 } - cfi_adjust_cfa_offset (16) - cfi_rel_offset (r4, 0) - cfi_rel_offset (r5, 4) - cfi_rel_offset (r6, 8) - cfi_rel_offset (r7, 12) - - ldr r6, [r1], #4 - ldr r5, [r0] - mov r4, #0 /* init carry in */ - b 1f -0: - ldr r6, [r1], #4 /* load next ul */ - adds r7, r4, r5 /* (out, c) = cl + lpl */ - ldr r5, [r0, #4] /* load next rl */ - adc r4, ip, #0 /* cl = hpl + c */ - str r7, [r0], #4 -1: - mov ip, #0 /* zero-extend rl */ - umlal r5, ip, r6, r3 /* (hpl, lpl) = ul * vl + rl */ - subs r2, r2, #1 - bne 0b - - adds r4, r4, r5 /* (out, c) = cl + llpl */ - str r4, [r0] - adc r0, ip, #0 /* return hpl + c */ - - pop { r4, r5, r6, r7 } - cfi_adjust_cfa_offset (-16) - cfi_restore (r4) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - DO_RET (lr) -END (__mpn_addmul_1) diff --git a/sysdeps/arm/aeabi_assert.c b/sysdeps/arm/aeabi_assert.c deleted file mode 100644 index 1cb710da8f..0000000000 --- a/sysdeps/arm/aeabi_assert.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -void -__aeabi_assert (const char *assertion, const char *file, - unsigned int line) -{ - __assert_fail (assertion, file, line, NULL); -} diff --git a/sysdeps/arm/aeabi_atexit.c b/sysdeps/arm/aeabi_atexit.c deleted file mode 100644 index 28fcee2d66..0000000000 --- a/sysdeps/arm/aeabi_atexit.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Register a function to be called by exit or when a shared library - is unloaded. This routine is like __cxa_atexit, but uses the - calling sequence required by the ARM EABI. */ -int -__aeabi_atexit (void *arg, void (*func) (void *), void *d) -{ - return __cxa_atexit (func, arg, d); -} diff --git a/sysdeps/arm/aeabi_errno_addr.c b/sysdeps/arm/aeabi_errno_addr.c deleted file mode 100644 index 6d3a1cd233..0000000000 --- a/sysdeps/arm/aeabi_errno_addr.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -volatile int * -__aeabi_errno_addr (void) -{ - return &errno; -} diff --git a/sysdeps/arm/aeabi_lcsts.c b/sysdeps/arm/aeabi_lcsts.c deleted file mode 100644 index 971ed26cdc..0000000000 --- a/sysdeps/arm/aeabi_lcsts.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Link-time constants for ARM EABI. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* The ARM EABI requires that we provide ISO compile-time constants as - link-time constants. Some portable applications may reference these. */ - -#include -#include -#include -#include -#include -#include -#include - -#define eabi_constant2(X,Y) const int __aeabi_##X attribute_hidden = Y -#define eabi_constant(X) const int __aeabi_##X attribute_hidden = X - -eabi_constant (EDOM); -eabi_constant (ERANGE); -eabi_constant (EILSEQ); - -eabi_constant (MB_LEN_MAX); - -eabi_constant (LC_COLLATE); -eabi_constant (LC_CTYPE); -eabi_constant (LC_MONETARY); -eabi_constant (LC_NUMERIC); -eabi_constant (LC_TIME); -eabi_constant (LC_ALL); - -/* The value of __aeabi_JMP_BUF_SIZE is the number of doublewords in a - jmp_buf. */ -eabi_constant2 (JMP_BUF_SIZE, sizeof (jmp_buf) / 8); - -eabi_constant (SIGABRT); -eabi_constant (SIGFPE); -eabi_constant (SIGILL); -eabi_constant (SIGINT); -eabi_constant (SIGSEGV); -eabi_constant (SIGTERM); - -eabi_constant2 (IOFBF, _IOFBF); -eabi_constant2 (IOLBF, _IOLBF); -eabi_constant2 (IONBF, _IONBF); -eabi_constant (BUFSIZ); -eabi_constant (FOPEN_MAX); -eabi_constant (TMP_MAX); -eabi_constant (FILENAME_MAX); -eabi_constant (L_tmpnam); - -FILE *__aeabi_stdin attribute_hidden; -FILE *__aeabi_stdout attribute_hidden; -FILE *__aeabi_stderr attribute_hidden; - -static void __attribute__ ((used)) -setup_aeabi_stdio (void) -{ - __aeabi_stdin = stdin; - __aeabi_stdout = stdout; - __aeabi_stderr = stderr; -} - -static void (*fp) (void) __attribute__ ((used, section (".preinit_array"))) - = setup_aeabi_stdio; - -eabi_constant (CLOCKS_PER_SEC); diff --git a/sysdeps/arm/aeabi_localeconv.c b/sysdeps/arm/aeabi_localeconv.c deleted file mode 100644 index 4c410ab35c..0000000000 --- a/sysdeps/arm/aeabi_localeconv.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -struct lconv * -__aeabi_localeconv (void) -{ - return __localeconv (); -} diff --git a/sysdeps/arm/aeabi_math.c b/sysdeps/arm/aeabi_math.c deleted file mode 100644 index f516672057..0000000000 --- a/sysdeps/arm/aeabi_math.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -const double __aeabi_HUGE_VAL attribute_hidden = HUGE_VAL; -const long double __aeabi_HUGE_VALL attribute_hidden = HUGE_VALL; -const float __aeabi_HUGE_VALF attribute_hidden = HUGE_VALF; -const float __aeabi_INFINITY attribute_hidden = INFINITY; -const float __aeabi_NAN attribute_hidden = NAN; diff --git a/sysdeps/arm/aeabi_mb_cur_max.c b/sysdeps/arm/aeabi_mb_cur_max.c deleted file mode 100644 index dab1d6d974..0000000000 --- a/sysdeps/arm/aeabi_mb_cur_max.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -int -__aeabi_MB_CUR_MAX (void) -{ - return MB_CUR_MAX; -} diff --git a/sysdeps/arm/aeabi_memclr.c b/sysdeps/arm/aeabi_memclr.c deleted file mode 100644 index 6687e49c9e..0000000000 --- a/sysdeps/arm/aeabi_memclr.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Clear memory. Can't alias to bzero because it's not defined in the - same translation unit. */ -void -__aeabi_memclr (void *dest, size_t n) -{ - __bzero (dest, n); -} - -/* Versions of the above which may assume memory alignment. */ -strong_alias (__aeabi_memclr, __aeabi_memclr4) -strong_alias (__aeabi_memclr, __aeabi_memclr8) diff --git a/sysdeps/arm/aeabi_memcpy.c b/sysdeps/arm/aeabi_memcpy.c deleted file mode 100644 index 0820084f00..0000000000 --- a/sysdeps/arm/aeabi_memcpy.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Copy memory like memcpy, but no return value required. Can't alias - to memcpy because it's not defined in the same translation - unit. */ -void -__aeabi_memcpy (void *dest, const void *src, size_t n) -{ - memcpy (dest, src, n); -} - -/* Versions of the above which may assume memory alignment. */ -strong_alias (__aeabi_memcpy, __aeabi_memcpy4) -strong_alias (__aeabi_memcpy, __aeabi_memcpy8) diff --git a/sysdeps/arm/aeabi_memmove.c b/sysdeps/arm/aeabi_memmove.c deleted file mode 100644 index 4166f84612..0000000000 --- a/sysdeps/arm/aeabi_memmove.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Copy memory like memmove, but no return value required. Can't - alias to memmove because it's not defined in the same translation - unit. */ -void -__aeabi_memmove (void *dest, const void *src, size_t n) -{ - memmove (dest, src, n); -} - -/* Versions of the above which may assume memory alignment. */ -strong_alias (__aeabi_memmove, __aeabi_memmove4) -strong_alias (__aeabi_memmove, __aeabi_memmove8) diff --git a/sysdeps/arm/aeabi_memset.c b/sysdeps/arm/aeabi_memset.c deleted file mode 100644 index 84977c2da0..0000000000 --- a/sysdeps/arm/aeabi_memset.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Set memory like memset, but different argument order and no return - value required. */ -void -__aeabi_memset (void *dest, size_t n, int c) -{ - memset (dest, c, n); -} - -/* Versions of the above which may assume memory alignment. */ -strong_alias (__aeabi_memset, __aeabi_memset4) -strong_alias (__aeabi_memset, __aeabi_memset8) diff --git a/sysdeps/arm/aeabi_sighandlers.S b/sysdeps/arm/aeabi_sighandlers.S deleted file mode 100644 index 895edbd5a1..0000000000 --- a/sysdeps/arm/aeabi_sighandlers.S +++ /dev/null @@ -1,53 +0,0 @@ -/* Link-time constants for ARM EABI - signal handlers. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* The ARM EABI defines these as "functions". */ - -#include - - .global __aeabi_SIG_DFL - .hidden __aeabi_SIG_DFL - .type __aeabi_SIG_DFL, %function - .set __aeabi_SIG_DFL, 0 - - .global __aeabi_SIG_IGN - .hidden __aeabi_SIG_IGN - .type __aeabi_SIG_IGN, %function - .set __aeabi_SIG_IGN, 1 - - .global __aeabi_SIG_ERR - .hidden __aeabi_SIG_ERR - .type __aeabi_SIG_ERR, %function - .set __aeabi_SIG_ERR, -1 diff --git a/sysdeps/arm/aeabi_unwind_cpp_pr1.c b/sysdeps/arm/aeabi_unwind_cpp_pr1.c deleted file mode 100644 index dcef8aa480..0000000000 --- a/sysdeps/arm/aeabi_unwind_cpp_pr1.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Because some objects in ld.so and libc.so are built with - -fexceptions, we end up with references to this personality - routine. However, these libraries are not linked against - libgcc_eh.a, so we need a dummy definition. This routine will - never actually be called. */ - -#include - -attribute_hidden -void -__aeabi_unwind_cpp_pr0 (void) -{ -#if !IS_IN (rtld) - abort (); -#endif -} - -attribute_hidden -void -__aeabi_unwind_cpp_pr1 (void) -{ -#if !IS_IN (rtld) - abort (); -#endif -} - -attribute_hidden -void -__aeabi_unwind_cpp_pr2 (void) -{ -#if !IS_IN (rtld) - abort (); -#endif -} diff --git a/sysdeps/arm/arm-features.h b/sysdeps/arm/arm-features.h deleted file mode 100644 index 400af0f75a..0000000000 --- a/sysdeps/arm/arm-features.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Macros to test for CPU features on ARM. Generic ARM version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _ARM_ARM_FEATURES_H -#define _ARM_ARM_FEATURES_H 1 - -/* An OS-specific arm-features.h file should define ARM_HAVE_VFP to - an appropriate expression for testing at runtime whether the VFP - hardware is present. We'll then redefine it to a constant if we - know at compile time that we can assume VFP. */ - -#ifndef __SOFTFP__ -/* The compiler is generating VFP instructions, so we're already - assuming the hardware exists. */ -# undef ARM_HAVE_VFP -# define ARM_HAVE_VFP 1 -#endif - -/* An OS-specific arm-features.h file may define ARM_ASSUME_NO_IWMMXT - to indicate at compile time that iWMMXt hardware is never present - at runtime (or that we never care about its state) and so need not - be checked for. */ - -/* A more-specific arm-features.h file may define ARM_ALWAYS_BX to indicate - that instructions using pc as a destination register must never be used, - so a "bx" (or "blx") instruction is always required. */ - -/* The log2 of the minimum alignment required for an address that - is the target of a computed branch (i.e. a "bx" instruction). - A more-specific arm-features.h file may define this to set a more - stringent requirement. - - Using this only makes sense for code in ARM mode (where instructions - always have a fixed size of four bytes), or for Thumb-mode code that is - specifically aligning all the related branch targets to match (since - Thumb instructions might be either two or four bytes). */ -#ifndef ARM_BX_ALIGN_LOG2 -# define ARM_BX_ALIGN_LOG2 2 -#endif - -/* An OS-specific arm-features.h file may define ARM_NO_INDEX_REGISTER to - indicate that the two-register addressing modes must never be used. */ - -#endif /* arm-features.h */ diff --git a/sysdeps/arm/arm-mcount.S b/sysdeps/arm/arm-mcount.S deleted file mode 100644 index df2601b4a6..0000000000 --- a/sysdeps/arm/arm-mcount.S +++ /dev/null @@ -1,128 +0,0 @@ -/* Implementation of profiling support. ARM EABI version. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Don't call mcount when calling mcount... */ -#undef PROF - -#include - -#undef mcount - -#ifdef __thumb2__ - .thumb -#endif - .syntax unified - - -/* Use an assembly stub with a special ABI. The calling lr has been - pushed to the stack (which will be misaligned). We should preserve - all registers except ip and pop a word off the stack. - - NOTE: This assumes mcount_internal does not clobber any non-core - (coprocessor) registers. Currently this is true, but may require - additional attention in the future. - - The calling sequence looks something like: -func: - push {lr} - bl __gnu_mcount_nc - -*/ - -ENTRY(__gnu_mcount_nc) - push {r0, r1, r2, r3, lr} - cfi_adjust_cfa_offset (20) - cfi_rel_offset (r0, 0) - cfi_rel_offset (r1, 4) - cfi_rel_offset (r2, 8) - cfi_rel_offset (r3, 12) - cfi_rel_offset (lr, 16) - bic r1, lr, #1 - ldr r0, [sp, #20] - bl __mcount_internal - pop {r0, r1, r2, r3, ip, lr} - cfi_adjust_cfa_offset (-24) - cfi_restore (r0) - cfi_restore (r1) - cfi_restore (r2) - cfi_restore (r3) - cfi_register (lr, ip) - bx ip -END(__gnu_mcount_nc) - - -#include -#include - -/* The new __gnu_mcount_nc entry point was introduced in 4.4, so the - static library needs the old one only to support older compilers. - Even in a configuration that only cares about newer compilers, the - shared library might need it only for strict ABI compatibility. */ - -#if GCC_COMPAT (4, 3) || SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) - -/* Provide old mcount for backwards compatibility. This requires - code be compiled with APCS frame pointers. */ - -ENTRY(__mcount_arm_compat) - push {r0, r1, r2, r3, fp, lr} - cfi_adjust_cfa_offset (24) - cfi_rel_offset (r0, 0) - cfi_rel_offset (r1, 4) - cfi_rel_offset (r2, 8) - cfi_rel_offset (r3, 12) - cfi_rel_offset (fp, 16) - cfi_rel_offset (lr, 20) - movs r0, fp - ittt ne - ldrne r0, [r0, #-4] - movsne r1, lr - blne __mcount_internal -# if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__) - pop {r0, r1, r2, r3, fp, lr} - cfi_adjust_cfa_offset (-24) - cfi_restore (r0) - cfi_restore (r1) - cfi_restore (r2) - cfi_restore (r3) - cfi_restore (fp) - cfi_restore (lr) - bx lr -# else - pop {r0, r1, r2, r3, fp, pc} -# endif -END(__mcount_arm_compat) - -#endif - -#if GCC_COMPAT (4, 3) - -strong_alias (__mcount_arm_compat, _mcount) - -/* The canonical name for the function is `_mcount' in both C and asm, - but some old asm code might assume it's `mcount'. */ -weak_alias (_mcount, mcount) - -#elif SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19) - -compat_symbol (libc, __mcount_arm_compat, _mcount, GLIBC_2_0) - -strong_alias (__mcount_arm_compat, __mcount_arm_compat_1) -compat_symbol (libc, __mcount_arm_compat_1, mcount, GLIBC_2_0) - -#endif diff --git a/sysdeps/arm/arm-unwind-resume.S b/sysdeps/arm/arm-unwind-resume.S deleted file mode 100644 index 990ff960e3..0000000000 --- a/sysdeps/arm/arm-unwind-resume.S +++ /dev/null @@ -1,46 +0,0 @@ -/* _Unwind_Resume wrapper for ARM EABI. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* This is just implementing exactly what the C version does. - We do it in assembly just to ensure that we get an unmolested tail - call to the libgcc function, which is necessary for the ARM unwinder. */ - -ENTRY (_Unwind_Resume) - LDR_HIDDEN (ip, ip, __libgcc_s_resume, 0) - cmp ip, #0 - beq 1f -0: PTR_DEMANGLE (ip, ip, r2, r3) - bx ip - - /* We need to save and restore LR (for our own return address) - and R0 (for the argument to _Unwind_Resume) around the call. */ -1: push {r0, lr} - cfi_adjust_cfa_offset (8) - cfi_rel_offset (r0, 0) - cfi_rel_offset (lr, 4) - bl __libgcc_s_init - pop {r0, lr} - cfi_adjust_cfa_offset (-8) - cfi_restore (r0) - cfi_restore (lr) - - LDR_HIDDEN (ip, ip, __libgcc_s_resume, 0) - b 0b -END (_Unwind_Resume) diff --git a/sysdeps/arm/armv6/rawmemchr.S b/sysdeps/arm/armv6/rawmemchr.S deleted file mode 100644 index 2511f105bd..0000000000 --- a/sysdeps/arm/armv6/rawmemchr.S +++ /dev/null @@ -1,105 +0,0 @@ -/* rawmemchr -- find a byte within an unsized memory block. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .syntax unified - .text - -ENTRY (__rawmemchr) - @ r0 = start of string - @ r1 = character to match - @ returns a pointer to the match, which must be present. - ldrb r2, [r0] @ load first byte asap - - @ To cater to long strings, we want to search through a few - @ characters until we reach an aligned pointer. To cater to - @ small strings, we don't want to start doing word operations - @ immediately. The compromise is a maximum of 16 bytes less - @ whatever is required to end with an aligned pointer. - @ r3 = number of characters to search in alignment loop - and r3, r0, #7 - uxtb r1, r1 - rsb r3, r3, #15 @ 16 - 1 peeled loop iteration - cmp r2, r1 - it eq - bxeq lr - - @ Loop until we find ... -1: ldrb r2, [r0, #1]! - subs r3, r3, #1 @ ... the alignment point - it ne - cmpne r2, r1 @ ... or C - bne 1b - - @ Disambiguate the exit possibilites above - cmp r2, r1 @ Found C - it eq - bxeq lr - add r0, r0, #1 - - @ So now we're aligned. - ldrd r2, r3, [r0], #8 - orr r1, r1, r1, lsl #8 @ Replicate C to all bytes -#ifdef ARCH_HAS_T2 - movw ip, #0x0101 - pld [r0, #64] - movt ip, #0x0101 -#else - ldr ip, =0x01010101 - pld [r0, #64] -#endif - orr r1, r1, r1, lsl #16 - - @ Loop searching for C, 8 bytes at a time. - @ Subtracting (unsigned saturating) from 1 means result of 1 for - @ any byte that was originally zero and 0 otherwise. Therefore - @ we consider the lsb of each byte the "found" bit. -2: eor r2, r2, r1 @ Convert C bytes to 0 - eor r3, r3, r1 - uqsub8 r2, ip, r2 @ Find C - uqsub8 r3, ip, r3 - pld [r0, #128] - orrs r3, r3, r2 @ Test both words for found - it eq - ldrdeq r2, r3, [r0], #8 - beq 2b - - @ Found something. Disambiguate between first and second words. - @ Adjust r0 to point to the word containing the match. - @ Adjust r2 to the found bits for the word containing the match. - cmp r2, #0 - sub r0, r0, #4 - ite eq - moveq r2, r3 - subne r0, r0, #4 - - @ Find the bit-offset of the match within the word. Note that the - @ bit result from clz will be 7 higher than "true", but we'll - @ immediately discard those bits converting to a byte offset. -#ifdef __ARMEL__ - rev r2, r2 @ For LE, count from the little end -#endif - clz r2, r2 - add r0, r0, r2, lsr #3 @ Adjust the pointer to the found byte - bx lr - -END (__rawmemchr) - -weak_alias (__rawmemchr, rawmemchr) -libc_hidden_def (__rawmemchr) diff --git a/sysdeps/arm/armv6/stpcpy.S b/sysdeps/arm/armv6/stpcpy.S deleted file mode 100644 index 21a4f385be..0000000000 --- a/sysdeps/arm/armv6/stpcpy.S +++ /dev/null @@ -1 +0,0 @@ -/* Defined in strcpy.S. */ diff --git a/sysdeps/arm/armv6/strchr.S b/sysdeps/arm/armv6/strchr.S deleted file mode 100644 index bfd0a6b237..0000000000 --- a/sysdeps/arm/armv6/strchr.S +++ /dev/null @@ -1,143 +0,0 @@ -/* strchr -- find the first instance of C in a nul-terminated string. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .syntax unified - .text - -ENTRY (strchr) - @ r0 = start of string - @ r1 = character to match - @ returns NULL for no match, or a pointer to the match - ldrb r2, [r0] @ load the first byte asap - uxtb r1, r1 - - @ To cater to long strings, we want to search through a few - @ characters until we reach an aligned pointer. To cater to - @ small strings, we don't want to start doing word operations - @ immediately. The compromise is a maximum of 16 bytes less - @ whatever is required to end with an aligned pointer. - @ r3 = number of characters to search in alignment loop - and r3, r0, #7 - rsb r3, r3, #15 @ 16 - 1 peeled loop iteration - cmp r2, r1 @ Found C? - it ne - cmpne r2, #0 @ Found EOS? - beq 99f - - @ Loop until we find ... -1: ldrb r2, [r0, #1]! - subs r3, r3, #1 @ ... the aligment point - it ne - cmpne r2, r1 @ ... or the character - it ne - cmpne r2, #0 @ ... or EOS - bne 1b - - @ Disambiguate the exit possibilites above - cmp r2, r1 @ Found the character - it ne - cmpne r2, #0 @ Found EOS - beq 99f - add r0, r0, #1 - - @ So now we're aligned. Now we actually need a stack frame. - push { r4, r5, r6, r7 } - cfi_adjust_cfa_offset (16) - cfi_rel_offset (r4, 0) - cfi_rel_offset (r5, 4) - cfi_rel_offset (r6, 8) - cfi_rel_offset (r7, 12) - - ldrd r2, r3, [r0], #8 - orr r1, r1, r1, lsl #8 @ Replicate C to all bytes -#ifdef ARCH_HAS_T2 - movw ip, #0x0101 - pld [r0, #64] - movt ip, #0x0101 -#else - ldr ip, =0x01010101 - pld [r0, #64] -#endif - orr r1, r1, r1, lsl #16 - - @ Loop searching for EOS or C, 8 bytes at a time. -2: - @ Subtracting (unsigned saturating) from 1 means result of 1 for - @ any byte that was originally zero and 0 otherwise. Therefore - @ we consider the lsb of each byte the "found" bit. - uqsub8 r4, ip, r2 @ Find EOS - eor r6, r2, r1 @ Convert C bytes to 0 - uqsub8 r5, ip, r3 - eor r7, r3, r1 - uqsub8 r6, ip, r6 @ Find C - pld [r0, #128] @ Prefetch 2 lines ahead - uqsub8 r7, ip, r7 - orr r4, r4, r6 @ Combine found for EOS and C - orr r5, r5, r7 - orrs r6, r4, r5 @ Combine the two words - it eq - ldrdeq r2, r3, [r0], #8 - beq 2b - - @ Found something. Disambiguate between first and second words. - @ Adjust r0 to point to the word containing the match. - @ Adjust r2 to the contents of the word containing the match. - @ Adjust r4 to the found bits for the word containing the match. - cmp r4, #0 - sub r0, r0, #4 - itte eq - moveq r4, r5 - moveq r2, r3 - subne r0, r0, #4 - - @ Find the bit-offset of the match within the word. -#if defined(__ARMEL__) - @ For LE, swap the found word so clz searches from the little end. - rev r4, r4 -#else - @ For BE, byte swap the word to make it easier to extract the byte. - rev r2, r2 -#endif - @ We're counting 0x01 (not 0x80), so the bit offset is 7 too high. - clz r3, r4 - sub r3, r3, #7 - lsr r2, r2, r3 @ Shift down found byte - uxtb r1, r1 @ Undo replication of C - uxtb r2, r2 @ Extract found byte - add r0, r0, r3, lsr #3 @ Adjust the pointer to the found byte - - pop { r4, r5, r6, r7 } - cfi_adjust_cfa_offset (-16) - cfi_restore (r4) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - - @ Disambiguate between EOS and C. -99: - cmp r2, r1 - it ne - movne r0, #0 @ Found EOS, return NULL - bx lr - -END (strchr) - -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/arm/armv6/strcpy.S b/sysdeps/arm/armv6/strcpy.S deleted file mode 100644 index 1b98dbce30..0000000000 --- a/sysdeps/arm/armv6/strcpy.S +++ /dev/null @@ -1,218 +0,0 @@ -/* strcpy -- copy a nul-terminated string. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Endian independent macros for shifting bytes within registers. */ -#ifdef __ARMEB__ -#define lsh_gt lsr -#define lsh_ls lsl -#else -#define lsh_gt lsl -#define lsh_ls lsr -#endif - - .syntax unified - .text - -ENTRY (__stpcpy) - @ Signal stpcpy with NULL in IP. - mov ip, #0 - b 0f -END (__stpcpy) - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) - -ENTRY (strcpy) - @ Signal strcpy with DEST in IP. - mov ip, r0 -0: - pld [r0, #0] - pld [r1, #0] - - @ To cater to long strings, we want 8 byte alignment in the source. - @ To cater to small strings, we don't want to start that right away. - @ Loop up to 16 times, less whatever it takes to reach alignment. - and r3, r1, #7 - rsb r3, r3, #16 - - @ Loop until we find ... -1: ldrb r2, [r1], #1 - subs r3, r3, #1 @ ... the alignment point - strb r2, [r0], #1 - it ne - cmpne r2, #0 @ ... or EOS - bne 1b - - @ Disambiguate the exit possibilites above - cmp r2, #0 @ Found EOS - beq .Lreturn - - @ Load the next two words asap - ldrd r2, r3, [r1], #8 - pld [r0, #64] - pld [r1, #64] - - @ For longer strings, we actaully need a stack frame. - push { r4, r5, r6, r7 } - cfi_adjust_cfa_offset (16) - cfi_rel_offset (r4, 0) - cfi_rel_offset (r5, 4) - cfi_rel_offset (r6, 8) - cfi_rel_offset (r7, 12) - - @ Subtracting (unsigned saturating) from 1 for any byte means result - @ of 1 for any byte that was originally zero and 0 otherwise. - @ Therefore we consider the lsb of each byte the "found" bit. -#ifdef ARCH_HAS_T2 - movw r7, #0x0101 - tst r0, #3 @ Test alignment of DEST - movt r7, #0x0101 -#else - ldr r7, =0x01010101 - tst r0, #3 -#endif - bne .Lunaligned - - @ So now source (r1) is aligned to 8, and dest (r0) is aligned to 4. - @ Loop, reading 8 bytes at a time, searching for EOS. - .balign 16 -2: uqsub8 r4, r7, r2 @ Find EOS - uqsub8 r5, r7, r3 - pld [r1, #128] - cmp r4, #0 @ EOS in first word? - pld [r0, #128] - bne 3f - str r2, [r0], #4 - cmp r5, #0 @ EOS in second word? - bne 4f - str r3, [r0], #4 - ldrd r2, r3, [r1], #8 - b 2b - -3: sub r1, r1, #4 @ backup to first word -4: sub r1, r1, #4 @ backup to second word - - @ ... then finish up any tail a byte at a time. - @ Note that we generally back up and re-read source bytes, - @ but we'll not re-write dest bytes. -.Lbyte_loop: - ldrb r2, [r1], #1 - cmp r2, #0 - strb r2, [r0], #1 - bne .Lbyte_loop - - pop { r4, r5, r6, r7 } - cfi_remember_state - cfi_adjust_cfa_offset (-16) - cfi_restore (r4) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - -.Lreturn: - cmp ip, #0 @ Was this strcpy or stpcpy? - ite eq - subeq r0, r0, #1 @ stpcpy: undo post-inc from store - movne r0, ip @ strcpy: return original dest - bx lr - -.Lunaligned: - cfi_restore_state - @ Here, source is aligned to 8, but the destination is not word - @ aligned. Therefore we have to shift the data in order to be - @ able to perform aligned word stores. - - @ Find out which misalignment we're dealing with. - tst r0, #1 - beq .Lunaligned2 - tst r0, #2 - bne .Lunaligned3 - @ Fallthru to .Lunaligned1. - -.macro unaligned_copy unalign - @ Prologue to unaligned loop. Seed shifted non-zero bytes. - uqsub8 r4, r7, r2 @ Find EOS - uqsub8 r5, r7, r3 - cmp r4, #0 @ EOS in first word? - it ne - subne r1, r1, #8 - bne .Lbyte_loop -#ifdef __ARMEB__ - rev r2, r2 @ Byte stores below need LE data -#endif - @ Store a few bytes from the first word. - @ At the same time we align r0 and shift out bytes from r2. -.rept 4-\unalign - strb r2, [r0], #1 - lsr r2, r2, #8 -.endr -#ifdef __ARMEB__ - rev r2, r2 @ Undo previous rev -#endif - @ Rotated unaligned copy loop. The tail of the prologue is - @ shared with the loop itself. - .balign 8 -1: cmp r5, #0 @ EOS in second word? - bne 4f - @ Combine first and second words - orr r2, r2, r3, lsh_gt #(\unalign*8) - @ Save leftover bytes from the two words - lsh_ls r6, r3, #((4-\unalign)*8) - str r2, [r0], #4 - @ The "real" start of the unaligned copy loop. - ldrd r2, r3, [r1], #8 @ Load 8 more bytes - uqsub8 r4, r7, r2 @ Find EOS - pld [r1, #128] - uqsub8 r5, r7, r3 - pld [r0, #128] - cmp r4, #0 @ EOS in first word? - bne 3f - @ Combine the leftover and the first word - orr r6, r6, r2, lsh_gt #(\unalign*8) - @ Discard used bytes from the first word. - lsh_ls r2, r2, #((4-\unalign)*8) - str r6, [r0], #4 - b 1b - @ Found EOS in one of the words; adjust backward -3: sub r1, r1, #4 - mov r2, r6 -4: sub r1, r1, #4 - @ And store the remaining bytes from the leftover -#ifdef __ARMEB__ - rev r2, r2 -#endif -.rept \unalign - strb r2, [r0], #1 - lsr r2, r2, #8 -.endr - b .Lbyte_loop -.endm - -.Lunaligned1: - unaligned_copy 1 -.Lunaligned2: - unaligned_copy 2 -.Lunaligned3: - unaligned_copy 3 - -END (strcpy) - -libc_hidden_builtin_def (strcpy) diff --git a/sysdeps/arm/armv6/strlen.S b/sysdeps/arm/armv6/strlen.S deleted file mode 100644 index 64a971f2de..0000000000 --- a/sysdeps/arm/armv6/strlen.S +++ /dev/null @@ -1,99 +0,0 @@ -/* strlen -- find the length of a nul-terminated string. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .syntax unified - .text - -ENTRY (strlen) - @ r0 = start of string - ldrb r2, [r0] @ load the first byte asap - - @ To cater to long strings, we want to search through a few - @ characters until we reach an aligned pointer. To cater to - @ small strings, we don't want to start doing word operations - @ immediately. The compromise is a maximum of 16 bytes less - @ whatever is required to end with an aligned pointer. - @ r3 = number of characters to search in alignment loop - and r3, r0, #7 - mov r1, r0 @ Save the input pointer - rsb r3, r3, #15 @ 16 - 1 peeled loop iteration - cmp r2, #0 - beq 99f - - @ Loop until we find ... -1: ldrb r2, [r0, #1]! - subs r3, r3, #1 @ ... the aligment point - it ne - cmpne r2, #0 @ ... or EOS - bne 1b - - @ Disambiguate the exit possibilites above - cmp r2, #0 @ Found EOS - beq 99f - add r0, r0, #1 - - @ So now we're aligned. - ldrd r2, r3, [r0], #8 -#ifdef ARCH_HAS_T2 - movw ip, #0x0101 - pld [r0, #64] - movt ip, #0x0101 -#else - ldr ip, =0x01010101 - pld [r0, #64] -#endif - - @ Loop searching for EOS, 8 bytes at a time. - @ Subtracting (unsigned saturating) from 1 for any byte means that - @ we get 1 for any byte that was originally zero and 0 otherwise. - @ Therefore we consider the lsb of each byte the "found" bit. - .balign 16 -2: uqsub8 r2, ip, r2 @ Find EOS - uqsub8 r3, ip, r3 - pld [r0, #128] @ Prefetch 2 lines ahead - orrs r3, r3, r2 @ Combine the two words - it eq - ldrdeq r2, r3, [r0], #8 - beq 2b - - @ Found something. Disambiguate between first and second words. - @ Adjust r0 to point to the word containing the match. - @ Adjust r2 to the found bits for the word containing the match. - cmp r2, #0 - sub r0, r0, #4 - ite eq - moveq r2, r3 - subne r0, r0, #4 - - @ Find the bit-offset of the match within the word. Note that the - @ bit result from clz will be 7 higher than "true", but we'll - @ immediately discard those bits converting to a byte offset. -#ifdef __ARMEL__ - rev r2, r2 @ For LE, count from the little end -#endif - clz r2, r2 - add r0, r0, r2, lsr #3 @ Adjust the pointer to the found byte -99: - sub r0, r0, r1 @ Subtract input to compute length - bx lr - -END (strlen) - -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/arm/armv6/strrchr.S b/sysdeps/arm/armv6/strrchr.S deleted file mode 100644 index e6eea01816..0000000000 --- a/sysdeps/arm/armv6/strrchr.S +++ /dev/null @@ -1,129 +0,0 @@ -/* strrchr -- find the last occurence of C in a nul-terminated string - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .syntax unified - .text - -ENTRY (strrchr) - @ r0 = start of string - @ r1 = character to match - @ returns NULL for no match, or a pointer to the match - - mov r3, r0 - mov r0, #0 - uxtb r1, r1 - - @ Loop a few times until we're aligned. - tst r3, #7 - beq 2f -1: ldrb r2, [r3], #1 - cmp r2, r1 @ Find the character - it eq - subeq r0, r3, #1 - cmp r2, #0 @ Find EOS - it eq - bxeq lr - tst r3, #7 @ Find the aligment point - bne 1b - - @ So now we're aligned. Now we actually need a stack frame. -2: push { r4, r5, r6, r7 } - cfi_adjust_cfa_offset (16) - cfi_rel_offset (r4, 0) - cfi_rel_offset (r5, 4) - cfi_rel_offset (r6, 8) - cfi_rel_offset (r7, 12) - - orr r1, r1, r1, lsl #8 @ Replicate C to all bytes -#ifdef ARCH_HAS_T2 - movw ip, #0x0101 - movt ip, #0x0101 -#else - ldr ip, =0x01010101 -#endif - orr r1, r1, r1, lsl #16 - mov r2, #0 @ No found bits yet - - @ Loop searching for EOS and C, 8 bytes at a time. - @ Any time we find a match in a word, we copy the address of - @ the word to r0, and the found bits to r2. -3: ldrd r4, r5, [r3], #8 - @ Subtracting (unsigned saturating) from 1 means result of 1 for - @ any byte that was originally zero and 0 otherwise. Therefore - @ we consider the lsb of each byte the "found" bit. - uqsub8 r6, ip, r4 @ Find EOS - uqsub8 r7, ip, r5 - eor r4, r4, r1 @ Convert C bytes to 0 - eor r5, r5, r1 - uqsub8 r4, ip, r4 @ Find C - uqsub8 r5, ip, r5 - cmp r6, #0 @ Found EOS, first word - bne 4f - cmp r4, #0 @ Handle C, first word - itt ne - subne r0, r3, #8 - movne r2, r4 - cmp r7, #0 @ Found EOS, second word - bne 5f - cmp r5, #0 @ Handle C, second word - itt ne - subne r0, r3, #4 - movne r2, r5 - b 3b - - @ Found EOS in second word; fold to first word. -5: add r3, r3, #4 @ Dec pointer to 2nd word, with below - mov r4, r5 @ Overwrite first word C found - mov r6, r7 @ Overwrite first word EOS found - - @ Found EOS. Zap found C after EOS. -4: sub r3, r3, #8 @ Decrement pointer to first word -#ifdef __ARMEB__ - @ Byte swap to be congruent with LE, which is easier from here on. - rev r6, r6 @ Byte swap found EOS, - rev r4, r4 @ ... this found C - rev r2, r2 @ ... prev found C -#endif - sub r7, r6, #1 @ Toggle EOS lsb and below - eor r6, r6, r7 @ All bits below and including lsb - ands r4, r4, r6 @ Zap C above EOS - itt ne - movne r2, r4 @ Copy to result, if still non-zero - movne r0, r3 - - pop { r4, r5, r6, r7 } - cfi_adjust_cfa_offset (-16) - cfi_restore (r4) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - - @ Adjust the result pointer if we found a word containing C. - cmp r2, #0 - clz r2, r2 @ Find the bit offset of the last C - itt ne - rsbne r2, r2, #32 @ Convert to a count from the right - addne r0, r0, r2, lsr #3 @ Convert to byte offset and add. - bx lr - -END (strrchr) - -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/arm/armv6t2/Implies b/sysdeps/arm/armv6t2/Implies deleted file mode 100644 index 20a87fc8a5..0000000000 --- a/sysdeps/arm/armv6t2/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# We can do everything that 6 can -arm/armv6 diff --git a/sysdeps/arm/armv6t2/ffs.S b/sysdeps/arm/armv6t2/ffs.S deleted file mode 100644 index ed13cd97ba..0000000000 --- a/sysdeps/arm/armv6t2/ffs.S +++ /dev/null @@ -1,36 +0,0 @@ -/* ffs -- find first set bit in an int, from least significant end. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .syntax unified - .text - -ENTRY (__ffs) - cmp r0, #0 - rbit r0, r0 - itt ne - clzne r0, r0 - addne r0, r0, #1 - bx lr -END (__ffs) - -weak_alias (__ffs, ffs) -weak_alias (__ffs, ffsl) -libc_hidden_def (__ffs) -libc_hidden_builtin_def (ffs) diff --git a/sysdeps/arm/armv6t2/ffsll.S b/sysdeps/arm/armv6t2/ffsll.S deleted file mode 100644 index 2754cc70aa..0000000000 --- a/sysdeps/arm/armv6t2/ffsll.S +++ /dev/null @@ -1,50 +0,0 @@ -/* ffsll -- find first set bit in a long long, from least significant end. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .syntax unified - .text - -ENTRY (ffsll) - @ If low part is 0, operate on the high part. Ensure that the - @ word on which we operate is in r0. Set r2 to the bit offset - @ of the word being considered. Set the flags for the word - @ being operated on. -#ifdef __ARMEL__ - cmp r0, #0 - itee ne - movne r2, #0 - moveq r2, #32 - movseq r0, r1 -#else - cmp r1, #0 - ittee ne - movne r2, #0 - movne r0, r1 - moveq r2, #32 - cmpeq r0, #0 -#endif - @ Perform the ffs on r0. - rbit r0, r0 - ittt ne - clzne r0, r0 - addne r2, r2, #1 - addne r0, r0, r2 - bx lr -END (ffsll) diff --git a/sysdeps/arm/armv6t2/memchr.S b/sysdeps/arm/armv6t2/memchr.S deleted file mode 100644 index fb4dc8efa3..0000000000 --- a/sysdeps/arm/armv6t2/memchr.S +++ /dev/null @@ -1,184 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Code contributed by Dave Gilbert - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -@ This memchr routine is optimised on a Cortex-A9 and should work on all ARMv7 -@ and ARMv6T2 processors. It has a fast path for short sizes, and has an -@ optimised path for large data sets; the worst case is finding the match early -@ in a large data set. -@ Note: The use of cbz/cbnz means it's Thumb only - -@ 2011-07-15 david.gilbert@linaro.org -@ Copy from Cortex strings release 21 and change license -@ http://bazaar.launchpad.net/~linaro-toolchain-dev/cortex-strings/trunk/view/head:/src/linaro-a9/memchr.S -@ Change function declarations/entry/exit -@ 2011-12-01 david.gilbert@linaro.org -@ Add some fixes from comments received (including use of ldrd instead ldm) -@ 2011-12-07 david.gilbert@linaro.org -@ Removed cbz from align loop - can't be taken - -@ this lets us check a flag in a 00/ff byte easily in either endianness -#ifdef __ARMEB__ -#define CHARTSTMASK(c) 1<<(31-(c*8)) -#else -#define CHARTSTMASK(c) 1<<(c*8) -#endif - .syntax unified - - .text -#ifdef NO_THUMB - .arm -#else - .thumb - .thumb_func -#endif - .global memchr - .type memchr,%function -ENTRY(memchr) - @ r0 = start of memory to scan - @ r1 = character to look for - @ r2 = length - @ returns r0 = pointer to character or NULL if not found - and r1,r1,#0xff @ Don't think we can trust the caller to actually pass a char - - cmp r2,#16 @ If it's short don't bother with anything clever - blt 20f - - tst r0, #7 @ If it's already aligned skip the next bit - beq 10f - - @ Work up to an aligned point -5: - ldrb r3, [r0],#1 - subs r2, r2, #1 - cmp r3, r1 - beq 50f @ If it matches exit found - tst r0, #7 - bne 5b @ If not aligned yet then do next byte - -10: - @ At this point, we are aligned, we know we have at least 8 bytes to work with - push {r4,r5,r6,r7} - cfi_adjust_cfa_offset (16) - cfi_rel_offset (r4, 0) - cfi_rel_offset (r5, 4) - cfi_rel_offset (r6, 8) - cfi_rel_offset (r7, 12) - - cfi_remember_state - - orr r1, r1, r1, lsl #8 @ expand the match word across to all bytes - orr r1, r1, r1, lsl #16 - bic r6, r2, #7 @ Number of double words to work with * 8 - mvns r7, #0 @ all F's - movs r3, #0 - -15: - ldrd r4,r5, [r0],#8 -#ifndef NO_THUMB - subs r6, r6, #8 -#endif - eor r4,r4, r1 @ Get it so that r4,r5 have 00's where the bytes match the target - eor r5,r5, r1 - uadd8 r4, r4, r7 @ Parallel add 0xff - sets the GE bits for anything that wasn't 0 - sel r4, r3, r7 @ bytes are 00 for none-00 bytes, or ff for 00 bytes - NOTE INVERSION - uadd8 r5, r5, r7 @ Parallel add 0xff - sets the GE bits for anything that wasn't 0 - sel r5, r4, r7 @ chained....bytes are 00 for none-00 bytes, or ff for 00 bytes - NOTE INVERSION -#ifndef NO_THUMB - cbnz r5, 60f -#else - cmp r5, #0 - bne 60f - subs r6, r6, #8 -#endif - bne 15b @ (Flags from the subs above) If not run out of bytes then go around again - - pop {r4,r5,r6,r7} - cfi_adjust_cfa_offset (-16) - cfi_restore (r4) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - - and r1,r1,#0xff @ Get r1 back to a single character from the expansion above - and r2,r2,#7 @ Leave the count remaining as the number after the double words have been done - -20: -#ifndef NO_THUMB - cbz r2, 40f @ 0 length or hit the end already then not found -#else - cmp r2, #0 - beq 40f -#endif - -21: @ Post aligned section, or just a short call - ldrb r3,[r0],#1 -#ifndef NO_THUMB - subs r2,r2,#1 - eor r3,r3,r1 @ r3 = 0 if match - doesn't break flags from sub - cbz r3, 50f -#else - eors r3, r3, r1 - beq 50f - subs r2, r2, #1 -#endif - bne 21b @ on r2 flags - -40: - movs r0,#0 @ not found - DO_RET(lr) - -50: - subs r0,r0,#1 @ found - DO_RET(lr) - -60: @ We're here because the fast path found a hit - now we have to track down exactly which word it was - @ r0 points to the start of the double word after the one that was tested - @ r4 has the 00/ff pattern for the first word, r5 has the chained value - cfi_restore_state - cmp r4, #0 - itte eq - moveq r4, r5 @ the end is in the 2nd word - subeq r0,r0,#3 @ Points to 2nd byte of 2nd word - subne r0,r0,#7 @ or 2nd byte of 1st word - - @ r0 currently points to the 2nd byte of the word containing the hit - tst r4, # CHARTSTMASK(0) @ 1st character - bne 61f - adds r0,r0,#1 - tst r4, # CHARTSTMASK(1) @ 2nd character - ittt eq - addeq r0,r0,#1 - tsteq r4, # (3<<15) @ 2nd & 3rd character - @ If not the 3rd must be the last one - addeq r0,r0,#1 - -61: - pop {r4,r5,r6,r7} - cfi_adjust_cfa_offset (-16) - cfi_restore (r4) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - - subs r0,r0,#1 - DO_RET(lr) - -END(memchr) -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/arm/armv6t2/strlen.S b/sysdeps/arm/armv6t2/strlen.S deleted file mode 100644 index c72a1e73be..0000000000 --- a/sysdeps/arm/armv6t2/strlen.S +++ /dev/null @@ -1,164 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* - Assumes: - ARMv6T2, AArch32 - - */ - -#include /* This might #define NO_THUMB. */ -#include - -#ifdef __ARMEB__ -#define S2LO lsl -#define S2HI lsr -#else -#define S2LO lsr -#define S2HI lsl -#endif - -#ifndef NO_THUMB -/* This code is best on Thumb. */ - .thumb -#else -/* Using bne.w explicitly is desirable in Thumb mode because it helps - align the following label without a nop. In ARM mode there is no - such difference. */ -.macro bne.w label - bne \label -.endm - -/* This clobbers the condition codes, which the real Thumb cbnz instruction - does not do. But it doesn't matter for any of the uses here. */ -.macro cbnz reg, label - cmp \reg, #0 - bne \label -.endm -#endif - -/* Parameters and result. */ -#define srcin r0 -#define result r0 - -/* Internal variables. */ -#define src r1 -#define data1a r2 -#define data1b r3 -#define const_m1 r12 -#define const_0 r4 -#define tmp1 r4 /* Overlaps const_0 */ -#define tmp2 r5 - - .text - .p2align 6 -ENTRY(strlen) - pld [srcin, #0] - strd r4, r5, [sp, #-8]! - cfi_adjust_cfa_offset (8) - cfi_rel_offset (r4, 0) - cfi_rel_offset (r5, 4) - cfi_remember_state - bic src, srcin, #7 - mvn const_m1, #0 - ands tmp1, srcin, #7 /* (8 - bytes) to alignment. */ - pld [src, #32] - bne.w .Lmisaligned8 - mov const_0, #0 - mov result, #-8 -.Lloop_aligned: - /* Bytes 0-7. */ - ldrd data1a, data1b, [src] - pld [src, #64] - add result, result, #8 -.Lstart_realigned: - uadd8 data1a, data1a, const_m1 /* Saturating GE<0:3> set. */ - sel data1a, const_0, const_m1 /* Select based on GE<0:3>. */ - uadd8 data1b, data1b, const_m1 - sel data1b, data1a, const_m1 /* Only used if d1a == 0. */ - cbnz data1b, .Lnull_found - - /* Bytes 8-15. */ - ldrd data1a, data1b, [src, #8] - uadd8 data1a, data1a, const_m1 /* Saturating GE<0:3> set. */ - add result, result, #8 - sel data1a, const_0, const_m1 /* Select based on GE<0:3>. */ - uadd8 data1b, data1b, const_m1 - sel data1b, data1a, const_m1 /* Only used if d1a == 0. */ - cbnz data1b, .Lnull_found - - /* Bytes 16-23. */ - ldrd data1a, data1b, [src, #16] - uadd8 data1a, data1a, const_m1 /* Saturating GE<0:3> set. */ - add result, result, #8 - sel data1a, const_0, const_m1 /* Select based on GE<0:3>. */ - uadd8 data1b, data1b, const_m1 - sel data1b, data1a, const_m1 /* Only used if d1a == 0. */ - cbnz data1b, .Lnull_found - - /* Bytes 24-31. */ - ldrd data1a, data1b, [src, #24] - add src, src, #32 - uadd8 data1a, data1a, const_m1 /* Saturating GE<0:3> set. */ - add result, result, #8 - sel data1a, const_0, const_m1 /* Select based on GE<0:3>. */ - uadd8 data1b, data1b, const_m1 - sel data1b, data1a, const_m1 /* Only used if d1a == 0. */ - cmp data1b, #0 - beq .Lloop_aligned - -.Lnull_found: - cmp data1a, #0 - itt eq - addeq result, result, #4 - moveq data1a, data1b -#ifndef __ARMEB__ - rev data1a, data1a -#endif - clz data1a, data1a - ldrd r4, r5, [sp], #8 - cfi_adjust_cfa_offset (-8) - cfi_restore (r4) - cfi_restore (r5) - add result, result, data1a, lsr #3 /* Bits -> Bytes. */ - DO_RET(lr) - -.Lmisaligned8: - cfi_restore_state - ldrd data1a, data1b, [src] - and tmp2, tmp1, #3 - rsb result, tmp1, #0 - lsl tmp2, tmp2, #3 /* Bytes -> bits. */ - tst tmp1, #4 - pld [src, #64] - S2HI tmp2, const_m1, tmp2 -#ifdef NO_THUMB - mvn tmp1, tmp2 - orr data1a, data1a, tmp1 - itt ne - orrne data1b, data1b, tmp1 -#else - orn data1a, data1a, tmp2 - itt ne - ornne data1b, data1b, tmp2 -#endif - movne data1a, const_m1 - mov const_0, #0 - b .Lstart_realigned - -END(strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/arm/armv7/Implies b/sysdeps/arm/armv7/Implies deleted file mode 100644 index c6cd0eb877..0000000000 --- a/sysdeps/arm/armv7/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# We can do everything that 6T2 can -arm/armv6t2 diff --git a/sysdeps/arm/armv7/multiarch/Makefile b/sysdeps/arm/armv7/multiarch/Makefile deleted file mode 100644 index e834cc937f..0000000000 --- a/sysdeps/arm/armv7/multiarch/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),string) -sysdep_routines += memcpy_neon memcpy_vfp -endif diff --git a/sysdeps/arm/armv7/multiarch/aeabi_memcpy.c b/sysdeps/arm/armv7/multiarch/aeabi_memcpy.c deleted file mode 100644 index c6a2a98a55..0000000000 --- a/sysdeps/arm/armv7/multiarch/aeabi_memcpy.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Empty file to override sysdeps/arm version. See memcpy.S for definitions - of these functions. */ diff --git a/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c b/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c deleted file mode 100644 index b8094fd393..0000000000 --- a/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Enumerate available IFUNC implementations of a function. ARM version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Fill ARRAY of MAX elements with IFUNC implementations for function - NAME and return the number of valid entries. */ - -size_t -__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, - size_t max) -{ - size_t i = 0; - - bool use_neon = true; -#ifdef __ARM_NEON__ -# define __memcpy_neon memcpy -#else - use_neon = (GLRO(dl_hwcap) & HWCAP_ARM_NEON) != 0; -#endif - -#ifndef __ARM_NEON__ - bool use_vfp = true; -# ifdef __SOFTFP__ - use_vfp = (GLRO(dl_hwcap) & HWCAP_ARM_VFP) != 0; -# endif -#endif - - IFUNC_IMPL (i, name, memcpy, - IFUNC_IMPL_ADD (array, i, memcpy, use_neon, __memcpy_neon) -#ifndef __ARM_NEON__ - IFUNC_IMPL_ADD (array, i, memcpy, use_vfp, __memcpy_vfp) -#endif - IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_arm)); - - return i; -} diff --git a/sysdeps/arm/armv7/multiarch/memcpy.S b/sysdeps/arm/armv7/multiarch/memcpy.S deleted file mode 100644 index 8a53bdaf91..0000000000 --- a/sysdeps/arm/armv7/multiarch/memcpy.S +++ /dev/null @@ -1,76 +0,0 @@ -/* Multiple versions of memcpy - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Thumb requires excess IT instructions here. */ -#define NO_THUMB -#include -#include - -#if IS_IN (libc) -/* Under __ARM_NEON__, memcpy_neon.S defines the name memcpy. */ -# ifndef __ARM_NEON__ - .text -ENTRY(memcpy) - .type memcpy, %gnu_indirect_function -# ifdef __SOFTFP__ - ldr r1, .Lmemcpy_arm - tst r0, #HWCAP_ARM_VFP - ldrne r1, .Lmemcpy_vfp -# else - ldr r1, .Lmemcpy_vfp -# endif - tst r0, #HWCAP_ARM_NEON - ldrne r1, .Lmemcpy_neon -1: - add r0, r1, pc - DO_RET(lr) - -# ifdef __SOFTFP__ -.Lmemcpy_arm: - .long C_SYMBOL_NAME(__memcpy_arm) - 1b - PC_OFS -# endif -.Lmemcpy_neon: - .long C_SYMBOL_NAME(__memcpy_neon) - 1b - PC_OFS -.Lmemcpy_vfp: - .long C_SYMBOL_NAME(__memcpy_vfp) - 1b - PC_OFS - -END(memcpy) - -libc_hidden_builtin_def (memcpy) -#endif /* Not __ARM_NEON__. */ - -/* These versions of memcpy are defined not to clobber any VFP or NEON - registers so they must always call the ARM variant of the memcpy code. */ -strong_alias (__memcpy_arm, __aeabi_memcpy) -strong_alias (__memcpy_arm, __aeabi_memcpy4) -strong_alias (__memcpy_arm, __aeabi_memcpy8) -libc_hidden_def (__memcpy_arm) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) -#undef weak_alias -#define weak_alias(x, y) -#undef libc_hidden_def -#define libc_hidden_def(name) - -#define memcpy __memcpy_arm - -#endif - -#include "memcpy_impl.S" diff --git a/sysdeps/arm/armv7/multiarch/memcpy_impl.S b/sysdeps/arm/armv7/multiarch/memcpy_impl.S deleted file mode 100644 index c1b9fb0ab5..0000000000 --- a/sysdeps/arm/armv7/multiarch/memcpy_impl.S +++ /dev/null @@ -1,728 +0,0 @@ -/* NEON/VFP/ARM version of memcpy optimized for Cortex-A15. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . - - This memcpy routine is optimised for Cortex-A15 cores and takes advantage - of VFP or NEON when built with the appropriate flags. - - Assumptions: - - ARMv6 (ARMv7-a if using Neon) - ARM state - Unaligned accesses - - */ - -/* Thumb cannot encode negative immediate offsets in memory operations. */ -#ifndef NO_THUMB -#define NO_THUMB -#endif -#include -#include - - .syntax unified - /* This implementation requires ARM state. */ - .arm - -#ifdef MEMCPY_NEON - - .fpu neon - .arch armv7-a -# define FRAME_SIZE 4 -# define USE_VFP -# define USE_NEON - -#elif defined (MEMCPY_VFP) - - .arch armv6 - .fpu vfpv2 -# define FRAME_SIZE 32 -# define USE_VFP - -#else - .arch armv6 -# define FRAME_SIZE 32 - -#endif - -#define ALIGN(addr, align) addr:align - -#define INSN_SIZE 4 - -/* Call parameters. */ -#define dstin r0 -#define src r1 -#define count r2 - -/* Locals. */ -#define tmp1 r3 -#define dst ip -#define tmp2 r8 - -/* These two macros both work by repeated invocation of the macro - dispatch_step (not defined here). That macro performs one "step", - doing one load instruction and one store instruction to copy one - "unit". On entry, TMP1 contains the number of bytes to be copied, - a multiple of the unit size. The macro clobbers TMP1 in the - process of doing a computed jump to the tail containing the - appropriate number of steps. - - In dispatch_7_dword, dispatch_step is invoked seven times, with an - argument that is 7 for the first and 1 for the last. Units are - double-words (8 bytes). TMP1 is at most 56. - - In dispatch_15_word, dispatch_step is invoked fifteen times, - with an argument that is 15 for the first and 1 for the last. - Units are words (4 bytes). TMP1 is at most 60. */ - -#ifndef ARM_ALWAYS_BX -# if ARM_BX_ALIGN_LOG2 != 2 -# error case not handled -# endif - .macro dispatch_7_dword - rsb tmp1, tmp1, #((7 * 8) - PC_OFS + INSN_SIZE) - add pc, pc, tmp1 - dispatch_step 7 - dispatch_step 6 - dispatch_step 5 - dispatch_step 4 - dispatch_step 3 - dispatch_step 2 - dispatch_step 1 - .purgem dispatch_step - .endm - - .macro dispatch_15_word - rsb tmp1, tmp1, #((15 * 4) - PC_OFS/2 + INSN_SIZE/2) - add pc, pc, tmp1, lsl #1 - dispatch_step 15 - dispatch_step 14 - dispatch_step 13 - dispatch_step 12 - dispatch_step 11 - dispatch_step 10 - dispatch_step 9 - dispatch_step 8 - dispatch_step 7 - dispatch_step 6 - dispatch_step 5 - dispatch_step 4 - dispatch_step 3 - dispatch_step 2 - dispatch_step 1 - .purgem dispatch_step - .endm -#else -# if ARM_BX_ALIGN_LOG2 < 3 -# error case not handled -# endif - .macro dispatch_helper steps, log2_bytes_per_step - /* TMP1 gets (max_bytes - bytes_to_copy), where max_bytes is - (STEPS << LOG2_BYTES_PER_STEP). - So this is (steps_to_skip << LOG2_BYTES_PER_STEP). - Then it needs further adjustment to compensate for the - distance between the PC value taken below (0f + PC_OFS) - and the first step's instructions (1f). */ - rsb tmp1, tmp1, #((\steps << \log2_bytes_per_step) \ - + ((1f - PC_OFS - 0f) \ - >> (ARM_BX_ALIGN_LOG2 - \log2_bytes_per_step))) - /* Shifting down LOG2_BYTES_PER_STEP gives us the number of - steps to skip, then shifting up ARM_BX_ALIGN_LOG2 gives us - the (byte) distance to add to the PC. */ -0: add tmp1, pc, tmp1, lsl #(ARM_BX_ALIGN_LOG2 - \log2_bytes_per_step) - bx tmp1 - .p2align ARM_BX_ALIGN_LOG2 -1: - .endm - - .macro dispatch_7_dword - dispatch_helper 7, 3 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 7 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 6 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 5 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 4 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 3 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 2 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 1 - .p2align ARM_BX_ALIGN_LOG2 - .purgem dispatch_step - .endm - - .macro dispatch_15_word - dispatch_helper 15, 2 - dispatch_step 15 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 14 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 13 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 12 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 11 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 10 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 9 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 8 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 7 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 6 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 5 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 4 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 3 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 2 - .p2align ARM_BX_ALIGN_LOG2 - dispatch_step 1 - .p2align ARM_BX_ALIGN_LOG2 - .purgem dispatch_step - .endm - -#endif - -#ifndef USE_NEON -/* For bulk copies using GP registers. */ -#define A_l r2 /* Call-clobbered. */ -#define A_h r3 /* Call-clobbered. */ -#define B_l r4 -#define B_h r5 -#define C_l r6 -#define C_h r7 -/* Don't use the pair r8,r9 because in some EABI variants r9 is reserved. */ -#define D_l r10 -#define D_h r11 -#endif - -/* Number of lines ahead to pre-fetch data. If you change this the code - below will need adjustment to compensate. */ - -#define prefetch_lines 5 - -#ifdef USE_VFP - .macro cpy_line_vfp vreg, base - vstr \vreg, [dst, #\base] - vldr \vreg, [src, #\base] - vstr d0, [dst, #\base + 8] - vldr d0, [src, #\base + 8] - vstr d1, [dst, #\base + 16] - vldr d1, [src, #\base + 16] - vstr d2, [dst, #\base + 24] - vldr d2, [src, #\base + 24] - vstr \vreg, [dst, #\base + 32] - vldr \vreg, [src, #\base + prefetch_lines * 64 - 32] - vstr d0, [dst, #\base + 40] - vldr d0, [src, #\base + 40] - vstr d1, [dst, #\base + 48] - vldr d1, [src, #\base + 48] - vstr d2, [dst, #\base + 56] - vldr d2, [src, #\base + 56] - .endm - - .macro cpy_tail_vfp vreg, base - vstr \vreg, [dst, #\base] - vldr \vreg, [src, #\base] - vstr d0, [dst, #\base + 8] - vldr d0, [src, #\base + 8] - vstr d1, [dst, #\base + 16] - vldr d1, [src, #\base + 16] - vstr d2, [dst, #\base + 24] - vldr d2, [src, #\base + 24] - vstr \vreg, [dst, #\base + 32] - vstr d0, [dst, #\base + 40] - vldr d0, [src, #\base + 40] - vstr d1, [dst, #\base + 48] - vldr d1, [src, #\base + 48] - vstr d2, [dst, #\base + 56] - vldr d2, [src, #\base + 56] - .endm -#endif - - .p2align 6 -ENTRY(memcpy) - - mov dst, dstin /* Preserve dstin, we need to return it. */ - cmp count, #64 - bge .Lcpy_not_short - /* Deal with small copies quickly by dropping straight into the - exit block. */ - -.Ltail63unaligned: -#ifdef USE_NEON - /* These need an extra layer of macro just to work around a - bug in the assembler's parser when an operand starts with - a {...}. http://sourceware.org/bugzilla/show_bug.cgi?id=15647 - tracks that bug; it was not fixed as of binutils-2.23.2. */ - .macro neon_load_d0 reg - vld1.8 {d0}, [\reg]! - .endm - .macro neon_store_d0 reg - vst1.8 {d0}, [\reg]! - .endm - - and tmp1, count, #0x38 - .macro dispatch_step i - neon_load_d0 src - neon_store_d0 dst - .endm - dispatch_7_dword - - tst count, #4 - ldrne tmp1, [src], #4 - strne tmp1, [dst], #4 -#else - /* Copy up to 15 full words of data. May not be aligned. */ - /* Cannot use VFP for unaligned data. */ - and tmp1, count, #0x3c - add dst, dst, tmp1 - add src, src, tmp1 - /* Jump directly into the sequence below at the correct offset. */ - .macro dispatch_step i - ldr tmp1, [src, #-(\i * 4)] - str tmp1, [dst, #-(\i * 4)] - .endm - dispatch_15_word -#endif - - lsls count, count, #31 - ldrhcs tmp1, [src], #2 - ldrbne src, [src] /* Src is dead, use as a scratch. */ - strhcs tmp1, [dst], #2 - strbne src, [dst] - bx lr - -.Lcpy_not_short: - /* At least 64 bytes to copy, but don't know the alignment yet. */ - str tmp2, [sp, #-FRAME_SIZE]! - cfi_adjust_cfa_offset (FRAME_SIZE) - cfi_rel_offset (tmp2, 0) - cfi_remember_state - and tmp2, src, #7 - and tmp1, dst, #7 - cmp tmp1, tmp2 - bne .Lcpy_notaligned - -#ifdef USE_VFP - /* Magic dust alert! Force VFP on Cortex-A9. Experiments show - that the FP pipeline is much better at streaming loads and - stores. This is outside the critical loop. */ - vmov.f32 s0, s0 -#endif - - /* SRC and DST have the same mutual 64-bit alignment, but we may - still need to pre-copy some bytes to get to natural alignment. - We bring SRC and DST into full 64-bit alignment. */ - lsls tmp2, dst, #29 - beq 1f - rsbs tmp2, tmp2, #0 - sub count, count, tmp2, lsr #29 - ldrmi tmp1, [src], #4 - strmi tmp1, [dst], #4 - lsls tmp2, tmp2, #2 - ldrhcs tmp1, [src], #2 - ldrbne tmp2, [src], #1 - strhcs tmp1, [dst], #2 - strbne tmp2, [dst], #1 - -1: - subs tmp2, count, #64 /* Use tmp2 for count. */ - blt .Ltail63aligned - - cmp tmp2, #512 - bge .Lcpy_body_long - -.Lcpy_body_medium: /* Count in tmp2. */ -#ifdef USE_VFP -1: - vldr d0, [src, #0] - subs tmp2, tmp2, #64 - vldr d1, [src, #8] - vstr d0, [dst, #0] - vldr d0, [src, #16] - vstr d1, [dst, #8] - vldr d1, [src, #24] - vstr d0, [dst, #16] - vldr d0, [src, #32] - vstr d1, [dst, #24] - vldr d1, [src, #40] - vstr d0, [dst, #32] - vldr d0, [src, #48] - vstr d1, [dst, #40] - vldr d1, [src, #56] - vstr d0, [dst, #48] - add src, src, #64 - vstr d1, [dst, #56] - add dst, dst, #64 - bge 1b - tst tmp2, #0x3f - beq .Ldone - -.Ltail63aligned: /* Count in tmp2. */ - and tmp1, tmp2, #0x38 - add dst, dst, tmp1 - add src, src, tmp1 - .macro dispatch_step i - vldr d0, [src, #-(\i * 8)] - vstr d0, [dst, #-(\i * 8)] - .endm - dispatch_7_dword -#else - sub src, src, #8 - sub dst, dst, #8 -1: - ldrd A_l, A_h, [src, #8] - strd A_l, A_h, [dst, #8] - ldrd A_l, A_h, [src, #16] - strd A_l, A_h, [dst, #16] - ldrd A_l, A_h, [src, #24] - strd A_l, A_h, [dst, #24] - ldrd A_l, A_h, [src, #32] - strd A_l, A_h, [dst, #32] - ldrd A_l, A_h, [src, #40] - strd A_l, A_h, [dst, #40] - ldrd A_l, A_h, [src, #48] - strd A_l, A_h, [dst, #48] - ldrd A_l, A_h, [src, #56] - strd A_l, A_h, [dst, #56] - ldrd A_l, A_h, [src, #64]! - strd A_l, A_h, [dst, #64]! - subs tmp2, tmp2, #64 - bge 1b - tst tmp2, #0x3f - bne 1f - ldr tmp2,[sp], #FRAME_SIZE - cfi_adjust_cfa_offset (-FRAME_SIZE) - cfi_restore (tmp2) - bx lr - - cfi_restore_state - cfi_remember_state -1: - add src, src, #8 - add dst, dst, #8 - -.Ltail63aligned: /* Count in tmp2. */ - /* Copy up to 7 d-words of data. Similar to Ltail63unaligned, but - we know that the src and dest are 64-bit aligned so we can use - LDRD/STRD to improve efficiency. */ - /* TMP2 is now negative, but we don't care about that. The bottom - six bits still tell us how many bytes are left to copy. */ - - and tmp1, tmp2, #0x38 - add dst, dst, tmp1 - add src, src, tmp1 - .macro dispatch_step i - ldrd A_l, A_h, [src, #-(\i * 8)] - strd A_l, A_h, [dst, #-(\i * 8)] - .endm - dispatch_7_dword -#endif - - tst tmp2, #4 - ldrne tmp1, [src], #4 - strne tmp1, [dst], #4 - lsls tmp2, tmp2, #31 /* Count (tmp2) now dead. */ - ldrhcs tmp1, [src], #2 - ldrbne tmp2, [src] - strhcs tmp1, [dst], #2 - strbne tmp2, [dst] - -.Ldone: - ldr tmp2, [sp], #FRAME_SIZE - cfi_adjust_cfa_offset (-FRAME_SIZE) - cfi_restore (tmp2) - bx lr - - cfi_restore_state - cfi_remember_state - -.Lcpy_body_long: /* Count in tmp2. */ - - /* Long copy. We know that there's at least (prefetch_lines * 64) - bytes to go. */ -#ifdef USE_VFP - /* Don't use PLD. Instead, read some data in advance of the current - copy position into a register. This should act like a PLD - operation but we won't have to repeat the transfer. */ - - vldr d3, [src, #0] - vldr d4, [src, #64] - vldr d5, [src, #128] - vldr d6, [src, #192] - vldr d7, [src, #256] - - vldr d0, [src, #8] - vldr d1, [src, #16] - vldr d2, [src, #24] - add src, src, #32 - - subs tmp2, tmp2, #prefetch_lines * 64 * 2 - blt 2f -1: - cpy_line_vfp d3, 0 - cpy_line_vfp d4, 64 - cpy_line_vfp d5, 128 - add dst, dst, #3 * 64 - add src, src, #3 * 64 - cpy_line_vfp d6, 0 - cpy_line_vfp d7, 64 - add dst, dst, #2 * 64 - add src, src, #2 * 64 - subs tmp2, tmp2, #prefetch_lines * 64 - bge 1b - -2: - cpy_tail_vfp d3, 0 - cpy_tail_vfp d4, 64 - cpy_tail_vfp d5, 128 - add src, src, #3 * 64 - add dst, dst, #3 * 64 - cpy_tail_vfp d6, 0 - vstr d7, [dst, #64] - vldr d7, [src, #64] - vstr d0, [dst, #64 + 8] - vldr d0, [src, #64 + 8] - vstr d1, [dst, #64 + 16] - vldr d1, [src, #64 + 16] - vstr d2, [dst, #64 + 24] - vldr d2, [src, #64 + 24] - vstr d7, [dst, #64 + 32] - add src, src, #96 - vstr d0, [dst, #64 + 40] - vstr d1, [dst, #64 + 48] - vstr d2, [dst, #64 + 56] - add dst, dst, #128 - add tmp2, tmp2, #prefetch_lines * 64 - b .Lcpy_body_medium -#else - /* Long copy. Use an SMS style loop to maximize the I/O - bandwidth of the core. We don't have enough spare registers - to synthesise prefetching, so use PLD operations. */ - /* Pre-bias src and dst. */ - sub src, src, #8 - sub dst, dst, #8 - pld [src, #8] - pld [src, #72] - subs tmp2, tmp2, #64 - pld [src, #136] - ldrd A_l, A_h, [src, #8] - strd B_l, B_h, [sp, #8] - cfi_rel_offset (B_l, 8) - cfi_rel_offset (B_h, 12) - ldrd B_l, B_h, [src, #16] - strd C_l, C_h, [sp, #16] - cfi_rel_offset (C_l, 16) - cfi_rel_offset (C_h, 20) - ldrd C_l, C_h, [src, #24] - strd D_l, D_h, [sp, #24] - cfi_rel_offset (D_l, 24) - cfi_rel_offset (D_h, 28) - pld [src, #200] - ldrd D_l, D_h, [src, #32]! - b 1f - .p2align 6 -2: - pld [src, #232] - strd A_l, A_h, [dst, #40] - ldrd A_l, A_h, [src, #40] - strd B_l, B_h, [dst, #48] - ldrd B_l, B_h, [src, #48] - strd C_l, C_h, [dst, #56] - ldrd C_l, C_h, [src, #56] - strd D_l, D_h, [dst, #64]! - ldrd D_l, D_h, [src, #64]! - subs tmp2, tmp2, #64 -1: - strd A_l, A_h, [dst, #8] - ldrd A_l, A_h, [src, #8] - strd B_l, B_h, [dst, #16] - ldrd B_l, B_h, [src, #16] - strd C_l, C_h, [dst, #24] - ldrd C_l, C_h, [src, #24] - strd D_l, D_h, [dst, #32] - ldrd D_l, D_h, [src, #32] - bcs 2b - /* Save the remaining bytes and restore the callee-saved regs. */ - strd A_l, A_h, [dst, #40] - add src, src, #40 - strd B_l, B_h, [dst, #48] - ldrd B_l, B_h, [sp, #8] - cfi_restore (B_l) - cfi_restore (B_h) - strd C_l, C_h, [dst, #56] - ldrd C_l, C_h, [sp, #16] - cfi_restore (C_l) - cfi_restore (C_h) - strd D_l, D_h, [dst, #64] - ldrd D_l, D_h, [sp, #24] - cfi_restore (D_l) - cfi_restore (D_h) - add dst, dst, #72 - tst tmp2, #0x3f - bne .Ltail63aligned - ldr tmp2, [sp], #FRAME_SIZE - cfi_adjust_cfa_offset (-FRAME_SIZE) - cfi_restore (tmp2) - bx lr -#endif - - cfi_restore_state - cfi_remember_state - -.Lcpy_notaligned: - pld [src, #0] - pld [src, #64] - /* There's at least 64 bytes to copy, but there is no mutual - alignment. */ - /* Bring DST to 64-bit alignment. */ - lsls tmp2, dst, #29 - pld [src, #(2 * 64)] - beq 1f - rsbs tmp2, tmp2, #0 - sub count, count, tmp2, lsr #29 - ldrmi tmp1, [src], #4 - strmi tmp1, [dst], #4 - lsls tmp2, tmp2, #2 - ldrbne tmp1, [src], #1 - ldrhcs tmp2, [src], #2 - strbne tmp1, [dst], #1 - strhcs tmp2, [dst], #2 -1: - pld [src, #(3 * 64)] - subs count, count, #64 - ldrmi tmp2, [sp], #FRAME_SIZE - bmi .Ltail63unaligned - pld [src, #(4 * 64)] - -#ifdef USE_NEON - /* These need an extra layer of macro just to work around a - bug in the assembler's parser when an operand starts with - a {...}. */ - .macro neon_load_multi reglist, basereg - vld1.8 {\reglist}, [\basereg]! - .endm - .macro neon_store_multi reglist, basereg - vst1.8 {\reglist}, [ALIGN (\basereg, 64)]! - .endm - - neon_load_multi d0-d3, src - neon_load_multi d4-d7, src - subs count, count, #64 - bmi 2f -1: - pld [src, #(4 * 64)] - neon_store_multi d0-d3, dst - neon_load_multi d0-d3, src - neon_store_multi d4-d7, dst - neon_load_multi d4-d7, src - subs count, count, #64 - bpl 1b -2: - neon_store_multi d0-d3, dst - neon_store_multi d4-d7, dst - ands count, count, #0x3f -#else - /* Use an SMS style loop to maximize the I/O bandwidth. */ - sub src, src, #4 - sub dst, dst, #8 - subs tmp2, count, #64 /* Use tmp2 for count. */ - ldr A_l, [src, #4] - ldr A_h, [src, #8] - strd B_l, B_h, [sp, #8] - cfi_rel_offset (B_l, 8) - cfi_rel_offset (B_h, 12) - ldr B_l, [src, #12] - ldr B_h, [src, #16] - strd C_l, C_h, [sp, #16] - cfi_rel_offset (C_l, 16) - cfi_rel_offset (C_h, 20) - ldr C_l, [src, #20] - ldr C_h, [src, #24] - strd D_l, D_h, [sp, #24] - cfi_rel_offset (D_l, 24) - cfi_rel_offset (D_h, 28) - ldr D_l, [src, #28] - ldr D_h, [src, #32]! - b 1f - .p2align 6 -2: - pld [src, #(5 * 64) - (32 - 4)] - strd A_l, A_h, [dst, #40] - ldr A_l, [src, #36] - ldr A_h, [src, #40] - strd B_l, B_h, [dst, #48] - ldr B_l, [src, #44] - ldr B_h, [src, #48] - strd C_l, C_h, [dst, #56] - ldr C_l, [src, #52] - ldr C_h, [src, #56] - strd D_l, D_h, [dst, #64]! - ldr D_l, [src, #60] - ldr D_h, [src, #64]! - subs tmp2, tmp2, #64 -1: - strd A_l, A_h, [dst, #8] - ldr A_l, [src, #4] - ldr A_h, [src, #8] - strd B_l, B_h, [dst, #16] - ldr B_l, [src, #12] - ldr B_h, [src, #16] - strd C_l, C_h, [dst, #24] - ldr C_l, [src, #20] - ldr C_h, [src, #24] - strd D_l, D_h, [dst, #32] - ldr D_l, [src, #28] - ldr D_h, [src, #32] - bcs 2b - - /* Save the remaining bytes and restore the callee-saved regs. */ - strd A_l, A_h, [dst, #40] - add src, src, #36 - strd B_l, B_h, [dst, #48] - ldrd B_l, B_h, [sp, #8] - cfi_restore (B_l) - cfi_restore (B_h) - strd C_l, C_h, [dst, #56] - ldrd C_l, C_h, [sp, #16] - cfi_restore (C_l) - cfi_restore (C_h) - strd D_l, D_h, [dst, #64] - ldrd D_l, D_h, [sp, #24] - cfi_restore (D_l) - cfi_restore (D_h) - add dst, dst, #72 - ands count, tmp2, #0x3f -#endif - ldr tmp2, [sp], #FRAME_SIZE - cfi_adjust_cfa_offset (-FRAME_SIZE) - cfi_restore (tmp2) - bne .Ltail63unaligned - bx lr - -END(memcpy) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/arm/armv7/multiarch/memcpy_neon.S b/sysdeps/arm/armv7/multiarch/memcpy_neon.S deleted file mode 100644 index e60d1cc0e1..0000000000 --- a/sysdeps/arm/armv7/multiarch/memcpy_neon.S +++ /dev/null @@ -1,9 +0,0 @@ -#ifdef __ARM_NEON__ -/* Under __ARM_NEON__, this file defines memcpy directly. */ -libc_hidden_builtin_def (memcpy) -#else -# define memcpy __memcpy_neon -#endif - -#define MEMCPY_NEON -#include "memcpy_impl.S" diff --git a/sysdeps/arm/armv7/multiarch/memcpy_vfp.S b/sysdeps/arm/armv7/multiarch/memcpy_vfp.S deleted file mode 100644 index e008c041ed..0000000000 --- a/sysdeps/arm/armv7/multiarch/memcpy_vfp.S +++ /dev/null @@ -1,7 +0,0 @@ -/* Under __ARM_NEON__, memcpy_neon.S defines memcpy directly - and the __memcpy_vfp code will never be used. */ -#ifndef __ARM_NEON__ -# define MEMCPY_VFP -# define memcpy __memcpy_vfp -# include "memcpy_impl.S" -#endif diff --git a/sysdeps/arm/armv7/strcmp.S b/sysdeps/arm/armv7/strcmp.S deleted file mode 100644 index 25d055754e..0000000000 --- a/sysdeps/arm/armv7/strcmp.S +++ /dev/null @@ -1,519 +0,0 @@ -/* strcmp implementation for ARMv7-A, optimized for Cortex-A15. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* Implementation of strcmp for ARMv7 when DSP instructions are - available. Use ldrd to support wider loads, provided the data - is sufficiently aligned. Use saturating arithmetic to optimize - the compares. */ - -/* Build Options: - STRCMP_PRECHECK: Run a quick pre-check of the first byte in the - string. If comparing completely random strings the pre-check will - save time, since there is a very high probability of a mismatch in - the first character: we save significant overhead if this is the - common case. However, if strings are likely to be identical (e.g. - because we're verifying a hit in a hash table), then this check - is largely redundant. */ - -#define STRCMP_PRECHECK 1 - - .syntax unified - -#ifdef __ARM_BIG_ENDIAN -# define S2LO lsl -# define S2LOEQ lsleq -# define S2HI lsr -# define MSB 0x000000ff -# define LSB 0xff000000 -# define BYTE0_OFFSET 24 -# define BYTE1_OFFSET 16 -# define BYTE2_OFFSET 8 -# define BYTE3_OFFSET 0 -#else /* not __ARM_BIG_ENDIAN */ -# define S2LO lsr -# define S2LOEQ lsreq -# define S2HI lsl -# define BYTE0_OFFSET 0 -# define BYTE1_OFFSET 8 -# define BYTE2_OFFSET 16 -# define BYTE3_OFFSET 24 -# define MSB 0xff000000 -# define LSB 0x000000ff -#endif /* not __ARM_BIG_ENDIAN */ - -/* Parameters and result. */ -#define src1 r0 -#define src2 r1 -#define result r0 /* Overlaps src1. */ - -/* Internal variables. */ -#define tmp1 r4 -#define tmp2 r5 -#define const_m1 r12 - -/* Additional internal variables for 64-bit aligned data. */ -#define data1a r2 -#define data1b r3 -#define data2a r6 -#define data2b r7 -#define syndrome_a tmp1 -#define syndrome_b tmp2 - -/* Additional internal variables for 32-bit aligned data. */ -#define data1 r2 -#define data2 r3 -#define syndrome tmp2 - - -#ifndef NO_THUMB -/* This code is best on Thumb. */ - .thumb - -/* In Thumb code we can't use MVN with a register shift, but we do have ORN. */ -.macro prepare_mask mask_reg, nbits_reg - S2HI \mask_reg, const_m1, \nbits_reg -.endm -.macro apply_mask data_reg, mask_reg - orn \data_reg, \data_reg, \mask_reg -.endm -#else -/* In ARM code we don't have ORN, but we can use MVN with a register shift. */ -.macro prepare_mask mask_reg, nbits_reg - mvn \mask_reg, const_m1, S2HI \nbits_reg -.endm -.macro apply_mask data_reg, mask_reg - orr \data_reg, \data_reg, \mask_reg -.endm - -/* These clobber the condition codes, which the real Thumb cbz/cbnz - instructions do not. But it doesn't matter for any of the uses here. */ -.macro cbz reg, label - cmp \reg, #0 - beq \label -.endm -.macro cbnz reg, label - cmp \reg, #0 - bne \label -.endm -#endif - - - /* Macro to compute and return the result value for word-aligned - cases. */ - .macro strcmp_epilogue_aligned synd d1 d2 restore_r6 -#ifdef __ARM_BIG_ENDIAN - /* If data1 contains a zero byte, then syndrome will contain a 1 in - bit 7 of that byte. Otherwise, the highest set bit in the - syndrome will highlight the first different bit. It is therefore - sufficient to extract the eight bits starting with the syndrome - bit. */ - clz tmp1, \synd - lsl r1, \d2, tmp1 - .if \restore_r6 - ldrd r6, r7, [sp, #8] - .endif - lsl \d1, \d1, tmp1 - lsr result, \d1, #24 - ldrd r4, r5, [sp], #16 - cfi_remember_state - cfi_def_cfa_offset (0) - cfi_restore (r4) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - sub result, result, r1, lsr #24 - bx lr -#else - /* To use the big-endian trick we'd have to reverse all three words. - that's slower than this approach. */ - rev \synd, \synd - clz tmp1, \synd - bic tmp1, tmp1, #7 - lsr r1, \d2, tmp1 - .if \restore_r6 - ldrd r6, r7, [sp, #8] - .endif - lsr \d1, \d1, tmp1 - and result, \d1, #255 - and r1, r1, #255 - ldrd r4, r5, [sp], #16 - cfi_remember_state - cfi_def_cfa_offset (0) - cfi_restore (r4) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - sub result, result, r1 - - bx lr -#endif - .endm - - .text - .p2align 5 -.Lstrcmp_start_addr: -#if STRCMP_PRECHECK == 1 -.Lfastpath_exit: - sub r0, r2, r3 - bx lr - nop -#endif -ENTRY (strcmp) -#if STRCMP_PRECHECK == 1 - ldrb r2, [src1] - ldrb r3, [src2] - cmp r2, #1 - it cs - cmpcs r2, r3 - bne .Lfastpath_exit -#endif - strd r4, r5, [sp, #-16]! - cfi_def_cfa_offset (16) - cfi_offset (r4, -16) - cfi_offset (r5, -12) - orr tmp1, src1, src2 - strd r6, r7, [sp, #8] - cfi_offset (r6, -8) - cfi_offset (r7, -4) - mvn const_m1, #0 - lsl r2, tmp1, #29 - cbz r2, .Lloop_aligned8 - -.Lnot_aligned: - eor tmp1, src1, src2 - tst tmp1, #7 - bne .Lmisaligned8 - - /* Deal with mutual misalignment by aligning downwards and then - masking off the unwanted loaded data to prevent a difference. */ - and tmp1, src1, #7 - bic src1, src1, #7 - and tmp2, tmp1, #3 - bic src2, src2, #7 - lsl tmp2, tmp2, #3 /* Bytes -> bits. */ - ldrd data1a, data1b, [src1], #16 - tst tmp1, #4 - ldrd data2a, data2b, [src2], #16 - prepare_mask tmp1, tmp2 - apply_mask data1a, tmp1 - apply_mask data2a, tmp1 - beq .Lstart_realigned8 - apply_mask data1b, tmp1 - mov data1a, const_m1 - apply_mask data2b, tmp1 - mov data2a, const_m1 - b .Lstart_realigned8 - - /* Unwind the inner loop by a factor of 2, giving 16 bytes per - pass. */ - .p2align 5,,12 /* Don't start in the tail bytes of a cache line. */ - .p2align 2 /* Always word aligned. */ -.Lloop_aligned8: - ldrd data1a, data1b, [src1], #16 - ldrd data2a, data2b, [src2], #16 -.Lstart_realigned8: - uadd8 syndrome_b, data1a, const_m1 /* Only want GE bits, */ - eor syndrome_a, data1a, data2a - sel syndrome_a, syndrome_a, const_m1 - cbnz syndrome_a, .Ldiff_in_a - uadd8 syndrome_b, data1b, const_m1 /* Only want GE bits. */ - eor syndrome_b, data1b, data2b - sel syndrome_b, syndrome_b, const_m1 - cbnz syndrome_b, .Ldiff_in_b - - ldrd data1a, data1b, [src1, #-8] - ldrd data2a, data2b, [src2, #-8] - uadd8 syndrome_b, data1a, const_m1 /* Only want GE bits, */ - eor syndrome_a, data1a, data2a - sel syndrome_a, syndrome_a, const_m1 - uadd8 syndrome_b, data1b, const_m1 /* Only want GE bits. */ - eor syndrome_b, data1b, data2b - sel syndrome_b, syndrome_b, const_m1 - /* Can't use CBZ for backwards branch. */ - orrs syndrome_b, syndrome_b, syndrome_a /* Only need if s_a == 0 */ - beq .Lloop_aligned8 - -.Ldiff_found: - cbnz syndrome_a, .Ldiff_in_a - -.Ldiff_in_b: - strcmp_epilogue_aligned syndrome_b, data1b, data2b 1 - -.Ldiff_in_a: - cfi_restore_state - strcmp_epilogue_aligned syndrome_a, data1a, data2a 1 - - cfi_restore_state -.Lmisaligned8: - tst tmp1, #3 - bne .Lmisaligned4 - ands tmp1, src1, #3 - bne .Lmutual_align4 - - /* Unrolled by a factor of 2, to reduce the number of post-increment - operations. */ -.Lloop_aligned4: - ldr data1, [src1], #8 - ldr data2, [src2], #8 -.Lstart_realigned4: - uadd8 syndrome, data1, const_m1 /* Only need GE bits. */ - eor syndrome, data1, data2 - sel syndrome, syndrome, const_m1 - cbnz syndrome, .Laligned4_done - ldr data1, [src1, #-4] - ldr data2, [src2, #-4] - uadd8 syndrome, data1, const_m1 - eor syndrome, data1, data2 - sel syndrome, syndrome, const_m1 - cmp syndrome, #0 - beq .Lloop_aligned4 - -.Laligned4_done: - strcmp_epilogue_aligned syndrome, data1, data2, 0 - -.Lmutual_align4: - cfi_restore_state - /* Deal with mutual misalignment by aligning downwards and then - masking off the unwanted loaded data to prevent a difference. */ - lsl tmp1, tmp1, #3 /* Bytes -> bits. */ - bic src1, src1, #3 - ldr data1, [src1], #8 - bic src2, src2, #3 - ldr data2, [src2], #8 - - prepare_mask tmp1, tmp1 - apply_mask data1, tmp1 - apply_mask data2, tmp1 - b .Lstart_realigned4 - -.Lmisaligned4: - ands tmp1, src1, #3 - beq .Lsrc1_aligned - sub src2, src2, tmp1 - bic src1, src1, #3 - lsls tmp1, tmp1, #31 - ldr data1, [src1], #4 - beq .Laligned_m2 - bcs .Laligned_m1 - -#if STRCMP_PRECHECK == 0 - ldrb data2, [src2, #1] - uxtb tmp1, data1, ror #BYTE1_OFFSET - subs tmp1, tmp1, data2 - bne .Lmisaligned_exit - cbz data2, .Lmisaligned_exit - -.Laligned_m2: - ldrb data2, [src2, #2] - uxtb tmp1, data1, ror #BYTE2_OFFSET - subs tmp1, tmp1, data2 - bne .Lmisaligned_exit - cbz data2, .Lmisaligned_exit - -.Laligned_m1: - ldrb data2, [src2, #3] - uxtb tmp1, data1, ror #BYTE3_OFFSET - subs tmp1, tmp1, data2 - bne .Lmisaligned_exit - add src2, src2, #4 - cbnz data2, .Lsrc1_aligned -#else /* STRCMP_PRECHECK */ - /* If we've done the pre-check, then we don't need to check the - first byte again here. */ - ldrb data2, [src2, #2] - uxtb tmp1, data1, ror #BYTE2_OFFSET - subs tmp1, tmp1, data2 - bne .Lmisaligned_exit - cbz data2, .Lmisaligned_exit - -.Laligned_m2: - ldrb data2, [src2, #3] - uxtb tmp1, data1, ror #BYTE3_OFFSET - subs tmp1, tmp1, data2 - bne .Lmisaligned_exit - cbnz data2, .Laligned_m1 -#endif - -.Lmisaligned_exit: - mov result, tmp1 - ldr r4, [sp], #16 - cfi_remember_state - cfi_def_cfa_offset (0) - cfi_restore (r4) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - bx lr - -#if STRCMP_PRECHECK == 1 -.Laligned_m1: - add src2, src2, #4 -#endif -.Lsrc1_aligned: - cfi_restore_state - /* src1 is word aligned, but src2 has no common alignment - with it. */ - ldr data1, [src1], #4 - lsls tmp1, src2, #31 /* C=src2[1], Z=src2[0]. */ - - bic src2, src2, #3 - ldr data2, [src2], #4 - bhi .Loverlap1 /* C=1, Z=0 => src2[1:0] = 0b11. */ - bcs .Loverlap2 /* C=1, Z=1 => src2[1:0] = 0b10. */ - - /* (overlap3) C=0, Z=0 => src2[1:0] = 0b01. */ -.Loverlap3: - bic tmp1, data1, #MSB - uadd8 syndrome, data1, const_m1 - eors syndrome, tmp1, data2, S2LO #8 - sel syndrome, syndrome, const_m1 - bne 4f - cbnz syndrome, 5f - ldr data2, [src2], #4 - eor tmp1, tmp1, data1 - cmp tmp1, data2, S2HI #24 - bne 6f - ldr data1, [src1], #4 - b .Loverlap3 -4: - S2LO data2, data2, #8 - b .Lstrcmp_tail - -5: - bics syndrome, syndrome, #MSB - bne .Lstrcmp_done_equal - - /* We can only get here if the MSB of data1 contains 0, so - fast-path the exit. */ - ldrb result, [src2] - ldrd r4, r5, [sp], #16 - cfi_remember_state - cfi_def_cfa_offset (0) - cfi_restore (r4) - cfi_restore (r5) - /* R6/7 Not used in this sequence. */ - cfi_restore (r6) - cfi_restore (r7) - neg result, result - bx lr - -6: - cfi_restore_state - S2LO data1, data1, #24 - and data2, data2, #LSB - b .Lstrcmp_tail - - .p2align 5,,12 /* Ensure at least 3 instructions in cache line. */ -.Loverlap2: - and tmp1, data1, const_m1, S2LO #16 - uadd8 syndrome, data1, const_m1 - eors syndrome, tmp1, data2, S2LO #16 - sel syndrome, syndrome, const_m1 - bne 4f - cbnz syndrome, 5f - ldr data2, [src2], #4 - eor tmp1, tmp1, data1 - cmp tmp1, data2, S2HI #16 - bne 6f - ldr data1, [src1], #4 - b .Loverlap2 -4: - S2LO data2, data2, #16 - b .Lstrcmp_tail -5: - ands syndrome, syndrome, const_m1, S2LO #16 - bne .Lstrcmp_done_equal - - ldrh data2, [src2] - S2LO data1, data1, #16 -#ifdef __ARM_BIG_ENDIAN - lsl data2, data2, #16 -#endif - b .Lstrcmp_tail - -6: - S2LO data1, data1, #16 - and data2, data2, const_m1, S2LO #16 - b .Lstrcmp_tail - - .p2align 5,,12 /* Ensure at least 3 instructions in cache line. */ -.Loverlap1: - and tmp1, data1, #LSB - uadd8 syndrome, data1, const_m1 - eors syndrome, tmp1, data2, S2LO #24 - sel syndrome, syndrome, const_m1 - bne 4f - cbnz syndrome, 5f - ldr data2, [src2], #4 - eor tmp1, tmp1, data1 - cmp tmp1, data2, S2HI #8 - bne 6f - ldr data1, [src1], #4 - b .Loverlap1 -4: - S2LO data2, data2, #24 - b .Lstrcmp_tail -5: - tst syndrome, #LSB - bne .Lstrcmp_done_equal - ldr data2, [src2] -6: - S2LO data1, data1, #8 - bic data2, data2, #MSB - b .Lstrcmp_tail - -.Lstrcmp_done_equal: - mov result, #0 - ldrd r4, r5, [sp], #16 - cfi_remember_state - cfi_def_cfa_offset (0) - cfi_restore (r4) - cfi_restore (r5) - /* R6/7 not used in this sequence. */ - cfi_restore (r6) - cfi_restore (r7) - bx lr - -.Lstrcmp_tail: - cfi_restore_state -#ifndef __ARM_BIG_ENDIAN - rev data1, data1 - rev data2, data2 - /* Now everything looks big-endian... */ -#endif - uadd8 tmp1, data1, const_m1 - eor tmp1, data1, data2 - sel syndrome, tmp1, const_m1 - clz tmp1, syndrome - lsl data1, data1, tmp1 - lsl data2, data2, tmp1 - lsr result, data1, #24 - ldrd r4, r5, [sp], #16 - cfi_def_cfa_offset (0) - cfi_restore (r4) - cfi_restore (r5) - /* R6/7 not used in this sequence. */ - cfi_restore (r6) - cfi_restore (r7) - sub result, result, data2, lsr #24 - bx lr -END (strcmp) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/arm/atomic-machine.h b/sysdeps/arm/atomic-machine.h deleted file mode 100644 index c22d05b766..0000000000 --- a/sysdeps/arm/atomic-machine.h +++ /dev/null @@ -1,155 +0,0 @@ -/* Atomic operations. Pure ARM version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#define __HAVE_64B_ATOMICS 0 -#define USE_ATOMIC_COMPILER_BUILTINS 0 -#define ATOMIC_EXCHANGE_USES_CAS 1 - -void __arm_link_error (void); - -#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 -# define atomic_full_barrier() __sync_synchronize () -#else -# define atomic_full_barrier() __arm_assisted_full_barrier () -#endif - -/* An OS-specific atomic-machine.h file will define this macro if - the OS can provide something. If not, we'll fail to build - with a compiler that doesn't supply the operation. */ -#ifndef __arm_assisted_full_barrier -# define __arm_assisted_full_barrier() __arm_link_error() -#endif - -/* Use the atomic builtins provided by GCC in case the backend provides - a pattern to do this efficiently. */ -#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 - -# define atomic_exchange_acq(mem, value) \ - __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_ACQUIRE) - -# define atomic_exchange_rel(mem, value) \ - __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_RELEASE) - -/* Atomic exchange (without compare). */ - -# define __arch_exchange_8_int(mem, newval, model) \ - (__arm_link_error (), (typeof (*mem)) 0) - -# define __arch_exchange_16_int(mem, newval, model) \ - (__arm_link_error (), (typeof (*mem)) 0) - -# define __arch_exchange_32_int(mem, newval, model) \ - __atomic_exchange_n (mem, newval, model) - -# define __arch_exchange_64_int(mem, newval, model) \ - (__arm_link_error (), (typeof (*mem)) 0) - -/* Compare and exchange with "acquire" semantics, ie barrier after. */ - -# define atomic_compare_and_exchange_bool_acq(mem, new, old) \ - __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \ - mem, new, old, __ATOMIC_ACQUIRE) - -# define atomic_compare_and_exchange_val_acq(mem, new, old) \ - __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ - mem, new, old, __ATOMIC_ACQUIRE) - -/* Compare and exchange with "release" semantics, ie barrier before. */ - -# define atomic_compare_and_exchange_val_rel(mem, new, old) \ - __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ - mem, new, old, __ATOMIC_RELEASE) - -/* Compare and exchange. - For all "bool" routines, we return FALSE if exchange succesful. */ - -# define __arch_compare_and_exchange_bool_8_int(mem, newval, oldval, model) \ - ({__arm_link_error (); 0; }) - -# define __arch_compare_and_exchange_bool_16_int(mem, newval, oldval, model) \ - ({__arm_link_error (); 0; }) - -# define __arch_compare_and_exchange_bool_32_int(mem, newval, oldval, model) \ - ({ \ - typeof (*mem) __oldval = (oldval); \ - !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ - model, __ATOMIC_RELAXED); \ - }) - -# define __arch_compare_and_exchange_bool_64_int(mem, newval, oldval, model) \ - ({__arm_link_error (); 0; }) - -# define __arch_compare_and_exchange_val_8_int(mem, newval, oldval, model) \ - ({__arm_link_error (); oldval; }) - -# define __arch_compare_and_exchange_val_16_int(mem, newval, oldval, model) \ - ({__arm_link_error (); oldval; }) - -# define __arch_compare_and_exchange_val_32_int(mem, newval, oldval, model) \ - ({ \ - typeof (*mem) __oldval = (oldval); \ - __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ - model, __ATOMIC_RELAXED); \ - __oldval; \ - }) - -# define __arch_compare_and_exchange_val_64_int(mem, newval, oldval, model) \ - ({__arm_link_error (); oldval; }) - -#else -# define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - __arm_assisted_compare_and_exchange_val_32_acq ((mem), (newval), (oldval)) -#endif - -#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 -/* We don't support atomic operations on any non-word types. - So make them link errors. */ -# define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \ - ({ __arm_link_error (); oldval; }) - -# define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \ - ({ __arm_link_error (); oldval; }) - -# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - ({ __arm_link_error (); oldval; }) -#endif - -/* An OS-specific atomic-machine.h file will define this macro if - the OS can provide something. If not, we'll fail to build - with a compiler that doesn't supply the operation. */ -#ifndef __arm_assisted_compare_and_exchange_val_32_acq -# define __arm_assisted_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - ({ __arm_link_error (); oldval; }) -#endif diff --git a/sysdeps/arm/backtrace.c b/sysdeps/arm/backtrace.c deleted file mode 100644 index 14a8053b60..0000000000 --- a/sysdeps/arm/backtrace.c +++ /dev/null @@ -1,126 +0,0 @@ -/* Return backtrace of current program state. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Kazu Hirata , 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -struct trace_arg -{ - void **array; - int cnt, size; -}; - -#ifdef SHARED -static _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *); -static _Unwind_VRS_Result (*unwind_vrs_get) (_Unwind_Context *, - _Unwind_VRS_RegClass, - _uw, - _Unwind_VRS_DataRepresentation, - void *); - -static void *libgcc_handle; - -static void -init (void) -{ - libgcc_handle = __libc_dlopen ("libgcc_s.so.1"); - - if (libgcc_handle == NULL) - return; - - unwind_backtrace = __libc_dlsym (libgcc_handle, "_Unwind_Backtrace"); - unwind_vrs_get = __libc_dlsym (libgcc_handle, "_Unwind_VRS_Get"); - if (unwind_vrs_get == NULL) - unwind_backtrace = NULL; -} - -/* This function is identical to "_Unwind_GetGR", except that it uses - "unwind_vrs_get" instead of "_Unwind_VRS_Get". */ -static inline _Unwind_Word -unwind_getgr (_Unwind_Context *context, int regno) -{ - _uw val; - unwind_vrs_get (context, _UVRSC_CORE, regno, _UVRSD_UINT32, &val); - return val; -} - -/* This macro is identical to the _Unwind_GetIP macro, except that it - uses "unwind_getgr" instead of "_Unwind_GetGR". */ -# define unwind_getip(context) \ - (unwind_getgr (context, 15) & ~(_Unwind_Word)1) -#else -# define unwind_backtrace _Unwind_Backtrace -# define unwind_getip _Unwind_GetIP -#endif - -static _Unwind_Reason_Code -backtrace_helper (struct _Unwind_Context *ctx, void *a) -{ - struct trace_arg *arg = a; - - /* We are first called with address in the __backtrace function. - Skip it. */ - if (arg->cnt != -1) - arg->array[arg->cnt] = (void *) unwind_getip (ctx); - if (++arg->cnt == arg->size) - return _URC_END_OF_STACK; - return _URC_NO_REASON; -} - -int -__backtrace (void **array, int size) -{ - struct trace_arg arg = { .array = array, .size = size, .cnt = -1 }; - - if (size <= 0) - return 0; - -#ifdef SHARED - __libc_once_define (static, once); - - __libc_once (once, init); - if (unwind_backtrace == NULL) - return 0; -#endif - - unwind_backtrace (backtrace_helper, &arg); - - if (arg.cnt > 1 && arg.array[arg.cnt - 1] == NULL) - --arg.cnt; - return arg.cnt != -1 ? arg.cnt : 0; -} -weak_alias (__backtrace, backtrace) -libc_hidden_def (__backtrace) - - -#ifdef SHARED -/* Free all resources if necessary. */ -libc_freeres_fn (free_mem) -{ - unwind_backtrace = NULL; - if (libgcc_handle != NULL) - { - __libc_dlclose (libgcc_handle); - libgcc_handle = NULL; - } -} -#endif diff --git a/sysdeps/arm/bits/endian.h b/sysdeps/arm/bits/endian.h deleted file mode 100644 index f49f6ab1c9..0000000000 --- a/sysdeps/arm/bits/endian.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -/* ARM can be either big or little endian. */ -#ifdef __ARMEB__ -#define __BYTE_ORDER __BIG_ENDIAN -#else -#define __BYTE_ORDER __LITTLE_ENDIAN -#endif diff --git a/sysdeps/arm/bits/fenv.h b/sysdeps/arm/bits/fenv.h deleted file mode 100644 index fe9aeb36bb..0000000000 --- a/sysdeps/arm/bits/fenv.h +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - -/* Define bits representing exceptions in the FPU status word. */ -enum - { - FE_INVALID = -#define FE_INVALID 1 - FE_INVALID, - FE_DIVBYZERO = -#define FE_DIVBYZERO 2 - FE_DIVBYZERO, - FE_OVERFLOW = -#define FE_OVERFLOW 4 - FE_OVERFLOW, - FE_UNDERFLOW = -#define FE_UNDERFLOW 8 - FE_UNDERFLOW, - FE_INEXACT = -#define FE_INEXACT 16 - FE_INEXACT, - }; - -/* Amount to shift by to convert an exception to a mask bit. */ -#define FE_EXCEPT_SHIFT 8 - -/* All supported exceptions. */ -#define FE_ALL_EXCEPT \ - (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) - -/* VFP supports all of the four defined rounding modes. */ -enum - { - FE_TONEAREST = -#define FE_TONEAREST 0 - FE_TONEAREST, - FE_UPWARD = -#define FE_UPWARD 0x400000 - FE_UPWARD, - FE_DOWNWARD = -#define FE_DOWNWARD 0x800000 - FE_DOWNWARD, - FE_TOWARDZERO = -#define FE_TOWARDZERO 0xc00000 - FE_TOWARDZERO - }; - -/* Type representing exception flags. */ -typedef unsigned int fexcept_t; - -/* Type representing floating-point environment. */ -typedef struct - { - unsigned int __cw; - } -fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1l) - -#ifdef __USE_GNU -/* Floating-point environment where none of the exceptions are masked. */ -# define FE_NOMASK_ENV ((const fenv_t *) -2) -#endif - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef unsigned int femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) -1L) -#endif diff --git a/sysdeps/arm/bits/link.h b/sysdeps/arm/bits/link.h deleted file mode 100644 index 6e6d50ed27..0000000000 --- a/sysdeps/arm/bits/link.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - - -/* Registers for entry into PLT on ARM. */ -typedef struct La_arm_regs -{ - uint32_t lr_reg[4]; - uint32_t lr_sp; - uint32_t lr_lr; - /* Coprocessor registers used for argument passing. The data - stored here depends on the coprocessors available in the - system which are used for function calls in the current ABI. - VFP uses eight 64-bit registers, and iWMMXt uses ten. */ - uint32_t lr_coproc[42]; -} La_arm_regs; - -/* Return values for calls from PLT on ARM. */ -typedef struct La_arm_retval -{ - /* Up to four integer registers can be used for a return value in - some ABIs (APCS complex long double). */ - uint32_t lrv_reg[4]; - - /* Any coprocessor registers which might be used to return values - in the current ABI. */ - uint32_t lrv_coproc[12]; -} La_arm_retval; - - -__BEGIN_DECLS - -extern Elf32_Addr la_arm_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_arm_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_arm_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_arm_regs *__inregs, - La_arm_retval *__outregs, - const char *__symname); - -__END_DECLS diff --git a/sysdeps/arm/bits/setjmp.h b/sysdeps/arm/bits/setjmp.h deleted file mode 100644 index a0b39ae35c..0000000000 --- a/sysdeps/arm/bits/setjmp.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Define the machine-dependent type `jmp_buf'. ARM EABI version. */ - -#ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include directly; use instead." -#endif - -#ifndef __ASSEMBLER__ -/* The exact set of registers saved may depend on the particular core - in use, as some coprocessor registers may need to be saved. The C - Library ABI requires that the buffer be 8-byte aligned, and - recommends that the buffer contain 64 words. The first 26 words - are occupied by sp, lr, v1-v6, sl, fp, and d8-d15. */ -typedef int __jmp_buf[64] __attribute__((__aligned__ (8))); -#endif - -#endif diff --git a/sysdeps/arm/bsd-_setjmp.S b/sysdeps/arm/bsd-_setjmp.S deleted file mode 100644 index 3fc5ef49cf..0000000000 --- a/sysdeps/arm/bsd-_setjmp.S +++ /dev/null @@ -1,29 +0,0 @@ -/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. ARM version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include - -ENTRY (_setjmp) - mov r1, #0 - b PLTJMP(HIDDEN_JUMPTARGET(__sigsetjmp)) -END (_setjmp) -libc_hidden_def (_setjmp) diff --git a/sysdeps/arm/bsd-setjmp.S b/sysdeps/arm/bsd-setjmp.S deleted file mode 100644 index 2a07c6add1..0000000000 --- a/sysdeps/arm/bsd-setjmp.S +++ /dev/null @@ -1,28 +0,0 @@ -/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. ARM version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include - -ENTRY (setjmp) - mov r1, #1 - b PLTJMP(HIDDEN_JUMPTARGET(__sigsetjmp)) -END (setjmp) diff --git a/sysdeps/arm/configure b/sysdeps/arm/configure deleted file mode 100644 index 431e843b2b..0000000000 --- a/sysdeps/arm/configure +++ /dev/null @@ -1,279 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/arm. - -$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h - - -# We check to see if the compiler and flags are -# selecting the hard-float ABI and if they are then -# we set libc_cv_arm_pcs_vfp to yes which causes -# HAVE_ARM_PCS_VFP to be defined in config.h and -# in include/libc-symbols.h and thus available to -# shlib-versions to select the appropriate name for -# the dynamic linker via %ifdef. - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler is using the ARM hard-float ABI" >&5 -$as_echo_n "checking whether the compiler is using the ARM hard-float ABI... " >&6; } -if ${libc_cv_arm_pcs_vfp+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __ARM_PCS_VFP - yes - #endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - libc_cv_arm_pcs_vfp=yes -else - libc_cv_arm_pcs_vfp=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_arm_pcs_vfp" >&5 -$as_echo "$libc_cv_arm_pcs_vfp" >&6; } -if test $libc_cv_arm_pcs_vfp = yes; then - $as_echo "#define HAVE_ARM_PCS_VFP 1" >>confdefs.h - - config_vars="$config_vars -default-abi = hard" -else - config_vars="$config_vars -default-abi = soft" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether PC-relative relocs in movw/movt work properly" >&5 -$as_echo_n "checking whether PC-relative relocs in movw/movt work properly... " >&6; } -if ${libc_cv_arm_pcrel_movw+:} false; then : - $as_echo_n "(cached) " >&6 -else - -cat > conftest.s <<\EOF - .syntax unified - .arm - .arch armv7-a - - .text - .globl foo - .type foo,%function -foo: movw r0, #:lower16:symbol - 1f - 8 - movt r0, #:upper16:symbol - 1f - 8 -1: add r0, pc - @ And now a case with a local symbol. - movw r0, #:lower16:3f - 2f - 8 - movt r0, #:upper16:3f - 2f - 8 -2: add r0, pc - bx lr - -.data - .globl symbol - .hidden symbol -symbol: .long 23 -3: .long 17 -EOF -libc_cv_arm_pcrel_movw=no -${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \ - -nostartfiles -nostdlib -shared \ - -o conftest.so conftest.s 1>&5 2>&5 && -LC_ALL=C $READELF -dr conftest.so > conftest.dr 2>&5 && -{ - cat conftest.dr 1>&5 - fgrep 'TEXTREL -R_ARM_NONE' conftest.dr > /dev/null || libc_cv_arm_pcrel_movw=yes -} -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_arm_pcrel_movw" >&5 -$as_echo "$libc_cv_arm_pcrel_movw" >&6; } -if test $libc_cv_arm_pcrel_movw = yes; then - $as_echo "#define ARM_PCREL_MOVW_OK 1" >>confdefs.h - -fi - -# This was buggy in assemblers from GNU binutils versions before 2.25.1 -# (it's known to be broken in 2.24 and 2.25; see -# https://sourceware.org/bugzilla/show_bug.cgi?id=18383). -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether TPOFF relocs with addends are assembled correctly" >&5 -$as_echo_n "checking whether TPOFF relocs with addends are assembled correctly... " >&6; } -if ${libc_cv_arm_tpoff_addend+:} false; then : - $as_echo_n "(cached) " >&6 -else - -cat > conftest.s <<\EOF - .syntax unified - .arm - .arch armv7-a - - .text -foo: - .word tbase(tpoff)+4 - - .section .tdata,"awT",%progbits - .word -4 -tbase: .word 0 - .word 4 -EOF -libc_cv_arm_tpoff_addend=no -${CC-cc} -c $CFLAGS $CPPFLAGS \ - -o conftest.o conftest.s 1>&5 2>&5 && -LC_ALL=C $READELF -x.text conftest.o > conftest.x 2>&5 && -{ - cat conftest.x 1>&5 - $AWK 'BEGIN { result = 2 } -$1 ~ /0x0+/ && $2 ~ /[0-9a-f]+/ { -# Check for little-endian or big-endian encoding of 4 in the in-place addend. - result = ($2 == "04000000" || $2 == "00000004") ? 0 : 1 -} -END { exit(result) } -' conftest.x 2>&5 && libc_cv_arm_tpoff_addend=yes -} -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_arm_tpoff_addend" >&5 -$as_echo "$libc_cv_arm_tpoff_addend" >&6; } -if test $libc_cv_arm_tpoff_addend = no; then - config_vars="$config_vars -test-xfail-tst-tlsalign = yes" - config_vars="$config_vars -test-xfail-tst-tlsalign-static = yes" -fi - - -libc_cv_gcc_unwind_find_fde=no - -# Remove -fno-unwind-tables that was added in sysdeps/arm/preconfigure.ac. -CFLAGS=${CFLAGS% -fno-unwind-tables} diff --git a/sysdeps/arm/configure.ac b/sysdeps/arm/configure.ac deleted file mode 100644 index 90cdd69c75..0000000000 --- a/sysdeps/arm/configure.ac +++ /dev/null @@ -1,112 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/arm. - -dnl It is always possible to access static and hidden symbols in an -dnl position independent way. This has been true since GCC 4.1, -dnl which is older than the minimum version required to build libc. -AC_DEFINE(PI_STATIC_AND_HIDDEN) - -# We check to see if the compiler and flags are -# selecting the hard-float ABI and if they are then -# we set libc_cv_arm_pcs_vfp to yes which causes -# HAVE_ARM_PCS_VFP to be defined in config.h and -# in include/libc-symbols.h and thus available to -# shlib-versions to select the appropriate name for -# the dynamic linker via %ifdef. -AC_CACHE_CHECK([whether the compiler is using the ARM hard-float ABI], - [libc_cv_arm_pcs_vfp], - [AC_EGREP_CPP(yes,[#ifdef __ARM_PCS_VFP - yes - #endif - ], libc_cv_arm_pcs_vfp=yes, libc_cv_arm_pcs_vfp=no)]) -if test $libc_cv_arm_pcs_vfp = yes; then - AC_DEFINE(HAVE_ARM_PCS_VFP) - LIBC_CONFIG_VAR([default-abi], [hard]) -else - LIBC_CONFIG_VAR([default-abi], [soft]) -fi - -AC_CACHE_CHECK([whether PC-relative relocs in movw/movt work properly], - libc_cv_arm_pcrel_movw, [ -cat > conftest.s <<\EOF - .syntax unified - .arm - .arch armv7-a - - .text - .globl foo - .type foo,%function -foo: movw r0, #:lower16:symbol - 1f - 8 - movt r0, #:upper16:symbol - 1f - 8 -1: add r0, pc - @ And now a case with a local symbol. - movw r0, #:lower16:3f - 2f - 8 - movt r0, #:upper16:3f - 2f - 8 -2: add r0, pc - bx lr - -.data - .globl symbol - .hidden symbol -symbol: .long 23 -3: .long 17 -EOF -libc_cv_arm_pcrel_movw=no -${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \ - -nostartfiles -nostdlib -shared \ - -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD && -LC_ALL=C $READELF -dr conftest.so > conftest.dr 2>&AS_MESSAGE_LOG_FD && -{ - cat conftest.dr 1>&AS_MESSAGE_LOG_FD - fgrep 'TEXTREL -R_ARM_NONE' conftest.dr > /dev/null || libc_cv_arm_pcrel_movw=yes -} -rm -f conftest*]) -if test $libc_cv_arm_pcrel_movw = yes; then - AC_DEFINE([ARM_PCREL_MOVW_OK]) -fi - -# This was buggy in assemblers from GNU binutils versions before 2.25.1 -# (it's known to be broken in 2.24 and 2.25; see -# https://sourceware.org/bugzilla/show_bug.cgi?id=18383). -AC_CACHE_CHECK([whether TPOFF relocs with addends are assembled correctly], - libc_cv_arm_tpoff_addend, [ -cat > conftest.s <<\EOF - .syntax unified - .arm - .arch armv7-a - - .text -foo: - .word tbase(tpoff)+4 - - .section .tdata,"awT",%progbits - .word -4 -tbase: .word 0 - .word 4 -EOF -libc_cv_arm_tpoff_addend=no -${CC-cc} -c $CFLAGS $CPPFLAGS \ - -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD && -LC_ALL=C $READELF -x.text conftest.o > conftest.x 2>&AS_MESSAGE_LOG_FD && -{ - cat conftest.x 1>&AS_MESSAGE_LOG_FD - $AWK 'BEGIN { result = 2 } -$1 ~ /0x0+/ && $2 ~ /[[0-9a-f]]+/ { -# Check for little-endian or big-endian encoding of 4 in the in-place addend. - result = ($2 == "04000000" || $2 == "00000004") ? 0 : 1 -} -END { exit(result) } -' conftest.x 2>&AS_MESSAGE_LOG_FD && libc_cv_arm_tpoff_addend=yes -} -rm -f conftest*]) -if test $libc_cv_arm_tpoff_addend = no; then - LIBC_CONFIG_VAR([test-xfail-tst-tlsalign], [yes]) - LIBC_CONFIG_VAR([test-xfail-tst-tlsalign-static], [yes]) -fi - - -libc_cv_gcc_unwind_find_fde=no - -# Remove -fno-unwind-tables that was added in sysdeps/arm/preconfigure.ac. -CFLAGS=${CFLAGS% -fno-unwind-tables} diff --git a/sysdeps/arm/crti.S b/sysdeps/arm/crti.S deleted file mode 100644 index c71f5bd513..0000000000 --- a/sysdeps/arm/crti.S +++ /dev/null @@ -1,95 +0,0 @@ -/* Special .init and .fini section support for ARM. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -/* Always build .init and .fini sections in ARM mode. */ -#define NO_THUMB -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - -#if PREINIT_FUNCTION_WEAK - .p2align 2 - .type call_weak_fn, %function -call_weak_fn: - ldr r3, .LGOT - ldr r2, .LGOT+4 -.LPIC: - add r3, pc, r3 - ldr r2, [r3, r2] - cmp r2, #0 - bxeq lr - b PREINIT_FUNCTION - .p2align 2 -.LGOT: - .word _GLOBAL_OFFSET_TABLE_-(.LPIC+8) - .word PREINIT_FUNCTION(GOT) -#endif - - .section .init,"ax",%progbits - .p2align 2 - .globl _init - .type _init, %function -_init: - push {r3, lr} -#if PREINIT_FUNCTION_WEAK - bl call_weak_fn -#else - bl PREINIT_FUNCTION -#endif - - .section .fini,"ax",%progbits - .p2align 2 - .globl _fini - .type _fini, %function -_fini: - push {r3, lr} diff --git a/sysdeps/arm/crtn.S b/sysdeps/arm/crtn.S deleted file mode 100644 index 982933826d..0000000000 --- a/sysdeps/arm/crtn.S +++ /dev/null @@ -1,57 +0,0 @@ -/* Special .init and .fini section support for ARM. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Always build .init and .fini sections in ARM mode. */ -#define NO_THUMB -#include - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .section .init,"ax",%progbits -#ifdef __ARM_ARCH_4T__ - pop {r3, lr} - bx lr -#else - pop {r3, pc} -#endif - - .section .fini,"ax",%progbits -#ifdef __ARM_ARCH_4T__ - pop {r3, lr} - bx lr -#else - pop {r3, pc} -#endif diff --git a/sysdeps/arm/dl-irel.h b/sysdeps/arm/dl-irel.h deleted file mode 100644 index dfd7850433..0000000000 --- a/sysdeps/arm/dl-irel.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Machine-dependent ELF indirect relocation inline functions. - ARM version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _DL_IREL_H -#define _DL_IREL_H - -#include -#include -#include - -#define ELF_MACHINE_IREL 1 - -static inline Elf32_Addr -__attribute ((always_inline)) -elf_ifunc_invoke (Elf32_Addr addr) -{ - return ((Elf32_Addr (*) (unsigned long int)) (addr)) (GLRO(dl_hwcap)); -} - -static inline void -__attribute ((always_inline)) -elf_irel (const Elf32_Rel *reloc) -{ - Elf32_Addr *const reloc_addr = (void *) reloc->r_offset; - const unsigned long int r_type = ELF32_R_TYPE (reloc->r_info); - - if (__builtin_expect (r_type == R_ARM_IRELATIVE, 1)) - { - Elf32_Addr value = elf_ifunc_invoke (*reloc_addr); - *reloc_addr = value; - } - else - __libc_fatal ("unexpected reloc type in static binary"); -} - -#endif /* dl-irel.h */ diff --git a/sysdeps/arm/dl-lookupcfg.h b/sysdeps/arm/dl-lookupcfg.h deleted file mode 100644 index 23b4e7e9af..0000000000 --- a/sysdeps/arm/dl-lookupcfg.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Configuration of lookup functions. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define DL_UNMAP_IS_SPECIAL - -#include_next - -struct link_map; - -extern void internal_function _dl_unmap (struct link_map *map); - -#define DL_UNMAP(map) _dl_unmap (map) diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h deleted file mode 100644 index 2c72972bd2..0000000000 --- a/sysdeps/arm/dl-machine.h +++ /dev/null @@ -1,698 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. ARM version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "ARM" - -#include -#include -#include -#include - -#ifndef CLEAR_CACHE -# error CLEAR_CACHE definition required to handle TEXTREL -#endif - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int __attribute__ ((unused)) -elf_machine_matches_host (const Elf32_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_ARM; -} - - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. */ -static inline Elf32_Addr __attribute__ ((unused)) -elf_machine_dynamic (void) -{ - /* Declaring this hidden ensures that a PC-relative reference is used. */ - extern const Elf32_Addr _GLOBAL_OFFSET_TABLE_[] attribute_hidden; - return _GLOBAL_OFFSET_TABLE_[0]; -} - - -/* Return the run-time load address of the shared object. */ -static inline Elf32_Addr __attribute__ ((unused)) -elf_machine_load_address (void) -{ - extern Elf32_Addr internal_function __dl_start (void *) asm ("_dl_start"); - Elf32_Addr got_addr = (Elf32_Addr) &__dl_start; - Elf32_Addr pcrel_addr; -#ifdef __thumb__ - /* Clear the low bit of the funciton address. */ - got_addr &= ~(Elf32_Addr) 1; -#endif - asm ("adr %0, _dl_start" : "=r" (pcrel_addr)); - return pcrel_addr - got_addr; -} - - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int __attribute__ ((unused)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - Elf32_Addr *got; - extern void _dl_runtime_resolve (Elf32_Word); - extern void _dl_runtime_profile (Elf32_Word); - - if (l->l_info[DT_JMPREL] && lazy) - { - /* patb: this is different than i386 */ - /* The GOT entries for functions in the PLT have not yet been filled - in. Their initial contents will arrange when called to push an - index into the .got section, load ip with &_GLOBAL_OFFSET_TABLE_[3], - and then jump to _GLOBAL_OFFSET_TABLE[2]. */ - got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]); - /* If a library is prelinked but we have to relocate anyway, - we have to be able to undo the prelinking of .got.plt. - The prelinker saved us here address of .plt. */ - if (got[1]) - l->l_mach.plt = got[1] + l->l_addr; - got[1] = (Elf32_Addr) l; /* Identify this shared object. */ - - /* The got[2] entry contains the address of a function which gets - called to get the address of a so far unresolved function and - jump to it. The profiling extension of the dynamic linker allows - to intercept the calls to collect information. In this case we - don't store the address in the GOT so that all future calls also - end in this function. */ - if (profile) - { - got[2] = (Elf32_Addr) &_dl_runtime_profile; - - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - /* Say that we really want profiling and the timers are - started. */ - GL(dl_profile_map) = l; - } - else - /* This function will get called to fix up the GOT entry indicated by - the offset on the stack, and then jump to the resolved address. */ - got[2] = (Elf32_Addr) &_dl_runtime_resolve; - } - - if (l->l_info[ADDRIDX (DT_TLSDESC_GOT)] && lazy) - *(Elf32_Addr*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_GOT)]) + l->l_addr) - = (Elf32_Addr) &_dl_tlsdesc_lazy_resolver; - - return lazy; -} - -#if defined(ARCH_HAS_BX) -#define BX(x) "bx\t" #x -#else -#define BX(x) "mov\tpc, " #x -#endif - -/* Mask identifying addresses reserved for the user program, - where the dynamic linker should not map anything. */ -#define ELF_MACHINE_USER_ADDRESS_MASK 0xf8000000UL - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START asm ("\ -.text\n\ -.globl _start\n\ -.type _start, %function\n\ -.globl _dl_start_user\n\ -.type _dl_start_user, %function\n\ -_start:\n\ - @ we are PIC code, so get global offset table\n\ - ldr sl, .L_GET_GOT\n\ - @ See if we were run as a command with the executable file\n\ - @ name as an extra leading argument.\n\ - ldr r4, .L_SKIP_ARGS\n\ - @ at start time, all the args are on the stack\n\ - mov r0, sp\n\ - bl _dl_start\n\ - @ returns user entry point in r0\n\ -_dl_start_user:\n\ - adr r6, .L_GET_GOT\n\ - add sl, sl, r6\n\ - ldr r4, [sl, r4]\n\ - @ save the entry point in another register\n\ - mov r6, r0\n\ - @ get the original arg count\n\ - ldr r1, [sp]\n\ - @ get the argv address\n\ - add r2, sp, #4\n\ - @ Fix up the stack if necessary.\n\ - cmp r4, #0\n\ - bne .L_fixup_stack\n\ -.L_done_fixup:\n\ - @ compute envp\n\ - add r3, r2, r1, lsl #2\n\ - add r3, r3, #4\n\ - @ now we call _dl_init\n\ - ldr r0, .L_LOADED\n\ - ldr r0, [sl, r0]\n\ - @ call _dl_init\n\ - bl _dl_init(PLT)\n\ - @ load the finalizer function\n\ - ldr r0, .L_FINI_PROC\n\ - add r0, sl, r0\n\ - @ jump to the user_s entry point\n\ - " BX(r6) "\n\ -\n\ - @ iWMMXt and EABI targets require the stack to be eight byte\n\ - @ aligned - shuffle arguments etc.\n\ -.L_fixup_stack:\n\ - @ subtract _dl_skip_args from original arg count\n\ - sub r1, r1, r4\n\ - @ store the new argc in the new stack location\n\ - str r1, [sp]\n\ - @ find the first unskipped argument\n\ - mov r3, r2\n\ - add r4, r2, r4, lsl #2\n\ - @ shuffle argv down\n\ -1: ldr r5, [r4], #4\n\ - str r5, [r3], #4\n\ - cmp r5, #0\n\ - bne 1b\n\ - @ shuffle envp down\n\ -1: ldr r5, [r4], #4\n\ - str r5, [r3], #4\n\ - cmp r5, #0\n\ - bne 1b\n\ - @ shuffle auxv down\n\ -1: ldmia r4!, {r0, r5}\n\ - stmia r3!, {r0, r5}\n\ - cmp r0, #0\n\ - bne 1b\n\ - @ Update _dl_argv\n\ - ldr r3, .L_ARGV\n\ - str r2, [sl, r3]\n\ - b .L_done_fixup\n\ -\n\ -.L_GET_GOT:\n\ - .word _GLOBAL_OFFSET_TABLE_ - .L_GET_GOT\n\ -.L_SKIP_ARGS:\n\ - .word _dl_skip_args(GOTOFF)\n\ -.L_FINI_PROC:\n\ - .word _dl_fini(GOTOFF)\n\ -.L_ARGV:\n\ - .word _dl_argv(GOTOFF)\n\ -.L_LOADED:\n\ - .word _rtld_local(GOTOFF)\n\ -.previous\n\ -"); - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or - TLS variable, so undefined references should not be allowed to - define the value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. - ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA iff TYPE describes relocation against - protected data whose address may be external due to copy relocation. */ -#ifndef RTLD_BOOTSTRAP -# define elf_machine_type_class(type) \ - ((((type) == R_ARM_JUMP_SLOT || (type) == R_ARM_TLS_DTPMOD32 \ - || (type) == R_ARM_TLS_DTPOFF32 || (type) == R_ARM_TLS_TPOFF32 \ - || (type) == R_ARM_TLS_DESC) \ - * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_ARM_COPY) * ELF_RTYPE_CLASS_COPY) \ - | (((type) == R_ARM_GLOB_DAT) * ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA)) -#else -#define elf_machine_type_class(type) \ - ((((type) == R_ARM_JUMP_SLOT) * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_ARM_COPY) * ELF_RTYPE_CLASS_COPY) \ - | (((type) == R_ARM_GLOB_DAT) * ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA)) -#endif - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_ARM_JUMP_SLOT - -/* ARM never uses Elf32_Rela relocations for the dynamic linker. - Prelinked libraries may use Elf32_Rela though. */ -#define ELF_MACHINE_PLT_REL 1 - -/* We define an initialization functions. This is called very early in - _dl_sysdep_start. */ -#define DL_PLATFORM_INIT dl_platform_init () - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ - if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') - /* Avoid an empty string which would disturb us. */ - GLRO(dl_platform) = NULL; -} - -static inline Elf32_Addr -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf32_Rel *reloc, - Elf32_Addr *reloc_addr, Elf32_Addr value) -{ - return *reloc_addr = value; -} - -/* Return the final value of a plt relocation. */ -static inline Elf32_Addr -elf_machine_plt_value (struct link_map *map, const Elf32_Rel *reloc, - Elf32_Addr value) -{ - return value; -} - -#endif /* !dl_machine_h */ - - -/* ARM never uses Elf32_Rela relocations for the dynamic linker. - Prelinked libraries may use Elf32_Rela though. */ -#define ELF_MACHINE_NO_RELA defined RTLD_BOOTSTRAP -#define ELF_MACHINE_NO_REL 0 - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER arm_gnu_pltenter -#define ARCH_LA_PLTEXIT arm_gnu_pltexit - -#ifdef RESOLVE_MAP -/* Handle a PC24 reloc, including the out-of-range case. */ -auto void -relocate_pc24 (struct link_map *map, Elf32_Addr value, - Elf32_Addr *const reloc_addr, Elf32_Sword addend) -{ - Elf32_Addr new_value; - - /* Set NEW_VALUE based on V, and return true iff it overflows 24 bits. */ - inline bool set_new_value (Elf32_Addr v) - { - new_value = v + addend - (Elf32_Addr) reloc_addr; - Elf32_Addr topbits = new_value & 0xfe000000; - return topbits != 0xfe000000 && topbits != 0x00000000; - } - - if (set_new_value (value)) - { - /* The PC-relative address doesn't fit in 24 bits! */ - - static void *fix_page; - static size_t fix_offset; - if (fix_page == NULL) - { - void *new_page = __mmap (NULL, GLRO(dl_pagesize), - PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANON, -1, 0); - if (new_page == MAP_FAILED) - _dl_signal_error (0, map->l_name, NULL, - "could not map page for fixup"); - fix_page = new_page; - assert (fix_offset == 0); - } - - Elf32_Word *fix_address = fix_page + fix_offset; - fix_address[0] = 0xe51ff004; /* ldr pc, [pc, #-4] */ - fix_address[1] = value; - - fix_offset += sizeof fix_address[0] * 2; - if (fix_offset >= GLRO(dl_pagesize)) - { - fix_page = NULL; - fix_offset = 0; - } - - if (set_new_value ((Elf32_Addr) fix_address)) - _dl_signal_error (0, map->l_name, NULL, - "R_ARM_PC24 relocation out of range"); - } - - *reloc_addr = (*reloc_addr & 0xff000000) | ((new_value >> 2) & 0x00ffffff); -} - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, - const Elf32_Sym *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC - if (__builtin_expect (r_type == R_ARM_RELATIVE, 0)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; - make the reference weak so static programs can still link. - This declaration cannot be done when compiling rtld.c - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the - common defn for _dl_rtld_map, which is incompatible with a - weak decl in the same file. */ -# ifndef SHARED - weak_extern (_dl_rtld_map); -# endif - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ -# endif - *reloc_addr += map->l_addr; - } -# ifndef RTLD_BOOTSTRAP - else if (__builtin_expect (r_type == R_ARM_NONE, 0)) - return; -# endif - else -#endif - { - const Elf32_Sym *const refsym = sym; - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - Elf32_Addr value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; - - if (sym != NULL - && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0) - && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) - && __builtin_expect (!skip_ifunc, 1)) - value = elf_ifunc_invoke (value); - - switch (r_type) - { - case R_ARM_COPY: - if (sym == NULL) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (sym->st_size > refsym->st_size - || (GLRO(dl_verbose) && sym->st_size < refsym->st_size)) - { - const char *strtab; - - strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - break; - case R_ARM_GLOB_DAT: - case R_ARM_JUMP_SLOT: -# ifdef RTLD_BOOTSTRAP - /* Fix weak undefined references. */ - if (sym != NULL && sym->st_value == 0) - *reloc_addr = 0; - else -# endif - *reloc_addr = value; - break; - case R_ARM_ABS32: - { - struct unaligned - { - Elf32_Addr x; - } __attribute__ ((packed, may_alias)); -# ifndef RTLD_BOOTSTRAP - /* This is defined in rtld.c, but nowhere in the static - libc.a; make the reference weak so static programs can - still link. This declaration cannot be done when - compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) because - rtld.c contains the common defn for _dl_rtld_map, which - is incompatible with a weak decl in the same file. */ -# ifndef SHARED - weak_extern (_dl_rtld_map); -# endif - if (map == &GL(dl_rtld_map)) - /* Undo the relocation done here during bootstrapping. - Now we will relocate it anew, possibly using a - binding found in the user program or a loaded library - rather than the dynamic linker's built-in definitions - used while loading those libraries. */ - value -= map->l_addr + refsym->st_value; -# endif - /* Support relocations on mis-aligned offsets. */ - ((struct unaligned *) reloc_addr)->x += value; - break; - } - case R_ARM_TLS_DESC: - { - struct tlsdesc volatile *td = - (struct tlsdesc volatile *)reloc_addr; - -# ifndef RTLD_BOOTSTRAP - if (! sym) - td->entry = _dl_tlsdesc_undefweak; - else -# endif - { - if (ELF32_R_SYM (reloc->r_info) == STN_UNDEF) - value = td->argument.value; - else - value = sym->st_value; - -# ifndef RTLD_BOOTSTRAP -# ifndef SHARED - CHECK_STATIC_TLS (map, sym_map); -# else - if (!TRY_STATIC_TLS (map, sym_map)) - { - td->argument.pointer - = _dl_make_tlsdesc_dynamic (sym_map, value); - td->entry = _dl_tlsdesc_dynamic; - } - else -# endif -# endif - { - td->argument.value = value + sym_map->l_tls_offset; - td->entry = _dl_tlsdesc_return; - } - } - } - break; - case R_ARM_PC24: - relocate_pc24 (map, value, reloc_addr, - /* Sign-extend the 24-bit addend in the - instruction (which counts instructions), and - then shift it up two so as to count bytes. */ - (((Elf32_Sword) *reloc_addr << 8) >> 8) << 2); - break; -#if !defined RTLD_BOOTSTRAP - case R_ARM_TLS_DTPMOD32: - /* Get the information from the link map returned by the - resolv function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; - break; - - case R_ARM_TLS_DTPOFF32: - if (sym != NULL) - *reloc_addr += sym->st_value; - break; - - case R_ARM_TLS_TPOFF32: - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr += sym->st_value + sym_map->l_tls_offset; - } - break; - case R_ARM_IRELATIVE: - value = map->l_addr + *reloc_addr; - value = ((Elf32_Addr (*) (int)) value) (GLRO(dl_hwcap)); - *reloc_addr = value; - break; -#endif - default: - _dl_reloc_bad_type (map, r_type, 0); - break; - } - } -} - -# ifndef RTLD_BOOTSTRAP -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, - const Elf32_Sym *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - - if (__builtin_expect (r_type == R_ARM_RELATIVE, 0)) - *reloc_addr = map->l_addr + reloc->r_addend; - else if (__builtin_expect (r_type == R_ARM_NONE, 0)) - return; - else - { -# ifndef RESOLVE_CONFLICT_FIND_MAP - const Elf32_Sym *const refsym = sym; -# endif - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - Elf32_Addr value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; - - if (sym != NULL - && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0) - && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) - && __builtin_expect (!skip_ifunc, 1)) - value = elf_ifunc_invoke (value); - - switch (r_type) - { -# ifndef RESOLVE_CONFLICT_FIND_MAP - /* Not needed for dl-conflict.c. */ - case R_ARM_COPY: - if (sym == NULL) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (sym->st_size > refsym->st_size - || (GLRO(dl_verbose) && sym->st_size < refsym->st_size)) - { - const char *strtab; - - strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - break; -# endif /* !RESOLVE_CONFLICT_FIND_MAP */ - case R_ARM_GLOB_DAT: - case R_ARM_JUMP_SLOT: - case R_ARM_ABS32: - *reloc_addr = value + reloc->r_addend; - break; -# ifdef RESOLVE_CONFLICT_FIND_MAP - case R_ARM_TLS_DESC: - { - struct tlsdesc volatile *td __attribute__ ((unused)) = - (struct tlsdesc volatile *) reloc_addr; - - RESOLVE_CONFLICT_FIND_MAP (map, reloc_addr); - - /* Make sure we know what's going on. */ - assert (td->entry - == (void *) (D_PTR (map, l_info[ADDRIDX (DT_TLSDESC_PLT)]) - + map->l_addr)); - assert (map->l_info[ADDRIDX (DT_TLSDESC_GOT)]); - - /* Set up the lazy resolver and store the pointer to our link - map in _GLOBAL_OFFSET_TABLE[1] now as for a prelinked - binary elf_machine_runtime_setup() is not called and hence - neither has been initialized. */ - *(Elf32_Addr *) (D_PTR (map, l_info[ADDRIDX (DT_TLSDESC_GOT)]) - + map->l_addr) - = (Elf32_Addr) &_dl_tlsdesc_lazy_resolver; - ((Elf32_Addr *) D_PTR (map, l_info[DT_PLTGOT]))[1] - = (Elf32_Addr) map; - } - break; -# endif /* RESOLVE_CONFLICT_FIND_MAP */ - case R_ARM_PC24: - relocate_pc24 (map, value, reloc_addr, reloc->r_addend); - break; -#if !defined RTLD_BOOTSTRAP - case R_ARM_TLS_DTPMOD32: - /* Get the information from the link map returned by the - resolv function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; - break; - - case R_ARM_TLS_DTPOFF32: - *reloc_addr = (sym == NULL ? 0 : sym->st_value) + reloc->r_addend; - break; - - case R_ARM_TLS_TPOFF32: - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = (sym->st_value + sym_map->l_tls_offset - + reloc->r_addend); - } - break; - case R_ARM_IRELATIVE: - value = map->l_addr + reloc->r_addend; - value = ((Elf32_Addr (*) (int)) value) (GLRO(dl_hwcap)); - *reloc_addr = value; - break; -#endif - default: - _dl_reloc_bad_type (map, r_type, 0); - break; - } - } -} -# endif - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rel_relative (Elf32_Addr l_addr, const Elf32_Rel *reloc, - void *const reloc_addr_arg) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - *reloc_addr += l_addr; -} - -# ifndef RTLD_BOOTSTRAP -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, - void *const reloc_addr_arg) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - *reloc_addr = l_addr + reloc->r_addend; -} -# endif - -auto inline void -__attribute__ ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf32_Addr l_addr, const Elf32_Rel *reloc, - int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - /* Check for unexpected PLT reloc type. */ - if (__builtin_expect (r_type == R_ARM_JUMP_SLOT, 1)) - { - if (__builtin_expect (map->l_mach.plt, 0) == 0) - *reloc_addr += l_addr; - else - *reloc_addr = map->l_mach.plt; - } - else if (__builtin_expect (r_type == R_ARM_TLS_DESC, 1)) - { - struct tlsdesc volatile *td = - (struct tlsdesc volatile *)reloc_addr; - - /* The linker must have given us the parameter we need in the - first GOT entry, and left the second one empty. The latter - will have been preset by the prelinker if used though. - We fill it with the resolver address. */ - assert (td->entry == 0 - || map->l_info[VALIDX (DT_GNU_PRELINKED)] != NULL); - td->entry = (void*)(D_PTR (map, l_info[ADDRIDX (DT_TLSDESC_PLT)]) - + map->l_addr); - } - else - _dl_reloc_bad_type (map, r_type, 1); -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/arm/dl-sysdep.h b/sysdeps/arm/dl-sysdep.h deleted file mode 100644 index ef3e1e429b..0000000000 --- a/sysdeps/arm/dl-sysdep.h +++ /dev/null @@ -1,25 +0,0 @@ -/* System-specific settings for dynamic linker code. Alpha version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include_next - -/* _dl_argv cannot be attribute_relro, because _dl_start_user - might write into it after _dl_start returns. */ -#define DL_ARGV_NOT_RELRO 1 - -#define DL_EXTERN_PROTECTED_DATA diff --git a/sysdeps/arm/dl-tls.h b/sysdeps/arm/dl-tls.h deleted file mode 100644 index 1e47e07668..0000000000 --- a/sysdeps/arm/dl-tls.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. ARM version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct dl_tls_index -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - - -extern void *__tls_get_addr (tls_index *ti); diff --git a/sysdeps/arm/dl-tlsdesc.S b/sysdeps/arm/dl-tlsdesc.S deleted file mode 100644 index e7bed02188..0000000000 --- a/sysdeps/arm/dl-tlsdesc.S +++ /dev/null @@ -1,218 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. ARM version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include "tlsdesc.h" - - .text - @ emit debug information with cfi - @ use arm-specific pseudos for unwinding itself - CFI_SECTIONS - .hidden _dl_tlsdesc_return - .global _dl_tlsdesc_return - .type _dl_tlsdesc_return,#function - cfi_startproc - eabi_fnstart - .align 2 -_dl_tlsdesc_return: - ldr r0, [r0] - BX (lr) - eabi_fnend - cfi_endproc - .size _dl_tlsdesc_return, .-_dl_tlsdesc_return - - .hidden _dl_tlsdesc_undefweak - .global _dl_tlsdesc_undefweak - .type _dl_tlsdesc_undefweak,#function - cfi_startproc - eabi_fnstart - .align 2 -_dl_tlsdesc_undefweak: - GET_TLS (r1) - rsb r0, r0, #0 - BX (lr) - cfi_endproc - eabi_fnend - .size _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak - -#ifdef SHARED - .hidden _dl_tlsdesc_dynamic - .global _dl_tlsdesc_dynamic - .type _dl_tlsdesc_dynamic,#function - - -/* - The assembly code that follows is a rendition of the following - C code, hand-optimized a little bit. - -ptrdiff_t -_dl_tlsdesc_dynamic(struct tlsdesc *tdp) -{ - struct tlsdesc_dynamic_arg *td = tdp->argument.pointer; - dtv_t *dtv = (dtv_t *)THREAD_DTV(); - if (__builtin_expect (td->gen_count <= dtv[0].counter - && dtv[td->tlsinfo.ti_module].pointer.val - != TLS_DTV_UNALLOCATED, - 1)) - return dtv[td->tlsinfo.ti_module].pointer.val + - td->tlsinfo.ti_offset - __builtin_thread_pointer(); - - return __tls_get_addr (&td->tlsinfo) - __builtin_thread_pointer(); -} - -*/ - cfi_startproc - eabi_fnstart - .align 2 -_dl_tlsdesc_dynamic: - /* Our calling convention is to clobber r0, r1 and the processor - flags. All others that are modified must be saved */ - eabi_save ({r2,r3,r4,lr}) - push {r2,r3,r4,lr} - cfi_adjust_cfa_offset (16) - cfi_rel_offset (r2,0) - cfi_rel_offset (r3,4) - cfi_rel_offset (r4,8) - cfi_rel_offset (lr,12) - ldr r1, [r0] /* td */ - GET_TLS (lr) - mov r4, r0 /* r4 = tp */ - ldr r0, [r0] - ldr r2, [r1, #8] /* gen_count */ - ldr r3, [r0] - cmp r2, r3 - bhi 1f - ldr r3, [r1] -#ifndef ARM_NO_INDEX_REGISTER - ldr r2, [r0, r3, lsl #3] -#else - add lr, r0, r3, lsl #3 - ldr r2, [lr] -#endif - cmn r2, #1 - ittt ne - ldrne r3, [r1, #4] - addne r3, r2, r3 - rsbne r0, r4, r3 - bne 2f -1: mov r0, r1 - bl __tls_get_addr - rsb r0, r4, r0 -2: -#if ((defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)) \ - || defined (ARM_ALWAYS_BX)) - pop {r2,r3,r4, lr} - cfi_adjust_cfa_offset (-16) - cfi_restore (lr) - cfi_restore (r4) - cfi_restore (r3) - cfi_restore (r2) - bx lr -#else - pop {r2,r3,r4, pc} -#endif - eabi_fnend - cfi_endproc - .size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic -#endif /* SHARED */ - -/* lazy resolved for tls descriptors. */ - .hidden _dl_tlsdesc_lazy_resolver - .global _dl_tlsdesc_lazy_resolver - .type _dl_tlsdesc_lazy_resolver,#function - cfi_startproc - eabi_fnstart - .align 2 -_dl_tlsdesc_lazy_resolver: - /* r0 points at the tlsdesc, - r1 points at the GOT - r2 was pushed by the trampoline and used as a temp, - we need to pop it here. - We push the remaining call-clobbered registers here, and also - R1 -- to keep the stack correctly aligned. */ - /* Tell the unwinder that r2 has already been pushed. */ - eabi_save ({r2}) - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r2, 0) - eabi_save ({r0,r1,r3,ip,lr}) - push {r0, r1, r3, ip, lr} - cfi_adjust_cfa_offset (20) - cfi_rel_offset (r0, 0) - cfi_rel_offset (r1, 4) - cfi_rel_offset (r3, 8) - cfi_rel_offset (ip, 12) - cfi_rel_offset (lr, 16) - bl _dl_tlsdesc_lazy_resolver_fixup - pop {r0, r1, r3, ip, lr} - cfi_adjust_cfa_offset (-20) - cfi_restore (lr) - cfi_restore (ip) - cfi_restore (r3) - cfi_restore (r1) - cfi_restore (r0) - pop {r2} - cfi_adjust_cfa_offset (-4) - cfi_restore (r2) - ldr r1, [r0, #4] - BX (r1) - eabi_fnend - cfi_endproc - .size _dl_tlsdesc_lazy_resolver, .-_dl_tlsdesc_lazy_resolver - -/* Holder for lazy tls descriptors being resolve in another thread. - - Our calling convention is to clobber r0, r1 and the processor - flags. All others that are modified must be saved */ - .hidden _dl_tlsdesc_resolve_hold - .global _dl_tlsdesc_resolve_hold - .type _dl_tlsdesc_resolve_hold,#function - cfi_startproc - eabi_fnstart - .align 2 -_dl_tlsdesc_resolve_hold: - /* r0 is saved so its original value can be used after the call and - r1 is saved only to keep the stack aligned. (r0 points to the tls - descriptor, it is passed to _dl_tlsdesc_resolve_hold_fixup which - is a void function that may clobber r0, later r0 is used to load - the new resolver.) */ - eabi_save ({r0,r1,r2,r3,ip,lr}) - push {r0, r1, r2, r3, ip, lr} - cfi_adjust_cfa_offset (24) - cfi_rel_offset (r0, 0) - cfi_rel_offset (r1, 4) - cfi_rel_offset (r2, 8) - cfi_rel_offset (r3, 12) - cfi_rel_offset (ip, 16) - cfi_rel_offset (lr, 20) - adr r1, _dl_tlsdesc_resolve_hold - bl _dl_tlsdesc_resolve_hold_fixup - pop {r0, r1, r2, r3, ip, lr} - cfi_adjust_cfa_offset (-24) - cfi_restore (lr) - cfi_restore (ip) - cfi_restore (r3) - cfi_restore (r2) - cfi_restore (r1) - cfi_restore (r0) - ldr r1, [r0, #4] - BX (r1) - eabi_fnend - cfi_endproc - .size _dl_tlsdesc_resolve_hold, .-_dl_tlsdesc_resolve_hold diff --git a/sysdeps/arm/dl-tlsdesc.h b/sysdeps/arm/dl-tlsdesc.h deleted file mode 100644 index 2770af0260..0000000000 --- a/sysdeps/arm/dl-tlsdesc.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Thread-local storage descriptor handling in the ELF dynamic linker. - ARM version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; witout even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _ARM_DL_TLSDESC_H -# define _ARM_DL_TLSDESC_H 1 - -/* Type used to represent a TLS descriptor in the GOT. */ -struct tlsdesc -{ - union - { - void *pointer; - long value; - } argument; - ptrdiff_t (*entry)(struct tlsdesc *); -}; - - -typedef struct dl_tls_index -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - -/* Type used as the argument in a TLS descriptor for a symbol that - needs dynamic TLS offsets. */ -struct tlsdesc_dynamic_arg -{ - tls_index tlsinfo; - size_t gen_count; -}; - -extern ptrdiff_t attribute_hidden - _dl_tlsdesc_return(struct tlsdesc *), - _dl_tlsdesc_undefweak(struct tlsdesc *), - _dl_tlsdesc_resolve_hold(struct tlsdesc *), - _dl_tlsdesc_lazy_resolver(struct tlsdesc *); - -# ifdef SHARED -extern void *_dl_make_tlsdesc_dynamic (struct link_map *map, size_t ti_offset); - -extern ptrdiff_t attribute_hidden - _dl_tlsdesc_dynamic(struct tlsdesc *); -# endif - -#endif diff --git a/sysdeps/arm/dl-trampoline.S b/sysdeps/arm/dl-trampoline.S deleted file mode 100644 index 95d2efc8ea..0000000000 --- a/sysdeps/arm/dl-trampoline.S +++ /dev/null @@ -1,212 +0,0 @@ -/* PLT trampolines. ARM version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* ??? Needs more rearrangement for the LDM to handle thumb mode. */ -#define NO_THUMB -#include -#include - - .text - .globl _dl_runtime_resolve - .type _dl_runtime_resolve, #function - CFI_SECTIONS - cfi_startproc - .align 2 -_dl_runtime_resolve: - cfi_adjust_cfa_offset (4) - cfi_rel_offset (lr, 0) - - @ we get called with - @ stack[0] contains the return address from this call - @ ip contains &GOT[n+3] (pointer to function) - @ lr points to &GOT[2] - - @ Save arguments. We save r4 to realign the stack. - push {r0-r4} - cfi_adjust_cfa_offset (20) - cfi_rel_offset (r0, 0) - cfi_rel_offset (r1, 4) - cfi_rel_offset (r2, 8) - cfi_rel_offset (r3, 12) - - @ get pointer to linker struct - ldr r0, [lr, #-4] - - @ prepare to call _dl_fixup() - @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each - sub r1, ip, lr - sub r1, r1, #4 - add r1, r1, r1 - - @ call fixup routine - bl _dl_fixup - - @ save the return - mov ip, r0 - - @ get arguments and return address back. We restore r4 - @ only to realign the stack. - pop {r0-r4,lr} - cfi_adjust_cfa_offset (-24) - - @ jump to the newly found address - BX(ip) - - cfi_endproc - .size _dl_runtime_resolve, .-_dl_runtime_resolve - -#ifndef PROF - .globl _dl_runtime_profile - .type _dl_runtime_profile, #function - CFI_SECTIONS - cfi_startproc - .align 2 -_dl_runtime_profile: - cfi_adjust_cfa_offset (4) - cfi_rel_offset (lr, 0) - - @ we get called with - @ stack[0] contains the return address from this call - @ ip contains &GOT[n+3] (pointer to function) - @ lr points to &GOT[2] - - @ Stack layout: - @ 212 - saved lr - @ 208 - framesize returned from pltenter - @ 16 - La_arm_regs - @ 8 - Saved two arguments to _dl_profile_fixup - @ 4 - Saved result of _dl_profile_fixup - @ 0 - outgoing argument to _dl_profile_fixup - @ For now, we only save the general purpose registers. - - sub sp, sp, #196 - cfi_adjust_cfa_offset (196) - stmia sp, {r0-r3} - cfi_rel_offset (r0, 0) - cfi_rel_offset (r1, 4) - cfi_rel_offset (r2, 8) - cfi_rel_offset (r3, 12) - - sub sp, sp, #16 - cfi_adjust_cfa_offset (16) - - @ Save sp and lr. - add r0, sp, #216 - str r0, [sp, #32] - ldr r2, [sp, #212] - str r2, [sp, #36] - - @ get pointer to linker struct - ldr r0, [lr, #-4] - - @ prepare to call _dl_profile_fixup() - @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each - sub r1, ip, lr - sub r1, r1, #4 - add r1, r1, r1 - - @ Save these two arguments for pltexit. - add r3, sp, #8 - stmia r3!, {r0,r1} - - @ Set up extra args for _dl_profile_fixup. - @ r2 and r3 are already loaded. - add ip, sp, #208 - str ip, [sp, #0] - - @ call profiling fixup routine - bl _dl_profile_fixup - - @ The address to call is now in r0. - - @ Check whether we're wrapping this function. - ldr ip, [sp, #208] - cmp ip, #0 - bge 1f - cfi_remember_state - - @ save the return - mov ip, r0 - - @ get arguments and return address back - add sp, sp, #16 - cfi_adjust_cfa_offset (-16) - ldmia sp, {r0-r3,sp,lr} - cfi_adjust_cfa_offset (-200) - - @ jump to the newly found address - BX(ip) - - cfi_restore_state -1: - @ The new frame size is in ip. - - @ New stack layout: - @ 268 - saved r7 - @ 264 - saved result of _dl_profile_fixup - @ 72 - La_arm_regs - @ 64 - Saved two arguments to _dl_profile_fixup - @ 0 - La_arm_retval - @ For now, we only save the general purpose registers. - - @ Build the new frame. - str r7, [sp, #212] - cfi_rel_offset (r7, 212) - sub r7, sp, #56 - cfi_def_cfa_register (r7) - cfi_adjust_cfa_offset (56) - sub sp, sp, ip - bic sp, sp, #7 - - @ Save the _dl_profile_fixup result around the call to memcpy. - str r0, [r7, #264] - - @ Copy the stack arguments. - mov r0, sp - add r1, r7, #272 - mov r2, ip - bl memcpy - - @ Call the function. - add ip, r7, #72 - ldmia ip, {r0-r3} - ldr ip, [r7, #264] - BLX(ip) - stmia r7, {r0-r3} - - @ Call pltexit. - add ip, r7, #64 - ldmia ip, {r0,r1} - add r2, r7, #72 - add r3, r7, #0 - bl _dl_call_pltexit - - @ Return to caller. - ldmia r7, {r0-r3} - mov sp, r7 - cfi_def_cfa_register (sp) - ldr r7, [sp, #268] - ldr lr, [sp, #92] - add sp, sp, #272 - cfi_adjust_cfa_offset (-272) - BX(lr) - - cfi_endproc - .size _dl_runtime_profile, .-_dl_runtime_profile -#endif - .previous diff --git a/sysdeps/arm/e_sqrt.c b/sysdeps/arm/e_sqrt.c deleted file mode 100644 index 1f7d00806f..0000000000 --- a/sysdeps/arm/e_sqrt.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Compute square root for double. ARM version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef __SOFTFP__ - -/* Use architecture-indendent sqrt implementation. */ -# include - -#else - -/* Use VFP square root instruction. */ -# include -# include - -double -__ieee754_sqrt (double x) -{ - double ret; -# if __ARM_ARCH >= 6 - asm ("vsqrt.f64 %P0, %P1" : "=w" (ret) : "w" (x)); -# else - /* As in GCC, for VFP9 Erratum 760019 avoid overwriting the - input. */ - asm ("vsqrt.f64 %P0, %P1" : "=&w" (ret) : "w" (x)); -# endif - return ret; -} -strong_alias (__ieee754_sqrt, __sqrt_finite) - -#endif diff --git a/sysdeps/arm/e_sqrtf.c b/sysdeps/arm/e_sqrtf.c deleted file mode 100644 index abf1a7739f..0000000000 --- a/sysdeps/arm/e_sqrtf.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Compute square root for float. ARM version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef __SOFTFP__ - -/* Use architecture-indendent sqrtf implementation. */ -# include - -#else - -/* Use VFP square root instruction. */ -# include -# include - -float -__ieee754_sqrtf (float x) -{ - float ret; -# if __ARM_ARCH >= 6 - asm ("vsqrt.f32 %0, %1" : "=t" (ret) : "t" (x)); -# else - /* As in GCC, for VFP9 Erratum 760019 avoid overwriting the - input. */ - asm ("vsqrt.f32 %0, %1" : "=&t" (ret) : "t" (x)); -# endif - return ret; -} -strong_alias (__ieee754_sqrtf, __sqrtf_finite) - -#endif diff --git a/sysdeps/arm/fclrexcpt.c b/sysdeps/arm/fclrexcpt.c deleted file mode 100644 index 6abaf4f003..0000000000 --- a/sysdeps/arm/fclrexcpt.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - - -int -feclearexcept (int excepts) -{ - fpu_control_t fpscr, new_fpscr; - - /* Fail if a VFP unit isn't present unless nothing needs to be done. */ - if (!ARM_HAVE_VFP) - return (excepts != 0); - - _FPU_GETCW (fpscr); - excepts &= FE_ALL_EXCEPT; - new_fpscr = fpscr & ~excepts; - - /* Write new exception flags if changed. */ - if (new_fpscr != fpscr) - _FPU_SETCW (new_fpscr); - - return 0; -} -libm_hidden_def (feclearexcept) diff --git a/sysdeps/arm/fedisblxcpt.c b/sysdeps/arm/fedisblxcpt.c deleted file mode 100644 index d0b3edef50..0000000000 --- a/sysdeps/arm/fedisblxcpt.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - - -int -fedisableexcept (int excepts) -{ - fpu_control_t fpscr, new_fpscr; - - /* Fail if a VFP unit isn't present. */ - if (!ARM_HAVE_VFP) - return -1; - - _FPU_GETCW (fpscr); - excepts &= FE_ALL_EXCEPT; - new_fpscr = fpscr & ~(excepts << FE_EXCEPT_SHIFT); - - /* Write new exceptions if changed. */ - if (new_fpscr != fpscr) - _FPU_SETCW (new_fpscr); - - return (fpscr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/arm/feenablxcpt.c b/sysdeps/arm/feenablxcpt.c deleted file mode 100644 index 6e36371da3..0000000000 --- a/sysdeps/arm/feenablxcpt.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - - -int -feenableexcept (int excepts) -{ - fpu_control_t fpscr, new_fpscr, updated_fpscr; - - /* Fail if a VFP unit isn't present. */ - if (!ARM_HAVE_VFP) - return -1; - - _FPU_GETCW (fpscr); - excepts &= FE_ALL_EXCEPT; - new_fpscr = fpscr | (excepts << FE_EXCEPT_SHIFT); - - if (new_fpscr != fpscr) - { - _FPU_SETCW (new_fpscr); - - /* Not all VFP architectures support trapping exceptions, so - test whether the relevant bits were set and fail if not. */ - _FPU_GETCW (updated_fpscr); - - if (new_fpscr & ~updated_fpscr) - return -1; - } - - return (fpscr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/arm/fegetenv.c b/sysdeps/arm/fegetenv.c deleted file mode 100644 index b76524194e..0000000000 --- a/sysdeps/arm/fegetenv.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - - -int -__fegetenv (fenv_t *envp) -{ - fpu_control_t fpscr; - - /* Fail if a VFP unit isn't present. */ - if (!ARM_HAVE_VFP) - return 1; - - _FPU_GETCW (fpscr); - envp->__cw = fpscr; - return 0; -} -libm_hidden_def (__fegetenv) -weak_alias (__fegetenv, fegetenv) -libm_hidden_weak (fegetenv) diff --git a/sysdeps/arm/fegetexcept.c b/sysdeps/arm/fegetexcept.c deleted file mode 100644 index 0757b52975..0000000000 --- a/sysdeps/arm/fegetexcept.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Get floating-point exceptions. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell , 2001 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - - -int -fegetexcept (void) -{ - fpu_control_t fpscr; - - /* Return with all exceptions disabled if a VFP unit isn't present. */ - if (!ARM_HAVE_VFP) - return 0; - - _FPU_GETCW (fpscr); - - return (fpscr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/arm/fegetmode.c b/sysdeps/arm/fegetmode.c deleted file mode 100644 index e1acf3a009..0000000000 --- a/sysdeps/arm/fegetmode.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Store current floating-point control modes. ARM version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -fegetmode (femode_t *modep) -{ - if (ARM_HAVE_VFP) - _FPU_GETCW (*modep); - return 0; -} diff --git a/sysdeps/arm/fegetround.c b/sysdeps/arm/fegetround.c deleted file mode 100644 index e16c1d586c..0000000000 --- a/sysdeps/arm/fegetround.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - -int -__fegetround (void) -{ - return get_rounding_mode (); -} -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/arm/feholdexcpt.c b/sysdeps/arm/feholdexcpt.c deleted file mode 100644 index 36ed2408e8..0000000000 --- a/sysdeps/arm/feholdexcpt.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - -int -__feholdexcept (fenv_t *envp) -{ - /* Fail if a VFP unit isn't present. */ - if (!ARM_HAVE_VFP) - return 1; - - libc_feholdexcept_vfp (envp); - return 0; -} -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/arm/fenv_private.h b/sysdeps/arm/fenv_private.h deleted file mode 100644 index af31025d95..0000000000 --- a/sysdeps/arm/fenv_private.h +++ /dev/null @@ -1,249 +0,0 @@ -/* Private floating point rounding and exceptions handling. ARM VFP version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef FENV_PRIVATE_H -#define FENV_PRIVATE_H 1 - -#include -#include - -static __always_inline void -libc_feholdexcept_vfp (fenv_t *envp) -{ - fpu_control_t fpscr; - - _FPU_GETCW (fpscr); - envp->__cw = fpscr; - - /* Clear exception flags and set all exceptions to non-stop. */ - fpscr &= ~_FPU_MASK_EXCEPT; - _FPU_SETCW (fpscr); -} - -static __always_inline void -libc_fesetround_vfp (int round) -{ - fpu_control_t fpscr; - - _FPU_GETCW (fpscr); - - /* Set new rounding mode if different. */ - if (__glibc_unlikely ((fpscr & _FPU_MASK_RM) != round)) - _FPU_SETCW ((fpscr & ~_FPU_MASK_RM) | round); -} - -static __always_inline void -libc_feholdexcept_setround_vfp (fenv_t *envp, int round) -{ - fpu_control_t fpscr; - - _FPU_GETCW (fpscr); - envp->__cw = fpscr; - - /* Clear exception flags, set all exceptions to non-stop, - and set new rounding mode. */ - fpscr &= ~(_FPU_MASK_EXCEPT | _FPU_MASK_RM); - _FPU_SETCW (fpscr | round); -} - -static __always_inline void -libc_feholdsetround_vfp (fenv_t *envp, int round) -{ - fpu_control_t fpscr; - - _FPU_GETCW (fpscr); - envp->__cw = fpscr; - - /* Set new rounding mode if different. */ - if (__glibc_unlikely ((fpscr & _FPU_MASK_RM) != round)) - _FPU_SETCW ((fpscr & ~_FPU_MASK_RM) | round); -} - -static __always_inline void -libc_feresetround_vfp (fenv_t *envp) -{ - fpu_control_t fpscr, round; - - _FPU_GETCW (fpscr); - - /* Check whether rounding modes are different. */ - round = (envp->__cw ^ fpscr) & _FPU_MASK_RM; - - /* Restore the rounding mode if it was changed. */ - if (__glibc_unlikely (round != 0)) - _FPU_SETCW (fpscr ^ round); -} - -static __always_inline int -libc_fetestexcept_vfp (int ex) -{ - fpu_control_t fpscr; - - _FPU_GETCW (fpscr); - return fpscr & ex & FE_ALL_EXCEPT; -} - -static __always_inline void -libc_fesetenv_vfp (const fenv_t *envp) -{ - fpu_control_t fpscr, new_fpscr; - - _FPU_GETCW (fpscr); - new_fpscr = envp->__cw; - - /* Write new FPSCR if different (ignoring NZCV flags). */ - if (__glibc_unlikely (((fpscr ^ new_fpscr) & ~_FPU_MASK_NZCV) != 0)) - _FPU_SETCW (new_fpscr); -} - -static __always_inline int -libc_feupdateenv_test_vfp (const fenv_t *envp, int ex) -{ - fpu_control_t fpscr, new_fpscr; - int excepts; - - _FPU_GETCW (fpscr); - - /* Merge current exception flags with the saved fenv. */ - excepts = fpscr & FE_ALL_EXCEPT; - new_fpscr = envp->__cw | excepts; - - /* Write new FPSCR if different (ignoring NZCV flags). */ - if (__glibc_unlikely (((fpscr ^ new_fpscr) & ~_FPU_MASK_NZCV) != 0)) - _FPU_SETCW (new_fpscr); - - /* Raise the exceptions if enabled in the new FP state. */ - if (__glibc_unlikely (excepts & (new_fpscr >> FE_EXCEPT_SHIFT))) - __feraiseexcept (excepts); - - return excepts & ex; -} - -static __always_inline void -libc_feupdateenv_vfp (const fenv_t *envp) -{ - libc_feupdateenv_test_vfp (envp, 0); -} - -static __always_inline void -libc_feholdsetround_vfp_ctx (struct rm_ctx *ctx, int r) -{ - fpu_control_t fpscr, round; - - _FPU_GETCW (fpscr); - ctx->updated_status = false; - ctx->env.__cw = fpscr; - - /* Check whether rounding modes are different. */ - round = (fpscr ^ r) & _FPU_MASK_RM; - - /* Set the rounding mode if changed. */ - if (__glibc_unlikely (round != 0)) - { - ctx->updated_status = true; - _FPU_SETCW (fpscr ^ round); - } -} - -static __always_inline void -libc_feresetround_vfp_ctx (struct rm_ctx *ctx) -{ - /* Restore the rounding mode if updated. */ - if (__glibc_unlikely (ctx->updated_status)) - { - fpu_control_t fpscr; - - _FPU_GETCW (fpscr); - fpscr = (fpscr & ~_FPU_MASK_RM) | (ctx->env.__cw & _FPU_MASK_RM); - _FPU_SETCW (fpscr); - } -} - -static __always_inline void -libc_fesetenv_vfp_ctx (struct rm_ctx *ctx) -{ - fpu_control_t fpscr, new_fpscr; - - _FPU_GETCW (fpscr); - new_fpscr = ctx->env.__cw; - - /* Write new FPSCR if different (ignoring NZCV flags). */ - if (__glibc_unlikely (((fpscr ^ new_fpscr) & ~_FPU_MASK_NZCV) != 0)) - _FPU_SETCW (new_fpscr); -} - -#ifndef __SOFTFP__ - -# define libc_feholdexcept libc_feholdexcept_vfp -# define libc_feholdexceptf libc_feholdexcept_vfp -# define libc_feholdexceptl libc_feholdexcept_vfp - -# define libc_fesetround libc_fesetround_vfp -# define libc_fesetroundf libc_fesetround_vfp -# define libc_fesetroundl libc_fesetround_vfp - -# define libc_feresetround libc_feresetround_vfp -# define libc_feresetroundf libc_feresetround_vfp -# define libc_feresetroundl libc_feresetround_vfp - -# define libc_feresetround_noex libc_fesetenv_vfp -# define libc_feresetround_noexf libc_fesetenv_vfp -# define libc_feresetround_noexl libc_fesetenv_vfp - -# define libc_feholdexcept_setround libc_feholdexcept_setround_vfp -# define libc_feholdexcept_setroundf libc_feholdexcept_setround_vfp -# define libc_feholdexcept_setroundl libc_feholdexcept_setround_vfp - -# define libc_feholdsetround libc_feholdsetround_vfp -# define libc_feholdsetroundf libc_feholdsetround_vfp -# define libc_feholdsetroundl libc_feholdsetround_vfp - -# define libc_fetestexcept libc_fetestexcept_vfp -# define libc_fetestexceptf libc_fetestexcept_vfp -# define libc_fetestexceptl libc_fetestexcept_vfp - -# define libc_fesetenv libc_fesetenv_vfp -# define libc_fesetenvf libc_fesetenv_vfp -# define libc_fesetenvl libc_fesetenv_vfp - -# define libc_feupdateenv libc_feupdateenv_vfp -# define libc_feupdateenvf libc_feupdateenv_vfp -# define libc_feupdateenvl libc_feupdateenv_vfp - -# define libc_feupdateenv_test libc_feupdateenv_test_vfp -# define libc_feupdateenv_testf libc_feupdateenv_test_vfp -# define libc_feupdateenv_testl libc_feupdateenv_test_vfp - -/* We have support for rounding mode context. */ -#define HAVE_RM_CTX 1 - -# define libc_feholdsetround_ctx libc_feholdsetround_vfp_ctx -# define libc_feresetround_ctx libc_feresetround_vfp_ctx -# define libc_feresetround_noex_ctx libc_fesetenv_vfp_ctx - -# define libc_feholdsetroundf_ctx libc_feholdsetround_vfp_ctx -# define libc_feresetroundf_ctx libc_feresetround_vfp_ctx -# define libc_feresetround_noexf_ctx libc_fesetenv_vfp_ctx - -# define libc_feholdsetroundl_ctx libc_feholdsetround_vfp_ctx -# define libc_feresetroundl_ctx libc_feresetround_vfp_ctx -# define libc_feresetround_noexl_ctx libc_fesetenv_vfp_ctx - -#endif - -#endif /* FENV_PRIVATE_H */ diff --git a/sysdeps/arm/fesetenv.c b/sysdeps/arm/fesetenv.c deleted file mode 100644 index e28d0a5d02..0000000000 --- a/sysdeps/arm/fesetenv.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - - -int -__fesetenv (const fenv_t *envp) -{ - fpu_control_t fpscr, new_fpscr, updated_fpscr; - - /* Fail if a VFP unit isn't present. */ - if (!ARM_HAVE_VFP) - return 1; - - _FPU_GETCW (fpscr); - - if ((envp != FE_DFL_ENV) && (envp != FE_NOMASK_ENV)) - { - /* The new FPSCR is valid, so don't merge the reserved flags. */ - new_fpscr = envp->__cw; - - /* Write new FPSCR if different (ignoring NZCV flags). */ - if (((fpscr ^ new_fpscr) & ~_FPU_MASK_NZCV) != 0) - _FPU_SETCW (new_fpscr); - - return 0; - } - - /* Preserve the reserved FPSCR flags. */ - new_fpscr = fpscr & _FPU_RESERVED; - new_fpscr |= (envp == FE_DFL_ENV) ? _FPU_DEFAULT : _FPU_IEEE; - - if (((new_fpscr ^ fpscr) & ~_FPU_MASK_NZCV) != 0) - { - _FPU_SETCW (new_fpscr); - - /* Not all VFP architectures support trapping exceptions, so - test whether the relevant bits were set and fail if not. */ - _FPU_GETCW (updated_fpscr); - - return new_fpscr & ~updated_fpscr; - } - - return 0; -} -libm_hidden_def (__fesetenv) -weak_alias (__fesetenv, fesetenv) -libm_hidden_weak (fesetenv) diff --git a/sysdeps/arm/fesetexcept.c b/sysdeps/arm/fesetexcept.c deleted file mode 100644 index 994ccf5bb8..0000000000 --- a/sysdeps/arm/fesetexcept.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Set given exception flags. ARM version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -fesetexcept (int excepts) -{ - fpu_control_t fpscr, new_fpscr; - - /* Fail if a VFP unit isn't present unless nothing needs to be done. */ - if (!ARM_HAVE_VFP) - return (excepts != 0); - - _FPU_GETCW (fpscr); - new_fpscr = fpscr | (excepts & FE_ALL_EXCEPT); - if (new_fpscr != fpscr) - _FPU_SETCW (new_fpscr); - - return 0; -} diff --git a/sysdeps/arm/fesetmode.c b/sysdeps/arm/fesetmode.c deleted file mode 100644 index d2006985eb..0000000000 --- a/sysdeps/arm/fesetmode.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Install given floating-point control modes. ARM version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* NZCV flags, QC bit, IDC bit and bits for IEEE exception status. */ -#define FPU_STATUS_BITS 0xf800009f - -int -fesetmode (const femode_t *modep) -{ - fpu_control_t fpscr, new_fpscr; - - if (!ARM_HAVE_VFP) - /* Nothing to do. */ - return 0; - - _FPU_GETCW (fpscr); - if (modep == FE_DFL_MODE) - new_fpscr = (fpscr & (_FPU_RESERVED | FPU_STATUS_BITS)) | _FPU_DEFAULT; - else - new_fpscr = (fpscr & FPU_STATUS_BITS) | (*modep & ~FPU_STATUS_BITS); - - if (((new_fpscr ^ fpscr) & ~_FPU_MASK_NZCV) != 0) - _FPU_SETCW (new_fpscr); - - return 0; -} diff --git a/sysdeps/arm/fesetround.c b/sysdeps/arm/fesetround.c deleted file mode 100644 index e3ebd20055..0000000000 --- a/sysdeps/arm/fesetround.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - -int -__fesetround (int round) -{ - /* FE_TONEAREST is the only supported rounding mode - if a VFP unit isn't present. */ - if (!ARM_HAVE_VFP) - return (round == FE_TONEAREST) ? 0 : 1; - - if (round & ~_FPU_MASK_RM) - return 1; - - libc_fesetround_vfp (round); - return 0; -} -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/arm/feupdateenv.c b/sysdeps/arm/feupdateenv.c deleted file mode 100644 index 21afa51d4a..0000000000 --- a/sysdeps/arm/feupdateenv.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - - -int -__feupdateenv (const fenv_t *envp) -{ - fpu_control_t fpscr, new_fpscr, updated_fpscr; - int excepts; - - /* Fail if a VFP unit isn't present. */ - if (!ARM_HAVE_VFP) - return 1; - - _FPU_GETCW (fpscr); - excepts = fpscr & FE_ALL_EXCEPT; - - if ((envp != FE_DFL_ENV) && (envp != FE_NOMASK_ENV)) - { - /* Merge current exception flags with the saved fenv. */ - new_fpscr = envp->__cw | excepts; - - /* Write new FPSCR if different (ignoring NZCV flags). */ - if (((fpscr ^ new_fpscr) & ~_FPU_MASK_NZCV) != 0) - _FPU_SETCW (new_fpscr); - - /* Raise the exceptions if enabled in the new FP state. */ - if (excepts & (new_fpscr >> FE_EXCEPT_SHIFT)) - return __feraiseexcept (excepts); - - return 0; - } - - /* Preserve the reserved FPSCR flags. */ - new_fpscr = fpscr & (_FPU_RESERVED | FE_ALL_EXCEPT); - new_fpscr |= (envp == FE_DFL_ENV) ? _FPU_DEFAULT : _FPU_IEEE; - - if (((new_fpscr ^ fpscr) & ~_FPU_MASK_NZCV) != 0) - { - _FPU_SETCW (new_fpscr); - - /* Not all VFP architectures support trapping exceptions, so - test whether the relevant bits were set and fail if not. */ - _FPU_GETCW (updated_fpscr); - - if (new_fpscr & ~updated_fpscr) - return 1; - } - - /* Raise the exceptions if enabled in the new FP state. */ - if (excepts & (new_fpscr >> FE_EXCEPT_SHIFT)) - return __feraiseexcept (excepts); - - return 0; -} -libm_hidden_def (__feupdateenv) -weak_alias (__feupdateenv, feupdateenv) -libm_hidden_weak (feupdateenv) diff --git a/sysdeps/arm/fgetexcptflg.c b/sysdeps/arm/fgetexcptflg.c deleted file mode 100644 index 272dd22e9c..0000000000 --- a/sysdeps/arm/fgetexcptflg.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - -int -fegetexceptflag (fexcept_t *flagp, int excepts) -{ - /* Fail if a VFP unit isn't present. */ - if (!ARM_HAVE_VFP) - return 1; - - *flagp = libc_fetestexcept_vfp (excepts); - return 0; -} diff --git a/sysdeps/arm/find_exidx.c b/sysdeps/arm/find_exidx.c deleted file mode 100644 index 1e6f1dc773..0000000000 --- a/sysdeps/arm/find_exidx.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -struct unw_eh_callback_data -{ - _Unwind_Ptr pc; - _Unwind_Ptr exidx_start; - int exidx_len; -}; - - -/* Callback to determins if the PC lies within an object, and remember the - location of the exception index table if it does. */ - -static int -find_exidx_callback (struct dl_phdr_info * info, size_t size, void * ptr) -{ - struct unw_eh_callback_data * data; - const ElfW(Phdr) *phdr; - int i; - int match; - _Unwind_Ptr load_base; - - data = (struct unw_eh_callback_data *) ptr; - load_base = info->dlpi_addr; - phdr = info->dlpi_phdr; - - match = 0; - for (i = info->dlpi_phnum; i > 0; i--, phdr++) - { - if (phdr->p_type == PT_LOAD) - { - _Unwind_Ptr vaddr = phdr->p_vaddr + load_base; - if (data->pc >= vaddr && data->pc < vaddr + phdr->p_memsz) - match = 1; - } - else if (phdr->p_type == PT_ARM_EXIDX) - { - data->exidx_start = (_Unwind_Ptr) (phdr->p_vaddr + load_base); - data->exidx_len = phdr->p_memsz; - } - } - - return match; -} - - -/* Find the exception index table containing PC. */ - -_Unwind_Ptr -__gnu_Unwind_Find_exidx (_Unwind_Ptr pc, int * pcount) -{ - struct unw_eh_callback_data data; - - data.pc = pc; - data.exidx_start = 0; - if (__dl_iterate_phdr (find_exidx_callback, &data) <= 0) - return 0; - - *pcount = data.exidx_len / 8; - return data.exidx_start; -} diff --git a/sysdeps/arm/fix-fp-int-convert-overflow.h b/sysdeps/arm/fix-fp-int-convert-overflow.h deleted file mode 100644 index cb7fea7abb..0000000000 --- a/sysdeps/arm/fix-fp-int-convert-overflow.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Fix for conversion of floating point to integer overflow. ARM version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef FIX_FP_INT_CONVERT_OVERFLOW_H -#define FIX_FP_INT_CONVERT_OVERFLOW_H 1 - -/* As of GCC 5, the generic libgcc2.c conversions from floating point - to long long may not raise the correct exceptions on overflow (and - may raise spurious "inexact" exceptions even in non-overflow cases, - see ). */ -#define FIX_FLT_LLONG_CONVERT_OVERFLOW 1 -#define FIX_DBL_LLONG_CONVERT_OVERFLOW 1 -#define FIX_LDBL_LLONG_CONVERT_OVERFLOW 0 - -#define FIX_FLT_LONG_CONVERT_OVERFLOW 0 -#define FIX_DBL_LONG_CONVERT_OVERFLOW 0 -#define FIX_LDBL_LONG_CONVERT_OVERFLOW 0 - -#endif /* fix-fp-int-convert-overflow.h */ diff --git a/sysdeps/arm/fpu_control.h b/sysdeps/arm/fpu_control.h deleted file mode 100644 index 405d427c84..0000000000 --- a/sysdeps/arm/fpu_control.h +++ /dev/null @@ -1,75 +0,0 @@ -/* FPU control word definitions. ARM VFP version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FPU_CONTROL_H -#define _FPU_CONTROL_H - -#if !(defined(_LIBC) && !defined(_LIBC_TEST)) && defined(__SOFTFP__) - -#define _FPU_RESERVED 0xffffffff -#define _FPU_DEFAULT 0x00000000 -typedef unsigned int fpu_control_t; -#define _FPU_GETCW(cw) (cw) = 0 -#define _FPU_SETCW(cw) (void) (cw) -extern fpu_control_t __fpu_control; - -#else - -/* masking of interrupts */ -#define _FPU_MASK_IM 0x00000100 /* invalid operation */ -#define _FPU_MASK_ZM 0x00000200 /* divide by zero */ -#define _FPU_MASK_OM 0x00000400 /* overflow */ -#define _FPU_MASK_UM 0x00000800 /* underflow */ -#define _FPU_MASK_PM 0x00001000 /* inexact */ - -#define _FPU_MASK_NZCV 0xf0000000 /* NZCV flags */ -#define _FPU_MASK_RM 0x00c00000 /* rounding mode */ -#define _FPU_MASK_EXCEPT 0x00001f1f /* all exception flags */ - -/* Some bits in the FPSCR are not yet defined. They must be preserved when - modifying the contents. */ -#define _FPU_RESERVED 0x00086060 -#define _FPU_DEFAULT 0x00000000 - -/* Default + exceptions enabled. */ -#define _FPU_IEEE (_FPU_DEFAULT | 0x00001f00) - -/* Type of the control word. */ -typedef unsigned int fpu_control_t; - -/* Macros for accessing the hardware control word. */ -#ifdef __SOFTFP__ -/* This is fmrx %0, fpscr. */ -# define _FPU_GETCW(cw) \ - __asm__ __volatile__ ("mrc p10, 7, %0, cr1, cr0, 0" : "=r" (cw)) -/* This is fmxr fpscr, %0. */ -# define _FPU_SETCW(cw) \ - __asm__ __volatile__ ("mcr p10, 7, %0, cr1, cr0, 0" : : "r" (cw)) -#else -# define _FPU_GETCW(cw) \ - __asm__ __volatile__ ("vmrs %0, fpscr" : "=r" (cw)) -# define _FPU_SETCW(cw) \ - __asm__ __volatile__ ("vmsr fpscr, %0" : : "r" (cw)) -#endif - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#endif /* __SOFTFP__ */ - -#endif /* _FPU_CONTROL_H */ diff --git a/sysdeps/arm/fraiseexcpt.c b/sysdeps/arm/fraiseexcpt.c deleted file mode 100644 index be53409b36..0000000000 --- a/sysdeps/arm/fraiseexcpt.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Raise given exceptions. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - - -int -__feraiseexcept (int excepts) -{ - /* Fail if a VFP unit isn't present unless nothing needs to be done. */ - if (!ARM_HAVE_VFP) - return (excepts != 0); - else - { - fpu_control_t fpscr; - const float fp_zero = 0.0, fp_one = 1.0, fp_max = FLT_MAX, - fp_min = FLT_MIN, fp_1e32 = 1.0e32f, fp_two = 2.0, - fp_three = 3.0; - - /* Raise exceptions represented by EXPECTS. But we must raise only - one signal at a time. It is important that if the overflow/underflow - exception and the inexact exception are given at the same time, - the overflow/underflow exception follows the inexact exception. After - each exception we read from the fpscr, to force the exception to be - raised immediately. */ - - /* There are additional complications because this file may be compiled - without VFP support enabled, and we also can't assume that the - assembler has VFP instructions enabled. To get around this we use the - generic coprocessor mnemonics and avoid asking GCC to put float values - in VFP registers. */ - - /* First: invalid exception. */ - if (FE_INVALID & excepts) - __asm__ __volatile__ ( - "ldc p10, cr0, %1\n\t" /* flds s0, %1 */ - "cdp p10, 8, cr0, cr0, cr0, 0\n\t" /* fdivs s0, s0, s0 */ - "mrc p10, 7, %0, cr1, cr0, 0" : "=r" (fpscr) /* fmrx %0, fpscr */ - : "m" (fp_zero) - : "s0"); - - /* Next: division by zero. */ - if (FE_DIVBYZERO & excepts) - __asm__ __volatile__ ( - "ldc p10, cr0, %1\n\t" /* flds s0, %1 */ - "ldcl p10, cr0, %2\n\t" /* flds s1, %2 */ - "cdp p10, 8, cr0, cr0, cr0, 1\n\t" /* fdivs s0, s0, s1 */ - "mrc p10, 7, %0, cr1, cr0, 0" : "=r" (fpscr) /* fmrx %0, fpscr */ - : "m" (fp_one), "m" (fp_zero) - : "s0", "s1"); - - /* Next: overflow. */ - if (FE_OVERFLOW & excepts) - /* There's no way to raise overflow without also raising inexact. */ - __asm__ __volatile__ ( - "ldc p10, cr0, %1\n\t" /* flds s0, %1 */ - "ldcl p10, cr0, %2\n\t" /* flds s1, %2 */ - "cdp p10, 3, cr0, cr0, cr0, 1\n\t" /* fadds s0, s0, s1 */ - "mrc p10, 7, %0, cr1, cr0, 0" : "=r" (fpscr) /* fmrx %0, fpscr */ - : "m" (fp_max), "m" (fp_1e32) - : "s0", "s1"); - - /* Next: underflow. */ - if (FE_UNDERFLOW & excepts) - __asm__ __volatile__ ( - "ldc p10, cr0, %1\n\t" /* flds s0, %1 */ - "ldcl p10, cr0, %2\n\t" /* flds s1, %2 */ - "cdp p10, 8, cr0, cr0, cr0, 1\n\t" /* fdivs s0, s0, s1 */ - "mrc p10, 7, %0, cr1, cr0, 0" : "=r" (fpscr) /* fmrx %0, fpscr */ - : "m" (fp_min), "m" (fp_three) - : "s0", "s1"); - - /* Last: inexact. */ - if (FE_INEXACT & excepts) - __asm__ __volatile__ ( - "ldc p10, cr0, %1\n\t" /* flds s0, %1 */ - "ldcl p10, cr0, %2\n\t" /* flds s1, %2 */ - "cdp p10, 8, cr0, cr0, cr0, 1\n\t" /* fdivs s0, s0, s1 */ - "mrc p10, 7, %0, cr1, cr0, 0" : "=r" (fpscr) /* fmrx %0, fpscr */ - : "m" (fp_two), "m" (fp_three) - : "s0", "s1"); - - /* Success. */ - return 0; - } -} -libm_hidden_def (__feraiseexcept) -weak_alias (__feraiseexcept, feraiseexcept) -libm_hidden_weak (feraiseexcept) diff --git a/sysdeps/arm/frame.h b/sysdeps/arm/frame.h deleted file mode 100644 index 22dabfd207..0000000000 --- a/sysdeps/arm/frame.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Definition of stack frame structure. ARM/APCS version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This is the APCS stack backtrace structure. */ -struct layout -{ - struct layout *next; - void *sp; - void *return_address; -}; - -#define FIRST_FRAME_POINTER ADVANCE_STACK_FRAME (__builtin_frame_address (0)) diff --git a/sysdeps/arm/framestate.c b/sysdeps/arm/framestate.c deleted file mode 100644 index 710cecca97..0000000000 --- a/sysdeps/arm/framestate.c +++ /dev/null @@ -1 +0,0 @@ -/* Empty */ diff --git a/sysdeps/arm/fsetexcptflg.c b/sysdeps/arm/fsetexcptflg.c deleted file mode 100644 index 4871a9bd5c..0000000000 --- a/sysdeps/arm/fsetexcptflg.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - - -int -fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - fpu_control_t fpscr, new_fpscr; - - /* Fail if a VFP unit isn't present unless nothing needs to be done. */ - if (!ARM_HAVE_VFP) - return (excepts != 0); - - _FPU_GETCW (fpscr); - excepts &= FE_ALL_EXCEPT; - - /* Set the desired exception mask. */ - new_fpscr = fpscr & ~excepts; - new_fpscr |= *flagp & excepts; - - /* Write new exception flags if changed. */ - if (new_fpscr != fpscr) - _FPU_SETCW (new_fpscr); - - return 0; -} diff --git a/sysdeps/arm/ftestexcept.c b/sysdeps/arm/ftestexcept.c deleted file mode 100644 index b1e13d751b..0000000000 --- a/sysdeps/arm/ftestexcept.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - -int -fetestexcept (int excepts) -{ - /* Return no exception flags if a VFP unit isn't present. */ - if (!ARM_HAVE_VFP) - return 0; - - return libc_fetestexcept_vfp (excepts); -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/arm/gcc-compat.h b/sysdeps/arm/gcc-compat.h deleted file mode 100644 index a8524ccc69..0000000000 --- a/sysdeps/arm/gcc-compat.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Macros for checking required GCC compatibility. ARM version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _ARM_GCC_COMPAT_H -#define _ARM_GCC_COMPAT_H 1 - -#ifndef GCC_COMPAT_VERSION -# ifdef __ARM_PCS_VFP -/* The hard-float ABI was first supported in 4.5. */ -# define GCC_COMPAT_VERSION GCC_VERSION (4, 5) -# else -/* The EABI configurations (the only ones we handle) were first supported - in 4.1. */ -# define GCC_COMPAT_VERSION GCC_VERSION (4, 1) -# endif -#endif - -#include_next - -#endif diff --git a/sysdeps/arm/gccframe.h b/sysdeps/arm/gccframe.h deleted file mode 100644 index 13e7eed89f..0000000000 --- a/sysdeps/arm/gccframe.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Definition of object in frame unwind info. arm version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define FIRST_PSEUDO_REGISTER 27 - -#include diff --git a/sysdeps/arm/get-rounding-mode.h b/sysdeps/arm/get-rounding-mode.h deleted file mode 100644 index a76d4bacb6..0000000000 --- a/sysdeps/arm/get-rounding-mode.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Determine floating-point rounding mode within libc. ARM version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _ARM_GET_ROUNDING_MODE_H -#define _ARM_GET_ROUNDING_MODE_H 1 - -#include -#include -#include - -/* Return the floating-point rounding mode. */ - -static inline int -get_rounding_mode (void) -{ - fpu_control_t fpscr; - - /* FE_TONEAREST is the only supported rounding mode - if a VFP unit isn't present. */ - if (!ARM_HAVE_VFP) - return FE_TONEAREST; - - _FPU_GETCW (fpscr); - return fpscr & _FPU_MASK_RM; -} - -#endif /* get-rounding-mode.h */ diff --git a/sysdeps/arm/gmp-mparam.h b/sysdeps/arm/gmp-mparam.h deleted file mode 100644 index 5731dbde8f..0000000000 --- a/sysdeps/arm/gmp-mparam.h +++ /dev/null @@ -1,36 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see . */ - -#define BITS_PER_MP_LIMB 32 -#define BYTES_PER_MP_LIMB 4 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -#if defined(__ARMEB__) -# define IEEE_DOUBLE_MIXED_ENDIAN 0 -# define IEEE_DOUBLE_BIG_ENDIAN 1 -#elif defined(__VFP_FP__) -# define IEEE_DOUBLE_MIXED_ENDIAN 0 -# define IEEE_DOUBLE_BIG_ENDIAN 0 -#else -# define IEEE_DOUBLE_BIG_ENDIAN 0 -# define IEEE_DOUBLE_MIXED_ENDIAN 1 -#endif diff --git a/sysdeps/arm/include/bits/setjmp.h b/sysdeps/arm/include/bits/setjmp.h deleted file mode 100644 index 9e24705f22..0000000000 --- a/sysdeps/arm/include/bits/setjmp.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Private jmp_buf-related definitions. ARM EABI version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _INCLUDE_BITS_SETJMP_H -#define _INCLUDE_BITS_SETJMP_H 1 - -#ifndef __ASSEMBLER__ -/* Get the public declarations. */ -# include -#endif - -#ifndef _ISOMAC -/* Register list for a ldm/stm instruction to load/store - the general registers from a __jmp_buf. */ -# define JMP_BUF_REGLIST {v1-v6, sl, fp} - -/* Index of __jmp_buf where the sp register resides. */ -# define __JMP_BUF_SP 0 -#endif - -#endif /* include/bits/setjmp.h */ diff --git a/sysdeps/arm/jmpbuf-unwind.h b/sysdeps/arm/jmpbuf-unwind.h deleted file mode 100644 index 7a4e49ea78..0000000000 --- a/sysdeps/arm/jmpbuf-unwind.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((void *) (address) < (void *) demangle (jmpbuf[__JMP_BUF_SP])) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf regs) -{ - uintptr_t sp = regs[__JMP_BUF_SP]; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return sp; -} - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/arm/ldsodefs.h b/sysdeps/arm/ldsodefs.h deleted file mode 100644 index 0dd568cff3..0000000000 --- a/sysdeps/arm/ldsodefs.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _ARM_LDSODEFS_H -#define _ARM_LDSODEFS_H 1 - -#include - -struct La_arm_regs; -struct La_arm_retval; - -#define ARCH_PLTENTER_MEMBERS \ - Elf32_Addr (*arm_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *, \ - uintptr_t *, struct La_arm_regs *, \ - unsigned int *, const char *, \ - long int *) - -#define ARCH_PLTEXIT_MEMBERS \ - Elf32_Addr (*arm_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *, \ - uintptr_t *, const struct La_arm_regs *, \ - struct La_arm_retval *, const char *) - -#include_next - -#endif diff --git a/sysdeps/arm/libc-aeabi_read_tp.S b/sysdeps/arm/libc-aeabi_read_tp.S deleted file mode 100644 index 6132afc151..0000000000 --- a/sysdeps/arm/libc-aeabi_read_tp.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/arm/libc-tls.c b/sysdeps/arm/libc-tls.c deleted file mode 100644 index 9b2a52e0ec..0000000000 --- a/sysdeps/arm/libc-tls.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. ARM version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* On ARM, linker optimizations are not required, so __tls_get_addr - can be called even in statically linked binaries. In this case module - must be always 1 and PT_TLS segment exist in the binary, otherwise it - would not link. */ - -void * -__tls_get_addr (tls_index *ti) -{ - dtv_t *dtv = THREAD_DTV (); - return (char *) dtv[1].pointer.val + ti->ti_offset; -} diff --git a/sysdeps/arm/libm-test-ulps b/sysdeps/arm/libm-test-ulps deleted file mode 100644 index c6ee80095a..0000000000 --- a/sysdeps/arm/libm-test-ulps +++ /dev/null @@ -1,1690 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -float: 1 -ifloat: 1 - -Function: "acos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "acos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "acos_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "acosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "acosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "acosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "acosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "asin": -float: 1 -ifloat: 1 - -Function: "asin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "asinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "asinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "atan": -float: 1 -ifloat: 1 - -Function: "atan2": -float: 1 -ifloat: 1 - -Function: "atan2_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atan2_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atan2_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "atan_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "atanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "atanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "atanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "cabs": -double: 1 -idouble: 1 - -Function: "cabs_downward": -double: 1 -idouble: 1 - -Function: "cabs_towardzero": -double: 1 -idouble: 1 - -Function: "cabs_upward": -double: 1 -idouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacos": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "cacos_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: Imaginary part of "cacos_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "cacos_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: Imaginary part of "cacos_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "cacos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "cacos_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 - -Function: Real part of "cacosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cacosh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "cacosh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: Real part of "cacosh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "cacosh_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: Real part of "cacosh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: Imaginary part of "cacosh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "carg": -float: 1 -ifloat: 1 - -Function: "carg_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "carg_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "carg_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "casin": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "casin_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: Imaginary part of "casin_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "casin_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: Imaginary part of "casin_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "casin_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: Imaginary part of "casin_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 - -Function: Real part of "casinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "casinh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "casinh_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: Real part of "casinh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "casinh_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: Real part of "casinh_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 - -Function: Imaginary part of "casinh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: Real part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "catan_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "catan_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "catan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "catan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "catan_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catanh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "catanh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "catanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "catanh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "catanh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: Imaginary part of "catanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cbrt": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: "cbrt_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 - -Function: "cbrt_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: "cbrt_upward": -double: 5 -float: 1 -idouble: 5 -ifloat: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccos_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ccos_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "ccos_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ccos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccosh_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Imaginary part of "ccosh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ccosh_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Imaginary part of "ccosh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ccosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "ccosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cexp_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cexp_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Real part of "cexp_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cexp_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Real part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "clog": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 - -Function: Real part of "clog10": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 - -Function: Imaginary part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "clog10_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: Imaginary part of "clog10_downward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 - -Function: Real part of "clog10_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: Imaginary part of "clog10_towardzero": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 - -Function: Real part of "clog10_upward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 - -Function: Imaginary part of "clog10_upward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 - -Function: Real part of "clog_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Imaginary part of "clog_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "clog_towardzero": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: Imaginary part of "clog_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Real part of "clog_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Imaginary part of "clog_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "cos": -float: 1 -ifloat: 1 - -Function: "cos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "cos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cpow": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 - -Function: Real part of "cpow_downward": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 - -Function: Imaginary part of "cpow_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cpow_towardzero": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 - -Function: Imaginary part of "cpow_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cpow_upward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 - -Function: Imaginary part of "cpow_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csin_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "csin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csin_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "csin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csin_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "csin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csinh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "csinh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "csinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "csinh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "csinh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "csinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "csqrt_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: Imaginary part of "csqrt_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Real part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Imaginary part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Real part of "csqrt_upward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: Imaginary part of "csqrt_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Real part of "ctan_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 - -Function: Imaginary part of "ctan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Real part of "ctan_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ctanh_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 - -Function: Imaginary part of "ctanh_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "ctanh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "erf_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "erf_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "erf_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "erfc": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "erfc_downward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 - -Function: "erfc_towardzero": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 - -Function: "erfc_upward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 - -Function: "exp": -float: 1 -ifloat: 1 - -Function: "exp10": -double: 2 -idouble: 2 - -Function: "exp10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "exp10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "exp10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "exp2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp2_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp_downward": -double: 1 -idouble: 1 - -Function: "exp_towardzero": -double: 1 -idouble: 1 - -Function: "exp_upward": -double: 1 -idouble: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "gamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "gamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "gamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "gamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "hypot": -double: 1 -idouble: 1 - -Function: "hypot_downward": -double: 1 -idouble: 1 - -Function: "hypot_towardzero": -double: 1 -idouble: 1 - -Function: "hypot_upward": -double: 1 -idouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "j0_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: "j0_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "j0_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "j1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "j1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "j1_upward": -double: 3 -float: 5 -idouble: 3 -ifloat: 5 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "jn_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "jn_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "jn_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "lgamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "lgamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "lgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "lgamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "log": -float: 1 -ifloat: 1 - -Function: "log10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log10_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: "log10_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log10_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log1p": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "log1p_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log1p_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log1p_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log2": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "log2_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "log2_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log2_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "log_downward": -float: 2 -ifloat: 2 - -Function: "log_towardzero": -float: 2 -ifloat: 2 - -Function: "log_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "pow": -float: 1 -ifloat: 1 - -Function: "pow10": -double: 2 -idouble: 2 - -Function: "pow10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "pow10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "pow10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "pow_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "pow_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "pow_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "sin": -float: 1 -ifloat: 1 - -Function: "sin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "sin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sincos": -float: 1 -ifloat: 1 - -Function: "sincos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sincos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "sincos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "sinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "sinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "sinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "tan": -float: 1 -ifloat: 1 - -Function: "tan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "tan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "tan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "tanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "tanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "tanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "tanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "tgamma": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "tgamma_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "tgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "tgamma_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "y0_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "y0_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "y0_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "y1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "y1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "y1_upward": -double: 7 -float: 2 -idouble: 7 -ifloat: 2 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "yn_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "yn_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "yn_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -# end of automatic generation diff --git a/sysdeps/arm/libm-test-ulps-name b/sysdeps/arm/libm-test-ulps-name deleted file mode 100644 index 74f9acfffa..0000000000 --- a/sysdeps/arm/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -ARM diff --git a/sysdeps/arm/linkmap.h b/sysdeps/arm/linkmap.h deleted file mode 100644 index 7c2b4a6da8..0000000000 --- a/sysdeps/arm/linkmap.h +++ /dev/null @@ -1,5 +0,0 @@ -struct link_map_machine - { - Elf32_Addr plt; /* Address of .plt */ - void *tlsdesc_table; /* Address of TLS descriptor hash table. */ - }; diff --git a/sysdeps/arm/machine-gmon.h b/sysdeps/arm/machine-gmon.h deleted file mode 100644 index 8e9f43a662..0000000000 --- a/sysdeps/arm/machine-gmon.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Machine-dependent definitions for profiling support. ARM EABI version. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* GCC for the ARM cannot compile __builtin_return_address(N) for N != 0, - so we must use an assembly stub. */ - -/* We must not pollute the global namespace. */ -#define mcount_internal __mcount_internal - -extern void mcount_internal (u_long frompc, u_long selfpc) internal_function; -#define _MCOUNT_DECL(frompc, selfpc) \ - void internal_function mcount_internal (u_long frompc, u_long selfpc) - - -/* Define MCOUNT as empty since we have the implementation in another file. */ -#define MCOUNT diff --git a/sysdeps/arm/math-tests.h b/sysdeps/arm/math-tests.h deleted file mode 100644 index 14f9265ad8..0000000000 --- a/sysdeps/arm/math-tests.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Configuration for math tests. ARM version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* On systems with VFP support, but where glibc is built for - soft-float, the libgcc functions used in libc and libm do not - support rounding modes, although fesetround succeeds, and do not - support exceptions. */ -#ifdef __SOFTFP__ -# define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST) -# define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST) -# define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST) -# define EXCEPTION_TESTS_float 0 -# define EXCEPTION_TESTS_double 0 -# define EXCEPTION_TESTS_long_double 0 -#endif - -/* Not all VFP implementations support trapping exceptions. */ -#define EXCEPTION_ENABLE_SUPPORTED(EXCEPT) ((EXCEPT) == 0) - -#include_next diff --git a/sysdeps/arm/math_private.h b/sysdeps/arm/math_private.h deleted file mode 100644 index d39e9ee24a..0000000000 --- a/sysdeps/arm/math_private.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef ARM_MATH_PRIVATE_H -#define ARM_MATH_PRIVATE_H 1 - -/* Enable __finitel, __isinfl, and __isnanl for binary compatibility - when built without long double support. */ -#define LDBL_CLASSIFY_COMPAT 1 - -#include "fenv_private.h" -#include_next - -#endif diff --git a/sysdeps/arm/memcpy.S b/sysdeps/arm/memcpy.S deleted file mode 100644 index 62e48c3e4a..0000000000 --- a/sysdeps/arm/memcpy.S +++ /dev/null @@ -1,320 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - Contributed by MontaVista Software, Inc. (written by Nicolas Pitre) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Thumb requires excessive IT insns here. */ -#define NO_THUMB -#include -#include - -/* - * Data preload for architectures that support it (ARM V5TE and above) - */ -#if (!defined (__ARM_ARCH_2__) && !defined (__ARM_ARCH_3__) \ - && !defined (__ARM_ARCH_3M__) && !defined (__ARM_ARCH_4__) \ - && !defined (__ARM_ARCH_4T__) && !defined (__ARM_ARCH_5__) \ - && !defined (__ARM_ARCH_5T__)) -#define PLD(code...) code -#else -#define PLD(code...) -#endif - -/* - * This can be used to enable code to cacheline align the source pointer. - * Experiments on tested architectures (StrongARM and XScale) didn't show - * this a worthwhile thing to do. That might be different in the future. - */ -//#define CALGN(code...) code -#define CALGN(code...) - -/* - * Endian independent macros for shifting bytes within registers. - */ -#ifndef __ARMEB__ -#define PULL lsr -#define PUSH lsl -#else -#define PULL lsl -#define PUSH lsr -#endif - - .text - .syntax unified - -/* Prototype: void *memcpy(void *dest, const void *src, size_t n); */ - -ENTRY(memcpy) - - push {r0, r4, lr} - cfi_adjust_cfa_offset (12) - cfi_rel_offset (r4, 4) - cfi_rel_offset (lr, 8) - - cfi_remember_state - - subs r2, r2, #4 - blt 8f - ands ip, r0, #3 - PLD( pld [r1, #0] ) - bne 9f - ands ip, r1, #3 - bne 10f - -1: subs r2, r2, #(28) - push {r5 - r8} - cfi_adjust_cfa_offset (16) - cfi_rel_offset (r5, 0) - cfi_rel_offset (r6, 4) - cfi_rel_offset (r7, 8) - cfi_rel_offset (r8, 12) - blt 5f - - CALGN( ands ip, r1, #31 ) - CALGN( rsb r3, ip, #32 ) - CALGN( sbcsne r4, r3, r2 ) @ C is always set here - CALGN( bcs 2f ) - CALGN( adr r4, 6f ) - CALGN( subs r2, r2, r3 ) @ C gets set -#ifndef ARM_ALWAYS_BX - CALGN( add pc, r4, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)) -#else - CALGN( add r4, r4, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)) - CALGN( bx r4 ) -#endif - - PLD( pld [r1, #0] ) -2: PLD( subs r2, r2, #96 ) - PLD( pld [r1, #28] ) - PLD( blt 4f ) - PLD( pld [r1, #60] ) - PLD( pld [r1, #92] ) - -3: PLD( pld [r1, #124] ) -4: ldmia r1!, {r3, r4, r5, r6, r7, r8, ip, lr} - subs r2, r2, #32 - stmia r0!, {r3, r4, r5, r6, r7, r8, ip, lr} - bge 3b - PLD( cmn r2, #96 ) - PLD( bge 4b ) - -5: ands ip, r2, #28 - rsb ip, ip, #32 -#ifndef ARM_ALWAYS_BX - /* C is always clear here. */ - addne pc, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2) - b 7f -#else - beq 7f - push {r10} - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r10, 0) -0: add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2) - /* If alignment is not perfect, then there will be some - padding (nop) instructions between this BX and label 6. - The computation above assumed that two instructions - later is exactly the right spot. */ - add r10, #(6f - (0b + PC_OFS)) - bx r10 -#endif - .p2align ARM_BX_ALIGN_LOG2 -6: nop - .p2align ARM_BX_ALIGN_LOG2 - ldr r3, [r1], #4 - .p2align ARM_BX_ALIGN_LOG2 - ldr r4, [r1], #4 - .p2align ARM_BX_ALIGN_LOG2 - ldr r5, [r1], #4 - .p2align ARM_BX_ALIGN_LOG2 - ldr r6, [r1], #4 - .p2align ARM_BX_ALIGN_LOG2 - ldr r7, [r1], #4 - .p2align ARM_BX_ALIGN_LOG2 - ldr r8, [r1], #4 - .p2align ARM_BX_ALIGN_LOG2 - ldr lr, [r1], #4 - -#ifndef ARM_ALWAYS_BX - add pc, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2) - nop -#else -0: add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2) - /* If alignment is not perfect, then there will be some - padding (nop) instructions between this BX and label 66. - The computation above assumed that two instructions - later is exactly the right spot. */ - add r10, #(66f - (0b + PC_OFS)) - bx r10 -#endif - .p2align ARM_BX_ALIGN_LOG2 -66: nop - .p2align ARM_BX_ALIGN_LOG2 - str r3, [r0], #4 - .p2align ARM_BX_ALIGN_LOG2 - str r4, [r0], #4 - .p2align ARM_BX_ALIGN_LOG2 - str r5, [r0], #4 - .p2align ARM_BX_ALIGN_LOG2 - str r6, [r0], #4 - .p2align ARM_BX_ALIGN_LOG2 - str r7, [r0], #4 - .p2align ARM_BX_ALIGN_LOG2 - str r8, [r0], #4 - .p2align ARM_BX_ALIGN_LOG2 - str lr, [r0], #4 - -#ifdef ARM_ALWAYS_BX - pop {r10} - cfi_adjust_cfa_offset (-4) - cfi_restore (r10) -#endif - - CALGN( bcs 2b ) - -7: pop {r5 - r8} - cfi_adjust_cfa_offset (-16) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - cfi_restore (r8) - -8: movs r2, r2, lsl #31 - ldrbne r3, [r1], #1 - ldrbcs r4, [r1], #1 - ldrbcs ip, [r1] - strbne r3, [r0], #1 - strbcs r4, [r0], #1 - strbcs ip, [r0] - -#if ((defined (__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)) \ - || defined (ARM_ALWAYS_BX)) - pop {r0, r4, lr} - cfi_adjust_cfa_offset (-12) - cfi_restore (r4) - cfi_restore (lr) - bx lr -#else - pop {r0, r4, pc} -#endif - - cfi_restore_state - -9: rsb ip, ip, #4 - cmp ip, #2 - ldrbgt r3, [r1], #1 - ldrbge r4, [r1], #1 - ldrb lr, [r1], #1 - strbgt r3, [r0], #1 - strbge r4, [r0], #1 - subs r2, r2, ip - strb lr, [r0], #1 - blt 8b - ands ip, r1, #3 - beq 1b - -10: bic r1, r1, #3 - cmp ip, #2 - ldr lr, [r1], #4 - beq 17f - bgt 18f - - - .macro forward_copy_shift pull push - - subs r2, r2, #28 - blt 14f - - CALGN( ands ip, r1, #31 ) - CALGN( rsb ip, ip, #32 ) - CALGN( sbcsne r4, ip, r2 ) @ C is always set here - CALGN( subcc r2, r2, ip ) - CALGN( bcc 15f ) - -11: push {r5 - r8, r10} - cfi_adjust_cfa_offset (20) - cfi_rel_offset (r5, 0) - cfi_rel_offset (r6, 4) - cfi_rel_offset (r7, 8) - cfi_rel_offset (r8, 12) - cfi_rel_offset (r10, 16) - - PLD( pld [r1, #0] ) - PLD( subs r2, r2, #96 ) - PLD( pld [r1, #28] ) - PLD( blt 13f ) - PLD( pld [r1, #60] ) - PLD( pld [r1, #92] ) - -12: PLD( pld [r1, #124] ) -13: ldmia r1!, {r4, r5, r6, r7} - mov r3, lr, PULL #\pull - subs r2, r2, #32 - ldmia r1!, {r8, r10, ip, lr} - orr r3, r3, r4, PUSH #\push - mov r4, r4, PULL #\pull - orr r4, r4, r5, PUSH #\push - mov r5, r5, PULL #\pull - orr r5, r5, r6, PUSH #\push - mov r6, r6, PULL #\pull - orr r6, r6, r7, PUSH #\push - mov r7, r7, PULL #\pull - orr r7, r7, r8, PUSH #\push - mov r8, r8, PULL #\pull - orr r8, r8, r10, PUSH #\push - mov r10, r10, PULL #\pull - orr r10, r10, ip, PUSH #\push - mov ip, ip, PULL #\pull - orr ip, ip, lr, PUSH #\push - stmia r0!, {r3, r4, r5, r6, r7, r8, r10, ip} - bge 12b - PLD( cmn r2, #96 ) - PLD( bge 13b ) - - pop {r5 - r8, r10} - cfi_adjust_cfa_offset (-20) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - cfi_restore (r8) - cfi_restore (r10) - -14: ands ip, r2, #28 - beq 16f - -15: mov r3, lr, PULL #\pull - ldr lr, [r1], #4 - subs ip, ip, #4 - orr r3, r3, lr, PUSH #\push - str r3, [r0], #4 - bgt 15b - CALGN( cmp r2, #0 ) - CALGN( bge 11b ) - -16: sub r1, r1, #(\push / 8) - b 8b - - .endm - - - forward_copy_shift pull=8 push=24 - -17: forward_copy_shift pull=16 push=16 - -18: forward_copy_shift pull=24 push=8 - -END(memcpy) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/arm/memmove.S b/sysdeps/arm/memmove.S deleted file mode 100644 index b18aa329d3..0000000000 --- a/sysdeps/arm/memmove.S +++ /dev/null @@ -1,336 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - Contributed by MontaVista Software, Inc. (written by Nicolas Pitre) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Thumb requires excessive IT insns here. */ -#define NO_THUMB -#include -#include - -/* - * Data preload for architectures that support it (ARM V5TE and above) - */ -#if (!defined (__ARM_ARCH_2__) && !defined (__ARM_ARCH_3__) \ - && !defined (__ARM_ARCH_3M__) && !defined (__ARM_ARCH_4__) \ - && !defined (__ARM_ARCH_4T__) && !defined (__ARM_ARCH_5__) \ - && !defined (__ARM_ARCH_5T__)) -#define PLD(code...) code -#else -#define PLD(code...) -#endif - -/* - * This can be used to enable code to cacheline align the source pointer. - * Experiments on tested architectures (StrongARM and XScale) didn't show - * this a worthwhile thing to do. That might be different in the future. - */ -//#define CALGN(code...) code -#define CALGN(code...) - -/* - * Endian independent macros for shifting bytes within registers. - */ -#ifndef __ARMEB__ -#define PULL lsr -#define PUSH lsl -#else -#define PULL lsl -#define PUSH lsr -#endif - - .text - .syntax unified - -/* - * Prototype: void *memmove(void *dest, const void *src, size_t n); - * - * Note: - * - * If the memory regions don't overlap, we simply branch to memcpy which is - * normally a bit faster. Otherwise the copy is done going downwards. - */ - -ENTRY(memmove) - - subs ip, r0, r1 - cmphi r2, ip -#if !IS_IN (libc) - bls memcpy -#else - bls HIDDEN_JUMPTARGET(memcpy) -#endif - - push {r0, r4, lr} - cfi_adjust_cfa_offset (12) - cfi_rel_offset (r4, 4) - cfi_rel_offset (lr, 8) - - cfi_remember_state - - add r1, r1, r2 - add r0, r0, r2 - subs r2, r2, #4 - blt 8f - ands ip, r0, #3 - PLD( pld [r1, #-4] ) - bne 9f - ands ip, r1, #3 - bne 10f - -1: subs r2, r2, #(28) - push {r5 - r8} - cfi_adjust_cfa_offset (16) - cfi_rel_offset (r5, 0) - cfi_rel_offset (r6, 4) - cfi_rel_offset (r7, 8) - cfi_rel_offset (r8, 12) - blt 5f - - CALGN( ands ip, r1, #31 ) - CALGN( sbcsne r4, ip, r2 ) @ C is always set here - CALGN( bcs 2f ) - CALGN( adr r4, 6f ) - CALGN( subs r2, r2, ip ) @ C is set here -#ifndef ARM_ALWAYS_BX - CALGN( add pc, r4, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)) -#else - CALGN( add r4, r4, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)) - CALGN( bx r4 ) -#endif - - PLD( pld [r1, #-4] ) -2: PLD( subs r2, r2, #96 ) - PLD( pld [r1, #-32] ) - PLD( blt 4f ) - PLD( pld [r1, #-64] ) - PLD( pld [r1, #-96] ) - -3: PLD( pld [r1, #-128] ) -4: ldmdb r1!, {r3, r4, r5, r6, r7, r8, ip, lr} - subs r2, r2, #32 - stmdb r0!, {r3, r4, r5, r6, r7, r8, ip, lr} - bge 3b - PLD( cmn r2, #96 ) - PLD( bge 4b ) - -5: ands ip, r2, #28 - rsb ip, ip, #32 -#ifndef ARM_ALWAYS_BX - /* C is always clear here. */ - addne pc, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2) - b 7f -#else - beq 7f - push {r10} - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r10, 0) -0: add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2) - /* If alignment is not perfect, then there will be some - padding (nop) instructions between this BX and label 6. - The computation above assumed that two instructions - later is exactly the right spot. */ - add r10, #(6f - (0b + PC_OFS)) - bx r10 -#endif - .p2align ARM_BX_ALIGN_LOG2 -6: nop - .p2align ARM_BX_ALIGN_LOG2 - ldr r3, [r1, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - ldr r4, [r1, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - ldr r5, [r1, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - ldr r6, [r1, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - ldr r7, [r1, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - ldr r8, [r1, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - ldr lr, [r1, #-4]! - -#ifndef ARM_ALWAYS_BX - add pc, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2) - nop -#else -0: add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2) - /* If alignment is not perfect, then there will be some - padding (nop) instructions between this BX and label 66. - The computation above assumed that two instructions - later is exactly the right spot. */ - add r10, #(66f - (0b + PC_OFS)) - bx r10 -#endif - .p2align ARM_BX_ALIGN_LOG2 -66: nop - .p2align ARM_BX_ALIGN_LOG2 - str r3, [r0, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - str r4, [r0, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - str r5, [r0, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - str r6, [r0, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - str r7, [r0, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - str r8, [r0, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - str lr, [r0, #-4]! - -#ifdef ARM_ALWAYS_BX - pop {r10} - cfi_adjust_cfa_offset (-4) - cfi_restore (r10) -#endif - - CALGN( bcs 2b ) - -7: pop {r5 - r8} - cfi_adjust_cfa_offset (-16) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - cfi_restore (r8) - -8: movs r2, r2, lsl #31 - ldrbne r3, [r1, #-1]! - ldrbcs r4, [r1, #-1]! - ldrbcs ip, [r1, #-1] - strbne r3, [r0, #-1]! - strbcs r4, [r0, #-1]! - strbcs ip, [r0, #-1] - -#if ((defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)) \ - || defined (ARM_ALWAYS_BX)) - pop {r0, r4, lr} - cfi_adjust_cfa_offset (-12) - cfi_restore (r4) - cfi_restore (lr) - bx lr -#else - pop {r0, r4, pc} -#endif - - cfi_restore_state - -9: cmp ip, #2 - ldrbgt r3, [r1, #-1]! - ldrbge r4, [r1, #-1]! - ldrb lr, [r1, #-1]! - strbgt r3, [r0, #-1]! - strbge r4, [r0, #-1]! - subs r2, r2, ip - strb lr, [r0, #-1]! - blt 8b - ands ip, r1, #3 - beq 1b - -10: bic r1, r1, #3 - cmp ip, #2 - ldr r3, [r1, #0] - beq 17f - blt 18f - - - .macro backward_copy_shift push pull - - subs r2, r2, #28 - blt 14f - - CALGN( ands ip, r1, #31 ) - CALGN( rsb ip, ip, #32 ) - CALGN( sbcsne r4, ip, r2 ) @ C is always set here - CALGN( subcc r2, r2, ip ) - CALGN( bcc 15f ) - -11: push {r5 - r8, r10} - cfi_adjust_cfa_offset (20) - cfi_rel_offset (r5, 0) - cfi_rel_offset (r6, 4) - cfi_rel_offset (r7, 8) - cfi_rel_offset (r8, 12) - cfi_rel_offset (r10, 16) - - PLD( pld [r1, #-4] ) - PLD( subs r2, r2, #96 ) - PLD( pld [r1, #-32] ) - PLD( blt 13f ) - PLD( pld [r1, #-64] ) - PLD( pld [r1, #-96] ) - -12: PLD( pld [r1, #-128] ) -13: ldmdb r1!, {r7, r8, r10, ip} - mov lr, r3, PUSH #\push - subs r2, r2, #32 - ldmdb r1!, {r3, r4, r5, r6} - orr lr, lr, ip, PULL #\pull - mov ip, ip, PUSH #\push - orr ip, ip, r10, PULL #\pull - mov r10, r10, PUSH #\push - orr r10, r10, r8, PULL #\pull - mov r8, r8, PUSH #\push - orr r8, r8, r7, PULL #\pull - mov r7, r7, PUSH #\push - orr r7, r7, r6, PULL #\pull - mov r6, r6, PUSH #\push - orr r6, r6, r5, PULL #\pull - mov r5, r5, PUSH #\push - orr r5, r5, r4, PULL #\pull - mov r4, r4, PUSH #\push - orr r4, r4, r3, PULL #\pull - stmdb r0!, {r4 - r8, r10, ip, lr} - bge 12b - PLD( cmn r2, #96 ) - PLD( bge 13b ) - - pop {r5 - r8, r10} - cfi_adjust_cfa_offset (-20) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - cfi_restore (r8) - cfi_restore (r10) - -14: ands ip, r2, #28 - beq 16f - -15: mov lr, r3, PUSH #\push - ldr r3, [r1, #-4]! - subs ip, ip, #4 - orr lr, lr, r3, PULL #\pull - str lr, [r0, #-4]! - bgt 15b - CALGN( cmp r2, #0 ) - CALGN( bge 11b ) - -16: add r1, r1, #(\pull / 8) - b 8b - - .endm - - - backward_copy_shift push=8 pull=24 - -17: backward_copy_shift push=16 pull=16 - -18: backward_copy_shift push=24 pull=8 - - -END(memmove) -libc_hidden_builtin_def (memmove) diff --git a/sysdeps/arm/memset.S b/sysdeps/arm/memset.S deleted file mode 100644 index 95946360bf..0000000000 --- a/sysdeps/arm/memset.S +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Thumb requires excessive IT insns here. */ -#define NO_THUMB -#include - - .text - .syntax unified - -/* void *memset (dstpp, c, len) */ - -ENTRY(memset) - mov r3, r0 - cmp r2, #8 - bcc 2f @ less than 8 bytes to move - -1: - tst r3, #3 @ aligned yet? - strbne r1, [r3], #1 - subne r2, r2, #1 - bne 1b - - and r1, r1, #255 @ clear any sign bits - orr r1, r1, r1, lsl $8 - orr r1, r1, r1, lsl $16 - mov ip, r1 - -1: - subs r2, r2, #8 - stmiacs r3!, {r1, ip} @ store up to 32 bytes per loop iteration - subscs r2, r2, #8 - stmiacs r3!, {r1, ip} - subscs r2, r2, #8 - stmiacs r3!, {r1, ip} - subscs r2, r2, #8 - stmiacs r3!, {r1, ip} - bcs 1b - - and r2, r2, #7 -2: - subs r2, r2, #1 @ store up to 4 bytes per loop iteration - strbcs r1, [r3], #1 - subscs r2, r2, #1 - strbcs r1, [r3], #1 - subscs r2, r2, #1 - strbcs r1, [r3], #1 - subscs r2, r2, #1 - strbcs r1, [r3], #1 - bcs 2b - - DO_RET(lr) -END(memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/arm/memusage.h b/sysdeps/arm/memusage.h deleted file mode 100644 index 7592202fc3..0000000000 --- a/sysdeps/arm/memusage.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; }) - -#include diff --git a/sysdeps/arm/nptl-aeabi_unwind_cpp_pr1.c b/sysdeps/arm/nptl-aeabi_unwind_cpp_pr1.c deleted file mode 100644 index 7b83522437..0000000000 --- a/sysdeps/arm/nptl-aeabi_unwind_cpp_pr1.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/arm/nptl/Makefile b/sysdeps/arm/nptl/Makefile deleted file mode 100644 index 34eec51bc1..0000000000 --- a/sysdeps/arm/nptl/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (C) 2005-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# . - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif - -ifeq ($(subdir),nptl) -libpthread-sysdep_routines += nptl-aeabi_unwind_cpp_pr1 -libpthread-shared-only-routines += nptl-aeabi_unwind_cpp_pr1 - -# This test relies on compiling part of the binary with EH information, -# part without, and unwinding through. The .ARM.exidx tables have -# start addresses for EH regions, but no end addresses. Every -# region an exception needs to propogate through must have unwind -# information, or a previous function's unwind table may be used -# by mistake. -tests := $(filter-out tst-cleanupx4,$(tests)) -endif diff --git a/sysdeps/arm/nptl/bits/pthreadtypes-arch.h b/sysdeps/arm/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index 3f9eca4645..0000000000 --- a/sysdeps/arm/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -#define _BITS_PTHREADTYPES_ARCH_H 1 - -#include - -#define __SIZEOF_PTHREAD_ATTR_T 36 -#define __SIZEOF_PTHREAD_MUTEX_T 24 -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_RWLOCK_T 32 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -#define __SIZEOF_PTHREAD_BARRIER_T 20 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - -/* Data structure for mutex handling. */ -#define __PTHREAD_COMPAT_PADDING_MID -#define __PTHREAD_COMPAT_PADDING_END -#define __PTHREAD_MUTEX_LOCK_ELISION 0 - -#define __LOCK_ALIGNMENT -#define __ONCE_ALIGNMENT - -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned char __pad1; - unsigned char __pad2; - unsigned char __shared; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; -#else - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; - unsigned char __shared; - unsigned char __pad1; - unsigned char __pad2; -#endif - int __cur_writer; -}; - -#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/arm/nptl/bits/semaphore.h b/sysdeps/arm/nptl/bits/semaphore.h deleted file mode 100644 index 0b0844994b..0000000000 --- a/sysdeps/arm/nptl/bits/semaphore.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - - -#define __SIZEOF_SEM_T 16 - - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/sysdeps/arm/nptl/pthreaddef.h b/sysdeps/arm/nptl/pthreaddef.h deleted file mode 100644 index f69e0ffa65..0000000000 --- a/sysdeps/arm/nptl/pthreaddef.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. SSE requires 16 - bytes. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 16 - - -/* Location of current stack frame. - - __builtin_frame_address (0) returns the value of the hard frame - pointer, which will point at the location of the saved PC on the - stack. Below this in memory is the remainder of the linkage info, - occupying 12 bytes. Therefore in order to address from - CURRENT_STACK_FRAME using "struct layout", we need to have the macro - return the hard FP minus 12. Of course, this makes no sense - without the obsolete APCS stack layout... */ -#define CURRENT_STACK_FRAME (__builtin_frame_address (0) - 12) diff --git a/sysdeps/arm/nptl/tcb-offsets.sym b/sysdeps/arm/nptl/tcb-offsets.sym deleted file mode 100644 index bf9c0a1c17..0000000000 --- a/sysdeps/arm/nptl/tcb-offsets.sym +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include - --- - --- Derive offsets relative to the thread register. -#define thread_offsetof(mem) (long)(offsetof(struct pthread, mem) - sizeof(struct pthread)) - -MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) -TID_OFFSET thread_offsetof (tid) diff --git a/sysdeps/arm/nptl/tls.h b/sysdeps/arm/nptl/tls.h deleted file mode 100644 index 43e9164897..0000000000 --- a/sysdeps/arm/nptl/tls.h +++ /dev/null @@ -1,127 +0,0 @@ -/* Definition for thread-local data handling. NPTL/ARM version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _ARM_NPTL_TLS_H -#define _ARM_NPTL_TLS_H 1 - -#include - -#ifndef __ASSEMBLER__ -# include -# include -# include -# include - -#else /* __ASSEMBLER__ */ -# include -#endif /* __ASSEMBLER__ */ - - -#ifndef __ASSEMBLER__ - -/* The TP points to the start of the thread blocks. */ -# define TLS_DTV_AT_TP 1 -# define TLS_TCB_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include - -typedef struct -{ - dtv_t *dtv; - void *private; -} tcbhead_t; - -/* This is the size of the initial TCB. */ -# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN 16 - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE sizeof (tcbhead_t) - -/* This is the size we need before TCB. */ -# define TLS_PRE_TCB_SIZE sizeof (struct pthread) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN 16 - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(tcbp, dtvp) \ - (((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1) - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtv) \ - (THREAD_DTV() = (dtv)) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(tcbp) \ - (((tcbhead_t *) (tcbp))->dtv) - -# define TLS_DEFINE_INIT_TP(tp, pd) void *tp = (pd) + 1 - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - (((tcbhead_t *) __builtin_thread_pointer ())->dtv) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF \ - ((struct pthread *)__builtin_thread_pointer () - 1) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF \ - CONST_THREAD_AREA (32, sizeof (struct pthread)) - -/* Access to data in the thread descriptor is easy. */ -#define THREAD_GETMEM(descr, member) \ - descr->member -#define THREAD_GETMEM_NC(descr, member, idx) \ - descr->member[idx] -#define THREAD_SETMEM(descr, member, value) \ - descr->member = (value) -#define THREAD_SETMEM_NC(descr, member, idx, value) \ - descr->member[idx] = (value) - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/arm/preconfigure b/sysdeps/arm/preconfigure deleted file mode 100644 index 33e9501c4f..0000000000 --- a/sysdeps/arm/preconfigure +++ /dev/null @@ -1,55 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local preconfigure fragment for sysdeps/arm - -case "$machine" in -arm*) - # If the compiler enables unwind tables by default, this causes - # problems with undefined symbols in -nostdlib link tests. To - # avoid this, add -fno-unwind-tables here and remove it in - # sysdeps/arm/configure.ac after those tests have been run. - if test "${CFLAGS+set}" != "set"; then - CFLAGS="-g -O2" - fi - CFLAGS="$CFLAGS -fno-unwind-tables" - - base_machine=arm - # Lets ask the compiler which ARM family we've got - # Unfortunately it doesn't define any flags for implementations - # that you might pass to -mcpu or -mtune - # Note if you add patterns here you must ensure that - # an appropriate directory exists in sysdeps/arm - archcppflag=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | - sed -n 's/^#define \(__ARM_ARCH_[0-9].*__\) .*$/\1/p'` - - case "x$archcppflag" in - x__ARM_ARCH_89*__) - machine=armv7 - { $as_echo "$as_me:${as_lineno-$LINENO}: Found compiler is configured for something newer than v7 - using v7" >&5 -$as_echo "$as_me: Found compiler is configured for something newer than v7 - using v7" >&6;} - ;; - - x__ARM_ARCH_7A__) - machine=armv7 - { $as_echo "$as_me:${as_lineno-$LINENO}: Found compiler is configured for $machine" >&5 -$as_echo "$as_me: Found compiler is configured for $machine" >&6;} - ;; - - x__ARM_ARCH_6T2__) - machine=armv6t2 - { $as_echo "$as_me:${as_lineno-$LINENO}: Found compiler is configured for $machine" >&5 -$as_echo "$as_me: Found compiler is configured for $machine" >&6;} - ;; - x__ARM_ARCH_6*__) - machine=armv6 - { $as_echo "$as_me:${as_lineno-$LINENO}: Found compiler is configured for $machine" >&5 -$as_echo "$as_me: Found compiler is configured for $machine" >&6;} - ;; - *) - machine=arm - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: arm/preconfigure: Did not find ARM architecture type; using default" >&5 -$as_echo "$as_me: WARNING: arm/preconfigure: Did not find ARM architecture type; using default" >&2;} - ;; - esac - - machine=arm/$machine -esac diff --git a/sysdeps/arm/preconfigure.ac b/sysdeps/arm/preconfigure.ac deleted file mode 100644 index 20de5bcfea..0000000000 --- a/sysdeps/arm/preconfigure.ac +++ /dev/null @@ -1,50 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local preconfigure fragment for sysdeps/arm - -case "$machine" in -arm*) - # If the compiler enables unwind tables by default, this causes - # problems with undefined symbols in -nostdlib link tests. To - # avoid this, add -fno-unwind-tables here and remove it in - # sysdeps/arm/configure.ac after those tests have been run. - if test "${CFLAGS+set}" != "set"; then - CFLAGS="-g -O2" - fi - CFLAGS="$CFLAGS -fno-unwind-tables" - - base_machine=arm - # Lets ask the compiler which ARM family we've got - # Unfortunately it doesn't define any flags for implementations - # that you might pass to -mcpu or -mtune - # Note if you add patterns here you must ensure that - # an appropriate directory exists in sysdeps/arm - archcppflag=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | - sed -n 's/^#define \(__ARM_ARCH_[0-9].*__\) .*$/\1/p'` - - case "x$archcppflag" in - x__ARM_ARCH_[89]*__) - machine=armv7 - AC_MSG_NOTICE([Found compiler is configured for something newer than v7 - using v7]) - ;; - - x__ARM_ARCH_7A__) - machine=armv7 - AC_MSG_NOTICE([Found compiler is configured for $machine]) - ;; - - x__ARM_ARCH_6T2__) - machine=armv6t2 - AC_MSG_NOTICE([Found compiler is configured for $machine]) - ;; - x__ARM_ARCH_6*__) - machine=armv6 - AC_MSG_NOTICE([Found compiler is configured for $machine]) - ;; - *) - machine=arm - AC_MSG_WARN([arm/preconfigure: Did not find ARM architecture type; using default]) - ;; - esac - - machine=arm/$machine -esac diff --git a/sysdeps/arm/pt-arm-unwind-resume.S b/sysdeps/arm/pt-arm-unwind-resume.S deleted file mode 100644 index 7cb555c02b..0000000000 --- a/sysdeps/arm/pt-arm-unwind-resume.S +++ /dev/null @@ -1,2 +0,0 @@ -#define __libgcc_s_init pthread_cancel_init -#include diff --git a/sysdeps/arm/rt-aeabi_unwind_cpp_pr1.c b/sysdeps/arm/rt-aeabi_unwind_cpp_pr1.c deleted file mode 100644 index 7b83522437..0000000000 --- a/sysdeps/arm/rt-aeabi_unwind_cpp_pr1.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/arm/rt-arm-unwind-resume.S b/sysdeps/arm/rt-arm-unwind-resume.S deleted file mode 100644 index 9144b0ce88..0000000000 --- a/sysdeps/arm/rt-arm-unwind-resume.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/arm/rtld-global-offsets.sym b/sysdeps/arm/rtld-global-offsets.sym deleted file mode 100644 index ff4e97f2a6..0000000000 --- a/sysdeps/arm/rtld-global-offsets.sym +++ /dev/null @@ -1,7 +0,0 @@ -#define SHARED 1 - -#include - -#define rtld_global_ro_offsetof(mem) offsetof (struct rtld_global_ro, mem) - -RTLD_GLOBAL_RO_DL_HWCAP_OFFSET rtld_global_ro_offsetof (_dl_hwcap) diff --git a/sysdeps/arm/s_fma.c b/sysdeps/arm/s_fma.c deleted file mode 100644 index dc4e27bfc1..0000000000 --- a/sysdeps/arm/s_fma.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __SOFTFP__ -# include -#else -# include -#endif diff --git a/sysdeps/arm/s_fmaf.c b/sysdeps/arm/s_fmaf.c deleted file mode 100644 index 550d8b85d3..0000000000 --- a/sysdeps/arm/s_fmaf.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __SOFTFP__ -# include -#else -# include -#endif diff --git a/sysdeps/arm/setfpucw.c b/sysdeps/arm/setfpucw.c deleted file mode 100644 index e6c075e620..0000000000 --- a/sysdeps/arm/setfpucw.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Set the FPU control word. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - - -void -__setfpucw (fpu_control_t set) -{ - fpu_control_t fpscr, new_fpscr; - - /* Do nothing if a VFP unit isn't present. */ - if (!ARM_HAVE_VFP) - return; - - _FPU_GETCW (fpscr); - - /* Preserve the reserved bits, and set the rest as the user - specified (or the default, if the user gave zero). */ - new_fpscr = fpscr & _FPU_RESERVED; - new_fpscr |= set & ~_FPU_RESERVED; - - /* Write FPSCR if changed. */ - if (new_fpscr != fpscr) - _FPU_SETCW (fpscr); -} diff --git a/sysdeps/arm/setjmp.S b/sysdeps/arm/setjmp.S deleted file mode 100644 index 2235890936..0000000000 --- a/sysdeps/arm/setjmp.S +++ /dev/null @@ -1,101 +0,0 @@ -/* setjmp for ARM. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -ENTRY (__sigsetjmp) -#ifdef PTR_MANGLE - PTR_MANGLE_LOAD (a3, ip) -#endif - mov ip, r0 - - /* setjmp probe expects sigsetjmp first argument (4@r0), second - argument (-4@r1), and target address (4@r14), respectively. */ - LIBC_PROBE (setjmp, 3, 4@r0, -4@r1, 4@r14) - - /* Save sp and lr */ -#ifdef PTR_MANGLE - mov a4, sp - PTR_MANGLE2 (a4, a4, a3) - str a4, [ip], #4 - PTR_MANGLE2 (a4, lr, a3) - str a4, [ip], #4 -#else - str sp, [ip], #4 - str lr, [ip], #4 -#endif - /* Save registers */ - stmia ip!, JMP_BUF_REGLIST - -#if !defined ARM_ASSUME_NO_IWMMXT || defined __SOFTFP__ -# define NEED_HWCAP 1 -#endif - -#ifdef NEED_HWCAP - /* Check if we have a VFP unit. */ -# if IS_IN (rtld) - LDST_PCREL (ldr, a3, a4, \ - C_SYMBOL_NAME(_rtld_local_ro) \ - + RTLD_GLOBAL_RO_DL_HWCAP_OFFSET) -# else -# ifdef SHARED - LDR_GLOBAL (a3, a4, C_SYMBOL_NAME(_rtld_global_ro), \ - RTLD_GLOBAL_RO_DL_HWCAP_OFFSET) -# else - LDR_GLOBAL (a3, a4, C_SYMBOL_NAME(_dl_hwcap), 0) -# endif -# endif -#endif - -#ifdef __SOFTFP__ - tst a3, #HWCAP_ARM_VFP - beq .Lno_vfp -#endif - - /* Store the VFP registers. - Don't use VFP instructions directly because this code - is used in non-VFP multilibs. */ - /* Following instruction is vstmia ip!, {d8-d15}. */ - stc p11, cr8, [ip], #64 -.Lno_vfp: - -#ifndef ARM_ASSUME_NO_IWMMXT - tst a3, #HWCAP_ARM_IWMMXT - beq .Lno_iwmmxt - - /* Save the call-preserved iWMMXt registers. */ - /* Following instructions are wstrd wr10, [ip], #8 (etc.) */ - stcl p1, cr10, [r12], #8 - stcl p1, cr11, [r12], #8 - stcl p1, cr12, [r12], #8 - stcl p1, cr13, [r12], #8 - stcl p1, cr14, [r12], #8 - stcl p1, cr15, [r12], #8 -.Lno_iwmmxt: -#endif - - /* Make a tail call to __sigjmp_save; it takes the same args. */ - B PLTJMP(C_SYMBOL_NAME(__sigjmp_save)) - -END (__sigsetjmp) - -hidden_def (__sigsetjmp) diff --git a/sysdeps/arm/sfp-machine.h b/sysdeps/arm/sfp-machine.h deleted file mode 100644 index 2e7c156294..0000000000 --- a/sysdeps/arm/sfp-machine.h +++ /dev/null @@ -1,51 +0,0 @@ -#define _FP_W_TYPE_SIZE 32 -#define _FP_W_TYPE unsigned long -#define _FP_WS_TYPE signed long -#define _FP_I_TYPE long - -#define _FP_MUL_MEAT_S(R,X,Y) \ - _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_D(R,X,Y) \ - _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_MUL_MEAT_DW_S(R,X,Y) \ - _FP_MUL_MEAT_DW_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_DW_D(R,X,Y) \ - _FP_MUL_MEAT_DW_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_DW_Q(R,X,Y) \ - _FP_MUL_MEAT_DW_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) - -#define _FP_NANFRAC_S _FP_QNANBIT_S -#define _FP_NANFRAC_D _FP_QNANBIT_D, 0 -#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0 -#define _FP_NANSIGN_S 0 -#define _FP_NANSIGN_D 0 -#define _FP_NANSIGN_Q 0 - -#define _FP_KEEPNANFRACP 1 -#define _FP_QNANNEGATEDP 0 - -/* Someone please check this. */ -#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \ - && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \ - { \ - R##_s = Y##_s; \ - _FP_FRAC_COPY_##wc(R,Y); \ - } \ - else \ - { \ - R##_s = X##_s; \ - _FP_FRAC_COPY_##wc(R,X); \ - } \ - R##_c = FP_CLS_NAN; \ - } while (0) - -#define _FP_TININESS_AFTER_ROUNDING 0 diff --git a/sysdeps/arm/sotruss-lib.c b/sysdeps/arm/sotruss-lib.c deleted file mode 100644 index 467bb26f38..0000000000 --- a/sysdeps/arm/sotruss-lib.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Override generic sotruss-lib.c to define actual functions for ARM. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define HAVE_ARCH_PLTENTER -#define HAVE_ARCH_PLTEXIT - -#include - -ElfW(Addr) -la_arm_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - La_arm_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - print_enter (refcook, defcook, symname, - regs->lr_reg[0], regs->lr_reg[1], regs->lr_reg[2], - *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -la_arm_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, const struct La_arm_regs *inregs, - struct La_arm_retval *outregs, const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_reg[0]); - - return 0; -} diff --git a/sysdeps/arm/stackinfo.h b/sysdeps/arm/stackinfo.h deleted file mode 100644 index 8cec761ab8..0000000000 --- a/sysdeps/arm/stackinfo.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* On Arm the stack grows down. */ -#define _STACK_GROWS_DOWN 1 - -/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK is - * present, but it is presumed absent. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X) - -#endif /* stackinfo.h */ diff --git a/sysdeps/arm/start.S b/sysdeps/arm/start.S deleted file mode 100644 index 4973878f05..0000000000 --- a/sysdeps/arm/start.S +++ /dev/null @@ -1,148 +0,0 @@ -/* Startup code for ARM & ELF - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This is the canonical entry point, usually the first thing in the text - segment. - - Note that the code in the .init section has already been run. - This includes _init and _libc_init - - - At this entry point, most registers' values are unspecified, except: - - a1 Contains a function pointer to be registered with `atexit'. - This is how the dynamic linker arranges to have DT_FINI - functions called for shared libraries that have been loaded - before this code runs. - - sp The stack contains the arguments and environment: - 0(sp) argc - 4(sp) argv[0] - ... - (4*argc)(sp) NULL - (4*(argc+1))(sp) envp[0] - ... - NULL -*/ - -/* Tag_ABI_align8_preserved: This code preserves 8-byte - alignment in any callee. */ - .eabi_attribute 25, 1 -/* Tag_ABI_align8_needed: This code may require 8-byte alignment from - the caller. */ - .eabi_attribute 24, 1 - -#if defined(__thumb2__) - .thumb - .syntax unified -#endif - - .text - .globl _start - .type _start,#function -_start: - /* Protect against unhandled exceptions. */ - .fnstart - /* Clear the frame pointer and link register since this is the outermost frame. */ - mov fp, #0 - mov lr, #0 - - /* Pop argc off the stack and save a pointer to argv */ - pop { a2 } - mov a3, sp - - /* Push stack limit */ - push { a3 } - - /* Push rtld_fini */ - push { a1 } - -#ifdef SHARED - ldr sl, .L_GOT - adr a4, .L_GOT - add sl, sl, a4 - - ldr ip, .L_GOT+4 /* __libc_csu_fini */ - ldr ip, [sl, ip] - - push { ip } /* Push __libc_csu_fini */ - - ldr a4, .L_GOT+8 /* __libc_csu_init */ - ldr a4, [sl, a4] - - ldr a1, .L_GOT+12 /* main */ - ldr a1, [sl, a1] - - /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end) */ - /* Let the libc call main and exit with its return code. */ - bl __libc_start_main(PLT) -#else - /* Fetch address of __libc_csu_fini */ - ldr ip, =__libc_csu_fini - - /* Push __libc_csu_fini */ - push { ip } - - /* Set up the other arguments in registers */ - ldr a1, =main - ldr a4, =__libc_csu_init - - /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end) */ - /* Let the libc call main and exit with its return code. */ - bl __libc_start_main -#endif - - /* should never get here....*/ - bl abort - -#ifdef SHARED - .align 2 -.L_GOT: - .word _GLOBAL_OFFSET_TABLE_ - .L_GOT - .word __libc_csu_fini(GOT) - .word __libc_csu_init(GOT) - .word main(GOT) -#endif - - .cantunwind - .fnend - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start diff --git a/sysdeps/arm/static-stubs.c b/sysdeps/arm/static-stubs.c deleted file mode 100644 index d90d603a95..0000000000 --- a/sysdeps/arm/static-stubs.c +++ /dev/null @@ -1,7 +0,0 @@ -/* When building with GCC with static-only libgcc, the dummy - _Unwind_Resume from static-stubs.c needs to be used together with - the dummy __aeabi_unwind_cpp_pr* from aeabi_unwind_cpp_pr1.c - instead of the copies from libgcc. */ - -#include -#include diff --git a/sysdeps/arm/strlen.S b/sysdeps/arm/strlen.S deleted file mode 100644 index fb1589bbe6..0000000000 --- a/sysdeps/arm/strlen.S +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Code contributed by Matthew Wilcox - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Thumb requires excessive IT insns here. */ -#define NO_THUMB -#include - -/* size_t strlen(const char *S) - * entry: r0 -> string - * exit: r0 = len - */ - - .syntax unified - .text - -ENTRY(strlen) - bic r1, r0, $3 @ addr of word containing first byte - ldr r2, [r1], $4 @ get the first word - ands r3, r0, $3 @ how many bytes are duff? - rsb r0, r3, $0 @ get - that number into counter. - beq Laligned @ skip into main check routine if no - @ more -#ifdef __ARMEB__ - orr r2, r2, $0xff000000 @ set this byte to non-zero - subs r3, r3, $1 @ any more to do? - orrgt r2, r2, $0x00ff0000 @ if so, set this byte - subs r3, r3, $1 @ more? - orrgt r2, r2, $0x0000ff00 @ then set. -#else - orr r2, r2, $0x000000ff @ set this byte to non-zero - subs r3, r3, $1 @ any more to do? - orrgt r2, r2, $0x0000ff00 @ if so, set this byte - subs r3, r3, $1 @ more? - orrgt r2, r2, $0x00ff0000 @ then set. -#endif -Laligned: @ here, we have a word in r2. Does it - tst r2, $0x000000ff @ contain any zeroes? - tstne r2, $0x0000ff00 @ - tstne r2, $0x00ff0000 @ - tstne r2, $0xff000000 @ - addne r0, r0, $4 @ if not, the string is 4 bytes longer - ldrne r2, [r1], $4 @ and we continue to the next word - bne Laligned @ -Llastword: @ drop through to here once we find a -#ifdef __ARMEB__ - tst r2, $0xff000000 @ word that has a zero byte in it - addne r0, r0, $1 @ - tstne r2, $0x00ff0000 @ and add up to 3 bytes on to it - addne r0, r0, $1 @ - tstne r2, $0x0000ff00 @ (if first three all non-zero, 4th - addne r0, r0, $1 @ must be zero) -#else - tst r2, $0x000000ff @ word that has a zero byte in it - addne r0, r0, $1 @ - tstne r2, $0x0000ff00 @ and add up to 3 bytes on to it - addne r0, r0, $1 @ - tstne r2, $0x00ff0000 @ (if first three all non-zero, 4th - addne r0, r0, $1 @ must be zero) -#endif - DO_RET(lr) -END(strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/arm/sub_n.S b/sysdeps/arm/sub_n.S deleted file mode 100644 index 8eafa41e64..0000000000 --- a/sysdeps/arm/sub_n.S +++ /dev/null @@ -1,2 +0,0 @@ -#define USE_AS_SUB_N -#include "add_n.S" diff --git a/sysdeps/arm/submul_1.S b/sysdeps/arm/submul_1.S deleted file mode 100644 index 24d39d93b8..0000000000 --- a/sysdeps/arm/submul_1.S +++ /dev/null @@ -1,68 +0,0 @@ -/* mpn_submul_1 -- multiply and subtract bignums. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .syntax unified - .text - -@ cycles/limb -@ StrongArm ? -@ Cortex-A8 ? -@ Cortex-A9 ? -@ Cortex-A15 4 - -/* mp_limb_t mpn_submul_1(res_ptr, src1_ptr, size, s2_limb) */ - -ENTRY (__mpn_submul_1) - push { r4, r5, r6, r7 } - cfi_adjust_cfa_offset (16) - cfi_rel_offset (r4, 0) - cfi_rel_offset (r5, 4) - cfi_rel_offset (r6, 8) - cfi_rel_offset (r7, 12) - - ldr r6, [r1], #4 - ldr r7, [r0] - mov r4, #0 /* init carry in */ - b 1f -0: - ldr r6, [r1], #4 /* load next ul */ - adds r5, r5, r4 /* (lpl, c) = lpl + cl */ - adc r4, ip, #0 /* cl = hpl + c */ - subs r5, r7, r5 /* (lpl, !c) = rl - lpl */ - ldr r7, [r0, #4] /* load next rl */ - it cc - addcc r4, r4, #1 /* cl += !c */ - str r5, [r0], #4 -1: - umull r5, ip, r6, r3 /* (hpl, lpl) = ul * vl */ - subs r2, r2, #1 - bne 0b - - adds r5, r5, r4 /* (lpl, c) = lpl + cl */ - adc r4, ip, #0 /* cl = hpl + c */ - subs r5, r7, r5 /* (lpl, !c) = rl - lpl */ - str r5, [r0], #4 - it cc - addcc r4, r4, #1 /* cl += !c */ - mov r0, r4 /* return carry */ - - pop { r4, r5, r6, r7 } - DO_RET (lr) -END (__mpn_submul_1) diff --git a/sysdeps/arm/sys/ucontext.h b/sysdeps/arm/sys/ucontext.h deleted file mode 100644 index 722300a7f1..0000000000 --- a/sysdeps/arm/sys/ucontext.h +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* System V/ARM ABI compliant context switching support. */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - - -typedef int greg_t; - -/* Number of general registers. */ -#define __NGREG 16 -#ifdef __USE_MISC -# define NGREG __NGREG -#endif - -/* Container for all general registers. */ -typedef greg_t gregset_t[__NGREG]; - -#ifdef __USE_MISC -/* Number of each register is the `gregset_t' array. */ -enum -{ - R0 = 0, -# define R0 R0 - R1 = 1, -# define R1 R1 - R2 = 2, -# define R2 R2 - R3 = 3, -# define R3 R3 - R4 = 4, -# define R4 R4 - R5 = 5, -# define R5 R5 - R6 = 6, -# define R6 R6 - R7 = 7, -# define R7 R7 - R8 = 8, -# define R8 R8 - R9 = 9, -# define R9 R9 - R10 = 10, -# define R10 R10 - R11 = 11, -# define R11 R11 - R12 = 12, -# define R12 R12 - R13 = 13, -# define R13 R13 - R14 = 14, -# define R14 R14 - R15 = 15, -# define R15 R15 -}; -#endif - -#ifdef __USE_MISC -# define __ctx(fld) fld -#else -# define __ctx(fld) __ ## fld -#endif - -/* Structure to describe FPU registers. */ -typedef struct fpregset - { - } fpregset_t; - -/* Context to describe whole processor state. */ -typedef struct - { - gregset_t __ctx(gregs); - fpregset_t __ctx(fpregs); - } mcontext_t; - -#undef __ctx - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_link; - sigset_t uc_sigmask; - stack_t uc_stack; - mcontext_t uc_mcontext; - long int uc_filler[5]; - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/arm/sysdep.h b/sysdeps/arm/sysdep.h deleted file mode 100644 index 6d60c34df1..0000000000 --- a/sysdeps/arm/sysdep.h +++ /dev/null @@ -1,339 +0,0 @@ -/* Assembler macros for ARM. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -#ifndef __ASSEMBLER__ -# include -#else -# include -#endif - -/* The __ARM_ARCH define is provided by gcc 4.8. Construct it otherwise. */ -#ifndef __ARM_ARCH -# ifdef __ARM_ARCH_2__ -# define __ARM_ARCH 2 -# elif defined (__ARM_ARCH_3__) || defined (__ARM_ARCH_3M__) -# define __ARM_ARCH 3 -# elif defined (__ARM_ARCH_4__) || defined (__ARM_ARCH_4T__) -# define __ARM_ARCH 4 -# elif defined (__ARM_ARCH_5__) || defined (__ARM_ARCH_5E__) \ - || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__) \ - || defined(__ARM_ARCH_5TEJ__) -# define __ARM_ARCH 5 -# elif defined (__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ - || defined (__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \ - || defined (__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) -# define __ARM_ARCH 6 -# elif defined (__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ - || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ - || defined(__ARM_ARCH_7EM__) -# define __ARM_ARCH 7 -# else -# error unknown arm architecture -# endif -#endif - -#if __ARM_ARCH > 4 || defined (__ARM_ARCH_4T__) -# define ARCH_HAS_BX -#endif -#if __ARM_ARCH > 4 -# define ARCH_HAS_BLX -#endif -#if __ARM_ARCH > 6 || defined (__ARM_ARCH_6K__) || defined (__ARM_ARCH_6ZK__) -# define ARCH_HAS_HARD_TP -#endif -#if __ARM_ARCH > 6 || defined (__ARM_ARCH_6T2__) -# define ARCH_HAS_T2 -#endif - -#ifdef __ASSEMBLER__ - -/* Syntactic details of assembler. */ - -#define ALIGNARG(log2) log2 -#define ASM_SIZE_DIRECTIVE(name) .size name,.-name - -#define PLTJMP(_x) _x##(PLT) - -#ifdef ARCH_HAS_BX -# define BX(R) bx R -# define BXC(C, R) bx##C R -# ifdef ARCH_HAS_BLX -# define BLX(R) blx R -# else -# define BLX(R) mov lr, pc; bx R -# endif -#else -# define BX(R) mov pc, R -# define BXC(C, R) mov##C pc, R -# define BLX(R) mov lr, pc; mov pc, R -#endif - -#define DO_RET(R) BX(R) -#define RETINSTR(C, R) BXC(C, R) - -/* Define an entry point visible from C. */ -#define ENTRY(name) \ - .globl C_SYMBOL_NAME(name); \ - .type C_SYMBOL_NAME(name),%function; \ - .align ALIGNARG(4); \ - C_LABEL(name) \ - CFI_SECTIONS; \ - cfi_startproc; \ - CALL_MCOUNT - -#define CFI_SECTIONS \ - .cfi_sections .debug_frame - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(name) - -/* If compiled for profiling, call `mcount' at the start of each function. */ -#ifdef PROF -/* Call __gnu_mcount_nc (GCC >= 4.4). */ -#define CALL_MCOUNT \ - push {lr}; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (lr, 0); \ - bl PLTJMP(mcount); \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (lr) -#else -#define CALL_MCOUNT /* Do nothing. */ -#endif - -/* Since C identifiers are not normally prefixed with an underscore - on this system, the asm identifier `syscall_error' intrudes on the - C name space. Make sure we use an innocuous name. */ -#define syscall_error __syscall_error -#define mcount __gnu_mcount_nc - -/* Tag_ABI_align8_preserved: This code preserves 8-byte - alignment in any callee. */ - .eabi_attribute 25, 1 -/* Tag_ABI_align8_needed: This code may require 8-byte alignment from - the caller. */ - .eabi_attribute 24, 1 - -/* The thumb2 encoding is reasonably complete. Unless suppressed, use it. */ - .syntax unified -# if defined(__thumb2__) && !defined(NO_THUMB) - .thumb -#else -# undef __thumb__ -# undef __thumb2__ - .arm -# endif - -/* Load or store to/from address X + Y into/from R, (maybe) using T. - X or Y can use T freely; T can be R if OP is a load. The first - version eschews the two-register addressing mode, while the - second version uses it. */ -# define LDST_INDEXED_NOINDEX(OP, R, T, X, Y) \ - add T, X, Y; \ - OP R, [T] -# define LDST_INDEXED_INDEX(OP, R, X, Y) \ - OP R, [X, Y] - -# ifdef ARM_NO_INDEX_REGISTER -/* We're never using the two-register addressing mode, so this - always uses an intermediate add. */ -# define LDST_INDEXED(OP, R, T, X, Y) LDST_INDEXED_NOINDEX (OP, R, T, X, Y) -# define LDST_PC_INDEXED(OP, R, T, X) LDST_INDEXED_NOINDEX (OP, R, T, pc, X) -# else -/* The two-register addressing mode is OK, except on Thumb with pc. */ -# define LDST_INDEXED(OP, R, T, X, Y) LDST_INDEXED_INDEX (OP, R, X, Y) -# ifdef __thumb2__ -# define LDST_PC_INDEXED(OP, R, T, X) LDST_INDEXED_NOINDEX (OP, R, T, pc, X) -# else -# define LDST_PC_INDEXED(OP, R, T, X) LDST_INDEXED_INDEX (OP, R, pc, X) -# endif -# endif - -/* Load or store to/from a pc-relative EXPR into/from R, using T. */ -# ifdef __thumb2__ -# define LDST_PCREL(OP, R, T, EXPR) \ - ldr T, 98f; \ - .subsection 2; \ -98: .word EXPR - 99f - PC_OFS; \ - .previous; \ -99: add T, T, pc; \ - OP R, [T] -# elif defined (ARCH_HAS_T2) && ARM_PCREL_MOVW_OK -# define LDST_PCREL(OP, R, T, EXPR) \ - movw T, #:lower16:EXPR - 99f - PC_OFS; \ - movt T, #:upper16:EXPR - 99f - PC_OFS; \ -99: LDST_PC_INDEXED (OP, R, T, T) -# else -# define LDST_PCREL(OP, R, T, EXPR) \ - ldr T, 98f; \ - .subsection 2; \ -98: .word EXPR - 99f - PC_OFS; \ - .previous; \ -99: OP R, [pc, T] -# endif - -/* Load from a global SYMBOL + CONSTANT into R, using T. */ -# if defined (ARCH_HAS_T2) && !defined (PIC) -# define LDR_GLOBAL(R, T, SYMBOL, CONSTANT) \ - movw T, #:lower16:SYMBOL; \ - movt T, #:upper16:SYMBOL; \ - ldr R, [T, $CONSTANT] -# elif defined (ARCH_HAS_T2) && defined (PIC) && ARM_PCREL_MOVW_OK -# define LDR_GLOBAL(R, T, SYMBOL, CONSTANT) \ - movw R, #:lower16:_GLOBAL_OFFSET_TABLE_ - 97f - PC_OFS; \ - movw T, #:lower16:99f - 98f - PC_OFS; \ - movt R, #:upper16:_GLOBAL_OFFSET_TABLE_ - 97f - PC_OFS; \ - movt T, #:upper16:99f - 98f - PC_OFS; \ - .pushsection .rodata.cst4, "aM", %progbits, 4; \ - .balign 4; \ -99: .word SYMBOL##(GOT); \ - .popsection; \ -97: add R, R, pc; \ -98: LDST_PC_INDEXED (ldr, T, T, T); \ - LDST_INDEXED (ldr, R, T, R, T); \ - ldr R, [R, $CONSTANT] -# else -# define LDR_GLOBAL(R, T, SYMBOL, CONSTANT) \ - ldr T, 99f; \ - ldr R, 100f; \ -98: add T, T, pc; \ - ldr T, [T, R]; \ - .subsection 2; \ -99: .word _GLOBAL_OFFSET_TABLE_ - 98b - PC_OFS; \ -100: .word SYMBOL##(GOT); \ - .previous; \ - ldr R, [T, $CONSTANT] -# endif - -/* This is the same as LDR_GLOBAL, but for a SYMBOL that is known to - be in the same linked object (as for one with hidden visibility). - We can avoid the GOT indirection in the PIC case. For the pure - static case, LDR_GLOBAL is already optimal. */ -# ifdef PIC -# define LDR_HIDDEN(R, T, SYMBOL, CONSTANT) \ - LDST_PCREL (ldr, R, T, SYMBOL + CONSTANT) -# else -# define LDR_HIDDEN(R, T, SYMBOL, CONSTANT) \ - LDR_GLOBAL (R, T, SYMBOL, CONSTANT) -# endif - -/* Cope with negative memory offsets, which thumb can't encode. - Use NEGOFF_ADJ_BASE to (conditionally) alter the base register, - and then NEGOFF_OFF1 to use 0 for thumb and the offset for arm, - or NEGOFF_OFF2 to use A-B for thumb and A for arm. */ -# ifdef __thumb2__ -# define NEGOFF_ADJ_BASE(R, OFF) add R, R, $OFF -# define NEGOFF_ADJ_BASE2(D, S, OFF) add D, S, $OFF -# define NEGOFF_OFF1(R, OFF) [R] -# define NEGOFF_OFF2(R, OFFA, OFFB) [R, $((OFFA) - (OFFB))] -# else -# define NEGOFF_ADJ_BASE(R, OFF) -# define NEGOFF_ADJ_BASE2(D, S, OFF) mov D, S -# define NEGOFF_OFF1(R, OFF) [R, $OFF] -# define NEGOFF_OFF2(R, OFFA, OFFB) [R, $OFFA] -# endif - -/* Helper to get the TLS base pointer. The interface is that TMP is a - register that may be used to hold the LR, if necessary. TMP may be - LR itself to indicate that LR need not be saved. The base pointer - is returned in R0. Only R0 and TMP are modified. */ - -# ifdef ARCH_HAS_HARD_TP -/* If the cpu has cp15 available, use it. */ -# define GET_TLS(TMP) mrc p15, 0, r0, c13, c0, 3 -# else -/* At this generic level we have no tricks to pull. Call the ABI routine. */ -# define GET_TLS(TMP) \ - push { r1, r2, r3, lr }; \ - cfi_remember_state; \ - cfi_adjust_cfa_offset (16); \ - cfi_rel_offset (r1, 0); \ - cfi_rel_offset (r2, 4); \ - cfi_rel_offset (r3, 8); \ - cfi_rel_offset (lr, 12); \ - bl __aeabi_read_tp; \ - pop { r1, r2, r3, lr }; \ - cfi_restore_state -# endif /* ARCH_HAS_HARD_TP */ - -/* These are the directives used for EABI unwind info. - Wrap them in macros so another configuration's sysdep.h - file can define them away if it doesn't use EABI unwind info. */ -# define eabi_fnstart .fnstart -# define eabi_fnend .fnend -# define eabi_save(...) .save __VA_ARGS__ -# define eabi_cantunwind .cantunwind -# define eabi_pad(n) .pad n - -#endif /* __ASSEMBLER__ */ - -/* This number is the offset from the pc at the current location. */ -#ifdef __thumb__ -# define PC_OFS 4 -#else -# define PC_OFS 8 -#endif - -/* Pointer mangling support. */ -#if (IS_IN (rtld) || \ - (!defined SHARED && (IS_IN (libc) || IS_IN (libpthread)))) -# ifdef __ASSEMBLER__ -# define PTR_MANGLE_LOAD(guard, tmp) \ - LDR_HIDDEN (guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard_local), 0) -# define PTR_MANGLE(dst, src, guard, tmp) \ - PTR_MANGLE_LOAD(guard, tmp); \ - PTR_MANGLE2(dst, src, guard) -/* Use PTR_MANGLE2 for efficiency if guard is already loaded. */ -# define PTR_MANGLE2(dst, src, guard) \ - eor dst, src, guard -# define PTR_DEMANGLE(dst, src, guard, tmp) \ - PTR_MANGLE (dst, src, guard, tmp) -# define PTR_DEMANGLE2(dst, src, guard) \ - PTR_MANGLE2 (dst, src, guard) -# else -extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden; -# define PTR_MANGLE(var) \ - (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#else -# ifdef __ASSEMBLER__ -# define PTR_MANGLE_LOAD(guard, tmp) \ - LDR_GLOBAL (guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard), 0); -# define PTR_MANGLE(dst, src, guard, tmp) \ - PTR_MANGLE_LOAD(guard, tmp); \ - PTR_MANGLE2(dst, src, guard) -/* Use PTR_MANGLE2 for efficiency if guard is already loaded. */ -# define PTR_MANGLE2(dst, src, guard) \ - eor dst, src, guard -# define PTR_DEMANGLE(dst, src, guard, tmp) \ - PTR_MANGLE (dst, src, guard, tmp) -# define PTR_DEMANGLE2(dst, src, guard) \ - PTR_MANGLE2 (dst, src, guard) -# else -extern uintptr_t __pointer_chk_guard attribute_relro; -# define PTR_MANGLE(var) \ - (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#endif diff --git a/sysdeps/arm/test-fpucw.c b/sysdeps/arm/test-fpucw.c deleted file mode 100644 index 9fc721c7f4..0000000000 --- a/sysdeps/arm/test-fpucw.c +++ /dev/null @@ -1,5 +0,0 @@ -/* Defining _LIBC_TEST stops fpu_control.h from defining the - hard-float versions of macros (for use with dynamic VFP detection) - when compiling for soft-float. */ -#define _LIBC_TEST -#include diff --git a/sysdeps/arm/tls-macros.h b/sysdeps/arm/tls-macros.h deleted file mode 100644 index 25cd84931b..0000000000 --- a/sysdeps/arm/tls-macros.h +++ /dev/null @@ -1,72 +0,0 @@ -#include /* For ARCH_HAS_T2. */ - -#ifdef __thumb2__ -# define ARM_PC_OFFSET "4" -#else -# define ARM_PC_OFFSET "8" -#endif - -/* Returns the address of data containing ".word SYMBOL(RELOC)". */ -#if defined (ARCH_HAS_T2) && !defined (PIC) -# define GET_SPECIAL_RELOC(symbol, reloc) \ - ({ \ - int *__##symbol##_rodata; \ - asm ("movw %0, #:lower16:1f\n" \ - "movt %0, #:upper16:1f\n" \ - ".pushsection .rodata.cst4, \"aM\", %%progbits, 4\n" \ - ".balign 4\n" \ - "1: .word " #symbol "(" #reloc ")\n" \ - ".popsection" \ - : "=r" (__##symbol##_rodata)); \ - __##symbol##_rodata; \ - }) -#elif defined (ARCH_HAS_T2) && defined (PIC) && ARM_PCREL_MOVW_OK -# define GET_SPECIAL_RELOC(symbol, reloc) \ - ({ \ - int *__##symbol##_rodata; \ - asm ("movw %0, #:lower16:1f - 2f - " ARM_PC_OFFSET "\n" \ - "movt %0, #:upper16:1f - 2f - " ARM_PC_OFFSET "\n" \ - ".pushsection .rodata.cst4, \"aM\", %%progbits, 4\n" \ - ".balign 4\n" \ - "1: .word " #symbol "(" #reloc ")\n" \ - ".popsection\n" \ - "2: add %0, %0, pc" \ - : "=r" (__##symbol##_rodata)); \ - __##symbol##_rodata; \ - }) -#else -# define GET_SPECIAL_RELOC(symbol, reloc) \ - ({ \ - int *__##symbol##_rodata; \ - asm ("adr %0, 1f\n" \ - "b 2f\n" \ - ".balign 4\n" \ - "1: .word " #symbol "(" #reloc ")\n" \ - "2:" \ - : "=r" (__##symbol##_rodata)); \ - __##symbol##_rodata; \ - }) -#endif - -/* Returns the pointer value (SYMBOL(RELOC) + pc - PC_OFS). */ -#define GET_SPECIAL_PCREL(symbol, reloc) \ - ({ \ - int *__##symbol##_rodata = GET_SPECIAL_RELOC (symbol, reloc); \ - (void *) ((int) __##symbol##_rodata + *__##symbol##_rodata); \ - }) - -#define TLS_LE(x) \ - (__builtin_thread_pointer () + *GET_SPECIAL_RELOC (x, tpoff)) - -#define TLS_IE(x) \ - ((int *) (__builtin_thread_pointer () \ - + *(int *) GET_SPECIAL_PCREL (x, gottpoff))) - -extern void *__tls_get_addr (void *); - -#define TLS_LD(x) \ - ((int *) (__tls_get_addr (GET_SPECIAL_PCREL (x, tlsldm)) \ - + *GET_SPECIAL_RELOC (x, tlsldo))) - -#define TLS_GD(x) \ - ((int *) __tls_get_addr (GET_SPECIAL_PCREL (x, tlsgd))) diff --git a/sysdeps/arm/tlsdesc.c b/sysdeps/arm/tlsdesc.c deleted file mode 100644 index 7ec5fef688..0000000000 --- a/sysdeps/arm/tlsdesc.c +++ /dev/null @@ -1,160 +0,0 @@ -/* Manage TLS descriptors. ARM version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -/* This function is used to lazily resolve TLS_DESC REL relocations - Besides the TLS descriptor itself, we get the module's got address - as the second parameter. */ - -void -attribute_hidden -_dl_tlsdesc_lazy_resolver_fixup (struct tlsdesc volatile *td, - Elf32_Addr *got) -{ - struct link_map *l = (struct link_map *)got[1]; - lookup_t result; - unsigned long value; - - if (_dl_tlsdesc_resolve_early_return_p - (td, (void*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_PLT)]) + l->l_addr))) - return; - - if (td->argument.value & 0x80000000) - { - /* A global symbol, this is the symbol index. */ - /* The code below was borrowed from _dl_fixup(). */ - const Elf_Symndx symndx = td->argument.value ^ 0x80000000; - const ElfW(Sym) *const symtab - = (const void *) D_PTR (l, l_info[DT_SYMTAB]); - const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]); - const ElfW(Sym) *sym = &symtab[symndx]; - - /* Look up the target symbol. If the normal lookup rules are not - used don't look in the global scope. */ - if (ELFW(ST_BIND) (sym->st_info) != STB_LOCAL - && __builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0) - { - const struct r_found_version *version = NULL; - - if (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL) - { - const ElfW(Half) *vernum = - (const void *) D_PTR (l, l_info[VERSYMIDX (DT_VERSYM)]); - ElfW(Half) ndx = vernum[symndx] & 0x7fff; - version = &l->l_versions[ndx]; - if (version->hash == 0) - version = NULL; - } - - result = _dl_lookup_symbol_x - (strtab + sym->st_name, l, &sym, - l->l_scope, version, ELF_RTYPE_CLASS_PLT, - DL_LOOKUP_ADD_DEPENDENCY, NULL); - if (sym) - value = sym->st_value; - else - { - td->entry = _dl_tlsdesc_undefweak; - goto done; - } - } - else - { - /* We already found the symbol. The module (and therefore its load - address) is also known. */ - result = l; - value = sym->st_value; - } - } - else - { - /* A local symbol, this is the offset within our tls section. - */ - value = td->argument.value; - result = l; - } - -#ifndef SHARED - CHECK_STATIC_TLS (l, result); -#else - if (!TRY_STATIC_TLS (l, result)) - { - td->argument.pointer = _dl_make_tlsdesc_dynamic (result, value); - td->entry = _dl_tlsdesc_dynamic; - } - else -#endif - { - td->argument.value = value + result->l_tls_offset; - td->entry = _dl_tlsdesc_return; - } - - done: - _dl_tlsdesc_wake_up_held_fixups (); -} - -/* This function is used to avoid busy waiting for other threads to - complete the lazy relocation. Once another thread wins the race to - relocate a TLS descriptor, it sets the descriptor up such that this - function is called to wait until the resolver releases the - lock. */ - -void -attribute_hidden -_dl_tlsdesc_resolve_hold_fixup (struct tlsdesc volatile *td, - void *caller) -{ - /* Maybe we're lucky and can return early. */ - if (caller != td->entry) - return; - - /* Locking here will stop execution until the running resolver runs - _dl_tlsdesc_wake_up_held_fixups(), releasing the lock. - - FIXME: We'd be better off waiting on a condition variable, such - that we didn't have to hold the lock throughout the relocation - processing. */ - __rtld_lock_lock_recursive (GL(dl_load_lock)); - __rtld_lock_unlock_recursive (GL(dl_load_lock)); -} - -/* Unmap the dynamic object, but also release its TLS descriptor table - if there is one. */ - -void -internal_function -_dl_unmap (struct link_map *map) -{ - _dl_unmap_segments (map); - -#ifdef SHARED - /* _dl_unmap is only called for dlopen()ed libraries, for which - calling free() is safe, or before we've completed the initial - relocation, in which case calling free() is probably pointless, - but still safe. */ - if (map->l_mach.tlsdesc_table) - htab_delete (map->l_mach.tlsdesc_table); -#endif -} diff --git a/sysdeps/arm/tlsdesc.sym b/sysdeps/arm/tlsdesc.sym deleted file mode 100644 index 3f3a13e2c4..0000000000 --- a/sysdeps/arm/tlsdesc.sym +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include -#include -#include -#include - --- - --- Abuse tls.h macros to derive offsets relative to the thread register. - -TLSDESC_ARG offsetof(struct tlsdesc, argument.pointer) - -TLSDESC_GEN_COUNT offsetof(struct tlsdesc_dynamic_arg, gen_count) -TLSDESC_MODID offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_module) -TLSDESC_MODOFF offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_offset) diff --git a/sysdeps/arm/tst-armtlsdescextlazy.c b/sysdeps/arm/tst-armtlsdescextlazy.c deleted file mode 100644 index 36ae9994f7..0000000000 --- a/sysdeps/arm/tst-armtlsdescextlazy.c +++ /dev/null @@ -1 +0,0 @@ -#include "tst-armtlsdescloc.c" diff --git a/sysdeps/arm/tst-armtlsdescextlazymod.c b/sysdeps/arm/tst-armtlsdescextlazymod.c deleted file mode 100644 index 2cb8f8c853..0000000000 --- a/sysdeps/arm/tst-armtlsdescextlazymod.c +++ /dev/null @@ -1 +0,0 @@ -#include "tst-armtlsdesclocmod.c" diff --git a/sysdeps/arm/tst-armtlsdescextnow.c b/sysdeps/arm/tst-armtlsdescextnow.c deleted file mode 100644 index 36ae9994f7..0000000000 --- a/sysdeps/arm/tst-armtlsdescextnow.c +++ /dev/null @@ -1 +0,0 @@ -#include "tst-armtlsdescloc.c" diff --git a/sysdeps/arm/tst-armtlsdescextnowmod.c b/sysdeps/arm/tst-armtlsdescextnowmod.c deleted file mode 100644 index 2cb8f8c853..0000000000 --- a/sysdeps/arm/tst-armtlsdescextnowmod.c +++ /dev/null @@ -1 +0,0 @@ -#include "tst-armtlsdesclocmod.c" diff --git a/sysdeps/arm/tst-armtlsdescloc.c b/sysdeps/arm/tst-armtlsdescloc.c deleted file mode 100644 index 0abb5930c5..0000000000 --- a/sysdeps/arm/tst-armtlsdescloc.c +++ /dev/null @@ -1,28 +0,0 @@ -/* ARM immediate binding GNU TLS descriptor relocation test. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -int getfoo (void); - -int -do_test (void) -{ - return getfoo (); -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/arm/tst-armtlsdesclocmod.c b/sysdeps/arm/tst-armtlsdesclocmod.c deleted file mode 100644 index 4f0be0b389..0000000000 --- a/sysdeps/arm/tst-armtlsdesclocmod.c +++ /dev/null @@ -1,44 +0,0 @@ -/* DSO used for ARM immediate binding GNU TLS descriptor relocation test. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -static int __thread bar = 1; -static int __thread foo; - -int -getfoo (void) -{ - return foo; -} - -void -setfoo (int i) -{ - foo = 1; -} - -int -getbar (void) -{ - return bar; -} - -void -setbar (int i) -{ - bar = 1; -} diff --git a/sysdeps/arm/tst-audit.h b/sysdeps/arm/tst-audit.h deleted file mode 100644 index e6cc5a6ef3..0000000000 --- a/sysdeps/arm/tst-audit.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. ARM version. - - Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define pltenter la_arm_gnu_pltenter -#define pltexit la_arm_gnu_pltexit -#define La_regs La_arm_regs -#define La_retval La_arm_retval -#define int_retval lrv_reg[0] diff --git a/sysdeps/arm/unwind-dw2-fde-glibc.c b/sysdeps/arm/unwind-dw2-fde-glibc.c deleted file mode 100644 index bc3cd1fc1f..0000000000 --- a/sysdeps/arm/unwind-dw2-fde-glibc.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Dummy exception handling and frame unwind runtime interface routines. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* ARM uses setjmp-longjmp exceptions. However, previous versions of - GNU libc exported some DWARF-2 exception handling support routines. - They are not necessary, but older (or broken) configurations of GCC - will do so. Even though all references to these are weak, because - they refer to versioned symbols, they must be provided. */ - -#include -#include -#include - -/* These may be called from startup code, but don't need to do - anything. */ - -void __register_frame_info_bases (void *a1, struct object *a2, - void *a3, void *a4) -{ -} - -void __register_frame_info (void *a1, struct object *a2) -{ -} - -void __register_frame (void *a1) -{ -} - -void __register_frame_info_table_bases (void *a1, struct object *a2, - void *a3, void *a4) -{ -} - -void __register_frame_info_table (void *a1, struct object *a2) -{ -} - -void __register_frame_table (void *a1) -{ -} - -void *__deregister_frame_info (void *a1) -{ - return NULL; -} - -void *__deregister_frame_info_bases (void *a1) -{ - return NULL; -} - -void __deregister_frame (void *a1) -{ -} - -/* This should not be called. */ - -fde * -_Unwind_Find_FDE (void *a1, struct dwarf_eh_bases *a2) -{ - abort (); -} diff --git a/sysdeps/arm/unwind-pe.c b/sysdeps/arm/unwind-pe.c deleted file mode 100644 index 710cecca97..0000000000 --- a/sysdeps/arm/unwind-pe.c +++ /dev/null @@ -1 +0,0 @@ -/* Empty */ diff --git a/sysdeps/arm/unwind-resume.h b/sysdeps/arm/unwind-resume.h deleted file mode 100644 index 221f10135d..0000000000 --- a/sysdeps/arm/unwind-resume.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Definitions for unwind-resume.c. ARM (EABI) version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -/* The EABI personality routine has a different signature than the - canonical one. These macros tell sysdeps/gnu/unwind*.c how to - define __gcc_personality_v0. */ -#define PERSONALITY_PROTO \ - (_Unwind_State state, \ - struct _Unwind_Exception *ue_header, \ - struct _Unwind_Context *context) -#define PERSONALITY_ARGS \ - (state, ue_header, context) - -/* It's vitally important that _Unwind_Resume not have a stack frame; the - ARM unwinder relies on register state at entrance. So we write this in - assembly (see arm-unwind-resume.S). This macro tells the generic code - not to provide the generic C definition. */ -#define HAVE_ARCH_UNWIND_RESUME 1 diff --git a/sysdeps/arm/unwind.h b/sysdeps/arm/unwind.h deleted file mode 100644 index 08b6f38022..0000000000 --- a/sysdeps/arm/unwind.h +++ /dev/null @@ -1,278 +0,0 @@ -/* Header file for the ARM EABI unwinder - Copyright (C) 2003-2017 Free Software Foundation, Inc. - Contributed by Paul Brook - - This file is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - In addition to the permissions in the GNU General Public License, the - Free Software Foundation gives you unlimited permission to link the - compiled version of this file into combinations with other programs, - and to distribute those combinations without any restriction coming - from the use of this file. (The General Public License restrictions - do apply in other respects; for example, they cover modification of - the file, and distribution when not linked into a combine - executable.) - - This file is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see - . */ - -/* Language-independent unwinder header public defines. This contains both - ABI defined objects, and GNU support routines. */ - -#ifndef UNWIND_ARM_H -#define UNWIND_ARM_H - -#define __ARM_EABI_UNWINDER__ 1 - -#ifdef __cplusplus -extern "C" { -#endif - typedef unsigned _Unwind_Word __attribute__((__mode__(__word__))); - typedef signed _Unwind_Sword __attribute__((__mode__(__word__))); - typedef unsigned _Unwind_Ptr __attribute__((__mode__(__pointer__))); - typedef unsigned _Unwind_Internal_Ptr __attribute__((__mode__(__pointer__))); - typedef _Unwind_Word _uw; - typedef unsigned _uw64 __attribute__((mode(__DI__))); - typedef unsigned _uw16 __attribute__((mode(__HI__))); - typedef unsigned _uw8 __attribute__((mode(__QI__))); - - typedef enum - { - _URC_OK = 0, /* operation completed successfully */ - _URC_FOREIGN_EXCEPTION_CAUGHT = 1, - _URC_END_OF_STACK = 5, - _URC_HANDLER_FOUND = 6, - _URC_INSTALL_CONTEXT = 7, - _URC_CONTINUE_UNWIND = 8, - _URC_FAILURE = 9 /* unspecified failure of some kind */ - } - _Unwind_Reason_Code; - - typedef enum - { - _US_VIRTUAL_UNWIND_FRAME = 0, - _US_UNWIND_FRAME_STARTING = 1, - _US_UNWIND_FRAME_RESUME = 2, - _US_ACTION_MASK = 3, - _US_FORCE_UNWIND = 8, - _US_END_OF_STACK = 16 - } - _Unwind_State; - - /* Provided only for for compatibility with existing code. */ - typedef int _Unwind_Action; -#define _UA_SEARCH_PHASE 1 -#define _UA_CLEANUP_PHASE 2 -#define _UA_HANDLER_FRAME 4 -#define _UA_FORCE_UNWIND 8 -#define _UA_END_OF_STACK 16 -#define _URC_NO_REASON _URC_OK - - typedef struct _Unwind_Control_Block _Unwind_Control_Block; - typedef struct _Unwind_Context _Unwind_Context; - typedef _uw _Unwind_EHT_Header; - - - /* UCB: */ - - struct _Unwind_Control_Block - { -#ifdef _LIBC - /* For the benefit of code which assumes this is a scalar. All - glibc ever does is clear it. */ - _uw64 exception_class; -#else - char exception_class[8]; -#endif - void (*exception_cleanup)(_Unwind_Reason_Code, _Unwind_Control_Block *); - /* Unwinder cache, private fields for the unwinder's use */ - struct - { - _uw reserved1; /* Forced unwind stop fn, 0 if not forced */ - _uw reserved2; /* Personality routine address */ - _uw reserved3; /* Saved callsite address */ - _uw reserved4; /* Forced unwind stop arg */ - _uw reserved5; - } - unwinder_cache; - /* Propagation barrier cache (valid after phase 1): */ - struct - { - _uw sp; - _uw bitpattern[5]; - } - barrier_cache; - /* Cleanup cache (preserved over cleanup): */ - struct - { - _uw bitpattern[4]; - } - cleanup_cache; - /* Pr cache (for pr's benefit): */ - struct - { - _uw fnstart; /* function start address */ - _Unwind_EHT_Header *ehtp; /* pointer to EHT entry header word */ - _uw additional; /* additional data */ - _uw reserved1; - } - pr_cache; - long long int :0; /* Force alignment to 8-byte boundary */ - }; - - /* Virtual Register Set*/ - - typedef enum - { - _UVRSC_CORE = 0, /* integer register */ - _UVRSC_VFP = 1, /* vfp */ - _UVRSC_FPA = 2, /* fpa */ - _UVRSC_WMMXD = 3, /* Intel WMMX data register */ - _UVRSC_WMMXC = 4 /* Intel WMMX control register */ - } - _Unwind_VRS_RegClass; - - typedef enum - { - _UVRSD_UINT32 = 0, - _UVRSD_VFPX = 1, - _UVRSD_FPAX = 2, - _UVRSD_UINT64 = 3, - _UVRSD_FLOAT = 4, - _UVRSD_DOUBLE = 5 - } - _Unwind_VRS_DataRepresentation; - - typedef enum - { - _UVRSR_OK = 0, - _UVRSR_NOT_IMPLEMENTED = 1, - _UVRSR_FAILED = 2 - } - _Unwind_VRS_Result; - - /* Frame unwinding state. */ - typedef struct - { - /* The current word (bytes packed msb first). */ - _uw data; - /* Pointer to the next word of data. */ - _uw *next; - /* The number of bytes left in this word. */ - _uw8 bytes_left; - /* The number of words pointed to by ptr. */ - _uw8 words_left; - } - __gnu_unwind_state; - - typedef _Unwind_Reason_Code (*personality_routine) (_Unwind_State, - _Unwind_Control_Block *, _Unwind_Context *); - - _Unwind_VRS_Result _Unwind_VRS_Set(_Unwind_Context *, _Unwind_VRS_RegClass, - _uw, _Unwind_VRS_DataRepresentation, - void *); - - _Unwind_VRS_Result _Unwind_VRS_Get(_Unwind_Context *, _Unwind_VRS_RegClass, - _uw, _Unwind_VRS_DataRepresentation, - void *); - - _Unwind_VRS_Result _Unwind_VRS_Pop(_Unwind_Context *, _Unwind_VRS_RegClass, - _uw, _Unwind_VRS_DataRepresentation); - - - /* Support functions for the PR. */ -#define _Unwind_Exception _Unwind_Control_Block - typedef char _Unwind_Exception_Class[8]; - - void * _Unwind_GetLanguageSpecificData (_Unwind_Context *); - _Unwind_Ptr _Unwind_GetRegionStart (_Unwind_Context *); - - /* These two should never be used. */ - _Unwind_Ptr _Unwind_GetDataRelBase (_Unwind_Context *); - _Unwind_Ptr _Unwind_GetTextRelBase (_Unwind_Context *); - - /* Interface functions: */ - _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Control_Block *ucbp); - void __attribute__((noreturn)) _Unwind_Resume(_Unwind_Control_Block *ucbp); - _Unwind_Reason_Code _Unwind_Resume_or_Rethrow (_Unwind_Control_Block *ucbp); - - typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn) - (int, _Unwind_Action, _Unwind_Exception_Class, - _Unwind_Control_Block *, struct _Unwind_Context *, void *); - _Unwind_Reason_Code _Unwind_ForcedUnwind (_Unwind_Control_Block *, - _Unwind_Stop_Fn, void *); - _Unwind_Word _Unwind_GetCFA (struct _Unwind_Context *); - void _Unwind_Complete(_Unwind_Control_Block *ucbp); - void _Unwind_DeleteException (_Unwind_Exception *); - - _Unwind_Reason_Code __gnu_unwind_frame (_Unwind_Control_Block *, - _Unwind_Context *); - _Unwind_Reason_Code __gnu_unwind_execute (_Unwind_Context *, - __gnu_unwind_state *); - - /* Decode an R_ARM_TARGET2 relocation. */ - static inline _Unwind_Word - _Unwind_decode_target2 (_Unwind_Word ptr) - { - _Unwind_Word tmp; - - tmp = *(_Unwind_Word *) ptr; - /* Zero values are always NULL. */ - if (!tmp) - return 0; - -#if defined(linux) || defined(__NetBSD__) - /* Pc-relative indirect. */ - tmp += ptr; - tmp = *(_Unwind_Word *) tmp; -#elif defined(__symbian__) - /* Absolute pointer. Nothing more to do. */ -#else - /* Pc-relative pointer. */ - tmp += ptr; -#endif - return tmp; - } - - static inline _Unwind_Word - _Unwind_GetGR (_Unwind_Context *context, int regno) - { - _uw val; - _Unwind_VRS_Get (context, _UVRSC_CORE, regno, _UVRSD_UINT32, &val); - return val; - } - - /* Return the address of the instruction, not the actual IP value. */ -#define _Unwind_GetIP(context) \ - (_Unwind_GetGR (context, 15) & ~(_Unwind_Word)1) - - static inline void - _Unwind_SetGR (_Unwind_Context *context, int regno, _Unwind_Word val) - { - _Unwind_VRS_Set (context, _UVRSC_CORE, regno, _UVRSD_UINT32, &val); - } - - /* The dwarf unwinder doesn't understand arm/thumb state. We assume the - landing pad uses the same instruction set as the call site. */ -#define _Unwind_SetIP(context, val) \ - _Unwind_SetGR (context, 15, val | (_Unwind_GetGR (context, 15) & 1)) - -typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn) - (struct _Unwind_Context *, void *); - -extern _Unwind_Reason_Code _Unwind_Backtrace (_Unwind_Trace_Fn, void *); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* defined UNWIND_ARM_H */ diff --git a/sysdeps/generic/Makefile b/sysdeps/generic/Makefile deleted file mode 100644 index ae37e8d89b..0000000000 --- a/sysdeps/generic/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright (C) 1992-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifeq ($(subdir),string) -CFLAGS-wordcopy.c += -Wno-uninitialized -endif - -ifeq ($(subdir),elf) -ifeq (yes:yes,$(build-shared):$(unwind-find-fde)) -# This is needed to support g++ v2 and v3. -sysdep_routines += framestate unwind-pe -shared-only-routines += framestate unwind-pe -endif -endif diff --git a/sysdeps/generic/_G_config.h b/sysdeps/generic/_G_config.h deleted file mode 100644 index c49eed395b..0000000000 --- a/sysdeps/generic/_G_config.h +++ /dev/null @@ -1,58 +0,0 @@ -/* This file is needed by libio to define various configuration parameters. - These are always the same in the GNU C library. */ - -#ifndef _G_config_h -#define _G_config_h 1 - -/* Define types for libio in terms of the standard internal type names. */ - -#include -#define __need_size_t -#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T -# define __need_wchar_t -#endif -#define __need_NULL -#include - -#include -#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T -# include -#endif - -typedef struct -{ - __off_t __pos; - __mbstate_t __state; -} _G_fpos_t; -typedef struct -{ - __off64_t __pos; - __mbstate_t __state; -} _G_fpos64_t; -#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T -# include -typedef union -{ - struct __gconv_info __cd; - struct - { - struct __gconv_info __cd; - struct __gconv_step_data __data; - } __combined; -} _G_iconv_t; -#endif - - -/* These library features are always available in the GNU C library. */ -#define _G_va_list __gnuc_va_list - -#define _G_HAVE_MMAP 1 - -#define _G_IO_IO_FILE_VERSION 0x20001 - -/* This is defined by if `st_blksize' exists. */ -#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE) - -#define _G_BUFSIZ 8192 - -#endif /* _G_config.h */ diff --git a/sysdeps/generic/_itoa.h b/sysdeps/generic/_itoa.h deleted file mode 100644 index a065ecb890..0000000000 --- a/sysdeps/generic/_itoa.h +++ /dev/null @@ -1,105 +0,0 @@ -/* Internal function for converting integers to ASCII. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _ITOA_H -#define _ITOA_H - -#include - -/* When long long is different from long, by default, _itoa_word is - provided to convert long to ASCII and _itoa is provided to convert - long long. A sysdeps _itoa.h can define _ITOA_NEEDED to 0 and define - _ITOA_WORD_TYPE to unsigned long long int to override it so that - _itoa_word is changed to convert long long to ASCII and _itoa is - mapped to _itoa_word. */ - -#ifndef _ITOA_NEEDED -# define _ITOA_NEEDED (LONG_MAX != LLONG_MAX) -#endif -#ifndef _ITOA_WORD_TYPE -# define _ITOA_WORD_TYPE unsigned long int -#endif - - -/* Convert VALUE into ASCII in base BASE (2..36). - Write backwards starting the character just before BUFLIM. - Return the address of the first (left-to-right) character in the number. - Use upper case letters iff UPPER_CASE is nonzero. */ - -extern char *_itoa (unsigned long long int value, char *buflim, - unsigned int base, int upper_case) attribute_hidden; - -extern const char _itoa_upper_digits[]; -extern const char _itoa_lower_digits[]; -#if IS_IN (libc) || IS_IN (rtld) -hidden_proto (_itoa_upper_digits) -hidden_proto (_itoa_lower_digits) -#endif - -#if IS_IN (libc) -extern char *_itoa_word (_ITOA_WORD_TYPE value, char *buflim, - unsigned int base, - int upper_case) attribute_hidden; -#else -static inline char * __attribute__ ((unused, always_inline)) -_itoa_word (_ITOA_WORD_TYPE value, char *buflim, - unsigned int base, int upper_case) -{ - const char *digits = (upper_case - ? _itoa_upper_digits - : _itoa_lower_digits); - - switch (base) - { -# define SPECIAL(Base) \ - case Base: \ - do \ - *--buflim = digits[value % Base]; \ - while ((value /= Base) != 0); \ - break - - SPECIAL (10); - SPECIAL (16); - SPECIAL (8); - default: - do - *--buflim = digits[value % base]; - while ((value /= base) != 0); - } - return buflim; -} -# undef SPECIAL -#endif - -/* Similar to the _itoa functions, but output starts at buf and pointer - after the last written character is returned. */ -extern char *_fitoa_word (_ITOA_WORD_TYPE value, char *buf, - unsigned int base, - int upper_case) attribute_hidden; -extern char *_fitoa (unsigned long long value, char *buf, unsigned int base, - int upper_case) attribute_hidden; - -#if !_ITOA_NEEDED -/* No need for special long long versions. */ -# define _itoa(value, buf, base, upper_case) \ - _itoa_word (value, buf, base, upper_case) -# define _fitoa(value, buf, base, upper_case) \ - _fitoa_word (value, buf, base, upper_case) -#endif - -#endif /* itoa.h */ diff --git a/sysdeps/generic/a.out.h b/sysdeps/generic/a.out.h deleted file mode 100644 index 2c13762703..0000000000 --- a/sysdeps/generic/a.out.h +++ /dev/null @@ -1,339 +0,0 @@ -#ifndef __A_OUT_GNU_H__ -#define __A_OUT_GNU_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#define __GNU_EXEC_MACROS__ - -#ifndef __STRUCT_EXEC_OVERRIDE__ - -struct exec -{ - unsigned long a_info; /* Use macros N_MAGIC, etc for access */ - unsigned a_text; /* size of text, in bytes */ - unsigned a_data; /* size of data, in bytes */ - unsigned a_bss; /* size of uninitialized data area, in bytes */ - unsigned a_syms; /* length of symbol table data, in bytes */ - unsigned a_entry; /* start address */ - unsigned a_trsize; /* size of reloc info for text, in bytes */ - unsigned a_drsize; /* size of reloc info for data, in bytes */ - -#if defined (sequent) && defined (i386) - struct gdtbl - { /* Global Descriptor Table */ - unsigned g_code[2]; - unsigned g_data[2]; - unsigned g_desc[2]; - } a_gdtbl; - unsigned a_shdata; /* size of initialized shared data */ - unsigned a_shbss; /* size of uninitialized shared data */ - unsigned a_shdrsize; /* size of shared data relocation */ - unsigned a_bootstrap[11]; /* bootstrap for standalone */ - unsigned a_reserved[3]; /* reserved for future use */ - unsigned a_version; /* object version */ -#endif /* Sequent Symmetry, Dynix 3.x */ -}; - -#endif /* __STRUCT_EXEC_OVERRIDE__ */ - -/* these go in the N_MACHTYPE field */ -enum machine_type { -#if defined (M_OLDSUN2) - M__OLDSUN2 = M_OLDSUN2, -#else - M_OLDSUN2 = 0, -#endif -#if defined (M_68010) - M__68010 = M_68010, -#else - M_68010 = 1, -#endif -#if defined (M_68020) - M__68020 = M_68020, -#else - M_68020 = 2, -#endif -#if defined (M_SPARC) - M__SPARC = M_SPARC, -#else - M_SPARC = 3, -#endif - /* skip a bunch so we don't run into any of sun's numbers */ - M_386 = 100 -}; - -#if defined (sequent) && defined (i386) - -/* Dynix 3 wants the magic number to be the whole first longword. */ - -#define N_MAGIC(exec) ((exec).a_info) -#define N_MACHTYPE(exec) 0 -#define N_FLAGS(exec) 0 -#define N_SET_INFO(exec, magic, type, flags) N_SET_MAGIC ((exec), (magic)) -#define N_SET_MAGIC(exec, magic) ((exec).a_info = (magic)) -#define N_SET_MACHTYPE(exec, machtype) ((void) 0) -#define N_SET_FLAGS(exec, flags) ((void) 0) -#define OMAGIC 0x12eb /* impure format - for .o's */ -#define ZMAGIC 0x22eb /* demand load format - zero at zero */ -#define NMAGIC you lose /* syntax error -- no pure format */ -#define N_BADMAG(x) (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != ZMAGIC) -#define N_ADDRADJ(x) (N_MAGIC(x) == ZMAGIC ? SEGMENT_SIZE : 0) -#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text - N_ADDRADJ(x)) -#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data + (x).a_shdata) -#define N_SYMOFF(x) (N_DRELOFF(x) + (x).a_drsize + (x).a_shdrsize) -#define N_TXTADDR(x) SEGMENT_SIZE -#define N_COMM 0x0a /** conflicts with N_INDR **/ -#define N_FN 0x0c -/* Note that the Dynix binutils believe that N_SET[TDB] are - N_SH{DATA,BSS,COMM} -- be wary when mixing GNU & Dynix objects. */ -#define PAGE_SIZE 4096 -#define SEGMENT_SIZE PAGE_SIZE - -#else /* !(sequent && i386) */ - -#if !defined (N_MAGIC) -#define N_MAGIC(exec) ((exec).a_info & 0xffff) -#endif -#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff)) -#define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff) -#define N_SET_INFO(exec, magic, type, flags) \ - ((exec).a_info = ((magic) & 0xffff) \ - | (((int)(type) & 0xff) << 16) \ - | (((flags) & 0xff) << 24)) -#define N_SET_MAGIC(exec, magic) \ - ((exec).a_info = (((exec).a_info & 0xffff0000) | ((magic) & 0xffff))) - -#define N_SET_MACHTYPE(exec, machtype) \ - ((exec).a_info = \ - ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16)) - -#define N_SET_FLAGS(exec, flags) \ - ((exec).a_info = \ - ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24)) - -#endif /* sequent && i386 */ - -#ifndef OMAGIC -/* Code indicating object file or impure executable. */ -#define OMAGIC 0407 -/* Code indicating pure executable. */ -#define NMAGIC 0410 -/* Code indicating demand-paged executable. */ -#define ZMAGIC 0413 -#endif /* not OMAGIC */ - -#if !defined (N_BADMAG) -#define N_BADMAG(x) \ - (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \ - && N_MAGIC(x) != ZMAGIC) -#endif - -#define _N_BADMAG(x) \ - (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \ - && N_MAGIC(x) != ZMAGIC) - -#ifndef sparc -#define _N_HDROFF(x) (SEGMENT_SIZE - sizeof (struct exec)) -#else -#define _N_HDROFF(x) (- sizeof (struct exec)) -#endif - -#if !defined (N_TXTOFF) -#define N_TXTOFF(x) \ - (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : sizeof (struct exec)) -#endif - -#if !defined (N_DATOFF) -#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text) -#endif - -#if !defined (N_TRELOFF) -#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data) -#endif - -#if !defined (N_DRELOFF) -#define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize) -#endif - -#if !defined (N_SYMOFF) -#define N_SYMOFF(x) (N_DRELOFF(x) + (x).a_drsize) -#endif - -#if !defined (N_STROFF) -#define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms) -#endif - -/* Address of text segment in memory after it is loaded. */ -#if !defined (N_TXTADDR) -#define N_TXTADDR(x) 0 -#endif - -/* Address of data segment in memory after it is loaded. - Note that it is up to you to define SEGMENT_SIZE - on machines not listed here. */ -#if defined (hp300) || defined (mips) -#define PAGE_SIZE 4096 -#endif -#if defined (sparc) || defined (NeXT) -#define PAGE_SIZE 0x2000 -#endif -#if defined (sony) || (defined (sun) && defined (mc68000)) -#define SEGMENT_SIZE 0x2000 -#endif /* Sony or 68k Sun. */ -#ifdef is68k -#define SEGMENT_SIZE 0x20000 -#endif -#if defined(m68k) && defined(PORTAR) -#define PAGE_SIZE 0x400 -#endif -#if defined(i386) && !defined(sequent) -/* For COFF encapsulation. */ -#define SEGMENT_SIZE 0x400000 -#endif -#ifndef SEGMENT_SIZE -/* This used to be first in this paragraph and under: - if (defined(vax) || defined(hp300) || defined(pyr) || defined(sparc) \ - || (defined(m68k) && defined(PORTAR)) \ - || defined (NeXT) || defined (mips)) */ -#define SEGMENT_SIZE PAGE_SIZE -#endif -#ifndef PAGE_SIZE -/* This value is for i386-minix, but that has no predefine. - Making it default will only cause confusion on machines - which have no proper value defined. */ -#define PAGE_SIZE 16 -#endif - -#define PAGSIZ PAGE_SIZE -#define SEGSIZ SEGMENT_SIZE - -#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1)) - -#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text) - -#ifndef N_DATADDR -#define N_DATADDR(x) \ - (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \ - : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x)))) -#endif - -/* Address of bss segment in memory after it is loaded. */ -#if !defined (N_BSSADDR) -#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data) -#endif - -#if !defined (N_NLIST_DECLARED) -struct nlist { - union { - char *n_name; - struct nlist *n_next; - long n_strx; - } n_un; - unsigned char n_type; - char n_other; - short n_desc; - unsigned long n_value; -}; -#endif /* no N_NLIST_DECLARED. */ - -#if !defined (N_UNDF) -#define N_UNDF 0 -#endif -#if !defined (N_ABS) -#define N_ABS 2 -#endif -#if !defined (N_TEXT) -#define N_TEXT 4 -#endif -#if !defined (N_DATA) -#define N_DATA 6 -#endif -#if !defined (N_BSS) -#define N_BSS 8 -#endif -#if !defined (N_COMM) -#define N_COMM 18 -#endif -#if !defined (N_FN) -#define N_FN 15 -#endif - -#if !defined (N_EXT) -#define N_EXT 1 -#endif -#if !defined (N_TYPE) -#define N_TYPE 036 -#endif -#if !defined (N_STAB) -#define N_STAB 0340 -#endif - -/* The following type indicates the definition of a symbol as being - an indirect reference to another symbol. The other symbol - appears as an undefined reference, immediately following this symbol. - - Indirection is asymmetrical. The other symbol's value will be used - to satisfy requests for the indirect symbol, but not vice versa. - If the other symbol does not have a definition, libraries will - be searched to find a definition. */ -#define N_INDR 0xa - -/* The following symbols refer to set elements. - All the N_SET[ATDB] symbols with the same name form one set. - Space is allocated for the set in the text section, and each set - element's value is stored into one word of the space. - The first word of the space is the length of the set (number of elements). - - The address of the set is made into an N_SETV symbol - whose name is the same as the name of the set. - This symbol acts like a N_DATA global symbol - in that it can satisfy undefined external references. */ - -/* These appear as input to LD, in a .o file. */ -#define N_SETA 0x14 /* Absolute set element symbol */ -#define N_SETT 0x16 /* Text set element symbol */ -#define N_SETD 0x18 /* Data set element symbol */ -#define N_SETB 0x1A /* Bss set element symbol */ - -/* This is output from LD. */ -#define N_SETV 0x1C /* Pointer to set vector in data area. */ - -#if !defined (N_RELOCATION_INFO_DECLARED) -/* This structure describes a single relocation to be performed. - The text-relocation section of the file is a vector of these structures, - all of which apply to the text section. - Likewise, the data-relocation section applies to the data section. */ - -struct relocation_info -{ - /* Address (within segment) to be relocated. */ - int r_address; - /* The meaning of r_symbolnum depends on r_extern. */ - unsigned int r_symbolnum:24; - /* Nonzero means value is a pc-relative offset - and it should be relocated for changes in its own address - as well as for changes in the symbol or section specified. */ - unsigned int r_pcrel:1; - /* Length (as exponent of 2) of the field to be relocated. - Thus, a value of 2 indicates 1<<2 bytes. */ - unsigned int r_length:2; - /* 1 => relocate with value of symbol. - r_symbolnum is the index of the symbol - in file's the symbol table. - 0 => relocate with the address of a segment. - r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS - (the N_EXT bit may be set also, but signifies nothing). */ - unsigned int r_extern:1; - /* Four bits that aren't used, but when writing an object file - it is desirable to clear them. */ - unsigned int r_pad:4; -}; -#endif /* no N_RELOCATION_INFO_DECLARED. */ - -#ifdef __cplusplus -} -#endif - -#endif /* __A_OUT_GNU_H__ */ diff --git a/sysdeps/generic/abort-instr.h b/sysdeps/generic/abort-instr.h deleted file mode 100644 index 3c4b8c0da3..0000000000 --- a/sysdeps/generic/abort-instr.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Magic instruction to crash quickly and reliably. Generic/stub version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _ABORT_INSTR_H -#define _ABORT_INSTR_H 1 - -/* If the compiler provides the generic way to generate the right - instruction, we can use that without any machine-specific knowledge. */ -#if HAVE_BUILTIN_TRAP -# define ABORT_INSTRUCTION __builtin_trap () -#else -/* We cannot give any generic instruction to crash the program. - abort will have to make sure it never returns. */ -#endif - -#endif /* abort-instr.h */ diff --git a/sysdeps/generic/aio_misc.h b/sysdeps/generic/aio_misc.h deleted file mode 100644 index a941a68aaa..0000000000 --- a/sysdeps/generic/aio_misc.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Internal declarations for functions implementation. Stub version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _AIO_MISC_H -#define _AIO_MISC_H 1 - -#include - - -/* Extend the operation enum. */ -enum -{ - LIO_DSYNC = LIO_READ + 1, - LIO_SYNC, - LIO_READ64 = LIO_READ | 128, - LIO_WRITE64 = LIO_WRITE | 128 -}; - -/* Union of the two request types. */ -typedef union - { - struct aiocb aiocb; - struct aiocb64 aiocb64; - } aiocb_union; - - -/* Send the signal. */ -extern int __aio_sigqueue (int sig, const union sigval val, pid_t caller_pid) - internal_function; - - -#endif /* aio_misc.h */ diff --git a/sysdeps/generic/allocalim.h b/sysdeps/generic/allocalim.h deleted file mode 100644 index 2491129a7d..0000000000 --- a/sysdeps/generic/allocalim.h +++ /dev/null @@ -1,4 +0,0 @@ -extern inline int __libc_use_alloca (size_t size) -{ - return size <= __MAX_ALLOCA_CUTOFF; -} diff --git a/sysdeps/generic/asm-syntax.h b/sysdeps/generic/asm-syntax.h deleted file mode 100644 index a36150984f..0000000000 --- a/sysdeps/generic/asm-syntax.h +++ /dev/null @@ -1,3 +0,0 @@ -/* On some machines the mpn function from GNU MP use a file called - "asm-syntax.h" to define macros for assembly source code to use. */ - diff --git a/sysdeps/generic/atomic-machine.h b/sysdeps/generic/atomic-machine.h deleted file mode 100644 index 865326eaa4..0000000000 --- a/sysdeps/generic/atomic-machine.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _ATOMIC_MACHINE_H -#define _ATOMIC_MACHINE_H 1 - -/* We have by default no support for atomic operations. So define - them non-atomic. If this is a problem somebody will have to come - up with real definitions. */ - -/* The only basic operation needed is compare and exchange. */ -#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ - ({ __typeof (mem) __gmemp = (mem); \ - __typeof (*mem) __gret = *__gmemp; \ - __typeof (*mem) __gnewval = (newval); \ - \ - if (__gret == (oldval)) \ - *__gmemp = __gnewval; \ - __gret; }) - -#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \ - ({ __typeof (mem) __gmemp = (mem); \ - __typeof (*mem) __gnewval = (newval); \ - \ - *__gmemp == (oldval) ? (*__gmemp = __gnewval, 0) : 1; }) - -#endif /* atomic-machine.h */ diff --git a/sysdeps/generic/c++-types.data b/sysdeps/generic/c++-types.data deleted file mode 100644 index 2ebe1f9abd..0000000000 --- a/sysdeps/generic/c++-types.data +++ /dev/null @@ -1,2 +0,0 @@ -# This is a placeholder file. This configuration needs its own -# sysdeps/.../c++-types.data file to make the test pass. diff --git a/sysdeps/generic/confstr.h b/sysdeps/generic/confstr.h deleted file mode 100644 index 988ec88c0c..0000000000 --- a/sysdeps/generic/confstr.h +++ /dev/null @@ -1,4 +0,0 @@ -/* This file should define values for the strings returned by `confstr'. - If _NAME is passed to `confstr', define NAME. */ - -#define CS_PATH "" diff --git a/sysdeps/generic/device-nrs.h b/sysdeps/generic/device-nrs.h deleted file mode 100644 index 5319e228c7..0000000000 --- a/sysdeps/generic/device-nrs.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Device numbers of devices used in the implementation. Generic version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DEVICE_NRS_H -#define _DEVICE_NRS_H 1 - -/* By default we know no device numbers. */ - -/* We cannot check whether a given device is a tty. */ -#define DEV_TTY_P(statp) (0) - -#endif /* device-nrs.h */ diff --git a/sysdeps/generic/dirstream.h b/sysdeps/generic/dirstream.h deleted file mode 100644 index cadb41b347..0000000000 --- a/sysdeps/generic/dirstream.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DIRSTREAM_H - -#define _DIRSTREAM_H 1 - - -/* This file should define a type `struct __dirstream', the data type of - directory stream objects returned by `opendir'. */ - -#error "No system-dependent definition of `struct __dirstream'." - - -#endif /* dirstream.h */ diff --git a/sysdeps/generic/dl-cache.h b/sysdeps/generic/dl-cache.h deleted file mode 100644 index 1f0b8f629d..0000000000 --- a/sysdeps/generic/dl-cache.h +++ /dev/null @@ -1,104 +0,0 @@ -/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef _DL_CACHE_DEFAULT_ID -# define _DL_CACHE_DEFAULT_ID 3 -#endif - -#ifndef _dl_cache_check_flags -# define _dl_cache_check_flags(flags) \ - ((flags) == 1 || (flags) == _DL_CACHE_DEFAULT_ID) -#endif - -#ifndef LD_SO_CACHE -# define LD_SO_CACHE SYSCONFDIR "/ld.so.cache" -#endif - -#ifndef add_system_dir -# define add_system_dir(dir) add_dir (dir) -#endif - -#define CACHEMAGIC "ld.so-1.7.0" - -/* libc5 and glibc 2.0/2.1 use the same format. For glibc 2.2 another - format has been added in a compatible way: - The beginning of the string table is used for the new table: - old_magic - nlibs - libs[0] - ... - libs[nlibs-1] - pad, new magic needs to be aligned - - this is string[0] for the old format - new magic - this is string[0] for the new format - newnlibs - ... - newlibs[0] - ... - newlibs[newnlibs-1] - string 1 - string 2 - ... -*/ -struct file_entry -{ - int flags; /* This is 1 for an ELF library. */ - unsigned int key, value; /* String table indices. */ -}; - -struct cache_file -{ - char magic[sizeof CACHEMAGIC - 1]; - unsigned int nlibs; - struct file_entry libs[0]; -}; - -#define CACHEMAGIC_NEW "glibc-ld.so.cache" -#define CACHE_VERSION "1.1" -#define CACHEMAGIC_VERSION_NEW CACHEMAGIC_NEW CACHE_VERSION - - -struct file_entry_new -{ - int32_t flags; /* This is 1 for an ELF library. */ - uint32_t key, value; /* String table indices. */ - uint32_t osversion; /* Required OS version. */ - uint64_t hwcap; /* Hwcap entry. */ -}; - -struct cache_file_new -{ - char magic[sizeof CACHEMAGIC_NEW - 1]; - char version[sizeof CACHE_VERSION - 1]; - uint32_t nlibs; /* Number of entries. */ - uint32_t len_strings; /* Size of string table. */ - uint32_t unused[5]; /* Leave space for future extensions - and align to 8 byte boundary. */ - struct file_entry_new libs[0]; /* Entries describing libraries. */ - /* After this the string table of size len_strings is found. */ -}; - -/* Used to align cache_file_new. */ -#define ALIGN_CACHE(addr) \ -(((addr) + __alignof__ (struct cache_file_new) -1) \ - & (~(__alignof__ (struct cache_file_new) - 1))) - -extern int _dl_cache_libcmp (const char *p1, const char *p2) - internal_function attribute_hidden; diff --git a/sysdeps/generic/dl-dtprocnum.h b/sysdeps/generic/dl-dtprocnum.h deleted file mode 100644 index 7b6fc86352..0000000000 --- a/sysdeps/generic/dl-dtprocnum.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Configuration of lookup functions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Number of extra dynamic section entries for this architecture. By - default there are none. */ -#define DT_THISPROCNUM 0 diff --git a/sysdeps/generic/dl-dtv.h b/sysdeps/generic/dl-dtv.h deleted file mode 100644 index c9726620d6..0000000000 --- a/sysdeps/generic/dl-dtv.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Generic declarations for DTV-based TLS handling in the dynamic linker. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_DTV_H -#define _DL_DTV_H - -struct dtv_pointer -{ - void *val; /* Pointer to data, or TLS_DTV_UNALLOCATED. */ - void *to_free; /* Unaligned pointer, for deallocation. */ -}; - -/* Type for the dtv. */ -typedef union dtv -{ - size_t counter; - struct dtv_pointer pointer; -} dtv_t; - -/* Value used for dtv entries for which the allocation is delayed. */ -#define TLS_DTV_UNALLOCATED ((void *) -1l) - -#endif /* _DLT_DTV_H */ diff --git a/sysdeps/generic/dl-fcntl.h b/sysdeps/generic/dl-fcntl.h deleted file mode 100644 index 29985439e3..0000000000 --- a/sysdeps/generic/dl-fcntl.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Functions with hidden attribute internal to ld.so, which are declared - in include/fcntl.h. Generic version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -extern __typeof (__open) __open attribute_hidden; -extern __typeof (__fcntl) __fcntl attribute_hidden; diff --git a/sysdeps/generic/dl-fileid.h b/sysdeps/generic/dl-fileid.h deleted file mode 100644 index 544ba953df..0000000000 --- a/sysdeps/generic/dl-fileid.h +++ /dev/null @@ -1,46 +0,0 @@ -/* File identity for the dynamic linker. Stub version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* This type stores whatever information is fetched by _dl_get_file_id - and compared by _dl_file_id_match_p. */ -struct r_file_id - { - /* In the stub version, we don't record anything at all. */ - }; - -/* Sample FD to fill in *ID. Returns true on success. - On error, returns false, with errno set. */ -static inline bool -_dl_get_file_id (int fd __attribute__ ((unused)), - struct r_file_id *id __attribute__ ((unused))) -{ - return true; -} - -/* Compare two results from _dl_get_file_id for equality. - It's crucial that this never return false-positive matches. - It's ideal that it never return false-negative mismatches either, - but lack of matches is survivable. */ -static inline bool -_dl_file_id_match_p (const struct r_file_id *a __attribute__ ((unused)), - const struct r_file_id *b __attribute__ ((unused))) -{ - return false; -} diff --git a/sysdeps/generic/dl-fptr.h b/sysdeps/generic/dl-fptr.h deleted file mode 100644 index b28b72842e..0000000000 --- a/sysdeps/generic/dl-fptr.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Function descriptors. Generic version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef dl_fptr_h -#define dl_fptr_h 1 - -/* An FDESC is a function descriptor. */ - -struct fdesc - { - ElfW(Addr) ip; /* code entry point */ - ElfW(Addr) gp; /* global pointer */ - }; - -struct fdesc_table - { - struct fdesc_table *next; - unsigned int len; /* # of entries in fdesc table */ - volatile unsigned int first_unused; /* index of first available entry */ - struct fdesc fdesc[0]; - }; - -struct link_map; - -extern ElfW(Addr) _dl_boot_fptr_table []; - -extern ElfW(Addr) _dl_make_fptr (struct link_map *, const ElfW(Sym) *, - ElfW(Addr)); - -#endif /* !dl_fptr_h */ diff --git a/sysdeps/generic/dl-hash.h b/sysdeps/generic/dl-hash.h deleted file mode 100644 index 4524381647..0000000000 --- a/sysdeps/generic/dl-hash.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Compute hash value for given string according to ELF standard. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_HASH_H -#define _DL_HASH_H 1 - - -/* This is the hashing function specified by the ELF ABI. In the - first five operations no overflow is possible so we optimized it a - bit. */ -static unsigned int -__attribute__ ((unused)) -_dl_elf_hash (const char *name_arg) -{ - const unsigned char *name = (const unsigned char *) name_arg; - unsigned long int hash = *name; - if (hash != 0 && name[1] != '\0') - { - hash = (hash << 4) + name[1]; - if (name[2] != '\0') - { - hash = (hash << 4) + name[2]; - if (name[3] != '\0') - { - hash = (hash << 4) + name[3]; - if (name[4] != '\0') - { - hash = (hash << 4) + name[4]; - name += 5; - while (*name != '\0') - { - unsigned long int hi; - hash = (hash << 4) + *name++; - hi = hash & 0xf0000000; - - /* The algorithm specified in the ELF ABI is as - follows: - - if (hi != 0) - hash ^= hi >> 24; - - hash &= ~hi; - - But the following is equivalent and a lot - faster, especially on modern processors. */ - - hash ^= hi >> 24; - } - - /* Second part of the modified formula. This - operation can be lifted outside the loop. */ - hash &= 0x0fffffff; - } - } - } - } - return hash; -} - -#endif /* dl-hash.h */ diff --git a/sysdeps/generic/dl-irel.h b/sysdeps/generic/dl-irel.h deleted file mode 100644 index ef98f9df50..0000000000 --- a/sysdeps/generic/dl-irel.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Machine-dependent ELF indirect relocation inline functions. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_IREL_H -#define _DL_IREL_H - -static inline DL_FIXUP_VALUE_TYPE -__attribute ((always_inline)) -elf_ifunc_invoke (ElfW(Addr) addr) -{ - return ((DL_FIXUP_VALUE_TYPE (*) (void)) (addr)) (); -} - -#endif /* dl-irel.h */ diff --git a/sysdeps/generic/dl-librecon.h b/sysdeps/generic/dl-librecon.h deleted file mode 100644 index ecdc8df206..0000000000 --- a/sysdeps/generic/dl-librecon.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Optional code to distinguish library flavours. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_LIBRECON_H -#define _DL_LIBRECON_H 1 - -/* In the general case we don't do anything. */ - -#endif /* dl-librecon.h */ diff --git a/sysdeps/generic/dl-lookupcfg.h b/sysdeps/generic/dl-lookupcfg.h deleted file mode 100644 index 1f2f2e77d0..0000000000 --- a/sysdeps/generic/dl-lookupcfg.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Configuration of lookup functions. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The type of the return value of fixup/profile_fixup. */ -#define DL_FIXUP_VALUE_TYPE ElfW(Addr) -/* Construct a value of type DL_FIXUP_VALUE_TYPE from a code address - and a link map. */ -#define DL_FIXUP_MAKE_VALUE(map, addr) (addr) -/* Extract the code address from a value of type DL_FIXUP_MAKE_VALUE. - */ -#define DL_FIXUP_VALUE_CODE_ADDR(value) (value) -#define DL_FIXUP_VALUE_ADDR(value) (value) -#define DL_FIXUP_ADDR_VALUE(addr) (addr) diff --git a/sysdeps/generic/dl-machine.h b/sysdeps/generic/dl-machine.h deleted file mode 100644 index 59749bd84f..0000000000 --- a/sysdeps/generic/dl-machine.h +++ /dev/null @@ -1,133 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. Stub version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define ELF_MACHINE_NAME "stub" - -#include -#include - - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf32_Ehdr *ehdr) -{ - switch (ehdr->e_machine) - { - default: - return 0; - } -} - - -/* Return the link-time address of _DYNAMIC. */ -static inline Elf32_Addr -elf_machine_dynamic (void) -{ -#error "Damn, no _DYNAMIC" -} - - -/* Return the run-time load address of the shared object. */ -static inline Elf32_Addr -elf_machine_load_address (void) -{ -#error "Where am I?" -} - -/* Fixup a PLT entry to bounce directly to the function at VALUE. */ - -static inline Elf32_Addr -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf32_Rel *reloc, - Elf32_Addr *reloc_addr, Elf32_Addr value) -{ - return *reloc_addr = value; -} - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - LOADADDR is the load address of the object; INFO is an array indexed - by DT_* of the .dynamic section info. */ - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rel (Elf32_Addr loadaddr, Elf32_Dyn *info[DT_NUM], - const Elf32_Rel *reloc, const Elf32_Sym *sym, - Elf32_Addr (*resolve) (const Elf32_Sym **ref, - Elf32_Addr reloc_addr, - int noplt)) -{ - Elf32_Addr *const reloc_addr = (Elf32_Addr *) reloc->r_offset; - Elf32_Addr loadbase; - - switch (ELF32_R_TYPE (reloc->r_info)) - { - case R_MACHINE_COPY: - loadbase = (*resolve) (&sym, (Elf32_Addr) reloc_addr, 0); - memcpy (reloc_addr, (void *) (loadbase + sym->st_value), sym->st_size); - break; - default: - _dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 0); - break; - } -} - - -auto inline Elf32_Addr -__attribute__ ((always_inline)) -elf_machine_rela (Elf32_Addr loadaddr, Elf32_Dyn *info[DT_NUM], - const Elf32_Rel *reloc, const Elf32_Sym *sym, - Elf32_Addr (*resolve) (const Elf32_Sym **ref, - Elf32_Addr reloc_addr, - int noplt)) -{ - _dl_signal_error (0, "Elf32_Rela relocation requested -- unused on " - NULL, ELF_MACHINE_NAME); -} - - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int -elf_machine_runtime_setup (struct link_map *l, int lazy) -{ - extern void _dl_runtime_resolve (Elf32_Word); - - if (lazy) - { - /* The GOT entries for functions in the PLT have not yet been filled - in. Their initial contents will arrange when called to push an - offset into the .rel.plt section, push _GLOBAL_OFFSET_TABLE_[1], - and then jump to _GLOBAL_OFFSET_TABLE[2]. */ - Elf32_Addr *got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]); - got[1] = (Elf32_Addr) l; /* Identify this shared object. */ - - /* This function will get called to fix up the GOT entry indicated by - the offset on the stack, and then jump to the resolved address. */ - got[2] = (Elf32_Addr) &_dl_runtime_resolve; - } - - return lazy; -} - - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START #error need some startup code diff --git a/sysdeps/generic/dl-mman.h b/sysdeps/generic/dl-mman.h deleted file mode 100644 index fbabde91e4..0000000000 --- a/sysdeps/generic/dl-mman.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Functions with hidden attribute internal to ld.so, which are declared - in include/sys/mman.h. Generic version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -extern __typeof (__mmap) __mmap attribute_hidden; -extern __typeof (__mprotect) __mprotect attribute_hidden; -extern __typeof (__munmap) __munmap attribute_hidden; diff --git a/sysdeps/generic/dl-osinfo.h b/sysdeps/generic/dl-osinfo.h deleted file mode 100644 index cdee4124d4..0000000000 --- a/sysdeps/generic/dl-osinfo.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Operating system specific code for generic dynamic loader functions. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -static inline uintptr_t __attribute__ ((always_inline)) -_dl_setup_stack_chk_guard (void *dl_random) -{ - union - { - uintptr_t num; - unsigned char bytes[sizeof (uintptr_t)]; - } ret = { 0 }; - - if (dl_random == NULL) - { - ret.bytes[sizeof (ret) - 1] = 255; - ret.bytes[sizeof (ret) - 2] = '\n'; - } - else - { - memcpy (ret.bytes, dl_random, sizeof (ret)); -#if BYTE_ORDER == LITTLE_ENDIAN - ret.num &= ~(uintptr_t) 0xff; -#elif BYTE_ORDER == BIG_ENDIAN - ret.num &= ~((uintptr_t) 0xff << (8 * (sizeof (ret) - 1))); -#else -# error "BYTE_ORDER unknown" -#endif - } - return ret.num; -} - -static inline uintptr_t __attribute__ ((always_inline)) -_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard) -{ - uintptr_t ret; - if (dl_random == NULL) - ret = stack_chk_guard; - else - memcpy (&ret, (char *) dl_random + sizeof (ret), sizeof (ret)); - return ret; -} diff --git a/sysdeps/generic/dl-procinfo.c b/sysdeps/generic/dl-procinfo.c deleted file mode 100644 index a056184690..0000000000 --- a/sysdeps/generic/dl-procinfo.c +++ /dev/null @@ -1 +0,0 @@ -/* No architecture specific definitions. */ diff --git a/sysdeps/generic/dl-procinfo.h b/sysdeps/generic/dl-procinfo.h deleted file mode 100644 index 9a0ccacc57..0000000000 --- a/sysdeps/generic/dl-procinfo.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Stub version of processor capability information handling macros. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_PROCINFO_H -#define _DL_PROCINFO_H 1 - -/* We cannot provide a general printing function. */ -#define _dl_procinfo(type, word) -1 - -/* There are no hardware capabilities defined. */ -#define _dl_hwcap_string(idx) "" - -/* By default there is no important hardware capability. */ -#define HWCAP_IMPORTANT (0) - -/* There're no platforms to filter out. */ -#define _DL_HWCAP_PLATFORM 0 - -/* We don't have any hardware capabilities. */ -#define _DL_HWCAP_COUNT 0 - -#define _dl_string_hwcap(str) (-1) - -#define _dl_string_platform(str) (-1) - -#endif /* dl-procinfo.h */ diff --git a/sysdeps/generic/dl-sysdep.h b/sysdeps/generic/dl-sysdep.h deleted file mode 100644 index c69a4e0c02..0000000000 --- a/sysdeps/generic/dl-sysdep.h +++ /dev/null @@ -1,34 +0,0 @@ -/* System-specific settings for dynamic linker code. Generic version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* No multiple inclusion protection need here because it's just macros. - We don't want to use _DL_SYSDEP_H in case we are #include_next'd. */ - -/* This macro must be defined to either 0 or 1. - - If 1, then an errno global variable hidden in ld.so will work right with - all the errno-using libc code compiled for ld.so, and there is never a - need to share the errno location with libc. This is appropriate only if - all the libc functions that ld.so uses are called without PLT and always - get the versions linked into ld.so rather than the libc ones. */ - -#if IS_IN (rtld) -# define RTLD_PRIVATE_ERRNO 1 -#else -# define RTLD_PRIVATE_ERRNO 0 -#endif diff --git a/sysdeps/generic/dl-tls.h b/sysdeps/generic/dl-tls.h deleted file mode 100644 index 7703a97525..0000000000 --- a/sysdeps/generic/dl-tls.h +++ /dev/null @@ -1,2 +0,0 @@ -/* There has to be an architecture specific version of this file. */ -#error "architecture-specific version of missing" diff --git a/sysdeps/generic/dl-unistd.h b/sysdeps/generic/dl-unistd.h deleted file mode 100644 index dc738cd8e2..0000000000 --- a/sysdeps/generic/dl-unistd.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Functions with hidden attribute internal to ld.so, which are declared - in include/unistd.h. Generic version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -extern __typeof (__access) __access attribute_hidden; -extern __typeof (__brk) __brk attribute_hidden; -extern __typeof (__close) __close attribute_hidden; -extern __typeof (__getcwd) __getcwd attribute_hidden; -extern __typeof (__getpid) __getpid attribute_hidden; -extern __typeof (__libc_read) __libc_read attribute_hidden; -extern __typeof (__libc_write) __libc_write attribute_hidden; -extern __typeof (__lseek) __lseek attribute_hidden; -extern __typeof (__profil) __profil attribute_hidden; -extern __typeof (__read) __read attribute_hidden; -extern __typeof (__sbrk) __sbrk attribute_hidden; diff --git a/sysdeps/generic/dwarf2.h b/sysdeps/generic/dwarf2.h deleted file mode 100644 index bc68a5901a..0000000000 --- a/sysdeps/generic/dwarf2.h +++ /dev/null @@ -1,590 +0,0 @@ -/* Declarations and definitions of codes relating to the DWARF2 symbolic - debugging information format. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - Contributed by Gary Funck (gary@intrepid.com). Derived from the - DWARF 1 implementation written by Ron Guilmette (rfg@monkeys.com). - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DWARF2_H -#define _DWARF2_H 1 - -/* This file is derived from the DWARF specification (a public document) - Revision 2.0.0 (July 27, 1993) developed by the UNIX International - Programming Languages Special Interest Group (UI/PLSIG) and distributed - by UNIX International. Copies of this specification are available from - UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054. */ - -/* This file is shared between GCC and GDB, and should not contain - prototypes. */ - -#ifndef __ASSEMBLER__ -/* Tag names and codes. */ - -enum dwarf_tag - { - DW_TAG_padding = 0x00, - DW_TAG_array_type = 0x01, - DW_TAG_class_type = 0x02, - DW_TAG_entry_point = 0x03, - DW_TAG_enumeration_type = 0x04, - DW_TAG_formal_parameter = 0x05, - DW_TAG_imported_declaration = 0x08, - DW_TAG_label = 0x0a, - DW_TAG_lexical_block = 0x0b, - DW_TAG_member = 0x0d, - DW_TAG_pointer_type = 0x0f, - DW_TAG_reference_type = 0x10, - DW_TAG_compile_unit = 0x11, - DW_TAG_string_type = 0x12, - DW_TAG_structure_type = 0x13, - DW_TAG_subroutine_type = 0x15, - DW_TAG_typedef = 0x16, - DW_TAG_union_type = 0x17, - DW_TAG_unspecified_parameters = 0x18, - DW_TAG_variant = 0x19, - DW_TAG_common_block = 0x1a, - DW_TAG_common_inclusion = 0x1b, - DW_TAG_inheritance = 0x1c, - DW_TAG_inlined_subroutine = 0x1d, - DW_TAG_module = 0x1e, - DW_TAG_ptr_to_member_type = 0x1f, - DW_TAG_set_type = 0x20, - DW_TAG_subrange_type = 0x21, - DW_TAG_with_stmt = 0x22, - DW_TAG_access_declaration = 0x23, - DW_TAG_base_type = 0x24, - DW_TAG_catch_block = 0x25, - DW_TAG_const_type = 0x26, - DW_TAG_constant = 0x27, - DW_TAG_enumerator = 0x28, - DW_TAG_file_type = 0x29, - DW_TAG_friend = 0x2a, - DW_TAG_namelist = 0x2b, - DW_TAG_namelist_item = 0x2c, - DW_TAG_packed_type = 0x2d, - DW_TAG_subprogram = 0x2e, - DW_TAG_template_type_param = 0x2f, - DW_TAG_template_value_param = 0x30, - DW_TAG_thrown_type = 0x31, - DW_TAG_try_block = 0x32, - DW_TAG_variant_part = 0x33, - DW_TAG_variable = 0x34, - DW_TAG_volatile_type = 0x35, - /* SGI/MIPS Extensions */ - DW_TAG_MIPS_loop = 0x4081, - /* GNU extensions */ - DW_TAG_format_label = 0x4101, /* for FORTRAN 77 and Fortran 90 */ - DW_TAG_function_template = 0x4102, /* for C++ */ - DW_TAG_class_template = 0x4103, /* for C++ */ - DW_TAG_GNU_BINCL = 0x4104, - DW_TAG_GNU_EINCL = 0x4105 - }; - -#define DW_TAG_lo_user 0x4080 -#define DW_TAG_hi_user 0xffff - -/* flag that tells whether entry has a child or not */ -#define DW_children_no 0 -#define DW_children_yes 1 - -/* Form names and codes. */ -enum dwarf_form - { - DW_FORM_addr = 0x01, - DW_FORM_block2 = 0x03, - DW_FORM_block4 = 0x04, - DW_FORM_data2 = 0x05, - DW_FORM_data4 = 0x06, - DW_FORM_data8 = 0x07, - DW_FORM_string = 0x08, - DW_FORM_block = 0x09, - DW_FORM_block1 = 0x0a, - DW_FORM_data1 = 0x0b, - DW_FORM_flag = 0x0c, - DW_FORM_sdata = 0x0d, - DW_FORM_strp = 0x0e, - DW_FORM_udata = 0x0f, - DW_FORM_ref_addr = 0x10, - DW_FORM_ref1 = 0x11, - DW_FORM_ref2 = 0x12, - DW_FORM_ref4 = 0x13, - DW_FORM_ref8 = 0x14, - DW_FORM_ref_udata = 0x15, - DW_FORM_indirect = 0x16 - }; - -/* Attribute names and codes. */ - -enum dwarf_attribute - { - DW_AT_sibling = 0x01, - DW_AT_location = 0x02, - DW_AT_name = 0x03, - DW_AT_ordering = 0x09, - DW_AT_subscr_data = 0x0a, - DW_AT_byte_size = 0x0b, - DW_AT_bit_offset = 0x0c, - DW_AT_bit_size = 0x0d, - DW_AT_element_list = 0x0f, - DW_AT_stmt_list = 0x10, - DW_AT_low_pc = 0x11, - DW_AT_high_pc = 0x12, - DW_AT_language = 0x13, - DW_AT_member = 0x14, - DW_AT_discr = 0x15, - DW_AT_discr_value = 0x16, - DW_AT_visibility = 0x17, - DW_AT_import = 0x18, - DW_AT_string_length = 0x19, - DW_AT_common_reference = 0x1a, - DW_AT_comp_dir = 0x1b, - DW_AT_const_value = 0x1c, - DW_AT_containing_type = 0x1d, - DW_AT_default_value = 0x1e, - DW_AT_inline = 0x20, - DW_AT_is_optional = 0x21, - DW_AT_lower_bound = 0x22, - DW_AT_producer = 0x25, - DW_AT_prototyped = 0x27, - DW_AT_return_addr = 0x2a, - DW_AT_start_scope = 0x2c, - DW_AT_stride_size = 0x2e, - DW_AT_upper_bound = 0x2f, - DW_AT_abstract_origin = 0x31, - DW_AT_accessibility = 0x32, - DW_AT_address_class = 0x33, - DW_AT_artificial = 0x34, - DW_AT_base_types = 0x35, - DW_AT_calling_convention = 0x36, - DW_AT_count = 0x37, - DW_AT_data_member_location = 0x38, - DW_AT_decl_column = 0x39, - DW_AT_decl_file = 0x3a, - DW_AT_decl_line = 0x3b, - DW_AT_declaration = 0x3c, - DW_AT_discr_list = 0x3d, - DW_AT_encoding = 0x3e, - DW_AT_external = 0x3f, - DW_AT_frame_base = 0x40, - DW_AT_friend = 0x41, - DW_AT_identifier_case = 0x42, - DW_AT_macro_info = 0x43, - DW_AT_namelist_items = 0x44, - DW_AT_priority = 0x45, - DW_AT_segment = 0x46, - DW_AT_specification = 0x47, - DW_AT_static_link = 0x48, - DW_AT_type = 0x49, - DW_AT_use_location = 0x4a, - DW_AT_variable_parameter = 0x4b, - DW_AT_virtuality = 0x4c, - DW_AT_vtable_elem_location = 0x4d, - /* SGI/MIPS Extensions */ - DW_AT_MIPS_fde = 0x2001, - DW_AT_MIPS_loop_begin = 0x2002, - DW_AT_MIPS_tail_loop_begin = 0x2003, - DW_AT_MIPS_epilog_begin = 0x2004, - DW_AT_MIPS_loop_unroll_factor = 0x2005, - DW_AT_MIPS_software_pipeline_depth = 0x2006, - DW_AT_MIPS_linkage_name = 0x2007, - DW_AT_MIPS_stride = 0x2008, - DW_AT_MIPS_abstract_name = 0x2009, - DW_AT_MIPS_clone_origin = 0x200a, - DW_AT_MIPS_has_inlines = 0x200b, - /* GNU extensions. */ - DW_AT_sf_names = 0x2101, - DW_AT_src_info = 0x2102, - DW_AT_mac_info = 0x2103, - DW_AT_src_coords = 0x2104, - DW_AT_body_begin = 0x2105, - DW_AT_body_end = 0x2106 - }; - -#define DW_AT_lo_user 0x2000 /* implementation-defined range start */ -#define DW_AT_hi_user 0x3ff0 /* implementation-defined range end */ - -/* Location atom names and codes. */ - -enum dwarf_location_atom - { - DW_OP_addr = 0x03, - DW_OP_deref = 0x06, - DW_OP_const1u = 0x08, - DW_OP_const1s = 0x09, - DW_OP_const2u = 0x0a, - DW_OP_const2s = 0x0b, - DW_OP_const4u = 0x0c, - DW_OP_const4s = 0x0d, - DW_OP_const8u = 0x0e, - DW_OP_const8s = 0x0f, - DW_OP_constu = 0x10, - DW_OP_consts = 0x11, - DW_OP_dup = 0x12, - DW_OP_drop = 0x13, - DW_OP_over = 0x14, - DW_OP_pick = 0x15, - DW_OP_swap = 0x16, - DW_OP_rot = 0x17, - DW_OP_xderef = 0x18, - DW_OP_abs = 0x19, - DW_OP_and = 0x1a, - DW_OP_div = 0x1b, - DW_OP_minus = 0x1c, - DW_OP_mod = 0x1d, - DW_OP_mul = 0x1e, - DW_OP_neg = 0x1f, - DW_OP_not = 0x20, - DW_OP_or = 0x21, - DW_OP_plus = 0x22, - DW_OP_plus_uconst = 0x23, - DW_OP_shl = 0x24, - DW_OP_shr = 0x25, - DW_OP_shra = 0x26, - DW_OP_xor = 0x27, - DW_OP_bra = 0x28, - DW_OP_eq = 0x29, - DW_OP_ge = 0x2a, - DW_OP_gt = 0x2b, - DW_OP_le = 0x2c, - DW_OP_lt = 0x2d, - DW_OP_ne = 0x2e, - DW_OP_skip = 0x2f, - DW_OP_lit0 = 0x30, - DW_OP_lit1 = 0x31, - DW_OP_lit2 = 0x32, - DW_OP_lit3 = 0x33, - DW_OP_lit4 = 0x34, - DW_OP_lit5 = 0x35, - DW_OP_lit6 = 0x36, - DW_OP_lit7 = 0x37, - DW_OP_lit8 = 0x38, - DW_OP_lit9 = 0x39, - DW_OP_lit10 = 0x3a, - DW_OP_lit11 = 0x3b, - DW_OP_lit12 = 0x3c, - DW_OP_lit13 = 0x3d, - DW_OP_lit14 = 0x3e, - DW_OP_lit15 = 0x3f, - DW_OP_lit16 = 0x40, - DW_OP_lit17 = 0x41, - DW_OP_lit18 = 0x42, - DW_OP_lit19 = 0x43, - DW_OP_lit20 = 0x44, - DW_OP_lit21 = 0x45, - DW_OP_lit22 = 0x46, - DW_OP_lit23 = 0x47, - DW_OP_lit24 = 0x48, - DW_OP_lit25 = 0x49, - DW_OP_lit26 = 0x4a, - DW_OP_lit27 = 0x4b, - DW_OP_lit28 = 0x4c, - DW_OP_lit29 = 0x4d, - DW_OP_lit30 = 0x4e, - DW_OP_lit31 = 0x4f, - DW_OP_reg0 = 0x50, - DW_OP_reg1 = 0x51, - DW_OP_reg2 = 0x52, - DW_OP_reg3 = 0x53, - DW_OP_reg4 = 0x54, - DW_OP_reg5 = 0x55, - DW_OP_reg6 = 0x56, - DW_OP_reg7 = 0x57, - DW_OP_reg8 = 0x58, - DW_OP_reg9 = 0x59, - DW_OP_reg10 = 0x5a, - DW_OP_reg11 = 0x5b, - DW_OP_reg12 = 0x5c, - DW_OP_reg13 = 0x5d, - DW_OP_reg14 = 0x5e, - DW_OP_reg15 = 0x5f, - DW_OP_reg16 = 0x60, - DW_OP_reg17 = 0x61, - DW_OP_reg18 = 0x62, - DW_OP_reg19 = 0x63, - DW_OP_reg20 = 0x64, - DW_OP_reg21 = 0x65, - DW_OP_reg22 = 0x66, - DW_OP_reg23 = 0x67, - DW_OP_reg24 = 0x68, - DW_OP_reg25 = 0x69, - DW_OP_reg26 = 0x6a, - DW_OP_reg27 = 0x6b, - DW_OP_reg28 = 0x6c, - DW_OP_reg29 = 0x6d, - DW_OP_reg30 = 0x6e, - DW_OP_reg31 = 0x6f, - DW_OP_breg0 = 0x70, - DW_OP_breg1 = 0x71, - DW_OP_breg2 = 0x72, - DW_OP_breg3 = 0x73, - DW_OP_breg4 = 0x74, - DW_OP_breg5 = 0x75, - DW_OP_breg6 = 0x76, - DW_OP_breg7 = 0x77, - DW_OP_breg8 = 0x78, - DW_OP_breg9 = 0x79, - DW_OP_breg10 = 0x7a, - DW_OP_breg11 = 0x7b, - DW_OP_breg12 = 0x7c, - DW_OP_breg13 = 0x7d, - DW_OP_breg14 = 0x7e, - DW_OP_breg15 = 0x7f, - DW_OP_breg16 = 0x80, - DW_OP_breg17 = 0x81, - DW_OP_breg18 = 0x82, - DW_OP_breg19 = 0x83, - DW_OP_breg20 = 0x84, - DW_OP_breg21 = 0x85, - DW_OP_breg22 = 0x86, - DW_OP_breg23 = 0x87, - DW_OP_breg24 = 0x88, - DW_OP_breg25 = 0x89, - DW_OP_breg26 = 0x8a, - DW_OP_breg27 = 0x8b, - DW_OP_breg28 = 0x8c, - DW_OP_breg29 = 0x8d, - DW_OP_breg30 = 0x8e, - DW_OP_breg31 = 0x8f, - DW_OP_regx = 0x90, - DW_OP_fbreg = 0x91, - DW_OP_bregx = 0x92, - DW_OP_piece = 0x93, - DW_OP_deref_size = 0x94, - DW_OP_xderef_size = 0x95, - DW_OP_nop = 0x96 - }; - -#define DW_OP_lo_user 0x80 /* implementation-defined range start */ -#define DW_OP_hi_user 0xff /* implementation-defined range end */ - -/* Type encodings. */ - -enum dwarf_type - { - DW_ATE_void = 0x0, - DW_ATE_address = 0x1, - DW_ATE_boolean = 0x2, - DW_ATE_complex_float = 0x3, - DW_ATE_float = 0x4, - DW_ATE_signed = 0x5, - DW_ATE_signed_char = 0x6, - DW_ATE_unsigned = 0x7, - DW_ATE_unsigned_char = 0x8 - }; - -#define DW_ATE_lo_user 0x80 -#define DW_ATE_hi_user 0xff - -/* Array ordering names and codes. */ -enum dwarf_array_dim_ordering - { - DW_ORD_row_major = 0, - DW_ORD_col_major = 1 - }; - -/* access attribute */ -enum dwarf_access_attribute - { - DW_ACCESS_public = 1, - DW_ACCESS_protected = 2, - DW_ACCESS_private = 3 - }; - -/* visibility */ -enum dwarf_visibility_attribute - { - DW_VIS_local = 1, - DW_VIS_exported = 2, - DW_VIS_qualified = 3 - }; - -/* virtuality */ -enum dwarf_virtuality_attribute - { - DW_VIRTUALITY_none = 0, - DW_VIRTUALITY_virtual = 1, - DW_VIRTUALITY_pure_virtual = 2 - }; - -/* case sensitivity */ -enum dwarf_id_case - { - DW_ID_case_sensitive = 0, - DW_ID_up_case = 1, - DW_ID_down_case = 2, - DW_ID_case_insensitive = 3 - }; - -/* calling convention */ -enum dwarf_calling_convention - { - DW_CC_normal = 0x1, - DW_CC_program = 0x2, - DW_CC_nocall = 0x3 - }; - -#define DW_CC_lo_user 0x40 -#define DW_CC_hi_user 0xff - -/* inline attribute */ -enum dwarf_inline_attribute - { - DW_INL_not_inlined = 0, - DW_INL_inlined = 1, - DW_INL_declared_not_inlined = 2, - DW_INL_declared_inlined = 3 - }; - -/* discriminant lists */ -enum dwarf_discrim_list - { - DW_DSC_label = 0, - DW_DSC_range = 1 - }; - -/* line number opcodes */ -enum dwarf_line_number_ops - { - DW_LNS_extended_op = 0, - DW_LNS_copy = 1, - DW_LNS_advance_pc = 2, - DW_LNS_advance_line = 3, - DW_LNS_set_file = 4, - DW_LNS_set_column = 5, - DW_LNS_negate_stmt = 6, - DW_LNS_set_basic_block = 7, - DW_LNS_const_add_pc = 8, - DW_LNS_fixed_advance_pc = 9 - }; - -/* line number extended opcodes */ -enum dwarf_line_number_x_ops - { - DW_LNE_end_sequence = 1, - DW_LNE_set_address = 2, - DW_LNE_define_file = 3 - }; - -/* call frame information */ -enum dwarf_call_frame_info - { - DW_CFA_advance_loc = 0x40, - DW_CFA_offset = 0x80, - DW_CFA_restore = 0xc0, - DW_CFA_nop = 0x00, - DW_CFA_set_loc = 0x01, - DW_CFA_advance_loc1 = 0x02, - DW_CFA_advance_loc2 = 0x03, - DW_CFA_advance_loc4 = 0x04, - DW_CFA_offset_extended = 0x05, - DW_CFA_restore_extended = 0x06, - DW_CFA_undefined = 0x07, - DW_CFA_same_value = 0x08, - DW_CFA_register = 0x09, - DW_CFA_remember_state = 0x0a, - DW_CFA_restore_state = 0x0b, - DW_CFA_def_cfa = 0x0c, - DW_CFA_def_cfa_register = 0x0d, - DW_CFA_def_cfa_offset = 0x0e, - DW_CFA_def_cfa_expression = 0x0f, - DW_CFA_expression = 0x10, - /* Dwarf 2.1 */ - DW_CFA_offset_extended_sf = 0x11, - DW_CFA_def_cfa_sf = 0x12, - DW_CFA_def_cfa_offset_sf = 0x13, - - /* SGI/MIPS specific */ - DW_CFA_MIPS_advance_loc8 = 0x1d, - - /* GNU extensions */ - DW_CFA_GNU_window_save = 0x2d, - DW_CFA_GNU_args_size = 0x2e, - DW_CFA_GNU_negative_offset_extended = 0x2f - }; - -#define DW_CIE_ID 0xffffffff -#define DW_CIE_VERSION 1 - -#define DW_CFA_extended 0 -#define DW_CFA_low_user 0x1c -#define DW_CFA_high_user 0x3f - -#define DW_CHILDREN_no 0x00 -#define DW_CHILDREN_yes 0x01 - -#define DW_ADDR_none 0 - -/* Source language names and codes. */ - -enum dwarf_source_language - { - DW_LANG_C89 = 0x0001, - DW_LANG_C = 0x0002, - DW_LANG_Ada83 = 0x0003, - DW_LANG_C_plus_plus = 0x0004, - DW_LANG_Cobol74 = 0x0005, - DW_LANG_Cobol85 = 0x0006, - DW_LANG_Fortran77 = 0x0007, - DW_LANG_Fortran90 = 0x0008, - DW_LANG_Pascal83 = 0x0009, - DW_LANG_Modula2 = 0x000a, - DW_LANG_Java = 0x000b, - DW_LANG_Mips_Assembler = 0x8001 - }; - - -#define DW_LANG_lo_user 0x8000 /* implementation-defined range start */ -#define DW_LANG_hi_user 0xffff /* implementation-defined range start */ - -/* Names and codes for macro information. */ - -enum dwarf_macinfo_record_type - { - DW_MACINFO_define = 1, - DW_MACINFO_undef = 2, - DW_MACINFO_start_file = 3, - DW_MACINFO_end_file = 4, - DW_MACINFO_vendor_ext = 255 - }; - -#endif /* !ASSEMBLER */ - -/* @@@ For use with GNU frame unwind information. */ - -#define DW_EH_PE_absptr 0x00 -#define DW_EH_PE_omit 0xff - -#define DW_EH_PE_uleb128 0x01 -#define DW_EH_PE_udata2 0x02 -#define DW_EH_PE_udata4 0x03 -#define DW_EH_PE_udata8 0x04 -#define DW_EH_PE_sleb128 0x09 -#define DW_EH_PE_sdata2 0x0A -#define DW_EH_PE_sdata4 0x0B -#define DW_EH_PE_sdata8 0x0C -#define DW_EH_PE_signed 0x08 - -#define DW_EH_PE_pcrel 0x10 -#define DW_EH_PE_textrel 0x20 -#define DW_EH_PE_datarel 0x30 -#define DW_EH_PE_funcrel 0x40 -#define DW_EH_PE_aligned 0x50 - -#define DW_EH_PE_indirect 0x80 - -#endif /* dwarf2.h */ diff --git a/sysdeps/generic/elide.h b/sysdeps/generic/elide.h deleted file mode 100644 index 26697be2f1..0000000000 --- a/sysdeps/generic/elide.h +++ /dev/null @@ -1,25 +0,0 @@ -/* elide.h: Fallback noop lock elision support. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ -#ifndef ELIDE_H -#define ELIDE_H 1 - -#define ELIDE_LOCK(adapt_count, is_lock_free) 0 -#define ELIDE_TRYLOCK(adapt_count, is_lock_free, write) 0 -#define ELIDE_UNLOCK(is_lock_free) 0 - -#endif diff --git a/sysdeps/generic/eloop-threshold.h b/sysdeps/generic/eloop-threshold.h deleted file mode 100644 index da6be07a50..0000000000 --- a/sysdeps/generic/eloop-threshold.h +++ /dev/null @@ -1,72 +0,0 @@ -/* Threshold at which to diagnose ELOOP. Generic version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _ELOOP_THRESHOLD_H -#define _ELOOP_THRESHOLD_H 1 - -#include -#include - -/* POSIX specifies SYMLOOP_MAX as the "Maximum number of symbolic - links that can be reliably traversed in the resolution of a - pathname in the absence of a loop." This makes it a minimum that - we should certainly accept. But it leaves open the possibility - that more might sometimes work--just not "reliably". - - For example, Linux implements a complex policy whereby there is a - small limit on the number of direct symlink traversals (a symlink - to a symlink to a symlink), but larger limit on the total number of - symlink traversals overall. Hence the SYMLOOP_MAX number should be - the small one, but the limit library functions enforce on users - should be the larger one. - - So, we use the larger of the reported SYMLOOP_MAX (if any) and our - own constant MIN_ELOOP_THRESHOLD, below. This constant should be - large enough that it never rules out a file name and directory tree - that the underlying system (i.e. calls to 'open' et al) would - resolve successfully. It should be small enough that actual loops - are detected without a huge number of iterations. */ - -#ifndef MIN_ELOOP_THRESHOLD -# define MIN_ELOOP_THRESHOLD 40 -#endif - -/* Return the maximum number of symlink traversals to permit - before diagnosing ELOOP. */ -static inline unsigned int __attribute__ ((const)) -__eloop_threshold (void) -{ -#ifdef SYMLOOP_MAX - const int symloop_max = SYMLOOP_MAX; -#else - /* The function is marked 'const' even though we use memory and - call a function, because sysconf is required to return the - same value in every call and so it must always be safe to - call __eloop_threshold exactly once and reuse the value. */ - static long int sysconf_symloop_max; - if (sysconf_symloop_max == 0) - sysconf_symloop_max = __sysconf (_SC_SYMLOOP_MAX); - const unsigned int symloop_max = (sysconf_symloop_max <= 0 - ? _POSIX_SYMLOOP_MAX - : sysconf_symloop_max); -#endif - - return MAX (symloop_max, MIN_ELOOP_THRESHOLD); -} - -#endif /* eloop-threshold.h */ diff --git a/sysdeps/generic/entry.h b/sysdeps/generic/entry.h deleted file mode 100644 index 16d3e3045e..0000000000 --- a/sysdeps/generic/entry.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef __ASSEMBLY__ -extern void _start (void) attribute_hidden; -#endif - -#define ENTRY_POINT _start diff --git a/sysdeps/generic/errqueue.h b/sysdeps/generic/errqueue.h deleted file mode 100644 index dac2bd3863..0000000000 --- a/sysdeps/generic/errqueue.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _BITS_ERRQUEUE_H -#define _BITS_ERRQUEUE_H 1 - -/* This platform does not support socket error reporting - via MSG_ERRQUEUE. */ - -#endif /* bits/errqueue.h */ diff --git a/sysdeps/generic/exit-thread.h b/sysdeps/generic/exit-thread.h deleted file mode 100644 index a90a6b8346..0000000000 --- a/sysdeps/generic/exit-thread.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Call to terminate the current thread. Stub version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This causes the current thread to exit, without affecting other - threads in the process if there are any. If there are no other - threads left, then this has the effect of _exit (0). */ - -static inline void __attribute__ ((noreturn, always_inline, unused)) -__exit_thread (void) -{ - while (1) - asm ("write me!"); -} diff --git a/sysdeps/generic/fd_to_filename.h b/sysdeps/generic/fd_to_filename.h deleted file mode 100644 index fe15f5d97e..0000000000 --- a/sysdeps/generic/fd_to_filename.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Query filename corresponding to an open FD. Generic version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* In general there is no generic way to query filename for an open - file descriptor. */ -static inline const char * -fd_to_filename (int fd) -{ - return NULL; -} diff --git a/sysdeps/generic/fips-private.h b/sysdeps/generic/fips-private.h deleted file mode 100644 index dde837eb8f..0000000000 --- a/sysdeps/generic/fips-private.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Dummy implementation of FIPS compliance status test. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FIPS_PRIVATE_H -#define _FIPS_PRIVATE_H - -#include - -/* Return true if compliance with the FIPS security standards is - enabled. - - This is only relevant within crypt, to tell whether MD5 and DES - algorithms should be rejected. */ - -static inline bool -fips_enabled_p (void) -{ - return false; -} - -#endif /* _FIPS_PRIVATE_H */ diff --git a/sysdeps/generic/fix-fp-int-compare-invalid.h b/sysdeps/generic/fix-fp-int-compare-invalid.h deleted file mode 100644 index 421452d3a8..0000000000 --- a/sysdeps/generic/fix-fp-int-compare-invalid.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Fix for missing "invalid" exceptions from floating-point - comparisons. Generic version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef FIX_FP_INT_COMPARE_INVALID_H -#define FIX_FP_INT_COMPARE_INVALID_H 1 - -/* Define this macro to 1 to work around ordered comparison operators - in C failing to raise the "invalid" exception for NaN operands. */ -#define FIX_COMPARE_INVALID 0 - -#endif /* fix-fp-int-compare-invalid.h */ diff --git a/sysdeps/generic/fix-fp-int-convert-overflow.h b/sysdeps/generic/fix-fp-int-convert-overflow.h deleted file mode 100644 index 4b0cd9159f..0000000000 --- a/sysdeps/generic/fix-fp-int-convert-overflow.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Fix for conversion of floating point to integer overflow. Generic version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef FIX_FP_INT_CONVERT_OVERFLOW_H -#define FIX_FP_INT_CONVERT_OVERFLOW_H 1 - -/* Define these macros to 1 to workaround conversions of out-of-range - floating-point numbers to integer types failing to raise the - "invalid" exception, or raising spurious "inexact" or other - exceptions. */ -#define FIX_FLT_LONG_CONVERT_OVERFLOW 0 -#define FIX_FLT_LLONG_CONVERT_OVERFLOW 0 -#define FIX_DBL_LONG_CONVERT_OVERFLOW 0 -#define FIX_DBL_LLONG_CONVERT_OVERFLOW 0 -#define FIX_LDBL_LONG_CONVERT_OVERFLOW 0 -#define FIX_LDBL_LLONG_CONVERT_OVERFLOW 0 -#define FIX_FLT128_LONG_CONVERT_OVERFLOW 0 -#define FIX_FLT128_LLONG_CONVERT_OVERFLOW 0 - -#endif /* fix-fp-int-convert-overflow.h */ diff --git a/sysdeps/generic/fix-int-fp-convert-zero.h b/sysdeps/generic/fix-int-fp-convert-zero.h deleted file mode 100644 index 1318e3ff93..0000000000 --- a/sysdeps/generic/fix-int-fp-convert-zero.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Fix for conversion of integer 0 to floating point. Generic version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef FIX_INT_FP_CONVERT_ZERO_H -#define FIX_INT_FP_CONVERT_ZERO_H 1 - -/* Define this macro to 1 to work around conversions of integer 0 to - floating point returning -0 instead of the correct +0 in some - rounding modes. */ -#define FIX_INT_FP_CONVERT_ZERO 0 - -#endif /* fix-int-fp-convert-zero.h */ diff --git a/sysdeps/generic/fork.h b/sysdeps/generic/fork.h deleted file mode 100644 index 623cae28df..0000000000 --- a/sysdeps/generic/fork.h +++ /dev/null @@ -1,8 +0,0 @@ -/* Stub version of header for fork handling. Mainly to handle pthread_atfork - and friends. Outside dependencies: - - UNREGISTER_ATFORK - If defined it must expand to a function call which takes one void* - parameter which is the DSO handle for the DSO which gets unloaded. - The function so called has to remove the atfork handlers registered - by this module. */ diff --git a/sysdeps/generic/fpu_control.h b/sysdeps/generic/fpu_control.h deleted file mode 100644 index 0ec25c64ab..0000000000 --- a/sysdeps/generic/fpu_control.h +++ /dev/null @@ -1,38 +0,0 @@ -/* FPU control word definitions. Stub version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FPU_CONTROL_H -#define _FPU_CONTROL_H - -#define _FPU_RESERVED 0xffffffff /* These bits are reserved and not changed. */ - -/* The fdlibm code requires no interrupts for exceptions. Don't - change the rounding mode, it would break long double I/O! */ -#define _FPU_DEFAULT 0x00000000 /* Default value. */ - -/* Type of the control word. */ -typedef unsigned int fpu_control_t; - -/* Macros for accessing the hardware control word. */ -#define _FPU_GETCW(cw) (cw) = 0 -#define _FPU_SETCW(cw) (void) (cw) - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#endif /* _FPU_CONTROL_H */ diff --git a/sysdeps/generic/frame.h b/sysdeps/generic/frame.h deleted file mode 100644 index 86a0cf4317..0000000000 --- a/sysdeps/generic/frame.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Definition of stack frame structure. Generic version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -struct layout -{ - void *next; - void *return_address; -}; diff --git a/sysdeps/generic/framestate.c b/sysdeps/generic/framestate.c deleted file mode 100644 index c19d4b1ee4..0000000000 --- a/sysdeps/generic/framestate.c +++ /dev/null @@ -1,52 +0,0 @@ -/* __frame_state_for unwinder helper function wrapper. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#define STATIC static -#define __frame_state_for fallback_frame_state_for -#include -#undef __frame_state_for -#include - -typedef struct frame_state * (*framesf)(void *pc, struct frame_state *); -struct frame_state *__frame_state_for (void *pc, - struct frame_state *frame_state); - -struct frame_state * -__frame_state_for (void *pc, struct frame_state *frame_state) -{ - static framesf frame_state_for; - - if (frame_state_for == NULL) - { - void *handle = __libc_dlopen (LIBGCC_S_SO); - - if (handle == NULL - || (frame_state_for - = (framesf) __libc_dlsym (handle, "__frame_state_for")) == NULL) -#ifndef __USING_SJLJ_EXCEPTIONS__ - frame_state_for = fallback_frame_state_for; -#else - frame_state_for = abort; -#endif - } - - return frame_state_for (pc, frame_state); -} diff --git a/sysdeps/generic/gcc-compat.h b/sysdeps/generic/gcc-compat.h deleted file mode 100644 index d19f5d069d..0000000000 --- a/sysdeps/generic/gcc-compat.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Macros for checking required GCC compatibility. Generic version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This is the base file. More-specific sysdeps/.../gcc-compat.h files - can define GCC_COMPAT_VERSION and then #include_next this file. */ - -#ifndef _GENERIC_GCC_COMPAT_H -#define _GENERIC_GCC_COMPAT_H 1 - -/* This is the macro that gets used in #if tests in code: true iff - the library we build must be compatible with user code built by - GCC version MAJOR.MINOR. */ -#define GCC_COMPAT(major, minor) \ - (GCC_COMPAT_VERSION <= GCC_VERSION (major, minor)) - -/* This is how we compose an integer from major and minor version - numbers, for comparison. */ -#define GCC_VERSION(major, minor) \ - (((major) << 16) + (minor)) - -#ifndef GCC_COMPAT_VERSION -/* GCC 2.7.2 was current at the time of the glibc-2.0 release. - We assume nothing before that ever mattered. */ -# define GCC_COMPAT_VERSION GCC_VERSION (2, 7) -#endif - -#endif diff --git a/sysdeps/generic/gccframe.h b/sysdeps/generic/gccframe.h deleted file mode 100644 index f9406b57ec..0000000000 --- a/sysdeps/generic/gccframe.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Definition of object in frame unwind info. Generic version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -struct dwarf_fde; -struct fde_vector; - -struct object -{ - void *pc_begin; - void *tbase; - void *dbase; - union { - struct dwarf_fde *single; - struct dwarf_fde **array; - struct fde_vector *sort; - } u; - - union { - struct { - unsigned long sorted : 1; - unsigned long from_array : 1; - unsigned long mixed_encoding : 1; - unsigned long encoding : 8; - /* ??? Wish there was an easy way to detect a 64-bit host here; - we've got 32 bits left to play with... */ - unsigned long count : 21; - } b; - size_t i; - } s; - - struct object *next; -}; diff --git a/sysdeps/generic/get-rounding-mode.h b/sysdeps/generic/get-rounding-mode.h deleted file mode 100644 index a829bd5d10..0000000000 --- a/sysdeps/generic/get-rounding-mode.h +++ /dev/null @@ -1,125 +0,0 @@ -/* Determine floating-point rounding mode within libc. Generic version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _GET_ROUNDING_MODE_H -#define _GET_ROUNDING_MODE_H 1 - -#include -#include - -/* Define values for FE_* modes not defined for this architecture. */ -#ifdef FE_DOWNWARD -# define ORIG_FE_DOWNWARD FE_DOWNWARD -#else -# define ORIG_FE_DOWNWARD 0 -#endif -#ifdef FE_TONEAREST -# define ORIG_FE_TONEAREST FE_TONEAREST -#else -# define ORIG_FE_TONEAREST 0 -#endif -#ifdef FE_TOWARDZERO -# define ORIG_FE_TOWARDZERO FE_TOWARDZERO -#else -# define ORIG_FE_TOWARDZERO 0 -#endif -#ifdef FE_UPWARD -# define ORIG_FE_UPWARD FE_UPWARD -#else -# define ORIG_FE_UPWARD 0 -#endif -#define FE_CONSTRUCT_DISTINCT_VALUE(X, Y, Z) \ - ((((X) & 1) | ((Y) & 2) | ((Z) & 4)) ^ 7) -#ifndef FE_DOWNWARD -# define FE_DOWNWARD FE_CONSTRUCT_DISTINCT_VALUE (ORIG_FE_TONEAREST, \ - ORIG_FE_TOWARDZERO, \ - ORIG_FE_UPWARD) -#endif -#ifndef FE_TONEAREST -# define FE_TONEAREST FE_CONSTRUCT_DISTINCT_VALUE (FE_DOWNWARD, \ - ORIG_FE_TOWARDZERO, \ - ORIG_FE_UPWARD) -#endif -#ifndef FE_TOWARDZERO -# define FE_TOWARDZERO FE_CONSTRUCT_DISTINCT_VALUE (FE_DOWNWARD, \ - FE_TONEAREST, \ - ORIG_FE_UPWARD) -#endif -#ifndef FE_UPWARD -# define FE_UPWARD FE_CONSTRUCT_DISTINCT_VALUE (FE_DOWNWARD, \ - FE_TONEAREST, \ - FE_TOWARDZERO) -#endif - -/* Return the floating-point rounding mode. */ - -static inline int -get_rounding_mode (void) -{ -#if (defined _FPU_RC_DOWN \ - || defined _FPU_RC_NEAREST \ - || defined _FPU_RC_ZERO \ - || defined _FPU_RC_UP) - fpu_control_t fc; - const fpu_control_t mask = (0 -# ifdef _FPU_RC_DOWN - | _FPU_RC_DOWN -# endif -# ifdef _FPU_RC_NEAREST - | _FPU_RC_NEAREST -# endif -# ifdef _FPU_RC_ZERO - | _FPU_RC_ZERO -# endif -# ifdef _FPU_RC_UP - | _FPU_RC_UP -# endif - ); - - _FPU_GETCW (fc); - switch (fc & mask) - { -# ifdef _FPU_RC_DOWN - case _FPU_RC_DOWN: - return FE_DOWNWARD; -# endif - -# ifdef _FPU_RC_NEAREST - case _FPU_RC_NEAREST: - return FE_TONEAREST; -# endif - -# ifdef _FPU_RC_ZERO - case _FPU_RC_ZERO: - return FE_TOWARDZERO; -# endif - -# ifdef _FPU_RC_UP - case _FPU_RC_UP: - return FE_UPWARD; -# endif - - default: - abort (); - } -#else - return FE_TONEAREST; -#endif -} - -#endif /* get-rounding-mode.h */ diff --git a/sysdeps/generic/gmp-mparam.h b/sysdeps/generic/gmp-mparam.h deleted file mode 100644 index 13b1695d25..0000000000 --- a/sysdeps/generic/gmp-mparam.h +++ /dev/null @@ -1,27 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. -Copyright (C) 1991-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, see -. */ - -#include - -#define BITS_PER_MP_LIMB __WORDSIZE -#define BYTES_PER_MP_LIMB (__WORDSIZE / 8) -#define BITS_PER_LONGINT __WORDSIZE -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 diff --git a/sysdeps/generic/hp-timing-common.h b/sysdeps/generic/hp-timing-common.h deleted file mode 100644 index 929faa2a3c..0000000000 --- a/sysdeps/generic/hp-timing-common.h +++ /dev/null @@ -1,62 +0,0 @@ -/* High precision, low overhead timing functions. Generic version. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* In case a platform supports timers in the hardware the following macros - and types must be defined: - - - HP_TIMING_AVAIL: test for availability. - - - HP_TIMING_INLINE: this macro is non-zero if the functionality is not - implemented using function calls but instead uses some inlined code - which might simply consist of a few assembler instructions. We have to - know this since we might want to use the macros here in places where we - cannot make function calls. - - - hp_timing_t: This is the type for variables used to store the time - values. This type must be integral. - - - HP_TIMING_NOW: place timestamp for current time in variable given as - parameter. -*/ - -/* The target supports hp-timing. Share the common infrastructure. */ - -#include -#include -#include <_itoa.h> - -/* Compute the difference between START and END, storing into DIFF. */ -#define HP_TIMING_DIFF(Diff, Start, End) ((Diff) = (End) - (Start)) - -/* Accumulate ADD into SUM. No attempt is made to be thread-safe. */ -#define HP_TIMING_ACCUM_NT(Sum, Diff) ((Sum) += (Diff)) - -/* Write a decimal representation of the timing value into the given string. */ -#define HP_TIMING_PRINT(Dest, Len, Val) \ - do { \ - char __buf[20]; \ - char *__dest = (Dest); \ - size_t __len = (Len); \ - char *__cp = _itoa ((Val), __buf + sizeof (__buf), 10, 0); \ - size_t __cp_len = MIN (__buf + sizeof (__buf) - __cp, __len); \ - memcpy (__dest, __cp, __cp_len); \ - memcpy (__dest + __cp_len, " cycles", \ - MIN (__len - __cp_len, sizeof (" cycles"))); \ - __dest[__len - 1] = '\0'; \ - } while (0) diff --git a/sysdeps/generic/hp-timing.h b/sysdeps/generic/hp-timing.h deleted file mode 100644 index 6c6e39f597..0000000000 --- a/sysdeps/generic/hp-timing.h +++ /dev/null @@ -1,40 +0,0 @@ -/* High precision, low overhead timing functions. Generic version. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _HP_TIMING_H -#define _HP_TIMING_H 1 - -/* There are no generic definitions for the times. We could write something - using the `gettimeofday' system call where available but the overhead of - the system call might be too high. */ - -/* Provide dummy definitions. */ -#define HP_TIMING_AVAIL (0) -#define HP_SMALL_TIMING_AVAIL (0) -#define HP_TIMING_INLINE (0) -typedef int hp_timing_t; -#define HP_TIMING_NOW(var) -#define HP_TIMING_DIFF(Diff, Start, End) -#define HP_TIMING_ACCUM_NT(Sum, Diff) -#define HP_TIMING_PRINT(Buf, Len, Val) - -/* Since this implementation is not available we tell the user about it. */ -#define HP_TIMING_NONAVAIL 1 - -#endif /* hp-timing.h */ diff --git a/sysdeps/generic/ifreq.h b/sysdeps/generic/ifreq.h deleted file mode 100644 index 6ebd7c83f3..0000000000 --- a/sysdeps/generic/ifreq.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -static inline struct ifreq * -__if_nextreq (struct ifreq *ifr) -{ -#ifdef _HAVE_SA_LEN - if (ifr->ifr_addr.sa_len > sizeof ifr->ifr_addr) - return (struct ifreq *) ((char *) &ifr->ifr_addr + ifr->ifr_addr.sa_len); -#endif - return ifr + 1; -} - -extern void __ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd); - - -static inline void -__if_freereq (struct ifreq *ifreqs, int num_ifs) -{ - free (ifreqs); -} diff --git a/sysdeps/generic/ifunc-sel.h b/sysdeps/generic/ifunc-sel.h deleted file mode 100644 index 1fff4059cc..0000000000 --- a/sysdeps/generic/ifunc-sel.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Used by the elf ifunc tests. */ -#ifndef ELF_IFUNC_SEL_H -#define ELF_IFUNC_SEL_H 1 - -extern int global; - -static inline void * -inhibit_stack_protector -ifunc_sel (int (*f1) (void), int (*f2) (void), int (*f3) (void)) -{ - switch (global) - { - case 1: - return f1; - case -1: - return f2; - default: - return f3; - } -} - -static inline void * -inhibit_stack_protector -ifunc_one (int (*f1) (void)) -{ - return f1; -} -#endif diff --git a/sysdeps/generic/intr-msg.h b/sysdeps/generic/intr-msg.h deleted file mode 100644 index 0186aa3323..0000000000 --- a/sysdeps/generic/intr-msg.h +++ /dev/null @@ -1,15 +0,0 @@ -/* Stubby version of intr-msg.h. */ - -/* This file must be written in machine-dependent form for each hurd port. - and define the following: - - INTR_MSG_TRAP - INTR_MSG_BACK_OUT - SYSCALL_EXAMINE - struct mach_msg_trap_args - MSG_EXAMINE - - See sysdeps/mach/hurd/i386/intr-msg.h for an example. */ - - -#error Could not find machine-dependent intr-msg.h file. diff --git a/sysdeps/generic/inttypes.h b/sysdeps/generic/inttypes.h deleted file mode 100644 index 35784ff8db..0000000000 --- a/sysdeps/generic/inttypes.h +++ /dev/null @@ -1,434 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * ISO C99: 7.8 Format conversion of integer types - */ - -#ifndef _INTTYPES_H -#define _INTTYPES_H 1 - -#include -/* Get the type definitions. */ -#include - -/* Get a definition for wchar_t. But we must not define wchar_t itself. */ -#ifndef ____gwchar_t_defined -# ifdef __cplusplus -# define __gwchar_t wchar_t -# elif defined __WCHAR_TYPE__ -typedef __WCHAR_TYPE__ __gwchar_t; -# else -# define __need_wchar_t -# include -typedef wchar_t __gwchar_t; -# endif -# define ____gwchar_t_defined 1 -#endif - -# if __WORDSIZE == 64 -# define __PRI64_PREFIX "l" -# define __PRIPTR_PREFIX "l" -# else -# define __PRI64_PREFIX "ll" -# define __PRIPTR_PREFIX -# endif - -/* Macros for printing format specifiers. */ - -/* Decimal notation. */ -# define PRId8 "d" -# define PRId16 "d" -# define PRId32 "d" -# define PRId64 __PRI64_PREFIX "d" - -# define PRIdLEAST8 "d" -# define PRIdLEAST16 "d" -# define PRIdLEAST32 "d" -# define PRIdLEAST64 __PRI64_PREFIX "d" - -# define PRIdFAST8 "d" -# define PRIdFAST16 __PRIPTR_PREFIX "d" -# define PRIdFAST32 __PRIPTR_PREFIX "d" -# define PRIdFAST64 __PRI64_PREFIX "d" - - -# define PRIi8 "i" -# define PRIi16 "i" -# define PRIi32 "i" -# define PRIi64 __PRI64_PREFIX "i" - -# define PRIiLEAST8 "i" -# define PRIiLEAST16 "i" -# define PRIiLEAST32 "i" -# define PRIiLEAST64 __PRI64_PREFIX "i" - -# define PRIiFAST8 "i" -# define PRIiFAST16 __PRIPTR_PREFIX "i" -# define PRIiFAST32 __PRIPTR_PREFIX "i" -# define PRIiFAST64 __PRI64_PREFIX "i" - -/* Octal notation. */ -# define PRIo8 "o" -# define PRIo16 "o" -# define PRIo32 "o" -# define PRIo64 __PRI64_PREFIX "o" - -# define PRIoLEAST8 "o" -# define PRIoLEAST16 "o" -# define PRIoLEAST32 "o" -# define PRIoLEAST64 __PRI64_PREFIX "o" - -# define PRIoFAST8 "o" -# define PRIoFAST16 __PRIPTR_PREFIX "o" -# define PRIoFAST32 __PRIPTR_PREFIX "o" -# define PRIoFAST64 __PRI64_PREFIX "o" - -/* Unsigned integers. */ -# define PRIu8 "u" -# define PRIu16 "u" -# define PRIu32 "u" -# define PRIu64 __PRI64_PREFIX "u" - -# define PRIuLEAST8 "u" -# define PRIuLEAST16 "u" -# define PRIuLEAST32 "u" -# define PRIuLEAST64 __PRI64_PREFIX "u" - -# define PRIuFAST8 "u" -# define PRIuFAST16 __PRIPTR_PREFIX "u" -# define PRIuFAST32 __PRIPTR_PREFIX "u" -# define PRIuFAST64 __PRI64_PREFIX "u" - -/* lowercase hexadecimal notation. */ -# define PRIx8 "x" -# define PRIx16 "x" -# define PRIx32 "x" -# define PRIx64 __PRI64_PREFIX "x" - -# define PRIxLEAST8 "x" -# define PRIxLEAST16 "x" -# define PRIxLEAST32 "x" -# define PRIxLEAST64 __PRI64_PREFIX "x" - -# define PRIxFAST8 "x" -# define PRIxFAST16 __PRIPTR_PREFIX "x" -# define PRIxFAST32 __PRIPTR_PREFIX "x" -# define PRIxFAST64 __PRI64_PREFIX "x" - -/* UPPERCASE hexadecimal notation. */ -# define PRIX8 "X" -# define PRIX16 "X" -# define PRIX32 "X" -# define PRIX64 __PRI64_PREFIX "X" - -# define PRIXLEAST8 "X" -# define PRIXLEAST16 "X" -# define PRIXLEAST32 "X" -# define PRIXLEAST64 __PRI64_PREFIX "X" - -# define PRIXFAST8 "X" -# define PRIXFAST16 __PRIPTR_PREFIX "X" -# define PRIXFAST32 __PRIPTR_PREFIX "X" -# define PRIXFAST64 __PRI64_PREFIX "X" - - -/* Macros for printing `intmax_t' and `uintmax_t'. */ -# define PRIdMAX __PRI64_PREFIX "d" -# define PRIiMAX __PRI64_PREFIX "i" -# define PRIoMAX __PRI64_PREFIX "o" -# define PRIuMAX __PRI64_PREFIX "u" -# define PRIxMAX __PRI64_PREFIX "x" -# define PRIXMAX __PRI64_PREFIX "X" - - -/* Macros for printing `intptr_t' and `uintptr_t'. */ -# define PRIdPTR __PRIPTR_PREFIX "d" -# define PRIiPTR __PRIPTR_PREFIX "i" -# define PRIoPTR __PRIPTR_PREFIX "o" -# define PRIuPTR __PRIPTR_PREFIX "u" -# define PRIxPTR __PRIPTR_PREFIX "x" -# define PRIXPTR __PRIPTR_PREFIX "X" - - -/* Macros for scanning format specifiers. */ - -/* Signed decimal notation. */ -# define SCNd8 "hhd" -# define SCNd16 "hd" -# define SCNd32 "d" -# define SCNd64 __PRI64_PREFIX "d" - -# define SCNdLEAST8 "hhd" -# define SCNdLEAST16 "hd" -# define SCNdLEAST32 "d" -# define SCNdLEAST64 __PRI64_PREFIX "d" - -# define SCNdFAST8 "hhd" -# define SCNdFAST16 __PRIPTR_PREFIX "d" -# define SCNdFAST32 __PRIPTR_PREFIX "d" -# define SCNdFAST64 __PRI64_PREFIX "d" - -/* Signed decimal notation. */ -# define SCNi8 "hhi" -# define SCNi16 "hi" -# define SCNi32 "i" -# define SCNi64 __PRI64_PREFIX "i" - -# define SCNiLEAST8 "hhi" -# define SCNiLEAST16 "hi" -# define SCNiLEAST32 "i" -# define SCNiLEAST64 __PRI64_PREFIX "i" - -# define SCNiFAST8 "hhi" -# define SCNiFAST16 __PRIPTR_PREFIX "i" -# define SCNiFAST32 __PRIPTR_PREFIX "i" -# define SCNiFAST64 __PRI64_PREFIX "i" - -/* Unsigned decimal notation. */ -# define SCNu8 "hhu" -# define SCNu16 "hu" -# define SCNu32 "u" -# define SCNu64 __PRI64_PREFIX "u" - -# define SCNuLEAST8 "hhu" -# define SCNuLEAST16 "hu" -# define SCNuLEAST32 "u" -# define SCNuLEAST64 __PRI64_PREFIX "u" - -# define SCNuFAST8 "hhu" -# define SCNuFAST16 __PRIPTR_PREFIX "u" -# define SCNuFAST32 __PRIPTR_PREFIX "u" -# define SCNuFAST64 __PRI64_PREFIX "u" - -/* Octal notation. */ -# define SCNo8 "hho" -# define SCNo16 "ho" -# define SCNo32 "o" -# define SCNo64 __PRI64_PREFIX "o" - -# define SCNoLEAST8 "hho" -# define SCNoLEAST16 "ho" -# define SCNoLEAST32 "o" -# define SCNoLEAST64 __PRI64_PREFIX "o" - -# define SCNoFAST8 "hho" -# define SCNoFAST16 __PRIPTR_PREFIX "o" -# define SCNoFAST32 __PRIPTR_PREFIX "o" -# define SCNoFAST64 __PRI64_PREFIX "o" - -/* Hexadecimal notation. */ -# define SCNx8 "hhx" -# define SCNx16 "hx" -# define SCNx32 "x" -# define SCNx64 __PRI64_PREFIX "x" - -# define SCNxLEAST8 "hhx" -# define SCNxLEAST16 "hx" -# define SCNxLEAST32 "x" -# define SCNxLEAST64 __PRI64_PREFIX "x" - -# define SCNxFAST8 "hhx" -# define SCNxFAST16 __PRIPTR_PREFIX "x" -# define SCNxFAST32 __PRIPTR_PREFIX "x" -# define SCNxFAST64 __PRI64_PREFIX "x" - - -/* Macros for scanning `intmax_t' and `uintmax_t'. */ -# define SCNdMAX __PRI64_PREFIX "d" -# define SCNiMAX __PRI64_PREFIX "i" -# define SCNoMAX __PRI64_PREFIX "o" -# define SCNuMAX __PRI64_PREFIX "u" -# define SCNxMAX __PRI64_PREFIX "x" - -/* Macros for scaning `intptr_t' and `uintptr_t'. */ -# define SCNdPTR __PRIPTR_PREFIX "d" -# define SCNiPTR __PRIPTR_PREFIX "i" -# define SCNoPTR __PRIPTR_PREFIX "o" -# define SCNuPTR __PRIPTR_PREFIX "u" -# define SCNxPTR __PRIPTR_PREFIX "x" - - -__BEGIN_DECLS - -#if __WORDSIZE == 64 - -/* We have to define the `uintmax_t' type using `ldiv_t'. */ -typedef struct - { - long int quot; /* Quotient. */ - long int rem; /* Remainder. */ - } imaxdiv_t; - -#else - -/* We have to define the `uintmax_t' type using `lldiv_t'. */ -typedef struct - { - __extension__ long long int quot; /* Quotient. */ - __extension__ long long int rem; /* Remainder. */ - } imaxdiv_t; - -#endif - - -/* Compute absolute value of N. */ -extern intmax_t imaxabs (intmax_t __n) __THROW __attribute__ ((__const__)); - -/* Return the `imaxdiv_t' representation of the value of NUMER over DENOM. */ -extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom) - __THROW __attribute__ ((__const__)); - -/* Like `strtol' but convert to `intmax_t'. */ -extern intmax_t strtoimax (const char *__restrict __nptr, - char **__restrict __endptr, int __base) __THROW; - -/* Like `strtoul' but convert to `uintmax_t'. */ -extern uintmax_t strtoumax (const char *__restrict __nptr, - char ** __restrict __endptr, int __base) __THROW; - -/* Like `wcstol' but convert to `intmax_t'. */ -extern intmax_t wcstoimax (const __gwchar_t *__restrict __nptr, - __gwchar_t **__restrict __endptr, int __base) - __THROW; - -/* Like `wcstoul' but convert to `uintmax_t'. */ -extern uintmax_t wcstoumax (const __gwchar_t *__restrict __nptr, - __gwchar_t ** __restrict __endptr, int __base) - __THROW; - -#ifdef __USE_EXTERN_INLINES - -# if __WORDSIZE == 64 - -extern long int __strtol_internal (const char *__restrict __nptr, - char **__restrict __endptr, - int __base, int __group) - __THROW __nonnull ((1)) __wur; -/* Like `strtol' but convert to `intmax_t'. */ -__extern_inline intmax_t -__NTH (strtoimax (const char *__restrict nptr, char **__restrict endptr, - int base)) -{ - return __strtol_internal (nptr, endptr, base, 0); -} - -extern unsigned long int __strtoul_internal (const char *__restrict __nptr, - char ** __restrict __endptr, - int __base, int __group) - __THROW __nonnull ((1)) __wur; -/* Like `strtoul' but convert to `uintmax_t'. */ -__extern_inline uintmax_t -__NTH (strtoumax (const char *__restrict nptr, char **__restrict endptr, - int base)) -{ - return __strtoul_internal (nptr, endptr, base, 0); -} - -extern long int __wcstol_internal (const __gwchar_t * __restrict __nptr, - __gwchar_t **__restrict __endptr, - int __base, int __group) - __THROW __nonnull ((1)) __wur; -/* Like `wcstol' but convert to `intmax_t'. */ -__extern_inline intmax_t -__NTH (wcstoimax (const __gwchar_t *__restrict nptr, - __gwchar_t **__restrict endptr, int base)) -{ - return __wcstol_internal (nptr, endptr, base, 0); -} - -extern unsigned long int __wcstoul_internal (const __gwchar_t * - __restrict __nptr, - __gwchar_t ** - __restrict __endptr, - int __base, int __group) - __THROW __nonnull ((1)) __wur; -/* Like `wcstoul' but convert to `uintmax_t'. */ -__extern_inline uintmax_t -__NTH (wcstoumax (const __gwchar_t *__restrict nptr, - __gwchar_t **__restrict endptr, int base)) -{ - return __wcstoul_internal (nptr, endptr, base, 0); -} - -# else /* __WORDSIZE == 32 */ - -__extension__ -extern long long int __strtoll_internal (const char *__restrict __nptr, - char **__restrict __endptr, - int __base, int __group) - __THROW __nonnull ((1)) __wur; -/* Like `strtol' but convert to `intmax_t'. */ -__extern_inline intmax_t -__NTH (strtoimax (const char *__restrict nptr, char **__restrict endptr, - int base)) -{ - return __strtoll_internal (nptr, endptr, base, 0); -} - -__extension__ -extern unsigned long long int __strtoull_internal (const char * - __restrict __nptr, - char ** - __restrict __endptr, - int __base, - int __group) - __THROW __nonnull ((1)) __wur; -/* Like `strtoul' but convert to `uintmax_t'. */ -__extern_inline uintmax_t -__NTH (strtoumax (const char *__restrict nptr, char **__restrict endptr, - int base)) -{ - return __strtoull_internal (nptr, endptr, base, 0); -} - -__extension__ -extern long long int __wcstoll_internal (const __gwchar_t *__restrict __nptr, - __gwchar_t **__restrict __endptr, - int __base, int __group) - __THROW __nonnull ((1)) __wur; -/* Like `wcstol' but convert to `intmax_t'. */ -__extern_inline intmax_t -__NTH (wcstoimax (const __gwchar_t *__restrict nptr, - __gwchar_t **__restrict endptr, int base)) -{ - return __wcstoll_internal (nptr, endptr, base, 0); -} - - -__extension__ -extern unsigned long long int __wcstoull_internal (const __gwchar_t * - __restrict __nptr, - __gwchar_t ** - __restrict __endptr, - int __base, - int __group) - __THROW __nonnull ((1)) __wur; -/* Like `wcstoul' but convert to `uintmax_t'. */ -__extern_inline uintmax_t -__NTH (wcstoumax (const __gwchar_t *__restrict nptr, - __gwchar_t **__restrict endptr, int base)) -{ - return __wcstoull_internal (nptr, endptr, base, 0); -} - -# endif /* __WORDSIZE == 32 */ -#endif /* Use extern inlines. */ - -__END_DECLS - -#endif /* inttypes.h */ diff --git a/sysdeps/generic/ld.abilist b/sysdeps/generic/ld.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/ldconfig.h b/sysdeps/generic/ldconfig.h deleted file mode 100644 index a61ce5ca15..0000000000 --- a/sysdeps/generic/ldconfig.h +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LDCONFIG_H -#define _LDCONFIG_H - -#include - -#define FLAG_ANY -1 -#define FLAG_TYPE_MASK 0x00ff -#define FLAG_LIBC4 0x0000 -#define FLAG_ELF 0x0001 -#define FLAG_ELF_LIBC5 0x0002 -#define FLAG_ELF_LIBC6 0x0003 -#define FLAG_REQUIRED_MASK 0xff00 -#define FLAG_SPARC_LIB64 0x0100 -#define FLAG_IA64_LIB64 0x0200 -#define FLAG_X8664_LIB64 0x0300 -#define FLAG_S390_LIB64 0x0400 -#define FLAG_POWERPC_LIB64 0x0500 -#define FLAG_MIPS64_LIBN32 0x0600 -#define FLAG_MIPS64_LIBN64 0x0700 -#define FLAG_X8664_LIBX32 0x0800 -#define FLAG_ARM_LIBHF 0x0900 -#define FLAG_AARCH64_LIB64 0x0a00 -#define FLAG_ARM_LIBSF 0x0b00 -#define FLAG_MIPS_LIB32_NAN2008 0x0c00 -#define FLAG_MIPS64_LIBN32_NAN2008 0x0d00 -#define FLAG_MIPS64_LIBN64_NAN2008 0x0e00 - -/* Name of auxiliary cache. */ -#define _PATH_LDCONFIG_AUX_CACHE "/var/cache/ldconfig/aux-cache" - -/* Declared in cache.c. */ -extern void print_cache (const char *cache_name); - -extern void init_cache (void); - -extern void save_cache (const char *cache_name); - -extern void add_to_cache (const char *path, const char *lib, int flags, - unsigned int osversion, uint64_t hwcap); - -extern void init_aux_cache (void); - -extern void load_aux_cache (const char *aux_cache_name); - -extern int search_aux_cache (struct stat64 *stat_buf, int *flags, - unsigned int *osversion, char **soname); - -extern void add_to_aux_cache (struct stat64 *stat_buf, int flags, - unsigned int osversion, const char *soname); - -extern void save_aux_cache (const char *aux_cache_name); - -/* Declared in readlib.c. */ -extern int process_file (const char *real_file_name, const char *file_name, - const char *lib, int *flag, unsigned int *osversion, - char **soname, int is_link, struct stat64 *stat_buf); - -extern char *implicit_soname (const char *lib, int flag); - -/* Declared in readelflib.c. */ -extern int process_elf_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); - -/* Declared in chroot_canon.c. */ -extern char *chroot_canon (const char *chroot, const char *name); - -/* Declared in ldconfig.c. */ -extern int opt_verbose; - -extern int opt_format; - -/* Prototypes for a few program-wide used functions. */ -#include - -#endif /* ! _LDCONFIG_H */ diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h deleted file mode 100644 index 695ac24c77..0000000000 --- a/sysdeps/generic/ldsodefs.h +++ /dev/null @@ -1,1092 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LDSODEFS_H -#define _LDSODEFS_H 1 - -#include - -#include -#define __need_size_t -#define __need_NULL -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -__BEGIN_DECLS - -#define VERSYMIDX(sym) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (sym)) -#define VALIDX(tag) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGNUM \ - + DT_EXTRANUM + DT_VALTAGIDX (tag)) -#define ADDRIDX(tag) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGNUM \ - + DT_EXTRANUM + DT_VALNUM + DT_ADDRTAGIDX (tag)) - -/* We use this macro to refer to ELF types independent of the native wordsize. - `ElfW(TYPE)' is used in place of `Elf32_TYPE' or `Elf64_TYPE'. */ -#define ELFW(type) _ElfW (ELF, __ELF_NATIVE_CLASS, type) - -/* All references to the value of l_info[DT_PLTGOT], - l_info[DT_STRTAB], l_info[DT_SYMTAB], l_info[DT_RELA], - l_info[DT_REL], l_info[DT_JMPREL], and l_info[VERSYMIDX (DT_VERSYM)] - have to be accessed via the D_PTR macro. The macro is needed since for - most architectures the entry is already relocated - but for some not - and we need to relocate at access time. */ -#ifdef DL_RO_DYN_SECTION -# define D_PTR(map, i) ((map)->i->d_un.d_ptr + (map)->l_addr) -#else -# define D_PTR(map, i) (map)->i->d_un.d_ptr -#endif - -/* Result of the lookup functions and how to retrieve the base address. */ -typedef struct link_map *lookup_t; -#define LOOKUP_VALUE(map) map -#define LOOKUP_VALUE_ADDRESS(map) ((map) ? (map)->l_addr : 0) - -/* On some architectures a pointer to a function is not just a pointer - to the actual code of the function but rather an architecture - specific descriptor. */ -#ifndef ELF_FUNCTION_PTR_IS_SPECIAL -# define DL_SYMBOL_ADDRESS(map, ref) \ - (void *) (LOOKUP_VALUE_ADDRESS (map) + ref->st_value) -# define DL_LOOKUP_ADDRESS(addr) ((ElfW(Addr)) (addr)) -# define DL_CALL_DT_INIT(map, start, argc, argv, env) \ - ((init_t) (start)) (argc, argv, env) -# define DL_CALL_DT_FINI(map, start) ((fini_t) (start)) () -#endif - -/* On some architectures dladdr can't use st_size of all symbols this way. */ -#define DL_ADDR_SYM_MATCH(L, SYM, MATCHSYM, ADDR) \ - ((ADDR) >= (L)->l_addr + (SYM)->st_value \ - && ((((SYM)->st_shndx == SHN_UNDEF || (SYM)->st_size == 0) \ - && (ADDR) == (L)->l_addr + (SYM)->st_value) \ - || (ADDR) < (L)->l_addr + (SYM)->st_value + (SYM)->st_size) \ - && ((MATCHSYM) == NULL || (MATCHSYM)->st_value < (SYM)->st_value)) - -/* According to the ELF gABI no STV_HIDDEN or STV_INTERNAL symbols are - expected to be present in dynamic symbol tables as they should have - been either removed or converted to STB_LOCAL binding by the static - linker. However some GNU binutils versions produce such symbols in - some cases. To prevent such symbols present in a buggy binary from - preempting global symbols we filter them out with this predicate. */ -static __always_inline bool -dl_symbol_visibility_binds_local_p (const ElfW(Sym) *sym) -{ - return (ELFW(ST_VISIBILITY) (sym->st_other) == STV_HIDDEN - || ELFW(ST_VISIBILITY) (sym->st_other) == STV_INTERNAL); -} - -/* Unmap a loaded object, called by _dl_close (). */ -#ifndef DL_UNMAP_IS_SPECIAL -# define DL_UNMAP(map) _dl_unmap_segments (map) -#endif - -/* By default we do not need special support to initialize DSOs loaded - by statically linked binaries. */ -#ifndef DL_STATIC_INIT -# define DL_STATIC_INIT(map) -#endif - -/* Reloc type classes as returned by elf_machine_type_class(). - ELF_RTYPE_CLASS_PLT means this reloc should not be satisfied by - some PLT symbol, ELF_RTYPE_CLASS_COPY means this reloc should not be - satisfied by any symbol in the executable. Some architectures do - not support copy relocations. In this case we define the macro to - zero so that the code for handling them gets automatically optimized - out. ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA means address of protected - data defined in the shared library may be external, i.e., due to copy - relocation. */ -#define ELF_RTYPE_CLASS_PLT 1 -#ifndef DL_NO_COPY_RELOCS -# define ELF_RTYPE_CLASS_COPY 2 -#else -# define ELF_RTYPE_CLASS_COPY 0 -#endif -/* If DL_EXTERN_PROTECTED_DATA is defined, address of protected data - defined in the shared library may be external, i.e., due to copy - relocation. */ -#ifdef DL_EXTERN_PROTECTED_DATA -# define ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA 4 -#else -# define ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA 0 -#endif - -/* ELF uses the PF_x macros to specify the segment permissions, mmap - uses PROT_xxx. In most cases the three macros have the values 1, 2, - and 3 but not in a matching order. The following macros allows - converting from the PF_x values to PROT_xxx values. */ -#define PF_TO_PROT \ - ((PROT_READ << (PF_R * 4)) \ - | (PROT_WRITE << (PF_W * 4)) \ - | (PROT_EXEC << (PF_X * 4)) \ - | ((PROT_READ | PROT_WRITE) << ((PF_R | PF_W) * 4)) \ - | ((PROT_READ | PROT_EXEC) << ((PF_R | PF_X) * 4)) \ - | ((PROT_WRITE | PROT_EXEC) << (PF_W | PF_X) * 4) \ - | ((PROT_READ | PROT_WRITE | PROT_EXEC) << ((PF_R | PF_W | PF_X) * 4))) - -/* The filename itself, or the main program name, if available. */ -#define DSO_FILENAME(name) ((name)[0] ? (name) \ - : (rtld_progname ?: "
")) - -#define RTLD_PROGNAME (rtld_progname ?: "") - -/* For the version handling we need an array with only names and their - hash values. */ -struct r_found_version - { - const char *name; - ElfW(Word) hash; - - int hidden; - const char *filename; - }; - -/* We want to cache information about the searches for shared objects. */ - -enum r_dir_status { unknown, nonexisting, existing }; - -struct r_search_path_elem - { - /* This link is only used in the `all_dirs' member of `r_search_path'. */ - struct r_search_path_elem *next; - - /* Strings saying where the definition came from. */ - const char *what; - const char *where; - - /* Basename for this search path element. The string must end with - a slash character. */ - const char *dirname; - size_t dirnamelen; - - enum r_dir_status status[0]; - }; - -struct r_strlenpair - { - const char *str; - size_t len; - }; - - -/* A data structure for a simple single linked list of strings. */ -struct libname_list - { - const char *name; /* Name requested (before search). */ - struct libname_list *next; /* Link to next name for this object. */ - int dont_free; /* Flag whether this element should be freed - if the object is not entirely unloaded. */ - }; - - -/* Bit masks for the objects which valid callers can come from to - functions with restricted interface. */ -enum allowmask - { - allow_libc = 1, - allow_libdl = 2, - allow_libpthread = 4, - allow_ldso = 8 - }; - - -struct audit_ifaces -{ - void (*activity) (uintptr_t *, unsigned int); - char *(*objsearch) (const char *, uintptr_t *, unsigned int); - unsigned int (*objopen) (struct link_map *, Lmid_t, uintptr_t *); - void (*preinit) (uintptr_t *); - union - { - uintptr_t (*symbind32) (Elf32_Sym *, unsigned int, uintptr_t *, - uintptr_t *, unsigned int *, const char *); - uintptr_t (*symbind64) (Elf64_Sym *, unsigned int, uintptr_t *, - uintptr_t *, unsigned int *, const char *); - }; - union - { -#ifdef ARCH_PLTENTER_MEMBERS - ARCH_PLTENTER_MEMBERS; -#endif - }; - union - { -#ifdef ARCH_PLTEXIT_MEMBERS - ARCH_PLTEXIT_MEMBERS; -#endif - }; - unsigned int (*objclose) (uintptr_t *); - - struct audit_ifaces *next; -}; - - -/* Test whether given NAME matches any of the names of the given object. */ -extern int _dl_name_match_p (const char *__name, const struct link_map *__map) - internal_function attribute_hidden; - -/* Compute next higher prime number. */ -extern unsigned long int _dl_higher_prime_number (unsigned long int n) - internal_function attribute_hidden; - -/* Function used as argument for `_dl_receive_error' function. The - arguments are the error code, error string, and the objname the - error occurred in. */ -typedef void (*receiver_fct) (int, const char *, const char *); - -/* Internal functions of the run-time dynamic linker. - These can be accessed if you link again the dynamic linker - as a shared library, as in `-lld' or `/lib/ld.so' explicitly; - but are not normally of interest to user programs. - - The `-ldl' library functions in provide a simple - user interface to run-time dynamic linking. */ - - -#ifndef SHARED -# define EXTERN extern -# define GL(name) _##name -#else -# define EXTERN -# if IS_IN (rtld) -# define GL(name) _rtld_local._##name -# else -# define GL(name) _rtld_global._##name -# endif -struct rtld_global -{ -#endif - /* Don't change the order of the following elements. 'dl_loaded' - must remain the first element. Forever. */ - -/* Non-shared code has no support for multiple namespaces. */ -#ifdef SHARED -# define DL_NNS 16 -#else -# define DL_NNS 1 -#endif - EXTERN struct link_namespaces - { - /* A pointer to the map for the main map. */ - struct link_map *_ns_loaded; - /* Number of object in the _dl_loaded list. */ - unsigned int _ns_nloaded; - /* Direct pointer to the searchlist of the main object. */ - struct r_scope_elem *_ns_main_searchlist; - /* This is zero at program start to signal that the global scope map is - allocated by rtld. Later it keeps the size of the map. It might be - reset if in _dl_close if the last global object is removed. */ - size_t _ns_global_scope_alloc; - /* Search table for unique objects. */ - struct unique_sym_table - { - __rtld_lock_define_recursive (, lock) - struct unique_sym - { - uint32_t hashval; - const char *name; - const ElfW(Sym) *sym; - const struct link_map *map; - } *entries; - size_t size; - size_t n_elements; - void (*free) (void *); - } _ns_unique_sym_table; - /* Keep track of changes to each namespace' list. */ - struct r_debug _ns_debug; - } _dl_ns[DL_NNS]; - /* One higher than index of last used namespace. */ - EXTERN size_t _dl_nns; - - /* During the program run we must not modify the global data of - loaded shared object simultanously in two threads. Therefore we - protect `_dl_open' and `_dl_close' in dl-close.c. - - This must be a recursive lock since the initializer function of - the loaded object might as well require a call to this function. - At this time it is not anymore a problem to modify the tables. */ - __rtld_lock_define_recursive (EXTERN, _dl_load_lock) - /* This lock is used to keep __dl_iterate_phdr from inspecting the - list of loaded objects while an object is added to or removed - from that list. */ - __rtld_lock_define_recursive (EXTERN, _dl_load_write_lock) - - /* Incremented whenever something may have been added to dl_loaded. */ - EXTERN unsigned long long _dl_load_adds; - - /* The object to be initialized first. */ - EXTERN struct link_map *_dl_initfirst; - -#if HP_SMALL_TIMING_AVAIL - /* Start time on CPU clock. */ - EXTERN hp_timing_t _dl_cpuclock_offset; -#endif - - /* Map of shared object to be profiled. */ - EXTERN struct link_map *_dl_profile_map; - - /* Counters for the number of relocations performed. */ - EXTERN unsigned long int _dl_num_relocations; - EXTERN unsigned long int _dl_num_cache_relocations; - - /* List of search directories. */ - EXTERN struct r_search_path_elem *_dl_all_dirs; - - /* Structure describing the dynamic linker itself. We need to - reserve memory for the data the audit libraries need. */ - EXTERN struct link_map _dl_rtld_map; -#ifdef SHARED - struct auditstate audit_data[DL_NNS]; -#endif - -#if defined SHARED && defined _LIBC_REENTRANT \ - && defined __rtld_lock_default_lock_recursive - EXTERN void (*_dl_rtld_lock_recursive) (void *); - EXTERN void (*_dl_rtld_unlock_recursive) (void *); -#endif - - /* If loading a shared object requires that we make the stack executable - when it was not, we do it by calling this function. - It returns an errno code or zero on success. */ - EXTERN int (*_dl_make_stack_executable_hook) (void **) internal_function; - - /* Prevailing state of the stack, PF_X indicating it's executable. */ - EXTERN ElfW(Word) _dl_stack_flags; - - /* Flag signalling whether there are gaps in the module ID allocation. */ - EXTERN bool _dl_tls_dtv_gaps; - /* Highest dtv index currently needed. */ - EXTERN size_t _dl_tls_max_dtv_idx; - /* Information about the dtv slots. */ - EXTERN struct dtv_slotinfo_list - { - size_t len; - struct dtv_slotinfo_list *next; - struct dtv_slotinfo - { - size_t gen; - struct link_map *map; - } slotinfo[0]; - } *_dl_tls_dtv_slotinfo_list; - /* Number of modules in the static TLS block. */ - EXTERN size_t _dl_tls_static_nelem; - /* Size of the static TLS block. */ - EXTERN size_t _dl_tls_static_size; - /* Size actually allocated in the static TLS block. */ - EXTERN size_t _dl_tls_static_used; - /* Alignment requirement of the static TLS block. */ - EXTERN size_t _dl_tls_static_align; - -/* Number of additional entries in the slotinfo array of each slotinfo - list element. A large number makes it almost certain take we never - have to iterate beyond the first element in the slotinfo list. */ -#define TLS_SLOTINFO_SURPLUS (62) - -/* Number of additional slots in the dtv allocated. */ -#define DTV_SURPLUS (14) - - /* Initial dtv of the main thread, not allocated with normal malloc. */ - EXTERN void *_dl_initial_dtv; - /* Generation counter for the dtv. */ - EXTERN size_t _dl_tls_generation; - - EXTERN void (*_dl_init_static_tls) (struct link_map *); - - EXTERN void (*_dl_wait_lookup_done) (void); - - /* Scopes to free after next THREAD_GSCOPE_WAIT (). */ - EXTERN struct dl_scope_free_list - { - size_t count; - void *list[50]; - } *_dl_scope_free_list; -#ifdef SHARED -}; -# define __rtld_global_attribute__ -# if IS_IN (rtld) -# ifdef HAVE_SDATA_SECTION -# define __rtld_local_attribute__ \ - __attribute__ ((visibility ("hidden"), section (".sdata"))) -# undef __rtld_global_attribute__ -# define __rtld_global_attribute__ __attribute__ ((section (".sdata"))) -# else -# define __rtld_local_attribute__ __attribute__ ((visibility ("hidden"))) -# endif -extern struct rtld_global _rtld_local __rtld_local_attribute__; -# undef __rtld_local_attribute__ -# endif -extern struct rtld_global _rtld_global __rtld_global_attribute__; -# undef __rtld_global_attribute__ -#endif - -#ifndef SHARED -# define GLRO(name) _##name -#else -# if IS_IN (rtld) -# define GLRO(name) _rtld_local_ro._##name -# else -# define GLRO(name) _rtld_global_ro._##name -# endif -struct rtld_global_ro -{ -#endif - - /* If nonzero the appropriate debug information is printed. */ - EXTERN int _dl_debug_mask; -#define DL_DEBUG_LIBS (1 << 0) -#define DL_DEBUG_IMPCALLS (1 << 1) -#define DL_DEBUG_BINDINGS (1 << 2) -#define DL_DEBUG_SYMBOLS (1 << 3) -#define DL_DEBUG_VERSIONS (1 << 4) -#define DL_DEBUG_RELOC (1 << 5) -#define DL_DEBUG_FILES (1 << 6) -#define DL_DEBUG_STATISTICS (1 << 7) -#define DL_DEBUG_UNUSED (1 << 8) -#define DL_DEBUG_SCOPES (1 << 9) -/* These two are used only internally. */ -#define DL_DEBUG_HELP (1 << 10) -#define DL_DEBUG_PRELINK (1 << 11) - - /* OS version. */ - EXTERN unsigned int _dl_osversion; - /* Platform name. */ - EXTERN const char *_dl_platform; - EXTERN size_t _dl_platformlen; - - /* Cached value of `getpagesize ()'. */ - EXTERN size_t _dl_pagesize; - - /* Do we read from ld.so.cache? */ - EXTERN int _dl_inhibit_cache; - - /* Copy of the content of `_dl_main_searchlist' at startup time. */ - EXTERN struct r_scope_elem _dl_initial_searchlist; - - /* CLK_TCK as reported by the kernel. */ - EXTERN int _dl_clktck; - - /* If nonzero print warnings messages. */ - EXTERN int _dl_verbose; - - /* File descriptor to write debug messages to. */ - EXTERN int _dl_debug_fd; - - /* Do we do lazy relocations? */ - EXTERN int _dl_lazy; - - /* Nonzero if runtime lookups should not update the .got/.plt. */ - EXTERN int _dl_bind_not; - - /* Nonzero if references should be treated as weak during runtime - linking. */ - EXTERN int _dl_dynamic_weak; - - /* Default floating-point control word. */ - EXTERN fpu_control_t _dl_fpu_control; - - /* Expected cache ID. */ - EXTERN int _dl_correct_cache_id; - - /* Mask for hardware capabilities that are available. */ - EXTERN uint64_t _dl_hwcap; - -#if !HAVE_TUNABLES - /* Mask for important hardware capabilities we honour. */ - EXTERN uint64_t _dl_hwcap_mask; -#endif - -#ifdef HAVE_AUX_VECTOR - /* Pointer to the auxv list supplied to the program at startup. */ - EXTERN ElfW(auxv_t) *_dl_auxv; -#endif - - /* Get architecture specific definitions. */ -#define PROCINFO_DECL -#ifndef PROCINFO_CLASS -# define PROCINFO_CLASS EXTERN -#endif -#include - - /* Names of shared object for which the RPATH should be ignored. */ - EXTERN const char *_dl_inhibit_rpath; - - /* Location of the binary. */ - EXTERN const char *_dl_origin_path; - - /* -1 if the dynamic linker should honor library load bias, - 0 if not, -2 use the default (honor biases for normal - binaries, don't honor for PIEs). */ - EXTERN ElfW(Addr) _dl_use_load_bias; - - /* Name of the shared object to be profiled (if any). */ - EXTERN const char *_dl_profile; - /* Filename of the output file. */ - EXTERN const char *_dl_profile_output; - /* Name of the object we want to trace the prelinking. */ - EXTERN const char *_dl_trace_prelink; - /* Map of shared object to be prelink traced. */ - EXTERN struct link_map *_dl_trace_prelink_map; - - /* All search directories defined at startup. */ - EXTERN struct r_search_path_elem *_dl_init_all_dirs; - -#ifdef NEED_DL_SYSINFO - /* Syscall handling improvements. This is very specific to x86. */ - EXTERN uintptr_t _dl_sysinfo; -#endif - -#ifdef NEED_DL_SYSINFO_DSO - /* The vsyscall page is a virtual DSO pre-mapped by the kernel. - This points to its ELF header. */ - EXTERN const ElfW(Ehdr) *_dl_sysinfo_dso; - - /* At startup time we set up the normal DSO data structure for it, - and this points to it. */ - EXTERN struct link_map *_dl_sysinfo_map; -#endif - - /* Mask for more hardware capabilities that are available on some - platforms. */ - EXTERN uint64_t _dl_hwcap2; - -#ifdef SHARED - /* We add a function table to _rtld_global which is then used to - call the function instead of going through the PLT. The result - is that we can avoid exporting the functions and we do not jump - PLT relocations in libc.so. */ - void (*_dl_debug_printf) (const char *, ...) - __attribute__ ((__format__ (__printf__, 1, 2))); - void (*_dl_mcount) (ElfW(Addr) frompc, ElfW(Addr) selfpc); - lookup_t (internal_function *_dl_lookup_symbol_x) (const char *, - struct link_map *, - const ElfW(Sym) **, - struct r_scope_elem *[], - const struct r_found_version *, - int, int, - struct link_map *); - int (*_dl_check_caller) (const void *, enum allowmask); - void *(*_dl_open) (const char *file, int mode, const void *caller_dlopen, - Lmid_t nsid, int argc, char *argv[], char *env[]); - void (*_dl_close) (void *map); - void *(*_dl_tls_get_addr_soft) (struct link_map *); -#ifdef HAVE_DL_DISCOVER_OSVERSION - int (*_dl_discover_osversion) (void); -#endif - - /* List of auditing interfaces. */ - struct audit_ifaces *_dl_audit; - unsigned int _dl_naudit; -}; -# define __rtld_global_attribute__ -# if IS_IN (rtld) -# define __rtld_local_attribute__ __attribute__ ((visibility ("hidden"))) -extern struct rtld_global_ro _rtld_local_ro - attribute_relro __rtld_local_attribute__; -extern struct rtld_global_ro _rtld_global_ro - attribute_relro __rtld_global_attribute__; -# undef __rtld_local_attribute__ -# else -/* We cheat a bit here. We declare the variable as as const even - though it is at startup. */ -extern const struct rtld_global_ro _rtld_global_ro - attribute_relro __rtld_global_attribute__; -# endif -# undef __rtld_global_attribute__ -#endif -#undef EXTERN - -#ifndef SHARED -/* dl-support.c defines these and initializes them early on. */ -extern const ElfW(Phdr) *_dl_phdr; -extern size_t _dl_phnum; -#endif - -/* This is the initial value of GL(dl_make_stack_executable_hook). - A threads library can change it. */ -extern int _dl_make_stack_executable (void **stack_endp) internal_function; -rtld_hidden_proto (_dl_make_stack_executable) - -/* Variable pointing to the end of the stack (or close to it). This value - must be constant over the runtime of the application. Some programs - might use the variable which results in copy relocations on some - platforms. But this does not matter, ld.so can always use the local - copy. */ -extern void *__libc_stack_end -#ifndef LIBC_STACK_END_NOT_RELRO - attribute_relro -#endif - ; -rtld_hidden_proto (__libc_stack_end) - -/* Parameters passed to the dynamic linker. */ -extern int _dl_argc attribute_hidden attribute_relro; -extern char **_dl_argv -#ifndef DL_ARGV_NOT_RELRO - attribute_relro -#endif - ; -rtld_hidden_proto (_dl_argv) -#if IS_IN (rtld) -extern unsigned int _dl_skip_args attribute_hidden -# ifndef DL_ARGV_NOT_RELRO - attribute_relro -# endif - ; -extern unsigned int _dl_skip_args_internal attribute_hidden -# ifndef DL_ARGV_NOT_RELRO - attribute_relro -# endif - ; -#endif -#define rtld_progname _dl_argv[0] - -/* Flag set at startup and cleared when the last initializer has run. */ -extern int _dl_starting_up; -weak_extern (_dl_starting_up) -rtld_hidden_proto (_dl_starting_up) - -/* Random data provided by the kernel. */ -extern void *_dl_random attribute_hidden attribute_relro; - -/* OS-dependent function to open the zero-fill device. */ -extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */ - - -/* Write message on the debug file descriptor. The parameters are - interpreted as for a `printf' call. All the lines start with a - tag showing the PID. */ -extern void _dl_debug_printf (const char *fmt, ...) - __attribute__ ((__format__ (__printf__, 1, 2))) attribute_hidden; - -/* Write message on the debug file descriptor. The parameters are - interpreted as for a `printf' call. All the lines buf the first - start with a tag showing the PID. */ -extern void _dl_debug_printf_c (const char *fmt, ...) - __attribute__ ((__format__ (__printf__, 1, 2))) attribute_hidden; - - -/* Write a message on the specified descriptor FD. The parameters are - interpreted as for a `printf' call. */ -#if IS_IN (rtld) || !defined (SHARED) -extern void _dl_dprintf (int fd, const char *fmt, ...) - __attribute__ ((__format__ (__printf__, 2, 3))) - attribute_hidden; -#else -__attribute__ ((always_inline, __format__ (__printf__, 2, 3))) -static inline void -_dl_dprintf (int fd, const char *fmt, ...) -{ - /* Use local declaration to avoid includign . */ - extern int __dprintf(int fd, const char *format, ...) attribute_hidden; - __dprintf (fd, fmt, __builtin_va_arg_pack ()); -} -#endif - -/* Write a message on the specified descriptor standard output. The - parameters are interpreted as for a `printf' call. */ -#define _dl_printf(fmt, args...) \ - _dl_dprintf (STDOUT_FILENO, fmt, ##args) - -/* Write a message on the specified descriptor standard error. The - parameters are interpreted as for a `printf' call. */ -#define _dl_error_printf(fmt, args...) \ - _dl_dprintf (STDERR_FILENO, fmt, ##args) - -/* Write a message on the specified descriptor standard error and exit - the program. The parameters are interpreted as for a `printf' call. */ -#define _dl_fatal_printf(fmt, args...) \ - do \ - { \ - _dl_dprintf (STDERR_FILENO, fmt, ##args); \ - _exit (127); \ - } \ - while (1) - - -/* This function is called by all the internal dynamic linker functions - when they encounter an error. ERRCODE is either an `errno' code or - zero; OBJECT is the name of the problematical shared object, or null if - it is a general problem; ERRSTRING is a string describing the specific - problem. */ -extern void _dl_signal_error (int errcode, const char *object, - const char *occurred, const char *errstring) - internal_function __attribute__ ((__noreturn__)); -libc_hidden_proto (_dl_signal_error) - -/* Like _dl_signal_error, but may return when called in the context of - _dl_receive_error. This is only used during ld.so bootstrap. In - static and profiled builds, this is equivalent to - _dl_signal_error. */ -#if IS_IN (rtld) -extern void _dl_signal_cerror (int errcode, const char *object, - const char *occation, const char *errstring) - internal_function attribute_hidden; -#else -__attribute__ ((always_inline)) -static inline void -_dl_signal_cerror (int errcode, const char *object, - const char *occation, const char *errstring) -{ - _dl_signal_error (errcode, object, occation, errstring); -} -#endif - -/* Call OPERATE, receiving errors from `dl_signal_cerror'. Unlike - `_dl_catch_error' the operation is resumed after the OPERATE - function returns. - ARGS is passed as argument to OPERATE. */ -extern void _dl_receive_error (receiver_fct fct, void (*operate) (void *), - void *args) - internal_function attribute_hidden; - -/* Call OPERATE, catching errors from `dl_signal_error'. If there is no - error, *ERRSTRING is set to null. If there is an error, *ERRSTRING is - set to a string constructed from the strings passed to _dl_signal_error, - and the error code passed is the return value and *OBJNAME is set to - the object name which experienced the problems. ERRSTRING if nonzero - points to a malloc'ed string which the caller has to free after use. - ARGS is passed as argument to OPERATE. MALLOCEDP is set to true only - if the returned string is allocated using the libc's malloc. */ -extern int _dl_catch_error (const char **objname, const char **errstring, - bool *mallocedp, void (*operate) (void *), - void *args) - internal_function; -libc_hidden_proto (_dl_catch_error) - -/* Open the shared object NAME and map in its segments. - LOADER's DT_RPATH is used in searching for NAME. - If the object is already opened, returns its existing map. */ -extern struct link_map *_dl_map_object (struct link_map *loader, - const char *name, - int type, int trace_mode, int mode, - Lmid_t nsid) - internal_function attribute_hidden; - -/* Call _dl_map_object on the dependencies of MAP, and set up - MAP->l_searchlist. PRELOADS points to a vector of NPRELOADS previously - loaded objects that will be inserted into MAP->l_searchlist after MAP - but before its dependencies. */ -extern void _dl_map_object_deps (struct link_map *map, - struct link_map **preloads, - unsigned int npreloads, int trace_mode, - int open_mode) - internal_function attribute_hidden; - -/* Cache the locations of MAP's hash table. */ -extern void _dl_setup_hash (struct link_map *map) - internal_function attribute_hidden; - - -/* Collect the directories in the search path for LOADER's dependencies. - The data structure is defined in . If COUNTING is true, - SI->dls_cnt and SI->dls_size are set; if false, those must be as set - by a previous call with COUNTING set, and SI must point to SI->dls_size - bytes to be used in filling in the result. */ -extern void _dl_rtld_di_serinfo (struct link_map *loader, - Dl_serinfo *si, bool counting) - internal_function; - - -/* Search loaded objects' symbol tables for a definition of the symbol - referred to by UNDEF. *SYM is the symbol table entry containing the - reference; it is replaced with the defining symbol, and the base load - address of the defining object is returned. SYMBOL_SCOPE is a - null-terminated list of object scopes to search; each object's - l_searchlist (i.e. the segment of the dependency tree starting at that - object) is searched in turn. REFERENCE_NAME should name the object - containing the reference; it is used in error messages. - TYPE_CLASS describes the type of symbol we are looking for. */ -enum - { - /* If necessary add dependency between user and provider object. */ - DL_LOOKUP_ADD_DEPENDENCY = 1, - /* Return most recent version instead of default version for - unversioned lookup. */ - DL_LOOKUP_RETURN_NEWEST = 2, - /* Set if dl_lookup* called with GSCOPE lock held. */ - DL_LOOKUP_GSCOPE_LOCK = 4, - }; - -/* Lookup versioned symbol. */ -extern lookup_t _dl_lookup_symbol_x (const char *undef, - struct link_map *undef_map, - const ElfW(Sym) **sym, - struct r_scope_elem *symbol_scope[], - const struct r_found_version *version, - int type_class, int flags, - struct link_map *skip_map) - internal_function attribute_hidden; - - -/* Look up symbol NAME in MAP's scope and return its run-time address. */ -extern ElfW(Addr) _dl_symbol_value (struct link_map *map, const char *name) - internal_function; - -/* Add the new link_map NEW to the end of the namespace list. */ -extern void _dl_add_to_namespace_list (struct link_map *new, Lmid_t nsid) - internal_function attribute_hidden; - -/* Allocate a `struct link_map' for a new object being loaded. */ -extern struct link_map *_dl_new_object (char *realname, const char *libname, - int type, struct link_map *loader, - int mode, Lmid_t nsid) - internal_function attribute_hidden; - -/* Relocate the given object (if it hasn't already been). - SCOPE is passed to _dl_lookup_symbol in symbol lookups. - If RTLD_LAZY is set in RELOC-MODE, don't relocate its PLT. */ -extern void _dl_relocate_object (struct link_map *map, - struct r_scope_elem *scope[], - int reloc_mode, int consider_profiling) - attribute_hidden; - -/* Protect PT_GNU_RELRO area. */ -extern void _dl_protect_relro (struct link_map *map) - internal_function attribute_hidden; - -/* Call _dl_signal_error with a message about an unhandled reloc type. - TYPE is the result of ELFW(R_TYPE) (r_info), i.e. an R__* value. - PLT is nonzero if this was a PLT reloc; it just affects the message. */ -extern void _dl_reloc_bad_type (struct link_map *map, - unsigned int type, int plt) - internal_function attribute_hidden __attribute__ ((__noreturn__)); - -/* Resolve conflicts if prelinking. */ -extern void _dl_resolve_conflicts (struct link_map *l, - ElfW(Rela) *conflict, - ElfW(Rela) *conflictend) - attribute_hidden; - -/* Check the version dependencies of all objects available through - MAP. If VERBOSE print some more diagnostics. */ -extern int _dl_check_all_versions (struct link_map *map, int verbose, - int trace_mode) - internal_function attribute_hidden; - -/* Check the version dependencies for MAP. If VERBOSE print some more - diagnostics. */ -extern int _dl_check_map_versions (struct link_map *map, int verbose, - int trace_mode) - internal_function attribute_hidden; - -/* Initialize the object in SCOPE by calling the constructors with - ARGC, ARGV, and ENV as the parameters. */ -extern void _dl_init (struct link_map *main_map, int argc, char **argv, - char **env) internal_function attribute_hidden; - -/* Call the finalizer functions of all shared objects whose - initializer functions have completed. */ -extern void _dl_fini (void) internal_function; - -/* Sort array MAPS according to dependencies of the contained objects. */ -extern void _dl_sort_fini (struct link_map **maps, size_t nmaps, char *used, - Lmid_t ns) - internal_function attribute_hidden; - -/* The dynamic linker calls this function before and having changing - any shared object mappings. The `r_state' member of `struct r_debug' - says what change is taking place. This function's address is - the value of the `r_brk' member. */ -extern void _dl_debug_state (void); -rtld_hidden_proto (_dl_debug_state) - -/* Initialize `struct r_debug' if it has not already been done. The - argument is the run-time load address of the dynamic linker, to be put - in the `r_ldbase' member. Returns the address of the structure. */ -extern struct r_debug *_dl_debug_initialize (ElfW(Addr) ldbase, Lmid_t ns) - internal_function attribute_hidden; - -/* Initialize the basic data structure for the search paths. */ -extern void _dl_init_paths (const char *library_path) - internal_function attribute_hidden; - -/* Gather the information needed to install the profiling tables and start - the timers. */ -extern void _dl_start_profile (void) internal_function attribute_hidden; - -/* The actual functions used to keep book on the calls. */ -extern void _dl_mcount (ElfW(Addr) frompc, ElfW(Addr) selfpc); -rtld_hidden_proto (_dl_mcount) - -/* This function is simply a wrapper around the _dl_mcount function - which does not require a FROMPC parameter since this is the - calling function. */ -extern void _dl_mcount_wrapper (void *selfpc); - -/* Show the members of the auxiliary array passed up from the kernel. */ -extern void _dl_show_auxv (void) - internal_function attribute_hidden; - -/* Return all environment variables starting with `LD_', one after the - other. */ -extern char *_dl_next_ld_env_entry (char ***position) - internal_function attribute_hidden; - -/* Return an array with the names of the important hardware capabilities. */ -extern const struct r_strlenpair *_dl_important_hwcaps (const char *platform, - size_t paltform_len, - size_t *sz, - size_t *max_capstrlen) - internal_function attribute_hidden; - -/* Look up NAME in ld.so.cache and return the file name stored there, - or null if none is found. Caller must free returned string. */ -extern char *_dl_load_cache_lookup (const char *name) - internal_function attribute_hidden; - -/* If the system does not support MAP_COPY we cannot leave the file open - all the time since this would create problems when the file is replaced. - Therefore we provide this function to close the file and open it again - once needed. */ -extern void _dl_unload_cache (void) attribute_hidden; - -/* System-dependent function to read a file's whole contents in the - most convenient manner available. *SIZEP gets the size of the - file. On error MAP_FAILED is returned. */ -extern void *_dl_sysdep_read_whole_file (const char *file, size_t *sizep, - int prot) - internal_function attribute_hidden; - -/* System-specific function to do initial startup for the dynamic linker. - After this, file access calls and getenv must work. This is responsible - for setting __libc_enable_secure if we need to be secure (e.g. setuid), - and for setting _dl_argc and _dl_argv, and then calling _dl_main. */ -extern ElfW(Addr) _dl_sysdep_start (void **start_argptr, - void (*dl_main) (const ElfW(Phdr) *phdr, - ElfW(Word) phnum, - ElfW(Addr) *user_entry, - ElfW(auxv_t) *auxv)) - attribute_hidden; - -extern void _dl_sysdep_start_cleanup (void) - internal_function attribute_hidden; - - -/* Determine next available module ID. */ -extern size_t _dl_next_tls_modid (void) internal_function attribute_hidden; - -/* Count the modules with TLS segments. */ -extern size_t _dl_count_modids (void) internal_function attribute_hidden; - -/* Calculate offset of the TLS blocks in the static TLS block. */ -extern void _dl_determine_tlsoffset (void) internal_function attribute_hidden; - -#ifndef SHARED -/* Set up the TCB for statically linked applications. This is called - early during startup because we always use TLS (for errno and the - stack protector, among other things). */ -void __libc_setup_tls (void); - -/* Initialization of libpthread for statically linked applications. - If libpthread is not linked in, this is an empty function. */ -void __pthread_initialize_minimal (void) weak_function; -#endif - -/* Allocate memory for static TLS block (unless MEM is nonzero) and dtv. */ -extern void *_dl_allocate_tls (void *mem) internal_function; -rtld_hidden_proto (_dl_allocate_tls) - -/* Get size and alignment requirements of the static TLS block. */ -extern void _dl_get_tls_static_info (size_t *sizep, size_t *alignp) - internal_function; - -extern void _dl_allocate_static_tls (struct link_map *map) - internal_function attribute_hidden; - -/* These are internal entry points to the two halves of _dl_allocate_tls, - only used within rtld.c itself at startup time. */ -extern void *_dl_allocate_tls_storage (void) - internal_function attribute_hidden; -extern void *_dl_allocate_tls_init (void *) internal_function; -rtld_hidden_proto (_dl_allocate_tls_init) - -/* Deallocate memory allocated with _dl_allocate_tls. */ -extern void _dl_deallocate_tls (void *tcb, bool dealloc_tcb) internal_function; -rtld_hidden_proto (_dl_deallocate_tls) - -extern void _dl_nothread_init_static_tls (struct link_map *) attribute_hidden; - -/* Find origin of the executable. */ -extern const char *_dl_get_origin (void) attribute_hidden; - -/* Count DSTs. */ -extern size_t _dl_dst_count (const char *name, int is_path) attribute_hidden; - -/* Substitute DST values. */ -extern char *_dl_dst_substitute (struct link_map *l, const char *name, - char *result, int is_path) attribute_hidden; - -/* Check validity of the caller. */ -extern int _dl_check_caller (const void *caller, enum allowmask mask) - attribute_hidden; - -/* Open the shared object NAME, relocate it, and run its initializer if it - hasn't already been run. MODE is as for `dlopen' (see ). If - the object is already opened, returns its existing map. */ -extern void *_dl_open (const char *name, int mode, const void *caller, - Lmid_t nsid, int argc, char *argv[], char *env[]) - attribute_hidden; - -/* Free or queue for freeing scope OLD. If other threads might be - in the middle of _dl_fixup, _dl_profile_fixup or dl*sym using the - old scope, OLD can't be freed until no thread is using it. */ -extern int _dl_scope_free (void *) attribute_hidden; - -/* Add module to slot information data. */ -extern void _dl_add_to_slotinfo (struct link_map *l) attribute_hidden; - -/* Update slot information data for at least the generation of the - module with the given index. */ -extern struct link_map *_dl_update_slotinfo (unsigned long int req_modid) - attribute_hidden; - -/* Look up the module's TLS block as for __tls_get_addr, - but never touch anything. Return null if it's not allocated yet. */ -extern void *_dl_tls_get_addr_soft (struct link_map *l) attribute_hidden; - -extern int _dl_addr_inside_object (struct link_map *l, const ElfW(Addr) addr) - internal_function attribute_hidden; - -/* Show show of an object. */ -extern void _dl_show_scope (struct link_map *new, int from) - attribute_hidden; - -extern struct link_map *_dl_find_dso_for_object (const ElfW(Addr) addr) - internal_function; -rtld_hidden_proto (_dl_find_dso_for_object) - -/* Initialization which is normally done by the dynamic linker. */ -extern void _dl_non_dynamic_init (void) internal_function; - -/* Used by static binaries to check the auxiliary vector. */ -extern void _dl_aux_init (ElfW(auxv_t) *av) internal_function; - - -__END_DECLS - -#endif /* ldsodefs.h */ diff --git a/sysdeps/generic/libBrokenLocale.abilist b/sysdeps/generic/libBrokenLocale.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libanl.abilist b/sysdeps/generic/libanl.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libc-lock.h b/sysdeps/generic/libc-lock.h deleted file mode 100644 index ed7bdc0393..0000000000 --- a/sysdeps/generic/libc-lock.h +++ /dev/null @@ -1,140 +0,0 @@ -/* libc-internal interface for mutex locks. Stub version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LIBC_LOCK_H -#define _LIBC_LOCK_H 1 - - -/* Define a lock variable NAME with storage class CLASS. The lock must be - initialized with __libc_lock_init before it can be used (or define it - with __libc_lock_define_initialized, below). Use `extern' for CLASS to - declare a lock defined in another module. In public structure - definitions you must use a pointer to the lock structure (i.e., NAME - begins with a `*'), because its storage size will not be known outside - of libc. */ -#define __libc_lock_define(CLASS,NAME) -#define __libc_lock_define_recursive(CLASS,NAME) -#define __rtld_lock_define_recursive(CLASS,NAME) -#define __libc_rwlock_define(CLASS,NAME) - -/* Define an initialized lock variable NAME with storage class CLASS. */ -#define __libc_lock_define_initialized(CLASS,NAME) -#define __libc_rwlock_define_initialized(CLASS,NAME) - -/* Define an initialized recursive lock variable NAME with storage - class CLASS. */ -#define __libc_lock_define_initialized_recursive(CLASS,NAME) -#define __rtld_lock_define_initialized_recursive(CLASS,NAME) - -/* Initialize the named lock variable, leaving it in a consistent, unlocked - state. */ -#define __libc_lock_init(NAME) -#define __rtld_lock_initialize(NAME) -#define __libc_rwlock_init(NAME) - -/* Same as last but this time we initialize a recursive mutex. */ -#define __libc_lock_init_recursive(NAME) - -/* Finalize the named lock variable, which must be locked. It cannot be - used again until __libc_lock_init is called again on it. This must be - called on a lock variable before the containing storage is reused. */ -#define __libc_lock_fini(NAME) -#define __libc_rwlock_fini(NAME) - -/* Finalize recursive named lock. */ -#define __libc_lock_fini_recursive(NAME) - -/* Lock the named lock variable. */ -#define __libc_lock_lock(NAME) -#define __libc_rwlock_rdlock(NAME) -#define __libc_rwlock_wrlock(NAME) - -/* Lock the recursive named lock variable. */ -#define __libc_lock_lock_recursive(NAME) -#define __rtld_lock_lock_recursive(NAME) - -/* Try to lock the named lock variable. */ -#define __libc_lock_trylock(NAME) 0 -#define __libc_rwlock_tryrdlock(NAME) 0 -#define __libc_rwlock_trywrlock(NAME) 0 - -/* Try to lock the recursive named lock variable. */ -#define __libc_lock_trylock_recursive(NAME) 0 - -/* Unlock the named lock variable. */ -#define __libc_lock_unlock(NAME) -#define __libc_rwlock_unlock(NAME) - -/* Unlock the recursive named lock variable. */ -#define __libc_lock_unlock_recursive(NAME) -#define __rtld_lock_unlock_recursive(NAME) - - -/* Define once control variable. */ -#define __libc_once_define(CLASS, NAME) CLASS int NAME = 0 - -/* Call handler iff the first call. */ -#define __libc_once(ONCE_CONTROL, INIT_FUNCTION) \ - do { \ - if ((ONCE_CONTROL) == 0) { \ - INIT_FUNCTION (); \ - (ONCE_CONTROL) = 1; \ - } \ - } while (0) - -/* Get once control variable. */ -#define __libc_once_get(ONCE_CONTROL) \ - ((ONCE_CONTROL) == 1) - -/* Start a critical region with a cleanup function */ -#define __libc_cleanup_region_start(DOIT, FCT, ARG) \ -{ \ - typeof (***(FCT)) *__save_FCT = (DOIT) ? (FCT) : 0; \ - typeof (ARG) __save_ARG = ARG; \ - /* close brace is in __libc_cleanup_region_end below. */ - -/* End a critical region started with __libc_cleanup_region_start. */ -#define __libc_cleanup_region_end(DOIT) \ - if ((DOIT) && __save_FCT != 0) \ - (*__save_FCT)(__save_ARG); \ -} - -/* Sometimes we have to exit the block in the middle. */ -#define __libc_cleanup_end(DOIT) \ - if ((DOIT) && __save_FCT != 0) \ - (*__save_FCT)(__save_ARG); \ - -#define __libc_cleanup_push(fct, arg) __libc_cleanup_region_start (1, fct, arg) -#define __libc_cleanup_pop(execute) __libc_cleanup_region_end (execute) - -/* We need portable names for some of the functions. */ -#define __libc_mutex_unlock - -/* Type for key of thread specific data. */ -typedef int __libc_key_t; - -/* Create key for thread specific data. */ -#define __libc_key_create(KEY,DEST) ((void) (KEY), (void) (DEST), -1) - -/* Set thread-specific data associated with KEY to VAL. */ -#define __libc_setspecific(KEY,VAL) ((void) (KEY), (void) (VAL)) - -/* Get thread-specific data associated with KEY. */ -#define __libc_getspecific(KEY) ((void) (KEY), (void *) 0) - -#endif /* libc-lock.h */ diff --git a/sysdeps/generic/libc-mmap.h b/sysdeps/generic/libc-mmap.h deleted file mode 100644 index 9b64fb4780..0000000000 --- a/sysdeps/generic/libc-mmap.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Internal logic for dealing with mmap quirks. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LIBC_MMAP_H -#define _LIBC_MMAP_H 1 - -/* Using MAP_FIXED with mmap sometimes requires larger alignment. */ -#include -#define MAP_FIXED_ALIGNMENT SHMLBA - -#endif diff --git a/sysdeps/generic/libc-tsd.h b/sysdeps/generic/libc-tsd.h deleted file mode 100644 index cd04e02050..0000000000 --- a/sysdeps/generic/libc-tsd.h +++ /dev/null @@ -1,60 +0,0 @@ -/* libc-internal interface for thread-specific data. Stub or TLS version. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _GENERIC_LIBC_TSD_H -#define _GENERIC_LIBC_TSD_H 1 - -/* This file defines the following macros for accessing a small fixed - set of thread-specific `void *' data used only internally by libc. - - __libc_tsd_define(CLASS, TYPE, KEY) -- Define or declare a datum with TYPE - for KEY. CLASS can be `static' for - keys used in only one source file, - empty for global definitions, or - `extern' for global declarations. - __libc_tsd_address(TYPE, KEY) -- Return the `TYPE *' pointing to - the current thread's datum for KEY. - __libc_tsd_get(TYPE, KEY) -- Return the `TYPE' datum for KEY. - __libc_tsd_set(TYPE, KEY, VALUE) -- Set the datum for KEY to VALUE. - - The set of available KEY's will usually be provided as an enum, - and contains (at least): - _LIBC_TSD_KEY_MALLOC - _LIBC_TSD_KEY_DL_ERROR - _LIBC_TSD_KEY_RPC_VARS - All uses must be the literal _LIBC_TSD_* name in the __libc_tsd_* macros. - Some implementations may not provide any enum at all and instead - using string pasting in the macros. */ - -#include - -/* When full support for __thread variables is available, this interface is - just a trivial wrapper for it. Without TLS, this is the generic/stub - implementation for wholly single-threaded systems. - - We don't define an enum for the possible key values, because the KEYs - translate directly into variables by macro magic. */ - -#define __libc_tsd_define(CLASS, TYPE, KEY) \ - CLASS __thread TYPE __libc_tsd_##KEY attribute_tls_model_ie; - -#define __libc_tsd_address(TYPE, KEY) (&__libc_tsd_##KEY) -#define __libc_tsd_get(TYPE, KEY) (__libc_tsd_##KEY) -#define __libc_tsd_set(TYPE, KEY, VALUE) (__libc_tsd_##KEY = (VALUE)) - -#endif /* libc-tsd.h */ diff --git a/sysdeps/generic/libc.abilist b/sysdeps/generic/libc.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libcidn.abilist b/sysdeps/generic/libcidn.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libcrypt.abilist b/sysdeps/generic/libcrypt.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libdl.abilist b/sysdeps/generic/libdl.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libm-test-ulps b/sysdeps/generic/libm-test-ulps deleted file mode 100644 index 7cfa1f8285..0000000000 --- a/sysdeps/generic/libm-test-ulps +++ /dev/null @@ -1,5 +0,0 @@ -# File with deltas for math/libm-test -# This file is the fallback and contains -# no data -# You can create a new file with e.g. `test-double -u' -# followed by `gen-libm-test.pl -u ULPs -n'. diff --git a/sysdeps/generic/libm-test-ulps-name b/sysdeps/generic/libm-test-ulps-name deleted file mode 100644 index 8470d61195..0000000000 --- a/sysdeps/generic/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -Generic diff --git a/sysdeps/generic/libm.abilist b/sysdeps/generic/libm.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libnsl.abilist b/sysdeps/generic/libnsl.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libnss_compat.abilist b/sysdeps/generic/libnss_compat.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libnss_db.abilist b/sysdeps/generic/libnss_db.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libnss_dns.abilist b/sysdeps/generic/libnss_dns.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libnss_files.abilist b/sysdeps/generic/libnss_files.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libnss_hesiod.abilist b/sysdeps/generic/libnss_hesiod.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libnss_nis.abilist b/sysdeps/generic/libnss_nis.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libnss_nisplus.abilist b/sysdeps/generic/libnss_nisplus.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libpthread.abilist b/sysdeps/generic/libpthread.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libresolv.abilist b/sysdeps/generic/libresolv.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/librt.abilist b/sysdeps/generic/librt.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/libutil.abilist b/sysdeps/generic/libutil.abilist deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sysdeps/generic/linkmap.h b/sysdeps/generic/linkmap.h deleted file mode 100644 index 470b4d3e5f..0000000000 --- a/sysdeps/generic/linkmap.h +++ /dev/null @@ -1,4 +0,0 @@ -struct link_map_machine - { - /* empty by default */ - }; diff --git a/sysdeps/generic/local-setxid.h b/sysdeps/generic/local-setxid.h deleted file mode 100644 index b70d9ffb32..0000000000 --- a/sysdeps/generic/local-setxid.h +++ /dev/null @@ -1,4 +0,0 @@ -/* No special support. Fall back to the regular functions. */ - -#define local_seteuid(id) seteuid (id) -#define local_setegid(id) setegid (id) diff --git a/sysdeps/generic/localplt.data b/sysdeps/generic/localplt.data deleted file mode 100644 index 81c741b038..0000000000 --- a/sysdeps/generic/localplt.data +++ /dev/null @@ -1,18 +0,0 @@ -# See scripts/check-localplt.awk for how this file is processed. -# PLT use is required for the malloc family and for matherr because -# users can define their own functions and have library internals call them. -libc.so: calloc -libc.so: free -libc.so: malloc -libc.so: memalign -libc.so: realloc -libm.so: matherr -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/generic/machine-gmon.h b/sysdeps/generic/machine-gmon.h deleted file mode 100644 index b100d4d49f..0000000000 --- a/sysdeps/generic/machine-gmon.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Machine-dependent definitions for profiling support. Generic GCC 2 version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* GCC version 2 gives us a perfect magical function to get - just the information we need: - void *__builtin_return_address (unsigned int N) - returns the return address of the frame N frames up. */ - -/* Be warned that GCC cannot usefully compile __builtin_return_address(N) - for N != 0 on all machines. In this case, you may have to write - your own version of _mcount(). */ - -#if __GNUC__ < 2 - #error "This file uses __builtin_return_address, a GCC 2 extension." -#endif - -#include -/* The canonical name for the function is `_mcount' in both C and asm, - but some old asm code might assume it's `mcount'. */ -void _mcount (void); -weak_alias (_mcount, mcount) - -static void mcount_internal (u_long frompc, u_long selfpc); - -#define _MCOUNT_DECL(frompc, selfpc) \ -static inline void mcount_internal (u_long frompc, u_long selfpc) - -#define MCOUNT \ -void _mcount (void) \ -{ \ - mcount_internal ((u_long) RETURN_ADDRESS (1), (u_long) RETURN_ADDRESS (0)); \ -} diff --git a/sysdeps/generic/machine-lock.h b/sysdeps/generic/machine-lock.h deleted file mode 100644 index b4b2f18b3c..0000000000 --- a/sysdeps/generic/machine-lock.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Machine-specific definition for spin locks. Stub version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MACHINE_LOCK_H -#define _MACHINE_LOCK_H - -/* The type of a spin lock variable. */ - -typedef volatile int __spin_lock_t; - -/* Value to initialize `__spin_lock_t' variables to. */ - -#define __SPIN_LOCK_INITIALIZER 0 - - -#ifndef _EXTERN_INLINE -#define _EXTERN_INLINE __extern_inline -#endif - -/* Unlock LOCK. */ - -_EXTERN_INLINE void -__spin_unlock (__spin_lock_t *__lock) -{ - *__lock = 0; -} - -/* Try to lock LOCK; return nonzero if we locked it, zero if another has. */ - -_EXTERN_INLINE int -__spin_try_lock (__spin_lock_t *__lock) -{ - if (*__lock) - return 0; - *__lock = 1; - return 1; -} - -/* Return nonzero if LOCK is locked. */ - -_EXTERN_INLINE int -__spin_lock_locked (__spin_lock_t *__lock) -{ - return *__lock != 0; -} - - -#endif /* machine-lock.h */ diff --git a/sysdeps/generic/machine-sp.h b/sysdeps/generic/machine-sp.h deleted file mode 100644 index aaa45fd390..0000000000 --- a/sysdeps/generic/machine-sp.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Machine-specific function to return the stack pointer. Stub version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MACHINE_SP_H -#define _MACHINE_SP_H - -/* Return the current stack pointer. */ - -#ifndef _EXTERN_INLINE -#define _EXTERN_INLINE __extern_inline -#endif - -_EXTERN_INLINE void * -__thread_stack_pointer (void) -{ - register void *__sp__ ("{STACK-POINTER}"); - return __sp__; -} - -#endif /* machine-sp.h */ diff --git a/sysdeps/generic/malloc-machine.h b/sysdeps/generic/malloc-machine.h deleted file mode 100644 index 21aa9fcdce..0000000000 --- a/sysdeps/generic/malloc-machine.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Basic platform-independent macro definitions for mutexes, - thread-specific data and parameters for malloc. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _GENERIC_MALLOC_MACHINE_H -#define _GENERIC_MALLOC_MACHINE_H - -#include - -#ifndef atomic_full_barrier -# define atomic_full_barrier() __asm ("" ::: "memory") -#endif - -#ifndef atomic_read_barrier -# define atomic_read_barrier() atomic_full_barrier () -#endif - -#ifndef atomic_write_barrier -# define atomic_write_barrier() atomic_full_barrier () -#endif - -#ifndef DEFAULT_TOP_PAD -# define DEFAULT_TOP_PAD 131072 -#endif - -#endif /* !defined(_GENERIC_MALLOC_MACHINE_H) */ diff --git a/sysdeps/generic/malloc-sysdep.h b/sysdeps/generic/malloc-sysdep.h deleted file mode 100644 index ece389d27e..0000000000 --- a/sysdeps/generic/malloc-sysdep.h +++ /dev/null @@ -1,28 +0,0 @@ -/* System-specific malloc support functions. Generic version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Force an unmap when the heap shrinks in a secure exec. This ensures that - the old data pages immediately cease to be accessible. */ -static inline bool -check_may_shrink_heap (void) -{ - return __libc_enable_secure; -} diff --git a/sysdeps/generic/math-tests-arch.h b/sysdeps/generic/math-tests-arch.h deleted file mode 100644 index 88d7aea2f1..0000000000 --- a/sysdeps/generic/math-tests-arch.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Runtime architecture check for math tests. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* These macros used for architecture check in math tests runtime. - INIT_ARCH_EXT should set up for example some global variable which is - checked by CHECK_ARCH_EXT which produces return from individual test to - prevent run on hardware not supported by tested function implementation. */ -#define INIT_ARCH_EXT -#define CHECK_ARCH_EXT diff --git a/sysdeps/generic/math-tests.h b/sysdeps/generic/math-tests.h deleted file mode 100644 index a4054eae91..0000000000 --- a/sysdeps/generic/math-tests.h +++ /dev/null @@ -1,106 +0,0 @@ -/* Configuration for math tests. Generic version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Indicate whether to run tests involving sNaN values for the float, double, - and long double C data types, respectively. All are run unless - overridden. */ -#ifndef SNAN_TESTS_float -# define SNAN_TESTS_float 1 -#endif -#ifndef SNAN_TESTS_double -# define SNAN_TESTS_double 1 -#endif -#ifndef SNAN_TESTS_long_double -# define SNAN_TESTS_long_double 1 -#endif - -/* Return nonzero value if to run tests involving sNaN values for X. */ -#define SNAN_TESTS(x) \ - (sizeof (x) == sizeof (float) ? SNAN_TESTS_float \ - : sizeof (x) == sizeof (double) ? SNAN_TESTS_double \ - : SNAN_TESTS_long_double) - -/* Indicate whether to run tests involving type casts of sNaN values. These - are run unless overridden. */ -#ifndef SNAN_TESTS_TYPE_CAST -# define SNAN_TESTS_TYPE_CAST 1 -#endif - -/* Indicate whether operations on signaling NaNs preserve the payload - (if possible; it is not possible with a zero payload if the high - bit is set for signaling NaNs) when generating a quiet NaN, and - this should be tested. */ -#ifndef SNAN_TESTS_PRESERVE_PAYLOAD -# define SNAN_TESTS_PRESERVE_PAYLOAD 1 -#endif - -/* Indicate whether to run tests involving a given rounding mode for a - given floating-point type, given that fesetround succeeds for that - mode. All are run if fesetround succeeds unless overridden. */ -#ifndef ROUNDING_TESTS_float -# define ROUNDING_TESTS_float(MODE) 1 -#endif -#ifndef ROUNDING_TESTS_double -# define ROUNDING_TESTS_double(MODE) 1 -#endif -#ifndef ROUNDING_TESTS_long_double -# define ROUNDING_TESTS_long_double(MODE) 1 -#endif - -#define ROUNDING_TESTS(TYPE, MODE) \ - (sizeof (TYPE) == sizeof (float) ? ROUNDING_TESTS_float (MODE) \ - : sizeof (TYPE) == sizeof (double) ? ROUNDING_TESTS_double (MODE) \ - : ROUNDING_TESTS_long_double (MODE)) - -/* Indicate whether to run tests of floating-point exceptions for a - given floating-point type, given that the exception macros are - defined. All are run unless overridden. */ -#ifndef EXCEPTION_TESTS_float -# define EXCEPTION_TESTS_float 1 -#endif -#ifndef EXCEPTION_TESTS_double -# define EXCEPTION_TESTS_double 1 -#endif -#ifndef EXCEPTION_TESTS_long_double -# define EXCEPTION_TESTS_long_double 1 -#endif - -#define EXCEPTION_TESTS(TYPE) \ - (sizeof (TYPE) == sizeof (float) ? EXCEPTION_TESTS_float \ - : sizeof (TYPE) == sizeof (double) ? EXCEPTION_TESTS_double \ - : EXCEPTION_TESTS_long_double) - -/* Indicate whether the given exception trap(s) can be enabled - in feenableexcept. If non-zero, the traps are always supported. - If zero, traps may or may not be supported depending on the - target (this can be determined by checking the return value - of feenableexcept). This enables skipping of tests which use - traps. By default traps are supported unless overridden. */ -#ifndef EXCEPTION_ENABLE_SUPPORTED -# define EXCEPTION_ENABLE_SUPPORTED(EXCEPT) \ - (EXCEPTION_TESTS_float || EXCEPTION_TESTS_double) -#endif - -/* Indicate whether exception traps, if enabled, occur whenever an - exception flag is set explicitly, so it is not possible to set flag - bits with traps enabled without causing traps to be taken. If - traps cannot be enabled, the value of this macro does not - matter. */ -#ifndef EXCEPTION_SET_FORCES_TRAP -# define EXCEPTION_SET_FORCES_TRAP 0 -#endif diff --git a/sysdeps/generic/math-type-macros-double.h b/sysdeps/generic/math-type-macros-double.h deleted file mode 100644 index 6116f7f32f..0000000000 --- a/sysdeps/generic/math-type-macros-double.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Helper macros for double variants of type generic functions of libm. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_TYPE_MACROS_DOUBLE -#define _MATH_TYPE_MACROS_DOUBLE - -#define M_LIT(c) c -#define M_MLIT(c) c -#define M_PFX DBL -#define M_SUF(c) c -#define FLOAT double -#define CFLOAT _Complex double -#define M_STRTO_NAN __strtod_nan - -/* Machines without a distinct long double type - alias long double functions to their double - equivalent. */ -#if defined NO_LONG_DOUBLE && !defined declare_mgen_alias -# define declare_mgen_alias(from, to) \ - weak_alias (from, to) \ - strong_alias (from, from ## l) \ - weak_alias (from, to ## l) -#endif - -#if defined NO_LONG_DOUBLE && !defined declare_mgen_alias_2 -# define declare_mgen_alias_2(from, to, to2) \ - declare_mgen_alias (from, to) \ - weak_alias (from, to2) \ - weak_alias (from, to2 ## l) -#endif - -/* Supply the generic macros. */ -#include - -/* Do not use the type-generic wrapper templates. */ -#define __USE_WRAPPER_TEMPLATE 0 - -#endif diff --git a/sysdeps/generic/math-type-macros-float.h b/sysdeps/generic/math-type-macros-float.h deleted file mode 100644 index 712e517a81..0000000000 --- a/sysdeps/generic/math-type-macros-float.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Helper macros for float variants of type generic functions of libm. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_TYPE_MACROS_FLOAT -#define _MATH_TYPE_MACROS_FLOAT - -#define M_LIT(c) c ## f -#define M_PFX FLT -#define M_SUF(c) c ## f -#define FLOAT float -#define CFLOAT _Complex float -#define M_STRTO_NAN __strtof_nan - -/* Standard/GNU macro literals do not exist for the float type. Use - the double macro constants. */ -#define M_MLIT(c) c - -/* Supply the generic macros. */ -#include - -/* Do not use the type-generic wrapper templates. */ -#define __USE_WRAPPER_TEMPLATE 0 - -#endif diff --git a/sysdeps/generic/math-type-macros-float128.h b/sysdeps/generic/math-type-macros-float128.h deleted file mode 100644 index 5d734db29f..0000000000 --- a/sysdeps/generic/math-type-macros-float128.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Helper macros for _Float128 variants of type generic functions of libm. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_TYPE_MACROS_FLOAT128 -#define _MATH_TYPE_MACROS_FLOAT128 - -#include -#include - -#define M_LIT(c) __f128 (c) -#define M_PFX FLT128 -#define M_SUF(c) c ## f128 -#define FLOAT _Float128 -#define M_STRTO_NAN __strtof128_nan - -#define CFLOAT __CFLOAT128 - -#define M_MLIT(c) c ## f128 - - -/* Supply the generic macros. */ -#include - -/* Use the type-generic wrapper templates. */ -#define __USE_WRAPPER_TEMPLATE 1 - -#endif diff --git a/sysdeps/generic/math-type-macros-ldouble.h b/sysdeps/generic/math-type-macros-ldouble.h deleted file mode 100644 index 4e02e53f70..0000000000 --- a/sysdeps/generic/math-type-macros-ldouble.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Helper macros for long double variants of type generic functions of libm. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_TYPE_MACROS_LDOUBLE -#define _MATH_TYPE_MACROS_LDOUBLE - -#define M_LIT(c) c ## L -#define M_MLIT(c) c ## l -#define M_PFX LDBL -#define M_SUF(c) c ## l -#define FLOAT long double -#define CFLOAT _Complex long double -#define M_STRTO_NAN __strtold_nan - -/* Supply the generic macros. */ -#include - -/* Do not use the type-generic wrapper templates. */ -#define __USE_WRAPPER_TEMPLATE 0 - -#endif diff --git a/sysdeps/generic/math-type-macros.h b/sysdeps/generic/math-type-macros.h deleted file mode 100644 index b4c2aee6aa..0000000000 --- a/sysdeps/generic/math-type-macros.h +++ /dev/null @@ -1,137 +0,0 @@ -/* Helper macros for type generic function implementations within libm. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_TYPE_MACROS -#define _MATH_TYPE_MACROS - -/* Each type imports a header which is expected to - define: - - M_LIT(x) - Paste the type specific suffix onto the constant x. - M_MLIT(x) - Paste the type specific suffix used by the macro - constants in math.h, i.e M_PI or M_PIl. - M_PFX - The prefixed used by float.h macros like FLT_MANT_DIG. - M_SUF(x) - Paste the the type specific suffix used by functions - i.e expf expl exp. - FLOAT - Resolves to the C typename of M_TYPE. - CFLOAT - Resolves to the complex typename of M_TYPE. - M_STRTO_NAN - Resolves to the internal libc function which - converts a string into the appropriate FLOAT nan - value. - - Optionally, these headers may inject a non-standard - definition for the following: - - declare_mgen_alias(from,to) - This exposes the appropriate symbol(s) for a - function f of type FLOAT. - - declare_mgen_alias_2(from,to,to2) - This exposes the appropriate symbol(s) for a - function f of type FLOAT when it is aliased - to two symbols. - - M_LIBM_NEED_COMPAT(func) - This is utilized in macro context to indicate - whether func should declare compat symbols. - - declare_mgen_libm_compat(from,to) - This is used in conjunction with the above macro - outside of macro context to paste whatever is - required to generate a compat symbol. */ - -#ifndef M_PFX -# error "M_PFX must be defined." -#endif -#ifndef M_LIT -# error "M_LIT must be defined." -#endif -#ifndef M_MLIT -# error "M_MLIT must be defined." -#endif -#ifndef M_SUF -# error "M_SUF must be defined." -#endif -#ifndef FLOAT -# error "FLOAT must be defined." -#endif -#ifndef CFLOAT -# error "CFLOAT must be defined." -#endif - -#define __M_CONCAT(a,b) a ## b -#define __M_CONCATX(a,b) __M_CONCAT(a,b) - -#define M_NAN M_SUF (__builtin_nan) ("") -#define M_MIN_EXP __M_CONCATX (M_PFX, _MIN_EXP) -#define M_MAX_EXP __M_CONCATX (M_PFX, _MAX_EXP) -#define M_MIN __M_CONCATX (M_PFX, _MIN) -#define M_MAX __M_CONCATX (M_PFX, _MAX) -#define M_MANT_DIG __M_CONCATX (M_PFX, _MANT_DIG) -#define M_HUGE_VAL (M_SUF (__builtin_huge_val) ()) - -/* Helper macros for commonly used functions. */ -#define M_COPYSIGN M_SUF (__copysign) -#define M_FABS M_SUF (fabs) -#define M_SINCOS M_SUF (__sincos) -#define M_SCALBN M_SUF (__scalbn) -#define M_LOG1P M_SUF (__log1p) - -#define M_ATAN2 M_SUF (__ieee754_atan2) -#define M_COSH M_SUF (__ieee754_cosh) -#define M_EXP M_SUF (__ieee754_exp) -#define M_HYPOT M_SUF (__ieee754_hypot) -#define M_LOG M_SUF (__ieee754_log) -#define M_SINH M_SUF (__ieee754_sinh) -#define M_SQRT M_SUF (__ieee754_sqrt) - -/* Needed to evaluate M_MANT_DIG below. */ -#include - -/* Use a special epsilon value for IBM long double - to avoid spurious overflows/underflows. */ -#if M_MANT_DIG != 106 -# define M_EPSILON __M_CONCATX (M_PFX, _EPSILON) -#else -# define M_EPSILON M_LIT (0x1p-106) -#endif - -/* Enable overloading of function name to assist reuse. */ -#ifndef M_DECL_FUNC -# define M_DECL_FUNC(f) M_SUF (f) -#endif - -/* If the type does not declare special aliasing, use the default. */ -#ifndef declare_mgen_alias -# define declare_mgen_alias(from, to) weak_alias (M_SUF (from), M_SUF (to)) -#endif - -/* Likewise, if two aliases are derived from the same symbol. */ -#ifndef declare_mgen_alias_2 -# define declare_mgen_alias_2(from, to, to2) \ - declare_mgen_alias (from, to) \ - declare_mgen_alias (from, to2) -#endif - -/* Do not generate anything for compat symbols by default. */ -#ifndef M_LIBM_NEED_COMPAT -# define M_LIBM_NEED_COMPAT(func) 0 -# define declare_mgen_libm_compat(from, to) -#endif - -#endif /* _MATH_TYPE_MACROS */ diff --git a/sysdeps/generic/math_ldbl.h b/sysdeps/generic/math_ldbl.h deleted file mode 100644 index 4e7ee7912e..0000000000 --- a/sysdeps/generic/math_ldbl.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _MATH_LDBL_H_ -#define _MATH_LDBL_H_ 1 - -/* Any machine with a 'long double' distinct from 'double' must - override this header. */ - -#endif diff --git a/sysdeps/generic/math_ldbl_opt.h b/sysdeps/generic/math_ldbl_opt.h deleted file mode 100644 index 8a5d8ba107..0000000000 --- a/sysdeps/generic/math_ldbl_opt.h +++ /dev/null @@ -1,14 +0,0 @@ -/* -mlong-double-64 compatibility mode macros. Stub version. - - These macros are used by some math/ and sysdeps/ieee754/ code. - These are the generic definitions for when no funny business is going on. - sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h defines them differently - for platforms where compatibility symbols are required for a previous - ABI that defined long double functions as aliases for the double code. */ - -#define LONG_DOUBLE_COMPAT(lib, introduced) 0 -#define long_double_symbol(lib, local, symbol) -#define ldbl_hidden_def(local, name) libc_hidden_def (name) -#define ldbl_strong_alias(name, aliasname) strong_alias (name, aliasname) -#define ldbl_weak_alias(name, aliasname) weak_alias (name, aliasname) -#define __ldbl_is_dbl 0 diff --git a/sysdeps/generic/math_private.h b/sysdeps/generic/math_private.h deleted file mode 100644 index 6ea5e25e5a..0000000000 --- a/sysdeps/generic/math_private.h +++ /dev/null @@ -1,658 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * from: @(#)fdlibm.h 5.1 93/09/24 - */ - -#ifndef _MATH_PRIVATE_H_ -#define _MATH_PRIVATE_H_ - -#include -#include -#include -#include -#include -#include - -/* Gather machine dependent _Floatn support. */ -#include - -/* The original fdlibm code used statements like: - n0 = ((*(int*)&one)>>29)^1; * index of high word * - ix0 = *(n0+(int*)&x); * high word of x * - ix1 = *((1-n0)+(int*)&x); * low word of x * - to dig two 32 bit words out of the 64 bit IEEE floating point - value. That is non-ANSI, and, moreover, the gcc instruction - scheduler gets it wrong. We instead use the following macros. - Unlike the original code, we determine the endianness at compile - time, not at run time; I don't see much benefit to selecting - endianness at run time. */ - -/* A union which permits us to convert between a double and two 32 bit - ints. */ - -#if __FLOAT_WORD_ORDER == __BIG_ENDIAN - -typedef union -{ - double value; - struct - { - u_int32_t msw; - u_int32_t lsw; - } parts; - uint64_t word; -} ieee_double_shape_type; - -#endif - -#if __FLOAT_WORD_ORDER == __LITTLE_ENDIAN - -typedef union -{ - double value; - struct - { - u_int32_t lsw; - u_int32_t msw; - } parts; - uint64_t word; -} ieee_double_shape_type; - -#endif - -/* Get two 32 bit ints from a double. */ - -#define EXTRACT_WORDS(ix0,ix1,d) \ -do { \ - ieee_double_shape_type ew_u; \ - ew_u.value = (d); \ - (ix0) = ew_u.parts.msw; \ - (ix1) = ew_u.parts.lsw; \ -} while (0) - -/* Get the more significant 32 bit int from a double. */ - -#ifndef GET_HIGH_WORD -# define GET_HIGH_WORD(i,d) \ -do { \ - ieee_double_shape_type gh_u; \ - gh_u.value = (d); \ - (i) = gh_u.parts.msw; \ -} while (0) -#endif - -/* Get the less significant 32 bit int from a double. */ - -#ifndef GET_LOW_WORD -# define GET_LOW_WORD(i,d) \ -do { \ - ieee_double_shape_type gl_u; \ - gl_u.value = (d); \ - (i) = gl_u.parts.lsw; \ -} while (0) -#endif - -/* Get all in one, efficient on 64-bit machines. */ -#ifndef EXTRACT_WORDS64 -# define EXTRACT_WORDS64(i,d) \ -do { \ - ieee_double_shape_type gh_u; \ - gh_u.value = (d); \ - (i) = gh_u.word; \ -} while (0) -#endif - -/* Set a double from two 32 bit ints. */ -#ifndef INSERT_WORDS -# define INSERT_WORDS(d,ix0,ix1) \ -do { \ - ieee_double_shape_type iw_u; \ - iw_u.parts.msw = (ix0); \ - iw_u.parts.lsw = (ix1); \ - (d) = iw_u.value; \ -} while (0) -#endif - -/* Get all in one, efficient on 64-bit machines. */ -#ifndef INSERT_WORDS64 -# define INSERT_WORDS64(d,i) \ -do { \ - ieee_double_shape_type iw_u; \ - iw_u.word = (i); \ - (d) = iw_u.value; \ -} while (0) -#endif - -/* Set the more significant 32 bits of a double from an int. */ -#ifndef SET_HIGH_WORD -#define SET_HIGH_WORD(d,v) \ -do { \ - ieee_double_shape_type sh_u; \ - sh_u.value = (d); \ - sh_u.parts.msw = (v); \ - (d) = sh_u.value; \ -} while (0) -#endif - -/* Set the less significant 32 bits of a double from an int. */ -#ifndef SET_LOW_WORD -# define SET_LOW_WORD(d,v) \ -do { \ - ieee_double_shape_type sl_u; \ - sl_u.value = (d); \ - sl_u.parts.lsw = (v); \ - (d) = sl_u.value; \ -} while (0) -#endif - -/* A union which permits us to convert between a float and a 32 bit - int. */ - -typedef union -{ - float value; - u_int32_t word; -} ieee_float_shape_type; - -/* Get a 32 bit int from a float. */ -#ifndef GET_FLOAT_WORD -# define GET_FLOAT_WORD(i,d) \ -do { \ - ieee_float_shape_type gf_u; \ - gf_u.value = (d); \ - (i) = gf_u.word; \ -} while (0) -#endif - -/* Set a float from a 32 bit int. */ -#ifndef SET_FLOAT_WORD -# define SET_FLOAT_WORD(d,i) \ -do { \ - ieee_float_shape_type sf_u; \ - sf_u.word = (i); \ - (d) = sf_u.value; \ -} while (0) -#endif - -/* We need to guarantee an expansion of name when building - ldbl-128 files as another type (e.g _Float128). */ -#define mathx_hidden_def(name) hidden_def(name) - -/* Get long double macros from a separate header. */ -#include - -/* Include function declarations for each floating-point. */ -#define _Mdouble_ double -#define _MSUF_ -#include -#undef _MSUF_ -#undef _Mdouble_ - -#define _Mdouble_ float -#define _MSUF_ f -#define __MATH_DECLARING_FLOAT -#include -#undef __MATH_DECLARING_FLOAT -#undef _MSUF_ -#undef _Mdouble_ - -#define _Mdouble_ long double -#define _MSUF_ l -#define __MATH_DECLARING_LONG_DOUBLE -#include -#undef __MATH_DECLARING_LONG_DOUBLE -#undef _MSUF_ -#undef _Mdouble_ - -#if __HAVE_DISTINCT_FLOAT128 -# define _Mdouble_ _Float128 -# define _MSUF_ f128 -# define __MATH_DECLARING_FLOATN -# include -# undef __MATH_DECLARING_FLOATN -# undef _MSUF_ -# undef _Mdouble_ -#endif - -#if __HAVE_DISTINCT_FLOAT128 - -/* __builtin_isinf_sign is broken in GCC < 7 for float128. */ -# if ! __GNUC_PREREQ (7, 0) -# include -extern inline int -__isinff128 (_Float128 x) -{ - int64_t hx, lx; - GET_FLOAT128_WORDS64 (hx, lx, x); - lx |= (hx & 0x7fffffffffffffffLL) ^ 0x7fff000000000000LL; - lx |= -lx; - return ~(lx >> 63) & (hx >> 62); -} -# endif - -extern inline _Float128 -fabsf128 (_Float128 x) -{ - return __builtin_fabsf128 (x); -} -#endif - - - -/* fdlibm kernel function */ -extern double __kernel_standard (double,double,int); -extern float __kernel_standard_f (float,float,int); -extern long double __kernel_standard_l (long double,long double,int); - -/* Prototypes for functions of the IBM Accurate Mathematical Library. */ -extern double __exp1 (double __x, double __xx, double __error); -extern double __sin (double __x); -extern double __cos (double __x); -extern int __branred (double __x, double *__a, double *__aa); -extern void __doasin (double __x, double __dx, double __v[]); -extern void __dubsin (double __x, double __dx, double __v[]); -extern void __dubcos (double __x, double __dx, double __v[]); -extern double __halfulp (double __x, double __y); -extern double __sin32 (double __x, double __res, double __res1); -extern double __cos32 (double __x, double __res, double __res1); -extern double __mpsin (double __x, double __dx, bool __range_reduce); -extern double __mpcos (double __x, double __dx, bool __range_reduce); -extern double __slowexp (double __x); -extern double __slowpow (double __x, double __y, double __z); -extern void __docos (double __x, double __dx, double __v[]); - -#ifndef math_opt_barrier -# define math_opt_barrier(x) \ -({ __typeof (x) __x = (x); __asm ("" : "+m" (__x)); __x; }) -# define math_force_eval(x) \ -({ __typeof (x) __x = (x); __asm __volatile__ ("" : : "m" (__x)); }) -#endif - -/* math_narrow_eval reduces its floating-point argument to the range - and precision of its semantic type. (The original evaluation may - still occur with excess range and precision, so the result may be - affected by double rounding.) */ -#if FLT_EVAL_METHOD == 0 -# define math_narrow_eval(x) (x) -#else -# if FLT_EVAL_METHOD == 1 -# define excess_precision(type) __builtin_types_compatible_p (type, float) -# else -# define excess_precision(type) (__builtin_types_compatible_p (type, float) \ - || __builtin_types_compatible_p (type, \ - double)) -# endif -# define math_narrow_eval(x) \ - ({ \ - __typeof (x) math_narrow_eval_tmp = (x); \ - if (excess_precision (__typeof (math_narrow_eval_tmp))) \ - __asm__ ("" : "+m" (math_narrow_eval_tmp)); \ - math_narrow_eval_tmp; \ - }) -#endif - -#if __HAVE_DISTINCT_FLOAT128 -# define __EXPR_FLT128(x, yes, no) \ - __builtin_choose_expr (__builtin_types_compatible_p \ - (__typeof (x), long double), no, yes) -#else -# define __EXPR_FLT128(x, yes, no) no -#endif - - -#define fabs_tg(x) __MATH_TG ((x), (__typeof (x)) __builtin_fabs, (x)) - -#define min_of_type(type) __builtin_choose_expr \ - (__builtin_types_compatible_p (type, float), \ - FLT_MIN, \ - __builtin_choose_expr \ - (__builtin_types_compatible_p (type, double), \ - DBL_MIN, \ - __EXPR_FLT128 (x, FLT128_MIN, LDBL_MIN))) - -/* If X (which is not a NaN) is subnormal, force an underflow - exception. */ -#define math_check_force_underflow(x) \ - do \ - { \ - __typeof (x) force_underflow_tmp = (x); \ - if (fabs_tg (force_underflow_tmp) \ - < min_of_type (__typeof (force_underflow_tmp))) \ - { \ - __typeof (force_underflow_tmp) force_underflow_tmp2 \ - = force_underflow_tmp * force_underflow_tmp; \ - math_force_eval (force_underflow_tmp2); \ - } \ - } \ - while (0) -/* Likewise, but X is also known to be nonnegative. */ -#define math_check_force_underflow_nonneg(x) \ - do \ - { \ - __typeof (x) force_underflow_tmp = (x); \ - if (force_underflow_tmp \ - < min_of_type (__typeof (force_underflow_tmp))) \ - { \ - __typeof (force_underflow_tmp) force_underflow_tmp2 \ - = force_underflow_tmp * force_underflow_tmp; \ - math_force_eval (force_underflow_tmp2); \ - } \ - } \ - while (0) -/* Likewise, for both real and imaginary parts of a complex - result. */ -#define math_check_force_underflow_complex(x) \ - do \ - { \ - __typeof (x) force_underflow_complex_tmp = (x); \ - math_check_force_underflow (__real__ force_underflow_complex_tmp); \ - math_check_force_underflow (__imag__ force_underflow_complex_tmp); \ - } \ - while (0) - -/* The standards only specify one variant of the fenv.h interfaces. - But at least for some architectures we can be more efficient if we - know what operations are going to be performed. Therefore we - define additional interfaces. By default they refer to the normal - interfaces. */ - -static __always_inline void -default_libc_feholdexcept (fenv_t *e) -{ - (void) __feholdexcept (e); -} - -#ifndef libc_feholdexcept -# define libc_feholdexcept default_libc_feholdexcept -#endif -#ifndef libc_feholdexceptf -# define libc_feholdexceptf default_libc_feholdexcept -#endif -#ifndef libc_feholdexceptl -# define libc_feholdexceptl default_libc_feholdexcept -#endif - -static __always_inline void -default_libc_fesetround (int r) -{ - (void) __fesetround (r); -} - -#ifndef libc_fesetround -# define libc_fesetround default_libc_fesetround -#endif -#ifndef libc_fesetroundf -# define libc_fesetroundf default_libc_fesetround -#endif -#ifndef libc_fesetroundl -# define libc_fesetroundl default_libc_fesetround -#endif - -static __always_inline void -default_libc_feholdexcept_setround (fenv_t *e, int r) -{ - __feholdexcept (e); - __fesetround (r); -} - -#ifndef libc_feholdexcept_setround -# define libc_feholdexcept_setround default_libc_feholdexcept_setround -#endif -#ifndef libc_feholdexcept_setroundf -# define libc_feholdexcept_setroundf default_libc_feholdexcept_setround -#endif -#ifndef libc_feholdexcept_setroundl -# define libc_feholdexcept_setroundl default_libc_feholdexcept_setround -#endif - -#ifndef libc_feholdsetround_53bit -# define libc_feholdsetround_53bit libc_feholdsetround -#endif - -#ifndef libc_fetestexcept -# define libc_fetestexcept fetestexcept -#endif -#ifndef libc_fetestexceptf -# define libc_fetestexceptf fetestexcept -#endif -#ifndef libc_fetestexceptl -# define libc_fetestexceptl fetestexcept -#endif - -static __always_inline void -default_libc_fesetenv (fenv_t *e) -{ - (void) __fesetenv (e); -} - -#ifndef libc_fesetenv -# define libc_fesetenv default_libc_fesetenv -#endif -#ifndef libc_fesetenvf -# define libc_fesetenvf default_libc_fesetenv -#endif -#ifndef libc_fesetenvl -# define libc_fesetenvl default_libc_fesetenv -#endif - -static __always_inline void -default_libc_feupdateenv (fenv_t *e) -{ - (void) __feupdateenv (e); -} - -#ifndef libc_feupdateenv -# define libc_feupdateenv default_libc_feupdateenv -#endif -#ifndef libc_feupdateenvf -# define libc_feupdateenvf default_libc_feupdateenv -#endif -#ifndef libc_feupdateenvl -# define libc_feupdateenvl default_libc_feupdateenv -#endif - -#ifndef libc_feresetround_53bit -# define libc_feresetround_53bit libc_feresetround -#endif - -static __always_inline int -default_libc_feupdateenv_test (fenv_t *e, int ex) -{ - int ret = fetestexcept (ex); - __feupdateenv (e); - return ret; -} - -#ifndef libc_feupdateenv_test -# define libc_feupdateenv_test default_libc_feupdateenv_test -#endif -#ifndef libc_feupdateenv_testf -# define libc_feupdateenv_testf default_libc_feupdateenv_test -#endif -#ifndef libc_feupdateenv_testl -# define libc_feupdateenv_testl default_libc_feupdateenv_test -#endif - -/* Save and set the rounding mode. The use of fenv_t to store the old mode - allows a target-specific version of this function to avoid converting the - rounding mode from the fpu format. By default we have no choice but to - manipulate the entire env. */ - -#ifndef libc_feholdsetround -# define libc_feholdsetround libc_feholdexcept_setround -#endif -#ifndef libc_feholdsetroundf -# define libc_feholdsetroundf libc_feholdexcept_setroundf -#endif -#ifndef libc_feholdsetroundl -# define libc_feholdsetroundl libc_feholdexcept_setroundl -#endif - -/* ... and the reverse. */ - -#ifndef libc_feresetround -# define libc_feresetround libc_feupdateenv -#endif -#ifndef libc_feresetroundf -# define libc_feresetroundf libc_feupdateenvf -#endif -#ifndef libc_feresetroundl -# define libc_feresetroundl libc_feupdateenvl -#endif - -/* ... and a version that may also discard exceptions. */ - -#ifndef libc_feresetround_noex -# define libc_feresetround_noex libc_fesetenv -#endif -#ifndef libc_feresetround_noexf -# define libc_feresetround_noexf libc_fesetenvf -#endif -#ifndef libc_feresetround_noexl -# define libc_feresetround_noexl libc_fesetenvl -#endif - -#ifndef HAVE_RM_CTX -# define HAVE_RM_CTX 0 -#endif - -#if HAVE_RM_CTX -/* Set/Restore Rounding Modes only when necessary. If defined, these functions - set/restore floating point state only if the state needed within the lexical - block is different from the current state. This saves a lot of time when - the floating point unit is much slower than the fixed point units. */ - -# ifndef libc_feholdsetround_noex_ctx -# define libc_feholdsetround_noex_ctx libc_feholdsetround_ctx -# endif -# ifndef libc_feholdsetround_noexf_ctx -# define libc_feholdsetround_noexf_ctx libc_feholdsetroundf_ctx -# endif -# ifndef libc_feholdsetround_noexl_ctx -# define libc_feholdsetround_noexl_ctx libc_feholdsetroundl_ctx -# endif - -# ifndef libc_feresetround_noex_ctx -# define libc_feresetround_noex_ctx libc_fesetenv_ctx -# endif -# ifndef libc_feresetround_noexf_ctx -# define libc_feresetround_noexf_ctx libc_fesetenvf_ctx -# endif -# ifndef libc_feresetround_noexl_ctx -# define libc_feresetround_noexl_ctx libc_fesetenvl_ctx -# endif - -#else - -/* Default implementation using standard fenv functions. - Avoid unnecessary rounding mode changes by first checking the - current rounding mode. Note the use of __glibc_unlikely is - important for performance. */ - -static __always_inline void -libc_feholdsetround_ctx (struct rm_ctx *ctx, int round) -{ - ctx->updated_status = false; - - /* Update rounding mode only if different. */ - if (__glibc_unlikely (round != get_rounding_mode ())) - { - ctx->updated_status = true; - __fegetenv (&ctx->env); - __fesetround (round); - } -} - -static __always_inline void -libc_feresetround_ctx (struct rm_ctx *ctx) -{ - /* Restore the rounding mode if updated. */ - if (__glibc_unlikely (ctx->updated_status)) - __feupdateenv (&ctx->env); -} - -static __always_inline void -libc_feholdsetround_noex_ctx (struct rm_ctx *ctx, int round) -{ - /* Save exception flags and rounding mode. */ - __fegetenv (&ctx->env); - - /* Update rounding mode only if different. */ - if (__glibc_unlikely (round != get_rounding_mode ())) - __fesetround (round); -} - -static __always_inline void -libc_feresetround_noex_ctx (struct rm_ctx *ctx) -{ - /* Restore exception flags and rounding mode. */ - __fesetenv (&ctx->env); -} - -# define libc_feholdsetroundf_ctx libc_feholdsetround_ctx -# define libc_feholdsetroundl_ctx libc_feholdsetround_ctx -# define libc_feresetroundf_ctx libc_feresetround_ctx -# define libc_feresetroundl_ctx libc_feresetround_ctx - -# define libc_feholdsetround_noexf_ctx libc_feholdsetround_noex_ctx -# define libc_feholdsetround_noexl_ctx libc_feholdsetround_noex_ctx -# define libc_feresetround_noexf_ctx libc_feresetround_noex_ctx -# define libc_feresetround_noexl_ctx libc_feresetround_noex_ctx - -#endif - -#ifndef libc_feholdsetround_53bit_ctx -# define libc_feholdsetround_53bit_ctx libc_feholdsetround_ctx -#endif -#ifndef libc_feresetround_53bit_ctx -# define libc_feresetround_53bit_ctx libc_feresetround_ctx -#endif - -#define SET_RESTORE_ROUND_GENERIC(RM,ROUNDFUNC,CLEANUPFUNC) \ - struct rm_ctx ctx __attribute__((cleanup (CLEANUPFUNC ## _ctx))); \ - ROUNDFUNC ## _ctx (&ctx, (RM)) - -/* Set the rounding mode within a lexical block. Restore the rounding mode to - the value at the start of the block. The exception mode must be preserved. - Exceptions raised within the block must be set in the exception flags. - Non-stop mode may be enabled inside the block. */ - -#define SET_RESTORE_ROUND(RM) \ - SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetround, libc_feresetround) -#define SET_RESTORE_ROUNDF(RM) \ - SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetroundf, libc_feresetroundf) -#define SET_RESTORE_ROUNDL(RM) \ - SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetroundl, libc_feresetroundl) - -/* Set the rounding mode within a lexical block. Restore the rounding mode to - the value at the start of the block. The exception mode must be preserved. - Exceptions raised within the block must be discarded, and exception flags - are restored to the value at the start of the block. - Non-stop mode may be enabled inside the block. */ - -#define SET_RESTORE_ROUND_NOEX(RM) \ - SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetround_noex, \ - libc_feresetround_noex) -#define SET_RESTORE_ROUND_NOEXF(RM) \ - SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetround_noexf, \ - libc_feresetround_noexf) -#define SET_RESTORE_ROUND_NOEXL(RM) \ - SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetround_noexl, \ - libc_feresetround_noexl) - -/* Like SET_RESTORE_ROUND, but also set rounding precision to 53 bits. */ -#define SET_RESTORE_ROUND_53BIT(RM) \ - SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetround_53bit, \ - libc_feresetround_53bit) - -#endif /* _MATH_PRIVATE_H_ */ diff --git a/sysdeps/generic/math_private_calls.h b/sysdeps/generic/math_private_calls.h deleted file mode 100644 index 34bbd5e684..0000000000 --- a/sysdeps/generic/math_private_calls.h +++ /dev/null @@ -1,124 +0,0 @@ -/* Private function declarations for libm. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __MSUF_X(x, suffix) x ## suffix -#define __MSUF_S(...) __MSUF_X (__VA_ARGS__) -#define __MSUF(x) __MSUF_S (x, _MSUF_) - -#define __MSUF_R_X(x, suffix) x ## suffix ## _r -#define __MSUF_R_S(...) __MSUF_R_X (__VA_ARGS__) -#define __MSUF_R(x) __MSUF_R_S (x, _MSUF_) - -/* IEEE style elementary functions. */ -extern _Mdouble_ __MSUF (__ieee754_acos) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_acosh) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_asin) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_atan2) (_Mdouble_, _Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_atanh) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_cosh) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_exp) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_exp10) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_exp2) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_fmod) (_Mdouble_, _Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_gamma) (_Mdouble_); -extern _Mdouble_ __MSUF_R (__ieee754_gamma) (_Mdouble_, int *); -extern _Mdouble_ __MSUF (__ieee754_hypot) (_Mdouble_, _Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_j0) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_j1) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_jn) (int, _Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_lgamma) (_Mdouble_); -extern _Mdouble_ __MSUF_R (__ieee754_lgamma) (_Mdouble_, int *); -extern _Mdouble_ __MSUF (__ieee754_log) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_log10) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_log2) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_pow) (_Mdouble_, _Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_remainder) (_Mdouble_, _Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_sinh) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_sqrt) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_y0) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_y1) (_Mdouble_); -extern _Mdouble_ __MSUF (__ieee754_yn) (int, _Mdouble_); - -extern _Mdouble_ __MSUF (__ieee754_scalb) (_Mdouble_, _Mdouble_); -extern int __MSUF (__ieee754_ilogb) (_Mdouble_); - -extern int32_t __MSUF (__ieee754_rem_pio2) (_Mdouble_, _Mdouble_ *); - -/* fdlibm kernel functions. */ -extern _Mdouble_ __MSUF (__kernel_sin) (_Mdouble_, _Mdouble_, int); -extern _Mdouble_ __MSUF (__kernel_cos) (_Mdouble_, _Mdouble_); -extern _Mdouble_ __MSUF (__kernel_tan) (_Mdouble_, _Mdouble_, int); - -#if defined __MATH_DECLARING_LONG_DOUBLE || defined __MATH_DECLARING_FLOATN -extern void __MSUF (__kernel_sincos) (_Mdouble_, _Mdouble_, - _Mdouble_ *, _Mdouble_ *, int); -#endif - -#if !defined __MATH_DECLARING_LONG_DOUBLE || defined __MATH_DECLARING_FLOATN -extern int __MSUF (__kernel_rem_pio2) (_Mdouble_ *, _Mdouble_ *, int, - int, int, const int32_t *); -#endif - -/* Internal functions. */ -#if !defined __MATH_DECLARING_LONG_DOUBLE || !defined NO_LONG_DOUBLE -extern _Mdouble_ __MSUF (__copysign) (_Mdouble_ x, _Mdouble_ __y); - -extern inline _Mdouble_ -__MSUF (__copysign) (_Mdouble_ x, _Mdouble_ __y) -{ - return __MSUF (__builtin_copysign) (x, __y); -} -#endif - -/* Return X^2 + Y^2 - 1, computed without large cancellation error. - It is given that 1 > X >= Y >= epsilon / 2, and that X^2 + Y^2 >= - 0.5. */ -extern _Mdouble_ __MSUF (__x2y2m1) (_Mdouble_ x, _Mdouble_ y); - -/* Compute the product of X + X_EPS, X + X_EPS + 1, ..., X + X_EPS + N - - 1, in the form R * (1 + *EPS) where the return value R is an - approximation to the product and *EPS is set to indicate the - approximate error in the return value. X is such that all the - values X + 1, ..., X + N - 1 are exactly representable, and X_EPS / - X is small enough that factors quadratic in it can be - neglected. */ -extern _Mdouble_ __MSUF (__gamma_product) (_Mdouble_ x, _Mdouble_ x_eps, - int n, _Mdouble_ *eps); - -/* Compute lgamma of a negative argument X, if it is in a range - (depending on the floating-point format) for which expansion around - zeros is used, setting *SIGNGAMP accordingly. */ -extern _Mdouble_ __MSUF (__lgamma_neg) (_Mdouble_ x, int *signgamp); - -/* Compute the product of 1 + (T / (X + X_EPS)), 1 + (T / (X + X_EPS + - 1)), ..., 1 + (T / (X + X_EPS + N - 1)), minus 1. X is such that - all the values X + 1, ..., X + N - 1 are exactly representable, and - X_EPS / X is small enough that factors quadratic in it can be - neglected. */ -#if !defined __MATH_DECLARING_FLOAT -extern _Mdouble_ __MSUF (__lgamma_product) (_Mdouble_ t, _Mdouble_ x, - _Mdouble_ x_eps, int n); -#endif - -#undef __MSUF_X -#undef __MSUF_S -#undef __MSUF - -#undef __MSUF_R_X -#undef __MSUF_R_S -#undef __MSUF_R diff --git a/sysdeps/generic/memcopy.h b/sysdeps/generic/memcopy.h deleted file mode 100644 index 83b8fd6de8..0000000000 --- a/sysdeps/generic/memcopy.h +++ /dev/null @@ -1,202 +0,0 @@ -/* memcopy.h -- definitions for memory copy functions. Generic C version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Torbjorn Granlund (tege@sics.se). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MEMCOPY_H -#define _MEMCOPY_H 1 - -/* The strategy of the memory functions is: - - 1. Copy bytes until the destination pointer is aligned. - - 2. Copy words in unrolled loops. If the source and destination - are not aligned in the same way, use word memory operations, - but shift and merge two read words before writing. - - 3. Copy the few remaining bytes. - - This is fast on processors that have at least 10 registers for - allocation by GCC, and that can access memory at reg+const in one - instruction. - - I made an "exhaustive" test of this memmove when I wrote it, - exhaustive in the sense that I tried all alignment and length - combinations, with and without overlap. */ - -#include -#include -#include - -/* The macros defined in this file are: - - BYTE_COPY_FWD(dst_beg_ptr, src_beg_ptr, nbytes_to_copy) - - BYTE_COPY_BWD(dst_end_ptr, src_end_ptr, nbytes_to_copy) - - WORD_COPY_FWD(dst_beg_ptr, src_beg_ptr, nbytes_remaining, nbytes_to_copy) - - WORD_COPY_BWD(dst_end_ptr, src_end_ptr, nbytes_remaining, nbytes_to_copy) - - MERGE(old_word, sh_1, new_word, sh_2) - [I fail to understand. I feel stupid. --roland] -*/ - -/* Type to use for aligned memory operations. - This should normally be the biggest type supported by a single load - and store. */ -#define op_t unsigned long int -#define OPSIZ (sizeof(op_t)) - -/* Type to use for unaligned operations. */ -typedef unsigned char byte; - -#if __BYTE_ORDER == __LITTLE_ENDIAN -#define MERGE(w0, sh_1, w1, sh_2) (((w0) >> (sh_1)) | ((w1) << (sh_2))) -#endif -#if __BYTE_ORDER == __BIG_ENDIAN -#define MERGE(w0, sh_1, w1, sh_2) (((w0) << (sh_1)) | ((w1) >> (sh_2))) -#endif - -/* Copy exactly NBYTES bytes from SRC_BP to DST_BP, - without any assumptions about alignment of the pointers. */ -#define BYTE_COPY_FWD(dst_bp, src_bp, nbytes) \ - do \ - { \ - size_t __nbytes = (nbytes); \ - while (__nbytes > 0) \ - { \ - byte __x = ((byte *) src_bp)[0]; \ - src_bp += 1; \ - __nbytes -= 1; \ - ((byte *) dst_bp)[0] = __x; \ - dst_bp += 1; \ - } \ - } while (0) - -/* Copy exactly NBYTES_TO_COPY bytes from SRC_END_PTR to DST_END_PTR, - beginning at the bytes right before the pointers and continuing towards - smaller addresses. Don't assume anything about alignment of the - pointers. */ -#define BYTE_COPY_BWD(dst_ep, src_ep, nbytes) \ - do \ - { \ - size_t __nbytes = (nbytes); \ - while (__nbytes > 0) \ - { \ - byte __x; \ - src_ep -= 1; \ - __x = ((byte *) src_ep)[0]; \ - dst_ep -= 1; \ - __nbytes -= 1; \ - ((byte *) dst_ep)[0] = __x; \ - } \ - } while (0) - -/* Copy *up to* NBYTES bytes from SRC_BP to DST_BP, with - the assumption that DST_BP is aligned on an OPSIZ multiple. If - not all bytes could be easily copied, store remaining number of bytes - in NBYTES_LEFT, otherwise store 0. */ -extern void _wordcopy_fwd_aligned (long int, long int, size_t) - attribute_hidden __THROW; -extern void _wordcopy_fwd_dest_aligned (long int, long int, size_t) - attribute_hidden __THROW; -#define WORD_COPY_FWD(dst_bp, src_bp, nbytes_left, nbytes) \ - do \ - { \ - if (src_bp % OPSIZ == 0) \ - _wordcopy_fwd_aligned (dst_bp, src_bp, (nbytes) / OPSIZ); \ - else \ - _wordcopy_fwd_dest_aligned (dst_bp, src_bp, (nbytes) / OPSIZ); \ - src_bp += (nbytes) & -OPSIZ; \ - dst_bp += (nbytes) & -OPSIZ; \ - (nbytes_left) = (nbytes) % OPSIZ; \ - } while (0) - -/* Copy *up to* NBYTES_TO_COPY bytes from SRC_END_PTR to DST_END_PTR, - beginning at the words (of type op_t) right before the pointers and - continuing towards smaller addresses. May take advantage of that - DST_END_PTR is aligned on an OPSIZ multiple. If not all bytes could be - easily copied, store remaining number of bytes in NBYTES_REMAINING, - otherwise store 0. */ -extern void _wordcopy_bwd_aligned (long int, long int, size_t) - attribute_hidden __THROW; -extern void _wordcopy_bwd_dest_aligned (long int, long int, size_t) - attribute_hidden __THROW; -#define WORD_COPY_BWD(dst_ep, src_ep, nbytes_left, nbytes) \ - do \ - { \ - if (src_ep % OPSIZ == 0) \ - _wordcopy_bwd_aligned (dst_ep, src_ep, (nbytes) / OPSIZ); \ - else \ - _wordcopy_bwd_dest_aligned (dst_ep, src_ep, (nbytes) / OPSIZ); \ - src_ep -= (nbytes) & -OPSIZ; \ - dst_ep -= (nbytes) & -OPSIZ; \ - (nbytes_left) = (nbytes) % OPSIZ; \ - } while (0) - -/* The macro PAGE_COPY_FWD_MAYBE (dstp, srcp, nbytes_left, nbytes) is invoked - like WORD_COPY_FWD et al. The pointers should be at least word aligned. - This will check if virtual copying by pages can and should be done and do it - if so. The pointers will be aligned to PAGE_SIZE bytes. The macro requires - that pagecopy.h defines at least PAGE_COPY_THRESHOLD to 0. If - PAGE_COPY_THRESHOLD is non-zero, the header must also define PAGE_COPY_FWD - and PAGE_SIZE. -*/ -#if PAGE_COPY_THRESHOLD - -# include - -# define PAGE_COPY_FWD_MAYBE(dstp, srcp, nbytes_left, nbytes) \ - do \ - { \ - if ((nbytes) >= PAGE_COPY_THRESHOLD && \ - PAGE_OFFSET ((dstp) - (srcp)) == 0) \ - { \ - /* The amount to copy is past the threshold for copying \ - pages virtually with kernel VM operations, and the \ - source and destination addresses have the same alignment. */ \ - size_t nbytes_before = PAGE_OFFSET (-(dstp)); \ - if (nbytes_before != 0) \ - { \ - /* First copy the words before the first page boundary. */ \ - WORD_COPY_FWD (dstp, srcp, nbytes_left, nbytes_before); \ - assert (nbytes_left == 0); \ - nbytes -= nbytes_before; \ - } \ - PAGE_COPY_FWD (dstp, srcp, nbytes_left, nbytes); \ - } \ - } while (0) - -/* The page size is always a power of two, so we can avoid modulo division. */ -# define PAGE_OFFSET(n) ((n) & (PAGE_SIZE - 1)) - -#else - -# define PAGE_COPY_FWD_MAYBE(dstp, srcp, nbytes_left, nbytes) /* nada */ - -#endif - -/* Threshold value for when to enter the unrolled loops. */ -#define OP_T_THRES 16 - -/* Set to 1 if memcpy is safe to use for forward-copying memmove with - overlapping addresses. This is 0 by default because memcpy implementations - are generally not safe for overlapping addresses. */ -#define MEMCPY_OK_FOR_FWD_MEMMOVE 0 - -#endif /* memcopy.h */ diff --git a/sysdeps/generic/memusage.h b/sysdeps/generic/memusage.h deleted file mode 100644 index c640d6db1d..0000000000 --- a/sysdeps/generic/memusage.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include -#include -#include - -#ifndef GETSP -# warning "GETSP is not defined for this architecture." -# define GETSP 0 -#endif - -#ifndef GETTIME -# define GETTIME(low,high) \ - { \ - struct timeval tval; \ - uint64_t usecs; \ - gettimeofday (&tval, NULL); \ - usecs = (uint64_t) tval.tv_usec + (uint64_t) tval.tv_usec * 1000000; \ - low = usecs & 0xffffffff; \ - high = usecs >> 32; \ - } -#endif - -#if LONG_BIT == 32 -# define memusage_cntr_t uatomic32_t -#else -# define memusage_cntr_t uatomic64_t -#endif -#ifndef memusage_size_t -# if LONG_BIT == 32 -# define memusage_size_t uatomic32_t -# else -# define memusage_size_t uatomic64_t -# endif -#endif diff --git a/sysdeps/generic/nan-high-order-bit.h b/sysdeps/generic/nan-high-order-bit.h deleted file mode 100644 index 4ae711d9c4..0000000000 --- a/sysdeps/generic/nan-high-order-bit.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Specify NaN high-order bit conventions. Generic version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef NAN_HIGH_ORDER_BIT_H -#define NAN_HIGH_ORDER_BIT_H 1 - -/* Define this macro to 1 if the high-order bit of a NaN's mantissa is - set for signaling NaNs and clear for quiet NaNs, 0 otherwise (the - preferred IEEE convention). */ -#define HIGH_ORDER_BIT_IS_SET_FOR_SNAN 0 - -#endif /* nan-high-order-bit.h */ diff --git a/sysdeps/generic/net/if.h b/sysdeps/generic/net/if.h deleted file mode 100644 index 31150e2a31..0000000000 --- a/sysdeps/generic/net/if.h +++ /dev/null @@ -1,49 +0,0 @@ -/* net/if.h -- declarations for inquiring about network interfaces - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NET_IF_H - -#define _NET_IF_H 1 -#include - - -__BEGIN_DECLS - -/* Convert an interface name to an index, and vice versa. */ - -extern unsigned int if_nametoindex (const char *__ifname) __THROW; -extern char *if_indextoname (unsigned int __ifindex, char *__ifname) __THROW; - -/* Return a list of all interfaces and their indices. */ - -struct if_nameindex - { - unsigned int if_index; /* 1, 2, ... */ - char *if_name; /* null terminated name: "eth0", ... */ - }; - -extern struct if_nameindex *if_nameindex (void) __THROW; - -/* Free the data returned from if_nameindex. */ - -extern void if_freenameindex (struct if_nameindex *__ptr) __THROW; - -__END_DECLS - - -#endif /* net/if.h */ diff --git a/sysdeps/generic/netinet/if_ether.h b/sysdeps/generic/netinet/if_ether.h deleted file mode 100644 index 123f9ef173..0000000000 --- a/sysdeps/generic/netinet/if_ether.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __NETINET_IF_ETHER_H -#define __NETINET_IF_ETHER_H 1 - -#include - -#define ETH_ALEN 6 /* Octets in one ethernet address. */ - -/* This is a name for the 48 bit ethernet address available on many - systems. */ -struct ether_addr -{ - uint8_t ether_addr_octet[ETH_ALEN]; -} __attribute__ ((__packed__)); - -#endif /* netinet/if_ether.h */ diff --git a/sysdeps/generic/netinet/in_systm.h b/sysdeps/generic/netinet/in_systm.h deleted file mode 100644 index 6697207a6c..0000000000 --- a/sysdeps/generic/netinet/in_systm.h +++ /dev/null @@ -1,40 +0,0 @@ -/* System specific type definitions for networking code. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NETINET_IN_SYSTM_H -#define _NETINET_IN_SYSTM_H 1 - -#include -#include - -__BEGIN_DECLS - -/* - * Network order versions of various data types. Unfortunately, BSD - * assumes specific sizes for shorts (16 bit) and longs (32 bit) which - * don't hold in general. As a consequence, the network order versions - * may not reflect the actual size of the native data types. - */ - -typedef uint16_t n_short; /* short as received from the net */ -typedef uint32_t n_long; /* long as received from the net */ -typedef uint32_t n_time; /* ms since 00:00 GMT, byte rev */ - -__END_DECLS - -#endif /* netinet/in_systm.h */ diff --git a/sysdeps/generic/netinet/ip.h b/sysdeps/generic/netinet/ip.h deleted file mode 100644 index d57a0d9a1a..0000000000 --- a/sysdeps/generic/netinet/ip.h +++ /dev/null @@ -1,302 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __NETINET_IP_H -#define __NETINET_IP_H 1 - -#include -#include - -#include - -__BEGIN_DECLS - -struct timestamp - { - uint8_t len; - uint8_t ptr; -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int flags:4; - unsigned int overflow:4; -#elif __BYTE_ORDER == __BIG_ENDIAN - unsigned int overflow:4; - unsigned int flags:4; -#else -# error "Please fix " -#endif - uint32_t data[9]; - }; - -struct iphdr - { -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int ihl:4; - unsigned int version:4; -#elif __BYTE_ORDER == __BIG_ENDIAN - unsigned int version:4; - unsigned int ihl:4; -#else -# error "Please fix " -#endif - uint8_t tos; - uint16_t tot_len; - uint16_t id; - uint16_t frag_off; - uint8_t ttl; - uint8_t protocol; - uint16_t check; - uint32_t saddr; - uint32_t daddr; - /*The options start here. */ - }; - -#ifdef __USE_MISC -/* - * Copyright (c) 1982, 1986, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)ip.h 8.1 (Berkeley) 6/10/93 - */ - -/* - * Definitions for internet protocol version 4. - * Per RFC 791, September 1981. - */ - -/* - * Structure of an internet header, naked of options. - */ -struct ip - { -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int ip_hl:4; /* header length */ - unsigned int ip_v:4; /* version */ -#endif -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int ip_v:4; /* version */ - unsigned int ip_hl:4; /* header length */ -#endif - uint8_t ip_tos; /* type of service */ - unsigned short ip_len; /* total length */ - unsigned short ip_id; /* identification */ - unsigned short ip_off; /* fragment offset field */ -#define IP_RF 0x8000 /* reserved fragment flag */ -#define IP_DF 0x4000 /* dont fragment flag */ -#define IP_MF 0x2000 /* more fragments flag */ -#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ - uint8_t ip_ttl; /* time to live */ - uint8_t ip_p; /* protocol */ - unsigned short ip_sum; /* checksum */ - struct in_addr ip_src, ip_dst; /* source and dest address */ - }; - -/* - * Time stamp option structure. - */ -struct ip_timestamp - { - uint8_t ipt_code; /* IPOPT_TS */ - uint8_t ipt_len; /* size of structure (variable) */ - uint8_t ipt_ptr; /* index of current entry */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int ipt_flg:4; /* flags, see below */ - unsigned int ipt_oflw:4; /* overflow counter */ -#endif -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int ipt_oflw:4; /* overflow counter */ - unsigned int ipt_flg:4; /* flags, see below */ -#endif - uint32_t data[9]; - }; -#endif /* __USE_MISC */ - -#define IPVERSION 4 /* IP version number */ -#define IP_MAXPACKET 65535 /* maximum packet size */ - -/* - * Definitions for Explicit Congestion Notification (ECN) - * - * Taken from RFC-3168, Section 5. - */ - -#define IPTOS_ECN_MASK 0x03 -#define IPTOS_ECN(x) ((x) & IPTOS_ECN_MASK) -#define IPTOS_ECN_NOT_ECT 0x00 -#define IPTOS_ECN_ECT1 0x01 -#define IPTOS_ECN_ECT0 0x02 -#define IPTOS_ECN_CE 0x03 - -/* - * Definitions for IP differentiated services code points (DSCP) - * - * Taken from RFC-2597, Section 6 and RFC-2598, Section 2.3. - */ - -#define IPTOS_DSCP_MASK 0xfc -#define IPTOS_DSCP(x) ((x) & IPTOS_DSCP_MASK) -#define IPTOS_DSCP_AF11 0x28 -#define IPTOS_DSCP_AF12 0x30 -#define IPTOS_DSCP_AF13 0x38 -#define IPTOS_DSCP_AF21 0x48 -#define IPTOS_DSCP_AF22 0x50 -#define IPTOS_DSCP_AF23 0x58 -#define IPTOS_DSCP_AF31 0x68 -#define IPTOS_DSCP_AF32 0x70 -#define IPTOS_DSCP_AF33 0x78 -#define IPTOS_DSCP_AF41 0x88 -#define IPTOS_DSCP_AF42 0x90 -#define IPTOS_DSCP_AF43 0x98 -#define IPTOS_DSCP_EF 0xb8 - -/* - * In RFC 2474, Section 4.2.2.1, the Class Selector Codepoints subsume - * the old ToS Precedence values. - */ - -#define IPTOS_CLASS_MASK 0xe0 -#define IPTOS_CLASS(class) ((class) & IPTOS_CLASS_MASK) -#define IPTOS_CLASS_CS0 0x00 -#define IPTOS_CLASS_CS1 0x20 -#define IPTOS_CLASS_CS2 0x40 -#define IPTOS_CLASS_CS3 0x60 -#define IPTOS_CLASS_CS4 0x80 -#define IPTOS_CLASS_CS5 0xa0 -#define IPTOS_CLASS_CS6 0xc0 -#define IPTOS_CLASS_CS7 0xe0 - -#define IPTOS_CLASS_DEFAULT IPTOS_CLASS_CS0 - -/* - * Definitions for IP type of service (ip_tos) [deprecated; use DSCP - * and CS definitions above instead.] - */ -#define IPTOS_TOS_MASK 0x1E -#define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK) -#define IPTOS_LOWDELAY 0x10 -#define IPTOS_THROUGHPUT 0x08 -#define IPTOS_RELIABILITY 0x04 -#define IPTOS_LOWCOST 0x02 -#define IPTOS_MINCOST IPTOS_LOWCOST - -/* - * Definitions for IP precedence (also in ip_tos) [also deprecated.] - */ -#define IPTOS_PREC_MASK IPTOS_CLASS_MASK -#define IPTOS_PREC(tos) IPTOS_CLASS(tos) -#define IPTOS_PREC_NETCONTROL IPTOS_CLASS_CS7 -#define IPTOS_PREC_INTERNETCONTROL IPTOS_CLASS_CS6 -#define IPTOS_PREC_CRITIC_ECP IPTOS_CLASS_CS5 -#define IPTOS_PREC_FLASHOVERRIDE IPTOS_CLASS_CS4 -#define IPTOS_PREC_FLASH IPTOS_CLASS_CS3 -#define IPTOS_PREC_IMMEDIATE IPTOS_CLASS_CS2 -#define IPTOS_PREC_PRIORITY IPTOS_CLASS_CS1 -#define IPTOS_PREC_ROUTINE IPTOS_CLASS_CS0 - -/* - * Definitions for options. - */ -#define IPOPT_COPY 0x80 -#define IPOPT_CLASS_MASK 0x60 -#define IPOPT_NUMBER_MASK 0x1f - -#define IPOPT_COPIED(o) ((o) & IPOPT_COPY) -#define IPOPT_CLASS(o) ((o) & IPOPT_CLASS_MASK) -#define IPOPT_NUMBER(o) ((o) & IPOPT_NUMBER_MASK) - -#define IPOPT_CONTROL 0x00 -#define IPOPT_RESERVED1 0x20 -#define IPOPT_DEBMEAS 0x40 -#define IPOPT_MEASUREMENT IPOPT_DEBMEAS -#define IPOPT_RESERVED2 0x60 - -#define IPOPT_EOL 0 /* end of option list */ -#define IPOPT_END IPOPT_EOL -#define IPOPT_NOP 1 /* no operation */ -#define IPOPT_NOOP IPOPT_NOP - -#define IPOPT_RR 7 /* record packet route */ -#define IPOPT_TS 68 /* timestamp */ -#define IPOPT_TIMESTAMP IPOPT_TS -#define IPOPT_SECURITY 130 /* provide s,c,h,tcc */ -#define IPOPT_SEC IPOPT_SECURITY -#define IPOPT_LSRR 131 /* loose source route */ -#define IPOPT_SATID 136 /* satnet id */ -#define IPOPT_SID IPOPT_SATID -#define IPOPT_SSRR 137 /* strict source route */ -#define IPOPT_RA 148 /* router alert */ - -/* - * Offsets to fields in options other than EOL and NOP. - */ -#define IPOPT_OPTVAL 0 /* option ID */ -#define IPOPT_OLEN 1 /* option length */ -#define IPOPT_OFFSET 2 /* offset within option */ -#define IPOPT_MINOFF 4 /* min value of above */ - -#define MAX_IPOPTLEN 40 - -/* flag bits for ipt_flg */ -#define IPOPT_TS_TSONLY 0 /* timestamps only */ -#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ -#define IPOPT_TS_PRESPEC 3 /* specified modules only */ - -/* bits for security (not byte swapped) */ -#define IPOPT_SECUR_UNCLASS 0x0000 -#define IPOPT_SECUR_CONFID 0xf135 -#define IPOPT_SECUR_EFTO 0x789a -#define IPOPT_SECUR_MMMM 0xbc4d -#define IPOPT_SECUR_RESTR 0xaf13 -#define IPOPT_SECUR_SECRET 0xd788 -#define IPOPT_SECUR_TOPSECRET 0x6bc5 - -/* - * Internet implementation parameters. - */ -#define MAXTTL 255 /* maximum time to live (seconds) */ -#define IPDEFTTL 64 /* default ttl, from RFC 1340 */ -#define IPFRAGTTL 60 /* time to live for frags, slowhz */ -#define IPTTLDEC 1 /* subtracted when forwarding */ - -#define IP_MSS 576 /* default maximum segment size */ - -__END_DECLS - -#endif /* netinet/ip.h */ diff --git a/sysdeps/generic/netinet/tcp.h b/sysdeps/generic/netinet/tcp.h deleted file mode 100644 index 49f1bfbc26..0000000000 --- a/sysdeps/generic/netinet/tcp.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 1982, 1986, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)tcp.h 8.1 (Berkeley) 6/10/93 - */ - -#ifndef _NETINET_TCP_H - -#define _NETINET_TCP_H 1 -#include - - -__BEGIN_DECLS - -typedef unsigned int tcp_seq; -/* - * TCP header. - * Per RFC 793, September, 1981. - */ -struct tcphdr { - unsigned short th_sport; /* source port */ - unsigned short th_dport; /* destination port */ - tcp_seq th_seq; /* sequence number */ - tcp_seq th_ack; /* acknowledgement number */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned char th_x2:4, /* (unused) */ - th_off:4; /* data offset */ -#endif -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned char th_off:4, /* data offset */ - th_x2:4; /* (unused) */ -#endif - unsigned char th_flags; -#define TH_FIN 0x01 -#define TH_SYN 0x02 -#define TH_RST 0x04 -#define TH_PUSH 0x08 -#define TH_ACK 0x10 -#define TH_URG 0x20 - unsigned short th_win; /* window */ - unsigned short th_sum; /* checksum */ - unsigned short th_urp; /* urgent pointer */ -}; - -#define TCPOPT_EOL 0 -#define TCPOPT_NOP 1 -#define TCPOPT_MAXSEG 2 -#define TCPOLEN_MAXSEG 4 -#define TCPOPT_WINDOW 3 -#define TCPOLEN_WINDOW 3 -#define TCPOPT_SACK_PERMITTED 4 /* Experimental */ -#define TCPOLEN_SACK_PERMITTED 2 -#define TCPOPT_SACK 5 /* Experimental */ -#define TCPOPT_TIMESTAMP 8 -#define TCPOLEN_TIMESTAMP 10 -#define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */ - -#define TCPOPT_TSTAMP_HDR \ - (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP) - -/* - * Default maximum segment size for TCP. - * With an IP MSS of 576, this is 536, - * but 512 is probably more convenient. - * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)). - */ -#define TCP_MSS 512 - -#define TCP_MAXWIN 65535 /* largest value for (unscaled) window */ - -#define TCP_MAX_WINSHIFT 14 /* maximum window shift */ - -/* - * User-settable options (used with setsockopt). - */ -#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */ -#define TCP_MAXSEG 0x02 /* set maximum segment size */ - -#define SOL_TCP 6 /* TCP level */ - -__END_DECLS - -#endif /* netinet/tcp.h */ diff --git a/sysdeps/generic/nfs/nfs.h b/sysdeps/generic/nfs/nfs.h deleted file mode 100644 index 89a878cea4..0000000000 --- a/sysdeps/generic/nfs/nfs.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -- ill-specified NFS-related definitions - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NFS_NFS_H -#define _NFS_NFS_H 1 - -/* This file is empty for now. Its contents do not seem to be - standardized in any way. It exists solely for the sake of - which insists on including . - - For the time being, we just provide this file here to smooth building - the libc distribution (i.e. librpcsvc). We do not install this file for - users, since we haven't really figured out what the right thing to go - here is. */ - -#endif /* nfs/nfs.h */ diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h deleted file mode 100644 index 5eabd2b31a..0000000000 --- a/sysdeps/generic/not-cancel.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Uncancelable versions of cancelable interfaces. Generic version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* By default we have none. Map the name to the normal functions. */ -#define open_not_cancel(name, flags, mode) \ - __libc_open (name, flags, mode) -#define open_not_cancel_2(name, flags) \ - __libc_open (name, flags) -#define openat_not_cancel(fd, name, flags, mode) \ - __openat (fd, name, flags, mode) -#define openat_not_cancel_3(fd, name, flags) \ - __openat (fd, name, flags, 0) -#define openat64_not_cancel(fd, name, flags, mode) \ - __openat64 (fd, name, flags, mode) -#define openat64_not_cancel_3(fd, name, flags) \ - __openat64 (fd, name, flags, 0) -#define close_not_cancel(fd) \ - __close (fd) -#define close_not_cancel_no_status(fd) \ - (void) __close (fd) -#define read_not_cancel(fd, buf, n) \ - __read (fd, buf, n) -#define write_not_cancel(fd, buf, n) \ - __write (fd, buf, n) -#define writev_not_cancel_no_status(fd, iov, n) \ - (void) __writev (fd, iov, n) -#define fcntl_not_cancel(fd, cmd, val) \ - __fcntl (fd, cmd, val) -# define waitpid_not_cancel(pid, stat_loc, options) \ - __waitpid (pid, stat_loc, options) -#define pause_not_cancel() \ - __pause () -#define nanosleep_not_cancel(requested_time, remaining) \ - __nanosleep (requested_time, remaining) -#define sigsuspend_not_cancel(set) \ - __sigsuspend (set) - -#define NO_CANCELLATION 1 diff --git a/sysdeps/generic/nscd-types.h b/sysdeps/generic/nscd-types.h deleted file mode 100644 index 1bcfdf4bca..0000000000 --- a/sysdeps/generic/nscd-types.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Types for the NSCD implementation. Generic version. - Copyright (c) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -typedef int32_t nscd_ssize_t; diff --git a/sysdeps/generic/pagecopy.h b/sysdeps/generic/pagecopy.h deleted file mode 100644 index 3ef17070c9..0000000000 --- a/sysdeps/generic/pagecopy.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Macros for copying by pages; used in memcpy, memmove. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The macro PAGE_COPY_FWD_MAYBE defined in memcopy.h is used in memmove if the - PAGE_COPY_THRESHOLD macro is set to a non-zero value. The default is 0, - that is copying by pages is not implemented. - - System-specific pagecopy.h files that want to support page copying should - define these macros: - - PAGE_COPY_THRESHOLD - -- A non-zero minimum size for which virtual copying by pages is worthwhile. - - PAGE_SIZE - -- Size of a page. - - PAGE_COPY_FWD (dstp, srcp, nbytes_left, nbytes) - -- Macro to perform the virtual copy operation. - The pointers will be aligned to PAGE_SIZE bytes. -*/ - -#define PAGE_COPY_THRESHOLD 0 diff --git a/sysdeps/generic/paths.h b/sysdeps/generic/paths.h deleted file mode 100644 index 893b4c2286..0000000000 --- a/sysdeps/generic/paths.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 1989, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)paths.h 8.1 (Berkeley) 6/2/93 - */ - -#ifndef _PATHS_H_ -#define _PATHS_H_ - -/* Default search path. */ -#define _PATH_DEFPATH "/usr/bin:/bin" -/* All standard utilities path. */ -#define _PATH_STDPATH \ - "/usr/bin:/bin:/usr/sbin:/sbin" - -#define _PATH_BSHELL "/bin/sh" -#define _PATH_CONSOLE "/dev/console" -#define _PATH_CSHELL "/bin/csh" -#define _PATH_DEVDB "/var/run/dev.db" -#define _PATH_DEVNULL "/dev/null" -#define _PATH_DRUM "/dev/drum" -#define _PATH_GSHADOW "/etc/gshadow" -#define _PATH_KMEM "/dev/kmem" -#define _PATH_LASTLOG "/var/log/lastlog" -#define _PATH_MAILDIR "/var/mail" -#define _PATH_MAN "/usr/share/man" -#define _PATH_MEM "/dev/mem" -#define _PATH_MNTTAB "/etc/fstab" -#define _PATH_MOUNTED "/var/run/mtab" -#define _PATH_NOLOGIN "/etc/nologin" -#define _PATH_PRESERVE "/var/lib" -#define _PATH_RWHODIR "/var/spool/rwho" -#define _PATH_SENDMAIL "/usr/sbin/sendmail" -#define _PATH_SHADOW "/etc/shadow" -#define _PATH_SHELLS "/etc/shells" -#define _PATH_TTY "/dev/tty" -#define _PATH_UNIX "/vmunix" -#define _PATH_UTMP "/var/run/utmp" -#define _PATH_UTMP_DB "/var/run/utmp.db" -#define _PATH_VI "/usr/bin/vi" -#define _PATH_WTMP "/var/log/wtmp" - -/* Provide trailing slash, since mostly used for building pathnames. */ -#define _PATH_DEV "/dev/" -#define _PATH_TMP "/tmp/" -#define _PATH_VARDB "/var/db/" -#define _PATH_VARRUN "/var/run/" -#define _PATH_VARTMP "/var/tmp/" - -#endif /* !_PATHS_H_ */ diff --git a/sysdeps/generic/profil-counter.h b/sysdeps/generic/profil-counter.h deleted file mode 100644 index e2fc9ffdce..0000000000 --- a/sysdeps/generic/profil-counter.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Machine-dependent SIGPROF signal handler. "Generic" version w/ sigcontext - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* In many Unix systems signal handlers are called like this - and the interrupted PC is easily findable in the `struct sigcontext'. */ - -static void -__profil_counter (int signr, int code, struct sigcontext *scp) -{ - profil_count ((void *) scp->sc_pc); -} diff --git a/sysdeps/generic/pty-private.h b/sysdeps/generic/pty-private.h deleted file mode 100644 index e667ae89b3..0000000000 --- a/sysdeps/generic/pty-private.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Internal defenitions and declarations for pseudo terminal functions. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Zack Weinberg , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _PTY_PRIVATE_H -#define _PTY_PRIVATE_H 1 - -/* The group slave pseudo terminals belong to. */ -#define TTY_GROUP "tty" - -/* The file descriptor connected to the master pseudo terminal. */ -#define PTY_FILENO 3 - -/* Path to the helper program that implements `grantpt' in user space. */ -#define _PATH_PT_CHOWN LIBEXECDIR "/pt_chown" - -/* Test whether given TTY is really a Unix98 pseudo terminal. */ -/* #define unix98_pseudo_p(Dev) ... */ - -/* Exit codes for the helper program. */ -enum /* failure modes */ -{ - FAIL_EBADF = 1, - FAIL_EINVAL, - FAIL_EACCES, - FAIL_EXEC, - FAIL_ENOMEM -}; - -#endif /* pty-private.h */ diff --git a/sysdeps/generic/register-dump.h b/sysdeps/generic/register-dump.h deleted file mode 100644 index 2af34a9295..0000000000 --- a/sysdeps/generic/register-dump.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Dump registers. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* In general we cannot do anything. */ diff --git a/sysdeps/generic/rtld-lowlevel.h b/sysdeps/generic/rtld-lowlevel.h deleted file mode 100644 index 353fad28d4..0000000000 --- a/sysdeps/generic/rtld-lowlevel.h +++ /dev/null @@ -1 +0,0 @@ -#error "Lowlevel primitives for ld.so not implemented" diff --git a/sysdeps/generic/safe-fatal.h b/sysdeps/generic/safe-fatal.h deleted file mode 100644 index 05129250c4..0000000000 --- a/sysdeps/generic/safe-fatal.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Crash the process immediately, without possibility of deadlock. Generic. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SAFE_FATAL_H -#define _SAFE_FATAL_H 1 - -#include - -static inline void -__safe_fatal (void) -{ -#ifdef ABORT_INSTRUCTION - /* This is not guaranteed to be free from the possibility of deadlock, - since it might generate a signal that can be caught. But it's better - than nothing. */ - ABORT_INSTRUCTION; -#else -# error Need an OS-specific or machine-specific safe-fatal.h -#endif -} - -#endif /* safe-fatal.h */ diff --git a/sysdeps/generic/sigcontextinfo.h b/sysdeps/generic/sigcontextinfo.h deleted file mode 100644 index d25a787d05..0000000000 --- a/sysdeps/generic/sigcontextinfo.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* In general we cannot provide any information. */ -#define SIGCONTEXT struct sigcontext * -#define SIGCONTEXT_EXTRA_ARGS -#define GET_PC(ctx) ((void *) 0) -#define GET_FRAME(ctx) ((void *) 0) -#define GET_STACK(ctx) ((void *) 0) -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff --git a/sysdeps/generic/siglist.h b/sysdeps/generic/siglist.h deleted file mode 100644 index dd72929ed5..0000000000 --- a/sysdeps/generic/siglist.h +++ /dev/null @@ -1,76 +0,0 @@ -/* Canonical list of all signal names. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file should be usable for any platform, since it just associates - the SIG* macros with text names and descriptions. The actual values - come from (via ). For any signal macros do not - exist on every platform, we can use #ifdef tests here and still use - this single common file for all platforms. */ - -/* This file is included multiple times. */ - -/* Standard signals */ - init_sig (SIGHUP, "HUP", N_("Hangup")) - init_sig (SIGINT, "INT", N_("Interrupt")) - init_sig (SIGQUIT, "QUIT", N_("Quit")) - init_sig (SIGILL, "ILL", N_("Illegal instruction")) - init_sig (SIGTRAP, "TRAP", N_("Trace/breakpoint trap")) - init_sig (SIGABRT, "ABRT", N_("Aborted")) - init_sig (SIGFPE, "FPE", N_("Floating point exception")) - init_sig (SIGKILL, "KILL", N_("Killed")) - init_sig (SIGBUS, "BUS", N_("Bus error")) - init_sig (SIGSEGV, "SEGV", N_("Segmentation fault")) - init_sig (SIGPIPE, "PIPE", N_("Broken pipe")) - init_sig (SIGALRM, "ALRM", N_("Alarm clock")) - init_sig (SIGTERM, "TERM", N_("Terminated")) - init_sig (SIGURG, "URG", N_("Urgent I/O condition")) - init_sig (SIGSTOP, "STOP", N_("Stopped (signal)")) - init_sig (SIGTSTP, "TSTP", N_("Stopped")) - init_sig (SIGCONT, "CONT", N_("Continued")) - init_sig (SIGCHLD, "CHLD", N_("Child exited")) - init_sig (SIGTTIN, "TTIN", N_("Stopped (tty input)")) - init_sig (SIGTTOU, "TTOU", N_("Stopped (tty output)")) - init_sig (SIGIO, "IO", N_("I/O possible")) - init_sig (SIGXCPU, "XCPU", N_("CPU time limit exceeded")) - init_sig (SIGXFSZ, "XFSZ", N_("File size limit exceeded")) - init_sig (SIGVTALRM, "VTALRM", N_("Virtual timer expired")) - init_sig (SIGPROF, "PROF", N_("Profiling timer expired")) - init_sig (SIGUSR1, "USR1", N_("User defined signal 1")) - init_sig (SIGUSR2, "USR2", N_("User defined signal 2")) - -/* Variations */ -#ifdef SIGEMT - init_sig (SIGEMT, "EMT", N_("EMT trap")) -#endif -#ifdef SIGSYS - init_sig (SIGSYS, "SYS", N_("Bad system call")) -#endif -#ifdef SIGSTKFLT - init_sig (SIGSTKFLT, "STKFLT", N_("Stack fault")) -#endif -#ifdef SIGINFO - init_sig (SIGINFO, "INFO", N_("Information request")) -#elif defined(SIGPWR) && (!defined(SIGLOST) || (SIGPWR != SIGLOST)) - init_sig (SIGPWR, "PWR", N_("Power failure")) -#endif -#ifdef SIGLOST - init_sig (SIGLOST, "LOST", N_("Resource lost")) -#endif -#ifdef SIGWINCH - init_sig (SIGWINCH, "WINCH", N_("Window changed")) -#endif diff --git a/sysdeps/generic/sigset-cvt-mask.h b/sysdeps/generic/sigset-cvt-mask.h deleted file mode 100644 index b73bc64028..0000000000 --- a/sysdeps/generic/sigset-cvt-mask.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Convert between lowlevel sigmask and libc representation of sigset_t. - Generic version. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Joe Keane . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Convert between an old-style 32-bit signal mask and a POSIX sigset_t. */ - -/* Perform *SET = MASK. Unused bits of *SET are set to 0. - Returns zero for success or -1 for errors (from sigaddset/sigemptyset). */ -static inline int __attribute__ ((unused)) -sigset_set_old_mask (sigset_t *set, int mask) -{ - if (sizeof (__sigset_t) == sizeof (unsigned int)) - *set = (unsigned int) mask; - else - { - unsigned int __sig; - - if (__sigemptyset (set) < 0) - return -1; - - for (__sig = 1; __sig < NSIG && __sig <= sizeof (mask) * 8; __sig++) - if (mask & sigmask (__sig)) - if (__sigaddset (set, __sig) < 0) - return -1; - } - return 0; -} - -/* Return the sigmask corresponding to *SET. - Unused bits of *SET are thrown away. */ -static inline int __attribute__ ((unused)) -sigset_get_old_mask (const sigset_t *set) -{ - if (sizeof (sigset_t) == sizeof (unsigned int)) - return (unsigned int) *set; - else - { - unsigned int mask = 0; - unsigned int sig; - - for (sig = 1; sig < NSIG && sig <= sizeof (mask) * 8; sig++) - if (__sigismember (set, sig)) - mask |= sigmask (sig); - - return mask; - } -} diff --git a/sysdeps/generic/sigsetops.h b/sysdeps/generic/sigsetops.h deleted file mode 100644 index e8e5553981..0000000000 --- a/sysdeps/generic/sigsetops.h +++ /dev/null @@ -1,77 +0,0 @@ -/* __sigset_t manipulators. Generic/BSD version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SIGSETOPS_H -#define _SIGSETOPS_H 1 - -#include - -/* Return a mask that includes SIG only. The cast to `sigset_t' avoids - overflow if `sigset_t' is wider than `int'. */ -# define __sigmask(sig) (((__sigset_t) 1) << ((sig) - 1)) - -#define __sigemptyset(set) \ - (__extension__ ({ \ - *(set) = (__sigset_t) 0; \ - (void)0; \ - })) -#define __sigfillset(set) \ - (__extension__ ({ \ - *(set) = ~(__sigset_t) 0; \ - (void)0; \ - })) - -# define __sigisemptyset(set) \ - (*(set) == (__sigset_t) 0) - -# define __sigandset(dest, left, right) \ - (__extension__ ({ \ - *(dest) = *(left) & *(right); \ - (void)0; \ - })) - -# define __sigorset(dest, left, right) \ - (__extension__ ({ \ - *(dest) = *(left) | *(right); \ - (void)0; \ - })) -#endif - -/* These macros needn't check for a bogus signal number; - checking is done in the non-__ versions. */ -# define __sigismember(set, sig) \ - (__extension__ ({ \ - __sigset_t __mask = __sigmask (sig); \ - (set) & __mask ? 1 : 0; \ - })) - -# define __sigaddset(set, sig) \ - (__extension__ ({ \ - __sigset_t __mask = __sigmask (sig); \ - (set) |= __mask; \ - (void)0; \ - })) - -# define __sigdelset(set, sig) \ - (__extension__ ({ \ - __sigset_t __mask = __sigmask (sig); \ - (set) &= ~__mask; \ - (void)0; \ - })) - -#endif diff --git a/sysdeps/generic/stackguard-macros.h b/sysdeps/generic/stackguard-macros.h deleted file mode 100644 index b4a6b23ff8..0000000000 --- a/sysdeps/generic/stackguard-macros.h +++ /dev/null @@ -1,12 +0,0 @@ -#include - -extern uintptr_t __stack_chk_guard; -#define STACK_CHK_GUARD __stack_chk_guard - -#ifdef PTRGUARD_LOCAL -extern uintptr_t __pointer_chk_guard_local; -# define POINTER_CHK_GUARD __pointer_chk_guard_local -#else -extern uintptr_t __pointer_chk_guard; -# define POINTER_CHK_GUARD __pointer_chk_guard -#endif diff --git a/sysdeps/generic/stackinfo.h b/sysdeps/generic/stackinfo.h deleted file mode 100644 index 718c74582a..0000000000 --- a/sysdeps/generic/stackinfo.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. Since there is no general truth we can't say - anything here. */ diff --git a/sysdeps/generic/stdint.h b/sysdeps/generic/stdint.h deleted file mode 100644 index b553c52665..0000000000 --- a/sysdeps/generic/stdint.h +++ /dev/null @@ -1,329 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * ISO C99: 7.18 Integer types - */ - -#ifndef _STDINT_H -#define _STDINT_H 1 - -#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION -#include -#include -#include -#include - -/* Exact integral types. */ - -/* Signed. */ -#include - -/* Unsigned. */ -#include - - -/* Small types. */ - -/* Signed. */ -typedef signed char int_least8_t; -typedef short int int_least16_t; -typedef int int_least32_t; -#if __WORDSIZE == 64 -typedef long int int_least64_t; -#else -__extension__ -typedef long long int int_least64_t; -#endif - -/* Unsigned. */ -typedef unsigned char uint_least8_t; -typedef unsigned short int uint_least16_t; -typedef unsigned int uint_least32_t; -#if __WORDSIZE == 64 -typedef unsigned long int uint_least64_t; -#else -__extension__ -typedef unsigned long long int uint_least64_t; -#endif - - -/* Fast types. */ - -/* Signed. */ -typedef signed char int_fast8_t; -#if __WORDSIZE == 64 -typedef long int int_fast16_t; -typedef long int int_fast32_t; -typedef long int int_fast64_t; -#else -typedef int int_fast16_t; -typedef int int_fast32_t; -__extension__ -typedef long long int int_fast64_t; -#endif - -/* Unsigned. */ -typedef unsigned char uint_fast8_t; -#if __WORDSIZE == 64 -typedef unsigned long int uint_fast16_t; -typedef unsigned long int uint_fast32_t; -typedef unsigned long int uint_fast64_t; -#else -typedef unsigned int uint_fast16_t; -typedef unsigned int uint_fast32_t; -__extension__ -typedef unsigned long long int uint_fast64_t; -#endif - - -/* Types for `void *' pointers. */ -#if __WORDSIZE == 64 -# ifndef __intptr_t_defined -typedef long int intptr_t; -# define __intptr_t_defined -# endif -typedef unsigned long int uintptr_t; -#else -# ifndef __intptr_t_defined -typedef int intptr_t; -# define __intptr_t_defined -# endif -typedef unsigned int uintptr_t; -#endif - - -/* Largest integral types. */ -typedef __intmax_t intmax_t; -typedef __uintmax_t uintmax_t; - - -# if __WORDSIZE == 64 -# define __INT64_C(c) c ## L -# define __UINT64_C(c) c ## UL -# else -# define __INT64_C(c) c ## LL -# define __UINT64_C(c) c ## ULL -# endif - -/* Limits of integral types. */ - -/* Minimum of signed integral types. */ -# define INT8_MIN (-128) -# define INT16_MIN (-32767-1) -# define INT32_MIN (-2147483647-1) -# define INT64_MIN (-__INT64_C(9223372036854775807)-1) -/* Maximum of signed integral types. */ -# define INT8_MAX (127) -# define INT16_MAX (32767) -# define INT32_MAX (2147483647) -# define INT64_MAX (__INT64_C(9223372036854775807)) - -/* Maximum of unsigned integral types. */ -# define UINT8_MAX (255) -# define UINT16_MAX (65535) -# define UINT32_MAX (4294967295U) -# define UINT64_MAX (__UINT64_C(18446744073709551615)) - - -/* Minimum of signed integral types having a minimum size. */ -# define INT_LEAST8_MIN (-128) -# define INT_LEAST16_MIN (-32767-1) -# define INT_LEAST32_MIN (-2147483647-1) -# define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1) -/* Maximum of signed integral types having a minimum size. */ -# define INT_LEAST8_MAX (127) -# define INT_LEAST16_MAX (32767) -# define INT_LEAST32_MAX (2147483647) -# define INT_LEAST64_MAX (__INT64_C(9223372036854775807)) - -/* Maximum of unsigned integral types having a minimum size. */ -# define UINT_LEAST8_MAX (255) -# define UINT_LEAST16_MAX (65535) -# define UINT_LEAST32_MAX (4294967295U) -# define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615)) - - -/* Minimum of fast signed integral types having a minimum size. */ -# define INT_FAST8_MIN (-128) -# if __WORDSIZE == 64 -# define INT_FAST16_MIN (-9223372036854775807L-1) -# define INT_FAST32_MIN (-9223372036854775807L-1) -# else -# define INT_FAST16_MIN (-2147483647-1) -# define INT_FAST32_MIN (-2147483647-1) -# endif -# define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1) -/* Maximum of fast signed integral types having a minimum size. */ -# define INT_FAST8_MAX (127) -# if __WORDSIZE == 64 -# define INT_FAST16_MAX (9223372036854775807L) -# define INT_FAST32_MAX (9223372036854775807L) -# else -# define INT_FAST16_MAX (2147483647) -# define INT_FAST32_MAX (2147483647) -# endif -# define INT_FAST64_MAX (__INT64_C(9223372036854775807)) - -/* Maximum of fast unsigned integral types having a minimum size. */ -# define UINT_FAST8_MAX (255) -# if __WORDSIZE == 64 -# define UINT_FAST16_MAX (18446744073709551615UL) -# define UINT_FAST32_MAX (18446744073709551615UL) -# else -# define UINT_FAST16_MAX (4294967295U) -# define UINT_FAST32_MAX (4294967295U) -# endif -# define UINT_FAST64_MAX (__UINT64_C(18446744073709551615)) - - -/* Values to test for integral types holding `void *' pointer. */ -# if __WORDSIZE == 64 -# define INTPTR_MIN (-9223372036854775807L-1) -# define INTPTR_MAX (9223372036854775807L) -# define UINTPTR_MAX (18446744073709551615UL) -# else -# define INTPTR_MIN (-2147483647-1) -# define INTPTR_MAX (2147483647) -# define UINTPTR_MAX (4294967295U) -# endif - - -/* Minimum for largest signed integral type. */ -# define INTMAX_MIN (-__INT64_C(9223372036854775807)-1) -/* Maximum for largest signed integral type. */ -# define INTMAX_MAX (__INT64_C(9223372036854775807)) - -/* Maximum for largest unsigned integral type. */ -# define UINTMAX_MAX (__UINT64_C(18446744073709551615)) - - -/* Limits of other integer types. */ - -/* Limits of `ptrdiff_t' type. */ -# if __WORDSIZE == 64 -# define PTRDIFF_MIN (-9223372036854775807L-1) -# define PTRDIFF_MAX (9223372036854775807L) -# else -# if __WORDSIZE32_PTRDIFF_LONG -# define PTRDIFF_MIN (-2147483647L-1) -# define PTRDIFF_MAX (2147483647L) -# else -# define PTRDIFF_MIN (-2147483647-1) -# define PTRDIFF_MAX (2147483647) -# endif -# endif - -/* Limits of `sig_atomic_t'. */ -# define SIG_ATOMIC_MIN (-2147483647-1) -# define SIG_ATOMIC_MAX (2147483647) - -/* Limit of `size_t' type. */ -# if __WORDSIZE == 64 -# define SIZE_MAX (18446744073709551615UL) -# else -# if __WORDSIZE32_SIZE_ULONG -# define SIZE_MAX (4294967295UL) -# else -# define SIZE_MAX (4294967295U) -# endif -# endif - -/* Limits of `wchar_t'. */ -# ifndef WCHAR_MIN -/* These constants might also be defined in . */ -# define WCHAR_MIN __WCHAR_MIN -# define WCHAR_MAX __WCHAR_MAX -# endif - -/* Limits of `wint_t'. */ -# define WINT_MIN (0u) -# define WINT_MAX (4294967295u) - -/* Signed. */ -# define INT8_C(c) c -# define INT16_C(c) c -# define INT32_C(c) c -# if __WORDSIZE == 64 -# define INT64_C(c) c ## L -# else -# define INT64_C(c) c ## LL -# endif - -/* Unsigned. */ -# define UINT8_C(c) c -# define UINT16_C(c) c -# define UINT32_C(c) c ## U -# if __WORDSIZE == 64 -# define UINT64_C(c) c ## UL -# else -# define UINT64_C(c) c ## ULL -# endif - -/* Maximal type. */ -# if __WORDSIZE == 64 -# define INTMAX_C(c) c ## L -# define UINTMAX_C(c) c ## UL -# else -# define INTMAX_C(c) c ## LL -# define UINTMAX_C(c) c ## ULL -# endif - -#if __GLIBC_USE (IEC_60559_BFP_EXT) - -# define INT8_WIDTH 8 -# define UINT8_WIDTH 8 -# define INT16_WIDTH 16 -# define UINT16_WIDTH 16 -# define INT32_WIDTH 32 -# define UINT32_WIDTH 32 -# define INT64_WIDTH 64 -# define UINT64_WIDTH 64 - -# define INT_LEAST8_WIDTH 8 -# define UINT_LEAST8_WIDTH 8 -# define INT_LEAST16_WIDTH 16 -# define UINT_LEAST16_WIDTH 16 -# define INT_LEAST32_WIDTH 32 -# define UINT_LEAST32_WIDTH 32 -# define INT_LEAST64_WIDTH 64 -# define UINT_LEAST64_WIDTH 64 - -# define INT_FAST8_WIDTH 8 -# define UINT_FAST8_WIDTH 8 -# define INT_FAST16_WIDTH __WORDSIZE -# define UINT_FAST16_WIDTH __WORDSIZE -# define INT_FAST32_WIDTH __WORDSIZE -# define UINT_FAST32_WIDTH __WORDSIZE -# define INT_FAST64_WIDTH 64 -# define UINT_FAST64_WIDTH 64 - -# define INTPTR_WIDTH __WORDSIZE -# define UINTPTR_WIDTH __WORDSIZE - -# define INTMAX_WIDTH 64 -# define UINTMAX_WIDTH 64 - -# define PTRDIFF_WIDTH __WORDSIZE -# define SIG_ATOMIC_WIDTH 32 -# define SIZE_WIDTH __WORDSIZE -# define WCHAR_WIDTH 32 -# define WINT_WIDTH 32 - -#endif - -#endif /* stdint.h */ diff --git a/sysdeps/generic/stdio-lock.h b/sysdeps/generic/stdio-lock.h deleted file mode 100644 index 763c7d465a..0000000000 --- a/sysdeps/generic/stdio-lock.h +++ /dev/null @@ -1,71 +0,0 @@ -/* Thread package specific definitions of stream lock type. Generic version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _STDIO_LOCK_H -#define _STDIO_LOCK_H 1 - -#include - -__libc_lock_define_recursive (typedef, _IO_lock_t) -#define _IO_lock_t_defined 1 - -/* We need recursive (counting) mutexes. */ -#ifdef _LIBC_LOCK_RECURSIVE_INITIALIZER -# define _IO_lock_initializer _LIBC_LOCK_RECURSIVE_INITIALIZER -#elif _IO_MTSAFE_IO - #error libio needs recursive mutexes for _IO_MTSAFE_IO -#endif - -#define _IO_lock_init(_name) __libc_lock_init_recursive (_name) -#define _IO_lock_fini(_name) __libc_lock_fini_recursive (_name) -#define _IO_lock_lock(_name) __libc_lock_lock_recursive (_name) -#define _IO_lock_trylock(_name) __libc_lock_trylock_recursive (_name) -#define _IO_lock_unlock(_name) __libc_lock_unlock_recursive (_name) - - -#define _IO_cleanup_region_start(_fct, _fp) \ - __libc_cleanup_region_start (((_fp)->_flags & _IO_USER_LOCK) == 0, _fct, _fp) -#define _IO_cleanup_region_start_noarg(_fct) \ - __libc_cleanup_region_start (1, _fct, NULL) -#define _IO_cleanup_region_end(_doit) \ - __libc_cleanup_region_end (_doit) - -#if defined _LIBC && IS_IN (libc) - -# ifdef __EXCEPTIONS -# define _IO_acquire_lock(_fp) \ - do { \ - _IO_FILE *_IO_acquire_lock_file \ - __attribute__((cleanup (_IO_acquire_lock_fct))) \ - = (_fp); \ - _IO_flockfile (_IO_acquire_lock_file); -# define _IO_acquire_lock_clear_flags2(_fp) \ - do { \ - _IO_FILE *_IO_acquire_lock_file \ - __attribute__((cleanup (_IO_acquire_lock_clear_flags2_fct))) \ - = (_fp); \ - _IO_flockfile (_IO_acquire_lock_file); -# else -# define _IO_acquire_lock(_fp) _IO_acquire_lock_needs_exceptions_enabled -# define _IO_acquire_lock_clear_flags2(_fp) _IO_acquire_lock (_fp) -# endif -# define _IO_release_lock(_fp) ; } while (0) - -#endif - -#endif /* stdio-lock.h */ diff --git a/sysdeps/generic/string_private.h b/sysdeps/generic/string_private.h deleted file mode 100644 index e117a590f1..0000000000 --- a/sysdeps/generic/string_private.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Define _STRING_ARCH_unaligned. Generic version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define to 1 if architecture can access unaligned multi-byte - variables. */ -#define _STRING_ARCH_unaligned 0 diff --git a/sysdeps/generic/symbol-hacks.h b/sysdeps/generic/symbol-hacks.h deleted file mode 100644 index d614c099c9..0000000000 --- a/sysdeps/generic/symbol-hacks.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Some compiler optimizations may transform loops into memset/memmove - calls and without proper declaration it may generate PLT calls. */ -#if !defined __ASSEMBLER__ && IS_IN (libc) && defined SHARED -asm ("memmove = __GI_memmove"); -asm ("memset = __GI_memset"); -asm ("memcpy = __GI_memcpy"); - -/* Some targets do not use __stack_chk_fail_local. In libc.so, - redirect __stack_chk_fail to a hidden reference - __stack_chk_fail_local, to avoid the PLT reference. - __stack_chk_fail itself is a global symbol, exported from libc.so, - and cannot be made hidden. */ - -# if IS_IN (libc) && defined SHARED && \ - defined STACK_PROTECTOR_LEVEL && STACK_PROTECTOR_LEVEL > 0 -asm (".hidden __stack_chk_fail_local\n" - "__stack_chk_fail = __stack_chk_fail_local"); -# endif -#endif diff --git a/sysdeps/generic/sys/ptrace.h b/sysdeps/generic/sys/ptrace.h deleted file mode 100644 index 2b5ce4d74d..0000000000 --- a/sysdeps/generic/sys/ptrace.h +++ /dev/null @@ -1,137 +0,0 @@ -/* `ptrace' debugger support interface. Generic version; constants are common. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _PTRACE_H - -#define _PTRACE_H 1 -#include - -__BEGIN_DECLS - - -/* Type of the REQUEST argument to `ptrace.' */ -enum __ptrace_request -{ - /* Indicate that the process making this request should be traced. - All signals received by this process can be intercepted by its - parent, and its parent can use the other `ptrace' requests. */ - PTRACE_TRACEME = 0, -#define PT_TRACE_ME PTRACE_TRACEME - - /* Return the word in the process's text space at address ADDR. */ - PTRACE_PEEKTEXT, -#define PT_READ_I PTRACE_PEEKTEXT - - /* Return the word in the process's data space at address ADDR. */ - PTRACE_PEEKDATA, -#define PT_READ_D PTRACE_PEEKDATA - - /* Return the word in the process's user area at offset ADDR. */ - PTRACE_PEEKUSER, -#define PT_READ_U PTRACE_PEEKUSER - - /* Write the word DATA into the process's text space at address ADDR. */ - PTRACE_POKETEXT, -#define PT_WRITE_I PTRACE_POKETEXT - - /* Write the word DATA into the process's data space at address ADDR. */ - PTRACE_POKEDATA, -#define PT_WRITE_D PTRACE_POKEDATA - - /* Write the word DATA into the process's user space at offset ADDR. */ - PTRACE_POKEUSER, -#define PT_WRITE_U PTRACE_POKEUSER - - /* Continue the process. */ - PTRACE_CONT, -#define PT_CONTINUE PTRACE_CONT - - /* Kill the process. */ - PTRACE_KILL, -#define PT_KILL PTRACE_KILL - - /* Single step the process. - This is not supported on all machines. */ - PTRACE_SINGLESTEP, -#define PT_STEP PTRACE_SINGLESTEP - - /* Attach to a process that is already running. */ - PTRACE_ATTACH, -#define PT_ATTACH PTRACE_ATTACH - - /* Detach from a process attached to with PTRACE_ATTACH. */ - PTRACE_DETACH, -#define PT_DETACH PTRACE_DETACH - - /* Get the process's registers (not including floating-point registers) - and put them in the `struct regs' (see ) at ADDR. */ - PTRACE_GETREGS = 12, - - /* Set the process's registers (not including floating-point registers) - to the contents of the `struct regs' (see ) at ADDR. */ - PTRACE_SETREGS, - - /* Get the process's floating point registers and put them - in the `struct fp_status' (see ) at ADDR. */ - PTRACE_GETFPREGS = 14, - - /* Set the process's floating point registers to the contents - of the `struct fp_status' (see ) at ADDR. */ - PTRACE_SETFPREGS, - - /* Read DATA bytes from the process's data space at address ADDR. - Put the result starting at address ADDR2 in the caller's - address space. */ - PTRACE_READDATA = 16, - - /* Write DATA bytes from ADDR2 in the caller's address space into - the process's data space at address ADDR. */ - PTRACE_WRITEDATA, - - /* Read DATA bytes from the process's text space at address ADDR. - Put the result starting at address ADDR2 in the caller's - address space. */ - PTRACE_READTEXT = 18, - - /* Write DATA bytes from ADDR2 in the caller's address space into - the process's text space at address ADDR. */ - PTRACE_WRITETEXT, - - /* Read the floating-point accelerator unit registers and - put them into the `struct fpa_regs' (see ) at ADDR. */ - PTRACE_GETFPAREGS = 20, - - /* Write the floating-point accelerator unit registers from - the contents of the `struct fpa_regs' at ADDR. */ - PTRACE_SETFPAREGS -}; - -/* Perform process tracing functions. REQUEST is one of the values - above, and determines the action to be taken. - For all requests except PTRACE_TRACEME, PID specifies the process to be - traced. - - PID and the other arguments described above for the various requests should - appear (those that are used for the particular request) as: - pid_t PID, void *ADDR, int DATA, void *ADDR2 - after REQUEST. */ -extern int ptrace (enum __ptrace_request __request, ...); - -__END_DECLS - -#endif /* ptrace.h */ diff --git a/sysdeps/generic/sys/reboot.h b/sysdeps/generic/sys/reboot.h deleted file mode 100644 index bada28dd6c..0000000000 --- a/sysdeps/generic/sys/reboot.h +++ /dev/null @@ -1,9 +0,0 @@ -/* This file should define RB_* macros to be used as flag - bits in the argument to the `reboot' system call. */ - -#ifndef _SYS_REBOOT_H -#define _SYS_REBOOT_H - -#define RB_AUTOBOOT 0 - -#endif /* */ diff --git a/sysdeps/generic/sys/socketvar.h b/sysdeps/generic/sys/socketvar.h deleted file mode 100644 index b177158d0b..0000000000 --- a/sysdeps/generic/sys/socketvar.h +++ /dev/null @@ -1,3 +0,0 @@ -/* This header is used on many systems but for GNU we have everything - already defined in the standard header. */ -#include diff --git a/sysdeps/generic/sys/swap.h b/sysdeps/generic/sys/swap.h deleted file mode 100644 index f86df4a607..0000000000 --- a/sysdeps/generic/sys/swap.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Calls to enable and disable swapping on specified locations. Unix version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __SYS_SWAP_H - -#define __SYS_SWAP_H 1 -#include - - -/* Make the block special device PATH available to the system for swapping. - This call is restricted to the super-user. */ -extern int swapon (const char *__path, int __flags) __THROW; - -/* Stop using block special device PATH for swapping. */ -extern int swapoff (const char *__path) __THROW; - -#endif /* sys/swap.h */ diff --git a/sysdeps/generic/sys/syscall.h b/sysdeps/generic/sys/syscall.h deleted file mode 100644 index 719bd08904..0000000000 --- a/sysdeps/generic/sys/syscall.h +++ /dev/null @@ -1,2 +0,0 @@ -/* For Unix-like systems, this file should contain definitions - of macros SYS_call for each system call, giving the call numbers. */ diff --git a/sysdeps/generic/sys/sysinfo.h b/sysdeps/generic/sys/sysinfo.h deleted file mode 100644 index 279493de7e..0000000000 --- a/sysdeps/generic/sys/sysinfo.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SYSINFO_H -#define _SYS_SYSINFO_H 1 - -#include - -__BEGIN_DECLS - -/* Return number of configured processors. */ -extern int get_nprocs_conf (void) __THROW; - -/* Return number of available processors. */ -extern int get_nprocs (void) __THROW; - - -/* Return number of physical pages of memory in the system. */ -extern long int get_phys_pages (void) __THROW; - -/* Return number of available physical pages of memory in the system. */ -extern long int get_avphys_pages (void) __THROW; - -__END_DECLS - -#endif /* sys/sysinfo.h */ diff --git a/sysdeps/generic/sys/ttydefaults.h b/sysdeps/generic/sys/ttydefaults.h deleted file mode 100644 index 683dc8d805..0000000000 --- a/sysdeps/generic/sys/ttydefaults.h +++ /dev/null @@ -1,100 +0,0 @@ -/*- - * Copyright (c) 1982, 1986, 1993 - * The Regents of the University of California. All rights reserved. - * (c) UNIX System Laboratories, Inc. - * All or some portions of this file are derived from material licensed - * to the University of California by American Telephone and Telegraph - * Co. or Unix System Laboratories, Inc. and are reproduced herein with - * the permission of UNIX System Laboratories, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)ttydefaults.h 8.4 (Berkeley) 1/21/94 - */ - -/* - * System wide defaults for terminal state. 4.4 BSD/generic GNU version. - */ -#ifndef _SYS_TTYDEFAULTS_H_ -#define _SYS_TTYDEFAULTS_H_ - -/* - * Defaults on "first" open. - */ -#define TTYDEF_IFLAG (BRKINT | ISTRIP | ICRNL | IMAXBEL | IXON | IXANY) -#define TTYDEF_OFLAG (OPOST | ONLCR | OXTABS) -#define TTYDEF_LFLAG (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL) -#define TTYDEF_CFLAG (CREAD | CS7 | PARENB | HUPCL) -#define TTYDEF_SPEED (B9600) - -/* - * Control Character Defaults - */ -#define CTRL(x) (x&037) -#define CEOF CTRL('d') -#ifdef _POSIX_VDISABLE -# define CEOL _POSIX_VDISABLE -#else -# define CEOL ((unsigned char)'\377') /* XXX avoid _POSIX_VDISABLE */ -#endif -#define CERASE 0177 -#define CINTR CTRL('c') -#ifdef _POSIX_VDISABLE -# define CSTATUS _POSIX_VDISABLE -#else -# define CSTATUS ((unsigned char)'\377') /* XXX avoid _POSIX_VDISABLE */ -#endif -#define CKILL CTRL('u') -#define CMIN 1 -#define CQUIT 034 /* FS, ^\ */ -#define CSUSP CTRL('z') -#define CTIME 0 -#define CDSUSP CTRL('y') -#define CSTART CTRL('q') -#define CSTOP CTRL('s') -#define CLNEXT CTRL('v') -#define CDISCARD CTRL('o') -#define CWERASE CTRL('w') -#define CREPRINT CTRL('r') -#define CEOT CEOF -/* compat */ -#define CBRK CEOL -#define CRPRNT CREPRINT -#define CFLUSH CDISCARD - -/* PROTECTED INCLUSION ENDS HERE */ -#endif /* !_SYS_TTYDEFAULTS_H_ */ - -/* - * #define TTYDEFCHARS to include an array of default control characters. - */ -#ifdef TTYDEFCHARS -cc_t ttydefchars[NCCS] = { - CEOF, CEOL, CEOL, CERASE, CWERASE, CKILL, CREPRINT, - _POSIX_VDISABLE, CINTR, CQUIT, CSUSP, CDSUSP, CSTART, CSTOP, CLNEXT, - CDISCARD, CMIN, CTIME, CSTATUS, _POSIX_VDISABLE -}; -#undef TTYDEFCHARS -#endif diff --git a/sysdeps/generic/sys/ucontext.h b/sysdeps/generic/sys/ucontext.h deleted file mode 100644 index a64460c9ae..0000000000 --- a/sysdeps/generic/sys/ucontext.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Data structures for user-level context switching. Generic version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file's definitions suffice for any platform where all - the machine-specific state is described in `struct sigcontext'. */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - - -typedef struct sigcontext mcontext_t; - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - sigset_t uc_sigmask; - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/generic/sysdep-cancel.h b/sysdeps/generic/sysdep-cancel.h deleted file mode 100644 index ba6a1e04ba..0000000000 --- a/sysdeps/generic/sysdep-cancel.h +++ /dev/null @@ -1,8 +0,0 @@ -#include - -/* No multi-thread handling enabled. */ -#define SINGLE_THREAD_P (1) -#define RTLD_SINGLE_THREAD_P (1) -#define LIBC_CANCEL_ASYNC() 0 /* Just a dummy value. */ -#define LIBC_CANCEL_RESET(val) ((void)(val)) /* Nothing, but evaluate it. */ -#define LIBC_CANCEL_HANDLED() /* Nothing. */ diff --git a/sysdeps/generic/sysdep.h b/sysdeps/generic/sysdep.h deleted file mode 100644 index dfb34e3a3f..0000000000 --- a/sysdeps/generic/sysdep.h +++ /dev/null @@ -1,97 +0,0 @@ -/* Generic asm macros used on many machines. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef C_LABEL - -/* Define a macro we can use to construct the asm name for a C symbol. */ -# define C_LABEL(name) name##: - -#endif - -#ifdef __ASSEMBLER__ -/* Mark the end of function named SYM. This is used on some platforms - to generate correct debugging information. */ -# ifndef END -# define END(sym) -# endif - -# ifndef JUMPTARGET -# define JUMPTARGET(sym) sym -# endif -#endif - -/* Makros to generate eh_frame unwind information. */ -#ifdef __ASSEMBLER__ -# define cfi_startproc .cfi_startproc -# define cfi_endproc .cfi_endproc -# define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off -# define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg -# define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off -# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off -# define cfi_offset(reg, off) .cfi_offset reg, off -# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off -# define cfi_register(r1, r2) .cfi_register r1, r2 -# define cfi_return_column(reg) .cfi_return_column reg -# define cfi_restore(reg) .cfi_restore reg -# define cfi_same_value(reg) .cfi_same_value reg -# define cfi_undefined(reg) .cfi_undefined reg -# define cfi_remember_state .cfi_remember_state -# define cfi_restore_state .cfi_restore_state -# define cfi_window_save .cfi_window_save -# define cfi_personality(enc, exp) .cfi_personality enc, exp -# define cfi_lsda(enc, exp) .cfi_lsda enc, exp - -#else /* ! ASSEMBLER */ - -# define CFI_STRINGIFY(Name) CFI_STRINGIFY2 (Name) -# define CFI_STRINGIFY2(Name) #Name -# define CFI_STARTPROC ".cfi_startproc" -# define CFI_ENDPROC ".cfi_endproc" -# define CFI_DEF_CFA(reg, off) \ - ".cfi_def_cfa " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off) -# define CFI_DEF_CFA_REGISTER(reg) \ - ".cfi_def_cfa_register " CFI_STRINGIFY(reg) -# define CFI_DEF_CFA_OFFSET(off) \ - ".cfi_def_cfa_offset " CFI_STRINGIFY(off) -# define CFI_ADJUST_CFA_OFFSET(off) \ - ".cfi_adjust_cfa_offset " CFI_STRINGIFY(off) -# define CFI_OFFSET(reg, off) \ - ".cfi_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off) -# define CFI_REL_OFFSET(reg, off) \ - ".cfi_rel_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off) -# define CFI_REGISTER(r1, r2) \ - ".cfi_register " CFI_STRINGIFY(r1) "," CFI_STRINGIFY(r2) -# define CFI_RETURN_COLUMN(reg) \ - ".cfi_return_column " CFI_STRINGIFY(reg) -# define CFI_RESTORE(reg) \ - ".cfi_restore " CFI_STRINGIFY(reg) -# define CFI_UNDEFINED(reg) \ - ".cfi_undefined " CFI_STRINGIFY(reg) -# define CFI_REMEMBER_STATE \ - ".cfi_remember_state" -# define CFI_RESTORE_STATE \ - ".cfi_restore_state" -# define CFI_WINDOW_SAVE \ - ".cfi_window_save" -# define CFI_PERSONALITY(enc, exp) \ - ".cfi_personality " CFI_STRINGIFY(enc) "," CFI_STRINGIFY(exp) -# define CFI_LSDA(enc, exp) \ - ".cfi_lsda " CFI_STRINGIFY(enc) "," CFI_STRINGIFY(exp) -#endif - -#include "dwarf2.h" diff --git a/sysdeps/generic/thread_state.h b/sysdeps/generic/thread_state.h deleted file mode 100644 index ca579ee493..0000000000 --- a/sysdeps/generic/thread_state.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Mach thread state definitions for machine-independent code. Stub version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Everything else is called `thread_state', but CMU's header file is - called `thread_status'. Oh boy. */ -#include - -/* Replace with "i386" or "mips" or whatever. */ - -#define MACHINE_THREAD_STATE_FLAVOR _THREAD_STATE -#define MACHINE_THREAD_STATE_COUNT _THREAD_STATE_COUNT - -#define machine_thread_state _thread_state - -/* Define these to the member names in `struct _thread_state' - for the PC and stack pointer. */ -#define PC ? -#define SP ? - -/* This structure should contain all of the different flavors of thread - state structures which are meaningful for this machine. Every machine's - definition of this structure should have a member `int set' which is a - bit mask (1 << FLAVOR) of the flavors of thread state in the structure - which are filled in; and a member `struct machine_thread_state basic'. - On some machines those are the only members (e.g. i386); on others, - there are several relevant flavors of thread state (e.g. mips). */ -struct machine_thread_all_state - { - int set; /* Mask of bits (1 << FLAVOR). */ - struct _thread_state basic; - }; diff --git a/sysdeps/generic/tininess.h b/sysdeps/generic/tininess.h deleted file mode 100644 index bafdaacd15..0000000000 --- a/sysdeps/generic/tininess.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Specify architecture-specific rules for determining tininess of - floating-point results. Generic version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TININESS_H -#define _TININESS_H 1 - -/* Under IEEE 754, an architecture may determine tininess of - floating-point results either "before rounding" or "after - rounding", but must do so in the same way for all operations - returning binary results. Define TININESS_AFTER_ROUNDING to 1 for - "after rounding" architectures, 0 for "before rounding" - architectures. The test stdlib/tst-tininess will fail if the - definition is incorrect. */ - -#define TININESS_AFTER_ROUNDING 0 - -#endif /* tininess.h */ diff --git a/sysdeps/generic/tls-macros.h b/sysdeps/generic/tls-macros.h deleted file mode 100644 index 0a08f7c145..0000000000 --- a/sysdeps/generic/tls-macros.h +++ /dev/null @@ -1,12 +0,0 @@ -/* Macros to support TLS testing in times of missing compiler support. - Stub version. - - These macros should yield int * expressions for the TLS symbol X - accessed using the various TLS access models. Macros for some machines - are defined in elf/tls-macros.h, but ports can instead provide this file. - -#define TLS_LE(x) -#define TLS_IE(x) -#define TLS_LD(x) -#define TLS_GD(x) -*/ diff --git a/sysdeps/generic/tls.h b/sysdeps/generic/tls.h deleted file mode 100644 index 90c5c792ff..0000000000 --- a/sysdeps/generic/tls.h +++ /dev/null @@ -1,74 +0,0 @@ -/* Definition for thread-local data handling. Generic version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* An architecture-specific version of this file has to defined a - number of symbols: - - TLS_TCB_AT_TP or TLS_DTV_AT_TP - - The presence of one of these symbols signals which variant of - the TLS ABI is used. There are in the moment two variants - available: - - * the thread pointer points to a thread control block - - * the thread pointer points to the dynamic thread vector - - - TLS_TCB_SIZE - - This is the size of the thread control block structure. How - this is actually defined depends on the ABI. The thread control - block could be internal descriptor of the thread library or - just a data structure which allows finding the DTV. - - TLS_INIT_TCB_SIZE - - Similarly, but this value is only used at startup and in the - dynamic linker itself. There are no threads in use at that time. - - - TLS_TCB_ALIGN - - Alignment requirements for the TCB structure. - - TLS_INIT_TCB_ALIGN - - Similarly, but for the structure used at startup time. - - - INSTALL_DTV(tcb, init_dtv) - - This macro must install the given initial DTV into the thread control - block TCB. The normal runtime functionality must then be able to - use the value. - - - TLS_INIT_TP(tcb) - - This macro must initialize the thread pointer to enable normal TLS - operation. The parameter is a pointer to the thread control block. - ld.so calls this macro once. - - - THREAD_DTV() - - This macro returns the address of the DTV of the current thread. - This normally is done using the thread register which points - to the dtv or the TCB (from which the DTV can found). - */ diff --git a/sysdeps/generic/tst-audit.h b/sysdeps/generic/tst-audit.h deleted file mode 100644 index 45bc6039b2..0000000000 --- a/sysdeps/generic/tst-audit.h +++ /dev/null @@ -1,11 +0,0 @@ -/* Machines can supply a tst-audit.h to define these macros used in - elf/tst-auditmod1.c. - - -# define pltenter la_CPU_gnu_pltenter -# define pltexit la_CPU_gnu_pltexit -# define La_regs La_CPU_regs -# define La_retval La_CPU_retval -# define int_retval lrv_RETVALREG - -*/ diff --git a/sysdeps/generic/tst-stack-align.h b/sysdeps/generic/tst-stack-align.h deleted file mode 100644 index 2433b8beaf..0000000000 --- a/sysdeps/generic/tst-stack-align.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define TEST_STACK_ALIGN() \ - ({ \ - double _d = 12.0; \ - long double _ld = 15.0; \ - int _ret = 0; \ - printf ("double: %g %p %zu\n", _d, &_d, __alignof (double)); \ - if ((((uintptr_t) &_d) & (__alignof (double) - 1)) != 0) \ - _ret = 1; \ - \ - printf ("ldouble: %Lg %p %zu\n", _ld, &_ld, __alignof (long double)); \ - if ((((uintptr_t) &_ld) & (__alignof (long double) - 1)) != 0) \ - _ret = 1; \ - _ret; \ - }) diff --git a/sysdeps/generic/unsecvars.h b/sysdeps/generic/unsecvars.h deleted file mode 100644 index 5ea8a4a259..0000000000 --- a/sysdeps/generic/unsecvars.h +++ /dev/null @@ -1,34 +0,0 @@ -#if !HAVE_TUNABLES -# define GLIBC_TUNABLES_ENVVAR "GLIBC_TUNABLES\0" -#else -# define GLIBC_TUNABLES_ENVVAR -#endif - -/* Environment variable to be removed for SUID programs. The names are - all stuffed in a single string which means they have to be terminated - with a '\0' explicitly. */ -#define UNSECURE_ENVVARS \ - "GCONV_PATH\0" \ - "GETCONF_DIR\0" \ - GLIBC_TUNABLES_ENVVAR \ - "HOSTALIASES\0" \ - "LD_AUDIT\0" \ - "LD_DEBUG\0" \ - "LD_DEBUG_OUTPUT\0" \ - "LD_DYNAMIC_WEAK\0" \ - "LD_HWCAP_MASK\0" \ - "LD_LIBRARY_PATH\0" \ - "LD_ORIGIN_PATH\0" \ - "LD_PRELOAD\0" \ - "LD_PROFILE\0" \ - "LD_SHOW_AUXV\0" \ - "LD_USE_LOAD_BIAS\0" \ - "LOCALDOMAIN\0" \ - "LOCPATH\0" \ - "MALLOC_TRACE\0" \ - "NIS_PATH\0" \ - "NLSPATH\0" \ - "RESOLV_HOST_CONF\0" \ - "RES_OPTIONS\0" \ - "TMPDIR\0" \ - "TZDIR\0" diff --git a/sysdeps/generic/unwind-dw2-fde-glibc.c b/sysdeps/generic/unwind-dw2-fde-glibc.c deleted file mode 100644 index 9d698d575b..0000000000 --- a/sysdeps/generic/unwind-dw2-fde-glibc.c +++ /dev/null @@ -1,279 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Jakub Jelinek . - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Locate the FDE entry for a given address, using PT_GNU_EH_FRAME ELF - segment and dl_iterate_phdr to avoid register/deregister calls at - DSO load/unload. */ - -#ifdef _LIBC -# include -#endif - -#if !defined _LIBC || SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2_5) - -#include -#include - -#define _Unwind_Find_FDE _Unwind_Find_registered_FDE - -#include - -#undef _Unwind_Find_FDE - -extern fde * _Unwind_Find_registered_FDE (void *pc, - struct dwarf_eh_bases *bases); -extern fde * _Unwind_Find_FDE (void *, struct dwarf_eh_bases *); - -struct unw_eh_callback_data -{ - _Unwind_Ptr pc; - void *tbase; - void *dbase; - void *func; - fde *ret; -}; - -struct unw_eh_frame_hdr -{ - unsigned char version; - unsigned char eh_frame_ptr_enc; - unsigned char fde_count_enc; - unsigned char table_enc; -}; - -/* Like base_of_encoded_value, but take the base from a struct object - instead of an _Unwind_Context. */ - -static _Unwind_Ptr -base_from_cb_data (unsigned char encoding, struct unw_eh_callback_data *data) -{ - if (encoding == DW_EH_PE_omit) - return 0; - - switch (encoding & 0x70) - { - case DW_EH_PE_absptr: - case DW_EH_PE_pcrel: - case DW_EH_PE_aligned: - return 0; - - case DW_EH_PE_textrel: - return (_Unwind_Ptr) data->tbase; - case DW_EH_PE_datarel: - return (_Unwind_Ptr) data->dbase; - } - abort (); -} - -static int -_Unwind_IteratePhdrCallback (struct dl_phdr_info *info, size_t size, void *ptr) -{ - struct unw_eh_callback_data *data = (struct unw_eh_callback_data *) ptr; - const ElfW(Phdr) *phdr, *p_eh_frame_hdr; - const ElfW(Phdr) *p_dynamic __attribute__ ((unused)); - long n, match; - _Unwind_Ptr load_base; - const unsigned char *p; - const struct unw_eh_frame_hdr *hdr; - _Unwind_Ptr eh_frame; - struct object ob; - - /* Make sure struct dl_phdr_info is at least as big as we need. */ - if (size < offsetof (struct dl_phdr_info, dlpi_phnum) - + sizeof (info->dlpi_phnum)) - return -1; - - match = 0; - phdr = info->dlpi_phdr; - load_base = info->dlpi_addr; - p_eh_frame_hdr = NULL; - p_dynamic = NULL; - - /* See if PC falls into one of the loaded segments. Find the eh_frame - segment at the same time. */ - for (n = info->dlpi_phnum; --n >= 0; phdr++) - { - if (phdr->p_type == PT_LOAD) - { - _Unwind_Ptr vaddr = phdr->p_vaddr + load_base; - if (data->pc >= vaddr && data->pc < vaddr + phdr->p_memsz) - match = 1; - } - else if (phdr->p_type == PT_GNU_EH_FRAME) - p_eh_frame_hdr = phdr; - else if (phdr->p_type == PT_DYNAMIC) - p_dynamic = phdr; - } - if (!match || !p_eh_frame_hdr) - return 0; - - /* Read .eh_frame_hdr header. */ - hdr = (const struct unw_eh_frame_hdr *) - (p_eh_frame_hdr->p_vaddr + load_base); - if (hdr->version != 1) - return 1; - -#ifdef CRT_GET_RFIB_DATA -# ifdef __i386__ - data->dbase = NULL; - if (p_dynamic) - { - /* For dynamicly linked executables and shared libraries, - DT_PLTGOT is the gp value for that object. */ - ElfW(Dyn) *dyn = (ElfW(Dyn) *)(p_dynamic->p_vaddr + load_base); - for (; dyn->d_tag != DT_NULL ; dyn++) - if (dyn->d_tag == DT_PLTGOT) - { - /* On IA-32, _DYNAMIC is writable and GLIBC has relocated it. */ - data->dbase = (void *) dyn->d_un.d_ptr; - break; - } - } -# else -# error What is DW_EH_PE_datarel base on this platform? -# endif -#endif -#ifdef CRT_GET_RFIB_TEXT -# error What is DW_EH_PE_textrel base on this platform? -#endif - - p = read_encoded_value_with_base (hdr->eh_frame_ptr_enc, - base_from_cb_data (hdr->eh_frame_ptr_enc, - data), - (const unsigned char *) (hdr + 1), - &eh_frame); - - /* We require here specific table encoding to speed things up. - Also, DW_EH_PE_datarel here means using PT_GNU_EH_FRAME start - as base, not the processor specific DW_EH_PE_datarel. */ - if (hdr->fde_count_enc != DW_EH_PE_omit - && hdr->table_enc == (DW_EH_PE_datarel | DW_EH_PE_sdata4)) - { - _Unwind_Ptr fde_count; - - p = read_encoded_value_with_base (hdr->fde_count_enc, - base_from_cb_data (hdr->fde_count_enc, - data), - p, &fde_count); - /* Shouldn't happen. */ - if (fde_count == 0) - return 1; - if ((((_Unwind_Ptr) p) & 3) == 0) - { - struct fde_table { - signed initial_loc __attribute__ ((mode (SI))); - signed fde __attribute__ ((mode (SI))); - }; - const struct fde_table *table = (const struct fde_table *) p; - size_t lo, hi, mid; - _Unwind_Ptr data_base = (_Unwind_Ptr) hdr; - fde *f; - unsigned int f_enc, f_enc_size; - _Unwind_Ptr range; - - mid = fde_count - 1; - if (data->pc < table[0].initial_loc + data_base) - return 1; - else if (data->pc < table[mid].initial_loc + data_base) - { - lo = 0; - hi = mid; - - while (lo < hi) - { - mid = (lo + hi) / 2; - if (data->pc < table[mid].initial_loc + data_base) - hi = mid; - else if (data->pc >= table[mid + 1].initial_loc + data_base) - lo = mid + 1; - else - break; - } - - if (lo >= hi) - __gxx_abort (); - } - - f = (fde *) (table[mid].fde + data_base); - f_enc = get_fde_encoding (f); - f_enc_size = size_of_encoded_value (f_enc); - read_encoded_value_with_base (f_enc & 0x0f, 0, - &f->pc_begin[f_enc_size], &range); - if (data->pc < table[mid].initial_loc + data_base + range) - data->ret = f; - data->func = (void *) (table[mid].initial_loc + data_base); - return 1; - } - } - - /* We have no sorted search table, so need to go the slow way. - As soon as GLIBC will provide API so to notify that a library has been - removed, we could cache this (and thus use search_object). */ - ob.pc_begin = NULL; - ob.tbase = data->tbase; - ob.dbase = data->dbase; - ob.u.single = (fde *) eh_frame; - ob.s.i = 0; - ob.s.b.mixed_encoding = 1; /* Need to assume worst case. */ - data->ret = linear_search_fdes (&ob, (fde *) eh_frame, (void *) data->pc); - if (data->ret != NULL) - { - unsigned int encoding = get_fde_encoding (data->ret); - _Unwind_Ptr func; - read_encoded_value_with_base (encoding, - base_from_cb_data (encoding, data), - data->ret->pc_begin, &func); - data->func = (void *) func; - } - return 1; -} - -# ifdef _LIBC -# define dl_iterate_phdr __dl_iterate_phdr -# endif - -fde * -_Unwind_Find_FDE (void *pc, struct dwarf_eh_bases *bases) -{ - struct unw_eh_callback_data data; - fde *ret; - - ret = _Unwind_Find_registered_FDE (pc, bases); - if (ret != NULL) - return ret; - - data.pc = (_Unwind_Ptr) pc; - data.tbase = NULL; - data.dbase = NULL; - data.func = NULL; - data.ret = NULL; - - if (dl_iterate_phdr (_Unwind_IteratePhdrCallback, &data) < 0) - return NULL; - - if (data.ret) - { - bases->tbase = data.tbase; - bases->dbase = data.dbase; - bases->func = data.func; - } - return data.ret; -} - -#endif diff --git a/sysdeps/generic/unwind-dw2-fde.c b/sysdeps/generic/unwind-dw2-fde.c deleted file mode 100644 index 104a2552b4..0000000000 --- a/sysdeps/generic/unwind-dw2-fde.c +++ /dev/null @@ -1,1079 +0,0 @@ -/* Subroutines needed for unwinding stack frames for exception handling. */ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - Contributed by Jason Merrill . - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef _LIBC -# include -#endif - -#if !defined _LIBC || SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2_5) - -#ifdef _LIBC -#include -#include -#include -#include -#include -#define NO_BASE_OF_ENCODED_VALUE -#include -#include -#else -#ifndef _Unwind_Find_FDE -#include "tconfig.h" -#include "tsystem.h" -#include "dwarf2.h" -#include "unwind.h" -#define NO_BASE_OF_ENCODED_VALUE -#include "unwind-pe.h" -#include "unwind-dw2-fde.h" -#include "gthr.h" -#endif -#endif - -/* The unseen_objects list contains objects that have been registered - but not yet categorized in any way. The seen_objects list has had - it's pc_begin and count fields initialized at minimum, and is sorted - by decreasing value of pc_begin. */ -static struct object *unseen_objects; -static struct object *seen_objects; - -#ifdef _LIBC - -__libc_lock_define_initialized (static, object_mutex) -#define init_object_mutex_once() -#define __gthread_mutex_lock(m) __libc_lock_lock (*(m)) -#define __gthread_mutex_unlock(m) __libc_lock_unlock (*(m)) - -void __register_frame_info_bases (void *begin, struct object *ob, - void *tbase, void *dbase); -hidden_proto (__register_frame_info_bases) -void __register_frame_info_table_bases (void *begin, - struct object *ob, - void *tbase, void *dbase); -hidden_proto (__register_frame_info_table_bases) -void *__deregister_frame_info_bases (void *begin); -hidden_proto (__deregister_frame_info_bases) - -#else - -#ifdef __GTHREAD_MUTEX_INIT -static __gthread_mutex_t object_mutex = __GTHREAD_MUTEX_INIT; -#else -static __gthread_mutex_t object_mutex; -#endif - -#ifdef __GTHREAD_MUTEX_INIT_FUNCTION -static void -init_object_mutex (void) -{ - __GTHREAD_MUTEX_INIT_FUNCTION (&object_mutex); -} - -static void -init_object_mutex_once (void) -{ - static __gthread_once_t once = __GTHREAD_ONCE_INIT; - __gthread_once (&once, init_object_mutex); -} -#else -#define init_object_mutex_once() -#endif - -#endif /* _LIBC */ - -/* Called from crtbegin.o to register the unwind info for an object. */ - -void -__register_frame_info_bases (void *begin, struct object *ob, - void *tbase, void *dbase) -{ - /* If .eh_frame is empty, don't register at all. */ - if (*(uword *) begin == 0) - return; - - ob->pc_begin = (void *)-1; - ob->tbase = tbase; - ob->dbase = dbase; - ob->u.single = begin; - ob->s.i = 0; - ob->s.b.encoding = DW_EH_PE_omit; -#ifdef DWARF2_OBJECT_END_PTR_EXTENSION - ob->fde_end = NULL; -#endif - - init_object_mutex_once (); - __gthread_mutex_lock (&object_mutex); - - ob->next = unseen_objects; - unseen_objects = ob; - - __gthread_mutex_unlock (&object_mutex); -} -hidden_def (__register_frame_info_bases) - -void -__register_frame_info (void *begin, struct object *ob) -{ - __register_frame_info_bases (begin, ob, 0, 0); -} - -void -__register_frame (void *begin) -{ - struct object *ob; - - /* If .eh_frame is empty, don't register at all. */ - if (*(uword *) begin == 0) - return; - - ob = (struct object *) malloc (sizeof (struct object)); - __register_frame_info_bases (begin, ob, 0, 0); -} - -/* Similar, but BEGIN is actually a pointer to a table of unwind entries - for different translation units. Called from the file generated by - collect2. */ - -void -__register_frame_info_table_bases (void *begin, struct object *ob, - void *tbase, void *dbase) -{ - ob->pc_begin = (void *)-1; - ob->tbase = tbase; - ob->dbase = dbase; - ob->u.array = begin; - ob->s.i = 0; - ob->s.b.from_array = 1; - ob->s.b.encoding = DW_EH_PE_omit; - - init_object_mutex_once (); - __gthread_mutex_lock (&object_mutex); - - ob->next = unseen_objects; - unseen_objects = ob; - - __gthread_mutex_unlock (&object_mutex); -} -hidden_def (__register_frame_info_table_bases) - -void -__register_frame_info_table (void *begin, struct object *ob) -{ - __register_frame_info_table_bases (begin, ob, 0, 0); -} - -void -__register_frame_table (void *begin) -{ - struct object *ob = (struct object *) malloc (sizeof (struct object)); - __register_frame_info_table_bases (begin, ob, 0, 0); -} - -/* Called from crtbegin.o to deregister the unwind info for an object. */ -/* ??? Glibc has for a while now exported __register_frame_info and - __deregister_frame_info. If we call __register_frame_info_bases - from crtbegin (wherein it is declared weak), and this object does - not get pulled from libgcc.a for other reasons, then the - invocation of __deregister_frame_info will be resolved from glibc. - Since the registration did not happen there, we'll abort. - - Therefore, declare a new deregistration entry point that does the - exact same thing, but will resolve to the same library as - implements __register_frame_info_bases. */ - -void * -__deregister_frame_info_bases (void *begin) -{ - struct object **p; - struct object *ob = 0; - struct fde_vector *tofree = NULL; - - /* If .eh_frame is empty, we haven't registered. */ - if (*(uword *) begin == 0) - return ob; - - init_object_mutex_once (); - __gthread_mutex_lock (&object_mutex); - - for (p = &unseen_objects; *p ; p = &(*p)->next) - if ((*p)->u.single == begin) - { - ob = *p; - *p = ob->next; - goto out; - } - - for (p = &seen_objects; *p ; p = &(*p)->next) - if ((*p)->s.b.sorted) - { - if ((*p)->u.sort->orig_data == begin) - { - ob = *p; - *p = ob->next; - tofree = ob->u.sort; - goto out; - } - } - else - { - if ((*p)->u.single == begin) - { - ob = *p; - *p = ob->next; - goto out; - } - } - - __gthread_mutex_unlock (&object_mutex); - abort (); - - out: - __gthread_mutex_unlock (&object_mutex); - free (tofree); - return (void *) ob; -} -hidden_def (__deregister_frame_info_bases) - -void * -__deregister_frame_info (void *begin) -{ - return __deregister_frame_info_bases (begin); -} - -void -__deregister_frame (void *begin) -{ - /* If .eh_frame is empty, we haven't registered. */ - if (*(uword *) begin != 0) - free (__deregister_frame_info_bases (begin)); -} - - -/* Like base_of_encoded_value, but take the base from a struct object - instead of an _Unwind_Context. */ - -static _Unwind_Ptr -base_from_object (unsigned char encoding, struct object *ob) -{ - if (encoding == DW_EH_PE_omit) - return 0; - - switch (encoding & 0x70) - { - case DW_EH_PE_absptr: - case DW_EH_PE_pcrel: - case DW_EH_PE_aligned: - return 0; - - case DW_EH_PE_textrel: - return (_Unwind_Ptr) ob->tbase; - case DW_EH_PE_datarel: - return (_Unwind_Ptr) ob->dbase; - } - abort (); -} - -/* Return the FDE pointer encoding from the CIE. */ -/* ??? This is a subset of extract_cie_info from unwind-dw2.c. */ - -static int -get_cie_encoding (struct dwarf_cie *cie) -{ - const unsigned char *aug, *p; - _Unwind_Ptr dummy; - _Unwind_Word utmp; - _Unwind_Sword stmp; - - aug = cie->augmentation; - if (aug[0] != 'z') - return DW_EH_PE_absptr; - - /* Skip the augmentation string. */ - p = aug + strlen ((const char *) aug) + 1; - p = read_uleb128 (p, &utmp); /* Skip code alignment. */ - p = read_sleb128 (p, &stmp); /* Skip data alignment. */ - p++; /* Skip return address column. */ - - aug++; /* Skip 'z' */ - p = read_uleb128 (p, &utmp); /* Skip augmentation length. */ - while (1) - { - /* This is what we're looking for. */ - if (*aug == 'R') - return *p; - /* Personality encoding and pointer. */ - else if (*aug == 'P') - { - /* ??? Avoid dereferencing indirect pointers, since we're - faking the base address. Gotta keep DW_EH_PE_aligned - intact, however. */ - p = read_encoded_value_with_base (*p & 0x7F, 0, p + 1, &dummy); - } - /* LSDA encoding. */ - else if (*aug == 'L') - p++; - /* Otherwise end of string, or unknown augmentation. */ - else - return DW_EH_PE_absptr; - aug++; - } -} - -static inline int -get_fde_encoding (struct dwarf_fde *f) -{ - return get_cie_encoding (get_cie (f)); -} - - -/* Sorting an array of FDEs by address. - (Ideally we would have the linker sort the FDEs so we don't have to do - it at run time. But the linkers are not yet prepared for this.) */ - -/* Return the Nth pc_begin value from FDE x. */ - -static inline _Unwind_Ptr -get_pc_begin (fde *x, size_t n) -{ - _Unwind_Ptr p; - memcpy (&p, x->pc_begin + n * sizeof (_Unwind_Ptr), sizeof (_Unwind_Ptr)); - return p; -} - -/* Comparison routines. Three variants of increasing complexity. */ - -static int -fde_unencoded_compare (struct object *ob __attribute__((unused)), - fde *x, fde *y) -{ - _Unwind_Ptr x_ptr = get_pc_begin (x, 0); - _Unwind_Ptr y_ptr = get_pc_begin (y, 0); - - if (x_ptr > y_ptr) - return 1; - if (x_ptr < y_ptr) - return -1; - return 0; -} - -static int -fde_single_encoding_compare (struct object *ob, fde *x, fde *y) -{ - _Unwind_Ptr base, x_ptr, y_ptr; - - base = base_from_object (ob->s.b.encoding, ob); - read_encoded_value_with_base (ob->s.b.encoding, base, x->pc_begin, &x_ptr); - read_encoded_value_with_base (ob->s.b.encoding, base, y->pc_begin, &y_ptr); - - if (x_ptr > y_ptr) - return 1; - if (x_ptr < y_ptr) - return -1; - return 0; -} - -static int -fde_mixed_encoding_compare (struct object *ob, fde *x, fde *y) -{ - int x_encoding, y_encoding; - _Unwind_Ptr x_ptr, y_ptr; - - x_encoding = get_fde_encoding (x); - read_encoded_value_with_base (x_encoding, base_from_object (x_encoding, ob), - x->pc_begin, &x_ptr); - - y_encoding = get_fde_encoding (y); - read_encoded_value_with_base (y_encoding, base_from_object (y_encoding, ob), - y->pc_begin, &y_ptr); - - if (x_ptr > y_ptr) - return 1; - if (x_ptr < y_ptr) - return -1; - return 0; -} - -typedef int (*fde_compare_t) (struct object *, fde *, fde *); - - -/* This is a special mix of insertion sort and heap sort, optimized for - the data sets that actually occur. They look like - 101 102 103 127 128 105 108 110 190 111 115 119 125 160 126 129 130. - I.e. a linearly increasing sequence (coming from functions in the text - section), with additionally a few unordered elements (coming from functions - in gnu_linkonce sections) whose values are higher than the values in the - surrounding linear sequence (but not necessarily higher than the values - at the end of the linear sequence!). - The worst-case total run time is O(N) + O(n log (n)), where N is the - total number of FDEs and n is the number of erratic ones. */ - -struct fde_accumulator -{ - struct fde_vector *linear; - struct fde_vector *erratic; -}; - -static int -start_fde_sort (struct fde_accumulator *accu, size_t count) -{ - size_t size; - if (! count) - return 0; - - size = sizeof (struct fde_vector) + sizeof (fde *) * count; - if ((accu->linear = (struct fde_vector *) malloc (size))) - { - accu->linear->count = 0; - if ((accu->erratic = (struct fde_vector *) malloc (size))) - accu->erratic->count = 0; - return 1; - } - else - return 0; -} - -static inline void -fde_insert (struct fde_accumulator *accu, fde *this_fde) -{ - if (accu->linear) - accu->linear->array[accu->linear->count++] = this_fde; -} - -/* Split LINEAR into a linear sequence with low values and an erratic - sequence with high values, put the linear one (of longest possible - length) into LINEAR and the erratic one into ERRATIC. This is O(N). - - Because the longest linear sequence we are trying to locate within the - incoming LINEAR array can be interspersed with (high valued) erratic - entries. We construct a chain indicating the sequenced entries. - To avoid having to allocate this chain, we overlay it onto the space of - the ERRATIC array during construction. A final pass iterates over the - chain to determine what should be placed in the ERRATIC array, and - what is the linear sequence. This overlay is safe from aliasing. */ - -static void -fde_split (struct object *ob, fde_compare_t fde_compare, - struct fde_vector *linear, struct fde_vector *erratic) -{ - static fde *marker; - size_t count = linear->count; - fde **chain_end = ▮ - size_t i, j, k; - - /* This should optimize out, but it is wise to make sure this assumption - is correct. Should these have different sizes, we cannot cast between - them and the overlaying onto ERRATIC will not work. */ - if (sizeof (fde *) != sizeof (fde **)) - abort (); - - for (i = 0; i < count; i++) - { - fde **probe; - - for (probe = chain_end; - probe != &marker && fde_compare (ob, linear->array[i], *probe) < 0; - probe = chain_end) - { - chain_end = (fde **) erratic->array[probe - linear->array]; - erratic->array[probe - linear->array] = NULL; - } - erratic->array[i] = (fde *) chain_end; - chain_end = &linear->array[i]; - } - - /* Each entry in LINEAR which is part of the linear sequence we have - discovered will correspond to a non-NULL entry in the chain we built in - the ERRATIC array. */ - for (i = j = k = 0; i < count; i++) - if (erratic->array[i]) - linear->array[j++] = linear->array[i]; - else - erratic->array[k++] = linear->array[i]; - linear->count = j; - erratic->count = k; -} - -/* This is O(n log(n)). BSD/OS defines heapsort in stdlib.h, so we must - use a name that does not conflict. */ - -static void -frame_heapsort (struct object *ob, fde_compare_t fde_compare, - struct fde_vector *erratic) -{ - /* For a description of this algorithm, see: - Samuel P. Harbison, Guy L. Steele Jr.: C, a reference manual, 2nd ed., - p. 60-61. */ - fde ** a = erratic->array; - /* A portion of the array is called a "heap" if for all i>=0: - If i and 2i+1 are valid indices, then a[i] >= a[2i+1]. - If i and 2i+2 are valid indices, then a[i] >= a[2i+2]. */ -#define SWAP(x,y) do { fde * tmp = x; x = y; y = tmp; } while (0) - size_t n = erratic->count; - size_t m = n; - size_t i; - - while (m > 0) - { - /* Invariant: a[m..n-1] is a heap. */ - m--; - for (i = m; 2*i+1 < n; ) - { - if (2*i+2 < n - && fde_compare (ob, a[2*i+2], a[2*i+1]) > 0 - && fde_compare (ob, a[2*i+2], a[i]) > 0) - { - SWAP (a[i], a[2*i+2]); - i = 2*i+2; - } - else if (fde_compare (ob, a[2*i+1], a[i]) > 0) - { - SWAP (a[i], a[2*i+1]); - i = 2*i+1; - } - else - break; - } - } - while (n > 1) - { - /* Invariant: a[0..n-1] is a heap. */ - n--; - SWAP (a[0], a[n]); - for (i = 0; 2*i+1 < n; ) - { - if (2*i+2 < n - && fde_compare (ob, a[2*i+2], a[2*i+1]) > 0 - && fde_compare (ob, a[2*i+2], a[i]) > 0) - { - SWAP (a[i], a[2*i+2]); - i = 2*i+2; - } - else if (fde_compare (ob, a[2*i+1], a[i]) > 0) - { - SWAP (a[i], a[2*i+1]); - i = 2*i+1; - } - else - break; - } - } -#undef SWAP -} - -/* Merge V1 and V2, both sorted, and put the result into V1. */ -static void -fde_merge (struct object *ob, fde_compare_t fde_compare, - struct fde_vector *v1, struct fde_vector *v2) -{ - size_t i1, i2; - fde * fde2; - - i2 = v2->count; - if (i2 > 0) - { - i1 = v1->count; - do - { - i2--; - fde2 = v2->array[i2]; - while (i1 > 0 && fde_compare (ob, v1->array[i1-1], fde2) > 0) - { - v1->array[i1+i2] = v1->array[i1-1]; - i1--; - } - v1->array[i1+i2] = fde2; - } - while (i2 > 0); - v1->count += v2->count; - } -} - -static void -end_fde_sort (struct object *ob, struct fde_accumulator *accu, size_t count) -{ - fde_compare_t fde_compare; - - if (accu->linear->count != count) - abort (); - - if (ob->s.b.mixed_encoding) - fde_compare = fde_mixed_encoding_compare; - else if (ob->s.b.encoding == DW_EH_PE_absptr) - fde_compare = fde_unencoded_compare; - else - fde_compare = fde_single_encoding_compare; - - if (accu->erratic) - { - fde_split (ob, fde_compare, accu->linear, accu->erratic); - if (accu->linear->count + accu->erratic->count != count) - abort (); - frame_heapsort (ob, fde_compare, accu->erratic); - fde_merge (ob, fde_compare, accu->linear, accu->erratic); - free (accu->erratic); - } - else - { - /* We've not managed to malloc an erratic array, - so heap sort in the linear one. */ - frame_heapsort (ob, fde_compare, accu->linear); - } -} - - -/* Update encoding, mixed_encoding, and pc_begin for OB for the - fde array beginning at THIS_FDE. Return the number of fdes - encountered along the way. */ - -static size_t -classify_object_over_fdes (struct object *ob, fde *this_fde) -{ - struct dwarf_cie *last_cie = 0; - size_t count = 0; - int encoding = DW_EH_PE_absptr; - _Unwind_Ptr base = 0; - - for (; ! last_fde (ob, this_fde); this_fde = next_fde (this_fde)) - { - struct dwarf_cie *this_cie; - _Unwind_Ptr mask, pc_begin; - - /* Skip CIEs. */ - if (this_fde->CIE_delta == 0) - continue; - - /* Determine the encoding for this FDE. Note mixed encoded - objects for later. */ - this_cie = get_cie (this_fde); - if (this_cie != last_cie) - { - last_cie = this_cie; - encoding = get_cie_encoding (this_cie); - base = base_from_object (encoding, ob); - if (ob->s.b.encoding == DW_EH_PE_omit) - ob->s.b.encoding = encoding; - else if (ob->s.b.encoding != encoding) - ob->s.b.mixed_encoding = 1; - } - - read_encoded_value_with_base (encoding, base, this_fde->pc_begin, - &pc_begin); - - /* Take care to ignore link-once functions that were removed. - In these cases, the function address will be NULL, but if - the encoding is smaller than a pointer a true NULL may not - be representable. Assume 0 in the representable bits is NULL. */ - mask = size_of_encoded_value (encoding); - if (mask < sizeof (void *)) - mask = (1L << (mask << 3)) - 1; - else - mask = -1; - - if ((pc_begin & mask) == 0) - continue; - - count += 1; - if ((void *) pc_begin < ob->pc_begin) - ob->pc_begin = (void *) pc_begin; - } - - return count; -} - -static void -add_fdes (struct object *ob, struct fde_accumulator *accu, fde *this_fde) -{ - struct dwarf_cie *last_cie = 0; - int encoding = ob->s.b.encoding; - _Unwind_Ptr base = base_from_object (ob->s.b.encoding, ob); - - for (; ! last_fde (ob, this_fde); this_fde = next_fde (this_fde)) - { - struct dwarf_cie *this_cie; - - /* Skip CIEs. */ - if (this_fde->CIE_delta == 0) - continue; - - if (ob->s.b.mixed_encoding) - { - /* Determine the encoding for this FDE. Note mixed encoded - objects for later. */ - this_cie = get_cie (this_fde); - if (this_cie != last_cie) - { - last_cie = this_cie; - encoding = get_cie_encoding (this_cie); - base = base_from_object (encoding, ob); - } - } - - if (encoding == DW_EH_PE_absptr) - { - if (get_pc_begin (this_fde, 0) == 0) - continue; - } - else - { - _Unwind_Ptr pc_begin, mask; - - read_encoded_value_with_base (encoding, base, this_fde->pc_begin, - &pc_begin); - - /* Take care to ignore link-once functions that were removed. - In these cases, the function address will be NULL, but if - the encoding is smaller than a pointer a true NULL may not - be representable. Assume 0 in the representable bits is NULL. */ - mask = size_of_encoded_value (encoding); - if (mask < sizeof (void *)) - mask = (1L << (mask << 3)) - 1; - else - mask = -1; - - if ((pc_begin & mask) == 0) - continue; - } - - fde_insert (accu, this_fde); - } -} - -/* Set up a sorted array of pointers to FDEs for a loaded object. We - count up the entries before allocating the array because it's likely to - be faster. We can be called multiple times, should we have failed to - allocate a sorted fde array on a previous occasion. */ - -static void -init_object (struct object* ob) -{ - struct fde_accumulator accu; - size_t count; - - count = ob->s.b.count; - if (count == 0) - { - if (ob->s.b.from_array) - { - fde **p = ob->u.array; - for (count = 0; *p; ++p) - count += classify_object_over_fdes (ob, *p); - } - else - count = classify_object_over_fdes (ob, ob->u.single); - - /* The count field we have in the main struct object is somewhat - limited, but should suffice for virtually all cases. If the - counted value doesn't fit, re-write a zero. The worst that - happens is that we re-count next time -- admittedly non-trivial - in that this implies some 2M fdes, but at least we function. */ - ob->s.b.count = count; - if (ob->s.b.count != count) - ob->s.b.count = 0; - } - - if (!start_fde_sort (&accu, count)) - return; - - if (ob->s.b.from_array) - { - fde **p; - for (p = ob->u.array; *p; ++p) - add_fdes (ob, &accu, *p); - } - else - add_fdes (ob, &accu, ob->u.single); - - end_fde_sort (ob, &accu, count); - - /* Save the original fde pointer, since this is the key by which the - DSO will deregister the object. */ - accu.linear->orig_data = ob->u.single; - ob->u.sort = accu.linear; - - ob->s.b.sorted = 1; -} - -/* A linear search through a set of FDEs for the given PC. This is - used when there was insufficient memory to allocate and sort an - array. */ - -static fde * -linear_search_fdes (struct object *ob, fde *this_fde, void *pc) -{ - struct dwarf_cie *last_cie = 0; - int encoding = ob->s.b.encoding; - _Unwind_Ptr base = base_from_object (ob->s.b.encoding, ob); - - for (; ! last_fde (ob, this_fde); this_fde = next_fde (this_fde)) - { - struct dwarf_cie *this_cie; - _Unwind_Ptr pc_begin, pc_range; - - /* Skip CIEs. */ - if (this_fde->CIE_delta == 0) - continue; - - if (ob->s.b.mixed_encoding) - { - /* Determine the encoding for this FDE. Note mixed encoded - objects for later. */ - this_cie = get_cie (this_fde); - if (this_cie != last_cie) - { - last_cie = this_cie; - encoding = get_cie_encoding (this_cie); - base = base_from_object (encoding, ob); - } - } - - if (encoding == DW_EH_PE_absptr) - { - pc_begin = get_pc_begin (this_fde, 0); - pc_range = get_pc_begin (this_fde, 1); - if (pc_begin == 0) - continue; - } - else - { - _Unwind_Ptr mask; - const unsigned char *p; - - p = read_encoded_value_with_base (encoding, base, - this_fde->pc_begin, &pc_begin); - read_encoded_value_with_base (encoding & 0x0F, 0, p, &pc_range); - - /* Take care to ignore link-once functions that were removed. - In these cases, the function address will be NULL, but if - the encoding is smaller than a pointer a true NULL may not - be representable. Assume 0 in the representable bits is NULL. */ - mask = size_of_encoded_value (encoding); - if (mask < sizeof (void *)) - mask = (1L << (mask << 3)) - 1; - else - mask = -1; - - if ((pc_begin & mask) == 0) - continue; - } - - if ((_Unwind_Ptr) pc - pc_begin < pc_range) - return this_fde; - } - - return NULL; -} - -/* Binary search for an FDE containing the given PC. Here are three - implementations of increasing complexity. */ - -static fde * -binary_search_unencoded_fdes (struct object *ob, void *pc) -{ - struct fde_vector *vec = ob->u.sort; - size_t lo, hi; - - for (lo = 0, hi = vec->count; lo < hi; ) - { - size_t i = (lo + hi) / 2; - fde *f = vec->array[i]; - void *pc_begin; - uaddr pc_range; - - pc_begin = (void *) get_pc_begin (f, 0); - pc_range = (uaddr) get_pc_begin (f, 1); - - if (pc < pc_begin) - hi = i; - else if (pc >= pc_begin + pc_range) - lo = i + 1; - else - return f; - } - - return NULL; -} - -static fde * -binary_search_single_encoding_fdes (struct object *ob, void *pc) -{ - struct fde_vector *vec = ob->u.sort; - int encoding = ob->s.b.encoding; - _Unwind_Ptr base = base_from_object (encoding, ob); - size_t lo, hi; - - for (lo = 0, hi = vec->count; lo < hi; ) - { - size_t i = (lo + hi) / 2; - fde *f = vec->array[i]; - _Unwind_Ptr pc_begin, pc_range; - const unsigned char *p; - - p = read_encoded_value_with_base (encoding, base, f->pc_begin, - &pc_begin); - read_encoded_value_with_base (encoding & 0x0F, 0, p, &pc_range); - - if ((_Unwind_Ptr) pc < pc_begin) - hi = i; - else if ((_Unwind_Ptr) pc >= pc_begin + pc_range) - lo = i + 1; - else - return f; - } - - return NULL; -} - -static fde * -binary_search_mixed_encoding_fdes (struct object *ob, void *pc) -{ - struct fde_vector *vec = ob->u.sort; - size_t lo, hi; - - for (lo = 0, hi = vec->count; lo < hi; ) - { - size_t i = (lo + hi) / 2; - fde *f = vec->array[i]; - _Unwind_Ptr pc_begin, pc_range; - const unsigned char *p; - int encoding; - - encoding = get_fde_encoding (f); - p = read_encoded_value_with_base (encoding, - base_from_object (encoding, ob), - f->pc_begin, &pc_begin); - read_encoded_value_with_base (encoding & 0x0F, 0, p, &pc_range); - - if ((_Unwind_Ptr) pc < pc_begin) - hi = i; - else if ((_Unwind_Ptr) pc >= pc_begin + pc_range) - lo = i + 1; - else - return f; - } - - return NULL; -} - -static fde * -search_object (struct object* ob, void *pc) -{ - /* If the data hasn't been sorted, try to do this now. We may have - more memory available than last time we tried. */ - if (! ob->s.b.sorted) - { - init_object (ob); - - /* Despite the above comment, the normal reason to get here is - that we've not processed this object before. A quick range - check is in order. */ - if (pc < ob->pc_begin) - return NULL; - } - - if (ob->s.b.sorted) - { - if (ob->s.b.mixed_encoding) - return binary_search_mixed_encoding_fdes (ob, pc); - else if (ob->s.b.encoding == DW_EH_PE_absptr) - return binary_search_unencoded_fdes (ob, pc); - else - return binary_search_single_encoding_fdes (ob, pc); - } - else - { - /* Long slow labourious linear search, cos we've no memory. */ - if (ob->s.b.from_array) - { - fde **p; - for (p = ob->u.array; *p ; p++) - { - fde *f = linear_search_fdes (ob, *p, pc); - if (f) - return f; - } - return NULL; - } - else - return linear_search_fdes (ob, ob->u.single, pc); - } -} - -fde * -_Unwind_Find_FDE (void *pc, struct dwarf_eh_bases *bases) -{ - struct object *ob; - fde *f = NULL; - - init_object_mutex_once (); - __gthread_mutex_lock (&object_mutex); - - /* Linear search through the classified objects, to find the one - containing the pc. Note that pc_begin is sorted descending, and - we expect objects to be non-overlapping. */ - for (ob = seen_objects; ob; ob = ob->next) - if (pc >= ob->pc_begin) - { - f = search_object (ob, pc); - if (f) - goto fini; - break; - } - - /* Classify and search the objects we've not yet processed. */ - while ((ob = unseen_objects)) - { - struct object **p; - - unseen_objects = ob->next; - f = search_object (ob, pc); - - /* Insert the object into the classified list. */ - for (p = &seen_objects; *p ; p = &(*p)->next) - if ((*p)->pc_begin < ob->pc_begin) - break; - ob->next = *p; - *p = ob; - - if (f) - goto fini; - } - - fini: - __gthread_mutex_unlock (&object_mutex); - - if (f) - { - int encoding; - _Unwind_Ptr func; - - bases->tbase = ob->tbase; - bases->dbase = ob->dbase; - - encoding = ob->s.b.encoding; - if (ob->s.b.mixed_encoding) - encoding = get_fde_encoding (f); - read_encoded_value_with_base (encoding, base_from_object (encoding, ob), - f->pc_begin, &func); - bases->func = (void *) func; - } - - return f; -} - -#endif diff --git a/sysdeps/generic/unwind-dw2-fde.h b/sysdeps/generic/unwind-dw2-fde.h deleted file mode 100644 index 941ab80d7b..0000000000 --- a/sysdeps/generic/unwind-dw2-fde.h +++ /dev/null @@ -1,169 +0,0 @@ -/* Subroutines needed for unwinding stack frames for exception handling. */ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - Contributed by Jason Merrill . - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -struct fde_vector -{ - void *orig_data; - size_t count; - struct dwarf_fde *array __flexarr; -}; - -#ifdef _LIBC -#include -#else -struct object -{ - void *pc_begin; - void *tbase; - void *dbase; - union { - struct dwarf_fde *single; - struct dwarf_fde **array; - struct fde_vector *sort; - } u; - - union { - struct { - unsigned long sorted : 1; - unsigned long from_array : 1; - unsigned long mixed_encoding : 1; - unsigned long encoding : 8; - /* ??? Wish there was an easy way to detect a 64-bit host here; - we've got 32 bits left to play with... */ - unsigned long count : 21; - } b; - size_t i; - } s; - -#ifdef DWARF2_OBJECT_END_PTR_EXTENSION - char *fde_end; -#endif - - struct object *next; -}; -#endif - -/* This is the original definition of struct object. While the struct - itself was opaque to users, they did know how large it was, and - allocate one statically in crtbegin for each DSO. Keep this around - so that we're aware of the static size limitations for the new struct. */ -struct old_object -{ - void *pc_begin; - void *pc_end; - struct dwarf_fde *fde_begin; - struct dwarf_fde **fde_array; - size_t count; - struct old_object *next; -}; - -struct dwarf_eh_bases -{ - void *tbase; - void *dbase; - void *func; -}; - - -extern void __register_frame_info_bases (void *, struct object *, - void *, void *); -extern void __register_frame_info (void *, struct object *); -extern void __register_frame (void *); -extern void __register_frame_info_table_bases (void *, struct object *, - void *, void *); -extern void __register_frame_info_table (void *, struct object *); -extern void __register_frame_table (void *); -extern void *__deregister_frame_info (void *); -extern void *__deregister_frame_info_bases (void *); -extern void __deregister_frame (void *); - - -typedef int sword __attribute__ ((mode (SI))); -typedef unsigned int uword __attribute__ ((mode (SI))); -typedef unsigned int uaddr __attribute__ ((mode (pointer))); -typedef int saddr __attribute__ ((mode (pointer))); -typedef unsigned char ubyte; - -/* Terminology: - CIE - Common Information Element - FDE - Frame Descriptor Element - - There is one per function, and it describes where the function code - is located, and what the register lifetimes and stack layout are - within the function. - - The data structures are defined in the DWARF specification, although - not in a very readable way (see LITERATURE). - - Every time an exception is thrown, the code needs to locate the FDE - for the current function, and starts to look for exception regions - from that FDE. This works in a two-level search: - a) in a linear search, find the shared image (i.e. DLL) containing - the PC - b) using the FDE table for that shared object, locate the FDE using - binary search (which requires the sorting). */ - -/* The first few fields of a CIE. The CIE_id field is 0 for a CIE, - to distinguish it from a valid FDE. FDEs are aligned to an addressing - unit boundary, but the fields within are unaligned. */ -struct dwarf_cie -{ - uword length; - sword CIE_id; - ubyte version; - unsigned char augmentation __flexarr; -} __attribute__ ((packed, aligned (__alignof__ (void *)))); - -/* The first few fields of an FDE. */ -struct dwarf_fde -{ - uword length; - sword CIE_delta; - unsigned char pc_begin __flexarr; -} __attribute__ ((packed, aligned (__alignof__ (void *)))); - -typedef struct dwarf_fde fde; - -/* Locate the CIE for a given FDE. */ - -static inline struct dwarf_cie * -get_cie (struct dwarf_fde *f) -{ - return (void *)&f->CIE_delta - f->CIE_delta; -} - -static inline fde * -next_fde (fde *f) -{ - return (fde *) ((char *) f + f->length + sizeof (f->length)); -} - -extern fde * _Unwind_Find_FDE (void *, struct dwarf_eh_bases *); - -static inline int -last_fde (struct object *obj __attribute__ ((__unused__)), fde *f) -{ -#ifdef DWARF2_OBJECT_END_PTR_EXTENSION - return (char *)f == obj->fde_end || f->length == 0; -#else - return f->length == 0; -#endif -} diff --git a/sysdeps/generic/unwind-dw2.c b/sysdeps/generic/unwind-dw2.c deleted file mode 100644 index 42b23517d5..0000000000 --- a/sysdeps/generic/unwind-dw2.c +++ /dev/null @@ -1,1306 +0,0 @@ -/* DWARF2 exception handling and frame unwind runtime interface routines. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef _LIBC -#include -#include -#include -#include -#include -#include -#include -#include -#include -#else -#include "tconfig.h" -#include "tsystem.h" -#include "dwarf2.h" -#include "unwind.h" -#include "unwind-pe.h" -#include "unwind-dw2-fde.h" -#include "gthr.h" -#endif - - - -#ifndef STACK_GROWS_DOWNWARD -#define STACK_GROWS_DOWNWARD 0 -#else -#undef STACK_GROWS_DOWNWARD -#define STACK_GROWS_DOWNWARD 1 -#endif - -/* A target can override (perhaps for backward compatibility) how - many dwarf2 columns are unwound. */ -#ifndef DWARF_FRAME_REGISTERS -#define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER -#endif - -/* Dwarf frame registers used for pre gcc 3.0 compiled glibc. */ -#ifndef PRE_GCC3_DWARF_FRAME_REGISTERS -#define PRE_GCC3_DWARF_FRAME_REGISTERS DWARF_FRAME_REGISTERS -#endif - -/* This is the register and unwind state for a particular frame. This - provides the information necessary to unwind up past a frame and return - to its caller. */ -struct _Unwind_Context -{ - void *reg[DWARF_FRAME_REGISTERS+1]; - void *cfa; - void *ra; - void *lsda; - struct dwarf_eh_bases bases; - _Unwind_Word args_size; -}; - -#ifndef _LIBC -/* Byte size of every register managed by these routines. */ -static unsigned char dwarf_reg_size_table[DWARF_FRAME_REGISTERS]; -#endif - - -/* The result of interpreting the frame unwind info for a frame. - This is all symbolic at this point, as none of the values can - be resolved until the target pc is located. */ -typedef struct -{ - /* Each register save state can be described in terms of a CFA slot, - another register, or a location expression. */ - struct frame_state_reg_info - { - struct { - union { - _Unwind_Word reg; - _Unwind_Sword offset; - const unsigned char *exp; - } loc; - enum { - REG_UNSAVED, - REG_SAVED_OFFSET, - REG_SAVED_REG, - REG_SAVED_EXP, - } how; - } reg[DWARF_FRAME_REGISTERS+1]; - - /* Used to implement DW_CFA_remember_state. */ - struct frame_state_reg_info *prev; - } regs; - - /* The CFA can be described in terms of a reg+offset or a - location expression. */ - _Unwind_Sword cfa_offset; - _Unwind_Word cfa_reg; - const unsigned char *cfa_exp; - enum { - CFA_UNSET, - CFA_REG_OFFSET, - CFA_EXP, - } cfa_how; - - /* The PC described by the current frame state. */ - void *pc; - - /* The information we care about from the CIE/FDE. */ - _Unwind_Personality_Fn personality; - _Unwind_Sword data_align; - _Unwind_Word code_align; - unsigned char retaddr_column; - unsigned char fde_encoding; - unsigned char lsda_encoding; - unsigned char saw_z; - void *eh_ptr; -} _Unwind_FrameState; - -/* Read unaligned data from the instruction buffer. */ - -union unaligned -{ - void *p; - unsigned u2 __attribute__ ((mode (HI))); - unsigned u4 __attribute__ ((mode (SI))); - unsigned u8 __attribute__ ((mode (DI))); - signed s2 __attribute__ ((mode (HI))); - signed s4 __attribute__ ((mode (SI))); - signed s8 __attribute__ ((mode (DI))); -} __attribute__ ((packed)); - -static inline void * -read_pointer (const void *p) { const union unaligned *up = p; return up->p; } - -static inline int -read_1u (const void *p) { return *(const unsigned char *) p; } - -static inline int -read_1s (const void *p) { return *(const signed char *) p; } - -static inline int -read_2u (const void *p) { const union unaligned *up = p; return up->u2; } - -static inline int -read_2s (const void *p) { const union unaligned *up = p; return up->s2; } - -static inline unsigned int -read_4u (const void *p) { const union unaligned *up = p; return up->u4; } - -static inline int -read_4s (const void *p) { const union unaligned *up = p; return up->s4; } - -static inline unsigned long -read_8u (const void *p) { const union unaligned *up = p; return up->u8; } - -static inline unsigned long -read_8s (const void *p) { const union unaligned *up = p; return up->s8; } - -/* Get the value of register REG as saved in CONTEXT. */ - -inline _Unwind_Word -_Unwind_GetGR (struct _Unwind_Context *context, int index) -{ - /* This will segfault if the register hasn't been saved. */ - return * (_Unwind_Word *) context->reg[index]; -} - -/* Get the value of the CFA as saved in CONTEXT. */ - -_Unwind_Word -_Unwind_GetCFA (struct _Unwind_Context *context) -{ - return (_Unwind_Ptr) context->cfa; -} - -/* Overwrite the saved value for register REG in CONTEXT with VAL. */ - -inline void -_Unwind_SetGR (struct _Unwind_Context *context, int index, _Unwind_Word val) -{ - * (_Unwind_Word *) context->reg[index] = val; -} - -/* Retrieve the return address for CONTEXT. */ - -inline _Unwind_Ptr -_Unwind_GetIP (struct _Unwind_Context *context) -{ - return (_Unwind_Ptr) context->ra; -} - -/* Overwrite the return address for CONTEXT with VAL. */ - -inline void -_Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr val) -{ - context->ra = (void *) val; -} - -void * -_Unwind_GetLanguageSpecificData (struct _Unwind_Context *context) -{ - return context->lsda; -} - -_Unwind_Ptr -_Unwind_GetRegionStart (struct _Unwind_Context *context) -{ - return (_Unwind_Ptr) context->bases.func; -} - -void * -_Unwind_FindEnclosingFunction (void *pc) -{ - struct dwarf_eh_bases bases; - struct dwarf_fde *fde = _Unwind_Find_FDE (pc-1, &bases); - if (fde) - return bases.func; - else - return NULL; -} - -#ifndef __ia64__ -_Unwind_Ptr -_Unwind_GetDataRelBase (struct _Unwind_Context *context) -{ - return (_Unwind_Ptr) context->bases.dbase; -} - -_Unwind_Ptr -_Unwind_GetTextRelBase (struct _Unwind_Context *context) -{ - return (_Unwind_Ptr) context->bases.tbase; -} -#endif - -/* Extract any interesting information from the CIE for the translation - unit F belongs to. Return a pointer to the byte after the augmentation, - or NULL if we encountered an undecipherable augmentation. */ - -static const unsigned char * -extract_cie_info (struct dwarf_cie *cie, struct _Unwind_Context *context, - _Unwind_FrameState *fs) -{ - const unsigned char *aug = cie->augmentation; - const unsigned char *p = aug + strlen ((const char *) aug) + 1; - const unsigned char *ret = NULL; - _Unwind_Word utmp; - - /* g++ v2 "eh" has pointer immediately following augmentation string, - so it must be handled first. */ - if (aug[0] == 'e' && aug[1] == 'h') - { - fs->eh_ptr = read_pointer (p); - p += sizeof (void *); - aug += 2; - } - - /* Immediately following the augmentation are the code and - data alignment and return address column. */ - p = read_uleb128 (p, &fs->code_align); - p = read_sleb128 (p, &fs->data_align); - fs->retaddr_column = *p++; - fs->lsda_encoding = DW_EH_PE_omit; - - /* If the augmentation starts with 'z', then a uleb128 immediately - follows containing the length of the augmentation field following - the size. */ - if (*aug == 'z') - { - p = read_uleb128 (p, &utmp); - ret = p + utmp; - - fs->saw_z = 1; - ++aug; - } - - /* Iterate over recognized augmentation subsequences. */ - while (*aug != '\0') - { - /* "L" indicates a byte showing how the LSDA pointer is encoded. */ - if (aug[0] == 'L') - { - fs->lsda_encoding = *p++; - aug += 1; - } - - /* "R" indicates a byte indicating how FDE addresses are encoded. */ - else if (aug[0] == 'R') - { - fs->fde_encoding = *p++; - aug += 1; - } - - /* "P" indicates a personality routine in the CIE augmentation. */ - else if (aug[0] == 'P') - { - _Unwind_Ptr personality; - p = read_encoded_value (context, *p, p + 1, &personality); - fs->personality = (_Unwind_Personality_Fn) personality; - aug += 1; - } - - /* Otherwise we have an unknown augmentation string. - Bail unless we saw a 'z' prefix. */ - else - return ret; - } - - return ret ? ret : p; -} - -#ifndef _LIBC -/* Decode a DW_OP stack program. Return the top of stack. Push INITIAL - onto the stack to start. */ - -static _Unwind_Word -execute_stack_op (const unsigned char *op_ptr, const unsigned char *op_end, - struct _Unwind_Context *context, _Unwind_Word initial) -{ - _Unwind_Word stack[64]; /* ??? Assume this is enough. */ - int stack_elt; - - stack[0] = initial; - stack_elt = 1; - - while (op_ptr < op_end) - { - enum dwarf_location_atom op = *op_ptr++; - _Unwind_Word result, reg, utmp; - _Unwind_Sword offset, stmp; - - switch (op) - { - case DW_OP_lit0: - case DW_OP_lit1: - case DW_OP_lit2: - case DW_OP_lit3: - case DW_OP_lit4: - case DW_OP_lit5: - case DW_OP_lit6: - case DW_OP_lit7: - case DW_OP_lit8: - case DW_OP_lit9: - case DW_OP_lit10: - case DW_OP_lit11: - case DW_OP_lit12: - case DW_OP_lit13: - case DW_OP_lit14: - case DW_OP_lit15: - case DW_OP_lit16: - case DW_OP_lit17: - case DW_OP_lit18: - case DW_OP_lit19: - case DW_OP_lit20: - case DW_OP_lit21: - case DW_OP_lit22: - case DW_OP_lit23: - case DW_OP_lit24: - case DW_OP_lit25: - case DW_OP_lit26: - case DW_OP_lit27: - case DW_OP_lit28: - case DW_OP_lit29: - case DW_OP_lit30: - case DW_OP_lit31: - result = op - DW_OP_lit0; - break; - - case DW_OP_addr: - result = (_Unwind_Word) (_Unwind_Ptr) read_pointer (op_ptr); - op_ptr += sizeof (void *); - break; - - case DW_OP_const1u: - result = read_1u (op_ptr); - op_ptr += 1; - break; - case DW_OP_const1s: - result = read_1s (op_ptr); - op_ptr += 1; - break; - case DW_OP_const2u: - result = read_2u (op_ptr); - op_ptr += 2; - break; - case DW_OP_const2s: - result = read_2s (op_ptr); - op_ptr += 2; - break; - case DW_OP_const4u: - result = read_4u (op_ptr); - op_ptr += 4; - break; - case DW_OP_const4s: - result = read_4s (op_ptr); - op_ptr += 4; - break; - case DW_OP_const8u: - result = read_8u (op_ptr); - op_ptr += 8; - break; - case DW_OP_const8s: - result = read_8s (op_ptr); - op_ptr += 8; - break; - case DW_OP_constu: - op_ptr = read_uleb128 (op_ptr, &result); - break; - case DW_OP_consts: - op_ptr = read_sleb128 (op_ptr, &stmp); - result = stmp; - break; - - case DW_OP_reg0: - case DW_OP_reg1: - case DW_OP_reg2: - case DW_OP_reg3: - case DW_OP_reg4: - case DW_OP_reg5: - case DW_OP_reg6: - case DW_OP_reg7: - case DW_OP_reg8: - case DW_OP_reg9: - case DW_OP_reg10: - case DW_OP_reg11: - case DW_OP_reg12: - case DW_OP_reg13: - case DW_OP_reg14: - case DW_OP_reg15: - case DW_OP_reg16: - case DW_OP_reg17: - case DW_OP_reg18: - case DW_OP_reg19: - case DW_OP_reg20: - case DW_OP_reg21: - case DW_OP_reg22: - case DW_OP_reg23: - case DW_OP_reg24: - case DW_OP_reg25: - case DW_OP_reg26: - case DW_OP_reg27: - case DW_OP_reg28: - case DW_OP_reg29: - case DW_OP_reg30: - case DW_OP_reg31: - result = _Unwind_GetGR (context, op - DW_OP_reg0); - break; - case DW_OP_regx: - op_ptr = read_uleb128 (op_ptr, ®); - result = _Unwind_GetGR (context, reg); - break; - - case DW_OP_breg0: - case DW_OP_breg1: - case DW_OP_breg2: - case DW_OP_breg3: - case DW_OP_breg4: - case DW_OP_breg5: - case DW_OP_breg6: - case DW_OP_breg7: - case DW_OP_breg8: - case DW_OP_breg9: - case DW_OP_breg10: - case DW_OP_breg11: - case DW_OP_breg12: - case DW_OP_breg13: - case DW_OP_breg14: - case DW_OP_breg15: - case DW_OP_breg16: - case DW_OP_breg17: - case DW_OP_breg18: - case DW_OP_breg19: - case DW_OP_breg20: - case DW_OP_breg21: - case DW_OP_breg22: - case DW_OP_breg23: - case DW_OP_breg24: - case DW_OP_breg25: - case DW_OP_breg26: - case DW_OP_breg27: - case DW_OP_breg28: - case DW_OP_breg29: - case DW_OP_breg30: - case DW_OP_breg31: - op_ptr = read_sleb128 (op_ptr, &offset); - result = _Unwind_GetGR (context, op - DW_OP_breg0) + offset; - break; - case DW_OP_bregx: - op_ptr = read_uleb128 (op_ptr, ®); - op_ptr = read_sleb128 (op_ptr, &offset); - result = _Unwind_GetGR (context, reg) + offset; - break; - - case DW_OP_dup: - if (stack_elt < 1) - abort (); - result = stack[stack_elt - 1]; - break; - - case DW_OP_drop: - if (--stack_elt < 0) - abort (); - goto no_push; - - case DW_OP_pick: - offset = *op_ptr++; - if (offset >= stack_elt - 1) - abort (); - result = stack[stack_elt - 1 - offset]; - break; - - case DW_OP_over: - if (stack_elt < 2) - abort (); - result = stack[stack_elt - 2]; - break; - - case DW_OP_rot: - { - _Unwind_Word t1, t2, t3; - - if (stack_elt < 3) - abort (); - t1 = stack[stack_elt - 1]; - t2 = stack[stack_elt - 2]; - t3 = stack[stack_elt - 3]; - stack[stack_elt - 1] = t2; - stack[stack_elt - 2] = t3; - stack[stack_elt - 3] = t1; - goto no_push; - } - - case DW_OP_deref: - case DW_OP_deref_size: - case DW_OP_abs: - case DW_OP_neg: - case DW_OP_not: - case DW_OP_plus_uconst: - /* Unary operations. */ - if (--stack_elt < 0) - abort (); - result = stack[stack_elt]; - - switch (op) - { - case DW_OP_deref: - { - void *ptr = (void *) (_Unwind_Ptr) result; - result = (_Unwind_Ptr) read_pointer (ptr); - } - break; - - case DW_OP_deref_size: - { - void *ptr = (void *) (_Unwind_Ptr) result; - switch (*op_ptr++) - { - case 1: - result = read_1u (ptr); - break; - case 2: - result = read_2u (ptr); - break; - case 4: - result = read_4u (ptr); - break; - case 8: - result = read_8u (ptr); - break; - default: - abort (); - } - } - break; - - case DW_OP_abs: - if ((_Unwind_Sword) result < 0) - result = -result; - break; - case DW_OP_neg: - result = -result; - break; - case DW_OP_not: - result = ~result; - break; - case DW_OP_plus_uconst: - op_ptr = read_uleb128 (op_ptr, &utmp); - result += utmp; - break; - - default: - abort (); - } - break; - - case DW_OP_and: - case DW_OP_div: - case DW_OP_minus: - case DW_OP_mod: - case DW_OP_mul: - case DW_OP_or: - case DW_OP_plus: - case DW_OP_le: - case DW_OP_ge: - case DW_OP_eq: - case DW_OP_lt: - case DW_OP_gt: - case DW_OP_ne: - { - /* Binary operations. */ - _Unwind_Word first, second; - if ((stack_elt -= 2) < 0) - abort (); - second = stack[stack_elt]; - first = stack[stack_elt + 1]; - - switch (op) - { - case DW_OP_and: - result = second & first; - break; - case DW_OP_div: - result = (_Unwind_Sword) second / (_Unwind_Sword) first; - break; - case DW_OP_minus: - result = second - first; - break; - case DW_OP_mod: - result = (_Unwind_Sword) second % (_Unwind_Sword) first; - break; - case DW_OP_mul: - result = second * first; - break; - case DW_OP_or: - result = second | first; - break; - case DW_OP_plus: - result = second + first; - break; - case DW_OP_shl: - result = second << first; - break; - case DW_OP_shr: - result = second >> first; - break; - case DW_OP_shra: - result = (_Unwind_Sword) second >> first; - break; - case DW_OP_xor: - result = second ^ first; - break; - case DW_OP_le: - result = (_Unwind_Sword) first <= (_Unwind_Sword) second; - break; - case DW_OP_ge: - result = (_Unwind_Sword) first >= (_Unwind_Sword) second; - break; - case DW_OP_eq: - result = (_Unwind_Sword) first == (_Unwind_Sword) second; - break; - case DW_OP_lt: - result = (_Unwind_Sword) first < (_Unwind_Sword) second; - break; - case DW_OP_gt: - result = (_Unwind_Sword) first > (_Unwind_Sword) second; - break; - case DW_OP_ne: - result = (_Unwind_Sword) first != (_Unwind_Sword) second; - break; - - default: - abort (); - } - } - break; - - case DW_OP_skip: - offset = read_2s (op_ptr); - op_ptr += 2; - op_ptr += offset; - goto no_push; - - case DW_OP_bra: - if (--stack_elt < 0) - abort (); - offset = read_2s (op_ptr); - op_ptr += 2; - if (stack[stack_elt] != 0) - op_ptr += offset; - goto no_push; - - case DW_OP_nop: - goto no_push; - - default: - abort (); - } - - /* Most things push a result value. */ - if ((size_t) stack_elt >= sizeof(stack)/sizeof(*stack)) - abort (); - stack[stack_elt++] = result; - no_push:; - } - - /* We were executing this program to get a value. It should be - at top of stack. */ - if (--stack_elt < 0) - abort (); - return stack[stack_elt]; -} -#endif - -/* Decode DWARF 2 call frame information. Takes pointers the - instruction sequence to decode, current register information and - CIE info, and the PC range to evaluate. */ - -static void -execute_cfa_program (const unsigned char *insn_ptr, - const unsigned char *insn_end, - struct _Unwind_Context *context, - _Unwind_FrameState *fs) -{ - struct frame_state_reg_info *unused_rs = NULL; - - /* Don't allow remember/restore between CIE and FDE programs. */ - fs->regs.prev = NULL; - - /* The comparison with the return address uses < rather than <= because - we are only interested in the effects of code before the call; for a - noreturn function, the return address may point to unrelated code with - a different stack configuration that we are not interested in. We - assume that the call itself is unwind info-neutral; if not, or if - there are delay instructions that adjust the stack, these must be - reflected at the point immediately before the call insn. */ - while (insn_ptr < insn_end && fs->pc < context->ra) - { - unsigned char insn = *insn_ptr++; - _Unwind_Word reg, utmp; - _Unwind_Sword offset, stmp; - - if ((insn & 0xc0) == DW_CFA_advance_loc) - fs->pc += (insn & 0x3f) * fs->code_align; - else if ((insn & 0xc0) == DW_CFA_offset) - { - reg = insn & 0x3f; - insn_ptr = read_uleb128 (insn_ptr, &utmp); - offset = (_Unwind_Sword) utmp * fs->data_align; - fs->regs.reg[reg].how = REG_SAVED_OFFSET; - fs->regs.reg[reg].loc.offset = offset; - } - else if ((insn & 0xc0) == DW_CFA_restore) - { - reg = insn & 0x3f; - fs->regs.reg[reg].how = REG_UNSAVED; - } - else switch (insn) - { - case DW_CFA_set_loc: - { - _Unwind_Ptr pc; - insn_ptr = read_encoded_value (context, fs->fde_encoding, - insn_ptr, &pc); - fs->pc = (void *) pc; - } - break; - - case DW_CFA_advance_loc1: - fs->pc += read_1u (insn_ptr) * fs->code_align; - insn_ptr += 1; - break; - case DW_CFA_advance_loc2: - fs->pc += read_2u (insn_ptr) * fs->code_align; - insn_ptr += 2; - break; - case DW_CFA_advance_loc4: - fs->pc += read_4u (insn_ptr) * fs->code_align; - insn_ptr += 4; - break; - - case DW_CFA_offset_extended: - insn_ptr = read_uleb128 (insn_ptr, ®); - insn_ptr = read_uleb128 (insn_ptr, &utmp); - offset = (_Unwind_Sword) utmp * fs->data_align; - fs->regs.reg[reg].how = REG_SAVED_OFFSET; - fs->regs.reg[reg].loc.offset = offset; - break; - - case DW_CFA_restore_extended: - insn_ptr = read_uleb128 (insn_ptr, ®); - fs->regs.reg[reg].how = REG_UNSAVED; - break; - - case DW_CFA_undefined: - case DW_CFA_same_value: - insn_ptr = read_uleb128 (insn_ptr, ®); - break; - - case DW_CFA_nop: - break; - - case DW_CFA_register: - { - _Unwind_Word reg2; - insn_ptr = read_uleb128 (insn_ptr, ®); - insn_ptr = read_uleb128 (insn_ptr, ®2); - fs->regs.reg[reg].how = REG_SAVED_REG; - fs->regs.reg[reg].loc.reg = reg2; - } - break; - - case DW_CFA_remember_state: - { - struct frame_state_reg_info *new_rs; - if (unused_rs) - { - new_rs = unused_rs; - unused_rs = unused_rs->prev; - } - else - new_rs = __builtin_alloca (sizeof (struct frame_state_reg_info)); - - *new_rs = fs->regs; - fs->regs.prev = new_rs; - } - break; - - case DW_CFA_restore_state: - { - struct frame_state_reg_info *old_rs = fs->regs.prev; -#ifdef _LIBC - if (old_rs == NULL) - __libc_fatal ("invalid DWARF unwind data"); - else -#endif - { - fs->regs = *old_rs; - old_rs->prev = unused_rs; - unused_rs = old_rs; - } - } - break; - - case DW_CFA_def_cfa: - insn_ptr = read_uleb128 (insn_ptr, &fs->cfa_reg); - insn_ptr = read_uleb128 (insn_ptr, &utmp); - fs->cfa_offset = utmp; - fs->cfa_how = CFA_REG_OFFSET; - break; - - case DW_CFA_def_cfa_register: - insn_ptr = read_uleb128 (insn_ptr, &fs->cfa_reg); - fs->cfa_how = CFA_REG_OFFSET; - break; - - case DW_CFA_def_cfa_offset: - insn_ptr = read_uleb128 (insn_ptr, &utmp); - fs->cfa_offset = utmp; - /* cfa_how deliberately not set. */ - break; - - case DW_CFA_def_cfa_expression: - fs->cfa_exp = insn_ptr; - fs->cfa_how = CFA_EXP; - insn_ptr = read_uleb128 (insn_ptr, &utmp); - insn_ptr += utmp; - break; - - case DW_CFA_expression: - insn_ptr = read_uleb128 (insn_ptr, ®); - fs->regs.reg[reg].how = REG_SAVED_EXP; - fs->regs.reg[reg].loc.exp = insn_ptr; - insn_ptr = read_uleb128 (insn_ptr, &utmp); - insn_ptr += utmp; - break; - - /* From the 2.1 draft. */ - case DW_CFA_offset_extended_sf: - insn_ptr = read_uleb128 (insn_ptr, ®); - insn_ptr = read_sleb128 (insn_ptr, &stmp); - offset = stmp * fs->data_align; - fs->regs.reg[reg].how = REG_SAVED_OFFSET; - fs->regs.reg[reg].loc.offset = offset; - break; - - case DW_CFA_def_cfa_sf: - insn_ptr = read_uleb128 (insn_ptr, &fs->cfa_reg); - insn_ptr = read_sleb128 (insn_ptr, &fs->cfa_offset); - fs->cfa_how = CFA_REG_OFFSET; - break; - - case DW_CFA_def_cfa_offset_sf: - insn_ptr = read_sleb128 (insn_ptr, &fs->cfa_offset); - /* cfa_how deliberately not set. */ - break; - - case DW_CFA_GNU_window_save: - /* ??? Hardcoded for SPARC register window configuration. - At least do not do anything for archs which explicitly - define a lower register number. */ -#if DWARF_FRAME_REGISTERS >= 32 - for (reg = 16; reg < 32; ++reg) - { - fs->regs.reg[reg].how = REG_SAVED_OFFSET; - fs->regs.reg[reg].loc.offset = (reg - 16) * sizeof (void *); - } -#endif - break; - - case DW_CFA_GNU_args_size: - insn_ptr = read_uleb128 (insn_ptr, &context->args_size); - break; - - case DW_CFA_GNU_negative_offset_extended: - /* Obsoleted by DW_CFA_offset_extended_sf, but used by - older PowerPC code. */ - insn_ptr = read_uleb128 (insn_ptr, ®); - insn_ptr = read_uleb128 (insn_ptr, &utmp); - offset = (_Unwind_Word) utmp * fs->data_align; - fs->regs.reg[reg].how = REG_SAVED_OFFSET; - fs->regs.reg[reg].loc.offset = -offset; - break; - - default: - abort (); - } - } -} - -/* Given the _Unwind_Context CONTEXT for a stack frame, look up the FDE for - its caller and decode it into FS. This function also sets the - args_size and lsda members of CONTEXT, as they are really information - about the caller's frame. */ - -static _Unwind_Reason_Code -uw_frame_state_for (struct _Unwind_Context *context, _Unwind_FrameState *fs) -{ - struct dwarf_fde *fde; - struct dwarf_cie *cie; - const unsigned char *aug, *insn, *end; - - memset (fs, 0, sizeof (*fs)); - context->args_size = 0; - context->lsda = 0; - - fde = _Unwind_Find_FDE (context->ra - 1, &context->bases); - if (fde == NULL) - { - /* Couldn't find frame unwind info for this function. Try a - target-specific fallback mechanism. This will necessarily - not provide a personality routine or LSDA. */ -#ifdef MD_FALLBACK_FRAME_STATE_FOR - MD_FALLBACK_FRAME_STATE_FOR (context, fs, success); - return _URC_END_OF_STACK; - success: - return _URC_NO_REASON; -#else - return _URC_END_OF_STACK; -#endif - } - - fs->pc = context->bases.func; - - cie = get_cie (fde); - insn = extract_cie_info (cie, context, fs); - if (insn == NULL) - /* CIE contained unknown augmentation. */ - return _URC_FATAL_PHASE1_ERROR; - - /* First decode all the insns in the CIE. */ - end = (unsigned char *) next_fde ((struct dwarf_fde *) cie); - execute_cfa_program (insn, end, context, fs); - - /* Locate augmentation for the fde. */ - aug = (unsigned char *) fde + sizeof (*fde); - aug += 2 * size_of_encoded_value (fs->fde_encoding); - insn = NULL; - if (fs->saw_z) - { - _Unwind_Word i; - aug = read_uleb128 (aug, &i); - insn = aug + i; - } - if (fs->lsda_encoding != DW_EH_PE_omit) - { - _Unwind_Ptr lsda; - aug = read_encoded_value (context, fs->lsda_encoding, aug, &lsda); - context->lsda = (void *) lsda; - } - - /* Then the insns in the FDE up to our target PC. */ - if (insn == NULL) - insn = aug; - end = (unsigned char *) next_fde (fde); - execute_cfa_program (insn, end, context, fs); - - return _URC_NO_REASON; -} - -typedef struct frame_state -{ - void *cfa; - void *eh_ptr; - long cfa_offset; - long args_size; - long reg_or_offset[PRE_GCC3_DWARF_FRAME_REGISTERS+1]; - unsigned short cfa_reg; - unsigned short retaddr_column; - char saved[PRE_GCC3_DWARF_FRAME_REGISTERS+1]; -} frame_state; - -#ifndef STATIC -# define STATIC -#endif - -STATIC -struct frame_state * __frame_state_for (void *, struct frame_state *); - -/* Called from pre-G++ 3.0 __throw to find the registers to restore for - a given PC_TARGET. The caller should allocate a local variable of - `struct frame_state' and pass its address to STATE_IN. */ - -STATIC -struct frame_state * -__frame_state_for (void *pc_target, struct frame_state *state_in) -{ - struct _Unwind_Context context; - _Unwind_FrameState fs; - int reg; - - memset (&context, 0, sizeof (struct _Unwind_Context)); - context.ra = pc_target + 1; - - if (uw_frame_state_for (&context, &fs) != _URC_NO_REASON) - return 0; - - /* We have no way to pass a location expression for the CFA to our - caller. It wouldn't understand it anyway. */ - if (fs.cfa_how == CFA_EXP) - return 0; - - for (reg = 0; reg < PRE_GCC3_DWARF_FRAME_REGISTERS + 1; reg++) - { - state_in->saved[reg] = fs.regs.reg[reg].how; - switch (state_in->saved[reg]) - { - case REG_SAVED_REG: - state_in->reg_or_offset[reg] = fs.regs.reg[reg].loc.reg; - break; - case REG_SAVED_OFFSET: - state_in->reg_or_offset[reg] = fs.regs.reg[reg].loc.offset; - break; - default: - state_in->reg_or_offset[reg] = 0; - break; - } - } - - state_in->cfa_offset = fs.cfa_offset; - state_in->cfa_reg = fs.cfa_reg; - state_in->retaddr_column = fs.retaddr_column; - state_in->args_size = context.args_size; - state_in->eh_ptr = fs.eh_ptr; - - return state_in; -} - -#ifndef _LIBC - -static void -uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs) -{ - struct _Unwind_Context orig_context = *context; - void *cfa; - long i; - -#ifdef EH_RETURN_STACKADJ_RTX - /* Special handling here: Many machines do not use a frame pointer, - and track the CFA only through offsets from the stack pointer from - one frame to the next. In this case, the stack pointer is never - stored, so it has no saved address in the context. What we do - have is the CFA from the previous stack frame. - - In very special situations (such as unwind info for signal return), - there may be location expressions that use the stack pointer as well. - - Do this conditionally for one frame. This allows the unwind info - for one frame to save a copy of the stack pointer from the previous - frame, and be able to use much easier CFA mechanisms to do it. - Always zap the saved stack pointer value for the next frame; carrying - the value over from one frame to another doesn't make sense. */ - - _Unwind_Word tmp_sp; - - if (!orig_context.reg[__builtin_dwarf_sp_column ()]) - { - tmp_sp = (_Unwind_Ptr) context->cfa; - orig_context.reg[__builtin_dwarf_sp_column ()] = &tmp_sp; - } - context->reg[__builtin_dwarf_sp_column ()] = NULL; -#endif - - /* Compute this frame's CFA. */ - switch (fs->cfa_how) - { - case CFA_REG_OFFSET: - cfa = (void *) (_Unwind_Ptr) _Unwind_GetGR (&orig_context, fs->cfa_reg); - cfa += fs->cfa_offset; - break; - - case CFA_EXP: - { - const unsigned char *exp = fs->cfa_exp; - _Unwind_Word len; - - exp = read_uleb128 (exp, &len); - cfa = (void *) (_Unwind_Ptr) - execute_stack_op (exp, exp + len, &orig_context, 0); - break; - } - - default: - abort (); - } - context->cfa = cfa; - - /* Compute the addresses of all registers saved in this frame. */ - for (i = 0; i < DWARF_FRAME_REGISTERS + 1; ++i) - switch (fs->regs.reg[i].how) - { - case REG_UNSAVED: - break; - - case REG_SAVED_OFFSET: - context->reg[i] = cfa + fs->regs.reg[i].loc.offset; - break; - - case REG_SAVED_REG: - context->reg[i] = orig_context.reg[fs->regs.reg[i].loc.reg]; - break; - - case REG_SAVED_EXP: - { - const unsigned char *exp = fs->regs.reg[i].loc.exp; - _Unwind_Word len; - _Unwind_Ptr val; - - exp = read_uleb128 (exp, &len); - val = execute_stack_op (exp, exp + len, &orig_context, - (_Unwind_Ptr) cfa); - context->reg[i] = (void *) val; - } - break; - } -} - -/* CONTEXT describes the unwind state for a frame, and FS describes the FDE - of its caller. Update CONTEXT to refer to the caller as well. Note - that the args_size and lsda members are not updated here, but later in - uw_frame_state_for. */ - -static void -uw_update_context (struct _Unwind_Context *context, _Unwind_FrameState *fs) -{ - uw_update_context_1 (context, fs); - - /* Compute the return address now, since the return address column - can change from frame to frame. */ - context->ra = __builtin_extract_return_addr - ((void *) (_Unwind_Ptr) _Unwind_GetGR (context, fs->retaddr_column)); -} - -/* Fill in CONTEXT for top-of-stack. The only valid registers at this - level will be the return address and the CFA. */ - -#define uw_init_context(CONTEXT) \ - do \ - { \ - /* Do any necessary initialization to access arbitrary stack frames. \ - On the SPARC, this means flushing the register windows. */ \ - __builtin_unwind_init (); \ - uw_init_context_1 (CONTEXT, __builtin_dwarf_cfa (), \ - __builtin_return_address (0)); \ - } \ - while (0) - -static void -uw_init_context_1 (struct _Unwind_Context *context, - void *outer_cfa, void *outer_ra) -{ - void *ra = __builtin_extract_return_addr (__builtin_return_address (0)); - _Unwind_FrameState fs; - _Unwind_Word sp_slot; - - memset (context, 0, sizeof (struct _Unwind_Context)); - context->ra = ra; - - if (uw_frame_state_for (context, &fs) != _URC_NO_REASON) - abort (); - - /* Force the frame state to use the known cfa value. */ - sp_slot = (_Unwind_Ptr) outer_cfa; - context->reg[__builtin_dwarf_sp_column ()] = &sp_slot; - fs.cfa_how = CFA_REG_OFFSET; - fs.cfa_reg = __builtin_dwarf_sp_column (); - fs.cfa_offset = 0; - - uw_update_context_1 (context, &fs); - - /* If the return address column was saved in a register in the - initialization context, then we can't see it in the given - call frame data. So have the initialization context tell us. */ - context->ra = __builtin_extract_return_addr (outer_ra); -} - - -/* Install TARGET into CURRENT so that we can return to it. This is a - macro because __builtin_eh_return must be invoked in the context of - our caller. */ - -#define uw_install_context(CURRENT, TARGET) \ - do \ - { \ - long offset = uw_install_context_1 ((CURRENT), (TARGET)); \ - void *handler = __builtin_frob_return_addr ((TARGET)->ra); \ - __builtin_eh_return (offset, handler); \ - } \ - while (0) - -static inline void -init_dwarf_reg_size_table (void) -{ - __builtin_init_dwarf_reg_size_table (dwarf_reg_size_table); -} - -static long -uw_install_context_1 (struct _Unwind_Context *current, - struct _Unwind_Context *target) -{ - long i; - -#if __GTHREADS - { - static __gthread_once_t once_regsizes = __GTHREAD_ONCE_INIT; - if (__gthread_once (&once_regsizes, init_dwarf_reg_size_table) != 0 - || dwarf_reg_size_table[0] == 0) - init_dwarf_reg_size_table (); - } -#else - if (dwarf_reg_size_table[0] == 0) - init_dwarf_reg_size_table (); -#endif - - for (i = 0; i < DWARF_FRAME_REGISTERS; ++i) - { - void *c = current->reg[i]; - void *t = target->reg[i]; - if (t && c && t != c) - memcpy (c, t, dwarf_reg_size_table[i]); - } - -#ifdef EH_RETURN_STACKADJ_RTX - { - void *target_cfa; - - /* If the last frame records a saved stack pointer, use it. */ - if (target->reg[__builtin_dwarf_sp_column ()]) - target_cfa = (void *)(_Unwind_Ptr) - _Unwind_GetGR (target, __builtin_dwarf_sp_column ()); - else - target_cfa = target->cfa; - - /* We adjust SP by the difference between CURRENT and TARGET's CFA. */ - if (STACK_GROWS_DOWNWARD) - return target_cfa - current->cfa + target->args_size; - else - return current->cfa - target_cfa - target->args_size; - } -#else - return 0; -#endif -} - -static inline _Unwind_Ptr -uw_identify_context (struct _Unwind_Context *context) -{ - return _Unwind_GetIP (context); -} - - -#include "unwind.inc" - -#endif /* _LIBC */ diff --git a/sysdeps/generic/unwind-pe.c b/sysdeps/generic/unwind-pe.c deleted file mode 100644 index 4085eb2bd1..0000000000 --- a/sysdeps/generic/unwind-pe.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include - -#define _LIBC_DEFINITIONS -#include "unwind-pe.h" diff --git a/sysdeps/generic/unwind-pe.h b/sysdeps/generic/unwind-pe.h deleted file mode 100644 index 4e2aa12074..0000000000 --- a/sysdeps/generic/unwind-pe.h +++ /dev/null @@ -1,305 +0,0 @@ -/* Exception handling and frame unwind runtime interface routines. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* @@@ Really this should be out of line, but this also causes link - compatibility problems with the base ABI. This is slightly better - than duplicating code, however. */ - -/* If using C++, references to abort have to be qualified with std::. */ -#ifdef __cplusplus -#define __gxx_abort std::abort -#else -#define __gxx_abort abort -#endif - -/* Pointer encodings, from dwarf2.h. */ -#define DW_EH_PE_absptr 0x00 -#define DW_EH_PE_omit 0xff - -#define DW_EH_PE_uleb128 0x01 -#define DW_EH_PE_udata2 0x02 -#define DW_EH_PE_udata4 0x03 -#define DW_EH_PE_udata8 0x04 -#define DW_EH_PE_sleb128 0x09 -#define DW_EH_PE_sdata2 0x0A -#define DW_EH_PE_sdata4 0x0B -#define DW_EH_PE_sdata8 0x0C -#define DW_EH_PE_signed 0x08 - -#define DW_EH_PE_pcrel 0x10 -#define DW_EH_PE_textrel 0x20 -#define DW_EH_PE_datarel 0x30 -#define DW_EH_PE_funcrel 0x40 -#define DW_EH_PE_aligned 0x50 - -#define DW_EH_PE_indirect 0x80 - - -#if defined(_LIBC) - -/* Prototypes. */ -extern unsigned int size_of_encoded_value (unsigned char encoding) - attribute_hidden; - -extern const unsigned char *read_encoded_value_with_base - (unsigned char encoding, _Unwind_Ptr base, - const unsigned char *p, _Unwind_Ptr *val) - attribute_hidden; - -extern const unsigned char * read_encoded_value - (struct _Unwind_Context *context, unsigned char encoding, - const unsigned char *p, _Unwind_Ptr *val) - attribute_hidden; - -extern const unsigned char * read_uleb128 (const unsigned char *p, - _Unwind_Word *val) - attribute_hidden; -extern const unsigned char * read_sleb128 (const unsigned char *p, - _Unwind_Sword *val) - attribute_hidden; - -#endif -#if defined(_LIBC) && defined(_LIBC_DEFINITIONS) - -#ifdef _LIBC -#define STATIC -#else -#define STATIC static -#endif - -/* Given an encoding, return the number of bytes the format occupies. - This is only defined for fixed-size encodings, and so does not - include leb128. */ - -STATIC unsigned int -size_of_encoded_value (unsigned char encoding) -{ - if (encoding == DW_EH_PE_omit) - return 0; - - switch (encoding & 0x07) - { - case DW_EH_PE_absptr: - return sizeof (void *); - case DW_EH_PE_udata2: - return 2; - case DW_EH_PE_udata4: - return 4; - case DW_EH_PE_udata8: - return 8; - } - __gxx_abort (); -} - -#ifndef NO_BASE_OF_ENCODED_VALUE - -/* Given an encoding and an _Unwind_Context, return the base to which - the encoding is relative. This base may then be passed to - read_encoded_value_with_base for use when the _Unwind_Context is - not available. */ - -STATIC _Unwind_Ptr -base_of_encoded_value (unsigned char encoding, struct _Unwind_Context *context) -{ - if (encoding == DW_EH_PE_omit) - return 0; - - switch (encoding & 0x70) - { - case DW_EH_PE_absptr: - case DW_EH_PE_pcrel: - case DW_EH_PE_aligned: - return 0; - - case DW_EH_PE_textrel: - return _Unwind_GetTextRelBase (context); - case DW_EH_PE_datarel: - return _Unwind_GetDataRelBase (context); - case DW_EH_PE_funcrel: - return _Unwind_GetRegionStart (context); - } - __gxx_abort (); -} - -#endif - -/* Read an unsigned leb128 value from P, store the value in VAL, return - P incremented past the value. We assume that a word is large enough to - hold any value so encoded; if it is smaller than a pointer on some target, - pointers should not be leb128 encoded on that target. */ - -STATIC const unsigned char * -read_uleb128 (const unsigned char *p, _Unwind_Word *val) -{ - unsigned int shift = 0; - unsigned char byte; - _Unwind_Word result; - - result = 0; - do - { - byte = *p++; - result |= (byte & 0x7f) << shift; - shift += 7; - } - while (byte & 0x80); - - *val = result; - return p; -} - -/* Similar, but read a signed leb128 value. */ - -STATIC const unsigned char * -read_sleb128 (const unsigned char *p, _Unwind_Sword *val) -{ - unsigned int shift = 0; - unsigned char byte; - _Unwind_Word result; - - result = 0; - do - { - byte = *p++; - result |= (byte & 0x7f) << shift; - shift += 7; - } - while (byte & 0x80); - - /* Sign-extend a negative value. */ - if (shift < 8 * sizeof(result) && (byte & 0x40) != 0) - result |= -(1L << shift); - - *val = (_Unwind_Sword) result; - return p; -} - -/* Load an encoded value from memory at P. The value is returned in VAL; - The function returns P incremented past the value. BASE is as given - by base_of_encoded_value for this encoding in the appropriate context. */ - -STATIC const unsigned char * -read_encoded_value_with_base (unsigned char encoding, _Unwind_Ptr base, - const unsigned char *p, _Unwind_Ptr *val) -{ - union unaligned - { - void *ptr; - unsigned u2 __attribute__ ((mode (HI))); - unsigned u4 __attribute__ ((mode (SI))); - unsigned u8 __attribute__ ((mode (DI))); - signed s2 __attribute__ ((mode (HI))); - signed s4 __attribute__ ((mode (SI))); - signed s8 __attribute__ ((mode (DI))); - } __attribute__((__packed__)); - - union unaligned *u = (union unaligned *) p; - _Unwind_Internal_Ptr result; - - if (encoding == DW_EH_PE_aligned) - { - _Unwind_Internal_Ptr a = (_Unwind_Internal_Ptr) p; - a = (a + sizeof (void *) - 1) & - sizeof(void *); - result = *(_Unwind_Internal_Ptr *) a; - p = (const unsigned char *) (a + sizeof (void *)); - } - else - { - switch (encoding & 0x0f) - { - case DW_EH_PE_absptr: - result = (_Unwind_Internal_Ptr) u->ptr; - p += sizeof (void *); - break; - - case DW_EH_PE_uleb128: - { - _Unwind_Word tmp; - p = read_uleb128 (p, &tmp); - result = (_Unwind_Internal_Ptr) tmp; - } - break; - - case DW_EH_PE_sleb128: - { - _Unwind_Sword tmp; - p = read_sleb128 (p, &tmp); - result = (_Unwind_Internal_Ptr) tmp; - } - break; - - case DW_EH_PE_udata2: - result = u->u2; - p += 2; - break; - case DW_EH_PE_udata4: - result = u->u4; - p += 4; - break; - case DW_EH_PE_udata8: - result = u->u8; - p += 8; - break; - - case DW_EH_PE_sdata2: - result = u->s2; - p += 2; - break; - case DW_EH_PE_sdata4: - result = u->s4; - p += 4; - break; - case DW_EH_PE_sdata8: - result = u->s8; - p += 8; - break; - - default: - __gxx_abort (); - } - - if (result != 0) - { - result += ((encoding & 0x70) == DW_EH_PE_pcrel - ? (_Unwind_Internal_Ptr) u : base); - if (encoding & DW_EH_PE_indirect) - result = *(_Unwind_Internal_Ptr *) result; - } - } - - *val = result; - return p; -} - -#ifndef NO_BASE_OF_ENCODED_VALUE - -/* Like read_encoded_value_with_base, but get the base from the context - rather than providing it directly. */ - -STATIC const unsigned char * -read_encoded_value (struct _Unwind_Context *context, unsigned char encoding, - const unsigned char *p, _Unwind_Ptr *val) -{ - return read_encoded_value_with_base (encoding, - base_of_encoded_value (encoding, context), - p, val); -} - -#endif -#endif /* _LIBC */ diff --git a/sysdeps/generic/unwind-resume.h b/sysdeps/generic/unwind-resume.h deleted file mode 100644 index 8da6563fad..0000000000 --- a/sysdeps/generic/unwind-resume.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Definitions for unwind-resume.c. Generic version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -/* These describe the arguments to unwinder personality functions, - specifically __gcc_personality_v0. A machine-specific sysdeps - file might define them differently. */ -#define PERSONALITY_PROTO \ - (int version, _Unwind_Action actions, \ - _Unwind_Exception_Class exception_class, \ - struct _Unwind_Exception *ue_header, \ - struct _Unwind_Context *context) -#define PERSONALITY_ARGS \ - (version, actions, exception_class, ue_header, context) - -/* This is defined nonzero by a machine-specific sysdeps file if - _Unwind_Resume is provided separately and thus the generic C - version should not be defined. */ -#define HAVE_ARCH_UNWIND_RESUME 0 diff --git a/sysdeps/generic/unwind.h b/sysdeps/generic/unwind.h deleted file mode 100644 index 37ec61e33b..0000000000 --- a/sysdeps/generic/unwind.h +++ /dev/null @@ -1,219 +0,0 @@ -/* Exception handling and frame unwind runtime interface routines. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This is derived from the C++ ABI for IA-64. Where we diverge - for cross-architecture compatibility are noted with "@@@". */ - -#ifndef _UNWIND_H -#define _UNWIND_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* Level 1: Base ABI */ - -/* @@@ The IA-64 ABI uses uint64 throughout. Most places this is - inefficient for 32-bit and smaller machines. */ -typedef unsigned _Unwind_Word __attribute__((__mode__(__unwind_word__))); -typedef signed _Unwind_Sword __attribute__((__mode__(__unwind_word__))); -#if defined(__ia64__) && defined(__hpux__) -typedef unsigned _Unwind_Ptr __attribute__((__mode__(__word__))); -#else -typedef unsigned _Unwind_Ptr __attribute__((__mode__(__pointer__))); -#endif -typedef unsigned _Unwind_Internal_Ptr __attribute__((__mode__(__pointer__))); - -/* @@@ The IA-64 ABI uses a 64-bit word to identify the producer and - consumer of an exception. We'll go along with this for now even on - 32-bit machines. We'll need to provide some other option for - 16-bit machines and for machines with > 8 bits per byte. */ -typedef unsigned _Unwind_Exception_Class __attribute__((__mode__(__DI__))); - -/* The unwind interface uses reason codes in several contexts to - identify the reasons for failures or other actions. */ -typedef enum -{ - _URC_NO_REASON = 0, - _URC_FOREIGN_EXCEPTION_CAUGHT = 1, - _URC_FATAL_PHASE2_ERROR = 2, - _URC_FATAL_PHASE1_ERROR = 3, - _URC_NORMAL_STOP = 4, - _URC_END_OF_STACK = 5, - _URC_HANDLER_FOUND = 6, - _URC_INSTALL_CONTEXT = 7, - _URC_CONTINUE_UNWIND = 8 -} _Unwind_Reason_Code; - - -/* The unwind interface uses a pointer to an exception header object - as its representation of an exception being thrown. In general, the - full representation of an exception object is language- and - implementation-specific, but it will be prefixed by a header - understood by the unwind interface. */ - -struct _Unwind_Exception; - -typedef void (*_Unwind_Exception_Cleanup_Fn) (_Unwind_Reason_Code, - struct _Unwind_Exception *); - -struct _Unwind_Exception -{ - _Unwind_Exception_Class exception_class; - _Unwind_Exception_Cleanup_Fn exception_cleanup; - _Unwind_Word private_1; - _Unwind_Word private_2; - - /* @@@ The IA-64 ABI says that this structure must be double-word aligned. - Taking that literally does not make much sense generically. Instead we - provide the maximum alignment required by any type for the machine. */ -} __attribute__((__aligned__)); - - -/* The ACTIONS argument to the personality routine is a bitwise OR of one - or more of the following constants. */ -typedef int _Unwind_Action; - -#define _UA_SEARCH_PHASE 1 -#define _UA_CLEANUP_PHASE 2 -#define _UA_HANDLER_FRAME 4 -#define _UA_FORCE_UNWIND 8 -#define _UA_END_OF_STACK 16 - -/* This is an opaque type used to refer to a system-specific data - structure used by the system unwinder. This context is created and - destroyed by the system, and passed to the personality routine - during unwinding. */ -struct _Unwind_Context; - -/* Raise an exception, passing along the given exception object. */ -extern _Unwind_Reason_Code _Unwind_RaiseException (struct _Unwind_Exception *); - -/* Raise an exception for forced unwinding. */ - -typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn) - (int, _Unwind_Action, _Unwind_Exception_Class, - struct _Unwind_Exception *, struct _Unwind_Context *, void *); - -extern _Unwind_Reason_Code _Unwind_ForcedUnwind (struct _Unwind_Exception *, - _Unwind_Stop_Fn, - void *); - -/* Helper to invoke the exception_cleanup routine. */ -extern void _Unwind_DeleteException (struct _Unwind_Exception *); - -/* Resume propagation of an existing exception. This is used after - e.g. executing cleanup code, and not to implement rethrowing. */ -extern void _Unwind_Resume (struct _Unwind_Exception *); - -/* @@@ Use unwind data to perform a stack backtrace. The trace callback - is called for every stack frame in the call chain, but no cleanup - actions are performed. */ -typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn) - (struct _Unwind_Context *, void *); - -extern _Unwind_Reason_Code _Unwind_Backtrace (_Unwind_Trace_Fn, void *); - -/* These functions are used for communicating information about the unwind - context (i.e. the unwind descriptors and the user register state) between - the unwind library and the personality routine and landing pad. Only - selected registers maybe manipulated. */ - -extern _Unwind_Word _Unwind_GetGR (struct _Unwind_Context *, int); -extern void _Unwind_SetGR (struct _Unwind_Context *, int, _Unwind_Word); - -extern _Unwind_Ptr _Unwind_GetIP (struct _Unwind_Context *); -extern void _Unwind_SetIP (struct _Unwind_Context *, _Unwind_Ptr); - -/* @@@ Retrieve the CFA of the given context. */ -extern _Unwind_Word _Unwind_GetCFA (struct _Unwind_Context *); - -extern void *_Unwind_GetLanguageSpecificData (struct _Unwind_Context *); - -extern _Unwind_Ptr _Unwind_GetRegionStart (struct _Unwind_Context *); - - -/* The personality routine is the function in the C++ (or other language) - runtime library which serves as an interface between the system unwind - library and language-specific exception handling semantics. It is - specific to the code fragment described by an unwind info block, and - it is always referenced via the pointer in the unwind info block, and - hence it has no ABI-specified name. - - Note that this implies that two different C++ implementations can - use different names, and have different contents in the language - specific data area. Moreover, that the language specific data - area contains no version info because name of the function invoked - provides more effective versioning by detecting at link time the - lack of code to handle the different data format. */ - -typedef _Unwind_Reason_Code (*_Unwind_Personality_Fn) - (int, _Unwind_Action, _Unwind_Exception_Class, - struct _Unwind_Exception *, struct _Unwind_Context *); - -/* @@@ The following alternate entry points are for setjmp/longjmp - based unwinding. */ - -struct SjLj_Function_Context; -extern void _Unwind_SjLj_Register (struct SjLj_Function_Context *); -extern void _Unwind_SjLj_Unregister (struct SjLj_Function_Context *); - -extern _Unwind_Reason_Code _Unwind_SjLj_RaiseException - (struct _Unwind_Exception *); -extern _Unwind_Reason_Code _Unwind_SjLj_ForcedUnwind - (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *); -extern void _Unwind_SjLj_Resume (struct _Unwind_Exception *); - -/* @@@ The following provide access to the base addresses for text - and data-relative addressing in the LDSA. In order to stay link - compatible with the standard ABI for IA-64, we inline these. */ - -#ifdef __ia64__ -#include - -static inline _Unwind_Ptr -_Unwind_GetDataRelBase (struct _Unwind_Context *_C) -{ - /* The GP is stored in R1. */ - return _Unwind_GetGR (_C, 1); -} - -static inline _Unwind_Ptr -_Unwind_GetTextRelBase (struct _Unwind_Context *_C) -{ - abort (); - return 0; -} - -/* @@@ Retrieve the Backing Store Pointer of the given context. */ -extern _Unwind_Word _Unwind_GetBSP (struct _Unwind_Context *); -#else -extern _Unwind_Ptr _Unwind_GetDataRelBase (struct _Unwind_Context *); -extern _Unwind_Ptr _Unwind_GetTextRelBase (struct _Unwind_Context *); -#endif - -/* @@@ Given an address, return the entry point of the function that - contains it. */ -extern void * _Unwind_FindEnclosingFunction (void *pc); - -#ifdef __cplusplus -} -#endif - -#endif /* unwind.h */ diff --git a/sysdeps/generic/utmp-equal.h b/sysdeps/generic/utmp-equal.h deleted file mode 100644 index 6205bbb365..0000000000 --- a/sysdeps/generic/utmp-equal.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Helper function for utmp functions to see if two entries are equal. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper - and Paul Janzen , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "utmp-private.h" - -/* Test whether two entries match. */ -static int -__utmp_equal (const struct utmp *entry, const struct utmp *match) -{ - return - ( -#if _HAVE_UT_TYPE - 0 - (entry->ut_type == INIT_PROCESS - || entry->ut_type == LOGIN_PROCESS - || entry->ut_type == USER_PROCESS - || entry->ut_type == DEAD_PROCESS) - && - (match->ut_type == INIT_PROCESS - || match->ut_type == LOGIN_PROCESS - || match->ut_type == USER_PROCESS - || match->ut_type == DEAD_PROCESS) - && -#endif -#if _HAVE_UT_ID - 0 - (entry->ut_id[0] && match->ut_id[0] - ? strncmp (entry->ut_id, match->ut_id, sizeof match->ut_id) == 0 - : strncmp (entry->ut_line, match->ut_line, sizeof match->ut_line) == 0) -#else - strncmp (entry->ut_line, match->ut_line, sizeof match->ut_line) == 0 -#endif - ); -} diff --git a/sysdeps/gnu/Makefile b/sysdeps/gnu/Makefile deleted file mode 100644 index da6ddab150..0000000000 --- a/sysdeps/gnu/Makefile +++ /dev/null @@ -1,89 +0,0 @@ -# Copyright (C) 1996-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -# Generate the list of strings for errno codes from the section of the -# manual which documents the codes. - -$(..)sysdeps/gnu/errlist.c: $(..)sysdeps/gnu/errlist.awk \ - $(..)manual/errno.texi - $(AWK) -f $^ > $@-tmp -# Make it unwritable so noone will edit it by mistake. - -chmod a-w $@-tmp - mv -f $@-tmp $@ - -ifeq ($(subdir),stdio-common) - -errlist-c = $(firstword $(wildcard $(addsuffix /errlist.c,$(sysdirs) .))) - -libof-errlist-compat = extramodules - -ifeq ($(build-shared),yes) -$(objpfx)errlist-compat.c: $(errlist-c) $(..)sysdeps/gnu/errlist-compat.awk \ - $(common-objpfx)Versions.v.i $(before-compile) -else -$(objpfx)errlist-compat.c: $(errlist-c) $(..)sysdeps/gnu/errlist-compat.awk \ - $(before-compile) -endif - $(make-target-directory) - $(AWK) -v maxerr=`\ - $(CC) -S $(CPPFLAGS) $(CFLAGS) -DEMIT_ERR_MAX $< -o - \ - | sed -n 's/^.*@@@[^0-9]*\([0-9]*\)[^0-9]*@@@.*$$/\1/p'` \ - -f $(..)sysdeps/gnu/errlist-compat.awk \ - $(wildcard $(sysdirs:=/Versions)) > $@T -# Make it unwritable so noone will edit it by mistake. - -chmod a-w $@T - mv -f $@T $@ -$(objpfx)errlist-compat.h: $(objpfx)errlist-compat.c - sed -n '1p;/ERR_MAX/p' $< > $@T - -chmod a-w $@T - mv -f $@T $@ -generated += errlist-compat.c errlist-compat.h - -# This will force the generation above to happy if need be. -$(foreach o,$(object-suffixes) $(object-suffixes:=.d),\ - $(objpfx)errlist$o): $(objpfx)errlist-compat.h -endif - -ifeq ($(subdir),login) -sysdep_routines += setutxent getutxent endutxent getutxid getutxline \ - pututxline utmpxname updwtmpx getutmpx getutmp - -sysdep_headers += utmpx.h bits/utmpx.h -endif - - -ifeq ($(subdir),inet) -sysdep_headers += netinet/udp.h netinet/ip_icmp.h -endif - - -ifeq ($(subdir),misc) -sysdep_headers += sys/mtio.h -endif - - -ifeq ($(subdir),csu) -routines += unwind-resume -shared-only-routines += unwind-resume -CFLAGS-unwind-resume.c += -fexceptions -fasynchronous-unwind-tables -endif - -ifeq ($(subdir),rt) -librt-sysdep_routines += rt-unwind-resume -librt-shared-only-routines += rt-unwind-resume -CFLAGS-rt-unwind-resume.c += -fexceptions -fasynchronous-unwind-tables -endif diff --git a/sysdeps/gnu/bits/ipc.h b/sysdeps/gnu/bits/ipc.h deleted file mode 100644 index c83f0fc3f8..0000000000 --- a/sysdeps/gnu/bits/ipc.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IPC_H -# error "Never use directly; include instead." -#endif - -#include - -/* Mode bits for `msgget', `semget', and `shmget'. */ -#define IPC_CREAT 01000 /* Create key if key does not exist. */ -#define IPC_EXCL 02000 /* Fail if key exists. */ -#define IPC_NOWAIT 04000 /* Return error on wait. */ - -/* Control commands for `msgctl', `semctl', and `shmctl'. */ -#define IPC_RMID 0 /* Remove identifier. */ -#define IPC_SET 1 /* Set `ipc_perm' options. */ -#define IPC_STAT 2 /* Get `ipc_perm' options. */ -#ifdef __USE_GNU -# define IPC_INFO 3 /* See ipcs. */ -#endif - -/* Special key values. */ -#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ - - -/* Data structure used to pass permission information to IPC operations. */ -struct ipc_perm - { - __key_t __key; /* Key. */ - unsigned short int uid; /* Owner's user ID. */ - unsigned short int gid; /* Owner's group ID. */ - unsigned short int cuid; /* Creator's user ID. */ - unsigned short int cgid; /* Creator's group ID. */ - unsigned short int mode; /* Read/write permission. */ - unsigned short int __seq; /* Sequence number. */ - }; diff --git a/sysdeps/gnu/bits/msq.h b/sysdeps/gnu/bits/msq.h deleted file mode 100644 index a2f3b8d27c..0000000000 --- a/sysdeps/gnu/bits/msq.h +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_MSG_H -# error "Never use directly; include instead." -#endif - -#include -#include - -/* Define options for message queue functions. */ -#define MSG_NOERROR 010000 /* no error if message is too big */ -#ifdef __USE_GNU -# define MSG_EXCEPT 020000 /* recv any msg except of specified type */ -#endif - -/* Types used in the structure definition. */ -typedef unsigned short int msgqnum_t; -typedef unsigned short int msglen_t; - - -/* Structure of record for one message inside the kernel. - The type `struct msg' is opaque. */ -struct msqid_ds -{ - struct ipc_perm msg_perm; /* structure describing operation permission */ - struct msg *__msg_first; /* pointer to first message on queue */ - struct msg *__msg_last; /* pointer to last message on queue */ - __time_t msg_stime; /* time of last msgsnd command */ - __time_t msg_rtime; /* time of last msgrcv command */ - __time_t msg_ctime; /* time of last change */ - struct wait_queue *__wwait; /* ??? */ - struct wait_queue *__rwait; /* ??? */ - unsigned short int __msg_cbytes;/* current number of bytes on queue */ - msgqnum_t msg_qnum; /* number of messages currently on queue */ - msglen_t msg_qbytes; /* max number of bytes allowed on queue */ - __ipc_pid_t msg_lspid; /* pid of last msgsnd() */ - __ipc_pid_t msg_lrpid; /* pid of last msgrcv() */ -}; - -#ifdef __USE_MISC - -# define msg_cbytes __msg_cbytes - -/* ipcs ctl commands */ -# define MSG_STAT 11 -# define MSG_INFO 12 - -/* buffer for msgctl calls IPC_INFO, MSG_INFO */ -struct msginfo - { - int msgpool; - int msgmap; - int msgmax; - int msgmnb; - int msgmni; - int msgssz; - int msgtql; - unsigned short int msgseg; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/gnu/bits/sem.h b/sysdeps/gnu/bits/sem.h deleted file mode 100644 index 3667572f84..0000000000 --- a/sysdeps/gnu/bits/sem.h +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SEM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Flags for `semop'. */ -#define SEM_UNDO 0x1000 /* undo the operation on exit */ - -/* Commands for `semctl'. */ -#define GETPID 11 /* get sempid */ -#define GETVAL 12 /* get semval */ -#define GETALL 13 /* get all semval's */ -#define GETNCNT 14 /* get semncnt */ -#define GETZCNT 15 /* get semzcnt */ -#define SETVAL 16 /* set semval */ -#define SETALL 17 /* set all semval's */ - - -/* Data structure describing a set of semaphores. */ -struct semid_ds -{ - struct ipc_perm sem_perm; /* operation permission struct */ - __time_t sem_otime; /* last semop() time */ - __time_t sem_ctime; /* last time changed by semctl() */ - struct sem *__sembase; /* ptr to first semaphore in array */ - struct __sem_queue *__sem_pending; /* pending operations */ - struct __sem_queue *__sem_pending_last;/* last pending operation */ - struct __sem_undo *__undo; /* ondo requests on this array */ - unsigned short int sem_nsems; /* number of semaphores in set */ -}; - - -/* The user should define a union like the following to use it for arguments - for `semctl'. - - union semun - { - int val; <= value for SETVAL - struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET - unsigned short int *array; <= array for GETALL & SETALL - struct seminfo *__buf; <= buffer for IPC_INFO - }; - - Previous versions of this file used to define this union but this is - incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether - one must define the union or not. */ -#define _SEM_SEMUN_UNDEFINED 1 - -#ifdef __USE_MISC - -/* ipcs ctl cmds */ -# define SEM_STAT 18 -# define SEM_INFO 19 - -struct seminfo -{ - int semmap; - int semmni; - int semmns; - int semmnu; - int semmsl; - int semopm; - int semume; - int semusz; - int semvmx; - int semaem; -}; - -#endif /* __USE_MISC */ diff --git a/sysdeps/gnu/bits/shm.h b/sysdeps/gnu/bits/shm.h deleted file mode 100644 index 27eabb5e64..0000000000 --- a/sysdeps/gnu/bits/shm.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SHM_H -# error "Never include directly; use instead." -#endif - -#include -#include - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from */ -#define SHM_W 0200 /* or S_IWUGO from */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -__BEGIN_DECLS - -/* Segment low boundary address multiple. */ -#define SHMLBA (__getpagesize ()) -extern int __getpagesize (void) __THROW __attribute__ ((__const__)); - - -/* Type to count number of attaches. */ -typedef unsigned short int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ - int shm_segsz; /* size of segment in bytes */ - __time_t shm_atime; /* time of last shmat() */ - __time_t shm_dtime; /* time of last shmdt() */ - __time_t shm_ctime; /* time of last change by shmctl() */ - __ipc_pid_t shm_cpid; /* pid of creator */ - __ipc_pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned short int __shm_npages; /* size of segment (pages) */ - unsigned long int *__shm_pages; /* array of ptrs to frames -> SHMMAX */ - struct vm_area_struct *__attaches; /* descriptors for attaches */ - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ - -struct shminfo - { - int shmmax; - int shmmin; - int shmmni; - int shmseg; - int shmall; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ - -__END_DECLS diff --git a/sysdeps/gnu/bits/utmp.h b/sysdeps/gnu/bits/utmp.h deleted file mode 100644 index 2ee11cb706..0000000000 --- a/sysdeps/gnu/bits/utmp.h +++ /dev/null @@ -1,123 +0,0 @@ -/* The `struct utmp' type, describing entries in the utmp file. GNU version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _UTMP_H -# error "Never include directly; use instead." -#endif - -#include -#include -#include -#include - - -#define UT_LINESIZE 32 -#define UT_NAMESIZE 32 -#define UT_HOSTSIZE 256 - - -/* The structure describing an entry in the database of - previous logins. */ -struct lastlog - { -#if __WORDSIZE_TIME64_COMPAT32 - int32_t ll_time; -#else - __time_t ll_time; -#endif - char ll_line[UT_LINESIZE]; - char ll_host[UT_HOSTSIZE]; - }; - - -/* The structure describing the status of a terminated process. This - type is used in `struct utmp' below. */ -struct exit_status - { - short int e_termination; /* Process termination status. */ - short int e_exit; /* Process exit status. */ - }; - - -/* The structure describing an entry in the user accounting database. */ -struct utmp -{ - short int ut_type; /* Type of login. */ - pid_t ut_pid; /* Process ID of login process. */ - char ut_line[UT_LINESIZE]; /* Devicename. */ - char ut_id[4]; /* Inittab ID. */ - char ut_user[UT_NAMESIZE]; /* Username. */ - char ut_host[UT_HOSTSIZE]; /* Hostname for remote login. */ - struct exit_status ut_exit; /* Exit status of a process marked - as DEAD_PROCESS. */ -/* The ut_session and ut_tv fields must be the same size when compiled - 32- and 64-bit. This allows data files and shared memory to be - shared between 32- and 64-bit applications. */ -#if __WORDSIZE_TIME64_COMPAT32 - int32_t ut_session; /* Session ID, used for windowing. */ - struct - { - int32_t tv_sec; /* Seconds. */ - int32_t tv_usec; /* Microseconds. */ - } ut_tv; /* Time entry was made. */ -#else - long int ut_session; /* Session ID, used for windowing. */ - struct timeval ut_tv; /* Time entry was made. */ -#endif - - int32_t ut_addr_v6[4]; /* Internet address of remote host. */ - char __glibc_reserved[20]; /* Reserved for future use. */ -}; - -/* Backwards compatibility hacks. */ -#define ut_name ut_user -#ifndef _NO_UT_TIME -/* We have a problem here: `ut_time' is also used otherwise. Define - _NO_UT_TIME if the compiler complains. */ -# define ut_time ut_tv.tv_sec -#endif -#define ut_xtime ut_tv.tv_sec -#define ut_addr ut_addr_v6[0] - - -/* Values for the `ut_type' field of a `struct utmp'. */ -#define EMPTY 0 /* No valid user accounting information. */ - -#define RUN_LVL 1 /* The system's runlevel. */ -#define BOOT_TIME 2 /* Time of system boot. */ -#define NEW_TIME 3 /* Time after system clock changed. */ -#define OLD_TIME 4 /* Time when system clock changed. */ - -#define INIT_PROCESS 5 /* Process spawned by the init process. */ -#define LOGIN_PROCESS 6 /* Session leader of a logged in user. */ -#define USER_PROCESS 7 /* Normal process. */ -#define DEAD_PROCESS 8 /* Terminated process. */ - -#define ACCOUNTING 9 - -/* Old Linux name for the EMPTY type. */ -#define UT_UNKNOWN EMPTY - - -/* Tell the user that we have a modern system with UT_HOST, UT_PID, - UT_TYPE, UT_ID and UT_TV fields. */ -#define _HAVE_UT_TYPE 1 -#define _HAVE_UT_PID 1 -#define _HAVE_UT_ID 1 -#define _HAVE_UT_TV 1 -#define _HAVE_UT_HOST 1 diff --git a/sysdeps/gnu/bits/utmpx.h b/sysdeps/gnu/bits/utmpx.h deleted file mode 100644 index 3d947563c9..0000000000 --- a/sysdeps/gnu/bits/utmpx.h +++ /dev/null @@ -1,102 +0,0 @@ -/* Structures and definitions for the user accounting database. GNU version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _UTMPX_H -# error "Never include directly; use instead." -#endif - -#include -#include -#include - - -#ifdef __USE_GNU -# include -# define _PATH_UTMPX _PATH_UTMP -# define _PATH_WTMPX _PATH_WTMP -#endif - - -#define __UT_LINESIZE 32 -#define __UT_NAMESIZE 32 -#define __UT_HOSTSIZE 256 - - -/* The structure describing the status of a terminated process. This - type is used in `struct utmpx' below. */ -struct __exit_status - { -#ifdef __USE_GNU - short int e_termination; /* Process termination status. */ - short int e_exit; /* Process exit status. */ -#else - short int __e_termination; /* Process termination status. */ - short int __e_exit; /* Process exit status. */ -#endif - }; - - -/* The structure describing an entry in the user accounting database. */ -struct utmpx -{ - short int ut_type; /* Type of login. */ - __pid_t ut_pid; /* Process ID of login process. */ - char ut_line[__UT_LINESIZE]; /* Devicename. */ - char ut_id[4]; /* Inittab ID. */ - char ut_user[__UT_NAMESIZE]; /* Username. */ - char ut_host[__UT_HOSTSIZE]; /* Hostname for remote login. */ - struct __exit_status ut_exit; /* Exit status of a process marked - as DEAD_PROCESS. */ - -/* The fields ut_session and ut_tv must be the same size when compiled - 32- and 64-bit. This allows files and shared memory to be shared - between 32- and 64-bit applications. */ -#if __WORDSIZE_TIME64_COMPAT32 - __int32_t ut_session; /* Session ID, used for windowing. */ - struct - { - __int32_t tv_sec; /* Seconds. */ - __int32_t tv_usec; /* Microseconds. */ - } ut_tv; /* Time entry was made. */ -#else - long int ut_session; /* Session ID, used for windowing. */ - struct timeval ut_tv; /* Time entry was made. */ -#endif - __int32_t ut_addr_v6[4]; /* Internet address of remote host. */ - char __glibc_reserved[20]; /* Reserved for future use. */ -}; - - -/* Values for the `ut_type' field of a `struct utmpx'. */ -#define EMPTY 0 /* No valid user accounting information. */ - -#ifdef __USE_GNU -# define RUN_LVL 1 /* The system's runlevel. */ -#endif -#define BOOT_TIME 2 /* Time of system boot. */ -#define NEW_TIME 3 /* Time after system clock changed. */ -#define OLD_TIME 4 /* Time when system clock changed. */ - -#define INIT_PROCESS 5 /* Process spawned by the init process. */ -#define LOGIN_PROCESS 6 /* Session leader of a logged in user. */ -#define USER_PROCESS 7 /* Normal process. */ -#define DEAD_PROCESS 8 /* Terminated process. */ - -#ifdef __USE_GNU -# define ACCOUNTING 9 /* System accounting. */ -#endif diff --git a/sysdeps/gnu/configure b/sysdeps/gnu/configure deleted file mode 100644 index 71243ad0c6..0000000000 --- a/sysdeps/gnu/configure +++ /dev/null @@ -1,37 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - -# Local configure fragment for sysdeps/gnu. - -# The Filesystem Hierarchy Standard prescribes where to place "essential" -# files. I.e., when the installation prefix is "/usr" we have to place -# shared library objects and the configuration files on the root partition -# in /lib and /etc. -test -n "$libc_cv_slibdir" || -case "$prefix" in -/usr | /usr/) - libc_cv_slibdir=/lib - libc_cv_rtlddir=/lib - if test "$libdir" = '${exec_prefix}/lib'; then - libdir='${exec_prefix}/lib'; - # Locale data can be shared between 32-bit and 64-bit libraries. - libc_cv_complocaledir='${exec_prefix}/lib/locale' - fi - ;; -esac -case "$prefix" in -/usr | /usr/) - # Allow the user to override the path with --sysconfdir. - if test "$sysconfdir" = '${prefix}/etc'; then - libc_cv_sysconfdir=/etc - else - libc_cv_sysconfdir=$sysconfdir - fi - # Allow the user to override the path with --localstatedir. - if test "$localstatedir" = '${prefix}/var'; then - libc_cv_localstatedir=/var - else - libc_cv_localstatedir=$localstatedir - fi - libc_cv_rootsbindir=/sbin - ;; -esac diff --git a/sysdeps/gnu/configure.ac b/sysdeps/gnu/configure.ac deleted file mode 100644 index 634fe4de2a..0000000000 --- a/sysdeps/gnu/configure.ac +++ /dev/null @@ -1,26 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. - -# Local configure fragment for sysdeps/gnu. - -# The Filesystem Hierarchy Standard prescribes where to place "essential" -# files. I.e., when the installation prefix is "/usr" we have to place -# shared library objects and the configuration files on the root partition -# in /lib and /etc. -LIBC_SLIBDIR_RTLDDIR([lib], [lib]) -case "$prefix" in -/usr | /usr/) - # Allow the user to override the path with --sysconfdir. - if test "$sysconfdir" = '${prefix}/etc'; then - libc_cv_sysconfdir=/etc - else - libc_cv_sysconfdir=$sysconfdir - fi - # Allow the user to override the path with --localstatedir. - if test "$localstatedir" = '${prefix}/var'; then - libc_cv_localstatedir=/var - else - libc_cv_localstatedir=$localstatedir - fi - libc_cv_rootsbindir=/sbin - ;; -esac diff --git a/sysdeps/gnu/errlist-compat.awk b/sysdeps/gnu/errlist-compat.awk deleted file mode 100644 index 7e2c33e89b..0000000000 --- a/sysdeps/gnu/errlist-compat.awk +++ /dev/null @@ -1,133 +0,0 @@ -# awk script to generate errlist-compat.c -# Copyright (C) 2002-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -# -# This script takes the Versions file as input and looks for #errlist-compat -# magic comments, which have the form: -# #errlist-compat NNN -# where NNN is the number of elements in the sys_errlist for that version set. -# We need the awk variable `maxerr' defined to the current size of sys_errlist. -# -# If there is no magic comment matching the current size, we barf. -# Otherwise we generate code (errlist-compat.c) to define all the -# necessary compatibility symbols for older, smaller versions of sys_errlist. -# - -# These two rules catch the Versions file contents. -NF == 2 && $2 == "{" { last_version = $1; next } -$1 == "#errlist-compat" { - # Don't process any further Versions files - ARGC = ARGIND + 1; - cnt = $2 + 0; - if (cnt < 80) { - print "*** this line seems bogus:", $0 > "/dev/stderr"; - exit 1; - } - version[pos + 0] = cnt SUBSEP last_version; - pos++; - if (cnt < highest) { - printf "*** %s #errlist-compat counts are not sorted\n", ARGV[ARGIND]; - exit 1; - } - if (cnt > highest) - highest = cnt; - highest_version = last_version; - next; -} - -END { - if (! highest_version) { - print "/* No sys_errlist/sys_nerr symbols defined on this platform. */"; - exit 0; - } - - count = maxerr + 1; - - if (highest < count) { - printf "*** errlist.c count %d vs Versions sys_errlist@%s count %d\n", \ - count, highest_version, highest > "/dev/stderr"; - exit 1; - } - - lastv = ""; - for (n = 0; n < pos; ++n) { - split(version[n], t, SUBSEP) - v = t[2]; - gsub(/[^A-Z0-9_]/, "_", v); - if (lastv != "") - compat[lastv] = v; - lastv = v; - vcount[v] = t[1]; - } - - print "/* This file was generated by errlist-compat.awk; DO NOT EDIT! */\n"; - print "#include \n"; - - if (highest > count) { - printf "*** errlist.c count %d inflated to %s count %d (old errno.h?)\n", \ - count, highest_version, highest > "/dev/stderr"; - printf "#define ERR_MAX %d\n\n", highest - 1; - } - - # same regardless of awk's ordering of the associative array. - num_compat_elems = asorti(compat, compat_indices) - for (i = 1; i <= num_compat_elems; i++) { - old = compat_indices[i] - new = compat[old]; - n = vcount[old]; - printf "#if SHLIB_COMPAT (libc, %s, %s)\n", old, new; - printf "# include \n"; - printf "extern const char *const __sys_errlist_%s[NERR];\n", old; - printf "const int __sys_nerr_%s = %d;\n", old, n; - printf "declare_symbol_alias (__sys_errlist_%s, _sys_errlist_internal,", \ - old; - printf " object, __WORDSIZE/8*%d)\n", n; - printf "compat_symbol (libc, __sys_errlist_%s, sys_errlist, %s);\n", \ - old, old; - printf "compat_symbol (libc, __sys_nerr_%s, sys_nerr, %s);\n", old, old; - - printf "extern const char *const ___sys_errlist_%s[NERR];\n", old; - printf "extern const int __sys_nerr_%s;\n", old; - printf "declare_symbol_alias (___sys_errlist_%s, _sys_errlist_internal,", \ - old; - printf " object, __WORDSIZE/8*%d)\n", n; - printf "strong_alias (__sys_nerr_%s, ___sys_nerr_%s)\n", old, old; - printf "compat_symbol (libc, ___sys_errlist_%s, _sys_errlist, %s);\n", \ - old, old; - printf "compat_symbol (libc, ___sys_nerr_%s, _sys_nerr, %s);\n", old, old; - printf "#endif\n\n"; - } - - printf "\ -extern const char *const __sys_errlist_internal[NERR];\n\ -extern const int __sys_nerr_internal;\n\ -strong_alias (_sys_errlist_internal, __sys_errlist_internal)\n\ -strong_alias (_sys_nerr_internal, __sys_nerr_internal)\n\ -extern const char *const sys_errlist[NERR];\n\ -versioned_symbol (libc, _sys_errlist_internal, sys_errlist, %s);\n\ -versioned_symbol (libc, __sys_errlist_internal, _sys_errlist, %s);\n\ -versioned_symbol (libc, _sys_nerr_internal, sys_nerr, %s);\n\ -versioned_symbol (libc, __sys_nerr_internal, _sys_nerr, %s);\n", \ - lastv, lastv, lastv, lastv; - - print "\n\ -link_warning (sys_errlist, \"\ -`sys_errlist' is deprecated; use `strerror' or `strerror_r' instead\")\n\ -link_warning (sys_nerr, \"\ -`sys_nerr' is deprecated; use `strerror' or `strerror_r' instead\")"; -} diff --git a/sysdeps/gnu/errlist.awk b/sysdeps/gnu/errlist.awk deleted file mode 100644 index d5a0555114..0000000000 --- a/sysdeps/gnu/errlist.awk +++ /dev/null @@ -1,110 +0,0 @@ -# Copyright (C) 1991-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -# errno.texi contains lines like: -# @deftypevr Macro int ENOSYS -# @errno{ENOSYS, 78, Function not implemented} -# Descriptive paragraph... -# @end deftypevr - -BEGIN { - - # Here we list the E* names that might be duplicate names for the - # same integer value on some systems. This causes the code below - # to generate ``#if defined (ALIAS) && ALIAS != ORIGINAL'' in the code, - # so the output does not presume that these are in fact aliases. - # We list here all the known potential cases on any system, - # so that the C source we produce will do the right thing based - # on the actual #define'd values it's compiled with. - alias["EWOULDBLOCK"]= "EAGAIN"; - alias["EDEADLOCK"] = "EDEADLK"; - alias["ENOTSUP"] = "EOPNOTSUPP"; - - print "/* This file is generated from errno.texi by errlist.awk. */" - print ""; - print "#include "; - print "#include "; - print ""; - print "#ifndef ERR_REMAP"; - print "# define ERR_REMAP(n) n"; - print "#endif"; - print ""; - - print "#if !defined EMIT_ERR_MAX && !defined ERRLIST_NO_COMPAT"; - print "# include "; - print "#endif"; - print "#ifdef ERR_MAX"; - print "# define ERRLIST_SIZE ERR_MAX + 1"; - print "#else" - print "# define ERR_MAX 0"; - print "# define ERRLIST_SIZE"; - print "#endif"; - - print "const char *const _sys_errlist_internal[ERRLIST_SIZE] ="; - print " {"; - print " [0] = N_(\"Success\")," - } - -/^@errno\{/ \ - { - etext = $3; - for (i = 4; i <= NF; ++i) - etext = etext " " $i; - etext = substr(etext, 1, length(etext)-1) - e = substr($1, 8, length($1)-8) - errno = substr($2, 1, length($2)-1) + 0 - if (alias[e]) - printf "#if defined (%s) && %s != %s\n", e, e, alias[e]; - else - printf "#ifdef %s\n", e; - errnoh = 4; - desc=""; - next; - } -errnoh == 4 && $1 == "@end" && $2 == "deftypevr" \ - { - printf "/*%s */\n", desc; - printf " [ERR_REMAP (%s)] = N_(\"%s\"),\n", e, etext; - printf "# if %s > ERR_MAX\n", e; - print "# undef ERR_MAX"; - printf "# define ERR_MAX %s\n", e; - print "# endif"; - print "#endif"; - errnoh = 0; - next; - } -errnoh == 4 \ - { - # This magic tag in C comments gets them copied into libc.pot. - desc = desc "\nTRANS" ($0 != "" ? " " : "") $0; next - } -END { - print " };"; - print ""; - print "#define NERR \\"; - print " (sizeof _sys_errlist_internal / sizeof _sys_errlist_internal [0])"; - print "const int _sys_nerr_internal = NERR;" - print ""; - print "#if IS_IN (libc) && !defined ERRLIST_NO_COMPAT"; - print "# include "; - print "#endif"; - print ""; - print "#ifdef EMIT_ERR_MAX"; - print "void dummy (void)" - print "{ asm volatile (\" @@@ %0 @@@ \" : : \"i\" (ERR_REMAP (ERR_MAX))); }" - print "#endif"; -} diff --git a/sysdeps/gnu/errlist.c b/sysdeps/gnu/errlist.c deleted file mode 100644 index 4a1c093ed0..0000000000 --- a/sysdeps/gnu/errlist.c +++ /dev/null @@ -1,1482 +0,0 @@ -/* This file is generated from errno.texi by errlist.awk. */ - -#include -#include - -#ifndef ERR_REMAP -# define ERR_REMAP(n) n -#endif - -#if !defined EMIT_ERR_MAX && !defined ERRLIST_NO_COMPAT -# include -#endif -#ifdef ERR_MAX -# define ERRLIST_SIZE ERR_MAX + 1 -#else -# define ERR_MAX 0 -# define ERRLIST_SIZE -#endif -const char *const _sys_errlist_internal[ERRLIST_SIZE] = - { - [0] = N_("Success"), -#ifdef EPERM -/* -TRANS Only the owner of the file (or other resource) -TRANS or processes with special privileges can perform the operation. */ - [ERR_REMAP (EPERM)] = N_("Operation not permitted"), -# if EPERM > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EPERM -# endif -#endif -#ifdef ENOENT -/* -TRANS This is a ``file doesn't exist'' error -TRANS for ordinary files that are referenced in contexts where they are -TRANS expected to already exist. */ - [ERR_REMAP (ENOENT)] = N_("No such file or directory"), -# if ENOENT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOENT -# endif -#endif -#ifdef ESRCH -/* -TRANS No process matches the specified process ID. */ - [ERR_REMAP (ESRCH)] = N_("No such process"), -# if ESRCH > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ESRCH -# endif -#endif -#ifdef EINTR -/* -TRANS An asynchronous signal occurred and prevented -TRANS completion of the call. When this happens, you should try the call -TRANS again. -TRANS -TRANS You can choose to have functions resume after a signal that is handled, -TRANS rather than failing with @code{EINTR}; see @ref{Interrupted -TRANS Primitives}. */ - [ERR_REMAP (EINTR)] = N_("Interrupted system call"), -# if EINTR > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EINTR -# endif -#endif -#ifdef EIO -/* -TRANS Usually used for physical read or write errors. */ - [ERR_REMAP (EIO)] = N_("Input/output error"), -# if EIO > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EIO -# endif -#endif -#ifdef ENXIO -/* -TRANS The system tried to use the device -TRANS represented by a file you specified, and it couldn't find the device. -TRANS This can mean that the device file was installed incorrectly, or that -TRANS the physical device is missing or not correctly attached to the -TRANS computer. */ - [ERR_REMAP (ENXIO)] = N_("No such device or address"), -# if ENXIO > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENXIO -# endif -#endif -#ifdef E2BIG -/* -TRANS Used when the arguments passed to a new program -TRANS being executed with one of the @code{exec} functions (@pxref{Executing a -TRANS File}) occupy too much memory space. This condition never arises on -TRANS @gnuhurdsystems{}. */ - [ERR_REMAP (E2BIG)] = N_("Argument list too long"), -# if E2BIG > ERR_MAX -# undef ERR_MAX -# define ERR_MAX E2BIG -# endif -#endif -#ifdef ENOEXEC -/* -TRANS Invalid executable file format. This condition is detected by the -TRANS @code{exec} functions; see @ref{Executing a File}. */ - [ERR_REMAP (ENOEXEC)] = N_("Exec format error"), -# if ENOEXEC > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOEXEC -# endif -#endif -#ifdef EBADF -/* -TRANS For example, I/O on a descriptor that has been -TRANS closed or reading from a descriptor open only for writing (or vice -TRANS versa). */ - [ERR_REMAP (EBADF)] = N_("Bad file descriptor"), -# if EBADF > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EBADF -# endif -#endif -#ifdef ECHILD -/* -TRANS This error happens on operations that are -TRANS supposed to manipulate child processes, when there aren't any processes -TRANS to manipulate. */ - [ERR_REMAP (ECHILD)] = N_("No child processes"), -# if ECHILD > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ECHILD -# endif -#endif -#ifdef EDEADLK -/* -TRANS Allocating a system resource would have resulted in a -TRANS deadlock situation. The system does not guarantee that it will notice -TRANS all such situations. This error means you got lucky and the system -TRANS noticed; it might just hang. @xref{File Locks}, for an example. */ - [ERR_REMAP (EDEADLK)] = N_("Resource deadlock avoided"), -# if EDEADLK > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EDEADLK -# endif -#endif -#ifdef ENOMEM -/* -TRANS The system cannot allocate more virtual memory -TRANS because its capacity is full. */ - [ERR_REMAP (ENOMEM)] = N_("Cannot allocate memory"), -# if ENOMEM > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOMEM -# endif -#endif -#ifdef EACCES -/* -TRANS The file permissions do not allow the attempted operation. */ - [ERR_REMAP (EACCES)] = N_("Permission denied"), -# if EACCES > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EACCES -# endif -#endif -#ifdef EFAULT -/* -TRANS An invalid pointer was detected. -TRANS On @gnuhurdsystems{}, this error never happens; you get a signal instead. */ - [ERR_REMAP (EFAULT)] = N_("Bad address"), -# if EFAULT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EFAULT -# endif -#endif -#ifdef ENOTBLK -/* -TRANS A file that isn't a block special file was given in a situation that -TRANS requires one. For example, trying to mount an ordinary file as a file -TRANS system in Unix gives this error. */ - [ERR_REMAP (ENOTBLK)] = N_("Block device required"), -# if ENOTBLK > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOTBLK -# endif -#endif -#ifdef EBUSY -/* -TRANS A system resource that can't be shared is already in use. -TRANS For example, if you try to delete a file that is the root of a currently -TRANS mounted filesystem, you get this error. */ - [ERR_REMAP (EBUSY)] = N_("Device or resource busy"), -# if EBUSY > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EBUSY -# endif -#endif -#ifdef EEXIST -/* -TRANS An existing file was specified in a context where it only -TRANS makes sense to specify a new file. */ - [ERR_REMAP (EEXIST)] = N_("File exists"), -# if EEXIST > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EEXIST -# endif -#endif -#ifdef EXDEV -/* -TRANS An attempt to make an improper link across file systems was detected. -TRANS This happens not only when you use @code{link} (@pxref{Hard Links}) but -TRANS also when you rename a file with @code{rename} (@pxref{Renaming Files}). */ - [ERR_REMAP (EXDEV)] = N_("Invalid cross-device link"), -# if EXDEV > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EXDEV -# endif -#endif -#ifdef ENODEV -/* -TRANS The wrong type of device was given to a function that expects a -TRANS particular sort of device. */ - [ERR_REMAP (ENODEV)] = N_("No such device"), -# if ENODEV > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENODEV -# endif -#endif -#ifdef ENOTDIR -/* -TRANS A file that isn't a directory was specified when a directory is required. */ - [ERR_REMAP (ENOTDIR)] = N_("Not a directory"), -# if ENOTDIR > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOTDIR -# endif -#endif -#ifdef EISDIR -/* -TRANS You cannot open a directory for writing, -TRANS or create or remove hard links to it. */ - [ERR_REMAP (EISDIR)] = N_("Is a directory"), -# if EISDIR > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EISDIR -# endif -#endif -#ifdef EINVAL -/* -TRANS This is used to indicate various kinds of problems -TRANS with passing the wrong argument to a library function. */ - [ERR_REMAP (EINVAL)] = N_("Invalid argument"), -# if EINVAL > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EINVAL -# endif -#endif -#ifdef EMFILE -/* -TRANS The current process has too many files open and can't open any more. -TRANS Duplicate descriptors do count toward this limit. -TRANS -TRANS In BSD and GNU, the number of open files is controlled by a resource -TRANS limit that can usually be increased. If you get this error, you might -TRANS want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited; -TRANS @pxref{Limits on Resources}. */ - [ERR_REMAP (EMFILE)] = N_("Too many open files"), -# if EMFILE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EMFILE -# endif -#endif -#ifdef ENFILE -/* -TRANS There are too many distinct file openings in the entire system. Note -TRANS that any number of linked channels count as just one file opening; see -TRANS @ref{Linked Channels}. This error never occurs on @gnuhurdsystems{}. */ - [ERR_REMAP (ENFILE)] = N_("Too many open files in system"), -# if ENFILE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENFILE -# endif -#endif -#ifdef ENOTTY -/* -TRANS Inappropriate I/O control operation, such as trying to set terminal -TRANS modes on an ordinary file. */ - [ERR_REMAP (ENOTTY)] = N_("Inappropriate ioctl for device"), -# if ENOTTY > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOTTY -# endif -#endif -#ifdef ETXTBSY -/* -TRANS An attempt to execute a file that is currently open for writing, or -TRANS write to a file that is currently being executed. Often using a -TRANS debugger to run a program is considered having it open for writing and -TRANS will cause this error. (The name stands for ``text file busy''.) This -TRANS is not an error on @gnuhurdsystems{}; the text is copied as necessary. */ - [ERR_REMAP (ETXTBSY)] = N_("Text file busy"), -# if ETXTBSY > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ETXTBSY -# endif -#endif -#ifdef EFBIG -/* -TRANS The size of a file would be larger than allowed by the system. */ - [ERR_REMAP (EFBIG)] = N_("File too large"), -# if EFBIG > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EFBIG -# endif -#endif -#ifdef ENOSPC -/* -TRANS Write operation on a file failed because the -TRANS disk is full. */ - [ERR_REMAP (ENOSPC)] = N_("No space left on device"), -# if ENOSPC > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOSPC -# endif -#endif -#ifdef ESPIPE -/* -TRANS Invalid seek operation (such as on a pipe). */ - [ERR_REMAP (ESPIPE)] = N_("Illegal seek"), -# if ESPIPE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ESPIPE -# endif -#endif -#ifdef EROFS -/* -TRANS An attempt was made to modify something on a read-only file system. */ - [ERR_REMAP (EROFS)] = N_("Read-only file system"), -# if EROFS > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EROFS -# endif -#endif -#ifdef EMLINK -/* -TRANS The link count of a single file would become too large. -TRANS @code{rename} can cause this error if the file being renamed already has -TRANS as many links as it can take (@pxref{Renaming Files}). */ - [ERR_REMAP (EMLINK)] = N_("Too many links"), -# if EMLINK > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EMLINK -# endif -#endif -#ifdef EPIPE -/* -TRANS There is no process reading from the other end of a pipe. -TRANS Every library function that returns this error code also generates a -TRANS @code{SIGPIPE} signal; this signal terminates the program if not handled -TRANS or blocked. Thus, your program will never actually see @code{EPIPE} -TRANS unless it has handled or blocked @code{SIGPIPE}. */ - [ERR_REMAP (EPIPE)] = N_("Broken pipe"), -# if EPIPE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EPIPE -# endif -#endif -#ifdef EDOM -/* -TRANS Used by mathematical functions when an argument value does -TRANS not fall into the domain over which the function is defined. */ - [ERR_REMAP (EDOM)] = N_("Numerical argument out of domain"), -# if EDOM > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EDOM -# endif -#endif -#ifdef ERANGE -/* -TRANS Used by mathematical functions when the result value is -TRANS not representable because of overflow or underflow. */ - [ERR_REMAP (ERANGE)] = N_("Numerical result out of range"), -# if ERANGE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ERANGE -# endif -#endif -#ifdef EAGAIN -/* -TRANS The call might work if you try again -TRANS later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN}; -TRANS they are always the same in @theglibc{}. -TRANS -TRANS This error can happen in a few different situations: -TRANS -TRANS @itemize @bullet -TRANS @item -TRANS An operation that would block was attempted on an object that has -TRANS non-blocking mode selected. Trying the same operation again will block -TRANS until some external condition makes it possible to read, write, or -TRANS connect (whatever the operation). You can use @code{select} to find out -TRANS when the operation will be possible; @pxref{Waiting for I/O}. -TRANS -TRANS @strong{Portability Note:} In many older Unix systems, this condition -TRANS was indicated by @code{EWOULDBLOCK}, which was a distinct error code -TRANS different from @code{EAGAIN}. To make your program portable, you should -TRANS check for both codes and treat them the same. -TRANS -TRANS @item -TRANS A temporary resource shortage made an operation impossible. @code{fork} -TRANS can return this error. It indicates that the shortage is expected to -TRANS pass, so your program can try the call again later and it may succeed. -TRANS It is probably a good idea to delay for a few seconds before trying it -TRANS again, to allow time for other processes to release scarce resources. -TRANS Such shortages are usually fairly serious and affect the whole system, -TRANS so usually an interactive program should report the error to the user -TRANS and return to its command loop. -TRANS @end itemize */ - [ERR_REMAP (EAGAIN)] = N_("Resource temporarily unavailable"), -# if EAGAIN > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EAGAIN -# endif -#endif -#if defined (EWOULDBLOCK) && EWOULDBLOCK != EAGAIN -/* -TRANS In @theglibc{}, this is another name for @code{EAGAIN} (above). -TRANS The values are always the same, on every operating system. -TRANS -TRANS C libraries in many older Unix systems have @code{EWOULDBLOCK} as a -TRANS separate error code. */ - [ERR_REMAP (EWOULDBLOCK)] = N_("Operation would block"), -# if EWOULDBLOCK > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EWOULDBLOCK -# endif -#endif -#ifdef EINPROGRESS -/* -TRANS An operation that cannot complete immediately was initiated on an object -TRANS that has non-blocking mode selected. Some functions that must always -TRANS block (such as @code{connect}; @pxref{Connecting}) never return -TRANS @code{EAGAIN}. Instead, they return @code{EINPROGRESS} to indicate that -TRANS the operation has begun and will take some time. Attempts to manipulate -TRANS the object before the call completes return @code{EALREADY}. You can -TRANS use the @code{select} function to find out when the pending operation -TRANS has completed; @pxref{Waiting for I/O}. */ - [ERR_REMAP (EINPROGRESS)] = N_("Operation now in progress"), -# if EINPROGRESS > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EINPROGRESS -# endif -#endif -#ifdef EALREADY -/* -TRANS An operation is already in progress on an object that has non-blocking -TRANS mode selected. */ - [ERR_REMAP (EALREADY)] = N_("Operation already in progress"), -# if EALREADY > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EALREADY -# endif -#endif -#ifdef ENOTSOCK -/* -TRANS A file that isn't a socket was specified when a socket is required. */ - [ERR_REMAP (ENOTSOCK)] = N_("Socket operation on non-socket"), -# if ENOTSOCK > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOTSOCK -# endif -#endif -#ifdef EMSGSIZE -/* -TRANS The size of a message sent on a socket was larger than the supported -TRANS maximum size. */ - [ERR_REMAP (EMSGSIZE)] = N_("Message too long"), -# if EMSGSIZE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EMSGSIZE -# endif -#endif -#ifdef EPROTOTYPE -/* -TRANS The socket type does not support the requested communications protocol. */ - [ERR_REMAP (EPROTOTYPE)] = N_("Protocol wrong type for socket"), -# if EPROTOTYPE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EPROTOTYPE -# endif -#endif -#ifdef ENOPROTOOPT -/* -TRANS You specified a socket option that doesn't make sense for the -TRANS particular protocol being used by the socket. @xref{Socket Options}. */ - [ERR_REMAP (ENOPROTOOPT)] = N_("Protocol not available"), -# if ENOPROTOOPT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOPROTOOPT -# endif -#endif -#ifdef EPROTONOSUPPORT -/* -TRANS The socket domain does not support the requested communications protocol -TRANS (perhaps because the requested protocol is completely invalid). -TRANS @xref{Creating a Socket}. */ - [ERR_REMAP (EPROTONOSUPPORT)] = N_("Protocol not supported"), -# if EPROTONOSUPPORT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EPROTONOSUPPORT -# endif -#endif -#ifdef ESOCKTNOSUPPORT -/* -TRANS The socket type is not supported. */ - [ERR_REMAP (ESOCKTNOSUPPORT)] = N_("Socket type not supported"), -# if ESOCKTNOSUPPORT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ESOCKTNOSUPPORT -# endif -#endif -#ifdef EOPNOTSUPP -/* -TRANS The operation you requested is not supported. Some socket functions -TRANS don't make sense for all types of sockets, and others may not be -TRANS implemented for all communications protocols. On @gnuhurdsystems{}, this -TRANS error can happen for many calls when the object does not support the -TRANS particular operation; it is a generic indication that the server knows -TRANS nothing to do for that call. */ - [ERR_REMAP (EOPNOTSUPP)] = N_("Operation not supported"), -# if EOPNOTSUPP > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EOPNOTSUPP -# endif -#endif -#ifdef EPFNOSUPPORT -/* -TRANS The socket communications protocol family you requested is not supported. */ - [ERR_REMAP (EPFNOSUPPORT)] = N_("Protocol family not supported"), -# if EPFNOSUPPORT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EPFNOSUPPORT -# endif -#endif -#ifdef EAFNOSUPPORT -/* -TRANS The address family specified for a socket is not supported; it is -TRANS inconsistent with the protocol being used on the socket. @xref{Sockets}. */ - [ERR_REMAP (EAFNOSUPPORT)] = N_("Address family not supported by protocol"), -# if EAFNOSUPPORT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EAFNOSUPPORT -# endif -#endif -#ifdef EADDRINUSE -/* -TRANS The requested socket address is already in use. @xref{Socket Addresses}. */ - [ERR_REMAP (EADDRINUSE)] = N_("Address already in use"), -# if EADDRINUSE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EADDRINUSE -# endif -#endif -#ifdef EADDRNOTAVAIL -/* -TRANS The requested socket address is not available; for example, you tried -TRANS to give a socket a name that doesn't match the local host name. -TRANS @xref{Socket Addresses}. */ - [ERR_REMAP (EADDRNOTAVAIL)] = N_("Cannot assign requested address"), -# if EADDRNOTAVAIL > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EADDRNOTAVAIL -# endif -#endif -#ifdef ENETDOWN -/* -TRANS A socket operation failed because the network was down. */ - [ERR_REMAP (ENETDOWN)] = N_("Network is down"), -# if ENETDOWN > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENETDOWN -# endif -#endif -#ifdef ENETUNREACH -/* -TRANS A socket operation failed because the subnet containing the remote host -TRANS was unreachable. */ - [ERR_REMAP (ENETUNREACH)] = N_("Network is unreachable"), -# if ENETUNREACH > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENETUNREACH -# endif -#endif -#ifdef ENETRESET -/* -TRANS A network connection was reset because the remote host crashed. */ - [ERR_REMAP (ENETRESET)] = N_("Network dropped connection on reset"), -# if ENETRESET > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENETRESET -# endif -#endif -#ifdef ECONNABORTED -/* -TRANS A network connection was aborted locally. */ - [ERR_REMAP (ECONNABORTED)] = N_("Software caused connection abort"), -# if ECONNABORTED > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ECONNABORTED -# endif -#endif -#ifdef ECONNRESET -/* -TRANS A network connection was closed for reasons outside the control of the -TRANS local host, such as by the remote machine rebooting or an unrecoverable -TRANS protocol violation. */ - [ERR_REMAP (ECONNRESET)] = N_("Connection reset by peer"), -# if ECONNRESET > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ECONNRESET -# endif -#endif -#ifdef ENOBUFS -/* -TRANS The kernel's buffers for I/O operations are all in use. In GNU, this -TRANS error is always synonymous with @code{ENOMEM}; you may get one or the -TRANS other from network operations. */ - [ERR_REMAP (ENOBUFS)] = N_("No buffer space available"), -# if ENOBUFS > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOBUFS -# endif -#endif -#ifdef EISCONN -/* -TRANS You tried to connect a socket that is already connected. -TRANS @xref{Connecting}. */ - [ERR_REMAP (EISCONN)] = N_("Transport endpoint is already connected"), -# if EISCONN > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EISCONN -# endif -#endif -#ifdef ENOTCONN -/* -TRANS The socket is not connected to anything. You get this error when you -TRANS try to transmit data over a socket, without first specifying a -TRANS destination for the data. For a connectionless socket (for datagram -TRANS protocols, such as UDP), you get @code{EDESTADDRREQ} instead. */ - [ERR_REMAP (ENOTCONN)] = N_("Transport endpoint is not connected"), -# if ENOTCONN > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOTCONN -# endif -#endif -#ifdef EDESTADDRREQ -/* -TRANS No default destination address was set for the socket. You get this -TRANS error when you try to transmit data over a connectionless socket, -TRANS without first specifying a destination for the data with @code{connect}. */ - [ERR_REMAP (EDESTADDRREQ)] = N_("Destination address required"), -# if EDESTADDRREQ > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EDESTADDRREQ -# endif -#endif -#ifdef ESHUTDOWN -/* -TRANS The socket has already been shut down. */ - [ERR_REMAP (ESHUTDOWN)] = N_("Cannot send after transport endpoint shutdown"), -# if ESHUTDOWN > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ESHUTDOWN -# endif -#endif -#ifdef ETOOMANYREFS -/* */ - [ERR_REMAP (ETOOMANYREFS)] = N_("Too many references: cannot splice"), -# if ETOOMANYREFS > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ETOOMANYREFS -# endif -#endif -#ifdef ETIMEDOUT -/* -TRANS A socket operation with a specified timeout received no response during -TRANS the timeout period. */ - [ERR_REMAP (ETIMEDOUT)] = N_("Connection timed out"), -# if ETIMEDOUT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ETIMEDOUT -# endif -#endif -#ifdef ECONNREFUSED -/* -TRANS A remote host refused to allow the network connection (typically because -TRANS it is not running the requested service). */ - [ERR_REMAP (ECONNREFUSED)] = N_("Connection refused"), -# if ECONNREFUSED > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ECONNREFUSED -# endif -#endif -#ifdef ELOOP -/* -TRANS Too many levels of symbolic links were encountered in looking up a file name. -TRANS This often indicates a cycle of symbolic links. */ - [ERR_REMAP (ELOOP)] = N_("Too many levels of symbolic links"), -# if ELOOP > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ELOOP -# endif -#endif -#ifdef ENAMETOOLONG -/* -TRANS Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for -TRANS Files}) or host name too long (in @code{gethostname} or -TRANS @code{sethostname}; @pxref{Host Identification}). */ - [ERR_REMAP (ENAMETOOLONG)] = N_("File name too long"), -# if ENAMETOOLONG > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENAMETOOLONG -# endif -#endif -#ifdef EHOSTDOWN -/* -TRANS The remote host for a requested network connection is down. */ - [ERR_REMAP (EHOSTDOWN)] = N_("Host is down"), -# if EHOSTDOWN > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EHOSTDOWN -# endif -#endif -#ifdef EHOSTUNREACH -/* -TRANS The remote host for a requested network connection is not reachable. */ - [ERR_REMAP (EHOSTUNREACH)] = N_("No route to host"), -# if EHOSTUNREACH > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EHOSTUNREACH -# endif -#endif -#ifdef ENOTEMPTY -/* -TRANS Directory not empty, where an empty directory was expected. Typically, -TRANS this error occurs when you are trying to delete a directory. */ - [ERR_REMAP (ENOTEMPTY)] = N_("Directory not empty"), -# if ENOTEMPTY > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOTEMPTY -# endif -#endif -#ifdef EPROCLIM -/* -TRANS This means that the per-user limit on new process would be exceeded by -TRANS an attempted @code{fork}. @xref{Limits on Resources}, for details on -TRANS the @code{RLIMIT_NPROC} limit. */ - [ERR_REMAP (EPROCLIM)] = N_("Too many processes"), -# if EPROCLIM > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EPROCLIM -# endif -#endif -#ifdef EUSERS -/* -TRANS The file quota system is confused because there are too many users. -TRANS @c This can probably happen in a GNU system when using NFS. */ - [ERR_REMAP (EUSERS)] = N_("Too many users"), -# if EUSERS > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EUSERS -# endif -#endif -#ifdef EDQUOT -/* -TRANS The user's disk quota was exceeded. */ - [ERR_REMAP (EDQUOT)] = N_("Disk quota exceeded"), -# if EDQUOT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EDQUOT -# endif -#endif -#ifdef ESTALE -/* -TRANS This indicates an internal confusion in the -TRANS file system which is due to file system rearrangements on the server host -TRANS for NFS file systems or corruption in other file systems. -TRANS Repairing this condition usually requires unmounting, possibly repairing -TRANS and remounting the file system. */ - [ERR_REMAP (ESTALE)] = N_("Stale file handle"), -# if ESTALE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ESTALE -# endif -#endif -#ifdef EREMOTE -/* -TRANS An attempt was made to NFS-mount a remote file system with a file name that -TRANS already specifies an NFS-mounted file. -TRANS (This is an error on some operating systems, but we expect it to work -TRANS properly on @gnuhurdsystems{}, making this error code impossible.) */ - [ERR_REMAP (EREMOTE)] = N_("Object is remote"), -# if EREMOTE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EREMOTE -# endif -#endif -#ifdef EBADRPC -/* */ - [ERR_REMAP (EBADRPC)] = N_("RPC struct is bad"), -# if EBADRPC > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EBADRPC -# endif -#endif -#ifdef ERPCMISMATCH -/* */ - [ERR_REMAP (ERPCMISMATCH)] = N_("RPC version wrong"), -# if ERPCMISMATCH > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ERPCMISMATCH -# endif -#endif -#ifdef EPROGUNAVAIL -/* */ - [ERR_REMAP (EPROGUNAVAIL)] = N_("RPC program not available"), -# if EPROGUNAVAIL > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EPROGUNAVAIL -# endif -#endif -#ifdef EPROGMISMATCH -/* */ - [ERR_REMAP (EPROGMISMATCH)] = N_("RPC program version wrong"), -# if EPROGMISMATCH > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EPROGMISMATCH -# endif -#endif -#ifdef EPROCUNAVAIL -/* */ - [ERR_REMAP (EPROCUNAVAIL)] = N_("RPC bad procedure for program"), -# if EPROCUNAVAIL > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EPROCUNAVAIL -# endif -#endif -#ifdef ENOLCK -/* -TRANS This is used by the file locking facilities; see -TRANS @ref{File Locks}. This error is never generated by @gnuhurdsystems{}, but -TRANS it can result from an operation to an NFS server running another -TRANS operating system. */ - [ERR_REMAP (ENOLCK)] = N_("No locks available"), -# if ENOLCK > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOLCK -# endif -#endif -#ifdef EFTYPE -/* -TRANS The file was the wrong type for the -TRANS operation, or a data file had the wrong format. -TRANS -TRANS On some systems @code{chmod} returns this error if you try to set the -TRANS sticky bit on a non-directory file; @pxref{Setting Permissions}. */ - [ERR_REMAP (EFTYPE)] = N_("Inappropriate file type or format"), -# if EFTYPE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EFTYPE -# endif -#endif -#ifdef EAUTH -/* */ - [ERR_REMAP (EAUTH)] = N_("Authentication error"), -# if EAUTH > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EAUTH -# endif -#endif -#ifdef ENEEDAUTH -/* */ - [ERR_REMAP (ENEEDAUTH)] = N_("Need authenticator"), -# if ENEEDAUTH > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENEEDAUTH -# endif -#endif -#ifdef ENOSYS -/* -TRANS This indicates that the function called is -TRANS not implemented at all, either in the C library itself or in the -TRANS operating system. When you get this error, you can be sure that this -TRANS particular function will always fail with @code{ENOSYS} unless you -TRANS install a new version of the C library or the operating system. */ - [ERR_REMAP (ENOSYS)] = N_("Function not implemented"), -# if ENOSYS > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOSYS -# endif -#endif -#if defined (ENOTSUP) && ENOTSUP != EOPNOTSUPP -/* -TRANS A function returns this error when certain parameter -TRANS values are valid, but the functionality they request is not available. -TRANS This can mean that the function does not implement a particular command -TRANS or option value or flag bit at all. For functions that operate on some -TRANS object given in a parameter, such as a file descriptor or a port, it -TRANS might instead mean that only @emph{that specific object} (file -TRANS descriptor, port, etc.) is unable to support the other parameters given; -TRANS different file descriptors might support different ranges of parameter -TRANS values. -TRANS -TRANS If the entire function is not available at all in the implementation, -TRANS it returns @code{ENOSYS} instead. */ - [ERR_REMAP (ENOTSUP)] = N_("Not supported"), -# if ENOTSUP > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOTSUP -# endif -#endif -#ifdef EILSEQ -/* -TRANS While decoding a multibyte character the function came along an invalid -TRANS or an incomplete sequence of bytes or the given wide character is invalid. */ - [ERR_REMAP (EILSEQ)] = N_("Invalid or incomplete multibyte or wide character"), -# if EILSEQ > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EILSEQ -# endif -#endif -#ifdef EBACKGROUND -/* -TRANS On @gnuhurdsystems{}, servers supporting the @code{term} protocol return -TRANS this error for certain operations when the caller is not in the -TRANS foreground process group of the terminal. Users do not usually see this -TRANS error because functions such as @code{read} and @code{write} translate -TRANS it into a @code{SIGTTIN} or @code{SIGTTOU} signal. @xref{Job Control}, -TRANS for information on process groups and these signals. */ - [ERR_REMAP (EBACKGROUND)] = N_("Inappropriate operation for background process"), -# if EBACKGROUND > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EBACKGROUND -# endif -#endif -#ifdef EDIED -/* -TRANS On @gnuhurdsystems{}, opening a file returns this error when the file is -TRANS translated by a program and the translator program dies while starting -TRANS up, before it has connected to the file. */ - [ERR_REMAP (EDIED)] = N_("Translator died"), -# if EDIED > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EDIED -# endif -#endif -#ifdef ED -/* -TRANS The experienced user will know what is wrong. -TRANS @c This error code is a joke. Its perror text is part of the joke. -TRANS @c Don't change it. */ - [ERR_REMAP (ED)] = N_("?"), -# if ED > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ED -# endif -#endif -#ifdef EGREGIOUS -/* -TRANS You did @strong{what}? */ - [ERR_REMAP (EGREGIOUS)] = N_("You really blew it this time"), -# if EGREGIOUS > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EGREGIOUS -# endif -#endif -#ifdef EIEIO -/* -TRANS Go home and have a glass of warm, dairy-fresh milk. */ - [ERR_REMAP (EIEIO)] = N_("Computer bought the farm"), -# if EIEIO > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EIEIO -# endif -#endif -#ifdef EGRATUITOUS -/* -TRANS This error code has no purpose. */ - [ERR_REMAP (EGRATUITOUS)] = N_("Gratuitous error"), -# if EGRATUITOUS > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EGRATUITOUS -# endif -#endif -#ifdef EBADMSG -/* */ - [ERR_REMAP (EBADMSG)] = N_("Bad message"), -# if EBADMSG > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EBADMSG -# endif -#endif -#ifdef EIDRM -/* */ - [ERR_REMAP (EIDRM)] = N_("Identifier removed"), -# if EIDRM > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EIDRM -# endif -#endif -#ifdef EMULTIHOP -/* */ - [ERR_REMAP (EMULTIHOP)] = N_("Multihop attempted"), -# if EMULTIHOP > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EMULTIHOP -# endif -#endif -#ifdef ENODATA -/* */ - [ERR_REMAP (ENODATA)] = N_("No data available"), -# if ENODATA > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENODATA -# endif -#endif -#ifdef ENOLINK -/* */ - [ERR_REMAP (ENOLINK)] = N_("Link has been severed"), -# if ENOLINK > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOLINK -# endif -#endif -#ifdef ENOMSG -/* */ - [ERR_REMAP (ENOMSG)] = N_("No message of desired type"), -# if ENOMSG > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOMSG -# endif -#endif -#ifdef ENOSR -/* */ - [ERR_REMAP (ENOSR)] = N_("Out of streams resources"), -# if ENOSR > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOSR -# endif -#endif -#ifdef ENOSTR -/* */ - [ERR_REMAP (ENOSTR)] = N_("Device not a stream"), -# if ENOSTR > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOSTR -# endif -#endif -#ifdef EOVERFLOW -/* */ - [ERR_REMAP (EOVERFLOW)] = N_("Value too large for defined data type"), -# if EOVERFLOW > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EOVERFLOW -# endif -#endif -#ifdef EPROTO -/* */ - [ERR_REMAP (EPROTO)] = N_("Protocol error"), -# if EPROTO > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EPROTO -# endif -#endif -#ifdef ETIME -/* */ - [ERR_REMAP (ETIME)] = N_("Timer expired"), -# if ETIME > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ETIME -# endif -#endif -#ifdef ECANCELED -/* -TRANS An asynchronous operation was canceled before it -TRANS completed. @xref{Asynchronous I/O}. When you call @code{aio_cancel}, -TRANS the normal result is for the operations affected to complete with this -TRANS error; @pxref{Cancel AIO Operations}. */ - [ERR_REMAP (ECANCELED)] = N_("Operation canceled"), -# if ECANCELED > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ECANCELED -# endif -#endif -#ifdef ERESTART -/* */ - [ERR_REMAP (ERESTART)] = N_("Interrupted system call should be restarted"), -# if ERESTART > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ERESTART -# endif -#endif -#ifdef ECHRNG -/* */ - [ERR_REMAP (ECHRNG)] = N_("Channel number out of range"), -# if ECHRNG > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ECHRNG -# endif -#endif -#ifdef EL2NSYNC -/* */ - [ERR_REMAP (EL2NSYNC)] = N_("Level 2 not synchronized"), -# if EL2NSYNC > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EL2NSYNC -# endif -#endif -#ifdef EL3HLT -/* */ - [ERR_REMAP (EL3HLT)] = N_("Level 3 halted"), -# if EL3HLT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EL3HLT -# endif -#endif -#ifdef EL3RST -/* */ - [ERR_REMAP (EL3RST)] = N_("Level 3 reset"), -# if EL3RST > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EL3RST -# endif -#endif -#ifdef ELNRNG -/* */ - [ERR_REMAP (ELNRNG)] = N_("Link number out of range"), -# if ELNRNG > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ELNRNG -# endif -#endif -#ifdef EUNATCH -/* */ - [ERR_REMAP (EUNATCH)] = N_("Protocol driver not attached"), -# if EUNATCH > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EUNATCH -# endif -#endif -#ifdef ENOCSI -/* */ - [ERR_REMAP (ENOCSI)] = N_("No CSI structure available"), -# if ENOCSI > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOCSI -# endif -#endif -#ifdef EL2HLT -/* */ - [ERR_REMAP (EL2HLT)] = N_("Level 2 halted"), -# if EL2HLT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EL2HLT -# endif -#endif -#ifdef EBADE -/* */ - [ERR_REMAP (EBADE)] = N_("Invalid exchange"), -# if EBADE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EBADE -# endif -#endif -#ifdef EBADR -/* */ - [ERR_REMAP (EBADR)] = N_("Invalid request descriptor"), -# if EBADR > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EBADR -# endif -#endif -#ifdef EXFULL -/* */ - [ERR_REMAP (EXFULL)] = N_("Exchange full"), -# if EXFULL > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EXFULL -# endif -#endif -#ifdef ENOANO -/* */ - [ERR_REMAP (ENOANO)] = N_("No anode"), -# if ENOANO > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOANO -# endif -#endif -#ifdef EBADRQC -/* */ - [ERR_REMAP (EBADRQC)] = N_("Invalid request code"), -# if EBADRQC > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EBADRQC -# endif -#endif -#ifdef EBADSLT -/* */ - [ERR_REMAP (EBADSLT)] = N_("Invalid slot"), -# if EBADSLT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EBADSLT -# endif -#endif -#if defined (EDEADLOCK) && EDEADLOCK != EDEADLK -/* */ - [ERR_REMAP (EDEADLOCK)] = N_("File locking deadlock error"), -# if EDEADLOCK > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EDEADLOCK -# endif -#endif -#ifdef EBFONT -/* */ - [ERR_REMAP (EBFONT)] = N_("Bad font file format"), -# if EBFONT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EBFONT -# endif -#endif -#ifdef ENONET -/* */ - [ERR_REMAP (ENONET)] = N_("Machine is not on the network"), -# if ENONET > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENONET -# endif -#endif -#ifdef ENOPKG -/* */ - [ERR_REMAP (ENOPKG)] = N_("Package not installed"), -# if ENOPKG > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOPKG -# endif -#endif -#ifdef EADV -/* */ - [ERR_REMAP (EADV)] = N_("Advertise error"), -# if EADV > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EADV -# endif -#endif -#ifdef ESRMNT -/* */ - [ERR_REMAP (ESRMNT)] = N_("Srmount error"), -# if ESRMNT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ESRMNT -# endif -#endif -#ifdef ECOMM -/* */ - [ERR_REMAP (ECOMM)] = N_("Communication error on send"), -# if ECOMM > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ECOMM -# endif -#endif -#ifdef EDOTDOT -/* */ - [ERR_REMAP (EDOTDOT)] = N_("RFS specific error"), -# if EDOTDOT > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EDOTDOT -# endif -#endif -#ifdef ENOTUNIQ -/* */ - [ERR_REMAP (ENOTUNIQ)] = N_("Name not unique on network"), -# if ENOTUNIQ > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOTUNIQ -# endif -#endif -#ifdef EBADFD -/* */ - [ERR_REMAP (EBADFD)] = N_("File descriptor in bad state"), -# if EBADFD > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EBADFD -# endif -#endif -#ifdef EREMCHG -/* */ - [ERR_REMAP (EREMCHG)] = N_("Remote address changed"), -# if EREMCHG > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EREMCHG -# endif -#endif -#ifdef ELIBACC -/* */ - [ERR_REMAP (ELIBACC)] = N_("Can not access a needed shared library"), -# if ELIBACC > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ELIBACC -# endif -#endif -#ifdef ELIBBAD -/* */ - [ERR_REMAP (ELIBBAD)] = N_("Accessing a corrupted shared library"), -# if ELIBBAD > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ELIBBAD -# endif -#endif -#ifdef ELIBSCN -/* */ - [ERR_REMAP (ELIBSCN)] = N_(".lib section in a.out corrupted"), -# if ELIBSCN > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ELIBSCN -# endif -#endif -#ifdef ELIBMAX -/* */ - [ERR_REMAP (ELIBMAX)] = N_("Attempting to link in too many shared libraries"), -# if ELIBMAX > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ELIBMAX -# endif -#endif -#ifdef ELIBEXEC -/* */ - [ERR_REMAP (ELIBEXEC)] = N_("Cannot exec a shared library directly"), -# if ELIBEXEC > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ELIBEXEC -# endif -#endif -#ifdef ESTRPIPE -/* */ - [ERR_REMAP (ESTRPIPE)] = N_("Streams pipe error"), -# if ESTRPIPE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ESTRPIPE -# endif -#endif -#ifdef EUCLEAN -/* */ - [ERR_REMAP (EUCLEAN)] = N_("Structure needs cleaning"), -# if EUCLEAN > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EUCLEAN -# endif -#endif -#ifdef ENOTNAM -/* */ - [ERR_REMAP (ENOTNAM)] = N_("Not a XENIX named type file"), -# if ENOTNAM > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOTNAM -# endif -#endif -#ifdef ENAVAIL -/* */ - [ERR_REMAP (ENAVAIL)] = N_("No XENIX semaphores available"), -# if ENAVAIL > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENAVAIL -# endif -#endif -#ifdef EISNAM -/* */ - [ERR_REMAP (EISNAM)] = N_("Is a named type file"), -# if EISNAM > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EISNAM -# endif -#endif -#ifdef EREMOTEIO -/* */ - [ERR_REMAP (EREMOTEIO)] = N_("Remote I/O error"), -# if EREMOTEIO > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EREMOTEIO -# endif -#endif -#ifdef ENOMEDIUM -/* */ - [ERR_REMAP (ENOMEDIUM)] = N_("No medium found"), -# if ENOMEDIUM > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOMEDIUM -# endif -#endif -#ifdef EMEDIUMTYPE -/* */ - [ERR_REMAP (EMEDIUMTYPE)] = N_("Wrong medium type"), -# if EMEDIUMTYPE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EMEDIUMTYPE -# endif -#endif -#ifdef ENOKEY -/* */ - [ERR_REMAP (ENOKEY)] = N_("Required key not available"), -# if ENOKEY > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOKEY -# endif -#endif -#ifdef EKEYEXPIRED -/* */ - [ERR_REMAP (EKEYEXPIRED)] = N_("Key has expired"), -# if EKEYEXPIRED > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EKEYEXPIRED -# endif -#endif -#ifdef EKEYREVOKED -/* */ - [ERR_REMAP (EKEYREVOKED)] = N_("Key has been revoked"), -# if EKEYREVOKED > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EKEYREVOKED -# endif -#endif -#ifdef EKEYREJECTED -/* */ - [ERR_REMAP (EKEYREJECTED)] = N_("Key was rejected by service"), -# if EKEYREJECTED > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EKEYREJECTED -# endif -#endif -#ifdef EOWNERDEAD -/* */ - [ERR_REMAP (EOWNERDEAD)] = N_("Owner died"), -# if EOWNERDEAD > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EOWNERDEAD -# endif -#endif -#ifdef ENOTRECOVERABLE -/* */ - [ERR_REMAP (ENOTRECOVERABLE)] = N_("State not recoverable"), -# if ENOTRECOVERABLE > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ENOTRECOVERABLE -# endif -#endif -#ifdef ERFKILL -/* */ - [ERR_REMAP (ERFKILL)] = N_("Operation not possible due to RF-kill"), -# if ERFKILL > ERR_MAX -# undef ERR_MAX -# define ERR_MAX ERFKILL -# endif -#endif -#ifdef EHWPOISON -/* */ - [ERR_REMAP (EHWPOISON)] = N_("Memory page has hardware error"), -# if EHWPOISON > ERR_MAX -# undef ERR_MAX -# define ERR_MAX EHWPOISON -# endif -#endif - }; - -#define NERR \ - (sizeof _sys_errlist_internal / sizeof _sys_errlist_internal [0]) -const int _sys_nerr_internal = NERR; - -#if IS_IN (libc) && !defined ERRLIST_NO_COMPAT -# include -#endif - -#ifdef EMIT_ERR_MAX -void dummy (void) -{ asm volatile (" @@@ %0 @@@ " : : "i" (ERR_REMAP (ERR_MAX))); } -#endif diff --git a/sysdeps/gnu/getutmp.c b/sysdeps/gnu/getutmp.c deleted file mode 100644 index a0c0766923..0000000000 --- a/sysdeps/gnu/getutmp.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#ifndef _UTMPX_H -/* This is an ugly hack but we must not see the getutmpx declaration. */ -# define getutmpx XXXgetutmpx -# include -# undef getutmpx -#endif - -void -getutmp (const struct utmpx *utmpx, struct utmp *utmp) -{ - assert (sizeof (struct utmp) == sizeof (struct utmpx)); - memcpy (utmp, utmpx, sizeof (struct utmp)); -} -strong_alias (getutmp, getutmpx) diff --git a/sysdeps/gnu/getutmpx.c b/sysdeps/gnu/getutmpx.c deleted file mode 100644 index f393734a63..0000000000 --- a/sysdeps/gnu/getutmpx.c +++ /dev/null @@ -1 +0,0 @@ -/* We don't need a separate version. it is the same as getutmp(). */ diff --git a/sysdeps/gnu/glob64.c b/sysdeps/gnu/glob64.c deleted file mode 100644 index d1e4e6f0d5..0000000000 --- a/sysdeps/gnu/glob64.c +++ /dev/null @@ -1,25 +0,0 @@ -#include -#include -#include - -#define dirent dirent64 -#define __readdir(dirp) __readdir64 (dirp) - -#define glob_t glob64_t -#define glob(pattern, flags, errfunc, pglob) \ - glob64 (pattern, flags, errfunc, pglob) -#define globfree(pglob) globfree64 (pglob) - -#undef stat -#define stat stat64 -#undef __stat -#define __stat(file, buf) __xstat64 (_STAT_VER, file, buf) - -#define NO_GLOB_PATTERN_P 1 - -#define COMPILE_GLOB64 1 - -#include - -libc_hidden_def (glob64) -libc_hidden_def (globfree64) diff --git a/sysdeps/gnu/ifaddrs.c b/sysdeps/gnu/ifaddrs.c deleted file mode 100644 index 37b3248669..0000000000 --- a/sysdeps/gnu/ifaddrs.c +++ /dev/null @@ -1,164 +0,0 @@ -/* getifaddrs -- get names and addresses of all network interfaces - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ifreq.h" - -/* Create a linked list of `struct ifaddrs' structures, one for each - network interface on the host machine. If successful, store the - list in *IFAP and return 0. On errors, return -1 and set `errno'. */ -int -__getifaddrs (struct ifaddrs **ifap) -{ - /* This implementation handles only IPv4 interfaces. - The various ioctls below will only work on an AF_INET socket. - Some different mechanism entirely must be used for IPv6. */ - int fd = __socket (AF_INET, SOCK_DGRAM, 0); - struct ifreq *ifreqs; - int nifs; - - if (fd < 0) - return -1; - - __ifreq (&ifreqs, &nifs, fd); - if (ifreqs == NULL) /* XXX doesn't distinguish error vs none */ - { - __close (fd); - return -1; - } - - /* Now we have the list of interfaces and each one's address. - Put it into the expected format and fill in the remaining details. */ - if (nifs == 0) - *ifap = NULL; - else - { - struct - { - struct ifaddrs ia; - struct sockaddr addr, netmask, broadaddr; - char name[IF_NAMESIZE]; - } *storage; - struct ifreq *ifr; - int i; - - storage = malloc (nifs * sizeof storage[0]); - if (storage == NULL) - { - __close (fd); - __if_freereq (ifreqs, nifs); - return -1; - } - - i = 0; - ifr = ifreqs; - do - { - /* Fill in pointers to the storage we've already allocated. */ - storage[i].ia.ifa_next = &storage[i + 1].ia; - storage[i].ia.ifa_addr = &storage[i].addr; - - /* Now copy the information we already have from SIOCGIFCONF. */ - storage[i].ia.ifa_name = strncpy (storage[i].name, ifr->ifr_name, - sizeof storage[i].name); - storage[i].addr = ifr->ifr_addr; - - /* The SIOCGIFCONF call filled in only the name and address. - Now we must also ask for the other information we need. */ - - if (__ioctl (fd, SIOCGIFFLAGS, ifr) < 0) - break; - storage[i].ia.ifa_flags = ifr->ifr_flags; - - ifr->ifr_addr = storage[i].addr; - - if (__ioctl (fd, SIOCGIFNETMASK, ifr) < 0) - storage[i].ia.ifa_netmask = NULL; - else - { - storage[i].ia.ifa_netmask = &storage[i].netmask; - storage[i].netmask = ifr->ifr_netmask; - } - - if (ifr->ifr_flags & IFF_BROADCAST) - { - ifr->ifr_addr = storage[i].addr; - if (__ioctl (fd, SIOCGIFBRDADDR, ifr) < 0) - storage[i].ia.ifa_broadaddr = NULL; - { - storage[i].ia.ifa_broadaddr = &storage[i].broadaddr; - storage[i].broadaddr = ifr->ifr_broadaddr; - } - } - else if (ifr->ifr_flags & IFF_POINTOPOINT) - { - ifr->ifr_addr = storage[i].addr; - if (__ioctl (fd, SIOCGIFDSTADDR, ifr) < 0) - storage[i].ia.ifa_broadaddr = NULL; - else - { - storage[i].ia.ifa_broadaddr = &storage[i].broadaddr; - storage[i].broadaddr = ifr->ifr_dstaddr; - } - } - else - storage[i].ia.ifa_broadaddr = NULL; - - storage[i].ia.ifa_data = NULL; /* Nothing here for now. */ - - ifr = __if_nextreq (ifr); - } while (++i < nifs); - if (i < nifs) /* Broke out early on error. */ - { - __close (fd); - free (storage); - __if_freereq (ifreqs, nifs); - return -1; - } - - storage[i - 1].ia.ifa_next = NULL; - - *ifap = &storage[0].ia; - - __close (fd); - __if_freereq (ifreqs, nifs); - } - - return 0; -} -weak_alias (__getifaddrs, getifaddrs) -#ifndef getifaddrs -libc_hidden_weak (getifaddrs) -#endif - -void -__freeifaddrs (struct ifaddrs *ifa) -{ - free (ifa); -} -weak_alias (__freeifaddrs, freeifaddrs) -libc_hidden_weak (freeifaddrs) diff --git a/sysdeps/gnu/ldsodefs.h b/sysdeps/gnu/ldsodefs.h deleted file mode 100644 index cda70ae91a..0000000000 --- a/sysdeps/gnu/ldsodefs.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. GNU. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _GNU_LDSODEFS_H -#define _GNU_LDSODEFS_H 1 - -#include -#include -#include - -/* Accept binaries which identify the binary as using GNU extensions. */ -#define VALID_ELF_HEADER(hdr,exp,size) (memcmp (hdr, exp, size) == 0 \ - || memcmp (hdr, expected2, size) == 0) -#define VALID_ELF_OSABI(osabi) (osabi == ELFOSABI_SYSV \ - || osabi == ELFOSABI_GNU) -#define VALID_ELF_ABIVERSION(osabi,ver) \ - (ver == 0 || (osabi == ELFOSABI_GNU && ver < LIBC_ABI_MAX)) -#define MORE_ELF_HEADER_DATA \ - static const unsigned char expected2[EI_PAD] = \ - { \ - [EI_MAG0] = ELFMAG0, \ - [EI_MAG1] = ELFMAG1, \ - [EI_MAG2] = ELFMAG2, \ - [EI_MAG3] = ELFMAG3, \ - [EI_CLASS] = ELFW(CLASS), \ - [EI_DATA] = byteorder, \ - [EI_VERSION] = EV_CURRENT, \ - [EI_OSABI] = ELFOSABI_GNU \ - } - -#include_next - -#endif /* _GNU_LDSODEFS_H */ diff --git a/sysdeps/gnu/net/if.h b/sysdeps/gnu/net/if.h deleted file mode 100644 index 0afce08238..0000000000 --- a/sysdeps/gnu/net/if.h +++ /dev/null @@ -1,204 +0,0 @@ -/* net/if.h -- declarations for inquiring about network interfaces - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NET_IF_H -#define _NET_IF_H 1 - -#include - -#ifdef __USE_MISC -# include -# include -#endif - - -/* Length of interface name. */ -#define IF_NAMESIZE 16 - -struct if_nameindex - { - unsigned int if_index; /* 1, 2, ... */ - char *if_name; /* null terminated name: "eth0", ... */ - }; - - -#ifdef __USE_MISC -/* Standard interface flags. */ -enum - { - IFF_UP = 0x1, /* Interface is up. */ -# define IFF_UP IFF_UP - IFF_BROADCAST = 0x2, /* Broadcast address valid. */ -# define IFF_BROADCAST IFF_BROADCAST - IFF_DEBUG = 0x4, /* Turn on debugging. */ -# define IFF_DEBUG IFF_DEBUG - IFF_LOOPBACK = 0x8, /* Is a loopback net. */ -# define IFF_LOOPBACK IFF_LOOPBACK - IFF_POINTOPOINT = 0x10, /* Interface is point-to-point link. */ -# define IFF_POINTOPOINT IFF_POINTOPOINT - IFF_NOTRAILERS = 0x20, /* Avoid use of trailers. */ -# define IFF_NOTRAILERS IFF_NOTRAILERS - IFF_RUNNING = 0x40, /* Resources allocated. */ -# define IFF_RUNNING IFF_RUNNING - IFF_NOARP = 0x80, /* No address resolution protocol. */ -# define IFF_NOARP IFF_NOARP - IFF_PROMISC = 0x100, /* Receive all packets. */ -# define IFF_PROMISC IFF_PROMISC - - /* Not supported */ - IFF_ALLMULTI = 0x200, /* Receive all multicast packets. */ -# define IFF_ALLMULTI IFF_ALLMULTI - - IFF_MASTER = 0x400, /* Master of a load balancer. */ -# define IFF_MASTER IFF_MASTER - IFF_SLAVE = 0x800, /* Slave of a load balancer. */ -# define IFF_SLAVE IFF_SLAVE - - IFF_MULTICAST = 0x1000, /* Supports multicast. */ -# define IFF_MULTICAST IFF_MULTICAST - - IFF_PORTSEL = 0x2000, /* Can set media type. */ -# define IFF_PORTSEL IFF_PORTSEL - IFF_AUTOMEDIA = 0x4000, /* Auto media select active. */ -# define IFF_AUTOMEDIA IFF_AUTOMEDIA - IFF_DYNAMIC = 0x8000 /* Dialup device with changing addresses. */ -# define IFF_DYNAMIC IFF_DYNAMIC - }; - -/* The ifaddr structure contains information about one address of an - interface. They are maintained by the different address families, - are allocated and attached when an address is set, and are linked - together so all addresses for an interface can be located. */ - -struct ifaddr - { - struct sockaddr ifa_addr; /* Address of interface. */ - union - { - struct sockaddr ifu_broadaddr; - struct sockaddr ifu_dstaddr; - } ifa_ifu; - struct iface *ifa_ifp; /* Back-pointer to interface. */ - struct ifaddr *ifa_next; /* Next address for interface. */ - }; - -# define ifa_broadaddr ifa_ifu.ifu_broadaddr /* broadcast address */ -# define ifa_dstaddr ifa_ifu.ifu_dstaddr /* other end of link */ - -/* Device mapping structure. I'd just gone off and designed a - beautiful scheme using only loadable modules with arguments for - driver options and along come the PCMCIA people 8) - - Ah well. The get() side of this is good for WDSETUP, and it'll be - handy for debugging things. The set side is fine for now and being - very small might be worth keeping for clean configuration. */ - -struct ifmap - { - unsigned long int mem_start; - unsigned long int mem_end; - unsigned short int base_addr; - unsigned char irq; - unsigned char dma; - unsigned char port; - /* 3 bytes spare */ - }; - -/* Interface request structure used for socket ioctl's. All interface - ioctl's must have parameter definitions which begin with ifr_name. - The remainder may be interface specific. */ - -struct ifreq - { -# define IFHWADDRLEN 6 -# define IFNAMSIZ IF_NAMESIZE - union - { - char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "en0". */ - } ifr_ifrn; - - union - { - struct sockaddr ifru_addr; - struct sockaddr ifru_dstaddr; - struct sockaddr ifru_broadaddr; - struct sockaddr ifru_netmask; - struct sockaddr ifru_hwaddr; - short int ifru_flags; - int ifru_ivalue; - int ifru_mtu; - struct ifmap ifru_map; - char ifru_slave[IFNAMSIZ]; /* Just fits the size */ - char ifru_newname[IFNAMSIZ]; - __caddr_t ifru_data; - } ifr_ifru; - }; -# define ifr_name ifr_ifrn.ifrn_name /* interface name */ -# define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */ -# define ifr_addr ifr_ifru.ifru_addr /* address */ -# define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */ -# define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */ -# define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */ -# define ifr_flags ifr_ifru.ifru_flags /* flags */ -# define ifr_metric ifr_ifru.ifru_ivalue /* metric */ -# define ifr_mtu ifr_ifru.ifru_mtu /* mtu */ -# define ifr_map ifr_ifru.ifru_map /* device map */ -# define ifr_slave ifr_ifru.ifru_slave /* slave device */ -# define ifr_data ifr_ifru.ifru_data /* for use by interface */ -# define ifr_ifindex ifr_ifru.ifru_ivalue /* interface index */ -# define ifr_bandwidth ifr_ifru.ifru_ivalue /* link bandwidth */ -# define ifr_qlen ifr_ifru.ifru_ivalue /* queue length */ -# define ifr_newname ifr_ifru.ifru_newname /* New name */ -# define _IOT_ifreq _IOT(_IOTS(char),IFNAMSIZ,_IOTS(char),16,0,0) -# define _IOT_ifreq_short _IOT(_IOTS(char),IFNAMSIZ,_IOTS(short),1,0,0) -# define _IOT_ifreq_int _IOT(_IOTS(char),IFNAMSIZ,_IOTS(int),1,0,0) - - -/* Structure used in SIOCGIFCONF request. Used to retrieve interface - configuration for machine (useful for programs which must know all - networks accessible). */ - -struct ifconf - { - int ifc_len; /* Size of buffer. */ - union - { - __caddr_t ifcu_buf; - struct ifreq *ifcu_req; - } ifc_ifcu; - }; -# define ifc_buf ifc_ifcu.ifcu_buf /* Buffer address. */ -# define ifc_req ifc_ifcu.ifcu_req /* Array of structures. */ -# define _IOT_ifconf _IOT(_IOTS(struct ifconf),1,0,0,0,0) /* not right */ -#endif /* Misc. */ - -__BEGIN_DECLS - -/* Convert an interface name to an index, and vice versa. */ -extern unsigned int if_nametoindex (const char *__ifname) __THROW; -extern char *if_indextoname (unsigned int __ifindex, char *__ifname) __THROW; - -/* Return a list of all interfaces and their indices. */ -extern struct if_nameindex *if_nameindex (void) __THROW; - -/* Free the data returned from if_nameindex. */ -extern void if_freenameindex (struct if_nameindex *__ptr) __THROW; - -__END_DECLS - -#endif /* net/if.h */ diff --git a/sysdeps/gnu/netinet/ip_icmp.h b/sysdeps/gnu/netinet/ip_icmp.h deleted file mode 100644 index 37373357a7..0000000000 --- a/sysdeps/gnu/netinet/ip_icmp.h +++ /dev/null @@ -1,282 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __NETINET_IP_ICMP_H -#define __NETINET_IP_ICMP_H 1 - -#include -#include - -__BEGIN_DECLS - -struct icmphdr -{ - uint8_t type; /* message type */ - uint8_t code; /* type sub-code */ - uint16_t checksum; - union - { - struct - { - uint16_t id; - uint16_t sequence; - } echo; /* echo datagram */ - uint32_t gateway; /* gateway address */ - struct - { - uint16_t __glibc_reserved; - uint16_t mtu; - } frag; /* path mtu discovery */ - } un; -}; - -#define ICMP_ECHOREPLY 0 /* Echo Reply */ -#define ICMP_DEST_UNREACH 3 /* Destination Unreachable */ -#define ICMP_SOURCE_QUENCH 4 /* Source Quench */ -#define ICMP_REDIRECT 5 /* Redirect (change route) */ -#define ICMP_ECHO 8 /* Echo Request */ -#define ICMP_TIME_EXCEEDED 11 /* Time Exceeded */ -#define ICMP_PARAMETERPROB 12 /* Parameter Problem */ -#define ICMP_TIMESTAMP 13 /* Timestamp Request */ -#define ICMP_TIMESTAMPREPLY 14 /* Timestamp Reply */ -#define ICMP_INFO_REQUEST 15 /* Information Request */ -#define ICMP_INFO_REPLY 16 /* Information Reply */ -#define ICMP_ADDRESS 17 /* Address Mask Request */ -#define ICMP_ADDRESSREPLY 18 /* Address Mask Reply */ -#define NR_ICMP_TYPES 18 - - -/* Codes for UNREACH. */ -#define ICMP_NET_UNREACH 0 /* Network Unreachable */ -#define ICMP_HOST_UNREACH 1 /* Host Unreachable */ -#define ICMP_PROT_UNREACH 2 /* Protocol Unreachable */ -#define ICMP_PORT_UNREACH 3 /* Port Unreachable */ -#define ICMP_FRAG_NEEDED 4 /* Fragmentation Needed/DF set */ -#define ICMP_SR_FAILED 5 /* Source Route failed */ -#define ICMP_NET_UNKNOWN 6 -#define ICMP_HOST_UNKNOWN 7 -#define ICMP_HOST_ISOLATED 8 -#define ICMP_NET_ANO 9 -#define ICMP_HOST_ANO 10 -#define ICMP_NET_UNR_TOS 11 -#define ICMP_HOST_UNR_TOS 12 -#define ICMP_PKT_FILTERED 13 /* Packet filtered */ -#define ICMP_PREC_VIOLATION 14 /* Precedence violation */ -#define ICMP_PREC_CUTOFF 15 /* Precedence cut off */ -#define NR_ICMP_UNREACH 15 /* instead of hardcoding immediate value */ - -/* Codes for REDIRECT. */ -#define ICMP_REDIR_NET 0 /* Redirect Net */ -#define ICMP_REDIR_HOST 1 /* Redirect Host */ -#define ICMP_REDIR_NETTOS 2 /* Redirect Net for TOS */ -#define ICMP_REDIR_HOSTTOS 3 /* Redirect Host for TOS */ - -/* Codes for TIME_EXCEEDED. */ -#define ICMP_EXC_TTL 0 /* TTL count exceeded */ -#define ICMP_EXC_FRAGTIME 1 /* Fragment Reass time exceeded */ - - -#ifdef __USE_MISC -/* - * Copyright (c) 1982, 1986, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)ip_icmp.h 8.1 (Berkeley) 6/10/93 - */ - -#include -#include - -/* - * Internal of an ICMP Router Advertisement - */ -struct icmp_ra_addr -{ - uint32_t ira_addr; - uint32_t ira_preference; -}; - -struct icmp -{ - uint8_t icmp_type; /* type of message, see below */ - uint8_t icmp_code; /* type sub code */ - uint16_t icmp_cksum; /* ones complement checksum of struct */ - union - { - unsigned char ih_pptr; /* ICMP_PARAMPROB */ - struct in_addr ih_gwaddr; /* gateway address */ - struct ih_idseq /* echo datagram */ - { - uint16_t icd_id; - uint16_t icd_seq; - } ih_idseq; - uint32_t ih_void; - - /* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */ - struct ih_pmtu - { - uint16_t ipm_void; - uint16_t ipm_nextmtu; - } ih_pmtu; - - struct ih_rtradv - { - uint8_t irt_num_addrs; - uint8_t irt_wpa; - uint16_t irt_lifetime; - } ih_rtradv; - } icmp_hun; -#define icmp_pptr icmp_hun.ih_pptr -#define icmp_gwaddr icmp_hun.ih_gwaddr -#define icmp_id icmp_hun.ih_idseq.icd_id -#define icmp_seq icmp_hun.ih_idseq.icd_seq -#define icmp_void icmp_hun.ih_void -#define icmp_pmvoid icmp_hun.ih_pmtu.ipm_void -#define icmp_nextmtu icmp_hun.ih_pmtu.ipm_nextmtu -#define icmp_num_addrs icmp_hun.ih_rtradv.irt_num_addrs -#define icmp_wpa icmp_hun.ih_rtradv.irt_wpa -#define icmp_lifetime icmp_hun.ih_rtradv.irt_lifetime - union - { - struct - { - uint32_t its_otime; - uint32_t its_rtime; - uint32_t its_ttime; - } id_ts; - struct - { - struct ip idi_ip; - /* options and then 64 bits of data */ - } id_ip; - struct icmp_ra_addr id_radv; - uint32_t id_mask; - uint8_t id_data[1]; - } icmp_dun; -#define icmp_otime icmp_dun.id_ts.its_otime -#define icmp_rtime icmp_dun.id_ts.its_rtime -#define icmp_ttime icmp_dun.id_ts.its_ttime -#define icmp_ip icmp_dun.id_ip.idi_ip -#define icmp_radv icmp_dun.id_radv -#define icmp_mask icmp_dun.id_mask -#define icmp_data icmp_dun.id_data -}; - -/* - * Lower bounds on packet lengths for various types. - * For the error advice packets must first insure that the - * packet is large enough to contain the returned ip header. - * Only then can we do the check to see if 64 bits of packet - * data have been returned, since we need to check the returned - * ip header length. - */ -#define ICMP_MINLEN 8 /* abs minimum */ -#define ICMP_TSLEN (8 + 3 * sizeof (n_time)) /* timestamp */ -#define ICMP_MASKLEN 12 /* address mask */ -#define ICMP_ADVLENMIN (8 + sizeof (struct ip) + 8) /* min */ -#ifndef _IP_VHL -#define ICMP_ADVLEN(p) (8 + ((p)->icmp_ip.ip_hl << 2) + 8) - /* N.B.: must separately check that ip_hl >= 5 */ -#else -#define ICMP_ADVLEN(p) (8 + (IP_VHL_HL((p)->icmp_ip.ip_vhl) << 2) + 8) - /* N.B.: must separately check that header length >= 5 */ -#endif - -/* Definition of type and code fields. */ -/* defined above: ICMP_ECHOREPLY, ICMP_REDIRECT, ICMP_ECHO */ -#define ICMP_UNREACH 3 /* dest unreachable, codes: */ -#define ICMP_SOURCEQUENCH 4 /* packet lost, slow down */ -#define ICMP_ROUTERADVERT 9 /* router advertisement */ -#define ICMP_ROUTERSOLICIT 10 /* router solicitation */ -#define ICMP_TIMXCEED 11 /* time exceeded, code: */ -#define ICMP_PARAMPROB 12 /* ip header bad */ -#define ICMP_TSTAMP 13 /* timestamp request */ -#define ICMP_TSTAMPREPLY 14 /* timestamp reply */ -#define ICMP_IREQ 15 /* information request */ -#define ICMP_IREQREPLY 16 /* information reply */ -#define ICMP_MASKREQ 17 /* address mask request */ -#define ICMP_MASKREPLY 18 /* address mask reply */ - -#define ICMP_MAXTYPE 18 - -/* UNREACH codes */ -#define ICMP_UNREACH_NET 0 /* bad net */ -#define ICMP_UNREACH_HOST 1 /* bad host */ -#define ICMP_UNREACH_PROTOCOL 2 /* bad protocol */ -#define ICMP_UNREACH_PORT 3 /* bad port */ -#define ICMP_UNREACH_NEEDFRAG 4 /* IP_DF caused drop */ -#define ICMP_UNREACH_SRCFAIL 5 /* src route failed */ -#define ICMP_UNREACH_NET_UNKNOWN 6 /* unknown net */ -#define ICMP_UNREACH_HOST_UNKNOWN 7 /* unknown host */ -#define ICMP_UNREACH_ISOLATED 8 /* src host isolated */ -#define ICMP_UNREACH_NET_PROHIB 9 /* net denied */ -#define ICMP_UNREACH_HOST_PROHIB 10 /* host denied */ -#define ICMP_UNREACH_TOSNET 11 /* bad tos for net */ -#define ICMP_UNREACH_TOSHOST 12 /* bad tos for host */ -#define ICMP_UNREACH_FILTER_PROHIB 13 /* admin prohib */ -#define ICMP_UNREACH_HOST_PRECEDENCE 14 /* host prec vio. */ -#define ICMP_UNREACH_PRECEDENCE_CUTOFF 15 /* prec cutoff */ - -/* REDIRECT codes */ -#define ICMP_REDIRECT_NET 0 /* for network */ -#define ICMP_REDIRECT_HOST 1 /* for host */ -#define ICMP_REDIRECT_TOSNET 2 /* for tos and net */ -#define ICMP_REDIRECT_TOSHOST 3 /* for tos and host */ - -/* TIMEXCEED codes */ -#define ICMP_TIMXCEED_INTRANS 0 /* ttl==0 in transit */ -#define ICMP_TIMXCEED_REASS 1 /* ttl==0 in reass */ - -/* PARAMPROB code */ -#define ICMP_PARAMPROB_OPTABSENT 1 /* req. opt. absent */ - -#define ICMP_INFOTYPE(type) \ - ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \ - (type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \ - (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \ - (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \ - (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY) - -#endif /* __USE_MISC */ - -__END_DECLS - -#endif /* netinet/ip_icmp.h */ diff --git a/sysdeps/gnu/netinet/tcp.h b/sysdeps/gnu/netinet/tcp.h deleted file mode 100644 index af94b8e82c..0000000000 --- a/sysdeps/gnu/netinet/tcp.h +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright (c) 1982, 1986, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)tcp.h 8.1 (Berkeley) 6/10/93 - */ - -#ifndef _NETINET_TCP_H -#define _NETINET_TCP_H 1 - -#include - -/* - * User-settable options (used with setsockopt). - */ -#define TCP_NODELAY 1 /* Don't delay send to coalesce packets */ -#define TCP_MAXSEG 2 /* Set maximum segment size */ -#define TCP_CORK 3 /* Control sending of partial frames */ -#define TCP_KEEPIDLE 4 /* Start keeplives after this period */ -#define TCP_KEEPINTVL 5 /* Interval between keepalives */ -#define TCP_KEEPCNT 6 /* Number of keepalives before death */ -#define TCP_SYNCNT 7 /* Number of SYN retransmits */ -#define TCP_LINGER2 8 /* Life time of orphaned FIN-WAIT-2 state */ -#define TCP_DEFER_ACCEPT 9 /* Wake up listener only when data arrive */ -#define TCP_WINDOW_CLAMP 10 /* Bound advertised window */ -#define TCP_INFO 11 /* Information about this connection. */ -#define TCP_QUICKACK 12 /* Bock/reenable quick ACKs. */ -#define TCP_CONGESTION 13 /* Congestion control algorithm. */ -#define TCP_MD5SIG 14 /* TCP MD5 Signature (RFC2385) */ -#define TCP_COOKIE_TRANSACTIONS 15 /* TCP Cookie Transactions */ -#define TCP_THIN_LINEAR_TIMEOUTS 16 /* Use linear timeouts for thin streams*/ -#define TCP_THIN_DUPACK 17 /* Fast retrans. after 1 dupack */ -#define TCP_USER_TIMEOUT 18 /* How long for loss retry before timeout */ -#define TCP_REPAIR 19 /* TCP sock is under repair right now */ -#define TCP_REPAIR_QUEUE 20 /* Set TCP queue to repair */ -#define TCP_QUEUE_SEQ 21 /* Set sequence number of repaired queue. */ -#define TCP_REPAIR_OPTIONS 22 /* Repair TCP connection options */ -#define TCP_FASTOPEN 23 /* Enable FastOpen on listeners */ -#define TCP_TIMESTAMP 24 /* TCP time stamp */ -#define TCP_NOTSENT_LOWAT 25 /* Limit number of unsent bytes in - write queue. */ -#define TCP_CC_INFO 26 /* Get Congestion Control - (optional) info. */ -#define TCP_SAVE_SYN 27 /* Record SYN headers for new - connections. */ -#define TCP_SAVED_SYN 28 /* Get SYN headers recorded for - connection. */ -#define TCP_REPAIR_WINDOW 29 /* Get/set window parameters. */ -#define TCP_FASTOPEN_CONNECT 30 /* Attempt FastOpen with connect. */ - -#ifdef __USE_MISC -# include -# include -# include - -typedef uint32_t tcp_seq; -/* - * TCP header. - * Per RFC 793, September, 1981. - */ -struct tcphdr - { - __extension__ union - { - struct - { - uint16_t th_sport; /* source port */ - uint16_t th_dport; /* destination port */ - tcp_seq th_seq; /* sequence number */ - tcp_seq th_ack; /* acknowledgement number */ -# if __BYTE_ORDER == __LITTLE_ENDIAN - uint8_t th_x2:4; /* (unused) */ - uint8_t th_off:4; /* data offset */ -# endif -# if __BYTE_ORDER == __BIG_ENDIAN - uint8_t th_off:4; /* data offset */ - uint8_t th_x2:4; /* (unused) */ -# endif - uint8_t th_flags; -# define TH_FIN 0x01 -# define TH_SYN 0x02 -# define TH_RST 0x04 -# define TH_PUSH 0x08 -# define TH_ACK 0x10 -# define TH_URG 0x20 - uint16_t th_win; /* window */ - uint16_t th_sum; /* checksum */ - uint16_t th_urp; /* urgent pointer */ - }; - struct - { - uint16_t source; - uint16_t dest; - uint32_t seq; - uint32_t ack_seq; -# if __BYTE_ORDER == __LITTLE_ENDIAN - uint16_t res1:4; - uint16_t doff:4; - uint16_t fin:1; - uint16_t syn:1; - uint16_t rst:1; - uint16_t psh:1; - uint16_t ack:1; - uint16_t urg:1; - uint16_t res2:2; -# elif __BYTE_ORDER == __BIG_ENDIAN - uint16_t doff:4; - uint16_t res1:4; - uint16_t res2:2; - uint16_t urg:1; - uint16_t ack:1; - uint16_t psh:1; - uint16_t rst:1; - uint16_t syn:1; - uint16_t fin:1; -# else -# error "Adjust your defines" -# endif - uint16_t window; - uint16_t check; - uint16_t urg_ptr; - }; - }; -}; - -enum -{ - TCP_ESTABLISHED = 1, - TCP_SYN_SENT, - TCP_SYN_RECV, - TCP_FIN_WAIT1, - TCP_FIN_WAIT2, - TCP_TIME_WAIT, - TCP_CLOSE, - TCP_CLOSE_WAIT, - TCP_LAST_ACK, - TCP_LISTEN, - TCP_CLOSING /* now a valid state */ -}; - -# define TCPOPT_EOL 0 -# define TCPOPT_NOP 1 -# define TCPOPT_MAXSEG 2 -# define TCPOLEN_MAXSEG 4 -# define TCPOPT_WINDOW 3 -# define TCPOLEN_WINDOW 3 -# define TCPOPT_SACK_PERMITTED 4 /* Experimental */ -# define TCPOLEN_SACK_PERMITTED 2 -# define TCPOPT_SACK 5 /* Experimental */ -# define TCPOPT_TIMESTAMP 8 -# define TCPOLEN_TIMESTAMP 10 -# define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */ - -# define TCPOPT_TSTAMP_HDR \ - (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP) - -/* - * Default maximum segment size for TCP. - * With an IP MSS of 576, this is 536, - * but 512 is probably more convenient. - * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)). - */ -# define TCP_MSS 512 - -# define TCP_MAXWIN 65535 /* largest value for (unscaled) window */ - -# define TCP_MAX_WINSHIFT 14 /* maximum window shift */ - -# define SOL_TCP 6 /* TCP level */ - - -# define TCPI_OPT_TIMESTAMPS 1 -# define TCPI_OPT_SACK 2 -# define TCPI_OPT_WSCALE 4 -# define TCPI_OPT_ECN 8 /* ECN was negociated at TCP session init */ -# define TCPI_OPT_ECN_SEEN 16 /* we received at least one packet with ECT */ -# define TCPI_OPT_SYN_DATA 32 /* SYN-ACK acked data in SYN sent or rcvd */ - -/* Values for tcpi_state. */ -enum tcp_ca_state -{ - TCP_CA_Open = 0, - TCP_CA_Disorder = 1, - TCP_CA_CWR = 2, - TCP_CA_Recovery = 3, - TCP_CA_Loss = 4 -}; - -struct tcp_info -{ - uint8_t tcpi_state; - uint8_t tcpi_ca_state; - uint8_t tcpi_retransmits; - uint8_t tcpi_probes; - uint8_t tcpi_backoff; - uint8_t tcpi_options; - uint8_t tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4; - - uint32_t tcpi_rto; - uint32_t tcpi_ato; - uint32_t tcpi_snd_mss; - uint32_t tcpi_rcv_mss; - - uint32_t tcpi_unacked; - uint32_t tcpi_sacked; - uint32_t tcpi_lost; - uint32_t tcpi_retrans; - uint32_t tcpi_fackets; - - /* Times. */ - uint32_t tcpi_last_data_sent; - uint32_t tcpi_last_ack_sent; /* Not remembered, sorry. */ - uint32_t tcpi_last_data_recv; - uint32_t tcpi_last_ack_recv; - - /* Metrics. */ - uint32_t tcpi_pmtu; - uint32_t tcpi_rcv_ssthresh; - uint32_t tcpi_rtt; - uint32_t tcpi_rttvar; - uint32_t tcpi_snd_ssthresh; - uint32_t tcpi_snd_cwnd; - uint32_t tcpi_advmss; - uint32_t tcpi_reordering; - - uint32_t tcpi_rcv_rtt; - uint32_t tcpi_rcv_space; - - uint32_t tcpi_total_retrans; -}; - - -/* For TCP_MD5SIG socket option. */ -#define TCP_MD5SIG_MAXKEYLEN 80 - -struct tcp_md5sig -{ - struct sockaddr_storage tcpm_addr; /* Address associated. */ - uint16_t __tcpm_pad1; /* Zero. */ - uint16_t tcpm_keylen; /* Key length. */ - uint32_t __tcpm_pad2; /* Zero. */ - uint8_t tcpm_key[TCP_MD5SIG_MAXKEYLEN]; /* Key (binary). */ -}; - -/* For socket repair options. */ -struct tcp_repair_opt -{ - uint32_t opt_code; - uint32_t opt_val; -}; - -/* Queue to repair, for TCP_REPAIR_QUEUE. */ -enum -{ - TCP_NO_QUEUE, - TCP_RECV_QUEUE, - TCP_SEND_QUEUE, - TCP_QUEUES_NR, -}; - -/* For cookie transactions socket options. */ -#define TCP_COOKIE_MIN 8 /* 64-bits */ -#define TCP_COOKIE_MAX 16 /* 128-bits */ -#define TCP_COOKIE_PAIR_SIZE (2*TCP_COOKIE_MAX) - -/* Flags for both getsockopt and setsockopt */ -#define TCP_COOKIE_IN_ALWAYS (1 << 0) /* Discard SYN without cookie */ -#define TCP_COOKIE_OUT_NEVER (1 << 1) /* Prohibit outgoing cookies, - * supercedes everything. */ - -/* Flags for getsockopt */ -#define TCP_S_DATA_IN (1 << 2) /* Was data received? */ -#define TCP_S_DATA_OUT (1 << 3) /* Was data sent? */ - -#define TCP_MSS_DEFAULT 536U /* IPv4 (RFC1122, RFC2581) */ -#define TCP_MSS_DESIRED 1220U /* IPv6 (tunneled), EDNS0 (RFC3226) */ - -struct tcp_cookie_transactions -{ - uint16_t tcpct_flags; - uint8_t __tcpct_pad1; - uint8_t tcpct_cookie_desired; - uint16_t tcpct_s_data_desired; - uint16_t tcpct_used; - uint8_t tcpct_value[TCP_MSS_DEFAULT]; -}; - -/* For use with TCP_REPAIR_WINDOW. */ -struct tcp_repair_window -{ - uint32_t snd_wl1; - uint32_t snd_wnd; - uint32_t max_window; - uint32_t rcv_wnd; - uint32_t rcv_wup; -}; - -#endif /* Misc. */ - -#endif /* netinet/tcp.h */ diff --git a/sysdeps/gnu/netinet/udp.h b/sysdeps/gnu/netinet/udp.h deleted file mode 100644 index a4eb32d76b..0000000000 --- a/sysdeps/gnu/netinet/udp.h +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * Copyright (C) 1982, 1986 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef __NETINET_UDP_H -#define __NETINET_UDP_H 1 - -#include -#include - -/* UDP header as specified by RFC 768, August 1980. */ - -struct udphdr -{ - __extension__ union - { - struct - { - uint16_t uh_sport; /* source port */ - uint16_t uh_dport; /* destination port */ - uint16_t uh_ulen; /* udp length */ - uint16_t uh_sum; /* udp checksum */ - }; - struct - { - uint16_t source; - uint16_t dest; - uint16_t len; - uint16_t check; - }; - }; -}; - -/* UDP socket options */ -#define UDP_CORK 1 /* Never send partially complete segments. */ -#define UDP_ENCAP 100 /* Set the socket to accept - encapsulated packets. */ -#define UDP_NO_CHECK6_TX 101 /* Disable sending checksum for UDP - over IPv6. */ -#define UDP_NO_CHECK6_RX 102 /* Disable accepting checksum for UDP - over IPv6. */ - -/* UDP encapsulation types */ -#define UDP_ENCAP_ESPINUDP_NON_IKE 1 /* draft-ietf-ipsec-nat-t-ike-00/01 */ -#define UDP_ENCAP_ESPINUDP 2 /* draft-ietf-ipsec-udp-encaps-06 */ -#define UDP_ENCAP_L2TPINUDP 3 /* rfc2661 */ -#define UDP_ENCAP_GTP0 4 /* GSM TS 09.60 */ -#define UDP_ENCAP_GTP1U 5 /* 3GPP TS 29.060 */ - -#define SOL_UDP 17 /* sockopt level for UDP */ - -#endif /* netinet/udp.h */ diff --git a/sysdeps/gnu/rt-unwind-resume.c b/sysdeps/gnu/rt-unwind-resume.c deleted file mode 100644 index 743e675d4d..0000000000 --- a/sysdeps/gnu/rt-unwind-resume.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/gnu/siglist.c b/sysdeps/gnu/siglist.c deleted file mode 100644 index 08d7488bb0..0000000000 --- a/sysdeps/gnu/siglist.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Define list of all signal numbers and their names. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -const char *const __new_sys_siglist[NSIG] = -{ -#define init_sig(sig, abbrev, desc) [sig] = desc, -#include -#undef init_sig -}; -libc_hidden_ver (__new_sys_siglist, _sys_siglist) - -const char *const __new_sys_sigabbrev[NSIG] = -{ -#define init_sig(sig, abbrev, desc) [sig] = abbrev, -#include -#undef init_sig -}; - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) -declare_symbol_alias (__old_sys_siglist, __new_sys_siglist, object, - OLD_SIGLIST_SIZE * __WORDSIZE / 8) - -declare_symbol_alias (__old_sys_sigabbrev, __new_sys_sigabbrev, object, - OLD_SIGLIST_SIZE * __WORDSIZE / 8) - -declare_symbol_alias (_old_sys_siglist, __new_sys_siglist, object, - OLD_SIGLIST_SIZE * __WORDSIZE / 8) - -compat_symbol (libc, __old_sys_siglist, _sys_siglist, GLIBC_2_0); -compat_symbol (libc, _old_sys_siglist, sys_siglist, GLIBC_2_0); -compat_symbol (libc, __old_sys_sigabbrev, sys_sigabbrev, GLIBC_2_0); -#endif - -#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3_3) && defined OLD2_SIGLIST_SIZE -declare_symbol_alias (__old2_sys_siglist, __new_sys_siglist, object, - OLD2_SIGLIST_SIZE * __WORDSIZE / 8) - -declare_symbol_alias (__old2_sys_sigabbrev, __new_sys_sigabbrev, object, - OLD2_SIGLIST_SIZE * __WORDSIZE / 8) - -declare_symbol_alias (_old2_sys_siglist, __new_sys_siglist, object, - OLD2_SIGLIST_SIZE * __WORDSIZE / 8) - -compat_symbol (libc, __old2_sys_siglist, _sys_siglist, GLIBC_2_1); -compat_symbol (libc, _old2_sys_siglist, sys_siglist, GLIBC_2_1); -compat_symbol (libc, __old2_sys_sigabbrev, sys_sigabbrev, GLIBC_2_1); - -strong_alias (__new_sys_siglist, _new_sys_siglist) -versioned_symbol (libc, __new_sys_siglist, _sys_siglist, GLIBC_2_3_3); -versioned_symbol (libc, _new_sys_siglist, sys_siglist, GLIBC_2_3_3); -versioned_symbol (libc, __new_sys_sigabbrev, sys_sigabbrev, GLIBC_2_3_3); -#else -strong_alias (__new_sys_siglist, _new_sys_siglist) -versioned_symbol (libc, __new_sys_siglist, _sys_siglist, GLIBC_2_1); -versioned_symbol (libc, _new_sys_siglist, sys_siglist, GLIBC_2_1); -versioned_symbol (libc, __new_sys_sigabbrev, sys_sigabbrev, GLIBC_2_1); -#endif diff --git a/sysdeps/gnu/sys/mtio.h b/sysdeps/gnu/sys/mtio.h deleted file mode 100644 index 770b832e02..0000000000 --- a/sysdeps/gnu/sys/mtio.h +++ /dev/null @@ -1,276 +0,0 @@ -/* Structures and definitions for magnetic tape I/O control commands. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Written by H. Bergman . */ - -#ifndef _SYS_MTIO_H -#define _SYS_MTIO_H 1 - -/* Get necessary definitions from system and kernel headers. */ -#include -#include - - -/* Structure for MTIOCTOP - magnetic tape operation command. */ -struct mtop - { - short int mt_op; /* Operations defined below. */ - int mt_count; /* How many of them. */ - }; -#define _IOT_mtop /* Hurd ioctl type field. */ \ - _IOT (_IOTS (short), 1, _IOTS (int), 1, 0, 0) - -/* Magnetic Tape operations [Not all operations supported by all drivers]. */ -#define MTRESET 0 /* +reset drive in case of problems. */ -#define MTFSF 1 /* Forward space over FileMark, - * position at first record of next file. */ -#define MTBSF 2 /* Backward space FileMark (position before FM). */ -#define MTFSR 3 /* Forward space record. */ -#define MTBSR 4 /* Backward space record. */ -#define MTWEOF 5 /* Write an end-of-file record (mark). */ -#define MTREW 6 /* Rewind. */ -#define MTOFFL 7 /* Rewind and put the drive offline (eject?). */ -#define MTNOP 8 /* No op, set status only (read with MTIOCGET). */ -#define MTRETEN 9 /* Retension tape. */ -#define MTBSFM 10 /* +backward space FileMark, position at FM. */ -#define MTFSFM 11 /* +forward space FileMark, position at FM. */ -#define MTEOM 12 /* Goto end of recorded media (for appending files). - MTEOM positions after the last FM, ready for - appending another file. */ -#define MTERASE 13 /* Erase tape -- be careful! */ - -#define MTRAS1 14 /* Run self test 1 (nondestructive). */ -#define MTRAS2 15 /* Run self test 2 (destructive). */ -#define MTRAS3 16 /* Reserved for self test 3. */ - -#define MTSETBLK 20 /* Set block length (SCSI). */ -#define MTSETDENSITY 21 /* Set tape density (SCSI). */ -#define MTSEEK 22 /* Seek to block (Tandberg, etc.). */ -#define MTTELL 23 /* Tell block (Tandberg, etc.). */ -#define MTSETDRVBUFFER 24 /* Set the drive buffering according to SCSI-2. - Ordinary buffered operation with code 1. */ -#define MTFSS 25 /* Space forward over setmarks. */ -#define MTBSS 26 /* Space backward over setmarks. */ -#define MTWSM 27 /* Write setmarks. */ - -#define MTLOCK 28 /* Lock the drive door. */ -#define MTUNLOCK 29 /* Unlock the drive door. */ -#define MTLOAD 30 /* Execute the SCSI load command. */ -#define MTUNLOAD 31 /* Execute the SCSI unload command. */ -#define MTCOMPRESSION 32/* Control compression with SCSI mode page 15. */ -#define MTSETPART 33 /* Change the active tape partition. */ -#define MTMKPART 34 /* Format the tape with one or two partitions. */ - -/* structure for MTIOCGET - mag tape get status command */ - -struct mtget - { - long int mt_type; /* Type of magtape device. */ - long int mt_resid; /* Residual count: (not sure) - number of bytes ignored, or - number of files not skipped, or - number of records not skipped. */ - /* The following registers are device dependent. */ - long int mt_dsreg; /* Status register. */ - long int mt_gstat; /* Generic (device independent) status. */ - long int mt_erreg; /* Error register. */ - /* The next two fields are not always used. */ - __daddr_t mt_fileno; /* Number of current file on tape. */ - __daddr_t mt_blkno; /* Current block number. */ - }; -#define _IOT_mtget /* Hurd ioctl type field. */ \ - _IOT (_IOTS (long), 7, 0, 0, 0, 0) - - -/* Constants for mt_type. Not all of these are supported, and - these are not all of the ones that are supported. */ -#define MT_ISUNKNOWN 0x01 -#define MT_ISQIC02 0x02 /* Generic QIC-02 tape streamer. */ -#define MT_ISWT5150 0x03 /* Wangtek 5150EQ, QIC-150, QIC-02. */ -#define MT_ISARCHIVE_5945L2 0x04 /* Archive 5945L-2, QIC-24, QIC-02?. */ -#define MT_ISCMSJ500 0x05 /* CMS Jumbo 500 (QIC-02?). */ -#define MT_ISTDC3610 0x06 /* Tandberg 6310, QIC-24. */ -#define MT_ISARCHIVE_VP60I 0x07 /* Archive VP60i, QIC-02. */ -#define MT_ISARCHIVE_2150L 0x08 /* Archive Viper 2150L. */ -#define MT_ISARCHIVE_2060L 0x09 /* Archive Viper 2060L. */ -#define MT_ISARCHIVESC499 0x0A /* Archive SC-499 QIC-36 controller. */ -#define MT_ISQIC02_ALL_FEATURES 0x0F /* Generic QIC-02 with all features. */ -#define MT_ISWT5099EEN24 0x11 /* Wangtek 5099-een24, 60MB, QIC-24. */ -#define MT_ISTEAC_MT2ST 0x12 /* Teac MT-2ST 155mb drive, - Teac DC-1 card (Wangtek type). */ -#define MT_ISEVEREX_FT40A 0x32 /* Everex FT40A (QIC-40). */ -#define MT_ISDDS1 0x51 /* DDS device without partitions. */ -#define MT_ISDDS2 0x52 /* DDS device with partitions. */ -#define MT_ISSCSI1 0x71 /* Generic ANSI SCSI-1 tape unit. */ -#define MT_ISSCSI2 0x72 /* Generic ANSI SCSI-2 tape unit. */ - -/* QIC-40/80/3010/3020 ftape supported drives. - 20bit vendor ID + 0x800000 (see vendors.h in ftape distribution). */ -#define MT_ISFTAPE_UNKNOWN 0x800000 /* obsolete */ -#define MT_ISFTAPE_FLAG 0x800000 - -struct mt_tape_info - { - long int t_type; /* Device type id (mt_type). */ - char *t_name; /* Descriptive name. */ - }; - -#define MT_TAPE_INFO \ - { \ - {MT_ISUNKNOWN, "Unknown type of tape device"}, \ - {MT_ISQIC02, "Generic QIC-02 tape streamer"}, \ - {MT_ISWT5150, "Wangtek 5150, QIC-150"}, \ - {MT_ISARCHIVE_5945L2, "Archive 5945L-2"}, \ - {MT_ISCMSJ500, "CMS Jumbo 500"}, \ - {MT_ISTDC3610, "Tandberg TDC 3610, QIC-24"}, \ - {MT_ISARCHIVE_VP60I, "Archive VP60i, QIC-02"}, \ - {MT_ISARCHIVE_2150L, "Archive Viper 2150L"}, \ - {MT_ISARCHIVE_2060L, "Archive Viper 2060L"}, \ - {MT_ISARCHIVESC499, "Archive SC-499 QIC-36 controller"}, \ - {MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"}, \ - {MT_ISWT5099EEN24, "Wangtek 5099-een24, 60MB"}, \ - {MT_ISTEAC_MT2ST, "Teac MT-2ST 155mb data cassette drive"}, \ - {MT_ISEVEREX_FT40A, "Everex FT40A, QIC-40"}, \ - {MT_ISSCSI1, "Generic SCSI-1 tape"}, \ - {MT_ISSCSI2, "Generic SCSI-2 tape"}, \ - {0, NULL} \ - } - - -/* Structure for MTIOCPOS - mag tape get position command. */ - -struct mtpos - { - long int mt_blkno; /* Current block number. */ - }; -#define _IOT_mtpos /* Hurd ioctl type field. */ \ - _IOT_SIMPLE (long) - - -/* Structure for MTIOCGETCONFIG/MTIOCSETCONFIG primarily intended - as an interim solution for QIC-02 until DDI is fully implemented. */ -struct mtconfiginfo - { - long int mt_type; /* Drive type. */ - long int ifc_type; /* Interface card type. */ - unsigned short int irqnr; /* IRQ number to use. */ - unsigned short int dmanr; /* DMA channel to use. */ - unsigned short int port; /* IO port base address. */ - - unsigned long int debug; /* Debugging flags. */ - - unsigned have_dens:1; - unsigned have_bsf:1; - unsigned have_fsr:1; - unsigned have_bsr:1; - unsigned have_eod:1; - unsigned have_seek:1; - unsigned have_tell:1; - unsigned have_ras1:1; - unsigned have_ras2:1; - unsigned have_ras3:1; - unsigned have_qfa:1; - - unsigned pad1:5; - char reserved[10]; - }; -#define _IOT_mtconfiginfo /* Hurd ioctl type field. */ \ - _IOT (_IOTS (long), 2, _IOTS (short), 3, _IOTS (long), 1) /* XXX wrong */ - - -/* Magnetic tape I/O control commands. */ -#define MTIOCTOP _IOW('m', 1, struct mtop) /* Do a mag tape op. */ -#define MTIOCGET _IOR('m', 2, struct mtget) /* Get tape status. */ -#define MTIOCPOS _IOR('m', 3, struct mtpos) /* Get tape position.*/ - -/* The next two are used by the QIC-02 driver for runtime reconfiguration. - See tpqic02.h for struct mtconfiginfo. */ -#define MTIOCGETCONFIG _IOR('m', 4, struct mtconfiginfo) /* Get tape config.*/ -#define MTIOCSETCONFIG _IOW('m', 5, struct mtconfiginfo) /* Set tape config.*/ - -/* Generic Mag Tape (device independent) status macros for examining - mt_gstat -- HP-UX compatible. - There is room for more generic status bits here, but I don't - know which of them are reserved. At least three or so should - be added to make this really useful. */ -#define GMT_EOF(x) ((x) & 0x80000000) -#define GMT_BOT(x) ((x) & 0x40000000) -#define GMT_EOT(x) ((x) & 0x20000000) -#define GMT_SM(x) ((x) & 0x10000000) /* DDS setmark */ -#define GMT_EOD(x) ((x) & 0x08000000) /* DDS EOD */ -#define GMT_WR_PROT(x) ((x) & 0x04000000) -/* #define GMT_ ? ((x) & 0x02000000) */ -#define GMT_ONLINE(x) ((x) & 0x01000000) -#define GMT_D_6250(x) ((x) & 0x00800000) -#define GMT_D_1600(x) ((x) & 0x00400000) -#define GMT_D_800(x) ((x) & 0x00200000) -/* #define GMT_ ? ((x) & 0x00100000) */ -/* #define GMT_ ? ((x) & 0x00080000) */ -#define GMT_DR_OPEN(x) ((x) & 0x00040000) /* Door open (no tape). */ -/* #define GMT_ ? ((x) & 0x00020000) */ -#define GMT_IM_REP_EN(x) ((x) & 0x00010000) /* Immediate report mode.*/ -/* 16 generic status bits unused. */ - - -/* SCSI-tape specific definitions. Bitfield shifts in the status */ -#define MT_ST_BLKSIZE_SHIFT 0 -#define MT_ST_BLKSIZE_MASK 0xffffff -#define MT_ST_DENSITY_SHIFT 24 -#define MT_ST_DENSITY_MASK 0xff000000 - -#define MT_ST_SOFTERR_SHIFT 0 -#define MT_ST_SOFTERR_MASK 0xffff - -/* Bitfields for the MTSETDRVBUFFER ioctl. */ -#define MT_ST_OPTIONS 0xf0000000 -#define MT_ST_BOOLEANS 0x10000000 -#define MT_ST_SETBOOLEANS 0x30000000 -#define MT_ST_CLEARBOOLEANS 0x40000000 -#define MT_ST_WRITE_THRESHOLD 0x20000000 -#define MT_ST_DEF_BLKSIZE 0x50000000 -#define MT_ST_DEF_OPTIONS 0x60000000 - -#define MT_ST_BUFFER_WRITES 0x1 -#define MT_ST_ASYNC_WRITES 0x2 -#define MT_ST_READ_AHEAD 0x4 -#define MT_ST_DEBUGGING 0x8 -#define MT_ST_TWO_FM 0x10 -#define MT_ST_FAST_MTEOM 0x20 -#define MT_ST_AUTO_LOCK 0x40 -#define MT_ST_DEF_WRITES 0x80 -#define MT_ST_CAN_BSR 0x100 -#define MT_ST_NO_BLKLIMS 0x200 -#define MT_ST_CAN_PARTITIONS 0x400 -#define MT_ST_SCSI2LOGICAL 0x800 - -/* The mode parameters to be controlled. Parameter chosen with bits 20-28. */ -#define MT_ST_CLEAR_DEFAULT 0xfffff -#define MT_ST_DEF_DENSITY (MT_ST_DEF_OPTIONS | 0x100000) -#define MT_ST_DEF_COMPRESSION (MT_ST_DEF_OPTIONS | 0x200000) -#define MT_ST_DEF_DRVBUFFER (MT_ST_DEF_OPTIONS | 0x300000) - -/* The offset for the arguments for the special HP changer load command. */ -#define MT_ST_HPLOADER_OFFSET 10000 - - -/* Specify default tape device. */ -#ifndef DEFTAPE -# define DEFTAPE "/dev/tape" -#endif - -#endif /* mtio.h */ diff --git a/sysdeps/gnu/unwind-resume.c b/sysdeps/gnu/unwind-resume.c deleted file mode 100644 index 1ea833ba9b..0000000000 --- a/sysdeps/gnu/unwind-resume.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include -#include - - -void (*__libgcc_s_resume) (struct _Unwind_Exception *exc) - attribute_hidden __attribute__ ((noreturn)); - -static _Unwind_Reason_Code (*libgcc_s_personality) PERSONALITY_PROTO; - -void attribute_hidden __attribute__ ((cold)) -__libgcc_s_init (void) -{ - void *resume, *personality; - void *handle; - - handle = __libc_dlopen (LIBGCC_S_SO); - - if (handle == NULL - || (resume = __libc_dlsym (handle, "_Unwind_Resume")) == NULL - || (personality = __libc_dlsym (handle, "__gcc_personality_v0")) == NULL) - __libc_fatal (LIBGCC_S_SO - " must be installed for pthread_cancel to work\n"); - -#ifdef PTR_MANGLE - PTR_MANGLE (resume); -#endif - __libgcc_s_resume = resume; -#ifdef PTR_MANGLE - PTR_MANGLE (personality); -#endif - libgcc_s_personality = personality; -} - -#if !HAVE_ARCH_UNWIND_RESUME -void -_Unwind_Resume (struct _Unwind_Exception *exc) -{ - if (__glibc_unlikely (__libgcc_s_resume == NULL)) - __libgcc_s_init (); - - __typeof (__libgcc_s_resume) resume = __libgcc_s_resume; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (resume); -#endif - (*resume) (exc); -} -#endif - -_Unwind_Reason_Code -__gcc_personality_v0 PERSONALITY_PROTO -{ - if (__glibc_unlikely (libgcc_s_personality == NULL)) - __libgcc_s_init (); - - __typeof (libgcc_s_personality) personality = libgcc_s_personality; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (personality); -#endif - return (*personality) PERSONALITY_ARGS; -} diff --git a/sysdeps/gnu/updwtmp.c b/sysdeps/gnu/updwtmp.c deleted file mode 100644 index ab5ca2b10d..0000000000 --- a/sysdeps/gnu/updwtmp.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Mark Kettenis , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define TRANSFORM_UTMP_FILE_NAME(file_name) \ - ((strcmp (file_name, _PATH_UTMP "x") == 0 \ - && __access (_PATH_UTMP "x", F_OK) != 0) ? _PATH_UTMP : \ - ((strcmp (file_name, _PATH_WTMP "x") == 0 \ - && __access (_PATH_WTMP "x", F_OK) != 0) ? _PATH_WTMP : \ - file_name)) - -#include diff --git a/sysdeps/gnu/utmp_file.c b/sysdeps/gnu/utmp_file.c deleted file mode 100644 index d4f7a94d9e..0000000000 --- a/sysdeps/gnu/utmp_file.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Mark Kettenis , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define TRANSFORM_UTMP_FILE_NAME(file_name) \ - ((strcmp (file_name, _PATH_UTMP "x") == 0 \ - && __access (_PATH_UTMP "x", F_OK) != 0) ? _PATH_UTMP : \ - ((strcmp (file_name, _PATH_WTMP "x") == 0 \ - && __access (_PATH_WTMP "x", F_OK) != 0) ? _PATH_WTMP : \ - file_name)) - -#include diff --git a/sysdeps/gnu/utmpx.h b/sysdeps/gnu/utmpx.h deleted file mode 100644 index fbf55bd756..0000000000 --- a/sysdeps/gnu/utmpx.h +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _UTMPX_H -#define _UTMPX_H 1 - -#include -#include - -/* Required according to Unix98. */ -#ifndef __pid_t_defined -typedef __pid_t pid_t; -# define __pid_t_defined -#endif - -/* Get system dependent values and data structures. */ -#include - -#ifdef __USE_GNU -/* Compatibility names for the strings of the canonical file names. */ -# define UTMPX_FILE _PATH_UTMPX -# define UTMPX_FILENAME _PATH_UTMPX -# define WTMPX_FILE _PATH_WTMPX -# define WTMPX_FILENAME _PATH_WTMPX -#endif - -/* For the getutmp{,x} functions we need the `struct utmp'. */ -#ifdef __USE_GNU -struct utmp; -#endif - - -__BEGIN_DECLS - -/* Open user accounting database. - - This function is a possible cancellation point and therefore not - marked with __THROW. */ -extern void setutxent (void); - -/* Close user accounting database. - - This function is a possible cancellation point and therefore not - marked with __THROW. */ -extern void endutxent (void); - -/* Get the next entry from the user accounting database. - - This function is a possible cancellation point and therefore not - marked with __THROW. */ -extern struct utmpx *getutxent (void); - -/* Get the user accounting database entry corresponding to ID. - - This function is a possible cancellation point and therefore not - marked with __THROW. */ -extern struct utmpx *getutxid (const struct utmpx *__id); - -/* Get the user accounting database entry corresponding to LINE. - - This function is a possible cancellation point and therefore not - marked with __THROW. */ -extern struct utmpx *getutxline (const struct utmpx *__line); - -/* Write the entry UTMPX into the user accounting database. - - This function is a possible cancellation point and therefore not - marked with __THROW. */ -extern struct utmpx *pututxline (const struct utmpx *__utmpx); - - -#ifdef __USE_GNU -/* Change name of the utmpx file to be examined. - - This function is not part of POSIX and therefore no official - cancellation point. But due to similarity with an POSIX interface - or due to the implementation it is a cancellation point and - therefore not marked with __THROW. */ -extern int utmpxname (const char *__file); - -/* Append entry UTMP to the wtmpx-like file WTMPX_FILE. - - This function is not part of POSIX and therefore no official - cancellation point. But due to similarity with an POSIX interface - or due to the implementation it is a cancellation point and - therefore not marked with __THROW. */ -extern void updwtmpx (const char *__wtmpx_file, - const struct utmpx *__utmpx); - - -/* Copy the information in UTMPX to UTMP. - - This function is not part of POSIX and therefore no official - cancellation point. But due to similarity with an POSIX interface - or due to the implementation it is a cancellation point and - therefore not marked with __THROW. */ -extern void getutmp (const struct utmpx *__utmpx, - struct utmp *__utmp); - -/* Copy the information in UTMP to UTMPX. - - This function is not part of POSIX and therefore no official - cancellation point. But due to similarity with an POSIX interface - or due to the implementation it is a cancellation point and - therefore not marked with __THROW. */ -extern void getutmpx (const struct utmp *__utmp, struct utmpx *__utmpx); -#endif - -__END_DECLS - -#endif /* utmpx.h */ diff --git a/sysdeps/hppa/Makefile b/sysdeps/hppa/Makefile deleted file mode 100644 index c0edb99917..0000000000 --- a/sysdeps/hppa/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (C) 2000-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# Contributed by David Huggins-Daines (dhd@debian.org) - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# . - -# We used to need this since the build process uses ld -r. Now we use -# ld -r --unique=.text* which does more or less the same thing, but better. -# CFLAGS-.os += -ffunction-sections -LDFLAGS-c_pic.os += -Wl,--unique=.text* - -ifeq ($(subdir),elf) -CFLAGS-rtld.c += -mdisable-fpregs -sysdep-dl-routines += dl-symaddr dl-fptr -# dl-fptr.c needs a complete rewrite to fix ISO C aliasing violations. -CFLAGS-dl-fptr.c = -Wno-error -endif - -ifeq ($(subdir),csu) -ifeq (yes,$(build-shared)) -# Compatibility -ifeq (yes,$(have-protected)) -CPPFLAGS-libgcc-compat.c = -DHAVE_DOT_HIDDEN -endif -sysdep_routines += libgcc-compat -shared-only-routines += libgcc-compat -endif -endif - -# We implement a 64-bit `long double'. The standard says we can do this. -# This means our `long double' and `double' are identical. -long-double-fcts = no diff --git a/sysdeps/hppa/Versions b/sysdeps/hppa/Versions deleted file mode 100644 index c9723b4746..0000000000 --- a/sysdeps/hppa/Versions +++ /dev/null @@ -1,12 +0,0 @@ -ld { - GLIBC_PRIVATE { - # hppa specific functions in the dynamic linker, but used by libc.so. - _dl_symbol_address; _dl_lookup_address; - _dl_function_address; - } -} -libc { - GLIBC_2.2 { - __clz_tab; - } -} diff --git a/sysdeps/hppa/__longjmp.c b/sysdeps/hppa/__longjmp.c deleted file mode 100644 index a7eefc7ad6..0000000000 --- a/sysdeps/hppa/__longjmp.c +++ /dev/null @@ -1,84 +0,0 @@ -/* longjmp for PA-RISC. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* Jump to the position specified by ENV, causing the - setjmp call there to return VAL, or 1 if VAL is 0. */ -void -__longjmp (__jmp_buf env, int val) -{ - /* We must use one of the non-callee saves registers - for env. */ - register unsigned long r26 asm ("r26") = (unsigned long)&env[0]; - register unsigned long r25 asm ("r25") = (unsigned long)(val == 0 ? 1 : val); - -#ifdef CHECK_SP - CHECK_SP (env[0].__jmp_buf.__sp); -#endif - - asm volatile( - /* Set return value. */ - "copy %0, %%r28\n\t" - /* Load callee saves from r3 to r18. */ - "ldw 0(%1), %%r3\n\t" - "ldw 8(%1), %%r4\n\t" - "ldw 12(%1), %%r5\n\t" - "ldw 16(%1), %%r6\n\t" - "ldw 20(%1), %%r7\n\t" - "ldw 24(%1), %%r8\n\t" - "ldw 28(%1), %%r9\n\t" - "ldw 32(%1), %%r10\n\t" - "ldw 36(%1), %%r11\n\t" - "ldw 40(%1), %%r12\n\t" - "ldw 44(%1), %%r13\n\t" - "ldw 48(%1), %%r14\n\t" - "ldw 52(%1), %%r15\n\t" - "ldw 56(%1), %%r16\n\t" - "ldw 60(%1), %%r17\n\t" - "ldw 64(%1), %%r18\n\t" - /* Load PIC register. */ - "ldw 68(%1), %%r19\n\t" - /* Load static link register. */ - "ldw 72(%1), %%r27\n\t" - /* Load stack pointer. */ - "ldw 76(%1), %%r30\n\t" - /* Load return pointer. */ - "ldw 80(%1), %%rp\n\t" - /* Ues a spare caller saves register. */ - "ldo 88(%1),%%r25\n\t" - /* Load callee saves from fr12 to fr21. */ - "fldds,ma 8(%%r25), %%fr12\n\t" - "fldds,ma 8(%%r25), %%fr13\n\t" - "fldds,ma 8(%%r25), %%fr14\n\t" - "fldds,ma 8(%%r25), %%fr15\n\t" - "fldds,ma 8(%%r25), %%fr16\n\t" - "fldds,ma 8(%%r25), %%fr17\n\t" - "fldds,ma 8(%%r25), %%fr18\n\t" - "fldds,ma 8(%%r25), %%fr19\n\t" - "fldds,ma 8(%%r25), %%fr20\n\t" - "fldds 0(%%r25), %%fr21\n\t" - /* Jump back to stored return address. */ - "bv,n %%r0(%%r2)\n\t" - : /* No outputs. */ - : "r" (r25), "r" (r26) - : /* No point in clobbers. */ ); - /* Avoid `volatile function does return' warnings. */ - for (;;); -} diff --git a/sysdeps/hppa/abort-instr.h b/sysdeps/hppa/abort-instr.h deleted file mode 100644 index c13b0e5a4c..0000000000 --- a/sysdeps/hppa/abort-instr.h +++ /dev/null @@ -1,6 +0,0 @@ -/* An instruction privileged instruction to crash a userspace program. - - We go with iitlbp because it has a history of being used to crash - programs. */ - -#define ABORT_INSTRUCTION asm ("iitlbp %r0,(%sr0, %r0)") diff --git a/sysdeps/hppa/add_n.S b/sysdeps/hppa/add_n.S deleted file mode 100644 index b40b1afd0b..0000000000 --- a/sysdeps/hppa/add_n.S +++ /dev/null @@ -1,57 +0,0 @@ -;! HP-PA __mpn_add_n -- Add two limb vectors of the same length > 0 and store -;! sum in a third limb vector. - -;! Copyright (C) 1992-2017 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP Library is distributed in the hope that it will be useful, but -;! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -;! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! . - - -;! INPUT PARAMETERS -;! res_ptr gr26 -;! s1_ptr gr25 -;! s2_ptr gr24 -;! size gr23 - -;! One might want to unroll this as for other processors, but it turns -;! out that the data cache contention after a store makes such -;! unrolling useless. We can't come under 5 cycles/limb anyway. - - .text - .export __mpn_add_n -__mpn_add_n: - .proc - .callinfo frame=0,no_calls - .entry - - ldws,ma 4(%r25),%r21 - ldws,ma 4(%r24),%r20 - - addib,= -1,%r23,L$end ;! check for (SIZE == 1) - add %r21,%r20,%r28 ;! add first limbs ignoring cy - -L$loop: ldws,ma 4(%r25),%r21 - ldws,ma 4(%r24),%r20 - stws,ma %r28,4(%r26) - addib,<> -1,%r23,L$loop - addc %r21,%r20,%r28 - -L$end: stws %r28,0(%r26) - bv 0(%r2) - addc %r0,%r0,%r28 - - .exit - .procend diff --git a/sysdeps/hppa/bits/endian.h b/sysdeps/hppa/bits/endian.h deleted file mode 100644 index 585db0c0fa..0000000000 --- a/sysdeps/hppa/bits/endian.h +++ /dev/null @@ -1,7 +0,0 @@ -/* hppa1.1 big-endian. */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#define __BYTE_ORDER __BIG_ENDIAN diff --git a/sysdeps/hppa/bits/link.h b/sysdeps/hppa/bits/link.h deleted file mode 100644 index 14e105ff74..0000000000 --- a/sysdeps/hppa/bits/link.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - -/* Registers for entry into PLT on hppa. */ -typedef struct La_hppa_regs -{ - uint32_t lr_reg[4]; - double lr_fpreg[4]; - uint32_t lr_sp; - uint32_t lr_ra; -} La_hppa_regs; - -/* Return values for calls from PLT on hppa. */ -typedef struct La_hppa_retval -{ - uint32_t lrv_r28; - uint32_t lrv_r29; - double lr_fr4; -} La_hppa_retval; - - -__BEGIN_DECLS - -extern Elf32_Addr la_hppa_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_hppa_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_hppa_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_hppa_regs *__inregs, - La_hppa_retval *__outregs, - const char *symname); - -__END_DECLS diff --git a/sysdeps/hppa/bits/setjmp.h b/sysdeps/hppa/bits/setjmp.h deleted file mode 100644 index 2e524d74a7..0000000000 --- a/sysdeps/hppa/bits/setjmp.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Define the machine-dependent type `jmp_buf'. HPPA version. */ -#ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include directly; use instead." -#endif - -#ifndef _ASM -/* The entire jump buffer must be 168 bytes long and laid - out in exactly as follows for ABI consistency. - * 20 x 32-bit gprs, with 8-bytes of padding, arranged so: - - r3 (callee saves) - - 4 bytes of padding. - - r4-r18 (callee saves) - - r19 (PIC register) - - r27 (static link register) - - r30 (stcack pointer) - - r2 (return pointer) - - 4 bytes of padding. - * 10 x 64-bit fprs in this order: - - fr12-fr21 (callee saves) - Note: We have 8 bytes of free space for future uses. */ -typedef union __jmp_buf_internal_tag - { - struct - { - int __r3; - int __pad0; - int __r4_r18[15]; - int __r19; - int __r27; - int __sp; - int __rp; - int __pad1; - double __fr12_fr21[10]; - } __jmp_buf; - /* Legacy definition. Ensures double alignment for fpsrs. */ - double __align[21]; - } __jmp_buf[1]; -#endif - -#endif /* bits/setjmp.h */ diff --git a/sysdeps/hppa/bsd-_setjmp.S b/sysdeps/hppa/bsd-_setjmp.S deleted file mode 100644 index c072b69191..0000000000 --- a/sysdeps/hppa/bsd-_setjmp.S +++ /dev/null @@ -1,38 +0,0 @@ -/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. HPPA version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - - .text - .align 4 - .globl _setjmp - .export _setjmp, code - .level 2.0 - .proc - .callinfo - .import __sigsetjmp -_setjmp: - b __sigsetjmp - ldi 0, %r25 - - .procend -libc_hidden_def (_setjmp) diff --git a/sysdeps/hppa/bsd-setjmp.S b/sysdeps/hppa/bsd-setjmp.S deleted file mode 100644 index 0936e6c7ed..0000000000 --- a/sysdeps/hppa/bsd-setjmp.S +++ /dev/null @@ -1,35 +0,0 @@ -/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. HPPA version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - - .text - .align 4 - .globl setjmp - .export setjmp, code - .level 2.0 - .proc - .callinfo - .import __sigsetjmp -setjmp: - b __sigsetjmp - ldi 1, %r25 - - .procend diff --git a/sysdeps/hppa/configure b/sysdeps/hppa/configure deleted file mode 100644 index 2cfe6cbea1..0000000000 --- a/sysdeps/hppa/configure +++ /dev/null @@ -1,32 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler line separator" >&5 -$as_echo_n "checking for assembler line separator... " >&6; } -if ${libc_cv_asm_line_sep+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.s <&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - libc_cv_asm_line_sep='!' -else - if test -z "$enable_hacker_mode"; then - echo "*** You need a newer assembler to compile glibc" - rm -f conftest* - exit 1 - fi - libc_cv_asm_line_sep=';' -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_line_sep" >&5 -$as_echo "$libc_cv_asm_line_sep" >&6; } -cat >>confdefs.h <<_ACEOF -#define ASM_LINE_SEP $libc_cv_asm_line_sep -_ACEOF diff --git a/sysdeps/hppa/configure.ac b/sysdeps/hppa/configure.ac deleted file mode 100644 index 1ec417b947..0000000000 --- a/sysdeps/hppa/configure.ac +++ /dev/null @@ -1,21 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. - -dnl The standard hppa assembler uses `;' to start comments and `!' -dnl as a line separator. -AC_CACHE_CHECK(for assembler line separator, - libc_cv_asm_line_sep, [dnl -cat > conftest.s <&AS_MESSAGE_LOG_FD); then - libc_cv_asm_line_sep='!' -else - if test -z "$enable_hacker_mode"; then - echo "*** You need a newer assembler to compile glibc" - rm -f conftest* - exit 1 - fi - libc_cv_asm_line_sep=';' -fi -rm -f conftest*]) -AC_DEFINE_UNQUOTED(ASM_LINE_SEP, $libc_cv_asm_line_sep) diff --git a/sysdeps/hppa/crti.S b/sysdeps/hppa/crti.S deleted file mode 100644 index 7c1470ddf8..0000000000 --- a/sysdeps/hppa/crti.S +++ /dev/null @@ -1,79 +0,0 @@ -/* Special .init and .fini section support for HPPA - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -/* _init prologue. */ - .section .init, "ax", %progbits - .align 4 - .globl _init - .type _init,@function -_init: - stw %rp,-20(%sp) - stwm %r4,64(%sp) - stw %r19,-32(%sp) -#if PREINIT_FUNCTION_WEAK - bl PREINIT_FUNCTION,%rp - copy %r19,%r4 /* delay slot */ -#else - bl PREINIT_FUNCTION,%rp - copy %r19,%r4 /* delay slot */ -#endif - copy %r4,%r19 - -/* _fini prologue. */ - .section .fini,"ax",%progbits - .align 4 - .globl _fini - .type _fini,@function -_fini: - stw %rp,-20(%sp) - stwm %r4,64(%sp) - stw %r19,-32(%sp) - copy %r19,%r4 diff --git a/sysdeps/hppa/crtn.S b/sysdeps/hppa/crtn.S deleted file mode 100644 index 42f310d217..0000000000 --- a/sysdeps/hppa/crtn.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Special .init and .fini section support for HPPA - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - -/* Note that we cannot have a weak undefined __gmon_start__, because - that would require this to be PIC, and the linker is currently not - able to generate a proper procedure descriptor for _init. Sad but - true. Anyway, HPPA is one of those horrible architectures where - making the comparison and indirect call is quite expensive (see the - comment in sysdeps/generic/initfini.c). */ - .text - .align 4 - .weak __gmon_start__ - .type __gmon_start__,@function -__gmon_start__: - .proc - .callinfo - .entry - bv,n %r0(%r2) - .exit - .procend - -/* Here is the tail end of _init. We put __gmon_start before this so - that the assembler creates the .PARISC.unwind section for us, ie. - with the right attributes. */ - .section .init, "ax", @progbits - ldw -84(%sp),%rp - copy %r4,%r19 - bv %r0(%rp) -_end_init: - ldwm -64(%sp),%r4 - -/* Our very own unwind info, because the assembler can't handle - functions split into two or more pieces. */ - .section .PARISC.unwind - .extern _init - .word _init, _end_init - .byte 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08 - -/* Here is the tail end of _fini. */ - .section .fini, "ax", @progbits - ldw -84(%sp),%rp - copy %r4,%r19 - bv %r0(%rp) -_end_fini: - ldwm -64(%sp),%r4 - - .section .PARISC.unwind - .extern _fini - .word _fini, _end_fini - .byte 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08 diff --git a/sysdeps/hppa/dl-fptr.c b/sysdeps/hppa/dl-fptr.c deleted file mode 100644 index 83bdb91202..0000000000 --- a/sysdeps/hppa/dl-fptr.c +++ /dev/null @@ -1,368 +0,0 @@ -/* Manage function descriptors. Generic version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef ELF_MACHINE_BOOT_FPTR_TABLE_LEN -/* ELF_MACHINE_BOOT_FPTR_TABLE_LEN should be greater than the number of - dynamic symbols in ld.so. */ -# define ELF_MACHINE_BOOT_FPTR_TABLE_LEN 256 -#endif - -#ifndef ELF_MACHINE_LOAD_ADDRESS -# error "ELF_MACHINE_LOAD_ADDRESS is not defined." -#endif - -#ifndef COMPARE_AND_SWAP -# define COMPARE_AND_SWAP(ptr, old, new) \ - (catomic_compare_and_exchange_bool_acq (ptr, new, old) == 0) -#endif - -ElfW(Addr) _dl_boot_fptr_table [ELF_MACHINE_BOOT_FPTR_TABLE_LEN]; - -static struct local - { - struct fdesc_table *root; - struct fdesc *free_list; - unsigned int npages; /* # of pages to allocate */ - /* the next to members MUST be consecutive! */ - struct fdesc_table boot_table; - struct fdesc boot_fdescs[1024]; - } -local = - { -#ifdef SHARED - /* Address of .boot_table is not known until runtime. */ - .root = 0, -#else - .root = &local.boot_table, -#endif - .npages = 2, - .boot_table = - { - .len = sizeof (local.boot_fdescs) / sizeof (local.boot_fdescs[0]), - .first_unused = 0 - } - }; - -/* Create a new fdesc table and return a pointer to the first fdesc - entry. The fdesc lock must have been acquired already. */ - -static struct fdesc_table * -new_fdesc_table (struct local *l, size_t *size) -{ - size_t old_npages = l->npages; - size_t new_npages = old_npages + old_npages; - struct fdesc_table *new_table; - - /* If someone has just created a new table, we return NULL to tell - the caller to use the new table. */ - if (! COMPARE_AND_SWAP (&l->npages, old_npages, new_npages)) - return (struct fdesc_table *) NULL; - - *size = old_npages * GLRO(dl_pagesize); - new_table = __mmap (NULL, *size, - PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); - if (new_table == MAP_FAILED) - _dl_signal_error (errno, NULL, NULL, - N_("cannot map pages for fdesc table")); - - new_table->len - = (*size - sizeof (*new_table)) / sizeof (struct fdesc); - new_table->first_unused = 1; - return new_table; -} - -/* Must call _dl_fptr_init before using any other function. */ -void -_dl_fptr_init (void) -{ - struct local *l; - - ELF_MACHINE_LOAD_ADDRESS (l, local); - l->root = &l->boot_table; -} - -static ElfW(Addr) -make_fdesc (ElfW(Addr) ip, ElfW(Addr) gp) -{ - struct fdesc *fdesc = NULL; - struct fdesc_table *root; - unsigned int old; - struct local *l; - - ELF_MACHINE_LOAD_ADDRESS (l, local); - - retry: - root = l->root; - while (1) - { - old = root->first_unused; - if (old >= root->len) - break; - else if (COMPARE_AND_SWAP (&root->first_unused, old, old + 1)) - { - fdesc = &root->fdesc[old]; - goto install; - } - } - - if (l->free_list) - { - /* Get it from free-list. */ - do - { - fdesc = l->free_list; - if (fdesc == NULL) - goto retry; - } - while (! COMPARE_AND_SWAP ((ElfW(Addr) *) &l->free_list, - (ElfW(Addr)) fdesc, fdesc->ip)); - } - else - { - /* Create a new fdesc table. */ - size_t size; - struct fdesc_table *new_table = new_fdesc_table (l, &size); - - if (new_table == NULL) - goto retry; - - new_table->next = root; - if (! COMPARE_AND_SWAP ((ElfW(Addr) *) &l->root, - (ElfW(Addr)) root, - (ElfW(Addr)) new_table)) - { - /* Someone has just installed a new table. Return NULL to - tell the caller to use the new table. */ - __munmap (new_table, size); - goto retry; - } - - /* Note that the first entry was reserved while allocating the - memory for the new page. */ - fdesc = &new_table->fdesc[0]; - } - - install: - fdesc->ip = ip; - fdesc->gp = gp; - - return (ElfW(Addr)) fdesc; -} - - -static inline ElfW(Addr) * __attribute__ ((always_inline)) -make_fptr_table (struct link_map *map) -{ - const ElfW(Sym) *symtab - = (const void *) D_PTR (map, l_info[DT_SYMTAB]); - const char *strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - ElfW(Addr) *fptr_table; - size_t size; - size_t len; - - /* XXX Apparently the only way to find out the size of the dynamic - symbol section is to assume that the string table follows right - afterwards... */ - len = ((strtab - (char *) symtab) - / map->l_info[DT_SYMENT]->d_un.d_val); - size = ((len * sizeof (fptr_table[0]) + GLRO(dl_pagesize) - 1) - & -GLRO(dl_pagesize)); - /* XXX We don't support here in the moment systems without MAP_ANON. - There probably are none for IA-64. In case this is proven wrong - we will have to open /dev/null here and use the file descriptor - instead of the hard-coded -1. */ - fptr_table = __mmap (NULL, size, - PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, - -1, 0); - if (fptr_table == MAP_FAILED) - _dl_signal_error (errno, NULL, NULL, - N_("cannot map pages for fptr table")); - - if (COMPARE_AND_SWAP ((ElfW(Addr) *) &map->l_mach.fptr_table, - (ElfW(Addr)) NULL, (ElfW(Addr)) fptr_table)) - map->l_mach.fptr_table_len = len; - else - __munmap (fptr_table, len * sizeof (fptr_table[0])); - - return map->l_mach.fptr_table; -} - - -ElfW(Addr) -_dl_make_fptr (struct link_map *map, const ElfW(Sym) *sym, - ElfW(Addr) ip) -{ - ElfW(Addr) *ftab = map->l_mach.fptr_table; - const ElfW(Sym) *symtab; - Elf_Symndx symidx; - struct local *l; - - if (__builtin_expect (ftab == NULL, 0)) - ftab = make_fptr_table (map); - - symtab = (const void *) D_PTR (map, l_info[DT_SYMTAB]); - symidx = sym - symtab; - - if (symidx >= map->l_mach.fptr_table_len) - _dl_signal_error (0, NULL, NULL, - N_("internal error: symidx out of range of fptr table")); - - while (ftab[symidx] == 0) - { - /* GOT has already been relocated in elf_get_dynamic_info - - don't try to relocate it again. */ - ElfW(Addr) fdesc - = make_fdesc (ip, map->l_info[DT_PLTGOT]->d_un.d_ptr); - - if (__builtin_expect (COMPARE_AND_SWAP (&ftab[symidx], (ElfW(Addr)) NULL, - fdesc), 1)) - { - /* Noone has updated the entry and the new function - descriptor has been installed. */ -#if 0 - const char *strtab - = (const void *) D_PTR (map, l_info[DT_STRTAB]); - - ELF_MACHINE_LOAD_ADDRESS (l, local); - if (l->root != &l->boot_table - || l->boot_table.first_unused > 20) - _dl_debug_printf ("created fdesc symbol `%s' at %lx\n", - strtab + sym->st_name, ftab[symidx]); -#endif - break; - } - else - { - /* We created a duplicated function descriptor. We put it on - free-list. */ - struct fdesc *f = (struct fdesc *) fdesc; - - ELF_MACHINE_LOAD_ADDRESS (l, local); - - do - f->ip = (ElfW(Addr)) l->free_list; - while (! COMPARE_AND_SWAP ((ElfW(Addr) *) &l->free_list, - f->ip, fdesc)); - } - } - - return ftab[symidx]; -} - - -void -_dl_unmap (struct link_map *map) -{ - ElfW(Addr) *ftab = map->l_mach.fptr_table; - struct fdesc *head = NULL, *tail = NULL; - size_t i; - - _dl_unmap_segments (map); - - if (ftab == NULL) - return; - - /* String together the fdesc structures that are being freed. */ - for (i = 0; i < map->l_mach.fptr_table_len; ++i) - { - if (ftab[i]) - { - *(struct fdesc **) ftab[i] = head; - head = (struct fdesc *) ftab[i]; - if (tail == NULL) - tail = head; - } - } - - /* Prepend the new list to the free_list: */ - if (tail) - do - tail->ip = (ElfW(Addr)) local.free_list; - while (! COMPARE_AND_SWAP ((ElfW(Addr) *) &local.free_list, - tail->ip, (ElfW(Addr)) head)); - - __munmap (ftab, (map->l_mach.fptr_table_len - * sizeof (map->l_mach.fptr_table[0]))); - - map->l_mach.fptr_table = NULL; -} - -extern ElfW(Addr) _dl_fixup (struct link_map *, ElfW(Word)) attribute_hidden; - -static inline Elf32_Addr -elf_machine_resolve (void) -{ - Elf32_Addr addr; - - asm ("b,l 1f,%0\n" -" depi 0,31,2,%0\n" -"1: addil L'_dl_runtime_resolve - ($PIC_pcrel$0 - 8),%0\n" -" ldo R'_dl_runtime_resolve - ($PIC_pcrel$0 - 12)(%%r1),%0\n" - : "=r" (addr) : : "r1"); - - return addr; -} - -ElfW(Addr) -_dl_lookup_address (const void *address) -{ - ElfW(Addr) addr = (ElfW(Addr)) address; - unsigned int *desc, *gptr; - - /* Check for special cases. */ - if ((int) addr == -1 - || (unsigned int) addr < 4096 - || !((unsigned int) addr & 2)) - return addr; - - /* Clear least-significant two bits from descriptor address. */ - desc = (unsigned int *) ((unsigned int) addr & ~3); - - /* Check if descriptor requires resolution. The following trampoline is - used in each global offset table for function resolution: - - ldw 0(r20),r22 - bv r0(r22) - ldw 4(r20),r21 - tramp: b,l .-12,r20 - depwi 0,31,2,r20 - .word _dl_runtime_resolve - .word "_dl_runtime_resolve ltp" - got: .word _DYNAMIC - .word "struct link map address" */ - gptr = (unsigned int *) desc[0]; - if (gptr[0] == 0xea9f1fdd /* b,l .-12,r20 */ - && gptr[1] == 0xd6801c1e /* depwi 0,31,2,r20 */ - && (ElfW(Addr)) gptr[2] == elf_machine_resolve ()) - _dl_fixup ((struct link_map *) gptr[5], (ElfW(Word)) desc[1]); - - return (ElfW(Addr)) desc[0]; -} diff --git a/sysdeps/hppa/dl-fptr.h b/sysdeps/hppa/dl-fptr.h deleted file mode 100644 index 0cb50524fd..0000000000 --- a/sysdeps/hppa/dl-fptr.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Function descriptors. HPPA version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef dl_hppa_fptr_h -#define dl_hppa_fptr_h 1 - -#include - -/* Initialize function pointer code. Call before relocation processing. */ -extern void _dl_fptr_init (void); - -/* There are currently 33 dynamic symbols in ld.so. - ELF_MACHINE_BOOT_FPTR_TABLE_LEN needs to be at least that big. */ -#define ELF_MACHINE_BOOT_FPTR_TABLE_LEN 64 - -#define ELF_MACHINE_LOAD_ADDRESS(var, symbol) \ - asm ( \ -" b,l 1f,%0\n" \ -" depi 0,31,2,%0\n" \ -"1: addil L'" #symbol " - ($PIC_pcrel$0 - 8),%0\n" \ -" ldo R'" #symbol " - ($PIC_pcrel$0 - 12)(%%r1),%0\n" \ - : "=&r" (var) : : "r1"); - -#endif /* !dl_hppa_fptr_h */ diff --git a/sysdeps/hppa/dl-irel.h b/sysdeps/hppa/dl-irel.h deleted file mode 100644 index ba7ffb79d8..0000000000 --- a/sysdeps/hppa/dl-irel.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Machine-dependent ELF indirect relocation inline functions. - HP-PARISC version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _DL_IREL_H -#define _DL_IREL_H - -#include -#include -#include - -#define ELF_MACHINE_IREL 1 - -/* There is no IFUNC implementation yet. Add stubs to allow builds. */ - -static inline struct fdesc -__attribute ((always_inline)) -elf_ifunc_invoke (uintptr_t addr) -{ - return ((struct fdesc) {0, 0}); -} - -static inline void -__attribute ((always_inline)) -elf_irel (const Elf32_Rel *reloc) -{ - return; -} - -#endif /* dl-irel.h */ diff --git a/sysdeps/hppa/dl-lookupcfg.h b/sysdeps/hppa/dl-lookupcfg.h deleted file mode 100644 index 0b0ae85b5d..0000000000 --- a/sysdeps/hppa/dl-lookupcfg.h +++ /dev/null @@ -1,81 +0,0 @@ -/* Configuration of lookup functions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define ELF_FUNCTION_PTR_IS_SPECIAL -#define DL_UNMAP_IS_SPECIAL - -#include - -/* Forward declaration. */ -struct link_map; - -void *_dl_symbol_address (struct link_map *map, const ElfW(Sym) *ref); -rtld_hidden_proto (_dl_symbol_address) - -#define DL_SYMBOL_ADDRESS(map, ref) _dl_symbol_address(map, ref) - -Elf32_Addr _dl_lookup_address (const void *address); - -#define DL_LOOKUP_ADDRESS(addr) _dl_lookup_address ((const void *) addr) - -void attribute_hidden _dl_unmap (struct link_map *map); - -#define DL_UNMAP(map) _dl_unmap (map) - -#define DL_DT_FUNCTION_ADDRESS(map, start, attr, addr) \ - attr volatile unsigned int fptr[2]; \ - /* The test for "start & 2" below is to accommodate old binaries which \ - violated the ELF ABI by pointing DT_INIT and DT_FINI at a function \ - descriptor. */ \ - if ((ElfW(Addr)) (start) & 2) \ - addr = (ElfW(Addr)) start; \ - else \ - { \ - fptr[0] = (unsigned int) (start); \ - fptr[1] = (map)->l_info[DT_PLTGOT]->d_un.d_ptr; \ - /* Set bit 30 to indicate to $$dyncall that this is a PLABEL. */ \ - addr = (ElfW(Addr))((unsigned int)fptr | 2); \ - } \ - -#define DL_CALL_DT_INIT(map, start, argc, argv, env) \ -{ \ - ElfW(Addr) addr; \ - DL_DT_FUNCTION_ADDRESS(map, start, , addr) \ - init_t init = (init_t) addr; \ - init (argc, argv, env); \ -} - -#define DL_CALL_DT_FINI(map, start) \ -{ \ - ElfW(Addr) addr; \ - DL_DT_FUNCTION_ADDRESS(map, start, , addr) \ - fini_t fini = (fini_t) addr; \ - fini (); \ -} - -/* The type of the return value of fixup/profile_fixup */ -#define DL_FIXUP_VALUE_TYPE struct fdesc - -/* Construct a fixup value from the address and linkmap */ -#define DL_FIXUP_MAKE_VALUE(map, addr) \ - ((struct fdesc) { (addr), (map)->l_info[DT_PLTGOT]->d_un.d_ptr }) - -/* Extract the code address from a fixup value */ -#define DL_FIXUP_VALUE_CODE_ADDR(value) ((value).ip) -#define DL_FIXUP_VALUE_ADDR(value) ((uintptr_t) &(value)) -#define DL_FIXUP_ADDR_VALUE(addr) (*(struct fdesc *) (addr)) diff --git a/sysdeps/hppa/dl-machine.h b/sysdeps/hppa/dl-machine.h deleted file mode 100644 index 787b95f502..0000000000 --- a/sysdeps/hppa/dl-machine.h +++ /dev/null @@ -1,782 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. PA-RISC version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - Contributed by David Huggins-Daines - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h 1 - -#define ELF_MACHINE_NAME "hppa" - -#include -#include -#include -#include -#include -#include -#include -#include - -/* These two definitions must match the definition of the stub in - bfd/elf32-hppa.c (see plt_stub[]). - - a. Define the size of the *entire* stub we place at the end of the PLT - table (right up against the GOT). - - b. Define the number of bytes back from the GOT to the entry point of - the PLT stub. You see the PLT stub must be entered in the middle - so it can depwi to find it's own address (long jump stub) - - c. Define the size of a single PLT entry so we can jump over the - last entry to get the stub address */ - -#define SIZEOF_PLT_STUB (7*4) -#define GOT_FROM_PLT_STUB (4*4) -#define PLT_ENTRY_SIZE (2*4) - -/* Initialize the function descriptor table before relocations */ -static inline void -__hppa_init_bootstrap_fdesc_table (struct link_map *map) -{ - ElfW(Addr) *boot_table; - - /* Careful: this will be called before got has been relocated... */ - ELF_MACHINE_LOAD_ADDRESS(boot_table,_dl_boot_fptr_table); - - map->l_mach.fptr_table_len = ELF_MACHINE_BOOT_FPTR_TABLE_LEN; - map->l_mach.fptr_table = boot_table; -} - -#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) \ - __hppa_init_bootstrap_fdesc_table (&bootstrap_map); \ - _dl_fptr_init(); - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf32_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_PARISC; -} - -/* Return the link-time address of _DYNAMIC. */ -static inline Elf32_Addr -elf_machine_dynamic (void) __attribute__ ((const)); - -static inline Elf32_Addr -elf_machine_dynamic (void) -{ - Elf32_Addr dynamic; - - asm ("b,l 1f,%0\n" -" depi 0,31,2,%0\n" -"1: addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 8),%0\n" -" ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 12)(%%r1),%0\n" - : "=r" (dynamic) : : "r1"); - - return dynamic; -} - -/* Return the run-time load address of the shared object. */ -static inline Elf32_Addr -elf_machine_load_address (void) __attribute__ ((const)); - -static inline Elf32_Addr -elf_machine_load_address (void) -{ - Elf32_Addr dynamic; - - asm ( -" b,l 1f,%0\n" -" depi 0,31,2,%0\n" -"1: addil L'_DYNAMIC - ($PIC_pcrel$0 - 8),%0\n" -" ldo R'_DYNAMIC - ($PIC_pcrel$0 - 12)(%%r1),%0\n" - : "=r" (dynamic) : : "r1"); - - return dynamic - elf_machine_dynamic (); -} - -/* Fixup a PLT entry to bounce directly to the function at VALUE. */ -static inline struct fdesc __attribute__ ((always_inline)) -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf32_Rela *reloc, - Elf32_Addr *reloc_addr, struct fdesc value) -{ - volatile Elf32_Addr *rfdesc = reloc_addr; - /* map is the link_map for the caller, t is the link_map for the object - being called */ - rfdesc[1] = value.gp; - /* Need to ensure that the gp is visible before the code - entry point is updated */ - rfdesc[0] = value.ip; - return value; -} - -/* Return the final value of a plt relocation. */ -static inline struct fdesc -elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, - struct fdesc value) -{ - /* We are rela only, return a function descriptor as a plt entry. */ - return (struct fdesc) { value.ip + reloc->r_addend, value.gp }; -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - Elf32_Addr *got = NULL; - Elf32_Addr l_addr, iplt, jmprel, end_jmprel, r_type, r_sym; - const Elf32_Rela *reloc; - struct fdesc *fptr; - static union { - unsigned char c[8]; - Elf32_Addr i[2]; - } sig = {{0x00,0xc0,0xff,0xee, 0xde,0xad,0xbe,0xef}}; - - /* If we don't have a PLT we can just skip all this... */ - if (__builtin_expect (l->l_info[DT_JMPREL] == NULL,0)) - return lazy; - - /* All paths use these values */ - l_addr = l->l_addr; - jmprel = D_PTR(l, l_info[DT_JMPREL]); - end_jmprel = jmprel + l->l_info[DT_PLTRELSZ]->d_un.d_val; - - extern void _dl_runtime_resolve (void); - extern void _dl_runtime_profile (void); - - /* Linking lazily */ - if (lazy) - { - /* FIXME: Search for the got, but backwards through the relocs, technically we should - find it on the first try. However, assuming the relocs got out of order the - routine is made a bit more robust by searching them all in case of failure. */ - for (iplt = (end_jmprel - sizeof(Elf32_Rela)); iplt >= jmprel; iplt -= sizeof (Elf32_Rela)) - { - - reloc = (const Elf32_Rela *) iplt; - r_type = ELF32_R_TYPE (reloc->r_info); - r_sym = ELF32_R_SYM (reloc->r_info); - - got = (Elf32_Addr *) (reloc->r_offset + l_addr + PLT_ENTRY_SIZE + SIZEOF_PLT_STUB); - - /* If we aren't an IPLT, and we aren't NONE then it's a bad reloc */ - if (__builtin_expect (r_type != R_PARISC_IPLT, 0)) - { - if (__builtin_expect (r_type != R_PARISC_NONE, 0)) - _dl_reloc_bad_type (l, r_type, 1); - continue; - } - - /* Check for the plt_stub that binutils placed here for us - to use with _dl_runtime_resolve */ - if (got[-2] != sig.i[0] || got[-1] != sig.i[1]) - { - got = NULL; /* Not the stub... keep looking */ - } - else - { - /* Found the GOT! */ - register Elf32_Addr ltp __asm__ ("%r19"); - - /* Identify this shared object. Second entry in the got. */ - got[1] = (Elf32_Addr) l; - - /* This function will be called to perform the relocation. */ - if (__builtin_expect (!profile, 1)) - { - /* If a static application called us, then _dl_runtime_resolve is not - a function descriptor, but the *real* address of the function... */ - if((unsigned long) &_dl_runtime_resolve & 3) - { - got[-2] = (Elf32_Addr) ((struct fdesc *) - ((unsigned long) &_dl_runtime_resolve & ~3))->ip; - } - else - { - /* Static executable! */ - got[-2] = (Elf32_Addr) &_dl_runtime_resolve; - } - } - else - { - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - { - /* This is the object we are looking for. Say that - we really want profiling and the timers are - started. */ - GL(dl_profile_map) = l; - } - - if((unsigned long) &_dl_runtime_profile & 3) - { - got[-2] = (Elf32_Addr) ((struct fdesc *) - ((unsigned long) &_dl_runtime_profile & ~3))->ip; - } - else - { - /* Static executable */ - got[-2] = (Elf32_Addr) &_dl_runtime_profile; - } - } - /* Plunk in the gp of this function descriptor so we - can make the call to _dl_runtime_xxxxxx */ - got[-1] = ltp; - break; - /* Done looking for the GOT, and stub is setup */ - } /* else we found the GOT */ - } /* for, walk the relocs backwards */ - - if(!got) - return 0; /* No lazy linking for you! */ - - /* Process all the relocs, now that we know the GOT... */ - for (iplt = jmprel; iplt < end_jmprel; iplt += sizeof (Elf32_Rela)) - { - reloc = (const Elf32_Rela *) iplt; - r_type = ELF32_R_TYPE (reloc->r_info); - r_sym = ELF32_R_SYM (reloc->r_info); - - if (__builtin_expect (r_type == R_PARISC_IPLT, 1)) - { - fptr = (struct fdesc *) (reloc->r_offset + l_addr); - if (r_sym != 0) - { - /* Relocate the pointer to the stub. */ - fptr->ip = (Elf32_Addr) got - GOT_FROM_PLT_STUB; - - /* Instead of the LTP value, we put the reloc offset - here. The trampoline code will load the proper - LTP and pass the reloc offset to the fixup - function. */ - fptr->gp = iplt - jmprel; - } /* r_sym != 0 */ - else - { - /* Relocate this *ABS* entry. */ - fptr->ip = reloc->r_addend + l_addr; - fptr->gp = D_PTR (l, l_info[DT_PLTGOT]); - } - } /* r_type == R_PARISC_IPLT */ - } /* for all the relocations */ - } /* if lazy */ - else - { - for (iplt = jmprel; iplt < end_jmprel; iplt += sizeof (Elf32_Rela)) - { - reloc = (const Elf32_Rela *) iplt; - r_type = ELF32_R_TYPE (reloc->r_info); - r_sym = ELF32_R_SYM (reloc->r_info); - - if (__builtin_expect ((r_type == R_PARISC_IPLT) && (r_sym == 0), 1)) - { - fptr = (struct fdesc *) (reloc->r_offset + l_addr); - /* Relocate this *ABS* entry, set only the gp, the rest is set later - when elf_machine_rela_relative is called (WITHOUT the linkmap) */ - fptr->gp = D_PTR (l, l_info[DT_PLTGOT]); - } /* r_type == R_PARISC_IPLT */ - } /* for all the relocations */ - } - return lazy; -} - - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER hppa_gnu_pltenter -#define ARCH_LA_PLTEXIT hppa_gnu_pltexit - -/* Adjust DL_STACK_END to get value we want in __libc_stack_end. */ -#define DL_STACK_END(cookie) \ - ((void *) (((long) (cookie)) + 0x160)) - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START \ -/* Set up dp for any non-PIC lib constructors that may be called. */ \ -static struct link_map * __attribute__((used)) \ -set_dp (struct link_map *map) \ -{ \ - register Elf32_Addr dp asm ("%r27"); \ - dp = D_PTR (map, l_info[DT_PLTGOT]); \ - asm volatile ("" : : "r" (dp)); \ - return map; \ -} \ - \ -asm ( \ -" .text\n" \ -" .globl _start\n" \ -" .type _start,@function\n" \ -"_start:\n" \ - /* The kernel does not give us an initial stack frame. */ \ -" ldo 64(%sp),%sp\n" \ - /* Save the relevant arguments (yes, those are the correct \ - registers, the kernel is weird) in their stack slots. */ \ -" stw %r25,-40(%sp)\n" /* argc */ \ -" stw %r24,-44(%sp)\n" /* argv */ \ - \ - /* We need the LTP, and we need it now. \ - $PIC_pcrel$0 points 8 bytes past the current instruction, \ - just like a branch reloc. This sequence gets us the \ - runtime address of _DYNAMIC. */ \ -" bl 0f,%r19\n" \ -" depi 0,31,2,%r19\n" /* clear priviledge bits */ \ -"0: addil L'_DYNAMIC - ($PIC_pcrel$0 - 8),%r19\n" \ -" ldo R'_DYNAMIC - ($PIC_pcrel$0 - 12)(%r1),%r26\n" \ - \ - /* The link time address is stored in the first entry of the \ - GOT. */ \ -" addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 16),%r19\n" \ -" ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 20)(%r1),%r20\n" \ - \ -" sub %r26,%r20,%r20\n" /* Calculate load offset */ \ - \ - /* Rummage through the dynamic entries, looking for \ - DT_PLTGOT. */ \ -" ldw,ma 8(%r26),%r19\n" \ -"1: cmpib,=,n 3,%r19,2f\n" /* tag == DT_PLTGOT? */ \ -" cmpib,<>,n 0,%r19,1b\n" \ -" ldw,ma 8(%r26),%r19\n" \ - \ - /* Uh oh! We didn't find one. Abort. */ \ -" iitlbp %r0,(%sr0,%r0)\n" \ - \ -"2: ldw -4(%r26),%r19\n" /* Found it, load value. */ \ -" add %r19,%r20,%r19\n" /* And add the load offset. */ \ - \ - /* Our initial stack layout is rather different from everyone \ - else's due to the unique PA-RISC ABI. As far as I know it \ - looks like this: \ - \ - ----------------------------------- (this frame created above) \ - | 32 bytes of magic | \ - |---------------------------------| \ - | 32 bytes argument/sp save area | \ - |---------------------------------| ((current->mm->env_end) \ - | N bytes of slack | + 63 & ~63) \ - |---------------------------------| \ - | envvar and arg strings | \ - |---------------------------------| \ - | ELF auxiliary info | \ - | (up to 28 words) | \ - |---------------------------------| \ - | Environment variable pointers | \ - | upwards to NULL | \ - |---------------------------------| \ - | Argument pointers | \ - | upwards to NULL | \ - |---------------------------------| \ - | argc (1 word) | \ - ----------------------------------- \ - \ - So, obviously, we can't just pass %sp to _dl_start. That's \ - okay, argv-4 will do just fine. \ - \ - The pleasant part of this is that if we need to skip \ - arguments we can just decrement argc and move argv, because \ - the stack pointer is utterly unrelated to the location of \ - the environment and argument vectors. */ \ - \ - /* This is always within range so we'll be okay. */ \ -" bl _dl_start,%rp\n" \ -" ldo -4(%r24),%r26\n" \ - \ -" .globl _dl_start_user\n" \ -" .type _dl_start_user,@function\n" \ -"_dl_start_user:\n" \ - /* Save the entry point in %r3. */ \ -" copy %ret0,%r3\n" \ - \ - /* See if we were called as a command with the executable file \ - name as an extra leading argument. */ \ -" addil LT'_dl_skip_args,%r19\n" \ -" ldw RT'_dl_skip_args(%r1),%r20\n" \ -" ldw 0(%r20),%r20\n" \ - \ -" ldw -40(%sp),%r25\n" /* argc */ \ -" comib,= 0,%r20,.Lnofix\n" /* FIXME: Mispredicted branch */\ -" ldw -44(%sp),%r24\n" /* argv (delay slot) */ \ - \ -" sub %r25,%r20,%r25\n" \ -" stw %r25,-40(%sp)\n" \ -" sh2add %r20,%r24,%r24\n" \ -" stw %r24,-44(%sp)\n" \ - \ -".Lnofix:\n" \ -" addil LT'_rtld_local,%r19\n" \ -" ldw RT'_rtld_local(%r1),%r26\n" \ -" bl set_dp, %r2\n" \ -" ldw 0(%r26),%r26\n" \ - \ - /* Call _dl_init(_dl_loaded, argc, argv, envp). */ \ -" copy %r28,%r26\n" \ - \ - /* envp = argv + argc + 1 */ \ -" sh2add %r25,%r24,%r23\n" \ -" bl _dl_init,%r2\n" \ -" ldo 4(%r23),%r23\n" /* delay slot */ \ - \ - /* Reload argc, argv to the registers start.S expects. */ \ -" ldw -40(%sp),%r25\n" \ -" ldw -44(%sp),%r24\n" \ - \ - /* _dl_fini is a local function in the loader, so we construct \ - a false OPD here and pass this to the application. */ \ - /* FIXME: Should be able to use P%, and LR RR to have the \ - the linker construct a proper OPD. */ \ -" .section .data\n" \ -"__dl_fini_plabel:\n" \ -" .word _dl_fini\n" \ -" .word 0xdeadbeef\n" \ -" .previous\n" \ - \ - /* %r3 contains a function pointer, we need to mask out the \ - lower bits and load the gp and jump address. */ \ -" depi 0,31,2,%r3\n" \ -" ldw 0(%r3),%r2\n" \ -" addil LT'__dl_fini_plabel,%r19\n" \ -" ldw RT'__dl_fini_plabel(%r1),%r23\n" \ -" stw %r19,4(%r23)\n" \ -" ldw 4(%r3),%r19\n" /* load the object's gp */ \ -" bv %r0(%r2)\n" \ -" depi 2,31,2,%r23\n" /* delay slot */ \ -); - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or - a TLS variable, so references should not be allowed to define the value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. */ -#if !defined RTLD_BOOTSTRAP -# define elf_machine_type_class(type) \ - ((((type) == R_PARISC_IPLT \ - || (type) == R_PARISC_EPLT \ - || (type) == R_PARISC_TLS_DTPMOD32 \ - || (type) == R_PARISC_TLS_DTPOFF32 \ - || (type) == R_PARISC_TLS_TPREL32) \ - * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_PARISC_COPY) * ELF_RTYPE_CLASS_COPY)) -#else -#define elf_machine_type_class(type) \ - ((((type) == R_PARISC_IPLT \ - || (type) == R_PARISC_EPLT) \ - * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_PARISC_COPY) * ELF_RTYPE_CLASS_COPY)) -#endif - -/* Used by the runtime in fixup to figure out if reloc is *really* PLT */ -#define ELF_MACHINE_JMP_SLOT R_PARISC_IPLT -#define ELF_MACHINE_SIZEOF_JMP_SLOT PLT_ENTRY_SIZE - -/* We only use RELA. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -/* Return the address of the entry point. */ -#define ELF_MACHINE_START_ADDRESS(map, start) \ -({ \ - ElfW(Addr) addr; \ - DL_DT_FUNCTION_ADDRESS(map, start, static, addr) \ - addr; \ -}) - -/* We define an initialization functions. This is called very early in - * _dl_sysdep_start. */ -#define DL_PLATFORM_INIT dl_platform_init () - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ - if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') - /* Avoid an empty string which would disturb us. */ - GLRO(dl_platform) = NULL; -} - -#endif /* !dl_machine_h */ - -/* These are only actually used where RESOLVE_MAP is defined, anyway. */ -#ifdef RESOLVE_MAP - -#define reassemble_21(as21) \ - ( (((as21) & 0x100000) >> 20) \ - | (((as21) & 0x0ffe00) >> 8) \ - | (((as21) & 0x000180) << 7) \ - | (((as21) & 0x00007c) << 14) \ - | (((as21) & 0x000003) << 12)) - -#define reassemble_14(as14) \ - ( (((as14) & 0x1fff) << 1) \ - | (((as14) & 0x2000) >> 13)) - -auto void __attribute__((always_inline)) -elf_machine_rela (struct link_map *map, - const Elf32_Rela *reloc, - const Elf32_Sym *sym, - const struct r_found_version *version, - void *const reloc_addr_arg, - int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - const Elf32_Sym *const refsym = sym; - unsigned long const r_type = ELF32_R_TYPE (reloc->r_info); - struct link_map *sym_map; - Elf32_Addr value; - -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED - /* This is defined in rtld.c, but nowhere in the static libc.a; make the - reference weak so static programs can still link. This declaration - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) - because rtld.c contains the common defn for _dl_rtld_map, which is - incompatible with a weak decl in the same file. */ - weak_extern (GL(dl_rtld_map)); -# endif - - /* RESOLVE_MAP will return a null value for undefined syms, and - non-null for all other syms. In particular, relocs with no - symbol (symbol index of zero), also called *ABS* relocs, will be - resolved to MAP. (The first entry in a symbol table is all - zeros, and an all zero Elf32_Sym has a binding of STB_LOCAL.) - See RESOLVE_MAP definition in elf/dl-reloc.c */ -# ifdef RTLD_BOOTSTRAP - /* RESOLVE_MAP in rtld.c doesn't have the local sym test. */ - sym_map = (ELF32_ST_BIND (sym->st_info) != STB_LOCAL - ? RESOLVE_MAP (&sym, version, r_type) : map); -# else - sym_map = RESOLVE_MAP (&sym, version, r_type); -# endif - - if (sym_map) - { - value = sym ? sym_map->l_addr + sym->st_value : 0; - value += reloc->r_addend; - } - else - value = 0; - - switch (r_type) - { - case R_PARISC_DIR32: - /* .eh_frame can have unaligned relocs. */ - if ((unsigned long) reloc_addr_arg & 3) - { - char *rel_addr = (char *) reloc_addr_arg; - rel_addr[0] = value >> 24; - rel_addr[1] = value >> 16; - rel_addr[2] = value >> 8; - rel_addr[3] = value; - return; - } - break; - - case R_PARISC_DIR21L: - { - unsigned int insn = *(unsigned int *)reloc_addr; - value = sym_map->l_addr + sym->st_value - + ((reloc->r_addend + 0x1000) & -0x2000); - value = value >> 11; - insn = (insn &~ 0x1fffff) | reassemble_21 (value); - *(unsigned int *)reloc_addr = insn; - } - return; - - case R_PARISC_DIR14R: - { - unsigned int insn = *(unsigned int *)reloc_addr; - value = ((sym_map->l_addr + sym->st_value) & 0x7ff) - + (((reloc->r_addend & 0x1fff) ^ 0x1000) - 0x1000); - insn = (insn &~ 0x3fff) | reassemble_14 (value); - *(unsigned int *)reloc_addr = insn; - } - return; - - case R_PARISC_PLABEL32: - /* Easy rule: If there is a symbol and it is global, then we - need to make a dynamic function descriptor. Otherwise we - have the address of a PLT slot for a local symbol which we - know to be unique. */ - if (sym == NULL - || sym_map == NULL - || ELF32_ST_BIND (sym->st_info) == STB_LOCAL) - { - break; - } - /* Set bit 30 to indicate to $$dyncall that this is a PLABEL. - We have to do this outside of the generic function descriptor - code, since it doesn't know about our requirement for setting - protection bits */ - value = (Elf32_Addr)((unsigned int)_dl_make_fptr (sym_map, sym, value) | 2); - break; - - case R_PARISC_PLABEL21L: - case R_PARISC_PLABEL14R: - { - unsigned int insn = *(unsigned int *)reloc_addr; - - if (__builtin_expect (sym == NULL, 0)) - break; - - value = (Elf32_Addr)((unsigned int)_dl_make_fptr (sym_map, sym, value) | 2); - - if (r_type == R_PARISC_PLABEL21L) - { - value >>= 11; - insn = (insn &~ 0x1fffff) | reassemble_21 (value); - } - else - { - value &= 0x7ff; - insn = (insn &~ 0x3fff) | reassemble_14 (value); - } - - *(unsigned int *)reloc_addr = insn; - } - return; - - case R_PARISC_IPLT: - if (__builtin_expect (sym_map != NULL, 1)) - { - elf_machine_fixup_plt (NULL, sym_map, reloc, reloc_addr, - DL_FIXUP_MAKE_VALUE(sym_map, value)); - } - else - { - /* If we get here, it's a (weak) undefined sym. */ - elf_machine_fixup_plt (NULL, map, reloc, reloc_addr, - DL_FIXUP_MAKE_VALUE(map, value)); - } - return; - - case R_PARISC_COPY: - if (__builtin_expect (sym == NULL, 0)) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (__builtin_expect (sym->st_size > refsym->st_size, 0) - || (__builtin_expect (sym->st_size < refsym->st_size, 0) - && __builtin_expect (GLRO(dl_verbose), 0))) - { - const char *strtab; - - strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("%s: Symbol `%s' has different size in shared object, " - "consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - return; - -#if !defined RTLD_BOOTSTRAP - case R_PARISC_TLS_DTPMOD32: - value = sym_map->l_tls_modid; - break; - - case R_PARISC_TLS_DTPOFF32: - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ - if (sym != NULL) - *reloc_addr = sym->st_value; - return; - - case R_PARISC_TLS_TPREL32: - /* The offset is negative, forward from the thread pointer */ - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - value = sym_map->l_tls_offset + sym->st_value + reloc->r_addend; - } - break; -#endif /* use TLS */ - - case R_PARISC_NONE: /* Alright, Wilbur. */ - return; - - default: - _dl_reloc_bad_type (map, r_type, 0); - } - - *reloc_addr = value; -} - -/* hppa doesn't have an R_PARISC_RELATIVE reloc, but uses relocs with - ELF32_R_SYM (info) == 0 for a similar purpose. */ -auto void __attribute__((always_inline)) -elf_machine_rela_relative (Elf32_Addr l_addr, - const Elf32_Rela *reloc, - void *const reloc_addr_arg) -{ - unsigned long const r_type = ELF32_R_TYPE (reloc->r_info); - Elf32_Addr *const reloc_addr = reloc_addr_arg; - static char msgbuf[] = { "Unknown" }; - struct link_map map; - Elf32_Addr value; - - value = l_addr + reloc->r_addend; - - if (ELF32_R_SYM (reloc->r_info) != 0){ - _dl_error_printf ("%s: In elf_machine_rela_relative " - "ELF32_R_SYM (reloc->r_info) != 0. Aborting.", - RTLD_PROGNAME); - ABORT_INSTRUCTION; /* Crash. */ - } - - switch (r_type) - { - case R_PARISC_DIR32: - /* .eh_frame can have unaligned relocs. */ - if ((unsigned long) reloc_addr_arg & 3) - { - char *rel_addr = (char *) reloc_addr_arg; - rel_addr[0] = value >> 24; - rel_addr[1] = value >> 16; - rel_addr[2] = value >> 8; - rel_addr[3] = value; - return; - } - break; - - case R_PARISC_PLABEL32: - break; - - case R_PARISC_IPLT: /* elf_machine_runtime_setup already set gp */ - break; - - case R_PARISC_NONE: - return; - - default: /* Bad reloc, map unknown (really it's the current map) */ - map.l_name = msgbuf; - _dl_reloc_bad_type (&map, r_type, 0); - return; - } - - *reloc_addr = value; -} - -auto void __attribute__((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf32_Addr l_addr, const Elf32_Rela *reloc, - int skip_ifunc) -{ - /* We don't have anything to do here. elf_machine_runtime_setup has - done all the relocs already. */ -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/hppa/dl-symaddr.c b/sysdeps/hppa/dl-symaddr.c deleted file mode 100644 index dfb0594ff3..0000000000 --- a/sysdeps/hppa/dl-symaddr.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Get the symbol address. HPPA version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -void * -_dl_symbol_address (struct link_map *map, const ElfW(Sym) *ref) -{ - /* Find the "ip" from the "map" and symbol "ref" */ - Elf32_Addr value = (map ? map->l_addr : 0) + ref->st_value; - - /* On hppa, we have to return the pointer to function descriptor. - This involves an "| 2" to inform $$dyncall that this is a plabel32 */ - if (ELFW(ST_TYPE) (ref->st_info) == STT_FUNC){ - return (void *)((unsigned long)_dl_make_fptr (map, ref, value) | 2); - } - else - return (void *) value; -} -rtld_hidden_def (_dl_symbol_address) diff --git a/sysdeps/hppa/dl-tls.h b/sysdeps/hppa/dl-tls.h deleted file mode 100644 index fc67685d8d..0000000000 --- a/sysdeps/hppa/dl-tls.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. hppa version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - - -extern void *__tls_get_addr (tls_index *ti); diff --git a/sysdeps/hppa/dl-trampoline.S b/sysdeps/hppa/dl-trampoline.S deleted file mode 100644 index 856339bffe..0000000000 --- a/sysdeps/hppa/dl-trampoline.S +++ /dev/null @@ -1,287 +0,0 @@ -/* PLT trampolines. hppa version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* This code gets called via the .plt stub, and is used in - dl-runtime.c to call the `_dl_fixup' function and then redirect - to the address it returns. `_dl_fixup' takes two arguments, however - `_dl_profile_fixup' takes a number of parameters for use with - library auditing (LA). - - WARNING: This template is also used by gcc's __cffc, and expects - that the "bl" for _dl_runtime_resolve exist at a particular offset. - Do not change this template without changing gcc, while the prefix - "bl" should fix everything so gcc finds the right spot, it will - slow down __cffc when it attempts to call fixup to resolve function - descriptor references. Please refer to gcc/gcc/config/pa/fptr.c - - Enter with r19 = reloc offset, r20 = got-8, r21 = fixup ltp. */ - - /* RELOCATION MARKER: bl to provide gcc's __cffc with fixup loc. */ - .text - /* THIS CODE DOES NOT EXECUTE */ - bl _dl_fixup, %r2 - .text - .global _dl_runtime_resolve - .type _dl_runtime_resolve,@function - cfi_startproc - .align 4 -_dl_runtime_resolve: - .PROC - .CALLINFO FRAME=128,CALLS,SAVE_RP,ENTRY_GR=3 - .ENTRY - /* SAVE_RP says we do */ - stw %rp, -20(%sp) - - /* Save static link register */ - stw %r29,-16(%sp) - /* Save argument registers */ - stw %r26,-36(%sp) - stw %r25,-40(%sp) - stw %r24,-44(%sp) - stw %r23,-48(%sp) - - /* Build a call frame, and save structure pointer. */ - copy %sp, %r1 /* Copy previous sp */ - /* Save function result address (on entry) */ - stwm %r28,128(%sp) - /* Fillin some frame info to follow ABI */ - stw %r1,-4(%sp) /* Previous sp */ - stw %r21,-32(%sp) /* PIC register value */ - - /* Save input floating point registers. This must be done - in the new frame since the previous frame doesn't have - enough space */ - ldo -56(%sp),%r1 - fstd,ma %fr4,-8(%r1) - fstd,ma %fr5,-8(%r1) - fstd,ma %fr6,-8(%r1) - fstd,ma %fr7,-8(%r1) - - /* Set up args to fixup func, needs only two arguments */ - ldw 8+4(%r20),%r26 /* (1) got[1] == struct link_map */ - copy %r19,%r25 /* (2) reloc offset */ - - /* Call the real address resolver. */ - bl _dl_fixup,%rp - copy %r21,%r19 /* set fixup func ltp */ - - /* Load up the returned func descriptor */ - copy %r28, %r22 - copy %r29, %r19 - - /* Reload arguments fp args */ - ldo -56(%sp),%r1 - fldd,ma -8(%r1),%fr4 - fldd,ma -8(%r1),%fr5 - fldd,ma -8(%r1),%fr6 - fldd,ma -8(%r1),%fr7 - - /* Adjust sp, and restore function result address*/ - ldwm -128(%sp),%r28 - - /* Reload static link register */ - ldw -16(%sp),%r29 - /* Reload general args */ - ldw -36(%sp),%r26 - ldw -40(%sp),%r25 - ldw -44(%sp),%r24 - ldw -48(%sp),%r23 - - /* Jump to new function, but return to previous function */ - bv %r0(%r22) - ldw -20(%sp),%rp - .EXIT - .PROCEND - cfi_endproc - .size _dl_runtime_resolve, . - _dl_runtime_resolve - - .text - .global _dl_runtime_profile - .type _dl_runtime_profile,@function - cfi_startproc - .align 4 -_dl_runtime_profile: - .PROC - .CALLINFO FRAME=192,CALLS,SAVE_RP,ENTRY_GR=3 - .ENTRY - - /* SAVE_RP says we do */ - stw %rp, -20(%sp) - /* Save static link register */ - stw %r29,-16(%sp) - - /* Build a call frame, and save structure pointer. */ - copy %sp, %r1 /* Copy previous sp */ - /* Save function result address (on entry) */ - stwm %r28,192(%sp) - /* Fillin some frame info to follow ABI */ - stw %r1,-4(%sp) /* Previous sp */ - stw %r21,-32(%sp) /* PIC register value */ - - /* Create La_hppa_retval */ - /* -140, lrv_r28 - -136, lrv_r29 - -132, 4 byte pad - -128, lr_fr4 (8 bytes) */ - - /* Create save space for _dl_profile_fixup arguments - -120, Saved reloc offset - -116, Saved struct link_map - -112, *framesizep */ - - /* Create La_hppa_regs */ - /* 32-bit registers */ - stw %r26,-108(%sp) - stw %r25,-104(%sp) - stw %r24,-100(%sp) - stw %r23,-96(%sp) - /* -92, 4 byte pad */ - /* 64-bit floating point registers */ - ldo -88(%sp),%r1 - fstd,ma %fr4,8(%r1) - fstd,ma %fr5,8(%r1) - fstd,ma %fr6,8(%r1) - fstd,ma %fr7,8(%r1) - /* 32-bit stack pointer and return register */ - stw %sp,-56(%sp) - stw %r2,-52(%sp) - - - /* Set up args to fixup func, needs five arguments */ - ldw 8+4(%r20),%r26 /* (1) got[1] == struct link_map */ - stw %r26,-116(%sp) /* Save struct link_map */ - copy %r19,%r25 /* (2) reloc offset */ - stw %r25,-120(%sp) /* Save reloc offset */ - copy %rp,%r24 /* (3) profile_fixup needs rp */ - ldo -56(%sp),%r23 /* (4) La_hppa_regs */ - ldo -112(%sp), %r1 - stw %r1, -52(%sp) /* (5) long int *framesizep */ - - /* Call the real address resolver. */ - bl _dl_profile_fixup,%rp - copy %r21,%r19 /* set fixup func ltp */ - - /* Load up the returned function descriptor */ - copy %r28, %r22 - copy %r29, %r19 - - /* Restore gr/fr/sp/rp */ - ldw -108(%sp),%r26 - ldw -104(%sp),%r25 - ldw -100(%sp),%r24 - ldw -96(%sp),%r23 - /* -92, 4 byte pad, skip */ - ldo -88(%sp),%r1 - fldd,ma 8(%r1),%fr4 - fldd,ma 8(%r1),%fr5 - fldd,ma 8(%r1),%fr6 - fldd,ma 8(%r1),%fr7 - ldw -52(%sp),%rp - - /* Reload static link register -(192+16) without adjusting stack */ - ldw -208(%sp),%r29 - - /* *framesizep is >= 0 if we have to run pltexit */ - ldw -112(%sp),%r28 - cmpb,>>=,N %r0,%r28,L(cpe) - - /* Adjust sp, and restore function result address*/ - ldwm -192(%sp),%r28 - /* Jump to new function, but return to previous function */ - bv %r0(%r22) - ldw -20(%sp),%rp - /* NO RETURN */ - -L(nf): - /* Call the returned function descriptor */ - bv %r0(%r22) - nop - b,n L(cont) - -L(cpe): - /* We are going to call the resolved function, but we have a - stack frame in the middle. We use the value of framesize to - guess how much extra frame we need, and how much frame to - copy forward. */ - - /* Round to nearest multiple of 64 */ - addi 63, %r28, %r28 - depi 0, 27, 6, %r28 - - /* Calcualte start of stack copy */ - ldo -192(%sp),%r2 - - /* Increate the stack by *framesizep */ - copy %sp, %r1 - add %sp, %r28, %sp - /* Save stack pointer */ - stw %r1, -4(%sp) - - /* Single byte copy of prevous stack onto newly allocated stack */ -1: ldb %r28(%r2), %r1 - add %r28, %sp, %r26 - stb %r1, 0(%r26) - addi,< -1,%r28,%r28 - b,n 1b - - /* Retore r28 and r27 and r2 already points at -192(%sp) */ - ldw 0(%r2),%r28 - ldw 84(%r2),%r26 - - /* Calculate address of L(cont) */ - b,l L(nf),%r2 - depwi 0,31,2,%r2 -L(cont): - /* Undo fake stack */ - ldw -4(%sp),%r1 - copy %r1, %sp - - /* Arguments to _dl_call_pltexit */ - ldw -116(%sp), %r26 /* (1) got[1] == struct link_map */ - ldw -120(%sp), %r25 /* (2) reloc offsets */ - ldo -56(%sp), %r24 /* (3) *La_hppa_regs */ - ldo -124(%sp), %r23 /* (4) *La_hppa_retval */ - - /* Fill *La_hppa_retval */ - stw %r28,-140(%sp) - stw %r29,-136(%sp) - ldo -128(%sp), %r1 - fstd %fr4,0(%r1) - - /* Call _dl_call_pltexit */ - bl _dl_call_pltexit,%rp - nop - - /* Restore *La_hppa_retval */ - ldw -140(%sp), %r28 - ldw -136(%sp), %r29 - ldo -128(%sp), %r1 - fldd 0(%r1), %fr4 - - /* Unwind the stack */ - ldo 192(%sp),%sp - /* Retore callers rp */ - ldw -20(%sp),%rp - /* Return */ - bv,n 0(%r2) - .EXIT - .PROCEND - cfi_endproc - .size _dl_runtime_profile, . - _dl_runtime_profile diff --git a/sysdeps/hppa/entry.h b/sysdeps/hppa/entry.h deleted file mode 100644 index 5ea5b47448..0000000000 --- a/sysdeps/hppa/entry.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef __ASSEMBLY__ -extern void _start (void); -#endif - -/* Lives in libgcc.so and canonicalizes function pointers for comparison. */ -extern unsigned int __canonicalize_funcptr_for_compare (unsigned int fptr); - -/* The function's entry point is stored in the first word of the - function descriptor (plabel) of _start(). */ -#define ENTRY_POINT __canonicalize_funcptr_for_compare((unsigned int)_start) - -/* We have to provide a special declaration. */ -#define ENTRY_POINT_DECL(class) class void _start (void); diff --git a/sysdeps/hppa/fpu/bits/fenv.h b/sysdeps/hppa/fpu/bits/fenv.h deleted file mode 100644 index 72e06213fa..0000000000 --- a/sysdeps/hppa/fpu/bits/fenv.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - -/* Define bits representing the exception. We use the values of the - appropriate enable bits in the FPU status word (which, - coincidentally, are the same as the flag bits, but shifted right by - 27 bits). */ -enum -{ - FE_INVALID = -#define FE_INVALID (1<<4) /* V */ - FE_INVALID, - FE_DIVBYZERO = -#define FE_DIVBYZERO (1<<3) /* Z */ - FE_DIVBYZERO, - FE_OVERFLOW = -#define FE_OVERFLOW (1<<2) /* O */ - FE_OVERFLOW, - FE_UNDERFLOW = -#define FE_UNDERFLOW (1<<1) /* U */ - FE_UNDERFLOW, - FE_INEXACT = -#define FE_INEXACT (1<<0) /* I */ - FE_INEXACT, -}; - -#define FE_ALL_EXCEPT \ - (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) - -/* The PA-RISC FPU supports all of the four defined rounding modes. - We use the values of the RM field in the floating point status - register for the appropriate macros. */ -enum - { - FE_TONEAREST = -#define FE_TONEAREST (0 << 9) - FE_TONEAREST, - FE_TOWARDZERO = -#define FE_TOWARDZERO (1 << 9) - FE_TOWARDZERO, - FE_UPWARD = -#define FE_UPWARD (2 << 9) - FE_UPWARD, - FE_DOWNWARD = -#define FE_DOWNWARD (3 << 9) - FE_DOWNWARD, - }; - -/* Type representing exception flags. */ -typedef unsigned int fexcept_t; - -/* Type representing floating-point environment. This structure - corresponds to the layout of the status and exception words in the - register file. The exception registers are never saved/stored by - userspace. This structure is also not correctly aligned ever, in - an ABI error we left out __aligned(8) and subsequently all of our - fenv functions must accept unaligned input, align the input, and - then use assembly to store fr0. This is a performance hit, but - means the ABI is stable. */ -typedef struct -{ - unsigned int __status_word; - unsigned int __exception[7]; -} fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1) - -#ifdef __USE_GNU -/* Floating-point environment where none of the exceptions are masked. */ -# define FE_NOMASK_ENV ((const fenv_t *) -2) -#endif - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef unsigned int femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) -1L) -#endif diff --git a/sysdeps/hppa/fpu/fclrexcpt.c b/sysdeps/hppa/fpu/fclrexcpt.c deleted file mode 100644 index 712911756a..0000000000 --- a/sysdeps/hppa/fpu/fclrexcpt.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -feclearexcept (int excepts) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1)" : "=m" (s.l) : "r" (&s.l) : "%r0"); - /* Clear all the relevant bits. */ - s.sw[0] &= ~((excepts & FE_ALL_EXCEPT) << 27); - __asm__ ("fldd 0(%0),%%fr0" : : "r" (&s.l), "m" (s.l) : "%r0"); - - /* Success. */ - return 0; -} -libm_hidden_def (feclearexcept) diff --git a/sysdeps/hppa/fpu/fedisblxcpt.c b/sysdeps/hppa/fpu/fedisblxcpt.c deleted file mode 100644 index 80ba8ee9e8..0000000000 --- a/sysdeps/hppa/fpu/fedisblxcpt.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -fedisableexcept (int excepts) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - unsigned int old_exc; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1)" : "=m" (s.l) : "r" (&s.l) : "%r0"); - - old_exc = s.sw[0] & FE_ALL_EXCEPT; - - s.sw[0] &= ~(excepts & FE_ALL_EXCEPT); - __asm__ ("fldd 0(%0),%%fr0" : : "r" (&s.l), "m" (s.l) : "%r0"); - - return old_exc; -} diff --git a/sysdeps/hppa/fpu/feenablxcpt.c b/sysdeps/hppa/fpu/feenablxcpt.c deleted file mode 100644 index 6b0570c9e3..0000000000 --- a/sysdeps/hppa/fpu/feenablxcpt.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -feenableexcept (int excepts) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - unsigned int old_exc; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1)" : "=m" (s.l) : "r" (&s.l) : "%r0"); - - old_exc = s.sw[0] & FE_ALL_EXCEPT; - - s.sw[0] |= (excepts & FE_ALL_EXCEPT); - __asm__ ("fldd 0(%0),%%fr0" : : "r" (&s.l), "m" (s.l) : "%r0"); - - return old_exc; -} diff --git a/sysdeps/hppa/fpu/fegetenv.c b/sysdeps/hppa/fpu/fegetenv.c deleted file mode 100644 index f67d56830a..0000000000 --- a/sysdeps/hppa/fpu/fegetenv.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -__fegetenv (fenv_t *envp) -{ - unsigned long long buf[4], *bufptr = buf; - - __asm__ ( - "fstd,ma %%fr0,8(%1) \n\t" - "fldd -8(%1),%%fr0 \n\t" - : "=m" (buf), "+r" (bufptr) : : "%r0"); - memcpy(envp, buf, sizeof (*envp)); - return 0; -} -libm_hidden_def (__fegetenv) -weak_alias (__fegetenv, fegetenv) -libm_hidden_weak (fegetenv) diff --git a/sysdeps/hppa/fpu/fegetexcept.c b/sysdeps/hppa/fpu/fegetexcept.c deleted file mode 100644 index c1bb3bce8f..0000000000 --- a/sysdeps/hppa/fpu/fegetexcept.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Get enabled floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -fegetexcept (void) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1) \n\t" - "fldd 0(%1),%%fr0 \n\t" - : "=m" (s.l) : "r" (&s.l) : "%r0"); - - return (s.sw[0] & FE_ALL_EXCEPT); -} diff --git a/sysdeps/hppa/fpu/fegetmode.c b/sysdeps/hppa/fpu/fegetmode.c deleted file mode 100644 index b28b96440e..0000000000 --- a/sysdeps/hppa/fpu/fegetmode.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Store current floating-point control modes. HPPA version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fegetmode (femode_t *modep) -{ - _FPU_GETCW (*modep); - return 0; -} diff --git a/sysdeps/hppa/fpu/fegetround.c b/sysdeps/hppa/fpu/fegetround.c deleted file mode 100644 index bd8a112224..0000000000 --- a/sysdeps/hppa/fpu/fegetround.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__fegetround (void) -{ - return get_rounding_mode (); -} -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/hppa/fpu/feholdexcpt.c b/sysdeps/hppa/fpu/feholdexcpt.c deleted file mode 100644 index e8f142e7e6..0000000000 --- a/sysdeps/hppa/fpu/feholdexcpt.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -__feholdexcept (fenv_t *envp) -{ - union { unsigned long long buf[4]; fenv_t env; } clear; - unsigned long long *bufptr; - - /* Store the environment. */ - bufptr = clear.buf; - __asm__ ( - "fstd %%fr0,0(%1)\n" - : "=m" (clear) : "r" (bufptr) : "%r0"); - memcpy (envp, &clear.env, sizeof (fenv_t)); - - /* Clear exception queues */ - memset (clear.env.__exception, 0, sizeof (clear.env.__exception)); - /* And set all exceptions to non-stop. */ - clear.env.__status_word &= ~FE_ALL_EXCEPT; - /* Now clear all flags */ - clear.env.__status_word &= ~(FE_ALL_EXCEPT << 27); - - /* Load the new environment. Note: fr0 must load last to enable T-bit. */ - __asm__ ( - "fldd 0(%0),%%fr0\n" - : : "r" (bufptr), "m" (clear) : "%r0"); - - return 0; -} - -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/hppa/fpu/fesetenv.c b/sysdeps/hppa/fpu/fesetenv.c deleted file mode 100644 index 24f84f215a..0000000000 --- a/sysdeps/hppa/fpu/fesetenv.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000 - Based on the m68k version by - Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__fesetenv (const fenv_t *envp) -{ - union { unsigned long long buf[4]; fenv_t env; } temp; - unsigned long long *bufptr; - - /* Install the environment specified by ENVP. But there are a few - values which we do not want to come from the saved environment. - Therefore, we get the current environment and replace the values - we want to use from the environment specified by the parameter. */ - bufptr = temp.buf; - __asm__ ( - "fstd %%fr0,0(%1)\n" - : "=m" (temp) : "r" (bufptr) : "%r0"); - - temp.env.__status_word &= ~(FE_ALL_EXCEPT - | (FE_ALL_EXCEPT << 27) - | FE_DOWNWARD); - if (envp == FE_DFL_ENV) - temp.env.__status_word = 0; - else if (envp == FE_NOMASK_ENV) - temp.env.__status_word |= FE_ALL_EXCEPT; - else - temp.env.__status_word |= (envp->__status_word - & (FE_ALL_EXCEPT - | FE_DOWNWARD - | (FE_ALL_EXCEPT << 27))); - - /* Load the new environment. We use bufptr again since the - initial asm has modified the value of the register and here - we take advantage of that to load in reverse order so fr0 - is loaded last and T-Bit is enabled. */ - __asm__ ( - "fldd 0(%1),%%fr0\n" - : : "m" (temp), "r" (bufptr) : "%r0" ); - - /* Success. */ - return 0; -} -libm_hidden_def (__fesetenv) -weak_alias (__fesetenv, fesetenv) -libm_hidden_weak (fesetenv) diff --git a/sysdeps/hppa/fpu/fesetexcept.c b/sysdeps/hppa/fpu/fesetexcept.c deleted file mode 100644 index d92f3ee00e..0000000000 --- a/sysdeps/hppa/fpu/fesetexcept.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Set given exception flags. HPPA version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fesetexcept (int excepts) -{ - fpu_control_t fpsr; - fpu_control_t fpsr_new; - - _FPU_GETCW (fpsr); - excepts &= FE_ALL_EXCEPT; - fpsr_new = fpsr | (excepts << _FPU_HPPA_SHIFT_FLAGS); - if (fpsr != fpsr_new) - _FPU_SETCW (fpsr_new); - - return 0; -} diff --git a/sysdeps/hppa/fpu/fesetmode.c b/sysdeps/hppa/fpu/fesetmode.c deleted file mode 100644 index b9d958e719..0000000000 --- a/sysdeps/hppa/fpu/fesetmode.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Install given floating-point control modes. HPPA version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define FPU_CONTROL_BITS (_FPU_HPPA_MASK_RM | 0x20 | _FPU_HPPA_MASK_INT) - -int -fesetmode (const femode_t *modep) -{ - fpu_control_t cw; - _FPU_GETCW (cw); - cw &= ~FPU_CONTROL_BITS; - if (modep == FE_DFL_MODE) - cw |= _FPU_DEFAULT; - else - cw |= *modep & FPU_CONTROL_BITS; - _FPU_SETCW (cw); - return 0; -} diff --git a/sysdeps/hppa/fpu/fesetround.c b/sysdeps/hppa/fpu/fesetround.c deleted file mode 100644 index af1952d042..0000000000 --- a/sysdeps/hppa/fpu/fesetround.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__fesetround (int round) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - - if (round & ~FE_DOWNWARD) - /* round is not a valid rounding mode. */ - return 1; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1)" : "=m" (s.l) : "r" (&s.l) : "%r0"); - s.sw[0] &= ~FE_DOWNWARD; - s.sw[0] |= round & FE_DOWNWARD; - __asm__ ("fldd 0(%0),%%fr0" : : "r" (&s.l), "m" (s.l) : "%r0"); - - return 0; -} - -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/hppa/fpu/feupdateenv.c b/sysdeps/hppa/fpu/feupdateenv.c deleted file mode 100644 index 1fb9823b0c..0000000000 --- a/sysdeps/hppa/fpu/feupdateenv.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -__feupdateenv (const fenv_t *envp) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - fenv_t temp; - /* Get the current exception status */ - __asm__ ("fstd %%fr0,0(%1) \n\t" - "fldd 0(%1),%%fr0 \n\t" - : "=m" (s.l) : "r" (&s.l)); - - /* Given environment with exception flags not cleared. */ - if ((envp != FE_DFL_ENV) && (envp != FE_NOMASK_ENV)) - { - memcpy(&temp, envp, sizeof(fenv_t)); - temp.__status_word |= s.sw[0] & (FE_ALL_EXCEPT << 27); - } - - /* Default environment with exception flags not cleared. */ - if (envp == FE_DFL_ENV) - temp.__status_word = s.sw[0] & (FE_ALL_EXCEPT << 27); - - /* All traps enabled and current exception flags not cleared. */ - if (envp == FE_NOMASK_ENV) - temp.__status_word = (s.sw[0] & (FE_ALL_EXCEPT << 27)) | FE_ALL_EXCEPT; - - /* Install new environment. */ - __fesetenv (&temp); - /* Success. */ - return 0; -} -libm_hidden_def (__feupdateenv) -weak_alias (__feupdateenv, feupdateenv) -libm_hidden_weak (feupdateenv) diff --git a/sysdeps/hppa/fpu/fgetexcptflg.c b/sysdeps/hppa/fpu/fgetexcptflg.c deleted file mode 100644 index 701526103a..0000000000 --- a/sysdeps/hppa/fpu/fgetexcptflg.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -fegetexceptflag (fexcept_t *flagp, int excepts) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1) \n\t" - "fldd 0(%1),%%fr0 \n\t" - : "=m" (s.l) : "r" (&s.l) : "%r0"); - - *flagp = (s.sw[0] >> 27) & excepts & FE_ALL_EXCEPT; - - /* Success. */ - return 0; -} diff --git a/sysdeps/hppa/fpu/fpu_control.h b/sysdeps/hppa/fpu/fpu_control.h deleted file mode 100644 index a5dcdb5a3a..0000000000 --- a/sysdeps/hppa/fpu/fpu_control.h +++ /dev/null @@ -1,71 +0,0 @@ -/* FPU control word definitions. HP-PARISC version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FPU_CONTROL_H -#define _FPU_CONTROL_H - -/* Masking of interrupts. */ -#define _FPU_MASK_PM 0x00000001 /* Inexact (I) */ -#define _FPU_MASK_UM 0x00000002 /* Underflow (U) */ -#define _FPU_MASK_OM 0x00000004 /* Overflow (O) */ -#define _FPU_MASK_ZM 0x00000008 /* Divide by zero (Z) */ -#define _FPU_MASK_IM 0x00000010 /* Invalid operation (V) */ - -/* Masking of rounding modes. */ -#define _FPU_HPPA_MASK_RM 0x00000600 /* Rounding mode mask */ -/* Masking of interrupt enable bits. */ -#define _FPU_HPPA_MASK_INT 0x0000001f /* Interrupt mask */ -/* Shift by 27 to install flag bits. */ -#define _FPU_HPPA_SHIFT_FLAGS 27 - -/* There are no reserved bits in the PA fpsr (though some are undefined). */ -#define _FPU_RESERVED 0x00000000 -/* Default is: No traps enabled, no flags set, round to nearest. */ -#define _FPU_DEFAULT 0x00000000 -/* Default + exceptions (FE_ALL_EXCEPT) enabled. */ -#define _FPU_IEEE (_FPU_DEFAULT | _FPU_HPPA_MASK_INT) - -/* Type of the control word. */ -typedef unsigned int fpu_control_t; - -/* Macros for accessing the hardware control word. */ -#define _FPU_GETCW(cw) \ -({ \ - union { __extension__ unsigned long long __fpreg; unsigned int __halfreg[2]; } __fullfp; \ - /* Get the current status word. */ \ - __asm__ ("fstd %%fr0,0(%1)\n\t" \ - "fldd 0(%1),%%fr0\n\t" \ - : "=m" (__fullfp.__fpreg) : "r" (&__fullfp.__fpreg) : "%r0"); \ - cw = __fullfp.__halfreg[0]; \ -}) - -#define _FPU_SETCW(cw) \ -({ \ - union { __extension__ unsigned long long __fpreg; unsigned int __halfreg[2]; } __fullfp; \ - /* Get the current status word and set the control word. */ \ - __asm__ ("fstd %%fr0,0(%1)\n\t" \ - : "=m" (__fullfp.__fpreg) : "r" (&__fullfp.__fpreg) : "%r0"); \ - __fullfp.__halfreg[0] = cw; \ - __asm__ ("fldd 0(%1),%%fr0\n\t" \ - : : "m" (__fullfp.__fpreg), "r" (&__fullfp.__fpreg) : "%r0" ); \ -}) - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#endif /* _FPU_CONTROL_H */ diff --git a/sysdeps/hppa/fpu/fraiseexcpt.c b/sysdeps/hppa/fpu/fraiseexcpt.c deleted file mode 100644 index 230724ca0d..0000000000 --- a/sysdeps/hppa/fpu/fraiseexcpt.c +++ /dev/null @@ -1,103 +0,0 @@ -/* Raise given exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* Please see section 10, - page 10-5 "Delayed Trapping" in the PA-RISC 2.0 Architecture manual */ - -int -__feraiseexcept (int excepts) -{ - /* Raise exceptions represented by EXCEPTS. But we must raise only one - signal at a time. It is important that if the overflow/underflow - exception and the divide by zero exception are given at the same - time, the overflow/underflow exception follows the divide by zero - exception. */ - - /* We do these bits in assembly to be certain GCC doesn't optimize - away something important, and so we can force delayed traps to - occur. */ - - /* We use "fldd 0(%%sr0,%%sp),%0" to flush the delayed exception */ - - /* First: Invalid exception. */ - if (excepts & FE_INVALID) - { - /* One example of an invalid operation is 0 * Infinity. */ - double d = HUGE_VAL; - __asm__ __volatile__ ( - " fcpy,dbl %%fr0,%%fr22\n" - " fmpy,dbl %0,%%fr22,%0\n" - " fldd 0(%%sr0,%%sp),%0" - : "+f" (d) : : "%fr22" ); - } - - /* Second: Division by zero. */ - if (excepts & FE_DIVBYZERO) - { - double d = 1.0; - __asm__ __volatile__ ( - " fcpy,dbl %%fr0,%%fr22\n" - " fdiv,dbl %0,%%fr22,%0\n" - " fldd 0(%%sr0,%%sp),%0" - : "+f" (d) : : "%fr22" ); - } - - /* Third: Overflow. */ - if (excepts & FE_OVERFLOW) - { - double d = DBL_MAX; - __asm__ __volatile__ ( - " fadd,dbl %0,%0,%0\n" - " fldd 0(%%sr0,%%sp),%0" - : "+f" (d) ); - } - - /* Fourth: Underflow. */ - if (excepts & FE_UNDERFLOW) - { - double d = DBL_MIN; - double e = 3.0; - __asm__ __volatile__ ( - " fdiv,dbl %0,%1,%0\n" - " fldd 0(%%sr0,%%sp),%0" - : "+f" (d) : "f" (e) ); - } - - /* Fifth: Inexact */ - if (excepts & FE_INEXACT) - { - double d = M_PI; - double e = 69.69; - __asm__ __volatile__ ( - " fdiv,dbl %0,%1,%%fr22\n" - " fcnvfxt,dbl,sgl %%fr22,%%fr22L\n" - " fldd 0(%%sr0,%%sp),%%fr22" - : : "f" (d), "f" (e) : "%fr22" ); - } - - /* Success. */ - return 0; -} -libm_hidden_def (__feraiseexcept) -weak_alias (__feraiseexcept, feraiseexcept) -libm_hidden_weak (feraiseexcept) diff --git a/sysdeps/hppa/fpu/fsetexcptflg.c b/sysdeps/hppa/fpu/fsetexcptflg.c deleted file mode 100644 index 4d21ae7c08..0000000000 --- a/sysdeps/hppa/fpu/fsetexcptflg.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - fpu_control_t fpsr; - fpu_control_t fpsr_new; - - /* Get the current status word. */ - _FPU_GETCW (fpsr); - excepts &= FE_ALL_EXCEPT; - - /* Install new raised flags. */ - fpsr_new = fpsr & ~(excepts << _FPU_HPPA_SHIFT_FLAGS); - fpsr_new |= (*flagp & excepts) << _FPU_HPPA_SHIFT_FLAGS; - - /* Store the new status word. */ - if (fpsr != fpsr_new) - _FPU_SETCW (fpsr_new); - - /* Success. */ - return 0; -} diff --git a/sysdeps/hppa/fpu/ftestexcept.c b/sysdeps/hppa/fpu/ftestexcept.c deleted file mode 100644 index f9787b41be..0000000000 --- a/sysdeps/hppa/fpu/ftestexcept.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -fetestexcept (int excepts) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1) \n\t" - "fldd 0(%1),%%fr0 \n\t" - : "=m" (s.l) : "r" (&s.l)); - - return (s.sw[0] >> 27) & excepts & FE_ALL_EXCEPT; -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/hppa/fpu/libm-test-ulps b/sysdeps/hppa/fpu/libm-test-ulps deleted file mode 100644 index b5c8e7ccde..0000000000 --- a/sysdeps/hppa/fpu/libm-test-ulps +++ /dev/null @@ -1,1764 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -float: 1 -ifloat: 1 - -Function: "acos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "acos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "acos_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "acosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "acosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "acosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "acosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "asin": -float: 1 -ifloat: 1 - -Function: "asin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "asinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "asinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "atan": -float: 1 -ifloat: 1 - -Function: "atan2": -float: 1 -ifloat: 1 - -Function: "atan2_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atan2_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atan2_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "atan_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "atanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "atanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "atanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "cabs": -double: 1 -idouble: 1 - -Function: "cabs_downward": -double: 1 -idouble: 1 - -Function: "cabs_towardzero": -double: 1 -idouble: 1 - -Function: "cabs_upward": -double: 1 -idouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cacos_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "cacos_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "cacos_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "cacos_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "cacos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "cacos_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: Real part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cacosh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "cacosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "cacosh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "cacosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "cacosh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: Imaginary part of "cacosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "carg": -float: 1 -ifloat: 1 - -Function: "carg_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "carg_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "carg_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "casin": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "casin_downward": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: Imaginary part of "casin_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "casin_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: Imaginary part of "casin_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "casin_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "casin_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: Real part of "casinh": -double: 5 -float: 2 -idouble: 5 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casinh": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "casinh_downward": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: Real part of "casinh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "casinh_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: Real part of "casinh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: Imaginary part of "casinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "catan": -float: 1 -ifloat: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catan_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "catan_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "catan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "catan_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Real part of "catan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "catan_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: Real part of "catanh": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh": -float: 1 -ifloat: 1 - -Function: Real part of "catanh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "catanh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "catanh_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "catanh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "catanh_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Imaginary part of "catanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cbrt": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 - -Function: "cbrt_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: "cbrt_upward": -double: 5 -float: 1 -idouble: 5 -ifloat: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccos_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ccos_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "ccos_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ccos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccosh_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Imaginary part of "ccosh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ccosh_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Imaginary part of "ccosh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ccosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "ccosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cexp_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cexp_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Real part of "cexp_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cexp_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Real part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "clog": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 - -Function: Real part of "clog10": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 - -Function: Imaginary part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog10_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: Imaginary part of "clog10_downward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 - -Function: Real part of "clog10_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: Imaginary part of "clog10_towardzero": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 - -Function: Real part of "clog10_upward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 - -Function: Imaginary part of "clog10_upward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 - -Function: Real part of "clog_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Imaginary part of "clog_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "clog_towardzero": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: Imaginary part of "clog_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Real part of "clog_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Imaginary part of "clog_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "cos": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "cos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cpow": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cpow": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_downward": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 - -Function: Imaginary part of "cpow_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "cpow_towardzero": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 - -Function: Imaginary part of "cpow_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "cpow_upward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 - -Function: Imaginary part of "cpow_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csin_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "csin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "csin_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "csin_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "csin_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "csin_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csinh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "csinh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "csinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "csinh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "csinh_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Imaginary part of "csinh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "csqrt_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: Imaginary part of "csqrt_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Real part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Imaginary part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Real part of "csqrt_upward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: Imaginary part of "csqrt_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ctan_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 - -Function: Imaginary part of "ctan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Real part of "ctan_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ctanh_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 - -Function: Imaginary part of "ctanh_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "ctanh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "erf_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "erf_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "erfc": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "erfc_downward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 - -Function: "erfc_towardzero": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 - -Function: "erfc_upward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 - -Function: "exp": -float: 1 -ifloat: 1 - -Function: "exp10": -double: 6 -float: 2 -idouble: 6 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: "exp10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "exp10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "exp10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "exp2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp2_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "expm1_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "gamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "gamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "gamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "gamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "hypot": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "hypot_downward": -double: 1 -idouble: 1 - -Function: "hypot_towardzero": -double: 1 -idouble: 1 - -Function: "hypot_upward": -double: 1 -idouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j0_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: "j0_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "j0_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "j1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "j1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "j1_upward": -double: 3 -float: 5 -idouble: 3 -ifloat: 5 - -Function: "jn": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: "jn_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "jn_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "jn_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "lgamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 1 -ldouble: 1 - -Function: "lgamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "lgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "lgamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "log": -float: 1 -ifloat: 1 - -Function: "log10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: "log10_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log10_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log1p": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "log1p_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log1p_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log1p_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log2": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "log2_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "log2_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log2_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "log_downward": -float: 2 -ifloat: 2 - -Function: "log_towardzero": -float: 2 -ifloat: 2 - -Function: "log_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "pow": -float: 1 -ifloat: 1 - -Function: "pow10": -double: 2 -idouble: 2 - -Function: "pow10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "pow10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "pow10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "pow_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "pow_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "pow_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "sin": -float: 1 -ifloat: 1 - -Function: "sin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "sin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sincos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sincos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sincos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "sincos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "sinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "sinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "sinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "tan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "tan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "tan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "tanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "tanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "tanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "tanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "tgamma": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 1 -ldouble: 1 - -Function: "tgamma_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "tgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "tgamma_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "y0_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "y0_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "y0_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "y1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "y1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "y1_upward": -double: 7 -float: 2 -idouble: 7 -ifloat: 2 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "yn_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "yn_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "yn_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -# end of automatic generation diff --git a/sysdeps/hppa/fpu/libm-test-ulps-name b/sysdeps/hppa/fpu/libm-test-ulps-name deleted file mode 100644 index 808d1bc741..0000000000 --- a/sysdeps/hppa/fpu/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -HPPA diff --git a/sysdeps/hppa/frame.h b/sysdeps/hppa/frame.h deleted file mode 100644 index 43a1e7e3f2..0000000000 --- a/sysdeps/hppa/frame.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Definition of stack frame structure. HPPA version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* PA stacks grow upwards. */ -#define INNER_THAN > - -/* FIXME: will verify this later */ -struct layout -{ - void *next; - void *return_address; -}; diff --git a/sysdeps/hppa/gccframe.h b/sysdeps/hppa/gccframe.h deleted file mode 100644 index 437e209393..0000000000 --- a/sysdeps/hppa/gccframe.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Definition of object in frame unwind info. hppa version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Note: For hppa64 this is 61 */ -#define DWARF_FRAME_REGISTERS 89 - -#include diff --git a/sysdeps/hppa/get-rounding-mode.h b/sysdeps/hppa/get-rounding-mode.h deleted file mode 100644 index 56fcdc8c44..0000000000 --- a/sysdeps/hppa/get-rounding-mode.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Determine floating-point rounding mode within libc. HP-PARISC version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _HPPA_GET_ROUNDING_MODE_H -#define _HPPA_GET_ROUNDING_MODE_H 1 - -#include -#include - -/* Return the floating-point rounding mode. */ - -static inline int -get_rounding_mode (void) -{ - fpu_control_t fc; - _FPU_GETCW (fc); - return fc & _FPU_HPPA_MASK_RM; -} - -#endif /* get-rounding-mode.h */ diff --git a/sysdeps/hppa/hppa1.1/Implies b/sysdeps/hppa/hppa1.1/Implies deleted file mode 100644 index 780c4e2467..0000000000 --- a/sysdeps/hppa/hppa1.1/Implies +++ /dev/null @@ -1,3 +0,0 @@ -wordsize-32 -ieee754/flt-32 -ieee754/dbl-64 diff --git a/sysdeps/hppa/hppa1.1/addmul_1.S b/sysdeps/hppa/hppa1.1/addmul_1.S deleted file mode 100644 index 822365b315..0000000000 --- a/sysdeps/hppa/hppa1.1/addmul_1.S +++ /dev/null @@ -1,103 +0,0 @@ -;! HP-PA-1.1 __mpn_addmul_1 -- Multiply a limb vector with a limb and -;! add the result to a second limb vector. - -;! Copyright (C) 1992-2017 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP Library is distributed in the hope that it will be useful, but -;! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -;! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! . - - -;! INPUT PARAMETERS -;! res_ptr r26 -;! s1_ptr r25 -;! size r24 -;! s2_limb r23 - -;! This runs at 11 cycles/limb on a PA7000. With the used instructions, it -;! can not become faster due to data cache contention after a store. On the -;! PA7100 it runs at 10 cycles/limb, and that can not be improved either, -;! since only the xmpyu does not need the integer pipeline, so the only -;! dual-issue we will get are addc+xmpyu. Unrolling could gain a cycle/limb -;! on the PA7100. - -;! There are some ideas described in mul_1.s that applies to this code too. - - .text - .export __mpn_addmul_1 -__mpn_addmul_1: - .proc - .callinfo frame=64,no_calls - .entry - - ldo 64(%r30),%r30 - fldws,ma 4(%r25),%fr5 - stw %r23,-16(%r30) ;! move s2_limb ... - addib,= -1,%r24,L$just_one_limb - fldws -16(%r30),%fr4 ;! ... into fr4 - add %r0,%r0,%r0 ;! clear carry - xmpyu %fr4,%fr5,%fr6 - fldws,ma 4(%r25),%fr7 - fstds %fr6,-16(%r30) - xmpyu %fr4,%fr7,%fr8 - ldw -12(%r30),%r20 ;! least significant limb in product - ldw -16(%r30),%r28 - - fstds %fr8,-16(%r30) - addib,= -1,%r24,L$end - ldw -12(%r30),%r1 - -;! Main loop -L$loop: - ldws 0(%r26),%r29 - fldws,ma 4(%r25),%fr5 - add %r29,%r20,%r20 - stws,ma %r20,4(%r26) - addc %r28,%r1,%r20 - xmpyu %fr4,%fr5,%fr6 - ldw -16(%r30),%r28 - fstds %fr6,-16(%r30) - addc %r0,%r28,%r28 - addib,<> -1,%r24,L$loop - ldw -12(%r30),%r1 - -L$end: - ldw 0(%r26),%r29 - add %r29,%r20,%r20 - stws,ma %r20,4(%r26) - addc %r28,%r1,%r20 - ldw -16(%r30),%r28 - ldws 0(%r26),%r29 - addc %r0,%r28,%r28 - add %r29,%r20,%r20 - stws,ma %r20,4(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 - -L$just_one_limb: - xmpyu %fr4,%fr5,%fr6 - ldw 0(%r26),%r29 - fstds %fr6,-16(%r30) - ldw -12(%r30),%r1 - ldw -16(%r30),%r28 - add %r29,%r1,%r20 - stw %r20,0(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 - - .exit - .procend diff --git a/sysdeps/hppa/hppa1.1/mul_1.S b/sysdeps/hppa/hppa1.1/mul_1.S deleted file mode 100644 index 0851597c28..0000000000 --- a/sysdeps/hppa/hppa1.1/mul_1.S +++ /dev/null @@ -1,99 +0,0 @@ -;! HP-PA-1.1 __mpn_mul_1 -- Multiply a limb vector with a limb and store -;! the result in a second limb vector. - -;! Copyright (C) 1992-2017 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP Library is distributed in the hope that it will be useful, but -;! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -;! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! . - - -;! INPUT PARAMETERS -;! res_ptr r26 -;! s1_ptr r25 -;! size r24 -;! s2_limb r23 - -;! This runs at 9 cycles/limb on a PA7000. With the used instructions, it can -;! not become faster due to data cache contention after a store. On the -;! PA7100 it runs at 7 cycles/limb, and that can not be improved either, since -;! only the xmpyu does not need the integer pipeline, so the only dual-issue -;! we will get are addc+xmpyu. Unrolling would not help either CPU. - -;! We could use fldds to read two limbs at a time from the S1 array, and that -;! could bring down the times to 8.5 and 6.5 cycles/limb for the PA7000 and -;! PA7100, respectively. We don't do that since it does not seem worth the -;! (alignment) troubles... - -;! At least the PA7100 is rumored to be able to deal with cache-misses -;! without stalling instruction issue. If this is true, and the cache is -;! actually also lockup-free, we should use a deeper software pipeline, and -;! load from S1 very early; (The loads and stores to -12(sp) will surely be -;! in the cache.) - - .text - .export __mpn_mul_1 -__mpn_mul_1: - .proc - .callinfo frame=64,no_calls - .entry - - ldo 64(%r30),%r30 - fldws,ma 4(%r25),%fr5 - stw %r23,-16(%r30) ;! move s2_limb ... - addib,= -1,%r24,L$just_one_limb - fldws -16(%r30),%fr4 ;! ... into fr4 - add %r0,%r0,%r0 ;! clear carry - xmpyu %fr4,%fr5,%fr6 - fldws,ma 4(%r25),%fr7 - fstds %fr6,-16(%r30) - xmpyu %fr4,%fr7,%fr8 - ldw -12(%r30),%r20 ;! least significant limb in product - ldw -16(%r30),%r28 - - fstds %fr8,-16(%r30) - addib,= -1,%r24,L$end - ldw -12(%r30),%r1 - -;! Main loop -L$loop: - fldws,ma 4(%r25),%fr5 - stws,ma %r20,4(%r26) - addc %r28,%r1,%r20 - xmpyu %fr4,%fr5,%fr6 - ldw -16(%r30),%r28 - fstds %fr6,-16(%r30) - addib,<> -1,%r24,L$loop - ldw -12(%r30),%r1 - -L$end: - stws,ma %r20,4(%r26) - addc %r28,%r1,%r20 - ldw -16(%r30),%r28 - stws,ma %r20,4(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 - -L$just_one_limb: - xmpyu %fr4,%fr5,%fr6 - fstds %fr6,-16(%r30) - ldw -16(%r30),%r28 - ldo -64(%r30),%r30 - bv 0(%r2) - fstws %fr6R,0(%r26) - - .exit - .procend diff --git a/sysdeps/hppa/hppa1.1/s_signbit.c b/sysdeps/hppa/hppa1.1/s_signbit.c deleted file mode 100644 index 314c294560..0000000000 --- a/sysdeps/hppa/hppa1.1/s_signbit.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Return nonzero value if number is negative. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#include - -int -__signbit (double x) -{ - int32_t hx; - - GET_HIGH_WORD (hx, x); - return hx & 0x80000000; -} -#ifdef NO_LONG_DOUBLE -strong_alias (__signbit, __signbitl) -#endif diff --git a/sysdeps/hppa/hppa1.1/submul_1.S b/sysdeps/hppa/hppa1.1/submul_1.S deleted file mode 100644 index c2b350d735..0000000000 --- a/sysdeps/hppa/hppa1.1/submul_1.S +++ /dev/null @@ -1,112 +0,0 @@ -;! HP-PA-1.1 __mpn_submul_1 -- Multiply a limb vector with a limb and -;! subtract the result from a second limb vector. - -;! Copyright (C) 1992-2017 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP Library is distributed in the hope that it will be useful, but -;! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -;! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! . - - -;! INPUT PARAMETERS -;! res_ptr r26 -;! s1_ptr r25 -;! size r24 -;! s2_limb r23 - -;! This runs at 12 cycles/limb on a PA7000. With the used instructions, it -;! can not become faster due to data cache contention after a store. On the -;! PA7100 it runs at 11 cycles/limb, and that can not be improved either, -;! since only the xmpyu does not need the integer pipeline, so the only -;! dual-issue we will get are addc+xmpyu. Unrolling could gain a cycle/limb -;! on the PA7100. - -;! There are some ideas described in mul_1.s that applies to this code too. - -;! It seems possible to make this run as fast as __mpn_addmul_1, if we use -;! sub,>>= %r29,%r20,%r22 -;! addi 1,%r28,%r28 -;! but that requires reworking the hairy software pipeline... - - .text - .export __mpn_submul_1 -__mpn_submul_1: - .proc - .callinfo frame=64,no_calls - .entry - - ldo 64(%r30),%r30 - fldws,ma 4(%r25),%fr5 - stw %r23,-16(%r30) ;! move s2_limb ... - addib,= -1,%r24,L$just_one_limb - fldws -16(%r30),%fr4 ;! ... into fr4 - add %r0,%r0,%r0 ;! clear carry - xmpyu %fr4,%fr5,%fr6 - fldws,ma 4(%r25),%fr7 - fstds %fr6,-16(%r30) - xmpyu %fr4,%fr7,%fr8 - ldw -12(%r30),%r20 ;! least significant limb in product - ldw -16(%r30),%r28 - - fstds %fr8,-16(%r30) - addib,= -1,%r24,L$end - ldw -12(%r30),%r1 - -;! Main loop -L$loop: - ldws 0(%r26),%r29 - fldws,ma 4(%r25),%fr5 - sub %r29,%r20,%r22 - add %r22,%r20,%r0 - stws,ma %r22,4(%r26) - addc %r28,%r1,%r20 - xmpyu %fr4,%fr5,%fr6 - ldw -16(%r30),%r28 - fstds %fr6,-16(%r30) - addc %r0,%r28,%r28 - addib,<> -1,%r24,L$loop - ldw -12(%r30),%r1 - -L$end: - ldw 0(%r26),%r29 - sub %r29,%r20,%r22 - add %r22,%r20,%r0 - stws,ma %r22,4(%r26) - addc %r28,%r1,%r20 - ldw -16(%r30),%r28 - ldws 0(%r26),%r29 - addc %r0,%r28,%r28 - sub %r29,%r20,%r22 - add %r22,%r20,%r0 - stws,ma %r22,4(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 - -L$just_one_limb: - xmpyu %fr4,%fr5,%fr6 - ldw 0(%r26),%r29 - fstds %fr6,-16(%r30) - ldw -12(%r30),%r1 - ldw -16(%r30),%r28 - sub %r29,%r1,%r22 - add %r22,%r1,%r0 - stw %r22,0(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 - - .exit - .procend diff --git a/sysdeps/hppa/hppa1.1/udiv_qrnnd.S b/sysdeps/hppa/hppa1.1/udiv_qrnnd.S deleted file mode 100644 index c798241b45..0000000000 --- a/sysdeps/hppa/hppa1.1/udiv_qrnnd.S +++ /dev/null @@ -1,77 +0,0 @@ -;! HP-PA __udiv_qrnnd division support, used from longlong.h. -;! This version runs fast on PA 7000 and later. - -;! Copyright (C) 1993-2017 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP Library is distributed in the hope that it will be useful, but -;! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -;! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! . - - -;! INPUT PARAMETERS -;! rem_ptr gr26 -;! n1 gr25 -;! n0 gr24 -;! d gr23 - - .text -L$0000: - .word 0x43f00000 - .word 0x0 - .export __udiv_qrnnd -__udiv_qrnnd: - .proc - .callinfo frame=64,no_calls - .entry - ldo 64(%r30),%r30 - - stws %r25,-16(%r30) ;! n_hi - stws %r24,-12(%r30) ;! n_lo - b,l L$0,%r1 - ldo L$0000-L$0(%r1),%r1 -L$0: - fldds -16(%r30),%fr5 - stws %r23,-12(%r30) - comib,<= 0,%r25,L$1 - fcnvxf,dbl,dbl %fr5,%fr5 - fldds 0(%r1),%fr4 - fadd,dbl %fr4,%fr5,%fr5 -L$1: - fcpy,sgl %fr0,%fr6L - fldws -12(%r30),%fr6R - fcnvxf,dbl,dbl %fr6,%fr4 - - fdiv,dbl %fr5,%fr4,%fr5 - - fcnvfx,dbl,dbl %fr5,%fr4 - fstws %fr4R,-16(%r30) - xmpyu %fr4R,%fr6R,%fr6 - ldws -16(%r30),%r28 - fstds %fr6,-16(%r30) - ldws -12(%r30),%r21 - ldws -16(%r30),%r20 - sub %r24,%r21,%r22 - subb %r25,%r20,%r1 - comib,= 0,%r1,L$2 - ldo -64(%r30),%r30 - - add %r22,%r23,%r22 - ldo -1(%r28),%r28 -L$2: - bv 0(%r2) - stws %r22,0(%r26) - - .exit - .procend diff --git a/sysdeps/hppa/jmpbuf-offsets.h b/sysdeps/hppa/jmpbuf-offsets.h deleted file mode 100644 index a50979330d..0000000000 --- a/sysdeps/hppa/jmpbuf-offsets.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Private macros for accessing __jmp_buf contents. HPPA version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define JB_SP (76/4) diff --git a/sysdeps/hppa/jmpbuf-unwind.h b/sysdeps/hppa/jmpbuf-unwind.h deleted file mode 100644 index a103491e57..0000000000 --- a/sysdeps/hppa/jmpbuf-unwind.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Examine __jmp_buf for unwinding frames. HPPA version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame containing a local - variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(_jmpbuf, _address, _demangle) \ - ((void *) (_address) > \ - (void *) _demangle ((((unsigned long *) _jmpbuf)[JB_SP]))) diff --git a/sysdeps/hppa/ldsodefs.h b/sysdeps/hppa/ldsodefs.h deleted file mode 100644 index 155f8bec6c..0000000000 --- a/sysdeps/hppa/ldsodefs.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _HPPA_LDSODEFS_H -#define _HPPA_LDSODEFS_H 1 - -#include - -struct La_hppa_regs; -struct La_hppa_retval; - -#define ARCH_PLTENTER_MEMBERS \ - Elf32_Addr (*hppa_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *, \ - uintptr_t *, struct La_hppa_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep); - -#define ARCH_PLTEXIT_MEMBERS \ - unsigned int (*hppa_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *, \ - uintptr_t *, \ - const struct La_hppa_regs *, \ - struct La_hppa_retval *, const char *); - -#include_next - -#endif diff --git a/sysdeps/hppa/libc-tls.c b/sysdeps/hppa/libc-tls.c deleted file mode 100644 index 24f766b21f..0000000000 --- a/sysdeps/hppa/libc-tls.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. hppa version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* On hppa, linker optimizations are not required, so __tls_get_addr - can be called even in statically linked binaries. In this case module - must be always 1 and PT_TLS segment exist in the binary, otherwise it - would not link. */ - -void * -__tls_get_addr (tls_index *ti) -{ - dtv_t *dtv = THREAD_DTV (); - return (char *) dtv[1].pointer.val + ti->ti_offset; -} diff --git a/sysdeps/hppa/libgcc-compat.c b/sysdeps/hppa/libgcc-compat.c deleted file mode 100644 index 87d57e5257..0000000000 --- a/sysdeps/hppa/libgcc-compat.c +++ /dev/null @@ -1,42 +0,0 @@ -/* pre-.hidden libgcc compatibility - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Randolph Chung - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -#include -#include - -#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_6) - -symbol_version (__clz_tab_internal, __clz_tab, GLIBC_2.2); - -typedef unsigned int UQItype __attribute__ ((mode (QI))); - -const UQItype __clz_tab_internal[] = -{ - 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, - 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, -}; - -#endif diff --git a/sysdeps/hppa/linkmap.h b/sysdeps/hppa/linkmap.h deleted file mode 100644 index 54842b2299..0000000000 --- a/sysdeps/hppa/linkmap.h +++ /dev/null @@ -1,6 +0,0 @@ -/* Used to store the function descriptor table */ -struct link_map_machine - { - size_t fptr_table_len; - ElfW(Addr) *fptr_table; - }; diff --git a/sysdeps/hppa/lshift.S b/sysdeps/hppa/lshift.S deleted file mode 100644 index a1ea255cd8..0000000000 --- a/sysdeps/hppa/lshift.S +++ /dev/null @@ -1,65 +0,0 @@ -;! HP-PA __mpn_lshift -- - -;! Copyright (C) 1992-2017 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP Library is distributed in the hope that it will be useful, but -;! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -;! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! . - - -;! INPUT PARAMETERS -;! res_ptr gr26 -;! s_ptr gr25 -;! size gr24 -;! cnt gr23 - - .text - .export __mpn_lshift -__mpn_lshift: - .proc - .callinfo frame=64,no_calls - .entry - - sh2add %r24,%r25,%r25 - sh2add %r24,%r26,%r26 - ldws,mb -4(%r25),%r22 - subi 32,%r23,%r1 - mtsar %r1 - addib,= -1,%r24,L$0004 - vshd %r0,%r22,%r28 ;! compute carry out limb - ldws,mb -4(%r25),%r29 - addib,= -1,%r24,L$0002 - vshd %r22,%r29,%r20 - -L$loop: ldws,mb -4(%r25),%r22 - stws,mb %r20,-4(%r26) - addib,= -1,%r24,L$0003 - vshd %r29,%r22,%r20 - ldws,mb -4(%r25),%r29 - stws,mb %r20,-4(%r26) - addib,<> -1,%r24,L$loop - vshd %r22,%r29,%r20 - -L$0002: stws,mb %r20,-4(%r26) - vshd %r29,%r0,%r20 - bv 0(%r2) - stw %r20,-4(%r26) -L$0003: stws,mb %r20,-4(%r26) -L$0004: vshd %r22,%r0,%r20 - bv 0(%r2) - stw %r20,-4(%r26) - - .exit - .procend diff --git a/sysdeps/hppa/machine-gmon.h b/sysdeps/hppa/machine-gmon.h deleted file mode 100644 index 9ad121d671..0000000000 --- a/sysdeps/hppa/machine-gmon.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Machine-specific calling sequence for `mcount' profiling function. PA-RISC - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* We can call _mcount directly since gcc supplies the correct - * arguments */ -#define _MCOUNT_DECL(from, self) \ - void _mcount (u_long from, u_long self) - -#define MCOUNT diff --git a/sysdeps/hppa/memusage.h b/sysdeps/hppa/memusage.h deleted file mode 100644 index 1e86776c2c..0000000000 --- a/sysdeps/hppa/memusage.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("%r30"); stack_ptr; }) -#define STACK_GROWS_UPWARD 1 - -#include diff --git a/sysdeps/hppa/mp_clz_tab.c b/sysdeps/hppa/mp_clz_tab.c deleted file mode 100644 index 52d06383c1..0000000000 --- a/sysdeps/hppa/mp_clz_tab.c +++ /dev/null @@ -1 +0,0 @@ -/* __clz_tab not needed on hppa. */ diff --git a/sysdeps/hppa/nan-high-order-bit.h b/sysdeps/hppa/nan-high-order-bit.h deleted file mode 100644 index bdf59830ea..0000000000 --- a/sysdeps/hppa/nan-high-order-bit.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Specify NaN high-order bit conventions. HPPA version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef NAN_HIGH_ORDER_BIT_H -#define NAN_HIGH_ORDER_BIT_H 1 - -/* One of the few architectures where the meaning of the - quiet/signaling bit is inverse to IEEE 754-2008 (as well as common - practice for IEEE 754-1985). */ -#define HIGH_ORDER_BIT_IS_SET_FOR_SNAN 1 - -#endif /* nan-high-order-bit.h */ diff --git a/sysdeps/hppa/nptl/Makefile b/sysdeps/hppa/nptl/Makefile deleted file mode 100644 index e9d9181f64..0000000000 --- a/sysdeps/hppa/nptl/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (C) 2005-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# . - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif diff --git a/sysdeps/hppa/nptl/bits/pthreadtypes-arch.h b/sysdeps/hppa/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index 7befe5de6d..0000000000 --- a/sysdeps/hppa/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -#define _BITS_PTHREADTYPES_ARCH_H 1 - -/* Linuxthread type sizes (bytes): - sizeof(pthread_attr_t) = 0x24 (36) - sizeof(pthread_barrier_t) = 0x30 (48) - sizeof(pthread_barrierattr_t) = 0x4 (4) - sizeof(pthread_cond_t) = 0x30 (48) - sizeof(pthread_condattr_t) = 0x4 (4) - sizeof(pthread_mutex_t) = 0x30 (48) - sizeof(pthread_mutexattr_t) = 0x4 (4) - sizeof(pthread_rwlock_t) = 0x40 (64) - sizeof(pthread_rwlockattr_t) = 0x8 (8) - sizeof(pthread_spinlock_t) = 0x10 (16) */ - -#define __SIZEOF_PTHREAD_ATTR_T 36 -#define __SIZEOF_PTHREAD_MUTEX_T 48 -#define __SIZEOF_PTHREAD_BARRIER_T 48 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_RWLOCK_T 64 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 - -/* The old 4-word 16-byte aligned lock. This is initalized - to all ones by the Linuxthreads PTHREAD_MUTEX_INITIALIZER. - Unused in NPTL. */ -#define __PTHREAD_COMPAT_PADDING_MID int __compat_padding[4] -/* Two more words are left before the NPTL - pthread_mutex_t is larger than Linuxthreads. */ -#define __PTHREAD_COMPAT_PADDING_END int __reserved[2] -#define __PTHREAD_MUTEX_LOCK_ELISION 0 - -#define __LOCK_ALIGNMENT __attribute__ ((__aligned__(16))) -#define __ONCE_ALIGNMENT - -struct __pthread_rwlock_arch_t -{ - /* In the old Linuxthreads pthread_rwlock_t, this is the - start of the 4-word 16-byte aligned lock structure. The - next four words are all set to 1 by the Linuxthreads - PTHREAD_RWLOCK_INITIALIZER. We ignore them in NPTL. */ - int __compat_padding[4] __attribute__ ((__aligned__(16))); - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; - int __cur_writer; - /* An unused word, reserved for future use. It was added - to maintain the location of the flags from the Linuxthreads - layout of this structure. */ - int __reserved1; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __pad2; - unsigned char __pad1; - unsigned char __shared; - unsigned char __flags; - /* The NPTL pthread_rwlock_t is 4 words smaller than the - Linuxthreads version. One word is in the middle of the - structure, the other three are at the end. */ - int __reserved2; - int __reserved3; - int __reserved4; -}; - -#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/hppa/nptl/bits/semaphore.h b/sysdeps/hppa/nptl/bits/semaphore.h deleted file mode 100644 index 060a0627f0..0000000000 --- a/sysdeps/hppa/nptl/bits/semaphore.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - -#define __SIZEOF_SEM_T 16 - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/sysdeps/hppa/nptl/jmpbuf-unwind.h b/sysdeps/hppa/nptl/jmpbuf-unwind.h deleted file mode 100644 index 800180384a..0000000000 --- a/sysdeps/hppa/nptl/jmpbuf-unwind.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) > (uintptr_t)(((unsigned long *) _jmpbuf)[JB_SP]) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/hppa/nptl/pthread_spin_init.c b/sysdeps/hppa/nptl/pthread_spin_init.c deleted file mode 100644 index 8bbc79e581..0000000000 --- a/sysdeps/hppa/nptl/pthread_spin_init.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "pthreadP.h" - -int -pthread_spin_init (pthread_spinlock_t *lock, int pshared) -{ - /* CONCURRENCTY NOTES: - - The atomic_exchange_rel synchronizes-with the atomic_exhange_acq in - pthread_spin_lock. - - On hppa we must not use a plain `stw` to reset the guard lock. This - has to do with the kernel compare-and-swap helper that is used to - implement all of the atomic operations. - - The kernel CAS helper uses its own internal locks and that means that - to create a true happens-before relationship between any two threads, - the second thread must observe the internal lock having a value of 0 - (it must attempt to take the lock with ldcw). This creates the - ordering required for a second thread to observe the effects of the - RMW of the kernel CAS helper in any other thread. - - Therefore if a variable is used in an atomic macro it must always be - manipulated with atomic macros in order for memory ordering rules to - be preserved. */ - atomic_exchange_rel (lock, 0); - return 0; -} diff --git a/sysdeps/hppa/nptl/pthread_spin_unlock.c b/sysdeps/hppa/nptl/pthread_spin_unlock.c deleted file mode 100644 index 7883568bc6..0000000000 --- a/sysdeps/hppa/nptl/pthread_spin_unlock.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "pthreadP.h" - -int -pthread_spin_unlock (pthread_spinlock_t *lock) -{ - /* CONCURRENCTY NOTES: - - The atomic_exchange_rel synchronizes-with the atomic_exhange_acq in - pthread_spin_lock. - - On hppa we must not use a plain `stw` to reset the guard lock. This - has to do with the kernel compare-and-swap helper that is used to - implement all of the atomic operations. - - The kernel CAS helper uses its own internal locks and that means that - to create a true happens-before relationship between any two threads, - the second thread must observe the internal lock having a value of 0 - (it must attempt to take the lock with ldcw). This creates the - ordering required for a second thread to observe the effects of the - RMW of the kernel CAS helper in any other thread. - - Therefore if a variable is used in an atomic macro it must always be - manipulated with atomic macros in order for memory ordering rules to - be preserved. */ - atomic_exchange_rel (lock, 0); - return 0; -} diff --git a/sysdeps/hppa/nptl/pthreaddef.h b/sysdeps/hppa/nptl/pthreaddef.h deleted file mode 100644 index 77343dd42b..0000000000 --- a/sysdeps/hppa/nptl/pthreaddef.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (8 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. */ -#define STACK_ALIGN 64 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB, note that this must be larger than STACK_ALIGN */ -#define TCB_ALIGNMENT STACK_ALIGN - - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME stack_pointer -register char * stack_pointer __asm__ ("%r30"); diff --git a/sysdeps/hppa/nptl/tcb-offsets.sym b/sysdeps/hppa/nptl/tcb-offsets.sym deleted file mode 100644 index 6e852f35b1..0000000000 --- a/sysdeps/hppa/nptl/tcb-offsets.sym +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include - -RESULT offsetof (struct pthread, result) -TID offsetof (struct pthread, tid) -CANCELHANDLING offsetof (struct pthread, cancelhandling) -CLEANUP_JMP_BUF offsetof (struct pthread, cleanup_jmp_buf) -MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) -TLS_PRE_TCB_SIZE sizeof (struct pthread) -MUTEX_FUTEX offsetof (pthread_mutex_t, __data.__lock) - --- Use a thread_offset when working with asm to make things simpler --- This way we get the offset of a member in the struct pthread that --- preceeds the thread pointer (which points to the dtv). -#define thread_offsetof(mem) (unsigned int)(offsetof(struct pthread, mem) - sizeof(struct pthread)) -TID_THREAD_OFFSET thread_offsetof (tid) -MULTIPLE_THREADS_THREAD_OFFSET thread_offsetof (header.multiple_threads) diff --git a/sysdeps/hppa/nptl/tls.h b/sysdeps/hppa/nptl/tls.h deleted file mode 100644 index d983e10758..0000000000 --- a/sysdeps/hppa/nptl/tls.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Definition for thread-local data handling. NPTL/hppa version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _TLS_H -#define _TLS_H 1 - -#include - -#ifndef __ASSEMBLER__ -# include -# include -# include -# include - -#else /* __ASSEMBLER__ */ -# include -#endif /* __ASSEMBLER__ */ - -#ifndef __ASSEMBLER__ - -/* Get system call information. */ -# include - -/* The TP points to the start of the thread blocks. */ -# define TLS_DTV_AT_TP 1 -# define TLS_TCB_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include - -typedef struct -{ - dtv_t *dtv; - void *private; -} tcbhead_t; - -/* This is the size of the initial TCB. */ -# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t) - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE sizeof (tcbhead_t) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size we need before TCB */ -# define TLS_PRE_TCB_SIZE sizeof (struct pthread) - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(tcbp, dtvp) \ - ((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1 - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtv) \ - ({ tcbhead_t *__tcbp = (tcbhead_t *)__get_cr27(); \ - __tcbp->dtv = dtv; \ - }) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(tcbp) \ - (((tcbhead_t *) (tcbp))->dtv) - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(tcbp) \ - ({ __set_cr27(tcbp); NULL; }) - -/* Value passed to 'clone' for initialization of the thread register. */ -# define TLS_DEFINE_INIT_TP(tp, pd) void *tp = (pd) + 1 - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - ({ tcbhead_t *__tcbp = (tcbhead_t *)__get_cr27(); \ - __tcbp->dtv; \ - }) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF \ - ({ struct pthread *__self; \ - __self = __get_cr27(); \ - __self - 1; \ - }) - -/* Magic for libthread_db to know how to do THREAD_SELF. - Our thread pointer is stored in cr27. See asm/elf.h for the offset into - elf_gregset_t. The thread descriptor is sizeof (struct pthread) away. */ -# define DB_THREAD_SELF \ - REGISTER (32, 32, 53 * 4, -sizeof (struct pthread)) - -/* Access to data in the thread descriptor is easy. */ -# define THREAD_GETMEM(descr, member) \ - descr->member -# define THREAD_GETMEM_NC(descr, member, idx) \ - descr->member[idx] -# define THREAD_SETMEM(descr, member, value) \ - descr->member = (value) -# define THREAD_SETMEM_NC(descr, member, idx, value) \ - descr->member[idx] = (value) - -static inline struct pthread *__get_cr27(void) -{ - long cr27; - asm ("mfctl %%cr27, %0" : "=r" (cr27) : ); - return (struct pthread *) cr27; -} - -/* We write to cr27, clobber r26 as the input argument, and clobber - r31 as the link register. */ -static inline void __set_cr27(struct pthread *cr27) -{ - asm ( "ble 0xe0(%%sr2, %%r0)\n\t" - "copy %0, %%r26" - : : "r" (cr27) : "r26", "r31" ); -} - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* !__ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/hppa/nptl/tst-oddstacklimit.c b/sysdeps/hppa/nptl/tst-oddstacklimit.c deleted file mode 100644 index 5b878c8b00..0000000000 --- a/sysdeps/hppa/nptl/tst-oddstacklimit.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Test NPTL with stack limit that is not a multiple of the page size. - HPPA version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This sets the stack resource limit to 8193kb, which is not a multiple - of the page size, and therefore an odd sized stack limit. We override - this because the default is too small to run with. */ - -#define ODD_STACK_LIMIT (8193 * 1024) - -#include diff --git a/sysdeps/hppa/preconfigure b/sysdeps/hppa/preconfigure deleted file mode 100644 index 4d7fdcd032..0000000000 --- a/sysdeps/hppa/preconfigure +++ /dev/null @@ -1,6 +0,0 @@ -# This fragment canonicalizes the machine names for hppa variants. - -case "$machine" in -hppa*64*) base_machine=hppa machine=hppa/hppa64 ;; -hppa*) base_machine=hppa machine=hppa/hppa1.1 ;; -esac diff --git a/sysdeps/hppa/rshift.S b/sysdeps/hppa/rshift.S deleted file mode 100644 index 7cf3d33479..0000000000 --- a/sysdeps/hppa/rshift.S +++ /dev/null @@ -1,62 +0,0 @@ -;! HP-PA __mpn_rshift -- - -;! Copyright (C) 1992-2017 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP Library is distributed in the hope that it will be useful, but -;! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -;! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! . - - -;! INPUT PARAMETERS -;! res_ptr gr26 -;! s_ptr gr25 -;! size gr24 -;! cnt gr23 - - .text - .export __mpn_rshift -__mpn_rshift: - .proc - .callinfo frame=64,no_calls - .entry - - ldws,ma 4(%r25),%r22 - mtsar %r23 - addib,= -1,%r24,L$0004 - vshd %r22,%r0,%r28 ;! compute carry out limb - ldws,ma 4(%r25),%r29 - addib,= -1,%r24,L$0002 - vshd %r29,%r22,%r20 - -L$loop: ldws,ma 4(%r25),%r22 - stws,ma %r20,4(%r26) - addib,= -1,%r24,L$0003 - vshd %r22,%r29,%r20 - ldws,ma 4(%r25),%r29 - stws,ma %r20,4(%r26) - addib,<> -1,%r24,L$loop - vshd %r29,%r22,%r20 - -L$0002: stws,ma %r20,4(%r26) - vshd %r0,%r29,%r20 - bv 0(%r2) - stw %r20,0(%r26) -L$0003: stws,ma %r20,4(%r26) -L$0004: vshd %r0,%r22,%r20 - bv 0(%r2) - stw %r20,0(%r26) - - .exit - .procend diff --git a/sysdeps/hppa/setjmp.S b/sysdeps/hppa/setjmp.S deleted file mode 100644 index f13c0a8907..0000000000 --- a/sysdeps/hppa/setjmp.S +++ /dev/null @@ -1,73 +0,0 @@ -/* setjmp for HPPA. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#define _ASM -#define _SETJMP_H -#include - - - .text - .align 4 - .import __sigjmp_save, code - .globl __sigsetjmp - .export __sigsetjmp, code - .proc - .callinfo -__sigsetjmp: - stw %r3, 0(%r26) - /* This padding exists for unknown historical reasons. */ - /* 4 - 4 bytes of padding. */ - stw %r4, 8(%r26) - stw %r5, 12(%r26) - stw %r6, 16(%r26) - stw %r7, 20(%r26) - stw %r8, 24(%r26) - stw %r9, 28(%r26) - stw %r10, 32(%r26) - stw %r11, 36(%r26) - stw %r12, 40(%r26) - stw %r13, 44(%r26) - stw %r14, 48(%r26) - stw %r15, 52(%r26) - stw %r16, 56(%r26) - stw %r17, 60(%r26) - stw %r18, 64(%r26) - stw %r19, 68(%r26) - stw %r27, 72(%r26) - stw %r30, 76(%r26) - - stw %rp, 80(%r26) - /* This padding exists to ensure double alignment for fprs. */ - /* 84 - 4 bytes of padding. */ - ldo 88(%r26),%r1 - fstds,ma %fr12, 8(%r1) /* 88 */ - fstds,ma %fr13, 8(%r1) /* 96 */ - fstds,ma %fr14, 8(%r1) /* 104 */ - fstds,ma %fr15, 8(%r1) /* 112 */ - fstds,ma %fr16, 8(%r1) /* 120 */ - fstds,ma %fr17, 8(%r1) /* 128 */ - fstds,ma %fr18, 8(%r1) /* 136 */ - fstds,ma %fr19, 8(%r1) /* 144 */ - fstds,ma %fr20, 8(%r1) /* 152 */ - fstds %fr21, 0(%r1) /* 160 */ - /* Total of 168 bytes. */ - b __sigjmp_save - nop - .procend -hidden_def (__sigsetjmp) diff --git a/sysdeps/hppa/shlib-versions b/sysdeps/hppa/shlib-versions deleted file mode 100644 index 34e9347125..0000000000 --- a/sysdeps/hppa/shlib-versions +++ /dev/null @@ -1 +0,0 @@ -libgcc_s=4 diff --git a/sysdeps/hppa/sotruss-lib.c b/sysdeps/hppa/sotruss-lib.c deleted file mode 100644 index 0539fac53a..0000000000 --- a/sysdeps/hppa/sotruss-lib.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Override generic sotruss-lib.c to define actual functions for HP-PARISC. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define HAVE_ARCH_PLTENTER -#define HAVE_ARCH_PLTEXIT - -#include - -ElfW(Addr) -la_hppa_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - La_hppa_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - print_enter (refcook, defcook, symname, - regs->lr_reg[0], regs->lr_reg[1], regs->lr_reg[2], - *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -la_hppa_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, - const struct La_hppa_regs *inregs, - struct La_hppa_retval *outregs, const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_r28); - - return 0; -} diff --git a/sysdeps/hppa/stackinfo.h b/sysdeps/hppa/stackinfo.h deleted file mode 100644 index 83b1da1fb5..0000000000 --- a/sysdeps/hppa/stackinfo.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK is - * present, but it is presumed absent. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X) - -/* On PA the stack grows up. */ -#define _STACK_GROWS_UP 1 - -#endif /* stackinfo.h */ diff --git a/sysdeps/hppa/start.S b/sysdeps/hppa/start.S deleted file mode 100644 index 5db1ba960b..0000000000 --- a/sysdeps/hppa/start.S +++ /dev/null @@ -1,157 +0,0 @@ -/* ELF startup code for HPPA. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - .import main, code - .import $global$, data - .import __libc_start_main, code - .import __libc_csu_fini, code - .import __libc_csu_init, code - - /* Have the linker create plabel words so we get PLABEL32 - relocs and not 21/14. The use of 21/14 relocs is only - supported in the latest dynamic linker. */ -#ifdef SHARED - .section .data.rel.ro,"aw",@progbits -#else - .section .rodata,"a",@progbits -#endif - .align 4 -.Lpmain: - .word P%main -.Lp__libc_start_main: - .word P%__libc_start_main -.Lp__libc_csu_fini: - .word P%__libc_csu_fini -.Lp__libc_csu_init: - .word P%__libc_csu_init -#ifdef SHARED -.Lp__global: - .word $global$ -#endif - - .text - .align 4 - .globl _start - .export _start, ENTRY - .type _start,@function -_start: - /* At entry to the function we have: - - r26 - Unused - r25 - argc - r24 - argv - r23 - False _dl_fini plabel address - - This function is called from the lower half of RTLD_START. - - The call to __libc_start_main expects: - - 1. r26 - Application main - 2. r25 - argc - 3. r24 - argv - 4. r23 - __libc_csu_init - 5. sp-52 - __libc_csu_fini - 6. sp-56 - rtld_fini - 7. sp-60 - stackend */ - - .proc - .callinfo - /* Clear previous-sp. */ - stw %r0, -4(%sp) - /* Setup the stack and frame. */ - stw %rp, -20(%sp) - ldo 64(%sp), %sp - stw %sp, -4(%sp) - stw %r19, -32(%sp) - - /* argc and argv should be in 25 and 24 (2nd and 3rd argument) */ - /* void (*rtld_fini) (void) (6th argument) */ - stw %r23, -56(%sp) - /* Need to setup 1, 4, 5, and 7th arguments */ - -#ifdef SHARED - /* load main (1st argument) */ - addil LT'.Lpmain, %r19 - ldw RT'.Lpmain(%r1), %r26 - ldw 0(%r26),%r26 - /* void (*init) (void) (4th argument) */ - addil LT'.Lp__libc_csu_init, %r19 - ldw RT'.Lp__libc_csu_init(%r1), %r23 - ldw 0(%r23), %r23 - /* void (*fini) (void) (5th argument) */ - addil LT'.Lp__libc_csu_fini, %r19 - ldw RT'.Lp__libc_csu_fini(%r1), %r22 - ldw 0(%r22), %r22 -#else - /* load main (1st argument) */ - ldil LR'.Lpmain, %r26 - ldw RR'.Lpmain(%r26), %r26 - /* void (*init) (void) (4th argument) */ - ldil LR'.Lp__libc_csu_init, %r23 - ldw RR'.Lp__libc_csu_init(%r23), %r23 - /* void (*fini) (void) (5th argument) */ - ldil LR'.Lp__libc_csu_fini, %r22 - ldw RR'.Lp__libc_csu_fini(%r22), %r22 -#endif - /* Store 5th argument */ - stw %r22, -52(%sp) - /* void *stack_end (7th argument) */ - stw %sp, -60(%sp) - -#ifdef SHARED - /* load global */ - addil LT'.Lp__global, %r19 - ldw RT'.Lp__global(%r1), %dp - ldw 0(%dp), %dp -#else - /* load global */ - ldil L%$global$, %dp - ldo R%$global$(%dp), %dp -#endif - bl __libc_start_main,%r2 - nop - /* die horribly if it returned (it shouldn't) */ - iitlbp %r0,(%sr0,%r0) - nop - - .procend - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start diff --git a/sysdeps/hppa/sub_n.S b/sysdeps/hppa/sub_n.S deleted file mode 100644 index 4104b70806..0000000000 --- a/sysdeps/hppa/sub_n.S +++ /dev/null @@ -1,58 +0,0 @@ -;! HP-PA __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -;! store difference in a third limb vector. - -;! Copyright (C) 1992-2017 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP Library is distributed in the hope that it will be useful, but -;! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -;! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! . - - -;! INPUT PARAMETERS -;! res_ptr gr26 -;! s1_ptr gr25 -;! s2_ptr gr24 -;! size gr23 - -;! One might want to unroll this as for other processors, but it turns -;! out that the data cache contention after a store makes such -;! unrolling useless. We can't come under 5 cycles/limb anyway. - - .text - .export __mpn_sub_n -__mpn_sub_n: - .proc - .callinfo frame=0,no_calls - .entry - - ldws,ma 4(%r25),%r21 - ldws,ma 4(%r24),%r20 - - addib,= -1,%r23,L$end ;! check for (SIZE == 1) - sub %r21,%r20,%r28 ;! subtract first limbs ignoring cy - -L$loop: ldws,ma 4(%r25),%r21 - ldws,ma 4(%r24),%r20 - stws,ma %r28,4(%r26) - addib,<> -1,%r23,L$loop - subb %r21,%r20,%r28 - -L$end: stws %r28,0(%r26) - addc %r0,%r0,%r28 - bv 0(%r2) - subi 1,%r28,%r28 - - .exit - .procend diff --git a/sysdeps/hppa/sysdep.h b/sysdeps/hppa/sysdep.h deleted file mode 100644 index 47634f747a..0000000000 --- a/sysdeps/hppa/sysdep.h +++ /dev/null @@ -1,74 +0,0 @@ -/* Assembler macros for HP/PA. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper, , August 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#undef ASM_LINE_SEP -#define ASM_LINE_SEP ! - -#ifdef __ASSEMBLER__ - -/* Syntactic details of assembler. */ - -#define ALIGNARG(log2) log2 - - -/* Define an entry point visible from C. - - There is currently a bug in gdb which prevents us from specifying - incomplete stabs information. Fake some entries here which specify - the current source file. */ -#define ENTRY(name) \ - .SPACE $TEXT$ ASM_LINE_SEP \ - .SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY ASM_LINE_SEP \ - .align ALIGNARG(4) ASM_LINE_SEP \ - .NSUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY ASM_LINE_SEP \ - .EXPORT C_SYMBOL_NAME(name),ENTRY,PRIV_LEV=3,ARGW0=GR,RTNVAL=GR ASM_LINE_SEP\ - C_LABEL(name) \ - CALL_MCOUNT - -#undef END -#define END(name) \ - .PROCEND - -/* GCC does everything for us. */ -#ifdef PROF -#define CALL_MCOUNT -#else -#define CALL_MCOUNT /* Do nothing. */ -#endif - -#define PSEUDO(name, syscall_name, args) \ - ENTRY (name) \ - DO_CALL (syscall_name, args) - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - END (name) - -#undef JUMPTARGET -#define JUMPTARGET(name) name -#define SYSCALL_PIC_SETUP /* Nothing. */ - -/* Local label name for asm code. */ -#ifndef L -#define L(name) name -#endif - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/hppa/tininess.h b/sysdeps/hppa/tininess.h deleted file mode 100644 index 1db37790f8..0000000000 --- a/sysdeps/hppa/tininess.h +++ /dev/null @@ -1 +0,0 @@ -#define TININESS_AFTER_ROUNDING 1 diff --git a/sysdeps/hppa/tls-macros.h b/sysdeps/hppa/tls-macros.h deleted file mode 100644 index 38edb1b72c..0000000000 --- a/sysdeps/hppa/tls-macros.h +++ /dev/null @@ -1,114 +0,0 @@ -/* TLS Access Macros for HP PARISC Linux */ - -/* HPPA Local Exec TLS access. */ -#define TLS_LE(x) \ - ({ int * __result; \ - unsigned long __tmp; \ - asm ( \ - " mfctl %%cr27, %1\n" \ - " addil LR'" #x "-$tls_leoff$, %1\n" \ - " ldo RR'" #x "-$tls_leoff$(%%r1), %0\n" \ - : "=r" (__result), "=r" (__tmp) \ - : \ - : "r1" ); \ - __result; \ - }) - -/* HPPA Initial Exec TLS access. */ -#ifdef PIC -# define TLS_IE(x) \ - ({ int * __result; \ - unsigned long __tmp, __tmp2; \ - asm ( \ - " mfctl %%cr27, %1\n" \ - " addil LT'" #x "-$tls_ieoff$, %%r19\n" \ - " ldw RT'" #x "-$tls_ieoff$(%%r1), %2\n" \ - " add %1, %2, %0\n" \ - : "=r" (__result), "=r" (__tmp), "=r" (__tmp2) \ - : \ - : "r1" ); \ - __result; \ - }) -#else -# define TLS_IE(x) \ - ({ int * __result; \ - unsigned long __tmp, __tmp2; \ - asm ( \ - " mfctl %%cr27, %1\n" \ - " addil LR'" #x "-$tls_ieoff$, %%r27\n" \ - " ldw RR'" #x "-$tls_ieoff$(%%r1), %2\n" \ - " add %1, %2, %0\n" \ - : "=r" (__result), "=r" (__tmp), "=r" (__tmp2) \ - : \ - : "r1" ); \ - __result; \ - }) -#endif - -#ifdef PIC -/* HPPA Local Dynamic TLS access. */ -# define TLS_LD(x) \ - ({ int * __result; \ - asm ( \ - " copy %%r19, %%r4\n" \ - " addil LT'" #x "-$tls_ldidx$, %%r19\n" \ - " bl __tls_get_addr, %%r2\n" \ - " ldo RT'" #x "-$tls_ldidx$(%%r1), %%r26\n" \ - " addil LR'" #x "-$tls_dtpoff$, %%r28\n" \ - " ldo RR'" #x "-$tls_dtpoff$(%%r1), %0\n" \ - " copy %%r4, %%r19\n" \ - : "=r" (__result) \ - : \ - : "r1", "r2", "r4", "r20", "r21", "r22", "r23", "r24", \ - "r25", "r26", "r28", "r29", "r31" ); \ - __result; \ - }) -#else -# define TLS_LD(x) \ - ({ int * __result; \ - asm ( \ - " addil LR'" #x "-$tls_ldidx$, %%r27\n" \ - " bl __tls_get_addr, %%r2\n" \ - " ldo RR'" #x "-$tls_ldidx$(%%r1), %%r26\n" \ - " addil LR'" #x "-$tls_dtpoff$, %%r28\n" \ - " ldo RR'" #x "-$tls_dtpoff$(%%r1), %0\n" \ - : "=r" (__result) \ - : \ - : "r1", "r2", "r20", "r21", "r22", "r23", "r24", \ - "r25", "r26", "r28", "r29", "r31" ); \ - __result; \ - }) -#endif - -/* HPPA General Dynamic TLS access. */ -#ifdef PIC -# define TLS_GD(x) \ - ({ int * __result; \ - asm ( \ - " copy %%r19, %%r4\n" \ - " addil LT'" #x "-$tls_gdidx$, %%r19\n" \ - " bl __tls_get_addr, %%r2\n" \ - " ldo RT'" #x "-$tls_gdidx$(%%r1), %%r26\n" \ - " copy %%r28, %0\n" \ - " copy %%r4, %%r19\n" \ - : "=r" (__result) \ - : \ - : "r1", "r2", "r4", "r20", "r21", "r22", "r23", "r24", \ - "r25", "r26", "r28", "r29", "r31" ); \ - __result; \ - }) -#else -# define TLS_GD(x) \ - ({ int * __result; \ - asm ( \ - " addil LR'" #x "-$tls_gdidx$, %%r27\n" \ - " bl __tls_get_addr, %%r2\n" \ - " ldo RR'" #x "-$tls_gdidx$(%%r1), %%r26\n" \ - " copy %%r28, %0\n" \ - : "=r" (__result) \ - : \ - : "r1", "r2", "r20", "r21", "r22", "r23", "r24", \ - "r25", "r26", "r28", "r29", "r31" ); \ - __result; \ - }) -#endif diff --git a/sysdeps/hppa/tst-audit.h b/sysdeps/hppa/tst-audit.h deleted file mode 100644 index 2d86563ffe..0000000000 --- a/sysdeps/hppa/tst-audit.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. HP-PARISC version. - - Copyright (C) 2006-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define pltenter la_hppa_gnu_pltenter -#define pltexit la_hppa_gnu_pltexit -#define La_regs La_hppa_regs -#define La_retval La_hppa_retval -#define int_retval lrv_r28 diff --git a/sysdeps/hppa/udiv_qrnnd.S b/sysdeps/hppa/udiv_qrnnd.S deleted file mode 100644 index 14a673a9c0..0000000000 --- a/sysdeps/hppa/udiv_qrnnd.S +++ /dev/null @@ -1,285 +0,0 @@ -;! HP-PA __udiv_qrnnd division support, used from longlong.h. -;! This version runs fast on pre-PA7000 CPUs. - -;! Copyright (C) 1993-2017 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP Library is distributed in the hope that it will be useful, but -;! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -;! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! . - - -;! INPUT PARAMETERS -;! rem_ptr gr26 -;! n1 gr25 -;! n0 gr24 -;! d gr23 - -;! The code size is a bit excessive. We could merge the last two ds;addc -;! sequences by simply moving the "bb,< Odd" instruction down. The only -;! trouble is the FFFFFFFF code that would need some hacking. - - .text - .export __udiv_qrnnd -__udiv_qrnnd: - .proc - .callinfo frame=0,no_calls - .entry - - comb,< %r23,%r0,L$largedivisor - sub %r0,%r23,%r1 ;! clear cy as side-effect - ds %r0,%r1,%r0 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r28 - ds %r25,%r23,%r25 - comclr,>= %r25,%r0,%r0 - addl %r25,%r23,%r25 - stws %r25,0(%r26) - bv 0(%r2) - addc %r28,%r28,%r28 - -L$largedivisor: - extru %r24,31,1,%r20 ;! r20 = n0 & 1 - bb,< %r23,31,L$odd - extru %r23,30,31,%r22 ;! r22 = d >> 1 - shd %r25,%r24,1,%r24 ;! r24 = new n0 - extru %r25,30,31,%r25 ;! r25 = new n1 - sub %r0,%r22,%r21 - ds %r0,%r21,%r0 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - comclr,>= %r25,%r0,%r0 - addl %r25,%r22,%r25 - sh1addl %r25,%r20,%r25 - stws %r25,0(%r26) - bv 0(%r2) - addc %r24,%r24,%r28 - -L$odd: addib,sv,n 1,%r22,L$FF.. ;! r22 = (d / 2 + 1) - shd %r25,%r24,1,%r24 ;! r24 = new n0 - extru %r25,30,31,%r25 ;! r25 = new n1 - sub %r0,%r22,%r21 - ds %r0,%r21,%r0 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r28 - comclr,>= %r25,%r0,%r0 - addl %r25,%r22,%r25 - sh1addl %r25,%r20,%r25 -;! We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25 - add,nuv %r28,%r25,%r25 - addl %r25,%r1,%r25 - addc %r0,%r28,%r28 - sub,<< %r25,%r23,%r0 - addl %r25,%r1,%r25 - stws %r25,0(%r26) - bv 0(%r2) - addc %r0,%r28,%r28 - -;! This is just a special case of the code above. -;! We come here when d == 0xFFFFFFFF -L$FF..: add,uv %r25,%r24,%r24 - sub,<< %r24,%r23,%r0 - ldo 1(%r24),%r24 - stws %r24,0(%r26) - bv 0(%r2) - addc %r0,%r25,%r28 - - .exit - .procend diff --git a/sysdeps/i386/Implies b/sysdeps/i386/Implies deleted file mode 100644 index 20b2dffc29..0000000000 --- a/sysdeps/i386/Implies +++ /dev/null @@ -1,5 +0,0 @@ -x86 -wordsize-32 -ieee754/ldbl-96 -ieee754/dbl-64 -ieee754/flt-32 diff --git a/sysdeps/i386/Makefile b/sysdeps/i386/Makefile deleted file mode 100644 index e30e1339f0..0000000000 --- a/sysdeps/i386/Makefile +++ /dev/null @@ -1,103 +0,0 @@ -# The mpn functions need a #define for asm syntax flavor. -# Every i386 port in use uses gas syntax (I think). -asm-CPPFLAGS += -DGAS_SYNTAX - -# The i386 `long double' is a distinct type we support. -long-double-fcts = yes - -ifeq ($(subdir),string) -sysdep_routines += cacheinfo -endif - -ifeq ($(subdir),gmon) -sysdep_routines += i386-mcount -endif - -ifeq ($(subdir),elf) -CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused -CFLAGS-dl-load.c += -Wno-unused -CFLAGS-dl-reloc.c += -Wno-unused -endif - -ifeq ($(subdir),debug) -CFLAGS-backtrace.c += -fexceptions -endif - -# Most of the glibc routines don't ever call user defined callbacks -# nor use any FPU or SSE* and as such don't need bigger %esp alignment -# than 4 bytes. -# Lots of routines in math will use FPU, so make math subdir an exception -# here. -# In gcc 4.6 (and maybe earlier?) giving -mpreferred-stack-boundary=2 is -# an error, so don't try to reduce it here like we used to. We still -# explicit set -mpreferred-stack-boundary=4 the places where it matters, -# in case an older compiler defaulted to 2. -ifeq ($(subdir),math) -sysdep-CFLAGS += -mpreferred-stack-boundary=4 -else -ifeq ($(subdir),csu) -sysdep-CFLAGS += -mpreferred-stack-boundary=4 -gen-as-const-headers += link-defines.sym -else -# Likewise, any function which calls user callbacks -uses-callbacks += -mpreferred-stack-boundary=4 -# Likewise, any stack alignment tests -stack-align-test-flags += -malign-double -mpreferred-stack-boundary=4 -endif -endif - -# And a couple of other routines -ifeq ($(subdir),stdlib) -CFLAGS-exit.c += -mpreferred-stack-boundary=4 -CFLAGS-cxa_finalize.c += -mpreferred-stack-boundary=4 -endif -ifeq ($(subdir),elf) -CFLAGS-dl-init.c += -mpreferred-stack-boundary=4 -CFLAGS-dl-fini.c += -mpreferred-stack-boundary=4 -CFLAGS-dl-open.c += -mpreferred-stack-boundary=4 -CFLAGS-dl-close.c += -mpreferred-stack-boundary=4 -CFLAGS-dl-error.c += -mpreferred-stack-boundary=4 -endif -ifeq ($(subdir),dlfcn) -CFLAGS-dlopen.c += -mpreferred-stack-boundary=4 -CFLAGS-dlopenold.c += -mpreferred-stack-boundary=4 -CFLAGS-dlclose.c += -mpreferred-stack-boundary=4 -CFLAGS-dlerror.c += -mpreferred-stack-boundary=4 -endif - -ifneq (,$(filter -mno-tls-direct-seg-refs,$(CFLAGS))) -defines += -DNO_TLS_DIRECT_SEG_REFS -endif - -ifeq ($(subdir),elf) -sysdep-dl-routines += tlsdesc dl-tlsdesc - -tests += tst-audit3 -modules-names += tst-auditmod3a tst-auditmod3b - -$(objpfx)tst-audit3: $(objpfx)tst-auditmod3a.so -$(objpfx)tst-audit3.out: $(objpfx)tst-auditmod3b.so -tst-audit3-ENV = LD_AUDIT=$(objpfx)tst-auditmod3b.so -endif - -ifeq ($(subdir),csu) -gen-as-const-headers += tlsdesc.sym -endif - -# Make sure no code in ld.so uses mm/xmm/ymm/zmm registers on i386 since -# the first 3 mm/xmm/ymm/zmm registers are used to pass vector parameters -# which must be preserved. -# With SSE disabled, ensure -fpmath is not set to use sse either. -rtld-CFLAGS += -mno-sse -mno-mmx -mfpmath=387 -ifeq ($(subdir),elf) -CFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\ - $(rtld-CFLAGS)) - -tests-special += $(objpfx)tst-ld-sse-use.out -$(objpfx)tst-ld-sse-use.out: ../sysdeps/i386/tst-ld-sse-use.sh $(objpfx)ld.so - @echo "Checking ld.so for SSE register use. This will take a few seconds..." - $(BASH) $< $(objpfx) '$(NM)' '$(OBJDUMP)' '$(READELF)' > $@; \ - $(evaluate-test) -else -CFLAGS-.os += $(if $(filter rtld-%.os,$(@F)), $(rtld-CFLAGS)) -endif diff --git a/sysdeps/i386/Versions b/sysdeps/i386/Versions deleted file mode 100644 index 7be44aad7a..0000000000 --- a/sysdeps/i386/Versions +++ /dev/null @@ -1,35 +0,0 @@ -ld { - GLIBC_2.3 { - # The alternative i386 runtime interface to TLS. - ___tls_get_addr; - } -} -libc { - GLIBC_2.0 { - # Functions from libgcc. - __divdi3; __moddi3; __udivdi3; __umoddi3; - } - GLIBC_2.1 { - # global variable - _fp_hw; - } - GLIBC_2.1.1 { - # extern inline functions used by - __memcpy_c; __memset_cc; __memset_cg; __memset_gg; - __memcpy_by2; __memcpy_by4; __memcpy_g; __mempcpy_by2; __mempcpy_by4; - __mempcpy_byn; __memset_ccn_by2; __memset_ccn_by4; __memset_gcn_by2; - __memset_gcn_by4; __stpcpy_g; __strcat_c; __strcat_g; __strchr_c; - __strchr_g; __strchrnul_c; __strchrnul_g; __strcmp_gg; __strcpy_g; - __strcspn_c1; __strcspn_cg; __strcspn_g; __strlen_g; __strncat_g; - __strncmp_g; __strncpy_by2; __strncpy_by4; __strncpy_byn; __strncpy_gg; - __strpbrk_cg; __strpbrk_g; __strrchr_c; __strrchr_g; __strspn_c1; - __strspn_cg; __strspn_g; __strstr_cg; __strstr_g; - } -} -libm { - GLIBC_2.1 { - # A generic bug got this omitted from other configurations' version - # sets, but we always had it. - exp2l; - } -} diff --git a/sysdeps/i386/____longjmp_chk.S b/sysdeps/i386/____longjmp_chk.S deleted file mode 100644 index 0910861a9d..0000000000 --- a/sysdeps/i386/____longjmp_chk.S +++ /dev/null @@ -1 +0,0 @@ -#error "OS-specific version needed" diff --git a/sysdeps/i386/__longjmp.S b/sysdeps/i386/__longjmp.S deleted file mode 100644 index 3719763cd6..0000000000 --- a/sysdeps/i386/__longjmp.S +++ /dev/null @@ -1,72 +0,0 @@ -/* longjmp for i386. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - .text -ENTRY (__longjmp) -#ifdef PTR_DEMANGLE - movl 4(%esp), %eax /* User's jmp_buf in %eax. */ - - /* Save the return address now. */ - movl (JB_PC*4)(%eax), %edx - /* Get the stack pointer. */ - movl (JB_SP*4)(%eax), %ecx - PTR_DEMANGLE (%edx) - PTR_DEMANGLE (%ecx) - LIBC_PROBE (longjmp, 3, 4@%eax, -4@8(%esp), 4@%edx) - cfi_def_cfa(%eax, 0) - cfi_register(%eip, %edx) - cfi_register(%esp, %ecx) - cfi_offset(%ebx, JB_BX*4) - cfi_offset(%esi, JB_SI*4) - cfi_offset(%edi, JB_DI*4) - cfi_offset(%ebp, JB_BP*4) - /* Restore registers. */ - movl (JB_BX*4)(%eax), %ebx - movl (JB_SI*4)(%eax), %esi - movl (JB_DI*4)(%eax), %edi - movl (JB_BP*4)(%eax), %ebp - cfi_restore(%ebx) - cfi_restore(%esi) - cfi_restore(%edi) - cfi_restore(%ebp) - - LIBC_PROBE (longjmp_target, 3, 4@%eax, -4@8(%esp), 4@%edx) - movl 8(%esp), %eax /* Second argument is return value. */ - movl %ecx, %esp -#else - movl 4(%esp), %ecx /* User's jmp_buf in %ecx. */ - movl 8(%esp), %eax /* Second argument is return value. */ - /* Save the return address now. */ - movl (JB_PC*4)(%ecx), %edx - LIBC_PROBE (longjmp, 3, 4@%ecx, -4@%eax, 4@%edx) - /* Restore registers. */ - movl (JB_BX*4)(%ecx), %ebx - movl (JB_SI*4)(%ecx), %esi - movl (JB_DI*4)(%ecx), %edi - movl (JB_BP*4)(%ecx), %ebp - movl (JB_SP*4)(%ecx), %esp - LIBC_PROBE (longjmp_target, 3, 4@%ecx, -4@%ecx, 4@%edx) -#endif - /* Jump to saved PC. */ - jmp *%edx -END (__longjmp) diff --git a/sysdeps/i386/abort-instr.h b/sysdeps/i386/abort-instr.h deleted file mode 100644 index 810f10379b..0000000000 --- a/sysdeps/i386/abort-instr.h +++ /dev/null @@ -1,2 +0,0 @@ -/* An instruction which should crash any program is `hlt'. */ -#define ABORT_INSTRUCTION asm ("hlt") diff --git a/sysdeps/i386/add_n.S b/sysdeps/i386/add_n.S deleted file mode 100644 index c2923094a8..0000000000 --- a/sysdeps/i386/add_n.S +++ /dev/null @@ -1,111 +0,0 @@ -/* Add two limb vectors of the same length > 0 and store sum in a third - limb vector. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define PARMS 4+8 /* space for 2 saved regs */ -#define RES PARMS -#define S1 RES+4 -#define S2 S1+4 -#define SIZE S2+4 - - .text -ENTRY (__mpn_add_n) - - pushl %edi - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - - movl RES(%esp),%edi - cfi_rel_offset (edi, 4) - movl S1(%esp),%esi - cfi_rel_offset (esi, 0) - movl S2(%esp),%edx - movl SIZE(%esp),%ecx - movl %ecx,%eax - shrl $3,%ecx /* compute count for unrolled loop */ - negl %eax - andl $7,%eax /* get index where to start loop */ - jz L(oop) /* necessary special case for 0 */ - incl %ecx /* adjust loop count */ - shll $2,%eax /* adjustment for pointers... */ - subl %eax,%edi /* ... since they are offset ... */ - subl %eax,%esi /* ... by a constant when we ... */ - subl %eax,%edx /* ... enter the loop */ - shrl $2,%eax /* restore previous value */ -#ifdef PIC -/* Calculate start address in loop for PIC. Due to limitations in some - assemblers, Loop-L0-3 cannot be put into the leal */ - call L(0) - cfi_adjust_cfa_offset (4) -L(0): leal (%eax,%eax,8),%eax - addl (%esp),%eax - addl $(L(oop)-L(0)-3),%eax - addl $4,%esp - cfi_adjust_cfa_offset (-4) -#else -/* Calculate start address in loop for non-PIC. */ - leal (L(oop) - 3)(%eax,%eax,8),%eax -#endif - jmp *%eax /* jump into loop */ - ALIGN (3) -L(oop): movl (%esi),%eax - adcl (%edx),%eax - movl %eax,(%edi) - movl 4(%esi),%eax - adcl 4(%edx),%eax - movl %eax,4(%edi) - movl 8(%esi),%eax - adcl 8(%edx),%eax - movl %eax,8(%edi) - movl 12(%esi),%eax - adcl 12(%edx),%eax - movl %eax,12(%edi) - movl 16(%esi),%eax - adcl 16(%edx),%eax - movl %eax,16(%edi) - movl 20(%esi),%eax - adcl 20(%edx),%eax - movl %eax,20(%edi) - movl 24(%esi),%eax - adcl 24(%edx),%eax - movl %eax,24(%edi) - movl 28(%esi),%eax - adcl 28(%edx),%eax - movl %eax,28(%edi) - leal 32(%edi),%edi - leal 32(%esi),%esi - leal 32(%edx),%edx - decl %ecx - jnz L(oop) - - sbbl %eax,%eax - negl %eax - - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (__mpn_add_n) diff --git a/sysdeps/i386/addmul_1.S b/sysdeps/i386/addmul_1.S deleted file mode 100644 index ad90ea53e5..0000000000 --- a/sysdeps/i386/addmul_1.S +++ /dev/null @@ -1,86 +0,0 @@ -/* i80386 __mpn_addmul_1 -- Multiply a limb vector with a limb and add - the result to a second limb vector. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define PARMS 4+16 /* space for 4 saved regs */ -#define RES PARMS -#define S1 RES+4 -#define SIZE S1+4 -#define S2LIMB SIZE+4 - -#define res_ptr edi -#define s1_ptr esi -#define sizeP ecx -#define s2_limb ebx - - .text -ENTRY (__mpn_addmul_1) - - pushl %res_ptr - cfi_adjust_cfa_offset (4) - pushl %s1_ptr - cfi_adjust_cfa_offset (4) - pushl %ebp - cfi_adjust_cfa_offset (4) - pushl %s2_limb - cfi_adjust_cfa_offset (4) - - movl RES(%esp), %res_ptr - cfi_rel_offset (res_ptr, 12) - movl S1(%esp), %s1_ptr - cfi_rel_offset (s1_ptr, 8) - movl SIZE(%esp), %sizeP - movl S2LIMB(%esp), %s2_limb - cfi_rel_offset (s2_limb, 0) - leal (%res_ptr,%sizeP,4), %res_ptr - leal (%s1_ptr,%sizeP,4), %s1_ptr - negl %sizeP - xorl %ebp, %ebp - cfi_rel_offset (ebp, 4) - ALIGN (3) -L(oop): - movl (%s1_ptr,%sizeP,4), %eax - mull %s2_limb - addl %ebp, %eax - adcl $0, %edx - addl %eax, (%res_ptr,%sizeP,4) - adcl $0, %edx - movl %edx, %ebp - - incl %sizeP - jnz L(oop) - movl %ebp, %eax - - popl %s2_limb - cfi_adjust_cfa_offset (-4) - cfi_restore (s2_limb) - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %s1_ptr - cfi_adjust_cfa_offset (-4) - cfi_restore (s1_ptr) - popl %res_ptr - cfi_adjust_cfa_offset (-4) - cfi_restore (res_ptr) - - ret -END (__mpn_addmul_1) diff --git a/sysdeps/i386/asm-syntax.h b/sysdeps/i386/asm-syntax.h deleted file mode 100644 index a992da2dd1..0000000000 --- a/sysdeps/i386/asm-syntax.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Definitions for x86 syntax variations. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in the GNU MP Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#undef ALIGN -#define ALIGN(log) .align 1<, 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include /* For tcbhead_t. */ - - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int16_t atomic16_t; -typedef uint16_t uatomic16_t; -typedef int_fast16_t atomic_fast16_t; -typedef uint_fast16_t uatomic_fast16_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - - -#ifndef LOCK_PREFIX -# ifdef UP -# define LOCK_PREFIX /* nothing */ -# else -# define LOCK_PREFIX "lock;" -# endif -#endif - -#define __HAVE_64B_ATOMICS 0 -#define USE_ATOMIC_COMPILER_BUILTINS 0 -#define ATOMIC_EXCHANGE_USES_CAS 0 - - -#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ - __sync_val_compare_and_swap (mem, oldval, newval) -#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \ - (! __sync_bool_compare_and_swap (mem, oldval, newval)) - - -#define __arch_c_compare_and_exchange_val_8_acq(mem, newval, oldval) \ - ({ __typeof (*mem) ret; \ - __asm __volatile ("cmpl $0, %%gs:%P5\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tcmpxchgb %b2, %1" \ - : "=a" (ret), "=m" (*mem) \ - : "q" (newval), "m" (*mem), "0" (oldval), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - ret; }) - -#define __arch_c_compare_and_exchange_val_16_acq(mem, newval, oldval) \ - ({ __typeof (*mem) ret; \ - __asm __volatile ("cmpl $0, %%gs:%P5\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tcmpxchgw %w2, %1" \ - : "=a" (ret), "=m" (*mem) \ - : "r" (newval), "m" (*mem), "0" (oldval), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - ret; }) - -#define __arch_c_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - ({ __typeof (*mem) ret; \ - __asm __volatile ("cmpl $0, %%gs:%P5\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tcmpxchgl %2, %1" \ - : "=a" (ret), "=m" (*mem) \ - : "r" (newval), "m" (*mem), "0" (oldval), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - ret; }) - -/* XXX We do not really need 64-bit compare-and-exchange. At least - not in the moment. Using it would mean causing portability - problems since not many other 32-bit architectures have support for - such an operation. So don't define any code for now. If it is - really going to be used the code below can be used on Intel Pentium - and later, but NOT on i486. */ -#if 1 -# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - ({ __typeof (*mem) ret = *(mem); \ - abort (); \ - ret = (newval); \ - ret = (oldval); \ - ret; }) -# define __arch_c_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - ({ __typeof (*mem) ret = *(mem); \ - abort (); \ - ret = (newval); \ - ret = (oldval); \ - ret; }) -#else -# ifdef __PIC__ -# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - ({ __typeof (*mem) ret; \ - __asm __volatile ("xchgl %2, %%ebx\n\t" \ - LOCK_PREFIX "cmpxchg8b %1\n\t" \ - "xchgl %2, %%ebx" \ - : "=A" (ret), "=m" (*mem) \ - : "DS" (((unsigned long long int) (newval)) \ - & 0xffffffff), \ - "c" (((unsigned long long int) (newval)) >> 32), \ - "m" (*mem), "a" (((unsigned long long int) (oldval)) \ - & 0xffffffff), \ - "d" (((unsigned long long int) (oldval)) >> 32)); \ - ret; }) - -# define __arch_c_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - ({ __typeof (*mem) ret; \ - __asm __volatile ("xchgl %2, %%ebx\n\t" \ - "cmpl $0, %%gs:%P7\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tcmpxchg8b %1\n\t" \ - "xchgl %2, %%ebx" \ - : "=A" (ret), "=m" (*mem) \ - : "DS" (((unsigned long long int) (newval)) \ - & 0xffffffff), \ - "c" (((unsigned long long int) (newval)) >> 32), \ - "m" (*mem), "a" (((unsigned long long int) (oldval)) \ - & 0xffffffff), \ - "d" (((unsigned long long int) (oldval)) >> 32), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - ret; }) -# else -# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - ({ __typeof (*mem) ret; \ - __asm __volatile (LOCK_PREFIX "cmpxchg8b %1" \ - : "=A" (ret), "=m" (*mem) \ - : "b" (((unsigned long long int) (newval)) \ - & 0xffffffff), \ - "c" (((unsigned long long int) (newval)) >> 32), \ - "m" (*mem), "a" (((unsigned long long int) (oldval)) \ - & 0xffffffff), \ - "d" (((unsigned long long int) (oldval)) >> 32)); \ - ret; }) - -# define __arch_c_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - ({ __typeof (*mem) ret; \ - __asm __volatile ("cmpl $0, %%gs:%P7\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tcmpxchg8b %1" \ - : "=A" (ret), "=m" (*mem) \ - : "b" (((unsigned long long int) (newval)) \ - & 0xffffffff), \ - "c" (((unsigned long long int) (newval)) >> 32), \ - "m" (*mem), "a" (((unsigned long long int) (oldval)) \ - & 0xffffffff), \ - "d" (((unsigned long long int) (oldval)) >> 32), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - ret; }) -# endif -#endif - - -/* Note that we need no lock prefix. */ -#define atomic_exchange_acq(mem, newvalue) \ - ({ __typeof (*mem) result; \ - if (sizeof (*mem) == 1) \ - __asm __volatile ("xchgb %b0, %1" \ - : "=q" (result), "=m" (*mem) \ - : "0" (newvalue), "m" (*mem)); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile ("xchgw %w0, %1" \ - : "=r" (result), "=m" (*mem) \ - : "0" (newvalue), "m" (*mem)); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile ("xchgl %0, %1" \ - : "=r" (result), "=m" (*mem) \ - : "0" (newvalue), "m" (*mem)); \ - else \ - { \ - result = 0; \ - abort (); \ - } \ - result; }) - - -#define __arch_exchange_and_add_body(lock, pfx, mem, value) \ - ({ __typeof (*mem) __result; \ - __typeof (value) __addval = (value); \ - if (sizeof (*mem) == 1) \ - __asm __volatile (lock "xaddb %b0, %1" \ - : "=q" (__result), "=m" (*mem) \ - : "0" (__addval), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (lock "xaddw %w0, %1" \ - : "=r" (__result), "=m" (*mem) \ - : "0" (__addval), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (lock "xaddl %0, %1" \ - : "=r" (__result), "=m" (*mem) \ - : "0" (__addval), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else \ - { \ - __typeof (mem) __memp = (mem); \ - __typeof (*mem) __tmpval; \ - __result = *__memp; \ - do \ - __tmpval = __result; \ - while ((__result = pfx##_compare_and_exchange_val_64_acq \ - (__memp, __result + __addval, __result)) == __tmpval); \ - } \ - __result; }) - -#define atomic_exchange_and_add(mem, value) \ - __sync_fetch_and_add (mem, value) - -#define __arch_exchange_and_add_cprefix \ - "cmpl $0, %%gs:%P4\n\tje 0f\n\tlock\n0:\t" - -#define catomic_exchange_and_add(mem, value) \ - __arch_exchange_and_add_body (__arch_exchange_and_add_cprefix, __arch_c, \ - mem, value) - - -#define __arch_add_body(lock, pfx, mem, value) \ - do { \ - if (__builtin_constant_p (value) && (value) == 1) \ - atomic_increment (mem); \ - else if (__builtin_constant_p (value) && (value) == -1) \ - atomic_decrement (mem); \ - else if (sizeof (*mem) == 1) \ - __asm __volatile (lock "addb %b1, %0" \ - : "=m" (*mem) \ - : "iq" (value), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (lock "addw %w1, %0" \ - : "=m" (*mem) \ - : "ir" (value), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (lock "addl %1, %0" \ - : "=m" (*mem) \ - : "ir" (value), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else \ - { \ - __typeof (value) __addval = (value); \ - __typeof (mem) __memp = (mem); \ - __typeof (*mem) __oldval = *__memp; \ - __typeof (*mem) __tmpval; \ - do \ - __tmpval = __oldval; \ - while ((__oldval = pfx##_compare_and_exchange_val_64_acq \ - (__memp, __oldval + __addval, __oldval)) == __tmpval); \ - } \ - } while (0) - -#define atomic_add(mem, value) \ - __arch_add_body (LOCK_PREFIX, __arch, mem, value) - -#define __arch_add_cprefix \ - "cmpl $0, %%gs:%P3\n\tje 0f\n\tlock\n0:\t" - -#define catomic_add(mem, value) \ - __arch_add_body (__arch_add_cprefix, __arch_c, mem, value) - - -#define atomic_add_negative(mem, value) \ - ({ unsigned char __result; \ - if (sizeof (*mem) == 1) \ - __asm __volatile (LOCK_PREFIX "addb %b2, %0; sets %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "iq" (value), "m" (*mem)); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (LOCK_PREFIX "addw %w2, %0; sets %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "ir" (value), "m" (*mem)); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (LOCK_PREFIX "addl %2, %0; sets %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "ir" (value), "m" (*mem)); \ - else \ - abort (); \ - __result; }) - - -#define atomic_add_zero(mem, value) \ - ({ unsigned char __result; \ - if (sizeof (*mem) == 1) \ - __asm __volatile (LOCK_PREFIX "addb %b2, %0; setz %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "iq" (value), "m" (*mem)); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (LOCK_PREFIX "addw %w2, %0; setz %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "ir" (value), "m" (*mem)); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (LOCK_PREFIX "addl %2, %0; setz %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "ir" (value), "m" (*mem)); \ - else \ - abort (); \ - __result; }) - - -#define __arch_increment_body(lock, pfx, mem) \ - do { \ - if (sizeof (*mem) == 1) \ - __asm __volatile (lock "incb %b0" \ - : "=m" (*mem) \ - : "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (lock "incw %w0" \ - : "=m" (*mem) \ - : "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (lock "incl %0" \ - : "=m" (*mem) \ - : "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else \ - { \ - __typeof (mem) __memp = (mem); \ - __typeof (*mem) __oldval = *__memp; \ - __typeof (*mem) __tmpval; \ - do \ - __tmpval = __oldval; \ - while ((__oldval = pfx##_compare_and_exchange_val_64_acq \ - (__memp, __oldval + 1, __oldval)) == __tmpval); \ - } \ - } while (0) - -#define atomic_increment(mem) __arch_increment_body (LOCK_PREFIX, __arch, mem) - -#define __arch_increment_cprefix \ - "cmpl $0, %%gs:%P2\n\tje 0f\n\tlock\n0:\t" - -#define catomic_increment(mem) \ - __arch_increment_body (__arch_increment_cprefix, __arch_c, mem) - - -#define atomic_increment_and_test(mem) \ - ({ unsigned char __result; \ - if (sizeof (*mem) == 1) \ - __asm __volatile (LOCK_PREFIX "incb %0; sete %b1" \ - : "=m" (*mem), "=qm" (__result) \ - : "m" (*mem)); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (LOCK_PREFIX "incw %0; sete %w1" \ - : "=m" (*mem), "=qm" (__result) \ - : "m" (*mem)); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (LOCK_PREFIX "incl %0; sete %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "m" (*mem)); \ - else \ - abort (); \ - __result; }) - - -#define __arch_decrement_body(lock, pfx, mem) \ - do { \ - if (sizeof (*mem) == 1) \ - __asm __volatile (lock "decb %b0" \ - : "=m" (*mem) \ - : "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (lock "decw %w0" \ - : "=m" (*mem) \ - : "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (lock "decl %0" \ - : "=m" (*mem) \ - : "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else \ - { \ - __typeof (mem) __memp = (mem); \ - __typeof (*mem) __oldval = *__memp; \ - __typeof (*mem) __tmpval; \ - do \ - __tmpval = __oldval; \ - while ((__oldval = pfx##_compare_and_exchange_val_64_acq \ - (__memp, __oldval - 1, __oldval)) == __tmpval); \ - } \ - } while (0) - -#define atomic_decrement(mem) __arch_decrement_body (LOCK_PREFIX, __arch, mem) - -#define __arch_decrement_cprefix \ - "cmpl $0, %%gs:%P2\n\tje 0f\n\tlock\n0:\t" - -#define catomic_decrement(mem) \ - __arch_decrement_body (__arch_decrement_cprefix, __arch_c, mem) - - -#define atomic_decrement_and_test(mem) \ - ({ unsigned char __result; \ - if (sizeof (*mem) == 1) \ - __asm __volatile (LOCK_PREFIX "decb %b0; sete %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "m" (*mem)); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (LOCK_PREFIX "decw %w0; sete %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "m" (*mem)); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (LOCK_PREFIX "decl %0; sete %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "m" (*mem)); \ - else \ - abort (); \ - __result; }) - - -#define atomic_bit_set(mem, bit) \ - do { \ - if (sizeof (*mem) == 1) \ - __asm __volatile (LOCK_PREFIX "orb %b2, %0" \ - : "=m" (*mem) \ - : "m" (*mem), "iq" (1 << (bit))); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (LOCK_PREFIX "orw %w2, %0" \ - : "=m" (*mem) \ - : "m" (*mem), "ir" (1 << (bit))); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (LOCK_PREFIX "orl %2, %0" \ - : "=m" (*mem) \ - : "m" (*mem), "ir" (1 << (bit))); \ - else \ - abort (); \ - } while (0) - - -#define atomic_bit_test_set(mem, bit) \ - ({ unsigned char __result; \ - if (sizeof (*mem) == 1) \ - __asm __volatile (LOCK_PREFIX "btsb %3, %1; setc %0" \ - : "=q" (__result), "=m" (*mem) \ - : "m" (*mem), "ir" (bit)); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (LOCK_PREFIX "btsw %3, %1; setc %0" \ - : "=q" (__result), "=m" (*mem) \ - : "m" (*mem), "ir" (bit)); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (LOCK_PREFIX "btsl %3, %1; setc %0" \ - : "=q" (__result), "=m" (*mem) \ - : "m" (*mem), "ir" (bit)); \ - else \ - abort (); \ - __result; }) - - -#define atomic_spin_nop() asm ("rep; nop") - - -#define __arch_and_body(lock, mem, mask) \ - do { \ - if (sizeof (*mem) == 1) \ - __asm __volatile (lock "andb %b1, %0" \ - : "=m" (*mem) \ - : "iq" (mask), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (lock "andw %w1, %0" \ - : "=m" (*mem) \ - : "ir" (mask), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (lock "andl %1, %0" \ - : "=m" (*mem) \ - : "ir" (mask), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else \ - abort (); \ - } while (0) - -#define __arch_cprefix \ - "cmpl $0, %%gs:%P3\n\tje 0f\n\tlock\n0:\t" - -#define atomic_and(mem, mask) __arch_and_body (LOCK_PREFIX, mem, mask) - -#define catomic_and(mem, mask) __arch_and_body (__arch_cprefix, mem, mask) - - -#define __arch_or_body(lock, mem, mask) \ - do { \ - if (sizeof (*mem) == 1) \ - __asm __volatile (lock "orb %b1, %0" \ - : "=m" (*mem) \ - : "iq" (mask), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (lock "orw %w1, %0" \ - : "=m" (*mem) \ - : "ir" (mask), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (lock "orl %1, %0" \ - : "=m" (*mem) \ - : "ir" (mask), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else \ - abort (); \ - } while (0) - -#define atomic_or(mem, mask) __arch_or_body (LOCK_PREFIX, mem, mask) - -#define catomic_or(mem, mask) __arch_or_body (__arch_cprefix, mem, mask) - -/* We don't use mfence because it is supposedly slower due to having to - provide stronger guarantees (e.g., regarding self-modifying code). */ -#define atomic_full_barrier() \ - __asm __volatile (LOCK_PREFIX "orl $0, (%%esp)" ::: "memory") -#define atomic_read_barrier() __asm ("" ::: "memory") -#define atomic_write_barrier() __asm ("" ::: "memory") diff --git a/sysdeps/i386/backtrace.c b/sysdeps/i386/backtrace.c deleted file mode 100644 index ee8238d0ce..0000000000 --- a/sysdeps/i386/backtrace.c +++ /dev/null @@ -1,163 +0,0 @@ -/* Return backtrace of current program state. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -struct trace_arg -{ - void **array; - int cnt, size; - void *lastebp, *lastesp; -}; - -#ifdef SHARED -static _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *); -static _Unwind_Ptr (*unwind_getip) (struct _Unwind_Context *); -static _Unwind_Ptr (*unwind_getcfa) (struct _Unwind_Context *); -static _Unwind_Ptr (*unwind_getgr) (struct _Unwind_Context *, int); -static void *libgcc_handle; - -static void -init (void) -{ - libgcc_handle = __libc_dlopen ("libgcc_s.so.1"); - - if (libgcc_handle == NULL) - return; - - unwind_backtrace = __libc_dlsym (libgcc_handle, "_Unwind_Backtrace"); - unwind_getip = __libc_dlsym (libgcc_handle, "_Unwind_GetIP"); - unwind_getcfa = __libc_dlsym (libgcc_handle, "_Unwind_GetCFA"); - unwind_getgr = __libc_dlsym (libgcc_handle, "_Unwind_GetGR"); - if (unwind_getip == NULL || unwind_getgr == NULL || unwind_getcfa == NULL) - { - unwind_backtrace = NULL; - __libc_dlclose (libgcc_handle); - libgcc_handle = NULL; - } -} -#else -# define unwind_backtrace _Unwind_Backtrace -# define unwind_getip _Unwind_GetIP -# define unwind_getcfa _Unwind_GetCFA -# define unwind_getgr _Unwind_GetGR -#endif - -static _Unwind_Reason_Code -backtrace_helper (struct _Unwind_Context *ctx, void *a) -{ - struct trace_arg *arg = a; - - /* We are first called with address in the __backtrace function. - Skip it. */ - if (arg->cnt != -1) - arg->array[arg->cnt] = (void *) unwind_getip (ctx); - if (++arg->cnt == arg->size) - return _URC_END_OF_STACK; - - /* %ebp is DWARF2 register 5 on IA-32. */ - arg->lastebp = (void *) unwind_getgr (ctx, 5); - arg->lastesp = (void *) unwind_getcfa (ctx); - return _URC_NO_REASON; -} - - -/* This is a global variable set at program start time. It marks the - highest used stack address. */ -extern void *__libc_stack_end; - - -/* This is the stack layout we see with every stack frame - if not compiled without frame pointer. - - +-----------------+ +-----------------+ - %ebp -> | %ebp last frame--------> | %ebp last frame--->... - | | | | - | return address | | return address | - +-----------------+ +-----------------+ - - First try as far to get as far as possible using - _Unwind_Backtrace which handles -fomit-frame-pointer - as well, but requires .eh_frame info. Then fall back to - walking the stack manually. */ - -struct layout -{ - struct layout *ebp; - void *ret; -}; - - -int -__backtrace (void **array, int size) -{ - struct trace_arg arg = { .array = array, .size = size, .cnt = -1 }; - - if (size <= 0) - return 0; - -#ifdef SHARED - __libc_once_define (static, once); - - __libc_once (once, init); - if (unwind_backtrace == NULL) - return 0; -#endif - - unwind_backtrace (backtrace_helper, &arg); - - if (arg.cnt > 1 && arg.array[arg.cnt - 1] == NULL) - --arg.cnt; - else if (arg.cnt < size) - { - struct layout *ebp = (struct layout *) arg.lastebp; - - while (arg.cnt < size) - { - /* Check for out of range. */ - if ((void *) ebp < arg.lastesp || (void *) ebp > __libc_stack_end - || ((long) ebp & 3)) - break; - - array[arg.cnt++] = ebp->ret; - ebp = ebp->ebp; - } - } - return arg.cnt != -1 ? arg.cnt : 0; -} -weak_alias (__backtrace, backtrace) -libc_hidden_def (__backtrace) - - -#ifdef SHARED -/* Free all resources if necessary. */ -libc_freeres_fn (free_mem) -{ - unwind_backtrace = NULL; - if (libgcc_handle != NULL) - { - __libc_dlclose (libgcc_handle); - libgcc_handle = NULL; - } -} -#endif diff --git a/sysdeps/i386/bcopy.S b/sysdeps/i386/bcopy.S deleted file mode 100644 index 12b8ddb886..0000000000 --- a/sysdeps/i386/bcopy.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_MEMMOVE -#define USE_AS_BCOPY -#define MEMCPY bcopy -#include "memcpy.S" diff --git a/sysdeps/i386/bsd-_setjmp.S b/sysdeps/i386/bsd-_setjmp.S deleted file mode 100644 index 6496304946..0000000000 --- a/sysdeps/i386/bsd-_setjmp.S +++ /dev/null @@ -1,56 +0,0 @@ -/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. i386 version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 0)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include -#include -#include - -#define PARMS 4 /* no space for saved regs */ -#define JMPBUF PARMS -#define SIGMSK JMPBUF+4 - -ENTRY (_setjmp) - - xorl %eax, %eax - movl JMPBUF(%esp), %edx - - /* Save registers. */ - movl %ebx, (JB_BX*4)(%edx) - movl %esi, (JB_SI*4)(%edx) - movl %edi, (JB_DI*4)(%edx) - leal JMPBUF(%esp), %ecx /* Save SP as it will be after we return. */ -#ifdef PTR_MANGLE - PTR_MANGLE (%ecx) -#endif - movl %ecx, (JB_SP*4)(%edx) - movl 0(%esp), %ecx /* Save PC we are returning to now. */ - LIBC_PROBE (setjmp, 3, 4@%edx, -4@$0, 4@%ecx) -#ifdef PTR_MANGLE - PTR_MANGLE (%ecx) -#endif - movl %ecx, (JB_PC*4)(%edx) - movl %ebp, (JB_BP*4)(%edx) /* Save caller's frame pointer. */ - - movl %eax, JB_SIZE(%edx) /* No signal mask set. */ - ret -END (_setjmp) -libc_hidden_def (_setjmp) diff --git a/sysdeps/i386/bsd-setjmp.S b/sysdeps/i386/bsd-setjmp.S deleted file mode 100644 index 5710e1f42b..0000000000 --- a/sysdeps/i386/bsd-setjmp.S +++ /dev/null @@ -1,66 +0,0 @@ -/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. i386 version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include -#include -#include - -#define PARMS 4 /* no space for saved regs */ -#define JMPBUF PARMS -#define SIGMSK JMPBUF+4 - -ENTRY (setjmp) - /* Note that we have to use a non-exported symbol in the next - jump since otherwise gas will emit it as a jump through the - PLT which is what we cannot use here. */ - - movl JMPBUF(%esp), %eax - - /* Save registers. */ - movl %ebx, (JB_BX*4)(%eax) - movl %esi, (JB_SI*4)(%eax) - movl %edi, (JB_DI*4)(%eax) - leal JMPBUF(%esp), %ecx /* Save SP as it will be after we return. */ -#ifdef PTR_MANGLE - PTR_MANGLE (%ecx) -#endif - movl %ecx, (JB_SP*4)(%eax) - movl 0(%esp), %ecx /* Save PC we are returning to now. */ - LIBC_PROBE (setjmp, 3, 4@%eax, -4@$1, 4@%ecx) -#ifdef PTR_MANGLE - PTR_MANGLE (%ecx) -#endif - movl %ecx, (JB_PC*4)(%eax) - movl %ebp, (JB_BP*4)(%eax) /* Save caller's frame pointer. */ - - /* Call __sigjmp_save. */ - pushl $1 - cfi_adjust_cfa_offset (4) - pushl 8(%esp) - cfi_adjust_cfa_offset (4) - call __sigjmp_save - popl %ecx - cfi_adjust_cfa_offset (-4) - popl %edx - cfi_adjust_cfa_offset (-4) - ret -END (setjmp) diff --git a/sysdeps/i386/bzero.S b/sysdeps/i386/bzero.S deleted file mode 100644 index c8dd47b4da..0000000000 --- a/sysdeps/i386/bzero.S +++ /dev/null @@ -1,5 +0,0 @@ -#define USE_AS_BZERO -#define memset __bzero -#include "memset.S" - -weak_alias (__bzero, bzero) diff --git a/sysdeps/i386/cacheinfo.c b/sysdeps/i386/cacheinfo.c deleted file mode 100644 index f15fe0779a..0000000000 --- a/sysdeps/i386/cacheinfo.c +++ /dev/null @@ -1,3 +0,0 @@ -#define DISABLE_PREFETCHW - -#include diff --git a/sysdeps/i386/configure b/sysdeps/i386/configure deleted file mode 100644 index 5b55c5affe..0000000000 --- a/sysdeps/i386/configure +++ /dev/null @@ -1,84 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/i386. - -# We no longer support i386 since it lacks the atomic instructions -# required to implement NPTL threading. -if test "$config_machine" = i386; then - as_fn_error $? " -*** ERROR: Support for i386 is deprecated. -*** Please use host i786, i686, i585 or i486. -*** For example: /src/glibc/configure --host=i686-pc-linux-gnu ...\"" "$LINENO" 5 -fi - -# The GNU C Library can't be built for i386. There are several reasons for -# this restriction. The primary reason is that i386 lacks the atomic -# operations required to support the current NPTL implementation. While it is -# possible that such atomic operations could be emulated in the kernel to date -# no such work has been done to enable this. Even with NPTL disabled you still -# have no atomic.h implementation. Given the declining use of i386 we disable -# support for building with `-march=i386' or `-mcpu=i386.' We don't explicitly -# check for i386, instead we make sure the compiler has support for inlining -# the builtin __sync_val_compare_and_swap. If it does then we should have no -# problem building for i386. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compiler support of inlined builtin function __sync_val_compare_and_swap" >&5 -$as_echo_n "checking for compiler support of inlined builtin function __sync_val_compare_and_swap... " >&6; } -libc_compiler_builtin_inlined=no -cat > conftest.c <&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } -then - libc_compiler_builtin_inlined=yes -fi -rm -f conftest* -if test $libc_compiler_builtin_inlined = yes; then - libc_cv_unsupported_i386=no -else - as_fn_error $? " -*** Building with -march=i386/-mcpu=i386 is not supported. -*** Please use host i786, i686, i586, or i486. -*** For example: /source/glibc/configure CFLAGS='-O2 -march=i686' ..." "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_compiler_builtin_inlined" >&5 -$as_echo "$libc_compiler_builtin_inlined" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Intel MPX support" >&5 -$as_echo_n "checking for Intel MPX support... " >&6; } -if ${libc_cv_asm_mpx+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.s <<\EOF - bndmov %bnd0,(%esp) -EOF -if { ac_try='${CC-cc} -c $ASFLAGS conftest.s 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - libc_cv_asm_mpx=yes -else - libc_cv_asm_mpx=no -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_mpx" >&5 -$as_echo "$libc_cv_asm_mpx" >&6; } -if test $libc_cv_asm_mpx = yes; then - $as_echo "#define HAVE_MPX_SUPPORT 1" >>confdefs.h - -fi - -$as_echo "#define USE_REGPARMS 1" >>confdefs.h - - -$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h - diff --git a/sysdeps/i386/configure.ac b/sysdeps/i386/configure.ac deleted file mode 100644 index 19ef33f34a..0000000000 --- a/sysdeps/i386/configure.ac +++ /dev/null @@ -1,52 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/i386. - -# We no longer support i386 since it lacks the atomic instructions -# required to implement NPTL threading. -if test "$config_machine" = i386; then - AC_MSG_ERROR([ -*** ERROR: Support for i386 is deprecated. -*** Please use host i786, i686, i585 or i486. -*** For example: /src/glibc/configure --host=i686-pc-linux-gnu ..."]) -fi - -# The GNU C Library can't be built for i386. There are several reasons for -# this restriction. The primary reason is that i386 lacks the atomic -# operations required to support the current NPTL implementation. While it is -# possible that such atomic operations could be emulated in the kernel to date -# no such work has been done to enable this. Even with NPTL disabled you still -# have no atomic.h implementation. Given the declining use of i386 we disable -# support for building with `-march=i386' or `-mcpu=i386.' We don't explicitly -# check for i386, instead we make sure the compiler has support for inlining -# the builtin __sync_val_compare_and_swap. If it does then we should have no -# problem building for i386. -LIBC_COMPILER_BUILTIN_INLINED( - [__sync_val_compare_and_swap], - [int a, b, c; __sync_val_compare_and_swap (&a, b, c);], - [-O0], - [libc_cv_unsupported_i386=no], - [AC_MSG_ERROR([ -*** Building with -march=i386/-mcpu=i386 is not supported. -*** Please use host i786, i686, i586, or i486. -*** For example: /source/glibc/configure CFLAGS='-O2 -march=i686' ...])]) - -dnl Check whether asm supports Intel MPX -AC_CACHE_CHECK(for Intel MPX support, libc_cv_asm_mpx, [dnl -cat > conftest.s <<\EOF - bndmov %bnd0,(%esp) -EOF -if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then - libc_cv_asm_mpx=yes -else - libc_cv_asm_mpx=no -fi -rm -f conftest*]) -if test $libc_cv_asm_mpx = yes; then - AC_DEFINE(HAVE_MPX_SUPPORT) -fi - -AC_DEFINE(USE_REGPARMS) - -dnl It is always possible to access static and hidden symbols in an -dnl position independent way. -AC_DEFINE(PI_STATIC_AND_HIDDEN) diff --git a/sysdeps/i386/crti.S b/sysdeps/i386/crti.S deleted file mode 100644 index f800209990..0000000000 --- a/sysdeps/i386/crti.S +++ /dev/null @@ -1,84 +0,0 @@ -/* Special .init and .fini section support for x86. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - - .section .init,"ax",@progbits - .p2align 2 - .globl _init - .type _init, @function -_init: - pushl %ebx - /* Maintain 16-byte stack alignment for called functions. */ - subl $8, %esp - LOAD_PIC_REG (bx) -#if PREINIT_FUNCTION_WEAK - movl PREINIT_FUNCTION@GOT(%ebx), %eax - testl %eax, %eax - je .Lno_weak_fn - call PREINIT_FUNCTION@PLT -.Lno_weak_fn: -#else - call PREINIT_FUNCTION -#endif - - .section .fini,"ax",@progbits - .p2align 2 - .globl _fini - .type _fini, @function -_fini: - pushl %ebx - subl $8, %esp - LOAD_PIC_REG (bx) diff --git a/sysdeps/i386/crtn.S b/sysdeps/i386/crtn.S deleted file mode 100644 index b18b9c171a..0000000000 --- a/sysdeps/i386/crtn.S +++ /dev/null @@ -1,47 +0,0 @@ -/* Special .init and .fini section support for x86. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .section .init,"ax",@progbits - addl $8, %esp - popl %ebx - ret - - .section .fini,"ax",@progbits - addl $8, %esp - popl %ebx - ret diff --git a/sysdeps/i386/dl-irel.h b/sysdeps/i386/dl-irel.h deleted file mode 100644 index 824e81aed1..0000000000 --- a/sysdeps/i386/dl-irel.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Machine-dependent ELF indirect relocation inline functions. - i386 version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_IREL_H -#define _DL_IREL_H - -#include -#include - -#define ELF_MACHINE_IREL 1 - -static inline Elf32_Addr -__attribute ((always_inline)) -elf_ifunc_invoke (Elf32_Addr addr) -{ - return ((Elf32_Addr (*) (void)) (addr)) (); -} - -static inline void -__attribute ((always_inline)) -elf_irel (const Elf32_Rel *reloc) -{ - Elf32_Addr *const reloc_addr = (void *) reloc->r_offset; - const unsigned long int r_type = ELF32_R_TYPE (reloc->r_info); - - if (__glibc_likely (r_type == R_386_IRELATIVE)) - { - Elf32_Addr value = elf_ifunc_invoke(*reloc_addr); - *reloc_addr = value; - } - else - __libc_fatal ("unexpected reloc type in static binary"); -} - -#endif /* dl-irel.h */ diff --git a/sysdeps/i386/dl-lookupcfg.h b/sysdeps/i386/dl-lookupcfg.h deleted file mode 100644 index 47b534a059..0000000000 --- a/sysdeps/i386/dl-lookupcfg.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Configuration of lookup functions. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define DL_UNMAP_IS_SPECIAL - -#include_next - -/* Address of protected data defined in the shared library may be - external due to copy relocation. */ -#define DL_EXTERN_PROTECTED_DATA - -struct link_map; - -extern void _dl_unmap (struct link_map *map) - internal_function attribute_hidden; - -#define DL_UNMAP(map) _dl_unmap (map) diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h deleted file mode 100644 index 57d4a0bdbd..0000000000 --- a/sysdeps/i386/dl-machine.h +++ /dev/null @@ -1,757 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. i386 version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "i386" - -#include -#include -#include -#include -#include - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int __attribute__ ((unused)) -elf_machine_matches_host (const Elf32_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_386; -} - - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT, a special entry that is never relocated. */ -static inline Elf32_Addr __attribute__ ((unused, const)) -elf_machine_dynamic (void) -{ - /* This produces a GOTOFF reloc that resolves to zero at link time, so in - fact just loads from the GOT register directly. By doing it without - an asm we can let the compiler choose any register. */ - extern const Elf32_Addr _GLOBAL_OFFSET_TABLE_[] attribute_hidden; - return _GLOBAL_OFFSET_TABLE_[0]; -} - -/* Return the run-time load address of the shared object. */ -static inline Elf32_Addr __attribute__ ((unused)) -elf_machine_load_address (void) -{ - /* Compute the difference between the runtime address of _DYNAMIC as seen - by a GOTOFF reference, and the link-time address found in the special - unrelocated first GOT entry. */ - extern Elf32_Dyn bygotoff[] asm ("_DYNAMIC") attribute_hidden; - return (Elf32_Addr) &bygotoff - elf_machine_dynamic (); -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int __attribute__ ((unused, always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - Elf32_Addr *got; - extern void _dl_runtime_resolve (Elf32_Word) attribute_hidden; - extern void _dl_runtime_profile (Elf32_Word) attribute_hidden; - - if (l->l_info[DT_JMPREL] && lazy) - { - /* The GOT entries for functions in the PLT have not yet been filled - in. Their initial contents will arrange when called to push an - offset into the .rel.plt section, push _GLOBAL_OFFSET_TABLE_[1], - and then jump to _GLOBAL_OFFSET_TABLE[2]. */ - got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]); - /* If a library is prelinked but we have to relocate anyway, - we have to be able to undo the prelinking of .got.plt. - The prelinker saved us here address of .plt + 0x16. */ - if (got[1]) - { - l->l_mach.plt = got[1] + l->l_addr; - l->l_mach.gotplt = (Elf32_Addr) &got[3]; - } - got[1] = (Elf32_Addr) l; /* Identify this shared object. */ - - /* The got[2] entry contains the address of a function which gets - called to get the address of a so far unresolved function and - jump to it. The profiling extension of the dynamic linker allows - to intercept the calls to collect information. In this case we - don't store the address in the GOT so that all future calls also - end in this function. */ - if (__glibc_unlikely (profile)) - { - got[2] = (Elf32_Addr) &_dl_runtime_profile; - - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - /* This is the object we are looking for. Say that we really - want profiling and the timers are started. */ - GL(dl_profile_map) = l; - } - else - /* This function will get called to fix up the GOT entry indicated by - the offset on the stack, and then jump to the resolved address. */ - got[2] = (Elf32_Addr) &_dl_runtime_resolve; - } - - return lazy; -} - -#ifdef IN_DL_RUNTIME - -# ifndef PROF -/* We add a declaration of this function here so that in dl-runtime.c - the ELF_MACHINE_RUNTIME_TRAMPOLINE macro really can pass the parameters - in registers. - - We cannot use this scheme for profiling because the _mcount call - destroys the passed register information. */ -#define ARCH_FIXUP_ATTRIBUTE __attribute__ ((regparm (3), stdcall, unused)) - -extern ElfW(Addr) _dl_fixup (struct link_map *l, - ElfW(Word) reloc_offset) - ARCH_FIXUP_ATTRIBUTE; -extern ElfW(Addr) _dl_profile_fixup (struct link_map *l, - ElfW(Word) reloc_offset, - ElfW(Addr) retaddr, void *regs, - long int *framesizep) - ARCH_FIXUP_ATTRIBUTE; -# endif - -#endif - -/* Mask identifying addresses reserved for the user program, - where the dynamic linker should not map anything. */ -#define ELF_MACHINE_USER_ADDRESS_MASK 0xf8000000UL - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START asm ("\n\ - .text\n\ - .align 16\n\ -0: movl (%esp), %ebx\n\ - ret\n\ - .align 16\n\ -.globl _start\n\ -.globl _dl_start_user\n\ -_start:\n\ - # Note that _dl_start gets the parameter in %eax.\n\ - movl %esp, %eax\n\ - call _dl_start\n\ -_dl_start_user:\n\ - # Save the user entry point address in %edi.\n\ - movl %eax, %edi\n\ - # Point %ebx at the GOT.\n\ - call 0b\n\ - addl $_GLOBAL_OFFSET_TABLE_, %ebx\n\ - # See if we were run as a command with the executable file\n\ - # name as an extra leading argument.\n\ - movl _dl_skip_args@GOTOFF(%ebx), %eax\n\ - # Pop the original argument count.\n\ - popl %edx\n\ - # Adjust the stack pointer to skip _dl_skip_args words.\n\ - leal (%esp,%eax,4), %esp\n\ - # Subtract _dl_skip_args from argc.\n\ - subl %eax, %edx\n\ - # Push argc back on the stack.\n\ - push %edx\n\ - # The special initializer gets called with the stack just\n\ - # as the application's entry point will see it; it can\n\ - # switch stacks if it moves these contents over.\n\ -" RTLD_START_SPECIAL_INIT "\n\ - # Load the parameters again.\n\ - # (eax, edx, ecx, *--esp) = (_dl_loaded, argc, argv, envp)\n\ - movl _rtld_local@GOTOFF(%ebx), %eax\n\ - leal 8(%esp,%edx,4), %esi\n\ - leal 4(%esp), %ecx\n\ - movl %esp, %ebp\n\ - # Make sure _dl_init is run with 16 byte aligned stack.\n\ - andl $-16, %esp\n\ - pushl %eax\n\ - pushl %eax\n\ - pushl %ebp\n\ - pushl %esi\n\ - # Clear %ebp, so that even constructors have terminated backchain.\n\ - xorl %ebp, %ebp\n\ - # Call the function to run the initializers.\n\ - call _dl_init\n\ - # Pass our finalizer function to the user in %edx, as per ELF ABI.\n\ - leal _dl_fini@GOTOFF(%ebx), %edx\n\ - # Restore %esp _start expects.\n\ - movl (%esp), %esp\n\ - # Jump to the user's entry point.\n\ - jmp *%edi\n\ - .previous\n\ -"); - -#ifndef RTLD_START_SPECIAL_INIT -# define RTLD_START_SPECIAL_INIT /* nothing */ -#endif - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or - TLS variable, so undefined references should not be allowed to - define the value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. - ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA iff TYPE describes relocation may - against protected data whose address be external due to copy relocation. - */ -# define elf_machine_type_class(type) \ - ((((type) == R_386_JMP_SLOT || (type) == R_386_TLS_DTPMOD32 \ - || (type) == R_386_TLS_DTPOFF32 || (type) == R_386_TLS_TPOFF32 \ - || (type) == R_386_TLS_TPOFF || (type) == R_386_TLS_DESC) \ - * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_386_COPY) * ELF_RTYPE_CLASS_COPY) \ - | (((type) == R_386_GLOB_DAT) * ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA)) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_386_JMP_SLOT - -/* The i386 never uses Elf32_Rela relocations for the dynamic linker. - Prelinked libraries may use Elf32_Rela though. */ -#define ELF_MACHINE_PLT_REL 1 - -/* We define an initialization functions. This is called very early in - _dl_sysdep_start. */ -#define DL_PLATFORM_INIT dl_platform_init () - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ -#if IS_IN (rtld) - /* init_cpu_features has been called early from __libc_start_main in - static executable. */ - init_cpu_features (&GLRO(dl_x86_cpu_features)); -#else - if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') - /* Avoid an empty string which would disturb us. */ - GLRO(dl_platform) = NULL; -#endif -} - -static inline Elf32_Addr -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf32_Rel *reloc, - Elf32_Addr *reloc_addr, Elf32_Addr value) -{ - return *reloc_addr = value; -} - -/* Return the final value of a plt relocation. */ -static inline Elf32_Addr -elf_machine_plt_value (struct link_map *map, const Elf32_Rel *reloc, - Elf32_Addr value) -{ - return value; -} - - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER i86_gnu_pltenter -#define ARCH_LA_PLTEXIT i86_gnu_pltexit - -#endif /* !dl_machine_h */ - -/* The i386 never uses Elf32_Rela relocations for the dynamic linker. - Prelinked libraries may use Elf32_Rela though. */ -#define ELF_MACHINE_NO_RELA defined RTLD_BOOTSTRAP -#define ELF_MACHINE_NO_REL 0 - -#ifdef RESOLVE_MAP - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ - -auto inline void -__attribute ((always_inline)) -elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, - const Elf32_Sym *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - -# if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC - if (__glibc_unlikely (r_type == R_386_RELATIVE)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; - make the reference weak so static programs can still link. - This declaration cannot be done when compiling rtld.c - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the - common defn for _dl_rtld_map, which is incompatible with a - weak decl in the same file. */ -# ifndef SHARED - weak_extern (_dl_rtld_map); -# endif - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ -# endif - *reloc_addr += map->l_addr; - } -# ifndef RTLD_BOOTSTRAP - else if (__glibc_unlikely (r_type == R_386_NONE)) - return; -# endif - else -# endif /* !RTLD_BOOTSTRAP and have no -z combreloc */ - { -# ifndef RTLD_BOOTSTRAP - const Elf32_Sym *const refsym = sym; -# endif - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - Elf32_Addr value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; - - if (sym != NULL - && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, - 0) - && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) - && __builtin_expect (!skip_ifunc, 1)) - { -# ifndef RTLD_BOOTSTRAP - if (sym_map != map - && sym_map->l_type != lt_executable - && !sym_map->l_relocated) - { - const char *strtab - = (const char *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Relink `%s' with `%s' for IFUNC symbol `%s'\n", - RTLD_PROGNAME, map->l_name, - sym_map->l_name, - strtab + refsym->st_name); - } -# endif - value = ((Elf32_Addr (*) (void)) value) (); - } - - switch (r_type) - { -# ifndef RTLD_BOOTSTRAP - case R_386_SIZE32: - /* Set to symbol size plus addend. */ - *reloc_addr += sym->st_size; - break; -# endif - case R_386_GLOB_DAT: - case R_386_JMP_SLOT: - *reloc_addr = value; - break; - - case R_386_TLS_DTPMOD32: -# ifdef RTLD_BOOTSTRAP - /* During startup the dynamic linker is always the module - with index 1. - XXX If this relocation is necessary move before RESOLVE - call. */ - *reloc_addr = 1; -# else - /* Get the information from the link map returned by the - resolv function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; -# endif - break; - case R_386_TLS_DTPOFF32: -# ifndef RTLD_BOOTSTRAP - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ - if (sym != NULL) - *reloc_addr = sym->st_value; -# endif - break; - case R_386_TLS_DESC: - { - struct tlsdesc volatile *td = - (struct tlsdesc volatile *)reloc_addr; - -# ifndef RTLD_BOOTSTRAP - if (! sym) - td->entry = _dl_tlsdesc_undefweak; - else -# endif - { -# ifndef RTLD_BOOTSTRAP -# ifndef SHARED - CHECK_STATIC_TLS (map, sym_map); -# else - if (!TRY_STATIC_TLS (map, sym_map)) - { - td->arg = _dl_make_tlsdesc_dynamic - (sym_map, sym->st_value + (ElfW(Word))td->arg); - td->entry = _dl_tlsdesc_dynamic; - } - else -# endif -# endif - { - td->arg = (void*)(sym->st_value - sym_map->l_tls_offset - + (ElfW(Word))td->arg); - td->entry = _dl_tlsdesc_return; - } - } - break; - } - case R_386_TLS_TPOFF32: - /* The offset is positive, backward from the thread pointer. */ -# ifdef RTLD_BOOTSTRAP - *reloc_addr += map->l_tls_offset - sym->st_value; -# else - /* We know the offset of object the symbol is contained in. - It is a positive value which will be subtracted from the - thread pointer. To get the variable position in the TLS - block we subtract the offset from that of the TLS block. */ - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr += sym_map->l_tls_offset - sym->st_value; - } -# endif - break; - case R_386_TLS_TPOFF: - /* The offset is negative, forward from the thread pointer. */ -# ifdef RTLD_BOOTSTRAP - *reloc_addr += sym->st_value - map->l_tls_offset; -# else - /* We know the offset of object the symbol is contained in. - It is a negative value which will be added to the - thread pointer. */ - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr += sym->st_value - sym_map->l_tls_offset; - } -# endif - break; - -# ifndef RTLD_BOOTSTRAP - case R_386_32: - *reloc_addr += value; - break; - case R_386_PC32: - *reloc_addr += (value - (Elf32_Addr) reloc_addr); - break; - case R_386_COPY: - if (sym == NULL) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (__builtin_expect (sym->st_size > refsym->st_size, 0) - || (__builtin_expect (sym->st_size < refsym->st_size, 0) - && GLRO(dl_verbose))) - { - const char *strtab; - - strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - break; - case R_386_IRELATIVE: - value = map->l_addr + *reloc_addr; - value = ((Elf32_Addr (*) (void)) value) (); - *reloc_addr = value; - break; - default: - _dl_reloc_bad_type (map, r_type, 0); - break; -# endif /* !RTLD_BOOTSTRAP */ - } - } -} - -# ifndef RTLD_BOOTSTRAP -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, - const Elf32_Sym *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - - if (ELF32_R_TYPE (reloc->r_info) == R_386_RELATIVE) - *reloc_addr = map->l_addr + reloc->r_addend; - else if (r_type != R_386_NONE) - { -# ifndef RESOLVE_CONFLICT_FIND_MAP - const Elf32_Sym *const refsym = sym; -# endif - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value; - - if (sym != NULL - && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) - && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0) - && __builtin_expect (!skip_ifunc, 1)) - value = ((Elf32_Addr (*) (void)) value) (); - - switch (ELF32_R_TYPE (reloc->r_info)) - { - case R_386_SIZE32: - /* Set to symbol size plus addend. */ - value = sym->st_size; - case R_386_GLOB_DAT: - case R_386_JMP_SLOT: - case R_386_32: - *reloc_addr = value + reloc->r_addend; - break; -# ifndef RESOLVE_CONFLICT_FIND_MAP - /* Not needed for dl-conflict.c. */ - case R_386_PC32: - *reloc_addr = (value + reloc->r_addend - (Elf32_Addr) reloc_addr); - break; - - case R_386_TLS_DTPMOD32: - /* Get the information from the link map returned by the - resolv function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; - break; - case R_386_TLS_DTPOFF32: - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ - *reloc_addr = (sym == NULL ? 0 : sym->st_value) + reloc->r_addend; - break; - case R_386_TLS_DESC: - { - struct tlsdesc volatile *td = - (struct tlsdesc volatile *)reloc_addr; - -# ifndef RTLD_BOOTSTRAP - if (!sym) - { - td->arg = (void*)reloc->r_addend; - td->entry = _dl_tlsdesc_undefweak; - } - else -# endif - { -# ifndef RTLD_BOOTSTRAP -# ifndef SHARED - CHECK_STATIC_TLS (map, sym_map); -# else - if (!TRY_STATIC_TLS (map, sym_map)) - { - td->arg = _dl_make_tlsdesc_dynamic - (sym_map, sym->st_value + reloc->r_addend); - td->entry = _dl_tlsdesc_dynamic; - } - else -# endif -# endif - { - td->arg = (void*)(sym->st_value - sym_map->l_tls_offset - + reloc->r_addend); - td->entry = _dl_tlsdesc_return; - } - } - } - break; - case R_386_TLS_TPOFF32: - /* The offset is positive, backward from the thread pointer. */ - /* We know the offset of object the symbol is contained in. - It is a positive value which will be subtracted from the - thread pointer. To get the variable position in the TLS - block we subtract the offset from that of the TLS block. */ - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = sym_map->l_tls_offset - sym->st_value - + reloc->r_addend; - } - break; - case R_386_TLS_TPOFF: - /* The offset is negative, forward from the thread pointer. */ - /* We know the offset of object the symbol is contained in. - It is a negative value which will be added to the - thread pointer. */ - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = sym->st_value - sym_map->l_tls_offset - + reloc->r_addend; - } - break; - case R_386_COPY: - if (sym == NULL) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (__builtin_expect (sym->st_size > refsym->st_size, 0) - || (__builtin_expect (sym->st_size < refsym->st_size, 0) - && GLRO(dl_verbose))) - { - const char *strtab; - - strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - break; -# endif /* !RESOLVE_CONFLICT_FIND_MAP */ - case R_386_IRELATIVE: - value = map->l_addr + reloc->r_addend; - value = ((Elf32_Addr (*) (void)) value) (); - *reloc_addr = value; - break; - default: - /* We add these checks in the version to relocate ld.so only - if we are still debugging. */ - _dl_reloc_bad_type (map, r_type, 0); - break; - } - } -} -# endif /* !RTLD_BOOTSTRAP */ - -auto inline void -__attribute ((always_inline)) -elf_machine_rel_relative (Elf32_Addr l_addr, const Elf32_Rel *reloc, - void *const reloc_addr_arg) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - assert (ELF32_R_TYPE (reloc->r_info) == R_386_RELATIVE); - *reloc_addr += l_addr; -} - -# ifndef RTLD_BOOTSTRAP -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, - void *const reloc_addr_arg) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - *reloc_addr = l_addr + reloc->r_addend; -} -# endif /* !RTLD_BOOTSTRAP */ - -auto inline void -__attribute__ ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf32_Addr l_addr, const Elf32_Rel *reloc, - int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - /* Check for unexpected PLT reloc type. */ - if (__glibc_likely (r_type == R_386_JMP_SLOT)) - { - if (__builtin_expect (map->l_mach.plt, 0) == 0) - *reloc_addr += l_addr; - else - *reloc_addr = (map->l_mach.plt - + (((Elf32_Addr) reloc_addr) - map->l_mach.gotplt) * 4); - } - else if (__glibc_likely (r_type == R_386_TLS_DESC)) - { - struct tlsdesc volatile * __attribute__((__unused__)) td = - (struct tlsdesc volatile *)reloc_addr; - - /* Handle relocations that reference the local *ABS* in a simple - way, so as to preserve a potential addend. */ - if (ELF32_R_SYM (reloc->r_info) == 0) - td->entry = _dl_tlsdesc_resolve_abs_plus_addend; - /* Given a known-zero addend, we can store a pointer to the - reloc in the arg position. */ - else if (td->arg == 0) - { - td->arg = (void*)reloc; - td->entry = _dl_tlsdesc_resolve_rel; - } - else - { - /* We could handle non-*ABS* relocations with non-zero addends - by allocating dynamically an arg to hold a pointer to the - reloc, but that sounds pointless. */ - const Elf32_Rel *const r = reloc; - /* The code below was borrowed from elf_dynamic_do_rel(). */ - const ElfW(Sym) *const symtab = - (const void *) D_PTR (map, l_info[DT_SYMTAB]); - -# ifdef RTLD_BOOTSTRAP - /* The dynamic linker always uses versioning. */ - assert (map->l_info[VERSYMIDX (DT_VERSYM)] != NULL); -# else - if (map->l_info[VERSYMIDX (DT_VERSYM)]) -# endif - { - const ElfW(Half) *const version = - (const void *) D_PTR (map, l_info[VERSYMIDX (DT_VERSYM)]); - ElfW(Half) ndx = version[ELFW(R_SYM) (r->r_info)] & 0x7fff; - elf_machine_rel (map, r, &symtab[ELFW(R_SYM) (r->r_info)], - &map->l_versions[ndx], - (void *) (l_addr + r->r_offset), skip_ifunc); - } -# ifndef RTLD_BOOTSTRAP - else - elf_machine_rel (map, r, &symtab[ELFW(R_SYM) (r->r_info)], NULL, - (void *) (l_addr + r->r_offset), skip_ifunc); -# endif - } - } - else if (__glibc_unlikely (r_type == R_386_IRELATIVE)) - { - Elf32_Addr value = map->l_addr + *reloc_addr; - if (__glibc_likely (!skip_ifunc)) - value = ((Elf32_Addr (*) (void)) value) (); - *reloc_addr = value; - } - else - _dl_reloc_bad_type (map, r_type, 1); -} - -# ifndef RTLD_BOOTSTRAP - -auto inline void -__attribute__ ((always_inline)) -elf_machine_lazy_rela (struct link_map *map, - Elf32_Addr l_addr, const Elf32_Rela *reloc, - int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - if (__glibc_likely (r_type == R_386_JMP_SLOT)) - ; - else if (__glibc_likely (r_type == R_386_TLS_DESC)) - { - struct tlsdesc volatile * __attribute__((__unused__)) td = - (struct tlsdesc volatile *)reloc_addr; - - td->arg = (void*)reloc; - td->entry = _dl_tlsdesc_resolve_rela; - } - else if (__glibc_unlikely (r_type == R_386_IRELATIVE)) - { - Elf32_Addr value = map->l_addr + reloc->r_addend; - if (__glibc_likely (!skip_ifunc)) - value = ((Elf32_Addr (*) (void)) value) (); - *reloc_addr = value; - } - else - _dl_reloc_bad_type (map, r_type, 1); -} - -# endif /* !RTLD_BOOTSTRAP */ - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/i386/dl-procinfo.c b/sysdeps/i386/dl-procinfo.c deleted file mode 100644 index 7237f778b2..0000000000 --- a/sysdeps/i386/dl-procinfo.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Data for i386 version of processor capability information. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* If anything should be added here check whether the size of each string - is still ok with the given array size. - - All the #ifdefs in the definitions are quite irritating but - necessary if we want to avoid duplicating the information. There - are three different modes: - - - PROCINFO_DECL is defined. This means we are only interested in - declarations. - - - PROCINFO_DECL is not defined: - - + if SHARED is defined the file is included in an array - initializer. The .element = { ... } syntax is needed. - - + if SHARED is not defined a normal array initialization is - needed. - */ - -#ifndef PROCINFO_CLASS -# define PROCINFO_CLASS -#endif - -#include - -#if !defined PROCINFO_DECL && defined SHARED - ._dl_x86_cap_flags -#else -PROCINFO_CLASS const char _dl_x86_cap_flags[32][8] -#endif -#ifndef PROCINFO_DECL -= { - "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce", - "cx8", "apic", "10", "sep", "mtrr", "pge", "mca", "cmov", - "pat", "pse36", "pn", "clflush", "20", "dts", "acpi", "mmx", - "fxsr", "sse", "sse2", "ss", "ht", "tm", "ia64", "pbe" - } -#endif -#if !defined SHARED || defined PROCINFO_DECL -; -#else -, -#endif - -#undef PROCINFO_DECL -#undef PROCINFO_CLASS diff --git a/sysdeps/i386/dl-tls.h b/sysdeps/i386/dl-tls.h deleted file mode 100644 index 525ebab992..0000000000 --- a/sysdeps/i386/dl-tls.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. i386 version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct dl_tls_index -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - - -#ifdef SHARED -/* This is the prototype for the GNU version. */ -extern void *___tls_get_addr (tls_index *ti) - __attribute__ ((__regparm__ (1))); -extern void *___tls_get_addr_internal (tls_index *ti) - __attribute__ ((__regparm__ (1))) attribute_hidden; - -# if IS_IN (rtld) -/* The special thing about the x86 TLS ABI is that we have two - variants of the __tls_get_addr function with different calling - conventions. The GNU version, which we are mostly concerned here, - takes the parameter in a register. The name is changed by adding - an additional underscore at the beginning. The Sun version uses - the normal calling convention. */ -void * -__tls_get_addr (tls_index *ti) -{ - return ___tls_get_addr_internal (ti); -} - - -/* Prepare using the definition of __tls_get_addr in the generic - version of this file. */ -# define __tls_get_addr __attribute__ ((__regparm__ (1))) ___tls_get_addr -strong_alias (___tls_get_addr, ___tls_get_addr_internal) -rtld_hidden_proto (___tls_get_addr) -rtld_hidden_def (___tls_get_addr) -#else - -/* Users should get the better interface. */ -# define __tls_get_addr ___tls_get_addr - -# endif -#endif diff --git a/sysdeps/i386/dl-tlsdesc.S b/sysdeps/i386/dl-tlsdesc.S deleted file mode 100644 index 8befdc2b39..0000000000 --- a/sysdeps/i386/dl-tlsdesc.S +++ /dev/null @@ -1,285 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. i386 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "tlsdesc.h" - - .text - - /* This function is used to compute the TP offset for symbols in - Static TLS, i.e., whose TP offset is the same for all - threads. - - The incoming %eax points to the TLS descriptor, such that - 0(%eax) points to _dl_tlsdesc_return itself, and 4(%eax) holds - the TP offset of the symbol corresponding to the object - denoted by the argument. */ - - .hidden _dl_tlsdesc_return - .global _dl_tlsdesc_return - .type _dl_tlsdesc_return,@function - cfi_startproc - .align 16 -_dl_tlsdesc_return: - movl 4(%eax), %eax - ret - cfi_endproc - .size _dl_tlsdesc_return, .-_dl_tlsdesc_return - - /* This function is used for undefined weak TLS symbols, for - which the base address (i.e., disregarding any addend) should - resolve to NULL. - - %eax points to the TLS descriptor, such that 0(%eax) points to - _dl_tlsdesc_undefweak itself, and 4(%eax) holds the addend. - We return the addend minus the TP, such that, when the caller - adds TP, it gets the addend back. If that's zero, as usual, - that's most likely a NULL pointer. */ - - .hidden _dl_tlsdesc_undefweak - .global _dl_tlsdesc_undefweak - .type _dl_tlsdesc_undefweak,@function - cfi_startproc - .align 16 -_dl_tlsdesc_undefweak: - movl 4(%eax), %eax - subl %gs:0, %eax - ret - cfi_endproc - .size _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak - -#ifdef SHARED - .hidden _dl_tlsdesc_dynamic - .global _dl_tlsdesc_dynamic - .type _dl_tlsdesc_dynamic,@function - - /* This function is used for symbols that need dynamic TLS. - - %eax points to the TLS descriptor, such that 0(%eax) points to - _dl_tlsdesc_dynamic itself, and 4(%eax) points to a struct - tlsdesc_dynamic_arg object. It must return in %eax the offset - between the thread pointer and the object denoted by the - argument, without clobbering any registers. - - The assembly code that follows is a rendition of the following - C code, hand-optimized a little bit. - -ptrdiff_t -__attribute__ ((__regparm__ (1))) -_dl_tlsdesc_dynamic (struct tlsdesc *tdp) -{ - struct tlsdesc_dynamic_arg *td = tdp->arg; - dtv_t *dtv = *(dtv_t **)((char *)__thread_pointer + DTV_OFFSET); - if (__builtin_expect (td->gen_count <= dtv[0].counter - && (dtv[td->tlsinfo.ti_module].pointer.val - != TLS_DTV_UNALLOCATED), - 1)) - return dtv[td->tlsinfo.ti_module].pointer.val + td->tlsinfo.ti_offset - - __thread_pointer; - - return ___tls_get_addr (&td->tlsinfo) - __thread_pointer; -} -*/ - cfi_startproc - .align 16 -_dl_tlsdesc_dynamic: - /* Like all TLS resolvers, preserve call-clobbered registers. - We need two scratch regs anyway. */ - subl $28, %esp - cfi_adjust_cfa_offset (28) - movl %ecx, 20(%esp) - movl %edx, 24(%esp) - movl TLSDESC_ARG(%eax), %eax - movl %gs:DTV_OFFSET, %edx - movl TLSDESC_GEN_COUNT(%eax), %ecx - cmpl (%edx), %ecx - ja .Lslow - movl TLSDESC_MODID(%eax), %ecx - movl (%edx,%ecx,8), %edx - cmpl $-1, %edx - je .Lslow - movl TLSDESC_MODOFF(%eax), %eax - addl %edx, %eax -.Lret: - movl 20(%esp), %ecx - subl %gs:0, %eax - movl 24(%esp), %edx - addl $28, %esp - cfi_adjust_cfa_offset (-28) - ret - .p2align 4,,7 -.Lslow: - cfi_adjust_cfa_offset (28) - call HIDDEN_JUMPTARGET (___tls_get_addr) - jmp .Lret - cfi_endproc - .size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic -#endif /* SHARED */ - - /* This function is a wrapper for a lazy resolver for TLS_DESC - REL relocations that reference the *ABS* segment in their own - link maps. %ebx points to the caller's GOT. %eax points to a - TLS descriptor, such that 0(%eax) holds the address of the - resolver wrapper itself (unless some other thread beat us to - it) and 4(%eax) holds the addend in the relocation. - - When the actual resolver returns, it will have adjusted the - TLS descriptor such that we can tail-call it for it to return - the TP offset of the symbol. */ - - .hidden _dl_tlsdesc_resolve_abs_plus_addend - .global _dl_tlsdesc_resolve_abs_plus_addend - .type _dl_tlsdesc_resolve_abs_plus_addend,@function - cfi_startproc - .align 16 -_dl_tlsdesc_resolve_abs_plus_addend: -0: - pushl %eax - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %edx - cfi_adjust_cfa_offset (4) - movl $1f - 0b, %ecx - movl 4(%ebx), %edx - call _dl_tlsdesc_resolve_abs_plus_addend_fixup -1: - popl %edx - cfi_adjust_cfa_offset (-4) - popl %ecx - cfi_adjust_cfa_offset (-4) - popl %eax - cfi_adjust_cfa_offset (-4) - jmp *(%eax) - cfi_endproc - .size _dl_tlsdesc_resolve_abs_plus_addend, .-_dl_tlsdesc_resolve_abs_plus_addend - - /* This function is a wrapper for a lazy resolver for TLS_DESC - REL relocations that had zero addends. %ebx points to the - caller's GOT. %eax points to a TLS descriptor, such that - 0(%eax) holds the address of the resolver wrapper itself - (unless some other thread beat us to it) and 4(%eax) holds a - pointer to the relocation. - - When the actual resolver returns, it will have adjusted the - TLS descriptor such that we can tail-call it for it to return - the TP offset of the symbol. */ - - .hidden _dl_tlsdesc_resolve_rel - .global _dl_tlsdesc_resolve_rel - .type _dl_tlsdesc_resolve_rel,@function - cfi_startproc - .align 16 -_dl_tlsdesc_resolve_rel: -0: - pushl %eax - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %edx - cfi_adjust_cfa_offset (4) - movl $1f - 0b, %ecx - movl 4(%ebx), %edx - call _dl_tlsdesc_resolve_rel_fixup -1: - popl %edx - cfi_adjust_cfa_offset (-4) - popl %ecx - cfi_adjust_cfa_offset (-4) - popl %eax - cfi_adjust_cfa_offset (-4) - jmp *(%eax) - cfi_endproc - .size _dl_tlsdesc_resolve_rel, .-_dl_tlsdesc_resolve_rel - - /* This function is a wrapper for a lazy resolver for TLS_DESC - RELA relocations. %ebx points to the caller's GOT. %eax - points to a TLS descriptor, such that 0(%eax) holds the - address of the resolver wrapper itself (unless some other - thread beat us to it) and 4(%eax) holds a pointer to the - relocation. - - When the actual resolver returns, it will have adjusted the - TLS descriptor such that we can tail-call it for it to return - the TP offset of the symbol. */ - - .hidden _dl_tlsdesc_resolve_rela - .global _dl_tlsdesc_resolve_rela - .type _dl_tlsdesc_resolve_rela,@function - cfi_startproc - .align 16 -_dl_tlsdesc_resolve_rela: -0: - pushl %eax - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %edx - cfi_adjust_cfa_offset (4) - movl $1f - 0b, %ecx - movl 4(%ebx), %edx - call _dl_tlsdesc_resolve_rela_fixup -1: - popl %edx - cfi_adjust_cfa_offset (-4) - popl %ecx - cfi_adjust_cfa_offset (-4) - popl %eax - cfi_adjust_cfa_offset (-4) - jmp *(%eax) - cfi_endproc - .size _dl_tlsdesc_resolve_rela, .-_dl_tlsdesc_resolve_rela - - /* This function is a placeholder for lazy resolving of TLS - relocations. Once some thread starts resolving a TLS - relocation, it sets up the TLS descriptor to use this - resolver, such that other threads that would attempt to - resolve it concurrently may skip the call to the original lazy - resolver and go straight to a condition wait. - - When the actual resolver returns, it will have adjusted the - TLS descriptor such that we can tail-call it for it to return - the TP offset of the symbol. */ - - .hidden _dl_tlsdesc_resolve_hold - .global _dl_tlsdesc_resolve_hold - .type _dl_tlsdesc_resolve_hold,@function - cfi_startproc - .align 16 -_dl_tlsdesc_resolve_hold: -0: - pushl %eax - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %edx - cfi_adjust_cfa_offset (4) - movl $1f - 0b, %ecx - movl 4(%ebx), %edx - call _dl_tlsdesc_resolve_hold_fixup -1: - popl %edx - cfi_adjust_cfa_offset (-4) - popl %ecx - cfi_adjust_cfa_offset (-4) - popl %eax - cfi_adjust_cfa_offset (-4) - jmp *(%eax) - cfi_endproc - .size _dl_tlsdesc_resolve_hold, .-_dl_tlsdesc_resolve_hold diff --git a/sysdeps/i386/dl-tlsdesc.h b/sysdeps/i386/dl-tlsdesc.h deleted file mode 100644 index 242bebfc8e..0000000000 --- a/sysdeps/i386/dl-tlsdesc.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Thread-local storage descriptor handling in the ELF dynamic linker. - i386 version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _I386_DL_TLSDESC_H -# define _I386_DL_TLSDESC_H 1 - -/* Type used to represent a TLS descriptor in the GOT. */ -struct tlsdesc -{ - ptrdiff_t __attribute__ ((regparm (1))) (*entry) (struct tlsdesc *); - void *arg; -}; - -typedef struct dl_tls_index -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - -/* Type used as the argument in a TLS descriptor for a symbol that - needs dynamic TLS offsets. */ -struct tlsdesc_dynamic_arg -{ - tls_index tlsinfo; - size_t gen_count; -}; - -extern ptrdiff_t attribute_hidden __attribute__ ((regparm (1))) - _dl_tlsdesc_return (struct tlsdesc *), - _dl_tlsdesc_undefweak (struct tlsdesc *), - _dl_tlsdesc_resolve_abs_plus_addend (struct tlsdesc *), - _dl_tlsdesc_resolve_rel (struct tlsdesc *), - _dl_tlsdesc_resolve_rela (struct tlsdesc *), - _dl_tlsdesc_resolve_hold (struct tlsdesc *); - -# ifdef SHARED -extern void *_dl_make_tlsdesc_dynamic (struct link_map *map, - size_t ti_offset) - internal_function attribute_hidden; - -extern ptrdiff_t attribute_hidden __attribute__ ((regparm (1))) - _dl_tlsdesc_dynamic (struct tlsdesc *); -# endif - -#endif diff --git a/sysdeps/i386/dl-trampoline.S b/sysdeps/i386/dl-trampoline.S deleted file mode 100644 index 6e7f3aef92..0000000000 --- a/sysdeps/i386/dl-trampoline.S +++ /dev/null @@ -1,215 +0,0 @@ -/* PLT trampolines. i386 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifdef HAVE_MPX_SUPPORT -# define PRESERVE_BND_REGS_PREFIX bnd -#else -# define PRESERVE_BND_REGS_PREFIX .byte 0xf2 -#endif - - .text - .globl _dl_runtime_resolve - .type _dl_runtime_resolve, @function - cfi_startproc - .align 16 -_dl_runtime_resolve: - cfi_adjust_cfa_offset (8) - pushl %eax # Preserve registers otherwise clobbered. - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %edx - cfi_adjust_cfa_offset (4) - movl 16(%esp), %edx # Copy args pushed by PLT in register. Note - movl 12(%esp), %eax # that `fixup' takes its parameters in regs. - call _dl_fixup # Call resolver. - popl %edx # Get register content back. - cfi_adjust_cfa_offset (-4) - movl (%esp), %ecx - movl %eax, (%esp) # Store the function address. - movl 4(%esp), %eax - ret $12 # Jump to function address. - cfi_endproc - .size _dl_runtime_resolve, .-_dl_runtime_resolve - - -#ifndef PROF - .globl _dl_runtime_profile - .type _dl_runtime_profile, @function - cfi_startproc - .align 16 -_dl_runtime_profile: - cfi_adjust_cfa_offset (8) - pushl %esp - cfi_adjust_cfa_offset (4) - addl $8, (%esp) # Account for the pushed PLT data - pushl %ebp - cfi_adjust_cfa_offset (4) - pushl %eax # Preserve registers otherwise clobbered. - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %edx - cfi_adjust_cfa_offset (4) - movl %esp, %ecx - subl $8, %esp - cfi_adjust_cfa_offset (8) - movl $-1, 4(%esp) - leal 4(%esp), %edx - movl %edx, (%esp) - pushl %ecx # Address of the register structure - cfi_adjust_cfa_offset (4) - movl 40(%esp), %ecx # Load return address - movl 36(%esp), %edx # Copy args pushed by PLT in register. Note - movl 32(%esp), %eax # that `fixup' takes its parameters in regs. - call _dl_profile_fixup # Call resolver. - cfi_adjust_cfa_offset (-8) - movl (%esp), %edx - testl %edx, %edx - jns 1f - popl %edx - cfi_adjust_cfa_offset (-4) - popl %edx # Get register content back. - cfi_adjust_cfa_offset (-4) - movl (%esp), %ecx - movl %eax, (%esp) # Store the function address. - movl 4(%esp), %eax - ret $20 # Jump to function address. - - /* - +32 return address - +28 PLT1 - +24 PLT2 - +20 %esp - +16 %ebp - +12 %eax - +8 %ecx - +4 %edx - %esp free - */ - cfi_adjust_cfa_offset (8) -1: movl %ebx, (%esp) - cfi_rel_offset (ebx, 0) - movl %edx, %ebx # This is the frame buffer size - pushl %edi - cfi_adjust_cfa_offset (4) - cfi_rel_offset (edi, 0) - pushl %esi - cfi_adjust_cfa_offset (4) - cfi_rel_offset (esi, 0) - leal 44(%esp), %esi - movl %ebx, %ecx - orl $4, %ebx # Increase frame size if necessary to align - # stack for the function call - andl $~3, %ebx - movl %esp, %edi - subl %ebx, %edi - movl %esp, %ebx - cfi_def_cfa_register (ebx) - movl %edi, %esp - shrl $2, %ecx - rep - movsl - movl (%ebx), %esi - cfi_restore (esi) - movl 4(%ebx), %edi - cfi_restore (edi) - /* - %ebx+40 return address - %ebx+36 PLT1 - %ebx+32 PLT2 - %ebx+28 %esp - %ebx+24 %ebp - %ebx+20 %eax - %ebx+16 %ecx - %ebx+12 %edx - %ebx+8 %ebx - %ebx+4 free - %ebx free - %esp copied stack frame - */ - movl %eax, (%ebx) - movl 12(%ebx), %edx - movl 16(%ebx), %ecx - movl 20(%ebx), %eax - call *(%ebx) - movl %ebx, %esp - cfi_def_cfa_register (esp) - movl 8(%esp), %ebx - cfi_restore (ebx) - /* - +40 return address - +36 PLT1 - +32 PLT2 - +28 %esp - +24 %ebp - +20 %eax - +16 %ecx - +12 %edx - +8 free - +4 free - %esp free - */ -#if LONG_DOUBLE_SIZE != 12 -# error "long double size must be 12 bytes" -#endif - # Allocate space for La_i86_retval and subtract 12 free bytes. - subl $(LRV_SIZE - 12), %esp - cfi_adjust_cfa_offset (LRV_SIZE - 12) - movl %eax, LRV_EAX_OFFSET(%esp) - movl %edx, LRV_EDX_OFFSET(%esp) - fstpt LRV_ST0_OFFSET(%esp) - fstpt LRV_ST1_OFFSET(%esp) -#ifdef HAVE_MPX_SUPPORT - bndmov %bnd0, LRV_BND0_OFFSET(%esp) - bndmov %bnd1, LRV_BND1_OFFSET(%esp) -#else - .byte 0x66,0x0f,0x1b,0x44,0x24,LRV_BND0_OFFSET - .byte 0x66,0x0f,0x1b,0x4c,0x24,LRV_BND1_OFFSET -#endif - pushl %esp - cfi_adjust_cfa_offset (4) - # Address of La_i86_regs area. - leal (LRV_SIZE + 4)(%esp), %ecx - # PLT2 - movl (LRV_SIZE + 4 + LR_SIZE)(%esp), %eax - # PLT1 - movl (LRV_SIZE + 4 + LR_SIZE + 4)(%esp), %edx - call _dl_call_pltexit - movl LRV_EAX_OFFSET(%esp), %eax - movl LRV_EDX_OFFSET(%esp), %edx - fldt LRV_ST1_OFFSET(%esp) - fldt LRV_ST0_OFFSET(%esp) -#ifdef HAVE_MPX_SUPPORT - bndmov LRV_BND0_OFFSET(%esp), %bnd0 - bndmov LRV_BND1_OFFSET(%esp), %bnd1 -#else - .byte 0x66,0x0f,0x1a,0x44,0x24,LRV_BND0_OFFSET - .byte 0x66,0x0f,0x1a,0x4c,0x24,LRV_BND1_OFFSET -#endif - # Restore stack before return. - addl $(LRV_SIZE + 4 + LR_SIZE + 4), %esp - cfi_adjust_cfa_offset (-(LRV_SIZE + 4 + LR_SIZE + 4)) - PRESERVE_BND_REGS_PREFIX - ret - cfi_endproc - .size _dl_runtime_profile, .-_dl_runtime_profile -#endif diff --git a/sysdeps/i386/ffs.c b/sysdeps/i386/ffs.c deleted file mode 100644 index c229c8166e..0000000000 --- a/sysdeps/i386/ffs.c +++ /dev/null @@ -1,50 +0,0 @@ -/* ffs -- find first set bit in a word, counted from least significant end. - For Intel 80x86, x>=3. - This file is part of the GNU C Library. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - Contributed by Torbjorn Granlund (tege@sics.se). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define ffsl __something_else -#include - -#undef ffs - -#ifdef __GNUC__ - -int -__ffs (int x) -{ - int cnt; - int tmp; - - asm ("xorl %0,%0\n" /* Set CNT to zero. */ - "bsfl %2,%1\n" /* Count low bits in X and store in %1. */ - "jz 1f\n" /* Jump if OK, i.e. X was non-zero. */ - "leal 1(%1),%0\n" /* Return bsfl-result plus one on %0. */ - "1:" : "=&a" (cnt), "=r" (tmp) : "rm" (x)); - - return cnt; -} -weak_alias (__ffs, ffs) -libc_hidden_def (__ffs) -libc_hidden_builtin_def (ffs) -#undef ffsl -weak_alias (__ffs, ffsl) - -#else -#include -#endif diff --git a/sysdeps/i386/fpu/Implies b/sysdeps/i386/fpu/Implies deleted file mode 100644 index 2b745a34fb..0000000000 --- a/sysdeps/i386/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -x86/fpu diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions deleted file mode 100644 index a2eec371f1..0000000000 --- a/sysdeps/i386/fpu/Versions +++ /dev/null @@ -1,6 +0,0 @@ -libm { - GLIBC_2.2 { - # functions used in inline functions or macros - __expl; __expm1l; - } -} diff --git a/sysdeps/i386/fpu/doasin.c b/sysdeps/i386/fpu/doasin.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/i386/fpu/doasin.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/i386/fpu/e_acos.S b/sysdeps/i386/fpu/e_acos.S deleted file mode 100644 index 586c7fc406..0000000000 --- a/sysdeps/i386/fpu/e_acos.S +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: e_acos.S,v 1.4 1995/05/08 23:44:37 jtc Exp $") - -/* acos = atan (sqrt((1-x) (1+x)) / x) */ -ENTRY(__ieee754_acos) - fldl 4(%esp) /* x */ - fld %st /* x : x */ - fld1 /* 1 : x : x */ - fsubp /* 1 - x : x */ - fld1 /* 1 : 1 - x : x */ - fadd %st(2) /* 1 + x : 1 - x : x */ - fmulp /* 1 - x^2 : x */ - fsqrt /* sqrt (1 - x^2) : x */ - fabs - fxch %st(1) /* x : sqrt (1 - x^2) */ - fpatan /* atan (sqrt(1 - x^2) / x) */ - ret -END (__ieee754_acos) -strong_alias (__ieee754_acos, __acos_finite) diff --git a/sysdeps/i386/fpu/e_acosf.S b/sysdeps/i386/fpu/e_acosf.S deleted file mode 100644 index 54930af8b2..0000000000 --- a/sysdeps/i386/fpu/e_acosf.S +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * Adapted for float type by Ulrich Drepper . - */ - -#include - -RCSID("$NetBSD: $") - -/* acos = atan (sqrt(1 - x^2) / x) */ -ENTRY(__ieee754_acosf) - flds 4(%esp) /* x */ - fld %st - fmul %st(0) /* x^2 */ - fld1 - fsubp /* 1 - x^2 */ - fsqrt /* sqrt (1 - x^2) */ - fabs - fxch %st(1) - fpatan - ret -END (__ieee754_acosf) -strong_alias (__ieee754_acosf, __acosf_finite) diff --git a/sysdeps/i386/fpu/e_acosh.S b/sysdeps/i386/fpu/e_acosh.S deleted file mode 100644 index 9555ef8078..0000000000 --- a/sysdeps/i386/fpu/e_acosh.S +++ /dev/null @@ -1,101 +0,0 @@ -/* ix87 specific implementation of arcsinh. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - - .text -ENTRY(__ieee754_acosh) - movl 8(%esp), %ecx - cmpl $0x3ff00000, %ecx - jl 5f // < 1 => invalid - fldln2 // log(2) - fldl 4(%esp) // x : log(2) - cmpl $0x41b00000, %ecx - ja 3f // x > 2^28 -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - cmpl $0x40000000, %ecx - ja 4f // x > 2 - - // 1 <= x <= 2 => y = log1p(x-1+sqrt(2*(x-1)+(x-1)^2)) - fsubl MO(one) // x-1 : log(2) - fabs // acosh(1) is +0 in all rounding modes - fld %st // x-1 : x-1 : log(2) - fmul %st(1) // (x-1)^2 : x-1 : log(2) - fadd %st(1) // x-1+(x-1)^2 : x-1 : log(2) - fadd %st(1) // 2*(x-1)+(x-1)^2 : x-1 : log(2) - fsqrt // sqrt(2*(x-1)+(x-1)^2) : x-1 : log(2) - faddp // x-1+sqrt(2*(x-1)+(x-1)^2) : log(2) - fcoml MO(limit) - fnstsw - sahf - ja 2f - fyl2xp1 // log1p(x-1+sqrt(2*(x-1)+(x-1)^2)) - ret - -2: faddl MO(one) // x+sqrt(2*(x-1)+(x-1)^2) : log(2) - fyl2x // log(x+sqrt(2*(x-1)+(x-1)^2)) - ret - - // x > 2^28 => y = log(x) + log(2) - .align ALIGNARG(4) -3: fyl2x // log(x) - fldln2 // log(2) : log(x) - faddp // log(x)+log(2) - ret - - // 2^28 > x > 2 => y = log(2*x - 1/(x+sqrt(x*x-1))) - .align ALIGNARG(4) -4: fld %st // x : x : log(2) - fadd %st, %st(1) // x : 2*x : log(2) - fld %st // x : x : 2*x : log(2) - fmul %st(1) // x^2 : x : 2*x : log(2) - fsubl MO(one) // x^2-1 : x : 2*x : log(2) - fsqrt // sqrt(x^2-1) : x : 2*x : log(2) - faddp // x+sqrt(x^2-1) : 2*x : log(2) - fdivrl MO(one) // 1/(x+sqrt(x^2-1)) : 2*x : log(2) - fsubrp // 2*x+1/(x+sqrt(x^2)-1) : log(2) - fyl2x // log(2*x+1/(x+sqrt(x^2-1))) - ret - - // x < 1 (or -NaN) => NaN - .align ALIGNARG(4) -5: fldl 4(%esp) - fsub %st - fdiv %st, %st(0) - ret -END(__ieee754_acosh) -strong_alias (__ieee754_acosh, __acosh_finite) diff --git a/sysdeps/i386/fpu/e_acoshf.S b/sysdeps/i386/fpu/e_acoshf.S deleted file mode 100644 index 662fda3c06..0000000000 --- a/sysdeps/i386/fpu/e_acoshf.S +++ /dev/null @@ -1,101 +0,0 @@ -/* ix87 specific implementation of arcsinh. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - - .text -ENTRY(__ieee754_acoshf) - movl 4(%esp), %ecx - cmpl $0x3f800000, %ecx - jl 5f // < 1 => invalid - fldln2 // log(2) - flds 4(%esp) // x : log(2) - cmpl $0x47000000, %ecx - ja 3f // x > 2^14 -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - cmpl $0x40000000, %ecx - ja 4f // x > 2 - - // 1 <= x <= 2 => y = log1p(x-1+sqrt(2*(x-1)+(x-1)^2)) - fsubl MO(one) // x-1 : log(2) - fabs // acosh(1) is +0 in all rounding modes - fld %st // x-1 : x-1 : log(2) - fmul %st(1) // (x-1)^2 : x-1 : log(2) - fadd %st(1) // x-1+(x-1)^2 : x-1 : log(2) - fadd %st(1) // 2*(x-1)+(x-1)^2 : x-1 : log(2) - fsqrt // sqrt(2*(x-1)+(x-1)^2) : x-1 : log(2) - faddp // x-1+sqrt(2*(x-1)+(x-1)^2) : log(2) - fcoml MO(limit) - fnstsw - sahf - ja 2f - fyl2xp1 // log1p(x-1+sqrt(2*(x-1)+(x-1)^2)) - ret - -2: faddl MO(one) // x+sqrt(2*(x-1)+(x-1)^2) : log(2) - fyl2x // log(x+sqrt(2*(x-1)+(x-1)^2)) - ret - - // x > 2^14 => y = log(x) + log(2) - .align ALIGNARG(4) -3: fyl2x // log(x) - fldln2 // log(2) : log(x) - faddp // log(x)+log(2) - ret - - // 2^28 > x > 2 => y = log(2*x - 1/(x+sqrt(x*x-1))) - .align ALIGNARG(4) -4: fld %st // x : x : log(2) - fadd %st, %st(1) // x : 2*x : log(2) - fld %st // x : x : 2*x : log(2) - fmul %st(1) // x^2 : x : 2*x : log(2) - fsubl MO(one) // x^2-1 : x : 2*x : log(2) - fsqrt // sqrt(x^2-1) : x : 2*x : log(2) - faddp // x+sqrt(x^2-1) : 2*x : log(2) - fdivrl MO(one) // 1/(x+sqrt(x^2-1)) : 2*x : log(2) - fsubrp // 2*x+1/(x+sqrt(x^2)-1) : log(2) - fyl2x // log(2*x+1/(x+sqrt(x^2-1))) - ret - - // x < 1 (or -NaN) => NaN - .align ALIGNARG(4) -5: flds 4(%esp) - fsub %st - fdiv %st, %st(0) - ret -END(__ieee754_acoshf) -strong_alias (__ieee754_acoshf, __acoshf_finite) diff --git a/sysdeps/i386/fpu/e_acoshl.S b/sysdeps/i386/fpu/e_acoshl.S deleted file mode 100644 index e0d6466aac..0000000000 --- a/sysdeps/i386/fpu/e_acoshl.S +++ /dev/null @@ -1,107 +0,0 @@ -/* ix87 specific implementation of arcsinh. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - /* Please note that we use double value for 1.0. This number - has an exact representation and so we don't get accuracy - problems. The advantage is that the code is simpler. */ - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - - .text -ENTRY(__ieee754_acoshl) - movl 12(%esp), %ecx - andl $0xffff, %ecx - cmpl $0x3fff, %ecx - jl 5f // < 1 => invalid - fldln2 // log(2) - fldt 4(%esp) // x : log(2) - cmpl $0x4020, %ecx - ja 3f // x > 2^34 -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - cmpl $0x4000, %ecx - ja 4f // x > 2 - - // 1 <= x <= 2 => y = log1p(x-1+sqrt(2*(x-1)+(x-1)^2)) - fsubl MO(one) // x-1 : log(2) - fabs // acosh(1) is +0 in all rounding modes - fld %st // x-1 : x-1 : log(2) - fmul %st(1) // (x-1)^2 : x-1 : log(2) - fadd %st(1) // x-1+(x-1)^2 : x-1 : log(2) - fadd %st(1) // 2*(x-1)+(x-1)^2 : x-1 : log(2) - fsqrt // sqrt(2*(x-1)+(x-1)^2) : x-1 : log(2) - faddp // x-1+sqrt(2*(x-1)+(x-1)^2) : log(2) - fcoml MO(limit) - fnstsw - sahf - ja 2f - fyl2xp1 // log1p(x-1+sqrt(2*(x-1)+(x-1)^2)) - ret - -2: faddl MO(one) // x+sqrt(2*(x-1)+(x-1)^2) : log(2) - fyl2x // log(x+sqrt(2*(x-1)+(x-1)^2)) - ret - - // x > 2^34 => y = log(x) + log(2) - .align ALIGNARG(4) -3: fyl2x // log(x) - fldln2 // log(2) : log(x) - faddp // log(x)+log(2) - ret - - // 2^34 > x > 2 => y = log(2*x - 1/(x+sqrt(x*x-1))) - .align ALIGNARG(4) -4: fld %st // x : x : log(2) - fadd %st, %st(1) // x : 2*x : log(2) - fld %st // x : x : 2*x : log(2) - fmul %st(1) // x^2 : x : 2*x : log(2) - fsubl MO(one) // x^2-1 : x : 2*x : log(2) - fsqrt // sqrt(x^2-1) : x : 2*x : log(2) - faddp // x+sqrt(x^2-1) : 2*x : log(2) - fdivrl MO(one) // 1/(x+sqrt(x^2-1)) : 2*x : log(2) - fsubrp // 2*x+1/(x+sqrt(x^2)-1) : log(2) - fyl2x // log(2*x+1/(x+sqrt(x^2-1))) - ret - - // x < 1 => NaN - .align ALIGNARG(4) -5: fldz - fdiv %st, %st(0) - ret -END(__ieee754_acoshl) -strong_alias (__ieee754_acoshl, __acoshl_finite) diff --git a/sysdeps/i386/fpu/e_acosl.c b/sysdeps/i386/fpu/e_acosl.c deleted file mode 100644 index ab08931924..0000000000 --- a/sysdeps/i386/fpu/e_acosl.c +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - */ - -#include - -long double -__ieee754_acosl (long double x) -{ - long double res; - - /* acosl = atanl (sqrtl((1-x) (1+x)) / x) */ - asm ( "fld %%st\n" - "fld1\n" - "fsubp\n" - "fld1\n" - "fadd %%st(2)\n" - "fmulp\n" /* 1 - x^2 */ - "fsqrt\n" /* sqrtl (1 - x^2) */ - "fabs\n" - "fxch %%st(1)\n" - "fpatan" - : "=t" (res) : "0" (x) : "st(1)"); - return res; -} -strong_alias (__ieee754_acosl, __acosl_finite) diff --git a/sysdeps/i386/fpu/e_asin.S b/sysdeps/i386/fpu/e_asin.S deleted file mode 100644 index 39c8b47da4..0000000000 --- a/sysdeps/i386/fpu/e_asin.S +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include -#include - -RCSID("$NetBSD: e_asin.S,v 1.4 1995/05/08 23:45:40 jtc Exp $") - -DEFINE_DBL_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -#else -# define MO(op) op -#endif - - .text - -/* asin = atan (x / sqrt((1-x) (1+x))) */ -ENTRY(__ieee754_asin) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - fldl 4(%esp) /* x */ - fld %st - fld1 /* 1 : x : x */ - fsubp /* 1 - x : x */ - fld1 /* 1 : 1 - x : x */ - fadd %st(2) /* 1 + x : 1 - x : x */ - fmulp /* 1 - x^2 */ - fsqrt /* sqrt (1 - x^2) */ - fpatan - DBL_CHECK_FORCE_UFLOW - ret -END (__ieee754_asin) -strong_alias (__ieee754_asin, __asin_finite) diff --git a/sysdeps/i386/fpu/e_asinf.S b/sysdeps/i386/fpu/e_asinf.S deleted file mode 100644 index 1102bdedfd..0000000000 --- a/sysdeps/i386/fpu/e_asinf.S +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * Adapted for float type by Ulrich Drepper . - */ - -#include -#include - -RCSID("$NetBSD: $") - - .section .rodata.cst4,"aM",@progbits,4 - -DEFINE_FLT_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -#else -# define MO(op) op -#endif - - .text - -/* asin = atan (x / sqrt(1 - x^2)) */ -ENTRY(__ieee754_asinf) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - flds 4(%esp) /* x */ - fld %st - fmul %st(0) /* x^2 */ - fld1 - fsubp /* 1 - x^2 */ - fsqrt /* sqrt (1 - x^2) */ - fpatan - FLT_CHECK_FORCE_UFLOW - ret -END (__ieee754_asinf) -strong_alias (__ieee754_asinf, __asinf_finite) diff --git a/sysdeps/i386/fpu/e_atan2.S b/sysdeps/i386/fpu/e_atan2.S deleted file mode 100644 index 25f43bb5a1..0000000000 --- a/sysdeps/i386/fpu/e_atan2.S +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include -#include - -RCSID("$NetBSD: e_atan2.S,v 1.4 1995/05/08 23:46:28 jtc Exp $") - -DEFINE_DBL_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_atan2) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - fldl 4(%esp) - fldl 12(%esp) - fpatan - DBL_CHECK_FORCE_UFLOW_NARROW - ret -END (__ieee754_atan2) -strong_alias (__ieee754_atan2, __atan2_finite) diff --git a/sysdeps/i386/fpu/e_atan2f.S b/sysdeps/i386/fpu/e_atan2f.S deleted file mode 100644 index 2bc909a762..0000000000 --- a/sysdeps/i386/fpu/e_atan2f.S +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include -#include - -RCSID("$NetBSD: e_atan2f.S,v 1.1 1995/05/08 23:35:10 jtc Exp $") - -DEFINE_FLT_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_atan2f) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - flds 4(%esp) - flds 8(%esp) - fpatan - FLT_CHECK_FORCE_UFLOW_NARROW - ret -END (__ieee754_atan2f) -strong_alias (__ieee754_atan2f, __atan2f_finite) diff --git a/sysdeps/i386/fpu/e_atan2l.c b/sysdeps/i386/fpu/e_atan2l.c deleted file mode 100644 index 9f88bfcc08..0000000000 --- a/sysdeps/i386/fpu/e_atan2l.c +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - */ - -#include - -long double -__ieee754_atan2l (long double y, long double x) -{ - long double res; - - asm ("fpatan" : "=t" (res) : "u" (y), "0" (x) : "st(1)"); - - return res; -} -strong_alias (__ieee754_atan2l, __atan2l_finite) diff --git a/sysdeps/i386/fpu/e_atanh.S b/sysdeps/i386/fpu/e_atanh.S deleted file mode 100644 index cbc93d5da2..0000000000 --- a/sysdeps/i386/fpu/e_atanh.S +++ /dev/null @@ -1,112 +0,0 @@ -/* ix87 specific implementation of arctanh function. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section .rodata - - .align ALIGNARG(4) - .type half,@object -half: .double 0.5 - ASM_SIZE_DIRECTIVE(half) - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - .type ln2_2,@object -ln2_2: .tfloat 0.3465735902799726547086160 - ASM_SIZE_DIRECTIVE(ln2_2) - -DEFINE_DBL_MIN - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - - .text -ENTRY(__ieee754_atanh) - movl 8(%esp), %ecx - - movl %ecx, %eax - andl $0x7fffffff, %eax - cmpl $0x7ff00000, %eax - jae 5f -7: - -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - - andl $0x80000000, %ecx // ECX == 0 iff X >= 0 - - fldt MO(ln2_2) // 0.5*ln2 - xorl %ecx, 8(%esp) - fldl 4(%esp) // |x| : 0.5*ln2 - fcoml MO(half) // |x| : 0.5*ln2 - fld %st // |x| : |x| : 0.5*ln2 - fnstsw // |x| : |x| : 0.5*ln2 - sahf - jae 2f - fadd %st, %st(1) // |x| : 2*|x| : 0.5*ln2 - fld %st // |x| : |x| : 2*|x| : 0.5*ln2 - fsubrl MO(one) // 1-|x| : |x| : 2*|x| : 0.5*ln2 - fxch // |x| : 1-|x| : 2*|x| : 0.5*ln2 - fmul %st(2) // 2*|x|^2 : 1-|x| : 2*|x| : 0.5*ln2 - fdivp // (2*|x|^2)/(1-|x|) : 2*|x| : 0.5*ln2 - faddp // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2 - fcoml MO(limit) // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2 - fnstsw // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2 - sahf - jae 4f - fyl2xp1 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|)) - DBL_CHECK_FORCE_UFLOW_NONNEG - jecxz 3f - fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x)) -3: ret - - .align ALIGNARG(4) -4: faddl MO(one) // 1+2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2 - fyl2x // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|)) - jecxz 3f - fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x)) -3: ret - - .align ALIGNARG(4) -2: faddl MO(one) // 1+|x| : |x| : 0.5*ln2 - fxch // |x| : 1+|x| : 0.5*ln2 - fsubrl MO(one) // 1-|x| : 1+|x| : 0.5*ln2 - fdivrp // (1+|x|)/(1-|x|) : 0.5*ln2 - fyl2x // 0.5*ln2*ld((1+|x|)/(1-|x|)) - jecxz 3f - fchs // 0.5*ln2*ld((1+x)/(1-x)) -3: ret - - // x == NaN or ±Inf -5: ja 6f - cmpl $0, 4(%esp) - je 7b -6: fldl 4(%esp) - ret -END(__ieee754_atanh) -strong_alias (__ieee754_atanh, __atanh_finite) diff --git a/sysdeps/i386/fpu/e_atanhf.S b/sysdeps/i386/fpu/e_atanhf.S deleted file mode 100644 index 92fda3fd82..0000000000 --- a/sysdeps/i386/fpu/e_atanhf.S +++ /dev/null @@ -1,109 +0,0 @@ -/* ix87 specific implementation of arctanh function. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section .rodata - - .align ALIGNARG(4) - .type half,@object -half: .double 0.5 - ASM_SIZE_DIRECTIVE(half) - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - .align ALIGNARG(4) - .type ln2_2,@object -ln2_2: .tfloat 0.3465735902799726547086160 - ASM_SIZE_DIRECTIVE(ln2_2) - -DEFINE_FLT_MIN - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - - .text -ENTRY(__ieee754_atanhf) - movl 4(%esp), %ecx - - movl %ecx, %eax - andl $0x7fffffff, %eax - cmpl $0x7f800000, %eax - ja 5f - -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - - andl $0x80000000, %ecx // ECX == 0 iff X >= 0 - - fldt MO(ln2_2) // 0.5*ln2 - xorl %ecx, 4(%esp) - flds 4(%esp) // |x| : 0.5*ln2 - fcoml MO(half) // |x| : 0.5*ln2 - fld %st(0) // |x| : |x| : 0.5*ln2 - fnstsw // |x| : |x| : 0.5*ln2 - sahf - jae 2f - fadd %st, %st(1) // |x| : 2*|x| : 0.5*ln2 - fld %st // |x| : |x| : 2*|x| : 0.5*ln2 - fsubrl MO(one) // 1-|x| : |x| : 2*|x| : 0.5*ln2 - fxch // |x| : 1-|x| : 2*|x| : 0.5*ln2 - fmul %st(2) // 2*|x|^2 : 1-|x| : 2*|x| : 0.5*ln2 - fdivp // (2*|x|^2)/(1-|x|) : 2*|x| : 0.5*ln2 - faddp // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2 - fcoml MO(limit) // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2 - fnstsw // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2 - sahf - jae 4f - fyl2xp1 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|)) - FLT_CHECK_FORCE_UFLOW_NONNEG - jecxz 3f - fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x)) -3: ret - - .align ALIGNARG(4) -4: faddl MO(one) // 1+2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2 - fyl2x // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|)) - jecxz 3f - fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x)) -3: ret - - .align ALIGNARG(4) -2: faddl MO(one) // 1+|x| : |x| : 0.5*ln2 - fxch // |x| : 1+|x| : 0.5*ln2 - fsubrl MO(one) // 1-|x| : 1+|x| : 0.5*ln2 - fdivrp // (1+|x|)/(1-|x|) : 0.5*ln2 - fyl2x // 0.5*ln2*ld((1+|x|)/(1-|x|)) - jecxz 3f - fchs // 0.5*ln2*ld((1+x)/(1-x)) -3: ret - - // x == NaN -5: flds 4(%esp) - ret -END(__ieee754_atanhf) -strong_alias (__ieee754_atanhf, __atanhf_finite) diff --git a/sysdeps/i386/fpu/e_atanhl.S b/sysdeps/i386/fpu/e_atanhl.S deleted file mode 100644 index 31ff7e5182..0000000000 --- a/sysdeps/i386/fpu/e_atanhl.S +++ /dev/null @@ -1,127 +0,0 @@ -/* ix87 specific implementation of arctanh function. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata - - .align ALIGNARG(4) - /* Please note that we use double values for 0.5 and 1.0. These - numbers have exact representations and so we don't get accuracy - problems. The advantage is that the code is simpler. */ - .type half,@object -half: .double 0.5 - ASM_SIZE_DIRECTIVE(half) - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - .align ALIGNARG(4) - .type ln2_2,@object -ln2_2: .tfloat 0.3465735902799726547086160 - ASM_SIZE_DIRECTIVE(ln2_2) - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - - .text -ENTRY(__ieee754_atanhl) - movl 12(%esp), %ecx - - movl %ecx, %eax - andl $0x7fff, %eax - cmpl $0x7fff, %eax - je 5f - cmpl $0x3fdf, %eax - jge 7f - // Exponent below -32; return x, with underflow if subnormal. - fldt 4(%esp) - cmpl $0, %eax - jne 8f - fld %st(0) - fmul %st(0) - fstp %st(0) -8: ret -7: - -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - - andl $0x8000, %ecx // ECX == 0 iff X >= 0 - - fldt MO(ln2_2) // 0.5*ln2 - xorl %ecx, 12(%esp) - fldt 4(%esp) // |x| : 0.5*ln2 - fcoml MO(half) // |x| : 0.5*ln2 - fld %st(0) // |x| : |x| : 0.5*ln2 - fnstsw // |x| : |x| : 0.5*ln2 - sahf - jae 2f - fadd %st, %st(1) // |x| : 2*|x| : 0.5*ln2 - fld %st // |x| : |x| : 2*|x| : 0.5*ln2 - fsubrl MO(one) // 1-|x| : |x| : 2*|x| : 0.5*ln2 - fxch // |x| : 1-|x| : 2*|x| : 0.5*ln2 - fmul %st(2) // 2*|x|^2 : 1-|x| : 2*|x| : 0.5*ln2 - fdivp // (2*|x|^2)/(1-|x|) : 2*|x| : 0.5*ln2 - faddp // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2 - fcoml MO(limit) // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2 - fnstsw // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2 - sahf - jae 4f - fyl2xp1 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|)) - jecxz 3f - fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x)) -3: ret - - .align ALIGNARG(4) -4: faddl MO(one) // 1+2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2 - fyl2x // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|)) - jecxz 3f - fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x)) -3: ret - - .align ALIGNARG(4) -2: faddl MO(one) // 1+|x| : |x| : 0.5*ln2 - fxch // |x| : 1+|x| : 0.5*ln2 - fsubrl MO(one) // 1-|x| : 1+|x| : 0.5*ln2 - fdivrp // (1+|x|)/(1-|x|) : 0.5*ln2 - fyl2x // 0.5*ln2*ld((1+|x|)/(1-|x|)) - jecxz 3f - fchs // 0.5*ln2*ld((1+x)/(1-x)) -3: ret - - // x == NaN or ±Inf -5: cmpl $0x80000000, 8(%esp) - ja 6f - cmpl $0, 4(%esp) - je 7b -6: fldt 4(%esp) - fadd %st(0) - ret -END(__ieee754_atanhl) -strong_alias (__ieee754_atanhl, __atanhl_finite) diff --git a/sysdeps/i386/fpu/e_exp.S b/sysdeps/i386/fpu/e_exp.S deleted file mode 100644 index a7e7f13f6f..0000000000 --- a/sysdeps/i386/fpu/e_exp.S +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include -#include - -DEFINE_DBL_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -#else -# define MO(op) op -#endif - - .text -/* e^x = 2^(x * log2(e)) */ -ENTRY(__ieee754_exp) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - fldl 4(%esp) -/* I added the following ugly construct because exp(+-Inf) resulted - in NaN. The ugliness results from the bright minds at Intel. - For the i686 the code can be written better. - -- drepper@cygnus.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - fldl2e - fmulp /* x * log2(e) */ - fld %st - frndint /* int(x * log2(e)) */ - fsubr %st,%st(1) /* fract(x * log2(e)) */ - fxch - f2xm1 /* 2^(fract(x * log2(e))) - 1 */ - fld1 - faddp /* 2^(fract(x * log2(e))) */ - fscale /* e^x */ - fstp %st(1) - DBL_NARROW_EVAL_UFLOW_NONNEG_NAN - ret - -1: testl $0x200, %eax /* Test sign. */ - jz 2f /* If positive, jump. */ - fstp %st - fldz /* Set result to 0. */ -2: ret -END (__ieee754_exp) - - -ENTRY(__exp_finite) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - fldl2e - fmull 4(%esp) /* x * log2(e) */ - fld %st - frndint /* int(x * log2(e)) */ - fsubr %st,%st(1) /* fract(x * log2(e)) */ - fxch - f2xm1 /* 2^(fract(x * log2(e))) - 1 */ - fld1 - faddp /* 2^(fract(x * log2(e))) */ - fscale /* e^x */ - fstp %st(1) - DBL_NARROW_EVAL_UFLOW_NONNEG - ret -END(__exp_finite) diff --git a/sysdeps/i386/fpu/e_exp10.S b/sysdeps/i386/fpu/e_exp10.S deleted file mode 100644 index acb5160a3f..0000000000 --- a/sysdeps/i386/fpu/e_exp10.S +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Written by Ulrich Drepper . - */ - -#include -#include - -DEFINE_DBL_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -#else -# define MO(op) op -#endif - - .text -/* 10^x = 2^(x * log2(10)) */ -ENTRY(__ieee754_exp10) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - fldl 4(%esp) -/* I added the following ugly construct because exp(+-Inf) resulted - in NaN. The ugliness results from the bright minds at Intel. - For the i686 the code can be written better. - -- drepper@cygnus.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - fldl2t - fmulp /* x * log2(10) */ - fld %st - frndint /* int(x * log2(10)) */ - fsubr %st,%st(1) /* fract(x * log2(10)) */ - fxch - f2xm1 /* 2^(fract(x * log2(10))) - 1 */ - fld1 - faddp /* 2^(fract(x * log2(10))) */ - fscale /* e^x */ - fstp %st(1) - DBL_NARROW_EVAL_UFLOW_NONNEG_NAN - ret - -1: testl $0x200, %eax /* Test sign. */ - jz 2f /* If positive, jump. */ - fstp %st - fldz /* Set result to 0. */ -2: ret -END (__ieee754_exp10) -strong_alias (__ieee754_exp10, __exp10_finite) diff --git a/sysdeps/i386/fpu/e_exp10f.S b/sysdeps/i386/fpu/e_exp10f.S deleted file mode 100644 index 1812b34398..0000000000 --- a/sysdeps/i386/fpu/e_exp10f.S +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Written by Ulrich Drepper. - */ - -#include -#include - -DEFINE_FLT_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -#else -# define MO(op) op -#endif - - .text -/* 10^x = 2^(x * log2(10)) */ -ENTRY(__ieee754_exp10f) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - flds 4(%esp) -/* I added the following ugly construct because exp(+-Inf) resulted - in NaN. The ugliness results from the bright minds at Intel. - For the i686 the code can be written better. - -- drepper@cygnus.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - fldl2t - fmulp /* x * log2(10) */ - fld %st - frndint /* int(x * log2(10)) */ - fsubr %st,%st(1) /* fract(x * log2(10)) */ - fxch - f2xm1 /* 2^(fract(x * log2(10))) - 1 */ - fld1 - faddp /* 2^(fract(x * log2(10))) */ - fscale /* e^x */ - fstp %st(1) - FLT_NARROW_EVAL_UFLOW_NONNEG_NAN - ret - -1: testl $0x200, %eax /* Test sign. */ - jz 2f /* If positive, jump. */ - fstp %st - fldz /* Set result to 0. */ -2: ret -END (__ieee754_exp10f) -strong_alias (__ieee754_exp10f, __exp10f_finite) diff --git a/sysdeps/i386/fpu/e_exp10l.S b/sysdeps/i386/fpu/e_exp10l.S deleted file mode 100644 index d843e2b5e8..0000000000 --- a/sysdeps/i386/fpu/e_exp10l.S +++ /dev/null @@ -1,2 +0,0 @@ -#define USE_AS_EXP10L -#include diff --git a/sysdeps/i386/fpu/e_exp2.S b/sysdeps/i386/fpu/e_exp2.S deleted file mode 100644 index fc16a96053..0000000000 --- a/sysdeps/i386/fpu/e_exp2.S +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Written by J.T. Conklin . - * Adapted for exp2 by Ulrich Drepper . - * Public domain. - */ - -#include -#include - -DEFINE_DBL_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_exp2) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - fldl 4(%esp) -/* I added the following ugly construct because exp(+-Inf) resulted - in NaN. The ugliness results from the bright minds at Intel. - For the i686 the code can be written better. - -- drepper@cygnus.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - fld %st - frndint /* int(x) */ - fsubr %st,%st(1) /* fract(x) */ - fxch - f2xm1 /* 2^(fract(x)) - 1 */ - fld1 - faddp /* 2^(fract(x)) */ - fscale /* e^x */ - fstp %st(1) - DBL_NARROW_EVAL_UFLOW_NONNEG_NAN - ret - -1: testl $0x200, %eax /* Test sign. */ - jz 2f /* If positive, jump. */ - fstp %st - fldz /* Set result to 0. */ -2: ret -END (__ieee754_exp2) -strong_alias (__ieee754_exp2, __exp2_finite) diff --git a/sysdeps/i386/fpu/e_exp2f.S b/sysdeps/i386/fpu/e_exp2f.S deleted file mode 100644 index 30623cd850..0000000000 --- a/sysdeps/i386/fpu/e_exp2f.S +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Written by J.T. Conklin . - * Adapted for exp2 by Ulrich Drepper . - * Public domain. - */ - -#include -#include - -DEFINE_FLT_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_exp2f) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - flds 4(%esp) -/* I added the following ugly construct because exp(+-Inf) resulted - in NaN. The ugliness results from the bright minds at Intel. - For the i686 the code can be written better. - -- drepper@cygnus.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - fld %st - frndint /* int(x) */ - fsubr %st,%st(1) /* fract(x) */ - fxch - f2xm1 /* 2^(fract(x)) - 1 */ - fld1 - faddp /* 2^(fract(x)) */ - fscale /* e^x */ - fstp %st(1) - FLT_NARROW_EVAL_UFLOW_NONNEG_NAN - ret - -1: testl $0x200, %eax /* Test sign. */ - jz 2f /* If positive, jump. */ - fstp %st - fldz /* Set result to 0. */ -2: ret -END (__ieee754_exp2f) -strong_alias (__ieee754_exp2f, __exp2f_finite) diff --git a/sysdeps/i386/fpu/e_exp2l.S b/sysdeps/i386/fpu/e_exp2l.S deleted file mode 100644 index c4cb73d589..0000000000 --- a/sysdeps/i386/fpu/e_exp2l.S +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Written by J.T. Conklin . - * Adapted for exp2 by Ulrich Drepper . - * Public domain. - */ - -#include -#include - -DEFINE_LDBL_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_exp2l) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - fldt 4(%esp) -/* I added the following ugly construct because exp(+-Inf) resulted - in NaN. The ugliness results from the bright minds at Intel. - For the i686 the code can be written better. - -- drepper@cygnus.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - movzwl 4+8(%esp), %eax - andl $0x7fff, %eax - cmpl $0x3fbe, %eax - jge 3f - /* Argument's exponent below -65, result rounds to 1. */ - fld1 - faddp - ret -3: fld %st - frndint /* int(x) */ - fsubr %st,%st(1) /* fract(x) */ - fxch - f2xm1 /* 2^(fract(x)) - 1 */ - fld1 - faddp /* 2^(fract(x)) */ - fscale /* e^x */ - fstp %st(1) - LDBL_CHECK_FORCE_UFLOW_NONNEG_NAN - ret - -1: testl $0x200, %eax /* Test sign. */ - jz 2f /* If positive, jump. */ - fstp %st - fldz /* Set result to 0. */ -2: ret -END (__ieee754_exp2l) -strong_alias (__ieee754_exp2l, __exp2l_finite) diff --git a/sysdeps/i386/fpu/e_expf.S b/sysdeps/i386/fpu/e_expf.S deleted file mode 100644 index 65cb4ec204..0000000000 --- a/sysdeps/i386/fpu/e_expf.S +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * Adapted for float type by Ulrich Drepper . - */ - -#include -#include - -DEFINE_FLT_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -#else -# define MO(op) op -#endif - - .text -/* e^x = 2^(x * log2(e)) */ -ENTRY(__ieee754_expf) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - flds 4(%esp) -/* I added the following ugly construct because exp(+-Inf) resulted - in NaN. The ugliness results from the bright minds at Intel. - For the i686 the code can be written better. - -- drepper@cygnus.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - fldl2e - fmulp /* x * log2(e) */ - fld %st - frndint /* int(x * log2(e)) */ - fsubr %st,%st(1) /* fract(x * log2(e)) */ - fxch - f2xm1 /* 2^(fract(x * log2(e))) - 1 */ - fld1 - faddp /* 2^(fract(x * log2(e))) */ - fscale /* e^x */ - fstp %st(1) - FLT_NARROW_EVAL_UFLOW_NONNEG_NAN - ret - -1: testl $0x200, %eax /* Test sign. */ - jz 2f /* If positive, jump. */ - fstp %st - fldz /* Set result to 0. */ -2: ret -END (__ieee754_expf) - - -ENTRY(__expf_finite) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - fldl2e - fmuls 4(%esp) /* x * log2(e) */ - fld %st - frndint /* int(x * log2(e)) */ - fsubr %st,%st(1) /* fract(x * log2(e)) */ - fxch - f2xm1 /* 2^(fract(x * log2(e))) - 1 */ - fld1 - faddp /* 2^(fract(x * log2(e))) */ - fscale /* e^x */ - fstp %st(1) - FLT_NARROW_EVAL_UFLOW_NONNEG - ret -END(__expf_finite) diff --git a/sysdeps/i386/fpu/e_expl.S b/sysdeps/i386/fpu/e_expl.S deleted file mode 100644 index 7d75fe22a1..0000000000 --- a/sysdeps/i386/fpu/e_expl.S +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - */ - -/* - * The 8087 method for the exponential function is to calculate - * exp(x) = 2^(x log2(e)) - * after separating integer and fractional parts - * x log2(e) = i + f, |f| <= .5 - * 2^i is immediate but f needs to be precise for long double accuracy. - * Suppress range reduction error in computing f by the following. - * Separate x into integer and fractional parts - * x = xi + xf, |xf| <= .5 - * Separate log2(e) into the sum of an exact number c0 and small part c1. - * c0 + c1 = log2(e) to extra precision - * Then - * f = (c0 xi - i) + c0 xf + c1 x - * where c0 xi is exact and so also is (c0 xi - i). - * -- moshier@na-net.ornl.gov - */ - -#include -#include - -#ifdef USE_AS_EXP10L -# define IEEE754_EXPL __ieee754_exp10l -# define EXPL_FINITE __exp10l_finite -# define FLDLOG fldl2t -#elif defined USE_AS_EXPM1L -# define IEEE754_EXPL __expm1l -# undef EXPL_FINITE -# define FLDLOG fldl2e -#else -# define IEEE754_EXPL __ieee754_expl -# define EXPL_FINITE __expl_finite -# define FLDLOG fldl2e -#endif - - .section .rodata.cst16,"aM",@progbits,16 - - .p2align 4 -#ifdef USE_AS_EXP10L - .type c0,@object -c0: .byte 0, 0, 0, 0, 0, 0, 0x9a, 0xd4, 0x00, 0x40 - .byte 0, 0, 0, 0, 0, 0 - ASM_SIZE_DIRECTIVE(c0) - .type c1,@object -c1: .byte 0x58, 0x92, 0xfc, 0x15, 0x37, 0x9a, 0x97, 0xf0, 0xef, 0x3f - .byte 0, 0, 0, 0, 0, 0 - ASM_SIZE_DIRECTIVE(c1) -#else - .type c0,@object -c0: .byte 0, 0, 0, 0, 0, 0, 0xaa, 0xb8, 0xff, 0x3f - .byte 0, 0, 0, 0, 0, 0 - ASM_SIZE_DIRECTIVE(c0) - .type c1,@object -c1: .byte 0x20, 0xfa, 0xee, 0xc2, 0x5f, 0x70, 0xa5, 0xec, 0xed, 0x3f - .byte 0, 0, 0, 0, 0, 0 - ASM_SIZE_DIRECTIVE(c1) -#endif -#ifndef USE_AS_EXPM1L - .type csat,@object -csat: .byte 0, 0, 0, 0, 0, 0, 0, 0x80, 0x0e, 0x40 - .byte 0, 0, 0, 0, 0, 0 - ASM_SIZE_DIRECTIVE(csat) -DEFINE_LDBL_MIN -#endif - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -#else -# define MO(op) op -#endif - - .text -ENTRY(IEEE754_EXPL) -#ifdef USE_AS_EXPM1L - movzwl 4+8(%esp), %eax - xorb $0x80, %ah // invert sign bit (now 1 is "positive") - cmpl $0xc006, %eax // is num positive and exp >= 6 (number is >= 128.0)? - jae HIDDEN_JUMPTARGET (__expl) // (if num is denormal, it is at least >= 64.0) -#endif - fldt 4(%esp) -/* I added the following ugly construct because expl(+-Inf) resulted - in NaN. The ugliness results from the bright minds at Intel. - For the i686 the code can be written better. - -- drepper@cygnus.com. */ - fxam /* Is NaN or +-Inf? */ -#ifdef PIC - LOAD_PIC_REG (cx) -#endif -#ifdef USE_AS_EXPM1L - xorb $0x80, %ah - cmpl $0xc006, %eax - fstsw %ax - movb $0x45, %dh - jb 4f - - /* Below -64.0 (may be -NaN or -Inf). */ - andb %ah, %dh - cmpb $0x01, %dh - je 6f /* Is +-NaN, jump. */ - jmp 1f /* -large, possibly -Inf. */ - -4: /* In range -64.0 to 64.0 (may be +-0 but not NaN or +-Inf). */ - /* Test for +-0 as argument. */ - andb %ah, %dh - cmpb $0x40, %dh - je 2f - - /* Test for arguments that are small but not subnormal. */ - movzwl 4+8(%esp), %eax - andl $0x7fff, %eax - cmpl $0x3fbf, %eax - jge 3f - /* Argument's exponent below -64; avoid spurious underflow if - normal. */ - cmpl $0x0001, %eax - jge 2f - /* Force underflow and return the argument, to avoid wrong signs - of zero results from the code below in some rounding modes. */ - fld %st - fmul %st - fstp %st - jmp 2f -#else - movzwl 4+8(%esp), %eax - andl $0x7fff, %eax - cmpl $0x400d, %eax - jg 5f - cmpl $0x3fbc, %eax - jge 3f - /* Argument's exponent below -67, result rounds to 1. */ - fld1 - faddp - jmp 2f -5: /* Overflow, underflow or infinity or NaN as argument. */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - cmpb $0x01, %dh - je 6f /* Is +-NaN, jump. */ - /* Overflow or underflow; saturate. */ - fstp %st - fldt MO(csat) - andb $2, %ah - jz 3f - fchs -#endif -3: FLDLOG /* 1 log2(base) */ - fmul %st(1), %st /* 1 x log2(base) */ - /* Set round-to-nearest temporarily. */ - subl $8, %esp - cfi_adjust_cfa_offset (8) - fstcw 4(%esp) - movl $0xf3ff, %edx - andl 4(%esp), %edx - movl %edx, (%esp) - fldcw (%esp) - frndint /* 1 i */ - fld %st(1) /* 2 x */ - frndint /* 2 xi */ - fldcw 4(%esp) - addl $8, %esp - cfi_adjust_cfa_offset (-8) - fld %st(1) /* 3 i */ - fldt MO(c0) /* 4 c0 */ - fld %st(2) /* 5 xi */ - fmul %st(1), %st /* 5 c0 xi */ - fsubp %st, %st(2) /* 4 f = c0 xi - i */ - fld %st(4) /* 5 x */ - fsub %st(3), %st /* 5 xf = x - xi */ - fmulp %st, %st(1) /* 4 c0 xf */ - faddp %st, %st(1) /* 3 f = f + c0 xf */ - fldt MO(c1) /* 4 */ - fmul %st(4), %st /* 4 c1 * x */ - faddp %st, %st(1) /* 3 f = f + c1 * x */ - f2xm1 /* 3 2^(fract(x * log2(base))) - 1 */ -#ifdef USE_AS_EXPM1L - fstp %st(1) /* 2 */ - fscale /* 2 scale factor is st(1); base^x - 2^i */ - fxch /* 2 i */ - fld1 /* 3 1.0 */ - fscale /* 3 2^i */ - fld1 /* 4 1.0 */ - fsubrp %st, %st(1) /* 3 2^i - 1.0 */ - fstp %st(1) /* 2 */ - faddp %st, %st(1) /* 1 base^x - 1.0 */ -#else - fld1 /* 4 1.0 */ - faddp /* 3 2^(fract(x * log2(base))) */ - fstp %st(1) /* 2 */ - fscale /* 2 scale factor is st(1); base^x */ - fstp %st(1) /* 1 */ - LDBL_CHECK_FORCE_UFLOW_NONNEG -#endif - fstp %st(1) /* 0 */ - jmp 2f -1: -#ifdef USE_AS_EXPM1L - /* For expm1l, only negative sign gets here. */ - fstp %st - fld1 - fchs -#else - testl $0x200, %eax /* Test sign. */ - jz 2f /* If positive, jump. */ - fstp %st - fldz /* Set result to 0. */ -#endif -2: ret -6: /* NaN argument. */ - fadd %st - ret -END(IEEE754_EXPL) -#ifdef USE_AS_EXPM1L -libm_hidden_def (__expm1l) -weak_alias (__expm1l, expm1l) -#else -strong_alias (IEEE754_EXPL, EXPL_FINITE) -#endif diff --git a/sysdeps/i386/fpu/e_fmod.S b/sysdeps/i386/fpu/e_fmod.S deleted file mode 100644 index 26b3acc392..0000000000 --- a/sysdeps/i386/fpu/e_fmod.S +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -ENTRY(__ieee754_fmod) - fldl 12(%esp) - fldl 4(%esp) -1: fprem - fstsw %ax - sahf - jp 1b - fstp %st(1) - ret -END (__ieee754_fmod) -strong_alias (__ieee754_fmod, __fmod_finite) diff --git a/sysdeps/i386/fpu/e_fmodf.S b/sysdeps/i386/fpu/e_fmodf.S deleted file mode 100644 index ece4d98427..0000000000 --- a/sysdeps/i386/fpu/e_fmodf.S +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * Adapted for float type by Ulrich Drepper . - */ - -#include - -ENTRY(__ieee754_fmodf) - flds 8(%esp) - flds 4(%esp) -1: fprem - fstsw %ax - sahf - jp 1b - fstp %st(1) - ret -END(__ieee754_fmodf) -strong_alias (__ieee754_fmodf, __fmodf_finite) diff --git a/sysdeps/i386/fpu/e_fmodl.c b/sysdeps/i386/fpu/e_fmodl.c deleted file mode 100644 index 49700ae8f6..0000000000 --- a/sysdeps/i386/fpu/e_fmodl.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - */ - -#include - -long double -__ieee754_fmodl (long double x, long double y) -{ - long double res; - - asm ("1:\tfprem\n" - "fstsw %%ax\n" - "sahf\n" - "jp 1b\n" - "fstp %%st(1)" - : "=t" (res) : "0" (x), "u" (y) : "ax", "st(1)"); - return res; -} -strong_alias (__ieee754_fmodl, __fmodl_finite) diff --git a/sysdeps/i386/fpu/e_hypot.S b/sysdeps/i386/fpu/e_hypot.S deleted file mode 100644 index 7403566fd7..0000000000 --- a/sysdeps/i386/fpu/e_hypot.S +++ /dev/null @@ -1,75 +0,0 @@ -/* Compute the hypothenuse of X and Y. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -DEFINE_DBL_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_hypot) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fldl 4(%esp) // x - fxam - fnstsw - fldl 12(%esp) // y : x - movb %ah, %ch - fxam - fnstsw - movb %ah, %al - orb %ch, %ah - sahf - jc 1f - fmul %st(0) // y * y : x - fxch // x : y * y - fmul %st(0) // x * x : y * y - faddp // x * x + y * y - fsqrt - DBL_NARROW_EVAL_UFLOW_NONNEG -2: ret - - // We have to test whether any of the parameters is Inf. - // In this case the result is infinity. -1: andb $0x45, %al - cmpb $5, %al - je 3f // jump if y is Inf - andb $0x45, %ch - cmpb $5, %ch - jne 4f // jump if x is not Inf - fxch -3: fstp %st(1) - fabs - jmp 2b - -4: testb $1, %al - jnz 5f // y is NaN - fxch -5: fstp %st(1) - jmp 2b - -END(__ieee754_hypot) -strong_alias (__ieee754_hypot, __hypot_finite) diff --git a/sysdeps/i386/fpu/e_hypotf.S b/sysdeps/i386/fpu/e_hypotf.S deleted file mode 100644 index 6a2c7052b2..0000000000 --- a/sysdeps/i386/fpu/e_hypotf.S +++ /dev/null @@ -1,64 +0,0 @@ -/* Compute the hypothenuse of X and Y. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY(__ieee754_hypotf) - flds 4(%esp) // x - fxam - fnstsw - flds 8(%esp) // y : x - movb %ah, %ch - fxam - fnstsw - movb %ah, %al - orb %ch, %ah - sahf - jc 1f - fmul %st(0) // y * y : x - fxch // x : y * y - fmul %st(0) // x * x : y * y - faddp // x * x + y * y - fsqrt - FLT_NARROW_EVAL -2: ret - - // We have to test whether any of the parameters is Inf. - // In this case the result is infinity. -1: andb $0x45, %al - cmpb $5, %al - je 3f // jump if y is Inf - andb $0x45, %ch - cmpb $5, %ch - jne 4f // jump if x is not Inf - fxch -3: fstp %st(1) - fabs - jmp 2b - -4: testb $1, %al - jnz 5f // y is NaN - fxch -5: fstp %st(1) - jmp 2b - -END(__ieee754_hypotf) -strong_alias (__ieee754_hypotf, __hypotf_finite) diff --git a/sysdeps/i386/fpu/e_ilogb.S b/sysdeps/i386/fpu/e_ilogb.S deleted file mode 100644 index 29ef2214e6..0000000000 --- a/sysdeps/i386/fpu/e_ilogb.S +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: s_ilogb.S,v 1.5 1995/10/12 15:53:09 jtc Exp $") - -ENTRY(__ieee754_ilogb) - fldl 4(%esp) -/* I added the following ugly construct because ilogb(+-Inf) is - required to return INT_MAX in ISO C99. - -- jakub@redhat.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - cmpb $0x40, %dh - je 2f /* Is +-0, jump. */ - - fxtract - pushl %eax - cfi_adjust_cfa_offset (4) - fstp %st - - fistpl (%esp) - fwait - popl %eax - cfi_adjust_cfa_offset (-4) - - ret - -1: fstp %st - movl $0x7fffffff, %eax - ret -2: fstp %st - movl $0x80000000, %eax /* FP_ILOGB0 */ - ret -END (__ieee754_ilogb) diff --git a/sysdeps/i386/fpu/e_ilogbf.S b/sysdeps/i386/fpu/e_ilogbf.S deleted file mode 100644 index d72de6c84a..0000000000 --- a/sysdeps/i386/fpu/e_ilogbf.S +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: s_ilogbf.S,v 1.4 1995/10/22 20:32:43 pk Exp $") - -ENTRY(__ieee754_ilogbf) - flds 4(%esp) -/* I added the following ugly construct because ilogb(+-Inf) is - required to return INT_MAX in ISO C99. - -- jakub@redhat.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - cmpb $0x40, %dh - je 2f /* Is +-0, jump. */ - - fxtract - pushl %eax - cfi_adjust_cfa_offset (4) - fstp %st - - fistpl (%esp) - fwait - popl %eax - cfi_adjust_cfa_offset (-4) - - ret - -1: fstp %st - movl $0x7fffffff, %eax - ret -2: fstp %st - movl $0x80000000, %eax /* FP_ILOGB0 */ - ret -END (__ieee754_ilogbf) diff --git a/sysdeps/i386/fpu/e_ilogbl.S b/sysdeps/i386/fpu/e_ilogbl.S deleted file mode 100644 index 60761dfa38..0000000000 --- a/sysdeps/i386/fpu/e_ilogbl.S +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changes for long double by Ulrich Drepper - * Public domain. - */ - -#include - -RCSID("$NetBSD: $") - -ENTRY(__ieee754_ilogbl) - fldt 4(%esp) -/* I added the following ugly construct because ilogb(+-Inf) is - required to return INT_MAX in ISO C99. - -- jakub@redhat.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - cmpb $0x40, %dh - je 2f /* Is +-0, jump. */ - - fxtract - pushl %eax - cfi_adjust_cfa_offset (4) - fstp %st - - fistpl (%esp) - fwait - popl %eax - cfi_adjust_cfa_offset (-4) - - ret - -1: fstp %st - movl $0x7fffffff, %eax - ret -2: fstp %st - movl $0x80000000, %eax /* FP_ILOGB0 */ - ret -END (__ieee754_ilogbl) diff --git a/sysdeps/i386/fpu/e_log.S b/sysdeps/i386/fpu/e_log.S deleted file mode 100644 index 335df22577..0000000000 --- a/sysdeps/i386/fpu/e_log.S +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Changed to use fyl2xp1 for values near 1, . - */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_log) - fldln2 // log(2) - fldl 4(%esp) // x : log(2) - fxam - fnstsw -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fld %st // x : x : log(2) - sahf - jc 3f // in case x is NaN or +-Inf -4: fsubl MO(one) // x-1 : x : log(2) - fld %st // x-1 : x-1 : x : log(2) - fabs // |x-1| : x-1 : x : log(2) - fcompl MO(limit) // x-1 : x : log(2) - fnstsw // x-1 : x : log(2) - andb $0x45, %ah - jz 2f - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 5f - fabs // log(1) is +0 in all rounding modes. -5: fstp %st(1) // x-1 : log(2) - fyl2xp1 // log(x) - ret - -2: fstp %st(0) // x : log(2) - fyl2x // log(x) - ret - -3: jp 4b // in case x is +-Inf - fstp %st(1) - fstp %st(1) - ret -END (__ieee754_log) - -ENTRY(__log_finite) - fldln2 // log(2) - fldl 4(%esp) // x : log(2) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fld %st // x : x : log(2) - fsubl MO(one) // x-1 : x : log(2) - fld %st // x-1 : x-1 : x : log(2) - fabs // |x-1| : x-1 : x : log(2) - fcompl MO(limit) // x-1 : x : log(2) - fnstsw // x-1 : x : log(2) - andb $0x45, %ah - jz 2b - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 6f - fabs // log(1) is +0 in all rounding modes. -6: fstp %st(1) // x-1 : log(2) - fyl2xp1 // log(x) - ret -END(__log_finite) diff --git a/sysdeps/i386/fpu/e_log10.S b/sysdeps/i386/fpu/e_log10.S deleted file mode 100644 index 17277084ca..0000000000 --- a/sysdeps/i386/fpu/e_log10.S +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Changed to use fyl2xp1 for values near 1, . - */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_log10) - fldlg2 // log10(2) - fldl 4(%esp) // x : log10(2) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fxam - fnstsw - fld %st // x : x : log10(2) - sahf - jc 3f // in case x is NaN or ±Inf -4: fsubl MO(one) // x-1 : x : log10(2) - fld %st // x-1 : x-1 : x : log10(2) - fabs // |x-1| : x-1 : x : log10(2) - fcompl MO(limit) // x-1 : x : log10(2) - fnstsw // x-1 : x : log10(2) - andb $0x45, %ah - jz 2f - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 5f - fabs // log10(1) is +0 in all rounding modes. -5: fstp %st(1) // x-1 : log10(2) - fyl2xp1 // log10(x) - ret - -2: fstp %st(0) // x : log10(2) - fyl2x // log10(x) - ret - -3: jp 4b // in case x is ±Inf - fstp %st(1) - fstp %st(1) - ret -END (__ieee754_log10) -strong_alias (__ieee754_log10, __log10_finite) diff --git a/sysdeps/i386/fpu/e_log10f.S b/sysdeps/i386/fpu/e_log10f.S deleted file mode 100644 index 72a3b88251..0000000000 --- a/sysdeps/i386/fpu/e_log10f.S +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * Adapted for float type by Ulrich Drepper . - * - * Changed to use fyl2xp1 for values near 1, . - */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_log10f) - fldlg2 // log10(2) - flds 4(%esp) // x : log10(2) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fxam - fnstsw - fld %st // x : x : log10(2) - sahf - jc 3f // in case x is NaN or ±Inf -4: fsubl MO(one) // x-1 : x : log10(2) - fld %st // x-1 : x-1 : x : log10(2) - fabs // |x-1| : x-1 : x : log10(2) - fcompl MO(limit) // x-1 : x : log10(2) - fnstsw // x-1 : x : log10(2) - andb $0x45, %ah - jz 2f - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 5f - fabs // log10(1) is +0 in all rounding modes. -5: fstp %st(1) // x-1 : log10(2) - fyl2xp1 // log10(x) - ret - -2: fstp %st(0) // x : log10(2) - fyl2x // log10(x) - ret - -3: jp 4b // in case x is ±Inf - fstp %st(1) - fstp %st(1) - ret -END (__ieee754_log10f) -strong_alias (__ieee754_log10f, __log10f_finite) diff --git a/sysdeps/i386/fpu/e_log10l.S b/sysdeps/i386/fpu/e_log10l.S deleted file mode 100644 index 9326b19796..0000000000 --- a/sysdeps/i386/fpu/e_log10l.S +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - * - * Changed to use fyl2xp1 for values near 1, . - */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_log10l) - fldlg2 // log10(2) - fldt 4(%esp) // x : log10(2) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fxam - fnstsw - fld %st // x : x : log10(2) - sahf - jc 3f // in case x is NaN or ±Inf -4: fsubl MO(one) // x-1 : x : log10(2) - fld %st // x-1 : x-1 : x : log10(2) - fabs // |x-1| : x-1 : x : log10(2) - fcompl MO(limit) // x-1 : x : log10(2) - fnstsw // x-1 : x : log10(2) - andb $0x45, %ah - jz 2f - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 5f - fabs // log10(1) is +0 in all rounding modes. -5: fstp %st(1) // x-1 : log10(2) - fyl2xp1 // log10(x) - ret - -2: fstp %st(0) // x : log10(2) - fyl2x // log10(x) - ret - -3: jp 4b // in case x is ±Inf - fstp %st(1) - fstp %st(1) - fadd %st(0) - ret -END(__ieee754_log10l) -strong_alias (__ieee754_log10l, __log10l_finite) diff --git a/sysdeps/i386/fpu/e_log2.S b/sysdeps/i386/fpu/e_log2.S deleted file mode 100644 index 73ff0fffd3..0000000000 --- a/sysdeps/i386/fpu/e_log2.S +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Written by J.T. Conklin . - * Adapted for use as log2 by Ulrich Drepper . - * Public domain. - * - * Changed to use fyl2xp1 for values near 1, . - */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_log2) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fldl MO(one) - fldl 4(%esp) // x : 1 - fxam - fnstsw - fld %st // x : x : 1 - sahf - jc 3f // in case x is NaN or ±Inf -4: fsub %st(2), %st // x-1 : x : 1 - fld %st // x-1 : x-1 : x : 1 - fabs // |x-1| : x-1 : x : 1 - fcompl MO(limit) // x-1 : x : 1 - fnstsw // x-1 : x : 1 - andb $0x45, %ah - jz 2f - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 5f - fabs // log2(1) is +0 in all rounding modes. -5: fstp %st(1) // x-1 : 1 - fyl2xp1 // log(x) - ret - -2: fstp %st(0) // x : 1 - fyl2x // log(x) - ret - -3: jp 4b // in case x is ±Inf - fstp %st(1) - fstp %st(1) - ret -END (__ieee754_log2) -strong_alias (__ieee754_log2, __log2_finite) diff --git a/sysdeps/i386/fpu/e_log2f.S b/sysdeps/i386/fpu/e_log2f.S deleted file mode 100644 index 344eeb495e..0000000000 --- a/sysdeps/i386/fpu/e_log2f.S +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Written by J.T. Conklin . - * Adapted for use as log2 by Ulrich Drepper . - * Public domain. - * - * Changed to use fyl2xp1 for values near 1, . - */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_log2f) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fldl MO(one) - flds 4(%esp) // x : 1 - fxam - fnstsw - fld %st // x : x : 1 - sahf - jc 3f // in case x is NaN or ±Inf -4: fsub %st(2), %st // x-1 : x : 1 - fld %st // x-1 : x-1 : x : 1 - fabs // |x-1| : x-1 : x : 1 - fcompl MO(limit) // x-1 : x : 1 - fnstsw // x-1 : x : 1 - andb $0x45, %ah - jz 2f - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 5f - fabs // log2(1) is +0 in all rounding modes. -5: fstp %st(1) // x-1 : 1 - fyl2xp1 // log(x) - ret - -2: fstp %st(0) // x : 1 - fyl2x // log(x) - ret - -3: jp 4b // in case x is ±Inf - fstp %st(1) - fstp %st(1) - ret -END (__ieee754_log2f) -strong_alias (__ieee754_log2f, __log2f_finite) diff --git a/sysdeps/i386/fpu/e_log2l.S b/sysdeps/i386/fpu/e_log2l.S deleted file mode 100644 index 73e62ea908..0000000000 --- a/sysdeps/i386/fpu/e_log2l.S +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Written by J.T. Conklin . - * Adapted for use as log2 by Ulrich Drepper . - * Public domain. - * - * Changed to use fyl2xp1 for values near 1, . - */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_log2l) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fldl MO(one) - fldt 4(%esp) // x : 1 - fxam - fnstsw - fld %st // x : x : 1 - sahf - jc 3f // in case x is NaN or ±Inf -4: fsub %st(2), %st // x-1 : x : 1 - fld %st // x-1 : x-1 : x : 1 - fabs // |x-1| : x-1 : x : 1 - fcompl MO(limit) // x-1 : x : 1 - fnstsw // x-1 : x : 1 - andb $0x45, %ah - jz 2f - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 5f - fabs // log2(1) is +0 in all rounding modes. -5: fstp %st(1) // x-1 : 1 - fyl2xp1 // log(x) - ret - -2: fstp %st(0) // x : 1 - fyl2x // log(x) - ret - -3: jp 4b // in case x is ±Inf - fstp %st(1) - fstp %st(1) - fadd %st(0) - ret -END (__ieee754_log2l) -strong_alias (__ieee754_log2l, __log2l_finite) diff --git a/sysdeps/i386/fpu/e_logf.S b/sysdeps/i386/fpu/e_logf.S deleted file mode 100644 index de967a31f5..0000000000 --- a/sysdeps/i386/fpu/e_logf.S +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * Adapted for float by Ulrich Drepper . - * - * Changed to use fyl2xp1 for values near 1, . - */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_logf) - fldln2 // log(2) - flds 4(%esp) // x : log(2) - fxam - fnstsw -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fld %st // x : x : log(2) - sahf - jc 3f // in case x is NaN or +-Inf -4: fsubl MO(one) // x-1 : x : log(2) - fld %st // x-1 : x-1 : x : log(2) - fabs // |x-1| : x-1 : x : log(2) - fcompl MO(limit) // x-1 : x : log(2) - fnstsw // x-1 : x : log(2) - andb $0x45, %ah - jz 2f - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 5f - fabs // log(1) is +0 in all rounding modes. -5: fstp %st(1) // x-1 : log(2) - fyl2xp1 // log(x) - ret - -2: fstp %st(0) // x : log(2) - fyl2x // log(x) - ret - -3: jp 4b // in case x is +-Inf - fstp %st(1) - fstp %st(1) - ret -END (__ieee754_logf) - -ENTRY(__logf_finite) - fldln2 // log(2) - flds 4(%esp) // x : log(2) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fld %st // x : x : log(2) - fsubl MO(one) // x-1 : x : log(2) - fld %st // x-1 : x-1 : x : log(2) - fabs // |x-1| : x-1 : x : log(2) - fcompl MO(limit) // x-1 : x : log(2) - fnstsw // x-1 : x : log(2) - andb $0x45, %ah - jz 2b - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 6f - fabs // log(1) is +0 in all rounding modes. -6: fstp %st(1) // x-1 : log(2) - fyl2xp1 // log(x) - ret -END(__logf_finite) diff --git a/sysdeps/i386/fpu/e_logl.S b/sysdeps/i386/fpu/e_logl.S deleted file mode 100644 index 53127d704e..0000000000 --- a/sysdeps/i386/fpu/e_logl.S +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - */ - -#include - - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_logl) - fldln2 // log(2) - fldt 4(%esp) // x : log(2) - fxam - fnstsw -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fld %st // x : x : log(2) - sahf - jc 3f // in case x is NaN or +-Inf - movzwl 4+8(%esp), %eax - cmpl $0xc000, %eax - jae 6f // x <= -2, avoid overflow from -LDBL_MAX - 1. -4: fsubl MO(one) // x-1 : x : log(2) -6: fld %st // x-1 : x-1 : x : log(2) - fabs // |x-1| : x-1 : x : log(2) - fcompl MO(limit) // x-1 : x : log(2) - fnstsw // x-1 : x : log(2) - andb $0x45, %ah - jz 2f - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 5f - fabs // log(1) is +0 in all rounding modes. -5: fstp %st(1) // x-1 : log(2) - fyl2xp1 // log(x) - ret - -2: fstp %st(0) // x : log(2) - fyl2x // log(x) - ret - -3: jp 4b // in case x is +-Inf - fstp %st(1) - fstp %st(1) - fadd %st(0) - ret -END (__ieee754_logl) - -ENTRY(__logl_finite) - fldln2 // log(2) - fldt 4(%esp) // x : log(2) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fld %st // x : x : log(2) - fsubl MO(one) // x-1 : x : log(2) - fld %st // x-1 : x-1 : x : log(2) - fabs // |x-1| : x-1 : x : log(2) - fcompl MO(limit) // x-1 : x : log(2) - fnstsw // x-1 : x : log(2) - andb $0x45, %ah - jz 2b - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 7f - fabs // log(1) is +0 in all rounding modes. -7: fstp %st(1) // x-1 : log(2) - fyl2xp1 // log(x) - ret -END(__logl_finite) diff --git a/sysdeps/i386/fpu/e_pow.S b/sysdeps/i386/fpu/e_pow.S deleted file mode 100644 index 2edb9a9fbc..0000000000 --- a/sysdeps/i386/fpu/e_pow.S +++ /dev/null @@ -1,456 +0,0 @@ -/* ix87 specific implementation of pow function. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - .type p63,@object -p63: .byte 0, 0, 0, 0, 0, 0, 0xe0, 0x43 - ASM_SIZE_DIRECTIVE(p63) - .type p10,@object -p10: .byte 0, 0, 0, 0, 0, 0, 0x90, 0x40 - ASM_SIZE_DIRECTIVE(p10) - - .section .rodata.cst16,"aM",@progbits,16 - - .p2align 3 - .type infinity,@object -inf_zero: -infinity: - .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f - ASM_SIZE_DIRECTIVE(infinity) - .type zero,@object -zero: .double 0.0 - ASM_SIZE_DIRECTIVE(zero) - .type minf_mzero,@object -minf_mzero: -minfinity: - .byte 0, 0, 0, 0, 0, 0, 0xf0, 0xff -mzero: - .byte 0, 0, 0, 0, 0, 0, 0, 0x80 - ASM_SIZE_DIRECTIVE(minf_mzero) -DEFINE_DBL_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -# define MOX(op,x,f) op##@GOTOFF(%ecx,x,f) -#else -# define MO(op) op -# define MOX(op,x,f) op(,x,f) -#endif - - .text -ENTRY(__ieee754_pow) - fldl 12(%esp) // y - fxam - -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - - fnstsw - movb %ah, %dl - andb $0x45, %ah - cmpb $0x40, %ah // is y == 0 ? - je 11f - - cmpb $0x05, %ah // is y == ±inf ? - je 12f - - cmpb $0x01, %ah // is y == NaN ? - je 30f - - fldl 4(%esp) // x : y - - subl $8,%esp - cfi_adjust_cfa_offset (8) - - fxam - fnstsw - movb %ah, %dh - andb $0x45, %ah - cmpb $0x40, %ah - je 20f // x is ±0 - - cmpb $0x05, %ah - je 15f // x is ±inf - - cmpb $0x01, %ah - je 32f // x is NaN - - fxch // y : x - - /* fistpll raises invalid exception for |y| >= 1L<<63. */ - fld %st // y : y : x - fabs // |y| : y : x - fcompl MO(p63) // y : x - fnstsw - sahf - jnc 2f - - /* First see whether `y' is a natural number. In this case we - can use a more precise algorithm. */ - fld %st // y : y : x - fistpll (%esp) // y : x - fildll (%esp) // int(y) : y : x - fucomp %st(1) // y : x - fnstsw - sahf - jne 3f - - /* OK, we have an integer value for y. If large enough that - errors may propagate out of the 11 bits excess precision, use - the algorithm for real exponent instead. */ - fld %st // y : y : x - fabs // |y| : y : x - fcompl MO(p10) // y : x - fnstsw - sahf - jnc 2f - popl %eax - cfi_adjust_cfa_offset (-4) - popl %edx - cfi_adjust_cfa_offset (-4) - orl $0, %edx - fstp %st(0) // x - jns 4f // y >= 0, jump - fdivrl MO(one) // 1/x (now referred to as x) - negl %eax - adcl $0, %edx - negl %edx -4: fldl MO(one) // 1 : x - fxch - - /* If y is even, take the absolute value of x. Otherwise, - ensure all intermediate values that might overflow have the - sign of x. */ - testb $1, %al - jnz 6f - fabs - -6: shrdl $1, %edx, %eax - jnc 5f - fxch - fabs - fmul %st(1) // x : ST*x - fxch -5: fld %st // x : x : ST*x - fabs // |x| : x : ST*x - fmulp // |x|*x : ST*x - shrl $1, %edx - movl %eax, %ecx - orl %edx, %ecx - jnz 6b - fstp %st(0) // ST*x -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - DBL_NARROW_EVAL_UFLOW_NONNAN - ret - - /* y is ±NAN */ -30: fldl 4(%esp) // x : y - fldl MO(one) // 1.0 : x : y - fucomp %st(1) // x : y - fnstsw - sahf - je 31f - fxch // y : x -31: fstp %st(1) - ret - - cfi_adjust_cfa_offset (8) -32: addl $8, %esp - cfi_adjust_cfa_offset (-8) - fstp %st(1) - ret - - cfi_adjust_cfa_offset (8) - .align ALIGNARG(4) -2: // y is a large integer (absolute value at least 1L<<10), but - // may be odd unless at least 1L<<64. So it may be necessary - // to adjust the sign of a negative result afterwards. - fxch // x : y - fabs // |x| : y - fxch // y : x - .align ALIGNARG(4) -3: /* y is a real number. */ - fxch // x : y - fldl MO(one) // 1.0 : x : y - fldl MO(limit) // 0.29 : 1.0 : x : y - fld %st(2) // x : 0.29 : 1.0 : x : y - fsub %st(2) // x-1 : 0.29 : 1.0 : x : y - fabs // |x-1| : 0.29 : 1.0 : x : y - fucompp // 1.0 : x : y - fnstsw - fxch // x : 1.0 : y - sahf - ja 7f - fsub %st(1) // x-1 : 1.0 : y - fyl2xp1 // log2(x) : y - jmp 8f - -7: fyl2x // log2(x) : y -8: fmul %st(1) // y*log2(x) : y - fst %st(1) // y*log2(x) : y*log2(x) - frndint // int(y*log2(x)) : y*log2(x) - fsubr %st, %st(1) // int(y*log2(x)) : fract(y*log2(x)) - fxch // fract(y*log2(x)) : int(y*log2(x)) - f2xm1 // 2^fract(y*log2(x))-1 : int(y*log2(x)) - faddl MO(one) // 2^fract(y*log2(x)) : int(y*log2(x)) - - // Before scaling, we must negate if x is negative and y is an - // odd integer. - testb $2, %dh - jz 291f - // x is negative. If y is an odd integer, negate the result. - fldl 20(%esp) // y : 2^fract(y*log2(x)) : int(y*log2(x)) - fld %st // y : y : 2^fract(y*log2(x)) : int(y*log2(x)) - fabs // |y| : y : 2^fract(y*log2(x)) : int(y*log2(x)) - fcompl MO(p63) // y : 2^fract(y*log2(x)) : int(y*log2(x)) - fnstsw - sahf - jnc 290f - - // We must find out whether y is an odd integer. - fld %st // y : y : 2^fract(y*log2(x)) : int(y*log2(x)) - fistpll (%esp) // y : 2^fract(y*log2(x)) : int(y*log2(x)) - fildll (%esp) // int(y) : y : 2^fract(y*log2(x)) : int(y*log2(x)) - fucompp // 2^fract(y*log2(x)) : int(y*log2(x)) - fnstsw - sahf - jne 291f - - // OK, the value is an integer, but is it odd? - popl %eax - cfi_adjust_cfa_offset (-4) - popl %edx - cfi_adjust_cfa_offset (-4) - andb $1, %al - jz 292f // jump if not odd - // It's an odd integer. - fchs - jmp 292f - - cfi_adjust_cfa_offset (8) -290: fstp %st(0) // 2^fract(y*log2(x)) : int(y*log2(x)) -291: addl $8, %esp - cfi_adjust_cfa_offset (-8) -292: fscale // +/- 2^fract(y*log2(x))*2^int(y*log2(x)) : int(y*log2(x)) - fstp %st(1) // +/- 2^fract(y*log2(x))*2^int(y*log2(x)) - DBL_NARROW_EVAL_UFLOW_NONNAN - ret - - - // pow(x,±0) = 1 - .align ALIGNARG(4) -11: fstp %st(0) // pop y - fldl MO(one) - ret - - // y == ±inf - .align ALIGNARG(4) -12: fstp %st(0) // pop y - fldl MO(one) // 1 - fldl 4(%esp) // x : 1 - fabs // abs(x) : 1 - fucompp // < 1, == 1, or > 1 - fnstsw - andb $0x45, %ah - cmpb $0x45, %ah - je 13f // jump if x is NaN - - cmpb $0x40, %ah - je 14f // jump if |x| == 1 - - shlb $1, %ah - xorb %ah, %dl - andl $2, %edx - fldl MOX(inf_zero, %edx, 4) - ret - - .align ALIGNARG(4) -14: fldl MO(one) - ret - - .align ALIGNARG(4) -13: fldl 4(%esp) // load x == NaN - ret - - cfi_adjust_cfa_offset (8) - .align ALIGNARG(4) - // x is ±inf -15: fstp %st(0) // y - testb $2, %dh - jz 16f // jump if x == +inf - - // fistpll raises invalid exception for |y| >= 1L<<63, so test - // that (in which case y is certainly even) before testing - // whether y is odd. - fld %st // y : y - fabs // |y| : y - fcompl MO(p63) // y - fnstsw - sahf - jnc 16f - - // We must find out whether y is an odd integer. - fld %st // y : y - fistpll (%esp) // y - fildll (%esp) // int(y) : y - fucompp // - fnstsw - sahf - jne 17f - - // OK, the value is an integer. - popl %eax - cfi_adjust_cfa_offset (-4) - popl %edx - cfi_adjust_cfa_offset (-4) - andb $1, %al - jz 18f // jump if not odd - // It's an odd integer. - shrl $31, %edx - fldl MOX(minf_mzero, %edx, 8) - ret - - cfi_adjust_cfa_offset (8) - .align ALIGNARG(4) -16: fcompl MO(zero) - addl $8, %esp - cfi_adjust_cfa_offset (-8) - fnstsw - shrl $5, %eax - andl $8, %eax - fldl MOX(inf_zero, %eax, 1) - ret - - cfi_adjust_cfa_offset (8) - .align ALIGNARG(4) -17: shll $30, %edx // sign bit for y in right position - addl $8, %esp - cfi_adjust_cfa_offset (-8) -18: shrl $31, %edx - fldl MOX(inf_zero, %edx, 8) - ret - - cfi_adjust_cfa_offset (8) - .align ALIGNARG(4) - // x is ±0 -20: fstp %st(0) // y - testb $2, %dl - jz 21f // y > 0 - - // x is ±0 and y is < 0. We must find out whether y is an odd integer. - testb $2, %dh - jz 25f - - // fistpll raises invalid exception for |y| >= 1L<<63, so test - // that (in which case y is certainly even) before testing - // whether y is odd. - fld %st // y : y - fabs // |y| : y - fcompl MO(p63) // y - fnstsw - sahf - jnc 25f - - fld %st // y : y - fistpll (%esp) // y - fildll (%esp) // int(y) : y - fucompp // - fnstsw - sahf - jne 26f - - // OK, the value is an integer. - popl %eax - cfi_adjust_cfa_offset (-4) - popl %edx - cfi_adjust_cfa_offset (-4) - andb $1, %al - jz 27f // jump if not odd - // It's an odd integer. - // Raise divide-by-zero exception and get minus infinity value. - fldl MO(one) - fdivl MO(zero) - fchs - ret - - cfi_adjust_cfa_offset (8) -25: fstp %st(0) -26: addl $8, %esp - cfi_adjust_cfa_offset (-8) -27: // Raise divide-by-zero exception and get infinity value. - fldl MO(one) - fdivl MO(zero) - ret - - cfi_adjust_cfa_offset (8) - .align ALIGNARG(4) - // x is ±0 and y is > 0. We must find out whether y is an odd integer. -21: testb $2, %dh - jz 22f - - // fistpll raises invalid exception for |y| >= 1L<<63, so test - // that (in which case y is certainly even) before testing - // whether y is odd. - fcoml MO(p63) // y - fnstsw - sahf - jnc 22f - - fld %st // y : y - fistpll (%esp) // y - fildll (%esp) // int(y) : y - fucompp // - fnstsw - sahf - jne 23f - - // OK, the value is an integer. - popl %eax - cfi_adjust_cfa_offset (-4) - popl %edx - cfi_adjust_cfa_offset (-4) - andb $1, %al - jz 24f // jump if not odd - // It's an odd integer. - fldl MO(mzero) - ret - - cfi_adjust_cfa_offset (8) -22: fstp %st(0) -23: addl $8, %esp // Don't use 2 x pop - cfi_adjust_cfa_offset (-8) -24: fldl MO(zero) - ret - -END(__ieee754_pow) -strong_alias (__ieee754_pow, __pow_finite) diff --git a/sysdeps/i386/fpu/e_powf.S b/sysdeps/i386/fpu/e_powf.S deleted file mode 100644 index 467ef2380b..0000000000 --- a/sysdeps/i386/fpu/e_powf.S +++ /dev/null @@ -1,392 +0,0 @@ -/* ix87 specific implementation of pow function. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - .type p31,@object -p31: .byte 0, 0, 0, 0, 0, 0, 0xe0, 0x41 - ASM_SIZE_DIRECTIVE(p31) - - .section .rodata.cst16,"aM",@progbits,16 - - .p2align 3 - .type infinity,@object -inf_zero: -infinity: - .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f - ASM_SIZE_DIRECTIVE(infinity) - .type zero,@object -zero: .double 0.0 - ASM_SIZE_DIRECTIVE(zero) - .type minf_mzero,@object -minf_mzero: -minfinity: - .byte 0, 0, 0, 0, 0, 0, 0xf0, 0xff -mzero: - .byte 0, 0, 0, 0, 0, 0, 0, 0x80 - ASM_SIZE_DIRECTIVE(minf_mzero) -DEFINE_FLT_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -# define MOX(op,x,f) op##@GOTOFF(%ecx,x,f) -#else -# define MO(op) op -# define MOX(op,x,f) op(,x,f) -#endif - - .text -ENTRY(__ieee754_powf) - flds 8(%esp) // y - fxam - -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - - fnstsw - movb %ah, %dl - andb $0x45, %ah - cmpb $0x40, %ah // is y == 0 ? - je 11f - - cmpb $0x05, %ah // is y == ±inf ? - je 12f - - cmpb $0x01, %ah // is y == NaN ? - je 30f - - flds 4(%esp) // x : y - - subl $4, %esp - cfi_adjust_cfa_offset (4) - - fxam - fnstsw - movb %ah, %dh - andb $0x45, %ah - cmpb $0x40, %ah - je 20f // x is ±0 - - cmpb $0x05, %ah - je 15f // x is ±inf - - cmpb $0x01, %ah - je 33f // x is NaN - - fxch // y : x - - /* fistpl raises invalid exception for |y| >= 1L<<31. */ - fld %st // y : y : x - fabs // |y| : y : x - fcompl MO(p31) // y : x - fnstsw - sahf - jnc 2f - - /* First see whether `y' is a natural number. In this case we - can use a more precise algorithm. */ - fld %st // y : y : x - fistpl (%esp) // y : x - fildl (%esp) // int(y) : y : x - fucomp %st(1) // y : x - fnstsw - sahf - jne 3f - - /* OK, we have an integer value for y. */ - popl %edx - cfi_adjust_cfa_offset (-4) - orl $0, %edx - fstp %st(0) // x - jns 4f // y >= 0, jump - fdivrl MO(one) // 1/x (now referred to as x) - negl %edx -4: fldl MO(one) // 1 : x - fxch - - /* If y is even, take the absolute value of x. Otherwise, - ensure all intermediate values that might overflow have the - sign of x. */ - testb $1, %dl - jnz 6f - fabs - -6: shrl $1, %edx - jnc 5f - fxch - fabs - fmul %st(1) // x : ST*x - fxch -5: fld %st // x : x : ST*x - fabs // |x| : x : ST*x - fmulp // |x|*x : ST*x - testl %edx, %edx - jnz 6b - fstp %st(0) // ST*x - FLT_NARROW_EVAL_UFLOW_NONNAN - ret - - /* y is ±NAN */ -30: flds 4(%esp) // x : y - fldl MO(one) // 1.0 : x : y - fucomp %st(1) // x : y - fnstsw - sahf - je 31f - fxch // y : x -31: fstp %st(1) - ret - - cfi_adjust_cfa_offset (4) - .align ALIGNARG(4) -2: /* y is a large integer (so even). */ - fxch // x : y - fabs // |x| : y - fxch // y : x - .align ALIGNARG(4) -3: /* y is a real number. */ - fxch // x : y - fldl MO(one) // 1.0 : x : y - fldl MO(limit) // 0.29 : 1.0 : x : y - fld %st(2) // x : 0.29 : 1.0 : x : y - fsub %st(2) // x-1 : 0.29 : 1.0 : x : y - fabs // |x-1| : 0.29 : 1.0 : x : y - fucompp // 1.0 : x : y - fnstsw - fxch // x : 1.0 : y - sahf - ja 7f - fsub %st(1) // x-1 : 1.0 : y - fyl2xp1 // log2(x) : y - jmp 8f - -7: fyl2x // log2(x) : y -8: fmul %st(1) // y*log2(x) : y - fst %st(1) // y*log2(x) : y*log2(x) - frndint // int(y*log2(x)) : y*log2(x) - fsubr %st, %st(1) // int(y*log2(x)) : fract(y*log2(x)) - fxch // fract(y*log2(x)) : int(y*log2(x)) - f2xm1 // 2^fract(y*log2(x))-1 : int(y*log2(x)) - faddl MO(one) // 2^fract(y*log2(x)) : int(y*log2(x)) - fscale // 2^fract(y*log2(x))*2^int(y*log2(x)) : int(y*log2(x)) -32: addl $4, %esp - cfi_adjust_cfa_offset (-4) - fstp %st(1) // 2^fract(y*log2(x))*2^int(y*log2(x)) - FLT_NARROW_EVAL_UFLOW_NONNAN - ret - - /* x is NaN. */ - cfi_adjust_cfa_offset (4) -33: addl $4, %esp - cfi_adjust_cfa_offset (-4) - fstp %st(1) - ret - - // pow(x,±0) = 1 - .align ALIGNARG(4) -11: fstp %st(0) // pop y - fldl MO(one) - ret - - // y == ±inf - .align ALIGNARG(4) -12: fstp %st(0) // pop y - fldl MO(one) // 1 - flds 4(%esp) // x : 1 - fabs // abs(x) : 1 - fucompp // < 1, == 1, or > 1 - fnstsw - andb $0x45, %ah - cmpb $0x45, %ah - je 13f // jump if x is NaN - - cmpb $0x40, %ah - je 14f // jump if |x| == 1 - - shlb $1, %ah - xorb %ah, %dl - andl $2, %edx - fldl MOX(inf_zero, %edx, 4) - ret - - .align ALIGNARG(4) -14: fldl MO(one) - ret - - .align ALIGNARG(4) -13: flds 4(%esp) // load x == NaN - ret - - cfi_adjust_cfa_offset (4) - .align ALIGNARG(4) - // x is ±inf -15: fstp %st(0) // y - testb $2, %dh - jz 16f // jump if x == +inf - - // fistpl raises invalid exception for |y| >= 1L<<31, so test - // that (in which case y is certainly even) before testing - // whether y is odd. - fld %st // y : y - fabs // |y| : y - fcompl MO(p31) // y - fnstsw - sahf - jnc 16f - - // We must find out whether y is an odd integer. - fld %st // y : y - fistpl (%esp) // y - fildl (%esp) // int(y) : y - fucompp // - fnstsw - sahf - jne 17f - - // OK, the value is an integer. - popl %edx - cfi_adjust_cfa_offset (-4) - testb $1, %dl - jz 18f // jump if not odd - // It's an odd integer. - shrl $31, %edx - fldl MOX(minf_mzero, %edx, 8) - ret - - cfi_adjust_cfa_offset (4) - .align ALIGNARG(4) -16: fcompl MO(zero) - addl $4, %esp - cfi_adjust_cfa_offset (-4) - fnstsw - shrl $5, %eax - andl $8, %eax - fldl MOX(inf_zero, %eax, 1) - ret - - cfi_adjust_cfa_offset (4) - .align ALIGNARG(4) -17: shll $30, %edx // sign bit for y in right position - addl $4, %esp - cfi_adjust_cfa_offset (-4) -18: shrl $31, %edx - fldl MOX(inf_zero, %edx, 8) - ret - - cfi_adjust_cfa_offset (4) - .align ALIGNARG(4) - // x is ±0 -20: fstp %st(0) // y - testb $2, %dl - jz 21f // y > 0 - - // x is ±0 and y is < 0. We must find out whether y is an odd integer. - testb $2, %dh - jz 25f - - // fistpl raises invalid exception for |y| >= 1L<<31, so test - // that (in which case y is certainly even) before testing - // whether y is odd. - fld %st // y : y - fabs // |y| : y - fcompl MO(p31) // y - fnstsw - sahf - jnc 25f - - fld %st // y : y - fistpl (%esp) // y - fildl (%esp) // int(y) : y - fucompp // - fnstsw - sahf - jne 26f - - // OK, the value is an integer. - popl %edx - cfi_adjust_cfa_offset (-4) - testb $1, %dl - jz 27f // jump if not odd - // It's an odd integer. - // Raise divide-by-zero exception and get minus infinity value. - fldl MO(one) - fdivl MO(zero) - fchs - ret - - cfi_adjust_cfa_offset (4) -25: fstp %st(0) -26: addl $4, %esp - cfi_adjust_cfa_offset (-4) -27: // Raise divide-by-zero exception and get infinity value. - fldl MO(one) - fdivl MO(zero) - ret - - cfi_adjust_cfa_offset (4) - .align ALIGNARG(4) - // x is ±0 and y is > 0. We must find out whether y is an odd integer. -21: testb $2, %dh - jz 22f - - // fistpl raises invalid exception for |y| >= 1L<<31, so test - // that (in which case y is certainly even) before testing - // whether y is odd. - fcoml MO(p31) // y - fnstsw - sahf - jnc 22f - - fld %st // y : y - fistpl (%esp) // y - fildl (%esp) // int(y) : y - fucompp // - fnstsw - sahf - jne 23f - - // OK, the value is an integer. - popl %edx - cfi_adjust_cfa_offset (-4) - testb $1, %dl - jz 24f // jump if not odd - // It's an odd integer. - fldl MO(mzero) - ret - - cfi_adjust_cfa_offset (4) -22: fstp %st(0) -23: addl $4, %esp // Don't use pop. - cfi_adjust_cfa_offset (-4) -24: fldl MO(zero) - ret - -END(__ieee754_powf) -strong_alias (__ieee754_powf, __powf_finite) diff --git a/sysdeps/i386/fpu/e_powl.S b/sysdeps/i386/fpu/e_powl.S deleted file mode 100644 index 9e162848e4..0000000000 --- a/sysdeps/i386/fpu/e_powl.S +++ /dev/null @@ -1,459 +0,0 @@ -/* ix87 specific implementation of pow function. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - .type p2,@object -p2: .byte 0, 0, 0, 0, 0, 0, 0x10, 0x40 - ASM_SIZE_DIRECTIVE(p2) - .type p63,@object -p63: .byte 0, 0, 0, 0, 0, 0, 0xe0, 0x43 - ASM_SIZE_DIRECTIVE(p63) - .type p64,@object -p64: .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x43 - ASM_SIZE_DIRECTIVE(p64) - .type p78,@object -p78: .byte 0, 0, 0, 0, 0, 0, 0xd0, 0x44 - ASM_SIZE_DIRECTIVE(p78) - .type pm79,@object -pm79: .byte 0, 0, 0, 0, 0, 0, 0, 0x3b - ASM_SIZE_DIRECTIVE(pm79) - - .section .rodata.cst16,"aM",@progbits,16 - - .p2align 3 - .type infinity,@object -inf_zero: -infinity: - .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f - ASM_SIZE_DIRECTIVE(infinity) - .type zero,@object -zero: .double 0.0 - ASM_SIZE_DIRECTIVE(zero) - .type minf_mzero,@object -minf_mzero: -minfinity: - .byte 0, 0, 0, 0, 0, 0, 0xf0, 0xff -mzero: - .byte 0, 0, 0, 0, 0, 0, 0, 0x80 - ASM_SIZE_DIRECTIVE(minf_mzero) -DEFINE_LDBL_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -# define MOX(op,x,f) op##@GOTOFF(%ecx,x,f) -#else -# define MO(op) op -# define MOX(op,x,f) op(,x,f) -#endif - - .text -ENTRY(__ieee754_powl) - fldt 16(%esp) // y - fxam - -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - - fnstsw - movb %ah, %dl - andb $0x45, %ah - cmpb $0x40, %ah // is y == 0 ? - je 11f - - cmpb $0x05, %ah // is y == ±inf ? - je 12f - - cmpb $0x01, %ah // is y == NaN ? - je 30f - - fldt 4(%esp) // x : y - - subl $8,%esp - cfi_adjust_cfa_offset (8) - - fxam - fnstsw - movb %ah, %dh - andb $0x45, %ah - cmpb $0x40, %ah - je 20f // x is ±0 - - cmpb $0x05, %ah - je 15f // x is ±inf - - cmpb $0x01, %ah - je 32f // x is NaN - - fxch // y : x - - /* fistpll raises invalid exception for |y| >= 1L<<63. */ - fld %st // y : y : x - fabs // |y| : y : x - fcompl MO(p63) // y : x - fnstsw - sahf - jnc 2f - - /* First see whether `y' is a natural number. In this case we - can use a more precise algorithm. */ - fld %st // y : y : x - fistpll (%esp) // y : x - fildll (%esp) // int(y) : y : x - fucomp %st(1) // y : x - fnstsw - sahf - je 9f - - // If y has absolute value at most 0x1p-79, then any finite - // nonzero x will result in 1. Saturate y to those bounds to - // avoid underflow in the calculation of y*log2(x). - fld %st // y : y : x - fabs // |y| : y : x - fcompl MO(pm79) // y : x - fnstsw - sahf - jnc 3f - fstp %st(0) // pop y - fldl MO(pm79) // 0x1p-79 : x - testb $2, %dl - jnz 3f // y > 0 - fchs // -0x1p-79 : x - jmp 3f - -9: /* OK, we have an integer value for y. Unless very small - (we use < 4), use the algorithm for real exponent to avoid - accumulation of errors. */ - fld %st // y : y : x - fabs // |y| : y : x - fcompl MO(p2) // y : x - fnstsw - sahf - jnc 3f - popl %eax - cfi_adjust_cfa_offset (-4) - popl %edx - cfi_adjust_cfa_offset (-4) - orl $0, %edx - fstp %st(0) // x - jns 4f // y >= 0, jump - fdivrl MO(one) // 1/x (now referred to as x) - negl %eax - adcl $0, %edx - negl %edx -4: fldl MO(one) // 1 : x - fxch - - /* If y is even, take the absolute value of x. Otherwise, - ensure all intermediate values that might overflow have the - sign of x. */ - testb $1, %al - jnz 6f - fabs - -6: shrdl $1, %edx, %eax - jnc 5f - fxch - fabs - fmul %st(1) // x : ST*x - fxch -5: fld %st // x : x : ST*x - fabs // |x| : x : ST*x - fmulp // |x|*x : ST*x - shrl $1, %edx - movl %eax, %ecx - orl %edx, %ecx - jnz 6b - fstp %st(0) // ST*x -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - LDBL_CHECK_FORCE_UFLOW_NONNAN - ret - - /* y is ±NAN */ -30: fldt 4(%esp) // x : y - fldl MO(one) // 1.0 : x : y - fucomp %st(1) // x : y - fnstsw - sahf - je 33f -31: /* At least one argument NaN, and result should be NaN. */ - faddp - ret -33: jp 31b - /* pow (1, NaN); check if the NaN signaling. */ - testb $0x40, 23(%esp) - jz 31b - fstp %st(1) - ret - - cfi_adjust_cfa_offset (8) -32: addl $8, %esp - cfi_adjust_cfa_offset (-8) - faddp - ret - - cfi_adjust_cfa_offset (8) - .align ALIGNARG(4) -2: // y is a large integer (absolute value at least 1L<<63). - // If y has absolute value at least 1L<<78, then any finite - // nonzero x will result in 0 (underflow), 1 or infinity (overflow). - // Saturate y to those bounds to avoid overflow in the calculation - // of y*log2(x). - fld %st // y : y : x - fabs // |y| : y : x - fcompl MO(p78) // y : x - fnstsw - sahf - jc 3f - fstp %st(0) // pop y - fldl MO(p78) // 1L<<78 : x - testb $2, %dl - jz 3f // y > 0 - fchs // -(1L<<78) : x - .align ALIGNARG(4) -3: /* y is a real number. */ - subl $28, %esp - cfi_adjust_cfa_offset (28) - fstpt 12(%esp) // x - fstpt (%esp) // - call HIDDEN_JUMPTARGET (__powl_helper) // - addl $36, %esp - cfi_adjust_cfa_offset (-36) - ret - - // pow(x,±0) = 1, unless x is sNaN - .align ALIGNARG(4) -11: fstp %st(0) // pop y - fldt 4(%esp) // x - fxam - fnstsw - andb $0x45, %ah - cmpb $0x01, %ah - je 112f // x is NaN -111: fstp %st(0) - fldl MO(one) - ret - -112: testb $0x40, 11(%esp) - jnz 111b - fadd %st(0) - ret - - // y == ±inf - .align ALIGNARG(4) -12: fstp %st(0) // pop y - fldl MO(one) // 1 - fldt 4(%esp) // x : 1 - fabs // abs(x) : 1 - fucompp // < 1, == 1, or > 1 - fnstsw - andb $0x45, %ah - cmpb $0x45, %ah - je 13f // jump if x is NaN - - cmpb $0x40, %ah - je 14f // jump if |x| == 1 - - shlb $1, %ah - xorb %ah, %dl - andl $2, %edx - fldl MOX(inf_zero, %edx, 4) - ret - - .align ALIGNARG(4) -14: fldl MO(one) - ret - - .align ALIGNARG(4) -13: fldt 4(%esp) // load x == NaN - fadd %st(0) - ret - - cfi_adjust_cfa_offset (8) - .align ALIGNARG(4) - // x is ±inf -15: fstp %st(0) // y - testb $2, %dh - jz 16f // jump if x == +inf - - // fistpll raises invalid exception for |y| >= 1L<<63, but y - // may be odd unless we know |y| >= 1L<<64. - fld %st // y : y - fabs // |y| : y - fcompl MO(p64) // y - fnstsw - sahf - jnc 16f - fldl MO(p63) // p63 : y - fxch // y : p63 - fprem // y%p63 : p63 - fstp %st(1) // y%p63 - - // We must find out whether y is an odd integer. - fld %st // y : y - fistpll (%esp) // y - fildll (%esp) // int(y) : y - fucompp // - fnstsw - sahf - jne 17f - - // OK, the value is an integer, but is it odd? - popl %eax - cfi_adjust_cfa_offset (-4) - popl %edx - cfi_adjust_cfa_offset (-4) - andb $1, %al - jz 18f // jump if not odd - // It's an odd integer. - shrl $31, %edx - fldl MOX(minf_mzero, %edx, 8) - ret - - cfi_adjust_cfa_offset (8) - .align ALIGNARG(4) -16: fcompl MO(zero) - addl $8, %esp - cfi_adjust_cfa_offset (-8) - fnstsw - shrl $5, %eax - andl $8, %eax - fldl MOX(inf_zero, %eax, 1) - ret - - cfi_adjust_cfa_offset (8) - .align ALIGNARG(4) -17: shll $30, %edx // sign bit for y in right position - addl $8, %esp - cfi_adjust_cfa_offset (-8) -18: shrl $31, %edx - fldl MOX(inf_zero, %edx, 8) - ret - - cfi_adjust_cfa_offset (8) - .align ALIGNARG(4) - // x is ±0 -20: fstp %st(0) // y - testb $2, %dl - jz 21f // y > 0 - - // x is ±0 and y is < 0. We must find out whether y is an odd integer. - testb $2, %dh - jz 25f - - // fistpll raises invalid exception for |y| >= 1L<<63, but y - // may be odd unless we know |y| >= 1L<<64. - fld %st // y : y - fabs // |y| : y - fcompl MO(p64) // y - fnstsw - sahf - jnc 25f - fldl MO(p63) // p63 : y - fxch // y : p63 - fprem // y%p63 : p63 - fstp %st(1) // y%p63 - - fld %st // y : y - fistpll (%esp) // y - fildll (%esp) // int(y) : y - fucompp // - fnstsw - sahf - jne 26f - - // OK, the value is an integer, but is it odd? - popl %eax - cfi_adjust_cfa_offset (-4) - popl %edx - cfi_adjust_cfa_offset (-4) - andb $1, %al - jz 27f // jump if not odd - // It's an odd integer. - // Raise divide-by-zero exception and get minus infinity value. - fldl MO(one) - fdivl MO(zero) - fchs - ret - - cfi_adjust_cfa_offset (8) -25: fstp %st(0) -26: addl $8, %esp - cfi_adjust_cfa_offset (-8) -27: // Raise divide-by-zero exception and get infinity value. - fldl MO(one) - fdivl MO(zero) - ret - - cfi_adjust_cfa_offset (8) - .align ALIGNARG(4) - // x is ±0 and y is > 0. We must find out whether y is an odd integer. -21: testb $2, %dh - jz 22f - - // fistpll raises invalid exception for |y| >= 1L<<63, but y - // may be odd unless we know |y| >= 1L<<64. - fld %st // y : y - fcompl MO(p64) // y - fnstsw - sahf - jnc 22f - fldl MO(p63) // p63 : y - fxch // y : p63 - fprem // y%p63 : p63 - fstp %st(1) // y%p63 - - fld %st // y : y - fistpll (%esp) // y - fildll (%esp) // int(y) : y - fucompp // - fnstsw - sahf - jne 23f - - // OK, the value is an integer, but is it odd? - popl %eax - cfi_adjust_cfa_offset (-4) - popl %edx - cfi_adjust_cfa_offset (-4) - andb $1, %al - jz 24f // jump if not odd - // It's an odd integer. - fldl MO(mzero) - ret - - cfi_adjust_cfa_offset (8) -22: fstp %st(0) -23: addl $8, %esp // Don't use 2 x pop - cfi_adjust_cfa_offset (-8) -24: fldl MO(zero) - ret - -END(__ieee754_powl) -strong_alias (__ieee754_powl, __powl_finite) diff --git a/sysdeps/i386/fpu/e_rem_pio2.c b/sysdeps/i386/fpu/e_rem_pio2.c deleted file mode 100644 index 1347b0468c..0000000000 --- a/sysdeps/i386/fpu/e_rem_pio2.c +++ /dev/null @@ -1,3 +0,0 @@ -/* Empty. This file is only meant to avoid compiling the file with the - same name in the libm-ieee754 directory. The code is not used since - there is an assembler version for all users of this file. */ diff --git a/sysdeps/i386/fpu/e_remainder.S b/sysdeps/i386/fpu/e_remainder.S deleted file mode 100644 index f7867aa90b..0000000000 --- a/sysdeps/i386/fpu/e_remainder.S +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -ENTRY(__ieee754_remainder) - fldl 12(%esp) - fldl 4(%esp) -1: fprem1 - fstsw %ax - sahf - jp 1b - fstp %st(1) - ret -END (__ieee754_remainder) -strong_alias (__ieee754_remainder, __remainder_finite) diff --git a/sysdeps/i386/fpu/e_remainderf.S b/sysdeps/i386/fpu/e_remainderf.S deleted file mode 100644 index cfd390bc69..0000000000 --- a/sysdeps/i386/fpu/e_remainderf.S +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -ENTRY(__ieee754_remainderf) - flds 8(%esp) - flds 4(%esp) -1: fprem1 - fstsw %ax - sahf - jp 1b - fstp %st(1) - ret -END (__ieee754_remainderf) -strong_alias (__ieee754_remainderf, __remainderf_finite) diff --git a/sysdeps/i386/fpu/e_remainderl.S b/sysdeps/i386/fpu/e_remainderl.S deleted file mode 100644 index 5ec23a37a3..0000000000 --- a/sysdeps/i386/fpu/e_remainderl.S +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - */ - -#include - -ENTRY(__ieee754_remainderl) - fldt 16(%esp) - fldt 4(%esp) -1: fprem1 - fstsw %ax - sahf - jp 1b - fstp %st(1) - ret -END (__ieee754_remainderl) -strong_alias (__ieee754_remainderl, __remainderl_finite) diff --git a/sysdeps/i386/fpu/e_scalb.S b/sysdeps/i386/fpu/e_scalb.S deleted file mode 100644 index 370924c29f..0000000000 --- a/sysdeps/i386/fpu/e_scalb.S +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Correct handling of y==-inf - */ - -#include -#include - - .section .rodata - - .align ALIGNARG(4) - .type zero_nan,@object -zero_nan: - .double 0.0 -nan: .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f - .byte 0, 0, 0, 0, 0, 0, 0, 0x80 - .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f - ASM_SIZE_DIRECTIVE(zero_nan) - - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -# define MOX(op,x,f) op##@GOTOFF(%ecx,x,f) -#else -# define MO(op) op -# define MOX(op,x,f) op(,x,f) -#endif - - .text -ENTRY(__ieee754_scalb) - fldl 12(%esp) - fxam - fnstsw - fldl 4(%esp) - andl $0x4700, %eax - cmpl $0x0700, %eax - je 1f - andl $0x4500, %eax - cmpl $0x0100, %eax - je 2f - fxam - fnstsw - andl $0x4500, %eax - cmpl $0x0100, %eax - je 3f - fld %st(1) - frndint - fcomp %st(2) - fnstsw - sahf - jne 4f - fscale - fstp %st(1) - DBL_NARROW_EVAL - ret - - /* y is -inf */ -1: fxam -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - fnstsw - movl 8(%esp), %edx - shrl $5, %eax - fstp %st - fstp %st - andl $0x80000000, %edx - andl $0x0228, %eax - cmpl $0x0028, %eax - je 4f - andl $8, %eax - shrl $27, %edx - addl %edx, %eax - fldl MOX(zero_nan, %eax, 1) - ret - - /* The result is NaN, but we must not raise an exception. - So use a variable. */ -2: fstp %st - fstp %st -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - fldl MO(nan) - ret - - /* The first parameter is a NaN. Return it. */ -3: fstp %st(1) - ret - - /* Return NaN and raise the invalid exception. */ -4: fstp %st - fstp %st - fldz - fdiv %st - ret -END(__ieee754_scalb) -strong_alias (__ieee754_scalb, __scalb_finite) diff --git a/sysdeps/i386/fpu/e_scalbf.S b/sysdeps/i386/fpu/e_scalbf.S deleted file mode 100644 index 4f2dfa3acf..0000000000 --- a/sysdeps/i386/fpu/e_scalbf.S +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * Adapted for float type by Ulrich Drepper . - * - * Correct handling of y==-inf - */ - -#include -#include - - .section .rodata - - .align ALIGNARG(4) - .type zero_nan,@object -zero_nan: - .double 0.0 -nan: .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f - .byte 0, 0, 0, 0, 0, 0, 0, 0x80 - .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f - ASM_SIZE_DIRECTIVE(zero_nan) - - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -# define MOX(op,x,f) op##@GOTOFF(%ecx,x,f) -#else -# define MO(op) op -# define MOX(op,x,f) op(,x,f) -#endif - - - .text -ENTRY(__ieee754_scalbf) - flds 8(%esp) - fxam - fnstsw - flds 4(%esp) - andl $0x4700, %eax - cmpl $0x0700, %eax - je 1f - andl $0x4500, %eax - cmpl $0x0100, %eax - je 2f - fxam - fnstsw - andl $0x4500, %eax - cmpl $0x0100, %eax - je 3f - fld %st(1) - frndint - fcomp %st(2) - fnstsw - sahf - jne 4f - fscale - fstp %st(1) - FLT_NARROW_EVAL - ret - - /* y is -inf */ -1: fxam -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - fnstsw - movl 4(%esp), %edx - shrl $5, %eax - fstp %st - fstp %st - andl $0x80000000, %edx - andl $0x0228, %eax - cmpl $0x0028, %eax - je 4f - andl $8, %eax - shrl $27, %edx - addl %edx, %eax - fldl MOX(zero_nan, %eax, 1) - ret - - /* The result is NaN, but we must not raise an exception. - So use a variable. */ -2: fstp %st - fstp %st -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - fldl MO(nan) - ret - - /* The first parameter is a NaN. Return it. */ -3: fstp %st(1) - ret - - /* Return NaN and raise the invalid exception. */ -4: fstp %st - fstp %st - fldz - fdiv %st - ret -END(__ieee754_scalbf) -strong_alias (__ieee754_scalbf, __scalbf_finite) diff --git a/sysdeps/i386/fpu/e_scalbl.S b/sysdeps/i386/fpu/e_scalbl.S deleted file mode 100644 index 896f599cb0..0000000000 --- a/sysdeps/i386/fpu/e_scalbl.S +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - * - * Correct handling of y==-inf - */ - -#include - - .section .rodata - - .align ALIGNARG(4) - .type zero_nan,@object -zero_nan: - .double 0.0 -nan: .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f - .byte 0, 0, 0, 0, 0, 0, 0, 0x80 - .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f - ASM_SIZE_DIRECTIVE(zero_nan) - - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -# define MOX(op,x,f) op##@GOTOFF(%ecx,x,f) -#else -# define MO(op) op -# define MOX(op,x,f) op(,x,f) -#endif - - .text -ENTRY(__ieee754_scalbl) - fldt 16(%esp) - fxam - fnstsw - fldt 4(%esp) - andl $0x4700, %eax - cmpl $0x0700, %eax - je 1f - andl $0x4500, %eax - cmpl $0x0100, %eax - je 2f - fxam - fnstsw - andl $0x4500, %eax - cmpl $0x0100, %eax - je 2f - fld %st(1) - frndint - fcomp %st(2) - fnstsw - sahf - jne 4f - fscale - fstp %st(1) - ret - - /* y is -inf */ -1: fxam -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - fnstsw - movl 12(%esp), %edx - shrl $5, %eax - fstp %st - fstp %st - andl $0x8000, %edx - andl $0x0228, %eax - cmpl $0x0028, %eax - je 4f - andl $8, %eax - shrl $11, %edx - addl %edx, %eax - fldl MOX(zero_nan, %eax, 1) - ret - - /* The result is NaN; raise an exception for sNaN arguments. */ -2: faddp - ret - - /* Return NaN and raise the invalid exception. */ -4: fstp %st - fstp %st - fldz - fdiv %st - ret -END(__ieee754_scalbl) -strong_alias (__ieee754_scalbl, __scalbl_finite) diff --git a/sysdeps/i386/fpu/e_sqrt.S b/sysdeps/i386/fpu/e_sqrt.S deleted file mode 100644 index fba5833a9a..0000000000 --- a/sysdeps/i386/fpu/e_sqrt.S +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -ENTRY(__ieee754_sqrt) - fldl 4(%esp) - subl $8, %esp - cfi_adjust_cfa_offset (8) - fstcw 4(%esp) - movl $0xfeff, %edx - andl 4(%esp), %edx - movl %edx, (%esp) - fldcw (%esp) - fsqrt - fldcw 4(%esp) - addl $8, %esp - cfi_adjust_cfa_offset (-8) - ret -END (__ieee754_sqrt) -strong_alias (__ieee754_sqrt, __sqrt_finite) diff --git a/sysdeps/i386/fpu/e_sqrtf.S b/sysdeps/i386/fpu/e_sqrtf.S deleted file mode 100644 index 6f7e4b015f..0000000000 --- a/sysdeps/i386/fpu/e_sqrtf.S +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -ENTRY(__ieee754_sqrtf) - flds 4(%esp) - fsqrt - ret -END (__ieee754_sqrtf) -strong_alias (__ieee754_sqrtf, __sqrtf_finite) diff --git a/sysdeps/i386/fpu/e_sqrtl.c b/sysdeps/i386/fpu/e_sqrtl.c deleted file mode 100644 index 41bcd7eeb7..0000000000 --- a/sysdeps/i386/fpu/e_sqrtl.c +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - */ - -#include - -#undef __ieee754_sqrtl -long double -__ieee754_sqrtl (long double x) -{ - long double res; - - asm ("fsqrt" : "=t" (res) : "0" (x)); - - return res; -} -strong_alias (__ieee754_sqrtl, __sqrtl_finite) diff --git a/sysdeps/i386/fpu/fclrexcpt.c b/sysdeps/i386/fpu/fclrexcpt.c deleted file mode 100644 index 5d8596964b..0000000000 --- a/sysdeps/i386/fpu/fclrexcpt.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -__feclearexcept (int excepts) -{ - fenv_t temp; - - /* Mask out unsupported bits/exceptions. */ - excepts &= FE_ALL_EXCEPT; - - /* Bah, we have to clear selected exceptions. Since there is no - `fldsw' instruction we have to do it the hard way. */ - __asm__ ("fnstenv %0" : "=m" (*&temp)); - - /* Clear the relevant bits. */ - temp.__status_word &= excepts ^ FE_ALL_EXCEPT; - - /* Put the new data in effect. */ - __asm__ ("fldenv %0" : : "m" (*&temp)); - - /* If the CPU supports SSE, we clear the MXCSR as well. */ - if (HAS_CPU_FEATURE (SSE)) - { - unsigned int xnew_exc; - - /* Get the current MXCSR. */ - __asm__ ("stmxcsr %0" : "=m" (*&xnew_exc)); - - /* Clear the relevant bits. */ - xnew_exc &= ~excepts; - - /* Put the new data in effect. */ - __asm__ ("ldmxcsr %0" : : "m" (*&xnew_exc)); - } - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feclearexcept, __old_feclearexcept) -compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1); -#endif - -libm_hidden_ver (__feclearexcept, feclearexcept) -versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2); diff --git a/sysdeps/i386/fpu/fedisblxcpt.c b/sysdeps/i386/fpu/fedisblxcpt.c deleted file mode 100644 index f8db665425..0000000000 --- a/sysdeps/i386/fpu/fedisblxcpt.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -fedisableexcept (int excepts) -{ - unsigned short int new_exc, old_exc; - - /* Get the current control word. */ - __asm__ ("fstcw %0" : "=m" (*&new_exc)); - - old_exc = (~new_exc) & FE_ALL_EXCEPT; - - excepts &= FE_ALL_EXCEPT; - - new_exc |= excepts; - __asm__ ("fldcw %0" : : "m" (*&new_exc)); - - /* If the CPU supports SSE we set the MXCSR as well. */ - if (HAS_CPU_FEATURE (SSE)) - { - unsigned int xnew_exc; - - /* Get the current control word. */ - __asm__ ("stmxcsr %0" : "=m" (*&xnew_exc)); - - xnew_exc |= excepts << 7; - - __asm__ ("ldmxcsr %0" : : "m" (*&xnew_exc)); - } - - return old_exc; -} diff --git a/sysdeps/i386/fpu/feenablxcpt.c b/sysdeps/i386/fpu/feenablxcpt.c deleted file mode 100644 index f1c42d7c27..0000000000 --- a/sysdeps/i386/fpu/feenablxcpt.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -feenableexcept (int excepts) -{ - unsigned short int new_exc; - unsigned short int old_exc; - - /* Get the current control word. */ - __asm__ ("fstcw %0" : "=m" (*&new_exc)); - - excepts &= FE_ALL_EXCEPT; - old_exc = (~new_exc) & FE_ALL_EXCEPT; - - new_exc &= ~excepts; - __asm__ ("fldcw %0" : : "m" (*&new_exc)); - - /* If the CPU supports SSE we set the MXCSR as well. */ - if (HAS_CPU_FEATURE (SSE)) - { - unsigned int xnew_exc; - - /* Get the current control word. */ - __asm__ ("stmxcsr %0" : "=m" (*&xnew_exc)); - - xnew_exc &= ~(excepts << 7); - - __asm__ ("ldmxcsr %0" : : "m" (*&xnew_exc)); - } - - return old_exc; -} diff --git a/sysdeps/i386/fpu/fegetenv.c b/sysdeps/i386/fpu/fegetenv.c deleted file mode 100644 index 983f6af25e..0000000000 --- a/sysdeps/i386/fpu/fegetenv.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -__fegetenv (fenv_t *envp) -{ - __asm__ ("fnstenv %0" : "=m" (*envp)); - /* And load it right back since the processor changes the mask. - Intel thought this opcode to be used in interrupt handlers which - would block all exceptions. */ - __asm__ ("fldenv %0" : : "m" (*envp)); - - if (HAS_CPU_FEATURE (SSE)) - __asm__ ("stmxcsr %0" : "=m" (envp->__eip)); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetenv, __old_fegetenv) -compat_symbol (libm, __old_fegetenv, fegetenv, GLIBC_2_1); -#endif - -libm_hidden_def (__fegetenv) -libm_hidden_ver (__fegetenv, fegetenv) -versioned_symbol (libm, __fegetenv, fegetenv, GLIBC_2_2); diff --git a/sysdeps/i386/fpu/fegetexcept.c b/sysdeps/i386/fpu/fegetexcept.c deleted file mode 100644 index dc87b7a470..0000000000 --- a/sysdeps/i386/fpu/fegetexcept.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Get enabled floating-point exceptions. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fegetexcept (void) -{ - unsigned short int exc; - - /* Get the current control word. */ - __asm__ ("fstcw %0" : "=m" (*&exc)); - - return (~exc) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/i386/fpu/fegetmode.c b/sysdeps/i386/fpu/fegetmode.c deleted file mode 100644 index abbce3075f..0000000000 --- a/sysdeps/i386/fpu/fegetmode.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Store current floating-point control modes. i386 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -int -fegetmode (femode_t *modep) -{ - _FPU_GETCW (modep->__control_word); - if (HAS_CPU_FEATURE (SSE)) - __asm__ ("stmxcsr %0" : "=m" (modep->__mxcsr)); - return 0; -} diff --git a/sysdeps/i386/fpu/fegetround.c b/sysdeps/i386/fpu/fegetround.c deleted file mode 100644 index 8ce8b859d8..0000000000 --- a/sysdeps/i386/fpu/fegetround.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fegetround (void) -{ - int cw; - - __asm__ ("fnstcw %0" : "=m" (*&cw)); - - return cw & 0xc00; -} -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/i386/fpu/feholdexcpt.c b/sysdeps/i386/fpu/feholdexcpt.c deleted file mode 100644 index d327358913..0000000000 --- a/sysdeps/i386/fpu/feholdexcpt.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -__feholdexcept (fenv_t *envp) -{ - /* Store the environment. Recall that fnstenv has a side effect of - masking all exceptions. Then clear all exceptions. */ - __asm__ volatile ("fnstenv %0; fnclex" : "=m" (*envp)); - - /* If the CPU supports SSE we set the MXCSR as well. */ - if (HAS_CPU_FEATURE (SSE)) - { - unsigned int xwork; - - /* Get the current control word. */ - __asm__ ("stmxcsr %0" : "=m" (envp->__eip)); - - /* Set all exceptions to non-stop and clear them. */ - xwork = (envp->__eip | 0x1f80) & ~0x3f; - - __asm__ ("ldmxcsr %0" : : "m" (*&xwork)); - } - - return 0; -} -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/i386/fpu/fenv_private.h b/sysdeps/i386/fpu/fenv_private.h deleted file mode 100644 index e20e1f1662..0000000000 --- a/sysdeps/i386/fpu/fenv_private.h +++ /dev/null @@ -1,501 +0,0 @@ -#ifndef FENV_PRIVATE_H -#define FENV_PRIVATE_H 1 - -#include -#include - -#ifdef __SSE2_MATH__ -# define math_opt_barrier(x) \ - ({ __typeof(x) __x; \ - if (sizeof (x) <= sizeof (double)) \ - __asm ("" : "=x" (__x) : "0" (x)); \ - else \ - __asm ("" : "=t" (__x) : "0" (x)); \ - __x; }) -# define math_force_eval(x) \ - do { \ - if (sizeof (x) <= sizeof (double)) \ - __asm __volatile ("" : : "x" (x)); \ - else \ - __asm __volatile ("" : : "f" (x)); \ - } while (0) -#else -# define math_opt_barrier(x) \ - ({ __typeof (x) __x; \ - __asm ("" : "=t" (__x) : "0" (x)); \ - __x; }) -# define math_force_eval(x) \ - do { \ - __typeof (x) __x = (x); \ - if (sizeof (x) <= sizeof (double)) \ - __asm __volatile ("" : : "m" (__x)); \ - else \ - __asm __volatile ("" : : "f" (__x)); \ - } while (0) -#endif - -/* This file is used by both the 32- and 64-bit ports. The 64-bit port - has a field in the fenv_t for the mxcsr; the 32-bit port does not. - Instead, we (ab)use the only 32-bit field extant in the struct. */ -#ifndef __x86_64__ -# define __mxcsr __eip -#endif - - -/* All of these functions are private to libm, and are all used in pairs - to save+change the fp state and restore the original state. Thus we - need not care for both the 387 and the sse unit, only the one we're - actually using. */ - -#if defined __AVX__ || defined SSE2AVX -# define STMXCSR "vstmxcsr" -# define LDMXCSR "vldmxcsr" -#else -# define STMXCSR "stmxcsr" -# define LDMXCSR "ldmxcsr" -#endif - -static __always_inline void -libc_feholdexcept_sse (fenv_t *e) -{ - unsigned int mxcsr; - asm (STMXCSR " %0" : "=m" (*&mxcsr)); - e->__mxcsr = mxcsr; - mxcsr = (mxcsr | 0x1f80) & ~0x3f; - asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr)); -} - -static __always_inline void -libc_feholdexcept_387 (fenv_t *e) -{ - /* Recall that fnstenv has a side-effect of masking exceptions. - Clobber all of the fp registers so that the TOS field is 0. */ - asm volatile ("fnstenv %0; fnclex" - : "=m"(*e) - : : "st", "st(1)", "st(2)", "st(3)", - "st(4)", "st(5)", "st(6)", "st(7)"); -} - -static __always_inline void -libc_fesetround_sse (int r) -{ - unsigned int mxcsr; - asm (STMXCSR " %0" : "=m" (*&mxcsr)); - mxcsr = (mxcsr & ~0x6000) | (r << 3); - asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr)); -} - -static __always_inline void -libc_fesetround_387 (int r) -{ - fpu_control_t cw; - _FPU_GETCW (cw); - cw = (cw & ~0xc00) | r; - _FPU_SETCW (cw); -} - -static __always_inline void -libc_feholdexcept_setround_sse (fenv_t *e, int r) -{ - unsigned int mxcsr; - asm (STMXCSR " %0" : "=m" (*&mxcsr)); - e->__mxcsr = mxcsr; - mxcsr = ((mxcsr | 0x1f80) & ~0x603f) | (r << 3); - asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr)); -} - -/* Set both rounding mode and precision. A convenience function for use - by libc_feholdexcept_setround and libc_feholdexcept_setround_53bit. */ -static __always_inline void -libc_feholdexcept_setround_387_prec (fenv_t *e, int r) -{ - libc_feholdexcept_387 (e); - - fpu_control_t cw = e->__control_word; - cw &= ~(_FPU_RC_ZERO | _FPU_EXTENDED); - cw |= r | 0x3f; - _FPU_SETCW (cw); -} - -static __always_inline void -libc_feholdexcept_setround_387 (fenv_t *e, int r) -{ - libc_feholdexcept_setround_387_prec (e, r | _FPU_EXTENDED); -} - -static __always_inline void -libc_feholdexcept_setround_387_53bit (fenv_t *e, int r) -{ - libc_feholdexcept_setround_387_prec (e, r | _FPU_DOUBLE); -} - -static __always_inline int -libc_fetestexcept_sse (int e) -{ - unsigned int mxcsr; - asm volatile (STMXCSR " %0" : "=m" (*&mxcsr)); - return mxcsr & e & FE_ALL_EXCEPT; -} - -static __always_inline int -libc_fetestexcept_387 (int ex) -{ - fexcept_t temp; - asm volatile ("fnstsw %0" : "=a" (temp)); - return temp & ex & FE_ALL_EXCEPT; -} - -static __always_inline void -libc_fesetenv_sse (fenv_t *e) -{ - asm volatile (LDMXCSR " %0" : : "m" (e->__mxcsr)); -} - -static __always_inline void -libc_fesetenv_387 (fenv_t *e) -{ - /* Clobber all fp registers so that the TOS value we saved earlier is - compatible with the current state of the compiler. */ - asm volatile ("fldenv %0" - : : "m" (*e) - : "st", "st(1)", "st(2)", "st(3)", - "st(4)", "st(5)", "st(6)", "st(7)"); -} - -static __always_inline int -libc_feupdateenv_test_sse (fenv_t *e, int ex) -{ - unsigned int mxcsr, old_mxcsr, cur_ex; - asm volatile (STMXCSR " %0" : "=m" (*&mxcsr)); - cur_ex = mxcsr & FE_ALL_EXCEPT; - - /* Merge current exceptions with the old environment. */ - old_mxcsr = e->__mxcsr; - mxcsr = old_mxcsr | cur_ex; - asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr)); - - /* Raise SIGFPE for any new exceptions since the hold. Expect that - the normal environment has all exceptions masked. */ - if (__glibc_unlikely (~(old_mxcsr >> 7) & cur_ex)) - __feraiseexcept (cur_ex); - - /* Test for exceptions raised since the hold. */ - return cur_ex & ex; -} - -static __always_inline int -libc_feupdateenv_test_387 (fenv_t *e, int ex) -{ - fexcept_t cur_ex; - - /* Save current exceptions. */ - asm volatile ("fnstsw %0" : "=a" (cur_ex)); - cur_ex &= FE_ALL_EXCEPT; - - /* Reload original environment. */ - libc_fesetenv_387 (e); - - /* Merge current exceptions. */ - __feraiseexcept (cur_ex); - - /* Test for exceptions raised since the hold. */ - return cur_ex & ex; -} - -static __always_inline void -libc_feupdateenv_sse (fenv_t *e) -{ - libc_feupdateenv_test_sse (e, 0); -} - -static __always_inline void -libc_feupdateenv_387 (fenv_t *e) -{ - libc_feupdateenv_test_387 (e, 0); -} - -static __always_inline void -libc_feholdsetround_sse (fenv_t *e, int r) -{ - unsigned int mxcsr; - asm (STMXCSR " %0" : "=m" (*&mxcsr)); - e->__mxcsr = mxcsr; - mxcsr = (mxcsr & ~0x6000) | (r << 3); - asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr)); -} - -static __always_inline void -libc_feholdsetround_387_prec (fenv_t *e, int r) -{ - fpu_control_t cw; - - _FPU_GETCW (cw); - e->__control_word = cw; - cw &= ~(_FPU_RC_ZERO | _FPU_EXTENDED); - cw |= r; - _FPU_SETCW (cw); -} - -static __always_inline void -libc_feholdsetround_387 (fenv_t *e, int r) -{ - libc_feholdsetround_387_prec (e, r | _FPU_EXTENDED); -} - -static __always_inline void -libc_feholdsetround_387_53bit (fenv_t *e, int r) -{ - libc_feholdsetround_387_prec (e, r | _FPU_DOUBLE); -} - -static __always_inline void -libc_feresetround_sse (fenv_t *e) -{ - unsigned int mxcsr; - asm (STMXCSR " %0" : "=m" (*&mxcsr)); - mxcsr = (mxcsr & ~0x6000) | (e->__mxcsr & 0x6000); - asm volatile (LDMXCSR " %0" : : "m" (*&mxcsr)); -} - -static __always_inline void -libc_feresetround_387 (fenv_t *e) -{ - _FPU_SETCW (e->__control_word); -} - -#ifdef __SSE_MATH__ -# define libc_feholdexceptf libc_feholdexcept_sse -# define libc_fesetroundf libc_fesetround_sse -# define libc_feholdexcept_setroundf libc_feholdexcept_setround_sse -# define libc_fetestexceptf libc_fetestexcept_sse -# define libc_fesetenvf libc_fesetenv_sse -# define libc_feupdateenv_testf libc_feupdateenv_test_sse -# define libc_feupdateenvf libc_feupdateenv_sse -# define libc_feholdsetroundf libc_feholdsetround_sse -# define libc_feresetroundf libc_feresetround_sse -#else -# define libc_feholdexceptf libc_feholdexcept_387 -# define libc_fesetroundf libc_fesetround_387 -# define libc_feholdexcept_setroundf libc_feholdexcept_setround_387 -# define libc_fetestexceptf libc_fetestexcept_387 -# define libc_fesetenvf libc_fesetenv_387 -# define libc_feupdateenv_testf libc_feupdateenv_test_387 -# define libc_feupdateenvf libc_feupdateenv_387 -# define libc_feholdsetroundf libc_feholdsetround_387 -# define libc_feresetroundf libc_feresetround_387 -#endif /* __SSE_MATH__ */ - -#ifdef __SSE2_MATH__ -# define libc_feholdexcept libc_feholdexcept_sse -# define libc_fesetround libc_fesetround_sse -# define libc_feholdexcept_setround libc_feholdexcept_setround_sse -# define libc_fetestexcept libc_fetestexcept_sse -# define libc_fesetenv libc_fesetenv_sse -# define libc_feupdateenv_test libc_feupdateenv_test_sse -# define libc_feupdateenv libc_feupdateenv_sse -# define libc_feholdsetround libc_feholdsetround_sse -# define libc_feresetround libc_feresetround_sse -#else -# define libc_feholdexcept libc_feholdexcept_387 -# define libc_fesetround libc_fesetround_387 -# define libc_feholdexcept_setround libc_feholdexcept_setround_387 -# define libc_fetestexcept libc_fetestexcept_387 -# define libc_fesetenv libc_fesetenv_387 -# define libc_feupdateenv_test libc_feupdateenv_test_387 -# define libc_feupdateenv libc_feupdateenv_387 -# define libc_feholdsetround libc_feholdsetround_387 -# define libc_feresetround libc_feresetround_387 -#endif /* __SSE2_MATH__ */ - -#define libc_feholdexceptl libc_feholdexcept_387 -#define libc_fesetroundl libc_fesetround_387 -#define libc_feholdexcept_setroundl libc_feholdexcept_setround_387 -#define libc_fetestexceptl libc_fetestexcept_387 -#define libc_fesetenvl libc_fesetenv_387 -#define libc_feupdateenv_testl libc_feupdateenv_test_387 -#define libc_feupdateenvl libc_feupdateenv_387 -#define libc_feholdsetroundl libc_feholdsetround_387 -#define libc_feresetroundl libc_feresetround_387 - -#ifndef __SSE2_MATH__ -# define libc_feholdexcept_setround_53bit libc_feholdexcept_setround_387_53bit -# define libc_feholdsetround_53bit libc_feholdsetround_387_53bit -#endif - -/* We have support for rounding mode context. */ -#define HAVE_RM_CTX 1 - -static __always_inline void -libc_feholdexcept_setround_sse_ctx (struct rm_ctx *ctx, int r) -{ - unsigned int mxcsr, new_mxcsr; - asm (STMXCSR " %0" : "=m" (*&mxcsr)); - new_mxcsr = ((mxcsr | 0x1f80) & ~0x603f) | (r << 3); - - ctx->env.__mxcsr = mxcsr; - if (__glibc_unlikely (mxcsr != new_mxcsr)) - { - asm volatile (LDMXCSR " %0" : : "m" (*&new_mxcsr)); - ctx->updated_status = true; - } - else - ctx->updated_status = false; -} - -/* Unconditional since we want to overwrite any exceptions that occurred in the - context. This is also why all fehold* functions unconditionally write into - ctx->env. */ -static __always_inline void -libc_fesetenv_sse_ctx (struct rm_ctx *ctx) -{ - libc_fesetenv_sse (&ctx->env); -} - -static __always_inline void -libc_feupdateenv_sse_ctx (struct rm_ctx *ctx) -{ - if (__glibc_unlikely (ctx->updated_status)) - libc_feupdateenv_test_sse (&ctx->env, 0); -} - -static __always_inline void -libc_feholdexcept_setround_387_prec_ctx (struct rm_ctx *ctx, int r) -{ - libc_feholdexcept_387 (&ctx->env); - - fpu_control_t cw = ctx->env.__control_word; - fpu_control_t old_cw = cw; - cw &= ~(_FPU_RC_ZERO | _FPU_EXTENDED); - cw |= r | 0x3f; - - if (__glibc_unlikely (old_cw != cw)) - { - _FPU_SETCW (cw); - ctx->updated_status = true; - } - else - ctx->updated_status = false; -} - -static __always_inline void -libc_feholdexcept_setround_387_ctx (struct rm_ctx *ctx, int r) -{ - libc_feholdexcept_setround_387_prec_ctx (ctx, r | _FPU_EXTENDED); -} - -static __always_inline void -libc_feholdexcept_setround_387_53bit_ctx (struct rm_ctx *ctx, int r) -{ - libc_feholdexcept_setround_387_prec_ctx (ctx, r | _FPU_DOUBLE); -} - -static __always_inline void -libc_feholdsetround_387_prec_ctx (struct rm_ctx *ctx, int r) -{ - fpu_control_t cw, new_cw; - - _FPU_GETCW (cw); - new_cw = cw; - new_cw &= ~(_FPU_RC_ZERO | _FPU_EXTENDED); - new_cw |= r; - - ctx->env.__control_word = cw; - if (__glibc_unlikely (new_cw != cw)) - { - _FPU_SETCW (new_cw); - ctx->updated_status = true; - } - else - ctx->updated_status = false; -} - -static __always_inline void -libc_feholdsetround_387_ctx (struct rm_ctx *ctx, int r) -{ - libc_feholdsetround_387_prec_ctx (ctx, r | _FPU_EXTENDED); -} - -static __always_inline void -libc_feholdsetround_387_53bit_ctx (struct rm_ctx *ctx, int r) -{ - libc_feholdsetround_387_prec_ctx (ctx, r | _FPU_DOUBLE); -} - -static __always_inline void -libc_feholdsetround_sse_ctx (struct rm_ctx *ctx, int r) -{ - unsigned int mxcsr, new_mxcsr; - - asm (STMXCSR " %0" : "=m" (*&mxcsr)); - new_mxcsr = (mxcsr & ~0x6000) | (r << 3); - - ctx->env.__mxcsr = mxcsr; - if (__glibc_unlikely (new_mxcsr != mxcsr)) - { - asm volatile (LDMXCSR " %0" : : "m" (*&new_mxcsr)); - ctx->updated_status = true; - } - else - ctx->updated_status = false; -} - -static __always_inline void -libc_feresetround_sse_ctx (struct rm_ctx *ctx) -{ - if (__glibc_unlikely (ctx->updated_status)) - libc_feresetround_sse (&ctx->env); -} - -static __always_inline void -libc_feresetround_387_ctx (struct rm_ctx *ctx) -{ - if (__glibc_unlikely (ctx->updated_status)) - _FPU_SETCW (ctx->env.__control_word); -} - -static __always_inline void -libc_feupdateenv_387_ctx (struct rm_ctx *ctx) -{ - if (__glibc_unlikely (ctx->updated_status)) - libc_feupdateenv_test_387 (&ctx->env, 0); -} - -#ifdef __SSE_MATH__ -# define libc_feholdexcept_setroundf_ctx libc_feholdexcept_setround_sse_ctx -# define libc_fesetenvf_ctx libc_fesetenv_sse_ctx -# define libc_feupdateenvf_ctx libc_feupdateenv_sse_ctx -# define libc_feholdsetroundf_ctx libc_feholdsetround_sse_ctx -# define libc_feresetroundf_ctx libc_feresetround_sse_ctx -#else -# define libc_feholdexcept_setroundf_ctx libc_feholdexcept_setround_387_ctx -# define libc_feupdateenvf_ctx libc_feupdateenv_387_ctx -# define libc_feholdsetroundf_ctx libc_feholdsetround_387_ctx -# define libc_feresetroundf_ctx libc_feresetround_387_ctx -#endif /* __SSE_MATH__ */ - -#ifdef __SSE2_MATH__ -# define libc_feholdexcept_setround_ctx libc_feholdexcept_setround_sse_ctx -# define libc_fesetenv_ctx libc_fesetenv_sse_ctx -# define libc_feupdateenv_ctx libc_feupdateenv_sse_ctx -# define libc_feholdsetround_ctx libc_feholdsetround_sse_ctx -# define libc_feresetround_ctx libc_feresetround_sse_ctx -#else -# define libc_feholdexcept_setround_ctx libc_feholdexcept_setround_387_ctx -# define libc_feupdateenv_ctx libc_feupdateenv_387_ctx -# define libc_feholdsetround_ctx libc_feholdsetround_387_ctx -# define libc_feresetround_ctx libc_feresetround_387_ctx -#endif /* __SSE2_MATH__ */ - -#define libc_feholdexcept_setroundl_ctx libc_feholdexcept_setround_387_ctx -#define libc_feupdateenvl_ctx libc_feupdateenv_387_ctx -#define libc_feholdsetroundl_ctx libc_feholdsetround_387_ctx -#define libc_feresetroundl_ctx libc_feresetround_387_ctx - -#ifndef __SSE2_MATH__ -# define libc_feholdsetround_53bit_ctx libc_feholdsetround_387_53bit_ctx -# define libc_feresetround_53bit_ctx libc_feresetround_387_ctx -#endif - -#undef __mxcsr - -#endif /* FENV_PRIVATE_H */ diff --git a/sysdeps/i386/fpu/fesetenv.c b/sysdeps/i386/fpu/fesetenv.c deleted file mode 100644 index a338e5d555..0000000000 --- a/sysdeps/i386/fpu/fesetenv.c +++ /dev/null @@ -1,131 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - -/* All exceptions, including the x86-specific "denormal operand" - exception. */ -#define FE_ALL_EXCEPT_X86 (FE_ALL_EXCEPT | __FE_DENORM) - - -int -__fesetenv (const fenv_t *envp) -{ - fenv_t temp; - - /* The memory block used by fstenv/fldenv has a size of 28 bytes. */ - assert (sizeof (fenv_t) == 28); - - /* Install the environment specified by ENVP. But there are a few - values which we do not want to come from the saved environment. - Therefore, we get the current environment and replace the values - we want to use from the environment specified by the parameter. */ - __asm__ ("fnstenv %0" : "=m" (*&temp)); - - if (envp == FE_DFL_ENV) - { - temp.__control_word |= FE_ALL_EXCEPT_X86; - temp.__control_word &= ~FE_TOWARDZERO; - temp.__control_word |= _FPU_EXTENDED; - temp.__status_word &= ~FE_ALL_EXCEPT_X86; - } - else if (envp == FE_NOMASK_ENV) - { - temp.__control_word &= ~(FE_ALL_EXCEPT | FE_TOWARDZERO); - /* Keep the "denormal operand" exception masked. */ - temp.__control_word |= __FE_DENORM; - temp.__control_word |= _FPU_EXTENDED; - temp.__status_word &= ~FE_ALL_EXCEPT_X86; - } - else - { - temp.__control_word &= ~(FE_ALL_EXCEPT_X86 - | FE_TOWARDZERO - | _FPU_EXTENDED); - temp.__control_word |= (envp->__control_word - & (FE_ALL_EXCEPT_X86 - | FE_TOWARDZERO - | _FPU_EXTENDED)); - temp.__status_word &= ~FE_ALL_EXCEPT_X86; - temp.__status_word |= envp->__status_word & FE_ALL_EXCEPT_X86; - } - temp.__eip = 0; - temp.__cs_selector = 0; - temp.__opcode = 0; - temp.__data_offset = 0; - temp.__data_selector = 0; - - __asm__ ("fldenv %0" : : "m" (temp)); - - if (HAS_CPU_FEATURE (SSE)) - { - unsigned int mxcsr; - __asm__ ("stmxcsr %0" : "=m" (mxcsr)); - - if (envp == FE_DFL_ENV) - { - /* Clear SSE exceptions. */ - mxcsr &= ~FE_ALL_EXCEPT_X86; - /* Set mask for SSE MXCSR. */ - mxcsr |= (FE_ALL_EXCEPT_X86 << 7); - /* Set rounding to FE_TONEAREST. */ - mxcsr &= ~0x6000; - mxcsr |= (FE_TONEAREST << 3); - /* Clear the FZ and DAZ bits. */ - mxcsr &= ~0x8040; - } - else if (envp == FE_NOMASK_ENV) - { - /* Clear SSE exceptions. */ - mxcsr &= ~FE_ALL_EXCEPT_X86; - /* Do not mask exceptions. */ - mxcsr &= ~(FE_ALL_EXCEPT << 7); - /* Keep the "denormal operand" exception masked. */ - mxcsr |= (__FE_DENORM << 7); - /* Set rounding to FE_TONEAREST. */ - mxcsr &= ~0x6000; - mxcsr |= (FE_TONEAREST << 3); - /* Clear the FZ and DAZ bits. */ - mxcsr &= ~0x8040; - } - else - mxcsr = envp->__eip; - - __asm__ ("ldmxcsr %0" : : "m" (mxcsr)); - } - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetenv, __old_fesetenv) -compat_symbol (libm, __old_fesetenv, fesetenv, GLIBC_2_1); -#endif - -libm_hidden_def (__fesetenv) -libm_hidden_ver (__fesetenv, fesetenv) -versioned_symbol (libm, __fesetenv, fesetenv, GLIBC_2_2); diff --git a/sysdeps/i386/fpu/fesetexcept.c b/sysdeps/i386/fpu/fesetexcept.c deleted file mode 100644 index adfcf17ba6..0000000000 --- a/sysdeps/i386/fpu/fesetexcept.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Set given exception flags. i386 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fesetexcept (int excepts) -{ - fenv_t temp; - - __asm__ ("fnstenv %0" : "=m" (*&temp)); - temp.__status_word |= excepts & FE_ALL_EXCEPT; - __asm__ ("fldenv %0" : : "m" (*&temp)); - - return 0; -} diff --git a/sysdeps/i386/fpu/fesetmode.c b/sysdeps/i386/fpu/fesetmode.c deleted file mode 100644 index bd9f74cd97..0000000000 --- a/sysdeps/i386/fpu/fesetmode.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Install given floating-point control modes. i386 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* All exceptions, including the x86-specific "denormal operand" - exception. */ -#define FE_ALL_EXCEPT_X86 (FE_ALL_EXCEPT | __FE_DENORM) - -int -fesetmode (const femode_t *modep) -{ - fpu_control_t cw; - if (modep == FE_DFL_MODE) - cw = _FPU_DEFAULT; - else - cw = modep->__control_word; - _FPU_SETCW (cw); - if (HAS_CPU_FEATURE (SSE)) - { - unsigned int mxcsr; - __asm__ ("stmxcsr %0" : "=m" (mxcsr)); - /* Preserve SSE exception flags but restore other state in - MXCSR. */ - mxcsr &= FE_ALL_EXCEPT_X86; - if (modep == FE_DFL_MODE) - /* Default MXCSR state has all bits zero except for those - masking exceptions. */ - mxcsr |= FE_ALL_EXCEPT_X86 << 7; - else - mxcsr |= modep->__mxcsr & ~FE_ALL_EXCEPT_X86; - __asm__ ("ldmxcsr %0" : : "m" (mxcsr)); - } - return 0; -} diff --git a/sysdeps/i386/fpu/fesetround.c b/sysdeps/i386/fpu/fesetround.c deleted file mode 100644 index a3fa6235c0..0000000000 --- a/sysdeps/i386/fpu/fesetround.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -__fesetround (int round) -{ - unsigned short int cw; - - if ((round & ~0xc00) != 0) - /* ROUND is no valid rounding mode. */ - return 1; - - __asm__ ("fnstcw %0" : "=m" (*&cw)); - cw &= ~0xc00; - cw |= round; - __asm__ ("fldcw %0" : : "m" (*&cw)); - - /* If the CPU supports SSE we set the MXCSR as well. */ - if (HAS_CPU_FEATURE (SSE)) - { - unsigned int xcw; - - __asm__ ("stmxcsr %0" : "=m" (*&xcw)); - xcw &= ~0x6000; - xcw |= round << 3; - __asm__ ("ldmxcsr %0" : : "m" (*&xcw)); - } - - return 0; -} -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/i386/fpu/feupdateenv.c b/sysdeps/i386/fpu/feupdateenv.c deleted file mode 100644 index b610289cd0..0000000000 --- a/sysdeps/i386/fpu/feupdateenv.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -__feupdateenv (const fenv_t *envp) -{ - fexcept_t temp; - unsigned int xtemp = 0; - - /* Save current exceptions. */ - __asm__ ("fnstsw %0" : "=m" (*&temp)); - - /* If the CPU supports SSE we test the MXCSR as well. */ - if (HAS_CPU_FEATURE (SSE)) - __asm__ ("stmxcsr %0" : "=m" (*&xtemp)); - - temp = (temp | xtemp) & FE_ALL_EXCEPT; - - /* Install new environment. */ - __fesetenv (envp); - - /* Raise the saved exception. Incidently for us the implementation - defined format of the values in objects of type fexcept_t is the - same as the ones specified using the FE_* constants. */ - __feraiseexcept ((int) temp); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feupdateenv, __old_feupdateenv) -compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1); -#endif - -libm_hidden_def (__feupdateenv) -libm_hidden_ver (__feupdateenv, feupdateenv) -versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2); diff --git a/sysdeps/i386/fpu/fgetexcptflg.c b/sysdeps/i386/fpu/fgetexcptflg.c deleted file mode 100644 index 954e5f69d8..0000000000 --- a/sysdeps/i386/fpu/fgetexcptflg.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -int -__fegetexceptflag (fexcept_t *flagp, int excepts) -{ - fexcept_t temp; - - /* Get the current exceptions. */ - __asm__ ("fnstsw %0" : "=m" (*&temp)); - - *flagp = temp & excepts & FE_ALL_EXCEPT; - - /* If the CPU supports SSE, we clear the MXCSR as well. */ - if (HAS_CPU_FEATURE (SSE)) - { - unsigned int sse_exc; - - /* Get the current MXCSR. */ - __asm__ ("stmxcsr %0" : "=m" (*&sse_exc)); - - *flagp |= sse_exc & excepts & FE_ALL_EXCEPT; - } - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetexceptflag, __old_fegetexceptflag) -compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2); diff --git a/sysdeps/i386/fpu/fraiseexcpt.c b/sysdeps/i386/fpu/fraiseexcpt.c deleted file mode 100644 index 913d7b912c..0000000000 --- a/sysdeps/i386/fpu/fraiseexcpt.c +++ /dev/null @@ -1,124 +0,0 @@ -/* Raise given exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__feraiseexcept (int excepts) -{ - /* Raise exceptions represented by EXPECTS. But we must raise only - one signal at a time. It is important that if the overflow/underflow - exception and the inexact exception are given at the same time, - the overflow/underflow exception follows the inexact exception. */ - - /* First: invalid exception. */ - if ((FE_INVALID & excepts) != 0) - { - /* One example of an invalid operation is 0.0 / 0.0. */ - double d; - __asm__ __volatile__ ("fldz; fdiv %%st, %%st(0); fwait" : "=t" (d)); - (void) &d; - } - - /* Next: division by zero. */ - if ((FE_DIVBYZERO & excepts) != 0) - { - double d; - __asm__ __volatile__ ("fldz; fld1; fdivp %%st, %%st(1); fwait" - : "=t" (d)); - (void) &d; - } - - /* Next: overflow. */ - if ((FE_OVERFLOW & excepts) != 0) - { - /* There is no way to raise only the overflow flag. Do it the - hard way. */ - fenv_t temp; - - /* Bah, we have to clear selected exceptions. Since there is no - `fldsw' instruction we have to do it the hard way. */ - __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp)); - - /* Set the relevant bits. */ - temp.__status_word |= FE_OVERFLOW; - - /* Put the new data in effect. */ - __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp)); - - /* And raise the exception. */ - __asm__ __volatile__ ("fwait"); - } - - /* Next: underflow. */ - if ((FE_UNDERFLOW & excepts) != 0) - { - /* There is no way to raise only the underflow flag. Do it the - hard way. */ - fenv_t temp; - - /* Bah, we have to clear selected exceptions. Since there is no - `fldsw' instruction we have to do it the hard way. */ - __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp)); - - /* Set the relevant bits. */ - temp.__status_word |= FE_UNDERFLOW; - - /* Put the new data in effect. */ - __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp)); - - /* And raise the exception. */ - __asm__ __volatile__ ("fwait"); - } - - /* Last: inexact. */ - if ((FE_INEXACT & excepts) != 0) - { - /* There is no way to raise only the inexact flag. Do it the - hard way. */ - fenv_t temp; - - /* Bah, we have to clear selected exceptions. Since there is no - `fldsw' instruction we have to do it the hard way. */ - __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp)); - - /* Set the relevant bits. */ - temp.__status_word |= FE_INEXACT; - - /* Put the new data in effect. */ - __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp)); - - /* And raise the exception. */ - __asm__ __volatile__ ("fwait"); - } - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feraiseexcept, __old_feraiseexcept) -compat_symbol (libm, __old_feraiseexcept, feraiseexcept, GLIBC_2_1); -#endif - -libm_hidden_def (__feraiseexcept) -libm_hidden_ver (__feraiseexcept, feraiseexcept) -versioned_symbol (libm, __feraiseexcept, feraiseexcept, GLIBC_2_2); diff --git a/sysdeps/i386/fpu/fsetexcptflg.c b/sysdeps/i386/fpu/fsetexcptflg.c deleted file mode 100644 index efa64aaefd..0000000000 --- a/sysdeps/i386/fpu/fsetexcptflg.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -int -__fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - fenv_t temp; - - /* Get the current environment. We have to do this since we cannot - separately set the status word. */ - __asm__ ("fnstenv %0" : "=m" (*&temp)); - - temp.__status_word &= ~(excepts & FE_ALL_EXCEPT); - temp.__status_word |= *flagp & excepts & FE_ALL_EXCEPT; - - /* Store the new status word (along with the rest of the environment. - Possibly new exceptions are set but they won't get executed unless - the next floating-point instruction. */ - __asm__ ("fldenv %0" : : "m" (*&temp)); - - /* If the CPU supports SSE, we set the MXCSR as well. */ - if (HAS_CPU_FEATURE (SSE)) - { - unsigned int xnew_exc; - - /* Get the current MXCSR. */ - __asm__ ("stmxcsr %0" : "=m" (*&xnew_exc)); - - /* Set the relevant bits. */ - xnew_exc &= ~(excepts & FE_ALL_EXCEPT); - xnew_exc |= *flagp & excepts & FE_ALL_EXCEPT; - - /* Put the new data in effect. */ - __asm__ ("ldmxcsr %0" : : "m" (*&xnew_exc)); - } - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetexceptflag, __old_fesetexceptflag) -compat_symbol (libm, __old_fesetexceptflag, fesetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fesetexceptflag, fesetexceptflag, GLIBC_2_2); diff --git a/sysdeps/i386/fpu/ftestexcept.c b/sysdeps/i386/fpu/ftestexcept.c deleted file mode 100644 index f523f9e709..0000000000 --- a/sysdeps/i386/fpu/ftestexcept.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -fetestexcept (int excepts) -{ - short temp; - int xtemp = 0; - - /* Get current exceptions. */ - __asm__ ("fnstsw %0" : "=a" (temp)); - - /* If the CPU supports SSE we test the MXCSR as well. */ - if (HAS_CPU_FEATURE (SSE)) - __asm__ ("stmxcsr %0" : "=m" (*&xtemp)); - - return (temp | xtemp) & excepts & FE_ALL_EXCEPT; -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/i386/fpu/halfulp.c b/sysdeps/i386/fpu/halfulp.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/i386/fpu/halfulp.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/i386/fpu/i386-math-asm.h b/sysdeps/i386/fpu/i386-math-asm.h deleted file mode 100644 index 6ffc8e6f64..0000000000 --- a/sysdeps/i386/fpu/i386-math-asm.h +++ /dev/null @@ -1,340 +0,0 @@ -/* Helper macros for x86 libm functions. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _I386_MATH_ASM_H -#define _I386_MATH_ASM_H 1 - -/* Remove excess range and precision by storing a value on the stack - and loading it back. */ -#define FLT_NARROW_EVAL \ - subl $4, %esp; \ - cfi_adjust_cfa_offset (4); \ - fstps (%esp); \ - flds (%esp); \ - addl $4, %esp; \ - cfi_adjust_cfa_offset (-4); -#define DBL_NARROW_EVAL \ - subl $8, %esp; \ - cfi_adjust_cfa_offset (8); \ - fstpl (%esp); \ - fldl (%esp); \ - addl $8, %esp; \ - cfi_adjust_cfa_offset (-8); - -/* Define constants for the minimum value of a floating-point - type. */ -#define DEFINE_FLT_MIN \ - .section .rodata.cst4,"aM",@progbits,4; \ - .p2align 2; \ - .type flt_min,@object; \ -flt_min: \ - .byte 0, 0, 0x80, 0; \ - .size flt_min, .-flt_min; -#define DEFINE_DBL_MIN \ - .section .rodata.cst8,"aM",@progbits,8; \ - .p2align 3; \ - .type dbl_min,@object; \ -dbl_min: \ - .byte 0, 0, 0, 0, 0, 0, 0x10, 0; \ - .size dbl_min, .-dbl_min; -#define DEFINE_LDBL_MIN \ - .section .rodata.cst16,"aM",@progbits,16; \ - .p2align 4; \ - .type ldbl_min,@object; \ -ldbl_min: \ - .byte 0, 0, 0, 0, 0, 0, 0, 0x80, 0x1, 0; \ - .byte 0, 0, 0, 0, 0, 0; \ - .size ldbl_min, .-ldbl_min; - -/* Remove excess range and precision by storing a value on the stack - and loading it back. The value is given to be nonnegative or NaN; - if it is subnormal, also force an underflow exception. The - relevant constant for the minimum of the type must have been - defined, the MO macro must have been defined for access to memory - operands, and, if PIC, the PIC register must have been loaded. */ -#define FLT_NARROW_EVAL_UFLOW_NONNEG_NAN \ - subl $4, %esp; \ - cfi_adjust_cfa_offset (4); \ - flds MO(flt_min); \ - fld %st(1); \ - fucompp; \ - fnstsw; \ - sahf; \ - jnc 6424f; \ - fld %st(0); \ - fmul %st(0); \ - fstps (%esp); \ -6424: fstps (%esp); \ - flds (%esp); \ - addl $4, %esp; \ - cfi_adjust_cfa_offset (-4); -#define DBL_NARROW_EVAL_UFLOW_NONNEG_NAN \ - subl $8, %esp; \ - cfi_adjust_cfa_offset (8); \ - fldl MO(dbl_min); \ - fld %st(1); \ - fucompp; \ - fnstsw; \ - sahf; \ - jnc 6453f; \ - fld %st(0); \ - fmul %st(0); \ - fstpl (%esp); \ -6453: fstpl (%esp); \ - fldl (%esp); \ - addl $8, %esp; \ - cfi_adjust_cfa_offset (-8); - -/* Likewise, but the argument is not a NaN (so fcom instructions, - which support memory operands, can be used). */ -#define FLT_NARROW_EVAL_UFLOW_NONNEG \ - subl $4, %esp; \ - cfi_adjust_cfa_offset (4); \ - fcoms MO(flt_min); \ - fnstsw; \ - sahf; \ - jnc 6424f; \ - fld %st(0); \ - fmul %st(0); \ - fstps (%esp); \ -6424: fstps (%esp); \ - flds (%esp); \ - addl $4, %esp; \ - cfi_adjust_cfa_offset (-4); -#define DBL_NARROW_EVAL_UFLOW_NONNEG \ - subl $8, %esp; \ - cfi_adjust_cfa_offset (8); \ - fcoml MO(dbl_min); \ - fnstsw; \ - sahf; \ - jnc 6453f; \ - fld %st(0); \ - fmul %st(0); \ - fstpl (%esp); \ -6453: fstpl (%esp); \ - fldl (%esp); \ - addl $8, %esp; \ - cfi_adjust_cfa_offset (-8); - -/* Likewise, but the non-NaN argument may be negative. */ -#define FLT_NARROW_EVAL_UFLOW_NONNAN \ - subl $4, %esp; \ - cfi_adjust_cfa_offset (4); \ - fld %st(0); \ - fabs; \ - fcomps MO(flt_min); \ - fnstsw; \ - sahf; \ - jnc 6424f; \ - fld %st(0); \ - fmul %st(0); \ - fstps (%esp); \ -6424: fstps (%esp); \ - flds (%esp); \ - addl $4, %esp; \ - cfi_adjust_cfa_offset (-4); -#define DBL_NARROW_EVAL_UFLOW_NONNAN \ - subl $8, %esp; \ - cfi_adjust_cfa_offset (8); \ - fld %st(0); \ - fabs; \ - fcompl MO(dbl_min); \ - fnstsw; \ - sahf; \ - jnc 6453f; \ - fld %st(0); \ - fmul %st(0); \ - fstpl (%esp); \ -6453: fstpl (%esp); \ - fldl (%esp); \ - addl $8, %esp; \ - cfi_adjust_cfa_offset (-8); - -/* Force an underflow exception if the given value is subnormal. The - relevant constant for the minimum of the type must have been - defined, the MO macro must have been defined for access to memory - operands, and, if PIC, the PIC register must have been loaded. */ -#define FLT_CHECK_FORCE_UFLOW \ - flds MO(flt_min); \ - fld %st(1); \ - fabs; \ - fucompp; \ - fnstsw; \ - sahf; \ - jnc 6424f; \ - subl $4, %esp; \ - cfi_adjust_cfa_offset (4); \ - fld %st(0); \ - fmul %st(0); \ - fstps (%esp); \ - addl $4, %esp; \ - cfi_adjust_cfa_offset (-4); \ -6424: -#define DBL_CHECK_FORCE_UFLOW \ - fldl MO(dbl_min); \ - fld %st(1); \ - fabs; \ - fucompp; \ - fnstsw; \ - sahf; \ - jnc 6453f; \ - subl $8, %esp; \ - cfi_adjust_cfa_offset (8); \ - fld %st(0); \ - fmul %st(0); \ - fstpl (%esp); \ - addl $8, %esp; \ - cfi_adjust_cfa_offset (-8); \ -6453: - -/* Likewise, but also remove excess range and precision if the value - is subnormal. */ -#define FLT_CHECK_FORCE_UFLOW_NARROW \ - flds MO(flt_min); \ - fld %st(1); \ - fabs; \ - fucompp; \ - fnstsw; \ - sahf; \ - jnc 6424f; \ - subl $4, %esp; \ - cfi_adjust_cfa_offset (4); \ - fld %st(0); \ - fmul %st(0); \ - fstps (%esp); \ - fstps (%esp); \ - flds (%esp); \ - addl $4, %esp; \ - cfi_adjust_cfa_offset (-4); \ -6424: -#define DBL_CHECK_FORCE_UFLOW_NARROW \ - fldl MO(dbl_min); \ - fld %st(1); \ - fabs; \ - fucompp; \ - fnstsw; \ - sahf; \ - jnc 6453f; \ - subl $8, %esp; \ - cfi_adjust_cfa_offset (8); \ - fld %st(0); \ - fmul %st(0); \ - fstpl (%esp); \ - fstpl (%esp); \ - fldl (%esp); \ - addl $8, %esp; \ - cfi_adjust_cfa_offset (-8); \ -6453: - -/* Likewise, but the argument is nonnegative or NaN. */ -#define LDBL_CHECK_FORCE_UFLOW_NONNEG_NAN \ - fldt MO(ldbl_min); \ - fld %st(1); \ - fucompp; \ - fnstsw; \ - sahf; \ - jnc 6464f; \ - fld %st(0); \ - fmul %st(0); \ - fstp %st(0); \ -6464: - -/* Likewise, but the argument is not a NaN. */ -#define FLT_CHECK_FORCE_UFLOW_NONNAN \ - fld %st(0); \ - fabs; \ - fcomps MO(flt_min); \ - fnstsw; \ - sahf; \ - jnc 6424f; \ - subl $4, %esp; \ - cfi_adjust_cfa_offset (4); \ - fld %st(0); \ - fmul %st(0); \ - fstps (%esp); \ - addl $4, %esp; \ - cfi_adjust_cfa_offset (-4); \ -6424: -#define DBL_CHECK_FORCE_UFLOW_NONNAN \ - fld %st(0); \ - fabs; \ - fcompl MO(dbl_min); \ - fnstsw; \ - sahf; \ - jnc 6453f; \ - subl $8, %esp; \ - cfi_adjust_cfa_offset (8); \ - fld %st(0); \ - fmul %st(0); \ - fstpl (%esp); \ - addl $8, %esp; \ - cfi_adjust_cfa_offset (-8); \ -6453: -#define LDBL_CHECK_FORCE_UFLOW_NONNAN \ - fldt MO(ldbl_min); \ - fld %st(1); \ - fabs; \ - fcompp; \ - fnstsw; \ - sahf; \ - jnc 6464f; \ - fld %st(0); \ - fmul %st(0); \ - fstp %st(0); \ -6464: - -/* Likewise, but the argument is nonnegative and not a NaN. */ -#define FLT_CHECK_FORCE_UFLOW_NONNEG \ - fcoms MO(flt_min); \ - fnstsw; \ - sahf; \ - jnc 6424f; \ - subl $4, %esp; \ - cfi_adjust_cfa_offset (4); \ - fld %st(0); \ - fmul %st(0); \ - fstps (%esp); \ - addl $4, %esp; \ - cfi_adjust_cfa_offset (-4); \ -6424: -#define DBL_CHECK_FORCE_UFLOW_NONNEG \ - fcoml MO(dbl_min); \ - fnstsw; \ - sahf; \ - jnc 6453f; \ - subl $8, %esp; \ - cfi_adjust_cfa_offset (8); \ - fld %st(0); \ - fmul %st(0); \ - fstpl (%esp); \ - addl $8, %esp; \ - cfi_adjust_cfa_offset (-8); \ -6453: -#define LDBL_CHECK_FORCE_UFLOW_NONNEG \ - fldt MO(ldbl_min); \ - fld %st(1); \ - fcompp; \ - fnstsw; \ - sahf; \ - jnc 6464f; \ - fld %st(0); \ - fmul %st(0); \ - fstp %st(0); \ -6464: - -#endif /* i386-math-asm.h. */ diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps deleted file mode 100644 index 0fc50907ad..0000000000 --- a/sysdeps/i386/fpu/libm-test-ulps +++ /dev/null @@ -1,2202 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_downward": -ildouble: 2 -ldouble: 2 - -Function: "acos_towardzero": -ildouble: 2 -ldouble: 2 - -Function: "acos_upward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "acosh": -double: 1 -idouble: 1 -ildouble: 4 -ldouble: 2 - -Function: "acosh_downward": -double: 1 -idouble: 1 -ildouble: 6 -ldouble: 4 - -Function: "acosh_towardzero": -double: 1 -idouble: 1 -ildouble: 6 -ldouble: 4 - -Function: "acosh_upward": -double: 1 -idouble: 1 -ildouble: 4 -ldouble: 3 - -Function: "asin": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_downward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "asin_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asinh": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "asinh_downward": -double: 1 -float: 1 -idouble: 1 -ildouble: 5 -ldouble: 5 - -Function: "asinh_towardzero": -double: 1 -float: 1 -idouble: 1 -ildouble: 4 -ldouble: 4 - -Function: "asinh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: "atan": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atanh": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "atanh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 4 - -Function: "atanh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 3 - -Function: "atanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: "cabs": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cacos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "cacos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "cacos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_upward": -double: 7 -float: 7 -idouble: 7 -ifloat: 7 -ildouble: 7 -ldouble: 7 - -Function: Real part of "cacosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacosh_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "cacosh_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "carg": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "carg_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "carg_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "carg_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "casin_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "casin_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casin_upward": -double: 7 -float: 7 -idouble: 7 -ifloat: 7 -ildouble: 7 -ldouble: 7 - -Function: Real part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "casinh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "casinh_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casinh_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_upward": -double: 7 -float: 7 -idouble: 7 -ifloat: 7 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "casinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catan": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catan_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Real part of "catan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Real part of "catan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catanh": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "cbrt_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "cbrt_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "cbrt_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccos_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ccos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccos_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccosh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ccosh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccosh_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ccosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cexp_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "cexp_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog10": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog10_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "clog10_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "clog10_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "clog10_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "clog_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "clog_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "cos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cos_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "cosh_downward": -double: 2 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 3 - -Function: "cosh_towardzero": -double: 2 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cosh_upward": -double: 4 -float: 2 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 3 - -Function: Real part of "cpow": -double: 2 -float: 5 -idouble: 2 -ifloat: 5 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cpow_downward": -double: 5 -float: 8 -idouble: 5 -ifloat: 8 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "cpow_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_towardzero": -double: 5 -float: 8 -idouble: 5 -ifloat: 8 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "cpow_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cpow_upward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cpow_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csin": -float: 1 -ifloat: 1 - -Function: Real part of "csin_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csin_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csin_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csinh": -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csinh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csinh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csqrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "csqrt_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Real part of "csqrt_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Real part of "csqrt_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "csqrt_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ctan_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctan_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctan_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctan_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ctanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctanh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctanh_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctanh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erfc": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "erfc_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "erfc_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "erfc_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "exp": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp10": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp10_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp10_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp10_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp2": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_downward": -ildouble: 1 -ldouble: 1 - -Function: "exp2_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_upward": -ildouble: 1 -ldouble: 1 - -Function: "exp_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "expm1": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "expm1_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "expm1_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "gamma": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "gamma_downward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "gamma_towardzero": -double: 4 -float: 2 -idouble: 4 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "gamma_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "hypot": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "j0": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "j0_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j0_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: "j0_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "j1": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "j1_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "j1_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "jn": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "jn_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "jn_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "jn_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "lgamma": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "lgamma_downward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "lgamma_towardzero": -double: 4 -float: 2 -idouble: 4 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "lgamma_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "log": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "log10": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "log10_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log10_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log10_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log1p": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "log1p_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "log1p_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "log1p_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "log2": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "log2_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "log2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log_downward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "log_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "log_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "pow": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "pow10": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "pow10_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow10_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow10_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow_downward": -double: 1 -idouble: 1 -ildouble: 4 -ldouble: 4 - -Function: "pow_towardzero": -double: 1 -idouble: 1 -ildouble: 4 -ldouble: 4 - -Function: "pow_upward": -double: 1 -idouble: 1 -ildouble: 4 -ldouble: 4 - -Function: "sin": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "sin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "sincos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sincos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "sincos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sincos_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "sinh": -double: 1 -ildouble: 2 -ldouble: 2 - -Function: "sinh_downward": -double: 2 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 5 - -Function: "sinh_towardzero": -double: 2 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 4 - -Function: "sinh_upward": -double: 4 -float: 2 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 5 - -Function: "tan": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "tan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "tan_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "tan_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "tanh": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "tanh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 7 -ldouble: 4 - -Function: "tanh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "tanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 4 - -Function: "tgamma": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "y0": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "y0_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "y0_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "y0_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "y1": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "y1_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "y1_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "yn": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "yn_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "yn_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -# end of automatic generation diff --git a/sysdeps/i386/fpu/libm-test-ulps-name b/sysdeps/i386/fpu/libm-test-ulps-name deleted file mode 100644 index 54ca0d8295..0000000000 --- a/sysdeps/i386/fpu/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -ix86 diff --git a/sysdeps/i386/fpu/math-tests.h b/sysdeps/i386/fpu/math-tests.h deleted file mode 100644 index 26d0633dc0..0000000000 --- a/sysdeps/i386/fpu/math-tests.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Configuration for math tests. 32-bit x86 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* On 32-bit x86, versions of GCC up to at least 4.8 are happy to use FPU load - instructions for sNaN values, and loading a float or double sNaN value will - already raise an INVALID exception as well as turn the sNaN into a qNaN, - rendering certain tests infeasible in this scenario. - . */ -#define SNAN_TESTS_float 0 -#define SNAN_TESTS_double 0 - -#include_next diff --git a/sysdeps/i386/fpu/math_private.h b/sysdeps/i386/fpu/math_private.h deleted file mode 100644 index 485214391f..0000000000 --- a/sysdeps/i386/fpu/math_private.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef I386_MATH_PRIVATE_H -#define I386_MATH_PRIVATE_H 1 - -#include "fenv_private.h" -#include_next - -#endif diff --git a/sysdeps/i386/fpu/mpatan.c b/sysdeps/i386/fpu/mpatan.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/i386/fpu/mpatan.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/i386/fpu/mpatan2.c b/sysdeps/i386/fpu/mpatan2.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/i386/fpu/mpatan2.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/i386/fpu/mpexp.c b/sysdeps/i386/fpu/mpexp.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/i386/fpu/mpexp.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/i386/fpu/mplog.c b/sysdeps/i386/fpu/mplog.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/i386/fpu/mplog.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/i386/fpu/mpsqrt.c b/sysdeps/i386/fpu/mpsqrt.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/i386/fpu/mpsqrt.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/i386/fpu/s_asinh.S b/sysdeps/i386/fpu/s_asinh.S deleted file mode 100644 index 1a60f7de2c..0000000000 --- a/sysdeps/i386/fpu/s_asinh.S +++ /dev/null @@ -1,139 +0,0 @@ -/* ix87 specific implementation of arcsinh. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata - - .align ALIGNARG(4) - .type huge,@object -huge: .double 1e+300 - ASM_SIZE_DIRECTIVE(huge) - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - - .text -ENTRY(__asinh) - movl 8(%esp), %ecx - movl $0x7fffffff, %eax - andl %ecx, %eax - andl $0x80000000, %ecx - movl %eax, %edx - orl $0x800fffff, %edx - incl %edx - jz 7f // x in ±Inf or NaN - xorl %ecx, 8(%esp) - fldl 4(%esp) // |x| - cmpl $0x3e300000, %eax - jb 2f // |x| < 2^-28 - fldln2 // log(2) : |x| - cmpl $0x41b00000, %eax - fxch // |x| : log(2) - ja 3f // |x| > 2^28 -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - cmpl $0x40000000, %eax - ja 5f // |x| > 2 - - // 2^-28 <= |x| <= 2 => y = sign(x)*log1p(|x|+|x|^2/(1+sqrt(1+|x|^2))) - fld %st // |x| : |x| : log(2) - fmul %st(1) // |x|^2 : |x| : log(2) - fld %st // |x|^2 : |x|^2 : |x| : log(2) - faddl MO(one) // 1+|x|^2 : |x|^2 : |x| : log(2) - fsqrt // sqrt(1+|x|^2) : |x|^2 : |x| : log(2) - faddl MO(one) // 1+sqrt(1+|x|^2) : |x|^2 : |x| : log(2) - fdivrp // |x|^2/(1+sqrt(1+|x|^2)) : |x| : log(2) - faddp // |x|+|x|^2/(1+sqrt(1+|x|^2)) : log(2) - fcoml MO(limit) - fnstsw - sahf - ja 6f - fyl2xp1 - jecxz 4f - fchs -4: ret - -7: fldl 4(%esp) - ret - -6: faddl MO(one) - fyl2x - jecxz 4f - fchs -4: ret - - // |x| < 2^-28 => y = x (inexact iff |x| != 0.0) - .align ALIGNARG(4) -2: -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - jecxz 4f - fchs // x -4: fld %st // x : x - faddl MO(huge) // huge+x : x - fstp %st(0) // x - cmpl $0x00100000, %eax - jae 8f - subl $8, %esp - cfi_adjust_cfa_offset (8) - fld %st(0) - fmul %st(0) - fstpl (%esp) - addl $8, %esp - cfi_adjust_cfa_offset (-8) -8: ret - - // |x| > 2^28 => y = sign(x) * (log(|x|) + log(2)) - .align ALIGNARG(4) -3: fyl2x // log(|x|) - fldln2 // log(2) : log(|x|) - faddp // log(|x|)+log(2) - jecxz 4f - fchs -4: ret - - // |x| > 2 => y = sign(x) * log(2*|x| + 1/(|x|+sqrt(x*x+1))) - .align ALIGNARG(4) -5: fld %st // |x| : |x| : log(2) - fadd %st, %st(1) // |x| : 2*|x| : log(2) - fld %st // |x| : |x| : 2*|x| : log(2) - fmul %st(1) // |x|^2 : |x| : 2*|x| : log(2) - faddl MO(one) // 1+|x|^2 : |x| : 2*|x| : log(2) - fsqrt // sqrt(1+|x|^2) : |x| : 2*|x| : log(2) - faddp // |x|+sqrt(1+|x|^2) : 2*|x| : log(2) - fdivrl MO(one) // 1/(|x|+sqrt(1+|x|^2)) : 2*|x| : log(2) - faddp // 2*|x|+1/(|x|+sqrt(1+|x|^2)) : log(2) - fyl2x // log(2*|x|+1/(|x|+sqrt(1+|x|^2))) - jecxz 4f - fchs -4: ret -END(__asinh) -weak_alias (__asinh, asinh) diff --git a/sysdeps/i386/fpu/s_asinhf.S b/sysdeps/i386/fpu/s_asinhf.S deleted file mode 100644 index 12bcfef934..0000000000 --- a/sysdeps/i386/fpu/s_asinhf.S +++ /dev/null @@ -1,139 +0,0 @@ -/* ix87 specific implementation of arcsinh. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata - - .align ALIGNARG(4) - .type huge,@object -huge: .double 1e+36 - ASM_SIZE_DIRECTIVE(huge) - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - - .text -ENTRY(__asinhf) - movl 4(%esp), %ecx - movl $0x7fffffff, %eax - andl %ecx, %eax - andl $0x80000000, %ecx - movl %eax, %edx - orl $0x807fffff, %edx - incl %edx - jz 7f // x in ±Inf or NaN - xorl %ecx, 4(%esp) - flds 4(%esp) // |x| - cmpl $0x38000000, %eax - jb 2f // |x| < 2^-14 - fldln2 // log(2) : |x| - cmpl $0x47000000, %eax - fxch // |x| : log(2) - ja 3f // |x| > 2^14 -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - cmpl $0x40000000, %eax - ja 5f // |x| > 2 - - // 2^-14 <= |x| <= 2 => y = sign(x)*log1p(|x|+|x|^2/(1+sqrt(1+|x|^2))) - fld %st // |x| : |x| : log(2) - fmul %st(1) // |x|^2 : |x| : log(2) - fld %st // |x|^2 : |x|^2 : |x| : log(2) - faddl MO(one) // 1+|x|^2 : |x|^2 : |x| : log(2) - fsqrt // sqrt(1+|x|^2) : |x|^2 : |x| : log(2) - faddl MO(one) // 1+sqrt(1+|x|^2) : |x|^2 : |x| : log(2) - fdivrp // |x|^2/(1+sqrt(1+|x|^2)) : |x| : log(2) - faddp // |x|+|x|^2/(1+sqrt(1+|x|^2)) : log(2) - fcoml MO(limit) - fnstsw - sahf - ja 6f - fyl2xp1 - jecxz 4f - fchs -4: ret - -7: flds 4(%esp) - ret - -6: faddl MO(one) - fyl2x - jecxz 4f - fchs -4: ret - - // |x| < 2^-14 => y = x (inexact iff |x| != 0.0) - .align ALIGNARG(4) -2: -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - jecxz 4f - fchs // x -4: fld %st // x : x - faddl MO(huge) // huge+x : x - fstp %st(0) // x - cmpl $0x00800000, %eax - jae 8f - subl $4, %esp - cfi_adjust_cfa_offset (4) - fld %st(0) - fmul %st(0) - fstps (%esp) - addl $4, %esp - cfi_adjust_cfa_offset (-4) -8: ret - - // |x| > 2^14 => y = sign(x) * (log(|x|) + log(2)) - .align ALIGNARG(4) -3: fyl2x // log(|x|) - fldln2 // log(2) : log(|x|) - faddp // log(|x|)+log(2) - jecxz 4f - fchs -4: ret - - // |x| > 2 => y = sign(x) * log(2*|x| + 1/(|x|+sqrt(x*x+1))) - .align ALIGNARG(4) -5: fld %st // |x| : |x| : log(2) - fadd %st, %st(1) // |x| : 2*|x| : log(2) - fld %st // |x| : |x| : 2*|x| : log(2) - fmul %st(1) // |x|^2 : |x| : 2*|x| : log(2) - faddl MO(one) // 1+|x|^2 : |x| : 2*|x| : log(2) - fsqrt // sqrt(1+|x|^2) : |x| : 2*|x| : log(2) - faddp // |x|+sqrt(1+|x|^2) : 2*|x| : log(2) - fdivrl MO(one) // 1/(|x|+sqrt(1+|x|^2)) : 2*|x| : log(2) - faddp // 2*|x|+1/(|x|+sqrt(1+|x|^2)) : log(2) - fyl2x // log(2*|x|+1/(|x|+sqrt(1+|x|^2))) - jecxz 4f - fchs -4: ret -END(__asinhf) -weak_alias (__asinhf, asinhf) diff --git a/sysdeps/i386/fpu/s_asinhl.S b/sysdeps/i386/fpu/s_asinhl.S deleted file mode 100644 index f31a267e78..0000000000 --- a/sysdeps/i386/fpu/s_asinhl.S +++ /dev/null @@ -1,144 +0,0 @@ -/* ix87 specific implementation of arcsinh. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata - - .align ALIGNARG(4) - .type huge,@object -huge: .tfloat 1e+4930 - ASM_SIZE_DIRECTIVE(huge) - .align ALIGNARG(4) - /* Please note that we use double value for 1.0. This number - has an exact representation and so we don't get accuracy - problems. The advantage is that the code is simpler. */ - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - - .text -ENTRY(__asinhl) - movl 12(%esp), %ecx - movl $0x7fff, %eax - andl %ecx, %eax - andl $0x8000, %ecx - movl %eax, %edx - orl $0xffff8000, %edx - incl %edx - jz 7f // x in ±Inf or NaN - xorl %ecx, 12(%esp) - fldt 4(%esp) // |x| - cmpl $0x3fde, %eax - jb 2f // |x| < 2^-34 - fldln2 // log(2) : |x| - cmpl $0x4020, %eax - fxch // |x| : log(2) - ja 3f // |x| > 2^34 -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - cmpl $0x4000, %eax - ja 5f // |x| > 2 - - // 2^-34 <= |x| <= 2 => y = sign(x)*log1p(|x|+|x|^2/(1+sqrt(1+|x|^2))) - fld %st // |x| : |x| : log(2) - fmul %st(1) // |x|^2 : |x| : log(2) - fld %st // |x|^2 : |x|^2 : |x| : log(2) - faddl MO(one) // 1+|x|^2 : |x|^2 : |x| : log(2) - fsqrt // sqrt(1+|x|^2) : |x|^2 : |x| : log(2) - faddl MO(one) // 1+sqrt(1+|x|^2) : |x|^2 : |x| : log(2) - fdivrp // |x|^2/(1+sqrt(1+|x|^2)) : |x| : log(2) - faddp // |x|+|x|^2/(1+sqrt(1+|x|^2)) : log(2) - fcoml MO(limit) - fnstsw - sahf - ja 6f - fyl2xp1 - jecxz 4f - fchs -4: ret - -7: fldt 4(%esp) - fadd %st - ret - -6: faddl MO(one) - fyl2x - jecxz 4f - fchs -4: ret - - // |x| < 2^-34 => y = x (inexact iff |x| != 0.0) - .align ALIGNARG(4) -2: -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - jecxz 4f - fchs // x -4: fld %st // x : x - fldt MO(huge) // huge : x : x - faddp // huge+x : x - fstp %st(0) // x - cmpl $0x0001, %eax - jae 8f - fld %st(0) - fmul %st(0) - fstp %st(0) -8: ret - - // |x| > 2^34 => y = sign(x) * (log(|x|) + log(2)) - .align ALIGNARG(4) -3: fyl2x // log(|x|) - fldln2 // log(2) : log(|x|) - faddp // log(|x|)+log(2) - jecxz 4f - fchs -4: ret - - // |x| > 2 => y = sign(x) * log(2*|x| + 1/(|x|+sqrt(x*x+1))) - .align ALIGNARG(4) -5: fld %st // |x| : |x| : log(2) - fadd %st, %st(1) // |x| : 2*|x| : log(2) - fld %st // |x| : |x| : 2*|x| : log(2) - fmul %st(1) // |x|^2 : |x| : 2*|x| : log(2) - faddl MO(one) // 1+|x|^2 : |x| : 2*|x| : log(2) - fsqrt // sqrt(1+|x|^2) : |x| : 2*|x| : log(2) - faddp // |x|+sqrt(1+|x|^2) : 2*|x| : log(2) - fdivrl MO(one) // 1/(|x|+sqrt(1+|x|^2)) : 2*|x| : log(2) - faddp // 2*|x|+1/(|x|+sqrt(1+|x|^2)) : log(2) - fyl2x // log(2*|x|+1/(|x|+sqrt(1+|x|^2))) - jecxz 4f - fchs -4: ret -END(__asinhl) -weak_alias (__asinhl, asinhl) diff --git a/sysdeps/i386/fpu/s_atan.S b/sysdeps/i386/fpu/s_atan.S deleted file mode 100644 index 644de78feb..0000000000 --- a/sysdeps/i386/fpu/s_atan.S +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include -#include - -RCSID("$NetBSD: s_atan.S,v 1.4 1995/05/08 23:50:41 jtc Exp $") - -DEFINE_DBL_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__atan) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - fldl 4(%esp) - fld1 - fpatan - DBL_CHECK_FORCE_UFLOW - ret -END (__atan) -weak_alias (__atan, atan) diff --git a/sysdeps/i386/fpu/s_atanf.S b/sysdeps/i386/fpu/s_atanf.S deleted file mode 100644 index 0589c1135e..0000000000 --- a/sysdeps/i386/fpu/s_atanf.S +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include -#include - -RCSID("$NetBSD: s_atanf.S,v 1.3 1995/05/08 23:51:33 jtc Exp $") - -DEFINE_FLT_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%ecx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__atanf) -#ifdef PIC - LOAD_PIC_REG (cx) -#endif - flds 4(%esp) - fld1 - fpatan - FLT_CHECK_FORCE_UFLOW - ret -END (__atanf) -weak_alias (__atanf, atanf) diff --git a/sysdeps/i386/fpu/s_atanl.c b/sysdeps/i386/fpu/s_atanl.c deleted file mode 100644 index b7dba88aad..0000000000 --- a/sysdeps/i386/fpu/s_atanl.c +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - */ - -#include - -long double -__atanl (long double x) -{ - long double res; - - asm ("fld1\n" - "fpatan" - : "=t" (res) : "0" (x)); - - return res; -} - -weak_alias (__atanl, atanl) diff --git a/sysdeps/i386/fpu/s_cbrt.S b/sysdeps/i386/fpu/s_cbrt.S deleted file mode 100644 index 7f01659eae..0000000000 --- a/sysdeps/i386/fpu/s_cbrt.S +++ /dev/null @@ -1,200 +0,0 @@ -/* Compute cubic root of double value. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Dirk Alboth and - Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata - - .align ALIGNARG(4) - .type f7,@object -f7: .double -0.145263899385486377 - ASM_SIZE_DIRECTIVE(f7) - .type f6,@object -f6: .double 0.784932344976639262 - ASM_SIZE_DIRECTIVE(f6) - .type f5,@object -f5: .double -1.83469277483613086 - ASM_SIZE_DIRECTIVE(f5) - .type f4,@object -f4: .double 2.44693122563534430 - ASM_SIZE_DIRECTIVE(f4) - .type f3,@object -f3: .double -2.11499494167371287 - ASM_SIZE_DIRECTIVE(f3) - .type f2,@object -f2: .double 1.50819193781584896 - ASM_SIZE_DIRECTIVE(f2) - .type f1,@object -f1: .double 0.354895765043919860 - ASM_SIZE_DIRECTIVE(f1) - -#define CBRT2 1.2599210498948731648 -#define ONE_CBRT2 0.793700525984099737355196796584 -#define SQR_CBRT2 1.5874010519681994748 -#define ONE_SQR_CBRT2 0.629960524947436582364439673883 - - .type factor,@object -factor: .double ONE_SQR_CBRT2 - .double ONE_CBRT2 - .double 1.0 - .double CBRT2 - .double SQR_CBRT2 - ASM_SIZE_DIRECTIVE(factor) - - .type two54,@object -two54: .byte 0, 0, 0, 0, 0, 0, 0x50, 0x43 - ASM_SIZE_DIRECTIVE(two54) - -#ifdef PIC -#define MO(op) op##@GOTOFF(%ebx) -#define MOX(op,x) op##@GOTOFF(%ebx,x,1) -#else -#define MO(op) op -#define MOX(op,x) op(x) -#endif - - .text -ENTRY(__cbrt) - movl 4(%esp), %ecx - movl 8(%esp), %eax - movl %eax, %edx - andl $0x7fffffff, %eax - orl %eax, %ecx - jz 1f - xorl %ecx, %ecx - cmpl $0x7ff00000, %eax - jae 1f - -#ifdef PIC - pushl %ebx - cfi_adjust_cfa_offset (4) - cfi_rel_offset (ebx, 0) - LOAD_PIC_REG (bx) -#endif - - cmpl $0x00100000, %eax - jae 2f - -#ifdef PIC - fldl 8(%esp) -#else - fldl 4(%esp) -#endif - fmull MO(two54) - movl $-54, %ecx -#ifdef PIC - fstpl 8(%esp) - movl 12(%esp), %eax -#else - fstpl 4(%esp) - movl 8(%esp), %eax -#endif - movl %eax, %edx - andl $0x7fffffff, %eax - -2: shrl $20, %eax - andl $0x800fffff, %edx - subl $1022, %eax - orl $0x3fe00000, %edx - addl %eax, %ecx -#ifdef PIC - movl %edx, 12(%esp) - - fldl 8(%esp) /* xm */ -#else - movl %edx, 8(%esp) - - fldl 4(%esp) /* xm */ -#endif - fabs - - /* The following code has two tracks: - a) compute the normalized cbrt value - b) compute xe/3 and xe%3 - The right track computes the value for b) and this is done - in an optimized way by avoiding division. - - But why two tracks at all? Very easy: efficiency. Some FP - instruction can overlap with a certain amount of integer (and - FP) instructions. So we get (except for the imull) all - instructions for free. */ - - fld %st(0) /* xm : xm */ - - fmull MO(f7) /* f7*xm : xm */ - movl $1431655766, %eax - faddl MO(f6) /* f6+f7*xm : xm */ - imull %ecx - fmul %st(1) /* (f6+f7*xm)*xm : xm */ - movl %ecx, %eax - faddl MO(f5) /* f5+(f6+f7*xm)*xm : xm */ - sarl $31, %eax - fmul %st(1) /* (f5+(f6+f7*xm)*xm)*xm : xm */ - subl %eax, %edx - faddl MO(f4) /* f4+(f5+(f6+f7*xm)*xm)*xm : xm */ - fmul %st(1) /* (f4+(f5+(f6+f7*xm)*xm)*xm)*xm : xm */ - faddl MO(f3) /* f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm : xm */ - fmul %st(1) /* (f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm : xm */ - faddl MO(f2) /* f2+(f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm : xm */ - fmul %st(1) /* (f2+(f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm)*xm : xm */ - faddl MO(f1) /* u:=f1+(f2+(f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm)*xm : xm */ - - fld %st /* u : u : xm */ - fmul %st(1) /* u*u : u : xm */ - fld %st(2) /* xm : u*u : u : xm */ - fadd %st /* 2*xm : u*u : u : xm */ - fxch %st(1) /* u*u : 2*xm : u : xm */ - fmul %st(2) /* t2:=u*u*u : 2*xm : u : xm */ - movl %edx, %eax - fadd %st, %st(1) /* t2 : t2+2*xm : u : xm */ - leal (%edx,%edx,2),%edx - fadd %st(0) /* 2*t2 : t2+2*xm : u : xm */ - subl %edx, %ecx - faddp %st, %st(3) /* t2+2*xm : u : 2*t2+xm */ - shll $3, %ecx - fmulp /* u*(t2+2*xm) : 2*t2+xm */ - fdivp %st, %st(1) /* u*(t2+2*xm)/(2*t2+xm) */ - fmull MOX(16+factor,%ecx) /* u*(t2+2*xm)/(2*t2+xm)*FACT */ - pushl %eax - cfi_adjust_cfa_offset (4) - fildl (%esp) /* xe/3 : u*(t2+2*xm)/(2*t2+xm)*FACT */ - fxch /* u*(t2+2*xm)/(2*t2+xm)*FACT : xe/3 */ - fscale /* u*(t2+2*xm)/(2*t2+xm)*FACT*2^xe/3 */ - popl %edx - cfi_adjust_cfa_offset (-4) -#ifdef PIC - movl 12(%esp), %eax - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) -#else - movl 8(%esp), %eax -#endif - testl %eax, %eax - fstp %st(1) - jns 4f - fchs -4: ret - - /* Return the argument. */ -1: fldl 4(%esp) - ret -END(__cbrt) -weak_alias (__cbrt, cbrt) diff --git a/sysdeps/i386/fpu/s_cbrtf.S b/sysdeps/i386/fpu/s_cbrtf.S deleted file mode 100644 index 645d24372d..0000000000 --- a/sysdeps/i386/fpu/s_cbrtf.S +++ /dev/null @@ -1,177 +0,0 @@ -/* Compute cubic root of float value. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Dirk Alboth and - Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata - - .align ALIGNARG(4) - .type f3,@object -f3: .double 0.191502161678719066 - ASM_SIZE_DIRECTIVE(f3) - .type f2,@object -f2: .double 0.697570460207922770 - ASM_SIZE_DIRECTIVE(f2) - .type f1,@object -f1: .double 0.492659620528969547 - ASM_SIZE_DIRECTIVE(f1) - -#define CBRT2 1.2599210498948731648 -#define ONE_CBRT2 0.793700525984099737355196796584 -#define SQR_CBRT2 1.5874010519681994748 -#define ONE_SQR_CBRT2 0.629960524947436582364439673883 - - .type factor,@object - .align ALIGNARG(4) -factor: .double ONE_SQR_CBRT2 - .double ONE_CBRT2 - .double 1.0 - .double CBRT2 - .double SQR_CBRT2 - ASM_SIZE_DIRECTIVE(factor) - - .type two25,@object -two25: .byte 0, 0, 0, 0x4c - ASM_SIZE_DIRECTIVE(two25) - -#ifdef PIC -#define MO(op) op##@GOTOFF(%ebx) -#define MOX(op,x) op##@GOTOFF(%ebx,x,1) -#else -#define MO(op) op -#define MOX(op,x) op(x) -#endif - - .text -ENTRY(__cbrtf) - movl 4(%esp), %eax - xorl %ecx, %ecx - movl %eax, %edx - andl $0x7fffffff, %eax - jz 1f - cmpl $0x7f800000, %eax - jae 1f - -#ifdef PIC - pushl %ebx - cfi_adjust_cfa_offset (4) - cfi_rel_offset (ebx, 0) - LOAD_PIC_REG (bx) -#endif - - cmpl $0x00800000, %eax - jae 2f - -#ifdef PIC - flds 8(%esp) -#else - flds 4(%esp) -#endif - fmuls MO(two25) - movl $-25, %ecx -#ifdef PIC - fstps 8(%esp) - movl 8(%esp), %eax -#else - fstps 4(%esp) - movl 4(%esp), %eax -#endif - movl %eax, %edx - andl $0x7fffffff, %eax - -2: shrl $23, %eax - andl $0x807fffff, %edx - subl $126, %eax - orl $0x3f000000, %edx - addl %eax, %ecx -#ifdef PIC - movl %edx, 8(%esp) - - flds 8(%esp) /* xm */ -#else - movl %edx, 4(%esp) - - flds 4(%esp) /* xm */ -#endif - fabs - - /* The following code has two tracks: - a) compute the normalized cbrt value - b) compute xe/3 and xe%3 - The right track computes the value for b) and this is done - in an optimized way by avoiding division. - - But why two tracks at all? Very easy: efficiency. Some FP - instruction can overlap with a certain amount of integer (and - FP) instructions. So we get (except for the imull) all - instructions for free. */ - - fld %st(0) /* xm : xm */ - fmull MO(f3) /* f3*xm : xm */ - movl $1431655766, %eax - fsubrl MO(f2) /* f2-f3*xm : xm */ - imull %ecx - fmul %st(1) /* (f2-f3*xm)*xm : xm */ - movl %ecx, %eax - faddl MO(f1) /* u:=f1+(f2-f3*xm)*xm : xm */ - sarl $31, %eax - fld %st /* u : u : xm */ - subl %eax, %edx - fmul %st(1) /* u*u : u : xm */ - fld %st(2) /* xm : u*u : u : xm */ - fadd %st /* 2*xm : u*u : u : xm */ - fxch %st(1) /* u*u : 2*xm : u : xm */ - fmul %st(2) /* t2:=u*u*u : 2*xm : u : xm */ - movl %edx, %eax - fadd %st, %st(1) /* t2 : t2+2*xm : u : xm */ - leal (%edx,%edx,2),%edx - fadd %st(0) /* 2*t2 : t2+2*xm : u : xm */ - subl %edx, %ecx - faddp %st, %st(3) /* t2+2*xm : u : 2*t2+xm */ - shll $3, %ecx - fmulp /* u*(t2+2*xm) : 2*t2+xm */ - fdivp %st, %st(1) /* u*(t2+2*xm)/(2*t2+xm) */ - fmull MOX(16+factor,%ecx) /* u*(t2+2*xm)/(2*t2+xm)*FACT */ - pushl %eax - cfi_adjust_cfa_offset (4) - fildl (%esp) /* xe/3 : u*(t2+2*xm)/(2*t2+xm)*FACT */ - fxch /* u*(t2+2*xm)/(2*t2+xm)*FACT : xe/3 */ - fscale /* u*(t2+2*xm)/(2*t2+xm)*FACT*2^xe/3 */ - popl %edx - cfi_adjust_cfa_offset (-4) -#ifdef PIC - movl 8(%esp), %eax - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) -#else - movl 4(%esp), %eax -#endif - testl %eax, %eax - fstp %st(1) - jns 4f - fchs -4: ret - - /* Return the argument. */ -1: flds 4(%esp) - ret -END(__cbrtf) -weak_alias (__cbrtf, cbrtf) diff --git a/sysdeps/i386/fpu/s_cbrtl.S b/sysdeps/i386/fpu/s_cbrtl.S deleted file mode 100644 index e4a72d29c6..0000000000 --- a/sysdeps/i386/fpu/s_cbrtl.S +++ /dev/null @@ -1,229 +0,0 @@ -/* Compute cubic root of long double value. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Dirk Alboth and - Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata - - .align ALIGNARG(4) - .type f8,@object -f8: .tfloat 0.161617097923756032 - ASM_SIZE_DIRECTIVE(f8) - .align ALIGNARG(4) - .type f7,@object -f7: .tfloat -0.988553671195413709 - ASM_SIZE_DIRECTIVE(f7) - .align ALIGNARG(4) - .type f6,@object -f6: .tfloat 2.65298938441952296 - ASM_SIZE_DIRECTIVE(f6) - .align ALIGNARG(4) - .type f5,@object -f5: .tfloat -4.11151425200350531 - ASM_SIZE_DIRECTIVE(f5) - .align ALIGNARG(4) - .type f4,@object -f4: .tfloat 4.09559907378707839 - ASM_SIZE_DIRECTIVE(f4) - .align ALIGNARG(4) - .type f3,@object -f3: .tfloat -2.82414939754975962 - ASM_SIZE_DIRECTIVE(f3) - .align ALIGNARG(4) - .type f2,@object -f2: .tfloat 1.67595307700780102 - ASM_SIZE_DIRECTIVE(f2) - .align ALIGNARG(4) - .type f1,@object -f1: .tfloat 0.338058687610520237 - ASM_SIZE_DIRECTIVE(f1) - -#define CBRT2 1.2599210498948731648 -#define ONE_CBRT2 0.793700525984099737355196796584 -#define SQR_CBRT2 1.5874010519681994748 -#define ONE_SQR_CBRT2 0.629960524947436582364439673883 - - /* We make the entries in the following table all 16 bytes - wide to avoid having to implement a multiplication by 10. */ - .type factor,@object - .align ALIGNARG(4) -factor: .tfloat ONE_SQR_CBRT2 - .byte 0, 0, 0, 0, 0, 0 - .tfloat ONE_CBRT2 - .byte 0, 0, 0, 0, 0, 0 - .tfloat 1.0 - .byte 0, 0, 0, 0, 0, 0 - .tfloat CBRT2 - .byte 0, 0, 0, 0, 0, 0 - .tfloat SQR_CBRT2 - ASM_SIZE_DIRECTIVE(factor) - - .type two64,@object - .align ALIGNARG(4) -two64: .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x43 - ASM_SIZE_DIRECTIVE(two64) - -#ifdef PIC -#define MO(op) op##@GOTOFF(%ebx) -#define MOX(op,x) op##@GOTOFF(%ebx,x,1) -#else -#define MO(op) op -#define MOX(op,x) op(x) -#endif - - .text -ENTRY(__cbrtl) - movl 4(%esp), %ecx - movl 12(%esp), %eax - orl 8(%esp), %ecx - movl %eax, %edx - andl $0x7fff, %eax - orl %eax, %ecx - jz 1f - xorl %ecx, %ecx - cmpl $0x7fff, %eax - je 1f - -#ifdef PIC - pushl %ebx - cfi_adjust_cfa_offset (4) - cfi_rel_offset (ebx, 0) - LOAD_PIC_REG (bx) -#endif - - cmpl $0, %eax - jne 2f - -#ifdef PIC - fldt 8(%esp) -#else - fldt 4(%esp) -#endif - fmull MO(two64) - movl $-64, %ecx -#ifdef PIC - fstpt 8(%esp) - movl 16(%esp), %eax -#else - fstpt 4(%esp) - movl 12(%esp), %eax -#endif - movl %eax, %edx - andl $0x7fff, %eax - -2: andl $0x8000, %edx - subl $16382, %eax - orl $0x3ffe, %edx - addl %eax, %ecx -#ifdef PIC - movl %edx, 16(%esp) - - fldt 8(%esp) /* xm */ -#else - movl %edx, 12(%esp) - - fldt 4(%esp) /* xm */ -#endif - fabs - - /* The following code has two tracks: - a) compute the normalized cbrt value - b) compute xe/3 and xe%3 - The right track computes the value for b) and this is done - in an optimized way by avoiding division. - - But why two tracks at all? Very easy: efficiency. Some FP - instruction can overlap with a certain amount of integer (and - FP) instructions. So we get (except for the imull) all - instructions for free. */ - - fldt MO(f8) /* f8 : xm */ - fmul %st(1) /* f8*xm : xm */ - - fldt MO(f7) - faddp /* f7+f8*xm : xm */ - fmul %st(1) /* (f7+f8*xm)*xm : xm */ - movl $1431655766, %eax - fldt MO(f6) - faddp /* f6+(f7+f8*xm)*xm : xm */ - imull %ecx - fmul %st(1) /* (f6+(f7+f8*xm)*xm)*xm : xm */ - movl %ecx, %eax - fldt MO(f5) - faddp /* f5+(f6+(f7+f8*xm)*xm)*xm : xm */ - sarl $31, %eax - fmul %st(1) /* (f5+(f6+(f7+f8*xm)*xm)*xm)*xm : xm */ - subl %eax, %edx - fldt MO(f4) - faddp /* f4+(f5+(f6+(f7+f8*xm)*xm)*xm)*xm : xm */ - fmul %st(1) /* (f4+(f5+(f6+(f7+f8*xm)*xm)*xm)*xm)*xm : xm */ - fldt MO(f3) - faddp /* f3+(f4+(f5+(f6+(f7+f8*xm)*xm)*xm)*xm)*xm : xm */ - fmul %st(1) /* (f3+(f4+(f5+(f6+(f7+f8*xm)*xm)*xm)*xm)*xm)*xm : xm */ - fldt MO(f2) - faddp /* f2+(f3+(f4+(f5+(f6+(f7+f8*xm)*xm)*xm)*xm)*xm)*xm : xm */ - fmul %st(1) /* (f2+(f3+(f4+(f5+(f6+(f7+f8*xm)*xm)*xm)*xm)*xm)*xm)*xm : xm */ - fldt MO(f1) - faddp /* u:=f1+(f2+(f3+(f4+(f5+(f6+(f7+f8*xm)*xm)*xm)*xm)*xm)*xm)*xm : xm */ - - fld %st /* u : u : xm */ - fmul %st(1) /* u*u : u : xm */ - fld %st(2) /* xm : u*u : u : xm */ - fadd %st /* 2*xm : u*u : u : xm */ - fxch %st(1) /* u*u : 2*xm : u : xm */ - fmul %st(2) /* t2:=u*u*u : 2*xm : u : xm */ - movl %edx, %eax - fadd %st, %st(1) /* t2 : t2+2*xm : u : xm */ - leal (%edx,%edx,2),%edx - fadd %st(0) /* 2*t2 : t2+2*xm : u : xm */ - subl %edx, %ecx - faddp %st, %st(3) /* t2+2*xm : u : 2*t2+xm */ - shll $4, %ecx - fmulp /* u*(t2+2*xm) : 2*t2+xm */ - fdivp %st, %st(1) /* u*(t2+2*xm)/(2*t2+xm) */ - fldt MOX(32+factor,%ecx) - fmulp /* u*(t2+2*xm)/(2*t2+xm)*FACT */ - pushl %eax - cfi_adjust_cfa_offset (4) - fildl (%esp) /* xe/3 : u*(t2+2*xm)/(2*t2+xm)*FACT */ - fxch /* u*(t2+2*xm)/(2*t2+xm)*FACT : xe/3 */ - fscale /* u*(t2+2*xm)/(2*t2+xm)*FACT*2^xe/3 */ - popl %edx - cfi_adjust_cfa_offset (-4) -#ifdef PIC - movl 16(%esp), %eax - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) -#else - movl 12(%esp), %eax -#endif - testl $0x8000, %eax - fstp %st(1) - jz 4f - fchs -4: ret - - /* Return the argument. */ -1: fldt 4(%esp) - fadd %st - ret -END(__cbrtl) -weak_alias (__cbrtl, cbrtl) diff --git a/sysdeps/i386/fpu/s_ceil.S b/sysdeps/i386/fpu/s_ceil.S deleted file mode 100644 index 1226bb2f87..0000000000 --- a/sysdeps/i386/fpu/s_ceil.S +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: s_ceil.S,v 1.4 1995/05/08 23:52:13 jtc Exp $") - -ENTRY(__ceil) - fldl 4(%esp) - subl $32,%esp - cfi_adjust_cfa_offset (32) - - fnstenv 4(%esp) /* store fpu environment */ - - /* We use here %edx although only the low 1 bits are defined. - But none of the operations should care and they are faster - than the 16 bit operations. */ - movl $0x0800,%edx /* round towards +oo */ - orl 4(%esp),%edx - andl $0xfbff,%edx - movl %edx,(%esp) - fldcw (%esp) /* load modified control word */ - - frndint /* round */ - - fldenv 4(%esp) /* restore original environment */ - - addl $32,%esp - cfi_adjust_cfa_offset (-32) - ret -END (__ceil) -weak_alias (__ceil, ceil) diff --git a/sysdeps/i386/fpu/s_ceilf.S b/sysdeps/i386/fpu/s_ceilf.S deleted file mode 100644 index d345c0973b..0000000000 --- a/sysdeps/i386/fpu/s_ceilf.S +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: s_ceilf.S,v 1.3 1995/05/08 23:52:44 jtc Exp $") - -ENTRY(__ceilf) - flds 4(%esp) - subl $32,%esp - cfi_adjust_cfa_offset (32) - - fnstenv 4(%esp) /* store fpu environment */ - - /* We use here %edx although only the low 1 bits are defined. - But none of the operations should care and they are faster - than the 16 bit operations. */ - movl $0x0800,%edx /* round towards +oo */ - orl 4(%esp),%edx - andl $0xfbff,%edx - movl %edx,(%esp) - fldcw (%esp) /* load modified control word */ - - frndint /* round */ - - fldenv 4(%esp) /* restore original environment */ - - addl $32,%esp - cfi_adjust_cfa_offset (-32) - ret -END (__ceilf) -weak_alias (__ceilf, ceilf) diff --git a/sysdeps/i386/fpu/s_ceill.S b/sysdeps/i386/fpu/s_ceill.S deleted file mode 100644 index 7c08f43b24..0000000000 --- a/sysdeps/i386/fpu/s_ceill.S +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changes for long double by Ulrich Drepper - * Public domain. - */ - -#include - -RCSID("$NetBSD: $") - -ENTRY(__ceill) - fldt 4(%esp) - subl $32,%esp - cfi_adjust_cfa_offset (32) - - fnstenv 4(%esp) /* store fpu environment */ - - /* We use here %edx although only the low 1 bits are defined. - But none of the operations should care and they are faster - than the 16 bit operations. */ - movl $0x0800,%edx /* round towards +oo */ - orl 4(%esp),%edx - andl $0xfbff,%edx - movl %edx,(%esp) - fldcw (%esp) /* load modified control word */ - - frndint /* round */ - - /* Preserve "invalid" exceptions from sNaN input. */ - fnstsw - andl $0x1, %eax - orl %eax, 8(%esp) - - fldenv 4(%esp) /* restore original environment */ - - addl $32,%esp - cfi_adjust_cfa_offset (-32) - ret -END (__ceill) -weak_alias (__ceill, ceill) diff --git a/sysdeps/i386/fpu/s_copysign.S b/sysdeps/i386/fpu/s_copysign.S deleted file mode 100644 index 2520a94427..0000000000 --- a/sysdeps/i386/fpu/s_copysign.S +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: s_copysign.S,v 1.4 1995/05/08 23:53:02 jtc Exp $") - -ENTRY(__copysign) - movl 16(%esp),%edx - movl 8(%esp),%eax - andl $0x80000000,%edx - andl $0x7fffffff,%eax - orl %edx,%eax - movl %eax,8(%esp) - fldl 4(%esp) - ret -END (__copysign) -weak_alias (__copysign, copysign) diff --git a/sysdeps/i386/fpu/s_copysignf.S b/sysdeps/i386/fpu/s_copysignf.S deleted file mode 100644 index 57b1a6f119..0000000000 --- a/sysdeps/i386/fpu/s_copysignf.S +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: s_copysignf.S,v 1.3 1995/05/08 23:53:25 jtc Exp $") - -ENTRY(__copysignf) - movl 8(%esp),%edx - movl 4(%esp),%eax - andl $0x80000000,%edx - andl $0x7fffffff,%eax - orl %edx,%eax - movl %eax,4(%esp) - flds 4(%esp) - ret -END (__copysignf) -weak_alias (__copysignf, copysignf) diff --git a/sysdeps/i386/fpu/s_copysignl.S b/sysdeps/i386/fpu/s_copysignl.S deleted file mode 100644 index 2163e7b014..0000000000 --- a/sysdeps/i386/fpu/s_copysignl.S +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changes for long double by Ulrich Drepper - * Public domain. - */ - -#include - -RCSID("$NetBSD: $") - -ENTRY(__copysignl) - movl 24(%esp),%edx - movl 12(%esp),%eax - andl $0x8000,%edx - andl $0x7fff,%eax - orl %edx,%eax - movl %eax,12(%esp) - fldt 4(%esp) - ret -END (__copysignl) -weak_alias (__copysignl, copysignl) diff --git a/sysdeps/i386/fpu/s_expm1.S b/sysdeps/i386/fpu/s_expm1.S deleted file mode 100644 index 59fded2d5a..0000000000 --- a/sysdeps/i386/fpu/s_expm1.S +++ /dev/null @@ -1,113 +0,0 @@ -/* ix87 specific implementation of exp(x)-1. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - Based on code by John C. Bowman . - Corrections by H.J. Lu (hjl@gnu.ai.mit.edu), 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - /* Using: e^x - 1 = 2^(x * log2(e)) - 1 */ - -#include -#include -#include - - .section .rodata - - .align ALIGNARG(4) - .type minus1,@object -minus1: .double -1.0 - ASM_SIZE_DIRECTIVE(minus1) - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - .type l2e,@object -l2e: .tfloat 1.442695040888963407359924681002 - ASM_SIZE_DIRECTIVE(l2e) - -DEFINE_DBL_MIN - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - - .text -ENTRY(__expm1) - movzwl 4+6(%esp), %eax - xorb $0x80, %ah // invert sign bit (now 1 is "positive") - cmpl $0xc086, %eax // is num >= 704? - jae HIDDEN_JUMPTARGET (__exp) - - fldl 4(%esp) // x - fxam // Is NaN, +-Inf or +-0? - xorb $0x80, %ah - cmpl $0xc043, %eax // is num <= -38.0? - fstsw %ax - movb $0x45, %ch - jb 4f - - // Below -38.0 (may be -NaN or -Inf). - andb %ah, %ch -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - cmpb $0x01, %ch - je 5f // If -NaN, jump. - jmp 2f // -large, possibly -Inf. - -4: // In range -38.0 to 704.0 (may be +-0 but not NaN or +-Inf). - andb %ah, %ch - cmpb $0x40, %ch - je 3f // If +-0, jump. -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - -5: fldt MO(l2e) // log2(e) : x - fmulp // log2(e)*x - fld %st // log2(e)*x : log2(e)*x - // Set round-to-nearest temporarily. - subl $8, %esp - cfi_adjust_cfa_offset (8) - fstcw 4(%esp) - movl $0xf3ff, %ecx - andl 4(%esp), %ecx - movl %ecx, (%esp) - fldcw (%esp) - frndint // int(log2(e)*x) : log2(e)*x - fldcw 4(%esp) - addl $8, %esp - cfi_adjust_cfa_offset (-8) - fsubr %st, %st(1) // int(log2(e)*x) : fract(log2(e)*x) - fxch // fract(log2(e)*x) : int(log2(e)*x) - f2xm1 // 2^fract(log2(e)*x)-1 : int(log2(e)*x) - fscale // 2^(log2(e)*x)-2^int(log2(e)*x) : int(log2(e)*x) - fxch // int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fldl MO(one) // 1 : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fscale // 2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fsubrl MO(one) // 1-2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fstp %st(1) // 1-2^int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fsubrp %st, %st(1) // 2^(log2(e)*x) - DBL_CHECK_FORCE_UFLOW - ret - -2: fstp %st - fldl MO(minus1) // Set result to -1.0. -3: ret -END(__expm1) -weak_alias (__expm1, expm1) diff --git a/sysdeps/i386/fpu/s_expm1f.S b/sysdeps/i386/fpu/s_expm1f.S deleted file mode 100644 index 4f0b2e7832..0000000000 --- a/sysdeps/i386/fpu/s_expm1f.S +++ /dev/null @@ -1,113 +0,0 @@ -/* ix87 specific implementation of exp(x)-1. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - Based on code by John C. Bowman . - Corrections by H.J. Lu (hjl@gnu.ai.mit.edu), 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - /* Using: e^x - 1 = 2^(x * log2(e)) - 1 */ - -#include -#include -#include - - .section .rodata - - .align ALIGNARG(4) - .type minus1,@object -minus1: .double -1.0 - ASM_SIZE_DIRECTIVE(minus1) - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - .type l2e,@object -l2e: .tfloat 1.442695040888963407359924681002 - ASM_SIZE_DIRECTIVE(l2e) - -DEFINE_FLT_MIN - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - - .text -ENTRY(__expm1f) - movzwl 4+2(%esp), %eax - xorb $0x80, %ah // invert sign bit (now 1 is "positive") - cmpl $0xc2b1, %eax // is num >= 88.5? - jae HIDDEN_JUMPTARGET (__expf) - - flds 4(%esp) // x - fxam // Is NaN, +-Inf or +-0? - xorb $0x80, %ah - cmpl $0xc190, %eax // is num <= -18.0? - fstsw %ax - movb $0x45, %ch - jb 4f - - // Below -18.0 (may be -NaN or -Inf). - andb %ah, %ch -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - cmpb $0x01, %ch - je 5f // If -NaN, jump. - jmp 2f // -large, possibly -Inf. - -4: // In range -18.0 to 88.5 (may be +-0 but not NaN or +-Inf). - andb %ah, %ch - cmpb $0x40, %ch - je 3f // If +-0, jump. -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - -5: fldt MO(l2e) // log2(e) : x - fmulp // log2(e)*x - fld %st // log2(e)*x : log2(e)*x - // Set round-to-nearest temporarily. - subl $8, %esp - cfi_adjust_cfa_offset (8) - fstcw 4(%esp) - movl $0xf3ff, %ecx - andl 4(%esp), %ecx - movl %ecx, (%esp) - fldcw (%esp) - frndint // int(log2(e)*x) : log2(e)*x - fldcw 4(%esp) - addl $8, %esp - cfi_adjust_cfa_offset (-8) - fsubr %st, %st(1) // int(log2(e)*x) : fract(log2(e)*x) - fxch // fract(log2(e)*x) : int(log2(e)*x) - f2xm1 // 2^fract(log2(e)*x)-1 : int(log2(e)*x) - fscale // 2^(log2(e)*x)-2^int(log2(e)*x) : int(log2(e)*x) - fxch // int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fldl MO(one) // 1 : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fscale // 2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fsubrl MO(one) // 1-2^int(log2(e)*x) : int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fstp %st(1) // 1-2^int(log2(e)*x) : 2^(log2(e)*x)-2^int(log2(e)*x) - fsubrp %st, %st(1) // 2^(log2(e)*x) - FLT_CHECK_FORCE_UFLOW - ret - -2: fstp %st - fldl MO(minus1) // Set result to -1.0. -3: ret -END(__expm1f) -weak_alias (__expm1f, expm1f) diff --git a/sysdeps/i386/fpu/s_expm1l.S b/sysdeps/i386/fpu/s_expm1l.S deleted file mode 100644 index 7fbd99b0db..0000000000 --- a/sysdeps/i386/fpu/s_expm1l.S +++ /dev/null @@ -1,2 +0,0 @@ -#define USE_AS_EXPM1L -#include diff --git a/sysdeps/i386/fpu/s_fabs.S b/sysdeps/i386/fpu/s_fabs.S deleted file mode 100644 index 23ae9dccb9..0000000000 --- a/sysdeps/i386/fpu/s_fabs.S +++ /dev/null @@ -1,9 +0,0 @@ -#include - - .text -ENTRY(__fabs) - fldl 4(%esp) - fabs - ret -END(__fabs) -weak_alias (__fabs, fabs) diff --git a/sysdeps/i386/fpu/s_fabsf.S b/sysdeps/i386/fpu/s_fabsf.S deleted file mode 100644 index c0407a8839..0000000000 --- a/sysdeps/i386/fpu/s_fabsf.S +++ /dev/null @@ -1,9 +0,0 @@ -#include - - .text -ENTRY(__fabsf) - flds 4(%esp) - fabs - ret -END(__fabsf) -weak_alias (__fabsf, fabsf) diff --git a/sysdeps/i386/fpu/s_fabsl.S b/sysdeps/i386/fpu/s_fabsl.S deleted file mode 100644 index a12a3e050b..0000000000 --- a/sysdeps/i386/fpu/s_fabsl.S +++ /dev/null @@ -1,9 +0,0 @@ -#include - - .text -ENTRY(__fabsl) - fldt 4(%esp) - fabs - ret -END(__fabsl) -weak_alias (__fabsl, fabsl) diff --git a/sysdeps/i386/fpu/s_fdim.c b/sysdeps/i386/fpu/s_fdim.c deleted file mode 100644 index 6243c62998..0000000000 --- a/sysdeps/i386/fpu/s_fdim.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Return positive difference between arguments. i386 version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -double -__fdim (double x, double y) -{ - if (islessequal (x, y)) - return 0.0; - - /* To avoid double rounding, set double precision for the - subtraction. math_narrow_eval is still needed to eliminate - excess range in the case of overflow. If the result of the - subtraction is in the subnormal range for double, it is exact, so - no issues of double rounding for subnormals arise. */ - fpu_control_t cw, cw_double; - _FPU_GETCW (cw); - cw_double = (cw & ~_FPU_EXTENDED) | _FPU_DOUBLE; - _FPU_SETCW (cw_double); - double r = math_narrow_eval (x - y); - _FPU_SETCW (cw); - if (isinf (r) && !isinf (x) && !isinf (y)) - __set_errno (ERANGE); - - return r; -} -weak_alias (__fdim, fdim) -#ifdef NO_LONG_DOUBLE -strong_alias (__fdim, __fdiml) -weak_alias (__fdim, fdiml) -#endif diff --git a/sysdeps/i386/fpu/s_finite.S b/sysdeps/i386/fpu/s_finite.S deleted file mode 100644 index 1ae4aed451..0000000000 --- a/sysdeps/i386/fpu/s_finite.S +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Written by Joe Keane . - */ - -#include - -ENTRY(__finite) - movl 8(%esp),%eax - movl $0xFFEFFFFF,%ecx - subl %eax,%ecx - xorl %ecx,%eax - shrl $31, %eax - ret -END (__finite) -weak_alias (__finite, finite) -hidden_def (__finite) - diff --git a/sysdeps/i386/fpu/s_finitef.S b/sysdeps/i386/fpu/s_finitef.S deleted file mode 100644 index 69e72facff..0000000000 --- a/sysdeps/i386/fpu/s_finitef.S +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Written by Joe Keane . - */ - -#include - -ENTRY(__finitef) - movl 4(%esp),%eax - movl $0xFF7FFFFF,%ecx - subl %eax,%ecx - xorl %ecx,%eax - shrl $31,%eax - ret -END (__finitef) -weak_alias (__finitef, finitef) -hidden_def (__finitef) diff --git a/sysdeps/i386/fpu/s_finitel.S b/sysdeps/i386/fpu/s_finitel.S deleted file mode 100644 index cce90e18fc..0000000000 --- a/sysdeps/i386/fpu/s_finitel.S +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Written by Joe Keane . - */ - -#include - -ENTRY(__finitel) - movl 12(%esp),%eax - orl $0xffff8000, %eax - incl %eax - shrl $31, %eax - ret -END (__finitel) -weak_alias (__finitel, finitel) -hidden_def (__finitel) diff --git a/sysdeps/i386/fpu/s_floor.S b/sysdeps/i386/fpu/s_floor.S deleted file mode 100644 index ed837dae40..0000000000 --- a/sysdeps/i386/fpu/s_floor.S +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: s_floor.S,v 1.4 1995/05/09 00:01:59 jtc Exp $") - -ENTRY(__floor) - fldl 4(%esp) - subl $32,%esp - cfi_adjust_cfa_offset (32) - - fnstenv 4(%esp) /* store fpu environment */ - - /* We use here %edx although only the low 1 bits are defined. - But none of the operations should care and they are faster - than the 16 bit operations. */ - movl $0x400,%edx /* round towards -oo */ - orl 4(%esp),%edx - andl $0xf7ff,%edx - movl %edx,(%esp) - fldcw (%esp) /* load modified control word */ - - frndint /* round */ - - fldenv 4(%esp) /* restore original environment */ - - addl $32,%esp - cfi_adjust_cfa_offset (-32) - ret -END (__floor) -weak_alias (__floor, floor) diff --git a/sysdeps/i386/fpu/s_floorf.S b/sysdeps/i386/fpu/s_floorf.S deleted file mode 100644 index 84b6f7ed99..0000000000 --- a/sysdeps/i386/fpu/s_floorf.S +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: s_floorf.S,v 1.3 1995/05/09 00:04:32 jtc Exp $") - -ENTRY(__floorf) - flds 4(%esp) - subl $32,%esp - cfi_adjust_cfa_offset (32) - - fnstenv 4(%esp) /* store fpu environment */ - - /* We use here %edx although only the low 1 bits are defined. - But none of the operations should care and they are faster - than the 16 bit operations. */ - movl $0x400,%edx /* round towards -oo */ - orl 4(%esp),%edx - andl $0xf7ff,%edx - movl %edx,(%esp) - fldcw (%esp) /* load modified control word */ - - frndint /* round */ - - fldenv 4(%esp) /* restore original environment */ - - addl $32,%esp - cfi_adjust_cfa_offset (-32) - ret -END (__floorf) -weak_alias (__floorf, floorf) diff --git a/sysdeps/i386/fpu/s_floorl.S b/sysdeps/i386/fpu/s_floorl.S deleted file mode 100644 index dc74a0c446..0000000000 --- a/sysdeps/i386/fpu/s_floorl.S +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changes for long double by Ulrich Drepper - * Public domain. - */ - -#include - -RCSID("$NetBSD: $") - -ENTRY(__floorl) - fldt 4(%esp) - subl $32,%esp - cfi_adjust_cfa_offset (32) - - fnstenv 4(%esp) /* store fpu environment */ - - /* We use here %edx although only the low 1 bits are defined. - But none of the operations should care and they are faster - than the 16 bit operations. */ - movl $0x400,%edx /* round towards -oo */ - orl 4(%esp),%edx - andl $0xf7ff,%edx - movl %edx,(%esp) - fldcw (%esp) /* load modified control word */ - - frndint /* round */ - - /* Preserve "invalid" exceptions from sNaN input. */ - fnstsw - andl $0x1, %eax - orl %eax, 8(%esp) - - fldenv 4(%esp) /* restore original environment */ - - addl $32,%esp - cfi_adjust_cfa_offset (-32) - ret -END (__floorl) -weak_alias (__floorl, floorl) diff --git a/sysdeps/i386/fpu/s_fmax.S b/sysdeps/i386/fpu/s_fmax.S deleted file mode 100644 index 218dcef421..0000000000 --- a/sysdeps/i386/fpu/s_fmax.S +++ /dev/null @@ -1,43 +0,0 @@ -/* Compute maximum of two numbers, regarding NaN as missing argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fmax) - fldl 12(%esp) // y - fxam - fnstsw - fldl 4(%esp) // y : x - - andb $0x45, %ah - cmpb $0x01, %ah - je 1f // y == NaN - - fucom %st(1) - fnstsw - sahf - jnc 1f - - fxch %st(1) -1: fstp %st(1) - - ret -END(__fmax) -weak_alias (__fmax, fmax) diff --git a/sysdeps/i386/fpu/s_fmaxf.S b/sysdeps/i386/fpu/s_fmaxf.S deleted file mode 100644 index b7a00cefeb..0000000000 --- a/sysdeps/i386/fpu/s_fmaxf.S +++ /dev/null @@ -1,43 +0,0 @@ -/* Compute maximum of two numbers, regarding NaN as missing argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fmaxf) - flds 8(%esp) // y - fxam - fnstsw - flds 4(%esp) // y : x - - andb $0x45, %ah - cmpb $0x01, %ah - je 1f // y == NaN - - fucom %st(1) - fnstsw - sahf - jnc 1f - - fxch %st(1) -1: fstp %st(1) - - ret -END(__fmaxf) -weak_alias (__fmaxf, fmaxf) diff --git a/sysdeps/i386/fpu/s_fmaxl.S b/sysdeps/i386/fpu/s_fmaxl.S deleted file mode 100644 index 68162921db..0000000000 --- a/sysdeps/i386/fpu/s_fmaxl.S +++ /dev/null @@ -1,71 +0,0 @@ -/* Compute maximum of two numbers, regarding NaN as missing argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fmaxl) - fldt 16(%esp) // y - fxam - fnstsw - fldt 4(%esp) // y : x - - andb $0x45, %ah - cmpb $0x01, %ah - je 2f // y == NaN - - fxam - fnstsw - andb $0x45, %ah - cmpb $0x01, %ah - je 3f // x == NaN - - fucom %st(1) - fnstsw - sahf - jnc 1f - - fxch %st(1) -1: fstp %st(1) - - ret - -2: // st(1) is a NaN; st(0) may or may not be. - fxam - fnstsw - andb $0x45, %ah - cmpb $0x01, %ah - je 4f - // st(1) is a NaN; st(0) is not. Test if st(1) is signaling. - testb $0x40, 23(%esp) - jz 4f - fstp %st(1) - ret - -3: // st(0) is a NaN; st(1) is not. Test if st(0) is signaling. - testb $0x40, 11(%esp) - jz 4f - fstp %st(0) - ret - -4: // Both arguments are NaNs, or one is a signaling NaN. - faddp - ret -END(__fmaxl) -weak_alias (__fmaxl, fmaxl) diff --git a/sysdeps/i386/fpu/s_fmin.S b/sysdeps/i386/fpu/s_fmin.S deleted file mode 100644 index a5bb0e06dd..0000000000 --- a/sysdeps/i386/fpu/s_fmin.S +++ /dev/null @@ -1,43 +0,0 @@ -/* Compute minimum of two numbers, regarding NaN as missing argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fmin) - fldl 4(%esp) // x - fldl 12(%esp) // x : y - - fxam - fnstsw - andb $0x45, %ah - cmpb $0x01, %ah - je 1f // y == NaN - - fucom %st(1) - fnstsw - sahf - jc 2f - -1: fxch %st(1) -2: fstp %st(1) - - ret -END(__fmin) -weak_alias (__fmin, fmin) diff --git a/sysdeps/i386/fpu/s_fminf.S b/sysdeps/i386/fpu/s_fminf.S deleted file mode 100644 index fba4a41120..0000000000 --- a/sysdeps/i386/fpu/s_fminf.S +++ /dev/null @@ -1,43 +0,0 @@ -/* Compute minimum of two numbers, regarding NaN as missing argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fminf) - flds 4(%esp) // x - flds 8(%esp) // x : y - - fxam - fnstsw - andb $0x45, %ah - cmpb $0x01, %ah - je 1f // y == NaN - - fucom %st(1) - fnstsw - sahf - jc 2f - -1: fxch %st(1) -2: fstp %st(1) - - ret -END(__fminf) -weak_alias (__fminf, fminf) diff --git a/sysdeps/i386/fpu/s_fminl.S b/sysdeps/i386/fpu/s_fminl.S deleted file mode 100644 index 12ef21fda9..0000000000 --- a/sysdeps/i386/fpu/s_fminl.S +++ /dev/null @@ -1,71 +0,0 @@ -/* Compute minimum of two numbers, regarding NaN as missing argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fminl) - fldt 16(%esp) // y - fxam - fnstsw - fldt 4(%esp) // y : x - - andb $0x45, %ah - cmpb $0x01, %ah - je 2f // y == NaN - - fxam - fnstsw - andb $0x45, %ah - cmpb $0x01, %ah - je 3f // x == NaN - - fucom %st(1) - fnstsw - sahf - jc 1f - - fxch %st(1) -1: fstp %st(1) - - ret - -2: // st(1) is a NaN; st(0) may or may not be. - fxam - fnstsw - andb $0x45, %ah - cmpb $0x01, %ah - je 4f - // st(1) is a NaN; st(0) is not. Test if st(1) is signaling. - testb $0x40, 23(%esp) - jz 4f - fstp %st(1) - ret - -3: // st(0) is a NaN; st(1) is not. Test if st(0) is signaling. - testb $0x40, 11(%esp) - jz 4f - fstp %st(0) - ret - -4: // Both arguments are NaNs, or one is a signaling NaN. - faddp - ret -END(__fminl) -weak_alias (__fminl, fminl) diff --git a/sysdeps/i386/fpu/s_fpclassifyl.c b/sysdeps/i386/fpu/s_fpclassifyl.c deleted file mode 100644 index ce19fd0035..0000000000 --- a/sysdeps/i386/fpu/s_fpclassifyl.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Return classification value corresponding to argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -int -__fpclassifyl (long double x) -{ - u_int32_t ex, hx, lx; - int retval = FP_NORMAL; - - GET_LDOUBLE_WORDS (ex, hx, lx, x); - ex &= 0x7fff; - if ((ex | lx | hx) == 0) - retval = FP_ZERO; - else if (ex == 0 && (hx & 0x80000000) == 0) - retval = FP_SUBNORMAL; - else if (ex == 0x7fff) - retval = ((hx & 0x7fffffff) | lx) != 0 ? FP_NAN : FP_INFINITE; - - return retval; -} -libm_hidden_def (__fpclassifyl) diff --git a/sysdeps/i386/fpu/s_frexp.S b/sysdeps/i386/fpu/s_frexp.S deleted file mode 100644 index 104f733bf6..0000000000 --- a/sysdeps/i386/fpu/s_frexp.S +++ /dev/null @@ -1,83 +0,0 @@ -/* ix87 specific frexp implementation for double. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata - - .align ALIGNARG(4) - .type two54,@object -two54: .byte 0, 0, 0, 0, 0, 0, 0x50, 0x43 - ASM_SIZE_DIRECTIVE(two54) - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - -#define PARMS 4 /* no space for saved regs */ -#define VAL0 PARMS -#define VAL1 VAL0+4 -#define EXPP VAL1+4 - - .text -ENTRY (__frexp) - - movl VAL0(%esp), %ecx - movl VAL1(%esp), %eax - movl %eax, %edx - andl $0x7fffffff, %eax - orl %eax, %ecx - jz 1f - xorl %ecx, %ecx - cmpl $0x7ff00000, %eax - jae 1f - - cmpl $0x00100000, %eax - jae 2f - - fldl VAL0(%esp) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fmull MO(two54) - movl $-54, %ecx - fstpl VAL0(%esp) - fwait - movl VAL1(%esp), %eax - movl %eax, %edx - andl $0x7fffffff, %eax - -2: shrl $20, %eax - andl $0x800fffff, %edx - subl $1022, %eax - orl $0x3fe00000, %edx - addl %eax, %ecx - movl %edx, VAL1(%esp) - - /* Store %ecx in the variable pointed to by the second argument, - get the factor from the stack and return. */ -1: movl EXPP(%esp), %eax - fldl VAL0(%esp) - movl %ecx, (%eax) - - ret -END (__frexp) -weak_alias (__frexp, frexp) diff --git a/sysdeps/i386/fpu/s_frexpf.S b/sysdeps/i386/fpu/s_frexpf.S deleted file mode 100644 index f21c39ec4b..0000000000 --- a/sysdeps/i386/fpu/s_frexpf.S +++ /dev/null @@ -1,80 +0,0 @@ -/* ix87 specific frexp implementation for float. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata - - .align ALIGNARG(4) - .type two25,@object -two25: .byte 0, 0, 0, 0x4c - ASM_SIZE_DIRECTIVE(two25) - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - -#define PARMS 4 /* no space for saved regs */ -#define VAL PARMS -#define EXPP VAL+4 - - .text -ENTRY (__frexpf) - - movl VAL(%esp), %eax - xorl %ecx, %ecx - movl %eax, %edx - andl $0x7fffffff, %eax - jz 1f - cmpl $0x7f800000, %eax - jae 1f - - cmpl $0x00800000, %eax - jae 2f - - flds VAL(%esp) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fmuls MO(two25) - movl $-25, %ecx - fstps VAL(%esp) - fwait - movl VAL(%esp), %eax - movl %eax, %edx - andl $0x7fffffff, %eax - -2: shrl $23, %eax - andl $0x807fffff, %edx - subl $126, %eax - orl $0x3f000000, %edx - addl %eax, %ecx - movl %edx, VAL(%esp) - - /* Store %ecx in the variable pointed to by the second argument, - get the factor from the stack and return. */ -1: movl EXPP(%esp), %eax - flds VAL(%esp) - movl %ecx, (%eax) - - ret -END (__frexpf) -weak_alias (__frexpf, frexpf) diff --git a/sysdeps/i386/fpu/s_frexpl.S b/sysdeps/i386/fpu/s_frexpl.S deleted file mode 100644 index 04f28888d2..0000000000 --- a/sysdeps/i386/fpu/s_frexpl.S +++ /dev/null @@ -1,92 +0,0 @@ -/* ix87 specific frexp implementation for long double. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata - - .align ALIGNARG(4) - .type two64,@object -two64: .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x43 - ASM_SIZE_DIRECTIVE(two64) - -#ifdef PIC -#define MO(op) op##@GOTOFF(%edx) -#else -#define MO(op) op -#endif - -#define PARMS 4 /* no space for saved regs */ -#define VAL0 PARMS -#define VAL1 VAL0+4 -#define VAL2 VAL1+4 -#define EXPP VAL2+4 - - .text -ENTRY (__frexpl) - - movl VAL0(%esp), %ecx - movl VAL2(%esp), %eax - orl VAL1(%esp), %ecx - movl %eax, %edx - andl $0x7fff, %eax - orl %eax, %ecx - jz 1f - xorl %ecx, %ecx - cmpl $0x7fff, %eax - je 3f - - cmpl $0, %eax - jne 2f - - fldt VAL0(%esp) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - - fmull MO(two64) /* It's not necessary to use a 80bit factor */ - movl $-64, %ecx - fstpt VAL0(%esp) - fwait - movl VAL2(%esp), %eax - movl %eax, %edx - andl $0x7fff, %eax - -2: andl $0x8000, %edx - subl $16382, %eax - orl $0x3ffe, %edx - addl %eax, %ecx - movl %edx, VAL2(%esp) - - /* Store %ecx in the variable pointed to by the second argument, - get the factor from the stack and return. */ -1: movl EXPP(%esp), %eax - fldt VAL0(%esp) - movl %ecx, (%eax) - - ret - - /* Infinity or NaN; ensure signaling NaNs are quieted. */ -3: movl EXPP(%esp), %eax - fldt VAL0(%esp) - fadd %st - movl %ecx, (%eax) - ret -END (__frexpl) -weak_alias (__frexpl, frexpl) diff --git a/sysdeps/i386/fpu/s_isinfl.c b/sysdeps/i386/fpu/s_isinfl.c deleted file mode 100644 index cdd77183fa..0000000000 --- a/sysdeps/i386/fpu/s_isinfl.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Written by J.T. Conklin . - * Change for long double by Ulrich Drepper . - * Intel i387 specific version. - * Public domain. - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * isinfl(x) returns 1 if x is inf, -1 if x is -inf, else 0; - * no branching! - */ - -#include -#include - -int __isinfl(long double x) -{ - int32_t se,hx,lx; - GET_LDOUBLE_WORDS(se,hx,lx,x); - /* This additional ^ 0x80000000 is necessary because in Intel's - internal representation of the implicit one is explicit. */ - lx |= (hx ^ 0x80000000) | ((se & 0x7fff) ^ 0x7fff); - lx |= -lx; - se &= 0x8000; - return ~(lx >> 31) & (1 - (se >> 14)); -} -hidden_def (__isinfl) -weak_alias (__isinfl, isinfl) diff --git a/sysdeps/i386/fpu/s_isnanl.c b/sysdeps/i386/fpu/s_isnanl.c deleted file mode 100644 index 816396d8fb..0000000000 --- a/sysdeps/i386/fpu/s_isnanl.c +++ /dev/null @@ -1,43 +0,0 @@ -/* s_isnanl.c -- long double version for i387 of s_isnan.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * isnanl(x) returns 1 is x is nan, else 0; - * no branching! - */ - -#include -#include - -int __isnanl(long double x) -{ - int32_t se,hx,lx; - GET_LDOUBLE_WORDS(se,hx,lx,x); - se = (se & 0x7fff) << 1; - /* The additional & 0x7fffffff is required because Intel's - extended format has the normally implicit 1 explicit - present. Sigh! */ - lx |= hx & 0x7fffffff; - se |= (u_int32_t)(lx|(-lx))>>31; - se = 0xfffe - se; - return (int)((u_int32_t)(se))>>16; -} -hidden_def (__isnanl) -weak_alias (__isnanl, isnanl) diff --git a/sysdeps/i386/fpu/s_llrint.S b/sysdeps/i386/fpu/s_llrint.S deleted file mode 100644 index a597183aab..0000000000 --- a/sysdeps/i386/fpu/s_llrint.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__llrint) - fldl 4(%esp) - subl $8, %esp - cfi_adjust_cfa_offset (8) - fistpll (%esp) - fwait - popl %eax - cfi_adjust_cfa_offset (-4) - popl %edx - cfi_adjust_cfa_offset (-4) - ret -END(__llrint) -weak_alias (__llrint, llrint) diff --git a/sysdeps/i386/fpu/s_llrintf.S b/sysdeps/i386/fpu/s_llrintf.S deleted file mode 100644 index a4b574eccb..0000000000 --- a/sysdeps/i386/fpu/s_llrintf.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__llrintf) - flds 4(%esp) - subl $8, %esp - cfi_adjust_cfa_offset (8) - fistpll (%esp) - fwait - popl %eax - cfi_adjust_cfa_offset (-4) - popl %edx - cfi_adjust_cfa_offset (-4) - ret -END(__llrintf) -weak_alias (__llrintf, llrintf) diff --git a/sysdeps/i386/fpu/s_llrintl.S b/sysdeps/i386/fpu/s_llrintl.S deleted file mode 100644 index 7b48c02ef4..0000000000 --- a/sysdeps/i386/fpu/s_llrintl.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__llrintl) - fldt 4(%esp) - subl $8, %esp - cfi_adjust_cfa_offset (8) - fistpll (%esp) - fwait - popl %eax - cfi_adjust_cfa_offset (-4) - popl %edx - cfi_adjust_cfa_offset (-4) - ret -END(__llrintl) -weak_alias (__llrintl, llrintl) diff --git a/sysdeps/i386/fpu/s_log1p.S b/sysdeps/i386/fpu/s_log1p.S deleted file mode 100644 index 7978e76095..0000000000 --- a/sysdeps/i386/fpu/s_log1p.S +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include -#include - -RCSID("$NetBSD: s_log1p.S,v 1.7 1995/05/09 00:10:58 jtc Exp $") - - .section .rodata - - .align ALIGNARG(4) - /* The fyl2xp1 can only be used for values in - -1 + sqrt(2) / 2 <= x <= 1 - sqrt(2) / 2 - 0.29 is a safe value. - */ -limit: .double 0.29 -one: .double 1.0 - -DEFINE_DBL_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - -/* - * Use the fyl2xp1 function when the argument is in the range -0.29 to 0.29, - * otherwise fyl2x with the needed extra computation. - */ - .text -ENTRY(__log1p) - fldln2 - - fldl 4(%esp) - -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - - fxam - fnstsw - fld %st - sahf - jc 3f // in case x is NaN or ±Inf -4: fabs - fcompl MO(limit) - fnstsw - sahf - jc 2f - - faddl MO(one) - fyl2x - ret - -2: fyl2xp1 - DBL_CHECK_FORCE_UFLOW_NONNAN - ret - -3: jp 4b // in case x is ±Inf - fstp %st(1) - fstp %st(1) - ret - -END (__log1p) diff --git a/sysdeps/i386/fpu/s_log1pf.S b/sysdeps/i386/fpu/s_log1pf.S deleted file mode 100644 index acaa299d94..0000000000 --- a/sysdeps/i386/fpu/s_log1pf.S +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include -#include - -RCSID("$NetBSD: s_log1pf.S,v 1.4 1995/05/09 00:13:05 jtc Exp $") - - .section .rodata - - .align ALIGNARG(4) - /* The fyl2xp1 can only be used for values in - -1 + sqrt(2) / 2 <= x <= 1 - sqrt(2) / 2 - 0.29 is a safe value. - */ -limit: .float 0.29 -one: .float 1.0 - -DEFINE_FLT_MIN - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - -/* - * Use the fyl2xp1 function when the argument is in the range -0.29 to 0.29, - * otherwise fyl2x with the needed extra computation. - */ - .text -ENTRY(__log1pf) - fldln2 - - flds 4(%esp) - -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - - fxam - fnstsw - fld %st - sahf - jc 3f // in case x is NaN or ±Inf -4: fabs - fcomps MO(limit) - fnstsw - sahf - jc 2f - - fadds MO(one) - fyl2x - ret - -2: fyl2xp1 - FLT_CHECK_FORCE_UFLOW_NONNAN - ret - -3: jp 4b // in case x is ±Inf - fstp %st(1) - fstp %st(1) - ret - -END (__log1pf) diff --git a/sysdeps/i386/fpu/s_log1pl.S b/sysdeps/i386/fpu/s_log1pl.S deleted file mode 100644 index 0fd05cbdb3..0000000000 --- a/sysdeps/i386/fpu/s_log1pl.S +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - */ - -#include - -RCSID("$NetBSD: s_log1p.S,v 1.7 1995/05/09 00:10:58 jtc Exp $") - - .section .rodata - - .align ALIGNARG(4) - /* The fyl2xp1 can only be used for values in - -1 + sqrt(2) / 2 <= x <= 1 - sqrt(2) / 2 - 0.29 is a safe value. - */ -limit: .tfloat 0.29 - /* Please note: we use a double value here. Since 1.0 has - an exact representation this does not effect the accuracy - but it helps to optimize the code. */ -one: .double 1.0 - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - -/* - * Use the fyl2xp1 function when the argument is in the range -0.29 to 0.29, - * otherwise fyl2x with the needed extra computation. - */ - .text -ENTRY(__log1pl) - fldln2 - - fldt 4(%esp) - -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - - fxam - fnstsw - fld %st - sahf - jc 3f // in case x is NaN or ±Inf -4: - fabs - fldt MO(limit) - fcompp - fnstsw - sahf - jnc 2f - - movzwl 4+8(%esp), %eax - xorb $0x80, %ah - cmpl $0xc040, %eax - jae 5f - - faddl MO(one) -5: fyl2x - ret - -2: fyl2xp1 - ret - -3: jp 4b // in case x is ±Inf - fstp %st(1) - fstp %st(1) - fadd %st(0) - ret - -END (__log1pl) diff --git a/sysdeps/i386/fpu/s_logb.S b/sysdeps/i386/fpu/s_logb.S deleted file mode 100644 index f78c091c8a..0000000000 --- a/sysdeps/i386/fpu/s_logb.S +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: s_logb.S,v 1.4 1995/05/09 00:14:30 jtc Exp $") - -ENTRY(__logb) - fldl 4(%esp) - fxtract - fstp %st - ret -END (__logb) -weak_alias (__logb, logb) diff --git a/sysdeps/i386/fpu/s_logbf.S b/sysdeps/i386/fpu/s_logbf.S deleted file mode 100644 index 91eb3d2925..0000000000 --- a/sysdeps/i386/fpu/s_logbf.S +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: s_logbf.S,v 1.3 1995/05/09 00:15:12 jtc Exp $") - -ENTRY(__logbf) - flds 4(%esp) - fxtract - fstp %st - ret -END (__logbf) -weak_alias (__logbf, logbf) diff --git a/sysdeps/i386/fpu/s_logbl.c b/sysdeps/i386/fpu/s_logbl.c deleted file mode 100644 index 391e2db489..0000000000 --- a/sysdeps/i386/fpu/s_logbl.c +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changes for long double by Ulrich Drepper - * Public domain. - */ - -#include - -long double -__logbl (long double x) -{ - long double res; - - asm ("fxtract\n" - "fstp %%st" : "=t" (res) : "0" (x)); - return res; -} - -weak_alias (__logbl, logbl) diff --git a/sysdeps/i386/fpu/s_lrint.S b/sysdeps/i386/fpu/s_lrint.S deleted file mode 100644 index 79a374b399..0000000000 --- a/sysdeps/i386/fpu/s_lrint.S +++ /dev/null @@ -1,34 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__lrint) - fldl 4(%esp) - subl $4, %esp - cfi_adjust_cfa_offset (4) - fistpl (%esp) - fwait - popl %eax - cfi_adjust_cfa_offset (-4) - ret -END(__lrint) -weak_alias (__lrint, lrint) diff --git a/sysdeps/i386/fpu/s_lrintf.S b/sysdeps/i386/fpu/s_lrintf.S deleted file mode 100644 index fc6e68e073..0000000000 --- a/sysdeps/i386/fpu/s_lrintf.S +++ /dev/null @@ -1,34 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__lrintf) - flds 4(%esp) - subl $4, %esp - cfi_adjust_cfa_offset (4) - fistpl (%esp) - fwait - popl %eax - cfi_adjust_cfa_offset (-4) - ret -END(__lrintf) -weak_alias (__lrintf, lrintf) diff --git a/sysdeps/i386/fpu/s_lrintl.S b/sysdeps/i386/fpu/s_lrintl.S deleted file mode 100644 index ba6dbdf44c..0000000000 --- a/sysdeps/i386/fpu/s_lrintl.S +++ /dev/null @@ -1,34 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__lrintl) - fldt 4(%esp) - subl $4, %esp - cfi_adjust_cfa_offset (4) - fistpl (%esp) - fwait - popl %eax - cfi_adjust_cfa_offset (-4) - ret -END(__lrintl) -weak_alias (__lrintl, lrintl) diff --git a/sysdeps/i386/fpu/s_nearbyint.S b/sysdeps/i386/fpu/s_nearbyint.S deleted file mode 100644 index f7b79b6ff2..0000000000 --- a/sysdeps/i386/fpu/s_nearbyint.S +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ -/* Adapted for use as nearbyint by Ulrich Drepper . */ - -#include - -ENTRY(__nearbyint) - fldl 4(%esp) - subl $32, %esp - cfi_adjust_cfa_offset (32) - fnstenv 4(%esp) - frndint - fldenv 4(%esp) - addl $32, %esp - cfi_adjust_cfa_offset (-32) - ret -END (__nearbyint) -weak_alias (__nearbyint, nearbyint) diff --git a/sysdeps/i386/fpu/s_nearbyintf.S b/sysdeps/i386/fpu/s_nearbyintf.S deleted file mode 100644 index 92df2f87b3..0000000000 --- a/sysdeps/i386/fpu/s_nearbyintf.S +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ -/* Adapted for use as nearbyint by Ulrich Drepper . */ - -#include - -ENTRY(__nearbyintf) - flds 4(%esp) - subl $32, %esp - cfi_adjust_cfa_offset (32) - fnstenv 4(%esp) - frndint - fldenv 4(%esp) - addl $32, %esp - cfi_adjust_cfa_offset (-32) - ret -END (__nearbyintf) -weak_alias (__nearbyintf, nearbyintf) diff --git a/sysdeps/i386/fpu/s_nearbyintl.S b/sysdeps/i386/fpu/s_nearbyintl.S deleted file mode 100644 index 3b7d1e2436..0000000000 --- a/sysdeps/i386/fpu/s_nearbyintl.S +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ -/* Adapted for use as nearbyint by Ulrich Drepper . */ - -#include - -ENTRY(__nearbyintl) - fldt 4(%esp) - subl $32, %esp - cfi_adjust_cfa_offset (32) - fnstenv 4(%esp) - frndint - fnstsw - andl $0x1, %eax - orl %eax, 8(%esp) - fldenv 4(%esp) - addl $32, %esp - cfi_adjust_cfa_offset (-32) - ret -END (__nearbyintl) -weak_alias (__nearbyintl, nearbyintl) diff --git a/sysdeps/i386/fpu/s_nextafterl.c b/sysdeps/i386/fpu/s_nextafterl.c deleted file mode 100644 index 600ad7a8d3..0000000000 --- a/sysdeps/i386/fpu/s_nextafterl.c +++ /dev/null @@ -1,125 +0,0 @@ -/* s_nextafterl.c -- long double version of s_nextafter.c. - * Special version for i387. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* IEEE functions - * nextafterl(x,y) - * return the next machine floating-point number of x in the - * direction toward y. - * Special cases: - */ - -#include -#include -#include - -long double __nextafterl(long double x, long double y) -{ - u_int32_t hx,hy,ix,iy; - u_int32_t lx,ly; - int32_t esx,esy; - - GET_LDOUBLE_WORDS(esx,hx,lx,x); - GET_LDOUBLE_WORDS(esy,hy,ly,y); - ix = esx&0x7fff; /* |x| */ - iy = esy&0x7fff; /* |y| */ - - /* Intel's extended format has the normally implicit 1 explicit - present. Sigh! */ - if(((ix==0x7fff)&&(((hx&0x7fffffff)|lx)!=0)) || /* x is nan */ - ((iy==0x7fff)&&(((hy&0x7fffffff)|ly)!=0))) /* y is nan */ - return x+y; - if(x==y) return y; /* x=y, return y */ - if((ix|hx|lx)==0) { /* x == 0 */ - long double u; - SET_LDOUBLE_WORDS(x,esy&0x8000,0,1);/* return +-minsubnormal */ - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(esx>=0) { /* x > 0 */ - if(esx>esy||((esx==esy) && (hx>hy||((hx==hy)&&(lx>ly))))) { - /* x > y, x -= ulp */ - if(lx==0) { - if (hx <= 0x80000000) { - if (esx == 0) { - --hx; - } else { - esx -= 1; - hx = hx - 1; - if (esx > 0) - hx |= 0x80000000; - } - } else - hx -= 1; - } - lx -= 1; - } else { /* x < y, x += ulp */ - lx += 1; - if(lx==0) { - hx += 1; - if (hx==0 || (esx == 0 && hx == 0x80000000)) { - esx += 1; - hx |= 0x80000000; - } - } - } - } else { /* x < 0 */ - if(esy>=0||(esx>esy||((esx==esy)&&(hx>hy||((hx==hy)&&(lx>ly)))))){ - /* x < y, x -= ulp */ - if(lx==0) { - if (hx <= 0x80000000 && esx != 0xffff8000) { - esx -= 1; - hx = hx - 1; - if ((esx&0x7fff) > 0) - hx |= 0x80000000; - } else - hx -= 1; - } - lx -= 1; - } else { /* x > y, x += ulp */ - lx += 1; - if(lx==0) { - hx += 1; - if (hx==0 || (esx == 0xffff8000 && hx == 0x80000000)) { - esx += 1; - hx |= 0x80000000; - } - } - } - } - esy = esx&0x7fff; - if(esy==0x7fff) { - long double u = x + x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(esy==0) { - long double u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - SET_LDOUBLE_WORDS(x,esx,hx,lx); - return x; -} -weak_alias (__nextafterl, nextafterl) -strong_alias (__nextafterl, __nexttowardl) -weak_alias (__nextafterl, nexttowardl) diff --git a/sysdeps/i386/fpu/s_nexttoward.c b/sysdeps/i386/fpu/s_nexttoward.c deleted file mode 100644 index 0b47044760..0000000000 --- a/sysdeps/i386/fpu/s_nexttoward.c +++ /dev/null @@ -1,93 +0,0 @@ -/* s_nexttoward.c - * Special i387 version - * Conversion from s_nextafter.c by Ulrich Drepper, Cygnus Support, - * drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* IEEE functions - * nexttoward(x,y) - * return the next machine floating-point number of x in the - * direction toward y. - * Special cases: - */ - -#include -#include -#include -#include - -double __nexttoward(double x, long double y) -{ - int32_t hx,ix,iy; - u_int32_t lx,hy,ly,esy; - - EXTRACT_WORDS(hx,lx,x); - GET_LDOUBLE_WORDS(esy,hy,ly,y); - ix = hx&0x7fffffff; /* |x| */ - iy = esy&0x7fff; /* |y| */ - - /* Intel's extended format has the normally implicit 1 explicit - present. Sigh! */ - if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || /* x is nan */ - ((iy>=0x7fff)&&((hy&0x7fffffff)|ly)!=0)) /* y is nan */ - return x+y; - if((long double) x==y) return y; /* x=y, return y */ - if((ix|lx)==0) { /* x == 0 */ - double u; - INSERT_WORDS(x,(esy&0x8000)<<16,1); /* return +-minsub */ - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(hx>=0) { /* x > 0 */ - if (x > y) { /* x -= ulp */ - if(lx==0) hx -= 1; - lx -= 1; - } else { /* x < y, x += ulp */ - lx += 1; - if(lx==0) hx += 1; - } - } else { /* x < 0 */ - if (x < y) { /* x -= ulp */ - if(lx==0) hx -= 1; - lx -= 1; - } else { /* x > y, x += ulp */ - lx += 1; - if(lx==0) hx += 1; - } - } - hy = hx&0x7ff00000; - if(hy>=0x7ff00000) { - double u = x+x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(hy<0x00100000) { - double u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - INSERT_WORDS(x,hx,lx); - return x; -} -weak_alias (__nexttoward, nexttoward) -#ifdef NO_LONG_DOUBLE -strong_alias (__nexttoward, __nexttowardl) -weak_alias (__nexttoward, nexttowardl) -#endif diff --git a/sysdeps/i386/fpu/s_nexttowardf.c b/sysdeps/i386/fpu/s_nexttowardf.c deleted file mode 100644 index e1156d1e4f..0000000000 --- a/sysdeps/i386/fpu/s_nexttowardf.c +++ /dev/null @@ -1,77 +0,0 @@ -/* s_nexttowardf.c -- float version of s_nextafter.c. - * Special i387 version. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -#include -#include -#include -#include - -float __nexttowardf(float x, long double y) -{ - int32_t hx,ix,iy; - u_int32_t hy,ly,esy; - - GET_FLOAT_WORD(hx,x); - GET_LDOUBLE_WORDS(esy,hy,ly,y); - ix = hx&0x7fffffff; /* |x| */ - iy = esy&0x7fff; /* |y| */ - - /* Intel's extended format has the normally implicit 1 explicit - present. Sigh! */ - if((ix>0x7f800000) || /* x is nan */ - (iy>=0x7fff&&(((hy&0x7fffffff)|ly)!=0))) /* y is nan */ - return x+y; - if((long double) x==y) return y; /* x=y, return y */ - if(ix==0) { /* x == 0 */ - float u; - SET_FLOAT_WORD(x,((esy&0x8000)<<16)|1);/* return +-minsub*/ - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(hx>=0) { /* x > 0 */ - if(x > y) { /* x -= ulp */ - hx -= 1; - } else { /* x < y, x += ulp */ - hx += 1; - } - } else { /* x < 0 */ - if(x < y) { /* x -= ulp */ - hx -= 1; - } else { /* x > y, x += ulp */ - hx += 1; - } - } - hy = hx&0x7f800000; - if(hy>=0x7f800000) { - float u = x+x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(hy<0x00800000) { - float u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - SET_FLOAT_WORD(x,hx); - return x; -} -weak_alias (__nexttowardf, nexttowardf) diff --git a/sysdeps/i386/fpu/s_remquo.S b/sysdeps/i386/fpu/s_remquo.S deleted file mode 100644 index 341285db30..0000000000 --- a/sysdeps/i386/fpu/s_remquo.S +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Written by Ulrich Drepper . - * Based on e_remainder by J.T. Conklin . - * Public domain. - */ - -#include - -#define PARMS 4 /* no space for saved regs */ -#define DVDND PARMS -#define DVSOR DVDND+8 -#define QUOP DVSOR+8 - - .text -ENTRY (__remquo) - - fldl DVSOR(%esp) - fldl DVDND(%esp) -1: fprem1 - fstsw %ax - sahf - jp 1b - fstp %st(1) - /* Compute the congruent of the quotient. */ - movl %eax, %ecx - shrl $8, %eax - shrl $12, %ecx - andl $4, %ecx - andl $3, %eax - orl %eax, %ecx - leal (%ecx,%ecx,2),%ecx - movl $0xef2a60, %eax - shrl %cl, %eax - andl $7, %eax - movl QUOP(%esp), %ecx - movl DVDND+4(%esp), %edx - xorl DVSOR+4(%esp), %edx - testl $0x80000000, %edx - jz 1f - negl %eax -1: movl %eax, (%ecx) - - ret -END (__remquo) -weak_alias (__remquo, remquo) diff --git a/sysdeps/i386/fpu/s_remquof.S b/sysdeps/i386/fpu/s_remquof.S deleted file mode 100644 index 62063f068f..0000000000 --- a/sysdeps/i386/fpu/s_remquof.S +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Written by Ulrich Drepper . - * Based on e_remainder by J.T. Conklin . - * Public domain. - */ - -#include - -#define PARMS 4 /* no space for saved regs */ -#define DVDND PARMS -#define DVSOR DVDND+4 -#define QUOP DVSOR+4 - - .text -ENTRY (__remquof) - - flds DVSOR(%esp) - flds DVDND(%esp) -1: fprem1 - fstsw %ax - sahf - jp 1b - fstp %st(1) - /* Compute the congruent of the quotient. */ - movl %eax, %ecx - shrl $8, %eax - shrl $12, %ecx - andl $4, %ecx - andl $3, %eax - orl %eax, %ecx - leal (%ecx,%ecx,2),%ecx - movl $0xef2a60, %eax - shrl %cl, %eax - andl $7, %eax - movl QUOP(%esp), %ecx - movl DVDND(%esp), %edx - xorl DVSOR(%esp), %edx - testl $0x80000000, %edx - jz 1f - negl %eax -1: movl %eax, (%ecx) - - ret -END (__remquof) -weak_alias (__remquof, remquof) diff --git a/sysdeps/i386/fpu/s_remquol.S b/sysdeps/i386/fpu/s_remquol.S deleted file mode 100644 index f3d84fc7c2..0000000000 --- a/sysdeps/i386/fpu/s_remquol.S +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Written by Ulrich Drepper . - * Based on e_remainder by J.T. Conklin . - * Public domain. - */ - -#include - -#define PARMS 4 /* no space for saved regs */ -#define DVDND PARMS -#define DVSOR DVDND+12 -#define QUOP DVSOR+12 - - .text -ENTRY (__remquol) - - fldt DVSOR(%esp) - fldt DVDND(%esp) -1: fprem1 - fstsw %ax - sahf - jp 1b - fstp %st(1) - /* Compute the congruent of the quotient. */ - movl %eax, %ecx - shrl $8, %eax - shrl $12, %ecx - andl $4, %ecx - andl $3, %eax - orl %eax, %ecx - leal (%ecx,%ecx,2),%ecx - movl $0xef2a60, %eax - shrl %cl, %eax - andl $7, %eax - movl QUOP(%esp), %ecx - movl DVDND+8(%esp), %edx - xorl DVSOR+8(%esp), %edx - testl $0x8000, %edx - jz 1f - negl %eax -1: movl %eax, (%ecx) - - ret -END (__remquol) -weak_alias (__remquol, remquol) diff --git a/sysdeps/i386/fpu/s_rint.S b/sysdeps/i386/fpu/s_rint.S deleted file mode 100644 index be36c5f0ca..0000000000 --- a/sysdeps/i386/fpu/s_rint.S +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: s_rint.S,v 1.4 1995/05/09 00:16:08 jtc Exp $") - -ENTRY(__rint) - fldl 4(%esp) - frndint - ret -END (__rint) -weak_alias (__rint, rint) diff --git a/sysdeps/i386/fpu/s_rintf.S b/sysdeps/i386/fpu/s_rintf.S deleted file mode 100644 index 2b358c1cf1..0000000000 --- a/sysdeps/i386/fpu/s_rintf.S +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: s_rintf.S,v 1.3 1995/05/09 00:17:22 jtc Exp $") - -ENTRY(__rintf) - flds 4(%esp) - frndint - ret -END (__rintf) -weak_alias (__rintf, rintf) diff --git a/sysdeps/i386/fpu/s_rintl.c b/sysdeps/i386/fpu/s_rintl.c deleted file mode 100644 index 66af9cb675..0000000000 --- a/sysdeps/i386/fpu/s_rintl.c +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changes for long double by Ulrich Drepper - * Public domain. - */ - -#include - -long double -__rintl (long double x) -{ - long double res; - - asm ("frndint" : "=t" (res) : "0" (x)); - return res; -} - -weak_alias (__rintl, rintl) diff --git a/sysdeps/i386/fpu/s_scalbln.c b/sysdeps/i386/fpu/s_scalbln.c deleted file mode 100644 index 1009713fbc..0000000000 --- a/sysdeps/i386/fpu/s_scalbln.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Nothing to do. This function is the same as scalbn. So we define an - alias. */ diff --git a/sysdeps/i386/fpu/s_scalblnf.c b/sysdeps/i386/fpu/s_scalblnf.c deleted file mode 100644 index 5e558c3540..0000000000 --- a/sysdeps/i386/fpu/s_scalblnf.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Nothing to do. This function is the same as scalbnf. So we define an - alias. */ diff --git a/sysdeps/i386/fpu/s_scalblnl.c b/sysdeps/i386/fpu/s_scalblnl.c deleted file mode 100644 index cda2ec11c8..0000000000 --- a/sysdeps/i386/fpu/s_scalblnl.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Nothing to do. This function is the same as scalbnl. So we define an - alias. */ diff --git a/sysdeps/i386/fpu/s_scalbn.S b/sysdeps/i386/fpu/s_scalbn.S deleted file mode 100644 index 4e90903115..0000000000 --- a/sysdeps/i386/fpu/s_scalbn.S +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include -#include - -RCSID("$NetBSD: s_scalbn.S,v 1.4 1995/05/09 00:19:06 jtc Exp $") - -ENTRY(__scalbn) - fildl 12(%esp) - fldl 4(%esp) - fscale - fstp %st(1) - DBL_NARROW_EVAL - ret -END (__scalbn) -strong_alias (__scalbn, __scalbln) - -#include -#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_20) -compat_symbol (libc, __scalbn, scalbln, GLIBC_2_1); -#endif diff --git a/sysdeps/i386/fpu/s_scalbnf.S b/sysdeps/i386/fpu/s_scalbnf.S deleted file mode 100644 index f8353c4c75..0000000000 --- a/sysdeps/i386/fpu/s_scalbnf.S +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include -#include - -RCSID("$NetBSD: s_scalbnf.S,v 1.3 1995/05/09 00:19:59 jtc Exp $") - -ENTRY(__scalbnf) - fildl 8(%esp) - flds 4(%esp) - fscale - fstp %st(1) - FLT_NARROW_EVAL - ret -END (__scalbnf) -strong_alias (__scalbnf, __scalblnf) - -#include -#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_20) -compat_symbol (libc, __scalbnf, scalblnf, GLIBC_2_1); -#endif diff --git a/sysdeps/i386/fpu/s_scalbnl.S b/sysdeps/i386/fpu/s_scalbnl.S deleted file mode 100644 index 839b5ff353..0000000000 --- a/sysdeps/i386/fpu/s_scalbnl.S +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changes for long double by Ulrich Drepper - * Public domain. - */ - -#include - -RCSID("$NetBSD: $") - -ENTRY(__scalbnl) - fildl 16(%esp) - fldt 4(%esp) - fscale - fstp %st(1) - ret -END (__scalbnl) -strong_alias (__scalbnl, __scalblnl) - -#include -#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_20) -compat_symbol (libc, __scalbnl, scalblnl, GLIBC_2_1); -#endif diff --git a/sysdeps/i386/fpu/s_significand.S b/sysdeps/i386/fpu/s_significand.S deleted file mode 100644 index 4859b7ed71..0000000000 --- a/sysdeps/i386/fpu/s_significand.S +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: s_significand.S,v 1.4 1995/05/09 00:21:47 jtc Exp $") - -ENTRY(__significand) - fldl 4(%esp) - fxtract - fstp %st(1) - ret -END (__significand) -weak_alias (__significand, significand) diff --git a/sysdeps/i386/fpu/s_significandf.S b/sysdeps/i386/fpu/s_significandf.S deleted file mode 100644 index 3a2de97759..0000000000 --- a/sysdeps/i386/fpu/s_significandf.S +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#include - -RCSID("$NetBSD: s_significandf.S,v 1.3 1995/05/09 00:24:07 jtc Exp $") - -ENTRY(__significandf) - flds 4(%esp) - fxtract - fstp %st(1) - ret -END (__significandf) -weak_alias (__significandf, significandf) diff --git a/sysdeps/i386/fpu/s_significandl.c b/sysdeps/i386/fpu/s_significandl.c deleted file mode 100644 index b8cb093502..0000000000 --- a/sysdeps/i386/fpu/s_significandl.c +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changes for long double by Ulrich Drepper - * Public domain. - */ - -#include - -long double -__significandl (long double x) -{ - long double res; - - asm ("fxtract\n" - "fstp %%st(1)" : "=t" (res) : "0" (x)); - return res; -} - -weak_alias (__significandl, significandl) diff --git a/sysdeps/i386/fpu/s_trunc.S b/sysdeps/i386/fpu/s_trunc.S deleted file mode 100644 index e9a850b877..0000000000 --- a/sysdeps/i386/fpu/s_trunc.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Truncate double value. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__trunc) - fldl 4(%esp) - subl $32, %esp - cfi_adjust_cfa_offset (32) - fnstenv 4(%esp) - movl $0xc00, %edx - orl 4(%esp), %edx - movl %edx, (%esp) - fldcw (%esp) - frndint - fldenv 4(%esp) - addl $32, %esp - cfi_adjust_cfa_offset (-32) - ret -END(__trunc) -weak_alias (__trunc, trunc) diff --git a/sysdeps/i386/fpu/s_truncf.S b/sysdeps/i386/fpu/s_truncf.S deleted file mode 100644 index a93f5b9a2e..0000000000 --- a/sysdeps/i386/fpu/s_truncf.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Truncate float value. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__truncf) - flds 4(%esp) - subl $32, %esp - cfi_adjust_cfa_offset (32) - fnstenv 4(%esp) - movl $0xc00, %edx - orl 4(%esp), %edx - movl %edx, (%esp) - fldcw (%esp) - frndint - fldenv 4(%esp) - addl $32, %esp - cfi_adjust_cfa_offset (-32) - ret -END(__truncf) -weak_alias (__truncf, truncf) diff --git a/sysdeps/i386/fpu/s_truncl.S b/sysdeps/i386/fpu/s_truncl.S deleted file mode 100644 index a884123612..0000000000 --- a/sysdeps/i386/fpu/s_truncl.S +++ /dev/null @@ -1,40 +0,0 @@ -/* Truncate long double value. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__truncl) - fldt 4(%esp) - subl $32, %esp - cfi_adjust_cfa_offset (32) - fnstenv 4(%esp) - movl $0xc00, %edx - orl 4(%esp), %edx - movl %edx, (%esp) - fldcw (%esp) - frndint - fnstsw - andl $0x1, %eax - orl %eax, 8(%esp) - fldenv 4(%esp) - addl $32, %esp - cfi_adjust_cfa_offset (-32) - ret -END(__truncl) -weak_alias (__truncl, truncl) diff --git a/sysdeps/i386/fpu/slowexp.c b/sysdeps/i386/fpu/slowexp.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/i386/fpu/slowexp.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/i386/fpu/slowpow.c b/sysdeps/i386/fpu/slowpow.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/i386/fpu/slowpow.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/i386/fpu/t_exp.c b/sysdeps/i386/fpu/t_exp.c deleted file mode 100644 index fd37963b05..0000000000 --- a/sysdeps/i386/fpu/t_exp.c +++ /dev/null @@ -1 +0,0 @@ -/* Empty. Not needed. */ diff --git a/sysdeps/i386/fpu/w_sqrt_compat.c b/sysdeps/i386/fpu/w_sqrt_compat.c deleted file mode 100644 index ddd36d0964..0000000000 --- a/sysdeps/i386/fpu/w_sqrt_compat.c +++ /dev/null @@ -1,8 +0,0 @@ -/* The inline __ieee754_sqrt is not correctly rounding; it's OK for - most internal uses in glibc, but not for sqrt itself. */ -#define __ieee754_sqrt __avoid_ieee754_sqrt -#include -#include -#undef __ieee754_sqrt -extern double __ieee754_sqrt (double); -#include diff --git a/sysdeps/i386/gccframe.h b/sysdeps/i386/gccframe.h deleted file mode 100644 index 579da40ae9..0000000000 --- a/sysdeps/i386/gccframe.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Definition of object in frame unwind info. i386 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define DWARF_FRAME_REGISTERS 17 - -#define CRT_GET_RFIB_DATA(BASE) \ - { \ - register void *__ebx __asm__("ebx");\ - BASE = __ebx; \ - } - -#include diff --git a/sysdeps/i386/gmp-mparam.h b/sysdeps/i386/gmp-mparam.h deleted file mode 100644 index 7ea503a403..0000000000 --- a/sysdeps/i386/gmp-mparam.h +++ /dev/null @@ -1,28 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, see -. */ - -#define BITS_PER_MP_LIMB 32 -#define BYTES_PER_MP_LIMB 4 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -#define IEEE_DOUBLE_BIG_ENDIAN 0 diff --git a/sysdeps/i386/htonl.S b/sysdeps/i386/htonl.S deleted file mode 100644 index 63279bb6e1..0000000000 --- a/sysdeps/i386/htonl.S +++ /dev/null @@ -1,34 +0,0 @@ -/* Change byte order in word. For Intel 80x86, x >= 4. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -/* - INPUT PARAMETERS: - word (sp + 4) -*/ - - .text -ENTRY (htonl) - movl 4(%esp), %eax - bswap %eax - ret -END (htonl) - -weak_alias (htonl, ntohl) diff --git a/sysdeps/i386/htons.S b/sysdeps/i386/htons.S deleted file mode 100644 index a3c53a9944..0000000000 --- a/sysdeps/i386/htons.S +++ /dev/null @@ -1,35 +0,0 @@ -/* Change byte order in word. For Intel 80x86, x >= 3. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -/* - INPUT PARAMETERS: - word (sp + 4) -*/ - - .text -ENTRY (htons) - movl 4(%esp), %eax - andl $0xffff, %eax - rorw $8, %ax - ret -END (htons) - -weak_alias (htons, ntohs) diff --git a/sysdeps/i386/i386-mcount.S b/sysdeps/i386/i386-mcount.S deleted file mode 100644 index 733b8c78e7..0000000000 --- a/sysdeps/i386/i386-mcount.S +++ /dev/null @@ -1,79 +0,0 @@ -/* i386-specific implementation of profiling support. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* We need a special version of the `mcount' function since for ix86 it - must not clobber any register. This has several reasons: - - there is a bug in gcc as of version 2.7.2.2 which prohibits the - use of profiling together with nested functions - - the ELF `fixup' function uses GCC's regparm feature - - some (future) systems might want to pass parameters in registers. */ - - .globl C_SYMBOL_NAME(_mcount) - .type C_SYMBOL_NAME(_mcount), @function - .align ALIGNARG(4) -C_LABEL(_mcount) - /* Save the caller-clobbered registers. */ - pushl %eax - pushl %ecx - pushl %edx - - movl 12(%esp), %edx - movl 4(%ebp), %eax - - /* No need to access the PLT or GOT, __mcount_internal is an - internal function and we can make a relative call. */ - call C_SYMBOL_NAME(__mcount_internal) - - /* Pop the saved registers. Please note that `mcount' has no - return value. */ - popl %edx - popl %ecx - popl %eax - ret - ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount)) - -#undef mcount -weak_alias (_mcount, mcount) - - /* Same as above, but doesn't require a frame pointer */ - .globl C_SYMBOL_NAME(__fentry__) - .type C_SYMBOL_NAME(__fentry__), @function - .align ALIGNARG(4) -C_LABEL(__fentry__) - /* Save the caller-clobbered registers. */ - pushl %eax - pushl %ecx - pushl %edx - - movl 12(%esp), %edx - movl 16(%esp), %eax - - /* No need to access the PLT or GOT, __mcount_internal is an - internal function and we can make a relative call. */ - call C_SYMBOL_NAME(__mcount_internal) - - /* Pop the saved registers. Please note that `__fentry__' has no - return value. */ - popl %edx - popl %ecx - popl %eax - ret - ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__fentry__)) diff --git a/sysdeps/i386/i586/add_n.S b/sysdeps/i386/i586/add_n.S deleted file mode 100644 index f73df092f0..0000000000 --- a/sysdeps/i386/i586/add_n.S +++ /dev/null @@ -1,143 +0,0 @@ -/* Pentium __mpn_add_n -- Add two limb vectors of the same length > 0 and store - sum in a third limb vector. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define PARMS 4+16 /* space for 4 saved regs */ -#define RES PARMS -#define S1 RES+4 -#define S2 S1+4 -#define SIZE S2+4 - - .text -ENTRY (__mpn_add_n) - - pushl %edi - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - pushl %ebp - cfi_adjust_cfa_offset (4) - pushl %ebx - cfi_adjust_cfa_offset (4) - - movl RES(%esp),%edi - cfi_rel_offset (edi, 12) - movl S1(%esp),%esi - cfi_rel_offset (esi, 8) - movl S2(%esp),%ebx - cfi_rel_offset (ebx, 0) - movl SIZE(%esp),%ecx - movl (%ebx),%ebp - cfi_rel_offset (ebp, 4) - - decl %ecx - movl %ecx,%edx - shrl $3,%ecx - andl $7,%edx - testl %ecx,%ecx /* zero carry flag */ - jz L(end) - pushl %edx - cfi_adjust_cfa_offset (4) - - ALIGN (3) -L(oop): movl 28(%edi),%eax /* fetch destination cache line */ - leal 32(%edi),%edi - -L(1): movl (%esi),%eax - movl 4(%esi),%edx - adcl %ebp,%eax - movl 4(%ebx),%ebp - adcl %ebp,%edx - movl 8(%ebx),%ebp - movl %eax,-32(%edi) - movl %edx,-28(%edi) - -L(2): movl 8(%esi),%eax - movl 12(%esi),%edx - adcl %ebp,%eax - movl 12(%ebx),%ebp - adcl %ebp,%edx - movl 16(%ebx),%ebp - movl %eax,-24(%edi) - movl %edx,-20(%edi) - -L(3): movl 16(%esi),%eax - movl 20(%esi),%edx - adcl %ebp,%eax - movl 20(%ebx),%ebp - adcl %ebp,%edx - movl 24(%ebx),%ebp - movl %eax,-16(%edi) - movl %edx,-12(%edi) - -L(4): movl 24(%esi),%eax - movl 28(%esi),%edx - adcl %ebp,%eax - movl 28(%ebx),%ebp - adcl %ebp,%edx - movl 32(%ebx),%ebp - movl %eax,-8(%edi) - movl %edx,-4(%edi) - - leal 32(%esi),%esi - leal 32(%ebx),%ebx - decl %ecx - jnz L(oop) - - popl %edx - cfi_adjust_cfa_offset (-4) -L(end): - decl %edx /* test %edx w/o clobbering carry */ - js L(end2) - incl %edx -L(oop2): - leal 4(%edi),%edi - movl (%esi),%eax - adcl %ebp,%eax - movl 4(%ebx),%ebp - movl %eax,-4(%edi) - leal 4(%esi),%esi - leal 4(%ebx),%ebx - decl %edx - jnz L(oop2) -L(end2): - movl (%esi),%eax - adcl %ebp,%eax - movl %eax,(%edi) - - sbbl %eax,%eax - negl %eax - - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (__mpn_add_n) diff --git a/sysdeps/i386/i586/addmul_1.S b/sysdeps/i386/i586/addmul_1.S deleted file mode 100644 index a713192982..0000000000 --- a/sysdeps/i386/i586/addmul_1.S +++ /dev/null @@ -1,94 +0,0 @@ -/* Pentium __mpn_addmul_1 -- Multiply a limb vector with a limb and add - the result to a second limb vector. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define PARMS 4+16 /* space for 4 saved regs */ -#define RES PARMS -#define S1 RES+4 -#define SIZE S1+4 -#define S2LIMB SIZE+4 - -#define res_ptr edi -#define s1_ptr esi -#define size ecx -#define s2_limb ebx - - .text -ENTRY (__mpn_addmul_1) - - pushl %res_ptr - cfi_adjust_cfa_offset (4) - pushl %s1_ptr - cfi_adjust_cfa_offset (4) - pushl %ebp - cfi_adjust_cfa_offset (4) - pushl %s2_limb - cfi_adjust_cfa_offset (4) - - movl RES(%esp), %res_ptr - cfi_rel_offset (res_ptr, 12) - movl S1(%esp), %s1_ptr - cfi_rel_offset (s1_ptr, 8) - movl SIZE(%esp), %size - movl S2LIMB(%esp), %s2_limb - cfi_rel_offset (s2_limb, 0) - leal (%res_ptr,%size,4), %res_ptr - leal (%s1_ptr,%size,4), %s1_ptr - negl %size - xorl %ebp, %ebp - cfi_rel_offset (ebp, 4) - ALIGN (3) - -L(oop): adcl $0, %ebp - movl (%s1_ptr,%size,4), %eax - - mull %s2_limb - - addl %ebp, %eax - movl (%res_ptr,%size,4), %ebp - - adcl $0, %edx - addl %eax, %ebp - - movl %ebp, (%res_ptr,%size,4) - incl %size - - movl %edx, %ebp - jnz L(oop) - - adcl $0, %ebp - movl %ebp, %eax - popl %s2_limb - cfi_adjust_cfa_offset (-4) - cfi_restore (s2_limb) - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %s1_ptr - cfi_adjust_cfa_offset (-4) - cfi_restore (s1_ptr) - popl %res_ptr - cfi_adjust_cfa_offset (-4) - cfi_restore (res_ptr) - - ret -#undef size -END (__mpn_addmul_1) diff --git a/sysdeps/i386/i586/bzero.S b/sysdeps/i386/i586/bzero.S deleted file mode 100644 index 2a106719a4..0000000000 --- a/sysdeps/i386/i586/bzero.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_BZERO -#define memset __bzero -#include -weak_alias (__bzero, bzero) diff --git a/sysdeps/i386/i586/init-arch.h b/sysdeps/i386/i586/init-arch.h deleted file mode 100644 index 4711212e6f..0000000000 --- a/sysdeps/i386/i586/init-arch.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define MINIMUM_ISA 586 -#include diff --git a/sysdeps/i386/i586/lshift.S b/sysdeps/i386/i586/lshift.S deleted file mode 100644 index 7941c28d9d..0000000000 --- a/sysdeps/i386/i586/lshift.S +++ /dev/null @@ -1,255 +0,0 @@ -/* Pentium optimized __mpn_lshift -- - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define PARMS 4+16 /* space for 4 saved regs */ -#define RES PARMS -#define S RES+4 -#define SIZE S+4 -#define CNT SIZE+4 - - .text -ENTRY (__mpn_lshift) - - pushl %edi - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - pushl %ebp - cfi_adjust_cfa_offset (4) - cfi_rel_offset (ebp, 0) - pushl %ebx - cfi_adjust_cfa_offset (4) - - movl RES(%esp),%edi - cfi_rel_offset (edi, 12) - movl S(%esp),%esi - cfi_rel_offset (esi, 8) - movl SIZE(%esp),%ebx - cfi_rel_offset (ebx, 0) - movl CNT(%esp),%ecx - -/* We can use faster code for shift-by-1 under certain conditions. */ - cmp $1,%ecx - jne L(normal) - leal 4(%esi),%eax - cmpl %edi,%eax - jnc L(special) /* jump if s_ptr + 1 >= res_ptr */ - leal (%esi,%ebx,4),%eax - cmpl %eax,%edi - jnc L(special) /* jump if res_ptr >= s_ptr + size */ - -L(normal): - leal -4(%edi,%ebx,4),%edi - leal -4(%esi,%ebx,4),%esi - - movl (%esi),%edx - subl $4,%esi - xorl %eax,%eax - shldl %cl,%edx,%eax /* compute carry limb */ - pushl %eax /* push carry limb onto stack */ - cfi_adjust_cfa_offset (4) - - decl %ebx - pushl %ebx - cfi_adjust_cfa_offset (4) - shrl $3,%ebx - jz L(end) - - movl (%edi),%eax /* fetch destination cache line */ - - ALIGN (2) -L(oop): movl -28(%edi),%eax /* fetch destination cache line */ - movl %edx,%ebp - - movl (%esi),%eax - movl -4(%esi),%edx - shldl %cl,%eax,%ebp - shldl %cl,%edx,%eax - movl %ebp,(%edi) - movl %eax,-4(%edi) - - movl -8(%esi),%ebp - movl -12(%esi),%eax - shldl %cl,%ebp,%edx - shldl %cl,%eax,%ebp - movl %edx,-8(%edi) - movl %ebp,-12(%edi) - - movl -16(%esi),%edx - movl -20(%esi),%ebp - shldl %cl,%edx,%eax - shldl %cl,%ebp,%edx - movl %eax,-16(%edi) - movl %edx,-20(%edi) - - movl -24(%esi),%eax - movl -28(%esi),%edx - shldl %cl,%eax,%ebp - shldl %cl,%edx,%eax - movl %ebp,-24(%edi) - movl %eax,-28(%edi) - - subl $32,%esi - subl $32,%edi - decl %ebx - jnz L(oop) - -L(end): popl %ebx - cfi_adjust_cfa_offset (-4) - andl $7,%ebx - jz L(end2) -L(oop2): - movl (%esi),%eax - shldl %cl,%eax,%edx - movl %edx,(%edi) - movl %eax,%edx - subl $4,%esi - subl $4,%edi - decl %ebx - jnz L(oop2) - -L(end2): - shll %cl,%edx /* compute least significant limb */ - movl %edx,(%edi) /* store it */ - - popl %eax /* pop carry limb */ - cfi_adjust_cfa_offset (-4) - - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret - -/* We loop from least significant end of the arrays, which is only - permissible if the source and destination don't overlap, since the - function is documented to work for overlapping source and destination. -*/ - - cfi_adjust_cfa_offset (16) - cfi_rel_offset (edi, 12) - cfi_rel_offset (esi, 8) - cfi_rel_offset (ebp, 4) - cfi_rel_offset (ebx, 0) -L(special): - movl (%esi),%edx - addl $4,%esi - - decl %ebx - pushl %ebx - cfi_adjust_cfa_offset (4) - shrl $3,%ebx - - addl %edx,%edx - incl %ebx - decl %ebx - jz L(Lend) - - movl (%edi),%eax /* fetch destination cache line */ - - ALIGN (2) -L(Loop): - movl 28(%edi),%eax /* fetch destination cache line */ - movl %edx,%ebp - - movl (%esi),%eax - movl 4(%esi),%edx - adcl %eax,%eax - movl %ebp,(%edi) - adcl %edx,%edx - movl %eax,4(%edi) - - movl 8(%esi),%ebp - movl 12(%esi),%eax - adcl %ebp,%ebp - movl %edx,8(%edi) - adcl %eax,%eax - movl %ebp,12(%edi) - - movl 16(%esi),%edx - movl 20(%esi),%ebp - adcl %edx,%edx - movl %eax,16(%edi) - adcl %ebp,%ebp - movl %edx,20(%edi) - - movl 24(%esi),%eax - movl 28(%esi),%edx - adcl %eax,%eax - movl %ebp,24(%edi) - adcl %edx,%edx - movl %eax,28(%edi) - - leal 32(%esi),%esi /* use leal not to clobber carry */ - leal 32(%edi),%edi - decl %ebx - jnz L(Loop) - -L(Lend): - popl %ebx - cfi_adjust_cfa_offset (-4) - sbbl %eax,%eax /* save carry in %eax */ - andl $7,%ebx - jz L(Lend2) - addl %eax,%eax /* restore carry from eax */ -L(Loop2): - movl %edx,%ebp - movl (%esi),%edx - adcl %edx,%edx - movl %ebp,(%edi) - - leal 4(%esi),%esi /* use leal not to clobber carry */ - leal 4(%edi),%edi - decl %ebx - jnz L(Loop2) - - jmp L(L1) -L(Lend2): - addl %eax,%eax /* restore carry from eax */ -L(L1): movl %edx,(%edi) /* store last limb */ - - sbbl %eax,%eax - negl %eax - - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (__mpn_lshift) diff --git a/sysdeps/i386/i586/memcopy.h b/sysdeps/i386/i586/memcopy.h deleted file mode 100644 index 39f020a746..0000000000 --- a/sysdeps/i386/i586/memcopy.h +++ /dev/null @@ -1,95 +0,0 @@ -/* memcopy.h -- definitions for memory copy functions. Pentium version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - Contributed by Torbjorn Granlund (tege@sics.se). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Get the i386 definitions. We will override some of them below. */ -#include - -/* Written like this, the Pentium pipeline can execute the loop at a - sustained rate of 2 instructions/clock, or asymptotically 480 - Mbytes/second at 60Mhz. */ - -#undef WORD_COPY_FWD -#define WORD_COPY_FWD(dst_bp, src_bp, nbytes_left, nbytes) \ - do \ - { \ - asm volatile ("subl $32,%2\n" \ - "js 2f\n" \ - "movl 0(%0),%%edx\n" /* alloc dest line */ \ - "1:\n" \ - "movl 28(%0),%%eax\n" /* alloc dest line */ \ - "subl $32,%2\n" /* decr loop count */ \ - "movl 0(%1),%%eax\n" /* U pipe */ \ - "movl 4(%1),%%edx\n" /* V pipe */ \ - "movl %%eax,0(%0)\n" /* U pipe */ \ - "movl %%edx,4(%0)\n" /* V pipe */ \ - "movl 8(%1),%%eax\n" \ - "movl 12(%1),%%edx\n" \ - "movl %%eax,8(%0)\n" \ - "movl %%edx,12(%0)\n" \ - "movl 16(%1),%%eax\n" \ - "movl 20(%1),%%edx\n" \ - "movl %%eax,16(%0)\n" \ - "movl %%edx,20(%0)\n" \ - "movl 24(%1),%%eax\n" \ - "movl 28(%1),%%edx\n" \ - "movl %%eax,24(%0)\n" \ - "movl %%edx,28(%0)\n" \ - "leal 32(%1),%1\n" /* update src ptr */ \ - "leal 32(%0),%0\n" /* update dst ptr */ \ - "jns 1b\n" \ - "2: addl $32,%2" : \ - "=r" (dst_bp), "=r" (src_bp), "=r" (nbytes_left) : \ - "0" (dst_bp), "1" (src_bp), "2" (nbytes) : \ - "ax", "dx"); \ - } while (0) - -#undef WORD_COPY_BWD -#define WORD_COPY_BWD(dst_ep, src_ep, nbytes_left, nbytes) \ - do \ - { \ - asm volatile ("subl $32,%2\n" \ - "js 2f\n" \ - "movl -4(%0),%%edx\n" \ - "1:\n" \ - "movl -32(%0),%%eax\n" \ - "subl $32,%2\n" \ - "movl -4(%1),%%eax\n" \ - "movl -8(%1),%%edx\n" \ - "movl %%eax,-4(%0)\n" \ - "movl %%edx,-8(%0)\n" \ - "movl -12(%1),%%eax\n" \ - "movl -16(%1),%%edx\n" \ - "movl %%eax,-12(%0)\n" \ - "movl %%edx,-16(%0)\n" \ - "movl -20(%1),%%eax\n" \ - "movl -24(%1),%%edx\n" \ - "movl %%eax,-20(%0)\n" \ - "movl %%edx,-24(%0)\n" \ - "movl -28(%1),%%eax\n" \ - "movl -32(%1),%%edx\n" \ - "movl %%eax,-28(%0)\n" \ - "movl %%edx,-32(%0)\n" \ - "leal -32(%1),%1\n" \ - "leal -32(%0),%0\n" \ - "jns 1b\n" \ - "2: addl $32,%2" : \ - "=r" (dst_ep), "=r" (src_ep), "=r" (nbytes_left) : \ - "0" (dst_ep), "1" (src_ep), "2" (nbytes) : \ - "ax", "dx"); \ - } while (0) diff --git a/sysdeps/i386/i586/memcpy.S b/sysdeps/i386/i586/memcpy.S deleted file mode 100644 index 6474a3f653..0000000000 --- a/sysdeps/i386/i586/memcpy.S +++ /dev/null @@ -1,124 +0,0 @@ -/* Highly optimized version for i586. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+8 /* space for 2 saved regs */ -#define RTN PARMS -#define DEST RTN -#define SRC DEST+4 -#define LEN SRC+4 - - .text -#if defined PIC && IS_IN (libc) -ENTRY (__memcpy_chk) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb HIDDEN_JUMPTARGET (__chk_fail) -END (__memcpy_chk) -#endif -ENTRY (memcpy) - - pushl %edi - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - - movl DEST(%esp), %edi - cfi_rel_offset (edi, 4) - movl SRC(%esp), %esi - cfi_rel_offset (esi, 0) - movl LEN(%esp), %ecx - movl %edi, %eax - - /* We need this in any case. */ - cld - - /* Cutoff for the big loop is a size of 32 bytes since otherwise - the loop will never be entered. */ - cmpl $32, %ecx - jbe L(1) - - negl %eax - andl $3, %eax - subl %eax, %ecx - xchgl %eax, %ecx - - rep; movsb - - movl %eax, %ecx - subl $32, %ecx - js L(2) - - /* Read ahead to make sure we write in the cache since the stupid - i586 designers haven't implemented read-on-write-miss. */ - movl (%edi), %eax -L(3): movl 28(%edi), %edx - - /* Now correct the loop counter. Please note that in the following - code the flags are not changed anymore. */ - subl $32, %ecx - - movl (%esi), %eax - movl 4(%esi), %edx - movl %eax, (%edi) - movl %edx, 4(%edi) - movl 8(%esi), %eax - movl 12(%esi), %edx - movl %eax, 8(%edi) - movl %edx, 12(%edi) - movl 16(%esi), %eax - movl 20(%esi), %edx - movl %eax, 16(%edi) - movl %edx, 20(%edi) - movl 24(%esi), %eax - movl 28(%esi), %edx - movl %eax, 24(%edi) - movl %edx, 28(%edi) - - leal 32(%esi), %esi - leal 32(%edi), %edi - - jns L(3) - - /* Correct extra loop counter modification. */ -L(2): addl $32, %ecx -#ifndef USE_AS_MEMPCPY - movl DEST(%esp), %eax -#endif - -L(1): rep; movsb - -#ifdef USE_AS_MEMPCPY - movl %edi, %eax -#endif - - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (memcpy) -#ifndef USE_AS_MEMPCPY -libc_hidden_builtin_def (memcpy) -#endif diff --git a/sysdeps/i386/i586/mempcpy.S b/sysdeps/i386/i586/mempcpy.S deleted file mode 100644 index 720a4c0923..0000000000 --- a/sysdeps/i386/i586/mempcpy.S +++ /dev/null @@ -1,8 +0,0 @@ -#define USE_AS_MEMPCPY -#define memcpy __mempcpy -#define __memcpy_chk __mempcpy_chk -#include - -libc_hidden_def (__mempcpy) -weak_alias (__mempcpy, mempcpy) -libc_hidden_builtin_def (mempcpy) diff --git a/sysdeps/i386/i586/memset.S b/sysdeps/i386/i586/memset.S deleted file mode 100644 index 4f8f1bcf94..0000000000 --- a/sysdeps/i386/i586/memset.S +++ /dev/null @@ -1,121 +0,0 @@ -/* memset/bzero -- set memory area to CH/0 - Highly optimized version for ix86, x>=5. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Torbjorn Granlund, - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+4 /* space for 1 saved reg */ -#define RTN PARMS -#define DEST RTN -#ifdef USE_AS_BZERO -# define LEN DEST+4 -#else -# define CHR DEST+4 -# define LEN CHR+4 -#endif - - .text -#if defined SHARED && IS_IN (libc) && !defined USE_AS_BZERO -ENTRY (__memset_chk) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb HIDDEN_JUMPTARGET (__chk_fail) -END (__memset_chk) -#endif -ENTRY (memset) - - pushl %edi - cfi_adjust_cfa_offset (4) - - movl DEST(%esp), %edi - cfi_rel_offset (edi, 0) - movl LEN(%esp), %edx -#ifdef USE_AS_BZERO - xorl %eax, %eax /* we fill with 0 */ -#else - movb CHR(%esp), %al - movb %al, %ah - movl %eax, %ecx - shll $16, %eax - movw %cx, %ax -#endif - cld - -/* If less than 36 bytes to write, skip tricky code (it wouldn't work). */ - cmpl $36, %edx - movl %edx, %ecx /* needed when branch is taken! */ - jl L(2) - -/* First write 0-3 bytes to make the pointer 32-bit aligned. */ - movl %edi, %ecx /* Copy ptr to ecx... */ - negl %ecx /* ...and negate that and... */ - andl $3, %ecx /* ...mask to get byte count. */ - subl %ecx, %edx /* adjust global byte count */ - rep - stosb - - subl $32, %edx /* offset count for unrolled loop */ - movl (%edi), %ecx /* Fetch destination cache line */ - - .align 2, 0x90 /* supply 0x90 for broken assemblers */ -L(1): movl 28(%edi), %ecx /* allocate cache line for destination */ - subl $32, %edx /* decr loop count */ - movl %eax, 0(%edi) /* store words pairwise */ - movl %eax, 4(%edi) - movl %eax, 8(%edi) - movl %eax, 12(%edi) - movl %eax, 16(%edi) - movl %eax, 20(%edi) - movl %eax, 24(%edi) - movl %eax, 28(%edi) - leal 32(%edi), %edi /* update destination pointer */ - jge L(1) - - leal 32(%edx), %ecx /* reset offset count */ - -/* Write last 0-7 full 32-bit words (up to 8 words if loop was skipped). */ -L(2): shrl $2, %ecx /* convert byte count to longword count */ - rep - stosl - -/* Finally write the last 0-3 bytes. */ - movl %edx, %ecx - andl $3, %ecx - rep - stosb - -#ifndef USE_AS_BZERO - /* Load result (only if used as memset). */ - movl DEST(%esp), %eax /* start address of destination is result */ -#endif - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (memset) -libc_hidden_builtin_def (memset) - -#if defined SHARED && IS_IN (libc) && !defined __memset_chk \ - && !defined USE_AS_BZERO -strong_alias (__memset_chk, __memset_zero_constant_len_parameter) - .section .gnu.warning.__memset_zero_constant_len_parameter - .string "memset used with constant zero length parameter; this could be due to transposed parameters" -#endif diff --git a/sysdeps/i386/i586/memusage.h b/sysdeps/i386/i586/memusage.h deleted file mode 100644 index c8170874d0..0000000000 --- a/sysdeps/i386/i586/memusage.h +++ /dev/null @@ -1 +0,0 @@ -#include "../i686/memusage.h" diff --git a/sysdeps/i386/i586/mul_1.S b/sysdeps/i386/i586/mul_1.S deleted file mode 100644 index bd3a07de90..0000000000 --- a/sysdeps/i386/i586/mul_1.S +++ /dev/null @@ -1,90 +0,0 @@ -/* Pentium __mpn_mul_1 -- Multiply a limb vector with a limb and store - the result in a second limb vector. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define PARMS 4+16 /* space for 4 saved regs */ -#define RES PARMS -#define S1 RES+4 -#define SIZE S1+4 -#define S2LIMB SIZE+4 - -#define res_ptr edi -#define s1_ptr esi -#define size ecx -#define s2_limb ebx - - .text -ENTRY (__mpn_mul_1) - - pushl %res_ptr - cfi_adjust_cfa_offset (4) - pushl %s1_ptr - cfi_adjust_cfa_offset (4) - pushl %ebp - cfi_adjust_cfa_offset (4) - pushl %s2_limb - cfi_adjust_cfa_offset (4) - - movl RES(%esp), %res_ptr - cfi_rel_offset (res_ptr, 12) - movl S1(%esp), %s1_ptr - cfi_rel_offset (s1_ptr, 8) - movl SIZE(%esp), %size - movl S2LIMB(%esp), %s2_limb - cfi_rel_offset (s2_limb, 0) - leal (%res_ptr,%size,4), %res_ptr - leal (%s1_ptr,%size,4), %s1_ptr - negl %size - xorl %ebp, %ebp - cfi_rel_offset (ebp, 4) - ALIGN (3) - -L(oop): adcl $0, %ebp - movl (%s1_ptr,%size,4), %eax - - mull %s2_limb - - addl %eax, %ebp - - movl %ebp, (%res_ptr,%size,4) - incl %size - - movl %edx, %ebp - jnz L(oop) - - adcl $0, %ebp - movl %ebp, %eax - popl %s2_limb - cfi_adjust_cfa_offset (-4) - cfi_restore (s2_limb) - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %s1_ptr - cfi_adjust_cfa_offset (-4) - cfi_restore (s1_ptr) - popl %res_ptr - cfi_adjust_cfa_offset (-4) - cfi_restore (res_ptr) - - ret -#undef size -END (__mpn_mul_1) diff --git a/sysdeps/i386/i586/rshift.S b/sysdeps/i386/i586/rshift.S deleted file mode 100644 index 24c76ee0bb..0000000000 --- a/sysdeps/i386/i586/rshift.S +++ /dev/null @@ -1,255 +0,0 @@ -/* Pentium optimized __mpn_rshift -- - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define PARMS 4+16 /* space for 4 saved regs */ -#define RES PARMS -#define S RES+4 -#define SIZE S+4 -#define CNT SIZE+4 - - .text -ENTRY (__mpn_rshift) - - pushl %edi - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - pushl %ebp - cfi_adjust_cfa_offset (4) - cfi_rel_offset (ebp, 0) - pushl %ebx - cfi_adjust_cfa_offset (4) - - movl RES(%esp),%edi - cfi_rel_offset (edi, 12) - movl S(%esp),%esi - cfi_rel_offset (esi, 8) - movl SIZE(%esp),%ebx - cfi_rel_offset (ebx, 0) - movl CNT(%esp),%ecx - -/* We can use faster code for shift-by-1 under certain conditions. */ - cmp $1,%ecx - jne L(normal) - leal 4(%edi),%eax - cmpl %esi,%eax - jnc L(special) /* jump if res_ptr + 1 >= s_ptr */ - leal (%edi,%ebx,4),%eax - cmpl %eax,%esi - jnc L(special) /* jump if s_ptr >= res_ptr + size */ - -L(normal): - movl (%esi),%edx - addl $4,%esi - xorl %eax,%eax - shrdl %cl,%edx,%eax /* compute carry limb */ - pushl %eax /* push carry limb onto stack */ - cfi_adjust_cfa_offset (4) - - decl %ebx - pushl %ebx - cfi_adjust_cfa_offset (4) - shrl $3,%ebx - jz L(end) - - movl (%edi),%eax /* fetch destination cache line */ - - ALIGN (2) -L(oop): movl 28(%edi),%eax /* fetch destination cache line */ - movl %edx,%ebp - - movl (%esi),%eax - movl 4(%esi),%edx - shrdl %cl,%eax,%ebp - shrdl %cl,%edx,%eax - movl %ebp,(%edi) - movl %eax,4(%edi) - - movl 8(%esi),%ebp - movl 12(%esi),%eax - shrdl %cl,%ebp,%edx - shrdl %cl,%eax,%ebp - movl %edx,8(%edi) - movl %ebp,12(%edi) - - movl 16(%esi),%edx - movl 20(%esi),%ebp - shrdl %cl,%edx,%eax - shrdl %cl,%ebp,%edx - movl %eax,16(%edi) - movl %edx,20(%edi) - - movl 24(%esi),%eax - movl 28(%esi),%edx - shrdl %cl,%eax,%ebp - shrdl %cl,%edx,%eax - movl %ebp,24(%edi) - movl %eax,28(%edi) - - addl $32,%esi - addl $32,%edi - decl %ebx - jnz L(oop) - -L(end): popl %ebx - cfi_adjust_cfa_offset (-4) - andl $7,%ebx - jz L(end2) -L(oop2): - movl (%esi),%eax - shrdl %cl,%eax,%edx /* compute result limb */ - movl %edx,(%edi) - movl %eax,%edx - addl $4,%esi - addl $4,%edi - decl %ebx - jnz L(oop2) - -L(end2): - shrl %cl,%edx /* compute most significant limb */ - movl %edx,(%edi) /* store it */ - - popl %eax /* pop carry limb */ - cfi_adjust_cfa_offset (-4) - - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret - -/* We loop from least significant end of the arrays, which is only - permissible if the source and destination don't overlap, since the - function is documented to work for overlapping source and destination. -*/ - - cfi_adjust_cfa_offset (16) - cfi_rel_offset (edi, 12) - cfi_rel_offset (esi, 8) - cfi_rel_offset (ebp, 4) - cfi_rel_offset (ebx, 0) -L(special): - leal -4(%edi,%ebx,4),%edi - leal -4(%esi,%ebx,4),%esi - - movl (%esi),%edx - subl $4,%esi - - decl %ebx - pushl %ebx - cfi_adjust_cfa_offset (4) - shrl $3,%ebx - - shrl $1,%edx - incl %ebx - decl %ebx - jz L(Lend) - - movl (%edi),%eax /* fetch destination cache line */ - - ALIGN (2) -L(Loop): - movl -28(%edi),%eax /* fetch destination cache line */ - movl %edx,%ebp - - movl (%esi),%eax - movl -4(%esi),%edx - rcrl $1,%eax - movl %ebp,(%edi) - rcrl $1,%edx - movl %eax,-4(%edi) - - movl -8(%esi),%ebp - movl -12(%esi),%eax - rcrl $1,%ebp - movl %edx,-8(%edi) - rcrl $1,%eax - movl %ebp,-12(%edi) - - movl -16(%esi),%edx - movl -20(%esi),%ebp - rcrl $1,%edx - movl %eax,-16(%edi) - rcrl $1,%ebp - movl %edx,-20(%edi) - - movl -24(%esi),%eax - movl -28(%esi),%edx - rcrl $1,%eax - movl %ebp,-24(%edi) - rcrl $1,%edx - movl %eax,-28(%edi) - - leal -32(%esi),%esi /* use leal not to clobber carry */ - leal -32(%edi),%edi - decl %ebx - jnz L(Loop) - -L(Lend): - popl %ebx - cfi_adjust_cfa_offset (-4) - sbbl %eax,%eax /* save carry in %eax */ - andl $7,%ebx - jz L(Lend2) - addl %eax,%eax /* restore carry from eax */ -L(Loop2): - movl %edx,%ebp - movl (%esi),%edx - rcrl $1,%edx - movl %ebp,(%edi) - - leal -4(%esi),%esi /* use leal not to clobber carry */ - leal -4(%edi),%edi - decl %ebx - jnz L(Loop2) - - jmp L(L1) -L(Lend2): - addl %eax,%eax /* restore carry from eax */ -L(L1): movl %edx,(%edi) /* store last limb */ - - movl $0,%eax - rcrl $1,%eax - - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (__mpn_rshift) diff --git a/sysdeps/i386/i586/stpcpy.S b/sysdeps/i386/i586/stpcpy.S deleted file mode 100644 index 8691efd01c..0000000000 --- a/sysdeps/i386/i586/stpcpy.S +++ /dev/null @@ -1,8 +0,0 @@ -#define USE_AS_STPCPY -#define STRCPY __stpcpy - -#include - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/i386/i586/strchr.S b/sysdeps/i386/i586/strchr.S deleted file mode 100644 index 02f66b8f72..0000000000 --- a/sysdeps/i386/i586/strchr.S +++ /dev/null @@ -1,348 +0,0 @@ -/* Find character CH in a NUL terminated string. - Highly optimized version for ix85, x>=5. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper, . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -/* This version is especially optimized for the i586 (and following?) - processors. This is mainly done by using the two pipelines. The - version optimized for i486 is weak in this aspect because to get - as much parallelism we have to execute some *more* instructions. - - The code below is structured to reflect the pairing of the instructions - as *I think* it is. I have no processor data book to verify this. - If you find something you think is incorrect let me know. */ - - -/* The magic value which is used throughout in the whole code. */ -#define magic 0xfefefeff - -#define PARMS 4+16 /* space for 4 saved regs */ -#define RTN PARMS -#define STR RTN -#define CHR STR+4 - - .text -ENTRY (strchr) - - pushl %edi /* Save callee-safe registers. */ - cfi_adjust_cfa_offset (-4) - pushl %esi - cfi_adjust_cfa_offset (-4) - - pushl %ebx - cfi_adjust_cfa_offset (-4) - pushl %ebp - cfi_adjust_cfa_offset (-4) - - movl STR(%esp), %eax - movl CHR(%esp), %edx - - movl %eax, %edi /* duplicate string pointer for later */ - cfi_rel_offset (edi, 12) - xorl %ecx, %ecx /* clear %ecx */ - - /* At the moment %edx contains C. What we need for the - algorithm is C in all bytes of the dword. Avoid - operations on 16 bit words because these require an - prefix byte (and one more cycle). */ - movb %dl, %dh /* now it is 0|0|c|c */ - movb %dl, %cl /* we construct the lower half in %ecx */ - - shll $16, %edx /* now %edx is c|c|0|0 */ - movb %cl, %ch /* now %ecx is 0|0|c|c */ - - orl %ecx, %edx /* and finally c|c|c|c */ - andl $3, %edi /* mask alignment bits */ - - jz L(11) /* alignment is 0 => start loop */ - - movb %dl, %cl /* 0 is needed below */ - jp L(0) /* exactly two bits set */ - - xorb (%eax), %cl /* is byte the one we are looking for? */ - jz L(out) /* yes => return pointer */ - - xorb %dl, %cl /* load single byte and test for NUL */ - je L(3) /* yes => return NULL */ - - movb 1(%eax), %cl /* load single byte */ - incl %eax - - cmpb %cl, %dl /* is byte == C? */ - je L(out) /* aligned => return pointer */ - - cmpb $0, %cl /* is byte NUL? */ - je L(3) /* yes => return NULL */ - - incl %eax - decl %edi - - jne L(11) - -L(0): movb (%eax), %cl /* load single byte */ - - cmpb %cl, %dl /* is byte == C? */ - je L(out) /* aligned => return pointer */ - - cmpb $0, %cl /* is byte NUL? */ - je L(3) /* yes => return NULL */ - - incl %eax /* increment pointer */ - - cfi_rel_offset (esi, 8) - cfi_rel_offset (ebx, 4) - cfi_rel_offset (ebp, 0) - - /* The following code is the preparation for the loop. The - four instruction up to `L1' will not be executed in the loop - because the same code is found at the end of the loop, but - there it is executed in parallel with other instructions. */ -L(11): movl (%eax), %ecx - movl $magic, %ebp - - movl $magic, %edi - addl %ecx, %ebp - - /* The main loop: it looks complex and indeed it is. I would - love to say `it was hard to write, so it should he hard to - read' but I will give some more hints. To fully understand - this code you should first take a look at the i486 version. - The basic algorithm is the same, but here the code organized - in a way which permits to use both pipelines all the time. - - I tried to make it a bit more understandable by indenting - the code according to stage in the algorithm. It goes as - follows: - check for 0 in 1st word - check for C in 1st word - check for 0 in 2nd word - check for C in 2nd word - check for 0 in 3rd word - check for C in 3rd word - check for 0 in 4th word - check for C in 4th word - - Please note that doing the test for NUL before the test for - C allows us to overlap the test for 0 in the next word with - the test for C. */ - -L(1): xorl %ecx, %ebp /* (word^magic) */ - addl %ecx, %edi /* add magic word */ - - leal 4(%eax), %eax /* increment pointer */ - jnc L(4) /* previous addl caused overflow? */ - - movl %ecx, %ebx /* duplicate original word */ - orl $magic, %ebp /* (word^magic)|magic */ - - addl $1, %ebp /* (word^magic)|magic == 0xffffffff? */ - jne L(4) /* yes => we found word with NUL */ - - movl $magic, %esi /* load magic value */ - xorl %edx, %ebx /* clear words which are C */ - - movl (%eax), %ecx - addl %ebx, %esi /* (word+magic) */ - - movl $magic, %edi - jnc L(5) /* previous addl caused overflow? */ - - movl %edi, %ebp - xorl %ebx, %esi /* (word+magic)^word */ - - addl %ecx, %ebp - orl $magic, %esi /* ((word+magic)^word)|magic */ - - addl $1, %esi /* ((word+magic)^word)|magic==0xf..f?*/ - jne L(5) /* yes => we found word with C */ - - xorl %ecx, %ebp - addl %ecx, %edi - - leal 4(%eax), %eax - jnc L(4) - - movl %ecx, %ebx - orl $magic, %ebp - - addl $1, %ebp - jne L(4) - - movl $magic, %esi - xorl %edx, %ebx - - movl (%eax), %ecx - addl %ebx, %esi - - movl $magic, %edi - jnc L(5) - - movl %edi, %ebp - xorl %ebx, %esi - - addl %ecx, %ebp - orl $magic, %esi - - addl $1, %esi - jne L(5) - - xorl %ecx, %ebp - addl %ecx, %edi - - leal 4(%eax), %eax - jnc L(4) - - movl %ecx, %ebx - orl $magic, %ebp - - addl $1, %ebp - jne L(4) - - movl $magic, %esi - xorl %edx, %ebx - - movl (%eax), %ecx - addl %ebx, %esi - - movl $magic, %edi - jnc L(5) - - movl %edi, %ebp - xorl %ebx, %esi - - addl %ecx, %ebp - orl $magic, %esi - - addl $1, %esi - jne L(5) - - xorl %ecx, %ebp - addl %ecx, %edi - - leal 4(%eax), %eax - jnc L(4) - - movl %ecx, %ebx - orl $magic, %ebp - - addl $1, %ebp - jne L(4) - - movl $magic, %esi - xorl %edx, %ebx - - movl (%eax), %ecx - addl %ebx, %esi - - movl $magic, %edi - jnc L(5) - - movl %edi, %ebp - xorl %ebx, %esi - - addl %ecx, %ebp - orl $magic, %esi - - addl $1, %esi - - je L(1) - - /* We know there is no NUL byte but a C byte in the word. - %ebx contains NUL in this particular byte. */ -L(5): subl $4, %eax /* adjust pointer */ - testb %bl, %bl /* first byte == C? */ - - jz L(out) /* yes => return pointer */ - - incl %eax /* increment pointer */ - testb %bh, %bh /* second byte == C? */ - - jz L(out) /* yes => return pointer */ - - shrl $16, %ebx /* make upper bytes accessible */ - incl %eax /* increment pointer */ - - cmp $0, %bl /* third byte == C */ - je L(out) /* yes => return pointer */ - - incl %eax /* increment pointer */ - -L(out): popl %ebp /* restore saved registers */ - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret - - cfi_adjust_cfa_offset (16) - cfi_rel_offset (edi, 12) - cfi_rel_offset (esi, 8) - cfi_rel_offset (ebx, 4) - cfi_rel_offset (ebp, 0) - /* We know there is a NUL byte in the word. But we have to test - whether there is an C byte before it in the word. */ -L(4): subl $4, %eax /* adjust pointer */ - cmpb %dl, %cl /* first byte == C? */ - - je L(out) /* yes => return pointer */ - - cmpb $0, %cl /* first byte == NUL? */ - je L(3) /* yes => return NULL */ - - incl %eax /* increment pointer */ - - cmpb %dl, %ch /* second byte == C? */ - je L(out) /* yes => return pointer */ - - cmpb $0, %ch /* second byte == NUL? */ - je L(3) /* yes => return NULL */ - - shrl $16, %ecx /* make upper bytes accessible */ - incl %eax /* increment pointer */ - - cmpb %dl, %cl /* third byte == C? */ - je L(out) /* yes => return pointer */ - - cmpb $0, %cl /* third byte == NUL? */ - je L(3) /* yes => return NULL */ - - incl %eax /* increment pointer */ - - /* The test four the fourth byte is necessary! */ - cmpb %dl, %ch /* fourth byte == C? */ - je L(out) /* yes => return pointer */ - -L(3): xorl %eax, %eax - jmp L(out) -END (strchr) - -#undef index -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/i386/i586/strcpy.S b/sysdeps/i386/i586/strcpy.S deleted file mode 100644 index a444604f4f..0000000000 --- a/sysdeps/i386/i586/strcpy.S +++ /dev/null @@ -1,169 +0,0 @@ -/* strcpy/stpcpy implementation for i586. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+12 /* space for 3 saved regs */ -#define RTN PARMS -#define DEST RTN -#define SRC DEST+4 - -#ifndef USE_AS_STPCPY -# define STRCPY strcpy -#endif - -#define magic 0xfefefeff - - .text -ENTRY (STRCPY) - - pushl %edi - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - pushl %ebx - cfi_adjust_cfa_offset (4) - - movl DEST(%esp), %edi - cfi_rel_offset (edi, 8) - movl SRC(%esp), %esi - cfi_rel_offset (esi, 4) - - xorl %eax, %eax - leal -1(%esi), %ecx - - movl $magic, %ebx - cfi_rel_offset (ebx, 0) - andl $3, %ecx - -#ifdef PIC - call 2f - cfi_adjust_cfa_offset (4) -2: popl %edx - cfi_adjust_cfa_offset (-4) - /* 0xb is the distance between 2: and 1: but we avoid writing - 1f-2b because the assembler generates worse code. */ - leal 0xb(%edx,%ecx,8), %ecx -#else - leal 1f(,%ecx,8), %ecx -#endif - - jmp *%ecx - - .align 8 -1: - orb (%esi), %al - jz L(end) - stosb - xorl %eax, %eax - incl %esi - - orb (%esi), %al - jz L(end) - stosb - xorl %eax, %eax - incl %esi - - orb (%esi), %al - jz L(end) - stosb - xorl %eax, %eax - incl %esi - -L(1): movl (%esi), %ecx - leal 4(%esi),%esi - - subl %ecx, %eax - addl %ebx, %ecx - - decl %eax - jnc L(3) - - movl %ecx, %edx - xorl %ecx, %eax - - subl %ebx, %edx - andl $~magic, %eax - - jne L(4) - - movl %edx, (%edi) - leal 4(%edi),%edi - - jmp L(1) - -L(3): movl %ecx, %edx - - subl %ebx, %edx - -L(4): movb %dl, (%edi) - testb %dl, %dl - - movl %edx, %eax - jz L(end2) - - shrl $16, %eax - movb %dh, 1(%edi) -#ifdef USE_AS_STPCPY - addl $1, %edi -#endif - - cmpb $0, %dh - jz L(end2) - -#ifdef USE_AS_STPCPY - movb %al, 1(%edi) - addl $1, %edi - - cmpb $0, %al - jz L(end2) - - addl $1, %edi -#else - movb %al, 2(%edi) - testb %al, %al - - leal 3(%edi), %edi - jz L(end2) -#endif - -L(end): movb %ah, (%edi) - -L(end2): -#ifdef USE_AS_STPCPY - movl %edi, %eax -#else - movl DEST(%esp), %eax -#endif - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (STRCPY) -#ifndef USE_AS_STPCPY -libc_hidden_builtin_def (strcpy) -#endif diff --git a/sysdeps/i386/i586/strlen.S b/sysdeps/i386/i586/strlen.S deleted file mode 100644 index cfea2e020f..0000000000 --- a/sysdeps/i386/i586/strlen.S +++ /dev/null @@ -1,182 +0,0 @@ -/* strlen -- Compute length of NUL terminated string. - Highly optimized version for ix86, x>=5. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper, . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -/* This version is especially optimized for the i586 (and following?) - processors. This is mainly done by using the two pipelines. The - version optimized for i486 is weak in this aspect because to get - as much parallelism we have to execute some *more* instructions. - - The code below is structured to reflect the pairing of the instructions - as *I think* it is. I have no processor data book to verify this. - If you find something you think is incorrect let me know. */ - - -/* The magic value which is used throughout in the whole code. */ -#define magic 0xfefefeff - -#define PARMS 4 /* no space for saved regs */ -#define STR PARMS - - .text -ENTRY (strlen) - - movl STR(%esp), %eax - movl $3, %edx /* load mask (= 3) */ - - andl %eax, %edx /* separate last two bits of address */ - - jz L(1) /* aligned => start loop */ - jp L(0) /* exactly two bits set */ - - cmpb %dh, (%eax) /* is byte NUL? */ - je L(2) /* yes => return */ - - incl %eax /* increment pointer */ - cmpb %dh, (%eax) /* is byte NUL? */ - - je L(2) /* yes => return */ - - incl %eax /* increment pointer */ - xorl $2, %edx - - jz L(1) - -L(0): cmpb %dh, (%eax) /* is byte NUL? */ - je L(2) /* yes => return */ - - incl %eax /* increment pointer */ - xorl %edx, %edx /* We need %edx == 0 for later */ - - /* We exit the loop if adding MAGIC_BITS to LONGWORD fails to - change any of the hole bits of LONGWORD. - - 1) Is this safe? Will it catch all the zero bytes? - Suppose there is a byte with all zeros. Any carry bits - propagating from its left will fall into the hole at its - least significant bit and stop. Since there will be no - carry from its most significant bit, the LSB of the - byte to the left will be unchanged, and the zero will be - detected. - - 2) Is this worthwhile? Will it ignore everything except - zero bytes? Suppose every byte of LONGWORD has a bit set - somewhere. There will be a carry into bit 8. If bit 8 - is set, this will carry into bit 16. If bit 8 is clear, - one of bits 9-15 must be set, so there will be a carry - into bit 16. Similarly, there will be a carry into bit - 24. If one of bits 24-31 is set, there will be a carry - into bit 32 (=carry flag), so all of the hole bits will - be changed. - - Note: %edx == 0 in any case here. */ - -L(1): - movl (%eax), %ecx /* get word (= 4 bytes) in question */ - addl $4, %eax /* adjust pointer for *next* word */ - - subl %ecx, %edx /* first step to negate word */ - addl $magic, %ecx /* add magic word */ - - decl %edx /* complete negation of word */ - jnc L(3) /* previous addl caused overflow? */ - - xorl %ecx, %edx /* (word+magic)^word */ - - andl $~magic, %edx /* any of the carry flags set? */ - - jne L(3) /* yes => determine byte */ - - - movl (%eax), %ecx /* get word (= 4 bytes) in question */ - addl $4, %eax /* adjust pointer for *next* word */ - - subl %ecx, %edx /* first step to negate word */ - addl $magic, %ecx /* add magic word */ - - decl %edx /* complete negation of word */ - jnc L(3) /* previous addl caused overflow? */ - - xorl %ecx, %edx /* (word+magic)^word */ - - andl $~magic, %edx /* any of the carry flags set? */ - - jne L(3) /* yes => determine byte */ - - - movl (%eax), %ecx /* get word (= 4 bytes) in question */ - addl $4, %eax /* adjust pointer for *next* word */ - - subl %ecx, %edx /* first step to negate word */ - addl $magic, %ecx /* add magic word */ - - decl %edx /* complete negation of word */ - jnc L(3) /* previous addl caused overflow? */ - - xorl %ecx, %edx /* (word+magic)^word */ - - andl $~magic, %edx /* any of the carry flags set? */ - - jne L(3) /* yes => determine byte */ - - - movl (%eax), %ecx /* get word (= 4 bytes) in question */ - addl $4, %eax /* adjust pointer for *next* word */ - - subl %ecx, %edx /* first step to negate word */ - addl $magic, %ecx /* add magic word */ - - decl %edx /* complete negation of word */ - jnc L(3) /* previous addl caused overflow? */ - - xorl %ecx, %edx /* (word+magic)^word */ - - andl $~magic, %edx /* any of the carry flags set? */ - - je L(1) /* no => start loop again */ - - -L(3): subl $4, %eax /* correct too early pointer increment */ - subl $magic, %ecx - - cmpb $0, %cl /* lowest byte NUL? */ - jz L(2) /* yes => return */ - - inc %eax /* increment pointer */ - testb %ch, %ch /* second byte NUL? */ - - jz L(2) /* yes => return */ - - shrl $16, %ecx /* make upper bytes accessible */ - incl %eax /* increment pointer */ - - cmpb $0, %cl /* is third byte NUL? */ - jz L(2) /* yes => return */ - - incl %eax /* increment pointer */ - -L(2): subl STR(%esp), %eax /* now compute the length as difference - between start and terminating NUL - character */ - ret -END (strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/i386/i586/sub_n.S b/sysdeps/i386/i586/sub_n.S deleted file mode 100644 index 21b5a2742c..0000000000 --- a/sysdeps/i386/i586/sub_n.S +++ /dev/null @@ -1,143 +0,0 @@ -/* Pentium __mpn_sub_n -- Subtract two limb vectors of the same length > 0 - and store difference in a third limb vector. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define PARMS 4+16 /* space for 4 saved regs */ -#define RES PARMS -#define S1 RES+4 -#define S2 S1+4 -#define SIZE S2+4 - - .text -ENTRY (__mpn_sub_n) - - pushl %edi - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - pushl %ebp - cfi_adjust_cfa_offset (4) - pushl %ebx - cfi_adjust_cfa_offset (4) - - movl RES(%esp),%edi - cfi_rel_offset (edi, 12) - movl S1(%esp),%esi - cfi_rel_offset (esi, 8) - movl S2(%esp),%ebx - cfi_rel_offset (ebx, 0) - movl SIZE(%esp),%ecx - movl (%ebx),%ebp - cfi_rel_offset (ebp, 4) - - decl %ecx - movl %ecx,%edx - shrl $3,%ecx - andl $7,%edx - testl %ecx,%ecx /* zero carry flag */ - jz L(end) - pushl %edx - cfi_adjust_cfa_offset (4) - - ALIGN (3) -L(oop): movl 28(%edi),%eax /* fetch destination cache line */ - leal 32(%edi),%edi - -L(1): movl (%esi),%eax - movl 4(%esi),%edx - sbbl %ebp,%eax - movl 4(%ebx),%ebp - sbbl %ebp,%edx - movl 8(%ebx),%ebp - movl %eax,-32(%edi) - movl %edx,-28(%edi) - -L(2): movl 8(%esi),%eax - movl 12(%esi),%edx - sbbl %ebp,%eax - movl 12(%ebx),%ebp - sbbl %ebp,%edx - movl 16(%ebx),%ebp - movl %eax,-24(%edi) - movl %edx,-20(%edi) - -L(3): movl 16(%esi),%eax - movl 20(%esi),%edx - sbbl %ebp,%eax - movl 20(%ebx),%ebp - sbbl %ebp,%edx - movl 24(%ebx),%ebp - movl %eax,-16(%edi) - movl %edx,-12(%edi) - -L(4): movl 24(%esi),%eax - movl 28(%esi),%edx - sbbl %ebp,%eax - movl 28(%ebx),%ebp - sbbl %ebp,%edx - movl 32(%ebx),%ebp - movl %eax,-8(%edi) - movl %edx,-4(%edi) - - leal 32(%esi),%esi - leal 32(%ebx),%ebx - decl %ecx - jnz L(oop) - - popl %edx - cfi_adjust_cfa_offset (-4) -L(end): - decl %edx /* test %edx w/o clobbering carry */ - js L(end2) - incl %edx -L(oop2): - leal 4(%edi),%edi - movl (%esi),%eax - sbbl %ebp,%eax - movl 4(%ebx),%ebp - movl %eax,-4(%edi) - leal 4(%esi),%esi - leal 4(%ebx),%ebx - decl %edx - jnz L(oop2) -L(end2): - movl (%esi),%eax - sbbl %ebp,%eax - movl %eax,(%edi) - - sbbl %eax,%eax - negl %eax - - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (__mpn_sub_n) diff --git a/sysdeps/i386/i586/submul_1.S b/sysdeps/i386/i586/submul_1.S deleted file mode 100644 index 5e5e121ca2..0000000000 --- a/sysdeps/i386/i586/submul_1.S +++ /dev/null @@ -1,94 +0,0 @@ -/* Pentium __mpn_submul_1 -- Multiply a limb vector with a limb and subtract - the result from a second limb vector. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define PARMS 4+16 /* space for 4 saved regs */ -#define RES PARMS -#define S1 RES+4 -#define SIZE S1+4 -#define S2LIMB SIZE+4 - -#define res_ptr edi -#define s1_ptr esi -#define size ecx -#define s2_limb ebx - - .text -ENTRY (__mpn_submul_1) - - pushl %res_ptr - cfi_adjust_cfa_offset (4) - pushl %s1_ptr - cfi_adjust_cfa_offset (4) - pushl %ebp - cfi_adjust_cfa_offset (4) - pushl %s2_limb - cfi_adjust_cfa_offset (4) - - movl RES(%esp), %res_ptr - cfi_rel_offset (res_ptr, 12) - movl S1(%esp), %s1_ptr - cfi_rel_offset (s1_ptr, 8) - movl SIZE(%esp), %size - movl S2LIMB(%esp), %s2_limb - cfi_rel_offset (s2_limb, 0) - leal (%res_ptr,%size,4), %res_ptr - leal (%s1_ptr,%size,4), %s1_ptr - negl %size - xorl %ebp, %ebp - cfi_rel_offset (ebp, 4) - ALIGN (3) - -L(oop): adcl $0, %ebp - movl (%s1_ptr,%size,4), %eax - - mull %s2_limb - - addl %ebp, %eax - movl (%res_ptr,%size,4), %ebp - - adcl $0, %edx - subl %eax, %ebp - - movl %ebp, (%res_ptr,%size,4) - incl %size - - movl %edx, %ebp - jnz L(oop) - - adcl $0, %ebp - movl %ebp, %eax - popl %s2_limb - cfi_adjust_cfa_offset (-4) - cfi_restore (s2_limb) - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %s1_ptr - cfi_adjust_cfa_offset (-4) - cfi_restore (s1_ptr) - popl %res_ptr - cfi_adjust_cfa_offset (-4) - cfi_restore (res_ptr) - - ret -#undef size -END (__mpn_submul_1) diff --git a/sysdeps/i386/i686/Makefile b/sysdeps/i386/i686/Makefile deleted file mode 100644 index 311042787b..0000000000 --- a/sysdeps/i386/i686/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# So that we can test __m128's alignment -stack-align-test-flags += -msse - -CFLAGS-.o += -Wa,-mtune=i686 -CFLAGS-.os += -Wa,-mtune=i686 -CFLAGS-.op += -Wa,-mtune=i686 -CFLAGS-.oS += -Wa,-mtune=i686 - -ASFLAGS-.o += -Wa,-mtune=i686 -ASFLAGS-.os += -Wa,-mtune=i686 -ASFLAGS-.op += -Wa,-mtune=i686 -ASFLAGS-.oS += -Wa,-mtune=i686 diff --git a/sysdeps/i386/i686/add_n.S b/sysdeps/i386/i686/add_n.S deleted file mode 100644 index 4afa648ceb..0000000000 --- a/sysdeps/i386/i686/add_n.S +++ /dev/null @@ -1,110 +0,0 @@ -/* Add two limb vectors of the same length > 0 and store sum in a third - limb vector. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define PARMS 4+8 /* space for 2 saved regs */ -#define RES PARMS -#define S1 RES+4 -#define S2 S1+4 -#define SIZE S2+4 - - .text -#ifdef PIC -L(1): addl (%esp), %eax - ret -#endif -ENTRY (__mpn_add_n) - - pushl %edi - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - - movl RES(%esp),%edi - cfi_rel_offset (edi, 4) - movl S1(%esp),%esi - cfi_rel_offset (esi, 0) - movl S2(%esp),%edx - movl SIZE(%esp),%ecx - movl %ecx,%eax - shrl $3,%ecx /* compute count for unrolled loop */ - negl %eax - andl $7,%eax /* get index where to start loop */ - jz L(oop) /* necessary special case for 0 */ - incl %ecx /* adjust loop count */ - shll $2,%eax /* adjustment for pointers... */ - subl %eax,%edi /* ... since they are offset ... */ - subl %eax,%esi /* ... by a constant when we ... */ - subl %eax,%edx /* ... enter the loop */ - shrl $2,%eax /* restore previous value */ -#ifdef PIC -/* Calculate start address in loop for PIC. */ - leal (L(oop)-L(0)-3)(%eax,%eax,8),%eax - call L(1) -L(0): -#else -/* Calculate start address in loop for non-PIC. */ - leal (L(oop) - 3)(%eax,%eax,8),%eax -#endif - jmp *%eax /* jump into loop */ - ALIGN (3) -L(oop): movl (%esi),%eax - adcl (%edx),%eax - movl %eax,(%edi) - movl 4(%esi),%eax - adcl 4(%edx),%eax - movl %eax,4(%edi) - movl 8(%esi),%eax - adcl 8(%edx),%eax - movl %eax,8(%edi) - movl 12(%esi),%eax - adcl 12(%edx),%eax - movl %eax,12(%edi) - movl 16(%esi),%eax - adcl 16(%edx),%eax - movl %eax,16(%edi) - movl 20(%esi),%eax - adcl 20(%edx),%eax - movl %eax,20(%edi) - movl 24(%esi),%eax - adcl 24(%edx),%eax - movl %eax,24(%edi) - movl 28(%esi),%eax - adcl 28(%edx),%eax - movl %eax,28(%edi) - leal 32(%edi),%edi - leal 32(%esi),%esi - leal 32(%edx),%edx - decl %ecx - jnz L(oop) - - sbbl %eax,%eax - negl %eax - - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (__mpn_add_n) diff --git a/sysdeps/i386/i686/bcopy.S b/sysdeps/i386/i686/bcopy.S deleted file mode 100644 index 15ef9419a4..0000000000 --- a/sysdeps/i386/i686/bcopy.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_BCOPY -#define memmove bcopy -#include diff --git a/sysdeps/i386/i686/bzero.S b/sysdeps/i386/i686/bzero.S deleted file mode 100644 index c7898f18e0..0000000000 --- a/sysdeps/i386/i686/bzero.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_BZERO -#define memset __bzero -#include -weak_alias (__bzero, bzero) diff --git a/sysdeps/i386/i686/dl-hash.h b/sysdeps/i386/i686/dl-hash.h deleted file mode 100644 index ceda785b32..0000000000 --- a/sysdeps/i386/i686/dl-hash.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Compute hash alue for given string according to ELF standard. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_HASH_H -#define _DL_HASH_H 1 - - -/* This is the hashing function specified by the ELF ABI. It is highly - optimized for the PII processors. Though it will run on i586 it - would be much slower than the generic C implementation. So don't - use it. */ -static unsigned int -__attribute__ ((unused)) -_dl_elf_hash (const char *name) -{ - unsigned int result; - unsigned int temp0; - unsigned int temp1; - - __asm__ __volatile__ - ("movzbl (%1),%2\n\t" - "testl %2, %2\n\t" - "jz 1f\n\t" - "movl %2, %0\n\t" - "movzbl 1(%1), %2\n\t" - "jecxz 1f\n\t" - "shll $4, %0\n\t" - "addl %2, %0\n\t" - "movzbl 2(%1), %2\n\t" - "jecxz 1f\n\t" - "shll $4, %0\n\t" - "addl %2, %0\n\t" - "movzbl 3(%1), %2\n\t" - "jecxz 1f\n\t" - "shll $4, %0\n\t" - "addl %2, %0\n\t" - "movzbl 4(%1), %2\n\t" - "jecxz 1f\n\t" - "shll $4, %0\n\t" - "addl $5, %1\n\t" - "addl %2, %0\n\t" - "movzbl (%1), %2\n\t" - "jecxz 1f\n" - "2:\t" - "shll $4, %0\n\t" - "movl $0xf0000000, %3\n\t" - "incl %1\n\t" - "addl %2, %0\n\t" - "andl %0, %3\n\t" - "andl $0x0fffffff, %0\n\t" - "shrl $24, %3\n\t" - "movzbl (%1), %2\n\t" - "xorl %3, %0\n\t" - "testl %2, %2\n\t" - "jnz 2b\n" - "1:\t" - : "=&r" (result), "=r" (name), "=&c" (temp0), "=&r" (temp1) - : "0" (0), "1" ((const unsigned char *) name)); - - return result; -} - -#endif /* dl-hash.h */ diff --git a/sysdeps/i386/i686/ffs.c b/sysdeps/i386/i686/ffs.c deleted file mode 100644 index cbe36ff873..0000000000 --- a/sysdeps/i386/i686/ffs.c +++ /dev/null @@ -1,48 +0,0 @@ -/* ffs -- find first set bit in a word, counted from least significant end. - For Intel 80x86, x>=6. - This file is part of the GNU C Library. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - Contributed by Ulrich Drepper . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define ffsl __something_else -#include - -#undef ffs - -#ifdef __GNUC__ - -int -__ffs (int x) -{ - int cnt; - int tmp; - - asm ("bsfl %2,%0\n" /* Count low bits in X and store in %1. */ - "cmovel %1,%0\n" /* If number was zero, use -1 as result. */ - : "=&r" (cnt), "=r" (tmp) : "rm" (x), "1" (-1)); - - return cnt + 1; -} -weak_alias (__ffs, ffs) -libc_hidden_def (__ffs) -libc_hidden_builtin_def (ffs) -#undef ffsl -weak_alias (__ffs, ffsl) - -#else -#include -#endif diff --git a/sysdeps/i386/i686/fpu/e_log.S b/sysdeps/i386/i686/fpu/e_log.S deleted file mode 100644 index 73060b088c..0000000000 --- a/sysdeps/i386/i686/fpu/e_log.S +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for i686 instructions. - */ - -#include - - - .text -ENTRY(__ieee754_log) - fldln2 // log(2) - fldl 4(%esp) // x : log(2) - fucomi %st - jp 3f - fyl2x // log(x) - ret - -3: fstp %st(1) - ret -END (__ieee754_log) - -ENTRY(__log_finite) - fldln2 // log(2) - fldl 4(%esp) // x : log(2) - fyl2x // log(x) - ret -END(__log_finite) diff --git a/sysdeps/i386/i686/fpu/e_logf.S b/sysdeps/i386/i686/fpu/e_logf.S deleted file mode 100644 index 6fd39d50d3..0000000000 --- a/sysdeps/i386/i686/fpu/e_logf.S +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * Adapted for float by Ulrich Drepper . - * - * Adapted for i686 instructions. - */ - -#include - - - .text -ENTRY(__ieee754_logf) - fldln2 // log(2) - flds 4(%esp) // x : log(2) - fucomi %st - jp 3f - fyl2x // log(x) - ret - -3: fstp %st(1) - ret -END (__ieee754_logf) - -ENTRY(__logf_finite) - fldln2 // log(2) - flds 4(%esp) // x : log(2) - fyl2x // log(x) - ret -END(__logf_finite) diff --git a/sysdeps/i386/i686/fpu/e_logl.S b/sysdeps/i386/i686/fpu/e_logl.S deleted file mode 100644 index 7e3bc8d817..0000000000 --- a/sysdeps/i386/i686/fpu/e_logl.S +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - * Changed to use fyl2xp1 for values near 1, . - * Adapted for i686 instructions. - */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - - -#ifdef PIC -# define MO(op) op##@GOTOFF(%edx) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_logl) - fldln2 // log(2) - fldt 4(%esp) // x : log(2) - fucomi %st - jp 3f -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fld %st // x : x : log(2) - movzwl 4+8(%esp), %eax - cmpl $0xc000, %eax - jae 5f // x <= -2, avoid overflow from -LDBL_MAX - 1. - fsubl MO(one) // x-1 : x : log(2) -5: fld %st // x-1 : x-1 : x : log(2) - fabs // |x-1| : x-1 : x : log(2) - fld MO(limit) // 0.29 : |x-1| : x-1 : x : log(2) - fcomip %st(1) // |x-1| : x-1 : x : log(2) - fstp %st(0) // x-1 : x : log(2) - jc 2f - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 4f - fabs // log(1) is +0 in all rounding modes. -4: fstp %st(1) // x-1 : log(2) - fyl2xp1 // log(x) - ret - -2: fstp %st(0) // x : log(2) - fyl2x // log(x) - ret - -3: fstp %st(1) - fadd %st(0) - ret -END (__ieee754_logl) - -ENTRY(__logl_finite) - fldln2 // log(2) - fldt 4(%esp) // x : log(2) -#ifdef PIC - LOAD_PIC_REG (dx) -#endif - fld %st // x : x : log(2) - fsubl MO(one) // x-1 : x : log(2) - fld %st // x-1 : x-1 : x : log(2) - fabs // |x-1| : x-1 : x : log(2) - fld MO(limit) // 0.29 : |x-1| : x-1 : x : log(2) - fcomip %st(1) // |x-1| : x-1 : x : log(2) - fstp %st(0) // x-1 : x : log(2) - jc 2b - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 6f - fabs // log(1) is +0 in all rounding modes. -6: fstp %st(1) // x-1 : log(2) - fyl2xp1 // log(x) - ret -END(__logl_finite) diff --git a/sysdeps/i386/i686/fpu/multiarch/Makefile b/sysdeps/i386/i686/fpu/multiarch/Makefile deleted file mode 100644 index 7d9089232f..0000000000 --- a/sysdeps/i386/i686/fpu/multiarch/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -ifeq ($(subdir),math) -libm-sysdep_routines += e_expf-sse2 e_expf-ia32 s_sinf-sse2 s_cosf-sse2 \ - s_sincosf-sse2 -endif diff --git a/sysdeps/i386/i686/fpu/multiarch/e_expf-ia32.S b/sysdeps/i386/i686/fpu/multiarch/e_expf-ia32.S deleted file mode 100644 index b486b4d1ca..0000000000 --- a/sysdeps/i386/i686/fpu/multiarch/e_expf-ia32.S +++ /dev/null @@ -1,22 +0,0 @@ -/* - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __ieee754_expf __ieee754_expf_ia32 -#define __expf_finite __expf_finite_ia32 - -#include diff --git a/sysdeps/i386/i686/fpu/multiarch/e_expf-sse2.S b/sysdeps/i386/i686/fpu/multiarch/e_expf-sse2.S deleted file mode 100644 index e6bb6fa289..0000000000 --- a/sysdeps/i386/i686/fpu/multiarch/e_expf-sse2.S +++ /dev/null @@ -1,325 +0,0 @@ -/* SSE2 version of __ieee754_expf and __expf_finite - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include - -/* Short algorithm description: - * - * Let K = 64 (table size). - * e^x = 2^(x/log(2)) = 2^n * T[j] * (1 + P(y)) - * where - * x = m*log(2)/K + y, y in [0.0..log(2)/K] - * m = n*K + j, m,n,j - signed integer, j in [0..K-1] - * values of 2^(j/K) are tabulated as T[j]. - * - * P(y) is a minimax polynomial approximation of expf(x)-1 - * on small interval [0.0..log(2)/K]. - * - * P(y) = P3*y*y*y*y + P2*y*y*y + P1*y*y + P0*y, calculated as - * z = y*y; P(y) = (P3*z + P1)*z + (P2*z + P0)*y - * - * Special cases: - * __ieee754_expf_sse2(NaN) = NaN - * __ieee754_expf_sse2(+INF) = +INF - * __ieee754_expf_sse2(-INF) = 0 - * __ieee754_expf_sse2(x) = 1 for subnormals - * for finite argument, only __ieee754_expf_sse2(0)=1 is exact - * __ieee754_expf_sse2(x) overflows if x>700 - * __ieee754_expf_sse2(x) underflows if x<-700 - * - * Note: - * For |x|<700, __ieee754_expf_sse2 computes result in double precision, - * with accuracy a bit more than needed for expf, and does not round it - * to single precision. - */ - - -#ifdef PIC -# define MO1(symbol) L(symbol)##@GOTOFF(%edx) -# define MO2(symbol,reg2,_scale) L(symbol)##@GOTOFF(%edx,reg2,_scale) -#else -# define MO1(symbol) L(symbol) -# define MO2(symbol,reg2,_scale) L(symbol)(,reg2,_scale) -#endif - - .text -ENTRY(__ieee754_expf_sse2) - /* Input: single precision x on stack at address 4(%esp) */ - -#ifdef PIC - LOAD_PIC_REG(dx) -#endif - - cvtss2sd 4(%esp), %xmm1 /* Convert x to double precision */ - mov 4(%esp), %ecx /* Copy x */ - movsd MO1(DP_KLN2), %xmm2 /* DP K/log(2) */ - movsd MO1(DP_P2), %xmm3 /* DP P2 */ - movl %ecx, %eax /* x */ - mulsd %xmm1, %xmm2 /* DP x*K/log(2) */ - andl $0x7fffffff, %ecx /* |x| */ - cmpl $0x442f0000, %ecx /* |x|<700 ? */ - movsd MO1(DP_P3), %xmm4 /* DP P3 */ - addsd MO1(DP_RS), %xmm2 /* DP x*K/log(2)+RS */ - jae L(special_paths) - - /* Here if |x|<700 */ - cmpl $0x31800000, %ecx /* |x|<2^(-28) ? */ - jb L(small_arg) - - /* Main path: here if 2^(-28)<=|x|<700 */ - cvtsd2ss %xmm2, %xmm2 /* SP x*K/log(2)+RS */ - movd %xmm2, %eax /* bits of n*K+j with trash */ - subss MO1(SP_RS), %xmm2 /* SP t=round(x*K/log(2)) */ - movl %eax, %ecx /* n*K+j with trash */ - cvtss2sd %xmm2, %xmm2 /* DP t */ - andl $0x3f, %eax /* bits of j */ - mulsd MO1(DP_NLN2K), %xmm2 /* DP -t*log(2)/K */ - andl $0xffffffc0, %ecx /* bits of n */ -#ifdef __AVX__ - vaddsd %xmm1, %xmm2, %xmm0 /* DP y=x-t*log(2)/K */ - vmulsd %xmm0, %xmm0, %xmm2 /* DP z=y*y */ -#else - addsd %xmm1, %xmm2 /* DP y=x-t*log(2)/K */ - movaps %xmm2, %xmm0 /* DP y */ - mulsd %xmm2, %xmm2 /* DP z=y*y */ -#endif - mulsd %xmm2, %xmm4 /* DP P3*z */ - addl $0xffc0, %ecx /* bits of n + DP exponent bias */ - mulsd %xmm2, %xmm3 /* DP P2*z */ - shrl $2, %ecx /* High 2 bytes of DP 2^n */ - pxor %xmm1, %xmm1 /* clear %xmm1 */ - addsd MO1(DP_P1), %xmm4 /* DP P3*z+P1 */ - addsd MO1(DP_P0), %xmm3 /* DP P2*z+P0 */ - pinsrw $3, %ecx, %xmm1 /* DP 2^n */ - mulsd %xmm2, %xmm4 /* DP (P3*z+P1)*z */ - mulsd %xmm3, %xmm0 /* DP (P2*z+P0)*y */ - addsd %xmm4, %xmm0 /* DP P(y) */ - mulsd MO2(DP_T,%eax,8), %xmm0 /* DP P(y)*T[j] */ - addsd MO2(DP_T,%eax,8), %xmm0 /* DP T[j]*(P(y)+1) */ - mulsd %xmm1, %xmm0 /* DP result=2^n*(T[j]*(P(y)+1)) */ - cvtsd2ss %xmm0, %xmm1 - - lea -4(%esp), %esp /* Borrow 4 bytes of stack frame */ - movss %xmm1, 0(%esp) /* Move result from sse... */ - flds 0(%esp) /* ...to FPU. */ - lea 4(%esp), %esp /* Return back 4 bytes of stack frame */ - ret - - .p2align 4 -L(small_arg): - /* Here if 0<=|x|<2^(-28) */ - movss 4(%esp), %xmm0 /* load x */ - addss MO1(SP_ONE), %xmm0 /* 1.0 + x */ - /* Return 1.0 with inexact raised, except for x==0 */ - jmp L(epilogue) - - .p2align 4 -L(special_paths): - /* Here if x is NaN, or Inf, or finite |x|>=700 */ - movss 4(%esp), %xmm0 /* load x */ - - cmpl $0x7f800000, %ecx /* |x| is finite ? */ - jae L(arg_inf_or_nan) - - /* Here if finite |x|>=700 */ - testl $0x80000000, %eax /* sign of x nonzero ? */ - je L(res_overflow) - - /* Here if finite x<=-700 */ - movss MO1(SP_SMALL), %xmm0 /* load small value 2^(-100) */ - mulss %xmm0, %xmm0 /* Return underflowed result (zero or subnormal) */ - jmp L(epilogue) - - .p2align 4 -L(res_overflow): - /* Here if finite x>=700 */ - movss MO1(SP_LARGE), %xmm0 /* load large value 2^100 */ - mulss %xmm0, %xmm0 /* Return overflowed result (Inf or max normal) */ - jmp L(epilogue) - - .p2align 4 -L(arg_inf_or_nan): - /* Here if |x| is Inf or NAN */ - jne L(arg_nan) /* |x| is Inf ? */ - - /* Here if |x| is Inf */ - shrl $31, %eax /* Get sign bit of x */ - movss MO2(SP_INF_0,%eax,4), %xmm0/* return zero or Inf, depending on sign of x */ - jmp L(epilogue) - - .p2align 4 -L(arg_nan): - /* Here if |x| is NaN */ - addss %xmm0, %xmm0 /* Return x+x (raise invalid) */ - - .p2align 4 -L(epilogue): - lea -4(%esp), %esp /* Borrow 4 bytes of stack frame */ - movss %xmm0, 0(%esp) /* Move result from sse... */ - flds 0(%esp) /* ...to FPU. */ - lea 4(%esp), %esp /* Return back 4 bytes of stack frame */ - ret -END(__ieee754_expf_sse2) - - .section .rodata, "a" - .p2align 3 -L(DP_T): /* table of double precision values 2^(j/K) for j=[0..K-1] */ - .long 0x00000000, 0x3ff00000 - .long 0x3e778061, 0x3ff02c9a - .long 0xd3158574, 0x3ff059b0 - .long 0x18759bc8, 0x3ff08745 - .long 0x6cf9890f, 0x3ff0b558 - .long 0x32d3d1a2, 0x3ff0e3ec - .long 0xd0125b51, 0x3ff11301 - .long 0xaea92de0, 0x3ff1429a - .long 0x3c7d517b, 0x3ff172b8 - .long 0xeb6fcb75, 0x3ff1a35b - .long 0x3168b9aa, 0x3ff1d487 - .long 0x88628cd6, 0x3ff2063b - .long 0x6e756238, 0x3ff2387a - .long 0x65e27cdd, 0x3ff26b45 - .long 0xf51fdee1, 0x3ff29e9d - .long 0xa6e4030b, 0x3ff2d285 - .long 0x0a31b715, 0x3ff306fe - .long 0xb26416ff, 0x3ff33c08 - .long 0x373aa9cb, 0x3ff371a7 - .long 0x34e59ff7, 0x3ff3a7db - .long 0x4c123422, 0x3ff3dea6 - .long 0x21f72e2a, 0x3ff4160a - .long 0x6061892d, 0x3ff44e08 - .long 0xb5c13cd0, 0x3ff486a2 - .long 0xd5362a27, 0x3ff4bfda - .long 0x769d2ca7, 0x3ff4f9b2 - .long 0x569d4f82, 0x3ff5342b - .long 0x36b527da, 0x3ff56f47 - .long 0xdd485429, 0x3ff5ab07 - .long 0x15ad2148, 0x3ff5e76f - .long 0xb03a5585, 0x3ff6247e - .long 0x82552225, 0x3ff66238 - .long 0x667f3bcd, 0x3ff6a09e - .long 0x3c651a2f, 0x3ff6dfb2 - .long 0xe8ec5f74, 0x3ff71f75 - .long 0x564267c9, 0x3ff75feb - .long 0x73eb0187, 0x3ff7a114 - .long 0x36cf4e62, 0x3ff7e2f3 - .long 0x994cce13, 0x3ff82589 - .long 0x9b4492ed, 0x3ff868d9 - .long 0x422aa0db, 0x3ff8ace5 - .long 0x99157736, 0x3ff8f1ae - .long 0xb0cdc5e5, 0x3ff93737 - .long 0x9fde4e50, 0x3ff97d82 - .long 0x82a3f090, 0x3ff9c491 - .long 0x7b5de565, 0x3ffa0c66 - .long 0xb23e255d, 0x3ffa5503 - .long 0x5579fdbf, 0x3ffa9e6b - .long 0x995ad3ad, 0x3ffae89f - .long 0xb84f15fb, 0x3ffb33a2 - .long 0xf2fb5e47, 0x3ffb7f76 - .long 0x904bc1d2, 0x3ffbcc1e - .long 0xdd85529c, 0x3ffc199b - .long 0x2e57d14b, 0x3ffc67f1 - .long 0xdcef9069, 0x3ffcb720 - .long 0x4a07897c, 0x3ffd072d - .long 0xdcfba487, 0x3ffd5818 - .long 0x03db3285, 0x3ffda9e6 - .long 0x337b9b5f, 0x3ffdfc97 - .long 0xe78b3ff6, 0x3ffe502e - .long 0xa2a490da, 0x3ffea4af - .long 0xee615a27, 0x3ffefa1b - .long 0x5b6e4540, 0x3fff5076 - .long 0x819e90d8, 0x3fffa7c1 - .type L(DP_T), @object - ASM_SIZE_DIRECTIVE(L(DP_T)) - - .section .rodata.cst8,"aM",@progbits,8 - .p2align 3 -L(DP_KLN2): /* double precision K/log(2) */ - .long 0x652b82fe, 0x40571547 - .type L(DP_KLN2), @object - ASM_SIZE_DIRECTIVE(L(DP_KLN2)) - - .p2align 3 -L(DP_NLN2K): /* double precision -log(2)/K */ - .long 0xfefa39ef, 0xbf862e42 - .type L(DP_NLN2K), @object - ASM_SIZE_DIRECTIVE(L(DP_NLN2K)) - - .p2align 3 -L(DP_RS): /* double precision 2^23+2^22 */ - .long 0x00000000, 0x41680000 - .type L(DP_RS), @object - ASM_SIZE_DIRECTIVE(L(DP_RS)) - - .p2align 3 -L(DP_P3): /* double precision polynomial coefficient P3 */ - .long 0xeb78fa85, 0x3fa56420 - .type L(DP_P3), @object - ASM_SIZE_DIRECTIVE(L(DP_P3)) - - .p2align 3 -L(DP_P1): /* double precision polynomial coefficient P1 */ - .long 0x008d6118, 0x3fe00000 - .type L(DP_P1), @object - ASM_SIZE_DIRECTIVE(L(DP_P1)) - - .p2align 3 -L(DP_P2): /* double precision polynomial coefficient P2 */ - .long 0xda752d4f, 0x3fc55550 - .type L(DP_P2), @object - ASM_SIZE_DIRECTIVE(L(DP_P2)) - - .p2align 3 -L(DP_P0): /* double precision polynomial coefficient P0 */ - .long 0xffffe7c6, 0x3fefffff - .type L(DP_P0), @object - ASM_SIZE_DIRECTIVE(L(DP_P0)) - - .p2align 2 -L(SP_INF_0): - .long 0x7f800000 /* single precision Inf */ - .long 0 /* single precision zero */ - .type L(SP_INF_0), @object - ASM_SIZE_DIRECTIVE(L(SP_INF_0)) - - .section .rodata.cst4,"aM",@progbits,4 - .p2align 2 -L(SP_RS): /* single precision 2^23+2^22 */ - .long 0x4b400000 - .type L(SP_RS), @object - ASM_SIZE_DIRECTIVE(L(SP_RS)) - - .p2align 2 -L(SP_SMALL): /* single precision small value 2^(-100) */ - .long 0x0d800000 - .type L(SP_SMALL), @object - ASM_SIZE_DIRECTIVE(L(SP_SMALL)) - - .p2align 2 -L(SP_LARGE): /* single precision large value 2^100 */ - .long 0x71800000 - .type L(SP_LARGE), @object - ASM_SIZE_DIRECTIVE(L(SP_LARGE)) - - .p2align 2 -L(SP_ONE): /* single precision 1.0 */ - .long 0x3f800000 - .type L(SP_ONE), @object - ASM_SIZE_DIRECTIVE(L(SP_ONE)) - -strong_alias (__ieee754_expf_sse2, __expf_finite_sse2) diff --git a/sysdeps/i386/i686/fpu/multiarch/e_expf.c b/sysdeps/i386/i686/fpu/multiarch/e_expf.c deleted file mode 100644 index 388cf98a39..0000000000 --- a/sysdeps/i386/i686/fpu/multiarch/e_expf.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of expf - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -extern double __ieee754_expf_sse2 (double); -extern double __ieee754_expf_ia32 (double); - -double __ieee754_expf (double); -libm_ifunc (__ieee754_expf, - HAS_CPU_FEATURE (SSE2) - ? __ieee754_expf_sse2 - : __ieee754_expf_ia32); - -extern double __expf_finite_sse2 (double); -extern double __expf_finite_ia32 (double); - -double __expf_finite (double); -libm_ifunc (__expf_finite, - HAS_CPU_FEATURE (SSE2) - ? __expf_finite_sse2 - : __expf_finite_ia32); diff --git a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps b/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps deleted file mode 100644 index 04bc23b37b..0000000000 --- a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps +++ /dev/null @@ -1,2188 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_downward": -ildouble: 2 -ldouble: 2 - -Function: "acos_towardzero": -ildouble: 2 -ldouble: 2 - -Function: "acos_upward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "acosh": -double: 1 -idouble: 1 -ildouble: 4 -ldouble: 2 - -Function: "acosh_downward": -double: 1 -idouble: 1 -ildouble: 6 -ldouble: 4 - -Function: "acosh_towardzero": -double: 1 -idouble: 1 -ildouble: 6 -ldouble: 4 - -Function: "acosh_upward": -double: 1 -idouble: 1 -ildouble: 4 -ldouble: 3 - -Function: "asin": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_downward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "asin_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asinh": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "asinh_downward": -double: 1 -float: 1 -idouble: 1 -ildouble: 5 -ldouble: 5 - -Function: "asinh_towardzero": -double: 1 -float: 1 -idouble: 1 -ildouble: 4 -ldouble: 4 - -Function: "asinh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: "atan": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atanh": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "atanh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 4 - -Function: "atanh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 3 - -Function: "atanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: "cabs": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cacos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacos_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "cacos_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "cacos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_upward": -double: 7 -float: 7 -idouble: 7 -ifloat: 7 -ildouble: 7 -ldouble: 7 - -Function: Real part of "cacosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacosh_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "cacosh_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "carg": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "carg_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "carg_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "carg_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "casin_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "casin_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casin_upward": -double: 7 -float: 7 -idouble: 7 -ifloat: 7 -ildouble: 7 -ldouble: 7 - -Function: Real part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "casinh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "casinh_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casinh_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_upward": -double: 7 -float: 7 -idouble: 7 -ifloat: 7 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "casinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catan": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catan_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Real part of "catan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Real part of "catan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catanh": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "cbrt_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "cbrt_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "cbrt_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccos_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ccos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccos_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccosh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccosh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ccosh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccosh_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ccosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cexp_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "cexp_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog10": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog10_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "clog10_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "clog10_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "clog10_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "clog_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "clog_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos": -ildouble: 1 -ldouble: 1 - -Function: "cos_downward": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "cos_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "cos_upward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "cosh_downward": -double: 2 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 3 - -Function: "cosh_towardzero": -double: 2 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cosh_upward": -double: 4 -float: 2 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 3 - -Function: Real part of "cpow": -double: 2 -float: 5 -idouble: 2 -ifloat: 5 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cpow": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cpow_downward": -double: 5 -float: 8 -idouble: 5 -ifloat: 8 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "cpow_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_towardzero": -double: 5 -float: 8 -idouble: 5 -ifloat: 8 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "cpow_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cpow_upward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cpow_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csin_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csin_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csin_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csin_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csinh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csqrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "csqrt_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Real part of "csqrt_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Real part of "csqrt_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "csqrt_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ctan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctan_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctan_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctan_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctan_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ctanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctanh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctanh_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctanh_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctanh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erfc": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "erfc_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "erfc_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "erfc_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "exp": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp10": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp10_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp10_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp10_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp2": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_downward": -ildouble: 1 -ldouble: 1 - -Function: "exp2_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_upward": -ildouble: 1 -ldouble: 1 - -Function: "exp_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "expm1": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "expm1_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "expm1_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "gamma": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "gamma_downward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "gamma_towardzero": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "gamma_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "hypot": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "j0": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "j0_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "j0_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: "j0_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "j1": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "j1_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "j1_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "jn": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "jn_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "jn_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "jn_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "lgamma": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "lgamma_downward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "lgamma_towardzero": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "lgamma_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "log": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "log10": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "log10_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log10_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log10_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log1p": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "log1p_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "log1p_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "log1p_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "log2": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "log2_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "log2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log_downward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "log_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "log_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "pow": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "pow10": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "pow10_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow10_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow10_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow_downward": -double: 1 -idouble: 1 -ildouble: 4 -ldouble: 4 - -Function: "pow_towardzero": -double: 1 -idouble: 1 -ildouble: 4 -ldouble: 4 - -Function: "pow_upward": -double: 1 -idouble: 1 -ildouble: 4 -ldouble: 4 - -Function: "sin": -ildouble: 1 -ldouble: 1 - -Function: "sin_downward": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "sin_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "sin_upward": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "sincos": -ildouble: 1 -ldouble: 1 - -Function: "sincos_downward": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "sincos_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "sincos_upward": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "sinh": -double: 1 -ildouble: 2 -ldouble: 2 - -Function: "sinh_downward": -double: 2 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 5 - -Function: "sinh_towardzero": -double: 2 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 4 - -Function: "sinh_upward": -double: 4 -float: 2 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 5 - -Function: "tan": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "tan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "tan_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "tan_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "tanh": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "tanh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 7 -ldouble: 4 - -Function: "tanh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "tanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 4 - -Function: "tgamma": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_downward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_towardzero": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "y0": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "y0_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "y0_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "y0_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "y1": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "y1_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "y1_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 7 -ldouble: 7 - -Function: "yn": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "yn_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "yn_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -# end of automatic generation diff --git a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps-name b/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps-name deleted file mode 100644 index 193dd704b3..0000000000 --- a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -i686 diff --git a/sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S b/sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S deleted file mode 100644 index f37850d0b3..0000000000 --- a/sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S +++ /dev/null @@ -1,553 +0,0 @@ -/* Optimized with sse2 version of cosf - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define __need_Emath -#include - -/* Short algorithm description: - * - * 1) if |x| == 0: return 1.0-|x|. - * 2) if |x| < 2^-27: return 1.0-|x|. - * 3) if |x| < 2^-5 : return 1.0+x^2*DP_COS2_0+x^5*DP_COS2_1. - * 4) if |x| < Pi/4: return 1.0+x^2*(C0+x^2*(C1+x^2*(C2+x^2*(C3+x^2*C4)))). - * 5) if |x| < 9*Pi/4: - * 5.1) Range reduction: k=trunc(|x|/(Pi/4)), j=(k+1)&0x0e, n=k+3, - * t=|x|-j*Pi/4. - * 5.2) Reconstruction: - * s = (-1.0)^((n>>2)&1) - * if(n&2 != 0) { - * using cos(t) polynomial for |t|= 2^23, very large args: - * 7.1) Range reduction: k=trunc(|x|/(Pi/4)), j=(k+1)&0xfffffffe, n=k+3, - * t=|x|-j*Pi/4. - * 7.2) Reconstruction same as (5.2). - * 8) if x is Inf, return x-x, and set errno=EDOM. - * 9) if x is NaN, return x-x. - * - * Special cases: - * cos(+-0) = 1 not raising inexact, - * cos(subnormal) raises inexact, - * cos(min_normalized) raises inexact, - * cos(normalized) raises inexact, - * cos(Inf) = NaN, raises invalid, sets errno to EDOM, - * cos(NaN) = NaN. - */ - -#ifdef PIC -# define MO1(symbol) L(symbol)##@GOTOFF(%ebx) -# define MO2(symbol,reg2,_scale) L(symbol)##@GOTOFF(%ebx,reg2,_scale) -# define CFI_PUSH(REG) cfi_adjust_cfa_offset(4); cfi_rel_offset(REG,0) -# define CFI_POP(REG) cfi_adjust_cfa_offset(-4); cfi_restore(REG) -# define PUSH(REG) pushl REG; CFI_PUSH(REG) -# define POP(REG) popl REG; CFI_POP(REG) -# define ENTRANCE PUSH(%ebx); LOAD_PIC_REG(bx) -# define RETURN POP(%ebx); ret; CFI_PUSH(%ebx) -# define ARG_X 8(%esp) -#else -# define MO1(symbol) L(symbol) -# define MO2(symbol,reg2,_scale) L(symbol)(,reg2,_scale) -# define ENTRANCE -# define RETURN ret -# define ARG_X 4(%esp) -#endif - - .text -ENTRY(__cosf_sse2) - /* Input: single precision x on stack at address ARG_X */ - - ENTRANCE - movl ARG_X, %eax /* Bits of x */ - cvtss2sd ARG_X, %xmm0 /* DP x */ - andl $0x7fffffff, %eax /* |x| */ - - cmpl $0x3f490fdb, %eax /* |x|=Pi/4 */ - movd %eax, %xmm3 /* SP |x| */ - andpd MO1(DP_ABS_MASK),%xmm0 /* DP |x| */ - movss MO1(SP_INVPIO4), %xmm2 /* SP 1/(Pi/4) */ - - cmpl $0x40e231d6, %eax /* |x|<9*Pi/4? */ - jae L(large_args) - - /* Here if Pi/4<=|x|<9*Pi/4 */ - mulss %xmm3, %xmm2 /* SP |x|/(Pi/4) */ - cvttss2si %xmm2, %eax /* k, number of Pi/4 in x */ - addl $1, %eax /* k+1 */ - movl $0x0e, %edx - andl %eax, %edx /* j = (k+1)&0x0e */ - addl $2, %eax /* n */ - subsd MO2(PIO4J,%edx,8), %xmm0 /* t = |x| - j * Pi/4 */ - -L(reconstruction): - /* Input: %eax=n, %xmm0=t */ - testl $2, %eax /* n&2 != 0? */ - jz L(sin_poly) - -/*L(cos_poly):*/ - /* Here if cos(x) calculated using cos(t) polynomial for |t|>2)&1) - * result = s * (1.0+t^2*(C0+t^2*(C1+t^2*(C2+t^2*(C3+t^2*C4))))) - */ - shrl $2, %eax /* n>>2 */ - mulsd %xmm0, %xmm0 /* y=t^2 */ - andl $1, %eax /* (n>>2)&1 */ - movaps %xmm0, %xmm1 /* y */ - mulsd %xmm0, %xmm0 /* z=t^4 */ - - movsd MO1(DP_C4), %xmm4 /* C4 */ - mulsd %xmm0, %xmm4 /* z*C4 */ - movsd MO1(DP_C3), %xmm3 /* C3 */ - mulsd %xmm0, %xmm3 /* z*C3 */ - addsd MO1(DP_C2), %xmm4 /* C2+z*C4 */ - mulsd %xmm0, %xmm4 /* z*(C2+z*C4) */ - lea -8(%esp), %esp /* Borrow 4 bytes of stack frame */ - addsd MO1(DP_C1), %xmm3 /* C1+z*C3 */ - mulsd %xmm0, %xmm3 /* z*(C1+z*C3) */ - addsd MO1(DP_C0), %xmm4 /* C0+z*(C2+z*C4) */ - mulsd %xmm1, %xmm4 /* y*(C0+z*(C2+z*C4)) */ - - addsd %xmm4, %xmm3 /* y*(C0+y*(C1+y*(C2+y*(C3+y*C4)))) */ - /* 1.0+y*(C0+y*(C1+y*(C2+y*(C3+y*C4)))) */ - addsd MO1(DP_ONES), %xmm3 - - mulsd MO2(DP_ONES,%eax,8), %xmm3 /* DP result */ - movsd %xmm3, 0(%esp) /* Move result from sse... */ - fldl 0(%esp) /* ...to FPU. */ - /* Return back 4 bytes of stack frame */ - lea 8(%esp), %esp - RETURN - - .p2align 4 -L(sin_poly): - /* Here if cos(x) calculated using sin(t) polynomial for |t|>2)&1) - * result = s * t * (1.0+t^2*(S0+t^2*(S1+t^2*(S2+t^2*(S3+t^2*S4))))) - */ - - movaps %xmm0, %xmm4 /* t */ - shrl $2, %eax /* n>>2 */ - mulsd %xmm0, %xmm0 /* y=t^2 */ - andl $1, %eax /* (n>>2)&1 */ - movaps %xmm0, %xmm1 /* y */ - mulsd %xmm0, %xmm0 /* z=t^4 */ - - movsd MO1(DP_S4), %xmm2 /* S4 */ - mulsd %xmm0, %xmm2 /* z*S4 */ - movsd MO1(DP_S3), %xmm3 /* S3 */ - mulsd %xmm0, %xmm3 /* z*S3 */ - lea -8(%esp), %esp /* Borrow 4 bytes of stack frame */ - addsd MO1(DP_S2), %xmm2 /* S2+z*S4 */ - mulsd %xmm0, %xmm2 /* z*(S2+z*S4) */ - addsd MO1(DP_S1), %xmm3 /* S1+z*S3 */ - mulsd %xmm0, %xmm3 /* z*(S1+z*S3) */ - addsd MO1(DP_S0), %xmm2 /* S0+z*(S2+z*S4) */ - mulsd %xmm1, %xmm2 /* y*(S0+z*(S2+z*S4)) */ - /* t*s, where s = sign(x) * (-1.0)^((n>>2)&1) */ - mulsd MO2(DP_ONES,%eax,8), %xmm4 - addsd %xmm2, %xmm3 /* y*(S0+y*(S1+y*(S2+y*(S3+y*S4)))) */ - /* t*s*y*(S0+y*(S1+y*(S2+y*(S3+y*S4)))) */ - mulsd %xmm4, %xmm3 - /* t*s*(1.0+y*(S0+y*(S1+y*(S2+y*(S3+y*S4)))) */ - addsd %xmm4, %xmm3 - movsd %xmm3, 0(%esp) /* Move result from sse... */ - fldl 0(%esp) /* ...to FPU. */ - /* Return back 4 bytes of stack frame */ - lea 8(%esp), %esp - RETURN - - .p2align 4 -L(large_args): - /* Here if |x|>=9*Pi/4 */ - cmpl $0x7f800000, %eax /* x is Inf or NaN? */ - jae L(arg_inf_or_nan) - - /* Here if finite |x|>=9*Pi/4 */ - cmpl $0x4b000000, %eax /* |x|<2^23? */ - jae L(very_large_args) - - /* Here if 9*Pi/4<=|x|<2^23 */ - movsd MO1(DP_INVPIO4), %xmm1 /* 1/(Pi/4) */ - mulsd %xmm0, %xmm1 /* |x|/(Pi/4) */ - cvttsd2si %xmm1, %eax /* k=trunc(|x|/(Pi/4)) */ - addl $1, %eax /* k+1 */ - movl %eax, %edx - andl $0xfffffffe, %edx /* j=(k+1)&0xfffffffe */ - cvtsi2sdl %edx, %xmm4 /* DP j */ - movsd MO1(DP_PIO4HI), %xmm2 /* -PIO4HI = high part of -Pi/4 */ - mulsd %xmm4, %xmm2 /* -j*PIO4HI */ - movsd MO1(DP_PIO4LO), %xmm3 /* -PIO4LO = low part of -Pi/4 */ - addsd %xmm2, %xmm0 /* |x| - j*PIO4HI */ - addl $2, %eax /* n */ - mulsd %xmm3, %xmm4 /* j*PIO4LO */ - addsd %xmm4, %xmm0 /* t = |x| - j*PIO4HI - j*PIO4LO */ - jmp L(reconstruction) - - .p2align 4 -L(very_large_args): - /* Here if finite |x|>=2^23 */ - - /* bitpos = (ix>>23) - BIAS_32 + 59; */ - shrl $23, %eax /* eb = biased exponent of x */ - /* bitpos = eb - 0x7f + 59, where 0x7f is exponent bias */ - subl $68, %eax - movl $28, %ecx /* %cl=28 */ - movl %eax, %edx /* bitpos copy */ - - /* j = bitpos/28; */ - div %cl /* j in register %al=%ax/%cl */ - movapd %xmm0, %xmm3 /* |x| */ - /* clear unneeded remainder from %ah */ - andl $0xff, %eax - - imull $28, %eax, %ecx /* j*28 */ - movsd MO1(DP_HI_MASK), %xmm4 /* DP_HI_MASK */ - movapd %xmm0, %xmm5 /* |x| */ - mulsd -2*8+MO2(_FPI,%eax,8), %xmm3 /* tmp3 = FPI[j-2]*|x| */ - movapd %xmm0, %xmm1 /* |x| */ - mulsd -1*8+MO2(_FPI,%eax,8), %xmm5 /* tmp2 = FPI[j-1]*|x| */ - mulsd 0*8+MO2(_FPI,%eax,8), %xmm0 /* tmp0 = FPI[j]*|x| */ - addl $19, %ecx /* j*28+19 */ - mulsd 1*8+MO2(_FPI,%eax,8), %xmm1 /* tmp1 = FPI[j+1]*|x| */ - cmpl %ecx, %edx /* bitpos>=j*28+19? */ - jl L(very_large_skip1) - - /* Here if bitpos>=j*28+19 */ - andpd %xmm3, %xmm4 /* HI(tmp3) */ - subsd %xmm4, %xmm3 /* tmp3 = tmp3 - HI(tmp3) */ -L(very_large_skip1): - - movsd MO1(DP_2POW52), %xmm6 - movapd %xmm5, %xmm2 /* tmp2 copy */ - addsd %xmm3, %xmm5 /* tmp5 = tmp3 + tmp2 */ - movl $1, %edx - addsd %xmm5, %xmm6 /* tmp6 = tmp5 + 2^52 */ - movsd 8+MO1(DP_2POW52), %xmm4 - movd %xmm6, %eax /* k = I64_LO(tmp6); */ - addsd %xmm6, %xmm4 /* tmp4 = tmp6 - 2^52 */ - comisd %xmm5, %xmm4 /* tmp4 > tmp5? */ - jbe L(very_large_skip2) - - /* Here if tmp4 > tmp5 */ - subl $1, %eax /* k-- */ - addsd 8+MO1(DP_ONES), %xmm4 /* tmp4 -= 1.0 */ -L(very_large_skip2): - - andl %eax, %edx /* k&1 */ - subsd %xmm4, %xmm3 /* tmp3 -= tmp4 */ - addsd MO2(DP_ZERONE,%edx,8), %xmm3 /* t = DP_ZERONE[k&1] + tmp3 */ - addsd %xmm2, %xmm3 /* t += tmp2 */ - addsd %xmm3, %xmm0 /* t += tmp0 */ - addl $3, %eax /* n=k+3 */ - addsd %xmm1, %xmm0 /* t += tmp1 */ - mulsd MO1(DP_PIO4), %xmm0 /* t *= PI04 */ - - jmp L(reconstruction) /* end of very_large_args peth */ - - .p2align 4 -L(arg_less_pio4): - /* Here if |x|. */ - -#include - -extern float __cosf_sse2 (float); -extern float __cosf_ia32 (float); -float __cosf (float); - -libm_ifunc (__cosf, HAS_CPU_FEATURE (SSE2) ? __cosf_sse2 : __cosf_ia32); -weak_alias (__cosf, cosf); - -#define COSF __cosf_ia32 -#include diff --git a/sysdeps/i386/i686/fpu/multiarch/s_sincosf-sse2.S b/sysdeps/i386/i686/fpu/multiarch/s_sincosf-sse2.S deleted file mode 100644 index f31a925522..0000000000 --- a/sysdeps/i386/i686/fpu/multiarch/s_sincosf-sse2.S +++ /dev/null @@ -1,586 +0,0 @@ -/* Optimized with sse2 version of sincosf - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define __need_Emath -#include - -/* Short algorithm description: - * - * 1) if |x|==0: sin(x)=x, - * cos(x)=1. - * 2) if |x|<2^-27: sin(x)=x-x*DP_SMALL, raising underflow only when needed, - * cos(x)=1-|x|. - * 3) if |x|<2^-5 : sin(x)=x+x*x^2*DP_SIN2_0+x^5*DP_SIN2_1, - * cos(x)=1+1*x^2*DP_COS2_0+x^5*DP_COS2_1 - * 4) if |x|< Pi/4: sin(x)=x+x*x^2*(S0+x^2*(S1+x^2*(S2+x^2*(S3+x^2*S4)))), - * cos(x)=1+1*x^2*(C0+x^2*(C1+x^2*(C2+x^2*(C3+x^2*C4)))). - * 5) if |x| < 9*Pi/4: - * 5.1) Range reduction: - * k=trunc(|x|/(Pi/4)), j=(k+1)&0x0e, n=k+1, t=|x|-j*Pi/4. - * 5.2) Reconstruction: - * sign_sin = sign(x) * (-1.0)^(( n >>2)&1) - * sign_cos = (-1.0)^(((n+2)>>2)&1) - * poly_sin = ((((S4*t^2 + S3)*t^2 + S2)*t^2 + S1)*t^2 + S0)*t^2*t+t - * poly_cos = ((((C4*t^2 + C3)*t^2 + C2)*t^2 + C1)*t^2 + C0)*t^2*s+s - * if(n&2 != 0) { - * using cos(t) and sin(t) polynomials for |t|= 2^23, very large args: - * 7.1) Range reduction: - * k=trunc(|x|/(Pi/4)), j=(k+1)&0xfffffffe, n=k+1, t=|x|-j*Pi/4. - * 7.2) Reconstruction same as (5.2). - * 8) if x is Inf, return x-x, and set errno=EDOM. - * 9) if x is NaN, return x-x. - * - * Special cases: - * sin/cos(+-0) = +-0/1 not raising inexact/underflow, - * sin/cos(subnormal) raises inexact/underflow, - * sin/cos(min_normalized) raises inexact/underflow, - * sin/cos(normalized) raises inexact, - * sin/cos(Inf) = NaN, raises invalid, sets errno to EDOM, - * sin/cos(NaN) = NaN. - */ - -#ifdef PIC -# define MO1(symbol) L(symbol)##@GOTOFF(%ebx) -# define MO2(symbol,reg2,_scale) L(symbol)##@GOTOFF(%ebx,reg2,_scale) -# define CFI_PUSH(REG) cfi_adjust_cfa_offset(4); cfi_rel_offset(REG,0) -# define CFI_POP(REG) cfi_adjust_cfa_offset(-4); cfi_restore(REG) -# define PUSH(REG) pushl REG; CFI_PUSH(REG) -# define POP(REG) popl REG; CFI_POP(REG) -# define ENTRANCE PUSH(%ebx); LOAD_PIC_REG(bx) -# define RETURN POP(%ebx); ret; CFI_PUSH(%ebx) -# define ARG_X 8(%esp) -# define ARG_SIN_PTR 12(%esp) -# define ARG_COS_PTR 16(%esp) -#else -# define MO1(symbol) L(symbol) -# define MO2(symbol,reg2,_scale) L(symbol)(,reg2,_scale) -# define ENTRANCE -# define RETURN ret -# define ARG_X 4(%esp) -# define ARG_SIN_PTR 8(%esp) -# define ARG_COS_PTR 12(%esp) -#endif - - .text -ENTRY(__sincosf_sse2) - /* Input: single precision x on stack at address ARG_X */ - /* pointer to sin result on stack at address ARG_SIN_PTR */ - /* pointer to cos result on stack at address ARG_COS_PTR */ - - ENTRANCE - movl ARG_X, %eax /* Bits of x */ - cvtss2sd ARG_X, %xmm0 /* DP x */ - andl $0x7fffffff, %eax /* |x| */ - - cmpl $0x3f490fdb, %eax /* |x|=Pi/4 */ - movd %eax, %xmm3 /* SP |x| */ - andpd MO1(DP_ABS_MASK),%xmm0 /* DP |x| */ - movss MO1(SP_INVPIO4), %xmm2 /* SP 1/(Pi/4) */ - - cmpl $0x40e231d6, %eax /* |x|<9*Pi/4 ? */ - jae L(large_args) - - /* Here if Pi/4<=|x|<9*Pi/4 */ - mulss %xmm3, %xmm2 /* SP |x|/(Pi/4) */ - movl ARG_X, %ecx /* Load x */ - cvttss2si %xmm2, %eax /* k, number of Pi/4 in x */ - shrl $29, %ecx /* (sign of x) << 2 */ - addl $1, %eax /* k+1 */ - movl $0x0e, %edx - andl %eax, %edx /* j = (k+1)&0x0e */ - subsd MO2(PIO4J,%edx,8), %xmm0/* t = |x| - j * Pi/4 */ - -L(reconstruction): - /* Input: %eax=n, %xmm0=t, %ecx=sign(x) */ - - movaps %xmm0, %xmm4 /* t */ - movhpd MO1(DP_ONES), %xmm4 /* 1|t */ - mulsd %xmm0, %xmm0 /* y=t^2 */ - movl $2, %edx - unpcklpd %xmm0, %xmm0 /* y|y */ - addl %eax, %edx /* k+2 */ - movaps %xmm0, %xmm1 /* y|y */ - mulpd %xmm0, %xmm0 /* z=t^4|z=t^4 */ - - movaps MO1(DP_SC4), %xmm2 /* S4 */ - mulpd %xmm0, %xmm2 /* z*S4 */ - movaps MO1(DP_SC3), %xmm3 /* S3 */ - mulpd %xmm0, %xmm3 /* z*S3 */ - xorl %eax, %ecx /* (sign_x ^ (k>>2))<<2 */ - addpd MO1(DP_SC2), %xmm2 /* S2+z*S4 */ - mulpd %xmm0, %xmm2 /* z*(S2+z*S4) */ - shrl $2, %edx /* (k+2)>>2 */ - addpd MO1(DP_SC1), %xmm3 /* S1+z*S3 */ - mulpd %xmm0, %xmm3 /* z*(S1+z*S3) */ - shrl $2, %ecx /* sign_x ^ k>>2 */ - addpd MO1(DP_SC0), %xmm2 /* S0+z*(S2+z*S4) */ - andl $1, %edx /* sign_cos = ((k+2)>>2)&1 */ - mulpd %xmm1, %xmm2 /* y*(S0+z*(S2+z*S4)) */ - andl $1, %ecx /* sign_sin = sign_x ^ ((k>>2)&1) */ - addpd %xmm2, %xmm3 /* y*(S0+y*(S1+y*(S2+y*(S3+y*S4)))) */ - mulpd %xmm4, %xmm3 /*t*y*(S0+y*(S1+y*(S2+y*(S3+y*S4))))*/ - testl $2, %eax /* n&2 != 0 ? */ - addpd %xmm4, %xmm3 /*t+t*y*(S0+y*(S1+y*(S2+y*(S3+y*S4))*/ - jnz L(sin_result_sin_poly) - -/*L(sin_result_cos_poly):*/ - /* - * Here if - * cos(x) = poly_sin * sign_cos - * sin(x) = poly_cos * sign_sin - */ - movsd MO2(DP_ONES,%ecx,8), %xmm4/* 0|sign_sin */ - movhpd MO2(DP_ONES,%edx,8), %xmm4/* sign_cos|sign_sin */ - mulpd %xmm4, %xmm3 /* result_cos|result_sin */ - movl ARG_SIN_PTR, %eax - cvtpd2ps %xmm3, %xmm0 /* SP results */ - movl ARG_COS_PTR, %ecx - movss %xmm0, (%eax) /* store sin(x) from xmm0[0] */ - shufps $1, %xmm0, %xmm0 /* move cos(x) to xmm0[0] */ - movss %xmm0, (%ecx) /* store cos(x) */ - RETURN - - .p2align 4 -L(sin_result_sin_poly): - /* - * Here if - * sin(x) = poly_sin * sign_sin - * cos(x) = poly_cos * sign_cos - */ - movsd MO2(DP_ONES,%edx,8), %xmm4/* 0|sign_cos */ - movhpd MO2(DP_ONES,%ecx,8), %xmm4/* sign_sin|sign_cos */ - mulpd %xmm4, %xmm3 /* result_sin|result_cos */ - movl ARG_SIN_PTR, %eax - cvtpd2ps %xmm3, %xmm0 /* SP results */ - movl ARG_COS_PTR, %ecx - movss %xmm0, (%ecx) /* store cos(x) from xmm0[0] */ - shufps $1, %xmm0, %xmm0 /* move sin(x) to xmm0[0] */ - movss %xmm0, (%eax) /* store sin(x) */ - RETURN - - .p2align 4 -L(large_args): - /* Here if |x|>=9*Pi/4 */ - cmpl $0x7f800000, %eax /* x is Inf or NaN ? */ - jae L(arg_inf_or_nan) - - /* Here if finite |x|>=9*Pi/4 */ - cmpl $0x4b000000, %eax /* |x|<2^23 ? */ - jae L(very_large_args) - - /* Here if 9*Pi/4<=|x|<2^23 */ - movsd MO1(DP_INVPIO4), %xmm1 /* 1/(Pi/4) */ - mulsd %xmm0, %xmm1 /* |x|/(Pi/4) */ - cvttsd2si %xmm1, %eax /* k=trunc(|x|/(Pi/4)) */ - addl $1, %eax /* k+1 */ - movl %eax, %edx - andl $0xfffffffe, %edx /* j=(k+1)&0xfffffffe */ - cvtsi2sdl %edx, %xmm4 /* DP j */ - movl ARG_X, %ecx /* Load x */ - movsd MO1(DP_PIO4HI), %xmm2 /* -PIO4HI = high part of -Pi/4 */ - shrl $29, %ecx /* (sign of x) << 2 */ - mulsd %xmm4, %xmm2 /* -j*PIO4HI */ - movsd MO1(DP_PIO4LO), %xmm3 /* -PIO4LO = low part of -Pi/4 */ - addsd %xmm2, %xmm0 /* |x| - j*PIO4HI */ - mulsd %xmm3, %xmm4 /* j*PIO4LO */ - addsd %xmm4, %xmm0 /* t = |x| - j*PIO4HI - j*PIO4LO */ - jmp L(reconstruction) - - .p2align 4 -L(very_large_args): - /* Here if finite |x|>=2^23 */ - - /* bitpos = (ix>>23) - BIAS_32 + 59; */ - shrl $23, %eax /* eb = biased exponent of x */ - subl $68, %eax /* bitpos=eb-0x7f+59, where 0x7f */ - /*is exponent bias */ - movl $28, %ecx /* %cl=28 */ - movl %eax, %edx /* bitpos copy */ - - /* j = bitpos/28; */ - div %cl /* j in register %al=%ax/%cl */ - movapd %xmm0, %xmm3 /* |x| */ - andl $0xff, %eax /* clear unneeded remainder from %ah*/ - - imull $28, %eax, %ecx /* j*28 */ - movsd MO1(DP_HI_MASK), %xmm4 /* DP_HI_MASK */ - movapd %xmm0, %xmm5 /* |x| */ - mulsd -2*8+MO2(_FPI,%eax,8), %xmm3/* tmp3 = FPI[j-2]*|x| */ - movapd %xmm0, %xmm1 /* |x| */ - mulsd -1*8+MO2(_FPI,%eax,8), %xmm5/* tmp2 = FPI[j-1]*|x| */ - mulsd 0*8+MO2(_FPI,%eax,8), %xmm0/* tmp0 = FPI[j]*|x| */ - addl $19, %ecx /* j*28+19 */ - mulsd 1*8+MO2(_FPI,%eax,8), %xmm1/* tmp1 = FPI[j+1]*|x| */ - cmpl %ecx, %edx /* bitpos>=j*28+19 ? */ - jl L(very_large_skip1) - - /* Here if bitpos>=j*28+19 */ - andpd %xmm3, %xmm4 /* HI(tmp3) */ - subsd %xmm4, %xmm3 /* tmp3 = tmp3 - HI(tmp3) */ -L(very_large_skip1): - - movsd MO1(DP_2POW52), %xmm6 - movapd %xmm5, %xmm2 /* tmp2 copy */ - addsd %xmm3, %xmm5 /* tmp5 = tmp3 + tmp2 */ - movl $1, %edx - addsd %xmm5, %xmm6 /* tmp6 = tmp5 + 2^52 */ - movsd 8+MO1(DP_2POW52), %xmm4 - movd %xmm6, %eax /* k = I64_LO(tmp6); */ - addsd %xmm6, %xmm4 /* tmp4 = tmp6 - 2^52 */ - movl ARG_X, %ecx /* Load x */ - comisd %xmm5, %xmm4 /* tmp4 > tmp5 ? */ - jbe L(very_large_skip2) - - /* Here if tmp4 > tmp5 */ - subl $1, %eax /* k-- */ - addsd 8+MO1(DP_ONES), %xmm4 /* tmp4 -= 1.0 */ -L(very_large_skip2): - - andl %eax, %edx /* k&1 */ - subsd %xmm4, %xmm3 /* tmp3 -= tmp4 */ - addsd MO2(DP_ZERONE,%edx,8), %xmm3/* t = DP_ZERONE[k&1] + tmp3 */ - addsd %xmm2, %xmm3 /* t += tmp2 */ - shrl $29, %ecx /* (sign of x) << 2 */ - addsd %xmm3, %xmm0 /* t += tmp0 */ - addl $1, %eax /* n=k+1 */ - addsd %xmm1, %xmm0 /* t += tmp1 */ - mulsd MO1(DP_PIO4), %xmm0 /* t *= PI04 */ - - jmp L(reconstruction) /* end of very_large_args peth */ - - .p2align 4 -L(arg_less_pio4): - /* Here if |x|. */ - -#include - -extern void __sincosf_sse2 (float, float *, float *); -extern void __sincosf_ia32 (float, float *, float *); -void __sincosf (float, float *, float *); - -libm_ifunc (__sincosf, - HAS_CPU_FEATURE (SSE2) ? __sincosf_sse2 : __sincosf_ia32); -weak_alias (__sincosf, sincosf); - -#define SINCOSF __sincosf_ia32 -#include diff --git a/sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S b/sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S deleted file mode 100644 index ee96018061..0000000000 --- a/sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S +++ /dev/null @@ -1,566 +0,0 @@ -/* Optimized with sse2 version of sinf - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define __need_Emath -#include - -/* Short algorithm description: - * - * 1) if |x| == 0: return x. - * 2) if |x| < 2^-27: return x-x*DP_SMALL, raise underflow only when needed. - * 3) if |x| < 2^-5 : return x+x^3*DP_SIN2_0+x^5*DP_SIN2_1. - * 4) if |x| < Pi/4: return x+x^3*(S0+x^2*(S1+x^2*(S2+x^2*(S3+x^2*S4)))). - * 5) if |x| < 9*Pi/4: - * 5.1) Range reduction: k=trunc(|x|/(Pi/4)), j=(k+1)&0x0e, n=k+1, - * t=|x|-j*Pi/4. - * 5.2) Reconstruction: - * s = sign(x) * (-1.0)^((n>>2)&1) - * if(n&2 != 0) { - * using cos(t) polynomial for |t|= 2^23, very large args: - * 7.1) Range reduction: k=trunc(|x|/(Pi/4)), j=(k+1)&0xfffffffe, n=k+1, - * t=|x|-j*Pi/4. - * 7.2) Reconstruction same as (5.2). - * 8) if x is Inf, return x-x, and set errno=EDOM. - * 9) if x is NaN, return x-x. - * - * Special cases: - * sin(+-0) = +-0 not raising inexact/underflow, - * sin(subnormal) raises inexact/underflow, - * sin(min_normalized) raises inexact/underflow, - * sin(normalized) raises inexact, - * sin(Inf) = NaN, raises invalid, sets errno to EDOM, - * sin(NaN) = NaN. - */ - -#ifdef PIC -# define MO1(symbol) L(symbol)##@GOTOFF(%ebx) -# define MO2(symbol,reg2,_scale) L(symbol)##@GOTOFF(%ebx,reg2,_scale) -# define CFI_PUSH(REG) cfi_adjust_cfa_offset(4); cfi_rel_offset(REG,0) -# define CFI_POP(REG) cfi_adjust_cfa_offset(-4); cfi_restore(REG) -# define PUSH(REG) pushl REG; CFI_PUSH(REG) -# define POP(REG) popl REG; CFI_POP(REG) -# define ENTRANCE PUSH(%ebx); LOAD_PIC_REG(bx) -# define RETURN POP(%ebx); ret; CFI_PUSH(%ebx) -# define ARG_X 8(%esp) -#else -# define MO1(symbol) L(symbol) -# define MO2(symbol,reg2,_scale) L(symbol)(,reg2,_scale) -# define ENTRANCE -# define RETURN ret -# define ARG_X 4(%esp) -#endif - - .text -ENTRY(__sinf_sse2) - /* Input: single precision x on stack at address ARG_X */ - - ENTRANCE - movl ARG_X, %eax /* Bits of x */ - cvtss2sd ARG_X, %xmm0 /* DP x */ - andl $0x7fffffff, %eax /* |x| */ - - cmpl $0x3f490fdb, %eax /* |x|=Pi/4 */ - movd %eax, %xmm3 /* SP |x| */ - andpd MO1(DP_ABS_MASK),%xmm0 /* DP |x| */ - movss MO1(SP_INVPIO4), %xmm2 /* SP 1/(Pi/4) */ - - cmpl $0x40e231d6, %eax /* |x|<9*Pi/4? */ - jae L(large_args) - - /* Here if Pi/4<=|x|<9*Pi/4 */ - mulss %xmm3, %xmm2 /* SP |x|/(Pi/4) */ - movl ARG_X, %ecx /* Load x */ - cvttss2si %xmm2, %eax /* k, number of Pi/4 in x */ - shrl $31, %ecx /* sign of x */ - addl $1, %eax /* k+1 */ - movl $0x0e, %edx - andl %eax, %edx /* j = (k+1)&0x0e */ - subsd MO2(PIO4J,%edx,8), %xmm0 /* t = |x| - j * Pi/4 */ - -L(reconstruction): - /* Input: %eax=n, %xmm0=t, %ecx=sign(x) */ - testl $2, %eax /* n&2 != 0? */ - jz L(sin_poly) - -/*L(cos_poly):*/ - /* Here if sin(x) calculated using cos(t) polynomial for |t|>2)&1) - * result = s * (1.0+t^2*(C0+t^2*(C1+t^2*(C2+t^2*(C3+t^2*C4))))) - */ - shrl $2, %eax /* n>>2 */ - mulsd %xmm0, %xmm0 /* y=t^2 */ - andl $1, %eax /* (n>>2)&1 */ - movaps %xmm0, %xmm1 /* y */ - mulsd %xmm0, %xmm0 /* z=t^4 */ - - movsd MO1(DP_C4), %xmm4 /* C4 */ - mulsd %xmm0, %xmm4 /* z*C4 */ - xorl %eax, %ecx /* (-1.0)^((n>>2)&1) XOR sign(x) */ - movsd MO1(DP_C3), %xmm3 /* C3 */ - mulsd %xmm0, %xmm3 /* z*C3 */ - addsd MO1(DP_C2), %xmm4 /* C2+z*C4 */ - mulsd %xmm0, %xmm4 /* z*(C2+z*C4) */ - lea -8(%esp), %esp /* Borrow 4 bytes of stack frame */ - addsd MO1(DP_C1), %xmm3 /* C1+z*C3 */ - mulsd %xmm0, %xmm3 /* z*(C1+z*C3) */ - addsd MO1(DP_C0), %xmm4 /* C0+z*(C2+z*C4) */ - mulsd %xmm1, %xmm4 /* y*(C0+z*(C2+z*C4)) */ - - addsd %xmm4, %xmm3 /* y*(C0+y*(C1+y*(C2+y*(C3+y*C4)))) */ - /* 1.0+y*(C0+y*(C1+y*(C2+y*(C3+y*C4)))) */ - addsd MO1(DP_ONES), %xmm3 - - mulsd MO2(DP_ONES,%ecx,8), %xmm3 /* DP result */ - movsd %xmm3, 0(%esp) /* Move result from sse... */ - fldl 0(%esp) /* ...to FPU. */ - /* Return back 4 bytes of stack frame */ - lea 8(%esp), %esp - RETURN - - .p2align 4 -L(sin_poly): - /* Here if sin(x) calculated using sin(t) polynomial for |t|>2)&1) - * result = s * t * (1.0+t^2*(S0+t^2*(S1+t^2*(S2+t^2*(S3+t^2*S4))))) - */ - - movaps %xmm0, %xmm4 /* t */ - shrl $2, %eax /* n>>2 */ - mulsd %xmm0, %xmm0 /* y=t^2 */ - andl $1, %eax /* (n>>2)&1 */ - movaps %xmm0, %xmm1 /* y */ - xorl %eax, %ecx /* (-1.0)^((n>>2)&1) XOR sign(x) */ - mulsd %xmm0, %xmm0 /* z=t^4 */ - - movsd MO1(DP_S4), %xmm2 /* S4 */ - mulsd %xmm0, %xmm2 /* z*S4 */ - movsd MO1(DP_S3), %xmm3 /* S3 */ - mulsd %xmm0, %xmm3 /* z*S3 */ - lea -8(%esp), %esp /* Borrow 4 bytes of stack frame */ - addsd MO1(DP_S2), %xmm2 /* S2+z*S4 */ - mulsd %xmm0, %xmm2 /* z*(S2+z*S4) */ - addsd MO1(DP_S1), %xmm3 /* S1+z*S3 */ - mulsd %xmm0, %xmm3 /* z*(S1+z*S3) */ - addsd MO1(DP_S0), %xmm2 /* S0+z*(S2+z*S4) */ - mulsd %xmm1, %xmm2 /* y*(S0+z*(S2+z*S4)) */ - /* t*s, where s = sign(x) * (-1.0)^((n>>2)&1) */ - mulsd MO2(DP_ONES,%ecx,8), %xmm4 - addsd %xmm2, %xmm3 /* y*(S0+y*(S1+y*(S2+y*(S3+y*S4)))) */ - /* t*s*y*(S0+y*(S1+y*(S2+y*(S3+y*S4)))) */ - mulsd %xmm4, %xmm3 - /* t*s*(1.0+y*(S0+y*(S1+y*(S2+y*(S3+y*S4)))) */ - addsd %xmm4, %xmm3 - movsd %xmm3, 0(%esp) /* Move result from sse... */ - fldl 0(%esp) /* ...to FPU. */ - /* Return back 4 bytes of stack frame */ - lea 8(%esp), %esp - RETURN - - .p2align 4 -L(large_args): - /* Here if |x|>=9*Pi/4 */ - cmpl $0x7f800000, %eax /* x is Inf or NaN? */ - jae L(arg_inf_or_nan) - - /* Here if finite |x|>=9*Pi/4 */ - cmpl $0x4b000000, %eax /* |x|<2^23? */ - jae L(very_large_args) - - /* Here if 9*Pi/4<=|x|<2^23 */ - movsd MO1(DP_INVPIO4), %xmm1 /* 1/(Pi/4) */ - mulsd %xmm0, %xmm1 /* |x|/(Pi/4) */ - cvttsd2si %xmm1, %eax /* k=trunc(|x|/(Pi/4)) */ - addl $1, %eax /* k+1 */ - movl %eax, %edx - andl $0xfffffffe, %edx /* j=(k+1)&0xfffffffe */ - cvtsi2sdl %edx, %xmm4 /* DP j */ - movl ARG_X, %ecx /* Load x */ - movsd MO1(DP_PIO4HI), %xmm2 /* -PIO4HI = high part of -Pi/4 */ - shrl $31, %ecx /* sign bit of x */ - mulsd %xmm4, %xmm2 /* -j*PIO4HI */ - movsd MO1(DP_PIO4LO), %xmm3 /* -PIO4LO = low part of -Pi/4 */ - addsd %xmm2, %xmm0 /* |x| - j*PIO4HI */ - mulsd %xmm3, %xmm4 /* j*PIO4LO */ - addsd %xmm4, %xmm0 /* t = |x| - j*PIO4HI - j*PIO4LO */ - jmp L(reconstruction) - - .p2align 4 -L(very_large_args): - /* Here if finite |x|>=2^23 */ - - /* bitpos = (ix>>23) - BIAS_32 + 59; */ - shrl $23, %eax /* eb = biased exponent of x */ - /* bitpos = eb - 0x7f + 59, where 0x7f is exponent bias */ - subl $68, %eax - movl $28, %ecx /* %cl=28 */ - movl %eax, %edx /* bitpos copy */ - - /* j = bitpos/28; */ - div %cl /* j in register %al=%ax/%cl */ - movapd %xmm0, %xmm3 /* |x| */ - /* clear unneeded remainder from %ah */ - andl $0xff, %eax - - imull $28, %eax, %ecx /* j*28 */ - movsd MO1(DP_HI_MASK), %xmm4 /* DP_HI_MASK */ - movapd %xmm0, %xmm5 /* |x| */ - mulsd -2*8+MO2(_FPI,%eax,8), %xmm3 /* tmp3 = FPI[j-2]*|x| */ - movapd %xmm0, %xmm1 /* |x| */ - mulsd -1*8+MO2(_FPI,%eax,8), %xmm5 /* tmp2 = FPI[j-1]*|x| */ - mulsd 0*8+MO2(_FPI,%eax,8), %xmm0 /* tmp0 = FPI[j]*|x| */ - addl $19, %ecx /* j*28+19 */ - mulsd 1*8+MO2(_FPI,%eax,8), %xmm1 /* tmp1 = FPI[j+1]*|x| */ - cmpl %ecx, %edx /* bitpos>=j*28+19? */ - jl L(very_large_skip1) - - /* Here if bitpos>=j*28+19 */ - andpd %xmm3, %xmm4 /* HI(tmp3) */ - subsd %xmm4, %xmm3 /* tmp3 = tmp3 - HI(tmp3) */ -L(very_large_skip1): - - movsd MO1(DP_2POW52), %xmm6 - movapd %xmm5, %xmm2 /* tmp2 copy */ - addsd %xmm3, %xmm5 /* tmp5 = tmp3 + tmp2 */ - movl $1, %edx - addsd %xmm5, %xmm6 /* tmp6 = tmp5 + 2^52 */ - movsd 8+MO1(DP_2POW52), %xmm4 - movd %xmm6, %eax /* k = I64_LO(tmp6); */ - addsd %xmm6, %xmm4 /* tmp4 = tmp6 - 2^52 */ - movl ARG_X, %ecx /* Load x */ - comisd %xmm5, %xmm4 /* tmp4 > tmp5? */ - jbe L(very_large_skip2) - - /* Here if tmp4 > tmp5 */ - subl $1, %eax /* k-- */ - addsd 8+MO1(DP_ONES), %xmm4 /* tmp4 -= 1.0 */ -L(very_large_skip2): - - andl %eax, %edx /* k&1 */ - subsd %xmm4, %xmm3 /* tmp3 -= tmp4 */ - addsd MO2(DP_ZERONE,%edx,8), %xmm3 /* t = DP_ZERONE[k&1] + tmp3 */ - addsd %xmm2, %xmm3 /* t += tmp2 */ - shrl $31, %ecx /* sign of x */ - addsd %xmm3, %xmm0 /* t += tmp0 */ - addl $1, %eax /* n=k+1 */ - addsd %xmm1, %xmm0 /* t += tmp1 */ - mulsd MO1(DP_PIO4), %xmm0 /* t *= PI04 */ - - jmp L(reconstruction) /* end of very_large_args peth */ - - .p2align 4 -L(arg_less_pio4): - /* Here if |x|. */ - -#include - -extern float __sinf_sse2 (float); -extern float __sinf_ia32 (float); -float __sinf (float); - -libm_ifunc (__sinf, HAS_CPU_FEATURE (SSE2) ? __sinf_sse2 : __sinf_ia32); -weak_alias (__sinf, sinf); -#define SINF __sinf_ia32 -#include diff --git a/sysdeps/i386/i686/fpu/s_fmax.S b/sysdeps/i386/i686/fpu/s_fmax.S deleted file mode 100644 index ace8db9410..0000000000 --- a/sysdeps/i386/i686/fpu/s_fmax.S +++ /dev/null @@ -1,39 +0,0 @@ -/* Compute maximum of two numbers, regarding NaN as missing argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fmax) - fldl 4(%esp) // x - fldl 12(%esp) // x : y - - fucomi %st(0), %st - fcmovu %st(1), %st // now %st contains y if not NaN, x otherwise - - fxch - - fucomi %st(1), %st - fcmovb %st(1), %st - - fstp %st(1) - - ret -END(__fmax) -weak_alias (__fmax, fmax) diff --git a/sysdeps/i386/i686/fpu/s_fmaxf.S b/sysdeps/i386/i686/fpu/s_fmaxf.S deleted file mode 100644 index 3a25951a09..0000000000 --- a/sysdeps/i386/i686/fpu/s_fmaxf.S +++ /dev/null @@ -1,39 +0,0 @@ -/* Compute maximum of two numbers, regarding NaN as missing argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fmaxf) - flds 4(%esp) // x - flds 8(%esp) // x : y - - fucomi %st(0), %st - fcmovu %st(1), %st // now %st contains y if not NaN, x otherwise - - fxch - - fucomi %st(1), %st - fcmovb %st(1), %st - - fstp %st(1) - - ret -END(__fmaxf) -weak_alias (__fmaxf, fmaxf) diff --git a/sysdeps/i386/i686/fpu/s_fmaxl.S b/sysdeps/i386/i686/fpu/s_fmaxl.S deleted file mode 100644 index 3f6c21c63d..0000000000 --- a/sysdeps/i386/i686/fpu/s_fmaxl.S +++ /dev/null @@ -1,58 +0,0 @@ -/* Compute maximum of two numbers, regarding NaN as missing argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fmaxl) - fldt 4(%esp) // x - fldt 16(%esp) // x : y - - fucomi %st(1), %st - jp 2f - fcmovb %st(1), %st - - fstp %st(1) - - ret - -2: // Unordered. - fucomi %st(0), %st - jp 3f - // st(1) is a NaN; st(0) is not. Test if st(1) is signaling. - testb $0x40, 11(%esp) - jz 4f - fstp %st(1) - ret - -3: // st(0) is a NaN; st(1) may or may not be. - fxch - fucomi %st(0), %st - jp 4f - // st(1) is a NaN; st(0) is not. Test if st(1) is signaling. - testb $0x40, 23(%esp) - jz 4f - fstp %st(1) - ret - -4: // Both arguments are NaNs, or one is a signaling NaN. - faddp - ret -END(__fmaxl) -weak_alias (__fmaxl, fmaxl) diff --git a/sysdeps/i386/i686/fpu/s_fmin.S b/sysdeps/i386/i686/fpu/s_fmin.S deleted file mode 100644 index 72d306fd79..0000000000 --- a/sysdeps/i386/i686/fpu/s_fmin.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Compute minimum of two numbers, regarding NaN as missing argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fmin) - fldl 4(%esp) // x - fldl 12(%esp) // x : y - - fucomi %st(0), %st - fcmovu %st(1), %st // now %st contains y if not NaN, x otherwise - - fucomi %st(1), %st - fcmovnb %st(1), %st - - fstp %st(1) - - ret -END(__fmin) -weak_alias (__fmin, fmin) diff --git a/sysdeps/i386/i686/fpu/s_fminf.S b/sysdeps/i386/i686/fpu/s_fminf.S deleted file mode 100644 index 52ea892bad..0000000000 --- a/sysdeps/i386/i686/fpu/s_fminf.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Compute minimum of two numbers, regarding NaN as missing argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fminf) - flds 4(%esp) // x - flds 8(%esp) // x : y - - fucomi %st(0), %st - fcmovu %st(1), %st // now %st contains y if not NaN, x otherwise - - fucomi %st(1), %st - fcmovnb %st(1), %st - - fstp %st(1) - - ret -END(__fminf) -weak_alias (__fminf, fminf) diff --git a/sysdeps/i386/i686/fpu/s_fminl.S b/sysdeps/i386/i686/fpu/s_fminl.S deleted file mode 100644 index e1cb83fed7..0000000000 --- a/sysdeps/i386/i686/fpu/s_fminl.S +++ /dev/null @@ -1,58 +0,0 @@ -/* Compute minimum of two numbers, regarding NaN as missing argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fminl) - fldt 4(%esp) // x - fldt 16(%esp) // x : y - - fucomi %st(1), %st - jp 2f - fcmovnb %st(1), %st - - fstp %st(1) - - ret - -2: // Unordered. - fucomi %st(0), %st - jp 3f - // st(1) is a NaN; st(0) is not. Test if st(1) is signaling. - testb $0x40, 11(%esp) - jz 4f - fstp %st(1) - ret - -3: // st(0) is a NaN; st(1) may or may not be. - fxch - fucomi %st(0), %st - jp 4f - // st(1) is a NaN; st(0) is not. Test if st(1) is signaling. - testb $0x40, 23(%esp) - jz 4f - fstp %st(1) - ret - -4: // Both arguments are NaNs, or one is a signaling NaN. - faddp - ret -END(__fminl) -weak_alias (__fminl, fminl) diff --git a/sysdeps/i386/i686/hp-timing.h b/sysdeps/i386/i686/hp-timing.h deleted file mode 100644 index 1b11410feb..0000000000 --- a/sysdeps/i386/i686/hp-timing.h +++ /dev/null @@ -1,42 +0,0 @@ -/* High precision, low overhead timing functions. i686 version. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _HP_TIMING_H -#define _HP_TIMING_H 1 - -/* We always assume having the timestamp register. */ -#define HP_TIMING_AVAIL (1) -#define HP_SMALL_TIMING_AVAIL (1) - -/* We indeed have inlined functions. */ -#define HP_TIMING_INLINE (1) - -/* We use 64bit values for the times. */ -typedef unsigned long long int hp_timing_t; - -/* That's quite simple. Use the `rdtsc' instruction. Note that the value - might not be 100% accurate since there might be some more instructions - running in this moment. This could be changed by using a barrier like - 'cpuid' right before the `rdtsc' instruciton. But we are not interested - in accurate clock cycles here so we don't do this. */ -#define HP_TIMING_NOW(Var) __asm__ __volatile__ ("rdtsc" : "=A" (Var)) - -#include - -#endif /* hp-timing.h */ diff --git a/sysdeps/i386/i686/init-arch.h b/sysdeps/i386/i686/init-arch.h deleted file mode 100644 index f55f80efa0..0000000000 --- a/sysdeps/i386/i686/init-arch.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define MINIMUM_ISA 686 -#include diff --git a/sysdeps/i386/i686/memcmp.S b/sysdeps/i386/i686/memcmp.S deleted file mode 100644 index 5140ee2145..0000000000 --- a/sysdeps/i386/i686/memcmp.S +++ /dev/null @@ -1,408 +0,0 @@ -/* Compare two memory blocks for differences in the first COUNT bytes. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+4 /* Preserve EBX. */ -#define BLK1 PARMS -#define BLK2 BLK1+4 -#define LEN BLK2+4 -#define ENTRANCE pushl %ebx; cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (ebx, 0) -#define RETURN popl %ebx; cfi_adjust_cfa_offset (-4); \ - cfi_restore (ebx); ret - -/* Load an entry in a jump table into EBX. TABLE is a jump table - with relative offsets. INDEX is a register contains the index - into the jump table. */ -#define LOAD_JUMP_TABLE_ENTRY(TABLE, INDEX) \ - /* We first load PC into EBX. */ \ - SETUP_PIC_REG(bx); \ - /* Get the address of the jump table. */ \ - addl $(TABLE - .), %ebx; \ - /* Get the entry and convert the relative offset to the \ - absolute address. */ \ - addl (%ebx,INDEX,4), %ebx - - .text - ALIGN (4) -ENTRY (memcmp) - ENTRANCE - - movl BLK1(%esp), %eax - movl BLK2(%esp), %edx - movl LEN(%esp), %ecx - - cmpl $1, %ecx - jne L(not_1) - movzbl (%eax), %ecx /* LEN == 1 */ - cmpb (%edx), %cl - jne L(neq) -L(bye): - xorl %eax, %eax - RETURN - - cfi_adjust_cfa_offset (4) - cfi_rel_offset (ebx, 0) -L(neq): - sbbl %eax, %eax - sbbl $-1, %eax - RETURN - - cfi_adjust_cfa_offset (4) - cfi_rel_offset (ebx, 0) -L(not_1): - jl L(bye) /* LEN == 0 */ - - pushl %esi - cfi_adjust_cfa_offset (4) - movl %eax, %esi - cfi_rel_offset (esi, 0) - cmpl $32, %ecx; - jge L(32bytesormore) /* LEN => 32 */ - - LOAD_JUMP_TABLE_ENTRY (L(table_32bytes), %ecx) - addl %ecx, %edx - addl %ecx, %esi - jmp *%ebx - - ALIGN (4) -L(28bytes): - movl -28(%esi), %eax - movl -28(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(24bytes): - movl -24(%esi), %eax - movl -24(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(20bytes): - movl -20(%esi), %eax - movl -20(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(16bytes): - movl -16(%esi), %eax - movl -16(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(12bytes): - movl -12(%esi), %eax - movl -12(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(8bytes): - movl -8(%esi), %eax - movl -8(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(4bytes): - movl -4(%esi), %eax - movl -4(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(0bytes): - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - xorl %eax, %eax - RETURN - - cfi_adjust_cfa_offset (8) - cfi_rel_offset (esi, 0) - cfi_rel_offset (ebx, 4) -L(29bytes): - movl -29(%esi), %eax - movl -29(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(25bytes): - movl -25(%esi), %eax - movl -25(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(21bytes): - movl -21(%esi), %eax - movl -21(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(17bytes): - movl -17(%esi), %eax - movl -17(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(13bytes): - movl -13(%esi), %eax - movl -13(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(9bytes): - movl -9(%esi), %eax - movl -9(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(5bytes): - movl -5(%esi), %eax - movl -5(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(1bytes): - movzbl -1(%esi), %eax - cmpb -1(%edx), %al - jne L(set) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - xorl %eax, %eax - RETURN - - cfi_adjust_cfa_offset (8) - cfi_rel_offset (esi, 0) - cfi_rel_offset (ebx, 4) -L(30bytes): - movl -30(%esi), %eax - movl -30(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(26bytes): - movl -26(%esi), %eax - movl -26(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(22bytes): - movl -22(%esi), %eax - movl -22(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(18bytes): - movl -18(%esi), %eax - movl -18(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(14bytes): - movl -14(%esi), %eax - movl -14(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(10bytes): - movl -10(%esi), %eax - movl -10(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(6bytes): - movl -6(%esi), %eax - movl -6(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(2bytes): - movzwl -2(%esi), %eax - movzwl -2(%edx), %ecx - cmpb %cl, %al - jne L(set) - cmpl %ecx, %eax - jne L(set) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - xorl %eax, %eax - RETURN - - cfi_adjust_cfa_offset (8) - cfi_rel_offset (esi, 0) - cfi_rel_offset (ebx, 4) -L(31bytes): - movl -31(%esi), %eax - movl -31(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(27bytes): - movl -27(%esi), %eax - movl -27(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(23bytes): - movl -23(%esi), %eax - movl -23(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(19bytes): - movl -19(%esi), %eax - movl -19(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(15bytes): - movl -15(%esi), %eax - movl -15(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(11bytes): - movl -11(%esi), %eax - movl -11(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(7bytes): - movl -7(%esi), %eax - movl -7(%edx), %ecx - cmpl %ecx, %eax - jne L(find_diff) -L(3bytes): - movzwl -3(%esi), %eax - movzwl -3(%edx), %ecx - cmpb %cl, %al - jne L(set) - cmpl %ecx, %eax - jne L(set) - movzbl -1(%esi), %eax - cmpb -1(%edx), %al - jne L(set) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - xorl %eax, %eax - RETURN - - cfi_adjust_cfa_offset (8) - cfi_rel_offset (esi, 0) - cfi_rel_offset (ebx, 4) - ALIGN (4) -/* ECX >= 32. */ -L(32bytesormore): - subl $32, %ecx - - movl (%esi), %eax - cmpl (%edx), %eax - jne L(load_ecx) - - movl 4(%esi), %eax - cmpl 4(%edx), %eax - jne L(load_ecx_4) - - movl 8(%esi), %eax - cmpl 8(%edx), %eax - jne L(load_ecx_8) - - movl 12(%esi), %eax - cmpl 12(%edx), %eax - jne L(load_ecx_12) - - movl 16(%esi), %eax - cmpl 16(%edx), %eax - jne L(load_ecx_16) - - movl 20(%esi), %eax - cmpl 20(%edx), %eax - jne L(load_ecx_20) - - movl 24(%esi), %eax - cmpl 24(%edx), %eax - jne L(load_ecx_24) - - movl 28(%esi), %eax - cmpl 28(%edx), %eax - jne L(load_ecx_28) - - addl $32, %esi - addl $32, %edx - cmpl $32, %ecx - jge L(32bytesormore) - - LOAD_JUMP_TABLE_ENTRY (L(table_32bytes), %ecx) - addl %ecx, %edx - addl %ecx, %esi - jmp *%ebx - -L(load_ecx_28): - addl $0x4, %edx -L(load_ecx_24): - addl $0x4, %edx -L(load_ecx_20): - addl $0x4, %edx -L(load_ecx_16): - addl $0x4, %edx -L(load_ecx_12): - addl $0x4, %edx -L(load_ecx_8): - addl $0x4, %edx -L(load_ecx_4): - addl $0x4, %edx -L(load_ecx): - movl (%edx), %ecx - -L(find_diff): - cmpb %cl, %al - jne L(set) - cmpb %ch, %ah - jne L(set) - shrl $16,%eax - shrl $16,%ecx - cmpb %cl, %al - jne L(set) - /* We get there only if we already know there is a - difference. */ - cmpl %ecx, %eax -L(set): - sbbl %eax, %eax - sbbl $-1, %eax - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - RETURN -END (memcmp) - - .section .rodata - ALIGN (2) -L(table_32bytes) : - .long L(0bytes) - L(table_32bytes) - .long L(1bytes) - L(table_32bytes) - .long L(2bytes) - L(table_32bytes) - .long L(3bytes) - L(table_32bytes) - .long L(4bytes) - L(table_32bytes) - .long L(5bytes) - L(table_32bytes) - .long L(6bytes) - L(table_32bytes) - .long L(7bytes) - L(table_32bytes) - .long L(8bytes) - L(table_32bytes) - .long L(9bytes) - L(table_32bytes) - .long L(10bytes) - L(table_32bytes) - .long L(11bytes) - L(table_32bytes) - .long L(12bytes) - L(table_32bytes) - .long L(13bytes) - L(table_32bytes) - .long L(14bytes) - L(table_32bytes) - .long L(15bytes) - L(table_32bytes) - .long L(16bytes) - L(table_32bytes) - .long L(17bytes) - L(table_32bytes) - .long L(18bytes) - L(table_32bytes) - .long L(19bytes) - L(table_32bytes) - .long L(20bytes) - L(table_32bytes) - .long L(21bytes) - L(table_32bytes) - .long L(22bytes) - L(table_32bytes) - .long L(23bytes) - L(table_32bytes) - .long L(24bytes) - L(table_32bytes) - .long L(25bytes) - L(table_32bytes) - .long L(26bytes) - L(table_32bytes) - .long L(27bytes) - L(table_32bytes) - .long L(28bytes) - L(table_32bytes) - .long L(29bytes) - L(table_32bytes) - .long L(30bytes) - L(table_32bytes) - .long L(31bytes) - L(table_32bytes) - - -#undef bcmp -weak_alias (memcmp, bcmp) -libc_hidden_builtin_def (memcmp) diff --git a/sysdeps/i386/i686/memcpy.S b/sysdeps/i386/i686/memcpy.S deleted file mode 100644 index 1d61447430..0000000000 --- a/sysdeps/i386/i686/memcpy.S +++ /dev/null @@ -1,98 +0,0 @@ -/* Copy memory block and return pointer to beginning of destination block - For Intel 80x86, x>=6. - This file is part of the GNU C Library. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - Contributed by Ulrich Drepper , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4 /* no space for saved regs */ -#define RTN PARMS -#define DEST RTN -#define SRC DEST+4 -#define LEN SRC+4 - - .text -#if defined PIC && IS_IN (libc) -ENTRY_CHK (__memcpy_chk) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb HIDDEN_JUMPTARGET (__chk_fail) -END_CHK (__memcpy_chk) -#endif -ENTRY (memcpy) - - movl %edi, %eax - movl DEST(%esp), %edi - movl %esi, %edx - movl SRC(%esp), %esi - - movl %edi, %ecx - xorl %esi, %ecx - andl $3, %ecx - movl LEN(%esp), %ecx - cld - jne .Lunaligned - - cmpl $3, %ecx - jbe .Lunaligned - - testl $3, %esi - je 1f - movsb - decl %ecx - testl $3, %esi - je 1f - movsb - decl %ecx - testl $3, %esi - je 1f - movsb - decl %ecx -1: pushl %eax - movl %ecx, %eax - shrl $2, %ecx - andl $3, %eax - rep - movsl - movl %eax, %ecx - rep - movsb - popl %eax - -.Lend: movl %eax, %edi - movl %edx, %esi - movl DEST(%esp), %eax - - ret - - /* When we come here the pointers do not have the same - alignment or the length is too short. No need to optimize for - aligned memory accesses. */ -.Lunaligned: - shrl $1, %ecx - jnc 1f - movsb -1: shrl $1, %ecx - jnc 2f - movsw -2: rep - movsl - jmp .Lend -END (memcpy) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/i386/i686/memmove.S b/sysdeps/i386/i686/memmove.S deleted file mode 100644 index f60c3d501b..0000000000 --- a/sysdeps/i386/i686/memmove.S +++ /dev/null @@ -1,120 +0,0 @@ -/* Copy memory block and return pointer to beginning of destination block - For Intel 80x86, x>=6. - This file is part of the GNU C Library. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+4 /* one spilled register */ -#define RTN PARMS - - .text - -#ifdef USE_AS_BCOPY -# define SRC RTN -# define DEST SRC+4 -# define LEN DEST+4 -#else -# define DEST RTN -# define SRC DEST+4 -# define LEN SRC+4 - -# if defined PIC && IS_IN (libc) -ENTRY_CHK (__memmove_chk) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb HIDDEN_JUMPTARGET (__chk_fail) -END_CHK (__memmove_chk) -# endif -#endif - -ENTRY (memmove) - - pushl %edi - cfi_adjust_cfa_offset (4) - - movl LEN(%esp), %ecx - movl DEST(%esp), %edi - cfi_rel_offset (edi, 0) - movl %esi, %edx - movl SRC(%esp), %esi - cfi_register (esi, edx) - - movl %edi, %eax - subl %esi, %eax - cmpl %eax, %ecx - ja 3f - - cld - shrl $1, %ecx - jnc 1f - movsb -1: shrl $1, %ecx - jnc 2f - movsw -2: rep - movsl - movl %edx, %esi - cfi_restore (esi) -#ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -#endif - - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret - - cfi_adjust_cfa_offset (4) - cfi_rel_offset (edi, 0) - cfi_register (esi, edx) - - /* Backward copying. */ -3: std - leal -1(%edi, %ecx), %edi - leal -1(%esi, %ecx), %esi - shrl $1, %ecx - jnc 1f - movsb -1: subl $1, %edi - subl $1, %esi - shrl $1, %ecx - jnc 2f - movsw -2: subl $2, %edi - subl $2, %esi - rep - movsl - movl %edx, %esi - cfi_restore (esi) -#ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -#endif - - cld - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (memmove) -#ifndef USE_AS_BCOPY -libc_hidden_builtin_def (memmove) -#endif diff --git a/sysdeps/i386/i686/mempcpy.S b/sysdeps/i386/i686/mempcpy.S deleted file mode 100644 index 31cb4efdb2..0000000000 --- a/sysdeps/i386/i686/mempcpy.S +++ /dev/null @@ -1,65 +0,0 @@ -/* Copy memory block and return pointer to following byte. - For Intel 80x86, x>=6. - This file is part of the GNU C Library. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4 /* no space for saved regs */ -#define RTN PARMS -#define DEST RTN -#define SRC DEST+4 -#define LEN SRC+4 - - .text -#if defined PIC && IS_IN (libc) -ENTRY_CHK (__mempcpy_chk) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb HIDDEN_JUMPTARGET (__chk_fail) -END_CHK (__mempcpy_chk) -#endif -ENTRY (__mempcpy) - - movl LEN(%esp), %ecx - movl %edi, %eax - cfi_register (edi, eax) - movl DEST(%esp), %edi - movl %esi, %edx - cfi_register (esi, edx) - movl SRC(%esp), %esi - cld - shrl $1, %ecx - jnc 1f - movsb -1: shrl $1, %ecx - jnc 2f - movsw -2: rep - movsl - xchgl %edi, %eax - cfi_restore (edi) - movl %edx, %esi - cfi_restore (esi) - - ret -END (__mempcpy) -libc_hidden_def (__mempcpy) -weak_alias (__mempcpy, mempcpy) -libc_hidden_builtin_def (mempcpy) diff --git a/sysdeps/i386/i686/memset.S b/sysdeps/i386/i686/memset.S deleted file mode 100644 index 24d06178d2..0000000000 --- a/sysdeps/i386/i686/memset.S +++ /dev/null @@ -1,100 +0,0 @@ -/* memset/bzero -- set memory area to CH/0 - Highly optimized version for ix86, x>=6. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+4 /* space for 1 saved reg */ -#ifdef USE_AS_BZERO -# define DEST PARMS -# define LEN DEST+4 -#else -# define RTN PARMS -# define DEST RTN -# define CHR DEST+4 -# define LEN CHR+4 -#endif - - .text -#if defined SHARED && IS_IN (libc) && !defined USE_AS_BZERO -ENTRY_CHK (__memset_chk) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb HIDDEN_JUMPTARGET (__chk_fail) -END_CHK (__memset_chk) -#endif -ENTRY (memset) - - cld - pushl %edi - cfi_adjust_cfa_offset (4) - movl DEST(%esp), %edx - movl LEN(%esp), %ecx -#ifdef USE_AS_BZERO - xorl %eax, %eax /* fill with 0 */ -#else - movzbl CHR(%esp), %eax -#endif - jecxz 1f - movl %edx, %edi - cfi_rel_offset (edi, 0) - andl $3, %edx - jz 2f /* aligned */ - jp 3f /* misaligned at 3, store just one byte below */ - stosb /* misaligned at 1 or 2, store two bytes */ - decl %ecx - jz 1f -3: stosb - decl %ecx - jz 1f - xorl $1, %edx - jnz 2f /* was misaligned at 2 or 3, now aligned */ - stosb /* was misaligned at 1, store third byte */ - decl %ecx -2: movl %ecx, %edx - shrl $2, %ecx - andl $3, %edx -#ifndef USE_AS_BZERO - imul $0x01010101, %eax -#endif - rep - stosl - movl %edx, %ecx - rep - stosb - -1: -#ifndef USE_AS_BZERO - movl DEST(%esp), %eax /* start address of destination is result */ -#endif - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (memset) -libc_hidden_builtin_def (memset) - -#if defined SHARED && IS_IN (libc) && !defined __memset_chk \ - && !defined USE_AS_BZERO -strong_alias (__memset_chk, __memset_zero_constant_len_parameter) - .section .gnu.warning.__memset_zero_constant_len_parameter - .string "memset used with constant zero length parameter; this could be due to transposed parameters" -#endif diff --git a/sysdeps/i386/i686/memusage.h b/sysdeps/i386/i686/memusage.h deleted file mode 100644 index 77a020d7c0..0000000000 --- a/sysdeps/i386/i686/memusage.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("esp"); stack_ptr; }) -#define GETTIME(low,high) asm ("rdtsc" : "=a" (low), "=d" (high)) - -#include diff --git a/sysdeps/i386/i686/multiarch/Makefile b/sysdeps/i386/i686/multiarch/Makefile deleted file mode 100644 index 4a0c20c051..0000000000 --- a/sysdeps/i386/i686/multiarch/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -ifeq ($(subdir),csu) -tests += test-multiarch -endif - -ifeq ($(subdir),string) -gen-as-const-headers += locale-defines.sym -sysdep_routines += bzero-sse2 memset-sse2 memcpy-ssse3 mempcpy-ssse3 \ - memmove-ssse3 memcpy-ssse3-rep mempcpy-ssse3-rep \ - memmove-ssse3-rep bcopy-ssse3 bcopy-ssse3-rep \ - memset-sse2-rep bzero-sse2-rep strcmp-ssse3 \ - strcmp-sse4 strncmp-c strncmp-ssse3 strncmp-sse4 \ - memcmp-ssse3 memcmp-sse4 varshift \ - strlen-sse2 strlen-sse2-bsf strncpy-c strcpy-ssse3 \ - strncpy-ssse3 stpcpy-ssse3 stpncpy-ssse3 strcpy-sse2 \ - strncpy-sse2 stpcpy-sse2 stpncpy-sse2 strcat-ssse3 \ - strcat-sse2 strncat-ssse3 strncat-sse2 strncat-c \ - strchr-sse2 strrchr-sse2 strchr-sse2-bsf strrchr-sse2-bsf \ - memchr-sse2 memchr-sse2-bsf \ - memrchr-sse2 memrchr-sse2-bsf memrchr-c \ - rawmemchr-sse2 rawmemchr-sse2-bsf \ - strnlen-sse2 strnlen-c \ - strcasecmp_l-c strcasecmp-c strcasecmp_l-ssse3 \ - strncase_l-c strncase-c strncase_l-ssse3 \ - strcasecmp_l-sse4 strncase_l-sse4 \ - bcopy-sse2-unaligned memcpy-sse2-unaligned \ - mempcpy-sse2-unaligned memmove-sse2-unaligned \ - strcspn-c strpbrk-c strspn-c -CFLAGS-varshift.c += -msse4 -CFLAGS-strcspn-c.c += -msse4 -CFLAGS-strpbrk-c.c += -msse4 -CFLAGS-strspn-c.c += -msse4 -endif - -ifeq ($(subdir),wcsmbs) -sysdep_routines += wcscmp-sse2 wcscmp-c wcslen-sse2 wcslen-c \ - wmemcmp-sse4 wmemcmp-ssse3 wmemcmp-c wcschr-sse2 \ - wcschr-c wcsrchr-sse2 wcsrchr-c wcscpy-ssse3 wcscpy-c -endif - -ifeq ($(subdir),math) -libm-sysdep_routines += s_fma-fma s_fmaf-fma -CFLAGS-s_fma-fma.c += -mavx -mfpmath=sse -CFLAGS-s_fmaf-fma.c += -mavx -mfpmath=sse -endif diff --git a/sysdeps/i386/i686/multiarch/bcopy-sse2-unaligned.S b/sysdeps/i386/i686/multiarch/bcopy-sse2-unaligned.S deleted file mode 100644 index efef2a10dd..0000000000 --- a/sysdeps/i386/i686/multiarch/bcopy-sse2-unaligned.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_MEMMOVE -#define USE_AS_BCOPY -#define MEMCPY __bcopy_sse2_unaligned -#include "memcpy-sse2-unaligned.S" diff --git a/sysdeps/i386/i686/multiarch/bcopy-ssse3-rep.S b/sysdeps/i386/i686/multiarch/bcopy-ssse3-rep.S deleted file mode 100644 index cbc8b420e8..0000000000 --- a/sysdeps/i386/i686/multiarch/bcopy-ssse3-rep.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_MEMMOVE -#define USE_AS_BCOPY -#define MEMCPY __bcopy_ssse3_rep -#include "memcpy-ssse3-rep.S" diff --git a/sysdeps/i386/i686/multiarch/bcopy-ssse3.S b/sysdeps/i386/i686/multiarch/bcopy-ssse3.S deleted file mode 100644 index 36aac44b9c..0000000000 --- a/sysdeps/i386/i686/multiarch/bcopy-ssse3.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_MEMMOVE -#define USE_AS_BCOPY -#define MEMCPY __bcopy_ssse3 -#include "memcpy-ssse3.S" diff --git a/sysdeps/i386/i686/multiarch/bcopy.S b/sysdeps/i386/i686/multiarch/bcopy.S deleted file mode 100644 index 877f82c28f..0000000000 --- a/sysdeps/i386/i686/multiarch/bcopy.S +++ /dev/null @@ -1,59 +0,0 @@ -/* Multiple versions of bcopy - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib. */ -#if IS_IN (libc) - .text -ENTRY(bcopy) - .type bcopy, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__bcopy_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__bcopy_sse2_unaligned) - HAS_ARCH_FEATURE (Fast_Unaligned_Load) - jnz 2f - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (__bcopy_ssse3) - HAS_ARCH_FEATURE (Fast_Rep_String) - jz 2f - LOAD_FUNC_GOT_EAX (__bcopy_ssse3_rep) -2: ret -END(bcopy) - -# undef ENTRY -# define ENTRY(name) \ - .type __bcopy_ia32, @function; \ - .p2align 4; \ - .globl __bcopy_ia32; \ - .hidden __bcopy_ia32; \ - __bcopy_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __bcopy_ia32, .-__bcopy_ia32 - -#endif - -#include "../bcopy.S" diff --git a/sysdeps/i386/i686/multiarch/bzero-sse2-rep.S b/sysdeps/i386/i686/multiarch/bzero-sse2-rep.S deleted file mode 100644 index 507b288bb3..0000000000 --- a/sysdeps/i386/i686/multiarch/bzero-sse2-rep.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_BZERO -#define __memset_sse2_rep __bzero_sse2_rep -#include "memset-sse2-rep.S" diff --git a/sysdeps/i386/i686/multiarch/bzero-sse2.S b/sysdeps/i386/i686/multiarch/bzero-sse2.S deleted file mode 100644 index 8d04512e4e..0000000000 --- a/sysdeps/i386/i686/multiarch/bzero-sse2.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_BZERO -#define __memset_sse2 __bzero_sse2 -#include "memset-sse2.S" diff --git a/sysdeps/i386/i686/multiarch/bzero.S b/sysdeps/i386/i686/multiarch/bzero.S deleted file mode 100644 index 9dac490aa2..0000000000 --- a/sysdeps/i386/i686/multiarch/bzero.S +++ /dev/null @@ -1,62 +0,0 @@ -/* Multiple versions of bzero - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib. */ -#if IS_IN (libc) - .text -ENTRY(__bzero) - .type __bzero, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__bzero_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX ( __bzero_sse2) - HAS_ARCH_FEATURE (Fast_Rep_String) - jz 2f - LOAD_FUNC_GOT_EAX (__bzero_sse2_rep) -2: ret -END(__bzero) - -# undef ENTRY -# define ENTRY(name) \ - .type __bzero_ia32, @function; \ - .p2align 4; \ - .globl __bzero_ia32; \ - .hidden __bzero_ia32; \ - __bzero_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __bzero_ia32, .-__bzero_ia32 - -# ifdef SHARED -# undef libc_hidden_builtin_def -/* IFUNC doesn't work with the hidden functions in shared library since - they will be called without setting up EBX needed for PLT which is - used by IFUNC. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI___bzero; __GI___bzero = __bzero_ia32 -# endif -#endif - -#include "../bzero.S" diff --git a/sysdeps/i386/i686/multiarch/ifunc-impl-list.c b/sysdeps/i386/i686/multiarch/ifunc-impl-list.c deleted file mode 100644 index e8026a2a78..0000000000 --- a/sysdeps/i386/i686/multiarch/ifunc-impl-list.c +++ /dev/null @@ -1,376 +0,0 @@ -/* Enumerate available IFUNC implementations of a function. i686 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include "init-arch.h" - -/* Maximum number of IFUNC implementations. */ -#define MAX_IFUNC 4 - -/* Fill ARRAY of MAX elements with IFUNC implementations for function - NAME and return the number of valid entries. */ - -size_t -__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, - size_t max) -{ - assert (max >= MAX_IFUNC); - - size_t i = 0; - - /* Support sysdeps/i386/i686/multiarch/bcopy.S. */ - IFUNC_IMPL (i, name, bcopy, - IFUNC_IMPL_ADD (array, i, bcopy, HAS_CPU_FEATURE (SSSE3), - __bcopy_ssse3_rep) - IFUNC_IMPL_ADD (array, i, bcopy, HAS_CPU_FEATURE (SSSE3), - __bcopy_ssse3) - IFUNC_IMPL_ADD (array, i, bcopy, HAS_CPU_FEATURE (SSE2), - __bcopy_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, bcopy, 1, __bcopy_ia32)) - - /* Support sysdeps/i386/i686/multiarch/bzero.S. */ - IFUNC_IMPL (i, name, bzero, - IFUNC_IMPL_ADD (array, i, bzero, HAS_CPU_FEATURE (SSE2), - __bzero_sse2_rep) - IFUNC_IMPL_ADD (array, i, bzero, HAS_CPU_FEATURE (SSE2), - __bzero_sse2) - IFUNC_IMPL_ADD (array, i, bzero, 1, __bzero_ia32)) - - /* Support sysdeps/i386/i686/multiarch/memchr.S. */ - IFUNC_IMPL (i, name, memchr, - IFUNC_IMPL_ADD (array, i, memchr, HAS_CPU_FEATURE (SSE2), - __memchr_sse2_bsf) - IFUNC_IMPL_ADD (array, i, memchr, HAS_CPU_FEATURE (SSE2), - __memchr_sse2) - IFUNC_IMPL_ADD (array, i, memchr, 1, __memchr_ia32)) - - /* Support sysdeps/i386/i686/multiarch/memcmp.S. */ - IFUNC_IMPL (i, name, memcmp, - IFUNC_IMPL_ADD (array, i, memcmp, HAS_CPU_FEATURE (SSE4_2), - __memcmp_sse4_2) - IFUNC_IMPL_ADD (array, i, memcmp, HAS_CPU_FEATURE (SSSE3), - __memcmp_ssse3) - IFUNC_IMPL_ADD (array, i, memcmp, 1, __memcmp_ia32)) - - /* Support sysdeps/i386/i686/multiarch/memmove_chk.S. */ - IFUNC_IMPL (i, name, __memmove_chk, - IFUNC_IMPL_ADD (array, i, __memmove_chk, - HAS_CPU_FEATURE (SSSE3), - __memmove_chk_ssse3_rep) - IFUNC_IMPL_ADD (array, i, __memmove_chk, - HAS_CPU_FEATURE (SSSE3), - __memmove_chk_ssse3) - IFUNC_IMPL_ADD (array, i, __memmove_chk, - HAS_CPU_FEATURE (SSE2), - __memmove_chk_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, __memmove_chk, 1, - __memmove_chk_ia32)) - - /* Support sysdeps/i386/i686/multiarch/memmove.S. */ - IFUNC_IMPL (i, name, memmove, - IFUNC_IMPL_ADD (array, i, memmove, HAS_CPU_FEATURE (SSSE3), - __memmove_ssse3_rep) - IFUNC_IMPL_ADD (array, i, memmove, HAS_CPU_FEATURE (SSSE3), - __memmove_ssse3) - IFUNC_IMPL_ADD (array, i, memmove, HAS_CPU_FEATURE (SSE2), - __memmove_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_ia32)) - - /* Support sysdeps/i386/i686/multiarch/memrchr.S. */ - IFUNC_IMPL (i, name, memrchr, - IFUNC_IMPL_ADD (array, i, memrchr, HAS_CPU_FEATURE (SSE2), - __memrchr_sse2_bsf) - IFUNC_IMPL_ADD (array, i, memrchr, HAS_CPU_FEATURE (SSE2), - __memrchr_sse2) - IFUNC_IMPL_ADD (array, i, memrchr, 1, __memrchr_ia32)) - - /* Support sysdeps/i386/i686/multiarch/memset_chk.S. */ - IFUNC_IMPL (i, name, __memset_chk, - IFUNC_IMPL_ADD (array, i, __memset_chk, - HAS_CPU_FEATURE (SSE2), - __memset_chk_sse2_rep) - IFUNC_IMPL_ADD (array, i, __memset_chk, - HAS_CPU_FEATURE (SSE2), - __memset_chk_sse2) - IFUNC_IMPL_ADD (array, i, __memset_chk, 1, - __memset_chk_ia32)) - - /* Support sysdeps/i386/i686/multiarch/memset.S. */ - IFUNC_IMPL (i, name, memset, - IFUNC_IMPL_ADD (array, i, memset, HAS_CPU_FEATURE (SSE2), - __memset_sse2_rep) - IFUNC_IMPL_ADD (array, i, memset, HAS_CPU_FEATURE (SSE2), - __memset_sse2) - IFUNC_IMPL_ADD (array, i, memset, 1, __memset_ia32)) - - /* Support sysdeps/i386/i686/multiarch/rawmemchr.S. */ - IFUNC_IMPL (i, name, rawmemchr, - IFUNC_IMPL_ADD (array, i, rawmemchr, HAS_CPU_FEATURE (SSE2), - __rawmemchr_sse2_bsf) - IFUNC_IMPL_ADD (array, i, rawmemchr, HAS_CPU_FEATURE (SSE2), - __rawmemchr_sse2) - IFUNC_IMPL_ADD (array, i, rawmemchr, 1, __rawmemchr_ia32)) - - /* Support sysdeps/i386/i686/multiarch/stpncpy.S. */ - IFUNC_IMPL (i, name, stpncpy, - IFUNC_IMPL_ADD (array, i, stpncpy, HAS_CPU_FEATURE (SSSE3), - __stpncpy_ssse3) - IFUNC_IMPL_ADD (array, i, stpncpy, HAS_CPU_FEATURE (SSE2), - __stpncpy_sse2) - IFUNC_IMPL_ADD (array, i, stpncpy, 1, __stpncpy_ia32)) - - /* Support sysdeps/i386/i686/multiarch/stpcpy.S. */ - IFUNC_IMPL (i, name, stpcpy, - IFUNC_IMPL_ADD (array, i, stpcpy, HAS_CPU_FEATURE (SSSE3), - __stpcpy_ssse3) - IFUNC_IMPL_ADD (array, i, stpcpy, HAS_CPU_FEATURE (SSE2), - __stpcpy_sse2) - IFUNC_IMPL_ADD (array, i, stpcpy, 1, __stpcpy_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strcasecmp.S. */ - IFUNC_IMPL (i, name, strcasecmp, - IFUNC_IMPL_ADD (array, i, strcasecmp, - HAS_CPU_FEATURE (SSE4_2), - __strcasecmp_sse4_2) - IFUNC_IMPL_ADD (array, i, strcasecmp, - HAS_CPU_FEATURE (SSSE3), - __strcasecmp_ssse3) - IFUNC_IMPL_ADD (array, i, strcasecmp, 1, __strcasecmp_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strcasecmp_l.S. */ - IFUNC_IMPL (i, name, strcasecmp_l, - IFUNC_IMPL_ADD (array, i, strcasecmp_l, - HAS_CPU_FEATURE (SSE4_2), - __strcasecmp_l_sse4_2) - IFUNC_IMPL_ADD (array, i, strcasecmp_l, - HAS_CPU_FEATURE (SSSE3), - __strcasecmp_l_ssse3) - IFUNC_IMPL_ADD (array, i, strcasecmp_l, 1, - __strcasecmp_l_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strcat.S. */ - IFUNC_IMPL (i, name, strcat, - IFUNC_IMPL_ADD (array, i, strcat, HAS_CPU_FEATURE (SSSE3), - __strcat_ssse3) - IFUNC_IMPL_ADD (array, i, strcat, HAS_CPU_FEATURE (SSE2), - __strcat_sse2) - IFUNC_IMPL_ADD (array, i, strcat, 1, __strcat_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strchr.S. */ - IFUNC_IMPL (i, name, strchr, - IFUNC_IMPL_ADD (array, i, strchr, HAS_CPU_FEATURE (SSE2), - __strchr_sse2_bsf) - IFUNC_IMPL_ADD (array, i, strchr, HAS_CPU_FEATURE (SSE2), - __strchr_sse2) - IFUNC_IMPL_ADD (array, i, strchr, 1, __strchr_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strcmp.S. */ - IFUNC_IMPL (i, name, strcmp, - IFUNC_IMPL_ADD (array, i, strcmp, HAS_CPU_FEATURE (SSE4_2), - __strcmp_sse4_2) - IFUNC_IMPL_ADD (array, i, strcmp, HAS_CPU_FEATURE (SSSE3), - __strcmp_ssse3) - IFUNC_IMPL_ADD (array, i, strcmp, 1, __strcmp_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strcpy.S. */ - IFUNC_IMPL (i, name, strcpy, - IFUNC_IMPL_ADD (array, i, strcpy, HAS_CPU_FEATURE (SSSE3), - __strcpy_ssse3) - IFUNC_IMPL_ADD (array, i, strcpy, HAS_CPU_FEATURE (SSE2), - __strcpy_sse2) - IFUNC_IMPL_ADD (array, i, strcpy, 1, __strcpy_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strcspn.S. */ - IFUNC_IMPL (i, name, strcspn, - IFUNC_IMPL_ADD (array, i, strcspn, HAS_CPU_FEATURE (SSE4_2), - __strcspn_sse42) - IFUNC_IMPL_ADD (array, i, strcspn, 1, __strcspn_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strncase.S. */ - IFUNC_IMPL (i, name, strncasecmp, - IFUNC_IMPL_ADD (array, i, strncasecmp, - HAS_CPU_FEATURE (SSE4_2), - __strncasecmp_sse4_2) - IFUNC_IMPL_ADD (array, i, strncasecmp, - HAS_CPU_FEATURE (SSSE3), - __strncasecmp_ssse3) - IFUNC_IMPL_ADD (array, i, strncasecmp, 1, - __strncasecmp_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strncase_l.S. */ - IFUNC_IMPL (i, name, strncasecmp_l, - IFUNC_IMPL_ADD (array, i, strncasecmp_l, - HAS_CPU_FEATURE (SSE4_2), - __strncasecmp_l_sse4_2) - IFUNC_IMPL_ADD (array, i, strncasecmp_l, - HAS_CPU_FEATURE (SSSE3), - __strncasecmp_l_ssse3) - IFUNC_IMPL_ADD (array, i, strncasecmp_l, 1, - __strncasecmp_l_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strncat.S. */ - IFUNC_IMPL (i, name, strncat, - IFUNC_IMPL_ADD (array, i, strncat, HAS_CPU_FEATURE (SSSE3), - __strncat_ssse3) - IFUNC_IMPL_ADD (array, i, strncat, HAS_CPU_FEATURE (SSE2), - __strncat_sse2) - IFUNC_IMPL_ADD (array, i, strncat, 1, __strncat_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strncpy.S. */ - IFUNC_IMPL (i, name, strncpy, - IFUNC_IMPL_ADD (array, i, strncpy, HAS_CPU_FEATURE (SSSE3), - __strncpy_ssse3) - IFUNC_IMPL_ADD (array, i, strncpy, HAS_CPU_FEATURE (SSE2), - __strncpy_sse2) - IFUNC_IMPL_ADD (array, i, strncpy, 1, __strncpy_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strnlen.S. */ - IFUNC_IMPL (i, name, strnlen, - IFUNC_IMPL_ADD (array, i, strnlen, HAS_CPU_FEATURE (SSE2), - __strnlen_sse2) - IFUNC_IMPL_ADD (array, i, strnlen, 1, __strnlen_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strpbrk.S. */ - IFUNC_IMPL (i, name, strpbrk, - IFUNC_IMPL_ADD (array, i, strpbrk, HAS_CPU_FEATURE (SSE4_2), - __strpbrk_sse42) - IFUNC_IMPL_ADD (array, i, strpbrk, 1, __strpbrk_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strrchr.S. */ - IFUNC_IMPL (i, name, strrchr, - IFUNC_IMPL_ADD (array, i, strrchr, HAS_CPU_FEATURE (SSE2), - __strrchr_sse2_bsf) - IFUNC_IMPL_ADD (array, i, strrchr, HAS_CPU_FEATURE (SSE2), - __strrchr_sse2) - IFUNC_IMPL_ADD (array, i, strrchr, 1, __strrchr_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strspn.S. */ - IFUNC_IMPL (i, name, strspn, - IFUNC_IMPL_ADD (array, i, strspn, HAS_CPU_FEATURE (SSE4_2), - __strspn_sse42) - IFUNC_IMPL_ADD (array, i, strspn, 1, __strspn_ia32)) - - /* Support sysdeps/i386/i686/multiarch/wcschr.S. */ - IFUNC_IMPL (i, name, wcschr, - IFUNC_IMPL_ADD (array, i, wcschr, HAS_CPU_FEATURE (SSE2), - __wcschr_sse2) - IFUNC_IMPL_ADD (array, i, wcschr, 1, __wcschr_ia32)) - - /* Support sysdeps/i386/i686/multiarch/wcscmp.S. */ - IFUNC_IMPL (i, name, wcscmp, - IFUNC_IMPL_ADD (array, i, wcscmp, HAS_CPU_FEATURE (SSE2), - __wcscmp_sse2) - IFUNC_IMPL_ADD (array, i, wcscmp, 1, __wcscmp_ia32)) - - /* Support sysdeps/i386/i686/multiarch/wcscpy.S. */ - IFUNC_IMPL (i, name, wcscpy, - IFUNC_IMPL_ADD (array, i, wcscpy, HAS_CPU_FEATURE (SSSE3), - __wcscpy_ssse3) - IFUNC_IMPL_ADD (array, i, wcscpy, 1, __wcscpy_ia32)) - - /* Support sysdeps/i386/i686/multiarch/wcslen.S. */ - IFUNC_IMPL (i, name, wcslen, - IFUNC_IMPL_ADD (array, i, wcslen, HAS_CPU_FEATURE (SSE2), - __wcslen_sse2) - IFUNC_IMPL_ADD (array, i, wcslen, 1, __wcslen_ia32)) - - /* Support sysdeps/i386/i686/multiarch/wcsrchr.S. */ - IFUNC_IMPL (i, name, wcsrchr, - IFUNC_IMPL_ADD (array, i, wcsrchr, HAS_CPU_FEATURE (SSE2), - __wcsrchr_sse2) - IFUNC_IMPL_ADD (array, i, wcsrchr, 1, __wcsrchr_ia32)) - - /* Support sysdeps/i386/i686/multiarch/wmemcmp.S. */ - IFUNC_IMPL (i, name, wmemcmp, - IFUNC_IMPL_ADD (array, i, wmemcmp, HAS_CPU_FEATURE (SSE4_2), - __wmemcmp_sse4_2) - IFUNC_IMPL_ADD (array, i, wmemcmp, HAS_CPU_FEATURE (SSSE3), - __wmemcmp_ssse3) - IFUNC_IMPL_ADD (array, i, wmemcmp, 1, __wmemcmp_ia32)) - -#ifdef SHARED - /* Support sysdeps/i386/i686/multiarch/memcpy_chk.S. */ - IFUNC_IMPL (i, name, __memcpy_chk, - IFUNC_IMPL_ADD (array, i, __memcpy_chk, - HAS_CPU_FEATURE (SSSE3), - __memcpy_chk_ssse3_rep) - IFUNC_IMPL_ADD (array, i, __memcpy_chk, - HAS_CPU_FEATURE (SSSE3), - __memcpy_chk_ssse3) - IFUNC_IMPL_ADD (array, i, __memcpy_chk, - HAS_CPU_FEATURE (SSE2), - __memcpy_chk_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, __memcpy_chk, 1, - __memcpy_chk_ia32)) - - /* Support sysdeps/i386/i686/multiarch/memcpy.S. */ - IFUNC_IMPL (i, name, memcpy, - IFUNC_IMPL_ADD (array, i, memcpy, HAS_CPU_FEATURE (SSSE3), - __memcpy_ssse3_rep) - IFUNC_IMPL_ADD (array, i, memcpy, HAS_CPU_FEATURE (SSSE3), - __memcpy_ssse3) - IFUNC_IMPL_ADD (array, i, memcpy, HAS_CPU_FEATURE (SSE2), - __memcpy_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_ia32)) - - /* Support sysdeps/i386/i686/multiarch/mempcpy_chk.S. */ - IFUNC_IMPL (i, name, __mempcpy_chk, - IFUNC_IMPL_ADD (array, i, __mempcpy_chk, - HAS_CPU_FEATURE (SSSE3), - __mempcpy_chk_ssse3_rep) - IFUNC_IMPL_ADD (array, i, __mempcpy_chk, - HAS_CPU_FEATURE (SSSE3), - __mempcpy_chk_ssse3) - IFUNC_IMPL_ADD (array, i, __mempcpy_chk, - HAS_CPU_FEATURE (SSE2), - __mempcpy_chk_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, __mempcpy_chk, 1, - __mempcpy_chk_ia32)) - - /* Support sysdeps/i386/i686/multiarch/mempcpy.S. */ - IFUNC_IMPL (i, name, mempcpy, - IFUNC_IMPL_ADD (array, i, mempcpy, HAS_CPU_FEATURE (SSSE3), - __mempcpy_ssse3_rep) - IFUNC_IMPL_ADD (array, i, mempcpy, HAS_CPU_FEATURE (SSSE3), - __mempcpy_ssse3) - IFUNC_IMPL_ADD (array, i, mempcpy, HAS_CPU_FEATURE (SSE2), - __mempcpy_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, mempcpy, 1, __mempcpy_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strlen.S. */ - IFUNC_IMPL (i, name, strlen, - IFUNC_IMPL_ADD (array, i, strlen, HAS_CPU_FEATURE (SSE2), - __strlen_sse2_bsf) - IFUNC_IMPL_ADD (array, i, strlen, HAS_CPU_FEATURE (SSE2), - __strlen_sse2) - IFUNC_IMPL_ADD (array, i, strlen, 1, __strlen_ia32)) - - /* Support sysdeps/i386/i686/multiarch/strncmp.S. */ - IFUNC_IMPL (i, name, strncmp, - IFUNC_IMPL_ADD (array, i, strncmp, HAS_CPU_FEATURE (SSE4_2), - __strncmp_sse4_2) - IFUNC_IMPL_ADD (array, i, strncmp, HAS_CPU_FEATURE (SSSE3), - __strncmp_ssse3) - IFUNC_IMPL_ADD (array, i, strncmp, 1, __strncmp_ia32)) -#endif - - return i; -} diff --git a/sysdeps/i386/i686/multiarch/locale-defines.sym b/sysdeps/i386/i686/multiarch/locale-defines.sym deleted file mode 100644 index aebff9a4f9..0000000000 --- a/sysdeps/i386/i686/multiarch/locale-defines.sym +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include -#include - --- - -LOCALE_T___LOCALES offsetof (struct __locale_struct, __locales) -LC_CTYPE -_NL_CTYPE_NONASCII_CASE -LOCALE_DATA_VALUES offsetof (struct __locale_data, values) -SIZEOF_VALUES sizeof (((struct __locale_data *) 0)->values[0]) diff --git a/sysdeps/i386/i686/multiarch/memchr-sse2-bsf.S b/sysdeps/i386/i686/multiarch/memchr-sse2-bsf.S deleted file mode 100644 index dd316486e6..0000000000 --- a/sysdeps/i386/i686/multiarch/memchr-sse2-bsf.S +++ /dev/null @@ -1,502 +0,0 @@ -/* Optimized memchr with sse2 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# define PARMS 4 -# define STR1 PARMS -# define STR2 STR1+4 - -# ifndef USE_AS_RAWMEMCHR -# define LEN STR2+4 -# define RETURN POP(%edi); ret; CFI_PUSH(%edi); -# endif - -# ifndef MEMCHR -# define MEMCHR __memchr_sse2_bsf -# endif - - .text -ENTRY (MEMCHR) - - mov STR1(%esp), %ecx - movd STR2(%esp), %xmm1 - -# ifndef USE_AS_RAWMEMCHR - mov LEN(%esp), %edx - test %edx, %edx - jz L(return_null_1) -# endif - mov %ecx, %eax - - punpcklbw %xmm1, %xmm1 - punpcklbw %xmm1, %xmm1 - - and $63, %ecx - pshufd $0, %xmm1, %xmm1 - - cmp $48, %ecx - ja L(crosscache) - - movdqu (%eax), %xmm0 - pcmpeqb %xmm1, %xmm0 -/* Check if there is a match. */ - pmovmskb %xmm0, %ecx - test %ecx, %ecx - je L(unaligned_no_match_1) -/* Check which byte is a match. */ - bsf %ecx, %ecx - -# ifndef USE_AS_RAWMEMCHR - sub %ecx, %edx - jbe L(return_null_1) -# endif - add %ecx, %eax - ret - - .p2align 4 -L(unaligned_no_match_1): -# ifndef USE_AS_RAWMEMCHR - sub $16, %edx - jbe L(return_null_1) - PUSH (%edi) - lea 16(%eax), %edi - and $15, %eax - and $-16, %edi - add %eax, %edx -# else - lea 16(%eax), %edx - and $-16, %edx -# endif - jmp L(loop_prolog) - - .p2align 4 -L(return_null_1): - xor %eax, %eax - ret - -# ifndef USE_AS_RAWMEMCHR - CFI_POP (%edi) -# endif - - .p2align 4 -L(crosscache): -/* Handle unaligned string. */ - -# ifndef USE_AS_RAWMEMCHR - PUSH (%edi) - mov %eax, %edi - and $15, %ecx - and $-16, %edi - movdqa (%edi), %xmm0 -# else - mov %eax, %edx - and $15, %ecx - and $-16, %edx - movdqa (%edx), %xmm0 -# endif - pcmpeqb %xmm1, %xmm0 -/* Check if there is a match. */ - pmovmskb %xmm0, %eax -/* Remove the leading bytes. */ - sar %cl, %eax - test %eax, %eax - je L(unaligned_no_match) -/* Check which byte is a match. */ - bsf %eax, %eax - -# ifndef USE_AS_RAWMEMCHR - sub %eax, %edx - jbe L(return_null) - add %edi, %eax - add %ecx, %eax - RETURN -# else - add %edx, %eax - add %ecx, %eax - ret -# endif - - .p2align 4 -L(unaligned_no_match): -# ifndef USE_AS_RAWMEMCHR - /* Calculate the last acceptable address and check for possible - addition overflow by using satured math: - edx = ecx + edx - edx |= -(edx < ecx) */ - add %ecx, %edx - sbb %eax, %eax - or %eax, %edx - sub $16, %edx - jbe L(return_null) - add $16, %edi -# else - add $16, %edx -# endif - - .p2align 4 -/* Loop start on aligned string. */ -L(loop_prolog): -# ifndef USE_AS_RAWMEMCHR - sub $64, %edx - jbe L(exit_loop) - movdqa (%edi), %xmm0 -# else - movdqa (%edx), %xmm0 -# endif - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - -# ifndef USE_AS_RAWMEMCHR - movdqa 16(%edi), %xmm2 -# else - movdqa 16(%edx), %xmm2 -# endif - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches16) - -# ifndef USE_AS_RAWMEMCHR - movdqa 32(%edi), %xmm3 -# else - movdqa 32(%edx), %xmm3 -# endif - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches32) - -# ifndef USE_AS_RAWMEMCHR - movdqa 48(%edi), %xmm4 -# else - movdqa 48(%edx), %xmm4 -# endif - pcmpeqb %xmm1, %xmm4 - -# ifndef USE_AS_RAWMEMCHR - add $64, %edi -# else - add $64, %edx -# endif - pmovmskb %xmm4, %eax - test %eax, %eax - jnz L(matches0) - -# ifndef USE_AS_RAWMEMCHR - test $0x3f, %edi -# else - test $0x3f, %edx -# endif - jz L(align64_loop) - -# ifndef USE_AS_RAWMEMCHR - sub $64, %edx - jbe L(exit_loop) - movdqa (%edi), %xmm0 -# else - movdqa (%edx), %xmm0 -# endif - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - -# ifndef USE_AS_RAWMEMCHR - movdqa 16(%edi), %xmm2 -# else - movdqa 16(%edx), %xmm2 -# endif - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches16) - -# ifndef USE_AS_RAWMEMCHR - movdqa 32(%edi), %xmm3 -# else - movdqa 32(%edx), %xmm3 -# endif - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches32) - -# ifndef USE_AS_RAWMEMCHR - movdqa 48(%edi), %xmm3 -# else - movdqa 48(%edx), %xmm3 -# endif - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - -# ifndef USE_AS_RAWMEMCHR - add $64, %edi -# else - add $64, %edx -# endif - test %eax, %eax - jnz L(matches0) - -# ifndef USE_AS_RAWMEMCHR - mov %edi, %ecx - and $-64, %edi - and $63, %ecx - add %ecx, %edx -# else - and $-64, %edx -# endif - - .p2align 4 -L(align64_loop): -# ifndef USE_AS_RAWMEMCHR - sub $64, %edx - jbe L(exit_loop) - movdqa (%edi), %xmm0 - movdqa 16(%edi), %xmm2 - movdqa 32(%edi), %xmm3 - movdqa 48(%edi), %xmm4 -# else - movdqa (%edx), %xmm0 - movdqa 16(%edx), %xmm2 - movdqa 32(%edx), %xmm3 - movdqa 48(%edx), %xmm4 -# endif - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm1, %xmm2 - pcmpeqb %xmm1, %xmm3 - pcmpeqb %xmm1, %xmm4 - - pmaxub %xmm0, %xmm3 - pmaxub %xmm2, %xmm4 - pmaxub %xmm3, %xmm4 - pmovmskb %xmm4, %eax - -# ifndef USE_AS_RAWMEMCHR - add $64, %edi -# else - add $64, %edx -# endif - - test %eax, %eax - jz L(align64_loop) - -# ifndef USE_AS_RAWMEMCHR - sub $64, %edi -# else - sub $64, %edx -# endif - - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches16) - -# ifndef USE_AS_RAWMEMCHR - movdqa 32(%edi), %xmm3 -# else - movdqa 32(%edx), %xmm3 -# endif - - pcmpeqb %xmm1, %xmm3 - -# ifndef USE_AS_RAWMEMCHR - pcmpeqb 48(%edi), %xmm1 -# else - pcmpeqb 48(%edx), %xmm1 -# endif - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches32) - - pmovmskb %xmm1, %eax - bsf %eax, %eax - -# ifndef USE_AS_RAWMEMCHR - lea 48(%edi, %eax), %eax - RETURN -# else - lea 48(%edx, %eax), %eax - ret -# endif - -# ifndef USE_AS_RAWMEMCHR - .p2align 4 -L(exit_loop): - add $64, %edx - cmp $32, %edx - jbe L(exit_loop_32) - - movdqa (%edi), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - - movdqa 16(%edi), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches16) - - movdqa 32(%edi), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches32_1) - cmp $48, %edx - jbe L(return_null) - - pcmpeqb 48(%edi), %xmm1 - pmovmskb %xmm1, %eax - test %eax, %eax - jnz L(matches48_1) - xor %eax, %eax - RETURN - - .p2align 4 -L(exit_loop_32): - movdqa (%edi), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches_1) - cmp $16, %edx - jbe L(return_null) - - pcmpeqb 16(%edi), %xmm1 - pmovmskb %xmm1, %eax - test %eax, %eax - jnz L(matches16_1) - xor %eax, %eax - RETURN -# endif - .p2align 4 -L(matches0): - bsf %eax, %eax -# ifndef USE_AS_RAWMEMCHR - lea -16(%eax, %edi), %eax - RETURN -# else - lea -16(%eax, %edx), %eax - ret -# endif - - .p2align 4 -L(matches): - bsf %eax, %eax -# ifndef USE_AS_RAWMEMCHR - add %edi, %eax - RETURN -# else - add %edx, %eax - ret -# endif - - .p2align 4 -L(matches16): - bsf %eax, %eax -# ifndef USE_AS_RAWMEMCHR - lea 16(%eax, %edi), %eax - RETURN -# else - lea 16(%eax, %edx), %eax - ret -# endif - - .p2align 4 -L(matches32): - bsf %eax, %eax -# ifndef USE_AS_RAWMEMCHR - lea 32(%eax, %edi), %eax - RETURN -# else - lea 32(%eax, %edx), %eax - ret -# endif - -# ifndef USE_AS_RAWMEMCHR - .p2align 4 -L(matches_1): - bsf %eax, %eax - sub %eax, %edx - jbe L(return_null) - - add %edi, %eax - RETURN - - .p2align 4 -L(matches16_1): - sub $16, %edx - bsf %eax, %eax - sub %eax, %edx - jbe L(return_null) - - lea 16(%edi, %eax), %eax - RETURN - - .p2align 4 -L(matches32_1): - sub $32, %edx - bsf %eax, %eax - sub %eax, %edx - jbe L(return_null) - - lea 32(%edi, %eax), %eax - RETURN - - .p2align 4 -L(matches48_1): - sub $48, %edx - bsf %eax, %eax - sub %eax, %edx - jbe L(return_null) - - lea 48(%edi, %eax), %eax - RETURN -# endif - .p2align 4 -L(return_null): - xor %eax, %eax -# ifndef USE_AS_RAWMEMCHR - RETURN -# else - ret -# endif - -END (MEMCHR) -#endif diff --git a/sysdeps/i386/i686/multiarch/memchr-sse2.S b/sysdeps/i386/i686/multiarch/memchr-sse2.S deleted file mode 100644 index 172d70de13..0000000000 --- a/sysdeps/i386/i686/multiarch/memchr-sse2.S +++ /dev/null @@ -1,709 +0,0 @@ -/* Optimized memchr with sse2 without bsf - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# ifndef USE_AS_RAWMEMCHR -# define ENTRANCE PUSH(%edi); -# define PARMS 8 -# define RETURN POP(%edi); ret; CFI_PUSH(%edi); -# else -# define ENTRANCE -# define PARMS 4 -# endif - -# define STR1 PARMS -# define STR2 STR1+4 - -# ifndef USE_AS_RAWMEMCHR -# define LEN STR2+4 -# endif - -# ifndef MEMCHR -# define MEMCHR __memchr_sse2 -# endif - - atom_text_section -ENTRY (MEMCHR) - ENTRANCE - mov STR1(%esp), %ecx - movd STR2(%esp), %xmm1 -# ifndef USE_AS_RAWMEMCHR - mov LEN(%esp), %edx - test %edx, %edx - jz L(return_null) -# endif - - punpcklbw %xmm1, %xmm1 -# ifndef USE_AS_RAWMEMCHR - mov %ecx, %edi -# else - mov %ecx, %edx -# endif - punpcklbw %xmm1, %xmm1 - - and $63, %ecx - pshufd $0, %xmm1, %xmm1 - cmp $48, %ecx - ja L(crosscache) - -# ifndef USE_AS_RAWMEMCHR - movdqu (%edi), %xmm0 -# else - movdqu (%edx), %xmm0 -# endif - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax -# ifndef USE_AS_RAWMEMCHR - jnz L(match_case2_prolog) - - sub $16, %edx - jbe L(return_null) - lea 16(%edi), %edi - and $15, %ecx - and $-16, %edi - add %ecx, %edx -# else - jnz L(match_case1_prolog) - lea 16(%edx), %edx - and $-16, %edx -# endif - jmp L(loop_prolog) - - .p2align 4 -L(crosscache): - and $15, %ecx -# ifndef USE_AS_RAWMEMCHR - and $-16, %edi - movdqa (%edi), %xmm0 -# else - and $-16, %edx - movdqa (%edx), %xmm0 -# endif - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - sar %cl, %eax - test %eax, %eax - -# ifndef USE_AS_RAWMEMCHR - jnz L(match_case2_prolog1) - /* "ecx" is less than 16. Calculate "edx + ecx - 16" by using - "edx - (16 - ecx)" instead of "(edx + ecx) - 16" to void - possible addition overflow. */ - neg %ecx - add $16, %ecx - sub %ecx, %edx - jbe L(return_null) - lea 16(%edi), %edi -# else - jnz L(match_case1_prolog1) - lea 16(%edx), %edx -# endif - - .p2align 4 -L(loop_prolog): -# ifndef USE_AS_RAWMEMCHR - sub $64, %edx - jbe L(exit_loop) - movdqa (%edi), %xmm0 -# else - movdqa (%edx), %xmm0 -# endif - pcmpeqb %xmm1, %xmm0 - xor %ecx, %ecx - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(match_case1) - -# ifndef USE_AS_RAWMEMCHR - movdqa 16(%edi), %xmm2 -# else - movdqa 16(%edx), %xmm2 -# endif - pcmpeqb %xmm1, %xmm2 - lea 16(%ecx), %ecx - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(match_case1) - -# ifndef USE_AS_RAWMEMCHR - movdqa 32(%edi), %xmm3 -# else - movdqa 32(%edx), %xmm3 -# endif - pcmpeqb %xmm1, %xmm3 - lea 16(%ecx), %ecx - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(match_case1) - -# ifndef USE_AS_RAWMEMCHR - movdqa 48(%edi), %xmm4 -# else - movdqa 48(%edx), %xmm4 -# endif - pcmpeqb %xmm1, %xmm4 - lea 16(%ecx), %ecx - pmovmskb %xmm4, %eax - test %eax, %eax - jnz L(match_case1) - -# ifndef USE_AS_RAWMEMCHR - lea 64(%edi), %edi - sub $64, %edx - jbe L(exit_loop) - - movdqa (%edi), %xmm0 -# else - lea 64(%edx), %edx - movdqa (%edx), %xmm0 -# endif - pcmpeqb %xmm1, %xmm0 - xor %ecx, %ecx - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(match_case1) - -# ifndef USE_AS_RAWMEMCHR - movdqa 16(%edi), %xmm2 -# else - movdqa 16(%edx), %xmm2 -# endif - pcmpeqb %xmm1, %xmm2 - lea 16(%ecx), %ecx - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(match_case1) - -# ifndef USE_AS_RAWMEMCHR - movdqa 32(%edi), %xmm3 -# else - movdqa 32(%edx), %xmm3 -# endif - pcmpeqb %xmm1, %xmm3 - lea 16(%ecx), %ecx - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(match_case1) - -# ifndef USE_AS_RAWMEMCHR - movdqa 48(%edi), %xmm4 -# else - movdqa 48(%edx), %xmm4 -# endif - pcmpeqb %xmm1, %xmm4 - lea 16(%ecx), %ecx - pmovmskb %xmm4, %eax - test %eax, %eax - jnz L(match_case1) - -# ifndef USE_AS_RAWMEMCHR - lea 64(%edi), %edi - mov %edi, %ecx - and $-64, %edi - and $63, %ecx - add %ecx, %edx -# else - lea 64(%edx), %edx - and $-64, %edx -# endif - - .p2align 4 -L(align64_loop): - -# ifndef USE_AS_RAWMEMCHR - sub $64, %edx - jbe L(exit_loop) - movdqa (%edi), %xmm0 - movdqa 16(%edi), %xmm2 - movdqa 32(%edi), %xmm3 - movdqa 48(%edi), %xmm4 -# else - movdqa (%edx), %xmm0 - movdqa 16(%edx), %xmm2 - movdqa 32(%edx), %xmm3 - movdqa 48(%edx), %xmm4 -# endif - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm1, %xmm2 - pcmpeqb %xmm1, %xmm3 - pcmpeqb %xmm1, %xmm4 - - pmaxub %xmm0, %xmm3 - pmaxub %xmm2, %xmm4 - pmaxub %xmm3, %xmm4 -# ifndef USE_AS_RAWMEMCHR - add $64, %edi -# else - add $64, %edx -# endif - pmovmskb %xmm4, %eax - - test %eax, %eax - jz L(align64_loop) - -# ifndef USE_AS_RAWMEMCHR - sub $64, %edi -# else - sub $64, %edx -# endif - - pmovmskb %xmm0, %eax - xor %ecx, %ecx - test %eax, %eax - jnz L(match_case1) - - pmovmskb %xmm2, %eax - lea 16(%ecx), %ecx - test %eax, %eax - jnz L(match_case1) - -# ifndef USE_AS_RAWMEMCHR - movdqa 32(%edi), %xmm3 -# else - movdqa 32(%edx), %xmm3 -# endif - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - lea 16(%ecx), %ecx - test %eax, %eax - jnz L(match_case1) - -# ifndef USE_AS_RAWMEMCHR - pcmpeqb 48(%edi), %xmm1 -# else - pcmpeqb 48(%edx), %xmm1 -# endif - pmovmskb %xmm1, %eax - lea 16(%ecx), %ecx - - .p2align 4 -L(match_case1): -# ifndef USE_AS_RAWMEMCHR - add %ecx, %edi -# else -L(match_case1_prolog1): - add %ecx, %edx -L(match_case1_prolog): -# endif - test %al, %al - jz L(match_case1_high) - mov %al, %cl - and $15, %cl - jz L(match_case1_8) - test $0x01, %al - jnz L(ExitCase1_1) - test $0x02, %al - jnz L(ExitCase1_2) - test $0x04, %al - jnz L(ExitCase1_3) -# ifndef USE_AS_RAWMEMCHR - lea 3(%edi), %eax - RETURN -# else - lea 3(%edx), %eax - ret -# endif - - .p2align 4 -L(match_case1_8): - test $0x10, %al - jnz L(ExitCase1_5) - test $0x20, %al - jnz L(ExitCase1_6) - test $0x40, %al - jnz L(ExitCase1_7) -# ifndef USE_AS_RAWMEMCHR - lea 7(%edi), %eax - RETURN -# else - lea 7(%edx), %eax - ret -# endif - - .p2align 4 -L(match_case1_high): - mov %ah, %ch - and $15, %ch - jz L(match_case1_high_8) - test $0x01, %ah - jnz L(ExitCase1_9) - test $0x02, %ah - jnz L(ExitCase1_10) - test $0x04, %ah - jnz L(ExitCase1_11) -# ifndef USE_AS_RAWMEMCHR - lea 11(%edi), %eax - RETURN -# else - lea 11(%edx), %eax - ret -# endif - - .p2align 4 -L(match_case1_high_8): - test $0x10, %ah - jnz L(ExitCase1_13) - test $0x20, %ah - jnz L(ExitCase1_14) - test $0x40, %ah - jnz L(ExitCase1_15) -# ifndef USE_AS_RAWMEMCHR - lea 15(%edi), %eax - RETURN -# else - lea 15(%edx), %eax - ret -# endif - -# ifndef USE_AS_RAWMEMCHR - .p2align 4 -L(exit_loop): - add $64, %edx - - movdqa (%edi), %xmm0 - pcmpeqb %xmm1, %xmm0 - xor %ecx, %ecx - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(match_case2) - cmp $16, %edx - jbe L(return_null) - - movdqa 16(%edi), %xmm2 - pcmpeqb %xmm1, %xmm2 - lea 16(%ecx), %ecx - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(match_case2) - cmp $32, %edx - jbe L(return_null) - - movdqa 32(%edi), %xmm3 - pcmpeqb %xmm1, %xmm3 - lea 16(%ecx), %ecx - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(match_case2) - cmp $48, %edx - jbe L(return_null) - - pcmpeqb 48(%edi), %xmm1 - lea 16(%ecx), %ecx - pmovmskb %xmm1, %eax - test %eax, %eax - jnz L(match_case2) - - xor %eax, %eax - RETURN -# endif - - .p2align 4 -L(ExitCase1_1): -# ifndef USE_AS_RAWMEMCHR - mov %edi, %eax - RETURN -# else - mov %edx, %eax - ret -# endif - - .p2align 4 -L(ExitCase1_2): -# ifndef USE_AS_RAWMEMCHR - lea 1(%edi), %eax - RETURN -# else - lea 1(%edx), %eax - ret -# endif - - .p2align 4 -L(ExitCase1_3): -# ifndef USE_AS_RAWMEMCHR - lea 2(%edi), %eax - RETURN -# else - lea 2(%edx), %eax - ret -# endif - - .p2align 4 -L(ExitCase1_5): -# ifndef USE_AS_RAWMEMCHR - lea 4(%edi), %eax - RETURN -# else - lea 4(%edx), %eax - ret -# endif - - .p2align 4 -L(ExitCase1_6): -# ifndef USE_AS_RAWMEMCHR - lea 5(%edi), %eax - RETURN -# else - lea 5(%edx), %eax - ret -# endif - - .p2align 4 -L(ExitCase1_7): -# ifndef USE_AS_RAWMEMCHR - lea 6(%edi), %eax - RETURN -# else - lea 6(%edx), %eax - ret -# endif - - .p2align 4 -L(ExitCase1_9): -# ifndef USE_AS_RAWMEMCHR - lea 8(%edi), %eax - RETURN -# else - lea 8(%edx), %eax - ret -# endif - - .p2align 4 -L(ExitCase1_10): -# ifndef USE_AS_RAWMEMCHR - lea 9(%edi), %eax - RETURN -# else - lea 9(%edx), %eax - ret -# endif - - .p2align 4 -L(ExitCase1_11): -# ifndef USE_AS_RAWMEMCHR - lea 10(%edi), %eax - RETURN -# else - lea 10(%edx), %eax - ret -# endif - - .p2align 4 -L(ExitCase1_13): -# ifndef USE_AS_RAWMEMCHR - lea 12(%edi), %eax - RETURN -# else - lea 12(%edx), %eax - ret -# endif - - .p2align 4 -L(ExitCase1_14): -# ifndef USE_AS_RAWMEMCHR - lea 13(%edi), %eax - RETURN -# else - lea 13(%edx), %eax - ret -# endif - - .p2align 4 -L(ExitCase1_15): -# ifndef USE_AS_RAWMEMCHR - lea 14(%edi), %eax - RETURN -# else - lea 14(%edx), %eax - ret -# endif - -# ifndef USE_AS_RAWMEMCHR - .p2align 4 -L(match_case2): - sub %ecx, %edx -L(match_case2_prolog1): - add %ecx, %edi -L(match_case2_prolog): - test %al, %al - jz L(match_case2_high) - mov %al, %cl - and $15, %cl - jz L(match_case2_8) - test $0x01, %al - jnz L(ExitCase2_1) - test $0x02, %al - jnz L(ExitCase2_2) - test $0x04, %al - jnz L(ExitCase2_3) - sub $4, %edx - jb L(return_null) - lea 3(%edi), %eax - RETURN - - .p2align 4 -L(match_case2_8): - test $0x10, %al - jnz L(ExitCase2_5) - test $0x20, %al - jnz L(ExitCase2_6) - test $0x40, %al - jnz L(ExitCase2_7) - sub $8, %edx - jb L(return_null) - lea 7(%edi), %eax - RETURN - - .p2align 4 -L(match_case2_high): - mov %ah, %ch - and $15, %ch - jz L(match_case2_high_8) - test $0x01, %ah - jnz L(ExitCase2_9) - test $0x02, %ah - jnz L(ExitCase2_10) - test $0x04, %ah - jnz L(ExitCase2_11) - sub $12, %edx - jb L(return_null) - lea 11(%edi), %eax - RETURN - - .p2align 4 -L(match_case2_high_8): - test $0x10, %ah - jnz L(ExitCase2_13) - test $0x20, %ah - jnz L(ExitCase2_14) - test $0x40, %ah - jnz L(ExitCase2_15) - sub $16, %edx - jb L(return_null) - lea 15(%edi), %eax - RETURN - - .p2align 4 -L(ExitCase2_1): - mov %edi, %eax - RETURN - - .p2align 4 -L(ExitCase2_2): - sub $2, %edx - jb L(return_null) - lea 1(%edi), %eax - RETURN - - .p2align 4 -L(ExitCase2_3): - sub $3, %edx - jb L(return_null) - lea 2(%edi), %eax - RETURN - - .p2align 4 -L(ExitCase2_5): - sub $5, %edx - jb L(return_null) - lea 4(%edi), %eax - RETURN - - .p2align 4 -L(ExitCase2_6): - sub $6, %edx - jb L(return_null) - lea 5(%edi), %eax - RETURN - - .p2align 4 -L(ExitCase2_7): - sub $7, %edx - jb L(return_null) - lea 6(%edi), %eax - RETURN - - .p2align 4 -L(ExitCase2_9): - sub $9, %edx - jb L(return_null) - lea 8(%edi), %eax - RETURN - - .p2align 4 -L(ExitCase2_10): - sub $10, %edx - jb L(return_null) - lea 9(%edi), %eax - RETURN - - .p2align 4 -L(ExitCase2_11): - sub $11, %edx - jb L(return_null) - lea 10(%edi), %eax - RETURN - - .p2align 4 -L(ExitCase2_13): - sub $13, %edx - jb L(return_null) - lea 12(%edi), %eax - RETURN - - .p2align 4 -L(ExitCase2_14): - sub $14, %edx - jb L(return_null) - lea 13(%edi), %eax - RETURN - - .p2align 4 -L(ExitCase2_15): - sub $15, %edx - jb L(return_null) - lea 14(%edi), %eax - RETURN -# endif - - .p2align 4 -L(return_null): - xor %eax, %eax -# ifndef USE_AS_RAWMEMCHR - RETURN -# else - ret -# endif - -END (MEMCHR) -#endif diff --git a/sysdeps/i386/i686/multiarch/memchr.S b/sysdeps/i386/i686/multiarch/memchr.S deleted file mode 100644 index bd0dace290..0000000000 --- a/sysdeps/i386/i686/multiarch/memchr.S +++ /dev/null @@ -1,65 +0,0 @@ -/* Multiple versions of memchr - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if IS_IN (libc) - .text -ENTRY(__memchr) - .type __memchr, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - HAS_CPU_FEATURE (SSE2) - jz 2f - HAS_ARCH_FEATURE (Slow_BSF) - jz 3f - - LOAD_FUNC_GOT_EAX ( __memchr_sse2) - ret - -2: LOAD_FUNC_GOT_EAX (__memchr_ia32) - ret - -3: LOAD_FUNC_GOT_EAX (__memchr_sse2_bsf) - ret -END(__memchr) - -weak_alias(__memchr, memchr) - -# undef ENTRY -# define ENTRY(name) \ - .type __memchr_ia32, @function; \ - .globl __memchr_ia32; \ - .p2align 4; \ - __memchr_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __memchr_ia32, .-__memchr_ia32 - -# undef libc_hidden_builtin_def -/* IFUNC doesn't work with the hidden functions in shared library since - they will be called without setting up EBX needed for PLT which is - used by IFUNC. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_memchr; __GI_memchr = __memchr_ia32 - -#endif -#include "../../memchr.S" diff --git a/sysdeps/i386/i686/multiarch/memcmp-sse4.S b/sysdeps/i386/i686/multiarch/memcmp-sse4.S deleted file mode 100644 index 2aa13048b2..0000000000 --- a/sysdeps/i386/i686/multiarch/memcmp-sse4.S +++ /dev/null @@ -1,1225 +0,0 @@ -/* memcmp with SSE4.2, wmemcmp with SSE4.2 - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include - -# ifndef MEMCMP -# define MEMCMP __memcmp_sse4_2 -# endif - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# define PARMS 4 -# define BLK1 PARMS -# define BLK2 BLK1 + 4 -# define LEN BLK2 + 4 -# define RETURN POP (%ebx); ret; CFI_PUSH (%ebx) - - -# ifdef SHARED -# define JMPTBL(I, B) I - B - -/* Load an entry in a jump table into EBX and branch to it. TABLE is a - jump table with relative offsets. INDEX is a register contains the - index into the jump table. SCALE is the scale of INDEX. */ - -# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ -/* We first load PC into EBX. */ \ - SETUP_PIC_REG(bx); \ -/* Get the address of the jump table. */ \ - addl $(TABLE - .), %ebx; \ -/* Get the entry and convert the relative offset to the \ - absolute address. */ \ - addl (%ebx,INDEX,SCALE), %ebx; \ -/* We loaded the jump table and adjusted EDX/ESI. Go. */ \ - jmp *%ebx -# else -# define JMPTBL(I, B) I - -/* Load an entry in a jump table into EBX and branch to it. TABLE is a - jump table with relative offsets. INDEX is a register contains the - index into the jump table. SCALE is the scale of INDEX. */ -# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ - jmp *TABLE(,INDEX,SCALE) -# endif - - -/* Warning! - wmemcmp has to use SIGNED comparison for elements. - memcmp has to use UNSIGNED comparison for elemnts. -*/ - - .section .text.sse4.2,"ax",@progbits -ENTRY (MEMCMP) - movl BLK1(%esp), %eax - movl BLK2(%esp), %edx - movl LEN(%esp), %ecx - -# ifdef USE_AS_WMEMCMP - shl $2, %ecx - test %ecx, %ecx - jz L(return0) -# else - cmp $1, %ecx - jbe L(less1bytes) -# endif - - pxor %xmm0, %xmm0 - cmp $64, %ecx - ja L(64bytesormore) - cmp $8, %ecx - -# ifndef USE_AS_WMEMCMP - PUSH (%ebx) - jb L(less8bytes) -# else - jb L(less8bytes) - PUSH (%ebx) -# endif - - add %ecx, %edx - add %ecx, %eax - BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %ecx, 4) - -# ifndef USE_AS_WMEMCMP - .p2align 4 -L(less8bytes): - mov (%eax), %bl - cmpb (%edx), %bl - jne L(nonzero) - - mov 1(%eax), %bl - cmpb 1(%edx), %bl - jne L(nonzero) - - cmp $2, %ecx - jz L(0bytes) - - mov 2(%eax), %bl - cmpb 2(%edx), %bl - jne L(nonzero) - - cmp $3, %ecx - jz L(0bytes) - - mov 3(%eax), %bl - cmpb 3(%edx), %bl - jne L(nonzero) - - cmp $4, %ecx - jz L(0bytes) - - mov 4(%eax), %bl - cmpb 4(%edx), %bl - jne L(nonzero) - - cmp $5, %ecx - jz L(0bytes) - - mov 5(%eax), %bl - cmpb 5(%edx), %bl - jne L(nonzero) - - cmp $6, %ecx - jz L(0bytes) - - mov 6(%eax), %bl - cmpb 6(%edx), %bl - je L(0bytes) - -L(nonzero): - POP (%ebx) - mov $1, %eax - ja L(above) - neg %eax -L(above): - ret - CFI_PUSH (%ebx) -# endif - - .p2align 4 -L(0bytes): - POP (%ebx) - xor %eax, %eax - ret - -# ifdef USE_AS_WMEMCMP - -/* for wmemcmp, case N == 1 */ - - .p2align 4 -L(less8bytes): - mov (%eax), %ecx - cmp (%edx), %ecx - je L(return0) - mov $1, %eax - jg L(find_diff_bigger) - neg %eax - ret - - .p2align 4 -L(find_diff_bigger): - ret - - .p2align 4 -L(return0): - xor %eax, %eax - ret -# endif - -# ifndef USE_AS_WMEMCMP - .p2align 4 -L(less1bytes): - jb L(0bytesend) - movzbl (%eax), %eax - movzbl (%edx), %edx - sub %edx, %eax - ret - - .p2align 4 -L(0bytesend): - xor %eax, %eax - ret -# endif - .p2align 4 -L(64bytesormore): - PUSH (%ebx) - mov %ecx, %ebx - mov $64, %ecx - sub $64, %ebx -L(64bytesormore_loop): - movdqu (%eax), %xmm1 - movdqu (%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(find_16diff) - - movdqu 16(%eax), %xmm1 - movdqu 16(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(find_32diff) - - movdqu 32(%eax), %xmm1 - movdqu 32(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(find_48diff) - - movdqu 48(%eax), %xmm1 - movdqu 48(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(find_64diff) - add %ecx, %eax - add %ecx, %edx - sub %ecx, %ebx - jae L(64bytesormore_loop) - add %ebx, %ecx - add %ecx, %edx - add %ecx, %eax - BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %ecx, 4) - -# ifdef USE_AS_WMEMCMP - -/* Label needs only for table_64bytes filling */ -L(unreal_case): -/* no code here */ - -# endif - .p2align 4 -L(find_16diff): - sub $16, %ecx -L(find_32diff): - sub $16, %ecx -L(find_48diff): - sub $16, %ecx -L(find_64diff): - add %ecx, %edx - add %ecx, %eax - -# ifndef USE_AS_WMEMCMP - .p2align 4 -L(16bytes): - mov -16(%eax), %ecx - mov -16(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(12bytes): - mov -12(%eax), %ecx - mov -12(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(8bytes): - mov -8(%eax), %ecx - mov -8(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(4bytes): - mov -4(%eax), %ecx - mov -4(%edx), %ebx - cmp %ebx, %ecx - mov $0, %eax - jne L(find_diff) - RETURN -# else - .p2align 4 -L(16bytes): - mov -16(%eax), %ecx - cmp -16(%edx), %ecx - jne L(find_diff) -L(12bytes): - mov -12(%eax), %ecx - cmp -12(%edx), %ecx - jne L(find_diff) -L(8bytes): - mov -8(%eax), %ecx - cmp -8(%edx), %ecx - jne L(find_diff) -L(4bytes): - mov -4(%eax), %ecx - cmp -4(%edx), %ecx - mov $0, %eax - jne L(find_diff) - RETURN -# endif - -# ifndef USE_AS_WMEMCMP - .p2align 4 -L(49bytes): - movdqu -49(%eax), %xmm1 - movdqu -49(%edx), %xmm2 - mov $-49, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(33bytes): - movdqu -33(%eax), %xmm1 - movdqu -33(%edx), %xmm2 - mov $-33, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(17bytes): - mov -17(%eax), %ecx - mov -17(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(13bytes): - mov -13(%eax), %ecx - mov -13(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(9bytes): - mov -9(%eax), %ecx - mov -9(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(5bytes): - mov -5(%eax), %ecx - mov -5(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - movzbl -1(%eax), %ecx - cmp -1(%edx), %cl - mov $0, %eax - jne L(end) - RETURN - - .p2align 4 -L(50bytes): - mov $-50, %ebx - movdqu -50(%eax), %xmm1 - movdqu -50(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(34bytes): - mov $-34, %ebx - movdqu -34(%eax), %xmm1 - movdqu -34(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(18bytes): - mov -18(%eax), %ecx - mov -18(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(14bytes): - mov -14(%eax), %ecx - mov -14(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(10bytes): - mov -10(%eax), %ecx - mov -10(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(6bytes): - mov -6(%eax), %ecx - mov -6(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(2bytes): - movzwl -2(%eax), %ecx - movzwl -2(%edx), %ebx - cmp %bl, %cl - jne L(end) - cmp %bh, %ch - mov $0, %eax - jne L(end) - RETURN - - .p2align 4 -L(51bytes): - mov $-51, %ebx - movdqu -51(%eax), %xmm1 - movdqu -51(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(35bytes): - mov $-35, %ebx - movdqu -35(%eax), %xmm1 - movdqu -35(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(19bytes): - movl -19(%eax), %ecx - movl -19(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(15bytes): - movl -15(%eax), %ecx - movl -15(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(11bytes): - movl -11(%eax), %ecx - movl -11(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(7bytes): - movl -7(%eax), %ecx - movl -7(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(3bytes): - movzwl -3(%eax), %ecx - movzwl -3(%edx), %ebx - cmpb %bl, %cl - jne L(end) - cmp %bx, %cx - jne L(end) -L(1bytes): - movzbl -1(%eax), %eax - cmpb -1(%edx), %al - mov $0, %eax - jne L(end) - RETURN -# endif - .p2align 4 -L(52bytes): - movdqu -52(%eax), %xmm1 - movdqu -52(%edx), %xmm2 - mov $-52, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(36bytes): - movdqu -36(%eax), %xmm1 - movdqu -36(%edx), %xmm2 - mov $-36, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(20bytes): - movdqu -20(%eax), %xmm1 - movdqu -20(%edx), %xmm2 - mov $-20, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - mov -4(%eax), %ecx -# ifndef USE_AS_WMEMCMP - mov -4(%edx), %ebx - cmp %ebx, %ecx -# else - cmp -4(%edx), %ecx -# endif - mov $0, %eax - jne L(find_diff) - RETURN - -# ifndef USE_AS_WMEMCMP - .p2align 4 -L(53bytes): - movdqu -53(%eax), %xmm1 - movdqu -53(%edx), %xmm2 - mov $-53, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(37bytes): - mov $-37, %ebx - movdqu -37(%eax), %xmm1 - movdqu -37(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(21bytes): - mov $-21, %ebx - movdqu -21(%eax), %xmm1 - movdqu -21(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - mov -5(%eax), %ecx - mov -5(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - movzbl -1(%eax), %ecx - cmp -1(%edx), %cl - mov $0, %eax - jne L(end) - RETURN - - .p2align 4 -L(54bytes): - movdqu -54(%eax), %xmm1 - movdqu -54(%edx), %xmm2 - mov $-54, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(38bytes): - mov $-38, %ebx - movdqu -38(%eax), %xmm1 - movdqu -38(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(22bytes): - mov $-22, %ebx - movdqu -22(%eax), %xmm1 - movdqu -22(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - - mov -6(%eax), %ecx - mov -6(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - movzwl -2(%eax), %ecx - movzwl -2(%edx), %ebx - cmp %bl, %cl - jne L(end) - cmp %bh, %ch - mov $0, %eax - jne L(end) - RETURN - - .p2align 4 -L(55bytes): - movdqu -55(%eax), %xmm1 - movdqu -55(%edx), %xmm2 - mov $-55, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(39bytes): - mov $-39, %ebx - movdqu -39(%eax), %xmm1 - movdqu -39(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(23bytes): - mov $-23, %ebx - movdqu -23(%eax), %xmm1 - movdqu -23(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - movl -7(%eax), %ecx - movl -7(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - movzwl -3(%eax), %ecx - movzwl -3(%edx), %ebx - cmpb %bl, %cl - jne L(end) - cmp %bx, %cx - jne L(end) - movzbl -1(%eax), %eax - cmpb -1(%edx), %al - mov $0, %eax - jne L(end) - RETURN -# endif - .p2align 4 -L(56bytes): - movdqu -56(%eax), %xmm1 - movdqu -56(%edx), %xmm2 - mov $-56, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(40bytes): - mov $-40, %ebx - movdqu -40(%eax), %xmm1 - movdqu -40(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(24bytes): - mov $-24, %ebx - movdqu -24(%eax), %xmm1 - movdqu -24(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - - mov -8(%eax), %ecx -# ifndef USE_AS_WMEMCMP - mov -8(%edx), %ebx - cmp %ebx, %ecx -# else - cmp -8(%edx), %ecx -# endif - jne L(find_diff) - - mov -4(%eax), %ecx -# ifndef USE_AS_WMEMCMP - mov -4(%edx), %ebx - cmp %ebx, %ecx -# else - cmp -4(%edx), %ecx -# endif - mov $0, %eax - jne L(find_diff) - RETURN - -# ifndef USE_AS_WMEMCMP - .p2align 4 -L(57bytes): - movdqu -57(%eax), %xmm1 - movdqu -57(%edx), %xmm2 - mov $-57, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(41bytes): - mov $-41, %ebx - movdqu -41(%eax), %xmm1 - movdqu -41(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(25bytes): - mov $-25, %ebx - movdqu -25(%eax), %xmm1 - movdqu -25(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - mov -9(%eax), %ecx - mov -9(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - mov -5(%eax), %ecx - mov -5(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - movzbl -1(%eax), %ecx - cmp -1(%edx), %cl - mov $0, %eax - jne L(end) - RETURN - - .p2align 4 -L(58bytes): - movdqu -58(%eax), %xmm1 - movdqu -58(%edx), %xmm2 - mov $-58, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(42bytes): - mov $-42, %ebx - movdqu -42(%eax), %xmm1 - movdqu -42(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(26bytes): - mov $-26, %ebx - movdqu -26(%eax), %xmm1 - movdqu -26(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - - mov -10(%eax), %ecx - mov -10(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - - mov -6(%eax), %ecx - mov -6(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - - movzwl -2(%eax), %ecx - movzwl -2(%edx), %ebx - cmp %bl, %cl - jne L(end) - cmp %bh, %ch - mov $0, %eax - jne L(end) - RETURN - - .p2align 4 -L(59bytes): - movdqu -59(%eax), %xmm1 - movdqu -59(%edx), %xmm2 - mov $-59, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(43bytes): - mov $-43, %ebx - movdqu -43(%eax), %xmm1 - movdqu -43(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(27bytes): - mov $-27, %ebx - movdqu -27(%eax), %xmm1 - movdqu -27(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - movl -11(%eax), %ecx - movl -11(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - movl -7(%eax), %ecx - movl -7(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - movzwl -3(%eax), %ecx - movzwl -3(%edx), %ebx - cmpb %bl, %cl - jne L(end) - cmp %bx, %cx - jne L(end) - movzbl -1(%eax), %eax - cmpb -1(%edx), %al - mov $0, %eax - jne L(end) - RETURN -# endif - .p2align 4 -L(60bytes): - movdqu -60(%eax), %xmm1 - movdqu -60(%edx), %xmm2 - mov $-60, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(44bytes): - mov $-44, %ebx - movdqu -44(%eax), %xmm1 - movdqu -44(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(28bytes): - mov $-28, %ebx - movdqu -28(%eax), %xmm1 - movdqu -28(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - - mov -12(%eax), %ecx -# ifndef USE_AS_WMEMCMP - mov -12(%edx), %ebx - cmp %ebx, %ecx -# else - cmp -12(%edx), %ecx -# endif - jne L(find_diff) - - mov -8(%eax), %ecx -# ifndef USE_AS_WMEMCMP - mov -8(%edx), %ebx - cmp %ebx, %ecx -# else - cmp -8(%edx), %ecx -# endif - jne L(find_diff) - - mov -4(%eax), %ecx -# ifndef USE_AS_WMEMCMP - mov -4(%edx), %ebx - cmp %ebx, %ecx -# else - cmp -4(%edx), %ecx -# endif - mov $0, %eax - jne L(find_diff) - RETURN - -# ifndef USE_AS_WMEMCMP - .p2align 4 -L(61bytes): - movdqu -61(%eax), %xmm1 - movdqu -61(%edx), %xmm2 - mov $-61, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(45bytes): - mov $-45, %ebx - movdqu -45(%eax), %xmm1 - movdqu -45(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(29bytes): - mov $-29, %ebx - movdqu -29(%eax), %xmm1 - movdqu -29(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - - mov -13(%eax), %ecx - mov -13(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - - mov -9(%eax), %ecx - mov -9(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - - mov -5(%eax), %ecx - mov -5(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - movzbl -1(%eax), %ecx - cmp -1(%edx), %cl - mov $0, %eax - jne L(end) - RETURN - - .p2align 4 -L(62bytes): - movdqu -62(%eax), %xmm1 - movdqu -62(%edx), %xmm2 - mov $-62, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(46bytes): - mov $-46, %ebx - movdqu -46(%eax), %xmm1 - movdqu -46(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(30bytes): - mov $-30, %ebx - movdqu -30(%eax), %xmm1 - movdqu -30(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - mov -14(%eax), %ecx - mov -14(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - mov -10(%eax), %ecx - mov -10(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - mov -6(%eax), %ecx - mov -6(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - movzwl -2(%eax), %ecx - movzwl -2(%edx), %ebx - cmp %bl, %cl - jne L(end) - cmp %bh, %ch - mov $0, %eax - jne L(end) - RETURN - - .p2align 4 -L(63bytes): - movdqu -63(%eax), %xmm1 - movdqu -63(%edx), %xmm2 - mov $-63, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(47bytes): - mov $-47, %ebx - movdqu -47(%eax), %xmm1 - movdqu -47(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(31bytes): - mov $-31, %ebx - movdqu -31(%eax), %xmm1 - movdqu -31(%edx), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - - movl -15(%eax), %ecx - movl -15(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - movl -11(%eax), %ecx - movl -11(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - movl -7(%eax), %ecx - movl -7(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - movzwl -3(%eax), %ecx - movzwl -3(%edx), %ebx - cmpb %bl, %cl - jne L(end) - cmp %bx, %cx - jne L(end) - movzbl -1(%eax), %eax - cmpb -1(%edx), %al - mov $0, %eax - jne L(end) - RETURN -# endif - - .p2align 4 -L(64bytes): - movdqu -64(%eax), %xmm1 - movdqu -64(%edx), %xmm2 - mov $-64, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(48bytes): - movdqu -48(%eax), %xmm1 - movdqu -48(%edx), %xmm2 - mov $-48, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(32bytes): - movdqu -32(%eax), %xmm1 - movdqu -32(%edx), %xmm2 - mov $-32, %ebx - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - - mov -16(%eax), %ecx -# ifndef USE_AS_WMEMCMP - mov -16(%edx), %ebx - cmp %ebx, %ecx -# else - cmp -16(%edx), %ecx -# endif - jne L(find_diff) - - mov -12(%eax), %ecx -# ifndef USE_AS_WMEMCMP - mov -12(%edx), %ebx - cmp %ebx, %ecx -# else - cmp -12(%edx), %ecx -# endif - jne L(find_diff) - - mov -8(%eax), %ecx -# ifndef USE_AS_WMEMCMP - mov -8(%edx), %ebx - cmp %ebx, %ecx -# else - cmp -8(%edx), %ecx -# endif - jne L(find_diff) - - mov -4(%eax), %ecx -# ifndef USE_AS_WMEMCMP - mov -4(%edx), %ebx - cmp %ebx, %ecx -# else - cmp -4(%edx), %ecx -# endif - mov $0, %eax - jne L(find_diff) - RETURN - -# ifndef USE_AS_WMEMCMP - .p2align 4 -L(less16bytes): - add %ebx, %eax - add %ebx, %edx - - mov (%eax), %ecx - mov (%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - - mov 4(%eax), %ecx - mov 4(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - - mov 8(%eax), %ecx - mov 8(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - - mov 12(%eax), %ecx - mov 12(%edx), %ebx - cmp %ebx, %ecx - mov $0, %eax - jne L(find_diff) - RETURN -# else - .p2align 4 -L(less16bytes): - add %ebx, %eax - add %ebx, %edx - - mov (%eax), %ecx - cmp (%edx), %ecx - jne L(find_diff) - - mov 4(%eax), %ecx - cmp 4(%edx), %ecx - jne L(find_diff) - - mov 8(%eax), %ecx - cmp 8(%edx), %ecx - jne L(find_diff) - - mov 12(%eax), %ecx - cmp 12(%edx), %ecx - - mov $0, %eax - jne L(find_diff) - RETURN -# endif - - .p2align 4 -L(find_diff): -# ifndef USE_AS_WMEMCMP - cmpb %bl, %cl - jne L(end) - cmp %bx, %cx - jne L(end) - shr $16,%ecx - shr $16,%ebx - cmp %bl, %cl - jne L(end) - cmp %bx, %cx -L(end): - POP (%ebx) - mov $1, %eax - ja L(bigger) - neg %eax -L(bigger): - ret -# else - POP (%ebx) - mov $1, %eax - jg L(bigger) - neg %eax - ret - - .p2align 4 -L(bigger): - ret -# endif -END (MEMCMP) - - .section .rodata.sse4.2,"a",@progbits - .p2align 2 - .type L(table_64bytes), @object -# ifndef USE_AS_WMEMCMP -L(table_64bytes): - .int JMPTBL (L(0bytes), L(table_64bytes)) - .int JMPTBL (L(1bytes), L(table_64bytes)) - .int JMPTBL (L(2bytes), L(table_64bytes)) - .int JMPTBL (L(3bytes), L(table_64bytes)) - .int JMPTBL (L(4bytes), L(table_64bytes)) - .int JMPTBL (L(5bytes), L(table_64bytes)) - .int JMPTBL (L(6bytes), L(table_64bytes)) - .int JMPTBL (L(7bytes), L(table_64bytes)) - .int JMPTBL (L(8bytes), L(table_64bytes)) - .int JMPTBL (L(9bytes), L(table_64bytes)) - .int JMPTBL (L(10bytes), L(table_64bytes)) - .int JMPTBL (L(11bytes), L(table_64bytes)) - .int JMPTBL (L(12bytes), L(table_64bytes)) - .int JMPTBL (L(13bytes), L(table_64bytes)) - .int JMPTBL (L(14bytes), L(table_64bytes)) - .int JMPTBL (L(15bytes), L(table_64bytes)) - .int JMPTBL (L(16bytes), L(table_64bytes)) - .int JMPTBL (L(17bytes), L(table_64bytes)) - .int JMPTBL (L(18bytes), L(table_64bytes)) - .int JMPTBL (L(19bytes), L(table_64bytes)) - .int JMPTBL (L(20bytes), L(table_64bytes)) - .int JMPTBL (L(21bytes), L(table_64bytes)) - .int JMPTBL (L(22bytes), L(table_64bytes)) - .int JMPTBL (L(23bytes), L(table_64bytes)) - .int JMPTBL (L(24bytes), L(table_64bytes)) - .int JMPTBL (L(25bytes), L(table_64bytes)) - .int JMPTBL (L(26bytes), L(table_64bytes)) - .int JMPTBL (L(27bytes), L(table_64bytes)) - .int JMPTBL (L(28bytes), L(table_64bytes)) - .int JMPTBL (L(29bytes), L(table_64bytes)) - .int JMPTBL (L(30bytes), L(table_64bytes)) - .int JMPTBL (L(31bytes), L(table_64bytes)) - .int JMPTBL (L(32bytes), L(table_64bytes)) - .int JMPTBL (L(33bytes), L(table_64bytes)) - .int JMPTBL (L(34bytes), L(table_64bytes)) - .int JMPTBL (L(35bytes), L(table_64bytes)) - .int JMPTBL (L(36bytes), L(table_64bytes)) - .int JMPTBL (L(37bytes), L(table_64bytes)) - .int JMPTBL (L(38bytes), L(table_64bytes)) - .int JMPTBL (L(39bytes), L(table_64bytes)) - .int JMPTBL (L(40bytes), L(table_64bytes)) - .int JMPTBL (L(41bytes), L(table_64bytes)) - .int JMPTBL (L(42bytes), L(table_64bytes)) - .int JMPTBL (L(43bytes), L(table_64bytes)) - .int JMPTBL (L(44bytes), L(table_64bytes)) - .int JMPTBL (L(45bytes), L(table_64bytes)) - .int JMPTBL (L(46bytes), L(table_64bytes)) - .int JMPTBL (L(47bytes), L(table_64bytes)) - .int JMPTBL (L(48bytes), L(table_64bytes)) - .int JMPTBL (L(49bytes), L(table_64bytes)) - .int JMPTBL (L(50bytes), L(table_64bytes)) - .int JMPTBL (L(51bytes), L(table_64bytes)) - .int JMPTBL (L(52bytes), L(table_64bytes)) - .int JMPTBL (L(53bytes), L(table_64bytes)) - .int JMPTBL (L(54bytes), L(table_64bytes)) - .int JMPTBL (L(55bytes), L(table_64bytes)) - .int JMPTBL (L(56bytes), L(table_64bytes)) - .int JMPTBL (L(57bytes), L(table_64bytes)) - .int JMPTBL (L(58bytes), L(table_64bytes)) - .int JMPTBL (L(59bytes), L(table_64bytes)) - .int JMPTBL (L(60bytes), L(table_64bytes)) - .int JMPTBL (L(61bytes), L(table_64bytes)) - .int JMPTBL (L(62bytes), L(table_64bytes)) - .int JMPTBL (L(63bytes), L(table_64bytes)) - .int JMPTBL (L(64bytes), L(table_64bytes)) -# else -L(table_64bytes): - .int JMPTBL (L(0bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(4bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(8bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(12bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(16bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(20bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(24bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(28bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(32bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(36bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(40bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(44bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(48bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(52bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(56bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(60bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(64bytes), L(table_64bytes)) -# endif -#endif diff --git a/sysdeps/i386/i686/multiarch/memcmp-ssse3.S b/sysdeps/i386/i686/multiarch/memcmp-ssse3.S deleted file mode 100644 index 5ebf5a4d73..0000000000 --- a/sysdeps/i386/i686/multiarch/memcmp-ssse3.S +++ /dev/null @@ -1,2157 +0,0 @@ -/* memcmp with SSSE3, wmemcmp with SSSE3 - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include - -# ifndef MEMCMP -# define MEMCMP __memcmp_ssse3 -# endif - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# define PARMS 4 -# define BLK1 PARMS -# define BLK2 BLK1+4 -# define LEN BLK2+4 -# define RETURN_END POP (%edi); POP (%esi); POP (%ebx); ret -# define RETURN RETURN_END; cfi_restore_state; cfi_remember_state - -/* Warning! - wmemcmp has to use SIGNED comparison for elements. - memcmp has to use UNSIGNED comparison for elemnts. -*/ - - atom_text_section -ENTRY (MEMCMP) - movl LEN(%esp), %ecx - -# ifdef USE_AS_WMEMCMP - shl $2, %ecx - test %ecx, %ecx - jz L(zero) -# endif - - movl BLK1(%esp), %eax - cmp $48, %ecx - movl BLK2(%esp), %edx - jae L(48bytesormore) - -# ifndef USE_AS_WMEMCMP - cmp $1, %ecx - jbe L(less1bytes) -# endif - - PUSH (%ebx) - add %ecx, %edx - add %ecx, %eax - jmp L(less48bytes) - - CFI_POP (%ebx) - -# ifndef USE_AS_WMEMCMP - .p2align 4 -L(less1bytes): - jb L(zero) - movb (%eax), %cl - cmp (%edx), %cl - je L(zero) - mov $1, %eax - ja L(1bytesend) - neg %eax -L(1bytesend): - ret -# endif - - .p2align 4 -L(zero): - xor %eax, %eax - ret - - .p2align 4 -L(48bytesormore): - PUSH (%ebx) - PUSH (%esi) - PUSH (%edi) - cfi_remember_state - movdqu (%eax), %xmm3 - movdqu (%edx), %xmm0 - movl %eax, %edi - movl %edx, %esi - pcmpeqb %xmm0, %xmm3 - pmovmskb %xmm3, %edx - lea 16(%edi), %edi - - sub $0xffff, %edx - lea 16(%esi), %esi - jnz L(less16bytes) - mov %edi, %edx - and $0xf, %edx - xor %edx, %edi - sub %edx, %esi - add %edx, %ecx - mov %esi, %edx - and $0xf, %edx - jz L(shr_0) - xor %edx, %esi - -# ifndef USE_AS_WMEMCMP - cmp $8, %edx - jae L(next_unaligned_table) - cmp $0, %edx - je L(shr_0) - cmp $1, %edx - je L(shr_1) - cmp $2, %edx - je L(shr_2) - cmp $3, %edx - je L(shr_3) - cmp $4, %edx - je L(shr_4) - cmp $5, %edx - je L(shr_5) - cmp $6, %edx - je L(shr_6) - jmp L(shr_7) - - .p2align 2 -L(next_unaligned_table): - cmp $8, %edx - je L(shr_8) - cmp $9, %edx - je L(shr_9) - cmp $10, %edx - je L(shr_10) - cmp $11, %edx - je L(shr_11) - cmp $12, %edx - je L(shr_12) - cmp $13, %edx - je L(shr_13) - cmp $14, %edx - je L(shr_14) - jmp L(shr_15) -# else - cmp $0, %edx - je L(shr_0) - cmp $4, %edx - je L(shr_4) - cmp $8, %edx - je L(shr_8) - jmp L(shr_12) -# endif - - .p2align 4 -L(shr_0): - cmp $80, %ecx - jae L(shr_0_gobble) - lea -48(%ecx), %ecx - xor %eax, %eax - movaps (%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - movaps 16(%esi), %xmm2 - pcmpeqb 16(%edi), %xmm2 - pand %xmm1, %xmm2 - pmovmskb %xmm2, %edx - add $32, %edi - add $32, %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea (%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_0_gobble): - lea -48(%ecx), %ecx - movdqa (%esi), %xmm0 - xor %eax, %eax - pcmpeqb (%edi), %xmm0 - sub $32, %ecx - movdqa 16(%esi), %xmm2 - pcmpeqb 16(%edi), %xmm2 -L(shr_0_gobble_loop): - pand %xmm0, %xmm2 - sub $32, %ecx - pmovmskb %xmm2, %edx - movdqa %xmm0, %xmm1 - movdqa 32(%esi), %xmm0 - movdqa 48(%esi), %xmm2 - sbb $0xffff, %edx - pcmpeqb 32(%edi), %xmm0 - pcmpeqb 48(%edi), %xmm2 - lea 32(%edi), %edi - lea 32(%esi), %esi - jz L(shr_0_gobble_loop) - - pand %xmm0, %xmm2 - cmp $0, %ecx - jge L(shr_0_gobble_loop_next) - inc %edx - add $32, %ecx -L(shr_0_gobble_loop_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm2, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea (%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - -# ifndef USE_AS_WMEMCMP - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_1): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_1_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $1,(%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $1,%xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 1(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_1_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $1,(%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $1,16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_1_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $1,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $1,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_1_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_1_gobble_next) - inc %edx - add $32, %ecx -L(shr_1_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 1(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_2): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_2_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $2,(%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $2,%xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 2(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_2_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $2,(%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $2,16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_2_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $2,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $2,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_2_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_2_gobble_next) - inc %edx - add $32, %ecx -L(shr_2_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 2(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_3): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_3_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $3,(%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $3,%xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 3(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_3_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $3,(%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $3,16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_3_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $3,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $3,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_3_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_3_gobble_next) - inc %edx - add $32, %ecx -L(shr_3_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 3(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) -# endif - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_4): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_4_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $4,(%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $4,%xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 4(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_4_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $4,(%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $4,16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_4_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $4,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $4,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_4_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_4_gobble_next) - inc %edx - add $32, %ecx -L(shr_4_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 4(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - -# ifndef USE_AS_WMEMCMP - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_5): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_5_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $5,(%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $5,%xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 5(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_5_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $5,(%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $5,16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_5_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $5,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $5,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_5_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_5_gobble_next) - inc %edx - add $32, %ecx -L(shr_5_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 5(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_6): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_6_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $6,(%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $6,%xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 6(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_6_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $6,(%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $6,16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_6_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $6,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $6,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_6_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_6_gobble_next) - inc %edx - add $32, %ecx -L(shr_6_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 6(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_7): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_7_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $7,(%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $7,%xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 7(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_7_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $7,(%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $7,16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_7_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $7,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $7,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_7_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_7_gobble_next) - inc %edx - add $32, %ecx -L(shr_7_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 7(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) -# endif - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_8): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_8_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $8,(%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $8,%xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 8(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_8_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $8,(%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $8,16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_8_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $8,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $8,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_8_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_8_gobble_next) - inc %edx - add $32, %ecx -L(shr_8_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 8(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - -# ifndef USE_AS_WMEMCMP - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_9): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_9_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $9,(%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $9,%xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 9(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_9_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $9,(%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $9,16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_9_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $9,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $9,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_9_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_9_gobble_next) - inc %edx - add $32, %ecx -L(shr_9_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 9(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_10): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_10_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $10, (%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $10,%xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 10(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_10_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $10, (%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $10, 16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_10_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $10,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $10,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_10_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_10_gobble_next) - inc %edx - add $32, %ecx -L(shr_10_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 10(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_11): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_11_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $11, (%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $11, %xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 11(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_11_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $11, (%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $11, 16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_11_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $11,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $11,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_11_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_11_gobble_next) - inc %edx - add $32, %ecx -L(shr_11_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 11(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) -# endif - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_12): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_12_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $12, (%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $12, %xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 12(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_12_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $12, (%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $12, 16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_12_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $12,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $12,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_12_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_12_gobble_next) - inc %edx - add $32, %ecx -L(shr_12_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 12(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - -# ifndef USE_AS_WMEMCMP - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_13): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_13_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $13, (%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $13, %xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 13(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_13_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $13, (%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $13, 16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_13_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $13,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $13,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_13_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_13_gobble_next) - inc %edx - add $32, %ecx -L(shr_13_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 13(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_14): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_14_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $14, (%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $14, %xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 14(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_14_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $14, (%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $14, 16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_14_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $14,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $14,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_14_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_14_gobble_next) - inc %edx - add $32, %ecx -L(shr_14_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 14(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_15): - cmp $80, %ecx - lea -48(%ecx), %ecx - mov %edx, %eax - jae L(shr_15_gobble) - - movdqa 16(%esi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $15, (%esi), %xmm1 - pcmpeqb (%edi), %xmm1 - - movdqa 32(%esi), %xmm3 - palignr $15, %xmm2, %xmm3 - pcmpeqb 16(%edi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - lea (%ecx, %edi,1), %eax - lea 15(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(shr_15_gobble): - sub $32, %ecx - movdqa 16(%esi), %xmm0 - palignr $15, (%esi), %xmm0 - pcmpeqb (%edi), %xmm0 - - movdqa 32(%esi), %xmm3 - palignr $15, 16(%esi), %xmm3 - pcmpeqb 16(%edi), %xmm3 - -L(shr_15_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %ecx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%esi), %xmm3 - palignr $15,48(%esi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%esi), %xmm0 - palignr $15,32(%esi), %xmm0 - pcmpeqb 32(%edi), %xmm0 - lea 32(%esi), %esi - pcmpeqb 48(%edi), %xmm3 - - lea 32(%edi), %edi - jz L(shr_15_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %ecx - jge L(shr_15_gobble_next) - inc %edx - add $32, %ecx -L(shr_15_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%edi), %edi - lea 32(%esi), %esi - sub $0xffff, %edx - jnz L(exit) - - lea (%ecx, %edi,1), %eax - lea 15(%ecx, %esi,1), %edx - POP (%edi) - POP (%esi) - jmp L(less48bytes) -# endif - - cfi_restore_state - cfi_remember_state - .p2align 4 -L(exit): - pmovmskb %xmm1, %ebx - sub $0xffff, %ebx - jz L(first16bytes) - lea -16(%esi), %esi - lea -16(%edi), %edi - mov %ebx, %edx - -L(first16bytes): - add %eax, %esi -L(less16bytes): - -# ifndef USE_AS_WMEMCMP - test %dl, %dl - jz L(next_24_bytes) - - test $0x01, %dl - jnz L(Byte16) - - test $0x02, %dl - jnz L(Byte17) - - test $0x04, %dl - jnz L(Byte18) - - test $0x08, %dl - jnz L(Byte19) - - test $0x10, %dl - jnz L(Byte20) - - test $0x20, %dl - jnz L(Byte21) - - test $0x40, %dl - jnz L(Byte22) -L(Byte23): - movzbl -9(%edi), %eax - movzbl -9(%esi), %edx - sub %edx, %eax - RETURN - - .p2align 4 -L(Byte16): - movzbl -16(%edi), %eax - movzbl -16(%esi), %edx - sub %edx, %eax - RETURN - - .p2align 4 -L(Byte17): - movzbl -15(%edi), %eax - movzbl -15(%esi), %edx - sub %edx, %eax - RETURN - - .p2align 4 -L(Byte18): - movzbl -14(%edi), %eax - movzbl -14(%esi), %edx - sub %edx, %eax - RETURN - - .p2align 4 -L(Byte19): - movzbl -13(%edi), %eax - movzbl -13(%esi), %edx - sub %edx, %eax - RETURN - - .p2align 4 -L(Byte20): - movzbl -12(%edi), %eax - movzbl -12(%esi), %edx - sub %edx, %eax - RETURN - - .p2align 4 -L(Byte21): - movzbl -11(%edi), %eax - movzbl -11(%esi), %edx - sub %edx, %eax - RETURN - - .p2align 4 -L(Byte22): - movzbl -10(%edi), %eax - movzbl -10(%esi), %edx - sub %edx, %eax - RETURN - - .p2align 4 -L(next_24_bytes): - lea 8(%edi), %edi - lea 8(%esi), %esi - test $0x01, %dh - jnz L(Byte16) - - test $0x02, %dh - jnz L(Byte17) - - test $0x04, %dh - jnz L(Byte18) - - test $0x08, %dh - jnz L(Byte19) - - test $0x10, %dh - jnz L(Byte20) - - test $0x20, %dh - jnz L(Byte21) - - test $0x40, %dh - jnz L(Byte22) - - .p2align 4 -L(Byte31): - movzbl -9(%edi), %eax - movzbl -9(%esi), %edx - sub %edx, %eax - RETURN_END -# else - -/* special for wmemcmp */ - xor %eax, %eax - test %dl, %dl - jz L(next_two_double_words) - and $15, %dl - jz L(second_double_word) - mov -16(%edi), %eax - cmp -16(%esi), %eax - jne L(nequal) - RETURN - - .p2align 4 -L(second_double_word): - mov -12(%edi), %eax - cmp -12(%esi), %eax - jne L(nequal) - RETURN - - .p2align 4 -L(next_two_double_words): - and $15, %dh - jz L(fourth_double_word) - mov -8(%edi), %eax - cmp -8(%esi), %eax - jne L(nequal) - RETURN - - .p2align 4 -L(fourth_double_word): - mov -4(%edi), %eax - cmp -4(%esi), %eax - jne L(nequal) - RETURN - - .p2align 4 -L(nequal): - mov $1, %eax - jg L(nequal_bigger) - neg %eax - RETURN - - .p2align 4 -L(nequal_bigger): - RETURN_END -# endif - - CFI_PUSH (%ebx) - - .p2align 4 -L(more8bytes): - cmp $16, %ecx - jae L(more16bytes) - cmp $8, %ecx - je L(8bytes) -# ifndef USE_AS_WMEMCMP - cmp $9, %ecx - je L(9bytes) - cmp $10, %ecx - je L(10bytes) - cmp $11, %ecx - je L(11bytes) - cmp $12, %ecx - je L(12bytes) - cmp $13, %ecx - je L(13bytes) - cmp $14, %ecx - je L(14bytes) - jmp L(15bytes) -# else - jmp L(12bytes) -# endif - - .p2align 4 -L(more16bytes): - cmp $24, %ecx - jae L(more24bytes) - cmp $16, %ecx - je L(16bytes) -# ifndef USE_AS_WMEMCMP - cmp $17, %ecx - je L(17bytes) - cmp $18, %ecx - je L(18bytes) - cmp $19, %ecx - je L(19bytes) - cmp $20, %ecx - je L(20bytes) - cmp $21, %ecx - je L(21bytes) - cmp $22, %ecx - je L(22bytes) - jmp L(23bytes) -# else - jmp L(20bytes) -# endif - - .p2align 4 -L(more24bytes): - cmp $32, %ecx - jae L(more32bytes) - cmp $24, %ecx - je L(24bytes) -# ifndef USE_AS_WMEMCMP - cmp $25, %ecx - je L(25bytes) - cmp $26, %ecx - je L(26bytes) - cmp $27, %ecx - je L(27bytes) - cmp $28, %ecx - je L(28bytes) - cmp $29, %ecx - je L(29bytes) - cmp $30, %ecx - je L(30bytes) - jmp L(31bytes) -# else - jmp L(28bytes) -# endif - - .p2align 4 -L(more32bytes): - cmp $40, %ecx - jae L(more40bytes) - cmp $32, %ecx - je L(32bytes) -# ifndef USE_AS_WMEMCMP - cmp $33, %ecx - je L(33bytes) - cmp $34, %ecx - je L(34bytes) - cmp $35, %ecx - je L(35bytes) - cmp $36, %ecx - je L(36bytes) - cmp $37, %ecx - je L(37bytes) - cmp $38, %ecx - je L(38bytes) - jmp L(39bytes) -# else - jmp L(36bytes) -# endif - - .p2align 4 -L(less48bytes): - cmp $8, %ecx - jae L(more8bytes) -# ifndef USE_AS_WMEMCMP - cmp $2, %ecx - je L(2bytes) - cmp $3, %ecx - je L(3bytes) - cmp $4, %ecx - je L(4bytes) - cmp $5, %ecx - je L(5bytes) - cmp $6, %ecx - je L(6bytes) - jmp L(7bytes) -# else - jmp L(4bytes) -# endif - - .p2align 4 -L(more40bytes): - cmp $40, %ecx - je L(40bytes) -# ifndef USE_AS_WMEMCMP - cmp $41, %ecx - je L(41bytes) - cmp $42, %ecx - je L(42bytes) - cmp $43, %ecx - je L(43bytes) - cmp $44, %ecx - je L(44bytes) - cmp $45, %ecx - je L(45bytes) - cmp $46, %ecx - je L(46bytes) - jmp L(47bytes) - - .p2align 4 -L(44bytes): - mov -44(%eax), %ecx - mov -44(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(40bytes): - mov -40(%eax), %ecx - mov -40(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(36bytes): - mov -36(%eax), %ecx - mov -36(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(32bytes): - mov -32(%eax), %ecx - mov -32(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(28bytes): - mov -28(%eax), %ecx - mov -28(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(24bytes): - mov -24(%eax), %ecx - mov -24(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(20bytes): - mov -20(%eax), %ecx - mov -20(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(16bytes): - mov -16(%eax), %ecx - mov -16(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(12bytes): - mov -12(%eax), %ecx - mov -12(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(8bytes): - mov -8(%eax), %ecx - mov -8(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(4bytes): - mov -4(%eax), %ecx - mov -4(%edx), %ebx - cmp %ebx, %ecx - mov $0, %eax - jne L(find_diff) - POP (%ebx) - ret - CFI_PUSH (%ebx) -# else - .p2align 4 -L(44bytes): - mov -44(%eax), %ecx - cmp -44(%edx), %ecx - jne L(find_diff) -L(40bytes): - mov -40(%eax), %ecx - cmp -40(%edx), %ecx - jne L(find_diff) -L(36bytes): - mov -36(%eax), %ecx - cmp -36(%edx), %ecx - jne L(find_diff) -L(32bytes): - mov -32(%eax), %ecx - cmp -32(%edx), %ecx - jne L(find_diff) -L(28bytes): - mov -28(%eax), %ecx - cmp -28(%edx), %ecx - jne L(find_diff) -L(24bytes): - mov -24(%eax), %ecx - cmp -24(%edx), %ecx - jne L(find_diff) -L(20bytes): - mov -20(%eax), %ecx - cmp -20(%edx), %ecx - jne L(find_diff) -L(16bytes): - mov -16(%eax), %ecx - cmp -16(%edx), %ecx - jne L(find_diff) -L(12bytes): - mov -12(%eax), %ecx - cmp -12(%edx), %ecx - jne L(find_diff) -L(8bytes): - mov -8(%eax), %ecx - cmp -8(%edx), %ecx - jne L(find_diff) -L(4bytes): - mov -4(%eax), %ecx - xor %eax, %eax - cmp -4(%edx), %ecx - jne L(find_diff) - POP (%ebx) - ret - CFI_PUSH (%ebx) -# endif - -# ifndef USE_AS_WMEMCMP - - .p2align 4 -L(45bytes): - mov -45(%eax), %ecx - mov -45(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(41bytes): - mov -41(%eax), %ecx - mov -41(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(37bytes): - mov -37(%eax), %ecx - mov -37(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(33bytes): - mov -33(%eax), %ecx - mov -33(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(29bytes): - mov -29(%eax), %ecx - mov -29(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(25bytes): - mov -25(%eax), %ecx - mov -25(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(21bytes): - mov -21(%eax), %ecx - mov -21(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(17bytes): - mov -17(%eax), %ecx - mov -17(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(13bytes): - mov -13(%eax), %ecx - mov -13(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(9bytes): - mov -9(%eax), %ecx - mov -9(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(5bytes): - mov -5(%eax), %ecx - mov -5(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) - movzbl -1(%eax), %ecx - cmp -1(%edx), %cl - mov $0, %eax - jne L(end) - POP (%ebx) - ret - CFI_PUSH (%ebx) - - .p2align 4 -L(46bytes): - mov -46(%eax), %ecx - mov -46(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(42bytes): - mov -42(%eax), %ecx - mov -42(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(38bytes): - mov -38(%eax), %ecx - mov -38(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(34bytes): - mov -34(%eax), %ecx - mov -34(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(30bytes): - mov -30(%eax), %ecx - mov -30(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(26bytes): - mov -26(%eax), %ecx - mov -26(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(22bytes): - mov -22(%eax), %ecx - mov -22(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(18bytes): - mov -18(%eax), %ecx - mov -18(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(14bytes): - mov -14(%eax), %ecx - mov -14(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(10bytes): - mov -10(%eax), %ecx - mov -10(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(6bytes): - mov -6(%eax), %ecx - mov -6(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(2bytes): - movzwl -2(%eax), %ecx - movzwl -2(%edx), %ebx - cmp %bl, %cl - jne L(end) - cmp %bh, %ch - mov $0, %eax - jne L(end) - POP (%ebx) - ret - CFI_PUSH (%ebx) - - .p2align 4 -L(47bytes): - movl -47(%eax), %ecx - movl -47(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(43bytes): - movl -43(%eax), %ecx - movl -43(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(39bytes): - movl -39(%eax), %ecx - movl -39(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(35bytes): - movl -35(%eax), %ecx - movl -35(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(31bytes): - movl -31(%eax), %ecx - movl -31(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(27bytes): - movl -27(%eax), %ecx - movl -27(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(23bytes): - movl -23(%eax), %ecx - movl -23(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(19bytes): - movl -19(%eax), %ecx - movl -19(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(15bytes): - movl -15(%eax), %ecx - movl -15(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(11bytes): - movl -11(%eax), %ecx - movl -11(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(7bytes): - movl -7(%eax), %ecx - movl -7(%edx), %ebx - cmp %ebx, %ecx - jne L(find_diff) -L(3bytes): - movzwl -3(%eax), %ecx - movzwl -3(%edx), %ebx - cmpb %bl, %cl - jne L(end) - cmp %bx, %cx - jne L(end) - movzbl -1(%eax), %eax - cmpb -1(%edx), %al - mov $0, %eax - jne L(end) - POP (%ebx) - ret - CFI_PUSH (%ebx) - - .p2align 4 -L(find_diff): - cmpb %bl, %cl - jne L(end) - cmp %bx, %cx - jne L(end) - shr $16,%ecx - shr $16,%ebx - cmp %bl, %cl - jne L(end) - cmp %bx, %cx - - .p2align 4 -L(end): - POP (%ebx) - mov $1, %eax - ja L(bigger) - neg %eax -L(bigger): - ret -# else - -/* for wmemcmp */ - .p2align 4 -L(find_diff): - POP (%ebx) - mov $1, %eax - jg L(find_diff_bigger) - neg %eax - ret - - .p2align 4 -L(find_diff_bigger): - ret - -# endif -END (MEMCMP) -#endif diff --git a/sysdeps/i386/i686/multiarch/memcmp.S b/sysdeps/i386/i686/multiarch/memcmp.S deleted file mode 100644 index 1fc5994a17..0000000000 --- a/sysdeps/i386/i686/multiarch/memcmp.S +++ /dev/null @@ -1,62 +0,0 @@ -/* Multiple versions of memcmp - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in libc. */ -#if IS_IN (libc) - .text -ENTRY(memcmp) - .type memcmp, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__memcmp_ia32) - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (__memcmp_ssse3) - HAS_CPU_FEATURE (SSE4_2) - jz 2f - LOAD_FUNC_GOT_EAX (__memcmp_sse4_2) -2: ret -END(memcmp) - -# undef ENTRY -# define ENTRY(name) \ - .type __memcmp_ia32, @function; \ - .p2align 4; \ - .globl __memcmp_ia32; \ - .hidden __memcmp_ia32; \ - __memcmp_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __memcmp_ia32, .-__memcmp_ia32 - -# ifdef SHARED -# undef libc_hidden_builtin_def -/* IFUNC doesn't work with the hidden functions in shared library since - they will be called without setting up EBX needed for PLT which is - used by IFUNC. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_memcmp; __GI_memcmp = __memcmp_ia32 -# endif -#endif - -#include "../memcmp.S" diff --git a/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S b/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S deleted file mode 100644 index 2fe2072cb1..0000000000 --- a/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S +++ /dev/null @@ -1,681 +0,0 @@ -/* memcpy optimized with SSE2 unaligned memory access instructions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) \ - && (defined SHARED \ - || defined USE_AS_MEMMOVE \ - || !defined USE_MULTIARCH) - -# include -# include "asm-syntax.h" - -# ifndef MEMCPY -# define MEMCPY __memcpy_sse2_unaligned -# define MEMCPY_CHK __memcpy_chk_sse2_unaligned -# endif - -# ifdef USE_AS_BCOPY -# define SRC PARMS -# define DEST SRC+4 -# define LEN DEST+4 -# else -# define DEST PARMS -# define SRC DEST+4 -# define LEN SRC+4 -# endif - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# define PARMS 8 /* Preserve EBX. */ -# define ENTRANCE PUSH (%ebx); -# define RETURN_END POP (%ebx); ret -# define RETURN RETURN_END; CFI_PUSH (%ebx) - - .section .text.sse2,"ax",@progbits -# if !defined USE_AS_BCOPY -ENTRY (MEMCPY_CHK) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb HIDDEN_JUMPTARGET (__chk_fail) -END (MEMCPY_CHK) -# endif - -ENTRY (MEMCPY) - ENTRANCE - movl LEN(%esp), %ecx - movl SRC(%esp), %eax - movl DEST(%esp), %edx - cmp %edx, %eax - -# ifdef USE_AS_MEMMOVE - jg L(check_forward) - -L(mm_len_0_or_more_backward): -/* Now do checks for lengths. We do [0..16], [16..32], [32..64], [64..128] - separately. */ - cmp $16, %ecx - jbe L(mm_len_0_16_bytes_backward) - - cmpl $32, %ecx - jg L(mm_len_32_or_more_backward) - -/* Copy [0..32] and return. */ - movdqu (%eax), %xmm0 - movdqu -16(%eax, %ecx), %xmm1 - movdqu %xmm0, (%edx) - movdqu %xmm1, -16(%edx, %ecx) - jmp L(return) - -L(mm_len_32_or_more_backward): - cmpl $64, %ecx - jg L(mm_len_64_or_more_backward) - -/* Copy [0..64] and return. */ - movdqu (%eax), %xmm0 - movdqu 16(%eax), %xmm1 - movdqu -16(%eax, %ecx), %xmm2 - movdqu -32(%eax, %ecx), %xmm3 - movdqu %xmm0, (%edx) - movdqu %xmm1, 16(%edx) - movdqu %xmm2, -16(%edx, %ecx) - movdqu %xmm3, -32(%edx, %ecx) - jmp L(return) - -L(mm_len_64_or_more_backward): - cmpl $128, %ecx - jg L(mm_len_128_or_more_backward) - -/* Copy [0..128] and return. */ - movdqu (%eax), %xmm0 - movdqu 16(%eax), %xmm1 - movdqu 32(%eax), %xmm2 - movdqu 48(%eax), %xmm3 - movdqu -64(%eax, %ecx), %xmm4 - movdqu -48(%eax, %ecx), %xmm5 - movdqu -32(%eax, %ecx), %xmm6 - movdqu -16(%eax, %ecx), %xmm7 - movdqu %xmm0, (%edx) - movdqu %xmm1, 16(%edx) - movdqu %xmm2, 32(%edx) - movdqu %xmm3, 48(%edx) - movdqu %xmm4, -64(%edx, %ecx) - movdqu %xmm5, -48(%edx, %ecx) - movdqu %xmm6, -32(%edx, %ecx) - movdqu %xmm7, -16(%edx, %ecx) - jmp L(return) - -L(mm_len_128_or_more_backward): - add %ecx, %eax - cmp %edx, %eax - movl SRC(%esp), %eax - jle L(forward) - PUSH (%esi) - PUSH (%edi) - PUSH (%ebx) - -/* Aligning the address of destination. */ - movdqu (%eax), %xmm4 - movdqu 16(%eax), %xmm5 - movdqu 32(%eax), %xmm6 - movdqu 48(%eax), %xmm7 - leal (%edx, %ecx), %esi - movdqu -16(%eax, %ecx), %xmm0 - subl $16, %esp - movdqu %xmm0, (%esp) - mov %ecx, %edi - movl %esi, %ecx - andl $-16, %ecx - leal (%ecx), %ebx - subl %edx, %ebx - leal (%eax, %ebx), %eax - shrl $6, %ebx - -# ifdef SHARED_CACHE_SIZE_HALF - cmp $SHARED_CACHE_SIZE_HALF, %edi -# else -# ifdef SHARED - PUSH (%ebx) - SETUP_PIC_REG (bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_shared_cache_size_half@GOTOFF(%ebx), %edi - POP (%ebx) -# else - cmp __x86_shared_cache_size_half, %edi -# endif -# endif - jae L(mm_large_page_loop_backward) - - .p2align 4 -L(mm_main_loop_backward): - - prefetcht0 -128(%eax) - - movdqu -64(%eax), %xmm0 - movdqu -48(%eax), %xmm1 - movdqu -32(%eax), %xmm2 - movdqu -16(%eax), %xmm3 - movaps %xmm0, -64(%ecx) - subl $64, %eax - movaps %xmm1, -48(%ecx) - movaps %xmm2, -32(%ecx) - movaps %xmm3, -16(%ecx) - subl $64, %ecx - sub $1, %ebx - jnz L(mm_main_loop_backward) - movdqu (%esp), %xmm0 - addl $16, %esp - movdqu %xmm0, -16(%esi) - movdqu %xmm4, (%edx) - movdqu %xmm5, 16(%edx) - movdqu %xmm6, 32(%edx) - movdqu %xmm7, 48(%edx) - POP (%ebx) - jmp L(mm_return_pop_all) - -/* Copy [0..16] and return. */ -L(mm_len_0_16_bytes_backward): - testb $24, %cl - jnz L(mm_len_9_16_bytes_backward) - testb $4, %cl - .p2align 4,,5 - jnz L(mm_len_5_8_bytes_backward) - testl %ecx, %ecx - .p2align 4,,2 - je L(return) - testb $2, %cl - .p2align 4,,1 - jne L(mm_len_3_4_bytes_backward) - movzbl -1(%eax,%ecx), %ebx - movzbl (%eax), %eax - movb %bl, -1(%edx,%ecx) - movb %al, (%edx) - jmp L(return) - -L(mm_len_3_4_bytes_backward): - movzwl -2(%eax,%ecx), %ebx - movzwl (%eax), %eax - movw %bx, -2(%edx,%ecx) - movw %ax, (%edx) - jmp L(return) - -L(mm_len_9_16_bytes_backward): - PUSH (%esi) - movl -4(%eax,%ecx), %ebx - movl -8(%eax,%ecx), %esi - movl %ebx, -4(%edx,%ecx) - movl %esi, -8(%edx,%ecx) - subl $8, %ecx - POP (%esi) - jmp L(mm_len_0_16_bytes_backward) - -L(mm_len_5_8_bytes_backward): - movl (%eax), %ebx - movl -4(%eax,%ecx), %eax - movl %ebx, (%edx) - movl %eax, -4(%edx,%ecx) - jmp L(return) - -/* Big length copy backward part. */ - .p2align 4 -L(mm_large_page_loop_backward): - movdqu -64(%eax), %xmm0 - movdqu -48(%eax), %xmm1 - movdqu -32(%eax), %xmm2 - movdqu -16(%eax), %xmm3 - movntdq %xmm0, -64(%ecx) - subl $64, %eax - movntdq %xmm1, -48(%ecx) - movntdq %xmm2, -32(%ecx) - movntdq %xmm3, -16(%ecx) - subl $64, %ecx - sub $1, %ebx - jnz L(mm_large_page_loop_backward) - sfence - movdqu (%esp), %xmm0 - addl $16, %esp - movdqu %xmm0, -16(%esi) - movdqu %xmm4, (%edx) - movdqu %xmm5, 16(%edx) - movdqu %xmm6, 32(%edx) - movdqu %xmm7, 48(%edx) - POP (%ebx) - jmp L(mm_return_pop_all) - -L(check_forward): - add %edx, %ecx - cmp %eax, %ecx - movl LEN(%esp), %ecx - jle L(forward) - -/* Now do checks for lengths. We do [0..16], [0..32], [0..64], [0..128] - separately. */ - cmp $16, %ecx - jbe L(mm_len_0_16_bytes_forward) - - cmpl $32, %ecx - ja L(mm_len_32_or_more_forward) - -/* Copy [0..32] and return. */ - movdqu (%eax), %xmm0 - movdqu -16(%eax, %ecx), %xmm1 - movdqu %xmm0, (%edx) - movdqu %xmm1, -16(%edx, %ecx) - jmp L(return) - -L(mm_len_32_or_more_forward): - cmpl $64, %ecx - ja L(mm_len_64_or_more_forward) - -/* Copy [0..64] and return. */ - movdqu (%eax), %xmm0 - movdqu 16(%eax), %xmm1 - movdqu -16(%eax, %ecx), %xmm2 - movdqu -32(%eax, %ecx), %xmm3 - movdqu %xmm0, (%edx) - movdqu %xmm1, 16(%edx) - movdqu %xmm2, -16(%edx, %ecx) - movdqu %xmm3, -32(%edx, %ecx) - jmp L(return) - -L(mm_len_64_or_more_forward): - cmpl $128, %ecx - ja L(mm_len_128_or_more_forward) - -/* Copy [0..128] and return. */ - movdqu (%eax), %xmm0 - movdqu 16(%eax), %xmm1 - movdqu 32(%eax), %xmm2 - movdqu 48(%eax), %xmm3 - movdqu -64(%eax, %ecx), %xmm4 - movdqu -48(%eax, %ecx), %xmm5 - movdqu -32(%eax, %ecx), %xmm6 - movdqu -16(%eax, %ecx), %xmm7 - movdqu %xmm0, (%edx) - movdqu %xmm1, 16(%edx) - movdqu %xmm2, 32(%edx) - movdqu %xmm3, 48(%edx) - movdqu %xmm4, -64(%edx, %ecx) - movdqu %xmm5, -48(%edx, %ecx) - movdqu %xmm6, -32(%edx, %ecx) - movdqu %xmm7, -16(%edx, %ecx) - jmp L(return) - -L(mm_len_128_or_more_forward): - PUSH (%esi) - PUSH (%edi) - PUSH (%ebx) - -/* Aligning the address of destination. */ - movdqu -16(%eax, %ecx), %xmm4 - movdqu -32(%eax, %ecx), %xmm5 - movdqu -48(%eax, %ecx), %xmm6 - movdqu -64(%eax, %ecx), %xmm7 - leal (%edx, %ecx), %esi - movdqu (%eax), %xmm0 - subl $16, %esp - movdqu %xmm0, (%esp) - mov %ecx, %edi - leal 16(%edx), %ecx - andl $-16, %ecx - movl %ecx, %ebx - subl %edx, %ebx - addl %ebx, %eax - movl %esi, %ebx - subl %ecx, %ebx - shrl $6, %ebx - -# ifdef SHARED_CACHE_SIZE_HALF - cmp $SHARED_CACHE_SIZE_HALF, %edi -# else -# ifdef SHARED - PUSH (%ebx) - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_shared_cache_size_half@GOTOFF(%ebx), %edi - POP (%ebx) -# else - cmp __x86_shared_cache_size_half, %edi -# endif -# endif - jae L(mm_large_page_loop_forward) - - .p2align 4 -L(mm_main_loop_forward): - - prefetcht0 128(%eax) - - movdqu (%eax), %xmm0 - movdqu 16(%eax), %xmm1 - movdqu 32(%eax), %xmm2 - movdqu 48(%eax), %xmm3 - movdqa %xmm0, (%ecx) - addl $64, %eax - movaps %xmm1, 16(%ecx) - movaps %xmm2, 32(%ecx) - movaps %xmm3, 48(%ecx) - addl $64, %ecx - sub $1, %ebx - jnz L(mm_main_loop_forward) - movdqu (%esp), %xmm0 - addl $16, %esp - movdqu %xmm0, (%edx) - movdqu %xmm4, -16(%esi) - movdqu %xmm5, -32(%esi) - movdqu %xmm6, -48(%esi) - movdqu %xmm7, -64(%esi) - POP (%ebx) - jmp L(mm_return_pop_all) - -L(mm_len_0_16_bytes_forward): - testb $24, %cl - jne L(mm_len_9_16_bytes_forward) - testb $4, %cl - .p2align 4,,5 - jne L(mm_len_5_8_bytes_forward) - testl %ecx, %ecx - .p2align 4,,2 - je L(return) - testb $2, %cl - .p2align 4,,1 - jne L(mm_len_2_4_bytes_forward) - movzbl -1(%eax,%ecx), %ebx - movzbl (%eax), %eax - movb %bl, -1(%edx,%ecx) - movb %al, (%edx) - jmp L(return) - -L(mm_len_2_4_bytes_forward): - movzwl -2(%eax,%ecx), %ebx - movzwl (%eax), %eax - movw %bx, -2(%edx,%ecx) - movw %ax, (%edx) - jmp L(return) - -L(mm_len_5_8_bytes_forward): - movl (%eax), %ebx - movl -4(%eax,%ecx), %eax - movl %ebx, (%edx) - movl %eax, -4(%edx,%ecx) - jmp L(return) - -L(mm_len_9_16_bytes_forward): - movq (%eax), %xmm0 - movq -8(%eax, %ecx), %xmm1 - movq %xmm0, (%edx) - movq %xmm1, -8(%edx, %ecx) - jmp L(return) - -L(mm_return_pop_all): - movl %edx, %eax - POP (%edi) - POP (%esi) - RETURN - -/* Big length copy forward part. */ - .p2align 4 -L(mm_large_page_loop_forward): - movdqu (%eax), %xmm0 - movdqu 16(%eax), %xmm1 - movdqu 32(%eax), %xmm2 - movdqu 48(%eax), %xmm3 - movntdq %xmm0, (%ecx) - addl $64, %eax - movntdq %xmm1, 16(%ecx) - movntdq %xmm2, 32(%ecx) - movntdq %xmm3, 48(%ecx) - addl $64, %ecx - sub $1, %ebx - jnz L(mm_large_page_loop_forward) - sfence - movdqu (%esp), %xmm0 - addl $16, %esp - movdqu %xmm0, (%edx) - movdqu %xmm4, -16(%esi) - movdqu %xmm5, -32(%esi) - movdqu %xmm6, -48(%esi) - movdqu %xmm7, -64(%esi) - POP (%ebx) - jmp L(mm_return_pop_all) -# endif - -L(forward): - cmp $16, %ecx - jbe L(len_0_16_bytes) - -# ifdef SHARED_CACHE_SIZE_HALF - cmp $SHARED_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_shared_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_shared_cache_size_half, %ecx -# endif -# endif - jae L(large_page) - - movdqu (%eax), %xmm0 - movdqu -16(%eax, %ecx), %xmm1 - cmpl $32, %ecx - movdqu %xmm0, (%edx) - movdqu %xmm1, -16(%edx, %ecx) - jbe L(return) - - movdqu 16(%eax), %xmm0 - movdqu -32(%eax, %ecx), %xmm1 - cmpl $64, %ecx - movdqu %xmm0, 16(%edx) - movdqu %xmm1, -32(%edx, %ecx) - jbe L(return) - - movdqu 32(%eax), %xmm0 - movdqu 48(%eax), %xmm1 - movdqu -48(%eax, %ecx), %xmm2 - movdqu -64(%eax, %ecx), %xmm3 - cmpl $128, %ecx - movdqu %xmm0, 32(%edx) - movdqu %xmm1, 48(%edx) - movdqu %xmm2, -48(%edx, %ecx) - movdqu %xmm3, -64(%edx, %ecx) - jbe L(return) - -/* Now the main loop: we align the address of the destination. */ - leal 64(%edx), %ebx - andl $-64, %ebx - - addl %edx, %ecx - andl $-64, %ecx - - subl %edx, %eax - -/* We should stop two iterations before the termination - (in order not to misprefetch). */ - subl $64, %ecx - cmpl %ebx, %ecx - je L(main_loop_just_one_iteration) - - subl $64, %ecx - cmpl %ebx, %ecx - je L(main_loop_last_two_iterations) - - .p2align 4 -L(main_loop_cache): - - prefetcht0 128(%ebx, %eax) - - movdqu (%ebx, %eax), %xmm0 - movdqu 16(%ebx, %eax), %xmm1 - movdqu 32(%ebx, %eax), %xmm2 - movdqu 48(%ebx, %eax), %xmm3 - movdqa %xmm0, (%ebx) - movaps %xmm1, 16(%ebx) - movaps %xmm2, 32(%ebx) - movaps %xmm3, 48(%ebx) - lea 64(%ebx), %ebx - cmpl %ebx, %ecx - jne L(main_loop_cache) - -L(main_loop_last_two_iterations): - movdqu (%ebx, %eax), %xmm0 - movdqu 16(%ebx, %eax), %xmm1 - movdqu 32(%ebx, %eax), %xmm2 - movdqu 48(%ebx, %eax), %xmm3 - movdqu 64(%ebx, %eax), %xmm4 - movdqu 80(%ebx, %eax), %xmm5 - movdqu 96(%ebx, %eax), %xmm6 - movdqu 112(%ebx, %eax), %xmm7 - movdqa %xmm0, (%ebx) - movaps %xmm1, 16(%ebx) - movaps %xmm2, 32(%ebx) - movaps %xmm3, 48(%ebx) - movaps %xmm4, 64(%ebx) - movaps %xmm5, 80(%ebx) - movaps %xmm6, 96(%ebx) - movaps %xmm7, 112(%ebx) - jmp L(return) - -L(main_loop_just_one_iteration): - movdqu (%ebx, %eax), %xmm0 - movdqu 16(%ebx, %eax), %xmm1 - movdqu 32(%ebx, %eax), %xmm2 - movdqu 48(%ebx, %eax), %xmm3 - movdqa %xmm0, (%ebx) - movaps %xmm1, 16(%ebx) - movaps %xmm2, 32(%ebx) - movaps %xmm3, 48(%ebx) - jmp L(return) - -L(large_page): - movdqu (%eax), %xmm0 - movdqu 16(%eax), %xmm1 - movdqu 32(%eax), %xmm2 - movdqu 48(%eax), %xmm3 - movdqu -64(%eax, %ecx), %xmm4 - movdqu -48(%eax, %ecx), %xmm5 - movdqu -32(%eax, %ecx), %xmm6 - movdqu -16(%eax, %ecx), %xmm7 - movdqu %xmm0, (%edx) - movdqu %xmm1, 16(%edx) - movdqu %xmm2, 32(%edx) - movdqu %xmm3, 48(%edx) - movdqu %xmm4, -64(%edx, %ecx) - movdqu %xmm5, -48(%edx, %ecx) - movdqu %xmm6, -32(%edx, %ecx) - movdqu %xmm7, -16(%edx, %ecx) - - movdqu 64(%eax), %xmm0 - movdqu 80(%eax), %xmm1 - movdqu 96(%eax), %xmm2 - movdqu 112(%eax), %xmm3 - movdqu -128(%eax, %ecx), %xmm4 - movdqu -112(%eax, %ecx), %xmm5 - movdqu -96(%eax, %ecx), %xmm6 - movdqu -80(%eax, %ecx), %xmm7 - movdqu %xmm0, 64(%edx) - movdqu %xmm1, 80(%edx) - movdqu %xmm2, 96(%edx) - movdqu %xmm3, 112(%edx) - movdqu %xmm4, -128(%edx, %ecx) - movdqu %xmm5, -112(%edx, %ecx) - movdqu %xmm6, -96(%edx, %ecx) - movdqu %xmm7, -80(%edx, %ecx) - -/* Now the main loop with non temporal stores. We align - the address of the destination. */ - leal 128(%edx), %ebx - andl $-128, %ebx - - addl %edx, %ecx - andl $-128, %ecx - - subl %edx, %eax - - .p2align 4 -L(main_loop_large_page): - movdqu (%ebx, %eax), %xmm0 - movdqu 16(%ebx, %eax), %xmm1 - movdqu 32(%ebx, %eax), %xmm2 - movdqu 48(%ebx, %eax), %xmm3 - movdqu 64(%ebx, %eax), %xmm4 - movdqu 80(%ebx, %eax), %xmm5 - movdqu 96(%ebx, %eax), %xmm6 - movdqu 112(%ebx, %eax), %xmm7 - movntdq %xmm0, (%ebx) - movntdq %xmm1, 16(%ebx) - movntdq %xmm2, 32(%ebx) - movntdq %xmm3, 48(%ebx) - movntdq %xmm4, 64(%ebx) - movntdq %xmm5, 80(%ebx) - movntdq %xmm6, 96(%ebx) - movntdq %xmm7, 112(%ebx) - lea 128(%ebx), %ebx - cmpl %ebx, %ecx - jne L(main_loop_large_page) - sfence - jmp L(return) - -L(len_0_16_bytes): - testb $24, %cl - jne L(len_9_16_bytes) - testb $4, %cl - .p2align 4,,5 - jne L(len_5_8_bytes) - testl %ecx, %ecx - .p2align 4,,2 - je L(return) - movzbl (%eax), %ebx - testb $2, %cl - movb %bl, (%edx) - je L(return) - movzwl -2(%eax,%ecx), %ebx - movw %bx, -2(%edx,%ecx) - jmp L(return) - -L(len_9_16_bytes): - movq (%eax), %xmm0 - movq -8(%eax, %ecx), %xmm1 - movq %xmm0, (%edx) - movq %xmm1, -8(%edx, %ecx) - jmp L(return) - -L(len_5_8_bytes): - movl (%eax), %ebx - movl %ebx, (%edx) - movl -4(%eax,%ecx), %ebx - movl %ebx, -4(%edx,%ecx) - -L(return): - movl %edx, %eax -# if !defined USE_AS_BCOPY && defined USE_AS_MEMPCPY - movl LEN(%esp), %ecx - add %ecx, %eax -# endif - RETURN - -END (MEMCPY) -#endif diff --git a/sysdeps/i386/i686/multiarch/memcpy-ssse3-rep.S b/sysdeps/i386/i686/multiarch/memcpy-ssse3-rep.S deleted file mode 100644 index 687e083147..0000000000 --- a/sysdeps/i386/i686/multiarch/memcpy-ssse3-rep.S +++ /dev/null @@ -1,1809 +0,0 @@ -/* memcpy with SSSE3 and REP string. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if IS_IN (libc) \ - && (defined SHARED \ - || defined USE_AS_MEMMOVE \ - || !defined USE_MULTIARCH) - -#include "asm-syntax.h" - -#ifndef MEMCPY -# define MEMCPY __memcpy_ssse3_rep -# define MEMCPY_CHK __memcpy_chk_ssse3_rep -#endif - -#ifdef USE_AS_BCOPY -# define SRC PARMS -# define DEST SRC+4 -# define LEN DEST+4 -#else -# define DEST PARMS -# define SRC DEST+4 -# define LEN SRC+4 -#endif - -#define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -#define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -#define PUSH(REG) pushl REG; CFI_PUSH (REG) -#define POP(REG) popl REG; CFI_POP (REG) - -#ifdef SHARED -# define PARMS 8 /* Preserve EBX. */ -# define ENTRANCE PUSH (%ebx); -# define RETURN_END POP (%ebx); ret -# define RETURN RETURN_END; CFI_PUSH (%ebx) -# define JMPTBL(I, B) I - B - -/* Load an entry in a jump table into EBX and branch to it. TABLE is a - jump table with relative offsets. INDEX is a register contains the - index into the jump table. SCALE is the scale of INDEX. */ -# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ - /* We first load PC into EBX. */ \ - SETUP_PIC_REG(bx); \ - /* Get the address of the jump table. */ \ - addl $(TABLE - .), %ebx; \ - /* Get the entry and convert the relative offset to the \ - absolute address. */ \ - addl (%ebx,INDEX,SCALE), %ebx; \ - /* We loaded the jump table. Go. */ \ - jmp *%ebx - -# define BRANCH_TO_JMPTBL_ENTRY_VALUE(TABLE) \ - addl $(TABLE - .), %ebx - -# define BRANCH_TO_JMPTBL_ENTRY_TAIL(TABLE, INDEX, SCALE) \ - addl (%ebx,INDEX,SCALE), %ebx; \ - /* We loaded the jump table. Go. */ \ - jmp *%ebx -#else -# define PARMS 4 -# define ENTRANCE -# define RETURN_END ret -# define RETURN RETURN_END -# define JMPTBL(I, B) I - -/* Branch to an entry in a jump table. TABLE is a jump table with - absolute offsets. INDEX is a register contains the index into the - jump table. SCALE is the scale of INDEX. */ -# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ - jmp *TABLE(,INDEX,SCALE) - -# define BRANCH_TO_JMPTBL_ENTRY_VALUE(TABLE) - -# define BRANCH_TO_JMPTBL_ENTRY_TAIL(TABLE, INDEX, SCALE) \ - jmp *TABLE(,INDEX,SCALE) -#endif - - .section .text.ssse3,"ax",@progbits -#if !defined USE_AS_BCOPY -ENTRY (MEMCPY_CHK) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb HIDDEN_JUMPTARGET (__chk_fail) -END (MEMCPY_CHK) -#endif -ENTRY (MEMCPY) - ENTRANCE - movl LEN(%esp), %ecx - movl SRC(%esp), %eax - movl DEST(%esp), %edx - -#ifdef USE_AS_MEMMOVE - cmp %eax, %edx - jb L(copy_forward) - je L(fwd_write_0bytes) - cmp $48, %ecx - jb L(bk_write_less48bytes) - add %ecx, %eax - cmp %eax, %edx - movl SRC(%esp), %eax - jb L(copy_backward) - -L(copy_forward): -#endif - cmp $48, %ecx - jae L(48bytesormore) - -L(fwd_write_less32bytes): -#ifndef USE_AS_MEMMOVE - cmp %dl, %al - jb L(bk_write) -#endif - add %ecx, %edx - add %ecx, %eax - BRANCH_TO_JMPTBL_ENTRY (L(table_48bytes_fwd), %ecx, 4) -#ifndef USE_AS_MEMMOVE -L(bk_write): - BRANCH_TO_JMPTBL_ENTRY (L(table_48_bytes_bwd), %ecx, 4) -#endif - - ALIGN (4) -/* ECX > 32 and EDX is 4 byte aligned. */ -L(48bytesormore): - movdqu (%eax), %xmm0 - PUSH (%edi) - movl %edx, %edi - and $-16, %edx - PUSH (%esi) - cfi_remember_state - add $16, %edx - movl %edi, %esi - sub %edx, %edi - add %edi, %ecx - sub %edi, %eax - -#ifdef SHARED_CACHE_SIZE_HALF - cmp $SHARED_CACHE_SIZE_HALF, %ecx -#else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_shared_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_shared_cache_size_half, %ecx -# endif -#endif - - mov %eax, %edi - jae L(large_page) - and $0xf, %edi - jz L(shl_0) - - BRANCH_TO_JMPTBL_ENTRY (L(shl_table), %edi, 4) - - ALIGN (4) -L(shl_0): - movdqu %xmm0, (%esi) - xor %edi, %edi - cmp $127, %ecx - ja L(shl_0_gobble) - lea -32(%ecx), %ecx -L(shl_0_loop): - movdqa (%eax, %edi), %xmm0 - movdqa 16(%eax, %edi), %xmm1 - sub $32, %ecx - movdqa %xmm0, (%edx, %edi) - movdqa %xmm1, 16(%edx, %edi) - lea 32(%edi), %edi - jb L(shl_0_end) - - movdqa (%eax, %edi), %xmm0 - movdqa 16(%eax, %edi), %xmm1 - sub $32, %ecx - movdqa %xmm0, (%edx, %edi) - movdqa %xmm1, 16(%edx, %edi) - lea 32(%edi), %edi - jb L(shl_0_end) - - movdqa (%eax, %edi), %xmm0 - movdqa 16(%eax, %edi), %xmm1 - sub $32, %ecx - movdqa %xmm0, (%edx, %edi) - movdqa %xmm1, 16(%edx, %edi) - lea 32(%edi), %edi - jb L(shl_0_end) - - movdqa (%eax, %edi), %xmm0 - movdqa 16(%eax, %edi), %xmm1 - sub $32, %ecx - movdqa %xmm0, (%edx, %edi) - movdqa %xmm1, 16(%edx, %edi) - lea 32(%edi), %edi -L(shl_0_end): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - add %edi, %eax - POP (%esi) - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY (L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state -L(shl_0_gobble): - -#ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -#else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - mov __x86_data_cache_size_half@GOTOFF(%ebx), %edi -# else - mov __x86_data_cache_size_half, %edi -# endif -#endif - mov %edi, %esi - shr $3, %esi - sub %esi, %edi - cmp %edi, %ecx - jae L(shl_0_gobble_mem_start) - sub $128, %ecx - ALIGN (4) -L(shl_0_gobble_cache_loop): - movdqa (%eax), %xmm0 - movaps 0x10(%eax), %xmm1 - movaps 0x20(%eax), %xmm2 - movaps 0x30(%eax), %xmm3 - movaps 0x40(%eax), %xmm4 - movaps 0x50(%eax), %xmm5 - movaps 0x60(%eax), %xmm6 - movaps 0x70(%eax), %xmm7 - lea 0x80(%eax), %eax - sub $128, %ecx - movdqa %xmm0, (%edx) - movaps %xmm1, 0x10(%edx) - movaps %xmm2, 0x20(%edx) - movaps %xmm3, 0x30(%edx) - movaps %xmm4, 0x40(%edx) - movaps %xmm5, 0x50(%edx) - movaps %xmm6, 0x60(%edx) - movaps %xmm7, 0x70(%edx) - lea 0x80(%edx), %edx - - jae L(shl_0_gobble_cache_loop) - add $0x80, %ecx - cmp $0x40, %ecx - jb L(shl_0_cache_less_64bytes) - - movdqa (%eax), %xmm0 - sub $0x40, %ecx - movdqa 0x10(%eax), %xmm1 - - movdqa %xmm0, (%edx) - movdqa %xmm1, 0x10(%edx) - - movdqa 0x20(%eax), %xmm0 - movdqa 0x30(%eax), %xmm1 - add $0x40, %eax - - movdqa %xmm0, 0x20(%edx) - movdqa %xmm1, 0x30(%edx) - add $0x40, %edx -L(shl_0_cache_less_64bytes): - cmp $0x20, %ecx - jb L(shl_0_cache_less_32bytes) - movdqa (%eax), %xmm0 - sub $0x20, %ecx - movdqa 0x10(%eax), %xmm1 - add $0x20, %eax - movdqa %xmm0, (%edx) - movdqa %xmm1, 0x10(%edx) - add $0x20, %edx -L(shl_0_cache_less_32bytes): - cmp $0x10, %ecx - jb L(shl_0_cache_less_16bytes) - sub $0x10, %ecx - movdqa (%eax), %xmm0 - add $0x10, %eax - movdqa %xmm0, (%edx) - add $0x10, %edx -L(shl_0_cache_less_16bytes): - add %ecx, %edx - add %ecx, %eax - POP (%esi) - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY (L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_0_gobble_mem_start): - cmp %al, %dl - je L(copy_page_by_rep) - sub $128, %ecx -L(shl_0_gobble_mem_loop): - prefetchnta 0x1c0(%eax) - prefetchnta 0x280(%eax) - prefetchnta 0x1c0(%edx) - prefetchnta 0x280(%edx) - - movdqa (%eax), %xmm0 - movaps 0x10(%eax), %xmm1 - movaps 0x20(%eax), %xmm2 - movaps 0x30(%eax), %xmm3 - movaps 0x40(%eax), %xmm4 - movaps 0x50(%eax), %xmm5 - movaps 0x60(%eax), %xmm6 - movaps 0x70(%eax), %xmm7 - lea 0x80(%eax), %eax - sub $0x80, %ecx - movdqa %xmm0, (%edx) - movaps %xmm1, 0x10(%edx) - movaps %xmm2, 0x20(%edx) - movaps %xmm3, 0x30(%edx) - movaps %xmm4, 0x40(%edx) - movaps %xmm5, 0x50(%edx) - movaps %xmm6, 0x60(%edx) - movaps %xmm7, 0x70(%edx) - lea 0x80(%edx), %edx - - jae L(shl_0_gobble_mem_loop) - add $0x80, %ecx - cmp $0x40, %ecx - jb L(shl_0_mem_less_64bytes) - - movdqa (%eax), %xmm0 - sub $0x40, %ecx - movdqa 0x10(%eax), %xmm1 - - movdqa %xmm0, (%edx) - movdqa %xmm1, 0x10(%edx) - - movdqa 0x20(%eax), %xmm0 - movdqa 0x30(%eax), %xmm1 - add $0x40, %eax - - movdqa %xmm0, 0x20(%edx) - movdqa %xmm1, 0x30(%edx) - add $0x40, %edx -L(shl_0_mem_less_64bytes): - cmp $0x20, %ecx - jb L(shl_0_mem_less_32bytes) - movdqa (%eax), %xmm0 - sub $0x20, %ecx - movdqa 0x10(%eax), %xmm1 - add $0x20, %eax - movdqa %xmm0, (%edx) - movdqa %xmm1, 0x10(%edx) - add $0x20, %edx -L(shl_0_mem_less_32bytes): - cmp $0x10, %ecx - jb L(shl_0_mem_less_16bytes) - sub $0x10, %ecx - movdqa (%eax), %xmm0 - add $0x10, %eax - movdqa %xmm0, (%edx) - add $0x10, %edx -L(shl_0_mem_less_16bytes): - add %ecx, %edx - add %ecx, %eax - POP (%esi) - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY (L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_1): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $1, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_1_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $1, %xmm2, %xmm3 - palignr $1, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_1_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $1, %xmm2, %xmm3 - palignr $1, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_1_loop) - -L(shl_1_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 1(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_2): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $2, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_2_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $2, %xmm2, %xmm3 - palignr $2, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_2_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $2, %xmm2, %xmm3 - palignr $2, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_2_loop) - -L(shl_2_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 2(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_3): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $3, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_3_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $3, %xmm2, %xmm3 - palignr $3, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_3_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $3, %xmm2, %xmm3 - palignr $3, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_3_loop) - -L(shl_3_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 3(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_4): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $4, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_4_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $4, %xmm2, %xmm3 - palignr $4, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_4_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $4, %xmm2, %xmm3 - palignr $4, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_4_loop) - -L(shl_4_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 4(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_5): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $5, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_5_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $5, %xmm2, %xmm3 - palignr $5, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_5_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $5, %xmm2, %xmm3 - palignr $5, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_5_loop) - -L(shl_5_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 5(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_6): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $6, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_6_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $6, %xmm2, %xmm3 - palignr $6, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_6_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $6, %xmm2, %xmm3 - palignr $6, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_6_loop) - -L(shl_6_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 6(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_7): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $7, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_7_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $7, %xmm2, %xmm3 - palignr $7, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_7_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $7, %xmm2, %xmm3 - palignr $7, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_7_loop) - -L(shl_7_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 7(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_8): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $8, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_8_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $8, %xmm2, %xmm3 - palignr $8, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_8_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $8, %xmm2, %xmm3 - palignr $8, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_8_loop) - -L(shl_8_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 8(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_9): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $9, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_9_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $9, %xmm2, %xmm3 - palignr $9, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_9_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $9, %xmm2, %xmm3 - palignr $9, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_9_loop) - -L(shl_9_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 9(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_10): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $10, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_10_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $10, %xmm2, %xmm3 - palignr $10, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_10_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $10, %xmm2, %xmm3 - palignr $10, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_10_loop) - -L(shl_10_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 10(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_11): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $11, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_11_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $11, %xmm2, %xmm3 - palignr $11, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_11_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $11, %xmm2, %xmm3 - palignr $11, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_11_loop) - -L(shl_11_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 11(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_12): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $12, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_12_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $12, %xmm2, %xmm3 - palignr $12, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_12_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $12, %xmm2, %xmm3 - palignr $12, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_12_loop) - -L(shl_12_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 12(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_13): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $13, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_13_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $13, %xmm2, %xmm3 - palignr $13, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_13_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $13, %xmm2, %xmm3 - palignr $13, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_13_loop) - -L(shl_13_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 13(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_14): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $14, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_14_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $14, %xmm2, %xmm3 - palignr $14, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_14_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $14, %xmm2, %xmm3 - palignr $14, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_14_loop) - -L(shl_14_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 14(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(shl_15): - BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd)) - sub $15, %eax - movaps (%eax), %xmm1 - xor %edi, %edi - sub $32, %ecx - movdqu %xmm0, (%esi) - POP (%esi) -L(shl_15_loop): - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $15, %xmm2, %xmm3 - palignr $15, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(shl_15_end) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $15, %xmm2, %xmm3 - palignr $15, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(shl_15_loop) - -L(shl_15_end): - add $32, %ecx - add %ecx, %edi - add %edi, %edx - lea 15(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4) - - - ALIGN (4) -L(fwd_write_44bytes): - movl -44(%eax), %ecx - movl %ecx, -44(%edx) -L(fwd_write_40bytes): - movl -40(%eax), %ecx - movl %ecx, -40(%edx) -L(fwd_write_36bytes): - movl -36(%eax), %ecx - movl %ecx, -36(%edx) -L(fwd_write_32bytes): - movl -32(%eax), %ecx - movl %ecx, -32(%edx) -L(fwd_write_28bytes): - movl -28(%eax), %ecx - movl %ecx, -28(%edx) -L(fwd_write_24bytes): - movl -24(%eax), %ecx - movl %ecx, -24(%edx) -L(fwd_write_20bytes): - movl -20(%eax), %ecx - movl %ecx, -20(%edx) -L(fwd_write_16bytes): - movl -16(%eax), %ecx - movl %ecx, -16(%edx) -L(fwd_write_12bytes): - movl -12(%eax), %ecx - movl %ecx, -12(%edx) -L(fwd_write_8bytes): - movl -8(%eax), %ecx - movl %ecx, -8(%edx) -L(fwd_write_4bytes): - movl -4(%eax), %ecx - movl %ecx, -4(%edx) -L(fwd_write_0bytes): -#ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -#endif - RETURN - - ALIGN (4) -L(fwd_write_5bytes): - movl -5(%eax), %ecx - movl -4(%eax), %eax - movl %ecx, -5(%edx) - movl %eax, -4(%edx) -#ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -#endif - RETURN - - ALIGN (4) -L(fwd_write_45bytes): - movl -45(%eax), %ecx - movl %ecx, -45(%edx) -L(fwd_write_41bytes): - movl -41(%eax), %ecx - movl %ecx, -41(%edx) -L(fwd_write_37bytes): - movl -37(%eax), %ecx - movl %ecx, -37(%edx) -L(fwd_write_33bytes): - movl -33(%eax), %ecx - movl %ecx, -33(%edx) -L(fwd_write_29bytes): - movl -29(%eax), %ecx - movl %ecx, -29(%edx) -L(fwd_write_25bytes): - movl -25(%eax), %ecx - movl %ecx, -25(%edx) -L(fwd_write_21bytes): - movl -21(%eax), %ecx - movl %ecx, -21(%edx) -L(fwd_write_17bytes): - movl -17(%eax), %ecx - movl %ecx, -17(%edx) -L(fwd_write_13bytes): - movl -13(%eax), %ecx - movl %ecx, -13(%edx) -L(fwd_write_9bytes): - movl -9(%eax), %ecx - movl %ecx, -9(%edx) - movl -5(%eax), %ecx - movl %ecx, -5(%edx) -L(fwd_write_1bytes): - movzbl -1(%eax), %ecx - movb %cl, -1(%edx) -#ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -#endif - RETURN - - ALIGN (4) -L(fwd_write_46bytes): - movl -46(%eax), %ecx - movl %ecx, -46(%edx) -L(fwd_write_42bytes): - movl -42(%eax), %ecx - movl %ecx, -42(%edx) -L(fwd_write_38bytes): - movl -38(%eax), %ecx - movl %ecx, -38(%edx) -L(fwd_write_34bytes): - movl -34(%eax), %ecx - movl %ecx, -34(%edx) -L(fwd_write_30bytes): - movl -30(%eax), %ecx - movl %ecx, -30(%edx) -L(fwd_write_26bytes): - movl -26(%eax), %ecx - movl %ecx, -26(%edx) -L(fwd_write_22bytes): - movl -22(%eax), %ecx - movl %ecx, -22(%edx) -L(fwd_write_18bytes): - movl -18(%eax), %ecx - movl %ecx, -18(%edx) -L(fwd_write_14bytes): - movl -14(%eax), %ecx - movl %ecx, -14(%edx) -L(fwd_write_10bytes): - movl -10(%eax), %ecx - movl %ecx, -10(%edx) -L(fwd_write_6bytes): - movl -6(%eax), %ecx - movl %ecx, -6(%edx) -L(fwd_write_2bytes): - movzwl -2(%eax), %ecx - movw %cx, -2(%edx) -#ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -#endif - RETURN - - ALIGN (4) -L(fwd_write_47bytes): - movl -47(%eax), %ecx - movl %ecx, -47(%edx) -L(fwd_write_43bytes): - movl -43(%eax), %ecx - movl %ecx, -43(%edx) -L(fwd_write_39bytes): - movl -39(%eax), %ecx - movl %ecx, -39(%edx) -L(fwd_write_35bytes): - movl -35(%eax), %ecx - movl %ecx, -35(%edx) -L(fwd_write_31bytes): - movl -31(%eax), %ecx - movl %ecx, -31(%edx) -L(fwd_write_27bytes): - movl -27(%eax), %ecx - movl %ecx, -27(%edx) -L(fwd_write_23bytes): - movl -23(%eax), %ecx - movl %ecx, -23(%edx) -L(fwd_write_19bytes): - movl -19(%eax), %ecx - movl %ecx, -19(%edx) -L(fwd_write_15bytes): - movl -15(%eax), %ecx - movl %ecx, -15(%edx) -L(fwd_write_11bytes): - movl -11(%eax), %ecx - movl %ecx, -11(%edx) -L(fwd_write_7bytes): - movl -7(%eax), %ecx - movl %ecx, -7(%edx) -L(fwd_write_3bytes): - movzwl -3(%eax), %ecx - movzbl -1(%eax), %eax - movw %cx, -3(%edx) - movb %al, -1(%edx) -#ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -#endif - RETURN_END - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(large_page): - movdqu (%eax), %xmm1 - movdqu %xmm0, (%esi) - movntdq %xmm1, (%edx) - add $0x10, %eax - add $0x10, %edx - sub $0x10, %ecx - cmp %al, %dl - je L(copy_page_by_rep) -L(large_page_loop_init): - POP (%esi) - sub $0x80, %ecx - POP (%edi) -L(large_page_loop): - prefetchnta 0x1c0(%eax) - prefetchnta 0x280(%eax) - movdqu (%eax), %xmm0 - movdqu 0x10(%eax), %xmm1 - movdqu 0x20(%eax), %xmm2 - movdqu 0x30(%eax), %xmm3 - movdqu 0x40(%eax), %xmm4 - movdqu 0x50(%eax), %xmm5 - movdqu 0x60(%eax), %xmm6 - movdqu 0x70(%eax), %xmm7 - lea 0x80(%eax), %eax - lfence - sub $0x80, %ecx - movntdq %xmm0, (%edx) - movntdq %xmm1, 0x10(%edx) - movntdq %xmm2, 0x20(%edx) - movntdq %xmm3, 0x30(%edx) - movntdq %xmm4, 0x40(%edx) - movntdq %xmm5, 0x50(%edx) - movntdq %xmm6, 0x60(%edx) - movntdq %xmm7, 0x70(%edx) - lea 0x80(%edx), %edx - jae L(large_page_loop) - add $0x80, %ecx - cmp $0x40, %ecx - jb L(large_page_less_64bytes) - - movdqu (%eax), %xmm0 - movdqu 0x10(%eax), %xmm1 - movdqu 0x20(%eax), %xmm2 - movdqu 0x30(%eax), %xmm3 - lea 0x40(%eax), %eax - - movntdq %xmm0, (%edx) - movntdq %xmm1, 0x10(%edx) - movntdq %xmm2, 0x20(%edx) - movntdq %xmm3, 0x30(%edx) - lea 0x40(%edx), %edx - sub $0x40, %ecx -L(large_page_less_64bytes): - cmp $32, %ecx - jb L(large_page_less_32bytes) - movdqu (%eax), %xmm0 - movdqu 0x10(%eax), %xmm1 - lea 0x20(%eax), %eax - movntdq %xmm0, (%edx) - movntdq %xmm1, 0x10(%edx) - lea 0x20(%edx), %edx - sub $0x20, %ecx -L(large_page_less_32bytes): - add %ecx, %edx - add %ecx, %eax - sfence - BRANCH_TO_JMPTBL_ENTRY (L(table_48bytes_fwd), %ecx, 4) - - cfi_restore_state - cfi_remember_state - ALIGN (4) -L(copy_page_by_rep): - mov %eax, %esi - mov %edx, %edi - mov %ecx, %edx - shr $2, %ecx - and $3, %edx - rep movsl - jz L(copy_page_by_rep_exit) - cmp $2, %edx - jb L(copy_page_by_rep_left_1) - movzwl (%esi), %eax - movw %ax, (%edi) - add $2, %esi - add $2, %edi - sub $2, %edx - jz L(copy_page_by_rep_exit) -L(copy_page_by_rep_left_1): - movzbl (%esi), %eax - movb %al, (%edi) -L(copy_page_by_rep_exit): - POP (%esi) - POP (%edi) -#ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -# ifdef USE_AS_MEMPCPY - movl LEN(%esp), %ecx - add %ecx, %eax -# endif -#endif - RETURN - - ALIGN (4) -L(bk_write_44bytes): - movl 40(%eax), %ecx - movl %ecx, 40(%edx) -L(bk_write_40bytes): - movl 36(%eax), %ecx - movl %ecx, 36(%edx) -L(bk_write_36bytes): - movl 32(%eax), %ecx - movl %ecx, 32(%edx) -L(bk_write_32bytes): - movl 28(%eax), %ecx - movl %ecx, 28(%edx) -L(bk_write_28bytes): - movl 24(%eax), %ecx - movl %ecx, 24(%edx) -L(bk_write_24bytes): - movl 20(%eax), %ecx - movl %ecx, 20(%edx) -L(bk_write_20bytes): - movl 16(%eax), %ecx - movl %ecx, 16(%edx) -L(bk_write_16bytes): - movl 12(%eax), %ecx - movl %ecx, 12(%edx) -L(bk_write_12bytes): - movl 8(%eax), %ecx - movl %ecx, 8(%edx) -L(bk_write_8bytes): - movl 4(%eax), %ecx - movl %ecx, 4(%edx) -L(bk_write_4bytes): - movl (%eax), %ecx - movl %ecx, (%edx) -L(bk_write_0bytes): -#ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -# ifdef USE_AS_MEMPCPY - movl LEN(%esp), %ecx - add %ecx, %eax -# endif -#endif - RETURN - - ALIGN (4) -L(bk_write_45bytes): - movl 41(%eax), %ecx - movl %ecx, 41(%edx) -L(bk_write_41bytes): - movl 37(%eax), %ecx - movl %ecx, 37(%edx) -L(bk_write_37bytes): - movl 33(%eax), %ecx - movl %ecx, 33(%edx) -L(bk_write_33bytes): - movl 29(%eax), %ecx - movl %ecx, 29(%edx) -L(bk_write_29bytes): - movl 25(%eax), %ecx - movl %ecx, 25(%edx) -L(bk_write_25bytes): - movl 21(%eax), %ecx - movl %ecx, 21(%edx) -L(bk_write_21bytes): - movl 17(%eax), %ecx - movl %ecx, 17(%edx) -L(bk_write_17bytes): - movl 13(%eax), %ecx - movl %ecx, 13(%edx) -L(bk_write_13bytes): - movl 9(%eax), %ecx - movl %ecx, 9(%edx) -L(bk_write_9bytes): - movl 5(%eax), %ecx - movl %ecx, 5(%edx) -L(bk_write_5bytes): - movl 1(%eax), %ecx - movl %ecx, 1(%edx) -L(bk_write_1bytes): - movzbl (%eax), %ecx - movb %cl, (%edx) -#ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -# ifdef USE_AS_MEMPCPY - movl LEN(%esp), %ecx - add %ecx, %eax -# endif -#endif - RETURN - - ALIGN (4) -L(bk_write_46bytes): - movl 42(%eax), %ecx - movl %ecx, 42(%edx) -L(bk_write_42bytes): - movl 38(%eax), %ecx - movl %ecx, 38(%edx) -L(bk_write_38bytes): - movl 34(%eax), %ecx - movl %ecx, 34(%edx) -L(bk_write_34bytes): - movl 30(%eax), %ecx - movl %ecx, 30(%edx) -L(bk_write_30bytes): - movl 26(%eax), %ecx - movl %ecx, 26(%edx) -L(bk_write_26bytes): - movl 22(%eax), %ecx - movl %ecx, 22(%edx) -L(bk_write_22bytes): - movl 18(%eax), %ecx - movl %ecx, 18(%edx) -L(bk_write_18bytes): - movl 14(%eax), %ecx - movl %ecx, 14(%edx) -L(bk_write_14bytes): - movl 10(%eax), %ecx - movl %ecx, 10(%edx) -L(bk_write_10bytes): - movl 6(%eax), %ecx - movl %ecx, 6(%edx) -L(bk_write_6bytes): - movl 2(%eax), %ecx - movl %ecx, 2(%edx) -L(bk_write_2bytes): - movzwl (%eax), %ecx - movw %cx, (%edx) -#ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -# ifdef USE_AS_MEMPCPY - movl LEN(%esp), %ecx - add %ecx, %eax -# endif -#endif - RETURN - - ALIGN (4) -L(bk_write_47bytes): - movl 43(%eax), %ecx - movl %ecx, 43(%edx) -L(bk_write_43bytes): - movl 39(%eax), %ecx - movl %ecx, 39(%edx) -L(bk_write_39bytes): - movl 35(%eax), %ecx - movl %ecx, 35(%edx) -L(bk_write_35bytes): - movl 31(%eax), %ecx - movl %ecx, 31(%edx) -L(bk_write_31bytes): - movl 27(%eax), %ecx - movl %ecx, 27(%edx) -L(bk_write_27bytes): - movl 23(%eax), %ecx - movl %ecx, 23(%edx) -L(bk_write_23bytes): - movl 19(%eax), %ecx - movl %ecx, 19(%edx) -L(bk_write_19bytes): - movl 15(%eax), %ecx - movl %ecx, 15(%edx) -L(bk_write_15bytes): - movl 11(%eax), %ecx - movl %ecx, 11(%edx) -L(bk_write_11bytes): - movl 7(%eax), %ecx - movl %ecx, 7(%edx) -L(bk_write_7bytes): - movl 3(%eax), %ecx - movl %ecx, 3(%edx) -L(bk_write_3bytes): - movzwl 1(%eax), %ecx - movw %cx, 1(%edx) - movzbl (%eax), %eax - movb %al, (%edx) -#ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -# ifdef USE_AS_MEMPCPY - movl LEN(%esp), %ecx - add %ecx, %eax -# endif -#endif - RETURN_END - - - .pushsection .rodata.ssse3,"a",@progbits - ALIGN (2) -L(table_48bytes_fwd): - .int JMPTBL (L(fwd_write_0bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_1bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_2bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_3bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_4bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_5bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_6bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_7bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_8bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_9bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_10bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_11bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_12bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_13bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_14bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_15bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_16bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_17bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_18bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_19bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_20bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_21bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_22bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_23bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_24bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_25bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_26bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_27bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_28bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_29bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_30bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_31bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_32bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_33bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_34bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_35bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_36bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_37bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_38bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_39bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_40bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_41bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_42bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_43bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_44bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_45bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_46bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_47bytes), L(table_48bytes_fwd)) - - ALIGN (2) -L(shl_table): - .int JMPTBL (L(shl_0), L(shl_table)) - .int JMPTBL (L(shl_1), L(shl_table)) - .int JMPTBL (L(shl_2), L(shl_table)) - .int JMPTBL (L(shl_3), L(shl_table)) - .int JMPTBL (L(shl_4), L(shl_table)) - .int JMPTBL (L(shl_5), L(shl_table)) - .int JMPTBL (L(shl_6), L(shl_table)) - .int JMPTBL (L(shl_7), L(shl_table)) - .int JMPTBL (L(shl_8), L(shl_table)) - .int JMPTBL (L(shl_9), L(shl_table)) - .int JMPTBL (L(shl_10), L(shl_table)) - .int JMPTBL (L(shl_11), L(shl_table)) - .int JMPTBL (L(shl_12), L(shl_table)) - .int JMPTBL (L(shl_13), L(shl_table)) - .int JMPTBL (L(shl_14), L(shl_table)) - .int JMPTBL (L(shl_15), L(shl_table)) - - ALIGN (2) -L(table_48_bytes_bwd): - .int JMPTBL (L(bk_write_0bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_1bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_2bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_3bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_4bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_5bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_6bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_7bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_8bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_9bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_10bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_11bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_12bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_13bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_14bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_15bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_16bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_17bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_18bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_19bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_20bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_21bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_22bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_23bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_24bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_25bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_26bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_27bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_28bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_29bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_30bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_31bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_32bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_33bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_34bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_35bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_36bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_37bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_38bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_39bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_40bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_41bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_42bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_43bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_44bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_45bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_46bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_47bytes), L(table_48_bytes_bwd)) - - .popsection - -#ifdef USE_AS_MEMMOVE - ALIGN (4) -L(copy_backward): - PUSH (%esi) - movl %eax, %esi - add %ecx, %edx - add %ecx, %esi - testl $0x3, %edx - jnz L(bk_align) - -L(bk_aligned_4): - cmp $64, %ecx - jae L(bk_write_more64bytes) - -L(bk_write_64bytesless): - cmp $32, %ecx - jb L(bk_write_less32bytes) - -L(bk_write_more32bytes): - /* Copy 32 bytes at a time. */ - sub $32, %ecx - movl -4(%esi), %eax - movl %eax, -4(%edx) - movl -8(%esi), %eax - movl %eax, -8(%edx) - movl -12(%esi), %eax - movl %eax, -12(%edx) - movl -16(%esi), %eax - movl %eax, -16(%edx) - movl -20(%esi), %eax - movl %eax, -20(%edx) - movl -24(%esi), %eax - movl %eax, -24(%edx) - movl -28(%esi), %eax - movl %eax, -28(%edx) - movl -32(%esi), %eax - movl %eax, -32(%edx) - sub $32, %edx - sub $32, %esi - -L(bk_write_less32bytes): - movl %esi, %eax - sub %ecx, %edx - sub %ecx, %eax - POP (%esi) -L(bk_write_less48bytes): - BRANCH_TO_JMPTBL_ENTRY (L(table_48_bytes_bwd), %ecx, 4) - - CFI_PUSH (%esi) - ALIGN (4) -L(bk_align): - cmp $8, %ecx - jbe L(bk_write_less32bytes) - testl $1, %edx - /* We get here only if (EDX & 3 ) != 0 so if (EDX & 1) ==0, - then (EDX & 2) must be != 0. */ - jz L(bk_got2) - sub $1, %esi - sub $1, %ecx - sub $1, %edx - movzbl (%esi), %eax - movb %al, (%edx) - - testl $2, %edx - jz L(bk_aligned_4) - -L(bk_got2): - sub $2, %esi - sub $2, %ecx - sub $2, %edx - movzwl (%esi), %eax - movw %ax, (%edx) - jmp L(bk_aligned_4) - - ALIGN (4) -L(bk_write_more64bytes): - /* Check alignment of last byte. */ - testl $15, %edx - jz L(bk_ssse3_cpy_pre) - -/* EDX is aligned 4 bytes, but not 16 bytes. */ -L(bk_ssse3_align): - sub $4, %esi - sub $4, %ecx - sub $4, %edx - movl (%esi), %eax - movl %eax, (%edx) - - testl $15, %edx - jz L(bk_ssse3_cpy_pre) - - sub $4, %esi - sub $4, %ecx - sub $4, %edx - movl (%esi), %eax - movl %eax, (%edx) - - testl $15, %edx - jz L(bk_ssse3_cpy_pre) - - sub $4, %esi - sub $4, %ecx - sub $4, %edx - movl (%esi), %eax - movl %eax, (%edx) - -L(bk_ssse3_cpy_pre): - cmp $64, %ecx - jb L(bk_write_more32bytes) - -L(bk_ssse3_cpy): - sub $64, %esi - sub $64, %ecx - sub $64, %edx - movdqu 0x30(%esi), %xmm3 - movdqa %xmm3, 0x30(%edx) - movdqu 0x20(%esi), %xmm2 - movdqa %xmm2, 0x20(%edx) - movdqu 0x10(%esi), %xmm1 - movdqa %xmm1, 0x10(%edx) - movdqu (%esi), %xmm0 - movdqa %xmm0, (%edx) - cmp $64, %ecx - jae L(bk_ssse3_cpy) - jmp L(bk_write_64bytesless) - -#endif - -END (MEMCPY) - -#endif diff --git a/sysdeps/i386/i686/multiarch/memcpy-ssse3.S b/sysdeps/i386/i686/multiarch/memcpy-ssse3.S deleted file mode 100644 index 53e8a6ca1d..0000000000 --- a/sysdeps/i386/i686/multiarch/memcpy-ssse3.S +++ /dev/null @@ -1,3162 +0,0 @@ -/* memcpy with SSSE3 - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) \ - && (defined SHARED \ - || defined USE_AS_MEMMOVE \ - || !defined USE_MULTIARCH) - -# include -# include "asm-syntax.h" - -# ifndef MEMCPY -# define MEMCPY __memcpy_ssse3 -# define MEMCPY_CHK __memcpy_chk_ssse3 -# endif - -# ifdef USE_AS_BCOPY -# define SRC PARMS -# define DEST SRC+4 -# define LEN DEST+4 -# else -# define DEST PARMS -# define SRC DEST+4 -# define LEN SRC+4 -# endif - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# ifdef SHARED -# define PARMS 8 /* Preserve EBX. */ -# define ENTRANCE PUSH (%ebx); -# define RETURN_END POP (%ebx); ret -# define RETURN RETURN_END; CFI_PUSH (%ebx) -# define JMPTBL(I, B) I - B - -/* Load an entry in a jump table into EBX and branch to it. TABLE is a - jump table with relative offsets. INDEX is a register contains the - index into the jump table. SCALE is the scale of INDEX. */ - -# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ - /* We first load PC into EBX. */ \ - SETUP_PIC_REG(bx); \ - /* Get the address of the jump table. */ \ - addl $(TABLE - .), %ebx; \ - /* Get the entry and convert the relative offset to the \ - absolute address. */ \ - addl (%ebx, INDEX, SCALE), %ebx; \ - /* We loaded the jump table. Go. */ \ - jmp *%ebx -# else - -# define PARMS 4 -# define ENTRANCE -# define RETURN_END ret -# define RETURN RETURN_END -# define JMPTBL(I, B) I - -/* Branch to an entry in a jump table. TABLE is a jump table with - absolute offsets. INDEX is a register contains the index into the - jump table. SCALE is the scale of INDEX. */ - -# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ - jmp *TABLE(, INDEX, SCALE) -# endif - - .section .text.ssse3,"ax",@progbits -# if !defined USE_AS_BCOPY -ENTRY (MEMCPY_CHK) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb HIDDEN_JUMPTARGET (__chk_fail) -END (MEMCPY_CHK) -# endif -ENTRY (MEMCPY) - ENTRANCE - movl LEN(%esp), %ecx - movl SRC(%esp), %eax - movl DEST(%esp), %edx - -# ifdef USE_AS_MEMMOVE - cmp %eax, %edx - jb L(copy_forward) - je L(fwd_write_0bytes) - cmp $32, %ecx - jae L(memmove_bwd) - jmp L(bk_write_less32bytes_2) - - .p2align 4 -L(memmove_bwd): - add %ecx, %eax - cmp %eax, %edx - movl SRC(%esp), %eax - jb L(copy_backward) - -L(copy_forward): -# endif - cmp $48, %ecx - jae L(48bytesormore) - -L(fwd_write_less32bytes): -# ifndef USE_AS_MEMMOVE - cmp %dl, %al - jb L(bk_write) -# endif - add %ecx, %edx - add %ecx, %eax - BRANCH_TO_JMPTBL_ENTRY (L(table_48bytes_fwd), %ecx, 4) -# ifndef USE_AS_MEMMOVE - .p2align 4 -L(bk_write): - BRANCH_TO_JMPTBL_ENTRY (L(table_48_bytes_bwd), %ecx, 4) -# endif - - .p2align 4 -L(48bytesormore): -# ifndef USE_AS_MEMMOVE - movlpd (%eax), %xmm0 - movlpd 8(%eax), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 8(%edx) -# else - movdqu (%eax), %xmm0 -# endif - PUSH (%edi) - movl %edx, %edi - and $-16, %edx - add $16, %edx - sub %edx, %edi - add %edi, %ecx - sub %edi, %eax - -# ifdef SHARED_CACHE_SIZE_HALF - cmp $SHARED_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_shared_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_shared_cache_size_half, %ecx -# endif -# endif - - mov %eax, %edi - jae L(large_page) - and $0xf, %edi - jz L(shl_0) - BRANCH_TO_JMPTBL_ENTRY (L(shl_table), %edi, 4) - - .p2align 4 -L(shl_0): -# ifdef USE_AS_MEMMOVE - movl DEST+4(%esp), %edi - movdqu %xmm0, (%edi) -# endif - xor %edi, %edi - cmp $127, %ecx - ja L(shl_0_gobble) - lea -32(%ecx), %ecx - - .p2align 4 -L(shl_0_loop): - movdqa (%eax, %edi), %xmm0 - movdqa 16(%eax, %edi), %xmm1 - sub $32, %ecx - movdqa %xmm0, (%edx, %edi) - movdqa %xmm1, 16(%edx, %edi) - lea 32(%edi), %edi - jb L(shl_0_end) - - movdqa (%eax, %edi), %xmm0 - movdqa 16(%eax, %edi), %xmm1 - sub $32, %ecx - movdqa %xmm0, (%edx, %edi) - movdqa %xmm1, 16(%edx, %edi) - lea 32(%edi), %edi - jb L(shl_0_end) - - movdqa (%eax, %edi), %xmm0 - movdqa 16(%eax, %edi), %xmm1 - sub $32, %ecx - movdqa %xmm0, (%edx, %edi) - movdqa %xmm1, 16(%edx, %edi) - lea 32(%edi), %edi - jb L(shl_0_end) - - movdqa (%eax, %edi), %xmm0 - movdqa 16(%eax, %edi), %xmm1 - sub $32, %ecx - movdqa %xmm0, (%edx, %edi) - movdqa %xmm1, 16(%edx, %edi) - lea 32(%edi), %edi - -L(shl_0_end): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - add %edi, %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY (L(table_48bytes_fwd_align), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_0_gobble): -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - POP (%edi) - lea -128(%ecx), %ecx - jae L(shl_0_gobble_mem_loop) - - .p2align 4 -L(shl_0_gobble_cache_loop): - movdqa (%eax), %xmm0 - movdqa 0x10(%eax), %xmm1 - movdqa 0x20(%eax), %xmm2 - movdqa 0x30(%eax), %xmm3 - movdqa 0x40(%eax), %xmm4 - movdqa 0x50(%eax), %xmm5 - movdqa 0x60(%eax), %xmm6 - movdqa 0x70(%eax), %xmm7 - lea 0x80(%eax), %eax - sub $128, %ecx - movdqa %xmm0, (%edx) - movdqa %xmm1, 0x10(%edx) - movdqa %xmm2, 0x20(%edx) - movdqa %xmm3, 0x30(%edx) - movdqa %xmm4, 0x40(%edx) - movdqa %xmm5, 0x50(%edx) - movdqa %xmm6, 0x60(%edx) - movdqa %xmm7, 0x70(%edx) - lea 0x80(%edx), %edx - - jae L(shl_0_gobble_cache_loop) - cmp $-0x40, %ecx - lea 0x80(%ecx), %ecx - jl L(shl_0_cache_less_64bytes) - - movdqa (%eax), %xmm0 - sub $0x40, %ecx - movdqa 0x10(%eax), %xmm1 - movdqa %xmm0, (%edx) - movdqa %xmm1, 0x10(%edx) - movdqa 0x20(%eax), %xmm0 - movdqa 0x30(%eax), %xmm1 - add $0x40, %eax - movdqa %xmm0, 0x20(%edx) - movdqa %xmm1, 0x30(%edx) - add $0x40, %edx - -L(shl_0_cache_less_64bytes): - cmp $0x20, %ecx - jb L(shl_0_cache_less_32bytes) - movdqa (%eax), %xmm0 - sub $0x20, %ecx - movdqa 0x10(%eax), %xmm1 - add $0x20, %eax - movdqa %xmm0, (%edx) - movdqa %xmm1, 0x10(%edx) - add $0x20, %edx - -L(shl_0_cache_less_32bytes): - cmp $0x10, %ecx - jb L(shl_0_cache_less_16bytes) - sub $0x10, %ecx - movdqa (%eax), %xmm0 - add $0x10, %eax - movdqa %xmm0, (%edx) - add $0x10, %edx - -L(shl_0_cache_less_16bytes): - add %ecx, %edx - add %ecx, %eax - BRANCH_TO_JMPTBL_ENTRY (L(table_48bytes_fwd), %ecx, 4) - - .p2align 4 -L(shl_0_gobble_mem_loop): - prefetcht0 0x1c0(%eax) - prefetcht0 0x280(%eax) - prefetcht0 0x1c0(%edx) - - movdqa (%eax), %xmm0 - movdqa 0x10(%eax), %xmm1 - movdqa 0x20(%eax), %xmm2 - movdqa 0x30(%eax), %xmm3 - movdqa 0x40(%eax), %xmm4 - movdqa 0x50(%eax), %xmm5 - movdqa 0x60(%eax), %xmm6 - movdqa 0x70(%eax), %xmm7 - lea 0x80(%eax), %eax - sub $0x80, %ecx - movdqa %xmm0, (%edx) - movdqa %xmm1, 0x10(%edx) - movdqa %xmm2, 0x20(%edx) - movdqa %xmm3, 0x30(%edx) - movdqa %xmm4, 0x40(%edx) - movdqa %xmm5, 0x50(%edx) - movdqa %xmm6, 0x60(%edx) - movdqa %xmm7, 0x70(%edx) - lea 0x80(%edx), %edx - - jae L(shl_0_gobble_mem_loop) - cmp $-0x40, %ecx - lea 0x80(%ecx), %ecx - jl L(shl_0_mem_less_64bytes) - - movdqa (%eax), %xmm0 - sub $0x40, %ecx - movdqa 0x10(%eax), %xmm1 - - movdqa %xmm0, (%edx) - movdqa %xmm1, 0x10(%edx) - - movdqa 0x20(%eax), %xmm0 - movdqa 0x30(%eax), %xmm1 - add $0x40, %eax - - movdqa %xmm0, 0x20(%edx) - movdqa %xmm1, 0x30(%edx) - add $0x40, %edx - -L(shl_0_mem_less_64bytes): - cmp $0x20, %ecx - jb L(shl_0_mem_less_32bytes) - movdqa (%eax), %xmm0 - sub $0x20, %ecx - movdqa 0x10(%eax), %xmm1 - add $0x20, %eax - movdqa %xmm0, (%edx) - movdqa %xmm1, 0x10(%edx) - add $0x20, %edx - -L(shl_0_mem_less_32bytes): - cmp $0x10, %ecx - jb L(shl_0_mem_less_16bytes) - sub $0x10, %ecx - movdqa (%eax), %xmm0 - add $0x10, %eax - movdqa %xmm0, (%edx) - add $0x10, %edx - -L(shl_0_mem_less_16bytes): - add %ecx, %edx - add %ecx, %eax - BRANCH_TO_JMPTBL_ENTRY (L(table_48bytes_fwd_align), %ecx, 4) - - .p2align 4 -L(shl_1): -# ifndef USE_AS_MEMMOVE - movaps -1(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -1(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_1_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl1LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 15(%eax), %xmm2 - movaps 31(%eax), %xmm3 - movaps 47(%eax), %xmm4 - movaps 63(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $1, %xmm4, %xmm5 - palignr $1, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $1, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $1, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl1LoopStart) - -L(Shl1LoopLeave): - add $32, %ecx - jle L(shl_end_0) - - movaps 15(%eax), %xmm2 - movaps 31(%eax), %xmm3 - palignr $1, %xmm2, %xmm3 - palignr $1, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_1_no_prefetch): - lea -32(%ecx), %ecx - lea -1(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_1_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $1, %xmm2, %xmm3 - palignr $1, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jb L(sh_1_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $1, %xmm2, %xmm3 - palignr $1, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jae L(sh_1_no_prefetch_loop) - -L(sh_1_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 1(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_2): -# ifndef USE_AS_MEMMOVE - movaps -2(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -2(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_2_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl2LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 14(%eax), %xmm2 - movaps 30(%eax), %xmm3 - movaps 46(%eax), %xmm4 - movaps 62(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $2, %xmm4, %xmm5 - palignr $2, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $2, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $2, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl2LoopStart) - -L(Shl2LoopLeave): - add $32, %ecx - jle L(shl_end_0) - - movaps 14(%eax), %xmm2 - movaps 30(%eax), %xmm3 - palignr $2, %xmm2, %xmm3 - palignr $2, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_2_no_prefetch): - lea -32(%ecx), %ecx - lea -2(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_2_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $2, %xmm2, %xmm3 - palignr $2, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jb L(sh_2_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $2, %xmm2, %xmm3 - palignr $2, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jae L(sh_2_no_prefetch_loop) - -L(sh_2_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 2(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_3): -# ifndef USE_AS_MEMMOVE - movaps -3(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -3(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_3_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl3LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 13(%eax), %xmm2 - movaps 29(%eax), %xmm3 - movaps 45(%eax), %xmm4 - movaps 61(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $3, %xmm4, %xmm5 - palignr $3, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $3, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $3, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl3LoopStart) - -L(Shl3LoopLeave): - add $32, %ecx - jle L(shl_end_0) - - movaps 13(%eax), %xmm2 - movaps 29(%eax), %xmm3 - palignr $3, %xmm2, %xmm3 - palignr $3, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_3_no_prefetch): - lea -32(%ecx), %ecx - lea -3(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_3_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $3, %xmm2, %xmm3 - palignr $3, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(sh_3_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $3, %xmm2, %xmm3 - palignr $3, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(sh_3_no_prefetch_loop) - -L(sh_3_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 3(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_4): -# ifndef USE_AS_MEMMOVE - movaps -4(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -4(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_4_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl4LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 12(%eax), %xmm2 - movaps 28(%eax), %xmm3 - movaps 44(%eax), %xmm4 - movaps 60(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $4, %xmm4, %xmm5 - palignr $4, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $4, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $4, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl4LoopStart) - -L(Shl4LoopLeave): - add $32, %ecx - jle L(shl_end_0) - - movaps 12(%eax), %xmm2 - movaps 28(%eax), %xmm3 - palignr $4, %xmm2, %xmm3 - palignr $4, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_4_no_prefetch): - lea -32(%ecx), %ecx - lea -4(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_4_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $4, %xmm2, %xmm3 - palignr $4, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(sh_4_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $4, %xmm2, %xmm3 - palignr $4, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(sh_4_no_prefetch_loop) - -L(sh_4_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 4(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_5): -# ifndef USE_AS_MEMMOVE - movaps -5(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -5(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_5_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl5LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 11(%eax), %xmm2 - movaps 27(%eax), %xmm3 - movaps 43(%eax), %xmm4 - movaps 59(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $5, %xmm4, %xmm5 - palignr $5, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $5, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $5, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl5LoopStart) - -L(Shl5LoopLeave): - add $32, %ecx - jle L(shl_end_0) - - movaps 11(%eax), %xmm2 - movaps 27(%eax), %xmm3 - palignr $5, %xmm2, %xmm3 - palignr $5, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_5_no_prefetch): - lea -32(%ecx), %ecx - lea -5(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_5_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $5, %xmm2, %xmm3 - palignr $5, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(sh_5_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $5, %xmm2, %xmm3 - palignr $5, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(sh_5_no_prefetch_loop) - -L(sh_5_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 5(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_6): -# ifndef USE_AS_MEMMOVE - movaps -6(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -6(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_6_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl6LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 10(%eax), %xmm2 - movaps 26(%eax), %xmm3 - movaps 42(%eax), %xmm4 - movaps 58(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $6, %xmm4, %xmm5 - palignr $6, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $6, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $6, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl6LoopStart) - -L(Shl6LoopLeave): - add $32, %ecx - jle L(shl_end_0) - - movaps 10(%eax), %xmm2 - movaps 26(%eax), %xmm3 - palignr $6, %xmm2, %xmm3 - palignr $6, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_6_no_prefetch): - lea -32(%ecx), %ecx - lea -6(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_6_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $6, %xmm2, %xmm3 - palignr $6, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jb L(sh_6_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $6, %xmm2, %xmm3 - palignr $6, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - - jae L(sh_6_no_prefetch_loop) - -L(sh_6_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 6(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_7): -# ifndef USE_AS_MEMMOVE - movaps -7(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -7(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_7_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl7LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 9(%eax), %xmm2 - movaps 25(%eax), %xmm3 - movaps 41(%eax), %xmm4 - movaps 57(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $7, %xmm4, %xmm5 - palignr $7, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $7, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $7, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl7LoopStart) - -L(Shl7LoopLeave): - add $32, %ecx - jle L(shl_end_0) - - movaps 9(%eax), %xmm2 - movaps 25(%eax), %xmm3 - palignr $7, %xmm2, %xmm3 - palignr $7, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_7_no_prefetch): - lea -32(%ecx), %ecx - lea -7(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_7_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $7, %xmm2, %xmm3 - palignr $7, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jb L(sh_7_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $7, %xmm2, %xmm3 - palignr $7, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jae L(sh_7_no_prefetch_loop) - -L(sh_7_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 7(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_8): -# ifndef USE_AS_MEMMOVE - movaps -8(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -8(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_8_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl8LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 8(%eax), %xmm2 - movaps 24(%eax), %xmm3 - movaps 40(%eax), %xmm4 - movaps 56(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $8, %xmm4, %xmm5 - palignr $8, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $8, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $8, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl8LoopStart) - -L(LoopLeave8): - add $32, %ecx - jle L(shl_end_0) - - movaps 8(%eax), %xmm2 - movaps 24(%eax), %xmm3 - palignr $8, %xmm2, %xmm3 - palignr $8, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_8_no_prefetch): - lea -32(%ecx), %ecx - lea -8(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_8_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $8, %xmm2, %xmm3 - palignr $8, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jb L(sh_8_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $8, %xmm2, %xmm3 - palignr $8, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jae L(sh_8_no_prefetch_loop) - -L(sh_8_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 8(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_9): -# ifndef USE_AS_MEMMOVE - movaps -9(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -9(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_9_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl9LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 7(%eax), %xmm2 - movaps 23(%eax), %xmm3 - movaps 39(%eax), %xmm4 - movaps 55(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $9, %xmm4, %xmm5 - palignr $9, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $9, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $9, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl9LoopStart) - -L(Shl9LoopLeave): - add $32, %ecx - jle L(shl_end_0) - - movaps 7(%eax), %xmm2 - movaps 23(%eax), %xmm3 - palignr $9, %xmm2, %xmm3 - palignr $9, %xmm1, %xmm2 - - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_9_no_prefetch): - lea -32(%ecx), %ecx - lea -9(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_9_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $9, %xmm2, %xmm3 - palignr $9, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jb L(sh_9_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $9, %xmm2, %xmm3 - palignr $9, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jae L(sh_9_no_prefetch_loop) - -L(sh_9_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 9(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_10): -# ifndef USE_AS_MEMMOVE - movaps -10(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -10(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_10_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl10LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 6(%eax), %xmm2 - movaps 22(%eax), %xmm3 - movaps 38(%eax), %xmm4 - movaps 54(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $10, %xmm4, %xmm5 - palignr $10, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $10, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $10, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl10LoopStart) - -L(Shl10LoopLeave): - add $32, %ecx - jle L(shl_end_0) - - movaps 6(%eax), %xmm2 - movaps 22(%eax), %xmm3 - palignr $10, %xmm2, %xmm3 - palignr $10, %xmm1, %xmm2 - - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_10_no_prefetch): - lea -32(%ecx), %ecx - lea -10(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_10_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $10, %xmm2, %xmm3 - palignr $10, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jb L(sh_10_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $10, %xmm2, %xmm3 - palignr $10, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jae L(sh_10_no_prefetch_loop) - -L(sh_10_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 10(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_11): -# ifndef USE_AS_MEMMOVE - movaps -11(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -11(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_11_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl11LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 5(%eax), %xmm2 - movaps 21(%eax), %xmm3 - movaps 37(%eax), %xmm4 - movaps 53(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $11, %xmm4, %xmm5 - palignr $11, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $11, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $11, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl11LoopStart) - -L(Shl11LoopLeave): - add $32, %ecx - jle L(shl_end_0) - - movaps 5(%eax), %xmm2 - movaps 21(%eax), %xmm3 - palignr $11, %xmm2, %xmm3 - palignr $11, %xmm1, %xmm2 - - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_11_no_prefetch): - lea -32(%ecx), %ecx - lea -11(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_11_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $11, %xmm2, %xmm3 - palignr $11, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jb L(sh_11_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $11, %xmm2, %xmm3 - palignr $11, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jae L(sh_11_no_prefetch_loop) - -L(sh_11_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 11(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_12): -# ifndef USE_AS_MEMMOVE - movaps -12(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -12(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_12_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl12LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 4(%eax), %xmm2 - movaps 20(%eax), %xmm3 - movaps 36(%eax), %xmm4 - movaps 52(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $12, %xmm4, %xmm5 - palignr $12, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $12, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $12, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl12LoopStart) - -L(Shl12LoopLeave): - add $32, %ecx - jle L(shl_end_0) - - movaps 4(%eax), %xmm2 - movaps 20(%eax), %xmm3 - palignr $12, %xmm2, %xmm3 - palignr $12, %xmm1, %xmm2 - - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_12_no_prefetch): - lea -32(%ecx), %ecx - lea -12(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_12_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $12, %xmm2, %xmm3 - palignr $12, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jb L(sh_12_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $12, %xmm2, %xmm3 - palignr $12, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jae L(sh_12_no_prefetch_loop) - -L(sh_12_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 12(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_13): -# ifndef USE_AS_MEMMOVE - movaps -13(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -13(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_13_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl13LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 3(%eax), %xmm2 - movaps 19(%eax), %xmm3 - movaps 35(%eax), %xmm4 - movaps 51(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $13, %xmm4, %xmm5 - palignr $13, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $13, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $13, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl13LoopStart) - -L(Shl13LoopLeave): - add $32, %ecx - jle L(shl_end_0) - - movaps 3(%eax), %xmm2 - movaps 19(%eax), %xmm3 - palignr $13, %xmm2, %xmm3 - palignr $13, %xmm1, %xmm2 - - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_13_no_prefetch): - lea -32(%ecx), %ecx - lea -13(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_13_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $13, %xmm2, %xmm3 - palignr $13, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jb L(sh_13_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $13, %xmm2, %xmm3 - palignr $13, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jae L(sh_13_no_prefetch_loop) - -L(sh_13_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 13(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_14): -# ifndef USE_AS_MEMMOVE - movaps -14(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -14(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_14_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl14LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 2(%eax), %xmm2 - movaps 18(%eax), %xmm3 - movaps 34(%eax), %xmm4 - movaps 50(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $14, %xmm4, %xmm5 - palignr $14, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $14, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $14, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl14LoopStart) - -L(Shl14LoopLeave): - add $32, %ecx - jle L(shl_end_0) - - movaps 2(%eax), %xmm2 - movaps 18(%eax), %xmm3 - palignr $14, %xmm2, %xmm3 - palignr $14, %xmm1, %xmm2 - - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_14_no_prefetch): - lea -32(%ecx), %ecx - lea -14(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_14_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $14, %xmm2, %xmm3 - palignr $14, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jb L(sh_14_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $14, %xmm2, %xmm3 - palignr $14, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jae L(sh_14_no_prefetch_loop) - -L(sh_14_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 14(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_15): -# ifndef USE_AS_MEMMOVE - movaps -15(%eax), %xmm1 -# else - movl DEST+4(%esp), %edi - movaps -15(%eax), %xmm1 - movdqu %xmm0, (%edi) -# endif -# ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %ecx -# else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size_half@GOTOFF(%ebx), %ecx -# else - cmp __x86_data_cache_size_half, %ecx -# endif -# endif - jb L(sh_15_no_prefetch) - - lea -64(%ecx), %ecx - - .p2align 4 -L(Shl15LoopStart): - prefetcht0 0x1c0(%eax) - prefetcht0 0x1c0(%edx) - movaps 1(%eax), %xmm2 - movaps 17(%eax), %xmm3 - movaps 33(%eax), %xmm4 - movaps 49(%eax), %xmm5 - movaps %xmm5, %xmm7 - palignr $15, %xmm4, %xmm5 - palignr $15, %xmm3, %xmm4 - movaps %xmm5, 48(%edx) - palignr $15, %xmm2, %xmm3 - lea 64(%eax), %eax - palignr $15, %xmm1, %xmm2 - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm7, %xmm1 - movaps %xmm2, (%edx) - lea 64(%edx), %edx - sub $64, %ecx - ja L(Shl15LoopStart) - -L(Shl15LoopLeave): - add $32, %ecx - jle L(shl_end_0) - - movaps 1(%eax), %xmm2 - movaps 17(%eax), %xmm3 - palignr $15, %xmm2, %xmm3 - palignr $15, %xmm1, %xmm2 - - movaps %xmm2, (%edx) - movaps %xmm3, 16(%edx) - lea 32(%edx, %ecx), %edx - lea 32(%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(sh_15_no_prefetch): - lea -32(%ecx), %ecx - lea -15(%eax), %eax - xor %edi, %edi - - .p2align 4 -L(sh_15_no_prefetch_loop): - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm4 - palignr $15, %xmm2, %xmm3 - palignr $15, %xmm1, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jb L(sh_15_end_no_prefetch_loop) - - movdqa 16(%eax, %edi), %xmm2 - sub $32, %ecx - movdqa 32(%eax, %edi), %xmm3 - movdqa %xmm3, %xmm1 - palignr $15, %xmm2, %xmm3 - palignr $15, %xmm4, %xmm2 - lea 32(%edi), %edi - movdqa %xmm2, -32(%edx, %edi) - movdqa %xmm3, -16(%edx, %edi) - jae L(sh_15_no_prefetch_loop) - -L(sh_15_end_no_prefetch_loop): - lea 32(%ecx), %ecx - add %ecx, %edi - add %edi, %edx - lea 15(%edi, %eax), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(shl_end_0): - lea 32(%ecx), %ecx - lea (%edx, %ecx), %edx - lea (%eax, %ecx), %eax - POP (%edi) - BRANCH_TO_JMPTBL_ENTRY(L(table_48bytes_fwd), %ecx, 4) - - .p2align 4 -L(fwd_write_44bytes): - movq -44(%eax), %xmm0 - movq %xmm0, -44(%edx) -L(fwd_write_36bytes): - movq -36(%eax), %xmm0 - movq %xmm0, -36(%edx) -L(fwd_write_28bytes): - movq -28(%eax), %xmm0 - movq %xmm0, -28(%edx) -L(fwd_write_20bytes): - movq -20(%eax), %xmm0 - movq %xmm0, -20(%edx) -L(fwd_write_12bytes): - movq -12(%eax), %xmm0 - movq %xmm0, -12(%edx) -L(fwd_write_4bytes): - movl -4(%eax), %ecx - movl %ecx, -4(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_40bytes): - movq -40(%eax), %xmm0 - movq %xmm0, -40(%edx) -L(fwd_write_32bytes): - movq -32(%eax), %xmm0 - movq %xmm0, -32(%edx) -L(fwd_write_24bytes): - movq -24(%eax), %xmm0 - movq %xmm0, -24(%edx) -L(fwd_write_16bytes): - movq -16(%eax), %xmm0 - movq %xmm0, -16(%edx) -L(fwd_write_8bytes): - movq -8(%eax), %xmm0 - movq %xmm0, -8(%edx) -L(fwd_write_0bytes): -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_5bytes): - movl -5(%eax), %ecx - movl -4(%eax), %eax - movl %ecx, -5(%edx) - movl %eax, -4(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_45bytes): - movq -45(%eax), %xmm0 - movq %xmm0, -45(%edx) -L(fwd_write_37bytes): - movq -37(%eax), %xmm0 - movq %xmm0, -37(%edx) -L(fwd_write_29bytes): - movq -29(%eax), %xmm0 - movq %xmm0, -29(%edx) -L(fwd_write_21bytes): - movq -21(%eax), %xmm0 - movq %xmm0, -21(%edx) -L(fwd_write_13bytes): - movq -13(%eax), %xmm0 - movq %xmm0, -13(%edx) - movl -5(%eax), %ecx - movl %ecx, -5(%edx) - movzbl -1(%eax), %ecx - movb %cl, -1(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_41bytes): - movq -41(%eax), %xmm0 - movq %xmm0, -41(%edx) -L(fwd_write_33bytes): - movq -33(%eax), %xmm0 - movq %xmm0, -33(%edx) -L(fwd_write_25bytes): - movq -25(%eax), %xmm0 - movq %xmm0, -25(%edx) -L(fwd_write_17bytes): - movq -17(%eax), %xmm0 - movq %xmm0, -17(%edx) -L(fwd_write_9bytes): - movq -9(%eax), %xmm0 - movq %xmm0, -9(%edx) -L(fwd_write_1bytes): - movzbl -1(%eax), %ecx - movb %cl, -1(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_46bytes): - movq -46(%eax), %xmm0 - movq %xmm0, -46(%edx) -L(fwd_write_38bytes): - movq -38(%eax), %xmm0 - movq %xmm0, -38(%edx) -L(fwd_write_30bytes): - movq -30(%eax), %xmm0 - movq %xmm0, -30(%edx) -L(fwd_write_22bytes): - movq -22(%eax), %xmm0 - movq %xmm0, -22(%edx) -L(fwd_write_14bytes): - movq -14(%eax), %xmm0 - movq %xmm0, -14(%edx) -L(fwd_write_6bytes): - movl -6(%eax), %ecx - movl %ecx, -6(%edx) - movzwl -2(%eax), %ecx - movw %cx, -2(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_42bytes): - movq -42(%eax), %xmm0 - movq %xmm0, -42(%edx) -L(fwd_write_34bytes): - movq -34(%eax), %xmm0 - movq %xmm0, -34(%edx) -L(fwd_write_26bytes): - movq -26(%eax), %xmm0 - movq %xmm0, -26(%edx) -L(fwd_write_18bytes): - movq -18(%eax), %xmm0 - movq %xmm0, -18(%edx) -L(fwd_write_10bytes): - movq -10(%eax), %xmm0 - movq %xmm0, -10(%edx) -L(fwd_write_2bytes): - movzwl -2(%eax), %ecx - movw %cx, -2(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_47bytes): - movq -47(%eax), %xmm0 - movq %xmm0, -47(%edx) -L(fwd_write_39bytes): - movq -39(%eax), %xmm0 - movq %xmm0, -39(%edx) -L(fwd_write_31bytes): - movq -31(%eax), %xmm0 - movq %xmm0, -31(%edx) -L(fwd_write_23bytes): - movq -23(%eax), %xmm0 - movq %xmm0, -23(%edx) -L(fwd_write_15bytes): - movq -15(%eax), %xmm0 - movq %xmm0, -15(%edx) -L(fwd_write_7bytes): - movl -7(%eax), %ecx - movl %ecx, -7(%edx) - movzwl -3(%eax), %ecx - movzbl -1(%eax), %eax - movw %cx, -3(%edx) - movb %al, -1(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_43bytes): - movq -43(%eax), %xmm0 - movq %xmm0, -43(%edx) -L(fwd_write_35bytes): - movq -35(%eax), %xmm0 - movq %xmm0, -35(%edx) -L(fwd_write_27bytes): - movq -27(%eax), %xmm0 - movq %xmm0, -27(%edx) -L(fwd_write_19bytes): - movq -19(%eax), %xmm0 - movq %xmm0, -19(%edx) -L(fwd_write_11bytes): - movq -11(%eax), %xmm0 - movq %xmm0, -11(%edx) -L(fwd_write_3bytes): - movzwl -3(%eax), %ecx - movzbl -1(%eax), %eax - movw %cx, -3(%edx) - movb %al, -1(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_40bytes_align): - movdqa -40(%eax), %xmm0 - movdqa %xmm0, -40(%edx) -L(fwd_write_24bytes_align): - movdqa -24(%eax), %xmm0 - movdqa %xmm0, -24(%edx) -L(fwd_write_8bytes_align): - movq -8(%eax), %xmm0 - movq %xmm0, -8(%edx) -L(fwd_write_0bytes_align): -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_32bytes_align): - movdqa -32(%eax), %xmm0 - movdqa %xmm0, -32(%edx) -L(fwd_write_16bytes_align): - movdqa -16(%eax), %xmm0 - movdqa %xmm0, -16(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_5bytes_align): - movl -5(%eax), %ecx - movl -4(%eax), %eax - movl %ecx, -5(%edx) - movl %eax, -4(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_45bytes_align): - movdqa -45(%eax), %xmm0 - movdqa %xmm0, -45(%edx) -L(fwd_write_29bytes_align): - movdqa -29(%eax), %xmm0 - movdqa %xmm0, -29(%edx) -L(fwd_write_13bytes_align): - movq -13(%eax), %xmm0 - movq %xmm0, -13(%edx) - movl -5(%eax), %ecx - movl %ecx, -5(%edx) - movzbl -1(%eax), %ecx - movb %cl, -1(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_37bytes_align): - movdqa -37(%eax), %xmm0 - movdqa %xmm0, -37(%edx) -L(fwd_write_21bytes_align): - movdqa -21(%eax), %xmm0 - movdqa %xmm0, -21(%edx) - movl -5(%eax), %ecx - movl %ecx, -5(%edx) - movzbl -1(%eax), %ecx - movb %cl, -1(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_41bytes_align): - movdqa -41(%eax), %xmm0 - movdqa %xmm0, -41(%edx) -L(fwd_write_25bytes_align): - movdqa -25(%eax), %xmm0 - movdqa %xmm0, -25(%edx) -L(fwd_write_9bytes_align): - movq -9(%eax), %xmm0 - movq %xmm0, -9(%edx) -L(fwd_write_1bytes_align): - movzbl -1(%eax), %ecx - movb %cl, -1(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_33bytes_align): - movdqa -33(%eax), %xmm0 - movdqa %xmm0, -33(%edx) -L(fwd_write_17bytes_align): - movdqa -17(%eax), %xmm0 - movdqa %xmm0, -17(%edx) - movzbl -1(%eax), %ecx - movb %cl, -1(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_46bytes_align): - movdqa -46(%eax), %xmm0 - movdqa %xmm0, -46(%edx) -L(fwd_write_30bytes_align): - movdqa -30(%eax), %xmm0 - movdqa %xmm0, -30(%edx) -L(fwd_write_14bytes_align): - movq -14(%eax), %xmm0 - movq %xmm0, -14(%edx) -L(fwd_write_6bytes_align): - movl -6(%eax), %ecx - movl %ecx, -6(%edx) - movzwl -2(%eax), %ecx - movw %cx, -2(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_38bytes_align): - movdqa -38(%eax), %xmm0 - movdqa %xmm0, -38(%edx) -L(fwd_write_22bytes_align): - movdqa -22(%eax), %xmm0 - movdqa %xmm0, -22(%edx) - movl -6(%eax), %ecx - movl %ecx, -6(%edx) - movzwl -2(%eax), %ecx - movw %cx, -2(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_42bytes_align): - movdqa -42(%eax), %xmm0 - movdqa %xmm0, -42(%edx) -L(fwd_write_26bytes_align): - movdqa -26(%eax), %xmm0 - movdqa %xmm0, -26(%edx) -L(fwd_write_10bytes_align): - movq -10(%eax), %xmm0 - movq %xmm0, -10(%edx) -L(fwd_write_2bytes_align): - movzwl -2(%eax), %ecx - movw %cx, -2(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_34bytes_align): - movdqa -34(%eax), %xmm0 - movdqa %xmm0, -34(%edx) -L(fwd_write_18bytes_align): - movdqa -18(%eax), %xmm0 - movdqa %xmm0, -18(%edx) - movzwl -2(%eax), %ecx - movw %cx, -2(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_47bytes_align): - movdqa -47(%eax), %xmm0 - movdqa %xmm0, -47(%edx) -L(fwd_write_31bytes_align): - movdqa -31(%eax), %xmm0 - movdqa %xmm0, -31(%edx) -L(fwd_write_15bytes_align): - movq -15(%eax), %xmm0 - movq %xmm0, -15(%edx) -L(fwd_write_7bytes_align): - movl -7(%eax), %ecx - movl %ecx, -7(%edx) - movzwl -3(%eax), %ecx - movzbl -1(%eax), %eax - movw %cx, -3(%edx) - movb %al, -1(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_39bytes_align): - movdqa -39(%eax), %xmm0 - movdqa %xmm0, -39(%edx) -L(fwd_write_23bytes_align): - movdqa -23(%eax), %xmm0 - movdqa %xmm0, -23(%edx) - movl -7(%eax), %ecx - movl %ecx, -7(%edx) - movzwl -3(%eax), %ecx - movzbl -1(%eax), %eax - movw %cx, -3(%edx) - movb %al, -1(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_43bytes_align): - movdqa -43(%eax), %xmm0 - movdqa %xmm0, -43(%edx) -L(fwd_write_27bytes_align): - movdqa -27(%eax), %xmm0 - movdqa %xmm0, -27(%edx) -L(fwd_write_11bytes_align): - movq -11(%eax), %xmm0 - movq %xmm0, -11(%edx) -L(fwd_write_3bytes_align): - movzwl -3(%eax), %ecx - movzbl -1(%eax), %eax - movw %cx, -3(%edx) - movb %al, -1(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_35bytes_align): - movdqa -35(%eax), %xmm0 - movdqa %xmm0, -35(%edx) -L(fwd_write_19bytes_align): - movdqa -19(%eax), %xmm0 - movdqa %xmm0, -19(%edx) - movzwl -3(%eax), %ecx - movzbl -1(%eax), %eax - movw %cx, -3(%edx) - movb %al, -1(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_44bytes_align): - movdqa -44(%eax), %xmm0 - movdqa %xmm0, -44(%edx) -L(fwd_write_28bytes_align): - movdqa -28(%eax), %xmm0 - movdqa %xmm0, -28(%edx) -L(fwd_write_12bytes_align): - movq -12(%eax), %xmm0 - movq %xmm0, -12(%edx) -L(fwd_write_4bytes_align): - movl -4(%eax), %ecx - movl %ecx, -4(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN - - .p2align 4 -L(fwd_write_36bytes_align): - movdqa -36(%eax), %xmm0 - movdqa %xmm0, -36(%edx) -L(fwd_write_20bytes_align): - movdqa -20(%eax), %xmm0 - movdqa %xmm0, -20(%edx) - movl -4(%eax), %ecx - movl %ecx, -4(%edx) -# ifndef USE_AS_BCOPY -# ifdef USE_AS_MEMPCPY - movl %edx, %eax -# else - movl DEST(%esp), %eax -# endif -# endif - RETURN_END - - CFI_PUSH (%edi) - - .p2align 4 -L(large_page): - movdqu (%eax), %xmm1 -# ifdef USE_AS_MEMMOVE - movl DEST+4(%esp), %edi - movdqu %xmm0, (%edi) -# endif - lea 16(%eax), %eax - movntdq %xmm1, (%edx) - lea 16(%edx), %edx - lea -0x90(%ecx), %ecx - POP (%edi) - - .p2align 4 -L(large_page_loop): - movdqu (%eax), %xmm0 - movdqu 0x10(%eax), %xmm1 - movdqu 0x20(%eax), %xmm2 - movdqu 0x30(%eax), %xmm3 - movdqu 0x40(%eax), %xmm4 - movdqu 0x50(%eax), %xmm5 - movdqu 0x60(%eax), %xmm6 - movdqu 0x70(%eax), %xmm7 - lea 0x80(%eax), %eax - - sub $0x80, %ecx - movntdq %xmm0, (%edx) - movntdq %xmm1, 0x10(%edx) - movntdq %xmm2, 0x20(%edx) - movntdq %xmm3, 0x30(%edx) - movntdq %xmm4, 0x40(%edx) - movntdq %xmm5, 0x50(%edx) - movntdq %xmm6, 0x60(%edx) - movntdq %xmm7, 0x70(%edx) - lea 0x80(%edx), %edx - jae L(large_page_loop) - cmp $-0x40, %ecx - lea 0x80(%ecx), %ecx - jl L(large_page_less_64bytes) - - movdqu (%eax), %xmm0 - movdqu 0x10(%eax), %xmm1 - movdqu 0x20(%eax), %xmm2 - movdqu 0x30(%eax), %xmm3 - lea 0x40(%eax), %eax - - movntdq %xmm0, (%edx) - movntdq %xmm1, 0x10(%edx) - movntdq %xmm2, 0x20(%edx) - movntdq %xmm3, 0x30(%edx) - lea 0x40(%edx), %edx - sub $0x40, %ecx -L(large_page_less_64bytes): - cmp $32, %ecx - jb L(large_page_less_32bytes) - movdqu (%eax), %xmm0 - movdqu 0x10(%eax), %xmm1 - lea 0x20(%eax), %eax - movntdq %xmm0, (%edx) - movntdq %xmm1, 0x10(%edx) - lea 0x20(%edx), %edx - sub $0x20, %ecx -L(large_page_less_32bytes): - add %ecx, %edx - add %ecx, %eax - sfence - BRANCH_TO_JMPTBL_ENTRY (L(table_48bytes_fwd), %ecx, 4) - - .p2align 4 -L(bk_write_44bytes): - movq 36(%eax), %xmm0 - movq %xmm0, 36(%edx) -L(bk_write_36bytes): - movq 28(%eax), %xmm0 - movq %xmm0, 28(%edx) -L(bk_write_28bytes): - movq 20(%eax), %xmm0 - movq %xmm0, 20(%edx) -L(bk_write_20bytes): - movq 12(%eax), %xmm0 - movq %xmm0, 12(%edx) -L(bk_write_12bytes): - movq 4(%eax), %xmm0 - movq %xmm0, 4(%edx) -L(bk_write_4bytes): - movl (%eax), %ecx - movl %ecx, (%edx) -L(bk_write_0bytes): -# ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -# ifdef USE_AS_MEMPCPY - movl LEN(%esp), %ecx - add %ecx, %eax -# endif -# endif - RETURN - - .p2align 4 -L(bk_write_40bytes): - movq 32(%eax), %xmm0 - movq %xmm0, 32(%edx) -L(bk_write_32bytes): - movq 24(%eax), %xmm0 - movq %xmm0, 24(%edx) -L(bk_write_24bytes): - movq 16(%eax), %xmm0 - movq %xmm0, 16(%edx) -L(bk_write_16bytes): - movq 8(%eax), %xmm0 - movq %xmm0, 8(%edx) -L(bk_write_8bytes): - movq (%eax), %xmm0 - movq %xmm0, (%edx) -# ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -# ifdef USE_AS_MEMPCPY - movl LEN(%esp), %ecx - add %ecx, %eax -# endif -# endif - RETURN - - .p2align 4 -L(bk_write_45bytes): - movq 37(%eax), %xmm0 - movq %xmm0, 37(%edx) -L(bk_write_37bytes): - movq 29(%eax), %xmm0 - movq %xmm0, 29(%edx) -L(bk_write_29bytes): - movq 21(%eax), %xmm0 - movq %xmm0, 21(%edx) -L(bk_write_21bytes): - movq 13(%eax), %xmm0 - movq %xmm0, 13(%edx) -L(bk_write_13bytes): - movq 5(%eax), %xmm0 - movq %xmm0, 5(%edx) -L(bk_write_5bytes): - movl 1(%eax), %ecx - movl %ecx, 1(%edx) -L(bk_write_1bytes): - movzbl (%eax), %ecx - movb %cl, (%edx) -# ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -# ifdef USE_AS_MEMPCPY - movl LEN(%esp), %ecx - add %ecx, %eax -# endif -# endif - RETURN - - .p2align 4 -L(bk_write_41bytes): - movq 33(%eax), %xmm0 - movq %xmm0, 33(%edx) -L(bk_write_33bytes): - movq 25(%eax), %xmm0 - movq %xmm0, 25(%edx) -L(bk_write_25bytes): - movq 17(%eax), %xmm0 - movq %xmm0, 17(%edx) -L(bk_write_17bytes): - movq 9(%eax), %xmm0 - movq %xmm0, 9(%edx) -L(bk_write_9bytes): - movq 1(%eax), %xmm0 - movq %xmm0, 1(%edx) - movzbl (%eax), %ecx - movb %cl, (%edx) -# ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -# ifdef USE_AS_MEMPCPY - movl LEN(%esp), %ecx - add %ecx, %eax -# endif -# endif - RETURN - - .p2align 4 -L(bk_write_46bytes): - movq 38(%eax), %xmm0 - movq %xmm0, 38(%edx) -L(bk_write_38bytes): - movq 30(%eax), %xmm0 - movq %xmm0, 30(%edx) -L(bk_write_30bytes): - movq 22(%eax), %xmm0 - movq %xmm0, 22(%edx) -L(bk_write_22bytes): - movq 14(%eax), %xmm0 - movq %xmm0, 14(%edx) -L(bk_write_14bytes): - movq 6(%eax), %xmm0 - movq %xmm0, 6(%edx) -L(bk_write_6bytes): - movl 2(%eax), %ecx - movl %ecx, 2(%edx) - movzwl (%eax), %ecx - movw %cx, (%edx) -# ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -# ifdef USE_AS_MEMPCPY - movl LEN(%esp), %ecx - add %ecx, %eax -# endif -# endif - RETURN - - .p2align 4 -L(bk_write_42bytes): - movq 34(%eax), %xmm0 - movq %xmm0, 34(%edx) -L(bk_write_34bytes): - movq 26(%eax), %xmm0 - movq %xmm0, 26(%edx) -L(bk_write_26bytes): - movq 18(%eax), %xmm0 - movq %xmm0, 18(%edx) -L(bk_write_18bytes): - movq 10(%eax), %xmm0 - movq %xmm0, 10(%edx) -L(bk_write_10bytes): - movq 2(%eax), %xmm0 - movq %xmm0, 2(%edx) -L(bk_write_2bytes): - movzwl (%eax), %ecx - movw %cx, (%edx) -# ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -# ifdef USE_AS_MEMPCPY - movl LEN(%esp), %ecx - add %ecx, %eax -# endif -# endif - RETURN - - .p2align 4 -L(bk_write_47bytes): - movq 39(%eax), %xmm0 - movq %xmm0, 39(%edx) -L(bk_write_39bytes): - movq 31(%eax), %xmm0 - movq %xmm0, 31(%edx) -L(bk_write_31bytes): - movq 23(%eax), %xmm0 - movq %xmm0, 23(%edx) -L(bk_write_23bytes): - movq 15(%eax), %xmm0 - movq %xmm0, 15(%edx) -L(bk_write_15bytes): - movq 7(%eax), %xmm0 - movq %xmm0, 7(%edx) -L(bk_write_7bytes): - movl 3(%eax), %ecx - movl %ecx, 3(%edx) - movzwl 1(%eax), %ecx - movw %cx, 1(%edx) - movzbl (%eax), %eax - movb %al, (%edx) -# ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -# ifdef USE_AS_MEMPCPY - movl LEN(%esp), %ecx - add %ecx, %eax -# endif -# endif - RETURN - - .p2align 4 -L(bk_write_43bytes): - movq 35(%eax), %xmm0 - movq %xmm0, 35(%edx) -L(bk_write_35bytes): - movq 27(%eax), %xmm0 - movq %xmm0, 27(%edx) -L(bk_write_27bytes): - movq 19(%eax), %xmm0 - movq %xmm0, 19(%edx) -L(bk_write_19bytes): - movq 11(%eax), %xmm0 - movq %xmm0, 11(%edx) -L(bk_write_11bytes): - movq 3(%eax), %xmm0 - movq %xmm0, 3(%edx) -L(bk_write_3bytes): - movzwl 1(%eax), %ecx - movw %cx, 1(%edx) - movzbl (%eax), %eax - movb %al, (%edx) -# ifndef USE_AS_BCOPY - movl DEST(%esp), %eax -# ifdef USE_AS_MEMPCPY - movl LEN(%esp), %ecx - add %ecx, %eax -# endif -# endif - RETURN_END - - - .pushsection .rodata.ssse3,"a",@progbits - .p2align 2 -L(table_48bytes_fwd): - .int JMPTBL (L(fwd_write_0bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_1bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_2bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_3bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_4bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_5bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_6bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_7bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_8bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_9bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_10bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_11bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_12bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_13bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_14bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_15bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_16bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_17bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_18bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_19bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_20bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_21bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_22bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_23bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_24bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_25bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_26bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_27bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_28bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_29bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_30bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_31bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_32bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_33bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_34bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_35bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_36bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_37bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_38bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_39bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_40bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_41bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_42bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_43bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_44bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_45bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_46bytes), L(table_48bytes_fwd)) - .int JMPTBL (L(fwd_write_47bytes), L(table_48bytes_fwd)) - - .p2align 2 -L(table_48bytes_fwd_align): - .int JMPTBL (L(fwd_write_0bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_1bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_2bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_3bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_4bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_5bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_6bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_7bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_8bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_9bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_10bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_11bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_12bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_13bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_14bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_15bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_16bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_17bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_18bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_19bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_20bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_21bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_22bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_23bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_24bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_25bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_26bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_27bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_28bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_29bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_30bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_31bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_32bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_33bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_34bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_35bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_36bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_37bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_38bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_39bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_40bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_41bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_42bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_43bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_44bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_45bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_46bytes_align), L(table_48bytes_fwd_align)) - .int JMPTBL (L(fwd_write_47bytes_align), L(table_48bytes_fwd_align)) - - .p2align 2 -L(shl_table): - .int JMPTBL (L(shl_0), L(shl_table)) - .int JMPTBL (L(shl_1), L(shl_table)) - .int JMPTBL (L(shl_2), L(shl_table)) - .int JMPTBL (L(shl_3), L(shl_table)) - .int JMPTBL (L(shl_4), L(shl_table)) - .int JMPTBL (L(shl_5), L(shl_table)) - .int JMPTBL (L(shl_6), L(shl_table)) - .int JMPTBL (L(shl_7), L(shl_table)) - .int JMPTBL (L(shl_8), L(shl_table)) - .int JMPTBL (L(shl_9), L(shl_table)) - .int JMPTBL (L(shl_10), L(shl_table)) - .int JMPTBL (L(shl_11), L(shl_table)) - .int JMPTBL (L(shl_12), L(shl_table)) - .int JMPTBL (L(shl_13), L(shl_table)) - .int JMPTBL (L(shl_14), L(shl_table)) - .int JMPTBL (L(shl_15), L(shl_table)) - - .p2align 2 -L(table_48_bytes_bwd): - .int JMPTBL (L(bk_write_0bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_1bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_2bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_3bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_4bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_5bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_6bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_7bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_8bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_9bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_10bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_11bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_12bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_13bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_14bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_15bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_16bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_17bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_18bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_19bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_20bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_21bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_22bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_23bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_24bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_25bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_26bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_27bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_28bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_29bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_30bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_31bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_32bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_33bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_34bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_35bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_36bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_37bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_38bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_39bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_40bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_41bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_42bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_43bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_44bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_45bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_46bytes), L(table_48_bytes_bwd)) - .int JMPTBL (L(bk_write_47bytes), L(table_48_bytes_bwd)) - - .popsection - -# ifdef USE_AS_MEMMOVE - .p2align 4 -L(copy_backward): - PUSH (%edi) - movl %eax, %edi - lea (%ecx,%edx,1),%edx - lea (%ecx,%edi,1),%edi - testl $0x3, %edx - jnz L(bk_align) - -L(bk_aligned_4): - cmp $64, %ecx - jae L(bk_write_more64bytes) - -L(bk_write_64bytesless): - cmp $32, %ecx - jb L(bk_write_less32bytes) - -L(bk_write_more32bytes): - /* Copy 32 bytes at a time. */ - sub $32, %ecx - movq -8(%edi), %xmm0 - movq %xmm0, -8(%edx) - movq -16(%edi), %xmm0 - movq %xmm0, -16(%edx) - movq -24(%edi), %xmm0 - movq %xmm0, -24(%edx) - movq -32(%edi), %xmm0 - movq %xmm0, -32(%edx) - sub $32, %edx - sub $32, %edi - -L(bk_write_less32bytes): - movl %edi, %eax - sub %ecx, %edx - sub %ecx, %eax - POP (%edi) -L(bk_write_less32bytes_2): - BRANCH_TO_JMPTBL_ENTRY (L(table_48_bytes_bwd), %ecx, 4) - - CFI_PUSH (%edi) - - .p2align 4 -L(bk_align): - cmp $8, %ecx - jbe L(bk_write_less32bytes) - testl $1, %edx - /* We get here only if (EDX & 3 ) != 0 so if (EDX & 1) ==0, - then (EDX & 2) must be != 0. */ - jz L(bk_got2) - sub $1, %edi - sub $1, %ecx - sub $1, %edx - movzbl (%edi), %eax - movb %al, (%edx) - - testl $2, %edx - jz L(bk_aligned_4) - -L(bk_got2): - sub $2, %edi - sub $2, %ecx - sub $2, %edx - movzwl (%edi), %eax - movw %ax, (%edx) - jmp L(bk_aligned_4) - - .p2align 4 -L(bk_write_more64bytes): - /* Check alignment of last byte. */ - testl $15, %edx - jz L(bk_ssse3_cpy_pre) - -/* EDX is aligned 4 bytes, but not 16 bytes. */ -L(bk_ssse3_align): - sub $4, %edi - sub $4, %ecx - sub $4, %edx - movl (%edi), %eax - movl %eax, (%edx) - - testl $15, %edx - jz L(bk_ssse3_cpy_pre) - - sub $4, %edi - sub $4, %ecx - sub $4, %edx - movl (%edi), %eax - movl %eax, (%edx) - - testl $15, %edx - jz L(bk_ssse3_cpy_pre) - - sub $4, %edi - sub $4, %ecx - sub $4, %edx - movl (%edi), %eax - movl %eax, (%edx) - -L(bk_ssse3_cpy_pre): - cmp $64, %ecx - jb L(bk_write_more32bytes) - - .p2align 4 -L(bk_ssse3_cpy): - sub $64, %edi - sub $64, %ecx - sub $64, %edx - movdqu 0x30(%edi), %xmm3 - movdqa %xmm3, 0x30(%edx) - movdqu 0x20(%edi), %xmm2 - movdqa %xmm2, 0x20(%edx) - movdqu 0x10(%edi), %xmm1 - movdqa %xmm1, 0x10(%edx) - movdqu (%edi), %xmm0 - movdqa %xmm0, (%edx) - cmp $64, %ecx - jae L(bk_ssse3_cpy) - jmp L(bk_write_64bytesless) - -# endif - -END (MEMCPY) - -#endif diff --git a/sysdeps/i386/i686/multiarch/memcpy.S b/sysdeps/i386/i686/multiarch/memcpy.S deleted file mode 100644 index f725944620..0000000000 --- a/sysdeps/i386/i686/multiarch/memcpy.S +++ /dev/null @@ -1,78 +0,0 @@ -/* Multiple versions of memcpy - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib and for - DSO. In static binaries we need memcpy before the initialization - happened. */ -#if defined SHARED && IS_IN (libc) - .text -ENTRY(memcpy) - .type memcpy, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__memcpy_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__memcpy_sse2_unaligned) - HAS_ARCH_FEATURE (Fast_Unaligned_Load) - jnz 2f - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (__memcpy_ssse3) - HAS_ARCH_FEATURE (Fast_Rep_String) - jz 2f - LOAD_FUNC_GOT_EAX (__memcpy_ssse3_rep) -2: ret -END(memcpy) - -# undef ENTRY -# define ENTRY(name) \ - .type __memcpy_ia32, @function; \ - .p2align 4; \ - .globl __memcpy_ia32; \ - .hidden __memcpy_ia32; \ - __memcpy_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __memcpy_ia32, .-__memcpy_ia32 - -# undef ENTRY_CHK -# define ENTRY_CHK(name) \ - .type __memcpy_chk_ia32, @function; \ - .globl __memcpy_chk_ia32; \ - .p2align 4; \ - __memcpy_chk_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END_CHK -# define END_CHK(name) \ - cfi_endproc; .size __memcpy_chk_ia32, .-__memcpy_chk_ia32 - -# undef libc_hidden_builtin_def -/* IFUNC doesn't work with the hidden functions in shared library since - they will be called without setting up EBX needed for PLT which is - used by IFUNC. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_memcpy; __GI_memcpy = __memcpy_ia32 -#endif - -#include "../memcpy.S" diff --git a/sysdeps/i386/i686/multiarch/memcpy_chk.S b/sysdeps/i386/i686/multiarch/memcpy_chk.S deleted file mode 100644 index 1b4fbe2e6f..0000000000 --- a/sysdeps/i386/i686/multiarch/memcpy_chk.S +++ /dev/null @@ -1,50 +0,0 @@ -/* Multiple versions of __memcpy_chk - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib and for - DSO. There are no multiarch memcpy functions for static binaries. - */ -#if IS_IN (libc) -# ifdef SHARED - .text -ENTRY(__memcpy_chk) - .type __memcpy_chk, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__memcpy_chk_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__memcpy_chk_sse2_unaligned) - HAS_ARCH_FEATURE (Fast_Unaligned_Load) - jnz 2f - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (__memcpy_chk_ssse3) - HAS_ARCH_FEATURE (Fast_Rep_String) - jz 2f - LOAD_FUNC_GOT_EAX (__memcpy_chk_ssse3_rep) -2: ret -END(__memcpy_chk) -# else -# include "../memcpy_chk.S" -# endif -#endif diff --git a/sysdeps/i386/i686/multiarch/memmove-sse2-unaligned.S b/sysdeps/i386/i686/multiarch/memmove-sse2-unaligned.S deleted file mode 100644 index 3873594cb2..0000000000 --- a/sysdeps/i386/i686/multiarch/memmove-sse2-unaligned.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_MEMMOVE -#define MEMCPY __memmove_sse2_unaligned -#define MEMCPY_CHK __memmove_chk_sse2_unaligned -#include "memcpy-sse2-unaligned.S" diff --git a/sysdeps/i386/i686/multiarch/memmove-ssse3-rep.S b/sysdeps/i386/i686/multiarch/memmove-ssse3-rep.S deleted file mode 100644 index d202fc4a13..0000000000 --- a/sysdeps/i386/i686/multiarch/memmove-ssse3-rep.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_MEMMOVE -#define MEMCPY __memmove_ssse3_rep -#define MEMCPY_CHK __memmove_chk_ssse3_rep -#include "memcpy-ssse3-rep.S" diff --git a/sysdeps/i386/i686/multiarch/memmove-ssse3.S b/sysdeps/i386/i686/multiarch/memmove-ssse3.S deleted file mode 100644 index 295430b1ef..0000000000 --- a/sysdeps/i386/i686/multiarch/memmove-ssse3.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_MEMMOVE -#define MEMCPY __memmove_ssse3 -#define MEMCPY_CHK __memmove_chk_ssse3 -#include "memcpy-ssse3.S" diff --git a/sysdeps/i386/i686/multiarch/memmove.S b/sysdeps/i386/i686/multiarch/memmove.S deleted file mode 100644 index 6eb418ca7f..0000000000 --- a/sysdeps/i386/i686/multiarch/memmove.S +++ /dev/null @@ -1,89 +0,0 @@ -/* Multiple versions of memmove - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib. */ -#if IS_IN (libc) - .text -ENTRY(memmove) - .type memmove, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__memmove_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__memmove_sse2_unaligned) - HAS_ARCH_FEATURE (Fast_Unaligned_Load) - jnz 2f - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (__memmove_ssse3) - HAS_ARCH_FEATURE (Fast_Rep_String) - jz 2f - LOAD_FUNC_GOT_EAX (__memmove_ssse3_rep) -2: ret -END(memmove) - -# ifdef SHARED -# undef ENTRY -# define ENTRY(name) \ - .type __memmove_ia32, @function; \ - .p2align 4; \ - .globl __memmove_ia32; \ - .hidden __memmove_ia32; \ - __memmove_ia32: cfi_startproc; \ - CALL_MCOUNT -# else -# undef ENTRY -# define ENTRY(name) \ - .type __memmove_ia32, @function; \ - .globl __memmove_ia32; \ - .p2align 4; \ - __memmove_ia32: cfi_startproc; \ - CALL_MCOUNT -# endif - -# undef END -# define END(name) \ - cfi_endproc; .size __memmove_ia32, .-__memmove_ia32 - -# undef ENTRY_CHK -# define ENTRY_CHK(name) \ - .type __memmove_chk_ia32, @function; \ - .globl __memmove_chk_ia32; \ - .p2align 4; \ - __memmove_chk_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END_CHK -# define END_CHK(name) \ - cfi_endproc; .size __memmove_chk_ia32, .-__memmove_chk_ia32 - -# ifdef SHARED -# undef libc_hidden_builtin_def -/* IFUNC doesn't work with the hidden functions in shared library since - they will be called without setting up EBX needed for PLT which is - used by IFUNC. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_memmove; __GI_memmove = __memmove_ia32 -# endif -#endif - -#include "../memmove.S" diff --git a/sysdeps/i386/i686/multiarch/memmove_chk.S b/sysdeps/i386/i686/multiarch/memmove_chk.S deleted file mode 100644 index 314834c4c6..0000000000 --- a/sysdeps/i386/i686/multiarch/memmove_chk.S +++ /dev/null @@ -1,94 +0,0 @@ -/* Multiple versions of __memmove_chk - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib. */ -#if IS_IN (libc) - .text -ENTRY(__memmove_chk) - .type __memmove_chk, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__memmove_chk_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__memmove_chk_sse2_unaligned) - HAS_ARCH_FEATURE (Fast_Unaligned_Load) - jnz 2f - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (__memmove_chk_ssse3) - HAS_ARCH_FEATURE (Fast_Rep_String) - jz 2f - LOAD_FUNC_GOT_EAX (__memmove_chk_ssse3_rep) -2: ret -END(__memmove_chk) - -# ifndef SHARED - .type __memmove_chk_sse2_unaligned, @function - .p2align 4; -__memmove_chk_sse2_unaligned: - cfi_startproc - CALL_MCOUNT - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb __chk_fail - jmp __memmove_sse2_unaligned - cfi_endproc - .size __memmove_chk_sse2_unaligned, .-__memmove_chk_sse2_unaligned - - .type __memmove_chk_ssse3, @function - .p2align 4; -__memmove_chk_ssse3: - cfi_startproc - CALL_MCOUNT - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb __chk_fail - jmp __memmove_ssse3 - cfi_endproc - .size __memmove_chk_ssse3, .-__memmove_chk_ssse3 - - .type __memmove_chk_ssse3_rep, @function - .p2align 4; -__memmove_chk_ssse3_rep: - cfi_startproc - CALL_MCOUNT - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb __chk_fail - jmp __memmove_ssse3_rep - cfi_endproc - .size __memmove_chk_ssse3_rep, .-__memmove_chk_ssse3_rep - - .type __memmove_chk_ia32, @function - .p2align 4; -__memmove_chk_ia32: - cfi_startproc - CALL_MCOUNT - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb __chk_fail - jmp __memmove_ia32 - cfi_endproc - .size __memmove_chk_ia32, .-__memmove_chk_ia32 -# endif -#endif diff --git a/sysdeps/i386/i686/multiarch/mempcpy-sse2-unaligned.S b/sysdeps/i386/i686/multiarch/mempcpy-sse2-unaligned.S deleted file mode 100644 index a1cea50771..0000000000 --- a/sysdeps/i386/i686/multiarch/mempcpy-sse2-unaligned.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_MEMPCPY -#define MEMCPY __mempcpy_sse2_unaligned -#define MEMCPY_CHK __mempcpy_chk_sse2_unaligned -#include "memcpy-sse2-unaligned.S" diff --git a/sysdeps/i386/i686/multiarch/mempcpy-ssse3-rep.S b/sysdeps/i386/i686/multiarch/mempcpy-ssse3-rep.S deleted file mode 100644 index 5357b33e18..0000000000 --- a/sysdeps/i386/i686/multiarch/mempcpy-ssse3-rep.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_MEMPCPY -#define MEMCPY __mempcpy_ssse3_rep -#define MEMCPY_CHK __mempcpy_chk_ssse3_rep -#include "memcpy-ssse3-rep.S" diff --git a/sysdeps/i386/i686/multiarch/mempcpy-ssse3.S b/sysdeps/i386/i686/multiarch/mempcpy-ssse3.S deleted file mode 100644 index 822d98e954..0000000000 --- a/sysdeps/i386/i686/multiarch/mempcpy-ssse3.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_MEMPCPY -#define MEMCPY __mempcpy_ssse3 -#define MEMCPY_CHK __mempcpy_chk_ssse3 -#include "memcpy-ssse3.S" diff --git a/sysdeps/i386/i686/multiarch/mempcpy.S b/sysdeps/i386/i686/multiarch/mempcpy.S deleted file mode 100644 index 06e377fbc9..0000000000 --- a/sysdeps/i386/i686/multiarch/mempcpy.S +++ /dev/null @@ -1,81 +0,0 @@ -/* Multiple versions of mempcpy - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib and for - DSO. In static binaries we need mempcpy before the initialization - happened. */ -#if defined SHARED && IS_IN (libc) - .text -ENTRY(__mempcpy) - .type __mempcpy, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__mempcpy_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__mempcpy_sse2_unaligned) - HAS_ARCH_FEATURE (Fast_Unaligned_Load) - jnz 2f - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (__mempcpy_ssse3) - HAS_ARCH_FEATURE (Fast_Rep_String) - jz 2f - LOAD_FUNC_GOT_EAX (__mempcpy_ssse3_rep) -2: ret -END(__mempcpy) - -# undef ENTRY -# define ENTRY(name) \ - .type __mempcpy_ia32, @function; \ - .p2align 4; \ - .globl __mempcpy_ia32; \ - .hidden __mempcpy_ia32; \ - __mempcpy_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __mempcpy_ia32, .-__mempcpy_ia32 - -# undef ENTRY_CHK -# define ENTRY_CHK(name) \ - .type __mempcpy_chk_ia32, @function; \ - .globl __mempcpy_chk_ia32; \ - .p2align 4; \ - __mempcpy_chk_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END_CHK -# define END_CHK(name) \ - cfi_endproc; .size __mempcpy_chk_ia32, .-__mempcpy_chk_ia32 - -# undef libc_hidden_def -# undef libc_hidden_builtin_def -/* IFUNC doesn't work with the hidden functions in shared library since - they will be called without setting up EBX needed for PLT which is - used by IFUNC. */ -# define libc_hidden_def(name) \ - .globl __GI_mempcpy; __GI_mempcpy = __mempcpy_ia32 -# define libc_hidden_builtin_def(name) \ - .globl __GI___mempcpy; __GI___mempcpy = __mempcpy_ia32 -#endif - -#include "../mempcpy.S" diff --git a/sysdeps/i386/i686/multiarch/mempcpy_chk.S b/sysdeps/i386/i686/multiarch/mempcpy_chk.S deleted file mode 100644 index e13e5248a5..0000000000 --- a/sysdeps/i386/i686/multiarch/mempcpy_chk.S +++ /dev/null @@ -1,50 +0,0 @@ -/* Multiple versions of __mempcpy_chk - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib and for - DSO. There are no multiarch mempcpy functions for static binaries. - */ -#if IS_IN (libc) -# ifdef SHARED - .text -ENTRY(__mempcpy_chk) - .type __mempcpy_chk, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__mempcpy_chk_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__mempcpy_chk_sse2_unaligned) - HAS_ARCH_FEATURE (Fast_Unaligned_Load) - jnz 2f - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (__mempcpy_chk_ssse3) - HAS_ARCH_FEATURE (Fast_Rep_String) - jz 2f - LOAD_FUNC_GOT_EAX (__mempcpy_chk_ssse3_rep) -2: ret -END(__mempcpy_chk) -# else -# include "../mempcpy_chk.S" -# endif -#endif diff --git a/sysdeps/i386/i686/multiarch/memrchr-c.c b/sysdeps/i386/i686/multiarch/memrchr-c.c deleted file mode 100644 index ef7bbbe792..0000000000 --- a/sysdeps/i386/i686/multiarch/memrchr-c.c +++ /dev/null @@ -1,7 +0,0 @@ -#if IS_IN (libc) -# define MEMRCHR __memrchr_ia32 -# include -extern void *__memrchr_ia32 (const void *, int, size_t); -#endif - -#include "string/memrchr.c" diff --git a/sysdeps/i386/i686/multiarch/memrchr-sse2-bsf.S b/sysdeps/i386/i686/multiarch/memrchr-sse2-bsf.S deleted file mode 100644 index dbbe94fd08..0000000000 --- a/sysdeps/i386/i686/multiarch/memrchr-sse2-bsf.S +++ /dev/null @@ -1,417 +0,0 @@ -/* Optimized memrchr with sse2 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# define PARMS 4 -# define STR1 PARMS -# define STR2 STR1+4 -# define LEN STR2+4 - -# define MEMCHR __memrchr_sse2_bsf - - .text -ENTRY (MEMCHR) - mov STR1(%esp), %ecx - movd STR2(%esp), %xmm1 - mov LEN(%esp), %edx - - sub $16, %edx - jbe L(length_less16) - - punpcklbw %xmm1, %xmm1 - add %edx, %ecx - punpcklbw %xmm1, %xmm1 - - movdqu (%ecx), %xmm0 - pshufd $0, %xmm1, %xmm1 - pcmpeqb %xmm1, %xmm0 - -/* Check if there is a match. */ - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches0) - - sub $64, %ecx - mov %ecx, %eax - and $15, %eax - jz L(loop_prolog) - - add $16, %ecx - add $16, %edx - sub %eax, %ecx - sub %eax, %edx - - .p2align 4 -/* Loop start on aligned string. */ -L(loop_prolog): - sub $64, %edx - jbe L(exit_loop) - - movdqa 48(%ecx), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches48) - - movdqa 32(%ecx), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 16(%ecx), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches16) - - movdqa (%ecx), %xmm4 - pcmpeqb %xmm1, %xmm4 - pmovmskb %xmm4, %eax - test %eax, %eax - jnz L(matches0) - - sub $64, %ecx - sub $64, %edx - jbe L(exit_loop) - - movdqa 48(%ecx), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches48) - - movdqa 32(%ecx), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 16(%ecx), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches16) - - movdqa (%ecx), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches0) - - mov %ecx, %eax - and $63, %eax - test %eax, %eax - jz L(align64_loop) - - add $64, %ecx - add $64, %edx - sub %eax, %ecx - sub %eax, %edx - - .p2align 4 -L(align64_loop): - sub $64, %ecx - sub $64, %edx - jbe L(exit_loop) - - movdqa (%ecx), %xmm0 - movdqa 16(%ecx), %xmm2 - movdqa 32(%ecx), %xmm3 - movdqa 48(%ecx), %xmm4 - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm1, %xmm2 - pcmpeqb %xmm1, %xmm3 - pcmpeqb %xmm1, %xmm4 - - pmaxub %xmm3, %xmm0 - pmaxub %xmm4, %xmm2 - pmaxub %xmm0, %xmm2 - pmovmskb %xmm2, %eax - - test %eax, %eax - jz L(align64_loop) - - pmovmskb %xmm4, %eax - test %eax, %eax - jnz L(matches48) - - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 16(%ecx), %xmm2 - - pcmpeqb %xmm1, %xmm2 - pcmpeqb (%ecx), %xmm1 - - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches16) - - pmovmskb %xmm1, %eax - bsr %eax, %eax - - add %ecx, %eax - ret - - .p2align 4 -L(exit_loop): - add $64, %edx - cmp $32, %edx - jbe L(exit_loop_32) - - movdqa 48(%ecx), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches48) - - movdqa 32(%ecx), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 16(%ecx), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches16_1) - cmp $48, %edx - jbe L(return_null) - - pcmpeqb (%ecx), %xmm1 - pmovmskb %xmm1, %eax - test %eax, %eax - jnz L(matches0_1) - xor %eax, %eax - ret - - .p2align 4 -L(exit_loop_32): - movdqa 48(%ecx), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches48_1) - cmp $16, %edx - jbe L(return_null) - - pcmpeqb 32(%ecx), %xmm1 - pmovmskb %xmm1, %eax - test %eax, %eax - jnz L(matches32_1) - xor %eax, %eax - ret - - .p2align 4 -L(matches0): - bsr %eax, %eax - add %ecx, %eax - ret - - .p2align 4 -L(matches16): - bsr %eax, %eax - lea 16(%eax, %ecx), %eax - ret - - .p2align 4 -L(matches32): - bsr %eax, %eax - lea 32(%eax, %ecx), %eax - ret - - .p2align 4 -L(matches48): - bsr %eax, %eax - lea 48(%eax, %ecx), %eax - ret - - .p2align 4 -L(matches0_1): - bsr %eax, %eax - sub $64, %edx - add %eax, %edx - jl L(return_null) - add %ecx, %eax - ret - - .p2align 4 -L(matches16_1): - bsr %eax, %eax - sub $48, %edx - add %eax, %edx - jl L(return_null) - lea 16(%ecx, %eax), %eax - ret - - .p2align 4 -L(matches32_1): - bsr %eax, %eax - sub $32, %edx - add %eax, %edx - jl L(return_null) - lea 32(%ecx, %eax), %eax - ret - - .p2align 4 -L(matches48_1): - bsr %eax, %eax - sub $16, %edx - add %eax, %edx - jl L(return_null) - lea 48(%ecx, %eax), %eax - ret - - .p2align 4 -L(return_null): - xor %eax, %eax - ret - - .p2align 4 -L(length_less16_offset0): - mov %dl, %cl - pcmpeqb (%eax), %xmm1 - - mov $1, %edx - sal %cl, %edx - sub $1, %edx - mov %edx, %ecx - - pmovmskb %xmm1, %edx - - and %ecx, %edx - test %edx, %edx - jz L(return_null) - - bsr %edx, %ecx - add %ecx, %eax - ret - - .p2align 4 -L(length_less16): - punpcklbw %xmm1, %xmm1 - mov %ecx, %eax - punpcklbw %xmm1, %xmm1 - add $16, %edx - jz L(return_null) - - pshufd $0, %xmm1, %xmm1 - and $15, %ecx - jz L(length_less16_offset0) - - PUSH (%edi) - mov %cl, %dh - add %dl, %dh - and $-16, %eax - - sub $16, %dh - ja L(length_less16_part2) - - pcmpeqb (%eax), %xmm1 - pmovmskb %xmm1, %edi - - sar %cl, %edi - add %ecx, %eax - mov %dl, %cl - - mov $1, %edx - sal %cl, %edx - sub $1, %edx - - and %edx, %edi - test %edi, %edi - jz L(ret_null) - - bsr %edi, %edi - add %edi, %eax - POP (%edi) - ret - - CFI_PUSH (%edi) - - .p2align 4 -L(length_less16_part2): - movdqa 16(%eax), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %edi - - mov %cl, %ch - - mov %dh, %cl - mov $1, %edx - sal %cl, %edx - sub $1, %edx - - and %edx, %edi - - test %edi, %edi - jnz L(length_less16_part2_return) - - pcmpeqb (%eax), %xmm1 - pmovmskb %xmm1, %edi - - mov %ch, %cl - sar %cl, %edi - test %edi, %edi - jz L(ret_null) - - bsr %edi, %edi - add %edi, %eax - xor %ch, %ch - add %ecx, %eax - POP (%edi) - ret - - CFI_PUSH (%edi) - - .p2align 4 -L(length_less16_part2_return): - bsr %edi, %edi - lea 16(%eax, %edi), %eax - POP (%edi) - ret - - CFI_PUSH (%edi) - - .p2align 4 -L(ret_null): - xor %eax, %eax - POP (%edi) - ret - -END (MEMCHR) -#endif diff --git a/sysdeps/i386/i686/multiarch/memrchr-sse2.S b/sysdeps/i386/i686/multiarch/memrchr-sse2.S deleted file mode 100644 index 5f7853f683..0000000000 --- a/sysdeps/i386/i686/multiarch/memrchr-sse2.S +++ /dev/null @@ -1,724 +0,0 @@ -/* Optimized memrchr with sse2 without bsf - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# define PARMS 4 -# define STR1 PARMS -# define STR2 STR1+4 -# define LEN STR2+4 - - atom_text_section -ENTRY (__memrchr_sse2) - mov STR1(%esp), %ecx - movd STR2(%esp), %xmm1 - mov LEN(%esp), %edx - - sub $16, %edx - jbe L(length_less16) - - punpcklbw %xmm1, %xmm1 - add %edx, %ecx - punpcklbw %xmm1, %xmm1 - - movdqu (%ecx), %xmm0 - pshufd $0, %xmm1, %xmm1 - pcmpeqb %xmm1, %xmm0 - - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(exit_dispatch) - - sub $64, %ecx - mov %ecx, %eax - and $15, %eax - jz L(loop_prolog) - - lea 16(%ecx), %ecx - lea 16(%edx), %edx - sub %eax, %edx - and $-16, %ecx - - .p2align 4 -/* Loop start on aligned string. */ -L(loop_prolog): - sub $64, %edx - jbe L(exit_loop) - - movdqa 48(%ecx), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches48) - - movdqa 32(%ecx), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 16(%ecx), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches16) - - movdqa (%ecx), %xmm4 - pcmpeqb %xmm1, %xmm4 - pmovmskb %xmm4, %eax - test %eax, %eax - jnz L(exit_dispatch) - - sub $64, %ecx - sub $64, %edx - jbe L(exit_loop) - - movdqa 48(%ecx), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches48) - - movdqa 32(%ecx), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 16(%ecx), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches16) - - movdqa (%ecx), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(exit_dispatch) - - mov %ecx, %eax - and $63, %eax - test %eax, %eax - jz L(align64_loop) - - lea 64(%ecx), %ecx - lea 64(%edx), %edx - and $-64, %ecx - sub %eax, %edx - - .p2align 4 -L(align64_loop): - sub $64, %ecx - sub $64, %edx - jbe L(exit_loop) - - movdqa (%ecx), %xmm0 - movdqa 16(%ecx), %xmm2 - movdqa 32(%ecx), %xmm3 - movdqa 48(%ecx), %xmm4 - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm1, %xmm2 - pcmpeqb %xmm1, %xmm3 - pcmpeqb %xmm1, %xmm4 - - pmaxub %xmm3, %xmm0 - pmaxub %xmm4, %xmm2 - pmaxub %xmm0, %xmm2 - pmovmskb %xmm2, %eax - - test %eax, %eax - jz L(align64_loop) - - pmovmskb %xmm4, %eax - test %eax, %eax - jnz L(matches48) - - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 16(%ecx), %xmm2 - - pcmpeqb %xmm1, %xmm2 - pcmpeqb (%ecx), %xmm1 - - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches16) - - pmovmskb %xmm1, %eax - test %ah, %ah - jnz L(exit_dispatch_high) - mov %al, %dl - and $15 << 4, %dl - jnz L(exit_dispatch_8) - test $0x08, %al - jnz L(exit_4) - test $0x04, %al - jnz L(exit_3) - test $0x02, %al - jnz L(exit_2) - mov %ecx, %eax - ret - - .p2align 4 -L(exit_loop): - add $64, %edx - cmp $32, %edx - jbe L(exit_loop_32) - - movdqa 48(%ecx), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches48) - - movdqa 32(%ecx), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 16(%ecx), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches16_1) - cmp $48, %edx - jbe L(return_null) - - pcmpeqb (%ecx), %xmm1 - pmovmskb %xmm1, %eax - test %eax, %eax - jnz L(matches0_1) - xor %eax, %eax - ret - - .p2align 4 -L(exit_loop_32): - movdqa 48(%ecx), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches48_1) - cmp $16, %edx - jbe L(return_null) - - pcmpeqb 32(%ecx), %xmm1 - pmovmskb %xmm1, %eax - test %eax, %eax - jnz L(matches32_1) - xor %eax, %eax - ret - - .p2align 4 -L(matches16): - lea 16(%ecx), %ecx - test %ah, %ah - jnz L(exit_dispatch_high) - mov %al, %dl - and $15 << 4, %dl - jnz L(exit_dispatch_8) - test $0x08, %al - jnz L(exit_4) - test $0x04, %al - jnz L(exit_3) - test $0x02, %al - jnz L(exit_2) - mov %ecx, %eax - ret - - .p2align 4 -L(matches32): - lea 32(%ecx), %ecx - test %ah, %ah - jnz L(exit_dispatch_high) - mov %al, %dl - and $15 << 4, %dl - jnz L(exit_dispatch_8) - test $0x08, %al - jnz L(exit_4) - test $0x04, %al - jnz L(exit_3) - test $0x02, %al - jnz L(exit_2) - mov %ecx, %eax - ret - - .p2align 4 -L(matches48): - lea 48(%ecx), %ecx - - .p2align 4 -L(exit_dispatch): - test %ah, %ah - jnz L(exit_dispatch_high) - mov %al, %dl - and $15 << 4, %dl - jnz L(exit_dispatch_8) - test $0x08, %al - jnz L(exit_4) - test $0x04, %al - jnz L(exit_3) - test $0x02, %al - jnz L(exit_2) - mov %ecx, %eax - ret - - .p2align 4 -L(exit_dispatch_8): - test $0x80, %al - jnz L(exit_8) - test $0x40, %al - jnz L(exit_7) - test $0x20, %al - jnz L(exit_6) - lea 4(%ecx), %eax - ret - - .p2align 4 -L(exit_dispatch_high): - mov %ah, %dh - and $15 << 4, %dh - jnz L(exit_dispatch_high_8) - test $0x08, %ah - jnz L(exit_12) - test $0x04, %ah - jnz L(exit_11) - test $0x02, %ah - jnz L(exit_10) - lea 8(%ecx), %eax - ret - - .p2align 4 -L(exit_dispatch_high_8): - test $0x80, %ah - jnz L(exit_16) - test $0x40, %ah - jnz L(exit_15) - test $0x20, %ah - jnz L(exit_14) - lea 12(%ecx), %eax - ret - - .p2align 4 -L(exit_2): - lea 1(%ecx), %eax - ret - - .p2align 4 -L(exit_3): - lea 2(%ecx), %eax - ret - - .p2align 4 -L(exit_4): - lea 3(%ecx), %eax - ret - - .p2align 4 -L(exit_6): - lea 5(%ecx), %eax - ret - - .p2align 4 -L(exit_7): - lea 6(%ecx), %eax - ret - - .p2align 4 -L(exit_8): - lea 7(%ecx), %eax - ret - - .p2align 4 -L(exit_10): - lea 9(%ecx), %eax - ret - - .p2align 4 -L(exit_11): - lea 10(%ecx), %eax - ret - - .p2align 4 -L(exit_12): - lea 11(%ecx), %eax - ret - - .p2align 4 -L(exit_14): - lea 13(%ecx), %eax - ret - - .p2align 4 -L(exit_15): - lea 14(%ecx), %eax - ret - - .p2align 4 -L(exit_16): - lea 15(%ecx), %eax - ret - - .p2align 4 -L(matches0_1): - lea -64(%edx), %edx - - test %ah, %ah - jnz L(exit_dispatch_1_high) - mov %al, %ah - and $15 << 4, %ah - jnz L(exit_dispatch_1_8) - test $0x08, %al - jnz L(exit_1_4) - test $0x04, %al - jnz L(exit_1_3) - test $0x02, %al - jnz L(exit_1_2) - add $0, %edx - jl L(return_null) - mov %ecx, %eax - ret - - .p2align 4 -L(matches16_1): - lea -48(%edx), %edx - lea 16(%ecx), %ecx - - test %ah, %ah - jnz L(exit_dispatch_1_high) - mov %al, %ah - and $15 << 4, %ah - jnz L(exit_dispatch_1_8) - test $0x08, %al - jnz L(exit_1_4) - test $0x04, %al - jnz L(exit_1_3) - test $0x02, %al - jnz L(exit_1_2) - add $0, %edx - jl L(return_null) - mov %ecx, %eax - ret - - .p2align 4 -L(matches32_1): - lea -32(%edx), %edx - lea 32(%ecx), %ecx - - test %ah, %ah - jnz L(exit_dispatch_1_high) - mov %al, %ah - and $15 << 4, %ah - jnz L(exit_dispatch_1_8) - test $0x08, %al - jnz L(exit_1_4) - test $0x04, %al - jnz L(exit_1_3) - test $0x02, %al - jnz L(exit_1_2) - add $0, %edx - jl L(return_null) - mov %ecx, %eax - ret - - .p2align 4 -L(matches48_1): - lea -16(%edx), %edx - lea 48(%ecx), %ecx - - .p2align 4 -L(exit_dispatch_1): - test %ah, %ah - jnz L(exit_dispatch_1_high) - mov %al, %ah - and $15 << 4, %ah - jnz L(exit_dispatch_1_8) - test $0x08, %al - jnz L(exit_1_4) - test $0x04, %al - jnz L(exit_1_3) - test $0x02, %al - jnz L(exit_1_2) - add $0, %edx - jl L(return_null) - mov %ecx, %eax - ret - - .p2align 4 -L(exit_dispatch_1_8): - test $0x80, %al - jnz L(exit_1_8) - test $0x40, %al - jnz L(exit_1_7) - test $0x20, %al - jnz L(exit_1_6) - add $4, %edx - jl L(return_null) - lea 4(%ecx), %eax - ret - - .p2align 4 -L(exit_dispatch_1_high): - mov %ah, %al - and $15 << 4, %al - jnz L(exit_dispatch_1_high_8) - test $0x08, %ah - jnz L(exit_1_12) - test $0x04, %ah - jnz L(exit_1_11) - test $0x02, %ah - jnz L(exit_1_10) - add $8, %edx - jl L(return_null) - lea 8(%ecx), %eax - ret - - .p2align 4 -L(exit_dispatch_1_high_8): - test $0x80, %ah - jnz L(exit_1_16) - test $0x40, %ah - jnz L(exit_1_15) - test $0x20, %ah - jnz L(exit_1_14) - add $12, %edx - jl L(return_null) - lea 12(%ecx), %eax - ret - - .p2align 4 -L(exit_1_2): - add $1, %edx - jl L(return_null) - lea 1(%ecx), %eax - ret - - .p2align 4 -L(exit_1_3): - add $2, %edx - jl L(return_null) - lea 2(%ecx), %eax - ret - - .p2align 4 -L(exit_1_4): - add $3, %edx - jl L(return_null) - lea 3(%ecx), %eax - ret - - .p2align 4 -L(exit_1_6): - add $5, %edx - jl L(return_null) - lea 5(%ecx), %eax - ret - - .p2align 4 -L(exit_1_7): - add $6, %edx - jl L(return_null) - lea 6(%ecx), %eax - ret - - .p2align 4 -L(exit_1_8): - add $7, %edx - jl L(return_null) - lea 7(%ecx), %eax - ret - - .p2align 4 -L(exit_1_10): - add $9, %edx - jl L(return_null) - lea 9(%ecx), %eax - ret - - .p2align 4 -L(exit_1_11): - add $10, %edx - jl L(return_null) - lea 10(%ecx), %eax - ret - - .p2align 4 -L(exit_1_12): - add $11, %edx - jl L(return_null) - lea 11(%ecx), %eax - ret - - .p2align 4 -L(exit_1_14): - add $13, %edx - jl L(return_null) - lea 13(%ecx), %eax - ret - - .p2align 4 -L(exit_1_15): - add $14, %edx - jl L(return_null) - lea 14(%ecx), %eax - ret - - .p2align 4 -L(exit_1_16): - add $15, %edx - jl L(return_null) - lea 15(%ecx), %eax - ret - - .p2align 4 -L(return_null): - xor %eax, %eax - ret - - .p2align 4 -L(length_less16_offset0): - mov %dl, %cl - pcmpeqb (%eax), %xmm1 - - mov $1, %edx - sal %cl, %edx - sub $1, %edx - - mov %eax, %ecx - pmovmskb %xmm1, %eax - - and %edx, %eax - test %eax, %eax - jnz L(exit_dispatch) - - xor %eax, %eax - ret - - .p2align 4 -L(length_less16): - punpcklbw %xmm1, %xmm1 - add $16, %edx - je L(return_null) - punpcklbw %xmm1, %xmm1 - - mov %ecx, %eax - pshufd $0, %xmm1, %xmm1 - - and $15, %ecx - jz L(length_less16_offset0) - - PUSH (%edi) - - mov %cl, %dh - add %dl, %dh - and $-16, %eax - - sub $16, %dh - ja L(length_less16_part2) - - pcmpeqb (%eax), %xmm1 - pmovmskb %xmm1, %edi - - sar %cl, %edi - add %ecx, %eax - mov %dl, %cl - - mov $1, %edx - sal %cl, %edx - sub $1, %edx - - and %edx, %edi - test %edi, %edi - jz L(ret_null) - - bsr %edi, %edi - add %edi, %eax - POP (%edi) - ret - - CFI_PUSH (%edi) - - .p2align 4 -L(length_less16_part2): - movdqa 16(%eax), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %edi - - mov %cl, %ch - - mov %dh, %cl - mov $1, %edx - sal %cl, %edx - sub $1, %edx - - and %edx, %edi - - test %edi, %edi - jnz L(length_less16_part2_return) - - pcmpeqb (%eax), %xmm1 - pmovmskb %xmm1, %edi - - mov %ch, %cl - sar %cl, %edi - test %edi, %edi - jz L(ret_null) - - bsr %edi, %edi - add %edi, %eax - xor %ch, %ch - add %ecx, %eax - POP (%edi) - ret - - CFI_PUSH (%edi) - - .p2align 4 -L(length_less16_part2_return): - bsr %edi, %edi - lea 16(%eax, %edi), %eax - POP (%edi) - ret - - CFI_PUSH (%edi) - - .p2align 4 -L(ret_null): - xor %eax, %eax - POP (%edi) - ret - -END (__memrchr_sse2) -#endif diff --git a/sysdeps/i386/i686/multiarch/memrchr.S b/sysdeps/i386/i686/multiarch/memrchr.S deleted file mode 100644 index d4253a553b..0000000000 --- a/sysdeps/i386/i686/multiarch/memrchr.S +++ /dev/null @@ -1,45 +0,0 @@ -/* Multiple versions of memrchr - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if IS_IN (libc) - .text -ENTRY(__memrchr) - .type __memrchr, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - HAS_CPU_FEATURE (SSE2) - jz 2f - HAS_ARCH_FEATURE (Slow_BSF) - jz 3f - - LOAD_FUNC_GOT_EAX (__memrchr_sse2) - ret - -2: LOAD_FUNC_GOT_EAX (__memrchr_ia32) - ret - -3: LOAD_FUNC_GOT_EAX (__memrchr_sse2_bsf) - ret -END(__memrchr) - -weak_alias(__memrchr, memrchr) -#endif diff --git a/sysdeps/i386/i686/multiarch/memset-sse2-rep.S b/sysdeps/i386/i686/multiarch/memset-sse2-rep.S deleted file mode 100644 index 3221077e49..0000000000 --- a/sysdeps/i386/i686/multiarch/memset-sse2-rep.S +++ /dev/null @@ -1,811 +0,0 @@ -/* memset with SSE2 and REP string. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -#include -#include "asm-syntax.h" - -#define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -#define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -#define PUSH(REG) pushl REG; CFI_PUSH (REG) -#define POP(REG) popl REG; CFI_POP (REG) - -#ifdef USE_AS_BZERO -# define DEST PARMS -# define LEN DEST+4 -# define SETRTNVAL -#else -# define DEST PARMS -# define CHR DEST+4 -# define LEN CHR+4 -# define SETRTNVAL movl DEST(%esp), %eax -#endif - -#ifdef SHARED -# define ENTRANCE PUSH (%ebx); -# define RETURN_END POP (%ebx); ret -# define RETURN RETURN_END; CFI_PUSH (%ebx) -# define PARMS 8 /* Preserve EBX. */ -# define JMPTBL(I, B) I - B - -/* Load an entry in a jump table into EBX and branch to it. TABLE is a - jump table with relative offsets. */ -# define BRANCH_TO_JMPTBL_ENTRY(TABLE) \ - /* We first load PC into EBX. */ \ - SETUP_PIC_REG(bx); \ - /* Get the address of the jump table. */ \ - add $(TABLE - .), %ebx; \ - /* Get the entry and convert the relative offset to the \ - absolute address. */ \ - add (%ebx,%ecx,4), %ebx; \ - add %ecx, %edx; \ - /* We loaded the jump table and adjusted EDX. Go. */ \ - jmp *%ebx -#else -# define ENTRANCE -# define RETURN_END ret -# define RETURN RETURN_END -# define PARMS 4 -# define JMPTBL(I, B) I - -/* Branch to an entry in a jump table. TABLE is a jump table with - absolute offsets. */ -# define BRANCH_TO_JMPTBL_ENTRY(TABLE) \ - add %ecx, %edx; \ - jmp *TABLE(,%ecx,4) -#endif - - .section .text.sse2,"ax",@progbits -#if defined SHARED && IS_IN (libc) && !defined USE_AS_BZERO -ENTRY (__memset_chk_sse2_rep) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb HIDDEN_JUMPTARGET (__chk_fail) -END (__memset_chk_sse2_rep) -#endif -ENTRY (__memset_sse2_rep) - ENTRANCE - - movl LEN(%esp), %ecx -#ifdef USE_AS_BZERO - xor %eax, %eax -#else - movzbl CHR(%esp), %eax - movb %al, %ah - /* Fill the whole EAX with pattern. */ - movl %eax, %edx - shl $16, %eax - or %edx, %eax -#endif - movl DEST(%esp), %edx - cmp $32, %ecx - jae L(32bytesormore) - -L(write_less32bytes): - BRANCH_TO_JMPTBL_ENTRY (L(table_less_32bytes)) - - - .pushsection .rodata.sse2,"a",@progbits - ALIGN (2) -L(table_less_32bytes): - .int JMPTBL (L(write_0bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_1bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_2bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_3bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_4bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_5bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_6bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_7bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_8bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_9bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_10bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_11bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_12bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_13bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_14bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_15bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_16bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_17bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_18bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_19bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_20bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_21bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_22bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_23bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_24bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_25bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_26bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_27bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_28bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_29bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_30bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_31bytes), L(table_less_32bytes)) - .popsection - - ALIGN (4) -L(write_28bytes): - movl %eax, -28(%edx) -L(write_24bytes): - movl %eax, -24(%edx) -L(write_20bytes): - movl %eax, -20(%edx) -L(write_16bytes): - movl %eax, -16(%edx) -L(write_12bytes): - movl %eax, -12(%edx) -L(write_8bytes): - movl %eax, -8(%edx) -L(write_4bytes): - movl %eax, -4(%edx) -L(write_0bytes): - SETRTNVAL - RETURN - - ALIGN (4) -L(write_29bytes): - movl %eax, -29(%edx) -L(write_25bytes): - movl %eax, -25(%edx) -L(write_21bytes): - movl %eax, -21(%edx) -L(write_17bytes): - movl %eax, -17(%edx) -L(write_13bytes): - movl %eax, -13(%edx) -L(write_9bytes): - movl %eax, -9(%edx) -L(write_5bytes): - movl %eax, -5(%edx) -L(write_1bytes): - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(write_30bytes): - movl %eax, -30(%edx) -L(write_26bytes): - movl %eax, -26(%edx) -L(write_22bytes): - movl %eax, -22(%edx) -L(write_18bytes): - movl %eax, -18(%edx) -L(write_14bytes): - movl %eax, -14(%edx) -L(write_10bytes): - movl %eax, -10(%edx) -L(write_6bytes): - movl %eax, -6(%edx) -L(write_2bytes): - movw %ax, -2(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(write_31bytes): - movl %eax, -31(%edx) -L(write_27bytes): - movl %eax, -27(%edx) -L(write_23bytes): - movl %eax, -23(%edx) -L(write_19bytes): - movl %eax, -19(%edx) -L(write_15bytes): - movl %eax, -15(%edx) -L(write_11bytes): - movl %eax, -11(%edx) -L(write_7bytes): - movl %eax, -7(%edx) -L(write_3bytes): - movw %ax, -3(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -/* ECX > 32 and EDX is 4 byte aligned. */ -L(32bytesormore): - /* Fill xmm0 with the pattern. */ -#ifdef USE_AS_BZERO - pxor %xmm0, %xmm0 -#else - movd %eax, %xmm0 - pshufd $0, %xmm0, %xmm0 -#endif - testl $0xf, %edx - jz L(aligned_16) -/* ECX > 32 and EDX is not 16 byte aligned. */ -L(not_aligned_16): - movdqu %xmm0, (%edx) - movl %edx, %eax - and $-16, %edx - add $16, %edx - sub %edx, %eax - add %eax, %ecx - movd %xmm0, %eax - - ALIGN (4) -L(aligned_16): - cmp $128, %ecx - jae L(128bytesormore) - -L(aligned_16_less128bytes): - BRANCH_TO_JMPTBL_ENTRY (L(table_16_128bytes)) - - ALIGN (4) -L(128bytesormore): - PUSH (%edi) -#ifdef DATA_CACHE_SIZE - PUSH (%ebx) - mov $DATA_CACHE_SIZE, %ebx -#else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - mov __x86_data_cache_size@GOTOFF(%ebx), %ebx -# else - PUSH (%ebx) - mov __x86_data_cache_size, %ebx -# endif -#endif - mov %ebx, %edi - shr $4, %ebx - sub %ebx, %edi -#if defined DATA_CACHE_SIZE || !defined SHARED - POP (%ebx) -#endif -/* - * When data size approximate the end of L1 cache, - * fast string will prefetch and combine data efficiently. - */ - cmp %edi, %ecx - jae L(128bytesormore_endof_L1) - subl $128, %ecx -L(128bytesormore_normal): - sub $128, %ecx - movdqa %xmm0, (%edx) - movdqa %xmm0, 0x10(%edx) - movdqa %xmm0, 0x20(%edx) - movdqa %xmm0, 0x30(%edx) - movdqa %xmm0, 0x40(%edx) - movdqa %xmm0, 0x50(%edx) - movdqa %xmm0, 0x60(%edx) - movdqa %xmm0, 0x70(%edx) - lea 128(%edx), %edx - jb L(128bytesless_normal) - - - sub $128, %ecx - movdqa %xmm0, (%edx) - movdqa %xmm0, 0x10(%edx) - movdqa %xmm0, 0x20(%edx) - movdqa %xmm0, 0x30(%edx) - movdqa %xmm0, 0x40(%edx) - movdqa %xmm0, 0x50(%edx) - movdqa %xmm0, 0x60(%edx) - movdqa %xmm0, 0x70(%edx) - lea 128(%edx), %edx - jae L(128bytesormore_normal) - -L(128bytesless_normal): - POP (%edi) - add $128, %ecx - BRANCH_TO_JMPTBL_ENTRY (L(table_16_128bytes)) - - CFI_PUSH (%edi) - ALIGN (4) -L(128bytesormore_endof_L1): - mov %edx, %edi - mov %ecx, %edx - shr $2, %ecx - and $3, %edx - rep stosl - jz L(copy_page_by_rep_exit) - cmp $2, %edx - jb L(copy_page_by_rep_left_1) - movw %ax, (%edi) - add $2, %edi - sub $2, %edx - jz L(copy_page_by_rep_exit) -L(copy_page_by_rep_left_1): - movb %al, (%edi) -L(copy_page_by_rep_exit): - POP (%edi) - SETRTNVAL - RETURN - - .pushsection .rodata.sse2,"a",@progbits - ALIGN (2) -L(table_16_128bytes): - .int JMPTBL (L(aligned_16_0bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_1bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_2bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_3bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_4bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_5bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_6bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_7bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_8bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_9bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_10bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_11bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_12bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_13bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_14bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_15bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_16bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_17bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_18bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_19bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_20bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_21bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_22bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_23bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_24bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_25bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_26bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_27bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_28bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_29bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_30bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_31bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_32bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_33bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_34bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_35bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_36bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_37bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_38bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_39bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_40bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_41bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_42bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_43bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_44bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_45bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_46bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_47bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_48bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_49bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_50bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_51bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_52bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_53bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_54bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_55bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_56bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_57bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_58bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_59bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_60bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_61bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_62bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_63bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_64bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_65bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_66bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_67bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_68bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_69bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_70bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_71bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_72bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_73bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_74bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_75bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_76bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_77bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_78bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_79bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_80bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_81bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_82bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_83bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_84bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_85bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_86bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_87bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_88bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_89bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_90bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_91bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_92bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_93bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_94bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_95bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_96bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_97bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_98bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_99bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_100bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_101bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_102bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_103bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_104bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_105bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_106bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_107bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_108bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_109bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_110bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_111bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_112bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_113bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_114bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_115bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_116bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_117bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_118bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_119bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_120bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_121bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_122bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_123bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_124bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_125bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_126bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_127bytes), L(table_16_128bytes)) - .popsection - - ALIGN (4) -L(aligned_16_112bytes): - movdqa %xmm0, -112(%edx) -L(aligned_16_96bytes): - movdqa %xmm0, -96(%edx) -L(aligned_16_80bytes): - movdqa %xmm0, -80(%edx) -L(aligned_16_64bytes): - movdqa %xmm0, -64(%edx) -L(aligned_16_48bytes): - movdqa %xmm0, -48(%edx) -L(aligned_16_32bytes): - movdqa %xmm0, -32(%edx) -L(aligned_16_16bytes): - movdqa %xmm0, -16(%edx) -L(aligned_16_0bytes): - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_113bytes): - movdqa %xmm0, -113(%edx) -L(aligned_16_97bytes): - movdqa %xmm0, -97(%edx) -L(aligned_16_81bytes): - movdqa %xmm0, -81(%edx) -L(aligned_16_65bytes): - movdqa %xmm0, -65(%edx) -L(aligned_16_49bytes): - movdqa %xmm0, -49(%edx) -L(aligned_16_33bytes): - movdqa %xmm0, -33(%edx) -L(aligned_16_17bytes): - movdqa %xmm0, -17(%edx) -L(aligned_16_1bytes): - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_114bytes): - movdqa %xmm0, -114(%edx) -L(aligned_16_98bytes): - movdqa %xmm0, -98(%edx) -L(aligned_16_82bytes): - movdqa %xmm0, -82(%edx) -L(aligned_16_66bytes): - movdqa %xmm0, -66(%edx) -L(aligned_16_50bytes): - movdqa %xmm0, -50(%edx) -L(aligned_16_34bytes): - movdqa %xmm0, -34(%edx) -L(aligned_16_18bytes): - movdqa %xmm0, -18(%edx) -L(aligned_16_2bytes): - movw %ax, -2(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_115bytes): - movdqa %xmm0, -115(%edx) -L(aligned_16_99bytes): - movdqa %xmm0, -99(%edx) -L(aligned_16_83bytes): - movdqa %xmm0, -83(%edx) -L(aligned_16_67bytes): - movdqa %xmm0, -67(%edx) -L(aligned_16_51bytes): - movdqa %xmm0, -51(%edx) -L(aligned_16_35bytes): - movdqa %xmm0, -35(%edx) -L(aligned_16_19bytes): - movdqa %xmm0, -19(%edx) -L(aligned_16_3bytes): - movw %ax, -3(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_116bytes): - movdqa %xmm0, -116(%edx) -L(aligned_16_100bytes): - movdqa %xmm0, -100(%edx) -L(aligned_16_84bytes): - movdqa %xmm0, -84(%edx) -L(aligned_16_68bytes): - movdqa %xmm0, -68(%edx) -L(aligned_16_52bytes): - movdqa %xmm0, -52(%edx) -L(aligned_16_36bytes): - movdqa %xmm0, -36(%edx) -L(aligned_16_20bytes): - movdqa %xmm0, -20(%edx) -L(aligned_16_4bytes): - movl %eax, -4(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_117bytes): - movdqa %xmm0, -117(%edx) -L(aligned_16_101bytes): - movdqa %xmm0, -101(%edx) -L(aligned_16_85bytes): - movdqa %xmm0, -85(%edx) -L(aligned_16_69bytes): - movdqa %xmm0, -69(%edx) -L(aligned_16_53bytes): - movdqa %xmm0, -53(%edx) -L(aligned_16_37bytes): - movdqa %xmm0, -37(%edx) -L(aligned_16_21bytes): - movdqa %xmm0, -21(%edx) -L(aligned_16_5bytes): - movl %eax, -5(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_118bytes): - movdqa %xmm0, -118(%edx) -L(aligned_16_102bytes): - movdqa %xmm0, -102(%edx) -L(aligned_16_86bytes): - movdqa %xmm0, -86(%edx) -L(aligned_16_70bytes): - movdqa %xmm0, -70(%edx) -L(aligned_16_54bytes): - movdqa %xmm0, -54(%edx) -L(aligned_16_38bytes): - movdqa %xmm0, -38(%edx) -L(aligned_16_22bytes): - movdqa %xmm0, -22(%edx) -L(aligned_16_6bytes): - movl %eax, -6(%edx) - movw %ax, -2(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_119bytes): - movdqa %xmm0, -119(%edx) -L(aligned_16_103bytes): - movdqa %xmm0, -103(%edx) -L(aligned_16_87bytes): - movdqa %xmm0, -87(%edx) -L(aligned_16_71bytes): - movdqa %xmm0, -71(%edx) -L(aligned_16_55bytes): - movdqa %xmm0, -55(%edx) -L(aligned_16_39bytes): - movdqa %xmm0, -39(%edx) -L(aligned_16_23bytes): - movdqa %xmm0, -23(%edx) -L(aligned_16_7bytes): - movl %eax, -7(%edx) - movw %ax, -3(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_120bytes): - movdqa %xmm0, -120(%edx) -L(aligned_16_104bytes): - movdqa %xmm0, -104(%edx) -L(aligned_16_88bytes): - movdqa %xmm0, -88(%edx) -L(aligned_16_72bytes): - movdqa %xmm0, -72(%edx) -L(aligned_16_56bytes): - movdqa %xmm0, -56(%edx) -L(aligned_16_40bytes): - movdqa %xmm0, -40(%edx) -L(aligned_16_24bytes): - movdqa %xmm0, -24(%edx) -L(aligned_16_8bytes): - movq %xmm0, -8(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_121bytes): - movdqa %xmm0, -121(%edx) -L(aligned_16_105bytes): - movdqa %xmm0, -105(%edx) -L(aligned_16_89bytes): - movdqa %xmm0, -89(%edx) -L(aligned_16_73bytes): - movdqa %xmm0, -73(%edx) -L(aligned_16_57bytes): - movdqa %xmm0, -57(%edx) -L(aligned_16_41bytes): - movdqa %xmm0, -41(%edx) -L(aligned_16_25bytes): - movdqa %xmm0, -25(%edx) -L(aligned_16_9bytes): - movq %xmm0, -9(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_122bytes): - movdqa %xmm0, -122(%edx) -L(aligned_16_106bytes): - movdqa %xmm0, -106(%edx) -L(aligned_16_90bytes): - movdqa %xmm0, -90(%edx) -L(aligned_16_74bytes): - movdqa %xmm0, -74(%edx) -L(aligned_16_58bytes): - movdqa %xmm0, -58(%edx) -L(aligned_16_42bytes): - movdqa %xmm0, -42(%edx) -L(aligned_16_26bytes): - movdqa %xmm0, -26(%edx) -L(aligned_16_10bytes): - movq %xmm0, -10(%edx) - movw %ax, -2(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_123bytes): - movdqa %xmm0, -123(%edx) -L(aligned_16_107bytes): - movdqa %xmm0, -107(%edx) -L(aligned_16_91bytes): - movdqa %xmm0, -91(%edx) -L(aligned_16_75bytes): - movdqa %xmm0, -75(%edx) -L(aligned_16_59bytes): - movdqa %xmm0, -59(%edx) -L(aligned_16_43bytes): - movdqa %xmm0, -43(%edx) -L(aligned_16_27bytes): - movdqa %xmm0, -27(%edx) -L(aligned_16_11bytes): - movq %xmm0, -11(%edx) - movw %ax, -3(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_124bytes): - movdqa %xmm0, -124(%edx) -L(aligned_16_108bytes): - movdqa %xmm0, -108(%edx) -L(aligned_16_92bytes): - movdqa %xmm0, -92(%edx) -L(aligned_16_76bytes): - movdqa %xmm0, -76(%edx) -L(aligned_16_60bytes): - movdqa %xmm0, -60(%edx) -L(aligned_16_44bytes): - movdqa %xmm0, -44(%edx) -L(aligned_16_28bytes): - movdqa %xmm0, -28(%edx) -L(aligned_16_12bytes): - movq %xmm0, -12(%edx) - movl %eax, -4(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_125bytes): - movdqa %xmm0, -125(%edx) -L(aligned_16_109bytes): - movdqa %xmm0, -109(%edx) -L(aligned_16_93bytes): - movdqa %xmm0, -93(%edx) -L(aligned_16_77bytes): - movdqa %xmm0, -77(%edx) -L(aligned_16_61bytes): - movdqa %xmm0, -61(%edx) -L(aligned_16_45bytes): - movdqa %xmm0, -45(%edx) -L(aligned_16_29bytes): - movdqa %xmm0, -29(%edx) -L(aligned_16_13bytes): - movq %xmm0, -13(%edx) - movl %eax, -5(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_126bytes): - movdqa %xmm0, -126(%edx) -L(aligned_16_110bytes): - movdqa %xmm0, -110(%edx) -L(aligned_16_94bytes): - movdqa %xmm0, -94(%edx) -L(aligned_16_78bytes): - movdqa %xmm0, -78(%edx) -L(aligned_16_62bytes): - movdqa %xmm0, -62(%edx) -L(aligned_16_46bytes): - movdqa %xmm0, -46(%edx) -L(aligned_16_30bytes): - movdqa %xmm0, -30(%edx) -L(aligned_16_14bytes): - movq %xmm0, -14(%edx) - movl %eax, -6(%edx) - movw %ax, -2(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_127bytes): - movdqa %xmm0, -127(%edx) -L(aligned_16_111bytes): - movdqa %xmm0, -111(%edx) -L(aligned_16_95bytes): - movdqa %xmm0, -95(%edx) -L(aligned_16_79bytes): - movdqa %xmm0, -79(%edx) -L(aligned_16_63bytes): - movdqa %xmm0, -63(%edx) -L(aligned_16_47bytes): - movdqa %xmm0, -47(%edx) -L(aligned_16_31bytes): - movdqa %xmm0, -31(%edx) -L(aligned_16_15bytes): - movq %xmm0, -15(%edx) - movl %eax, -7(%edx) - movw %ax, -3(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN_END - -END (__memset_sse2_rep) - -#endif diff --git a/sysdeps/i386/i686/multiarch/memset-sse2.S b/sysdeps/i386/i686/multiarch/memset-sse2.S deleted file mode 100644 index d7b8be9114..0000000000 --- a/sysdeps/i386/i686/multiarch/memset-sse2.S +++ /dev/null @@ -1,860 +0,0 @@ -/* memset with SSE2 - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -#include -#include "asm-syntax.h" - -#define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -#define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -#define PUSH(REG) pushl REG; CFI_PUSH (REG) -#define POP(REG) popl REG; CFI_POP (REG) - -#ifdef USE_AS_BZERO -# define DEST PARMS -# define LEN DEST+4 -# define SETRTNVAL -#else -# define DEST PARMS -# define CHR DEST+4 -# define LEN CHR+4 -# define SETRTNVAL movl DEST(%esp), %eax -#endif - -#ifdef SHARED -# define ENTRANCE PUSH (%ebx); -# define RETURN_END POP (%ebx); ret -# define RETURN RETURN_END; CFI_PUSH (%ebx) -# define PARMS 8 /* Preserve EBX. */ -# define JMPTBL(I, B) I - B - -/* Load an entry in a jump table into EBX and branch to it. TABLE is a - jump table with relative offsets. */ -# define BRANCH_TO_JMPTBL_ENTRY(TABLE) \ - /* We first load PC into EBX. */ \ - SETUP_PIC_REG(bx); \ - /* Get the address of the jump table. */ \ - add $(TABLE - .), %ebx; \ - /* Get the entry and convert the relative offset to the \ - absolute address. */ \ - add (%ebx,%ecx,4), %ebx; \ - add %ecx, %edx; \ - /* We loaded the jump table and adjusted EDX. Go. */ \ - jmp *%ebx -#else -# define ENTRANCE -# define RETURN_END ret -# define RETURN RETURN_END -# define PARMS 4 -# define JMPTBL(I, B) I - -/* Branch to an entry in a jump table. TABLE is a jump table with - absolute offsets. */ -# define BRANCH_TO_JMPTBL_ENTRY(TABLE) \ - add %ecx, %edx; \ - jmp *TABLE(,%ecx,4) -#endif - - .section .text.sse2,"ax",@progbits -#if defined SHARED && IS_IN (libc) && !defined USE_AS_BZERO -ENTRY (__memset_chk_sse2) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb HIDDEN_JUMPTARGET (__chk_fail) -END (__memset_chk_sse2) -#endif -ENTRY (__memset_sse2) - ENTRANCE - - movl LEN(%esp), %ecx -#ifdef USE_AS_BZERO - xor %eax, %eax -#else - movzbl CHR(%esp), %eax - movb %al, %ah - /* Fill the whole EAX with pattern. */ - movl %eax, %edx - shl $16, %eax - or %edx, %eax -#endif - movl DEST(%esp), %edx - cmp $32, %ecx - jae L(32bytesormore) - -L(write_less32bytes): - BRANCH_TO_JMPTBL_ENTRY (L(table_less_32bytes)) - - - .pushsection .rodata.sse2,"a",@progbits - ALIGN (2) -L(table_less_32bytes): - .int JMPTBL (L(write_0bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_1bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_2bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_3bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_4bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_5bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_6bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_7bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_8bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_9bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_10bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_11bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_12bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_13bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_14bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_15bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_16bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_17bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_18bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_19bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_20bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_21bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_22bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_23bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_24bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_25bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_26bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_27bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_28bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_29bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_30bytes), L(table_less_32bytes)) - .int JMPTBL (L(write_31bytes), L(table_less_32bytes)) - .popsection - - ALIGN (4) -L(write_28bytes): - movl %eax, -28(%edx) -L(write_24bytes): - movl %eax, -24(%edx) -L(write_20bytes): - movl %eax, -20(%edx) -L(write_16bytes): - movl %eax, -16(%edx) -L(write_12bytes): - movl %eax, -12(%edx) -L(write_8bytes): - movl %eax, -8(%edx) -L(write_4bytes): - movl %eax, -4(%edx) -L(write_0bytes): - SETRTNVAL - RETURN - - ALIGN (4) -L(write_29bytes): - movl %eax, -29(%edx) -L(write_25bytes): - movl %eax, -25(%edx) -L(write_21bytes): - movl %eax, -21(%edx) -L(write_17bytes): - movl %eax, -17(%edx) -L(write_13bytes): - movl %eax, -13(%edx) -L(write_9bytes): - movl %eax, -9(%edx) -L(write_5bytes): - movl %eax, -5(%edx) -L(write_1bytes): - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(write_30bytes): - movl %eax, -30(%edx) -L(write_26bytes): - movl %eax, -26(%edx) -L(write_22bytes): - movl %eax, -22(%edx) -L(write_18bytes): - movl %eax, -18(%edx) -L(write_14bytes): - movl %eax, -14(%edx) -L(write_10bytes): - movl %eax, -10(%edx) -L(write_6bytes): - movl %eax, -6(%edx) -L(write_2bytes): - movw %ax, -2(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(write_31bytes): - movl %eax, -31(%edx) -L(write_27bytes): - movl %eax, -27(%edx) -L(write_23bytes): - movl %eax, -23(%edx) -L(write_19bytes): - movl %eax, -19(%edx) -L(write_15bytes): - movl %eax, -15(%edx) -L(write_11bytes): - movl %eax, -11(%edx) -L(write_7bytes): - movl %eax, -7(%edx) -L(write_3bytes): - movw %ax, -3(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -/* ECX > 32 and EDX is 4 byte aligned. */ -L(32bytesormore): - /* Fill xmm0 with the pattern. */ -#ifdef USE_AS_BZERO - pxor %xmm0, %xmm0 -#else - movd %eax, %xmm0 - pshufd $0, %xmm0, %xmm0 -#endif - testl $0xf, %edx - jz L(aligned_16) -/* ECX > 32 and EDX is not 16 byte aligned. */ -L(not_aligned_16): - movdqu %xmm0, (%edx) - movl %edx, %eax - and $-16, %edx - add $16, %edx - sub %edx, %eax - add %eax, %ecx - movd %xmm0, %eax - - ALIGN (4) -L(aligned_16): - cmp $128, %ecx - jae L(128bytesormore) - -L(aligned_16_less128bytes): - BRANCH_TO_JMPTBL_ENTRY (L(table_16_128bytes)) - - ALIGN (4) -L(128bytesormore): -#ifdef SHARED_CACHE_SIZE - PUSH (%ebx) - mov $SHARED_CACHE_SIZE, %ebx -#else -# ifdef SHARED - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - mov __x86_shared_cache_size@GOTOFF(%ebx), %ebx -# else - PUSH (%ebx) - mov __x86_shared_cache_size, %ebx -# endif -#endif - cmp %ebx, %ecx - jae L(128bytesormore_nt_start) - - -#ifdef DATA_CACHE_SIZE - POP (%ebx) -# define RESTORE_EBX_STATE CFI_PUSH (%ebx) - cmp $DATA_CACHE_SIZE, %ecx -#else -# ifdef SHARED -# define RESTORE_EBX_STATE - SETUP_PIC_REG(bx) - add $_GLOBAL_OFFSET_TABLE_, %ebx - cmp __x86_data_cache_size@GOTOFF(%ebx), %ecx -# else - POP (%ebx) -# define RESTORE_EBX_STATE CFI_PUSH (%ebx) - cmp __x86_data_cache_size, %ecx -# endif -#endif - - jae L(128bytes_L2_normal) - subl $128, %ecx -L(128bytesormore_normal): - sub $128, %ecx - movdqa %xmm0, (%edx) - movdqa %xmm0, 0x10(%edx) - movdqa %xmm0, 0x20(%edx) - movdqa %xmm0, 0x30(%edx) - movdqa %xmm0, 0x40(%edx) - movdqa %xmm0, 0x50(%edx) - movdqa %xmm0, 0x60(%edx) - movdqa %xmm0, 0x70(%edx) - lea 128(%edx), %edx - jb L(128bytesless_normal) - - - sub $128, %ecx - movdqa %xmm0, (%edx) - movdqa %xmm0, 0x10(%edx) - movdqa %xmm0, 0x20(%edx) - movdqa %xmm0, 0x30(%edx) - movdqa %xmm0, 0x40(%edx) - movdqa %xmm0, 0x50(%edx) - movdqa %xmm0, 0x60(%edx) - movdqa %xmm0, 0x70(%edx) - lea 128(%edx), %edx - jae L(128bytesormore_normal) - -L(128bytesless_normal): - add $128, %ecx - BRANCH_TO_JMPTBL_ENTRY (L(table_16_128bytes)) - - ALIGN (4) -L(128bytes_L2_normal): - prefetcht0 0x380(%edx) - prefetcht0 0x3c0(%edx) - sub $128, %ecx - movdqa %xmm0, (%edx) - movaps %xmm0, 0x10(%edx) - movaps %xmm0, 0x20(%edx) - movaps %xmm0, 0x30(%edx) - movaps %xmm0, 0x40(%edx) - movaps %xmm0, 0x50(%edx) - movaps %xmm0, 0x60(%edx) - movaps %xmm0, 0x70(%edx) - add $128, %edx - cmp $128, %ecx - jae L(128bytes_L2_normal) - -L(128bytesless_L2_normal): - BRANCH_TO_JMPTBL_ENTRY (L(table_16_128bytes)) - - RESTORE_EBX_STATE -L(128bytesormore_nt_start): - sub %ebx, %ecx - ALIGN (4) -L(128bytesormore_shared_cache_loop): - prefetcht0 0x3c0(%edx) - prefetcht0 0x380(%edx) - sub $0x80, %ebx - movdqa %xmm0, (%edx) - movdqa %xmm0, 0x10(%edx) - movdqa %xmm0, 0x20(%edx) - movdqa %xmm0, 0x30(%edx) - movdqa %xmm0, 0x40(%edx) - movdqa %xmm0, 0x50(%edx) - movdqa %xmm0, 0x60(%edx) - movdqa %xmm0, 0x70(%edx) - add $0x80, %edx - cmp $0x80, %ebx - jae L(128bytesormore_shared_cache_loop) - cmp $0x80, %ecx - jb L(shared_cache_loop_end) - ALIGN (4) -L(128bytesormore_nt): - sub $0x80, %ecx - movntdq %xmm0, (%edx) - movntdq %xmm0, 0x10(%edx) - movntdq %xmm0, 0x20(%edx) - movntdq %xmm0, 0x30(%edx) - movntdq %xmm0, 0x40(%edx) - movntdq %xmm0, 0x50(%edx) - movntdq %xmm0, 0x60(%edx) - movntdq %xmm0, 0x70(%edx) - add $0x80, %edx - cmp $0x80, %ecx - jae L(128bytesormore_nt) - sfence -L(shared_cache_loop_end): -#if defined DATA_CACHE_SIZE || !defined SHARED - POP (%ebx) -#endif - BRANCH_TO_JMPTBL_ENTRY (L(table_16_128bytes)) - - - .pushsection .rodata.sse2,"a",@progbits - ALIGN (2) -L(table_16_128bytes): - .int JMPTBL (L(aligned_16_0bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_1bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_2bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_3bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_4bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_5bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_6bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_7bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_8bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_9bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_10bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_11bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_12bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_13bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_14bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_15bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_16bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_17bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_18bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_19bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_20bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_21bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_22bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_23bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_24bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_25bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_26bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_27bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_28bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_29bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_30bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_31bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_32bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_33bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_34bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_35bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_36bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_37bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_38bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_39bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_40bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_41bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_42bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_43bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_44bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_45bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_46bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_47bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_48bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_49bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_50bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_51bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_52bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_53bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_54bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_55bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_56bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_57bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_58bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_59bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_60bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_61bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_62bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_63bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_64bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_65bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_66bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_67bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_68bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_69bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_70bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_71bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_72bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_73bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_74bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_75bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_76bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_77bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_78bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_79bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_80bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_81bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_82bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_83bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_84bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_85bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_86bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_87bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_88bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_89bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_90bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_91bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_92bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_93bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_94bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_95bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_96bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_97bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_98bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_99bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_100bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_101bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_102bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_103bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_104bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_105bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_106bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_107bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_108bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_109bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_110bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_111bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_112bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_113bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_114bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_115bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_116bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_117bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_118bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_119bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_120bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_121bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_122bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_123bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_124bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_125bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_126bytes), L(table_16_128bytes)) - .int JMPTBL (L(aligned_16_127bytes), L(table_16_128bytes)) - .popsection - - ALIGN (4) -L(aligned_16_112bytes): - movdqa %xmm0, -112(%edx) -L(aligned_16_96bytes): - movdqa %xmm0, -96(%edx) -L(aligned_16_80bytes): - movdqa %xmm0, -80(%edx) -L(aligned_16_64bytes): - movdqa %xmm0, -64(%edx) -L(aligned_16_48bytes): - movdqa %xmm0, -48(%edx) -L(aligned_16_32bytes): - movdqa %xmm0, -32(%edx) -L(aligned_16_16bytes): - movdqa %xmm0, -16(%edx) -L(aligned_16_0bytes): - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_113bytes): - movdqa %xmm0, -113(%edx) -L(aligned_16_97bytes): - movdqa %xmm0, -97(%edx) -L(aligned_16_81bytes): - movdqa %xmm0, -81(%edx) -L(aligned_16_65bytes): - movdqa %xmm0, -65(%edx) -L(aligned_16_49bytes): - movdqa %xmm0, -49(%edx) -L(aligned_16_33bytes): - movdqa %xmm0, -33(%edx) -L(aligned_16_17bytes): - movdqa %xmm0, -17(%edx) -L(aligned_16_1bytes): - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_114bytes): - movdqa %xmm0, -114(%edx) -L(aligned_16_98bytes): - movdqa %xmm0, -98(%edx) -L(aligned_16_82bytes): - movdqa %xmm0, -82(%edx) -L(aligned_16_66bytes): - movdqa %xmm0, -66(%edx) -L(aligned_16_50bytes): - movdqa %xmm0, -50(%edx) -L(aligned_16_34bytes): - movdqa %xmm0, -34(%edx) -L(aligned_16_18bytes): - movdqa %xmm0, -18(%edx) -L(aligned_16_2bytes): - movw %ax, -2(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_115bytes): - movdqa %xmm0, -115(%edx) -L(aligned_16_99bytes): - movdqa %xmm0, -99(%edx) -L(aligned_16_83bytes): - movdqa %xmm0, -83(%edx) -L(aligned_16_67bytes): - movdqa %xmm0, -67(%edx) -L(aligned_16_51bytes): - movdqa %xmm0, -51(%edx) -L(aligned_16_35bytes): - movdqa %xmm0, -35(%edx) -L(aligned_16_19bytes): - movdqa %xmm0, -19(%edx) -L(aligned_16_3bytes): - movw %ax, -3(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_116bytes): - movdqa %xmm0, -116(%edx) -L(aligned_16_100bytes): - movdqa %xmm0, -100(%edx) -L(aligned_16_84bytes): - movdqa %xmm0, -84(%edx) -L(aligned_16_68bytes): - movdqa %xmm0, -68(%edx) -L(aligned_16_52bytes): - movdqa %xmm0, -52(%edx) -L(aligned_16_36bytes): - movdqa %xmm0, -36(%edx) -L(aligned_16_20bytes): - movdqa %xmm0, -20(%edx) -L(aligned_16_4bytes): - movl %eax, -4(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_117bytes): - movdqa %xmm0, -117(%edx) -L(aligned_16_101bytes): - movdqa %xmm0, -101(%edx) -L(aligned_16_85bytes): - movdqa %xmm0, -85(%edx) -L(aligned_16_69bytes): - movdqa %xmm0, -69(%edx) -L(aligned_16_53bytes): - movdqa %xmm0, -53(%edx) -L(aligned_16_37bytes): - movdqa %xmm0, -37(%edx) -L(aligned_16_21bytes): - movdqa %xmm0, -21(%edx) -L(aligned_16_5bytes): - movl %eax, -5(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_118bytes): - movdqa %xmm0, -118(%edx) -L(aligned_16_102bytes): - movdqa %xmm0, -102(%edx) -L(aligned_16_86bytes): - movdqa %xmm0, -86(%edx) -L(aligned_16_70bytes): - movdqa %xmm0, -70(%edx) -L(aligned_16_54bytes): - movdqa %xmm0, -54(%edx) -L(aligned_16_38bytes): - movdqa %xmm0, -38(%edx) -L(aligned_16_22bytes): - movdqa %xmm0, -22(%edx) -L(aligned_16_6bytes): - movl %eax, -6(%edx) - movw %ax, -2(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_119bytes): - movdqa %xmm0, -119(%edx) -L(aligned_16_103bytes): - movdqa %xmm0, -103(%edx) -L(aligned_16_87bytes): - movdqa %xmm0, -87(%edx) -L(aligned_16_71bytes): - movdqa %xmm0, -71(%edx) -L(aligned_16_55bytes): - movdqa %xmm0, -55(%edx) -L(aligned_16_39bytes): - movdqa %xmm0, -39(%edx) -L(aligned_16_23bytes): - movdqa %xmm0, -23(%edx) -L(aligned_16_7bytes): - movl %eax, -7(%edx) - movw %ax, -3(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_120bytes): - movdqa %xmm0, -120(%edx) -L(aligned_16_104bytes): - movdqa %xmm0, -104(%edx) -L(aligned_16_88bytes): - movdqa %xmm0, -88(%edx) -L(aligned_16_72bytes): - movdqa %xmm0, -72(%edx) -L(aligned_16_56bytes): - movdqa %xmm0, -56(%edx) -L(aligned_16_40bytes): - movdqa %xmm0, -40(%edx) -L(aligned_16_24bytes): - movdqa %xmm0, -24(%edx) -L(aligned_16_8bytes): - movq %xmm0, -8(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_121bytes): - movdqa %xmm0, -121(%edx) -L(aligned_16_105bytes): - movdqa %xmm0, -105(%edx) -L(aligned_16_89bytes): - movdqa %xmm0, -89(%edx) -L(aligned_16_73bytes): - movdqa %xmm0, -73(%edx) -L(aligned_16_57bytes): - movdqa %xmm0, -57(%edx) -L(aligned_16_41bytes): - movdqa %xmm0, -41(%edx) -L(aligned_16_25bytes): - movdqa %xmm0, -25(%edx) -L(aligned_16_9bytes): - movq %xmm0, -9(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_122bytes): - movdqa %xmm0, -122(%edx) -L(aligned_16_106bytes): - movdqa %xmm0, -106(%edx) -L(aligned_16_90bytes): - movdqa %xmm0, -90(%edx) -L(aligned_16_74bytes): - movdqa %xmm0, -74(%edx) -L(aligned_16_58bytes): - movdqa %xmm0, -58(%edx) -L(aligned_16_42bytes): - movdqa %xmm0, -42(%edx) -L(aligned_16_26bytes): - movdqa %xmm0, -26(%edx) -L(aligned_16_10bytes): - movq %xmm0, -10(%edx) - movw %ax, -2(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_123bytes): - movdqa %xmm0, -123(%edx) -L(aligned_16_107bytes): - movdqa %xmm0, -107(%edx) -L(aligned_16_91bytes): - movdqa %xmm0, -91(%edx) -L(aligned_16_75bytes): - movdqa %xmm0, -75(%edx) -L(aligned_16_59bytes): - movdqa %xmm0, -59(%edx) -L(aligned_16_43bytes): - movdqa %xmm0, -43(%edx) -L(aligned_16_27bytes): - movdqa %xmm0, -27(%edx) -L(aligned_16_11bytes): - movq %xmm0, -11(%edx) - movw %ax, -3(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_124bytes): - movdqa %xmm0, -124(%edx) -L(aligned_16_108bytes): - movdqa %xmm0, -108(%edx) -L(aligned_16_92bytes): - movdqa %xmm0, -92(%edx) -L(aligned_16_76bytes): - movdqa %xmm0, -76(%edx) -L(aligned_16_60bytes): - movdqa %xmm0, -60(%edx) -L(aligned_16_44bytes): - movdqa %xmm0, -44(%edx) -L(aligned_16_28bytes): - movdqa %xmm0, -28(%edx) -L(aligned_16_12bytes): - movq %xmm0, -12(%edx) - movl %eax, -4(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_125bytes): - movdqa %xmm0, -125(%edx) -L(aligned_16_109bytes): - movdqa %xmm0, -109(%edx) -L(aligned_16_93bytes): - movdqa %xmm0, -93(%edx) -L(aligned_16_77bytes): - movdqa %xmm0, -77(%edx) -L(aligned_16_61bytes): - movdqa %xmm0, -61(%edx) -L(aligned_16_45bytes): - movdqa %xmm0, -45(%edx) -L(aligned_16_29bytes): - movdqa %xmm0, -29(%edx) -L(aligned_16_13bytes): - movq %xmm0, -13(%edx) - movl %eax, -5(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_126bytes): - movdqa %xmm0, -126(%edx) -L(aligned_16_110bytes): - movdqa %xmm0, -110(%edx) -L(aligned_16_94bytes): - movdqa %xmm0, -94(%edx) -L(aligned_16_78bytes): - movdqa %xmm0, -78(%edx) -L(aligned_16_62bytes): - movdqa %xmm0, -62(%edx) -L(aligned_16_46bytes): - movdqa %xmm0, -46(%edx) -L(aligned_16_30bytes): - movdqa %xmm0, -30(%edx) -L(aligned_16_14bytes): - movq %xmm0, -14(%edx) - movl %eax, -6(%edx) - movw %ax, -2(%edx) - SETRTNVAL - RETURN - - ALIGN (4) -L(aligned_16_127bytes): - movdqa %xmm0, -127(%edx) -L(aligned_16_111bytes): - movdqa %xmm0, -111(%edx) -L(aligned_16_95bytes): - movdqa %xmm0, -95(%edx) -L(aligned_16_79bytes): - movdqa %xmm0, -79(%edx) -L(aligned_16_63bytes): - movdqa %xmm0, -63(%edx) -L(aligned_16_47bytes): - movdqa %xmm0, -47(%edx) -L(aligned_16_31bytes): - movdqa %xmm0, -31(%edx) -L(aligned_16_15bytes): - movq %xmm0, -15(%edx) - movl %eax, -7(%edx) - movw %ax, -3(%edx) - movb %al, -1(%edx) - SETRTNVAL - RETURN_END - -END (__memset_sse2) - -#endif diff --git a/sysdeps/i386/i686/multiarch/memset.S b/sysdeps/i386/i686/multiarch/memset.S deleted file mode 100644 index f601663a9f..0000000000 --- a/sysdeps/i386/i686/multiarch/memset.S +++ /dev/null @@ -1,75 +0,0 @@ -/* Multiple versions of memset - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib. */ -#if IS_IN (libc) - .text -ENTRY(memset) - .type memset, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__memset_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__memset_sse2) - HAS_ARCH_FEATURE (Fast_Rep_String) - jz 2f - LOAD_FUNC_GOT_EAX (__memset_sse2_rep) -2: ret -END(memset) - -# undef ENTRY -# define ENTRY(name) \ - .type __memset_ia32, @function; \ - .globl __memset_ia32; \ - .p2align 4; \ - __memset_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __memset_ia32, .-__memset_ia32 - -# undef ENTRY_CHK -# define ENTRY_CHK(name) \ - .type __memset_chk_ia32, @function; \ - .globl __memset_chk_ia32; \ - .p2align 4; \ - __memset_chk_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END_CHK -# define END_CHK(name) \ - cfi_endproc; .size __memset_chk_ia32, .-__memset_chk_ia32 - -# ifdef SHARED -# undef libc_hidden_builtin_def -/* IFUNC doesn't work with the hidden functions in shared library since - they will be called without setting up EBX needed for PLT which is - used by IFUNC. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_memset; __GI_memset = __memset_ia32 -# endif - -# undef strong_alias -# define strong_alias(original, alias) -#endif - -#include "../memset.S" diff --git a/sysdeps/i386/i686/multiarch/memset_chk.S b/sysdeps/i386/i686/multiarch/memset_chk.S deleted file mode 100644 index 573cf4208a..0000000000 --- a/sysdeps/i386/i686/multiarch/memset_chk.S +++ /dev/null @@ -1,82 +0,0 @@ -/* Multiple versions of __memset_chk - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib. */ -#if IS_IN (libc) - .text -ENTRY(__memset_chk) - .type __memset_chk, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__memset_chk_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__memset_chk_sse2) - HAS_ARCH_FEATURE (Fast_Rep_String) - jz 2f - LOAD_FUNC_GOT_EAX (__memset_chk_sse2_rep) -2: ret -END(__memset_chk) - -# ifdef SHARED -strong_alias (__memset_chk, __memset_zero_constant_len_parameter) - .section .gnu.warning.__memset_zero_constant_len_parameter - .string "memset used with constant zero length parameter; this could be due to transposed parameters" -# else - .text - .type __memset_chk_sse2, @function - .p2align 4; -__memset_chk_sse2: - cfi_startproc - CALL_MCOUNT - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb __chk_fail - jmp __memset_sse2 - cfi_endproc - .size __memset_chk_sse2, .-__memset_chk_sse2 - - .type __memset_chk_sse2_rep, @function - .p2align 4; -__memset_chk_sse2_rep: - cfi_startproc - CALL_MCOUNT - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb __chk_fail - jmp __memset_sse2_rep - cfi_endproc - .size __memset_chk_sse2_rep, .-__memset_chk_sse2_rep - - .type __memset_chk_ia32, @function - .p2align 4; -__memset_chk_ia32: - cfi_startproc - CALL_MCOUNT - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb __chk_fail - jmp __memset_ia32 - cfi_endproc - .size __memset_chk_ia32, .-__memset_chk_ia32 -# endif -#endif diff --git a/sysdeps/i386/i686/multiarch/rawmemchr-sse2-bsf.S b/sysdeps/i386/i686/multiarch/rawmemchr-sse2-bsf.S deleted file mode 100644 index 88c0e5776c..0000000000 --- a/sysdeps/i386/i686/multiarch/rawmemchr-sse2-bsf.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_RAWMEMCHR -#define MEMCHR __rawmemchr_sse2_bsf -#include "memchr-sse2-bsf.S" diff --git a/sysdeps/i386/i686/multiarch/rawmemchr-sse2.S b/sysdeps/i386/i686/multiarch/rawmemchr-sse2.S deleted file mode 100644 index 038c74896b..0000000000 --- a/sysdeps/i386/i686/multiarch/rawmemchr-sse2.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_RAWMEMCHR -#define MEMCHR __rawmemchr_sse2 -#include "memchr-sse2.S" diff --git a/sysdeps/i386/i686/multiarch/rawmemchr.S b/sysdeps/i386/i686/multiarch/rawmemchr.S deleted file mode 100644 index 0a41d63ee8..0000000000 --- a/sysdeps/i386/i686/multiarch/rawmemchr.S +++ /dev/null @@ -1,65 +0,0 @@ -/* Multiple versions of rawmemchr - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if IS_IN (libc) - .text -ENTRY(__rawmemchr) - .type __rawmemchr, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - HAS_CPU_FEATURE (SSE2) - jz 2f - HAS_ARCH_FEATURE (Slow_BSF) - jz 3f - - LOAD_FUNC_GOT_EAX (__rawmemchr_sse2) - ret - -2: LOAD_FUNC_GOT_EAX (__rawmemchr_ia32) - ret - -3: LOAD_FUNC_GOT_EAX (__rawmemchr_sse2_bsf) - ret -END(__rawmemchr) - -weak_alias(__rawmemchr, rawmemchr) - -# undef ENTRY -# define ENTRY(name) \ - .type __rawmemchr_ia32, @function; \ - .globl __rawmemchr_ia32; \ - .p2align 4; \ - __rawmemchr_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __rawmemchr_ia32, .-__rawmemchr_ia32 - -# undef libc_hidden_def -/* IFUNC doesn't work with the hidden functions in shared library since - they will be called without setting up EBX needed for PLT which is - used by IFUNC. */ -# define libc_hidden_def(name) \ - .globl __GI___rawmemchr; __GI___rawmemchr = __rawmemchr_ia32 - -#endif -#include "../../rawmemchr.S" diff --git a/sysdeps/i386/i686/multiarch/rtld-strnlen.c b/sysdeps/i386/i686/multiarch/rtld-strnlen.c deleted file mode 100644 index 1aa5440644..0000000000 --- a/sysdeps/i386/i686/multiarch/rtld-strnlen.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/i386/i686/multiarch/s_fma-fma.c b/sysdeps/i386/i686/multiarch/s_fma-fma.c deleted file mode 100644 index 2e9619f97c..0000000000 --- a/sysdeps/i386/i686/multiarch/s_fma-fma.c +++ /dev/null @@ -1,27 +0,0 @@ -/* FMA version of fma. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -double -__fma_fma (double x, double y, double z) -{ - asm ("vfmadd213sd %3, %2, %0" : "=x" (x) : "0" (x), "x" (y), "xm" (z)); - return x; -} diff --git a/sysdeps/i386/i686/multiarch/s_fma.c b/sysdeps/i386/i686/multiarch/s_fma.c deleted file mode 100644 index 411ebb2ba9..0000000000 --- a/sysdeps/i386/i686/multiarch/s_fma.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Multiple versions of fma. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include -#include - -extern double __fma_ia32 (double x, double y, double z) attribute_hidden; -extern double __fma_fma (double x, double y, double z) attribute_hidden; - -libm_ifunc (__fma, - HAS_ARCH_FEATURE (FMA_Usable) ? __fma_fma : __fma_ia32); -weak_alias (__fma, fma) - -#define __fma __fma_ia32 - -#include diff --git a/sysdeps/i386/i686/multiarch/s_fmaf-fma.c b/sysdeps/i386/i686/multiarch/s_fmaf-fma.c deleted file mode 100644 index ee57abfda2..0000000000 --- a/sysdeps/i386/i686/multiarch/s_fmaf-fma.c +++ /dev/null @@ -1,27 +0,0 @@ -/* FMA version of fmaf. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -float -__fmaf_fma (float x, float y, float z) -{ - asm ("vfmadd213ss %3, %2, %0" : "=x" (x) : "0" (x), "x" (y), "xm" (z)); - return x; -} diff --git a/sysdeps/i386/i686/multiarch/s_fmaf.c b/sysdeps/i386/i686/multiarch/s_fmaf.c deleted file mode 100644 index 00b0fbcfc5..0000000000 --- a/sysdeps/i386/i686/multiarch/s_fmaf.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Multiple versions of fmaf. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include -#include - -extern float __fmaf_ia32 (float x, float y, float z) attribute_hidden; -extern float __fmaf_fma (float x, float y, float z) attribute_hidden; - -libm_ifunc (__fmaf, - HAS_ARCH_FEATURE (FMA_Usable) ? __fmaf_fma : __fmaf_ia32); -weak_alias (__fmaf, fmaf) - -#define __fmaf __fmaf_ia32 - -#include diff --git a/sysdeps/i386/i686/multiarch/sched_cpucount.c b/sysdeps/i386/i686/multiarch/sched_cpucount.c deleted file mode 100644 index 7db31b02f8..0000000000 --- a/sysdeps/i386/i686/multiarch/sched_cpucount.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/i386/i686/multiarch/stpcpy-sse2.S b/sysdeps/i386/i686/multiarch/stpcpy-sse2.S deleted file mode 100644 index 46ca1b3074..0000000000 --- a/sysdeps/i386/i686/multiarch/stpcpy-sse2.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_STPCPY -#define STRCPY __stpcpy_sse2 -#include "strcpy-sse2.S" diff --git a/sysdeps/i386/i686/multiarch/stpcpy-ssse3.S b/sysdeps/i386/i686/multiarch/stpcpy-ssse3.S deleted file mode 100644 index d971c2da38..0000000000 --- a/sysdeps/i386/i686/multiarch/stpcpy-ssse3.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_STPCPY -#define STRCPY __stpcpy_ssse3 -#include "strcpy-ssse3.S" diff --git a/sysdeps/i386/i686/multiarch/stpcpy.S b/sysdeps/i386/i686/multiarch/stpcpy.S deleted file mode 100644 index ee81ab6ae3..0000000000 --- a/sysdeps/i386/i686/multiarch/stpcpy.S +++ /dev/null @@ -1,9 +0,0 @@ -/* Multiple versions of stpcpy - All versions must be listed in ifunc-impl-list.c. */ -#define USE_AS_STPCPY -#define STRCPY __stpcpy -#include "strcpy.S" - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/i386/i686/multiarch/stpncpy-sse2.S b/sysdeps/i386/i686/multiarch/stpncpy-sse2.S deleted file mode 100644 index 37a703cb76..0000000000 --- a/sysdeps/i386/i686/multiarch/stpncpy-sse2.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_STPCPY -#define USE_AS_STRNCPY -#define STRCPY __stpncpy_sse2 -#include "strcpy-sse2.S" diff --git a/sysdeps/i386/i686/multiarch/stpncpy-ssse3.S b/sysdeps/i386/i686/multiarch/stpncpy-ssse3.S deleted file mode 100644 index 14ed16f6b5..0000000000 --- a/sysdeps/i386/i686/multiarch/stpncpy-ssse3.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_STPCPY -#define USE_AS_STRNCPY -#define STRCPY __stpncpy_ssse3 -#include "strcpy-ssse3.S" diff --git a/sysdeps/i386/i686/multiarch/stpncpy.S b/sysdeps/i386/i686/multiarch/stpncpy.S deleted file mode 100644 index 2698ca6a8c..0000000000 --- a/sysdeps/i386/i686/multiarch/stpncpy.S +++ /dev/null @@ -1,8 +0,0 @@ -/* Multiple versions of stpncpy - All versions must be listed in ifunc-impl-list.c. */ -#define STRCPY __stpncpy -#define USE_AS_STPCPY -#define USE_AS_STRNCPY -#include "strcpy.S" - -weak_alias (__stpncpy, stpncpy) diff --git a/sysdeps/i386/i686/multiarch/strcasecmp-c.c b/sysdeps/i386/i686/multiarch/strcasecmp-c.c deleted file mode 100644 index 753c6ec84a..0000000000 --- a/sysdeps/i386/i686/multiarch/strcasecmp-c.c +++ /dev/null @@ -1,12 +0,0 @@ -#include - -extern __typeof (strcasecmp) __strcasecmp_nonascii; - -#define __strcasecmp __strcasecmp_nonascii -#include - -strong_alias (__strcasecmp_nonascii, __strcasecmp_ia32) - -/* The needs of strcasecmp in libc are minimal, no need to go through - the IFUNC. */ -strong_alias (__strcasecmp_nonascii, __GI___strcasecmp) diff --git a/sysdeps/i386/i686/multiarch/strcasecmp.S b/sysdeps/i386/i686/multiarch/strcasecmp.S deleted file mode 100644 index ec59276408..0000000000 --- a/sysdeps/i386/i686/multiarch/strcasecmp.S +++ /dev/null @@ -1,39 +0,0 @@ -/* Entry point for multi-version x86 strcasecmp. - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY(__strcasecmp) - .type __strcasecmp, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__strcasecmp_ia32) - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (__strcasecmp_ssse3) - HAS_CPU_FEATURE (SSE4_2) - jz 2f - HAS_ARCH_FEATURE (Slow_SSE4_2) - jnz 2f - LOAD_FUNC_GOT_EAX (__strcasecmp_sse4_2) -2: ret -END(__strcasecmp) - -weak_alias (__strcasecmp, strcasecmp) diff --git a/sysdeps/i386/i686/multiarch/strcasecmp_l-c.c b/sysdeps/i386/i686/multiarch/strcasecmp_l-c.c deleted file mode 100644 index d4fcd2b4a1..0000000000 --- a/sysdeps/i386/i686/multiarch/strcasecmp_l-c.c +++ /dev/null @@ -1,13 +0,0 @@ -#include - -extern __typeof (strcasecmp_l) __strcasecmp_l_nonascii; - -#define __strcasecmp_l __strcasecmp_l_nonascii -#define USE_IN_EXTENDED_LOCALE_MODEL 1 -#include - -strong_alias (__strcasecmp_l_nonascii, __strcasecmp_l_ia32) - -/* The needs of strcasecmp in libc are minimal, no need to go through - the IFUNC. */ -strong_alias (__strcasecmp_l_nonascii, __GI___strcasecmp_l) diff --git a/sysdeps/i386/i686/multiarch/strcasecmp_l-sse4.S b/sysdeps/i386/i686/multiarch/strcasecmp_l-sse4.S deleted file mode 100644 index 411d4153f2..0000000000 --- a/sysdeps/i386/i686/multiarch/strcasecmp_l-sse4.S +++ /dev/null @@ -1,2 +0,0 @@ -#define USE_AS_STRCASECMP_L 1 -#include "strcmp-sse4.S" diff --git a/sysdeps/i386/i686/multiarch/strcasecmp_l-ssse3.S b/sysdeps/i386/i686/multiarch/strcasecmp_l-ssse3.S deleted file mode 100644 index a22b93c518..0000000000 --- a/sysdeps/i386/i686/multiarch/strcasecmp_l-ssse3.S +++ /dev/null @@ -1,2 +0,0 @@ -#define USE_AS_STRCASECMP_L 1 -#include "strcmp-ssse3.S" diff --git a/sysdeps/i386/i686/multiarch/strcasecmp_l.S b/sysdeps/i386/i686/multiarch/strcasecmp_l.S deleted file mode 100644 index 711c09b0dc..0000000000 --- a/sysdeps/i386/i686/multiarch/strcasecmp_l.S +++ /dev/null @@ -1,7 +0,0 @@ -/* Multiple versions of strcasecmp_l - All versions must be listed in ifunc-impl-list.c. */ -#define STRCMP __strcasecmp_l -#define USE_AS_STRCASECMP_L -#include "strcmp.S" - -weak_alias (__strcasecmp_l, strcasecmp_l) diff --git a/sysdeps/i386/i686/multiarch/strcat-sse2.S b/sysdeps/i386/i686/multiarch/strcat-sse2.S deleted file mode 100644 index 6359c7330c..0000000000 --- a/sysdeps/i386/i686/multiarch/strcat-sse2.S +++ /dev/null @@ -1,1245 +0,0 @@ -/* strcat with SSE2 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#if IS_IN (libc) - -# include - - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# ifdef SHARED -# define JMPTBL(I, B) I - B - -/* Load an entry in a jump table into ECX and branch to it. TABLE is a - jump table with relative offsets. INDEX is a register contains the - index into the jump table. SCALE is the scale of INDEX. */ - -# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ - /* We first load PC into ECX. */ \ - SETUP_PIC_REG(cx); \ - /* Get the address of the jump table. */ \ - addl $(TABLE - .), %ecx; \ - /* Get the entry and convert the relative offset to the \ - absolute address. */ \ - addl (%ecx,INDEX,SCALE), %ecx; \ - /* We loaded the jump table and adjusted ECX. Go. */ \ - jmp *%ecx -# else -# define JMPTBL(I, B) I - -/* Branch to an entry in a jump table. TABLE is a jump table with - absolute offsets. INDEX is a register contains the index into the - jump table. SCALE is the scale of INDEX. */ - -# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ - jmp *TABLE(,INDEX,SCALE) -# endif - -# ifndef STRCAT -# define STRCAT __strcat_sse2 -# endif - -# define PARMS 4 -# define STR1 PARMS+4 -# define STR2 STR1+4 - -# ifdef USE_AS_STRNCAT -# define LEN STR2+8 -# define STR3 STR1+4 -# else -# define STR3 STR1 -# endif - -# define USE_AS_STRCAT -# ifdef USE_AS_STRNCAT -# define RETURN POP(%ebx); POP(%esi); ret; CFI_PUSH(%ebx); CFI_PUSH(%esi); -# else -# define RETURN POP(%esi); ret; CFI_PUSH(%esi); -# endif - -.text -ENTRY (STRCAT) - PUSH (%esi) - mov STR1(%esp), %eax - mov STR2(%esp), %esi -# ifdef USE_AS_STRNCAT - PUSH (%ebx) - movl LEN(%esp), %ebx - test %ebx, %ebx - jz L(ExitZero) -# endif - cmpb $0, (%esi) - mov %esi, %ecx - mov %eax, %edx - jz L(ExitZero) - - and $63, %ecx - and $63, %edx - cmp $32, %ecx - ja L(StrlenCore7_1) - cmp $48, %edx - ja L(alignment_prolog) - - pxor %xmm0, %xmm0 - pxor %xmm4, %xmm4 - pxor %xmm7, %xmm7 - movdqu (%eax), %xmm1 - movdqu (%esi), %xmm5 - pcmpeqb %xmm1, %xmm0 - movdqu 16(%esi), %xmm6 - pmovmskb %xmm0, %ecx - pcmpeqb %xmm5, %xmm4 - pcmpeqb %xmm6, %xmm7 - test %ecx, %ecx - jnz L(exit_less16_) - mov %eax, %ecx - and $-16, %eax - jmp L(loop_prolog) - -L(alignment_prolog): - pxor %xmm0, %xmm0 - pxor %xmm4, %xmm4 - mov %edx, %ecx - pxor %xmm7, %xmm7 - and $15, %ecx - and $-16, %eax - pcmpeqb (%eax), %xmm0 - movdqu (%esi), %xmm5 - movdqu 16(%esi), %xmm6 - pmovmskb %xmm0, %edx - pcmpeqb %xmm5, %xmm4 - shr %cl, %edx - pcmpeqb %xmm6, %xmm7 - test %edx, %edx - jnz L(exit_less16) - add %eax, %ecx - - pxor %xmm0, %xmm0 -L(loop_prolog): - pxor %xmm1, %xmm1 - pxor %xmm2, %xmm2 - pxor %xmm3, %xmm3 - .p2align 4 -L(align16_loop): - pcmpeqb 16(%eax), %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - jnz L(exit16) - - pcmpeqb 32(%eax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - jnz L(exit32) - - pcmpeqb 48(%eax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - jnz L(exit48) - - pcmpeqb 64(%eax), %xmm3 - pmovmskb %xmm3, %edx - lea 64(%eax), %eax - test %edx, %edx - jz L(align16_loop) - bsf %edx, %edx - add %edx, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit16): - bsf %edx, %edx - lea 16(%eax, %edx), %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit32): - bsf %edx, %edx - lea 32(%eax, %edx), %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit48): - bsf %edx, %edx - lea 48(%eax, %edx), %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_less16): - bsf %edx, %edx - add %ecx, %eax - add %edx, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_less16_): - bsf %ecx, %ecx - add %ecx, %eax - - .p2align 4 -L(StartStrcpyPart): - pmovmskb %xmm4, %edx -# ifdef USE_AS_STRNCAT - cmp $16, %ebx - jbe L(CopyFrom1To16BytesTail1Case2OrCase3) -# endif - test %edx, %edx - jnz L(CopyFrom1To16BytesTail1) - - movdqu %xmm5, (%eax) - pmovmskb %xmm7, %edx -# ifdef USE_AS_STRNCAT - cmp $32, %ebx - jbe L(CopyFrom1To32Bytes1Case2OrCase3) -# endif - test %edx, %edx - jnz L(CopyFrom1To32Bytes1) - - mov %esi, %ecx - and $-16, %esi - and $15, %ecx - pxor %xmm0, %xmm0 -# ifdef USE_AS_STRNCAT - add %ecx, %ebx - sbb %edx, %edx - or %edx, %ebx -# endif - sub %ecx, %eax - jmp L(Unalign16Both) - -L(StrlenCore7_1): - mov %eax, %ecx - pxor %xmm0, %xmm0 - and $15, %ecx - and $-16, %eax - pcmpeqb (%eax), %xmm0 - pmovmskb %xmm0, %edx - shr %cl, %edx - test %edx, %edx - jnz L(exit_less16_1) - add %eax, %ecx - - pxor %xmm0, %xmm0 - pxor %xmm1, %xmm1 - pxor %xmm2, %xmm2 - pxor %xmm3, %xmm3 - - .p2align 4 -L(align16_loop_1): - pcmpeqb 16(%eax), %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - jnz L(exit16_1) - - pcmpeqb 32(%eax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - jnz L(exit32_1) - - pcmpeqb 48(%eax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - jnz L(exit48_1) - - pcmpeqb 64(%eax), %xmm3 - pmovmskb %xmm3, %edx - lea 64(%eax), %eax - test %edx, %edx - jz L(align16_loop_1) - bsf %edx, %edx - add %edx, %eax - jmp L(StartStrcpyPart_1) - - .p2align 4 -L(exit16_1): - bsf %edx, %edx - lea 16(%eax, %edx), %eax - jmp L(StartStrcpyPart_1) - - .p2align 4 -L(exit32_1): - bsf %edx, %edx - lea 32(%eax, %edx), %eax - jmp L(StartStrcpyPart_1) - - .p2align 4 -L(exit48_1): - bsf %edx, %edx - lea 48(%eax, %edx), %eax - jmp L(StartStrcpyPart_1) - - .p2align 4 -L(exit_less16_1): - bsf %edx, %edx - add %ecx, %eax - add %edx, %eax - - .p2align 4 -L(StartStrcpyPart_1): - mov %esi, %ecx - and $15, %ecx - and $-16, %esi - pxor %xmm0, %xmm0 - pxor %xmm1, %xmm1 - -# ifdef USE_AS_STRNCAT - cmp $48, %ebx - ja L(BigN) -# endif - pcmpeqb (%esi), %xmm1 -# ifdef USE_AS_STRNCAT - add %ecx, %ebx -# endif - pmovmskb %xmm1, %edx - shr %cl, %edx -# ifdef USE_AS_STRNCAT - cmp $16, %ebx - jbe L(CopyFrom1To16BytesTailCase2OrCase3) -# endif - test %edx, %edx - jnz L(CopyFrom1To16BytesTail) - - pcmpeqb 16(%esi), %xmm0 - pmovmskb %xmm0, %edx -# ifdef USE_AS_STRNCAT - cmp $32, %ebx - jbe L(CopyFrom1To32BytesCase2OrCase3) -# endif - test %edx, %edx - jnz L(CopyFrom1To32Bytes) - - movdqu (%esi, %ecx), %xmm1 /* copy 16 bytes */ - movdqu %xmm1, (%eax) - sub %ecx, %eax - - .p2align 4 -L(Unalign16Both): - mov $16, %ecx - movdqa (%esi, %ecx), %xmm1 - movaps 16(%esi, %ecx), %xmm2 - movdqu %xmm1, (%eax, %ecx) - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %edx - add $16, %ecx -# ifdef USE_AS_STRNCAT - sub $48, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %edx, %edx - jnz L(CopyFrom1To16Bytes) -L(Unalign16BothBigN): - movaps 16(%esi, %ecx), %xmm3 - movdqu %xmm2, (%eax, %ecx) - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %edx - add $16, %ecx -# ifdef USE_AS_STRNCAT - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %edx, %edx - jnz L(CopyFrom1To16Bytes) - - movaps 16(%esi, %ecx), %xmm4 - movdqu %xmm3, (%eax, %ecx) - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm0, %edx - add $16, %ecx -# ifdef USE_AS_STRNCAT - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %edx, %edx - jnz L(CopyFrom1To16Bytes) - - movaps 16(%esi, %ecx), %xmm1 - movdqu %xmm4, (%eax, %ecx) - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %edx - add $16, %ecx -# ifdef USE_AS_STRNCAT - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %edx, %edx - jnz L(CopyFrom1To16Bytes) - - movaps 16(%esi, %ecx), %xmm2 - movdqu %xmm1, (%eax, %ecx) - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %edx - add $16, %ecx -# ifdef USE_AS_STRNCAT - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %edx, %edx - jnz L(CopyFrom1To16Bytes) - - movaps 16(%esi, %ecx), %xmm3 - movdqu %xmm2, (%eax, %ecx) - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %edx - add $16, %ecx -# ifdef USE_AS_STRNCAT - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %edx, %edx - jnz L(CopyFrom1To16Bytes) - - movdqu %xmm3, (%eax, %ecx) - mov %esi, %edx - lea 16(%esi, %ecx), %esi - and $-0x40, %esi - sub %esi, %edx - sub %edx, %eax -# ifdef USE_AS_STRNCAT - lea 128(%ebx, %edx), %ebx -# endif - movaps (%esi), %xmm2 - movaps %xmm2, %xmm4 - movaps 16(%esi), %xmm5 - movaps 32(%esi), %xmm3 - movaps %xmm3, %xmm6 - movaps 48(%esi), %xmm7 - pminub %xmm5, %xmm2 - pminub %xmm7, %xmm3 - pminub %xmm2, %xmm3 - pcmpeqb %xmm0, %xmm3 - pmovmskb %xmm3, %edx -# ifdef USE_AS_STRNCAT - sub $64, %ebx - jbe L(UnalignedLeaveCase2OrCase3) -# endif - test %edx, %edx - jnz L(Unaligned64Leave) - - .p2align 4 -L(Unaligned64Loop_start): - add $64, %eax - add $64, %esi - movdqu %xmm4, -64(%eax) - movaps (%esi), %xmm2 - movdqa %xmm2, %xmm4 - movdqu %xmm5, -48(%eax) - movaps 16(%esi), %xmm5 - pminub %xmm5, %xmm2 - movaps 32(%esi), %xmm3 - movdqu %xmm6, -32(%eax) - movaps %xmm3, %xmm6 - movdqu %xmm7, -16(%eax) - movaps 48(%esi), %xmm7 - pminub %xmm7, %xmm3 - pminub %xmm2, %xmm3 - pcmpeqb %xmm0, %xmm3 - pmovmskb %xmm3, %edx -# ifdef USE_AS_STRNCAT - sub $64, %ebx - jbe L(UnalignedLeaveCase2OrCase3) -# endif - test %edx, %edx - jz L(Unaligned64Loop_start) - -L(Unaligned64Leave): - pxor %xmm1, %xmm1 - - pcmpeqb %xmm4, %xmm0 - pcmpeqb %xmm5, %xmm1 - pmovmskb %xmm0, %edx - pmovmskb %xmm1, %ecx - test %edx, %edx - jnz L(CopyFrom1To16BytesUnaligned_0) - test %ecx, %ecx - jnz L(CopyFrom1To16BytesUnaligned_16) - - pcmpeqb %xmm6, %xmm0 - pcmpeqb %xmm7, %xmm1 - pmovmskb %xmm0, %edx - pmovmskb %xmm1, %ecx - test %edx, %edx - jnz L(CopyFrom1To16BytesUnaligned_32) - - bsf %ecx, %edx - movdqu %xmm4, (%eax) - movdqu %xmm5, 16(%eax) - movdqu %xmm6, 32(%eax) - add $48, %esi - add $48, %eax - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) - -# ifdef USE_AS_STRNCAT - .p2align 4 -L(BigN): - pcmpeqb (%esi), %xmm1 - pmovmskb %xmm1, %edx - shr %cl, %edx - test %edx, %edx - jnz L(CopyFrom1To16BytesTail) - - pcmpeqb 16(%esi), %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - jnz L(CopyFrom1To32Bytes) - - movdqu (%esi, %ecx), %xmm1 /* copy 16 bytes */ - movdqu %xmm1, (%eax) - sub %ecx, %eax - sub $48, %ebx - add %ecx, %ebx - - mov $16, %ecx - movdqa (%esi, %ecx), %xmm1 - movaps 16(%esi, %ecx), %xmm2 - movdqu %xmm1, (%eax, %ecx) - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %edx - add $16, %ecx - test %edx, %edx - jnz L(CopyFrom1To16Bytes) - jmp L(Unalign16BothBigN) -# endif - -/*------------end of main part-------------------------------*/ - -/* Case1 */ - .p2align 4 -L(CopyFrom1To16Bytes): - add %ecx, %eax - add %ecx, %esi - bsf %edx, %edx - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) - - .p2align 4 -L(CopyFrom1To16BytesTail): - add %ecx, %esi - bsf %edx, %edx - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) - - .p2align 4 -L(CopyFrom1To32Bytes1): - add $16, %esi - add $16, %eax -L(CopyFrom1To16BytesTail1): - bsf %edx, %edx - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) - - .p2align 4 -L(CopyFrom1To32Bytes): - bsf %edx, %edx - add %ecx, %esi - add $16, %edx - sub %ecx, %edx - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) - - .p2align 4 -L(CopyFrom1To16BytesUnaligned_0): - bsf %edx, %edx - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) - - .p2align 4 -L(CopyFrom1To16BytesUnaligned_16): - bsf %ecx, %edx - movdqu %xmm4, (%eax) - add $16, %esi - add $16, %eax - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) - - .p2align 4 -L(CopyFrom1To16BytesUnaligned_32): - bsf %edx, %edx - movdqu %xmm4, (%eax) - movdqu %xmm5, 16(%eax) - add $32, %esi - add $32, %eax - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) - -# ifdef USE_AS_STRNCAT - - .p2align 4 -L(CopyFrom1To16BytesExit): - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) - -/* Case2 */ - - .p2align 4 -L(CopyFrom1To16BytesCase2): - add $16, %ebx - add %ecx, %eax - add %ecx, %esi - bsf %edx, %edx - cmp %ebx, %edx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncatTable), %ebx, 4) - - .p2align 4 -L(CopyFrom1To32BytesCase2): - sub %ecx, %ebx - add %ecx, %esi - bsf %edx, %edx - add $16, %edx - sub %ecx, %edx - cmp %ebx, %edx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncatTable), %ebx, 4) - -L(CopyFrom1To16BytesTailCase2): - sub %ecx, %ebx - add %ecx, %esi - bsf %edx, %edx - cmp %ebx, %edx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncatTable), %ebx, 4) - -L(CopyFrom1To16BytesTail1Case2): - bsf %edx, %edx - cmp %ebx, %edx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncatTable), %ebx, 4) - -/* Case2 or Case3, Case3 */ - - .p2align 4 -L(CopyFrom1To16BytesCase2OrCase3): - test %edx, %edx - jnz L(CopyFrom1To16BytesCase2) -L(CopyFrom1To16BytesCase3): - add $16, %ebx - add %ecx, %eax - add %ecx, %esi - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncatTable), %ebx, 4) - - .p2align 4 -L(CopyFrom1To32BytesCase2OrCase3): - test %edx, %edx - jnz L(CopyFrom1To32BytesCase2) - sub %ecx, %ebx - add %ecx, %esi - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncatTable), %ebx, 4) - - .p2align 4 -L(CopyFrom1To16BytesTailCase2OrCase3): - test %edx, %edx - jnz L(CopyFrom1To16BytesTailCase2) - sub %ecx, %ebx - add %ecx, %esi - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncatTable), %ebx, 4) - - .p2align 4 -L(CopyFrom1To32Bytes1Case2OrCase3): - add $16, %eax - add $16, %esi - sub $16, %ebx -L(CopyFrom1To16BytesTail1Case2OrCase3): - test %edx, %edx - jnz L(CopyFrom1To16BytesTail1Case2) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncatTable), %ebx, 4) - -# endif - -# ifdef USE_AS_STRNCAT - .p2align 4 -L(StrncatExit0): - movb %bh, (%eax) - mov STR3(%esp), %eax - RETURN -# endif - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit1): - movb %bh, 1(%eax) -# endif -L(Exit1): -# ifdef USE_AS_STRNCAT - movb (%esi), %dh -# endif - movb %dh, (%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit2): - movb %bh, 2(%eax) -# endif -L(Exit2): - movw (%esi), %dx - movw %dx, (%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit3): - movb %bh, 3(%eax) -# endif -L(Exit3): - movw (%esi), %cx - movw %cx, (%eax) -# ifdef USE_AS_STRNCAT - movb 2(%esi), %dh -# endif - movb %dh, 2(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit4): - movb %bh, 4(%eax) -# endif -L(Exit4): - movl (%esi), %edx - movl %edx, (%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit5): - movb %bh, 5(%eax) -# endif -L(Exit5): - movl (%esi), %ecx -# ifdef USE_AS_STRNCAT - movb 4(%esi), %dh -# endif - movb %dh, 4(%eax) - movl %ecx, (%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit6): - movb %bh, 6(%eax) -# endif -L(Exit6): - movl (%esi), %ecx - movw 4(%esi), %dx - movl %ecx, (%eax) - movw %dx, 4(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit7): - movb %bh, 7(%eax) -# endif -L(Exit7): - movl (%esi), %ecx - movl 3(%esi), %edx - movl %ecx, (%eax) - movl %edx, 3(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit8): - movb %bh, 8(%eax) -# endif -L(Exit8): - movlpd (%esi), %xmm0 - movlpd %xmm0, (%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit9): - movb %bh, 9(%eax) -# endif -L(Exit9): - movlpd (%esi), %xmm0 -# ifdef USE_AS_STRNCAT - movb 8(%esi), %dh -# endif - movb %dh, 8(%eax) - movlpd %xmm0, (%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit10): - movb %bh, 10(%eax) -# endif -L(Exit10): - movlpd (%esi), %xmm0 - movw 8(%esi), %dx - movlpd %xmm0, (%eax) - movw %dx, 8(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit11): - movb %bh, 11(%eax) -# endif -L(Exit11): - movlpd (%esi), %xmm0 - movl 7(%esi), %edx - movlpd %xmm0, (%eax) - movl %edx, 7(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit12): - movb %bh, 12(%eax) -# endif -L(Exit12): - movlpd (%esi), %xmm0 - movl 8(%esi), %edx - movlpd %xmm0, (%eax) - movl %edx, 8(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit13): - movb %bh, 13(%eax) -# endif -L(Exit13): - movlpd (%esi), %xmm0 - movlpd 5(%esi), %xmm1 - movlpd %xmm0, (%eax) - movlpd %xmm1, 5(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit14): - movb %bh, 14(%eax) -# endif -L(Exit14): - movlpd (%esi), %xmm0 - movlpd 6(%esi), %xmm1 - movlpd %xmm0, (%eax) - movlpd %xmm1, 6(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit15): - movb %bh, 15(%eax) -# endif -L(Exit15): - movlpd (%esi), %xmm0 - movlpd 7(%esi), %xmm1 - movlpd %xmm0, (%eax) - movlpd %xmm1, 7(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit16): - movb %bh, 16(%eax) -# endif -L(Exit16): - movdqu (%esi), %xmm0 - movdqu %xmm0, (%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit17): - movb %bh, 17(%eax) -# endif -L(Exit17): - movdqu (%esi), %xmm0 -# ifdef USE_AS_STRNCAT - movb 16(%esi), %dh -# endif - movdqu %xmm0, (%eax) - movb %dh, 16(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit18): - movb %bh, 18(%eax) -# endif -L(Exit18): - movdqu (%esi), %xmm0 - movw 16(%esi), %cx - movdqu %xmm0, (%eax) - movw %cx, 16(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit19): - movb %bh, 19(%eax) -# endif -L(Exit19): - movdqu (%esi), %xmm0 - movl 15(%esi), %ecx - movdqu %xmm0, (%eax) - movl %ecx, 15(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit20): - movb %bh, 20(%eax) -# endif -L(Exit20): - movdqu (%esi), %xmm0 - movl 16(%esi), %ecx - movdqu %xmm0, (%eax) - movl %ecx, 16(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit21): - movb %bh, 21(%eax) -# endif -L(Exit21): - movdqu (%esi), %xmm0 - movl 16(%esi), %ecx -# ifdef USE_AS_STRNCAT - movb 20(%esi), %dh -# endif - movdqu %xmm0, (%eax) - movl %ecx, 16(%eax) - movb %dh, 20(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit22): - movb %bh, 22(%eax) -# endif -L(Exit22): - movdqu (%esi), %xmm0 - movlpd 14(%esi), %xmm3 - movdqu %xmm0, (%eax) - movlpd %xmm3, 14(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit23): - movb %bh, 23(%eax) -# endif -L(Exit23): - movdqu (%esi), %xmm0 - movlpd 15(%esi), %xmm3 - movdqu %xmm0, (%eax) - movlpd %xmm3, 15(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit24): - movb %bh, 24(%eax) -# endif -L(Exit24): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 - movdqu %xmm0, (%eax) - movlpd %xmm2, 16(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit25): - movb %bh, 25(%eax) -# endif -L(Exit25): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 -# ifdef USE_AS_STRNCAT - movb 24(%esi), %dh -# endif - movdqu %xmm0, (%eax) - movlpd %xmm2, 16(%eax) - movb %dh, 24(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit26): - movb %bh, 26(%eax) -# endif -L(Exit26): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 - movw 24(%esi), %cx - movdqu %xmm0, (%eax) - movlpd %xmm2, 16(%eax) - movw %cx, 24(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit27): - movb %bh, 27(%eax) -# endif -L(Exit27): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 - movl 23(%esi), %ecx - movdqu %xmm0, (%eax) - movlpd %xmm2, 16(%eax) - movl %ecx, 23(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit28): - movb %bh, 28(%eax) -# endif -L(Exit28): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 - movl 24(%esi), %ecx - movdqu %xmm0, (%eax) - movlpd %xmm2, 16(%eax) - movl %ecx, 24(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit29): - movb %bh, 29(%eax) -# endif -L(Exit29): - movdqu (%esi), %xmm0 - movdqu 13(%esi), %xmm2 - movdqu %xmm0, (%eax) - movdqu %xmm2, 13(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit30): - movb %bh, 30(%eax) -# endif -L(Exit30): - movdqu (%esi), %xmm0 - movdqu 14(%esi), %xmm2 - movdqu %xmm0, (%eax) - movdqu %xmm2, 14(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit31): - movb %bh, 31(%eax) -# endif -L(Exit31): - movdqu (%esi), %xmm0 - movdqu 15(%esi), %xmm2 - movdqu %xmm0, (%eax) - movdqu %xmm2, 15(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -# ifdef USE_AS_STRNCAT -L(StrncatExit32): - movb %bh, 32(%eax) -# endif -L(Exit32): - movdqu (%esi), %xmm0 - movdqu 16(%esi), %xmm2 - movdqu %xmm0, (%eax) - movdqu %xmm2, 16(%eax) - mov STR3(%esp), %eax - RETURN - -# ifdef USE_AS_STRNCAT - - .p2align 4 -L(UnalignedLeaveCase2OrCase3): - test %edx, %edx - jnz L(Unaligned64LeaveCase2) -L(Unaligned64LeaveCase3): - lea 64(%ebx), %ecx - and $-16, %ecx - add $48, %ebx - jl L(CopyFrom1To16BytesCase3) - movdqu %xmm4, (%eax) - sub $16, %ebx - jb L(CopyFrom1To16BytesCase3) - movdqu %xmm5, 16(%eax) - sub $16, %ebx - jb L(CopyFrom1To16BytesCase3) - movdqu %xmm6, 32(%eax) - sub $16, %ebx - jb L(CopyFrom1To16BytesCase3) - movdqu %xmm7, 48(%eax) - xor %bh, %bh - movb %bh, 64(%eax) - mov STR3(%esp), %eax - RETURN - - .p2align 4 -L(Unaligned64LeaveCase2): - xor %ecx, %ecx - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm0, %edx - add $48, %ebx - jle L(CopyFrom1To16BytesCase2OrCase3) - test %edx, %edx - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm5, %xmm0 - pmovmskb %xmm0, %edx - movdqu %xmm4, (%eax) - add $16, %ecx - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %edx, %edx - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm6, %xmm0 - pmovmskb %xmm0, %edx - movdqu %xmm5, 16(%eax) - add $16, %ecx - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %edx, %edx - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm7, %xmm0 - pmovmskb %xmm0, %edx - movdqu %xmm6, 32(%eax) - lea 16(%eax, %ecx), %eax - lea 16(%esi, %ecx), %esi - bsf %edx, %edx - cmp %ebx, %edx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncatTable), %ebx, 4) -# endif - .p2align 4 -L(ExitZero): - RETURN - -END (STRCAT) - - .p2align 4 - .section .rodata -L(ExitTable): - .int JMPTBL(L(Exit1), L(ExitTable)) - .int JMPTBL(L(Exit2), L(ExitTable)) - .int JMPTBL(L(Exit3), L(ExitTable)) - .int JMPTBL(L(Exit4), L(ExitTable)) - .int JMPTBL(L(Exit5), L(ExitTable)) - .int JMPTBL(L(Exit6), L(ExitTable)) - .int JMPTBL(L(Exit7), L(ExitTable)) - .int JMPTBL(L(Exit8), L(ExitTable)) - .int JMPTBL(L(Exit9), L(ExitTable)) - .int JMPTBL(L(Exit10), L(ExitTable)) - .int JMPTBL(L(Exit11), L(ExitTable)) - .int JMPTBL(L(Exit12), L(ExitTable)) - .int JMPTBL(L(Exit13), L(ExitTable)) - .int JMPTBL(L(Exit14), L(ExitTable)) - .int JMPTBL(L(Exit15), L(ExitTable)) - .int JMPTBL(L(Exit16), L(ExitTable)) - .int JMPTBL(L(Exit17), L(ExitTable)) - .int JMPTBL(L(Exit18), L(ExitTable)) - .int JMPTBL(L(Exit19), L(ExitTable)) - .int JMPTBL(L(Exit20), L(ExitTable)) - .int JMPTBL(L(Exit21), L(ExitTable)) - .int JMPTBL(L(Exit22), L(ExitTable)) - .int JMPTBL(L(Exit23), L(ExitTable)) - .int JMPTBL(L(Exit24), L(ExitTable)) - .int JMPTBL(L(Exit25), L(ExitTable)) - .int JMPTBL(L(Exit26), L(ExitTable)) - .int JMPTBL(L(Exit27), L(ExitTable)) - .int JMPTBL(L(Exit28), L(ExitTable)) - .int JMPTBL(L(Exit29), L(ExitTable)) - .int JMPTBL(L(Exit30), L(ExitTable)) - .int JMPTBL(L(Exit31), L(ExitTable)) - .int JMPTBL(L(Exit32), L(ExitTable)) -# ifdef USE_AS_STRNCAT -L(ExitStrncatTable): - .int JMPTBL(L(StrncatExit0), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit1), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit2), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit3), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit4), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit5), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit6), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit7), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit8), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit9), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit10), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit11), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit12), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit13), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit14), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit15), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit16), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit17), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit18), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit19), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit20), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit21), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit22), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit23), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit24), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit25), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit26), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit27), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit28), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit29), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit30), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit31), L(ExitStrncatTable)) - .int JMPTBL(L(StrncatExit32), L(ExitStrncatTable)) -# endif -#endif diff --git a/sysdeps/i386/i686/multiarch/strcat-ssse3.S b/sysdeps/i386/i686/multiarch/strcat-ssse3.S deleted file mode 100644 index 59ffbc60a5..0000000000 --- a/sysdeps/i386/i686/multiarch/strcat-ssse3.S +++ /dev/null @@ -1,572 +0,0 @@ -/* strcat with SSSE3 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#if IS_IN (libc) - -# include - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# ifndef STRCAT -# define STRCAT __strcat_ssse3 -# endif - -# define PARMS 4 -# define STR1 PARMS+4 -# define STR2 STR1+4 - -# ifdef USE_AS_STRNCAT -# define LEN STR2+8 -# endif - -# define USE_AS_STRCAT - -.text -ENTRY (STRCAT) - PUSH (%edi) - mov STR1(%esp), %edi - mov %edi, %edx - -# define RETURN jmp L(StartStrcpyPart) -# include "strlen-sse2.S" - -L(StartStrcpyPart): - mov STR2(%esp), %ecx - lea (%edi, %eax), %edx -# ifdef USE_AS_STRNCAT - PUSH (%ebx) - mov LEN(%esp), %ebx - test %ebx, %ebx - jz L(StrncatExit0) - cmp $8, %ebx - jbe L(StrncatExit8Bytes) -# endif - cmpb $0, (%ecx) - jz L(Exit1) - cmpb $0, 1(%ecx) - jz L(Exit2) - cmpb $0, 2(%ecx) - jz L(Exit3) - cmpb $0, 3(%ecx) - jz L(Exit4) - cmpb $0, 4(%ecx) - jz L(Exit5) - cmpb $0, 5(%ecx) - jz L(Exit6) - cmpb $0, 6(%ecx) - jz L(Exit7) - cmpb $0, 7(%ecx) - jz L(Exit8) - cmpb $0, 8(%ecx) - jz L(Exit9) -# ifdef USE_AS_STRNCAT - cmp $16, %ebx - jb L(StrncatExit15Bytes) -# endif - cmpb $0, 9(%ecx) - jz L(Exit10) - cmpb $0, 10(%ecx) - jz L(Exit11) - cmpb $0, 11(%ecx) - jz L(Exit12) - cmpb $0, 12(%ecx) - jz L(Exit13) - cmpb $0, 13(%ecx) - jz L(Exit14) - cmpb $0, 14(%ecx) - jz L(Exit15) - cmpb $0, 15(%ecx) - jz L(Exit16) -# ifdef USE_AS_STRNCAT - cmp $16, %ebx - je L(StrncatExit16) - -# define RETURN1 \ - POP (%ebx); \ - POP (%edi); \ - ret; \ - CFI_PUSH (%ebx); \ - CFI_PUSH (%edi) -# define USE_AS_STRNCPY -# else -# define RETURN1 POP (%edi); ret; CFI_PUSH (%edi) -# endif -# include "strcpy-ssse3.S" - .p2align 4 -L(CopyFrom1To16Bytes): - add %esi, %edx - add %esi, %ecx - - POP (%esi) - test %al, %al - jz L(ExitHigh) - test $0x01, %al - jnz L(Exit1) - test $0x02, %al - jnz L(Exit2) - test $0x04, %al - jnz L(Exit3) - test $0x08, %al - jnz L(Exit4) - test $0x10, %al - jnz L(Exit5) - test $0x20, %al - jnz L(Exit6) - test $0x40, %al - jnz L(Exit7) - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(ExitHigh): - test $0x01, %ah - jnz L(Exit9) - test $0x02, %ah - jnz L(Exit10) - test $0x04, %ah - jnz L(Exit11) - test $0x08, %ah - jnz L(Exit12) - test $0x10, %ah - jnz L(Exit13) - test $0x20, %ah - jnz L(Exit14) - test $0x40, %ah - jnz L(Exit15) - movlpd (%ecx), %xmm0 - movlpd 8(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 8(%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit1): - movb %bh, 1(%edx) -L(Exit1): - movb (%ecx), %al - movb %al, (%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit2): - movb %bh, 2(%edx) -L(Exit2): - movw (%ecx), %ax - movw %ax, (%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit3): - movb %bh, 3(%edx) -L(Exit3): - movw (%ecx), %ax - movw %ax, (%edx) - movb 2(%ecx), %al - movb %al, 2(%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit4): - movb %bh, 4(%edx) -L(Exit4): - movl (%ecx), %eax - movl %eax, (%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit5): - movb %bh, 5(%edx) -L(Exit5): - movl (%ecx), %eax - movl %eax, (%edx) - movb 4(%ecx), %al - movb %al, 4(%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit6): - movb %bh, 6(%edx) -L(Exit6): - movl (%ecx), %eax - movl %eax, (%edx) - movw 4(%ecx), %ax - movw %ax, 4(%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit7): - movb %bh, 7(%edx) -L(Exit7): - movl (%ecx), %eax - movl %eax, (%edx) - movl 3(%ecx), %eax - movl %eax, 3(%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit8): - movb %bh, 8(%edx) -L(Exit8): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit9): - movb %bh, 9(%edx) -L(Exit9): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movb 8(%ecx), %al - movb %al, 8(%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit10): - movb %bh, 10(%edx) -L(Exit10): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movw 8(%ecx), %ax - movw %ax, 8(%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit11): - movb %bh, 11(%edx) -L(Exit11): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movl 7(%ecx), %eax - movl %eax, 7(%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit12): - movb %bh, 12(%edx) -L(Exit12): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movl 8(%ecx), %eax - movl %eax, 8(%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit13): - movb %bh, 13(%edx) -L(Exit13): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 5(%ecx), %xmm0 - movlpd %xmm0, 5(%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit14): - movb %bh, 14(%edx) -L(Exit14): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 6(%ecx), %xmm0 - movlpd %xmm0, 6(%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit15): - movb %bh, 15(%edx) -L(Exit15): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 7(%ecx), %xmm0 - movlpd %xmm0, 7(%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit16): - movb %bh, 16(%edx) -L(Exit16): - movlpd (%ecx), %xmm0 - movlpd 8(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 8(%edx) - movl %edi, %eax - RETURN1 - -# ifdef USE_AS_STRNCPY - - CFI_PUSH(%esi) - - .p2align 4 -L(CopyFrom1To16BytesCase2): - add $16, %ebx - add %esi, %ecx - lea (%esi, %edx), %esi - lea -9(%ebx), %edx - and $1<<7, %dh - or %al, %dh - test %dh, %dh - lea (%esi), %edx - POP (%esi) - jz L(ExitHighCase2) - - test $0x01, %al - jnz L(Exit1) - cmp $1, %ebx - je L(StrncatExit1) - test $0x02, %al - jnz L(Exit2) - cmp $2, %ebx - je L(StrncatExit2) - test $0x04, %al - jnz L(Exit3) - cmp $3, %ebx - je L(StrncatExit3) - test $0x08, %al - jnz L(Exit4) - cmp $4, %ebx - je L(StrncatExit4) - test $0x10, %al - jnz L(Exit5) - cmp $5, %ebx - je L(StrncatExit5) - test $0x20, %al - jnz L(Exit6) - cmp $6, %ebx - je L(StrncatExit6) - test $0x40, %al - jnz L(Exit7) - cmp $7, %ebx - je L(StrncatExit7) - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - lea 7(%edx), %eax - cmpb $1, (%eax) - sbb $-1, %eax - xor %cl, %cl - movb %cl, (%eax) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(ExitHighCase2): - test $0x01, %ah - jnz L(Exit9) - cmp $9, %ebx - je L(StrncatExit9) - test $0x02, %ah - jnz L(Exit10) - cmp $10, %ebx - je L(StrncatExit10) - test $0x04, %ah - jnz L(Exit11) - cmp $11, %ebx - je L(StrncatExit11) - test $0x8, %ah - jnz L(Exit12) - cmp $12, %ebx - je L(StrncatExit12) - test $0x10, %ah - jnz L(Exit13) - cmp $13, %ebx - je L(StrncatExit13) - test $0x20, %ah - jnz L(Exit14) - cmp $14, %ebx - je L(StrncatExit14) - test $0x40, %ah - jnz L(Exit15) - cmp $15, %ebx - je L(StrncatExit15) - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 8(%ecx), %xmm1 - movlpd %xmm1, 8(%edx) - movl %edi, %eax - RETURN1 - - CFI_PUSH(%esi) - -L(CopyFrom1To16BytesCase2OrCase3): - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - - .p2align 4 -L(CopyFrom1To16BytesCase3): - add $16, %ebx - add %esi, %edx - add %esi, %ecx - - POP (%esi) - - cmp $8, %ebx - ja L(ExitHighCase3) - cmp $1, %ebx - je L(StrncatExit1) - cmp $2, %ebx - je L(StrncatExit2) - cmp $3, %ebx - je L(StrncatExit3) - cmp $4, %ebx - je L(StrncatExit4) - cmp $5, %ebx - je L(StrncatExit5) - cmp $6, %ebx - je L(StrncatExit6) - cmp $7, %ebx - je L(StrncatExit7) - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movb %bh, 8(%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(ExitHighCase3): - cmp $9, %ebx - je L(StrncatExit9) - cmp $10, %ebx - je L(StrncatExit10) - cmp $11, %ebx - je L(StrncatExit11) - cmp $12, %ebx - je L(StrncatExit12) - cmp $13, %ebx - je L(StrncatExit13) - cmp $14, %ebx - je L(StrncatExit14) - cmp $15, %ebx - je L(StrncatExit15) - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 8(%ecx), %xmm1 - movlpd %xmm1, 8(%edx) - movb %bh, 16(%edx) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit0): - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit15Bytes): - cmp $9, %ebx - je L(StrncatExit9) - cmpb $0, 9(%ecx) - jz L(Exit10) - cmp $10, %ebx - je L(StrncatExit10) - cmpb $0, 10(%ecx) - jz L(Exit11) - cmp $11, %ebx - je L(StrncatExit11) - cmpb $0, 11(%ecx) - jz L(Exit12) - cmp $12, %ebx - je L(StrncatExit12) - cmpb $0, 12(%ecx) - jz L(Exit13) - cmp $13, %ebx - je L(StrncatExit13) - cmpb $0, 13(%ecx) - jz L(Exit14) - cmp $14, %ebx - je L(StrncatExit14) - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 7(%ecx), %xmm0 - movlpd %xmm0, 7(%edx) - lea 14(%edx), %eax - cmpb $1, (%eax) - sbb $-1, %eax - movb %bh, (%eax) - movl %edi, %eax - RETURN1 - - .p2align 4 -L(StrncatExit8Bytes): - cmpb $0, (%ecx) - jz L(Exit1) - cmp $1, %ebx - je L(StrncatExit1) - cmpb $0, 1(%ecx) - jz L(Exit2) - cmp $2, %ebx - je L(StrncatExit2) - cmpb $0, 2(%ecx) - jz L(Exit3) - cmp $3, %ebx - je L(StrncatExit3) - cmpb $0, 3(%ecx) - jz L(Exit4) - cmp $4, %ebx - je L(StrncatExit4) - cmpb $0, 4(%ecx) - jz L(Exit5) - cmp $5, %ebx - je L(StrncatExit5) - cmpb $0, 5(%ecx) - jz L(Exit6) - cmp $6, %ebx - je L(StrncatExit6) - cmpb $0, 6(%ecx) - jz L(Exit7) - cmp $7, %ebx - je L(StrncatExit7) - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - lea 7(%edx), %eax - cmpb $1, (%eax) - sbb $-1, %eax - movb %bh, (%eax) - movl %edi, %eax - RETURN1 - -# endif -END (STRCAT) -#endif diff --git a/sysdeps/i386/i686/multiarch/strcat.S b/sysdeps/i386/i686/multiarch/strcat.S deleted file mode 100644 index 8412cb6f23..0000000000 --- a/sysdeps/i386/i686/multiarch/strcat.S +++ /dev/null @@ -1,92 +0,0 @@ -/* Multiple versions of strcat - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef USE_AS_STRNCAT -# ifndef STRCAT -# define STRCAT strcat -# endif -#endif - -#ifdef USE_AS_STRNCAT -# define STRCAT_SSSE3 __strncat_ssse3 -# define STRCAT_SSE2 __strncat_sse2 -# define STRCAT_IA32 __strncat_ia32 -# define __GI_STRCAT __GI_strncat -#else -# define STRCAT_SSSE3 __strcat_ssse3 -# define STRCAT_SSE2 __strcat_sse2 -# define STRCAT_IA32 __strcat_ia32 -# define __GI_STRCAT __GI_strcat -#endif - - -/* Define multiple versions only for the definition in libc. Don't - define multiple versions for strncat in static library since we - need strncat before the initialization happened. */ -#if IS_IN (libc) - - .text -ENTRY(STRCAT) - .type STRCAT, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (STRCAT_IA32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (STRCAT_SSE2) - HAS_ARCH_FEATURE (Fast_Unaligned_Load) - jnz 2f - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (STRCAT_SSSE3) -2: ret -END(STRCAT) - -# undef ENTRY -# define ENTRY(name) \ - .type STRCAT_IA32, @function; \ - .align 16; \ - .globl STRCAT_IA32; \ - .hidden STRCAT_IA32; \ - STRCAT_IA32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size STRCAT_IA32, .-STRCAT_IA32 - -# ifdef SHARED -# undef libc_hidden_builtin_def -/* It doesn't make sense to send libc-internal strcat calls through a PLT. - The speedup we get from using SSSE3 instruction is likely eaten away - by the indirect call in the PLT. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_STRCAT; __GI_STRCAT = STRCAT_IA32 -# undef libc_hidden_def -# define libc_hidden_def(name) \ - .globl __GI___STRCAT; __GI___STRCAT = STRCAT_IA32 - -# endif -#endif - -#ifndef USE_AS_STRNCAT -# include "../../strcat.S" -#endif diff --git a/sysdeps/i386/i686/multiarch/strchr-sse2-bsf.S b/sysdeps/i386/i686/multiarch/strchr-sse2-bsf.S deleted file mode 100644 index 95fd7c084e..0000000000 --- a/sysdeps/i386/i686/multiarch/strchr-sse2-bsf.S +++ /dev/null @@ -1,158 +0,0 @@ -/* strchr with SSE2 with bsf - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# define PARMS 8 -# define ENTRANCE PUSH(%edi) -# define RETURN POP(%edi); ret; CFI_PUSH(%edi); - -# define STR1 PARMS -# define STR2 STR1+4 - - .text -ENTRY (__strchr_sse2_bsf) - - ENTRANCE - mov STR1(%esp), %ecx - movd STR2(%esp), %xmm1 - - pxor %xmm2, %xmm2 - mov %ecx, %edi - punpcklbw %xmm1, %xmm1 - punpcklbw %xmm1, %xmm1 - /* ECX has OFFSET. */ - and $15, %ecx - pshufd $0, %xmm1, %xmm1 - je L(loop) - -/* Handle unaligned string. */ - and $-16, %edi - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - pcmpeqb %xmm1, %xmm0 - /* Find where NULL is. */ - pmovmskb %xmm2, %edx - /* Check if there is a match. */ - pmovmskb %xmm0, %eax - /* Remove the leading bytes. */ - sarl %cl, %edx - sarl %cl, %eax - test %eax, %eax - je L(unaligned_no_match) - /* Check which byte is a match. */ - bsf %eax, %eax - /* Is there a NULL? */ - test %edx, %edx - je L(unaligned_match) - bsf %edx, %edx - cmpl %edx, %eax - /* Return NULL if NULL comes first. */ - ja L(return_null) -L(unaligned_match): - add %edi, %eax - add %ecx, %eax - RETURN - - .p2align 4 -L(unaligned_no_match): - test %edx, %edx - jne L(return_null) - pxor %xmm2, %xmm2 - - add $16, %edi - - .p2align 4 -/* Loop start on aligned string. */ -L(loop): - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - add $16, %edi - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %edx - pmovmskb %xmm0, %eax - or %eax, %edx - jnz L(matches) - - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - add $16, %edi - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %edx - pmovmskb %xmm0, %eax - or %eax, %edx - jnz L(matches) - - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - add $16, %edi - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %edx - pmovmskb %xmm0, %eax - or %eax, %edx - jnz L(matches) - - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - add $16, %edi - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %edx - pmovmskb %xmm0, %eax - or %eax, %edx - jnz L(matches) - jmp L(loop) - -L(matches): - pmovmskb %xmm2, %edx - test %eax, %eax - jz L(return_null) - bsf %eax, %eax - /* There is a match. First find where NULL is. */ - test %edx, %edx - je L(match) - bsf %edx, %ecx - /* Check if NULL comes first. */ - cmpl %ecx, %eax - ja L(return_null) -L(match): - sub $16, %edi - add %edi, %eax - RETURN - -/* Return NULL. */ - .p2align 4 -L(return_null): - xor %eax, %eax - RETURN - -END (__strchr_sse2_bsf) -#endif diff --git a/sysdeps/i386/i686/multiarch/strchr-sse2.S b/sysdeps/i386/i686/multiarch/strchr-sse2.S deleted file mode 100644 index 1f9e875b04..0000000000 --- a/sysdeps/i386/i686/multiarch/strchr-sse2.S +++ /dev/null @@ -1,348 +0,0 @@ -/* strchr SSE2 without bsf - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# define PARMS 8 -# define ENTRANCE PUSH(%edi) -# define RETURN POP(%edi); ret; CFI_PUSH(%edi); - -# define STR1 PARMS -# define STR2 STR1+4 - - atom_text_section -ENTRY (__strchr_sse2) - - ENTRANCE - mov STR1(%esp), %ecx - movd STR2(%esp), %xmm1 - - pxor %xmm2, %xmm2 - mov %ecx, %edi - punpcklbw %xmm1, %xmm1 - punpcklbw %xmm1, %xmm1 - /* ECX has OFFSET. */ - and $15, %ecx - pshufd $0, %xmm1, %xmm1 - je L(loop) - -/* Handle unaligned string. */ - and $-16, %edi - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - pcmpeqb %xmm1, %xmm0 - /* Find where NULL is. */ - pmovmskb %xmm2, %edx - /* Check if there is a match. */ - pmovmskb %xmm0, %eax - /* Remove the leading bytes. */ - sarl %cl, %edx - sarl %cl, %eax - test %eax, %eax - jz L(unaligned_no_match) - /* Check which byte is a match. */ - /* Is there a NULL? */ - add %ecx, %edi - test %edx, %edx - jz L(match_case1) - jmp L(match_case2) - - .p2align 4 -L(unaligned_no_match): - test %edx, %edx - jne L(return_null) - - pxor %xmm2, %xmm2 - add $16, %edi - - .p2align 4 -/* Loop start on aligned string. */ -L(loop): - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %edx - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - test %edx, %edx - jnz L(return_null) - add $16, %edi - - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %edx - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - test %edx, %edx - jnz L(return_null) - add $16, %edi - - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %edx - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - test %edx, %edx - jnz L(return_null) - add $16, %edi - - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %edx - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - test %edx, %edx - jnz L(return_null) - add $16, %edi - jmp L(loop) - -L(matches): - /* There is a match. First find where NULL is. */ - test %edx, %edx - jz L(match_case1) - - .p2align 4 -L(match_case2): - test %al, %al - jz L(match_higth_case2) - - mov %al, %cl - and $15, %cl - jnz L(match_case2_4) - - mov %dl, %ch - and $15, %ch - jnz L(return_null) - - test $0x10, %al - jnz L(Exit5) - test $0x10, %dl - jnz L(return_null) - test $0x20, %al - jnz L(Exit6) - test $0x20, %dl - jnz L(return_null) - test $0x40, %al - jnz L(Exit7) - test $0x40, %dl - jnz L(return_null) - lea 7(%edi), %eax - RETURN - - .p2align 4 -L(match_case2_4): - test $0x01, %al - jnz L(Exit1) - test $0x01, %dl - jnz L(return_null) - test $0x02, %al - jnz L(Exit2) - test $0x02, %dl - jnz L(return_null) - test $0x04, %al - jnz L(Exit3) - test $0x04, %dl - jnz L(return_null) - lea 3(%edi), %eax - RETURN - - .p2align 4 -L(match_higth_case2): - test %dl, %dl - jnz L(return_null) - - mov %ah, %cl - and $15, %cl - jnz L(match_case2_12) - - mov %dh, %ch - and $15, %ch - jnz L(return_null) - - test $0x10, %ah - jnz L(Exit13) - test $0x10, %dh - jnz L(return_null) - test $0x20, %ah - jnz L(Exit14) - test $0x20, %dh - jnz L(return_null) - test $0x40, %ah - jnz L(Exit15) - test $0x40, %dh - jnz L(return_null) - lea 15(%edi), %eax - RETURN - - .p2align 4 -L(match_case2_12): - test $0x01, %ah - jnz L(Exit9) - test $0x01, %dh - jnz L(return_null) - test $0x02, %ah - jnz L(Exit10) - test $0x02, %dh - jnz L(return_null) - test $0x04, %ah - jnz L(Exit11) - test $0x04, %dh - jnz L(return_null) - lea 11(%edi), %eax - RETURN - - .p2align 4 -L(match_case1): - test %al, %al - jz L(match_higth_case1) - - test $0x01, %al - jnz L(Exit1) - test $0x02, %al - jnz L(Exit2) - test $0x04, %al - jnz L(Exit3) - test $0x08, %al - jnz L(Exit4) - test $0x10, %al - jnz L(Exit5) - test $0x20, %al - jnz L(Exit6) - test $0x40, %al - jnz L(Exit7) - lea 7(%edi), %eax - RETURN - - .p2align 4 -L(match_higth_case1): - test $0x01, %ah - jnz L(Exit9) - test $0x02, %ah - jnz L(Exit10) - test $0x04, %ah - jnz L(Exit11) - test $0x08, %ah - jnz L(Exit12) - test $0x10, %ah - jnz L(Exit13) - test $0x20, %ah - jnz L(Exit14) - test $0x40, %ah - jnz L(Exit15) - lea 15(%edi), %eax - RETURN - - .p2align 4 -L(Exit1): - lea (%edi), %eax - RETURN - - .p2align 4 -L(Exit2): - lea 1(%edi), %eax - RETURN - - .p2align 4 -L(Exit3): - lea 2(%edi), %eax - RETURN - - .p2align 4 -L(Exit4): - lea 3(%edi), %eax - RETURN - - .p2align 4 -L(Exit5): - lea 4(%edi), %eax - RETURN - - .p2align 4 -L(Exit6): - lea 5(%edi), %eax - RETURN - - .p2align 4 -L(Exit7): - lea 6(%edi), %eax - RETURN - - .p2align 4 -L(Exit9): - lea 8(%edi), %eax - RETURN - - .p2align 4 -L(Exit10): - lea 9(%edi), %eax - RETURN - - .p2align 4 -L(Exit11): - lea 10(%edi), %eax - RETURN - - .p2align 4 -L(Exit12): - lea 11(%edi), %eax - RETURN - - .p2align 4 -L(Exit13): - lea 12(%edi), %eax - RETURN - - .p2align 4 -L(Exit14): - lea 13(%edi), %eax - RETURN - - .p2align 4 -L(Exit15): - lea 14(%edi), %eax - RETURN - -/* Return NULL. */ - .p2align 4 -L(return_null): - xor %eax, %eax - RETURN - -END (__strchr_sse2) -#endif diff --git a/sysdeps/i386/i686/multiarch/strchr.S b/sysdeps/i386/i686/multiarch/strchr.S deleted file mode 100644 index 5b97b1c767..0000000000 --- a/sysdeps/i386/i686/multiarch/strchr.S +++ /dev/null @@ -1,57 +0,0 @@ -/* Multiple versions of strchr - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if IS_IN (libc) - .text -ENTRY(strchr) - .type strchr, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__strchr_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__strchr_sse2_bsf) - HAS_ARCH_FEATURE (Slow_BSF) - jz 2f - LOAD_FUNC_GOT_EAX (__strchr_sse2) -2: ret -END(strchr) - -# undef ENTRY -# define ENTRY(name) \ - .type __strchr_ia32, @function; \ - .globl __strchr_ia32; \ - .p2align 4; \ - __strchr_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __strchr_ia32, .-__strchr_ia32 -# undef libc_hidden_builtin_def -/* IFUNC doesn't work with the hidden functions in shared library since - they will be called without setting up EBX needed for PLT which is - used by IFUNC. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_strchr; __GI_strchr = __strchr_ia32 -#endif - -#include "../../i586/strchr.S" diff --git a/sysdeps/i386/i686/multiarch/strcmp-sse4.S b/sysdeps/i386/i686/multiarch/strcmp-sse4.S deleted file mode 100644 index cd26058671..0000000000 --- a/sysdeps/i386/i686/multiarch/strcmp-sse4.S +++ /dev/null @@ -1,804 +0,0 @@ -/* strcmp with SSE4.2 - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -#include -#include "asm-syntax.h" - -#define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -#define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -#define PUSH(REG) pushl REG; CFI_PUSH (REG) -#define POP(REG) popl REG; CFI_POP (REG) - -#ifdef USE_AS_STRNCMP -# ifndef STRCMP -# define STRCMP __strncmp_sse4_2 -# endif -# define STR1 8 -# define STR2 STR1+4 -# define CNT STR2+4 -# define RETURN POP (REM); ret; .p2align 4; CFI_PUSH (REM) -# define REM %ebp -#elif defined USE_AS_STRCASECMP_L -# include "locale-defines.h" -# ifndef STRCMP -# define STRCMP __strcasecmp_l_sse4_2 -# endif -# ifdef PIC -# define STR1 12 -# else -# define STR1 8 -# endif -# define STR2 STR1+4 -# define LOCALE 12 /* Loaded before the adjustment. */ -# ifdef PIC -# define RETURN POP (%edi); POP (%ebx); ret; \ - .p2align 4; CFI_PUSH (%ebx); CFI_PUSH (%edi) -# else -# define RETURN POP (%edi); ret; .p2align 4; CFI_PUSH (%edi) -# endif -# define NONASCII __strcasecmp_nonascii -#elif defined USE_AS_STRNCASECMP_L -# include "locale-defines.h" -# ifndef STRCMP -# define STRCMP __strncasecmp_l_sse4_2 -# endif -# ifdef PIC -# define STR1 16 -# else -# define STR1 12 -# endif -# define STR2 STR1+4 -# define CNT STR2+4 -# define LOCALE 16 /* Loaded before the adjustment. */ -# ifdef PIC -# define RETURN POP (%edi); POP (REM); POP (%ebx); ret; \ - .p2align 4; \ - CFI_PUSH (%ebx); CFI_PUSH (REM); CFI_PUSH (%edi) -# else -# define RETURN POP (%edi); POP (REM); ret; \ - .p2align 4; CFI_PUSH (REM); CFI_PUSH (%edi) -# endif -# define REM %ebp -# define NONASCII __strncasecmp_nonascii -#else -# ifndef STRCMP -# define STRCMP __strcmp_sse4_2 -# endif -# define STR1 4 -# define STR2 STR1+4 -# define RETURN ret; .p2align 4 -#endif - - .section .text.sse4.2,"ax",@progbits - -#ifdef USE_AS_STRCASECMP_L -ENTRY (__strcasecmp_sse4_2) -# ifdef PIC - PUSH (%ebx) - LOAD_PIC_REG(bx) - movl __libc_tsd_LOCALE@GOTNTPOFF(%ebx), %eax -# ifdef NO_TLS_DIRECT_SEG_REFS - addl %gs:0, %eax - movl (%eax), %eax -# else - movl %gs:(%eax), %eax -# endif -# else -# ifdef NO_TLS_DIRECT_SEG_REFS - movl %gs:0, %eax - movl __libc_tsd_LOCALE@NTPOFF(%eax), %eax -# else - movl %gs:__libc_tsd_LOCALE@NTPOFF, %eax -# endif -# endif -# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 - movl LOCALE_T___LOCALES+LC_CTYPE*4(%eax), %eax -# else - movl (%eax), %eax -# endif - testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax) -# ifdef PIC - je L(ascii) - POP (%ebx) - jmp __strcasecmp_nonascii -# else - jne __strcasecmp_nonascii - jmp L(ascii) -# endif -END (__strcasecmp_sse4_2) -#endif - -#ifdef USE_AS_STRNCASECMP_L -ENTRY (__strncasecmp_sse4_2) -# ifdef PIC - PUSH (%ebx) - LOAD_PIC_REG(bx) - movl __libc_tsd_LOCALE@GOTNTPOFF(%ebx), %eax -# ifdef NO_TLS_DIRECT_SEG_REFS - addl %gs:0, %eax - movl (%eax), %eax -# else - movl %gs:(%eax), %eax -# endif -# else -# ifdef NO_TLS_DIRECT_SEG_REFS - movl %gs:0, %eax - movl __libc_tsd_LOCALE@NTPOFF(%eax), %eax -# else - movl %gs:__libc_tsd_LOCALE@NTPOFF, %eax -# endif -# endif -# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 - movl LOCALE_T___LOCALES+LC_CTYPE*4(%eax), %eax -# else - movl (%eax), %eax -# endif - testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax) -# ifdef PIC - je L(ascii) - POP (%ebx) - jmp __strncasecmp_nonascii -# else - jne __strncasecmp_nonascii - jmp L(ascii) -# endif -END (__strncasecmp_sse4_2) -#endif - - ENTRY (STRCMP) -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movl LOCALE(%esp), %eax -# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 - movl LOCALE_T___LOCALES+LC_CTYPE*4(%eax), %eax -# else - movl (%eax), %eax -# endif - testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax) - jne NONASCII - -# ifdef PIC - PUSH (%ebx) - LOAD_PIC_REG(bx) -# endif -L(ascii): - .section .rodata.cst16,"aM",@progbits,16 - .align 16 -.Lbelowupper: - .quad 0x4040404040404040 - .quad 0x4040404040404040 -.Ltopupper: - .quad 0x5b5b5b5b5b5b5b5b - .quad 0x5b5b5b5b5b5b5b5b -.Ltouppermask: - .quad 0x2020202020202020 - .quad 0x2020202020202020 - .previous - -# ifdef PIC -# define UCLOW_reg .Lbelowupper@GOTOFF(%ebx) -# define UCHIGH_reg .Ltopupper@GOTOFF(%ebx) -# define LCQWORD_reg .Ltouppermask@GOTOFF(%ebx) -# else -# define UCLOW_reg .Lbelowupper -# define UCHIGH_reg .Ltopupper -# define LCQWORD_reg .Ltouppermask -# endif -#endif - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - PUSH (REM) -#endif -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - PUSH (%edi) -#endif - mov STR1(%esp), %edx - mov STR2(%esp), %eax -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - movl CNT(%esp), REM - test REM, REM - je L(eq) -#endif - mov %dx, %cx - and $0xfff, %cx - cmp $0xff0, %cx - ja L(first4bytes) - movdqu (%edx), %xmm2 - mov %eax, %ecx - and $0xfff, %ecx - cmp $0xff0, %ecx - ja L(first4bytes) -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# define TOLOWER(reg1, reg2) \ - movdqa reg1, %xmm3; \ - movdqa UCHIGH_reg, %xmm4; \ - movdqa reg2, %xmm5; \ - movdqa UCHIGH_reg, %xmm6; \ - pcmpgtb UCLOW_reg, %xmm3; \ - pcmpgtb reg1, %xmm4; \ - pcmpgtb UCLOW_reg, %xmm5; \ - pcmpgtb reg2, %xmm6; \ - pand %xmm4, %xmm3; \ - pand %xmm6, %xmm5; \ - pand LCQWORD_reg, %xmm3; \ - pand LCQWORD_reg, %xmm5; \ - por %xmm3, reg1; \ - por %xmm5, reg2 - - movdqu (%eax), %xmm1 - TOLOWER (%xmm2, %xmm1) - movd %xmm2, %ecx - movd %xmm1, %edi - movdqa %xmm2, %xmm3 - movdqa %xmm1, %xmm4 - cmpl %edi, %ecx -#else -# define TOLOWER(reg1, reg) - - movd %xmm2, %ecx - cmp (%eax), %ecx -#endif - jne L(less4bytes) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - movdqu (%eax), %xmm1 -#endif - pxor %xmm2, %xmm1 - pxor %xmm0, %xmm0 - ptest %xmm1, %xmm0 - jnc L(less16bytes) - pcmpeqb %xmm0, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, REM - jbe L(eq) -#endif - add $16, %edx - add $16, %eax -L(first4bytes): - movzbl (%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl (%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, (%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $1, REM - je L(eq) -#endif - - movzbl 1(%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl 1(%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, 1(%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $2, REM - je L(eq) -#endif - movzbl 2(%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl 2(%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, 2(%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $3, REM - je L(eq) -#endif - movzbl 3(%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl 3(%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, 3(%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $4, REM - je L(eq) -#endif - movzbl 4(%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl 4(%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, 4(%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $5, REM - je L(eq) -#endif - movzbl 5(%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl 5(%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, 5(%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $6, REM - je L(eq) -#endif - movzbl 6(%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl 6(%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, 6(%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $7, REM - je L(eq) -#endif - movzbl 7(%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl 7(%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, 7(%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $8, REM - je L(eq) -#endif - add $8, %eax - add $8, %edx - -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - PUSH (%edi) -#endif - PUSH (%esi) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cfi_remember_state -#endif - mov %edx, %edi - mov %eax, %esi - xorl %eax, %eax -L(check_offset): - movl %edi, %edx - movl %esi, %ecx - andl $0xfff, %edx - andl $0xfff, %ecx - cmpl %edx, %ecx - cmovl %edx, %ecx - lea -0xff0(%ecx), %edx - sub %edx, %edi - sub %edx, %esi - testl %edx, %edx - jg L(crosspage) -L(loop): - movdqu (%esi,%edx), %xmm2 - movdqu (%edi,%edx), %xmm1 - TOLOWER (%xmm2, %xmm1) - pcmpistri $0x1a, %xmm2, %xmm1 - jbe L(end) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, REM - jbe L(more16byteseq) -#endif - - add $16, %edx - jle L(loop) -L(crosspage): - movzbl (%edi,%edx), %eax - movzbl (%esi,%edx), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx -# endif -#endif - subl %ecx, %eax - jne L(ret) - testl %ecx, %ecx - je L(ret) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $1, REM - jbe L(more16byteseq) -#endif - inc %edx - cmp $15, %edx - jle L(crosspage) - add %edx, %edi - add %edx, %esi - jmp L(check_offset) - - .p2align 4 -L(end): - jnc L(ret) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub %ecx, REM - jbe L(more16byteseq) -#endif - lea (%ecx,%edx), %ecx - movzbl (%edi,%ecx), %eax - movzbl (%esi,%ecx), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx -# endif -#endif - subl %ecx, %eax -L(ret): - POP (%esi) - POP (%edi) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - POP (REM) -#endif -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - POP (%ebx) -# endif -#endif - ret - - .p2align 4 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cfi_restore_state -L(more16byteseq): - POP (%esi) -# ifdef USE_AS_STRNCMP - POP (%edi) -# endif -#endif -L(eq): - xorl %eax, %eax - RETURN - -L(neq): - mov $1, %eax - ja L(neq_bigger) - neg %eax -L(neq_bigger): - RETURN - -L(less16bytes): - add $0xfefefeff, %ecx - jnc L(less4bytes) -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movd %xmm3, %edi - xor %edi, %ecx -#else - xor (%edx), %ecx -#endif - or $0xfefefeff, %ecx - add $1, %ecx - jnz L(less4bytes) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $4, REM - jbe L(eq) -#endif -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - psrldq $4, %xmm3 - psrldq $4, %xmm4 - movd %xmm3, %ecx - movd %xmm4, %edi - cmp %edi, %ecx - mov %ecx, %edi -#else - mov 4(%edx), %ecx - cmp 4(%eax), %ecx -#endif - jne L(more4bytes) - add $0xfefefeff, %ecx - jnc L(more4bytes) -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - xor %edi, %ecx -#else - xor 4(%edx), %ecx -#endif - or $0xfefefeff, %ecx - add $1, %ecx - jnz L(more4bytes) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $8, REM - jbe L(eq) -#endif - - add $8, %edx - add $8, %eax -L(less4bytes): - - movzbl (%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl (%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, (%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $1, REM - je L(eq) -#endif - movzbl 1(%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl 1(%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, 1(%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $2, REM - je L(eq) -#endif - - movzbl 2(%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl 2(%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, 2(%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $3, REM - je L(eq) -#endif - movzbl 3(%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl 3(%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, 3(%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - -L(more4bytes): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $4, REM - je L(eq) -#endif - movzbl 4(%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl 4(%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, 4(%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $5, REM - je L(eq) -#endif - movzbl 5(%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl 5(%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, 5(%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $6, REM - je L(eq) -#endif - movzbl 6(%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl 6(%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, 6(%edx) -#endif - jne L(neq) - cmpl $0, %ecx - je L(eq) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $7, REM - je L(eq) -#endif - movzbl 7(%eax), %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movzbl 7(%edx), %edi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%edi,4), %edi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%edi,4), %edi -# endif - cmpl %ecx, %edi -#else - cmpb %cl, 7(%edx) -#endif - jne L(neq) - jmp L(eq) - -END (STRCMP) - -#endif diff --git a/sysdeps/i386/i686/multiarch/strcmp-ssse3.S b/sysdeps/i386/i686/multiarch/strcmp-ssse3.S deleted file mode 100644 index b25cc3e068..0000000000 --- a/sysdeps/i386/i686/multiarch/strcmp-ssse3.S +++ /dev/null @@ -1,2810 +0,0 @@ -/* strcmp with SSSE3 - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -#include -#include "asm-syntax.h" - -#define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -#define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -#define PUSH(REG) pushl REG; CFI_PUSH (REG) -#define POP(REG) popl REG; CFI_POP (REG) - -#ifdef USE_AS_STRNCMP -# ifndef STRCMP -# define STRCMP __strncmp_ssse3 -# endif -# define STR1 8 -# define STR2 STR1+4 -# define CNT STR2+4 -# define RETURN POP (REM); ret; .p2align 4; CFI_PUSH (REM) -# define UPDATE_STRNCMP_COUNTER \ - /* calculate left number to compare */ \ - mov $16, %esi; \ - sub %ecx, %esi; \ - cmp %esi, REM; \ - jbe L(more8byteseq); \ - sub %esi, REM -# define FLAGS %ebx -# define REM %ebp -#elif defined USE_AS_STRCASECMP_L -# include "locale-defines.h" -# ifndef STRCMP -# define STRCMP __strcasecmp_l_ssse3 -# endif -# ifdef PIC -# define STR1 8 -# else -# define STR1 4 -# endif -# define STR2 STR1+4 -# define LOCALE 12 /* Loaded before the adjustment. */ -# ifdef PIC -# define RETURN POP (%ebx); ret; .p2align 4; CFI_PUSH (%ebx) -# else -# define RETURN ret; .p2align 4 -# endif -# define UPDATE_STRNCMP_COUNTER -# define FLAGS (%esp) -# define NONASCII __strcasecmp_nonascii -#elif defined USE_AS_STRNCASECMP_L -# include "locale-defines.h" -# ifndef STRCMP -# define STRCMP __strncasecmp_l_ssse3 -# endif -# ifdef PIC -# define STR1 12 -# else -# define STR1 8 -# endif -# define STR2 STR1+4 -# define CNT STR2+4 -# define LOCALE 16 /* Loaded before the adjustment. */ -# ifdef PIC -# define RETURN POP (REM); POP (%ebx); ret; \ - .p2align 4; CFI_PUSH (%ebx); CFI_PUSH (REM) -# else -# define RETURN POP (REM); ret; .p2align 4; CFI_PUSH (REM) -# endif -# define UPDATE_STRNCMP_COUNTER \ - /* calculate left number to compare */ \ - mov $16, %esi; \ - sub %ecx, %esi; \ - cmp %esi, REM; \ - jbe L(more8byteseq); \ - sub %esi, REM -# define FLAGS (%esp) -# define REM %ebp -# define NONASCII __strncasecmp_nonascii -#else -# ifndef STRCMP -# define STRCMP __strcmp_ssse3 -# endif -# define STR1 4 -# define STR2 STR1+4 -# define RETURN ret; .p2align 4 -# define UPDATE_STRNCMP_COUNTER -# define FLAGS %ebx -#endif - - .section .text.ssse3,"ax",@progbits - -#ifdef USE_AS_STRCASECMP_L -ENTRY (__strcasecmp_ssse3) -# ifdef PIC - PUSH (%ebx) - LOAD_PIC_REG(bx) - movl __libc_tsd_LOCALE@GOTNTPOFF(%ebx), %eax -# ifdef NO_TLS_DIRECT_SEG_REFS - addl %gs:0, %eax - movl (%eax), %eax -# else - movl %gs:(%eax), %eax -# endif -# else -# ifdef NO_TLS_DIRECT_SEG_REFS - movl %gs:0, %eax - movl __libc_tsd_LOCALE@NTPOFF(%eax), %eax -# else - movl %gs:__libc_tsd_LOCALE@NTPOFF, %eax -# endif -# endif -# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 - movl LOCALE_T___LOCALES+LC_CTYPE*4(%eax), %eax -# else - movl (%eax), %eax -# endif - testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax) -# ifdef PIC - je L(ascii) - POP (%ebx) - jmp __strcasecmp_nonascii -# else - jne __strcasecmp_nonascii - jmp L(ascii) -# endif -END (__strcasecmp_ssse3) -#endif - -#ifdef USE_AS_STRNCASECMP_L -ENTRY (__strncasecmp_ssse3) -# ifdef PIC - PUSH (%ebx) - LOAD_PIC_REG(bx) - movl __libc_tsd_LOCALE@GOTNTPOFF(%ebx), %eax -# ifdef NO_TLS_DIRECT_SEG_REFS - addl %gs:0, %eax - movl (%eax), %eax -# else - movl %gs:(%eax), %eax -# endif -# else -# ifdef NO_TLS_DIRECT_SEG_REFS - movl %gs:0, %eax - movl __libc_tsd_LOCALE@NTPOFF(%eax), %eax -# else - movl %gs:__libc_tsd_LOCALE@NTPOFF, %eax -# endif -# endif -# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 - movl LOCALE_T___LOCALES+LC_CTYPE*4(%eax), %eax -# else - movl (%eax), %eax -# endif - testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax) -# ifdef PIC - je L(ascii) - POP (%ebx) - jmp __strncasecmp_nonascii -# else - jne __strncasecmp_nonascii - jmp L(ascii) -# endif -END (__strncasecmp_ssse3) -#endif - -ENTRY (STRCMP) -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movl LOCALE(%esp), %eax -# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 - movl LOCALE_T___LOCALES+LC_CTYPE*4(%eax), %eax -# else - movl (%eax), %eax -# endif - testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%eax) - jne NONASCII - -# ifdef PIC - PUSH (%ebx) - LOAD_PIC_REG(bx) -# endif -L(ascii): - .section .rodata.cst16,"aM",@progbits,16 - .align 16 -.Lbelowupper: - .quad 0x4040404040404040 - .quad 0x4040404040404040 -.Ltopupper: - .quad 0x5b5b5b5b5b5b5b5b - .quad 0x5b5b5b5b5b5b5b5b -.Ltouppermask: - .quad 0x2020202020202020 - .quad 0x2020202020202020 - .previous - -# ifdef PIC -# define UCLOW_reg .Lbelowupper@GOTOFF(%ebx) -# define UCHIGH_reg .Ltopupper@GOTOFF(%ebx) -# define LCQWORD_reg .Ltouppermask@GOTOFF(%ebx) -# else -# define UCLOW_reg .Lbelowupper -# define UCHIGH_reg .Ltopupper -# define LCQWORD_reg .Ltouppermask -# endif -#endif - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - PUSH (REM) -#endif - - movl STR1(%esp), %edx - movl STR2(%esp), %eax -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - movl CNT(%esp), REM - cmp $16, REM - jb L(less16bytes_sncmp) -#elif !defined USE_AS_STRCASECMP_L - movzbl (%eax), %ecx - cmpb %cl, (%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - movzbl 1(%eax), %ecx - cmpb %cl, 1(%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - movzbl 2(%eax), %ecx - cmpb %cl, 2(%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - movzbl 3(%eax), %ecx - cmpb %cl, 3(%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - movzbl 4(%eax), %ecx - cmpb %cl, 4(%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - movzbl 5(%eax), %ecx - cmpb %cl, 5(%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - movzbl 6(%eax), %ecx - cmpb %cl, 6(%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - movzbl 7(%eax), %ecx - cmpb %cl, 7(%edx) - jne L(neq) - cmpl $0, %ecx - je L(eq) - - add $8, %edx - add $8, %eax -#endif - movl %edx, %ecx - and $0xfff, %ecx - cmp $0xff0, %ecx - ja L(crosspage) - mov %eax, %ecx - and $0xfff, %ecx - cmp $0xff0, %ecx - ja L(crosspage) - pxor %xmm0, %xmm0 - movlpd (%eax), %xmm1 - movlpd (%edx), %xmm2 - movhpd 8(%eax), %xmm1 - movhpd 8(%edx), %xmm2 -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# define TOLOWER(reg1, reg2) \ - movdqa reg1, %xmm5; \ - movdqa reg2, %xmm7; \ - movdqa UCHIGH_reg, %xmm6; \ - pcmpgtb UCLOW_reg, %xmm5; \ - pcmpgtb UCLOW_reg, %xmm7; \ - pcmpgtb reg1, %xmm6; \ - pand %xmm6, %xmm5; \ - movdqa UCHIGH_reg, %xmm6; \ - pcmpgtb reg2, %xmm6; \ - pand %xmm6, %xmm7; \ - pand LCQWORD_reg, %xmm5; \ - por %xmm5, reg1; \ - pand LCQWORD_reg, %xmm7; \ - por %xmm7, reg2 - TOLOWER (%xmm1, %xmm2) -#else -# define TOLOWER(reg1, reg2) -#endif - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %ecx - sub $0xffff, %ecx - jnz L(less16bytes) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(eq) -#endif - add $16, %eax - add $16, %edx - -L(crosspage): - -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - PUSH (FLAGS) -#endif - PUSH (%edi) - PUSH (%esi) -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - pushl $0 - cfi_adjust_cfa_offset (4) -#endif -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cfi_remember_state -#endif - - movl %edx, %edi - movl %eax, %ecx - and $0xf, %ecx - and $0xf, %edi - xor %ecx, %eax - xor %edi, %edx -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - xor FLAGS, FLAGS -#endif - cmp %edi, %ecx - je L(ashr_0) - ja L(bigger) - orl $0x20, FLAGS - xchg %edx, %eax - xchg %ecx, %edi -L(bigger): - lea 15(%edi), %edi - sub %ecx, %edi - cmp $8, %edi - jle L(ashr_less_8) - cmp $14, %edi - je L(ashr_15) - cmp $13, %edi - je L(ashr_14) - cmp $12, %edi - je L(ashr_13) - cmp $11, %edi - je L(ashr_12) - cmp $10, %edi - je L(ashr_11) - cmp $9, %edi - je L(ashr_10) -L(ashr_less_8): - je L(ashr_9) - cmp $7, %edi - je L(ashr_8) - cmp $6, %edi - je L(ashr_7) - cmp $5, %edi - je L(ashr_6) - cmp $4, %edi - je L(ashr_5) - cmp $3, %edi - je L(ashr_4) - cmp $2, %edi - je L(ashr_3) - cmp $1, %edi - je L(ashr_2) - cmp $0, %edi - je L(ashr_1) - -/* - * The following cases will be handled by ashr_0 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(0~15) n(0~15) 15(15+ n-n) ashr_0 - */ - .p2align 4 -L(ashr_0): - mov $0xffff, %esi - movdqa (%eax), %xmm1 - pxor %xmm0, %xmm0 - pcmpeqb %xmm1, %xmm0 -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movdqa (%edx), %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm2, %xmm1 -#else - pcmpeqb (%edx), %xmm1 -#endif - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - mov %ecx, %edi - jne L(less32bytes) - UPDATE_STRNCMP_COUNTER - movl $0x10, FLAGS - mov $0x10, %ecx - pxor %xmm0, %xmm0 - .p2align 4 -L(loop_ashr_0): - movdqa (%eax, %ecx), %xmm1 -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - movdqa (%edx, %ecx), %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 -#else - pcmpeqb %xmm1, %xmm0 - pcmpeqb (%edx, %ecx), %xmm1 -#endif - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - jmp L(loop_ashr_0) - -/* - * The following cases will be handled by ashr_1 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(15) n -15 0(15 +(n-15) - n) ashr_1 - */ - .p2align 4 -L(ashr_1): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $15, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -15(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $1, FLAGS - lea 1(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_1): - add $16, %edi - jg L(nibble_ashr_1) - -L(gobble_ashr_1): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $1, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_1) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $1, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_1) - - .p2align 4 -L(nibble_ashr_1): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xfffe, %esi - jnz L(ashr_1_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $15, REM - jbe L(ashr_1_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_1) - - .p2align 4 -L(ashr_1_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $1, %xmm0 - psrldq $1, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_2 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(14~15) n -14 1(15 +(n-14) - n) ashr_2 - */ - .p2align 4 -L(ashr_2): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $14, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -14(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $2, FLAGS - lea 2(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_2): - add $16, %edi - jg L(nibble_ashr_2) - -L(gobble_ashr_2): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $2, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_2) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $2, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_2) - - .p2align 4 -L(nibble_ashr_2): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xfffc, %esi - jnz L(ashr_2_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $14, REM - jbe L(ashr_2_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_2) - - .p2align 4 -L(ashr_2_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $2, %xmm0 - psrldq $2, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_3 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(13~15) n -13 2(15 +(n-13) - n) ashr_3 - */ - .p2align 4 -L(ashr_3): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $13, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -13(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $3, FLAGS - lea 3(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_3): - add $16, %edi - jg L(nibble_ashr_3) - -L(gobble_ashr_3): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $3, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_3) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $3, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_3) - - .p2align 4 -L(nibble_ashr_3): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xfff8, %esi - jnz L(ashr_3_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $13, REM - jbe L(ashr_3_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_3) - - .p2align 4 -L(ashr_3_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $3, %xmm0 - psrldq $3, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_4 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(12~15) n -12 3(15 +(n-12) - n) ashr_4 - */ - .p2align 4 -L(ashr_4): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $12, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -12(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $4, FLAGS - lea 4(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_4): - add $16, %edi - jg L(nibble_ashr_4) - -L(gobble_ashr_4): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $4, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_4) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $4, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_4) - - .p2align 4 -L(nibble_ashr_4): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xfff0, %esi - jnz L(ashr_4_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $12, REM - jbe L(ashr_4_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_4) - - .p2align 4 -L(ashr_4_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $4, %xmm0 - psrldq $4, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_5 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(11~15) n -11 4(15 +(n-11) - n) ashr_5 - */ - .p2align 4 -L(ashr_5): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $11, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -11(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $5, FLAGS - lea 5(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_5): - add $16, %edi - jg L(nibble_ashr_5) - -L(gobble_ashr_5): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $5, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_5) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $5, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_5) - - .p2align 4 -L(nibble_ashr_5): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xffe0, %esi - jnz L(ashr_5_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $11, REM - jbe L(ashr_5_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_5) - - .p2align 4 -L(ashr_5_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $5, %xmm0 - psrldq $5, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_6 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(10~15) n -10 5(15 +(n-10) - n) ashr_6 - */ - - .p2align 4 -L(ashr_6): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $10, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -10(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $6, FLAGS - lea 6(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_6): - add $16, %edi - jg L(nibble_ashr_6) - -L(gobble_ashr_6): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $6, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_6) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $6, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_6) - - .p2align 4 -L(nibble_ashr_6): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xffc0, %esi - jnz L(ashr_6_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $10, REM - jbe L(ashr_6_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_6) - - .p2align 4 -L(ashr_6_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $6, %xmm0 - psrldq $6, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_7 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(9~15) n - 9 6(15 +(n-9) - n) ashr_7 - */ - - .p2align 4 -L(ashr_7): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $9, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -9(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $7, FLAGS - lea 8(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_7): - add $16, %edi - jg L(nibble_ashr_7) - -L(gobble_ashr_7): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $7, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_7) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $7, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_7) - - .p2align 4 -L(nibble_ashr_7): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xff80, %esi - jnz L(ashr_7_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $9, REM - jbe L(ashr_7_exittail) -#endif - pxor %xmm0, %xmm0 - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_7) - - .p2align 4 -L(ashr_7_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $7, %xmm0 - psrldq $7, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_8 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(8~15) n - 8 7(15 +(n-8) - n) ashr_8 - */ - .p2align 4 -L(ashr_8): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $8, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -8(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $8, FLAGS - lea 8(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_8): - add $16, %edi - jg L(nibble_ashr_8) - -L(gobble_ashr_8): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $8, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_8) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $8, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_8) - - .p2align 4 -L(nibble_ashr_8): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xff00, %esi - jnz L(ashr_8_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $8, REM - jbe L(ashr_8_exittail) -#endif - pxor %xmm0, %xmm0 - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_8) - - .p2align 4 -L(ashr_8_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $8, %xmm0 - psrldq $8, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_9 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(7~15) n - 7 8(15 +(n-7) - n) ashr_9 - */ - .p2align 4 -L(ashr_9): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $7, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -7(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $9, FLAGS - lea 9(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_9): - add $16, %edi - jg L(nibble_ashr_9) - -L(gobble_ashr_9): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $9, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_9) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $9, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_9) - - .p2align 4 -L(nibble_ashr_9): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xfe00, %esi - jnz L(ashr_9_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $7, REM - jbe L(ashr_9_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_9) - - .p2align 4 -L(ashr_9_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $9, %xmm0 - psrldq $9, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_10 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(6~15) n - 6 9(15 +(n-6) - n) ashr_10 - */ - .p2align 4 -L(ashr_10): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $6, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -6(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $10, FLAGS - lea 10(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_10): - add $16, %edi - jg L(nibble_ashr_10) - -L(gobble_ashr_10): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $10, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_10) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $10, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_10) - - .p2align 4 -L(nibble_ashr_10): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xfc00, %esi - jnz L(ashr_10_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $6, REM - jbe L(ashr_10_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_10) - - .p2align 4 -L(ashr_10_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $10, %xmm0 - psrldq $10, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_11 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(5~15) n - 5 10(15 +(n-5) - n) ashr_11 - */ - .p2align 4 -L(ashr_11): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $5, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -5(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $11, FLAGS - lea 11(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_11): - add $16, %edi - jg L(nibble_ashr_11) - -L(gobble_ashr_11): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $11, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_11) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $11, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_11) - - .p2align 4 -L(nibble_ashr_11): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xf800, %esi - jnz L(ashr_11_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $5, REM - jbe L(ashr_11_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_11) - - .p2align 4 -L(ashr_11_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $11, %xmm0 - psrldq $11, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_12 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(4~15) n - 4 11(15 +(n-4) - n) ashr_12 - */ - .p2align 4 -L(ashr_12): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $4, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -4(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $12, FLAGS - lea 12(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_12): - add $16, %edi - jg L(nibble_ashr_12) - -L(gobble_ashr_12): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $12, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_12) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $12, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_12) - - .p2align 4 -L(nibble_ashr_12): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xf000, %esi - jnz L(ashr_12_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $4, REM - jbe L(ashr_12_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_12) - - .p2align 4 -L(ashr_12_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $12, %xmm0 - psrldq $12, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_13 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(3~15) n - 3 12(15 +(n-3) - n) ashr_13 - */ - .p2align 4 -L(ashr_13): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $3, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -3(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $13, FLAGS - lea 13(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_13): - add $16, %edi - jg L(nibble_ashr_13) - -L(gobble_ashr_13): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $13, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_13) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $13, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_13) - - .p2align 4 -L(nibble_ashr_13): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xe000, %esi - jnz L(ashr_13_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $3, REM - jbe L(ashr_13_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_13) - - .p2align 4 -L(ashr_13_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $13, %xmm0 - psrldq $13, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_14 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(2~15) n - 2 13(15 +(n-2) - n) ashr_14 - */ - .p2align 4 -L(ashr_14): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $2, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -2(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $14, FLAGS - lea 14(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_14): - add $16, %edi - jg L(nibble_ashr_14) - -L(gobble_ashr_14): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $14, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_14) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $14, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_14) - - .p2align 4 -L(nibble_ashr_14): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0xc000, %esi - jnz L(ashr_14_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $2, REM - jbe L(ashr_14_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_14) - - .p2align 4 -L(ashr_14_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $14, %xmm0 - psrldq $14, %xmm3 - jmp L(aftertail) - -/* - * The following cases will be handled by ashr_14 - * ecx(offset of esi) eax(offset of edi) relative offset corresponding case - * n(1~15) n - 1 14(15 +(n-1) - n) ashr_15 - */ - - .p2align 4 -L(ashr_15): - mov $0xffff, %esi - pxor %xmm0, %xmm0 - movdqa (%edx), %xmm2 - movdqa (%eax), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $1, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %edi - shr %cl, %esi - shr %cl, %edi - sub %edi, %esi - lea -1(%ecx), %edi - jnz L(less32bytes) - - UPDATE_STRNCMP_COUNTER - - movdqa (%edx), %xmm3 - pxor %xmm0, %xmm0 - mov $16, %ecx - orl $15, FLAGS - lea 15(%edx), %edi - and $0xfff, %edi - sub $0x1000, %edi - - .p2align 4 -L(loop_ashr_15): - add $16, %edi - jg L(nibble_ashr_15) - -L(gobble_ashr_15): - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $15, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - - add $16, %edi - jg L(nibble_ashr_15) - - movdqa (%eax, %ecx), %xmm1 - movdqa (%edx, %ecx), %xmm2 - movdqa %xmm2, %xmm4 - - palignr $15, %xmm3, %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - sub $0xffff, %esi - jnz L(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $16, REM - lea -16(REM), REM - jbe L(more8byteseq) -#endif - add $16, %ecx - movdqa %xmm4, %xmm3 - jmp L(loop_ashr_15) - - .p2align 4 -L(nibble_ashr_15): - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %esi - test $0x8000, %esi - jnz L(ashr_15_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $1, REM - jbe L(ashr_15_exittail) -#endif - pxor %xmm0, %xmm0 - sub $0x1000, %edi - jmp L(gobble_ashr_15) - - .p2align 4 -L(ashr_15_exittail): - movdqa (%eax, %ecx), %xmm1 - psrldq $15, %xmm0 - psrldq $15, %xmm3 - jmp L(aftertail) - - .p2align 4 -L(aftertail): - TOLOWER (%xmm1, %xmm3) - pcmpeqb %xmm3, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %esi - not %esi -L(exit): - mov FLAGS, %edi - and $0x1f, %edi - lea -16(%edi, %ecx), %edi -L(less32bytes): - add %edi, %edx - add %ecx, %eax - testl $0x20, FLAGS - jz L(ret2) - xchg %eax, %edx - - .p2align 4 -L(ret2): - mov %esi, %ecx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - addl $4, %esp - cfi_adjust_cfa_offset (-4) -#endif - POP (%esi) - POP (%edi) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - POP (FLAGS) -#endif -L(less16bytes): - test %cl, %cl - jz L(2next_8_bytes) - - test $0x01, %cl - jnz L(Byte0) - - test $0x02, %cl - jnz L(Byte1) - - test $0x04, %cl - jnz L(Byte2) - - test $0x08, %cl - jnz L(Byte3) - - test $0x10, %cl - jnz L(Byte4) - - test $0x20, %cl - jnz L(Byte5) - - test $0x40, %cl - jnz L(Byte6) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $7, REM - jbe L(eq) -#endif - - movzx 7(%eax), %ecx - movzx 7(%edx), %eax -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(Byte0): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $0, REM - jbe L(eq) -#endif - movzx (%eax), %ecx - movzx (%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(Byte1): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $1, REM - jbe L(eq) -#endif - movzx 1(%eax), %ecx - movzx 1(%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(Byte2): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $2, REM - jbe L(eq) -#endif - movzx 2(%eax), %ecx - movzx 2(%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(Byte3): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $3, REM - jbe L(eq) -#endif - movzx 3(%eax), %ecx - movzx 3(%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(Byte4): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $4, REM - jbe L(eq) -#endif - movzx 4(%eax), %ecx - movzx 4(%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(Byte5): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $5, REM - jbe L(eq) -#endif - movzx 5(%eax), %ecx - movzx 5(%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(Byte6): -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $6, REM - jbe L(eq) -#endif - movzx 6(%eax), %ecx - movzx 6(%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -L(2next_8_bytes): - add $8, %eax - add $8, %edx -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $8, REM - lea -8(REM), REM - jbe L(eq) -#endif - - test $0x01, %ch - jnz L(Byte0) - - test $0x02, %ch - jnz L(Byte1) - - test $0x04, %ch - jnz L(Byte2) - - test $0x08, %ch - jnz L(Byte3) - - test $0x10, %ch - jnz L(Byte4) - - test $0x20, %ch - jnz L(Byte5) - - test $0x40, %ch - jnz L(Byte6) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $7, REM - jbe L(eq) -#endif - movzx 7(%eax), %ecx - movzx 7(%edx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%eax,4), %eax -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%eax,4), %eax -# endif -#endif - - sub %ecx, %eax - RETURN - -#ifdef USE_AS_STRNCMP -L(neq_sncmp): -#endif -L(neq): - mov $1, %eax - ja L(neq_bigger) - neg %eax -L(neq_bigger): -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - addl $4, %esp - cfi_adjust_cfa_offset (-4) -#endif -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - POP (REM) -#endif -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - POP (%ebx) -# endif -#endif - ret - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - .p2align 4 - cfi_restore_state -L(more8byteseq): - -# ifdef USE_AS_STRNCASECMP_L - addl $4, %esp - cfi_adjust_cfa_offset (-4) -# endif - POP (%esi) - POP (%edi) -# ifdef USE_AS_STRNCMP - POP (FLAGS) -# endif -#endif - -#ifdef USE_AS_STRNCMP -L(eq_sncmp): -#endif -L(eq): - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - POP (REM) -#endif -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef PIC - POP (%ebx) -# endif -#endif - xorl %eax, %eax - ret - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - .p2align 4 -# if defined USE_AS_STRNCASECMP_L && defined PIC - CFI_PUSH (%ebx) -# endif - CFI_PUSH (REM) -L(less16bytes_sncmp): -# ifdef USE_AS_STRNCASECMP_L - PUSH (%esi) -# endif - test REM, REM - jz L(eq_sncmp) - - movzbl (%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl (%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, (%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $1, REM - je L(eq_sncmp) - - movzbl 1(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 1(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 1(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $2, REM - je L(eq_sncmp) - - movzbl 2(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 2(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 2(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $3, REM - je L(eq_sncmp) - - movzbl 3(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 3(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 3(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $4, REM - je L(eq_sncmp) - - movzbl 4(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 4(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 4(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $5, REM - je L(eq_sncmp) - - movzbl 5(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 5(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 5(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $6, REM - je L(eq_sncmp) - - movzbl 6(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 6(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 6(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $7, REM - je L(eq_sncmp) - - movzbl 7(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 7(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 7(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - - cmp $8, REM - je L(eq_sncmp) - - movzbl 8(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 8(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 8(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $9, REM - je L(eq_sncmp) - - movzbl 9(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 9(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 9(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $10, REM - je L(eq_sncmp) - - movzbl 10(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 10(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 10(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $11, REM - je L(eq_sncmp) - - movzbl 11(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 11(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 11(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - - cmp $12, REM - je L(eq_sncmp) - - movzbl 12(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 12(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 12(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $13, REM - je L(eq_sncmp) - - movzbl 13(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 13(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 13(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $14, REM - je L(eq_sncmp) - - movzbl 14(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 14(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 14(%edx) -# endif - jne L(neq_sncmp) - test %cl, %cl - je L(eq_sncmp) - - cmp $15, REM - je L(eq_sncmp) - - movzbl 15(%eax), %ecx -# ifdef USE_AS_STRNCASECMP_L - movzbl 15(%edx), %esi -# ifdef PIC - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower@GOTOFF+128*4(%ebx,%esi,4), %esi -# else - movl _nl_C_LC_CTYPE_tolower+128*4(,%ecx,4), %ecx - movl _nl_C_LC_CTYPE_tolower+128*4(,%esi,4), %esi -# endif - cmpl %ecx, %esi -# else - cmpb %cl, 15(%edx) -# endif - jne L(neq_sncmp) - -# ifdef USE_AS_STRNCASECMP_L -L(eq_sncmp): - POP (%esi) -# endif - POP (REM) -# if defined USE_AS_STRNCASECMP_L && defined PIC - POP (%ebx) -# endif - xor %eax, %eax - ret - -# ifdef USE_AS_STRNCASECMP_L - .p2align 4 -# ifdef PIC - CFI_PUSH (%ebx) -# endif - CFI_PUSH (REM) - CFI_PUSH (%esi) -L(neq_sncmp): - mov $1, %eax - mov $-1, %edx - cmovna %edx, %eax - POP (%esi) - POP (REM) -# ifdef PIC - POP (%ebx) -# endif - ret -# endif -#endif - -END (STRCMP) - -#endif diff --git a/sysdeps/i386/i686/multiarch/strcmp.S b/sysdeps/i386/i686/multiarch/strcmp.S deleted file mode 100644 index 56de25a4b7..0000000000 --- a/sysdeps/i386/i686/multiarch/strcmp.S +++ /dev/null @@ -1,95 +0,0 @@ -/* Multiple versions of strcmp - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifdef USE_AS_STRNCMP -# define STRCMP strncmp -# define __GI_STRCMP __GI_strncmp -# define __STRCMP_IA32 __strncmp_ia32 -# define __STRCMP_SSSE3 __strncmp_ssse3 -# define __STRCMP_SSE4_2 __strncmp_sse4_2 -#elif defined USE_AS_STRCASECMP_L -# define STRCMP __strcasecmp_l -# define __GI_STRCMP __GI_strcasecmp_l -# define __STRCMP_IA32 __strcasecmp_l_ia32 -# define __STRCMP_SSSE3 __strcasecmp_l_ssse3 -# define __STRCMP_SSE4_2 __strcasecmp_l_sse4_2 -#elif defined USE_AS_STRNCASECMP_L -# define STRCMP __strncasecmp_l -# define __GI_STRCMP __GI_strncasecmp_l -# define __STRCMP_IA32 __strncasecmp_l_ia32 -# define __STRCMP_SSSE3 __strncasecmp_l_ssse3 -# define __STRCMP_SSE4_2 __strncasecmp_l_sse4_2 -#else -# define STRCMP strcmp -# define __GI_STRCMP __GI_strcmp -# define __STRCMP_IA32 __strcmp_ia32 -# define __STRCMP_SSSE3 __strcmp_ssse3 -# define __STRCMP_SSE4_2 __strcmp_sse4_2 -#endif - -/* Define multiple versions only for the definition in libc. Don't - define multiple versions for strncmp in static library since we - need strncmp before the initialization happened. */ -#if (defined SHARED || !defined USE_AS_STRNCMP) && IS_IN (libc) - .text -ENTRY(STRCMP) - .type STRCMP, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__STRCMP_IA32) - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (__STRCMP_SSSE3) - HAS_CPU_FEATURE (SSE4_2) - jz 2f - HAS_ARCH_FEATURE (Slow_SSE4_2) - jnz 2f - LOAD_FUNC_GOT_EAX (__STRCMP_SSE4_2) -2: ret -END(STRCMP) - -# undef ENTRY -# define ENTRY(name) \ - .type __STRCMP_IA32, @function; \ - .p2align 4; \ - .globl __STRCMP_IA32; \ - .hidden __STRCMP_IA32; \ - __STRCMP_IA32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __STRCMP_IA32, .-__STRCMP_IA32 - -# ifdef SHARED -# undef libc_hidden_builtin_def -/* IFUNC doesn't work with the hidden functions in shared library since - they will be called without setting up EBX needed for PLT which is - used by IFUNC. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_STRCMP; __GI_STRCMP = __STRCMP_IA32 -# endif -#endif - -#if !defined USE_AS_STRNCMP && !defined USE_AS_STRCASECMP_L \ - && !defined USE_AS_STRNCASECMP_L -# include "../strcmp.S" -#endif diff --git a/sysdeps/i386/i686/multiarch/strcpy-sse2.S b/sysdeps/i386/i686/multiarch/strcpy-sse2.S deleted file mode 100644 index ed627a5f62..0000000000 --- a/sysdeps/i386/i686/multiarch/strcpy-sse2.S +++ /dev/null @@ -1,2250 +0,0 @@ -/* strcpy with SSE2 and unaligned load - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#if IS_IN (libc) - -# include - - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# ifndef STRCPY -# define STRCPY __strcpy_sse2 -# endif - -# define STR1 PARMS -# define STR2 STR1+4 -# define LEN STR2+4 - -# ifdef USE_AS_STRNCPY -# define PARMS 16 -# define ENTRANCE PUSH(%ebx); PUSH(%esi); PUSH(%edi) -# define RETURN POP(%edi); POP(%esi); POP(%ebx); ret; \ - CFI_PUSH(%ebx); CFI_PUSH(%esi); CFI_PUSH(%edi); - -# ifdef SHARED -# define JMPTBL(I, B) I - B - -/* Load an entry in a jump table into ECX and branch to it. TABLE is a - jump table with relative offsets. - INDEX is a register contains the index into the jump table. - SCALE is the scale of INDEX. */ - -# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ - /* We first load PC into ECX. */ \ - SETUP_PIC_REG(cx); \ - /* Get the address of the jump table. */ \ - addl $(TABLE - .), %ecx; \ - /* Get the entry and convert the relative offset to the \ - absolute address. */ \ - addl (%ecx,INDEX,SCALE), %ecx; \ - /* We loaded the jump table and adjusted ECX. Go. */ \ - jmp *%ecx -# else -# define JMPTBL(I, B) I - -/* Branch to an entry in a jump table. TABLE is a jump table with - absolute offsets. INDEX is a register contains the index into the - jump table. SCALE is the scale of INDEX. */ - -# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ - jmp *TABLE(,INDEX,SCALE) -# endif - -.text -ENTRY (STRCPY) - ENTRANCE - mov STR1(%esp), %edi - mov STR2(%esp), %esi - movl LEN(%esp), %ebx - test %ebx, %ebx - jz L(ExitZero) - - mov %esi, %ecx -# ifndef USE_AS_STPCPY - mov %edi, %eax /* save result */ -# endif - and $15, %ecx - jz L(SourceStringAlignmentZero) - - and $-16, %esi - pxor %xmm0, %xmm0 - pxor %xmm1, %xmm1 - - pcmpeqb (%esi), %xmm1 - add %ecx, %ebx - pmovmskb %xmm1, %edx - shr %cl, %edx -# ifdef USE_AS_STPCPY - cmp $16, %ebx - jbe L(CopyFrom1To16BytesTailCase2OrCase3) -# else - cmp $17, %ebx - jbe L(CopyFrom1To16BytesTailCase2OrCase3) -# endif - test %edx, %edx - jnz L(CopyFrom1To16BytesTail) - - pcmpeqb 16(%esi), %xmm0 - pmovmskb %xmm0, %edx -# ifdef USE_AS_STPCPY - cmp $32, %ebx - jbe L(CopyFrom1To32BytesCase2OrCase3) -# else - cmp $33, %ebx - jbe L(CopyFrom1To32BytesCase2OrCase3) -# endif - test %edx, %edx - jnz L(CopyFrom1To32Bytes) - - movdqu (%esi, %ecx), %xmm1 /* copy 16 bytes */ - movdqu %xmm1, (%edi) - - sub %ecx, %edi - -/* If source address alignment != destination address alignment */ - .p2align 4 -L(Unalign16Both): - mov $16, %ecx - movdqa (%esi, %ecx), %xmm1 - movaps 16(%esi, %ecx), %xmm2 - movdqu %xmm1, (%edi, %ecx) - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %edx - add $16, %ecx - sub $48, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %edx, %edx - jnz L(CopyFrom1To16BytesUnalignedXmm2) - - movaps 16(%esi, %ecx), %xmm3 - movdqu %xmm2, (%edi, %ecx) - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %edx - add $16, %ecx - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %edx, %edx - jnz L(CopyFrom1To16BytesUnalignedXmm3) - - movaps 16(%esi, %ecx), %xmm4 - movdqu %xmm3, (%edi, %ecx) - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm0, %edx - add $16, %ecx - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %edx, %edx - jnz L(CopyFrom1To16BytesUnalignedXmm4) - - movaps 16(%esi, %ecx), %xmm1 - movdqu %xmm4, (%edi, %ecx) - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %edx - add $16, %ecx - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %edx, %edx - jnz L(CopyFrom1To16BytesUnalignedXmm1) - - movaps 16(%esi, %ecx), %xmm2 - movdqu %xmm1, (%edi, %ecx) - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %edx - add $16, %ecx - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %edx, %edx - jnz L(CopyFrom1To16BytesUnalignedXmm2) - - movaps 16(%esi, %ecx), %xmm3 - movdqu %xmm2, (%edi, %ecx) - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %edx - add $16, %ecx - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %edx, %edx - jnz L(CopyFrom1To16BytesUnalignedXmm3) - - movdqu %xmm3, (%edi, %ecx) - mov %esi, %edx - lea 16(%esi, %ecx), %esi - and $-0x40, %esi - sub %esi, %edx - sub %edx, %edi - lea 128(%ebx, %edx), %ebx - -L(Unaligned64Loop): - movaps (%esi), %xmm2 - movaps %xmm2, %xmm4 - movaps 16(%esi), %xmm5 - movaps 32(%esi), %xmm3 - movaps %xmm3, %xmm6 - movaps 48(%esi), %xmm7 - pminub %xmm5, %xmm2 - pminub %xmm7, %xmm3 - pminub %xmm2, %xmm3 - pcmpeqb %xmm0, %xmm3 - pmovmskb %xmm3, %edx - sub $64, %ebx - jbe L(UnalignedLeaveCase2OrCase3) - test %edx, %edx - jnz L(Unaligned64Leave) -L(Unaligned64Loop_start): - add $64, %edi - add $64, %esi - movdqu %xmm4, -64(%edi) - movaps (%esi), %xmm2 - movdqa %xmm2, %xmm4 - movdqu %xmm5, -48(%edi) - movaps 16(%esi), %xmm5 - pminub %xmm5, %xmm2 - movaps 32(%esi), %xmm3 - movdqu %xmm6, -32(%edi) - movaps %xmm3, %xmm6 - movdqu %xmm7, -16(%edi) - movaps 48(%esi), %xmm7 - pminub %xmm7, %xmm3 - pminub %xmm2, %xmm3 - pcmpeqb %xmm0, %xmm3 - pmovmskb %xmm3, %edx - sub $64, %ebx - jbe L(UnalignedLeaveCase2OrCase3) - test %edx, %edx - jz L(Unaligned64Loop_start) -L(Unaligned64Leave): - pxor %xmm1, %xmm1 - - pcmpeqb %xmm4, %xmm0 - pcmpeqb %xmm5, %xmm1 - pmovmskb %xmm0, %edx - pmovmskb %xmm1, %ecx - test %edx, %edx - jnz L(CopyFrom1To16BytesUnaligned_0) - test %ecx, %ecx - jnz L(CopyFrom1To16BytesUnaligned_16) - - pcmpeqb %xmm6, %xmm0 - pcmpeqb %xmm7, %xmm1 - pmovmskb %xmm0, %edx - pmovmskb %xmm1, %ecx - test %edx, %edx - jnz L(CopyFrom1To16BytesUnaligned_32) - - bsf %ecx, %edx - movdqu %xmm4, (%edi) - movdqu %xmm5, 16(%edi) - movdqu %xmm6, 32(%edi) -# ifdef USE_AS_STPCPY - lea 48(%edi, %edx), %eax -# endif - movdqu %xmm7, 48(%edi) - add $15, %ebx - sub %edx, %ebx - lea 49(%edi, %edx), %edi - jmp L(StrncpyFillTailWithZero) - -/* If source address alignment == destination address alignment */ - -L(SourceStringAlignmentZero): - pxor %xmm0, %xmm0 - movdqa (%esi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %edx -# ifdef USE_AS_STPCPY - cmp $16, %ebx - jbe L(CopyFrom1To16BytesTail1Case2OrCase3) -# else - cmp $17, %ebx - jbe L(CopyFrom1To16BytesTail1Case2OrCase3) -# endif - test %edx, %edx - jnz L(CopyFrom1To16BytesTail1) - - pcmpeqb 16(%esi), %xmm0 - movdqu %xmm1, (%edi) - pmovmskb %xmm0, %edx -# ifdef USE_AS_STPCPY - cmp $32, %ebx - jbe L(CopyFrom1To32Bytes1Case2OrCase3) -# else - cmp $33, %ebx - jbe L(CopyFrom1To32Bytes1Case2OrCase3) -# endif - test %edx, %edx - jnz L(CopyFrom1To32Bytes1) - - jmp L(Unalign16Both) - -/*-----------------End of main part---------------------------*/ - -/* Case1 */ - .p2align 4 -L(CopyFrom1To16BytesTail): - sub %ecx, %ebx - add %ecx, %esi - bsf %edx, %edx - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) - - .p2align 4 -L(CopyFrom1To32Bytes1): - add $16, %esi - add $16, %edi - sub $16, %ebx -L(CopyFrom1To16BytesTail1): - bsf %edx, %edx - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) - - .p2align 4 -L(CopyFrom1To32Bytes): - sub %ecx, %ebx - bsf %edx, %edx - add %ecx, %esi - add $16, %edx - sub %ecx, %edx - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) - - .p2align 4 -L(CopyFrom1To16BytesUnaligned_0): - bsf %edx, %edx -# ifdef USE_AS_STPCPY - lea (%edi, %edx), %eax -# endif - movdqu %xmm4, (%edi) - add $63, %ebx - sub %edx, %ebx - lea 1(%edi, %edx), %edi - jmp L(StrncpyFillTailWithZero) - - .p2align 4 -L(CopyFrom1To16BytesUnaligned_16): - bsf %ecx, %edx - movdqu %xmm4, (%edi) -# ifdef USE_AS_STPCPY - lea 16(%edi, %edx), %eax -# endif - movdqu %xmm5, 16(%edi) - add $47, %ebx - sub %edx, %ebx - lea 17(%edi, %edx), %edi - jmp L(StrncpyFillTailWithZero) - - .p2align 4 -L(CopyFrom1To16BytesUnaligned_32): - bsf %edx, %edx - movdqu %xmm4, (%edi) - movdqu %xmm5, 16(%edi) -# ifdef USE_AS_STPCPY - lea 32(%edi, %edx), %eax -# endif - movdqu %xmm6, 32(%edi) - add $31, %ebx - sub %edx, %ebx - lea 33(%edi, %edx), %edi - jmp L(StrncpyFillTailWithZero) - - .p2align 4 -L(CopyFrom1To16BytesUnalignedXmm6): - movdqu %xmm6, (%edi, %ecx) - jmp L(CopyFrom1To16BytesXmmExit) - - .p2align 4 -L(CopyFrom1To16BytesUnalignedXmm5): - movdqu %xmm5, (%edi, %ecx) - jmp L(CopyFrom1To16BytesXmmExit) - - .p2align 4 -L(CopyFrom1To16BytesUnalignedXmm4): - movdqu %xmm4, (%edi, %ecx) - jmp L(CopyFrom1To16BytesXmmExit) - - .p2align 4 -L(CopyFrom1To16BytesUnalignedXmm3): - movdqu %xmm3, (%edi, %ecx) - jmp L(CopyFrom1To16BytesXmmExit) - - .p2align 4 -L(CopyFrom1To16BytesUnalignedXmm1): - movdqu %xmm1, (%edi, %ecx) - jmp L(CopyFrom1To16BytesXmmExit) - - .p2align 4 -L(CopyFrom1To16BytesExit): - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) - -/* Case2 */ - - .p2align 4 -L(CopyFrom1To16BytesCase2): - add $16, %ebx - add %ecx, %edi - add %ecx, %esi - bsf %edx, %edx - cmp %ebx, %edx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) - - .p2align 4 -L(CopyFrom1To32BytesCase2): - sub %ecx, %ebx - add %ecx, %esi - bsf %edx, %edx - add $16, %edx - sub %ecx, %edx - cmp %ebx, %edx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) - -L(CopyFrom1To16BytesTailCase2): - sub %ecx, %ebx - add %ecx, %esi - bsf %edx, %edx - cmp %ebx, %edx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) - -L(CopyFrom1To16BytesTail1Case2): - bsf %edx, %edx - cmp %ebx, %edx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) - -/* Case2 or Case3, Case3 */ - - .p2align 4 -L(CopyFrom1To16BytesCase2OrCase3): - test %edx, %edx - jnz L(CopyFrom1To16BytesCase2) -L(CopyFrom1To16BytesCase3): - add $16, %ebx - add %ecx, %edi - add %ecx, %esi - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) - - .p2align 4 -L(CopyFrom1To32BytesCase2OrCase3): - test %edx, %edx - jnz L(CopyFrom1To32BytesCase2) - sub %ecx, %ebx - add %ecx, %esi - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) - - .p2align 4 -L(CopyFrom1To16BytesTailCase2OrCase3): - test %edx, %edx - jnz L(CopyFrom1To16BytesTailCase2) - sub %ecx, %ebx - add %ecx, %esi - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) - - .p2align 4 -L(CopyFrom1To32Bytes1Case2OrCase3): - add $16, %edi - add $16, %esi - sub $16, %ebx -L(CopyFrom1To16BytesTail1Case2OrCase3): - test %edx, %edx - jnz L(CopyFrom1To16BytesTail1Case2) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) - - .p2align 4 -L(Exit0): -# ifdef USE_AS_STPCPY - mov %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit1): - movb %dh, (%edi) -# ifdef USE_AS_STPCPY - lea (%edi), %eax -# endif - sub $1, %ebx - lea 1(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit2): - movw (%esi), %dx - movw %dx, (%edi) -# ifdef USE_AS_STPCPY - lea 1(%edi), %eax -# endif - sub $2, %ebx - lea 2(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit3): - movw (%esi), %cx - movw %cx, (%edi) - movb %dh, 2(%edi) -# ifdef USE_AS_STPCPY - lea 2(%edi), %eax -# endif - sub $3, %ebx - lea 3(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit4): - movl (%esi), %edx - movl %edx, (%edi) -# ifdef USE_AS_STPCPY - lea 3(%edi), %eax -# endif - sub $4, %ebx - lea 4(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit5): - movl (%esi), %ecx - movb %dh, 4(%edi) - movl %ecx, (%edi) -# ifdef USE_AS_STPCPY - lea 4(%edi), %eax -# endif - sub $5, %ebx - lea 5(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit6): - movl (%esi), %ecx - movw 4(%esi), %dx - movl %ecx, (%edi) - movw %dx, 4(%edi) -# ifdef USE_AS_STPCPY - lea 5(%edi), %eax -# endif - sub $6, %ebx - lea 6(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit7): - movl (%esi), %ecx - movl 3(%esi), %edx - movl %ecx, (%edi) - movl %edx, 3(%edi) -# ifdef USE_AS_STPCPY - lea 6(%edi), %eax -# endif - sub $7, %ebx - lea 7(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit8): - movlpd (%esi), %xmm0 - movlpd %xmm0, (%edi) -# ifdef USE_AS_STPCPY - lea 7(%edi), %eax -# endif - sub $8, %ebx - lea 8(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit9): - movlpd (%esi), %xmm0 - movb %dh, 8(%edi) - movlpd %xmm0, (%edi) -# ifdef USE_AS_STPCPY - lea 8(%edi), %eax -# endif - sub $9, %ebx - lea 9(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit10): - movlpd (%esi), %xmm0 - movw 8(%esi), %dx - movlpd %xmm0, (%edi) - movw %dx, 8(%edi) -# ifdef USE_AS_STPCPY - lea 9(%edi), %eax -# endif - sub $10, %ebx - lea 10(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit11): - movlpd (%esi), %xmm0 - movl 7(%esi), %edx - movlpd %xmm0, (%edi) - movl %edx, 7(%edi) -# ifdef USE_AS_STPCPY - lea 10(%edi), %eax -# endif - sub $11, %ebx - lea 11(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit12): - movlpd (%esi), %xmm0 - movl 8(%esi), %edx - movlpd %xmm0, (%edi) - movl %edx, 8(%edi) -# ifdef USE_AS_STPCPY - lea 11(%edi), %eax -# endif - sub $12, %ebx - lea 12(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit13): - movlpd (%esi), %xmm0 - movlpd 5(%esi), %xmm1 - movlpd %xmm0, (%edi) - movlpd %xmm1, 5(%edi) -# ifdef USE_AS_STPCPY - lea 12(%edi), %eax -# endif - sub $13, %ebx - lea 13(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit14): - movlpd (%esi), %xmm0 - movlpd 6(%esi), %xmm1 - movlpd %xmm0, (%edi) - movlpd %xmm1, 6(%edi) -# ifdef USE_AS_STPCPY - lea 13(%edi), %eax -# endif - sub $14, %ebx - lea 14(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit15): - movlpd (%esi), %xmm0 - movlpd 7(%esi), %xmm1 - movlpd %xmm0, (%edi) - movlpd %xmm1, 7(%edi) -# ifdef USE_AS_STPCPY - lea 14(%edi), %eax -# endif - sub $15, %ebx - lea 15(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit16): - movdqu (%esi), %xmm0 - movdqu %xmm0, (%edi) -# ifdef USE_AS_STPCPY - lea 15(%edi), %eax -# endif - sub $16, %ebx - lea 16(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit17): - movdqu (%esi), %xmm0 - movdqu %xmm0, (%edi) - movb %dh, 16(%edi) -# ifdef USE_AS_STPCPY - lea 16(%edi), %eax -# endif - sub $17, %ebx - lea 17(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit18): - movdqu (%esi), %xmm0 - movw 16(%esi), %cx - movdqu %xmm0, (%edi) - movw %cx, 16(%edi) -# ifdef USE_AS_STPCPY - lea 17(%edi), %eax -# endif - sub $18, %ebx - lea 18(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit19): - movdqu (%esi), %xmm0 - movl 15(%esi), %ecx - movdqu %xmm0, (%edi) - movl %ecx, 15(%edi) -# ifdef USE_AS_STPCPY - lea 18(%edi), %eax -# endif - sub $19, %ebx - lea 19(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit20): - movdqu (%esi), %xmm0 - movl 16(%esi), %ecx - movdqu %xmm0, (%edi) - movl %ecx, 16(%edi) -# ifdef USE_AS_STPCPY - lea 19(%edi), %eax -# endif - sub $20, %ebx - lea 20(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit21): - movdqu (%esi), %xmm0 - movl 16(%esi), %ecx - movdqu %xmm0, (%edi) - movl %ecx, 16(%edi) - movb %dh, 20(%edi) -# ifdef USE_AS_STPCPY - lea 20(%edi), %eax -# endif - sub $21, %ebx - lea 21(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit22): - movdqu (%esi), %xmm0 - movlpd 14(%esi), %xmm3 - movdqu %xmm0, (%edi) - movlpd %xmm3, 14(%edi) -# ifdef USE_AS_STPCPY - lea 21(%edi), %eax -# endif - sub $22, %ebx - lea 22(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit23): - movdqu (%esi), %xmm0 - movlpd 15(%esi), %xmm3 - movdqu %xmm0, (%edi) - movlpd %xmm3, 15(%edi) -# ifdef USE_AS_STPCPY - lea 22(%edi), %eax -# endif - sub $23, %ebx - lea 23(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit24): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 - movdqu %xmm0, (%edi) - movlpd %xmm2, 16(%edi) -# ifdef USE_AS_STPCPY - lea 23(%edi), %eax -# endif - sub $24, %ebx - lea 24(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit25): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 - movdqu %xmm0, (%edi) - movlpd %xmm2, 16(%edi) - movb %dh, 24(%edi) -# ifdef USE_AS_STPCPY - lea 24(%edi), %eax -# endif - sub $25, %ebx - lea 25(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit26): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 - movw 24(%esi), %cx - movdqu %xmm0, (%edi) - movlpd %xmm2, 16(%edi) - movw %cx, 24(%edi) -# ifdef USE_AS_STPCPY - lea 25(%edi), %eax -# endif - sub $26, %ebx - lea 26(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit27): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 - movl 23(%esi), %ecx - movdqu %xmm0, (%edi) - movlpd %xmm2, 16(%edi) - movl %ecx, 23(%edi) -# ifdef USE_AS_STPCPY - lea 26(%edi), %eax -# endif - sub $27, %ebx - lea 27(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit28): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 - movl 24(%esi), %ecx - movdqu %xmm0, (%edi) - movlpd %xmm2, 16(%edi) - movl %ecx, 24(%edi) -# ifdef USE_AS_STPCPY - lea 27(%edi), %eax -# endif - sub $28, %ebx - lea 28(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit29): - movdqu (%esi), %xmm0 - movdqu 13(%esi), %xmm2 - movdqu %xmm0, (%edi) - movdqu %xmm2, 13(%edi) -# ifdef USE_AS_STPCPY - lea 28(%edi), %eax -# endif - sub $29, %ebx - lea 29(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit30): - movdqu (%esi), %xmm0 - movdqu 14(%esi), %xmm2 - movdqu %xmm0, (%edi) - movdqu %xmm2, 14(%edi) -# ifdef USE_AS_STPCPY - lea 29(%edi), %eax -# endif - sub $30, %ebx - lea 30(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - - .p2align 4 -L(Exit31): - movdqu (%esi), %xmm0 - movdqu 15(%esi), %xmm2 - movdqu %xmm0, (%edi) - movdqu %xmm2, 15(%edi) -# ifdef USE_AS_STPCPY - lea 30(%edi), %eax -# endif - sub $31, %ebx - lea 31(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(Exit32): - movdqu (%esi), %xmm0 - movdqu 16(%esi), %xmm2 - movdqu %xmm0, (%edi) - movdqu %xmm2, 16(%edi) -# ifdef USE_AS_STPCPY - lea 31(%edi), %eax -# endif - sub $32, %ebx - lea 32(%edi), %edi - jnz L(StrncpyFillTailWithZero) - RETURN - - .p2align 4 -L(StrncpyExit1): - movb (%esi), %dl - movb %dl, (%edi) -# ifdef USE_AS_STPCPY - lea 1(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit2): - movw (%esi), %dx - movw %dx, (%edi) -# ifdef USE_AS_STPCPY - lea 2(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit3): - movw (%esi), %cx - movb 2(%esi), %dl - movw %cx, (%edi) - movb %dl, 2(%edi) -# ifdef USE_AS_STPCPY - lea 3(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit4): - movl (%esi), %edx - movl %edx, (%edi) -# ifdef USE_AS_STPCPY - lea 4(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit5): - movl (%esi), %ecx - movb 4(%esi), %dl - movl %ecx, (%edi) - movb %dl, 4(%edi) -# ifdef USE_AS_STPCPY - lea 5(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit6): - movl (%esi), %ecx - movw 4(%esi), %dx - movl %ecx, (%edi) - movw %dx, 4(%edi) -# ifdef USE_AS_STPCPY - lea 6(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit7): - movl (%esi), %ecx - movl 3(%esi), %edx - movl %ecx, (%edi) - movl %edx, 3(%edi) -# ifdef USE_AS_STPCPY - lea 7(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit8): - movlpd (%esi), %xmm0 - movlpd %xmm0, (%edi) -# ifdef USE_AS_STPCPY - lea 8(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit9): - movlpd (%esi), %xmm0 - movb 8(%esi), %dl - movlpd %xmm0, (%edi) - movb %dl, 8(%edi) -# ifdef USE_AS_STPCPY - lea 9(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit10): - movlpd (%esi), %xmm0 - movw 8(%esi), %dx - movlpd %xmm0, (%edi) - movw %dx, 8(%edi) -# ifdef USE_AS_STPCPY - lea 10(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit11): - movlpd (%esi), %xmm0 - movl 7(%esi), %edx - movlpd %xmm0, (%edi) - movl %edx, 7(%edi) -# ifdef USE_AS_STPCPY - lea 11(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit12): - movlpd (%esi), %xmm0 - movl 8(%esi), %edx - movlpd %xmm0, (%edi) - movl %edx, 8(%edi) -# ifdef USE_AS_STPCPY - lea 12(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit13): - movlpd (%esi), %xmm0 - movlpd 5(%esi), %xmm1 - movlpd %xmm0, (%edi) - movlpd %xmm1, 5(%edi) -# ifdef USE_AS_STPCPY - lea 13(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit14): - movlpd (%esi), %xmm0 - movlpd 6(%esi), %xmm1 - movlpd %xmm0, (%edi) - movlpd %xmm1, 6(%edi) -# ifdef USE_AS_STPCPY - lea 14(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit15): - movlpd (%esi), %xmm0 - movlpd 7(%esi), %xmm1 - movlpd %xmm0, (%edi) - movlpd %xmm1, 7(%edi) -# ifdef USE_AS_STPCPY - lea 15(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit16): - movdqu (%esi), %xmm0 - movdqu %xmm0, (%edi) -# ifdef USE_AS_STPCPY - lea 16(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit17): - movdqu (%esi), %xmm0 - movb 16(%esi), %cl - movdqu %xmm0, (%edi) - movb %cl, 16(%edi) -# ifdef USE_AS_STPCPY - lea 17(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit18): - movdqu (%esi), %xmm0 - movw 16(%esi), %cx - movdqu %xmm0, (%edi) - movw %cx, 16(%edi) -# ifdef USE_AS_STPCPY - lea 18(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit19): - movdqu (%esi), %xmm0 - movl 15(%esi), %ecx - movdqu %xmm0, (%edi) - movl %ecx, 15(%edi) -# ifdef USE_AS_STPCPY - lea 19(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit20): - movdqu (%esi), %xmm0 - movl 16(%esi), %ecx - movdqu %xmm0, (%edi) - movl %ecx, 16(%edi) -# ifdef USE_AS_STPCPY - lea 20(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit21): - movdqu (%esi), %xmm0 - movl 16(%esi), %ecx - movb 20(%esi), %dl - movdqu %xmm0, (%edi) - movl %ecx, 16(%edi) - movb %dl, 20(%edi) -# ifdef USE_AS_STPCPY - lea 21(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit22): - movdqu (%esi), %xmm0 - movlpd 14(%esi), %xmm3 - movdqu %xmm0, (%edi) - movlpd %xmm3, 14(%edi) -# ifdef USE_AS_STPCPY - lea 22(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit23): - movdqu (%esi), %xmm0 - movlpd 15(%esi), %xmm3 - movdqu %xmm0, (%edi) - movlpd %xmm3, 15(%edi) -# ifdef USE_AS_STPCPY - lea 23(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit24): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 - movdqu %xmm0, (%edi) - movlpd %xmm2, 16(%edi) -# ifdef USE_AS_STPCPY - lea 24(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit25): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 - movb 24(%esi), %cl - movdqu %xmm0, (%edi) - movlpd %xmm2, 16(%edi) - movb %cl, 24(%edi) -# ifdef USE_AS_STPCPY - lea 25(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit26): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 - movw 24(%esi), %cx - movdqu %xmm0, (%edi) - movlpd %xmm2, 16(%edi) - movw %cx, 24(%edi) -# ifdef USE_AS_STPCPY - lea 26(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit27): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 - movl 23(%esi), %ecx - movdqu %xmm0, (%edi) - movlpd %xmm2, 16(%edi) - movl %ecx, 23(%edi) -# ifdef USE_AS_STPCPY - lea 27(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit28): - movdqu (%esi), %xmm0 - movlpd 16(%esi), %xmm2 - movl 24(%esi), %ecx - movdqu %xmm0, (%edi) - movlpd %xmm2, 16(%edi) - movl %ecx, 24(%edi) -# ifdef USE_AS_STPCPY - lea 28(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit29): - movdqu (%esi), %xmm0 - movdqu 13(%esi), %xmm2 - movdqu %xmm0, (%edi) - movdqu %xmm2, 13(%edi) -# ifdef USE_AS_STPCPY - lea 29(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit30): - movdqu (%esi), %xmm0 - movdqu 14(%esi), %xmm2 - movdqu %xmm0, (%edi) - movdqu %xmm2, 14(%edi) -# ifdef USE_AS_STPCPY - lea 30(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit31): - movdqu (%esi), %xmm0 - movdqu 15(%esi), %xmm2 - movdqu %xmm0, (%edi) - movdqu %xmm2, 15(%edi) -# ifdef USE_AS_STPCPY - lea 31(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit32): - movdqu (%esi), %xmm0 - movdqu 16(%esi), %xmm2 - movdqu %xmm0, (%edi) - movdqu %xmm2, 16(%edi) -# ifdef USE_AS_STPCPY - lea 32(%edi), %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit33): - movdqu (%esi), %xmm0 - movdqu 16(%esi), %xmm2 - movb 32(%esi), %cl - movdqu %xmm0, (%edi) - movdqu %xmm2, 16(%edi) - movb %cl, 32(%edi) - RETURN - - .p2align 4 -L(Fill0): - RETURN - - .p2align 4 -L(Fill1): - movb %dl, (%edi) - RETURN - - .p2align 4 -L(Fill2): - movw %dx, (%edi) - RETURN - - .p2align 4 -L(Fill3): - movl %edx, -1(%edi) - RETURN - - .p2align 4 -L(Fill4): - movl %edx, (%edi) - RETURN - - .p2align 4 -L(Fill5): - movl %edx, (%edi) - movb %dl, 4(%edi) - RETURN - - .p2align 4 -L(Fill6): - movl %edx, (%edi) - movw %dx, 4(%edi) - RETURN - - .p2align 4 -L(Fill7): - movlpd %xmm0, -1(%edi) - RETURN - - .p2align 4 -L(Fill8): - movlpd %xmm0, (%edi) - RETURN - - .p2align 4 -L(Fill9): - movlpd %xmm0, (%edi) - movb %dl, 8(%edi) - RETURN - - .p2align 4 -L(Fill10): - movlpd %xmm0, (%edi) - movw %dx, 8(%edi) - RETURN - - .p2align 4 -L(Fill11): - movlpd %xmm0, (%edi) - movl %edx, 7(%edi) - RETURN - - .p2align 4 -L(Fill12): - movlpd %xmm0, (%edi) - movl %edx, 8(%edi) - RETURN - - .p2align 4 -L(Fill13): - movlpd %xmm0, (%edi) - movlpd %xmm0, 5(%edi) - RETURN - - .p2align 4 -L(Fill14): - movlpd %xmm0, (%edi) - movlpd %xmm0, 6(%edi) - RETURN - - .p2align 4 -L(Fill15): - movdqu %xmm0, -1(%edi) - RETURN - - .p2align 4 -L(Fill16): - movdqu %xmm0, (%edi) - RETURN - - .p2align 4 -L(CopyFrom1To16BytesUnalignedXmm2): - movdqu %xmm2, (%edi, %ecx) - - .p2align 4 -L(CopyFrom1To16BytesXmmExit): - bsf %edx, %edx - add $15, %ebx - add %ecx, %edi -# ifdef USE_AS_STPCPY - lea (%edi, %edx), %eax -# endif - sub %edx, %ebx - lea 1(%edi, %edx), %edi - - .p2align 4 -L(StrncpyFillTailWithZero): - pxor %xmm0, %xmm0 - xor %edx, %edx - sub $16, %ebx - jbe L(StrncpyFillExit) - - movdqu %xmm0, (%edi) - add $16, %edi - - mov %edi, %esi - and $0xf, %esi - sub %esi, %edi - add %esi, %ebx - sub $64, %ebx - jb L(StrncpyFillLess64) - -L(StrncpyFillLoopMovdqa): - movdqa %xmm0, (%edi) - movdqa %xmm0, 16(%edi) - movdqa %xmm0, 32(%edi) - movdqa %xmm0, 48(%edi) - add $64, %edi - sub $64, %ebx - jae L(StrncpyFillLoopMovdqa) - -L(StrncpyFillLess64): - add $32, %ebx - jl L(StrncpyFillLess32) - movdqa %xmm0, (%edi) - movdqa %xmm0, 16(%edi) - add $32, %edi - sub $16, %ebx - jl L(StrncpyFillExit) - movdqa %xmm0, (%edi) - add $16, %edi - BRANCH_TO_JMPTBL_ENTRY (L(FillTable), %ebx, 4) - -L(StrncpyFillLess32): - add $16, %ebx - jl L(StrncpyFillExit) - movdqa %xmm0, (%edi) - add $16, %edi - BRANCH_TO_JMPTBL_ENTRY (L(FillTable), %ebx, 4) - -L(StrncpyFillExit): - add $16, %ebx - BRANCH_TO_JMPTBL_ENTRY (L(FillTable), %ebx, 4) - - .p2align 4 -L(UnalignedLeaveCase2OrCase3): - test %edx, %edx - jnz L(Unaligned64LeaveCase2) -L(Unaligned64LeaveCase3): - lea 64(%ebx), %ecx - and $-16, %ecx - add $48, %ebx - jl L(CopyFrom1To16BytesCase3) - movdqu %xmm4, (%edi) - sub $16, %ebx - jb L(CopyFrom1To16BytesCase3) - movdqu %xmm5, 16(%edi) - sub $16, %ebx - jb L(CopyFrom1To16BytesCase3) - movdqu %xmm6, 32(%edi) - sub $16, %ebx - jb L(CopyFrom1To16BytesCase3) - movdqu %xmm7, 48(%edi) -# ifdef USE_AS_STPCPY - lea 64(%edi), %eax -# endif - RETURN - - .p2align 4 -L(Unaligned64LeaveCase2): - xor %ecx, %ecx - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm0, %edx - add $48, %ebx - jle L(CopyFrom1To16BytesCase2OrCase3) - test %edx, %edx - jnz L(CopyFrom1To16BytesUnalignedXmm4) - - pcmpeqb %xmm5, %xmm0 - pmovmskb %xmm0, %edx - movdqu %xmm4, (%edi) - add $16, %ecx - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %edx, %edx - jnz L(CopyFrom1To16BytesUnalignedXmm5) - - pcmpeqb %xmm6, %xmm0 - pmovmskb %xmm0, %edx - movdqu %xmm5, 16(%edi) - add $16, %ecx - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %edx, %edx - jnz L(CopyFrom1To16BytesUnalignedXmm6) - - pcmpeqb %xmm7, %xmm0 - pmovmskb %xmm0, %edx - movdqu %xmm6, 32(%edi) - lea 16(%edi, %ecx), %edi - lea 16(%esi, %ecx), %esi - bsf %edx, %edx - cmp %ebx, %edx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) - - .p2align 4 -L(ExitZero): - movl %edi, %eax - RETURN - -END (STRCPY) - - .p2align 4 - .section .rodata -L(ExitTable): - .int JMPTBL(L(Exit1), L(ExitTable)) - .int JMPTBL(L(Exit2), L(ExitTable)) - .int JMPTBL(L(Exit3), L(ExitTable)) - .int JMPTBL(L(Exit4), L(ExitTable)) - .int JMPTBL(L(Exit5), L(ExitTable)) - .int JMPTBL(L(Exit6), L(ExitTable)) - .int JMPTBL(L(Exit7), L(ExitTable)) - .int JMPTBL(L(Exit8), L(ExitTable)) - .int JMPTBL(L(Exit9), L(ExitTable)) - .int JMPTBL(L(Exit10), L(ExitTable)) - .int JMPTBL(L(Exit11), L(ExitTable)) - .int JMPTBL(L(Exit12), L(ExitTable)) - .int JMPTBL(L(Exit13), L(ExitTable)) - .int JMPTBL(L(Exit14), L(ExitTable)) - .int JMPTBL(L(Exit15), L(ExitTable)) - .int JMPTBL(L(Exit16), L(ExitTable)) - .int JMPTBL(L(Exit17), L(ExitTable)) - .int JMPTBL(L(Exit18), L(ExitTable)) - .int JMPTBL(L(Exit19), L(ExitTable)) - .int JMPTBL(L(Exit20), L(ExitTable)) - .int JMPTBL(L(Exit21), L(ExitTable)) - .int JMPTBL(L(Exit22), L(ExitTable)) - .int JMPTBL(L(Exit23), L(ExitTable)) - .int JMPTBL(L(Exit24), L(ExitTable)) - .int JMPTBL(L(Exit25), L(ExitTable)) - .int JMPTBL(L(Exit26), L(ExitTable)) - .int JMPTBL(L(Exit27), L(ExitTable)) - .int JMPTBL(L(Exit28), L(ExitTable)) - .int JMPTBL(L(Exit29), L(ExitTable)) - .int JMPTBL(L(Exit30), L(ExitTable)) - .int JMPTBL(L(Exit31), L(ExitTable)) - .int JMPTBL(L(Exit32), L(ExitTable)) - -L(ExitStrncpyTable): - .int JMPTBL(L(Exit0), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit1), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit2), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit3), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit4), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit5), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit6), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit7), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit8), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit9), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit10), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit11), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit12), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit13), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit14), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit15), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit16), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit17), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit18), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit19), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit20), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit21), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit22), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit23), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit24), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit25), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit26), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit27), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit28), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit29), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit30), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit31), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit32), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit33), L(ExitStrncpyTable)) - - .p2align 4 -L(FillTable): - .int JMPTBL(L(Fill0), L(FillTable)) - .int JMPTBL(L(Fill1), L(FillTable)) - .int JMPTBL(L(Fill2), L(FillTable)) - .int JMPTBL(L(Fill3), L(FillTable)) - .int JMPTBL(L(Fill4), L(FillTable)) - .int JMPTBL(L(Fill5), L(FillTable)) - .int JMPTBL(L(Fill6), L(FillTable)) - .int JMPTBL(L(Fill7), L(FillTable)) - .int JMPTBL(L(Fill8), L(FillTable)) - .int JMPTBL(L(Fill9), L(FillTable)) - .int JMPTBL(L(Fill10), L(FillTable)) - .int JMPTBL(L(Fill11), L(FillTable)) - .int JMPTBL(L(Fill12), L(FillTable)) - .int JMPTBL(L(Fill13), L(FillTable)) - .int JMPTBL(L(Fill14), L(FillTable)) - .int JMPTBL(L(Fill15), L(FillTable)) - .int JMPTBL(L(Fill16), L(FillTable)) -# else -# define PARMS 4 -# define ENTRANCE -# define RETURN POP (%edi); ret; CFI_PUSH (%edi) -# define RETURN1 ret - - .text -ENTRY (STRCPY) - ENTRANCE - mov STR1(%esp), %edx - mov STR2(%esp), %ecx - - cmpb $0, (%ecx) - jz L(ExitTail1) - cmpb $0, 1(%ecx) - jz L(ExitTail2) - cmpb $0, 2(%ecx) - jz L(ExitTail3) - cmpb $0, 3(%ecx) - jz L(ExitTail4) - cmpb $0, 4(%ecx) - jz L(ExitTail5) - cmpb $0, 5(%ecx) - jz L(ExitTail6) - cmpb $0, 6(%ecx) - jz L(ExitTail7) - cmpb $0, 7(%ecx) - jz L(ExitTail8) - cmpb $0, 8(%ecx) - jz L(ExitTail9) - cmpb $0, 9(%ecx) - jz L(ExitTail10) - cmpb $0, 10(%ecx) - jz L(ExitTail11) - cmpb $0, 11(%ecx) - jz L(ExitTail12) - cmpb $0, 12(%ecx) - jz L(ExitTail13) - cmpb $0, 13(%ecx) - jz L(ExitTail14) - cmpb $0, 14(%ecx) - jz L(ExitTail15) - cmpb $0, 15(%ecx) - jz L(ExitTail16) - - PUSH (%edi) - PUSH (%ebx) - - mov %edx, %edi - lea 16(%ecx), %ebx - and $-16, %ebx - pxor %xmm0, %xmm0 - movdqu (%ecx), %xmm1 - movdqu %xmm1, (%edx) - pcmpeqb (%ebx), %xmm0 - pmovmskb %xmm0, %eax - sub %ecx, %ebx - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - mov %ecx, %eax - lea 16(%ecx), %ecx - and $-16, %ecx - sub %ecx, %eax - sub %eax, %edx - xor %ebx, %ebx - - .p2align 4 - movdqa (%ecx), %xmm1 - movaps 16(%ecx), %xmm2 - movdqu %xmm1, (%edx) - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - add $16, %ebx - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %ebx), %xmm3 - movdqu %xmm2, (%edx, %ebx) - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %eax - add $16, %ebx - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %ebx), %xmm4 - movdqu %xmm3, (%edx, %ebx) - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm0, %eax - add $16, %ebx - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %ebx), %xmm1 - movdqu %xmm4, (%edx, %ebx) - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - add $16, %ebx - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %ebx), %xmm2 - movdqu %xmm1, (%edx, %ebx) - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - add $16, %ebx - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %ebx), %xmm3 - movdqu %xmm2, (%edx, %ebx) - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %eax - add $16, %ebx - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movdqu %xmm3, (%edx, %ebx) - mov %ecx, %eax - lea 16(%ecx, %ebx), %ecx - and $-0x40, %ecx - sub %ecx, %eax - sub %eax, %edx - -L(Aligned64Loop): - movaps (%ecx), %xmm2 - movaps %xmm2, %xmm4 - movaps 16(%ecx), %xmm5 - movaps 32(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 48(%ecx), %xmm7 - pminub %xmm5, %xmm2 - add $64, %ecx - pminub %xmm7, %xmm3 - add $64, %edx - pminub %xmm2, %xmm3 - pcmpeqb %xmm0, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(Aligned64Leave) -L(Aligned64Loop_start): - movdqu %xmm4, -64(%edx) - movaps (%ecx), %xmm2 - movdqa %xmm2, %xmm4 - movdqu %xmm5, -48(%edx) - movaps 16(%ecx), %xmm5 - pminub %xmm5, %xmm2 - movaps 32(%ecx), %xmm3 - movdqu %xmm6, -32(%edx) - movaps %xmm3, %xmm6 - movdqu %xmm7, -16(%edx) - movaps 48(%ecx), %xmm7 - pminub %xmm7, %xmm3 - pminub %xmm2, %xmm3 - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %eax - add $64, %edx - add $64, %ecx - test %eax, %eax - jz L(Aligned64Loop_start) -L(Aligned64Leave): - sub $0xa0, %ebx - pxor %xmm0, %xmm0 - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm5, %xmm0 - pmovmskb %xmm0, %eax - movdqu %xmm4, -64(%edx) - test %eax, %eax - lea 16(%ebx), %ebx - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm6, %xmm0 - pmovmskb %xmm0, %eax - movdqu %xmm5, -48(%edx) - test %eax, %eax - lea 16(%ebx), %ebx - jnz L(CopyFrom1To16Bytes) - - movdqu %xmm6, -32(%edx) - pcmpeqb %xmm7, %xmm0 - pmovmskb %xmm0, %eax - lea 16(%ebx), %ebx - -/*-----------------End of main part---------------------------*/ - - .p2align 4 -L(CopyFrom1To16Bytes): - add %ebx, %edx - add %ebx, %ecx - - POP (%ebx) - test %al, %al - jz L(ExitHigh) - test $0x01, %al - jnz L(Exit1) - test $0x02, %al - jnz L(Exit2) - test $0x04, %al - jnz L(Exit3) - test $0x08, %al - jnz L(Exit4) - test $0x10, %al - jnz L(Exit5) - test $0x20, %al - jnz L(Exit6) - test $0x40, %al - jnz L(Exit7) - /* Exit 8 */ - movl (%ecx), %eax - movl %eax, (%edx) - movl 4(%ecx), %eax - movl %eax, 4(%edx) -# ifdef USE_AS_STPCPY - lea 7(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(ExitHigh): - test $0x01, %ah - jnz L(Exit9) - test $0x02, %ah - jnz L(Exit10) - test $0x04, %ah - jnz L(Exit11) - test $0x08, %ah - jnz L(Exit12) - test $0x10, %ah - jnz L(Exit13) - test $0x20, %ah - jnz L(Exit14) - test $0x40, %ah - jnz L(Exit15) - /* Exit 16 */ - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 8(%ecx), %xmm0 - movlpd %xmm0, 8(%edx) -# ifdef USE_AS_STPCPY - lea 15(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit1): - movb (%ecx), %al - movb %al, (%edx) -# ifdef USE_AS_STPCPY - lea (%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit2): - movw (%ecx), %ax - movw %ax, (%edx) -# ifdef USE_AS_STPCPY - lea 1(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit3): - movw (%ecx), %ax - movw %ax, (%edx) - movb 2(%ecx), %al - movb %al, 2(%edx) -# ifdef USE_AS_STPCPY - lea 2(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit4): - movl (%ecx), %eax - movl %eax, (%edx) -# ifdef USE_AS_STPCPY - lea 3(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit5): - movl (%ecx), %eax - movl %eax, (%edx) - movb 4(%ecx), %al - movb %al, 4(%edx) -# ifdef USE_AS_STPCPY - lea 4(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit6): - movl (%ecx), %eax - movl %eax, (%edx) - movw 4(%ecx), %ax - movw %ax, 4(%edx) -# ifdef USE_AS_STPCPY - lea 5(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit7): - movl (%ecx), %eax - movl %eax, (%edx) - movl 3(%ecx), %eax - movl %eax, 3(%edx) -# ifdef USE_AS_STPCPY - lea 6(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit9): - movl (%ecx), %eax - movl %eax, (%edx) - movl 4(%ecx), %eax - movl %eax, 4(%edx) - movb 8(%ecx), %al - movb %al, 8(%edx) -# ifdef USE_AS_STPCPY - lea 8(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit10): - movl (%ecx), %eax - movl %eax, (%edx) - movl 4(%ecx), %eax - movl %eax, 4(%edx) - movw 8(%ecx), %ax - movw %ax, 8(%edx) -# ifdef USE_AS_STPCPY - lea 9(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit11): - movl (%ecx), %eax - movl %eax, (%edx) - movl 4(%ecx), %eax - movl %eax, 4(%edx) - movl 7(%ecx), %eax - movl %eax, 7(%edx) -# ifdef USE_AS_STPCPY - lea 10(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit12): - movl (%ecx), %eax - movl %eax, (%edx) - movl 4(%ecx), %eax - movl %eax, 4(%edx) - movl 8(%ecx), %eax - movl %eax, 8(%edx) -# ifdef USE_AS_STPCPY - lea 11(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit13): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 5(%ecx), %xmm0 - movlpd %xmm0, 5(%edx) -# ifdef USE_AS_STPCPY - lea 12(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit14): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 6(%ecx), %xmm0 - movlpd %xmm0, 6(%edx) -# ifdef USE_AS_STPCPY - lea 13(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - - .p2align 4 -L(Exit15): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 7(%ecx), %xmm0 - movlpd %xmm0, 7(%edx) -# ifdef USE_AS_STPCPY - lea 14(%edx), %eax -# else - movl %edi, %eax -# endif - RETURN - -CFI_POP (%edi) - - .p2align 4 -L(ExitTail1): - movb (%ecx), %al - movb %al, (%edx) - movl %edx, %eax - RETURN1 - - .p2align 4 -L(ExitTail2): - movw (%ecx), %ax - movw %ax, (%edx) -# ifdef USE_AS_STPCPY - lea 1(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - - .p2align 4 -L(ExitTail3): - movw (%ecx), %ax - movw %ax, (%edx) - movb 2(%ecx), %al - movb %al, 2(%edx) -# ifdef USE_AS_STPCPY - lea 2(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - - .p2align 4 -L(ExitTail4): - movl (%ecx), %eax - movl %eax, (%edx) -# ifdef USE_AS_STPCPY - lea 3(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - - .p2align 4 -L(ExitTail5): - movl (%ecx), %eax - movl %eax, (%edx) - movb 4(%ecx), %al - movb %al, 4(%edx) -# ifdef USE_AS_STPCPY - lea 4(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - - .p2align 4 -L(ExitTail6): - movl (%ecx), %eax - movl %eax, (%edx) - movw 4(%ecx), %ax - movw %ax, 4(%edx) -# ifdef USE_AS_STPCPY - lea 5(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - - .p2align 4 -L(ExitTail7): - movl (%ecx), %eax - movl %eax, (%edx) - movl 3(%ecx), %eax - movl %eax, 3(%edx) -# ifdef USE_AS_STPCPY - lea 6(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - - .p2align 4 -L(ExitTail8): - movl (%ecx), %eax - movl %eax, (%edx) - movl 4(%ecx), %eax - movl %eax, 4(%edx) -# ifdef USE_AS_STPCPY - lea 7(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - - .p2align 4 -L(ExitTail9): - movl (%ecx), %eax - movl %eax, (%edx) - movl 4(%ecx), %eax - movl %eax, 4(%edx) - movb 8(%ecx), %al - movb %al, 8(%edx) -# ifdef USE_AS_STPCPY - lea 8(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - - .p2align 4 -L(ExitTail10): - movl (%ecx), %eax - movl %eax, (%edx) - movl 4(%ecx), %eax - movl %eax, 4(%edx) - movw 8(%ecx), %ax - movw %ax, 8(%edx) -# ifdef USE_AS_STPCPY - lea 9(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - - .p2align 4 -L(ExitTail11): - movl (%ecx), %eax - movl %eax, (%edx) - movl 4(%ecx), %eax - movl %eax, 4(%edx) - movl 7(%ecx), %eax - movl %eax, 7(%edx) -# ifdef USE_AS_STPCPY - lea 10(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - - .p2align 4 -L(ExitTail12): - movl (%ecx), %eax - movl %eax, (%edx) - movl 4(%ecx), %eax - movl %eax, 4(%edx) - movl 8(%ecx), %eax - movl %eax, 8(%edx) -# ifdef USE_AS_STPCPY - lea 11(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - - .p2align 4 -L(ExitTail13): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 5(%ecx), %xmm0 - movlpd %xmm0, 5(%edx) -# ifdef USE_AS_STPCPY - lea 12(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - - .p2align 4 -L(ExitTail14): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 6(%ecx), %xmm0 - movlpd %xmm0, 6(%edx) -# ifdef USE_AS_STPCPY - lea 13(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - - .p2align 4 -L(ExitTail15): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 7(%ecx), %xmm0 - movlpd %xmm0, 7(%edx) -# ifdef USE_AS_STPCPY - lea 14(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - - .p2align 4 -L(ExitTail16): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 8(%ecx), %xmm0 - movlpd %xmm0, 8(%edx) -# ifdef USE_AS_STPCPY - lea 15(%edx), %eax -# else - movl %edx, %eax -# endif - RETURN1 - -END (STRCPY) -# endif - -#endif diff --git a/sysdeps/i386/i686/multiarch/strcpy-ssse3.S b/sysdeps/i386/i686/multiarch/strcpy-ssse3.S deleted file mode 100644 index effd85da94..0000000000 --- a/sysdeps/i386/i686/multiarch/strcpy-ssse3.S +++ /dev/null @@ -1,3901 +0,0 @@ -/* strcpy with SSSE3 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#if IS_IN (libc) - -# ifndef USE_AS_STRCAT -# include - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# ifndef STRCPY -# define STRCPY __strcpy_ssse3 -# endif - -# ifdef USE_AS_STRNCPY -# define PARMS 8 -# define ENTRANCE PUSH (%ebx) -# define RETURN POP (%ebx); ret; CFI_PUSH (%ebx); -# define RETURN1 POP (%edi); POP (%ebx); ret; CFI_PUSH (%ebx); CFI_PUSH (%edi) -# else -# define PARMS 4 -# define ENTRANCE -# define RETURN ret -# define RETURN1 POP (%edi); ret; CFI_PUSH (%edi) -# endif - -# ifdef USE_AS_STPCPY -# define SAVE_RESULT(n) lea n(%edx), %eax -# define SAVE_RESULT_TAIL(n) lea n(%edx), %eax -# else -# define SAVE_RESULT(n) movl %edi, %eax -# define SAVE_RESULT_TAIL(n) movl %edx, %eax -# endif - -# define STR1 PARMS -# define STR2 STR1+4 -# define LEN STR2+4 - -/* In this code following instructions are used for copying: - movb - 1 byte - movw - 2 byte - movl - 4 byte - movlpd - 8 byte - movaps - 16 byte - requires 16 byte alignment - of sourse and destination adresses. -*/ - -.text -ENTRY (STRCPY) - ENTRANCE - mov STR1(%esp), %edx - mov STR2(%esp), %ecx -# ifdef USE_AS_STRNCPY - movl LEN(%esp), %ebx - cmp $8, %ebx - jbe L(StrncpyExit8Bytes) -# endif - cmpb $0, (%ecx) - jz L(ExitTail1) - cmpb $0, 1(%ecx) - jz L(ExitTail2) - cmpb $0, 2(%ecx) - jz L(ExitTail3) - cmpb $0, 3(%ecx) - jz L(ExitTail4) - cmpb $0, 4(%ecx) - jz L(ExitTail5) - cmpb $0, 5(%ecx) - jz L(ExitTail6) - cmpb $0, 6(%ecx) - jz L(ExitTail7) - cmpb $0, 7(%ecx) - jz L(ExitTail8) -# ifdef USE_AS_STRNCPY - cmp $16, %ebx - jb L(StrncpyExit15Bytes) -# endif - cmpb $0, 8(%ecx) - jz L(ExitTail9) - cmpb $0, 9(%ecx) - jz L(ExitTail10) - cmpb $0, 10(%ecx) - jz L(ExitTail11) - cmpb $0, 11(%ecx) - jz L(ExitTail12) - cmpb $0, 12(%ecx) - jz L(ExitTail13) - cmpb $0, 13(%ecx) - jz L(ExitTail14) - cmpb $0, 14(%ecx) - jz L(ExitTail15) -# ifdef USE_AS_STRNCPY - cmp $16, %ebx - je L(ExitTail16) -# endif - cmpb $0, 15(%ecx) - jz L(ExitTail16) - - PUSH (%edi) - mov %edx, %edi -# endif - PUSH (%esi) -# ifdef USE_AS_STRNCPY - mov %ecx, %esi - sub $16, %ebx - and $0xf, %esi - -/* add 16 bytes ecx_offset to ebx */ - - add %esi, %ebx -# endif - lea 16(%ecx), %esi - and $-16, %esi - pxor %xmm0, %xmm0 - movlpd (%ecx), %xmm1 - movlpd %xmm1, (%edx) - - pcmpeqb (%esi), %xmm0 - movlpd 8(%ecx), %xmm1 - movlpd %xmm1, 8(%edx) - - pmovmskb %xmm0, %eax - sub %ecx, %esi - -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - mov %edx, %eax - lea 16(%edx), %edx - and $-16, %edx - sub %edx, %eax - -# ifdef USE_AS_STRNCPY - add %eax, %esi - lea -1(%esi), %esi - and $1<<31, %esi - test %esi, %esi - jnz L(ContinueCopy) - lea 16(%ebx), %ebx - -L(ContinueCopy): -# endif - sub %eax, %ecx - mov %ecx, %eax - and $0xf, %eax - mov $0, %esi - -/* case: ecx_offset == edx_offset */ - - jz L(Align16Both) - - cmp $8, %eax - jae L(ShlHigh8) - cmp $1, %eax - je L(Shl1) - cmp $2, %eax - je L(Shl2) - cmp $3, %eax - je L(Shl3) - cmp $4, %eax - je L(Shl4) - cmp $5, %eax - je L(Shl5) - cmp $6, %eax - je L(Shl6) - jmp L(Shl7) - -L(ShlHigh8): - je L(Shl8) - cmp $9, %eax - je L(Shl9) - cmp $10, %eax - je L(Shl10) - cmp $11, %eax - je L(Shl11) - cmp $12, %eax - je L(Shl12) - cmp $13, %eax - je L(Shl13) - cmp $14, %eax - je L(Shl14) - jmp L(Shl15) - -L(Align16Both): - movaps (%ecx), %xmm1 - movaps 16(%ecx), %xmm2 - movaps %xmm1, (%edx) - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - lea 16(%esi), %esi -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %esi), %xmm3 - movaps %xmm2, (%edx, %esi) - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %eax - lea 16(%esi), %esi -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %esi), %xmm4 - movaps %xmm3, (%edx, %esi) - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm0, %eax - lea 16(%esi), %esi -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %esi), %xmm1 - movaps %xmm4, (%edx, %esi) - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - lea 16(%esi), %esi -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %esi), %xmm2 - movaps %xmm1, (%edx, %esi) - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - lea 16(%esi), %esi -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %esi), %xmm3 - movaps %xmm2, (%edx, %esi) - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %eax - lea 16(%esi), %esi -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps %xmm3, (%edx, %esi) - mov %ecx, %eax - lea 16(%ecx, %esi), %ecx - and $-0x40, %ecx - sub %ecx, %eax - sub %eax, %edx -# ifdef USE_AS_STRNCPY - lea 112(%ebx, %eax), %ebx -# endif - mov $-0x40, %esi - -L(Aligned64Loop): - movaps (%ecx), %xmm2 - movaps 32(%ecx), %xmm3 - movaps %xmm2, %xmm4 - movaps 16(%ecx), %xmm5 - movaps %xmm3, %xmm6 - movaps 48(%ecx), %xmm7 - pminub %xmm5, %xmm2 - pminub %xmm7, %xmm3 - pminub %xmm2, %xmm3 - lea 64(%edx), %edx - pcmpeqb %xmm0, %xmm3 - lea 64(%ecx), %ecx - pmovmskb %xmm3, %eax -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeaveCase2OrCase3) -# endif - test %eax, %eax - jnz L(Aligned64Leave) - movaps %xmm4, -64(%edx) - movaps %xmm5, -48(%edx) - movaps %xmm6, -32(%edx) - movaps %xmm7, -16(%edx) - jmp L(Aligned64Loop) - -L(Aligned64Leave): -# ifdef USE_AS_STRNCPY - lea 48(%ebx), %ebx -# endif - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm5, %xmm0 -# ifdef USE_AS_STRNCPY - lea -16(%ebx), %ebx -# endif - pmovmskb %xmm0, %eax - movaps %xmm4, -64(%edx) - test %eax, %eax - lea 16(%esi), %esi - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm6, %xmm0 -# ifdef USE_AS_STRNCPY - lea -16(%ebx), %ebx -# endif - pmovmskb %xmm0, %eax - movaps %xmm5, -48(%edx) - test %eax, %eax - lea 16(%esi), %esi - jnz L(CopyFrom1To16Bytes) - - movaps %xmm6, -32(%edx) - pcmpeqb %xmm7, %xmm0 -# ifdef USE_AS_STRNCPY - lea -16(%ebx), %ebx -# endif - pmovmskb %xmm0, %eax - lea 16(%esi), %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl1): - movaps -1(%ecx), %xmm1 - movaps 15(%ecx), %xmm2 -L(Shl1Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit1Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl1LoopExit) - - palignr $1, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 31(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit1Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl1LoopExit) - - palignr $1, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 31(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit1Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl1LoopExit) - - palignr $1, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 31(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit1Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl1LoopExit) - - palignr $1, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 31(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -15(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -1(%ecx), %xmm1 - -L(Shl1LoopStart): - movaps 15(%ecx), %xmm2 - movaps 31(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 47(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 63(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $1, %xmm4, %xmm5 - test %eax, %eax - palignr $1, %xmm3, %xmm4 - jnz L(Shl1Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave1) -# endif - palignr $1, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $1, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl1LoopStart) - -L(Shl1LoopExit): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movlpd 7(%ecx), %xmm0 - movlpd %xmm0, 7(%edx) - mov $15, %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl2): - movaps -2(%ecx), %xmm1 - movaps 14(%ecx), %xmm2 -L(Shl2Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit2Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl2LoopExit) - - palignr $2, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 30(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit2Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl2LoopExit) - - palignr $2, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 30(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit2Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl2LoopExit) - - palignr $2, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 30(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit2Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl2LoopExit) - - palignr $2, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 30(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -14(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -2(%ecx), %xmm1 - -L(Shl2LoopStart): - movaps 14(%ecx), %xmm2 - movaps 30(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 46(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 62(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $2, %xmm4, %xmm5 - test %eax, %eax - palignr $2, %xmm3, %xmm4 - jnz L(Shl2Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave2) -# endif - palignr $2, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $2, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl2LoopStart) - -L(Shl2LoopExit): - movlpd (%ecx), %xmm0 - movlpd 6(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 6(%edx) - mov $14, %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl3): - movaps -3(%ecx), %xmm1 - movaps 13(%ecx), %xmm2 -L(Shl3Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit3Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl3LoopExit) - - palignr $3, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 29(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit3Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl3LoopExit) - - palignr $3, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 29(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit3Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl3LoopExit) - - palignr $3, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 29(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit3Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl3LoopExit) - - palignr $3, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 29(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -13(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -3(%ecx), %xmm1 - -L(Shl3LoopStart): - movaps 13(%ecx), %xmm2 - movaps 29(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 45(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 61(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $3, %xmm4, %xmm5 - test %eax, %eax - palignr $3, %xmm3, %xmm4 - jnz L(Shl3Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave3) -# endif - palignr $3, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $3, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl3LoopStart) - -L(Shl3LoopExit): - movlpd (%ecx), %xmm0 - movlpd 5(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 5(%edx) - mov $13, %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl4): - movaps -4(%ecx), %xmm1 - movaps 12(%ecx), %xmm2 -L(Shl4Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit4Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl4LoopExit) - - palignr $4, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 28(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit4Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl4LoopExit) - - palignr $4, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 28(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit4Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl4LoopExit) - - palignr $4, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 28(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit4Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl4LoopExit) - - palignr $4, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 28(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -12(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -4(%ecx), %xmm1 - -L(Shl4LoopStart): - movaps 12(%ecx), %xmm2 - movaps 28(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 44(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 60(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $4, %xmm4, %xmm5 - test %eax, %eax - palignr $4, %xmm3, %xmm4 - jnz L(Shl4Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave4) -# endif - palignr $4, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $4, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl4LoopStart) - -L(Shl4LoopExit): - movlpd (%ecx), %xmm0 - movl 8(%ecx), %esi - movlpd %xmm0, (%edx) - movl %esi, 8(%edx) - mov $12, %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl5): - movaps -5(%ecx), %xmm1 - movaps 11(%ecx), %xmm2 -L(Shl5Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit5Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl5LoopExit) - - palignr $5, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 27(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit5Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl5LoopExit) - - palignr $5, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 27(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit5Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl5LoopExit) - - palignr $5, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 27(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit5Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl5LoopExit) - - palignr $5, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 27(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -11(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -5(%ecx), %xmm1 - -L(Shl5LoopStart): - movaps 11(%ecx), %xmm2 - movaps 27(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 43(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 59(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $5, %xmm4, %xmm5 - test %eax, %eax - palignr $5, %xmm3, %xmm4 - jnz L(Shl5Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave5) -# endif - palignr $5, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $5, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl5LoopStart) - -L(Shl5LoopExit): - movlpd (%ecx), %xmm0 - movl 7(%ecx), %esi - movlpd %xmm0, (%edx) - movl %esi, 7(%edx) - mov $11, %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl6): - movaps -6(%ecx), %xmm1 - movaps 10(%ecx), %xmm2 -L(Shl6Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit6Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl6LoopExit) - - palignr $6, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 26(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit6Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl6LoopExit) - - palignr $6, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 26(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit6Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl6LoopExit) - - palignr $6, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 26(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit6Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl6LoopExit) - - palignr $6, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 26(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -10(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -6(%ecx), %xmm1 - -L(Shl6LoopStart): - movaps 10(%ecx), %xmm2 - movaps 26(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 42(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 58(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $6, %xmm4, %xmm5 - test %eax, %eax - palignr $6, %xmm3, %xmm4 - jnz L(Shl6Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave6) -# endif - palignr $6, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $6, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl6LoopStart) - -L(Shl6LoopExit): - movlpd (%ecx), %xmm0 - movl 6(%ecx), %esi - movlpd %xmm0, (%edx) - movl %esi, 6(%edx) - mov $10, %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl7): - movaps -7(%ecx), %xmm1 - movaps 9(%ecx), %xmm2 -L(Shl7Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit7Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl7LoopExit) - - palignr $7, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 25(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit7Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl7LoopExit) - - palignr $7, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 25(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit7Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl7LoopExit) - - palignr $7, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 25(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit7Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl7LoopExit) - - palignr $7, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 25(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -9(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -7(%ecx), %xmm1 - -L(Shl7LoopStart): - movaps 9(%ecx), %xmm2 - movaps 25(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 41(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 57(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $7, %xmm4, %xmm5 - test %eax, %eax - palignr $7, %xmm3, %xmm4 - jnz L(Shl7Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave7) -# endif - palignr $7, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $7, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl7LoopStart) - -L(Shl7LoopExit): - movlpd (%ecx), %xmm0 - movl 5(%ecx), %esi - movlpd %xmm0, (%edx) - movl %esi, 5(%edx) - mov $9, %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl8): - movaps -8(%ecx), %xmm1 - movaps 8(%ecx), %xmm2 -L(Shl8Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit8Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl8LoopExit) - - palignr $8, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 24(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit8Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl8LoopExit) - - palignr $8, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 24(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit8Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl8LoopExit) - - palignr $8, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 24(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit8Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl8LoopExit) - - palignr $8, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 24(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -8(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -8(%ecx), %xmm1 - -L(Shl8LoopStart): - movaps 8(%ecx), %xmm2 - movaps 24(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 40(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 56(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $8, %xmm4, %xmm5 - test %eax, %eax - palignr $8, %xmm3, %xmm4 - jnz L(Shl8Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave8) -# endif - palignr $8, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $8, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl8LoopStart) - -L(Shl8LoopExit): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - mov $8, %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl9): - movaps -9(%ecx), %xmm1 - movaps 7(%ecx), %xmm2 -L(Shl9Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit9Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl9LoopExit) - - palignr $9, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 23(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit9Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl9LoopExit) - - palignr $9, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 23(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit9Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl9LoopExit) - - palignr $9, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 23(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit9Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl9LoopExit) - - palignr $9, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 23(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -7(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -9(%ecx), %xmm1 - -L(Shl9LoopStart): - movaps 7(%ecx), %xmm2 - movaps 23(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 39(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 55(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $9, %xmm4, %xmm5 - test %eax, %eax - palignr $9, %xmm3, %xmm4 - jnz L(Shl9Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave9) -# endif - palignr $9, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $9, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl9LoopStart) - -L(Shl9LoopExit): - movlpd -1(%ecx), %xmm0 - movlpd %xmm0, -1(%edx) - mov $7, %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl10): - movaps -10(%ecx), %xmm1 - movaps 6(%ecx), %xmm2 -L(Shl10Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit10Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl10LoopExit) - - palignr $10, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 22(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit10Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl10LoopExit) - - palignr $10, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 22(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit10Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl10LoopExit) - - palignr $10, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 22(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit10Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl10LoopExit) - - palignr $10, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 22(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -6(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -10(%ecx), %xmm1 - -L(Shl10LoopStart): - movaps 6(%ecx), %xmm2 - movaps 22(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 38(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 54(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $10, %xmm4, %xmm5 - test %eax, %eax - palignr $10, %xmm3, %xmm4 - jnz L(Shl10Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave10) -# endif - palignr $10, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $10, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl10LoopStart) - -L(Shl10LoopExit): - movlpd -2(%ecx), %xmm0 - movlpd %xmm0, -2(%edx) - mov $6, %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl11): - movaps -11(%ecx), %xmm1 - movaps 5(%ecx), %xmm2 -L(Shl11Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit11Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl11LoopExit) - - palignr $11, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 21(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit11Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl11LoopExit) - - palignr $11, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 21(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit11Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl11LoopExit) - - palignr $11, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 21(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit11Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl11LoopExit) - - palignr $11, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 21(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -5(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -11(%ecx), %xmm1 - -L(Shl11LoopStart): - movaps 5(%ecx), %xmm2 - movaps 21(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 37(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 53(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $11, %xmm4, %xmm5 - test %eax, %eax - palignr $11, %xmm3, %xmm4 - jnz L(Shl11Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave11) -# endif - palignr $11, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $11, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl11LoopStart) - -L(Shl11LoopExit): - movlpd -3(%ecx), %xmm0 - movlpd %xmm0, -3(%edx) - mov $5, %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl12): - movaps -12(%ecx), %xmm1 - movaps 4(%ecx), %xmm2 -L(Shl12Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit12Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl12LoopExit) - - palignr $12, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 20(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit12Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl12LoopExit) - - palignr $12, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 20(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit12Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl12LoopExit) - - palignr $12, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 20(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit12Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl12LoopExit) - - palignr $12, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 20(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -4(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -12(%ecx), %xmm1 - -L(Shl12LoopStart): - movaps 4(%ecx), %xmm2 - movaps 20(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 36(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 52(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $12, %xmm4, %xmm5 - test %eax, %eax - palignr $12, %xmm3, %xmm4 - jnz L(Shl12Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave12) -# endif - palignr $12, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $12, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl12LoopStart) - -L(Shl12LoopExit): - movl (%ecx), %esi - movl %esi, (%edx) - mov $4, %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl13): - movaps -13(%ecx), %xmm1 - movaps 3(%ecx), %xmm2 -L(Shl13Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit13Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl13LoopExit) - - palignr $13, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 19(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit13Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl13LoopExit) - - palignr $13, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 19(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit13Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl13LoopExit) - - palignr $13, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 19(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit13Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl13LoopExit) - - palignr $13, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 19(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -3(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -13(%ecx), %xmm1 - -L(Shl13LoopStart): - movaps 3(%ecx), %xmm2 - movaps 19(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 35(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 51(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $13, %xmm4, %xmm5 - test %eax, %eax - palignr $13, %xmm3, %xmm4 - jnz L(Shl13Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave13) -# endif - palignr $13, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $13, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl13LoopStart) - -L(Shl13LoopExit): - movl -1(%ecx), %esi - movl %esi, -1(%edx) - mov $3, %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl14): - movaps -14(%ecx), %xmm1 - movaps 2(%ecx), %xmm2 -L(Shl14Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit14Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl14LoopExit) - - palignr $14, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 18(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit14Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl14LoopExit) - - palignr $14, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 18(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit14Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl14LoopExit) - - palignr $14, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 18(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit14Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl14LoopExit) - - palignr $14, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 18(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -2(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -14(%ecx), %xmm1 - -L(Shl14LoopStart): - movaps 2(%ecx), %xmm2 - movaps 18(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 34(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 50(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $14, %xmm4, %xmm5 - test %eax, %eax - palignr $14, %xmm3, %xmm4 - jnz L(Shl14Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave14) -# endif - palignr $14, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $14, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl14LoopStart) - -L(Shl14LoopExit): - movl -2(%ecx), %esi - movl %esi, -2(%edx) - mov $2, %esi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl15): - movaps -15(%ecx), %xmm1 - movaps 1(%ecx), %xmm2 -L(Shl15Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit15Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl15LoopExit) - - palignr $15, %xmm1, %xmm2 - movaps %xmm3, %xmm1 - movaps %xmm2, (%edx) - movaps 17(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit15Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl15LoopExit) - - palignr $15, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 17(%ecx), %xmm2 - movaps %xmm3, %xmm1 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit15Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl15LoopExit) - - palignr $15, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 17(%ecx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx -# ifdef USE_AS_STRNCPY - sub $16, %ebx - jbe L(StrncpyExit15Case2OrCase3) -# endif - test %eax, %eax - jnz L(Shl15LoopExit) - - palignr $15, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 17(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -1(%ecx), %ecx - sub %eax, %edx -# ifdef USE_AS_STRNCPY - add %eax, %ebx -# endif - movaps -15(%ecx), %xmm1 - -L(Shl15LoopStart): - movaps 1(%ecx), %xmm2 - movaps 17(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 33(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 49(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $15, %xmm4, %xmm5 - test %eax, %eax - palignr $15, %xmm3, %xmm4 - jnz L(Shl15Start) -# ifdef USE_AS_STRNCPY - sub $64, %ebx - jbe L(StrncpyLeave15) -# endif - palignr $15, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $15, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl15LoopStart) - -L(Shl15LoopExit): - movl -3(%ecx), %esi - movl %esi, -3(%edx) - mov $1, %esi -# ifdef USE_AS_STRCAT - jmp L(CopyFrom1To16Bytes) -# endif - - -# ifndef USE_AS_STRCAT - - .p2align 4 -L(CopyFrom1To16Bytes): -# ifdef USE_AS_STRNCPY - add $16, %ebx -# endif - add %esi, %edx - add %esi, %ecx - - POP (%esi) - test %al, %al - jz L(ExitHigh8) - -L(CopyFrom1To16BytesLess8): - mov %al, %ah - and $15, %ah - jz L(ExitHigh4) - - test $0x01, %al - jnz L(Exit1) - test $0x02, %al - jnz L(Exit2) - test $0x04, %al - jnz L(Exit3) - - .p2align 4 -L(Exit4): - movl (%ecx), %eax - movl %eax, (%edx) - SAVE_RESULT (3) -# ifdef USE_AS_STRNCPY - sub $4, %ebx - lea 4(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - - .p2align 4 -L(ExitHigh4): - test $0x10, %al - jnz L(Exit5) - test $0x20, %al - jnz L(Exit6) - test $0x40, %al - jnz L(Exit7) - - .p2align 4 -L(Exit8): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - SAVE_RESULT (7) -# ifdef USE_AS_STRNCPY - sub $8, %ebx - lea 8(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - - .p2align 4 -L(ExitHigh8): - mov %ah, %al - and $15, %al - jz L(ExitHigh12) - - test $0x01, %ah - jnz L(Exit9) - test $0x02, %ah - jnz L(Exit10) - test $0x04, %ah - jnz L(Exit11) - - .p2align 4 -L(Exit12): - movlpd (%ecx), %xmm0 - movl 8(%ecx), %eax - movlpd %xmm0, (%edx) - movl %eax, 8(%edx) - SAVE_RESULT (11) -# ifdef USE_AS_STRNCPY - sub $12, %ebx - lea 12(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - - .p2align 4 -L(ExitHigh12): - test $0x10, %ah - jnz L(Exit13) - test $0x20, %ah - jnz L(Exit14) - test $0x40, %ah - jnz L(Exit15) - - .p2align 4 -L(Exit16): - movdqu (%ecx), %xmm0 - movdqu %xmm0, (%edx) - SAVE_RESULT (15) -# ifdef USE_AS_STRNCPY - sub $16, %ebx - lea 16(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - -# ifdef USE_AS_STRNCPY - - CFI_PUSH(%esi) - - .p2align 4 -L(CopyFrom1To16BytesCase2): - add $16, %ebx - add %esi, %ecx - add %esi, %edx - - POP (%esi) - - test %al, %al - jz L(ExitHighCase2) - - cmp $8, %ebx - ja L(CopyFrom1To16BytesLess8) - - test $0x01, %al - jnz L(Exit1) - cmp $1, %ebx - je L(Exit1) - test $0x02, %al - jnz L(Exit2) - cmp $2, %ebx - je L(Exit2) - test $0x04, %al - jnz L(Exit3) - cmp $3, %ebx - je L(Exit3) - test $0x08, %al - jnz L(Exit4) - cmp $4, %ebx - je L(Exit4) - test $0x10, %al - jnz L(Exit5) - cmp $5, %ebx - je L(Exit5) - test $0x20, %al - jnz L(Exit6) - cmp $6, %ebx - je L(Exit6) - test $0x40, %al - jnz L(Exit7) - cmp $7, %ebx - je L(Exit7) - jmp L(Exit8) - - .p2align 4 -L(ExitHighCase2): - cmp $8, %ebx - jbe L(CopyFrom1To16BytesLess8Case3) - - test $0x01, %ah - jnz L(Exit9) - cmp $9, %ebx - je L(Exit9) - test $0x02, %ah - jnz L(Exit10) - cmp $10, %ebx - je L(Exit10) - test $0x04, %ah - jnz L(Exit11) - cmp $11, %ebx - je L(Exit11) - test $0x8, %ah - jnz L(Exit12) - cmp $12, %ebx - je L(Exit12) - test $0x10, %ah - jnz L(Exit13) - cmp $13, %ebx - je L(Exit13) - test $0x20, %ah - jnz L(Exit14) - cmp $14, %ebx - je L(Exit14) - test $0x40, %ah - jnz L(Exit15) - cmp $15, %ebx - je L(Exit15) - jmp L(Exit16) - - CFI_PUSH(%esi) - - .p2align 4 -L(CopyFrom1To16BytesCase2OrCase3): - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - - .p2align 4 -L(CopyFrom1To16BytesCase3): - add $16, %ebx - add %esi, %edx - add %esi, %ecx - - POP (%esi) - - cmp $8, %ebx - ja L(ExitHigh8Case3) - -L(CopyFrom1To16BytesLess8Case3): - cmp $4, %ebx - ja L(ExitHigh4Case3) - - cmp $1, %ebx - je L(Exit1) - cmp $2, %ebx - je L(Exit2) - cmp $3, %ebx - je L(Exit3) - movl (%ecx), %eax - movl %eax, (%edx) - SAVE_RESULT (4) - RETURN1 - - .p2align 4 -L(ExitHigh4Case3): - cmp $5, %ebx - je L(Exit5) - cmp $6, %ebx - je L(Exit6) - cmp $7, %ebx - je L(Exit7) - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - SAVE_RESULT (8) - RETURN1 - - .p2align 4 -L(ExitHigh8Case3): - cmp $12, %ebx - ja L(ExitHigh12Case3) - - cmp $9, %ebx - je L(Exit9) - cmp $10, %ebx - je L(Exit10) - cmp $11, %ebx - je L(Exit11) - movlpd (%ecx), %xmm0 - movl 8(%ecx), %eax - movlpd %xmm0, (%edx) - movl %eax, 8(%edx) - SAVE_RESULT (12) - RETURN1 - - .p2align 4 -L(ExitHigh12Case3): - cmp $13, %ebx - je L(Exit13) - cmp $14, %ebx - je L(Exit14) - cmp $15, %ebx - je L(Exit15) - movlpd (%ecx), %xmm0 - movlpd 8(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 8(%edx) - SAVE_RESULT (16) - RETURN1 - -# endif - - .p2align 4 -L(Exit1): - movb (%ecx), %al - movb %al, (%edx) - SAVE_RESULT (0) -# ifdef USE_AS_STRNCPY - sub $1, %ebx - lea 1(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - - .p2align 4 -L(Exit2): - movw (%ecx), %ax - movw %ax, (%edx) - SAVE_RESULT (1) -# ifdef USE_AS_STRNCPY - sub $2, %ebx - lea 2(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - - .p2align 4 -L(Exit3): - movw (%ecx), %ax - movw %ax, (%edx) - movb 2(%ecx), %al - movb %al, 2(%edx) - SAVE_RESULT (2) -# ifdef USE_AS_STRNCPY - sub $3, %ebx - lea 3(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - - .p2align 4 -L(Exit5): - movl (%ecx), %eax - movl %eax, (%edx) - movb 4(%ecx), %al - movb %al, 4(%edx) - SAVE_RESULT (4) -# ifdef USE_AS_STRNCPY - sub $5, %ebx - lea 5(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - - .p2align 4 -L(Exit6): - movl (%ecx), %eax - movl %eax, (%edx) - movw 4(%ecx), %ax - movw %ax, 4(%edx) - SAVE_RESULT (5) -# ifdef USE_AS_STRNCPY - sub $6, %ebx - lea 6(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - - .p2align 4 -L(Exit7): - movl (%ecx), %eax - movl %eax, (%edx) - movl 3(%ecx), %eax - movl %eax, 3(%edx) - SAVE_RESULT (6) -# ifdef USE_AS_STRNCPY - sub $7, %ebx - lea 7(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - - .p2align 4 -L(Exit9): - movlpd (%ecx), %xmm0 - movb 8(%ecx), %al - movlpd %xmm0, (%edx) - movb %al, 8(%edx) - SAVE_RESULT (8) -# ifdef USE_AS_STRNCPY - sub $9, %ebx - lea 9(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - - .p2align 4 -L(Exit10): - movlpd (%ecx), %xmm0 - movw 8(%ecx), %ax - movlpd %xmm0, (%edx) - movw %ax, 8(%edx) - SAVE_RESULT (9) -# ifdef USE_AS_STRNCPY - sub $10, %ebx - lea 10(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - - .p2align 4 -L(Exit11): - movlpd (%ecx), %xmm0 - movl 7(%ecx), %eax - movlpd %xmm0, (%edx) - movl %eax, 7(%edx) - SAVE_RESULT (10) -# ifdef USE_AS_STRNCPY - sub $11, %ebx - lea 11(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - - .p2align 4 -L(Exit13): - movlpd (%ecx), %xmm0 - movlpd 5(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 5(%edx) - SAVE_RESULT (12) -# ifdef USE_AS_STRNCPY - sub $13, %ebx - lea 13(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - - .p2align 4 -L(Exit14): - movlpd (%ecx), %xmm0 - movlpd 6(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 6(%edx) - SAVE_RESULT (13) -# ifdef USE_AS_STRNCPY - sub $14, %ebx - lea 14(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - - .p2align 4 -L(Exit15): - movlpd (%ecx), %xmm0 - movlpd 7(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 7(%edx) - SAVE_RESULT (14) -# ifdef USE_AS_STRNCPY - sub $15, %ebx - lea 15(%edx), %ecx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN1 - -CFI_POP (%edi) - -# ifdef USE_AS_STRNCPY - .p2align 4 -L(Fill0): - RETURN - - .p2align 4 -L(Fill1): - movb %dl, (%ecx) - RETURN - - .p2align 4 -L(Fill2): - movw %dx, (%ecx) - RETURN - - .p2align 4 -L(Fill3): - movw %dx, (%ecx) - movb %dl, 2(%ecx) - RETURN - - .p2align 4 -L(Fill4): - movl %edx, (%ecx) - RETURN - - .p2align 4 -L(Fill5): - movl %edx, (%ecx) - movb %dl, 4(%ecx) - RETURN - - .p2align 4 -L(Fill6): - movl %edx, (%ecx) - movw %dx, 4(%ecx) - RETURN - - .p2align 4 -L(Fill7): - movl %edx, (%ecx) - movl %edx, 3(%ecx) - RETURN - - .p2align 4 -L(Fill8): - movlpd %xmm0, (%ecx) - RETURN - - .p2align 4 -L(Fill9): - movlpd %xmm0, (%ecx) - movb %dl, 8(%ecx) - RETURN - - .p2align 4 -L(Fill10): - movlpd %xmm0, (%ecx) - movw %dx, 8(%ecx) - RETURN - - .p2align 4 -L(Fill11): - movlpd %xmm0, (%ecx) - movl %edx, 7(%ecx) - RETURN - - .p2align 4 -L(Fill12): - movlpd %xmm0, (%ecx) - movl %edx, 8(%ecx) - RETURN - - .p2align 4 -L(Fill13): - movlpd %xmm0, (%ecx) - movlpd %xmm0, 5(%ecx) - RETURN - - .p2align 4 -L(Fill14): - movlpd %xmm0, (%ecx) - movlpd %xmm0, 6(%ecx) - RETURN - - .p2align 4 -L(Fill15): - movlpd %xmm0, (%ecx) - movlpd %xmm0, 7(%ecx) - RETURN - - .p2align 4 -L(Fill16): - movlpd %xmm0, (%ecx) - movlpd %xmm0, 8(%ecx) - RETURN - - .p2align 4 -L(StrncpyFillExit1): - lea 16(%ebx), %ebx -L(FillFrom1To16Bytes): - test %ebx, %ebx - jz L(Fill0) - cmp $16, %ebx - je L(Fill16) - cmp $8, %ebx - je L(Fill8) - jg L(FillMore8) - cmp $4, %ebx - je L(Fill4) - jg L(FillMore4) - cmp $2, %ebx - jl L(Fill1) - je L(Fill2) - jg L(Fill3) -L(FillMore8): /* but less than 16 */ - cmp $12, %ebx - je L(Fill12) - jl L(FillLess12) - cmp $14, %ebx - jl L(Fill13) - je L(Fill14) - jg L(Fill15) -L(FillMore4): /* but less than 8 */ - cmp $6, %ebx - jl L(Fill5) - je L(Fill6) - jg L(Fill7) -L(FillLess12): /* but more than 8 */ - cmp $10, %ebx - jl L(Fill9) - je L(Fill10) - jmp L(Fill11) - - CFI_PUSH(%edi) - - .p2align 4 -L(StrncpyFillTailWithZero1): - POP (%edi) -L(StrncpyFillTailWithZero): - pxor %xmm0, %xmm0 - xor %edx, %edx - sub $16, %ebx - jbe L(StrncpyFillExit1) - - movlpd %xmm0, (%ecx) - movlpd %xmm0, 8(%ecx) - - lea 16(%ecx), %ecx - - mov %ecx, %edx - and $0xf, %edx - sub %edx, %ecx - add %edx, %ebx - xor %edx, %edx - sub $64, %ebx - jb L(StrncpyFillLess64) - -L(StrncpyFillLoopMovdqa): - movdqa %xmm0, (%ecx) - movdqa %xmm0, 16(%ecx) - movdqa %xmm0, 32(%ecx) - movdqa %xmm0, 48(%ecx) - lea 64(%ecx), %ecx - sub $64, %ebx - jae L(StrncpyFillLoopMovdqa) - -L(StrncpyFillLess64): - add $32, %ebx - jl L(StrncpyFillLess32) - movdqa %xmm0, (%ecx) - movdqa %xmm0, 16(%ecx) - lea 32(%ecx), %ecx - sub $16, %ebx - jl L(StrncpyFillExit1) - movdqa %xmm0, (%ecx) - lea 16(%ecx), %ecx - jmp L(FillFrom1To16Bytes) - -L(StrncpyFillLess32): - add $16, %ebx - jl L(StrncpyFillExit1) - movdqa %xmm0, (%ecx) - lea 16(%ecx), %ecx - jmp L(FillFrom1To16Bytes) -# endif - - .p2align 4 -L(ExitTail1): - movb (%ecx), %al - movb %al, (%edx) - SAVE_RESULT_TAIL (0) -# ifdef USE_AS_STRNCPY - sub $1, %ebx - lea 1(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN - - .p2align 4 -L(ExitTail2): - movw (%ecx), %ax - movw %ax, (%edx) - SAVE_RESULT_TAIL (1) -# ifdef USE_AS_STRNCPY - sub $2, %ebx - lea 2(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN - - .p2align 4 -L(ExitTail3): - movw (%ecx), %ax - movw %ax, (%edx) - movb 2(%ecx), %al - movb %al, 2(%edx) - SAVE_RESULT_TAIL (2) -# ifdef USE_AS_STRNCPY - sub $3, %ebx - lea 3(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN - - .p2align 4 -L(ExitTail4): - movl (%ecx), %eax - movl %eax, (%edx) - SAVE_RESULT_TAIL (3) -# ifdef USE_AS_STRNCPY - sub $4, %ebx - lea 4(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN - - .p2align 4 -L(ExitTail5): - movl (%ecx), %eax - movl %eax, (%edx) - movb 4(%ecx), %al - movb %al, 4(%edx) - SAVE_RESULT_TAIL (4) -# ifdef USE_AS_STRNCPY - sub $5, %ebx - lea 5(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN - - .p2align 4 -L(ExitTail6): - movl (%ecx), %eax - movl %eax, (%edx) - movw 4(%ecx), %ax - movw %ax, 4(%edx) - SAVE_RESULT_TAIL (5) -# ifdef USE_AS_STRNCPY - sub $6, %ebx - lea 6(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN - - .p2align 4 -L(ExitTail7): - movl (%ecx), %eax - movl %eax, (%edx) - movl 3(%ecx), %eax - movl %eax, 3(%edx) - SAVE_RESULT_TAIL (6) -# ifdef USE_AS_STRNCPY - sub $7, %ebx - lea 7(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN - - .p2align 4 -L(ExitTail8): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - SAVE_RESULT_TAIL (7) -# ifdef USE_AS_STRNCPY - sub $8, %ebx - lea 8(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# endif - RETURN - - .p2align 4 -L(ExitTail9): - movlpd (%ecx), %xmm0 - movb 8(%ecx), %al - movlpd %xmm0, (%edx) - movb %al, 8(%edx) - SAVE_RESULT_TAIL (8) -# ifdef USE_AS_STRNCPY - sub $9, %ebx - lea 9(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN - - .p2align 4 -L(ExitTail10): - movlpd (%ecx), %xmm0 - movw 8(%ecx), %ax - movlpd %xmm0, (%edx) - movw %ax, 8(%edx) - SAVE_RESULT_TAIL (9) -# ifdef USE_AS_STRNCPY - sub $10, %ebx - lea 10(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN - - .p2align 4 -L(ExitTail11): - movlpd (%ecx), %xmm0 - movl 7(%ecx), %eax - movlpd %xmm0, (%edx) - movl %eax, 7(%edx) - SAVE_RESULT_TAIL (10) -# ifdef USE_AS_STRNCPY - sub $11, %ebx - lea 11(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN - - .p2align 4 -L(ExitTail12): - movlpd (%ecx), %xmm0 - movl 8(%ecx), %eax - movlpd %xmm0, (%edx) - movl %eax, 8(%edx) - SAVE_RESULT_TAIL (11) -# ifdef USE_AS_STRNCPY - sub $12, %ebx - lea 12(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN - - .p2align 4 -L(ExitTail13): - movlpd (%ecx), %xmm0 - movlpd 5(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 5(%edx) - SAVE_RESULT_TAIL (12) -# ifdef USE_AS_STRNCPY - sub $13, %ebx - lea 13(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN - - .p2align 4 -L(ExitTail14): - movlpd (%ecx), %xmm0 - movlpd 6(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 6(%edx) - SAVE_RESULT_TAIL (13) -# ifdef USE_AS_STRNCPY - sub $14, %ebx - lea 14(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN - - .p2align 4 -L(ExitTail15): - movlpd (%ecx), %xmm0 - movlpd 7(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 7(%edx) - SAVE_RESULT_TAIL (14) -# ifdef USE_AS_STRNCPY - sub $15, %ebx - lea 15(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# endif - RETURN - - .p2align 4 -L(ExitTail16): - movdqu (%ecx), %xmm0 - movdqu %xmm0, (%edx) - SAVE_RESULT_TAIL (15) -# ifdef USE_AS_STRNCPY - sub $16, %ebx - lea 16(%edx), %ecx - jnz L(StrncpyFillTailWithZero) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif -# endif - RETURN -# endif - -# ifdef USE_AS_STRNCPY -# ifndef USE_AS_STRCAT - CFI_PUSH (%esi) - CFI_PUSH (%edi) -# endif - .p2align 4 -L(StrncpyLeaveCase2OrCase3): - test %eax, %eax - jnz L(Aligned64LeaveCase2) - -L(Aligned64LeaveCase3): - add $48, %ebx - jle L(CopyFrom1To16BytesCase3) - movaps %xmm4, -64(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase3) - movaps %xmm5, -48(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase3) - movaps %xmm6, -32(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx - jmp L(CopyFrom1To16BytesCase3) - -L(Aligned64LeaveCase2): - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm0, %eax - add $48, %ebx - jle L(CopyFrom1To16BytesCase2OrCase3) - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm5, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm4, -64(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm6, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm5, -48(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm7, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm6, -32(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx - jmp L(CopyFrom1To16BytesCase2) - -/*--------------------------------------------------*/ - .p2align 4 -L(StrncpyExit1Case2OrCase3): - movlpd (%ecx), %xmm0 - movlpd 7(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 7(%edx) - mov $15, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit2Case2OrCase3): - movlpd (%ecx), %xmm0 - movlpd 6(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 6(%edx) - mov $14, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit3Case2OrCase3): - movlpd (%ecx), %xmm0 - movlpd 5(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 5(%edx) - mov $13, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit4Case2OrCase3): - movlpd (%ecx), %xmm0 - movl 8(%ecx), %esi - movlpd %xmm0, (%edx) - movl %esi, 8(%edx) - mov $12, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit5Case2OrCase3): - movlpd (%ecx), %xmm0 - movl 7(%ecx), %esi - movlpd %xmm0, (%edx) - movl %esi, 7(%edx) - mov $11, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit6Case2OrCase3): - movlpd (%ecx), %xmm0 - movl 6(%ecx), %esi - movlpd %xmm0, (%edx) - movl %esi, 6(%edx) - mov $10, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit7Case2OrCase3): - movlpd (%ecx), %xmm0 - movl 5(%ecx), %esi - movlpd %xmm0, (%edx) - movl %esi, 5(%edx) - mov $9, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit8Case2OrCase3): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - mov $8, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit9Case2OrCase3): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - mov $7, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit10Case2OrCase3): - movlpd -1(%ecx), %xmm0 - movlpd %xmm0, -1(%edx) - mov $6, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit11Case2OrCase3): - movlpd -2(%ecx), %xmm0 - movlpd %xmm0, -2(%edx) - mov $5, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit12Case2OrCase3): - movl (%ecx), %esi - movl %esi, (%edx) - mov $4, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit13Case2OrCase3): - movl -1(%ecx), %esi - movl %esi, -1(%edx) - mov $3, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit14Case2OrCase3): - movl -2(%ecx), %esi - movl %esi, -2(%edx) - mov $2, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit15Case2OrCase3): - movl -3(%ecx), %esi - movl %esi, -3(%edx) - mov $1, %esi - test %eax, %eax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave1): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit1) - palignr $1, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 31(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit1) - palignr $1, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit1) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit1) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit1): - lea 15(%edx, %esi), %edx - lea 15(%ecx, %esi), %ecx - movdqu -16(%ecx), %xmm0 - xor %esi, %esi - movdqu %xmm0, -16(%edx) - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave2): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit2) - palignr $2, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 30(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit2) - palignr $2, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit2) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit2) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit2): - lea 14(%edx, %esi), %edx - lea 14(%ecx, %esi), %ecx - movdqu -16(%ecx), %xmm0 - xor %esi, %esi - movdqu %xmm0, -16(%edx) - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave3): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit3) - palignr $3, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 29(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit3) - palignr $3, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit3) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit3) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit3): - lea 13(%edx, %esi), %edx - lea 13(%ecx, %esi), %ecx - movdqu -16(%ecx), %xmm0 - xor %esi, %esi - movdqu %xmm0, -16(%edx) - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave4): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit4) - palignr $4, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 28(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit4) - palignr $4, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit4) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit4) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit4): - lea 12(%edx, %esi), %edx - lea 12(%ecx, %esi), %ecx - movlpd -12(%ecx), %xmm0 - movl -4(%ecx), %eax - movlpd %xmm0, -12(%edx) - movl %eax, -4(%edx) - xor %esi, %esi - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave5): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit5) - palignr $5, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 27(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit5) - palignr $5, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit5) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit5) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit5): - lea 11(%edx, %esi), %edx - lea 11(%ecx, %esi), %ecx - movlpd -11(%ecx), %xmm0 - movl -4(%ecx), %eax - movlpd %xmm0, -11(%edx) - movl %eax, -4(%edx) - xor %esi, %esi - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave6): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit6) - palignr $6, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 26(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit6) - palignr $6, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit6) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit6) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit6): - lea 10(%edx, %esi), %edx - lea 10(%ecx, %esi), %ecx - - movlpd -10(%ecx), %xmm0 - movw -2(%ecx), %ax - movlpd %xmm0, -10(%edx) - movw %ax, -2(%edx) - xor %esi, %esi - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave7): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit7) - palignr $7, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 25(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit7) - palignr $7, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit7) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit7) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit7): - lea 9(%edx, %esi), %edx - lea 9(%ecx, %esi), %ecx - - movlpd -9(%ecx), %xmm0 - movb -1(%ecx), %ah - movlpd %xmm0, -9(%edx) - movb %ah, -1(%edx) - xor %esi, %esi - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave8): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit8) - palignr $8, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 24(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit8) - palignr $8, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit8) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit8) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit8): - lea 8(%edx, %esi), %edx - lea 8(%ecx, %esi), %ecx - movlpd -8(%ecx), %xmm0 - movlpd %xmm0, -8(%edx) - xor %esi, %esi - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave9): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit9) - palignr $9, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 23(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit9) - palignr $9, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit9) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit9) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit9): - lea 7(%edx, %esi), %edx - lea 7(%ecx, %esi), %ecx - - movlpd -8(%ecx), %xmm0 - movlpd %xmm0, -8(%edx) - xor %esi, %esi - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave10): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit10) - palignr $10, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 22(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit10) - palignr $10, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit10) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit10) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit10): - lea 6(%edx, %esi), %edx - lea 6(%ecx, %esi), %ecx - - movlpd -8(%ecx), %xmm0 - movlpd %xmm0, -8(%edx) - xor %esi, %esi - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave11): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit11) - palignr $11, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 21(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit11) - palignr $11, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit11) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit11) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit11): - lea 5(%edx, %esi), %edx - lea 5(%ecx, %esi), %ecx - movl -5(%ecx), %esi - movb -1(%ecx), %ah - movl %esi, -5(%edx) - movb %ah, -1(%edx) - xor %esi, %esi - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave12): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit12) - palignr $12, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 20(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit12) - palignr $12, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit12) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit12) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit12): - lea 4(%edx, %esi), %edx - lea 4(%ecx, %esi), %ecx - movl -4(%ecx), %eax - movl %eax, -4(%edx) - xor %esi, %esi - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave13): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit13) - palignr $13, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 19(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit13) - palignr $13, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit13) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit13) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit13): - lea 3(%edx, %esi), %edx - lea 3(%ecx, %esi), %ecx - - movl -4(%ecx), %eax - movl %eax, -4(%edx) - xor %esi, %esi - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave14): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit14) - palignr $14, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 18(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit14) - palignr $14, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit14) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit14) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit14): - lea 2(%edx, %esi), %edx - lea 2(%ecx, %esi), %ecx - movw -2(%ecx), %ax - movw %ax, -2(%edx) - xor %esi, %esi - jmp L(CopyFrom1To16BytesCase3) - -L(StrncpyLeave15): - movaps %xmm2, %xmm3 - add $48, %ebx - jle L(StrncpyExit15) - palignr $15, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 17(%ecx), %xmm2 - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit15) - palignr $15, %xmm3, %xmm2 - movaps %xmm2, 16(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit15) - movaps %xmm4, 32(%edx) - lea 16(%esi), %esi - sub $16, %ebx - jbe L(StrncpyExit15) - movaps %xmm5, 48(%edx) - lea 16(%esi), %esi - lea -16(%ebx), %ebx -L(StrncpyExit15): - lea 1(%edx, %esi), %edx - lea 1(%ecx, %esi), %ecx - movb -1(%ecx), %ah - movb %ah, -1(%edx) - xor %esi, %esi - jmp L(CopyFrom1To16BytesCase3) -# endif - -# ifndef USE_AS_STRCAT -# ifdef USE_AS_STRNCPY - CFI_POP (%esi) - CFI_POP (%edi) - - .p2align 4 -L(ExitTail0): - movl %edx, %eax - RETURN - - .p2align 4 -L(StrncpyExit15Bytes): - cmp $12, %ebx - jbe L(StrncpyExit12Bytes) - cmpb $0, 8(%ecx) - jz L(ExitTail9) - cmpb $0, 9(%ecx) - jz L(ExitTail10) - cmpb $0, 10(%ecx) - jz L(ExitTail11) - cmpb $0, 11(%ecx) - jz L(ExitTail12) - cmp $13, %ebx - je L(ExitTail13) - cmpb $0, 12(%ecx) - jz L(ExitTail13) - cmp $14, %ebx - je L(ExitTail14) - cmpb $0, 13(%ecx) - jz L(ExitTail14) - movlpd (%ecx), %xmm0 - movlpd 7(%ecx), %xmm1 - movlpd %xmm0, (%edx) - movlpd %xmm1, 7(%edx) -# ifdef USE_AS_STPCPY - lea 14(%edx), %eax - cmpb $1, (%eax) - sbb $-1, %eax -# else - movl %edx, %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit12Bytes): - cmp $9, %ebx - je L(ExitTail9) - cmpb $0, 8(%ecx) - jz L(ExitTail9) - cmp $10, %ebx - je L(ExitTail10) - cmpb $0, 9(%ecx) - jz L(ExitTail10) - cmp $11, %ebx - je L(ExitTail11) - cmpb $0, 10(%ecx) - jz L(ExitTail11) - movlpd (%ecx), %xmm0 - movl 8(%ecx), %eax - movlpd %xmm0, (%edx) - movl %eax, 8(%edx) - SAVE_RESULT_TAIL (11) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit8Bytes): - cmp $4, %ebx - jbe L(StrncpyExit4Bytes) - cmpb $0, (%ecx) - jz L(ExitTail1) - cmpb $0, 1(%ecx) - jz L(ExitTail2) - cmpb $0, 2(%ecx) - jz L(ExitTail3) - cmpb $0, 3(%ecx) - jz L(ExitTail4) - - cmp $5, %ebx - je L(ExitTail5) - cmpb $0, 4(%ecx) - jz L(ExitTail5) - cmp $6, %ebx - je L(ExitTail6) - cmpb $0, 5(%ecx) - jz L(ExitTail6) - cmp $7, %ebx - je L(ExitTail7) - cmpb $0, 6(%ecx) - jz L(ExitTail7) - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) -# ifdef USE_AS_STPCPY - lea 7(%edx), %eax - cmpb $1, (%eax) - sbb $-1, %eax -# else - movl %edx, %eax -# endif - RETURN - - .p2align 4 -L(StrncpyExit4Bytes): - test %ebx, %ebx - jz L(ExitTail0) - cmp $1, %ebx - je L(ExitTail1) - cmpb $0, (%ecx) - jz L(ExitTail1) - cmp $2, %ebx - je L(ExitTail2) - cmpb $0, 1(%ecx) - jz L(ExitTail2) - cmp $3, %ebx - je L(ExitTail3) - cmpb $0, 2(%ecx) - jz L(ExitTail3) - movl (%ecx), %eax - movl %eax, (%edx) - SAVE_RESULT_TAIL (3) -# ifdef USE_AS_STPCPY - cmpb $1, (%eax) - sbb $-1, %eax -# endif - RETURN -# endif - -END (STRCPY) -# endif -#endif diff --git a/sysdeps/i386/i686/multiarch/strcpy.S b/sysdeps/i386/i686/multiarch/strcpy.S deleted file mode 100644 index ffbc03c6d5..0000000000 --- a/sysdeps/i386/i686/multiarch/strcpy.S +++ /dev/null @@ -1,116 +0,0 @@ -/* Multiple versions of strcpy - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if !defined (USE_AS_STPCPY) && !defined (USE_AS_STRNCPY) -# ifndef STRCPY -# define STRCPY strcpy -# endif -#endif - -#ifdef USE_AS_STPCPY -# ifdef USE_AS_STRNCPY -# define STRCPY_SSSE3 __stpncpy_ssse3 -# define STRCPY_SSE2 __stpncpy_sse2 -# define STRCPY_IA32 __stpncpy_ia32 -# define __GI_STRCPY __GI_stpncpy -# define __GI___STRCPY __GI___stpncpy -# else -# define STRCPY_SSSE3 __stpcpy_ssse3 -# define STRCPY_SSE2 __stpcpy_sse2 -# define STRCPY_IA32 __stpcpy_ia32 -# define __GI_STRCPY __GI_stpcpy -# define __GI___STRCPY __GI___stpcpy -# endif -#else -# ifdef USE_AS_STRNCPY -# define STRCPY_SSSE3 __strncpy_ssse3 -# define STRCPY_SSE2 __strncpy_sse2 -# define STRCPY_IA32 __strncpy_ia32 -# define __GI_STRCPY __GI_strncpy -# else -# define STRCPY_SSSE3 __strcpy_ssse3 -# define STRCPY_SSE2 __strcpy_sse2 -# define STRCPY_IA32 __strcpy_ia32 -# define __GI_STRCPY __GI_strcpy -# endif -#endif - - -/* Define multiple versions only for the definition in libc. Don't - define multiple versions for strncpy in static library since we - need strncpy before the initialization happened. */ -#if IS_IN (libc) - - .text -ENTRY(STRCPY) - .type STRCPY, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (STRCPY_IA32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (STRCPY_SSE2) - HAS_ARCH_FEATURE (Fast_Unaligned_Load) - jnz 2f - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (STRCPY_SSSE3) -2: ret -END(STRCPY) - -# undef ENTRY -# define ENTRY(name) \ - .type STRCPY_IA32, @function; \ - .align 16; \ - .globl STRCPY_IA32; \ - .hidden STRCPY_IA32; \ - STRCPY_IA32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size STRCPY_IA32, .-STRCPY_IA32 - -# ifdef SHARED -# undef libc_hidden_builtin_def -/* It doesn't make sense to send libc-internal strcpy calls through a PLT. - The speedup we get from using SSSE3 instruction is likely eaten away - by the indirect call in the PLT. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_STRCPY; __GI_STRCPY = STRCPY_IA32 -# undef libc_hidden_def -# define libc_hidden_def(name) \ - .globl __GI___STRCPY; __GI___STRCPY = STRCPY_IA32 - -# endif -#endif - -#ifdef USE_AS_STPCPY -# ifdef USE_AS_STRNCPY -# include "../../stpncpy.S" -# else -# include "../../i586/stpcpy.S" -# endif -#else -# ifndef USE_AS_STRNCPY -# include "../../i586/strcpy.S" -# endif -#endif diff --git a/sysdeps/i386/i686/multiarch/strcspn-c.c b/sysdeps/i386/i686/multiarch/strcspn-c.c deleted file mode 100644 index 6d61e190a8..0000000000 --- a/sysdeps/i386/i686/multiarch/strcspn-c.c +++ /dev/null @@ -1,2 +0,0 @@ -#define __strcspn_sse2 __strcspn_ia32 -#include diff --git a/sysdeps/i386/i686/multiarch/strcspn.S b/sysdeps/i386/i686/multiarch/strcspn.S deleted file mode 100644 index 21e5093924..0000000000 --- a/sysdeps/i386/i686/multiarch/strcspn.S +++ /dev/null @@ -1,75 +0,0 @@ -/* Multiple versions of strcspn - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#ifdef USE_AS_STRPBRK -#define STRCSPN_SSE42 __strpbrk_sse42 -#define STRCSPN_IA32 __strpbrk_ia32 -#define __GI_STRCSPN __GI_strpbrk -#else -#ifndef STRCSPN -#define STRCSPN strcspn -#define STRCSPN_SSE42 __strcspn_sse42 -#define STRCSPN_IA32 __strcspn_ia32 -#define __GI_STRCSPN __GI_strcspn -#endif -#endif - -/* Define multiple versions only for the definition in libc. Don't - define multiple versions for strpbrk in static library since we - need strpbrk before the initialization happened. */ -#if (defined SHARED || !defined USE_AS_STRPBRK) && IS_IN (libc) - .text -ENTRY(STRCSPN) - .type STRCSPN, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (STRCSPN_IA32) - HAS_CPU_FEATURE (SSE4_2) - jz 2f - LOAD_FUNC_GOT_EAX (STRCSPN_SSE42) -2: ret -END(STRCSPN) - -# undef ENTRY -# define ENTRY(name) \ - .type STRCSPN_IA32, @function; \ - .globl STRCSPN_IA32; \ - .p2align 4; \ - STRCSPN_IA32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size STRCSPN_IA32, .-STRCSPN_IA32 -# undef libc_hidden_builtin_def -/* IFUNC doesn't work with the hidden functions in shared library since - they will be called without setting up EBX needed for PLT which is - used by IFUNC. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_STRCSPN; __GI_STRCSPN = STRCSPN_IA32 -#endif - -#ifdef USE_AS_STRPBRK -#include "../../strpbrk.S" -#else -#include "../../strcspn.S" -#endif diff --git a/sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S b/sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S deleted file mode 100644 index d3ea864bab..0000000000 --- a/sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S +++ /dev/null @@ -1,125 +0,0 @@ -/* strlen with SSE2 and BSF - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined SHARED && IS_IN (libc) - -#include - -#define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -#define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -#define PUSH(REG) pushl REG; CFI_PUSH (REG) -#define POP(REG) popl REG; CFI_POP (REG) -#define PARMS 4 + 8 /* Preserve ESI and EDI. */ -#define STR PARMS -#define ENTRANCE PUSH (%esi); PUSH (%edi); cfi_remember_state -#define RETURN POP (%edi); POP (%esi); ret; \ - cfi_restore_state; cfi_remember_state - - .text -ENTRY ( __strlen_sse2_bsf) - ENTRANCE - mov STR(%esp), %edi - xor %eax, %eax - mov %edi, %ecx - and $0x3f, %ecx - pxor %xmm0, %xmm0 - cmp $0x30, %ecx - ja L(next) - movdqu (%edi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - jnz L(exit_less16) - mov %edi, %eax - and $-16, %eax - jmp L(align16_start) -L(next): - - mov %edi, %eax - and $-16, %eax - pcmpeqb (%eax), %xmm0 - mov $-1, %esi - sub %eax, %ecx - shl %cl, %esi - pmovmskb %xmm0, %edx - and %esi, %edx - jnz L(exit) -L(align16_start): - pxor %xmm0, %xmm0 - pxor %xmm1, %xmm1 - pxor %xmm2, %xmm2 - pxor %xmm3, %xmm3 - .p2align 4 -L(align16_loop): - pcmpeqb 16(%eax), %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - jnz L(exit16) - - pcmpeqb 32(%eax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - jnz L(exit32) - - pcmpeqb 48(%eax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - jnz L(exit48) - - pcmpeqb 64(%eax), %xmm3 - pmovmskb %xmm3, %edx - lea 64(%eax), %eax - test %edx, %edx - jz L(align16_loop) -L(exit): - sub %edi, %eax -L(exit_less16): - bsf %edx, %edx - add %edx, %eax - RETURN -L(exit16): - sub %edi, %eax - bsf %edx, %edx - add %edx, %eax - add $16, %eax - RETURN -L(exit32): - sub %edi, %eax - bsf %edx, %edx - add %edx, %eax - add $32, %eax - RETURN -L(exit48): - sub %edi, %eax - bsf %edx, %edx - add %edx, %eax - add $48, %eax - POP (%edi) - POP (%esi) - ret - -END ( __strlen_sse2_bsf) - -#endif diff --git a/sysdeps/i386/i686/multiarch/strlen-sse2.S b/sysdeps/i386/i686/multiarch/strlen-sse2.S deleted file mode 100644 index 36fc1469d0..0000000000 --- a/sysdeps/i386/i686/multiarch/strlen-sse2.S +++ /dev/null @@ -1,695 +0,0 @@ -/* strlen with SSE2 - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* for strlen only SHARED version is optimized, for strcat, strncat, strnlen both STATIC and SHARED are optimized */ - -#if (defined USE_AS_STRNLEN || defined USE_AS_STRCAT || defined SHARED) && IS_IN (libc) - -# ifndef USE_AS_STRCAT - -# include -# define PARMS 4 -# define STR PARMS -# define RETURN ret - -# ifdef USE_AS_STRNLEN -# define LEN PARMS + 8 -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) -# undef RETURN -# define RETURN POP (%edi); CFI_PUSH(%edi); ret -# endif - -# ifndef STRLEN -# define STRLEN __strlen_sse2 -# endif - - atom_text_section -ENTRY (STRLEN) - mov STR(%esp), %edx -# ifdef USE_AS_STRNLEN - PUSH (%edi) - movl LEN(%esp), %edi - sub $4, %edi - jbe L(len_less4_prolog) -# endif -# endif - xor %eax, %eax - cmpb $0, (%edx) - jz L(exit_tail0) - cmpb $0, 1(%edx) - jz L(exit_tail1) - cmpb $0, 2(%edx) - jz L(exit_tail2) - cmpb $0, 3(%edx) - jz L(exit_tail3) - -# ifdef USE_AS_STRNLEN - sub $4, %edi - jbe L(len_less8_prolog) -# endif - - cmpb $0, 4(%edx) - jz L(exit_tail4) - cmpb $0, 5(%edx) - jz L(exit_tail5) - cmpb $0, 6(%edx) - jz L(exit_tail6) - cmpb $0, 7(%edx) - jz L(exit_tail7) - -# ifdef USE_AS_STRNLEN - sub $4, %edi - jbe L(len_less12_prolog) -# endif - - cmpb $0, 8(%edx) - jz L(exit_tail8) - cmpb $0, 9(%edx) - jz L(exit_tail9) - cmpb $0, 10(%edx) - jz L(exit_tail10) - cmpb $0, 11(%edx) - jz L(exit_tail11) - -# ifdef USE_AS_STRNLEN - sub $4, %edi - jbe L(len_less16_prolog) -# endif - - cmpb $0, 12(%edx) - jz L(exit_tail12) - cmpb $0, 13(%edx) - jz L(exit_tail13) - cmpb $0, 14(%edx) - jz L(exit_tail14) - cmpb $0, 15(%edx) - jz L(exit_tail15) - - pxor %xmm0, %xmm0 - lea 16(%edx), %eax - mov %eax, %ecx - and $-16, %eax - -# ifdef USE_AS_STRNLEN - and $15, %edx - add %edx, %edi - sub $64, %edi - jbe L(len_less64) -# endif - - pcmpeqb (%eax), %xmm0 - pmovmskb %xmm0, %edx - pxor %xmm1, %xmm1 - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqb (%eax), %xmm1 - pmovmskb %xmm1, %edx - pxor %xmm2, %xmm2 - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqb (%eax), %xmm2 - pmovmskb %xmm2, %edx - pxor %xmm3, %xmm3 - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqb (%eax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - -# ifdef USE_AS_STRNLEN - sub $64, %edi - jbe L(len_less64) -# endif - - pcmpeqb (%eax), %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqb (%eax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqb (%eax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqb (%eax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - -# ifdef USE_AS_STRNLEN - sub $64, %edi - jbe L(len_less64) -# endif - - pcmpeqb (%eax), %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqb (%eax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqb (%eax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqb (%eax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - -# ifdef USE_AS_STRNLEN - sub $64, %edi - jbe L(len_less64) -# endif - - pcmpeqb (%eax), %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqb (%eax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqb (%eax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqb (%eax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - -# ifdef USE_AS_STRNLEN - mov %eax, %edx - and $63, %edx - add %edx, %edi -# endif - - and $-0x40, %eax - - .p2align 4 -L(aligned_64_loop): -# ifdef USE_AS_STRNLEN - sub $64, %edi - jbe L(len_less64) -# endif - movaps (%eax), %xmm0 - movaps 16(%eax), %xmm1 - movaps 32(%eax), %xmm2 - movaps 48(%eax), %xmm6 - pminub %xmm1, %xmm0 - pminub %xmm6, %xmm2 - pminub %xmm0, %xmm2 - pcmpeqb %xmm3, %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - lea 64(%eax), %eax - jz L(aligned_64_loop) - - pcmpeqb -64(%eax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 48(%ecx), %ecx - jnz L(exit) - - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea -16(%ecx), %ecx - jnz L(exit) - - pcmpeqb -32(%eax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea -16(%ecx), %ecx - jnz L(exit) - - pcmpeqb %xmm6, %xmm3 - pmovmskb %xmm3, %edx - lea -16(%ecx), %ecx -L(exit): - sub %ecx, %eax - test %dl, %dl - jz L(exit_high) - - mov %dl, %cl - and $15, %cl - jz L(exit_8) - test $0x01, %dl - jnz L(exit_tail0) - test $0x02, %dl - jnz L(exit_tail1) - test $0x04, %dl - jnz L(exit_tail2) - add $3, %eax - RETURN - - .p2align 4 -L(exit_8): - test $0x10, %dl - jnz L(exit_tail4) - test $0x20, %dl - jnz L(exit_tail5) - test $0x40, %dl - jnz L(exit_tail6) - add $7, %eax - RETURN - - .p2align 4 -L(exit_high): - mov %dh, %ch - and $15, %ch - jz L(exit_high_8) - test $0x01, %dh - jnz L(exit_tail8) - test $0x02, %dh - jnz L(exit_tail9) - test $0x04, %dh - jnz L(exit_tail10) - add $11, %eax - RETURN - - .p2align 4 -L(exit_high_8): - test $0x10, %dh - jnz L(exit_tail12) - test $0x20, %dh - jnz L(exit_tail13) - test $0x40, %dh - jnz L(exit_tail14) - add $15, %eax -L(exit_tail0): - RETURN - -# ifdef USE_AS_STRNLEN - - .p2align 4 -L(len_less64): - pxor %xmm0, %xmm0 - add $64, %edi - - pcmpeqb (%eax), %xmm0 - pmovmskb %xmm0, %edx - pxor %xmm1, %xmm1 - lea 16(%eax), %eax - test %edx, %edx - jnz L(strnlen_exit) - - sub $16, %edi - jbe L(return_start_len) - - pcmpeqb (%eax), %xmm1 - pmovmskb %xmm1, %edx - lea 16(%eax), %eax - test %edx, %edx - jnz L(strnlen_exit) - - sub $16, %edi - jbe L(return_start_len) - - pcmpeqb (%eax), %xmm0 - pmovmskb %xmm0, %edx - lea 16(%eax), %eax - test %edx, %edx - jnz L(strnlen_exit) - - sub $16, %edi - jbe L(return_start_len) - - pcmpeqb (%eax), %xmm1 - pmovmskb %xmm1, %edx - lea 16(%eax), %eax - test %edx, %edx - jnz L(strnlen_exit) - - movl LEN(%esp), %eax - RETURN - - .p2align 4 -L(strnlen_exit): - sub %ecx, %eax - - test %dl, %dl - jz L(strnlen_exit_high) - mov %dl, %cl - and $15, %cl - jz L(strnlen_exit_8) - test $0x01, %dl - jnz L(exit_tail0) - test $0x02, %dl - jnz L(strnlen_exit_tail1) - test $0x04, %dl - jnz L(strnlen_exit_tail2) - sub $4, %edi - jb L(return_start_len) - lea 3(%eax), %eax - RETURN - - .p2align 4 -L(strnlen_exit_8): - test $0x10, %dl - jnz L(strnlen_exit_tail4) - test $0x20, %dl - jnz L(strnlen_exit_tail5) - test $0x40, %dl - jnz L(strnlen_exit_tail6) - sub $8, %edi - jb L(return_start_len) - lea 7(%eax), %eax - RETURN - - .p2align 4 -L(strnlen_exit_high): - mov %dh, %ch - and $15, %ch - jz L(strnlen_exit_high_8) - test $0x01, %dh - jnz L(strnlen_exit_tail8) - test $0x02, %dh - jnz L(strnlen_exit_tail9) - test $0x04, %dh - jnz L(strnlen_exit_tail10) - sub $12, %edi - jb L(return_start_len) - lea 11(%eax), %eax - RETURN - - .p2align 4 -L(strnlen_exit_high_8): - test $0x10, %dh - jnz L(strnlen_exit_tail12) - test $0x20, %dh - jnz L(strnlen_exit_tail13) - test $0x40, %dh - jnz L(strnlen_exit_tail14) - sub $16, %edi - jb L(return_start_len) - lea 15(%eax), %eax - RETURN - - .p2align 4 -L(strnlen_exit_tail1): - sub $2, %edi - jb L(return_start_len) - lea 1(%eax), %eax - RETURN - - .p2align 4 -L(strnlen_exit_tail2): - sub $3, %edi - jb L(return_start_len) - lea 2(%eax), %eax - RETURN - - .p2align 4 -L(strnlen_exit_tail4): - sub $5, %edi - jb L(return_start_len) - lea 4(%eax), %eax - RETURN - - .p2align 4 -L(strnlen_exit_tail5): - sub $6, %edi - jb L(return_start_len) - lea 5(%eax), %eax - RETURN - - .p2align 4 -L(strnlen_exit_tail6): - sub $7, %edi - jb L(return_start_len) - lea 6(%eax), %eax - RETURN - - .p2align 4 -L(strnlen_exit_tail8): - sub $9, %edi - jb L(return_start_len) - lea 8(%eax), %eax - RETURN - - .p2align 4 -L(strnlen_exit_tail9): - sub $10, %edi - jb L(return_start_len) - lea 9(%eax), %eax - RETURN - - .p2align 4 -L(strnlen_exit_tail10): - sub $11, %edi - jb L(return_start_len) - lea 10(%eax), %eax - RETURN - - .p2align 4 -L(strnlen_exit_tail12): - sub $13, %edi - jb L(return_start_len) - lea 12(%eax), %eax - RETURN - - .p2align 4 -L(strnlen_exit_tail13): - sub $14, %edi - jb L(return_start_len) - lea 13(%eax), %eax - RETURN - - .p2align 4 -L(strnlen_exit_tail14): - sub $15, %edi - jb L(return_start_len) - lea 14(%eax), %eax - RETURN - - .p2align 4 -L(return_start_len): - movl LEN(%esp), %eax - RETURN - -/* for prolog only */ - - .p2align 4 -L(len_less4_prolog): - xor %eax, %eax - - add $4, %edi - jz L(exit_tail0) - - cmpb $0, (%edx) - jz L(exit_tail0) - cmp $1, %edi - je L(exit_tail1) - - cmpb $0, 1(%edx) - jz L(exit_tail1) - cmp $2, %edi - je L(exit_tail2) - - cmpb $0, 2(%edx) - jz L(exit_tail2) - cmp $3, %edi - je L(exit_tail3) - - cmpb $0, 3(%edx) - jz L(exit_tail3) - mov $4, %eax - RETURN - - .p2align 4 -L(len_less8_prolog): - add $4, %edi - - cmpb $0, 4(%edx) - jz L(exit_tail4) - cmp $1, %edi - je L(exit_tail5) - - cmpb $0, 5(%edx) - jz L(exit_tail5) - cmp $2, %edi - je L(exit_tail6) - - cmpb $0, 6(%edx) - jz L(exit_tail6) - cmp $3, %edi - je L(exit_tail7) - - cmpb $0, 7(%edx) - jz L(exit_tail7) - mov $8, %eax - RETURN - - - .p2align 4 -L(len_less12_prolog): - add $4, %edi - - cmpb $0, 8(%edx) - jz L(exit_tail8) - cmp $1, %edi - je L(exit_tail9) - - cmpb $0, 9(%edx) - jz L(exit_tail9) - cmp $2, %edi - je L(exit_tail10) - - cmpb $0, 10(%edx) - jz L(exit_tail10) - cmp $3, %edi - je L(exit_tail11) - - cmpb $0, 11(%edx) - jz L(exit_tail11) - mov $12, %eax - RETURN - - .p2align 4 -L(len_less16_prolog): - add $4, %edi - - cmpb $0, 12(%edx) - jz L(exit_tail12) - cmp $1, %edi - je L(exit_tail13) - - cmpb $0, 13(%edx) - jz L(exit_tail13) - cmp $2, %edi - je L(exit_tail14) - - cmpb $0, 14(%edx) - jz L(exit_tail14) - cmp $3, %edi - je L(exit_tail15) - - cmpb $0, 15(%edx) - jz L(exit_tail15) - mov $16, %eax - RETURN -# endif - - .p2align 4 -L(exit_tail1): - add $1, %eax - RETURN - -L(exit_tail2): - add $2, %eax - RETURN - -L(exit_tail3): - add $3, %eax - RETURN - -L(exit_tail4): - add $4, %eax - RETURN - -L(exit_tail5): - add $5, %eax - RETURN - -L(exit_tail6): - add $6, %eax - RETURN - -L(exit_tail7): - add $7, %eax - RETURN - -L(exit_tail8): - add $8, %eax - RETURN - -L(exit_tail9): - add $9, %eax - RETURN - -L(exit_tail10): - add $10, %eax - RETURN - -L(exit_tail11): - add $11, %eax - RETURN - -L(exit_tail12): - add $12, %eax - RETURN - -L(exit_tail13): - add $13, %eax - RETURN - -L(exit_tail14): - add $14, %eax - RETURN - -L(exit_tail15): - add $15, %eax -# ifndef USE_AS_STRCAT - RETURN -END (STRLEN) -# endif -#endif diff --git a/sysdeps/i386/i686/multiarch/strlen.S b/sysdeps/i386/i686/multiarch/strlen.S deleted file mode 100644 index 77cf6bcdb0..0000000000 --- a/sysdeps/i386/i686/multiarch/strlen.S +++ /dev/null @@ -1,60 +0,0 @@ -/* Multiple versions of strlen - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in libc and for the - DSO. In static binaries, we need strlen before the initialization - happened. */ -#if defined SHARED && IS_IN (libc) - .text -ENTRY(strlen) - .type strlen, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__strlen_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__strlen_sse2_bsf) - HAS_ARCH_FEATURE (Slow_BSF) - jz 2f - LOAD_FUNC_GOT_EAX (__strlen_sse2) -2: ret -END(strlen) - -# undef ENTRY -# define ENTRY(name) \ - .type __strlen_ia32, @function; \ - .globl __strlen_ia32; \ - .p2align 4; \ - __strlen_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __strlen_ia32, .-__strlen_ia32 -# undef libc_hidden_builtin_def -/* IFUNC doesn't work with the hidden functions in shared library since - they will be called without setting up EBX needed for PLT which is - used by IFUNC. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_strlen; __GI_strlen = __strlen_ia32 -#endif - -#include "../../i586/strlen.S" diff --git a/sysdeps/i386/i686/multiarch/strncase-c.c b/sysdeps/i386/i686/multiarch/strncase-c.c deleted file mode 100644 index 76581eb62b..0000000000 --- a/sysdeps/i386/i686/multiarch/strncase-c.c +++ /dev/null @@ -1,8 +0,0 @@ -#include - -extern __typeof (strncasecmp) __strncasecmp_nonascii; - -#define __strncasecmp __strncasecmp_nonascii -#include - -strong_alias (__strncasecmp_nonascii, __strncasecmp_ia32) diff --git a/sysdeps/i386/i686/multiarch/strncase.S b/sysdeps/i386/i686/multiarch/strncase.S deleted file mode 100644 index a56e63a566..0000000000 --- a/sysdeps/i386/i686/multiarch/strncase.S +++ /dev/null @@ -1,39 +0,0 @@ -/* Entry point for multi-version x86 strncasecmp. - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY(__strncasecmp) - .type __strncasecmp, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__strncasecmp_ia32) - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (__strncasecmp_ssse3) - HAS_CPU_FEATURE (SSE4_2) - jz 2f - HAS_ARCH_FEATURE (Slow_SSE4_2) - jnz 2f - LOAD_FUNC_GOT_EAX (__strncasecmp_sse4_2) -2: ret -END(__strncasecmp) - -weak_alias (__strncasecmp, strncasecmp) diff --git a/sysdeps/i386/i686/multiarch/strncase_l-c.c b/sysdeps/i386/i686/multiarch/strncase_l-c.c deleted file mode 100644 index 7e601af271..0000000000 --- a/sysdeps/i386/i686/multiarch/strncase_l-c.c +++ /dev/null @@ -1,13 +0,0 @@ -#include - -extern __typeof (strncasecmp_l) __strncasecmp_l_nonascii; - -#define __strncasecmp_l __strncasecmp_l_nonascii -#define USE_IN_EXTENDED_LOCALE_MODEL 1 -#include - -strong_alias (__strncasecmp_l_nonascii, __strncasecmp_l_ia32) - -/* The needs of strcasecmp in libc are minimal, no need to go through - the IFUNC. */ -strong_alias (__strncasecmp_l_nonascii, __GI___strncasecmp_l) diff --git a/sysdeps/i386/i686/multiarch/strncase_l-sse4.S b/sysdeps/i386/i686/multiarch/strncase_l-sse4.S deleted file mode 100644 index 557210832e..0000000000 --- a/sysdeps/i386/i686/multiarch/strncase_l-sse4.S +++ /dev/null @@ -1,2 +0,0 @@ -#define USE_AS_STRNCASECMP_L 1 -#include "strcmp-sse4.S" diff --git a/sysdeps/i386/i686/multiarch/strncase_l-ssse3.S b/sysdeps/i386/i686/multiarch/strncase_l-ssse3.S deleted file mode 100644 index d438a1ae35..0000000000 --- a/sysdeps/i386/i686/multiarch/strncase_l-ssse3.S +++ /dev/null @@ -1,2 +0,0 @@ -#define USE_AS_STRNCASECMP_L 1 -#include "strcmp-ssse3.S" diff --git a/sysdeps/i386/i686/multiarch/strncase_l.S b/sysdeps/i386/i686/multiarch/strncase_l.S deleted file mode 100644 index 8a74ee8574..0000000000 --- a/sysdeps/i386/i686/multiarch/strncase_l.S +++ /dev/null @@ -1,7 +0,0 @@ -/* Multiple versions of strncasecmp_l - All versions must be listed in ifunc-impl-list.c. */ -#define STRCMP __strncasecmp_l -#define USE_AS_STRNCASECMP_L -#include "strcmp.S" - -weak_alias (__strncasecmp_l, strncasecmp_l) diff --git a/sysdeps/i386/i686/multiarch/strncat-c.c b/sysdeps/i386/i686/multiarch/strncat-c.c deleted file mode 100644 index 132a000545..0000000000 --- a/sysdeps/i386/i686/multiarch/strncat-c.c +++ /dev/null @@ -1,8 +0,0 @@ -#define STRNCAT __strncat_ia32 -#ifdef SHARED -#undef libc_hidden_def -#define libc_hidden_def(name) \ - __hidden_ver1 (__strncat_ia32, __GI___strncat, __strncat_ia32); -#endif - -#include "string/strncat.c" diff --git a/sysdeps/i386/i686/multiarch/strncat-sse2.S b/sysdeps/i386/i686/multiarch/strncat-sse2.S deleted file mode 100644 index f1045b72b8..0000000000 --- a/sysdeps/i386/i686/multiarch/strncat-sse2.S +++ /dev/null @@ -1,4 +0,0 @@ -#define STRCAT __strncat_sse2 -#define USE_AS_STRNCAT - -#include "strcat-sse2.S" diff --git a/sysdeps/i386/i686/multiarch/strncat-ssse3.S b/sysdeps/i386/i686/multiarch/strncat-ssse3.S deleted file mode 100644 index 625b90a978..0000000000 --- a/sysdeps/i386/i686/multiarch/strncat-ssse3.S +++ /dev/null @@ -1,4 +0,0 @@ -#define STRCAT __strncat_ssse3 -#define USE_AS_STRNCAT - -#include "strcat-ssse3.S" diff --git a/sysdeps/i386/i686/multiarch/strncat.S b/sysdeps/i386/i686/multiarch/strncat.S deleted file mode 100644 index 5c1bf41453..0000000000 --- a/sysdeps/i386/i686/multiarch/strncat.S +++ /dev/null @@ -1,5 +0,0 @@ -/* Multiple versions of strncat - All versions must be listed in ifunc-impl-list.c. */ -#define STRCAT strncat -#define USE_AS_STRNCAT -#include "strcat.S" diff --git a/sysdeps/i386/i686/multiarch/strncmp-c.c b/sysdeps/i386/i686/multiarch/strncmp-c.c deleted file mode 100644 index cc059da494..0000000000 --- a/sysdeps/i386/i686/multiarch/strncmp-c.c +++ /dev/null @@ -1,8 +0,0 @@ -#ifdef SHARED -# define STRNCMP __strncmp_ia32 -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strncmp_ia32, __GI_strncmp, __strncmp_ia32); -#endif - -#include "string/strncmp.c" diff --git a/sysdeps/i386/i686/multiarch/strncmp-sse4.S b/sysdeps/i386/i686/multiarch/strncmp-sse4.S deleted file mode 100644 index cf14dfaf6c..0000000000 --- a/sysdeps/i386/i686/multiarch/strncmp-sse4.S +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef SHARED -# define USE_AS_STRNCMP -# define STRCMP __strncmp_sse4_2 -# include "strcmp-sse4.S" -#endif diff --git a/sysdeps/i386/i686/multiarch/strncmp-ssse3.S b/sysdeps/i386/i686/multiarch/strncmp-ssse3.S deleted file mode 100644 index 536c8685f2..0000000000 --- a/sysdeps/i386/i686/multiarch/strncmp-ssse3.S +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef SHARED -# define USE_AS_STRNCMP -# define STRCMP __strncmp_ssse3 -# include "strcmp-ssse3.S" -#endif diff --git a/sysdeps/i386/i686/multiarch/strncmp.S b/sysdeps/i386/i686/multiarch/strncmp.S deleted file mode 100644 index 150d4786d2..0000000000 --- a/sysdeps/i386/i686/multiarch/strncmp.S +++ /dev/null @@ -1,5 +0,0 @@ -/* Multiple versions of strncmp - All versions must be listed in ifunc-impl-list.c. */ -#define USE_AS_STRNCMP -#define STRCMP strncmp -#include "strcmp.S" diff --git a/sysdeps/i386/i686/multiarch/strncpy-c.c b/sysdeps/i386/i686/multiarch/strncpy-c.c deleted file mode 100644 index 201e3f98b3..0000000000 --- a/sysdeps/i386/i686/multiarch/strncpy-c.c +++ /dev/null @@ -1,8 +0,0 @@ -#define STRNCPY __strncpy_ia32 -#ifdef SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strncpy_ia32, __GI_strncpy, __strncpy_ia32); -#endif - -#include "string/strncpy.c" diff --git a/sysdeps/i386/i686/multiarch/strncpy-sse2.S b/sysdeps/i386/i686/multiarch/strncpy-sse2.S deleted file mode 100644 index bdd99239a4..0000000000 --- a/sysdeps/i386/i686/multiarch/strncpy-sse2.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_STRNCPY -#define STRCPY __strncpy_sse2 -#include "strcpy-sse2.S" diff --git a/sysdeps/i386/i686/multiarch/strncpy-ssse3.S b/sysdeps/i386/i686/multiarch/strncpy-ssse3.S deleted file mode 100644 index bf82ee447d..0000000000 --- a/sysdeps/i386/i686/multiarch/strncpy-ssse3.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_STRNCPY -#define STRCPY __strncpy_ssse3 -#include "strcpy-ssse3.S" diff --git a/sysdeps/i386/i686/multiarch/strncpy.S b/sysdeps/i386/i686/multiarch/strncpy.S deleted file mode 100644 index 9c257efc6e..0000000000 --- a/sysdeps/i386/i686/multiarch/strncpy.S +++ /dev/null @@ -1,5 +0,0 @@ -/* Multiple versions of strncpy - All versions must be listed in ifunc-impl-list.c. */ -#define USE_AS_STRNCPY -#define STRCPY strncpy -#include "strcpy.S" diff --git a/sysdeps/i386/i686/multiarch/strnlen-c.c b/sysdeps/i386/i686/multiarch/strnlen-c.c deleted file mode 100644 index 351e939a93..0000000000 --- a/sysdeps/i386/i686/multiarch/strnlen-c.c +++ /dev/null @@ -1,10 +0,0 @@ -#define STRNLEN __strnlen_ia32 -#ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__strnlen_ia32, __GI_strnlen, __strnlen_ia32); \ - strong_alias (__strnlen_ia32, __strnlen_ia32_1); \ - __hidden_ver1 (__strnlen_ia32_1, __GI___strnlen, __strnlen_ia32_1); -#endif - -#include "string/strnlen.c" diff --git a/sysdeps/i386/i686/multiarch/strnlen-sse2.S b/sysdeps/i386/i686/multiarch/strnlen-sse2.S deleted file mode 100644 index 56b6ae2a5c..0000000000 --- a/sysdeps/i386/i686/multiarch/strnlen-sse2.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_STRNLEN -#define STRLEN __strnlen_sse2 -#include "strlen-sse2.S" diff --git a/sysdeps/i386/i686/multiarch/strnlen.S b/sysdeps/i386/i686/multiarch/strnlen.S deleted file mode 100644 index d241522c70..0000000000 --- a/sysdeps/i386/i686/multiarch/strnlen.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of strnlen - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if IS_IN (libc) - .text -ENTRY(__strnlen) - .type __strnlen, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__strnlen_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__strnlen_sse2) -2: ret -END(__strnlen) - -weak_alias(__strnlen, strnlen) -#endif diff --git a/sysdeps/i386/i686/multiarch/strpbrk-c.c b/sysdeps/i386/i686/multiarch/strpbrk-c.c deleted file mode 100644 index 5db62053b3..0000000000 --- a/sysdeps/i386/i686/multiarch/strpbrk-c.c +++ /dev/null @@ -1,2 +0,0 @@ -#define __strpbrk_sse2 __strpbrk_ia32 -#include diff --git a/sysdeps/i386/i686/multiarch/strpbrk.S b/sysdeps/i386/i686/multiarch/strpbrk.S deleted file mode 100644 index 7201d6376f..0000000000 --- a/sysdeps/i386/i686/multiarch/strpbrk.S +++ /dev/null @@ -1,5 +0,0 @@ -/* Multiple versions of strpbrk - All versions must be listed in ifunc-impl-list.c. */ -#define STRCSPN strpbrk -#define USE_AS_STRPBRK -#include "strcspn.S" diff --git a/sysdeps/i386/i686/multiarch/strrchr-sse2-bsf.S b/sysdeps/i386/i686/multiarch/strrchr-sse2-bsf.S deleted file mode 100644 index 39a7c8825b..0000000000 --- a/sysdeps/i386/i686/multiarch/strrchr-sse2-bsf.S +++ /dev/null @@ -1,282 +0,0 @@ -/* strrchr with SSE2 with bsf and bsr - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# define PARMS 4 -# define STR1 PARMS -# define STR2 STR1+4 - - .text -ENTRY (__strrchr_sse2_bsf) - - mov STR1(%esp), %ecx - movd STR2(%esp), %xmm1 - - PUSH (%edi) - pxor %xmm2, %xmm2 - mov %ecx, %edi - punpcklbw %xmm1, %xmm1 - punpcklbw %xmm1, %xmm1 - /* ECX has OFFSET. */ - and $63, %ecx - cmp $48, %ecx - pshufd $0, %xmm1, %xmm1 - ja L(crosscashe) - -/* unaligned string. */ - movdqu (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - pcmpeqb %xmm1, %xmm0 - /* Find where NULL is. */ - pmovmskb %xmm2, %edx - /* Check if there is a match. */ - pmovmskb %xmm0, %eax - - test %eax, %eax - jnz L(unaligned_match1) - - test %edx, %edx - jnz L(return_null) - - and $-16, %edi - add $16, %edi - - PUSH (%esi) - PUSH (%ebx) - - xor %ebx, %ebx - jmp L(loop) - - CFI_POP (%esi) - CFI_POP (%ebx) - - .p2align 4 -L(unaligned_return_value1): - bsf %edx, %ecx - mov $2, %edx - shl %cl, %edx - sub $1, %edx - and %edx, %eax - jz L(return_null) - bsr %eax, %eax - add %edi, %eax - POP (%edi) - ret - CFI_PUSH (%edi) - - .p2align 4 -L(unaligned_match1): - test %edx, %edx - jnz L(unaligned_return_value1) - - PUSH (%esi) - PUSH (%ebx) - - mov %eax, %ebx - lea 16(%edi), %esi - and $-16, %edi - add $16, %edi - jmp L(loop) - - CFI_POP (%esi) - CFI_POP (%ebx) - - .p2align 4 - L(crosscashe): -/* Hancle unaligned string. */ - and $15, %ecx - and $-16, %edi - pxor %xmm3, %xmm3 - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm3 - pcmpeqb %xmm1, %xmm0 - /* Find where NULL is. */ - pmovmskb %xmm3, %edx - /* Check if there is a match. */ - pmovmskb %xmm0, %eax - /* Remove the leading bytes. */ - shr %cl, %edx - shr %cl, %eax - - test %eax, %eax - jnz L(unaligned_match) - - test %edx, %edx - jnz L(return_null) - - add $16, %edi - - PUSH (%esi) - PUSH (%ebx) - - xor %ebx, %ebx - jmp L(loop) - - CFI_POP (%esi) - CFI_POP (%ebx) - - .p2align 4 -L(unaligned_return_value): - add %ecx, %edi - bsf %edx, %ecx - mov $2, %edx - shl %cl, %edx - sub $1, %edx - and %edx, %eax - jz L(return_null) - bsr %eax, %eax - add %edi, %eax - POP (%edi) - ret - CFI_PUSH (%edi) - - .p2align 4 -L(unaligned_match): - test %edx, %edx - jnz L(unaligned_return_value) - - PUSH (%esi) - PUSH (%ebx) - - mov %eax, %ebx - add $16, %edi - lea (%edi, %ecx), %esi - -/* Loop start on aligned string. */ - .p2align 4 -L(loop): - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - add $16, %edi - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %ecx - pmovmskb %xmm0, %eax - or %eax, %ecx - jnz L(matches) - - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - add $16, %edi - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %ecx - pmovmskb %xmm0, %eax - or %eax, %ecx - jnz L(matches) - - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - add $16, %edi - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %ecx - pmovmskb %xmm0, %eax - or %eax, %ecx - jnz L(matches) - - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - add $16, %edi - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %ecx - pmovmskb %xmm0, %eax - or %eax, %ecx - jz L(loop) - -L(matches): - test %eax, %eax - jnz L(match) -L(return_value): - test %ebx, %ebx - jz L(return_null_1) - bsr %ebx, %eax - add %esi, %eax - - POP (%ebx) - POP (%esi) - - sub $16, %eax - POP (%edi) - ret - - CFI_PUSH (%edi) - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(match): - pmovmskb %xmm2, %ecx - test %ecx, %ecx - jnz L(return_value_1) - mov %eax, %ebx - mov %edi, %esi - jmp L(loop) - - .p2align 4 -L(return_value_1): - bsf %ecx, %ecx - mov $2, %edx - shl %cl, %edx - sub $1, %edx - and %edx, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - - bsr %eax, %eax - add %edi, %eax - sub $16, %eax - POP (%edi) - ret - - CFI_PUSH (%edi) -/* Return NULL. */ - .p2align 4 -L(return_null): - xor %eax, %eax - POP (%edi) - ret - - CFI_PUSH (%edi) - CFI_PUSH (%ebx) - CFI_PUSH (%esi) -/* Return NULL. */ - .p2align 4 -L(return_null_1): - POP (%ebx) - POP (%esi) - POP (%edi) - xor %eax, %eax - ret - -END (__strrchr_sse2_bsf) -#endif diff --git a/sysdeps/i386/i686/multiarch/strrchr-sse2.S b/sysdeps/i386/i686/multiarch/strrchr-sse2.S deleted file mode 100644 index 20934288be..0000000000 --- a/sysdeps/i386/i686/multiarch/strrchr-sse2.S +++ /dev/null @@ -1,708 +0,0 @@ -/* strrchr SSE2 without bsf and bsr - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# define PARMS 8 -# define ENTRANCE PUSH(%edi); -# define RETURN POP(%edi); ret; CFI_PUSH(%edi); - -# define STR1 PARMS -# define STR2 STR1+4 - - atom_text_section -ENTRY (__strrchr_sse2) - - ENTRANCE - mov STR1(%esp), %ecx - movd STR2(%esp), %xmm1 - - pxor %xmm2, %xmm2 - mov %ecx, %edi - punpcklbw %xmm1, %xmm1 - punpcklbw %xmm1, %xmm1 - /* ECX has OFFSET. */ - and $63, %ecx - cmp $48, %ecx - pshufd $0, %xmm1, %xmm1 - ja L(crosscache) - -/* unaligned string. */ - movdqu (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - pcmpeqb %xmm1, %xmm0 - /* Find where NULL is. */ - pmovmskb %xmm2, %ecx - /* Check if there is a match. */ - pmovmskb %xmm0, %eax - add $16, %edi - - test %eax, %eax - jnz L(unaligned_match1) - - test %ecx, %ecx - jnz L(return_null) - - and $-16, %edi - - PUSH (%esi) - PUSH (%ebx) - - xor %ebx, %ebx - jmp L(loop) - - CFI_POP (%esi) - CFI_POP (%ebx) - - .p2align 4 -L(unaligned_match1): - test %ecx, %ecx - jnz L(prolog_find_zero_1) - - PUSH (%esi) - PUSH (%ebx) - - mov %eax, %ebx - mov %edi, %esi - and $-16, %edi - jmp L(loop) - - CFI_POP (%esi) - CFI_POP (%ebx) - - .p2align 4 -L(crosscache): -/* Hancle unaligned string. */ - and $15, %ecx - and $-16, %edi - pxor %xmm3, %xmm3 - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm3 - pcmpeqb %xmm1, %xmm0 - /* Find where NULL is. */ - pmovmskb %xmm3, %edx - /* Check if there is a match. */ - pmovmskb %xmm0, %eax - /* Remove the leading bytes. */ - shr %cl, %edx - shr %cl, %eax - add $16, %edi - - test %eax, %eax - jnz L(unaligned_match) - - test %edx, %edx - jnz L(return_null) - - PUSH (%esi) - PUSH (%ebx) - - xor %ebx, %ebx - jmp L(loop) - - CFI_POP (%esi) - CFI_POP (%ebx) - - .p2align 4 -L(unaligned_match): - test %edx, %edx - jnz L(prolog_find_zero) - - PUSH (%esi) - PUSH (%ebx) - - mov %eax, %ebx - lea (%edi, %ecx), %esi - -/* Loop start on aligned string. */ - .p2align 4 -L(loop): - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - add $16, %edi - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %ecx - pmovmskb %xmm0, %eax - or %eax, %ecx - jnz L(matches) - - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - add $16, %edi - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %ecx - pmovmskb %xmm0, %eax - or %eax, %ecx - jnz L(matches) - - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - add $16, %edi - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %ecx - pmovmskb %xmm0, %eax - or %eax, %ecx - jnz L(matches) - - movdqa (%edi), %xmm0 - pcmpeqb %xmm0, %xmm2 - add $16, %edi - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm2, %ecx - pmovmskb %xmm0, %eax - or %eax, %ecx - jz L(loop) - -L(matches): - test %eax, %eax - jnz L(match) -L(return_value): - test %ebx, %ebx - jz L(return_null_1) - mov %ebx, %eax - mov %esi, %edi - - POP (%ebx) - POP (%esi) - - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(return_null_1): - POP (%ebx) - POP (%esi) - - xor %eax, %eax - RETURN - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(match): - pmovmskb %xmm2, %ecx - test %ecx, %ecx - jnz L(find_zero) - mov %eax, %ebx - mov %edi, %esi - jmp L(loop) - - .p2align 4 -L(find_zero): - test %cl, %cl - jz L(find_zero_high) - mov %cl, %dl - and $15, %dl - jz L(find_zero_8) - test $0x01, %cl - jnz L(FindZeroExit1) - test $0x02, %cl - jnz L(FindZeroExit2) - test $0x04, %cl - jnz L(FindZeroExit3) - and $1 << 4 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(find_zero_8): - test $0x10, %cl - jnz L(FindZeroExit5) - test $0x20, %cl - jnz L(FindZeroExit6) - test $0x40, %cl - jnz L(FindZeroExit7) - and $1 << 8 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(find_zero_high): - mov %ch, %dh - and $15, %dh - jz L(find_zero_high_8) - test $0x01, %ch - jnz L(FindZeroExit9) - test $0x02, %ch - jnz L(FindZeroExit10) - test $0x04, %ch - jnz L(FindZeroExit11) - and $1 << 12 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(find_zero_high_8): - test $0x10, %ch - jnz L(FindZeroExit13) - test $0x20, %ch - jnz L(FindZeroExit14) - test $0x40, %ch - jnz L(FindZeroExit15) - and $1 << 16 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(FindZeroExit1): - and $1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(FindZeroExit2): - and $1 << 2 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(FindZeroExit3): - and $1 << 3 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(FindZeroExit5): - and $1 << 5 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(FindZeroExit6): - and $1 << 6 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(FindZeroExit7): - and $1 << 7 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(FindZeroExit9): - and $1 << 9 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(FindZeroExit10): - and $1 << 10 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(FindZeroExit11): - and $1 << 11 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(FindZeroExit13): - and $1 << 13 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(FindZeroExit14): - and $1 << 14 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - jmp L(match_exit) - - CFI_PUSH (%ebx) - CFI_PUSH (%esi) - - .p2align 4 -L(FindZeroExit15): - and $1 << 15 - 1, %eax - jz L(return_value) - - POP (%ebx) - POP (%esi) - - .p2align 4 -L(match_exit): - test %ah, %ah - jnz L(match_exit_high) - mov %al, %dl - and $15 << 4, %dl - jnz L(match_exit_8) - test $0x08, %al - jnz L(Exit4) - test $0x04, %al - jnz L(Exit3) - test $0x02, %al - jnz L(Exit2) - lea -16(%edi), %eax - RETURN - - .p2align 4 -L(match_exit_8): - test $0x80, %al - jnz L(Exit8) - test $0x40, %al - jnz L(Exit7) - test $0x20, %al - jnz L(Exit6) - lea -12(%edi), %eax - RETURN - - .p2align 4 -L(match_exit_high): - mov %ah, %dh - and $15 << 4, %dh - jnz L(match_exit_high_8) - test $0x08, %ah - jnz L(Exit12) - test $0x04, %ah - jnz L(Exit11) - test $0x02, %ah - jnz L(Exit10) - lea -8(%edi), %eax - RETURN - - .p2align 4 -L(match_exit_high_8): - test $0x80, %ah - jnz L(Exit16) - test $0x40, %ah - jnz L(Exit15) - test $0x20, %ah - jnz L(Exit14) - lea -4(%edi), %eax - RETURN - - .p2align 4 -L(Exit2): - lea -15(%edi), %eax - RETURN - - .p2align 4 -L(Exit3): - lea -14(%edi), %eax - RETURN - - .p2align 4 -L(Exit4): - lea -13(%edi), %eax - RETURN - - .p2align 4 -L(Exit6): - lea -11(%edi), %eax - RETURN - - .p2align 4 -L(Exit7): - lea -10(%edi), %eax - RETURN - - .p2align 4 -L(Exit8): - lea -9(%edi), %eax - RETURN - - .p2align 4 -L(Exit10): - lea -7(%edi), %eax - RETURN - - .p2align 4 -L(Exit11): - lea -6(%edi), %eax - RETURN - - .p2align 4 -L(Exit12): - lea -5(%edi), %eax - RETURN - - .p2align 4 -L(Exit14): - lea -3(%edi), %eax - RETURN - - .p2align 4 -L(Exit15): - lea -2(%edi), %eax - RETURN - - .p2align 4 -L(Exit16): - lea -1(%edi), %eax - RETURN - -/* Return NULL. */ - .p2align 4 -L(return_null): - xor %eax, %eax - RETURN - - .p2align 4 -L(prolog_find_zero): - add %ecx, %edi - mov %edx, %ecx -L(prolog_find_zero_1): - test %cl, %cl - jz L(prolog_find_zero_high) - mov %cl, %dl - and $15, %dl - jz L(prolog_find_zero_8) - test $0x01, %cl - jnz L(PrologFindZeroExit1) - test $0x02, %cl - jnz L(PrologFindZeroExit2) - test $0x04, %cl - jnz L(PrologFindZeroExit3) - and $1 << 4 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(prolog_find_zero_8): - test $0x10, %cl - jnz L(PrologFindZeroExit5) - test $0x20, %cl - jnz L(PrologFindZeroExit6) - test $0x40, %cl - jnz L(PrologFindZeroExit7) - and $1 << 8 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(prolog_find_zero_high): - mov %ch, %dh - and $15, %dh - jz L(prolog_find_zero_high_8) - test $0x01, %ch - jnz L(PrologFindZeroExit9) - test $0x02, %ch - jnz L(PrologFindZeroExit10) - test $0x04, %ch - jnz L(PrologFindZeroExit11) - and $1 << 12 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(prolog_find_zero_high_8): - test $0x10, %ch - jnz L(PrologFindZeroExit13) - test $0x20, %ch - jnz L(PrologFindZeroExit14) - test $0x40, %ch - jnz L(PrologFindZeroExit15) - and $1 << 16 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(PrologFindZeroExit1): - and $1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(PrologFindZeroExit2): - and $1 << 2 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(PrologFindZeroExit3): - and $1 << 3 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(PrologFindZeroExit5): - and $1 << 5 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(PrologFindZeroExit6): - and $1 << 6 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(PrologFindZeroExit7): - and $1 << 7 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(PrologFindZeroExit9): - and $1 << 9 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(PrologFindZeroExit10): - and $1 << 10 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(PrologFindZeroExit11): - and $1 << 11 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(PrologFindZeroExit13): - and $1 << 13 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(PrologFindZeroExit14): - and $1 << 14 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - - .p2align 4 -L(PrologFindZeroExit15): - and $1 << 15 - 1, %eax - jnz L(match_exit) - xor %eax, %eax - RETURN - -END (__strrchr_sse2) -#endif diff --git a/sysdeps/i386/i686/multiarch/strrchr.S b/sysdeps/i386/i686/multiarch/strrchr.S deleted file mode 100644 index d9281eaeae..0000000000 --- a/sysdeps/i386/i686/multiarch/strrchr.S +++ /dev/null @@ -1,57 +0,0 @@ -/* Multiple versions of strrchr - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if IS_IN (libc) - .text -ENTRY(strrchr) - .type strrchr, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__strrchr_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__strrchr_sse2_bsf) - HAS_ARCH_FEATURE (Slow_BSF) - jz 2f - LOAD_FUNC_GOT_EAX (__strrchr_sse2) -2: ret -END(strrchr) - -# undef ENTRY -# define ENTRY(name) \ - .type __strrchr_ia32, @function; \ - .globl __strrchr_ia32; \ - .p2align 4; \ - __strrchr_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __strrchr_ia32, .-__strrchr_ia32 -# undef libc_hidden_builtin_def -/* IFUNC doesn't work with the hidden functions in shared library since - they will be called without setting up EBX needed for PLT which is - used by IFUNC. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_strrchr; __GI_strrchr = __strrchr_ia32 -#endif - -#include "../../strrchr.S" diff --git a/sysdeps/i386/i686/multiarch/strspn-c.c b/sysdeps/i386/i686/multiarch/strspn-c.c deleted file mode 100644 index bea09dea71..0000000000 --- a/sysdeps/i386/i686/multiarch/strspn-c.c +++ /dev/null @@ -1,2 +0,0 @@ -#define __strspn_sse2 __strspn_ia32 -#include diff --git a/sysdeps/i386/i686/multiarch/strspn.S b/sysdeps/i386/i686/multiarch/strspn.S deleted file mode 100644 index 1269062381..0000000000 --- a/sysdeps/i386/i686/multiarch/strspn.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Multiple versions of strspn - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Define multiple versions only for the definition in libc. */ -#if IS_IN (libc) - .text -ENTRY(strspn) - .type strspn, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__strspn_ia32) - HAS_CPU_FEATURE (SSE4_2) - jz 2f - LOAD_FUNC_GOT_EAX (__strspn_sse42) -2: ret -END(strspn) - -# undef ENTRY -# define ENTRY(name) \ - .type __strspn_ia32, @function; \ - .globl __strspn_ia32; \ - .p2align 4; \ -__strspn_ia32: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __strspn_ia32, .-__strspn_ia32 -# undef libc_hidden_builtin_def -/* IFUNC doesn't work with the hidden functions in shared library since - they will be called without setting up EBX needed for PLT which is - used by IFUNC. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_strspn; __GI_strspn = __strspn_ia32 -#endif - -#include "../../strspn.S" diff --git a/sysdeps/i386/i686/multiarch/test-multiarch.c b/sysdeps/i386/i686/multiarch/test-multiarch.c deleted file mode 100644 index 593cfec273..0000000000 --- a/sysdeps/i386/i686/multiarch/test-multiarch.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/i386/i686/multiarch/varshift.c b/sysdeps/i386/i686/multiarch/varshift.c deleted file mode 100644 index 7760b966e2..0000000000 --- a/sysdeps/i386/i686/multiarch/varshift.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/i386/i686/multiarch/varshift.h b/sysdeps/i386/i686/multiarch/varshift.h deleted file mode 100644 index 7c72c70d67..0000000000 --- a/sysdeps/i386/i686/multiarch/varshift.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/i386/i686/multiarch/wcschr-c.c b/sysdeps/i386/i686/multiarch/wcschr-c.c deleted file mode 100644 index 38d41d04de..0000000000 --- a/sysdeps/i386/i686/multiarch/wcschr-c.c +++ /dev/null @@ -1,22 +0,0 @@ -#include - -#if IS_IN (libc) -# undef libc_hidden_weak -# define libc_hidden_weak(name) - -# undef weak_alias -# define weak_alias(name,alias) - -# ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__wcschr_ia32, __GI_wcschr, __wcschr_ia32); \ - strong_alias (__wcschr_ia32, __wcschr_ia32_1); \ - __hidden_ver1 (__wcschr_ia32_1, __GI___wcschr, __wcschr_ia32_1); -# endif -#endif - -extern __typeof (wcschr) __wcschr_ia32; - -#define WCSCHR __wcschr_ia32 -#include diff --git a/sysdeps/i386/i686/multiarch/wcschr-sse2.S b/sysdeps/i386/i686/multiarch/wcschr-sse2.S deleted file mode 100644 index 9ff6c3b8d6..0000000000 --- a/sysdeps/i386/i686/multiarch/wcschr-sse2.S +++ /dev/null @@ -1,219 +0,0 @@ -/* wcschr with SSE2, without using bsf instructions - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# define PARMS 4 -# define STR1 PARMS -# define STR2 STR1+4 - - atom_text_section -ENTRY (__wcschr_sse2) - - mov STR1(%esp), %ecx - movd STR2(%esp), %xmm1 - - mov %ecx, %eax - punpckldq %xmm1, %xmm1 - pxor %xmm2, %xmm2 - punpckldq %xmm1, %xmm1 - - and $63, %eax - cmp $48, %eax - ja L(cross_cache) - - movdqu (%ecx), %xmm0 - pcmpeqd %xmm0, %xmm2 - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %edx - pmovmskb %xmm0, %eax - or %eax, %edx - jnz L(matches) - and $-16, %ecx - jmp L(loop) - - .p2align 4 -L(cross_cache): - PUSH (%edi) - mov %ecx, %edi - mov %eax, %ecx - and $-16, %edi - and $15, %ecx - movdqa (%edi), %xmm0 - pcmpeqd %xmm0, %xmm2 - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %edx - pmovmskb %xmm0, %eax - - sarl %cl, %edx - sarl %cl, %eax - test %eax, %eax - jz L(unaligned_no_match) - - add %edi, %ecx - POP (%edi) - - test %edx, %edx - jz L(match_case1) - test %al, %al - jz L(match_higth_case2) - test $15, %al - jnz L(match_case2_4) - test $15, %dl - jnz L(return_null) - lea 4(%ecx), %eax - ret - - CFI_PUSH (%edi) - - .p2align 4 -L(unaligned_no_match): - mov %edi, %ecx - POP (%edi) - - test %edx, %edx - jnz L(return_null) - - pxor %xmm2, %xmm2 - -/* Loop start on aligned string. */ - .p2align 4 -L(loop): - add $16, %ecx - movdqa (%ecx), %xmm0 - pcmpeqd %xmm0, %xmm2 - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %edx - pmovmskb %xmm0, %eax - or %eax, %edx - jnz L(matches) - add $16, %ecx - - movdqa (%ecx), %xmm0 - pcmpeqd %xmm0, %xmm2 - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %edx - pmovmskb %xmm0, %eax - or %eax, %edx - jnz L(matches) - add $16, %ecx - - movdqa (%ecx), %xmm0 - pcmpeqd %xmm0, %xmm2 - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %edx - pmovmskb %xmm0, %eax - or %eax, %edx - jnz L(matches) - add $16, %ecx - - movdqa (%ecx), %xmm0 - pcmpeqd %xmm0, %xmm2 - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %edx - pmovmskb %xmm0, %eax - or %eax, %edx - jz L(loop) - - .p2align 4 -L(matches): - pmovmskb %xmm2, %edx - test %eax, %eax - jz L(return_null) - test %edx, %edx - jz L(match_case1) - - .p2align 4 -L(match_case2): - test %al, %al - jz L(match_higth_case2) - test $15, %al - jnz L(match_case2_4) - test $15, %dl - jnz L(return_null) - lea 4(%ecx), %eax - ret - - .p2align 4 -L(match_case2_4): - mov %ecx, %eax - ret - - .p2align 4 -L(match_higth_case2): - test %dl, %dl - jnz L(return_null) - test $15, %ah - jnz L(match_case2_12) - test $15, %dh - jnz L(return_null) - lea 12(%ecx), %eax - ret - - .p2align 4 -L(match_case2_12): - lea 8(%ecx), %eax - ret - - .p2align 4 -L(match_case1): - test %al, %al - jz L(match_higth_case1) - - test $0x01, %al - jnz L(exit0) - lea 4(%ecx), %eax - ret - - .p2align 4 -L(match_higth_case1): - test $0x01, %ah - jnz L(exit3) - lea 12(%ecx), %eax - ret - - .p2align 4 -L(exit0): - mov %ecx, %eax - ret - - .p2align 4 -L(exit3): - lea 8(%ecx), %eax - ret - - .p2align 4 -L(return_null): - xor %eax, %eax - ret - -END (__wcschr_sse2) -#endif diff --git a/sysdeps/i386/i686/multiarch/wcschr.S b/sysdeps/i386/i686/multiarch/wcschr.S deleted file mode 100644 index d3c65a6436..0000000000 --- a/sysdeps/i386/i686/multiarch/wcschr.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of wcschr - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if IS_IN (libc) - .text -ENTRY(__wcschr) - .type wcschr, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__wcschr_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__wcschr_sse2) -2: ret -END(__wcschr) -weak_alias (__wcschr, wcschr) -#endif diff --git a/sysdeps/i386/i686/multiarch/wcscmp-c.c b/sysdeps/i386/i686/multiarch/wcscmp-c.c deleted file mode 100644 index e3337d77e2..0000000000 --- a/sysdeps/i386/i686/multiarch/wcscmp-c.c +++ /dev/null @@ -1,14 +0,0 @@ -#include - -#define WCSCMP __wcscmp_ia32 -#ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__wcscmp_ia32, __GI___wcscmp, __wcscmp_ia32); -#endif -#undef weak_alias -#define weak_alias(name, alias) - -extern __typeof (wcscmp) __wcscmp_ia32; - -#include "wcsmbs/wcscmp.c" diff --git a/sysdeps/i386/i686/multiarch/wcscmp-sse2.S b/sysdeps/i386/i686/multiarch/wcscmp-sse2.S deleted file mode 100644 index a464b58204..0000000000 --- a/sysdeps/i386/i686/multiarch/wcscmp-sse2.S +++ /dev/null @@ -1,1018 +0,0 @@ -/* wcscmp with SSE2 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# define ENTRANCE PUSH(%esi); PUSH(%edi) -# define RETURN POP(%edi); POP(%esi); ret; CFI_PUSH(%esi); CFI_PUSH(%edi); -# define PARMS 4 -# define STR1 PARMS -# define STR2 STR1+4 - -/* Note: wcscmp uses signed comparison, not unsugned as in strcmp function. */ - - .text -ENTRY (__wcscmp_sse2) -/* - * This implementation uses SSE to compare up to 16 bytes at a time. -*/ - mov STR1(%esp), %edx - mov STR2(%esp), %eax - - mov (%eax), %ecx - cmp %ecx, (%edx) - jne L(neq) - test %ecx, %ecx - jz L(eq) - - mov 4(%eax), %ecx - cmp %ecx, 4(%edx) - jne L(neq) - test %ecx, %ecx - jz L(eq) - - mov 8(%eax), %ecx - cmp %ecx, 8(%edx) - jne L(neq) - test %ecx, %ecx - jz L(eq) - - mov 12(%eax), %ecx - cmp %ecx, 12(%edx) - jne L(neq) - test %ecx, %ecx - jz L(eq) - - ENTRANCE - add $16, %eax - add $16, %edx - - mov %eax, %esi - mov %edx, %edi - pxor %xmm0, %xmm0 /* clear %xmm0 for null char checks */ - mov %al, %ch - mov %dl, %cl - and $63, %eax /* esi alignment in cache line */ - and $63, %edx /* edi alignment in cache line */ - and $15, %cl - jz L(continue_00) - cmp $16, %edx - jb L(continue_0) - cmp $32, %edx - jb L(continue_16) - cmp $48, %edx - jb L(continue_32) - -L(continue_48): - and $15, %ch - jz L(continue_48_00) - cmp $16, %eax - jb L(continue_0_48) - cmp $32, %eax - jb L(continue_16_48) - cmp $48, %eax - jb L(continue_32_48) - - .p2align 4 -L(continue_48_48): - mov (%esi), %ecx - cmp %ecx, (%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 4(%esi), %ecx - cmp %ecx, 4(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 8(%esi), %ecx - cmp %ecx, 8(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 12(%esi), %ecx - cmp %ecx, 12(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - movdqu 16(%edi), %xmm1 - movdqu 16(%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqu 32(%edi), %xmm1 - movdqu 32(%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - movdqu 48(%edi), %xmm1 - movdqu 48(%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_48) - - add $64, %esi - add $64, %edi - jmp L(continue_48_48) - -L(continue_0): - and $15, %ch - jz L(continue_0_00) - cmp $16, %eax - jb L(continue_0_0) - cmp $32, %eax - jb L(continue_0_16) - cmp $48, %eax - jb L(continue_0_32) - - .p2align 4 -L(continue_0_48): - mov (%esi), %ecx - cmp %ecx, (%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 4(%esi), %ecx - cmp %ecx, 4(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 8(%esi), %ecx - cmp %ecx, 8(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 12(%esi), %ecx - cmp %ecx, 12(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - movdqu 16(%edi), %xmm1 - movdqu 16(%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqu 32(%edi), %xmm1 - movdqu 32(%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - mov 48(%esi), %ecx - cmp %ecx, 48(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 52(%esi), %ecx - cmp %ecx, 52(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 56(%esi), %ecx - cmp %ecx, 56(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 60(%esi), %ecx - cmp %ecx, 60(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - add $64, %esi - add $64, %edi - jmp L(continue_0_48) - - .p2align 4 -L(continue_00): - and $15, %ch - jz L(continue_00_00) - cmp $16, %eax - jb L(continue_00_0) - cmp $32, %eax - jb L(continue_00_16) - cmp $48, %eax - jb L(continue_00_32) - - .p2align 4 -L(continue_00_48): - pcmpeqd (%edi), %xmm0 - mov (%edi), %eax - pmovmskb %xmm0, %ecx - test %ecx, %ecx - jnz L(less4_double_words1) - - cmp (%esi), %eax - jne L(nequal) - - mov 4(%edi), %eax - cmp 4(%esi), %eax - jne L(nequal) - - mov 8(%edi), %eax - cmp 8(%esi), %eax - jne L(nequal) - - mov 12(%edi), %eax - cmp 12(%esi), %eax - jne L(nequal) - - movdqu 16(%esi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd 16(%edi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqu 32(%esi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd 32(%edi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - movdqu 48(%esi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd 48(%edi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_48) - - add $64, %esi - add $64, %edi - jmp L(continue_00_48) - - .p2align 4 -L(continue_32): - and $15, %ch - jz L(continue_32_00) - cmp $16, %eax - jb L(continue_0_32) - cmp $32, %eax - jb L(continue_16_32) - cmp $48, %eax - jb L(continue_32_32) - - .p2align 4 -L(continue_32_48): - mov (%esi), %ecx - cmp %ecx, (%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 4(%esi), %ecx - cmp %ecx, 4(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 8(%esi), %ecx - cmp %ecx, 8(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 12(%esi), %ecx - cmp %ecx, 12(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 16(%esi), %ecx - cmp %ecx, 16(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 20(%esi), %ecx - cmp %ecx, 20(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 24(%esi), %ecx - cmp %ecx, 24(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 28(%esi), %ecx - cmp %ecx, 28(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - movdqu 32(%edi), %xmm1 - movdqu 32(%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - movdqu 48(%edi), %xmm1 - movdqu 48(%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results */ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_48) - - add $64, %esi - add $64, %edi - jmp L(continue_32_48) - - .p2align 4 -L(continue_16): - and $15, %ch - jz L(continue_16_00) - cmp $16, %eax - jb L(continue_0_16) - cmp $32, %eax - jb L(continue_16_16) - cmp $48, %eax - jb L(continue_16_32) - - .p2align 4 -L(continue_16_48): - mov (%esi), %ecx - cmp %ecx, (%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 4(%esi), %ecx - cmp %ecx, 4(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 8(%esi), %ecx - cmp %ecx, 8(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 12(%esi), %ecx - cmp %ecx, 12(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - movdqu 16(%edi), %xmm1 - movdqu 16(%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - mov 32(%esi), %ecx - cmp %ecx, 32(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 36(%esi), %ecx - cmp %ecx, 36(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 40(%esi), %ecx - cmp %ecx, 40(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 44(%esi), %ecx - cmp %ecx, 44(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - movdqu 48(%edi), %xmm1 - movdqu 48(%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_48) - - add $64, %esi - add $64, %edi - jmp L(continue_16_48) - - .p2align 4 -L(continue_00_00): - movdqa (%edi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd (%esi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqa 16(%edi), %xmm3 - pcmpeqd %xmm3, %xmm0 /* Any null double_word? */ - pcmpeqd 16(%esi), %xmm3 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm3 /* packed sub of comparison results*/ - pmovmskb %xmm3, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqa 32(%edi), %xmm5 - pcmpeqd %xmm5, %xmm0 /* Any null double_word? */ - pcmpeqd 32(%esi), %xmm5 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm5 /* packed sub of comparison results*/ - pmovmskb %xmm5, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - movdqa 48(%edi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd 48(%esi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_48) - - add $64, %esi - add $64, %edi - jmp L(continue_00_00) - - .p2align 4 -L(continue_00_32): - movdqu (%esi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd (%edi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - add $16, %esi - add $16, %edi - jmp L(continue_00_48) - - .p2align 4 -L(continue_00_16): - movdqu (%esi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd (%edi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqu 16(%esi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd 16(%edi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - add $32, %esi - add $32, %edi - jmp L(continue_00_48) - - .p2align 4 -L(continue_00_0): - movdqu (%esi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd (%edi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqu 16(%esi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd 16(%edi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqu 32(%esi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd 32(%edi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - add $48, %esi - add $48, %edi - jmp L(continue_00_48) - - .p2align 4 -L(continue_48_00): - pcmpeqd (%esi), %xmm0 - mov (%edi), %eax - pmovmskb %xmm0, %ecx - test %ecx, %ecx - jnz L(less4_double_words1) - - cmp (%esi), %eax - jne L(nequal) - - mov 4(%edi), %eax - cmp 4(%esi), %eax - jne L(nequal) - - mov 8(%edi), %eax - cmp 8(%esi), %eax - jne L(nequal) - - mov 12(%edi), %eax - cmp 12(%esi), %eax - jne L(nequal) - - movdqu 16(%edi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd 16(%esi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqu 32(%edi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd 32(%esi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - movdqu 48(%edi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd 48(%esi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_48) - - add $64, %esi - add $64, %edi - jmp L(continue_48_00) - - .p2align 4 -L(continue_32_00): - movdqu (%edi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd (%esi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - add $16, %esi - add $16, %edi - jmp L(continue_48_00) - - .p2align 4 -L(continue_16_00): - movdqu (%edi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd (%esi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqu 16(%edi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd 16(%esi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - add $32, %esi - add $32, %edi - jmp L(continue_48_00) - - .p2align 4 -L(continue_0_00): - movdqu (%edi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd (%esi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqu 16(%edi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd 16(%esi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqu 32(%edi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd 32(%esi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - add $48, %esi - add $48, %edi - jmp L(continue_48_00) - - .p2align 4 -L(continue_32_32): - movdqu (%edi), %xmm1 - movdqu (%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - add $16, %esi - add $16, %edi - jmp L(continue_48_48) - - .p2align 4 -L(continue_16_16): - movdqu (%edi), %xmm1 - movdqu (%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqu 16(%edi), %xmm3 - movdqu 16(%esi), %xmm4 - pcmpeqd %xmm3, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm4, %xmm3 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm3 /* packed sub of comparison results*/ - pmovmskb %xmm3, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - add $32, %esi - add $32, %edi - jmp L(continue_48_48) - - .p2align 4 -L(continue_0_0): - movdqu (%edi), %xmm1 - movdqu (%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqu 16(%edi), %xmm3 - movdqu 16(%esi), %xmm4 - pcmpeqd %xmm3, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm4, %xmm3 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm3 /* packed sub of comparison results*/ - pmovmskb %xmm3, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqu 32(%edi), %xmm1 - movdqu 32(%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - add $48, %esi - add $48, %edi - jmp L(continue_48_48) - - .p2align 4 -L(continue_0_16): - movdqu (%edi), %xmm1 - movdqu (%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqu 16(%edi), %xmm1 - movdqu 16(%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - add $32, %esi - add $32, %edi - jmp L(continue_32_48) - - .p2align 4 -L(continue_0_32): - movdqu (%edi), %xmm1 - movdqu (%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - add $16, %esi - add $16, %edi - jmp L(continue_16_48) - - .p2align 4 -L(continue_16_32): - movdqu (%edi), %xmm1 - movdqu (%esi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - add $16, %esi - add $16, %edi - jmp L(continue_32_48) - - .p2align 4 -L(less4_double_words1): - cmp (%esi), %eax - jne L(nequal) - test %eax, %eax - jz L(equal) - - mov 4(%esi), %ecx - cmp %ecx, 4(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 8(%esi), %ecx - cmp %ecx, 8(%edi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 12(%esi), %ecx - cmp %ecx, 12(%edi) - jne L(nequal) - xor %eax, %eax - RETURN - - .p2align 4 -L(less4_double_words): - xor %eax, %eax - test %dl, %dl - jz L(next_two_double_words) - and $15, %dl - jz L(second_double_word) - mov (%esi), %ecx - cmp %ecx, (%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(second_double_word): - mov 4(%esi), %ecx - cmp %ecx, 4(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(next_two_double_words): - and $15, %dh - jz L(fourth_double_word) - mov 8(%esi), %ecx - cmp %ecx, 8(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(fourth_double_word): - mov 12(%esi), %ecx - cmp %ecx, 12(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(less4_double_words_16): - xor %eax, %eax - test %dl, %dl - jz L(next_two_double_words_16) - and $15, %dl - jz L(second_double_word_16) - mov 16(%esi), %ecx - cmp %ecx, 16(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(second_double_word_16): - mov 20(%esi), %ecx - cmp %ecx, 20(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(next_two_double_words_16): - and $15, %dh - jz L(fourth_double_word_16) - mov 24(%esi), %ecx - cmp %ecx, 24(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(fourth_double_word_16): - mov 28(%esi), %ecx - cmp %ecx, 28(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(less4_double_words_32): - xor %eax, %eax - test %dl, %dl - jz L(next_two_double_words_32) - and $15, %dl - jz L(second_double_word_32) - mov 32(%esi), %ecx - cmp %ecx, 32(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(second_double_word_32): - mov 36(%esi), %ecx - cmp %ecx, 36(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(next_two_double_words_32): - and $15, %dh - jz L(fourth_double_word_32) - mov 40(%esi), %ecx - cmp %ecx, 40(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(fourth_double_word_32): - mov 44(%esi), %ecx - cmp %ecx, 44(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(less4_double_words_48): - xor %eax, %eax - test %dl, %dl - jz L(next_two_double_words_48) - and $15, %dl - jz L(second_double_word_48) - mov 48(%esi), %ecx - cmp %ecx, 48(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(second_double_word_48): - mov 52(%esi), %ecx - cmp %ecx, 52(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(next_two_double_words_48): - and $15, %dh - jz L(fourth_double_word_48) - mov 56(%esi), %ecx - cmp %ecx, 56(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(fourth_double_word_48): - mov 60(%esi), %ecx - cmp %ecx, 60(%edi) - jne L(nequal) - RETURN - - .p2align 4 -L(nequal): - mov $1, %eax - jg L(return) - neg %eax - RETURN - - .p2align 4 -L(return): - RETURN - - .p2align 4 -L(equal): - xorl %eax, %eax - RETURN - - CFI_POP (%edi) - CFI_POP (%esi) - - .p2align 4 -L(neq): - mov $1, %eax - jg L(neq_bigger) - neg %eax - -L(neq_bigger): - ret - - .p2align 4 -L(eq): - xorl %eax, %eax - ret - -END (__wcscmp_sse2) -#endif diff --git a/sysdeps/i386/i686/multiarch/wcscmp.S b/sysdeps/i386/i686/multiarch/wcscmp.S deleted file mode 100644 index 7118bdd4db..0000000000 --- a/sysdeps/i386/i686/multiarch/wcscmp.S +++ /dev/null @@ -1,39 +0,0 @@ -/* Multiple versions of wcscmp - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in libc and for the - DSO. In static binaries, we need wcscmp before the initialization - happened. */ -#if IS_IN (libc) - .text -ENTRY(__wcscmp) - .type __wcscmp, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__wcscmp_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__wcscmp_sse2) -2: ret -END(__wcscmp) -weak_alias (__wcscmp, wcscmp) -#endif diff --git a/sysdeps/i386/i686/multiarch/wcscpy-c.c b/sysdeps/i386/i686/multiarch/wcscpy-c.c deleted file mode 100644 index fb3000392b..0000000000 --- a/sysdeps/i386/i686/multiarch/wcscpy-c.c +++ /dev/null @@ -1,5 +0,0 @@ -#if IS_IN (libc) -# define wcscpy __wcscpy_ia32 -#endif - -#include "wcsmbs/wcscpy.c" diff --git a/sysdeps/i386/i686/multiarch/wcscpy-ssse3.S b/sysdeps/i386/i686/multiarch/wcscpy-ssse3.S deleted file mode 100644 index 6280ba92ab..0000000000 --- a/sysdeps/i386/i686/multiarch/wcscpy-ssse3.S +++ /dev/null @@ -1,600 +0,0 @@ -/* wcscpy with SSSE3 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include - -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# define PARMS 4 -# define RETURN POP (%edi); ret; CFI_PUSH (%edi) -# define STR1 PARMS -# define STR2 STR1+4 -# define LEN STR2+4 - - atom_text_section -ENTRY (__wcscpy_ssse3) - mov STR1(%esp), %edx - mov STR2(%esp), %ecx - - cmp $0, (%ecx) - jz L(ExitTail4) - cmp $0, 4(%ecx) - jz L(ExitTail8) - cmp $0, 8(%ecx) - jz L(ExitTail12) - cmp $0, 12(%ecx) - jz L(ExitTail16) - - PUSH (%edi) - mov %edx, %edi - PUSH (%esi) - lea 16(%ecx), %esi - - and $-16, %esi - - pxor %xmm0, %xmm0 - pcmpeqd (%esi), %xmm0 - movdqu (%ecx), %xmm1 - movdqu %xmm1, (%edx) - - pmovmskb %xmm0, %eax - sub %ecx, %esi - - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - mov %edx, %eax - lea 16(%edx), %edx - and $-16, %edx - sub %edx, %eax - - sub %eax, %ecx - mov %ecx, %eax - and $0xf, %eax - mov $0, %esi - - jz L(Align16Both) - cmp $4, %eax - je L(Shl4) - cmp $8, %eax - je L(Shl8) - jmp L(Shl12) - -L(Align16Both): - movaps (%ecx), %xmm1 - movaps 16(%ecx), %xmm2 - movaps %xmm1, (%edx) - pcmpeqd %xmm2, %xmm0 - pmovmskb %xmm0, %eax - lea 16(%esi), %esi - - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %esi), %xmm3 - movaps %xmm2, (%edx, %esi) - pcmpeqd %xmm3, %xmm0 - pmovmskb %xmm0, %eax - lea 16(%esi), %esi - - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %esi), %xmm4 - movaps %xmm3, (%edx, %esi) - pcmpeqd %xmm4, %xmm0 - pmovmskb %xmm0, %eax - lea 16(%esi), %esi - - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %esi), %xmm1 - movaps %xmm4, (%edx, %esi) - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm0, %eax - lea 16(%esi), %esi - - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %esi), %xmm2 - movaps %xmm1, (%edx, %esi) - pcmpeqd %xmm2, %xmm0 - pmovmskb %xmm0, %eax - lea 16(%esi), %esi - - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%ecx, %esi), %xmm3 - movaps %xmm2, (%edx, %esi) - pcmpeqd %xmm3, %xmm0 - pmovmskb %xmm0, %eax - lea 16(%esi), %esi - - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - movaps %xmm3, (%edx, %esi) - mov %ecx, %eax - lea 16(%ecx, %esi), %ecx - and $-0x40, %ecx - sub %ecx, %eax - sub %eax, %edx - - mov $-0x40, %esi - -L(Aligned64Loop): - movaps (%ecx), %xmm2 - movaps 32(%ecx), %xmm3 - movaps %xmm2, %xmm4 - movaps 16(%ecx), %xmm5 - movaps %xmm3, %xmm6 - movaps 48(%ecx), %xmm7 - pminub %xmm5, %xmm2 - pminub %xmm7, %xmm3 - pminub %xmm2, %xmm3 - lea 64(%edx), %edx - pcmpeqd %xmm0, %xmm3 - lea 64(%ecx), %ecx - pmovmskb %xmm3, %eax - - test %eax, %eax - jnz L(Aligned64Leave) - movaps %xmm4, -64(%edx) - movaps %xmm5, -48(%edx) - movaps %xmm6, -32(%edx) - movaps %xmm7, -16(%edx) - jmp L(Aligned64Loop) - -L(Aligned64Leave): - pcmpeqd %xmm4, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(CopyFrom1To16Bytes) - - pcmpeqd %xmm5, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm4, -64(%edx) - test %eax, %eax - lea 16(%esi), %esi - jnz L(CopyFrom1To16Bytes) - - pcmpeqd %xmm6, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm5, -48(%edx) - test %eax, %eax - lea 16(%esi), %esi - jnz L(CopyFrom1To16Bytes) - - movaps %xmm6, -32(%edx) - pcmpeqd %xmm7, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - lea 16(%esi), %esi - jnz L(CopyFrom1To16Bytes) - - mov $-0x40, %esi - movaps %xmm7, -16(%edx) - jmp L(Aligned64Loop) - - .p2align 4 -L(Shl4): - movaps -4(%ecx), %xmm1 - movaps 12(%ecx), %xmm2 -L(Shl4Start): - pcmpeqd %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 - - test %eax, %eax - jnz L(Shl4LoopExit) - - palignr $4, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 28(%ecx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm1 - - test %eax, %eax - jnz L(Shl4LoopExit) - - palignr $4, %xmm3, %xmm2 - movaps %xmm2, (%edx) - movaps 28(%ecx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 - - test %eax, %eax - jnz L(Shl4LoopExit) - - palignr $4, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 28(%ecx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - - test %eax, %eax - jnz L(Shl4LoopExit) - - palignr $4, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 28(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -12(%ecx), %ecx - sub %eax, %edx - - movaps -4(%ecx), %xmm1 - -L(Shl4LoopStart): - movaps 12(%ecx), %xmm2 - movaps 28(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 44(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 60(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqd %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $4, %xmm4, %xmm5 - test %eax, %eax - palignr $4, %xmm3, %xmm4 - jnz L(Shl4Start) - - palignr $4, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $4, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl4LoopStart) - -L(Shl4LoopExit): - movlpd (%ecx), %xmm0 - movl 8(%ecx), %esi - movlpd %xmm0, (%edx) - movl %esi, 8(%edx) - POP (%esi) - add $12, %edx - add $12, %ecx - test %al, %al - jz L(ExitHigh) - test $0x01, %al - jnz L(Exit4) - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movl %edi, %eax - RETURN - - CFI_PUSH (%esi) - - .p2align 4 -L(Shl8): - movaps -8(%ecx), %xmm1 - movaps 8(%ecx), %xmm2 -L(Shl8Start): - pcmpeqd %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 - - test %eax, %eax - jnz L(Shl8LoopExit) - - palignr $8, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 24(%ecx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm1 - - test %eax, %eax - jnz L(Shl8LoopExit) - - palignr $8, %xmm3, %xmm2 - movaps %xmm2, (%edx) - movaps 24(%ecx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 - - test %eax, %eax - jnz L(Shl8LoopExit) - - palignr $8, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 24(%ecx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - - test %eax, %eax - jnz L(Shl8LoopExit) - - palignr $8, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 24(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -8(%ecx), %ecx - sub %eax, %edx - - movaps -8(%ecx), %xmm1 - -L(Shl8LoopStart): - movaps 8(%ecx), %xmm2 - movaps 24(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 40(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 56(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqd %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $8, %xmm4, %xmm5 - test %eax, %eax - palignr $8, %xmm3, %xmm4 - jnz L(Shl8Start) - - palignr $8, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $8, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl8LoopStart) - -L(Shl8LoopExit): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - POP (%esi) - add $8, %edx - add $8, %ecx - test %al, %al - jz L(ExitHigh) - test $0x01, %al - jnz L(Exit4) - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movl %edi, %eax - RETURN - - CFI_PUSH (%esi) - - .p2align 4 -L(Shl12): - movaps -12(%ecx), %xmm1 - movaps 4(%ecx), %xmm2 -L(Shl12Start): - pcmpeqd %xmm2, %xmm0 - pmovmskb %xmm0, %eax - movaps %xmm2, %xmm3 - - test %eax, %eax - jnz L(Shl12LoopExit) - - palignr $12, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 20(%ecx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm1 - - test %eax, %eax - jnz L(Shl12LoopExit) - - palignr $12, %xmm3, %xmm2 - movaps %xmm2, (%edx) - movaps 20(%ecx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - movaps %xmm2, %xmm3 - - test %eax, %eax - jnz L(Shl12LoopExit) - - palignr $12, %xmm1, %xmm2 - movaps %xmm2, (%edx) - movaps 20(%ecx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%edx), %edx - pmovmskb %xmm0, %eax - lea 16(%ecx), %ecx - - test %eax, %eax - jnz L(Shl12LoopExit) - - palignr $12, %xmm3, %xmm2 - movaps %xmm2, (%edx) - lea 20(%ecx), %ecx - lea 16(%edx), %edx - - mov %ecx, %eax - and $-0x40, %ecx - sub %ecx, %eax - lea -4(%ecx), %ecx - sub %eax, %edx - - movaps -12(%ecx), %xmm1 - -L(Shl12LoopStart): - movaps 4(%ecx), %xmm2 - movaps 20(%ecx), %xmm3 - movaps %xmm3, %xmm6 - movaps 36(%ecx), %xmm4 - movaps %xmm4, %xmm7 - movaps 52(%ecx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqd %xmm0, %xmm7 - pmovmskb %xmm7, %eax - movaps %xmm5, %xmm7 - palignr $12, %xmm4, %xmm5 - test %eax, %eax - palignr $12, %xmm3, %xmm4 - jnz L(Shl12Start) - - palignr $12, %xmm2, %xmm3 - lea 64(%ecx), %ecx - palignr $12, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%edx) - movaps %xmm4, 32(%edx) - movaps %xmm3, 16(%edx) - movaps %xmm2, (%edx) - lea 64(%edx), %edx - jmp L(Shl12LoopStart) - -L(Shl12LoopExit): - movl (%ecx), %esi - movl %esi, (%edx) - mov $4, %esi - - .p2align 4 -L(CopyFrom1To16Bytes): - add %esi, %edx - add %esi, %ecx - - POP (%esi) - test %al, %al - jz L(ExitHigh) - test $0x01, %al - jnz L(Exit4) -L(Exit8): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movl %edi, %eax - RETURN - - .p2align 4 -L(ExitHigh): - test $0x01, %ah - jnz L(Exit12) -L(Exit16): - movdqu (%ecx), %xmm0 - movdqu %xmm0, (%edx) - movl %edi, %eax - RETURN - - .p2align 4 -L(Exit4): - movl (%ecx), %eax - movl %eax, (%edx) - movl %edi, %eax - RETURN - - .p2align 4 -L(Exit12): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movl 8(%ecx), %eax - movl %eax, 8(%edx) - movl %edi, %eax - RETURN - -CFI_POP (%edi) - - .p2align 4 -L(ExitTail4): - movl (%ecx), %eax - movl %eax, (%edx) - movl %edx, %eax - ret - - .p2align 4 -L(ExitTail8): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movl %edx, %eax - ret - - .p2align 4 -L(ExitTail12): - movlpd (%ecx), %xmm0 - movlpd %xmm0, (%edx) - movl 8(%ecx), %eax - movl %eax, 8(%edx) - movl %edx, %eax - ret - - .p2align 4 -L(ExitTail16): - movdqu (%ecx), %xmm0 - movdqu %xmm0, (%edx) - movl %edx, %eax - ret - -END (__wcscpy_ssse3) -#endif diff --git a/sysdeps/i386/i686/multiarch/wcscpy.S b/sysdeps/i386/i686/multiarch/wcscpy.S deleted file mode 100644 index cfc97dd87c..0000000000 --- a/sysdeps/i386/i686/multiarch/wcscpy.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of wcscpy - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in libc. */ -#if IS_IN (libc) - .text -ENTRY(wcscpy) - .type wcscpy, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__wcscpy_ia32) - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (__wcscpy_ssse3) -2: ret -END(wcscpy) -#endif diff --git a/sysdeps/i386/i686/multiarch/wcslen-c.c b/sysdeps/i386/i686/multiarch/wcslen-c.c deleted file mode 100644 index a335dc0f7e..0000000000 --- a/sysdeps/i386/i686/multiarch/wcslen-c.c +++ /dev/null @@ -1,9 +0,0 @@ -#include - -#if IS_IN (libc) -# define WCSLEN __wcslen_ia32 -#endif - -extern __typeof (wcslen) __wcslen_ia32; - -#include "wcsmbs/wcslen.c" diff --git a/sysdeps/i386/i686/multiarch/wcslen-sse2.S b/sysdeps/i386/i686/multiarch/wcslen-sse2.S deleted file mode 100644 index bd3fc4c79b..0000000000 --- a/sysdeps/i386/i686/multiarch/wcslen-sse2.S +++ /dev/null @@ -1,193 +0,0 @@ -/* wcslen with SSE2 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# define STR 4 - - .text -ENTRY (__wcslen_sse2) - mov STR(%esp), %edx - - cmp $0, (%edx) - jz L(exit_tail0) - cmp $0, 4(%edx) - jz L(exit_tail1) - cmp $0, 8(%edx) - jz L(exit_tail2) - cmp $0, 12(%edx) - jz L(exit_tail3) - cmp $0, 16(%edx) - jz L(exit_tail4) - cmp $0, 20(%edx) - jz L(exit_tail5) - cmp $0, 24(%edx) - jz L(exit_tail6) - cmp $0, 28(%edx) - jz L(exit_tail7) - - pxor %xmm0, %xmm0 - - lea 32(%edx), %eax - lea 16(%edx), %ecx - and $-16, %eax - - pcmpeqd (%eax), %xmm0 - pmovmskb %xmm0, %edx - pxor %xmm1, %xmm1 - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqd (%eax), %xmm1 - pmovmskb %xmm1, %edx - pxor %xmm2, %xmm2 - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqd (%eax), %xmm2 - pmovmskb %xmm2, %edx - pxor %xmm3, %xmm3 - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - pcmpeqd (%eax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 16(%eax), %eax - jnz L(exit) - - and $-0x40, %eax - - .p2align 4 -L(aligned_64_loop): - movaps (%eax), %xmm0 - movaps 16(%eax), %xmm1 - movaps 32(%eax), %xmm2 - movaps 48(%eax), %xmm6 - - pminub %xmm1, %xmm0 - pminub %xmm6, %xmm2 - pminub %xmm0, %xmm2 - pcmpeqd %xmm3, %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - lea 64(%eax), %eax - jz L(aligned_64_loop) - - pcmpeqd -64(%eax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 48(%ecx), %ecx - jnz L(exit) - - pcmpeqd %xmm1, %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea -16(%ecx), %ecx - jnz L(exit) - - pcmpeqd -32(%eax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea -16(%ecx), %ecx - jnz L(exit) - - pcmpeqd %xmm6, %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea -16(%ecx), %ecx - jnz L(exit) - - jmp L(aligned_64_loop) - - .p2align 4 -L(exit): - sub %ecx, %eax - shr $2, %eax - test %dl, %dl - jz L(exit_high) - - mov %dl, %cl - and $15, %cl - jz L(exit_1) - ret - - .p2align 4 -L(exit_high): - mov %dh, %ch - and $15, %ch - jz L(exit_3) - add $2, %eax - ret - - .p2align 4 -L(exit_1): - add $1, %eax - ret - - .p2align 4 -L(exit_3): - add $3, %eax - ret - - .p2align 4 -L(exit_tail0): - xor %eax, %eax - ret - - .p2align 4 -L(exit_tail1): - mov $1, %eax - ret - - .p2align 4 -L(exit_tail2): - mov $2, %eax - ret - - .p2align 4 -L(exit_tail3): - mov $3, %eax - ret - - .p2align 4 -L(exit_tail4): - mov $4, %eax - ret - - .p2align 4 -L(exit_tail5): - mov $5, %eax - ret - - .p2align 4 -L(exit_tail6): - mov $6, %eax - ret - - .p2align 4 -L(exit_tail7): - mov $7, %eax - ret - -END (__wcslen_sse2) -#endif diff --git a/sysdeps/i386/i686/multiarch/wcslen.S b/sysdeps/i386/i686/multiarch/wcslen.S deleted file mode 100644 index 6ef9b6e7b5..0000000000 --- a/sysdeps/i386/i686/multiarch/wcslen.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of wcslen - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if IS_IN (libc) - .text -ENTRY(__wcslen) - .type __wcslen, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__wcslen_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__wcslen_sse2) -2: ret -END(__wcslen) - -weak_alias(__wcslen, wcslen) -#endif diff --git a/sysdeps/i386/i686/multiarch/wcsrchr-c.c b/sysdeps/i386/i686/multiarch/wcsrchr-c.c deleted file mode 100644 index 8d8a335b5b..0000000000 --- a/sysdeps/i386/i686/multiarch/wcsrchr-c.c +++ /dev/null @@ -1,5 +0,0 @@ -#if IS_IN (libc) -# define wcsrchr __wcsrchr_ia32 -#endif - -#include "wcsmbs/wcsrchr.c" diff --git a/sysdeps/i386/i686/multiarch/wcsrchr-sse2.S b/sysdeps/i386/i686/multiarch/wcsrchr-sse2.S deleted file mode 100644 index 1a9b60e55e..0000000000 --- a/sysdeps/i386/i686/multiarch/wcsrchr-sse2.S +++ /dev/null @@ -1,354 +0,0 @@ -/* wcsrchr with SSE2, without using bsf instructions. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -# define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -# define PUSH(REG) pushl REG; CFI_PUSH (REG) -# define POP(REG) popl REG; CFI_POP (REG) - -# define PARMS 8 -# define ENTRANCE PUSH (%edi); -# define RETURN POP (%edi); ret; CFI_PUSH (%edi); -# define STR1 PARMS -# define STR2 STR1+4 - - atom_text_section -ENTRY (__wcsrchr_sse2) - - ENTRANCE - mov STR1(%esp), %ecx - movd STR2(%esp), %xmm1 - - mov %ecx, %edi - punpckldq %xmm1, %xmm1 - pxor %xmm2, %xmm2 - punpckldq %xmm1, %xmm1 - -/* ECX has OFFSET. */ - and $63, %ecx - cmp $48, %ecx - ja L(crosscache) - -/* unaligned string. */ - movdqu (%edi), %xmm0 - pcmpeqd %xmm0, %xmm2 - pcmpeqd %xmm1, %xmm0 -/* Find where NULL is. */ - pmovmskb %xmm2, %ecx -/* Check if there is a match. */ - pmovmskb %xmm0, %eax - add $16, %edi - - test %eax, %eax - jnz L(unaligned_match1) - - test %ecx, %ecx - jnz L(return_null) - - and $-16, %edi - - PUSH (%esi) - - xor %edx, %edx - jmp L(loop) - - CFI_POP (%esi) - - .p2align 4 -L(unaligned_match1): - test %ecx, %ecx - jnz L(prolog_find_zero_1) - - PUSH (%esi) - -/* Save current match */ - mov %eax, %edx - mov %edi, %esi - and $-16, %edi - jmp L(loop) - - CFI_POP (%esi) - - .p2align 4 -L(crosscache): -/* Hancle unaligned string. */ - and $15, %ecx - and $-16, %edi - pxor %xmm3, %xmm3 - movdqa (%edi), %xmm0 - pcmpeqd %xmm0, %xmm3 - pcmpeqd %xmm1, %xmm0 -/* Find where NULL is. */ - pmovmskb %xmm3, %edx -/* Check if there is a match. */ - pmovmskb %xmm0, %eax -/* Remove the leading bytes. */ - shr %cl, %edx - shr %cl, %eax - add $16, %edi - - test %eax, %eax - jnz L(unaligned_match) - - test %edx, %edx - jnz L(return_null) - - PUSH (%esi) - - xor %edx, %edx - jmp L(loop) - - CFI_POP (%esi) - - .p2align 4 -L(unaligned_match): - test %edx, %edx - jnz L(prolog_find_zero) - - PUSH (%esi) - - mov %eax, %edx - lea (%edi, %ecx), %esi - -/* Loop start on aligned string. */ - .p2align 4 -L(loop): - movdqa (%edi), %xmm0 - pcmpeqd %xmm0, %xmm2 - add $16, %edi - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %ecx - pmovmskb %xmm0, %eax - or %eax, %ecx - jnz L(matches) - - movdqa (%edi), %xmm3 - pcmpeqd %xmm3, %xmm2 - add $16, %edi - pcmpeqd %xmm1, %xmm3 - pmovmskb %xmm2, %ecx - pmovmskb %xmm3, %eax - or %eax, %ecx - jnz L(matches) - - movdqa (%edi), %xmm4 - pcmpeqd %xmm4, %xmm2 - add $16, %edi - pcmpeqd %xmm1, %xmm4 - pmovmskb %xmm2, %ecx - pmovmskb %xmm4, %eax - or %eax, %ecx - jnz L(matches) - - movdqa (%edi), %xmm5 - pcmpeqd %xmm5, %xmm2 - add $16, %edi - pcmpeqd %xmm1, %xmm5 - pmovmskb %xmm2, %ecx - pmovmskb %xmm5, %eax - or %eax, %ecx - jz L(loop) - - .p2align 4 -L(matches): - test %eax, %eax - jnz L(match) -L(return_value): - test %edx, %edx - jz L(return_null_1) - mov %edx, %eax - mov %esi, %edi - - POP (%esi) - - test %ah, %ah - jnz L(match_third_or_fourth_wchar) - test $15 << 4, %al - jnz L(match_second_wchar) - lea -16(%edi), %eax - RETURN - - CFI_PUSH (%esi) - - .p2align 4 -L(return_null_1): - POP (%esi) - - xor %eax, %eax - RETURN - - CFI_PUSH (%esi) - - .p2align 4 -L(match): - pmovmskb %xmm2, %ecx - test %ecx, %ecx - jnz L(find_zero) -/* save match info */ - mov %eax, %edx - mov %edi, %esi - jmp L(loop) - - .p2align 4 -L(find_zero): - test %cl, %cl - jz L(find_zero_in_third_or_fourth_wchar) - test $15, %cl - jz L(find_zero_in_second_wchar) - and $1, %eax - jz L(return_value) - - POP (%esi) - - lea -16(%edi), %eax - RETURN - - CFI_PUSH (%esi) - - .p2align 4 -L(find_zero_in_second_wchar): - and $1 << 5 - 1, %eax - jz L(return_value) - - POP (%esi) - - test $15 << 4, %al - jnz L(match_second_wchar) - lea -16(%edi), %eax - RETURN - - CFI_PUSH (%esi) - - .p2align 4 -L(find_zero_in_third_or_fourth_wchar): - test $15, %ch - jz L(find_zero_in_fourth_wchar) - and $1 << 9 - 1, %eax - jz L(return_value) - - POP (%esi) - - test %ah, %ah - jnz L(match_third_wchar) - test $15 << 4, %al - jnz L(match_second_wchar) - lea -16(%edi), %eax - RETURN - - CFI_PUSH (%esi) - - .p2align 4 -L(find_zero_in_fourth_wchar): - - POP (%esi) - - test %ah, %ah - jnz L(match_third_or_fourth_wchar) - test $15 << 4, %al - jnz L(match_second_wchar) - lea -16(%edi), %eax - RETURN - - CFI_PUSH (%esi) - - .p2align 4 -L(match_second_wchar): - lea -12(%edi), %eax - RETURN - - .p2align 4 -L(match_third_or_fourth_wchar): - test $15 << 4, %ah - jnz L(match_fourth_wchar) - lea -8(%edi), %eax - RETURN - - .p2align 4 -L(match_third_wchar): - lea -8(%edi), %eax - RETURN - - .p2align 4 -L(match_fourth_wchar): - lea -4(%edi), %eax - RETURN - - .p2align 4 -L(return_null): - xor %eax, %eax - RETURN - - .p2align 4 -L(prolog_find_zero): - add %ecx, %edi - mov %edx, %ecx -L(prolog_find_zero_1): - test %cl, %cl - jz L(prolog_find_zero_in_third_or_fourth_wchar) - test $15, %cl - jz L(prolog_find_zero_in_second_wchar) - and $1, %eax - jz L(return_null) - - lea -16(%edi), %eax - RETURN - - .p2align 4 -L(prolog_find_zero_in_second_wchar): - and $1 << 5 - 1, %eax - jz L(return_null) - - test $15 << 4, %al - jnz L(match_second_wchar) - lea -16(%edi), %eax - RETURN - - .p2align 4 -L(prolog_find_zero_in_third_or_fourth_wchar): - test $15, %ch - jz L(prolog_find_zero_in_fourth_wchar) - and $1 << 9 - 1, %eax - jz L(return_null) - - test %ah, %ah - jnz L(match_third_wchar) - test $15 << 4, %al - jnz L(match_second_wchar) - lea -16(%edi), %eax - RETURN - - .p2align 4 -L(prolog_find_zero_in_fourth_wchar): - test %ah, %ah - jnz L(match_third_or_fourth_wchar) - test $15 << 4, %al - jnz L(match_second_wchar) - lea -16(%edi), %eax - RETURN - -END (__wcsrchr_sse2) -#endif diff --git a/sysdeps/i386/i686/multiarch/wcsrchr.S b/sysdeps/i386/i686/multiarch/wcsrchr.S deleted file mode 100644 index cf67333995..0000000000 --- a/sysdeps/i386/i686/multiarch/wcsrchr.S +++ /dev/null @@ -1,35 +0,0 @@ -/* Multiple versions of wcsrchr - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if IS_IN (libc) - .text -ENTRY(wcsrchr) - .type wcsrchr, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__wcsrchr_ia32) - HAS_CPU_FEATURE (SSE2) - jz 2f - LOAD_FUNC_GOT_EAX (__wcsrchr_sse2) -2: ret -END(wcsrchr) -#endif diff --git a/sysdeps/i386/i686/multiarch/wmemcmp-c.c b/sysdeps/i386/i686/multiarch/wmemcmp-c.c deleted file mode 100644 index 75ab4b94c1..0000000000 --- a/sysdeps/i386/i686/multiarch/wmemcmp-c.c +++ /dev/null @@ -1,9 +0,0 @@ -#include - -#if IS_IN (libc) -# define WMEMCMP __wmemcmp_ia32 -#endif - -extern __typeof (wmemcmp) __wmemcmp_ia32; - -#include "wcsmbs/wmemcmp.c" diff --git a/sysdeps/i386/i686/multiarch/wmemcmp-sse4.S b/sysdeps/i386/i686/multiarch/wmemcmp-sse4.S deleted file mode 100644 index 1a857c7e21..0000000000 --- a/sysdeps/i386/i686/multiarch/wmemcmp-sse4.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_WMEMCMP 1 -#define MEMCMP __wmemcmp_sse4_2 - -#include "memcmp-sse4.S" diff --git a/sysdeps/i386/i686/multiarch/wmemcmp-ssse3.S b/sysdeps/i386/i686/multiarch/wmemcmp-ssse3.S deleted file mode 100644 index a41ef95fc1..0000000000 --- a/sysdeps/i386/i686/multiarch/wmemcmp-ssse3.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_WMEMCMP 1 -#define MEMCMP __wmemcmp_ssse3 - -#include "memcmp-ssse3.S" diff --git a/sysdeps/i386/i686/multiarch/wmemcmp.S b/sysdeps/i386/i686/multiarch/wmemcmp.S deleted file mode 100644 index 1b9a54a413..0000000000 --- a/sysdeps/i386/i686/multiarch/wmemcmp.S +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of wmemcmp - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in libc. */ - -#if IS_IN (libc) - .text -ENTRY(wmemcmp) - .type wmemcmp, @gnu_indirect_function - LOAD_GOT_AND_RTLD_GLOBAL_RO - LOAD_FUNC_GOT_EAX (__wmemcmp_ia32) - HAS_CPU_FEATURE (SSSE3) - jz 2f - LOAD_FUNC_GOT_EAX (__wmemcmp_ssse3) - HAS_CPU_FEATURE (SSE4_2) - jz 2f - LOAD_FUNC_GOT_EAX (__wmemcmp_sse4_2) -2: ret -END(wmemcmp) -#endif diff --git a/sysdeps/i386/i686/nptl/tls.h b/sysdeps/i386/i686/nptl/tls.h deleted file mode 100644 index 5b527af9d3..0000000000 --- a/sysdeps/i386/i686/nptl/tls.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TLS_H - -/* Additional definitions for on i686 and up. */ - - -/* Macros to load from and store into segment registers. We can use - the 32-bit instructions. */ -#define TLS_GET_GS() \ - ({ int __seg; __asm ("movl %%gs, %0" : "=q" (__seg)); __seg; }) -#define TLS_SET_GS(val) \ - __asm ("movl %0, %%gs" :: "q" (val)) - - -/* Get the full set of definitions. */ -#include_next - -#endif /* tls.h */ diff --git a/sysdeps/i386/i686/pthread_spin_trylock.S b/sysdeps/i386/i686/pthread_spin_trylock.S deleted file mode 100644 index ce9c94d41a..0000000000 --- a/sysdeps/i386/i686/pthread_spin_trylock.S +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define HAVE_CMOV 1 -#include diff --git a/sysdeps/i386/i686/stack-aliasing.h b/sysdeps/i386/i686/stack-aliasing.h deleted file mode 100644 index 9b5a1b0d47..0000000000 --- a/sysdeps/i386/i686/stack-aliasing.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Define macros for stack address aliasing issues for NPTL. i686 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* What is useful is to avoid the 64k aliasing problem which reliably - happens if all stacks use sizes which are a multiple of 64k. Tell - the stack allocator to disturb this by allocation one more page if - necessary. */ -#define MULTI_PAGE_ALIASING 65536 diff --git a/sysdeps/i386/i686/strcmp.S b/sysdeps/i386/i686/strcmp.S deleted file mode 100644 index 1ae305912e..0000000000 --- a/sysdeps/i386/i686/strcmp.S +++ /dev/null @@ -1,52 +0,0 @@ -/* Highly optimized version for ix86, x>=6. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4 /* no space for saved regs */ -#define STR1 PARMS -#define STR2 STR1+4 - - .text -ENTRY (strcmp) - - movl STR1(%esp), %ecx - movl STR2(%esp), %edx - -L(oop): movb (%ecx), %al - cmpb (%edx), %al - jne L(neq) - incl %ecx - incl %edx - testb %al, %al - jnz L(oop) - - xorl %eax, %eax - /* when strings are equal, pointers rest one beyond - the end of the NUL terminators. */ - ret - -L(neq): movl $1, %eax - movl $-1, %ecx - cmovbl %ecx, %eax - - ret -END (strcmp) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/i386/i686/tst-stack-align.h b/sysdeps/i386/i686/tst-stack-align.h deleted file mode 100644 index 51f03fe77b..0000000000 --- a/sysdeps/i386/i686/tst-stack-align.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef __SSE__ -#include_next -#else -#include - -#define TEST_STACK_ALIGN() \ - ({ \ - __m128 _m; \ - double _d = 12.0; \ - long double _ld = 15.0; \ - int _ret = 0; \ - printf ("__m128: %p %zu\n", &_m, __alignof (__m128)); \ - if ((((uintptr_t) &_m) & (__alignof (__m128) - 1)) != 0) \ - _ret = 1; \ - \ - printf ("double: %g %p %zu\n", _d, &_d, __alignof (double)); \ - if ((((uintptr_t) &_d) & (__alignof (double) - 1)) != 0) \ - _ret = 1; \ - \ - printf ("ldouble: %Lg %p %zu\n", _ld, &_ld, __alignof (long double)); \ - if ((((uintptr_t) &_ld) & (__alignof (long double) - 1)) != 0) \ - _ret = 1; \ - _ret; \ - }) -#endif diff --git a/sysdeps/i386/i786/Implies b/sysdeps/i386/i786/Implies deleted file mode 100644 index 1cd29f63cf..0000000000 --- a/sysdeps/i386/i786/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# The PPro and PII cores are mostly the same. -i386/i686 diff --git a/sysdeps/i386/init-arch.h b/sysdeps/i386/init-arch.h deleted file mode 100644 index 72881c5679..0000000000 --- a/sysdeps/i386/init-arch.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define MINIMUM_ISA 486 -#include diff --git a/sysdeps/i386/jmpbuf-offsets.h b/sysdeps/i386/jmpbuf-offsets.h deleted file mode 100644 index 1c95db7287..0000000000 --- a/sysdeps/i386/jmpbuf-offsets.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Private macros for accessing __jmp_buf contents. i386 version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define JB_BX 0 -#define JB_SI 1 -#define JB_DI 2 -#define JB_BP 3 -#define JB_SP 4 -#define JB_PC 5 -#define JB_SIZE 24 diff --git a/sysdeps/i386/jmpbuf-unwind.h b/sysdeps/i386/jmpbuf-unwind.h deleted file mode 100644 index 0a63a832cc..0000000000 --- a/sysdeps/i386/jmpbuf-unwind.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((void *) (address) < (void *) demangle ((jmpbuf)[JB_SP])) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf regs) -{ - uintptr_t sp = regs[JB_SP]; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return sp; -} - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/i386/ldbl2mpn.c b/sysdeps/i386/ldbl2mpn.c deleted file mode 100644 index 076be0ae7e..0000000000 --- a/sysdeps/i386/ldbl2mpn.c +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" -#include -#include -#include - -/* Convert a `long double' in IEEE854 standard double-precision format to a - multi-precision integer representing the significand scaled up by its - number of bits (64 for long double) and an integral power of two - (MPN frexpl). */ - -mp_size_t -__mpn_extract_long_double (mp_ptr res_ptr, mp_size_t size, - int *expt, int *is_neg, - long double value) -{ - union ieee854_long_double u; - u.d = value; - - *is_neg = u.ieee.negative; - *expt = (int) u.ieee.exponent - IEEE854_LONG_DOUBLE_BIAS; - -#if BITS_PER_MP_LIMB == 32 - res_ptr[0] = u.ieee.mantissa1; /* Low-order 32 bits of fraction. */ - res_ptr[1] = u.ieee.mantissa0; /* High-order 32 bits. */ - #define N 2 -#elif BITS_PER_MP_LIMB == 64 - /* Hopefully the compiler will combine the two bitfield extracts - and this composition into just the original quadword extract. */ - res_ptr[0] = ((mp_limb_t) u.ieee.mantissa0 << 32) | u.ieee.mantissa1; - #define N 1 -#else - #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" -#endif - - if (u.ieee.exponent == 0) - { - /* A biased exponent of zero is a special case. - Either it is a zero or it is a denormal number. */ - if (res_ptr[0] == 0 && res_ptr[N - 1] == 0) /* Assumes N<=2. */ - /* It's zero. */ - *expt = 0; - else - { - /* It is a denormal number, meaning it has no implicit leading - one bit, and its exponent is in fact the format minimum. */ - int cnt; - - /* One problem with Intel's 80-bit format is that the explicit - leading one in the normalized representation has to be zero - for denormalized number. If it is one, the number is according - to Intel's specification an invalid number. We make the - representation unique by explicitly clearing this bit. */ - res_ptr[N - 1] &= ~((mp_limb_t) 1 << ((LDBL_MANT_DIG - 1) % BITS_PER_MP_LIMB)); - - if (res_ptr[N - 1] != 0) - { - count_leading_zeros (cnt, res_ptr[N - 1]); - if (cnt != 0) - { -#if N == 2 - res_ptr[N - 1] = res_ptr[N - 1] << cnt - | (res_ptr[0] >> (BITS_PER_MP_LIMB - cnt)); - res_ptr[0] <<= cnt; -#else - res_ptr[N - 1] <<= cnt; -#endif - } - *expt = LDBL_MIN_EXP - 1 - cnt; - } - else if (res_ptr[0] != 0) - { - count_leading_zeros (cnt, res_ptr[0]); - res_ptr[N - 1] = res_ptr[0] << cnt; - res_ptr[0] = 0; - *expt = LDBL_MIN_EXP - 1 - BITS_PER_MP_LIMB - cnt; - } - else - { - /* This is the special case of the pseudo denormal number - with only the implicit leading bit set. The value is - in fact a normal number and so we have to treat this - case differently. */ -#if N == 2 - res_ptr[N - 1] = 0x80000000ul; -#else - res_ptr[0] = 0x8000000000000000ul; -#endif - *expt = LDBL_MIN_EXP - 1; - } - } - } - else if (u.ieee.exponent < 0x7fff -#if N == 2 - && res_ptr[0] == 0 -#endif - && res_ptr[N - 1] == 0) - /* Pseudo zero. */ - *expt = 0; - - return N; -} diff --git a/sysdeps/i386/ldsodefs.h b/sysdeps/i386/ldsodefs.h deleted file mode 100644 index a369f5fc68..0000000000 --- a/sysdeps/i386/ldsodefs.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _I386_LDSODEFS_H -#define _I386_LDSODEFS_H 1 - -#include -#include - -struct La_i86_regs; -struct La_i86_retval; - -#define ARCH_PLTENTER_MEMBERS \ - Elf32_Addr (*i86_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *, \ - uintptr_t *, struct La_i86_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep) - -#define ARCH_PLTEXIT_MEMBERS \ - unsigned int (*i86_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *, \ - uintptr_t *, const struct La_i86_regs *, \ - struct La_i86_retval *, const char *) - -#include_next - -#endif diff --git a/sysdeps/i386/link-defines.sym b/sysdeps/i386/link-defines.sym deleted file mode 100644 index 0995adb37f..0000000000 --- a/sysdeps/i386/link-defines.sym +++ /dev/null @@ -1,20 +0,0 @@ -#include "link.h" -#include - --- -LONG_DOUBLE_SIZE sizeof (long double) - -LR_SIZE sizeof (struct La_i86_regs) -LR_EDX_OFFSET offsetof (struct La_i86_regs, lr_edx) -LR_ECX_OFFSET offsetof (struct La_i86_regs, lr_ecx) -LR_EAX_OFFSET offsetof (struct La_i86_regs, lr_eax) -LR_EBP_OFFSET offsetof (struct La_i86_regs, lr_ebp) -LR_ESP_OFFSET offsetof (struct La_i86_regs, lr_esp) - -LRV_SIZE sizeof (struct La_i86_retval) -LRV_EAX_OFFSET offsetof (struct La_i86_retval, lrv_eax) -LRV_EDX_OFFSET offsetof (struct La_i86_retval, lrv_edx) -LRV_ST0_OFFSET offsetof (struct La_i86_retval, lrv_st0) -LRV_ST1_OFFSET offsetof (struct La_i86_retval, lrv_st1) -LRV_BND0_OFFSET offsetof (struct La_i86_retval, lrv_bnd0) -LRV_BND1_OFFSET offsetof (struct La_i86_retval, lrv_bnd1) diff --git a/sysdeps/i386/lshift.S b/sysdeps/i386/lshift.S deleted file mode 100644 index fa4b07793f..0000000000 --- a/sysdeps/i386/lshift.S +++ /dev/null @@ -1,103 +0,0 @@ -/* i80386 __mpn_lshift -- - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define PARMS 4+12 /* space for 3 saved regs */ -#define RES PARMS -#define S RES+4 -#define SIZE S+4 -#define CNT SIZE+4 - - .text -ENTRY (__mpn_lshift) - - pushl %edi - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - pushl %ebx - cfi_adjust_cfa_offset (4) - - movl RES(%esp),%edi - cfi_rel_offset (edi, 8) - movl S(%esp),%esi - cfi_rel_offset (esi, 4) - movl SIZE(%esp),%edx - movl CNT(%esp),%ecx - subl $4,%esi /* adjust s_ptr */ - - movl (%esi,%edx,4),%ebx /* read most significant limb */ - cfi_rel_offset (ebx, 0) - cfi_remember_state - xorl %eax,%eax - shldl %cl,%ebx,%eax /* compute carry limb */ - decl %edx - jz L(end) - pushl %eax /* push carry limb onto stack */ - cfi_adjust_cfa_offset (4) - testb $1,%dl - jnz L(1) /* enter loop in the middle */ - movl %ebx,%eax - - ALIGN (3) -L(oop): movl (%esi,%edx,4),%ebx /* load next lower limb */ - shldl %cl,%ebx,%eax /* compute result limb */ - movl %eax,(%edi,%edx,4) /* store it */ - decl %edx -L(1): movl (%esi,%edx,4),%eax - shldl %cl,%eax,%ebx - movl %ebx,(%edi,%edx,4) - decl %edx - jnz L(oop) - - shll %cl,%eax /* compute least significant limb */ - movl %eax,(%edi) /* store it */ - - popl %eax /* pop carry limb */ - cfi_adjust_cfa_offset (-4) - - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret - - cfi_restore_state -L(end): shll %cl,%ebx /* compute least significant limb */ - movl %ebx,(%edi) /* store it */ - - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (__mpn_lshift) diff --git a/sysdeps/i386/machine-gmon.h b/sysdeps/i386/machine-gmon.h deleted file mode 100644 index d5d8cdf7c6..0000000000 --- a/sysdeps/i386/machine-gmon.h +++ /dev/null @@ -1,40 +0,0 @@ -/* i386-specific implementation of profiling support. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* We need a special version of the `mcount' function since for ix86 it - must not clobber any register. This has several reasons: - - there is a bug in gcc as of version 2.7.2.2 which prohibits the - use of profiling together with nested functions - - the ELF `fixup' function uses GCC's regparm feature - - some (future) systems might want to pass parameters in registers. */ - -/* We must not pollute the global namespace. */ -#define mcount_internal __mcount_internal - -extern void mcount_internal (u_long frompc, u_long selfpc) internal_function; - -#define _MCOUNT_DECL(frompc, selfpc) \ -void internal_function mcount_internal (u_long frompc, u_long selfpc) - - -/* Define MCOUNT as empty since we have the implementation in another - file. */ -#define MCOUNT diff --git a/sysdeps/i386/memchr.S b/sysdeps/i386/memchr.S deleted file mode 100644 index db4a6418ff..0000000000 --- a/sysdeps/i386/memchr.S +++ /dev/null @@ -1,322 +0,0 @@ -/* memchr (str, chr, len) -- Return pointer to first occurrence of CHR in STR - less than LEN. For Intel 80x86, x>=3. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper - Optimised a little by Alan Modra - This version is developed using the same algorithm as the fast C - version which carries the following introduction: - Based on strlen implementation by Torbjorn Granlund (tege@sics.se), - with help from Dan Sahlin (dan@sics.se) and - commentary by Jim Blandy (jimb@ai.mit.edu); - adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), - and implemented by Roland McGrath (roland@ai.mit.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+8 /* space for 2 saved regs */ -#define RTN PARMS -#define STR RTN -#define CHR STR+4 -#define LEN CHR+4 - - .text -ENTRY (__memchr) - - /* Save callee-safe registers used in this function. */ - pushl %esi - cfi_adjust_cfa_offset (4) - pushl %edi - cfi_adjust_cfa_offset (4) - cfi_rel_offset (edi, 0) - - /* Load parameters into registers. */ - movl STR(%esp), %eax /* str: pointer to memory block. */ - movl CHR(%esp), %edx /* c: byte we are looking for. */ - movl LEN(%esp), %esi /* len: length of memory block. */ - cfi_rel_offset (esi, 4) - - /* If my must not test more than three characters test - them one by one. This is especially true for 0. */ - cmpl $4, %esi - jb L(3) - - /* At the moment %edx contains CHR. What we need for the - algorithm is CHR in all bytes of the dword. Avoid - operations on 16 bit words because these require an - prefix byte (and one more cycle). */ - movb %dl, %dh /* Now it is 0|0|c|c */ - movl %edx, %ecx - shll $16, %edx /* Now c|c|0|0 */ - movw %cx, %dx /* And finally c|c|c|c */ - - /* Better performance can be achieved if the word (32 - bit) memory access is aligned on a four-byte-boundary. - So process first bytes one by one until boundary is - reached. Don't use a loop for better performance. */ - - testb $3, %al /* correctly aligned ? */ - je L(2) /* yes => begin loop */ - cmpb %dl, (%eax) /* compare byte */ - je L(9) /* target found => return */ - incl %eax /* increment source pointer */ - decl %esi /* decrement length counter */ - je L(4) /* len==0 => return NULL */ - - testb $3, %al /* correctly aligned ? */ - je L(2) /* yes => begin loop */ - cmpb %dl, (%eax) /* compare byte */ - je L(9) /* target found => return */ - incl %eax /* increment source pointer */ - decl %esi /* decrement length counter */ - je L(4) /* len==0 => return NULL */ - - testb $3, %al /* correctly aligned ? */ - je L(2) /* yes => begin loop */ - cmpb %dl, (%eax) /* compare byte */ - je L(9) /* target found => return */ - incl %eax /* increment source pointer */ - decl %esi /* decrement length counter */ - /* no test for len==0 here, because this is done in the - loop head */ - jmp L(2) - - /* We exit the loop if adding MAGIC_BITS to LONGWORD fails to - change any of the hole bits of LONGWORD. - - 1) Is this safe? Will it catch all the zero bytes? - Suppose there is a byte with all zeros. Any carry bits - propagating from its left will fall into the hole at its - least significant bit and stop. Since there will be no - carry from its most significant bit, the LSB of the - byte to the left will be unchanged, and the zero will be - detected. - - 2) Is this worthwhile? Will it ignore everything except - zero bytes? Suppose every byte of LONGWORD has a bit set - somewhere. There will be a carry into bit 8. If bit 8 - is set, this will carry into bit 16. If bit 8 is clear, - one of bits 9-15 must be set, so there will be a carry - into bit 16. Similarly, there will be a carry into bit - 24. If one of bits 24-31 is set, there will be a carry - into bit 32 (=carry flag), so all of the hole bits will - be changed. - - 3) But wait! Aren't we looking for CHR, not zero? - Good point. So what we do is XOR LONGWORD with a longword, - each of whose bytes is CHR. This turns each byte that is CHR - into a zero. */ - - - /* Each round the main loop processes 16 bytes. */ - - ALIGN (4) - -L(1): movl (%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - - /* According to the algorithm we had to reverse the effect of the - XOR first and then test the overflow bits. But because the - following XOR would destroy the carry flag and it would (in a - representation with more than 32 bits) not alter then last - overflow, we can now test this condition. If no carry is signaled - no overflow must have occurred in the last byte => it was 0. */ - jnc L(8) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - - /* Now test for the other three overflow bits. */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - - /* If at least one byte of the word is CHR we don't get 0 in %edi. */ - jnz L(8) /* found it => return pointer */ - - /* This process is unfolded four times for better performance. - we don't increment the source pointer each time. Instead we - use offsets and increment by 16 in each run of the loop. But - before probing for the matching byte we need some extra code - (following LL(13) below). Even the len can be compared with - constants instead of decrementing each time. */ - - movl 4(%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(7) /* highest byte is CHR => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(7) /* found it => return pointer */ - - movl 8(%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(6) /* highest byte is CHR => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(6) /* found it => return pointer */ - - movl 12(%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(5) /* highest byte is CHR => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(5) /* found it => return pointer */ - - /* Adjust both counters for a full round, i.e. 16 bytes. */ - addl $16, %eax -L(2): subl $16, %esi - jae L(1) /* Still more than 16 bytes remaining */ - - /* Process remaining bytes separately. */ - cmpl $4-16, %esi /* rest < 4 bytes? */ - jb L(3) /* yes, than test byte by byte */ - - movl (%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(8) /* highest byte is CHR => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jne L(8) /* found it => return pointer */ - addl $4, %eax /* adjust source pointer */ - - cmpl $8-16, %esi /* rest < 8 bytes? */ - jb L(3) /* yes, than test byte by byte */ - - movl (%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(8) /* highest byte is CHR => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jne L(8) /* found it => return pointer */ - addl $4, %eax /* adjust source pointer */ - - cmpl $12-16, %esi /* rest < 12 bytes? */ - jb L(3) /* yes, than test byte by byte */ - - movl (%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(8) /* highest byte is CHR => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jne L(8) /* found it => return pointer */ - addl $4, %eax /* adjust source pointer */ - - /* Check the remaining bytes one by one. */ -L(3): andl $3, %esi /* mask out uninteresting bytes */ - jz L(4) /* no remaining bytes => return NULL */ - - cmpb %dl, (%eax) /* compare byte with CHR */ - je L(9) /* equal, than return pointer */ - incl %eax /* increment source pointer */ - decl %esi /* decrement length */ - jz L(4) /* no remaining bytes => return NULL */ - - cmpb %dl, (%eax) /* compare byte with CHR */ - je L(9) /* equal, than return pointer */ - incl %eax /* increment source pointer */ - decl %esi /* decrement length */ - jz L(4) /* no remaining bytes => return NULL */ - - cmpb %dl, (%eax) /* compare byte with CHR */ - je L(9) /* equal, than return pointer */ - -L(4): /* no byte found => return NULL */ - xorl %eax, %eax - jmp L(9) - - /* add missing source pointer increments */ -L(5): addl $4, %eax -L(6): addl $4, %eax -L(7): addl $4, %eax - - /* Test for the matching byte in the word. %ecx contains a NUL - char in the byte which originally was the byte we are looking - at. */ -L(8): testb %cl, %cl /* test first byte in dword */ - jz L(9) /* if zero => return pointer */ - incl %eax /* increment source pointer */ - - testb %ch, %ch /* test second byte in dword */ - jz L(9) /* if zero => return pointer */ - incl %eax /* increment source pointer */ - - testl $0xff0000, %ecx /* test third byte in dword */ - jz L(9) /* if zero => return pointer */ - incl %eax /* increment source pointer */ - - /* No further test needed we we know it is one of the four bytes. */ -L(9): popl %edi /* pop saved registers */ - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - - ret -END (__memchr) - -weak_alias (__memchr, memchr) -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/i386/memcmp.S b/sysdeps/i386/memcmp.S deleted file mode 100644 index 01f8f8ef03..0000000000 --- a/sysdeps/i386/memcmp.S +++ /dev/null @@ -1,73 +0,0 @@ -/* Compare two memory blocks for differences in the first COUNT bytes. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+4 /* space for 1 saved reg */ -#define BLK1 PARMS -#define BLK2 BLK1+4 -#define LEN BLK2+4 - - .text -ENTRY (memcmp) - - pushl %esi /* Save callee-safe registers. */ - cfi_adjust_cfa_offset (4) - movl %edi, %edx /* Note that %edx is not used and can - so be used to save %edi. It's faster. */ - cfi_register (edi, edx) - - movl BLK1(%esp), %esi - cfi_rel_offset (esi, 0) - movl BLK2(%esp), %edi - movl LEN(%esp), %ecx - - cld /* Set direction of comparison. */ - - xorl %eax, %eax /* Default result. */ - - repe /* Compare at most %ecx bytes. */ - cmpsb - jz L(1) /* If even last byte was equal we return 0. */ - - /* The memory blocks are not equal. So result of the last - subtraction is present in the carry flag. It is set when - the byte in block #2 is bigger. In this case we have to - return -1 (=0xffffffff), else 1. */ - sbbl %eax, %eax /* This is tricky. %eax == 0 and carry is set - or not depending on last subtraction. */ - - /* At this point %eax == 0, if the byte of block #1 was bigger, and - 0xffffffff if the last byte of block #2 was bigger. The latter - case is already correct but the former needs a little adjustment. - Note that the following operation does not change 0xffffffff. */ - orb $1, %al /* Change 0 to 1. */ - -L(1): popl %esi /* Restore registers. */ - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - movl %edx, %edi - cfi_restore (edi) - - ret -END (memcmp) - -#undef bcmp -weak_alias (memcmp, bcmp) -libc_hidden_builtin_def (memcmp) diff --git a/sysdeps/i386/memcopy.h b/sysdeps/i386/memcopy.h deleted file mode 100644 index dc6173ee29..0000000000 --- a/sysdeps/i386/memcopy.h +++ /dev/null @@ -1,92 +0,0 @@ -/* memcopy.h -- definitions for memory copy functions. i386 version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Torbjorn Granlund (tege@sics.se). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef OP_T_THRES -#define OP_T_THRES 8 - -#undef BYTE_COPY_FWD -#define BYTE_COPY_FWD(dst_bp, src_bp, nbytes) \ - do { \ - int __d0; \ - asm volatile(/* Clear the direction flag, so copying goes forward. */ \ - "cld\n" \ - /* Copy bytes. */ \ - "rep\n" \ - "movsb" : \ - "=D" (dst_bp), "=S" (src_bp), "=c" (__d0) : \ - "0" (dst_bp), "1" (src_bp), "2" (nbytes) : \ - "memory"); \ - } while (0) - -#undef BYTE_COPY_BWD -#define BYTE_COPY_BWD(dst_ep, src_ep, nbytes) \ - do \ - { \ - int __d0; \ - asm volatile(/* Set the direction flag, so copying goes backwards. */ \ - "std\n" \ - /* Copy bytes. */ \ - "rep\n" \ - "movsb\n" \ - /* Clear the dir flag. Convention says it should be 0. */ \ - "cld" : \ - "=D" (dst_ep), "=S" (src_ep), "=c" (__d0) : \ - "0" (dst_ep - 1), "1" (src_ep - 1), "2" (nbytes) : \ - "memory"); \ - dst_ep += 1; \ - src_ep += 1; \ - } while (0) - -#undef WORD_COPY_FWD -#define WORD_COPY_FWD(dst_bp, src_bp, nbytes_left, nbytes) \ - do \ - { \ - int __d0; \ - asm volatile(/* Clear the direction flag, so copying goes forward. */ \ - "cld\n" \ - /* Copy longwords. */ \ - "rep\n" \ - "movsl" : \ - "=D" (dst_bp), "=S" (src_bp), "=c" (__d0) : \ - "0" (dst_bp), "1" (src_bp), "2" ((nbytes) / 4) : \ - "memory"); \ - (nbytes_left) = (nbytes) % 4; \ - } while (0) - -#undef WORD_COPY_BWD -#define WORD_COPY_BWD(dst_ep, src_ep, nbytes_left, nbytes) \ - do \ - { \ - int __d0; \ - asm volatile(/* Set the direction flag, so copying goes backwards. */ \ - "std\n" \ - /* Copy longwords. */ \ - "rep\n" \ - "movsl\n" \ - /* Clear the dir flag. Convention says it should be 0. */ \ - "cld" : \ - "=D" (dst_ep), "=S" (src_ep), "=c" (__d0) : \ - "0" (dst_ep - 4), "1" (src_ep - 4), "2" ((nbytes) / 4) : \ - "memory"); \ - dst_ep += 4; \ - src_ep += 4; \ - (nbytes_left) = (nbytes) % 4; \ - } while (0) diff --git a/sysdeps/i386/memcpy.S b/sysdeps/i386/memcpy.S deleted file mode 100644 index 06568ea724..0000000000 --- a/sysdeps/i386/memcpy.S +++ /dev/null @@ -1,95 +0,0 @@ -/* memcpy with REP MOVSB/STOSB - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#ifndef MEMCPY -# define MEMCPY memcpy -# define MEMCPY_CHK __memcpy_chk -#endif - -#ifdef USE_AS_BCOPY -# define STR2 12 -# define STR1 STR2+4 -# define N STR1+4 -#else -# define STR1 12 -# define STR2 STR1+4 -# define N STR2+4 -#endif - -#define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -#define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -#define PUSH(REG) pushl REG; CFI_PUSH (REG) -#define POP(REG) popl REG; CFI_POP (REG) - - .text -#if defined SHARED && IS_IN (libc) && !defined USE_AS_BCOPY -ENTRY (MEMCPY_CHK) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb HIDDEN_JUMPTARGET (__chk_fail) -END (MEMCPY_CHK) -#endif -ENTRY (MEMCPY) - PUSH (%esi) - PUSH (%edi) - movl N(%esp), %ecx - movl STR1(%esp), %edi - movl STR2(%esp), %esi - mov %edi, %eax -#ifdef USE_AS_MEMPCPY - add %ecx, %eax -#endif - -#ifdef USE_AS_MEMMOVE - cmp %esi, %edi - ja L(copy_backward) - je L(bwd_write_0bytes) -#endif - - rep movsb - POP (%edi) - POP (%esi) - ret - -#ifdef USE_AS_MEMMOVE -L(copy_backward): - lea -1(%edi,%ecx), %edi - lea -1(%esi,%ecx), %esi - std - rep movsb - cld -L(bwd_write_0bytes): - POP (%edi) - POP (%esi) - ret -#endif - -END (MEMCPY) - -#ifndef USE_AS_BCOPY -libc_hidden_builtin_def (MEMCPY) -#endif diff --git a/sysdeps/i386/memcpy_chk.S b/sysdeps/i386/memcpy_chk.S deleted file mode 100644 index 0f6f585c41..0000000000 --- a/sysdeps/i386/memcpy_chk.S +++ /dev/null @@ -1,34 +0,0 @@ -/* Checking memcpy for i386. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef SHARED -# include -# include "asm-syntax.h" - - /* For libc.so this is defined in memcpy.S. - For libc.a, this is a separate source to avoid - memcpy bringing in __chk_fail and all routines - it calls. */ - .text -ENTRY (__memcpy_chk) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb __chk_fail - jmp memcpy -END (__memcpy_chk) -#endif diff --git a/sysdeps/i386/memmove.S b/sysdeps/i386/memmove.S deleted file mode 100644 index 60a45d21e0..0000000000 --- a/sysdeps/i386/memmove.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_MEMMOVE -#define MEMCPY memmove -#define MEMCPY_CHK __memmove_chk -#include "memcpy.S" diff --git a/sysdeps/i386/memmove_chk.S b/sysdeps/i386/memmove_chk.S deleted file mode 100644 index 0c7037cc05..0000000000 --- a/sysdeps/i386/memmove_chk.S +++ /dev/null @@ -1,33 +0,0 @@ -/* Checking memmove for i386 - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef SHARED -# include -# include "asm-syntax.h" - -/* For libc.so this is defined in memmove.S. For libc.a, this is a - separate source to avoid memmove bringing in __chk_fail and all - routines it calls. */ - .text -ENTRY (__memmove_chk) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb __chk_fail - jmp memmove -END (__memmove_chk) -#endif diff --git a/sysdeps/i386/mempcpy.S b/sysdeps/i386/mempcpy.S deleted file mode 100644 index 61addb75f4..0000000000 --- a/sysdeps/i386/mempcpy.S +++ /dev/null @@ -1,7 +0,0 @@ -#define USE_AS_MEMPCPY -#define MEMCPY __mempcpy -#define MEMCPY_CHK __mempcpy_chk -#include "memcpy.S" - -weak_alias (__mempcpy, mempcpy) -libc_hidden_builtin_def (mempcpy) diff --git a/sysdeps/i386/mempcpy_chk.S b/sysdeps/i386/mempcpy_chk.S deleted file mode 100644 index 4d8ac5c25b..0000000000 --- a/sysdeps/i386/mempcpy_chk.S +++ /dev/null @@ -1,33 +0,0 @@ -/* Checking mempcpy for i386 - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef SHARED -# include -# include "asm-syntax.h" - -/* For libc.so this is defined in mempcpy.S. For libc.a, this is a - separate source to avoid mempcpy bringing in __chk_fail and all - routines it calls. */ - .text -ENTRY (__mempcpy_chk) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb __chk_fail - jmp mempcpy -END (__mempcpy_chk) -#endif diff --git a/sysdeps/i386/memset.S b/sysdeps/i386/memset.S deleted file mode 100644 index 46ae65d2e4..0000000000 --- a/sysdeps/i386/memset.S +++ /dev/null @@ -1,68 +0,0 @@ -/* memset with REP MOVSB/STOSB - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define CFI_PUSH(REG) \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (REG, 0) - -#define CFI_POP(REG) \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (REG) - -#define PUSH(REG) pushl REG; CFI_PUSH (REG) -#define POP(REG) popl REG; CFI_POP (REG) - -#define STR1 8 -#ifdef USE_AS_BZERO -#define N STR1+4 -#else -#define STR2 STR1+4 -#define N STR2+4 -#endif - - .text -#if defined SHARED && IS_IN (libc) && !defined USE_AS_BZERO -ENTRY (__memset_chk) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb HIDDEN_JUMPTARGET (__chk_fail) -END (__memset_chk) -#endif -ENTRY (memset) - PUSH (%edi) - movl N(%esp), %ecx - movl STR1(%esp), %edi -#ifdef USE_AS_BZERO - xor %eax, %eax -#else - movzbl STR2(%esp), %eax - mov %edi, %edx -#endif - rep stosb -#ifndef USE_AS_BZERO - mov %edx, %eax -#endif - POP (%edi) - ret -END (memset) - -#ifndef USE_AS_BZERO -libc_hidden_builtin_def (memset) -#endif diff --git a/sysdeps/i386/memset_chk.S b/sysdeps/i386/memset_chk.S deleted file mode 100644 index da7837111e..0000000000 --- a/sysdeps/i386/memset_chk.S +++ /dev/null @@ -1,33 +0,0 @@ -/* Checking memset for i386. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef SHARED -# include -# include "asm-syntax.h" - -/* For libc.so this is defined in memset.S. For libc.a, this is a - separate source to avoid memset bringing in __chk_fail and all - routines it calls. */ - .text -ENTRY (__memset_chk) - movl 12(%esp), %eax - cmpl %eax, 16(%esp) - jb __chk_fail - jmp memset -END (__memset_chk) -#endif diff --git a/sysdeps/i386/memusage.h b/sysdeps/i386/memusage.h deleted file mode 100644 index 30167be833..0000000000 --- a/sysdeps/i386/memusage.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("esp"); stack_ptr; }) - -#include diff --git a/sysdeps/i386/mp_clz_tab.c b/sysdeps/i386/mp_clz_tab.c deleted file mode 100644 index 860f98cc62..0000000000 --- a/sysdeps/i386/mp_clz_tab.c +++ /dev/null @@ -1 +0,0 @@ -/* __clz_tab not needed on i386. */ diff --git a/sysdeps/i386/mul_1.S b/sysdeps/i386/mul_1.S deleted file mode 100644 index cf83d1b343..0000000000 --- a/sysdeps/i386/mul_1.S +++ /dev/null @@ -1,86 +0,0 @@ -/* i80386 __mpn_mul_1 -- Multiply a limb vector with a limb and store - the result in a second limb vector. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+16 /* space for 4 saved regs */ -#define RES PARMS -#define S1 RES+4 -#define SIZE S1+4 -#define S2LIMB SIZE+4 - -#define res_ptr edi -#define s1_ptr esi -#define size ecx -#define s2_limb ebx - - .text -ENTRY (__mpn_mul_1) - - pushl %res_ptr - cfi_adjust_cfa_offset (4) - pushl %s1_ptr - cfi_adjust_cfa_offset (4) - pushl %ebp - cfi_adjust_cfa_offset (4) - pushl %s2_limb - cfi_adjust_cfa_offset (4) - - movl RES(%esp), %res_ptr - cfi_rel_offset (res_ptr, 12) - movl S1(%esp), %s1_ptr - cfi_rel_offset (s1_ptr, 8) - movl SIZE(%esp), %size - movl S2LIMB(%esp), %s2_limb - cfi_rel_offset (s2_limb, 0) - leal (%res_ptr,%size,4), %res_ptr - leal (%s1_ptr,%size,4), %s1_ptr - negl %size - xorl %ebp, %ebp - cfi_rel_offset (ebp, 4) - ALIGN (3) -L(oop): - movl (%s1_ptr,%size,4), %eax - mull %s2_limb - addl %ebp, %eax - movl %eax, (%res_ptr,%size,4) - adcl $0, %edx - movl %edx, %ebp - - incl %size - jnz L(oop) - movl %ebp, %eax - - popl %s2_limb - cfi_adjust_cfa_offset (-4) - cfi_restore (s2_limb) - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %s1_ptr - cfi_adjust_cfa_offset (-4) - cfi_restore (s1_ptr) - popl %res_ptr - cfi_adjust_cfa_offset (-4) - cfi_restore (res_ptr) - - ret -#undef size -END (__mpn_mul_1) diff --git a/sysdeps/i386/nptl/Makefile b/sysdeps/i386/nptl/Makefile deleted file mode 100644 index 2c61b352eb..0000000000 --- a/sysdeps/i386/nptl/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (C) 2002-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif - -ifeq ($(subdir),nptl) -CFLAGS-pthread_create.c += -mpreferred-stack-boundary=4 -CFLAGS-tst-align.c += -mpreferred-stack-boundary=4 -CFLAGS-tst-align2.c += -mpreferred-stack-boundary=4 -endif diff --git a/sysdeps/i386/nptl/pthread_spin_init.c b/sysdeps/i386/nptl/pthread_spin_init.c deleted file mode 100644 index a1205b9698..0000000000 --- a/sysdeps/i386/nptl/pthread_spin_init.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Not needed. pthread_spin_init is an alias for pthread_spin_unlock. */ diff --git a/sysdeps/i386/nptl/pthread_spin_lock.S b/sysdeps/i386/nptl/pthread_spin_lock.S deleted file mode 100644 index 160244b7a8..0000000000 --- a/sysdeps/i386/nptl/pthread_spin_lock.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .globl pthread_spin_lock - .type pthread_spin_lock,@function - .align 16 -pthread_spin_lock: - mov 4(%esp), %eax -1: LOCK - decl 0(%eax) - jne 2f - xor %eax, %eax - ret - - .align 16 -2: rep - nop - cmpl $0, 0(%eax) - jg 1b - jmp 2b - .size pthread_spin_lock,.-pthread_spin_lock diff --git a/sysdeps/i386/nptl/pthread_spin_unlock.S b/sysdeps/i386/nptl/pthread_spin_unlock.S deleted file mode 100644 index b6636ae8d7..0000000000 --- a/sysdeps/i386/nptl/pthread_spin_unlock.S +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - .globl pthread_spin_unlock - .type pthread_spin_unlock,@function - .align 16 -pthread_spin_unlock: - movl 4(%esp), %eax - movl $1, (%eax) - xorl %eax, %eax - ret - .size pthread_spin_unlock,.-pthread_spin_unlock - - /* The implementation of pthread_spin_init is identical. */ - .globl pthread_spin_init -pthread_spin_init = pthread_spin_unlock diff --git a/sysdeps/i386/nptl/pthreaddef.h b/sysdeps/i386/nptl/pthreaddef.h deleted file mode 100644 index 54abccd11b..0000000000 --- a/sysdeps/i386/nptl/pthreaddef.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. SSE requires 16 - bytes. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB. - - Some processors such as Intel Atom pay a big penalty on every - access using a segment override if that segment's base is not - aligned to the size of a cache line. (See Intel 64 and IA-32 - Architectures Optimization Reference Manual, section 13.3.3.3, - "Segment Base".) On such machines, a cache line is 64 bytes. */ -#define TCB_ALIGNMENT 64 - - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME __builtin_frame_address (0) diff --git a/sysdeps/i386/nptl/tcb-offsets.sym b/sysdeps/i386/nptl/tcb-offsets.sym deleted file mode 100644 index 695a810386..0000000000 --- a/sysdeps/i386/nptl/tcb-offsets.sym +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include -#include - -RESULT offsetof (struct pthread, result) -TID offsetof (struct pthread, tid) -CANCELHANDLING offsetof (struct pthread, cancelhandling) -CLEANUP_JMP_BUF offsetof (struct pthread, cleanup_jmp_buf) -MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads) -SYSINFO_OFFSET offsetof (tcbhead_t, sysinfo) -CLEANUP offsetof (struct pthread, cleanup) -CLEANUP_PREV offsetof (struct _pthread_cleanup_buffer, __prev) -MUTEX_FUTEX offsetof (pthread_mutex_t, __data.__lock) -POINTER_GUARD offsetof (tcbhead_t, pointer_guard) -#ifndef __ASSUME_PRIVATE_FUTEX -PRIVATE_FUTEX offsetof (tcbhead_t, private_futex) -#endif diff --git a/sysdeps/i386/nptl/tls.h b/sysdeps/i386/nptl/tls.h deleted file mode 100644 index f9a6b11ecf..0000000000 --- a/sysdeps/i386/nptl/tls.h +++ /dev/null @@ -1,435 +0,0 @@ -/* Definition for thread-local data handling. nptl/i386 version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TLS_H -#define _TLS_H 1 - -#include -#ifndef __ASSEMBLER__ -# include -# include -# include -# include -# include -# include /* For cast_to_integer. */ -# include -# include - -typedef struct -{ - void *tcb; /* Pointer to the TCB. Not necessarily the - thread descriptor used by libpthread. */ - dtv_t *dtv; - void *self; /* Pointer to the thread descriptor. */ - int multiple_threads; - uintptr_t sysinfo; - uintptr_t stack_guard; - uintptr_t pointer_guard; - int gscope_flag; -#ifndef __ASSUME_PRIVATE_FUTEX - int private_futex; -#else - int __glibc_reserved1; -#endif - /* Reservation of some values for the TM ABI. */ - void *__private_tm[4]; - /* GCC split stack support. */ - void *__private_ss; -} tcbhead_t; - -# define TLS_MULTIPLE_THREADS_IN_TCB 1 - -#else /* __ASSEMBLER__ */ -# include -#endif - - -/* Alignment requirement for the stack. For IA-32 this is governed by - the SSE memory functions. */ -#define STACK_ALIGN 16 - -#ifndef __ASSEMBLER__ -/* Get system call information. */ -# include - -/* The old way: using LDT. */ - -/* Structure passed to `modify_ldt', 'set_thread_area', and 'clone' calls. */ -struct user_desc -{ - unsigned int entry_number; - unsigned long int base_addr; - unsigned int limit; - unsigned int seg_32bit:1; - unsigned int contents:2; - unsigned int read_exec_only:1; - unsigned int limit_in_pages:1; - unsigned int seg_not_present:1; - unsigned int useable:1; - unsigned int empty:25; -}; - -/* Initializing bit fields is slow. We speed it up by using a union. */ -union user_desc_init -{ - struct user_desc desc; - unsigned int vals[4]; -}; - - -/* This is the size of the initial TCB. Can't be just sizeof (tcbhead_t), - because NPTL getpid, __libc_alloca_cutoff etc. need (almost) the whole - struct pthread even when not linked with -lpthread. */ -# define TLS_INIT_TCB_SIZE sizeof (struct pthread) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE sizeof (struct pthread) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* The TCB can have any size and the memory following the address the - thread pointer points to is unspecified. Allocate the TCB there. */ -# define TLS_TCB_AT_TP 1 -# define TLS_DTV_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include - - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(descr, dtvp) \ - ((tcbhead_t *) (descr))->dtv = (dtvp) + 1 - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtvp) \ - ({ struct pthread *__pd; \ - THREAD_SETMEM (__pd, header.dtv, (dtvp)); }) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(descr) \ - (((tcbhead_t *) (descr))->dtv) - -/* Macros to load from and store into segment registers. */ -# ifndef TLS_GET_GS -# define TLS_GET_GS() \ - ({ int __seg; __asm ("movw %%gs, %w0" : "=q" (__seg)); __seg & 0xffff; }) -# endif -# ifndef TLS_SET_GS -# define TLS_SET_GS(val) \ - __asm ("movw %w0, %%gs" :: "q" (val)) -# endif - -#ifdef NEED_DL_SYSINFO -# define INIT_SYSINFO \ - _head->sysinfo = GLRO(dl_sysinfo) -# define SETUP_THREAD_SYSINFO(pd) \ - ((pd)->header.sysinfo = THREAD_GETMEM (THREAD_SELF, header.sysinfo)) -# define CHECK_THREAD_SYSINFO(pd) \ - assert ((pd)->header.sysinfo == THREAD_GETMEM (THREAD_SELF, header.sysinfo)) -#else -# define INIT_SYSINFO -#endif - -#ifndef LOCK_PREFIX -# ifdef UP -# define LOCK_PREFIX /* nothing */ -# else -# define LOCK_PREFIX "lock;" -# endif -#endif - -static inline void __attribute__ ((unused, always_inline)) -tls_fill_user_desc (union user_desc_init *desc, - unsigned int entry_number, - void *pd) -{ - desc->vals[0] = entry_number; - /* The 'base_addr' field. Pointer to the TCB. */ - desc->vals[1] = (unsigned long int) pd; - /* The 'limit' field. We use 4GB which is 0xfffff pages. */ - desc->vals[2] = 0xfffff; - /* Collapsed value of the bitfield: - .seg_32bit = 1 - .contents = 0 - .read_exec_only = 0 - .limit_in_pages = 1 - .seg_not_present = 0 - .useable = 1 */ - desc->vals[3] = 0x51; -} - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(thrdescr) \ - ({ void *_thrdescr = (thrdescr); \ - tcbhead_t *_head = _thrdescr; \ - union user_desc_init _segdescr; \ - int _result; \ - \ - _head->tcb = _thrdescr; \ - /* For now the thread descriptor is at the same address. */ \ - _head->self = _thrdescr; \ - /* New syscall handling support. */ \ - INIT_SYSINFO; \ - \ - /* Let the kernel pick a value for the 'entry_number' field. */ \ - tls_fill_user_desc (&_segdescr, -1, _thrdescr); \ - \ - /* Install the TLS. */ \ - INTERNAL_SYSCALL_DECL (err); \ - _result = INTERNAL_SYSCALL (set_thread_area, err, 1, &_segdescr.desc); \ - \ - if (_result == 0) \ - /* We know the index in the GDT, now load the segment register. \ - The use of the GDT is described by the value 3 in the lower \ - three bits of the segment descriptor value. \ - \ - Note that we have to do this even if the numeric value of \ - the descriptor does not change. Loading the segment register \ - causes the segment information from the GDT to be loaded \ - which is necessary since we have changed it. */ \ - TLS_SET_GS (_segdescr.desc.entry_number * 8 + 3); \ - \ - _result == 0 ? NULL \ - : "set_thread_area failed when setting up thread-local storage\n"; }) - -# define TLS_DEFINE_INIT_TP(tp, pd) \ - union user_desc_init _segdescr; \ - /* Find the 'entry_number' field that the kernel selected in TLS_INIT_TP. \ - The first three bits of the segment register value select the GDT, \ - ignore them. We get the index from the value of the %gs register in \ - the current thread. */ \ - tls_fill_user_desc (&_segdescr, TLS_GET_GS () >> 3, pd); \ - const struct user_desc *tp = &_segdescr.desc - - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - ({ struct pthread *__pd; \ - THREAD_GETMEM (__pd, header.dtv); }) - - -/* Return the thread descriptor for the current thread. - - The contained asm must *not* be marked volatile since otherwise - assignments like - pthread_descr self = thread_self(); - do not get optimized away. */ -# define THREAD_SELF \ - ({ struct pthread *__self; \ - asm ("movl %%gs:%c1,%0" : "=r" (__self) \ - : "i" (offsetof (struct pthread, header.self))); \ - __self;}) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF \ - REGISTER_THREAD_AREA (32, offsetof (struct user_regs_struct, xgs), 3) \ - REGISTER_THREAD_AREA (64, 26 * 8, 3) /* x86-64's user_regs_struct->gs */ - - -/* Read member of the thread descriptor directly. */ -# define THREAD_GETMEM(descr, member) \ - ({ __typeof (descr->member) __value; \ - if (sizeof (__value) == 1) \ - asm volatile ("movb %%gs:%P2,%b0" \ - : "=q" (__value) \ - : "0" (0), "i" (offsetof (struct pthread, member))); \ - else if (sizeof (__value) == 4) \ - asm volatile ("movl %%gs:%P1,%0" \ - : "=r" (__value) \ - : "i" (offsetof (struct pthread, member))); \ - else \ - { \ - if (sizeof (__value) != 8) \ - /* There should not be any value with a size other than 1, \ - 4 or 8. */ \ - abort (); \ - \ - asm volatile ("movl %%gs:%P1,%%eax\n\t" \ - "movl %%gs:%P2,%%edx" \ - : "=A" (__value) \ - : "i" (offsetof (struct pthread, member)), \ - "i" (offsetof (struct pthread, member) + 4)); \ - } \ - __value; }) - - -/* Same as THREAD_GETMEM, but the member offset can be non-constant. */ -# define THREAD_GETMEM_NC(descr, member, idx) \ - ({ __typeof (descr->member[0]) __value; \ - if (sizeof (__value) == 1) \ - asm volatile ("movb %%gs:%P2(%3),%b0" \ - : "=q" (__value) \ - : "0" (0), "i" (offsetof (struct pthread, member[0])), \ - "r" (idx)); \ - else if (sizeof (__value) == 4) \ - asm volatile ("movl %%gs:%P1(,%2,4),%0" \ - : "=r" (__value) \ - : "i" (offsetof (struct pthread, member[0])), \ - "r" (idx)); \ - else \ - { \ - if (sizeof (__value) != 8) \ - /* There should not be any value with a size other than 1, \ - 4 or 8. */ \ - abort (); \ - \ - asm volatile ("movl %%gs:%P1(,%2,8),%%eax\n\t" \ - "movl %%gs:4+%P1(,%2,8),%%edx" \ - : "=&A" (__value) \ - : "i" (offsetof (struct pthread, member[0])), \ - "r" (idx)); \ - } \ - __value; }) - - - -/* Set member of the thread descriptor directly. */ -# define THREAD_SETMEM(descr, member, value) \ - ({ if (sizeof (descr->member) == 1) \ - asm volatile ("movb %b0,%%gs:%P1" : \ - : "iq" (value), \ - "i" (offsetof (struct pthread, member))); \ - else if (sizeof (descr->member) == 4) \ - asm volatile ("movl %0,%%gs:%P1" : \ - : "ir" (value), \ - "i" (offsetof (struct pthread, member))); \ - else \ - { \ - if (sizeof (descr->member) != 8) \ - /* There should not be any value with a size other than 1, \ - 4 or 8. */ \ - abort (); \ - \ - asm volatile ("movl %%eax,%%gs:%P1\n\t" \ - "movl %%edx,%%gs:%P2" : \ - : "A" ((uint64_t) cast_to_integer (value)), \ - "i" (offsetof (struct pthread, member)), \ - "i" (offsetof (struct pthread, member) + 4)); \ - }}) - - -/* Same as THREAD_SETMEM, but the member offset can be non-constant. */ -# define THREAD_SETMEM_NC(descr, member, idx, value) \ - ({ if (sizeof (descr->member[0]) == 1) \ - asm volatile ("movb %b0,%%gs:%P1(%2)" : \ - : "iq" (value), \ - "i" (offsetof (struct pthread, member)), \ - "r" (idx)); \ - else if (sizeof (descr->member[0]) == 4) \ - asm volatile ("movl %0,%%gs:%P1(,%2,4)" : \ - : "ir" (value), \ - "i" (offsetof (struct pthread, member)), \ - "r" (idx)); \ - else \ - { \ - if (sizeof (descr->member[0]) != 8) \ - /* There should not be any value with a size other than 1, \ - 4 or 8. */ \ - abort (); \ - \ - asm volatile ("movl %%eax,%%gs:%P1(,%2,8)\n\t" \ - "movl %%edx,%%gs:4+%P1(,%2,8)" : \ - : "A" ((uint64_t) cast_to_integer (value)), \ - "i" (offsetof (struct pthread, member)), \ - "r" (idx)); \ - }}) - - -/* Atomic compare and exchange on TLS, returning old value. */ -#define THREAD_ATOMIC_CMPXCHG_VAL(descr, member, newval, oldval) \ - ({ __typeof (descr->member) __ret; \ - __typeof (oldval) __old = (oldval); \ - if (sizeof (descr->member) == 4) \ - asm volatile (LOCK_PREFIX "cmpxchgl %2, %%gs:%P3" \ - : "=a" (__ret) \ - : "0" (__old), "r" (newval), \ - "i" (offsetof (struct pthread, member))); \ - else \ - /* Not necessary for other sizes in the moment. */ \ - abort (); \ - __ret; }) - - -/* Atomic logical and. */ -#define THREAD_ATOMIC_AND(descr, member, val) \ - (void) ({ if (sizeof ((descr)->member) == 4) \ - asm volatile (LOCK_PREFIX "andl %1, %%gs:%P0" \ - :: "i" (offsetof (struct pthread, member)), \ - "ir" (val)); \ - else \ - /* Not necessary for other sizes in the moment. */ \ - abort (); }) - - -/* Atomic set bit. */ -#define THREAD_ATOMIC_BIT_SET(descr, member, bit) \ - (void) ({ if (sizeof ((descr)->member) == 4) \ - asm volatile (LOCK_PREFIX "orl %1, %%gs:%P0" \ - :: "i" (offsetof (struct pthread, member)), \ - "ir" (1 << (bit))); \ - else \ - /* Not necessary for other sizes in the moment. */ \ - abort (); }) - - -/* Set the stack guard field in TCB head. */ -#define THREAD_SET_STACK_GUARD(value) \ - THREAD_SETMEM (THREAD_SELF, header.stack_guard, value) -#define THREAD_COPY_STACK_GUARD(descr) \ - ((descr)->header.stack_guard \ - = THREAD_GETMEM (THREAD_SELF, header.stack_guard)) - - -/* Set the pointer guard field in the TCB head. */ -#define THREAD_SET_POINTER_GUARD(value) \ - THREAD_SETMEM (THREAD_SELF, header.pointer_guard, value) -#define THREAD_COPY_POINTER_GUARD(descr) \ - ((descr)->header.pointer_guard \ - = THREAD_GETMEM (THREAD_SELF, header.pointer_guard)) - - -/* Get and set the global scope generation counter in the TCB head. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res; \ - asm volatile ("xchgl %0, %%gs:%P1" \ - : "=r" (__res) \ - : "i" (offsetof (struct pthread, header.gscope_flag)), \ - "0" (THREAD_GSCOPE_FLAG_UNUSED)); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - THREAD_SETMEM (THREAD_SELF, header.gscope_flag, THREAD_GSCOPE_FLAG_USED) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/i386/preconfigure b/sysdeps/i386/preconfigure deleted file mode 100644 index c8fefd1bff..0000000000 --- a/sysdeps/i386/preconfigure +++ /dev/null @@ -1,5 +0,0 @@ -# preconfigure fragment for i386. - -case "$machine" in -i[4567]86) base_machine=i386 machine=i386/$machine ;; -esac diff --git a/sysdeps/i386/pthread_spin_trylock.S b/sysdeps/i386/pthread_spin_trylock.S deleted file mode 100644 index f71a9fcb2d..0000000000 --- a/sysdeps/i386/pthread_spin_trylock.S +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - -#ifdef UP -# define LOCK -#else -# define LOCK lock -#endif - - .globl pthread_spin_trylock - .type pthread_spin_trylock,@function - .align 16 -pthread_spin_trylock: - movl 4(%esp), %edx - movl $1, %eax - xorl %ecx, %ecx - LOCK - cmpxchgl %ecx, (%edx) - movl $EBUSY, %eax -#ifdef HAVE_CMOV - cmovel %ecx, %eax -#else - jne 0f - movl %ecx, %eax -0: -#endif - ret - .size pthread_spin_trylock,.-pthread_spin_trylock diff --git a/sysdeps/i386/rawmemchr.S b/sysdeps/i386/rawmemchr.S deleted file mode 100644 index 246ec3f18e..0000000000 --- a/sysdeps/i386/rawmemchr.S +++ /dev/null @@ -1,222 +0,0 @@ -/* rawmemchr (str, ch) -- Return pointer to first occurrence of CH in STR. - For Intel 80x86, x>=3. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper - Optimised a little by Alan Modra - This version is developed using the same algorithm as the fast C - version which carries the following introduction: - Based on strlen implementation by Torbjorn Granlund (tege@sics.se), - with help from Dan Sahlin (dan@sics.se) and - commentary by Jim Blandy (jimb@ai.mit.edu); - adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), - and implemented by Roland McGrath (roland@ai.mit.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+4 /* space for 1 saved reg */ -#define RTN PARMS -#define STR RTN -#define CHR STR+4 - - .text -ENTRY (__rawmemchr) - - /* Save callee-safe register used in this function. */ - pushl %edi - cfi_adjust_cfa_offset (4) - cfi_rel_offset (edi, 0) - - /* Load parameters into registers. */ - movl STR(%esp), %eax - movl CHR(%esp), %edx - - /* At the moment %edx contains C. What we need for the - algorithm is C in all bytes of the dword. Avoid - operations on 16 bit words because these require an - prefix byte (and one more cycle). */ - movb %dl, %dh /* Now it is 0|0|c|c */ - movl %edx, %ecx - shll $16, %edx /* Now c|c|0|0 */ - movw %cx, %dx /* And finally c|c|c|c */ - - /* Better performance can be achieved if the word (32 - bit) memory access is aligned on a four-byte-boundary. - So process first bytes one by one until boundary is - reached. Don't use a loop for better performance. */ - - testb $3, %al /* correctly aligned ? */ - je L(1) /* yes => begin loop */ - cmpb %dl, (%eax) /* compare byte */ - je L(9) /* target found => return */ - incl %eax /* increment source pointer */ - - testb $3, %al /* correctly aligned ? */ - je L(1) /* yes => begin loop */ - cmpb %dl, (%eax) /* compare byte */ - je L(9) /* target found => return */ - incl %eax /* increment source pointer */ - - testb $3, %al /* correctly aligned ? */ - je L(1) /* yes => begin loop */ - cmpb %dl, (%eax) /* compare byte */ - je L(9) /* target found => return */ - incl %eax /* increment source pointer */ - - /* We exit the loop if adding MAGIC_BITS to LONGWORD fails to - change any of the hole bits of LONGWORD. - - 1) Is this safe? Will it catch all the zero bytes? - Suppose there is a byte with all zeros. Any carry bits - propagating from its left will fall into the hole at its - least significant bit and stop. Since there will be no - carry from its most significant bit, the LSB of the - byte to the left will be unchanged, and the zero will be - detected. - - 2) Is this worthwhile? Will it ignore everything except - zero bytes? Suppose every byte of LONGWORD has a bit set - somewhere. There will be a carry into bit 8. If bit 8 - is set, this will carry into bit 16. If bit 8 is clear, - one of bits 9-15 must be set, so there will be a carry - into bit 16. Similarly, there will be a carry into bit - 24. If one of bits 24-31 is set, there will be a carry - into bit 32 (=carry flag), so all of the hole bits will - be changed. - - 3) But wait! Aren't we looking for C, not zero? - Good point. So what we do is XOR LONGWORD with a longword, - each of whose bytes is C. This turns each byte that is C - into a zero. */ - - - /* Each round the main loop processes 16 bytes. */ - ALIGN (4) - -L(1): movl (%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - - /* According to the algorithm we had to reverse the effect of the - XOR first and then test the overflow bits. But because the - following XOR would destroy the carry flag and it would (in a - representation with more than 32 bits) not alter then last - overflow, we can now test this condition. If no carry is signaled - no overflow must have occurred in the last byte => it was 0. */ - jnc L(8) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - - /* Now test for the other three overflow bits. */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - - /* If at least one byte of the word is C we don't get 0 in %edi. */ - jnz L(8) /* found it => return pointer */ - - /* This process is unfolded four times for better performance. - we don't increment the source pointer each time. Instead we - use offsets and increment by 16 in each run of the loop. But - before probing for the matching byte we need some extra code - (following LL(13) below). Even the len can be compared with - constants instead of decrementing each time. */ - - movl 4(%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(7) /* highest byte is C => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(7) /* found it => return pointer */ - - movl 8(%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(6) /* highest byte is C => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(6) /* found it => return pointer */ - - movl 12(%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(5) /* highest byte is C => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(5) /* found it => return pointer */ - - /* Adjust both counters for a full round, i.e. 16 bytes. */ - addl $16, %eax - jmp L(1) - /* add missing source pointer increments */ -L(5): addl $4, %eax -L(6): addl $4, %eax -L(7): addl $4, %eax - - /* Test for the matching byte in the word. %ecx contains a NUL - char in the byte which originally was the byte we are looking - at. */ -L(8): testb %cl, %cl /* test first byte in dword */ - jz L(9) /* if zero => return pointer */ - incl %eax /* increment source pointer */ - - testb %ch, %ch /* test second byte in dword */ - jz L(9) /* if zero => return pointer */ - incl %eax /* increment source pointer */ - - testl $0xff0000, %ecx /* test third byte in dword */ - jz L(9) /* if zero => return pointer */ - incl %eax /* increment source pointer */ - - /* No further test needed we we know it is one of the four bytes. */ - -L(9): - popl %edi /* pop saved register */ - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (__rawmemchr) - -libc_hidden_def (__rawmemchr) -weak_alias (__rawmemchr, rawmemchr) diff --git a/sysdeps/i386/rshift.S b/sysdeps/i386/rshift.S deleted file mode 100644 index cf179052b5..0000000000 --- a/sysdeps/i386/rshift.S +++ /dev/null @@ -1,105 +0,0 @@ -/* i80386 __mpn_rshift -- - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define PARMS 4+12 /* space for 3 saved regs */ -#define RES PARMS -#define S RES+4 -#define SIZE S+4 -#define CNT SIZE+4 - - .text -ENTRY (__mpn_rshift) - - pushl %edi - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - pushl %ebx - cfi_adjust_cfa_offset (4) - - movl RES(%esp),%edi - cfi_rel_offset (edi, 8) - movl S(%esp),%esi - cfi_rel_offset (esi, 4) - movl SIZE(%esp),%edx - movl CNT(%esp),%ecx - leal -4(%edi,%edx,4),%edi - leal (%esi,%edx,4),%esi - negl %edx - - movl (%esi,%edx,4),%ebx /* read least significant limb */ - cfi_rel_offset (ebx, 0) - cfi_remember_state - xorl %eax,%eax - shrdl %cl,%ebx,%eax /* compute carry limb */ - incl %edx - jz L(end) - pushl %eax /* push carry limb onto stack */ - cfi_adjust_cfa_offset (4) - testb $1,%dl - jnz L(1) /* enter loop in the middle */ - movl %ebx,%eax - - ALIGN (3) -L(oop): movl (%esi,%edx,4),%ebx /* load next higher limb */ - shrdl %cl,%ebx,%eax /* compute result limb */ - movl %eax,(%edi,%edx,4) /* store it */ - incl %edx -L(1): movl (%esi,%edx,4),%eax - shrdl %cl,%eax,%ebx - movl %ebx,(%edi,%edx,4) - incl %edx - jnz L(oop) - - shrl %cl,%eax /* compute most significant limb */ - movl %eax,(%edi) /* store it */ - - popl %eax /* pop carry limb */ - cfi_adjust_cfa_offset (-4) - - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret - - cfi_restore_state -L(end): shrl %cl,%ebx /* compute most significant limb */ - movl %ebx,(%edi) /* store it */ - - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (__mpn_rshift) diff --git a/sysdeps/i386/setfpucw.c b/sysdeps/i386/setfpucw.c deleted file mode 100644 index 40b995f18a..0000000000 --- a/sysdeps/i386/setfpucw.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Set the FPU control word for x86. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -void -__setfpucw (fpu_control_t set) -{ - fpu_control_t cw; - - /* Fetch the current control word. */ - __asm__ ("fnstcw %0" : "=m" (*&cw)); - - /* Preserve the reserved bits, and set the rest as the user - specified (or the default, if the user gave zero). */ - cw &= _FPU_RESERVED; - cw |= set & ~_FPU_RESERVED; - - __asm__ ("fldcw %0" : : "m" (*&cw)); - - /* If the CPU supports SSE, we set the MXCSR as well. */ - if (HAS_CPU_FEATURE (SSE)) - { - unsigned int xnew_exc; - - /* Get the current MXCSR. */ - __asm__ ("stmxcsr %0" : "=m" (*&xnew_exc)); - - xnew_exc &= ~((0xc00 << 3) | (FE_ALL_EXCEPT << 7)); - xnew_exc |= ((set & 0xc00) << 3) | ((set & FE_ALL_EXCEPT) << 7); - - __asm__ ("ldmxcsr %0" : : "m" (*&xnew_exc)); - } -} diff --git a/sysdeps/i386/setjmp.S b/sysdeps/i386/setjmp.S deleted file mode 100644 index 738a899e8b..0000000000 --- a/sysdeps/i386/setjmp.S +++ /dev/null @@ -1,58 +0,0 @@ -/* setjmp for i386. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#define PARMS 4 /* no space for saved regs */ -#define JMPBUF PARMS -#define SIGMSK JMPBUF+4 - -ENTRY (__sigsetjmp) - - movl JMPBUF(%esp), %eax - - /* Save registers. */ - movl %ebx, (JB_BX*4)(%eax) - movl %esi, (JB_SI*4)(%eax) - movl %edi, (JB_DI*4)(%eax) - leal JMPBUF(%esp), %ecx /* Save SP as it will be after we return. */ -#ifdef PTR_MANGLE - PTR_MANGLE (%ecx) -#endif - movl %ecx, (JB_SP*4)(%eax) - movl 0(%esp), %ecx /* Save PC we are returning to now. */ - LIBC_PROBE (setjmp, 3, 4@%eax, -4@SIGMSK(%esp), 4@%ecx) -#ifdef PTR_MANGLE - PTR_MANGLE (%ecx) -#endif - movl %ecx, (JB_PC*4)(%eax) - movl %ebp, (JB_BP*4)(%eax) /* Save caller's frame pointer. */ - -#if IS_IN (rtld) - /* In ld.so we never save the signal mask. */ - xorl %eax, %eax - ret -#else - /* Make a tail call to __sigjmp_save; it takes the same args. */ - jmp __sigjmp_save -#endif -END (__sigsetjmp) -hidden_def (__sigsetjmp) diff --git a/sysdeps/i386/stackguard-macros.h b/sysdeps/i386/stackguard-macros.h deleted file mode 100644 index 039762927c..0000000000 --- a/sysdeps/i386/stackguard-macros.h +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#define STACK_CHK_GUARD \ - ({ uintptr_t x; asm ("movl %%gs:0x14, %0" : "=r" (x)); x; }) - -#define POINTER_CHK_GUARD \ - ({ \ - uintptr_t x; \ - asm ("movl %%gs:%c1, %0" : "=r" (x) \ - : "i" (offsetof (tcbhead_t, pointer_guard))); \ - x; \ - }) diff --git a/sysdeps/i386/stackinfo.h b/sysdeps/i386/stackinfo.h deleted file mode 100644 index ba17867d3a..0000000000 --- a/sysdeps/i386/stackinfo.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* On x86 the stack grows down. */ -#define _STACK_GROWS_DOWN 1 - -/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK is - * present, but it is presumed absent. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X) - -/* Access to the stack pointer. The macros are used in alloca_account - for which they need to act as barriers as well, hence the additional - (unnecessary) parameters. */ -#define stackinfo_get_sp() \ - ({ void *p__; asm volatile ("mov %%esp, %0" : "=r" (p__)); p__; }) -#define stackinfo_sub_sp(ptr) \ - ({ ptrdiff_t d__; \ - asm volatile ("sub %%esp, %0" : "=r" (d__) : "0" (ptr)); \ - d__; }) - -#endif /* stackinfo.h */ diff --git a/sysdeps/i386/start.S b/sysdeps/i386/start.S deleted file mode 100644 index ccb1e2b38f..0000000000 --- a/sysdeps/i386/start.S +++ /dev/null @@ -1,139 +0,0 @@ -/* Startup code compliant to the ELF i386 ABI. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This is the canonical entry point, usually the first thing in the text - segment. The SVR4/i386 ABI (pages 3-31, 3-32) says that when the entry - point runs, most registers' values are unspecified, except for: - - %edx Contains a function pointer to be registered with `atexit'. - This is how the dynamic linker arranges to have DT_FINI - functions called for shared libraries that have been loaded - before this code runs. - - %esp The stack contains the arguments and environment: - 0(%esp) argc - 4(%esp) argv[0] - ... - (4*argc)(%esp) NULL - (4*(argc+1))(%esp) envp[0] - ... - NULL -*/ - - .text - .globl _start - .type _start,@function -_start: - /* Clear the frame pointer. The ABI suggests this be done, to mark - the outermost frame obviously. */ - xorl %ebp, %ebp - - /* Extract the arguments as encoded on the stack and set up - the arguments for `main': argc, argv. envp will be determined - later in __libc_start_main. */ - popl %esi /* Pop the argument count. */ - movl %esp, %ecx /* argv starts just at the current stack top.*/ - - /* Before pushing the arguments align the stack to a 16-byte - (SSE needs 16-byte alignment) boundary to avoid penalties from - misaligned accesses. Thanks to Edward Seidl - for pointing this out. */ - andl $0xfffffff0, %esp - pushl %eax /* Push garbage because we allocate - 28 more bytes. */ - - /* Provide the highest stack address to the user code (for stacks - which grow downwards). */ - pushl %esp - - pushl %edx /* Push address of the shared library - termination function. */ - -#ifdef SHARED - /* Load PIC register. */ - call 1f - addl $_GLOBAL_OFFSET_TABLE_, %ebx - - /* Push address of our own entry points to .fini and .init. */ - leal __libc_csu_fini@GOTOFF(%ebx), %eax - pushl %eax - leal __libc_csu_init@GOTOFF(%ebx), %eax - pushl %eax - - pushl %ecx /* Push second argument: argv. */ - pushl %esi /* Push first argument: argc. */ - - pushl main@GOT(%ebx) - - /* Call the user's main function, and exit with its value. - But let the libc call main. */ - call __libc_start_main@PLT -#else - /* Push address of our own entry points to .fini and .init. */ - pushl $__libc_csu_fini - pushl $__libc_csu_init - - pushl %ecx /* Push second argument: argv. */ - pushl %esi /* Push first argument: argc. */ - - pushl $main - - /* Call the user's main function, and exit with its value. - But let the libc call main. */ - call __libc_start_main -#endif - - hlt /* Crash if somehow `exit' does return. */ - -#ifdef SHARED -1: movl (%esp), %ebx - ret -#endif - -/* To fulfill the System V/i386 ABI we need this symbol. Yuck, it's so - meaningless since we don't support machines < 80386. */ - .section .rodata - .globl _fp_hw -_fp_hw: .long 3 - .size _fp_hw, 4 - .type _fp_hw,@object - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start diff --git a/sysdeps/i386/stpcpy.S b/sysdeps/i386/stpcpy.S deleted file mode 100644 index d9981b677b..0000000000 --- a/sysdeps/i386/stpcpy.S +++ /dev/null @@ -1,88 +0,0 @@ -/* Copy SRC to DEST returning the address of the terminating '\0' in DEST. - For Intel 80x86, x>=3. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper (drepper@gnu.ai.mit.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This function is defined neither in ANSI nor POSIX standards but is - also not invented here. */ - -#include -#include "asm-syntax.h" - -#define PARMS 4 /* no space for saved regs */ -#define RTN PARMS -#define DEST RTN -#define SRC DEST+4 - - .text -ENTRY (__stpcpy) - - movl DEST(%esp), %eax - movl SRC(%esp), %ecx - subl %eax, %ecx /* magic: reduce number of loop variants - to one using addressing mode */ - - /* Here we would like to write - - subl $4, %eax - ALIGN (4) - - but the assembler is too smart and optimizes for the shortest - form where the number only needs one byte. But if we could - have the long form we would not need the alignment. */ - - .byte 0x81, 0xe8 /* This is `subl $0x00000004, %eax' */ - .long 0x00000004 - - /* Four times unfolded loop with only one loop counter. This - is achieved by the use of index+base addressing mode. As the - loop counter we use the destination address because this is - also the result. */ -L(1): addl $4, %eax /* increment loop counter */ - - movb (%eax,%ecx), %dl /* load current char */ - movb %dl, (%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jz L(2) /* yes, then exit */ - - movb 1(%eax,%ecx), %dl /* load current char */ - movb %dl, 1(%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jz L(3) /* yes, then exit */ - - movb 2(%eax,%ecx), %dl /* load current char */ - movb %dl, 2(%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jz L(4) /* yes, then exit */ - - movb 3(%eax,%ecx), %dl /* load current char */ - movb %dl, 3(%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jnz L(1) /* no, then continue loop */ - - incl %eax /* correct loop counter */ -L(4): incl %eax -L(3): incl %eax -L(2): - - ret -END (__stpcpy) - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/i386/stpncpy.S b/sysdeps/i386/stpncpy.S deleted file mode 100644 index 46f2aba713..0000000000 --- a/sysdeps/i386/stpncpy.S +++ /dev/null @@ -1,147 +0,0 @@ -/* copy no more than N bytes from SRC to DEST, returning the address of - the terminating '\0' in DEST. - For Intel 80x86, x>=3. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper - Some bug fixes by Alan Modra - - original wrote n+1 chars in some cases. - - stpncpy() ought to behave like strncpy() ie. not null-terminate - if limited by n. glibc-1.09 stpncpy() does this. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+4 /* space for 1 saved reg */ -#define RTN PARMS -#define DEST RTN -#define SRC DEST+4 -#define LEN SRC+4 - - .text -ENTRY (__stpncpy) - - pushl %esi - cfi_adjust_cfa_offset (4) - - movl DEST(%esp), %eax - movl SRC(%esp), %esi - cfi_rel_offset (esi, 0) - movl LEN(%esp), %ecx - - subl %eax, %esi /* magic: reduce number of loop variants - to one using addressing mode */ - jmp L(1) /* jump to loop "head" */ - - ALIGN(4) - - /* Four times unfolded loop with two loop counters. We get the - third value (the source address) by using the index+base - addressing mode. */ -L(2): movb (%eax,%esi), %dl /* load current char */ - movb %dl, (%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jz L(7) /* yes, then exit */ - - movb 1(%eax,%esi), %dl /* load current char */ - movb %dl, 1(%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jz L(6) /* yes, then exit */ - - movb 2(%eax,%esi), %dl /* load current char */ - movb %dl, 2(%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jz L(5) /* yes, then exit */ - - movb 3(%eax,%esi), %dl /* load current char */ - movb %dl, 3(%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jz L(4) /* yes, then exit */ - - addl $4, %eax /* increment loop counter for full round */ - -L(1): subl $4, %ecx /* still more than 4 bytes allowed? */ - jae L(2) /* yes, then go to start of loop */ - - /* The maximal remaining 15 bytes are not processed in a loop. */ - - addl $4, %ecx /* correct above subtraction */ - jz L(9) /* maximal allowed char reached => go to end */ - - movb (%eax,%esi), %dl /* load current char */ - movb %dl, (%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jz L(3) /* yes, then exit */ - - incl %eax /* increment pointer */ - decl %ecx /* decrement length counter */ - jz L(9) /* no more allowed => exit */ - - movb (%eax,%esi), %dl /* load current char */ - movb %dl, (%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jz L(3) /* yes, then exit */ - - incl %eax /* increment pointer */ - decl %ecx /* decrement length counter */ - jz L(9) /* no more allowed => exit */ - - movb (%eax,%esi), %dl /* load current char */ - movb %dl, (%eax) /* and store it */ - testb %dl, %dl /* was it NUL? */ - jz L(3) /* yes, then exit */ - - incl %eax /* increment pointer */ - jmp L(9) /* we don't have to test for counter underflow - because we know we had a most 3 bytes - remaining => exit */ - - /* When coming from the main loop we have to adjust the pointer. */ -L(4): decl %ecx /* decrement counter */ - incl %eax /* increment pointer */ - -L(5): decl %ecx /* increment pointer */ - incl %eax /* increment pointer */ - -L(6): decl %ecx /* increment pointer */ - incl %eax /* increment pointer */ -L(7): - - addl $3, %ecx /* correct pre-decrementation of counter - at the beginning of the loop; but why 3 - and not 4? Very simple, we have to count - the NUL char we already wrote. */ - jz L(9) /* counter is also 0 => exit */ - - /* We now have to fill the rest of the buffer with NUL. This - is done in a tricky way. Please note that the addressing mode - used below is not the same we used above. Here we use the - %ecx register. */ -L(8): - movb $0, (%ecx,%eax) /* store NUL char */ -L(3): decl %ecx /* all bytes written? */ - jnz L(8) /* no, then again */ - -L(9): popl %esi /* restore saved register content */ - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - - ret -END (__stpncpy) - -libc_hidden_def (__stpncpy) -weak_alias (__stpncpy, stpncpy) diff --git a/sysdeps/i386/strcat.S b/sysdeps/i386/strcat.S deleted file mode 100644 index 4a26b3c528..0000000000 --- a/sysdeps/i386/strcat.S +++ /dev/null @@ -1,265 +0,0 @@ -/* strcat(dest, src) -- Append SRC on the end of DEST. - For Intel 80x86, x>=4. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper . - Optimised a little by Alan Modra - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+4 /* space for 1 saved reg */ -#define RTN PARMS -#define DEST RTN -#define SRC DEST+4 - - .text -ENTRY (strcat) - - pushl %edi /* Save callee-safe register. */ - cfi_adjust_cfa_offset (4) - - movl DEST(%esp), %edx - movl SRC(%esp), %ecx - - testb $0xff, (%ecx) /* Is source string empty? */ - jz L(8) /* yes => return */ - - /* Test the first bytes separately until destination is aligned. */ - testl $3, %edx /* destination pointer aligned? */ - jz L(1) /* yes => begin scan loop */ - testb $0xff, (%edx) /* is end of string? */ - jz L(2) /* yes => start appending */ - incl %edx /* increment source pointer */ - - testl $3, %edx /* destination pointer aligned? */ - jz L(1) /* yes => begin scan loop */ - testb $0xff, (%edx) /* is end of string? */ - jz L(2) /* yes => start appending */ - incl %edx /* increment source pointer */ - - testl $3, %edx /* destination pointer aligned? */ - jz L(1) /* yes => begin scan loop */ - testb $0xff, (%edx) /* is end of string? */ - jz L(2) /* yes => start appending */ - incl %edx /* increment source pointer */ - - /* Now we are aligned. Begin scan loop. */ - jmp L(1) - - cfi_rel_offset (edi, 0) - ALIGN(4) - -L(4): addl $16,%edx /* increment destination pointer for round */ - -L(1): movl (%edx), %eax /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - - /* If you compare this with the algorithm in memchr.S you will - notice that here is an `xorl' statement missing. But you must - not forget that we are looking for C == 0 and `xorl $0, %eax' - is a no-op. */ - - addl %eax, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - - /* According to the algorithm we had to reverse the effect of the - XOR first and then test the overflow bits. But because the - following XOR would destroy the carry flag and it would (in a - representation with more than 32 bits) not alter then last - overflow, we can now test this condition. If no carry is signaled - no overflow must have occurred in the last byte => it was 0. */ - jnc L(3) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits */ - xorl %eax, %edi /* ((word^charmask)+magic)^(word^charmask) */ - - /* Now test for the other three overflow bits. */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - - /* If at least one byte of the word is C we don't get 0 in %ecx. */ - jnz L(3) - - movl 4(%edx), %eax /* get word from source */ - movl $0xfefefeff, %edi /* magic value */ - addl %eax, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(5) /* highest byte is C => stop copying */ - xorl %eax, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(5) /* one byte is NUL => stop copying */ - - movl 8(%edx), %eax /* get word from source */ - movl $0xfefefeff, %edi /* magic value */ - addl %eax, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(6) /* highest byte is C => stop copying */ - xorl %eax, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(6) /* one byte is NUL => stop copying */ - - movl 12(%edx), %eax /* get word from source */ - movl $0xfefefeff, %edi /* magic value */ - addl %eax, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(7) /* highest byte is C => stop copying */ - xorl %eax, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jz L(4) /* no byte is NUL => carry on copying */ - -L(7): addl $4, %edx /* adjust source pointer */ -L(6): addl $4, %edx -L(5): addl $4, %edx - -L(3): testb %al, %al /* is first byte NUL? */ - jz L(2) /* yes => start copying */ - incl %edx /* increment source pointer */ - - testb %ah, %ah /* is second byte NUL? */ - jz L(2) /* yes => start copying */ - incl %edx /* increment source pointer */ - - testl $0xff0000, %eax /* is third byte NUL? */ - jz L(2) /* yes => start copying */ - incl %edx /* increment source pointer */ - -L(2): subl %ecx, %edx /* reduce number of loop variants */ - - /* Now we have to align the source pointer. */ - testl $3, %ecx /* pointer correctly aligned? */ - jz L(29) /* yes => start copy loop */ - movb (%ecx), %al /* get first byte */ - movb %al, (%ecx,%edx) /* and store it */ - andb %al, %al /* is byte NUL? */ - jz L(8) /* yes => return */ - incl %ecx /* increment pointer */ - - testl $3, %ecx /* pointer correctly aligned? */ - jz L(29) /* yes => start copy loop */ - movb (%ecx), %al /* get first byte */ - movb %al, (%ecx,%edx) /* and store it */ - andb %al, %al /* is byte NUL? */ - jz L(8) /* yes => return */ - incl %ecx /* increment pointer */ - - testl $3, %ecx /* pointer correctly aligned? */ - jz L(29) /* yes => start copy loop */ - movb (%ecx), %al /* get first byte */ - movb %al, (%ecx,%edx) /* and store it */ - andb %al, %al /* is byte NUL? */ - jz L(8) /* yes => return */ - incl %ecx /* increment pointer */ - - /* Now we are aligned. */ - jmp L(29) /* start copy loop */ - - ALIGN(4) - -L(28): movl %eax, 12(%ecx,%edx)/* store word at destination */ - addl $16, %ecx /* adjust pointer for full round */ - -L(29): movl (%ecx), %eax /* get word from source */ - movl $0xfefefeff, %edi /* magic value */ - addl %eax, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(9) /* highest byte is C => stop copying */ - xorl %eax, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(9) /* one byte is NUL => stop copying */ - movl %eax, (%ecx,%edx) /* store word to destination */ - - movl 4(%ecx), %eax /* get word from source */ - movl $0xfefefeff, %edi /* magic value */ - addl %eax, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(91) /* highest byte is C => stop copying */ - xorl %eax, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(91) /* one byte is NUL => stop copying */ - movl %eax, 4(%ecx,%edx) /* store word to destination */ - - movl 8(%ecx), %eax /* get word from source */ - movl $0xfefefeff, %edi /* magic value */ - addl %eax, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(92) /* highest byte is C => stop copying */ - xorl %eax, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(92) /* one byte is NUL => stop copying */ - movl %eax, 8(%ecx,%edx) /* store word to destination */ - - movl 12(%ecx), %eax /* get word from source */ - movl $0xfefefeff, %edi /* magic value */ - addl %eax, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(93) /* highest byte is C => stop copying */ - xorl %eax, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jz L(28) /* no is NUL => carry on copying */ - -L(93): addl $4, %ecx /* adjust pointer */ -L(92): addl $4, %ecx -L(91): addl $4, %ecx - -L(9): movb %al, (%ecx,%edx) /* store first byte of last word */ - orb %al, %al /* is it NUL? */ - jz L(8) /* yes => return */ - - movb %ah, 1(%ecx,%edx) /* store second byte of last word */ - orb %ah, %ah /* is it NUL? */ - jz L(8) /* yes => return */ - - shrl $16, %eax /* make upper bytes accessible */ - movb %al, 2(%ecx,%edx) /* store third byte of last word */ - orb %al, %al /* is it NUL? */ - jz L(8) /* yes => return */ - - movb %ah, 3(%ecx,%edx) /* store fourth byte of last word */ - -L(8): movl DEST(%esp), %eax /* start address of destination is result */ - popl %edi /* restore saved register */ - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (strcat) -libc_hidden_builtin_def (strcat) diff --git a/sysdeps/i386/strchr.S b/sysdeps/i386/strchr.S deleted file mode 100644 index 6075e77882..0000000000 --- a/sysdeps/i386/strchr.S +++ /dev/null @@ -1,290 +0,0 @@ -/* strchr (str, ch) -- Return pointer to first occurrence of CH in STR. - For Intel 80x86, x>=3. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper - Some optimisations by Alan Modra - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+4 /* space for 1 saved reg */ -#define RTN PARMS -#define STR RTN -#define CHR STR+4 - - .text -ENTRY (strchr) - - pushl %edi /* Save callee-safe registers used here. */ - cfi_adjust_cfa_offset (4) - cfi_rel_offset (edi, 0) - movl STR(%esp), %eax - movl CHR(%esp), %edx - - /* At the moment %edx contains C. What we need for the - algorithm is C in all bytes of the dword. Avoid - operations on 16 bit words because these require an - prefix byte (and one more cycle). */ - movb %dl, %dh /* now it is 0|0|c|c */ - movl %edx, %ecx - shll $16, %edx /* now it is c|c|0|0 */ - movw %cx, %dx /* and finally c|c|c|c */ - - /* Before we start with the main loop we process single bytes - until the source pointer is aligned. This has two reasons: - 1. aligned 32-bit memory access is faster - and (more important) - 2. we process in the main loop 32 bit in one step although - we don't know the end of the string. But accessing at - 4-byte alignment guarantees that we never access illegal - memory if this would not also be done by the trivial - implementation (this is because all processor inherent - boundaries are multiples of 4. */ - - testb $3, %al /* correctly aligned ? */ - jz L(11) /* yes => begin loop */ - movb (%eax), %cl /* load byte in question (we need it twice) */ - cmpb %cl, %dl /* compare byte */ - je L(6) /* target found => return */ - testb %cl, %cl /* is NUL? */ - jz L(2) /* yes => return NULL */ - incl %eax /* increment pointer */ - - testb $3, %al /* correctly aligned ? */ - jz L(11) /* yes => begin loop */ - movb (%eax), %cl /* load byte in question (we need it twice) */ - cmpb %cl, %dl /* compare byte */ - je L(6) /* target found => return */ - testb %cl, %cl /* is NUL? */ - jz L(2) /* yes => return NULL */ - incl %eax /* increment pointer */ - - testb $3, %al /* correctly aligned ? */ - jz L(11) /* yes => begin loop */ - movb (%eax), %cl /* load byte in question (we need it twice) */ - cmpb %cl, %dl /* compare byte */ - je L(6) /* target found => return */ - testb %cl, %cl /* is NUL? */ - jz L(2) /* yes => return NULL */ - incl %eax /* increment pointer */ - - /* No we have reached alignment. */ - jmp L(11) /* begin loop */ - - /* We exit the loop if adding MAGIC_BITS to LONGWORD fails to - change any of the hole bits of LONGWORD. - - 1) Is this safe? Will it catch all the zero bytes? - Suppose there is a byte with all zeros. Any carry bits - propagating from its left will fall into the hole at its - least significant bit and stop. Since there will be no - carry from its most significant bit, the LSB of the - byte to the left will be unchanged, and the zero will be - detected. - - 2) Is this worthwhile? Will it ignore everything except - zero bytes? Suppose every byte of LONGWORD has a bit set - somewhere. There will be a carry into bit 8. If bit 8 - is set, this will carry into bit 16. If bit 8 is clear, - one of bits 9-15 must be set, so there will be a carry - into bit 16. Similarly, there will be a carry into bit - 24. If one of bits 24-31 is set, there will be a carry - into bit 32 (=carry flag), so all of the hole bits will - be changed. - - 3) But wait! Aren't we looking for C, not zero? - Good point. So what we do is XOR LONGWORD with a longword, - each of whose bytes is C. This turns each byte that is C - into a zero. */ - - /* Each round the main loop processes 16 bytes. */ - - ALIGN(4) - -L(1): addl $16, %eax /* adjust pointer for whole round */ - -L(11): movl (%eax), %ecx /* get word (= 4 bytes) in question */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* C */ - - /* According to the algorithm we had to reverse the effect of the - XOR first and then test the overflow bits. But because the - following XOR would destroy the carry flag and it would (in a - representation with more than 32 bits) not alter then last - overflow, we can now test this condition. If no carry is signaled - no overflow must have occurred in the last byte => it was 0. */ - jnc L(7) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - - /* Now test for the other three overflow bits. */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - - /* If at least one byte of the word is C we don't get 0 in %edi. */ - jnz L(7) /* found it => return pointer */ - - /* Now we made sure the dword does not contain the character we are - looking for. But because we deal with strings we have to check - for the end of string before testing the next dword. */ - - xorl %edx, %ecx /* restore original dword without reload */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(2) /* highest byte is NUL => return NULL */ - xorl %ecx, %edi /* (word+magic)^word */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(2) /* found NUL => return NULL */ - - movl 4(%eax), %ecx /* get word (= 4 bytes) in question */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* C */ - jnc L(71) /* highest byte is C => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(71) /* found it => return pointer */ - xorl %edx, %ecx /* restore original dword without reload */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(2) /* highest byte is NUL => return NULL */ - xorl %ecx, %edi /* (word+magic)^word */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(2) /* found NUL => return NULL */ - - movl 8(%eax), %ecx /* get word (= 4 bytes) in question */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* C */ - jnc L(72) /* highest byte is C => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(72) /* found it => return pointer */ - xorl %edx, %ecx /* restore original dword without reload */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(2) /* highest byte is NUL => return NULL */ - xorl %ecx, %edi /* (word+magic)^word */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(2) /* found NUL => return NULL */ - - movl 12(%eax), %ecx /* get word (= 4 bytes) in question */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* C */ - jnc L(73) /* highest byte is C => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(73) /* found it => return pointer */ - xorl %edx, %ecx /* restore original dword without reload */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(2) /* highest byte is NUL => return NULL */ - xorl %ecx, %edi /* (word+magic)^word */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jz L(1) /* no NUL found => restart loop */ - -L(2): /* Return NULL. */ - xorl %eax, %eax - popl %edi /* restore saved register content */ - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret - - cfi_adjust_cfa_offset (4) - cfi_rel_offset (edi, 0) -L(73): addl $4, %eax /* adjust pointer */ -L(72): addl $4, %eax -L(71): addl $4, %eax - - /* We now scan for the byte in which the character was matched. - But we have to take care of the case that a NUL char is - found before this in the dword. Note that we XORed %ecx - with the byte we're looking for, therefore the tests below look - reversed. */ - -L(7): testb %cl, %cl /* is first byte C? */ - jz L(6) /* yes => return pointer */ - cmpb %dl, %cl /* is first byte NUL? */ - je L(2) /* yes => return NULL */ - incl %eax /* it's not in the first byte */ - - testb %ch, %ch /* is second byte C? */ - jz L(6) /* yes => return pointer */ - cmpb %dl, %ch /* is second byte NUL? */ - je L(2) /* yes => return NULL? */ - incl %eax /* it's not in the second byte */ - - shrl $16, %ecx /* make upper byte accessible */ - testb %cl, %cl /* is third byte C? */ - jz L(6) /* yes => return pointer */ - cmpb %dl, %cl /* is third byte NUL? */ - je L(2) /* yes => return NULL */ - - /* It must be in the fourth byte and it cannot be NUL. */ - incl %eax - -L(6): - popl %edi /* restore saved register content */ - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (strchr) - -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/i386/strchrnul.S b/sysdeps/i386/strchrnul.S deleted file mode 100644 index 800b872c74..0000000000 --- a/sysdeps/i386/strchrnul.S +++ /dev/null @@ -1,278 +0,0 @@ -/* strchrnul (str, chr) -- Return pointer to first occurrence of CHR in STR - or the final NUL byte. - For Intel 80x86, x>=3. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper - Some optimisations by Alan Modra - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+4 /* space for 1 saved reg */ -#define RTN PARMS -#define STR RTN -#define CHR STR+4 - - .text -ENTRY (__strchrnul) - - pushl %edi /* Save callee-safe registers used here. */ - cfi_adjust_cfa_offset (4) - cfi_rel_offset (edi, 0) - - movl STR(%esp), %eax - movl CHR(%esp), %edx - - /* At the moment %edx contains CHR. What we need for the - algorithm is CHR in all bytes of the dword. Avoid - operations on 16 bit words because these require an - prefix byte (and one more cycle). */ - movb %dl, %dh /* now it is 0|0|c|c */ - movl %edx, %ecx - shll $16, %edx /* now it is c|c|0|0 */ - movw %cx, %dx /* and finally c|c|c|c */ - - /* Before we start with the main loop we process single bytes - until the source pointer is aligned. This has two reasons: - 1. aligned 32-bit memory access is faster - and (more important) - 2. we process in the main loop 32 bit in one step although - we don't know the end of the string. But accessing at - 4-byte alignment guarantees that we never access illegal - memory if this would not also be done by the trivial - implementation (this is because all processor inherent - boundaries are multiples of 4. */ - - testb $3, %al /* correctly aligned ? */ - jz L(11) /* yes => begin loop */ - movb (%eax), %cl /* load byte in question (we need it twice) */ - cmpb %cl, %dl /* compare byte */ - je L(6) /* target found => return */ - testb %cl, %cl /* is NUL? */ - jz L(6) /* yes => return NULL */ - incl %eax /* increment pointer */ - - testb $3, %al /* correctly aligned ? */ - jz L(11) /* yes => begin loop */ - movb (%eax), %cl /* load byte in question (we need it twice) */ - cmpb %cl, %dl /* compare byte */ - je L(6) /* target found => return */ - testb %cl, %cl /* is NUL? */ - jz L(6) /* yes => return NULL */ - incl %eax /* increment pointer */ - - testb $3, %al /* correctly aligned ? */ - jz L(11) /* yes => begin loop */ - movb (%eax), %cl /* load byte in question (we need it twice) */ - cmpb %cl, %dl /* compare byte */ - je L(6) /* target found => return */ - testb %cl, %cl /* is NUL? */ - jz L(6) /* yes => return NULL */ - incl %eax /* increment pointer */ - - /* No we have reached alignment. */ - jmp L(11) /* begin loop */ - - /* We exit the loop if adding MAGIC_BITS to LONGWORD fails to - change any of the hole bits of LONGWORD. - - 1) Is this safe? Will it catch all the zero bytes? - Suppose there is a byte with all zeros. Any carry bits - propagating from its left will fall into the hole at its - least significant bit and stop. Since there will be no - carry from its most significant bit, the LSB of the - byte to the left will be unchanged, and the zero will be - detected. - - 2) Is this worthwhile? Will it ignore everything except - zero bytes? Suppose every byte of LONGWORD has a bit set - somewhere. There will be a carry into bit 8. If bit 8 - is set, this will carry into bit 16. If bit 8 is clear, - one of bits 9-15 must be set, so there will be a carry - into bit 16. Similarly, there will be a carry into bit - 24. If one of bits 24-31 is set, there will be a carry - into bit 32 (=carry flag), so all of the hole bits will - be changed. - - 3) But wait! Aren't we looking for CHR, not zero? - Good point. So what we do is XOR LONGWORD with a longword, - each of whose bytes is CHR. This turns each byte that is CHR - into a zero. */ - - /* Each round the main loop processes 16 bytes. */ - - ALIGN(4) - -L(1): addl $16, %eax /* adjust pointer for whole round */ - -L(11): movl (%eax), %ecx /* get word (= 4 bytes) in question */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* CHR */ - - /* According to the algorithm we had to reverse the effect of the - XOR first and then test the overflow bits. But because the - following XOR would destroy the carry flag and it would (in a - representation with more than 32 bits) not alter then last - overflow, we can now test this condition. If no carry is signaled - no overflow must have occurred in the last byte => it was 0. */ - jnc L(7) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - - /* Now test for the other three overflow bits. */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - - /* If at least one byte of the word is CHR we don't get 0 in %edi. */ - jnz L(7) /* found it => return pointer */ - - /* Now we made sure the dword does not contain the character we are - looking for. But because we deal with strings we have to check - for the end of string before testing the next dword. */ - - xorl %edx, %ecx /* restore original dword without reload */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(7) /* highest byte is NUL => return NULL */ - xorl %ecx, %edi /* (word+magic)^word */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(7) /* found NUL => return NULL */ - - movl 4(%eax), %ecx /* get word (= 4 bytes) in question */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* CHR */ - jnc L(71) /* highest byte is CHR => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(71) /* found it => return pointer */ - xorl %edx, %ecx /* restore original dword without reload */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(71) /* highest byte is NUL => return NULL */ - xorl %ecx, %edi /* (word+magic)^word */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(71) /* found NUL => return NULL */ - - movl 8(%eax), %ecx /* get word (= 4 bytes) in question */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* CHR */ - jnc L(72) /* highest byte is CHR => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(72) /* found it => return pointer */ - xorl %edx, %ecx /* restore original dword without reload */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(72) /* highest byte is NUL => return NULL */ - xorl %ecx, %edi /* (word+magic)^word */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(72) /* found NUL => return NULL */ - - movl 12(%eax), %ecx /* get word (= 4 bytes) in question */ - xorl %edx, %ecx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* CHR */ - jnc L(73) /* highest byte is CHR => return pointer */ - xorl %ecx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(73) /* found it => return pointer */ - xorl %edx, %ecx /* restore original dword without reload */ - movl $0xfefefeff, %edi /* magic value */ - addl %ecx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(73) /* highest byte is NUL => return NULL */ - xorl %ecx, %edi /* (word+magic)^word */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jz L(1) /* no NUL found => restart loop */ - -L(73): addl $4, %eax /* adjust pointer */ -L(72): addl $4, %eax -L(71): addl $4, %eax - - /* We now scan for the byte in which the character was matched. - But we have to take care of the case that a NUL char is - found before this in the dword. */ - -L(7): testb %cl, %cl /* is first byte CHR? */ - jz L(6) /* yes => return pointer */ - cmpb %dl, %cl /* is first byte NUL? */ - je L(6) /* yes => return NULL */ - incl %eax /* it's not in the first byte */ - - testb %ch, %ch /* is second byte CHR? */ - jz L(6) /* yes => return pointer */ - cmpb %dl, %ch /* is second byte NUL? */ - je L(6) /* yes => return NULL? */ - incl %eax /* it's not in the second byte */ - - shrl $16, %ecx /* make upper byte accessible */ - testb %cl, %cl /* is third byte CHR? */ - jz L(6) /* yes => return pointer */ - cmpb %dl, %cl /* is third byte NUL? */ - je L(6) /* yes => return NULL */ - - /* It must be in the fourth byte and it cannot be NUL. */ - incl %eax - -L(6): popl %edi /* restore saved register content */ - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (__strchrnul) - -weak_alias (__strchrnul, strchrnul) diff --git a/sysdeps/i386/strcspn.S b/sysdeps/i386/strcspn.S deleted file mode 100644 index c852a3b1e5..0000000000 --- a/sysdeps/i386/strcspn.S +++ /dev/null @@ -1,240 +0,0 @@ -/* strcspn (str, ss) -- Return the length of the initial segment of STR - which contains no characters from SS. - For Intel 80x86, x>=3. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper - Bug fixes by Alan Modra - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4 /* no space for saved regs */ -#define STR PARMS -#define STOP STR+4 - - .text -ENTRY (strcspn) - - movl STR(%esp), %edx - movl STOP(%esp), %eax - - /* First we create a table with flags for all possible characters. - For the ASCII (7bit/8bit) or ISO-8859-X character sets which are - supported by the C string functions we have 256 characters. - Before inserting marks for the stop characters we clear the whole - table. The unrolled form is much faster than a loop. */ - xorl %ecx, %ecx /* %ecx = 0 !!! */ - - pushl %ecx /* make a 256 bytes long block filled with 0 */ - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl $0 /* These immediate values make the label 2 */ - cfi_adjust_cfa_offset (4) - pushl $0 /* to be aligned on a 16 byte boundary to */ - cfi_adjust_cfa_offset (4) - pushl $0 /* get a better performance of the loop. */ - cfi_adjust_cfa_offset (4) - pushl $0 - cfi_adjust_cfa_offset (4) - pushl $0 - cfi_adjust_cfa_offset (4) - pushl $0 - cfi_adjust_cfa_offset (4) - -/* For understanding the following code remember that %ecx == 0 now. - Although all the following instruction only modify %cl we always - have a correct zero-extended 32-bit value in %ecx. */ - -/* Don't change the "testb $0xff,%%cl" to "testb %%cl,%%cl". We want - longer instructions so that the next loop aligns without adding nops. */ - -L(2): movb (%eax), %cl /* get byte from stopset */ - testb %cl, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ - - movb 1(%eax), %cl /* get byte from stopset */ - testb $0xff, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ - - movb 2(%eax), %cl /* get byte from stopset */ - testb $0xff, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ - - movb 3(%eax), %cl /* get byte from stopset */ - addl $4, %eax /* increment stopset pointer */ - movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ - testb $0xff, %cl /* is NUL char? */ - jnz L(2) /* no => process next dword from stopset */ - -L(1): leal -4(%edx), %eax /* prepare loop */ - - /* We use a neat trick for the following loop. Normally we would - have to test for two termination conditions - 1. a character in the stopset was found - and - 2. the end of the string was found - But as a sign that the character is in the stopset we store its - value in the table. But the value of NUL is NUL so the loop - terminates for NUL in every case. */ - -L(3): addl $4, %eax /* adjust pointer for full loop round */ - - movb (%eax), %cl /* get byte from string */ - cmpb %cl, (%esp,%ecx) /* is it contained in stopset? */ - je L(4) /* yes => return */ - - movb 1(%eax), %cl /* get byte from string */ - cmpb %cl, (%esp,%ecx) /* is it contained in stopset? */ - je L(5) /* yes => return */ - - movb 2(%eax), %cl /* get byte from string */ - cmpb %cl, (%esp,%ecx) /* is it contained in stopset? */ - je L(6) /* yes => return */ - - movb 3(%eax), %cl /* get byte from string */ - cmpb %cl, (%esp,%ecx) /* is it contained in stopset? */ - jne L(3) /* yes => return */ - - incl %eax /* adjust pointer */ -L(6): incl %eax -L(5): incl %eax - -L(4): addl $256, %esp /* remove stopset */ - cfi_adjust_cfa_offset (-256) - subl %edx, %eax /* we have to return the number of valid - characters, so compute distance to first - non-valid character */ - ret -END (strcspn) -libc_hidden_builtin_def (strcspn) diff --git a/sysdeps/i386/string-inlines.c b/sysdeps/i386/string-inlines.c deleted file mode 100644 index d023bc3aa3..0000000000 --- a/sysdeps/i386/string-inlines.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This is to avoid PLT entries for the x86 version. */ -#define __memcpy_g __memcpy_g_internal -#define __strchr_g __strchr_g_internal -#include - -void * -(__memcpy_c) (void *d, const void *s, size_t n) -{ - return memcpy (d, s, n); -} - -void * -__memset_cc (void *s, unsigned long int pattern, size_t n) -{ - return memset (s, pattern & 0xff, n); -} -strong_alias (__memset_cc, __memset_cg) - -void * -__memset_gg (void *s, char c, size_t n) -{ - return memset (s, c, n); -} - -#ifdef __memcpy_c -# undef __memcpy_g -strong_alias (__memcpy_g_internal, __memcpy_g) -# undef __strchr_g -strong_alias (__strchr_g_internal, __strchr_g) -#endif diff --git a/sysdeps/i386/strlen.S b/sysdeps/i386/strlen.S deleted file mode 100644 index 192fadf20a..0000000000 --- a/sysdeps/i386/strlen.S +++ /dev/null @@ -1,132 +0,0 @@ -/* strlen(str) -- determine the length of the string STR. - Optimized for Intel 80x86, x>=4. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - Contributed by Ulrich Drepper . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4 /* no space for saved regs */ -#define STR PARMS - - .text -ENTRY (strlen) - - movl STR(%esp), %ecx - movl %ecx, %eax /* duplicate it */ - - andl $3, %ecx /* mask alignment bits */ - jz L(1) /* aligned => start loop */ - cmpb %ch, (%eax) /* is byte NUL? */ - je L(2) /* yes => return */ - incl %eax /* increment pointer */ - - xorl $3, %ecx /* was alignment = 3? */ - jz L(1) /* yes => now it is aligned and start loop */ - cmpb %ch, (%eax) /* is byte NUL? */ - je L(2) /* yes => return */ - addl $1, %eax /* increment pointer */ - - subl $1, %ecx /* was alignment = 2? */ - jz L(1) /* yes => now it is aligned and start loop */ - cmpb %ch, (%eax) /* is byte NUL? */ - je L(2) /* yes => return */ - -/* Don't change the above `addl $1,%eax' and `subl $1, %ecx' into `incl %eax' - and `decl %ecx' resp. The additional two byte per instruction make the - label 4 to be aligned on a 16 byte boundary with nops. - - The following `sub $15, %eax' is part of this trick, too. Together with - the next instruction (`addl $16, %eax') it is in fact a `incl %eax', just - as expected from the algorithm. But doing so has the advantage that - no jump to label 1 is necessary and so the pipeline is not flushed. */ - - subl $15, %eax /* effectively +1 */ - - -L(4): addl $16, %eax /* adjust pointer for full loop */ - -L(1): movl (%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edx /* magic value */ - addl %ecx, %edx /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(3) /* highest byte is NUL => return pointer */ - xorl %ecx, %edx /* (word+magic)^word */ - orl $0xfefefeff, %edx /* set all non-carry bits */ - incl %edx /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(3) /* found NUL => return pointer */ - - movl 4(%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edx /* magic value */ - addl %ecx, %edx /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(5) /* highest byte is NUL => return pointer */ - xorl %ecx, %edx /* (word+magic)^word */ - orl $0xfefefeff, %edx /* set all non-carry bits */ - incl %edx /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(5) /* found NUL => return pointer */ - - movl 8(%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edx /* magic value */ - addl %ecx, %edx /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(6) /* highest byte is NUL => return pointer */ - xorl %ecx, %edx /* (word+magic)^word */ - orl $0xfefefeff, %edx /* set all non-carry bits */ - incl %edx /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(6) /* found NUL => return pointer */ - - movl 12(%eax), %ecx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edx /* magic value */ - addl %ecx, %edx /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(7) /* highest byte is NUL => return pointer */ - xorl %ecx, %edx /* (word+magic)^word */ - orl $0xfefefeff, %edx /* set all non-carry bits */ - incl %edx /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jz L(4) /* no NUL found => continue loop */ - -L(7): addl $4, %eax /* adjust pointer */ -L(6): addl $4, %eax -L(5): addl $4, %eax - -L(3): testb %cl, %cl /* is first byte NUL? */ - jz L(2) /* yes => return */ - incl %eax /* increment pointer */ - - testb %ch, %ch /* is second byte NUL? */ - jz L(2) /* yes => return */ - incl %eax /* increment pointer */ - - testl $0xff0000, %ecx /* is third byte NUL? */ - jz L(2) /* yes => return pointer */ - incl %eax /* increment pointer */ - -L(2): subl STR(%esp), %eax /* compute difference to string start */ - - ret -END (strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/i386/strlen.c b/sysdeps/i386/strlen.c deleted file mode 100644 index 0b69957392..0000000000 --- a/sysdeps/i386/strlen.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Determine the length of a string. For Intel 80x86, x>=3. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Torbjorn Granlund (tege@sics.se). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -size_t -strlen (const char *str) -{ - int cnt; - - asm("cld\n" /* Search forward. */ - /* Some old versions of gas need `repne' instead of `repnz'. */ - "repnz\n" /* Look for a zero byte. */ - "scasb" /* %0, %1, %3 */ : - "=c" (cnt) : "D" (str), "0" (-1), "a" (0)); - - return -2 - cnt; -} -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/i386/strpbrk.S b/sysdeps/i386/strpbrk.S deleted file mode 100644 index 1109b233da..0000000000 --- a/sysdeps/i386/strpbrk.S +++ /dev/null @@ -1,243 +0,0 @@ -/* strcspn (str, ss) -- Return the length of the initial segement of STR - which contains no characters from SS. - For Intel 80x86, x>=3. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - Contributed by Ulrich Drepper - Bug fixes by Alan Modra - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4 /* no space for saved regs */ -#define RTN PARMS -#define STR RTN -#define STOP STR+4 - - .text -ENTRY (strpbrk) - - movl STR(%esp), %edx - movl STOP(%esp), %eax - - /* First we create a table with flags for all possible characters. - For the ASCII (7bit/8bit) or ISO-8859-X character sets which are - supported by the C string functions we have 256 characters. - Before inserting marks for the stop characters we clear the whole - table. The unrolled form is much faster than a loop. */ - xorl %ecx, %ecx /* %ecx = 0 !!! */ - - pushl %ecx /* make a 256 bytes long block filled with 0 */ - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl $0 /* These immediate values make the label 2 */ - cfi_adjust_cfa_offset (4) - pushl $0 /* to be aligned on a 16 byte boundary to */ - cfi_adjust_cfa_offset (4) - pushl $0 /* get a better performance of the loop. */ - cfi_adjust_cfa_offset (4) - pushl $0 - cfi_adjust_cfa_offset (4) - pushl $0 - cfi_adjust_cfa_offset (4) - pushl $0 - cfi_adjust_cfa_offset (4) - -/* For understanding the following code remember that %ecx == 0 now. - Although all the following instruction only modify %cl we always - have a correct zero-extended 32-bit value in %ecx. */ - -/* Don't change the "testb $0xff,%%cl" to "testb %%cl,%%cl". We want - longer instructions so that the next loop aligns without adding nops. */ - -L(2): movb (%eax), %cl /* get byte from stopset */ - testb %cl, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ - - movb 1(%eax), %cl /* get byte from stopset */ - testb $0xff, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ - - movb 2(%eax), %cl /* get byte from stopset */ - testb $0xff, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ - - movb 3(%eax), %cl /* get byte from stopset */ - addl $4, %eax /* increment stopset pointer */ - movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ - testb $0xff, %cl /* is NUL char? */ - jnz L(2) /* no => process next dword from stopset */ - -L(1): leal -4(%edx), %eax /* prepare loop */ - - /* We use a neat trick for the following loop. Normally we would - have to test for two termination conditions - 1. a character in the stopset was found - and - 2. the end of the string was found - But as a sign that the character is in the stopset we store its - value in the table. But the value of NUL is NUL so the loop - terminates for NUL in every case. */ - -L(3): addl $4, %eax /* adjust pointer for full loop round */ - - movb (%eax), %cl /* get byte from string */ - cmpb %cl, (%esp,%ecx) /* is it contained in stopset? */ - je L(4) /* yes => return */ - - movb 1(%eax), %cl /* get byte from string */ - cmpb %cl, (%esp,%ecx) /* is it contained in stopset? */ - je L(5) /* yes => return */ - - movb 2(%eax), %cl /* get byte from string */ - cmpb %cl, (%esp,%ecx) /* is it contained in stopset? */ - je L(6) /* yes => return */ - - movb 3(%eax), %cl /* get byte from string */ - cmpb %cl, (%esp,%ecx) /* is it contained in stopset? */ - jne L(3) /* yes => return */ - - incl %eax /* adjust pointer */ -L(6): incl %eax -L(5): incl %eax - -L(4): addl $256, %esp /* remove stopset */ - cfi_adjust_cfa_offset (-256) - - orb %cl, %cl /* was last character NUL? */ - jnz L(7) /* no => return pointer */ - xorl %eax, %eax - -L(7): ret -END (strpbrk) -libc_hidden_builtin_def (strpbrk) diff --git a/sysdeps/i386/strrchr.S b/sysdeps/i386/strrchr.S deleted file mode 100644 index 95b304dc0b..0000000000 --- a/sysdeps/i386/strrchr.S +++ /dev/null @@ -1,334 +0,0 @@ -/* strrchr (str, ch) -- Return pointer to last occurrence of CH in STR. - For Intel 80x86, x>=3. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper - Some optimisations by Alan Modra - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4+8 /* space for 2 saved regs */ -#define RTN PARMS -#define STR RTN -#define CHR STR+4 - - .text -ENTRY (strrchr) - - pushl %edi /* Save callee-safe registers used here. */ - cfi_adjust_cfa_offset (4) - cfi_rel_offset (edi, 0) - pushl %esi - cfi_adjust_cfa_offset (4) - - xorl %eax, %eax - movl STR(%esp), %esi - cfi_rel_offset (esi, 0) - movl CHR(%esp), %ecx - - /* At the moment %ecx contains C. What we need for the - algorithm is C in all bytes of the dword. Avoid - operations on 16 bit words because these require an - prefix byte (and one more cycle). */ - movb %cl, %ch /* now it is 0|0|c|c */ - movl %ecx, %edx - shll $16, %ecx /* now it is c|c|0|0 */ - movw %dx, %cx /* and finally c|c|c|c */ - - /* Before we start with the main loop we process single bytes - until the source pointer is aligned. This has two reasons: - 1. aligned 32-bit memory access is faster - and (more important) - 2. we process in the main loop 32 bit in one step although - we don't know the end of the string. But accessing at - 4-byte alignment guarantees that we never access illegal - memory if this would not also be done by the trivial - implementation (this is because all processor inherent - boundaries are multiples of 4. */ - - testl $3, %esi /* correctly aligned ? */ - jz L(19) /* yes => begin loop */ - movb (%esi), %dl /* load byte in question (we need it twice) */ - cmpb %dl, %cl /* compare byte */ - jne L(11) /* target found => return */ - movl %esi, %eax /* remember pointer as possible result */ -L(11): orb %dl, %dl /* is NUL? */ - jz L(2) /* yes => return NULL */ - incl %esi /* increment pointer */ - - testl $3, %esi /* correctly aligned ? */ - jz L(19) /* yes => begin loop */ - movb (%esi), %dl /* load byte in question (we need it twice) */ - cmpb %dl, %cl /* compare byte */ - jne L(12) /* target found => return */ - movl %esi, %eax /* remember pointer as result */ -L(12): orb %dl, %dl /* is NUL? */ - jz L(2) /* yes => return NULL */ - incl %esi /* increment pointer */ - - testl $3, %esi /* correctly aligned ? */ - jz L(19) /* yes => begin loop */ - movb (%esi), %dl /* load byte in question (we need it twice) */ - cmpb %dl, %cl /* compare byte */ - jne L(13) /* target found => return */ - movl %esi, %eax /* remember pointer as result */ -L(13): orb %dl, %dl /* is NUL? */ - jz L(2) /* yes => return NULL */ - incl %esi /* increment pointer */ - - /* No we have reached alignment. */ - jmp L(19) /* begin loop */ - - /* We exit the loop if adding MAGIC_BITS to LONGWORD fails to - change any of the hole bits of LONGWORD. - - 1) Is this safe? Will it catch all the zero bytes? - Suppose there is a byte with all zeros. Any carry bits - propagating from its left will fall into the hole at its - least significant bit and stop. Since there will be no - carry from its most significant bit, the LSB of the - byte to the left will be unchanged, and the zero will be - detected. - - 2) Is this worthwhile? Will it ignore everything except - zero bytes? Suppose every byte of LONGWORD has a bit set - somewhere. There will be a carry into bit 8. If bit 8 - is set, this will carry into bit 16. If bit 8 is clear, - one of bits 9-15 must be set, so there will be a carry - into bit 16. Similarly, there will be a carry into bit - 24. If one of bits 24-31 is set, there will be a carry - into bit 32 (=carry flag), so all of the hole bits will - be changed. - - 3) But wait! Aren't we looking for C, not zero? - Good point. So what we do is XOR LONGWORD with a longword, - each of whose bytes is C. This turns each byte that is C - into a zero. */ - - /* Each round the main loop processes 16 bytes. */ - - /* Jump to here when the character is detected. We chose this - way around because the character one is looking for is not - as frequent as the rest and taking a conditional jump is more - expensive than ignoring it. - - Some more words to the code below: it might not be obvious why - we decrement the source pointer here. In the loop the pointer - is not pre-incremented and so it still points before the word - we are looking at. But you should take a look at the instruction - which gets executed before we get into the loop: `addl $16, %esi'. - This makes the following subs into adds. */ - - /* These fill bytes make the main loop be correctly aligned. - We cannot use align because it is not the following instruction - which should be aligned. */ - .byte 0, 0 -#ifndef PROF - /* Profiling adds some code and so changes the alignment. */ - .byte 0 -#endif - -L(4): subl $4, %esi /* adjust pointer */ -L(41): subl $4, %esi -L(42): subl $4, %esi -L(43): testl $0xff000000, %edx /* is highest byte == C? */ - jnz L(33) /* no => try other bytes */ - leal 15(%esi), %eax /* store address as result */ - jmp L(1) /* and start loop again */ - -L(3): subl $4, %esi /* adjust pointer */ -L(31): subl $4, %esi -L(32): subl $4, %esi -L(33): testl $0xff0000, %edx /* is C in third byte? */ - jnz L(51) /* no => try other bytes */ - leal 14(%esi), %eax /* store address as result */ - jmp L(1) /* and start loop again */ - -L(51): - /* At this point we know that the byte is in one of the lower bytes. - We make a guess and correct it if necessary. This reduces the - number of necessary jumps. */ - leal 12(%esi), %eax /* guess address of lowest byte as result */ - testb %dh, %dh /* is guess correct? */ - jnz L(1) /* yes => start loop */ - leal 13(%esi), %eax /* correct guess to second byte */ - -L(1): addl $16, %esi /* increment pointer for full round */ - -L(19): movl (%esi), %edx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - addl %edx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - - /* According to the algorithm we had to reverse the effect of the - XOR first and then test the overflow bits. But because the - following XOR would destroy the carry flag and it would (in a - representation with more than 32 bits) not alter then last - overflow, we can now test this condition. If no carry is signaled - no overflow must have occurred in the last byte => it was 0. */ - - jnc L(20) /* found NUL => check last word */ - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits */ - xorl %edx, %edi /* (word+magic)^word */ - - /* Now test for the other three overflow bits. */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - - /* If at least one byte of the word is C we don't get 0 in %edi. */ - jnz L(20) /* found NUL => check last word */ - - /* Now we made sure the dword does not contain the character we are - looking for. But because we deal with strings we have to check - for the end of string before testing the next dword. */ - - xorl %ecx, %edx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - movl $0xfefefeff, %edi /* magic value */ - addl %edx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(4) /* highest byte is C => examine dword */ - xorl %edx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(3) /* C is detected in the word => examine it */ - - movl 4(%esi), %edx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - addl %edx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(21) /* found NUL => check last word */ - xorl %edx, %edi /* (word+magic)^word */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(21) /* found NUL => check last word */ - xorl %ecx, %edx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - movl $0xfefefeff, %edi /* magic value */ - addl %edx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(41) /* highest byte is C => examine dword */ - xorl %edx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(31) /* C is detected in the word => examine it */ - - movl 8(%esi), %edx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - addl %edx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(22) /* found NUL => check last word */ - xorl %edx, %edi /* (word+magic)^word */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(22) /* found NUL => check last word */ - xorl %ecx, %edx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - movl $0xfefefeff, %edi /* magic value */ - addl %edx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(42) /* highest byte is C => examine dword */ - xorl %edx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(32) /* C is detected in the word => examine it */ - - movl 12(%esi), %edx /* get word (= 4 bytes) in question */ - movl $0xfefefeff, %edi /* magic value */ - addl %edx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(23) /* found NUL => check last word */ - xorl %edx, %edi /* (word+magic)^word */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz L(23) /* found NUL => check last word */ - xorl %ecx, %edx /* XOR with word c|c|c|c => bytes of str == c - are now 0 */ - movl $0xfefefeff, %edi /* magic value */ - addl %edx, %edi /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc L(43) /* highest byte is C => examine dword */ - xorl %edx, %edi /* ((word^charmask)+magic)^(word^charmask) */ - orl $0xfefefeff, %edi /* set all non-carry bits */ - incl %edi /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jz L(1) /* C is not detected => restart loop */ - jmp L(33) /* examine word */ - -L(23): addl $4, %esi /* adjust pointer */ -L(22): addl $4, %esi -L(21): addl $4, %esi - - /* What remains to do is to test which byte the NUL char is and - whether the searched character appears in one of the bytes - before. A special case is that the searched byte maybe NUL. - In this case a pointer to the terminating NUL char has to be - returned. */ - -L(20): cmpb %cl, %dl /* is first byte == C? */ - jne L(24) /* no => skip */ - movl %esi, %eax /* store address as result */ -L(24): testb %dl, %dl /* is first byte == NUL? */ - jz L(2) /* yes => return */ - - cmpb %cl, %dh /* is second byte == C? */ - jne L(25) /* no => skip */ - leal 1(%esi), %eax /* store address as result */ -L(25): testb %dh, %dh /* is second byte == NUL? */ - jz L(2) /* yes => return */ - - shrl $16,%edx /* make upper bytes accessible */ - cmpb %cl, %dl /* is third byte == C */ - jne L(26) /* no => skip */ - leal 2(%esi), %eax /* store address as result */ -L(26): testb %dl, %dl /* is third byte == NUL */ - jz L(2) /* yes => return */ - - cmpb %cl, %dh /* is fourth byte == C */ - jne L(2) /* no => skip */ - leal 3(%esi), %eax /* store address as result */ - -L(2): popl %esi /* restore saved register content */ - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (strrchr) - -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/i386/strspn.S b/sysdeps/i386/strspn.S deleted file mode 100644 index d433eb6af5..0000000000 --- a/sysdeps/i386/strspn.S +++ /dev/null @@ -1,240 +0,0 @@ -/* strcspn (str, ss) -- Return the length of the initial segment of STR - which contains only characters from SS. - For Intel 80x86, x>=3. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper - Bug fixes by Alan Modra - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#define PARMS 4 /* no space for saved regs */ -#define STR PARMS -#define SKIP STR+4 - - .text -ENTRY (strspn) - - movl STR(%esp), %edx - movl SKIP(%esp), %eax - - /* First we create a table with flags for all possible characters. - For the ASCII (7bit/8bit) or ISO-8859-X character sets which are - supported by the C string functions we have 256 characters. - Before inserting marks for the stop characters we clear the whole - table. The unrolled form is much faster than a loop. */ - xorl %ecx, %ecx /* %ecx = 0 !!! */ - - pushl %ecx /* make a 256 bytes long block filled with 0 */ - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl $0 /* These immediate values make the label 2 */ - cfi_adjust_cfa_offset (4) - pushl $0 /* to be aligned on a 16 byte boundary to */ - cfi_adjust_cfa_offset (4) - pushl $0 /* get a better performance of the loop. */ - cfi_adjust_cfa_offset (4) - pushl $0 - cfi_adjust_cfa_offset (4) - pushl $0 - cfi_adjust_cfa_offset (4) - pushl $0 - cfi_adjust_cfa_offset (4) - -/* For understanding the following code remember that %ecx == 0 now. - Although all the following instruction only modify %cl we always - have a correct zero-extended 32-bit value in %ecx. */ - -/* Don't change the "testb $0xff,%%cl" to "testb %%cl,%%cl". We want - longer instructions so that the next loop aligns without adding nops. */ - -L(2): movb (%eax), %cl /* get byte from stopset */ - testb %cl, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ - - movb 1(%eax), %cl /* get byte from stopset */ - testb $0xff, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ - - movb 2(%eax), %cl /* get byte from stopset */ - testb $0xff, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ - - movb 3(%eax), %cl /* get byte from stopset */ - addl $4, %eax /* increment stopset pointer */ - movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ - testb $0xff, %cl /* is NUL char? */ - jnz L(2) /* no => process next dword from stopset */ - -L(1): leal -4(%edx), %eax /* prepare loop */ - - /* We use a neat trick for the following loop. Normally we would - have to test for two termination conditions - 1. a character in the stopset was found - and - 2. the end of the string was found - But as a sign that the character is in the stopset we store its - value in the table. But the value of NUL is NUL so the loop - terminates for NUL in every case. */ - -L(3): addl $4, %eax /* adjust pointer for full loop round */ - - movb (%eax), %cl /* get byte from string */ - testb %cl, (%esp,%ecx) /* is it contained in skipset? */ - jz L(4) /* no => return */ - - movb 1(%eax), %cl /* get byte from string */ - testb %cl, (%esp,%ecx) /* is it contained in skipset? */ - jz L(5) /* no => return */ - - movb 2(%eax), %cl /* get byte from string */ - testb %cl, (%esp,%ecx) /* is it contained in skipset? */ - jz L(6) /* no => return */ - - movb 3(%eax), %cl /* get byte from string */ - testb %cl, (%esp,%ecx) /* is it contained in skipset? */ - jnz L(3) /* yes => start loop again */ - - incl %eax /* adjust pointer */ -L(6): incl %eax -L(5): incl %eax - -L(4): addl $256, %esp /* remove stopset */ - cfi_adjust_cfa_offset (-256) - subl %edx, %eax /* we have to return the number of valid - characters, so compute distance to first - non-valid character */ - ret -END (strspn) -libc_hidden_builtin_def (strspn) diff --git a/sysdeps/i386/sub_n.S b/sysdeps/i386/sub_n.S deleted file mode 100644 index 3649da29e7..0000000000 --- a/sysdeps/i386/sub_n.S +++ /dev/null @@ -1,111 +0,0 @@ -/* i80386 __mpn_sub_n -- Add two limb vectors of the same length > 0 and store - sum in a third limb vector. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define PARMS 4+8 /* space for 2 saved regs */ -#define RES PARMS -#define S1 RES+4 -#define S2 S1+4 -#define SIZE S2+4 - - .text -ENTRY (__mpn_sub_n) - - pushl %edi - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - - movl RES(%esp),%edi - cfi_rel_offset (edi, 4) - movl S1(%esp),%esi - cfi_rel_offset (esi, 0) - movl S2(%esp),%edx - movl SIZE(%esp),%ecx - movl %ecx,%eax - shrl $3,%ecx /* compute count for unrolled loop */ - negl %eax - andl $7,%eax /* get index where to start loop */ - jz L(oop) /* necessary special case for 0 */ - incl %ecx /* adjust loop count */ - shll $2,%eax /* adjustment for pointers... */ - subl %eax,%edi /* ... since they are offset ... */ - subl %eax,%esi /* ... by a constant when we ... */ - subl %eax,%edx /* ... enter the loop */ - shrl $2,%eax /* restore previous value */ -#ifdef PIC -/* Calculate start address in loop for PIC. Due to limitations in some - assemblers, Loop-L0-3 cannot be put into the leal */ - call L(0) - cfi_adjust_cfa_offset (4) -L(0): leal (%eax,%eax,8),%eax - addl (%esp),%eax - addl $(L(oop)-L(0)-3),%eax - addl $4,%esp - cfi_adjust_cfa_offset (-4) -#else -/* Calculate start address in loop for non-PIC. */ - leal (L(oop) - 3)(%eax,%eax,8),%eax -#endif - jmp *%eax /* jump into loop */ - ALIGN (3) -L(oop): movl (%esi),%eax - sbbl (%edx),%eax - movl %eax,(%edi) - movl 4(%esi),%eax - sbbl 4(%edx),%eax - movl %eax,4(%edi) - movl 8(%esi),%eax - sbbl 8(%edx),%eax - movl %eax,8(%edi) - movl 12(%esi),%eax - sbbl 12(%edx),%eax - movl %eax,12(%edi) - movl 16(%esi),%eax - sbbl 16(%edx),%eax - movl %eax,16(%edi) - movl 20(%esi),%eax - sbbl 20(%edx),%eax - movl %eax,20(%edi) - movl 24(%esi),%eax - sbbl 24(%edx),%eax - movl %eax,24(%edi) - movl 28(%esi),%eax - sbbl 28(%edx),%eax - movl %eax,28(%edi) - leal 32(%edi),%edi - leal 32(%esi),%esi - leal 32(%edx),%edx - decl %ecx - jnz L(oop) - - sbbl %eax,%eax - negl %eax - - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (__mpn_sub_n) diff --git a/sysdeps/i386/submul_1.S b/sysdeps/i386/submul_1.S deleted file mode 100644 index c765e8dd79..0000000000 --- a/sysdeps/i386/submul_1.S +++ /dev/null @@ -1,86 +0,0 @@ -/* i80386 __mpn_submul_1 -- Multiply a limb vector with a limb and subtract - the result from a second limb vector. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define PARMS 4+16 /* space for 4 saved regs */ -#define RES PARMS -#define S1 RES+4 -#define SIZE S1+4 -#define S2LIMB SIZE+4 - -#define res_ptr edi -#define s1_ptr esi -#define sizeP ecx -#define s2_limb ebx - - .text -ENTRY (__mpn_submul_1) - - pushl %edi - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - pushl %ebp - cfi_adjust_cfa_offset (4) - pushl %ebx - cfi_adjust_cfa_offset (4) - cfi_rel_offset (edi, 12) - cfi_rel_offset (esi, 8) - cfi_rel_offset (ebp, 4) - cfi_rel_offset (ebx, 0) - - movl RES(%esp), %res_ptr - movl S1(%esp), %s1_ptr - movl SIZE(%esp), %sizeP - movl S2LIMB(%esp), %s2_limb - leal (%res_ptr,%sizeP,4), %res_ptr - leal (%s1_ptr,%sizeP,4), %s1_ptr - negl %sizeP - xorl %ebp, %ebp - ALIGN (3) -L(oop): - movl (%s1_ptr,%sizeP,4), %eax - mull %s2_limb - addl %ebp, %eax - adcl $0, %edx - subl %eax, (%res_ptr,%sizeP,4) - adcl $0, %edx - movl %edx, %ebp - - incl %sizeP - jnz L(oop) - movl %ebp, %eax - - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - - ret -END (__mpn_submul_1) diff --git a/sysdeps/i386/symbol-hacks.h b/sysdeps/i386/symbol-hacks.h deleted file mode 100644 index 36a13c83f7..0000000000 --- a/sysdeps/i386/symbol-hacks.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Hacks needed for symbol manipulation. i386 version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include_next "symbol-hacks.h" diff --git a/sysdeps/i386/sys/ucontext.h b/sysdeps/i386/sys/ucontext.h deleted file mode 100644 index fb5df11965..0000000000 --- a/sysdeps/i386/sys/ucontext.h +++ /dev/null @@ -1,139 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* System V/i386 ABI compliant context switching support. */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - - -/* Type for general register. */ -typedef int greg_t; - -/* Number of general registers. */ -#define __NGREG 19 -#ifdef __USE_MISC -# define NGREG __NGREG -#endif - -/* Container for all general registers. */ -typedef greg_t gregset_t[__NGREG]; - -#ifdef __USE_MISC -/* Number of each register is the `gregset_t' array. */ -enum -{ - REG_GS = 0, -# define REG_GS REG_GS - REG_FS, -# define REG_FS REG_FS - REG_ES, -# define REG_ES REG_ES - REG_DS, -# define REG_DS REG_DS - REG_EDI, -# define REG_EDI REG_EDI - REG_ESI, -# define REG_ESI REG_ESI - REG_EBP, -# define REG_EBP REG_EBP - REG_ESP, -# define REG_ESP REG_ESP - REG_EBX, -# define REG_EBX REG_EBX - REG_EDX, -# define REG_EDX REG_EDX - REG_ECX, -# define REG_ECX REG_ECX - REG_EAX, -# define REG_EAX REG_EAX - REG_TRAPNO, -# define REG_TRAPNO REG_TRAPNO - REG_ERR, -# define REG_ERR REG_ERR - REG_EIP, -# define REG_EIP REG_EIP - REG_CS, -# define REG_CS REG_CS - REG_EFL, -# define REG_EFL REG_EFL - REG_UESP, -# define REG_UESP REG_UESP - REG_SS -# define REG_SS REG_SS -}; -#endif - -#ifdef __USE_MISC -# define __ctx(fld) fld -# define __ctxt(tag) tag -#else -# define __ctx(fld) __ ## fld -# define __ctxt(tag) /* Empty. */ -#endif - -/* Structure to describe FPU registers. */ -typedef struct fpregset - { - union - { - struct __ctxt(fpchip_state) - { - int __ctx(state)[27]; - int __ctx(status); - } __ctx(fpchip_state); - - struct __ctxt(fp_emul_space) - { - char __ctx(fp_emul)[246]; - char __ctx(fp_epad)[2]; - } __ctx(fp_emul_space); - - int __ctx(f_fpregs)[62]; - } __ctx(fp_reg_set); - - long int __ctx(f_wregs)[33]; - } fpregset_t; - -/* Context to describe whole processor state. */ -typedef struct - { - gregset_t __ctx(gregs); - fpregset_t __ctx(fpregs); - } mcontext_t; - -#undef __ctx -#undef __ctxt - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_link; - sigset_t uc_sigmask; - stack_t uc_stack; - mcontext_t uc_mcontext; - long int uc_filler[5]; - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/i386/sysdep.h b/sysdeps/i386/sysdep.h deleted file mode 100644 index d2b0860b99..0000000000 --- a/sysdeps/i386/sysdep.h +++ /dev/null @@ -1,159 +0,0 @@ -/* Assembler macros for i386. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include /* For __GNUC_PREREQ. */ - -/* It is desirable that the names of PIC thunks match those used by - GCC so that multiple copies are eliminated by the linker. Because - GCC 4.6 and earlier use __i686 in the names, it is necessary to - override that predefined macro. */ -#if defined __i686 && defined __ASSEMBLER__ -#undef __i686 -#define __i686 __i686 -#endif - -#ifdef __ASSEMBLER__ -# define GET_PC_THUNK(reg) __x86.get_pc_thunk.reg -#else -# define GET_PC_THUNK_STR(reg) "__x86.get_pc_thunk." #reg -#endif - -#ifdef __ASSEMBLER__ - -/* Syntactic details of assembler. */ - -/* ELF uses byte-counts for .align, most others use log2 of count of bytes. */ -#define ALIGNARG(log2) 1< /* For __GNUC_PREREQ. */ - -#define TLS_LE(x) \ - ({ int *__l; \ - asm ("movl %%gs:0,%0\n\t" \ - "subl $" #x "@tpoff,%0" \ - : "=r" (__l)); \ - __l; }) - -#if defined PIC && !__GNUC_PREREQ (5,0) -# define TLS_IE(x) \ - ({ int *__l; \ - asm ("movl %%gs:0,%0\n\t" \ - "subl " #x "@gottpoff(%%ebx),%0" \ - : "=r" (__l)); \ - __l; }) -#else -# define TLS_IE(x) \ - ({ int *__l, __b; \ - asm ("call 1f\n\t" \ - ".subsection 1\n" \ - "1:\tmovl (%%esp), %%ebx\n\t" \ - "ret\n\t" \ - ".previous\n\t" \ - "addl $_GLOBAL_OFFSET_TABLE_, %%ebx\n\t" \ - "movl %%gs:0,%0\n\t" \ - "subl " #x "@gottpoff(%%ebx),%0" \ - : "=r" (__l), "=&b" (__b)); \ - __l; }) -#endif - -#if defined PIC && !__GNUC_PREREQ (5,0) -# define TLS_LD(x) \ - ({ int *__l, __c, __d; \ - asm ("leal " #x "@tlsldm(%%ebx),%%eax\n\t" \ - "call ___tls_get_addr@plt\n\t" \ - "leal " #x "@dtpoff(%%eax), %%eax" \ - : "=a" (__l), "=&c" (__c), "=&d" (__d)); \ - __l; }) -#else -# define TLS_LD(x) \ - ({ int *__l, __b, __c, __d; \ - asm ("call 1f\n\t" \ - ".subsection 1\n" \ - "1:\tmovl (%%esp), %%ebx\n\t" \ - "ret\n\t" \ - ".previous\n\t" \ - "addl $_GLOBAL_OFFSET_TABLE_, %%ebx\n\t" \ - "leal " #x "@tlsldm(%%ebx),%%eax\n\t" \ - "call ___tls_get_addr@plt\n\t" \ - "leal " #x "@dtpoff(%%eax), %%eax" \ - : "=a" (__l), "=&b" (__b), "=&c" (__c), "=&d" (__d)); \ - __l; }) -#endif - -#if defined PIC && !__GNUC_PREREQ (5,0) -# define TLS_GD(x) \ - ({ int *__l, __c, __d; \ - asm ("leal " #x "@tlsgd(%%ebx),%%eax\n\t" \ - "call ___tls_get_addr@plt\n\t" \ - "nop" \ - : "=a" (__l), "=&c" (__c), "=&d" (__d)); \ - __l; }) -#else -# define TLS_GD(x) \ - ({ int *__l, __b, __c, __d; \ - asm ("call 1f\n\t" \ - ".subsection 1\n" \ - "1:\tmovl (%%esp), %%ebx\n\t" \ - "ret\n\t" \ - ".previous\n\t" \ - "addl $_GLOBAL_OFFSET_TABLE_, %%ebx\n\t" \ - "leal " #x "@tlsgd(%%ebx),%%eax\n\t" \ - "call ___tls_get_addr@plt\n\t" \ - "nop" \ - : "=a" (__l), "=&b" (__b), "=&c" (__c), "=&d" (__d)); \ - __l; }) -#endif diff --git a/sysdeps/i386/tlsdesc.c b/sysdeps/i386/tlsdesc.c deleted file mode 100644 index 90de2bb05e..0000000000 --- a/sysdeps/i386/tlsdesc.c +++ /dev/null @@ -1,268 +0,0 @@ -/* Manage TLS descriptors. i386 version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -/* The following 4 functions take an entry_check_offset argument. - It's computed by the caller as an offset between its entry point - and the call site, such that by adding the built-in return address - that is implicitly passed to the function with this offset, we can - easily obtain the caller's entry point to compare with the entry - point given in the TLS descriptor. If it's changed, we want to - return immediately. */ - -/* This function is used to lazily resolve TLS_DESC REL relocations - that reference the *ABS* segment in their own link maps. The - argument is the addend originally stored there. */ - -void -__attribute__ ((regparm (3))) attribute_hidden -_dl_tlsdesc_resolve_abs_plus_addend_fixup (struct tlsdesc volatile *td, - struct link_map *l, - ptrdiff_t entry_check_offset) -{ - ptrdiff_t addend = (ptrdiff_t) td->arg; - - if (_dl_tlsdesc_resolve_early_return_p (td, __builtin_return_address (0) - - entry_check_offset)) - return; - -#ifndef SHARED - CHECK_STATIC_TLS (l, l); -#else - if (!TRY_STATIC_TLS (l, l)) - { - td->arg = _dl_make_tlsdesc_dynamic (l, addend); - td->entry = _dl_tlsdesc_dynamic; - } - else -#endif - { - td->arg = (void*) (addend - l->l_tls_offset); - td->entry = _dl_tlsdesc_return; - } - - _dl_tlsdesc_wake_up_held_fixups (); -} - -/* This function is used to lazily resolve TLS_DESC REL relocations - that originally had zero addends. The argument location, that - originally held the addend, is used to hold a pointer to the - relocation, but it has to be restored before we call the function - that applies relocations. */ - -void -__attribute__ ((regparm (3))) attribute_hidden -_dl_tlsdesc_resolve_rel_fixup (struct tlsdesc volatile *td, - struct link_map *l, - ptrdiff_t entry_check_offset) -{ - const ElfW(Rel) *reloc = td->arg; - - if (_dl_tlsdesc_resolve_early_return_p (td, __builtin_return_address (0) - - entry_check_offset)) - return; - - /* The code below was borrowed from _dl_fixup(), - except for checking for STB_LOCAL. */ - const ElfW(Sym) *const symtab - = (const void *) D_PTR (l, l_info[DT_SYMTAB]); - const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]); - const ElfW(Sym) *sym = &symtab[ELFW(R_SYM) (reloc->r_info)]; - lookup_t result; - - /* Look up the target symbol. If the normal lookup rules are not - used don't look in the global scope. */ - if (ELFW(ST_BIND) (sym->st_info) != STB_LOCAL - && __builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0) - { - const struct r_found_version *version = NULL; - - if (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL) - { - const ElfW(Half) *vernum = - (const void *) D_PTR (l, l_info[VERSYMIDX (DT_VERSYM)]); - ElfW(Half) ndx = vernum[ELFW(R_SYM) (reloc->r_info)] & 0x7fff; - version = &l->l_versions[ndx]; - if (version->hash == 0) - version = NULL; - } - - result = _dl_lookup_symbol_x (strtab + sym->st_name, l, &sym, - l->l_scope, version, ELF_RTYPE_CLASS_PLT, - DL_LOOKUP_ADD_DEPENDENCY, NULL); - } - else - { - /* We already found the symbol. The module (and therefore its load - address) is also known. */ - result = l; - } - - if (!sym) - { - td->arg = 0; - td->entry = _dl_tlsdesc_undefweak; - } - else - { -# ifndef SHARED - CHECK_STATIC_TLS (l, result); -# else - if (!TRY_STATIC_TLS (l, result)) - { - td->arg = _dl_make_tlsdesc_dynamic (result, sym->st_value); - td->entry = _dl_tlsdesc_dynamic; - } - else -# endif - { - td->arg = (void*)(sym->st_value - result->l_tls_offset); - td->entry = _dl_tlsdesc_return; - } - } - - _dl_tlsdesc_wake_up_held_fixups (); -} - -/* This function is used to lazily resolve TLS_DESC RELA relocations. - The argument location is used to hold a pointer to the relocation. */ - -void -__attribute__ ((regparm (3))) attribute_hidden -_dl_tlsdesc_resolve_rela_fixup (struct tlsdesc volatile *td, - struct link_map *l, - ptrdiff_t entry_check_offset) -{ - const ElfW(Rela) *reloc = td->arg; - - if (_dl_tlsdesc_resolve_early_return_p (td, __builtin_return_address (0) - - entry_check_offset)) - return; - - /* The code below was borrowed from _dl_fixup(), - except for checking for STB_LOCAL. */ - const ElfW(Sym) *const symtab - = (const void *) D_PTR (l, l_info[DT_SYMTAB]); - const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]); - const ElfW(Sym) *sym = &symtab[ELFW(R_SYM) (reloc->r_info)]; - lookup_t result; - - /* Look up the target symbol. If the normal lookup rules are not - used don't look in the global scope. */ - if (ELFW(ST_BIND) (sym->st_info) != STB_LOCAL - && __builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0) - { - const struct r_found_version *version = NULL; - - if (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL) - { - const ElfW(Half) *vernum = - (const void *) D_PTR (l, l_info[VERSYMIDX (DT_VERSYM)]); - ElfW(Half) ndx = vernum[ELFW(R_SYM) (reloc->r_info)] & 0x7fff; - version = &l->l_versions[ndx]; - if (version->hash == 0) - version = NULL; - } - - result = _dl_lookup_symbol_x (strtab + sym->st_name, l, &sym, - l->l_scope, version, ELF_RTYPE_CLASS_PLT, - DL_LOOKUP_ADD_DEPENDENCY, NULL); - } - else - { - /* We already found the symbol. The module (and therefore its load - address) is also known. */ - result = l; - } - - if (!sym) - { - td->arg = (void*) reloc->r_addend; - td->entry = _dl_tlsdesc_undefweak; - } - else - { -# ifndef SHARED - CHECK_STATIC_TLS (l, result); -# else - if (!TRY_STATIC_TLS (l, result)) - { - td->arg = _dl_make_tlsdesc_dynamic (result, sym->st_value - + reloc->r_addend); - td->entry = _dl_tlsdesc_dynamic; - } - else -# endif - { - td->arg = (void*) (sym->st_value - result->l_tls_offset - + reloc->r_addend); - td->entry = _dl_tlsdesc_return; - } - } - - _dl_tlsdesc_wake_up_held_fixups (); -} - -/* This function is used to avoid busy waiting for other threads to - complete the lazy relocation. Once another thread wins the race to - relocate a TLS descriptor, it sets the descriptor up such that this - function is called to wait until the resolver releases the - lock. */ - -void -__attribute__ ((regparm (3))) attribute_hidden -_dl_tlsdesc_resolve_hold_fixup (struct tlsdesc volatile *td, - struct link_map *l __attribute__((__unused__)), - ptrdiff_t entry_check_offset) -{ - /* Maybe we're lucky and can return early. */ - if (__builtin_return_address (0) - entry_check_offset != td->entry) - return; - - /* Locking here will stop execution until the running resolver runs - _dl_tlsdesc_wake_up_held_fixups(), releasing the lock. - - FIXME: We'd be better off waiting on a condition variable, such - that we didn't have to hold the lock throughout the relocation - processing. */ - __rtld_lock_lock_recursive (GL(dl_load_lock)); - __rtld_lock_unlock_recursive (GL(dl_load_lock)); -} - - -/* Unmap the dynamic object, but also release its TLS descriptor table - if there is one. */ - -void -internal_function -_dl_unmap (struct link_map *map) -{ - _dl_unmap_segments (map); - -#ifdef SHARED - if (map->l_mach.tlsdesc_table) - htab_delete (map->l_mach.tlsdesc_table); -#endif -} diff --git a/sysdeps/i386/tlsdesc.sym b/sysdeps/i386/tlsdesc.sym deleted file mode 100644 index 33854975d0..0000000000 --- a/sysdeps/i386/tlsdesc.sym +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include -#include -#include -#include - --- - --- Abuse tls.h macros to derive offsets relative to the thread register. - -DTV_OFFSET offsetof(struct pthread, header.dtv) - -TLSDESC_ARG offsetof(struct tlsdesc, arg) - -TLSDESC_GEN_COUNT offsetof(struct tlsdesc_dynamic_arg, gen_count) -TLSDESC_MODID offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_module) -TLSDESC_MODOFF offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_offset) diff --git a/sysdeps/i386/tst-audit.h b/sysdeps/i386/tst-audit.h deleted file mode 100644 index 87bf199c85..0000000000 --- a/sysdeps/i386/tst-audit.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. i386 version. - - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define pltenter la_i86_gnu_pltenter -#define pltexit la_i86_gnu_pltexit -#define La_regs La_i86_regs -#define La_retval La_i86_retval -#define int_retval lrv_eax diff --git a/sysdeps/i386/tst-audit3.c b/sysdeps/i386/tst-audit3.c deleted file mode 100644 index b67a59d733..0000000000 --- a/sysdeps/i386/tst-audit3.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Test case for i386 preserved registers in dynamic linker. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "tst-audit3.h" - -static int -do_test (void) -{ - long long ll = audit1_test (1, 2, 3); - if (ll != 30) - abort (); - - float f = audit2_test (1, 2, 3); - if (f != 30) - abort (); - - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../../test-skeleton.c" diff --git a/sysdeps/i386/tst-audit3.h b/sysdeps/i386/tst-audit3.h deleted file mode 100644 index f6d3b9181e..0000000000 --- a/sysdeps/i386/tst-audit3.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Test case for i386 preserved registers in dynamic linker. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -extern long long audit1_test (int, int, int) __attribute__ ((regparm(3))); -extern float audit2_test (int, int, int) __attribute__ ((regparm(3))); diff --git a/sysdeps/i386/tst-auditmod3a.c b/sysdeps/i386/tst-auditmod3a.c deleted file mode 100644 index a333cdcff9..0000000000 --- a/sysdeps/i386/tst-auditmod3a.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Test case for i386 preserved registers in dynamic linker. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "tst-audit3.h" - -long long -__attribute__ ((regparm(3))) -audit1_test (int i, int j, int k) -{ - if (i != 1 || j != 2 || k != 3) - abort (); - return 30; -} - -float -__attribute__ ((regparm(3))) -audit2_test (int i, int j, int k) -{ - if (i != 1 || j != 2 || k != 3) - abort (); - return 30; -} diff --git a/sysdeps/i386/tst-auditmod3b.c b/sysdeps/i386/tst-auditmod3b.c deleted file mode 100644 index 523f3cec90..0000000000 --- a/sysdeps/i386/tst-auditmod3b.c +++ /dev/null @@ -1,186 +0,0 @@ -/* Test case for i386 preserved registers in dynamic linker. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -unsigned int -la_version (unsigned int v) -{ - setlinebuf (stdout); - - printf ("version: %u\n", v); - - char buf[20]; - sprintf (buf, "%u", v); - - return v; -} - -void -la_activity (uintptr_t *cookie, unsigned int flag) -{ - const char *flagstr; - switch (flag) - { - case LA_ACT_CONSISTENT: - flagstr = "consistent"; - break; - case LA_ACT_ADD: - flagstr = "add"; - break; - case LA_ACT_DELETE: - flagstr = "delete"; - break; - default: - printf ("activity: unknown activity %u\n", flag); - return; - } - printf ("activity: %s\n", flagstr); -} - -char * -la_objsearch (const char *name, uintptr_t *cookie, unsigned int flag) -{ - const char *flagstr; - switch (flag) - { - case LA_SER_ORIG: - flagstr = "LA_SET_ORIG"; - break; - case LA_SER_LIBPATH: - flagstr = "LA_SER_LIBPATH"; - break; - case LA_SER_RUNPATH: - flagstr = "LA_SER_RUNPATH"; - break; - case LA_SER_CONFIG: - flagstr = "LA_SER_CONFIG"; - break; - case LA_SER_DEFAULT: - flagstr = "LA_SER_DEFAULT"; - break; - case LA_SER_SECURE: - flagstr = "LA_SER_SECURE"; - break; - default: - printf ("objsearch: %s, unknown flag %d\n", name, flag); - return (char *) name; - } - - printf ("objsearch: %s, %s\n", name, flagstr); - return (char *) name; -} - -unsigned int -la_objopen (struct link_map *l, Lmid_t lmid, uintptr_t *cookie) -{ - printf ("objopen: %ld, %s\n", lmid, l->l_name); - - return 3; -} - -void -la_preinit (uintptr_t *cookie) -{ - printf ("preinit\n"); -} - -unsigned int -la_objclose (uintptr_t *cookie) -{ - printf ("objclose\n"); - return 0; -} - -uintptr_t -la_symbind32 (Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind32: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -#include "tst-audit.h" - -ElfW(Addr) -pltenter (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, La_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - printf ("pltenter: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - if (strcmp (symname, "audit1_test") == 0 - || strcmp (symname, "audit2_test") == 0) - { - if (regs->lr_eax != 1 - || regs->lr_edx != 2 - || regs->lr_ecx != 3) - abort (); - - *framesizep = 200; - } - - return sym->st_value; -} - -unsigned int -pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, const La_regs *inregs, La_retval *outregs, - const char *symname) -{ - printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n", - symname, (long int) sym->st_value, ndx, - (ptrdiff_t) outregs->int_retval); - - if (strcmp (symname, "audit1_test") == 0 - || strcmp (symname, "audit2_test") == 0) - { - if (inregs->lr_eax != 1 - || inregs->lr_edx != 2 - || inregs->lr_ecx != 3) - abort (); - - if (strcmp (symname, "audit1_test") == 0) - { - long long x = ((unsigned long long) outregs->lrv_eax - | (unsigned long long) outregs->lrv_edx << 32); - - if (x != 30) - abort (); - } - else if (strcmp (symname, "audit2_test") == 0) - { - if (outregs->lrv_st0 != 30) - abort (); - } - } - - return 0; -} diff --git a/sysdeps/i386/tst-ld-sse-use.sh b/sysdeps/i386/tst-ld-sse-use.sh deleted file mode 100755 index 83a1dc59fb..0000000000 --- a/sysdeps/i386/tst-ld-sse-use.sh +++ /dev/null @@ -1,103 +0,0 @@ -#!/bin/bash -# Make sure no code in ld.so uses xmm/ymm/zmm registers on i386. -# Copyright (C) 2009-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -set -e - -objpfx="$1" -NM="$2" -OBJDUMP="$3" -READELF="$4" - -tmp=$(mktemp ${objpfx}tst-ld-sse-use.XXXXXX) -trap 'rm -f "$tmp"' 1 2 3 15 - -# List of object files we have to test -rtldobjs=$($READELF -W -wi ${objpfx}dl-allobjs.os | - awk '/^ "$tmp" -declare -a objects -objects=($(cat "$tmp")) - -objs="dl-runtime.os" -tocheck="dl-runtime.os" - -while test -n "$objs"; do - this="$objs" - objs="" - - for f in $this; do - undef=$($NM -u "$objpfx"../*/"$f" | awk '{print $2}') - if test -n "$undef"; then - for s in $undef; do - for obj in ${objects[*]} "_GLOBAL_OFFSET_TABLE_"; do - if test "$obj" = "$s"; then - continue 2 - fi - done - for o in $rtldobjs; do - ro=$(echo "$objpfx"../*/"$o") - if $NM -g --defined-only "$ro" | egrep -qs " $s\$"; then - if ! (echo "$tocheck $objs" | fgrep -qs "$o"); then - echo "$o needed for $s" - objs="$objs $o" - fi - break; - fi - done - done - fi - done - tocheck="$tocheck$objs" -done - -echo -echo -echo "object files needed: $tocheck" - -cp /dev/null "$tmp" -for f in $tocheck; do - $OBJDUMP -d "$objpfx"../*/"$f" | - awk 'BEGIN { last="" } /^[[:xdigit:]]* <[_[:alnum:]]*>:$/ { fct=substr($2, 2, length($2)-3) } /,%[xyz]mm[[:digit:]]*$/ { if (last != fct) { print fct; last=fct} }' | - while read fct; do - if test "$fct" = "_dl_runtime_profile" -o "$fct" = "_dl_x86_64_restore_sse"; then - continue; - fi - echo "function $fct in $f modifies xmm/ymm/zmm" >> "$tmp" - result=1 - done -done - -if test -s "$tmp"; then - echo - echo - cat "$tmp" - result=1 -else - result=0 -fi - -rm "$tmp" -exit $result diff --git a/sysdeps/i386/tst-stack-align.h b/sysdeps/i386/tst-stack-align.h deleted file mode 100644 index 76276d4a28..0000000000 --- a/sysdeps/i386/tst-stack-align.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -typedef struct { int i[4]; } int_al16 __attribute__((aligned (16))); - -#define TEST_STACK_ALIGN() \ - ({ \ - int_al16 _m; \ - double _d = 12.0; \ - long double _ld = 15.0; \ - int _ret = 0; \ - printf ("int_al16: %p %zu\n", &_m, __alignof (int_al16)); \ - if ((((uintptr_t) &_m) & (__alignof (int_al16) - 1)) != 0) \ - _ret = 1; \ - \ - printf ("double: %g %p %zu\n", _d, &_d, __alignof (double)); \ - if ((((uintptr_t) &_d) & (__alignof (double) - 1)) != 0) \ - _ret = 1; \ - \ - printf ("ldouble: %Lg %p %zu\n", _ld, &_ld, __alignof (long double)); \ - if ((((uintptr_t) &_ld) & (__alignof (long double) - 1)) != 0) \ - _ret = 1; \ - _ret; \ - }) diff --git a/sysdeps/ia64/Implies b/sysdeps/ia64/Implies deleted file mode 100644 index 8524257020..0000000000 --- a/sysdeps/ia64/Implies +++ /dev/null @@ -1,5 +0,0 @@ -wordsize-64 -# ia64 uses IEEE 754 floating point. -ieee754/ldbl-96 -ieee754/dbl-64 -ieee754/flt-32 diff --git a/sysdeps/ia64/Makeconfig b/sysdeps/ia64/Makeconfig deleted file mode 100644 index d1d3f6c95c..0000000000 --- a/sysdeps/ia64/Makeconfig +++ /dev/null @@ -1,2 +0,0 @@ -# ia64 does not provide crtbeginT.o, so use crtbegin.o. -+prectorT = $(+prector) diff --git a/sysdeps/ia64/Makefile b/sysdeps/ia64/Makefile deleted file mode 100644 index 5ebca89afa..0000000000 --- a/sysdeps/ia64/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# The ia64 `long double' is a distinct type we support. -long-double-fcts = yes - -ifeq ($(subdir),gmon) -sysdep_routines += _mcount -endif - -ifeq ($(subdir), csu) -CPPFLAGS-start.S = -D__ASSEMBLY__ - -ifeq (yes,$(build-shared)) -# Compatibility -sysdep_routines += ia64libgcc -shared-only-routines += ia64libgcc -endif -endif - -ifeq ($(subdir),elf) -sysdep-dl-routines += dl-symaddr dl-fptr -endif diff --git a/sysdeps/ia64/Versions b/sysdeps/ia64/Versions deleted file mode 100644 index ac3bff9b78..0000000000 --- a/sysdeps/ia64/Versions +++ /dev/null @@ -1,21 +0,0 @@ -ld { - GLIBC_PRIVATE { - # ia64 specific functions in the dynamic linker, but used by libc.so. - _dl_symbol_address; _dl_lookup_address; - _dl_function_address; - } -} -libc { - GLIBC_2.2 { - # Functions from libgcc. - __divtf3; __divdf3; __divsf3; __divdi3; __moddi3; __udivdi3; __umoddi3; - __multi3; - } -} -libm { - GLIBC_2.1 { - # A generic bug got this omitted from other configurations' version - # sets, but we always had it. - exp2l; - } -} diff --git a/sysdeps/ia64/_mcount.S b/sysdeps/ia64/_mcount.S deleted file mode 100644 index 26540e31b7..0000000000 --- a/sysdeps/ia64/_mcount.S +++ /dev/null @@ -1,91 +0,0 @@ -/* Machine-specific calling sequence for `mcount' profiling function. ia64 - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by David Mosberger - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Assembly stub to invoke _mcount(). Compiler generated code calls - this stub before executing a function's prologue and without saving - any registers. It is therefore necessary to preserve the input - registers as they may contain function arguments. To work - correctly with frame-less functions, it is also necessary to - preserve the return pointer (b0 aka rp). - - State upon entering _mcount: - - r8 address of return value structure (used only when called - function returns a large structure) - r15 static link (used only for nested functions) - in0 ar.pfs to restore before returning to the function that - called _mcount - in1 gp value to restore before returning to the function that - called _mcount - in2 return address in the function that invoked the caller - of _mcount (frompc) - in3 address of the global-offset table entry that holds the - profile count dword allocated by the compiler; to get - the address of this dword, use "ld8 in2=[in2]; this - dword can be used in any way by _mcount (including - not at all, as is the case with the current implementation) - b0 address to return to after _mcount is done -*/ - -#include - -#undef ret - -LEAF(_mcount) - .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(4) - alloc loc1 = ar.pfs, 4, 4, 3, 0 - mov loc0 = rp - .body - mov loc2 = r8 // gcc uses r8 to pass pointer to return structure - ;; - mov loc3 = r15 // gcc uses r15 to pass the static link to nested functions - mov out0 = in2 - mov out1 = rp - br.call.sptk.few rp = __mcount - ;; -.here: -{ - .mii - mov gp = in1 - mov r2 = ip - mov ar.pfs = loc1 -} - ;; - adds r2 = _mcount_ret_helper - .here, r2 - mov b7 = loc0 - mov rp = in2 - ;; - mov r3 = in0 - mov r8 = loc2 - mov r15 = loc3 - mov b6 = r2 - br.ret.sptk.few b6 -END(_mcount) - -LOCAL_LEAF(_mcount_ret_helper) - .prologue - .altrp b7 - .save ar.pfs, r3 - .body - alloc r2 = ar.pfs, 0, 0, 8, 0 - mov ar.pfs = r3 - br b7 -END(_mcount_ret_helper) - -weak_alias (_mcount, mcount) diff --git a/sysdeps/ia64/abort-instr.h b/sysdeps/ia64/abort-instr.h deleted file mode 100644 index 8f26f0fc2a..0000000000 --- a/sysdeps/ia64/abort-instr.h +++ /dev/null @@ -1,3 +0,0 @@ -/* An instruction which should crash any program is `break 0' which triggers - SIGILL. */ -#define ABORT_INSTRUCTION asm ("break 0") diff --git a/sysdeps/ia64/atomic-machine.h b/sysdeps/ia64/atomic-machine.h deleted file mode 100644 index f04ac05446..0000000000 --- a/sysdeps/ia64/atomic-machine.h +++ /dev/null @@ -1,122 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int16_t atomic16_t; -typedef uint16_t uatomic16_t; -typedef int_fast16_t atomic_fast16_t; -typedef uint_fast16_t uatomic_fast16_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#define __HAVE_64B_ATOMICS 1 -#define USE_ATOMIC_COMPILER_BUILTINS 0 - -/* XXX Is this actually correct? */ -#define ATOMIC_EXCHANGE_USES_CAS 0 - - -#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval) \ - (abort (), 0) - -#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval) \ - (abort (), 0) - -#define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval) \ - (!__sync_bool_compare_and_swap ((mem), (int) (long) (oldval), \ - (int) (long) (newval))) - -#define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \ - (!__sync_bool_compare_and_swap ((mem), (long) (oldval), \ - (long) (newval))) - -#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) - -#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) - -#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - __sync_val_compare_and_swap ((mem), (int) (long) (oldval), \ - (int) (long) (newval)) - -#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - __sync_val_compare_and_swap ((mem), (long) (oldval), (long) (newval)) - -/* Atomically store newval and return the old value. */ -#define atomic_exchange_acq(mem, value) \ - __sync_lock_test_and_set (mem, value) - -#define atomic_exchange_rel(mem, value) \ - (__sync_synchronize (), __sync_lock_test_and_set (mem, value)) - -#define atomic_exchange_and_add(mem, value) \ - __sync_fetch_and_add ((mem), (value)) - -#define atomic_decrement_if_positive(mem) \ - ({ __typeof (*mem) __oldval, __val; \ - __typeof (mem) __memp = (mem); \ - \ - __val = (*__memp); \ - do \ - { \ - __oldval = __val; \ - if (__builtin_expect (__val <= 0, 0)) \ - break; \ - __val = atomic_compare_and_exchange_val_acq (__memp, __oldval - 1, \ - __oldval); \ - } \ - while (__builtin_expect (__val != __oldval, 0)); \ - __oldval; }) - -#define atomic_bit_test_set(mem, bit) \ - ({ __typeof (*mem) __oldval, __val; \ - __typeof (mem) __memp = (mem); \ - __typeof (*mem) __mask = ((__typeof (*mem)) 1 << (bit)); \ - \ - __val = (*__memp); \ - do \ - { \ - __oldval = __val; \ - __val = atomic_compare_and_exchange_val_acq (__memp, \ - __oldval | __mask, \ - __oldval); \ - } \ - while (__builtin_expect (__val != __oldval, 0)); \ - __oldval & __mask; }) - -#define atomic_full_barrier() __sync_synchronize () diff --git a/sysdeps/ia64/backtrace.c b/sysdeps/ia64/backtrace.c deleted file mode 100644 index 27ce597b39..0000000000 --- a/sysdeps/ia64/backtrace.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/ia64/bcopy.S b/sysdeps/ia64/bcopy.S deleted file mode 100644 index bdabf5acdc..0000000000 --- a/sysdeps/ia64/bcopy.S +++ /dev/null @@ -1,10 +0,0 @@ -#include - -ENTRY(bcopy) - .regstk 3, 0, 0, 0 - mov r8 = in0 - mov in0 = in1 - ;; - mov in1 = r8 - br.cond.sptk.many HIDDEN_BUILTIN_JUMPTARGET(memmove) -END(bcopy) diff --git a/sysdeps/ia64/bits/byteswap-16.h b/sysdeps/ia64/bits/byteswap-16.h deleted file mode 100644 index 0bf8226072..0000000000 --- a/sysdeps/ia64/bits/byteswap-16.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Macros to swap the order of bytes in 16-bit integer values. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_BYTESWAP_H -# error "Never use directly; include instead." -#endif - -#if defined __GNUC__ && __GNUC__ >= 2 -# define __bswap_16(x) \ - (__extension__ \ - ({ unsigned short int __v, __x = (unsigned short int) (x); \ - if (__builtin_constant_p (x)) \ - __v = __bswap_constant_16 (__x); \ - else \ - __asm__ __volatile__ ("shl %0 = %1, 48 ;;" \ - "mux1 %0 = %0, @rev ;;" \ - : "=r" (__v) \ - : "r" ((unsigned short int) (__x))); \ - __v; })) -#else -/* This is better than nothing. */ -static __inline unsigned short int -__bswap_16 (unsigned short int __bsx) -{ - return __bswap_constant_16 (__bsx); -} -#endif diff --git a/sysdeps/ia64/bits/byteswap.h b/sysdeps/ia64/bits/byteswap.h deleted file mode 100644 index 240bb619a0..0000000000 --- a/sysdeps/ia64/bits/byteswap.h +++ /dev/null @@ -1,100 +0,0 @@ -/* Macros to swap the order of bytes in integer values. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#ifndef _BITS_BYTESWAP_H -#define _BITS_BYTESWAP_H 1 - -/* Swap bytes in 16 bit value. */ -#define __bswap_constant_16(x) \ - ((unsigned short int)((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))) - -/* Get __bswap_16. */ -#include - -/* Swap bytes in 32 bit value. */ -#define __bswap_constant_32(x) \ - ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ - (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) - -#if defined __GNUC__ && __GNUC__ >= 2 -# define __bswap_32(x) \ - (__extension__ \ - ({ unsigned int __v, __x = (x); \ - if (__builtin_constant_p (x)) \ - __v = __bswap_constant_32 (__x); \ - else \ - __asm__ __volatile__ ("shl %0 = %1, 32 ;;" \ - "mux1 %0 = %0, @rev ;;" \ - : "=r" (__v) \ - : "r" ((unsigned int) (__x))); \ - __v; })) -#else -static __inline unsigned int -__bswap_32 (unsigned int __bsx) -{ - return __bswap_constant_32 (__bsx); -} -#endif - - -/* Swap bytes in 64 bit value. */ -#if defined __GNUC__ && __GNUC__ >= 2 -# define __bswap_constant_64(x) \ - (__extension__ ((((x) & 0xff00000000000000ul) >> 56) \ - | (((x) & 0x00ff000000000000ul) >> 40) \ - | (((x) & 0x0000ff0000000000ul) >> 24) \ - | (((x) & 0x000000ff00000000ul) >> 8) \ - | (((x) & 0x00000000ff000000ul) << 8) \ - | (((x) & 0x0000000000ff0000ul) << 24) \ - | (((x) & 0x000000000000ff00ul) << 40) \ - | (((x) & 0x00000000000000fful) << 56))) - -# define __bswap_64(x) \ - (__extension__ \ - ({ unsigned long int __v, __x = (x); \ - if (__builtin_constant_p (x)) \ - __v = __bswap_constant_64 (__x); \ - else \ - __asm__ __volatile__ ("mux1 %0 = %1, @rev ;;" \ - : "=r" (__v) \ - : "r" ((unsigned long int) (__x))); \ - __v; })) - -#else -# define __bswap_constant_64(x) \ - ((((x) & 0xff00000000000000ul) >> 56) \ - | (((x) & 0x00ff000000000000ul) >> 40) \ - | (((x) & 0x0000ff0000000000ul) >> 24) \ - | (((x) & 0x000000ff00000000ul) >> 8) \ - | (((x) & 0x00000000ff000000ul) << 8) \ - | (((x) & 0x0000000000ff0000ul) << 24) \ - | (((x) & 0x000000000000ff00ul) << 40) \ - | (((x) & 0x00000000000000fful) << 56)) - -static __inline unsigned long int -__bswap_64 (unsigned long int __bsx) -{ - return __bswap_constant_64 (__bsx); -} -#endif - -#endif /* _BITS_BYTESWAP_H */ diff --git a/sysdeps/ia64/bits/fenv.h b/sysdeps/ia64/bits/fenv.h deleted file mode 100644 index 9e3b400880..0000000000 --- a/sysdeps/ia64/bits/fenv.h +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - - -/* Define bits representing the exception. We use the bit positions of - the appropriate bits in the FPSR... (Tahoe EAS 2.4 5-4)*/ - -enum - { - FE_INEXACT = -#define FE_INEXACT (1 << 5) - FE_INEXACT, - - FE_UNDERFLOW = -#define FE_UNDERFLOW (1 << 4) - FE_UNDERFLOW, - - FE_OVERFLOW = -#define FE_OVERFLOW (1 << 3) - FE_OVERFLOW, - - FE_DIVBYZERO = -#define FE_DIVBYZERO (1 << 2) - FE_DIVBYZERO, - - FE_UNNORMAL = -#define FE_UNNORMAL (1 << 1) - FE_UNNORMAL, - - FE_INVALID = -#define FE_INVALID (1 << 0) - FE_INVALID, - - FE_ALL_EXCEPT = -#define FE_ALL_EXCEPT (FE_INEXACT | FE_UNDERFLOW | FE_OVERFLOW | FE_DIVBYZERO | FE_UNNORMAL | FE_INVALID) - FE_ALL_EXCEPT - }; - - -enum - { - FE_TOWARDZERO = -#define FE_TOWARDZERO 3 - FE_TOWARDZERO, - - FE_UPWARD = -#define FE_UPWARD 2 - FE_UPWARD, - - FE_DOWNWARD = -#define FE_DOWNWARD 1 - FE_DOWNWARD, - - FE_TONEAREST = -#define FE_TONEAREST 0 - FE_TONEAREST, - }; - - -/* Type representing exception flags. */ -typedef unsigned long int fexcept_t; - -/* Type representing floating-point environment. */ -typedef unsigned long int fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) 0xc009804c0270033fUL) - -#ifdef __USE_GNU -/* Floating-point environment where only FE_UNNORMAL is masked since this - exception is not generally supported by glibc. */ -# define FE_NOMASK_ENV ((const fenv_t *) 0xc009804c02700302UL) - -/* Floating-point environment with (processor-dependent) non-IEEE - floating point. In this case, turning on flush-to-zero mode for - s0, s2, and s3. */ -# define FE_NONIEEE_ENV ((const fenv_t *) 0xc009a04d0270037fUL) -#endif - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef unsigned long int femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) 0xc009804c0270033fUL) -#endif diff --git a/sysdeps/ia64/bits/fp-logb.h b/sysdeps/ia64/bits/fp-logb.h deleted file mode 100644 index b55e171871..0000000000 --- a/sysdeps/ia64/bits/fp-logb.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Define __FP_LOGB0_IS_MIN and __FP_LOGBNAN_IS_MIN. IA64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#define __FP_LOGB0_IS_MIN 1 -#define __FP_LOGBNAN_IS_MIN 0 diff --git a/sysdeps/ia64/bits/huge_vall.h b/sysdeps/ia64/bits/huge_vall.h deleted file mode 100644 index 3e2b4eca10..0000000000 --- a/sysdeps/ia64/bits/huge_vall.h +++ /dev/null @@ -1,41 +0,0 @@ -/* `HUGE_VALL' constant for ia64 (where it is infinity). - Used by and functions for overflow. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#if __GNUC_PREREQ(3,3) -# define HUGE_VALL (__builtin_huge_vall()) -#elif __GNUC_PREREQ(2,96) -# define HUGE_VALL (__extension__ 0x1.0p32767L) -#else - -# define __HUGE_VALL_bytes { 0,0,0,0,0,0,0, 0x80, 0xff, 0x7f, 0,0,0,0,0,0} - -# define __huge_vall_t union { unsigned char __c[16]; long double __ld; } -# ifdef __GNUC__ -# define HUGE_VALL (__extension__ \ - ((__huge_vall_t) { __c: __HUGE_VALL_bytes }).__ld) -# else /* Not GCC. */ -static __huge_vall_t __huge_vall = { __HUGE_VALL_bytes }; -# define HUGE_VALL (__huge_vall.__ld) -# endif /* GCC. */ - -#endif /* GCC 2.95 */ diff --git a/sysdeps/ia64/bits/link.h b/sysdeps/ia64/bits/link.h deleted file mode 100644 index a1ff097f9c..0000000000 --- a/sysdeps/ia64/bits/link.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - -/* Registers for entry into PLT on ia64. */ -typedef struct La_ia64_regs -{ - uint64_t lr_r8; - uint64_t lr_r9; - uint64_t lr_r10; - uint64_t lr_r11; - uint64_t lr_gr [8]; - long double lr_fr [8]; - uint64_t lr_unat; - uint64_t lr_sp; -} La_ia64_regs; - -/* Return values for calls from PLT on ia64. */ -typedef struct La_ia64_retval -{ - uint64_t lrv_r8; - uint64_t lrv_r9; - uint64_t lrv_r10; - uint64_t lrv_r11; - long double lr_fr [8]; -} La_ia64_retval; - - -__BEGIN_DECLS - -extern Elf64_Addr la_ia64_gnu_pltenter (Elf64_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_ia64_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_ia64_gnu_pltexit (Elf64_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_ia64_regs *__inregs, - La_ia64_retval *__outregs, - const char *__symname); - -__END_DECLS diff --git a/sysdeps/ia64/bits/xtitypes.h b/sysdeps/ia64/bits/xtitypes.h deleted file mode 100644 index 78986643ff..0000000000 --- a/sysdeps/ia64/bits/xtitypes.h +++ /dev/null @@ -1,33 +0,0 @@ -/* bits/xtitypes.h -- Define some types used by . IA64 - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _STROPTS_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_XTITYPES_H -#define _BITS_XTITYPES_H 1 - -#include - -/* This type is used by some structs in . */ -typedef __S32_TYPE __t_scalar_t; -typedef __U32_TYPE __t_uscalar_t; - - -#endif /* bits/xtitypes.h */ diff --git a/sysdeps/ia64/bzero.S b/sysdeps/ia64/bzero.S deleted file mode 100644 index b59ae273ed..0000000000 --- a/sysdeps/ia64/bzero.S +++ /dev/null @@ -1,314 +0,0 @@ -/* Optimized version of the standard bzero() function. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Dan Pop for Itanium . - Rewritten for McKinley by Sverre Jarp, HP Labs/CERN - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Return: dest - - Inputs: - in0: dest - in1: count - - The algorithm is fairly straightforward: set byte by byte until we - we get to a 16B-aligned address, then loop on 128 B chunks using an - early store as prefetching, then loop on 32B chucks, then clear remaining - words, finally clear remaining bytes. - Since a stf.spill f0 can store 16B in one go, we use this instruction - to get peak speed. */ - -#include -#undef ret - -#define dest in0 -#define cnt in1 - -#define tmp r31 -#define save_lc r30 -#define ptr0 r29 -#define ptr1 r28 -#define ptr2 r27 -#define ptr3 r26 -#define ptr9 r24 -#define loopcnt r23 -#define linecnt r22 -#define bytecnt r21 - -// This routine uses only scratch predicate registers (p6 - p15) -#define p_scr p6 // default register for same-cycle branches -#define p_unalgn p9 -#define p_y p11 -#define p_n p12 -#define p_yy p13 -#define p_nn p14 - -#define movi0 mov - -#define MIN1 15 -#define MIN1P1HALF 8 -#define LINE_SIZE 128 -#define LSIZE_SH 7 // shift amount -#define PREF_AHEAD 8 - -#define USE_FLP -#if defined(USE_INT) -#define store st8 -#define myval r0 -#elif defined(USE_FLP) -#define store stf8 -#define myval f0 -#endif - -.align 64 -ENTRY(bzero) -{ .mmi - .prologue - alloc tmp = ar.pfs, 2, 0, 0, 0 - lfetch.nt1 [dest] - .save ar.lc, save_lc - movi0 save_lc = ar.lc -} { .mmi - .body - mov ret0 = dest // return value - nop.m 0 - cmp.eq p_scr, p0 = cnt, r0 -;; } -{ .mmi - and ptr2 = -(MIN1+1), dest // aligned address - and tmp = MIN1, dest // prepare to check for alignment - tbit.nz p_y, p_n = dest, 0 // Do we have an odd address? (M_B_U) -} { .mib - mov ptr1 = dest - nop.i 0 -(p_scr) br.ret.dpnt.many rp // return immediately if count = 0 -;; } -{ .mib - cmp.ne p_unalgn, p0 = tmp, r0 -} { .mib // NB: # of bytes to move is 1 - sub bytecnt = (MIN1+1), tmp // higher than loopcnt - cmp.gt p_scr, p0 = 16, cnt // is it a minimalistic task? -(p_scr) br.cond.dptk.many .move_bytes_unaligned // go move just a few (M_B_U) -;; } -{ .mmi -(p_unalgn) add ptr1 = (MIN1+1), ptr2 // after alignment -(p_unalgn) add ptr2 = MIN1P1HALF, ptr2 // after alignment -(p_unalgn) tbit.nz.unc p_y, p_n = bytecnt, 3 // should we do a st8 ? -;; } -{ .mib -(p_y) add cnt = -8, cnt -(p_unalgn) tbit.nz.unc p_yy, p_nn = bytecnt, 2 // should we do a st4 ? -} { .mib -(p_y) st8 [ptr2] = r0,-4 -(p_n) add ptr2 = 4, ptr2 -;; } -{ .mib -(p_yy) add cnt = -4, cnt -(p_unalgn) tbit.nz.unc p_y, p_n = bytecnt, 1 // should we do a st2 ? -} { .mib -(p_yy) st4 [ptr2] = r0,-2 -(p_nn) add ptr2 = 2, ptr2 -;; } -{ .mmi - mov tmp = LINE_SIZE+1 // for compare -(p_y) add cnt = -2, cnt -(p_unalgn) tbit.nz.unc p_yy, p_nn = bytecnt, 0 // should we do a st1 ? -} { .mmi - nop.m 0 -(p_y) st2 [ptr2] = r0,-1 -(p_n) add ptr2 = 1, ptr2 -;; } - -{ .mmi -(p_yy) st1 [ptr2] = r0 - cmp.gt p_scr, p0 = tmp, cnt // is it a minimalistic task? -} { .mbb -(p_yy) add cnt = -1, cnt -(p_scr) br.cond.dpnt.many .fraction_of_line // go move just a few -;; } -{ .mib - nop.m 0 - shr.u linecnt = cnt, LSIZE_SH - nop.b 0 -;; } - - .align 32 -.l1b: // ------------------// L1B: store ahead into cache lines; fill later -{ .mmi - and tmp = -(LINE_SIZE), cnt // compute end of range - mov ptr9 = ptr1 // used for prefetching - and cnt = (LINE_SIZE-1), cnt // remainder -} { .mmi - mov loopcnt = PREF_AHEAD-1 // default prefetch loop - cmp.gt p_scr, p0 = PREF_AHEAD, linecnt // check against actual value -;; } -{ .mmi -(p_scr) add loopcnt = -1, linecnt - add ptr2 = 16, ptr1 // start of stores (beyond prefetch stores) - add ptr1 = tmp, ptr1 // first address beyond total range -;; } -{ .mmi - add tmp = -1, linecnt // next loop count - movi0 ar.lc = loopcnt -;; } -.pref_l1b: -{ .mib - stf.spill [ptr9] = f0, 128 // Do stores one cache line apart - nop.i 0 - br.cloop.dptk.few .pref_l1b -;; } -{ .mmi - add ptr0 = 16, ptr2 // Two stores in parallel - movi0 ar.lc = tmp -;; } -.l1bx: - { .mmi - stf.spill [ptr2] = f0, 32 - stf.spill [ptr0] = f0, 32 - ;; } - { .mmi - stf.spill [ptr2] = f0, 32 - stf.spill [ptr0] = f0, 32 - ;; } - { .mmi - stf.spill [ptr2] = f0, 32 - stf.spill [ptr0] = f0, 64 - cmp.lt p_scr, p0 = ptr9, ptr1 // do we need more prefetching? - ;; } -{ .mmb - stf.spill [ptr2] = f0, 32 -(p_scr) stf.spill [ptr9] = f0, 128 - br.cloop.dptk.few .l1bx -;; } -{ .mib - cmp.gt p_scr, p0 = 8, cnt // just a few bytes left ? -(p_scr) br.cond.dpnt.many .move_bytes_from_alignment -;; } - -.fraction_of_line: -{ .mib - add ptr2 = 16, ptr1 - shr.u loopcnt = cnt, 5 // loopcnt = cnt / 32 -;; } -{ .mib - cmp.eq p_scr, p0 = loopcnt, r0 - add loopcnt = -1, loopcnt -(p_scr) br.cond.dpnt.many .store_words -;; } -{ .mib - and cnt = 0x1f, cnt // compute the remaining cnt - movi0 ar.lc = loopcnt -;; } - .align 32 -.l2: // -----------------------------// L2A: store 32B in 2 cycles -{ .mmb - store [ptr1] = myval, 8 - store [ptr2] = myval, 8 -;; } { .mmb - store [ptr1] = myval, 24 - store [ptr2] = myval, 24 - br.cloop.dptk.many .l2 -;; } -.store_words: -{ .mib - cmp.gt p_scr, p0 = 8, cnt // just a few bytes left ? -(p_scr) br.cond.dpnt.many .move_bytes_from_alignment // Branch -;; } - -{ .mmi - store [ptr1] = myval, 8 // store - cmp.le p_y, p_n = 16, cnt // - add cnt = -8, cnt // subtract -;; } -{ .mmi -(p_y) store [ptr1] = myval, 8 // store -(p_y) cmp.le.unc p_yy, p_nn = 16, cnt -(p_y) add cnt = -8, cnt // subtract -;; } -{ .mmi // store -(p_yy) store [ptr1] = myval, 8 -(p_yy) add cnt = -8, cnt // subtract -;; } - -.move_bytes_from_alignment: -{ .mib - cmp.eq p_scr, p0 = cnt, r0 - tbit.nz.unc p_y, p0 = cnt, 2 // should we terminate with a st4 ? -(p_scr) br.cond.dpnt.few .restore_and_exit -;; } -{ .mib -(p_y) st4 [ptr1] = r0,4 - tbit.nz.unc p_yy, p0 = cnt, 1 // should we terminate with a st2 ? -;; } -{ .mib -(p_yy) st2 [ptr1] = r0,2 - tbit.nz.unc p_y, p0 = cnt, 0 // should we terminate with a st1 ? -;; } - -{ .mib -(p_y) st1 [ptr1] = r0 -;; } -.restore_and_exit: -{ .mib - nop.m 0 - movi0 ar.lc = save_lc - br.ret.sptk.many rp -;; } - -.move_bytes_unaligned: -{ .mmi - .pred.rel "mutex",p_y, p_n - .pred.rel "mutex",p_yy, p_nn -(p_n) cmp.le p_yy, p_nn = 4, cnt -(p_y) cmp.le p_yy, p_nn = 5, cnt -(p_n) add ptr2 = 2, ptr1 -} { .mmi -(p_y) add ptr2 = 3, ptr1 -(p_y) st1 [ptr1] = r0, 1 // fill 1 (odd-aligned) byte -(p_y) add cnt = -1, cnt // [15, 14 (or less) left] -;; } -{ .mmi -(p_yy) cmp.le.unc p_y, p0 = 8, cnt - add ptr3 = ptr1, cnt // prepare last store - movi0 ar.lc = save_lc -} { .mmi -(p_yy) st2 [ptr1] = r0, 4 // fill 2 (aligned) bytes -(p_yy) st2 [ptr2] = r0, 4 // fill 2 (aligned) bytes -(p_yy) add cnt = -4, cnt // [11, 10 (o less) left] -;; } -{ .mmi -(p_y) cmp.le.unc p_yy, p0 = 8, cnt - add ptr3 = -1, ptr3 // last store - tbit.nz p_scr, p0 = cnt, 1 // will there be a st2 at the end ? -} { .mmi -(p_y) st2 [ptr1] = r0, 4 // fill 2 (aligned) bytes -(p_y) st2 [ptr2] = r0, 4 // fill 2 (aligned) bytes -(p_y) add cnt = -4, cnt // [7, 6 (or less) left] -;; } -{ .mmi -(p_yy) st2 [ptr1] = r0, 4 // fill 2 (aligned) bytes -(p_yy) st2 [ptr2] = r0, 4 // fill 2 (aligned) bytes - // [3, 2 (or less) left] - tbit.nz p_y, p0 = cnt, 0 // will there be a st1 at the end ? -} { .mmi -(p_yy) add cnt = -4, cnt -;; } -{ .mmb -(p_scr) st2 [ptr1] = r0 // fill 2 (aligned) bytes -(p_y) st1 [ptr3] = r0 // fill last byte (using ptr3) - br.ret.sptk.many rp -;; } -END(bzero) diff --git a/sysdeps/ia64/configure b/sysdeps/ia64/configure deleted file mode 100644 index 1ef70921bc..0000000000 --- a/sysdeps/ia64/configure +++ /dev/null @@ -1,6 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/ia64. - -$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h - -# work around problem with autoconf and empty lines at the end of files diff --git a/sysdeps/ia64/configure.ac b/sysdeps/ia64/configure.ac deleted file mode 100644 index 3bae9fc5e1..0000000000 --- a/sysdeps/ia64/configure.ac +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/ia64. - -dnl It is always possible to access static and hidden symbols in an -dnl position independent way. -AC_DEFINE(PI_STATIC_AND_HIDDEN) -# work around problem with autoconf and empty lines at the end of files diff --git a/sysdeps/ia64/crti.S b/sysdeps/ia64/crti.S deleted file mode 100644 index a8bc2872ad..0000000000 --- a/sysdeps/ia64/crti.S +++ /dev/null @@ -1,160 +0,0 @@ -/* Special .init and .fini section support for IA64. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include -#include -#undef ret - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - -/* If we have working .init_array support, we want to keep the .init - section empty (apart from the mandatory prologue/epilogue. This - ensures that the default unwind conventions (return-pointer in b0, - frame state in ar.pfs, etc.) will do the Right Thing. To ensure - an empty .init section, we register gmon_initializer() via the - .init_array. - - --davidm 02/10/29 */ - -#if PREINIT_FUNCTION_WEAK -/* This blob of assembly code is one simple C function: - -static void -__attribute__ ((used)) -gmon_initializer (void) -{ - extern void weak_function __gmon_start__ (void); - - if (__gmon_start__) - (*__gmon_start__)(); -} - */ - .text - .align 64 - .proc gmon_initializer# -gmon_initializer: - .prologue 12, 32 - .mmi - .save ar.pfs, r33 - alloc r33 = ar.pfs, 0, 3, 0, 0 - addl r14 = @ltoff(@fptr(PREINIT_FUNCTION#)), gp - .save rp, r32 - mov r32 = b0 - .mmi - mov r34 = r1 - .body - ;; - ld8 r14 = [r14] - nop 0 - ;; - .mib - cmp.eq p6, p7 = 0, r14 - nop 0 - (p6) br.cond.spnt .L1 - ;; - .mib - nop 0 - nop 0 - br.call.sptk.many b0 = PREINIT_FUNCTION# - ;; - .mmi - mov r1 = r34 - nop 0 - nop 0 -.L1: - .mii - nop 0 - mov ar.pfs = r33 - nop 0 - ;; - .mib - nop 0 - mov b0 = r32 - br.ret.sptk.many b0 - .endp gmon_initializer# -# undef PREINIT_FUNCTION -# define PREINIT_FUNCTION gmon_initializer -#endif - .section .init_array, "aw" - data8 @fptr(PREINIT_FUNCTION) - - .section .init,"ax",@progbits - .global _init# - .proc _init# -_init: - .prologue - .save ar.pfs, r34 - alloc r34 = ar.pfs, 0, 3, 0, 0 - .vframe r32 - mov r32 = r12 - .save rp, r33 - mov r33 = b0 - .body - adds r12 = -16, r12 - ;; /* see gmon_initializer() above */ - .endp _init# - - .section .fini,"ax",@progbits - .global _fini# - .proc _fini# -_fini: - .prologue - .save ar.pfs, r34 - alloc r34 = ar.pfs, 0, 3, 0, 0 - .vframe r32 - mov r32 = r12 - .save rp, r33 - mov r33 = b0 - .body - adds r12 = -16, r12 - ;; - .endp _fini# diff --git a/sysdeps/ia64/crtn.S b/sysdeps/ia64/crtn.S deleted file mode 100644 index 50a35d0683..0000000000 --- a/sysdeps/ia64/crtn.S +++ /dev/null @@ -1,69 +0,0 @@ -/* Special .init and .fini section support for ARM. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#undef ret - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .section .init,"ax",@progbits - .proc _init# -_init: - .prologue - .save ar.pfs, r34 - .vframe r32 - .save rp, r33 - .body - .regstk 0,2,0,0 - mov r12 = r32 - mov ar.pfs = r34 - mov b0 = r33 - br.ret.sptk.many b0 - .endp _init# - - .section .fini,"ax",@progbits - .proc _fini# -_fini: - .prologue - .save ar.pfs, r34 - .vframe r32 - .save rp, r33 - .body - mov r12 = r32 - mov ar.pfs = r34 - mov b0 = r33 - br.ret.sptk.many b0 - .endp _fini# diff --git a/sysdeps/ia64/dl-dtprocnum.h b/sysdeps/ia64/dl-dtprocnum.h deleted file mode 100644 index b61b019db1..0000000000 --- a/sysdeps/ia64/dl-dtprocnum.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Configuration of lookup functions. IA-64 version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Number of extra dynamic section entries for this architecture. By - default there are none. */ -#define DT_THISPROCNUM DT_IA_64_NUM diff --git a/sysdeps/ia64/dl-fptr.h b/sysdeps/ia64/dl-fptr.h deleted file mode 100644 index aa1aeb4ae1..0000000000 --- a/sysdeps/ia64/dl-fptr.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Function descriptors. IA64 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef dl_ia64_fptr_h -#define dl_ia64_fptr_h 1 - -#include -#include - -#define COMPARE_AND_SWAP(ptr, old, new) \ - __sync_bool_compare_and_swap (ptr, old, new) - -/* There are currently 123 dynamic symbols in ld.so. - ELF_MACHINE_BOOT_FPTR_TABLE_LEN needs to be at least that big. */ -#define ELF_MACHINE_BOOT_FPTR_TABLE_LEN 200 - -#define ELF_MACHINE_LOAD_ADDRESS(var, symbol) \ - asm ("movl %0 = @gprel (" #symbol ");; add %0 = %0, gp" : "=&r" (var)); - -/* We don't have a gcc helper to extract the plabel info. */ -#define ELF_PTR_TO_FDESC(ptr) \ - ({ union { \ - void *_ptr; \ - struct fdesc *_fdesc; \ - } _u; \ - _u._ptr = ptr; \ - _u._fdesc; \ - }) - -#endif /* !dl_ia64_fptr_h */ diff --git a/sysdeps/ia64/dl-lookupcfg.h b/sysdeps/ia64/dl-lookupcfg.h deleted file mode 100644 index accd01f813..0000000000 --- a/sysdeps/ia64/dl-lookupcfg.h +++ /dev/null @@ -1,76 +0,0 @@ -/* Configuration of lookup functions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define ELF_FUNCTION_PTR_IS_SPECIAL -#define DL_UNMAP_IS_SPECIAL - -#include - -/* We do not support copy relocations for IA-64. */ -#define DL_NO_COPY_RELOCS - -/* Forward declaration. */ -struct link_map; - -extern void *_dl_symbol_address (struct link_map *map, const Elf64_Sym *ref); -rtld_hidden_proto (_dl_symbol_address) - -#define DL_SYMBOL_ADDRESS(map, ref) _dl_symbol_address(map, ref) - -extern Elf64_Addr _dl_lookup_address (const void *address); - -#define DL_LOOKUP_ADDRESS(addr) _dl_lookup_address (addr) - -extern void attribute_hidden _dl_unmap (struct link_map *map); - -#define DL_UNMAP(map) _dl_unmap (map) - -#define DL_DT_FUNCTION_ADDRESS(map, start, attr, addr) \ - attr volatile unsigned long int fptr[2]; \ - fptr[0] = (unsigned long int) (start); \ - fptr[1] = (map)->l_info[DT_PLTGOT]->d_un.d_ptr; \ - addr = (ElfW(Addr)) fptr; \ - -#define DL_CALL_DT_INIT(map, start, argc, argv, env) \ -{ \ - ElfW(Addr) addr; \ - DL_DT_FUNCTION_ADDRESS(map, start, , addr) \ - init_t init = (init_t) addr; \ - init (argc, argv, env); \ -} - -#define DL_CALL_DT_FINI(map, start) \ -{ \ - ElfW(Addr) addr; \ - DL_DT_FUNCTION_ADDRESS(map, start, , addr) \ - fini_t fini = (fini_t) addr; \ - fini (); \ -} - -/* The type of the return value of fixup/profile_fixup. */ -#define DL_FIXUP_VALUE_TYPE struct fdesc -/* Construct a value of type DL_FIXUP_VALUE_TYPE from a code address - and a link map. */ -#define DL_FIXUP_MAKE_VALUE(map, addr) \ - ((struct fdesc) { (addr), (map)->l_info[DT_PLTGOT]->d_un.d_ptr }) -/* Extract the code address from a value of type DL_FIXUP_MAKE_VALUE. - */ -#define DL_FIXUP_VALUE_CODE_ADDR(value) (value).ip - -#define DL_FIXUP_VALUE_ADDR(value) ((uintptr_t) &(value)) -#define DL_FIXUP_ADDR_VALUE(addr) (*(struct fdesc *) (addr)) diff --git a/sysdeps/ia64/dl-machine.h b/sysdeps/ia64/dl-machine.h deleted file mode 100644 index 9c08161d65..0000000000 --- a/sysdeps/ia64/dl-machine.h +++ /dev/null @@ -1,511 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. IA-64 version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h 1 - -#define ELF_MACHINE_NAME "ia64" - -#include -#include -#include -#include -#include -#include - -/* Translate a processor specific dynamic tag to the index - in l_info array. */ -#define DT_IA_64(x) (DT_IA_64_##x - DT_LOPROC + DT_NUM) - -static inline void __attribute__ ((always_inline)) -__ia64_init_bootstrap_fdesc_table (struct link_map *map) -{ - Elf64_Addr *boot_table; - - /* careful: this will be called before got has been relocated... */ - asm (";; addl %0 = @gprel (_dl_boot_fptr_table), gp" : "=r"(boot_table)); - - map->l_mach.fptr_table_len = ELF_MACHINE_BOOT_FPTR_TABLE_LEN; - map->l_mach.fptr_table = boot_table; -} - -#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) \ - __ia64_init_bootstrap_fdesc_table (&bootstrap_map); - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int __attribute__ ((unused)) -elf_machine_matches_host (const Elf64_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_IA_64; -} - - -/* Return the link-time address of _DYNAMIC. */ -static inline Elf64_Addr __attribute__ ((unused, const)) -elf_machine_dynamic (void) -{ - Elf64_Addr *p; - - __asm__ ( - ".section .sdata\n" - " .type __dynamic_ltv#, @object\n" - " .size __dynamic_ltv#, 8\n" - "__dynamic_ltv:\n" - " data8 @ltv(_DYNAMIC#)\n" - ".previous\n" - " addl %0 = @gprel(__dynamic_ltv#), gp ;;" - : "=r" (p)); - - return *p; -} - - -/* Return the run-time load address of the shared object. */ -static inline Elf64_Addr __attribute__ ((unused)) -elf_machine_load_address (void) -{ - Elf64_Addr ip; - int *p; - - __asm__ ( - "1: mov %0 = ip\n" - ".section .sdata\n" - "2: data4 @ltv(1b)\n" - " .align 8\n" - ".previous\n" - " addl %1 = @gprel(2b), gp ;;" - : "=r" (ip), "=r" (p)); - - return ip - (Elf64_Addr) *p; -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int __attribute__ ((unused, always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - extern void _dl_runtime_resolve (void); - extern void _dl_runtime_profile (void); - - if (lazy) - { - register Elf64_Addr gp __asm__ ("gp"); - Elf64_Addr *reserve, doit; - - /* - * Careful with the typecast here or it will try to add l-l_addr - * pointer elements - */ - reserve = ((Elf64_Addr *) - (l->l_info[DT_IA_64 (PLT_RESERVE)]->d_un.d_ptr + l->l_addr)); - /* Identify this shared object. */ - reserve[0] = (Elf64_Addr) l; - - /* This function will be called to perform the relocation. */ - if (!profile) - doit = (Elf64_Addr) ELF_PTR_TO_FDESC (&_dl_runtime_resolve)->ip; - else - { - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - { - /* This is the object we are looking for. Say that we really - want profiling and the timers are started. */ - GL(dl_profile_map) = l; - } - doit = (Elf64_Addr) ELF_PTR_TO_FDESC (&_dl_runtime_profile)->ip; - } - - reserve[1] = doit; - reserve[2] = gp; - } - - return lazy; -} - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER ia64_gnu_pltenter -#define ARCH_LA_PLTEXIT ia64_gnu_pltexit - -/* Undo the adds out0 = 16, sp below to get at the value we want in - __libc_stack_end. */ -#define DL_STACK_END(cookie) \ - ((void *) (((long) (cookie)) - 16)) - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START asm ( \ -".text\n" \ -" .global _start#\n" \ -" .proc _start#\n" \ -"_start:\n" \ -"0: { .mii\n" \ -" .prologue\n" \ -" .save rp, r0\n" \ -" .body\n" \ -" .prologue\n" \ -" .save ar.pfs, r32\n" \ -" alloc loc0 = ar.pfs, 0, 3, 4, 0\n" \ -" .body\n" \ -" mov r2 = ip\n" \ -" addl r3 = @gprel(0b), r0\n" \ -" ;;\n" \ -" }\n" \ -" { .mlx\n" \ -" /* Calculate the GP, and save a copy in loc1. */\n" \ -" sub gp = r2, r3\n" \ -" movl r8 = 0x9804c0270033f\n" \ -" ;;\n" \ -" }\n" \ -" { .mii\n" \ -" mov ar.fpsr = r8\n" \ -" sub loc1 = r2, r3\n" \ -" /* _dl_start wants a pointer to the pointer to the arg block and\n" \ -" the arg block starts with an integer, thus the magic 16. */\n" \ -" adds out0 = 16, sp\n" \ -" }\n" \ -" { .bbb\n" \ -" br.call.sptk.many b0 = _dl_start#\n" \ -" ;;\n" \ -" }\n" \ -" .endp _start#\n" \ -" /* FALLTHRU */\n" \ -" .global _dl_start_user#\n" \ -" .proc _dl_start_user#\n" \ -"_dl_start_user:\n" \ -" .prologue\n" \ -" .save rp, r0\n" \ -" .body\n" \ -" .prologue\n" \ -" .save ar.pfs, r32\n" \ -" .body\n" \ -" { .mii\n" \ -" addl r3 = @gprel(_dl_skip_args), gp\n" \ -" adds r11 = 24, sp /* Load the address of argv. */\n" \ -" /* Save the pointer to the user entry point fptr in loc2. */\n" \ -" mov loc2 = ret0\n" \ -" ;;\n" \ -" }\n" \ -" { .mii\n" \ -" ld4 r3 = [r3]\n" \ -" adds r10 = 16, sp /* Load the address of argc. */\n" \ -" mov out2 = r11\n" \ -" ;;\n" \ -" /* See if we were run as a command with the executable file\n" \ -" name as an extra leading argument. If so, adjust the argv\n" \ -" pointer to skip _dl_skip_args words.\n" \ -" Note that _dl_skip_args is an integer, not a long - Jes\n" \ -"\n" \ -" The stack pointer has to be 16 byte aligned. We cannot simply\n" \ -" addjust the stack pointer. We have to move the whole argv and\n" \ -" envp and adjust _dl_argv by _dl_skip_args. H.J. */\n" \ -" }\n" \ -" { .mib\n" \ -" ld8 out1 = [r10] /* is argc actually stored as a long\n" \ -" or as an int? */\n" \ -" addl r2 = @ltoff(_dl_argv), gp\n" \ -" ;;\n" \ -" }\n" \ -" { .mmi\n" \ -" ld8 r2 = [r2] /* Get the address of _dl_argv. */\n" \ -" sub out1 = out1, r3 /* Get the new argc. */\n" \ -" shladd r3 = r3, 3, r0\n" \ -" ;;\n" \ -" }\n" \ -" {\n" \ -" .mib\n" \ -" ld8 r17 = [r2] /* Get _dl_argv. */\n" \ -" add r15 = r11, r3 /* The address of the argv we move */\n" \ -" ;;\n" \ -" }\n" \ -" /* ??? Could probably merge these two loops into 3 bundles.\n" \ -" using predication to control which set of copies we're on. */\n" \ -"1: /* Copy argv. */\n" \ -" { .mfi\n" \ -" ld8 r16 = [r15], 8 /* Load the value in the old argv. */\n" \ -" ;;\n" \ -" }\n" \ -" { .mib\n" \ -" st8 [r11] = r16, 8 /* Store it in the new argv. */\n" \ -" cmp.ne p6, p7 = 0, r16\n" \ -"(p6) br.cond.dptk.few 1b\n" \ -" ;;\n" \ -" }\n" \ -" { .mmi\n" \ -" mov out3 = r11\n" \ -" sub r17 = r17, r3 /* Substract _dl_skip_args. */\n" \ -" addl out0 = @gprel(_rtld_local), gp\n" \ -" }\n" \ -"1: /* Copy env. */\n" \ -" { .mfi\n" \ -" ld8 r16 = [r15], 8 /* Load the value in the old env. */\n" \ -" ;;\n" \ -" }\n" \ -" { .mib\n" \ -" st8 [r11] = r16, 8 /* Store it in the new env. */\n" \ -" cmp.ne p6, p7 = 0, r16\n" \ -"(p6) br.cond.dptk.few 1b\n" \ -" ;;\n" \ -" }\n" \ -" { .mmb\n" \ -" st8 [r10] = out1 /* Record the new argc. */\n" \ -" ld8 out0 = [out0] /* get the linkmap */\n" \ -" }\n" \ -" { .mmb\n" \ -" st8 [r2] = r17 /* Load the new _dl_argv. */\n" \ -" br.call.sptk.many b0 = _dl_init#\n" \ -" ;;\n" \ -" }\n" \ -" /* Pass our finalizer function to the user,\n" \ -" and jump to the user's entry point. */\n" \ -" { .mmi\n" \ -" ld8 r3 = [loc2], 8\n" \ -" mov b0 = r0\n" \ -" }\n" \ -" { .mmi\n" \ -" addl ret0 = @ltoff(@fptr(_dl_fini#)), gp\n" \ -" ;;\n" \ -" mov b6 = r3\n" \ -" }\n" \ -" { .mmi\n" \ -" ld8 ret0 = [ret0]\n" \ -" ld8 gp = [loc2]\n" \ -" mov ar.pfs = loc0\n" \ -" ;;\n" \ -" }\n" \ -" { .mfb\n" \ -" br.sptk.many b6\n" \ -" ;;\n" \ -" }\n" \ -" .endp _dl_start_user#\n" \ -".previous\n"); - - -#ifndef RTLD_START_SPECIAL_INIT -#define RTLD_START_SPECIAL_INIT /* nothing */ -#endif - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or TLS - variable, so undefined references should not be allowed to define the - value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc, which we don't - use. */ -/* ??? Ignore *MSB for now. */ -#define elf_machine_type_class(type) \ - (((type) == R_IA64_IPLTLSB || (type) == R_IA64_DTPMOD64LSB \ - || (type) == R_IA64_DTPREL64LSB || (type) == R_IA64_TPREL64LSB) \ - * ELF_RTYPE_CLASS_PLT) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_IA64_IPLTLSB - -/* According to the IA-64 specific documentation, Rela is always used. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -/* Return the address of the entry point. */ -#define ELF_MACHINE_START_ADDRESS(map, start) \ -({ \ - ElfW(Addr) addr; \ - DL_DT_FUNCTION_ADDRESS(map, start, static, addr) \ - addr; \ -}) - -/* Fixup a PLT entry to bounce directly to the function at VALUE. */ -static inline struct fdesc __attribute__ ((always_inline)) -elf_machine_fixup_plt (struct link_map *l, lookup_t t, - const Elf64_Rela *reloc, - Elf64_Addr *reloc_addr, struct fdesc value) -{ - /* l is the link_map for the caller, t is the link_map for the object - * being called */ - /* got has already been relocated in elf_get_dynamic_info() */ - reloc_addr[1] = value.gp; - /* we need a "release" here to ensure that the gp is visible before - the code entry point is updated: */ - ((volatile Elf64_Addr *) reloc_addr)[0] = value.ip; - return value; -} - -/* Return the final value of a plt relocation. */ -static inline struct fdesc -elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc, - struct fdesc value) -{ - /* No need to handle rel vs rela since IA64 is rela only */ - return (struct fdesc) { value.ip + reloc->r_addend, value.gp }; -} - -#endif /* !dl_machine_h */ - -#ifdef RESOLVE_MAP - -#define R_IA64_TYPE(R) ((R) & -8) -#define R_IA64_FORMAT(R) ((R) & 7) - -#define R_IA64_FORMAT_32MSB 4 -#define R_IA64_FORMAT_32LSB 5 -#define R_IA64_FORMAT_64MSB 6 -#define R_IA64_FORMAT_64LSB 7 - - -/* Perform the relocation specified by RELOC and SYM (which is fully - resolved). MAP is the object containing the reloc. */ -auto inline void -__attribute ((always_inline)) -elf_machine_rela (struct link_map *map, - const Elf64_Rela *reloc, - const Elf64_Sym *sym, - const struct r_found_version *version, - void *const reloc_addr_arg, - int skip_ifunc) -{ - Elf64_Addr *const reloc_addr = reloc_addr_arg; - const unsigned long int r_type = ELF64_R_TYPE (reloc->r_info); - Elf64_Addr value; - -#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED - /* This is defined in rtld.c, but nowhere in the static libc.a; make the - reference weak so static programs can still link. This declaration - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) - because rtld.c contains the common defn for _dl_rtld_map, which is - incompatible with a weak decl in the same file. */ - weak_extern (_dl_rtld_map); -#endif - - /* We cannot use a switch here because we cannot locate the switch - jump table until we've self-relocated. */ - -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC - if (__builtin_expect (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_REL64LSB), - 0)) - { - assert (ELF64_R_TYPE (reloc->r_info) == R_IA64_REL64LSB); - value = *reloc_addr; -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* Already done in dynamic linker. */ - if (map != &GL(dl_rtld_map)) -# endif - value += map->l_addr; - } - else -#endif - if (__builtin_expect (r_type == R_IA64_NONE, 0)) - return; - else - { - struct link_map *sym_map; - - /* RESOLVE_MAP() will return NULL if it fail to locate the symbol. */ - if ((sym_map = RESOLVE_MAP (&sym, version, r_type))) - { - value = sym_map->l_addr + sym->st_value + reloc->r_addend; - - if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_DIR64LSB)) - ;/* No adjustment. */ - else if (r_type == R_IA64_IPLTLSB) - { - elf_machine_fixup_plt (NULL, NULL, reloc, reloc_addr, - DL_FIXUP_MAKE_VALUE (sym_map, value)); - return; - } - else if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_FPTR64LSB)) - value = _dl_make_fptr (sym_map, sym, value); - else if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_PCREL64LSB)) - value -= (Elf64_Addr) reloc_addr & -16; - else if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_DTPMOD64LSB)) -#ifdef RTLD_BOOTSTRAP - /* During startup the dynamic linker is always index 1. */ - value = 1; -#else - /* Get the information from the link map returned by the - resolv function. */ - value = sym_map->l_tls_modid; - else if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_DTPREL64LSB)) - value -= sym_map->l_addr; -#endif - else if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_TPREL64LSB)) - { -#ifndef RTLD_BOOTSTRAP - CHECK_STATIC_TLS (map, sym_map); -#endif - value += sym_map->l_tls_offset - sym_map->l_addr; - } - else - _dl_reloc_bad_type (map, r_type, 0); - } - else - value = 0; - } - - /* ??? Ignore MSB and Instruction format for now. */ - if (R_IA64_FORMAT (r_type) == R_IA64_FORMAT_64LSB) - *reloc_addr = value; - else if (R_IA64_FORMAT (r_type) == R_IA64_FORMAT_32LSB) - *(int *) reloc_addr = value; - else if (r_type == R_IA64_IPLTLSB) - { - reloc_addr[0] = 0; - reloc_addr[1] = 0; - } - else - _dl_reloc_bad_type (map, r_type, 0); -} - -/* Let do-rel.h know that on IA-64 if l_addr is 0, all RELATIVE relocs - can be skipped. */ -#define ELF_MACHINE_REL_RELATIVE 1 - -auto inline void -__attribute ((always_inline)) -elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, - void *const reloc_addr_arg) -{ - Elf64_Addr *const reloc_addr = reloc_addr_arg; - /* ??? Ignore MSB and Instruction format for now. */ - assert (ELF64_R_TYPE (reloc->r_info) == R_IA64_REL64LSB); - - *reloc_addr += l_addr; -} - -/* Perform a RELATIVE reloc on the .got entry that transfers to the .plt. */ -auto inline void -__attribute ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf64_Addr l_addr, const Elf64_Rela *reloc, - int skip_ifunc) -{ - Elf64_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); - const unsigned long int r_type = ELF64_R_TYPE (reloc->r_info); - - if (r_type == R_IA64_IPLTLSB) - { - reloc_addr[0] += l_addr; - reloc_addr[1] += l_addr; - } - else if (r_type == R_IA64_NONE) - return; - else - _dl_reloc_bad_type (map, r_type, 1); -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/ia64/dl-sysdep.h b/sysdeps/ia64/dl-sysdep.h deleted file mode 100644 index 7675e0ad3d..0000000000 --- a/sysdeps/ia64/dl-sysdep.h +++ /dev/null @@ -1,23 +0,0 @@ -/* System-specific settings for dynamic linker code. IA-64 version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include_next - -/* _dl_argv cannot be attribute_relro, because _dl_start_user - might write into it after _dl_start returns. */ -#define DL_ARGV_NOT_RELRO 1 diff --git a/sysdeps/ia64/dl-tls.h b/sysdeps/ia64/dl-tls.h deleted file mode 100644 index 2ad87a2e34..0000000000 --- a/sysdeps/ia64/dl-tls.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. IA-64 version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* On IA-64 the __tls_get_addr function take the module ID and the - offset as parameters. */ -#define GET_ADDR_ARGS size_t tls_ia64_m, size_t tls_ia64_offset -#define GET_ADDR_PARAM tls_ia64_m, tls_ia64_offset -#define GET_ADDR_MODULE tls_ia64_m -#define GET_ADDR_OFFSET tls_ia64_offset - -/* We have no tls_index type. */ -#define DONT_USE_TLS_INDEX 1 - -extern void *__tls_get_addr (size_t m, size_t offset); diff --git a/sysdeps/ia64/dl-trampoline.S b/sysdeps/ia64/dl-trampoline.S deleted file mode 100644 index c4246d73d5..0000000000 --- a/sysdeps/ia64/dl-trampoline.S +++ /dev/null @@ -1,538 +0,0 @@ -/* PLT trampolines. ia64 version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#undef ret - -/* - This code is used in dl-runtime.c to call the `_dl_fixup' function - and then redirect to the address it returns. `_dl_fixup()' takes two - arguments, however _dl_profile_fixup() takes five. - - The ABI specifies that we will never see more than 8 input - registers to a function call, thus it is safe to simply allocate - those, and simpler than playing stack games. */ - -/* Used to save and restore 8 incoming fp registers */ -#define RESOLVE_FRAME_SIZE (16*8) - -ENTRY(_dl_runtime_resolve) - { .mmi - .prologue - .save ar.pfs, r40 - alloc loc0 = ar.pfs, 8, 6, 2, 0 - /* Use the 16 byte scratch area. r2 will start at f8 and - r3 will start at f9. */ - adds r2 = -(RESOLVE_FRAME_SIZE - 16), r12 - adds r3 = -(RESOLVE_FRAME_SIZE - 32), r12 - } - { .mii - .fframe RESOLVE_FRAME_SIZE - adds r12 = -RESOLVE_FRAME_SIZE, r12 - .save rp, loc1 - mov loc1 = b0 - .body - mov loc2 = r8 /* preserve struct value register */ - ;; - } - { .mii - mov loc3 = r9 /* preserve language specific register */ - mov loc4 = r10 /* preserve language specific register */ - mov loc5 = r11 /* preserve language specific register */ - } - { .mmi - stf.spill [r2] = f8, 32 - stf.spill [r3] = f9, 32 - mov out0 = r16 - ;; - } - { .mmi - stf.spill [r2] = f10, 32 - stf.spill [r3] = f11, 32 - shl out1 = r15, 4 - ;; - } - { .mmi - stf.spill [r2] = f12, 32 - stf.spill [r3] = f13, 32 - /* Relocation record is 24 byte. */ - shladd out1 = r15, 3, out1 - ;; - } - { .mmb - stf.spill [r2] = f14 - stf.spill [r3] = f15 - br.call.sptk.many b0 = _dl_fixup - } - { .mii - /* Skip the 16byte scratch area. */ - adds r2 = 16, r12 - adds r3 = 32, r12 - mov b6 = ret0 - ;; - } - { .mmi - ldf.fill f8 = [r2], 32 - ldf.fill f9 = [r3], 32 - mov b0 = loc1 - ;; - } - { .mmi - ldf.fill f10 = [r2], 32 - ldf.fill f11 = [r3], 32 - mov gp = ret1 - ;; - } - { .mmi - ldf.fill f12 = [r2], 32 - ldf.fill f13 = [r3], 32 - mov ar.pfs = loc0 - ;; - } - { .mmi - ldf.fill f14 = [r2], 32 - ldf.fill f15 = [r3], 32 - .restore sp /* pop the unwind frame state */ - adds r12 = RESOLVE_FRAME_SIZE, r12 - ;; - } - { .mii - mov r9 = loc3 /* restore language specific register */ - mov r10 = loc4 /* restore language specific register */ - mov r11 = loc5 /* restore language specific register */ - } - { .mii - mov r8 = loc2 /* restore struct value register */ - ;; - } - /* An alloc is needed for the break system call to work. - We don't care about the old value of the pfs register. */ - { .mmb - .prologue - .body - alloc r2 = ar.pfs, 0, 0, 8, 0 - br.sptk.many b6 - ;; - } -END(_dl_runtime_resolve) - - -/* The fourth argument to _dl_profile_fixup and the third one to - _dl_call_pltexit are a pointer to La_ia64_regs: - - 8byte r8 - 8byte r9 - 8byte r10 - 8byte r11 - 8byte in0 - 8byte in1 - 8byte in2 - 8byte in3 - 8byte in4 - 8byte in5 - 8byte in6 - 8byte in7 - 16byte f8 - 16byte f9 - 16byte f10 - 16byte f11 - 16byte f12 - 16byte f13 - 16byte f14 - 16byte f15 - 8byte ar.unat - 8byte sp - - The fifth argument to _dl_profile_fixup is a pointer to long int. - The fourth argument to _dl_call_pltexit is a pointer to - La_ia64_retval: - - 8byte r8 - 8byte r9 - 8byte r10 - 8byte r11 - 16byte f8 - 16byte f9 - 16byte f10 - 16byte f11 - 16byte f12 - 16byte f13 - 16byte f14 - 16byte f15 - - Since stack has to be 16 byte aligned, the stack allocation is in - 16byte increment. Before calling _dl_profile_fixup, the stack will - look like - - psp new frame_size - +16 La_ia64_regs - sp scratch - - */ - -#define PLTENTER_FRAME_SIZE (4*8 + 8*8 + 8*16 + 2*8 + 16) -#define PLTEXIT_FRAME_SIZE (PLTENTER_FRAME_SIZE + 4*8 + 8*16) - -#ifndef PROF -ENTRY(_dl_runtime_profile) - { .mii - .prologue - .save ar.pfs, r40 - alloc loc0 = ar.pfs, 8, 12, 8, 0 - .vframe loc10 - mov loc10 = r12 - .save rp, loc1 - mov loc1 = b0 - } - { .mii - .save ar.unat, r17 - mov r17 = ar.unat - .save ar.lc, loc6 - mov loc6 = ar.lc - mov loc11 = gp - } - { .mii - .body - /* There is a 16 byte scratch area. r2 will start at r8 and - r3 will start at r9 for La_ia64_regs. */ - adds r2 = -(PLTENTER_FRAME_SIZE - 16), r12 - adds r3 = -(PLTENTER_FRAME_SIZE - 24), r12 - adds r12 = -PLTENTER_FRAME_SIZE, r12 - ;; - } - { .mmi - st8 [r2] = r8, 16; - st8 [r3] = r9, 16; - mov out2 = b0 /* needed by _dl_fixup_profile */ - ;; - } - { .mmi - st8 [r2] = r10, 16; - st8 [r3] = r11, 16; - adds out3 = 16, r12 /* pointer to La_ia64_regs */ - ;; - } - { .mmi - .mem.offset 0, 0 - st8.spill [r2] = in0, 16 - .mem.offset 8, 0 - st8.spill [r3] = in1, 16 - mov out4 = loc10 /* pointer to new frame size */ - ;; - } - { .mmi - .mem.offset 0, 0 - st8.spill [r2] = in2, 16 - .mem.offset 8, 0 - st8.spill [r3] = in3, 16 - mov loc2 = r8 /* preserve struct value register */ - ;; - } - { .mmi - .mem.offset 0, 0 - st8.spill [r2] = in4, 16 - .mem.offset 8, 0 - st8.spill [r3] = in5, 16 - mov loc3 = r9 /* preserve language specific register */ - ;; - } - { .mmi - .mem.offset 0, 0 - st8 [r2] = in6, 16 - .mem.offset 8, 0 - st8 [r3] = in7, 24 /* adjust for f9 */ - mov loc4 = r10 /* preserve language specific register */ - ;; - } - { .mii - mov r18 = ar.unat /* save it in La_ia64_regs */ - mov loc7 = out3 /* save it for _dl_call_pltexit */ - mov loc5 = r11 /* preserve language specific register */ - } - { .mmi - stf.spill [r2] = f8, 32 - stf.spill [r3] = f9, 32 - mov out0 = r16 /* needed by _dl_fixup_profile */ - ;; - } - { .mii - mov ar.unat = r17 /* restore it for function call */ - mov loc8 = r16 /* save it for _dl_call_pltexit */ - nop.i 0x0 - } - { .mmi - stf.spill [r2] = f10, 32 - stf.spill [r3] = f11, 32 - shl out1 = r15, 4 - ;; - } - { .mmi - stf.spill [r2] = f12, 32 - stf.spill [r3] = f13, 32 - /* Relocation record is 24 byte. */ - shladd out1 = r15, 3, out1 - ;; - } - { .mmi - stf.spill [r2] = f14, 32 - stf.spill [r3] = f15, 24 - mov loc9 = out1 /* save it for _dl_call_pltexit */ - ;; - } - { .mmb - st8 [r2] = r18 /* store ar.unat */ - st8 [r3] = loc10 /* store sp */ - br.call.sptk.many b0 = _dl_profile_fixup - } - { .mii - /* Skip the 16byte scratch area, 4 language specific GRs and - 8 incoming GRs to restore incoming fp registers. */ - adds r2 = (4*8 + 8*8 + 16), r12 - adds r3 = (4*8 + 8*8 + 32), r12 - mov b6 = ret0 - ;; - } - { .mmi - ldf.fill f8 = [r2], 32 - ldf.fill f9 = [r3], 32 - mov gp = ret1 - ;; - } - { .mmi - ldf.fill f10 = [r2], 32 - ldf.fill f11 = [r3], 32 - mov r8 = loc2 /* restore struct value register */ - ;; - } - { .mmi - ldf.fill f12 = [r2], 32 - ldf.fill f13 = [r3], 32 - mov r9 = loc3 /* restore language specific register */ - ;; - } - { .mmi - ldf.fill f14 = [r2], 32 - ldf.fill f15 = [r3], 32 - mov r10 = loc4 /* restore language specific register */ - ;; - } - { .mii - ld8 r15 = [loc10] /* load the new frame size */ - mov r11 = loc5 /* restore language specific register */ - ;; - cmp.eq p6, p7 = -1, r15 - ;; - } - { .mii -(p7) cmp.eq p8, p9 = 0, r15 -(p6) mov b0 = loc1 -(p6) mov ar.lc = loc6 - } - { .mib - nop.m 0x0 -(p6) mov ar.pfs = loc0 -(p6) br.cond.dptk.many .Lresolved - ;; - } - - /* At this point, the stack looks like - - +psp free - +16 La_ia64_regs - sp scratch - - We need to keep the current stack and call the resolved - function by copying the r15 byte from sp + PLTENTER_FRAME_SIZE - + 16 (scratch area) to sp + 16 (scratch area). Since stack - has to be 16byte aligned, we around r15 up to 16byte. */ - - { .mbb -(p9) adds r15 = 15, r15 -(p8) br.cond.dptk.many .Lno_new_frame - nop.b 0x0 - ;; - } - { .mmi - and r15 = -16, r15 - ;; - /* We don't copy the 16byte scatch area. Prepare r16/r17 as - destination. */ - sub r16 = r12, r15 - sub r17 = r12, r15 - ;; - } - { .mii - adds r16 = 16, r16 - adds r17 = 24, r17 - sub r12 = r12, r15 /* Adjust stack */ - ;; - } - { .mii - nop.m 0x0 - shr r15 = r15, 4 - ;; - adds r15 = -1, r15 - ;; - } - { .mii - /* Skip the 16byte scatch area. Prepare r2/r3 as source. */ - adds r2 = 16, loc10 - adds r3 = 24, loc10 - mov ar.lc = r15 - ;; - } -.Lcopy: - { .mmi - ld8 r18 = [r2], 16 - ld8 r19 = [r3], 16 - nop.i 0x0 - ;; - } - { .mmb - st8 [r16] = r18, 16 - st8 [r17] = r19, 16 - br.cloop.sptk.few .Lcopy - } -.Lno_new_frame: - { .mii - mov out0 = in0 - mov out1 = in1 - mov out2 = in2 - } - { .mii - mov out3 = in3 - mov out4 = in4 - mov out5 = in5 - } - { .mib - mov out6 = in6 - mov out7 = in7 - /* Call the resolved function */ - br.call.sptk.many b0 = b6 - } - { .mii - /* Prepare stack for _dl_call_pltexit. Loc10 has the original - stack pointer. */ - adds r12 = -PLTEXIT_FRAME_SIZE, loc10 - adds r2 = -(PLTEXIT_FRAME_SIZE - 16), loc10 - adds r3 = -(PLTEXIT_FRAME_SIZE - 24), loc10 - ;; - } - { .mmi - /* Load all possible return values into buffer. */ - st8 [r2] = r8, 16 - st8 [r3] = r9, 16 - mov out0 = loc8 - ;; - } - { .mmi - st8 [r2] = r10, 16 - st8 [r3] = r11, 24 - mov out1 = loc9 - ;; - } - { .mmi - stf.spill [r2] = f8, 32 - stf.spill [r3] = f9, 32 - mov out2 = loc7 /* Pointer to La_ia64_regs */ - ;; - } - { .mmi - stf.spill [r2] = f10, 32 - stf.spill [r3] = f11, 32 - adds out3 = 16, r12 /* Pointer to La_ia64_retval */ - ;; - } - { .mmi - stf.spill [r2] = f12, 32 - stf.spill [r3] = f13, 32 - /* We need to restore gp for _dl_call_pltexit. */ - mov gp = loc11 - ;; - } - { .mmb - stf.spill [r2] = f14 - stf.spill [r3] = f15 - br.call.sptk.many b0 = _dl_call_pltexit - } - { .mmi - /* Load all the non-floating and floating return values. Skip - the 16byte scratch area. */ - adds r2 = 16, r12 - adds r3 = 24, r12 - nop.i 0x0 - ;; - } - { .mmi - ld8 r8 = [r2], 16 - ld8 r9 = [r3], 16 - nop.i 0x0 - ;; - } - { .mmi - ld8 r10 = [r2], 16 - ld8 r11 = [r3], 24 - nop.i 0x0 - ;; - } - { .mmi - ldf.fill f8 = [r2], 32 - ldf.fill f9 = [r3], 32 - mov ar.lc = loc6 - ;; - } - { .mmi - ldf.fill f10 = [r2], 32 - ldf.fill f11 = [r3], 32 - mov ar.pfs = loc0 - ;; - } - { .mmi - ldf.fill f12 = [r2], 32 - ldf.fill f13 = [r3], 32 - mov b0 = loc1 - ;; - } - { .mmi - ldf.fill f14 = [r2] - ldf.fill f15 = [r3] - /* We know that the previous stack pointer, loc10, isn't 0. - We use it to reload p7. */ - cmp.ne p7, p0 = 0, loc10 - ;; - } -.Lresolved: - { .mmb - .restore sp - mov r12 = loc10 -(p7) br.ret.sptk.many b0 - ;; - } - /* An alloc is needed for the break system call to work. We - don't care about the old value of the pfs register. After - this alloc, we can't use any rotating registers. Otherwise - assembler won't be happy. This has to be at the end. */ - { .mmb - .prologue - .body - alloc r2 = ar.pfs, 0, 0, 8, 0 - br.sptk.many b6 - ;; - } -END(_dl_runtime_profile) -#endif diff --git a/sysdeps/ia64/entry.h b/sysdeps/ia64/entry.h deleted file mode 100644 index e11b49fc53..0000000000 --- a/sysdeps/ia64/entry.h +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include - -#ifndef __ASSEMBLY__ -extern void _start (void); -#endif - -/* The function's entry point is stored in the first word of the - function descriptor (plabel) of _start(). */ -#define ENTRY_POINT ELF_PTR_TO_FDESC (_start)->ip - -/* We have to provide a special declaration. */ -#define ENTRY_POINT_DECL(class) class void _start (void); diff --git a/sysdeps/ia64/fpu/Makefile b/sysdeps/ia64/fpu/Makefile deleted file mode 100644 index 384fc836af..0000000000 --- a/sysdeps/ia64/fpu/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -ifeq ($(subdir),math) -# -# Some files which need to go both into libc and libm have external -# dependencies which need to be resolved differently for libc -# vs. libm. For example, inside libc, __libm_error_support needs to -# resolve to HIDDEN_JUMPTARGET(__libm_error_support) whereas within -# libm it always resolves to __libm_error_support. Such files need to -# be compiled twice. Fortunately, math/Makefile already has logic to -# support this: if a file starts with "s_", make will automatically -# generate a matching file whose name starts with "m_" which simply -# includes the corresponding "s_" file. -# -duplicated-routines = s_libm_ldexp s_libm_ldexpf s_libm_ldexpl \ - s_libm_scalbn s_libm_scalbnf s_libm_scalbnl - -libm-sysdep_routines += s_erfc s_erfcf s_erfcl \ - s_matherrf s_matherrl libm_reduce \ - libm_error \ - libm_frexp libm_frexpf libm_frexpl \ - libm_sincos libm_sincosf libm_sincosl \ - libm_sincos_large \ - libm_lgamma libm_lgammaf libm_lgammal \ - libm_scalblnf \ - $(duplicated-routines:s_%=m_%) - -sysdep_routines += libc_libm_error libm_frexp libm_frexpf libm_frexpl \ - $(duplicated-routines) - -sysdep-CPPFLAGS += -include libm-symbols.h \ - -D__POSIX__ -Dopensource \ - -D_LIB_VERSIONIMF=_LIB_VERSION \ - -DSIZE_INT_32 -DSIZE_LONG_INT_64 -DSIZE_LONG_LONG_INT_64 \ - -DSIZE_LONG_64 -DIA64 -endif diff --git a/sysdeps/ia64/fpu/README b/sysdeps/ia64/fpu/README deleted file mode 100644 index 6f4af0678a..0000000000 --- a/sysdeps/ia64/fpu/README +++ /dev/null @@ -1,50 +0,0 @@ - ---------------------------------------------------------- - Notes on how to update libm based on Intel's libm releases - ---------------------------------------------------------- - -This source code in this directory is currently based on Intel libm -v2.1 as available from: - - http://www.intel.com/software/products/opensource/libraries/num.htm - -To ease importing, fix some bugs, and simplify integration into libc, -it is also necessary to apply the patch at: - - ftp://ftp.hpl.hp.com/pub/linux-ia64/intel-libm-041228.diff.gz - -The expectation is that Intel will integrate most if not all of these -changes into future releases of libm, so this patching step can -hopefully be omitted in the future. - -Once the patched libm sources are extracted in a directory $LIBM, they -can be imported into the libc source tree at $LIBC with the following -step: - - $ cd $LIBC/src/sysdep/ia64/fpu - $ ./import_intel_libm $LIBM - -This should produce a number of "Importing..." messages, without -showing any errors. - -At this point, you should be able to build glibc in the usual fashion. -We assume you do this in directory $OBJ. Once the build has -completed, run "make check" to verify that all (math) checks succeed. -If these checks succeed, you should also run the following commands to -verify that the new libm doesn't pollute the name-space and has proper -size-info for the data objects: - - $ cd $LIBC/src/sysdep/ia64/fpu - $ import_check $OBJ/math/ - -There should be no (unexpected) errors reported by this script. - -As an optional step, you may also want to confirm that the new libm -exports the exact same global symbols as the old one. - -If you want to see the changes introduced by the "import_intel_libm" -script, you can run the commands: - - $ cd $LIBC/src/sysdep/ia64/fpu - $ import_diffs - -That's it. diff --git a/sysdeps/ia64/fpu/Versions b/sysdeps/ia64/fpu/Versions deleted file mode 100644 index 1faea6458d..0000000000 --- a/sysdeps/ia64/fpu/Versions +++ /dev/null @@ -1,10 +0,0 @@ -libc { - GLIBC_PRIVATE { - __libm_frexp_4; __libm_frexp_4f; __libm_frexp_4l; __libm_error_support; - } -} -libm { - GLIBC_2.2.3 { - matherrf; matherrl; - } -} diff --git a/sysdeps/ia64/fpu/bits/math-finite.h b/sysdeps/ia64/fpu/bits/math-finite.h deleted file mode 100644 index b3c25d45cf..0000000000 --- a/sysdeps/ia64/fpu/bits/math-finite.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Entry points to finite-math-only compiler runs. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -/* Nothing can be done for IA-64 since the math functions differ in their - structure. */ diff --git a/sysdeps/ia64/fpu/bits/mathinline.h b/sysdeps/ia64/fpu/bits/mathinline.h deleted file mode 100644 index c2107af275..0000000000 --- a/sysdeps/ia64/fpu/bits/mathinline.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Inline math functions for ia64. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#ifndef __extern_inline -# define __MATH_INLINE __inline -#else -# define __MATH_INLINE __extern_inline -#endif - -#if defined __USE_ISOC99 && defined __GNUC__ && __GNUC__ >= 2 -/* The gcc, version 2.7 or below, has problems with all this inlining - code. So disable it for this version of the compiler. */ -# if __GNUC_PREREQ (2, 8) -/* Test for negative number. Used in the signbit() macro. */ -__MATH_INLINE int -__NTH (__signbitf (float __x)) -{ - __extension__ union { float __f; int __i; } __u = { __f: __x }; - return __u.__i < 0; -} -__MATH_INLINE int -__NTH (__signbit (double __x)) -{ - __extension__ union { double __d; int __i[2]; } __u = { __d: __x }; - return __u.__i[1] < 0; -} -__MATH_INLINE int -__NTH (__signbitl (long double __x)) -{ - __extension__ union { long double __l; int __i[3]; } __u = { __l: __x }; - return (__u.__i[2] & 0x8000) != 0; -} -# endif -#endif diff --git a/sysdeps/ia64/fpu/branred.c b/sysdeps/ia64/fpu/branred.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/branred.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/doasin.c b/sysdeps/ia64/fpu/doasin.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/doasin.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/dosincos.c b/sysdeps/ia64/fpu/dosincos.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/dosincos.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/e_acos.S b/sysdeps/ia64/fpu/e_acos.S deleted file mode 100644 index c2b31ab85e..0000000000 --- a/sysdeps/ia64/fpu/e_acos.S +++ /dev/null @@ -1,878 +0,0 @@ -.file "acos.s" - - -// Copyright (c) 2000 - 2003 Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. - -// History -//============================================================== -// 02/02/00 Initial version -// 08/17/00 New and much faster algorithm. -// 08/30/00 Avoided bank conflicts on loads, shortened |x|=1 and x=0 paths, -// fixed mfb split issue stalls. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 08/02/02 New and much faster algorithm II -// 02/06/03 Reordered header: .section, .global, .proc, .align - -// Description -//========================================= -// The acos function computes the principal value of the arc cosine of x. -// acos(0) returns Pi/2, acos(1) returns 0, acos(-1) returns Pi. -// A doman error occurs for arguments not in the range [-1,+1]. -// -// The acos function returns the arc cosine in the range [0, Pi] radians. -// -// There are 8 paths: -// 1. x = +/-0.0 -// Return acos(x) = Pi/2 + x -// -// 2. 0.0 < |x| < 0.625 -// Return acos(x) = Pi/2 - x - x^3 *PolA(x^2) -// where PolA(x^2) = A3 + A5*x^2 + A7*x^4 +...+ A35*x^32 -// -// 3. 0.625 <=|x| < 1.0 -// Return acos(x) = Pi/2 - asin(x) = -// = Pi/2 - sign(x) * ( Pi/2 - sqrt(R) * PolB(R)) -// Where R = 1 - |x|, -// PolB(R) = B0 + B1*R + B2*R^2 +...+B12*R^12 -// -// sqrt(R) is approximated using the following sequence: -// y0 = (1 + eps)/sqrt(R) - initial approximation by frsqrta, -// |eps| < 2^(-8) -// Then 3 iterations are used to refine the result: -// H0 = 0.5*y0 -// S0 = R*y0 -// -// d0 = 0.5 - H0*S0 -// H1 = H0 + d0*H0 -// S1 = S0 + d0*S0 -// -// d1 = 0.5 - H1*S1 -// H2 = H1 + d0*H1 -// S2 = S1 + d0*S1 -// -// d2 = 0.5 - H2*S2 -// S3 = S3 + d2*S3 -// -// S3 approximates sqrt(R) with enough accuracy for this algorithm -// -// So, the result should be reconstracted as follows: -// acos(x) = Pi/2 - sign(x) * (Pi/2 - S3*PolB(R)) -// -// But for optimization purposes the reconstruction step is slightly -// changed: -// acos(x) = Cpi + sign(x)*PolB(R)*S2 - sign(x)*d2*S2*PolB(R) -// where Cpi = 0 if x > 0 and Cpi = Pi if x < 0 -// -// 4. |x| = 1.0 -// Return acos(1.0) = 0.0, acos(-1.0) = Pi -// -// 5. 1.0 < |x| <= +INF -// A doman error occurs for arguments not in the range [-1,+1] -// -// 6. x = [S,Q]NaN -// Return acos(x) = QNaN -// -// 7. x is denormal -// Return acos(x) = Pi/2 - x, -// -// 8. x is unnormal -// Normalize input in f8 and return to the very beginning of the function -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input, output -// f6, f7, f9 -> f15, f32 -> f64 - -// General registers used: -// r3, r21 -> r31, r32 -> r38 - -// Predicate registers used: -// p0, p6 -> p14 - -// -// Assembly macros -//========================================= -// integer registers used -// scratch -rTblAddr = r3 - -rPiBy2Ptr = r21 -rTmpPtr3 = r22 -rDenoBound = r23 -rOne = r24 -rAbsXBits = r25 -rHalf = r26 -r0625 = r27 -rSign = r28 -rXBits = r29 -rTmpPtr2 = r30 -rTmpPtr1 = r31 - -// stacked -GR_SAVE_PFS = r32 -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Parameter_TAG = r38 - -// floating point registers used -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - - -// scratch -fXSqr = f6 -fXCube = f7 -fXQuadr = f9 -f1pX = f10 -f1mX = f11 -f1pXRcp = f12 -f1mXRcp = f13 -fH = f14 -fS = f15 -// stacked -fA3 = f32 -fB1 = f32 -fA5 = f33 -fB2 = f33 -fA7 = f34 -fPiBy2 = f34 -fA9 = f35 -fA11 = f36 -fB10 = f35 -fB11 = f36 -fA13 = f37 -fA15 = f38 -fB4 = f37 -fB5 = f38 -fA17 = f39 -fA19 = f40 -fB6 = f39 -fB7 = f40 -fA21 = f41 -fA23 = f42 -fB3 = f41 -fB8 = f42 -fA25 = f43 -fA27 = f44 -fB9 = f43 -fB12 = f44 -fA29 = f45 -fA31 = f46 -fA33 = f47 -fA35 = f48 -fBaseP = f49 -fB0 = f50 -fSignedS = f51 -fD = f52 -fHalf = f53 -fR = f54 -fCloseTo1Pol = f55 -fSignX = f56 -fDenoBound = f57 -fNormX = f58 -fX8 = f59 -fRSqr = f60 -fRQuadr = f61 -fR8 = f62 -fX16 = f63 -fCpi = f64 - -// Data tables -//============================================================== -RODATA -.align 16 -LOCAL_OBJECT_START(acos_base_range_table) -// Ai: Polynomial coefficients for the acos(x), |x| < .625000 -// Bi: Polynomial coefficients for the acos(x), |x| > .625000 -data8 0xBFDAAB56C01AE468 //A29 -data8 0x3FE1C470B76A5B2B //A31 -data8 0xBFDC5FF82A0C4205 //A33 -data8 0x3FC71FD88BFE93F0 //A35 -data8 0xB504F333F9DE6487, 0x00003FFF //B0 -data8 0xAAAAAAAAAAAAFC18, 0x00003FFC //A3 -data8 0x3F9F1C71BC4A7823 //A9 -data8 0x3F96E8BBAAB216B2 //A11 -data8 0x3F91C4CA1F9F8A98 //A13 -data8 0x3F8C9DDCEDEBE7A6 //A15 -data8 0x3F877784442B1516 //A17 -data8 0x3F859C0491802BA2 //A19 -data8 0x9999999998C88B8F, 0x00003FFB //A5 -data8 0x3F6BD7A9A660BF5E //A21 -data8 0x3F9FC1659340419D //A23 -data8 0xB6DB6DB798149BDF, 0x00003FFA //A7 -data8 0xBFB3EF18964D3ED3 //A25 -data8 0x3FCD285315542CF2 //A27 -data8 0xF15BEEEFF7D2966A, 0x00003FFB //B1 -data8 0x3EF0DDA376D10FB3 //B10 -data8 0xBEB83CAFE05EBAC9 //B11 -data8 0x3F65FFB67B513644 //B4 -data8 0x3F5032FBB86A4501 //B5 -data8 0x3F392162276C7CBA //B6 -data8 0x3F2435949FD98BDF //B7 -data8 0xD93923D7FA08341C, 0x00003FF9 //B2 -data8 0x3F802995B6D90BDB //B3 -data8 0x3F10DF86B341A63F //B8 -data8 0xC90FDAA22168C235, 0x00003FFF // Pi/2 -data8 0x3EFA3EBD6B0ECB9D //B9 -data8 0x3EDE18BA080E9098 //B12 -LOCAL_OBJECT_END(acos_base_range_table) - -.section .text -GLOBAL_LIBM_ENTRY(acos) -acos_unnormal_back: -{ .mfi - getf.d rXBits = f8 // grab bits of input value - // set p12 = 1 if x is a NaN, denormal, or zero - fclass.m p12, p0 = f8, 0xcf - adds rSign = 1, r0 -} -{ .mfi - addl rTblAddr = @ltoff(acos_base_range_table),gp - // 1 - x = 1 - |x| for positive x - fms.s1 f1mX = f1, f1, f8 - addl rHalf = 0xFFFE, r0 // exponent of 1/2 -} -;; -{ .mfi - addl r0625 = 0x3FE4, r0 // high 16 bits of 0.625 - // set p8 = 1 if x < 0 - fcmp.lt.s1 p8, p9 = f8, f0 - shl rSign = rSign, 63 // sign bit -} -{ .mfi - // point to the beginning of the table - ld8 rTblAddr = [rTblAddr] - // 1 + x = 1 - |x| for negative x - fma.s1 f1pX = f1, f1, f8 - adds rOne = 0x3FF, r0 -} -;; -{ .mfi - andcm rAbsXBits = rXBits, rSign // bits of |x| - fmerge.s fSignX = f8, f1 // signum(x) - shl r0625 = r0625, 48 // bits of DP representation of 0.625 -} -{ .mfb - setf.exp fHalf = rHalf // load A2 to FP reg - fma.s1 fXSqr = f8, f8, f0 // x^2 - // branch on special path if x is a NaN, denormal, or zero -(p12) br.cond.spnt acos_special -} -;; -{ .mfi - adds rPiBy2Ptr = 272, rTblAddr - nop.f 0 - shl rOne = rOne, 52 // bits of 1.0 -} -{ .mfi - adds rTmpPtr1 = 16, rTblAddr - nop.f 0 - // set p6 = 1 if |x| < 0.625 - cmp.lt p6, p7 = rAbsXBits, r0625 -} -;; -{ .mfi - ldfpd fA29, fA31 = [rTblAddr] // A29, fA31 - // 1 - x = 1 - |x| for positive x -(p9) fms.s1 fR = f1, f1, f8 - // point to coefficient of "near 1" polynomial -(p7) adds rTmpPtr2 = 176, rTblAddr -} -{ .mfi - ldfpd fA33, fA35 = [rTmpPtr1], 16 // A33, fA35 - // 1 + x = 1 - |x| for negative x -(p8) fma.s1 fR = f1, f1, f8 -(p6) adds rTmpPtr2 = 48, rTblAddr -} -;; -{ .mfi - ldfe fB0 = [rTmpPtr1], 16 // B0 - nop.f 0 - nop.i 0 -} -{ .mib - adds rTmpPtr3 = 16, rTmpPtr2 - // set p10 = 1 if |x| = 1.0 - cmp.eq p10, p0 = rAbsXBits, rOne - // branch on special path for |x| = 1.0 -(p10) br.cond.spnt acos_abs_1 -} -;; -{ .mfi - ldfe fA3 = [rTmpPtr2], 48 // A3 or B1 - nop.f 0 - adds rTmpPtr1 = 64, rTmpPtr3 -} -{ .mib - ldfpd fA9, fA11 = [rTmpPtr3], 16 // A9, A11 or B10, B11 - // set p11 = 1 if |x| > 1.0 - cmp.gt p11, p0 = rAbsXBits, rOne - // branch on special path for |x| > 1.0 -(p11) br.cond.spnt acos_abs_gt_1 -} -;; -{ .mfi - ldfpd fA17, fA19 = [rTmpPtr2], 16 // A17, A19 or B6, B7 - // initial approximation of 1 / sqrt(1 - x) - frsqrta.s1 f1mXRcp, p0 = f1mX - nop.i 0 -} -{ .mfi - ldfpd fA13, fA15 = [rTmpPtr3] // A13, A15 or B4, B5 - fma.s1 fXCube = fXSqr, f8, f0 // x^3 - nop.i 0 -} -;; -{ .mfi - ldfe fA5 = [rTmpPtr2], 48 // A5 or B2 - // initial approximation of 1 / sqrt(1 + x) - frsqrta.s1 f1pXRcp, p0 = f1pX - nop.i 0 -} -{ .mfi - ldfpd fA21, fA23 = [rTmpPtr1], 16 // A21, A23 or B3, B8 - fma.s1 fXQuadr = fXSqr, fXSqr, f0 // x^4 - nop.i 0 -} -;; -{ .mfi - ldfe fA7 = [rTmpPtr1] // A7 or Pi/2 - fma.s1 fRSqr = fR, fR, f0 // R^2 - nop.i 0 -} -{ .mfb - ldfpd fA25, fA27 = [rTmpPtr2] // A25, A27 or B9, B12 - nop.f 0 -(p6) br.cond.spnt acos_base_range; -} -;; - -{ .mfi - nop.m 0 -(p9) fma.s1 fH = fHalf, f1mXRcp, f0 // H0 for x > 0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 fS = f1mX, f1mXRcp, f0 // S0 for x > 0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 -(p8) fma.s1 fH = fHalf, f1pXRcp, f0 // H0 for x < 0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fma.s1 fS = f1pX, f1pXRcp, f0 // S0 for x > 0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRQuadr = fRSqr, fRSqr, f0 // R^4 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fB11 = fB11, fR, fB10 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB1 = fB1, fR, fB0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fB5 = fB5, fR, fB4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB7 = fB7, fR, fB6 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fB3 = fB3, fR, fB2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fnma.s1 fD = fH, fS, fHalf // d0 = 1/2 - H0*S0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fR8 = fRQuadr, fRQuadr, f0 // R^4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB9 = fB9, fR, fB8 - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fB12 = fB12, fRSqr, fB11 - nop.i 0 -} -{.mfi - nop.m 0 - fma.s1 fB7 = fB7, fRSqr, fB5 - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fB3 = fB3, fRSqr, fB1 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fH = fH, fD, fH // H1 = H0 + H0*d0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS = fS, fD, fS // S1 = S0 + S0*d0 - nop.i 0 -} -;; -{.mfi - nop.m 0 -(p9) fma.s1 fCpi = f1, f0, f0 // Cpi = 0 if x > 0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fma.s1 fCpi = fPiBy2, f1, fPiBy2 // Cpi = Pi if x < 0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fB12 = fB12, fRSqr, fB9 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB7 = fB7, fRQuadr, fB3 - nop.i 0 -} -;; -{.mfi - nop.m 0 - fnma.s1 fD = fH, fS, fHalf // d1 = 1/2 - H1*S1 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 fSignedS = fSignX, fS, f0 // -signum(x)*S1 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fCloseTo1Pol = fB12, fR8, fB7 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fH = fH, fD, fH // H2 = H1 + H1*d1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS = fS, fD, fS // S2 = S1 + S1*d1 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // -signum(x)* S2 = -signum(x)*(S1 + S1*d1) - fma.s1 fSignedS = fSignedS, fD, fSignedS - nop.i 0 -} -;; -{.mfi - nop.m 0 - fnma.s1 fD = fH, fS, fHalf // d2 = 1/2 - H2*S2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // Cpi + signum(x)*PolB*S2 - fnma.s1 fCpi = fSignedS, fCloseTo1Pol, fCpi - nop.i 0 -} -{ .mfi - nop.m 0 - // signum(x)*PolB * S2 - fnma.s1 fCloseTo1Pol = fSignedS, fCloseTo1Pol, f0 - nop.i 0 -} -;; -{ .mfb - nop.m 0 - // final result for 0.625 <= |x| < 1 - fma.d.s0 f8 = fCloseTo1Pol, fD, fCpi - // exit here for 0.625 <= |x| < 1 - br.ret.sptk b0 -} -;; - - -// here if |x| < 0.625 -.align 32 -acos_base_range: -{ .mfi - ldfe fCpi = [rPiBy2Ptr] // Pi/2 - fma.s1 fA33 = fA33, fXSqr, fA31 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA15 = fA15, fXSqr, fA13 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA29 = fA29, fXSqr, fA27 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA25 = fA25, fXSqr, fA23 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA21 = fA21, fXSqr, fA19 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA9 = fA9, fXSqr, fA7 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA5 = fA5, fXSqr, fA3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA35 = fA35, fXQuadr, fA33 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA17 = fA17, fXQuadr, fA15 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fX8 = fXQuadr, fXQuadr, f0 // x^8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA25 = fA25, fXQuadr, fA21 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA9 = fA9, fXQuadr, fA5 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fCpi = fCpi, f1, f8 // Pi/2 - x - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA35 = fA35, fXQuadr, fA29 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA17 = fA17, fXSqr, fA11 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fX16 = fX8, fX8, f0 // x^16 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA35 = fA35, fX8, fA25 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA17 = fA17, fX8, fA9 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fBaseP = fA35, fX16, fA17 - nop.i 0 -} -;; -{ .mfb - nop.m 0 - // final result for |x| < 0.625 - fnma.d.s0 f8 = fBaseP, fXCube, fCpi - // exit here for |x| < 0.625 path - br.ret.sptk b0 -} -;; - -// here if |x| = 1 -// acos(1) = 0 -// acos(-1) = Pi -.align 32 -acos_abs_1: -{ .mfi - ldfe fPiBy2 = [rPiBy2Ptr] // Pi/2 - nop.f 0 - nop.i 0 -} -;; -.pred.rel "mutex", p8, p9 -{ .mfi - nop.m 0 - // result for x = 1.0 -(p9) fma.d.s0 f8 = f1, f0, f0 // 0.0 - nop.i 0 -} -{.mfb - nop.m 0 - // result for x = -1.0 -(p8) fma.d.s0 f8 = fPiBy2, f1, fPiBy2 // Pi - // exit here for |x| = 1.0 - br.ret.sptk b0 -} -;; - -// here if x is a NaN, denormal, or zero -.align 32 -acos_special: -{ .mfi - // point to Pi/2 - adds rPiBy2Ptr = 272, rTblAddr - // set p12 = 1 if x is a NaN - fclass.m p12, p0 = f8, 0xc3 - nop.i 0 -} -{ .mlx - nop.m 0 - // smallest positive DP normalized number - movl rDenoBound = 0x0010000000000000 -} -;; -{ .mfi - ldfe fPiBy2 = [rPiBy2Ptr] // Pi/2 - // set p13 = 1 if x = 0.0 - fclass.m p13, p0 = f8, 0x07 - nop.i 0 -} -{ .mfi - nop.m 0 - fnorm.s1 fNormX = f8 - nop.i 0 -} -;; -{ .mfb - // load smallest normal to FP reg - setf.d fDenoBound = rDenoBound - // answer if x is a NaN -(p12) fma.d.s0 f8 = f8,f1,f0 - // exit here if x is a NaN -(p12) br.ret.spnt b0 -} -;; -{ .mfi - nop.m 0 - // absolute value of normalized x - fmerge.s fNormX = f1, fNormX - nop.i 0 -} -;; -{ .mfb - nop.m 0 - // final result for x = 0 -(p13) fma.d.s0 f8 = fPiBy2, f1, f8 - // exit here if x = 0.0 -(p13) br.ret.spnt b0 -} -;; -// if we still here then x is denormal or unnormal -{ .mfi - nop.m 0 - // set p14 = 1 if normalized x is greater than or - // equal to the smallest denormalized value - // So, if p14 is set to 1 it means that we deal with - // unnormal rather than with "true" denormal - fcmp.ge.s1 p14, p0 = fNormX, fDenoBound - nop.i 0 -} -;; -{ .mfi - nop.m 0 -(p14) fcmp.eq.s0 p6, p0 = f8, f0 // Set D flag if x unnormal - nop.i 0 -} -{ .mfb - nop.m 0 - // normalize unnormal input -(p14) fnorm.s1 f8 = f8 - // return to the main path -(p14) br.cond.sptk acos_unnormal_back -} -;; -// if we still here it means that input is "true" denormal -{ .mfb - nop.m 0 - // final result if x is denormal - fms.d.s0 f8 = fPiBy2, f1, f8 // Pi/2 - x - // exit here if x is denormal - br.ret.sptk b0 -} -;; - -// here if |x| > 1.0 -// error handler should be called -.align 32 -acos_abs_gt_1: -{ .mfi - alloc r32 = ar.pfs, 0, 3, 4, 0 // get some registers - fmerge.s FR_X = f8,f8 - nop.i 0 -} -{ .mfb - mov GR_Parameter_TAG = 58 // error code - frcpa.s0 FR_RESULT, p0 = f0,f0 - // call error handler routine - br.cond.sptk __libm_error_region -} -;; -GLOBAL_LIBM_END(acos) - - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_acosf.S b/sysdeps/ia64/fpu/e_acosf.S deleted file mode 100644 index bdcac59d22..0000000000 --- a/sysdeps/ia64/fpu/e_acosf.S +++ /dev/null @@ -1,694 +0,0 @@ -.file "acosf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. - -// History -//============================================================== -// 02/02/00 Initial version -// 06/28/00 Improved speed -// 06/31/00 Changed register allocation because of some duplicate macros -// moved nan exit bundle up to gain a cycle. -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 08/17/00 Changed predicate register macro-usage to direct predicate -// names due to an assembler bug. -// 10/17/00 Improved speed of x=0 and x=1 paths, set D flag if x denormal. -// 03/13/01 Corrected sign of imm1 value in dep instruction. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align -// 04/17/03 Moved mutex after label - - -// Description -//========================================= -// The acosf function computes the principle value of the arc sine of x. -// A doman error occurs for arguments not in the range [-1,+1]. - -// The acosf function returns the arc cosine in the range [0, +pi] radians. -// acos(1) returns +0 -// acos(x) returns a Nan and raises the invalid exception for |x| >1 - -// |x| <= sqrt(2)/2. get Ax and Bx - -// poly_p1 = x p1 -// poly_p3 = x2 p4 + p3 -// poly_p1 = x2 (poly_p1) + x = x2(x p1) + x -// poly_p2 = x2( poly_p3) + p2 = x2(x2 p4 + p3) + p2 - -// poly_Ax = x5(x2( poly_p3) + p2) + x2(x p1) + x -// = x5(x2(x2 p4 + p3) + p2) + x2(x p1) + x - -// poly_p7 = x2 p8 + p7 -// poly_p5 = x2 p6 + p5 - -// poly_p7 = x4 p9 + (x2 p8 + p7) -// poly_Bx = x4 (x4 p9 + (x2 p8 + p7)) + x2 p6 + p5 - -// sinf1 = x11(x4 (x4 p9 + (x2 p8 + p7)) + x2 p6 + p5) + x5(x2(x2 p4 + p3) + p2) + x2(x p1) + x -// = x19 p9 + x17 p8 + x15 p7 x13 p6 + x11 p5 + x9 p4 + x7 p3 + x5 p2 + x3 p1 + x -// answer1 = pi/2 - sinf1 - - - -// |x| > sqrt(2)/2 - -// Get z = sqrt(1-x2) - -// Get polynomial in t = 1-x2 - -// t2 = t t -// t4 = t2 t2 - -// poly_p4 = t p5 + p4 -// poly_p1 = t p1 + 1 - -// poly_p6 = t p7 + p6 -// poly_p2 = t p3 + p2 - -// poly_p8 = t p9 + p8 - -// poly_p4 = t2 poly_p6 + poly_p4 -// = t2 (t p7 + p6) + (t p5 + p4) - -// poly_p2 = t2 poly_p2 + poly_p1 -// = t2 (t p3 + p2) + (t p1 + 1) - -// poly_p4 = t4 poly_p8 + poly_p4 -// = t4 (t p9 + p8) + (t2 (t p7 + p6) + (t p5 + p4)) - -// P(t) = poly_p2 + t4 poly_p8 -// = t2 (t p3 + p2) + (t p1 + 1) + t4 (t4 (t p9 + p8) + (t2 (t p7 + p6) + (t p5 + p4))) -// = t3 p3 + t2 p2 + t p1 + 1 + t9 p9 + t8 p8 + t7 p7 + t6 p6 + t5 p5 + t4 p4 - - -// answer2 = sign(x) z P(t) if x>0 -// = sign(x) z P(t) + pi if x<0 - - -// -// Assembly macros -//========================================= - -// predicate registers -//acosf_pred_LEsqrt2by2 = p7 -//acosf_pred_GTsqrt2by2 = p8 - -// integer registers -ACOSF_Addr1 = r33 -ACOSF_Addr2 = r34 -ACOSF_GR_1by2 = r35 - -ACOSF_GR_3by2 = r36 -ACOSF_GR_5by2 = r37 - -GR_SAVE_B0 = r38 -GR_SAVE_PFS = r39 -GR_SAVE_GP = r40 - -GR_Parameter_X = r41 -GR_Parameter_Y = r42 -GR_Parameter_RESULT = r43 -GR_Parameter_TAG = r44 - -// floating point registers - -acosf_y = f32 -acosf_abs_x = f33 -acosf_x2 = f34 -acosf_sgn_x = f35 - -acosf_1by2 = f36 -acosf_3by2 = f37 -acosf_5by2 = f38 -acosf_coeff_P3 = f39 -acosf_coeff_P8 = f40 - -acosf_coeff_P1 = f41 -acosf_coeff_P4 = f42 -acosf_coeff_P5 = f43 -acosf_coeff_P2 = f44 -acosf_coeff_P7 = f45 - -acosf_coeff_P6 = f46 -acosf_coeff_P9 = f47 -acosf_x2 = f48 -acosf_x3 = f49 -acosf_x4 = f50 - -acosf_x8 = f51 -acosf_x5 = f52 -acosf_const_piby2 = f53 -acosf_const_sqrt2by2 = f54 -acosf_x11 = f55 - -acosf_poly_p1 = f56 -acosf_poly_p3 = f57 -acosf_sinf1 = f58 -acosf_poly_p2 = f59 -acosf_poly_Ax = f60 - -acosf_poly_p7 = f61 -acosf_poly_p5 = f62 -acosf_sgnx_t4 = f63 -acosf_poly_Bx = f64 -acosf_t = f65 - -acosf_yby2 = f66 -acosf_B = f67 -acosf_B2 = f68 -acosf_Az = f69 -acosf_dz = f70 - -acosf_Sz = f71 -acosf_d2z = f72 -acosf_Fz = f73 -acosf_z = f74 -acosf_sgnx_z = f75 - -acosf_t2 = f76 -acosf_2poly_p4 = f77 -acosf_2poly_p6 = f78 -acosf_2poly_p1 = f79 -acosf_2poly_p2 = f80 - -acosf_2poly_p8 = f81 -acosf_t4 = f82 -acosf_Pt = f83 -acosf_sgnx_2poly_p2 = f84 -acosf_sgn_x_piby2 = f85 - -acosf_poly_p7a = f86 -acosf_2poly_p4a = f87 -acosf_2poly_p4b = f88 -acosf_2poly_p2a = f89 -acosf_poly_p1a = f90 - - - - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(acosf_coeff_1_table) -data8 0x3FC5555607DCF816 // P1 -data8 0x3F9CF81AD9BAB2C6 // P4 -data8 0x3FC59E0975074DF3 // P7 -data8 0xBFA6F4CC2780AA1D // P6 -data8 0x3FC2DD45292E93CB // P9 -data8 0x3fe6a09e667f3bcd // sqrt(2)/2 -LOCAL_OBJECT_END(acosf_coeff_1_table) - -LOCAL_OBJECT_START(acosf_coeff_2_table) -data8 0x3FA6F108E31EFBA6 // P3 -data8 0xBFCA31BF175D82A0 // P8 -data8 0x3FA30C0337F6418B // P5 -data8 0x3FB332C9266CB1F9 // P2 -data8 0x3ff921fb54442d18 // pi_by_2 -LOCAL_OBJECT_END(acosf_coeff_2_table) - - -.section .text -GLOBAL_LIBM_ENTRY(acosf) - -// Load the addresses of the two tables. -// Then, load the coefficients and other constants. - -{ .mfi - alloc r32 = ar.pfs,1,8,4,0 - fnma.s1 acosf_t = f8,f8,f1 - dep.z ACOSF_GR_1by2 = 0x3f,24,8 // 0x3f000000 -} -{ .mfi - addl ACOSF_Addr1 = @ltoff(acosf_coeff_1_table),gp - fma.s1 acosf_x2 = f8,f8,f0 - addl ACOSF_Addr2 = @ltoff(acosf_coeff_2_table),gp ;; -} - - -{ .mfi - ld8 ACOSF_Addr1 = [ACOSF_Addr1] - fmerge.s acosf_abs_x = f1,f8 - dep ACOSF_GR_3by2 = -1,r0,22,8 // 0x3fc00000 -} -{ .mlx - nop.m 999 - movl ACOSF_GR_5by2 = 0x40200000;; -} - - - -{ .mfi - setf.s acosf_1by2 = ACOSF_GR_1by2 - fmerge.s acosf_sgn_x = f8,f1 - nop.i 999 -} -{ .mfi - ld8 ACOSF_Addr2 = [ACOSF_Addr2] - nop.f 0 - nop.i 999;; -} - - -{ .mfi - setf.s acosf_5by2 = ACOSF_GR_5by2 - fcmp.lt.s1 p11,p12 = f8,f0 - nop.i 999;; -} - -{ .mmf - ldfpd acosf_coeff_P1,acosf_coeff_P4 = [ACOSF_Addr1],16 - setf.s acosf_3by2 = ACOSF_GR_3by2 - fclass.m.unc p8,p0 = f8, 0xc3 ;; //@qnan | @snan -} - - -{ .mfi - ldfpd acosf_coeff_P7,acosf_coeff_P6 = [ACOSF_Addr1],16 - fma.s1 acosf_t2 = acosf_t,acosf_t,f0 - nop.i 999 -} -{ .mfi - ldfpd acosf_coeff_P3,acosf_coeff_P8 = [ACOSF_Addr2],16 - fma.s1 acosf_x4 = acosf_x2,acosf_x2,f0 - nop.i 999;; -} - - -{ .mfi - ldfpd acosf_coeff_P9,acosf_const_sqrt2by2 = [ACOSF_Addr1] - fclass.m.unc p10,p0 = f8, 0x07 //@zero - nop.i 999 -} -{ .mfi - ldfpd acosf_coeff_P5,acosf_coeff_P2 = [ACOSF_Addr2],16 - fma.s1 acosf_x3 = f8,acosf_x2,f0 - nop.i 999;; -} - - -{ .mfi - ldfd acosf_const_piby2 = [ACOSF_Addr2] - frsqrta.s1 acosf_B,p0 = acosf_t - nop.i 999 -} -{ .mfb - nop.m 999 -(p8) fma.s.s0 f8 = f8,f1,f0 -(p8) br.ret.spnt b0 ;; // Exit if x=nan -} - - -{ .mfb - nop.m 999 - fcmp.eq.s1 p6,p0 = acosf_abs_x,f1 -(p10) br.cond.spnt ACOSF_ZERO ;; // Branch if x=0 -} - -{ .mfi - nop.m 999 - fcmp.gt.s1 p9,p0 = acosf_abs_x,f1 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fma.s1 acosf_x8 = acosf_x4,acosf_x4,f0 - nop.i 999 -} -{ .mfb - nop.m 999 - fma.s1 acosf_t4 = acosf_t2,acosf_t2,f0 -(p6) br.cond.spnt ACOSF_ABS_ONE ;; // Branch if |x|=1 -} - -{ .mfi - nop.m 999 - fma.s1 acosf_x5 = acosf_x2,acosf_x3,f0 - nop.i 999 -} -{ .mfb -(p9) mov GR_Parameter_TAG = 59 - fma.s1 acosf_yby2 = acosf_t,acosf_1by2,f0 -(p9) br.cond.spnt __libm_error_region ;; // Branch if |x|>1 -} - - -{ .mfi - nop.m 999 - fma.s1 acosf_Az = acosf_t,acosf_B,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 acosf_B2 = acosf_B,acosf_B,f0 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fma.s1 acosf_poly_p1 = f8,acosf_coeff_P1,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 acosf_2poly_p1 = acosf_coeff_P1,acosf_t,f1 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fma.s1 acosf_poly_p3 = acosf_coeff_P4,acosf_x2,acosf_coeff_P3 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 acosf_2poly_p6 = acosf_coeff_P7,acosf_t,acosf_coeff_P6 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fma.s1 acosf_poly_p7 = acosf_x2,acosf_coeff_P8,acosf_coeff_P7 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 acosf_2poly_p2 = acosf_coeff_P3,acosf_t,acosf_coeff_P2 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 acosf_poly_p5 = acosf_x2,acosf_coeff_P6,acosf_coeff_P5 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 acosf_2poly_p4 = acosf_coeff_P5,acosf_t,acosf_coeff_P4 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 acosf_x11 = acosf_x8,acosf_x3,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fnma.s1 acosf_dz = acosf_B2,acosf_yby2,acosf_1by2 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 acosf_poly_p1a = acosf_x2,acosf_poly_p1,f8 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 acosf_2poly_p8 = acosf_coeff_P9,acosf_t,acosf_coeff_P8 - nop.i 999;; -} - - -// Get the absolute value of x and determine the region in which x lies - -{ .mfi - nop.m 999 - fcmp.le.s1 p7,p8 = acosf_abs_x,acosf_const_sqrt2by2 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 acosf_poly_p2 = acosf_x2,acosf_poly_p3,acosf_coeff_P2 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 acosf_poly_p7a = acosf_x4,acosf_coeff_P9,acosf_poly_p7 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 acosf_2poly_p2a = acosf_2poly_p2,acosf_t2,acosf_2poly_p1 - nop.i 999;; -} - - -{ .mfi - nop.m 999 -(p8) fma.s1 acosf_sgnx_t4 = acosf_sgn_x,acosf_t4,f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 acosf_2poly_p4a = acosf_2poly_p6,acosf_t2,acosf_2poly_p4 - nop.i 999;; -} - - -{ .mfi - nop.m 999 -(p8) fma.s1 acosf_Sz = acosf_5by2,acosf_dz,acosf_3by2 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 acosf_d2z = acosf_dz,acosf_dz,f0 - nop.i 999;; -} - - -{ .mfi - nop.m 999 -(p8) fnma.d.s1 acosf_sgn_x_piby2 = acosf_sgn_x,acosf_const_piby2,acosf_const_piby2 - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fma.s1 acosf_poly_Ax = acosf_x5,acosf_poly_p2,acosf_poly_p1a - nop.i 999;; -} - -{ .mfi - nop.m 999 -(p7) fma.s1 acosf_poly_Bx = acosf_x4,acosf_poly_p7a,acosf_poly_p5 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 acosf_sgnx_2poly_p2 = acosf_sgn_x,acosf_2poly_p2a,f0 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fcmp.eq.s0 p6,p0 = f8,f0 // Only purpose is to set D if x denormal - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 acosf_2poly_p4b = acosf_2poly_p8,acosf_t4,acosf_2poly_p4a - nop.i 999;; -} - - -{ .mfi - nop.m 999 -(p8) fma.s1 acosf_Fz = acosf_d2z,acosf_Sz,acosf_dz - nop.i 999;; -} - - -{ .mfi - nop.m 999 -(p8) fma.d.s1 acosf_Pt = acosf_2poly_p4b,acosf_sgnx_t4,acosf_sgnx_2poly_p2 - nop.i 999;; -} - -{ .mfi - nop.m 999 -(p8) fma.d.s1 acosf_z = acosf_Az,acosf_Fz,acosf_Az - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p7) fma.d.s1 acosf_sinf1 = acosf_x11,acosf_poly_Bx,acosf_poly_Ax - nop.i 999;; -} - -.pred.rel "mutex",p8,p7 //acosf_pred_GTsqrt2by2,acosf_pred_LEsqrt2by2 -{ .mfi - nop.m 999 -(p8) fma.s.s0 f8 = acosf_z,acosf_Pt,acosf_sgn_x_piby2 - nop.i 999 -} - -{ .mfb - nop.m 999 -(p7) fms.s.s0 f8 = acosf_const_piby2,f1,acosf_sinf1 - br.ret.sptk b0 ;; -} - -ACOSF_ZERO: -// Here if x=0 -{ .mfb - nop.m 999 - fma.s.s0 f8 = acosf_const_piby2,f1,f0 // acosf(0)=pi/2 - br.ret.sptk b0 ;; -} - - -ACOSF_ABS_ONE: -.pred.rel "mutex",p11,p12 -// Here if |x|=1 -{ .mfi - nop.m 999 -(p11) fma.s.s0 f8 = acosf_const_piby2,f1,acosf_const_piby2 // acosf(-1)=pi - nop.i 999 -} -{ .mfb - nop.m 999 -(p12) fma.s.s0 f8 = f1,f0,f0 // acosf(1)=0 - br.ret.sptk b0 ;; -} - -GLOBAL_LIBM_END(acosf) - - -// Stack operations when calling error support. -// (1) (2) -// sp -> + psp -> + -// | | -// | | <- GR_Y -// | | -// | <-GR_Y Y2->| -// | | -// | | <- GR_X -// | | -// sp-64 -> + sp -> + -// save ar.pfs save b0 -// save gp - - -// Stack operations when calling error support. -// (3) (call) (4) -// psp -> + sp -> + -// | | -// R3 ->| <- GR_RESULT | -> f8 -// | | -// Y2 ->| <- GR_Y | -// | | -// X1 ->| | -// | | -// sp -> + + -// restore gp -// restore ar.pfs - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 999 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = f1,16 // Store Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mfi - nop.m 0 - frcpa.s0 f9,p0 = f0,f0 - nop.i 0 -};; - -{ .mib - stfs [GR_Parameter_X] = f8 // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfs [GR_Parameter_Y] = f9 // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; - -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_acosh.S b/sysdeps/ia64/fpu/e_acosh.S deleted file mode 100644 index fb25fa0053..0000000000 --- a/sysdeps/ia64/fpu/e_acosh.S +++ /dev/null @@ -1,1202 +0,0 @@ -.file "acosh.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// ============================================================== -// History -// ============================================================== -// 03/23/01 Initial version -// 04/19/01 Improved speed of the paths #1,2,3,4,5 -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align -// 05/14/03 Improved performance, set denormal flag for unorms >= 1.0 -// 03/31/05 Reformatted delimiters between data tables -// -// API -// ============================================================== -// double acosh(double) -// -// Overview of operation -// ============================================================== -// -// There are 7 paths: -// 1. x = 1.0 -// Return acosh(x) = 0.0 -// 2. 1.0 < x < 1.000499725341796875(0x3FF0020C00000000) -// Return acosh(x) = sqrt(x-1) * Pol4(x), where Pol4(x) = -// (((x*C4 + C3)*(x-1) + C2)*(x-1) + C1)*(x-1) + C0 - -// 3. 1.000499725341796875(0x3FF0020C00000000) <= x < 2^63 -// Return acosh(x) = log(x + sqrt(x^2 -1.0)) -// To compute x + sqrt(x^2 -1.0) modified Newton Raphson method is used -// (3 iterations) -// Algorithm description for log function see below. -// -// 4. 2^63 <= x < +INF -// Return acosh(x) = log(2*x) -// Algorithm description for log function see below. -// -// 5. x = +INF -// Return acosh(x) = +INF -// -// 6. x = [S,Q]NaN -// Return acosh(x) = QNaN -// -// 7. x < 1.0 -// It's domain error. Error handler with tag = 136 is called -// -//============================================================== -// Algorithm Description for log(x) function -// Below we are using the fact that inequality x - 1.0 > 2^(-6) is always -// true for this acosh implementation -// -// Consider x = 2^N 1.f1 f2 f3 f4...f63 -// Log(x) = log(frcpa(x) x/frcpa(x)) -// = log(1/frcpa(x)) + log(frcpa(x) x) -// = -log(frcpa(x)) + log(frcpa(x) x) -// -// frcpa(x) = 2^-N frcpa((1.f1 f2 ... f63) -// -// -log(frcpa(x)) = -log(C) -// = -log(2^-N) - log(frcpa(1.f1 f2 ... f63)) -// -// -log(frcpa(x)) = -log(C) -// = +Nlog2 - log(frcpa(1.f1 f2 ... f63)) -// -// -log(frcpa(x)) = -log(C) -// = +Nlog2 + log(frcpa(1.f1 f2 ... f63)) -// -// Log(x) = log(1/frcpa(x)) + log(frcpa(x) x) -// -// Log(x) = +Nlog2 + log(1./frcpa(1.f1 f2 ... f63)) + log(frcpa(x) x) -// Log(x) = +Nlog2 - log(/frcpa(1.f1 f2 ... f63)) + log(frcpa(x) x) -// Log(x) = +Nlog2 + T + log(frcpa(x) x) -// -// Log(x) = +Nlog2 + T + log(C x) -// -// Cx = 1 + r -// -// Log(x) = +Nlog2 + T + log(1+r) -// Log(x) = +Nlog2 + T + Series( r - r^2/2 + r^3/3 - r^4/4 ....) -// -// 1.f1 f2 ... f8 has 256 entries. -// They are 1 + k/2^8, k = 0 ... 255 -// These 256 values are the table entries. -// -// Implementation -//============================================================== -// C = frcpa(x) -// r = C * x - 1 -// -// Form rseries = r + P1*r^2 + P2*r^3 + P3*r^4 + P4*r^5 + P5*r^6 -// -// x = f * 2*n where f is 1.f_1f_2f_3....f_63 -// Nfloat = float(n) where n is the true unbiased exponent -// pre-index = f_1f_2....f_8 -// index = pre_index * 16 -// get the dxt table entry at index + offset = T -// -// result = (T + Nfloat * log(2)) + rseries -// -// The T table is calculated as follows -// Form x_k = 1 + k/2^8 where k goes from 0... 255 -// y_k = frcpa(x_k) -// log(1/y_k) in quad and round to double-extended -// - -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f9 -> f15, f32 -> f65 - -// General registers used: -// r14 -> r27, r32 -> r39 - -// Predicate registers used: -// p6 -> p15 - -// p6 to filter out case when x = [Q,S]NaN -// p7,p8 to filter out case when x < 1.0 -// p10 to select path #1 -// p11 to filter out case when x = +INF -// p12 used in the frcpa -// p13 to select path #4 -// p14,p15 to select path #2 - -// Assembly macros -//============================================================== -log_GR_exp_17_ones = r14 -log_GR_signexp_f8 = r15 -log_table_address2 = r16 -log_GR_exp_16_ones = r17 -log_GR_exp_f8 = r18 -log_GR_true_exp_f8 = r19 -log_GR_significand_f8 = r20 -log_GR_index = r21 -log_GR_comp2 = r22 -acosh_GR_f8 = r23 -log_GR_comp = r24 -acosh_GR_f8_sig = r25 -log_table_address3 = r26 -NR_table_address = r27 - -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_SAVE_PFS = r35 - -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -acosh_GR_tag = r39 - -//============================================================== -log_y = f9 -NR1 = f10 -NR2 = f11 -log_y_rs = f12 -log_y_rs_iter = f13 -log_y_rs_iter1 = f14 -log_NORM_f8 = f15 -acosh_comp = f32 -log_w = f34 -log_P5 = f35 -log_P4 = f36 -log_P3 = f37 -log_P2 = f38 -log_P1 = f39 -log_C0 = f40 -log_C1 = f41 -log_C2 = f42 -log2 = f43 -acosh_w_rs = f44 -log_C = f45 -log_arg = f46 -acosh_w_iter1 = f47 -acosh_w_iter2 = f48 -log_int_Nfloat = f49 -log_r = f50 -log_rsq = f51 -log_rp_p4 = f52 -log_rp_p32 = f53 -log_rcube = f54 -log_rp_p10 = f55 -log_rp_p2 = f56 -log_Nfloat = f57 -log_T = f58 -log_r2P_r = f59 -log_T_plus_Nlog2 = f60 -acosh_w_sqrt = f61 -acosh_w_1 = f62 -log_C3 = f63 -log_C4 = f64 -log_arg_early = f65 - - -// Data tables -//============================================================== - -RODATA -.align 16 - -LOCAL_OBJECT_START(log_table_1) -data8 0x3FF0020C49BA5E35 // 1.0005 -data8 0xBFC5555DA7212371 // P5 -data8 0x3FC999A19EEF5826 // P4 -data8 0xBFCFFFFFFFFEF009 // P3 -data8 0x3FD555555554ECB2 // P2 -data8 0xBFE0000000000000 // P1 = -0.5 -// -data8 0xb17217f7d1cf79ac, 0x00003ffe // log2 -LOCAL_OBJECT_END(log_table_1) - -LOCAL_OBJECT_START(log_table_2) -data8 0x3FE0000000000000 // 0.5 -data8 0x4008000000000000 // 3.0 -// -data8 0xAFE8F9203939CCF8, 0x00003FF6 // C4 3FF6AFE8F9203939CCF8 -data8 0xAD46EB6AE752D809, 0x0000BFF8 // C3 BFF8AD46EB6AE752D809 -data8 0xD93923D7F53F3627, 0x00003FF9 // C2 3FF9D93923D7F53F3627 -data8 0xF15BEEEFF7D32D36, 0x0000BFFB // C1 BFFBF15BEEEFF7D32D36 -data8 0xB504F333F9DE6484, 0x00003FFF // C0 3FFFB504F333F9DE6484 -LOCAL_OBJECT_END(log_table_2) - - -LOCAL_OBJECT_START(log_table_3) -data8 0x80200aaeac44ef38 , 0x00003ff6 // log(1/frcpa(1+ 0/2^-8)) -// -data8 0xc09090a2c35aa070 , 0x00003ff7 // log(1/frcpa(1+ 1/2^-8)) -data8 0xa0c94fcb41977c75 , 0x00003ff8 // log(1/frcpa(1+ 2/2^-8)) -data8 0xe18b9c263af83301 , 0x00003ff8 // log(1/frcpa(1+ 3/2^-8)) -data8 0x8d35c8d6399c30ea , 0x00003ff9 // log(1/frcpa(1+ 4/2^-8)) -data8 0xadd4d2ecd601cbb8 , 0x00003ff9 // log(1/frcpa(1+ 5/2^-8)) -// -data8 0xce95403a192f9f01 , 0x00003ff9 // log(1/frcpa(1+ 6/2^-8)) -data8 0xeb59392cbcc01096 , 0x00003ff9 // log(1/frcpa(1+ 7/2^-8)) -data8 0x862c7d0cefd54c5d , 0x00003ffa // log(1/frcpa(1+ 8/2^-8)) -data8 0x94aa63c65e70d499 , 0x00003ffa // log(1/frcpa(1+ 9/2^-8)) -data8 0xa54a696d4b62b382 , 0x00003ffa // log(1/frcpa(1+ 10/2^-8)) -// -data8 0xb3e4a796a5dac208 , 0x00003ffa // log(1/frcpa(1+ 11/2^-8)) -data8 0xc28c45b1878340a9 , 0x00003ffa // log(1/frcpa(1+ 12/2^-8)) -data8 0xd35c55f39d7a6235 , 0x00003ffa // log(1/frcpa(1+ 13/2^-8)) -data8 0xe220f037b954f1f5 , 0x00003ffa // log(1/frcpa(1+ 14/2^-8)) -data8 0xf0f3389b036834f3 , 0x00003ffa // log(1/frcpa(1+ 15/2^-8)) -// -data8 0xffd3488d5c980465 , 0x00003ffa // log(1/frcpa(1+ 16/2^-8)) -data8 0x87609ce2ed300490 , 0x00003ffb // log(1/frcpa(1+ 17/2^-8)) -data8 0x8ede9321e8c85927 , 0x00003ffb // log(1/frcpa(1+ 18/2^-8)) -data8 0x96639427f2f8e2f4 , 0x00003ffb // log(1/frcpa(1+ 19/2^-8)) -data8 0x9defad3e8f73217b , 0x00003ffb // log(1/frcpa(1+ 20/2^-8)) -// -data8 0xa582ebd50097029c , 0x00003ffb // log(1/frcpa(1+ 21/2^-8)) -data8 0xac06dbe75ab80fee , 0x00003ffb // log(1/frcpa(1+ 22/2^-8)) -data8 0xb3a78449b2d3ccca , 0x00003ffb // log(1/frcpa(1+ 23/2^-8)) -data8 0xbb4f79635ab46bb2 , 0x00003ffb // log(1/frcpa(1+ 24/2^-8)) -data8 0xc2fec93a83523f3f , 0x00003ffb // log(1/frcpa(1+ 25/2^-8)) -// -data8 0xc99af2eaca4c4571 , 0x00003ffb // log(1/frcpa(1+ 26/2^-8)) -data8 0xd1581106472fa653 , 0x00003ffb // log(1/frcpa(1+ 27/2^-8)) -data8 0xd8002560d4355f2e , 0x00003ffb // log(1/frcpa(1+ 28/2^-8)) -data8 0xdfcb43b4fe508632 , 0x00003ffb // log(1/frcpa(1+ 29/2^-8)) -data8 0xe67f6dff709d4119 , 0x00003ffb // log(1/frcpa(1+ 30/2^-8)) -// -data8 0xed393b1c22351280 , 0x00003ffb // log(1/frcpa(1+ 31/2^-8)) -data8 0xf5192bff087bcc35 , 0x00003ffb // log(1/frcpa(1+ 32/2^-8)) -data8 0xfbdf4ff6dfef2fa3 , 0x00003ffb // log(1/frcpa(1+ 33/2^-8)) -data8 0x81559a97f92f9cc7 , 0x00003ffc // log(1/frcpa(1+ 34/2^-8)) -data8 0x84be72bce90266e8 , 0x00003ffc // log(1/frcpa(1+ 35/2^-8)) -// -data8 0x88bc74113f23def2 , 0x00003ffc // log(1/frcpa(1+ 36/2^-8)) -data8 0x8c2ba3edf6799d11 , 0x00003ffc // log(1/frcpa(1+ 37/2^-8)) -data8 0x8f9dc92f92ea08b1 , 0x00003ffc // log(1/frcpa(1+ 38/2^-8)) -data8 0x9312e8f36efab5a7 , 0x00003ffc // log(1/frcpa(1+ 39/2^-8)) -data8 0x968b08643409ceb6 , 0x00003ffc // log(1/frcpa(1+ 40/2^-8)) -// -data8 0x9a062cba08a1708c , 0x00003ffc // log(1/frcpa(1+ 41/2^-8)) -data8 0x9d845b3abf95485c , 0x00003ffc // log(1/frcpa(1+ 42/2^-8)) -data8 0xa06fd841bc001bb4 , 0x00003ffc // log(1/frcpa(1+ 43/2^-8)) -data8 0xa3f3a74652fbe0db , 0x00003ffc // log(1/frcpa(1+ 44/2^-8)) -data8 0xa77a8fb2336f20f5 , 0x00003ffc // log(1/frcpa(1+ 45/2^-8)) -// -data8 0xab0497015d28b0a0 , 0x00003ffc // log(1/frcpa(1+ 46/2^-8)) -data8 0xae91c2be6ba6a615 , 0x00003ffc // log(1/frcpa(1+ 47/2^-8)) -data8 0xb189d1b99aebb20b , 0x00003ffc // log(1/frcpa(1+ 48/2^-8)) -data8 0xb51cced5de9c1b2c , 0x00003ffc // log(1/frcpa(1+ 49/2^-8)) -data8 0xb819bee9e720d42f , 0x00003ffc // log(1/frcpa(1+ 50/2^-8)) -// -data8 0xbbb2a0947b093a5d , 0x00003ffc // log(1/frcpa(1+ 51/2^-8)) -data8 0xbf4ec1505811684a , 0x00003ffc // log(1/frcpa(1+ 52/2^-8)) -data8 0xc2535bacfa8975ff , 0x00003ffc // log(1/frcpa(1+ 53/2^-8)) -data8 0xc55a3eafad187eb8 , 0x00003ffc // log(1/frcpa(1+ 54/2^-8)) -data8 0xc8ff2484b2c0da74 , 0x00003ffc // log(1/frcpa(1+ 55/2^-8)) -// -data8 0xcc0b1a008d53ab76 , 0x00003ffc // log(1/frcpa(1+ 56/2^-8)) -data8 0xcfb6203844b3209b , 0x00003ffc // log(1/frcpa(1+ 57/2^-8)) -data8 0xd2c73949a47a19f5 , 0x00003ffc // log(1/frcpa(1+ 58/2^-8)) -data8 0xd5daae18b49d6695 , 0x00003ffc // log(1/frcpa(1+ 59/2^-8)) -data8 0xd8f08248cf7e8019 , 0x00003ffc // log(1/frcpa(1+ 60/2^-8)) -// -data8 0xdca7749f1b3e540e , 0x00003ffc // log(1/frcpa(1+ 61/2^-8)) -data8 0xdfc28e033aaaf7c7 , 0x00003ffc // log(1/frcpa(1+ 62/2^-8)) -data8 0xe2e012a5f91d2f55 , 0x00003ffc // log(1/frcpa(1+ 63/2^-8)) -data8 0xe600064ed9e292a8 , 0x00003ffc // log(1/frcpa(1+ 64/2^-8)) -data8 0xe9226cce42b39f60 , 0x00003ffc // log(1/frcpa(1+ 65/2^-8)) -// -data8 0xec4749fd97a28360 , 0x00003ffc // log(1/frcpa(1+ 66/2^-8)) -data8 0xef6ea1bf57780495 , 0x00003ffc // log(1/frcpa(1+ 67/2^-8)) -data8 0xf29877ff38809091 , 0x00003ffc // log(1/frcpa(1+ 68/2^-8)) -data8 0xf5c4d0b245cb89be , 0x00003ffc // log(1/frcpa(1+ 69/2^-8)) -data8 0xf8f3afd6fcdef3aa , 0x00003ffc // log(1/frcpa(1+ 70/2^-8)) -// -data8 0xfc2519756be1abc7 , 0x00003ffc // log(1/frcpa(1+ 71/2^-8)) -data8 0xff59119f503e6832 , 0x00003ffc // log(1/frcpa(1+ 72/2^-8)) -data8 0x8147ce381ae0e146 , 0x00003ffd // log(1/frcpa(1+ 73/2^-8)) -data8 0x82e45f06cb1ad0f2 , 0x00003ffd // log(1/frcpa(1+ 74/2^-8)) -data8 0x842f5c7c573cbaa2 , 0x00003ffd // log(1/frcpa(1+ 75/2^-8)) -// -data8 0x85ce471968c8893a , 0x00003ffd // log(1/frcpa(1+ 76/2^-8)) -data8 0x876e8305bc04066d , 0x00003ffd // log(1/frcpa(1+ 77/2^-8)) -data8 0x891012678031fbb3 , 0x00003ffd // log(1/frcpa(1+ 78/2^-8)) -data8 0x8a5f1493d766a05f , 0x00003ffd // log(1/frcpa(1+ 79/2^-8)) -data8 0x8c030c778c56fa00 , 0x00003ffd // log(1/frcpa(1+ 80/2^-8)) -// -data8 0x8da85df17e31d9ae , 0x00003ffd // log(1/frcpa(1+ 81/2^-8)) -data8 0x8efa663e7921687e , 0x00003ffd // log(1/frcpa(1+ 82/2^-8)) -data8 0x90a22b6875c6a1f8 , 0x00003ffd // log(1/frcpa(1+ 83/2^-8)) -data8 0x91f62cc8f5d24837 , 0x00003ffd // log(1/frcpa(1+ 84/2^-8)) -data8 0x93a06cfc3857d980 , 0x00003ffd // log(1/frcpa(1+ 85/2^-8)) -// -data8 0x94f66d5e6fd01ced , 0x00003ffd // log(1/frcpa(1+ 86/2^-8)) -data8 0x96a330156e6772f2 , 0x00003ffd // log(1/frcpa(1+ 87/2^-8)) -data8 0x97fb3582754ea25b , 0x00003ffd // log(1/frcpa(1+ 88/2^-8)) -data8 0x99aa8259aad1bbf2 , 0x00003ffd // log(1/frcpa(1+ 89/2^-8)) -data8 0x9b0492f6227ae4a8 , 0x00003ffd // log(1/frcpa(1+ 90/2^-8)) -// -data8 0x9c5f8e199bf3a7a5 , 0x00003ffd // log(1/frcpa(1+ 91/2^-8)) -data8 0x9e1293b9998c1daa , 0x00003ffd // log(1/frcpa(1+ 92/2^-8)) -data8 0x9f6fa31e0b41f308 , 0x00003ffd // log(1/frcpa(1+ 93/2^-8)) -data8 0xa0cda11eaf46390e , 0x00003ffd // log(1/frcpa(1+ 94/2^-8)) -data8 0xa22c8f029cfa45aa , 0x00003ffd // log(1/frcpa(1+ 95/2^-8)) -// -data8 0xa3e48badb7856b34 , 0x00003ffd // log(1/frcpa(1+ 96/2^-8)) -data8 0xa5459a0aa95849f9 , 0x00003ffd // log(1/frcpa(1+ 97/2^-8)) -data8 0xa6a79c84480cfebd , 0x00003ffd // log(1/frcpa(1+ 98/2^-8)) -data8 0xa80a946d0fcb3eb2 , 0x00003ffd // log(1/frcpa(1+ 99/2^-8)) -data8 0xa96e831a3ea7b314 , 0x00003ffd // log(1/frcpa(1+100/2^-8)) -// -data8 0xaad369e3dc544e3b , 0x00003ffd // log(1/frcpa(1+101/2^-8)) -data8 0xac92e9588952c815 , 0x00003ffd // log(1/frcpa(1+102/2^-8)) -data8 0xadfa035aa1ed8fdc , 0x00003ffd // log(1/frcpa(1+103/2^-8)) -data8 0xaf6219eae1ad6e34 , 0x00003ffd // log(1/frcpa(1+104/2^-8)) -data8 0xb0cb2e6d8160f753 , 0x00003ffd // log(1/frcpa(1+105/2^-8)) -// -data8 0xb2354249ad950f72 , 0x00003ffd // log(1/frcpa(1+106/2^-8)) -data8 0xb3a056e98ef4a3b4 , 0x00003ffd // log(1/frcpa(1+107/2^-8)) -data8 0xb50c6dba52c6292a , 0x00003ffd // log(1/frcpa(1+108/2^-8)) -data8 0xb679882c33876165 , 0x00003ffd // log(1/frcpa(1+109/2^-8)) -data8 0xb78c07429785cedc , 0x00003ffd // log(1/frcpa(1+110/2^-8)) -// -data8 0xb8faeb8dc4a77d24 , 0x00003ffd // log(1/frcpa(1+111/2^-8)) -data8 0xba6ad77eb36ae0d6 , 0x00003ffd // log(1/frcpa(1+112/2^-8)) -data8 0xbbdbcc915e9bee50 , 0x00003ffd // log(1/frcpa(1+113/2^-8)) -data8 0xbd4dcc44f8cf12ef , 0x00003ffd // log(1/frcpa(1+114/2^-8)) -data8 0xbec0d81bf5b531fa , 0x00003ffd // log(1/frcpa(1+115/2^-8)) -// -data8 0xc034f19c139186f4 , 0x00003ffd // log(1/frcpa(1+116/2^-8)) -data8 0xc14cb69f7c5e55ab , 0x00003ffd // log(1/frcpa(1+117/2^-8)) -data8 0xc2c2abbb6e5fd56f , 0x00003ffd // log(1/frcpa(1+118/2^-8)) -data8 0xc439b2c193e6771e , 0x00003ffd // log(1/frcpa(1+119/2^-8)) -data8 0xc553acb9d5c67733 , 0x00003ffd // log(1/frcpa(1+120/2^-8)) -// -data8 0xc6cc96e441272441 , 0x00003ffd // log(1/frcpa(1+121/2^-8)) -data8 0xc8469753eca88c30 , 0x00003ffd // log(1/frcpa(1+122/2^-8)) -data8 0xc962cf3ce072b05c , 0x00003ffd // log(1/frcpa(1+123/2^-8)) -data8 0xcadeba8771f694aa , 0x00003ffd // log(1/frcpa(1+124/2^-8)) -data8 0xcc5bc08d1f72da94 , 0x00003ffd // log(1/frcpa(1+125/2^-8)) -// -data8 0xcd7a3f99ea035c29 , 0x00003ffd // log(1/frcpa(1+126/2^-8)) -data8 0xcef93860c8a53c35 , 0x00003ffd // log(1/frcpa(1+127/2^-8)) -data8 0xd0192f68a7ed23df , 0x00003ffd // log(1/frcpa(1+128/2^-8)) -data8 0xd19a201127d3c645 , 0x00003ffd // log(1/frcpa(1+129/2^-8)) -data8 0xd2bb92f4061c172c , 0x00003ffd // log(1/frcpa(1+130/2^-8)) -// -data8 0xd43e80b2ee8cc8fc , 0x00003ffd // log(1/frcpa(1+131/2^-8)) -data8 0xd56173601fc4ade4 , 0x00003ffd // log(1/frcpa(1+132/2^-8)) -data8 0xd6e6637efb54086f , 0x00003ffd // log(1/frcpa(1+133/2^-8)) -data8 0xd80ad9f58f3c8193 , 0x00003ffd // log(1/frcpa(1+134/2^-8)) -data8 0xd991d1d31aca41f8 , 0x00003ffd // log(1/frcpa(1+135/2^-8)) -// -data8 0xdab7d02231484a93 , 0x00003ffd // log(1/frcpa(1+136/2^-8)) -data8 0xdc40d532cde49a54 , 0x00003ffd // log(1/frcpa(1+137/2^-8)) -data8 0xdd685f79ed8b265e , 0x00003ffd // log(1/frcpa(1+138/2^-8)) -data8 0xde9094bbc0e17b1d , 0x00003ffd // log(1/frcpa(1+139/2^-8)) -data8 0xe01c91b78440c425 , 0x00003ffd // log(1/frcpa(1+140/2^-8)) -// -data8 0xe14658f26997e729 , 0x00003ffd // log(1/frcpa(1+141/2^-8)) -data8 0xe270cdc2391e0d23 , 0x00003ffd // log(1/frcpa(1+142/2^-8)) -data8 0xe3ffce3a2aa64922 , 0x00003ffd // log(1/frcpa(1+143/2^-8)) -data8 0xe52bdb274ed82887 , 0x00003ffd // log(1/frcpa(1+144/2^-8)) -data8 0xe6589852e75d7df6 , 0x00003ffd // log(1/frcpa(1+145/2^-8)) -// -data8 0xe786068c79937a7d , 0x00003ffd // log(1/frcpa(1+146/2^-8)) -data8 0xe91903adad100911 , 0x00003ffd // log(1/frcpa(1+147/2^-8)) -data8 0xea481236f7d35bb0 , 0x00003ffd // log(1/frcpa(1+148/2^-8)) -data8 0xeb77d48c692e6b14 , 0x00003ffd // log(1/frcpa(1+149/2^-8)) -data8 0xeca84b83d7297b87 , 0x00003ffd // log(1/frcpa(1+150/2^-8)) -// -data8 0xedd977f4962aa158 , 0x00003ffd // log(1/frcpa(1+151/2^-8)) -data8 0xef7179a22f257754 , 0x00003ffd // log(1/frcpa(1+152/2^-8)) -data8 0xf0a450d139366ca7 , 0x00003ffd // log(1/frcpa(1+153/2^-8)) -data8 0xf1d7e0524ff9ffdb , 0x00003ffd // log(1/frcpa(1+154/2^-8)) -data8 0xf30c29036a8b6cae , 0x00003ffd // log(1/frcpa(1+155/2^-8)) -// -data8 0xf4412bc411ea8d92 , 0x00003ffd // log(1/frcpa(1+156/2^-8)) -data8 0xf576e97564c8619d , 0x00003ffd // log(1/frcpa(1+157/2^-8)) -data8 0xf6ad62fa1b5f172f , 0x00003ffd // log(1/frcpa(1+158/2^-8)) -data8 0xf7e499368b55c542 , 0x00003ffd // log(1/frcpa(1+159/2^-8)) -data8 0xf91c8d10abaffe22 , 0x00003ffd // log(1/frcpa(1+160/2^-8)) -// -data8 0xfa553f7018c966f3 , 0x00003ffd // log(1/frcpa(1+161/2^-8)) -data8 0xfb8eb13e185d802c , 0x00003ffd // log(1/frcpa(1+162/2^-8)) -data8 0xfcc8e3659d9bcbed , 0x00003ffd // log(1/frcpa(1+163/2^-8)) -data8 0xfe03d6d34d487fd2 , 0x00003ffd // log(1/frcpa(1+164/2^-8)) -data8 0xff3f8c7581e9f0ae , 0x00003ffd // log(1/frcpa(1+165/2^-8)) -// -data8 0x803e029e280173ae , 0x00003ffe // log(1/frcpa(1+166/2^-8)) -data8 0x80dca10cc52d0757 , 0x00003ffe // log(1/frcpa(1+167/2^-8)) -data8 0x817ba200632755a1 , 0x00003ffe // log(1/frcpa(1+168/2^-8)) -data8 0x821b05f3b01d6774 , 0x00003ffe // log(1/frcpa(1+169/2^-8)) -data8 0x82bacd623ff19d06 , 0x00003ffe // log(1/frcpa(1+170/2^-8)) -// -data8 0x835af8c88e7a8f47 , 0x00003ffe // log(1/frcpa(1+171/2^-8)) -data8 0x83c5f8299e2b4091 , 0x00003ffe // log(1/frcpa(1+172/2^-8)) -data8 0x8466cb43f3d87300 , 0x00003ffe // log(1/frcpa(1+173/2^-8)) -data8 0x850803a67c80ca4b , 0x00003ffe // log(1/frcpa(1+174/2^-8)) -data8 0x85a9a1d11a23b461 , 0x00003ffe // log(1/frcpa(1+175/2^-8)) -// -data8 0x864ba644a18e6e05 , 0x00003ffe // log(1/frcpa(1+176/2^-8)) -data8 0x86ee1182dcc432f7 , 0x00003ffe // log(1/frcpa(1+177/2^-8)) -data8 0x875a925d7e48c316 , 0x00003ffe // log(1/frcpa(1+178/2^-8)) -data8 0x87fdaa109d23aef7 , 0x00003ffe // log(1/frcpa(1+179/2^-8)) -data8 0x88a129ed4becfaf2 , 0x00003ffe // log(1/frcpa(1+180/2^-8)) -// -data8 0x89451278ecd7f9cf , 0x00003ffe // log(1/frcpa(1+181/2^-8)) -data8 0x89b29295f8432617 , 0x00003ffe // log(1/frcpa(1+182/2^-8)) -data8 0x8a572ac5a5496882 , 0x00003ffe // log(1/frcpa(1+183/2^-8)) -data8 0x8afc2d0ce3b2dadf , 0x00003ffe // log(1/frcpa(1+184/2^-8)) -data8 0x8b6a69c608cfd3af , 0x00003ffe // log(1/frcpa(1+185/2^-8)) -// -data8 0x8c101e106e899a83 , 0x00003ffe // log(1/frcpa(1+186/2^-8)) -data8 0x8cb63de258f9d626 , 0x00003ffe // log(1/frcpa(1+187/2^-8)) -data8 0x8d2539c5bd19e2b1 , 0x00003ffe // log(1/frcpa(1+188/2^-8)) -data8 0x8dcc0e064b29e6f1 , 0x00003ffe // log(1/frcpa(1+189/2^-8)) -data8 0x8e734f45d88357ae , 0x00003ffe // log(1/frcpa(1+190/2^-8)) -// -data8 0x8ee30cef034a20db , 0x00003ffe // log(1/frcpa(1+191/2^-8)) -data8 0x8f8b0515686d1d06 , 0x00003ffe // log(1/frcpa(1+192/2^-8)) -data8 0x90336bba039bf32f , 0x00003ffe // log(1/frcpa(1+193/2^-8)) -data8 0x90a3edd23d1c9d58 , 0x00003ffe // log(1/frcpa(1+194/2^-8)) -data8 0x914d0de2f5d61b32 , 0x00003ffe // log(1/frcpa(1+195/2^-8)) -// -data8 0x91be0c20d28173b5 , 0x00003ffe // log(1/frcpa(1+196/2^-8)) -data8 0x9267e737c06cd34a , 0x00003ffe // log(1/frcpa(1+197/2^-8)) -data8 0x92d962ae6abb1237 , 0x00003ffe // log(1/frcpa(1+198/2^-8)) -data8 0x9383fa6afbe2074c , 0x00003ffe // log(1/frcpa(1+199/2^-8)) -data8 0x942f0421651c1c4e , 0x00003ffe // log(1/frcpa(1+200/2^-8)) -// -data8 0x94a14a3845bb985e , 0x00003ffe // log(1/frcpa(1+201/2^-8)) -data8 0x954d133857f861e7 , 0x00003ffe // log(1/frcpa(1+202/2^-8)) -data8 0x95bfd96468e604c4 , 0x00003ffe // log(1/frcpa(1+203/2^-8)) -data8 0x9632d31cafafa858 , 0x00003ffe // log(1/frcpa(1+204/2^-8)) -data8 0x96dfaabd86fa1647 , 0x00003ffe // log(1/frcpa(1+205/2^-8)) -// -data8 0x9753261fcbb2a594 , 0x00003ffe // log(1/frcpa(1+206/2^-8)) -data8 0x9800c11b426b996d , 0x00003ffe // log(1/frcpa(1+207/2^-8)) -data8 0x9874bf4d45ae663c , 0x00003ffe // log(1/frcpa(1+208/2^-8)) -data8 0x99231f5ee9a74f79 , 0x00003ffe // log(1/frcpa(1+209/2^-8)) -data8 0x9997a18a56bcad28 , 0x00003ffe // log(1/frcpa(1+210/2^-8)) -// -data8 0x9a46c873a3267e79 , 0x00003ffe // log(1/frcpa(1+211/2^-8)) -data8 0x9abbcfc621eb6cb6 , 0x00003ffe // log(1/frcpa(1+212/2^-8)) -data8 0x9b310cb0d354c990 , 0x00003ffe // log(1/frcpa(1+213/2^-8)) -data8 0x9be14cf9e1b3515c , 0x00003ffe // log(1/frcpa(1+214/2^-8)) -data8 0x9c5710b8cbb73a43 , 0x00003ffe // log(1/frcpa(1+215/2^-8)) -// -data8 0x9ccd0abd301f399c , 0x00003ffe // log(1/frcpa(1+216/2^-8)) -data8 0x9d7e67f3bdce8888 , 0x00003ffe // log(1/frcpa(1+217/2^-8)) -data8 0x9df4ea81a99daa01 , 0x00003ffe // log(1/frcpa(1+218/2^-8)) -data8 0x9e6ba405a54514ba , 0x00003ffe // log(1/frcpa(1+219/2^-8)) -data8 0x9f1e21c8c7bb62b3 , 0x00003ffe // log(1/frcpa(1+220/2^-8)) -// -data8 0x9f956593f6b6355c , 0x00003ffe // log(1/frcpa(1+221/2^-8)) -data8 0xa00ce1092e5498c3 , 0x00003ffe // log(1/frcpa(1+222/2^-8)) -data8 0xa0c08309c4b912c1 , 0x00003ffe // log(1/frcpa(1+223/2^-8)) -data8 0xa1388a8c6faa2afa , 0x00003ffe // log(1/frcpa(1+224/2^-8)) -data8 0xa1b0ca7095b5f985 , 0x00003ffe // log(1/frcpa(1+225/2^-8)) -// -data8 0xa22942eb47534a00 , 0x00003ffe // log(1/frcpa(1+226/2^-8)) -data8 0xa2de62326449d0a3 , 0x00003ffe // log(1/frcpa(1+227/2^-8)) -data8 0xa357690f88bfe345 , 0x00003ffe // log(1/frcpa(1+228/2^-8)) -data8 0xa3d0a93f45169a4b , 0x00003ffe // log(1/frcpa(1+229/2^-8)) -data8 0xa44a22f7ffe65f30 , 0x00003ffe // log(1/frcpa(1+230/2^-8)) -// -data8 0xa500c5e5b4c1aa36 , 0x00003ffe // log(1/frcpa(1+231/2^-8)) -data8 0xa57ad064eb2ebbc2 , 0x00003ffe // log(1/frcpa(1+232/2^-8)) -data8 0xa5f5152dedf4384e , 0x00003ffe // log(1/frcpa(1+233/2^-8)) -data8 0xa66f9478856233ec , 0x00003ffe // log(1/frcpa(1+234/2^-8)) -data8 0xa6ea4e7cca02c32e , 0x00003ffe // log(1/frcpa(1+235/2^-8)) -// -data8 0xa765437325341ccf , 0x00003ffe // log(1/frcpa(1+236/2^-8)) -data8 0xa81e21e6c75b4020 , 0x00003ffe // log(1/frcpa(1+237/2^-8)) -data8 0xa899ab333fe2b9ca , 0x00003ffe // log(1/frcpa(1+238/2^-8)) -data8 0xa9157039c51ebe71 , 0x00003ffe // log(1/frcpa(1+239/2^-8)) -data8 0xa991713433c2b999 , 0x00003ffe // log(1/frcpa(1+240/2^-8)) -// -data8 0xaa0dae5cbcc048b3 , 0x00003ffe // log(1/frcpa(1+241/2^-8)) -data8 0xaa8a27ede5eb13ad , 0x00003ffe // log(1/frcpa(1+242/2^-8)) -data8 0xab06de228a9e3499 , 0x00003ffe // log(1/frcpa(1+243/2^-8)) -data8 0xab83d135dc633301 , 0x00003ffe // log(1/frcpa(1+244/2^-8)) -data8 0xac3fb076adc7fe7a , 0x00003ffe // log(1/frcpa(1+245/2^-8)) -// -data8 0xacbd3cbbe47988f1 , 0x00003ffe // log(1/frcpa(1+246/2^-8)) -data8 0xad3b06b1a5dc57c3 , 0x00003ffe // log(1/frcpa(1+247/2^-8)) -data8 0xadb90e94af887717 , 0x00003ffe // log(1/frcpa(1+248/2^-8)) -data8 0xae3754a218f7c816 , 0x00003ffe // log(1/frcpa(1+249/2^-8)) -data8 0xaeb5d9175437afa2 , 0x00003ffe // log(1/frcpa(1+250/2^-8)) -// -data8 0xaf349c322e9c7cee , 0x00003ffe // log(1/frcpa(1+251/2^-8)) -data8 0xafb39e30d1768d1c , 0x00003ffe // log(1/frcpa(1+252/2^-8)) -data8 0xb032df51c2c93116 , 0x00003ffe // log(1/frcpa(1+253/2^-8)) -data8 0xb0b25fd3e6035ad9 , 0x00003ffe // log(1/frcpa(1+254/2^-8)) -data8 0xb1321ff67cba178c , 0x00003ffe // log(1/frcpa(1+255/2^-8)) -LOCAL_OBJECT_END(log_table_3) - - -.section .text -GLOBAL_LIBM_ENTRY(acosh) - -{ .mfi - getf.exp acosh_GR_f8 = f8 - fclass.m p6,p0 = f8, 0xc3 // Test for x = NaN - mov log_GR_comp2 = 0x1003e -} -{ .mfi - addl NR_table_address = @ltoff(log_table_1), gp - fms.s1 log_y = f8, f8, f1 // y = x^2-1 - nop.i 0 -} -;; - -{ .mfi - getf.sig acosh_GR_f8_sig = f8 - fclass.m p11,p0 = f8, 0x21 // Test for x=+inf - mov log_GR_exp_17_ones = 0x1ffff -} -{ .mfi - ld8 NR_table_address = [NR_table_address] - fms.s1 log_w = f8,f1,f1 // w = x - 1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.lt.s1 p7,p8 = f8, f1 // Test for x<1.0 - addl log_GR_comp = 0x10020C,r0 // Upper 21 bits of signif of 1.0005 -} -{ .mfb - mov log_GR_exp_16_ones = 0xffff //BIAS -(p6) fma.d.s0 f8 = f8,f1,f0 // quietize nan result if x=nan -(p6) br.ret.spnt b0 // Exit for x=nan -} -;; - -{ .mfb - //get second table address - adds log_table_address2 = 0x40, NR_table_address - fcmp.eq.s1 p10,p0 = f8, f1 // Test for x=+1.0 -(p11) br.ret.spnt b0 // Exit for x=+inf -} -;; - -{ .mfi - ldfpd NR1,NR2 = [log_table_address2],16 - frsqrta.s1 log_y_rs,p0 = log_y // z=1/sqrt(y) - nop.i 0 -} -{ .mfb - nop.m 0 - fma.s1 log_arg = f8,f1,f8 -(p7) br.cond.spnt ACOSH_LESS_ONE // Branch if path 7, x < 1.0 -} -;; - -{ .mfi - ldfe log_C4 = [log_table_address2],16 -(p8) fcmp.eq.s0 p6,p0 = f8, f0 // Dummy op sets denorm flag if unorm>=1.0 - nop.i 0 -} -{ .mfb -(p8) cmp.le.unc p13,p0 = log_GR_comp2,acosh_GR_f8 - nop.f 0 -(p13) br.cond.spnt LOG_COMMON1 // Branch if path 4, x >= 2^63 -} -;; - -{ .mfi - ldfe log_C3 = [log_table_address2],16 -(p10) fmerge.s f8 = f0, f0 // Return 0 if x=1.0 - shr.u acosh_GR_f8_sig = acosh_GR_f8_sig,43 -} -{ .mib - cmp.eq p14,p0 = log_GR_exp_16_ones,acosh_GR_f8 - nop.i 0 -(p10) br.ret.spnt b0 // Exit for x=1.0 -} -;; - -{ .mfi - ldfe log_C2 = [log_table_address2],16 - frsqrta.s1 acosh_w_rs,p0 = log_w // t=1/sqrt(w) - nop.i 0 -} -{ .mfb -(p14) cmp.lt.unc p15,p0 = acosh_GR_f8_sig,log_GR_comp - nop.f 0 -(p15) br.cond.spnt ACOSH_NEAR_ONE // Branch if path 2, 1.0 < x < 1.0005 -} -;; - -// Here is main path, 1.0005 <= x < 2^63 -/////////////// The first iteration ////////////////////////////////// -{ .mfi - ldfpd acosh_comp,log_P5 = [NR_table_address],16 - fma.s1 log_y_rs_iter = log_y_rs,log_y,f0 // y*z - nop.i 0 -} -;; - -{ .mfi - ldfpd log_P4,log_P3 = [NR_table_address],16 - fnma.s1 log_y_rs_iter = log_y_rs_iter,log_y_rs,NR2 // 3-(y*z)*z - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter1 = log_y_rs,NR1,f0 // 0.5*z - nop.i 0 -} -;; - -{ .mfi - ldfpd log_P2,log_P1 = [NR_table_address],16 - //(0.5*z)*(3-(y*z)*z) - fma.s1 log_y_rs_iter = log_y_rs_iter1,log_y_rs_iter,f0 - nop.i 0 -} -;; - -/////////////////////////// The second iteration ///////////////////////////// -{ .mfi - nop.m 0 - fma.s1 log_y_rs = log_y_rs_iter,log_y,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 log_y_rs = log_y_rs,log_y_rs_iter,NR2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter1 = log_y_rs_iter,NR1,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //(0.5*z)*(3-(y*z)*z) - fma.s1 log_y_rs_iter = log_y_rs_iter1,log_y_rs,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - //(0.5*z)*(3-(y*z)*z) - fma.s1 log_arg_early = log_y_rs_iter1,log_y_rs,f0 - nop.i 0 -} -;; - -//////////////////////////////////////// The third iteration ///////////////// -{ .mfi - nop.m 0 - fma.s1 log_y_rs = log_y_rs_iter,log_y,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter1 = log_y_rs_iter,NR1,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_arg_early = log_arg_early,log_y,f8 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 log_y_rs = log_y_rs,log_y_rs_iter,NR2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter1 = log_y_rs_iter1,log_y,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - frcpa.s1 log_C,p0 = f1,log_arg_early - nop.i 0 -} -;; - -{ .mfi - getf.exp log_GR_signexp_f8 = log_arg_early - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - getf.sig log_GR_significand_f8 = log_arg_early - fma.s1 log_arg = log_y_rs_iter1,log_y_rs,f8 // (0.5*z)*(3-(y*z)*z) - adds log_table_address3 = 0x70, NR_table_address -} -;; - -///////////////////////////////// The end NR iterations ///////////////////// -{ .mfi - ldfe log2 = [NR_table_address],16 - nop.f 0 - nop.i 0 -} -;; - -{ .mmi - //significant bit destruction - and log_GR_exp_f8 = log_GR_signexp_f8, log_GR_exp_17_ones -;; - //BIAS subtraction - sub log_GR_true_exp_f8 = log_GR_exp_f8, log_GR_exp_16_ones - nop.i 0 -} -;; - -{ .mfi - setf.sig log_int_Nfloat = log_GR_true_exp_f8 - fms.s1 log_r = log_C,log_arg,f1 // C = frcpa(x); r = C * x - 1 - extr.u log_GR_index = log_GR_significand_f8,55,8 //Extract 8 bits -} -;; - -{ .mmi - //pre-index*16 + index - shladd log_table_address3 = log_GR_index,4,log_table_address3 -;; - ldfe log_T = [log_table_address3] - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rsq = log_r, log_r, f0 //r^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_rp_p4 = log_P5, log_r, log_P4 //P5*r + P4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rp_p32 = log_P3, log_r, log_P2 //P3*r + P2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //convert N to the floating-point format log_Nfloat - fcvt.xf log_Nfloat = log_int_Nfloat - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rcube = log_rsq, log_r, f0 //r^3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_rp_p10 = log_rsq, log_P1, log_r //P1*r^2 + r - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //(P5*r + P4)*r^2 + P3*r + P2 - fma.s1 log_rp_p2 = log_rp_p4, log_rsq, log_rp_p32 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_T_plus_Nlog2 = log_Nfloat,log2,log_T //N*log2 + T - nop.i 0 -} -{ .mfi - nop.m 0 - //((P5*r + P4)*r^2 + P3*r + P2)*r^3 + P1*r^2 + r - fma.s1 log_r2P_r = log_rp_p2, log_rcube, log_rp_p10 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - // N*log2 + T + ((P5*r + P4)*r^2 + P3*r + P2)*w^3 + P1*r^2 + r - fadd.d.s0 f8 = log_T_plus_Nlog2, log_r2P_r - br.ret.sptk b0 // Exit main path, path 3: 1.0005 <= x < 2^63 -} -;; - -// Here if path 2, 1.0 < x < 1.0005 -ACOSH_NEAR_ONE: -// The first NR iteration -{ .mfi - ldfe log_C1 = [log_table_address2],16 - fma.s1 acosh_w_iter1 = acosh_w_rs,log_w,f0 //t*w - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 acosh_w_1 = f8,log_C4,log_C3 //x*C4 + C3 - nop.i 0 -} -;; - -{ .mfi - ldfe log_C0 = [log_table_address2],16 - fma.s1 acosh_w_iter2 = acosh_w_rs,NR1,f0 //t*0.5 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 acosh_w_iter1 = acosh_w_iter1,acosh_w_rs,NR2 //3-t*t*w - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //(3-t*t*w)*t*0.5 - fma.s1 acosh_w_iter2 = acosh_w_iter2,acosh_w_iter1,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 acosh_w_1 = acosh_w_1,log_w,log_C2 //(x*C4 + C3)*(x-1) + C2 - nop.i 0 -} -;; - -// The second NR iteration -{ .mfi - nop.m 0 - fma.s1 acosh_w_rs = acosh_w_iter2,log_w,f0 //t*w - nop.i 0 -} -{ .mfi - nop.m 0 - //((x*C4 + C3)*(x-1) + C2)*(x-1) + C1 - fma.s1 acosh_w_1 = acosh_w_1,log_w,log_C1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 acosh_w_iter1 = acosh_w_iter2,acosh_w_rs,NR2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 acosh_w_iter2 = acosh_w_iter2,NR1,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 acosh_w_iter2 = acosh_w_iter2,acosh_w_iter1,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - //(((x*C4 + C3)*(x-1) + C2)*(x-1) + C1)*(x-1) + C0 - fma.s1 acosh_w_1 = acosh_w_1,log_w,log_C0 - nop.i 0 -} -;; - -//The third NR iteration -{ .mfi - nop.m 0 - fma.s1 acosh_w_rs = acosh_w_iter2,log_w,f0 //t*w - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 acosh_w_iter1 = acosh_w_iter2,acosh_w_rs,NR2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 acosh_w_iter2 = acosh_w_iter2,NR1,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 acosh_w_iter2 = acosh_w_iter2,acosh_w_iter1,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 acosh_w_sqrt = acosh_w_iter2,log_w,f0 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fma.d.s0 f8 = acosh_w_1,acosh_w_sqrt,f0 - br.ret.sptk b0 // Exit path 2, 1.0 < x < 1.0005 -} -;; - -// Here if path 4, x >= 2^63 -LOG_COMMON1: -{ .mfi - ldfpd acosh_comp,log_P5 = [NR_table_address],16 - frcpa.s1 log_C,p0 = f1,log_arg - nop.i 0 -} -;; - -{ .mmi - getf.exp log_GR_signexp_f8 = log_arg - ldfpd log_P4,log_P3 = [NR_table_address],16 - nop.i 0 -} -;; - -{ .mmi - getf.sig log_GR_significand_f8 = log_arg - ldfpd log_P2,log_P1 = [NR_table_address],16 - nop.i 0 -} -;; - -{ .mfi - adds log_table_address3 = 0x70, NR_table_address - nop.f 0 - //significant bit destruction - and log_GR_exp_f8 = log_GR_signexp_f8, log_GR_exp_17_ones -} -;; - -{ .mmf - ldfe log2 = [NR_table_address],16 - //BIAS subtraction - sub log_GR_true_exp_f8 = log_GR_exp_f8, log_GR_exp_16_ones - fms.s1 log_r = log_C,log_arg,f1 // C = frcpa(x); r = C * x - 1 -} -;; - -{ .mfi - setf.sig log_int_Nfloat = log_GR_true_exp_f8 - nop.f 0 - extr.u log_GR_index = log_GR_significand_f8,55,8 //Extract 8 bits -} -;; - -{ .mmi - //pre-index*16 + index - shladd log_table_address3 = log_GR_index,4,log_table_address3 -;; - ldfe log_T = [log_table_address3] - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rsq = log_r, log_r, f0 //r^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_rp_p4 = log_P5, log_r, log_P4 //P5*r + P4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rp_p32 = log_P3, log_r, log_P2 //P3*r + P2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rcube = log_rsq, log_r, f0 //r^3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_rp_p10 = log_rsq, log_P1, log_r //P1*r^2 + r - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //convert N to the floating-point format log_Nfloat - fcvt.xf log_Nfloat = log_int_Nfloat - nop.i 0 -} -{ .mfi - nop.m 0 - //(P5*r + P4)*r^2 + P3*r + P2 - fma.s1 log_rp_p2 = log_rp_p4, log_rsq, log_rp_p32 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_T_plus_Nlog2 = log_Nfloat,log2,log_T //N*log2 + T - nop.i 0 -} -{ .mfi - nop.m 0 - //((P5*r + P4)*r^2 + P3*r + P2)*w^3 + P1*r^2 + r - fma.s1 log_r2P_r = log_rp_p2, log_rcube, log_rp_p10 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - // N*log2 + T + ((P5*r + P4)*r^2 + P3*r + P2)*w^3 + P1*r^2 + r - fadd.d.s0 f8 = log_T_plus_Nlog2, log_r2P_r - br.ret.sptk b0 // Exit path 4, x >= 2^63 -} -;; - -// Here if path 7, x < 1.0 -ACOSH_LESS_ONE: -{ .mfi - alloc r32 = ar.pfs,1,3,4,0 - fmerge.s f10 = f8,f8 - nop.i 0 -} -;; - -{ .mfb - mov acosh_GR_tag = 136 - frcpa.s0 f8,p0 = f0,f0 - br.cond.sptk __libm_error_region -} -;; - -GLOBAL_LIBM_END(acosh) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfd [GR_Parameter_Y] = f1,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfd [GR_Parameter_X] = f10 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_acoshf.S b/sysdeps/ia64/fpu/e_acoshf.S deleted file mode 100644 index 58ef5f2adb..0000000000 --- a/sysdeps/ia64/fpu/e_acoshf.S +++ /dev/null @@ -1,1030 +0,0 @@ -.file "acoshf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// ============================================================== -// History -// ============================================================== -// 03/28/01 Initial version -// 04/19/01 Improved speed of the paths #1,2,3,4,5 -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align -// 05/14/03 Improved performance, set denormal flag for unorms >= 1.0 -// -// API -// ============================================================== -// float acoshf(float) -// -// Overview of operation -// ============================================================== -// -// There are 7 paths: -// 1. x = 1.0 -// Return acoshf(x) = 0.0 -// 2. 1.0 < x < 1.000499725341796875(0x3FF0020C00000000) -// Return acoshf(x) = sqrt(x-1) * Pol4(x), -// where Pol4(x) = (x*C2 + C1)*(x-1) + C0 -// -// 3. 1.000499725341796875(0x3FF0020C00000000) <= x < 2^51 -// Return acoshf(x) = log(x + sqrt(x^2 -1.0)) -// To compute x + sqrt(x^2 -1.0) modified Newton Raphson method is used -// (2 iterations) -// Algorithm description for log function see below. -// -// 4. 2^51 <= x < +INF -// Return acoshf(x) = log(2*x) -// Algorithm description for log function see below. -// -// 5. x = +INF -// Return acoshf(x) = +INF -// -// 6. x = [S,Q]NaN -// Return acoshf(x) = QNaN -// -// 7. x < 1.0 -// It's domain error. Error handler with tag = 137 is called -// -//============================================================== -// Algorithm Description for log(x) function -// Below we are using the fact that inequality x - 1.0 > 2^(-6) is always -// true for this acosh implementation -// -// Consider x = 2^N 1.f1 f2 f3 f4...f63 -// Log(x) = log(frcpa(x) x/frcpa(x)) -// = log(1/frcpa(x)) + log(frcpa(x) x) -// = -log(frcpa(x)) + log(frcpa(x) x) -// -// frcpa(x) = 2^-N frcpa((1.f1 f2 ... f63) -// -// -log(frcpa(x)) = -log(C) -// = -log(2^-N) - log(frcpa(1.f1 f2 ... f63)) -// -// -log(frcpa(x)) = -log(C) -// = +Nlog2 - log(frcpa(1.f1 f2 ... f63)) -// -// -log(frcpa(x)) = -log(C) -// = +Nlog2 + log(frcpa(1.f1 f2 ... f63)) -// -// Log(x) = log(1/frcpa(x)) + log(frcpa(x) x) -// -// Log(x) = +Nlog2 + log(1./frcpa(1.f1 f2 ... f63)) + log(frcpa(x) x) -// Log(x) = +Nlog2 - log(/frcpa(1.f1 f2 ... f63)) + log(frcpa(x) x) -// Log(x) = +Nlog2 + T + log(frcpa(x) x) -// -// Log(x) = +Nlog2 + T + log(C x) -// -// Cx = 1 + r -// -// Log(x) = +Nlog2 + T + log(1+r) -// Log(x) = +Nlog2 + T + Series( r - r^2/2 + r^3/3 - r^4/4 ....) -// -// 1.f1 f2 ... f8 has 256 entries. -// They are 1 + k/2^8, k = 0 ... 255 -// These 256 values are the table entries. -// -// Implementation -//============================================================== -// C = frcpa(x) -// r = C * x - 1 -// -// Form rseries = r + P1*r^2 + P2*r^3 + P3*r^4 -// -// x = f * 2*n where f is 1.f_1f_2f_3....f_63 -// Nfloat = float(n) where n is the true unbiased exponent -// pre-index = f_1f_2....f_8 -// index = pre_index * 8 -// get the dxt table entry at index + offset = T -// -// result = (T + Nfloat * log(2)) + rseries -// -// The T table is calculated as follows -// Form x_k = 1 + k/2^8 where k goes from 0... 255 -// y_k = frcpa(x_k) -// log(1/y_k) in quad and round to double -// - -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f9 -> f15, f32 -> f62 -// -// General registers used: -// r14 -> r27, r32 -> r39 -// -// Predicate registers used: -// p6 -> p15 -// -// p6 to filter out case when x = [Q,S]NaN -// p7,p8 to filter out case when x < 1.0 -// -// p10 to select path #1 -// p11 to filter out case when x = +INF -// p12 used in the frcpa -// p13 to select path #4 -// p14,p15 to select path #2 - -// Assembly macros -//============================================================== -log_GR_exp_17_ones = r14 -log_GR_signexp_f8 = r15 -log_table_address2 = r16 -log_GR_exp_16_ones = r17 -log_GR_exp_f8 = r18 -log_GR_true_exp_f8 = r19 -log_GR_significand_f8 = r20 -log_GR_index = r21 -log_GR_comp2 = r22 -acosh_GR_f8 = r23 -log_GR_comp = r24 -acosh_GR_f8_sig = r25 -log_table_address3 = r26 -NR_table_address = r27 - -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_SAVE_PFS = r35 - -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -acosh_GR_tag = r39 - -//============================================================== -log_y = f9 -NR1 = f10 -NR2 = f11 -log_y_rs = f12 -log_y_rs_iter = f13 -log_y_rs_iter1 = f14 -log_NORM_f8 = f15 -log_w = f32 -acosh_comp = f34 -acosh_comp2 = f33 -log_P3 = f35 -log_P2 = f36 -log_P1 = f37 -log2 = f38 -log_C0 = f39 -log_C1 = f40 -log_C2 = f41 -acosh_w_rs = f42 -log_C = f43 -log_arg = f44 -acosh_w_iter1 = f45 -acosh_w_iter2 = f46 -log_int_Nfloat = f47 -log_r = f48 -log_rsq = f49 -log_rp_p4 = f50 -log_rp_p32 = f51 -log_rcube = f52 -log_rp_p10 = f53 -log_rp_p2 = f54 -log_Nfloat = f55 -log_T = f56 -log_r2P_r = f57 -log_T_plus_Nlog2 = f58 -acosh_w_sqrt = f59 -acosh_w_1 = f60 -log_arg_early = f61 -log_y_rs_iter2 = f62 - - -// Data tables -//============================================================== - -RODATA -.align 16 - -LOCAL_OBJECT_START(log_table_1) -data8 0xbfd0001008f39d59 // p3 -data8 0x3fd5556073e0c45a // p2 -data8 0xbfdffffffffaea15 // p1 -data8 0x3FE62E42FEFA39EF // log2 -LOCAL_OBJECT_END(log_table_1) - -LOCAL_OBJECT_START(log_table_2) - -data8 0x3FE0000000000000 // 0.5 -data8 0x4008000000000000 // 3.0 -data8 0xD92CBAD213719F11, 0x00003FF9 // C2 3FF9D92CBAD213719F11 -data8 0x93D38EBF2EC9B073, 0x0000BFFC // C1 BFFC93D38EBF2EC9B073 -data8 0xB504F333F9DA0E32, 0x00003FFF // C0 3FFFB504F333F9DA0E32 -LOCAL_OBJECT_END(log_table_2) - -LOCAL_OBJECT_START(log_table_3) -data8 0x3F60040155D5889E //log(1/frcpa(1+ 0/256) -data8 0x3F78121214586B54 //log(1/frcpa(1+ 1/256) -data8 0x3F841929F96832F0 //log(1/frcpa(1+ 2/256) -data8 0x3F8C317384C75F06 //log(1/frcpa(1+ 3/256) -data8 0x3F91A6B91AC73386 //log(1/frcpa(1+ 4/256) -data8 0x3F95BA9A5D9AC039 //log(1/frcpa(1+ 5/256) -data8 0x3F99D2A8074325F4 //log(1/frcpa(1+ 6/256) -data8 0x3F9D6B2725979802 //log(1/frcpa(1+ 7/256) -data8 0x3FA0C58FA19DFAAA //log(1/frcpa(1+ 8/256) -data8 0x3FA2954C78CBCE1B //log(1/frcpa(1+ 9/256) -data8 0x3FA4A94D2DA96C56 //log(1/frcpa(1+ 10/256) -data8 0x3FA67C94F2D4BB58 //log(1/frcpa(1+ 11/256) -data8 0x3FA85188B630F068 //log(1/frcpa(1+ 12/256) -data8 0x3FAA6B8ABE73AF4C //log(1/frcpa(1+ 13/256) -data8 0x3FAC441E06F72A9E //log(1/frcpa(1+ 14/256) -data8 0x3FAE1E6713606D07 //log(1/frcpa(1+ 15/256) -data8 0x3FAFFA6911AB9301 //log(1/frcpa(1+ 16/256) -data8 0x3FB0EC139C5DA601 //log(1/frcpa(1+ 17/256) -data8 0x3FB1DBD2643D190B //log(1/frcpa(1+ 18/256) -data8 0x3FB2CC7284FE5F1C //log(1/frcpa(1+ 19/256) -data8 0x3FB3BDF5A7D1EE64 //log(1/frcpa(1+ 20/256) -data8 0x3FB4B05D7AA012E0 //log(1/frcpa(1+ 21/256) -data8 0x3FB580DB7CEB5702 //log(1/frcpa(1+ 22/256) -data8 0x3FB674F089365A7A //log(1/frcpa(1+ 23/256) -data8 0x3FB769EF2C6B568D //log(1/frcpa(1+ 24/256) -data8 0x3FB85FD927506A48 //log(1/frcpa(1+ 25/256) -data8 0x3FB9335E5D594989 //log(1/frcpa(1+ 26/256) -data8 0x3FBA2B0220C8E5F5 //log(1/frcpa(1+ 27/256) -data8 0x3FBB0004AC1A86AC //log(1/frcpa(1+ 28/256) -data8 0x3FBBF968769FCA11 //log(1/frcpa(1+ 29/256) -data8 0x3FBCCFEDBFEE13A8 //log(1/frcpa(1+ 30/256) -data8 0x3FBDA727638446A2 //log(1/frcpa(1+ 31/256) -data8 0x3FBEA3257FE10F7A //log(1/frcpa(1+ 32/256) -data8 0x3FBF7BE9FEDBFDE6 //log(1/frcpa(1+ 33/256) -data8 0x3FC02AB352FF25F4 //log(1/frcpa(1+ 34/256) -data8 0x3FC097CE579D204D //log(1/frcpa(1+ 35/256) -data8 0x3FC1178E8227E47C //log(1/frcpa(1+ 36/256) -data8 0x3FC185747DBECF34 //log(1/frcpa(1+ 37/256) -data8 0x3FC1F3B925F25D41 //log(1/frcpa(1+ 38/256) -data8 0x3FC2625D1E6DDF57 //log(1/frcpa(1+ 39/256) -data8 0x3FC2D1610C86813A //log(1/frcpa(1+ 40/256) -data8 0x3FC340C59741142E //log(1/frcpa(1+ 41/256) -data8 0x3FC3B08B6757F2A9 //log(1/frcpa(1+ 42/256) -data8 0x3FC40DFB08378003 //log(1/frcpa(1+ 43/256) -data8 0x3FC47E74E8CA5F7C //log(1/frcpa(1+ 44/256) -data8 0x3FC4EF51F6466DE4 //log(1/frcpa(1+ 45/256) -data8 0x3FC56092E02BA516 //log(1/frcpa(1+ 46/256) -data8 0x3FC5D23857CD74D5 //log(1/frcpa(1+ 47/256) -data8 0x3FC6313A37335D76 //log(1/frcpa(1+ 48/256) -data8 0x3FC6A399DABBD383 //log(1/frcpa(1+ 49/256) -data8 0x3FC70337DD3CE41B //log(1/frcpa(1+ 50/256) -data8 0x3FC77654128F6127 //log(1/frcpa(1+ 51/256) -data8 0x3FC7E9D82A0B022D //log(1/frcpa(1+ 52/256) -data8 0x3FC84A6B759F512F //log(1/frcpa(1+ 53/256) -data8 0x3FC8AB47D5F5A310 //log(1/frcpa(1+ 54/256) -data8 0x3FC91FE49096581B //log(1/frcpa(1+ 55/256) -data8 0x3FC981634011AA75 //log(1/frcpa(1+ 56/256) -data8 0x3FC9F6C407089664 //log(1/frcpa(1+ 57/256) -data8 0x3FCA58E729348F43 //log(1/frcpa(1+ 58/256) -data8 0x3FCABB55C31693AD //log(1/frcpa(1+ 59/256) -data8 0x3FCB1E104919EFD0 //log(1/frcpa(1+ 60/256) -data8 0x3FCB94EE93E367CB //log(1/frcpa(1+ 61/256) -data8 0x3FCBF851C067555F //log(1/frcpa(1+ 62/256) -data8 0x3FCC5C0254BF23A6 //log(1/frcpa(1+ 63/256) -data8 0x3FCCC000C9DB3C52 //log(1/frcpa(1+ 64/256) -data8 0x3FCD244D99C85674 //log(1/frcpa(1+ 65/256) -data8 0x3FCD88E93FB2F450 //log(1/frcpa(1+ 66/256) -data8 0x3FCDEDD437EAEF01 //log(1/frcpa(1+ 67/256) -data8 0x3FCE530EFFE71012 //log(1/frcpa(1+ 68/256) -data8 0x3FCEB89A1648B971 //log(1/frcpa(1+ 69/256) -data8 0x3FCF1E75FADF9BDE //log(1/frcpa(1+ 70/256) -data8 0x3FCF84A32EAD7C35 //log(1/frcpa(1+ 71/256) -data8 0x3FCFEB2233EA07CD //log(1/frcpa(1+ 72/256) -data8 0x3FD028F9C7035C1C //log(1/frcpa(1+ 73/256) -data8 0x3FD05C8BE0D9635A //log(1/frcpa(1+ 74/256) -data8 0x3FD085EB8F8AE797 //log(1/frcpa(1+ 75/256) -data8 0x3FD0B9C8E32D1911 //log(1/frcpa(1+ 76/256) -data8 0x3FD0EDD060B78081 //log(1/frcpa(1+ 77/256) -data8 0x3FD122024CF0063F //log(1/frcpa(1+ 78/256) -data8 0x3FD14BE2927AECD4 //log(1/frcpa(1+ 79/256) -data8 0x3FD180618EF18ADF //log(1/frcpa(1+ 80/256) -data8 0x3FD1B50BBE2FC63B //log(1/frcpa(1+ 81/256) -data8 0x3FD1DF4CC7CF242D //log(1/frcpa(1+ 82/256) -data8 0x3FD214456D0EB8D4 //log(1/frcpa(1+ 83/256) -data8 0x3FD23EC5991EBA49 //log(1/frcpa(1+ 84/256) -data8 0x3FD2740D9F870AFB //log(1/frcpa(1+ 85/256) -data8 0x3FD29ECDABCDFA04 //log(1/frcpa(1+ 86/256) -data8 0x3FD2D46602ADCCEE //log(1/frcpa(1+ 87/256) -data8 0x3FD2FF66B04EA9D4 //log(1/frcpa(1+ 88/256) -data8 0x3FD335504B355A37 //log(1/frcpa(1+ 89/256) -data8 0x3FD360925EC44F5D //log(1/frcpa(1+ 90/256) -data8 0x3FD38BF1C3337E75 //log(1/frcpa(1+ 91/256) -data8 0x3FD3C25277333184 //log(1/frcpa(1+ 92/256) -data8 0x3FD3EDF463C1683E //log(1/frcpa(1+ 93/256) -data8 0x3FD419B423D5E8C7 //log(1/frcpa(1+ 94/256) -data8 0x3FD44591E0539F49 //log(1/frcpa(1+ 95/256) -data8 0x3FD47C9175B6F0AD //log(1/frcpa(1+ 96/256) -data8 0x3FD4A8B341552B09 //log(1/frcpa(1+ 97/256) -data8 0x3FD4D4F3908901A0 //log(1/frcpa(1+ 98/256) -data8 0x3FD501528DA1F968 //log(1/frcpa(1+ 99/256) -data8 0x3FD52DD06347D4F6 //log(1/frcpa(1+ 100/256) -data8 0x3FD55A6D3C7B8A8A //log(1/frcpa(1+ 101/256) -data8 0x3FD5925D2B112A59 //log(1/frcpa(1+ 102/256) -data8 0x3FD5BF406B543DB2 //log(1/frcpa(1+ 103/256) -data8 0x3FD5EC433D5C35AE //log(1/frcpa(1+ 104/256) -data8 0x3FD61965CDB02C1F //log(1/frcpa(1+ 105/256) -data8 0x3FD646A84935B2A2 //log(1/frcpa(1+ 106/256) -data8 0x3FD6740ADD31DE94 //log(1/frcpa(1+ 107/256) -data8 0x3FD6A18DB74A58C5 //log(1/frcpa(1+ 108/256) -data8 0x3FD6CF31058670EC //log(1/frcpa(1+ 109/256) -data8 0x3FD6F180E852F0BA //log(1/frcpa(1+ 110/256) -data8 0x3FD71F5D71B894F0 //log(1/frcpa(1+ 111/256) -data8 0x3FD74D5AEFD66D5C //log(1/frcpa(1+ 112/256) -data8 0x3FD77B79922BD37E //log(1/frcpa(1+ 113/256) -data8 0x3FD7A9B9889F19E2 //log(1/frcpa(1+ 114/256) -data8 0x3FD7D81B037EB6A6 //log(1/frcpa(1+ 115/256) -data8 0x3FD8069E33827231 //log(1/frcpa(1+ 116/256) -data8 0x3FD82996D3EF8BCB //log(1/frcpa(1+ 117/256) -data8 0x3FD85855776DCBFB //log(1/frcpa(1+ 118/256) -data8 0x3FD8873658327CCF //log(1/frcpa(1+ 119/256) -data8 0x3FD8AA75973AB8CF //log(1/frcpa(1+ 120/256) -data8 0x3FD8D992DC8824E5 //log(1/frcpa(1+ 121/256) -data8 0x3FD908D2EA7D9512 //log(1/frcpa(1+ 122/256) -data8 0x3FD92C59E79C0E56 //log(1/frcpa(1+ 123/256) -data8 0x3FD95BD750EE3ED3 //log(1/frcpa(1+ 124/256) -data8 0x3FD98B7811A3EE5B //log(1/frcpa(1+ 125/256) -data8 0x3FD9AF47F33D406C //log(1/frcpa(1+ 126/256) -data8 0x3FD9DF270C1914A8 //log(1/frcpa(1+ 127/256) -data8 0x3FDA0325ED14FDA4 //log(1/frcpa(1+ 128/256) -data8 0x3FDA33440224FA79 //log(1/frcpa(1+ 129/256) -data8 0x3FDA57725E80C383 //log(1/frcpa(1+ 130/256) -data8 0x3FDA87D0165DD199 //log(1/frcpa(1+ 131/256) -data8 0x3FDAAC2E6C03F896 //log(1/frcpa(1+ 132/256) -data8 0x3FDADCCC6FDF6A81 //log(1/frcpa(1+ 133/256) -data8 0x3FDB015B3EB1E790 //log(1/frcpa(1+ 134/256) -data8 0x3FDB323A3A635948 //log(1/frcpa(1+ 135/256) -data8 0x3FDB56FA04462909 //log(1/frcpa(1+ 136/256) -data8 0x3FDB881AA659BC93 //log(1/frcpa(1+ 137/256) -data8 0x3FDBAD0BEF3DB165 //log(1/frcpa(1+ 138/256) -data8 0x3FDBD21297781C2F //log(1/frcpa(1+ 139/256) -data8 0x3FDC039236F08819 //log(1/frcpa(1+ 140/256) -data8 0x3FDC28CB1E4D32FD //log(1/frcpa(1+ 141/256) -data8 0x3FDC4E19B84723C2 //log(1/frcpa(1+ 142/256) -data8 0x3FDC7FF9C74554C9 //log(1/frcpa(1+ 143/256) -data8 0x3FDCA57B64E9DB05 //log(1/frcpa(1+ 144/256) -data8 0x3FDCCB130A5CEBB0 //log(1/frcpa(1+ 145/256) -data8 0x3FDCF0C0D18F326F //log(1/frcpa(1+ 146/256) -data8 0x3FDD232075B5A201 //log(1/frcpa(1+ 147/256) -data8 0x3FDD490246DEFA6B //log(1/frcpa(1+ 148/256) -data8 0x3FDD6EFA918D25CD //log(1/frcpa(1+ 149/256) -data8 0x3FDD9509707AE52F //log(1/frcpa(1+ 150/256) -data8 0x3FDDBB2EFE92C554 //log(1/frcpa(1+ 151/256) -data8 0x3FDDEE2F3445E4AF //log(1/frcpa(1+ 152/256) -data8 0x3FDE148A1A2726CE //log(1/frcpa(1+ 153/256) -data8 0x3FDE3AFC0A49FF40 //log(1/frcpa(1+ 154/256) -data8 0x3FDE6185206D516E //log(1/frcpa(1+ 155/256) -data8 0x3FDE882578823D52 //log(1/frcpa(1+ 156/256) -data8 0x3FDEAEDD2EAC990C //log(1/frcpa(1+ 157/256) -data8 0x3FDED5AC5F436BE3 //log(1/frcpa(1+ 158/256) -data8 0x3FDEFC9326D16AB9 //log(1/frcpa(1+ 159/256) -data8 0x3FDF2391A2157600 //log(1/frcpa(1+ 160/256) -data8 0x3FDF4AA7EE03192D //log(1/frcpa(1+ 161/256) -data8 0x3FDF71D627C30BB0 //log(1/frcpa(1+ 162/256) -data8 0x3FDF991C6CB3B379 //log(1/frcpa(1+ 163/256) -data8 0x3FDFC07ADA69A910 //log(1/frcpa(1+ 164/256) -data8 0x3FDFE7F18EB03D3E //log(1/frcpa(1+ 165/256) -data8 0x3FE007C053C5002E //log(1/frcpa(1+ 166/256) -data8 0x3FE01B942198A5A1 //log(1/frcpa(1+ 167/256) -data8 0x3FE02F74400C64EB //log(1/frcpa(1+ 168/256) -data8 0x3FE04360BE7603AD //log(1/frcpa(1+ 169/256) -data8 0x3FE05759AC47FE34 //log(1/frcpa(1+ 170/256) -data8 0x3FE06B5F1911CF52 //log(1/frcpa(1+ 171/256) -data8 0x3FE078BF0533C568 //log(1/frcpa(1+ 172/256) -data8 0x3FE08CD9687E7B0E //log(1/frcpa(1+ 173/256) -data8 0x3FE0A10074CF9019 //log(1/frcpa(1+ 174/256) -data8 0x3FE0B5343A234477 //log(1/frcpa(1+ 175/256) -data8 0x3FE0C974C89431CE //log(1/frcpa(1+ 176/256) -data8 0x3FE0DDC2305B9886 //log(1/frcpa(1+ 177/256) -data8 0x3FE0EB524BAFC918 //log(1/frcpa(1+ 178/256) -data8 0x3FE0FFB54213A476 //log(1/frcpa(1+ 179/256) -data8 0x3FE114253DA97D9F //log(1/frcpa(1+ 180/256) -data8 0x3FE128A24F1D9AFF //log(1/frcpa(1+ 181/256) -data8 0x3FE1365252BF0865 //log(1/frcpa(1+ 182/256) -data8 0x3FE14AE558B4A92D //log(1/frcpa(1+ 183/256) -data8 0x3FE15F85A19C765B //log(1/frcpa(1+ 184/256) -data8 0x3FE16D4D38C119FA //log(1/frcpa(1+ 185/256) -data8 0x3FE18203C20DD133 //log(1/frcpa(1+ 186/256) -data8 0x3FE196C7BC4B1F3B //log(1/frcpa(1+ 187/256) -data8 0x3FE1A4A738B7A33C //log(1/frcpa(1+ 188/256) -data8 0x3FE1B981C0C9653D //log(1/frcpa(1+ 189/256) -data8 0x3FE1CE69E8BB106B //log(1/frcpa(1+ 190/256) -data8 0x3FE1DC619DE06944 //log(1/frcpa(1+ 191/256) -data8 0x3FE1F160A2AD0DA4 //log(1/frcpa(1+ 192/256) -data8 0x3FE2066D7740737E //log(1/frcpa(1+ 193/256) -data8 0x3FE2147DBA47A394 //log(1/frcpa(1+ 194/256) -data8 0x3FE229A1BC5EBAC3 //log(1/frcpa(1+ 195/256) -data8 0x3FE237C1841A502E //log(1/frcpa(1+ 196/256) -data8 0x3FE24CFCE6F80D9A //log(1/frcpa(1+ 197/256) -data8 0x3FE25B2C55CD5762 //log(1/frcpa(1+ 198/256) -data8 0x3FE2707F4D5F7C41 //log(1/frcpa(1+ 199/256) -data8 0x3FE285E0842CA384 //log(1/frcpa(1+ 200/256) -data8 0x3FE294294708B773 //log(1/frcpa(1+ 201/256) -data8 0x3FE2A9A2670AFF0C //log(1/frcpa(1+ 202/256) -data8 0x3FE2B7FB2C8D1CC1 //log(1/frcpa(1+ 203/256) -data8 0x3FE2C65A6395F5F5 //log(1/frcpa(1+ 204/256) -data8 0x3FE2DBF557B0DF43 //log(1/frcpa(1+ 205/256) -data8 0x3FE2EA64C3F97655 //log(1/frcpa(1+ 206/256) -data8 0x3FE3001823684D73 //log(1/frcpa(1+ 207/256) -data8 0x3FE30E97E9A8B5CD //log(1/frcpa(1+ 208/256) -data8 0x3FE32463EBDD34EA //log(1/frcpa(1+ 209/256) -data8 0x3FE332F4314AD796 //log(1/frcpa(1+ 210/256) -data8 0x3FE348D90E7464D0 //log(1/frcpa(1+ 211/256) -data8 0x3FE35779F8C43D6E //log(1/frcpa(1+ 212/256) -data8 0x3FE36621961A6A99 //log(1/frcpa(1+ 213/256) -data8 0x3FE37C299F3C366A //log(1/frcpa(1+ 214/256) -data8 0x3FE38AE2171976E7 //log(1/frcpa(1+ 215/256) -data8 0x3FE399A157A603E7 //log(1/frcpa(1+ 216/256) -data8 0x3FE3AFCCFE77B9D1 //log(1/frcpa(1+ 217/256) -data8 0x3FE3BE9D503533B5 //log(1/frcpa(1+ 218/256) -data8 0x3FE3CD7480B4A8A3 //log(1/frcpa(1+ 219/256) -data8 0x3FE3E3C43918F76C //log(1/frcpa(1+ 220/256) -data8 0x3FE3F2ACB27ED6C7 //log(1/frcpa(1+ 221/256) -data8 0x3FE4019C2125CA93 //log(1/frcpa(1+ 222/256) -data8 0x3FE4181061389722 //log(1/frcpa(1+ 223/256) -data8 0x3FE42711518DF545 //log(1/frcpa(1+ 224/256) -data8 0x3FE436194E12B6BF //log(1/frcpa(1+ 225/256) -data8 0x3FE445285D68EA69 //log(1/frcpa(1+ 226/256) -data8 0x3FE45BCC464C893A //log(1/frcpa(1+ 227/256) -data8 0x3FE46AED21F117FC //log(1/frcpa(1+ 228/256) -data8 0x3FE47A1527E8A2D3 //log(1/frcpa(1+ 229/256) -data8 0x3FE489445EFFFCCC //log(1/frcpa(1+ 230/256) -data8 0x3FE4A018BCB69835 //log(1/frcpa(1+ 231/256) -data8 0x3FE4AF5A0C9D65D7 //log(1/frcpa(1+ 232/256) -data8 0x3FE4BEA2A5BDBE87 //log(1/frcpa(1+ 233/256) -data8 0x3FE4CDF28F10AC46 //log(1/frcpa(1+ 234/256) -data8 0x3FE4DD49CF994058 //log(1/frcpa(1+ 235/256) -data8 0x3FE4ECA86E64A684 //log(1/frcpa(1+ 236/256) -data8 0x3FE503C43CD8EB68 //log(1/frcpa(1+ 237/256) -data8 0x3FE513356667FC57 //log(1/frcpa(1+ 238/256) -data8 0x3FE522AE0738A3D8 //log(1/frcpa(1+ 239/256) -data8 0x3FE5322E26867857 //log(1/frcpa(1+ 240/256) -data8 0x3FE541B5CB979809 //log(1/frcpa(1+ 241/256) -data8 0x3FE55144FDBCBD62 //log(1/frcpa(1+ 242/256) -data8 0x3FE560DBC45153C7 //log(1/frcpa(1+ 243/256) -data8 0x3FE5707A26BB8C66 //log(1/frcpa(1+ 244/256) -data8 0x3FE587F60ED5B900 //log(1/frcpa(1+ 245/256) -data8 0x3FE597A7977C8F31 //log(1/frcpa(1+ 246/256) -data8 0x3FE5A760D634BB8B //log(1/frcpa(1+ 247/256) -data8 0x3FE5B721D295F10F //log(1/frcpa(1+ 248/256) -data8 0x3FE5C6EA94431EF9 //log(1/frcpa(1+ 249/256) -data8 0x3FE5D6BB22EA86F6 //log(1/frcpa(1+ 250/256) -data8 0x3FE5E6938645D390 //log(1/frcpa(1+ 251/256) -data8 0x3FE5F673C61A2ED2 //log(1/frcpa(1+ 252/256) -data8 0x3FE6065BEA385926 //log(1/frcpa(1+ 253/256) -data8 0x3FE6164BFA7CC06B //log(1/frcpa(1+ 254/256) -data8 0x3FE62643FECF9743 //log(1/frcpa(1+ 255/256) -LOCAL_OBJECT_END(log_table_3) - - -.section .text -GLOBAL_LIBM_ENTRY(acoshf) - -{ .mfi - getf.exp acosh_GR_f8 = f8 - fclass.m p6,p0 = f8, 0xc3 // Test for x = NaN - mov log_GR_comp2 = 0x10032 -} -{ .mfi - addl NR_table_address = @ltoff(log_table_1), gp - fms.s1 log_y = f8, f8, f1 // y = x^2-1 - nop.i 0 -} -;; - -{ .mfi - getf.sig acosh_GR_f8_sig = f8 - fclass.m p11,p0 = f8, 0x21 // Test for x=+inf - mov log_GR_exp_17_ones = 0x1ffff -} -{ .mfi - ld8 NR_table_address = [NR_table_address] - fms.s1 log_w = f8,f1,f1 // w = x - 1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.lt.s1 p7,p8 = f8, f1 // Test for x<1.0 - addl log_GR_comp = 0x10020C,r0 // Upper 21 bits of signif of 1.0005 -} -{ .mfb - mov log_GR_exp_16_ones = 0xffff //BIAS -(p6) fma.s.s0 f8 = f8,f1,f0 // quietize nan result if x=nan -(p6) br.ret.spnt b0 // Exit for x=nan -} -;; - -{ .mfb - //get second table address - adds log_table_address2 = 0x20, NR_table_address - fcmp.eq.s1 p10,p0 = f8, f1 // Test for x=+1.0 -(p11) br.ret.spnt b0 // Exit for x=+inf -} -;; - -{ .mfi - ldfpd NR1,NR2 = [log_table_address2],16 - frsqrta.s1 log_y_rs,p0 = log_y // z=1/sqrt(y) - nop.i 0 -} -{ .mfb - nop.m 0 - fma.s1 log_arg = f8,f1,f8 -(p7) br.cond.spnt ACOSH_LESS_ONE // Branch if path 7, x < 1.0 -} -;; - -{ .mfi - ldfe log_C2 = [log_table_address2],16 -(p8) fcmp.eq.s0 p6,p0 = f8, f0 // Dummy op sets denorm flag if unorm>=1.0 - nop.i 0 -} -{ .mfb -(p8) cmp.le.unc p13,p0 = log_GR_comp2,acosh_GR_f8 - nop.f 0 -(p13) br.cond.spnt LOG_COMMON1 // Branch if path 4, x >= 2^51 -} -;; - -{ .mfi - ldfe log_C1 = [log_table_address2],16 -(p10) fmerge.s f8 = f0, f0 // Return 0 if x=1.0 - shr.u acosh_GR_f8_sig = acosh_GR_f8_sig,43 -} -{ .mib - cmp.eq p14,p0 = log_GR_exp_16_ones,acosh_GR_f8 - nop.i 0 -(p10) br.ret.spnt b0 // Exit for x=1.0 -} -;; - -{ .mfi - ldfe log_C0 = [log_table_address2],16 - frsqrta.s1 acosh_w_rs,p0 = log_w // t=1/sqrt(w) - nop.i 0 -} -{ .mfb -(p14) cmp.lt.unc p15,p0 = acosh_GR_f8_sig,log_GR_comp - nop.f 0 -(p15) br.cond.spnt ACOSH_NEAR_ONE // Branch if path 2, 1.0 < x < 1.0005 -} -;; - -// Here is main path, 1.0005 <= x < 2^51 -/////////////// The first iteration ////////////////////////////////// -{ .mfi - ldfpd log_P3,log_P2 = [NR_table_address],16 - fma.s1 log_y_rs_iter = log_y_rs,log_y,f0 // y*z - nop.i 0 -} -;; - -{ .mfi - ldfpd log_P1,log2 = [NR_table_address],16 - fnma.s1 log_y_rs_iter2 = log_y_rs_iter,log_y_rs,NR2 // 3-(y*z)*z - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter1 = log_y_rs,NR1,f0 // 0.5*z - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // (0.5*z)*(3-(y*z)*z) - fma.s1 log_y_rs_iter = log_y_rs_iter1,log_y_rs_iter2,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - // (0.5*z)*(3-(y*z)*z) - fma.s1 log_arg_early = log_y_rs_iter1,log_y_rs_iter2,f0 - nop.i 0 -} -;; - -/////////////////////////// The second iteration ///////////////////////////// -{ .mfi - nop.m 0 - fma.s1 log_y_rs = log_y_rs_iter,log_y,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter1 = log_y_rs_iter,NR1,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_arg_early = log_arg_early,log_y,f8 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 log_y_rs = log_y_rs,log_y_rs_iter,NR2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter1 = log_y_rs_iter1,log_y,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - frcpa.s1 log_C,p0 = f1,log_arg_early - nop.i 0 -} -;; - -{ .mfi - getf.exp log_GR_signexp_f8 = log_arg_early - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - getf.sig log_GR_significand_f8 = log_arg_early - fma.s1 log_arg = log_y_rs_iter1,log_y_rs,f8 // (0.5*z)*(3-(y*z)*z) - adds log_table_address3 = 0x40, NR_table_address -} -;; - -///////////////////////////////// The end NR iterations ///////////////////// - -{ .mmi - //significant bit destruction - and log_GR_exp_f8 = log_GR_signexp_f8, log_GR_exp_17_ones -;; - //BIAS subtraction - sub log_GR_true_exp_f8 = log_GR_exp_f8, log_GR_exp_16_ones - nop.i 0 -} -;; - -{ .mfi - setf.sig log_int_Nfloat = log_GR_true_exp_f8 - fms.s1 log_r = log_C,log_arg,f1 // C = frcpa(x); r = C * x - 1 - extr.u log_GR_index = log_GR_significand_f8,55,8 //Extract 8 bits -} -;; - -{ .mmi - //pre-index*8 + index - shladd log_table_address3 = log_GR_index,3,log_table_address3 -;; - ldfd log_T = [log_table_address3] - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rsq = log_r, log_r, f0 //r^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_rp_p32 = log_P3, log_r, log_P2 //P3*r + P2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rp_p10 = log_P1, log_r, f1 //P1*r + 1.0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //convert N to the floating-point format log_Nfloat - fcvt.xf log_Nfloat = log_int_Nfloat - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //(P3*r + P2)*r^2 + P1*r + 1.0 - fma.s1 log_rp_p2 = log_rp_p32, log_rsq, log_rp_p10 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_T_plus_Nlog2 = log_Nfloat,log2,log_T //N*log2 + T - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fma.s.s0 f8 = log_rp_p2,log_r,log_T_plus_Nlog2 - br.ret.sptk b0 // Exit main path, path 3: 1.0005 <= x < 2^51 -} -;; - -// Here if path 2, 1.0 < x < 1.0005 -ACOSH_NEAR_ONE: -// The first NR iteration -{ .mfi - nop.m 0 - fma.s1 acosh_w_iter1 = acosh_w_rs,log_w,f0 //t*w - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 acosh_w_1 = f8,log_C2,log_C1 //x*C2 + C1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 acosh_w_iter2 = acosh_w_rs,NR1,f0 //t*0.5 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 acosh_w_iter1 = acosh_w_iter1,acosh_w_rs,NR2 //3-t*t*w - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //(3-t*t*w)*t*0.5 - fma.s1 acosh_w_iter2 = acosh_w_iter2,acosh_w_iter1,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 acosh_w_1 = acosh_w_1,log_w,log_C0 //(x*C2 + C1)*(x-1) + C0 - nop.i 0 -} -;; - -// The second NR iteration -{ .mfi - nop.m 0 - fma.s1 acosh_w_rs = acosh_w_iter2,log_w,f0 //t*w - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 acosh_w_iter1 = acosh_w_iter2,acosh_w_rs,NR2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 acosh_w_iter2 = acosh_w_iter2,NR1,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 acosh_w_iter2 = acosh_w_iter2,acosh_w_iter1,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 acosh_w_sqrt = acosh_w_iter2,log_w,f0 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fma.s.s0 f8 = acosh_w_1,acosh_w_sqrt,f0 - br.ret.sptk b0 // Exit path 2, 1.0 < x < 1.0005 -} -;; - -// Here if path 4, x >= 2^51 -LOG_COMMON1: -{ .mfi - ldfpd log_P3,log_P2 = [NR_table_address],16 - frcpa.s1 log_C,p0 = f1,log_arg - nop.i 0 -} -;; - -{ .mmi - getf.exp log_GR_signexp_f8 = log_arg - ldfpd log_P1,log2 = [NR_table_address],16 - nop.i 0 -} -;; - -{ .mmi - getf.sig log_GR_significand_f8 = log_arg - nop.m 0 - nop.i 0 -} -;; - -{ .mfi - adds log_table_address3 = 0x40, NR_table_address - nop.f 0 - //significant bit destruction - and log_GR_exp_f8 = log_GR_signexp_f8, log_GR_exp_17_ones -} -;; - -{ .mmf - nop.m 0 - //BIAS subtraction - sub log_GR_true_exp_f8 = log_GR_exp_f8, log_GR_exp_16_ones - fms.s1 log_r = log_C,log_arg,f1 // C = frcpa(x); r = C * x - 1 -} -;; - -{ .mfi - setf.sig log_int_Nfloat = log_GR_true_exp_f8 - nop.f 0 - extr.u log_GR_index = log_GR_significand_f8,55,8 //Extract 8 bits -} -;; - -{ .mmi - //pre-index*8 + index - shladd log_table_address3 = log_GR_index,3,log_table_address3 -;; - ldfd log_T = [log_table_address3] - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rsq = log_r, log_r, f0 //r^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_rp_p32 = log_P3, log_r, log_P2 //P3*r + P2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rp_p10 = log_P1, log_r, f1 //P1*r + 1.0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //convert N to the floating-point format log_Nfloat - fcvt.xf log_Nfloat = log_int_Nfloat - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_rp_p2 = log_rp_p32, log_rsq, log_rp_p10 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_T_plus_Nlog2 = log_Nfloat,log2,log_T //N*log2 + T - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fma.s.s0 f8 = log_rp_p2,log_r,log_T_plus_Nlog2 - br.ret.sptk b0 // Exit path 4, x >= 2^51 -} -;; - -// Here if path 7, x < 1.0 -ACOSH_LESS_ONE: -{ .mfi - alloc r32 = ar.pfs,1,3,4,0 - fmerge.s f10 = f8,f8 - nop.i 0 -} -;; - -{ .mfb - mov acosh_GR_tag = 137 - frcpa.s0 f8,p0 = f0,f0 - br.cond.sptk __libm_error_region -} -;; - -GLOBAL_LIBM_END(acoshf) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfs [GR_Parameter_Y] = f1,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfs [GR_Parameter_X] = f10 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_acoshl.S b/sysdeps/ia64/fpu/e_acoshl.S deleted file mode 100644 index 9bd556389b..0000000000 --- a/sysdeps/ia64/fpu/e_acoshl.S +++ /dev/null @@ -1,1712 +0,0 @@ -.file "acoshl.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 10/01/01 Initial version -// 10/10/01 Performance inproved -// 12/11/01 Changed huges_logp to not be global -// 01/02/02 Corrected .restore syntax -// 05/20/02 Cleaned up namespace and sf0 syntax -// 08/14/02 Changed mli templates to mlx -// 02/06/03 Reorganized data tables -// 03/31/05 Reformatted delimiters between data tables -// -//********************************************************************* -// -// API -//============================================================== -// long double acoshl(long double); -// -// Overview of operation -//============================================================== -// -// There are 6 paths: -// 1. x = 1 -// Return acoshl(x) = 0; -// -// 2. x < 1 -// Return acoshl(x) = Nan (Domain error, error handler call with tag 135); -// -// 3. x = [S,Q]Nan or +INF -// Return acoshl(x) = x + x; -// -// 4. 'Near 1': 1 < x < 1+1/8 -// Return acoshl(x) = sqrtl(2*y)*(1-P(y)/Q(y)), -// where y = 1, P(y)/Q(y) - rational approximation -// -// 5. 'Huges': x > 0.5*2^64 -// Return acoshl(x) = (logl(2*x-1)); -// -// 6. 'Main path': 1+1/8 < x < 0.5*2^64 -// b_hi + b_lo = x + sqrt(x^2 - 1); -// acoshl(x) = logl_special(b_hi, b_lo); -// -// Algorithm description -//============================================================== -// -// I. Near 1 path algorithm -// ************************************************************** -// The formula is acoshl(x) = sqrtl(2*y)*(1-P(y)/Q(y)), -// where y = 1, P(y)/Q(y) - rational approximation -// -// 1) y = x - 1, y2 = 2 * y -// -// 2) Compute in parallel sqrtl(2*y) and P(y)/Q(y) -// a) sqrtl computation method described below (main path algorithm, item 2)) -// As result we obtain (gg+gl) - multiprecision result -// as pair of double extended values -// b) P(y) and Q(y) calculated without any extra precision manipulations -// c) P/Q division: -// y = frcpa(Q) initial approximation of 1/Q -// z = P*y initial approximation of P/Q -// -// e = 1 - b*y -// e2 = e + e^2 -// e1 = e^2 -// y1 = y + y*e2 = y + y*(e+e^2) -// -// e3 = e + e1^2 -// y2 = y + y1*e3 = y + y*(e+e^2+..+e^6) -// -// r = P - Q*z -// e = 1 - Q*y2 -// xx = z + r*y2 high part of a/b -// -// y3 = y2 + y2*e4 -// r1 = P - Q*xx -// xl = r1*y3 low part of a/b -// -// 3) res = sqrt(2*y) - sqrt(2*y)*(P(y)/Q(y)) = -// = (gg+gl) - (gg + gl)*(xx+xl); -// -// a) hh = gg*xx; hl = gg*xl; lh = gl*xx; ll = gl*xl; -// b) res = ((((gl + ll) + lh) + hl) + hh) + gg; -// (exactly in this order) -// -// II. Main path algorithm -// ( thanks to Peter Markstein for the idea of sqrt(x^2+1) computation! ) -// ********************************************************************** -// -// There are 3 parts of x+sqrt(x^2-1) computation: -// -// 1) m2 = (m2_hi+m2_lo) = x^2-1 obtaining -// ------------------------------------ -// m2_hi = x2_hi - 1, where x2_hi = x * x; -// m2_lo = x2_lo + p1_lo, where -// x2_lo = FMS(x*x-x2_hi), -// p1_lo = (1 + m2_hi) - x2_hi; -// -// 2) g = (g_hi+g_lo) = sqrt(m2) = sqrt(m2_hi+m2_lo) -// ---------------------------------------------- -// r = invsqrt(m2_hi) (8-bit reciprocal square root approximation); -// g = m2_hi * r (first 8 bit-approximation of sqrt); -// -// h = 0.5 * r; -// e = 0.5 - g * h; -// g = g * e + g (second 16 bit-approximation of sqrt); -// -// h = h * e + h; -// e = 0.5 - g * h; -// g = g * e + g (third 32 bit-approximation of sqrt); -// -// h = h * e + h; -// e = 0.5 - g * h; -// g_hi = g * e + g (fourth 64 bit-approximation of sqrt); -// -// Remainder computation: -// h = h * e + h; -// d = (m2_hi - g_hi * g_hi) + m2_lo; -// g_lo = d * h; -// -// 3) b = (b_hi + b_lo) = x + g, where g = (g_hi + g_lo) = sqrt(x^2-1) -// ------------------------------------------------------------------- -// b_hi = (g_hi + x) + gl; -// b_lo = (x - b_hi) + g_hi + gl; -// -// Now we pass b presented as sum b_hi + b_lo to special version -// of logl function which accept a pair of arguments as -// mutiprecision value. -// -// Special log algorithm overview -// ================================ -// Here we use a table lookup method. The basic idea is that in -// order to compute logl(Arg) for an argument Arg in [1,2), -// we construct a value G such that G*Arg is close to 1 and that -// logl(1/G) is obtainable easily from a table of values calculated -// beforehand. Thus -// -// logl(Arg) = logl(1/G) + logl((G*Arg - 1)) -// -// Because |G*Arg - 1| is small, the second term on the right hand -// side can be approximated by a short polynomial. We elaborate -// this method in four steps. -// -// Step 0: Initialization -// -// We need to calculate logl( X+1 ). Obtain N, S_hi such that -// -// X = 2^N * ( S_hi + S_lo ) exactly -// -// where S_hi in [1,2) and S_lo is a correction to S_hi in the sense -// that |S_lo| <= ulp(S_hi). -// -// For the special version of logl: S_lo = b_lo -// !-----------------------------------------------! -// -// Step 1: Argument Reduction -// -// Based on S_hi, obtain G_1, G_2, G_3 from a table and calculate -// -// G := G_1 * G_2 * G_3 -// r := (G * S_hi - 1) + G * S_lo -// -// These G_j's have the property that the product is exactly -// representable and that |r| < 2^(-12) as a result. -// -// Step 2: Approximation -// -// logl(1 + r) is approximated by a short polynomial poly(r). -// -// Step 3: Reconstruction -// -// Finally, logl( X ) = logl( X+1 ) is given by -// -// logl( X ) = logl( 2^N * (S_hi + S_lo) ) -// ~=~ N*logl(2) + logl(1/G) + logl(1 + r) -// ~=~ N*logl(2) + logl(1/G) + poly(r). -// -// For detailed description see logl or log1pl function, regular path. -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f32 -> f95 (64 registers) - -// General registers used: -// r32 -> r67 (36 registers) - -// Predicate registers used: -// p7 -> p11 -// p7 for 'NaNs, Inf' path -// p8 for 'near 1' path -// p9 for 'huges' path -// p10 for x = 1 -// p11 for x < 1 -// -//********************************************************************* -// IEEE Special Conditions: -// -// acoshl(+inf) = +inf -// acoshl(-inf) = QNaN -// acoshl(1) = 0 -// acoshl(x<1) = QNaN -// acoshl(SNaN) = QNaN -// acoshl(QNaN) = QNaN -// - -// Data tables -//============================================================== - -RODATA -.align 64 - -// Near 1 path rational approximation coefficients -LOCAL_OBJECT_START(Poly_P) -data8 0xB0978143F695D40F, 0x3FF1 // .84205539791447100108478906277453574946e-4 -data8 0xB9800D841A8CAD29, 0x3FF6 // .28305085180397409672905983082168721069e-2 -data8 0xC889F455758C1725, 0x3FF9 // .24479844297887530847660233111267222945e-1 -data8 0x9BE1DFF006F45F12, 0x3FFB // .76114415657565879842941751209926938306e-1 -data8 0x9E34AF4D372861E0, 0x3FFB // .77248925727776366270605984806795850504e-1 -data8 0xF3DC502AEE14C4AE, 0x3FA6 // .3077953476682583606615438814166025592e-26 -LOCAL_OBJECT_END(Poly_P) - -// -LOCAL_OBJECT_START(Poly_Q) -data8 0xF76E3FD3C7680357, 0x3FF1 // .11798413344703621030038719253730708525e-3 -data8 0xD107D2E7273263AE, 0x3FF7 // .63791065024872525660782716786703188820e-2 -data8 0xB609BE5CDE206AEF, 0x3FFB // .88885771950814004376363335821980079985e-1 -data8 0xF7DEACAC28067C8A, 0x3FFD // .48412074662702495416825113623936037072302 -data8 0x8F9BE5890CEC7E38, 0x3FFF // 1.1219450873557867470217771071068369729526 -data8 0xED4F06F3D2BC92D1, 0x3FFE // .92698710873331639524734537734804056798748 -LOCAL_OBJECT_END(Poly_Q) - -// Q coeffs -LOCAL_OBJECT_START(Constants_Q) -data4 0x00000000,0xB1721800,0x00003FFE,0x00000000 -data4 0x4361C4C6,0x82E30865,0x0000BFE2,0x00000000 -data4 0x328833CB,0xCCCCCAF2,0x00003FFC,0x00000000 -data4 0xA9D4BAFB,0x80000077,0x0000BFFD,0x00000000 -data4 0xAAABE3D2,0xAAAAAAAA,0x00003FFD,0x00000000 -data4 0xFFFFDAB7,0xFFFFFFFF,0x0000BFFD,0x00000000 -LOCAL_OBJECT_END(Constants_Q) - -// Z1 - 16 bit fixed -LOCAL_OBJECT_START(Constants_Z_1) -data4 0x00008000 -data4 0x00007879 -data4 0x000071C8 -data4 0x00006BCB -data4 0x00006667 -data4 0x00006187 -data4 0x00005D18 -data4 0x0000590C -data4 0x00005556 -data4 0x000051EC -data4 0x00004EC5 -data4 0x00004BDB -data4 0x00004925 -data4 0x0000469F -data4 0x00004445 -data4 0x00004211 -LOCAL_OBJECT_END(Constants_Z_1) - -// G1 and H1 - IEEE single and h1 - IEEE double -LOCAL_OBJECT_START(Constants_G_H_h1) -data4 0x3F800000,0x00000000 -data8 0x0000000000000000 -data4 0x3F70F0F0,0x3D785196 -data8 0x3DA163A6617D741C -data4 0x3F638E38,0x3DF13843 -data8 0x3E2C55E6CBD3D5BB -data4 0x3F579430,0x3E2FF9A0 -data8 0xBE3EB0BFD86EA5E7 -data4 0x3F4CCCC8,0x3E647FD6 -data8 0x3E2E6A8C86B12760 -data4 0x3F430C30,0x3E8B3AE7 -data8 0x3E47574C5C0739BA -data4 0x3F3A2E88,0x3EA30C68 -data8 0x3E20E30F13E8AF2F -data4 0x3F321640,0x3EB9CEC8 -data8 0xBE42885BF2C630BD -data4 0x3F2AAAA8,0x3ECF9927 -data8 0x3E497F3497E577C6 -data4 0x3F23D708,0x3EE47FC5 -data8 0x3E3E6A6EA6B0A5AB -data4 0x3F1D89D8,0x3EF8947D -data8 0xBDF43E3CD328D9BE -data4 0x3F17B420,0x3F05F3A1 -data8 0x3E4094C30ADB090A -data4 0x3F124920,0x3F0F4303 -data8 0xBE28FBB2FC1FE510 -data4 0x3F0D3DC8,0x3F183EBF -data8 0x3E3A789510FDE3FA -data4 0x3F088888,0x3F20EC80 -data8 0x3E508CE57CC8C98F -data4 0x3F042108,0x3F29516A -data8 0xBE534874A223106C -LOCAL_OBJECT_END(Constants_G_H_h1) - -// Z2 - 16 bit fixed -LOCAL_OBJECT_START(Constants_Z_2) -data4 0x00008000 -data4 0x00007F81 -data4 0x00007F02 -data4 0x00007E85 -data4 0x00007E08 -data4 0x00007D8D -data4 0x00007D12 -data4 0x00007C98 -data4 0x00007C20 -data4 0x00007BA8 -data4 0x00007B31 -data4 0x00007ABB -data4 0x00007A45 -data4 0x000079D1 -data4 0x0000795D -data4 0x000078EB -LOCAL_OBJECT_END(Constants_Z_2) - -// G2 and H2 - IEEE single and h2 - IEEE double -LOCAL_OBJECT_START(Constants_G_H_h2) -data4 0x3F800000,0x00000000 -data8 0x0000000000000000 -data4 0x3F7F00F8,0x3B7F875D -data8 0x3DB5A11622C42273 -data4 0x3F7E03F8,0x3BFF015B -data8 0x3DE620CF21F86ED3 -data4 0x3F7D08E0,0x3C3EE393 -data8 0xBDAFA07E484F34ED -data4 0x3F7C0FC0,0x3C7E0586 -data8 0xBDFE07F03860BCF6 -data4 0x3F7B1880,0x3C9E75D2 -data8 0x3DEA370FA78093D6 -data4 0x3F7A2328,0x3CBDC97A -data8 0x3DFF579172A753D0 -data4 0x3F792FB0,0x3CDCFE47 -data8 0x3DFEBE6CA7EF896B -data4 0x3F783E08,0x3CFC15D0 -data8 0x3E0CF156409ECB43 -data4 0x3F774E38,0x3D0D874D -data8 0xBE0B6F97FFEF71DF -data4 0x3F766038,0x3D1CF49B -data8 0xBE0804835D59EEE8 -data4 0x3F757400,0x3D2C531D -data8 0x3E1F91E9A9192A74 -data4 0x3F748988,0x3D3BA322 -data8 0xBE139A06BF72A8CD -data4 0x3F73A0D0,0x3D4AE46F -data8 0x3E1D9202F8FBA6CF -data4 0x3F72B9D0,0x3D5A1756 -data8 0xBE1DCCC4BA796223 -data4 0x3F71D488,0x3D693B9D -data8 0xBE049391B6B7C239 -LOCAL_OBJECT_END(Constants_G_H_h2) - -// G3 and H3 - IEEE single and h3 - IEEE double -LOCAL_OBJECT_START(Constants_G_H_h3) -data4 0x3F7FFC00,0x38800100 -data8 0x3D355595562224CD -data4 0x3F7FF400,0x39400480 -data8 0x3D8200A206136FF6 -data4 0x3F7FEC00,0x39A00640 -data8 0x3DA4D68DE8DE9AF0 -data4 0x3F7FE400,0x39E00C41 -data8 0xBD8B4291B10238DC -data4 0x3F7FDC00,0x3A100A21 -data8 0xBD89CCB83B1952CA -data4 0x3F7FD400,0x3A300F22 -data8 0xBDB107071DC46826 -data4 0x3F7FCC08,0x3A4FF51C -data8 0x3DB6FCB9F43307DB -data4 0x3F7FC408,0x3A6FFC1D -data8 0xBD9B7C4762DC7872 -data4 0x3F7FBC10,0x3A87F20B -data8 0xBDC3725E3F89154A -data4 0x3F7FB410,0x3A97F68B -data8 0xBD93519D62B9D392 -data4 0x3F7FAC18,0x3AA7EB86 -data8 0x3DC184410F21BD9D -data4 0x3F7FA420,0x3AB7E101 -data8 0xBDA64B952245E0A6 -data4 0x3F7F9C20,0x3AC7E701 -data8 0x3DB4B0ECAABB34B8 -data4 0x3F7F9428,0x3AD7DD7B -data8 0x3D9923376DC40A7E -data4 0x3F7F8C30,0x3AE7D474 -data8 0x3DC6E17B4F2083D3 -data4 0x3F7F8438,0x3AF7CBED -data8 0x3DAE314B811D4394 -data4 0x3F7F7C40,0x3B03E1F3 -data8 0xBDD46F21B08F2DB1 -data4 0x3F7F7448,0x3B0BDE2F -data8 0xBDDC30A46D34522B -data4 0x3F7F6C50,0x3B13DAAA -data8 0x3DCB0070B1F473DB -data4 0x3F7F6458,0x3B1BD766 -data8 0xBDD65DDC6AD282FD -data4 0x3F7F5C68,0x3B23CC5C -data8 0xBDCDAB83F153761A -data4 0x3F7F5470,0x3B2BC997 -data8 0xBDDADA40341D0F8F -data4 0x3F7F4C78,0x3B33C711 -data8 0x3DCD1BD7EBC394E8 -data4 0x3F7F4488,0x3B3BBCC6 -data8 0xBDC3532B52E3E695 -data4 0x3F7F3C90,0x3B43BAC0 -data8 0xBDA3961EE846B3DE -data4 0x3F7F34A0,0x3B4BB0F4 -data8 0xBDDADF06785778D4 -data4 0x3F7F2CA8,0x3B53AF6D -data8 0x3DCC3ED1E55CE212 -data4 0x3F7F24B8,0x3B5BA620 -data8 0xBDBA31039E382C15 -data4 0x3F7F1CC8,0x3B639D12 -data8 0x3D635A0B5C5AF197 -data4 0x3F7F14D8,0x3B6B9444 -data8 0xBDDCCB1971D34EFC -data4 0x3F7F0CE0,0x3B7393BC -data8 0x3DC7450252CD7ADA -data4 0x3F7F04F0,0x3B7B8B6D -data8 0xBDB68F177D7F2A42 -LOCAL_OBJECT_END(Constants_G_H_h3) - -// Assembly macros -//============================================================== - -// Floating Point Registers - -FR_Arg = f8 -FR_Res = f8 - - -FR_PP0 = f32 -FR_PP1 = f33 -FR_PP2 = f34 -FR_PP3 = f35 -FR_PP4 = f36 -FR_PP5 = f37 -FR_QQ0 = f38 -FR_QQ1 = f39 -FR_QQ2 = f40 -FR_QQ3 = f41 -FR_QQ4 = f42 -FR_QQ5 = f43 - -FR_Q1 = f44 -FR_Q2 = f45 -FR_Q3 = f46 -FR_Q4 = f47 - -FR_Half = f48 -FR_Two = f49 - -FR_log2_hi = f50 -FR_log2_lo = f51 - - -FR_X2 = f52 -FR_M2 = f53 -FR_M2L = f54 -FR_Rcp = f55 -FR_GG = f56 -FR_HH = f57 -FR_EE = f58 -FR_DD = f59 -FR_GL = f60 -FR_Tmp = f61 - - -FR_XM1 = f62 -FR_2XM1 = f63 -FR_XM12 = f64 - - - - // Special logl registers -FR_XLog_Hi = f65 -FR_XLog_Lo = f66 - -FR_Y_hi = f67 -FR_Y_lo = f68 - -FR_S_hi = f69 -FR_S_lo = f70 - -FR_poly_lo = f71 -FR_poly_hi = f72 - -FR_G = f73 -FR_H = f74 -FR_h = f75 - -FR_G2 = f76 -FR_H2 = f77 -FR_h2 = f78 - -FR_r = f79 -FR_rsq = f80 -FR_rcub = f81 - -FR_float_N = f82 - -FR_G3 = f83 -FR_H3 = f84 -FR_h3 = f85 - -FR_2_to_minus_N = f86 - - - // Near 1 registers -FR_PP = f65 -FR_QQ = f66 - - -FR_PV6 = f69 -FR_PV4 = f70 -FR_PV3 = f71 -FR_PV2 = f72 - -FR_QV6 = f73 -FR_QV4 = f74 -FR_QV3 = f75 -FR_QV2 = f76 - -FR_Y0 = f77 -FR_Q0 = f78 -FR_E0 = f79 -FR_E2 = f80 -FR_E1 = f81 -FR_Y1 = f82 -FR_E3 = f83 -FR_Y2 = f84 -FR_R0 = f85 -FR_E4 = f86 -FR_Y3 = f87 -FR_R1 = f88 -FR_X_Hi = f89 -FR_X_lo = f90 - -FR_HH = f91 -FR_LL = f92 -FR_HL = f93 -FR_LH = f94 - - - - // Error handler registers -FR_Arg_X = f95 -FR_Arg_Y = f0 - - -// General Purpose Registers - - // General prolog registers -GR_PFS = r32 -GR_OneP125 = r33 -GR_TwoP63 = r34 -GR_Arg = r35 -GR_Half = r36 - - // Near 1 path registers -GR_Poly_P = r37 -GR_Poly_Q = r38 - - // Special logl registers -GR_Index1 = r39 -GR_Index2 = r40 -GR_signif = r41 -GR_X_0 = r42 -GR_X_1 = r43 -GR_X_2 = r44 -GR_minus_N = r45 -GR_Z_1 = r46 -GR_Z_2 = r47 -GR_N = r48 -GR_Bias = r49 -GR_M = r50 -GR_Index3 = r51 -GR_exp_2tom80 = r52 -GR_exp_mask = r53 -GR_exp_2tom7 = r54 -GR_ad_ln10 = r55 -GR_ad_tbl_1 = r56 -GR_ad_tbl_2 = r57 -GR_ad_tbl_3 = r58 -GR_ad_q = r59 -GR_ad_z_1 = r60 -GR_ad_z_2 = r61 -GR_ad_z_3 = r62 - -// -// Added for unwind support -// -GR_SAVE_PFS = r32 -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 - -GR_Parameter_X = r64 -GR_Parameter_Y = r65 -GR_Parameter_RESULT = r66 -GR_Parameter_TAG = r67 - - - -.section .text -GLOBAL_LIBM_ENTRY(acoshl) - -{ .mfi - alloc GR_PFS = ar.pfs,0,32,4,0 // Local frame allocation - fcmp.lt.s1 p11, p0 = FR_Arg, f1 // if arg is less than 1 - mov GR_Half = 0xfffe // 0.5's exp -} -{ .mfi - addl GR_Poly_Q = @ltoff(Poly_Q), gp // Address of Q-coeff table - fma.s1 FR_X2 = FR_Arg, FR_Arg, f0 // Obtain x^2 - addl GR_Poly_P = @ltoff(Poly_P), gp // Address of P-coeff table -};; - -{ .mfi - getf.d GR_Arg = FR_Arg // get argument as double (int64) - fma.s0 FR_Two = f1, f1, f1 // construct 2.0 - addl GR_ad_z_1 = @ltoff(Constants_Z_1#),gp // logl tables -} -{ .mlx - nop.m 0 - movl GR_TwoP63 = 0x43E8000000000000 // 0.5*2^63 (huge arguments) -};; - -{ .mfi - ld8 GR_Poly_P = [GR_Poly_P] // get actual P-coeff table address - fcmp.eq.s1 p10, p0 = FR_Arg, f1 // if arg == 1 (return 0) - nop.i 0 -} -{ .mlx - ld8 GR_Poly_Q = [GR_Poly_Q] // get actual Q-coeff table address - movl GR_OneP125 = 0x3FF2000000000000 // 1.125 (near 1 path bound) -};; - -{ .mfi - ld8 GR_ad_z_1 = [GR_ad_z_1] // Get pointer to Constants_Z_1 - fclass.m p7,p0 = FR_Arg, 0xe3 // if arg NaN inf - cmp.le p9, p0 = GR_TwoP63, GR_Arg // if arg > 0.5*2^63 ('huges') -} -{ .mfb - cmp.ge p8, p0 = GR_OneP125, GR_Arg // if arg<1.125 -near 1 path - fms.s1 FR_XM1 = FR_Arg, f1, f1 // X0 = X-1 (for near 1 path) -(p11) br.cond.spnt acoshl_lt_pone // error branch (less than 1) -};; - -{ .mmi - setf.exp FR_Half = GR_Half // construct 0.5 -(p9) setf.s FR_XLog_Lo = r0 // Low of logl arg=0 (Huges path) - mov GR_exp_mask = 0x1FFFF // Create exponent mask -};; - -{ .mmf -(p8) ldfe FR_PP5 = [GR_Poly_P],16 // Load P5 -(p8) ldfe FR_QQ5 = [GR_Poly_Q],16 // Load Q5 - fms.s1 FR_M2 = FR_X2, f1, f1 // m2 = x^2 - 1 -};; - -{ .mfi -(p8) ldfe FR_QQ4 = [GR_Poly_Q],16 // Load Q4 - fms.s1 FR_M2L = FR_Arg, FR_Arg, FR_X2 // low part of - // m2 = fma(X*X - m2) - add GR_ad_tbl_1 = 0x040, GR_ad_z_1 // Point to Constants_G_H_h1 -} -{ .mfb -(p8) ldfe FR_PP4 = [GR_Poly_P],16 // Load P4 -(p7) fma.s0 FR_Res = FR_Arg,f1,FR_Arg // r = a + a (Nan, Inf) -(p7) br.ret.spnt b0 // return (Nan, Inf) -};; - -{ .mfi -(p8) ldfe FR_PP3 = [GR_Poly_P],16 // Load P3 - nop.f 0 - add GR_ad_q = -0x60, GR_ad_z_1 // Point to Constants_P -} -{ .mfb -(p8) ldfe FR_QQ3 = [GR_Poly_Q],16 // Load Q3 -(p9) fms.s1 FR_XLog_Hi = FR_Two, FR_Arg, f1 // Hi of log arg = 2*X-1 -(p9) br.cond.spnt huges_logl // special version of log -} -;; - -{ .mfi -(p8) ldfe FR_PP2 = [GR_Poly_P],16 // Load P2 -(p8) fma.s1 FR_2XM1 = FR_Two, FR_XM1, f0 // 2X0 = 2 * X0 - add GR_ad_z_2 = 0x140, GR_ad_z_1 // Point to Constants_Z_2 -} -{ .mfb -(p8) ldfe FR_QQ2 = [GR_Poly_Q],16 // Load Q2 -(p10) fma.s0 FR_Res = f0,f1,f0 // r = 0 (arg = 1) -(p10) br.ret.spnt b0 // return (arg = 1) -};; - -{ .mmi -(p8) ldfe FR_PP1 = [GR_Poly_P],16 // Load P1 -(p8) ldfe FR_QQ1 = [GR_Poly_Q],16 // Load Q1 - add GR_ad_tbl_2 = 0x180, GR_ad_z_1 // Point to Constants_G_H_h2 -} -;; - -{ .mfi -(p8) ldfe FR_PP0 = [GR_Poly_P] // Load P0 - fma.s1 FR_Tmp = f1, f1, FR_M2 // Tmp = 1 + m2 - add GR_ad_tbl_3 = 0x280, GR_ad_z_1 // Point to Constants_G_H_h3 -} -{ .mfb -(p8) ldfe FR_QQ0 = [GR_Poly_Q] - nop.f 0 -(p8) br.cond.spnt near_1 // near 1 path -};; -{ .mfi - ldfe FR_log2_hi = [GR_ad_q],16 // Load log2_hi - nop.f 0 - mov GR_Bias = 0x0FFFF // Create exponent bias -};; -{ .mfi - nop.m 0 - frsqrta.s1 FR_Rcp, p0 = FR_M2 // Rcp = 1/m2 reciprocal appr. - nop.i 0 -};; - -{ .mfi - ldfe FR_log2_lo = [GR_ad_q],16 // Load log2_lo - fms.s1 FR_Tmp = FR_X2, f1, FR_Tmp // Tmp = x^2 - Tmp - nop.i 0 -};; - -{ .mfi - ldfe FR_Q4 = [GR_ad_q],16 // Load Q4 - fma.s1 FR_GG = FR_Rcp, FR_M2, f0 // g = Rcp * m2 - // 8 bit Newton Raphson iteration - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_HH = FR_Half, FR_Rcp, f0 // h = 0.5 * Rcp - nop.i 0 -};; -{ .mfi - ldfe FR_Q3 = [GR_ad_q],16 // Load Q3 - fnma.s1 FR_EE = FR_GG, FR_HH, FR_Half // e = 0.5 - g * h - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_M2L = FR_Tmp, f1, FR_M2L // low part of m2 = Tmp+m2l - nop.i 0 -};; - -{ .mfi - ldfe FR_Q2 = [GR_ad_q],16 // Load Q2 - fma.s1 FR_GG = FR_GG, FR_EE, FR_GG // g = g * e + g - // 16 bit Newton Raphson iteration - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_HH = FR_HH, FR_EE, FR_HH // h = h * e + h - nop.i 0 -};; - -{ .mfi - ldfe FR_Q1 = [GR_ad_q] // Load Q1 - fnma.s1 FR_EE = FR_GG, FR_HH, FR_Half // e = 0.5 - g * h - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_GG = FR_GG, FR_EE, FR_GG // g = g * e + g - // 32 bit Newton Raphson iteration - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_HH = FR_HH, FR_EE, FR_HH // h = h * e + h - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_EE = FR_GG, FR_HH, FR_Half // e = 0.5 - g * h - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_GG = FR_GG, FR_EE, FR_GG // g = g * e + g - // 64 bit Newton Raphson iteration - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_HH = FR_HH, FR_EE, FR_HH // h = h * e + h - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_DD = FR_GG, FR_GG, FR_M2 // Remainder d = g * g - p2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_XLog_Hi = FR_Arg, f1, FR_GG // bh = z + gh - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_DD = FR_DD, f1, FR_M2L // add p2l: d = d + p2l - nop.i 0 -};; - -{ .mfi - getf.sig GR_signif = FR_XLog_Hi // Get significand of x+1 - nop.f 0 - mov GR_exp_2tom7 = 0x0fff8 // Exponent of 2^-7 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_GL = FR_DD, FR_HH, f0 // gl = d * h - extr.u GR_Index1 = GR_signif, 59, 4 // Get high 4 bits of signif -} -{ .mfi - nop.m 0 - fma.s1 FR_XLog_Hi = FR_DD, FR_HH, FR_XLog_Hi // bh = bh + gl - nop.i 0 -};; - - - -{ .mmi - shladd GR_ad_z_1 = GR_Index1, 2, GR_ad_z_1 // Point to Z_1 - shladd GR_ad_tbl_1 = GR_Index1, 4, GR_ad_tbl_1 // Point to G_1 - extr.u GR_X_0 = GR_signif, 49, 15 // Get high 15 bits of signif. -};; - -{ .mmi - ld4 GR_Z_1 = [GR_ad_z_1] // Load Z_1 - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfps FR_G, FR_H = [GR_ad_tbl_1],8 // Load G_1, H_1 - nop.m 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_XLog_Lo = FR_Arg, f1, FR_XLog_Hi // bl = x - bh - pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 // Get bits 30-15 of X_0 * Z_1 -};; - -// WE CANNOT USE GR_X_1 IN NEXT 3 CYCLES BECAUSE OF POSSIBLE 10 CLOCKS STALL! -// "DEAD" ZONE! - -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fmerge.se FR_S_hi = f1,FR_XLog_Hi // Form |x+1| - nop.i 0 -};; - - -{ .mmi - getf.exp GR_N = FR_XLog_Hi // Get N = exponent of x+1 - ldfd FR_h = [GR_ad_tbl_1] // Load h_1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - nop.f 0 - extr.u GR_Index2 = GR_X_1, 6, 4 // Extract bits 6-9 of X_1 -};; - -{ .mfi - shladd GR_ad_tbl_2 = GR_Index2, 4, GR_ad_tbl_2 // Point to G_2 - fma.s1 FR_XLog_Lo = FR_XLog_Lo, f1, FR_GG // bl = bl + gg - mov GR_exp_2tom80 = 0x0ffaf // Exponent of 2^-80 -} -{ .mfi - shladd GR_ad_z_2 = GR_Index2, 2, GR_ad_z_2 // Point to Z_2 - nop.f 0 - sub GR_N = GR_N, GR_Bias // sub bias from exp -};; - -{ .mmi - ldfps FR_G2, FR_H2 = [GR_ad_tbl_2],8 // Load G_2, H_2 - ld4 GR_Z_2 = [GR_ad_z_2] // Load Z_2 - sub GR_minus_N = GR_Bias, GR_N // Form exponent of 2^(-N) -};; - -{ .mmi - ldfd FR_h2 = [GR_ad_tbl_2] // Load h_2 - nop.m 0 - nop.i 0 -};; - -{ .mmi - setf.sig FR_float_N = GR_N // Put integer N into rightmost sign - setf.exp FR_2_to_minus_N = GR_minus_N // Form 2^(-N) - pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 // Get bits 30-15 of X_1 * Z_2 -};; - -// WE CANNOT USE GR_X_2 IN NEXT 3 CYCLES ("DEAD" ZONE!) -// BECAUSE OF POSSIBLE 10 CLOCKS STALL! -// (Just nops added - nothing to do here) - -{ .mfi - nop.m 0 - fma.s1 FR_XLog_Lo = FR_XLog_Lo, f1, FR_GL // bl = bl + gl - nop.i 0 -};; -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - nop.f 0 - extr.u GR_Index3 = GR_X_2, 1, 5 // Extract bits 1-5 of X_2 -};; - -{ .mfi - shladd GR_ad_tbl_3 = GR_Index3, 4, GR_ad_tbl_3 // Point to G_3 - nop.f 0 - nop.i 0 -};; - -{ .mfi - ldfps FR_G3, FR_H3 = [GR_ad_tbl_3],8 // Load G_3, H_3 - nop.f 0 - nop.i 0 -};; - -{ .mfi - ldfd FR_h3 = [GR_ad_tbl_3] // Load h_3 - fcvt.xf FR_float_N = FR_float_N - nop.i 0 -};; - -{ .mfi - nop.m 0 - fmpy.s1 FR_G = FR_G, FR_G2 // G = G_1 * G_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H, FR_H2 // H = H_1 + H_2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fadd.s1 FR_h = FR_h, FR_h2 // h = h_1 + h_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S_lo = FR_XLog_Lo, FR_2_to_minus_N, f0 //S_lo=S_lo*2^(-N) - nop.i 0 -};; - -{ .mfi - nop.m 0 - fmpy.s1 FR_G = FR_G, FR_G3 // G = (G_1 * G_2) * G_3 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H, FR_H3 // H = (H_1 + H_2) + H_3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fadd.s1 FR_h = FR_h, FR_h3 // h = (h_1 + h_2) + h_3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r = FR_G, FR_S_hi, f1 // r = G * S_hi - 1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_Y_hi = FR_float_N, FR_log2_hi, FR_H // Y_hi=N*log2_hi+H - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_h = FR_float_N, FR_log2_lo, FR_h // h=N*log2_lo+h - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r = FR_G, FR_S_lo, FR_r // r=G*S_lo+(G*S_hi-1) - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 // poly_lo = r * Q4 + Q3 - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 FR_rsq = FR_r, FR_r // rsq = r * r - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 // poly_lo=poly_lo*r+Q2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_rcub = FR_rsq, FR_r, f0 // rcub = r^3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r // poly_hi = Q1*rsq + r - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_lo = FR_poly_lo, FR_rcub, FR_h//poly_lo=poly_lo*r^3+h - nop.i 0 -};; - -{ .mfi - nop.m 0 - fadd.s0 FR_Y_lo = FR_poly_hi, FR_poly_lo - // Y_lo=poly_hi+poly_lo - nop.i 0 -};; - -{ .mfb - nop.m 0 - fadd.s0 FR_Res = FR_Y_lo,FR_Y_hi // Result=Y_lo+Y_hi - br.ret.sptk b0 // Common exit for 2^-7 < x < inf -};; - - -huges_logl: -{ .mmi - getf.sig GR_signif = FR_XLog_Hi // Get significand of x+1 - mov GR_exp_2tom7 = 0x0fff8 // Exponent of 2^-7 - nop.i 0 -};; - -{ .mfi - add GR_ad_tbl_1 = 0x040, GR_ad_z_1 // Point to Constants_G_H_h1 - nop.f 0 - add GR_ad_q = -0x60, GR_ad_z_1 // Point to Constants_P -} -{ .mfi - add GR_ad_z_2 = 0x140, GR_ad_z_1 // Point to Constants_Z_2 - nop.f 0 - add GR_ad_tbl_2 = 0x180, GR_ad_z_1 // Point to Constants_G_H_h2 -};; - -{ .mfi - add GR_ad_tbl_3 = 0x280, GR_ad_z_1 // Point to Constants_G_H_h3 - nop.f 0 - extr.u GR_Index1 = GR_signif, 59, 4 // Get high 4 bits of signif -};; - -{ .mfi - shladd GR_ad_z_1 = GR_Index1, 2, GR_ad_z_1 // Point to Z_1 - nop.f 0 - extr.u GR_X_0 = GR_signif, 49, 15 // Get high 15 bits of signif. -};; - -{ .mfi - ld4 GR_Z_1 = [GR_ad_z_1] // Load Z_1 - nop.f 0 - mov GR_exp_mask = 0x1FFFF // Create exponent mask -} -{ .mfi - shladd GR_ad_tbl_1 = GR_Index1, 4, GR_ad_tbl_1 // Point to G_1 - nop.f 0 - mov GR_Bias = 0x0FFFF // Create exponent bias -};; - -{ .mfi - ldfps FR_G, FR_H = [GR_ad_tbl_1],8 // Load G_1, H_1 - fmerge.se FR_S_hi = f1,FR_XLog_Hi // Form |x| - nop.i 0 -};; - -{ .mmi - getf.exp GR_N = FR_XLog_Hi // Get N = exponent of x+1 - ldfd FR_h = [GR_ad_tbl_1] // Load h_1 - nop.i 0 -};; - -{ .mfi - ldfe FR_log2_hi = [GR_ad_q],16 // Load log2_hi - nop.f 0 - pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 // Get bits 30-15 of X_0 * Z_1 -};; - -{ .mmi - ldfe FR_log2_lo = [GR_ad_q],16 // Load log2_lo - sub GR_N = GR_N, GR_Bias - mov GR_exp_2tom80 = 0x0ffaf // Exponent of 2^-80 -};; - -{ .mfi - ldfe FR_Q4 = [GR_ad_q],16 // Load Q4 - nop.f 0 - sub GR_minus_N = GR_Bias, GR_N // Form exponent of 2^(-N) -};; - -{ .mmf - ldfe FR_Q3 = [GR_ad_q],16 // Load Q3 - setf.sig FR_float_N = GR_N // Put integer N into rightmost sign - nop.f 0 -};; - -{ .mmi - ldfe FR_Q2 = [GR_ad_q],16 // Load Q2 - nop.m 0 - extr.u GR_Index2 = GR_X_1, 6, 4 // Extract bits 6-9 of X_1 -};; - -{ .mmi - ldfe FR_Q1 = [GR_ad_q] // Load Q1 - shladd GR_ad_z_2 = GR_Index2, 2, GR_ad_z_2 // Point to Z_2 - nop.i 0 -};; - -{ .mmi - ld4 GR_Z_2 = [GR_ad_z_2] // Load Z_2 - shladd GR_ad_tbl_2 = GR_Index2, 4, GR_ad_tbl_2 // Point to G_2 - nop.i 0 -};; - -{ .mmi - ldfps FR_G2, FR_H2 = [GR_ad_tbl_2],8 // Load G_2, H_2 - nop.m 0 - nop.i 0 -};; - -{ .mmf - ldfd FR_h2 = [GR_ad_tbl_2] // Load h_2 - setf.exp FR_2_to_minus_N = GR_minus_N // Form 2^(-N) - nop.f 0 -};; - -{ .mfi - nop.m 0 - nop.f 0 - pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 // Get bits 30-15 of X_1*Z_2 -};; - -// WE CANNOT USE GR_X_2 IN NEXT 3 CYCLES ("DEAD" ZONE!) -// BECAUSE OF POSSIBLE 10 CLOCKS STALL! -// (Just nops added - nothing to do here) - -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - nop.f 0 - extr.u GR_Index3 = GR_X_2, 1, 5 // Extract bits 1-5 of X_2 -};; - -{ .mfi - shladd GR_ad_tbl_3 = GR_Index3, 4, GR_ad_tbl_3 // Point to G_3 - fcvt.xf FR_float_N = FR_float_N - nop.i 0 -};; - -{ .mfi - ldfps FR_G3, FR_H3 = [GR_ad_tbl_3],8 // Load G_3, H_3 - nop.f 0 - nop.i 0 -};; - -{ .mfi - ldfd FR_h3 = [GR_ad_tbl_3] // Load h_3 - fmpy.s1 FR_G = FR_G, FR_G2 // G = G_1 * G_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H, FR_H2 // H = H_1 + H_2 - nop.i 0 -};; - -{ .mmf - nop.m 0 - nop.m 0 - fadd.s1 FR_h = FR_h, FR_h2 // h = h_1 + h_2 -};; - -{ .mfi - nop.m 0 - fmpy.s1 FR_G = FR_G, FR_G3 // G = (G_1 * G_2)*G_3 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H, FR_H3 // H = (H_1 + H_2)+H_3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fadd.s1 FR_h = FR_h, FR_h3 // h = (h_1 + h_2) + h_3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r = FR_G, FR_S_hi, f1 // r = G * S_hi - 1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_Y_hi = FR_float_N, FR_log2_hi, FR_H // Y_hi=N*log2_hi+H - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_h = FR_float_N, FR_log2_lo, FR_h // h = N*log2_lo+h - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 // poly_lo = r * Q4 + Q3 - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 FR_rsq = FR_r, FR_r // rsq = r * r - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 // poly_lo=poly_lo*r+Q2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_rcub = FR_rsq, FR_r, f0 // rcub = r^3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r // poly_hi = Q1*rsq + r - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_lo = FR_poly_lo, FR_rcub, FR_h//poly_lo=poly_lo*r^3+h - nop.i 0 -};; -{ .mfi - nop.m 0 - fadd.s0 FR_Y_lo = FR_poly_hi, FR_poly_lo // Y_lo=poly_hi+poly_lo - nop.i 0 -};; -{ .mfb - nop.m 0 - fadd.s0 FR_Res = FR_Y_lo,FR_Y_hi // Result=Y_lo+Y_hi - br.ret.sptk b0 // Common exit -};; - - -// NEAR ONE INTERVAL -near_1: -{ .mfi - nop.m 0 - frsqrta.s1 FR_Rcp, p0 = FR_2XM1 // Rcp = 1/x reciprocal appr. &SQRT& - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_PV6 = FR_PP5, FR_XM1, FR_PP4 // pv6 = P5*xm1+P4 $POLY$ - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_QV6 = FR_QQ5, FR_XM1, FR_QQ4 // qv6 = Q5*xm1+Q4 $POLY$ - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_PV4 = FR_PP3, FR_XM1, FR_PP2 // pv4 = P3*xm1+P2 $POLY$ - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_QV4 = FR_QQ3, FR_XM1, FR_QQ2 // qv4 = Q3*xm1+Q2 $POLY$ - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_XM12 = FR_XM1, FR_XM1, f0 // xm1^2 = xm1 * xm1 $POLY$ - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_PV2 = FR_PP1, FR_XM1, FR_PP0 // pv2 = P1*xm1+P0 $POLY$ - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_QV2 = FR_QQ1, FR_XM1, FR_QQ0 // qv2 = Q1*xm1+Q0 $POLY$ - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_GG = FR_Rcp, FR_2XM1, f0 // g = Rcp * x &SQRT& - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_HH = FR_Half, FR_Rcp, f0 // h = 0.5 * Rcp &SQRT& - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fma.s1 FR_PV3 = FR_XM12, FR_PV6, FR_PV4//pv3=pv6*xm1^2+pv4 $POLY$ - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_QV3 = FR_XM12, FR_QV6, FR_QV4//qv3=qv6*xm1^2+qv4 $POLY$ - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fnma.s1 FR_EE = FR_GG, FR_HH, FR_Half // e = 0.5 - g * h &SQRT& - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_PP = FR_XM12, FR_PV3, FR_PV2 //pp=pv3*xm1^2+pv2 $POLY$ - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_QQ = FR_XM12, FR_QV3, FR_QV2 //qq=qv3*xm1^2+qv2 $POLY$ - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_GG = FR_GG, FR_EE, FR_GG // g = g * e + g &SQRT& - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_HH = FR_HH, FR_EE, FR_HH // h = h * e + h &SQRT& - nop.i 0 -};; - -{ .mfi - nop.m 0 - frcpa.s1 FR_Y0,p0 = f1,FR_QQ // y = frcpa(b) #DIV# - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_EE = FR_GG, FR_HH, FR_Half // e = 0.5 - g*h &SQRT& - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_Q0 = FR_PP,FR_Y0,f0 // q = a*y #DIV# - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_E0 = FR_Y0,FR_QQ,f1 // e = 1 - b*y #DIV# - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_GG = FR_GG, FR_EE, FR_GG // g = g * e + g &SQRT& - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_HH = FR_HH, FR_EE, FR_HH // h = h * e + h &SQRT& - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_E2 = FR_E0,FR_E0,FR_E0 // e2 = e+e^2 #DIV# - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_E1 = FR_E0,FR_E0,f0 // e1 = e^2 #DIV# - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_EE = FR_GG, FR_HH, FR_Half // e = 0.5 - g * h &SQRT& - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_DD = FR_GG, FR_GG, FR_2XM1 // d = x - g * g &SQRT& - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_Y1 = FR_Y0,FR_E2,FR_Y0 // y1 = y+y*e2 #DIV# - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_E3 = FR_E1,FR_E1,FR_E0 // e3 = e+e1^2 #DIV# - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_GG = FR_DD, FR_HH, FR_GG // g = d * h + g &SQRT& - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_HH = FR_HH, FR_EE, FR_HH // h = h * e + h &SQRT& - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_Y2 = FR_Y1,FR_E3,FR_Y0 // y2 = y+y1*e3 #DIV# - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_R0 = FR_QQ,FR_Q0,FR_PP // r = a-b*q #DIV# - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_DD = FR_GG, FR_GG, FR_2XM1 // d = x - g * g &SQRT& - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_E4 = FR_QQ,FR_Y2,f1 // e4 = 1-b*y2 #DIV# - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_X_Hi = FR_R0,FR_Y2,FR_Q0 // x = q+r*y2 #DIV# - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_GL = FR_DD, FR_HH, f0 // gl = d * h &SQRT& - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_Y3 = FR_Y2,FR_E4,FR_Y2 // y3 = y2+y2*e4 #DIV# - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_R1 = FR_QQ,FR_X_Hi,FR_PP // r1 = a-b*x #DIV# - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_HH = FR_GG, FR_X_Hi, f0 // hh = gg * x_hi - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_LH = FR_GL, FR_X_Hi, f0 // lh = gl * x_hi - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_X_lo = FR_R1,FR_Y3,f0 // x_lo = r1*y3 #DIV# - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_LL = FR_GL, FR_X_lo, f0 // ll = gl*x_lo - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_HL = FR_GG, FR_X_lo, f0 // hl = gg * x_lo - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_Res = FR_GL, f1, FR_LL // res = gl + ll - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_Res = FR_Res, f1, FR_LH // res = res + lh - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_Res = FR_Res, f1, FR_HL // res = res + hl - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_Res = FR_Res, f1, FR_HH // res = res + hh - nop.i 0 -};; - -{ .mfb - nop.m 0 - fma.s0 FR_Res = FR_Res, f1, FR_GG // result = res + gg - br.ret.sptk b0 // Exit for near 1 path -};; -// NEAR ONE INTERVAL END - - - - -acoshl_lt_pone: -{ .mfi - nop.m 0 - fmerge.s FR_Arg_X = FR_Arg, FR_Arg - nop.i 0 -};; -{ .mfb - mov GR_Parameter_TAG = 135 - frcpa.s0 FR_Res,p0 = f0,f0 // get QNaN,and raise invalid - br.cond.sptk __libm_error_region // exit if x < 1.0 -};; - -GLOBAL_LIBM_END(acoshl) - - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y = -32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS = ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp = -64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP = gp // Save gp -};; - -{ .mmi - stfe [GR_Parameter_Y] = FR_Arg_Y,16 // Parameter 2 to stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0,GR_SAVE_B0 - mov GR_SAVE_B0 = b0 // Save b0 -};; - -.body -{ .mib - stfe [GR_Parameter_X] = FR_Arg_X // Parameter 1 to stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfe [GR_Parameter_Y] = FR_Res // Parameter 3 to stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0 = __libm_error_support# // Error handling function -};; - -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; - -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return res -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region#) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_acosl.S b/sysdeps/ia64/fpu/e_acosl.S deleted file mode 100644 index 8c5155a2ec..0000000000 --- a/sysdeps/ia64/fpu/e_acosl.S +++ /dev/null @@ -1,2546 +0,0 @@ -.file "acosl.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 08/28/01 New version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// long double acosl(long double) -// -// Overview of operation -//============================================================== -// Background -// -// Implementation -// -// For |s| in [2^{-4}, sqrt(2)/2]: -// Let t= 2^k*1.b1 b2..b6 1, where s= 2^k*1.b1 b2.. b52 -// acos(s)= pi/2-asin(t)-asin(r), where r= s*sqrt(1-t^2)-t*sqrt(1-s^2), i.e. -// r= (s-t)*sqrt(1-t^2)-t*sqrt(1-t^2)*(sqrt((1-s^2)/(1-t^2))-1) -// asin(r)-r evaluated as 9-degree polynomial (c3*r^3+c5*r^5+c7*r^7+c9*r^9) -// The 64-bit significands of sqrt(1-t^2), 1/(1-t^2) are read from the table, -// along with the high and low parts of asin(t) (stored as two double precision -// values) -// -// |s| in (sqrt(2)/2, sqrt(255/256)): -// Let t= 2^k*1.b1 b2..b6 1, where (1-s^2)*frsqrta(1-s^2)= 2^k*1.b1 b2..b6.. -// acos(|s|)= asin(t)-asin(r) -// acos(-|s|)=pi-asin(t)+asin(r), r= s*t-sqrt(1-s^2)*sqrt(1-t^2) -// To minimize accumulated errors, r is computed as -// r= (t*s)_s-t^2*y*z+z*y*(t^2-1+s^2)_s+z*y*(1-s^2)_s*x+z'*y*(1-s^2)*PS29+ -// +(t*s-(t*s)_s)+z*y*((t^2-1-(t^2-1+s^2)_s)+s^2)+z*y*(1-s^2-(1-s^2)_s)+ -// +ez*z'*y*(1-s^2)*(1-x), -// where y= frsqrta(1-s^2), z= (sqrt(1-t^2))_s (rounded to 24 significant bits) -// z'= sqrt(1-t^2), x= ((1-s^2)*y^2-1)/2 -// -// |s|<2^{-4}: evaluate asin(s) as 17-degree polynomial, return pi/2-asin(s) -// (or simply return pi/2-s, if|s|<2^{-64}) -// -// |s| in [sqrt(255/256), 1): acos(|s|)= asin(sqrt(1-s^2)) -// acos(-|s|)= pi-asin(sqrt(1-s^2)) -// use 17-degree polynomial for asin(sqrt(1-s^2)), -// 9-degree polynomial to evaluate sqrt(1-s^2) -// High order term is (pi)_high-(y*(1-s^2))_high, for s<0, -// or y*(1-s^2)_s, for s>0 -// - - - -// Registers used -//============================================================== -// f6-f15, f32-f36 -// r2-r3, r23-r23 -// p6, p7, p8, p12 -// - - - GR_SAVE_B0= r33 - GR_SAVE_PFS= r34 - GR_SAVE_GP= r35 // This reg. can safely be used - GR_SAVE_SP= r36 - - GR_Parameter_X= r37 - GR_Parameter_Y= r38 - GR_Parameter_RESULT= r39 - GR_Parameter_TAG= r40 - - FR_X= f10 - FR_Y= f1 - FR_RESULT= f8 - - - -RODATA - -.align 16 - -LOCAL_OBJECT_START(T_table) - -// stores 64-bit significand of 1/(1-t^2), 64-bit significand of sqrt(1-t^2), -// asin(t)_high (double precision), asin(t)_low (double precision) - -data8 0x80828692b71c4391, 0xff7ddcec2d87e879 -data8 0x3fb022bc0ae531a0, 0x3c9f599c7bb42af6 -data8 0x80869f0163d0b082, 0xff79cad2247914d3 -data8 0x3fb062dd26afc320, 0x3ca4eff21bd49c5c -data8 0x808ac7d5a8690705, 0xff75a89ed6b626b9 -data8 0x3fb0a2ff4a1821e0, 0x3cb7e33b58f164cc -data8 0x808f0112ad8ad2e0, 0xff7176517c2cc0cb -data8 0x3fb0e32279319d80, 0x3caee31546582c43 -data8 0x80934abba8a1da0a, 0xff6d33e949b1ed31 -data8 0x3fb12346b8101da0, 0x3cb8bfe463d087cd -data8 0x8097a4d3dbe63d8f, 0xff68e16571015c63 -data8 0x3fb1636c0ac824e0, 0x3c8870a7c5a3556f -data8 0x809c0f5e9662b3dd, 0xff647ec520bca0f0 -data8 0x3fb1a392756ed280, 0x3c964f1a927461ae -data8 0x80a08a5f33fadc66, 0xff600c07846a6830 -data8 0x3fb1e3b9fc19e580, 0x3c69eb3576d56332 -data8 0x80a515d91d71acd4, 0xff5b892bc475affa -data8 0x3fb223e2a2dfbe80, 0x3c6a4e19fd972fb6 -data8 0x80a9b1cfc86ff7cd, 0xff56f631062cf93d -data8 0x3fb2640c6dd76260, 0x3c62041160e0849e -data8 0x80ae5e46b78b0d68, 0xff5253166bc17794 -data8 0x3fb2a43761187c80, 0x3cac61651af678c0 -data8 0x80b31b417a4b756b, 0xff4d9fdb14463dc8 -data8 0x3fb2e46380bb6160, 0x3cb06ef23eeba7a1 -data8 0x80b7e8c3ad33c369, 0xff48dc7e1baf6738 -data8 0x3fb32490d0d910c0, 0x3caa05f480b300d5 -data8 0x80bcc6d0f9c784d6, 0xff4408fe9ad13e37 -data8 0x3fb364bf558b3820, 0x3cb01e7e403aaab9 -data8 0x80c1b56d1692492d, 0xff3f255ba75f5f4e -data8 0x3fb3a4ef12ec3540, 0x3cb4fe8fcdf5f5f1 -data8 0x80c6b49bc72ec446, 0xff3a319453ebd961 -data8 0x3fb3e5200d171880, 0x3caf2dc089b2b7e2 -data8 0x80cbc460dc4e0ae8, 0xff352da7afe64ac6 -data8 0x3fb425524827a720, 0x3cb75a855e7c6053 -data8 0x80d0e4c033bee9c4, 0xff301994c79afb32 -data8 0x3fb46585c83a5e00, 0x3cb3264981c019ab -data8 0x80d615bdb87556db, 0xff2af55aa431f291 -data8 0x3fb4a5ba916c73c0, 0x3c994251d94427b5 -data8 0x80db575d6291fd8a, 0xff25c0f84bae0cb9 -data8 0x3fb4e5f0a7dbdb20, 0x3cbee2fcc4c786cb -data8 0x80e0a9a33769e535, 0xff207c6cc0ec09fd -data8 0x3fb526280fa74620, 0x3c940656e5549b91 -data8 0x80e60c93498e32cd, 0xff1b27b703a19c98 -data8 0x3fb56660ccee2740, 0x3ca7082374d7b2cd -data8 0x80eb8031b8d4052d, 0xff15c2d6105c72f8 -data8 0x3fb5a69ae3d0b520, 0x3c7c4d46e09ac68a -data8 0x80f10482b25c6c8a, 0xff104dc8e0813ed4 -data8 0x3fb5e6d6586fec20, 0x3c9aa84ffd9b4958 -data8 0x80f6998a709c7cfb, 0xff0ac88e6a4ab926 -data8 0x3fb627132eed9140, 0x3cbced2cbbbe7d16 -data8 0x80fc3f4d3b657c44, 0xff053325a0c8a2ec -data8 0x3fb667516b6c34c0, 0x3c6489c5fc68595a -data8 0x8101f5cf67ed2af8, 0xfeff8d8d73dec2bb -data8 0x3fb6a791120f33a0, 0x3cbe12acf159dfad -data8 0x8107bd1558d6291f, 0xfef9d7c4d043df29 -data8 0x3fb6e7d226fabba0, 0x3ca386d099cd0dc7 -data8 0x810d95237e38766a, 0xfef411ca9f80b5f7 -data8 0x3fb72814ae53cc20, 0x3cb9f35731e71dd6 -data8 0x81137dfe55aa0e29, 0xfeee3b9dc7eef009 -data8 0x3fb76858ac403a00, 0x3c74df3dd959141a -data8 0x811977aa6a479f0f, 0xfee8553d2cb8122c -data8 0x3fb7a89e24e6b0e0, 0x3ca6034406ee42bc -data8 0x811f822c54bd5ef8, 0xfee25ea7add46a91 -data8 0x3fb7e8e51c6eb6a0, 0x3cb82f8f78e68ed7 -data8 0x81259d88bb4ffac1, 0xfedc57dc2809fb1d -data8 0x3fb8292d9700ad60, 0x3cbebb73c0e653f9 -data8 0x812bc9c451e5a257, 0xfed640d974eb6068 -data8 0x3fb8697798c5d620, 0x3ca2feee76a9701b -data8 0x813206e3da0f3124, 0xfed0199e6ad6b585 -data8 0x3fb8a9c325e852e0, 0x3cb9e88f2f4d0efe -data8 0x813854ec231172f9, 0xfec9e229dcf4747d -data8 0x3fb8ea1042932a00, 0x3ca5ff40d81f66fd -data8 0x813eb3e209ee858f, 0xfec39a7a9b36538b -data8 0x3fb92a5ef2f247c0, 0x3cb5e3bece4d6b07 -data8 0x814523ca796f56ce, 0xfebd428f72561efe -data8 0x3fb96aaf3b3281a0, 0x3cb7b9e499436d7c -data8 0x814ba4aa6a2d3ff9, 0xfeb6da672bd48fe4 -data8 0x3fb9ab011f819860, 0x3cb9168143cc1a7f -data8 0x81523686e29bbdd7, 0xfeb062008df81f50 -data8 0x3fb9eb54a40e3ac0, 0x3cb6e544197eb1e1 -data8 0x8158d964f7124614, 0xfea9d95a5bcbd65a -data8 0x3fba2ba9cd080800, 0x3ca9a717be8f7446 -data8 0x815f8d49c9d639e4, 0xfea34073551e1ac8 -data8 0x3fba6c009e9f9260, 0x3c741e989a60938a -data8 0x8166523a8b24f626, 0xfe9c974a367f785c -data8 0x3fbaac591d0661a0, 0x3cb2c1290107e57d -data8 0x816d283c793e0114, 0xfe95ddddb94166cb -data8 0x3fbaecb34c6ef600, 0x3c9c7d5fbaec405d -data8 0x81740f54e06d55bd, 0xfe8f142c93750c50 -data8 0x3fbb2d0f310cca00, 0x3cbc09479a9cbcfb -data8 0x817b07891b15cd5e, 0xfe883a3577e9fceb -data8 0x3fbb6d6ccf1455e0, 0x3cb9450bff4ee307 -data8 0x818210de91bba6c8, 0xfe814ff7162cf62f -data8 0x3fbbadcc2abb1180, 0x3c9227fda12a8d24 -data8 0x81892b5abb0f2bf9, 0xfe7a55701a8697b1 -data8 0x3fbbee2d48377700, 0x3cb6fad72acfe356 -data8 0x819057031bf7760e, 0xfe734a9f2dfa1810 -data8 0x3fbc2e902bc10600, 0x3cb4465b588d16ad -data8 0x819793dd479d4fbe, 0xfe6c2f82f643f68b -data8 0x3fbc6ef4d9904580, 0x3c8b9ac54823960d -data8 0x819ee1eedf76367a, 0xfe65041a15d8a92c -data8 0x3fbcaf5b55dec6a0, 0x3ca2b8d28a954db2 -data8 0x81a6413d934f7a66, 0xfe5dc8632be3477f -data8 0x3fbcefc3a4e727a0, 0x3c9380da83713ab4 -data8 0x81adb1cf21597d4b, 0xfe567c5cd44431d5 -data8 0x3fbd302dcae51600, 0x3ca995b83421756a -data8 0x81b533a9563310b8, 0xfe4f2005a78fb50f -data8 0x3fbd7099cc155180, 0x3caefa2f7a817d5f -data8 0x81bcc6d20cf4f373, 0xfe47b35c3b0caaeb -data8 0x3fbdb107acb5ae80, 0x3cb455fc372dd026 -data8 0x81c46b4f2f3d6e68, 0xfe40365f20b316d6 -data8 0x3fbdf177710518c0, 0x3cbee3dcc5b01434 -data8 0x81cc2126b53c1144, 0xfe38a90ce72abf36 -data8 0x3fbe31e91d439620, 0x3cb3e131c950aebd -data8 0x81d3e85ea5bd8ee2, 0xfe310b6419c9c33a -data8 0x3fbe725cb5b24900, 0x3c01d3fac6029027 -data8 0x81dbc0fd1637b9c1, 0xfe295d6340932d15 -data8 0x3fbeb2d23e937300, 0x3c6304cc44aeedd1 -data8 0x81e3ab082ad5a0a4, 0xfe219f08e03580b3 -data8 0x3fbef349bc2a77e0, 0x3cac1d2d6abe9c72 -data8 0x81eba6861683cb97, 0xfe19d0537a0946e2 -data8 0x3fbf33c332bbe020, 0x3ca0909dba4e96ca -data8 0x81f3b37d1afc9979, 0xfe11f1418c0f94e2 -data8 0x3fbf743ea68d5b60, 0x3c937fc12a2a779a -data8 0x81fbd1f388d4be45, 0xfe0a01d190f09063 -data8 0x3fbfb4bc1be5c340, 0x3cbf51a504b55813 -data8 0x820401efbf87e248, 0xfe020201fff9efea -data8 0x3fbff53b970d1e80, 0x3ca625444b260078 -data8 0x82106ad2ffdca049, 0xfdf5e3940a49135e -data8 0x3fc02aff52065460, 0x3c9125d113e22a57 -data8 0x8221343d6ea1d3e2, 0xfde581a45429b0a0 -data8 0x3fc06b84f8e03220, 0x3caccf362295894b -data8 0x82324434adbf99c2, 0xfdd4de1a001fb775 -data8 0x3fc0ac0ed1fe7240, 0x3cc22f676096b0af -data8 0x82439aee8d0c7747, 0xfdc3f8e8269d1f03 -data8 0x3fc0ec9cee9e4820, 0x3cca147e2886a628 -data8 0x825538a1d0fcb2f0, 0xfdb2d201a9b1ba66 -data8 0x3fc12d2f6006f0a0, 0x3cc72b36633bc2d4 -data8 0x82671d86345c5cee, 0xfda1695934d723e7 -data8 0x3fc16dc63789de60, 0x3cb11f9c47c7b83f -data8 0x827949d46a121770, 0xfd8fbee13cbbb823 -data8 0x3fc1ae618682e620, 0x3cce1b59020cef8e -data8 0x828bbdc61eeab9ba, 0xfd7dd28bff0c9f34 -data8 0x3fc1ef015e586c40, 0x3cafec043e0225ee -data8 0x829e7995fb6de9e1, 0xfd6ba44b823ee1ca -data8 0x3fc22fa5d07b90c0, 0x3cba905409caf8e3 -data8 0x82b17d7fa5bbc982, 0xfd5934119557883a -data8 0x3fc2704eee685da0, 0x3cb5ef21838a823e -data8 0x82c4c9bfc373d276, 0xfd4681cfcfb2c161 -data8 0x3fc2b0fcc9a5f3e0, 0x3ccc7952c5e0e312 -data8 0x82d85e93fba50136, 0xfd338d7790ca0f41 -data8 0x3fc2f1af73c6ba00, 0x3cbecf5f977d1ca9 -data8 0x82ec3c3af8c76b32, 0xfd2056f9fff97727 -data8 0x3fc33266fe6889a0, 0x3c9d329c022ebdb5 -data8 0x830062f46abf6022, 0xfd0cde480c43b327 -data8 0x3fc373237b34de60, 0x3cc95806d4928adb -data8 0x8314d30108ea35f0, 0xfcf923526c1562b2 -data8 0x3fc3b3e4fbe10520, 0x3cbc299fe7223d54 -data8 0x83298ca29434df97, 0xfce526099d0737ed -data8 0x3fc3f4ab922e4a60, 0x3cb59d8bb8fdbccc -data8 0x833e901bd93c7009, 0xfcd0e65de39f1f7c -data8 0x3fc435774fea2a60, 0x3c9ec18b43340914 -data8 0x8353ddb0b278aad8, 0xfcbc643f4b106055 -data8 0x3fc4764846ee80a0, 0x3cb90402efd87ed6 -data8 0x836975a60a70c52e, 0xfca79f9da4fab13a -data8 0x3fc4b71e8921b860, 0xbc58f23449ed6365 -data8 0x837f5841ddfa7a46, 0xfc92986889284148 -data8 0x3fc4f7fa2876fca0, 0xbc6294812bf43acd -data8 0x839585cb3e839773, 0xfc7d4e8f554ab12f -data8 0x3fc538db36ee6960, 0x3cb910b773d4c578 -data8 0x83abfe8a5466246f, 0xfc67c2012cb6fa68 -data8 0x3fc579c1c6953cc0, 0x3cc5ede909fc47fc -data8 0x83c2c2c861474d91, 0xfc51f2acf82041d5 -data8 0x3fc5baade9860880, 0x3cac63cdfc3588e5 -data8 0x83d9d2cfc2813637, 0xfc3be08165519325 -data8 0x3fc5fb9fb1e8e3a0, 0x3cbf7c8466578c29 -data8 0x83f12eebf397daac, 0xfc258b6ce6e6822f -data8 0x3fc63c9731f39d40, 0x3cb6d2a7ffca3e9e -data8 0x8408d76990b9296e, 0xfc0ef35db402af94 -data8 0x3fc67d947be9eec0, 0x3cb1980da09e6566 -data8 0x8420cc9659487cd7, 0xfbf81841c8082dc4 -data8 0x3fc6be97a21daf00, 0x3cc2ac8330e59aa5 -data8 0x84390ec132759ecb, 0xfbe0fa06e24cc390 -data8 0x3fc6ffa0b6ef05e0, 0x3ccc1a030fee56c4 -data8 0x84519e3a29df811a, 0xfbc9989a85ce0954 -data8 0x3fc740afcccca000, 0x3cc19692a5301ca6 -data8 0x846a7b527842d61b, 0xfbb1f3e9f8e45dc4 -data8 0x3fc781c4f633e2c0, 0x3cc0e98f3868a508 -data8 0x8483a65c8434b5f0, 0xfb9a0be244f4af45 -data8 0x3fc7c2e045b12140, 0x3cb2a8d309754420 -data8 0x849d1fabe4e97dd7, 0xfb81e070362116d1 -data8 0x3fc80401cddfd120, 0x3ca7a44544aa4ce6 -data8 0x84b6e795650817ea, 0xfb6971805af8411e -data8 0x3fc84529a16ac020, 0x3c9e3b709c7d6f94 -data8 0x84d0fe6f0589da92, 0xfb50beff0423a2f5 -data8 0x3fc88657d30c49e0, 0x3cc60d65a7f0a278 -data8 0x84eb649000a73014, 0xfb37c8d84414755c -data8 0x3fc8c78c758e8e80, 0x3cc94b2ee984c2b7 -data8 0x85061a50ccd13781, 0xfb1e8ef7eeaf764b -data8 0x3fc908c79bcba900, 0x3cc8540ae794a2fe -data8 0x8521200b1fb8916e, 0xfb05114998f76a83 -data8 0x3fc94a0958ade6c0, 0x3ca127f49839fa9c -data8 0x853c7619f1618bf6, 0xfaeb4fb898b65d19 -data8 0x3fc98b51bf2ffee0, 0x3c8c9ba7a803909a -data8 0x85581cd97f45e274, 0xfad14a3004259931 -data8 0x3fc9cca0e25d4ac0, 0x3cba458e91d3bf54 -data8 0x857414a74f8446b4, 0xfab7009ab1945a54 -data8 0x3fca0df6d551fe80, 0x3cc78ea1d329d2b2 -data8 0x85905de2341dea46, 0xfa9c72e3370d2fbc -data8 0x3fca4f53ab3b6200, 0x3ccf60dca86d57ef -data8 0x85acf8ea4e423ff8, 0xfa81a0f3e9fa0ee9 -data8 0x3fca90b777580aa0, 0x3ca4c4e2ec8a867e -data8 0x85c9e62111a92e7d, 0xfa668ab6dec711b1 -data8 0x3fcad2224cf814e0, 0x3c303de5980d071c -data8 0x85e725e947fbee97, 0xfa4b3015e883dbfe -data8 0x3fcb13943f7d5f80, 0x3cc29d4eefa5cb1e -data8 0x8604b8a7144cd054, 0xfa2f90fa9883a543 -data8 0x3fcb550d625bc6a0, 0x3c9e01a746152daf -data8 0x86229ebff69e2415, 0xfa13ad4e3dfbe1c1 -data8 0x3fcb968dc9195ea0, 0x3ccc091bd73ae518 -data8 0x8640d89acf78858c, 0xf9f784f9e5a1877b -data8 0x3fcbd815874eb160, 0x3cb5f4b89875e187 -data8 0x865f669fe390c7f5, 0xf9db17e65944eacf -data8 0x3fcc19a4b0a6f9c0, 0x3cc5c0bc2b0bbf14 -data8 0x867e4938df7dc45f, 0xf9be65fc1f6c2e6e -data8 0x3fcc5b3b58e061e0, 0x3cc1ca70df8f57e7 -data8 0x869d80d0db7e4c0c, 0xf9a16f237aec427a -data8 0x3fcc9cd993cc4040, 0x3cbae93acc85eccf -data8 0x86bd0dd45f4f8265, 0xf98433446a806e70 -data8 0x3fccde7f754f5660, 0x3cb22f70e64568d0 -data8 0x86dcf0b16613e37a, 0xf966b246a8606170 -data8 0x3fcd202d11620fa0, 0x3c962030e5d4c849 -data8 0x86fd29d7624b3d5d, 0xf948ec11a9d4c45b -data8 0x3fcd61e27c10c0a0, 0x3cc7083c91d59217 -data8 0x871db9b741dbe44a, 0xf92ae08c9eca4941 -data8 0x3fcda39fc97be7c0, 0x3cc9258579e57211 -data8 0x873ea0c3722d6af2, 0xf90c8f9e71633363 -data8 0x3fcde5650dd86d60, 0x3ca4755a9ea582a9 -data8 0x875fdf6fe45529e8, 0xf8edf92dc5875319 -data8 0x3fce27325d6fe520, 0x3cbc1e2b6c1954f9 -data8 0x878176321154e2bc, 0xf8cf1d20f87270b8 -data8 0x3fce6907cca0d060, 0x3cb6ca4804750830 -data8 0x87a36580fe6bccf5, 0xf8affb5e20412199 -data8 0x3fceaae56fdee040, 0x3cad6b310d6fd46c -data8 0x87c5add5417a5cb9, 0xf89093cb0b7c0233 -data8 0x3fceeccb5bb33900, 0x3cc16e99cedadb20 -data8 0x87e84fa9057914ca, 0xf870e64d40a15036 -data8 0x3fcf2eb9a4bcb600, 0x3cc75ee47c8b09e9 -data8 0x880b4b780f02b709, 0xf850f2c9fdacdf78 -data8 0x3fcf70b05fb02e20, 0x3cad6350d379f41a -data8 0x882ea1bfc0f228ac, 0xf830b926379e6465 -data8 0x3fcfb2afa158b8a0, 0x3cce0ccd9f829985 -data8 0x885252ff21146108, 0xf810394699fe0e8e -data8 0x3fcff4b77e97f3e0, 0x3c9b30faa7a4c703 -data8 0x88765fb6dceebbb3, 0xf7ef730f865f6df0 -data8 0x3fd01b6406332540, 0x3cdc5772c9e0b9bd -data8 0x88ad1f69be2cc730, 0xf7bdc59bc9cfbd97 -data8 0x3fd04cf8ad203480, 0x3caeef44fe21a74a -data8 0x88f763f70ae2245e, 0xf77a91c868a9c54e -data8 0x3fd08f23ce0162a0, 0x3cd6290ab3fe5889 -data8 0x89431fc7bc0c2910, 0xf73642973c91298e -data8 0x3fd0d1610f0c1ec0, 0x3cc67401a01f08cf -data8 0x8990573407c7738e, 0xf6f0d71d1d7a2dd6 -data8 0x3fd113b0c65d88c0, 0x3cc7aa4020fe546f -data8 0x89df0eb108594653, 0xf6aa4e6a05cfdef2 -data8 0x3fd156134ada6fe0, 0x3cc87369da09600c -data8 0x8a2f4ad16e0ed78a, 0xf662a78900c35249 -data8 0x3fd19888f43427a0, 0x3cc62b220f38e49c -data8 0x8a811046373e0819, 0xf619e180181d97cc -data8 0x3fd1db121aed7720, 0x3ca3ede7490b52f4 -data8 0x8ad463df6ea0fa2c, 0xf5cffb504190f9a2 -data8 0x3fd21daf185fa360, 0x3caafad98c1d6c1b -data8 0x8b294a8cf0488daf, 0xf584f3f54b8604e6 -data8 0x3fd2606046bf95a0, 0x3cdb2d704eeb08fa -data8 0x8b7fc95f35647757, 0xf538ca65c960b582 -data8 0x3fd2a32601231ec0, 0x3cc661619fa2f126 -data8 0x8bd7e588272276f8, 0xf4eb7d92ff39fccb -data8 0x3fd2e600a3865760, 0x3c8a2a36a99aca4a -data8 0x8c31a45bf8e9255e, 0xf49d0c68cd09b689 -data8 0x3fd328f08ad12000, 0x3cb9efaf1d7ab552 -data8 0x8c8d0b520a35eb18, 0xf44d75cd993cfad2 -data8 0x3fd36bf614dcc040, 0x3ccacbb590bef70d -data8 0x8cea2005d068f23d, 0xf3fcb8a23ab4942b -data8 0x3fd3af11a079a6c0, 0x3cd9775872cf037d -data8 0x8d48e837c8cd5027, 0xf3aad3c1e2273908 -data8 0x3fd3f2438d754b40, 0x3ca03304f667109a -data8 0x8da969ce732f3ac7, 0xf357c60202e2fd7e -data8 0x3fd4358c3ca032e0, 0x3caecf2504ff1a9d -data8 0x8e0baad75555e361, 0xf3038e323ae9463a -data8 0x3fd478ec0fd419c0, 0x3cc64bdc3d703971 -data8 0x8e6fb18807ba877e, 0xf2ae2b1c3a6057f7 -data8 0x3fd4bc6369fa40e0, 0x3cbb7122ec245cf2 -data8 0x8ed5843f4bda74d5, 0xf2579b83aa556f0c -data8 0x3fd4fff2af11e2c0, 0x3c9cfa2dc792d394 -data8 0x8f3d29862c861fef, 0xf1ffde2612ca1909 -data8 0x3fd5439a4436d000, 0x3cc38d46d310526b -data8 0x8fa6a81128940b2d, 0xf1a6f1bac0075669 -data8 0x3fd5875a8fa83520, 0x3cd8bf59b8153f8a -data8 0x901206c1686317a6, 0xf14cd4f2a730d480 -data8 0x3fd5cb33f8cf8ac0, 0x3c9502b5c4d0e431 -data8 0x907f4ca5fe9cf739, 0xf0f186784a125726 -data8 0x3fd60f26e847b120, 0x3cc8a1a5e0acaa33 -data8 0x90ee80fd34aeda5e, 0xf09504ef9a212f18 -data8 0x3fd65333c7e43aa0, 0x3cae5b029cb1f26e -data8 0x915fab35e37421c6, 0xf0374ef5daab5c45 -data8 0x3fd6975b02b8e360, 0x3cd5aa1c280c45e6 -data8 0x91d2d2f0d894d73c, 0xefd86321822dbb51 -data8 0x3fd6db9d05213b20, 0x3cbecf2c093ccd8b -data8 0x9248000249200009, 0xef7840021aca5a72 -data8 0x3fd71ffa3cc87fc0, 0x3cb8d273f08d00d9 -data8 0x92bf3a7351f081d2, 0xef16e42021d7cbd5 -data8 0x3fd7647318b1ad20, 0x3cbce099d79cdc46 -data8 0x93388a8386725713, 0xeeb44dfce6820283 -data8 0x3fd7a908093fc1e0, 0x3ccb033ec17a30d9 -data8 0x93b3f8aa8e653812, 0xee507c126774fa45 -data8 0x3fd7edb9803e3c20, 0x3cc10aedb48671eb -data8 0x94318d99d341ade4, 0xedeb6cd32f891afb -data8 0x3fd83287f0e9cf80, 0x3c994c0c1505cd2a -data8 0x94b1523e3dedc630, 0xed851eaa3168f43c -data8 0x3fd87773cff956e0, 0x3cda3b7bce6a6b16 -data8 0x95334fc20577563f, 0xed1d8ffaa2279669 -data8 0x3fd8bc7d93a70440, 0x3cd4922edc792ce2 -data8 0x95b78f8e8f92f274, 0xecb4bf1fd2be72da -data8 0x3fd901a5b3b9cf40, 0x3cd3fea1b00f9d0d -data8 0x963e1b4e63a87c3f, 0xec4aaa6d08694cc1 -data8 0x3fd946eca98f2700, 0x3cdba4032d968ff1 -data8 0x96c6fcef314074fc, 0xebdf502d53d65fea -data8 0x3fd98c52f024e800, 0x3cbe7be1ab8c95c9 -data8 0x97523ea3eab028b2, 0xeb72aea36720793e -data8 0x3fd9d1d904239860, 0x3cd72d08a6a22b70 -data8 0x97dfeae6f4ee4a9a, 0xeb04c4096a884e94 -data8 0x3fda177f63e8ef00, 0x3cd818c3c1ebfac7 -data8 0x98700c7c6d85d119, 0xea958e90cfe1efd7 -data8 0x3fda5d468f92a540, 0x3cdf45fbfaa080fe -data8 0x9902ae7487a9caa1, 0xea250c6224aab21a -data8 0x3fdaa32f090998e0, 0x3cd715a9353cede4 -data8 0x9997dc2e017a9550, 0xe9b33b9ce2bb7638 -data8 0x3fdae939540d3f00, 0x3cc545c014943439 -data8 0x9a2fa158b29b649b, 0xe9401a573f8aa706 -data8 0x3fdb2f65f63f6c60, 0x3cd4a63c2f2ca8e2 -data8 0x9aca09f835466186, 0xe8cba69df9f0bf35 -data8 0x3fdb75b5773075e0, 0x3cda310ce1b217ec -data8 0x9b672266ab1e0136, 0xe855de74266193d4 -data8 0x3fdbbc28606babc0, 0x3cdc84b75cca6c44 -data8 0x9c06f7579f0b7bd5, 0xe7debfd2f98c060b -data8 0x3fdc02bf3d843420, 0x3cd225d967ffb922 -data8 0x9ca995db058cabdc, 0xe76648a991511c6e -data8 0x3fdc497a9c224780, 0x3cde08101c5b825b -data8 0x9d4f0b605ce71e88, 0xe6ec76dcbc02d9a7 -data8 0x3fdc905b0c10d420, 0x3cb1abbaa3edf120 -data8 0x9df765b9eecad5e6, 0xe6714846bdda7318 -data8 0x3fdcd7611f4b8a00, 0x3cbf6217ae80aadf -data8 0x9ea2b320350540fe, 0xe5f4bab71494cd6b -data8 0x3fdd1e8d6a0d56c0, 0x3cb726e048cc235c -data8 0x9f51023562fc5676, 0xe576cbf239235ecb -data8 0x3fdd65e082df5260, 0x3cd9e66872bd5250 -data8 0xa002620915c2a2f6, 0xe4f779b15f5ec5a7 -data8 0x3fddad5b02a82420, 0x3c89743b0b57534b -data8 0xa0b6e21c2caf9992, 0xe476c1a233a7873e -data8 0x3fddf4fd84bbe160, 0x3cbf7adea9ee3338 -data8 0xa16e9264cc83a6b2, 0xe3f4a16696608191 -data8 0x3fde3cc8a6ec6ee0, 0x3cce46f5a51f49c6 -data8 0xa22983528f3d8d49, 0xe3711694552da8a8 -data8 0x3fde84bd099a6600, 0x3cdc78f6490a2d31 -data8 0xa2e7c5d2e2e69460, 0xe2ec1eb4e1e0a5fb -data8 0x3fdeccdb4fc685c0, 0x3cdd3aedb56a4825 -data8 0xa3a96b5599bd2532, 0xe265b74506fbe1c9 -data8 0x3fdf15241f23b3e0, 0x3cd440f3c6d65f65 -data8 0xa46e85d1ae49d7de, 0xe1ddddb499b3606f -data8 0x3fdf5d98202994a0, 0x3cd6c44bd3fb745a -data8 0xa53727ca3e11b99e, 0xe1548f662951b00d -data8 0x3fdfa637fe27bf60, 0x3ca8ad1cd33054dd -data8 0xa6036453bdc20186, 0xe0c9c9aeabe5e481 -data8 0x3fdfef0467599580, 0x3cc0f1ac0685d78a -data8 0xa6d34f1969dda338, 0xe03d89d5281e4f81 -data8 0x3fe01bff067d6220, 0x3cc0731e8a9ef057 -data8 0xa7a6fc62f7246ff3, 0xdfafcd125c323f54 -data8 0x3fe04092d1ae3b40, 0x3ccabda24b59906d -data8 0xa87e811a861df9b9, 0xdf20909061bb9760 -data8 0x3fe0653df0fd9fc0, 0x3ce94c8dcc722278 -data8 0xa959f2d2dd687200, 0xde8fd16a4e5f88bd -data8 0x3fe08a00c1cae320, 0x3ce6b888bb60a274 -data8 0xaa3967cdeea58bda, 0xddfd8cabd1240d22 -data8 0x3fe0aedba3221c00, 0x3ced5941cd486e46 -data8 0xab904fd587263c84, 0xdd1f4472e1cf64ed -data8 0x3fe0e651e85229c0, 0x3cdb6701042299b1 -data8 0xad686d44dd5a74bb, 0xdbf173e1f6b46e92 -data8 0x3fe1309cbf4cdb20, 0x3cbf1be7bb3f0ec5 -data8 0xaf524e15640ebee4, 0xdabd54896f1029f6 -data8 0x3fe17b4ee1641300, 0x3ce81dd055b792f1 -data8 0xb14eca24ef7db3fa, 0xd982cb9ae2f47e41 -data8 0x3fe1c66b9ffd6660, 0x3cd98ea31eb5ddc7 -data8 0xb35ec807669920ce, 0xd841bd1b8291d0b6 -data8 0x3fe211f66db3a5a0, 0x3ca480c35a27b4a2 -data8 0xb5833e4755e04dd1, 0xd6fa0bd3150b6930 -data8 0x3fe25df2e05b6c40, 0x3ca4bc324287a351 -data8 0xb7bd34c8000b7bd3, 0xd5ab9939a7d23aa1 -data8 0x3fe2aa64b32f7780, 0x3cba67314933077c -data8 0xba0dc64d126cc135, 0xd4564563ce924481 -data8 0x3fe2f74fc9289ac0, 0x3cec1a1dc0efc5ec -data8 0xbc76222cbbfa74a6, 0xd2f9eeed501125a8 -data8 0x3fe344b82f859ac0, 0x3ceeef218de413ac -data8 0xbef78e31985291a9, 0xd19672e2182f78be -data8 0x3fe392a22087b7e0, 0x3cd2619ba201204c -data8 0xc19368b2b0629572, 0xd02baca5427e436a -data8 0x3fe3e11206694520, 0x3cb5d0b3143fe689 -data8 0xc44b2ae8c6733e51, 0xceb975d60b6eae5d -data8 0x3fe4300c7e945020, 0x3cbd367143da6582 -data8 0xc7206b894212dfef, 0xcd3fa6326ff0ac9a -data8 0x3fe47f965d201d60, 0x3ce797c7a4ec1d63 -data8 0xca14e1b0622de526, 0xcbbe13773c3c5338 -data8 0x3fe4cfb4b09d1a20, 0x3cedfadb5347143c -data8 0xcd2a6825eae65f82, 0xca34913d425a5ae9 -data8 0x3fe5206cc637e000, 0x3ce2798b38e54193 -data8 0xd06301095e1351ee, 0xc8a2f0d3679c08c0 -data8 0x3fe571c42e3d0be0, 0x3ccd7cb9c6c2ca68 -data8 0xd3c0d9f50057adda, 0xc70901152d59d16b -data8 0x3fe5c3c0c108f940, 0x3ceb6c13563180ab -data8 0xd74650a98cc14789, 0xc5668e3d4cbf8828 -data8 0x3fe61668a46ffa80, 0x3caa9092e9e3c0e5 -data8 0xdaf5f8579dcc8f8f, 0xc3bb61b3eed42d02 -data8 0x3fe669c251ad69e0, 0x3cccf896ef3b4fee -data8 0xded29f9f9a6171b4, 0xc20741d7f8e8e8af -data8 0x3fe6bdd49bea05c0, 0x3cdc6b29937c575d -data8 0xe2df5765854ccdb0, 0xc049f1c2d1b8014b -data8 0x3fe712a6b76c6e80, 0x3ce1ddc6f2922321 -data8 0xe71f7a9b94fcb4c3, 0xbe833105ec291e91 -data8 0x3fe76840418978a0, 0x3ccda46e85432c3d -data8 0xeb96b72d3374b91e, 0xbcb2bb61493b28b3 -data8 0x3fe7bea9496d5a40, 0x3ce37b42ec6e17d3 -data8 0xf049183c3f53c39b, 0xbad848720223d3a8 -data8 0x3fe815ea59dab0a0, 0x3cb03ad41bfc415b -data8 0xf53b11ec7f415f15, 0xb8f38b57c53c9c48 -data8 0x3fe86e0c84010760, 0x3cc03bfcfb17fe1f -data8 0xfa718f05adbf2c33, 0xb70432500286b185 -data8 0x3fe8c7196b9225c0, 0x3ced99fcc6866ba9 -data8 0xfff200c3f5489608, 0xb509e6454dca33cc -data8 0x3fe9211b54441080, 0x3cb789cb53515688 -// The following table entries are not used -//data8 0x82e138a0fac48700, 0xb3044a513a8e6132 -//data8 0x3fe97c1d30f5b7c0, 0x3ce1eb765612d1d0 -//data8 0x85f4cc7fc670d021, 0xb0f2fb2ea6cbbc88 -//data8 0x3fe9d82ab4b5fde0, 0x3ced3fe6f27e8039 -//data8 0x89377c1387d5b908, 0xaed58e9a09014d5c -//data8 0x3fea355065f87fa0, 0x3cbef481d25f5b58 -//data8 0x8cad7a2c98dec333, 0xacab929ce114d451 -//data8 0x3fea939bb451e2a0, 0x3c8e92b4fbf4560f -//data8 0x905b7dfc99583025, 0xaa748cc0dbbbc0ec -//data8 0x3feaf31b11270220, 0x3cdced8c61bd7bd5 -//data8 0x9446d8191f80dd42, 0xa82ff92687235baf -//data8 0x3feb53de0bcffc20, 0x3cbe1722fb47509e -//data8 0x98758ba086e4000a, 0xa5dd497a9c184f58 -//data8 0x3febb5f571cb0560, 0x3ce0c7774329a613 -//data8 0x9cee6c7bf18e4e24, 0xa37be3c3cd1de51b -//data8 0x3fec197373bc7be0, 0x3ce08ebdb55c3177 -//data8 0xa1b944000a1b9440, 0xa10b2101b4f27e03 -//data8 0x3fec7e6bd023da60, 0x3ce5fc5fd4995959 -//data8 0xa6defd8ba04d3e38, 0x9e8a4b93cad088ec -//data8 0x3fece4f404e29b20, 0x3cea3413401132b5 -//data8 0xac69dd408a10c62d, 0x9bf89d5d17ddae8c -//data8 0x3fed4d2388f63600, 0x3cd5a7fb0d1d4276 -//data8 0xb265c39cbd80f97a, 0x99553d969fec7beb -//data8 0x3fedb714101e0a00, 0x3cdbda21f01193f2 -//data8 0xb8e081a16ae4ae73, 0x969f3e3ed2a0516c -//data8 0x3fee22e1da97bb00, 0x3ce7231177f85f71 -//data8 0xbfea427678945732, 0x93d5990f9ee787af -//data8 0x3fee90ac13b18220, 0x3ce3c8a5453363a5 -//data8 0xc79611399b8c90c5, 0x90f72bde80febc31 -//data8 0x3fef009542b712e0, 0x3ce218fd79e8cb56 -//data8 0xcffa8425040624d7, 0x8e02b4418574ebed -//data8 0x3fef72c3d2c57520, 0x3cd32a717f82203f -//data8 0xd93299cddcf9cf23, 0x8af6ca48e9c44024 -//data8 0x3fefe762b77744c0, 0x3ce53478a6bbcf94 -//data8 0xe35eda760af69ad9, 0x87d1da0d7f45678b -//data8 0x3ff02f511b223c00, 0x3ced6e11782c28fc -//data8 0xeea6d733421da0a6, 0x84921bbe64ae029a -//data8 0x3ff06c5c6f8ce9c0, 0x3ce71fc71c1ffc02 -//data8 0xfb3b2c73fc6195cc, 0x813589ba3a5651b6 -//data8 0x3ff0aaf2613700a0, 0x3cf2a72d2fd94ef3 -//data8 0x84ac1fcec4203245, 0xfb73a828893df19e -//data8 0x3ff0eb367c3fd600, 0x3cf8054c158610de -//data8 0x8ca50621110c60e6, 0xf438a14c158d867c -//data8 0x3ff12d51caa6b580, 0x3ce6bce9748739b6 -//data8 0x95b8c2062d6f8161, 0xecb3ccdd37b369da -//data8 0x3ff1717418520340, 0x3ca5c2732533177c -//data8 0xa0262917caab4ad1, 0xe4dde4ddc81fd119 -//data8 0x3ff1b7d59dd40ba0, 0x3cc4c7c98e870ff5 -//data8 0xac402c688b72f3f4, 0xdcae469be46d4c8d -//data8 0x3ff200b93cc5a540, 0x3c8dd6dc1bfe865a -//data8 0xba76968b9eabd9ab, 0xd41a8f3df1115f7f -//data8 0x3ff24c6f8f6affa0, 0x3cf1acb6d2a7eff7 -//data8 0xcb63c87c23a71dc5, 0xcb161074c17f54ec -//data8 0x3ff29b5b338b7c80, 0x3ce9b5845f6ec746 -//data8 0xdfe323b8653af367, 0xc19107d99ab27e42 -//data8 0x3ff2edf6fac7f5a0, 0x3cf77f961925fa02 -//data8 0xf93746caaba3e1f1, 0xb777744a9df03bff -//data8 0x3ff344df237486c0, 0x3cf6ddf5f6ddda43 -//data8 0x8ca77052f6c340f0, 0xacaf476f13806648 -//data8 0x3ff3a0dfa4bb4ae0, 0x3cfee01bbd761bff -//data8 0xa1a48604a81d5c62, 0xa11575d30c0aae50 -//data8 0x3ff4030b73c55360, 0x3cf1cf0e0324d37c -//data8 0xbe45074b05579024, 0x9478e362a07dd287 -//data8 0x3ff46ce4c738c4e0, 0x3ce3179555367d12 -//data8 0xe7a08b5693d214ec, 0x8690e3575b8a7c3b -//data8 0x3ff4e0a887c40a80, 0x3cfbd5d46bfefe69 -//data8 0x94503d69396d91c7, 0xedd2ce885ff04028 -//data8 0x3ff561ebd9c18cc0, 0x3cf331bd176b233b -//data8 0xced1d96c5bb209e6, 0xc965278083808702 -//data8 0x3ff5f71d7ff42c80, 0x3ce3301cc0b5a48c -//data8 0xabac2cee0fc24e20, 0x9c4eb1136094cbbd -//data8 0x3ff6ae4c63222720, 0x3cf5ff46874ee51e -//data8 0x8040201008040201, 0xb4d7ac4d9acb1bf4 -//data8 0x3ff7b7d33b928c40, 0x3cfacdee584023bb -LOCAL_OBJECT_END(T_table) - - - -.align 16 - -LOCAL_OBJECT_START(poly_coeffs) - // C_3 -data8 0xaaaaaaaaaaaaaaab, 0x0000000000003ffc - // C_5 -data8 0x999999999999999a, 0x0000000000003ffb - // C_7, C_9 -data8 0x3fa6db6db6db6db7, 0x3f9f1c71c71c71c8 - // pi/2 (low, high) -data8 0x3C91A62633145C07, 0x3FF921FB54442D18 - // C_11, C_13 -data8 0x3f96e8ba2e8ba2e9, 0x3f91c4ec4ec4ec4e - // C_15, C_17 -data8 0x3f8c99999999999a, 0x3f87a87878787223 - // pi (low, high) -data8 0x3CA1A62633145C07, 0x400921FB54442D18 -LOCAL_OBJECT_END(poly_coeffs) - - -R_DBL_S = r21 -R_EXP0 = r22 -R_EXP = r15 -R_SGNMASK = r23 -R_TMP = r24 -R_TMP2 = r25 -R_INDEX = r26 -R_TMP3 = r27 -R_TMP03 = r27 -R_TMP4 = r28 -R_TMP5 = r23 -R_TMP6 = r22 -R_TMP7 = r21 -R_T = r29 -R_BIAS = r20 - -F_T = f6 -F_1S2 = f7 -F_1S2_S = f9 -F_INV_1T2 = f10 -F_SQRT_1T2 = f11 -F_S2T2 = f12 -F_X = f13 -F_D = f14 -F_2M64 = f15 - -F_CS2 = f32 -F_CS3 = f33 -F_CS4 = f34 -F_CS5 = f35 -F_CS6 = f36 -F_CS7 = f37 -F_CS8 = f38 -F_CS9 = f39 -F_S23 = f40 -F_S45 = f41 -F_S67 = f42 -F_S89 = f43 -F_S25 = f44 -F_S69 = f45 -F_S29 = f46 -F_X2 = f47 -F_X4 = f48 -F_TSQRT = f49 -F_DTX = f50 -F_R = f51 -F_R2 = f52 -F_R3 = f53 -F_R4 = f54 - -F_C3 = f55 -F_C5 = f56 -F_C7 = f57 -F_C9 = f58 -F_P79 = f59 -F_P35 = f60 -F_P39 = f61 - -F_ATHI = f62 -F_ATLO = f63 - -F_T1 = f64 -F_Y = f65 -F_Y2 = f66 -F_ANDMASK = f67 -F_ORMASK = f68 -F_S = f69 -F_05 = f70 -F_SQRT_1S2 = f71 -F_DS = f72 -F_Z = f73 -F_1T2 = f74 -F_DZ = f75 -F_ZE = f76 -F_YZ = f77 -F_Y1S2 = f78 -F_Y1S2X = f79 -F_1X = f80 -F_ST = f81 -F_1T2_ST = f82 -F_TSS = f83 -F_Y1S2X2 = f84 -F_DZ_TERM = f85 -F_DTS = f86 -F_DS2X = f87 -F_T2 = f88 -F_ZY1S2S = f89 -F_Y1S2_1X = f90 -F_TS = f91 -F_PI2_LO = f92 -F_PI2_HI = f93 -F_S19 = f94 -F_INV1T2_2 = f95 -F_CORR = f96 -F_DZ0 = f97 - -F_C11 = f98 -F_C13 = f99 -F_C15 = f100 -F_C17 = f101 -F_P1113 = f102 -F_P1517 = f103 -F_P1117 = f104 -F_P317 = f105 -F_R8 = f106 -F_HI = f107 -F_1S2_HI = f108 -F_DS2 = f109 -F_Y2_2 = f110 -//F_S2 = f111 -//F_S_DS2 = f112 -F_S_1S2S = f113 -F_XL = f114 -F_2M128 = f115 -F_1AS = f116 -F_AS = f117 - - - -.section .text -GLOBAL_LIBM_ENTRY(acosl) - -{.mfi - // get exponent, mantissa (rounded to double precision) of s - getf.d R_DBL_S = f8 - // 1-s^2 - fnma.s1 F_1S2 = f8, f8, f1 - // r2 = pointer to T_table - addl r2 = @ltoff(T_table), gp -} - -{.mfi - // sign mask - mov R_SGNMASK = 0x20000 - nop.f 0 - // bias-63-1 - mov R_TMP03 = 0xffff-64;; -} - - -{.mfi - // get exponent of s - getf.exp R_EXP = f8 - nop.f 0 - // R_TMP4 = 2^45 - shl R_TMP4 = R_SGNMASK, 45-17 -} - -{.mlx - // load bias-4 - mov R_TMP = 0xffff-4 - // load RU(sqrt(2)/2) to integer register (in double format, shifted left by 1) - movl R_TMP2 = 0x7fcd413cccfe779a;; -} - - -{.mfi - // load 2^{-64} in FP register - setf.exp F_2M64 = R_TMP03 - nop.f 0 - // index = (0x7-exponent)|b1 b2.. b6 - extr.u R_INDEX = R_DBL_S, 46, 9 -} - -{.mfi - // get t = sign|exponent|b1 b2.. b6 1 x.. x - or R_T = R_DBL_S, R_TMP4 - nop.f 0 - // R_TMP4 = 2^45-1 - sub R_TMP4 = R_TMP4, r0, 1;; -} - - -{.mfi - // get t = sign|exponent|b1 b2.. b6 1 0.. 0 - andcm R_T = R_T, R_TMP4 - nop.f 0 - // eliminate sign from R_DBL_S (shift left by 1) - shl R_TMP3 = R_DBL_S, 1 -} - -{.mfi - // R_BIAS = 3*2^6 - mov R_BIAS = 0xc0 - nop.f 0 - // eliminate sign from R_EXP - andcm R_EXP0 = R_EXP, R_SGNMASK;; -} - - - -{.mfi - // load start address for T_table - ld8 r2 = [r2] - nop.f 0 - // p8 = 1 if |s|> = sqrt(2)/2 - cmp.geu p8, p0 = R_TMP3, R_TMP2 -} - -{.mlx - // p7 = 1 if |s|<2^{-4} (exponent of s = sqrt(2)/2, take alternate path - (p8) br.cond.sptk LARGE_S -} - -{.mlx - // index = (4-exponent)|b1 b2.. b6 - sub R_INDEX = R_INDEX, R_BIAS - // sqrt coefficient cs9 = 55*13/128 - movl R_TMP = 0x40b2c000;; -} - - -{.mfi - // sqrt coefficient cs8 = -33*13/128 - setf.s F_CS8 = R_TMP2 - nop.f 0 - // shift R_INDEX by 5 - shl R_INDEX = R_INDEX, 5 -} - -{.mfi - // sqrt coefficient cs3 = 0.5 (set exponent = bias-1) - mov R_TMP4 = 0xffff - 1 - nop.f 0 - // sqrt coefficient cs6 = -21/16 - mov R_TMP6 = 0xbfa8;; -} - - -{.mlx - // table index - add r2 = r2, R_INDEX - // sqrt coefficient cs7 = 33/16 - movl R_TMP2 = 0x40040000;; -} - - -{.mmi - // load cs9 = 55*13/128 - setf.s F_CS9 = R_TMP - // sqrt coefficient cs5 = 7/8 - mov R_TMP3 = 0x3f60 - // sqrt coefficient cs6 = 21/16 - shl R_TMP6 = R_TMP6, 16;; -} - - -{.mmi - // load significand of 1/(1-t^2) - ldf8 F_INV_1T2 = [r2], 8 - // sqrt coefficient cs7 = 33/16 - setf.s F_CS7 = R_TMP2 - // sqrt coefficient cs4 = -5/8 - mov R_TMP5 = 0xbf20;; -} - - -{.mmi - // load significand of sqrt(1-t^2) - ldf8 F_SQRT_1T2 = [r2], 8 - // sqrt coefficient cs6 = 21/16 - setf.s F_CS6 = R_TMP6 - // sqrt coefficient cs5 = 7/8 - shl R_TMP3 = R_TMP3, 16;; -} - - -{.mmi - // sqrt coefficient cs3 = 0.5 (set exponent = bias-1) - setf.exp F_CS3 = R_TMP4 - // r3 = pointer to polynomial coefficients - addl r3 = @ltoff(poly_coeffs), gp - // sqrt coefficient cs4 = -5/8 - shl R_TMP5 = R_TMP5, 16;; -} - - -{.mfi - // sqrt coefficient cs5 = 7/8 - setf.s F_CS5 = R_TMP3 - // d = s-t - fms.s1 F_D = f8, f1, F_T - // set p6 = 1 if s<0, p11 = 1 if s> = 0 - cmp.ge p6, p11 = R_EXP, R_DBL_S -} - -{.mfi - // r3 = load start address to polynomial coefficients - ld8 r3 = [r3] - // s+t - fma.s1 F_S2T2 = f8, f1, F_T - nop.i 0;; -} - - -{.mfi - // sqrt coefficient cs4 = -5/8 - setf.s F_CS4 = R_TMP5 - // s^2-t^2 - fma.s1 F_S2T2 = F_S2T2, F_D, f0 - nop.i 0;; -} - - -{.mfi - // load C3 - ldfe F_C3 = [r3], 16 - // 0.5/(1-t^2) = 2^{-64}*(2^63/(1-t^2)) - fma.s1 F_INV_1T2 = F_INV_1T2, F_2M64, f0 - nop.i 0;; -} - -{.mfi - // load C_5 - ldfe F_C5 = [r3], 16 - // set correct exponent for sqrt(1-t^2) - fma.s1 F_SQRT_1T2 = F_SQRT_1T2, F_2M64, f0 - nop.i 0;; -} - - -{.mfi - // load C_7, C_9 - ldfpd F_C7, F_C9 = [r3], 16 - // x = -(s^2-t^2)/(1-t^2)/2 - fnma.s1 F_X = F_INV_1T2, F_S2T2, f0 - nop.i 0;; -} - - -{.mmf - // load asin(t)_high, asin(t)_low - ldfpd F_ATHI, F_ATLO = [r2] - // load pi/2 - ldfpd F_PI2_LO, F_PI2_HI = [r3] - // t*sqrt(1-t^2) - fma.s1 F_TSQRT = F_T, F_SQRT_1T2, f0;; -} - - -{.mfi - nop.m 0 - // cs9*x+cs8 - fma.s1 F_S89 = F_CS9, F_X, F_CS8 - nop.i 0 -} - -{.mfi - nop.m 0 - // cs7*x+cs6 - fma.s1 F_S67 = F_CS7, F_X, F_CS6 - nop.i 0;; -} - -{.mfi - nop.m 0 - // cs5*x+cs4 - fma.s1 F_S45 = F_CS5, F_X, F_CS4 - nop.i 0 -} - -{.mfi - nop.m 0 - // x*x - fma.s1 F_X2 = F_X, F_X, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (s-t)-t*x - fnma.s1 F_DTX = F_T, F_X, F_D - nop.i 0 -} - -{.mfi - nop.m 0 - // cs3*x+cs2 (cs2 = -0.5 = -cs3) - fms.s1 F_S23 = F_CS3, F_X, F_CS3 - nop.i 0;; -} - -{.mfi - nop.m 0 - // if sign is negative, negate table values: asin(t)_low - (p6) fnma.s1 F_ATLO = F_ATLO, f1, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // if sign is negative, negate table values: asin(t)_high - (p6) fnma.s1 F_ATHI = F_ATHI, f1, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // cs9*x^3+cs8*x^2+cs7*x+cs6 - fma.s1 F_S69 = F_S89, F_X2, F_S67 - nop.i 0 -} - -{.mfi - nop.m 0 - // x^4 - fma.s1 F_X4 = F_X2, F_X2, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // t*sqrt(1-t^2)*x^2 - fma.s1 F_TSQRT = F_TSQRT, F_X2, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // cs5*x^3+cs4*x^2+cs3*x+cs2 - fma.s1 F_S25 = F_S45, F_X2, F_S23 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // ((s-t)-t*x)*sqrt(1-t^2) - fma.s1 F_DTX = F_DTX, F_SQRT_1T2, f0 - nop.i 0;; -} - -{.mfi - nop.m 0 - // (pi/2)_high - asin(t)_high - fnma.s1 F_ATHI = F_ATHI, f1, F_PI2_HI - nop.i 0 -} - -{.mfi - nop.m 0 - // asin(t)_low - (pi/2)_low - fnma.s1 F_ATLO = F_PI2_LO, f1, F_ATLO - nop.i 0;; -} - - -{.mfi - nop.m 0 - // PS29 = cs9*x^7+..+cs5*x^3+cs4*x^2+cs3*x+cs2 - fma.s1 F_S29 = F_S69, F_X4, F_S25 - nop.i 0;; -} - - - -{.mfi - nop.m 0 - // R = ((s-t)-t*x)*sqrt(1-t^2)-t*sqrt(1-t^2)*x^2*PS29 - fnma.s1 F_R = F_S29, F_TSQRT, F_DTX - nop.i 0;; -} - - -{.mfi - nop.m 0 - // R^2 - fma.s1 F_R2 = F_R, F_R, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // c7+c9*R^2 - fma.s1 F_P79 = F_C9, F_R2, F_C7 - nop.i 0 -} - -{.mfi - nop.m 0 - // c3+c5*R^2 - fma.s1 F_P35 = F_C5, F_R2, F_C3 - nop.i 0;; -} - -{.mfi - nop.m 0 - // R^3 - fma.s1 F_R4 = F_R2, F_R2, f0 - nop.i 0;; -} - -{.mfi - nop.m 0 - // R^3 - fma.s1 F_R3 = F_R2, F_R, f0 - nop.i 0;; -} - - - -{.mfi - nop.m 0 - // c3+c5*R^2+c7*R^4+c9*R^6 - fma.s1 F_P39 = F_P79, F_R4, F_P35 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // asin(t)_low+R^3*(c3+c5*R^2+c7*R^4+c9*R^6) - fma.s1 F_P39 = F_P39, F_R3, F_ATLO - nop.i 0;; -} - - -{.mfi - nop.m 0 - // R+asin(t)_low+R^3*(c3+c5*R^2+c7*R^4+c9*R^6) - fma.s1 F_P39 = F_P39, f1, F_R - nop.i 0;; -} - - -{.mfb - nop.m 0 - // result = (pi/2)-asin(t)_high+R+asin(t)_low+R^3*(c3+c5*R^2+c7*R^4+c9*R^6) - fnma.s0 f8 = F_P39, f1, F_ATHI - // return - br.ret.sptk b0;; -} - - - - -LARGE_S: - -{.mfi - // bias-1 - mov R_TMP3 = 0xffff - 1 - // y ~ 1/sqrt(1-s^2) - frsqrta.s1 F_Y, p7 = F_1S2 - // c9 = 55*13*17/128 - mov R_TMP4 = 0x10af7b -} - -{.mlx - // c8 = -33*13*15/128 - mov R_TMP5 = 0x184923 - movl R_TMP2 = 0xff00000000000000;; -} - -{.mfi - // set p6 = 1 if s<0, p11 = 1 if s>0 - cmp.ge p6, p11 = R_EXP, R_DBL_S - // 1-s^2 - fnma.s1 F_1S2 = f8, f8, f1 - // set p9 = 1 - cmp.eq p9, p0 = r0, r0;; -} - - -{.mfi - // load 0.5 - setf.exp F_05 = R_TMP3 - // (1-s^2) rounded to single precision - fnma.s.s1 F_1S2_S = f8, f8, f1 - // c9 = 55*13*17/128 - shl R_TMP4 = R_TMP4, 10 -} - -{.mlx - // AND mask for getting t ~ sqrt(1-s^2) - setf.sig F_ANDMASK = R_TMP2 - // OR mask - movl R_TMP2 = 0x0100000000000000;; -} - -.pred.rel "mutex", p6, p11 -{.mfi - nop.m 0 - // 1-|s| - (p6) fma.s1 F_1AS = f8, f1, f1 - nop.i 0 -} - -{.mfi - nop.m 0 - // 1-|s| - (p11) fnma.s1 F_1AS = f8, f1, f1 - nop.i 0;; -} - - -{.mfi - // c9 = 55*13*17/128 - setf.s F_CS9 = R_TMP4 - // |s| - (p6) fnma.s1 F_AS = f8, f1, f0 - // c8 = -33*13*15/128 - shl R_TMP5 = R_TMP5, 11 -} - -{.mfi - // c7 = 33*13/16 - mov R_TMP4 = 0x41d68 - // |s| - (p11) fma.s1 F_AS = f8, f1, f0 - nop.i 0;; -} - - -{.mfi - setf.sig F_ORMASK = R_TMP2 - // y^2 - fma.s1 F_Y2 = F_Y, F_Y, f0 - // c7 = 33*13/16 - shl R_TMP4 = R_TMP4, 12 -} - -{.mfi - // c6 = -33*7/16 - mov R_TMP6 = 0xc1670 - // y' ~ sqrt(1-s^2) - fma.s1 F_T1 = F_Y, F_1S2, f0 - // c5 = 63/8 - mov R_TMP7 = 0x40fc;; -} - - -{.mlx - // load c8 = -33*13*15/128 - setf.s F_CS8 = R_TMP5 - // c4 = -35/8 - movl R_TMP5 = 0xc08c0000;; -} - -{.mfi - // r3 = pointer to polynomial coefficients - addl r3 = @ltoff(poly_coeffs), gp - // 1-s-(1-s^2)_s - fnma.s1 F_DS = F_1S2_S, f1, F_1AS - // p9 = 0 if p7 = 1 (p9 = 1 for special cases only) - (p7) cmp.ne p9, p0 = r0, r0 -} - -{.mlx - // load c7 = 33*13/16 - setf.s F_CS7 = R_TMP4 - // c3 = 5/2 - movl R_TMP4 = 0x40200000;; -} - - -{.mlx - // load c4 = -35/8 - setf.s F_CS4 = R_TMP5 - // c2 = -3/2 - movl R_TMP5 = 0xbfc00000;; -} - - -{.mfi - // load c3 = 5/2 - setf.s F_CS3 = R_TMP4 - // x = (1-s^2)_s*y^2-1 - fms.s1 F_X = F_1S2_S, F_Y2, f1 - // c6 = -33*7/16 - shl R_TMP6 = R_TMP6, 12 -} - -{.mfi - nop.m 0 - // y^2/2 - fma.s1 F_Y2_2 = F_Y2, F_05, f0 - nop.i 0;; -} - - -{.mfi - // load c6 = -33*7/16 - setf.s F_CS6 = R_TMP6 - // eliminate lower bits from y' - fand F_T = F_T1, F_ANDMASK - // c5 = 63/8 - shl R_TMP7 = R_TMP7, 16 -} - - -{.mfb - // r3 = load start address to polynomial coefficients - ld8 r3 = [r3] - // 1-(1-s^2)_s-s^2 - fma.s1 F_DS = F_AS, F_1AS, F_DS - // p9 = 1 if s is a special input (NaN, or |s|> = 1) - (p9) br.cond.spnt acosl_SPECIAL_CASES;; -} - -{.mmf - // get exponent, significand of y' (in single prec.) - getf.s R_TMP = F_T1 - // load c3 = -3/2 - setf.s F_CS2 = R_TMP5 - // y*(1-s^2) - fma.s1 F_Y1S2 = F_Y, F_1S2, f0;; -} - - - -{.mfi - nop.m 0 - // if s<0, set s = -s - (p6) fnma.s1 f8 = f8, f1, f0 - nop.i 0;; -} - - -{.mfi - // load c5 = 63/8 - setf.s F_CS5 = R_TMP7 - // x = (1-s^2)_s*y^2-1+(1-(1-s^2)_s-s^2)*y^2 - fma.s1 F_X = F_DS, F_Y2, F_X - // for t = 2^k*1.b1 b2.., get 7-k|b1.. b6 - extr.u R_INDEX = R_TMP, 17, 9;; -} - - -{.mmi - // index = (4-exponent)|b1 b2.. b6 - sub R_INDEX = R_INDEX, R_BIAS - nop.m 0 - // get exponent of y - shr.u R_TMP2 = R_TMP, 23;; -} - -{.mmi - // load C3 - ldfe F_C3 = [r3], 16 - // set p8 = 1 if y'<2^{-4} - cmp.gt p8, p0 = 0x7b, R_TMP2 - // shift R_INDEX by 5 - shl R_INDEX = R_INDEX, 5;; -} - - -{.mfb - // get table index for sqrt(1-t^2) - add r2 = r2, R_INDEX - // get t = 2^k*1.b1 b2.. b7 1 - for F_T = F_T, F_ORMASK - (p8) br.cond.spnt VERY_LARGE_INPUT;; -} - - - -{.mmf - // load C5 - ldfe F_C5 = [r3], 16 - // load 1/(1-t^2) - ldfp8 F_INV_1T2, F_SQRT_1T2 = [r2], 16 - // x = ((1-s^2)*y^2-1)/2 - fma.s1 F_X = F_X, F_05, f0;; -} - - - -{.mmf - nop.m 0 - // C7, C9 - ldfpd F_C7, F_C9 = [r3], 16 - // set correct exponent for t - fmerge.se F_T = F_T1, F_T;; -} - - - -{.mfi - // get address for loading pi - add r3 = 48, r3 - // c9*x+c8 - fma.s1 F_S89 = F_X, F_CS9, F_CS8 - nop.i 0 -} - -{.mfi - nop.m 0 - // x^2 - fma.s1 F_X2 = F_X, F_X, f0 - nop.i 0;; -} - - -{.mfi - // pi (low, high) - ldfpd F_PI2_LO, F_PI2_HI = [r3] - // y*(1-s^2)*x - fma.s1 F_Y1S2X = F_Y1S2, F_X, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // c7*x+c6 - fma.s1 F_S67 = F_X, F_CS7, F_CS6 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // 1-x - fnma.s1 F_1X = F_X, f1, f1 - nop.i 0 -} - -{.mfi - nop.m 0 - // c3*x+c2 - fma.s1 F_S23 = F_X, F_CS3, F_CS2 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // 1-t^2 - fnma.s1 F_1T2 = F_T, F_T, f1 - nop.i 0 -} - -{.mfi - // load asin(t)_high, asin(t)_low - ldfpd F_ATHI, F_ATLO = [r2] - // c5*x+c4 - fma.s1 F_S45 = F_X, F_CS5, F_CS4 - nop.i 0;; -} - - - -{.mfi - nop.m 0 - // t*s - fma.s1 F_TS = F_T, f8, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // 0.5/(1-t^2) - fma.s1 F_INV_1T2 = F_INV_1T2, F_2M64, f0 - nop.i 0;; -} - -{.mfi - nop.m 0 - // z~sqrt(1-t^2), rounded to 24 significant bits - fma.s.s1 F_Z = F_SQRT_1T2, F_2M64, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // sqrt(1-t^2) - fma.s1 F_SQRT_1T2 = F_SQRT_1T2, F_2M64, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // y*(1-s^2)*x^2 - fma.s1 F_Y1S2X2 = F_Y1S2, F_X2, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // x^4 - fma.s1 F_X4 = F_X2, F_X2, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // s*t rounded to 24 significant bits - fma.s.s1 F_TSS = F_T, f8, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // c9*x^3+..+c6 - fma.s1 F_S69 = F_X2, F_S89, F_S67 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // ST = (t^2-1+s^2) rounded to 24 significant bits - fms.s.s1 F_ST = f8, f8, F_1T2 - nop.i 0 -} - -{.mfi - nop.m 0 - // c5*x^3+..+c2 - fma.s1 F_S25 = F_X2, F_S45, F_S23 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // 0.25/(1-t^2) - fma.s1 F_INV1T2_2 = F_05, F_INV_1T2, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // t*s-sqrt(1-t^2)*(1-s^2)*y - fnma.s1 F_TS = F_Y1S2, F_SQRT_1T2, F_TS - nop.i 0;; -} - - -{.mfi - nop.m 0 - // z*0.5/(1-t^2) - fma.s1 F_ZE = F_INV_1T2, F_SQRT_1T2, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // z^2+t^2-1 - fms.s1 F_DZ0 = F_Z, F_Z, F_1T2 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (1-s^2-(1-s^2)_s)*x - fma.s1 F_DS2X = F_X, F_DS, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // t*s-(t*s)_s - fms.s1 F_DTS = F_T, f8, F_TSS - nop.i 0 -} - -{.mfi - nop.m 0 - // c9*x^7+..+c2 - fma.s1 F_S29 = F_X4, F_S69, F_S25 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // y*z - fma.s1 F_YZ = F_Z, F_Y, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // t^2 - fma.s1 F_T2 = F_T, F_T, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // 1-t^2+ST - fma.s1 F_1T2_ST = F_ST, f1, F_1T2 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // y*(1-s^2)(1-x) - fma.s1 F_Y1S2_1X = F_Y1S2, F_1X, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // dz ~ sqrt(1-t^2)-z - fma.s1 F_DZ = F_DZ0, F_ZE, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // -1+correction for sqrt(1-t^2)-z - fnma.s1 F_CORR = F_INV1T2_2, F_DZ0, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (PS29*x^2+x)*y*(1-s^2) - fma.s1 F_S19 = F_Y1S2X2, F_S29, F_Y1S2X - nop.i 0;; -} - -{.mfi - nop.m 0 - // z*y*(1-s^2)_s - fma.s1 F_ZY1S2S = F_YZ, F_1S2_S, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // s^2-(1-t^2+ST) - fms.s1 F_1T2_ST = f8, f8, F_1T2_ST - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (t*s-(t*s)_s)+z*y*(1-s^2-(1-s^2)_s)*x - fma.s1 F_DTS = F_YZ, F_DS2X, F_DTS - nop.i 0 -} - -{.mfi - nop.m 0 - // dz*y*(1-s^2)*(1-x) - fma.s1 F_DZ_TERM = F_DZ, F_Y1S2_1X, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // R = t*s-sqrt(1-t^2)*(1-s^2)*y+sqrt(1-t^2)*(1-s^2)*y*PS19 - // (used for polynomial evaluation) - fma.s1 F_R = F_S19, F_SQRT_1T2, F_TS - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (PS29*x^2)*y*(1-s^2) - fma.s1 F_S29 = F_Y1S2X2, F_S29, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // apply correction to dz*y*(1-s^2)*(1-x) - fma.s1 F_DZ_TERM = F_DZ_TERM, F_CORR, F_DZ_TERM - nop.i 0;; -} - - -{.mfi - nop.m 0 - // R^2 - fma.s1 F_R2 = F_R, F_R, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (t*s-(t*s)_s)+z*y*(1-s^2-(1-s^2)_s)*x+dz*y*(1-s^2)*(1-x) - fma.s1 F_DZ_TERM = F_DZ_TERM, f1, F_DTS - nop.i 0;; -} - - -{.mfi - nop.m 0 - // c7+c9*R^2 - fma.s1 F_P79 = F_C9, F_R2, F_C7 - nop.i 0 -} - -{.mfi - nop.m 0 - // c3+c5*R^2 - fma.s1 F_P35 = F_C5, F_R2, F_C3 - nop.i 0;; -} - -{.mfi - nop.m 0 - // asin(t)_low-(pi)_low (if s<0) - (p6) fms.s1 F_ATLO = F_ATLO, f1, F_PI2_LO - nop.i 0 -} - -{.mfi - nop.m 0 - // R^4 - fma.s1 F_R4 = F_R2, F_R2, f0 - nop.i 0;; -} - -{.mfi - nop.m 0 - // R^3 - fma.s1 F_R3 = F_R2, F_R, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (t*s)_s-t^2*y*z - fnma.s1 F_TSS = F_T2, F_YZ, F_TSS - nop.i 0 -} - -{.mfi - nop.m 0 - // d(ts)+z*y*d(1-s^2)*x+dz*y*(1-s^2)*(1-x)+z*y*(s^2-1+t^2-ST) - fma.s1 F_DZ_TERM = F_YZ, F_1T2_ST, F_DZ_TERM - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (pi)_hi-asin(t)_hi (if s<0) - (p6) fms.s1 F_ATHI = F_PI2_HI, f1, F_ATHI - nop.i 0 -} - -{.mfi - nop.m 0 - // c3+c5*R^2+c7*R^4+c9*R^6 - fma.s1 F_P39 = F_P79, F_R4, F_P35 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // d(ts)+z*y*d(1-s^2)*x+dz*y*(1-s^2)*(1-x)+z*y*(s^2-1+t^2-ST)+ - // + sqrt(1-t^2)*y*(1-s^2)*x^2*PS29 - fma.s1 F_DZ_TERM = F_SQRT_1T2, F_S29, F_DZ_TERM - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (t*s)_s-t^2*y*z+z*y*ST - fma.s1 F_TSS = F_YZ, F_ST, F_TSS - nop.i 0 -} - -{.mfi - nop.m 0 - // -asin(t)_low+R^3*(c3+c5*R^2+c7*R^4+c9*R^6) - fms.s1 F_P39 = F_P39, F_R3, F_ATLO - nop.i 0;; -} - - -{.mfi - nop.m 0 - // d(ts)+z*y*d(1-s^2)*x+dz*y*(1-s^2)*(1-x)+z*y*(s^2-1+t^2-ST) + - // + sqrt(1-t^2)*y*(1-s^2)*x^2*PS29 + - // - asin(t)_low+R^3*(c3+c5*R^2+c7*R^4+c9*R^6) - fma.s1 F_DZ_TERM = F_P39, f1, F_DZ_TERM - nop.i 0;; -} - - -{.mfi - nop.m 0 - // d(ts)+z*y*d(1-s^2)*x+dz*y*(1-s^2)*(1-x)+z*y*(s^2-1+t^2-ST) + - // + sqrt(1-t^2)*y*(1-s^2)*x^2*PS29 + z*y*(1-s^2)_s*x + - // - asin(t)_low+R^3*(c3+c5*R^2+c7*R^4+c9*R^6) - fma.s1 F_DZ_TERM = F_ZY1S2S, F_X, F_DZ_TERM - nop.i 0;; -} - - -{.mfi - nop.m 0 - // d(ts)+z*y*d(1-s^2)*x+dz*y*(1-s^2)*(1-x)+z*y*(s^2-1+t^2-ST) + - // + sqrt(1-t^2)*y*(1-s^2)*x^2*PS29 + z*y*(1-s^2)_s*x + - // - asin(t)_low+R^3*(c3+c5*R^2+c7*R^4+c9*R^6) + - // + (t*s)_s-t^2*y*z+z*y*ST - fma.s1 F_DZ_TERM = F_TSS, f1, F_DZ_TERM - nop.i 0;; -} - - -.pred.rel "mutex", p6, p11 -{.mfi - nop.m 0 - // result: add high part of table value - // s>0 in this case - (p11) fnma.s0 f8 = F_DZ_TERM, f1, F_ATHI - nop.i 0 -} - -{.mfb - nop.m 0 - // result: add high part of pi-table value - // if s<0 - (p6) fma.s0 f8 = F_DZ_TERM, f1, F_ATHI - br.ret.sptk b0;; -} - - - - - - -SMALL_S: - - // use 15-term polynomial approximation - -{.mmi - // r3 = pointer to polynomial coefficients - addl r3 = @ltoff(poly_coeffs), gp;; - // load start address for coefficients - ld8 r3 = [r3] - mov R_TMP = 0x3fbf;; -} - - -{.mmi - add r2 = 64, r3 - ldfe F_C3 = [r3], 16 - // p7 = 1 if |s|<2^{-64} (exponent of s0, set F_PI2_LO=0 - (p11) fma.s1 F_PI2_HI = f0, f0, f0;; -} - -{.mfi - nop.m 0 - (p11) fma.s1 F_PI2_LO = f0, f0, f0 - nop.i 0;; -} - -{.mfi - // adjust address for C_11 - add r3 = 16, r3 - // c9*x+c8 - fma.s1 F_S89 = F_X, F_CS9, F_CS8 - nop.i 0 -} - -{.mfi - nop.m 0 - // x^2 - fma.s1 F_X2 = F_X, F_X, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // y*(1-s^2)*x - fma.s1 F_Y1S2X = F_Y1S2, F_X, f0 - nop.i 0 -} - -{.mfi - // C11, C13 - ldfpd F_C11, F_C13 = [r3], 16 - // c7*x+c6 - fma.s1 F_S67 = F_X, F_CS7, F_CS6 - nop.i 0;; -} - - -{.mfi - // C15, C17 - ldfpd F_C15, F_C17 = [r3], 16 - // c3*x+c2 - fma.s1 F_S23 = F_X, F_CS3, F_CS2 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // c5*x+c4 - fma.s1 F_S45 = F_X, F_CS5, F_CS4 - nop.i 0;; -} - - - - -{.mfi - nop.m 0 - // y*(1-s^2)*x^2 - fma.s1 F_Y1S2X2 = F_Y1S2, F_X2, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // x^4 - fma.s1 F_X4 = F_X2, F_X2, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // c9*x^3+..+c6 - fma.s1 F_S69 = F_X2, F_S89, F_S67 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // c5*x^3+..+c2 - fma.s1 F_S25 = F_X2, F_S45, F_S23 - nop.i 0;; -} - - - -{.mfi - nop.m 0 - // (pi)_high-y*(1-s^2)_s - fnma.s1 F_HI = F_Y, F_1S2_S, F_PI2_HI - nop.i 0;; -} - - -{.mfi - nop.m 0 - // c9*x^7+..+c2 - fma.s1 F_S29 = F_X4, F_S69, F_S25 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // -(y*(1-s^2)_s)_high - fms.s1 F_1S2_HI = F_HI, f1, F_PI2_HI - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (PS29*x^2+x)*y*(1-s^2) - fma.s1 F_S19 = F_Y1S2X2, F_S29, F_Y1S2X - nop.i 0;; -} - - -{.mfi - nop.m 0 - // y*(1-s^2)_s-(y*(1-s^2))_high - fma.s1 F_DS2 = F_Y, F_1S2_S, F_1S2_HI - nop.i 0;; -} - - - -{.mfi - nop.m 0 - // R ~ sqrt(1-s^2) - // (used for polynomial evaluation) - fnma.s1 F_R = F_S19, f1, F_Y1S2 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // y*(1-s^2)-(y*(1-s^2))_high - fma.s1 F_DS2 = F_Y, F_DS, F_DS2 - nop.i 0 -} - -{.mfi - nop.m 0 - // (pi)_low+(PS29*x^2)*y*(1-s^2) - fma.s1 F_S29 = F_Y1S2X2, F_S29, F_PI2_LO - nop.i 0;; -} - - -{.mfi - nop.m 0 - // R^2 - fma.s1 F_R2 = F_R, F_R, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // if s<0 - // (pi)_low+(PS29*x^2)*y*(1-s^2)-(y*(1-s^2)-(y*(1-s^2))_high) - fms.s1 F_S29 = F_S29, f1, F_DS2 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // c7+c9*R^2 - fma.s1 F_P79 = F_C9, F_R2, F_C7 - nop.i 0 -} - -{.mfi - nop.m 0 - // c3+c5*R^2 - fma.s1 F_P35 = F_C5, F_R2, F_C3 - nop.i 0;; -} - - - -{.mfi - nop.m 0 - // R^4 - fma.s1 F_R4 = F_R2, F_R2, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // R^3 - fma.s1 F_R3 = F_R2, F_R, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // c11+c13*R^2 - fma.s1 F_P1113 = F_C13, F_R2, F_C11 - nop.i 0 -} - -{.mfi - nop.m 0 - // c15+c17*R^2 - fma.s1 F_P1517 = F_C17, F_R2, F_C15 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (pi)_low+(PS29*x^2)*y*(1-s^2)-(y*(1-s^2)-(y*(1-s^2))_high)+y*(1-s^2)*x - fma.s1 F_S29 = F_Y1S2, F_X, F_S29 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // c11+c13*R^2+c15*R^4+c17*R^6 - fma.s1 F_P1117 = F_P1517, F_R4, F_P1113 - nop.i 0 -} - -{.mfi - nop.m 0 - // c3+c5*R^2+c7*R^4+c9*R^6 - fma.s1 F_P39 = F_P79, F_R4, F_P35 - nop.i 0;; -} - - - -{.mfi - nop.m 0 - // R^8 - fma.s1 F_R8 = F_R4, F_R4, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // c3+c5*R^2+c7*R^4+c9*R^6+..+c17*R^14 - fma.s1 F_P317 = F_P1117, F_R8, F_P39 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (pi)_low-(PS29*x^2)*y*(1-s^2)-(y*(1-s^2)- - // -(y*(1-s^2))_high)+y*(1-s^2)*x - P3, 17 - fnma.s1 F_S29 = F_P317, F_R3, F_S29 - nop.i 0;; -} - -.pred.rel "mutex", p6, p11 -{.mfi - nop.m 0 - // Result (if s<0): - // (pi)_low-(PS29*x^2)*y*(1-s^2)-(y*(1-s^2)- - // -(y*(1-s^2))_high)+y*(1-s^2)*x - P3, 17 - // +(pi)_high-(y*(1-s^2))_high - (p6) fma.s0 f8 = F_S29, f1, F_HI - nop.i 0 -} - -{.mfb - nop.m 0 - // Result (if s>0): - // (PS29*x^2)*y*(1-s^2)- - // -y*(1-s^2)*x + P3, 17 - // +(y*(1-s^2)) - (p11) fms.s0 f8 = F_Y, F_1S2_S, F_S29 - br.ret.sptk b0;; -} - - - - - - -acosl_SPECIAL_CASES: - -{.mfi - alloc r32 = ar.pfs, 1, 4, 4, 0 - // check if the input is a NaN, or unsupported format - // (i.e. not infinity or normal/denormal) - fclass.nm p7, p8 = f8, 0x3f - // pointer to pi/2 - add r3 = 96, r3;; -} - - -{.mfi - // load pi/2 - ldfpd F_PI2_HI, F_PI2_LO = [r3] - // get |s| - fmerge.s F_S = f0, f8 - nop.i 0 -} - -{.mfb - nop.m 0 - // if NaN, quietize it, and return - (p7) fma.s0 f8 = f8, f1, f0 - (p7) br.ret.spnt b0;; -} - - -{.mfi - nop.m 0 - // |s| = 1 ? - fcmp.eq.s0 p9, p10 = F_S, f1 - nop.i 0 -} - -{.mfi - nop.m 0 - // load FR_X - fma.s1 FR_X = f8, f1, f0 - // load error tag - mov GR_Parameter_TAG = 57;; -} - - -{.mfi - nop.m 0 - // if s = 1, result is 0 - (p9) fma.s0 f8 = f0, f0, f0 - // set p6=0 for |s|>1 - (p10) cmp.ne p6, p0 = r0, r0;; -} - - -{.mfb - nop.m 0 - // if s = -1, result is pi - (p6) fma.s0 f8 = F_PI2_HI, f1, F_PI2_LO - // return if |s| = 1 - (p9) br.ret.sptk b0;; -} - - -{.mfi - nop.m 0 - // get Infinity - frcpa.s1 FR_RESULT, p0 = f1, f0 - nop.i 0;; -} - - -{.mfb - nop.m 0 - // return QNaN indefinite (0*Infinity) - fma.s0 FR_RESULT = f0, FR_RESULT, f0 - nop.b 0;; -} - - -GLOBAL_LIBM_END(acosl) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -// (1) -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - - -// (2) -{ .mmi - stfe [GR_Parameter_Y] = f1,16 // Store Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -// (3) -{ .mib - stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; - -// (4) -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_asin.S b/sysdeps/ia64/fpu/e_asin.S deleted file mode 100644 index f995c597f4..0000000000 --- a/sysdeps/ia64/fpu/e_asin.S +++ /dev/null @@ -1,854 +0,0 @@ -.file "asin.s" - - -// Copyright (c) 2000 - 2003 Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. - -// History -//============================================================== -// 02/02/00 Initial version -// 08/17/00 New and much faster algorithm. -// 08/31/00 Avoided bank conflicts on loads, shortened |x|=1 path, -// fixed mfb split issue stalls. -// 12/19/00 Fixed small arg cases to force inexact, or inexact and underflow. -// 08/02/02 New and much faster algorithm II -// 02/06/03 Reordered header: .section, .global, .proc, .align - -// Description -//========================================= -// The asin function computes the principal value of the arc sine of x. -// asin(0) returns 0, asin(1) returns pi/2, asin(-1) returns -pi/2. -// A doman error occurs for arguments not in the range [-1,+1]. -// -// The asin function returns the arc sine in the range [-pi/2, +pi/2] radians. -// -// There are 8 paths: -// 1. x = +/-0.0 -// Return asin(x) = +/-0.0 -// -// 2. 0.0 < |x| < 0.625 -// Return asin(x) = x + x^3 *PolA(x^2) -// where PolA(x^2) = A3 + A5*x^2 + A7*x^4 +...+ A35*x^32 -// -// 3. 0.625 <=|x| < 1.0 -// Return asin(x) = sign(x) * ( Pi/2 - sqrt(R) * PolB(R)) -// Where R = 1 - |x|, -// PolB(R) = B0 + B1*R + B2*R^2 +...+B12*R^12 -// -// sqrt(R) is approximated using the following sequence: -// y0 = (1 + eps)/sqrt(R) - initial approximation by frsqrta, -// |eps| < 2^(-8) -// Then 3 iterations are used to refine the result: -// H0 = 0.5*y0 -// S0 = R*y0 -// -// d0 = 0.5 - H0*S0 -// H1 = H0 + d0*H0 -// S1 = S0 + d0*S0 -// -// d1 = 0.5 - H1*S1 -// H2 = H1 + d0*H1 -// S2 = S1 + d0*S1 -// -// d2 = 0.5 - H2*S2 -// S3 = S3 + d2*S3 -// -// S3 approximates sqrt(R) with enough accuracy for this algorithm -// -// So, the result should be reconstracted as follows: -// asin(x) = sign(x) * (Pi/2 - S3*PolB(R)) -// -// But for optimization perposes the reconstruction step is slightly -// changed: -// asin(x) = sign(x)*(Pi/2 - PolB(R)*S2) + sign(x)*d2*S2*PolB(R) -// -// 4. |x| = 1.0 -// Return asin(x) = sign(x)*Pi/2 -// -// 5. 1.0 < |x| <= +INF -// A doman error occurs for arguments not in the range [-1,+1] -// -// 6. x = [S,Q]NaN -// Return asin(x) = QNaN -// -// 7. x is denormal -// Return asin(x) = x + x^3, -// -// 8. x is unnormal -// Normalize input in f8 and return to the very beginning of the function -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input, output -// f6, f7, f9 -> f15, f32 -> f63 - -// General registers used: -// r3, r21 -> r31, r32 -> r38 - -// Predicate registers used: -// p0, p6 -> p14 - -// -// Assembly macros -//========================================= -// integer registers used -// scratch -rTblAddr = r3 - -rPiBy2Ptr = r21 -rTmpPtr3 = r22 -rDenoBound = r23 -rOne = r24 -rAbsXBits = r25 -rHalf = r26 -r0625 = r27 -rSign = r28 -rXBits = r29 -rTmpPtr2 = r30 -rTmpPtr1 = r31 - -// stacked -GR_SAVE_PFS = r32 -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Parameter_TAG = r38 - -// floating point registers used -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - - -// scratch -fXSqr = f6 -fXCube = f7 -fXQuadr = f9 -f1pX = f10 -f1mX = f11 -f1pXRcp = f12 -f1mXRcp = f13 -fH = f14 -fS = f15 -// stacked -fA3 = f32 -fB1 = f32 -fA5 = f33 -fB2 = f33 -fA7 = f34 -fPiBy2 = f34 -fA9 = f35 -fA11 = f36 -fB10 = f35 -fB11 = f36 -fA13 = f37 -fA15 = f38 -fB4 = f37 -fB5 = f38 -fA17 = f39 -fA19 = f40 -fB6 = f39 -fB7 = f40 -fA21 = f41 -fA23 = f42 -fB3 = f41 -fB8 = f42 -fA25 = f43 -fA27 = f44 -fB9 = f43 -fB12 = f44 -fA29 = f45 -fA31 = f46 -fA33 = f47 -fA35 = f48 -fBaseP = f49 -fB0 = f50 -fSignedS = f51 -fD = f52 -fHalf = f53 -fR = f54 -fCloseTo1Pol = f55 -fSignX = f56 -fDenoBound = f57 -fNormX = f58 -fX8 = f59 -fRSqr = f60 -fRQuadr = f61 -fR8 = f62 -fX16 = f63 -// Data tables -//============================================================== -RODATA -.align 16 -LOCAL_OBJECT_START(asin_base_range_table) -// Ai: Polynomial coefficients for the asin(x), |x| < .625000 -// Bi: Polynomial coefficients for the asin(x), |x| > .625000 -data8 0xBFDAAB56C01AE468 //A29 -data8 0x3FE1C470B76A5B2B //A31 -data8 0xBFDC5FF82A0C4205 //A33 -data8 0x3FC71FD88BFE93F0 //A35 -data8 0xB504F333F9DE6487, 0x00003FFF //B0 -data8 0xAAAAAAAAAAAAFC18, 0x00003FFC //A3 -data8 0x3F9F1C71BC4A7823 //A9 -data8 0x3F96E8BBAAB216B2 //A11 -data8 0x3F91C4CA1F9F8A98 //A13 -data8 0x3F8C9DDCEDEBE7A6 //A15 -data8 0x3F877784442B1516 //A17 -data8 0x3F859C0491802BA2 //A19 -data8 0x9999999998C88B8F, 0x00003FFB //A5 -data8 0x3F6BD7A9A660BF5E //A21 -data8 0x3F9FC1659340419D //A23 -data8 0xB6DB6DB798149BDF, 0x00003FFA //A7 -data8 0xBFB3EF18964D3ED3 //A25 -data8 0x3FCD285315542CF2 //A27 -data8 0xF15BEEEFF7D2966A, 0x00003FFB //B1 -data8 0x3EF0DDA376D10FB3 //B10 -data8 0xBEB83CAFE05EBAC9 //B11 -data8 0x3F65FFB67B513644 //B4 -data8 0x3F5032FBB86A4501 //B5 -data8 0x3F392162276C7CBA //B6 -data8 0x3F2435949FD98BDF //B7 -data8 0xD93923D7FA08341C, 0x00003FF9 //B2 -data8 0x3F802995B6D90BDB //B3 -data8 0x3F10DF86B341A63F //B8 -data8 0xC90FDAA22168C235, 0x00003FFF // Pi/2 -data8 0x3EFA3EBD6B0ECB9D //B9 -data8 0x3EDE18BA080E9098 //B12 -LOCAL_OBJECT_END(asin_base_range_table) - - -.section .text -GLOBAL_LIBM_ENTRY(asin) -asin_unnormal_back: -{ .mfi - getf.d rXBits = f8 // grab bits of input value - // set p12 = 1 if x is a NaN, denormal, or zero - fclass.m p12, p0 = f8, 0xcf - adds rSign = 1, r0 -} -{ .mfi - addl rTblAddr = @ltoff(asin_base_range_table),gp - // 1 - x = 1 - |x| for positive x - fms.s1 f1mX = f1, f1, f8 - addl rHalf = 0xFFFE, r0 // exponent of 1/2 -} -;; -{ .mfi - addl r0625 = 0x3FE4, r0 // high 16 bits of 0.625 - // set p8 = 1 if x < 0 - fcmp.lt.s1 p8, p9 = f8, f0 - shl rSign = rSign, 63 // sign bit -} -{ .mfi - // point to the beginning of the table - ld8 rTblAddr = [rTblAddr] - // 1 + x = 1 - |x| for negative x - fma.s1 f1pX = f1, f1, f8 - adds rOne = 0x3FF, r0 -} -;; -{ .mfi - andcm rAbsXBits = rXBits, rSign // bits of |x| - fmerge.s fSignX = f8, f1 // signum(x) - shl r0625 = r0625, 48 // bits of DP representation of 0.625 -} -{ .mfb - setf.exp fHalf = rHalf // load A2 to FP reg - fma.s1 fXSqr = f8, f8, f0 // x^2 - // branch on special path if x is a NaN, denormal, or zero -(p12) br.cond.spnt asin_special -} -;; -{ .mfi - adds rPiBy2Ptr = 272, rTblAddr - nop.f 0 - shl rOne = rOne, 52 // bits of 1.0 -} -{ .mfi - adds rTmpPtr1 = 16, rTblAddr - nop.f 0 - // set p6 = 1 if |x| < 0.625 - cmp.lt p6, p7 = rAbsXBits, r0625 -} -;; -{ .mfi - ldfpd fA29, fA31 = [rTblAddr] // A29, fA31 - // 1 - x = 1 - |x| for positive x -(p9) fms.s1 fR = f1, f1, f8 - // point to coefficient of "near 1" polynomial -(p7) adds rTmpPtr2 = 176, rTblAddr -} -{ .mfi - ldfpd fA33, fA35 = [rTmpPtr1], 16 // A33, fA35 - // 1 + x = 1 - |x| for negative x -(p8) fma.s1 fR = f1, f1, f8 -(p6) adds rTmpPtr2 = 48, rTblAddr -} -;; -{ .mfi - ldfe fB0 = [rTmpPtr1], 16 // B0 - nop.f 0 - nop.i 0 -} -{ .mib - adds rTmpPtr3 = 16, rTmpPtr2 - // set p10 = 1 if |x| = 1.0 - cmp.eq p10, p0 = rAbsXBits, rOne - // branch on special path for |x| = 1.0 -(p10) br.cond.spnt asin_abs_1 -} -;; -{ .mfi - ldfe fA3 = [rTmpPtr2], 48 // A3 or B1 - nop.f 0 - adds rTmpPtr1 = 64, rTmpPtr3 -} -{ .mib - ldfpd fA9, fA11 = [rTmpPtr3], 16 // A9, A11 or B10, B11 - // set p11 = 1 if |x| > 1.0 - cmp.gt p11, p0 = rAbsXBits, rOne - // branch on special path for |x| > 1.0 -(p11) br.cond.spnt asin_abs_gt_1 -} -;; -{ .mfi - ldfpd fA17, fA19 = [rTmpPtr2], 16 // A17, A19 or B6, B7 - // initial approximation of 1 / sqrt(1 - x) - frsqrta.s1 f1mXRcp, p0 = f1mX - nop.i 0 -} -{ .mfi - ldfpd fA13, fA15 = [rTmpPtr3] // A13, A15 or B4, B5 - fma.s1 fXCube = fXSqr, f8, f0 // x^3 - nop.i 0 -} -;; -{ .mfi - ldfe fA5 = [rTmpPtr2], 48 // A5 or B2 - // initial approximation of 1 / sqrt(1 + x) - frsqrta.s1 f1pXRcp, p0 = f1pX - nop.i 0 -} -{ .mfi - ldfpd fA21, fA23 = [rTmpPtr1], 16 // A21, A23 or B3, B8 - fma.s1 fXQuadr = fXSqr, fXSqr, f0 // x^4 - nop.i 0 -} -;; -{ .mfi - ldfe fA7 = [rTmpPtr1] // A7 or Pi/2 - fma.s1 fRSqr = fR, fR, f0 // R^2 - nop.i 0 -} -{ .mfb - ldfpd fA25, fA27 = [rTmpPtr2] // A25, A27 or B9, B12 - nop.f 0 -(p6) br.cond.spnt asin_base_range; -} -;; - -{ .mfi - nop.m 0 -(p9) fma.s1 fH = fHalf, f1mXRcp, f0 // H0 for x > 0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 fS = f1mX, f1mXRcp, f0 // S0 for x > 0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 -(p8) fma.s1 fH = fHalf, f1pXRcp, f0 // H0 for x < 0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fma.s1 fS = f1pX, f1pXRcp, f0 // S0 for x > 0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRQuadr = fRSqr, fRSqr, f0 // R^4 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fB11 = fB11, fR, fB10 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB1 = fB1, fR, fB0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fB5 = fB5, fR, fB4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB7 = fB7, fR, fB6 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fB3 = fB3, fR, fB2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fnma.s1 fD = fH, fS, fHalf // d0 = 1/2 - H0*S0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fR8 = fRQuadr, fRQuadr, f0 // R^4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB9 = fB9, fR, fB8 - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fB12 = fB12, fRSqr, fB11 - nop.i 0 -} -{.mfi - nop.m 0 - fma.s1 fB7 = fB7, fRSqr, fB5 - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fB3 = fB3, fRSqr, fB1 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fH = fH, fD, fH // H1 = H0 + H0*d0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS = fS, fD, fS // S1 = S0 + S0*d0 - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fPiBy2 = fPiBy2, fSignX, f0 // signum(x)*Pi/2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fB12 = fB12, fRSqr, fB9 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB7 = fB7, fRQuadr, fB3 - nop.i 0 -} -;; -{.mfi - nop.m 0 - fnma.s1 fD = fH, fS, fHalf // d1 = 1/2 - H1*S1 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 fSignedS = fSignX, fS, f0 // -signum(x)*S1 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fCloseTo1Pol = fB12, fR8, fB7 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fH = fH, fD, fH // H2 = H1 + H1*d1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS = fS, fD, fS // S2 = S1 + S1*d1 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // -signum(x)* S2 = -signum(x)*(S1 + S1*d1) - fma.s1 fSignedS = fSignedS, fD, fSignedS - nop.i 0 -} -;; -{.mfi - nop.m 0 - fnma.s1 fD = fH, fS, fHalf // d2 = 1/2 - H2*S2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // signum(x)*(Pi/2 - PolB*S2) - fma.s1 fPiBy2 = fSignedS, fCloseTo1Pol, fPiBy2 - nop.i 0 -} -{ .mfi - nop.m 0 - // -signum(x)*PolB * S2 - fma.s1 fCloseTo1Pol = fSignedS, fCloseTo1Pol, f0 - nop.i 0 -} -;; -{ .mfb - nop.m 0 - // final result for 0.625 <= |x| < 1 - fma.d.s0 f8 = fCloseTo1Pol, fD, fPiBy2 - // exit here for 0.625 <= |x| < 1 - br.ret.sptk b0 -} -;; - - -// here if |x| < 0.625 -.align 32 -asin_base_range: -{ .mfi - nop.m 0 - fma.s1 fA33 = fA33, fXSqr, fA31 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA15 = fA15, fXSqr, fA13 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA29 = fA29, fXSqr, fA27 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA25 = fA25, fXSqr, fA23 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA21 = fA21, fXSqr, fA19 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA9 = fA9, fXSqr, fA7 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA5 = fA5, fXSqr, fA3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA35 = fA35, fXQuadr, fA33 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA17 = fA17, fXQuadr, fA15 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fX8 = fXQuadr, fXQuadr, f0 // x^8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA25 = fA25, fXQuadr, fA21 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA9 = fA9, fXQuadr, fA5 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA35 = fA35, fXQuadr, fA29 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA17 = fA17, fXSqr, fA11 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fX16 = fX8, fX8, f0 // x^16 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA35 = fA35, fX8, fA25 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA17 = fA17, fX8, fA9 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fBaseP = fA35, fX16, fA17 - nop.i 0 -} -;; -{ .mfb - nop.m 0 - // final result for |x| < 0.625 - fma.d.s0 f8 = fBaseP, fXCube, f8 - // exit here for |x| < 0.625 path - br.ret.sptk b0 -} -;; - -// here if |x| = 1 -// asin(x) = sign(x) * Pi/2 -.align 32 -asin_abs_1: -{ .mfi - ldfe fPiBy2 = [rPiBy2Ptr] // Pi/2 - nop.f 0 - nop.i 0 -} -;; -{.mfb - nop.m 0 - // result for |x| = 1.0 - fma.d.s0 f8 = fPiBy2, fSignX, f0 - // exit here for |x| = 1.0 - br.ret.sptk b0 -} -;; - -// here if x is a NaN, denormal, or zero -.align 32 -asin_special: -{ .mfi - nop.m 0 - // set p12 = 1 if x is a NaN - fclass.m p12, p0 = f8, 0xc3 - nop.i 0 -} -{ .mlx - nop.m 0 - // smallest positive DP normalized number - movl rDenoBound = 0x0010000000000000 -} -;; -{ .mfi - nop.m 0 - // set p13 = 1 if x = 0.0 - fclass.m p13, p0 = f8, 0x07 - nop.i 0 -} -{ .mfi - nop.m 0 - fnorm.s1 fNormX = f8 - nop.i 0 -} -;; -{ .mfb - // load smallest normal to FP reg - setf.d fDenoBound = rDenoBound - // answer if x is a NaN -(p12) fma.d.s0 f8 = f8,f1,f0 - // exit here if x is a NaN -(p12) br.ret.spnt b0 -} -;; -{ .mfb - nop.m 0 - nop.f 0 - // exit here if x = 0.0 -(p13) br.ret.spnt b0 -} -;; -// if we still here then x is denormal or unnormal -{ .mfi - nop.m 0 - // absolute value of normalized x - fmerge.s fNormX = f1, fNormX - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // set p14 = 1 if normalized x is greater than or - // equal to the smallest denormalized value - // So, if p14 is set to 1 it means that we deal with - // unnormal rather than with "true" denormal - fcmp.ge.s1 p14, p0 = fNormX, fDenoBound - nop.i 0 -} -;; -{ .mfi - nop.m 0 -(p14) fcmp.eq.s0 p6, p0 = f8, f0 // Set D flag if x unnormal - nop.i 0 -} -{ .mfb - nop.m 0 - // normalize unnormal input -(p14) fnorm.s1 f8 = f8 - // return to the main path -(p14) br.cond.sptk asin_unnormal_back -} -;; -// if we still here it means that input is "true" denormal -{ .mfb - nop.m 0 - // final result if x is denormal - fma.d.s0 f8 = f8, fXSqr, f8 - // exit here if x is denormal - br.ret.sptk b0 -} -;; - -// here if |x| > 1.0 -// error handler should be called -.align 32 -asin_abs_gt_1: -{ .mfi - alloc r32 = ar.pfs, 0, 3, 4, 0 // get some registers - fmerge.s FR_X = f8,f8 - nop.i 0 -} -{ .mfb - mov GR_Parameter_TAG = 61 // error code - frcpa.s0 FR_RESULT, p0 = f0,f0 - // call error handler routine - br.cond.sptk __libm_error_region -} -;; -GLOBAL_LIBM_END(asin) - - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_asinf.S b/sysdeps/ia64/fpu/e_asinf.S deleted file mode 100644 index 74a18dd24a..0000000000 --- a/sysdeps/ia64/fpu/e_asinf.S +++ /dev/null @@ -1,675 +0,0 @@ -.file "asinf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. - -// History -//============================================================== -// 02/02/00 Initial version -// 06/28/00 Improved speed -// 06/31/00 Changed register allocation because of some duplicate macros -// moved nan exit bundle up to gain a cycle. -// 08/08/00 Improved speed by avoiding SIR flush. -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 08/17/00 Changed predicate register macro-usage to direct predicate -// names due to an assembler bug. -// 10/17/00 Improved speed of x=0 and x=1 paths, set D flag if x denormal. -// 03/13/01 Corrected sign of imm1 value in dep instruction. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align - - -// Description -//========================================= -// The asinf function computes the arc sine of x in the range [-pi,+pi]. -// A doman error occurs for arguments not in the range [-1,+1]. -// asinf(+-0) returns +-0 -// asinf(x) returns a Nan and raises the invalid exception for |x| >1 - -// The acosf function returns the arc cosine in the range [0, +pi] radians. -// A doman error occurs for arguments not in the range [-1,+1]. -// acosf(1) returns +0 -// acosf(x) returns a Nan and raises the invalid exception for |x| >1 - - -// |x| <= sqrt(2)/2. get Ax and Bx - -// poly_p1 = x p1 -// poly_p3 = x2 p4 + p3 -// poly_p1 = x2 (poly_p1) + x = x2(x p1) + x -// poly_p2 = x2( poly_p3) + p2 = x2(x2 p4 + p3) + p2 - -// poly_Ax = x5(x2( poly_p3) + p2) + x2(x p1) + x -// = x5(x2(x2 p4 + p3) + p2) + x2(x p1) + x - -// poly_p7 = x2 p8 + p7 -// poly_p5 = x2 p6 + p5 - -// poly_p7 = x4 p9 + (poly_p7) -// poly_p7 = x4 p9 + (x2 p8 + p7) -// poly_Bx = x4 (x4 p9 + (x2 p8 + p7)) + x2 p6 + p5 - -// answer1 = x11(x4 (x4 p9 + (x2 p8 + p7)) + x2 p6 + p5) + x5(x2(x2 p4 + p3) + p2) + x2(x p1) + x -// = x19 p9 + x17 p8 + x15 p7 x13 p6 + x11 p5 + x9 p4 + x7 p3 + x5 p2 + x3 p1 + x - - - -// |x| > sqrt(2)/2 - -// Get z = sqrt(1-x2) - -// Get polynomial in t = 1-x2 - -// t2 = t t -// t4 = t2 t2 - -// poly_p4 = t p5 + p4 -// poly_p1 = t p1 + 1 - -// poly_p6 = t p7 + p6 -// poly_p2 = t p3 + p2 - -// poly_p8 = t p9 + p8 - -// poly_p4 = t2 poly_p6 + poly_p4 -// = t2 (t p7 + p6) + (t p5 + p4) - -// poly_p2 = t2 poly_p2 + poly_p1 -// = t2 (t p3 + p2) + (t p1 + 1) - -// poly_p4 = t4 poly_p8 + poly_p4 -// = t4 (t p9 + p8) + (t2 (t p7 + p6) + (t p5 + p4)) - -// P(t) = poly_p2 + t4 poly_p8 -// = t2 (t p3 + p2) + (t p1 + 1) + t4 (t4 (t p9 + p8) + (t2 (t p7 + p6) + (t p5 + p4))) -// = t3 p3 + t2 p2 + t p1 + 1 + t9 p9 + t8 p8 + t7 p7 + t6 p6 + t5 p5 + t4 p4 - - -// answer2 = - sign(x) z P(t) + (sign(x) pi/2) -// - - -// Assembly macros -//========================================= - -// predicate registers -//asinf_pred_LEsqrt2by2 = p7 -//asinf_pred_GTsqrt2by2 = p8 - -// integer registers -ASINF_Addr1 = r33 -ASINF_Addr2 = r34 -ASINF_GR_1by2 = r35 - -ASINF_GR_3by2 = r36 -ASINF_GR_5by2 = r37 - -GR_SAVE_B0 = r38 -GR_SAVE_PFS = r39 -GR_SAVE_GP = r40 - -GR_Parameter_X = r41 -GR_Parameter_Y = r42 -GR_Parameter_RESULT = r43 -GR_Parameter_TAG = r44 - -// floating point registers - -asinf_y = f32 -asinf_abs_x = f33 -asinf_x2 = f34 -asinf_sgn_x = f35 - -asinf_1by2 = f36 -asinf_3by2 = f37 -asinf_5by2 = f38 -asinf_coeff_P3 = f39 -asinf_coeff_P8 = f40 - -asinf_coeff_P1 = f41 -asinf_coeff_P4 = f42 -asinf_coeff_P5 = f43 -asinf_coeff_P2 = f44 -asinf_coeff_P7 = f45 - -asinf_coeff_P6 = f46 -asinf_coeff_P9 = f47 -asinf_x2 = f48 -asinf_x3 = f49 -asinf_x4 = f50 - -asinf_x8 = f51 -asinf_x5 = f52 -asinf_const_piby2 = f53 -asinf_const_sqrt2by2 = f54 -asinf_x11 = f55 - -asinf_poly_p1 = f56 -asinf_poly_p3 = f57 -asinf_sinf1 = f58 -asinf_poly_p2 = f59 -asinf_poly_Ax = f60 - -asinf_poly_p7 = f61 -asinf_poly_p5 = f62 -asinf_sgnx_t4 = f63 -asinf_poly_Bx = f64 -asinf_t = f65 - -asinf_yby2 = f66 -asinf_B = f67 -asinf_B2 = f68 -asinf_Az = f69 -asinf_dz = f70 - -asinf_Sz = f71 -asinf_d2z = f72 -asinf_Fz = f73 -asinf_z = f74 -asinf_sgnx_z = f75 - -asinf_t2 = f76 -asinf_2poly_p4 = f77 -asinf_2poly_p6 = f78 -asinf_2poly_p1 = f79 -asinf_2poly_p2 = f80 - -asinf_2poly_p8 = f81 -asinf_t4 = f82 -asinf_Pt = f83 -asinf_sgnx_2poly_p2 = f84 -asinf_sgn_x_piby2 = f85 - -asinf_poly_p7a = f86 -asinf_2poly_p4a = f87 -asinf_2poly_p4b = f88 -asinf_2poly_p2a = f89 -asinf_poly_p1a = f90 - - - - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(asinf_coeff_1_table) -data8 0x3FC5555607DCF816 // P1 -data8 0x3F9CF81AD9BAB2C6 // P4 -data8 0x3FC59E0975074DF3 // P7 -data8 0xBFA6F4CC2780AA1D // P6 -data8 0x3FC2DD45292E93CB // P9 -data8 0x3fe6a09e667f3bcd // sqrt(2)/2 -LOCAL_OBJECT_END(asinf_coeff_1_table) - -LOCAL_OBJECT_START(asinf_coeff_2_table) -data8 0x3FA6F108E31EFBA6 // P3 -data8 0xBFCA31BF175D82A0 // P8 -data8 0x3FA30C0337F6418B // P5 -data8 0x3FB332C9266CB1F9 // P2 -data8 0x3ff921fb54442d18 // pi_by_2 -LOCAL_OBJECT_END(asinf_coeff_2_table) - - -.section .text -GLOBAL_LIBM_ENTRY(asinf) - -// Load the addresses of the two tables. -// Then, load the coefficients and other constants. - -{ .mfi - alloc r32 = ar.pfs,1,8,4,0 - fnma.s1 asinf_t = f8,f8,f1 - dep.z ASINF_GR_1by2 = 0x3f,24,8 // 0x3f000000 -} -{ .mfi - addl ASINF_Addr1 = @ltoff(asinf_coeff_1_table),gp - fma.s1 asinf_x2 = f8,f8,f0 - addl ASINF_Addr2 = @ltoff(asinf_coeff_2_table),gp ;; -} - - -{ .mfi - ld8 ASINF_Addr1 = [ASINF_Addr1] - fmerge.s asinf_abs_x = f1,f8 - dep ASINF_GR_3by2 = -1,r0,22,8 // 0x3fc00000 -} -{ .mlx - nop.m 999 - movl ASINF_GR_5by2 = 0x40200000;; -} - - - -{ .mfi - setf.s asinf_1by2 = ASINF_GR_1by2 - fmerge.s asinf_sgn_x = f8,f1 - nop.i 999 -} -{ .mfi - ld8 ASINF_Addr2 = [ASINF_Addr2] - nop.f 0 - nop.i 999;; -} - - -{ .mfi - setf.s asinf_5by2 = ASINF_GR_5by2 - fcmp.lt.s1 p11,p12 = f8,f0 - nop.i 999;; -} - -{ .mmf - ldfpd asinf_coeff_P1,asinf_coeff_P4 = [ASINF_Addr1],16 - setf.s asinf_3by2 = ASINF_GR_3by2 - fclass.m.unc p8,p0 = f8, 0xc3 ;; //@qnan | @snan -} - - -{ .mfi - ldfpd asinf_coeff_P7,asinf_coeff_P6 = [ASINF_Addr1],16 - fma.s1 asinf_t2 = asinf_t,asinf_t,f0 - nop.i 999 -} -{ .mfi - ldfpd asinf_coeff_P3,asinf_coeff_P8 = [ASINF_Addr2],16 - fma.s1 asinf_x4 = asinf_x2,asinf_x2,f0 - nop.i 999;; -} - - -{ .mfi - ldfpd asinf_coeff_P9,asinf_const_sqrt2by2 = [ASINF_Addr1] - fclass.m.unc p10,p0 = f8, 0x07 //@zero - nop.i 999 -} -{ .mfi - ldfpd asinf_coeff_P5,asinf_coeff_P2 = [ASINF_Addr2],16 - fma.s1 asinf_x3 = f8,asinf_x2,f0 - nop.i 999;; -} - - -{ .mfi - ldfd asinf_const_piby2 = [ASINF_Addr2] - frsqrta.s1 asinf_B,p0 = asinf_t - nop.i 999 -} -{ .mfb - nop.m 999 -(p8) fma.s.s0 f8 = f8,f1,f0 -(p8) br.ret.spnt b0 ;; // Exit if x=nan -} - - -{ .mfb - nop.m 999 - fcmp.eq.s1 p6,p0 = asinf_abs_x,f1 -(p10) br.ret.spnt b0 ;; // Exit if x=0 -} - -{ .mfi - nop.m 999 - fcmp.gt.s1 p9,p0 = asinf_abs_x,f1 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fma.s1 asinf_x8 = asinf_x4,asinf_x4,f0 - nop.i 999 -} -{ .mfb - nop.m 999 - fma.s1 asinf_t4 = asinf_t2,asinf_t2,f0 -(p6) br.cond.spnt ASINF_ABS_ONE ;; // Branch if |x|=1 -} - -{ .mfi - nop.m 999 - fma.s1 asinf_x5 = asinf_x2,asinf_x3,f0 - nop.i 999 -} -{ .mfb -(p9) mov GR_Parameter_TAG = 62 - fma.s1 asinf_yby2 = asinf_t,asinf_1by2,f0 -(p9) br.cond.spnt __libm_error_region ;; // Branch if |x|>1 -} - - -{ .mfi - nop.m 999 - fma.s1 asinf_Az = asinf_t,asinf_B,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 asinf_B2 = asinf_B,asinf_B,f0 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fma.s1 asinf_poly_p1 = f8,asinf_coeff_P1,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 asinf_2poly_p1 = asinf_coeff_P1,asinf_t,f1 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fma.s1 asinf_poly_p3 = asinf_coeff_P4,asinf_x2,asinf_coeff_P3 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 asinf_2poly_p6 = asinf_coeff_P7,asinf_t,asinf_coeff_P6 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fma.s1 asinf_poly_p7 = asinf_x2,asinf_coeff_P8,asinf_coeff_P7 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 asinf_2poly_p2 = asinf_coeff_P3,asinf_t,asinf_coeff_P2 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 asinf_poly_p5 = asinf_x2,asinf_coeff_P6,asinf_coeff_P5 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 asinf_2poly_p4 = asinf_coeff_P5,asinf_t,asinf_coeff_P4 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.d.s1 asinf_x11 = asinf_x8,asinf_x3,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fnma.s1 asinf_dz = asinf_B2,asinf_yby2,asinf_1by2 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 asinf_poly_p1a = asinf_x2,asinf_poly_p1,f8 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 asinf_2poly_p8 = asinf_coeff_P9,asinf_t,asinf_coeff_P8 - nop.i 999;; -} - - -// Get the absolute value of x and determine the region in which x lies - -{ .mfi - nop.m 999 - fcmp.le.s1 p7,p8 = asinf_abs_x,asinf_const_sqrt2by2 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 asinf_poly_p2 = asinf_x2,asinf_poly_p3,asinf_coeff_P2 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 asinf_poly_p7a = asinf_x4,asinf_coeff_P9,asinf_poly_p7 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 asinf_2poly_p2a = asinf_2poly_p2,asinf_t2,asinf_2poly_p1 - nop.i 999;; -} - - -{ .mfi - nop.m 999 -(p8) fma.s1 asinf_sgnx_t4 = asinf_sgn_x,asinf_t4,f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 asinf_2poly_p4a = asinf_2poly_p6,asinf_t2,asinf_2poly_p4 - nop.i 999;; -} - - -{ .mfi - nop.m 999 -(p8) fma.s1 asinf_Sz = asinf_5by2,asinf_dz,asinf_3by2 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 asinf_d2z = asinf_dz,asinf_dz,f0 - nop.i 999;; -} - - -{ .mfi - nop.m 999 -(p8) fma.s1 asinf_sgn_x_piby2 = asinf_sgn_x,asinf_const_piby2,f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fma.d.s1 asinf_poly_Ax = asinf_x5,asinf_poly_p2,asinf_poly_p1a - nop.i 999;; -} - -{ .mfi - nop.m 999 -(p7) fma.d.s1 asinf_poly_Bx = asinf_x4,asinf_poly_p7a,asinf_poly_p5 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 asinf_sgnx_2poly_p2 = asinf_sgn_x,asinf_2poly_p2a,f0 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fcmp.eq.s0 p6,p0 = f8,f0 // Only purpose is to set D if x denormal - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 asinf_2poly_p4b = asinf_2poly_p8,asinf_t4,asinf_2poly_p4a - nop.i 999;; -} - - -{ .mfi - nop.m 999 -(p8) fma.s1 asinf_Fz = asinf_d2z,asinf_Sz,asinf_dz - nop.i 999;; -} - - -{ .mfi - nop.m 999 -(p8) fma.d.s1 asinf_Pt = asinf_2poly_p4b,asinf_sgnx_t4,asinf_sgnx_2poly_p2 - nop.i 999;; -} - -{ .mfi - nop.m 999 -(p8) fma.d.s1 asinf_z = asinf_Az,asinf_Fz,asinf_Az - nop.i 999;; -} - -.pred.rel "mutex",p8,p7 //asinf_pred_GTsqrt2by2,asinf_pred_LEsqrt2by2 -{ .mfi - nop.m 999 -(p8) fnma.s.s0 f8 = asinf_z,asinf_Pt,asinf_sgn_x_piby2 - nop.i 999 -} - -{ .mfb - nop.m 999 -(p7) fma.s.s0 f8 = asinf_x11,asinf_poly_Bx,asinf_poly_Ax - br.ret.sptk b0 ;; -} - -ASINF_ABS_ONE: -// Here for short exit if |x|=1 -{ .mfb - nop.m 999 - fma.s.s0 f8 = asinf_sgn_x,asinf_const_piby2,f0 - br.ret.sptk b0 -} -;; - -GLOBAL_LIBM_END(asinf) - -// Stack operations when calling error support. -// (1) (2) -// sp -> + psp -> + -// | | -// | | <- GR_Y -// | | -// | <-GR_Y Y2->| -// | | -// | | <- GR_X -// | | -// sp-64 -> + sp -> + -// save ar.pfs save b0 -// save gp - - -// Stack operations when calling error support. -// (3) (call) (4) -// psp -> + sp -> + -// | | -// R3 ->| <- GR_RESULT | -> f8 -// | | -// Y2 ->| <- GR_Y | -// | | -// X1 ->| | -// | | -// sp -> + + -// restore gp -// restore ar.pfs - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 999 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = f1,16 // Store Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mfi - nop.m 0 - frcpa.s0 f9,p0 = f0,f0 - nop.i 0 -};; - -{ .mib - stfs [GR_Parameter_X] = f8 // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfs [GR_Parameter_Y] = f9 // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; - -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_asinl.S b/sysdeps/ia64/fpu/e_asinl.S deleted file mode 100644 index 792a0c6578..0000000000 --- a/sysdeps/ia64/fpu/e_asinl.S +++ /dev/null @@ -1,2523 +0,0 @@ -.file "asinl.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 08/28/01 New version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// long double asinl(long double) -// -// Overview of operation -//============================================================== -// Background -// -// Implementation -// -// For |s| in [2^{-4}, sqrt(2)/2]: -// Let t= 2^k*1.b1 b2..b6 1, where s= 2^k*1.b1 b2.. b52 -// asin(s)= asin(t)+asin(r), where r= s*sqrt(1-t^2)-t*sqrt(1-s^2), i.e. -// r= (s-t)*sqrt(1-t^2)-t*sqrt(1-t^2)*(sqrt((1-s^2)/(1-t^2))-1) -// asin(r)-r evaluated as 9-degree polynomial (c3*r^3+c5*r^5+c7*r^7+c9*r^9) -// The 64-bit significands of sqrt(1-t^2), 1/(1-t^2) are read from the table, -// along with the high and low parts of asin(t) (stored as two double precision -// values) -// -// |s| in (sqrt(2)/2, sqrt(255/256)): -// Let t= 2^k*1.b1 b2..b6 1, where (1-s^2)*frsqrta(1-s^2)= 2^k*1.b1 b2..b6.. -// asin(|s|)= pi/2-asin(t)+asin(r), r= s*t-sqrt(1-s^2)*sqrt(1-t^2) -// To minimize accumulated errors, r is computed as -// r= (t*s)_s-t^2*y*z+z*y*(t^2-1+s^2)_s+z*y*(1-s^2)_s*x+z'*y*(1-s^2)*PS29+ -// +(t*s-(t*s)_s)+z*y*((t^2-1-(t^2-1+s^2)_s)+s^2)+z*y*(1-s^2-(1-s^2)_s)+ -// +ez*z'*y*(1-s^2)*(1-x), -// where y= frsqrta(1-s^2), z= (sqrt(1-t^2))_s (rounded to 24 significant bits) -// z'= sqrt(1-t^2), x= ((1-s^2)*y^2-1)/2 -// -// |s|<2^{-4}: evaluate as 17-degree polynomial -// (or simply return s, if|s|<2^{-64}) -// -// |s| in [sqrt(255/256), 1): asin(|s|)= pi/2-asin(sqrt(1-s^2)) -// use 17-degree polynomial for asin(sqrt(1-s^2)), -// 9-degree polynomial to evaluate sqrt(1-s^2) -// High order term is (pi/2)_high-(y*(1-s^2))_high -// - - - -// Registers used -//============================================================== -// f6-f15, f32-f36 -// r2-r3, r23-r23 -// p6, p7, p8, p12 -// - - - GR_SAVE_B0= r33 - GR_SAVE_PFS= r34 - GR_SAVE_GP= r35 // This reg. can safely be used - GR_SAVE_SP= r36 - - GR_Parameter_X= r37 - GR_Parameter_Y= r38 - GR_Parameter_RESULT= r39 - GR_Parameter_TAG= r40 - - FR_X= f10 - FR_Y= f1 - FR_RESULT= f8 - - - -RODATA - -.align 16 - - - -LOCAL_OBJECT_START(T_table) - -// stores 64-bit significand of 1/(1-t^2), 64-bit significand of sqrt(1-t^2), -// asin(t)_high (double precision), asin(t)_low (double precision) - -data8 0x80828692b71c4391, 0xff7ddcec2d87e879 -data8 0x3fb022bc0ae531a0, 0x3c9f599c7bb42af6 -data8 0x80869f0163d0b082, 0xff79cad2247914d3 -data8 0x3fb062dd26afc320, 0x3ca4eff21bd49c5c -data8 0x808ac7d5a8690705, 0xff75a89ed6b626b9 -data8 0x3fb0a2ff4a1821e0, 0x3cb7e33b58f164cc -data8 0x808f0112ad8ad2e0, 0xff7176517c2cc0cb -data8 0x3fb0e32279319d80, 0x3caee31546582c43 -data8 0x80934abba8a1da0a, 0xff6d33e949b1ed31 -data8 0x3fb12346b8101da0, 0x3cb8bfe463d087cd -data8 0x8097a4d3dbe63d8f, 0xff68e16571015c63 -data8 0x3fb1636c0ac824e0, 0x3c8870a7c5a3556f -data8 0x809c0f5e9662b3dd, 0xff647ec520bca0f0 -data8 0x3fb1a392756ed280, 0x3c964f1a927461ae -data8 0x80a08a5f33fadc66, 0xff600c07846a6830 -data8 0x3fb1e3b9fc19e580, 0x3c69eb3576d56332 -data8 0x80a515d91d71acd4, 0xff5b892bc475affa -data8 0x3fb223e2a2dfbe80, 0x3c6a4e19fd972fb6 -data8 0x80a9b1cfc86ff7cd, 0xff56f631062cf93d -data8 0x3fb2640c6dd76260, 0x3c62041160e0849e -data8 0x80ae5e46b78b0d68, 0xff5253166bc17794 -data8 0x3fb2a43761187c80, 0x3cac61651af678c0 -data8 0x80b31b417a4b756b, 0xff4d9fdb14463dc8 -data8 0x3fb2e46380bb6160, 0x3cb06ef23eeba7a1 -data8 0x80b7e8c3ad33c369, 0xff48dc7e1baf6738 -data8 0x3fb32490d0d910c0, 0x3caa05f480b300d5 -data8 0x80bcc6d0f9c784d6, 0xff4408fe9ad13e37 -data8 0x3fb364bf558b3820, 0x3cb01e7e403aaab9 -data8 0x80c1b56d1692492d, 0xff3f255ba75f5f4e -data8 0x3fb3a4ef12ec3540, 0x3cb4fe8fcdf5f5f1 -data8 0x80c6b49bc72ec446, 0xff3a319453ebd961 -data8 0x3fb3e5200d171880, 0x3caf2dc089b2b7e2 -data8 0x80cbc460dc4e0ae8, 0xff352da7afe64ac6 -data8 0x3fb425524827a720, 0x3cb75a855e7c6053 -data8 0x80d0e4c033bee9c4, 0xff301994c79afb32 -data8 0x3fb46585c83a5e00, 0x3cb3264981c019ab -data8 0x80d615bdb87556db, 0xff2af55aa431f291 -data8 0x3fb4a5ba916c73c0, 0x3c994251d94427b5 -data8 0x80db575d6291fd8a, 0xff25c0f84bae0cb9 -data8 0x3fb4e5f0a7dbdb20, 0x3cbee2fcc4c786cb -data8 0x80e0a9a33769e535, 0xff207c6cc0ec09fd -data8 0x3fb526280fa74620, 0x3c940656e5549b91 -data8 0x80e60c93498e32cd, 0xff1b27b703a19c98 -data8 0x3fb56660ccee2740, 0x3ca7082374d7b2cd -data8 0x80eb8031b8d4052d, 0xff15c2d6105c72f8 -data8 0x3fb5a69ae3d0b520, 0x3c7c4d46e09ac68a -data8 0x80f10482b25c6c8a, 0xff104dc8e0813ed4 -data8 0x3fb5e6d6586fec20, 0x3c9aa84ffd9b4958 -data8 0x80f6998a709c7cfb, 0xff0ac88e6a4ab926 -data8 0x3fb627132eed9140, 0x3cbced2cbbbe7d16 -data8 0x80fc3f4d3b657c44, 0xff053325a0c8a2ec -data8 0x3fb667516b6c34c0, 0x3c6489c5fc68595a -data8 0x8101f5cf67ed2af8, 0xfeff8d8d73dec2bb -data8 0x3fb6a791120f33a0, 0x3cbe12acf159dfad -data8 0x8107bd1558d6291f, 0xfef9d7c4d043df29 -data8 0x3fb6e7d226fabba0, 0x3ca386d099cd0dc7 -data8 0x810d95237e38766a, 0xfef411ca9f80b5f7 -data8 0x3fb72814ae53cc20, 0x3cb9f35731e71dd6 -data8 0x81137dfe55aa0e29, 0xfeee3b9dc7eef009 -data8 0x3fb76858ac403a00, 0x3c74df3dd959141a -data8 0x811977aa6a479f0f, 0xfee8553d2cb8122c -data8 0x3fb7a89e24e6b0e0, 0x3ca6034406ee42bc -data8 0x811f822c54bd5ef8, 0xfee25ea7add46a91 -data8 0x3fb7e8e51c6eb6a0, 0x3cb82f8f78e68ed7 -data8 0x81259d88bb4ffac1, 0xfedc57dc2809fb1d -data8 0x3fb8292d9700ad60, 0x3cbebb73c0e653f9 -data8 0x812bc9c451e5a257, 0xfed640d974eb6068 -data8 0x3fb8697798c5d620, 0x3ca2feee76a9701b -data8 0x813206e3da0f3124, 0xfed0199e6ad6b585 -data8 0x3fb8a9c325e852e0, 0x3cb9e88f2f4d0efe -data8 0x813854ec231172f9, 0xfec9e229dcf4747d -data8 0x3fb8ea1042932a00, 0x3ca5ff40d81f66fd -data8 0x813eb3e209ee858f, 0xfec39a7a9b36538b -data8 0x3fb92a5ef2f247c0, 0x3cb5e3bece4d6b07 -data8 0x814523ca796f56ce, 0xfebd428f72561efe -data8 0x3fb96aaf3b3281a0, 0x3cb7b9e499436d7c -data8 0x814ba4aa6a2d3ff9, 0xfeb6da672bd48fe4 -data8 0x3fb9ab011f819860, 0x3cb9168143cc1a7f -data8 0x81523686e29bbdd7, 0xfeb062008df81f50 -data8 0x3fb9eb54a40e3ac0, 0x3cb6e544197eb1e1 -data8 0x8158d964f7124614, 0xfea9d95a5bcbd65a -data8 0x3fba2ba9cd080800, 0x3ca9a717be8f7446 -data8 0x815f8d49c9d639e4, 0xfea34073551e1ac8 -data8 0x3fba6c009e9f9260, 0x3c741e989a60938a -data8 0x8166523a8b24f626, 0xfe9c974a367f785c -data8 0x3fbaac591d0661a0, 0x3cb2c1290107e57d -data8 0x816d283c793e0114, 0xfe95ddddb94166cb -data8 0x3fbaecb34c6ef600, 0x3c9c7d5fbaec405d -data8 0x81740f54e06d55bd, 0xfe8f142c93750c50 -data8 0x3fbb2d0f310cca00, 0x3cbc09479a9cbcfb -data8 0x817b07891b15cd5e, 0xfe883a3577e9fceb -data8 0x3fbb6d6ccf1455e0, 0x3cb9450bff4ee307 -data8 0x818210de91bba6c8, 0xfe814ff7162cf62f -data8 0x3fbbadcc2abb1180, 0x3c9227fda12a8d24 -data8 0x81892b5abb0f2bf9, 0xfe7a55701a8697b1 -data8 0x3fbbee2d48377700, 0x3cb6fad72acfe356 -data8 0x819057031bf7760e, 0xfe734a9f2dfa1810 -data8 0x3fbc2e902bc10600, 0x3cb4465b588d16ad -data8 0x819793dd479d4fbe, 0xfe6c2f82f643f68b -data8 0x3fbc6ef4d9904580, 0x3c8b9ac54823960d -data8 0x819ee1eedf76367a, 0xfe65041a15d8a92c -data8 0x3fbcaf5b55dec6a0, 0x3ca2b8d28a954db2 -data8 0x81a6413d934f7a66, 0xfe5dc8632be3477f -data8 0x3fbcefc3a4e727a0, 0x3c9380da83713ab4 -data8 0x81adb1cf21597d4b, 0xfe567c5cd44431d5 -data8 0x3fbd302dcae51600, 0x3ca995b83421756a -data8 0x81b533a9563310b8, 0xfe4f2005a78fb50f -data8 0x3fbd7099cc155180, 0x3caefa2f7a817d5f -data8 0x81bcc6d20cf4f373, 0xfe47b35c3b0caaeb -data8 0x3fbdb107acb5ae80, 0x3cb455fc372dd026 -data8 0x81c46b4f2f3d6e68, 0xfe40365f20b316d6 -data8 0x3fbdf177710518c0, 0x3cbee3dcc5b01434 -data8 0x81cc2126b53c1144, 0xfe38a90ce72abf36 -data8 0x3fbe31e91d439620, 0x3cb3e131c950aebd -data8 0x81d3e85ea5bd8ee2, 0xfe310b6419c9c33a -data8 0x3fbe725cb5b24900, 0x3c01d3fac6029027 -data8 0x81dbc0fd1637b9c1, 0xfe295d6340932d15 -data8 0x3fbeb2d23e937300, 0x3c6304cc44aeedd1 -data8 0x81e3ab082ad5a0a4, 0xfe219f08e03580b3 -data8 0x3fbef349bc2a77e0, 0x3cac1d2d6abe9c72 -data8 0x81eba6861683cb97, 0xfe19d0537a0946e2 -data8 0x3fbf33c332bbe020, 0x3ca0909dba4e96ca -data8 0x81f3b37d1afc9979, 0xfe11f1418c0f94e2 -data8 0x3fbf743ea68d5b60, 0x3c937fc12a2a779a -data8 0x81fbd1f388d4be45, 0xfe0a01d190f09063 -data8 0x3fbfb4bc1be5c340, 0x3cbf51a504b55813 -data8 0x820401efbf87e248, 0xfe020201fff9efea -data8 0x3fbff53b970d1e80, 0x3ca625444b260078 -data8 0x82106ad2ffdca049, 0xfdf5e3940a49135e -data8 0x3fc02aff52065460, 0x3c9125d113e22a57 -data8 0x8221343d6ea1d3e2, 0xfde581a45429b0a0 -data8 0x3fc06b84f8e03220, 0x3caccf362295894b -data8 0x82324434adbf99c2, 0xfdd4de1a001fb775 -data8 0x3fc0ac0ed1fe7240, 0x3cc22f676096b0af -data8 0x82439aee8d0c7747, 0xfdc3f8e8269d1f03 -data8 0x3fc0ec9cee9e4820, 0x3cca147e2886a628 -data8 0x825538a1d0fcb2f0, 0xfdb2d201a9b1ba66 -data8 0x3fc12d2f6006f0a0, 0x3cc72b36633bc2d4 -data8 0x82671d86345c5cee, 0xfda1695934d723e7 -data8 0x3fc16dc63789de60, 0x3cb11f9c47c7b83f -data8 0x827949d46a121770, 0xfd8fbee13cbbb823 -data8 0x3fc1ae618682e620, 0x3cce1b59020cef8e -data8 0x828bbdc61eeab9ba, 0xfd7dd28bff0c9f34 -data8 0x3fc1ef015e586c40, 0x3cafec043e0225ee -data8 0x829e7995fb6de9e1, 0xfd6ba44b823ee1ca -data8 0x3fc22fa5d07b90c0, 0x3cba905409caf8e3 -data8 0x82b17d7fa5bbc982, 0xfd5934119557883a -data8 0x3fc2704eee685da0, 0x3cb5ef21838a823e -data8 0x82c4c9bfc373d276, 0xfd4681cfcfb2c161 -data8 0x3fc2b0fcc9a5f3e0, 0x3ccc7952c5e0e312 -data8 0x82d85e93fba50136, 0xfd338d7790ca0f41 -data8 0x3fc2f1af73c6ba00, 0x3cbecf5f977d1ca9 -data8 0x82ec3c3af8c76b32, 0xfd2056f9fff97727 -data8 0x3fc33266fe6889a0, 0x3c9d329c022ebdb5 -data8 0x830062f46abf6022, 0xfd0cde480c43b327 -data8 0x3fc373237b34de60, 0x3cc95806d4928adb -data8 0x8314d30108ea35f0, 0xfcf923526c1562b2 -data8 0x3fc3b3e4fbe10520, 0x3cbc299fe7223d54 -data8 0x83298ca29434df97, 0xfce526099d0737ed -data8 0x3fc3f4ab922e4a60, 0x3cb59d8bb8fdbccc -data8 0x833e901bd93c7009, 0xfcd0e65de39f1f7c -data8 0x3fc435774fea2a60, 0x3c9ec18b43340914 -data8 0x8353ddb0b278aad8, 0xfcbc643f4b106055 -data8 0x3fc4764846ee80a0, 0x3cb90402efd87ed6 -data8 0x836975a60a70c52e, 0xfca79f9da4fab13a -data8 0x3fc4b71e8921b860, 0xbc58f23449ed6365 -data8 0x837f5841ddfa7a46, 0xfc92986889284148 -data8 0x3fc4f7fa2876fca0, 0xbc6294812bf43acd -data8 0x839585cb3e839773, 0xfc7d4e8f554ab12f -data8 0x3fc538db36ee6960, 0x3cb910b773d4c578 -data8 0x83abfe8a5466246f, 0xfc67c2012cb6fa68 -data8 0x3fc579c1c6953cc0, 0x3cc5ede909fc47fc -data8 0x83c2c2c861474d91, 0xfc51f2acf82041d5 -data8 0x3fc5baade9860880, 0x3cac63cdfc3588e5 -data8 0x83d9d2cfc2813637, 0xfc3be08165519325 -data8 0x3fc5fb9fb1e8e3a0, 0x3cbf7c8466578c29 -data8 0x83f12eebf397daac, 0xfc258b6ce6e6822f -data8 0x3fc63c9731f39d40, 0x3cb6d2a7ffca3e9e -data8 0x8408d76990b9296e, 0xfc0ef35db402af94 -data8 0x3fc67d947be9eec0, 0x3cb1980da09e6566 -data8 0x8420cc9659487cd7, 0xfbf81841c8082dc4 -data8 0x3fc6be97a21daf00, 0x3cc2ac8330e59aa5 -data8 0x84390ec132759ecb, 0xfbe0fa06e24cc390 -data8 0x3fc6ffa0b6ef05e0, 0x3ccc1a030fee56c4 -data8 0x84519e3a29df811a, 0xfbc9989a85ce0954 -data8 0x3fc740afcccca000, 0x3cc19692a5301ca6 -data8 0x846a7b527842d61b, 0xfbb1f3e9f8e45dc4 -data8 0x3fc781c4f633e2c0, 0x3cc0e98f3868a508 -data8 0x8483a65c8434b5f0, 0xfb9a0be244f4af45 -data8 0x3fc7c2e045b12140, 0x3cb2a8d309754420 -data8 0x849d1fabe4e97dd7, 0xfb81e070362116d1 -data8 0x3fc80401cddfd120, 0x3ca7a44544aa4ce6 -data8 0x84b6e795650817ea, 0xfb6971805af8411e -data8 0x3fc84529a16ac020, 0x3c9e3b709c7d6f94 -data8 0x84d0fe6f0589da92, 0xfb50beff0423a2f5 -data8 0x3fc88657d30c49e0, 0x3cc60d65a7f0a278 -data8 0x84eb649000a73014, 0xfb37c8d84414755c -data8 0x3fc8c78c758e8e80, 0x3cc94b2ee984c2b7 -data8 0x85061a50ccd13781, 0xfb1e8ef7eeaf764b -data8 0x3fc908c79bcba900, 0x3cc8540ae794a2fe -data8 0x8521200b1fb8916e, 0xfb05114998f76a83 -data8 0x3fc94a0958ade6c0, 0x3ca127f49839fa9c -data8 0x853c7619f1618bf6, 0xfaeb4fb898b65d19 -data8 0x3fc98b51bf2ffee0, 0x3c8c9ba7a803909a -data8 0x85581cd97f45e274, 0xfad14a3004259931 -data8 0x3fc9cca0e25d4ac0, 0x3cba458e91d3bf54 -data8 0x857414a74f8446b4, 0xfab7009ab1945a54 -data8 0x3fca0df6d551fe80, 0x3cc78ea1d329d2b2 -data8 0x85905de2341dea46, 0xfa9c72e3370d2fbc -data8 0x3fca4f53ab3b6200, 0x3ccf60dca86d57ef -data8 0x85acf8ea4e423ff8, 0xfa81a0f3e9fa0ee9 -data8 0x3fca90b777580aa0, 0x3ca4c4e2ec8a867e -data8 0x85c9e62111a92e7d, 0xfa668ab6dec711b1 -data8 0x3fcad2224cf814e0, 0x3c303de5980d071c -data8 0x85e725e947fbee97, 0xfa4b3015e883dbfe -data8 0x3fcb13943f7d5f80, 0x3cc29d4eefa5cb1e -data8 0x8604b8a7144cd054, 0xfa2f90fa9883a543 -data8 0x3fcb550d625bc6a0, 0x3c9e01a746152daf -data8 0x86229ebff69e2415, 0xfa13ad4e3dfbe1c1 -data8 0x3fcb968dc9195ea0, 0x3ccc091bd73ae518 -data8 0x8640d89acf78858c, 0xf9f784f9e5a1877b -data8 0x3fcbd815874eb160, 0x3cb5f4b89875e187 -data8 0x865f669fe390c7f5, 0xf9db17e65944eacf -data8 0x3fcc19a4b0a6f9c0, 0x3cc5c0bc2b0bbf14 -data8 0x867e4938df7dc45f, 0xf9be65fc1f6c2e6e -data8 0x3fcc5b3b58e061e0, 0x3cc1ca70df8f57e7 -data8 0x869d80d0db7e4c0c, 0xf9a16f237aec427a -data8 0x3fcc9cd993cc4040, 0x3cbae93acc85eccf -data8 0x86bd0dd45f4f8265, 0xf98433446a806e70 -data8 0x3fccde7f754f5660, 0x3cb22f70e64568d0 -data8 0x86dcf0b16613e37a, 0xf966b246a8606170 -data8 0x3fcd202d11620fa0, 0x3c962030e5d4c849 -data8 0x86fd29d7624b3d5d, 0xf948ec11a9d4c45b -data8 0x3fcd61e27c10c0a0, 0x3cc7083c91d59217 -data8 0x871db9b741dbe44a, 0xf92ae08c9eca4941 -data8 0x3fcda39fc97be7c0, 0x3cc9258579e57211 -data8 0x873ea0c3722d6af2, 0xf90c8f9e71633363 -data8 0x3fcde5650dd86d60, 0x3ca4755a9ea582a9 -data8 0x875fdf6fe45529e8, 0xf8edf92dc5875319 -data8 0x3fce27325d6fe520, 0x3cbc1e2b6c1954f9 -data8 0x878176321154e2bc, 0xf8cf1d20f87270b8 -data8 0x3fce6907cca0d060, 0x3cb6ca4804750830 -data8 0x87a36580fe6bccf5, 0xf8affb5e20412199 -data8 0x3fceaae56fdee040, 0x3cad6b310d6fd46c -data8 0x87c5add5417a5cb9, 0xf89093cb0b7c0233 -data8 0x3fceeccb5bb33900, 0x3cc16e99cedadb20 -data8 0x87e84fa9057914ca, 0xf870e64d40a15036 -data8 0x3fcf2eb9a4bcb600, 0x3cc75ee47c8b09e9 -data8 0x880b4b780f02b709, 0xf850f2c9fdacdf78 -data8 0x3fcf70b05fb02e20, 0x3cad6350d379f41a -data8 0x882ea1bfc0f228ac, 0xf830b926379e6465 -data8 0x3fcfb2afa158b8a0, 0x3cce0ccd9f829985 -data8 0x885252ff21146108, 0xf810394699fe0e8e -data8 0x3fcff4b77e97f3e0, 0x3c9b30faa7a4c703 -data8 0x88765fb6dceebbb3, 0xf7ef730f865f6df0 -data8 0x3fd01b6406332540, 0x3cdc5772c9e0b9bd -data8 0x88ad1f69be2cc730, 0xf7bdc59bc9cfbd97 -data8 0x3fd04cf8ad203480, 0x3caeef44fe21a74a -data8 0x88f763f70ae2245e, 0xf77a91c868a9c54e -data8 0x3fd08f23ce0162a0, 0x3cd6290ab3fe5889 -data8 0x89431fc7bc0c2910, 0xf73642973c91298e -data8 0x3fd0d1610f0c1ec0, 0x3cc67401a01f08cf -data8 0x8990573407c7738e, 0xf6f0d71d1d7a2dd6 -data8 0x3fd113b0c65d88c0, 0x3cc7aa4020fe546f -data8 0x89df0eb108594653, 0xf6aa4e6a05cfdef2 -data8 0x3fd156134ada6fe0, 0x3cc87369da09600c -data8 0x8a2f4ad16e0ed78a, 0xf662a78900c35249 -data8 0x3fd19888f43427a0, 0x3cc62b220f38e49c -data8 0x8a811046373e0819, 0xf619e180181d97cc -data8 0x3fd1db121aed7720, 0x3ca3ede7490b52f4 -data8 0x8ad463df6ea0fa2c, 0xf5cffb504190f9a2 -data8 0x3fd21daf185fa360, 0x3caafad98c1d6c1b -data8 0x8b294a8cf0488daf, 0xf584f3f54b8604e6 -data8 0x3fd2606046bf95a0, 0x3cdb2d704eeb08fa -data8 0x8b7fc95f35647757, 0xf538ca65c960b582 -data8 0x3fd2a32601231ec0, 0x3cc661619fa2f126 -data8 0x8bd7e588272276f8, 0xf4eb7d92ff39fccb -data8 0x3fd2e600a3865760, 0x3c8a2a36a99aca4a -data8 0x8c31a45bf8e9255e, 0xf49d0c68cd09b689 -data8 0x3fd328f08ad12000, 0x3cb9efaf1d7ab552 -data8 0x8c8d0b520a35eb18, 0xf44d75cd993cfad2 -data8 0x3fd36bf614dcc040, 0x3ccacbb590bef70d -data8 0x8cea2005d068f23d, 0xf3fcb8a23ab4942b -data8 0x3fd3af11a079a6c0, 0x3cd9775872cf037d -data8 0x8d48e837c8cd5027, 0xf3aad3c1e2273908 -data8 0x3fd3f2438d754b40, 0x3ca03304f667109a -data8 0x8da969ce732f3ac7, 0xf357c60202e2fd7e -data8 0x3fd4358c3ca032e0, 0x3caecf2504ff1a9d -data8 0x8e0baad75555e361, 0xf3038e323ae9463a -data8 0x3fd478ec0fd419c0, 0x3cc64bdc3d703971 -data8 0x8e6fb18807ba877e, 0xf2ae2b1c3a6057f7 -data8 0x3fd4bc6369fa40e0, 0x3cbb7122ec245cf2 -data8 0x8ed5843f4bda74d5, 0xf2579b83aa556f0c -data8 0x3fd4fff2af11e2c0, 0x3c9cfa2dc792d394 -data8 0x8f3d29862c861fef, 0xf1ffde2612ca1909 -data8 0x3fd5439a4436d000, 0x3cc38d46d310526b -data8 0x8fa6a81128940b2d, 0xf1a6f1bac0075669 -data8 0x3fd5875a8fa83520, 0x3cd8bf59b8153f8a -data8 0x901206c1686317a6, 0xf14cd4f2a730d480 -data8 0x3fd5cb33f8cf8ac0, 0x3c9502b5c4d0e431 -data8 0x907f4ca5fe9cf739, 0xf0f186784a125726 -data8 0x3fd60f26e847b120, 0x3cc8a1a5e0acaa33 -data8 0x90ee80fd34aeda5e, 0xf09504ef9a212f18 -data8 0x3fd65333c7e43aa0, 0x3cae5b029cb1f26e -data8 0x915fab35e37421c6, 0xf0374ef5daab5c45 -data8 0x3fd6975b02b8e360, 0x3cd5aa1c280c45e6 -data8 0x91d2d2f0d894d73c, 0xefd86321822dbb51 -data8 0x3fd6db9d05213b20, 0x3cbecf2c093ccd8b -data8 0x9248000249200009, 0xef7840021aca5a72 -data8 0x3fd71ffa3cc87fc0, 0x3cb8d273f08d00d9 -data8 0x92bf3a7351f081d2, 0xef16e42021d7cbd5 -data8 0x3fd7647318b1ad20, 0x3cbce099d79cdc46 -data8 0x93388a8386725713, 0xeeb44dfce6820283 -data8 0x3fd7a908093fc1e0, 0x3ccb033ec17a30d9 -data8 0x93b3f8aa8e653812, 0xee507c126774fa45 -data8 0x3fd7edb9803e3c20, 0x3cc10aedb48671eb -data8 0x94318d99d341ade4, 0xedeb6cd32f891afb -data8 0x3fd83287f0e9cf80, 0x3c994c0c1505cd2a -data8 0x94b1523e3dedc630, 0xed851eaa3168f43c -data8 0x3fd87773cff956e0, 0x3cda3b7bce6a6b16 -data8 0x95334fc20577563f, 0xed1d8ffaa2279669 -data8 0x3fd8bc7d93a70440, 0x3cd4922edc792ce2 -data8 0x95b78f8e8f92f274, 0xecb4bf1fd2be72da -data8 0x3fd901a5b3b9cf40, 0x3cd3fea1b00f9d0d -data8 0x963e1b4e63a87c3f, 0xec4aaa6d08694cc1 -data8 0x3fd946eca98f2700, 0x3cdba4032d968ff1 -data8 0x96c6fcef314074fc, 0xebdf502d53d65fea -data8 0x3fd98c52f024e800, 0x3cbe7be1ab8c95c9 -data8 0x97523ea3eab028b2, 0xeb72aea36720793e -data8 0x3fd9d1d904239860, 0x3cd72d08a6a22b70 -data8 0x97dfeae6f4ee4a9a, 0xeb04c4096a884e94 -data8 0x3fda177f63e8ef00, 0x3cd818c3c1ebfac7 -data8 0x98700c7c6d85d119, 0xea958e90cfe1efd7 -data8 0x3fda5d468f92a540, 0x3cdf45fbfaa080fe -data8 0x9902ae7487a9caa1, 0xea250c6224aab21a -data8 0x3fdaa32f090998e0, 0x3cd715a9353cede4 -data8 0x9997dc2e017a9550, 0xe9b33b9ce2bb7638 -data8 0x3fdae939540d3f00, 0x3cc545c014943439 -data8 0x9a2fa158b29b649b, 0xe9401a573f8aa706 -data8 0x3fdb2f65f63f6c60, 0x3cd4a63c2f2ca8e2 -data8 0x9aca09f835466186, 0xe8cba69df9f0bf35 -data8 0x3fdb75b5773075e0, 0x3cda310ce1b217ec -data8 0x9b672266ab1e0136, 0xe855de74266193d4 -data8 0x3fdbbc28606babc0, 0x3cdc84b75cca6c44 -data8 0x9c06f7579f0b7bd5, 0xe7debfd2f98c060b -data8 0x3fdc02bf3d843420, 0x3cd225d967ffb922 -data8 0x9ca995db058cabdc, 0xe76648a991511c6e -data8 0x3fdc497a9c224780, 0x3cde08101c5b825b -data8 0x9d4f0b605ce71e88, 0xe6ec76dcbc02d9a7 -data8 0x3fdc905b0c10d420, 0x3cb1abbaa3edf120 -data8 0x9df765b9eecad5e6, 0xe6714846bdda7318 -data8 0x3fdcd7611f4b8a00, 0x3cbf6217ae80aadf -data8 0x9ea2b320350540fe, 0xe5f4bab71494cd6b -data8 0x3fdd1e8d6a0d56c0, 0x3cb726e048cc235c -data8 0x9f51023562fc5676, 0xe576cbf239235ecb -data8 0x3fdd65e082df5260, 0x3cd9e66872bd5250 -data8 0xa002620915c2a2f6, 0xe4f779b15f5ec5a7 -data8 0x3fddad5b02a82420, 0x3c89743b0b57534b -data8 0xa0b6e21c2caf9992, 0xe476c1a233a7873e -data8 0x3fddf4fd84bbe160, 0x3cbf7adea9ee3338 -data8 0xa16e9264cc83a6b2, 0xe3f4a16696608191 -data8 0x3fde3cc8a6ec6ee0, 0x3cce46f5a51f49c6 -data8 0xa22983528f3d8d49, 0xe3711694552da8a8 -data8 0x3fde84bd099a6600, 0x3cdc78f6490a2d31 -data8 0xa2e7c5d2e2e69460, 0xe2ec1eb4e1e0a5fb -data8 0x3fdeccdb4fc685c0, 0x3cdd3aedb56a4825 -data8 0xa3a96b5599bd2532, 0xe265b74506fbe1c9 -data8 0x3fdf15241f23b3e0, 0x3cd440f3c6d65f65 -data8 0xa46e85d1ae49d7de, 0xe1ddddb499b3606f -data8 0x3fdf5d98202994a0, 0x3cd6c44bd3fb745a -data8 0xa53727ca3e11b99e, 0xe1548f662951b00d -data8 0x3fdfa637fe27bf60, 0x3ca8ad1cd33054dd -data8 0xa6036453bdc20186, 0xe0c9c9aeabe5e481 -data8 0x3fdfef0467599580, 0x3cc0f1ac0685d78a -data8 0xa6d34f1969dda338, 0xe03d89d5281e4f81 -data8 0x3fe01bff067d6220, 0x3cc0731e8a9ef057 -data8 0xa7a6fc62f7246ff3, 0xdfafcd125c323f54 -data8 0x3fe04092d1ae3b40, 0x3ccabda24b59906d -data8 0xa87e811a861df9b9, 0xdf20909061bb9760 -data8 0x3fe0653df0fd9fc0, 0x3ce94c8dcc722278 -data8 0xa959f2d2dd687200, 0xde8fd16a4e5f88bd -data8 0x3fe08a00c1cae320, 0x3ce6b888bb60a274 -data8 0xaa3967cdeea58bda, 0xddfd8cabd1240d22 -data8 0x3fe0aedba3221c00, 0x3ced5941cd486e46 -data8 0xab904fd587263c84, 0xdd1f4472e1cf64ed -data8 0x3fe0e651e85229c0, 0x3cdb6701042299b1 -data8 0xad686d44dd5a74bb, 0xdbf173e1f6b46e92 -data8 0x3fe1309cbf4cdb20, 0x3cbf1be7bb3f0ec5 -data8 0xaf524e15640ebee4, 0xdabd54896f1029f6 -data8 0x3fe17b4ee1641300, 0x3ce81dd055b792f1 -data8 0xb14eca24ef7db3fa, 0xd982cb9ae2f47e41 -data8 0x3fe1c66b9ffd6660, 0x3cd98ea31eb5ddc7 -data8 0xb35ec807669920ce, 0xd841bd1b8291d0b6 -data8 0x3fe211f66db3a5a0, 0x3ca480c35a27b4a2 -data8 0xb5833e4755e04dd1, 0xd6fa0bd3150b6930 -data8 0x3fe25df2e05b6c40, 0x3ca4bc324287a351 -data8 0xb7bd34c8000b7bd3, 0xd5ab9939a7d23aa1 -data8 0x3fe2aa64b32f7780, 0x3cba67314933077c -data8 0xba0dc64d126cc135, 0xd4564563ce924481 -data8 0x3fe2f74fc9289ac0, 0x3cec1a1dc0efc5ec -data8 0xbc76222cbbfa74a6, 0xd2f9eeed501125a8 -data8 0x3fe344b82f859ac0, 0x3ceeef218de413ac -data8 0xbef78e31985291a9, 0xd19672e2182f78be -data8 0x3fe392a22087b7e0, 0x3cd2619ba201204c -data8 0xc19368b2b0629572, 0xd02baca5427e436a -data8 0x3fe3e11206694520, 0x3cb5d0b3143fe689 -data8 0xc44b2ae8c6733e51, 0xceb975d60b6eae5d -data8 0x3fe4300c7e945020, 0x3cbd367143da6582 -data8 0xc7206b894212dfef, 0xcd3fa6326ff0ac9a -data8 0x3fe47f965d201d60, 0x3ce797c7a4ec1d63 -data8 0xca14e1b0622de526, 0xcbbe13773c3c5338 -data8 0x3fe4cfb4b09d1a20, 0x3cedfadb5347143c -data8 0xcd2a6825eae65f82, 0xca34913d425a5ae9 -data8 0x3fe5206cc637e000, 0x3ce2798b38e54193 -data8 0xd06301095e1351ee, 0xc8a2f0d3679c08c0 -data8 0x3fe571c42e3d0be0, 0x3ccd7cb9c6c2ca68 -data8 0xd3c0d9f50057adda, 0xc70901152d59d16b -data8 0x3fe5c3c0c108f940, 0x3ceb6c13563180ab -data8 0xd74650a98cc14789, 0xc5668e3d4cbf8828 -data8 0x3fe61668a46ffa80, 0x3caa9092e9e3c0e5 -data8 0xdaf5f8579dcc8f8f, 0xc3bb61b3eed42d02 -data8 0x3fe669c251ad69e0, 0x3cccf896ef3b4fee -data8 0xded29f9f9a6171b4, 0xc20741d7f8e8e8af -data8 0x3fe6bdd49bea05c0, 0x3cdc6b29937c575d -data8 0xe2df5765854ccdb0, 0xc049f1c2d1b8014b -data8 0x3fe712a6b76c6e80, 0x3ce1ddc6f2922321 -data8 0xe71f7a9b94fcb4c3, 0xbe833105ec291e91 -data8 0x3fe76840418978a0, 0x3ccda46e85432c3d -data8 0xeb96b72d3374b91e, 0xbcb2bb61493b28b3 -data8 0x3fe7bea9496d5a40, 0x3ce37b42ec6e17d3 -data8 0xf049183c3f53c39b, 0xbad848720223d3a8 -data8 0x3fe815ea59dab0a0, 0x3cb03ad41bfc415b -data8 0xf53b11ec7f415f15, 0xb8f38b57c53c9c48 -data8 0x3fe86e0c84010760, 0x3cc03bfcfb17fe1f -data8 0xfa718f05adbf2c33, 0xb70432500286b185 -data8 0x3fe8c7196b9225c0, 0x3ced99fcc6866ba9 -data8 0xfff200c3f5489608, 0xb509e6454dca33cc -data8 0x3fe9211b54441080, 0x3cb789cb53515688 -// The following table entries are not used -//data8 0x82e138a0fac48700, 0xb3044a513a8e6132 -//data8 0x3fe97c1d30f5b7c0, 0x3ce1eb765612d1d0 -//data8 0x85f4cc7fc670d021, 0xb0f2fb2ea6cbbc88 -//data8 0x3fe9d82ab4b5fde0, 0x3ced3fe6f27e8039 -//data8 0x89377c1387d5b908, 0xaed58e9a09014d5c -//data8 0x3fea355065f87fa0, 0x3cbef481d25f5b58 -//data8 0x8cad7a2c98dec333, 0xacab929ce114d451 -//data8 0x3fea939bb451e2a0, 0x3c8e92b4fbf4560f -//data8 0x905b7dfc99583025, 0xaa748cc0dbbbc0ec -//data8 0x3feaf31b11270220, 0x3cdced8c61bd7bd5 -//data8 0x9446d8191f80dd42, 0xa82ff92687235baf -//data8 0x3feb53de0bcffc20, 0x3cbe1722fb47509e -//data8 0x98758ba086e4000a, 0xa5dd497a9c184f58 -//data8 0x3febb5f571cb0560, 0x3ce0c7774329a613 -//data8 0x9cee6c7bf18e4e24, 0xa37be3c3cd1de51b -//data8 0x3fec197373bc7be0, 0x3ce08ebdb55c3177 -//data8 0xa1b944000a1b9440, 0xa10b2101b4f27e03 -//data8 0x3fec7e6bd023da60, 0x3ce5fc5fd4995959 -//data8 0xa6defd8ba04d3e38, 0x9e8a4b93cad088ec -//data8 0x3fece4f404e29b20, 0x3cea3413401132b5 -//data8 0xac69dd408a10c62d, 0x9bf89d5d17ddae8c -//data8 0x3fed4d2388f63600, 0x3cd5a7fb0d1d4276 -//data8 0xb265c39cbd80f97a, 0x99553d969fec7beb -//data8 0x3fedb714101e0a00, 0x3cdbda21f01193f2 -//data8 0xb8e081a16ae4ae73, 0x969f3e3ed2a0516c -//data8 0x3fee22e1da97bb00, 0x3ce7231177f85f71 -//data8 0xbfea427678945732, 0x93d5990f9ee787af -//data8 0x3fee90ac13b18220, 0x3ce3c8a5453363a5 -//data8 0xc79611399b8c90c5, 0x90f72bde80febc31 -//data8 0x3fef009542b712e0, 0x3ce218fd79e8cb56 -//data8 0xcffa8425040624d7, 0x8e02b4418574ebed -//data8 0x3fef72c3d2c57520, 0x3cd32a717f82203f -//data8 0xd93299cddcf9cf23, 0x8af6ca48e9c44024 -//data8 0x3fefe762b77744c0, 0x3ce53478a6bbcf94 -//data8 0xe35eda760af69ad9, 0x87d1da0d7f45678b -//data8 0x3ff02f511b223c00, 0x3ced6e11782c28fc -//data8 0xeea6d733421da0a6, 0x84921bbe64ae029a -//data8 0x3ff06c5c6f8ce9c0, 0x3ce71fc71c1ffc02 -//data8 0xfb3b2c73fc6195cc, 0x813589ba3a5651b6 -//data8 0x3ff0aaf2613700a0, 0x3cf2a72d2fd94ef3 -//data8 0x84ac1fcec4203245, 0xfb73a828893df19e -//data8 0x3ff0eb367c3fd600, 0x3cf8054c158610de -//data8 0x8ca50621110c60e6, 0xf438a14c158d867c -//data8 0x3ff12d51caa6b580, 0x3ce6bce9748739b6 -//data8 0x95b8c2062d6f8161, 0xecb3ccdd37b369da -//data8 0x3ff1717418520340, 0x3ca5c2732533177c -//data8 0xa0262917caab4ad1, 0xe4dde4ddc81fd119 -//data8 0x3ff1b7d59dd40ba0, 0x3cc4c7c98e870ff5 -//data8 0xac402c688b72f3f4, 0xdcae469be46d4c8d -//data8 0x3ff200b93cc5a540, 0x3c8dd6dc1bfe865a -//data8 0xba76968b9eabd9ab, 0xd41a8f3df1115f7f -//data8 0x3ff24c6f8f6affa0, 0x3cf1acb6d2a7eff7 -//data8 0xcb63c87c23a71dc5, 0xcb161074c17f54ec -//data8 0x3ff29b5b338b7c80, 0x3ce9b5845f6ec746 -//data8 0xdfe323b8653af367, 0xc19107d99ab27e42 -//data8 0x3ff2edf6fac7f5a0, 0x3cf77f961925fa02 -//data8 0xf93746caaba3e1f1, 0xb777744a9df03bff -//data8 0x3ff344df237486c0, 0x3cf6ddf5f6ddda43 -//data8 0x8ca77052f6c340f0, 0xacaf476f13806648 -//data8 0x3ff3a0dfa4bb4ae0, 0x3cfee01bbd761bff -//data8 0xa1a48604a81d5c62, 0xa11575d30c0aae50 -//data8 0x3ff4030b73c55360, 0x3cf1cf0e0324d37c -//data8 0xbe45074b05579024, 0x9478e362a07dd287 -//data8 0x3ff46ce4c738c4e0, 0x3ce3179555367d12 -//data8 0xe7a08b5693d214ec, 0x8690e3575b8a7c3b -//data8 0x3ff4e0a887c40a80, 0x3cfbd5d46bfefe69 -//data8 0x94503d69396d91c7, 0xedd2ce885ff04028 -//data8 0x3ff561ebd9c18cc0, 0x3cf331bd176b233b -//data8 0xced1d96c5bb209e6, 0xc965278083808702 -//data8 0x3ff5f71d7ff42c80, 0x3ce3301cc0b5a48c -//data8 0xabac2cee0fc24e20, 0x9c4eb1136094cbbd -//data8 0x3ff6ae4c63222720, 0x3cf5ff46874ee51e -//data8 0x8040201008040201, 0xb4d7ac4d9acb1bf4 -//data8 0x3ff7b7d33b928c40, 0x3cfacdee584023bb -LOCAL_OBJECT_END(T_table) - - - -.align 16 - -LOCAL_OBJECT_START(poly_coeffs) - // C_3 -data8 0xaaaaaaaaaaaaaaab, 0x0000000000003ffc - // C_5 -data8 0x999999999999999a, 0x0000000000003ffb - // C_7, C_9 -data8 0x3fa6db6db6db6db7, 0x3f9f1c71c71c71c8 - // pi/2 (low, high) -data8 0x3C91A62633145C07, 0x3FF921FB54442D18 - // C_11, C_13 -data8 0x3f96e8ba2e8ba2e9, 0x3f91c4ec4ec4ec4e - // C_15, C_17 -data8 0x3f8c99999999999a, 0x3f87a87878787223 -LOCAL_OBJECT_END(poly_coeffs) - - -R_DBL_S = r21 -R_EXP0 = r22 -R_EXP = r15 -R_SGNMASK = r23 -R_TMP = r24 -R_TMP2 = r25 -R_INDEX = r26 -R_TMP3 = r27 -R_TMP03 = r27 -R_TMP4 = r28 -R_TMP5 = r23 -R_TMP6 = r22 -R_TMP7 = r21 -R_T = r29 -R_BIAS = r20 - -F_T = f6 -F_1S2 = f7 -F_1S2_S = f9 -F_INV_1T2 = f10 -F_SQRT_1T2 = f11 -F_S2T2 = f12 -F_X = f13 -F_D = f14 -F_2M64 = f15 - -F_CS2 = f32 -F_CS3 = f33 -F_CS4 = f34 -F_CS5 = f35 -F_CS6 = f36 -F_CS7 = f37 -F_CS8 = f38 -F_CS9 = f39 -F_S23 = f40 -F_S45 = f41 -F_S67 = f42 -F_S89 = f43 -F_S25 = f44 -F_S69 = f45 -F_S29 = f46 -F_X2 = f47 -F_X4 = f48 -F_TSQRT = f49 -F_DTX = f50 -F_R = f51 -F_R2 = f52 -F_R3 = f53 -F_R4 = f54 - -F_C3 = f55 -F_C5 = f56 -F_C7 = f57 -F_C9 = f58 -F_P79 = f59 -F_P35 = f60 -F_P39 = f61 - -F_ATHI = f62 -F_ATLO = f63 - -F_T1 = f64 -F_Y = f65 -F_Y2 = f66 -F_ANDMASK = f67 -F_ORMASK = f68 -F_S = f69 -F_05 = f70 -F_SQRT_1S2 = f71 -F_DS = f72 -F_Z = f73 -F_1T2 = f74 -F_DZ = f75 -F_ZE = f76 -F_YZ = f77 -F_Y1S2 = f78 -F_Y1S2X = f79 -F_1X = f80 -F_ST = f81 -F_1T2_ST = f82 -F_TSS = f83 -F_Y1S2X2 = f84 -F_DZ_TERM = f85 -F_DTS = f86 -F_DS2X = f87 -F_T2 = f88 -F_ZY1S2S = f89 -F_Y1S2_1X = f90 -F_TS = f91 -F_PI2_LO = f92 -F_PI2_HI = f93 -F_S19 = f94 -F_INV1T2_2 = f95 -F_CORR = f96 -F_DZ0 = f97 - -F_C11 = f98 -F_C13 = f99 -F_C15 = f100 -F_C17 = f101 -F_P1113 = f102 -F_P1517 = f103 -F_P1117 = f104 -F_P317 = f105 -F_R8 = f106 -F_HI = f107 -F_1S2_HI = f108 -F_DS2 = f109 -F_Y2_2 = f110 -F_S2 = f111 -F_S_DS2 = f112 -F_S_1S2S = f113 -F_XL = f114 -F_2M128 = f115 - - -.section .text -GLOBAL_LIBM_ENTRY(asinl) - -{.mfi - // get exponent, mantissa (rounded to double precision) of s - getf.d R_DBL_S = f8 - // 1-s^2 - fnma.s1 F_1S2 = f8, f8, f1 - // r2 = pointer to T_table - addl r2 = @ltoff(T_table), gp -} - -{.mfi - // sign mask - mov R_SGNMASK = 0x20000 - nop.f 0 - // bias-63-1 - mov R_TMP03 = 0xffff-64;; -} - - -{.mfi - // get exponent of s - getf.exp R_EXP = f8 - nop.f 0 - // R_TMP4 = 2^45 - shl R_TMP4 = R_SGNMASK, 45-17 -} - -{.mlx - // load bias-4 - mov R_TMP = 0xffff-4 - // load RU(sqrt(2)/2) to integer register (in double format, shifted left by 1) - movl R_TMP2 = 0x7fcd413cccfe779a;; -} - - -{.mfi - // load 2^{-64} in FP register - setf.exp F_2M64 = R_TMP03 - nop.f 0 - // index = (0x7-exponent)|b1 b2.. b6 - extr.u R_INDEX = R_DBL_S, 46, 9 -} - -{.mfi - // get t = sign|exponent|b1 b2.. b6 1 x.. x - or R_T = R_DBL_S, R_TMP4 - nop.f 0 - // R_TMP4 = 2^45-1 - sub R_TMP4 = R_TMP4, r0, 1;; -} - - -{.mfi - // get t = sign|exponent|b1 b2.. b6 1 0.. 0 - andcm R_T = R_T, R_TMP4 - nop.f 0 - // eliminate sign from R_DBL_S (shift left by 1) - shl R_TMP3 = R_DBL_S, 1 -} - -{.mfi - // R_BIAS = 3*2^6 - mov R_BIAS = 0xc0 - nop.f 0 - // eliminate sign from R_EXP - andcm R_EXP0 = R_EXP, R_SGNMASK;; -} - - - -{.mfi - // load start address for T_table - ld8 r2 = [r2] - nop.f 0 - // p8 = 1 if |s|> = sqrt(2)/2 - cmp.geu p8, p0 = R_TMP3, R_TMP2 -} - -{.mlx - // p7 = 1 if |s|<2^{-4} (exponent of s = sqrt(2)/2, take alternate path - (p8) br.cond.sptk LARGE_S -} - -{.mlx - // index = (4-exponent)|b1 b2.. b6 - sub R_INDEX = R_INDEX, R_BIAS - // sqrt coefficient cs9 = 55*13/128 - movl R_TMP = 0x40b2c000;; -} - - -{.mfi - // sqrt coefficient cs8 = -33*13/128 - setf.s F_CS8 = R_TMP2 - nop.f 0 - // shift R_INDEX by 5 - shl R_INDEX = R_INDEX, 5 -} - -{.mfi - // sqrt coefficient cs3 = 0.5 (set exponent = bias-1) - mov R_TMP4 = 0xffff - 1 - nop.f 0 - // sqrt coefficient cs6 = -21/16 - mov R_TMP6 = 0xbfa8;; -} - - -{.mlx - // table index - add r2 = r2, R_INDEX - // sqrt coefficient cs7 = 33/16 - movl R_TMP2 = 0x40040000;; -} - - -{.mmi - // load cs9 = 55*13/128 - setf.s F_CS9 = R_TMP - // sqrt coefficient cs5 = 7/8 - mov R_TMP3 = 0x3f60 - // sqrt coefficient cs6 = 21/16 - shl R_TMP6 = R_TMP6, 16;; -} - - -{.mmi - // load significand of 1/(1-t^2) - ldf8 F_INV_1T2 = [r2], 8 - // sqrt coefficient cs7 = 33/16 - setf.s F_CS7 = R_TMP2 - // sqrt coefficient cs4 = -5/8 - mov R_TMP5 = 0xbf20;; -} - - -{.mmi - // load significand of sqrt(1-t^2) - ldf8 F_SQRT_1T2 = [r2], 8 - // sqrt coefficient cs6 = 21/16 - setf.s F_CS6 = R_TMP6 - // sqrt coefficient cs5 = 7/8 - shl R_TMP3 = R_TMP3, 16;; -} - - -{.mmi - // sqrt coefficient cs3 = 0.5 (set exponent = bias-1) - setf.exp F_CS3 = R_TMP4 - // r3 = pointer to polynomial coefficients - addl r3 = @ltoff(poly_coeffs), gp - // sqrt coefficient cs4 = -5/8 - shl R_TMP5 = R_TMP5, 16;; -} - - -{.mfi - // sqrt coefficient cs5 = 7/8 - setf.s F_CS5 = R_TMP3 - // d = s-t - fms.s1 F_D = f8, f1, F_T - // set p6 = 1 if s<0, p11 = 1 if s> = 0 - cmp.ge p6, p11 = R_EXP, R_DBL_S -} - -{.mfi - // r3 = load start address to polynomial coefficients - ld8 r3 = [r3] - // s+t - fma.s1 F_S2T2 = f8, f1, F_T - nop.i 0;; -} - - -{.mfi - // sqrt coefficient cs4 = -5/8 - setf.s F_CS4 = R_TMP5 - // s^2-t^2 - fma.s1 F_S2T2 = F_S2T2, F_D, f0 - nop.i 0;; -} - - -{.mfi - // load C3 - ldfe F_C3 = [r3], 16 - // 0.5/(1-t^2) = 2^{-64}*(2^63/(1-t^2)) - fma.s1 F_INV_1T2 = F_INV_1T2, F_2M64, f0 - nop.i 0;; -} - -{.mfi - // load C_5 - ldfe F_C5 = [r3], 16 - // set correct exponent for sqrt(1-t^2) - fma.s1 F_SQRT_1T2 = F_SQRT_1T2, F_2M64, f0 - nop.i 0;; -} - - -{.mfi - // load C_7, C_9 - ldfpd F_C7, F_C9 = [r3] - // x = -(s^2-t^2)/(1-t^2)/2 - fnma.s1 F_X = F_INV_1T2, F_S2T2, f0 - nop.i 0;; -} - - -{.mfi - // load asin(t)_high, asin(t)_low - ldfpd F_ATHI, F_ATLO = [r2] - // t*sqrt(1-t^2) - fma.s1 F_TSQRT = F_T, F_SQRT_1T2, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // cs9*x+cs8 - fma.s1 F_S89 = F_CS9, F_X, F_CS8 - nop.i 0 -} - -{.mfi - nop.m 0 - // cs7*x+cs6 - fma.s1 F_S67 = F_CS7, F_X, F_CS6 - nop.i 0;; -} - -{.mfi - nop.m 0 - // cs5*x+cs4 - fma.s1 F_S45 = F_CS5, F_X, F_CS4 - nop.i 0 -} - -{.mfi - nop.m 0 - // x*x - fma.s1 F_X2 = F_X, F_X, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (s-t)-t*x - fnma.s1 F_DTX = F_T, F_X, F_D - nop.i 0 -} - -{.mfi - nop.m 0 - // cs3*x+cs2 (cs2 = -0.5 = -cs3) - fms.s1 F_S23 = F_CS3, F_X, F_CS3 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // cs9*x^3+cs8*x^2+cs7*x+cs6 - fma.s1 F_S69 = F_S89, F_X2, F_S67 - nop.i 0 -} - -{.mfi - nop.m 0 - // x^4 - fma.s1 F_X4 = F_X2, F_X2, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // t*sqrt(1-t^2)*x^2 - fma.s1 F_TSQRT = F_TSQRT, F_X2, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // cs5*x^3+cs4*x^2+cs3*x+cs2 - fma.s1 F_S25 = F_S45, F_X2, F_S23 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // ((s-t)-t*x)*sqrt(1-t^2) - fma.s1 F_DTX = F_DTX, F_SQRT_1T2, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // if sign is negative, negate table values: asin(t)_low - (p6) fnma.s1 F_ATLO = F_ATLO, f1, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // PS29 = cs9*x^7+..+cs5*x^3+cs4*x^2+cs3*x+cs2 - fma.s1 F_S29 = F_S69, F_X4, F_S25 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // if sign is negative, negate table values: asin(t)_high - (p6) fnma.s1 F_ATHI = F_ATHI, f1, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // R = ((s-t)-t*x)*sqrt(1-t^2)-t*sqrt(1-t^2)*x^2*PS29 - fnma.s1 F_R = F_S29, F_TSQRT, F_DTX - nop.i 0;; -} - - -{.mfi - nop.m 0 - // R^2 - fma.s1 F_R2 = F_R, F_R, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // c7+c9*R^2 - fma.s1 F_P79 = F_C9, F_R2, F_C7 - nop.i 0 -} - -{.mfi - nop.m 0 - // c3+c5*R^2 - fma.s1 F_P35 = F_C5, F_R2, F_C3 - nop.i 0;; -} - -{.mfi - nop.m 0 - // R^3 - fma.s1 F_R4 = F_R2, F_R2, f0 - nop.i 0;; -} - -{.mfi - nop.m 0 - // R^3 - fma.s1 F_R3 = F_R2, F_R, f0 - nop.i 0;; -} - - - -{.mfi - nop.m 0 - // c3+c5*R^2+c7*R^4+c9*R^6 - fma.s1 F_P39 = F_P79, F_R4, F_P35 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // asin(t)_low+R^3*(c3+c5*R^2+c7*R^4+c9*R^6) - fma.s1 F_P39 = F_P39, F_R3, F_ATLO - nop.i 0;; -} - - -{.mfi - nop.m 0 - // R+asin(t)_low+R^3*(c3+c5*R^2+c7*R^4+c9*R^6) - fma.s1 F_P39 = F_P39, f1, F_R - nop.i 0;; -} - - -{.mfb - nop.m 0 - // result = asin(t)_high+R+asin(t)_low+R^3*(c3+c5*R^2+c7*R^4+c9*R^6) - fma.s0 f8 = F_ATHI, f1, F_P39 - // return - br.ret.sptk b0;; -} - - - - -LARGE_S: - -{.mfi - // bias-1 - mov R_TMP3 = 0xffff - 1 - // y ~ 1/sqrt(1-s^2) - frsqrta.s1 F_Y, p7 = F_1S2 - // c9 = 55*13*17/128 - mov R_TMP4 = 0x10af7b -} - -{.mlx - // c8 = -33*13*15/128 - mov R_TMP5 = 0x184923 - movl R_TMP2 = 0xff00000000000000;; -} - -{.mfi - // set p6 = 1 if s<0, p11 = 1 if s>0 - cmp.ge p6, p11 = R_EXP, R_DBL_S - // 1-s^2 - fnma.s1 F_1S2 = f8, f8, f1 - // set p9 = 1 - cmp.eq p9, p0 = r0, r0;; -} - - -{.mfi - // load 0.5 - setf.exp F_05 = R_TMP3 - // (1-s^2) rounded to single precision - fnma.s.s1 F_1S2_S = f8, f8, f1 - // c9 = 55*13*17/128 - shl R_TMP4 = R_TMP4, 10 -} - -{.mlx - // AND mask for getting t ~ sqrt(1-s^2) - setf.sig F_ANDMASK = R_TMP2 - // OR mask - movl R_TMP2 = 0x0100000000000000;; -} - - -{.mfi - nop.m 0 - // (s^2)_s - fma.s.s1 F_S2 = f8, f8, f0 - nop.i 0;; -} - - -{.mmi - // c9 = 55*13*17/128 - setf.s F_CS9 = R_TMP4 - // c7 = 33*13/16 - mov R_TMP4 = 0x41d68 - // c8 = -33*13*15/128 - shl R_TMP5 = R_TMP5, 11;; -} - - -{.mfi - setf.sig F_ORMASK = R_TMP2 - // y^2 - fma.s1 F_Y2 = F_Y, F_Y, f0 - // c7 = 33*13/16 - shl R_TMP4 = R_TMP4, 12 -} - -{.mfi - // c6 = -33*7/16 - mov R_TMP6 = 0xc1670 - // y' ~ sqrt(1-s^2) - fma.s1 F_T1 = F_Y, F_1S2, f0 - // c5 = 63/8 - mov R_TMP7 = 0x40fc;; -} - - -{.mlx - // load c8 = -33*13*15/128 - setf.s F_CS8 = R_TMP5 - // c4 = -35/8 - movl R_TMP5 = 0xc08c0000;; -} - -{.mfi - // r3 = pointer to polynomial coefficients - addl r3 = @ltoff(poly_coeffs), gp - // 1-(1-s^2)_s - fnma.s1 F_DS = F_1S2_S, f1, f1 - // p9 = 0 if p7 = 1 (p9 = 1 for special cases only) - (p7) cmp.ne p9, p0 = r0, r0 -} - -{.mlx - // load c7 = 33*13/16 - setf.s F_CS7 = R_TMP4 - // c3 = 5/2 - movl R_TMP4 = 0x40200000;; -} - - -{.mfi - nop.m 0 - // 1-(s^2)_s - fnma.s1 F_S_1S2S = F_S2, f1, f1 - nop.i 0 -} - -{.mlx - // load c4 = -35/8 - setf.s F_CS4 = R_TMP5 - // c2 = -3/2 - movl R_TMP5 = 0xbfc00000;; -} - - -{.mfi - // load c3 = 5/2 - setf.s F_CS3 = R_TMP4 - // x = (1-s^2)_s*y^2-1 - fms.s1 F_X = F_1S2_S, F_Y2, f1 - // c6 = -33*7/16 - shl R_TMP6 = R_TMP6, 12 -} - -{.mfi - nop.m 0 - // y^2/2 - fma.s1 F_Y2_2 = F_Y2, F_05, f0 - nop.i 0;; -} - - -{.mfi - // load c6 = -33*7/16 - setf.s F_CS6 = R_TMP6 - // eliminate lower bits from y' - fand F_T = F_T1, F_ANDMASK - // c5 = 63/8 - shl R_TMP7 = R_TMP7, 16 -} - -{.mfb - // r3 = load start address to polynomial coefficients - ld8 r3 = [r3] - // 1-(1-s^2)_s-s^2 - fnma.s1 F_DS = f8, f8, F_DS - // p9 = 1 if s is a special input (NaN, or |s|> = 1) - (p9) br.cond.spnt ASINL_SPECIAL_CASES;; -} - -{.mmf - // get exponent, significand of y' (in single prec.) - getf.s R_TMP = F_T1 - // load c3 = -3/2 - setf.s F_CS2 = R_TMP5 - // y*(1-s^2) - fma.s1 F_Y1S2 = F_Y, F_1S2, f0;; -} - - -{.mfi - nop.m 0 - // x' = (y^2/2)*(1-(s^2)_s)-0.5 - fms.s1 F_XL = F_Y2_2, F_S_1S2S, F_05 - nop.i 0 -} - -{.mfi - nop.m 0 - // s^2-(s^2)_s - fms.s1 F_S_DS2 = f8, f8, F_S2 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // if s<0, set s = -s - (p6) fnma.s1 f8 = f8, f1, f0 - nop.i 0;; -} - -{.mfi - // load c5 = 63/8 - setf.s F_CS5 = R_TMP7 - // x = (1-s^2)_s*y^2-1+(1-(1-s^2)_s-s^2)*y^2 - fma.s1 F_X = F_DS, F_Y2, F_X - // for t = 2^k*1.b1 b2.., get 7-k|b1.. b6 - extr.u R_INDEX = R_TMP, 17, 9;; -} - - -{.mmi - // index = (4-exponent)|b1 b2.. b6 - sub R_INDEX = R_INDEX, R_BIAS - nop.m 0 - // get exponent of y - shr.u R_TMP2 = R_TMP, 23;; -} - -{.mmi - // load C3 - ldfe F_C3 = [r3], 16 - // set p8 = 1 if y'<2^{-4} - cmp.gt p8, p0 = 0x7b, R_TMP2 - // shift R_INDEX by 5 - shl R_INDEX = R_INDEX, 5;; -} - - -{.mfb - // get table index for sqrt(1-t^2) - add r2 = r2, R_INDEX - // get t = 2^k*1.b1 b2.. b7 1 - for F_T = F_T, F_ORMASK - (p8) br.cond.spnt VERY_LARGE_INPUT;; -} - - - -{.mmf - // load C5 - ldfe F_C5 = [r3], 16 - // load 1/(1-t^2) - ldfp8 F_INV_1T2, F_SQRT_1T2 = [r2], 16 - // x = ((1-s^2)*y^2-1)/2 - fma.s1 F_X = F_X, F_05, f0;; -} - - - -{.mmf - nop.m 0 - // C7, C9 - ldfpd F_C7, F_C9 = [r3], 16 - // set correct exponent for t - fmerge.se F_T = F_T1, F_T;; -} - - - -{.mfi - // pi/2 (low, high) - ldfpd F_PI2_LO, F_PI2_HI = [r3] - // c9*x+c8 - fma.s1 F_S89 = F_X, F_CS9, F_CS8 - nop.i 0 -} - -{.mfi - nop.m 0 - // x^2 - fma.s1 F_X2 = F_X, F_X, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // y*(1-s^2)*x - fma.s1 F_Y1S2X = F_Y1S2, F_X, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // c7*x+c6 - fma.s1 F_S67 = F_X, F_CS7, F_CS6 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // 1-x - fnma.s1 F_1X = F_X, f1, f1 - nop.i 0 -} - -{.mfi - nop.m 0 - // c3*x+c2 - fma.s1 F_S23 = F_X, F_CS3, F_CS2 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // 1-t^2 - fnma.s1 F_1T2 = F_T, F_T, f1 - nop.i 0 -} - -{.mfi - // load asin(t)_high, asin(t)_low - ldfpd F_ATHI, F_ATLO = [r2] - // c5*x+c4 - fma.s1 F_S45 = F_X, F_CS5, F_CS4 - nop.i 0;; -} - - - -{.mfi - nop.m 0 - // t*s - fma.s1 F_TS = F_T, f8, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // 0.5/(1-t^2) - fma.s1 F_INV_1T2 = F_INV_1T2, F_2M64, f0 - nop.i 0;; -} - -{.mfi - nop.m 0 - // z~sqrt(1-t^2), rounded to 24 significant bits - fma.s.s1 F_Z = F_SQRT_1T2, F_2M64, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // sqrt(1-t^2) - fma.s1 F_SQRT_1T2 = F_SQRT_1T2, F_2M64, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // y*(1-s^2)*x^2 - fma.s1 F_Y1S2X2 = F_Y1S2, F_X2, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // x^4 - fma.s1 F_X4 = F_X2, F_X2, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // s*t rounded to 24 significant bits - fma.s.s1 F_TSS = F_T, f8, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // c9*x^3+..+c6 - fma.s1 F_S69 = F_X2, F_S89, F_S67 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // ST = (t^2-1+s^2) rounded to 24 significant bits - fms.s.s1 F_ST = f8, f8, F_1T2 - nop.i 0 -} - -{.mfi - nop.m 0 - // c5*x^3+..+c2 - fma.s1 F_S25 = F_X2, F_S45, F_S23 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // 0.25/(1-t^2) - fma.s1 F_INV1T2_2 = F_05, F_INV_1T2, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // t*s-sqrt(1-t^2)*(1-s^2)*y - fnma.s1 F_TS = F_Y1S2, F_SQRT_1T2, F_TS - nop.i 0;; -} - - -{.mfi - nop.m 0 - // z*0.5/(1-t^2) - fma.s1 F_ZE = F_INV_1T2, F_SQRT_1T2, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // z^2+t^2-1 - fms.s1 F_DZ0 = F_Z, F_Z, F_1T2 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (1-s^2-(1-s^2)_s)*x - fma.s1 F_DS2X = F_X, F_DS, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // t*s-(t*s)_s - fms.s1 F_DTS = F_T, f8, F_TSS - nop.i 0 -} - -{.mfi - nop.m 0 - // c9*x^7+..+c2 - fma.s1 F_S29 = F_X4, F_S69, F_S25 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // y*z - fma.s1 F_YZ = F_Z, F_Y, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // t^2 - fma.s1 F_T2 = F_T, F_T, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // 1-t^2+ST - fma.s1 F_1T2_ST = F_ST, f1, F_1T2 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // y*(1-s^2)(1-x) - fma.s1 F_Y1S2_1X = F_Y1S2, F_1X, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // dz ~ sqrt(1-t^2)-z - fma.s1 F_DZ = F_DZ0, F_ZE, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // -1+correction for sqrt(1-t^2)-z - fnma.s1 F_CORR = F_INV1T2_2, F_DZ0, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (PS29*x^2+x)*y*(1-s^2) - fma.s1 F_S19 = F_Y1S2X2, F_S29, F_Y1S2X - nop.i 0;; -} - - -{.mfi - nop.m 0 - // z*y*(1-s^2)_s - fma.s1 F_ZY1S2S = F_YZ, F_1S2_S, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // s^2-(1-t^2+ST) - fms.s1 F_1T2_ST = f8, f8, F_1T2_ST - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (t*s-(t*s)_s)+z*y*(1-s^2-(1-s^2)_s)*x - fma.s1 F_DTS = F_YZ, F_DS2X, F_DTS - nop.i 0 -} - -{.mfi - nop.m 0 - // dz*y*(1-s^2)*(1-x) - fma.s1 F_DZ_TERM = F_DZ, F_Y1S2_1X, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // R = t*s-sqrt(1-t^2)*(1-s^2)*y+sqrt(1-t^2)*(1-s^2)*y*PS19 - // (used for polynomial evaluation) - fma.s1 F_R = F_S19, F_SQRT_1T2, F_TS - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (PS29*x^2)*y*(1-s^2) - fma.s1 F_S29 = F_Y1S2X2, F_S29, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // apply correction to dz*y*(1-s^2)*(1-x) - fma.s1 F_DZ_TERM = F_DZ_TERM, F_CORR, F_DZ_TERM - nop.i 0;; -} - - -{.mfi - nop.m 0 - // R^2 - fma.s1 F_R2 = F_R, F_R, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (t*s-(t*s)_s)+z*y*(1-s^2-(1-s^2)_s)*x+dz*y*(1-s^2)*(1-x) - fma.s1 F_DZ_TERM = F_DZ_TERM, f1, F_DTS - nop.i 0;; -} - - -{.mfi - nop.m 0 - // c7+c9*R^2 - fma.s1 F_P79 = F_C9, F_R2, F_C7 - nop.i 0 -} - -{.mfi - nop.m 0 - // c3+c5*R^2 - fma.s1 F_P35 = F_C5, F_R2, F_C3 - nop.i 0;; -} - -{.mfi - nop.m 0 - // asin(t)_low-(pi/2)_low - fms.s1 F_ATLO = F_ATLO, f1, F_PI2_LO - nop.i 0 -} - -{.mfi - nop.m 0 - // R^4 - fma.s1 F_R4 = F_R2, F_R2, f0 - nop.i 0;; -} - -{.mfi - nop.m 0 - // R^3 - fma.s1 F_R3 = F_R2, F_R, f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (t*s)_s-t^2*y*z - fnma.s1 F_TSS = F_T2, F_YZ, F_TSS - nop.i 0 -} - -{.mfi - nop.m 0 - // d(ts)+z*y*d(1-s^2)*x+dz*y*(1-s^2)*(1-x)+z*y*(s^2-1+t^2-ST) - fma.s1 F_DZ_TERM = F_YZ, F_1T2_ST, F_DZ_TERM - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (pi/2)_hi-asin(t)_hi - fms.s1 F_ATHI = F_PI2_HI, f1, F_ATHI - nop.i 0 -} - -{.mfi - nop.m 0 - // c3+c5*R^2+c7*R^4+c9*R^6 - fma.s1 F_P39 = F_P79, F_R4, F_P35 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // d(ts)+z*y*d(1-s^2)*x+dz*y*(1-s^2)*(1-x)+z*y*(s^2-1+t^2-ST)+ - // + sqrt(1-t^2)*y*(1-s^2)*x^2*PS29 - fma.s1 F_DZ_TERM = F_SQRT_1T2, F_S29, F_DZ_TERM - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (t*s)_s-t^2*y*z+z*y*ST - fma.s1 F_TSS = F_YZ, F_ST, F_TSS - nop.i 0 -} - -{.mfi - nop.m 0 - // -asin(t)_low+R^3*(c3+c5*R^2+c7*R^4+c9*R^6) - fms.s1 F_P39 = F_P39, F_R3, F_ATLO - nop.i 0;; -} - - -{.mfi - nop.m 0 - // if s<0, change sign of F_ATHI - (p6) fnma.s1 F_ATHI = F_ATHI, f1, f0 - nop.i 0 -} - -{.mfi - nop.m 0 - // d(ts)+z*y*d(1-s^2)*x+dz*y*(1-s^2)*(1-x)+z*y*(s^2-1+t^2-ST) + - // + sqrt(1-t^2)*y*(1-s^2)*x^2*PS29 + - // - asin(t)_low+R^3*(c3+c5*R^2+c7*R^4+c9*R^6) - fma.s1 F_DZ_TERM = F_P39, f1, F_DZ_TERM - nop.i 0;; -} - - -{.mfi - nop.m 0 - // d(ts)+z*y*d(1-s^2)*x+dz*y*(1-s^2)*(1-x)+z*y*(s^2-1+t^2-ST) + - // + sqrt(1-t^2)*y*(1-s^2)*x^2*PS29 + z*y*(1-s^2)_s*x + - // - asin(t)_low+R^3*(c3+c5*R^2+c7*R^4+c9*R^6) - fma.s1 F_DZ_TERM = F_ZY1S2S, F_X, F_DZ_TERM - nop.i 0;; -} - - -{.mfi - nop.m 0 - // d(ts)+z*y*d(1-s^2)*x+dz*y*(1-s^2)*(1-x)+z*y*(s^2-1+t^2-ST) + - // + sqrt(1-t^2)*y*(1-s^2)*x^2*PS29 + z*y*(1-s^2)_s*x + - // - asin(t)_low+R^3*(c3+c5*R^2+c7*R^4+c9*R^6) + - // + (t*s)_s-t^2*y*z+z*y*ST - fma.s1 F_DZ_TERM = F_TSS, f1, F_DZ_TERM - nop.i 0;; -} - - -.pred.rel "mutex", p6, p11 -{.mfi - nop.m 0 - // result: add high part of pi/2-table value - // s>0 in this case - (p11) fma.s0 f8 = F_DZ_TERM, f1, F_ATHI - nop.i 0 -} - -{.mfb - nop.m 0 - // result: add high part of pi/2-table value - // if s<0 - (p6) fnma.s0 f8 = F_DZ_TERM, f1, F_ATHI - br.ret.sptk b0;; -} - - - - - - -SMALL_S: - - // use 15-term polynomial approximation - -{.mmi - // r3 = pointer to polynomial coefficients - addl r3 = @ltoff(poly_coeffs), gp;; - // load start address for coefficients - ld8 r3 = [r3] - mov R_TMP = 0x3fbf;; -} - - -{.mmi - add r2 = 64, r3 - ldfe F_C3 = [r3], 16 - // p7 = 1 if |s|<2^{-64} (exponent of s atan2(V/U) where U >= V. If Y > X, we must swap. -// -// p6 swap True |Y| > |X| -// p7 swap False |Y| <= |X| -// p8 X+ (If swap=True p8=p9=0) -// p9 X- -// -// all the other predicates p10 thru p15 are false for the main path -// -// Simple trigonometric identities show -// Region 1 (-45 to +45 degrees): -// X>0, |Y|<=X, V=Y, U=X atan2(Y,X) = sgnY * (0 + atan(V/U)) -// -// Region 2 (-90 to -45 degrees, and +45 to +90 degrees): -// X>0, |Y|>X, V=X, U=Y atan2(Y,X) = sgnY * (pi/2 - atan(V/U)) -// -// Region 3 (-135 to -90 degrees, and +90 to +135 degrees): -// X<0, |Y|>X, V=X, U=Y atan2(Y,X) = sgnY * (pi/2 + atan(V/U)) -// -// Region 4 (-180 to -135 degrees, and +135 to +180 degrees): -// X<0, |Y|<=X, V=Y, U=X atan2(Y,X) = sgnY * (pi - atan(V/U)) -// -// So the result is always of the form atan2(Y,X) = P + sgnXY * atan(V/U) -// -// We compute atan(V/U) from the identity -// atan(z) + atan([(V/U)-z] / [1+(V/U)z]) -// where z is a limited precision approximation (16 bits) to V/U -// -// z is calculated with the assistance of the frcpa instruction. -// -// atan(z) is calculated by a polynomial z + z^3 * p(w), w=z^2 -// where p(w) = P0+P1*w+...+P22*w^22 -// -// Let d = [(V/U)-z] / [1+(V/U)z]) = (V-U*z)/(U+V*z) -// -// Approximate atan(d) by d + P0*d^3 -// Let F = 1/(U+V*z) * (1-a), where |a|< 2^-8.8. -// Compute q(a) = 1 + a + ... + a^5. -// Then F*q(a) approximates the reciprocal to more than 50 bits. - -// Special values -//============================================================== -// Y x Result -// +number +inf +0 -// -number +inf -0 -// +number -inf +pi -// -number -inf -pi -// -// +inf +number +pi/2 -// -inf +number -pi/2 -// +inf -number +pi/2 -// -inf -number -pi/2 -// -// +inf +inf +pi/4 -// -inf +inf -pi/4 -// +inf -inf +3pi/4 -// -inf -inf -3pi/4 -// -// +1 +1 +pi/4 -// -1 +1 -pi/4 -// +1 -1 +3pi/4 -// -1 -1 -3pi/4 -// -// +number +0 +pi/2 -// -number +0 -pi/2 -// +number -0 +pi/2 -// -number -0 -pi/2 -// -// +0 +number +0 -// -0 +number -0 -// +0 -number +pi -// -0 -number -pi -// -// +0 +0 +0 -// -0 +0 -0 -// +0 -0 +pi -// -0 -0 -pi -// -// Nan anything quiet Y -// Not NaN NaN quiet X - -// atan2(+-0/+-0) sets double error tag to 37 - -// Registers used -//============================================================== - -// predicate registers used: -// p6 -> p15 - -// floating-point registers used: -// f8, f9 input -// f32 -> f119 - -// general registers used -// r32 -> r41 - -// Assembly macros -//============================================================== - -EXP_AD_P1 = r33 -EXP_AD_P2 = r34 -rsig_near_one = r35 - - -GR_SAVE_B0 = r35 -GR_SAVE_GP = r36 -GR_SAVE_PFS = r37 - -GR_Parameter_X = r38 -GR_Parameter_Y = r39 -GR_Parameter_RESULT = r40 -atan2_GR_tag = r41 - -atan2_Y = f8 -atan2_X = f9 - -atan2_u1_X = f32 -atan2_u1_Y = f33 -atan2_z2_X = f34 -atan2_z2_Y = f35 - -atan2_two = f36 -atan2_B1sq_Y = f37 -atan2_z1_X = f38 -atan2_z1_Y = f39 -atan2_B1X = f40 - -atan2_B1Y = f41 -atan2_wp_X = f42 -atan2_B1sq_X = f43 -atan2_z = f44 -atan2_w = f45 - -atan2_P0 = f46 -atan2_P1 = f47 -atan2_P2 = f48 -atan2_P3 = f49 -atan2_P4 = f50 - -atan2_P5 = f51 -atan2_P6 = f52 -atan2_P7 = f53 -atan2_P8 = f54 -atan2_P9 = f55 - -atan2_P10 = f56 -atan2_P11 = f57 -atan2_P12 = f58 -atan2_P13 = f59 -atan2_P14 = f60 - -atan2_P15 = f61 -atan2_P16 = f62 -atan2_P17 = f63 -atan2_P18 = f64 -atan2_P19 = f65 - -atan2_P20 = f66 -atan2_P21 = f67 -atan2_P22 = f68 -atan2_tmp = f68 -atan2_pi_by_2 = f69 -atan2_sgn_pi_by_2 = f69 -atan2_V13 = f70 - -atan2_W11 = f71 -atan2_E = f72 -atan2_wp_Y = f73 -atan2_V11 = f74 -atan2_V12 = f75 - -atan2_V7 = f76 -atan2_V8 = f77 -atan2_W7 = f78 -atan2_W8 = f79 -atan2_W3 = f80 - -atan2_W4 = f81 -atan2_V3 = f82 -atan2_V4 = f83 -atan2_F = f84 -atan2_gV = f85 - -atan2_V10 = f86 -atan2_zcub = f87 -atan2_V6 = f88 -atan2_V9 = f89 -atan2_W10 = f90 - -atan2_W6 = f91 -atan2_W2 = f92 -atan2_V2 = f93 -atan2_alpha = f94 -atan2_alpha_1 = f95 - -atan2_gVF = f96 -atan2_V5 = f97 -atan2_W12 = f98 -atan2_W5 = f99 -atan2_alpha_sq = f100 - -atan2_Cp = f101 -atan2_V1 = f102 -atan2_ysq = f103 -atan2_W1 = f104 -atan2_alpha_cub = f105 - -atan2_C = f106 -atan2_xsq = f107 -atan2_d = f108 -atan2_A_hi = f109 -atan2_dsq = f110 - -atan2_pd = f111 -atan2_A_lo = f112 -atan2_A = f113 -atan2_Pp = f114 -atan2_sgnY = f115 - -atan2_sig_near_one = f116 -atan2_near_one = f116 -atan2_pi = f117 -atan2_sgn_pi = f117 -atan2_3pi_by_4 = f118 -atan2_pi_by_4 = f119 - - -///////////////////////////////////////////////////////////// - - -RODATA - -.align 16 - -LOCAL_OBJECT_START(atan2_tb1) -data8 0xA21922DC45605EA1 , 0x00003FFA // P11 -data8 0xB199DD6D2675C40F , 0x0000BFFA // P10 -data8 0xC2F01E5DDD100DBE , 0x00003FFA // P9 -data8 0xD78F28FC2A592781 , 0x0000BFFA // P8 -data8 0xF0F03ADB3FC930D3 , 0x00003FFA // P7 -data8 0x88887EBB209E3543 , 0x0000BFFB // P6 -data8 0x9D89D7D55C3287A5 , 0x00003FFB // P5 -data8 0xBA2E8B9793955C77 , 0x0000BFFB // P4 -data8 0xE38E38E320A8A098 , 0x00003FFB // P3 -data8 0x9249249247E37913 , 0x0000BFFC // P2 -data8 0xCCCCCCCCCCC906CD , 0x00003FFC // P1 -data8 0xAAAAAAAAAAAAA8A9 , 0x0000BFFD // P0 -data8 0xC90FDAA22168C235 , 0x00004000 // pi -LOCAL_OBJECT_END(atan2_tb1) - -LOCAL_OBJECT_START(atan2_tb2) -data8 0xCE585A259BD8374C , 0x00003FF0 // P21 -data8 0x9F90FB984D8E39D0 , 0x0000BFF3 // P20 -data8 0x9D3436AABE218776 , 0x00003FF5 // P19 -data8 0xDEC343E068A6D2A8 , 0x0000BFF6 // P18 -data8 0xF396268151CFB11C , 0x00003FF7 // P17 -data8 0xD818B4BB43D84BF2 , 0x0000BFF8 // P16 -data8 0xA2270D30A90AA220 , 0x00003FF9 // P15 -data8 0xD5F4F2182E7A8725 , 0x0000BFF9 // P14 -data8 0x80D601879218B53A , 0x00003FFA // P13 -data8 0x9297B23CCFFB291F , 0x0000BFFA // P12 -data8 0xFE7E52D2A89995B3 , 0x0000BFEC // P22 -data8 0xC90FDAA22168C235 , 0x00003FFF // pi/2 -data8 0xC90FDAA22168C235 , 0x00003FFE // pi/4 -data8 0x96cbe3f9990e91a8 , 0x00004000 // 3pi/4 -LOCAL_OBJECT_END(atan2_tb2) - - - - -.section .text -GLOBAL_IEEE754_ENTRY(atan2) - -{ .mfi - alloc r32 = ar.pfs,1,5,4,0 - frcpa.s1 atan2_u1_X,p6 = f1,atan2_X - nop.i 999 -} -{ .mfi - addl EXP_AD_P1 = @ltoff(atan2_tb1), gp - fma.s1 atan2_two = f1,f1,f1 - nop.i 999 -;; -} - -{ .mfi - ld8 EXP_AD_P1 = [EXP_AD_P1] - frcpa.s1 atan2_u1_Y,p7 = f1,atan2_Y - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_xsq = atan2_X,atan2_X,f0 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fclass.m p10,p0 = atan2_Y, 0xc3 // Test for y=nan - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_ysq = atan2_Y,atan2_Y,f0 - nop.i 999 -} -;; - -{ .mfi - add EXP_AD_P2 = 0xd0,EXP_AD_P1 - fclass.m p12,p0 = atan2_X, 0xc3 // Test for x nan - nop.i 999 -} -;; - - -// p10 Y NAN, quiet and return -{ .mfi - ldfe atan2_P11 = [EXP_AD_P1],16 - fmerge.s atan2_sgnY = atan2_Y,f1 - nop.i 999 -} -{ .mfb - ldfe atan2_P21 = [EXP_AD_P2],16 -(p10) fma.d.s0 f8 = atan2_X,atan2_Y,f0 // If y=nan, result quietized y -(p10) br.ret.spnt b0 // Exit if y=nan -;; -} - - -{ .mfi - ldfe atan2_P10 = [EXP_AD_P1],16 - fma.s1 atan2_z1_X = atan2_u1_X, atan2_Y, f0 - nop.i 999 -} -{ .mfi - ldfe atan2_P20 = [EXP_AD_P2],16 - fnma.s1 atan2_B1X = atan2_u1_X, atan2_X, atan2_two - nop.i 999 -;; -} - -{ .mfi - ldfe atan2_P9 = [EXP_AD_P1],16 - fma.s1 atan2_z1_Y = atan2_u1_Y, atan2_X, f0 - nop.i 999 -} -{ .mfi - ldfe atan2_P19 = [EXP_AD_P2],16 - fnma.s1 atan2_B1Y = atan2_u1_Y, atan2_Y, atan2_two - nop.i 999 -} -;; - -{ .mfi - ldfe atan2_P8 = [EXP_AD_P1],16 - fma.s1 atan2_z2_X = atan2_u1_X, atan2_ysq, f0 - nop.i 999 -} -{ .mfi - ldfe atan2_P18 = [EXP_AD_P2],16 - fma.s1 atan2_z2_Y = atan2_u1_Y, atan2_xsq, f0 - nop.i 999 -} -;; - -// p10 ==> x inf y ? -// p11 ==> x !inf y ? -{ .mfi - ldfe atan2_P7 = [EXP_AD_P1],16 - fclass.m p10,p11 = atan2_X, 0x23 // test for x inf - nop.i 999 -} -{ .mfb - ldfe atan2_P17 = [EXP_AD_P2],16 -(p12) fma.d.s0 f8 = atan2_X,atan2_Y,f0 // If x nan, result quiet x -(p12) br.ret.spnt b0 // Exit for x nan -;; -} - -// p6 true if swap, means |y| > |x| or ysq > xsq -// p7 true if no swap, means |x| >= |y| or xsq >= ysq -{ .mmf - ldfe atan2_P6 = [EXP_AD_P1],16 - ldfe atan2_P16 = [EXP_AD_P2],16 - fcmp.ge.s1 p7,p6 = atan2_xsq, atan2_ysq -;; -} - -{ .mfi - ldfe atan2_P5 = [EXP_AD_P1],16 - fma.s1 atan2_wp_X = atan2_z1_X, atan2_z1_X, f0 - nop.i 999 -} -{ .mfi - ldfe atan2_P15 = [EXP_AD_P2],16 - fma.s1 atan2_B1sq_X = atan2_B1X, atan2_B1X, f0 - nop.i 999 -;; -} - -{ .mfi - ldfe atan2_P4 = [EXP_AD_P1],16 -(p6) fma.s1 atan2_wp_Y = atan2_z1_Y, atan2_z1_Y, f0 - nop.i 999 -} -{ .mfi - ldfe atan2_P14 = [EXP_AD_P2],16 -(p6) fma.s1 atan2_B1sq_Y = atan2_B1Y, atan2_B1Y, f0 - nop.i 999 -;; -} - -{ .mfi - ldfe atan2_P3 = [EXP_AD_P1],16 -(p6) fma.s1 atan2_E = atan2_z2_Y, atan2_B1Y, atan2_Y - nop.i 999 -} -{ .mfi - ldfe atan2_P13 = [EXP_AD_P2],16 -(p7) fma.s1 atan2_E = atan2_z2_X, atan2_B1X, atan2_X - nop.i 999 -;; -} - - -{ .mfi - ldfe atan2_P2 = [EXP_AD_P1],16 -(p6) fma.s1 atan2_z = atan2_z1_Y, atan2_B1Y, f0 - nop.i 999 -} -{ .mfi - ldfe atan2_P12 = [EXP_AD_P2],16 -(p7) fma.s1 atan2_z = atan2_z1_X, atan2_B1X, f0 - nop.i 999 -;; -} - - -{ .mfi - ldfe atan2_P1 = [EXP_AD_P1],16 - fcmp.eq.s0 p14,p15=atan2_X,atan2_Y // Dummy for denorm and invalid - nop.i 999 -} -{ .mlx - ldfe atan2_P22 = [EXP_AD_P2],16 - movl rsig_near_one = 0x8000000000000001 // signif near 1.0 -;; -} - - -// p12 ==> x inf y inf -// p13 ==> x inf y !inf -{ .mmf - ldfe atan2_P0 = [EXP_AD_P1],16 - ldfe atan2_pi_by_2 = [EXP_AD_P2],16 -(p10) fclass.m.unc p12,p13 = atan2_Y, 0x23 // x inf, test if y inf -;; -} - -{ .mfi - ldfe atan2_pi = [EXP_AD_P1],16 -(p6) fma.s1 atan2_w = atan2_wp_Y, atan2_B1sq_Y,f0 - nop.i 999 -} -{ .mfi - ldfe atan2_pi_by_4 = [EXP_AD_P2],16 -(p7) fma.s1 atan2_w = atan2_wp_X, atan2_B1sq_X,f0 - nop.i 999 -;; -} - -{ .mfi - ldfe atan2_3pi_by_4 = [EXP_AD_P2],16 -(p11) fclass.m.unc p9,p0 = atan2_Y, 0x23 // x not inf, test if y inf - nop.i 999 -;; -} - -{ .mfi - setf.sig atan2_sig_near_one = rsig_near_one -(p12) fcmp.gt.unc.s1 p10,p11 = atan2_X,f0 // x inf, y inf, test if x +inf - nop.i 999 -} -{ .mfi - nop.m 999 -(p6) fnma.s1 atan2_gV = atan2_Y, atan2_z, atan2_X - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - frcpa.s1 atan2_F,p0 = f1, atan2_E - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fnma.s1 atan2_gV = atan2_X, atan2_z, atan2_Y - nop.i 999 -;; -} - -// p13 ==> x inf y !inf -{ .mfi - nop.m 999 -(p13) fcmp.gt.unc.s1 p14,p15 = atan2_X,f0 // x inf, y !inf, test if x +inf - nop.i 999 -} -{ .mfb - nop.m 999 -(p9) fma.d.s0 f8 = atan2_sgnY, atan2_pi_by_2, f0 // +-pi/2 if x !inf, y inf -(p9) br.ret.spnt b0 // exit if x not inf, y inf, result is +-pi/2 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V13 = atan2_w, atan2_P11, atan2_P10 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W11 = atan2_w, atan2_P21, atan2_P20 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V11 = atan2_w, atan2_P9, atan2_P8 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_V12 = atan2_w, atan2_w, f0 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V8 = atan2_w, atan2_P7 , atan2_P6 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W8 = atan2_w, atan2_P19, atan2_P18 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fnma.s1 atan2_alpha = atan2_E, atan2_F, f1 - nop.i 999 -} -{ .mfi - nop.m 999 - fnma.s1 atan2_alpha_1 = atan2_E, atan2_F, atan2_two - nop.i 999 -;; -} - - -{ .mfi - nop.m 999 - fma.s1 atan2_V7 = atan2_w, atan2_P5 , atan2_P4 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W7 = atan2_w, atan2_P17, atan2_P16 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V4 = atan2_w, atan2_P3 , atan2_P2 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W4 = atan2_w, atan2_P15, atan2_P14 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V3 = atan2_w, atan2_P1 , atan2_P0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W3 = atan2_w, atan2_P13, atan2_P12 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V10 = atan2_V12, atan2_V13, atan2_V11 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_gVF = atan2_gV, atan2_F, f0 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_alpha_sq = atan2_alpha, atan2_alpha, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_Cp = atan2_alpha, atan2_alpha_1, f1 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V9 = atan2_V12, atan2_V12, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W10 = atan2_V12, atan2_P22 , atan2_W11 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V6 = atan2_V12, atan2_V8 , atan2_V7 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W6 = atan2_V12, atan2_W8 , atan2_W7 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V2 = atan2_V12, atan2_V4 , atan2_V3 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W2 = atan2_V12, atan2_W4 , atan2_W3 - nop.i 999 -;; -} - -// p8 ==> y 0 x? -// p9 ==> y !0 x? -{ .mfi - nop.m 999 - fclass.m p8,p9 = atan2_Y, 0x07 // Test for y=0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_zcub = atan2_z, atan2_w, f0 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_alpha_cub = atan2_alpha, atan2_alpha_sq, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_C = atan2_gVF, atan2_Cp, f0 - nop.i 999 -;; -} - -// p12 ==> y0 x0 -// p13 ==> y0 x!0 -{ .mfi - nop.m 999 -(p8) fclass.m.unc p12,p13 = atan2_X, 0x07 // y=0, test if x is 0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W12 = atan2_V9, atan2_V9, f0 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V5 = atan2_V9, atan2_V10, atan2_V6 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W5 = atan2_V9, atan2_W10, atan2_W6 - nop.i 999 -;; -} - - -// p9 ==> y!0 x0 -{ .mfi - nop.m 999 -(p9) fclass.m.unc p9,p0 = atan2_X, 0x07 // y not 0, test if x is 0 - nop.i 999 -} -// p10 ==> X +INF, Y +-INF -{ .mfb - nop.m 999 -(p10) fma.d.s0 f8 = atan2_sgnY, atan2_pi_by_4, f0 // x=+inf, y=inf -(p10) br.ret.spnt b0 // Exit for x=+inf, y=inf, result is +-pi/4 -;; -} - -.pred.rel "mutex",p11,p14 -{ .mfi - nop.m 999 -(p14) fmerge.s f8 = atan2_sgnY, f0 // x=+inf, y !inf, result +-0 - nop.i 999 -} -// p11 ==> X -INF, Y +-INF -{ .mfb - nop.m 999 -(p11) fma.d.s0 f8 = atan2_sgnY, atan2_3pi_by_4, f0 // x=-inf, y=inf -(p11) br.ret.spnt b0 // Exit for x=-inf, y=inf, result is +-3pi/4 -;; -} - -{ .mfi - nop.m 999 -(p13) fcmp.gt.unc.s1 p10,p11 = atan2_X,f0 // x not 0, y=0, test if x>0 - nop.i 999 -} -{ .mfb - nop.m 999 - fma.s1 atan2_d = atan2_alpha_cub, atan2_C, atan2_C -(p14) br.ret.spnt b0 // Exit if x=+inf, y !inf, result +-0 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_W12 = atan2_V9, atan2_W12, f0 - nop.i 999 -} -{ .mfb - nop.m 999 -(p9) fma.d.s0 f8 = atan2_sgnY, atan2_pi_by_2, f0 // x=0, y not 0 -(p9) br.ret.spnt b0 // Exit if x=0 and y not 0, result is +-pi/2 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V1 = atan2_V9, atan2_V5, atan2_V2 - nop.i 999 -} -{ .mfb - nop.m 999 - fma.s1 atan2_W1 = atan2_V9, atan2_W5, atan2_W2 -(p12) br.spnt ATAN2_ERROR // Branch if x=0 and y=0 -;; -} - -{ .mfi - nop.m 999 -(p10) fmerge.s f8 = atan2_sgnY, f0 // +-0 if x>0, y=0 - nop.i 999 -} -{ .mfb - nop.m 999 -(p11) fma.d.s0 f8 = atan2_sgnY, atan2_pi, f0 // +-pi if x<0, y=0 -(p13) br.ret.spnt b0 // Exit if x!0 and y=0 -;; -} - - -{ .mfi - nop.m 999 - fma.s1 atan2_pd = atan2_P0, atan2_d, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_dsq = atan2_d, atan2_d, f0 - nop.i 999 -;; -} - - -{ .mfi - nop.m 999 - fmerge.se atan2_near_one = f1, atan2_sig_near_one // Const ~1.0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_Pp = atan2_W12, atan2_W1, atan2_V1 - nop.i 999 -;; -} - -// p8 true if no swap and X positive -// p9 true if no swap and X negative -// both are false is swap is true -{ .mfi - nop.m 999 -(p7) fcmp.ge.unc.s1 p8,p9 = atan2_X,f0 - nop.i 999 -} -{ .mfb - nop.m 999 -(p15) fma.d.s0 f8 = atan2_sgnY, atan2_pi, f0 -(p15) br.ret.spnt b0 // Exit if x=-inf, y !inf, result +-pi -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_sgn_pi_by_2 = atan2_pi_by_2, atan2_sgnY, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_A_lo = atan2_pd, atan2_dsq, atan2_d - nop.i 999 -;; -} - - -{ .mfi - nop.m 999 - fma.s1 atan2_sgn_pi = atan2_pi, atan2_sgnY, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_A_hi = atan2_zcub, atan2_Pp, atan2_z - nop.i 999 -;; -} - - -// For |Y| <= |X| and X > 0, force inexact in case A_lo is zero -{ .mfi - nop.m 999 -(p8) fmpy.s0 atan2_tmp = atan2_P22, atan2_P22 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_A = atan2_A_hi, f1, atan2_A_lo - nop.i 999 -} -// For |Y| <= |X| and X > 0, result is A_hi + A_lo -{ .mfi - nop.m 999 -(p8) fma.d.s0 f8 = atan2_A_hi, f1, atan2_A_lo - nop.i 999 -;; -} - -.pred.rel "mutex",p6,p9 -// We perturb A by multiplying by 1.0+1ulp as we produce the result -// in order to get symmetrically rounded results in directed rounding modes. -// If we don't do this, there are a few cases where the trailing 11 bits of -// the significand of the result, before converting to double, are zero. These -// cases do not round symmetrically in round to +infinity or round to -infinity. -// The perturbation also insures that the inexact flag is set. -// For |Y| > |X|, result is +- pi/2 - (A_hi + A_lo) -{ .mfi - nop.m 999 -(p6) fnma.d.s0 f8 = atan2_A, atan2_near_one, atan2_sgn_pi_by_2 - nop.i 999 -} -// For |Y| <= |X|, and X < 0, result is +- pi + (A_hi + A_lo) -{ .mfb - nop.m 999 -(p9) fma.d.s0 f8 = atan2_A, atan2_near_one, atan2_sgn_pi - br.ret.sptk b0 -;; -} - -ATAN2_ERROR: -// Here if x=0 and y=0 -{ .mfi - nop.m 999 - fclass.m p10,p11 = atan2_X,0x05 // Test if x=+0 - nop.i 999 -} -;; - -{ .mfi - mov atan2_GR_tag = 37 -(p10) fmerge.s f10 = atan2_sgnY, f0 // x=+0, y=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fma.d.s0 f10 = atan2_sgnY, atan2_pi, f0 // x=-0, y=0 - nop.i 999 -;; -} -GLOBAL_IEEE754_END(atan2) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -// (1) -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 999 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - - -// (2) -{ .mmi - stfd [GR_Parameter_Y] = f8,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -// (3) -{ .mib - stfd [GR_Parameter_X] = f9 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = f10 // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -// (4) -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_atan2f.S b/sysdeps/ia64/fpu/e_atan2f.S deleted file mode 100644 index 5ff561d7ca..0000000000 --- a/sysdeps/ia64/fpu/e_atan2f.S +++ /dev/null @@ -1,900 +0,0 @@ -.file "atan2f.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. - -// History -//============================================================== -// 06/01/00 Initial version -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 08/17/00 Changed predicate register macro-usage to direct predicate -// names due to an assembler bug. -// 01/05/01 Fixed flag settings for denormal input. -// 01/19/01 Added documentation -// 01/30/01 Improved speed -// 02/06/02 Corrected .section statement -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align - -// Description -//========================================= -// The atan2 function computes the principle value of the arc tangent of y/x using -// the signs of both arguments to determine the quadrant of the return value. -// A domain error may occur if both arguments are zero. - -// The atan2 function returns the arc tangent of y/x in the range [-pi,+pi] radians. - -//.. -//..Let (v,u) = (y,x) if |y| <= |x|, and (v,u) = (x,y) otherwise. Note that -//..v and u can be negative. We state the relationship between atan2(y,x) and -//..atan(v/u). -//.. -//..Let swap = false if v = y, and swap = true if v = x. -//..Define C according to the matrix -//.. -//.. TABLE FOR C -//.. x +ve x -ve -//.. no swap (swap = false) sgn(y)*0 sgn(y)*pi -//.. swap (swap = true ) sgn(y)*pi/2 sgn(y)*pi/2 -//.. -//.. atan2(y,x) = C + atan(v/u) if no swap -//.. atan2(y,x) = C - atan(v/u) if swap -//.. -//..These relationship is more efficient to compute as we accommodate signs in v and u -//..saving the need to obtain the absolute value before computation can proceed. -//.. -//..Suppose (v,u) = (y,x), we calculate atan(v/u) as follows: -//..A = y * frcpa(x) (so A = (y/x)(1 - beta)) -//..atan(y/x) = atan(A) + atan( ((y/x)-A))/(1 + (y/x)A) ), the second term is -//..a correction. -//..atan(A) is approximated by a polynomial -//..A + p1 A^3 + p2 A^5 + ... + p10 A^21, -//..atan(G) is approximated as follows: -//..Let G = (y - Ax)/(x + Ay), atan(G) can be approximated by G + g * p1 -//..where g is a limited precision approximation to G via g = (y - Ax)*frcpa(x + Ay). -//.. -//..Suppose (v,u) = (x,y), we calculate atan(v/u) as follows: -//..Z = x * frcpa(y) (so Z = (x/y)(1 - beta)) -//..atan(x/y) = atan(Z) + atan( ((x/y)-Z))/(1 + (x/y)Z) ), the second term is -//..a correction. -//..atan(Z) is approximated by a polynomial -//..Z + p1 Z^3 + p2 Z^5 + ... + p10 Z^21, -//..atan(T) is approximated as follows: -//..Let T = (x - Ay)/(y + Ax), atan(T) can be approximated by T + t * p1 -//..where t is a limited precision approximation to T via t = (x - Ay)*frcpa(y + Ax). -//.. -//.. -//..A = y * frcpa(x) -//..atan(A) ~=~ A + p1 A^3 + ... + P10 A^21 -//.. -//..This polynomial is computed as follows: -//..Asq = A*A; Acub = A*Asq, A4 = Asq*Asq -//..A5 = Asq*Acub, A6 = Asq*A4; A11 = A5 * A6 -//.. -//..poly_A1 = p9 + Asq*p10, poly_A2 = p7 + Asq*p8, poly_A3 = p5 + Asq*p6 -//..poly_A1 = poly_A2 + A4 * poly_A1 -//..poly_A1 = poly_A3 + A4 * poly_A1 -//.. -//..poly_A4 = p1 * A -//,,poly_A5 = p3 + Asq * p4, poly_A4 = A + Asq*poly_A4 -//..poly_A5 = p2 + Asq * poly_A5 -//..poly_A4 = poly_A4 + A5 * poly_A5 -//.. -//..atan_A = poly_A4 + A11 * poly_A1 -//.. -//..atan(G) is approximated as follows: -//..G_numer = y - A*x, G_denom = x + A*y -//..H1 = frcpa(G_denom) -//..H_beta = 1 - H1 * G_denom -//..H2 = H1 + H1 * H_beta -//..H_beta2 = H_beta*H_beta -//..H3 = H2 + H2*H_beta2 -//..g = H1 * G_numer; gsq = g*g; atan_G = g*p1, atan_G = atan_G*gsq -//..atan_G = G_numer*H3 + atan_G -//.. -//.. -//..A = y * frcpa(x) -//..atan(A) ~=~ A + p1 A^3 + ... + P10 A^21 -//.. -//..This polynomial is computed as follows: -//..Asq = A*A; Acub = A*Asq, A4 = Asq*Asq -//..A5 = Asq*Acub, A6 = Asq*A4; A11 = A5 * A6 -//.. -//..poly_A1 = p9 + Asq*p10, poly_A2 = p7 + Asq*p8, poly_A3 = p5 + Asq*p6 -//..poly_A1 = poly_A2 + A4 * poly_A1 -//..poly_A1 = poly_A3 + A4 * poly_A1 -//.. -//..poly_A4 = p1 * A -//,,poly_A5 = p3 + Asq * p4, poly_A4 = A + Asq*poly_A4 -//..poly_A5 = p2 + Asq * poly_A5 -//..poly_A4 = poly_A4 + A5 * poly_A5 -//.. -//..atan_A = poly_A4 + A11 * poly_A1 -//.. -//.. -//..==================================================================== -//.. COEFFICIENTS USED IN THE COMPUTATION -//..==================================================================== - -//coef_pj, j = 1,2,...,10; atan(A) ~=~ A + p1 A^3 + p2 A^5 + ... + p10 A^21 -// -// coef_p1 = -.3333332707155439167401311806315789E+00 -// coef_p1 in dbl = BFD5 5555 1219 1621 -// -// coef_p2 = .1999967670926658391827857030875748E+00 -// coef_p2 in dbl = 3FC9 997E 7AFB FF4E -// -// coef_p3 = -.1427989384500152360161563301087296E+00 -// coef_p3 in dbl = BFC2 473C 5145 EE38 -// -// coef_p4 = .1105852823460720770079031213661163E+00 -// coef_p4 in dbl = 3FBC 4F51 2B18 65F5 -// -// coef_p5 = -.8811839915595312348625710228448363E-01 -// coef_p5 in dbl = BFB6 8EED 6A8C FA32 -// -// coef_p6 = .6742329836955067042153645159059714E-01 -// coef_p6 in dbl = 3FB1 42A7 3D7C 54E3 -// -// coef_p7 = -.4468571068774672908561591262231909E-01 -// coef_p7 in dbl = BFA6 E10B A401 393F -// -// coef_p8 = .2252333246746511135532726960586493E-01 -// coef_p8 in dbl = 3F97 105B 4160 F86B -// -// coef_p9 = -.7303884867007574742501716845542314E-02 -// coef_p9 in dbl = BF7D EAAD AA33 6451 -// -// coef_p10 = .1109686868355312093949039454619058E-02 -// coef_p10 in dbl = 3F52 2E5D 33BC 9BAA -// - -// Special values -//============================================================== -// Y x Result -// +number +inf +0 -// -number +inf -0 -// +number -inf +pi -// -number -inf -pi -// -// +inf +number +pi/2 -// -inf +number -pi/2 -// +inf -number +pi/2 -// -inf -number -pi/2 -// -// +inf +inf +pi/4 -// -inf +inf -pi/4 -// +inf -inf +3pi/4 -// -inf -inf -3pi/4 -// -// +1 +1 +pi/4 -// -1 +1 -pi/4 -// +1 -1 +3pi/4 -// -1 -1 -3pi/4 -// -// +number +0 +pi/2 // does not raise DBZ -// -number +0 -pi/2 // does not raise DBZ -// +number -0 +pi/2 // does not raise DBZ -// -number -0 -pi/2 // does not raise DBZ -// -// +0 +number +0 -// -0 +number -0 -// +0 -number +pi -// -0 -number -pi -// -// +0 +0 +0 // does not raise invalid -// -0 +0 -0 // does not raise invalid -// +0 -0 +pi // does not raise invalid -// -0 -0 -pi // does not raise invalid -// -// Nan anything quiet Y -// anything NaN quiet X - -// atan2(+-0/+-0) sets double error tag to 37 -// atan2f(+-0/+-0) sets single error tag to 38 -// These are domain errors. - - -// -// Assembly macros -//========================================= - - -// integer registers -atan2f_GR_Addr_1 = r33 -atan2f_GR_Addr_2 = r34 -GR_SAVE_B0 = r35 - -GR_SAVE_PFS = r36 -GR_SAVE_GP = r37 - -GR_Parameter_X = r38 -GR_Parameter_Y = r39 -GR_Parameter_RESULT = r40 -GR_Parameter_TAG = r41 - -// floating point registers -atan2f_coef_p1 = f32 -atan2f_coef_p10 = f33 -atan2f_coef_p7 = f34 -atan2f_coef_p6 = f35 - -atan2f_coef_p3 = f36 -atan2f_coef_p2 = f37 -atan2f_coef_p9 = f38 -atan2f_coef_p8 = f39 -atan2f_coef_p5 = f40 - -atan2f_coef_p4 = f41 -atan2f_const_piby2 = f42 -atan2f_const_pi = f43 -atan2f_const_piby4 = f44 -atan2f_const_3piby4 = f45 - -atan2f_xsq = f46 -atan2f_ysq = f47 -atan2f_xy = f48 -atan2f_const_1 = f49 -atan2f_sgn_Y = f50 - -atan2f_Z0 = f51 -atan2f_A0 = f52 -atan2f_Z = f53 -atan2f_A = f54 -atan2f_C = f55 - -atan2f_U = f56 -atan2f_Usq = f57 -atan2f_U4 = f58 -atan2f_U6 = f59 -atan2f_U8 = f60 - -atan2f_poly_u109 = f61 -atan2f_poly_u87 = f62 -atan2f_poly_u65 = f63 -atan2f_poly_u43 = f64 -atan2f_poly_u21 = f65 - -atan2f_poly_u10to7 = f66 -atan2f_poly_u6to3 = f67 -atan2f_poly_u10to3 = f68 -atan2f_poly_u10to0 = f69 -atan2f_poly_u210 = f70 - -atan2f_T_numer = f71 -atan2f_T_denom = f72 -atan2f_G_numer = f73 -atan2f_G_denom = f74 -atan2f_p1rnum = f75 - -atan2f_R_denom = f76 -atan2f_R_numer = f77 -atan2f_pR = f78 -atan2f_pRC = f79 -atan2f_pQRC = f80 - -atan2f_Q1 = f81 -atan2f_Q_beta = f82 -atan2f_Q2 = f83 -atan2f_Q_beta2 = f84 -atan2f_Q3 = f85 - -atan2f_r = f86 -atan2f_rsq = f87 -atan2f_poly_atan_U = f88 - - -// predicate registers -//atan2f_Pred_Swap = p6 // |y| > |x| -//atan2f_Pred_noSwap = p7 // |y| <= |x| -//atan2f_Pred_Xpos = p8 // x >= 0 -//atan2f_Pred_Xneg = p9 // x < 0 - - -RODATA - -.align 16 - -LOCAL_OBJECT_START(atan2f_coef_table1) -data8 0xBFD5555512191621 // p1 -data8 0x3F522E5D33BC9BAA // p10 -data8 0xBFA6E10BA401393F // p7 -data8 0x3FB142A73D7C54E3 // p6 -data8 0xBFC2473C5145EE38 // p3 -data8 0x3FC9997E7AFBFF4E // p2 -LOCAL_OBJECT_END(atan2f_coef_table1) - -LOCAL_OBJECT_START(atan2f_coef_table2) -data8 0xBF7DEAADAA336451 // p9 -data8 0x3F97105B4160F86B // p8 -data8 0xBFB68EED6A8CFA32 // p5 -data8 0x3FBC4F512B1865F5 // p4 -data8 0x3ff921fb54442d18 // pi/2 -data8 0x400921fb54442d18 // pi -data8 0x3fe921fb54442d18 // pi/4 -data8 0x4002d97c7f3321d2 // 3pi/4 -LOCAL_OBJECT_END(atan2f_coef_table2) - - - -.section .text -GLOBAL_IEEE754_ENTRY(atan2f) - -{ .mfi - alloc r32 = ar.pfs,1,5,4,0 - frcpa.s1 atan2f_Z0,p0 = f1,f8 // Approx to 1/y - nop.i 999 -} -{ .mfi - addl atan2f_GR_Addr_1 = @ltoff(atan2f_coef_table1),gp - fma.s1 atan2f_xsq = f9,f9,f0 - nop.i 999 ;; -} - - -{ .mfi - ld8 atan2f_GR_Addr_1 = [atan2f_GR_Addr_1] - frcpa.s1 atan2f_A0,p0 = f1,f9 // Approx to 1/x - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2f_ysq = f8,f8,f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 - fcmp.ge.s1 p8,p9 = f9,f0 // Set p8 if x>=0, p9 if x<0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2f_xy = f9,f8,f0 - nop.i 999 ;; -} - - -{ .mfi - add atan2f_GR_Addr_2 = 0x30, atan2f_GR_Addr_1 - fmerge.s atan2f_sgn_Y = f8,f1 - nop.i 999 ;; -} - -{ .mmf - ldfpd atan2f_coef_p1,atan2f_coef_p10 = [atan2f_GR_Addr_1],16 - ldfpd atan2f_coef_p9,atan2f_coef_p8 = [atan2f_GR_Addr_2],16 - fclass.m p10,p0 = f9,0xe7 // Test x @inf|@snan|@qnan|@zero -} -;; - -{ .mfi - ldfpd atan2f_coef_p7,atan2f_coef_p6 = [atan2f_GR_Addr_1],16 - fma.s1 atan2f_T_denom = atan2f_Z0,atan2f_xsq,f8 - nop.i 999 -} -{ .mfi - ldfpd atan2f_coef_p5,atan2f_coef_p4 = [atan2f_GR_Addr_2],16 - fma.s1 atan2f_Z = atan2f_Z0,f9,f0 - nop.i 999 ;; -} - - -{ .mfi - ldfpd atan2f_coef_p3,atan2f_coef_p2 = [atan2f_GR_Addr_1],16 - fma.s1 atan2f_G_denom = atan2f_A0,atan2f_ysq,f9 - nop.i 999 -} -{ .mfi - ldfpd atan2f_const_piby2,atan2f_const_pi = [atan2f_GR_Addr_2],16 - fma.s1 atan2f_A = atan2f_A0,f8,f0 - nop.i 999 ;; -} - -{ .mfi - ldfpd atan2f_const_piby4,atan2f_const_3piby4 = [atan2f_GR_Addr_2] - fclass.m p11,p0 = f8,0xe7 // Test y @inf|@snan|@qnan|@zero - nop.i 999 -} -{ .mfb - nop.m 999 - fnma.s1 atan2f_T_numer = atan2f_Z0,atan2f_xy,f9 -(p10) br.cond.spnt ATAN2F_XY_INF_NAN_ZERO ;; // Branch on x nan,inf,zero -} - - -// p6 if |y|>|x|, p7 if |x|>=|y| , use xsq and ysq for test -{ .mfi - nop.m 999 - fcmp.gt.s1 p6,p7 = atan2f_ysq,atan2f_xsq - nop.i 999 -} -{ .mfb - nop.m 999 - fnma.s1 atan2f_G_numer = atan2f_A0,atan2f_xy,f8 -(p11) br.cond.spnt ATAN2F_XY_INF_NAN_ZERO ;; // Branch on y nan,inf,zero -} - - -{ .mfi - nop.m 999 -(p8) fma.s1 atan2f_const_1 = atan2f_sgn_Y,f0,f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 atan2f_const_1 = atan2f_sgn_Y,f1,f0 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p6) fnma.s1 atan2f_U = atan2f_Z,f1,f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p6) fma.s1 atan2f_Usq = atan2f_Z,atan2f_Z,f0 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p7) fma.s1 atan2f_U = atan2f_A,f1,f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fma.s1 atan2f_Usq = atan2f_A,atan2f_A,f0 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p6) frcpa.s1 atan2f_Q1,p0 = f1,atan2f_T_denom - nop.i 999 -} -{ .mfi - nop.m 999 -(p6) fma.s1 atan2f_R_denom = atan2f_T_denom,f1,f0 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p7) frcpa.s1 atan2f_Q1,p0 = f1,atan2f_G_denom - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fma.s1 atan2f_R_denom = atan2f_G_denom,f1,f0 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p6) fnma.s1 atan2f_R_numer = atan2f_T_numer,f1,f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fma.s1 atan2f_R_numer = atan2f_G_numer,f1,f0 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p6) fnma.s1 atan2f_p1rnum = atan2f_T_numer,atan2f_coef_p1,f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p7) fma.s1 atan2f_p1rnum = atan2f_G_numer,atan2f_coef_p1,f0 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 - fma.s1 atan2f_U4 = atan2f_Usq,atan2f_Usq,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2f_poly_u109 = atan2f_Usq,atan2f_coef_p10,atan2f_coef_p9 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2f_poly_u87 = atan2f_Usq,atan2f_coef_p8,atan2f_coef_p7 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2f_poly_u65 = atan2f_Usq,atan2f_coef_p6,atan2f_coef_p5 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 - fma.s1 atan2f_poly_u43 = atan2f_Usq,atan2f_coef_p4,atan2f_coef_p3 - nop.i 999 -} -{ .mfi - nop.m 999 - fnma.s1 atan2f_Q_beta = atan2f_Q1,atan2f_R_denom,f1 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 - fma.s1 atan2f_poly_u21 = atan2f_Usq,atan2f_coef_p2,atan2f_coef_p1 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2f_r = atan2f_Q1,atan2f_R_numer,f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p6) fma.s1 atan2f_C = atan2f_sgn_Y,atan2f_const_piby2,f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fma.s1 atan2f_C = atan2f_const_1,atan2f_const_pi,f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2f_U6 = atan2f_U4,atan2f_Usq,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2f_U8 = atan2f_U4,atan2f_U4,f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2f_poly_u10to7 = atan2f_U4,atan2f_poly_u109,atan2f_poly_u87 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2f_pR = atan2f_p1rnum,atan2f_Q1,f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2f_poly_u6to3 = atan2f_U4,atan2f_poly_u65,atan2f_poly_u43 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2f_Q2 = atan2f_Q1,atan2f_Q_beta,atan2f_Q1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2f_Q_beta2 = atan2f_Q_beta,atan2f_Q_beta,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2f_rsq = atan2f_r,atan2f_r,f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2f_poly_u210 = atan2f_Usq,atan2f_poly_u21,f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 - fcmp.eq.s0 p8,p0 = f8,f9 // Dummy op to set flag on denormal inputs - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2f_poly_u10to3 = atan2f_U8,atan2f_poly_u10to7,atan2f_poly_u6to3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2f_Q3 = atan2f_Q2,atan2f_Q_beta2,atan2f_Q2 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2f_pRC = atan2f_rsq,atan2f_pR,atan2f_C - nop.i 999 ;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2f_poly_u10to0 = atan2f_U6,atan2f_poly_u10to3,atan2f_poly_u210 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2f_pQRC = atan2f_R_numer,atan2f_Q3,atan2f_pRC - nop.i 999 ;; -} - -{ .mfb - nop.m 999 - fma.s.s0 f8 = atan2f_U,atan2f_poly_u10to0,atan2f_pQRC - br.ret.sptk b0 ;; -} - - - -ATAN2F_XY_INF_NAN_ZERO: - -{ .mfi - nop.m 999 - fclass.m p10,p0 = f8,0xc3 // Is y nan - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p12,p0 = f9,0xc3 // Is x nan - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p6,p0 = f9,0x21 // Is x +inf - nop.i 999 -} -{ .mfb - nop.m 999 -(p10) fma.s.s0 f8 = f9,f8,f0 // Result quietized y if y is nan -(p10) br.ret.spnt b0 // Exit if y is nan -} -;; - - -{ .mfi - nop.m 999 -(p6) fclass.m.unc p7,p8 = f8,0x23 // x +inf, is y inf - nop.i 999 -} -{ .mfb - nop.m 999 -(p12) fnorm.s.s0 f8 = f9 // Result quietized x if x is nan, y not nan -(p12) br.ret.spnt b0 // Exit if x is nan, y not nan -} -;; - -// Here if x or y inf, or x or y zero -{ .mfi - nop.m 999 - fcmp.eq.s0 p15,p0 = f8,f9 // Dummy op to set flag on denormal inputs - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p11,p12 = f9,0x22 // Is x -inf - nop.i 999 -} -{ .mfb - nop.m 999 -(p7) fma.s.s0 f8 = atan2f_sgn_Y, atan2f_const_piby4,f0 // Result +-pi/4 -(p7) br.ret.spnt b0 // Exit if x +inf and y inf -} -;; - -{ .mfb - nop.m 999 -(p8) fmerge.s f8 = f8,f0 // If x +inf and y not inf, result +-0 -(p8) br.ret.spnt b0 // Exit if x +inf and y not inf -} -;; - -{ .mfi - nop.m 999 -(p12) fclass.m.unc p13,p0 = f8,0x23 // x not -inf, is y inf - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p11) fclass.m.unc p14,p15 = f8,0x23 // x -inf, is y inf - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p6,p7 = f9,0x7 // Is x zero - nop.i 999 -} -{ .mfb - nop.m 999 -(p13) fma.s.s0 f8 = atan2f_sgn_Y, atan2f_const_piby2,f0 // Result +-pi/2 -(p13) br.ret.spnt b0 // Exit if x not -inf and y inf -} -;; - -{ .mfi - nop.m 999 -(p14) fma.s.s0 f8 = atan2f_sgn_Y, atan2f_const_3piby4,f0 // Result +-3pi/4 - nop.i 999 -} -{ .mfb - nop.m 999 -(p15) fma.s.s0 f8 = atan2f_sgn_Y, atan2f_const_pi,f0 // Result +-pi -(p11) br.ret.spnt b0 // Exit if x -inf -} -;; - -// Here if x or y zero -{ .mfi - nop.m 999 -(p7) fclass.m.unc p8,p9 = f9,0x19 // x not zero, y zero, is x > zero - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p6) fclass.m.unc p10,p11 = f8,0x7 // x zero, is y zero - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fmerge.s f8 = f8, f0 // x > zero and y zero, result is +-zero - nop.i 999 -} -{ .mfb - nop.m 999 -(p9) fma.s.s0 f8 = atan2f_sgn_Y, atan2f_const_pi,f0 // x < 0, y 0, result +-pi -(p10) br.cond.spnt __libm_error_region // Branch if x zero and y zero -} -;; - -{ .mfb - nop.m 999 -(p11) fma.s.s0 f8 = atan2f_sgn_Y, atan2f_const_piby2,f0 // x zero, y not zero - br.ret.sptk b0 // Final special case exit -} -;; - - -GLOBAL_IEEE754_END(atan2f) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - mov GR_Parameter_TAG = 38 - fclass.m p10,p11 = f9,0x5 // @zero | @pos -;; -(p10) fmerge.s f10 = f8, f0 -(p11) fma.s.s0 f10 = atan2f_sgn_Y, atan2f_const_pi,f0 -;; - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 999 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} - -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -} -;; - -{ .mmi - stfs [GR_Parameter_Y] = f9,16 // Store Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -} -;; - - -.body -{ .mib - stfs [GR_Parameter_X] = f8 // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfs [GR_Parameter_Y] = f10 // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -} -;; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; - -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -} -;; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -} -;; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_atan2l.c b/sysdeps/ia64/fpu/e_atan2l.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/e_atan2l.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/e_atanh.S b/sysdeps/ia64/fpu/e_atanh.S deleted file mode 100644 index 4ae5ee6926..0000000000 --- a/sysdeps/ia64/fpu/e_atanh.S +++ /dev/null @@ -1,1071 +0,0 @@ -.file "atanh.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// ============================================================== -// History -// ============================================================== -// 05/03/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align -// 05/26/03 Improved performance, fixed to handle unorms -// 03/31/05 Reformatted delimiters between data tables -// -// API -// ============================================================== -// double atanh(double) -// -// Overview of operation -// ============================================================== -// -// There are 7 paths: -// 1. x = +/-0.0 -// Return atanh(x) = +/-0.0 -// -// 2. 0.0 < |x| < 1/4 -// Return atanh(x) = Po2l(x), -// where Po2l(x) = (((((((((C9*x^2 + C8)*x^2 + C7)*x^2 + C6)*x^2 + -// C5)*x^2 + C4)*x^2 + C3)*x^2 + C2)*x^2 + C1)* x^2 + C0)*x^3 + x -// 3. 1/4 <= |x| < 1 -// Return atanh(x) = sign(x) * log((1 + |x|)/(1 - |x|)) -// To compute (1 + |x|)/(1 - |x|) modified Newton Raphson method is used -// (3 iterations) -// Algorithm description for log function see below. -// -// 4. |x| = 1 -// Return atanh(x) = sign(x) * +INF -// -// 5. 1 < |x| <= +INF -// Return atanh(x) = QNaN -// -// 6. x = [S,Q]NaN -// Return atanh(x) = QNaN -// -// 7. x = denormal -// Return atanh(x) = x -// -//============================================================== -// Algorithm Description for log(x) function -// Below we are using the fact that inequality x - 1.0 > 2^(-6) is always true -// for this atanh implementation -// -// Consider x = 2^N 1.f1 f2 f3 f4...f63 -// Log(x) = log(x * frcpa(x) / frcpa(x)) -// = log(x * frcpa(x)) + log(1/frcpa(x)) -// = log(x * frcpa(x)) - log(frcpa(x)) -// -// frcpa(x) = 2^-N * frcpa(1.f1 f2 ... f63) -// -// -log(frcpa(x)) = -log(C) -// = -log(2^-N) - log(frcpa(1.f1 f2 ... f63)) -// -// -log(frcpa(x)) = -log(C) -// = N*log2 - log(frcpa(1.f1 f2 ... f63)) -// -// -// Log(x) = log(1/frcpa(x)) + log(frcpa(x) x) -// -// Log(x) = N*log2 + log(1./frcpa(1.f1 f2 ... f63)) + log(x * frcpa(x)) -// Log(x) = N*log2 + T + log(frcpa(x) x) -// -// Log(x) = N*log2 + T + log(C * x) -// -// C * x = 1 + r -// -// Log(x) = N*log2 + T + log(1 + r) -// Log(x) = N*log2 + T + Series(r - r^2/2 + r^3/3 - r^4/4 + ...) -// -// 1.f1 f2 ... f8 has 256 entries. -// They are 1 + k/2^8, k = 0 ... 255 -// These 256 values are the table entries. -// -// Implementation -//============================================================== -// C = frcpa(x) -// r = C * x - 1 -// -// Form rseries = r + P1*r^2 + P2*r^3 + P3*r^4 + P4*r^5 + P5*r^6 -// -// x = f * 2*N where f is 1.f_1f_2f_3...f_63 -// Nfloat = float(n) where n is the true unbiased exponent -// pre-index = f_1f_2....f_8 -// index = pre_index * 16 -// get the dxt table entry at index + offset = T -// -// result = (T + Nfloat * log(2)) + rseries -// -// The T table is calculated as follows -// Form x_k = 1 + k/2^8 where k goes from 0... 255 -// y_k = frcpa(x_k) -// log(1/y_k) in quad and round to double-extended -// -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f32 -> f77 - -// General registers used: -// r14 -> r27, r33 -> r39 - -// Predicate registers used: -// p6 -> p14 - -// p10, p11 to indicate is argument positive or negative -// p12 to filter out case when x = [Q,S]NaN or +/-0 -// p13 to filter out case when x = denormal -// p6, p7 to filter out case when |x| >= 1 -// p8 to filter out case when |x| < 1/4 - -// Assembly macros -//============================================================== -Data2Ptr = r14 -Data3Ptr = r15 -RcpTablePtr = r16 -rExpbMask = r17 -rBias = r18 -rNearZeroBound = r19 -rArgSExpb = r20 -rArgExpb = r21 -rSExpb = r22 -rExpb = r23 -rSig = r24 -rN = r25 -rInd = r26 -DataPtr = r27 - -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_SAVE_PFS = r35 - -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -atanh_GR_tag = r39 - -//============================================================== -fAbsX = f32 -fOneMx = f33 -fOnePx = f34 -fY = f35 -fR = f36 -fR2 = f37 -fR3 = f38 -fRcp = f39 -fY4Rcp = f40 -fRcp0 = f41 -fRcp0n = f42 -fRcp1 = f43 -fRcp2 = f44 -fRcp3 = f45 -fN4Cvt = f46 -fN = f47 -fY2 = f48 -fLog2 = f49 -fLogT = f50 -fLogT_N = f51 -fX2 = f52 -fX3 = f53 -fX4 = f54 -fX8 = f55 -fP0 = f56 -fP5 = f57 -fP4 = f58 -fP3 = f59 -fP2 = f60 -fP1 = f61 -fNormX = f62 -fC9 = f63 -fC8 = f64 -fC7 = f65 -fC6 = f66 -fC5 = f67 -fC4 = f68 -fC3 = f69 -fC2 = f70 -fC1 = f71 -fC0 = f72 -fP98 = f73 -fP76 = f74 -fP54 = f75 -fP32 = f76 -fP10 = f77 - -// Data tables -//============================================================== -RODATA -.align 16 - -LOCAL_OBJECT_START(atanh_data) -data8 0xBFC5555DA7212371 // P5 -data8 0x3FC999A19EEF5826 // P4 -data8 0xBFCFFFFFFFFEF009 // P3 -data8 0x3FD555555554ECB2 // P2 -data8 0xBFE0000000000000 // P1 = -0.5 -data8 0x0000000000000000 // pad -data8 0xb17217f7d1cf79ac , 0x00003ffd // 0.5*log(2) -data8 0x0000000000000000 , 0x00000000 // pad to eliminate bank conflicts -LOCAL_OBJECT_END(atanh_data) - -LOCAL_OBJECT_START(atanh_data_2) -data8 0x8649FB89D3AD51FB , 0x00003FFB // C9 -data8 0xCC10AABEF160077A , 0x00003FFA // C8 -data8 0xF1EDB99AC0819CE2 , 0x00003FFA // C7 -data8 0x8881E53A809AD24D , 0x00003FFB // C6 -data8 0x9D8A116EF212F271 , 0x00003FFB // C5 -data8 0xBA2E8A6D1D756453 , 0x00003FFB // C4 -data8 0xE38E38E7A0945692 , 0x00003FFB // C3 -data8 0x924924924536891A , 0x00003FFC // C2 -data8 0xCCCCCCCCCCD08D51 , 0x00003FFC // C1 -data8 0xAAAAAAAAAAAAAA0C , 0x00003FFD // C0 -LOCAL_OBJECT_END(atanh_data_2) - - -LOCAL_OBJECT_START(atanh_data_3) -data8 0x80200aaeac44ef38 , 0x00003ff5 // log(1/frcpa(1+0/2^-8))/2 -// -data8 0xc09090a2c35aa070 , 0x00003ff6 // log(1/frcpa(1+1/2^-8))/2 -data8 0xa0c94fcb41977c75 , 0x00003ff7 // log(1/frcpa(1+2/2^-8))/2 -data8 0xe18b9c263af83301 , 0x00003ff7 // log(1/frcpa(1+3/2^-8))/2 -data8 0x8d35c8d6399c30ea , 0x00003ff8 // log(1/frcpa(1+4/2^-8))/2 -data8 0xadd4d2ecd601cbb8 , 0x00003ff8 // log(1/frcpa(1+5/2^-8))/2 -// -data8 0xce95403a192f9f01 , 0x00003ff8 // log(1/frcpa(1+6/2^-8))/2 -data8 0xeb59392cbcc01096 , 0x00003ff8 // log(1/frcpa(1+7/2^-8))/2 -data8 0x862c7d0cefd54c5d , 0x00003ff9 // log(1/frcpa(1+8/2^-8))/2 -data8 0x94aa63c65e70d499 , 0x00003ff9 // log(1/frcpa(1+9/2^-8))/2 -data8 0xa54a696d4b62b382 , 0x00003ff9 // log(1/frcpa(1+10/2^-8))/2 -// -data8 0xb3e4a796a5dac208 , 0x00003ff9 // log(1/frcpa(1+11/2^-8))/2 -data8 0xc28c45b1878340a9 , 0x00003ff9 // log(1/frcpa(1+12/2^-8))/2 -data8 0xd35c55f39d7a6235 , 0x00003ff9 // log(1/frcpa(1+13/2^-8))/2 -data8 0xe220f037b954f1f5 , 0x00003ff9 // log(1/frcpa(1+14/2^-8))/2 -data8 0xf0f3389b036834f3 , 0x00003ff9 // log(1/frcpa(1+15/2^-8))/2 -// -data8 0xffd3488d5c980465 , 0x00003ff9 // log(1/frcpa(1+16/2^-8))/2 -data8 0x87609ce2ed300490 , 0x00003ffa // log(1/frcpa(1+17/2^-8))/2 -data8 0x8ede9321e8c85927 , 0x00003ffa // log(1/frcpa(1+18/2^-8))/2 -data8 0x96639427f2f8e2f4 , 0x00003ffa // log(1/frcpa(1+19/2^-8))/2 -data8 0x9defad3e8f73217b , 0x00003ffa // log(1/frcpa(1+20/2^-8))/2 -// -data8 0xa582ebd50097029c , 0x00003ffa // log(1/frcpa(1+21/2^-8))/2 -data8 0xac06dbe75ab80fee , 0x00003ffa // log(1/frcpa(1+22/2^-8))/2 -data8 0xb3a78449b2d3ccca , 0x00003ffa // log(1/frcpa(1+23/2^-8))/2 -data8 0xbb4f79635ab46bb2 , 0x00003ffa // log(1/frcpa(1+24/2^-8))/2 -data8 0xc2fec93a83523f3f , 0x00003ffa // log(1/frcpa(1+25/2^-8))/2 -// -data8 0xc99af2eaca4c4571 , 0x00003ffa // log(1/frcpa(1+26/2^-8))/2 -data8 0xd1581106472fa653 , 0x00003ffa // log(1/frcpa(1+27/2^-8))/2 -data8 0xd8002560d4355f2e , 0x00003ffa // log(1/frcpa(1+28/2^-8))/2 -data8 0xdfcb43b4fe508632 , 0x00003ffa // log(1/frcpa(1+29/2^-8))/2 -data8 0xe67f6dff709d4119 , 0x00003ffa // log(1/frcpa(1+30/2^-8))/2 -// -data8 0xed393b1c22351280 , 0x00003ffa // log(1/frcpa(1+31/2^-8))/2 -data8 0xf5192bff087bcc35 , 0x00003ffa // log(1/frcpa(1+32/2^-8))/2 -data8 0xfbdf4ff6dfef2fa3 , 0x00003ffa // log(1/frcpa(1+33/2^-8))/2 -data8 0x81559a97f92f9cc7 , 0x00003ffb // log(1/frcpa(1+34/2^-8))/2 -data8 0x84be72bce90266e8 , 0x00003ffb // log(1/frcpa(1+35/2^-8))/2 -// -data8 0x88bc74113f23def2 , 0x00003ffb // log(1/frcpa(1+36/2^-8))/2 -data8 0x8c2ba3edf6799d11 , 0x00003ffb // log(1/frcpa(1+37/2^-8))/2 -data8 0x8f9dc92f92ea08b1 , 0x00003ffb // log(1/frcpa(1+38/2^-8))/2 -data8 0x9312e8f36efab5a7 , 0x00003ffb // log(1/frcpa(1+39/2^-8))/2 -data8 0x968b08643409ceb6 , 0x00003ffb // log(1/frcpa(1+40/2^-8))/2 -// -data8 0x9a062cba08a1708c , 0x00003ffb // log(1/frcpa(1+41/2^-8))/2 -data8 0x9d845b3abf95485c , 0x00003ffb // log(1/frcpa(1+42/2^-8))/2 -data8 0xa06fd841bc001bb4 , 0x00003ffb // log(1/frcpa(1+43/2^-8))/2 -data8 0xa3f3a74652fbe0db , 0x00003ffb // log(1/frcpa(1+44/2^-8))/2 -data8 0xa77a8fb2336f20f5 , 0x00003ffb // log(1/frcpa(1+45/2^-8))/2 -// -data8 0xab0497015d28b0a0 , 0x00003ffb // log(1/frcpa(1+46/2^-8))/2 -data8 0xae91c2be6ba6a615 , 0x00003ffb // log(1/frcpa(1+47/2^-8))/2 -data8 0xb189d1b99aebb20b , 0x00003ffb // log(1/frcpa(1+48/2^-8))/2 -data8 0xb51cced5de9c1b2c , 0x00003ffb // log(1/frcpa(1+49/2^-8))/2 -data8 0xb819bee9e720d42f , 0x00003ffb // log(1/frcpa(1+50/2^-8))/2 -// -data8 0xbbb2a0947b093a5d , 0x00003ffb // log(1/frcpa(1+51/2^-8))/2 -data8 0xbf4ec1505811684a , 0x00003ffb // log(1/frcpa(1+52/2^-8))/2 -data8 0xc2535bacfa8975ff , 0x00003ffb // log(1/frcpa(1+53/2^-8))/2 -data8 0xc55a3eafad187eb8 , 0x00003ffb // log(1/frcpa(1+54/2^-8))/2 -data8 0xc8ff2484b2c0da74 , 0x00003ffb // log(1/frcpa(1+55/2^-8))/2 -// -data8 0xcc0b1a008d53ab76 , 0x00003ffb // log(1/frcpa(1+56/2^-8))/2 -data8 0xcfb6203844b3209b , 0x00003ffb // log(1/frcpa(1+57/2^-8))/2 -data8 0xd2c73949a47a19f5 , 0x00003ffb // log(1/frcpa(1+58/2^-8))/2 -data8 0xd5daae18b49d6695 , 0x00003ffb // log(1/frcpa(1+59/2^-8))/2 -data8 0xd8f08248cf7e8019 , 0x00003ffb // log(1/frcpa(1+60/2^-8))/2 -// -data8 0xdca7749f1b3e540e , 0x00003ffb // log(1/frcpa(1+61/2^-8))/2 -data8 0xdfc28e033aaaf7c7 , 0x00003ffb // log(1/frcpa(1+62/2^-8))/2 -data8 0xe2e012a5f91d2f55 , 0x00003ffb // log(1/frcpa(1+63/2^-8))/2 -data8 0xe600064ed9e292a8 , 0x00003ffb // log(1/frcpa(1+64/2^-8))/2 -data8 0xe9226cce42b39f60 , 0x00003ffb // log(1/frcpa(1+65/2^-8))/2 -// -data8 0xec4749fd97a28360 , 0x00003ffb // log(1/frcpa(1+66/2^-8))/2 -data8 0xef6ea1bf57780495 , 0x00003ffb // log(1/frcpa(1+67/2^-8))/2 -data8 0xf29877ff38809091 , 0x00003ffb // log(1/frcpa(1+68/2^-8))/2 -data8 0xf5c4d0b245cb89be , 0x00003ffb // log(1/frcpa(1+69/2^-8))/2 -data8 0xf8f3afd6fcdef3aa , 0x00003ffb // log(1/frcpa(1+70/2^-8))/2 -// -data8 0xfc2519756be1abc7 , 0x00003ffb // log(1/frcpa(1+71/2^-8))/2 -data8 0xff59119f503e6832 , 0x00003ffb // log(1/frcpa(1+72/2^-8))/2 -data8 0x8147ce381ae0e146 , 0x00003ffc // log(1/frcpa(1+73/2^-8))/2 -data8 0x82e45f06cb1ad0f2 , 0x00003ffc // log(1/frcpa(1+74/2^-8))/2 -data8 0x842f5c7c573cbaa2 , 0x00003ffc // log(1/frcpa(1+75/2^-8))/2 -// -data8 0x85ce471968c8893a , 0x00003ffc // log(1/frcpa(1+76/2^-8))/2 -data8 0x876e8305bc04066d , 0x00003ffc // log(1/frcpa(1+77/2^-8))/2 -data8 0x891012678031fbb3 , 0x00003ffc // log(1/frcpa(1+78/2^-8))/2 -data8 0x8a5f1493d766a05f , 0x00003ffc // log(1/frcpa(1+79/2^-8))/2 -data8 0x8c030c778c56fa00 , 0x00003ffc // log(1/frcpa(1+80/2^-8))/2 -// -data8 0x8da85df17e31d9ae , 0x00003ffc // log(1/frcpa(1+81/2^-8))/2 -data8 0x8efa663e7921687e , 0x00003ffc // log(1/frcpa(1+82/2^-8))/2 -data8 0x90a22b6875c6a1f8 , 0x00003ffc // log(1/frcpa(1+83/2^-8))/2 -data8 0x91f62cc8f5d24837 , 0x00003ffc // log(1/frcpa(1+84/2^-8))/2 -data8 0x93a06cfc3857d980 , 0x00003ffc // log(1/frcpa(1+85/2^-8))/2 -// -data8 0x94f66d5e6fd01ced , 0x00003ffc // log(1/frcpa(1+86/2^-8))/2 -data8 0x96a330156e6772f2 , 0x00003ffc // log(1/frcpa(1+87/2^-8))/2 -data8 0x97fb3582754ea25b , 0x00003ffc // log(1/frcpa(1+88/2^-8))/2 -data8 0x99aa8259aad1bbf2 , 0x00003ffc // log(1/frcpa(1+89/2^-8))/2 -data8 0x9b0492f6227ae4a8 , 0x00003ffc // log(1/frcpa(1+90/2^-8))/2 -// -data8 0x9c5f8e199bf3a7a5 , 0x00003ffc // log(1/frcpa(1+91/2^-8))/2 -data8 0x9e1293b9998c1daa , 0x00003ffc // log(1/frcpa(1+92/2^-8))/2 -data8 0x9f6fa31e0b41f308 , 0x00003ffc // log(1/frcpa(1+93/2^-8))/2 -data8 0xa0cda11eaf46390e , 0x00003ffc // log(1/frcpa(1+94/2^-8))/2 -data8 0xa22c8f029cfa45aa , 0x00003ffc // log(1/frcpa(1+95/2^-8))/2 -// -data8 0xa3e48badb7856b34 , 0x00003ffc // log(1/frcpa(1+96/2^-8))/2 -data8 0xa5459a0aa95849f9 , 0x00003ffc // log(1/frcpa(1+97/2^-8))/2 -data8 0xa6a79c84480cfebd , 0x00003ffc // log(1/frcpa(1+98/2^-8))/2 -data8 0xa80a946d0fcb3eb2 , 0x00003ffc // log(1/frcpa(1+99/2^-8))/2 -data8 0xa96e831a3ea7b314 , 0x00003ffc // log(1/frcpa(1+100/2^-8))/2 -// -data8 0xaad369e3dc544e3b , 0x00003ffc // log(1/frcpa(1+101/2^-8))/2 -data8 0xac92e9588952c815 , 0x00003ffc // log(1/frcpa(1+102/2^-8))/2 -data8 0xadfa035aa1ed8fdc , 0x00003ffc // log(1/frcpa(1+103/2^-8))/2 -data8 0xaf6219eae1ad6e34 , 0x00003ffc // log(1/frcpa(1+104/2^-8))/2 -data8 0xb0cb2e6d8160f753 , 0x00003ffc // log(1/frcpa(1+105/2^-8))/2 -// -data8 0xb2354249ad950f72 , 0x00003ffc // log(1/frcpa(1+106/2^-8))/2 -data8 0xb3a056e98ef4a3b4 , 0x00003ffc // log(1/frcpa(1+107/2^-8))/2 -data8 0xb50c6dba52c6292a , 0x00003ffc // log(1/frcpa(1+108/2^-8))/2 -data8 0xb679882c33876165 , 0x00003ffc // log(1/frcpa(1+109/2^-8))/2 -data8 0xb78c07429785cedc , 0x00003ffc // log(1/frcpa(1+110/2^-8))/2 -// -data8 0xb8faeb8dc4a77d24 , 0x00003ffc // log(1/frcpa(1+111/2^-8))/2 -data8 0xba6ad77eb36ae0d6 , 0x00003ffc // log(1/frcpa(1+112/2^-8))/2 -data8 0xbbdbcc915e9bee50 , 0x00003ffc // log(1/frcpa(1+113/2^-8))/2 -data8 0xbd4dcc44f8cf12ef , 0x00003ffc // log(1/frcpa(1+114/2^-8))/2 -data8 0xbec0d81bf5b531fa , 0x00003ffc // log(1/frcpa(1+115/2^-8))/2 -// -data8 0xc034f19c139186f4 , 0x00003ffc // log(1/frcpa(1+116/2^-8))/2 -data8 0xc14cb69f7c5e55ab , 0x00003ffc // log(1/frcpa(1+117/2^-8))/2 -data8 0xc2c2abbb6e5fd56f , 0x00003ffc // log(1/frcpa(1+118/2^-8))/2 -data8 0xc439b2c193e6771e , 0x00003ffc // log(1/frcpa(1+119/2^-8))/2 -data8 0xc553acb9d5c67733 , 0x00003ffc // log(1/frcpa(1+120/2^-8))/2 -// -data8 0xc6cc96e441272441 , 0x00003ffc // log(1/frcpa(1+121/2^-8))/2 -data8 0xc8469753eca88c30 , 0x00003ffc // log(1/frcpa(1+122/2^-8))/2 -data8 0xc962cf3ce072b05c , 0x00003ffc // log(1/frcpa(1+123/2^-8))/2 -data8 0xcadeba8771f694aa , 0x00003ffc // log(1/frcpa(1+124/2^-8))/2 -data8 0xcc5bc08d1f72da94 , 0x00003ffc // log(1/frcpa(1+125/2^-8))/2 -// -data8 0xcd7a3f99ea035c29 , 0x00003ffc // log(1/frcpa(1+126/2^-8))/2 -data8 0xcef93860c8a53c35 , 0x00003ffc // log(1/frcpa(1+127/2^-8))/2 -data8 0xd0192f68a7ed23df , 0x00003ffc // log(1/frcpa(1+128/2^-8))/2 -data8 0xd19a201127d3c645 , 0x00003ffc // log(1/frcpa(1+129/2^-8))/2 -data8 0xd2bb92f4061c172c , 0x00003ffc // log(1/frcpa(1+130/2^-8))/2 -// -data8 0xd43e80b2ee8cc8fc , 0x00003ffc // log(1/frcpa(1+131/2^-8))/2 -data8 0xd56173601fc4ade4 , 0x00003ffc // log(1/frcpa(1+132/2^-8))/2 -data8 0xd6e6637efb54086f , 0x00003ffc // log(1/frcpa(1+133/2^-8))/2 -data8 0xd80ad9f58f3c8193 , 0x00003ffc // log(1/frcpa(1+134/2^-8))/2 -data8 0xd991d1d31aca41f8 , 0x00003ffc // log(1/frcpa(1+135/2^-8))/2 -// -data8 0xdab7d02231484a93 , 0x00003ffc // log(1/frcpa(1+136/2^-8))/2 -data8 0xdc40d532cde49a54 , 0x00003ffc // log(1/frcpa(1+137/2^-8))/2 -data8 0xdd685f79ed8b265e , 0x00003ffc // log(1/frcpa(1+138/2^-8))/2 -data8 0xde9094bbc0e17b1d , 0x00003ffc // log(1/frcpa(1+139/2^-8))/2 -data8 0xe01c91b78440c425 , 0x00003ffc // log(1/frcpa(1+140/2^-8))/2 -// -data8 0xe14658f26997e729 , 0x00003ffc // log(1/frcpa(1+141/2^-8))/2 -data8 0xe270cdc2391e0d23 , 0x00003ffc // log(1/frcpa(1+142/2^-8))/2 -data8 0xe3ffce3a2aa64922 , 0x00003ffc // log(1/frcpa(1+143/2^-8))/2 -data8 0xe52bdb274ed82887 , 0x00003ffc // log(1/frcpa(1+144/2^-8))/2 -data8 0xe6589852e75d7df6 , 0x00003ffc // log(1/frcpa(1+145/2^-8))/2 -// -data8 0xe786068c79937a7d , 0x00003ffc // log(1/frcpa(1+146/2^-8))/2 -data8 0xe91903adad100911 , 0x00003ffc // log(1/frcpa(1+147/2^-8))/2 -data8 0xea481236f7d35bb0 , 0x00003ffc // log(1/frcpa(1+148/2^-8))/2 -data8 0xeb77d48c692e6b14 , 0x00003ffc // log(1/frcpa(1+149/2^-8))/2 -data8 0xeca84b83d7297b87 , 0x00003ffc // log(1/frcpa(1+150/2^-8))/2 -// -data8 0xedd977f4962aa158 , 0x00003ffc // log(1/frcpa(1+151/2^-8))/2 -data8 0xef7179a22f257754 , 0x00003ffc // log(1/frcpa(1+152/2^-8))/2 -data8 0xf0a450d139366ca7 , 0x00003ffc // log(1/frcpa(1+153/2^-8))/2 -data8 0xf1d7e0524ff9ffdb , 0x00003ffc // log(1/frcpa(1+154/2^-8))/2 -data8 0xf30c29036a8b6cae , 0x00003ffc // log(1/frcpa(1+155/2^-8))/2 -// -data8 0xf4412bc411ea8d92 , 0x00003ffc // log(1/frcpa(1+156/2^-8))/2 -data8 0xf576e97564c8619d , 0x00003ffc // log(1/frcpa(1+157/2^-8))/2 -data8 0xf6ad62fa1b5f172f , 0x00003ffc // log(1/frcpa(1+158/2^-8))/2 -data8 0xf7e499368b55c542 , 0x00003ffc // log(1/frcpa(1+159/2^-8))/2 -data8 0xf91c8d10abaffe22 , 0x00003ffc // log(1/frcpa(1+160/2^-8))/2 -// -data8 0xfa553f7018c966f3 , 0x00003ffc // log(1/frcpa(1+161/2^-8))/2 -data8 0xfb8eb13e185d802c , 0x00003ffc // log(1/frcpa(1+162/2^-8))/2 -data8 0xfcc8e3659d9bcbed , 0x00003ffc // log(1/frcpa(1+163/2^-8))/2 -data8 0xfe03d6d34d487fd2 , 0x00003ffc // log(1/frcpa(1+164/2^-8))/2 -data8 0xff3f8c7581e9f0ae , 0x00003ffc // log(1/frcpa(1+165/2^-8))/2 -// -data8 0x803e029e280173ae , 0x00003ffd // log(1/frcpa(1+166/2^-8))/2 -data8 0x80dca10cc52d0757 , 0x00003ffd // log(1/frcpa(1+167/2^-8))/2 -data8 0x817ba200632755a1 , 0x00003ffd // log(1/frcpa(1+168/2^-8))/2 -data8 0x821b05f3b01d6774 , 0x00003ffd // log(1/frcpa(1+169/2^-8))/2 -data8 0x82bacd623ff19d06 , 0x00003ffd // log(1/frcpa(1+170/2^-8))/2 -// -data8 0x835af8c88e7a8f47 , 0x00003ffd // log(1/frcpa(1+171/2^-8))/2 -data8 0x83c5f8299e2b4091 , 0x00003ffd // log(1/frcpa(1+172/2^-8))/2 -data8 0x8466cb43f3d87300 , 0x00003ffd // log(1/frcpa(1+173/2^-8))/2 -data8 0x850803a67c80ca4b , 0x00003ffd // log(1/frcpa(1+174/2^-8))/2 -data8 0x85a9a1d11a23b461 , 0x00003ffd // log(1/frcpa(1+175/2^-8))/2 -// -data8 0x864ba644a18e6e05 , 0x00003ffd // log(1/frcpa(1+176/2^-8))/2 -data8 0x86ee1182dcc432f7 , 0x00003ffd // log(1/frcpa(1+177/2^-8))/2 -data8 0x875a925d7e48c316 , 0x00003ffd // log(1/frcpa(1+178/2^-8))/2 -data8 0x87fdaa109d23aef7 , 0x00003ffd // log(1/frcpa(1+179/2^-8))/2 -data8 0x88a129ed4becfaf2 , 0x00003ffd // log(1/frcpa(1+180/2^-8))/2 -// -data8 0x89451278ecd7f9cf , 0x00003ffd // log(1/frcpa(1+181/2^-8))/2 -data8 0x89b29295f8432617 , 0x00003ffd // log(1/frcpa(1+182/2^-8))/2 -data8 0x8a572ac5a5496882 , 0x00003ffd // log(1/frcpa(1+183/2^-8))/2 -data8 0x8afc2d0ce3b2dadf , 0x00003ffd // log(1/frcpa(1+184/2^-8))/2 -data8 0x8b6a69c608cfd3af , 0x00003ffd // log(1/frcpa(1+185/2^-8))/2 -// -data8 0x8c101e106e899a83 , 0x00003ffd // log(1/frcpa(1+186/2^-8))/2 -data8 0x8cb63de258f9d626 , 0x00003ffd // log(1/frcpa(1+187/2^-8))/2 -data8 0x8d2539c5bd19e2b1 , 0x00003ffd // log(1/frcpa(1+188/2^-8))/2 -data8 0x8dcc0e064b29e6f1 , 0x00003ffd // log(1/frcpa(1+189/2^-8))/2 -data8 0x8e734f45d88357ae , 0x00003ffd // log(1/frcpa(1+190/2^-8))/2 -// -data8 0x8ee30cef034a20db , 0x00003ffd // log(1/frcpa(1+191/2^-8))/2 -data8 0x8f8b0515686d1d06 , 0x00003ffd // log(1/frcpa(1+192/2^-8))/2 -data8 0x90336bba039bf32f , 0x00003ffd // log(1/frcpa(1+193/2^-8))/2 -data8 0x90a3edd23d1c9d58 , 0x00003ffd // log(1/frcpa(1+194/2^-8))/2 -data8 0x914d0de2f5d61b32 , 0x00003ffd // log(1/frcpa(1+195/2^-8))/2 -// -data8 0x91be0c20d28173b5 , 0x00003ffd // log(1/frcpa(1+196/2^-8))/2 -data8 0x9267e737c06cd34a , 0x00003ffd // log(1/frcpa(1+197/2^-8))/2 -data8 0x92d962ae6abb1237 , 0x00003ffd // log(1/frcpa(1+198/2^-8))/2 -data8 0x9383fa6afbe2074c , 0x00003ffd // log(1/frcpa(1+199/2^-8))/2 -data8 0x942f0421651c1c4e , 0x00003ffd // log(1/frcpa(1+200/2^-8))/2 -// -data8 0x94a14a3845bb985e , 0x00003ffd // log(1/frcpa(1+201/2^-8))/2 -data8 0x954d133857f861e7 , 0x00003ffd // log(1/frcpa(1+202/2^-8))/2 -data8 0x95bfd96468e604c4 , 0x00003ffd // log(1/frcpa(1+203/2^-8))/2 -data8 0x9632d31cafafa858 , 0x00003ffd // log(1/frcpa(1+204/2^-8))/2 -data8 0x96dfaabd86fa1647 , 0x00003ffd // log(1/frcpa(1+205/2^-8))/2 -// -data8 0x9753261fcbb2a594 , 0x00003ffd // log(1/frcpa(1+206/2^-8))/2 -data8 0x9800c11b426b996d , 0x00003ffd // log(1/frcpa(1+207/2^-8))/2 -data8 0x9874bf4d45ae663c , 0x00003ffd // log(1/frcpa(1+208/2^-8))/2 -data8 0x99231f5ee9a74f79 , 0x00003ffd // log(1/frcpa(1+209/2^-8))/2 -data8 0x9997a18a56bcad28 , 0x00003ffd // log(1/frcpa(1+210/2^-8))/2 -// -data8 0x9a46c873a3267e79 , 0x00003ffd // log(1/frcpa(1+211/2^-8))/2 -data8 0x9abbcfc621eb6cb6 , 0x00003ffd // log(1/frcpa(1+212/2^-8))/2 -data8 0x9b310cb0d354c990 , 0x00003ffd // log(1/frcpa(1+213/2^-8))/2 -data8 0x9be14cf9e1b3515c , 0x00003ffd // log(1/frcpa(1+214/2^-8))/2 -data8 0x9c5710b8cbb73a43 , 0x00003ffd // log(1/frcpa(1+215/2^-8))/2 -// -data8 0x9ccd0abd301f399c , 0x00003ffd // log(1/frcpa(1+216/2^-8))/2 -data8 0x9d7e67f3bdce8888 , 0x00003ffd // log(1/frcpa(1+217/2^-8))/2 -data8 0x9df4ea81a99daa01 , 0x00003ffd // log(1/frcpa(1+218/2^-8))/2 -data8 0x9e6ba405a54514ba , 0x00003ffd // log(1/frcpa(1+219/2^-8))/2 -data8 0x9f1e21c8c7bb62b3 , 0x00003ffd // log(1/frcpa(1+220/2^-8))/2 -// -data8 0x9f956593f6b6355c , 0x00003ffd // log(1/frcpa(1+221/2^-8))/2 -data8 0xa00ce1092e5498c3 , 0x00003ffd // log(1/frcpa(1+222/2^-8))/2 -data8 0xa0c08309c4b912c1 , 0x00003ffd // log(1/frcpa(1+223/2^-8))/2 -data8 0xa1388a8c6faa2afa , 0x00003ffd // log(1/frcpa(1+224/2^-8))/2 -data8 0xa1b0ca7095b5f985 , 0x00003ffd // log(1/frcpa(1+225/2^-8))/2 -// -data8 0xa22942eb47534a00 , 0x00003ffd // log(1/frcpa(1+226/2^-8))/2 -data8 0xa2de62326449d0a3 , 0x00003ffd // log(1/frcpa(1+227/2^-8))/2 -data8 0xa357690f88bfe345 , 0x00003ffd // log(1/frcpa(1+228/2^-8))/2 -data8 0xa3d0a93f45169a4b , 0x00003ffd // log(1/frcpa(1+229/2^-8))/2 -data8 0xa44a22f7ffe65f30 , 0x00003ffd // log(1/frcpa(1+230/2^-8))/2 -// -data8 0xa500c5e5b4c1aa36 , 0x00003ffd // log(1/frcpa(1+231/2^-8))/2 -data8 0xa57ad064eb2ebbc2 , 0x00003ffd // log(1/frcpa(1+232/2^-8))/2 -data8 0xa5f5152dedf4384e , 0x00003ffd // log(1/frcpa(1+233/2^-8))/2 -data8 0xa66f9478856233ec , 0x00003ffd // log(1/frcpa(1+234/2^-8))/2 -data8 0xa6ea4e7cca02c32e , 0x00003ffd // log(1/frcpa(1+235/2^-8))/2 -// -data8 0xa765437325341ccf , 0x00003ffd // log(1/frcpa(1+236/2^-8))/2 -data8 0xa81e21e6c75b4020 , 0x00003ffd // log(1/frcpa(1+237/2^-8))/2 -data8 0xa899ab333fe2b9ca , 0x00003ffd // log(1/frcpa(1+238/2^-8))/2 -data8 0xa9157039c51ebe71 , 0x00003ffd // log(1/frcpa(1+239/2^-8))/2 -data8 0xa991713433c2b999 , 0x00003ffd // log(1/frcpa(1+240/2^-8))/2 -// -data8 0xaa0dae5cbcc048b3 , 0x00003ffd // log(1/frcpa(1+241/2^-8))/2 -data8 0xaa8a27ede5eb13ad , 0x00003ffd // log(1/frcpa(1+242/2^-8))/2 -data8 0xab06de228a9e3499 , 0x00003ffd // log(1/frcpa(1+243/2^-8))/2 -data8 0xab83d135dc633301 , 0x00003ffd // log(1/frcpa(1+244/2^-8))/2 -data8 0xac3fb076adc7fe7a , 0x00003ffd // log(1/frcpa(1+245/2^-8))/2 -// -data8 0xacbd3cbbe47988f1 , 0x00003ffd // log(1/frcpa(1+246/2^-8))/2 -data8 0xad3b06b1a5dc57c3 , 0x00003ffd // log(1/frcpa(1+247/2^-8))/2 -data8 0xadb90e94af887717 , 0x00003ffd // log(1/frcpa(1+248/2^-8))/2 -data8 0xae3754a218f7c816 , 0x00003ffd // log(1/frcpa(1+249/2^-8))/2 -data8 0xaeb5d9175437afa2 , 0x00003ffd // log(1/frcpa(1+250/2^-8))/2 -// -data8 0xaf349c322e9c7cee , 0x00003ffd // log(1/frcpa(1+251/2^-8))/2 -data8 0xafb39e30d1768d1c , 0x00003ffd // log(1/frcpa(1+252/2^-8))/2 -data8 0xb032df51c2c93116 , 0x00003ffd // log(1/frcpa(1+253/2^-8))/2 -data8 0xb0b25fd3e6035ad9 , 0x00003ffd // log(1/frcpa(1+254/2^-8))/2 -data8 0xb1321ff67cba178c , 0x00003ffd // log(1/frcpa(1+255/2^-8))/2 -LOCAL_OBJECT_END(atanh_data_3) - - - -.section .text -GLOBAL_LIBM_ENTRY(atanh) - -{ .mfi - getf.exp rArgSExpb = f8 // Must recompute if x unorm - fclass.m p13,p0 = f8, 0x0b // is arg denormal ? - mov rExpbMask = 0x1ffff -} -{ .mfi - addl DataPtr = @ltoff(atanh_data), gp - fnma.s1 fOneMx = f8, f1, f1 // fOneMx = 1 - x - mov rBias = 0xffff -} -;; - -{ .mfi - mov rNearZeroBound = 0xfffd // biased exp of 1/4 - fclass.m p12,p0 = f8, 0xc7 // is arg NaN or +/-0 ? - nop.i 0 -} -{ .mfi - ld8 DataPtr = [DataPtr] - fma.s1 fOnePx = f8, f1, f1 // fOnePx = 1 + x - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.lt.s1 p10,p11 = f8,f0 // is x < 0 ? - nop.i 0 -} -{ .mfb - nop.m 0 - fnorm.s1 fNormX = f8 // Normalize x -(p13) br.cond.spnt ATANH_UNORM // Branch if x=unorm -} -;; - -ATANH_COMMON: -// Return here if x=unorm and not denorm -{ .mfi - adds Data2Ptr = 0x50, DataPtr - fma.s1 fX2 = f8, f8, f0 // x^2 - nop.i 0 -} -{ .mfb - adds Data3Ptr = 0xC0, DataPtr -(p12) fma.d.s0 f8 = f8,f1,f8 // NaN or +/-0 -(p12) br.ret.spnt b0 // Exit for x Nan or zero -} -;; - -{ .mfi - ldfe fC9 = [Data2Ptr], 16 -(p11) frcpa.s1 fRcp0, p0 = f1, fOneMx - nop.i 0 -} -;; - -{ .mfi - ldfe fC8 = [Data2Ptr], 16 -(p10) frcpa.s1 fRcp0n, p0 = f1, fOnePx - and rArgExpb = rArgSExpb, rExpbMask // biased exponent -} -{ .mfi - nop.m 0 -(p10) fma.s1 fOneMx = fOnePx, f1, f0 // fOnePx = 1 - |x| - nop.i 0 -} -;; - -{ .mfi - ldfe fC7 = [Data2Ptr], 16 -(p10) fnma.s1 fOnePx = fNormX, f1, f1 // fOnePx = 1 + |x| - cmp.ge p6,p0 = rArgExpb, rBias // is Expb(Arg) >= Expb(1) ? -} -{ .mfb - nop.m 0 - nop.f 0 -(p6) br.cond.spnt atanh_ge_one // Branch if |x| >=1.0 -} -;; - -{ .mfi - ldfe fC6 = [Data2Ptr], 16 - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - ldfe fC5 = [Data2Ptr], 16 - fma.s1 fX4 = fX2, fX2, f0 // x^4 - cmp.gt p8,p0 = rNearZeroBound, rArgExpb -} -{ .mfb - ldfe fC2 = [Data3Ptr], 16 - fma.s1 fX3 = fX2, fNormX, f0 // x^3 -(p8) br.cond.spnt atanh_near_zero // Exit if 0 < |x| < 0.25 -} -;; - -// Main path: 0.25 <= |x| < 1.0 -// NR method: iteration #1 -.pred.rel "mutex",p11,p10 -{ .mfi - ldfpd fP5, fP4 = [DataPtr], 16 -(p11) fnma.s1 fRcp1 = fRcp0, fOneMx, f1 // t = 1 - r0*x - nop.i 0 -} -{ .mfi - nop.m 0 -(p10) fnma.s1 fRcp1 = fRcp0n, fOneMx, f1 // t = 1 - r0*x - nop.i 0 -} -;; - -{ .mfi - ldfpd fP3, fP2 = [DataPtr], 16 - // r1 = r0 + r0*t = r0 + r0*(1 - r0*x) -(p11) fma.s1 fRcp1 = fRcp0, fRcp1, fRcp0 - nop.i 0 -} -{ .mfi - nop.m 0 - // r1 = r0 + r0*t = r0 + r0*(1 - r0*x) -(p10) fma.s1 fRcp1 = fRcp0n, fRcp1, fRcp0n - nop.i 0 -} -;; - -// NR method: iteration #2 -{ .mfi - ldfd fP1 = [DataPtr], 16 - fnma.s1 fRcp2 = fRcp1, fOneMx, f1 // t = 1 - r1*x - nop.i 0 -} -;; - -{ .mfi - ldfe fLog2 = [DataPtr], 16 - // r2 = r1 + r1*t = r1 + r1*(1 - r1*x) - fma.s1 fRcp2 = fRcp1, fRcp2, fRcp1 - nop.i 0 -} -;; - -// NR method: iteration #3 -{ .mfi - adds RcpTablePtr = 0xB0, DataPtr - fnma.s1 fRcp3 = fRcp2, fOneMx, f1 // t = 1 - r2*x - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fY4Rcp = fRcp2, fOnePx, f0 // fY4Rcp = r2*(1 + x) - nop.i 0 -} -;; - -// polynomial approximation & final reconstruction -{ .mfi - nop.m 0 - frcpa.s1 fRcp, p0 = f1, fY4Rcp - nop.i 0 -} -{ .mfi - nop.m 0 - // y = r2 * (1 + x) + r2 * (1 + x) * t = (1 + x) * (r2 + r2*(1 - r2*x)) - fma.s1 fY = fY4Rcp, fRcp3, fY4Rcp - nop.i 0 -} -;; - -{ .mmi - getf.exp rSExpb = fY4Rcp // biased exponent and sign -;; - getf.sig rSig = fY4Rcp // significand - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fms.s1 fR = fY, fRcp, f1 // fR = fY * fRcp - 1 - nop.i 0 -} -;; - -{ .mmi - and rExpb = rSExpb, rExpbMask -;; - sub rN = rExpb, rBias // exponent - extr.u rInd = rSig,55,8 // Extract 8 bits -} -;; - -{ .mmi - setf.sig fN4Cvt = rN - shladd RcpTablePtr = rInd, 4, RcpTablePtr - nop.i 0 -} -;; - -{ .mfi - ldfe fLogT = [RcpTablePtr] - fma.s1 fR2 = fR, fR, f0 // r^2 - nop.i 0 -} -{ - nop.m 0 - fma.s1 fP54 = fP5, fR, fP4 // P5*r + P4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP32 = fP3, fR, fP2 // P3*r + P2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fR3 = fR2, fR, f0 // r^3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fP10 = fP1, fR2, fR // P1*r^2 + r - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.xf fN = fN4Cvt - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fP54 = fP54, fR2, fP32 // (P5*r + P4)*r^2 + P3*r + P2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fLogT_N = fN, fLog2, fLogT // N*Log2 + LogT - nop.i 0 -} -{ .mfi - nop.m 0 - // ((P5*r + P4)*r^2 + P3*r + P2)*r^3 + P1*r^2 + r - fma.s1 fP54 = fP54, fR3, fP10 - nop.i 0 -} -;; - -.pred.rel "mutex",p11,p10 -{ .mfi - nop.m 0 - // 0.5*(((P5*r + P4)*r^2 + P3*r + P2)*r^3 + P1*r^2 + r) + 0.5*(N*Log2 + T) -(p11) fnma.d.s0 f8 = fP54, fP1, fLogT_N - nop.i 0 -} -{ .mfb - nop.m 0 - // -0.5*(((P5*r + P4)*r^2 + P3*r + P2)*r^3 + P1*r^2 + r) - 0.5*(N*Log2 + T) -(p10) fms.d.s0 f8 = fP54, fP1, fLogT_N - br.ret.sptk b0 // Exit for 0.25 <= |x| < 1.0 -} -;; - -// Here if 0 < |x| < 0.25 -atanh_near_zero: -{ .mfi - ldfe fC4 = [Data2Ptr], 16 - fma.s1 fP98 = fC9, fX2, fC8 // C9*x^2 + C8 - nop.i 0 -} -{ .mfi - ldfe fC1 = [Data3Ptr], 16 - fma.s1 fP76 = fC7, fX2, fC6 // C7*x^2 + C6 - nop.i 0 -} -;; - -{ .mfi - ldfe fC3 = [Data2Ptr], 16 - fma.s1 fX8 = fX4, fX4, f0 // x^8 - nop.i 0 -} -{ .mfi - ldfe fC0 = [Data3Ptr], 16 - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP98 = fP98, fX4, fP76 // C9*x^6 + C8*x^4 + C7*x^2 + C6 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP54 = fC5, fX2, fC4 // C5*x^2 + C4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP32 = fC3, fX2, fC2 // C3*x^2 + C2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP10 = fC1, fX2, fC0 // C1*x^2 + C0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP54 = fP54, fX4, fP32 // C5*x^6 + C4*x^4 + C3*x^2 + C2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // C9*x^14 + C8*x^12 + C7*x^10 + C6*x^8 + C5*x^6 + C4*x^4 + C3*x^2 + C2 - fma.s1 fP98 = fP98, fX8, fP54 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // C9*x^18 + C8*x^16 + C7*x^14 + C6*x^12 + C5*x^10 + C4*x^8 + C3*x^6 + - // C2*x^4 + C1*x^2 + C0 - fma.s1 fP98 = fP98, fX4, fP10 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - // C9*x^21 + C8*x^19 + C7*x^17 + C6*x^15 + C5*x^13 + C4*x^11 + C3*x^9 + - // C2*x^7 + C1*x^5 + C0*x^3 + x - fma.d.s0 f8 = fP98, fX3, fNormX - br.ret.sptk b0 // Exit for 0 < |x| < 0.25 -} -;; - -ATANH_UNORM: -// Here if x=unorm -{ .mfi - getf.exp rArgSExpb = fNormX // Recompute if x unorm - fclass.m p0,p13 = fNormX, 0x0b // Test x denorm - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy to set denormal flag -(p13) br.cond.sptk ATANH_COMMON // Continue if x unorm and not denorm -} -;; - -.pred.rel "mutex",p10,p11 -{ .mfi - nop.m 0 -(p10) fnma.d.s0 f8 = f8,f8,f8 // Result x-x^2 if x=-denorm - nop.i 0 -} -{ .mfb - nop.m 0 -(p11) fma.d.s0 f8 = f8,f8,f8 // Result x+x^2 if x=+denorm - br.ret.spnt b0 // Exit if denorm -} -;; - -// Here if |x| >= 1.0 -atanh_ge_one: -{ .mfi - alloc r32 = ar.pfs,1,3,4,0 - fmerge.s fAbsX = f0, f8 // Form |x| - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fmerge.s f10 = f8, f8 // Save input for error call - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.s1 p6,p7 = fAbsX, f1 // Test for |x| = 1.0 - nop.i 0 -} -;; - -// Set error tag and result, and raise invalid flag if |x| > 1.0 -{ .mfi -(p7) mov atanh_GR_tag = 131 -(p7) frcpa.s0 f8, p0 = f0, f0 // Get QNaN, and raise invalid - nop.i 0 -} -;; - -// Set error tag and result, and raise Z flag if |x| = 1.0 -{ .mfi - nop.m 0 -(p6) frcpa.s0 fRcp, p0 = f1, f0 // Get inf, and raise Z flag - nop.i 0 -} -;; - -{ .mfb -(p6) mov atanh_GR_tag = 132 -(p6) fmerge.s f8 = f8, fRcp // result is +-inf - br.cond.sptk __libm_error_region // Exit if |x| >= 1.0 -} -;; - -GLOBAL_LIBM_END(atanh) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfd [GR_Parameter_Y] = f1,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfd [GR_Parameter_X] = f10 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_atanhf.S b/sysdeps/ia64/fpu/e_atanhf.S deleted file mode 100644 index 1ec1408e35..0000000000 --- a/sysdeps/ia64/fpu/e_atanhf.S +++ /dev/null @@ -1,845 +0,0 @@ -.file "atanhf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 05/22/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 08/06/02 Improved Itanium 2 performance -// 02/06/03 Reordered header: .section, .global, .proc, .align -// 05/26/03 Improved performance, fixed to handle unorms -// -// API -//============================================================== -// float atanhf(float) -// -// Overview of operation -//============================================================== -// Background -// -// -// There are 7 paths: -// 1. x = +/-0.0 -// Return atanhf(x) = +/-0.0 -// -// 2. 0.0 < |x| <= MAX_DENORMAL_ABS -// Return atanhf(x) = x + sign(x)*x^2 -// -// 3. MAX_DENORMAL_ABS < |x| < 2^(-20) -// Return atanhf(x) = Pol3(x), where Pol3(x) = x + x^3 -// -// 4. 2^(-20) <= |x| < 1 -// Return atanhf(x) = 0.5 * (log(1 + x) - log(1 - x)) -// Algorithm description for log function see below. -// -// 5. |x| = 1 -// Return atanhf(x) = sign(x) * +INF -// -// 6. 1 < |x| <= +INF -// Return atanhf(x) = QNaN -// -// 7. x = [S,Q]NaN -// Return atanhf(x) = QNaN -// -//============================================================== -// Algorithm Description for log(x) function -// -// Consider x = 2^N * 1.f1 f2 f3 f4...f63 -// log(x) = log(x * frcpa(x) / frcpa(x)) -// = log(x * frcpa(x)) + log(1/frcpa(x)) -// = log(x * frcpa(x)) - log(frcpa(x)) -// -// frcpa(x) = 2^(-N) * frcpa(1.f1 f2 ... f63) -// -// -log(frcpa(x)) = -log(C) -// = -log(2^(-N)) - log(frcpa(1.f1 f2 ... f63)) -// -// -log(frcpa(x)) = -log(C) -// = N*log2 - log(frcpa(1.f1 f2 ... f63)) -// -// -// log(x) = log(1/frcpa(x)) + log(frcpa(x) x) -// -// log(x) = N*log2 + log(1./frcpa(1.f1 f2 ... f63)) + log(x * frcpa(x)) -// log(x) = N*log2 + T + log(frcpa(x) x) -// -// Log(x) = N*log2 + T + log(C * x) -// -// C * x = 1 + r -// -// log(x) = N*log2 + T + log(1 + r) -// log(x) = N*log2 + T + Series(r) -// -// 1.f1 f2 ... f8 has 256 entries. -// They are 1 + k/2^8, k = 0 ... 255 -// These 256 values are the table entries. -// -// Implementation -//============================================================== -// C = frcpa(x) -// r = C * x - 1 -// -// Form rseries = r + P1*r^2 + P2*r^3 + P3*r^4 -// -// x = f * 2*N where f is 1.f_1f_2f_3...f_63 -// Nfloat = float(n) where n is the true unbiased exponent -// pre-index = f_1f_2....f_8 -// index = pre_index * 16 -// get the dxt table entry at index + offset = T -// -// result = (T + Nfloat * log(2)) + rseries -// -// The T table is calculated as follows -// Form x_k = 1 + k/2^8 where k goes from 0... 255 -// y_k = frcpa(x_k) -// log(1/y_k) in quad and round to double-extended - -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f32 -> f59 - -// General registers used: -// r14 -> r29, r32 -> r39 - -// Predicate registers used: -// p6 -> p9 - -// p6 to filter out case when |x| >= 1 -// p7 to filter out case when x = [Q,S]NaN or +/-0 -// p8 to filter out case when |x| < 2^(-20) -// p9 to filter out case when x = denormal - - -// Assembly macros -//============================================================== -DataPtr = r14 -RcpTablePtrM = r15 -RcpTablePtrP = r16 -rExpbMask = r17 -rBias = r18 -rNearZeroBound = r19 -rArgSExpb = r20 -rArgExpb = r21 -rExpbm = r22 -rExpbp = r23 -rSigm = r24 -rSigp = r25 -rNm = r26 -rNp = r27 -rIndm = r28 -rIndp = r29 - -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_SAVE_PFS = r35 - -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -atanh_GR_tag = r39 - -//============================================================== -fOneMx = f33 -fOnePx = f34 -fRm2 = f35 -fRm3 = f36 -fRp2 = f37 -fRp3 = f38 -fRcpM = f39 -fRcpP = f40 -fRp = f41 -fRm = f42 -fN4CvtM = f43 -fN4CvtP = f44 -fNm = f45 -fNp = f46 -fLogTm = f47 -fLogTp = f48 -fLog2 = f49 -fArgAbs = f50 -fNormX = f50 -fP32m = f51 -fP32p = f52 -fP10m = f53 -fP10p = f54 -fX2 = f55 -fP3 = f56 -fP2 = f57 -fP1 = f58 -fHalf = f59 - - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(atanhf_data) -data8 0xbfc0001008f39d59 // P3*0.5 -data8 0x3fc5556073e0c45a // P2*0.5 -data8 0xbfcffffffffaea15 // P1*0.5 -data8 0x3fe0000000000000 // 0.5 -data8 0x3fd62e42fefa39ef // 0.5*ln(2) -data8 0x0000000000000000 // pad -LOCAL_OBJECT_END(atanhf_data) - -LOCAL_OBJECT_START(atanhf_data2) -data8 0x3f50040155d5889e //log(1/frcpa(1+0/256))/2 -data8 0x3f68121214586b54 //log(1/frcpa(1+1/256))/2 -data8 0x3f741929f96832f0 //log(1/frcpa(1+2/256))/2 -data8 0x3f7c317384c75f06 //log(1/frcpa(1+3/256))/2 -data8 0x3f81a6b91ac73386 //log(1/frcpa(1+4/256))/2 -data8 0x3f85ba9a5d9ac039 //log(1/frcpa(1+5/256))/2 -data8 0x3f89d2a8074325f4 //log(1/frcpa(1+6/256))/2 -data8 0x3f8d6b2725979802 //log(1/frcpa(1+7/256))/2 -data8 0x3f90c58fa19dfaaa //log(1/frcpa(1+8/256))/2 -data8 0x3f92954c78cbce1b //log(1/frcpa(1+9/256))/2 -data8 0x3f94a94d2da96c56 //log(1/frcpa(1+10/256))/2 -data8 0x3f967c94f2d4bb58 //log(1/frcpa(1+11/256))/2 -data8 0x3f985188b630f068 //log(1/frcpa(1+12/256))/2 -data8 0x3f9a6b8abe73af4c //log(1/frcpa(1+13/256))/2 -data8 0x3f9c441e06f72a9e //log(1/frcpa(1+14/256))/2 -data8 0x3f9e1e6713606d07 //log(1/frcpa(1+15/256))/2 -data8 0x3f9ffa6911ab9301 //log(1/frcpa(1+16/256))/2 -data8 0x3fa0ec139c5da601 //log(1/frcpa(1+17/256))/2 -data8 0x3fa1dbd2643d190b //log(1/frcpa(1+18/256))/2 -data8 0x3fa2cc7284fe5f1c //log(1/frcpa(1+19/256))/2 -data8 0x3fa3bdf5a7d1ee64 //log(1/frcpa(1+20/256))/2 -data8 0x3fa4b05d7aa012e0 //log(1/frcpa(1+21/256))/2 -data8 0x3fa580db7ceb5702 //log(1/frcpa(1+22/256))/2 -data8 0x3fa674f089365a7a //log(1/frcpa(1+23/256))/2 -data8 0x3fa769ef2c6b568d //log(1/frcpa(1+24/256))/2 -data8 0x3fa85fd927506a48 //log(1/frcpa(1+25/256))/2 -data8 0x3fa9335e5d594989 //log(1/frcpa(1+26/256))/2 -data8 0x3faa2b0220c8e5f5 //log(1/frcpa(1+27/256))/2 -data8 0x3fab0004ac1a86ac //log(1/frcpa(1+28/256))/2 -data8 0x3fabf968769fca11 //log(1/frcpa(1+29/256))/2 -data8 0x3faccfedbfee13a8 //log(1/frcpa(1+30/256))/2 -data8 0x3fada727638446a2 //log(1/frcpa(1+31/256))/2 -data8 0x3faea3257fe10f7a //log(1/frcpa(1+32/256))/2 -data8 0x3faf7be9fedbfde6 //log(1/frcpa(1+33/256))/2 -data8 0x3fb02ab352ff25f4 //log(1/frcpa(1+34/256))/2 -data8 0x3fb097ce579d204d //log(1/frcpa(1+35/256))/2 -data8 0x3fb1178e8227e47c //log(1/frcpa(1+36/256))/2 -data8 0x3fb185747dbecf34 //log(1/frcpa(1+37/256))/2 -data8 0x3fb1f3b925f25d41 //log(1/frcpa(1+38/256))/2 -data8 0x3fb2625d1e6ddf57 //log(1/frcpa(1+39/256))/2 -data8 0x3fb2d1610c86813a //log(1/frcpa(1+40/256))/2 -data8 0x3fb340c59741142e //log(1/frcpa(1+41/256))/2 -data8 0x3fb3b08b6757f2a9 //log(1/frcpa(1+42/256))/2 -data8 0x3fb40dfb08378003 //log(1/frcpa(1+43/256))/2 -data8 0x3fb47e74e8ca5f7c //log(1/frcpa(1+44/256))/2 -data8 0x3fb4ef51f6466de4 //log(1/frcpa(1+45/256))/2 -data8 0x3fb56092e02ba516 //log(1/frcpa(1+46/256))/2 -data8 0x3fb5d23857cd74d5 //log(1/frcpa(1+47/256))/2 -data8 0x3fb6313a37335d76 //log(1/frcpa(1+48/256))/2 -data8 0x3fb6a399dabbd383 //log(1/frcpa(1+49/256))/2 -data8 0x3fb70337dd3ce41b //log(1/frcpa(1+50/256))/2 -data8 0x3fb77654128f6127 //log(1/frcpa(1+51/256))/2 -data8 0x3fb7e9d82a0b022d //log(1/frcpa(1+52/256))/2 -data8 0x3fb84a6b759f512f //log(1/frcpa(1+53/256))/2 -data8 0x3fb8ab47d5f5a310 //log(1/frcpa(1+54/256))/2 -data8 0x3fb91fe49096581b //log(1/frcpa(1+55/256))/2 -data8 0x3fb981634011aa75 //log(1/frcpa(1+56/256))/2 -data8 0x3fb9f6c407089664 //log(1/frcpa(1+57/256))/2 -data8 0x3fba58e729348f43 //log(1/frcpa(1+58/256))/2 -data8 0x3fbabb55c31693ad //log(1/frcpa(1+59/256))/2 -data8 0x3fbb1e104919efd0 //log(1/frcpa(1+60/256))/2 -data8 0x3fbb94ee93e367cb //log(1/frcpa(1+61/256))/2 -data8 0x3fbbf851c067555f //log(1/frcpa(1+62/256))/2 -data8 0x3fbc5c0254bf23a6 //log(1/frcpa(1+63/256))/2 -data8 0x3fbcc000c9db3c52 //log(1/frcpa(1+64/256))/2 -data8 0x3fbd244d99c85674 //log(1/frcpa(1+65/256))/2 -data8 0x3fbd88e93fb2f450 //log(1/frcpa(1+66/256))/2 -data8 0x3fbdedd437eaef01 //log(1/frcpa(1+67/256))/2 -data8 0x3fbe530effe71012 //log(1/frcpa(1+68/256))/2 -data8 0x3fbeb89a1648b971 //log(1/frcpa(1+69/256))/2 -data8 0x3fbf1e75fadf9bde //log(1/frcpa(1+70/256))/2 -data8 0x3fbf84a32ead7c35 //log(1/frcpa(1+71/256))/2 -data8 0x3fbfeb2233ea07cd //log(1/frcpa(1+72/256))/2 -data8 0x3fc028f9c7035c1c //log(1/frcpa(1+73/256))/2 -data8 0x3fc05c8be0d9635a //log(1/frcpa(1+74/256))/2 -data8 0x3fc085eb8f8ae797 //log(1/frcpa(1+75/256))/2 -data8 0x3fc0b9c8e32d1911 //log(1/frcpa(1+76/256))/2 -data8 0x3fc0edd060b78081 //log(1/frcpa(1+77/256))/2 -data8 0x3fc122024cf0063f //log(1/frcpa(1+78/256))/2 -data8 0x3fc14be2927aecd4 //log(1/frcpa(1+79/256))/2 -data8 0x3fc180618ef18adf //log(1/frcpa(1+80/256))/2 -data8 0x3fc1b50bbe2fc63b //log(1/frcpa(1+81/256))/2 -data8 0x3fc1df4cc7cf242d //log(1/frcpa(1+82/256))/2 -data8 0x3fc214456d0eb8d4 //log(1/frcpa(1+83/256))/2 -data8 0x3fc23ec5991eba49 //log(1/frcpa(1+84/256))/2 -data8 0x3fc2740d9f870afb //log(1/frcpa(1+85/256))/2 -data8 0x3fc29ecdabcdfa04 //log(1/frcpa(1+86/256))/2 -data8 0x3fc2d46602adccee //log(1/frcpa(1+87/256))/2 -data8 0x3fc2ff66b04ea9d4 //log(1/frcpa(1+88/256))/2 -data8 0x3fc335504b355a37 //log(1/frcpa(1+89/256))/2 -data8 0x3fc360925ec44f5d //log(1/frcpa(1+90/256))/2 -data8 0x3fc38bf1c3337e75 //log(1/frcpa(1+91/256))/2 -data8 0x3fc3c25277333184 //log(1/frcpa(1+92/256))/2 -data8 0x3fc3edf463c1683e //log(1/frcpa(1+93/256))/2 -data8 0x3fc419b423d5e8c7 //log(1/frcpa(1+94/256))/2 -data8 0x3fc44591e0539f49 //log(1/frcpa(1+95/256))/2 -data8 0x3fc47c9175b6f0ad //log(1/frcpa(1+96/256))/2 -data8 0x3fc4a8b341552b09 //log(1/frcpa(1+97/256))/2 -data8 0x3fc4d4f3908901a0 //log(1/frcpa(1+98/256))/2 -data8 0x3fc501528da1f968 //log(1/frcpa(1+99/256))/2 -data8 0x3fc52dd06347d4f6 //log(1/frcpa(1+100/256))/2 -data8 0x3fc55a6d3c7b8a8a //log(1/frcpa(1+101/256))/2 -data8 0x3fc5925d2b112a59 //log(1/frcpa(1+102/256))/2 -data8 0x3fc5bf406b543db2 //log(1/frcpa(1+103/256))/2 -data8 0x3fc5ec433d5c35ae //log(1/frcpa(1+104/256))/2 -data8 0x3fc61965cdb02c1f //log(1/frcpa(1+105/256))/2 -data8 0x3fc646a84935b2a2 //log(1/frcpa(1+106/256))/2 -data8 0x3fc6740add31de94 //log(1/frcpa(1+107/256))/2 -data8 0x3fc6a18db74a58c5 //log(1/frcpa(1+108/256))/2 -data8 0x3fc6cf31058670ec //log(1/frcpa(1+109/256))/2 -data8 0x3fc6f180e852f0ba //log(1/frcpa(1+110/256))/2 -data8 0x3fc71f5d71b894f0 //log(1/frcpa(1+111/256))/2 -data8 0x3fc74d5aefd66d5c //log(1/frcpa(1+112/256))/2 -data8 0x3fc77b79922bd37e //log(1/frcpa(1+113/256))/2 -data8 0x3fc7a9b9889f19e2 //log(1/frcpa(1+114/256))/2 -data8 0x3fc7d81b037eb6a6 //log(1/frcpa(1+115/256))/2 -data8 0x3fc8069e33827231 //log(1/frcpa(1+116/256))/2 -data8 0x3fc82996d3ef8bcb //log(1/frcpa(1+117/256))/2 -data8 0x3fc85855776dcbfb //log(1/frcpa(1+118/256))/2 -data8 0x3fc8873658327ccf //log(1/frcpa(1+119/256))/2 -data8 0x3fc8aa75973ab8cf //log(1/frcpa(1+120/256))/2 -data8 0x3fc8d992dc8824e5 //log(1/frcpa(1+121/256))/2 -data8 0x3fc908d2ea7d9512 //log(1/frcpa(1+122/256))/2 -data8 0x3fc92c59e79c0e56 //log(1/frcpa(1+123/256))/2 -data8 0x3fc95bd750ee3ed3 //log(1/frcpa(1+124/256))/2 -data8 0x3fc98b7811a3ee5b //log(1/frcpa(1+125/256))/2 -data8 0x3fc9af47f33d406c //log(1/frcpa(1+126/256))/2 -data8 0x3fc9df270c1914a8 //log(1/frcpa(1+127/256))/2 -data8 0x3fca0325ed14fda4 //log(1/frcpa(1+128/256))/2 -data8 0x3fca33440224fa79 //log(1/frcpa(1+129/256))/2 -data8 0x3fca57725e80c383 //log(1/frcpa(1+130/256))/2 -data8 0x3fca87d0165dd199 //log(1/frcpa(1+131/256))/2 -data8 0x3fcaac2e6c03f896 //log(1/frcpa(1+132/256))/2 -data8 0x3fcadccc6fdf6a81 //log(1/frcpa(1+133/256))/2 -data8 0x3fcb015b3eb1e790 //log(1/frcpa(1+134/256))/2 -data8 0x3fcb323a3a635948 //log(1/frcpa(1+135/256))/2 -data8 0x3fcb56fa04462909 //log(1/frcpa(1+136/256))/2 -data8 0x3fcb881aa659bc93 //log(1/frcpa(1+137/256))/2 -data8 0x3fcbad0bef3db165 //log(1/frcpa(1+138/256))/2 -data8 0x3fcbd21297781c2f //log(1/frcpa(1+139/256))/2 -data8 0x3fcc039236f08819 //log(1/frcpa(1+140/256))/2 -data8 0x3fcc28cb1e4d32fd //log(1/frcpa(1+141/256))/2 -data8 0x3fcc4e19b84723c2 //log(1/frcpa(1+142/256))/2 -data8 0x3fcc7ff9c74554c9 //log(1/frcpa(1+143/256))/2 -data8 0x3fcca57b64e9db05 //log(1/frcpa(1+144/256))/2 -data8 0x3fcccb130a5cebb0 //log(1/frcpa(1+145/256))/2 -data8 0x3fccf0c0d18f326f //log(1/frcpa(1+146/256))/2 -data8 0x3fcd232075b5a201 //log(1/frcpa(1+147/256))/2 -data8 0x3fcd490246defa6b //log(1/frcpa(1+148/256))/2 -data8 0x3fcd6efa918d25cd //log(1/frcpa(1+149/256))/2 -data8 0x3fcd9509707ae52f //log(1/frcpa(1+150/256))/2 -data8 0x3fcdbb2efe92c554 //log(1/frcpa(1+151/256))/2 -data8 0x3fcdee2f3445e4af //log(1/frcpa(1+152/256))/2 -data8 0x3fce148a1a2726ce //log(1/frcpa(1+153/256))/2 -data8 0x3fce3afc0a49ff40 //log(1/frcpa(1+154/256))/2 -data8 0x3fce6185206d516e //log(1/frcpa(1+155/256))/2 -data8 0x3fce882578823d52 //log(1/frcpa(1+156/256))/2 -data8 0x3fceaedd2eac990c //log(1/frcpa(1+157/256))/2 -data8 0x3fced5ac5f436be3 //log(1/frcpa(1+158/256))/2 -data8 0x3fcefc9326d16ab9 //log(1/frcpa(1+159/256))/2 -data8 0x3fcf2391a2157600 //log(1/frcpa(1+160/256))/2 -data8 0x3fcf4aa7ee03192d //log(1/frcpa(1+161/256))/2 -data8 0x3fcf71d627c30bb0 //log(1/frcpa(1+162/256))/2 -data8 0x3fcf991c6cb3b379 //log(1/frcpa(1+163/256))/2 -data8 0x3fcfc07ada69a910 //log(1/frcpa(1+164/256))/2 -data8 0x3fcfe7f18eb03d3e //log(1/frcpa(1+165/256))/2 -data8 0x3fd007c053c5002e //log(1/frcpa(1+166/256))/2 -data8 0x3fd01b942198a5a1 //log(1/frcpa(1+167/256))/2 -data8 0x3fd02f74400c64eb //log(1/frcpa(1+168/256))/2 -data8 0x3fd04360be7603ad //log(1/frcpa(1+169/256))/2 -data8 0x3fd05759ac47fe34 //log(1/frcpa(1+170/256))/2 -data8 0x3fd06b5f1911cf52 //log(1/frcpa(1+171/256))/2 -data8 0x3fd078bf0533c568 //log(1/frcpa(1+172/256))/2 -data8 0x3fd08cd9687e7b0e //log(1/frcpa(1+173/256))/2 -data8 0x3fd0a10074cf9019 //log(1/frcpa(1+174/256))/2 -data8 0x3fd0b5343a234477 //log(1/frcpa(1+175/256))/2 -data8 0x3fd0c974c89431ce //log(1/frcpa(1+176/256))/2 -data8 0x3fd0ddc2305b9886 //log(1/frcpa(1+177/256))/2 -data8 0x3fd0eb524bafc918 //log(1/frcpa(1+178/256))/2 -data8 0x3fd0ffb54213a476 //log(1/frcpa(1+179/256))/2 -data8 0x3fd114253da97d9f //log(1/frcpa(1+180/256))/2 -data8 0x3fd128a24f1d9aff //log(1/frcpa(1+181/256))/2 -data8 0x3fd1365252bf0865 //log(1/frcpa(1+182/256))/2 -data8 0x3fd14ae558b4a92d //log(1/frcpa(1+183/256))/2 -data8 0x3fd15f85a19c765b //log(1/frcpa(1+184/256))/2 -data8 0x3fd16d4d38c119fa //log(1/frcpa(1+185/256))/2 -data8 0x3fd18203c20dd133 //log(1/frcpa(1+186/256))/2 -data8 0x3fd196c7bc4b1f3b //log(1/frcpa(1+187/256))/2 -data8 0x3fd1a4a738b7a33c //log(1/frcpa(1+188/256))/2 -data8 0x3fd1b981c0c9653d //log(1/frcpa(1+189/256))/2 -data8 0x3fd1ce69e8bb106b //log(1/frcpa(1+190/256))/2 -data8 0x3fd1dc619de06944 //log(1/frcpa(1+191/256))/2 -data8 0x3fd1f160a2ad0da4 //log(1/frcpa(1+192/256))/2 -data8 0x3fd2066d7740737e //log(1/frcpa(1+193/256))/2 -data8 0x3fd2147dba47a394 //log(1/frcpa(1+194/256))/2 -data8 0x3fd229a1bc5ebac3 //log(1/frcpa(1+195/256))/2 -data8 0x3fd237c1841a502e //log(1/frcpa(1+196/256))/2 -data8 0x3fd24cfce6f80d9a //log(1/frcpa(1+197/256))/2 -data8 0x3fd25b2c55cd5762 //log(1/frcpa(1+198/256))/2 -data8 0x3fd2707f4d5f7c41 //log(1/frcpa(1+199/256))/2 -data8 0x3fd285e0842ca384 //log(1/frcpa(1+200/256))/2 -data8 0x3fd294294708b773 //log(1/frcpa(1+201/256))/2 -data8 0x3fd2a9a2670aff0c //log(1/frcpa(1+202/256))/2 -data8 0x3fd2b7fb2c8d1cc1 //log(1/frcpa(1+203/256))/2 -data8 0x3fd2c65a6395f5f5 //log(1/frcpa(1+204/256))/2 -data8 0x3fd2dbf557b0df43 //log(1/frcpa(1+205/256))/2 -data8 0x3fd2ea64c3f97655 //log(1/frcpa(1+206/256))/2 -data8 0x3fd3001823684d73 //log(1/frcpa(1+207/256))/2 -data8 0x3fd30e97e9a8b5cd //log(1/frcpa(1+208/256))/2 -data8 0x3fd32463ebdd34ea //log(1/frcpa(1+209/256))/2 -data8 0x3fd332f4314ad796 //log(1/frcpa(1+210/256))/2 -data8 0x3fd348d90e7464d0 //log(1/frcpa(1+211/256))/2 -data8 0x3fd35779f8c43d6e //log(1/frcpa(1+212/256))/2 -data8 0x3fd36621961a6a99 //log(1/frcpa(1+213/256))/2 -data8 0x3fd37c299f3c366a //log(1/frcpa(1+214/256))/2 -data8 0x3fd38ae2171976e7 //log(1/frcpa(1+215/256))/2 -data8 0x3fd399a157a603e7 //log(1/frcpa(1+216/256))/2 -data8 0x3fd3afccfe77b9d1 //log(1/frcpa(1+217/256))/2 -data8 0x3fd3be9d503533b5 //log(1/frcpa(1+218/256))/2 -data8 0x3fd3cd7480b4a8a3 //log(1/frcpa(1+219/256))/2 -data8 0x3fd3e3c43918f76c //log(1/frcpa(1+220/256))/2 -data8 0x3fd3f2acb27ed6c7 //log(1/frcpa(1+221/256))/2 -data8 0x3fd4019c2125ca93 //log(1/frcpa(1+222/256))/2 -data8 0x3fd4181061389722 //log(1/frcpa(1+223/256))/2 -data8 0x3fd42711518df545 //log(1/frcpa(1+224/256))/2 -data8 0x3fd436194e12b6bf //log(1/frcpa(1+225/256))/2 -data8 0x3fd445285d68ea69 //log(1/frcpa(1+226/256))/2 -data8 0x3fd45bcc464c893a //log(1/frcpa(1+227/256))/2 -data8 0x3fd46aed21f117fc //log(1/frcpa(1+228/256))/2 -data8 0x3fd47a1527e8a2d3 //log(1/frcpa(1+229/256))/2 -data8 0x3fd489445efffccc //log(1/frcpa(1+230/256))/2 -data8 0x3fd4a018bcb69835 //log(1/frcpa(1+231/256))/2 -data8 0x3fd4af5a0c9d65d7 //log(1/frcpa(1+232/256))/2 -data8 0x3fd4bea2a5bdbe87 //log(1/frcpa(1+233/256))/2 -data8 0x3fd4cdf28f10ac46 //log(1/frcpa(1+234/256))/2 -data8 0x3fd4dd49cf994058 //log(1/frcpa(1+235/256))/2 -data8 0x3fd4eca86e64a684 //log(1/frcpa(1+236/256))/2 -data8 0x3fd503c43cd8eb68 //log(1/frcpa(1+237/256))/2 -data8 0x3fd513356667fc57 //log(1/frcpa(1+238/256))/2 -data8 0x3fd522ae0738a3d8 //log(1/frcpa(1+239/256))/2 -data8 0x3fd5322e26867857 //log(1/frcpa(1+240/256))/2 -data8 0x3fd541b5cb979809 //log(1/frcpa(1+241/256))/2 -data8 0x3fd55144fdbcbd62 //log(1/frcpa(1+242/256))/2 -data8 0x3fd560dbc45153c7 //log(1/frcpa(1+243/256))/2 -data8 0x3fd5707a26bb8c66 //log(1/frcpa(1+244/256))/2 -data8 0x3fd587f60ed5b900 //log(1/frcpa(1+245/256))/2 -data8 0x3fd597a7977c8f31 //log(1/frcpa(1+246/256))/2 -data8 0x3fd5a760d634bb8b //log(1/frcpa(1+247/256))/2 -data8 0x3fd5b721d295f10f //log(1/frcpa(1+248/256))/2 -data8 0x3fd5c6ea94431ef9 //log(1/frcpa(1+249/256))/2 -data8 0x3fd5d6bb22ea86f6 //log(1/frcpa(1+250/256))/2 -data8 0x3fd5e6938645d390 //log(1/frcpa(1+251/256))/2 -data8 0x3fd5f673c61a2ed2 //log(1/frcpa(1+252/256))/2 -data8 0x3fd6065bea385926 //log(1/frcpa(1+253/256))/2 -data8 0x3fd6164bfa7cc06b //log(1/frcpa(1+254/256))/2 -data8 0x3fd62643fecf9743 //log(1/frcpa(1+255/256))/2 -LOCAL_OBJECT_END(atanhf_data2) - - -.section .text -GLOBAL_LIBM_ENTRY(atanhf) - -{ .mfi - getf.exp rArgSExpb = f8 - fclass.m p9,p0 = f8, 0x0b // is arg denormal ? - mov rExpbMask = 0x1ffff -} -{ .mfi - addl DataPtr = @ltoff(atanhf_data), gp - fnma.s1 fOneMx = f8, f1, f1 // 1 - x - mov rBias = 0xffff -} -;; - -{ .mfi - nop.m 0 - fclass.m p7,p0 = f8, 0xc7 // is arg NaN or +/-0 ? - mov rNearZeroBound = 0xffeb // 2^(-20) -} -{ .mfi - ld8 DataPtr = [DataPtr] - fma.s1 fOnePx = f8, f1, f1 // 1 + x - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fnorm.s1 fNormX = f8 // Normalize x -(p9) br.cond.spnt ATANH_UNORM // Branch if x=unorm -} -;; - -ATANH_COMMON: -// Return here if x=unorm and not denorm -{ .mfi - ldfpd fP3, fP2 = [DataPtr], 16 - fma.s1 fX2 = f8, f8, f0 // x^2 - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fma.s.s0 f8 = f8,f1,f8 // NaN or +/-0 -(p7) br.ret.spnt b0 -} -;; - -{ .mfi - ldfpd fP1, fHalf = [DataPtr], 16 - frcpa.s1 fRcpM, p9 = f1, fOneMx // rcpm = frcpa(1 - x) - nop.i 0 -} -;; - -{ .mfi - getf.exp rExpbm = fOneMx - frcpa.s1 fRcpP, p0 = f1, fOnePx // rcpp = frcpa(1 + x) - // biased exponent - and rArgExpb = rArgSExpb, rExpbMask -} -;; - -{ .mmi - getf.exp rExpbp = fOnePx - // is |x| < 2^(-20) ? - cmp.gt p8,p0 = rNearZeroBound, rArgExpb - cmp.ge p6,p0 = rArgExpb, rBias // is |x| >= 1 ? -} -;; - -{ .mmb - getf.sig rSigm = fOneMx - nop.m 0 -(p6) br.cond.spnt atanhf_ge_one -} -;; - -{ .mfb - getf.sig rSigp = fOnePx -(p8) fma.s.s0 f8 = fX2, f8, f8 // x + x^3 -(p8) br.ret.spnt b0 // Exit for MAX_DENORM_ABS < |x| < 2^-20 -} -;; - -{ .mfi - ldfd fLog2 = [DataPtr], 16 - fms.s1 fRm = fRcpM, fOneMx, f1 // rm = rcpm * (1 - x) - 1 - nop.i 0 -} -;; - -{ .mmf - // (1 - x) is always positive here and we need not mask sign bit - sub rNm = rExpbm, rBias - // (1 + x) is always positive here and we need not mask sign bit - sub rNp = rExpbp, rBias - fms.s1 fRp = fRcpP, fOnePx, f1 // rp = rcpp * (1 + x) - 1 -} -;; - -{ .mmi - setf.sig fN4CvtM = rNm - setf.sig fN4CvtP = rNp - extr.u rIndm = rSigm,55,8 // Extract 8 bits -} -;; - -{ .mmi - shladd RcpTablePtrM = rIndm, 3, DataPtr - nop.m 0 - extr.u rIndp = rSigp,55,8 // Extract 8 bits -} -;; - -{ .mmi - ldfd fLogTm = [RcpTablePtrM] - shladd RcpTablePtrP = rIndp, 3, DataPtr - nop.i 0 -} -;; - -{ .mfi - ldfd fLogTp = [RcpTablePtrP] - fma.s1 fRm2 = fRm, fRm, f0 // rm^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fP32m = fP3, fRm, fP2 // P3*rm + P2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fRp2 = fRp, fRp, f0 // rp^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fP10m = fP1, fRm, fHalf // P1*rm + 1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP32p = fP3, fRp, fP2 // P3*rp + P2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fP10p = fP1, fRp, fHalf // P1*rp + 1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.xf fNm = fN4CvtM - nop.i 0 -} -{ .mfi - nop.m 0 - fcvt.xf fNp = fN4CvtP - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // (P3*rm + P2)*rm^2 + (P1*rm + 1) - fma.s1 fP32m = fP32m, fRm2, fP10m - nop.i 0 -} -{ .mfi - nop.m 0 - // (P3*rp + P2)*rp^2 + (P1*rp + 1) - fma.s1 fP32p = fP32p, fRp2, fP10p - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // Nm*ln(2)/2 + Tm/2 - fma.s1 fLogTm = fNm, fLog2, fLogTm - nop.i 0 -} -{ .mfi - nop.m 0 - // Np*ln(2)/2 + Tp/2 - fma.s1 fLogTp = fNp, fLog2, fLogTp - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // ((P3*rm + P2)*rm^2 + (P3*rm + 1))*0.5*rm + (Nm*ln(2)/2 + Tm/2) - fma.d.s1 fP32m = fP32m, fRm, fLogTm - nop.i 0 -} -{ .mfi - nop.m 0 - // ((P3*rp + P2)*rp^2 + (P3*rp + 1))*0.5*rp + (Np*ln(2)/2 + Tp/2) - fma.d.s1 fP32p = fP32p, fRp, fLogTp - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - // atanhf(x) = 0.5 * (log(1 + x) - log(1 - x)) - fnma.s.s0 f8 = fP32m, f1, fP32p - br.ret.sptk b0 // Exit for 2^(-20) <= |x| < 1.0 -} -;; - - -ATANH_UNORM: -// Here if x=unorm -{ .mfi - getf.exp rArgSExpb = fNormX // Recompute if x unorm - fclass.m p0,p9 = fNormX, 0x0b // Test x denorm - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fcmp.lt.s0 p10,p11 = f8, f0 // Set denormal flag -(p9) br.cond.sptk ATANH_COMMON // Continue if x unorm and not denorm -} -;; - -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fnma.s.s0 f8 = f8,f8,f8 // Result x-x^2 if x=-denorm - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fma.s.s0 f8 = f8,f8,f8 // Result x+x^2 if x=+denorm - br.ret.spnt b0 // Exit if denorm -} -;; - -// Here if |x| >= 1.0 -atanhf_ge_one: -{ .mfi - alloc r32 = ar.pfs,1,3,4,0 - fmerge.s fArgAbs = f0, f8 // Form |x| - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fmerge.s f10 = f8, f8 // Save input for error call - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.s1 p6,p7 = fArgAbs, f1 // Test for |x| = 1.0 - nop.i 0 -} -;; - -// Set error tag and result, and raise invalid flag if |x| > 1.0 -{ .mfi -(p7) mov atanh_GR_tag = 133 -(p7) frcpa.s0 f8, p0 = f0, f0 // Get QNaN, and raise invalid - nop.i 0 -} -;; - -// Set error tag and result, and raise Z flag if |x| = 1.0 -{ .mfi - nop.m 0 -(p6) frcpa.s0 fRm, p0 = f1, f0 // Get inf, and raise Z flag - nop.i 0 -} -;; - -{ .mfb -(p6) mov atanh_GR_tag = 134 -(p6) fmerge.s f8 = f8, fRm // result is +-inf - br.cond.sptk __libm_error_region // Exit if |x| >= 1.0 -} -;; - -GLOBAL_LIBM_END(atanhf) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfs [GR_Parameter_Y] = f1,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfs [GR_Parameter_X] = f10 // STORE Parameter 1 on stack - // Parameter 3 address - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_atanhl.S b/sysdeps/ia64/fpu/e_atanhl.S deleted file mode 100644 index 5d828d5ffa..0000000000 --- a/sysdeps/ia64/fpu/e_atanhl.S +++ /dev/null @@ -1,1156 +0,0 @@ -.file "atanhl.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,INCLUDING,BUT NOT -// LIMITED TO,THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT,INDIRECT,INCIDENTAL,SPECIAL, -// EXEMPLARY,OR CONSEQUENTIAL DAMAGES (INCLUDING,BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,DATA,OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY,WHETHER IN CONTRACT,STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE,EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code,and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 09/10/01 Initial version -// 12/11/01 Corrected .restore syntax -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align; -// used data8 for long double table values -// -//********************************************************************* -// -//********************************************************************* -// -// Function: atanhl(x) computes the principle value of the inverse -// hyperbolic tangent of x. -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f33-f73 -// -// General Purpose Registers: -// r32-r52 -// r49-r52 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6-p15 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// atanhl(inf) = QNaN -// atanhl(-inf) = QNaN -// atanhl(+/-0) = +/-0 -// atanhl(1) = +inf -// atanhl(-1) = -inf -// atanhl(|x|>1) = QNaN -// atanhl(SNaN) = QNaN -// atanhl(QNaN) = QNaN -// -//********************************************************************* -// -// Overview -// -// The method consists of two cases. -// -// If |x| < 1/32 use case atanhl_near_zero; -// else use case atanhl_regular; -// -// Case atanhl_near_zero: -// -// atanhl(x) can be approximated by the Taylor series expansion -// up to order 17. -// -// Case atanhl_regular: -// -// Here we use formula atanhl(x) = sign(x)*log1pl(2*|x|/(1-|x|))/2 and -// calculation is subdivided into two stages. The first stage is -// calculating of X = 2*|x|/(1-|x|). The second one is calculating of -// sign(x)*log1pl(X)/2. To obtain required accuracy we use precise division -// algorithm output of which is a pair of two extended precision values those -// approximate result of division with accuracy higher than working -// precision. This pair is passed to modified log1pl function. -// -// -// 1. calculating of X = 2*|x|/(1-|x|) -// ( based on Peter Markstein's "IA-64 and Elementary Functions" book ) -// ******************************************************************** -// -// a = 2*|x| -// b = 1 - |x| -// b_lo = |x| - (1 - b) -// -// y = frcpa(b) initial approximation of 1/b -// q = a*y initial approximation of a/b -// -// e = 1 - b*y -// e2 = e + e^2 -// e1 = e^2 -// y1 = y + y*e2 = y + y*(e+e^2) -// -// e3 = e + e1^2 -// y2 = y + y1*e3 = y + y*(e+e^2+..+e^6) -// -// r = a - b*q -// e = 1 - b*y2 -// X = q + r*y2 high part of a/b -// -// y3 = y2 + y2*e4 -// r1 = a - b*X -// r1 = r1 - b_lo*X -// X_lo = r1*y3 low part of a/b -// -// 2. special log1p algorithm overview -// *********************************** -// -// Here we use a table lookup method. The basic idea is that in -// order to compute logl(Arg) = log1pl (Arg-1) for an argument Arg in [1,2), -// we construct a value G such that G*Arg is close to 1 and that -// logl(1/G) is obtainable easily from a table of values calculated -// beforehand. Thus -// -// logl(Arg) = logl(1/G) + logl(G*Arg) -// = logl(1/G) + logl(1 + (G*Arg - 1)) -// -// Because |G*Arg - 1| is small, the second term on the right hand -// side can be approximated by a short polynomial. We elaborate -// this method in several steps. -// -// Step 0: Initialization -// ------ -// We need to calculate logl(X + X_lo + 1). Obtain N, S_hi such that -// -// X + X_lo + 1 = 2^N * ( S_hi + S_lo ) exactly -// -// where S_hi in [1,2) and S_lo is a correction to S_hi in the sense -// that |S_lo| <= ulp(S_hi). -// -// For the special version of log1p we add X_lo to S_lo (S_lo = S_lo + X_lo) -// !-----------------------------------------------------------------------! -// -// Step 1: Argument Reduction -// ------ -// Based on S_hi, obtain G_1, G_2, G_3 from a table and calculate -// -// G := G_1 * G_2 * G_3 -// r := (G * S_hi - 1) + G * S_lo -// -// These G_j's have the property that the product is exactly -// representable and that |r| < 2^(-12) as a result. -// -// Step 2: Approximation -// ------ -// logl(1 + r) is approximated by a short polynomial poly(r). -// -// Step 3: Reconstruction -// ------ -// Finally, log1pl(X + X_lo) = logl(X + X_lo + 1) is given by -// -// logl(X + X_lo + 1) = logl(2^N * (S_hi + S_lo)) -// ~=~ N*logl(2) + logl(1/G) + logl(1 + r) -// ~=~ N*logl(2) + logl(1/G) + poly(r). -// -// For detailed description see log1p1 function, regular path. -// -//********************************************************************* - -RODATA -.align 64 - -// ************* DO NOT CHANGE THE ORDER OF THESE TABLES ************* - -LOCAL_OBJECT_START(Constants_TaylorSeries) -data8 0xF0F0F0F0F0F0F0F1,0x00003FFA // C17 -data8 0x8888888888888889,0x00003FFB // C15 -data8 0x9D89D89D89D89D8A,0x00003FFB // C13 -data8 0xBA2E8BA2E8BA2E8C,0x00003FFB // C11 -data8 0xE38E38E38E38E38E,0x00003FFB // C9 -data8 0x9249249249249249,0x00003FFC // C7 -data8 0xCCCCCCCCCCCCCCCD,0x00003FFC // C5 -data8 0xAAAAAAAAAAAAAAAA,0x00003FFD // C3 -data4 0x3f000000 // 1/2 -data4 0x00000000 // pad -data4 0x00000000 -data4 0x00000000 -LOCAL_OBJECT_END(Constants_TaylorSeries) - -LOCAL_OBJECT_START(Constants_Q) -data4 0x00000000,0xB1721800,0x00003FFE,0x00000000 // log2_hi -data4 0x4361C4C6,0x82E30865,0x0000BFE2,0x00000000 // log2_lo -data4 0x328833CB,0xCCCCCAF2,0x00003FFC,0x00000000 // Q4 -data4 0xA9D4BAFB,0x80000077,0x0000BFFD,0x00000000 // Q3 -data4 0xAAABE3D2,0xAAAAAAAA,0x00003FFD,0x00000000 // Q2 -data4 0xFFFFDAB7,0xFFFFFFFF,0x0000BFFD,0x00000000 // Q1 -LOCAL_OBJECT_END(Constants_Q) - - -// Z1 - 16 bit fixed -LOCAL_OBJECT_START(Constants_Z_1) -data4 0x00008000 -data4 0x00007879 -data4 0x000071C8 -data4 0x00006BCB -data4 0x00006667 -data4 0x00006187 -data4 0x00005D18 -data4 0x0000590C -data4 0x00005556 -data4 0x000051EC -data4 0x00004EC5 -data4 0x00004BDB -data4 0x00004925 -data4 0x0000469F -data4 0x00004445 -data4 0x00004211 -LOCAL_OBJECT_END(Constants_Z_1) - -// G1 and H1 - IEEE single and h1 - IEEE double -LOCAL_OBJECT_START(Constants_G_H_h1) -data4 0x3F800000,0x00000000 -data8 0x0000000000000000 -data4 0x3F70F0F0,0x3D785196 -data8 0x3DA163A6617D741C -data4 0x3F638E38,0x3DF13843 -data8 0x3E2C55E6CBD3D5BB -data4 0x3F579430,0x3E2FF9A0 -data8 0xBE3EB0BFD86EA5E7 -data4 0x3F4CCCC8,0x3E647FD6 -data8 0x3E2E6A8C86B12760 -data4 0x3F430C30,0x3E8B3AE7 -data8 0x3E47574C5C0739BA -data4 0x3F3A2E88,0x3EA30C68 -data8 0x3E20E30F13E8AF2F -data4 0x3F321640,0x3EB9CEC8 -data8 0xBE42885BF2C630BD -data4 0x3F2AAAA8,0x3ECF9927 -data8 0x3E497F3497E577C6 -data4 0x3F23D708,0x3EE47FC5 -data8 0x3E3E6A6EA6B0A5AB -data4 0x3F1D89D8,0x3EF8947D -data8 0xBDF43E3CD328D9BE -data4 0x3F17B420,0x3F05F3A1 -data8 0x3E4094C30ADB090A -data4 0x3F124920,0x3F0F4303 -data8 0xBE28FBB2FC1FE510 -data4 0x3F0D3DC8,0x3F183EBF -data8 0x3E3A789510FDE3FA -data4 0x3F088888,0x3F20EC80 -data8 0x3E508CE57CC8C98F -data4 0x3F042108,0x3F29516A -data8 0xBE534874A223106C -LOCAL_OBJECT_END(Constants_G_H_h1) - -// Z2 - 16 bit fixed -LOCAL_OBJECT_START(Constants_Z_2) -data4 0x00008000 -data4 0x00007F81 -data4 0x00007F02 -data4 0x00007E85 -data4 0x00007E08 -data4 0x00007D8D -data4 0x00007D12 -data4 0x00007C98 -data4 0x00007C20 -data4 0x00007BA8 -data4 0x00007B31 -data4 0x00007ABB -data4 0x00007A45 -data4 0x000079D1 -data4 0x0000795D -data4 0x000078EB -LOCAL_OBJECT_END(Constants_Z_2) - -// G2 and H2 - IEEE single and h2 - IEEE double -LOCAL_OBJECT_START(Constants_G_H_h2) -data4 0x3F800000,0x00000000 -data8 0x0000000000000000 -data4 0x3F7F00F8,0x3B7F875D -data8 0x3DB5A11622C42273 -data4 0x3F7E03F8,0x3BFF015B -data8 0x3DE620CF21F86ED3 -data4 0x3F7D08E0,0x3C3EE393 -data8 0xBDAFA07E484F34ED -data4 0x3F7C0FC0,0x3C7E0586 -data8 0xBDFE07F03860BCF6 -data4 0x3F7B1880,0x3C9E75D2 -data8 0x3DEA370FA78093D6 -data4 0x3F7A2328,0x3CBDC97A -data8 0x3DFF579172A753D0 -data4 0x3F792FB0,0x3CDCFE47 -data8 0x3DFEBE6CA7EF896B -data4 0x3F783E08,0x3CFC15D0 -data8 0x3E0CF156409ECB43 -data4 0x3F774E38,0x3D0D874D -data8 0xBE0B6F97FFEF71DF -data4 0x3F766038,0x3D1CF49B -data8 0xBE0804835D59EEE8 -data4 0x3F757400,0x3D2C531D -data8 0x3E1F91E9A9192A74 -data4 0x3F748988,0x3D3BA322 -data8 0xBE139A06BF72A8CD -data4 0x3F73A0D0,0x3D4AE46F -data8 0x3E1D9202F8FBA6CF -data4 0x3F72B9D0,0x3D5A1756 -data8 0xBE1DCCC4BA796223 -data4 0x3F71D488,0x3D693B9D -data8 0xBE049391B6B7C239 -LOCAL_OBJECT_END(Constants_G_H_h2) - -// G3 and H3 - IEEE single and h3 - IEEE double -LOCAL_OBJECT_START(Constants_G_H_h3) -data4 0x3F7FFC00,0x38800100 -data8 0x3D355595562224CD -data4 0x3F7FF400,0x39400480 -data8 0x3D8200A206136FF6 -data4 0x3F7FEC00,0x39A00640 -data8 0x3DA4D68DE8DE9AF0 -data4 0x3F7FE400,0x39E00C41 -data8 0xBD8B4291B10238DC -data4 0x3F7FDC00,0x3A100A21 -data8 0xBD89CCB83B1952CA -data4 0x3F7FD400,0x3A300F22 -data8 0xBDB107071DC46826 -data4 0x3F7FCC08,0x3A4FF51C -data8 0x3DB6FCB9F43307DB -data4 0x3F7FC408,0x3A6FFC1D -data8 0xBD9B7C4762DC7872 -data4 0x3F7FBC10,0x3A87F20B -data8 0xBDC3725E3F89154A -data4 0x3F7FB410,0x3A97F68B -data8 0xBD93519D62B9D392 -data4 0x3F7FAC18,0x3AA7EB86 -data8 0x3DC184410F21BD9D -data4 0x3F7FA420,0x3AB7E101 -data8 0xBDA64B952245E0A6 -data4 0x3F7F9C20,0x3AC7E701 -data8 0x3DB4B0ECAABB34B8 -data4 0x3F7F9428,0x3AD7DD7B -data8 0x3D9923376DC40A7E -data4 0x3F7F8C30,0x3AE7D474 -data8 0x3DC6E17B4F2083D3 -data4 0x3F7F8438,0x3AF7CBED -data8 0x3DAE314B811D4394 -data4 0x3F7F7C40,0x3B03E1F3 -data8 0xBDD46F21B08F2DB1 -data4 0x3F7F7448,0x3B0BDE2F -data8 0xBDDC30A46D34522B -data4 0x3F7F6C50,0x3B13DAAA -data8 0x3DCB0070B1F473DB -data4 0x3F7F6458,0x3B1BD766 -data8 0xBDD65DDC6AD282FD -data4 0x3F7F5C68,0x3B23CC5C -data8 0xBDCDAB83F153761A -data4 0x3F7F5470,0x3B2BC997 -data8 0xBDDADA40341D0F8F -data4 0x3F7F4C78,0x3B33C711 -data8 0x3DCD1BD7EBC394E8 -data4 0x3F7F4488,0x3B3BBCC6 -data8 0xBDC3532B52E3E695 -data4 0x3F7F3C90,0x3B43BAC0 -data8 0xBDA3961EE846B3DE -data4 0x3F7F34A0,0x3B4BB0F4 -data8 0xBDDADF06785778D4 -data4 0x3F7F2CA8,0x3B53AF6D -data8 0x3DCC3ED1E55CE212 -data4 0x3F7F24B8,0x3B5BA620 -data8 0xBDBA31039E382C15 -data4 0x3F7F1CC8,0x3B639D12 -data8 0x3D635A0B5C5AF197 -data4 0x3F7F14D8,0x3B6B9444 -data8 0xBDDCCB1971D34EFC -data4 0x3F7F0CE0,0x3B7393BC -data8 0x3DC7450252CD7ADA -data4 0x3F7F04F0,0x3B7B8B6D -data8 0xBDB68F177D7F2A42 -LOCAL_OBJECT_END(Constants_G_H_h3) - - - -// Floating Point Registers - -FR_C17 = f50 -FR_C15 = f51 -FR_C13 = f52 -FR_C11 = f53 -FR_C9 = f54 -FR_C7 = f55 -FR_C5 = f56 -FR_C3 = f57 -FR_x2 = f58 -FR_x3 = f59 -FR_x4 = f60 -FR_x8 = f61 - -FR_Rcp = f61 - -FR_A = f33 -FR_R1 = f33 - -FR_E1 = f34 -FR_E3 = f34 -FR_Y2 = f34 -FR_Y3 = f34 - -FR_E2 = f35 -FR_Y1 = f35 - -FR_B = f36 -FR_Y0 = f37 -FR_E0 = f38 -FR_E4 = f39 -FR_Q0 = f40 -FR_R0 = f41 -FR_B_lo = f42 - -FR_abs_x = f43 -FR_Bp = f44 -FR_Bn = f45 -FR_Yp = f46 -FR_Yn = f47 - -FR_X = f48 -FR_BB = f48 -FR_X_lo = f49 - -FR_G = f50 -FR_Y_hi = f51 -FR_H = f51 -FR_h = f52 -FR_G2 = f53 -FR_H2 = f54 -FR_h2 = f55 -FR_G3 = f56 -FR_H3 = f57 -FR_h3 = f58 - -FR_Q4 = f59 -FR_poly_lo = f59 -FR_Y_lo = f59 - -FR_Q3 = f60 -FR_Q2 = f61 - -FR_Q1 = f62 -FR_poly_hi = f62 - -FR_float_N = f63 - -FR_AA = f64 -FR_S_lo = f64 - -FR_S_hi = f65 -FR_r = f65 - -FR_log2_hi = f66 -FR_log2_lo = f67 -FR_Z = f68 -FR_2_to_minus_N = f69 -FR_rcub = f70 -FR_rsq = f71 -FR_05r = f72 -FR_Half = f73 - -FR_Arg_X = f50 -FR_Arg_Y = f0 -FR_RESULT = f8 - - - -// General Purpose Registers - -GR_ad_05 = r33 -GR_Index1 = r34 -GR_ArgExp = r34 -GR_Index2 = r35 -GR_ExpMask = r35 -GR_NearZeroBound = r36 -GR_signif = r36 -GR_X_0 = r37 -GR_X_1 = r37 -GR_X_2 = r38 -GR_Index3 = r38 -GR_minus_N = r39 -GR_Z_1 = r40 -GR_Z_2 = r40 -GR_N = r41 -GR_Bias = r42 -GR_M = r43 -GR_ad_taylor = r44 -GR_ad_taylor_2 = r45 -GR_ad2_tbl_3 = r45 -GR_ad_tbl_1 = r46 -GR_ad_tbl_2 = r47 -GR_ad_tbl_3 = r48 -GR_ad_q = r49 -GR_ad_z_1 = r50 -GR_ad_z_2 = r51 -GR_ad_z_3 = r52 - -// -// Added for unwind support -// -GR_SAVE_PFS = r46 -GR_SAVE_B0 = r47 -GR_SAVE_GP = r48 -GR_Parameter_X = r49 -GR_Parameter_Y = r50 -GR_Parameter_RESULT = r51 -GR_Parameter_TAG = r52 - - - -.section .text -GLOBAL_LIBM_ENTRY(atanhl) - -{ .mfi - alloc r32 = ar.pfs,0,17,4,0 - fnma.s1 FR_Bp = f8,f1,f1 // b = 1 - |arg| (for x>0) - mov GR_ExpMask = 0x1ffff -} -{ .mfi - addl GR_ad_taylor = @ltoff(Constants_TaylorSeries),gp - fma.s1 FR_Bn = f8,f1,f1 // b = 1 - |arg| (for x<0) - mov GR_NearZeroBound = 0xfffa // biased exp of 1/32 -};; -{ .mfi - getf.exp GR_ArgExp = f8 - fcmp.lt.s1 p6,p7 = f8,f0 // is negative? - nop.i 0 -} -{ .mfi - ld8 GR_ad_taylor = [GR_ad_taylor] - fmerge.s FR_abs_x = f1,f8 - nop.i 0 -};; -{ .mfi - nop.m 0 - fclass.m p8,p0 = f8,0x1C7 // is arg NaT,Q/SNaN or +/-0 ? - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_x2 = f8,f8,f0 - nop.i 0 -};; -{ .mfi - add GR_ad_z_1 = 0x0F0,GR_ad_taylor - fclass.m p9,p0 = f8,0x0a // is arg -denormal ? - add GR_ad_taylor_2 = 0x010,GR_ad_taylor -} -{ .mfi - add GR_ad_05 = 0x080,GR_ad_taylor - nop.f 0 - nop.i 0 -};; -{ .mfi - ldfe FR_C17 = [GR_ad_taylor],32 - fclass.m p10,p0 = f8,0x09 // is arg +denormal ? - add GR_ad_tbl_1 = 0x040,GR_ad_z_1 // point to Constants_G_H_h1 -} -{ .mfb - add GR_ad_z_2 = 0x140,GR_ad_z_1 // point to Constants_Z_2 - (p8) fma.s0 f8 = f8,f1,f0 // NaN or +/-0 - (p8) br.ret.spnt b0 // exit for Nan or +/-0 -};; -{ .mfi - ldfe FR_C15 = [GR_ad_taylor_2],32 - fclass.m p15,p0 = f8,0x23 // is +/-INF ? - add GR_ad_tbl_2 = 0x180,GR_ad_z_1 // point to Constants_G_H_h2 -} -{ .mfb - ldfe FR_C13 = [GR_ad_taylor],32 - (p9) fnma.s0 f8 = f8,f8,f8 // -denormal - (p9) br.ret.spnt b0 // exit for -denormal -};; -{ .mfi - ldfe FR_C11 = [GR_ad_taylor_2],32 - fcmp.eq.s0 p13,p0 = FR_abs_x,f1 // is |arg| = 1? - nop.i 0 -} -{ .mfb - ldfe FR_C9 = [GR_ad_taylor],32 -(p10) fma.s0 f8 = f8,f8,f8 // +denormal -(p10) br.ret.spnt b0 // exit for +denormal -};; -{ .mfi - ldfe FR_C7 = [GR_ad_taylor_2],32 - (p6) frcpa.s1 FR_Yn,p11 = f1,FR_Bn // y = frcpa(b) - and GR_ArgExp = GR_ArgExp,GR_ExpMask // biased exponent -} -{ .mfb - ldfe FR_C5 = [GR_ad_taylor],32 - fnma.s1 FR_B = FR_abs_x,f1,f1 // b = 1 - |arg| -(p15) br.cond.spnt atanhl_gt_one // |arg| > 1 -};; -{ .mfb - cmp.gt p14,p0 = GR_NearZeroBound,GR_ArgExp - (p7) frcpa.s1 FR_Yp,p12 = f1,FR_Bp // y = frcpa(b) -(p13) br.cond.spnt atanhl_eq_one // |arg| = 1/32 -} -{ .mfb - ldfe FR_C3 = [GR_ad_taylor_2],32 - fma.s1 FR_A = FR_abs_x,f1,FR_abs_x // a = 2 * |arg| -(p14) br.cond.spnt atanhl_near_zero // |arg| < 1/32 -};; -{ .mfi - nop.m 0 - fcmp.gt.s0 p8,p0 = FR_abs_x,f1 // is |arg| > 1 ? - nop.i 0 -};; -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 - (p6) fnma.s1 FR_B_lo = FR_Bn,f1,f1 // argt = 1 - (1 - |arg|) - nop.i 0 -} -{ .mfi - ldfs FR_Half = [GR_ad_05] - (p7) fnma.s1 FR_B_lo = FR_Bp,f1,f1 - nop.i 0 -};; -{ .mfi - nop.m 0 - (p6) fnma.s1 FR_E0 = FR_Yn,FR_Bn,f1 // e = 1-b*y - nop.i 0 -} -{ .mfb - nop.m 0 - (p6) fma.s1 FR_Y0 = FR_Yn,f1,f0 - (p8) br.cond.spnt atanhl_gt_one // |arg| > 1 -};; -{ .mfi - nop.m 0 - (p7) fnma.s1 FR_E0 = FR_Yp,FR_Bp,f1 - nop.i 0 -} -{ .mfi - nop.m 0 - (p6) fma.s1 FR_Q0 = FR_A,FR_Yn,f0 // q = a*y - nop.i 0 -};; -{ .mfi - nop.m 0 - (p7) fma.s1 FR_Q0 = FR_A,FR_Yp,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - (p7) fma.s1 FR_Y0 = FR_Yp,f1,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fclass.nm p10,p0 = f8,0x1FF // test for unsupported - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_E2 = FR_E0,FR_E0,FR_E0 // e2 = e+e^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_E1 = FR_E0,FR_E0,f0 // e1 = e^2 - nop.i 0 -};; -{ .mfb - nop.m 0 -// Return generated NaN or other value for unsupported values. -(p10) fma.s0 f8 = f8, f0, f0 -(p10) br.ret.spnt b0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_Y1 = FR_Y0,FR_E2,FR_Y0 // y1 = y+y*e2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_E3 = FR_E1,FR_E1,FR_E0 // e3 = e+e1^2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fnma.s1 FR_B_lo = FR_abs_x,f1,FR_B_lo // b_lo = argt-|arg| - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_Y2 = FR_Y1,FR_E3,FR_Y0 // y2 = y+y1*e3 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_R0 = FR_B,FR_Q0,FR_A // r = a-b*q - nop.i 0 -};; -{ .mfi - nop.m 0 - fnma.s1 FR_E4 = FR_B,FR_Y2,f1 // e4 = 1-b*y2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_X = FR_R0,FR_Y2,FR_Q0 // x = q+r*y2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_Z = FR_X,f1,f1 // x+1 - nop.i 0 -};; -{ .mfi - nop.m 0 - (p6) fnma.s1 FR_Half = FR_Half,f1,f0 // sign(arg)/2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_Y3 = FR_Y2,FR_E4,FR_Y2 // y3 = y2+y2*e4 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_R1 = FR_B,FR_X,FR_A // r1 = a-b*x - nop.i 0 -};; -{ .mfi - getf.sig GR_signif = FR_Z // get significand of x+1 - nop.f 0 - nop.i 0 -};; - - -{ .mfi - add GR_ad_q = -0x060,GR_ad_z_1 - nop.f 0 - extr.u GR_Index1 = GR_signif,59,4 // get high 4 bits of signif -} -{ .mfi - add GR_ad_tbl_3 = 0x280,GR_ad_z_1 // point to Constants_G_H_h3 - nop.f 0 - nop.i 0 -};; -{ .mfi - shladd GR_ad_z_1 = GR_Index1,2,GR_ad_z_1 // point to Z_1 - nop.f 0 - extr.u GR_X_0 = GR_signif,49,15 // get high 15 bits of significand -};; -{ .mfi - ld4 GR_Z_1 = [GR_ad_z_1] // load Z_1 - fmax.s1 FR_AA = FR_X,f1 // for S_lo,form AA = max(X,1.0) - nop.i 0 -} -{ .mfi - shladd GR_ad_tbl_1 = GR_Index1,4,GR_ad_tbl_1 // point to G_1 - nop.f 0 - mov GR_Bias = 0x0FFFF // exponent bias -};; -{ .mfi - ldfps FR_G,FR_H = [GR_ad_tbl_1],8 // load G_1,H_1 - fmerge.se FR_S_hi = f1,FR_Z // form |x+1| - nop.i 0 -};; -{ .mfi - getf.exp GR_N = FR_Z // get N = exponent of x+1 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfd FR_h = [GR_ad_tbl_1] // load h_1 - fnma.s1 FR_R1 = FR_B_lo,FR_X,FR_R1 // r1 = r1-b_lo*x - nop.i 0 -};; -{ .mfi - ldfe FR_log2_hi = [GR_ad_q],16 // load log2_hi - nop.f 0 - pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 // get bits 30-15 of X_0 * Z_1 -};; -// -// For performance,don't use result of pmpyshr2.u for 4 cycles. -// -{ .mfi - ldfe FR_log2_lo = [GR_ad_q],16 // load log2_lo - nop.f 0 - sub GR_N = GR_N,GR_Bias -};; -{ .mfi - ldfe FR_Q4 = [GR_ad_q],16 // load Q4 - fms.s1 FR_S_lo = FR_AA,f1,FR_Z // form S_lo = AA - Z - sub GR_minus_N = GR_Bias,GR_N // form exponent of 2^(-N) -};; -{ .mmf - ldfe FR_Q3 = [GR_ad_q],16 // load Q3 - // put integer N into rightmost significand - setf.sig FR_float_N = GR_N - fmin.s1 FR_BB = FR_X,f1 // for S_lo,form BB = min(X,1.0) -};; -{ .mfi - ldfe FR_Q2 = [GR_ad_q],16 // load Q2 - nop.f 0 - extr.u GR_Index2 = GR_X_1,6,4 // extract bits 6-9 of X_1 -};; -{ .mmi - ldfe FR_Q1 = [GR_ad_q] // load Q1 - shladd GR_ad_z_2 = GR_Index2,2,GR_ad_z_2 // point to Z_2 - nop.i 0 -};; -{ .mmi - ld4 GR_Z_2 = [GR_ad_z_2] // load Z_2 - shladd GR_ad_tbl_2 = GR_Index2,4,GR_ad_tbl_2 // point to G_2 - nop.i 0 -};; -{ .mfi - ldfps FR_G2,FR_H2 = [GR_ad_tbl_2],8 // load G_2,H_2 - nop.f 0 - nop.i 0 -};; -{ .mfi - ldfd FR_h2 = [GR_ad_tbl_2] // load h_2 - fma.s1 FR_S_lo = FR_S_lo,f1,FR_BB // S_lo = S_lo + BB - nop.i 0 -} -{ .mfi - setf.exp FR_2_to_minus_N = GR_minus_N // form 2^(-N) - fma.s1 FR_X_lo = FR_R1,FR_Y3,f0 // x_lo = r1*y3 - nop.i 0 -};; -{ .mfi - nop.m 0 - nop.f 0 - pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 // get bits 30-15 of X_1 * Z_2 -};; -// -// For performance,don't use result of pmpyshr2.u for 4 cycles -// -{ .mfi - add GR_ad2_tbl_3 = 8,GR_ad_tbl_3 - nop.f 0 - nop.i 0 -} -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; - -// -// Now GR_X_2 can be used -// -{ .mfi - nop.m 0 - nop.f 0 - extr.u GR_Index3 = GR_X_2,1,5 // extract bits 1-5 of X_2 -} -{ .mfi - nop.m 0 - fma.s1 FR_S_lo = FR_S_lo,f1,FR_X_lo // S_lo = S_lo + Arg_lo - nop.i 0 -};; - -{ .mfi - shladd GR_ad_tbl_3 = GR_Index3,4,GR_ad_tbl_3 // point to G_3 - fcvt.xf FR_float_N = FR_float_N - nop.i 0 -} -{ .mfi - shladd GR_ad2_tbl_3 = GR_Index3,4,GR_ad2_tbl_3 // point to h_3 - fma.s1 FR_Q1 = FR_Q1,FR_Half,f0 // sign(arg)*Q1/2 - nop.i 0 -};; -{ .mmi - ldfps FR_G3,FR_H3 = [GR_ad_tbl_3],8 // load G_3,H_3 - ldfd FR_h3 = [GR_ad2_tbl_3] // load h_3 - nop.i 0 -};; -{ .mfi - nop.m 0 - fmpy.s1 FR_G = FR_G,FR_G2 // G = G_1 * G_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H,FR_H2 // H = H_1 + H_2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fadd.s1 FR_h = FR_h,FR_h2 // h = h_1 + h_2 - nop.i 0 -};; -{ .mfi - nop.m 0 - // S_lo = S_lo * 2^(-N) - fma.s1 FR_S_lo = FR_S_lo,FR_2_to_minus_N,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fmpy.s1 FR_G = FR_G,FR_G3 // G = (G_1 * G_2) * G_3 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H,FR_H3 // H = (H_1 + H_2) + H_3 - nop.i 0 -};; -{ .mfi - nop.m 0 - fadd.s1 FR_h = FR_h,FR_h3 // h = (h_1 + h_2) + h_3 - nop.i 0 -};; -{ .mfi - nop.m 0 - fms.s1 FR_r = FR_G,FR_S_hi,f1 // r = G * S_hi - 1 - nop.i 0 -} -{ .mfi - nop.m 0 - // Y_hi = N * log2_hi + H - fma.s1 FR_Y_hi = FR_float_N,FR_log2_hi,FR_H - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_h = FR_float_N,FR_log2_lo,FR_h // h = N * log2_lo + h - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_r = FR_G,FR_S_lo,FR_r // r = G * S_lo + (G * S_hi - 1) - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_poly_lo = FR_r,FR_Q4,FR_Q3 // poly_lo = r * Q4 + Q3 - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 FR_rsq = FR_r,FR_r // rsq = r * r - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_05r = FR_r,FR_Half,f0 // sign(arg)*r/2 - nop.i 0 -};; -{ .mfi - nop.m 0 - // poly_lo = poly_lo * r + Q2 - fma.s1 FR_poly_lo = FR_poly_lo,FR_r,FR_Q2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_rcub = FR_rsq,FR_r,f0 // rcub = r^3 - nop.i 0 -};; -{ .mfi - nop.m 0 - // poly_hi = sing(arg)*(Q1*r^2 + r)/2 - fma.s1 FR_poly_hi = FR_Q1,FR_rsq,FR_05r - nop.i 0 -};; -{ .mfi - nop.m 0 - // poly_lo = poly_lo*r^3 + h - fma.s1 FR_poly_lo = FR_poly_lo,FR_rcub,FR_h - nop.i 0 -};; -{ .mfi - nop.m 0 - // Y_lo = poly_hi + poly_lo/2 - fma.s0 FR_Y_lo = FR_poly_lo,FR_Half,FR_poly_hi - nop.i 0 -};; -{ .mfb - nop.m 0 - // Result = arctanh(x) = Y_hi/2 + Y_lo - fma.s0 f8 = FR_Y_hi,FR_Half,FR_Y_lo - br.ret.sptk b0 -};; - -// Taylor's series -atanhl_near_zero: -{ .mfi - nop.m 0 - fma.s1 FR_x3 = FR_x2,f8,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_x4 = FR_x2,FR_x2,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C17 = FR_C17,FR_x2,FR_C15 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_C13 = FR_C13,FR_x2,FR_C11 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C9 = FR_C9,FR_x2,FR_C7 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_C5 = FR_C5,FR_x2,FR_C3 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_x8 = FR_x4,FR_x4,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C17 = FR_C17,FR_x4,FR_C13 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C9 = FR_C9,FR_x4,FR_C5 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C17 = FR_C17,FR_x8,FR_C9 - nop.i 0 -};; -{ .mfb - nop.m 0 - fma.s0 f8 = FR_C17,FR_x3,f8 - br.ret.sptk b0 -};; - -atanhl_eq_one: -{ .mfi - nop.m 0 - frcpa.s0 FR_Rcp,p0 = f1,f0 // get inf,and raise Z flag - nop.i 0 -} -{ .mfi - nop.m 0 - fmerge.s FR_Arg_X = f8, f8 - nop.i 0 -};; -{ .mfb - mov GR_Parameter_TAG = 130 - fmerge.s FR_RESULT = f8,FR_Rcp // result is +-inf - br.cond.sptk __libm_error_region // exit if |x| = 1.0 -};; - -atanhl_gt_one: -{ .mfi - nop.m 0 - fmerge.s FR_Arg_X = f8, f8 - nop.i 0 -};; -{ .mfb - mov GR_Parameter_TAG = 129 - frcpa.s0 FR_RESULT,p0 = f0,f0 // get QNaN,and raise invalid - br.cond.sptk __libm_error_region // exit if |x| > 1.0 -};; - -GLOBAL_LIBM_END(atanhl) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfe [GR_Parameter_Y] = FR_Arg_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0,GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfe [GR_Parameter_X] = FR_Arg_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region#) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_cosh.S b/sysdeps/ia64/fpu/e_cosh.S deleted file mode 100644 index 885456b389..0000000000 --- a/sysdeps/ia64/fpu/e_cosh.S +++ /dev/null @@ -1,866 +0,0 @@ -.file "cosh.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 05/07/01 Reworked to improve speed of all paths -// 05/20/02 Cleaned up namespace and sf0 syntax -// 11/15/02 Improved speed with new algorithm -// 03/31/05 Reformatted delimiters between data tables - -// API -//============================================================== -// double cosh(double) - -// Overview of operation -//============================================================== -// Case 1: 0 < |x| < 0.25 -// Evaluate cosh(x) by a 12th order polynomial -// Care is take for the order of multiplication; and A2 is not exactly 1/4!, -// A3 is not exactly 1/6!, etc. -// cosh(x) = 1 + (A1*x^2 + A2*x^4 + A3*x^6 + A4*x^8 + A5*x^10 + A6*x^12) -// -// Case 2: 0.25 < |x| < 710.47586 -// Algorithm is based on the identity cosh(x) = ( exp(x) + exp(-x) ) / 2. -// The algorithm for exp is described as below. There are a number of -// economies from evaluating both exp(x) and exp(-x). Although we -// are evaluating both quantities, only where the quantities diverge do we -// duplicate the computations. The basic algorithm for exp(x) is described -// below. -// -// Take the input x. w is "how many log2/128 in x?" -// w = x * 128/log2 -// n = int(w) -// x = n log2/128 + r + delta - -// n = 128M + index_1 + 2^4 index_2 -// x = M log2 + (log2/128) index_1 + (log2/8) index_2 + r + delta - -// exp(x) = 2^M 2^(index_1/128) 2^(index_2/8) exp(r) exp(delta) -// Construct 2^M -// Get 2^(index_1/128) from table_1; -// Get 2^(index_2/8) from table_2; -// Calculate exp(r) by 5th order polynomial -// r = x - n (log2/128)_high -// delta = - n (log2/128)_low -// Calculate exp(delta) as 1 + delta - - -// Special values -//============================================================== -// cosh(+0) = 1.0 -// cosh(-0) = 1.0 - -// cosh(+qnan) = +qnan -// cosh(-qnan) = -qnan -// cosh(+snan) = +qnan -// cosh(-snan) = -qnan - -// cosh(-inf) = +inf -// cosh(+inf) = +inf - -// Overflow and Underflow -//======================= -// cosh(x) = largest double normal when -// x = 710.47586 = 0x408633ce8fb9f87d -// -// There is no underflow. - -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input, output -// f6 -> f15, f32 -> f61 - -// General registers used: -// r14 -> r40 - -// Predicate registers used: -// p6 -> p15 - -// Assembly macros -//============================================================== - -rRshf = r14 -rN_neg = r14 -rAD_TB1 = r15 -rAD_TB2 = r16 -rAD_P = r17 -rN = r18 -rIndex_1 = r19 -rIndex_2_16 = r20 -rM = r21 -rBiased_M = r21 -rSig_inv_ln2 = r22 -rIndex_1_neg = r22 -rExp_bias = r23 -rExp_bias_minus_1 = r23 -rExp_mask = r24 -rTmp = r24 -rGt_ln = r24 -rIndex_2_16_neg = r24 -rM_neg = r25 -rBiased_M_neg = r25 -rRshf_2to56 = r26 -rAD_T1_neg = r26 -rExp_2tom56 = r28 -rAD_T2_neg = r28 -rAD_T1 = r29 -rAD_T2 = r30 -rSignexp_x = r31 -rExp_x = r31 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - -fRSHF_2TO56 = f6 -fINV_LN2_2TO63 = f7 -fW_2TO56_RSH = f9 -f2TOM56 = f11 -fP5 = f12 -fP4 = f13 -fP3 = f14 -fP2 = f15 - -fLn2_by_128_hi = f33 -fLn2_by_128_lo = f34 - -fRSHF = f35 -fNfloat = f36 -fNormX = f37 -fR = f38 -fF = f39 - -fRsq = f40 -f2M = f41 -fS1 = f42 -fT1 = f42 -fS2 = f43 -fT2 = f43 -fS = f43 -fWre_urm_f8 = f44 -fAbsX = f44 - -fMIN_DBL_OFLOW_ARG = f45 -fMAX_DBL_NORM_ARG = f46 -fXsq = f47 -fX4 = f48 -fGt_pln = f49 -fTmp = f49 - -fP54 = f50 -fP5432 = f50 -fP32 = f51 -fP = f52 -fP54_neg = f53 -fP5432_neg = f53 -fP32_neg = f54 -fP_neg = f55 -fF_neg = f56 - -f2M_neg = f57 -fS1_neg = f58 -fT1_neg = f58 -fS2_neg = f59 -fT2_neg = f59 -fS_neg = f59 -fExp = f60 -fExp_neg = f61 - -fA6 = f50 -fA65 = f50 -fA6543 = f50 -fA654321 = f50 -fA5 = f51 -fA4 = f52 -fA43 = f52 -fA3 = f53 -fA2 = f54 -fA21 = f54 -fA1 = f55 - -// Data tables -//============================================================== - -RODATA -.align 16 - -// ************* DO NOT CHANGE ORDER OF THESE TABLES ******************** - -// double-extended 1/ln(2) -// 3fff b8aa 3b29 5c17 f0bb be87fed0691d3e88 -// 3fff b8aa 3b29 5c17 f0bc -// For speed the significand will be loaded directly with a movl and setf.sig -// and the exponent will be bias+63 instead of bias+0. Thus subsequent -// computations need to scale appropriately. -// The constant 128/ln(2) is needed for the computation of w. This is also -// obtained by scaling the computations. -// -// Two shifting constants are loaded directly with movl and setf.d. -// 1. fRSHF_2TO56 = 1.1000..00 * 2^(63-7) -// This constant is added to x*1/ln2 to shift the integer part of -// x*128/ln2 into the rightmost bits of the significand. -// The result of this fma is fW_2TO56_RSH. -// 2. fRSHF = 1.1000..00 * 2^(63) -// This constant is subtracted from fW_2TO56_RSH * 2^(-56) to give -// the integer part of w, n, as a floating-point number. -// The result of this fms is fNfloat. - - -LOCAL_OBJECT_START(exp_table_1) -data8 0x408633ce8fb9f87e // smallest dbl overflow arg -data8 0x408633ce8fb9f87d // largest dbl arg to give normal dbl result -data8 0xb17217f7d1cf79ab , 0x00003ff7 // ln2/128 hi -data8 0xc9e3b39803f2f6af , 0x00003fb7 // ln2/128 lo -// -// Table 1 is 2^(index_1/128) where -// index_1 goes from 0 to 15 -// -data8 0x8000000000000000 , 0x00003FFF -data8 0x80B1ED4FD999AB6C , 0x00003FFF -data8 0x8164D1F3BC030773 , 0x00003FFF -data8 0x8218AF4373FC25EC , 0x00003FFF -data8 0x82CD8698AC2BA1D7 , 0x00003FFF -data8 0x8383594EEFB6EE37 , 0x00003FFF -data8 0x843A28C3ACDE4046 , 0x00003FFF -data8 0x84F1F656379C1A29 , 0x00003FFF -data8 0x85AAC367CC487B15 , 0x00003FFF -data8 0x8664915B923FBA04 , 0x00003FFF -data8 0x871F61969E8D1010 , 0x00003FFF -data8 0x87DB357FF698D792 , 0x00003FFF -data8 0x88980E8092DA8527 , 0x00003FFF -data8 0x8955EE03618E5FDD , 0x00003FFF -data8 0x8A14D575496EFD9A , 0x00003FFF -data8 0x8AD4C6452C728924 , 0x00003FFF -LOCAL_OBJECT_END(exp_table_1) - -// Table 2 is 2^(index_1/8) where -// index_2 goes from 0 to 7 -LOCAL_OBJECT_START(exp_table_2) -data8 0x8000000000000000 , 0x00003FFF -data8 0x8B95C1E3EA8BD6E7 , 0x00003FFF -data8 0x9837F0518DB8A96F , 0x00003FFF -data8 0xA5FED6A9B15138EA , 0x00003FFF -data8 0xB504F333F9DE6484 , 0x00003FFF -data8 0xC5672A115506DADD , 0x00003FFF -data8 0xD744FCCAD69D6AF4 , 0x00003FFF -data8 0xEAC0C6E7DD24392F , 0x00003FFF -LOCAL_OBJECT_END(exp_table_2) - -LOCAL_OBJECT_START(exp_p_table) -data8 0x3f8111116da21757 //P5 -data8 0x3fa55555d787761c //P4 -data8 0x3fc5555555555414 //P3 -data8 0x3fdffffffffffd6a //P2 -LOCAL_OBJECT_END(exp_p_table) - -LOCAL_OBJECT_START(cosh_p_table) -data8 0x8FA02AC65BCBD5BC, 0x00003FE2 // A6 -data8 0xD00D00D1021D7370, 0x00003FEF // A4 -data8 0xAAAAAAAAAAAAAB80, 0x00003FFA // A2 -data8 0x93F27740C0C2F1CC, 0x00003FE9 // A5 -data8 0xB60B60B60B4FE884, 0x00003FF5 // A3 -data8 0x8000000000000000, 0x00003FFE // A1 -LOCAL_OBJECT_END(cosh_p_table) - - -.section .text -GLOBAL_IEEE754_ENTRY(cosh) - -{ .mlx - getf.exp rSignexp_x = f8 // Must recompute if x unorm - movl rSig_inv_ln2 = 0xb8aa3b295c17f0bc // significand of 1/ln2 -} -{ .mlx - addl rAD_TB1 = @ltoff(exp_table_1), gp - movl rRshf_2to56 = 0x4768000000000000 // 1.10000 2^(63+56) -} -;; - -{ .mfi - ld8 rAD_TB1 = [rAD_TB1] - fclass.m p6,p0 = f8,0x0b // Test for x=unorm - mov rExp_mask = 0x1ffff -} -{ .mfi - mov rExp_bias = 0xffff - fnorm.s1 fNormX = f8 - mov rExp_2tom56 = 0xffff-56 -} -;; - -// Form two constants we need -// 1/ln2 * 2^63 to compute w = x * 1/ln2 * 128 -// 1.1000..000 * 2^(63+63-7) to right shift int(w) into the significand - -{ .mfi - setf.sig fINV_LN2_2TO63 = rSig_inv_ln2 // form 1/ln2 * 2^63 - fclass.m p8,p0 = f8,0x07 // Test for x=0 - nop.i 999 -} -{ .mlx - setf.d fRSHF_2TO56 = rRshf_2to56 // Form const 1.100 * 2^(63+56) - movl rRshf = 0x43e8000000000000 // 1.10000 2^63 for right shift -} -;; - -{ .mfi - ldfpd fMIN_DBL_OFLOW_ARG, fMAX_DBL_NORM_ARG = [rAD_TB1],16 - fclass.m p10,p0 = f8,0x1e3 // Test for x=inf, nan, NaT - nop.i 0 -} -{ .mfb - setf.exp f2TOM56 = rExp_2tom56 // form 2^-56 for scaling Nfloat - nop.f 0 -(p6) br.cond.spnt COSH_UNORM // Branch if x=unorm -} -;; - -COSH_COMMON: -{ .mfi - ldfe fLn2_by_128_hi = [rAD_TB1],16 - nop.f 0 - nop.i 0 -} -{ .mfb - setf.d fRSHF = rRshf // Form right shift const 1.100 * 2^63 -(p8) fma.d.s0 f8 = f1,f1,f0 // quick exit for x=0 -(p8) br.ret.spnt b0 -} -;; - -{ .mfi - ldfe fLn2_by_128_lo = [rAD_TB1],16 - nop.f 0 - nop.i 0 -} -{ .mfb - and rExp_x = rExp_mask, rSignexp_x // Biased exponent of x -(p10) fma.d.s0 f8 = f8,f8,f0 // Result if x=inf, nan, NaT -(p10) br.ret.spnt b0 // quick exit for x=inf, nan, NaT -} -;; - -// After that last load rAD_TB1 points to the beginning of table 1 -{ .mfi - nop.m 0 - fcmp.eq.s0 p6,p0 = f8, f0 // Dummy to set D - sub rExp_x = rExp_x, rExp_bias // True exponent of x -} -;; - -{ .mfi - nop.m 0 - fmerge.s fAbsX = f0, fNormX // Form |x| - nop.i 0 -} -{ .mfb - cmp.gt p7, p0 = -2, rExp_x // Test |x| < 2^(-2) - fma.s1 fXsq = fNormX, fNormX, f0 // x*x for small path -(p7) br.cond.spnt COSH_SMALL // Branch if 0 < |x| < 2^-2 -} -;; - -// W = X * Inv_log2_by_128 -// By adding 1.10...0*2^63 we shift and get round_int(W) in significand. -// We actually add 1.10...0*2^56 to X * Inv_log2 to do the same thing. - -{ .mfi - add rAD_P = 0x180, rAD_TB1 - fma.s1 fW_2TO56_RSH = fNormX, fINV_LN2_2TO63, fRSHF_2TO56 - add rAD_TB2 = 0x100, rAD_TB1 -} -;; - -// Divide arguments into the following categories: -// Certain Safe - 0.25 <= |x| <= MAX_DBL_NORM_ARG -// Possible Overflow p14 - MAX_DBL_NORM_ARG < |x| < MIN_DBL_OFLOW_ARG -// Certain Overflow p15 - MIN_DBL_OFLOW_ARG <= |x| < +inf -// -// If the input is really a double arg, then there will never be -// "Possible Overflow" arguments. -// - -{ .mfi - ldfpd fP5, fP4 = [rAD_P] ,16 - fcmp.ge.s1 p15,p14 = fAbsX,fMIN_DBL_OFLOW_ARG - nop.i 0 -} -;; - -// Nfloat = round_int(W) -// The signficand of fW_2TO56_RSH contains the rounded integer part of W, -// as a twos complement number in the lower bits (that is, it may be negative). -// That twos complement number (called N) is put into rN. - -// Since fW_2TO56_RSH is scaled by 2^56, it must be multiplied by 2^-56 -// before the shift constant 1.10000 * 2^63 is subtracted to yield fNfloat. -// Thus, fNfloat contains the floating point version of N - -{ .mfi - ldfpd fP3, fP2 = [rAD_P] -(p14) fcmp.gt.unc.s1 p14,p0 = fAbsX,fMAX_DBL_NORM_ARG - nop.i 0 -} -{ .mfb - nop.m 0 - fms.s1 fNfloat = fW_2TO56_RSH, f2TOM56, fRSHF -(p15) br.cond.spnt COSH_CERTAIN_OVERFLOW -} -;; - -{ .mfi - getf.sig rN = fW_2TO56_RSH - nop.f 0 - mov rExp_bias_minus_1 = 0xfffe -} -;; - -// rIndex_1 has index_1 -// rIndex_2_16 has index_2 * 16 -// rBiased_M has M - -// rM has true M -// r = x - Nfloat * ln2_by_128_hi -// f = 1 - Nfloat * ln2_by_128_lo -{ .mfi - and rIndex_1 = 0x0f, rN - fnma.s1 fR = fNfloat, fLn2_by_128_hi, fNormX - shr rM = rN, 0x7 -} -{ .mfi - and rIndex_2_16 = 0x70, rN - fnma.s1 fF = fNfloat, fLn2_by_128_lo, f1 - sub rN_neg = r0, rN -} -;; - -{ .mmi - and rIndex_1_neg = 0x0f, rN_neg - add rBiased_M = rExp_bias_minus_1, rM - shr rM_neg = rN_neg, 0x7 -} -{ .mmi - and rIndex_2_16_neg = 0x70, rN_neg - add rAD_T2 = rAD_TB2, rIndex_2_16 - shladd rAD_T1 = rIndex_1, 4, rAD_TB1 -} -;; - -// rAD_T1 has address of T1 -// rAD_T2 has address if T2 - -{ .mmi - setf.exp f2M = rBiased_M - ldfe fT2 = [rAD_T2] - nop.i 0 -} -{ .mmi - add rBiased_M_neg = rExp_bias_minus_1, rM_neg - add rAD_T2_neg = rAD_TB2, rIndex_2_16_neg - shladd rAD_T1_neg = rIndex_1_neg, 4, rAD_TB1 -} -;; - -// Create Scale = 2^M -// Load T1 and T2 -{ .mmi - ldfe fT1 = [rAD_T1] - nop.m 0 - nop.i 0 -} -{ .mmf - setf.exp f2M_neg = rBiased_M_neg - ldfe fT2_neg = [rAD_T2_neg] - fma.s1 fF_neg = fNfloat, fLn2_by_128_lo, f1 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fRsq = fR, fR, f0 - nop.i 0 -} -{ .mfi - ldfe fT1_neg = [rAD_T1_neg] - fma.s1 fP54 = fR, fP5, fP4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP32 = fR, fP3, fP2 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 fP54_neg = fR, fP5, fP4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 fP32_neg = fR, fP3, fP2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP5432 = fRsq, fP54, fP32 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS2 = fF,fT2,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fS1 = f2M,fT1,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fP5432_neg = fRsq, fP54_neg, fP32_neg - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fS1_neg = f2M_neg,fT1_neg,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS2_neg = fF_neg,fT2_neg,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP = fRsq, fP5432, fR - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS = fS1,fS2,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fms.s1 fP_neg = fRsq, fP5432_neg, fR - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS_neg = fS1_neg,fS2_neg,f0 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fmpy.s0 fTmp = fLn2_by_128_lo, fLn2_by_128_lo // Force inexact -(p14) br.cond.spnt COSH_POSSIBLE_OVERFLOW -} -;; - -{ .mfi - nop.m 0 - fma.s1 fExp = fS, fP, fS - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fExp_neg = fS_neg, fP_neg, fS_neg - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fma.d.s0 f8 = fExp, f1, fExp_neg - br.ret.sptk b0 // Normal path exit -} -;; - -// Here if 0 < |x| < 0.25 -COSH_SMALL: -{ .mmf - add rAD_T1 = 0x1a0, rAD_TB1 - add rAD_T2 = 0x1d0, rAD_TB1 -} -;; - -{ .mmf - ldfe fA6 = [rAD_T1],16 - ldfe fA5 = [rAD_T2],16 - nop.f 0 -} -;; - -{ .mmi - ldfe fA4 = [rAD_T1],16 - ldfe fA3 = [rAD_T2],16 - nop.i 0 -} -;; - -{ .mmi - ldfe fA2 = [rAD_T1],16 - ldfe fA1 = [rAD_T2],16 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fX4 = fXsq, fXsq, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fA65 = fXsq, fA6, fA5 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA43 = fXsq, fA4, fA3 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fA21 = fXsq, fA2, fA1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fA6543 = fX4, fA65, fA43 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fA654321 = fX4, fA6543, fA21 - nop.i 0 -} -;; - -// Dummy multiply to generate inexact -{ .mfi - nop.m 0 - fmpy.s0 fTmp = fA6, fA6 - nop.i 0 -} -{ .mfb - nop.m 0 - fma.d.s0 f8 = fA654321, fXsq, f1 - br.ret.sptk b0 // Exit if 0 < |x| < 0.25 -} -;; - - -COSH_POSSIBLE_OVERFLOW: - -// Here if fMAX_DBL_NORM_ARG < |x| < fMIN_DBL_OFLOW_ARG -// This cannot happen if input is a double, only if input higher precision. -// Overflow is a possibility, not a certainty. - -// Recompute result using status field 2 with user's rounding mode, -// and wre set. If result is larger than largest double, then we have -// overflow - -{ .mfi - mov rGt_ln = 0x103ff // Exponent for largest dbl + 1 ulp - fsetc.s2 0x7F,0x42 // Get user's round mode, set wre - nop.i 0 -} -;; - -{ .mfi - setf.exp fGt_pln = rGt_ln // Create largest double + 1 ulp - fma.d.s2 fWre_urm_f8 = fS, fP, fS // Result with wre set - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 // Turn off wre in sf2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.ge.s1 p6, p0 = fWre_urm_f8, fGt_pln // Test for overflow - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - nop.f 0 -(p6) br.cond.spnt COSH_CERTAIN_OVERFLOW // Branch if overflow -} -;; - -{ .mfb - nop.m 0 - fma.d.s0 f8 = fS, fP, fS - br.ret.sptk b0 // Exit if really no overflow -} -;; - -COSH_CERTAIN_OVERFLOW: -{ .mmi - sub rTmp = rExp_mask, r0, 1 -;; - setf.exp fTmp = rTmp - nop.i 0 -} -;; - -{ .mfi - alloc r32=ar.pfs,1,4,4,0 - fmerge.s FR_X = f8,f8 - nop.i 0 -} -{ .mfb - mov GR_Parameter_TAG = 64 - fma.d.s0 FR_RESULT = fTmp, fTmp, f0 // Set I,O and +INF result - br.cond.sptk __libm_error_region -} -;; - -// Here if x unorm -COSH_UNORM: -{ .mfb - getf.exp rSignexp_x = fNormX // Must recompute if x unorm - fcmp.eq.s0 p6, p0 = f8, f0 // Set D flag - br.cond.sptk COSH_COMMON -} -;; - -GLOBAL_IEEE754_END(cosh) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_coshf.S b/sysdeps/ia64/fpu/e_coshf.S deleted file mode 100644 index 97cb4e1771..0000000000 --- a/sysdeps/ia64/fpu/e_coshf.S +++ /dev/null @@ -1,711 +0,0 @@ -.file "coshf.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. - -// History -//********************************************************************* -// 02/02/00 Initial version -// 02/16/00 The error tag for coshf overflow changed to 65 (from 64). -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 05/07/01 Reworked to improve speed of all paths -// 05/20/02 Cleaned up namespace and sf0 syntax -// 11/15/02 Improved algorithm based on expf -// 03/31/05 Reformatted delimiters between data tables -// -// API -//********************************************************************* -// float coshf(float) -// -// Overview of operation -//********************************************************************* -// Case 1: 0 < |x| < 0.25 -// Evaluate cosh(x) by a 8th order polynomial -// Care is take for the order of multiplication; and A2 is not exactly 1/4!, -// A3 is not exactly 1/6!, etc. -// cosh(x) = 1 + (A1*x^2 + A2*x^4 + A3*x^6 + A4*x^8) -// -// Case 2: 0.25 < |x| < 89.41598 -// Algorithm is based on the identity cosh(x) = ( exp(x) + exp(-x) ) / 2. -// The algorithm for exp is described as below. There are a number of -// economies from evaluating both exp(x) and exp(-x). Although we -// are evaluating both quantities, only where the quantities diverge do we -// duplicate the computations. The basic algorithm for exp(x) is described -// below. -// -// Take the input x. w is "how many log2/128 in x?" -// w = x * 64/log2 -// NJ = int(w) -// x = NJ*log2/64 + R - -// NJ = 64*n + j -// x = n*log2 + (log2/64)*j + R -// -// So, exp(x) = 2^n * 2^(j/64)* exp(R) -// -// T = 2^n * 2^(j/64) -// Construct 2^n -// Get 2^(j/64) table -// actually all the entries of 2^(j/64) table are stored in DP and -// with exponent bits set to 0 -> multiplication on 2^n can be -// performed by doing logical "or" operation with bits presenting 2^n - -// exp(R) = 1 + (exp(R) - 1) -// P = exp(R) - 1 approximated by Taylor series of 3rd degree -// P = A3*R^3 + A2*R^2 + R, A3 = 1/6, A2 = 1/2 -// - -// The final result is reconstructed as follows -// exp(x) = T + T*P - -// Special values -//********************************************************************* -// coshf(+0) = 1.0 -// coshf(-0) = 1.0 - -// coshf(+qnan) = +qnan -// coshf(-qnan) = -qnan -// coshf(+snan) = +qnan -// coshf(-snan) = -qnan - -// coshf(-inf) = +inf -// coshf(+inf) = +inf - -// Overflow and Underflow -//********************************************************************* -// coshf(x) = largest single normal when -// x = 89.41598 = 0x42b2d4fc -// -// There is no underflow. - -// Registers used -//********************************************************************* -// Floating Point registers used: -// f8 input, output -// f6,f7, f9 -> f15, f32 -> f45 - -// General registers used: -// r2, r3, r16 -> r38 - -// Predicate registers used: -// p6 -> p15 - -// Assembly macros -//********************************************************************* -// integer registers used -// scratch -rNJ = r2 -rNJ_neg = r3 - -rJ_neg = r16 -rN_neg = r17 -rSignexp_x = r18 -rExp_x = r18 -rExp_mask = r19 -rExp_bias = r20 -rAd1 = r21 -rAd2 = r22 -rJ = r23 -rN = r24 -rTblAddr = r25 -rA3 = r26 -rExpHalf = r27 -rLn2Div64 = r28 -rGt_ln = r29 -r17ones_m1 = r29 -rRightShifter = r30 -rJ_mask = r30 -r64DivLn2 = r31 -rN_mask = r31 -// stacked -GR_SAVE_PFS = r32 -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Parameter_TAG = r38 - -// floating point registers used -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 -// scratch -fRightShifter = f6 -f64DivLn2 = f7 -fNormX = f9 -fNint = f10 -fN = f11 -fR = f12 -fLn2Div64 = f13 -fA2 = f14 -fA3 = f15 -// stacked -fP = f32 -fT = f33 -fMIN_SGL_OFLOW_ARG = f34 -fMAX_SGL_NORM_ARG = f35 -fRSqr = f36 -fA1 = f37 -fA21 = f37 -fA4 = f38 -fA43 = f38 -fA4321 = f38 -fX4 = f39 -fTmp = f39 -fGt_pln = f39 -fWre_urm_f8 = f40 -fXsq = f40 -fP_neg = f41 -fT_neg = f42 -fExp = f43 -fExp_neg = f44 -fAbsX = f45 - - -RODATA -.align 16 - -LOCAL_OBJECT_START(_coshf_table) -data4 0x42b2d4fd // Smallest single arg to overflow single result -data4 0x42b2d4fc // Largest single arg to give normal single result -data4 0x00000000 // pad -data4 0x00000000 // pad -// -// 2^(j/64) table, j goes from 0 to 63 -data8 0x0000000000000000 // 2^(0/64) -data8 0x00002C9A3E778061 // 2^(1/64) -data8 0x000059B0D3158574 // 2^(2/64) -data8 0x0000874518759BC8 // 2^(3/64) -data8 0x0000B5586CF9890F // 2^(4/64) -data8 0x0000E3EC32D3D1A2 // 2^(5/64) -data8 0x00011301D0125B51 // 2^(6/64) -data8 0x0001429AAEA92DE0 // 2^(7/64) -data8 0x000172B83C7D517B // 2^(8/64) -data8 0x0001A35BEB6FCB75 // 2^(9/64) -data8 0x0001D4873168B9AA // 2^(10/64) -data8 0x0002063B88628CD6 // 2^(11/64) -data8 0x0002387A6E756238 // 2^(12/64) -data8 0x00026B4565E27CDD // 2^(13/64) -data8 0x00029E9DF51FDEE1 // 2^(14/64) -data8 0x0002D285A6E4030B // 2^(15/64) -data8 0x000306FE0A31B715 // 2^(16/64) -data8 0x00033C08B26416FF // 2^(17/64) -data8 0x000371A7373AA9CB // 2^(18/64) -data8 0x0003A7DB34E59FF7 // 2^(19/64) -data8 0x0003DEA64C123422 // 2^(20/64) -data8 0x0004160A21F72E2A // 2^(21/64) -data8 0x00044E086061892D // 2^(22/64) -data8 0x000486A2B5C13CD0 // 2^(23/64) -data8 0x0004BFDAD5362A27 // 2^(24/64) -data8 0x0004F9B2769D2CA7 // 2^(25/64) -data8 0x0005342B569D4F82 // 2^(26/64) -data8 0x00056F4736B527DA // 2^(27/64) -data8 0x0005AB07DD485429 // 2^(28/64) -data8 0x0005E76F15AD2148 // 2^(29/64) -data8 0x0006247EB03A5585 // 2^(30/64) -data8 0x0006623882552225 // 2^(31/64) -data8 0x0006A09E667F3BCD // 2^(32/64) -data8 0x0006DFB23C651A2F // 2^(33/64) -data8 0x00071F75E8EC5F74 // 2^(34/64) -data8 0x00075FEB564267C9 // 2^(35/64) -data8 0x0007A11473EB0187 // 2^(36/64) -data8 0x0007E2F336CF4E62 // 2^(37/64) -data8 0x00082589994CCE13 // 2^(38/64) -data8 0x000868D99B4492ED // 2^(39/64) -data8 0x0008ACE5422AA0DB // 2^(40/64) -data8 0x0008F1AE99157736 // 2^(41/64) -data8 0x00093737B0CDC5E5 // 2^(42/64) -data8 0x00097D829FDE4E50 // 2^(43/64) -data8 0x0009C49182A3F090 // 2^(44/64) -data8 0x000A0C667B5DE565 // 2^(45/64) -data8 0x000A5503B23E255D // 2^(46/64) -data8 0x000A9E6B5579FDBF // 2^(47/64) -data8 0x000AE89F995AD3AD // 2^(48/64) -data8 0x000B33A2B84F15FB // 2^(49/64) -data8 0x000B7F76F2FB5E47 // 2^(50/64) -data8 0x000BCC1E904BC1D2 // 2^(51/64) -data8 0x000C199BDD85529C // 2^(52/64) -data8 0x000C67F12E57D14B // 2^(53/64) -data8 0x000CB720DCEF9069 // 2^(54/64) -data8 0x000D072D4A07897C // 2^(55/64) -data8 0x000D5818DCFBA487 // 2^(56/64) -data8 0x000DA9E603DB3285 // 2^(57/64) -data8 0x000DFC97337B9B5F // 2^(58/64) -data8 0x000E502EE78B3FF6 // 2^(59/64) -data8 0x000EA4AFA2A490DA // 2^(60/64) -data8 0x000EFA1BEE615A27 // 2^(61/64) -data8 0x000F50765B6E4540 // 2^(62/64) -data8 0x000FA7C1819E90D8 // 2^(63/64) -LOCAL_OBJECT_END(_coshf_table) - -LOCAL_OBJECT_START(cosh_p_table) -data8 0x3efa3001dcf5905b // A4 -data8 0x3f56c1437543543e // A3 -data8 0x3fa5555572601504 // A2 -data8 0x3fdfffffffe2f097 // A1 -LOCAL_OBJECT_END(cosh_p_table) - - -.section .text -GLOBAL_IEEE754_ENTRY(coshf) - -{ .mlx - getf.exp rSignexp_x = f8 // Must recompute if x unorm - movl r64DivLn2 = 0x40571547652B82FE // 64/ln(2) -} -{ .mlx - addl rTblAddr = @ltoff(_coshf_table),gp - movl rRightShifter = 0x43E8000000000000 // DP Right Shifter -} -;; - -{ .mfi - // point to the beginning of the table - ld8 rTblAddr = [rTblAddr] - fclass.m p6, p0 = f8, 0x0b // Test for x=unorm - addl rA3 = 0x3E2AA, r0 // high bits of 1.0/6.0 rounded to SP -} -{ .mfi - nop.m 0 - fnorm.s1 fNormX = f8 // normalized x - addl rExpHalf = 0xFFFE, r0 // exponent of 1/2 -} -;; - -{ .mfi - setf.d f64DivLn2 = r64DivLn2 // load 64/ln(2) to FP reg - fclass.m p15, p0 = f8, 0x1e3 // test for NaT,NaN,Inf - nop.i 0 -} -{ .mlx - // load Right Shifter to FP reg - setf.d fRightShifter = rRightShifter - movl rLn2Div64 = 0x3F862E42FEFA39EF // DP ln(2)/64 in GR -} -;; - -{ .mfi - mov rExp_mask = 0x1ffff - fcmp.eq.s1 p13, p0 = f0, f8 // test for x = 0.0 - shl rA3 = rA3, 12 // 0x3E2AA000, approx to 1.0/6.0 in SP -} -{ .mfb - nop.m 0 - nop.f 0 -(p6) br.cond.spnt COSH_UNORM // Branch if x=unorm -} -;; - -COSH_COMMON: -{ .mfi - setf.exp fA2 = rExpHalf // load A2 to FP reg - nop.f 0 - mov rExp_bias = 0xffff -} -{ .mfb - setf.d fLn2Div64 = rLn2Div64 // load ln(2)/64 to FP reg -(p15) fma.s.s0 f8 = f8, f8, f0 // result if x = NaT,NaN,Inf -(p15) br.ret.spnt b0 // exit here if x = NaT,NaN,Inf -} -;; - -{ .mfi - // min overflow and max normal threshold - ldfps fMIN_SGL_OFLOW_ARG, fMAX_SGL_NORM_ARG = [rTblAddr], 8 - nop.f 0 - and rExp_x = rExp_mask, rSignexp_x // Biased exponent of x -} -{ .mfb - setf.s fA3 = rA3 // load A3 to FP reg -(p13) fma.s.s0 f8 = f1, f1, f0 // result if x = 0.0 -(p13) br.ret.spnt b0 // exit here if x =0.0 -} -;; - -{ .mfi - sub rExp_x = rExp_x, rExp_bias // True exponent of x - fmerge.s fAbsX = f0, fNormX // Form |x| - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // x*(64/ln(2)) + Right Shifter - fma.s1 fNint = fNormX, f64DivLn2, fRightShifter - add rTblAddr = 8, rTblAddr -} -{ .mfb - cmp.gt p7, p0 = -2, rExp_x // Test |x| < 2^(-2) - fma.s1 fXsq = fNormX, fNormX, f0 // x*x for small path -(p7) br.cond.spnt COSH_SMALL // Branch if 0 < |x| < 2^-2 -} -;; - -{ .mfi - nop.m 0 - // check for overflow - fcmp.ge.s1 p12, p13 = fAbsX, fMIN_SGL_OFLOW_ARG - mov rJ_mask = 0x3f // 6-bit mask for J -} -;; - -{ .mfb - nop.m 0 - fms.s1 fN = fNint, f1, fRightShifter // n in FP register - // branch out if overflow -(p12) br.cond.spnt COSH_CERTAIN_OVERFLOW -} -;; - -{ .mfi - getf.sig rNJ = fNint // bits of n, j - // check for possible overflow - fcmp.gt.s1 p13, p0 = fAbsX, fMAX_SGL_NORM_ARG - nop.i 0 -} -;; - -{ .mfi - addl rN = 0xFFBF - 63, rNJ // biased and shifted n-1,j - fnma.s1 fR = fLn2Div64, fN, fNormX // R = x - N*ln(2)/64 - and rJ = rJ_mask, rNJ // bits of j -} -{ .mfi - sub rNJ_neg = r0, rNJ // bits of n, j for -x - nop.f 0 - andcm rN_mask = -1, rJ_mask // 0xff...fc0 to mask N -} -;; - -{ .mfi - shladd rJ = rJ, 3, rTblAddr // address in the 2^(j/64) table - nop.f 0 - and rN = rN_mask, rN // biased, shifted n-1 -} -{ .mfi - addl rN_neg = 0xFFBF - 63, rNJ_neg // -x biased, shifted n-1,j - nop.f 0 - and rJ_neg = rJ_mask, rNJ_neg // bits of j for -x -} -;; - -{ .mfi - ld8 rJ = [rJ] // Table value - nop.f 0 - shl rN = rN, 46 // 2^(n-1) bits in DP format -} -{ .mfi - shladd rJ_neg = rJ_neg, 3, rTblAddr // addr in 2^(j/64) table -x - nop.f 0 - and rN_neg = rN_mask, rN_neg // biased, shifted n-1 for -x -} -;; - -{ .mfi - ld8 rJ_neg = [rJ_neg] // Table value for -x - nop.f 0 - shl rN_neg = rN_neg, 46 // 2^(n-1) bits in DP format for -x -} -;; - -{ .mfi - or rN = rN, rJ // bits of 2^n * 2^(j/64) in DP format - nop.f 0 - nop.i 0 -} -;; - -{ .mmf - setf.d fT = rN // 2^(n-1) * 2^(j/64) - or rN_neg = rN_neg, rJ_neg // -x bits of 2^n * 2^(j/64) in DP - fma.s1 fRSqr = fR, fR, f0 // R^2 -} -;; - -{ .mfi - setf.d fT_neg = rN_neg // 2^(n-1) * 2^(j/64) for -x - fma.s1 fP = fA3, fR, fA2 // A3*R + A2 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 fP_neg = fA3, fR, fA2 // A3*R + A2 for -x - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP = fP, fRSqr, fR // P = (A3*R + A2)*R^2 + R - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fP_neg = fP_neg, fRSqr, fR // P = (A3*R + A2)*R^2 + R, -x - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fmpy.s0 fTmp = fLn2Div64, fLn2Div64 // Force inexact - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fExp = fP, fT, fT // exp(x)/2 - nop.i 0 -} -{ .mfb - nop.m 0 - fma.s1 fExp_neg = fP_neg, fT_neg, fT_neg // exp(-x)/2 - // branch out if possible overflow result -(p13) br.cond.spnt COSH_POSSIBLE_OVERFLOW -} -;; - -{ .mfb - nop.m 0 - // final result in the absence of overflow - fma.s.s0 f8 = fExp, f1, fExp_neg // result = (exp(x)+exp(-x))/2 - // exit here in the absence of overflow - br.ret.sptk b0 // Exit main path, 0.25 <= |x| < 89.41598 -} -;; - -// Here if 0 < |x| < 0.25. Evaluate 8th order polynomial. -COSH_SMALL: -{ .mmi - add rAd1 = 0x200, rTblAddr - add rAd2 = 0x210, rTblAddr - nop.i 0 -} -;; - -{ .mmi - ldfpd fA4, fA3 = [rAd1] - ldfpd fA2, fA1 = [rAd2] - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fX4 = fXsq, fXsq, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fA43 = fXsq, fA4, fA3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA21 = fXsq, fA2, fA1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fA4321 = fX4, fA43, fA21 - nop.i 0 -} -;; - -// Dummy multiply to generate inexact -{ .mfi - nop.m 0 - fmpy.s0 fTmp = fA4, fA4 - nop.i 0 -} -{ .mfb - nop.m 0 - fma.s.s0 f8 = fA4321, fXsq, f1 - br.ret.sptk b0 // Exit if 0 < |x| < 0.25 -} -;; - -COSH_POSSIBLE_OVERFLOW: - -// Here if fMAX_SGL_NORM_ARG < x < fMIN_SGL_OFLOW_ARG -// This cannot happen if input is a single, only if input higher precision. -// Overflow is a possibility, not a certainty. - -// Recompute result using status field 2 with user's rounding mode, -// and wre set. If result is larger than largest single, then we have -// overflow - -{ .mfi - mov rGt_ln = 0x1007f // Exponent for largest single + 1 ulp - fsetc.s2 0x7F,0x42 // Get user's round mode, set wre - nop.i 0 -} -;; - -{ .mfi - setf.exp fGt_pln = rGt_ln // Create largest single + 1 ulp - fma.s.s2 fWre_urm_f8 = fP, fT, fT // Result with wre set - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 // Turn off wre in sf2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.ge.s1 p6, p0 = fWre_urm_f8, fGt_pln // Test for overflow - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - nop.f 0 -(p6) br.cond.spnt COSH_CERTAIN_OVERFLOW // Branch if overflow -} -;; - -{ .mfb - nop.m 0 - fma.s.s0 f8 = fP, fT, fT - br.ret.sptk b0 // Exit if really no overflow -} -;; - -// here if overflow -COSH_CERTAIN_OVERFLOW: -{ .mmi - addl r17ones_m1 = 0x1FFFE, r0 -;; - setf.exp fTmp = r17ones_m1 - nop.i 0 -} -;; - -{ .mfi - alloc r32 = ar.pfs, 0, 3, 4, 0 // get some registers - fmerge.s FR_X = f8,f8 - nop.i 0 -} -{ .mfb - mov GR_Parameter_TAG = 65 - fma.s.s0 FR_RESULT = fTmp, fTmp, f0 // Set I,O and +INF result - br.cond.sptk __libm_error_region -} -;; - -// Here if x unorm -COSH_UNORM: -{ .mfb - getf.exp rSignexp_x = fNormX // Must recompute if x unorm - fcmp.eq.s0 p6, p0 = f8, f0 // Set D flag - br.cond.sptk COSH_COMMON // Return to main path -} -;; - -GLOBAL_IEEE754_END(coshf) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = FR_Y,16 // Store Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mfi - stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - nop.f 0 - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address -} -{ .mib - stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_coshl.S b/sysdeps/ia64/fpu/e_coshl.S deleted file mode 100644 index 43da1ab04d..0000000000 --- a/sysdeps/ia64/fpu/e_coshl.S +++ /dev/null @@ -1,1095 +0,0 @@ -.file "coshl.s" - - -// Copyright (c) 2000 - 2002, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 01/23/01 Set inexact flag for large args. -// 05/07/01 Reworked to improve speed of all paths -// 05/20/02 Cleaned up namespace and sf0 syntax -// 12/06/02 Improved performance -// -// API -//============================================================== -// long double = coshl(long double) -// input floating point f8 -// output floating point f8 -// -// Registers used -//============================================================== -// general registers: -// r14 -> r40 -// predicate registers used: -// p6 -> p11 -// floating-point registers used: -// f9 -> f15; f32 -> f90; -// f8 has input, then output -// -// Overview of operation -//============================================================== -// There are seven paths -// 1. 0 < |x| < 0.25 COSH_BY_POLY -// 2. 0.25 <=|x| < 32 COSH_BY_TBL -// 3. 32 <= |x| < 11357.21655 COSH_BY_EXP (merged path with COSH_BY_TBL) -// 4. |x| >= 11357.21655 COSH_HUGE -// 5. x=0 Done with early exit -// 6. x=inf,nan Done with early exit -// 7. x=denormal COSH_DENORM -// -// For double extended we get overflow for x >= 400c b174 ddc0 31ae c0ea -// >= 11357.21655 -// -// -// 1. COSH_BY_POLY 0 < |x| < 0.25 -// =============== -// Evaluate cosh(x) by a 12th order polynomial -// Care is take for the order of multiplication; and P2 is not exactly 1/4!, -// P3 is not exactly 1/6!, etc. -// cosh(x) = 1 + (P1*x^2 + P2*x^4 + P3*x^6 + P4*x^8 + P5*x^10 + P6*x^12) -// -// 2. COSH_BY_TBL 0.25 <= |x| < 32.0 -// ============= -// cosh(x) = cosh(B+R) -// = cosh(B)cosh(R) + sinh(B)sinh(R) -// -// ax = |x| = M*log2/64 + R -// B = M*log2/64 -// M = 64*N + j -// We will calculate M and get N as (M-j)/64 -// The division is a shift. -// exp(B) = exp(N*log2 + j*log2/64) -// = 2^N * 2^(j*log2/64) -// cosh(B) = 1/2(e^B + e^-B) -// = 1/2(2^N * 2^(j*log2/64) + 2^-N * 2^(-j*log2/64)) -// cosh(B) = (2^(N-1) * 2^(j*log2/64) + 2^(-N-1) * 2^(-j*log2/64)) -// sinh(B) = (2^(N-1) * 2^(j*log2/64) - 2^(-N-1) * 2^(-j*log2/64)) -// 2^(j*log2/64) is stored as Tjhi + Tjlo , j= -32,....,32 -// Tjhi is double-extended (80-bit) and Tjlo is single(32-bit) -// -// R = ax - M*log2/64 -// R = ax - M*log2_by_64_hi - M*log2_by_64_lo -// exp(R) = 1 + R +R^2(1/2! + R(1/3! + R(1/4! + ... + R(1/n!)...) -// = 1 + p_odd + p_even -// where the p_even uses the A coefficients and the p_even uses -// the B coefficients -// -// So sinh(R) = 1 + p_odd + p_even -(1 -p_odd -p_even)/2 = p_odd -// cosh(R) = 1 + p_even -// cosh(B) = C_hi + C_lo -// sinh(B) = S_hi -// cosh(x) = cosh(B)cosh(R) + sinh(B)sinh(R) -// -// 3. COSH_BY_EXP 32.0 <= |x| < 11357.21655 ( 400c b174 ddc0 31ae c0ea ) -// ============== -// Can approximate result by exp(x)/2 in this region. -// Y_hi = Tjhi -// Y_lo = Tjhi * (p_odd + p_even) + Tjlo -// cosh(x) = Y_hi + Y_lo -// -// 4. COSH_HUGE |x| >= 11357.21655 ( 400c b174 ddc0 31ae c0ea ) -// ============ -// Set error tag and call error support -// -// -// Assembly macros -//============================================================== -r_ad5 = r14 -r_rshf_2to57 = r15 -r_exp_denorm = r15 -r_ad_mJ_lo = r15 -r_ad_J_lo = r16 -r_2Nm1 = r17 -r_2mNm1 = r18 -r_exp_x = r18 -r_ad_J_hi = r19 -r_ad2o = r19 -r_ad_mJ_hi = r20 -r_mj = r21 -r_ad2e = r22 -r_ad3 = r23 -r_ad1 = r24 -r_Mmj = r24 -r_rshf = r25 -r_M = r25 -r_N = r25 -r_jshf = r26 -r_exp_2tom57 = r26 -r_j = r26 -r_exp_mask = r27 -r_signexp_x = r28 -r_signexp_0_5 = r28 -r_exp_0_25 = r29 -r_sig_inv_ln2 = r30 -r_exp_32 = r30 -r_exp_huge = r30 -r_ad4 = r31 - -GR_SAVE_PFS = r34 -GR_SAVE_B0 = r35 -GR_SAVE_GP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - -f_ABS_X = f9 -f_X2 = f10 -f_X4 = f11 -f_tmp = f14 -f_RSHF = f15 - -f_Inv_log2by64 = f32 -f_log2by64_lo = f33 -f_log2by64_hi = f34 -f_A1 = f35 - -f_A2 = f36 -f_A3 = f37 -f_Rcub = f38 -f_M_temp = f39 -f_R_temp = f40 - -f_Rsq = f41 -f_R = f42 -f_M = f43 -f_B1 = f44 -f_B2 = f45 - -f_B3 = f46 -f_peven_temp1 = f47 -f_peven_temp2 = f48 -f_peven = f49 -f_podd_temp1 = f50 - -f_podd_temp2 = f51 -f_podd = f52 -f_poly65 = f53 -f_poly6543 = f53 -f_poly6to1 = f53 -f_poly43 = f54 -f_poly21 = f55 - -f_X3 = f56 -f_INV_LN2_2TO63 = f57 -f_RSHF_2TO57 = f58 -f_2TOM57 = f59 -f_smlst_oflow_input = f60 - -f_pre_result = f61 -f_huge = f62 -f_spos = f63 -f_sneg = f64 -f_Tjhi = f65 - -f_Tjlo = f66 -f_Tmjhi = f67 -f_Tmjlo = f68 -f_S_hi = f69 -f_SC_hi_temp = f70 - -f_C_lo_temp1 = f71 -f_C_lo_temp2 = f72 -f_C_lo_temp3 = f73 -f_C_lo_temp4 = f73 -f_C_lo = f74 -f_C_hi = f75 - -f_Y_hi = f77 -f_Y_lo_temp = f78 -f_Y_lo = f79 -f_NORM_X = f80 - -f_P1 = f81 -f_P2 = f82 -f_P3 = f83 -f_P4 = f84 -f_P5 = f85 - -f_P6 = f86 -f_Tjhi_spos = f87 -f_Tjlo_spos = f88 -f_huge = f89 -f_signed_hi_lo = f90 - - -// Data tables -//============================================================== - -// DO NOT CHANGE ORDER OF THESE TABLES -RODATA - -.align 16 -LOCAL_OBJECT_START(cosh_arg_reduction) -// data8 0xB8AA3B295C17F0BC, 0x00004005 // 64/log2 -- signif loaded with setf - data8 0xB17217F7D1000000, 0x00003FF8 // log2/64 high part - data8 0xCF79ABC9E3B39804, 0x00003FD0 // log2/64 low part - data8 0xb174ddc031aec0ea, 0x0000400c // Smallest x to overflow (11357.21655) -LOCAL_OBJECT_END(cosh_arg_reduction) - -LOCAL_OBJECT_START(cosh_p_table) - data8 0x8FA02AC65BCBD5BC, 0x00003FE2 // P6 - data8 0xD00D00D1021D7370, 0x00003FEF // P4 - data8 0xAAAAAAAAAAAAAB80, 0x00003FFA // P2 - data8 0x93F27740C0C2F1CC, 0x00003FE9 // P5 - data8 0xB60B60B60B4FE884, 0x00003FF5 // P3 - data8 0x8000000000000000, 0x00003FFE // P1 -LOCAL_OBJECT_END(cosh_p_table) - -LOCAL_OBJECT_START(cosh_ab_table) - data8 0xAAAAAAAAAAAAAAAC, 0x00003FFC // A1 - data8 0x88888888884ECDD5, 0x00003FF8 // A2 - data8 0xD00D0C6DCC26A86B, 0x00003FF2 // A3 - data8 0x8000000000000002, 0x00003FFE // B1 - data8 0xAAAAAAAAAA402C77, 0x00003FFA // B2 - data8 0xB60B6CC96BDB144D, 0x00003FF5 // B3 -LOCAL_OBJECT_END(cosh_ab_table) - -LOCAL_OBJECT_START(cosh_j_hi_table) - data8 0xB504F333F9DE6484, 0x00003FFE - data8 0xB6FD91E328D17791, 0x00003FFE - data8 0xB8FBAF4762FB9EE9, 0x00003FFE - data8 0xBAFF5AB2133E45FB, 0x00003FFE - data8 0xBD08A39F580C36BF, 0x00003FFE - data8 0xBF1799B67A731083, 0x00003FFE - data8 0xC12C4CCA66709456, 0x00003FFE - data8 0xC346CCDA24976407, 0x00003FFE - data8 0xC5672A115506DADD, 0x00003FFE - data8 0xC78D74C8ABB9B15D, 0x00003FFE - data8 0xC9B9BD866E2F27A3, 0x00003FFE - data8 0xCBEC14FEF2727C5D, 0x00003FFE - data8 0xCE248C151F8480E4, 0x00003FFE - data8 0xD06333DAEF2B2595, 0x00003FFE - data8 0xD2A81D91F12AE45A, 0x00003FFE - data8 0xD4F35AABCFEDFA1F, 0x00003FFE - data8 0xD744FCCAD69D6AF4, 0x00003FFE - data8 0xD99D15C278AFD7B6, 0x00003FFE - data8 0xDBFBB797DAF23755, 0x00003FFE - data8 0xDE60F4825E0E9124, 0x00003FFE - data8 0xE0CCDEEC2A94E111, 0x00003FFE - data8 0xE33F8972BE8A5A51, 0x00003FFE - data8 0xE5B906E77C8348A8, 0x00003FFE - data8 0xE8396A503C4BDC68, 0x00003FFE - data8 0xEAC0C6E7DD24392F, 0x00003FFE - data8 0xED4F301ED9942B84, 0x00003FFE - data8 0xEFE4B99BDCDAF5CB, 0x00003FFE - data8 0xF281773C59FFB13A, 0x00003FFE - data8 0xF5257D152486CC2C, 0x00003FFE - data8 0xF7D0DF730AD13BB9, 0x00003FFE - data8 0xFA83B2DB722A033A, 0x00003FFE - data8 0xFD3E0C0CF486C175, 0x00003FFE - data8 0x8000000000000000, 0x00003FFF // Center of table - data8 0x8164D1F3BC030773, 0x00003FFF - data8 0x82CD8698AC2BA1D7, 0x00003FFF - data8 0x843A28C3ACDE4046, 0x00003FFF - data8 0x85AAC367CC487B15, 0x00003FFF - data8 0x871F61969E8D1010, 0x00003FFF - data8 0x88980E8092DA8527, 0x00003FFF - data8 0x8A14D575496EFD9A, 0x00003FFF - data8 0x8B95C1E3EA8BD6E7, 0x00003FFF - data8 0x8D1ADF5B7E5BA9E6, 0x00003FFF - data8 0x8EA4398B45CD53C0, 0x00003FFF - data8 0x9031DC431466B1DC, 0x00003FFF - data8 0x91C3D373AB11C336, 0x00003FFF - data8 0x935A2B2F13E6E92C, 0x00003FFF - data8 0x94F4EFA8FEF70961, 0x00003FFF - data8 0x96942D3720185A00, 0x00003FFF - data8 0x9837F0518DB8A96F, 0x00003FFF - data8 0x99E0459320B7FA65, 0x00003FFF - data8 0x9B8D39B9D54E5539, 0x00003FFF - data8 0x9D3ED9A72CFFB751, 0x00003FFF - data8 0x9EF5326091A111AE, 0x00003FFF - data8 0xA0B0510FB9714FC2, 0x00003FFF - data8 0xA27043030C496819, 0x00003FFF - data8 0xA43515AE09E6809E, 0x00003FFF - data8 0xA5FED6A9B15138EA, 0x00003FFF - data8 0xA7CD93B4E965356A, 0x00003FFF - data8 0xA9A15AB4EA7C0EF8, 0x00003FFF - data8 0xAB7A39B5A93ED337, 0x00003FFF - data8 0xAD583EEA42A14AC6, 0x00003FFF - data8 0xAF3B78AD690A4375, 0x00003FFF - data8 0xB123F581D2AC2590, 0x00003FFF - data8 0xB311C412A9112489, 0x00003FFF - data8 0xB504F333F9DE6484, 0x00003FFF -LOCAL_OBJECT_END(cosh_j_hi_table) - -LOCAL_OBJECT_START(cosh_j_lo_table) - data4 0x1EB2FB13 - data4 0x1CE2CBE2 - data4 0x1DDC3CBC - data4 0x1EE9AA34 - data4 0x9EAEFDC1 - data4 0x9DBF517B - data4 0x1EF88AFB - data4 0x1E03B216 - data4 0x1E78AB43 - data4 0x9E7B1747 - data4 0x9EFE3C0E - data4 0x9D36F837 - data4 0x9DEE53E4 - data4 0x9E24AE8E - data4 0x1D912473 - data4 0x1EB243BE - data4 0x1E669A2F - data4 0x9BBC610A - data4 0x1E761035 - data4 0x9E0BE175 - data4 0x1CCB12A1 - data4 0x1D1BFE90 - data4 0x1DF2F47A - data4 0x1EF22F22 - data4 0x9E3F4A29 - data4 0x1EC01A5B - data4 0x1E8CAC3A - data4 0x9DBB3FAB - data4 0x1EF73A19 - data4 0x9BB795B5 - data4 0x1EF84B76 - data4 0x9EF5818B - data4 0x00000000 // Center of table - data4 0x1F77CACA - data4 0x1EF8A91D - data4 0x1E57C976 - data4 0x9EE8DA92 - data4 0x1EE85C9F - data4 0x1F3BF1AF - data4 0x1D80CA1E - data4 0x9D0373AF - data4 0x9F167097 - data4 0x1EB70051 - data4 0x1F6EB029 - data4 0x1DFD6D8E - data4 0x9EB319B0 - data4 0x1EBA2BEB - data4 0x1F11D537 - data4 0x1F0D5A46 - data4 0x9E5E7BCA - data4 0x9F3AAFD1 - data4 0x9E86DACC - data4 0x9F3EDDC2 - data4 0x1E496E3D - data4 0x9F490BF6 - data4 0x1DD1DB48 - data4 0x1E65EBFB - data4 0x9F427496 - data4 0x1F283C4A - data4 0x1F4B0047 - data4 0x1F130152 - data4 0x9E8367C0 - data4 0x9F705F90 - data4 0x1EFB3C53 - data4 0x1F32FB13 -LOCAL_OBJECT_END(cosh_j_lo_table) - - -.section .text -GLOBAL_IEEE754_ENTRY(coshl) - -{ .mlx - getf.exp r_signexp_x = f8 // Get signexp of x, must redo if unorm - movl r_sig_inv_ln2 = 0xb8aa3b295c17f0bc // significand of 1/ln2 -} -{ .mlx - addl r_ad1 = @ltoff(cosh_arg_reduction), gp - movl r_rshf_2to57 = 0x4778000000000000 // 1.10000 2^(63+57) -} -;; - -{ .mfi - ld8 r_ad1 = [r_ad1] - fmerge.s f_ABS_X = f0,f8 - mov r_exp_0_25 = 0x0fffd // Form exponent for 0.25 -} -{ .mfi - nop.m 0 - fnorm.s1 f_NORM_X = f8 - mov r_exp_2tom57 = 0xffff-57 -} -;; - -{ .mfi - setf.d f_RSHF_2TO57 = r_rshf_2to57 // Form const 1.100 * 2^120 - fclass.m p10,p0 = f8, 0x0b // Test for denorm - mov r_exp_mask = 0x1ffff -} -{ .mlx - setf.sig f_INV_LN2_2TO63 = r_sig_inv_ln2 // Form 1/ln2 * 2^63 - movl r_rshf = 0x43e8000000000000 // 1.1000 2^63 for right shift -} -;; - -{ .mfi - nop.m 0 - fclass.m p7,p0 = f8, 0x07 // Test if x=0 - nop.i 0 -} -{ .mfi - setf.exp f_2TOM57 = r_exp_2tom57 // Form 2^-57 for scaling - nop.f 0 - add r_ad3 = 0x90, r_ad1 // Point to ab_table -} -;; - -{ .mfi - setf.d f_RSHF = r_rshf // Form right shift const 1.100 * 2^63 - fclass.m p6,p0 = f8, 0xe3 // Test if x nan, inf - add r_ad4 = 0x2f0, r_ad1 // Point to j_hi_table midpoint -} -{ .mib - add r_ad2e = 0x20, r_ad1 // Point to p_table - nop.i 0 -(p10) br.cond.spnt COSH_DENORM // Branch if x denorm -} -;; - -// Common path -- return here from COSH_DENORM if x is unnorm -COSH_COMMON: -{ .mfi - ldfe f_smlst_oflow_input = [r_ad2e],16 -(p7) fma.s0 f8 = f1, f1, f0 // Result = 1.0 if x=0 - add r_ad5 = 0x580, r_ad1 // Point to j_lo_table midpoint -} -{ .mib - ldfe f_log2by64_hi = [r_ad1],16 - and r_exp_x = r_exp_mask, r_signexp_x -(p7) br.ret.spnt b0 // Exit if x=0 -} -;; - -// Get the A coefficients for COSH_BY_TBL -{ .mfi - ldfe f_A1 = [r_ad3],16 - fcmp.lt.s1 p8,p9 = f8,f0 // Test for x<0 - cmp.lt p7,p0 = r_exp_x, r_exp_0_25 // Test x < 0.25 -} -{ .mfb - add r_ad2o = 0x30, r_ad2e // Point to p_table odd coeffs -(p6) fma.s0 f8 = f8,f8,f0 // Result for x nan, inf -(p6) br.ret.spnt b0 // Exit for x nan, inf -} -;; - -// Calculate X2 = ax*ax for COSH_BY_POLY -{ .mfi - ldfe f_log2by64_lo = [r_ad1],16 - nop.f 0 - nop.i 0 -} -{ .mfb - ldfe f_A2 = [r_ad3],16 - fma.s1 f_X2 = f_NORM_X, f_NORM_X, f0 -(p7) br.cond.spnt COSH_BY_POLY -} -;; - -// Here if |x| >= 0.25 -COSH_BY_TBL: -// ****************************************************** -// STEP 1 (TBL and EXP) - Argument reduction -// ****************************************************** -// Get the following constants. -// Inv_log2by64 -// log2by64_hi -// log2by64_lo - - -// We want 2^(N-1) and 2^(-N-1). So bias N-1 and -N-1 and -// put them in an exponent. -// f_spos = 2^(N-1) and f_sneg = 2^(-N-1) -// 0xffff + (N-1) = 0xffff +N -1 -// 0xffff - (N +1) = 0xffff -N -1 - - -// Calculate M and keep it as integer and floating point. -// M = round-to-integer(x*Inv_log2by64) -// f_M = M = truncate(ax/(log2/64)) -// Put the integer representation of M in r_M -// and the floating point representation of M in f_M - -// Get the remaining A,B coefficients -{ .mmi - ldfe f_A3 = [r_ad3],16 - nop.m 0 - nop.i 0 -} -;; - -// Use constant (1.100*2^(63-6)) to get rounded M into rightmost significand -// |x| * 64 * 1/ln2 * 2^(63-6) + 1.1000 * 2^(63+(63-6)) -{ .mfi - nop.m 0 - fma.s1 f_M_temp = f_ABS_X, f_INV_LN2_2TO63, f_RSHF_2TO57 - mov r_signexp_0_5 = 0x0fffe // signexp of +0.5 -} -;; - -// Test for |x| >= overflow limit -{ .mfi - ldfe f_B1 = [r_ad3],16 - fcmp.ge.s1 p6,p0 = f_ABS_X, f_smlst_oflow_input - nop.i 0 -} -;; - -{ .mfi - ldfe f_B2 = [r_ad3],16 - nop.f 0 - mov r_exp_32 = 0x10004 -} -;; - -// Subtract RSHF constant to get rounded M as a floating point value -// M_temp * 2^(63-6) - 2^63 -{ .mfb - ldfe f_B3 = [r_ad3],16 - fms.s1 f_M = f_M_temp, f_2TOM57, f_RSHF -(p6) br.cond.spnt COSH_HUGE // Branch if result will overflow -} -;; - -{ .mfi - getf.sig r_M = f_M_temp - nop.f 0 - cmp.ge p7,p6 = r_exp_x, r_exp_32 // Test if x >= 32 -} -;; - -// Calculate j. j is the signed extension of the six lsb of M. It -// has a range of -32 thru 31. - -// Calculate R -// ax - M*log2by64_hi -// R = (ax - M*log2by64_hi) - M*log2by64_lo - -{ .mfi - nop.m 0 - fnma.s1 f_R_temp = f_M, f_log2by64_hi, f_ABS_X - and r_j = 0x3f, r_M -} -;; - -{ .mii - nop.m 0 - shl r_jshf = r_j, 0x2 // Shift j so can sign extend it -;; - sxt1 r_jshf = r_jshf -} -;; - -{ .mii - nop.m 0 - shr r_j = r_jshf, 0x2 // Now j has range -32 to 31 - nop.i 0 -} -;; - -{ .mmi - shladd r_ad_J_hi = r_j, 4, r_ad4 // pointer to Tjhi - sub r_Mmj = r_M, r_j // M-j - sub r_mj = r0, r_j // Form -j -} -;; - -// The TBL and EXP branches are merged and predicated -// If TBL, p6 true, 0.25 <= |x| < 32 -// If EXP, p7 true, 32 <= |x| < overflow_limit -// -// N = (M-j)/64 -{ .mfi - ldfe f_Tjhi = [r_ad_J_hi] - fnma.s1 f_R = f_M, f_log2by64_lo, f_R_temp - shr r_N = r_Mmj, 0x6 // N = (M-j)/64 -} -{ .mfi - shladd r_ad_mJ_hi = r_mj, 4, r_ad4 // pointer to Tmjhi - nop.f 0 - shladd r_ad_mJ_lo = r_mj, 2, r_ad5 // pointer to Tmjlo -} -;; - -{ .mfi - sub r_2mNm1 = r_signexp_0_5, r_N // signexp 2^(-N-1) - nop.f 0 - shladd r_ad_J_lo = r_j, 2, r_ad5 // pointer to Tjlo -} -{ .mfi - ldfe f_Tmjhi = [r_ad_mJ_hi] - nop.f 0 - add r_2Nm1 = r_signexp_0_5, r_N // signexp 2^(N-1) -} -;; - -{ .mmf - ldfs f_Tmjlo = [r_ad_mJ_lo] - setf.exp f_sneg = r_2mNm1 // Form 2^(-N-1) - nop.f 0 -} -;; - -{ .mmf - ldfs f_Tjlo = [r_ad_J_lo] - setf.exp f_spos = r_2Nm1 // Form 2^(N-1) - nop.f 0 -} -;; - -// ****************************************************** -// STEP 2 (TBL and EXP) -// ****************************************************** -// Calculate Rsquared and Rcubed in preparation for p_even and p_odd - -{ .mmf - nop.m 0 - nop.m 0 - fma.s1 f_Rsq = f_R, f_R, f0 -} -;; - - -// Calculate p_even -// B_2 + Rsq *B_3 -// B_1 + Rsq * (B_2 + Rsq *B_3) -// p_even = Rsq * (B_1 + Rsq * (B_2 + Rsq *B_3)) -{ .mfi - nop.m 0 - fma.s1 f_peven_temp1 = f_Rsq, f_B3, f_B2 - nop.i 0 -} -// Calculate p_odd -// A_2 + Rsq *A_3 -// A_1 + Rsq * (A_2 + Rsq *A_3) -// podd = R + Rcub * (A_1 + Rsq * (A_2 + Rsq *A_3)) -{ .mfi - nop.m 0 - fma.s1 f_podd_temp1 = f_Rsq, f_A3, f_A2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_Rcub = f_Rsq, f_R, f0 - nop.i 0 -} -;; - -// -// If TBL, -// Calculate S_hi and S_lo, and C_hi -// SC_hi_temp = sneg * Tmjhi -// S_hi = spos * Tjhi - SC_hi_temp -// S_hi = spos * Tjhi - (sneg * Tmjhi) -// C_hi = spos * Tjhi + SC_hi_temp -// C_hi = spos * Tjhi + (sneg * Tmjhi) - -{ .mfi - nop.m 0 -(p6) fma.s1 f_SC_hi_temp = f_sneg, f_Tmjhi, f0 - nop.i 0 -} -;; - -// If TBL, -// C_lo_temp3 = sneg * Tmjlo -// C_lo_temp4 = spos * Tjlo + C_lo_temp3 -// C_lo_temp4 = spos * Tjlo + (sneg * Tmjlo) -{ .mfi - nop.m 0 -(p6) fma.s1 f_C_lo_temp3 = f_sneg, f_Tmjlo, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_peven_temp2 = f_Rsq, f_peven_temp1, f_B1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 f_podd_temp2 = f_Rsq, f_podd_temp1, f_A1 - nop.i 0 -} -;; - -// If EXP, -// Compute 2^(N-1) * Tjhi and 2^(N-1) * Tjlo -{ .mfi - nop.m 0 -(p7) fma.s1 f_Tjhi_spos = f_Tjhi, f_spos, f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.s1 f_Tjlo_spos = f_Tjlo, f_spos, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fma.s1 f_C_hi = f_spos, f_Tjhi, f_SC_hi_temp - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fms.s1 f_S_hi = f_spos, f_Tjhi, f_SC_hi_temp - nop.i 0 -} -{ .mfi - nop.m 0 -(p6) fma.s1 f_C_lo_temp4 = f_spos, f_Tjlo, f_C_lo_temp3 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_peven = f_Rsq, f_peven_temp2, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 f_podd = f_podd_temp2, f_Rcub, f_R - nop.i 0 -} -;; - -// If TBL, -// C_lo_temp1 = spos * Tjhi - C_hi -// C_lo_temp2 = sneg * Tmjlo + C_lo_temp1 -// C_lo_temp2 = sneg * Tmjlo + (spos * Tjhi - C_hi) - -{ .mfi - nop.m 0 -(p6) fms.s1 f_C_lo_temp1 = f_spos, f_Tjhi, f_C_hi - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fma.s1 f_C_lo_temp2 = f_sneg, f_Tmjhi, f_C_lo_temp1 - nop.i 0 -} -;; - -// If EXP, -// Y_hi = 2^(N-1) * Tjhi -// Y_lo = 2^(N-1) * Tjhi * (p_odd + p_even) + 2^(N-1) * Tjlo -{ .mfi - nop.m 0 -(p7) fma.s1 f_Y_lo_temp = f_peven, f1, f_podd - nop.i 0 -} -;; - -// If TBL, -// C_lo = C_lo_temp4 + C_lo_temp2 -{ .mfi - nop.m 0 -(p6) fma.s1 f_C_lo = f_C_lo_temp4, f1, f_C_lo_temp2 - nop.i 0 -} -;; - -// If TBL, -// Y_hi = C_hi -// Y_lo = S_hi*p_odd + (C_hi*p_even + C_lo) -{ .mfi - nop.m 0 -(p6) fma.s1 f_Y_lo_temp = f_C_hi, f_peven, f_C_lo - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p7) fma.s1 f_Y_lo = f_Tjhi_spos, f_Y_lo_temp, f_Tjlo_spos - nop.i 0 -} -;; - -// Dummy multiply to generate inexact -{ .mfi - nop.m 0 - fmpy.s0 f_tmp = f_B2, f_B2 - nop.i 0 -} -{ .mfi - nop.m 0 -(p6) fma.s1 f_Y_lo = f_S_hi, f_podd, f_Y_lo_temp - nop.i 0 -} -;; - -// f8 = answer = Y_hi + Y_lo -{ .mfi - nop.m 0 -(p7) fma.s0 f8 = f_Y_lo, f1, f_Tjhi_spos - nop.i 0 -} -;; - -// f8 = answer = Y_hi + Y_lo -{ .mfb - nop.m 0 -(p6) fma.s0 f8 = f_Y_lo, f1, f_C_hi - br.ret.sptk b0 // Exit for COSH_BY_TBL and COSH_BY_EXP -} -;; - - -// Here if 0 < |x| < 0.25 -COSH_BY_POLY: -{ .mmf - ldfe f_P6 = [r_ad2e],16 - ldfe f_P5 = [r_ad2o],16 - nop.f 0 -} -;; - -{ .mmi - ldfe f_P4 = [r_ad2e],16 - ldfe f_P3 = [r_ad2o],16 - nop.i 0 -} -;; - -{ .mmi - ldfe f_P2 = [r_ad2e],16 - ldfe f_P1 = [r_ad2o],16 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_X3 = f_NORM_X, f_X2, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 f_X4 = f_X2, f_X2, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_poly65 = f_X2, f_P6, f_P5 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 f_poly43 = f_X2, f_P4, f_P3 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_poly21 = f_X2, f_P2, f_P1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_poly6543 = f_X4, f_poly65, f_poly43 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_poly6to1 = f_X4, f_poly6543, f_poly21 - nop.i 0 -} -;; - -// Dummy multiply to generate inexact -{ .mfi - nop.m 0 - fmpy.s0 f_tmp = f_P6, f_P6 - nop.i 0 -} -{ .mfb - nop.m 0 - fma.s0 f8 = f_poly6to1, f_X2, f1 - br.ret.sptk b0 // Exit COSH_BY_POLY -} -;; - - -// Here if x denorm or unorm -COSH_DENORM: -// Determine if x really a denorm and not a unorm -{ .mmf - getf.exp r_signexp_x = f_NORM_X - mov r_exp_denorm = 0x0c001 // Real denorms have exp < this - fmerge.s f_ABS_X = f0, f_NORM_X -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.s0 p10,p0 = f8, f0 // Set denorm flag - nop.i 0 -} -;; - -// Set p8 if really a denorm -{ .mmi - and r_exp_x = r_exp_mask, r_signexp_x -;; - cmp.lt p8,p9 = r_exp_x, r_exp_denorm - nop.i 0 -} -;; - -// Identify denormal operands. -{ .mfb - nop.m 0 -(p8) fma.s0 f8 = f8,f8,f1 // If x denorm, result=1+x^2 -(p9) br.cond.sptk COSH_COMMON // Return to main path if x unorm -} -;; - -{ .mfb - nop.m 0 - nop.f 0 - br.ret.sptk b0 // Exit if x denorm -} -;; - - -// Here if |x| >= overflow limit -COSH_HUGE: -// for COSH_HUGE, put 24000 in exponent; take sign from input -{ .mmi - mov r_exp_huge = 0x15dbf -;; - setf.exp f_huge = r_exp_huge - nop.i 0 -} -;; - -{ .mfi - alloc r32 = ar.pfs,0,5,4,0 - fma.s1 f_signed_hi_lo = f_huge, f1, f1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s0 f_pre_result = f_signed_hi_lo, f_huge, f0 - mov GR_Parameter_TAG = 63 -} -;; - -GLOBAL_IEEE754_END(coshl) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfe [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfe [GR_Parameter_X] = f8 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfe [GR_Parameter_Y] = f_pre_result // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_exp.S b/sysdeps/ia64/fpu/e_exp.S deleted file mode 100644 index f17bc26081..0000000000 --- a/sysdeps/ia64/fpu/e_exp.S +++ /dev/null @@ -1,793 +0,0 @@ -.file "exp.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 2/02/00 Initial version -// 3/07/00 exp(inf) = inf but now does NOT call error support -// exp(-inf) = 0 but now does NOT call error support -// 4/04/00 Unwind support added -// 8/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 11/30/00 Reworked to shorten main path, widen main path to include all -// args in normal range, and add quick exit for 0, nan, inf. -// 12/05/00 Loaded constants earlier with setf to save 2 cycles. -// 02/05/02 Corrected uninitialize predicate in POSSIBLE_UNDERFLOW path -// 05/20/02 Cleaned up namespace and sf0 syntax -// 09/07/02 Force inexact flag -// 11/15/02 Split underflow path into zero/nonzero; eliminated fma in main path -// 05/30/03 Set inexact flag on unmasked overflow/underflow -// 03/31/05 Reformatted delimiters between data tables - -// API -//============================================================== -// double exp(double) - -// Overview of operation -//============================================================== -// Take the input x. w is "how many log2/128 in x?" -// w = x * 128/log2 -// n = int(w) -// x = n log2/128 + r + delta - -// n = 128M + index_1 + 2^4 index_2 -// x = M log2 + (log2/128) index_1 + (log2/8) index_2 + r + delta - -// exp(x) = 2^M 2^(index_1/128) 2^(index_2/8) exp(r) exp(delta) -// Construct 2^M -// Get 2^(index_1/128) from table_1; -// Get 2^(index_2/8) from table_2; -// Calculate exp(r) by 5th order polynomial -// r = x - n (log2/128)_high -// delta = - n (log2/128)_low -// Calculate exp(delta) as 1 + delta - - -// Special values -//============================================================== -// exp(+0) = 1.0 -// exp(-0) = 1.0 - -// exp(+qnan) = +qnan -// exp(-qnan) = -qnan -// exp(+snan) = +qnan -// exp(-snan) = -qnan - -// exp(-inf) = +0 -// exp(+inf) = +inf - -// Overflow and Underflow -//======================= -// exp(x) = largest double normal when -// x = 709.7827 = 0x40862e42fefa39ef - -// exp(x) = smallest double normal when -// x = -708.396 = 0xc086232bdd7abcd2 - -// exp(x) = largest round-to-nearest single zero when -// x = -745.1332 = 0xc0874910d52d3052 - - -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input, output -// f6 -> f15, f32 -> f49 - -// General registers used: -// r14 -> r40 - -// Predicate registers used: -// p6 -> p15 - -// Assembly macros -//============================================================== - -rRshf = r14 -rAD_TB1 = r15 -rAD_T1 = r15 -rAD_TB2 = r16 -rAD_T2 = r16 -rAD_P = r17 -rN = r18 -rIndex_1 = r19 -rIndex_2_16 = r20 -rM = r21 -rBiased_M = r21 -rIndex_1_16 = r21 -rSig_inv_ln2 = r22 -rExp_bias = r23 -rExp_mask = r24 -rTmp = r25 -rRshf_2to56 = r26 -rGt_ln = r27 -rExp_2tom56 = r28 - - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - -fRSHF_2TO56 = f6 -fINV_LN2_2TO63 = f7 -fW_2TO56_RSH = f9 -f2TOM56 = f11 -fP5 = f12 -fP54 = f12 -fP5432 = f12 -fP4 = f13 -fP3 = f14 -fP32 = f14 -fP2 = f15 -fP = f15 - -fLn2_by_128_hi = f33 -fLn2_by_128_lo = f34 - -fRSHF = f35 -fNfloat = f36 -fNormX = f37 -fR = f38 -fF = f39 - -fRsq = f40 -f2M = f41 -fS1 = f42 -fT1 = f42 -fS2 = f43 -fT2 = f43 -fS = f43 -fWre_urm_f8 = f44 -fFtz_urm_f8 = f44 - -fMIN_DBL_OFLOW_ARG = f45 -fMAX_DBL_ZERO_ARG = f46 -fMAX_DBL_NORM_ARG = f47 -fMIN_DBL_NORM_ARG = f48 -fGt_pln = f49 -fTmp = f49 - - -// Data tables -//============================================================== - -RODATA -.align 16 - -// ************* DO NOT CHANGE ORDER OF THESE TABLES ******************** - -// double-extended 1/ln(2) -// 3fff b8aa 3b29 5c17 f0bb be87fed0691d3e88 -// 3fff b8aa 3b29 5c17 f0bc -// For speed the significand will be loaded directly with a movl and setf.sig -// and the exponent will be bias+63 instead of bias+0. Thus subsequent -// computations need to scale appropriately. -// The constant 128/ln(2) is needed for the computation of w. This is also -// obtained by scaling the computations. -// -// Two shifting constants are loaded directly with movl and setf.d. -// 1. fRSHF_2TO56 = 1.1000..00 * 2^(63-7) -// This constant is added to x*1/ln2 to shift the integer part of -// x*128/ln2 into the rightmost bits of the significand. -// The result of this fma is fW_2TO56_RSH. -// 2. fRSHF = 1.1000..00 * 2^(63) -// This constant is subtracted from fW_2TO56_RSH * 2^(-56) to give -// the integer part of w, n, as a floating-point number. -// The result of this fms is fNfloat. - - -LOCAL_OBJECT_START(exp_table_1) -data8 0x40862e42fefa39f0 // smallest dbl overflow arg, +709.7827 -data8 0xc0874910d52d3052 // largest arg for rnd-to-nearest 0 result, -745.133 -data8 0x40862e42fefa39ef // largest dbl arg to give normal dbl result, +709.7827 -data8 0xc086232bdd7abcd2 // smallest dbl arg to give normal dbl result, -708.396 -data8 0xb17217f7d1cf79ab , 0x00003ff7 // ln2/128 hi -data8 0xc9e3b39803f2f6af , 0x00003fb7 // ln2/128 lo -// -// Table 1 is 2^(index_1/128) where -// index_1 goes from 0 to 15 -// -data8 0x8000000000000000 , 0x00003FFF -data8 0x80B1ED4FD999AB6C , 0x00003FFF -data8 0x8164D1F3BC030773 , 0x00003FFF -data8 0x8218AF4373FC25EC , 0x00003FFF -data8 0x82CD8698AC2BA1D7 , 0x00003FFF -data8 0x8383594EEFB6EE37 , 0x00003FFF -data8 0x843A28C3ACDE4046 , 0x00003FFF -data8 0x84F1F656379C1A29 , 0x00003FFF -data8 0x85AAC367CC487B15 , 0x00003FFF -data8 0x8664915B923FBA04 , 0x00003FFF -data8 0x871F61969E8D1010 , 0x00003FFF -data8 0x87DB357FF698D792 , 0x00003FFF -data8 0x88980E8092DA8527 , 0x00003FFF -data8 0x8955EE03618E5FDD , 0x00003FFF -data8 0x8A14D575496EFD9A , 0x00003FFF -data8 0x8AD4C6452C728924 , 0x00003FFF -LOCAL_OBJECT_END(exp_table_1) - -// Table 2 is 2^(index_1/8) where -// index_2 goes from 0 to 7 -LOCAL_OBJECT_START(exp_table_2) -data8 0x8000000000000000 , 0x00003FFF -data8 0x8B95C1E3EA8BD6E7 , 0x00003FFF -data8 0x9837F0518DB8A96F , 0x00003FFF -data8 0xA5FED6A9B15138EA , 0x00003FFF -data8 0xB504F333F9DE6484 , 0x00003FFF -data8 0xC5672A115506DADD , 0x00003FFF -data8 0xD744FCCAD69D6AF4 , 0x00003FFF -data8 0xEAC0C6E7DD24392F , 0x00003FFF -LOCAL_OBJECT_END(exp_table_2) - - -LOCAL_OBJECT_START(exp_p_table) -data8 0x3f8111116da21757 //P5 -data8 0x3fa55555d787761c //P4 -data8 0x3fc5555555555414 //P3 -data8 0x3fdffffffffffd6a //P2 -LOCAL_OBJECT_END(exp_p_table) - - -.section .text -GLOBAL_IEEE754_ENTRY(exp) - -{ .mlx - nop.m 0 - movl rSig_inv_ln2 = 0xb8aa3b295c17f0bc // significand of 1/ln2 -} -{ .mlx - addl rAD_TB1 = @ltoff(exp_table_1), gp - movl rRshf_2to56 = 0x4768000000000000 // 1.10000 2^(63+56) -} -;; - -{ .mfi - ld8 rAD_TB1 = [rAD_TB1] - fclass.m p8,p0 = f8,0x07 // Test for x=0 - mov rExp_mask = 0x1ffff -} -{ .mfi - mov rExp_bias = 0xffff - fnorm.s1 fNormX = f8 - mov rExp_2tom56 = 0xffff-56 -} -;; - -// Form two constants we need -// 1/ln2 * 2^63 to compute w = x * 1/ln2 * 128 -// 1.1000..000 * 2^(63+63-7) to right shift int(w) into the significand - -{ .mfi - setf.sig fINV_LN2_2TO63 = rSig_inv_ln2 // form 1/ln2 * 2^63 - fclass.m p9,p0 = f8,0x22 // Test for x=-inf - nop.i 0 -} -{ .mlx - setf.d fRSHF_2TO56 = rRshf_2to56 // Form const 1.100 * 2^(63+56) - movl rRshf = 0x43e8000000000000 // 1.10000 2^63 for right shift -} -;; - -{ .mfi - ldfpd fMIN_DBL_OFLOW_ARG, fMAX_DBL_ZERO_ARG = [rAD_TB1],16 - fclass.m p10,p0 = f8,0x1e1 // Test for x=+inf, nan, NaT - nop.i 0 -} -{ .mfb - setf.exp f2TOM56 = rExp_2tom56 // form 2^-56 for scaling Nfloat -(p9) fma.d.s0 f8 = f0,f0,f0 // quick exit for x=-inf -(p9) br.ret.spnt b0 -} -;; - -{ .mfi - ldfpd fMAX_DBL_NORM_ARG, fMIN_DBL_NORM_ARG = [rAD_TB1],16 - nop.f 0 - nop.i 0 -} -{ .mfb - setf.d fRSHF = rRshf // Form right shift const 1.100 * 2^63 -(p8) fma.d.s0 f8 = f1,f1,f0 // quick exit for x=0 -(p8) br.ret.spnt b0 -} -;; - -{ .mfb - ldfe fLn2_by_128_hi = [rAD_TB1],16 -(p10) fma.d.s0 f8 = f8,f8,f0 // Result if x=+inf, nan, NaT -(p10) br.ret.spnt b0 // quick exit for x=+inf, nan, NaT -} -;; - -{ .mfi - ldfe fLn2_by_128_lo = [rAD_TB1],16 - fcmp.eq.s0 p6,p0 = f8, f0 // Dummy to set D - nop.i 0 -} -;; - -// After that last load, rAD_TB1 points to the beginning of table 1 - -// W = X * Inv_log2_by_128 -// By adding 1.10...0*2^63 we shift and get round_int(W) in significand. -// We actually add 1.10...0*2^56 to X * Inv_log2 to do the same thing. - -{ .mfi - nop.m 0 - fma.s1 fW_2TO56_RSH = fNormX, fINV_LN2_2TO63, fRSHF_2TO56 - nop.i 0 -} -;; - -// Divide arguments into the following categories: -// Certain Underflow p11 - -inf < x <= MAX_DBL_ZERO_ARG -// Possible Underflow p13 - MAX_DBL_ZERO_ARG < x < MIN_DBL_NORM_ARG -// Certain Safe - MIN_DBL_NORM_ARG <= x <= MAX_DBL_NORM_ARG -// Possible Overflow p14 - MAX_DBL_NORM_ARG < x < MIN_DBL_OFLOW_ARG -// Certain Overflow p15 - MIN_DBL_OFLOW_ARG <= x < +inf -// -// If the input is really a double arg, then there will never be -// "Possible Overflow" arguments. -// - -{ .mfi - add rAD_TB2 = 0x100, rAD_TB1 - fcmp.ge.s1 p15,p0 = fNormX,fMIN_DBL_OFLOW_ARG - nop.i 0 -} -;; - -{ .mfi - add rAD_P = 0x80, rAD_TB2 - fcmp.le.s1 p11,p0 = fNormX,fMAX_DBL_ZERO_ARG - nop.i 0 -} -;; - -{ .mfb - ldfpd fP5, fP4 = [rAD_P] ,16 - fcmp.gt.s1 p14,p0 = fNormX,fMAX_DBL_NORM_ARG -(p15) br.cond.spnt EXP_CERTAIN_OVERFLOW -} -;; - -// Nfloat = round_int(W) -// The signficand of fW_2TO56_RSH contains the rounded integer part of W, -// as a twos complement number in the lower bits (that is, it may be negative). -// That twos complement number (called N) is put into rN. - -// Since fW_2TO56_RSH is scaled by 2^56, it must be multiplied by 2^-56 -// before the shift constant 1.10000 * 2^63 is subtracted to yield fNfloat. -// Thus, fNfloat contains the floating point version of N - -{ .mfb - ldfpd fP3, fP2 = [rAD_P] - fms.s1 fNfloat = fW_2TO56_RSH, f2TOM56, fRSHF -(p11) br.cond.spnt EXP_CERTAIN_UNDERFLOW -} -;; - -{ .mfi - getf.sig rN = fW_2TO56_RSH - nop.f 0 - nop.i 0 -} -;; - -// rIndex_1 has index_1 -// rIndex_2_16 has index_2 * 16 -// rBiased_M has M -// rIndex_1_16 has index_1 * 16 - -// rM has true M -// r = x - Nfloat * ln2_by_128_hi -// f = 1 - Nfloat * ln2_by_128_lo -{ .mfi - and rIndex_1 = 0x0f, rN - fnma.s1 fR = fNfloat, fLn2_by_128_hi, fNormX - shr rM = rN, 0x7 -} -{ .mfi - and rIndex_2_16 = 0x70, rN - fnma.s1 fF = fNfloat, fLn2_by_128_lo, f1 - nop.i 0 -} -;; - -// rAD_T1 has address of T1 -// rAD_T2 has address if T2 - -{ .mmi - add rBiased_M = rExp_bias, rM - add rAD_T2 = rAD_TB2, rIndex_2_16 - shladd rAD_T1 = rIndex_1, 4, rAD_TB1 -} -;; - -// Create Scale = 2^M -{ .mmi - setf.exp f2M = rBiased_M - ldfe fT2 = [rAD_T2] - nop.i 0 -} -;; - -// Load T1 and T2 -{ .mfi - ldfe fT1 = [rAD_T1] - fmpy.s0 fTmp = fLn2_by_128_lo, fLn2_by_128_lo // Force inexact - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fRsq = fR, fR, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fP54 = fR, fP5, fP4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.lt.s1 p13,p0 = fNormX,fMIN_DBL_NORM_ARG - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fP32 = fR, fP3, fP2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP5432 = fRsq, fP54, fP32 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fS1 = f2M,fT1,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS2 = fF,fT2,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP = fRsq, fP5432, fR - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS = fS1,fS2,f0 - nop.i 0 -} -;; - -{ .mbb - nop.m 0 -(p13) br.cond.spnt EXP_POSSIBLE_UNDERFLOW -(p14) br.cond.spnt EXP_POSSIBLE_OVERFLOW -} -;; - -{ .mfb - nop.m 0 - fma.d.s0 f8 = fS, fP, fS - br.ret.sptk b0 // Normal path exit -} -;; - - -EXP_POSSIBLE_OVERFLOW: - -// Here if fMAX_DBL_NORM_ARG < x < fMIN_DBL_OFLOW_ARG -// This cannot happen if input is a double, only if input higher precision. -// Overflow is a possibility, not a certainty. - -// Recompute result using status field 2 with user's rounding mode, -// and wre set. If result is larger than largest double, then we have -// overflow - -{ .mfi - mov rGt_ln = 0x103ff // Exponent for largest dbl + 1 ulp - fsetc.s2 0x7F,0x42 // Get user's round mode, set wre - nop.i 0 -} -;; - -{ .mfi - setf.exp fGt_pln = rGt_ln // Create largest double + 1 ulp - fma.d.s2 fWre_urm_f8 = fS, fP, fS // Result with wre set - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 // Turn off wre in sf2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.ge.s1 p6, p0 = fWre_urm_f8, fGt_pln // Test for overflow - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - nop.f 0 -(p6) br.cond.spnt EXP_CERTAIN_OVERFLOW // Branch if overflow -} -;; - -{ .mfb - nop.m 0 - fma.d.s0 f8 = fS, fP, fS - br.ret.sptk b0 // Exit if really no overflow -} -;; - -EXP_CERTAIN_OVERFLOW: -{ .mmi - sub rTmp = rExp_mask, r0, 1 -;; - setf.exp fTmp = rTmp - nop.i 0 -} -;; - -{ .mfi - alloc r32=ar.pfs,1,4,4,0 - fmerge.s FR_X = f8,f8 - nop.i 0 -} -{ .mfb - mov GR_Parameter_TAG = 14 - fma.d.s0 FR_RESULT = fTmp, fTmp, fTmp // Set I,O and +INF result - br.cond.sptk __libm_error_region -} -;; - -EXP_POSSIBLE_UNDERFLOW: - -// Here if fMAX_DBL_ZERO_ARG < x < fMIN_DBL_NORM_ARG -// Underflow is a possibility, not a certainty - -// We define an underflow when the answer with -// ftz set -// is zero (tiny numbers become zero) - -// Notice (from below) that if we have an unlimited exponent range, -// then there is an extra machine number E between the largest denormal and -// the smallest normal. - -// So if with unbounded exponent we round to E or below, then we are -// tiny and underflow has occurred. - -// But notice that you can be in a situation where we are tiny, namely -// rounded to E, but when the exponent is bounded we round to smallest -// normal. So the answer can be the smallest normal with underflow. - -// E -// -----+--------------------+--------------------+----- -// | | | -// 1.1...10 2^-3fff 1.1...11 2^-3fff 1.0...00 2^-3ffe -// 0.1...11 2^-3ffe (biased, 1) -// largest dn smallest normal - -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x41 // Get user's round mode, set ftz - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.d.s2 fFtz_urm_f8 = fS, fP, fS // Result with ftz set - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 // Turn off ftz in sf2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.s1 p6, p7 = fFtz_urm_f8, f0 // Test for underflow - nop.i 0 -} -{ .mfi - nop.m 0 - fma.d.s0 f8 = fS, fP, fS // Compute result, set I, maybe U - nop.i 0 -} -;; - -{ .mbb - nop.m 0 -(p6) br.cond.spnt EXP_UNDERFLOW_COMMON // Branch if really underflow -(p7) br.ret.sptk b0 // Exit if really no underflow -} -;; - -EXP_CERTAIN_UNDERFLOW: -// Here if x < fMAX_DBL_ZERO_ARG -// Result will be zero (or smallest denorm if round to +inf) with I, U set -{ .mmi - mov rTmp = 1 -;; - setf.exp fTmp = rTmp // Form small normal - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fmerge.se fTmp = fTmp, fLn2_by_128_lo // Small with signif lsb 1 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fma.d.s0 f8 = fTmp, fTmp, f0 // Set I,U, tiny (+0.0) result - br.cond.sptk EXP_UNDERFLOW_COMMON -} -;; - -EXP_UNDERFLOW_COMMON: -// Determine if underflow result is zero or nonzero -{ .mfi - alloc r32=ar.pfs,1,4,4,0 - fcmp.eq.s1 p6, p0 = f8, f0 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fmerge.s FR_X = fNormX,fNormX -(p6) br.cond.spnt EXP_UNDERFLOW_ZERO -} -;; - -EXP_UNDERFLOW_NONZERO: -// Here if x < fMIN_DBL_NORM_ARG and result nonzero; -// I, U are set -{ .mfb - mov GR_Parameter_TAG = 15 - nop.f 0 // FR_RESULT already set - br.cond.sptk __libm_error_region -} -;; - -EXP_UNDERFLOW_ZERO: -// Here if x < fMIN_DBL_NORM_ARG and result zero; -// I, U are set -{ .mfb - mov GR_Parameter_TAG = 15 - nop.f 0 // FR_RESULT already set - br.cond.sptk __libm_error_region -} -;; - -GLOBAL_IEEE754_END(exp) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_exp10.S b/sysdeps/ia64/fpu/e_exp10.S deleted file mode 100644 index eafa59dd7c..0000000000 --- a/sysdeps/ia64/fpu/e_exp10.S +++ /dev/null @@ -1,605 +0,0 @@ -.file "exp10.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 08/25/00 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 09/06/02 Improved performance; no inexact flags on exact cases -// 01/29/03 Added missing } to bundle templates -// 12/16/04 Call error handling on underflow. -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// double exp10(double) -// -// Overview of operation -//============================================================== -// Background -// -// Implementation -// -// Let x= (K + fh + fl + r)/log2(10), where -// K is an integer, fh= 0.b1 b2 b3 b4 b5, -// fl= 2^{-5}* 0.b6 b7 b8 b8 b10 (fh, fl >= 0), -// and |r|<2^{-11} -// Th is a table that stores 2^fh (32 entries) rounded to -// double extended precision (only mantissa is stored) -// Tl is a table that stores 2^fl (32 entries) rounded to -// double extended precision (only mantissa is stored) -// -// 10^x is approximated as -// 2^K * Th [ f ] * Tl [ f ] * (1+c1*e+c1*r+c2*r^2+c3*r^3+c4*r^4), -// where e= (x*log2(10)_hi-RN(x*log2(10)_hi))+log2(10)_lo*x - -// Note there are only 22 non-zero values that produce an exact result: -// 1.0, 2.0, ... 22.0. -// We test for these cases and use s1 to avoid setting the inexact flag. - -// Special values -//============================================================== -// exp10(0)= 1 -// exp10(+inf)= inf -// exp10(-inf)= 0 -// - -// Registers used -//============================================================== -// r2-r3, r14-r40 -// f6-f15, f32-f52 -// p6-p12 -// - - -GR_TBL_START = r2 -GR_LOG_TBL = r3 - -GR_OF_LIMIT = r14 -GR_UF_LIMIT = r15 -GR_EXP_CORR = r16 -GR_F_low = r17 -GR_F_high = r18 -GR_K = r19 -GR_Flow_ADDR = r20 - -GR_BIAS = r21 -GR_Fh = r22 -GR_Fh_ADDR = r23 -GR_EXPMAX = r24 -GR_BIAS53 = r25 - -GR_ROUNDVAL = r26 -GR_SNORM_LIMIT = r26 -GR_MASK = r27 -GR_KF0 = r28 -GR_MASK_low = r29 -GR_COEFF_START = r30 -GR_exact_limit = r31 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - - -FR_COEFF1 = f6 -FR_COEFF2 = f7 -FR_R = f9 -FR_LOG2_10 = f10 - -FR_2P53 = f11 -FR_KF0 = f12 -FR_COEFF3 = f13 -FR_COEFF4 = f14 -FR_UF_LIMIT = f15 - -FR_OF_LIMIT = f32 -FR_DX_L210 = f33 -FR_ROUNDVAL = f34 -FR_KF = f35 - -FR_2_TO_K = f36 -FR_T_low = f37 -FR_T_high = f38 -FR_P34 = f39 -FR_R2 = f40 - -FR_P12 = f41 -FR_T_low_K = f42 -FR_P14 = f43 -FR_T = f44 -FR_P = f45 - -FR_L2_10_low = f46 -FR_L2_10_high = f47 -FR_E0 = f48 -FR_E = f49 -FR_exact_limit = f50 - -FR_int_x = f51 -FR_SNORM_LIMIT = f52 - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(poly_coeffs) - -data8 0xd49a784bcd1b8afe, 0x00003fcb // log2(10)*2^(10-63) -data8 0x9257edfe9b5fb698, 0x3fbf // log2(10)_low (bits 64...127) -data8 0x3fac6b08d704a0c0, 0x3f83b2ab6fba4e77 // C_3 and C_4 -data8 0xb17217f7d1cf79ab, 0x00003ffe // C_1 -data8 0xf5fdeffc162c7541, 0x00003ffc // C_2 -LOCAL_OBJECT_END(poly_coeffs) - - -LOCAL_OBJECT_START(T_table) - -// 2^{0.00000 b6 b7 b8 b9 b10} -data8 0x8000000000000000, 0x8016302f17467628 -data8 0x802c6436d0e04f50, 0x80429c17d77c18ed -data8 0x8058d7d2d5e5f6b0, 0x806f17687707a7af -data8 0x80855ad965e88b83, 0x809ba2264dada76a -data8 0x80b1ed4fd999ab6c, 0x80c83c56b50cf77f -data8 0x80de8f3b8b85a0af, 0x80f4e5ff089f763e -data8 0x810b40a1d81406d4, 0x81219f24a5baa59d -data8 0x813801881d886f7b, 0x814e67cceb90502c -data8 0x8164d1f3bc030773, 0x817b3ffd3b2f2e47 -data8 0x8191b1ea15813bfd, 0x81a827baf7838b78 -data8 0x81bea1708dde6055, 0x81d51f0b8557ec1c -data8 0x81eba08c8ad4536f, 0x820225f44b55b33b -data8 0x8218af4373fc25eb, 0x822f3c7ab205c89a -data8 0x8245cd9ab2cec048, 0x825c62a423d13f0c -data8 0x8272fb97b2a5894c, 0x828998760d01faf3 -data8 0x82a0393fe0bb0ca8, 0x82b6ddf5dbc35906 -// -// 2^{0.b1 b2 b3 b4 b5} -data8 0x8000000000000000, 0x82cd8698ac2ba1d7 -data8 0x85aac367cc487b14, 0x88980e8092da8527 -data8 0x8b95c1e3ea8bd6e6, 0x8ea4398b45cd53c0 -data8 0x91c3d373ab11c336, 0x94f4efa8fef70961 -data8 0x9837f0518db8a96f, 0x9b8d39b9d54e5538 -data8 0x9ef5326091a111ad, 0xa27043030c496818 -data8 0xa5fed6a9b15138ea, 0xa9a15ab4ea7c0ef8 -data8 0xad583eea42a14ac6, 0xb123f581d2ac258f -data8 0xb504f333f9de6484, 0xb8fbaf4762fb9ee9 -data8 0xbd08a39f580c36be, 0xc12c4cca66709456 -data8 0xc5672a115506dadd, 0xc9b9bd866e2f27a2 -data8 0xce248c151f8480e3, 0xd2a81d91f12ae45a -data8 0xd744fccad69d6af4, 0xdbfbb797daf23755 -data8 0xe0ccdeec2a94e111, 0xe5b906e77c8348a8 -data8 0xeac0c6e7dd24392e, 0xefe4b99bdcdaf5cb -data8 0xf5257d152486cc2c, 0xfa83b2db722a033a -LOCAL_OBJECT_END(T_table) - - - -.section .text -GLOBAL_IEEE754_ENTRY(exp10) - - -{.mfi - alloc r32= ar.pfs, 1, 4, 4, 0 - // will continue only for non-zero normal/denormal numbers - fclass.nm.unc p12, p7= f8, 0x1b - mov GR_BIAS53= 0xffff+63-10 -} -{.mlx - // GR_TBL_START= pointer to log2(10), C_1...C_4 followed by T_table - addl GR_TBL_START= @ltoff(poly_coeffs), gp - movl GR_ROUNDVAL= 0x3fc00000 // 1.5 (SP) -} -;; - -{.mfi - ld8 GR_COEFF_START= [ GR_TBL_START ] // Load pointer to coeff table - fcmp.lt.s1 p6, p8= f8, f0 // X<0 ? - nop.i 0 -} -;; - -{.mlx - setf.exp FR_2P53= GR_BIAS53 // 2^{63-10} - movl GR_UF_LIMIT= 0xc07439b746e36b52 // (-2^10-51) / log2(10) -} -{.mlx - setf.s FR_ROUNDVAL= GR_ROUNDVAL - movl GR_OF_LIMIT= 0x40734413509f79fe // Overflow threshold -} -;; - -{.mlx - ldfe FR_LOG2_10= [ GR_COEFF_START ], 16 // load log2(10)*2^(10-63) - movl GR_SNORM_LIMIT= 0xc0733a7146f72a41 // Smallest normal threshold -} -{.mib - nop.m 0 - nop.i 0 - (p12) br.cond.spnt SPECIAL_exp10 // Branch if nan, inf, zero -} -;; - -{.mmf - ldfe FR_L2_10_low= [ GR_COEFF_START ], 16 // load log2(10)_low - setf.d FR_OF_LIMIT= GR_OF_LIMIT // Set overflow limit - fma.s0 f8= f8, f1, f0 // normalize x -} -;; - -{.mfi - ldfpd FR_COEFF3, FR_COEFF4= [ GR_COEFF_START ], 16 // load C_3, C_4 - (p8) fcvt.fx.s1 FR_int_x = f8 // Convert x to integer - nop.i 0 -} -{.mfi - setf.d FR_UF_LIMIT= GR_UF_LIMIT // Set underflow limit - fma.s1 FR_KF0= f8, FR_LOG2_10, FR_ROUNDVAL // y= (x*log2(10)*2^10 + - // 1.5*2^63) * 2^(-63) - mov GR_EXP_CORR= 0xffff-126 -} -;; - -{.mfi - setf.d FR_SNORM_LIMIT= GR_SNORM_LIMIT // Set smallest normal limit - fma.s1 FR_L2_10_high= FR_LOG2_10, FR_2P53, f0 // FR_LOG2_10= log2(10)_hi - nop.i 0 -} -;; - -{.mfi - ldfe FR_COEFF1= [ GR_COEFF_START ], 16 // load C_1 - fms.s1 FR_KF= FR_KF0, f1, FR_ROUNDVAL // (K+f)*2^(10-63) - mov GR_MASK= 1023 -} -;; - -{.mfi - ldfe FR_COEFF2= [ GR_COEFF_START ], 16 // load C_2 - fma.s1 FR_LOG2_10= f8, FR_L2_10_high, f0 // y0= x*log2(10)_hi - mov GR_MASK_low= 31 -} -;; - -{.mlx - getf.sig GR_KF0= FR_KF0 // (K+f)*2^10= round_to_int(y) - (p8) movl GR_exact_limit= 0x41b00000 // Largest x for exact result, - // +22.0 -} -;; - -{.mfi - add GR_LOG_TBL= 256, GR_COEFF_START // Pointer to high T_table - fcmp.gt.s1 p12, p7= f8, FR_OF_LIMIT // x>overflow threshold ? - nop.i 0 -} -;; - -{.mfi - (p8) setf.s FR_exact_limit = GR_exact_limit // Largest x for exact result - (p8) fcvt.xf FR_int_x = FR_int_x // Integral part of x - shr GR_K= GR_KF0, 10 // K -} -{.mfi - and GR_F_high= GR_MASK, GR_KF0 // f_high*32 - fnma.s1 FR_R= FR_KF, FR_2P53, FR_LOG2_10 // r= x*log2(10)-2^{63-10}* - // [ (K+f)*2^{10-63} ] - and GR_F_low= GR_KF0, GR_MASK_low // f_low -} -;; - -{.mmi - shladd GR_Flow_ADDR= GR_F_low, 3, GR_COEFF_START // address of 2^{f_low} - add GR_BIAS= GR_K, GR_EXP_CORR // K= bias-2*63 - shr GR_Fh= GR_F_high, 5 // f_high -} -;; - -{.mfi - setf.exp FR_2_TO_K= GR_BIAS // 2^{K-126} - (p7) fcmp.lt.s1 p12, p7= f8, FR_UF_LIMIT // x= 0), -// and |r|<2^{-11} -// Th is a table that stores 2^fh (32 entries) rounded to -// double extended precision (only mantissa is stored) -// Tl is a table that stores 2^fl (32 entries) rounded to -// double extended precision (only mantissa is stored) -// -// 10^x is approximated as -// 2^K * Th [ f ] * Tl [ f ] * (1+c1*r+c2*r^2) - -// Note there are only 10 non-zero values that produce an exact result: -// 1.0, 2.0, ... 10.0. -// We test for these cases and use s1 to avoid setting the inexact flag. - -// Special values -//============================================================== -// exp10(0)= 1 -// exp10(+inf)= inf -// exp10(-inf)= 0 -// - -// Registers used -//============================================================== -// r2-r3, r14-r40 -// f6-f15, f32-f52 -// p6-p12 -// - - -GR_TBL_START = r2 -GR_LOG_TBL = r3 - -GR_OF_LIMIT = r14 -GR_UF_LIMIT = r15 -GR_EXP_CORR = r16 -GR_F_low = r17 -GR_F_high = r18 -GR_K = r19 -GR_Flow_ADDR = r20 - -GR_BIAS = r21 -GR_Fh = r22 -GR_Fh_ADDR = r23 -GR_EXPMAX = r24 - -GR_ROUNDVAL = r26 -GR_SNORM_LIMIT = r26 -GR_MASK = r27 -GR_KF0 = r28 -GR_MASK_low = r29 -GR_COEFF_START = r30 -GR_exact_limit = r31 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - - -FR_COEFF1 = f6 -FR_COEFF2 = f7 -FR_R = f9 -FR_LOG2_10 = f10 - -FR_2P53 = f11 -FR_KF0 = f12 -FR_COEFF3 = f13 -FR_COEFF4 = f14 -FR_UF_LIMIT = f15 - -FR_OF_LIMIT = f32 -FR_DX_L210 = f33 -FR_ROUNDVAL = f34 -FR_KF = f35 - -FR_2_TO_K = f36 -FR_T_low = f37 -FR_T_high = f38 - -FR_P12 = f41 -FR_T_low_K = f42 -FR_T = f44 -FR_P = f45 - -FR_E = f49 -FR_exact_limit = f50 - -FR_int_x = f51 -FR_SNORM_LIMIT = f52 - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(poly_coeffs) - -data8 0xd49a784bcd1b8afe, 0x00003fcb // log2(10)*2^(10-63) -data8 0xb17217f7d1cf79ab, 0x00004033 // C_1 * 2^53 -data8 0xf5fdeffc162c7541, 0x00004066 // C_2 * 2^106 -LOCAL_OBJECT_END(poly_coeffs) - - -LOCAL_OBJECT_START(T_table) - -// 2^{0.00000 b6 b7 b8 b9 b10} -data8 0x8000000000000000, 0x8016302f17467628 -data8 0x802c6436d0e04f50, 0x80429c17d77c18ed -data8 0x8058d7d2d5e5f6b0, 0x806f17687707a7af -data8 0x80855ad965e88b83, 0x809ba2264dada76a -data8 0x80b1ed4fd999ab6c, 0x80c83c56b50cf77f -data8 0x80de8f3b8b85a0af, 0x80f4e5ff089f763e -data8 0x810b40a1d81406d4, 0x81219f24a5baa59d -data8 0x813801881d886f7b, 0x814e67cceb90502c -data8 0x8164d1f3bc030773, 0x817b3ffd3b2f2e47 -data8 0x8191b1ea15813bfd, 0x81a827baf7838b78 -data8 0x81bea1708dde6055, 0x81d51f0b8557ec1c -data8 0x81eba08c8ad4536f, 0x820225f44b55b33b -data8 0x8218af4373fc25eb, 0x822f3c7ab205c89a -data8 0x8245cd9ab2cec048, 0x825c62a423d13f0c -data8 0x8272fb97b2a5894c, 0x828998760d01faf3 -data8 0x82a0393fe0bb0ca8, 0x82b6ddf5dbc35906 -// -// 2^{0.b1 b2 b3 b4 b5} -data8 0x8000000000000000, 0x82cd8698ac2ba1d7 -data8 0x85aac367cc487b14, 0x88980e8092da8527 -data8 0x8b95c1e3ea8bd6e6, 0x8ea4398b45cd53c0 -data8 0x91c3d373ab11c336, 0x94f4efa8fef70961 -data8 0x9837f0518db8a96f, 0x9b8d39b9d54e5538 -data8 0x9ef5326091a111ad, 0xa27043030c496818 -data8 0xa5fed6a9b15138ea, 0xa9a15ab4ea7c0ef8 -data8 0xad583eea42a14ac6, 0xb123f581d2ac258f -data8 0xb504f333f9de6484, 0xb8fbaf4762fb9ee9 -data8 0xbd08a39f580c36be, 0xc12c4cca66709456 -data8 0xc5672a115506dadd, 0xc9b9bd866e2f27a2 -data8 0xce248c151f8480e3, 0xd2a81d91f12ae45a -data8 0xd744fccad69d6af4, 0xdbfbb797daf23755 -data8 0xe0ccdeec2a94e111, 0xe5b906e77c8348a8 -data8 0xeac0c6e7dd24392e, 0xefe4b99bdcdaf5cb -data8 0xf5257d152486cc2c, 0xfa83b2db722a033a -LOCAL_OBJECT_END(T_table) - - - -.section .text -GLOBAL_IEEE754_ENTRY(exp10f) - - -{.mfi - alloc r32= ar.pfs, 1, 4, 4, 0 - // will continue only for non-zero normal/denormal numbers - fclass.nm.unc p12, p7= f8, 0x1b - nop.i 0 -} -{.mlx - // GR_TBL_START= pointer to log2(10), C_1...C_4 followed by T_table - addl GR_TBL_START= @ltoff(poly_coeffs), gp - movl GR_ROUNDVAL= 0x3fc00000 // 1.5 (SP) -} -;; - -{.mfi - ld8 GR_COEFF_START= [ GR_TBL_START ] // Load pointer to coeff table - fcmp.lt.s1 p6, p8= f8, f0 // X<0 ? - nop.i 0 -} -;; - -{.mlx - nop.m 0 - movl GR_UF_LIMIT= 0xc2349e35 // (-2^7-22) / log2(10) -} -{.mlx - setf.s FR_ROUNDVAL= GR_ROUNDVAL - movl GR_OF_LIMIT= 0x421a209a // Overflow threshold -} -;; - -{.mlx - ldfe FR_LOG2_10= [ GR_COEFF_START ], 16 // load log2(10)*2^(10-63) - movl GR_SNORM_LIMIT= 0xc217b818 // Smallest normal threshold -} -{.mib - nop.m 0 - nop.i 0 - (p12) br.cond.spnt SPECIAL_exp10 // Branch if nan, inf, zero -} -;; - -{.mfi - setf.s FR_OF_LIMIT= GR_OF_LIMIT // Set overflow limit - fma.s0 f8= f8, f1, f0 // normalize x - nop.i 0 -} -;; - -{.mfi - setf.s FR_SNORM_LIMIT= GR_SNORM_LIMIT // Set smallest normal limit - (p8) fcvt.fx.s1 FR_int_x = f8 // Convert x to integer - nop.i 0 -} -{.mfi - setf.s FR_UF_LIMIT= GR_UF_LIMIT // Set underflow limit - fma.s1 FR_KF0= f8, FR_LOG2_10, FR_ROUNDVAL // y= (x*log2(10)*2^10 + - // 1.5*2^63) * 2^(-63) - mov GR_EXP_CORR= 0xffff-126 -} -;; - -{.mfi - ldfe FR_COEFF1= [ GR_COEFF_START ], 16 // load C_1 - fms.s1 FR_KF= FR_KF0, f1, FR_ROUNDVAL // (K+f)*2^(10-63) - mov GR_MASK= 1023 -} -;; - -{.mfi - ldfe FR_COEFF2= [ GR_COEFF_START ], 16 // load C_2 - nop.f 0 - mov GR_MASK_low= 31 -} -;; - -{.mlx - getf.sig GR_KF0= FR_KF0 // (K+f)*2^10= round_to_int(y) - (p8) movl GR_exact_limit= 0x41200000 // Largest x for exact result, - // +10.0 -} -;; - -{.mfi - add GR_LOG_TBL= 256, GR_COEFF_START // Pointer to high T_table - fcmp.gt.s1 p12, p7= f8, FR_OF_LIMIT // x>overflow threshold ? - nop.i 0 -} -;; - -{.mfi - (p8) setf.s FR_exact_limit = GR_exact_limit // Largest x for exact result - (p8) fcvt.xf FR_int_x = FR_int_x // Integral part of x - shr GR_K= GR_KF0, 10 // K -} -{.mfi - and GR_F_high= GR_MASK, GR_KF0 // f_high*32 - fms.s1 FR_R= f8, FR_LOG2_10, FR_KF // r*2^(-53)= [ x*log2(10)- - // (K+f) ] *2^{10-63} - and GR_F_low= GR_KF0, GR_MASK_low // f_low -} -;; - -{.mmi - shladd GR_Flow_ADDR= GR_F_low, 3, GR_COEFF_START // address of 2^{f_low} - add GR_BIAS= GR_K, GR_EXP_CORR // K= bias-2*63 - shr GR_Fh= GR_F_high, 5 // f_high -} -;; - -{.mfi - setf.exp FR_2_TO_K= GR_BIAS // 2^{K-126} - (p7) fcmp.lt.s1 p12, p7= f8, FR_UF_LIMIT // x= 0), -// and |r|<2^{-9} -// T is a table that stores 2^f (256 entries) rounded to -// double extended precision (only mantissa is stored) -// D stores (2^f/T [ f ] - 1), rounded to single precision -// -// 10^x is approximated as -// 2^K * T [ f ] * ((1+c1*r+c2*r^2+...+c6*r^6)*(1+c1*e)+D [ f ] ), -// where e= log2(10)_lo*x+(log2(10)_hi*x-RN(log2(10)_hi*x)) -// - - - -// Special values -//============================================================== -// exp10(0)= 1 -// exp10(+inf)= inf -// exp10(-inf)= 0 -// - - -// Registers used -//============================================================== -// f6-f15, f32-f63 -// r14-r30, r32-r40 -// p6-p8, p11-p14 -// - - - FR_X = f10 - FR_Y = f1 - FR_RESULT = f8 - - FR_COEFF1 = f6 - FR_COEFF2 = f7 - FR_KF0 = f9 - FR_LOG10 = f10 - FR_CONST1 = f11 - FR_XL10 = f12 - FR_COEFF3 = f13 - FR_COEFF4 = f14 - FR_UF_TEST = f15 - FR_OF_TEST = f32 - FR_L10_LOW = f33 - FR_COEFF5 = f34 - FR_COEFF6 = f35 - FR_L10 = f36 - FR_C_L10 = f37 - FR_XL10_H = f38 - FR_XL10_L = f39 - FR_KF = f40 - FR_E = f41 - FR_T = f42 - FR_D = f43 - FR_EXP_M_63 = f44 - FR_R = f45 - FR_E1 = f46 - FR_COEFF2 = f47 - FR_P34 = f48 - FR_P56 = f49 - FR_R2 = f50 - FR_RE = f51 - FR_D1 = f52 - FR_P36 = f53 - FR_R3E = f54 - FR_P1 = f55 - FR_P = f56 - FR_T1 = f57 - FR_XINT = f58 - FR_XINTF = f59 - FR_4 = f60 - FR_28 = f61 - FR_32 = f62 - FR_SNORM_LIMIT = f63 - - - GR_ADDR0 = r14 - GR_D_ADDR = r15 - GR_ADDR = r16 - GR_B63 = r17 - GR_KBITS = r18 - GR_F = r19 - GR_K = r20 - GR_D = r21 - GR_BM63 = r22 - GR_T = r23 - GR_CONST1 = r24 - GR_EMIN = r25 - GR_CONST2 = r26 - GR_BM8 = r27 - GR_SREG = r28 - GR_4_BIAS = r29 - GR_32_BIAS = r30 - - GR_SAVE_B0 = r33 - GR_SAVE_PFS = r34 - GR_SAVE_GP = r35 - GR_SAVE_SP = r36 - - GR_Parameter_X = r37 - GR_Parameter_Y = r38 - GR_Parameter_RESULT= r39 - GR_Parameter_TAG = r40 - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(poly_coeffs) - - data8 0xd49a784bcd1b8afe, 0x00004008 // log2(10)*2^8 - data8 0x9a209a84fbcff798, 0x0000400b // overflow threshold - data8 0xb17217f7d1cf79ab, 0x00003ffe // C_1 - data8 0xf5fdeffc162c7541, 0x00003ffc // C_2 - data8 0x3fac6b08d704a0c0 // C_3 - data8 0x3f83b2ab6fba4e77 // C_4 - data8 0x3f55d87fe78a6731 // C_5 - data8 0x3f2430912f86c787 // C_6 - data8 0x9257edfe9b5fb698, 0x00003fbf // log2(10)_low (bits 64...127) - data8 0x9a1bc98027a81918, 0x0000c00b // Smallest normal threshold -LOCAL_OBJECT_END(poly_coeffs) - - -LOCAL_OBJECT_START(T_table) - - // 2^{0.b1 b2 b3 b4 b5 b6 b7 b8} - data8 0x8000000000000000, 0x8058d7d2d5e5f6b1 - data8 0x80b1ed4fd999ab6c, 0x810b40a1d81406d4 - data8 0x8164d1f3bc030773, 0x81bea1708dde6056 - data8 0x8218af4373fc25ec, 0x8272fb97b2a5894c - data8 0x82cd8698ac2ba1d7, 0x83285071e0fc4547 - data8 0x8383594eefb6ee37, 0x83dea15b9541b132 - data8 0x843a28c3acde4046, 0x8495efb3303efd30 - data8 0x84f1f656379c1a29, 0x854e3cd8f9c8c95d - data8 0x85aac367cc487b15, 0x86078a2f23642a9f - data8 0x8664915b923fba04, 0x86c1d919caef5c88 - data8 0x871f61969e8d1010, 0x877d2afefd4e256c - data8 0x87db357ff698d792, 0x88398146b919f1d4 - data8 0x88980e8092da8527, 0x88f6dd5af155ac6b - data8 0x8955ee03618e5fdd, 0x89b540a7902557a4 - data8 0x8a14d575496efd9a, 0x8a74ac9a79896e47 - data8 0x8ad4c6452c728924, 0x8b3522a38e1e1032 - data8 0x8b95c1e3ea8bd6e7, 0x8bf6a434adde0085 - data8 0x8c57c9c4646f4dde, 0x8cb932c1bae97a95 - data8 0x8d1adf5b7e5ba9e6, 0x8d7ccfc09c50e2f8 - data8 0x8ddf042022e69cd6, 0x8e417ca940e35a01 - data8 0x8ea4398b45cd53c0, 0x8f073af5a2013520 - data8 0x8f6a8117e6c8e5c4, 0x8fce0c21c6726481 - data8 0x9031dc431466b1dc, 0x9095f1abc540ca6b - data8 0x90fa4c8beee4b12b, 0x915eed13c89689d3 - data8 0x91c3d373ab11c336, 0x9228ffdc10a051ad - data8 0x928e727d9531f9ac, 0x92f42b88f673aa7c - data8 0x935a2b2f13e6e92c, 0x93c071a0eef94bc1 - data8 0x9426ff0fab1c04b6, 0x948dd3ac8ddb7ed3 - data8 0x94f4efa8fef70961, 0x955c5336887894d5 - data8 0x95c3fe86d6cc7fef, 0x962bf1cbb8d97560 - data8 0x96942d3720185a00, 0x96fcb0fb20ac4ba3 - data8 0x97657d49f17ab08e, 0x97ce9255ec4357ab - data8 0x9837f0518db8a96f, 0x98a1976f7597e996 - data8 0x990b87e266c189aa, 0x9975c1dd47518c77 - data8 0x99e0459320b7fa65, 0x9a4b13371fd166ca - data8 0x9ab62afc94ff864a, 0x9b218d16f441d63d - data8 0x9b8d39b9d54e5539, 0x9bf93118f3aa4cc1 - data8 0x9c6573682ec32c2d, 0x9cd200db8a0774cb - data8 0x9d3ed9a72cffb751, 0x9dabfdff6367a2aa - data8 0x9e196e189d472420, 0x9e872a276f0b98ff - data8 0x9ef5326091a111ae, 0x9f6386f8e28ba651 - data8 0x9fd228256400dd06, 0xa041161b3d0121be - data8 0xa0b0510fb9714fc2, 0xa11fd9384a344cf7 - data8 0xa18faeca8544b6e4, 0xa1ffd1fc25cea188 - data8 0xa27043030c496819, 0xa2e102153e918f9e - data8 0xa3520f68e802bb93, 0xa3c36b345991b47c - data8 0xa43515ae09e6809e, 0xa4a70f0c95768ec5 - data8 0xa5195786be9ef339, 0xa58bef536dbeb6ee - data8 0xa5fed6a9b15138ea, 0xa6720dc0be08a20c - data8 0xa6e594cfeee86b1e, 0xa7596c0ec55ff55b - data8 0xa7cd93b4e965356a, 0xa8420bfa298f70d1 - data8 0xa8b6d5167b320e09, 0xa92bef41fa77771b - data8 0xa9a15ab4ea7c0ef8, 0xaa1717a7b5693979 - data8 0xaa8d2652ec907629, 0xab0386ef48868de1 - data8 0xab7a39b5a93ed337, 0xabf13edf162675e9 - data8 0xac6896a4be3fe929, 0xace0413ff83e5d04 - data8 0xad583eea42a14ac6, 0xadd08fdd43d01491 - data8 0xae493452ca35b80e, 0xaec22c84cc5c9465 - data8 0xaf3b78ad690a4375, 0xafb51906e75b8661 - data8 0xb02f0dcbb6e04584, 0xb0a957366fb7a3c9 - data8 0xb123f581d2ac2590, 0xb19ee8e8c94feb09 - data8 0xb21a31a66618fe3b, 0xb295cff5e47db4a4 - data8 0xb311c412a9112489, 0xb38e0e38419fae18 - data8 0xb40aaea2654b9841, 0xb487a58cf4a9c180 - data8 0xb504f333f9de6484, 0xb58297d3a8b9f0d2 - data8 0xb60093a85ed5f76c, 0xb67ee6eea3b22b8f - data8 0xb6fd91e328d17791, 0xb77c94c2c9d725e9 - data8 0xb7fbefca8ca41e7c, 0xb87ba337a1743834 - data8 0xb8fbaf4762fb9ee9, 0xb97c143756844dbf - data8 0xb9fcd2452c0b9deb, 0xba7de9aebe5fea09 - data8 0xbaff5ab2133e45fb, 0xbb81258d5b704b6f - data8 0xbc034a7ef2e9fb0d, 0xbc85c9c560e7b269 - data8 0xbd08a39f580c36bf, 0xbd8bd84bb67ed483 - data8 0xbe0f6809860993e2, 0xbe935317fc378238 - data8 0xbf1799b67a731083, 0xbf9c3c248e2486f8 - data8 0xc0213aa1f0d08db0, 0xc0a6956e8836ca8d - data8 0xc12c4cca66709456, 0xc1b260f5ca0fbb33 - data8 0xc238d2311e3d6673, 0xc2bfa0bcfad907c9 - data8 0xc346ccda24976407, 0xc3ce56c98d21b15d - data8 0xc4563ecc5334cb33, 0xc4de8523c2c07baa - data8 0xc5672a115506dadd, 0xc5f02dd6b0bbc3d9 - data8 0xc67990b5aa245f79, 0xc70352f04336c51e - data8 0xc78d74c8abb9b15d, 0xc817f681416452b2 - data8 0xc8a2d85c8ffe2c45, 0xc92e1a9d517f0ecc - data8 0xc9b9bd866e2f27a3, 0xca45c15afcc72624 - data8 0xcad2265e4290774e, 0xcb5eecd3b38597c9 - data8 0xcbec14fef2727c5d, 0xcc799f23d11510e5 - data8 0xcd078b86503dcdd2, 0xcd95da6a9ff06445 - data8 0xce248c151f8480e4, 0xceb3a0ca5dc6a55d - data8 0xcf4318cf191918c1, 0xcfd2f4683f94eeb5 - data8 0xd06333daef2b2595, 0xd0f3d76c75c5db8d - data8 0xd184df6251699ac6, 0xd2164c023056bcab - data8 0xd2a81d91f12ae45a, 0xd33a5457a3029054 - data8 0xd3ccf099859ac379, 0xd45ff29e0972c561 - data8 0xd4f35aabcfedfa1f, 0xd5872909ab75d18a - data8 0xd61b5dfe9f9bce07, 0xd6aff9d1e13ba2fe - data8 0xd744fccad69d6af4, 0xd7da67311797f56a - data8 0xd870394c6db32c84, 0xd9067364d44a929c - data8 0xd99d15c278afd7b6, 0xda3420adba4d8704 - data8 0xdacb946f2ac9cc72, 0xdb63714f8e295255 - data8 0xdbfbb797daf23755, 0xdc9467913a4f1c92 - data8 0xdd2d818508324c20, 0xddc705bcd378f7f0 - data8 0xde60f4825e0e9124, 0xdefb4e1f9d1037f2 - data8 0xdf9612deb8f04420, 0xe031430a0d99e627 - data8 0xe0ccdeec2a94e111, 0xe168e6cfd3295d23 - data8 0xe2055afffe83d369, 0xe2a23bc7d7d91226 - data8 0xe33f8972be8a5a51, 0xe3dd444c46499619 - data8 0xe47b6ca0373da88d, 0xe51a02ba8e26d681 - data8 0xe5b906e77c8348a8, 0xe658797368b3a717 - data8 0xe6f85aaaee1fce22, 0xe798aadadd5b9cbf - data8 0xe8396a503c4bdc68, 0xe8da9958464b42ab - data8 0xe97c38406c4f8c57, 0xea1e4756550eb27b - data8 0xeac0c6e7dd24392f, 0xeb63b74317369840 - data8 0xec0718b64c1cbddc, 0xecaaeb8ffb03ab41 - data8 0xed4f301ed9942b84, 0xedf3e6b1d418a491 - data8 0xee990f980da3025b, 0xef3eab20e032bc6b - data8 0xefe4b99bdcdaf5cb, 0xf08b3b58cbe8b76a - data8 0xf13230a7ad094509, 0xf1d999d8b7708cc1 - data8 0xf281773c59ffb13a, 0xf329c9233b6bae9c - data8 0xf3d28fde3a641a5b, 0xf47bcbbe6db9fddf - data8 0xf5257d152486cc2c, 0xf5cfa433e6537290 - data8 0xf67a416c733f846e, 0xf7255510c4288239 - data8 0xf7d0df730ad13bb9, 0xf87ce0e5b2094d9c - data8 0xf92959bb5dd4ba74, 0xf9d64a46eb939f35 - data8 0xfa83b2db722a033a, 0xfb3193cc4227c3f4 - data8 0xfbdfed6ce5f09c49, 0xfc8ec01121e447bb - data8 0xfd3e0c0cf486c175, 0xfdedd1b496a89f35 - data8 0xfe9e115c7b8f884c, 0xff4ecb59511ec8a5 -LOCAL_OBJECT_END(T_table) - - -LOCAL_OBJECT_START(D_table) - data4 0x00000000, 0x9f55c08f, 0x1e93ffa3, 0x1dcd43a8 - data4 0x1f751f79, 0x9f3cdd88, 0x9f43d155, 0x1eda222c - data4 0x1ef35513, 0x9f597895, 0x9e698881, 0x1ec71073 - data4 0x1e50e371, 0x9dc01e19, 0x1de74133, 0x1e2f028c - data4 0x9edefb47, 0x1ebbac48, 0x9e8b0330, 0x9e9e9314 - data4 0x1edc1d11, 0x1f098529, 0x9f52827c, 0x1f50050d - data4 0x1f301e8e, 0x1f5b64d1, 0x9f45e3ee, 0x9ef64d6d - data4 0x1d6ec5e8, 0x9e61ad9a, 0x1d44ccbb, 0x9e4a8bbb - data4 0x9cf11576, 0x9dcce7e7, 0x9d02ac90, 0x1f26ccf0 - data4 0x9f0877c6, 0x9ddd62ae, 0x9f4b7fc3, 0x1ea8ef6b - data4 0x1ea4378d, 0x1ef6fc38, 0x1db99fd9, 0x1f22bf6f - data4 0x1f53e172, 0x1e85504a, 0x9f37cc75, 0x1f0c5e17 - data4 0x1dde8aac, 0x9cb42bb2, 0x1e153cd7, 0x1eb62bba - data4 0x9e9b941b, 0x9ea80e3c, 0x1f508823, 0x1ec3fd36 - data4 0x1e9ffaa1, 0x1e21e2eb, 0x9d948b1d, 0x9e8ac93a - data4 0x1ef7ee6f, 0x9e80dda3, 0x1f0814be, 0x1dc5ddfe - data4 0x1eedb9d1, 0x9f2aaa26, 0x9ea5b0fc, 0x1edf702e - data4 0x9e391201, 0x1f1316bb, 0x1ea27fb7, 0x9e05ed18 - data4 0x9f199ed2, 0x1ee7fd7c, 0x1f003db6, 0x9eac3793 - data4 0x9e5b8c10, 0x9f3af17c, 0x1bc9a8be, 0x1ee3c004 - data4 0x9f19b1b2, 0x9f242ce9, 0x9ce67dd1, 0x9e4f6275 - data4 0x1e20742c, 0x1eb9328a, 0x9f477153, 0x1d969718 - data4 0x9f1e6c43, 0x1f2f67f4, 0x9f39c7e4, 0x9e3c4feb - data4 0x1da3956b, 0x9e7c685d, 0x1f280911, 0x9f0d8afb - data4 0x1e314b40, 0x9eb4f250, 0x9f1a34ad, 0x1ef5d5e7 - data4 0x9f145496, 0x1e604827, 0x9f1e5195, 0x1e9c1fc0 - data4 0x1efde521, 0x1e69b385, 0x1f316830, 0x9f244eae - data4 0x1f1787ec, 0x9e939971, 0x1f0bb393, 0x9f0511d6 - data4 0x1ed919de, 0x1d8b7b28, 0x1e5ca4a9, 0x1e7c357b - data4 0x9e3ff8e8, 0x1eef53b5, 0x9ed22ed7, 0x1f16659b - data4 0x9f2db102, 0x9e2c6a78, 0x1f328d7d, 0x9f2fec3c - data4 0x1eb395bd, 0x9f242b84, 0x9e2683e6, 0x1ed71e68 - data4 0x1efd1df5, 0x9e9eeafd, 0x9ed2249c, 0x1eef129a - data4 0x1d1ea44c, 0x9e81f7ff, 0x1eaf77c9, 0x9ee7a285 - data4 0x1e1864ed, 0x9ee7edbb, 0x9e15a27d, 0x9ae61655 - data4 0x1f1ff1a2, 0x1da29755, 0x9e5f46fb, 0x1e901236 - data4 0x9eecfb9b, 0x9f204d2f, 0x1ec64685, 0x9eb809bd - data4 0x9e0026c5, 0x1d9f1da1, 0x1f142b49, 0x9f20f22e - data4 0x1f24b067, 0x1f185a4c, 0x9f09765c, 0x9ece902f - data4 0x1e2ca5db, 0x1e6de464, 0x9f071f67, 0x1f1518c3 - data4 0x1ea13ded, 0x1f0b8414, 0x1edb6ad4, 0x9e548740 - data4 0x9ea10efb, 0x1ee48a60, 0x1e7954c5, 0x9edad013 - data4 0x9f21517d, 0x9e9b6e0c, 0x9ee7f9a6, 0x9ebd4298 - data4 0x9d65b24e, 0x1eed751f, 0x9f1573ea, 0x9d430377 - data4 0x9e13fc0c, 0x1e47008a, 0x1e3d5c1d, 0x1ef41a91 - data4 0x9e4a4ef7, 0x9e952f18, 0x1d620566, 0x1d9b8d33 - data4 0x1db06247, 0x1e94b31e, 0x1f0730ad, 0x9d79ffb4 - data4 0x1ed64d51, 0x9e91fd11, 0x9e28d35a, 0x9dea0ed9 - data4 0x1e891def, 0x9ee28ac0, 0x1e1db99b, 0x9ee1ce38 - data4 0x9bdd9bca, 0x1eb72cb9, 0x9e8c53c6, 0x1e0df6ca - data4 0x1e8f2ccd, 0x9e9b0886, 0x1eeb3bc7, 0x1ec7e772 - data4 0x9e210776, 0x9daf246c, 0x1ea1f151, 0x1ece4dc6 - data4 0x1ce741c8, 0x1ed3c88f, 0x9ec9a4fd, 0x9e0c8d30 - data4 0x1d2fbb26, 0x9ef212a7, 0x1ee44f1c, 0x9e445550 - data4 0x1e075f77, 0x9d9291a3, 0x1f09c2ee, 0x9e012c88 - data4 0x1f057d62, 0x9e7bb0dc, 0x9d8758ee, 0x1ee8d6c1 - data4 0x9e509a57, 0x9e4ca7b7, 0x1e2cb341, 0x9ec35106 - data4 0x1ecf3baf, 0x1e11781c, 0x1ea0cc78, 0x1eb75ca6 - data4 0x1e961e1a, 0x1eb88853, 0x1e7abf50, 0x1ee38704 - data4 0x9dc5ab0f, 0x1afe197b, 0x9ec07523, 0x9d9b7f78 - data4 0x1f011618, 0x1ed43b0b, 0x9f035945, 0x9e3fd014 - data4 0x9bbda5cd, 0x9e83f8ab, 0x1e58a928, 0x1e392d61 - data4 0x1efdbb52, 0x1ee310a8, 0x9ec7ecc1, 0x1e8c9ed6 - data4 0x9ef82dee, 0x9e70545b, 0x9ea53fc4, 0x1e40f419 -LOCAL_OBJECT_END(D_table) - - - -.section .text -GLOBAL_IEEE754_ENTRY(exp10l) - -{.mfi - alloc GR_SREG = ar.pfs, 1, 4, 4, 0 - // will continue only for normal/denormal numbers - fclass.nm.unc p12, p7 = f8, 0x1b - // GR_ADDR0 = pointer to log2(10), C_1...C_6 followed by T_table - addl GR_ADDR0 = @ltoff(poly_coeffs), gp ;; -} - -{.mfi - // load start address for C_1...C_6 followed by T_table - ld8 GR_ADDR0 = [ GR_ADDR0 ] - // X<0 ? - fcmp.lt.s1 p6, p8 = f8, f0 - // GR_BM8 = bias-8 - mov GR_BM8 = 0xffff-8 -} -{.mlx - nop.m 0 - // GR_EMIN = (-2^14-62)*2^{8} - movl GR_EMIN = 0xca807c00 ;; -} - -{.mmb - // FR_CONST1 = 2^{-8} - setf.exp FR_CONST1 = GR_BM8 - // load log2(10)*2^8 - ldfe FR_LOG10 = [ GR_ADDR0 ], 16 - (p12) br.cond.spnt SPECIAL_EXP10 ;; -} - -{.mmf - setf.s FR_UF_TEST = GR_EMIN - // load overflow threshold - ldfe FR_OF_TEST = [ GR_ADDR0 ], 16 - // normalize x - fma.s0 f8 = f8, f1, f0 ;; -} - -{.mmi - // load C_1 - ldfe FR_COEFF1 = [ GR_ADDR0 ], 16 ;; - // load C_2 - ldfe FR_COEFF2 = [ GR_ADDR0 ], 16 - nop.i 0 ;; -} - -{.mmf - // GR_D_ADDR = pointer to D table - add GR_D_ADDR = 2048-64+96+32, GR_ADDR0 - // load C_3, C_4 - ldfpd FR_COEFF3, FR_COEFF4 = [ GR_ADDR0 ], 16 - // y = x*log2(10)*2^8 - fma.s1 FR_XL10 = f8, FR_LOG10, f0 ;; -} - -{.mfi - // load C_5, C_6 - ldfpd FR_COEFF5, FR_COEFF6 = [ GR_ADDR0 ], 16 - // get int(x) - fcvt.fx.trunc.s1 FR_XINT = f8 - nop.i 0 -} -{.mfi - nop.m 0 - // FR_LOG10 = log2(10) - fma.s1 FR_L10 = FR_LOG10, FR_CONST1, f0 - nop.i 0 ;; -} - -{.mfi - // load log2(10)_low - ldfe FR_L10_LOW = [ GR_ADDR0 ], 16 - // y0 = x*log2(10) = x*log2(10)_hi - fma.s1 FR_LOG10 = f8, FR_L10, f0 - mov GR_EMIN = 0xffff-63 -} -{.mfi - mov GR_32_BIAS = 0xffff + 5 - // (K+f)*2^8 = round_to_int(y) - fcvt.fx.s1 FR_KF0 = FR_XL10 - mov GR_4_BIAS = 0xffff + 2;; -} - -{.mfi - // load smallest normal limit - ldfe FR_SNORM_LIMIT = [ GR_ADDR0 ], 16 - // x>overflow threshold ? - fcmp.gt.s1 p12, p7 = f8, FR_OF_TEST - nop.i 0 ;; -} - -{.mfi - setf.exp FR_32 = GR_32_BIAS - // x= smallest normal limit - fcmp.ge.s1 p11, p0 = f8, FR_SNORM_LIMIT - nop.i 0 ;; -} - -{.mfi - nop.m 0 - // P36 = P34+r2*P56 - fma.s1 FR_COEFF4 = FR_COEFF5, FR_COEFF3, FR_COEFF4 - nop.i 0 -} -{.mfi - nop.m 0 - // GR_D_ADDR = r'*r2 - fma.s1 FR_COEFF3 = FR_COEFF3, FR_KF0, f0 - nop.i 0 ;; -} - -{.mfi - nop.m 0 - // is input below 28.0 ? - (p13) fcmp.lt.s1 p13, p14 = f8, FR_28 - nop.i 0 -} -{.mfi - nop.m 0 - // P' = P12*r'+D' - fma.s1 FR_COEFF2 = FR_COEFF2, FR_KF0, FR_OF_TEST - nop.i 0 ;; -} - -{.mfi - nop.m 0 - // P = P'+r3*P36 - fma.s1 FR_COEFF3 = FR_COEFF3, FR_COEFF4, FR_COEFF2 - nop.i 0 -} -{.mfi - nop.m 0 - // T = 2^{K-63}*T - fma.s1 FR_UF_TEST = FR_UF_TEST, FR_XL10, f0 - nop.i 0 ;; -} - -.pred.rel "mutex",p13,p14 -{.mfi - nop.m 0 - (p13) fma.s1 f8 = FR_COEFF3, FR_UF_TEST, FR_UF_TEST - nop.i 0 -} -{.mfb - nop.m 0 - // result = T+T*P - (p14) fma.s0 f8 = FR_COEFF3, FR_UF_TEST, FR_UF_TEST - // return - (p11) br.ret.sptk b0 ;; // return, if result normal -} - -// Here if result in denormal range (and not zero) -{.mib - nop.m 0 - mov GR_Parameter_TAG= 264 - br.cond.sptk __libm_error_region // Branch to error handling -} -;; - -SPECIAL_EXP10: - -{.mfi - nop.m 0 - // x = -Infinity ? - fclass.m p6, p0 = f8, 0x22 - nop.i 0 ;; -} - -{.mfi - nop.m 0 - // x = +Infinity ? - fclass.m p7, p0 = f8, 0x21 - nop.i 0 ;; -} - -{.mfi - nop.m 0 - // x = +/-Zero ? - fclass.m p8, p0 = f8, 0x7 - nop.i 0 -} -{.mfb - nop.m 0 - // exp10(-Infinity) = 0 - (p6) mov f8 = f0 - (p6) br.ret.spnt b0 ;; -} - -{.mfb - nop.m 0 - // exp10(+Infinity) = +Infinity - nop.f 0 - (p7) br.ret.spnt b0 ;; -} - -{.mfb - nop.m 0 - // exp10(+/-0) = 1 - (p8) mov f8 = f1 - (p8) br.ret.spnt b0 ;; -} - -{.mfb - nop.m 0 - // Remaining cases: NaNs - fma.s0 f8 = f8, f1, f0 - br.ret.sptk b0 ;; -} - - -OUT_RANGE_EXP10: - -// underflow: p6 = 1 -// overflow: p8 = 1 - -.pred.rel "mutex",p6,p8 -{.mmi - (p8) mov GR_CONST1 = 0x1fffe - (p6) mov GR_CONST1 = 1 - nop.i 0 -} -;; - -{.mii - setf.exp FR_KF0 = GR_CONST1 - (p8) mov GR_Parameter_TAG = 165 - (p6) mov GR_Parameter_TAG = 264 -} -;; - -{.mfb - nop.m 999 - fma.s0 f8 = FR_KF0, FR_KF0, f0 // Create overflow/underflow - br.cond.sptk __libm_error_region // Branch to error handling -} -;; - -GLOBAL_IEEE754_END(exp10l) -weak_alias (exp10l, pow10l) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{.mfi - add GR_Parameter_Y = -32, sp // Parameter 2 value - nop.f 0 -.save ar.pfs, GR_SAVE_PFS - mov GR_SAVE_PFS = ar.pfs // Save ar.pfs -} - -{.mfi -.fframe 64 - add sp = -64, sp // Create new stack - nop.f 0 - mov GR_SAVE_GP = gp ;; // Save gp -} - -{.mmi - stfe [ GR_Parameter_Y ] = FR_Y, 16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16, sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0 = b0 ;; // Save b0 -} - -.body -{.mib - stfe [ GR_Parameter_X ] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0, GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{.mib - stfe [ GR_Parameter_Y ] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16, GR_Parameter_Y - br.call.sptk b0 = __libm_error_support# ;; // Call error handling function -} - -{.mmi - add GR_Parameter_RESULT = 48, sp - nop.m 0 - nop.i 0 ;; -} - -{.mmi - ldfe f8 = [ GR_Parameter_RESULT ] // Get return result off stack -.restore sp - add sp = 64, sp // Restore stack pointer - mov b0 = GR_SAVE_B0 ;; // Restore return address -} - -{.mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 ;; // Return -} - - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#, @function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_exp2.S b/sysdeps/ia64/fpu/e_exp2.S deleted file mode 100644 index 54f652e384..0000000000 --- a/sysdeps/ia64/fpu/e_exp2.S +++ /dev/null @@ -1,564 +0,0 @@ -.file "exp2.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 08/25/00 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 09/05/02 Improved performance -// 01/17/03 Fixed to call error support when x=1024.0 -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// double exp2(double) -// -// Overview of operation -//============================================================== -// Background -// -// Implementation -// -// Let x= (K + fh + fl + r), where -// K is an integer, fh= 0.b1 b2 b3 b4 b5, -// fl= 2^{-5}* 0.b6 b7 b8 b8 b10 (fh, fl >= 0), -// and |r|<2^{-11} -// Th is a table that stores 2^fh (32 entries) rounded to -// double extended precision (only mantissa is stored) -// Tl is a table that stores 2^fl (32 entries) rounded to -// double extended precision (only mantissa is stored) -// -// 2^x is approximated as -// 2^K * Th [ f ] * Tl [ f ] * (1+c1*r+c2*r^2+c3*r^3+c4*r^4) - -// Note: We use the following trick to speed up conversion from FP to integer: -// -// Let x = K + r, where K is an integer, and |r| <= 0.5 -// Let N be the number of significand bits for the FP format used -// ( N=64 for double-extended, N=53 for double) -// -// Then let y = 1.5 * 2^(N-1) + x for RN mode -// K = y - 1.5 * 2^(N-1) -// r = x - K -// -// If we want to obtain the integer part and the first m fractional bits of x, -// we can use the same trick, but with a constant of 1.5 * 2^(N-1-m): -// -// Let x = K + f + r -// f = 0.b_1 b_2 ... b_m -// |r| <= 2^(-m-1) -// -// Then let y = 1.5 * 2^(N-1-m) + x for RN mode -// (K+f) = y - 1.5 * 2^(N-1-m) -// r = x - K - - -// Special values -//============================================================== -// exp2(0)= 1 -// exp2(+inf)= inf -// exp2(-inf)= 0 -// - -// Registers used -//============================================================== -// r2-r3, r14-r40 -// f6-f15, f32-f45 -// p6-p8, p12 -// - - -GR_TBL_START = r2 -GR_LOG_TBL = r3 - -GR_OF_LIMIT = r14 -GR_UF_LIMIT = r15 -GR_EXP_CORR = r16 -GR_F_low = r17 -GR_F_high = r18 -GR_K = r19 -GR_Flow_ADDR = r20 - -GR_BIAS = r21 -GR_Fh = r22 -GR_Fh_ADDR = r23 -GR_EXPMAX = r24 -GR_EMIN = r25 - -GR_ROUNDVAL = r26 -GR_MASK = r27 -GR_KF0 = r28 -GR_MASK_low = r29 -GR_COEFF_START = r30 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - - -FR_COEFF1 = f6 -FR_COEFF2 = f7 -FR_R = f9 - -FR_KF0 = f12 -FR_COEFF3 = f13 -FR_COEFF4 = f14 -FR_UF_LIMIT = f15 - -FR_OF_LIMIT = f32 -FR_EXPMIN = f33 -FR_ROUNDVAL = f34 -FR_KF = f35 - -FR_2_TO_K = f36 -FR_T_low = f37 -FR_T_high = f38 -FR_P34 = f39 -FR_R2 = f40 - -FR_P12 = f41 -FR_T_low_K = f42 -FR_P14 = f43 -FR_T = f44 -FR_P = f45 - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(poly_coeffs) - -data8 0x3fac6b08d704a0c0, 0x3f83b2ab6fba4e77 // C_3 and C_4 -data8 0xb17217f7d1cf79ab, 0x00003ffe // C_1 -data8 0xf5fdeffc162c7541, 0x00003ffc // C_2 -LOCAL_OBJECT_END(poly_coeffs) - - -LOCAL_OBJECT_START(T_table) - -// 2^{0.00000 b6 b7 b8 b9 b10} -data8 0x8000000000000000, 0x8016302f17467628 -data8 0x802c6436d0e04f50, 0x80429c17d77c18ed -data8 0x8058d7d2d5e5f6b0, 0x806f17687707a7af -data8 0x80855ad965e88b83, 0x809ba2264dada76a -data8 0x80b1ed4fd999ab6c, 0x80c83c56b50cf77f -data8 0x80de8f3b8b85a0af, 0x80f4e5ff089f763e -data8 0x810b40a1d81406d4, 0x81219f24a5baa59d -data8 0x813801881d886f7b, 0x814e67cceb90502c -data8 0x8164d1f3bc030773, 0x817b3ffd3b2f2e47 -data8 0x8191b1ea15813bfd, 0x81a827baf7838b78 -data8 0x81bea1708dde6055, 0x81d51f0b8557ec1c -data8 0x81eba08c8ad4536f, 0x820225f44b55b33b -data8 0x8218af4373fc25eb, 0x822f3c7ab205c89a -data8 0x8245cd9ab2cec048, 0x825c62a423d13f0c -data8 0x8272fb97b2a5894c, 0x828998760d01faf3 -data8 0x82a0393fe0bb0ca8, 0x82b6ddf5dbc35906 -// -// 2^{0.b1 b2 b3 b4 b5} -data8 0x8000000000000000, 0x82cd8698ac2ba1d7 -data8 0x85aac367cc487b14, 0x88980e8092da8527 -data8 0x8b95c1e3ea8bd6e6, 0x8ea4398b45cd53c0 -data8 0x91c3d373ab11c336, 0x94f4efa8fef70961 -data8 0x9837f0518db8a96f, 0x9b8d39b9d54e5538 -data8 0x9ef5326091a111ad, 0xa27043030c496818 -data8 0xa5fed6a9b15138ea, 0xa9a15ab4ea7c0ef8 -data8 0xad583eea42a14ac6, 0xb123f581d2ac258f -data8 0xb504f333f9de6484, 0xb8fbaf4762fb9ee9 -data8 0xbd08a39f580c36be, 0xc12c4cca66709456 -data8 0xc5672a115506dadd, 0xc9b9bd866e2f27a2 -data8 0xce248c151f8480e3, 0xd2a81d91f12ae45a -data8 0xd744fccad69d6af4, 0xdbfbb797daf23755 -data8 0xe0ccdeec2a94e111, 0xe5b906e77c8348a8 -data8 0xeac0c6e7dd24392e, 0xefe4b99bdcdaf5cb -data8 0xf5257d152486cc2c, 0xfa83b2db722a033a -LOCAL_OBJECT_END(T_table) - - - -.section .text -GLOBAL_LIBM_ENTRY(exp2) - - -{.mfi - alloc r32= ar.pfs, 1, 4, 4, 0 - // will continue only for non-zero normal/denormal numbers - fclass.nm p12, p0= f8, 0x1b - // GR_TBL_START= pointer to C_1...C_4 followed by T_table - addl GR_TBL_START= @ltoff(poly_coeffs), gp -} -{.mlx - mov GR_OF_LIMIT= 0xffff + 10 // Exponent of overflow limit - movl GR_ROUNDVAL= 0x5a400000 // 1.5*2^(63-10) (SP) -} -;; - -// Form special constant 1.5*2^(63-10) to give integer part and first 10 -// fractional bits of x -{.mfi - setf.s FR_ROUNDVAL= GR_ROUNDVAL // Form special constant - fcmp.lt.s1 p6, p8= f8, f0 // X<0 ? - nop.i 0 -} -{.mfb - ld8 GR_COEFF_START= [ GR_TBL_START ] // Load pointer to coeff table - nop.f 0 - (p12) br.cond.spnt SPECIAL_exp2 // Branch if nan, inf, zero -} -;; - -{.mlx - setf.exp FR_OF_LIMIT= GR_OF_LIMIT // Set overflow limit - movl GR_UF_LIMIT= 0xc4866000 // (-2^10-51) = -1075 -} -;; - -{.mfi - ldfpd FR_COEFF3, FR_COEFF4= [ GR_COEFF_START ], 16 // load C_3, C_4 - fma.s0 f8= f8, f1, f0 // normalize x - nop.i 0 -} -;; - -{.mmi - setf.s FR_UF_LIMIT= GR_UF_LIMIT // Set underflow limit - ldfe FR_COEFF1= [ GR_COEFF_START ], 16 // load C_1 - mov GR_EXP_CORR= 0xffff-126 -} -;; - -{.mfi - ldfe FR_COEFF2= [ GR_COEFF_START ], 16 // load C_2 - fma.s1 FR_KF0= f8, f1, FR_ROUNDVAL // y= x + 1.5*2^(63-10) - nop.i 0 -} -;; - -{.mfi - mov GR_MASK= 1023 - fms.s1 FR_KF= FR_KF0, f1, FR_ROUNDVAL // (K+f) - mov GR_MASK_low= 31 -} -;; - -{.mfi - getf.sig GR_KF0= FR_KF0 // (K+f)*2^10= round_to_int(y) - fcmp.ge.s1 p12, p7= f8, FR_OF_LIMIT // x >= overflow threshold ? - add GR_LOG_TBL= 256, GR_COEFF_START // Pointer to high T_table -} -;; - -{.mmi - and GR_F_low= GR_KF0, GR_MASK_low // f_low - and GR_F_high= GR_MASK, GR_KF0 // f_high*32 - shr GR_K= GR_KF0, 10 // K -} -;; - -{.mmi - shladd GR_Flow_ADDR= GR_F_low, 3, GR_COEFF_START // address of 2^{f_low} - add GR_BIAS= GR_K, GR_EXP_CORR // K= bias-2*63 - shr GR_Fh= GR_F_high, 5 // f_high -} -;; - -{.mfi - setf.exp FR_2_TO_K= GR_BIAS // 2^{K-126} - fnma.s1 FR_R= FR_KF, f1, f8 // r= x - (K+f) - shladd GR_Fh_ADDR= GR_Fh, 3, GR_LOG_TBL // address of 2^{f_high} -} -{.mlx - ldf8 FR_T_low= [ GR_Flow_ADDR ] // load T_low= 2^{f_low} - movl GR_EMIN= 0xc47f8000 // EMIN= -1022 -} -;; - -{.mfi - ldf8 FR_T_high= [ GR_Fh_ADDR ] // load T_high= 2^{f_high} - (p7) fcmp.lt.s1 p12, p7= f8, FR_UF_LIMIT // x= 0), -// and |r|<2^{-11} -// Th is a table that stores 2^fh (32 entries) rounded to -// double extended precision (only mantissa is stored) -// Tl is a table that stores 2^fl (32 entries) rounded to -// double extended precision (only mantissa is stored) -// -// 2^x is approximated as -// 2^K * Th [ f ] * Tl [ f ] * (1+c1*r+c2*r^2) - -// Note: We use the following trick to speed up conversion from FP to integer: -// -// Let x = K + r, where K is an integer, and |r| <= 0.5 -// Let N be the number of significand bits for the FP format used -// ( N=64 for double-extended, N=53 for double) -// -// Then let y = 1.5 * 2^(N-1) + x for RN mode -// K = y - 1.5 * 2^(N-1) -// r = x - K -// -// If we want to obtain the integer part and the first m fractional bits of x, -// we can use the same trick, but with a constant of 1.5 * 2^(N-1-m): -// -// Let x = K + f + r -// f = 0.b_1 b_2 ... b_m -// |r| <= 2^(-m-1) -// -// Then let y = 1.5 * 2^(N-1-m) + x for RN mode -// (K+f) = y - 1.5 * 2^(N-1-m) -// r = x - K - - -// Special values -//============================================================== -// exp2(0)= 1 -// exp2(+inf)= inf -// exp2(-inf)= 0 -// - -// Registers used -//============================================================== -// r2-r3, r14-r40 -// f6-f15, f32-f45 -// p6-p8, p12 -// - - -GR_TBL_START = r2 -GR_LOG_TBL = r3 - -GR_OF_LIMIT = r14 -GR_UF_LIMIT = r15 -GR_EXP_CORR = r16 -GR_F_low = r17 -GR_F_high = r18 -GR_K = r19 -GR_Flow_ADDR = r20 - -GR_BIAS = r21 -GR_Fh = r22 -GR_Fh_ADDR = r23 -GR_EXPMAX = r24 -GR_EMIN = r25 - -GR_ROUNDVAL = r26 -GR_MASK = r27 -GR_KF0 = r28 -GR_MASK_low = r29 -GR_COEFF_START = r30 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - - -FR_COEFF1 = f6 -FR_COEFF2 = f7 -FR_R = f9 - -FR_KF0 = f12 -FR_UF_LIMIT = f15 - -FR_OF_LIMIT = f32 -FR_EXPMIN = f33 -FR_ROUNDVAL = f34 -FR_KF = f35 - -FR_2_TO_K = f36 -FR_T_low = f37 -FR_T_high = f38 - -FR_P12 = f41 -FR_T_low_K = f42 -FR_T = f44 -FR_P = f45 - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(poly_coeffs) - -data8 0xb17217f7d1cf79ab, 0x00003ffe // C_1 -data8 0xf5fdeffc162c7541, 0x00003ffc // C_2 -LOCAL_OBJECT_END(poly_coeffs) - - -LOCAL_OBJECT_START(T_table) - -// 2^{0.00000 b6 b7 b8 b9 b10} -data8 0x8000000000000000, 0x8016302f17467628 -data8 0x802c6436d0e04f50, 0x80429c17d77c18ed -data8 0x8058d7d2d5e5f6b0, 0x806f17687707a7af -data8 0x80855ad965e88b83, 0x809ba2264dada76a -data8 0x80b1ed4fd999ab6c, 0x80c83c56b50cf77f -data8 0x80de8f3b8b85a0af, 0x80f4e5ff089f763e -data8 0x810b40a1d81406d4, 0x81219f24a5baa59d -data8 0x813801881d886f7b, 0x814e67cceb90502c -data8 0x8164d1f3bc030773, 0x817b3ffd3b2f2e47 -data8 0x8191b1ea15813bfd, 0x81a827baf7838b78 -data8 0x81bea1708dde6055, 0x81d51f0b8557ec1c -data8 0x81eba08c8ad4536f, 0x820225f44b55b33b -data8 0x8218af4373fc25eb, 0x822f3c7ab205c89a -data8 0x8245cd9ab2cec048, 0x825c62a423d13f0c -data8 0x8272fb97b2a5894c, 0x828998760d01faf3 -data8 0x82a0393fe0bb0ca8, 0x82b6ddf5dbc35906 -// -// 2^{0.b1 b2 b3 b4 b5} -data8 0x8000000000000000, 0x82cd8698ac2ba1d7 -data8 0x85aac367cc487b14, 0x88980e8092da8527 -data8 0x8b95c1e3ea8bd6e6, 0x8ea4398b45cd53c0 -data8 0x91c3d373ab11c336, 0x94f4efa8fef70961 -data8 0x9837f0518db8a96f, 0x9b8d39b9d54e5538 -data8 0x9ef5326091a111ad, 0xa27043030c496818 -data8 0xa5fed6a9b15138ea, 0xa9a15ab4ea7c0ef8 -data8 0xad583eea42a14ac6, 0xb123f581d2ac258f -data8 0xb504f333f9de6484, 0xb8fbaf4762fb9ee9 -data8 0xbd08a39f580c36be, 0xc12c4cca66709456 -data8 0xc5672a115506dadd, 0xc9b9bd866e2f27a2 -data8 0xce248c151f8480e3, 0xd2a81d91f12ae45a -data8 0xd744fccad69d6af4, 0xdbfbb797daf23755 -data8 0xe0ccdeec2a94e111, 0xe5b906e77c8348a8 -data8 0xeac0c6e7dd24392e, 0xefe4b99bdcdaf5cb -data8 0xf5257d152486cc2c, 0xfa83b2db722a033a -LOCAL_OBJECT_END(T_table) - - - -.section .text -GLOBAL_LIBM_ENTRY(exp2f) - - -{.mfi - alloc r32= ar.pfs, 1, 4, 4, 0 - // will continue only for non-zero normal/denormal numbers - fclass.nm p12, p0= f8, 0x1b - // GR_TBL_START= pointer to C_1...C_2 followed by T_table - addl GR_TBL_START= @ltoff(poly_coeffs), gp -} -{.mlx - mov GR_OF_LIMIT= 0xffff + 7 // Exponent of overflow limit - movl GR_ROUNDVAL= 0x5a400000 // 1.5*2^(63-10) (SP) -} -;; - -// Form special constant 1.5*2^(63-10) to give integer part and first 10 -// fractional bits of x -{.mfi - setf.s FR_ROUNDVAL= GR_ROUNDVAL // Form special constant - fcmp.lt.s1 p6, p8= f8, f0 // X<0 ? - nop.i 0 -} -{.mfb - ld8 GR_COEFF_START= [ GR_TBL_START ] // Load pointer to coeff table - nop.f 0 - (p12) br.cond.spnt SPECIAL_exp2 // Branch if nan, inf, zero -} -;; - -{.mlx - setf.exp FR_OF_LIMIT= GR_OF_LIMIT // Set overflow limit - movl GR_UF_LIMIT= 0xc3160000 // (-2^7-22) = -150 -} -;; - -{.mfi - ldfe FR_COEFF1= [ GR_COEFF_START ], 16 // load C_1 - fma.s0 f8= f8, f1, f0 // normalize x - nop.i 0 -} -;; - -{.mmi - ldfe FR_COEFF2= [ GR_COEFF_START ], 16 // load C_2 - setf.s FR_UF_LIMIT= GR_UF_LIMIT // Set underflow limit - mov GR_EXP_CORR= 0xffff-126 -} -;; - -{.mfi - nop.m 0 - fma.s1 FR_KF0= f8, f1, FR_ROUNDVAL // y= x + 1.5*2^(63-10) - nop.i 0 -} -;; - -{.mfi - mov GR_MASK= 1023 - fms.s1 FR_KF= FR_KF0, f1, FR_ROUNDVAL // (K+f) - mov GR_MASK_low= 31 -} -;; - -{.mfi - getf.sig GR_KF0= FR_KF0 // (K+f)*2^10= round_to_int(y) - fcmp.ge.s1 p12, p7= f8, FR_OF_LIMIT // x >= overflow threshold ? - add GR_LOG_TBL= 256, GR_COEFF_START // Pointer to high T_table -} -;; - -{.mmi - and GR_F_low= GR_KF0, GR_MASK_low // f_low - and GR_F_high= GR_MASK, GR_KF0 // f_high*32 - shr GR_K= GR_KF0, 10 // K -} -;; - -{.mmi - shladd GR_Flow_ADDR= GR_F_low, 3, GR_COEFF_START // address of 2^{f_low} - add GR_BIAS= GR_K, GR_EXP_CORR // K= bias-2*63 - shr GR_Fh= GR_F_high, 5 // f_high -} -;; - -{.mfi - setf.exp FR_2_TO_K= GR_BIAS // 2^{K-126} - fnma.s1 FR_R= FR_KF, f1, f8 // r= x - (K+f) - shladd GR_Fh_ADDR= GR_Fh, 3, GR_LOG_TBL // address of 2^{f_high} -} -{.mlx - ldf8 FR_T_low= [ GR_Flow_ADDR ] // load T_low= 2^{f_low} - movl GR_EMIN= 0xc2fc0000 // EMIN= -126 -} -;; - -{.mfi - ldf8 FR_T_high= [ GR_Fh_ADDR ] // load T_high= 2^{f_high} - (p7) fcmp.lt.s1 p12, p7= f8, FR_UF_LIMIT // x= 0), -// and |r|<2^{-8} -// T is a table that stores 2^f (256 entries) rounded to -// double extended precision (only mantissa is stored) -// D stores (2^f/T [ f ] - 1), rounded to single precision -// -// 2^x is approximated as -// 2^K * T [ f ] * (1+D [ f ] +c1*r+c2*r^2+...+c6*r^6) -// - - - -// Special values -//============================================================== -// exp2(0)= 1 -// exp2(+inf)= inf -// exp2(-inf)= 0 -// - - -// Registers used -//============================================================== -// f6-f15, f32-f46 -// r2-r3, r8-r11, r14-r40 -// p6, p7, p8, p12 - - FR_X = f10 - FR_Y = f1 - FR_RESULT = f8 - - FR_KF0 = f6 - FR_EXP63 = f7 - FR_T = f9 - FR_COEFF3 = f10 - FR_COEFF4 = f11 - FR_COEFF5 = f12 - FR_COEFF6 = f13 - FR_COEFF1 = f14 - FR_COEFF2 = f15 - FR_2P14 = f32 - FR_UF_TEST = f33 - FR_D = f34 - FR_R = f35 - FR_2EXP = f36 - FR_EMIN = f37 - FR_P34 = f38 - FR_P56 = f39 - FR_R2 = f40 - FR_P12 = f41 - FR_TS = f42 - FR_P36 = f43 - FR_P02 = f44 - FR_R3 = f45 - FR_P06 = f46 - - - GR_ADDR0 = r2 - GR_ADDR = r2 - GR_D_ADDR0 = r3 - GR_D_ADDR = r3 - GR_LEADBITS = r8 - GR_256 = r9 - GR_EM63 = r10 - GR_255 = r11 - GR_EXPON = r14 - GR_BM63 = r15 - GR_UF_TEST = r16 - GR_INDEX = r17 - GR_K = r18 - GR_KF = r19 - GR_2P14 = r19 - GR_EMIN = r20 - GR_IT = r21 - GR_ID = r22 - GR_63 = r23 - GR_CONST1 = r24 - GR_EBIAS = r25 - GR_CONST2 = r26 - GR_CONST3 = r27 - GR_SIGNIF = r28 - GR_ARGEXP = r29 - GR_SGN = r30 - GR_EMIN1 = r31 - GR_SREG = r32 - - GR_SAVE_B0 = r33 - GR_SAVE_PFS = r34 - GR_SAVE_GP = r35 - GR_SAVE_SP = r36 - - GR_Parameter_X = r37 - GR_Parameter_Y = r38 - GR_Parameter_RESULT= r39 - GR_Parameter_TAG = r40 - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(poly_coeffs) - - data8 0x3fac6b08d704a0c0 // C_3 - data8 0x3f83b2ab6fba4e77 // C_4 - data8 0x3f55d87fe78a6731 // C_5 - data8 0x3f2430912f86c787 // C_6 - data8 0xb17217f7d1cf79ab, 0x00003ffe // C_1 - data8 0xf5fdeffc162c7541, 0x00003ffc // C_2 -LOCAL_OBJECT_END(poly_coeffs) - - -LOCAL_OBJECT_START(T_table) - - data8 0x8000000000000000, 0x8058d7d2d5e5f6b1 - data8 0x80b1ed4fd999ab6c, 0x810b40a1d81406d4 - data8 0x8164d1f3bc030773, 0x81bea1708dde6056 - data8 0x8218af4373fc25ec, 0x8272fb97b2a5894c - data8 0x82cd8698ac2ba1d7, 0x83285071e0fc4547 - data8 0x8383594eefb6ee37, 0x83dea15b9541b132 - data8 0x843a28c3acde4046, 0x8495efb3303efd30 - data8 0x84f1f656379c1a29, 0x854e3cd8f9c8c95d - data8 0x85aac367cc487b15, 0x86078a2f23642a9f - data8 0x8664915b923fba04, 0x86c1d919caef5c88 - data8 0x871f61969e8d1010, 0x877d2afefd4e256c - data8 0x87db357ff698d792, 0x88398146b919f1d4 - data8 0x88980e8092da8527, 0x88f6dd5af155ac6b - data8 0x8955ee03618e5fdd, 0x89b540a7902557a4 - data8 0x8a14d575496efd9a, 0x8a74ac9a79896e47 - data8 0x8ad4c6452c728924, 0x8b3522a38e1e1032 - data8 0x8b95c1e3ea8bd6e7, 0x8bf6a434adde0085 - data8 0x8c57c9c4646f4dde, 0x8cb932c1bae97a95 - data8 0x8d1adf5b7e5ba9e6, 0x8d7ccfc09c50e2f8 - data8 0x8ddf042022e69cd6, 0x8e417ca940e35a01 - data8 0x8ea4398b45cd53c0, 0x8f073af5a2013520 - data8 0x8f6a8117e6c8e5c4, 0x8fce0c21c6726481 - data8 0x9031dc431466b1dc, 0x9095f1abc540ca6b - data8 0x90fa4c8beee4b12b, 0x915eed13c89689d3 - data8 0x91c3d373ab11c336, 0x9228ffdc10a051ad - data8 0x928e727d9531f9ac, 0x92f42b88f673aa7c - data8 0x935a2b2f13e6e92c, 0x93c071a0eef94bc1 - data8 0x9426ff0fab1c04b6, 0x948dd3ac8ddb7ed3 - data8 0x94f4efa8fef70961, 0x955c5336887894d5 - data8 0x95c3fe86d6cc7fef, 0x962bf1cbb8d97560 - data8 0x96942d3720185a00, 0x96fcb0fb20ac4ba3 - data8 0x97657d49f17ab08e, 0x97ce9255ec4357ab - data8 0x9837f0518db8a96f, 0x98a1976f7597e996 - data8 0x990b87e266c189aa, 0x9975c1dd47518c77 - data8 0x99e0459320b7fa65, 0x9a4b13371fd166ca - data8 0x9ab62afc94ff864a, 0x9b218d16f441d63d - data8 0x9b8d39b9d54e5539, 0x9bf93118f3aa4cc1 - data8 0x9c6573682ec32c2d, 0x9cd200db8a0774cb - data8 0x9d3ed9a72cffb751, 0x9dabfdff6367a2aa - data8 0x9e196e189d472420, 0x9e872a276f0b98ff - data8 0x9ef5326091a111ae, 0x9f6386f8e28ba651 - data8 0x9fd228256400dd06, 0xa041161b3d0121be - data8 0xa0b0510fb9714fc2, 0xa11fd9384a344cf7 - data8 0xa18faeca8544b6e4, 0xa1ffd1fc25cea188 - data8 0xa27043030c496819, 0xa2e102153e918f9e - data8 0xa3520f68e802bb93, 0xa3c36b345991b47c - data8 0xa43515ae09e6809e, 0xa4a70f0c95768ec5 - data8 0xa5195786be9ef339, 0xa58bef536dbeb6ee - data8 0xa5fed6a9b15138ea, 0xa6720dc0be08a20c - data8 0xa6e594cfeee86b1e, 0xa7596c0ec55ff55b - data8 0xa7cd93b4e965356a, 0xa8420bfa298f70d1 - data8 0xa8b6d5167b320e09, 0xa92bef41fa77771b - data8 0xa9a15ab4ea7c0ef8, 0xaa1717a7b5693979 - data8 0xaa8d2652ec907629, 0xab0386ef48868de1 - data8 0xab7a39b5a93ed337, 0xabf13edf162675e9 - data8 0xac6896a4be3fe929, 0xace0413ff83e5d04 - data8 0xad583eea42a14ac6, 0xadd08fdd43d01491 - data8 0xae493452ca35b80e, 0xaec22c84cc5c9465 - data8 0xaf3b78ad690a4375, 0xafb51906e75b8661 - data8 0xb02f0dcbb6e04584, 0xb0a957366fb7a3c9 - data8 0xb123f581d2ac2590, 0xb19ee8e8c94feb09 - data8 0xb21a31a66618fe3b, 0xb295cff5e47db4a4 - data8 0xb311c412a9112489, 0xb38e0e38419fae18 - data8 0xb40aaea2654b9841, 0xb487a58cf4a9c180 - data8 0xb504f333f9de6484, 0xb58297d3a8b9f0d2 - data8 0xb60093a85ed5f76c, 0xb67ee6eea3b22b8f - data8 0xb6fd91e328d17791, 0xb77c94c2c9d725e9 - data8 0xb7fbefca8ca41e7c, 0xb87ba337a1743834 - data8 0xb8fbaf4762fb9ee9, 0xb97c143756844dbf - data8 0xb9fcd2452c0b9deb, 0xba7de9aebe5fea09 - data8 0xbaff5ab2133e45fb, 0xbb81258d5b704b6f - data8 0xbc034a7ef2e9fb0d, 0xbc85c9c560e7b269 - data8 0xbd08a39f580c36bf, 0xbd8bd84bb67ed483 - data8 0xbe0f6809860993e2, 0xbe935317fc378238 - data8 0xbf1799b67a731083, 0xbf9c3c248e2486f8 - data8 0xc0213aa1f0d08db0, 0xc0a6956e8836ca8d - data8 0xc12c4cca66709456, 0xc1b260f5ca0fbb33 - data8 0xc238d2311e3d6673, 0xc2bfa0bcfad907c9 - data8 0xc346ccda24976407, 0xc3ce56c98d21b15d - data8 0xc4563ecc5334cb33, 0xc4de8523c2c07baa - data8 0xc5672a115506dadd, 0xc5f02dd6b0bbc3d9 - data8 0xc67990b5aa245f79, 0xc70352f04336c51e - data8 0xc78d74c8abb9b15d, 0xc817f681416452b2 - data8 0xc8a2d85c8ffe2c45, 0xc92e1a9d517f0ecc - data8 0xc9b9bd866e2f27a3, 0xca45c15afcc72624 - data8 0xcad2265e4290774e, 0xcb5eecd3b38597c9 - data8 0xcbec14fef2727c5d, 0xcc799f23d11510e5 - data8 0xcd078b86503dcdd2, 0xcd95da6a9ff06445 - data8 0xce248c151f8480e4, 0xceb3a0ca5dc6a55d - data8 0xcf4318cf191918c1, 0xcfd2f4683f94eeb5 - data8 0xd06333daef2b2595, 0xd0f3d76c75c5db8d - data8 0xd184df6251699ac6, 0xd2164c023056bcab - data8 0xd2a81d91f12ae45a, 0xd33a5457a3029054 - data8 0xd3ccf099859ac379, 0xd45ff29e0972c561 - data8 0xd4f35aabcfedfa1f, 0xd5872909ab75d18a - data8 0xd61b5dfe9f9bce07, 0xd6aff9d1e13ba2fe - data8 0xd744fccad69d6af4, 0xd7da67311797f56a - data8 0xd870394c6db32c84, 0xd9067364d44a929c - data8 0xd99d15c278afd7b6, 0xda3420adba4d8704 - data8 0xdacb946f2ac9cc72, 0xdb63714f8e295255 - data8 0xdbfbb797daf23755, 0xdc9467913a4f1c92 - data8 0xdd2d818508324c20, 0xddc705bcd378f7f0 - data8 0xde60f4825e0e9124, 0xdefb4e1f9d1037f2 - data8 0xdf9612deb8f04420, 0xe031430a0d99e627 - data8 0xe0ccdeec2a94e111, 0xe168e6cfd3295d23 - data8 0xe2055afffe83d369, 0xe2a23bc7d7d91226 - data8 0xe33f8972be8a5a51, 0xe3dd444c46499619 - data8 0xe47b6ca0373da88d, 0xe51a02ba8e26d681 - data8 0xe5b906e77c8348a8, 0xe658797368b3a717 - data8 0xe6f85aaaee1fce22, 0xe798aadadd5b9cbf - data8 0xe8396a503c4bdc68, 0xe8da9958464b42ab - data8 0xe97c38406c4f8c57, 0xea1e4756550eb27b - data8 0xeac0c6e7dd24392f, 0xeb63b74317369840 - data8 0xec0718b64c1cbddc, 0xecaaeb8ffb03ab41 - data8 0xed4f301ed9942b84, 0xedf3e6b1d418a491 - data8 0xee990f980da3025b, 0xef3eab20e032bc6b - data8 0xefe4b99bdcdaf5cb, 0xf08b3b58cbe8b76a - data8 0xf13230a7ad094509, 0xf1d999d8b7708cc1 - data8 0xf281773c59ffb13a, 0xf329c9233b6bae9c - data8 0xf3d28fde3a641a5b, 0xf47bcbbe6db9fddf - data8 0xf5257d152486cc2c, 0xf5cfa433e6537290 - data8 0xf67a416c733f846e, 0xf7255510c4288239 - data8 0xf7d0df730ad13bb9, 0xf87ce0e5b2094d9c - data8 0xf92959bb5dd4ba74, 0xf9d64a46eb939f35 - data8 0xfa83b2db722a033a, 0xfb3193cc4227c3f4 - data8 0xfbdfed6ce5f09c49, 0xfc8ec01121e447bb - data8 0xfd3e0c0cf486c175, 0xfdedd1b496a89f35 - data8 0xfe9e115c7b8f884c, 0xff4ecb59511ec8a5 -LOCAL_OBJECT_END(T_table) - - -LOCAL_OBJECT_START(D_table) - - data4 0x00000000, 0x9f55c08f, 0x1e93ffa3, 0x1dcd43a8 - data4 0x1f751f79, 0x9f3cdd88, 0x9f43d155, 0x1eda222c - data4 0x1ef35513, 0x9f597895, 0x9e698881, 0x1ec71073 - data4 0x1e50e371, 0x9dc01e19, 0x1de74133, 0x1e2f028c - data4 0x9edefb47, 0x1ebbac48, 0x9e8b0330, 0x9e9e9314 - data4 0x1edc1d11, 0x1f098529, 0x9f52827c, 0x1f50050d - data4 0x1f301e8e, 0x1f5b64d1, 0x9f45e3ee, 0x9ef64d6d - data4 0x1d6ec5e8, 0x9e61ad9a, 0x1d44ccbb, 0x9e4a8bbb - data4 0x9cf11576, 0x9dcce7e7, 0x9d02ac90, 0x1f26ccf0 - data4 0x9f0877c6, 0x9ddd62ae, 0x9f4b7fc3, 0x1ea8ef6b - data4 0x1ea4378d, 0x1ef6fc38, 0x1db99fd9, 0x1f22bf6f - data4 0x1f53e172, 0x1e85504a, 0x9f37cc75, 0x1f0c5e17 - data4 0x1dde8aac, 0x9cb42bb2, 0x1e153cd7, 0x1eb62bba - data4 0x9e9b941b, 0x9ea80e3c, 0x1f508823, 0x1ec3fd36 - data4 0x1e9ffaa1, 0x1e21e2eb, 0x9d948b1d, 0x9e8ac93a - data4 0x1ef7ee6f, 0x9e80dda3, 0x1f0814be, 0x1dc5ddfe - data4 0x1eedb9d1, 0x9f2aaa26, 0x9ea5b0fc, 0x1edf702e - data4 0x9e391201, 0x1f1316bb, 0x1ea27fb7, 0x9e05ed18 - data4 0x9f199ed2, 0x1ee7fd7c, 0x1f003db6, 0x9eac3793 - data4 0x9e5b8c10, 0x9f3af17c, 0x1bc9a8be, 0x1ee3c004 - data4 0x9f19b1b2, 0x9f242ce9, 0x9ce67dd1, 0x9e4f6275 - data4 0x1e20742c, 0x1eb9328a, 0x9f477153, 0x1d969718 - data4 0x9f1e6c43, 0x1f2f67f4, 0x9f39c7e4, 0x9e3c4feb - data4 0x1da3956b, 0x9e7c685d, 0x1f280911, 0x9f0d8afb - data4 0x1e314b40, 0x9eb4f250, 0x9f1a34ad, 0x1ef5d5e7 - data4 0x9f145496, 0x1e604827, 0x9f1e5195, 0x1e9c1fc0 - data4 0x1efde521, 0x1e69b385, 0x1f316830, 0x9f244eae - data4 0x1f1787ec, 0x9e939971, 0x1f0bb393, 0x9f0511d6 - data4 0x1ed919de, 0x1d8b7b28, 0x1e5ca4a9, 0x1e7c357b - data4 0x9e3ff8e8, 0x1eef53b5, 0x9ed22ed7, 0x1f16659b - data4 0x9f2db102, 0x9e2c6a78, 0x1f328d7d, 0x9f2fec3c - data4 0x1eb395bd, 0x9f242b84, 0x9e2683e6, 0x1ed71e68 - data4 0x1efd1df5, 0x9e9eeafd, 0x9ed2249c, 0x1eef129a - data4 0x1d1ea44c, 0x9e81f7ff, 0x1eaf77c9, 0x9ee7a285 - data4 0x1e1864ed, 0x9ee7edbb, 0x9e15a27d, 0x9ae61655 - data4 0x1f1ff1a2, 0x1da29755, 0x9e5f46fb, 0x1e901236 - data4 0x9eecfb9b, 0x9f204d2f, 0x1ec64685, 0x9eb809bd - data4 0x9e0026c5, 0x1d9f1da1, 0x1f142b49, 0x9f20f22e - data4 0x1f24b067, 0x1f185a4c, 0x9f09765c, 0x9ece902f - data4 0x1e2ca5db, 0x1e6de464, 0x9f071f67, 0x1f1518c3 - data4 0x1ea13ded, 0x1f0b8414, 0x1edb6ad4, 0x9e548740 - data4 0x9ea10efb, 0x1ee48a60, 0x1e7954c5, 0x9edad013 - data4 0x9f21517d, 0x9e9b6e0c, 0x9ee7f9a6, 0x9ebd4298 - data4 0x9d65b24e, 0x1eed751f, 0x9f1573ea, 0x9d430377 - data4 0x9e13fc0c, 0x1e47008a, 0x1e3d5c1d, 0x1ef41a91 - data4 0x9e4a4ef7, 0x9e952f18, 0x1d620566, 0x1d9b8d33 - data4 0x1db06247, 0x1e94b31e, 0x1f0730ad, 0x9d79ffb4 - data4 0x1ed64d51, 0x9e91fd11, 0x9e28d35a, 0x9dea0ed9 - data4 0x1e891def, 0x9ee28ac0, 0x1e1db99b, 0x9ee1ce38 - data4 0x9bdd9bca, 0x1eb72cb9, 0x9e8c53c6, 0x1e0df6ca - data4 0x1e8f2ccd, 0x9e9b0886, 0x1eeb3bc7, 0x1ec7e772 - data4 0x9e210776, 0x9daf246c, 0x1ea1f151, 0x1ece4dc6 - data4 0x1ce741c8, 0x1ed3c88f, 0x9ec9a4fd, 0x9e0c8d30 - data4 0x1d2fbb26, 0x9ef212a7, 0x1ee44f1c, 0x9e445550 - data4 0x1e075f77, 0x9d9291a3, 0x1f09c2ee, 0x9e012c88 - data4 0x1f057d62, 0x9e7bb0dc, 0x9d8758ee, 0x1ee8d6c1 - data4 0x9e509a57, 0x9e4ca7b7, 0x1e2cb341, 0x9ec35106 - data4 0x1ecf3baf, 0x1e11781c, 0x1ea0cc78, 0x1eb75ca6 - data4 0x1e961e1a, 0x1eb88853, 0x1e7abf50, 0x1ee38704 - data4 0x9dc5ab0f, 0x1afe197b, 0x9ec07523, 0x9d9b7f78 - data4 0x1f011618, 0x1ed43b0b, 0x9f035945, 0x9e3fd014 - data4 0x9bbda5cd, 0x9e83f8ab, 0x1e58a928, 0x1e392d61 - data4 0x1efdbb52, 0x1ee310a8, 0x9ec7ecc1, 0x1e8c9ed6 - data4 0x9ef82dee, 0x9e70545b, 0x9ea53fc4, 0x1e40f419 -LOCAL_OBJECT_END(D_table) - - - -.section .text -GLOBAL_LIBM_ENTRY(exp2l) - -{.mii - // get exponent - getf.exp GR_EBIAS = f8 - // GR_D_ADDR0 = pointer to D_table - addl GR_D_ADDR0 = @ltoff(D_table), gp - // GR_ADDR0 = pointer to C_1...C_6 followed by T_table - addl GR_ADDR0 = @ltoff(poly_coeffs), gp ;; -} - -{.mfi - // get significand - getf.sig GR_SIGNIF = f8 - // will continue only for normal/denormal numbers - fclass.nm.unc p12, p7 = f8, 0x1b - mov GR_63 = 63 ;; -} - -{.mfi - nop.m 0 - nop.f 0 - // GR_CONST2 = bias+63-8 - mov GR_CONST2 = 0xffff+55 -} -{.mfi - // GR_CONST1 = bias+15 - mov GR_CONST1 = 0xffff+15 - nop.f 0 - mov GR_CONST3 = 0x1ffff ;; -} - -{.mfi - // load start address for C_1...C_6 followed by T_table - ld8 GR_ADDR = [ GR_ADDR0 ] - nop.f 0 - // get sign of argument - andcm GR_SGN = GR_EBIAS, GR_CONST3 -} -{.mfi - // GR_D_ADDR = pointer to D_table - ld8 GR_D_ADDR = [ GR_D_ADDR0 ] - nop.f 0 - // get argument exponent - and GR_ARGEXP = GR_CONST3, GR_EBIAS ;; -} - -{.mfi - alloc GR_SREG = ar.pfs, 1, 4, 4, 0 - nop.f 0 - // p6 = 1 if sign = 1 - cmp.ne p6, p8 = GR_SGN, r0 -} -{.mfi - // p7 = 1 if exponent> = 15 (argument out of range) - cmp.ge p7, p0 = GR_ARGEXP, GR_CONST1 - nop.f 0 - sub GR_EXPON = GR_CONST2, GR_ARGEXP ;; -} - -{.mib - // load C_3, C_4 - ldfpd FR_COEFF3, FR_COEFF4 = [ GR_ADDR ], 16 - // get first exponent+8 bits - shr.u GR_LEADBITS = GR_SIGNIF, GR_EXPON - (p12) br.cond.spnt SPECIAL_exp2l -} -{.mib - mov GR_256 = 256 - // exponent- = 63 - sub GR_EM63 = GR_EBIAS, GR_63 - (p7) br.cond.spnt OUT_RANGE_exp2l ;; -} - -{.mlx - // load C_5, C_6 - ldfpd FR_COEFF5, FR_COEFF6 = [ GR_ADDR ], 16 - // GR_2P14 = 2^14 - movl GR_2P14 = 0x46800000 ;; -} - -{.mfi - // load C_1 - ldfe FR_COEFF1 = [ GR_ADDR ], 16 - fma.s0 f8 = f8, f1, f0 - // GR_BM63 = bias-63 - mov GR_BM63 = 0xffff-63 ;; -} - -{.mlx - setf.s FR_2P14 = GR_2P14 - // GR_UF_TEST = -2^14-62 - movl GR_UF_TEST = 0xc6807c00 -} -{.mfi - // load C_2 - ldfe FR_COEFF2 = [ GR_ADDR ], 16 - nop.f 0 - mov GR_255 = 255 ;; -} - -{.mib - // get 8-bit index - and GR_INDEX = GR_255, GR_LEADBITS - // get K = integer part - shr.u GR_K = GR_LEADBITS, 8 - nop.b 0 ;; -} - -{.mmi - // if sign = 1 && f>0, set p7 = 1 - (p6) cmp.gt.unc p7, p0 = GR_INDEX, r0 - setf.s FR_UF_TEST = GR_UF_TEST - shl GR_KF = GR_LEADBITS, GR_EXPON ;; -} - -{.mfi - // if sign = 1 && f>0, set f = 1-f - (p7) sub GR_INDEX = GR_256, GR_INDEX - nop.f 0 - // if sign = 1 && f>0, set K = K+1 - (p7) add GR_K = GR_K, r0, 1 ;; -} - -{.mfi - // FR_EXP63 = 2^{expon-63} - setf.exp FR_EXP63 = GR_EM63 - nop.f 0 - nop.i 0 ;; -} - -.pred.rel "mutex", p6, p8 -{.mfi - // if sign = 0, set scale factor exponent S = K+bias-63 - (p8) add GR_K = GR_K, GR_BM63 - nop.f 0 - // if sign = 1, set scale factor exponent S = -K+bias-63 - (p6) sub GR_K = GR_BM63, GR_K ;; -} - -{.mmi - // FR_KF0 = 2^{63-expon}*(K+f) - setf.sig FR_KF0 = GR_KF - nop.m 0 - // GR_EMIN = EMIN = 2-2^14 - mov GR_EMIN = 0x18cfff ;; -} - -{.mfi - // get T_table index - shladd GR_IT = GR_INDEX, 3, GR_ADDR - // p7 = 1 if x> = 2^10 - fcmp.ge.s1 p7, p12 = f8, FR_2P14 - // get D_table index - shladd GR_ID = GR_INDEX, 2, GR_D_ADDR ;; -} - -{.mfi - // load T_table value - ldf8 FR_T = [ GR_IT ] - // p7 = 1 if x<-2^10-50 - (p12) fcmp.lt.s1 p7, p0 = f8, FR_UF_TEST - // GR_EMIN1 = EMIN = 2-2^14 - shl GR_EMIN1 = GR_EMIN, 11 ;; -} - -{.mmb - // f50 = scale factor = 2^{K-63} - setf.exp FR_2EXP = GR_K - // load D_table value - ldfs FR_D = [ GR_ID ] - (p7) br.cond.spnt OUT_RANGE_exp2l ;; -} - -{.mfi - nop.m 0 - // get r = x-(K+f) - fnma.s1 FR_R = FR_KF0, FR_EXP63, f8 - nop.i 0 ;; -} - -{.mfi - // FR_EMIN = EMIN - setf.s FR_EMIN = GR_EMIN1 - // P34 = C_4*r+C_3 - fma.s1 FR_P34 = FR_COEFF4, FR_R, FR_COEFF3 - nop.i 0 -} -{.mfi - nop.m 0 - // P56 = C_6*r+C_5 - fma.s1 FR_P56 = FR_COEFF6, FR_R, FR_COEFF5 - nop.i 0 ;; -} - -{.mfi - nop.m 0 - // r*r - fma.s1 FR_R2 = FR_R, FR_R, f0 - nop.i 0 -} -{.mfi - nop.m 0 - // P12 = C_2*r+C_1 - fma.s1 FR_P12 = FR_COEFF2, FR_R, FR_COEFF1 - nop.i 0 ;; -} - -{.mfi - nop.m 0 - // T* = scaling factor - fma.s1 FR_TS = FR_T, FR_2EXP, f0 - nop.i 0 -} -{.mfi - nop.m 0 - // P36 = P34+r2*P56 - fma.s1 FR_P36 = FR_P56, FR_R2, FR_P34 - nop.i 0 ;; -} - -{.mfi - nop.m 0 - // P02 = D+r*P12 - fma.s1 FR_P02 = FR_P12, FR_R, FR_D - nop.i 0 -} -{.mfi - nop.m 0 - // GR_ID = r*r2 - fma.s1 FR_R3 = FR_R2, FR_R, f0 - nop.i 0 ;; -} - -{.mfi - nop.m 0 - // P06 = P02+r3*P36 - fma.s1 FR_P06 = FR_P36, FR_R3, FR_P02 - nop.i 0 ;; -} - -{.mfi - nop.m 0 - // underflow (x multiplication on 2^n can be -// performed by doing logical "or" operation with bits presenting 2^n - -// exp(R) = 1 + (exp(R) - 1) -// P = exp(R) - 1 approximated by Taylor series of 3rd degree -// P = A3*R^3 + A2*R^2 + R, A3 = 1/6, A2 = 1/2 -// - -// The final result is reconstructed as follows -// exp(x) = T + T*P - -// Special values -//********************************************************************* -// expf(+0) = 1.0 -// expf(-0) = 1.0 - -// expf(+qnan) = +qnan -// expf(-qnan) = -qnan -// expf(+snan) = +qnan -// expf(-snan) = -qnan - -// expf(-inf) = +0 -// expf(+inf) = +inf - -// Overflow and Underflow -//********************************************************************* -// expf(x) = largest single normal when -// x = 88.72283 = 0x42b17217 - -// expf(x) = smallest single normal when -// x = -87.33654 = 0xc2aeac4f - -// expf(x) = largest round-to-nearest single zero when -// x = -103.97208 = 0xc2cff1b5 - - -// Registers used -//********************************************************************* -// Floating Point registers used: -// f8, input -// f6,f7, f9 -> f15, f32 -> f40 - -// General registers used: -// r3, r23 -> r38 - -// Predicate registers used: -// p10 -> p15 - -// Assembly macros -//********************************************************************* -// integer registers used -// scratch -rNJ = r3 - -rTmp = r23 -rJ = r23 -rN = r24 -rTblAddr = r25 -rA3 = r26 -rExpHalf = r27 -rLn2Div64 = r28 -r17ones_m1 = r29 -rGt_ln = r29 -rRightShifter = r30 -r64DivLn2 = r31 -// stacked -GR_SAVE_PFS = r32 -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Parameter_TAG = r38 - -// floating point registers used -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 -// scratch -fRightShifter = f6 -f64DivLn2 = f7 -fNormX = f9 -fNint = f10 -fN = f11 -fR = f12 -fLn2Div64 = f13 -fA2 = f14 -fA3 = f15 -// stacked -fP = f32 -fT = f33 -fMIN_SGL_OFLOW_ARG = f34 -fMAX_SGL_ZERO_ARG = f35 -fMAX_SGL_NORM_ARG = f36 -fMIN_SGL_NORM_ARG = f37 -fRSqr = f38 -fTmp = f39 -fGt_pln = f39 -fWre_urm_f8 = f40 -fFtz_urm_f8 = f40 - - -RODATA -.align 16 - -LOCAL_OBJECT_START(_expf_table) -data4 0x42b17218 // Smallest sgl arg to overflow sgl result, +88.7228 -data4 0xc2cff1b5 // Largest sgl for rnd-to-nearest 0 result, -103.9720 -data4 0x42b17217 // Largest sgl arg to give normal sgl result, +88.7228 -data4 0xc2aeac4f // Smallest sgl arg to give normal sgl result, -87.3365 -// -// 2^(j/64) table, j goes from 0 to 63 -data8 0x0000000000000000 // 2^(0/64) -data8 0x00002C9A3E778061 // 2^(1/64) -data8 0x000059B0D3158574 // 2^(2/64) -data8 0x0000874518759BC8 // 2^(3/64) -data8 0x0000B5586CF9890F // 2^(4/64) -data8 0x0000E3EC32D3D1A2 // 2^(5/64) -data8 0x00011301D0125B51 // 2^(6/64) -data8 0x0001429AAEA92DE0 // 2^(7/64) -data8 0x000172B83C7D517B // 2^(8/64) -data8 0x0001A35BEB6FCB75 // 2^(9/64) -data8 0x0001D4873168B9AA // 2^(10/64) -data8 0x0002063B88628CD6 // 2^(11/64) -data8 0x0002387A6E756238 // 2^(12/64) -data8 0x00026B4565E27CDD // 2^(13/64) -data8 0x00029E9DF51FDEE1 // 2^(14/64) -data8 0x0002D285A6E4030B // 2^(15/64) -data8 0x000306FE0A31B715 // 2^(16/64) -data8 0x00033C08B26416FF // 2^(17/64) -data8 0x000371A7373AA9CB // 2^(18/64) -data8 0x0003A7DB34E59FF7 // 2^(19/64) -data8 0x0003DEA64C123422 // 2^(20/64) -data8 0x0004160A21F72E2A // 2^(21/64) -data8 0x00044E086061892D // 2^(22/64) -data8 0x000486A2B5C13CD0 // 2^(23/64) -data8 0x0004BFDAD5362A27 // 2^(24/64) -data8 0x0004F9B2769D2CA7 // 2^(25/64) -data8 0x0005342B569D4F82 // 2^(26/64) -data8 0x00056F4736B527DA // 2^(27/64) -data8 0x0005AB07DD485429 // 2^(28/64) -data8 0x0005E76F15AD2148 // 2^(29/64) -data8 0x0006247EB03A5585 // 2^(30/64) -data8 0x0006623882552225 // 2^(31/64) -data8 0x0006A09E667F3BCD // 2^(32/64) -data8 0x0006DFB23C651A2F // 2^(33/64) -data8 0x00071F75E8EC5F74 // 2^(34/64) -data8 0x00075FEB564267C9 // 2^(35/64) -data8 0x0007A11473EB0187 // 2^(36/64) -data8 0x0007E2F336CF4E62 // 2^(37/64) -data8 0x00082589994CCE13 // 2^(38/64) -data8 0x000868D99B4492ED // 2^(39/64) -data8 0x0008ACE5422AA0DB // 2^(40/64) -data8 0x0008F1AE99157736 // 2^(41/64) -data8 0x00093737B0CDC5E5 // 2^(42/64) -data8 0x00097D829FDE4E50 // 2^(43/64) -data8 0x0009C49182A3F090 // 2^(44/64) -data8 0x000A0C667B5DE565 // 2^(45/64) -data8 0x000A5503B23E255D // 2^(46/64) -data8 0x000A9E6B5579FDBF // 2^(47/64) -data8 0x000AE89F995AD3AD // 2^(48/64) -data8 0x000B33A2B84F15FB // 2^(49/64) -data8 0x000B7F76F2FB5E47 // 2^(50/64) -data8 0x000BCC1E904BC1D2 // 2^(51/64) -data8 0x000C199BDD85529C // 2^(52/64) -data8 0x000C67F12E57D14B // 2^(53/64) -data8 0x000CB720DCEF9069 // 2^(54/64) -data8 0x000D072D4A07897C // 2^(55/64) -data8 0x000D5818DCFBA487 // 2^(56/64) -data8 0x000DA9E603DB3285 // 2^(57/64) -data8 0x000DFC97337B9B5F // 2^(58/64) -data8 0x000E502EE78B3FF6 // 2^(59/64) -data8 0x000EA4AFA2A490DA // 2^(60/64) -data8 0x000EFA1BEE615A27 // 2^(61/64) -data8 0x000F50765B6E4540 // 2^(62/64) -data8 0x000FA7C1819E90D8 // 2^(63/64) -LOCAL_OBJECT_END(_expf_table) - - -.section .text -GLOBAL_IEEE754_ENTRY(expf) - -{ .mlx - addl rTblAddr = @ltoff(_expf_table),gp - movl r64DivLn2 = 0x40571547652B82FE // 64/ln(2) -} -{ .mlx - addl rA3 = 0x3E2AA, r0 // high bits of 1.0/6.0 rounded to SP - movl rRightShifter = 0x43E8000000000000 // DP Right Shifter -} -;; - -{ .mfi - // point to the beginning of the table - ld8 rTblAddr = [rTblAddr] - fclass.m p14, p0 = f8, 0x22 // test for -INF - shl rA3 = rA3, 12 // 0x3E2AA000, approx to 1.0/6.0 in SP -} -{ .mfi - nop.m 0 - fnorm.s1 fNormX = f8 // normalized x - addl rExpHalf = 0xFFFE, r0 // exponent of 1/2 -} -;; - -{ .mfi - setf.d f64DivLn2 = r64DivLn2 // load 64/ln(2) to FP reg - fclass.m p15, p0 = f8, 0x1e1 // test for NaT,NaN,+Inf - nop.i 0 -} -{ .mlx - // load Right Shifter to FP reg - setf.d fRightShifter = rRightShifter - movl rLn2Div64 = 0x3F862E42FEFA39EF // DP ln(2)/64 in GR -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.s1 p13, p0 = f0, f8 // test for x = 0.0 - nop.i 0 -} -{ .mfb - setf.s fA3 = rA3 // load A3 to FP reg -(p14) fma.s.s0 f8 = f0, f1, f0 // result if x = -inf -(p14) br.ret.spnt b0 // exit here if x = -inf -} -;; - -{ .mfi - setf.exp fA2 = rExpHalf // load A2 to FP reg - fcmp.eq.s0 p6, p0 = f8, f0 // Dummy to flag denorm - nop.i 0 -} -{ .mfb - setf.d fLn2Div64 = rLn2Div64 // load ln(2)/64 to FP reg -(p15) fma.s.s0 f8 = f8, f1, f0 // result if x = NaT,NaN,+Inf -(p15) br.ret.spnt b0 // exit here if x = NaT,NaN,+Inf -} -;; - -{ .mfb - // overflow and underflow_zero threshold - ldfps fMIN_SGL_OFLOW_ARG, fMAX_SGL_ZERO_ARG = [rTblAddr], 8 -(p13) fma.s.s0 f8 = f1, f1, f0 // result if x = 0.0 -(p13) br.ret.spnt b0 // exit here if x =0.0 -} -;; - - // max normal and underflow_denorm threshold -{ .mfi - ldfps fMAX_SGL_NORM_ARG, fMIN_SGL_NORM_ARG = [rTblAddr], 8 - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // x*(64/ln(2)) + Right Shifter - fma.s1 fNint = fNormX, f64DivLn2, fRightShifter - nop.i 0 -} -;; - -// Divide arguments into the following categories: -// Certain Underflow p11 - -inf < x <= MAX_SGL_ZERO_ARG -// Possible Underflow p13 - MAX_SGL_ZERO_ARG < x < MIN_SGL_NORM_ARG -// Certain Safe - MIN_SGL_NORM_ARG <= x <= MAX_SGL_NORM_ARG -// Possible Overflow p14 - MAX_SGL_NORM_ARG < x < MIN_SGL_OFLOW_ARG -// Certain Overflow p15 - MIN_SGL_OFLOW_ARG <= x < +inf -// -// If the input is really a single arg, then there will never be -// "Possible Overflow" arguments. -// - -{ .mfi - nop.m 0 - // check for overflow - fcmp.ge.s1 p15, p0 = fNormX, fMIN_SGL_OFLOW_ARG - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // check for underflow and tiny (+0) result - fcmp.le.s1 p11, p0 = fNormX, fMAX_SGL_ZERO_ARG - nop.i 0 -} -{ .mfb - nop.m 0 - fms.s1 fN = fNint, f1, fRightShifter // n in FP register - // branch out if overflow -(p15) br.cond.spnt EXP_CERTAIN_OVERFLOW -} -;; - -{ .mfb - getf.sig rNJ = fNint // bits of n, j - // check for underflow and deno result - fcmp.lt.s1 p13, p0 = fNormX, fMIN_SGL_NORM_ARG - // branch out if underflow and tiny (+0) result -(p11) br.cond.spnt EXP_CERTAIN_UNDERFLOW -} -;; - -{ .mfi - nop.m 0 - // check for possible overflow - fcmp.gt.s1 p14, p0 = fNormX, fMAX_SGL_NORM_ARG - extr.u rJ = rNJ, 0, 6 // bits of j -} -{ .mfi - addl rN = 0xFFFF - 63, rNJ // biased and shifted n - fnma.s1 fR = fLn2Div64, fN, fNormX // R = x - N*ln(2)/64 - nop.i 0 -} -;; - -{ .mfi - shladd rJ = rJ, 3, rTblAddr // address in the 2^(j/64) table - nop.f 0 - shr rN = rN, 6 // biased n -} -;; - -{ .mfi - ld8 rJ = [rJ] - nop.f 0 - shl rN = rN, 52 // 2^n bits in DP format -} -;; - -{ .mfi - or rN = rN, rJ // bits of 2^n * 2^(j/64) in DP format - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - setf.d fT = rN // 2^n * 2^(j/64) - fma.s1 fP = fA3, fR, fA2 // A3*R + A2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fRSqr = fR, fR, f0 // R^2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP = fP, fRSqr, fR // P = (A3*R + A2)*R^2 + R - nop.i 0 -} -;; - -{ .mbb - nop.m 0 - // branch out if possible underflow -(p13) br.cond.spnt EXP_POSSIBLE_UNDERFLOW - // branch out if possible overflow result -(p14) br.cond.spnt EXP_POSSIBLE_OVERFLOW -} -;; - -{ .mfb - nop.m 0 - // final result in the absence of over- and underflow - fma.s.s0 f8 = fP, fT, fT - // exit here in the absence of over- and underflow - br.ret.sptk b0 -} -;; - -EXP_POSSIBLE_OVERFLOW: - -// Here if fMAX_SGL_NORM_ARG < x < fMIN_SGL_OFLOW_ARG -// This cannot happen if input is a single, only if input higher precision. -// Overflow is a possibility, not a certainty. - -// Recompute result using status field 2 with user's rounding mode, -// and wre set. If result is larger than largest single, then we have -// overflow - -{ .mfi - mov rGt_ln = 0x1007f // Exponent for largest single + 1 ulp - fsetc.s2 0x7F,0x42 // Get user's round mode, set wre - nop.i 0 -} -;; - -{ .mfi - setf.exp fGt_pln = rGt_ln // Create largest single + 1 ulp - fma.s.s2 fWre_urm_f8 = fP, fT, fT // Result with wre set - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 // Turn off wre in sf2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.ge.s1 p6, p0 = fWre_urm_f8, fGt_pln // Test for overflow - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - nop.f 0 -(p6) br.cond.spnt EXP_CERTAIN_OVERFLOW // Branch if overflow -} -;; - -{ .mfb - nop.m 0 - fma.s.s0 f8 = fP, fT, fT - br.ret.sptk b0 // Exit if really no overflow -} -;; - -// here if overflow -EXP_CERTAIN_OVERFLOW: -{ .mmi - addl r17ones_m1 = 0x1FFFE, r0 -;; - setf.exp fTmp = r17ones_m1 - nop.i 0 -} -;; - -{ .mfi - alloc r32=ar.pfs,0,3,4,0 - fmerge.s FR_X = f8,f8 - nop.i 0 -} -{ .mfb - mov GR_Parameter_TAG = 16 - fma.s.s0 FR_RESULT = fTmp, fTmp, fTmp // Set I,O and +INF result - br.cond.sptk __libm_error_region -} -;; - -EXP_POSSIBLE_UNDERFLOW: - -// Here if fMAX_SGL_ZERO_ARG < x < fMIN_SGL_NORM_ARG -// Underflow is a possibility, not a certainty - -// We define an underflow when the answer with -// ftz set -// is zero (tiny numbers become zero) - -// Notice (from below) that if we have an unlimited exponent range, -// then there is an extra machine number E between the largest denormal and -// the smallest normal. - -// So if with unbounded exponent we round to E or below, then we are -// tiny and underflow has occurred. - -// But notice that you can be in a situation where we are tiny, namely -// rounded to E, but when the exponent is bounded we round to smallest -// normal. So the answer can be the smallest normal with underflow. - -// E -// -----+--------------------+--------------------+----- -// | | | -// 1.1...10 2^-3fff 1.1...11 2^-3fff 1.0...00 2^-3ffe -// 0.1...11 2^-3ffe (biased, 1) -// largest dn smallest normal - -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x41 // Get user's round mode, set ftz - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s.s2 fFtz_urm_f8 = fP, fT, fT // Result with ftz set - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 // Turn off ftz in sf2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.s1 p6, p7 = fFtz_urm_f8, f0 // Test for underflow - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s.s0 f8 = fP, fT, fT // Compute result, set I, maybe U - nop.i 0 -} -;; - -{ .mbb - nop.m 0 -(p6) br.cond.spnt EXP_UNDERFLOW_COMMON // Branch if really underflow -(p7) br.ret.sptk b0 // Exit if really no underflow -} -;; - -EXP_CERTAIN_UNDERFLOW: -// Here if x < fMAX_SGL_ZERO_ARG -// Result will be zero (or smallest denorm if round to +inf) with I, U set -{ .mmi - mov rTmp = 1 -;; - setf.exp fTmp = rTmp // Form small normal - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fmerge.se fTmp = fTmp, f64DivLn2 // Small with non-trial signif - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fma.s.s0 f8 = fTmp, fTmp, f0 // Set I,U, tiny (+0.0) result - br.cond.sptk EXP_UNDERFLOW_COMMON -} -;; - -EXP_UNDERFLOW_COMMON: -// Determine if underflow result is zero or nonzero -{ .mfi - alloc r32=ar.pfs,0,3,4,0 - fcmp.eq.s1 p6, p0 = f8, f0 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fmerge.s FR_X = fNormX,fNormX -(p6) br.cond.spnt EXP_UNDERFLOW_ZERO -} -;; - -EXP_UNDERFLOW_NONZERO: -// Here if x < fMIN_SGL_NORM_ARG and result nonzero; -// I, U are set -{ .mfb - mov GR_Parameter_TAG = 17 - nop.f 0 // FR_RESULT already set - br.cond.sptk __libm_error_region -} -;; - -EXP_UNDERFLOW_ZERO: -// Here if x < fMIN_SGL_NORM_ARG and result zero; -// I, U are set -{ .mfb - mov GR_Parameter_TAG = 17 - nop.f 0 // FR_RESULT already set - br.cond.sptk __libm_error_region -} -;; - -GLOBAL_IEEE754_END(expf) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = FR_Y,16 // Store Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mfi - stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - nop.f 0 - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address -} -{ .mib - stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_expl.c b/sysdeps/ia64/fpu/e_expl.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/e_expl.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/e_fmod.S b/sysdeps/ia64/fpu/e_fmod.S deleted file mode 100644 index c29056e34a..0000000000 --- a/sysdeps/ia64/fpu/e_fmod.S +++ /dev/null @@ -1,555 +0,0 @@ -.file "fmod.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//==================================================================== -// 02/02/00 Initial version -// 03/02/00 New Algorithm -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 11/28/00 Set FR_Y to f9 -// 03/11/02 Fixed flags for fmod(qnan,zero) -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 04/28/03 Fix: fmod(sNaN,0) no longer sets errno -// -// API -//==================================================================== -// double fmod(double,double); -// -// Overview of operation -//==================================================================== -// fmod(a,b)=a-i*b, -// where i is an integer such that, if b!=0, -// |i|<|a/b| and |a/b-i|<1 -// -// Algorithm -//==================================================================== -// a). if |a|<|b|, return a -// b). get quotient and reciprocal overestimates accurate to -// 33 bits (q2,y2) -// c). if the exponent difference (exponent(a)-exponent(b)) -// is less than 32, truncate quotient to integer and -// finish in one iteration -// d). if exponent(a)-exponent(b)>=32 (q2>=2^32) -// round quotient estimate to single precision (k=RN(q2)), -// calculate partial remainder (a'=a-k*b), -// get quotient estimate (a'*y2), and repeat from c). -// -// Special cases -//==================================================================== -// b=+/-0: return NaN, call libm_error_support -// a=+/-Inf, a=NaN or b=NaN: return NaN -// -// Registers used -//==================================================================== -// Predicate registers: p6-p11 -// General registers: r2,r29,r32 (ar.pfs), r33-r39 -// Floating point registers: f6-f15 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - -FR_X = f10 -FR_Y = f9 -FR_RESULT = f8 - - -.section .text -GLOBAL_IEEE754_ENTRY(fmod) - -// inputs in f8, f9 -// result in f8 - -{ .mfi - alloc r32=ar.pfs,1,4,4,0 - // f6=|a| - fmerge.s f6=f0,f8 - mov r2 = 0x0ffdd -} - {.mfi - nop.m 0 - // f7=|b| - fmerge.s f7=f0,f9 - nop.i 0;; -} - -{ .mfi - setf.exp f11 = r2 - // (1) y0 - frcpa.s1 f10,p6=f6,f7 - nop.i 0 -} - -// Y +-NAN, +-inf, +-0? p7 -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f9, 0xe7 - nop.i 999;; -} - -// qnan snan inf norm unorm 0 -+ -// 1 1 1 0 0 0 11 -// e 3 -// X +-NAN, +-inf, ? p9 - -{ .mfi - nop.m 999 - fclass.m.unc p9,p0 = f8, 0xe3 - nop.i 999 -} - -// |x| < |y|? Return x p8 -{ .mfi - nop.m 999 - fcmp.lt.unc.s1 p8,p0 = f6,f7 - nop.i 999 ;; -} - -{ .mfi - nop.m 0 - // normalize y (if |x|<|y|) - (p8) fma.s0 f9=f9,f1,f0 - nop.i 0;; -} - - { .mfi - mov r2=0x1001f - // (2) q0=a*y0 - (p6) fma.s1 f13=f6,f10,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - // (3) e0 = 1 - b * y0 - (p6) fnma.s1 f12=f7,f10,f1 - nop.i 0;; -} - - {.mfi - nop.m 0 - // normalize x (if |x|<|y|) - (p8) fma.d.s0 f8=f8,f1,f0 - nop.i 0 -} -{.bbb - (p9) br.cond.spnt FMOD_X_NAN_INF - (p7) br.cond.spnt FMOD_Y_NAN_INF_ZERO - // if |x|<|y|, return - (p8) br.ret.spnt b0;; -} - - {.mfi - nop.m 0 - // normalize x - fma.s0 f6=f6,f1,f0 - nop.i 0 -} -{.mfi - nop.m 0 - // normalize y - fma.s0 f7=f7,f1,f0 - nop.i 0;; -} - - {.mfi - // f15=2^32 - setf.exp f15=r2 - // (4) q1=q0+e0*q0 - (p6) fma.s1 f13=f12,f13,f13 - nop.i 0 -} -{ .mfi - nop.m 0 - // (5) e1 = e0 * e0 + 2^-34 - (p6) fma.s1 f14=f12,f12,f11 - nop.i 0;; -} -{.mlx - nop.m 0 - movl r2=0x33a00000;; -} -{ .mfi - nop.m 0 - // (6) y1 = y0 + e0 * y0 - (p6) fma.s1 f10=f12,f10,f10 - nop.i 0;; -} -{.mfi - // set f12=1.25*2^{-24} - setf.s f12=r2 - // (7) q2=q1+e1*q1 - (p6) fma.s1 f13=f13,f14,f13 - nop.i 0;; -} -{.mfi - nop.m 0 - fmerge.s f9=f8,f9 - nop.i 0 -} -{ .mfi - nop.m 0 - // (8) y2 = y1 + e1 * y1 - (p6) fma.s1 f10=f14,f10,f10 - // set p6=0, p10=0 - cmp.ne.and p6,p10=r0,r0;; -} - -.align 32 -loop53: - {.mfi - nop.m 0 - // compare q2, 2^32 - fcmp.lt.unc.s1 p8,p7=f13,f15 - nop.i 0 -} - {.mfi - nop.m 0 - // will truncate quotient to integer, if exponent<32 (in advance) - fcvt.fx.trunc.s1 f11=f13 - nop.i 0;; -} - {.mfi - nop.m 0 - // if exponent>32, round quotient to single precision (perform in advance) - fma.s.s1 f13=f13,f1,f0 - nop.i 0;; -} - {.mfi - nop.m 0 - // set f12=sgn(a) - (p8) fmerge.s f12=f8,f1 - nop.i 0 -} - {.mfi - nop.m 0 - // normalize truncated quotient - (p8) fcvt.xf f13=f11 - nop.i 0;; -} - { .mfi - nop.m 0 - // calculate remainder (assuming f13=RZ(Q)) - (p7) fnma.s1 f14=f13,f7,f6 - nop.i 0 -} - {.mfi - nop.m 0 - // also if exponent>32, round quotient to single precision - // and subtract 1 ulp: q=q-q*(1.25*2^{-24}) - (p7) fnma.s.s1 f11=f13,f12,f13 - nop.i 0;; -} - - {.mfi - nop.m 0 - // (p8) calculate remainder (82-bit format) - (p8) fnma.s1 f11=f13,f7,f6 - nop.i 0 -} - {.mfi - nop.m 0 - // (p7) calculate remainder (assuming f11=RZ(Q)) - (p7) fnma.s1 f6=f11,f7,f6 - nop.i 0;; -} - - - {.mfi - nop.m 0 - // Final iteration (p8): is f6 the correct remainder (quotient was not overestimated) ? - (p8) fcmp.lt.unc.s1 p6,p10=f11,f0 - nop.i 0;; -} - {.mfi - nop.m 0 - // get new quotient estimation: a'*y2 - (p7) fma.s1 f13=f14,f10,f0 - nop.i 0 -} - {.mfb - nop.m 0 - // was f14=RZ(Q) ? (then new remainder f14>=0) - (p7) fcmp.lt.unc.s1 p7,p9=f14,f0 - nop.b 0;; -} - - -.pred.rel "mutex",p6,p10 - {.mfb - nop.m 0 - // add b to estimated remainder (to cover the case when the quotient was overestimated) - // also set correct sign by using f9=|b|*sgn(a), f12=sgn(a) - (p6) fma.d.s0 f8=f11,f12,f9 - nop.b 0 -} - {.mfb - nop.m 0 - // calculate remainder (single precision) - // set correct sign of result before returning - (p10) fma.d.s0 f8=f11,f12,f0 - (p8) br.ret.sptk b0;; -} - {.mfi - nop.m 0 - // if f13!=RZ(Q), get alternative quotient estimation: a''*y2 - (p7) fma.s1 f13=f6,f10,f0 - nop.i 0 -} - {.mfb - nop.m 0 - // if f14 was RZ(Q), set remainder to f14 - (p9) mov f6=f14 - br.cond.sptk loop53;; -} - - - -FMOD_X_NAN_INF: - -// Y zero ? -{.mfi - nop.m 0 - fclass.m p10,p0=f8,0xc3 // Test x=nan - nop.i 0 -} -{.mfi - nop.m 0 - fma.s1 f10=f9,f1,f0 - nop.i 0;; -} - -{.mfi - nop.m 0 - fma.s0 f8=f8,f1,f0 - nop.i 0 -} -{.mfi - nop.m 0 -(p10) fclass.m p10,p0=f9,0x07 // Test x=nan, and y=zero - nop.i 0;; -} - -{.mfb - nop.m 0 - fcmp.eq.unc.s1 p11,p0=f10,f0 -(p10) br.ret.spnt b0;; // Exit with result=x if x=nan and y=zero -} -{.mib - nop.m 0 - nop.i 0 - // if Y zero - (p11) br.cond.spnt FMOD_Y_ZERO;; -} - -// X infinity? Return QNAN indefinite -{ .mfi - nop.m 999 - fclass.m.unc p8,p9 = f8, 0x23 - nop.i 999;; -} -// Y NaN ? -{.mfi - nop.m 999 -(p8) fclass.m p9,p8=f9,0xc3 - nop.i 0;; -} -{.mfi - nop.m 999 -(p8) frcpa.s0 f8,p0 = f8,f8 - nop.i 0 -} -{ .mfi - nop.m 999 - // also set Denormal flag if necessary -(p8) fma.s0 f9=f9,f1,f0 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -(p8) fma.d.s0 f8=f8,f1,f0 - nop.b 999 ;; -} - -{ .mfb - nop.m 999 -(p9) frcpa.s0 f8,p7=f8,f9 - br.ret.sptk b0 ;; -} - - -FMOD_Y_NAN_INF_ZERO: - -// Y INF -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f9, 0x23 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -(p7) fma.d.s0 f8=f8,f1,f0 -(p7) br.ret.spnt b0 ;; -} - -// Y NAN? -{ .mfi - nop.m 999 - fclass.m.unc p9,p0 = f9, 0xc3 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -(p9) fma.d.s0 f8=f9,f1,f0 -(p9) br.ret.spnt b0 ;; -} - -FMOD_Y_ZERO: -// Y zero? Must be zero at this point -// because it is the only choice left. -// Return QNAN indefinite - -{.mfi - nop.m 0 - // set Invalid - frcpa.s0 f12,p0=f0,f0 - nop.i 0 -} -// X NAN? -{ .mfi - nop.m 999 - fclass.m.unc p9,p10 = f8, 0xc3 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fclass.nm p9,p10 = f8, 0xff - nop.i 999 ;; -} - -{.mfi - nop.m 999 - (p9) frcpa.s0 f11,p7=f8,f0 - nop.i 0;; -} - -{ .mfi - nop.m 999 -(p10) frcpa.s0 f11,p7 = f9,f9 - mov GR_Parameter_TAG = 121 ;; -} - -{ .mfi - nop.m 999 - fmerge.s f10 = f8, f8 - nop.i 999 -} - -{ .mfb - nop.m 999 - fma.d.s0 f8=f11,f1,f0 - br.sptk __libm_error_region;; -} - -GLOBAL_IEEE754_END(fmod) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_fmodf.S b/sysdeps/ia64/fpu/e_fmodf.S deleted file mode 100644 index f5aec469ca..0000000000 --- a/sysdeps/ia64/fpu/e_fmodf.S +++ /dev/null @@ -1,569 +0,0 @@ -.file "fmodf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//==================================================================== -// 02/02/00 Initial version -// 03/02/00 New Algorithm -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 11/28/00 Set FR_Y to f9 -// 03/11/02 Fixed flags for fmodf(qnan,zero) -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 04/28/03 Fix: fmod(sNaN,0) no longer sets errno -// -// API -//==================================================================== -// float fmodf(float,float); -// -// Overview of operation -//==================================================================== -// fmod(a,b)=a-i*b, -// where i is an integer such that, if b!=0, -// |i|<|a/b| and |a/b-i|<1 - -// Algorithm -//==================================================================== -// a). if |a|<|b|, return a -// b). get quotient and reciprocal overestimates accurate to -// 33 bits (q2,y2) -// c). if the exponent difference (exponent(a)-exponent(b)) -// is less than 32, truncate quotient to integer and -// finish in one iteration -// d). if exponent(a)-exponent(b)>=32 (q2>=2^32) -// round quotient estimate to single precision (k=RN(q2)), -// calculate partial remainder (a'=a-k*b), -// get quotient estimate (a'*y2), and repeat from c). - -// Special cases -//==================================================================== -// b=+/-0: return NaN, call libm_error_support -// a=+/-Inf, a=NaN or b=NaN: return NaN - -// Registers used -//==================================================================== -// Predicate registers: p6-p11 -// General registers: r2,r29,r32 (ar.pfs), r33-r39 -// Floating point registers: f6-f15 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - -FR_X = f10 -FR_Y = f9 -FR_RESULT = f8 - - -.section .text -GLOBAL_IEEE754_ENTRY(fmodf) - -// inputs in f8, f9 -// result in f8 - -{ .mfi - alloc r32=ar.pfs,1,4,4,0 - // f6=|a| - fmerge.s f6=f0,f8 - mov r2 = 0x0ffdd -} - {.mfi - nop.m 0 - // f7=|b| - fmerge.s f7=f0,f9 - nop.i 0;; -} - -{ .mfi - setf.exp f11 = r2 - // (1) y0 - frcpa.s1 f10,p6=f6,f7 - nop.i 0 -} - -// eliminate special cases -// Y +-NAN, +-inf, +-0? p7 -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f9, 0xe7 - nop.i 999;; -} - -// qnan snan inf norm unorm 0 -+ -// 1 1 1 0 0 0 11 -// e 3 -// X +-NAN, +-inf, ? p9 - -{ .mfi - nop.m 999 - fclass.m.unc p9,p0 = f8, 0xe3 - nop.i 999 -} - -// |x| < |y|? Return x p8 -{ .mfi - nop.m 999 - fcmp.lt.unc.s1 p8,p0 = f6,f7 - nop.i 999 ;; -} - -{ .mfi - nop.m 0 - // normalize y (if |x|<|y|) - (p8) fma.s0 f9=f9,f1,f0 - nop.i 0;; -} - - { .mfi - mov r2=0x1001f - // (2) q0=a*y0 - (p6) fma.s1 f13=f6,f10,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - // (3) e0 = 1 - b * y0 - (p6) fnma.s1 f12=f7,f10,f1 - nop.i 0;; -} - - {.mfi - nop.m 0 - // normalize x (if |x|<|y|) - (p8) fma.s.s0 f8=f8,f1,f0 - nop.i 0 -} -{.bbb - (p9) br.cond.spnt FMOD_X_NAN_INF - (p7) br.cond.spnt FMOD_Y_NAN_INF_ZERO - // if |x|<|y|, return - (p8) br.ret.spnt b0;; -} - - {.mfi - nop.m 0 - // normalize x - fma.s0 f6=f6,f1,f0 - nop.i 0 -} -{.mfi - nop.m 0 - // normalize y - fma.s0 f7=f7,f1,f0 - nop.i 0;; -} - - - {.mfi - // f15=2^32 - setf.exp f15=r2 - // (4) q1=q0+e0*q0 - (p6) fma.s1 f13=f12,f13,f13 - nop.i 0 -} -{ .mfi - nop.m 0 - // (5) e1 = e0 * e0 + 2^-34 - (p6) fma.s1 f14=f12,f12,f11 - nop.i 0;; -} -{.mlx - nop.m 0 - movl r2=0x33a00000;; -} -{ .mfi - nop.m 0 - // (6) y1 = y0 + e0 * y0 - (p6) fma.s1 f10=f12,f10,f10 - nop.i 0;; -} -{.mfi - // set f12=1.25*2^{-24} - setf.s f12=r2 - // (7) q2=q1+e1*q1 - (p6) fma.s1 f13=f13,f14,f13 - nop.i 0;; -} -{.mfi - nop.m 0 - fmerge.s f9=f8,f9 - nop.i 0 -} -{ .mfi - nop.m 0 - // (8) y2 = y1 + e1 * y1 - (p6) fma.s1 f10=f14,f10,f10 - // set p6=0, p10=0 - cmp.ne.and p6,p10=r0,r0;; -} - -.align 32 -loop24: - {.mfi - nop.m 0 - // compare q2, 2^32 - fcmp.lt.unc.s1 p8,p7=f13,f15 - nop.i 0 -} - {.mfi - nop.m 0 - // will truncate quotient to integer, if exponent<32 (in advance) - fcvt.fx.trunc.s1 f11=f13 - nop.i 0;; -} - {.mfi - nop.m 0 - // if exponent>32, round quotient to single precision (perform in advance) - fma.s.s1 f13=f13,f1,f0 - nop.i 0;; -} - {.mfi - nop.m 0 - // set f12=sgn(a) - (p8) fmerge.s f12=f8,f1 - nop.i 0 -} - {.mfi - nop.m 0 - // normalize truncated quotient - (p8) fcvt.xf f13=f11 - nop.i 0;; -} - { .mfi - nop.m 0 - // calculate remainder (assuming f13=RZ(Q)) - (p7) fnma.s1 f14=f13,f7,f6 - nop.i 0 -} - {.mfi - nop.m 0 - // also if exponent>32, round quotient to single precision - // and subtract 1 ulp: q=q-q*(1.25*2^{-24}) - (p7) fnma.s.s1 f11=f13,f12,f13 - nop.i 0;; -} - - {.mfi - nop.m 0 - // (p8) calculate remainder (82-bit format) - (p8) fnma.s1 f11=f13,f7,f6 - nop.i 0 -} - {.mfi - nop.m 0 - // (p7) calculate remainder (assuming f11=RZ(Q)) - (p7) fnma.s1 f6=f11,f7,f6 - nop.i 0;; -} - - - {.mfi - nop.m 0 - // Final iteration (p8): is f6 the correct remainder (quotient was not overestimated) ? - (p8) fcmp.lt.unc.s1 p6,p10=f11,f0 - nop.i 0;; -} - {.mfi - nop.m 0 - // get new quotient estimation: a'*y2 - (p7) fma.s1 f13=f14,f10,f0 - nop.i 0 -} - {.mfb - nop.m 0 - // was f14=RZ(Q) ? (then new remainder f14>=0) - (p7) fcmp.lt.unc.s1 p7,p9=f14,f0 - nop.b 0;; -} - - -.pred.rel "mutex",p6,p10 - {.mfb - nop.m 0 - // add b to estimated remainder (to cover the case when the quotient was overestimated) - // also set correct sign by using f9=|b|*sgn(a), f12=sgn(a) - (p6) fma.s.s0 f8=f11,f12,f9 - nop.b 0 -} - {.mfb - nop.m 0 - // calculate remainder (single precision) - // set correct sign of result before returning - (p10) fma.s.s0 f8=f11,f12,f0 - (p8) br.ret.sptk b0;; -} - {.mfi - nop.m 0 - // if f13!=RZ(Q), get alternative quotient estimation: a''*y2 - (p7) fma.s1 f13=f6,f10,f0 - nop.i 0 -} - {.mfb - nop.m 0 - // if f14 was RZ(Q), set remainder to f14 - (p9) mov f6=f14 - br.cond.sptk loop24;; -} - - { .mmb - nop.m 0 - nop.m 0 - br.ret.sptk b0;; - } - -FMOD_X_NAN_INF: - - -// Y zero ? -{.mfi - nop.m 0 - fclass.m p10,p0=f8,0xc3 // Test x=nan - nop.i 0 -} -{.mfi - nop.m 0 - fma.s1 f10=f9,f1,f0 - nop.i 0;; -} - -{.mfi - nop.m 0 - fma.s0 f8=f8,f1,f0 - nop.i 0 -} -{.mfi - nop.m 0 -(p10) fclass.m p10,p0=f9,0x07 // Test x=nan, and y=zero - nop.i 0;; -} -{.mfb - nop.m 0 - fcmp.eq.unc.s1 p11,p0=f10,f0 -(p10) br.ret.spnt b0;; // Exit with result=x if x=nan and y=zero -} -{.mib - nop.m 0 - nop.i 0 - // if Y zero - (p11) br.cond.spnt FMOD_Y_ZERO;; -} - -// X infinity? Return QNAN indefinite -{ .mfi - nop.m 999 - fclass.m.unc p8,p9 = f8, 0x23 - nop.i 999;; -} -// Y NaN ? -{.mfi - nop.m 999 -(p8) fclass.m p9,p8=f9,0xc3 - nop.i 0;; -} -{.mfi - nop.m 999 -(p8) frcpa.s0 f8,p0 = f8,f8 - nop.i 0 -} -{ .mfi - nop.m 999 - // also set Denormal flag if necessary -(p8) fma.s0 f9=f9,f1,f0 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -(p8) fma.s.s0 f8=f8,f1,f0 - nop.b 999 ;; -} - -{ .mfb - nop.m 999 -(p9) frcpa.s0 f8,p7=f8,f9 - br.ret.sptk b0 ;; -} - - -FMOD_Y_NAN_INF_ZERO: - -// Y INF -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f9, 0x23 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -(p7) fma.s.s0 f8=f8,f1,f0 -(p7) br.ret.spnt b0 ;; -} - -// Y NAN? -{ .mfi - nop.m 999 - fclass.m.unc p9,p0 = f9, 0xc3 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -(p9) fma.s.s0 f8=f9,f1,f0 -(p9) br.ret.spnt b0 ;; -} - -FMOD_Y_ZERO: -// Y zero? Must be zero at this point -// because it is the only choice left. -// Return QNAN indefinite - -{.mfi - nop.m 0 - // set Invalid - frcpa.s0 f12,p0=f0,f0 - nop.i 999 -} -// X NAN? -{ .mfi - nop.m 999 - fclass.m.unc p9,p10 = f8, 0xc3 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fclass.nm p9,p10 = f8, 0xff - nop.i 999 ;; -} - -{.mfi - nop.m 999 - (p9) frcpa.s0 f11,p7=f8,f0 - nop.i 0;; -} - -{ .mfi - nop.m 999 -(p10) frcpa.s0 f11,p7 = f0,f0 -nop.i 999;; -} - -{ .mfi - nop.m 999 - fmerge.s f10 = f8, f8 - nop.i 999 -} - -{ .mfi - nop.m 999 - fma.s.s0 f8=f11,f1,f0 - nop.i 999;; -} - -EXP_ERROR_RETURN: - - -{ .mib - nop.m 0 - mov GR_Parameter_TAG=122 - br.sptk __libm_error_region;; -} - -GLOBAL_IEEE754_END(fmodf) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support#;; // Call error handling function -} -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_fmodl.S b/sysdeps/ia64/fpu/e_fmodl.S deleted file mode 100644 index 258e4ef8a6..0000000000 --- a/sysdeps/ia64/fpu/e_fmodl.S +++ /dev/null @@ -1,672 +0,0 @@ -.file "fmodl.s" - - -// Copyright (c) 2000 - 2004, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//==================================================================== -// 02/02/00 Initial version -// 03/02/00 New Algorithm -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [ the previously overwritten ] GR_Parameter_RESULT. -// 11/28/00 Set FR_Y to f9 -// 03/11/02 Fixed flags for fmodl(qnan, zero) -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header:.section,.global,.proc,.align -// 04/28/03 Fix: fmod(sNaN, 0) no longer sets errno -// 11/23/04 Reformatted routine and improved speed -// -// API -//==================================================================== -// long double fmodl(long double, long double); -// -// Overview of operation -//==================================================================== -// fmod(a, b)= a-i*b, -// where i is an integer such that, if b!= 0, -// |i|<|a/b| and |a/b-i|<1 -// -// Algorithm -//==================================================================== -// a). if |a|<|b|, return a -// b). get quotient and reciprocal overestimates accurate to -// 33 bits (q2, y2) -// c). if the exponent difference (exponent(a)-exponent(b)) -// is less than 32, truncate quotient to integer and -// finish in one iteration -// d). if exponent(a)-exponent(b)>= 32 (q2>= 2^32) -// round quotient estimate to single precision (k= RN(q2)), -// calculate partial remainder (a'= a-k*b), -// get quotient estimate (a'*y2), and repeat from c). -// -// Registers used -//==================================================================== - -GR_SMALLBIASEXP = r2 -GR_2P32 = r3 -GR_SMALLBIASEXP = r20 -GR_ROUNDCONST = r21 -GR_SIG_B = r22 -GR_ARPFS = r23 -GR_TMP1 = r24 -GR_TMP2 = r25 -GR_TMP3 = r26 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - -FR_X = f10 -FR_Y = f9 -FR_RESULT = f8 - -FR_ABS_A = f6 -FR_ABS_B = f7 -FR_Y_INV = f10 -FR_SMALLBIAS = f11 -FR_E0 = f12 -FR_Q = f13 -FR_E1 = f14 -FR_2P32 = f15 -FR_TMPX = f32 -FR_TMPY = f33 -FR_ROUNDCONST = f34 -FR_QINT = f35 -FR_QRND24 = f36 -FR_NORM_B = f37 -FR_TMP = f38 -FR_TMP2 = f39 -FR_DFLAG = f40 -FR_Y_INV0 = f41 -FR_Y_INV1 = f42 -FR_Q0 = f43 -FR_Q1 = f44 -FR_QINT_Z = f45 -FR_QREM = f46 -FR_B_SGN_A = f47 - -.section .text -GLOBAL_IEEE754_ENTRY(fmodl) - -// inputs in f8, f9 -// result in f8 - -{ .mfi - getf.sig GR_SIG_B = f9 - // FR_ABS_A = |a| - fmerge.s FR_ABS_A = f0, f8 - mov GR_SMALLBIASEXP = 0x0ffdd -} -{ .mfi - nop.m 0 - // FR_ABS_B = |b| - fmerge.s FR_ABS_B = f0, f9 - nop.i 0 -} -;; - -{ .mfi - setf.exp FR_SMALLBIAS = GR_SMALLBIASEXP - // (1) y0 - frcpa.s1 FR_Y_INV0, p6 = FR_ABS_A, FR_ABS_B - nop.i 0 -} -;; - -{ .mlx - nop.m 0 - movl GR_ROUNDCONST = 0x33a00000 -} -;; - -// eliminate special cases -{ .mmi - nop.m 0 - nop.m 0 - // y pseudo-zero ? - cmp.eq p7, p10 = GR_SIG_B, r0 -} -;; - -// set p7 if b +/-NAN, +/-inf, +/-0 -{ .mfi - nop.m 0 - (p10) fclass.m p7, p10 = f9, 0xe7 - nop.i 0 -} -;; - -{ .mfi - mov GR_2P32 = 0x1001f - // (2) q0 = a*y0 - (p6) fma.s1 FR_Q0 = FR_ABS_A, FR_Y_INV0, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - // (3) e0 = 1 - b * y0 - (p6) fnma.s1 FR_E0 = FR_ABS_B, FR_Y_INV0, f1 - nop.i 0 -} -;; - -// set p9 if a +/-NAN, +/-inf -{ .mfi - nop.m 0 - fclass.m.unc p9, p11 = f8, 0xe3 - nop.i 0 -} - // |a| < |b|? Return a, p8=1 -{ .mfi - nop.m 0 - (p10) fcmp.lt.unc.s1 p8, p0 = FR_ABS_A, FR_ABS_B - nop.i 0 -} -;; - -// set p7 if b +/-NAN, +/-inf, +/-0 -{ .mfi - nop.m 0 - // pseudo-NaN ? - (p10) fclass.nm p7, p0 = f9, 0xff - nop.i 0 -} -;; - -// set p9 if a is +/-NaN, +/-Inf -{ .mfi - nop.m 0 - (p11) fclass.nm p9, p0 = f8, 0xff - nop.i 0 -} -{ .mfi - nop.m 0 - // b denormal ? set D flag (if |a|<|b|) - (p8) fnma.s0 FR_DFLAG = f9, f1, f9 - nop.i 0 -} -;; - -{ .mfi - // FR_2P32 = 2^32 - setf.exp FR_2P32 = GR_2P32 - // (4) q1 = q0+e0*q0 - (p6) fma.s1 FR_Q1 = FR_E0, FR_Q0, FR_Q0 - nop.i 0 -} -{ .mfi - nop.m 0 - // (5) e1 = e0 * e0 + 2^-34 - (p6) fma.s1 FR_E1 = FR_E0, FR_E0, FR_SMALLBIAS - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // normalize a (if |a|<|b|) - (p8) fma.s0 f8 = f8, f1, f0 - nop.i 0 -} -{ .bbb - (p9) br.cond.spnt FMOD_A_NAN_INF - (p7) br.cond.spnt FMOD_B_NAN_INF_ZERO - // if |a|<|b|, return - (p8) br.ret.spnt b0 -} -;; - - -{ .mfi - nop.m 0 - // (6) y1 = y0 + e0 * y0 - (p6) fma.s1 FR_Y_INV1 = FR_E0, FR_Y_INV0, FR_Y_INV0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // a denormal ? set D flag - // b denormal ? set D flag - fcmp.eq.s0 p12,p0 = FR_ABS_A, FR_ABS_B - nop.i 0 -} -{ .mfi - // set FR_ROUNDCONST = 1.25*2^{-24} - setf.s FR_ROUNDCONST = GR_ROUNDCONST - // (7) q2 = q1+e1*q1 - (p6) fma.s1 FR_Q = FR_Q1, FR_E1, FR_Q1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fmerge.s FR_B_SGN_A = f8, f9 - nop.i 0 -} -{ .mfi - nop.m 0 - // (8) y2 = y1 + e1 * y1 - (p6) fma.s1 FR_Y_INV = FR_E1, FR_Y_INV1, FR_Y_INV1 - // set p6 = 0, p10 = 0 - cmp.ne.and p6, p10 = r0, r0 -} -;; - -// will compute integer quotient bits (24 bits per iteration) -.align 32 -loop64: -{ .mfi - nop.m 0 - // compare q2, 2^32 - fcmp.lt.unc.s1 p8, p7 = FR_Q, FR_2P32 - nop.i 0 -} -{ .mfi - nop.m 0 - // will truncate quotient to integer, if exponent<32 (in advance) - fcvt.fx.trunc.s1 FR_QINT = FR_Q - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // if exponent>32 round quotient to single precision (perform in advance) - fma.s.s1 FR_QRND24 = FR_Q, f1, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // set FR_ROUNDCONST = sgn(a) - (p8) fmerge.s FR_ROUNDCONST = f8, f1 - nop.i 0 -} -{ .mfi - nop.m 0 - // normalize truncated quotient - (p8) fcvt.xf FR_QRND24 = FR_QINT - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // calculate remainder (assuming FR_QRND24 = RZ(Q)) - (p7) fnma.s1 FR_E1 = FR_QRND24, FR_ABS_B, FR_ABS_A - nop.i 0 -} -{ .mfi - nop.m 0 - // also if exponent>32, round quotient to single precision - // and subtract 1 ulp: q = q-q*(1.25*2^{-24}) - (p7) fnma.s.s1 FR_QINT_Z = FR_QRND24, FR_ROUNDCONST, FR_QRND24 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // (p8) calculate remainder (82-bit format) - (p8) fnma.s1 FR_QREM = FR_QRND24, FR_ABS_B, FR_ABS_A - nop.i 0 -} -{ .mfi - nop.m 0 - // (p7) calculate remainder (assuming FR_QINT_Z = RZ(Q)) - (p7) fnma.s1 FR_ABS_A = FR_QINT_Z, FR_ABS_B, FR_ABS_A - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // Final iteration (p8): is FR_ABS_A the correct remainder - // (quotient was not overestimated) ? - (p8) fcmp.lt.unc.s1 p6, p10 = FR_QREM, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // get new quotient estimation: a'*y2 - (p7) fma.s1 FR_Q = FR_E1, FR_Y_INV, f0 - nop.i 0 -} -{ .mfb - nop.m 0 - // was FR_Q = RZ(Q) ? (then new remainder FR_E1> = 0) - (p7) fcmp.lt.unc.s1 p7, p9 = FR_E1, f0 - nop.b 0 -} -;; - -.pred.rel "mutex", p6, p10 -{ .mfb - nop.m 0 - // add b to estimated remainder (to cover the case when the quotient was - // overestimated) - // also set correct sign by using - // FR_B_SGN_A = |b|*sgn(a), FR_ROUNDCONST = sgn(a) - (p6) fma.s0 f8 = FR_QREM, FR_ROUNDCONST, FR_B_SGN_A - nop.b 0 -} -{ .mfb - nop.m 0 - // set correct sign of result before returning: FR_ROUNDCONST = sgn(a) - (p10) fma.s0 f8 = FR_QREM, FR_ROUNDCONST, f0 - (p8) br.ret.sptk b0 -} -;; - -{ .mfi - nop.m 0 - // if f13! = RZ(Q), get alternative quotient estimation: a''*y2 - (p7) fma.s1 FR_Q = FR_ABS_A, FR_Y_INV, f0 - nop.i 0 -} -{ .mfb - nop.m 0 - // if FR_E1 was RZ(Q), set remainder to FR_E1 - (p9) fma.s1 FR_ABS_A = FR_E1, f1, f0 - br.cond.sptk loop64 -} -;; - -FMOD_A_NAN_INF: - -// b zero ? -{ .mfi - nop.m 0 - fclass.m p10, p0 = f8, 0xc3 // Test a = nan - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_NORM_B = f9, f1, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s0 f8 = f8, f1, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - (p10) fclass.m p10, p0 = f9, 0x07 // Test x = nan, and y = zero - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fcmp.eq.unc.s1 p11, p0 = FR_NORM_B, f0 - (p10) br.ret.spnt b0 // Exit with result = a if a = nan and b = zero -} -;; - -{ .mib - nop.m 0 - nop.i 0 - // if Y zero - (p11) br.cond.spnt FMOD_B_ZERO -} -;; - -// a= infinity? Return QNAN indefinite -{ .mfi - // set p7 t0 0 - cmp.ne p7, p0 = r0, r0 - fclass.m.unc p8, p9 = f8, 0x23 - nop.i 0 -} -;; - -// b NaN ? -{ .mfi - nop.m 0 - (p8) fclass.m p9, p8 = f9, 0xc3 - nop.i 0 -} -;; - -// b not pseudo-zero ? (GR_SIG_B holds significand) -{ .mii - nop.m 0 - (p8) cmp.ne p7, p0 = GR_SIG_B, r0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - (p8) frcpa.s0 f8, p0 = f8, f8 - nop.i 0 -} -{ .mfi - nop.m 0 - // also set Denormal flag if necessary - (p7) fnma.s0 f9 = f9, f1, f9 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - (p8) fma.s0 f8 = f8, f1, f0 - nop.b 0 -} -;; - -{ .mfb - nop.m 0 - (p9) frcpa.s0 f8, p7 = f8, f9 - br.ret.sptk b0 -} -;; - -FMOD_B_NAN_INF_ZERO: -// b INF -{ .mfi - nop.m 0 - fclass.m.unc p7, p0 = f9, 0x23 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - (p7) fma.s0 f8 = f8, f1, f0 - (p7) br.ret.spnt b0 -} -;; - -// b NAN? -{ .mfi - nop.m 0 - fclass.m.unc p9, p10 = f9, 0xc3 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - (p10) fclass.nm p9, p0 = f9, 0xff - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - (p9) fma.s0 f8 = f9, f1, f0 - (p9) br.ret.spnt b0 -} -;; - -FMOD_B_ZERO: -// Y zero? Must be zero at this point -// because it is the only choice left. -// Return QNAN indefinite - -{ .mfi - nop.m 0 - // set Invalid - frcpa.s0 FR_TMP, p0 = f0, f0 - nop.i 0 -} -;; - -// a NAN? -{ .mfi - nop.m 0 - fclass.m.unc p9, p10 = f8, 0xc3 - nop.i 0 -} -;; - -{ .mfi - alloc GR_ARPFS = ar.pfs, 1, 4, 4, 0 - (p10) fclass.nm p9, p10 = f8, 0xff - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - (p9) frcpa.s0 FR_TMP2, p7 = f8, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - (p10) frcpa.s0 FR_TMP2, p7 = f9, f9 - mov GR_Parameter_TAG = 120 -} -;; - -{ .mfi - nop.m 0 - fmerge.s FR_X = f8, f8 - nop.i 0 -} -{ .mfb - nop.m 0 - fma.s0 f8 = FR_TMP2, f1, f0 - br.sptk __libm_error_region -} -;; - -GLOBAL_IEEE754_END(fmodl) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y = -32, sp // Parameter 2 value - nop.f 0 -.save ar.pfs, GR_SAVE_PFS - mov GR_SAVE_PFS = ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp = -64, sp // Create new stack - nop.f 0 - mov GR_SAVE_GP = gp // Save gp -} -;; - -{ .mmi - stfe [ GR_Parameter_Y ] = FR_Y, 16 // Save Parameter 2 on stack - add GR_Parameter_X = 16, sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0 = b0 // Save b0 -} -;; - -.body -{ .mib - stfe [ GR_Parameter_X ] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0, GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfe [ GR_Parameter_Y ] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16, GR_Parameter_Y - br.call.sptk b0 = __libm_error_support# // Call error handling function -} -;; - -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48, sp -} -;; - -{ .mmi - ldfe f8 = [ GR_Parameter_RESULT ] // Get return result off stack -.restore sp - add sp = 64, sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -} -;; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -} -;; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#, @function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_gamma_r.c b/sysdeps/ia64/fpu/e_gamma_r.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/e_gamma_r.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/e_gammaf_r.c b/sysdeps/ia64/fpu/e_gammaf_r.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/e_gammaf_r.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/e_gammal_r.c b/sysdeps/ia64/fpu/e_gammal_r.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/e_gammal_r.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/e_hypot.S b/sysdeps/ia64/fpu/e_hypot.S deleted file mode 100644 index 146bb2fb1b..0000000000 --- a/sysdeps/ia64/fpu/e_hypot.S +++ /dev/null @@ -1,438 +0,0 @@ -.file "hypot.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 02/02/00 hand-optimized -// 04/04/00 Unwind support added -// 06/20/00 new version -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 04/17/03 Added missing mutex directive -// -//********************************************************************* -// ___________ -// Function: hypot(x,y) = |(x^2 + y^2) = for double precision values -// x and y -// Also provides cabs functionality. -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f9 (Input) -// f6 -f15, f32-f34 -// -// General Purpose Registers: -// r2,r3,r29 (Scratch) -// r32-r36 (Locals) -// r37-r40 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6 - p10 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// All faults and exceptions should be raised correctly. -// Overflow can occur. -// hypot(Infinity and anything) = +Infinity -// hypot(QNaN and anything) = QNaN -// hypot(SNaN and anything ) = QNaN -// -//********************************************************************* -// -// Implementation: -// x2 = x * x in double-extended -// y2 = y * y in double-extended -// temp = x2 + y2 in double-extended -// sqrt(temp) rounded to double -// -//********************************************************************* - -GR_SAVE_PFS = r33 -GR_SAVE_B0 = r34 -GR_SAVE_GP = r35 -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -GR_Parameter_TAG = r39 - -FR_X = f32 -FR_Y = f33 -FR_RESULT = f8 - -.section .text - -LOCAL_LIBM_ENTRY(cabs) -LOCAL_LIBM_END(cabs) - -GLOBAL_IEEE754_ENTRY(hypot) - -{.mfi - alloc r32= ar.pfs,0,4,4,0 - // Compute x*x - fma.s1 f10=f8,f8,f0 - // r2=bias-1 - mov r2=0xfffe -} -{.mfi - // 63/8 - mov r3=0x40fc //0000 - // y*y - fma.s1 f11=f9,f9,f0 - // r29=429/16 - mov r29=0x41d68;; //000 -} - -{ .mfi - nop.m 0 -// Check if x is an Inf - if so return Inf even -// if y is a NaN (C9X) - fclass.m.unc p7, p6 = f8, 0x023 - shl r3=r3,16 -} -{.mfi - nop.m 0 - // if possible overflow, copy f8 to f32 - // set Denormal, if necessary - // (p8) - fma.d.s0 f32=f8,f1,f0 - nop.i 0;; -} -{ .mfi - nop.m 0 -// Check if y is an Inf - if so return Inf even -// if x is a NaN (C9X) - fclass.m.unc p8, p9 = f9, 0x023 - shl r29=r29,12 -} -{ .mfb - // f7=0.5 - setf.exp f7=r2 -// For x=inf, multiply y by 1 to raise invalid on y an SNaN -// (p7) fma.s0 f9=f9,f1,f0 - // copy f9 to f33; set Denormal, if necessary - fma.d.s0 f33=f9,f1,f0 - nop.b 0;; -} -{.mfb - // f13=63/8 - setf.s f13=r3 - // is y Zero ? - (p6) fclass.m p6,p0=f9,0x7 - nop.b 0 -} -{.mlx - nop.m 0 - movl r2=0x408c0000;; -} - -{.mfi - // f34=429/16 - setf.s f34=r29 - // is x Zero ? - (p9) fclass.m p9,p0=f8,0x7 - // 231/16 - mov r3=0x4167;; //0000 -} -{.mfi - nop.m 0 - // a=x2+y2 - fma.s1 f12=f10,f1,f11 - nop.i 0;; -} -{.mfi - nop.m 0 - // y not NaN ? - (p9) fclass.m p8,p0=f9,0x3f - shl r3=r3,16 -} -{.mfi - nop.m 0 - // f6=2 - fma.s1 f6=f1,f1,f1 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // x not NaN ? - (p6) fclass.m p7,p0=f8,0x3f - nop.i 0;; -} -{.mfi - // f9=35/8 - setf.s f9=r2 - nop.f 0 - // 2*emax-2 - mov r2=0x107fb;; -} - -.pred.rel "mutex",p7,p8 -{.mfb - nop.m 0 - // if f8=Infinity or f9=Zero, return |f8| - (p7) fmerge.s f8=f0,f32 - (p7) br.ret.spnt b0 -} -{.mfb - nop.m 0 - // if f9=Infinity or f8=Zero, return |f9| - (p8) fmerge.s f8=f0,f33 - (p8) br.ret.spnt b0;; -} - - -{.mfi - // f10 =231/16 - setf.s f10=r3 - // z0=frsqrta(a) - frsqrta.s1 f8,p6=f12 - nop.i 0;; -} - -{ .mfi - nop.m 0 -// Identify Natvals, Infs, NaNs, and Zeros -// and return result - fclass.m.unc p7, p0 = f12, 0x1E7 - nop.i 0;; -} -{.mfb - // get exponent of x^2+y^2 - getf.exp r3=f12 - // if special case, set f8 - (p7) mov f8=f12 - (p7) br.ret.spnt b0;; -} - - -{.mfi - nop.m 0 - // S0=a*z0 - (p6) fma.s1 f14=f12,f8,f0 - nop.i 0 -} -{.mfi - nop.m 0 - // H0=0.5*z0 - (p6) fma.s1 f15=f8,f7,f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // f6=5/2 - fma.s1 f6=f7,f1,f6 - nop.i 0 -} -{.mfi - nop.m 0 - // f11=3/2 - fma.s1 f11=f7,f1,f1 - nop.i 0;; -} - -{.mfi - nop.m 0 - // d=0.5-S0*H0 - (p6) fnma.s1 f7=f14,f15,f7 - nop.i 0;; -} - -{.mfi - nop.m 0 - // P67=231/16+429/16*d - (p6) fma.s1 f10=f34,f7,f10 - nop.i 0 -} -{.mfi - nop.m 0 - // P45=63/8*d+35/8 - (p6) fma.s1 f9=f13,f7,f9 - nop.i 0;; -} -{.mfi - nop.m 0 - // P23=5/2*d+3/2 - (p6) fma.s1 f11=f6,f7,f11 - nop.i 0 -} -{.mfi - nop.m 0 - // d2=d*d - (p6) fma.s1 f13=f7,f7,f0 - nop.i 0;; -} - -{.mfi - nop.m 0 - // P47=d2*P67+P45 - (p6) fma.s1 f10=f10,f13,f9 - nop.i 0 -} -{.mfi - nop.m 0 - // P13=d*P23+1 - (p6) fma.s1 f11=f11,f7,f1 - nop.i 0;; -} -{.mfi - nop.m 0 - // d3=d2*d - (p6) fma.s1 f13=f13,f7,f0 - nop.i 0;; -} - -{.mfi - nop.m 0 - // T0=d*S0 - (p6) fma.s1 f15=f7,f14,f0 - nop.i 0 -} -{.mfi - // Is x^2 + y^2 well less than the overflow - // threshold? - (p6) cmp.lt.unc p7, p8 = r3,r2 - // P=P13+d3*P47 - (p6) fma.s1 f10=f13,f10,f11 - nop.i 0;; -} - -{.mfb - nop.m 0 - // S=P*T0+S0 - fma.d.s0 f8=f10,f15,f14 - // No overflow in this case - (p7) br.ret.sptk b0;; -} - -{ .mfi - nop.m 0 -(p8) fsetc.s2 0x7F,0x42 - // Possible overflow path, must detect by - // Setting widest range exponent with prevailing - // rounding mode. - nop.i 0 ;; -} - - -{ .mfi - // bias+0x400 (bias+EMAX+1) - (p8) mov r2=0x103ff - // S=P*T0+S0 - (p8) fma.d.s2 f12=f10,f15,f14 - nop.i 0 ;; -} -{ .mfi -(p8) setf.exp f11 = r2 -(p8) fsetc.s2 0x7F,0x40 -// Restore Original Mode in S2 - nop.i 0 ;; -} -{ .mfi - nop.m 0 -(p8) fcmp.lt.unc.s1 p9, p10 = f12, f11 - nop.i 0 ;; -} -{ .mib - nop.m 0 - mov GR_Parameter_TAG = 46 - // No overflow -(p9) br.ret.sptk b0;; -} -GLOBAL_IEEE754_END(hypot) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; -LOCAL_LIBM_END(__libm_error_region#) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_hypotf.S b/sysdeps/ia64/fpu/e_hypotf.S deleted file mode 100644 index 43a2fe4a27..0000000000 --- a/sysdeps/ia64/fpu/e_hypotf.S +++ /dev/null @@ -1,394 +0,0 @@ -.file "hypotf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 02/02/00 hand-optimized -// 04/04/00 Unwind support added -// 06/26/00 new version -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 04/17/03 Added missing mutex directive -// -//********************************************************************* -// ___________ -// Function: hypotf(x,y) = |(x^2 + y^2) = for single precision values -// x and y -// Also provides cabsf functionality. -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f9 (Input) -// f6 -f15 -// -// General Purpose Registers: -// r2-r3 (Scratch) -// r32-r36 (Locals) -// r37-r40 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6 - p10 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// All faults and exceptions should be raised correctly. -// Overflow can occur. -// hypotf(Infinity and anything) = +Infinity -// hypotf(QNaN and anything) = QNaN -// hypotf(SNaN and anything ) = QNaN -// -//********************************************************************* -// -// Implementation: -// x2 = x * x in double-extended -// y2 = y * y in double-extended -// temp = x2 + y2 in double-extended -// sqrt(temp) rounded to single precision -// -//********************************************************************* - -GR_SAVE_PFS = r33 -GR_SAVE_B0 = r34 -GR_SAVE_GP = r35 -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -GR_Parameter_TAG = r39 - -FR_X = f14 -FR_Y = f15 -FR_RESULT = f8 - -.section .text - -LOCAL_LIBM_ENTRY(cabsf) -LOCAL_LIBM_END(cabsf) - -GLOBAL_IEEE754_ENTRY(hypotf) -{.mfi - alloc r32= ar.pfs,0,4,4,0 - // Compute x*x - fma.s1 f10=f8,f8,f0 - // r2=bias-1 - mov r2=0xfffe -} -{.mfi - nop.m 0 - // y*y - fma.s1 f11=f9,f9,f0 - nop.i 0;; -} - -{ .mfi - nop.m 0 -// Check if x is an Inf - if so return Inf even -// if y is a NaN (C9X) - fclass.m.unc p7, p6 = f8, 0x023 - nop.i 0 -} -{.mfi - nop.m 0 - // if possible overflow, copy f8 to f14 - // set Denormal, if necessary - // (p8) - fma.s.s0 f14=f8,f1,f0 - nop.i 0;; -} - -{ .mfi - nop.m 0 -// Check if y is an Inf - if so return Inf even -// if x is a NaN (C9X) - fclass.m.unc p8, p9 = f9, 0x023 - nop.i 0 -} -{ .mfi - nop.m 0 -// For x=inf, multiply y by 1 to raise invalid on y an SNaN -// (p7) fma.s0 f9=f9,f1,f0 - // copy f9 to f15; set Denormal, if necessary - fma.s.s0 f15=f9,f1,f0 - nop.i 0;; -} -{.mfi - nop.m 0 - // is y Zero ? - (p6) fclass.m p6,p0=f9,0x7 - nop.i 0;; -} -{.mfi - nop.m 0 - // is x Zero ? - (p9) fclass.m p9,p0=f8,0x7 - nop.i 0;; -} - -{.mfi - // f7=0.5 - setf.exp f7=r2 - // a=x2+y2 - fma.s1 f12=f10,f1,f11 - nop.i 0;; -} - -{.mfi - nop.m 0 - // x not NaN ? - (p6) fclass.m p7,p0=f8,0x3f - nop.i 0 -} -{.mfi - // 2*emax-2 - mov r2=0x100fb - // f6=2 - fma.s1 f6=f1,f1,f1 - nop.i 0;; -} - -{.mfi - nop.m 0 - // y not NaN ? - (p9) fclass.m p8,p0=f9,0x3f - nop.i 0;; -} - -.pred.rel "mutex",p7,p8 -{.mfb - nop.m 0 - // if f8=Infinity or f9=Zero, return |f8| - (p7) fmerge.s f8=f0,f14 - (p7) br.ret.spnt b0 -} -{.mfb - nop.m 0 - // if f9=Infinity or f8=Zero, return |f9| - (p8) fmerge.s f8=f0,f15 - (p8) br.ret.spnt b0;; -} - -{ .mfi - nop.m 0 -// Identify Natvals, Infs, NaNs, and Zeros -// and return result - fclass.m.unc p7, p0 = f12, 0x1E7 - nop.i 0 -} -{.mfi - nop.m 0 - // z0=frsqrta(a) - frsqrta.s1 f8,p6=f12 - nop.i 0;; -} - -{.mfb - // get exponent of x^2+y^2 - getf.exp r3=f12 - // if special case, set f8 - (p7) mov f8=f12 - (p7) br.ret.spnt b0;; -} - - -{.mfi - nop.m 0 - // S0=a*z0 - (p6) fma.s1 f12=f12,f8,f0 - nop.i 0 -} -{.mfi - nop.m 0 - // H0=0.5*z0 - (p6) fma.s1 f10=f8,f7,f0 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // f6=5/2 - fma.s1 f6=f7,f1,f6 - nop.i 0 -} -{.mfi - nop.m 0 - // f11=3/2 - fma.s1 f11=f7,f1,f1 - nop.i 0;; -} - -{.mfi - nop.m 0 - // d=0.5-S0*H0 - (p6) fnma.s1 f7=f12,f10,f7 - nop.i 0;; -} - -{.mfi - nop.m 0 - // P01=d+1 - (p6) fma.s1 f10=f1,f7,f1 - nop.i 0 -} -{.mfi - nop.m 0 - // P23=5/2*d+3/2 - (p6) fma.s1 f11=f6,f7,f11 - nop.i 0;; -} -{.mfi - nop.m 0 - // d2=d*d - (p6) fma.s1 f7=f7,f7,f0 - nop.i 0;; -} - - -{.mfi - // Is x^2 + y^2 well less than the overflow - // threshold? - (p6) cmp.lt.unc p7, p8 = r3,r2 - // P=P01+d2*P23 - (p6) fma.s1 f10=f7,f11,f10 - nop.i 0;; -} - -{.mfb - nop.m 0 - // S=P*S0 - fma.s.s0 f8=f10,f12,f0 - // No overflow in this case - (p7) br.ret.sptk b0;; -} - -{ .mfi - nop.m 0 -(p8) fsetc.s2 0x7F,0x42 - // Possible overflow path, must detect by - // Setting widest range exponent with prevailing - // rounding mode. - nop.i 0 ;; -} - - -{ .mfi - // bias+0x400 (bias+EMAX+1) - (p8) mov r2=0x1007f - // S=P*S0 - (p8) fma.s.s2 f12=f10,f12,f0 - nop.i 0 ;; -} -{ .mfi -(p8) setf.exp f11 = r2 -(p8) fsetc.s2 0x7F,0x40 -// Restore Original Mode in S2 - nop.i 0 ;; -} -{ .mfi - nop.m 0 -(p8) fcmp.lt.unc.s1 p9, p10 = f12, f11 - nop.i 0 ;; -} -{ .mib - nop.m 0 - mov GR_Parameter_TAG = 47 - // No overflow -(p9) br.ret.sptk b0;; -} -GLOBAL_IEEE754_END(hypotf) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mii - add GR_Parameter_Y=-32,sp // Parameter 2 value - mov GR_Parameter_TAG = 47 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = FR_Y,16 // Store Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_hypotl.S b/sysdeps/ia64/fpu/e_hypotl.S deleted file mode 100644 index 07bb6860ed..0000000000 --- a/sysdeps/ia64/fpu/e_hypotl.S +++ /dev/null @@ -1,475 +0,0 @@ -.file "hypotl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 02/02/00 hand-optimized -// 04/04/00 Unwind support added -// 06/20/00 new version -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -//********************************************************************* -// ___________ -// Function: hypotl(x,y) = |(x^2 + y^2) = for double extended values -// x and y -// Also provides cabsl functionality. -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f9 (Input) -// f6 -f15, f32-f34 -// -// General Purpose Registers: -// r2-r3 (Scratch) -// r32-r36 (Locals) -// r37-r40 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6 - p10 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// All faults and exceptions should be raised correctly. -// Overflow can occur. -// hypotl(Infinity and anything) = +Infinity -// hypotl(QNaN and anything) = QNaN -// hypotl(SNaN and anything ) = QNaN -// -//********************************************************************* -// -// Implementation: -// x2 = x * x in double-extended -// y2 = y * y in double-extended -// temp = x2 + y2 in double-extended -// sqrt(temp) rounded to double extended -// -//********************************************************************* - -GR_SAVE_PFS = r33 -GR_SAVE_B0 = r34 -GR_SAVE_GP = r35 -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -GR_Parameter_TAG = r39 - -FR_X = f32 -FR_Y = f33 -FR_RESULT = f8 - -.section .text - -LOCAL_LIBM_ENTRY(cabsl) -LOCAL_LIBM_END(cabsl) - -GLOBAL_IEEE754_ENTRY(hypotl) -{.mfi - alloc r32= ar.pfs,0,4,4,0 - // Compute x*x - fma.s1 f10=f8,f8,f0 - // r2=bias-1 - mov r2=0xfffe -} -{.mfi - nop.m 0 - // y*y - fma.s1 f11=f9,f9,f0 - nop.i 0;; -} - -{ .mfi - nop.m 0 -// Check if x is an Inf - if so return Inf even -// if y is a NaN (C9X) - fclass.m.unc p7, p6 = f8, 0x023 - nop.i 0 -} -{.mfi - nop.m 0 - // if possible overflow, copy f8 to f32 - // set Denormal, if necessary - // (p8) - fma.s0 f32=f8,f1,f0 - nop.i 0;; -} -{ .mfi - nop.m 0 -// Check if y is an Inf - if so return Inf even -// if x is a NaN (C9X) - fclass.m.unc p8, p9 = f9, 0x023 - nop.i 0 -} -{ .mfi - nop.m 999 -// For x=inf, multiply y by 1 to raise invalid on y an SNaN -// (p7) fma.s0 f9=f9,f1,f0 - // copy f9 to f33; set Denormal, if necessary - fma.s0 f33=f9,f1,f0 - nop.i 0;; -} -{.mfi - nop.m 0 - // is y Zero ? - (p6) fclass.m p6,p0=f9,0x7 - nop.i 0;; -} - -{.mfi - // f7=0.5 - setf.exp f7=r2 - // a=x2+y2 - fma.s1 f12=f10,f1,f11 - nop.i 0 -} -{.mfi - mov r2=0x408c //0000 - // dx=x*x-x2 - fms.s1 f13=f8,f8,f10 - nop.i 0;; -} -{.mfi - nop.m 0 - // is x Zero ? - (p9) fclass.m p9,p0=f8,0x7 - shl r2=r2,16 -} -{.mfi - nop.m 0 - // dy=y*y-y2 - fms.s1 f14=f9,f9,f11 - nop.i 0;; -} - -{.mfi - nop.m 0 - // x not NaN ? - (p6) fclass.m p7,p0=f8,0x3f - nop.i 0 -} -{.mfi - nop.m 0 - // f6=2 - fma.s1 f6=f1,f1,f1 - nop.i 0;; -} - -{.mfi - nop.m 0 - // f34=min(x2,y2) - famin.s1 f34=f10,f11 - nop.i 0 -} -{.mfb - nop.m 0 - // f10=max(x2,y2) - famax.s1 f10=f11,f10 - nop.b 0;; // -} - -{.mfi - nop.m 0 - // y not NaN ? - (p9) fclass.m p8,p0=f9,0x3f - nop.i 0;; -} -{.mfb - // f9=35/8 - setf.s f9=r2 - // if f8=Infinity or f9=Zero, return |f8| - (p7) fmerge.s f8=f0,f32 - (p7) br.ret.spnt b0;; -} - - -{.mfi - nop.m 0 - // z0=frsqrta(a) - frsqrta.s1 f8,p6=f12 - nop.i 0;; -} -{ .mfi - nop.m 0 -// Identify Natvals, Infs, NaNs, and Zeros -// and return result - fclass.m.unc p7, p0 = f12, 0x1E7 - nop.i 0 -} -{.mfi - // get exponent of x^2+y^2 - getf.exp r3=f12 - // dxy=dx+dy - fma.s1 f13=f13,f1,f14 - nop.i 0;; -} - -{.mfb - // 2*emax-2 - mov r2=0x17ffb - // if f9=Infinity or f8=Zero, return |f9| - (p8) fmerge.s f8=f0,f33 - (p8) br.ret.spnt b0 -} -{.mfi - nop.m 0 - // dd=a-max(x2,y2) - fnma.s1 f10=f10,f1,f12 - nop.i 0;; -} - -{.mfi - nop.m 0 - // S0=a*z0 - (p6) fma.s1 f14=f12,f8,f0 - nop.i 0 -} -{.mfi - nop.m 0 - // H0=0.5*z0 - (p6) fma.s1 f15=f8,f7,f0 - nop.i 0;; -} - -{.mfb - nop.m 0 - // if special case, set f8 - (p7) mov f8=f12 - (p7) br.ret.spnt b0 -} -{.mfi - nop.m 0 - // da=min(x2,y2)-dd - fnma.s1 f10=f10,f1,f34 - nop.i 0;; -} -{.mfi - nop.m 0 - // f6=5/2 - fma.s1 f6=f7,f1,f6 - nop.i 0 -} -{.mfi - nop.m 0 - // f11=3/2 - fma.s1 f11=f7,f1,f1 - nop.i 0;; -} - -{.mfi - nop.m 0 - // d=0.5-S0*H0 - (p6) fnma.s1 f7=f14,f15,f7 - nop.i 0;; -} - -{.mfi - nop.m 0 - // P1=3/2*d+1 - (p6) fma.s1 f11=f11,f7,f1 - nop.i 0 -} -{.mfi - nop.m 0 - // P2=35/8*d+5/2 - (p6) fma.s1 f9=f9,f7,f6 - nop.i 0;; -} -{.mfi - nop.m 0 - // d2=d*d - (p6) fma.s1 f34=f7,f7,f0 - nop.i 0;; -} - -{.mfi - nop.m 0 - // T0=d*S0 - (p6) fma.s1 f6=f7,f14,f0 - nop.i 0 -} -{.mfi - nop.m 0 - // G0=d*H0 - (p6) fma.s1 f7=f7,f15,f0 - nop.i 0;; -} -{.mfi - nop.m 0 - // P=d2*P2+P1 - (p6) fma.s1 f11=f34,f9,f11 - nop.i 0;; -} - -{.mfi - nop.m 0 - // S1=p*T0+S0 - (p6) fma.s1 f14=f11,f6,f14 - nop.i 0 -} -{.mfi - nop.m 0 - // H1=p*G0+H0 - (p6) fma.s1 f15=f11,f7,f15 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // e1=a-S1*S1 - (p6) fnma.s1 f7=f14,f14,f12 - nop.i 0 -} -{.mfi - // Is x^2 + y^2 well less than the overflow - // threshold? - (p6) cmp.lt.unc p7, p8 = r3,r2 - // c=dxy+da - (p6) fma.s1 f13=f13,f1,f10 - nop.i 0;; -} - -{.mfi - nop.m 0 - // e=e1+c - (p6) fma.s1 f13=f7,f1,f13 - nop.i 0;; -} - -{.mfb - nop.m 0 - // S=e*H1+S1 - fma.s0 f8=f13,f15,f14 - // No overflow in this case - (p7) br.ret.sptk b0;; -} - -{ .mfi - nop.m 0 -(p8) fsetc.s2 0x7F,0x42 - // Possible overflow path, must detect by - // Setting widest range exponent with prevailing - // rounding mode. - nop.i 0 ;; -} - - -{ .mfi - // bias+0x4000 (bias+EMAX+1) - (p8) mov r2=0x13fff - // S=e*H1+S1 - (p8) fma.s2 f12=f13,f15,f14 - nop.i 0 ;; -} -{ .mfi -(p8) setf.exp f11 = r2 -(p8) fsetc.s2 0x7F,0x40 -// Restore Original Mode in S2 - nop.i 0 ;; -} -{ .mfi - nop.m 0 -(p8) fcmp.lt.unc.s1 p9, p10 = f12, f11 - nop.i 0 ;; -} -{ .mib - nop.m 0 - mov GR_Parameter_TAG = 45; - // No overflow -(p9) br.ret.sptk b0;; -} -GLOBAL_IEEE754_END(hypotl) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; -LOCAL_LIBM_END(__libm_error_region#) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_ilogbl.S b/sysdeps/ia64/fpu/e_ilogbl.S deleted file mode 100644 index 8d67d4fb31..0000000000 --- a/sysdeps/ia64/fpu/e_ilogbl.S +++ /dev/null @@ -1,268 +0,0 @@ -.file "ilogbl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/03/00 Initial version -// 05/26/00 Fix bug when x a double-extended denormal; -// if x=0 call error routine, per C9X -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 01/20/01 Fixed result for x=0 -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/20/03 Improved performance -// -// API -//============================================================== -// int ilogbl( long double x ); -// -// Overview of operation -//============================================================== -// The ilogbl function extracts the exponent of x as an integer -// and returns it in r8 -// -// ilogbl is similar to logbl but differs in the following ways: -// +-inf -// ilogbl: returns INT_MAX -// logbl: returns +inf -// Nan returns FP_LOGBNAN (which is either INT_MAX or INT_MIN) -// ilogbl: returns INT_MAX (7fffffff) -// logbl: returns QNAN (quietized SNAN) -// 0 returns FP_ILOGB0 (which is either INT_MIN or -INT_MAX) -// ilogbl: returns -INT_MAX (80000001) -// logbl: returns -inf, raises the divide-by-zero exception, -// and calls libm_error_support to set domain error -// -// Registers used -//============================================================== -// general registers used: -// r26 -> r39 -// r36 -> r39 used as parameters to error path -// -// predicate registers used: -// p6 -> p10 -// floating-point registers used: -// f9, f10, f11 -// f8, input - -rExpBias = r26 -rExpMask = r27 -rSignexp_x = r28 -rExp_x = r29 -rIntMax = r30 -rExp_2to64 = r31 - -GR_SAVE_PFS = r32 -rTrialResult = r33 -GR_SAVE_B0 = r34 -GR_SAVE_GP = r35 - -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -GR_Parameter_TAG = r39 - -fTmp = f9 -fNorm_x = f10 -f2to64 = f11 - -.section .text -GLOBAL_LIBM_ENTRY(__ieee754_ilogbl) - -// X NORMAL -// TrueExp_x = exp(f8) - 0xffff -// r8 = TrueExp_x -{ .mfi - getf.exp rSignexp_x = f8 - fclass.m p8,p0 = f8, 0x0b // Test for x unorm - mov rExpBias = 0xffff // Exponent bias -} -{ .mfi - nop.m 0 - fnorm.s1 fNorm_x = f8 - mov rExpMask = 0x1ffff // Exponent mask -} -;; - -// Form signexp of 2^64 in case need to scale denormal -{ .mfb - mov rExp_2to64 = 0x1003f - fclass.m p6,p9 = f8, 0x1e3 // Test x natval, nan, inf -(p8) br.cond.spnt ILOGB_DENORM // Branch if x unorm -} -;; - -ILOGB_COMMON: -// Return here from ILOGB_DENORM -{ .mfi - and rExp_x = rSignexp_x, rExpMask // Get biased exponent - fclass.m p7,p10 = f8, 0x07 // Test x zero - nop.i 0 -} -{ .mlx - nop.m 0 - movl rIntMax = 0x000000007fffffff // Form INT_MAX -} -;; - -.pred.rel "mutex",p6,p9 -{ .mfi -(p9) sub r8 = rExp_x, rExpBias // Get true exponent for normal path -(p6) fma.s0 fTmp = f8, f8, f0 // Dummy to set Invalid flag -(p6) mov r8 = rIntMax // If nan, inf, return INT_MAX -} -{ .mbb - nop.m 0 -(p7) br.cond.spnt ILOGB_ZERO // Branch if x zero -(p10) br.ret.sptk b0 // Exit if x not zero -} -;; - - -ILOGB_DENORM: -// Form 2^64 in case need to scale denormal -// Check to see if double-extended denormal -{ .mfi - setf.exp f2to64 = rExp_2to64 - fclass.m p8,p0 = fNorm_x, 0x0b - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - nop.i 0 -} -;; - -// If double-extended denormal add 64 to exponent bias for scaling -// If double-extended denormal form x * 2^64 which is normal -{ .mfi -(p8) add rExpBias = 64, rExpBias -(p8) fmpy.s1 fNorm_x = fNorm_x, f2to64 - nop.i 0 -} -;; - -// Logic is the same as normal path but use normalized input -{ .mib - getf.exp rSignexp_x = fNorm_x - nop.i 0 - br.cond.sptk ILOGB_COMMON // Return to main path -} -;; - -ILOGB_ZERO: -// Here if x zero -// Return INT_MIN, call error support - -{ .mlx - alloc r32=ar.pfs,1,3,4,0 - movl rTrialResult = 0x0000000080000000 -} -{ .mib - mov GR_Parameter_TAG = 156 // Error code - nop.i 0 - br.cond.sptk __libm_error_region // Call error support -} -;; - -GLOBAL_LIBM_END(__ieee754_ilogbl) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfe [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfe [GR_Parameter_X] = f8 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfe [GR_Parameter_Y] = f9 // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - mov r8 = rTrialResult -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_lgamma_r.c b/sysdeps/ia64/fpu/e_lgamma_r.c deleted file mode 100644 index cb9efbfe02..0000000000 --- a/sysdeps/ia64/fpu/e_lgamma_r.c +++ /dev/null @@ -1,71 +0,0 @@ -/* file: lgamma_r.c */ - - -// Copyright (c) 2002 Intel Corporation -// All rights reserved. -// -// Contributed 2002 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// - -// History -//============================================================== -// 02/04/02: Initial version -// 02/22/02: Removed lgammaf_r, gammaf_r -/* -// FUNCTIONS: double lgamma_r(double x, int* signgam) -// double gamma_r(double x, int* signgam) -// Natural logarithm of GAMMA function -*/ - -#include "libm_support.h" - - -extern double __libm_lgamma(double /*x*/, int* /*signgam*/, int /*signgamsz*/); - - -double __ieee754_lgamma_r(double x, int* signgam) -{ - return __libm_lgamma(x, signgam, sizeof(*signgam)); -} -weak_alias (__ieee754_lgamma_r, lgamma_r) - -#ifndef _LIBC -double __ieee754_gamma_r(double x, int* signgam) -{ - return __libm_lgamma(x, signgam, sizeof(*signgam)); -} -weak_alias (__ieee754_gamma_r, gamma_r) -#endif diff --git a/sysdeps/ia64/fpu/e_lgammaf_r.c b/sysdeps/ia64/fpu/e_lgammaf_r.c deleted file mode 100644 index 44911aeabd..0000000000 --- a/sysdeps/ia64/fpu/e_lgammaf_r.c +++ /dev/null @@ -1,71 +0,0 @@ -/* file: lgammaf_r.c */ - - -// Copyright (c) 2002 Intel Corporation -// All rights reserved. -// -// Contributed 2002 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// - -// History -//============================================================== -// 02/04/02: Initial version -// 02/22/02: Removed lgamma_r, gamma_r -/* -// FUNCTIONS: float lgammaf_r(float x, int* signgam) -// float gammaf_r(float x, int* signgam) -// Natural logarithm of GAMMA function -*/ - -#include "libm_support.h" - - -extern float __libm_lgammaf(float /*x*/, int* /*signgam*/, int /*signgamsz*/); - - -float __ieee754_lgammaf_r(float x, int* signgam) -{ - return __libm_lgammaf(x, signgam, sizeof(*signgam)); -} -weak_alias (__ieee754_lgammaf_r, lgammaf_r) - -#ifndef _LIBC -float __ieee754_gammaf_r(float x, int* signgam) -{ - return __libm_lgammaf(x, signgam, sizeof(*signgam)); -} -weak_alias (__ieee754_gammaf_r, gammaf_r) -#endif diff --git a/sysdeps/ia64/fpu/e_lgammal_r.c b/sysdeps/ia64/fpu/e_lgammal_r.c deleted file mode 100644 index 4451201b77..0000000000 --- a/sysdeps/ia64/fpu/e_lgammal_r.c +++ /dev/null @@ -1,70 +0,0 @@ -/* file: lgammal_r.c */ - - -// Copyright (c) 2002 Intel Corporation -// All rights reserved. -// -// Contributed 2002 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// - -// History -//============================================================== -// 08/15/02: Initial version -/* -// FUNCTIONS: long double lgammal_r(long double x, int* signgam) -// long double gammal_r(long double x, int* signgam) -// Natural logarithm of GAMMA function -*/ - -#include "libm_support.h" - - -extern double __libm_lgammal(long double /*x*/, int* /*signgam*/, int /*signgamsz*/); - - -long double __ieee754_lgammal_r(long double x, int* signgam) -{ - return __libm_lgammal(x, signgam, sizeof(*signgam)); -} -weak_alias (__ieee754_lgammal_r, lgammal_r) - -#ifndef _LIBC -long double __ieee754_gammal_r(long double x, int* signgam) -{ - return __libm_lgammal(x, signgam, sizeof(*signgam)); -} -weak_alias (__ieee754_gammal_r, gammal_r) -#endif diff --git a/sysdeps/ia64/fpu/e_log.S b/sysdeps/ia64/fpu/e_log.S deleted file mode 100644 index 50eed956da..0000000000 --- a/sysdeps/ia64/fpu/e_log.S +++ /dev/null @@ -1,1728 +0,0 @@ -.file "log.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 06/16/00 Updated table to be rounded correctly -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 08/17/00 Improved speed of main path by 5 cycles -// Shortened path for x=1.0 -// 01/09/01 Improved speed, fixed flags for neg denormals -// 05/20/02 Cleaned up namespace and sf0 syntax -// 05/23/02 Modified algorithm. Now only one polynomial is used -// for |x-1| >= 1/256 and for |x-1| < 1/256 -// 12/11/02 Improved performance for Itanium 2 -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// double log(double) -// double log10(double) -// -// -// Overview of operation -//============================================================== -// Background -// ---------- -// -// This algorithm is based on fact that -// log(a b) = log(a) + log(b). -// In our case we have x = 2^N f, where 1 <= f < 2. -// So -// log(x) = log(2^N f) = log(2^N) + log(f) = n*log(2) + log(f) -// -// To calculate log(f) we do following -// log(f) = log(f * frcpa(f) / frcpa(f)) = -// = log(f * frcpa(f)) + log(1/frcpa(f)) -// -// According to definition of IA-64's frcpa instruction it's a -// floating point that approximates 1/f using a lookup on the -// top of 8 bits of the input number's significand with relative -// error < 2^(-8.886). So we have following -// -// |(1/f - frcpa(f)) / (1/f))| = |1 - f*frcpa(f)| < 1/256 -// -// and -// -// log(f) = log(f * frcpa(f)) + log(1/frcpa(f)) = -// = log(1 + r) + T -// -// The first value can be computed by polynomial P(r) approximating -// log(1 + r) on |r| < 1/256 and the second is precomputed tabular -// value defined by top 8 bit of f. -// -// Finally we have that log(x) ~ (N*log(2) + T) + P(r) -// -// Note that if input argument is close to 1.0 (in our case it means -// that |1 - x| < 1/256) we can use just polynomial approximation -// because x = 2^0 * f = f = 1 + r and -// log(x) = log(1 + r) ~ P(r) -// -// -// To compute log10(x) we use the simple identity -// -// log10(x) = log(x)/log(10) -// -// so we have that -// -// log10(x) = (N*log(2) + T + log(1+r)) / log(10) = -// = N*(log(2)/log(10)) + (T/log(10)) + log(1 + r)/log(10) -// -// -// Implementation -// -------------- -// It can be seen that formulas for log and log10 differ from one another -// only by coefficients and tabular values. Namely as log as log10 are -// calculated as (N*L1 + T) + L2*Series(r) where in case of log -// L1 = log(2) -// T = log(1/frcpa(x)) -// L2 = 1.0 -// and in case of log10 -// L1 = log(2)/log(10) -// T = log(1/frcpa(x))/log(10) -// L2 = 1.0/log(10) -// -// So common code with two different entry points those set pointers -// to the base address of coresponding data sets containing values -// of L2,T and prepare integer representation of L1 needed for following -// setf instruction. -// -// Note that both log and log10 use common approximation polynomial -// it means we need only one set of coefficients of approximation. -// -// -// 1. |x-1| >= 1/256 -// InvX = frcpa(x) -// r = InvX*x - 1 -// P(r) = r*((r*A3 - A2) + r^4*((A4 + r*A5) + r^2*(A6 + r*A7)), -// all coefficients are calculated in quad and rounded to double -// precision. A7,A6,A5,A4 are stored in memory whereas A3 and A2 -// created with setf. -// -// N = float(n) where n is true unbiased exponent of x -// -// T is tabular value of log(1/frcpa(x)) calculated in quad precision -// and represented by two floating-point numbers 64-bit Thi and 32-bit Tlo. -// To load Thi,Tlo we get bits from 55 to 62 of register format significand -// as index and calculate two addresses -// ad_Thi = Thi_table_base_addr + 8 * index -// ad_Tlo = Tlo_table_base_addr + 4 * index -// -// L2 (1.0 or 1.0/log(10) depending on function) is calculated in quad -// precision and rounded to double extended; it's loaded from memory. -// -// L1 (log(2) or log10(2) depending on function) is calculated in quad -// precision and represented by two floating-point 64-bit numbers L1hi,L1lo -// stored in memory. -// -// And final result = ((L1hi*N + Thi) + (N*L1lo + Tlo)) + L2*P(r) -// -// -// 2. |x-1| < 1/256 -// r = x - 1 -// P(r) = r*((r*A3 - A2) + r^4*((A4 + r*A5) + r^2*(A6 + r*A7)), -// A7,A6,A5A4,A3,A2 are the same as in case |x-1| >= 1/256 -// -// And final results -// log(x) = P(r) -// log10(x) = L2*P(r) -// -// 3. How we define is input argument such that |x-1| < 1/256 or not. -// -// To do it we analyze biased exponent and integer representation of -// input argument -// -// a) First we test is biased exponent equal to 0xFFFE or 0xFFFF (i.e. -// we test is 0.5 <= x < 2). This comparison can be performed using -// unsigned version of cmp instruction in such a way -// biased_exponent_of_x - 0xFFFE < 2 -// -// -// b) Second (in case when result of a) is true) we need to compare x -// with 1-1/256 and 1+1/256 or in double precision memory representation -// with 0x3FEFE00000000000 and 0x3FF0100000000000 correspondingly. -// This comparison can be made like in a), using unsigned -// version of cmp i.e. ix - 0x3FEFE00000000000 < 0x0000300000000000. -// 0x0000300000000000 is difference between 0x3FF0100000000000 and -// 0x3FEFE00000000000 -// -// Note: NaT, any NaNs, +/-INF, +/-0, negatives and unnormalized numbers are -// filtered and processed on special branches. -// - -// -// Special values -//============================================================== -// -// log(+0) = -inf -// log(-0) = -inf -// -// log(+qnan) = +qnan -// log(-qnan) = -qnan -// log(+snan) = +qnan -// log(-snan) = -qnan -// -// log(-n) = QNAN Indefinite -// log(-inf) = QNAN Indefinite -// -// log(+inf) = +inf -// -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f7 -> f15, f32 -> f42 -// -// General registers used: -// r8 -> r11 -// r14 -> r23 -// -// Predicate registers used: -// p6 -> p15 - -// Assembly macros -//============================================================== -GR_TAG = r8 -GR_ad_1 = r8 -GR_ad_2 = r9 -GR_Exp = r10 -GR_N = r11 - -GR_x = r14 -GR_dx = r15 -GR_NearOne = r15 -GR_xorg = r16 -GR_mask = r16 -GR_05 = r17 -GR_A3 = r18 -GR_Sig = r19 -GR_Ind = r19 -GR_Nm1 = r20 -GR_bias = r21 -GR_ad_3 = r22 -GR_rexp = r23 - - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - - -FR_NormX = f7 -FR_RcpX = f9 -FR_tmp = f9 -FR_r = f10 -FR_r2 = f11 -FR_r4 = f12 -FR_N = f13 -FR_Ln2hi = f14 -FR_Ln2lo = f15 - -FR_A7 = f32 -FR_A6 = f33 -FR_A5 = f34 -FR_A4 = f35 -FR_A3 = f36 -FR_A2 = f37 - -FR_Thi = f38 -FR_NxLn2hipThi = f38 -FR_NxLn2pT = f38 -FR_Tlo = f39 -FR_NxLn2lopTlo = f39 - -FR_InvLn10 = f40 -FR_A32 = f41 -FR_A321 = f42 - - -FR_Y = f1 -FR_X = f10 -FR_RESULT = f8 - - -// Data -//============================================================== -RODATA -.align 16 - -LOCAL_OBJECT_START(log_data) -// coefficients of polynomial approximation -data8 0x3FC2494104381A8E // A7 -data8 0xBFC5556D556BBB69 // A6 -// -// two parts of ln(2) -data8 0x3FE62E42FEF00000,0x3DD473DE6AF278ED -// -data8 0x8000000000000000,0x3FFF // 1.0 -// -data8 0x3FC999999988B5E9 // A5 -data8 0xBFCFFFFFFFF6FFF5 // A4 -// -// hi parts of ln(1/frcpa(1+i/256)), i=0...255 -data8 0x3F60040155D5889D // 0 -data8 0x3F78121214586B54 // 1 -data8 0x3F841929F96832EF // 2 -data8 0x3F8C317384C75F06 // 3 -data8 0x3F91A6B91AC73386 // 4 -data8 0x3F95BA9A5D9AC039 // 5 -data8 0x3F99D2A8074325F3 // 6 -data8 0x3F9D6B2725979802 // 7 -data8 0x3FA0C58FA19DFAA9 // 8 -data8 0x3FA2954C78CBCE1A // 9 -data8 0x3FA4A94D2DA96C56 // 10 -data8 0x3FA67C94F2D4BB58 // 11 -data8 0x3FA85188B630F068 // 12 -data8 0x3FAA6B8ABE73AF4C // 13 -data8 0x3FAC441E06F72A9E // 14 -data8 0x3FAE1E6713606D06 // 15 -data8 0x3FAFFA6911AB9300 // 16 -data8 0x3FB0EC139C5DA600 // 17 -data8 0x3FB1DBD2643D190B // 18 -data8 0x3FB2CC7284FE5F1C // 19 -data8 0x3FB3BDF5A7D1EE64 // 20 -data8 0x3FB4B05D7AA012E0 // 21 -data8 0x3FB580DB7CEB5701 // 22 -data8 0x3FB674F089365A79 // 23 -data8 0x3FB769EF2C6B568D // 24 -data8 0x3FB85FD927506A47 // 25 -data8 0x3FB9335E5D594988 // 26 -data8 0x3FBA2B0220C8E5F4 // 27 -data8 0x3FBB0004AC1A86AB // 28 -data8 0x3FBBF968769FCA10 // 29 -data8 0x3FBCCFEDBFEE13A8 // 30 -data8 0x3FBDA727638446A2 // 31 -data8 0x3FBEA3257FE10F79 // 32 -data8 0x3FBF7BE9FEDBFDE5 // 33 -data8 0x3FC02AB352FF25F3 // 34 -data8 0x3FC097CE579D204C // 35 -data8 0x3FC1178E8227E47B // 36 -data8 0x3FC185747DBECF33 // 37 -data8 0x3FC1F3B925F25D41 // 38 -data8 0x3FC2625D1E6DDF56 // 39 -data8 0x3FC2D1610C868139 // 40 -data8 0x3FC340C59741142E // 41 -data8 0x3FC3B08B6757F2A9 // 42 -data8 0x3FC40DFB08378003 // 43 -data8 0x3FC47E74E8CA5F7C // 44 -data8 0x3FC4EF51F6466DE4 // 45 -data8 0x3FC56092E02BA516 // 46 -data8 0x3FC5D23857CD74D4 // 47 -data8 0x3FC6313A37335D76 // 48 -data8 0x3FC6A399DABBD383 // 49 -data8 0x3FC70337DD3CE41A // 50 -data8 0x3FC77654128F6127 // 51 -data8 0x3FC7E9D82A0B022D // 52 -data8 0x3FC84A6B759F512E // 53 -data8 0x3FC8AB47D5F5A30F // 54 -data8 0x3FC91FE49096581B // 55 -data8 0x3FC981634011AA75 // 56 -data8 0x3FC9F6C407089664 // 57 -data8 0x3FCA58E729348F43 // 58 -data8 0x3FCABB55C31693AC // 59 -data8 0x3FCB1E104919EFD0 // 60 -data8 0x3FCB94EE93E367CA // 61 -data8 0x3FCBF851C067555E // 62 -data8 0x3FCC5C0254BF23A5 // 63 -data8 0x3FCCC000C9DB3C52 // 64 -data8 0x3FCD244D99C85673 // 65 -data8 0x3FCD88E93FB2F450 // 66 -data8 0x3FCDEDD437EAEF00 // 67 -data8 0x3FCE530EFFE71012 // 68 -data8 0x3FCEB89A1648B971 // 69 -data8 0x3FCF1E75FADF9BDE // 70 -data8 0x3FCF84A32EAD7C35 // 71 -data8 0x3FCFEB2233EA07CD // 72 -data8 0x3FD028F9C7035C1C // 73 -data8 0x3FD05C8BE0D9635A // 74 -data8 0x3FD085EB8F8AE797 // 75 -data8 0x3FD0B9C8E32D1911 // 76 -data8 0x3FD0EDD060B78080 // 77 -data8 0x3FD122024CF0063F // 78 -data8 0x3FD14BE2927AECD4 // 79 -data8 0x3FD180618EF18ADF // 80 -data8 0x3FD1B50BBE2FC63B // 81 -data8 0x3FD1DF4CC7CF242D // 82 -data8 0x3FD214456D0EB8D4 // 83 -data8 0x3FD23EC5991EBA49 // 84 -data8 0x3FD2740D9F870AFB // 85 -data8 0x3FD29ECDABCDFA03 // 86 -data8 0x3FD2D46602ADCCEE // 87 -data8 0x3FD2FF66B04EA9D4 // 88 -data8 0x3FD335504B355A37 // 89 -data8 0x3FD360925EC44F5C // 90 -data8 0x3FD38BF1C3337E74 // 91 -data8 0x3FD3C25277333183 // 92 -data8 0x3FD3EDF463C1683E // 93 -data8 0x3FD419B423D5E8C7 // 94 -data8 0x3FD44591E0539F48 // 95 -data8 0x3FD47C9175B6F0AD // 96 -data8 0x3FD4A8B341552B09 // 97 -data8 0x3FD4D4F39089019F // 98 -data8 0x3FD501528DA1F967 // 99 -data8 0x3FD52DD06347D4F6 // 100 -data8 0x3FD55A6D3C7B8A89 // 101 -data8 0x3FD5925D2B112A59 // 102 -data8 0x3FD5BF406B543DB1 // 103 -data8 0x3FD5EC433D5C35AD // 104 -data8 0x3FD61965CDB02C1E // 105 -data8 0x3FD646A84935B2A1 // 106 -data8 0x3FD6740ADD31DE94 // 107 -data8 0x3FD6A18DB74A58C5 // 108 -data8 0x3FD6CF31058670EC // 109 -data8 0x3FD6F180E852F0B9 // 110 -data8 0x3FD71F5D71B894EF // 111 -data8 0x3FD74D5AEFD66D5C // 112 -data8 0x3FD77B79922BD37D // 113 -data8 0x3FD7A9B9889F19E2 // 114 -data8 0x3FD7D81B037EB6A6 // 115 -data8 0x3FD8069E33827230 // 116 -data8 0x3FD82996D3EF8BCA // 117 -data8 0x3FD85855776DCBFA // 118 -data8 0x3FD8873658327CCE // 119 -data8 0x3FD8AA75973AB8CE // 120 -data8 0x3FD8D992DC8824E4 // 121 -data8 0x3FD908D2EA7D9511 // 122 -data8 0x3FD92C59E79C0E56 // 123 -data8 0x3FD95BD750EE3ED2 // 124 -data8 0x3FD98B7811A3EE5B // 125 -data8 0x3FD9AF47F33D406B // 126 -data8 0x3FD9DF270C1914A7 // 127 -data8 0x3FDA0325ED14FDA4 // 128 -data8 0x3FDA33440224FA78 // 129 -data8 0x3FDA57725E80C382 // 130 -data8 0x3FDA87D0165DD199 // 131 -data8 0x3FDAAC2E6C03F895 // 132 -data8 0x3FDADCCC6FDF6A81 // 133 -data8 0x3FDB015B3EB1E790 // 134 -data8 0x3FDB323A3A635948 // 135 -data8 0x3FDB56FA04462909 // 136 -data8 0x3FDB881AA659BC93 // 137 -data8 0x3FDBAD0BEF3DB164 // 138 -data8 0x3FDBD21297781C2F // 139 -data8 0x3FDC039236F08818 // 140 -data8 0x3FDC28CB1E4D32FC // 141 -data8 0x3FDC4E19B84723C1 // 142 -data8 0x3FDC7FF9C74554C9 // 143 -data8 0x3FDCA57B64E9DB05 // 144 -data8 0x3FDCCB130A5CEBAF // 145 -data8 0x3FDCF0C0D18F326F // 146 -data8 0x3FDD232075B5A201 // 147 -data8 0x3FDD490246DEFA6B // 148 -data8 0x3FDD6EFA918D25CD // 149 -data8 0x3FDD9509707AE52F // 150 -data8 0x3FDDBB2EFE92C554 // 151 -data8 0x3FDDEE2F3445E4AE // 152 -data8 0x3FDE148A1A2726CD // 153 -data8 0x3FDE3AFC0A49FF3F // 154 -data8 0x3FDE6185206D516D // 155 -data8 0x3FDE882578823D51 // 156 -data8 0x3FDEAEDD2EAC990C // 157 -data8 0x3FDED5AC5F436BE2 // 158 -data8 0x3FDEFC9326D16AB8 // 159 -data8 0x3FDF2391A21575FF // 160 -data8 0x3FDF4AA7EE03192C // 161 -data8 0x3FDF71D627C30BB0 // 162 -data8 0x3FDF991C6CB3B379 // 163 -data8 0x3FDFC07ADA69A90F // 164 -data8 0x3FDFE7F18EB03D3E // 165 -data8 0x3FE007C053C5002E // 166 -data8 0x3FE01B942198A5A0 // 167 -data8 0x3FE02F74400C64EA // 168 -data8 0x3FE04360BE7603AC // 169 -data8 0x3FE05759AC47FE33 // 170 -data8 0x3FE06B5F1911CF51 // 171 -data8 0x3FE078BF0533C568 // 172 -data8 0x3FE08CD9687E7B0E // 173 -data8 0x3FE0A10074CF9019 // 174 -data8 0x3FE0B5343A234476 // 175 -data8 0x3FE0C974C89431CD // 176 -data8 0x3FE0DDC2305B9886 // 177 -data8 0x3FE0EB524BAFC918 // 178 -data8 0x3FE0FFB54213A475 // 179 -data8 0x3FE114253DA97D9F // 180 -data8 0x3FE128A24F1D9AFF // 181 -data8 0x3FE1365252BF0864 // 182 -data8 0x3FE14AE558B4A92D // 183 -data8 0x3FE15F85A19C765B // 184 -data8 0x3FE16D4D38C119FA // 185 -data8 0x3FE18203C20DD133 // 186 -data8 0x3FE196C7BC4B1F3A // 187 -data8 0x3FE1A4A738B7A33C // 188 -data8 0x3FE1B981C0C9653C // 189 -data8 0x3FE1CE69E8BB106A // 190 -data8 0x3FE1DC619DE06944 // 191 -data8 0x3FE1F160A2AD0DA3 // 192 -data8 0x3FE2066D7740737E // 193 -data8 0x3FE2147DBA47A393 // 194 -data8 0x3FE229A1BC5EBAC3 // 195 -data8 0x3FE237C1841A502E // 196 -data8 0x3FE24CFCE6F80D9A // 197 -data8 0x3FE25B2C55CD5762 // 198 -data8 0x3FE2707F4D5F7C40 // 199 -data8 0x3FE285E0842CA383 // 200 -data8 0x3FE294294708B773 // 201 -data8 0x3FE2A9A2670AFF0C // 202 -data8 0x3FE2B7FB2C8D1CC0 // 203 -data8 0x3FE2C65A6395F5F5 // 204 -data8 0x3FE2DBF557B0DF42 // 205 -data8 0x3FE2EA64C3F97654 // 206 -data8 0x3FE3001823684D73 // 207 -data8 0x3FE30E97E9A8B5CC // 208 -data8 0x3FE32463EBDD34E9 // 209 -data8 0x3FE332F4314AD795 // 210 -data8 0x3FE348D90E7464CF // 211 -data8 0x3FE35779F8C43D6D // 212 -data8 0x3FE36621961A6A99 // 213 -data8 0x3FE37C299F3C366A // 214 -data8 0x3FE38AE2171976E7 // 215 -data8 0x3FE399A157A603E7 // 216 -data8 0x3FE3AFCCFE77B9D1 // 217 -data8 0x3FE3BE9D503533B5 // 218 -data8 0x3FE3CD7480B4A8A2 // 219 -data8 0x3FE3E3C43918F76C // 220 -data8 0x3FE3F2ACB27ED6C6 // 221 -data8 0x3FE4019C2125CA93 // 222 -data8 0x3FE4181061389722 // 223 -data8 0x3FE42711518DF545 // 224 -data8 0x3FE436194E12B6BF // 225 -data8 0x3FE445285D68EA69 // 226 -data8 0x3FE45BCC464C893A // 227 -data8 0x3FE46AED21F117FC // 228 -data8 0x3FE47A1527E8A2D3 // 229 -data8 0x3FE489445EFFFCCB // 230 -data8 0x3FE4A018BCB69835 // 231 -data8 0x3FE4AF5A0C9D65D7 // 232 -data8 0x3FE4BEA2A5BDBE87 // 233 -data8 0x3FE4CDF28F10AC46 // 234 -data8 0x3FE4DD49CF994058 // 235 -data8 0x3FE4ECA86E64A683 // 236 -data8 0x3FE503C43CD8EB68 // 237 -data8 0x3FE513356667FC57 // 238 -data8 0x3FE522AE0738A3D7 // 239 -data8 0x3FE5322E26867857 // 240 -data8 0x3FE541B5CB979809 // 241 -data8 0x3FE55144FDBCBD62 // 242 -data8 0x3FE560DBC45153C6 // 243 -data8 0x3FE5707A26BB8C66 // 244 -data8 0x3FE587F60ED5B8FF // 245 -data8 0x3FE597A7977C8F31 // 246 -data8 0x3FE5A760D634BB8A // 247 -data8 0x3FE5B721D295F10E // 248 -data8 0x3FE5C6EA94431EF9 // 249 -data8 0x3FE5D6BB22EA86F5 // 250 -data8 0x3FE5E6938645D38F // 251 -data8 0x3FE5F673C61A2ED1 // 252 -data8 0x3FE6065BEA385926 // 253 -data8 0x3FE6164BFA7CC06B // 254 -data8 0x3FE62643FECF9742 // 255 -// -// lo parts of ln(1/frcpa(1+i/256)), i=0...255 -data4 0x20E70672 // 0 -data4 0x1F60A5D0 // 1 -data4 0x218EABA0 // 2 -data4 0x21403104 // 3 -data4 0x20E9B54E // 4 -data4 0x21EE1382 // 5 -data4 0x226014E3 // 6 -data4 0x2095E5C9 // 7 -data4 0x228BA9D4 // 8 -data4 0x22932B86 // 9 -data4 0x22608A57 // 10 -data4 0x220209F3 // 11 -data4 0x212882CC // 12 -data4 0x220D46E2 // 13 -data4 0x21FA4C28 // 14 -data4 0x229E5BD9 // 15 -data4 0x228C9838 // 16 -data4 0x2311F954 // 17 -data4 0x221365DF // 18 -data4 0x22BD0CB3 // 19 -data4 0x223D4BB7 // 20 -data4 0x22A71BBE // 21 -data4 0x237DB2FA // 22 -data4 0x23194C9D // 23 -data4 0x22EC639E // 24 -data4 0x2367E669 // 25 -data4 0x232E1D5F // 26 -data4 0x234A639B // 27 -data4 0x2365C0E0 // 28 -data4 0x234646C1 // 29 -data4 0x220CBF9C // 30 -data4 0x22A00FD4 // 31 -data4 0x2306A3F2 // 32 -data4 0x23745A9B // 33 -data4 0x2398D756 // 34 -data4 0x23DD0B6A // 35 -data4 0x23DE338B // 36 -data4 0x23A222DF // 37 -data4 0x223164F8 // 38 -data4 0x23B4E87B // 39 -data4 0x23D6CCB8 // 40 -data4 0x220C2099 // 41 -data4 0x21B86B67 // 42 -data4 0x236D14F1 // 43 -data4 0x225A923F // 44 -data4 0x22748723 // 45 -data4 0x22200D13 // 46 -data4 0x23C296EA // 47 -data4 0x2302AC38 // 48 -data4 0x234B1996 // 49 -data4 0x2385E298 // 50 -data4 0x23175BE5 // 51 -data4 0x2193F482 // 52 -data4 0x23BFEA90 // 53 -data4 0x23D70A0C // 54 -data4 0x231CF30A // 55 -data4 0x235D9E90 // 56 -data4 0x221AD0CB // 57 -data4 0x22FAA08B // 58 -data4 0x23D29A87 // 59 -data4 0x20C4B2FE // 60 -data4 0x2381B8B7 // 61 -data4 0x23F8D9FC // 62 -data4 0x23EAAE7B // 63 -data4 0x2329E8AA // 64 -data4 0x23EC0322 // 65 -data4 0x2357FDCB // 66 -data4 0x2392A9AD // 67 -data4 0x22113B02 // 68 -data4 0x22DEE901 // 69 -data4 0x236A6D14 // 70 -data4 0x2371D33E // 71 -data4 0x2146F005 // 72 -data4 0x23230B06 // 73 -data4 0x22F1C77D // 74 -data4 0x23A89FA3 // 75 -data4 0x231D1241 // 76 -data4 0x244DA96C // 77 -data4 0x23ECBB7D // 78 -data4 0x223E42B4 // 79 -data4 0x23801BC9 // 80 -data4 0x23573263 // 81 -data4 0x227C1158 // 82 -data4 0x237BD749 // 83 -data4 0x21DDBAE9 // 84 -data4 0x23401735 // 85 -data4 0x241D9DEE // 86 -data4 0x23BC88CB // 87 -data4 0x2396D5F1 // 88 -data4 0x23FC89CF // 89 -data4 0x2414F9A2 // 90 -data4 0x2474A0F5 // 91 -data4 0x24354B60 // 92 -data4 0x23C1EB40 // 93 -data4 0x2306DD92 // 94 -data4 0x24353B6B // 95 -data4 0x23CD1701 // 96 -data4 0x237C7A1C // 97 -data4 0x245793AA // 98 -data4 0x24563695 // 99 -data4 0x23C51467 // 100 -data4 0x24476B68 // 101 -data4 0x212585A9 // 102 -data4 0x247B8293 // 103 -data4 0x2446848A // 104 -data4 0x246A53F8 // 105 -data4 0x246E496D // 106 -data4 0x23ED1D36 // 107 -data4 0x2314C258 // 108 -data4 0x233244A7 // 109 -data4 0x245B7AF0 // 110 -data4 0x24247130 // 111 -data4 0x22D67B38 // 112 -data4 0x2449F620 // 113 -data4 0x23BBC8B8 // 114 -data4 0x237D3BA0 // 115 -data4 0x245E8F13 // 116 -data4 0x2435573F // 117 -data4 0x242DE666 // 118 -data4 0x2463BC10 // 119 -data4 0x2466587D // 120 -data4 0x2408144B // 121 -data4 0x2405F0E5 // 122 -data4 0x22381CFF // 123 -data4 0x24154F9B // 124 -data4 0x23A4E96E // 125 -data4 0x24052967 // 126 -data4 0x2406963F // 127 -data4 0x23F7D3CB // 128 -data4 0x2448AFF4 // 129 -data4 0x24657A21 // 130 -data4 0x22FBC230 // 131 -data4 0x243C8DEA // 132 -data4 0x225DC4B7 // 133 -data4 0x23496EBF // 134 -data4 0x237C2B2B // 135 -data4 0x23A4A5B1 // 136 -data4 0x2394E9D1 // 137 -data4 0x244BC950 // 138 -data4 0x23C7448F // 139 -data4 0x2404A1AD // 140 -data4 0x246511D5 // 141 -data4 0x24246526 // 142 -data4 0x23111F57 // 143 -data4 0x22868951 // 144 -data4 0x243EB77F // 145 -data4 0x239F3DFF // 146 -data4 0x23089666 // 147 -data4 0x23EBFA6A // 148 -data4 0x23C51312 // 149 -data4 0x23E1DD5E // 150 -data4 0x232C0944 // 151 -data4 0x246A741F // 152 -data4 0x2414DF8D // 153 -data4 0x247B5546 // 154 -data4 0x2415C980 // 155 -data4 0x24324ABD // 156 -data4 0x234EB5E5 // 157 -data4 0x2465E43E // 158 -data4 0x242840D1 // 159 -data4 0x24444057 // 160 -data4 0x245E56F0 // 161 -data4 0x21AE30F8 // 162 -data4 0x23FB3283 // 163 -data4 0x247A4D07 // 164 -data4 0x22AE314D // 165 -data4 0x246B7727 // 166 -data4 0x24EAD526 // 167 -data4 0x24B41DC9 // 168 -data4 0x24EE8062 // 169 -data4 0x24A0C7C4 // 170 -data4 0x24E8DA67 // 171 -data4 0x231120F7 // 172 -data4 0x24401FFB // 173 -data4 0x2412DD09 // 174 -data4 0x248C131A // 175 -data4 0x24C0A7CE // 176 -data4 0x243DD4C8 // 177 -data4 0x24457FEB // 178 -data4 0x24DEEFBB // 179 -data4 0x243C70AE // 180 -data4 0x23E7A6FA // 181 -data4 0x24C2D311 // 182 -data4 0x23026255 // 183 -data4 0x2437C9B9 // 184 -data4 0x246BA847 // 185 -data4 0x2420B448 // 186 -data4 0x24C4CF5A // 187 -data4 0x242C4981 // 188 -data4 0x24DE1525 // 189 -data4 0x24F5CC33 // 190 -data4 0x235A85DA // 191 -data4 0x24A0B64F // 192 -data4 0x244BA0A4 // 193 -data4 0x24AAF30A // 194 -data4 0x244C86F9 // 195 -data4 0x246D5B82 // 196 -data4 0x24529347 // 197 -data4 0x240DD008 // 198 -data4 0x24E98790 // 199 -data4 0x2489B0CE // 200 -data4 0x22BC29AC // 201 -data4 0x23F37C7A // 202 -data4 0x24987FE8 // 203 -data4 0x22AFE20B // 204 -data4 0x24C8D7C2 // 205 -data4 0x24B28B7D // 206 -data4 0x23B6B271 // 207 -data4 0x24C77CB6 // 208 -data4 0x24EF1DCA // 209 -data4 0x24A4F0AC // 210 -data4 0x24CF113E // 211 -data4 0x2496BBAB // 212 -data4 0x23C7CC8A // 213 -data4 0x23AE3961 // 214 -data4 0x2410A895 // 215 -data4 0x23CE3114 // 216 -data4 0x2308247D // 217 -data4 0x240045E9 // 218 -data4 0x24974F60 // 219 -data4 0x242CB39F // 220 -data4 0x24AB8D69 // 221 -data4 0x23436788 // 222 -data4 0x24305E9E // 223 -data4 0x243E71A9 // 224 -data4 0x23C2A6B3 // 225 -data4 0x23FFE6CF // 226 -data4 0x2322D801 // 227 -data4 0x24515F21 // 228 -data4 0x2412A0D6 // 229 -data4 0x24E60D44 // 230 -data4 0x240D9251 // 231 -data4 0x247076E2 // 232 -data4 0x229B101B // 233 -data4 0x247B12DE // 234 -data4 0x244B9127 // 235 -data4 0x2499EC42 // 236 -data4 0x21FC3963 // 237 -data4 0x23E53266 // 238 -data4 0x24CE102D // 239 -data4 0x23CC45D2 // 240 -data4 0x2333171D // 241 -data4 0x246B3533 // 242 -data4 0x24931129 // 243 -data4 0x24405FFA // 244 -data4 0x24CF464D // 245 -data4 0x237095CD // 246 -data4 0x24F86CBD // 247 -data4 0x24E2D84B // 248 -data4 0x21ACBB44 // 249 -data4 0x24F43A8C // 250 -data4 0x249DB931 // 251 -data4 0x24A385EF // 252 -data4 0x238B1279 // 253 -data4 0x2436213E // 254 -data4 0x24F18A3B // 255 -LOCAL_OBJECT_END(log_data) - - -LOCAL_OBJECT_START(log10_data) -// coefficients of polynoimal approximation -data8 0x3FC2494104381A8E // A7 -data8 0xBFC5556D556BBB69 // A6 -// -// two parts of ln(2)/ln(10) -data8 0x3FD3441350900000, 0x3DCEF3FDE623E256 -// -data8 0xDE5BD8A937287195,0x3FFD // 1/ln(10) -// -data8 0x3FC999999988B5E9 // A5 -data8 0xBFCFFFFFFFF6FFF5 // A4 -// -// Hi parts of ln(1/frcpa(1+i/256))/ln(10), i=0...255 -data8 0x3F4BD27045BFD024 // 0 -data8 0x3F64E84E793A474A // 1 -data8 0x3F7175085AB85FF0 // 2 -data8 0x3F787CFF9D9147A5 // 3 -data8 0x3F7EA9D372B89FC8 // 4 -data8 0x3F82DF9D95DA961C // 5 -data8 0x3F866DF172D6372B // 6 -data8 0x3F898D79EF5EEDEF // 7 -data8 0x3F8D22ADF3F9579C // 8 -data8 0x3F9024231D30C398 // 9 -data8 0x3F91F23A98897D49 // 10 -data8 0x3F93881A7B818F9E // 11 -data8 0x3F951F6E1E759E35 // 12 -data8 0x3F96F2BCE7ADC5B4 // 13 -data8 0x3F988D362CDF359E // 14 -data8 0x3F9A292BAF010981 // 15 -data8 0x3F9BC6A03117EB97 // 16 -data8 0x3F9D65967DE3AB08 // 17 -data8 0x3F9F061167FC31E7 // 18 -data8 0x3FA05409E4F7819B // 19 -data8 0x3FA125D0432EA20D // 20 -data8 0x3FA1F85D440D299B // 21 -data8 0x3FA2AD755749617C // 22 -data8 0x3FA381772A00E603 // 23 -data8 0x3FA45643E165A70A // 24 -data8 0x3FA52BDD034475B8 // 25 -data8 0x3FA5E3966B7E9295 // 26 -data8 0x3FA6BAAF47C5B244 // 27 -data8 0x3FA773B3E8C4F3C7 // 28 -data8 0x3FA84C51EBEE8D15 // 29 -data8 0x3FA906A6786FC1CA // 30 -data8 0x3FA9C197ABF00DD6 // 31 -data8 0x3FAA9C78712191F7 // 32 -data8 0x3FAB58C09C8D637C // 33 -data8 0x3FAC15A8BCDD7B7E // 34 -data8 0x3FACD331E2C2967B // 35 -data8 0x3FADB11ED766ABF4 // 36 -data8 0x3FAE70089346A9E6 // 37 -data8 0x3FAF2F96C6754AED // 38 -data8 0x3FAFEFCA8D451FD5 // 39 -data8 0x3FB0585283764177 // 40 -data8 0x3FB0B913AAC7D3A6 // 41 -data8 0x3FB11A294F2569F5 // 42 -data8 0x3FB16B51A2696890 // 43 -data8 0x3FB1CD03ADACC8BD // 44 -data8 0x3FB22F0BDD7745F5 // 45 -data8 0x3FB2916ACA38D1E7 // 46 -data8 0x3FB2F4210DF7663C // 47 -data8 0x3FB346A6C3C49065 // 48 -data8 0x3FB3A9FEBC605409 // 49 -data8 0x3FB3FD0C10A3AA54 // 50 -data8 0x3FB46107D3540A81 // 51 -data8 0x3FB4C55DD16967FE // 52 -data8 0x3FB51940330C000A // 53 -data8 0x3FB56D620EE7115E // 54 -data8 0x3FB5D2ABCF26178D // 55 -data8 0x3FB6275AA5DEBF81 // 56 -data8 0x3FB68D4EAF26D7EE // 57 -data8 0x3FB6E28C5C54A28D // 58 -data8 0x3FB7380B9665B7C7 // 59 -data8 0x3FB78DCCC278E85B // 60 -data8 0x3FB7F50C2CF25579 // 61 -data8 0x3FB84B5FD5EAEFD7 // 62 -data8 0x3FB8A1F6BAB2B226 // 63 -data8 0x3FB8F8D144557BDF // 64 -data8 0x3FB94FEFDCD61D92 // 65 -data8 0x3FB9A752EF316149 // 66 -data8 0x3FB9FEFAE7611EDF // 67 -data8 0x3FBA56E8325F5C86 // 68 -data8 0x3FBAAF1B3E297BB3 // 69 -data8 0x3FBB079479C372AC // 70 -data8 0x3FBB6054553B12F7 // 71 -data8 0x3FBBB95B41AB5CE5 // 72 -data8 0x3FBC12A9B13FE079 // 73 -data8 0x3FBC6C4017382BEA // 74 -data8 0x3FBCB41FBA42686C // 75 -data8 0x3FBD0E38CE73393E // 76 -data8 0x3FBD689B2193F132 // 77 -data8 0x3FBDC3472B1D285F // 78 -data8 0x3FBE0C06300D528B // 79 -data8 0x3FBE6738190E394B // 80 -data8 0x3FBEC2B50D208D9A // 81 -data8 0x3FBF0C1C2B936827 // 82 -data8 0x3FBF68216C9CC726 // 83 -data8 0x3FBFB1F6381856F3 // 84 -data8 0x3FC00742AF4CE5F8 // 85 -data8 0x3FC02C64906512D2 // 86 -data8 0x3FC05AF1E63E03B4 // 87 -data8 0x3FC0804BEA723AA8 // 88 -data8 0x3FC0AF1FD6711526 // 89 -data8 0x3FC0D4B2A88059FF // 90 -data8 0x3FC0FA5EF136A06C // 91 -data8 0x3FC1299A4FB3E305 // 92 -data8 0x3FC14F806253C3EC // 93 -data8 0x3FC175805D1587C1 // 94 -data8 0x3FC19B9A637CA294 // 95 -data8 0x3FC1CB5FC26EDE16 // 96 -data8 0x3FC1F1B4E65F2590 // 97 -data8 0x3FC218248B5DC3E5 // 98 -data8 0x3FC23EAED62ADC76 // 99 -data8 0x3FC26553EBD337BC // 100 -data8 0x3FC28C13F1B118FF // 101 -data8 0x3FC2BCAA14381385 // 102 -data8 0x3FC2E3A740B7800E // 103 -data8 0x3FC30ABFD8F333B6 // 104 -data8 0x3FC331F403985096 // 105 -data8 0x3FC35943E7A6068F // 106 -data8 0x3FC380AFAC6E7C07 // 107 -data8 0x3FC3A8377997B9E5 // 108 -data8 0x3FC3CFDB771C9ADB // 109 -data8 0x3FC3EDA90D39A5DE // 110 -data8 0x3FC4157EC09505CC // 111 -data8 0x3FC43D7113FB04C0 // 112 -data8 0x3FC4658030AD1CCE // 113 -data8 0x3FC48DAC404638F5 // 114 -data8 0x3FC4B5F56CBBB869 // 115 -data8 0x3FC4DE5BE05E7582 // 116 -data8 0x3FC4FCBC0776FD85 // 117 -data8 0x3FC525561E9256EE // 118 -data8 0x3FC54E0DF3198865 // 119 -data8 0x3FC56CAB7112BDE2 // 120 -data8 0x3FC59597BA735B15 // 121 -data8 0x3FC5BEA23A506FD9 // 122 -data8 0x3FC5DD7E08DE382E // 123 -data8 0x3FC606BDD3F92355 // 124 -data8 0x3FC6301C518A501E // 125 -data8 0x3FC64F3770618915 // 126 -data8 0x3FC678CC14C1E2D7 // 127 -data8 0x3FC6981005ED2947 // 128 -data8 0x3FC6C1DB5F9BB335 // 129 -data8 0x3FC6E1488ECD2880 // 130 -data8 0x3FC70B4B2E7E41B8 // 131 -data8 0x3FC72AE209146BF8 // 132 -data8 0x3FC7551C81BD8DCF // 133 -data8 0x3FC774DD76CC43BD // 134 -data8 0x3FC79F505DB00E88 // 135 -data8 0x3FC7BF3BDE099F30 // 136 -data8 0x3FC7E9E7CAC437F8 // 137 -data8 0x3FC809FE4902D00D // 138 -data8 0x3FC82A2757995CBD // 139 -data8 0x3FC85525C625E098 // 140 -data8 0x3FC8757A79831887 // 141 -data8 0x3FC895E2058D8E02 // 142 -data8 0x3FC8C13437695531 // 143 -data8 0x3FC8E1C812EF32BE // 144 -data8 0x3FC9026F112197E8 // 145 -data8 0x3FC923294888880A // 146 -data8 0x3FC94EEA4B8334F2 // 147 -data8 0x3FC96FD1B639FC09 // 148 -data8 0x3FC990CCA66229AB // 149 -data8 0x3FC9B1DB33334842 // 150 -data8 0x3FC9D2FD740E6606 // 151 -data8 0x3FC9FF49EEDCB553 // 152 -data8 0x3FCA209A84FBCFF7 // 153 -data8 0x3FCA41FF1E43F02B // 154 -data8 0x3FCA6377D2CE9377 // 155 -data8 0x3FCA8504BAE0D9F5 // 156 -data8 0x3FCAA6A5EEEBEFE2 // 157 -data8 0x3FCAC85B878D7878 // 158 -data8 0x3FCAEA259D8FFA0B // 159 -data8 0x3FCB0C0449EB4B6A // 160 -data8 0x3FCB2DF7A5C50299 // 161 -data8 0x3FCB4FFFCA70E4D1 // 162 -data8 0x3FCB721CD17157E2 // 163 -data8 0x3FCB944ED477D4EC // 164 -data8 0x3FCBB695ED655C7C // 165 -data8 0x3FCBD8F2364AEC0F // 166 -data8 0x3FCBFB63C969F4FF // 167 -data8 0x3FCC1DEAC134D4E9 // 168 -data8 0x3FCC4087384F4F80 // 169 -data8 0x3FCC6339498F09E1 // 170 -data8 0x3FCC86010FFC076B // 171 -data8 0x3FCC9D3D065C5B41 // 172 -data8 0x3FCCC029375BA079 // 173 -data8 0x3FCCE32B66978BA4 // 174 -data8 0x3FCD0643AFD51404 // 175 -data8 0x3FCD29722F0DEA45 // 176 -data8 0x3FCD4CB70070FE43 // 177 -data8 0x3FCD6446AB3F8C95 // 178 -data8 0x3FCD87B0EF71DB44 // 179 -data8 0x3FCDAB31D1FE99A6 // 180 -data8 0x3FCDCEC96FDC888E // 181 -data8 0x3FCDE69088763579 // 182 -data8 0x3FCE0A4E4A25C1FF // 183 -data8 0x3FCE2E2315755E32 // 184 -data8 0x3FCE461322D1648A // 185 -data8 0x3FCE6A0E95C7787B // 186 -data8 0x3FCE8E216243DD60 // 187 -data8 0x3FCEA63AF26E007C // 188 -data8 0x3FCECA74ED15E0B7 // 189 -data8 0x3FCEEEC692CCD259 // 190 -data8 0x3FCF070A36B8D9C0 // 191 -data8 0x3FCF2B8393E34A2D // 192 -data8 0x3FCF5014EF538A5A // 193 -data8 0x3FCF68833AF1B17F // 194 -data8 0x3FCF8D3CD9F3F04E // 195 -data8 0x3FCFA5C61ADD93E9 // 196 -data8 0x3FCFCAA8567EBA79 // 197 -data8 0x3FCFE34CC8743DD8 // 198 -data8 0x3FD0042BFD74F519 // 199 -data8 0x3FD016BDF6A18017 // 200 -data8 0x3FD023262F907322 // 201 -data8 0x3FD035CCED8D32A1 // 202 -data8 0x3FD042430E869FFB // 203 -data8 0x3FD04EBEC842B2DF // 204 -data8 0x3FD06182E84FD4AB // 205 -data8 0x3FD06E0CB609D383 // 206 -data8 0x3FD080E60BEC8F12 // 207 -data8 0x3FD08D7E0D894735 // 208 -data8 0x3FD0A06CC96A2055 // 209 -data8 0x3FD0AD131F3B3C55 // 210 -data8 0x3FD0C01771E775FB // 211 -data8 0x3FD0CCCC3CAD6F4B // 212 -data8 0x3FD0D986D91A34A8 // 213 -data8 0x3FD0ECA9B8861A2D // 214 -data8 0x3FD0F972F87FF3D5 // 215 -data8 0x3FD106421CF0E5F7 // 216 -data8 0x3FD11983EBE28A9C // 217 -data8 0x3FD12661E35B7859 // 218 -data8 0x3FD13345D2779D3B // 219 -data8 0x3FD146A6F597283A // 220 -data8 0x3FD15399E81EA83D // 221 -data8 0x3FD16092E5D3A9A6 // 222 -data8 0x3FD17413C3B7AB5D // 223 -data8 0x3FD1811BF629D6FA // 224 -data8 0x3FD18E2A47B46685 // 225 -data8 0x3FD19B3EBE1A4418 // 226 -data8 0x3FD1AEE9017CB450 // 227 -data8 0x3FD1BC0CED7134E1 // 228 -data8 0x3FD1C93712ABC7FF // 229 -data8 0x3FD1D66777147D3E // 230 -data8 0x3FD1EA3BD1286E1C // 231 -data8 0x3FD1F77BED932C4C // 232 -data8 0x3FD204C25E1B031F // 233 -data8 0x3FD2120F28CE69B1 // 234 -data8 0x3FD21F6253C48D00 // 235 -data8 0x3FD22CBBE51D60A9 // 236 -data8 0x3FD240CE4C975444 // 237 -data8 0x3FD24E37F8ECDAE7 // 238 -data8 0x3FD25BA8215AF7FC // 239 -data8 0x3FD2691ECC29F042 // 240 -data8 0x3FD2769BFFAB2DFF // 241 -data8 0x3FD2841FC23952C9 // 242 -data8 0x3FD291AA1A384978 // 243 -data8 0x3FD29F3B0E15584A // 244 -data8 0x3FD2B3A0EE479DF7 // 245 -data8 0x3FD2C142842C09E5 // 246 -data8 0x3FD2CEEACCB7BD6C // 247 -data8 0x3FD2DC99CE82FF20 // 248 -data8 0x3FD2EA4F902FD7D9 // 249 -data8 0x3FD2F80C186A25FC // 250 -data8 0x3FD305CF6DE7B0F6 // 251 -data8 0x3FD3139997683CE7 // 252 -data8 0x3FD3216A9BB59E7C // 253 -data8 0x3FD32F4281A3CEFE // 254 -data8 0x3FD33D2150110091 // 255 -// -// Lo parts of ln(1/frcpa(1+i/256))/ln(10), i=0...255 -data4 0x1FB0EB5A // 0 -data4 0x206E5EE3 // 1 -data4 0x208F3609 // 2 -data4 0x2070EB03 // 3 -data4 0x1F314BAE // 4 -data4 0x217A889D // 5 -data4 0x21E63650 // 6 -data4 0x21C2F4A3 // 7 -data4 0x2192A10C // 8 -data4 0x1F84B73E // 9 -data4 0x2243FBCA // 10 -data4 0x21BD9C51 // 11 -data4 0x213C542B // 12 -data4 0x21047386 // 13 -data4 0x21217D8F // 14 -data4 0x226791B7 // 15 -data4 0x204CCE66 // 16 -data4 0x2234CE9F // 17 -data4 0x220675E2 // 18 -data4 0x22B8E5BA // 19 -data4 0x22C12D14 // 20 -data4 0x211D41F0 // 21 -data4 0x228507F3 // 22 -data4 0x22F7274B // 23 -data4 0x22A7FDD1 // 24 -data4 0x2244A06E // 25 -data4 0x215DCE69 // 26 -data4 0x22F5C961 // 27 -data4 0x22EBEF29 // 28 -data4 0x222A2CB6 // 29 -data4 0x22B9FE00 // 30 -data4 0x22E79EB7 // 31 -data4 0x222F9607 // 32 -data4 0x2189D87F // 33 -data4 0x2236DB45 // 34 -data4 0x22ED77FB // 35 -data4 0x21CB70F0 // 36 -data4 0x21B8ACE8 // 37 -data4 0x22EC58C1 // 38 -data4 0x22CFCC1C // 39 -data4 0x2343E77A // 40 -data4 0x237FBC7F // 41 -data4 0x230D472E // 42 -data4 0x234686FB // 43 -data4 0x23770425 // 44 -data4 0x223977EC // 45 -data4 0x2345800A // 46 -data4 0x237BC351 // 47 -data4 0x23191502 // 48 -data4 0x232BAC12 // 49 -data4 0x22692421 // 50 -data4 0x234D409D // 51 -data4 0x22EC3214 // 52 -data4 0x2376C916 // 53 -data4 0x22B00DD1 // 54 -data4 0x2309D910 // 55 -data4 0x22F925FD // 56 -data4 0x22A63A7B // 57 -data4 0x2106264A // 58 -data4 0x234227F9 // 59 -data4 0x1ECB1978 // 60 -data4 0x23460A62 // 61 -data4 0x232ED4B1 // 62 -data4 0x226DDC38 // 63 -data4 0x1F101A73 // 64 -data4 0x21B1F82B // 65 -data4 0x22752F19 // 66 -data4 0x2320BC15 // 67 -data4 0x236EEC5E // 68 -data4 0x23404D3E // 69 -data4 0x2304C517 // 70 -data4 0x22F7441A // 71 -data4 0x230D3D7A // 72 -data4 0x2264A9DF // 73 -data4 0x22410CC8 // 74 -data4 0x2342CCCB // 75 -data4 0x23560BD4 // 76 -data4 0x237BBFFE // 77 -data4 0x2373A206 // 78 -data4 0x22C871B9 // 79 -data4 0x2354B70C // 80 -data4 0x232EDB33 // 81 -data4 0x235DB680 // 82 -data4 0x230EF422 // 83 -data4 0x235316CA // 84 -data4 0x22EEEE8B // 85 -data4 0x2375C88C // 86 -data4 0x235ABD21 // 87 -data4 0x23A0D232 // 88 -data4 0x23F5FFB5 // 89 -data4 0x23D3CEC8 // 90 -data4 0x22A92204 // 91 -data4 0x238C64DF // 92 -data4 0x23B82896 // 93 -data4 0x22D633B8 // 94 -data4 0x23861E93 // 95 -data4 0x23CB594B // 96 -data4 0x2330387E // 97 -data4 0x21CD4702 // 98 -data4 0x2284C505 // 99 -data4 0x23D6995C // 100 -data4 0x23F6C807 // 101 -data4 0x239CEF5C // 102 -data4 0x239442B0 // 103 -data4 0x22B35EE5 // 104 -data4 0x2391E9A4 // 105 -data4 0x23A390F5 // 106 -data4 0x2349AC9C // 107 -data4 0x23FA5535 // 108 -data4 0x21E3A46A // 109 -data4 0x23B44ABA // 110 -data4 0x23CEA8E0 // 111 -data4 0x23F647DC // 112 -data4 0x2390D1A8 // 113 -data4 0x23D0CFA2 // 114 -data4 0x236E0872 // 115 -data4 0x23B88B91 // 116 -data4 0x2283C359 // 117 -data4 0x232F647F // 118 -data4 0x23122CD7 // 119 -data4 0x232CF564 // 120 -data4 0x232630FD // 121 -data4 0x23BEE1C8 // 122 -data4 0x23B2BD30 // 123 -data4 0x2301F1C0 // 124 -data4 0x23CE4D67 // 125 -data4 0x23A353C9 // 126 -data4 0x238086E8 // 127 -data4 0x22D0D29E // 128 -data4 0x23A3B3C8 // 129 -data4 0x23F69F4B // 130 -data4 0x23EA3C21 // 131 -data4 0x23951C88 // 132 -data4 0x2372AFFC // 133 -data4 0x23A6D1A8 // 134 -data4 0x22BBBAF4 // 135 -data4 0x227FA3DD // 136 -data4 0x23804D9B // 137 -data4 0x232D771F // 138 -data4 0x239CB57B // 139 -data4 0x2303CF34 // 140 -data4 0x22218C2A // 141 -data4 0x23991BEE // 142 -data4 0x23EB3596 // 143 -data4 0x230487FA // 144 -data4 0x2135DF4C // 145 -data4 0x2380FD2D // 146 -data4 0x23EB75E9 // 147 -data4 0x211C62C8 // 148 -data4 0x23F518F1 // 149 -data4 0x23FEF882 // 150 -data4 0x239097C7 // 151 -data4 0x223E2BDA // 152 -data4 0x23988F89 // 153 -data4 0x22E4A4AD // 154 -data4 0x23F03D9C // 155 -data4 0x23F5018F // 156 -data4 0x23E1E250 // 157 -data4 0x23FD3D90 // 158 -data4 0x22DEE2FF // 159 -data4 0x238342AB // 160 -data4 0x22E6736F // 161 -data4 0x233AFC28 // 162 -data4 0x2395F661 // 163 -data4 0x23D8B991 // 164 -data4 0x23CD58D5 // 165 -data4 0x21941FD6 // 166 -data4 0x23352915 // 167 -data4 0x235D09EE // 168 -data4 0x22DC7EF9 // 169 -data4 0x238BC9F3 // 170 -data4 0x2397DF8F // 171 -data4 0x2380A7BB // 172 -data4 0x23EFF48C // 173 -data4 0x21E67408 // 174 -data4 0x236420F7 // 175 -data4 0x22C8DFB5 // 176 -data4 0x239B5D35 // 177 -data4 0x23BDC09D // 178 -data4 0x239E822C // 179 -data4 0x23984F0A // 180 -data4 0x23EF2119 // 181 -data4 0x23F738B8 // 182 -data4 0x23B66187 // 183 -data4 0x23B06AD7 // 184 -data4 0x2369140F // 185 -data4 0x218DACE6 // 186 -data4 0x21DF23F1 // 187 -data4 0x235D8B34 // 188 -data4 0x23460333 // 189 -data4 0x23F11D62 // 190 -data4 0x23C37147 // 191 -data4 0x22B2AE2A // 192 -data4 0x23949211 // 193 -data4 0x23B69799 // 194 -data4 0x23DBEC75 // 195 -data4 0x229A6FB3 // 196 -data4 0x23FC6C60 // 197 -data4 0x22D01FFC // 198 -data4 0x235985F0 // 199 -data4 0x23F7ECA5 // 200 -data4 0x23F924D3 // 201 -data4 0x2381B92F // 202 -data4 0x243A0FBE // 203 -data4 0x24712D72 // 204 -data4 0x24594E2F // 205 -data4 0x220CD12A // 206 -data4 0x23D87FB0 // 207 -data4 0x2338288A // 208 -data4 0x242BB2CC // 209 -data4 0x220F6265 // 210 -data4 0x23BB7FE3 // 211 -data4 0x2301C0A2 // 212 -data4 0x246709AB // 213 -data4 0x23A619E2 // 214 -data4 0x24030E3B // 215 -data4 0x233C36CC // 216 -data4 0x241AAB77 // 217 -data4 0x243D41A3 // 218 -data4 0x23834A60 // 219 -data4 0x236AC7BF // 220 -data4 0x23B6D597 // 221 -data4 0x210E9474 // 222 -data4 0x242156E6 // 223 -data4 0x243A1D68 // 224 -data4 0x2472187C // 225 -data4 0x23834E86 // 226 -data4 0x23CA0807 // 227 -data4 0x24745887 // 228 -data4 0x23E2B0E1 // 229 -data4 0x2421EB67 // 230 -data4 0x23DCC64E // 231 -data4 0x22DF71D1 // 232 -data4 0x238D5ECA // 233 -data4 0x23CDE86F // 234 -data4 0x24131F45 // 235 -data4 0x240FE4E2 // 236 -data4 0x2317731A // 237 -data4 0x24015C76 // 238 -data4 0x2301A4E8 // 239 -data4 0x23E52A6D // 240 -data4 0x247D8A0D // 241 -data4 0x23DFEEBA // 242 -data4 0x22139FEC // 243 -data4 0x2454A112 // 244 -data4 0x23C21E28 // 245 -data4 0x2460D813 // 246 -data4 0x24258924 // 247 -data4 0x2425680F // 248 -data4 0x24194D1E // 249 -data4 0x24242C2F // 250 -data4 0x243DDE5E // 251 -data4 0x23DEB388 // 252 -data4 0x23E0E6EB // 253 -data4 0x24393E74 // 254 -data4 0x241B1863 // 255 -LOCAL_OBJECT_END(log10_data) - - - -// Code -//============================================================== - -// log has p13 true, p14 false -// log10 has p14 true, p13 false - -.section .text -GLOBAL_IEEE754_ENTRY(log10) -{ .mfi - getf.exp GR_Exp = f8 // if x is unorm then must recompute - frcpa.s1 FR_RcpX,p0 = f1,f8 - mov GR_05 = 0xFFFE // biased exponent of A2=0.5 -} -{ .mlx - addl GR_ad_1 = @ltoff(log10_data),gp - movl GR_A3 = 0x3fd5555555555557 // double precision memory - // representation of A3 -};; - -{ .mfi - getf.sig GR_Sig = f8 // get significand to calculate index - fclass.m p8,p0 = f8,9 // is x positive unorm? - mov GR_xorg = 0x3fefe // double precision memory msb of 255/256 -} -{ .mib - ld8 GR_ad_1 = [GR_ad_1] - cmp.eq p14,p13 = r0,r0 // set p14 to 1 for log10 - br.cond.sptk log_log10_common -};; -GLOBAL_IEEE754_END(log10) - - -GLOBAL_IEEE754_ENTRY(log) -{ .mfi - getf.exp GR_Exp = f8 // if x is unorm then must recompute - frcpa.s1 FR_RcpX,p0 = f1,f8 - mov GR_05 = 0xfffe -} -{ .mlx - addl GR_ad_1 = @ltoff(log_data),gp - movl GR_A3 = 0x3fd5555555555557 // double precision memory - // representation of A3 -};; - -{ .mfi - getf.sig GR_Sig = f8 // get significand to calculate index - fclass.m p8,p0 = f8,9 // is x positive unorm? - mov GR_xorg = 0x3fefe // double precision memory msb of 255/256 -} -{ .mfi - ld8 GR_ad_1 = [GR_ad_1] - nop.f 0 - cmp.eq p13,p14 = r0,r0 // set p13 to 1 for log -};; - -log_log10_common: -{ .mfi - getf.d GR_x = f8 // double precision memory representation of x - fclass.m p9,p0 = f8,0x1E1 // is x NaN, NaT or +Inf? - dep.z GR_dx = 3, 44, 2 // Create 0x0000300000000000 - // Difference between double precision - // memory representations of 257/256 and - // 255/256 -} -{ .mfi - setf.exp FR_A2 = GR_05 // create A2 - fnorm.s1 FR_NormX = f8 - mov GR_bias = 0xffff -};; - -{ .mfi - setf.d FR_A3 = GR_A3 // create A3 - fcmp.eq.s1 p12,p0 = f1,f8 // is x equal to 1.0? - dep.z GR_xorg = GR_xorg, 44, 19 // 0x3fefe00000000000 - // double precision memory - // representation of 255/256 -} -{ .mib - add GR_ad_2 = 0x30,GR_ad_1 // address of A5,A4 - add GR_ad_3 = 0x840,GR_ad_1 // address of ln(1/frcpa) lo parts -(p8) br.cond.spnt log_positive_unorms -};; - -log_core: -{ .mfi - ldfpd FR_A7,FR_A6 = [GR_ad_1],16 - fclass.m p10,p0 = f8,0x3A // is x < 0? - sub GR_Nm1 = GR_Exp,GR_05 // unbiased_exponent_of_x - 1 -} -{ .mfi - ldfpd FR_A5,FR_A4 = [GR_ad_2],16 -(p9) fma.d.s0 f8 = f8,f1,f0 // set V-flag - sub GR_N = GR_Exp,GR_bias // unbiased_exponent_of_x -};; - -{ .mfi - setf.sig FR_N = GR_N // copy unbiased exponent of x to significand - fms.s1 FR_r = FR_RcpX,f8,f1 // range reduction for |x-1|>=1/256 - extr.u GR_Ind = GR_Sig,55,8 // get bits from 55 to 62 as index -} -{ .mib - sub GR_x = GR_x, GR_xorg // get diff between x and 255/256 - cmp.gtu p6, p7 = 2, GR_Nm1 // p6 true if 0.5 <= x < 2 -(p9) br.ret.spnt b0 // exit for NaN, NaT and +Inf -};; - -{ .mfi - ldfpd FR_Ln2hi,FR_Ln2lo = [GR_ad_1],16 - fclass.m p11,p0 = f8,0x07 // is x = 0? - shladd GR_ad_3 = GR_Ind,2,GR_ad_3 // address of Tlo -} -{ .mib - shladd GR_ad_2 = GR_Ind,3,GR_ad_2 // address of Thi -(p6) cmp.leu p6, p7 = GR_x, GR_dx // 255/256 <= x <= 257/256 -(p10) br.cond.spnt log_negatives // jump if x is negative -};; - -// p6 is true if |x-1| < 1/256 -// p7 is true if |x-1| >= 1/256 -{ .mfi - ldfd FR_Thi = [GR_ad_2] -(p6) fms.s1 FR_r = f8,f1,f1 // range reduction for |x-1|<1/256 - nop.i 0 -};; - -{ .mmi -(p7) ldfs FR_Tlo = [GR_ad_3] - nop.m 0 - nop.i 0 -} -{ .mfb - nop.m 0 -(p12) fma.d.s0 f8 = f0,f0,f0 -(p12) br.ret.spnt b0 // exit for +1.0 -};; - -.pred.rel "mutex",p6,p7 -{ .mfi -(p6) mov GR_NearOne = 1 - fms.s1 FR_A32 = FR_A3,FR_r,FR_A2 // A3*r-A2 -(p7) mov GR_NearOne = 0 -} -{ .mfb - ldfe FR_InvLn10 = [GR_ad_1],16 - fma.s1 FR_r2 = FR_r,FR_r,f0 // r^2 -(p11) br.cond.spnt log_zeroes // jump if x is zero -};; - -{ .mfi - nop.m 0 - fma.s1 FR_A6 = FR_A7,FR_r,FR_A6 // A7*r+A6 - nop.i 0 -} -{ .mfi -(p7) cmp.eq.unc p9,p0 = r0,r0 // set p9 if |x-1| > 1/256 - fma.s1 FR_A4 = FR_A5,FR_r,FR_A4 // A5*r+A4 -(p14) cmp.eq.unc p8,p0 = 1,GR_NearOne // set p8 to 1 if it's log10 - // and argument near 1.0 -};; - -{ .mfi -(p6) getf.exp GR_rexp = FR_r // Get signexp of x-1 -(p7) fcvt.xf FR_N = FR_N -(p8) cmp.eq p9,p6 = r0,r0 // Also set p9 and clear p6 if log10 - // and arg near 1 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r4 = FR_r2,FR_r2,f0 // r^4 - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fma.s1 FR_NxLn2pT = f0,f0,f0 // Clear NxLn2pT if log10 near 1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - // (A3*r+A2)*r^2+r - fma.s1 FR_A321 = FR_A32,FR_r2,FR_r - mov GR_mask = 0x1ffff -} -{ .mfi - nop.m 0 - // (A7*r+A6)*r^2+(A5*r+A4) - fma.s1 FR_A4 = FR_A6,FR_r2,FR_A4 - nop.i 0 -};; - -{ .mfi -(p6) and GR_rexp = GR_rexp, GR_mask - // N*Ln2hi+Thi -(p7) fma.s1 FR_NxLn2hipThi = FR_N,FR_Ln2hi,FR_Thi - nop.i 0 -} -{ .mfi - nop.m 0 - // N*Ln2lo+Tlo -(p7) fma.s1 FR_NxLn2lopTlo = FR_N,FR_Ln2lo,FR_Tlo - nop.i 0 -};; - -{ .mfi -(p6) sub GR_rexp = GR_rexp, GR_bias // unbiased exponent of x-1 -(p9) fma.s1 f8 = FR_A4,FR_r4,FR_A321 // P(r) if |x-1| >= 1/256 or - // log10 and |x-1| < 1/256 - nop.i 0 -} -{ .mfi - nop.m 0 - // (N*Ln2hi+Thi) + (N*Ln2lo+Tlo) -(p7) fma.s1 FR_NxLn2pT = FR_NxLn2hipThi,f1,FR_NxLn2lopTlo - nop.i 0 -};; - -{ .mfi -(p6) cmp.gt.unc p10, p6 = -40, GR_rexp // Test |x-1| < 2^-40 - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p10) fma.d.s0 f8 = FR_A32,FR_r2,FR_r // log(x) if |x-1| < 2^-40 - nop.i 0 -};; - -.pred.rel "mutex",p6,p9 -{ .mfi - nop.m 0 -(p6) fma.d.s0 f8 = FR_A4,FR_r4,FR_A321 // log(x) if 2^-40 <= |x-1| < 1/256 - nop.i 0 -} -{ .mfb - nop.m 0 -(p9) fma.d.s0 f8 = f8,FR_InvLn10,FR_NxLn2pT // result if |x-1| >= 1/256 - // or log10 and |x-1| < 1/256 - br.ret.sptk b0 -};; - -.align 32 -log_positive_unorms: -{ .mmf - getf.exp GR_Exp = FR_NormX // recompute biased exponent - getf.d GR_x = FR_NormX // recompute double precision x - fcmp.eq.s1 p12,p0 = f1,FR_NormX // is x equal to 1.0? -};; - -{ .mfb - getf.sig GR_Sig = FR_NormX // recompute significand - fcmp.eq.s0 p15, p0 = f8, f0 // set denormal flag - br.cond.sptk log_core -};; - -.align 32 -log_zeroes: -{ .mfi - nop.m 0 - fmerge.s FR_X = f8,f8 // keep input argument for subsequent - // call of __libm_error_support# - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_tmp = f0,f0,f1 // -1.0 - nop.i 0 -};; - -.pred.rel "mutex",p13,p14 -{ .mfi -(p13) mov GR_TAG = 2 // set libm error in case of log - frcpa.s0 f8,p0 = FR_tmp,f0 // log(+/-0) should be equal to -INF. - // We can get it using frcpa because it - // sets result to the IEEE-754 mandated - // quotient of FR_tmp/f0. - // As far as FR_tmp is -1 it'll be -INF - nop.i 0 -} -{ .mib -(p14) mov GR_TAG = 8 // set libm error in case of log10 - nop.i 0 - br.cond.sptk log_libm_err -};; - -.align 32 -log_negatives: -{ .mfi - nop.m 0 - fmerge.s FR_X = f8,f8 - nop.i 0 -};; - -.pred.rel "mutex",p13,p14 -{ .mfi -(p13) mov GR_TAG = 3 // set libm error in case of log - frcpa.s0 f8,p0 = f0,f0 // log(negatives) should be equal to NaN. - // We can get it using frcpa because it - // sets result to the IEEE-754 mandated - // quotient of f0/f0 i.e. NaN. -(p14) mov GR_TAG = 9 // set libm error in case of log10 -};; - -.align 32 -log_libm_err: -{ .mmi - alloc r32 = ar.pfs,1,4,4,0 - mov GR_Parameter_TAG = GR_TAG - nop.i 0 -};; -GLOBAL_IEEE754_END(log) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y = -32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS = ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp = -64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP = gp // Save gp -};; - -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0 = b0 // Save b0 -};; - -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_log10.c b/sysdeps/ia64/fpu/e_log10.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/e_log10.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/e_log10f.c b/sysdeps/ia64/fpu/e_log10f.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/e_log10f.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/e_log10l.c b/sysdeps/ia64/fpu/e_log10l.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/e_log10l.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/e_log2.S b/sysdeps/ia64/fpu/e_log2.S deleted file mode 100644 index c2b37a65ce..0000000000 --- a/sysdeps/ia64/fpu/e_log2.S +++ /dev/null @@ -1,709 +0,0 @@ -.file "log2.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//================================================================= -// 09/11/00 Initial version -// 03/19/01 Added one polynomial coefficient, to improve accuracy -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 04/18/03 Reformatted T[255] -// -// API -//================================================================= -// double log2(double) -// -// Overview of operation -//================================================================= -// Background -// -// Implementation -// -// Let x = 2^l * m, where m=1.b1 b2 ... b8 b9 ... b52 -// y=frcpa(m), r=m*y-1, f=b1 b2 .. b8 (table index) -// j=0 if f<128; j=1 if f>=128 -// T is a table that stores log2(1/y) (in entries 1..255) rounded to -// double extended precision; f is used as an index; T[255]=0 -// -// If f=0 and b9=0, r is set to 2^{-8}* 0.b9 b10 ... b52 = m-1 (fractional part of m), -// and 0 is used instead of T[0] -// (polynomial evaluation only, for m=1+r, 0<=r<2^{-9}) -// If f=255, r is set to (m-2)/2 (T[255]=0, and only polynomial evaluation is used -// for m=2(1-r'), 0<=r'<2^{-9}) -// -// log2(x) is approximated as -// (l-j) + T[f] + (c1*r+c2*r^2+...+c7*r^7), if f>0 -// - - -// Special values -//================================================================= -// log2(0)=-inf, raises Divide by Zero -// log2(+inf)=inf -// log2(x)=NaN, raises Invalid if x<0 -// - - -// Registers used -//============================================================== -// f6-f15, f32-f33 -// r2-r3, r23-r30 -// p6,p7,p8,p12 -// - - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 // This reg. can safely be used -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - - - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(poly_coeffs) - -data8 0xbfd0000000000000, 0x3fc999999999999a //C_4, C_5 -data8 0xbfc5555555555555, 0x3fc2492492492492 //C_6, C_7 -data8 0xb8aa3b295c17f0bc, 0x00003fff // C_1 -data8 0xaaaaaaaaaaaaaaab, 0x00003ffd // C_3=1/3 -LOCAL_OBJECT_END(poly_coeffs) - - -LOCAL_OBJECT_START(T_table) - -data8 0xb8d8752172fed131, 0x00003ff6 -data8 0x8ae7f475764180a3, 0x00003ff8 -data8 0xe7f73862e72ee35d, 0x00003ff8 -data8 0xa2b25310c941a2f2, 0x00003ff9 -data8 0xcbb91d671abb2e85, 0x00003ff9 -data8 0xfac91e34daa50483, 0x00003ff9 -data8 0x9504a5042eb495c5, 0x00003ffa -data8 0xa9c4a0bbb580ee02, 0x00003ffa -data8 0xc19264dc8a5e3bf9, 0x00003ffa -data8 0xd67aa6703ebf4a77, 0x00003ffa -data8 0xee76cac6d6e08ce7, 0x00003ffa -data8 0x81c3f7de5434ed04, 0x00003ffb -data8 0x8c563033a3ce01e4, 0x00003ffb -data8 0x9876e9f09a98661c, 0x00003ffb -data8 0xa31e0ac9b2326ce2, 0x00003ffb -data8 0xadcf09e1fd10e4a5, 0x00003ffb -data8 0xb889f992cf03cdb6, 0x00003ffb -data8 0xc34eec68d901a714, 0x00003ffb -data8 0xce1df524e9909ed9, 0x00003ffb -data8 0xd8f726bcb0b80ad0, 0x00003ffb -data8 0xe3da945b878e27d1, 0x00003ffb -data8 0xeec851633b76a320, 0x00003ffb -data8 0xf82ea4bb6101421a, 0x00003ffb -data8 0x8197ddd7736b2864, 0x00003ffc -data8 0x871dad4f994253f0, 0x00003ffc -data8 0x8ca8cae3e892d549, 0x00003ffc -data8 0x916d6e1559a4b697, 0x00003ffc -data8 0x97028118efabeb7d, 0x00003ffc -data8 0x9bcfbce1592ad5d5, 0x00003ffc -data8 0xa16ee95d0da54a91, 0x00003ffc -data8 0xa644dcf3403fa5d0, 0x00003ffc -data8 0xab1ee14ffd659064, 0x00003ffc -data8 0xb0cd12faebcc6757, 0x00003ffc -data8 0xb5affdf9b3b221e0, 0x00003ffc -data8 0xba970fb307c6ade1, 0x00003ffc -data8 0xbf824f3a9f3e7561, 0x00003ffc -data8 0xc544c055fde99333, 0x00003ffc -data8 0xca39266532bdf26c, 0x00003ffc -data8 0xcf31d124b8fa2f56, 0x00003ffc -data8 0xd42ec7f59017b6ab, 0x00003ffc -data8 0xd930124bea9a2c67, 0x00003ffc -data8 0xde35b7af70e4dab3, 0x00003ffc -data8 0xe33fbfbb8533ef03, 0x00003ffc -data8 0xe77625911a7dcef3, 0x00003ffc -data8 0xec884bd689cc12e3, 0x00003ffc -data8 0xf19eeabf9e99a40a, 0x00003ffc -data8 0xf6ba0a35e3d88051, 0x00003ffc -data8 0xfbd9b237f7b4192b, 0x00003ffc -data8 0x80111d4a1ee0c79e, 0x00003ffd -data8 0x82a523a5f875bbfc, 0x00003ffd -data8 0x84ccecdc92cd0815, 0x00003ffd -data8 0x87653369d92c057a, 0x00003ffd -data8 0x89ffd1742da3aa21, 0x00003ffd -data8 0x8c2d2227d053d9b6, 0x00003ffd -data8 0x8e5c189793f7f798, 0x00003ffd -data8 0x90fd0a20e72f3c96, 0x00003ffd -data8 0x932fa937301e59ae, 0x00003ffd -data8 0x95d5061a5f0f5f7f, 0x00003ffd -data8 0x980b5a2ef10e7023, 0x00003ffd -data8 0x9a4361c5514d3c27, 0x00003ffd -data8 0x9c7d1f7d541313fd, 0x00003ffd -data8 0x9f2b16040b500d04, 0x00003ffd -data8 0xa168a0fa9db22c98, 0x00003ffd -data8 0xa3a7eaa1f9116293, 0x00003ffd -data8 0xa5e8f5b4072a3d44, 0x00003ffd -data8 0xa82bc4f11a5e88aa, 0x00003ffd -data8 0xaa705b2001db8317, 0x00003ffd -data8 0xacb6bb0e1e0f8005, 0x00003ffd -data8 0xaefee78f75707221, 0x00003ffd -data8 0xb148e37ec994dd99, 0x00003ffd -data8 0xb394b1bdaca0bc17, 0x00003ffd -data8 0xb5e255349707e496, 0x00003ffd -data8 0xb831d0d2fda791cc, 0x00003ffd -data8 0xba83278f6838ab20, 0x00003ffd -data8 0xbcd65c67881c7d47, 0x00003ffd -data8 0xbeb3e0f21d72dc92, 0x00003ffd -data8 0xc10a7a03457d35dc, 0x00003ffd -data8 0xc362f9b6f51eddd3, 0x00003ffd -data8 0xc5bd6326ebfce656, 0x00003ffd -data8 0xc7a0b3d0637c8f97, 0x00003ffd -data8 0xc9fe96af0df8e4b5, 0x00003ffd -data8 0xcc5e6c214b4a2cd7, 0x00003ffd -data8 0xce46199f374d29cf, 0x00003ffd -data8 0xd0a978a14c0d9ebe, 0x00003ffd -data8 0xd293fecafec7f9b5, 0x00003ffd -data8 0xd4faf1f6f5cf32e6, 0x00003ffd -data8 0xd6e8595abaad34d1, 0x00003ffd -data8 0xd952eb7a8ffc1593, 0x00003ffd -data8 0xdb433ccd805f171e, 0x00003ffd -data8 0xddb178dc43e6bd84, 0x00003ffd -data8 0xdfa4bcfb333342a4, 0x00003ffd -data8 0xe19953741ccea015, 0x00003ffd -data8 0xe40cee16a2ff21c5, 0x00003ffd -data8 0xe6048470cdbde8ea, 0x00003ffd -data8 0xe7fd7308d6895b14, 0x00003ffd -data8 0xe9f7bbb6a1ff9f87, 0x00003ffd -data8 0xec7280138809433d, 0x00003ffd -data8 0xee6fda4365cd051f, 0x00003ffd -data8 0xf06e94a122ff1f12, 0x00003ffd -data8 0xf26eb1151441fce5, 0x00003ffd -data8 0xf470318b88a77e2f, 0x00003ffd -data8 0xf67317f4d4c8aa58, 0x00003ffd -data8 0xf8f8b250a9c4cde6, 0x00003ffd -data8 0xfafec54831f1a484, 0x00003ffd -data8 0xfd06449bf3eaea1e, 0x00003ffd -data8 0xff0f324ddb19ab67, 0x00003ffd -data8 0x808cc8320a9acf15, 0x00003ffe -data8 0x8192b0748f2cef06, 0x00003ffe -data8 0x829952f5e6a24ee5, 0x00003ffe -data8 0x83a0b0bfafe1424e, 0x00003ffe -data8 0x8466b29f9c41caea, 0x00003ffe -data8 0x856f5aae0881d857, 0x00003ffe -data8 0x8678c0eae8ee8190, 0x00003ffe -data8 0x8782e6685676b9d7, 0x00003ffe -data8 0x888dcc3abc4554ec, 0x00003ffe -data8 0x89997378de7b98b8, 0x00003ffe -data8 0x8aa5dd3be1044279, 0x00003ffe -data8 0x8b6facdfd0360ab8, 0x00003ffe -data8 0x8c7d6db7169e0cdb, 0x00003ffe -data8 0x8d8bf424d6e130b2, 0x00003ffe -data8 0x8e575b506f409fa6, 0x00003ffe -data8 0x8f673e418776492c, 0x00003ffe -data8 0x9077e9ed700ef9ba, 0x00003ffe -data8 0x9144ef1baec80b20, 0x00003ffe -data8 0x9256fcdb537f035f, 0x00003ffe -data8 0x9369d68d75e7e1d6, 0x00003ffe -data8 0x943880613b8f9f1e, 0x00003ffe -data8 0x954cc1d9e0d94206, 0x00003ffe -data8 0xd3c70a37bdf7a294, 0x0000bffd -data8 0xd19bb053fb0284ec, 0x0000bffd -data8 0xcffa1a3b7dafb8bf, 0x0000bffd -data8 0xcdcbe1e2776479ee, 0x0000bffd -data8 0xcc282218b8bfdda2, 0x0000bffd -data8 0xc9f703a9afcb38ac, 0x0000bffd -data8 0xc851146ab89593c6, 0x0000bffd -data8 0xc61d08265927a860, 0x0000bffd -data8 0xc474e39705912d26, 0x0000bffd -data8 0xc23de19ec30c6e3e, 0x0000bffd -data8 0xc09381cc45db45b4, 0x0000bffd -data8 0xbee82b4e025ff90c, 0x0000bffd -data8 0xbcace101149788ec, 0x0000bffd -data8 0xbaff46962ea47964, 0x0000bffd -data8 0xb950b1be5e0c14a2, 0x0000bffd -data8 0xb7110e6ce866f2bc, 0x0000bffd -data8 0xb5602ccc2a81db52, 0x0000bffd -data8 0xb3ae4ce740fc8ef1, 0x0000bffd -data8 0xb1fb6d92c8240ccc, 0x0000bffd -data8 0xafb609c09b244abc, 0x0000bffd -data8 0xae00d1cfdeb43cfd, 0x0000bffd -data8 0xac4a967a8c8c9bd0, 0x0000bffd -data8 0xaa93568c249e6c52, 0x0000bffd -data8 0xa8db10cdff375343, 0x0000bffd -data8 0xa68e6fc5a42376e3, 0x0000bffd -data8 0xa4d3c25e68dc57f2, 0x0000bffd -data8 0xa3180b0c192a3816, 0x0000bffd -data8 0xa15b488e7aa329a0, 0x0000bffd -data8 0x9f9d79a30f0e1d5f, 0x0000bffd -data8 0x9dde9d050ee7d4ac, 0x0000bffd -data8 0x9c1eb16d63d7356c, 0x0000bffd -data8 0x9a5db592a310c36a, 0x0000bffd -data8 0x989ba82907a9016f, 0x0000bffd -data8 0x96d887e26cd57b79, 0x0000bffd -data8 0x9514536e481c3a4f, 0x0000bffd -data8 0x934f0979a3715fc9, 0x0000bffd -data8 0x9188a8af1742a9d5, 0x0000bffd -data8 0x8fc12fb6c470995f, 0x0000bffd -data8 0x8df89d364e34f8f1, 0x0000bffd -data8 0x8c2eefd0d3f67dd6, 0x0000bffd -data8 0x8a642626eb093d54, 0x0000bffd -data8 0x88983ed6985bae58, 0x0000bffd -data8 0x86cb387b4a0feec6, 0x0000bffd -data8 0x84fd11add101024b, 0x0000bffd -data8 0x83c856dd81804b78, 0x0000bffd -data8 0x81f84c2c62afd6f1, 0x0000bffd -data8 0x80271d3e4be5ea5a, 0x0000bffd -data8 0xfca991447e7b485d, 0x0000bffc -data8 0xf90299c904793a3c, 0x0000bffc -data8 0xf559511d2dc1ed69, 0x0000bffc -data8 0xf2e72afee9bd2aee, 0x0000bffc -data8 0xef39ff1d8a40770e, 0x0000bffc -data8 0xeb8a7a2311c935dc, 0x0000bffc -data8 0xe7d8990dc620012f, 0x0000bffc -data8 0xe560b1e3b86e44b6, 0x0000bffc -data8 0xe1aadb38caee80c4, 0x0000bffc -data8 0xddf2a051f81b76a4, 0x0000bffc -data8 0xdb7678bafcaf4b5f, 0x0000bffc -data8 0xd7ba3a8f0df19bfc, 0x0000bffc -data8 0xd3fb8fdbdd5cebdb, 0x0000bffc -data8 0xd17b191905c35652, 0x0000bffc -data8 0xcdb85d29cefd7121, 0x0000bffc -data8 0xc9f32c3c88221ef6, 0x0000bffc -data8 0xc76e5741a95b5dae, 0x0000bffc -data8 0xc3a506d80d38c718, 0x0000bffc -data8 0xbfd938ccef8b68c1, 0x0000bffc -data8 0xbd4ff63e82eef78c, 0x0000bffc -data8 0xb97ffa2b563865bd, 0x0000bffc -data8 0xb6f3eb3011eddcea, 0x0000bffc -data8 0xb31fb7d64898b3e6, 0x0000bffc -data8 0xb090d63a409e7880, 0x0000bffc -data8 0xacb8623c7ffa4f39, 0x0000bffc -data8 0xa8dd5c83d2e45246, 0x0000bffc -data8 0xa649e998a8d91f2e, 0x0000bffc -data8 0xa26a93fed6faa94f, 0x0000bffc -data8 0x9fd43df079d0db1f, 0x0000bffc -data8 0x9d3cbe69aecac4c2, 0x0000bffc -data8 0x99574f13c570d0fb, 0x0000bffc -data8 0x96bce349bf7ee6c7, 0x0000bffc -data8 0x92d30c9b86cee18e, 0x0000bffc -data8 0x9035adef17c5bd5c, 0x0000bffc -data8 0x8c4765e8e8b5f251, 0x0000bffc -data8 0x89a70da448316ffa, 0x0000bffc -data8 0x85b44a24474af78a, 0x0000bffc -data8 0x8310f17aab5adf70, 0x0000bffc -data8 0x806c6388d0965f29, 0x0000bffc -data8 0xf8e69092bf0c5ead, 0x0000bffb -data8 0xf397608bfd2d90e6, 0x0000bffb -data8 0xee45be24d0eedbc4, 0x0000bffb -data8 0xe646af233db881e9, 0x0000bffb -data8 0xe0eee4e1ce3d06fb, 0x0000bffb -data8 0xdb94a049e6e87a4f, 0x0000bffb -data8 0xd3888ef9a4249f5a, 0x0000bffb -data8 0xce280e6fbac39194, 0x0000bffb -data8 0xc8c50b72319ad574, 0x0000bffb -data8 0xc0abcd39f41e329b, 0x0000bffb -data8 0xbb4279cfa7f9667b, 0x0000bffb -data8 0xb5d69bac77ec398a, 0x0000bffb -data8 0xb068306bf20d6233, 0x0000bffb -data8 0xa83dc1b019ddb6a8, 0x0000bffb -data8 0xa2c8eb1886c2d024, 0x0000bffb -data8 0x9d517ee93f8e16c0, 0x0000bffb -data8 0x97d77aae659b92fb, 0x0000bffb -data8 0x8f9b91da5736d415, 0x0000bffb -data8 0x8a1b06b09b7fd1d1, 0x0000bffb -data8 0x8497daca0a2e077a, 0x0000bffb -data8 0xfe241745a453f10c, 0x0000bffa -data8 0xf3132d6708d723c5, 0x0000bffa -data8 0xe7fcf2e21a0e7d77, 0x0000bffa -data8 0xd75198b04afb8da9, 0x0000bffa -data8 0xcc2dfe1a4a8ca305, 0x0000bffa -data8 0xc10500d63aa65882, 0x0000bffa -data8 0xb5d69bac77ec398a, 0x0000bffa -data8 0xaaa2c95dc66abcde, 0x0000bffa -data8 0x9f6984a342d13101, 0x0000bffa -data8 0x942ac82e5387ac51, 0x0000bffa -data8 0x88e68ea899a0976c, 0x0000bffa -data8 0xefebc4409ccf872e, 0x0000bff9 -data8 0xd947b0c6642ef69e, 0x0000bff9 -data8 0xc2987d51e043d407, 0x0000bff9 -data8 0xabde1eeee6bfd257, 0x0000bff9 -data8 0x95188a9917cf2e01, 0x0000bff9 -data8 0xfc8f6a777c1b7f1e, 0x0000bff8 -data8 0xced727635c59725c, 0x0000bff8 -data8 0xa108358a4c904615, 0x0000bff8 -data8 0xe644fcbeb3ac9c90, 0x0000bff7 -data8 0x8a4bd667bf08e7de, 0x0000bff7 -data8 0x0000000000000000 // T[255] Low -data8 0x0000000000000000 // T[255] High -LOCAL_OBJECT_END(T_table) - - - -.section .text -GLOBAL_LIBM_ENTRY(log2) - -{ .mfi - alloc r32=ar.pfs,1,4,4,0 - // y=frcpa(x) - frcpa.s1 f6,p0=f1,f8 - // will form significand of 1.5 (to test whether the index is 128 or above) - mov r24=0xc -} -{.mfi - nop.m 0 - // normalize x - fma.s1 f7=f8,f1,f0 - // r2 = pointer to C_1...C_6 followed by T_table - addl r2 = @ltoff(poly_coeffs), gp;; -} -{.mfi - // get significand - getf.sig r25=f8 - // f8 denormal ? - fclass.m p8,p10=f8,0x9 - // will form significand of 1.5 (to test whether the index is 128 or above) - shl r24=r24,60 -} -{.mfi - mov r26=0x804 - nop.f 0 - // r23=bias-1 - mov r23=0xfffe;; -} - -{.mmf - getf.exp r29=f8 - // load start address for C_1...C_6 followed by T_table - ld8 r2=[r2] - // will continue only for positive normal/denormal numbers - fclass.nm.unc p12,p7 = f8, 0x19 ;; -} - -.pred.rel "mutex",p8,p10 -{.mfi - // denormal input, repeat get significand (after normalization) - (p8) getf.sig r25=f7 - // x=1 ? - fcmp.eq.s0 p6,p0=f8,f1 - // get T_index - (p10) shr.u r28=r25,63-8 -} -{.mfi - // f32=0.5 - setf.exp f32=r23 - nop.f 0 - // r27=bias - mov r27=0xffff;; -} - -{.mmi - // denormal input, repeat get exponent (after normalization) - (p8) getf.exp r29=f7 - mov r23=0xff - // r26=0x80400...0 (threshold for using polynomial approximation) - shl r26=r26,64-12;; -} - -{.mfb - add r3=48,r2 - // r=1-x*y - fms.s1 f6=f6,f8,f1 - (p12) br.cond.spnt SPECIAL_LOG2 -} -{.mfi - // load C_4, C_5 - ldfpd f10,f11=[r2],16 - nop.f 0 - cmp.geu p12,p0=r25,r24;; -} - -{.mmi - // load C_6, C_7 - ldfpd f12,f13=[r2],16 - // r27=bias-1 (if index >=128, will add exponent+1) - (p12) mov r27=0xfffe - (p8) shr.u r28=r25,63-8;; -} - - -{.mfi - // load C_1 - ldfe f14=[r2],32 - fmerge.se f7=f1,f7 - // if first 9 bits after leading 1 are all zero, then p8=1 - cmp.ltu p8,p12=r25,r26 -} -{.mfi - // load C_3 - ldfe f15=[r3] - nop.f 0 - // get T_index - and r28=r28,r23;; -} -{.mfi - // r29=exponent-bias - sub r29=r29,r27 - // x=1, return 0 - (p6) fma.d.s0 f8=f0,f0,f0 - // get T address - shladd r2=r28,4,r2 -} -{.mfb - // first 8 bits after leading 1 are all ones ? - cmp.eq p10,p0=r23,r28 - // if first 8 bits after leading bit are 0, use polynomial approx. only - (p8) fms.s1 f6=f7,f1,f1 - // x=1, return - (p6) br.ret.spnt b0;; -} -{.mfi - // r26=1 - mov r26=1 - // if first 8 bits after leading 1 are all ones, use polynomial approx. only - (p10) fms.s1 f6=f7,f32,f1 - nop.i 0;; -} - -.pred.rel "mutex",p8,p12 -{.mmf - // load T (unless first 9 bits after leading 1 are 0) - (p12) ldfe f33=[r2] - // f8=expon - bias - setf.sig f8=r29 - // set T=0 (if first 9 bits after leading 1 are 0) - (p8) fma.s1 f33=f0,f0,f0;; -} - -{.mfi - nop.m 0 - // P12=1-0.5*r - fnma.s1 f32=f32,f6,f1 - // r26=2^{63} - shl r26=r26,63 -} -{.mfi - nop.m 0 - // r2=r*r - fma.s1 f7=f6,f6,f0 - nop.i 0;; -} -{.mfi - // significand(x)=1 ? - cmp.eq p0,p6=r26,r25 - // P67=C_6+C_7*r - fma.s1 f13=f13,f6,f12 - nop.i 0 -} -{.mfi - nop.m 0 - // P45=C_4+C_5*r - fma.s1 f10=f11,f6,f10 - nop.i 0;; -} - -{.mfi - nop.m 0 - // C_1*r - (p6) fma.s1 f14=f14,f6,f0 - nop.i 0;; -} -{.mfi - nop.m 0 - // normalize additive term (l=exponent of x) - fcvt.xf f8=f8 - nop.i 0 -} -{.mfi - nop.m 0 - // P13=1-0.5*r+C_3*r^2 - (p6) fma.s1 f15=f15,f7,f32 - nop.i 0;; -} - -{.mfi - nop.m 0 - // P47=P45+r2*P67 - (p6) fma.s1 f13=f13,f7,f10 - // if significand(x)=1, return exponent (l) - nop.i 0 -} -{.mfi - nop.m 0 - // r3=r^3 - (p6) fma.s1 f7=f7,f6,f0 - nop.i 0;; -} - -{.mfi - nop.m 0 - // add T+l - (p6) fma.s1 f8=f8,f1,f33 - nop.i 0 -} -{.mfi - nop.m 0 - // P17=P13+r3*P47 - (p6) fma.s1 f13=f13,f7,f15 - nop.i 0;; -} - -{.mfb - nop.m 0 - // result=T+l+(C_1*r)*P16 - (p6) fma.d.s0 f8=f13,f14,f8 - // return - br.ret.sptk b0;; -} - - -SPECIAL_LOG2: -{.mfi - nop.m 0 - // x=+Infinity ? - fclass.m p7,p0=f8,0x21 - nop.i 0;; -} -{.mfi - nop.m 0 - // x=+/-Zero ? - fclass.m p8,p0=f8,0x7 - nop.i 0;; -} -{.mfi - nop.m 0 - // x=-Infinity, -normal, -denormal ? - fclass.m p6,p0=f8,0x3a - nop.i 0;; -} -{.mfb - nop.m 0 - // log2(+Infinity)=+Infinity - nop.f 0 - (p7) br.ret.spnt b0;; -} -{.mfi - (p8) mov GR_Parameter_TAG = 170 - // log2(+/-0)=-infinity, raises Divide by Zero - // set f8=-0 - (p8) fmerge.ns f8=f0,f8 - nop.i 0;; -} -{.mfb - nop.m 0 - (p8) frcpa.s0 f8,p0=f1,f8 - (p8) br.cond.sptk __libm_error_region;; -} -{.mfb - (p6) mov GR_Parameter_TAG = 171 - // x<0: return NaN, raise Invalid - (p6) frcpa.s0 f8,p0=f0,f0 - (p6) br.cond.sptk __libm_error_region;; -} - - -{.mfb - nop.m 0 - // Remaining cases: NaNs - fma.d.s0 f8=f8,f1,f0 - br.ret.sptk b0;; -} - -GLOBAL_LIBM_END(log2) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_log2f.S b/sysdeps/ia64/fpu/e_log2f.S deleted file mode 100644 index 2c3f18f360..0000000000 --- a/sysdeps/ia64/fpu/e_log2f.S +++ /dev/null @@ -1,547 +0,0 @@ -.file "log2f.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 09/11/00 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// float log2f(float) -// -// Overview of operation -//============================================================== -// Background -// -// Implementation -// -// Let x = 2^l * m, where m=1.b1 b2 ... b8 b9 ... b52 -// y=frcpa(m), r=m*y-1, f=b1 b2 .. b8 (table index) -// j=0 if f<128; j=1 if f>=128 -// T is a table that stores log2(1/y) (in entries 1..255) rounded to -// double extended precision; f is used as an index; T[255]=0 -// -// If f=0 and b9=0, r is set to 2^{-8}* 0.b9 b10 ... b52 = m-1 (fractional part of m), -// and 0 is used instead of T[0] -// (polynomial evaluation only, for m=1+r, 0<=r<2^{-9}) -// If f=255, r is set to (m-2)/2 (T[255]=0, and only polynomial evaluation is used -// for m=2(1-r'), 0<=r'<2^{-9}) -// -// log2f(x) is approximated as -// (l-j) + T[f] + (c1*r+c2*r^2+...+c6*r^6), if f>0 -// - - -// Special values -//============================================================== -// log2f(0)=-inf, raises Divide by Zero -// log2f(+inf)=inf -// log2f(x)=NaN, raises Invalid if x<0 -// - - -// Registers used -//============================================================== -// f6-f14 -// r2-r3, r23-r30 -// p6,p7,p8,p12 -// - - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 // This reg. can safely be used -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - - - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(poly_coeffs) - -data8 0x3fdec709dc3a03fd, 0xbfd71547652b82fe //C_3 and C_4 -data8 0xb8aa3b295c17f0bc, 0x00003fff // C_1 -data8 0xb8aa3b295c17f0bc, 0x0000bffe // C_2 -LOCAL_OBJECT_END(poly_coeffs) - - -LOCAL_OBJECT_START(T_table) - -data8 0x3f671b0ea42e5fda, 0x3f815cfe8eaec830 -data8 0x3f8cfee70c5ce5dc, 0x3f94564a62192834 -data8 0x3f997723ace35766, 0x3f9f5923c69b54a1 -data8 0x3fa2a094a085d693, 0x3fa538941776b01e -data8 0x3fa8324c9b914bc7, 0x3faacf54ce07d7e9 -data8 0x3fadced958dadc12, 0x3fb0387efbca869e -data8 0x3fb18ac6067479c0, 0x3fb30edd3e13530d -data8 0x3fb463c15936464e, 0x3fb5b9e13c3fa21d -data8 0x3fb7113f3259e07a, 0x3fb869dd8d1b2035 -data8 0x3fb9c3bea49d3214, 0x3fbb1ee4d7961701 -data8 0x3fbc7b528b70f1c5, 0x3fbdd90a2c676ed4 -data8 0x3fbf05d4976c2028, 0x3fc032fbbaee6d65 -data8 0x3fc0e3b5a9f3284a, 0x3fc195195c7d125b -data8 0x3fc22dadc2ab3497, 0x3fc2e050231df57d -data8 0x3fc379f79c2b255b, 0x3fc42ddd2ba1b4a9 -data8 0x3fc4c89b9e6807f5, 0x3fc563dc29ffacb2 -data8 0x3fc619a25f5d798d, 0x3fc6b5ffbf367644 -data8 0x3fc752e1f660f8d6, 0x3fc7f049e753e7cf -data8 0x3fc8a8980abfbd32, 0x3fc94724cca657be -data8 0x3fc9e63a24971f46, 0x3fca85d8feb202f7 -data8 0x3fcb2602497d5346, 0x3fcbc6b6f5ee1c9b -data8 0x3fcc67f7f770a67e, 0x3fcceec4b2234fba -data8 0x3fcd91097ad13982, 0x3fce33dd57f3d335 -data8 0x3fced74146bc7b10, 0x3fcf7b3646fef683 -data8 0x3fd00223a943dc19, 0x3fd054a474bf0eb7 -data8 0x3fd0999d9b9259a1, 0x3fd0eca66d3b2581 -data8 0x3fd13ffa2e85b475, 0x3fd185a444fa0a7b -data8 0x3fd1cb8312f27eff, 0x3fd21fa1441ce5e8 -data8 0x3fd265f526e603cb, 0x3fd2baa0c34be1ec -data8 0x3fd3016b45de21ce, 0x3fd3486c38aa29a8 -data8 0x3fd38fa3efaa8262, 0x3fd3e562c0816a02 -data8 0x3fd42d141f53b646, 0x3fd474fd543f222c -data8 0x3fd4bd1eb680e548, 0x3fd505789e234bd1 -data8 0x3fd54e0b64003b70, 0x3fd596d761c3c1f0 -data8 0x3fd5dfdcf1eeae0e, 0x3fd6291c6fd9329c -data8 0x3fd6729637b59418, 0x3fd6bc4aa692e0fd -data8 0x3fd7063a1a5fb4f2, 0x3fd75064f1ed0715 -data8 0x3fd79acb8cf10390, 0x3fd7d67c1e43ae5c -data8 0x3fd8214f4068afa7, 0x3fd86c5f36dea3dc -data8 0x3fd8b7ac64dd7f9d, 0x3fd8f4167a0c6f92 -data8 0x3fd93fd2d5e1bf1d, 0x3fd98bcd84296946 -data8 0x3fd9c8c333e6e9a5, 0x3fda152f142981b4 -data8 0x3fda527fd95fd8ff, 0x3fda9f5e3edeb9e6 -data8 0x3fdadd0b2b5755a7, 0x3fdb2a5d6f51ff83 -data8 0x3fdb686799b00be3, 0x3fdbb62f1b887cd8 -data8 0x3fdbf4979f666668, 0x3fdc332a6e8399d4 -data8 0x3fdc819dc2d45fe4, 0x3fdcc0908e19b7bd -data8 0x3fdcffae611ad12b, 0x3fdd3ef776d43ff4 -data8 0x3fdd8e5002710128, 0x3fddcdfb486cb9a1 -data8 0x3fde0dd294245fe4, 0x3fde4dd622a28840 -data8 0x3fde8e06317114f0, 0x3fdece62fe9a9915 -data8 0x3fdf1f164a15389a, 0x3fdf5fd8a9063e35 -data8 0x3fdfa0c8937e7d5d, 0x3fdfe1e649bb6335 -data8 0x3fe011990641535a, 0x3fe032560e91e59e -data8 0x3fe0532a5ebcd44a, 0x3fe0741617f5fc28 -data8 0x3fe08cd653f38839, 0x3fe0adeb55c1103b -data8 0x3fe0cf181d5d1dd0, 0x3fe0f05ccd0aced7 -data8 0x3fe111b9875788ab, 0x3fe1332e6f1bcf73 -data8 0x3fe154bba77c2088, 0x3fe16df59bfa06c1 -data8 0x3fe18fadb6e2d3c2, 0x3fe1b17e849adc26 -data8 0x3fe1caeb6a0de814, 0x3fe1ece7c830eec9 -data8 0x3fe20efd3dae01df, 0x3fe2289de375d901 -data8 0x3fe24adf9b6a6fe0, 0x3fe26d3ad1aebcfc -data8 0x3fe287100c2771f4, 0x3fe2a9983b3c1b28 -data8 0xbfda78e146f7bef4, 0xbfda33760a7f6051 -data8 0xbfd9ff43476fb5f7, 0xbfd9b97c3c4eec8f -data8 0xbfd98504431717fc, 0xbfd93ee07535f967 -data8 0xbfd90a228d5712b2, 0xbfd8c3a104cb24f5 -data8 0xbfd88e9c72e0b226, 0xbfd847bc33d8618e -data8 0xbfd812703988bb69, 0xbfd7dd0569c04bff -data8 0xbfd7959c202292f1, 0xbfd75fe8d2c5d48f -data8 0xbfd72a1637cbc183, 0xbfd6e221cd9d0cde -data8 0xbfd6ac059985503b, 0xbfd675c99ce81f92 -data8 0xbfd63f6db2590482, 0xbfd5f6c138136489 -data8 0xbfd5c01a39fbd688, 0xbfd58952cf519193 -data8 0xbfd5526ad18493ce, 0xbfd51b6219bfe6ea -data8 0xbfd4d1cdf8b4846f, 0xbfd49a784bcd1b8b -data8 0xbfd4630161832547, 0xbfd42b6911cf5465 -data8 0xbfd3f3af3461e1c4, 0xbfd3bbd3a0a1dcfb -data8 0xbfd383d62dac7ae7, 0xbfd34bb6b2546218 -data8 0xbfd313750520f520, 0xbfd2db10fc4d9aaf -data8 0xbfd2a28a6dc90387, 0xbfd269e12f346e2c -data8 0xbfd2311515e2e855, 0xbfd1f825f6d88e13 -data8 0xbfd1bf13a6c9c69f, 0xbfd185ddfa1a7ed0 -data8 0xbfd14c84c4dd6128, 0xbfd11307dad30b76 -data8 0xbfd0d9670f6941fe, 0xbfd09fa235ba2020 -data8 0xbfd0790adbb03009, 0xbfd03f09858c55fb -data8 0xbfd004e3a7c97cbd, 0xbfcf9532288fcf69 -data8 0xbfcf205339208f27, 0xbfceab2a23a5b83e -data8 0xbfce5ce55fdd37a5, 0xbfcde73fe3b1480f -data8 0xbfcd714f44623927, 0xbfccfb1321b8c400 -data8 0xbfccac163c770dc9, 0xbfcc355b67195dd0 -data8 0xbfcbbe540a3f036f, 0xbfcb6ecf175f95e9 -data8 0xbfcaf74751e1be33, 0xbfca7f71fb7bab9d -data8 0xbfca2f632320b86b, 0xbfc9b70ba539dfae -data8 0xbfc93e6587910444, 0xbfc8edcae8352b6c -data8 0xbfc874a0db01a719, 0xbfc7fb27199df16d -data8 0xbfc7a9fec7d05ddf, 0xbfc72fff456ac70d -data8 0xbfc6de7d66023dbc, 0xbfc663f6fac91316 -data8 0xbfc6121ac74813cf, 0xbfc5970c478fff4a -data8 0xbfc51bab907a5c8a, 0xbfc4c93d33151b24 -data8 0xbfc44d527fdadf55, 0xbfc3fa87be0f3a1b -data8 0xbfc3a797cd35d959, 0xbfc32ae9e278ae1a -data8 0xbfc2d79c6937efdd, 0xbfc25a619370d9dc -data8 0xbfc206b5bde2f8b8, 0xbfc188ecbd1d16be -data8 0xbfc134e1b489062e, 0xbfc0b6894488e95f -data8 0xbfc0621e2f556b5c, 0xbfc00d8c711a12cc -data8 0xbfbf1cd21257e18c, 0xbfbe72ec117fa5b2 -data8 0xbfbdc8b7c49a1ddb, 0xbfbcc8d5e467b710 -data8 0xbfbc1ddc9c39c7a1, 0xbfbb7294093cdd0f -data8 0xbfba7111df348494, 0xbfb9c501cdf75872 -data8 0xbfb918a16e46335b, 0xbfb81579a73e83c6 -data8 0xbfb7684f39f4ff2d, 0xbfb6bad3758efd87 -data8 0xbfb60d060d7e41ac, 0xbfb507b836033bb7 -data8 0xbfb4591d6310d85a, 0xbfb3aa2fdd27f1c3 -data8 0xbfb2faef55ccb372, 0xbfb1f3723b4ae6db -data8 0xbfb14360d6136ffa, 0xbfb092fb594145c1 -data8 0xbfafc482e8b48a7e, 0xbfae6265ace11ae4 -data8 0xbfacff9e5c4341d0, 0xbfaaea3316095f72 -data8 0xbfa985bfc3495194, 0xbfa820a01ac754cb -data8 0xbfa6bad3758efd87, 0xbfa554592bb8cd58 -data8 0xbfa3ed3094685a26, 0xbfa2855905ca70f6 -data8 0xbfa11cd1d5133413, 0xbf9dfd78881399f1 -data8 0xbf9b28f618cc85df, 0xbf98530faa3c087b -data8 0xbf957bc3dddcd7fa, 0xbf92a3115322f9e6 -data8 0xbf8f91ed4eef8370, 0xbf89dae4ec6b8b2e -data8 0xbf842106b1499209, 0xbf7cc89f97d67594 -data8 0xbf71497accf7e11d, 0x0000000000000000 -LOCAL_OBJECT_END(T_table) - - -.section .text -GLOBAL_LIBM_ENTRY(log2f) - -{ .mfi - alloc r32=ar.pfs,1,4,4,0 - // y=frcpa(x) - frcpa.s1 f6,p0=f1,f8 - // will form significand of 1.5 (to test whether the index is 128 or above) - mov r24=0xc -} -{.mfi - nop.m 0 - // normalize x - fma.s1 f7=f8,f1,f0 - // r2 = pointer to C_1...C_6 followed by T_table - addl r2 = @ltoff(poly_coeffs), gp;; -} -{.mfi - // get significand - getf.sig r25=f8 - // f8 denormal ? - fclass.m p8,p10=f8,0x9 - // will form significand of 1.5 (to test whether the index is 128 or above) - shl r24=r24,60 -} -{.mfi - mov r26=0x804 - nop.f 0 - // r23=bias-1 - mov r23=0xfffe;; -} - -{.mmf - getf.exp r29=f8 - // load start address for C_1...C_6 followed by T_table - ld8 r2=[r2] - // will continue only for positive normal/denormal numbers - fclass.nm.unc p12,p7 = f8, 0x19 ;; -} - -.pred.rel "mutex",p8,p10 -{.mfi - // denormal input, repeat get significand (after normalization) - (p8) getf.sig r25=f7 - // x=1 ? - fcmp.eq.s0 p6,p0=f8,f1 - // get T_index - (p10) shr.u r28=r25,63-8 -} -{.mfi - // f12=0.5 - setf.exp f12=r23 - nop.f 0 - // r27=bias - mov r27=0xffff;; -} - -{.mfb - // denormal input, repeat get exponent (after normalization) - (p8) getf.exp r29=f7 - nop.f 0 - (p12) br.cond.spnt SPECIAL_log2f -} -{.mfi - cmp.geu p12,p0=r25,r24 - nop.f 0 - mov r23=0xff;; -} - -{.mfi - add r3=32,r2 - // r=1-x*y - fms.s1 f6=f6,f8,f1 - // r26=0x80400...0 (threshold for using polynomial approximation) - shl r26=r26,64-12 -} -{.mfi - // load C_3, C_4 - ldfpd f10,f11=[r2],16 - nop.f 0 - // r27=bias-1 (if index >=128, will add exponent+1) - (p12) mov r27=0xfffe;; -} - -{.mfi - // load C_1 - ldfe f14=[r2],32 - // x=1, return 0 - (p6) fma.s.s0 f8=f0,f0,f0 - (p8) shr.u r28=r25,63-8 -} -{.mib - // load C_2 - ldfe f13=[r3] - // r29=exponent-bias - sub r29=r29,r27 - // x=1, return - (p6) br.ret.spnt b0;; -} - - -{.mfi - // get T_index - and r28=r28,r23 - fmerge.se f7=f1,f7 - // if first 9 bits after leading 1 are all zero, then p8=1 - cmp.ltu p8,p12=r25,r26;; -} -{.mfi - // f8=expon - bias - setf.sig f8=r29 - nop.f 0 - // get T address - shladd r2=r28,3,r2 -} -{.mfi - // first 8 bits after leading 1 are all ones ? - cmp.eq p10,p0=r23,r28 - // if first 8 bits after leading bit are 0, use polynomial approx. only - (p8) fms.s1 f6=f7,f1,f1 - nop.i 0;; -} -{.mfi - //r26=1 - mov r26=1 - // if first 8 bits after leading 1 are all ones, use polynomial approx. only - (p10) fms.s1 f6=f7,f12,f1 - nop.i 0;; -} - -.pred.rel "mutex",p8,p12 -{.mmf - // load T (unless first 9 bits after leading 1 are 0) - (p12) ldfd f12=[r2] - nop.m 0 - // set T=0 (if first 9 bits after leading 1 are 0) - (p8) fma.s1 f12=f0,f0,f0;; -} - -{.mfi - nop.m 0 - // P34=C_3+C_4*r - fma.s1 f10=f11,f6,f10 - // r26=2^{63} - shl r26=r26,63 -} -{.mfi - nop.m 0 - // r2=r*r - fma.s1 f11=f6,f6,f0 - nop.i 0;; -} -{.mfi - // significand of x is 1 ? - cmp.eq p0,p6=r25,r26 - // P12=C_1+C_2*r - fma.s1 f14=f13,f6,f14 - nop.i 0;; -} -{.mfi - nop.m 0 - // normalize additive term (l=exponent of x) - fcvt.xf f8=f8 - // if significand(x)=1, return exponent (l) - nop.i 0;; -} -{.mfi - nop.m 0 - // add T+l - (p6) fma.s1 f8=f8,f1,f12 - nop.i 0 -} -{.mfi - nop.m 0 - // P14=P12+r2*P34 - (p6) fma.s1 f13=f10,f11,f14 - nop.i 0;; -} - -{.mfb - nop.m 0 - // result=T+l+r*P14 - (p6) fma.s.s0 f8=f13,f6,f8 - // return - br.ret.sptk b0;; -} - - -SPECIAL_log2f: -{.mfi - nop.m 0 - // x=+Infinity ? - fclass.m p7,p0=f8,0x21 - nop.i 0;; -} -{.mfi - nop.m 0 - // x=+/-Zero ? - fclass.m p8,p0=f8,0x7 - nop.i 0;; -} -{.mfi - nop.m 0 - // x=-Infinity, -normal, -denormal ? - fclass.m p6,p0=f8,0x3a - nop.i 0;; -} -{.mfb - nop.m 0 - // log2f(+Infinity)=+Infinity - nop.f 0 - (p7) br.ret.spnt b0;; -} -{.mfi - (p8) mov GR_Parameter_TAG = 172 - // log2f(+/-0)=-infinity, raises Divide by Zero - // set f8=-0 - (p8) fmerge.ns f8=f0,f8 - nop.i 0;; -} -{.mfb - nop.m 0 - (p8) frcpa.s0 f8,p0=f1,f8 - (p8) br.cond.sptk __libm_error_region;; -} -{.mfb - (p6) mov GR_Parameter_TAG = 173 - // x<0: return NaN, raise Invalid - (p6) frcpa.s0 f8,p0=f0,f0 - (p6) br.cond.sptk __libm_error_region;; -} - - -{.mfb - nop.m 0 - // Remaining cases: NaNs - fma.s.s0 f8=f8,f1,f0 - br.ret.sptk b0;; -} - -GLOBAL_LIBM_END(log2f) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfs [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_log2l.S b/sysdeps/ia64/fpu/e_log2l.S deleted file mode 100644 index 4d5a828f58..0000000000 --- a/sysdeps/ia64/fpu/e_log2l.S +++ /dev/null @@ -1,815 +0,0 @@ -.file "log2l.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 09/25/00 Initial version -// 11/22/00 Fixed accuracy bug (for mantissas near 1, 2) -// 12/07/00 Fixed C_1l constant, eliminated rounding errors in -// reduced argument (x*frcpa(x)-1) -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// long double log2l(long double) -// -// Overview of operation -//============================================================== -// Background -// -// Implementation -// -// Let x = 2^l * m, where m=1.b1 b2 ... b8 b9 ... b52 -// y=frcpa(m), r=m*y-1, f=b1 b2 .. b8 -// T_hi is a table that stores the 24 most significant bits of log2(1/y) -// (in entries 1..255) in single precision format -// T_low is a table that stores (log2(1/y)-T_high), rounded to double -// precision -// -// f is used as an index; T_high[255]=T_low[255]=0 -// -// If f=0 and b9=0, r is set to 2^{-8}* 0.b9 b10 ... b52 = m-1 (fractional part of m), -// and 0 is used instead of T_high[0], T_low[0] -// (polynomial evaluation only, for m=1+r, 0<=r<2^{-9}) -// If f=255, r is set to (m-2)/2 (T[255]=0, and only polynomial evaluation is used -// for m=2(1-r'), 0<=r'<2^{-9}) -// -// If 2^{-9}<=m<2-2^{-8} or (input not near 1), let C1r=(2^{16}+C1*r)-2^{16} -// and let E=((RN(m*y)-1)-r)+(m*y-RN(m*y)) -// Else let C1r=C1*r (rounded to 64 significant bits) and let E=0 -// -// Let D=C1*r-C1r -// -// -// log2l(x) is approximated as -// (l+T_high[f]+C1r) + (D+r*(c1+c2*r+c3*r^2...+c8*r^7)+(T_low[f]+C_1*E)) -// - - -// Special values -//============================================================== -// log2l(0)=-inf, raises Divide by Zero -// log2l(+inf)=inf -// log2l(x)=NaN, raises Invalid if x<0 -// - - -// Registers used -//============================================================== -// f6-f15, f32-f36 -// r2-r3, r23-r23 -// p6,p7,p8,p12 -// - - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 // This reg. can safely be used -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - - - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(poly_coeffs) - -data8 0xb8aa3b295c17f0bc, 0x00003fff // C_1 -data8 0x3fca61762a7aded9, 0xbfc71547652b82fe // C_7, C_8 -data8 0x3fd2776c50ef9bfe, 0xbfcec709dc3a03fd // C_5, C_6 -data8 0x3fdec709dc3a03fd, 0xbfd71547652b82fe // C_3, C_4 -//data8 0xd871319ff0342580, 0x0000bfbd // C_1l (low part of C1) -data8 0x82f0025f2dc582ee, 0x0000bfbe // C_1l (low part of C1) -data8 0xb8aa3b295c17f0bc, 0x0000bffe // C_2 -LOCAL_OBJECT_END(poly_coeffs) - - - - -LOCAL_OBJECT_START(T_table) - -data4 0x3b38d875, 0x3c0ae7f4, 0x3c67f738, 0x3ca2b253 -data4 0x3ccbb91d, 0x3cfac91e, 0x3d1504a5, 0x3d29c4a0 -data4 0x3d419264, 0x3d567aa6, 0x3d6e76ca, 0x3d81c3f7 -data4 0x3d8c5630, 0x3d9876e9, 0x3da31e0a, 0x3dadcf09 -data4 0x3db889f9, 0x3dc34eec, 0x3dce1df5, 0x3dd8f726 -data4 0x3de3da94, 0x3deec851, 0x3df82ea4, 0x3e0197dd -data4 0x3e071dad, 0x3e0ca8ca, 0x3e116d6e, 0x3e170281 -data4 0x3e1bcfbc, 0x3e216ee9, 0x3e2644dc, 0x3e2b1ee1 -data4 0x3e30cd12, 0x3e35affd, 0x3e3a970f, 0x3e3f824f -data4 0x3e4544c0, 0x3e4a3926, 0x3e4f31d1, 0x3e542ec7 -data4 0x3e593012, 0x3e5e35b7, 0x3e633fbf, 0x3e677625 -data4 0x3e6c884b, 0x3e719eea, 0x3e76ba0a, 0x3e7bd9b2 -data4 0x3e80111d, 0x3e82a523, 0x3e84ccec, 0x3e876533 -data4 0x3e89ffd1, 0x3e8c2d22, 0x3e8e5c18, 0x3e90fd0a -data4 0x3e932fa9, 0x3e95d506, 0x3e980b5a, 0x3e9a4361 -data4 0x3e9c7d1f, 0x3e9f2b16, 0x3ea168a0, 0x3ea3a7ea -data4 0x3ea5e8f5, 0x3ea82bc4, 0x3eaa705b, 0x3eacb6bb -data4 0x3eaefee7, 0x3eb148e3, 0x3eb394b1, 0x3eb5e255 -data4 0x3eb831d0, 0x3eba8327, 0x3ebcd65c, 0x3ebeb3e0 -data4 0x3ec10a7a, 0x3ec362f9, 0x3ec5bd63, 0x3ec7a0b3 -data4 0x3ec9fe96, 0x3ecc5e6c, 0x3ece4619, 0x3ed0a978 -data4 0x3ed293fe, 0x3ed4faf1, 0x3ed6e859, 0x3ed952eb -data4 0x3edb433c, 0x3eddb178, 0x3edfa4bc, 0x3ee19953 -data4 0x3ee40cee, 0x3ee60484, 0x3ee7fd73, 0x3ee9f7bb -data4 0x3eec7280, 0x3eee6fda, 0x3ef06e94, 0x3ef26eb1 -data4 0x3ef47031, 0x3ef67317, 0x3ef8f8b2, 0x3efafec5 -data4 0x3efd0644, 0x3eff0f32, 0x3f008cc8, 0x3f0192b0 -data4 0x3f029952, 0x3f03a0b0, 0x3f0466b2, 0x3f056f5a -data4 0x3f0678c0, 0x3f0782e6, 0x3f088dcc, 0x3f099973 -data4 0x3f0aa5dd, 0x3f0b6fac, 0x3f0c7d6d, 0x3f0d8bf4 -data4 0x3f0e575b, 0x3f0f673e, 0x3f1077e9, 0x3f1144ef -data4 0x3f1256fc, 0x3f1369d6, 0x3f143880, 0x3f154cc1 -data4 0x3f161c7a, 0x3f173227, 0x3f1802f2, 0x3f191a0f -data4 0x3f19ebee, 0x3f1b047e, 0x3f1bd775, 0x3f1cf17b -data4 0x3f1dc58e, 0x3f1ee10f, 0x3f1fb63f, 0x3f208bea -data4 0x3f21a98f, 0x3f22805c, 0x3f2357a7, 0x3f247778 -data4 0x3f254fe9, 0x3f2628d9, 0x3f270249, 0x3f2824fb -data4 0x3f28ff97, 0x3f29dab4, 0x3f2ab654, 0x3f2b9277 -data4 0x3f2cb8c8, 0x3f2d961e, 0x3f2e73fa, 0x3f2f525b -data4 0x3f303143, 0x3f3110b1, 0x3f31f0a7, 0x3f32d125 -data4 0x3f33b22b, 0x3f3493bc, 0x3f3575d6, 0x3f36587b -data4 0x3f373bab, 0x3f381f68, 0x3f3903b1, 0x3f39e888 -data4 0x3f3acdec, 0x3f3bb3e0, 0x3f3c9a63, 0x3f3d8177 -data4 0x3f3e1bd4, 0x3f3f03d9, 0x3f3fec71, 0x3f40d59b -data4 0x3f41bf59, 0x3f42a9ab, 0x3f434635, 0x3f443180 -data4 0x3f451d61, 0x3f4609d9, 0x3f46a7d3, 0x3f479549 -data4 0x3f488357, 0x3f492261, 0x3f4a1171, 0x3f4b011c -data4 0x3f4ba139, 0x3f4c91e8, 0x3f4d8334, 0x3f4e246a -data4 0x3f4f16be, 0x3f5009b1, 0x3f50ac02, 0x3f51a001 -data4 0x3f524305, 0x3f533812, 0x3f53dbca, 0x3f54d1e7 -data4 0x3f55c8a8, 0x3f566d85, 0x3f57655b, 0x3f580af0 -data4 0x3f58b0d0, 0x3f59aa2c, 0x3f5a50c7, 0x3f5b4b3c -data4 0x3f5bf294, 0x3f5cee26, 0x3f5d963c, 0x3f5e92ed -data4 0x3f5f3bc3, 0x3f5fe4e7, 0x3f60e32d, 0x3f618d13 -data4 0x3f623748, 0x3f63372a, 0x3f63e223, 0x3f648d6b -data4 0x3f658eee, 0x3f663afe, 0x3f66e75e, 0x3f67ea86 -data4 0x3f6897b0, 0x3f69452c, 0x3f69f2f9, 0x3f6af847 -data4 0x3f6ba6e2, 0x3f6c55d0, 0x3f6d0510, 0x3f6e0c8d -data4 0x3f6ebc9f, 0x3f6f6d04, 0x3f701dbe, 0x3f70cecd -data4 0x3f718030, 0x3f728ae6, 0x3f733d20, 0x3f73efaf -data4 0x3f74a296, 0x3f7555d3, 0x3f760967, 0x3f76bd53 -data4 0x3f777197, 0x3f7880a1, 0x3f7935c2, 0x3f79eb3c -data4 0x3f7aa10f, 0x3f7b573b, 0x3f7c0dc2, 0x3f7cc4a3 -data4 0x3f7d7bdf, 0x3f7e3376, 0x3f7eeb68, 0x00000000 -LOCAL_OBJECT_END(T_table) - - - -LOCAL_OBJECT_START(T_low) - - -data8 0x3dc0b97f689876ef, 0x3dfd5d906028ac01 -data8 0x3df8b9cbb8d7240b, 0x3de0c941a2f220cd -data8 0x3e09c6aecba15936, 0x3dfa6d528241827c -data8 0x3dd0bad25714903c, 0x3e2776b01dc036a2 -data8 0x3e2b914bc77f158b, 0x3e1c0fafd29dc74a -data8 0x3e28dadc119cd3de, 0x3e3bca869da085be -data8 0x3e19d1e700f2200a, 0x3e3e13530cc37504 -data8 0x3e3936464d9c41ee, 0x3e3c3fa21c9499d0 -data8 0x3e3259e079b6c6e8, 0x3e2a364069c4f7f3 -data8 0x3e1274c84f6c6364, 0x3e3796170159f454 -data8 0x3e26e1e389f4364e, 0x3e28cedda8c7f658 -data8 0x3e376c2028433268, 0x3e4aee6d650c82e1 -data8 0x3e33e65094fbeeb4, 0x3e4c7d125aa92c5d -data8 0x3e1559a4b69691d8, 0x3e18efabeb7d7221 -data8 0x3e4c2b255abaa8de, 0x3e37436952a4538b -data8 0x3e4e6807f4ba00b8, 0x3e33ff5964190e42 -data8 0x3e4f5d798cead43c, 0x3e4f3676443bf453 -data8 0x3e4660f8d5bc1bf5, 0x3e2d4f9f3ab04f36 -data8 0x3e357f7a64ccd537, 0x3e394caf7c9b05af -data8 0x3e225c7d17ab29b0, 0x3e4eb202f6d55a12 -data8 0x3e32faa68b19bcd2, 0x3e45ee1c9b566a8b -data8 0x3e4770a67de054ff, 0x3e42234fb9de6d6b -data8 0x3e4ad139825c6e19, 0x3e47f3d334814a93 -data8 0x3e2af1ec402867b6, 0x3e2bfbda0c956e3d -data8 0x3e4287b831e77ff2, 0x3e54bf0eb77f7b89 -data8 0x3e5b9259a1029607, 0x3e4a764b015e699d -data8 0x3e4d0b68ea883ab5, 0x3e33e829ecdadf46 -data8 0x3e52f27efef3031b, 0x3e3073979e4af89e -data8 0x3e3b980f2cd6c253, 0x3e2a5f0f5f7f66a9 -data8 0x3e37788738117b02, 0x3e58aa29a784d52f -data8 0x3e4f5504c4ff2466, 0x3e002d40340fa647 -data8 0x3e5f53b64592f4c3, 0x3e543f222c526802 -data8 0x3e5680e547a872fa, 0x3e5e234bd1154450 -data8 0x3e3000edc18b6d21, 0x3e1c3c1f000942a8 -data8 0x3e51eeae0e442d6e, 0x3e4fb265376623f2 -data8 0x3e57b5941782d830, 0x3e3a4b83f24ae52c -data8 0x3e5a5fb4f23978de, 0x3e51ed071563fb02 -data8 0x3e49e2071f51a7a8, 0x3e5e43ae5b924234 -data8 0x3dfa2be9aedf374a, 0x3e56dea3dbba67d5 -data8 0x3e3375fe732b3c3e, 0x3e5a0c6f91f2e77e -data8 0x3e55e1bf1c969e41, 0x3e30a5a5166b8eee -data8 0x3e53e6e9a539d46c, 0x3e542981b3d7b0e6 -data8 0x3e595fd8ff36ad64, 0x3e5edeb9e65cbbb4 -data8 0x3e46aeab4d3434c1, 0x3e4ea3ff0564b010 -data8 0x3e59b00be2e3c25a, 0x3e5b887cd7b0821f -data8 0x3e5f666668547b4d, 0x3e4d0733a805273f -data8 0x3e26a2ff21c4aec5, 0x3e4c336f7a3a78f3 -data8 0x3e11ad12b628e2d0, 0x3e56d43ff3f0ea64 -data8 0x3e238809433cccd2, 0x3e40d9734147d40f -data8 0x3e54245fe3e24e06, 0x3e251441fce4d48c -data8 0x3e517114efc5d1f9, 0x3e5e9a99154b0d82 -data8 0x3e442a71337970f8, 0x3e420c7c69211fdf -data8 0x3e537e7d5d43c6a7, 0x3e4376c66ad9ad8b -data8 0x3e49054d678a4f1c, 0x3e5d23cb3bc19f18 -data8 0x3e6ebcd449dcab2b, 0x3e67f5fc2849c88a -data8 0x3e63f388395d3e84, 0x3e65c1103b0ad7e9 -data8 0x3e6d5d1dd031f353, 0x3e5a159dae75c4d0 -data8 0x3e4d5e22aa75f71d, 0x3e5e379ee62e1e35 -data8 0x3e4df082213cb2dc, 0x3e6bfa06c156f521 -data8 0x3e66e2d3c19b517b, 0x3e426b7098590071 -data8 0x3e541bd027e9854e, 0x3e5061dd924b0ac0 -data8 0x3e6dae01df373a03, 0x3e3baec80b207b0b -data8 0x3e6b6a6fe06bebac, 0x3e61aebcfc3ab5d1 -data8 0x3e584ee3e7c79d83, 0x3e6b3c1b2840cb40 -data8 0x3e6c842085d6befd, 0x3e6ac04fd7b141e0 -data8 0x3e6c48250474141d, 0x3e2d889b86125f69 -data8 0x3e6e74740225dad0, 0x3e45940d31d50a7c -data8 0x3e695476a6c39ddc, 0x3e6d9a6d857a060a -data8 0x3e4a3e9bb4b69337, 0x3e484f3ce4707ed6 -data8 0x3e39dd125d25fc27, 0x3e563fb400de8732 -data8 0x3e5fdd6d0ee28b48, 0x3e669d15b869bb07 -data8 0x3e40687cfad7964d, 0x3e69317990d43957 -data8 0x3e633d57e24ae1bd, 0x3e618bf03710eabb -data8 0x3e4b4df6fccd1160, 0x3e3fb26ddaa1ec45 -data8 0x3e3810a5e1817fd4, 0x3e6857373642fa5c -data8 0x3e673db6193add31, 0x3e63200c8acbc9c3 -data8 0x3e3d2dee448ebb62, 0x3e6a19723a80db6a -data8 0x3e5e7cdab8fd3e6a, 0x3e671855cd660672 -data8 0x3e473c3c78a85ecd, 0x3e5f5e23056a7cf2 -data8 0x3e52538519527367, 0x3e4b573bcf2580e9 -data8 0x3e6d6f856fe90c60, 0x3e2d932a8487642e -data8 0x3e5236fc78b6174c, 0x3e50cb91d406db50 -data8 0x3e650e8bd562aa57, 0x3e424ee3d9a82f2e -data8 0x3e59363960e1e3d9, 0x3e379604c1150a3e -data8 0x3e6d914f6c2ac258, 0x3e62967a451a7b48 -data8 0x3e684b5f01139cb2, 0x3e448bbfbf6d292c -data8 0x3e6227e7fb487e73, 0x3e6d39d50290f458 -data8 0x3e58368342b4b668, 0x3e65dc0c25bd1763 -data8 0x3e61b7dc362e22b5, 0x3e671691f094bb80 -data8 0x3e5011642d5123f2, 0x3e4c4eb7f11e41be -data8 0x3e5dcee36ca242cf, 0x3e6791cefff688f1 -data8 0x3e60e23c8dda4ecd, 0x3e48e6a22fe78cfe -data8 0x3e6d703f244adc86, 0x3e6a281a85a5049d -data8 0x3e570f20e6403d9e, 0x3e2211518a12956f -data8 0x3e6737d1e54d71df, 0x3e66b1881476f5e9 -data8 0x3e6e1bbeef085376, 0x3e47cad4944a32be -data8 0x3e527f2c738e7ee9, 0x3e699883a4b9fb29 -data8 0x3e5c17d1108740d9, 0x3e5d4a9c79a43389 -data8 0x3e49fdc24462ba3b, 0x3e24dbb3a60cceb2 -data8 0x3e5c5bf618780748, 0x3e5c38005b0c778c -data8 0x3e6be168dd6dd3fe, 0x3e633ab9370693b0 -data8 0x3dd290556b0ae339, 0x3e607c317927096a -data8 0x3e59651353b3d90e, 0x3e4d8751e5e0ae0d -data8 0x3e46c81023272a85, 0x3e6b23c988f391b2 -data8 0x3e608741d215209c, 0x3e60b8ba506d758f -data8 0x3e62ddbe74803297, 0x3e5dbb8b5087587d -data8 0x3e642aa529048131, 0x3e3dcbda6835dcf4 -data8 0x3e6db503ce854d2a, 0x3e6dd00b49bc6849 -data8 0x3e4db2f11243bc84, 0x3e3b9848efc2ea97 -data8 0x3e58f18e17c82609, 0x3e6ed8645e16c312 -data8 0x3e4065bdb60a5dd4, 0x3e490453c6e6c30a -data8 0x3e62373994aa31ba, 0x3e56305f0e6b2a95 -data8 0x3e68c1601a6614ee, 0x3e614e204f19d93f -data8 0x3e6e5037ca773299, 0x3e693f98892561a6 -data8 0x3e639de4f4bf700d, 0x3e416c071e93fd97 -data8 0x3e65466991b415ef, 0x3e6896a324afac9d -data8 0x3e44f64802e2f11c, 0x3e64d7d747e2191a -data8 0x3e6174b7581de84c, 0x3e44c7b946e1d43c -data8 0x3e6a3bcbe30512ec, 0x3e5d3ed411c95ce4 -data8 0x3e3e5b5735cfaf8e, 0x3e6e538ab34efb51 -data8 0x3e514e204f19d93f, 0x3e5a88e6550c89a4 -data8 0x3e66b97a5d9dfd8b, 0x3e5f46b1e14ebaf3 -data8 0x3e357665f6893f5d, 0x3e6bbf633078d1d5 -data8 0x3e5e7337a212c417, 0x3e3570fde15fc8cc -data8 0x3e21119402da92b4, 0x3e6566e830d1ff3b -data8 0x3e558883e480e220, 0x3e589ca3a68da411 -data8 0x3e44eb66df73d648, 0x3e1a0a629b1b7e68 -data8 0x3e54cc207b8c1116, 0x0000000000000000 -LOCAL_OBJECT_END(T_low) - - -.section .text -GLOBAL_IEEE754_ENTRY(log2l) - -{ .mfi - alloc r32=ar.pfs,1,4,4,0 - // normalize x - // y=frcpa(x) - frcpa.s1 f41,p0=f1,f8 - // r26=bias-1 - mov r26=0xfffe -} -{.mfi - // r23=bias+16 - mov r23=0xffff+16 - fma.s1 f7=f8,f1,f0 - // r2 = pointer to C_1...C_6 followed by T_table - addl r2 = @ltoff(poly_coeffs), gp;; -} -{.mfi - // get significand - getf.sig r25=f8 - // f8 denormal ? - fclass.m p8,p10=f8,0x9 - // r24=bias-8 - mov r24=0xffff-8;; -} -{.mfi - setf.exp f36=r26 - nop.f 0 - // r27=bias - mov r27=0xffff;; -} - -{.mmf - getf.exp r29=f8 - // load start address for C_1...C_7 followed by T_table - ld8 r2=[r2] - // will continue only for positive normal/unnormal numbers - fclass.m.unc p0,p12 = f8, 0x19;; -} - - -.pred.rel "mutex",p8,p10 -{.mfi - // denormal input, repeat get significand (after normalization) - (p8) getf.sig r25=f7 - // x=1 ? - fcmp.eq.s0 p6,p0=f8,f1 - // get T_index - (p10) shr.u r28=r25,63-8 -} -{.mfi - // f32=2^16 - setf.exp f32=r23 - nop.f 0 - mov r26=0x804;; -} - -{.mfi - // denormal input, repeat get exponent (after normalization) - (p8) getf.exp r29=f7 - // f33=0 - mov f33=f0 - // r26=0x80400...0 (threshold for using polynomial approximation) - shl r26=r26,64-12;; -} - -{.mfb - add r3=16,r2 - // r=x*y-1 - fms.s1 f6=f41,f8,f1 - (p12) br.cond.spnt SPECIAL_log2l -} -{.mfi - // load C_1 - ldfe f14=[r2],48 - // RN(x*y) - fma.s1 f43=f41,f8,f0 - mov r23=0xff;; -} - -{.mmi - // load C_7, C_8 - ldfpd f10,f11=[r3],16 - // load C_3,C_4 - ldfpd f15,f42=[r2],16 - (p8) shr.u r28=r25,63-8;; -} - - -{.mfi - // load C_5, C_6 - ldfpd f12,f13=[r3] - // pseudo-zero ? - fcmp.eq.s0 p7,p0=f7,f0 - // if first 9 bits after leading 1 are all zero, then p8=1 - cmp.ltu p8,p12=r25,r26 -} -{.mfi - // load C1l - ldfe f34=[r2],16 - fmerge.se f7=f1,f7 - // get T_index - and r28=r28,r23;; -} -{.mfi - // r29=exponent-bias - sub r29=r29,r27 - // if first 8 bits after leading bit are 0, use polynomial approx. only - (p8) fms.s1 f6=f7,f1,f1 - // start address of T_low - add r3=1024+16,r2 -} -{.mfi - // load C_2 - ldfe f35=[r2],16 - // x=1, return 0 - (p6) fma.s0 f8=f0,f0,f0 - // first 8 bits after leading 1 are all ones ? - cmp.eq p10,p0=r23,r28;; -} - -{.mfb - // if first 8 bits after leading 1 are all ones, use polynomial approx. only - // add 1 to the exponent additive term, and estimate log2(1-r) - (p10) add r29=1,r29 - nop.f 0 - (p7) br.cond.spnt LOG2_PSEUDO_ZERO -} -{.mfi - // get T_low address - shladd r3=r28,3,r3 - // if first 8 bits after leading 1 are all ones, use polynomial approx. only - (p10) fms.s1 f6=f7,f36,f1 - // p10 --> p8=1, p12=0 - (p10) cmp.eq p8,p12=r0,r0;; -} - -{.mfi - // get T_high address - shladd r2=r28,2,r2 - // L(x*y)=x*y-RN(x*y) - fms.s1 f41=f41,f8,f43 - nop.i 0 -} -{.mfi - // p13=p12 - (p12) cmp.eq.unc p13,p0=r0,r0 - // RtH=RN(x*y)-1 (will eliminate rounding errors in r) - fms.s1 f43=f43,f1,f1 - nop.i 0;; -} - -.pred.rel "mutex",p8,p12 -{.mfb - // load T_high (unless first 9 bits after leading 1 are 0) - (p12) ldfs f7=[r2] - // set T_high=0 (if first 9 bits after leading 1 are 0) - (p8) fma.s1 f7=f0,f0,f0 - // x=1, return - (p6) br.ret.spnt b0 -} -.pred.rel "mutex",p8,p12 -{.mfi - // p12: load T_low - (p12) ldfd f36=[r3] - // p8: set T_low=0 - (p8) fma.s1 f36=f0,f0,f0 - (p8) cmp.eq p8,p12=r29,r0;; //nop.i 0;; -} - -.pred.rel "mutex",p8,p12 -{.mfi - // f8=expon - bias - setf.sig f8=r29 - // general case: 2^{16}+C1*r - (p12) fma.s1 f33=f6,f14,f32 - nop.i 0 -} -{.mfi - // r26=1 - mov r26=1 - // p8 (mantissa is close to 1, or close to 2): 2^{-8}+C1*r - (p8) fma.s1 f32=f6,f14,f33 - nop.i 0;; -} - -{.mfi - nop.m 0 - // P78=C_7+C_8*r - fma.s1 f10=f11,f6,f10 - // r26=2^{63} - shl r26=r26,63 -} -{.mfi - nop.m 0 - // P34=C_3+r*C_4 - fma.s1 f15=f42,f6,f15 - nop.i 0;; -} -{.mfi - nop.m 0 - // r2=r*r - fma.s1 f11=f6,f6,f0 - nop.i 0 -} -{.mfi - nop.m 0 - // P56=C_5+C_6*r - fma.s1 f13=f13,f6,f12 - nop.i 0;; -} - -{.mfi - nop.m 0 - // Rth-r - (p13) fms.s1 f43=f43,f1,f6 - nop.i 0 -} -{.mfi - // significand(x)=1 ? - cmp.eq p0,p6=r25,r26 - // P12=C1l+C_2*r - fma.s1 f34=f35,f6,f34 - nop.i 0;; -} - -.pred.rel "mutex",p8,p12 -{.mfi - nop.m 0 - // p12: C1r=(2^{16}+C1*r)-2^{16} - (p12) fms.s1 f32=f33,f1,f32 - nop.i 0 -} -{.mfi - nop.m 0 - // p8: C1r=C1*r (double extended) - (p8) fms.s1 f32=f32,f1,f33 - nop.i 0;; -} - -{.mfi - nop.m 0 - // L(x*y)*C_1+T_low - (p13) fma.s1 f36=f41,f14,f36 - nop.i 0 -} -{.mfi - nop.m 0 - // P58=P56+r2*P78 - fma.s1 f13=f11,f10,f13 - nop.i 0;; -} -{.mfi - nop.m 0 - // P14=P12+r2*P34 - fma.s1 f15=f15,f11,f34 - nop.i 0 -} -{.mfi - nop.m 0 - // r4=r2*r2 - fma.s1 f11=f11,f11,f0 - nop.i 0;; -} - -{.mfi - nop.m 0 - // normalize additive term (l=exponent of x) - fcvt.xf f8=f8 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // D=C1*r-C1r - (p6) fms.s1 f12=f14,f6,f32 - nop.i 0;; -} - -{.mfi - nop.m 0 - // T_low'=(Rth-r)*C1+(L(x*y)*C1+T_low) - (p13) fma.s1 f36=f43,f14,f36 - nop.i 0;; -} -{.mfi - nop.m 0 - // P18=P14+r4*P58 - (p6) fma.s1 f13=f11,f13,f15 - nop.i 0;; -} - -{.mfi - nop.m 0 - // add T_high+l - (p6) fma.s1 f8=f8,f1,f7 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // D+T_low - (p6) fma.s1 f12=f12,f1,f36 - nop.i 0;; -} - - -{.mfi - nop.m 0 - // (T_high+l)+C1r - (p6) fma.s1 f8=f8,f1,f32 - nop.i 0 -} -{.mfi - nop.m 0 - // (D+T_low)+r*P18 - (p6) fma.s1 f13=f13,f6,f12 - nop.i 0;; -} - -//{.mfb -//nop.m 0 -//mov f8=f36 -//fma.s0 f8=f13,f6,f0 -//br.ret.sptk b0;; -//} - - -{.mfb - nop.m 0 - // result=((T_high+l)+C1r)+((D+T_low)+r*P18) - (p6) fma.s0 f8=f13,f1,f8 - // return - br.ret.sptk b0;; -} - - -SPECIAL_log2l: -{.mfi - nop.m 0 - mov FR_X=f8 - nop.i 0 -} -{.mfi - nop.m 0 - // x=+Infinity ? - fclass.m p7,p0=f8,0x21 - nop.i 0;; -} -{.mfi - nop.m 0 - // x=+/-Zero ? - fclass.m p8,p0=f7,0x7 - nop.i 0;; -} -{.mfi - nop.m 0 - // x=-Infinity, -normal, -denormal ? - fclass.m p6,p0=f8,0x3a - nop.i 0;; -} -{.mfb - nop.m 0 - // log2l(+Infinity)=+Infinity - nop.f 0 - (p7) br.ret.spnt b0;; -} -{.mfi - (p8) mov GR_Parameter_TAG = 168 - // log2l(+/-0)=-infinity, raises Divide by Zero - // set f8=-0 - (p8) fmerge.ns f8=f0,f8 - nop.i 0;; -} -{.mfb - nop.m 0 - (p8) frcpa.s0 f8,p0=f1,f8 - (p8) br.cond.sptk __libm_error_region;; -} -{.mfb - (p6) mov GR_Parameter_TAG = 169 - // x<0: return NaN, raise Invalid - (p6) frcpa.s0 f8,p0=f0,f0 - (p6) br.cond.sptk __libm_error_region;; -} - - -{.mfb - nop.m 0 - // Remaining cases: NaNs - fma.s0 f8=f8,f1,f0 - br.ret.sptk b0;; -} - -LOG2_PSEUDO_ZERO: - -{.mfi - nop.m 0 - mov FR_X=f8 - nop.i 0 -} -{.mfi - mov GR_Parameter_TAG = 168 - // log2l(+/-0)=-infinity, raises Divide by Zero - // set f8=-0 - fmerge.ns f8=f0,f8 - nop.i 0;; -} -{.mfb - nop.m 0 - frcpa.s0 f8,p0=f1,f8 - br.cond.sptk __libm_error_region;; -} - - -GLOBAL_IEEE754_END(log2l) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfe [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfe [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfe [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_logf.S b/sysdeps/ia64/fpu/e_logf.S deleted file mode 100644 index 2dda2186d0..0000000000 --- a/sysdeps/ia64/fpu/e_logf.S +++ /dev/null @@ -1,1158 +0,0 @@ -.file "logf.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 03/01/00 Initial version -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 01/10/01 Improved speed, fixed flags for neg denormals -// 05/20/02 Cleaned up namespace and sf0 syntax -// 05/23/02 Modified algorithm. Now only one polynomial is used -// for |x-1| >= 1/256 and for |x-1| < 1/256 -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// float logf(float) -// float log10f(float) -// -// -// Overview of operation -//============================================================== -// Background -// ---------- -// -// This algorithm is based on fact that -// log(a b) = log(a) + log(b). -// -// In our case we have x = 2^N f, where 1 <= f < 2. -// So -// log(x) = log(2^N f) = log(2^N) + log(f) = n*log(2) + log(f) -// -// To calculate log(f) we do following -// log(f) = log(f * frcpa(f) / frcpa(f)) = -// = log(f * frcpa(f)) + log(1/frcpa(f)) -// -// According to definition of IA-64's frcpa instruction it's a -// floating point that approximates 1/f using a lookup on the -// top of 8 bits of the input number's significand with relative -// error < 2^(-8.886). So we have following -// -// |(1/f - frcpa(f)) / (1/f))| = |1 - f*frcpa(f)| < 1/256 -// -// and -// -// log(f) = log(f * frcpa(f)) + log(1/frcpa(f)) = -// = log(1 + r) + T -// -// The first value can be computed by polynomial P(r) approximating -// log(1 + r) on |r| < 1/256 and the second is precomputed tabular -// value defined by top 8 bit of f. -// -// Finally we have that log(x) ~ (N*log(2) + T) + P(r) -// -// Note that if input argument is close to 1.0 (in our case it means -// that |1 - x| < 1/256) we can use just polynomial approximation -// because x = 2^0 * f = f = 1 + r and -// log(x) = log(1 + r) ~ P(r) -// -// -// To compute log10(x) we just use identity: -// -// log10(x) = log(x)/log(10) -// -// so we have that -// -// log10(x) = (N*log(2) + T + log(1+r)) / log(10) = -// = N*(log(2)/log(10)) + (T/log(10)) + log(1 + r)/log(10) -// -// -// Implementation -// -------------- -// It can be seen that formulas for log and log10 differ from one another -// only by coefficients and tabular values. Namely as log as log10 are -// calculated as (N*L1 + T) + L2*Series(r) where in case of log -// L1 = log(2) -// T = log(1/frcpa(x)) -// L2 = 1.0 -// and in case of log10 -// L1 = log(2)/log(10) -// T = log(1/frcpa(x))/log(10) -// L2 = 1.0/log(10) -// -// So common code with two different entry points those set pointers -// to the base address of coresponding data sets containing values -// of L2,T and prepare integer representation of L1 needed for following -// setf instruction can be used. -// -// Note that both log and log10 use common approximation polynomial -// it means we need only one set of coefficients of approximation. -// -// 1. Computation of log(x) for |x-1| >= 1/256 -// InvX = frcpa(x) -// r = InvX*x - 1 -// P(r) = r*((1 - A2*r) + r^2*(A3 - A4*r)) = r*P2(r), -// A4,A3,A2 are created with setf inctruction. -// We use Taylor series and so A4 = 1/4, A3 = 1/3, -// A2 = 1/2 rounded to double. -// -// N = float(n) where n is true unbiased exponent of x -// -// T is tabular value of log(1/frcpa(x)) calculated in quad precision -// and rounded to double. To T we get bits from 55 to 62 of register -// format significand of x and calculate address -// ad_T = table_base_addr + 8 * index -// -// L2 (1.0 or 1.0/log(10) depending on function) is calculated in quad -// precision and rounded to double; it's loaded from memory -// -// L1 (log(2) or log10(2) depending on function) is calculated in quad -// precision and rounded to double; it's created with setf. -// -// And final result = P2(r)*(r*L2) + (T + N*L1) -// -// -// 2. Computation of log(x) for |x-1| < 1/256 -// r = x - 1 -// P(r) = r*((1 - A2*r) + r^2*(A3 - A4*r)) = r*P2(r), -// A4,A3,A2 are the same as in case |x-1| >= 1/256 -// -// And final result = P2(r)*(r*L2) -// -// 3. How we define is input argument such that |x-1| < 1/256 or not. -// -// To do it we analyze biased exponent and significand of input argument. -// -// a) First we test is biased exponent equal to 0xFFFE or 0xFFFF (i.e. -// we test is 0.5 <= x < 2). This comparison can be performed using -// unsigned version of cmp instruction in such a way -// biased_exponent_of_x - 0xFFFE < 2 -// -// -// b) Second (in case when result of a) is true) we need to compare x -// with 1-1/256 and 1+1/256 or in register format representation with -// 0xFFFEFF00000000000000 and 0xFFFF8080000000000000 correspondingly. -// As far as biased exponent of x here can be equal only to 0xFFFE or -// 0xFFFF we need to test only last bit of it. Also signifigand always -// has implicit bit set to 1 that can be exluded from comparison. -// Thus it's quite enough to generate 64-bit integer bits of that are -// ix[63] = biased_exponent_of_x[0] and ix[62-0] = significand_of_x[62-0] -// and compare it with 0x7F00000000000000 and 0x80800000000000000 (those -// obtained like ix from register representatinos of 255/256 and -// 257/256). This comparison can be made like in a), using unsigned -// version of cmp i.e. ix - 0x7F00000000000000 < 0x0180000000000000. -// 0x0180000000000000 is difference between 0x80800000000000000 and -// 0x7F00000000000000. -// -// Note: NaT, any NaNs, +/-INF, +/-0, negatives and unnormalized numbers are -// filtered and processed on special branches. -// -// -// Special values -//============================================================== -// -// logf(+0) = -inf -// logf(-0) = -inf -// -// logf(+qnan) = +qnan -// logf(-qnan) = -qnan -// logf(+snan) = +qnan -// logf(-snan) = -qnan -// -// logf(-n) = QNAN Indefinite -// logf(-inf) = QNAN Indefinite -// -// logf(+inf) = +inf -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f12 -> f14, f33 -> f39 -// -// General registers used: -// r8 -> r11 -// r14 -> r19 -// -// Predicate registers used: -// p6 -> p12 - - -// Assembly macros -//============================================================== - -GR_TAG = r8 -GR_ad_T = r8 -GR_N = r9 -GR_Exp = r10 -GR_Sig = r11 - -GR_025 = r14 -GR_05 = r15 -GR_A3 = r16 -GR_Ind = r17 -GR_dx = r15 -GR_Ln2 = r19 -GR_de = r20 -GR_x = r21 -GR_xorg = r22 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - -FR_A2 = f12 -FR_A3 = f13 -FR_A4 = f14 - -FR_RcpX = f33 -FR_r = f34 -FR_r2 = f35 -FR_tmp = f35 -FR_Ln2 = f36 -FR_T = f37 -FR_N = f38 -FR_NxLn2pT = f38 -FR_NormX = f39 -FR_InvLn10 = f40 - - -FR_Y = f1 -FR_X = f10 -FR_RESULT = f8 - - -// Data tables -//============================================================== -RODATA -.align 16 -LOCAL_OBJECT_START(logf_data) -data8 0x3FF0000000000000 // 1.0 -// -// ln(1/frcpa(1+i/256)), i=0...255 -data8 0x3F60040155D5889E // 0 -data8 0x3F78121214586B54 // 1 -data8 0x3F841929F96832F0 // 2 -data8 0x3F8C317384C75F06 // 3 -data8 0x3F91A6B91AC73386 // 4 -data8 0x3F95BA9A5D9AC039 // 5 -data8 0x3F99D2A8074325F4 // 6 -data8 0x3F9D6B2725979802 // 7 -data8 0x3FA0C58FA19DFAAA // 8 -data8 0x3FA2954C78CBCE1B // 9 -data8 0x3FA4A94D2DA96C56 // 10 -data8 0x3FA67C94F2D4BB58 // 11 -data8 0x3FA85188B630F068 // 12 -data8 0x3FAA6B8ABE73AF4C // 13 -data8 0x3FAC441E06F72A9E // 14 -data8 0x3FAE1E6713606D07 // 15 -data8 0x3FAFFA6911AB9301 // 16 -data8 0x3FB0EC139C5DA601 // 17 -data8 0x3FB1DBD2643D190B // 18 -data8 0x3FB2CC7284FE5F1C // 19 -data8 0x3FB3BDF5A7D1EE64 // 20 -data8 0x3FB4B05D7AA012E0 // 21 -data8 0x3FB580DB7CEB5702 // 22 -data8 0x3FB674F089365A7A // 23 -data8 0x3FB769EF2C6B568D // 24 -data8 0x3FB85FD927506A48 // 25 -data8 0x3FB9335E5D594989 // 26 -data8 0x3FBA2B0220C8E5F5 // 27 -data8 0x3FBB0004AC1A86AC // 28 -data8 0x3FBBF968769FCA11 // 29 -data8 0x3FBCCFEDBFEE13A8 // 30 -data8 0x3FBDA727638446A2 // 31 -data8 0x3FBEA3257FE10F7A // 32 -data8 0x3FBF7BE9FEDBFDE6 // 33 -data8 0x3FC02AB352FF25F4 // 34 -data8 0x3FC097CE579D204D // 35 -data8 0x3FC1178E8227E47C // 36 -data8 0x3FC185747DBECF34 // 37 -data8 0x3FC1F3B925F25D41 // 38 -data8 0x3FC2625D1E6DDF57 // 39 -data8 0x3FC2D1610C86813A // 40 -data8 0x3FC340C59741142E // 41 -data8 0x3FC3B08B6757F2A9 // 42 -data8 0x3FC40DFB08378003 // 43 -data8 0x3FC47E74E8CA5F7C // 44 -data8 0x3FC4EF51F6466DE4 // 45 -data8 0x3FC56092E02BA516 // 46 -data8 0x3FC5D23857CD74D5 // 47 -data8 0x3FC6313A37335D76 // 48 -data8 0x3FC6A399DABBD383 // 49 -data8 0x3FC70337DD3CE41B // 50 -data8 0x3FC77654128F6127 // 51 -data8 0x3FC7E9D82A0B022D // 52 -data8 0x3FC84A6B759F512F // 53 -data8 0x3FC8AB47D5F5A310 // 54 -data8 0x3FC91FE49096581B // 55 -data8 0x3FC981634011AA75 // 56 -data8 0x3FC9F6C407089664 // 57 -data8 0x3FCA58E729348F43 // 58 -data8 0x3FCABB55C31693AD // 59 -data8 0x3FCB1E104919EFD0 // 60 -data8 0x3FCB94EE93E367CB // 61 -data8 0x3FCBF851C067555F // 62 -data8 0x3FCC5C0254BF23A6 // 63 -data8 0x3FCCC000C9DB3C52 // 64 -data8 0x3FCD244D99C85674 // 65 -data8 0x3FCD88E93FB2F450 // 66 -data8 0x3FCDEDD437EAEF01 // 67 -data8 0x3FCE530EFFE71012 // 68 -data8 0x3FCEB89A1648B971 // 69 -data8 0x3FCF1E75FADF9BDE // 70 -data8 0x3FCF84A32EAD7C35 // 71 -data8 0x3FCFEB2233EA07CD // 72 -data8 0x3FD028F9C7035C1C // 73 -data8 0x3FD05C8BE0D9635A // 74 -data8 0x3FD085EB8F8AE797 // 75 -data8 0x3FD0B9C8E32D1911 // 76 -data8 0x3FD0EDD060B78081 // 77 -data8 0x3FD122024CF0063F // 78 -data8 0x3FD14BE2927AECD4 // 79 -data8 0x3FD180618EF18ADF // 80 -data8 0x3FD1B50BBE2FC63B // 81 -data8 0x3FD1DF4CC7CF242D // 82 -data8 0x3FD214456D0EB8D4 // 83 -data8 0x3FD23EC5991EBA49 // 84 -data8 0x3FD2740D9F870AFB // 85 -data8 0x3FD29ECDABCDFA04 // 86 -data8 0x3FD2D46602ADCCEE // 87 -data8 0x3FD2FF66B04EA9D4 // 88 -data8 0x3FD335504B355A37 // 89 -data8 0x3FD360925EC44F5D // 90 -data8 0x3FD38BF1C3337E75 // 91 -data8 0x3FD3C25277333184 // 92 -data8 0x3FD3EDF463C1683E // 93 -data8 0x3FD419B423D5E8C7 // 94 -data8 0x3FD44591E0539F49 // 95 -data8 0x3FD47C9175B6F0AD // 96 -data8 0x3FD4A8B341552B09 // 97 -data8 0x3FD4D4F3908901A0 // 98 -data8 0x3FD501528DA1F968 // 99 -data8 0x3FD52DD06347D4F6 // 100 -data8 0x3FD55A6D3C7B8A8A // 101 -data8 0x3FD5925D2B112A59 // 102 -data8 0x3FD5BF406B543DB2 // 103 -data8 0x3FD5EC433D5C35AE // 104 -data8 0x3FD61965CDB02C1F // 105 -data8 0x3FD646A84935B2A2 // 106 -data8 0x3FD6740ADD31DE94 // 107 -data8 0x3FD6A18DB74A58C5 // 108 -data8 0x3FD6CF31058670EC // 109 -data8 0x3FD6F180E852F0BA // 110 -data8 0x3FD71F5D71B894F0 // 111 -data8 0x3FD74D5AEFD66D5C // 112 -data8 0x3FD77B79922BD37E // 113 -data8 0x3FD7A9B9889F19E2 // 114 -data8 0x3FD7D81B037EB6A6 // 115 -data8 0x3FD8069E33827231 // 116 -data8 0x3FD82996D3EF8BCB // 117 -data8 0x3FD85855776DCBFB // 118 -data8 0x3FD8873658327CCF // 119 -data8 0x3FD8AA75973AB8CF // 120 -data8 0x3FD8D992DC8824E5 // 121 -data8 0x3FD908D2EA7D9512 // 122 -data8 0x3FD92C59E79C0E56 // 123 -data8 0x3FD95BD750EE3ED3 // 124 -data8 0x3FD98B7811A3EE5B // 125 -data8 0x3FD9AF47F33D406C // 126 -data8 0x3FD9DF270C1914A8 // 127 -data8 0x3FDA0325ED14FDA4 // 128 -data8 0x3FDA33440224FA79 // 129 -data8 0x3FDA57725E80C383 // 130 -data8 0x3FDA87D0165DD199 // 131 -data8 0x3FDAAC2E6C03F896 // 132 -data8 0x3FDADCCC6FDF6A81 // 133 -data8 0x3FDB015B3EB1E790 // 134 -data8 0x3FDB323A3A635948 // 135 -data8 0x3FDB56FA04462909 // 136 -data8 0x3FDB881AA659BC93 // 137 -data8 0x3FDBAD0BEF3DB165 // 138 -data8 0x3FDBD21297781C2F // 139 -data8 0x3FDC039236F08819 // 140 -data8 0x3FDC28CB1E4D32FD // 141 -data8 0x3FDC4E19B84723C2 // 142 -data8 0x3FDC7FF9C74554C9 // 143 -data8 0x3FDCA57B64E9DB05 // 144 -data8 0x3FDCCB130A5CEBB0 // 145 -data8 0x3FDCF0C0D18F326F // 146 -data8 0x3FDD232075B5A201 // 147 -data8 0x3FDD490246DEFA6B // 148 -data8 0x3FDD6EFA918D25CD // 149 -data8 0x3FDD9509707AE52F // 150 -data8 0x3FDDBB2EFE92C554 // 151 -data8 0x3FDDEE2F3445E4AF // 152 -data8 0x3FDE148A1A2726CE // 153 -data8 0x3FDE3AFC0A49FF40 // 154 -data8 0x3FDE6185206D516E // 155 -data8 0x3FDE882578823D52 // 156 -data8 0x3FDEAEDD2EAC990C // 157 -data8 0x3FDED5AC5F436BE3 // 158 -data8 0x3FDEFC9326D16AB9 // 159 -data8 0x3FDF2391A2157600 // 160 -data8 0x3FDF4AA7EE03192D // 161 -data8 0x3FDF71D627C30BB0 // 162 -data8 0x3FDF991C6CB3B379 // 163 -data8 0x3FDFC07ADA69A910 // 164 -data8 0x3FDFE7F18EB03D3E // 165 -data8 0x3FE007C053C5002E // 166 -data8 0x3FE01B942198A5A1 // 167 -data8 0x3FE02F74400C64EB // 168 -data8 0x3FE04360BE7603AD // 169 -data8 0x3FE05759AC47FE34 // 170 -data8 0x3FE06B5F1911CF52 // 171 -data8 0x3FE078BF0533C568 // 172 -data8 0x3FE08CD9687E7B0E // 173 -data8 0x3FE0A10074CF9019 // 174 -data8 0x3FE0B5343A234477 // 175 -data8 0x3FE0C974C89431CE // 176 -data8 0x3FE0DDC2305B9886 // 177 -data8 0x3FE0EB524BAFC918 // 178 -data8 0x3FE0FFB54213A476 // 179 -data8 0x3FE114253DA97D9F // 180 -data8 0x3FE128A24F1D9AFF // 181 -data8 0x3FE1365252BF0865 // 182 -data8 0x3FE14AE558B4A92D // 183 -data8 0x3FE15F85A19C765B // 184 -data8 0x3FE16D4D38C119FA // 185 -data8 0x3FE18203C20DD133 // 186 -data8 0x3FE196C7BC4B1F3B // 187 -data8 0x3FE1A4A738B7A33C // 188 -data8 0x3FE1B981C0C9653D // 189 -data8 0x3FE1CE69E8BB106B // 190 -data8 0x3FE1DC619DE06944 // 191 -data8 0x3FE1F160A2AD0DA4 // 192 -data8 0x3FE2066D7740737E // 193 -data8 0x3FE2147DBA47A394 // 194 -data8 0x3FE229A1BC5EBAC3 // 195 -data8 0x3FE237C1841A502E // 196 -data8 0x3FE24CFCE6F80D9A // 197 -data8 0x3FE25B2C55CD5762 // 198 -data8 0x3FE2707F4D5F7C41 // 199 -data8 0x3FE285E0842CA384 // 200 -data8 0x3FE294294708B773 // 201 -data8 0x3FE2A9A2670AFF0C // 202 -data8 0x3FE2B7FB2C8D1CC1 // 203 -data8 0x3FE2C65A6395F5F5 // 204 -data8 0x3FE2DBF557B0DF43 // 205 -data8 0x3FE2EA64C3F97655 // 206 -data8 0x3FE3001823684D73 // 207 -data8 0x3FE30E97E9A8B5CD // 208 -data8 0x3FE32463EBDD34EA // 209 -data8 0x3FE332F4314AD796 // 210 -data8 0x3FE348D90E7464D0 // 211 -data8 0x3FE35779F8C43D6E // 212 -data8 0x3FE36621961A6A99 // 213 -data8 0x3FE37C299F3C366A // 214 -data8 0x3FE38AE2171976E7 // 215 -data8 0x3FE399A157A603E7 // 216 -data8 0x3FE3AFCCFE77B9D1 // 217 -data8 0x3FE3BE9D503533B5 // 218 -data8 0x3FE3CD7480B4A8A3 // 219 -data8 0x3FE3E3C43918F76C // 220 -data8 0x3FE3F2ACB27ED6C7 // 221 -data8 0x3FE4019C2125CA93 // 222 -data8 0x3FE4181061389722 // 223 -data8 0x3FE42711518DF545 // 224 -data8 0x3FE436194E12B6BF // 225 -data8 0x3FE445285D68EA69 // 226 -data8 0x3FE45BCC464C893A // 227 -data8 0x3FE46AED21F117FC // 228 -data8 0x3FE47A1527E8A2D3 // 229 -data8 0x3FE489445EFFFCCC // 230 -data8 0x3FE4A018BCB69835 // 231 -data8 0x3FE4AF5A0C9D65D7 // 232 -data8 0x3FE4BEA2A5BDBE87 // 233 -data8 0x3FE4CDF28F10AC46 // 234 -data8 0x3FE4DD49CF994058 // 235 -data8 0x3FE4ECA86E64A684 // 236 -data8 0x3FE503C43CD8EB68 // 237 -data8 0x3FE513356667FC57 // 238 -data8 0x3FE522AE0738A3D8 // 239 -data8 0x3FE5322E26867857 // 240 -data8 0x3FE541B5CB979809 // 241 -data8 0x3FE55144FDBCBD62 // 242 -data8 0x3FE560DBC45153C7 // 243 -data8 0x3FE5707A26BB8C66 // 244 -data8 0x3FE587F60ED5B900 // 245 -data8 0x3FE597A7977C8F31 // 246 -data8 0x3FE5A760D634BB8B // 247 -data8 0x3FE5B721D295F10F // 248 -data8 0x3FE5C6EA94431EF9 // 249 -data8 0x3FE5D6BB22EA86F6 // 250 -data8 0x3FE5E6938645D390 // 251 -data8 0x3FE5F673C61A2ED2 // 252 -data8 0x3FE6065BEA385926 // 253 -data8 0x3FE6164BFA7CC06B // 254 -data8 0x3FE62643FECF9743 // 255 -LOCAL_OBJECT_END(logf_data) - -LOCAL_OBJECT_START(log10f_data) -data8 0x3FDBCB7B1526E50E // 1/ln(10) -// -// ln(1/frcpa(1+i/256))/ln(10), i=0...255 -data8 0x3F4BD27045BFD025 // 0 -data8 0x3F64E84E793A474A // 1 -data8 0x3F7175085AB85FF0 // 2 -data8 0x3F787CFF9D9147A5 // 3 -data8 0x3F7EA9D372B89FC8 // 4 -data8 0x3F82DF9D95DA961C // 5 -data8 0x3F866DF172D6372C // 6 -data8 0x3F898D79EF5EEDF0 // 7 -data8 0x3F8D22ADF3F9579D // 8 -data8 0x3F9024231D30C398 // 9 -data8 0x3F91F23A98897D4A // 10 -data8 0x3F93881A7B818F9E // 11 -data8 0x3F951F6E1E759E35 // 12 -data8 0x3F96F2BCE7ADC5B4 // 13 -data8 0x3F988D362CDF359E // 14 -data8 0x3F9A292BAF010982 // 15 -data8 0x3F9BC6A03117EB97 // 16 -data8 0x3F9D65967DE3AB09 // 17 -data8 0x3F9F061167FC31E8 // 18 -data8 0x3FA05409E4F7819C // 19 -data8 0x3FA125D0432EA20E // 20 -data8 0x3FA1F85D440D299B // 21 -data8 0x3FA2AD755749617D // 22 -data8 0x3FA381772A00E604 // 23 -data8 0x3FA45643E165A70B // 24 -data8 0x3FA52BDD034475B8 // 25 -data8 0x3FA5E3966B7E9295 // 26 -data8 0x3FA6BAAF47C5B245 // 27 -data8 0x3FA773B3E8C4F3C8 // 28 -data8 0x3FA84C51EBEE8D15 // 29 -data8 0x3FA906A6786FC1CB // 30 -data8 0x3FA9C197ABF00DD7 // 31 -data8 0x3FAA9C78712191F7 // 32 -data8 0x3FAB58C09C8D637C // 33 -data8 0x3FAC15A8BCDD7B7E // 34 -data8 0x3FACD331E2C2967C // 35 -data8 0x3FADB11ED766ABF4 // 36 -data8 0x3FAE70089346A9E6 // 37 -data8 0x3FAF2F96C6754AEE // 38 -data8 0x3FAFEFCA8D451FD6 // 39 -data8 0x3FB0585283764178 // 40 -data8 0x3FB0B913AAC7D3A7 // 41 -data8 0x3FB11A294F2569F6 // 42 -data8 0x3FB16B51A2696891 // 43 -data8 0x3FB1CD03ADACC8BE // 44 -data8 0x3FB22F0BDD7745F5 // 45 -data8 0x3FB2916ACA38D1E8 // 46 -data8 0x3FB2F4210DF7663D // 47 -data8 0x3FB346A6C3C49066 // 48 -data8 0x3FB3A9FEBC60540A // 49 -data8 0x3FB3FD0C10A3AA54 // 50 -data8 0x3FB46107D3540A82 // 51 -data8 0x3FB4C55DD16967FE // 52 -data8 0x3FB51940330C000B // 53 -data8 0x3FB56D620EE7115E // 54 -data8 0x3FB5D2ABCF26178E // 55 -data8 0x3FB6275AA5DEBF81 // 56 -data8 0x3FB68D4EAF26D7EE // 57 -data8 0x3FB6E28C5C54A28D // 58 -data8 0x3FB7380B9665B7C8 // 59 -data8 0x3FB78DCCC278E85B // 60 -data8 0x3FB7F50C2CF2557A // 61 -data8 0x3FB84B5FD5EAEFD8 // 62 -data8 0x3FB8A1F6BAB2B226 // 63 -data8 0x3FB8F8D144557BDF // 64 -data8 0x3FB94FEFDCD61D92 // 65 -data8 0x3FB9A752EF316149 // 66 -data8 0x3FB9FEFAE7611EE0 // 67 -data8 0x3FBA56E8325F5C87 // 68 -data8 0x3FBAAF1B3E297BB4 // 69 -data8 0x3FBB079479C372AD // 70 -data8 0x3FBB6054553B12F7 // 71 -data8 0x3FBBB95B41AB5CE6 // 72 -data8 0x3FBC12A9B13FE079 // 73 -data8 0x3FBC6C4017382BEA // 74 -data8 0x3FBCB41FBA42686D // 75 -data8 0x3FBD0E38CE73393F // 76 -data8 0x3FBD689B2193F133 // 77 -data8 0x3FBDC3472B1D2860 // 78 -data8 0x3FBE0C06300D528B // 79 -data8 0x3FBE6738190E394C // 80 -data8 0x3FBEC2B50D208D9B // 81 -data8 0x3FBF0C1C2B936828 // 82 -data8 0x3FBF68216C9CC727 // 83 -data8 0x3FBFB1F6381856F4 // 84 -data8 0x3FC00742AF4CE5F8 // 85 -data8 0x3FC02C64906512D2 // 86 -data8 0x3FC05AF1E63E03B4 // 87 -data8 0x3FC0804BEA723AA9 // 88 -data8 0x3FC0AF1FD6711527 // 89 -data8 0x3FC0D4B2A8805A00 // 90 -data8 0x3FC0FA5EF136A06C // 91 -data8 0x3FC1299A4FB3E306 // 92 -data8 0x3FC14F806253C3ED // 93 -data8 0x3FC175805D1587C1 // 94 -data8 0x3FC19B9A637CA295 // 95 -data8 0x3FC1CB5FC26EDE17 // 96 -data8 0x3FC1F1B4E65F2590 // 97 -data8 0x3FC218248B5DC3E5 // 98 -data8 0x3FC23EAED62ADC76 // 99 -data8 0x3FC26553EBD337BD // 100 -data8 0x3FC28C13F1B11900 // 101 -data8 0x3FC2BCAA14381386 // 102 -data8 0x3FC2E3A740B7800F // 103 -data8 0x3FC30ABFD8F333B6 // 104 -data8 0x3FC331F403985097 // 105 -data8 0x3FC35943E7A60690 // 106 -data8 0x3FC380AFAC6E7C07 // 107 -data8 0x3FC3A8377997B9E6 // 108 -data8 0x3FC3CFDB771C9ADB // 109 -data8 0x3FC3EDA90D39A5DF // 110 -data8 0x3FC4157EC09505CD // 111 -data8 0x3FC43D7113FB04C1 // 112 -data8 0x3FC4658030AD1CCF // 113 -data8 0x3FC48DAC404638F6 // 114 -data8 0x3FC4B5F56CBBB869 // 115 -data8 0x3FC4DE5BE05E7583 // 116 -data8 0x3FC4FCBC0776FD85 // 117 -data8 0x3FC525561E9256EE // 118 -data8 0x3FC54E0DF3198865 // 119 -data8 0x3FC56CAB7112BDE2 // 120 -data8 0x3FC59597BA735B15 // 121 -data8 0x3FC5BEA23A506FDA // 122 -data8 0x3FC5DD7E08DE382F // 123 -data8 0x3FC606BDD3F92355 // 124 -data8 0x3FC6301C518A501F // 125 -data8 0x3FC64F3770618916 // 126 -data8 0x3FC678CC14C1E2D8 // 127 -data8 0x3FC6981005ED2947 // 128 -data8 0x3FC6C1DB5F9BB336 // 129 -data8 0x3FC6E1488ECD2881 // 130 -data8 0x3FC70B4B2E7E41B9 // 131 -data8 0x3FC72AE209146BF9 // 132 -data8 0x3FC7551C81BD8DCF // 133 -data8 0x3FC774DD76CC43BE // 134 -data8 0x3FC79F505DB00E88 // 135 -data8 0x3FC7BF3BDE099F30 // 136 -data8 0x3FC7E9E7CAC437F9 // 137 -data8 0x3FC809FE4902D00D // 138 -data8 0x3FC82A2757995CBE // 139 -data8 0x3FC85525C625E098 // 140 -data8 0x3FC8757A79831887 // 141 -data8 0x3FC895E2058D8E03 // 142 -data8 0x3FC8C13437695532 // 143 -data8 0x3FC8E1C812EF32BE // 144 -data8 0x3FC9026F112197E8 // 145 -data8 0x3FC923294888880B // 146 -data8 0x3FC94EEA4B8334F3 // 147 -data8 0x3FC96FD1B639FC09 // 148 -data8 0x3FC990CCA66229AC // 149 -data8 0x3FC9B1DB33334843 // 150 -data8 0x3FC9D2FD740E6607 // 151 -data8 0x3FC9FF49EEDCB553 // 152 -data8 0x3FCA209A84FBCFF8 // 153 -data8 0x3FCA41FF1E43F02B // 154 -data8 0x3FCA6377D2CE9378 // 155 -data8 0x3FCA8504BAE0D9F6 // 156 -data8 0x3FCAA6A5EEEBEFE3 // 157 -data8 0x3FCAC85B878D7879 // 158 -data8 0x3FCAEA259D8FFA0B // 159 -data8 0x3FCB0C0449EB4B6B // 160 -data8 0x3FCB2DF7A5C50299 // 161 -data8 0x3FCB4FFFCA70E4D1 // 162 -data8 0x3FCB721CD17157E3 // 163 -data8 0x3FCB944ED477D4ED // 164 -data8 0x3FCBB695ED655C7D // 165 -data8 0x3FCBD8F2364AEC0F // 166 -data8 0x3FCBFB63C969F4FF // 167 -data8 0x3FCC1DEAC134D4E9 // 168 -data8 0x3FCC4087384F4F80 // 169 -data8 0x3FCC6339498F09E2 // 170 -data8 0x3FCC86010FFC076C // 171 -data8 0x3FCC9D3D065C5B42 // 172 -data8 0x3FCCC029375BA07A // 173 -data8 0x3FCCE32B66978BA4 // 174 -data8 0x3FCD0643AFD51404 // 175 -data8 0x3FCD29722F0DEA45 // 176 -data8 0x3FCD4CB70070FE44 // 177 -data8 0x3FCD6446AB3F8C96 // 178 -data8 0x3FCD87B0EF71DB45 // 179 -data8 0x3FCDAB31D1FE99A7 // 180 -data8 0x3FCDCEC96FDC888F // 181 -data8 0x3FCDE6908876357A // 182 -data8 0x3FCE0A4E4A25C200 // 183 -data8 0x3FCE2E2315755E33 // 184 -data8 0x3FCE461322D1648A // 185 -data8 0x3FCE6A0E95C7787B // 186 -data8 0x3FCE8E216243DD60 // 187 -data8 0x3FCEA63AF26E007C // 188 -data8 0x3FCECA74ED15E0B7 // 189 -data8 0x3FCEEEC692CCD25A // 190 -data8 0x3FCF070A36B8D9C1 // 191 -data8 0x3FCF2B8393E34A2D // 192 -data8 0x3FCF5014EF538A5B // 193 -data8 0x3FCF68833AF1B180 // 194 -data8 0x3FCF8D3CD9F3F04F // 195 -data8 0x3FCFA5C61ADD93E9 // 196 -data8 0x3FCFCAA8567EBA7A // 197 -data8 0x3FCFE34CC8743DD8 // 198 -data8 0x3FD0042BFD74F519 // 199 -data8 0x3FD016BDF6A18017 // 200 -data8 0x3FD023262F907322 // 201 -data8 0x3FD035CCED8D32A1 // 202 -data8 0x3FD042430E869FFC // 203 -data8 0x3FD04EBEC842B2E0 // 204 -data8 0x3FD06182E84FD4AC // 205 -data8 0x3FD06E0CB609D383 // 206 -data8 0x3FD080E60BEC8F12 // 207 -data8 0x3FD08D7E0D894735 // 208 -data8 0x3FD0A06CC96A2056 // 209 -data8 0x3FD0AD131F3B3C55 // 210 -data8 0x3FD0C01771E775FB // 211 -data8 0x3FD0CCCC3CAD6F4B // 212 -data8 0x3FD0D986D91A34A9 // 213 -data8 0x3FD0ECA9B8861A2D // 214 -data8 0x3FD0F972F87FF3D6 // 215 -data8 0x3FD106421CF0E5F7 // 216 -data8 0x3FD11983EBE28A9D // 217 -data8 0x3FD12661E35B785A // 218 -data8 0x3FD13345D2779D3B // 219 -data8 0x3FD146A6F597283A // 220 -data8 0x3FD15399E81EA83D // 221 -data8 0x3FD16092E5D3A9A6 // 222 -data8 0x3FD17413C3B7AB5E // 223 -data8 0x3FD1811BF629D6FB // 224 -data8 0x3FD18E2A47B46686 // 225 -data8 0x3FD19B3EBE1A4418 // 226 -data8 0x3FD1AEE9017CB450 // 227 -data8 0x3FD1BC0CED7134E2 // 228 -data8 0x3FD1C93712ABC7FF // 229 -data8 0x3FD1D66777147D3F // 230 -data8 0x3FD1EA3BD1286E1C // 231 -data8 0x3FD1F77BED932C4C // 232 -data8 0x3FD204C25E1B031F // 233 -data8 0x3FD2120F28CE69B1 // 234 -data8 0x3FD21F6253C48D01 // 235 -data8 0x3FD22CBBE51D60AA // 236 -data8 0x3FD240CE4C975444 // 237 -data8 0x3FD24E37F8ECDAE8 // 238 -data8 0x3FD25BA8215AF7FC // 239 -data8 0x3FD2691ECC29F042 // 240 -data8 0x3FD2769BFFAB2E00 // 241 -data8 0x3FD2841FC23952C9 // 242 -data8 0x3FD291AA1A384978 // 243 -data8 0x3FD29F3B0E15584B // 244 -data8 0x3FD2B3A0EE479DF7 // 245 -data8 0x3FD2C142842C09E6 // 246 -data8 0x3FD2CEEACCB7BD6D // 247 -data8 0x3FD2DC99CE82FF21 // 248 -data8 0x3FD2EA4F902FD7DA // 249 -data8 0x3FD2F80C186A25FD // 250 -data8 0x3FD305CF6DE7B0F7 // 251 -data8 0x3FD3139997683CE7 // 252 -data8 0x3FD3216A9BB59E7C // 253 -data8 0x3FD32F4281A3CEFF // 254 -data8 0x3FD33D2150110092 // 255 -LOCAL_OBJECT_END(log10f_data) - - -// Code -//============================================================== -.section .text - -// logf has p13 true, p14 false -// log10f has p14 true, p13 false - -GLOBAL_IEEE754_ENTRY(log10f) -{ .mfi - getf.exp GR_Exp = f8 // if x is unorm then must recompute - frcpa.s1 FR_RcpX,p0 = f1,f8 - mov GR_05 = 0xFFFE // biased exponent of A2=0.5 -} -{ .mlx - addl GR_ad_T = @ltoff(log10f_data),gp - movl GR_A3 = 0x3FD5555555555555 // double precision memory - // representation of A3 -};; -{ .mfi - getf.sig GR_Sig = f8 // if x is unorm then must recompute - fclass.m p8,p0 = f8,9 // is x positive unorm? - sub GR_025 = GR_05,r0,1 // biased exponent of A4=0.25 -} -{ .mlx - ld8 GR_ad_T = [GR_ad_T] - movl GR_Ln2 = 0x3FD34413509F79FF // double precision memory - // representation of - // log(2)/ln(10) -};; -{ .mfi - setf.d FR_A3 = GR_A3 // create A3 - fcmp.eq.s1 p14,p13 = f0,f0 // set p14 to 1 for log10f - dep.z GR_xorg = GR_05,55,8 // 0x7F00000000000000 integer number - // bits of that are - // GR_xorg[63] = last bit of biased - // exponent of 255/256 - // GR_xorg[62-0] = bits from 62 to 0 - // of significand of 255/256 -} -{ .mib - setf.exp FR_A2 = GR_05 // create A2 - sub GR_de = GR_Exp,GR_05 // biased_exponent_of_x - 0xFFFE - // needed for comparison with 0.5 and 2.0 - br.cond.sptk logf_log10f_common -};; -GLOBAL_IEEE754_END(log10f) - -GLOBAL_IEEE754_ENTRY(logf) -{ .mfi - getf.exp GR_Exp = f8 // if x is unorm then must recompute - frcpa.s1 FR_RcpX,p0 = f1,f8 - mov GR_05 = 0xFFFE // biased exponent of A2=-0.5 -} -{ .mlx - addl GR_ad_T = @ltoff(logf_data),gp - movl GR_A3 = 0x3FD5555555555555 // double precision memory - // representation of A3 -};; -{ .mfi - getf.sig GR_Sig = f8 // if x is unorm then must recompute - fclass.m p8,p0 = f8,9 // is x positive unorm? - dep.z GR_xorg = GR_05,55,8 // 0x7F00000000000000 integer number - // bits of that are - // GR_xorg[63] = last bit of biased - // exponent of 255/256 - // GR_xorg[62-0] = bits from 62 to 0 - // of significand of 255/256 -} -{ .mfi - ld8 GR_ad_T = [GR_ad_T] - nop.f 0 - sub GR_025 = GR_05,r0,1 // biased exponent of A4=0.25 -};; -{ .mfi - setf.d FR_A3 = GR_A3 // create A3 - fcmp.eq.s1 p13,p14 = f0,f0 // p13 - true for logf - sub GR_de = GR_Exp,GR_05 // biased_exponent_of_x - 0xFFFE - // needed for comparison with 0.5 and 2.0 -} -{ .mlx - setf.exp FR_A2 = GR_05 // create A2 - movl GR_Ln2 = 0x3FE62E42FEFA39EF // double precision memory - // representation of log(2) -};; -logf_log10f_common: -{ .mfi - setf.exp FR_A4 = GR_025 // create A4=0.25 - fclass.m p9,p0 = f8,0x3A // is x < 0 (including negateve unnormals)? - dep GR_x = GR_Exp,GR_Sig,63,1 // produce integer that bits are - // GR_x[63] = GR_Exp[0] - // GR_x[62-0] = GR_Sig[62-0] -} -{ .mib - sub GR_N = GR_Exp,GR_05,1 // unbiased exponent of x - cmp.gtu p6,p7 = 2,GR_de // is 0.5 <= x < 2.0? -(p8) br.cond.spnt logf_positive_unorm -};; -logf_core: -{ .mfi - setf.sig FR_N = GR_N // copy unbiased exponent of x to the - // significand field of FR_N - fclass.m p10,p0 = f8,0x1E1 // is x NaN, NaT or +Inf? - dep.z GR_dx = GR_05,54,3 // 0x0180000000000000 - difference - // between our integer representations - // of 257/256 and 255/256 -} -{ .mfi - nop.m 0 - nop.f 0 - sub GR_x = GR_x,GR_xorg // difference between representations - // of x and 255/256 -};; -{ .mfi - ldfd FR_InvLn10 = [GR_ad_T],8 - fcmp.eq.s1 p11,p0 = f8,f1 // is x equal to 1.0? - extr.u GR_Ind = GR_Sig,55,8 // get bits from 55 to 62 as index -} -{ .mib - setf.d FR_Ln2 = GR_Ln2 // create log(2) or log10(2) -(p6) cmp.gtu p6,p7 = GR_dx,GR_x // set p6 if 255/256 <= x < 257/256 -(p9) br.cond.spnt logf_negatives // jump if input argument is negative number -};; -// p6 is true if |x-1| < 1/256 -// p7 is true if |x-1| >= 1/256 -.pred.rel "mutex",p6,p7 -{ .mfi - shladd GR_ad_T = GR_Ind,3,GR_ad_T // calculate address of T -(p7) fms.s1 FR_r = FR_RcpX,f8,f1 // range reduction for |x-1|>=1/256 - extr.u GR_Exp = GR_Exp,0,17 // exponent without sign -} -{ .mfb - nop.m 0 -(p6) fms.s1 FR_r = f8,f1,f1 // range reduction for |x-1|<1/256 -(p10) br.cond.spnt logf_nan_nat_pinf // exit for NaN, NaT or +Inf -};; -{ .mfb - ldfd FR_T = [GR_ad_T] // load T -(p11) fma.s.s0 f8 = f0,f0,f0 -(p11) br.ret.spnt b0 // exit for x = 1.0 -};; -{ .mib - nop.m 0 - cmp.eq p12,p0 = r0,GR_Exp // is x +/-0? (here it's quite enough - // only to compare exponent with 0 - // because all unnormals already - // have been filtered) -(p12) br.cond.spnt logf_zeroes // Branch if input argument is +/-0 -};; -{ .mfi - nop.m 0 - fnma.s1 FR_A2 = FR_A2,FR_r,f1 // A2*r+1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r2 = FR_r,FR_r,f0 // r^2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fcvt.xf FR_N = FR_N // convert integer N in significand of FR_N - // to floating-point representation - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_A3 = FR_A4,FR_r,FR_A3 // A4*r+A3 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_r = FR_r,FR_InvLn10,f0 // For log10f we have r/log(10) - nop.i 0 -} -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A2 = FR_A3,FR_r2,FR_A2 // (A4*r+A3)*r^2+(A2*r+1) - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_NxLn2pT = FR_N,FR_Ln2,FR_T // N*Ln2+T - nop.i 0 -};; -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p7) fma.s.s0 f8 = FR_A2,FR_r,FR_NxLn2pT // result for |x-1|>=1/256 - nop.i 0 -} -{ .mfb - nop.m 0 -(p6) fma.s.s0 f8 = FR_A2,FR_r,f0 // result for |x-1|<1/256 - br.ret.sptk b0 -};; - -.align 32 -logf_positive_unorm: -{ .mfi - nop.m 0 -(p8) fma.s0 f8 = f8,f1,f0 // Normalize & set D-flag - nop.i 0 -};; -{ .mfi - getf.exp GR_Exp = f8 // recompute biased exponent - nop.f 0 - cmp.ne p6,p7 = r0,r0 // p6 <- 0, p7 <- 1 because - // in case of unorm we are out - // interval [255/256; 257/256] -};; -{ .mfi - getf.sig GR_Sig = f8 // recompute significand - nop.f 0 - nop.i 0 -};; -{ .mib - sub GR_N = GR_Exp,GR_05,1 // unbiased exponent N - nop.i 0 - br.cond.sptk logf_core // return into main path -};; - -.align 32 -logf_nan_nat_pinf: -{ .mfi - nop.m 0 - fma.s.s0 f8 = f8,f1,f0 // set V-flag - nop.i 0 -} -{ .mfb - nop.m 0 - nop.f 0 - br.ret.sptk b0 // exit for NaN, NaT or +Inf -};; - -.align 32 -logf_zeroes: -{ .mfi - nop.m 0 - fmerge.s FR_X = f8,f8 // keep input argument for subsequent - // call of __libm_error_support# - nop.i 0 -} -{ .mfi -(p13) mov GR_TAG = 4 // set libm error in case of logf - fms.s1 FR_tmp = f0,f0,f1 // -1.0 - nop.i 0 -};; -{ .mfi - nop.m 0 - frcpa.s0 f8,p0 = FR_tmp,f0 // log(+/-0) should be equal to -INF. - // We can get it using frcpa because it - // sets result to the IEEE-754 mandated - // quotient of FR_tmp/f0. - // As far as FR_tmp is -1 it'll be -INF - nop.i 0 -} -{ .mib -(p14) mov GR_TAG = 10 // set libm error in case of log10f - nop.i 0 - br.cond.sptk logf_libm_err -};; - -.align 32 -logf_negatives: -{ .mfi -(p13) mov GR_TAG = 5 // set libm error in case of logf - fmerge.s FR_X = f8,f8 // keep input argument for subsequent - // call of __libm_error_support# - nop.i 0 -};; -{ .mfi -(p14) mov GR_TAG = 11 // set libm error in case of log10f - frcpa.s0 f8,p0 = f0,f0 // log(negatives) should be equal to NaN. - // We can get it using frcpa because it - // sets result to the IEEE-754 mandated - // quotient of f0/f0 i.e. NaN. - nop.i 0 -};; - -.align 32 -logf_libm_err: -{ .mmi - alloc r32 = ar.pfs,1,4,4,0 - mov GR_Parameter_TAG = GR_TAG - nop.i 0 -};; -GLOBAL_IEEE754_END(logf) - - -// Stack operations when calling error support. -// (1) (2) (3) (call) (4) -// sp -> + psp -> + psp -> + sp -> + -// | | | | -// | | <- GR_Y R3 ->| <- GR_RESULT | -> f8 -// | | | | -// | <-GR_Y Y2->| Y2 ->| <- GR_Y | -// | | | | -// | | <- GR_X X1 ->| | -// | | | | -// sp-64 -> + sp -> + sp -> + + -// save ar.pfs save b0 restore gp -// save gp restore ar.pfs - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfs [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_logl.S b/sysdeps/ia64/fpu/e_logl.S deleted file mode 100644 index 996f64aaee..0000000000 --- a/sysdeps/ia64/fpu/e_logl.S +++ /dev/null @@ -1,1200 +0,0 @@ -.file "logl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 05/21/01 Extracted logl and log10l from log1pl.s file, and optimized -// all paths. -// 06/20/01 Fixed error tag for x=-inf. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align; -// used data8 for long double table values -// -//********************************************************************* -// -//********************************************************************* -// -// Function: Combined logl(x) and log10l(x) where -// logl(x) = ln(x), for double-extended precision x values -// log10l(x) = log (x), for double-extended precision x values -// 10 -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f34-f76 -// -// General Purpose Registers: -// r32-r56 -// r53-r56 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6-p14 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// Denormal fault raised on denormal inputs -// Overflow exceptions cannot occur -// Underflow exceptions raised when appropriate for log1p -// (Error Handling Routine called for underflow) -// Inexact raised when appropriate by algorithm -// -// logl(inf) = inf -// logl(-inf) = QNaN -// logl(+/-0) = -inf -// logl(SNaN) = QNaN -// logl(QNaN) = QNaN -// logl(EM_special Values) = QNaN -// log10l(inf) = inf -// log10l(-inf) = QNaN -// log10l(+/-0) = -inf -// log10l(SNaN) = QNaN -// log10l(QNaN) = QNaN -// log10l(EM_special Values) = QNaN -// -//********************************************************************* -// -// Overview -// -// The method consists of two cases. -// -// If |X-1| < 2^(-7) use case log_near1; -// else use case log_regular; -// -// Case log_near1: -// -// logl( 1 + X ) can be approximated by a simple polynomial -// in W = X-1. This polynomial resembles the truncated Taylor -// series W - W^/2 + W^3/3 - ... -// -// Case log_regular: -// -// Here we use a table lookup method. The basic idea is that in -// order to compute logl(Arg) for an argument Arg in [1,2), we -// construct a value G such that G*Arg is close to 1 and that -// logl(1/G) is obtainable easily from a table of values calculated -// beforehand. Thus -// -// logl(Arg) = logl(1/G) + logl(G*Arg) -// = logl(1/G) + logl(1 + (G*Arg - 1)) -// -// Because |G*Arg - 1| is small, the second term on the right hand -// side can be approximated by a short polynomial. We elaborate -// this method in four steps. -// -// Step 0: Initialization -// -// We need to calculate logl( X ). Obtain N, S_hi such that -// -// X = 2^N * S_hi exactly -// -// where S_hi in [1,2) -// -// Step 1: Argument Reduction -// -// Based on S_hi, obtain G_1, G_2, G_3 from a table and calculate -// -// G := G_1 * G_2 * G_3 -// r := (G * S_hi - 1) -// -// These G_j's have the property that the product is exactly -// representable and that |r| < 2^(-12) as a result. -// -// Step 2: Approximation -// -// -// logl(1 + r) is approximated by a short polynomial poly(r). -// -// Step 3: Reconstruction -// -// -// Finally, logl( X ) is given by -// -// logl( X ) = logl( 2^N * S_hi ) -// ~=~ N*logl(2) + logl(1/G) + logl(1 + r) -// ~=~ N*logl(2) + logl(1/G) + poly(r). -// -// **** Algorithm **** -// -// Case log_near1: -// -// Here we compute a simple polynomial. To exploit parallelism, we split -// the polynomial into two portions. -// -// W := X - 1 -// Wsq := W * W -// W4 := Wsq*Wsq -// W6 := W4*Wsq -// Y_hi := W + Wsq*(P_1 + W*(P_2 + W*(P_3 + W*P_4)) -// Y_lo := W6*(P_5 + W*(P_6 + W*(P_7 + W*P_8))) -// -// Case log_regular: -// -// We present the algorithm in four steps. -// -// Step 0. Initialization -// ---------------------- -// -// Z := X -// N := unbaised exponent of Z -// S_hi := 2^(-N) * Z -// -// Step 1. Argument Reduction -// -------------------------- -// -// Let -// -// Z = 2^N * S_hi = 2^N * 1.d_1 d_2 d_3 ... d_63 -// -// We obtain G_1, G_2, G_3 by the following steps. -// -// -// Define X_0 := 1.d_1 d_2 ... d_14. This is extracted -// from S_hi. -// -// Define A_1 := 1.d_1 d_2 d_3 d_4. This is X_0 truncated -// to lsb = 2^(-4). -// -// Define index_1 := [ d_1 d_2 d_3 d_4 ]. -// -// Fetch Z_1 := (1/A_1) rounded UP in fixed point with -// fixed point lsb = 2^(-15). -// Z_1 looks like z_0.z_1 z_2 ... z_15 -// Note that the fetching is done using index_1. -// A_1 is actually not needed in the implementation -// and is used here only to explain how is the value -// Z_1 defined. -// -// Fetch G_1 := (1/A_1) truncated to 21 sig. bits. -// floating pt. Again, fetching is done using index_1. A_1 -// explains how G_1 is defined. -// -// Calculate X_1 := X_0 * Z_1 truncated to lsb = 2^(-14) -// = 1.0 0 0 0 d_5 ... d_14 -// This is accomplished by integer multiplication. -// It is proved that X_1 indeed always begin -// with 1.0000 in fixed point. -// -// -// Define A_2 := 1.0 0 0 0 d_5 d_6 d_7 d_8. This is X_1 -// truncated to lsb = 2^(-8). Similar to A_1, -// A_2 is not needed in actual implementation. It -// helps explain how some of the values are defined. -// -// Define index_2 := [ d_5 d_6 d_7 d_8 ]. -// -// Fetch Z_2 := (1/A_2) rounded UP in fixed point with -// fixed point lsb = 2^(-15). Fetch done using index_2. -// Z_2 looks like z_0.z_1 z_2 ... z_15 -// -// Fetch G_2 := (1/A_2) truncated to 21 sig. bits. -// floating pt. -// -// Calculate X_2 := X_1 * Z_2 truncated to lsb = 2^(-14) -// = 1.0 0 0 0 0 0 0 0 d_9 d_10 ... d_14 -// This is accomplished by integer multiplication. -// It is proved that X_2 indeed always begin -// with 1.00000000 in fixed point. -// -// -// Define A_3 := 1.0 0 0 0 0 0 0 0 d_9 d_10 d_11 d_12 d_13 1. -// This is 2^(-14) + X_2 truncated to lsb = 2^(-13). -// -// Define index_3 := [ d_9 d_10 d_11 d_12 d_13 ]. -// -// Fetch G_3 := (1/A_3) truncated to 21 sig. bits. -// floating pt. Fetch is done using index_3. -// -// Compute G := G_1 * G_2 * G_3. -// -// This is done exactly since each of G_j only has 21 sig. bits. -// -// Compute -// -// r := (G*S_hi - 1) -// -// -// Step 2. Approximation -// --------------------- -// -// This step computes an approximation to logl( 1 + r ) where r is the -// reduced argument just obtained. It is proved that |r| <= 1.9*2^(-13); -// thus logl(1+r) can be approximated by a short polynomial: -// -// logl(1+r) ~=~ poly = r + Q1 r^2 + ... + Q4 r^5 -// -// -// Step 3. Reconstruction -// ---------------------- -// -// This step computes the desired result of logl(X): -// -// logl(X) = logl( 2^N * S_hi ) -// = N*logl(2) + logl( S_hi ) -// = N*logl(2) + logl(1/G) + -// logl(1 + G*S_hi - 1 ) -// -// logl(2), logl(1/G_j) are stored as pairs of (single,double) numbers: -// log2_hi, log2_lo, log1byGj_hi, log1byGj_lo. The high parts are -// single-precision numbers and the low parts are double precision -// numbers. These have the property that -// -// N*log2_hi + SUM ( log1byGj_hi ) -// -// is computable exactly in double-extended precision (64 sig. bits). -// Finally -// -// Y_hi := N*log2_hi + SUM ( log1byGj_hi ) -// Y_lo := poly_hi + [ poly_lo + -// ( SUM ( log1byGj_lo ) + N*log2_lo ) ] -// - -RODATA -.align 64 - -// ************* DO NOT CHANGE THE ORDER OF THESE TABLES ************* - -// P_8, P_7, P_6, P_5, P_4, P_3, P_2, and P_1 - -LOCAL_OBJECT_START(Constants_P) -data8 0xE3936754EFD62B15,0x00003FFB -data8 0x8003B271A5E56381,0x0000BFFC -data8 0x9249248C73282DB0,0x00003FFC -data8 0xAAAAAA9F47305052,0x0000BFFC -data8 0xCCCCCCCCCCD17FC9,0x00003FFC -data8 0x8000000000067ED5,0x0000BFFD -data8 0xAAAAAAAAAAAAAAAA,0x00003FFD -data8 0xFFFFFFFFFFFFFFFE,0x0000BFFD -LOCAL_OBJECT_END(Constants_P) - -// log2_hi, log2_lo, Q_4, Q_3, Q_2, and Q_1 - -LOCAL_OBJECT_START(Constants_Q) -data8 0xB172180000000000,0x00003FFE -data8 0x82E308654361C4C6,0x0000BFE2 -data8 0xCCCCCAF2328833CB,0x00003FFC -data8 0x80000077A9D4BAFB,0x0000BFFD -data8 0xAAAAAAAAAAABE3D2,0x00003FFD -data8 0xFFFFFFFFFFFFDAB7,0x0000BFFD -LOCAL_OBJECT_END(Constants_Q) - -// 1/ln10_hi, 1/ln10_lo - -LOCAL_OBJECT_START(Constants_1_by_LN10) -data8 0xDE5BD8A937287195,0x00003FFD -data8 0xD56EAABEACCF70C8,0x00003FBB -LOCAL_OBJECT_END(Constants_1_by_LN10) - - -// Z1 - 16 bit fixed - -LOCAL_OBJECT_START(Constants_Z_1) -data4 0x00008000 -data4 0x00007879 -data4 0x000071C8 -data4 0x00006BCB -data4 0x00006667 -data4 0x00006187 -data4 0x00005D18 -data4 0x0000590C -data4 0x00005556 -data4 0x000051EC -data4 0x00004EC5 -data4 0x00004BDB -data4 0x00004925 -data4 0x0000469F -data4 0x00004445 -data4 0x00004211 -LOCAL_OBJECT_END(Constants_Z_1) - -// G1 and H1 - IEEE single and h1 - IEEE double - -LOCAL_OBJECT_START(Constants_G_H_h1) -data4 0x3F800000,0x00000000 -data8 0x0000000000000000 -data4 0x3F70F0F0,0x3D785196 -data8 0x3DA163A6617D741C -data4 0x3F638E38,0x3DF13843 -data8 0x3E2C55E6CBD3D5BB -data4 0x3F579430,0x3E2FF9A0 -data8 0xBE3EB0BFD86EA5E7 -data4 0x3F4CCCC8,0x3E647FD6 -data8 0x3E2E6A8C86B12760 -data4 0x3F430C30,0x3E8B3AE7 -data8 0x3E47574C5C0739BA -data4 0x3F3A2E88,0x3EA30C68 -data8 0x3E20E30F13E8AF2F -data4 0x3F321640,0x3EB9CEC8 -data8 0xBE42885BF2C630BD -data4 0x3F2AAAA8,0x3ECF9927 -data8 0x3E497F3497E577C6 -data4 0x3F23D708,0x3EE47FC5 -data8 0x3E3E6A6EA6B0A5AB -data4 0x3F1D89D8,0x3EF8947D -data8 0xBDF43E3CD328D9BE -data4 0x3F17B420,0x3F05F3A1 -data8 0x3E4094C30ADB090A -data4 0x3F124920,0x3F0F4303 -data8 0xBE28FBB2FC1FE510 -data4 0x3F0D3DC8,0x3F183EBF -data8 0x3E3A789510FDE3FA -data4 0x3F088888,0x3F20EC80 -data8 0x3E508CE57CC8C98F -data4 0x3F042108,0x3F29516A -data8 0xBE534874A223106C -LOCAL_OBJECT_END(Constants_G_H_h1) - -// Z2 - 16 bit fixed - -LOCAL_OBJECT_START(Constants_Z_2) -data4 0x00008000 -data4 0x00007F81 -data4 0x00007F02 -data4 0x00007E85 -data4 0x00007E08 -data4 0x00007D8D -data4 0x00007D12 -data4 0x00007C98 -data4 0x00007C20 -data4 0x00007BA8 -data4 0x00007B31 -data4 0x00007ABB -data4 0x00007A45 -data4 0x000079D1 -data4 0x0000795D -data4 0x000078EB -LOCAL_OBJECT_END(Constants_Z_2) - -// G2 and H2 - IEEE single and h2 - IEEE double - -LOCAL_OBJECT_START(Constants_G_H_h2) -data4 0x3F800000,0x00000000 -data8 0x0000000000000000 -data4 0x3F7F00F8,0x3B7F875D -data8 0x3DB5A11622C42273 -data4 0x3F7E03F8,0x3BFF015B -data8 0x3DE620CF21F86ED3 -data4 0x3F7D08E0,0x3C3EE393 -data8 0xBDAFA07E484F34ED -data4 0x3F7C0FC0,0x3C7E0586 -data8 0xBDFE07F03860BCF6 -data4 0x3F7B1880,0x3C9E75D2 -data8 0x3DEA370FA78093D6 -data4 0x3F7A2328,0x3CBDC97A -data8 0x3DFF579172A753D0 -data4 0x3F792FB0,0x3CDCFE47 -data8 0x3DFEBE6CA7EF896B -data4 0x3F783E08,0x3CFC15D0 -data8 0x3E0CF156409ECB43 -data4 0x3F774E38,0x3D0D874D -data8 0xBE0B6F97FFEF71DF -data4 0x3F766038,0x3D1CF49B -data8 0xBE0804835D59EEE8 -data4 0x3F757400,0x3D2C531D -data8 0x3E1F91E9A9192A74 -data4 0x3F748988,0x3D3BA322 -data8 0xBE139A06BF72A8CD -data4 0x3F73A0D0,0x3D4AE46F -data8 0x3E1D9202F8FBA6CF -data4 0x3F72B9D0,0x3D5A1756 -data8 0xBE1DCCC4BA796223 -data4 0x3F71D488,0x3D693B9D -data8 0xBE049391B6B7C239 -LOCAL_OBJECT_END(Constants_G_H_h2) - -// G3 and H3 - IEEE single and h3 - IEEE double - -LOCAL_OBJECT_START(Constants_G_H_h3) -data4 0x3F7FFC00,0x38800100 -data8 0x3D355595562224CD -data4 0x3F7FF400,0x39400480 -data8 0x3D8200A206136FF6 -data4 0x3F7FEC00,0x39A00640 -data8 0x3DA4D68DE8DE9AF0 -data4 0x3F7FE400,0x39E00C41 -data8 0xBD8B4291B10238DC -data4 0x3F7FDC00,0x3A100A21 -data8 0xBD89CCB83B1952CA -data4 0x3F7FD400,0x3A300F22 -data8 0xBDB107071DC46826 -data4 0x3F7FCC08,0x3A4FF51C -data8 0x3DB6FCB9F43307DB -data4 0x3F7FC408,0x3A6FFC1D -data8 0xBD9B7C4762DC7872 -data4 0x3F7FBC10,0x3A87F20B -data8 0xBDC3725E3F89154A -data4 0x3F7FB410,0x3A97F68B -data8 0xBD93519D62B9D392 -data4 0x3F7FAC18,0x3AA7EB86 -data8 0x3DC184410F21BD9D -data4 0x3F7FA420,0x3AB7E101 -data8 0xBDA64B952245E0A6 -data4 0x3F7F9C20,0x3AC7E701 -data8 0x3DB4B0ECAABB34B8 -data4 0x3F7F9428,0x3AD7DD7B -data8 0x3D9923376DC40A7E -data4 0x3F7F8C30,0x3AE7D474 -data8 0x3DC6E17B4F2083D3 -data4 0x3F7F8438,0x3AF7CBED -data8 0x3DAE314B811D4394 -data4 0x3F7F7C40,0x3B03E1F3 -data8 0xBDD46F21B08F2DB1 -data4 0x3F7F7448,0x3B0BDE2F -data8 0xBDDC30A46D34522B -data4 0x3F7F6C50,0x3B13DAAA -data8 0x3DCB0070B1F473DB -data4 0x3F7F6458,0x3B1BD766 -data8 0xBDD65DDC6AD282FD -data4 0x3F7F5C68,0x3B23CC5C -data8 0xBDCDAB83F153761A -data4 0x3F7F5470,0x3B2BC997 -data8 0xBDDADA40341D0F8F -data4 0x3F7F4C78,0x3B33C711 -data8 0x3DCD1BD7EBC394E8 -data4 0x3F7F4488,0x3B3BBCC6 -data8 0xBDC3532B52E3E695 -data4 0x3F7F3C90,0x3B43BAC0 -data8 0xBDA3961EE846B3DE -data4 0x3F7F34A0,0x3B4BB0F4 -data8 0xBDDADF06785778D4 -data4 0x3F7F2CA8,0x3B53AF6D -data8 0x3DCC3ED1E55CE212 -data4 0x3F7F24B8,0x3B5BA620 -data8 0xBDBA31039E382C15 -data4 0x3F7F1CC8,0x3B639D12 -data8 0x3D635A0B5C5AF197 -data4 0x3F7F14D8,0x3B6B9444 -data8 0xBDDCCB1971D34EFC -data4 0x3F7F0CE0,0x3B7393BC -data8 0x3DC7450252CD7ADA -data4 0x3F7F04F0,0x3B7B8B6D -data8 0xBDB68F177D7F2A42 -LOCAL_OBJECT_END(Constants_G_H_h3) - - -// Floating Point Registers - -FR_Input_X = f8 - -FR_Y_hi = f34 -FR_Y_lo = f35 - -FR_Scale = f36 -FR_X_Prime = f37 -FR_S_hi = f38 -FR_W = f39 -FR_G = f40 - -FR_H = f41 -FR_wsq = f42 -FR_w4 = f43 -FR_h = f44 -FR_w6 = f45 - -FR_G2 = f46 -FR_H2 = f47 -FR_poly_lo = f48 -FR_P8 = f49 -FR_poly_hi = f50 - -FR_P7 = f51 -FR_h2 = f52 -FR_rsq = f53 -FR_P6 = f54 -FR_r = f55 - -FR_log2_hi = f56 -FR_log2_lo = f57 -FR_p87 = f58 -FR_p876 = f58 -FR_p8765 = f58 -FR_float_N = f59 -FR_Q4 = f60 - -FR_p43 = f61 -FR_p432 = f61 -FR_p4321 = f61 -FR_P4 = f62 -FR_G3 = f63 -FR_H3 = f64 -FR_h3 = f65 - -FR_Q3 = f66 -FR_P3 = f67 -FR_Q2 = f68 -FR_P2 = f69 -FR_1LN10_hi = f70 - -FR_Q1 = f71 -FR_P1 = f72 -FR_1LN10_lo = f73 -FR_P5 = f74 -FR_rcub = f75 - -FR_Output_X_tmp = f76 - -FR_X = f8 -FR_Y = f0 -FR_RESULT = f76 - - -// General Purpose Registers - -GR_ad_p = r33 -GR_Index1 = r34 -GR_Index2 = r35 -GR_signif = r36 -GR_X_0 = r37 -GR_X_1 = r38 -GR_X_2 = r39 -GR_Z_1 = r40 -GR_Z_2 = r41 -GR_N = r42 -GR_Bias = r43 -GR_M = r44 -GR_Index3 = r45 -GR_ad_p2 = r46 -GR_exp_mask = r47 -GR_exp_2tom7 = r48 -GR_ad_ln10 = r49 -GR_ad_tbl_1 = r50 -GR_ad_tbl_2 = r51 -GR_ad_tbl_3 = r52 -GR_ad_q = r53 -GR_ad_z_1 = r54 -GR_ad_z_2 = r55 -GR_ad_z_3 = r56 - -// -// Added for unwind support -// - -GR_SAVE_PFS = r50 -GR_SAVE_B0 = r51 -GR_SAVE_GP = r52 -GR_Parameter_X = r53 -GR_Parameter_Y = r54 -GR_Parameter_RESULT = r55 -GR_Parameter_TAG = r56 - -.section .text - -GLOBAL_IEEE754_ENTRY(logl) -{ .mfi - alloc r32 = ar.pfs,0,21,4,0 - fclass.m p6, p0 = FR_Input_X, 0x1E3 // Test for natval, nan, inf - cmp.eq p7, p14 = r0, r0 // Set p7 if logl -} -{ .mfb - addl GR_ad_z_1 = @ltoff(Constants_Z_1#),gp - fnorm.s1 FR_X_Prime = FR_Input_X // Normalize x - br.cond.sptk LOGL_BEGIN -} -;; - -GLOBAL_IEEE754_END(logl) - - -GLOBAL_IEEE754_ENTRY(log10l) -{ .mfi - alloc r32 = ar.pfs,0,21,4,0 - fclass.m p6, p0 = FR_Input_X, 0x1E3 // Test for natval, nan, inf - cmp.ne p7, p14 = r0, r0 // Set p14 if log10l -} -{ .mfb - addl GR_ad_z_1 = @ltoff(Constants_Z_1#),gp - fnorm.s1 FR_X_Prime = FR_Input_X // Normalize x - nop.b 999 -} -;; - - -// Common code for logl and log10 -LOGL_BEGIN: -{ .mfi - ld8 GR_ad_z_1 = [GR_ad_z_1] // Get pointer to Constants_Z_1 - fclass.m p10, p0 = FR_Input_X, 0x0b // Test for denormal - mov GR_exp_2tom7 = 0x0fff8 // Exponent of 2^-7 -} -;; - -{ .mfb - getf.sig GR_signif = FR_Input_X // Get significand of x - fcmp.eq.s1 p9, p0 = FR_Input_X, f1 // Test for x=1.0 -(p6) br.cond.spnt LOGL_64_special // Branch for nan, inf, natval -} -;; - -{ .mfi - add GR_ad_tbl_1 = 0x040, GR_ad_z_1 // Point to Constants_G_H_h1 - fcmp.lt.s1 p13, p0 = FR_Input_X, f0 // Test for x<0 - add GR_ad_p = -0x100, GR_ad_z_1 // Point to Constants_P -} -{ .mib - add GR_ad_z_2 = 0x140, GR_ad_z_1 // Point to Constants_Z_2 - add GR_ad_tbl_2 = 0x180, GR_ad_z_1 // Point to Constants_G_H_h2 -(p10) br.cond.spnt LOGL_64_denormal // Branch for denormal -} -;; - -LOGL_64_COMMON: -{ .mfi - add GR_ad_q = 0x080, GR_ad_p // Point to Constants_Q - fcmp.eq.s1 p8, p0 = FR_Input_X, f0 // Test for x=0 - extr.u GR_Index1 = GR_signif, 59, 4 // Get high 4 bits of signif -} -{ .mfb - add GR_ad_tbl_3 = 0x280, GR_ad_z_1 // Point to Constants_G_H_h3 -(p9) fma.s0 f8 = FR_Input_X, f0, f0 // If x=1, return +0.0 -(p9) br.ret.spnt b0 // Exit if x=1 -} -;; - -{ .mfi - shladd GR_ad_z_1 = GR_Index1, 2, GR_ad_z_1 // Point to Z_1 - fclass.nm p10, p0 = FR_Input_X, 0x1FF // Test for unsupported - extr.u GR_X_0 = GR_signif, 49, 15 // Get high 15 bits of significand -} -{ .mfi - ldfe FR_P8 = [GR_ad_p],16 // Load P_8 for near1 path - fsub.s1 FR_W = FR_X_Prime, f1 // W = x - 1 - add GR_ad_ln10 = 0x060, GR_ad_q // Point to Constants_1_by_LN10 -} -;; - -{ .mfi - ld4 GR_Z_1 = [GR_ad_z_1] // Load Z_1 - nop.f 999 - mov GR_exp_mask = 0x1FFFF // Create exponent mask -} -{ .mib - shladd GR_ad_tbl_1 = GR_Index1, 4, GR_ad_tbl_1 // Point to G_1 - mov GR_Bias = 0x0FFFF // Create exponent bias -(p13) br.cond.spnt LOGL_64_negative // Branch if x<0 -} -;; - -{ .mfb - ldfps FR_G, FR_H = [GR_ad_tbl_1],8 // Load G_1, H_1 - fmerge.se FR_S_hi = f1,FR_X_Prime // Form |x| -(p8) br.cond.spnt LOGL_64_zero // Branch if x=0 -} -;; - -{ .mmb - getf.exp GR_N = FR_X_Prime // Get N = exponent of x - ldfd FR_h = [GR_ad_tbl_1] // Load h_1 -(p10) br.cond.spnt LOGL_64_unsupported // Branch for unsupported type -} -;; - -{ .mfi - ldfe FR_log2_hi = [GR_ad_q],16 // Load log2_hi - fcmp.eq.s0 p8, p0 = FR_Input_X, f0 // Dummy op to flag denormals - pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 // Get bits 30-15 of X_0 * Z_1 -} -;; - -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mmi - ldfe FR_log2_lo = [GR_ad_q],16 // Load log2_lo -(p14) ldfe FR_1LN10_hi = [GR_ad_ln10],16 // If log10l, load 1/ln10_hi - sub GR_N = GR_N, GR_Bias -} -;; - -{ .mmi - ldfe FR_Q4 = [GR_ad_q],16 // Load Q4 -(p14) ldfe FR_1LN10_lo = [GR_ad_ln10] // If log10l, load 1/ln10_lo - nop.i 999 -} -;; - -{ .mmi - ldfe FR_Q3 = [GR_ad_q],16 // Load Q3 - setf.sig FR_float_N = GR_N // Put integer N into rightmost significand - nop.i 999 -} -;; - -{ .mmi - getf.exp GR_M = FR_W // Get signexp of w = x - 1 - ldfe FR_Q2 = [GR_ad_q],16 // Load Q2 - extr.u GR_Index2 = GR_X_1, 6, 4 // Extract bits 6-9 of X_1 -} -;; - -{ .mmi - ldfe FR_Q1 = [GR_ad_q] // Load Q1 - shladd GR_ad_z_2 = GR_Index2, 2, GR_ad_z_2 // Point to Z_2 - add GR_ad_p2 = 0x30,GR_ad_p // Point to P_4 -} -;; - -{ .mmi - ld4 GR_Z_2 = [GR_ad_z_2] // Load Z_2 - shladd GR_ad_tbl_2 = GR_Index2, 4, GR_ad_tbl_2 // Point to G_2 - and GR_M = GR_exp_mask, GR_M // Get exponent of w = x - 1 -} -;; - -{ .mmi - ldfps FR_G2, FR_H2 = [GR_ad_tbl_2],8 // Load G_2, H_2 - cmp.lt p8, p9 = GR_M, GR_exp_2tom7 // Test |x-1| < 2^-7 - nop.i 999 -} -;; - -// Paths are merged. -// p8 is for the near1 path: |x-1| < 2^-7 -// p9 is for regular path: |x-1| >= 2^-7 - -{ .mmi - ldfd FR_h2 = [GR_ad_tbl_2] // Load h_2 - nop.m 999 - nop.i 999 -} -;; - -{ .mmi -(p8) ldfe FR_P7 = [GR_ad_p],16 // Load P_7 for near1 path -(p8) ldfe FR_P4 = [GR_ad_p2],16 // Load P_4 for near1 path -(p9) pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 // Get bits 30-15 of X_1 * Z_2 -} -;; - -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mmi -(p8) ldfe FR_P6 = [GR_ad_p],16 // Load P_6 for near1 path -(p8) ldfe FR_P3 = [GR_ad_p2],16 // Load P_3 for near1 path - nop.i 999 -} -;; - -{ .mmf -(p8) ldfe FR_P5 = [GR_ad_p],16 // Load P_5 for near1 path -(p8) ldfe FR_P2 = [GR_ad_p2],16 // Load P_2 for near1 path -(p8) fmpy.s1 FR_wsq = FR_W, FR_W // wsq = w * w for near1 path -} -;; - -{ .mmi -(p8) ldfe FR_P1 = [GR_ad_p2],16 ;; // Load P_1 for near1 path - nop.m 999 -(p9) extr.u GR_Index3 = GR_X_2, 1, 5 // Extract bits 1-5 of X_2 -} -;; - -{ .mfi -(p9) shladd GR_ad_tbl_3 = GR_Index3, 4, GR_ad_tbl_3 // Point to G_3 -(p9) fcvt.xf FR_float_N = FR_float_N - nop.i 999 -} -;; - -{ .mfi -(p9) ldfps FR_G3, FR_H3 = [GR_ad_tbl_3],8 // Load G_3, H_3 - nop.f 999 - nop.i 999 -} -;; - -{ .mfi -(p9) ldfd FR_h3 = [GR_ad_tbl_3] // Load h_3 -(p9) fmpy.s1 FR_G = FR_G, FR_G2 // G = G_1 * G_2 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fadd.s1 FR_H = FR_H, FR_H2 // H = H_1 + H_2 - nop.i 999 -} -;; - -{ .mmf - nop.m 999 - nop.m 999 -(p9) fadd.s1 FR_h = FR_h, FR_h2 // h = h_1 + h_2 -} -;; - -{ .mfi - nop.m 999 -(p8) fmpy.s1 FR_w4 = FR_wsq, FR_wsq // w4 = w^4 for near1 path - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 FR_p87 = FR_W, FR_P8, FR_P7 // p87 = w * P8 + P7 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fma.s1 FR_p43 = FR_W, FR_P4, FR_P3 // p43 = w * P4 + P3 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fmpy.s1 FR_G = FR_G, FR_G3 // G = (G_1 * G_2) * G_3 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fadd.s1 FR_H = FR_H, FR_H3 // H = (H_1 + H_2) + H_3 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fadd.s1 FR_h = FR_h, FR_h3 // h = (h_1 + h_2) + h_3 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fmpy.s1 FR_w6 = FR_w4, FR_wsq // w6 = w^6 for near1 path - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fma.s1 FR_p432 = FR_W, FR_p43, FR_P2 // p432 = w * p43 + P2 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 FR_p876 = FR_W, FR_p87, FR_P6 // p876 = w * p87 + P6 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fms.s1 FR_r = FR_G, FR_S_hi, f1 // r = G * S_hi - 1 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 FR_Y_hi = FR_float_N, FR_log2_hi, FR_H // Y_hi = N * log2_hi + H - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_h = FR_float_N, FR_log2_lo, FR_h // h = N * log2_lo + h - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fma.s1 FR_p4321 = FR_W, FR_p432, FR_P1 // p4321 = w * p432 + P1 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 FR_p8765 = FR_W, FR_p876, FR_P5 // p8765 = w * p876 + P5 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 // poly_lo = r * Q4 + Q3 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fmpy.s1 FR_rsq = FR_r, FR_r // rsq = r * r - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fma.s1 FR_Y_lo = FR_wsq, FR_p4321, f0 // Y_lo = wsq * p4321 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 FR_Y_hi = FR_W, f1, f0 // Y_hi = w for near1 path - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 // poly_lo = poly_lo * r + Q2 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 FR_rcub = FR_rsq, FR_r, f0 // rcub = r^3 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fma.s1 FR_Y_lo = FR_w6, FR_p8765,FR_Y_lo // Y_lo = w6 * p8765 + w2 * p4321 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r // poly_hi = Q1 * rsq + r - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_lo = FR_poly_lo, FR_rcub, FR_h // poly_lo = poly_lo*r^3 + h - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fadd.s1 FR_Y_lo = FR_poly_hi, FR_poly_lo // Y_lo = poly_hi + poly_lo - nop.i 999 -} -;; - -// Remainder of code is common for near1 and regular paths -{ .mfi - nop.m 999 -(p7) fadd.s0 f8 = FR_Y_lo,FR_Y_hi // If logl, result=Y_lo+Y_hi - nop.i 999 -} -{ .mfi - nop.m 999 -(p14) fmpy.s1 FR_Output_X_tmp = FR_Y_lo,FR_1LN10_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p14) fma.s1 FR_Output_X_tmp = FR_Y_hi,FR_1LN10_lo,FR_Output_X_tmp - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p14) fma.s0 f8 = FR_Y_hi,FR_1LN10_hi,FR_Output_X_tmp - br.ret.sptk b0 // Common exit for 0 < x < inf -} -;; - - -// Here if x=+-0 -LOGL_64_zero: -// -// If x=+-0 raise divide by zero and return -inf -// -{ .mfi -(p7) mov GR_Parameter_TAG = 0 - fsub.s1 FR_Output_X_tmp = f0, f1 - nop.i 999 -} -;; - -{ .mfb -(p14) mov GR_Parameter_TAG = 6 - frcpa.s0 FR_Output_X_tmp, p8 = FR_Output_X_tmp, f0 - br.cond.sptk __libm_error_region -} -;; - -LOGL_64_special: -{ .mfi - nop.m 999 - fclass.m.unc p8, p0 = FR_Input_X, 0x1E1 // Test for natval, nan, +inf - nop.i 999 -} -;; - -// -// For SNaN raise invalid and return QNaN. -// For QNaN raise invalid and return QNaN. -// For +Inf return +Inf. -// -{ .mfb - nop.m 999 -(p8) fmpy.s0 f8 = FR_Input_X, f1 -(p8) br.ret.sptk b0 // Return for natval, nan, +inf -} -;; - -// -// For -Inf raise invalid and return QNaN. -// -{ .mmi -(p7) mov GR_Parameter_TAG = 1 - nop.m 999 - nop.i 999 -} -;; - -{ .mfb -(p14) mov GR_Parameter_TAG = 7 - fmpy.s0 FR_Output_X_tmp = FR_Input_X, f0 - br.cond.sptk __libm_error_region -} -;; - -// Here if x denormal or unnormal -LOGL_64_denormal: -{ .mmi - getf.sig GR_signif = FR_X_Prime // Get significand of normalized input - nop.m 999 - nop.i 999 -} -;; - -{ .mmb - getf.exp GR_N = FR_X_Prime // Get exponent of normalized input - nop.m 999 - br.cond.sptk LOGL_64_COMMON // Branch back to common code -} -;; - -LOGL_64_unsupported: -// -// Return generated NaN or other value. -// -{ .mfb - nop.m 999 - fmpy.s0 f8 = FR_Input_X, f0 - br.ret.sptk b0 -} -;; - -// Here if -inf < x < 0 -LOGL_64_negative: -// -// Deal with x < 0 in a special way - raise -// invalid and produce QNaN indefinite. -// -{ .mfi -(p7) mov GR_Parameter_TAG = 1 - frcpa.s0 FR_Output_X_tmp, p8 = f0, f0 - nop.i 999 -} -;; - -{ .mib -(p14) mov GR_Parameter_TAG = 7 - nop.i 999 - br.cond.sptk __libm_error_region -} -;; - - -GLOBAL_IEEE754_END(log10l) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 999 - nop.m 999 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region#) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_pow.S b/sysdeps/ia64/fpu/e_pow.S deleted file mode 100644 index 765f509695..0000000000 --- a/sysdeps/ia64/fpu/e_pow.S +++ /dev/null @@ -1,2296 +0,0 @@ -.file "pow.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 02/03/00 Added p12 to definite over/under path. With odd power we did not -// maintain the sign of x in this path. -// 04/04/00 Unwind support added -// 04/19/00 pow(+-1,inf) now returns NaN -// pow(+-val, +-inf) returns 0 or inf, but now does not call error -// support -// Added s1 to fcvt.fx because invalid flag was incorrectly set. -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 09/07/00 Improved performance by eliminating bank conflicts and other stalls, -// and tweaking the critical path -// 09/08/00 Per c99, pow(+-1,inf) now returns 1, and pow(+1,nan) returns 1 -// 09/28/00 Updated NaN**0 path -// 01/20/01 Fixed denormal flag settings. -// 02/13/01 Improved speed. -// 03/19/01 Reordered exp polynomial to improve speed and eliminate monotonicity -// problem in round up, down, and to zero modes. Also corrected -// overflow result when x negative, y odd in round up, down, zero. -// 06/14/01 Added brace missing from bundle -// 12/10/01 Corrected case where x negative, 2^52 <= |y| < 2^53, y odd integer. -// 12/20/01 Fixed monotonity problem in round to nearest. -// 02/08/02 Fixed overflow/underflow cases that were not calling error support. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 08/29/02 Improved Itanium 2 performance -// 09/21/02 Added branch for |y*log(x)|<2^-11 to fix monotonicity problems. -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// double pow(double x, double y) -// -// Overview of operation -//============================================================== -// -// Three steps... -// 1. Log(x) -// 2. y Log(x) -// 3. exp(y log(x)) -// -// This means we work with the absolute value of x and merge in the sign later. -// Log(x) = G + delta + r -rsq/2 + p -// G,delta depend on the exponent of x and table entries. The table entries are -// indexed by the exponent of x, called K. -// -// The G and delta come out of the reduction; r is the reduced x. -// -// B = frcpa(x) -// xB-1 is small means that B is the approximate inverse of x. -// -// Log(x) = Log( (1/B)(Bx) ) -// = Log(1/B) + Log(Bx) -// = Log(1/B) + Log( 1 + (Bx-1)) -// -// x = 2^K 1.x_1x_2.....x_52 -// B= frcpa(x) = 2^-k Cm -// Log(1/B) = Log(1/(2^-K Cm)) -// Log(1/B) = Log((2^K/ Cm)) -// Log(1/B) = K Log(2) + Log(1/Cm) -// -// Log(x) = K Log(2) + Log(1/Cm) + Log( 1 + (Bx-1)) -// -// If you take the significand of x, set the exponent to true 0, then Cm is -// the frcpa. We tabulate the Log(1/Cm) values. There are 256 of them. -// The frcpa table is indexed by 8 bits, the x_1 thru x_8. -// m = x_1x_2...x_8 is an 8-bit index. -// -// Log(1/Cm) = log(1/frcpa(1+m/256)) where m goes from 0 to 255. -// -// We tabluate as two doubles, T and t, where T +t is the value itself. -// -// Log(x) = (K Log(2)_hi + T) + (Log(2)_hi + t) + Log( 1 + (Bx-1)) -// Log(x) = G + delta + Log( 1 + (Bx-1)) -// -// The Log( 1 + (Bx-1)) can be calculated as a series in r = Bx-1. -// -// Log( 1 + (Bx-1)) = r - rsq/2 + p -// -// Then, -// -// yLog(x) = yG + y delta + y(r-rsq/2) + yp -// yLog(x) = Z1 + e3 + Z2 + Z3 + (e2 + e3) -// -// -// exp(yLog(x)) = exp(Z1 + Z2 + Z3) exp(e1 + e2 + e3) -// -// -// exp(Z3) is another series. -// exp(e1 + e2 + e3) is approximated as f3 = 1 + (e1 + e2 + e3) -// -// Z1 (128/log2) = number of log2/128 in Z1 is N1 -// Z2 (128/log2) = number of log2/128 in Z2 is N2 -// -// s1 = Z1 - N1 log2/128 -// s2 = Z2 - N2 log2/128 -// -// s = s1 + s2 -// N = N1 + N2 -// -// exp(Z1 + Z2) = exp(Z) -// exp(Z) = exp(s) exp(N log2/128) -// -// exp(r) = exp(Z - N log2/128) -// -// r = s + d = (Z - N (log2/128)_hi) -N (log2/128)_lo -// = Z - N (log2/128) -// -// Z = s+d +N (log2/128) -// -// exp(Z) = exp(s) (1+d) exp(N log2/128) -// -// N = M 128 + n -// -// N log2/128 = M log2 + n log2/128 -// -// n is 8 binary digits = n_7n_6...n_1 -// -// n log2/128 = n_7n_6n_5 16 log2/128 + n_4n_3n_2n_1 log2/128 -// n log2/128 = n_7n_6n_5 log2/8 + n_4n_3n_2n_1 log2/128 -// n log2/128 = I2 log2/8 + I1 log2/128 -// -// N log2/128 = M log2 + I2 log2/8 + I1 log2/128 -// -// exp(Z) = exp(s) (1+d) exp(log(2^M) + log(2^I2/8) + log(2^I1/128)) -// exp(Z) = exp(s) (1+d1) (1+d2)(2^M) 2^I2/8 2^I1/128 -// exp(Z) = exp(s) f1 f2 (2^M) 2^I2/8 2^I1/128 -// -// I1, I2 are table indices. Use a series for exp(s). -// Then get exp(Z) -// -// exp(yLog(x)) = exp(Z1 + Z2 + Z3) exp(e1 + e2 + e3) -// exp(yLog(x)) = exp(Z) exp(Z3) f3 -// exp(yLog(x)) = exp(Z)f3 exp(Z3) -// exp(yLog(x)) = A exp(Z3) -// -// We actually calculate exp(Z3) -1. -// Then, -// exp(yLog(x)) = A + A( exp(Z3) -1) -// - -// Table Generation -//============================================================== - -// The log values -// ============== -// The operation (K*log2_hi) must be exact. K is the true exponent of x. -// If we allow gradual underflow (denormals), K can be represented in 12 bits -// (as a two's complement number). We assume 13 bits as an engineering -// precaution. -// -// +------------+----------------+-+ -// | 13 bits | 50 bits | | -// +------------+----------------+-+ -// 0 1 66 -// 2 34 -// -// So we want the lsb(log2_hi) to be 2^-50 -// We get log2 as a quad-extended (15-bit exponent, 128-bit significand) -// -// 0 fffe b17217f7d1cf79ab c9e3b39803f2f6af (4...) -// -// Consider numbering the bits left to right, starting at 0 thru 127. -// Bit 0 is the 2^-1 bit; bit 49 is the 2^-50 bit. -// -// ...79ab -// 0111 1001 1010 1011 -// 44 -// 89 -// -// So if we shift off the rightmost 14 bits, then (shift back only -// the top half) we get -// -// 0 fffe b17217f7d1cf4000 e6af278ece600fcb dabc000000000000 -// -// Put the right 64-bit signficand in an FR register, convert to double; -// it is exact. Put the next 128 bits into a quad register and round to double. -// The true exponent of the low part is -51. -// -// hi is 0 fffe b17217f7d1cf4000 -// lo is 0 ffcc e6af278ece601000 -// -// Convert to double memory format and get -// -// hi is 0x3fe62e42fefa39e8 -// lo is 0x3cccd5e4f1d9cc02 -// -// log2_hi + log2_lo is an accurate value for log2. -// -// -// The T and t values -// ================== -// A similar method is used to generate the T and t values. -// -// K * log2_hi + T must be exact. -// -// Smallest T,t -// ---------- -// The smallest T,t is -// T t -// 0x3f60040155d58800, 0x3c93bce0ce3ddd81 log(1/frcpa(1+0/256))= +1.95503e-003 -// -// The exponent is 0x3f6 (biased) or -9 (true). -// For the smallest T value, what we want is to clip the significand such that -// when it is shifted right by 9, its lsb is in the bit for 2^-51. The 9 is the -// specific for the first entry. In general, it is 0xffff - (biased 15-bit -// exponent). - -// Independently, what we have calculated is the table value as a quad -// precision number. -// Table entry 1 is -// 0 fff6 80200aaeac44ef38 338f77605fdf8000 -// -// We store this quad precision number in a data structure that is -// sign: 1 -// exponent: 15 -// signficand_hi: 64 (includes explicit bit) -// signficand_lo: 49 -// Because the explicit bit is included, the significand is 113 bits. -// -// Consider significand_hi for table entry 1. -// -// -// +-+--- ... -------+--------------------+ -// | | -// +-+--- ... -------+--------------------+ -// 0 1 4444444455555555556666 -// 2345678901234567890123 -// -// Labeled as above, bit 0 is 2^0, bit 1 is 2^-1, etc. -// Bit 42 is 2^-42. If we shift to the right by 9, the bit in -// bit 42 goes in 51. -// -// So what we want to do is shift bits 43 thru 63 into significand_lo. -// This is shifting bit 42 into bit 63, taking care to retain shifted-off bits. -// Then shifting (just with signficaand_hi) back into bit 42. -// -// The shift_value is 63-42 = 21. In general, this is -// 63 - (51 -(0xffff - 0xfff6)) -// For this example, it is -// 63 - (51 - 9) = 63 - 42 = 21 -// -// This means we are shifting 21 bits into significand_lo. We must maintain more -// that a 128-bit signficand not to lose bits. So before the shift we put the -// 128-bit significand into a 256-bit signficand and then shift. -// The 256-bit significand has four parts: hh, hl, lh, and ll. -// -// Start off with -// hh hl lh ll -// <64> <49><15_0> <64_0> <64_0> -// -// After shift by 21 (then return for significand_hi), -// <43><21_0> <21><43> <6><58_0> <64_0> -// -// Take the hh part and convert to a double. There is no rounding here. -// The conversion is exact. The true exponent of the high part is the same as -// the true exponent of the input quad. -// -// We have some 64 plus significand bits for the low part. In this example, we -// have 70 bits. We want to round this to a double. Put them in a quad and then -// do a quad fnorm. -// For this example the true exponent of the low part is -// true_exponent_of_high - 43 = true_exponent_of_high - (64-21) -// In general, this is -// true_exponent_of_high - (64 - shift_value) -// -// -// Largest T,t -// ---------- -// The largest T,t is -// 0x3fe62643fecf9742, 0x3c9e3147684bd37d log(1/frcpa(1+255/256))=+6.92171e-001 -// -// Table entry 256 is -// 0 fffe b1321ff67cba178c 51da12f4df5a0000 -// -// The shift value is -// 63 - (51 -(0xffff - 0xfffe)) = 13 -// -// The true exponent of the low part is -// true_exponent_of_high - (64 - shift_value) -// -1 - (64-13) = -52 -// Biased as a double, this is 0x3cb -// -// -// -// So then lsb(T) must be >= 2^-51 -// msb(Klog2_hi) <= 2^12 -// -// +--------+---------+ -// | 51 bits | <== largest T -// +--------+---------+ -// | 9 bits | 42 bits | <== smallest T -// +------------+----------------+-+ -// | 13 bits | 50 bits | | -// +------------+----------------+-+ - - -// Special Cases -//============================================================== - -// double float -// overflow error 24 30 - -// underflow error 25 31 - -// X zero Y zero -// +0 +0 +1 error 26 32 -// -0 +0 +1 error 26 32 -// +0 -0 +1 error 26 32 -// -0 -0 +1 error 26 32 - -// X zero Y negative -// +0 -odd integer +inf error 27 33 divide-by-zero -// -0 -odd integer -inf error 27 33 divide-by-zero -// +0 !-odd integer +inf error 27 33 divide-by-zero -// -0 !-odd integer +inf error 27 33 divide-by-zero -// +0 -inf +inf error 27 33 divide-by-zero -// -0 -inf +inf error 27 33 divide-by-zero - -// X zero Y positve -// +0 +odd integer +0 -// -0 +odd integer -0 -// +0 !+odd integer +0 -// -0 !+odd integer +0 -// +0 +inf +0 -// -0 +inf +0 -// +0 Y NaN quiet Y invalid if Y SNaN -// -0 Y NaN quiet Y invalid if Y SNaN - -// X one -// -1 Y inf +1 -// -1 Y NaN quiet Y invalid if Y SNaN -// +1 Y NaN +1 invalid if Y SNaN -// +1 Y any else +1 - -// X - Y not integer QNAN error 28 34 invalid - -// X NaN Y 0 +1 error 29 35 -// X NaN Y NaN quiet X invalid if X or Y SNaN -// X NaN Y any else quiet X invalid if X SNaN -// X !+1 Y NaN quiet Y invalid if Y SNaN - - -// X +inf Y >0 +inf -// X -inf Y >0, !odd integer +inf -// X -inf Y >0, odd integer -inf - -// X +inf Y <0 +0 -// X -inf Y <0, !odd integer +0 -// X -inf Y <0, odd integer -0 - -// X +inf Y =0 +1 -// X -inf Y =0 +1 - -// |X|<1 Y +inf +0 -// |X|<1 Y -inf +inf -// |X|>1 Y +inf +inf -// |X|>1 Y -inf +0 - -// X any Y =0 +1 - -// Assembly macros -//============================================================== - -// integer registers used - -pow_GR_signexp_X = r14 -pow_GR_17ones = r15 -pow_AD_P = r16 -pow_GR_exp_2tom8 = r17 -pow_GR_sig_X = r18 -pow_GR_10033 = r19 -pow_GR_16ones = r20 - -pow_AD_Tt = r21 -pow_GR_exp_X = r22 -pow_AD_Q = r23 -pow_GR_true_exp_X = r24 -pow_GR_y_zero = r25 - -pow_GR_exp_Y = r26 -pow_AD_tbl1 = r27 -pow_AD_tbl2 = r28 -pow_GR_offset = r29 -pow_GR_exp_Xm1 = r30 -pow_GR_xneg_yodd = r31 - -pow_GR_signexp_Xm1 = r35 -pow_GR_int_W1 = r36 -pow_GR_int_W2 = r37 -pow_GR_int_N = r38 -pow_GR_index1 = r39 -pow_GR_index2 = r40 - -pow_AD_T1 = r41 -pow_AD_T2 = r42 -pow_int_GR_M = r43 -pow_GR_sig_int_Y = r44 -pow_GR_sign_Y_Gpr = r45 - -pow_GR_17ones_m1 = r46 -pow_GR_one = r47 -pow_GR_sign_Y = r48 -pow_GR_signexp_Y_Gpr = r49 -pow_GR_exp_Y_Gpr = r50 - -pow_GR_true_exp_Y_Gpr = r51 -pow_GR_signexp_Y = r52 -pow_GR_x_one = r53 -pow_GR_exp_2toM63 = r54 -pow_GR_big_pos = r55 - -pow_GR_big_neg = r56 - -GR_SAVE_B0 = r50 -GR_SAVE_GP = r51 -GR_SAVE_PFS = r52 - -GR_Parameter_X = r53 -GR_Parameter_Y = r54 -GR_Parameter_RESULT = r55 -pow_GR_tag = r56 - - -// floating point registers used - -POW_B = f32 -POW_NORM_X = f33 -POW_Xm1 = f34 -POW_r1 = f34 -POW_P4 = f35 - -POW_P5 = f36 -POW_NORM_Y = f37 -POW_Q2 = f38 -POW_Q3 = f39 -POW_P2 = f40 - -POW_P3 = f41 -POW_P0 = f42 -POW_log2_lo = f43 -POW_r = f44 -POW_Q0_half = f45 - -POW_Q1 = f46 -POW_tmp = f47 -POW_log2_hi = f48 -POW_Q4 = f49 -POW_P1 = f50 - -POW_log2_by_128_hi = f51 -POW_inv_log2_by_128 = f52 -POW_rsq = f53 -POW_Yrcub = f54 -POW_log2_by_128_lo = f55 - -POW_v6 = f56 -POW_xsq = f57 -POW_v4 = f58 -POW_v2 = f59 -POW_T = f60 - -POW_Tt = f61 -POW_RSHF = f62 -POW_v21ps = f63 -POW_s4 = f64 -POW_twoV = f65 - -POW_U = f66 -POW_G = f67 -POW_delta = f68 -POW_v3 = f69 -POW_V = f70 - -POW_p = f71 -POW_Z1 = f72 -POW_e3 = f73 -POW_e2 = f74 -POW_Z2 = f75 - -POW_e1 = f76 -POW_W1 = f77 -POW_UmZ2 = f78 -POW_W2 = f79 -POW_Z3 = f80 - -POW_int_W1 = f81 -POW_e12 = f82 -POW_int_W2 = f83 -POW_UmZ2pV = f84 -POW_Z3sq = f85 - -POW_e123 = f86 -POW_N1float = f87 -POW_N2float = f88 -POW_f3 = f89 -POW_q = f90 - -POW_s1 = f91 -POW_Nfloat = f92 -POW_s2 = f93 -POW_f2 = f94 -POW_f1 = f95 - -POW_T1 = f96 -POW_T2 = f97 -POW_2M = f98 -POW_s = f99 -POW_f12 = f100 - -POW_ssq = f101 -POW_T1T2 = f102 -POW_1ps = f103 -POW_A = f104 -POW_es = f105 - -POW_Xp1 = f106 -POW_int_K = f107 -POW_K = f108 -POW_f123 = f109 -POW_Gpr = f110 - -POW_Y_Gpr = f111 -POW_int_Y = f112 -POW_abs_q = f114 -POW_2toM63 = f115 - -POW_float_int_Y = f116 -POW_ftz_urm_f8 = f117 -POW_wre_urm_f8 = f118 -POW_big_neg = f119 -POW_big_pos = f120 - -POW_GY_Z2 = f121 -POW_pYrcub_e3 = f122 -POW_d = f123 -POW_d2 = f124 -POW_poly_d_hi = f121 -POW_poly_d_lo = f122 -POW_poly_d = f121 - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(pow_table_P) -data8 0x8000F7B249FF332D, 0x0000BFFC // P_5 -data8 0xAAAAAAA9E7902C7F, 0x0000BFFC // P_3 -data8 0x80000000000018E5, 0x0000BFFD // P_1 -data8 0xb8aa3b295c17f0bc, 0x00004006 // inv_ln2_by_128 -// -// -data8 0x3FA5555555554A9E // Q_2 -data8 0x3F8111124F4DD9F9 // Q_3 -data8 0x3FE0000000000000 // Q_0 -data8 0x3FC5555555554733 // Q_1 -data8 0x3F56C16D9360FFA0 // Q_4 -data8 0x43e8000000000000 // Right shift constant for exp -data8 0xc9e3b39803f2f6af, 0x00003fb7 // ln2_by_128_lo -data8 0x0000000000000000 // pad to eliminate bank conflicts with pow_table_Q -data8 0x0000000000000000 // pad to eliminate bank conflicts with pow_table_Q -LOCAL_OBJECT_END(pow_table_P) - -LOCAL_OBJECT_START(pow_table_Q) -data8 0x9249FE7F0DC423CF, 0x00003FFC // P_4 -data8 0xCCCCCCCC4ED2BA7F, 0x00003FFC // P_2 -data8 0xAAAAAAAAAAAAB505, 0x00003FFD // P_0 -data8 0x3fe62e42fefa39e8, 0x3cccd5e4f1d9cc02 // log2 hi lo = +6.93147e-001 -data8 0xb17217f7d1cf79ab, 0x00003ff7 // ln2_by_128_hi -LOCAL_OBJECT_END(pow_table_Q) - - -LOCAL_OBJECT_START(pow_Tt) -data8 0x3f60040155d58800, 0x3c93bce0ce3ddd81 // log(1/frcpa(1+0/256))= +1.95503e-003 -data8 0x3f78121214586a00, 0x3cb540e0a5cfc9bc // log(1/frcpa(1+1/256))= +5.87661e-003 -data8 0x3f841929f9683200, 0x3cbdf1d57404da1f // log(1/frcpa(1+2/256))= +9.81362e-003 -data8 0x3f8c317384c75f00, 0x3c69806208c04c22 // log(1/frcpa(1+3/256))= +1.37662e-002 -data8 0x3f91a6b91ac73380, 0x3c7874daa716eb32 // log(1/frcpa(1+4/256))= +1.72376e-002 -data8 0x3f95ba9a5d9ac000, 0x3cacbb84e08d78ac // log(1/frcpa(1+5/256))= +2.12196e-002 -data8 0x3f99d2a807432580, 0x3cbcf80538b441e1 // log(1/frcpa(1+6/256))= +2.52177e-002 -data8 0x3f9d6b2725979800, 0x3c6095e5c8f8f359 // log(1/frcpa(1+7/256))= +2.87291e-002 -data8 0x3fa0c58fa19dfa80, 0x3cb4c5d4e9d0dda2 // log(1/frcpa(1+8/256))= +3.27573e-002 -data8 0x3fa2954c78cbce00, 0x3caa932b860ab8d6 // log(1/frcpa(1+9/256))= +3.62953e-002 -data8 0x3fa4a94d2da96c40, 0x3ca670452b76bbd5 // log(1/frcpa(1+10/256))= +4.03542e-002 -data8 0x3fa67c94f2d4bb40, 0x3ca84104f9941798 // log(1/frcpa(1+11/256))= +4.39192e-002 -data8 0x3fa85188b630f040, 0x3cb40a882cbf0153 // log(1/frcpa(1+12/256))= +4.74971e-002 -data8 0x3faa6b8abe73af40, 0x3c988d46e25c9059 // log(1/frcpa(1+13/256))= +5.16017e-002 -data8 0x3fac441e06f72a80, 0x3cae3e930a1a2a96 // log(1/frcpa(1+14/256))= +5.52072e-002 -data8 0x3fae1e6713606d00, 0x3c8a796f6283b580 // log(1/frcpa(1+15/256))= +5.88257e-002 -data8 0x3faffa6911ab9300, 0x3c5193070351e88a // log(1/frcpa(1+16/256))= +6.24574e-002 -data8 0x3fb0ec139c5da600, 0x3c623f2a75eb992d // log(1/frcpa(1+17/256))= +6.61022e-002 -data8 0x3fb1dbd2643d1900, 0x3ca649b2ef8927f0 // log(1/frcpa(1+18/256))= +6.97605e-002 -data8 0x3fb2cc7284fe5f00, 0x3cbc5e86599513e2 // log(1/frcpa(1+19/256))= +7.34321e-002 -data8 0x3fb3bdf5a7d1ee60, 0x3c90bd4bb69dada3 // log(1/frcpa(1+20/256))= +7.71173e-002 -data8 0x3fb4b05d7aa012e0, 0x3c54e377c9b8a54f // log(1/frcpa(1+21/256))= +8.08161e-002 -data8 0x3fb580db7ceb5700, 0x3c7fdb2f98354cde // log(1/frcpa(1+22/256))= +8.39975e-002 -data8 0x3fb674f089365a60, 0x3cb9994c9d3301c1 // log(1/frcpa(1+23/256))= +8.77219e-002 -data8 0x3fb769ef2c6b5680, 0x3caaec639db52a79 // log(1/frcpa(1+24/256))= +9.14602e-002 -data8 0x3fb85fd927506a40, 0x3c9f9f99a3cf8e25 // log(1/frcpa(1+25/256))= +9.52125e-002 -data8 0x3fb9335e5d594980, 0x3ca15c3abd47d99a // log(1/frcpa(1+26/256))= +9.84401e-002 -data8 0x3fba2b0220c8e5e0, 0x3cb4ca639adf6fc3 // log(1/frcpa(1+27/256))= +1.02219e-001 -data8 0x3fbb0004ac1a86a0, 0x3ca7cb81bf959a59 // log(1/frcpa(1+28/256))= +1.05469e-001 -data8 0x3fbbf968769fca00, 0x3cb0c646c121418e // log(1/frcpa(1+29/256))= +1.09274e-001 -data8 0x3fbccfedbfee13a0, 0x3ca0465fce24ab4b // log(1/frcpa(1+30/256))= +1.12548e-001 -data8 0x3fbda727638446a0, 0x3c82803f4e2e6603 // log(1/frcpa(1+31/256))= +1.15832e-001 -data8 0x3fbea3257fe10f60, 0x3cb986a3f2313d1a // log(1/frcpa(1+32/256))= +1.19677e-001 -data8 0x3fbf7be9fedbfde0, 0x3c97d16a6a621cf4 // log(1/frcpa(1+33/256))= +1.22985e-001 -data8 0x3fc02ab352ff25f0, 0x3c9cc6baad365600 // log(1/frcpa(1+34/256))= +1.26303e-001 -data8 0x3fc097ce579d2040, 0x3cb9ba16d329440b // log(1/frcpa(1+35/256))= +1.29633e-001 -data8 0x3fc1178e8227e470, 0x3cb7bc671683f8e6 // log(1/frcpa(1+36/256))= +1.33531e-001 -data8 0x3fc185747dbecf30, 0x3c9d1116f66d2345 // log(1/frcpa(1+37/256))= +1.36885e-001 -data8 0x3fc1f3b925f25d40, 0x3c8162c9ef939ac6 // log(1/frcpa(1+38/256))= +1.40250e-001 -data8 0x3fc2625d1e6ddf50, 0x3caad3a1ec384fc3 // log(1/frcpa(1+39/256))= +1.43627e-001 -data8 0x3fc2d1610c868130, 0x3cb3ad997036941b // log(1/frcpa(1+40/256))= +1.47015e-001 -data8 0x3fc340c597411420, 0x3cbc2308262c7998 // log(1/frcpa(1+41/256))= +1.50414e-001 -data8 0x3fc3b08b6757f2a0, 0x3cb2170d6cdf0526 // log(1/frcpa(1+42/256))= +1.53825e-001 -data8 0x3fc40dfb08378000, 0x3c9bb453c4f7b685 // log(1/frcpa(1+43/256))= +1.56677e-001 -data8 0x3fc47e74e8ca5f70, 0x3cb836a48fdfce9d // log(1/frcpa(1+44/256))= +1.60109e-001 -data8 0x3fc4ef51f6466de0, 0x3ca07a43919aa64b // log(1/frcpa(1+45/256))= +1.63553e-001 -data8 0x3fc56092e02ba510, 0x3ca85006899d97b0 // log(1/frcpa(1+46/256))= +1.67010e-001 -data8 0x3fc5d23857cd74d0, 0x3ca30a5ba6e7abbe // log(1/frcpa(1+47/256))= +1.70478e-001 -data8 0x3fc6313a37335d70, 0x3ca905586f0ac97e // log(1/frcpa(1+48/256))= +1.73377e-001 -data8 0x3fc6a399dabbd380, 0x3c9b2c6657a96684 // log(1/frcpa(1+49/256))= +1.76868e-001 -data8 0x3fc70337dd3ce410, 0x3cb50bc52f55cdd8 // log(1/frcpa(1+50/256))= +1.79786e-001 -data8 0x3fc77654128f6120, 0x3cad2eb7c9a39efe // log(1/frcpa(1+51/256))= +1.83299e-001 -data8 0x3fc7e9d82a0b0220, 0x3cba127e90393c01 // log(1/frcpa(1+52/256))= +1.86824e-001 -data8 0x3fc84a6b759f5120, 0x3cbd7fd52079f706 // log(1/frcpa(1+53/256))= +1.89771e-001 -data8 0x3fc8ab47d5f5a300, 0x3cbfae141751a3de // log(1/frcpa(1+54/256))= +1.92727e-001 -data8 0x3fc91fe490965810, 0x3cb69cf30a1c319e // log(1/frcpa(1+55/256))= +1.96286e-001 -data8 0x3fc981634011aa70, 0x3ca5bb3d208bc42a // log(1/frcpa(1+56/256))= +1.99261e-001 -data8 0x3fc9f6c407089660, 0x3ca04d68658179a0 // log(1/frcpa(1+57/256))= +2.02843e-001 -data8 0x3fca58e729348f40, 0x3c99f5411546c286 // log(1/frcpa(1+58/256))= +2.05838e-001 -data8 0x3fcabb55c31693a0, 0x3cb9a5350eb327d5 // log(1/frcpa(1+59/256))= +2.08842e-001 -data8 0x3fcb1e104919efd0, 0x3c18965fcce7c406 // log(1/frcpa(1+60/256))= +2.11855e-001 -data8 0x3fcb94ee93e367c0, 0x3cb503716da45184 // log(1/frcpa(1+61/256))= +2.15483e-001 -data8 0x3fcbf851c0675550, 0x3cbdf1b3f7ab5378 // log(1/frcpa(1+62/256))= +2.18516e-001 -data8 0x3fcc5c0254bf23a0, 0x3ca7aab9ed0b1d7b // log(1/frcpa(1+63/256))= +2.21558e-001 -data8 0x3fccc000c9db3c50, 0x3c92a7a2a850072a // log(1/frcpa(1+64/256))= +2.24609e-001 -data8 0x3fcd244d99c85670, 0x3c9f6019120edf4c // log(1/frcpa(1+65/256))= +2.27670e-001 -data8 0x3fcd88e93fb2f450, 0x3c6affb96815e081 // log(1/frcpa(1+66/256))= +2.30741e-001 -data8 0x3fcdedd437eaef00, 0x3c72553595897976 // log(1/frcpa(1+67/256))= +2.33820e-001 -data8 0x3fce530effe71010, 0x3c90913b020fa182 // log(1/frcpa(1+68/256))= +2.36910e-001 -data8 0x3fceb89a1648b970, 0x3c837ba4045bfd25 // log(1/frcpa(1+69/256))= +2.40009e-001 -data8 0x3fcf1e75fadf9bd0, 0x3cbcea6d13e0498d // log(1/frcpa(1+70/256))= +2.43117e-001 -data8 0x3fcf84a32ead7c30, 0x3ca5e3a67b3c6d77 // log(1/frcpa(1+71/256))= +2.46235e-001 -data8 0x3fcfeb2233ea07c0, 0x3cba0c6f0049c5a6 // log(1/frcpa(1+72/256))= +2.49363e-001 -data8 0x3fd028f9c7035c18, 0x3cb0a30b06677ff6 // log(1/frcpa(1+73/256))= +2.52501e-001 -data8 0x3fd05c8be0d96358, 0x3ca0f1c77ccb5865 // log(1/frcpa(1+74/256))= +2.55649e-001 -data8 0x3fd085eb8f8ae790, 0x3cbd513f45fe7a97 // log(1/frcpa(1+75/256))= +2.58174e-001 -data8 0x3fd0b9c8e32d1910, 0x3c927449047ca006 // log(1/frcpa(1+76/256))= +2.61339e-001 -data8 0x3fd0edd060b78080, 0x3c89b52d8435f53e // log(1/frcpa(1+77/256))= +2.64515e-001 -data8 0x3fd122024cf00638, 0x3cbdd976fabda4bd // log(1/frcpa(1+78/256))= +2.67701e-001 -data8 0x3fd14be2927aecd0, 0x3cb02f90ad0bc471 // log(1/frcpa(1+79/256))= +2.70257e-001 -data8 0x3fd180618ef18ad8, 0x3cbd003792c71a98 // log(1/frcpa(1+80/256))= +2.73461e-001 -data8 0x3fd1b50bbe2fc638, 0x3ca9ae64c6403ead // log(1/frcpa(1+81/256))= +2.76675e-001 -data8 0x3fd1df4cc7cf2428, 0x3cb43f0455f7e395 // log(1/frcpa(1+82/256))= +2.79254e-001 -data8 0x3fd214456d0eb8d0, 0x3cb0fbd748d75d30 // log(1/frcpa(1+83/256))= +2.82487e-001 -data8 0x3fd23ec5991eba48, 0x3c906edd746b77e2 // log(1/frcpa(1+84/256))= +2.85081e-001 -data8 0x3fd2740d9f870af8, 0x3ca9802e6a00a670 // log(1/frcpa(1+85/256))= +2.88333e-001 -data8 0x3fd29ecdabcdfa00, 0x3cacecef70890cfa // log(1/frcpa(1+86/256))= +2.90943e-001 -data8 0x3fd2d46602adcce8, 0x3cb97911955f3521 // log(1/frcpa(1+87/256))= +2.94214e-001 -data8 0x3fd2ff66b04ea9d0, 0x3cb12dabe191d1c9 // log(1/frcpa(1+88/256))= +2.96838e-001 -data8 0x3fd335504b355a30, 0x3cbdf9139df924ec // log(1/frcpa(1+89/256))= +3.00129e-001 -data8 0x3fd360925ec44f58, 0x3cb253e68977a1e3 // log(1/frcpa(1+90/256))= +3.02769e-001 -data8 0x3fd38bf1c3337e70, 0x3cb3d283d2a2da21 // log(1/frcpa(1+91/256))= +3.05417e-001 -data8 0x3fd3c25277333180, 0x3cadaa5b035eae27 // log(1/frcpa(1+92/256))= +3.08735e-001 -data8 0x3fd3edf463c16838, 0x3cb983d680d3c108 // log(1/frcpa(1+93/256))= +3.11399e-001 -data8 0x3fd419b423d5e8c0, 0x3cbc86dd921c139d // log(1/frcpa(1+94/256))= +3.14069e-001 -data8 0x3fd44591e0539f48, 0x3c86a76d6dc2782e // log(1/frcpa(1+95/256))= +3.16746e-001 -data8 0x3fd47c9175b6f0a8, 0x3cb59a2e013c6b5f // log(1/frcpa(1+96/256))= +3.20103e-001 -data8 0x3fd4a8b341552b08, 0x3c93f1e86e468694 // log(1/frcpa(1+97/256))= +3.22797e-001 -data8 0x3fd4d4f390890198, 0x3cbf5e4ea7c5105a // log(1/frcpa(1+98/256))= +3.25498e-001 -data8 0x3fd501528da1f960, 0x3cbf58da53e9ad10 // log(1/frcpa(1+99/256))= +3.28206e-001 -data8 0x3fd52dd06347d4f0, 0x3cb98a28cebf6eef // log(1/frcpa(1+100/256))= +3.30921e-001 -data8 0x3fd55a6d3c7b8a88, 0x3c9c76b67c2d1fd4 // log(1/frcpa(1+101/256))= +3.33644e-001 -data8 0x3fd5925d2b112a58, 0x3c9029616a4331b8 // log(1/frcpa(1+102/256))= +3.37058e-001 -data8 0x3fd5bf406b543db0, 0x3c9fb8292ecfc820 // log(1/frcpa(1+103/256))= +3.39798e-001 -data8 0x3fd5ec433d5c35a8, 0x3cb71a1229d17eec // log(1/frcpa(1+104/256))= +3.42545e-001 -data8 0x3fd61965cdb02c18, 0x3cbba94fe1dbb8d2 // log(1/frcpa(1+105/256))= +3.45300e-001 -data8 0x3fd646a84935b2a0, 0x3c9ee496d2c9ae57 // log(1/frcpa(1+106/256))= +3.48063e-001 -data8 0x3fd6740add31de90, 0x3cb1da3a6c7a9dfd // log(1/frcpa(1+107/256))= +3.50833e-001 -data8 0x3fd6a18db74a58c0, 0x3cb494c257add8dc // log(1/frcpa(1+108/256))= +3.53610e-001 -data8 0x3fd6cf31058670e8, 0x3cb0b244a70a8da9 // log(1/frcpa(1+109/256))= +3.56396e-001 -data8 0x3fd6f180e852f0b8, 0x3c9db7aefa866720 // log(1/frcpa(1+110/256))= +3.58490e-001 -data8 0x3fd71f5d71b894e8, 0x3cbe91c4bf324957 // log(1/frcpa(1+111/256))= +3.61289e-001 -data8 0x3fd74d5aefd66d58, 0x3cb06b3d9bfac023 // log(1/frcpa(1+112/256))= +3.64096e-001 -data8 0x3fd77b79922bd378, 0x3cb727d8804491f4 // log(1/frcpa(1+113/256))= +3.66911e-001 -data8 0x3fd7a9b9889f19e0, 0x3ca2ef22df5bc543 // log(1/frcpa(1+114/256))= +3.69734e-001 -data8 0x3fd7d81b037eb6a0, 0x3cb8fd3ba07a7ece // log(1/frcpa(1+115/256))= +3.72565e-001 -data8 0x3fd8069e33827230, 0x3c8bd1e25866e61a // log(1/frcpa(1+116/256))= +3.75404e-001 -data8 0x3fd82996d3ef8bc8, 0x3ca5aab9f5928928 // log(1/frcpa(1+117/256))= +3.77538e-001 -data8 0x3fd85855776dcbf8, 0x3ca56f33337789d6 // log(1/frcpa(1+118/256))= +3.80391e-001 -data8 0x3fd8873658327cc8, 0x3cbb8ef0401db49d // log(1/frcpa(1+119/256))= +3.83253e-001 -data8 0x3fd8aa75973ab8c8, 0x3cbb9961f509a680 // log(1/frcpa(1+120/256))= +3.85404e-001 -data8 0x3fd8d992dc8824e0, 0x3cb220512a53732d // log(1/frcpa(1+121/256))= +3.88280e-001 -data8 0x3fd908d2ea7d9510, 0x3c985f0e513bfb5c // log(1/frcpa(1+122/256))= +3.91164e-001 -data8 0x3fd92c59e79c0e50, 0x3cb82e073fd30d63 // log(1/frcpa(1+123/256))= +3.93332e-001 -data8 0x3fd95bd750ee3ed0, 0x3ca4aa7cdb6dd8a8 // log(1/frcpa(1+124/256))= +3.96231e-001 -data8 0x3fd98b7811a3ee58, 0x3caa93a5b660893e // log(1/frcpa(1+125/256))= +3.99138e-001 -data8 0x3fd9af47f33d4068, 0x3cac294b3b3190ba // log(1/frcpa(1+126/256))= +4.01323e-001 -data8 0x3fd9df270c1914a0, 0x3cbe1a58fd0cd67e // log(1/frcpa(1+127/256))= +4.04245e-001 -data8 0x3fda0325ed14fda0, 0x3cb1efa7950fb57e // log(1/frcpa(1+128/256))= +4.06442e-001 -data8 0x3fda33440224fa78, 0x3c8915fe75e7d477 // log(1/frcpa(1+129/256))= +4.09379e-001 -data8 0x3fda57725e80c380, 0x3ca72bd1062b1b7f // log(1/frcpa(1+130/256))= +4.11587e-001 -data8 0x3fda87d0165dd198, 0x3c91f7845f58dbad // log(1/frcpa(1+131/256))= +4.14539e-001 -data8 0x3fdaac2e6c03f890, 0x3cb6f237a911c509 // log(1/frcpa(1+132/256))= +4.16759e-001 -data8 0x3fdadccc6fdf6a80, 0x3c90ddc4b7687169 // log(1/frcpa(1+133/256))= +4.19726e-001 -data8 0x3fdb015b3eb1e790, 0x3c692dd7d90e1e8e // log(1/frcpa(1+134/256))= +4.21958e-001 -data8 0x3fdb323a3a635948, 0x3c6f85655cbe14de // log(1/frcpa(1+135/256))= +4.24941e-001 -data8 0x3fdb56fa04462908, 0x3c95252d841994de // log(1/frcpa(1+136/256))= +4.27184e-001 -data8 0x3fdb881aa659bc90, 0x3caa53a745a3642f // log(1/frcpa(1+137/256))= +4.30182e-001 -data8 0x3fdbad0bef3db160, 0x3cb32f2540dcc16a // log(1/frcpa(1+138/256))= +4.32437e-001 -data8 0x3fdbd21297781c28, 0x3cbd8e891e106f1d // log(1/frcpa(1+139/256))= +4.34697e-001 -data8 0x3fdc039236f08818, 0x3c809435af522ba7 // log(1/frcpa(1+140/256))= +4.37718e-001 -data8 0x3fdc28cb1e4d32f8, 0x3cb3944752fbd81e // log(1/frcpa(1+141/256))= +4.39990e-001 -data8 0x3fdc4e19b84723c0, 0x3c9a465260cd3fe5 // log(1/frcpa(1+142/256))= +4.42267e-001 -data8 0x3fdc7ff9c74554c8, 0x3c92447d5b6ca369 // log(1/frcpa(1+143/256))= +4.45311e-001 -data8 0x3fdca57b64e9db00, 0x3cb44344a8a00c82 // log(1/frcpa(1+144/256))= +4.47600e-001 -data8 0x3fdccb130a5ceba8, 0x3cbefaddfb97b73f // log(1/frcpa(1+145/256))= +4.49895e-001 -data8 0x3fdcf0c0d18f3268, 0x3cbd3e7bfee57898 // log(1/frcpa(1+146/256))= +4.52194e-001 -data8 0x3fdd232075b5a200, 0x3c9222599987447c // log(1/frcpa(1+147/256))= +4.55269e-001 -data8 0x3fdd490246defa68, 0x3cabafe9a767a80d // log(1/frcpa(1+148/256))= +4.57581e-001 -data8 0x3fdd6efa918d25c8, 0x3cb58a2624e1c6fd // log(1/frcpa(1+149/256))= +4.59899e-001 -data8 0x3fdd9509707ae528, 0x3cbdc3babce578e7 // log(1/frcpa(1+150/256))= +4.62221e-001 -data8 0x3fddbb2efe92c550, 0x3cb0ac0943c434a4 // log(1/frcpa(1+151/256))= +4.64550e-001 -data8 0x3fddee2f3445e4a8, 0x3cbba9d07ce820e8 // log(1/frcpa(1+152/256))= +4.67663e-001 -data8 0x3fde148a1a2726c8, 0x3cb6537e3375b205 // log(1/frcpa(1+153/256))= +4.70004e-001 -data8 0x3fde3afc0a49ff38, 0x3cbfed5518dbc20e // log(1/frcpa(1+154/256))= +4.72350e-001 -data8 0x3fde6185206d5168, 0x3cb6572601f73d5c // log(1/frcpa(1+155/256))= +4.74702e-001 -data8 0x3fde882578823d50, 0x3c9b24abd4584d1a // log(1/frcpa(1+156/256))= +4.77060e-001 -data8 0x3fdeaedd2eac9908, 0x3cb0ceb5e4d2c8f7 // log(1/frcpa(1+157/256))= +4.79423e-001 -data8 0x3fded5ac5f436be0, 0x3ca72f21f1f5238e // log(1/frcpa(1+158/256))= +4.81792e-001 -data8 0x3fdefc9326d16ab8, 0x3c85081a1639a45c // log(1/frcpa(1+159/256))= +4.84166e-001 -data8 0x3fdf2391a21575f8, 0x3cbf11015bdd297a // log(1/frcpa(1+160/256))= +4.86546e-001 -data8 0x3fdf4aa7ee031928, 0x3cb3795bc052a2d1 // log(1/frcpa(1+161/256))= +4.88932e-001 -data8 0x3fdf71d627c30bb0, 0x3c35c61f0f5a88f3 // log(1/frcpa(1+162/256))= +4.91323e-001 -data8 0x3fdf991c6cb3b378, 0x3c97d99419be6028 // log(1/frcpa(1+163/256))= +4.93720e-001 -data8 0x3fdfc07ada69a908, 0x3cbfe9341ded70b1 // log(1/frcpa(1+164/256))= +4.96123e-001 -data8 0x3fdfe7f18eb03d38, 0x3cb85718a640c33f // log(1/frcpa(1+165/256))= +4.98532e-001 -data8 0x3fe007c053c5002c, 0x3cb3addc9c065f09 // log(1/frcpa(1+166/256))= +5.00946e-001 -data8 0x3fe01b942198a5a0, 0x3c9d5aa4c77da6ac // log(1/frcpa(1+167/256))= +5.03367e-001 -data8 0x3fe02f74400c64e8, 0x3cb5a0ee4450ef52 // log(1/frcpa(1+168/256))= +5.05793e-001 -data8 0x3fe04360be7603ac, 0x3c9dd00c35630fe0 // log(1/frcpa(1+169/256))= +5.08225e-001 -data8 0x3fe05759ac47fe30, 0x3cbd063e1f0bd82c // log(1/frcpa(1+170/256))= +5.10663e-001 -data8 0x3fe06b5f1911cf50, 0x3cae8da674af5289 // log(1/frcpa(1+171/256))= +5.13107e-001 -data8 0x3fe078bf0533c568, 0x3c62241edf5fd1f7 // log(1/frcpa(1+172/256))= +5.14740e-001 -data8 0x3fe08cd9687e7b0c, 0x3cb3007febcca227 // log(1/frcpa(1+173/256))= +5.17194e-001 -data8 0x3fe0a10074cf9018, 0x3ca496e84603816b // log(1/frcpa(1+174/256))= +5.19654e-001 -data8 0x3fe0b5343a234474, 0x3cb46098d14fc90a // log(1/frcpa(1+175/256))= +5.22120e-001 -data8 0x3fe0c974c89431cc, 0x3cac0a7cdcbb86c6 // log(1/frcpa(1+176/256))= +5.24592e-001 -data8 0x3fe0ddc2305b9884, 0x3cb2f753210410ff // log(1/frcpa(1+177/256))= +5.27070e-001 -data8 0x3fe0eb524bafc918, 0x3c88affd6682229e // log(1/frcpa(1+178/256))= +5.28726e-001 -data8 0x3fe0ffb54213a474, 0x3cadeefbab9af993 // log(1/frcpa(1+179/256))= +5.31214e-001 -data8 0x3fe114253da97d9c, 0x3cbaf1c2b8bc160a // log(1/frcpa(1+180/256))= +5.33709e-001 -data8 0x3fe128a24f1d9afc, 0x3cb9cf4df375e650 // log(1/frcpa(1+181/256))= +5.36210e-001 -data8 0x3fe1365252bf0864, 0x3c985a621d4be111 // log(1/frcpa(1+182/256))= +5.37881e-001 -data8 0x3fe14ae558b4a92c, 0x3ca104c4aa8977d1 // log(1/frcpa(1+183/256))= +5.40393e-001 -data8 0x3fe15f85a19c7658, 0x3cbadf26e540f375 // log(1/frcpa(1+184/256))= +5.42910e-001 -data8 0x3fe16d4d38c119f8, 0x3cb3aea11caec416 // log(1/frcpa(1+185/256))= +5.44592e-001 -data8 0x3fe18203c20dd130, 0x3cba82d1211d1d6d // log(1/frcpa(1+186/256))= +5.47121e-001 -data8 0x3fe196c7bc4b1f38, 0x3cb6267acc4f4f4a // log(1/frcpa(1+187/256))= +5.49656e-001 -data8 0x3fe1a4a738b7a33c, 0x3c858930213c987d // log(1/frcpa(1+188/256))= +5.51349e-001 -data8 0x3fe1b981c0c9653c, 0x3c9bc2a4a30f697b // log(1/frcpa(1+189/256))= +5.53895e-001 -data8 0x3fe1ce69e8bb1068, 0x3cb7ae6199cf2a00 // log(1/frcpa(1+190/256))= +5.56447e-001 -data8 0x3fe1dc619de06944, 0x3c6b50bb38388177 // log(1/frcpa(1+191/256))= +5.58152e-001 -data8 0x3fe1f160a2ad0da0, 0x3cbd05b2778a5e1d // log(1/frcpa(1+192/256))= +5.60715e-001 -data8 0x3fe2066d7740737c, 0x3cb32e828f9c6bd6 // log(1/frcpa(1+193/256))= +5.63285e-001 -data8 0x3fe2147dba47a390, 0x3cbd579851b8b672 // log(1/frcpa(1+194/256))= +5.65001e-001 -data8 0x3fe229a1bc5ebac0, 0x3cbb321be5237ce8 // log(1/frcpa(1+195/256))= +5.67582e-001 -data8 0x3fe237c1841a502c, 0x3cb3b56e0915ea64 // log(1/frcpa(1+196/256))= +5.69306e-001 -data8 0x3fe24cfce6f80d98, 0x3cb34a4d1a422919 // log(1/frcpa(1+197/256))= +5.71898e-001 -data8 0x3fe25b2c55cd5760, 0x3cb237401ea5015e // log(1/frcpa(1+198/256))= +5.73630e-001 -data8 0x3fe2707f4d5f7c40, 0x3c9d30f20acc8341 // log(1/frcpa(1+199/256))= +5.76233e-001 -data8 0x3fe285e0842ca380, 0x3cbc4d866d5f21c0 // log(1/frcpa(1+200/256))= +5.78842e-001 -data8 0x3fe294294708b770, 0x3cb85e14d5dc54fa // log(1/frcpa(1+201/256))= +5.80586e-001 -data8 0x3fe2a9a2670aff0c, 0x3c7e6f8f468bbf91 // log(1/frcpa(1+202/256))= +5.83207e-001 -data8 0x3fe2b7fb2c8d1cc0, 0x3c930ffcf63c8b65 // log(1/frcpa(1+203/256))= +5.84959e-001 -data8 0x3fe2c65a6395f5f4, 0x3ca0afe20b53d2d2 // log(1/frcpa(1+204/256))= +5.86713e-001 -data8 0x3fe2dbf557b0df40, 0x3cb646be1188fbc9 // log(1/frcpa(1+205/256))= +5.89350e-001 -data8 0x3fe2ea64c3f97654, 0x3c96516fa8df33b2 // log(1/frcpa(1+206/256))= +5.91113e-001 -data8 0x3fe3001823684d70, 0x3cb96d64e16d1360 // log(1/frcpa(1+207/256))= +5.93762e-001 -data8 0x3fe30e97e9a8b5cc, 0x3c98ef96bc97cca0 // log(1/frcpa(1+208/256))= +5.95531e-001 -data8 0x3fe32463ebdd34e8, 0x3caef1dc9a56c1bf // log(1/frcpa(1+209/256))= +5.98192e-001 -data8 0x3fe332f4314ad794, 0x3caa4f0ac5d5fa11 // log(1/frcpa(1+210/256))= +5.99970e-001 -data8 0x3fe348d90e7464cc, 0x3cbe7889f0516acd // log(1/frcpa(1+211/256))= +6.02643e-001 -data8 0x3fe35779f8c43d6c, 0x3ca96bbab7245411 // log(1/frcpa(1+212/256))= +6.04428e-001 -data8 0x3fe36621961a6a98, 0x3ca31f32262db9fb // log(1/frcpa(1+213/256))= +6.06217e-001 -data8 0x3fe37c299f3c3668, 0x3cb15c72c107ee29 // log(1/frcpa(1+214/256))= +6.08907e-001 -data8 0x3fe38ae2171976e4, 0x3cba42a2554b2dd4 // log(1/frcpa(1+215/256))= +6.10704e-001 -data8 0x3fe399a157a603e4, 0x3cb99c62286d8919 // log(1/frcpa(1+216/256))= +6.12504e-001 -data8 0x3fe3afccfe77b9d0, 0x3ca11048f96a43bd // log(1/frcpa(1+217/256))= +6.15210e-001 -data8 0x3fe3be9d503533b4, 0x3ca4022f47588c3e // log(1/frcpa(1+218/256))= +6.17018e-001 -data8 0x3fe3cd7480b4a8a0, 0x3cb4ba7afc2dc56a // log(1/frcpa(1+219/256))= +6.18830e-001 -data8 0x3fe3e3c43918f76c, 0x3c859673d064b8ba // log(1/frcpa(1+220/256))= +6.21554e-001 -data8 0x3fe3f2acb27ed6c4, 0x3cb55c6b452a16a8 // log(1/frcpa(1+221/256))= +6.23373e-001 -data8 0x3fe4019c2125ca90, 0x3cb8c367879c5a31 // log(1/frcpa(1+222/256))= +6.25197e-001 -data8 0x3fe4181061389720, 0x3cb2c17a79c5cc6c // log(1/frcpa(1+223/256))= +6.27937e-001 -data8 0x3fe42711518df544, 0x3ca5f38d47012fc5 // log(1/frcpa(1+224/256))= +6.29769e-001 -data8 0x3fe436194e12b6bc, 0x3cb9854d65a9b426 // log(1/frcpa(1+225/256))= +6.31604e-001 -data8 0x3fe445285d68ea68, 0x3ca3ff9b3a81cd81 // log(1/frcpa(1+226/256))= +6.33442e-001 -data8 0x3fe45bcc464c8938, 0x3cb0a2d8011a6c05 // log(1/frcpa(1+227/256))= +6.36206e-001 -data8 0x3fe46aed21f117fc, 0x3c8a2be41f8e9f3d // log(1/frcpa(1+228/256))= +6.38053e-001 -data8 0x3fe47a1527e8a2d0, 0x3cba4a83594fab09 // log(1/frcpa(1+229/256))= +6.39903e-001 -data8 0x3fe489445efffcc8, 0x3cbf306a23dcbcde // log(1/frcpa(1+230/256))= +6.41756e-001 -data8 0x3fe4a018bcb69834, 0x3ca46c9285029fd1 // log(1/frcpa(1+231/256))= +6.44543e-001 -data8 0x3fe4af5a0c9d65d4, 0x3cbbc1db897580e3 // log(1/frcpa(1+232/256))= +6.46405e-001 -data8 0x3fe4bea2a5bdbe84, 0x3cb84d880d7ef775 // log(1/frcpa(1+233/256))= +6.48271e-001 -data8 0x3fe4cdf28f10ac44, 0x3cb3ec4b7893ce1f // log(1/frcpa(1+234/256))= +6.50140e-001 -data8 0x3fe4dd49cf994058, 0x3c897224d59d3408 // log(1/frcpa(1+235/256))= +6.52013e-001 -data8 0x3fe4eca86e64a680, 0x3cbccf620f24f0cd // log(1/frcpa(1+236/256))= +6.53889e-001 -data8 0x3fe503c43cd8eb68, 0x3c3f872c65971084 // log(1/frcpa(1+237/256))= +6.56710e-001 -data8 0x3fe513356667fc54, 0x3cb9ca64cc3d52c8 // log(1/frcpa(1+238/256))= +6.58595e-001 -data8 0x3fe522ae0738a3d4, 0x3cbe708164c75968 // log(1/frcpa(1+239/256))= +6.60483e-001 -data8 0x3fe5322e26867854, 0x3cb9988ba4aea615 // log(1/frcpa(1+240/256))= +6.62376e-001 -data8 0x3fe541b5cb979808, 0x3ca1662e3a6b95f5 // log(1/frcpa(1+241/256))= +6.64271e-001 -data8 0x3fe55144fdbcbd60, 0x3cb3acd4ca45c1e0 // log(1/frcpa(1+242/256))= +6.66171e-001 -data8 0x3fe560dbc45153c4, 0x3cb4988947959fed // log(1/frcpa(1+243/256))= +6.68074e-001 -data8 0x3fe5707a26bb8c64, 0x3cb3017fe6607ba9 // log(1/frcpa(1+244/256))= +6.69980e-001 -data8 0x3fe587f60ed5b8fc, 0x3cbe7a3266366ed4 // log(1/frcpa(1+245/256))= +6.72847e-001 -data8 0x3fe597a7977c8f30, 0x3ca1e12b9959a90e // log(1/frcpa(1+246/256))= +6.74763e-001 -data8 0x3fe5a760d634bb88, 0x3cb7c365e53d9602 // log(1/frcpa(1+247/256))= +6.76682e-001 -data8 0x3fe5b721d295f10c, 0x3cb716c2551ccbf0 // log(1/frcpa(1+248/256))= +6.78605e-001 -data8 0x3fe5c6ea94431ef8, 0x3ca02b2ed0e28261 // log(1/frcpa(1+249/256))= +6.80532e-001 -data8 0x3fe5d6bb22ea86f4, 0x3caf43a8bbb2f974 // log(1/frcpa(1+250/256))= +6.82462e-001 -data8 0x3fe5e6938645d38c, 0x3cbcedc98821b333 // log(1/frcpa(1+251/256))= +6.84397e-001 -data8 0x3fe5f673c61a2ed0, 0x3caa385eef5f2789 // log(1/frcpa(1+252/256))= +6.86335e-001 -data8 0x3fe6065bea385924, 0x3cb11624f165c5b4 // log(1/frcpa(1+253/256))= +6.88276e-001 -data8 0x3fe6164bfa7cc068, 0x3cbad884f87073fa // log(1/frcpa(1+254/256))= +6.90222e-001 -data8 0x3fe62643fecf9740, 0x3cb78c51da12f4df // log(1/frcpa(1+255/256))= +6.92171e-001 -LOCAL_OBJECT_END(pow_Tt) - - -// Table 1 is 2^(index_1/128) where -// index_1 goes from 0 to 15 -LOCAL_OBJECT_START(pow_tbl1) -data8 0x8000000000000000 , 0x00003FFF -data8 0x80B1ED4FD999AB6C , 0x00003FFF -data8 0x8164D1F3BC030773 , 0x00003FFF -data8 0x8218AF4373FC25EC , 0x00003FFF -data8 0x82CD8698AC2BA1D7 , 0x00003FFF -data8 0x8383594EEFB6EE37 , 0x00003FFF -data8 0x843A28C3ACDE4046 , 0x00003FFF -data8 0x84F1F656379C1A29 , 0x00003FFF -data8 0x85AAC367CC487B15 , 0x00003FFF -data8 0x8664915B923FBA04 , 0x00003FFF -data8 0x871F61969E8D1010 , 0x00003FFF -data8 0x87DB357FF698D792 , 0x00003FFF -data8 0x88980E8092DA8527 , 0x00003FFF -data8 0x8955EE03618E5FDD , 0x00003FFF -data8 0x8A14D575496EFD9A , 0x00003FFF -data8 0x8AD4C6452C728924 , 0x00003FFF -LOCAL_OBJECT_END(pow_tbl1) - - -// Table 2 is 2^(index_1/8) where -// index_2 goes from 0 to 7 -LOCAL_OBJECT_START(pow_tbl2) -data8 0x8000000000000000 , 0x00003FFF -data8 0x8B95C1E3EA8BD6E7 , 0x00003FFF -data8 0x9837F0518DB8A96F , 0x00003FFF -data8 0xA5FED6A9B15138EA , 0x00003FFF -data8 0xB504F333F9DE6484 , 0x00003FFF -data8 0xC5672A115506DADD , 0x00003FFF -data8 0xD744FCCAD69D6AF4 , 0x00003FFF -data8 0xEAC0C6E7DD24392F , 0x00003FFF -LOCAL_OBJECT_END(pow_tbl2) - -.section .text -GLOBAL_LIBM_ENTRY(pow) - -// Get exponent of x. Will be used to calculate K. -{ .mfi - getf.exp pow_GR_signexp_X = f8 - fms.s1 POW_Xm1 = f8,f1,f1 // Will be used for r1 if x>0 - mov pow_GR_17ones = 0x1FFFF -} -{ .mfi - addl pow_AD_P = @ltoff(pow_table_P), gp - fma.s1 POW_Xp1 = f8,f1,f1 // Will be used for r1 if x<0 - nop.i 999 -;; -} - -// Get significand of x. Will be used to get index to fetch T, Tt. -{ .mfi - getf.sig pow_GR_sig_X = f8 - frcpa.s1 POW_B, p6 = f1,f8 - nop.i 999 -} -{ .mfi - ld8 pow_AD_P = [pow_AD_P] - fma.s1 POW_NORM_X = f8,f1,f0 - mov pow_GR_exp_2tom8 = 0xFFF7 -} -;; - -// p13 = TRUE ==> X is unorm -// DOUBLE 0x10033 exponent limit at which y is an integer -{ .mfi - nop.m 999 - fclass.m p13,p0 = f8, 0x0b // Test for x unorm - addl pow_GR_10033 = 0x10033, r0 -} -{ .mfi - mov pow_GR_16ones = 0xFFFF - fma.s1 POW_NORM_Y = f9,f1,f0 - nop.i 999 -} -;; - -// p14 = TRUE ==> X is ZERO -{ .mfi - adds pow_AD_Tt = pow_Tt - pow_table_P, pow_AD_P - fclass.m p14,p0 = f8, 0x07 - and pow_GR_exp_X = pow_GR_signexp_X, pow_GR_17ones -} -{ .mfi - adds pow_AD_Q = pow_table_Q - pow_table_P, pow_AD_P - nop.f 999 - nop.i 999 -} -;; - -{ .mfi - ldfe POW_P5 = [pow_AD_P], 16 - fcmp.lt.s1 p8,p9 = f8, f0 // Test for x<0 - nop.i 999 -} -{ .mib - ldfe POW_P4 = [pow_AD_Q], 16 - sub pow_GR_true_exp_X = pow_GR_exp_X, pow_GR_16ones -(p13) br.cond.spnt POW_X_DENORM -} -;; - -// Continue normal and denormal paths here -POW_COMMON: -// p11 = TRUE ==> Y is a NAN -{ .mfi - ldfe POW_P3 = [pow_AD_P], 16 - fclass.m p11,p0 = f9, 0xc3 - nop.i 999 -} -{ .mfi - ldfe POW_P2 = [pow_AD_Q], 16 - nop.f 999 - mov pow_GR_y_zero = 0 -} -;; - -// Note POW_Xm1 and POW_r1 are used interchangably -{ .mfi - alloc r32=ar.pfs,2,19,4,0 - fms.s1 POW_r = POW_B, POW_NORM_X,f1 - nop.i 999 -} -{ .mfi - setf.sig POW_int_K = pow_GR_true_exp_X -(p8) fnma.s1 POW_Xm1 = POW_Xp1,f1,f0 - nop.i 999 -} -;; - -// p12 = TRUE if Y is ZERO -// Compute xsq to decide later if |x|=1 -{ .mfi - ldfe POW_P1 = [pow_AD_P], 16 - fclass.m p12,p0 = f9, 0x07 - shl pow_GR_offset = pow_GR_sig_X, 1 -} -{ .mfb - ldfe POW_P0 = [pow_AD_Q], 16 - fma.s1 POW_xsq = POW_NORM_X, POW_NORM_X, f0 -(p11) br.cond.spnt POW_Y_NAN // Branch if y=nan -} -;; - -// Get exponent of |x|-1 to use in comparison to 2^-8 -{ .mfi - getf.exp pow_GR_signexp_Xm1 = POW_Xm1 - fcvt.fx.s1 POW_int_Y = POW_NORM_Y - shr.u pow_GR_offset = pow_GR_offset,56 -} -;; - -// p11 = TRUE ==> X is a NAN -{ .mfi - ldfpd POW_log2_hi, POW_log2_lo = [pow_AD_Q], 16 - fclass.m p11,p0 = f8, 0xc3 - shladd pow_AD_Tt = pow_GR_offset, 4, pow_AD_Tt -} -{ .mfi - ldfe POW_inv_log2_by_128 = [pow_AD_P], 16 - fma.s1 POW_delta = f0,f0,f0 // delta=0 in case |x| near 1 -(p12) mov pow_GR_y_zero = 1 -} -;; - -{ .mfi - ldfpd POW_Q2, POW_Q3 = [pow_AD_P], 16 - fma.s1 POW_G = f0,f0,f0 // G=0 in case |x| near 1 - and pow_GR_exp_Xm1 = pow_GR_signexp_Xm1, pow_GR_17ones -} -;; - -// Determine if we will use the |x| near 1 path (p6) or normal path (p7) -{ .mfi - getf.exp pow_GR_signexp_Y = POW_NORM_Y - nop.f 999 - cmp.lt p6,p7 = pow_GR_exp_Xm1, pow_GR_exp_2tom8 -} -{ .mfb - ldfpd POW_T, POW_Tt = [pow_AD_Tt], 16 - fma.s1 POW_rsq = POW_r, POW_r,f0 -(p11) br.cond.spnt POW_X_NAN // Branch if x=nan and y not nan -} -;; - -// If on the x near 1 path, assign r1 to r and r1*r1 to rsq -{ .mfi - ldfpd POW_Q0_half, POW_Q1 = [pow_AD_P], 16 -(p6) fma.s1 POW_r = POW_r1, f1, f0 - nop.i 999 -} -{ .mfb - nop.m 999 -(p6) fma.s1 POW_rsq = POW_r1, POW_r1, f0 -(p14) br.cond.spnt POW_X_0 // Branch if x zero and y not nan -} -;; - -{ .mfi - ldfpd POW_Q4, POW_RSHF = [pow_AD_P], 16 -(p7) fma.s1 POW_v6 = POW_r, POW_P5, POW_P4 - nop.i 999 -} -{ .mfi - mov pow_GR_exp_2toM63 = 0xffc0 // Exponent of 2^-63 -(p6) fma.s1 POW_v6 = POW_r1, POW_P5, POW_P4 - nop.i 999 -} -;; - -{ .mfi - setf.exp POW_2toM63 = pow_GR_exp_2toM63 // Form 2^-63 for test of q -(p7) fma.s1 POW_v4 = POW_P3, POW_r, POW_P2 - nop.i 999 -} -{ .mfi - nop.m 999 -(p6) fma.s1 POW_v4 = POW_P3, POW_r1, POW_P2 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fcvt.xf POW_K = POW_int_K - nop.i 999 -} -;; - -{ .mfi - getf.sig pow_GR_sig_int_Y = POW_int_Y - fnma.s1 POW_twoV = POW_NORM_Y, POW_rsq,f0 - and pow_GR_exp_Y = pow_GR_signexp_Y, pow_GR_17ones -} -{ .mfb - andcm pow_GR_sign_Y = pow_GR_signexp_Y, pow_GR_17ones - fma.s1 POW_U = POW_NORM_Y,POW_r,f0 -(p12) br.cond.spnt POW_Y_0 // Branch if y=zero, x not zero or nan -} -;; - -// p11 = TRUE ==> X is NEGATIVE but not inf -{ .mfi - ldfe POW_log2_by_128_lo = [pow_AD_P], 16 - fclass.m p11,p0 = f8, 0x1a - nop.i 999 -} -{ .mfi - ldfe POW_log2_by_128_hi = [pow_AD_Q], 16 - fma.s1 POW_v2 = POW_P1, POW_r, POW_P0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fcvt.xf POW_float_int_Y = POW_int_Y - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_v3 = POW_v6, POW_rsq, POW_v4 - adds pow_AD_tbl1 = pow_tbl1 - pow_Tt, pow_AD_Q -} -;; - -{ .mfi - nop.m 999 -(p7) fma.s1 POW_delta = POW_K, POW_log2_lo, POW_Tt - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fma.s1 POW_G = POW_K, POW_log2_hi, POW_T - adds pow_AD_tbl2 = pow_tbl2 - pow_tbl1, pow_AD_tbl1 -} -;; - -{ .mfi - nop.m 999 - fms.s1 POW_e2 = POW_NORM_Y, POW_r, POW_U - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_Z2 = POW_twoV, POW_Q0_half, POW_U - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 POW_Yrcub = POW_rsq, POW_U, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_p = POW_rsq, POW_v3, POW_v2 - nop.i 999 -} -;; - -// p11 = TRUE ==> X is NEGATIVE but not inf -// p12 = TRUE ==> X is NEGATIVE AND Y already even int -// p13 = TRUE ==> X is NEGATIVE AND Y possible int -{ .mfi - nop.m 999 - fma.s1 POW_Z1 = POW_NORM_Y, POW_G, f0 -(p11) cmp.gt.unc p12,p13 = pow_GR_exp_Y, pow_GR_10033 -} -{ .mfi - nop.m 999 - fma.s1 POW_Gpr = POW_G, f1, POW_r - nop.i 999 -} -;; - -// By adding RSHF (1.1000...*2^63) we put integer part in rightmost significand -{ .mfi - nop.m 999 - fma.s1 POW_W2 = POW_Z2, POW_inv_log2_by_128, POW_RSHF - nop.i 999 -} -{ .mfi - nop.m 999 - fms.s1 POW_UmZ2 = POW_U, f1, POW_Z2 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 POW_e3 = POW_NORM_Y, POW_delta, f0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 POW_Z3 = POW_p, POW_Yrcub, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_GY_Z2 = POW_G, POW_NORM_Y, POW_Z2 - nop.i 999 -} -;; - -// By adding RSHF (1.1000...*2^63) we put integer part in rightmost significand -{ .mfi - nop.m 999 - fms.s1 POW_e1 = POW_NORM_Y, POW_G, POW_Z1 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_W1 = POW_Z1, POW_inv_log2_by_128, POW_RSHF - nop.i 999 -} -;; - -// p13 = TRUE ==> X is NEGATIVE AND Y possible int -// p10 = TRUE ==> X is NEG and Y is an int -// p12 = TRUE ==> X is NEG and Y is not an int -{ .mfi - nop.m 999 -(p13) fcmp.eq.unc.s1 p10,p12 = POW_float_int_Y, POW_NORM_Y - mov pow_GR_xneg_yodd = 0 -} -{ .mfi - nop.m 999 - fma.s1 POW_Y_Gpr = POW_NORM_Y, POW_Gpr, f0 - nop.i 999 -} -;; - -// By subtracting RSHF we get rounded integer POW_N2float -{ .mfi - nop.m 999 - fms.s1 POW_N2float = POW_W2, f1, POW_RSHF - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_UmZ2pV = POW_twoV,POW_Q0_half,POW_UmZ2 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 POW_Z3sq = POW_Z3, POW_Z3, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_v4 = POW_Z3, POW_Q3, POW_Q2 - nop.i 999 -} -;; - -// Extract rounded integer from rightmost significand of POW_W2 -// By subtracting RSHF we get rounded integer POW_N1float -{ .mfi - getf.sig pow_GR_int_W2 = POW_W2 - fms.s1 POW_N1float = POW_W1, f1, POW_RSHF - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_v2 = POW_Z3, POW_Q1, POW_Q0_half - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fnma.s1 POW_s2 = POW_N2float, POW_log2_by_128_hi, POW_Z2 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_e2 = POW_e2,f1,POW_UmZ2pV - nop.i 999 -} -;; - -// Extract rounded integer from rightmost significand of POW_W1 -// Test if x inf -{ .mfi - getf.sig pow_GR_int_W1 = POW_W1 - fclass.m p15,p0 = POW_NORM_X, 0x23 - nop.i 999 -} -{ .mfb - nop.m 999 - fnma.s1 POW_f2 = POW_N2float, POW_log2_by_128_lo, f1 -(p12) br.cond.spnt POW_X_NEG_Y_NONINT // Branch if x neg, y not integer -} -;; - -// p11 = TRUE ==> X is +1.0 -// p12 = TRUE ==> X is NEGATIVE AND Y is an odd integer -{ .mfi - getf.exp pow_GR_signexp_Y_Gpr = POW_Y_Gpr - fcmp.eq.s1 p11,p0 = POW_NORM_X, f1 -(p10) tbit.nz.unc p12,p0 = pow_GR_sig_int_Y,0 -} -{ .mfi - nop.m 999 - fma.s1 POW_v3 = POW_Z3sq, POW_Q4, POW_v4 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fnma.s1 POW_f1 = POW_N1float, POW_log2_by_128_lo, f1 - nop.i 999 -} -{ .mfb - nop.m 999 - fnma.s1 POW_s1 = POW_N1float, POW_log2_by_128_hi, POW_Z1 -(p15) br.cond.spnt POW_X_INF -} -;; - -// Test x and y and flag denormal -{ .mfi - nop.m 999 - fcmp.eq.s0 p15,p0 = f8,f9 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_pYrcub_e3 = POW_p, POW_Yrcub, POW_e3 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fcmp.eq.s1 p7,p0 = POW_NORM_Y, f1 // Test for y=1.0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_e12 = POW_e1,f1,POW_e2 - nop.i 999 -} -;; - -{ .mfi - add pow_GR_int_N = pow_GR_int_W1, pow_GR_int_W2 -(p11) fma.d.s0 f8 = f1,f1,f0 // If x=1, result is +1 - nop.i 999 -} -{ .mib -(p12) mov pow_GR_xneg_yodd = 1 - nop.i 999 -(p11) br.ret.spnt b0 // Early exit if x=1.0, result is +1 -} -;; - -{ .mfi - and pow_GR_index1 = 0x0f, pow_GR_int_N - fma.s1 POW_q = POW_Z3sq, POW_v3, POW_v2 - shr pow_int_GR_M = pow_GR_int_N, 7 // M = N/128 -} -{ .mib - and pow_GR_index2 = 0x70, pow_GR_int_N - cmp.eq p6, p0 = pow_GR_xneg_yodd, r0 -(p7) br.ret.spnt b0 // Early exit if y=1.0, result is x -} -;; - -{ .mfi - shladd pow_AD_T1 = pow_GR_index1, 4, pow_AD_tbl1 - fma.s1 POW_s = POW_s1, f1, POW_s2 - add pow_int_GR_M = pow_GR_16ones, pow_int_GR_M -} -{ .mfi - add pow_AD_T2 = pow_AD_tbl2, pow_GR_index2 - fma.s1 POW_f12 = POW_f1, POW_f2,f0 - and pow_GR_exp_Y_Gpr = pow_GR_signexp_Y_Gpr, pow_GR_17ones -} -;; - -{ .mmi - ldfe POW_T1 = [pow_AD_T1] - ldfe POW_T2 = [pow_AD_T2] - sub pow_GR_true_exp_Y_Gpr = pow_GR_exp_Y_Gpr, pow_GR_16ones -} -;; - -{ .mfi - setf.exp POW_2M = pow_int_GR_M - fma.s1 POW_e123 = POW_e12, f1, POW_e3 - nop.i 999 -} -{ .mfb -(p6) cmp.gt p6, p0 = -11, pow_GR_true_exp_Y_Gpr - fma.s1 POW_d = POW_GY_Z2, f1, POW_pYrcub_e3 -(p6) br.cond.spnt POW_NEAR_ONE // branch if |y*log(x)| < 2^(-11) -} -;; - -{ .mfi - nop.m 999 - fma.s1 POW_q = POW_Z3sq, POW_q, POW_Z3 - nop.i 999 -} -;; - -// p8 TRUE ==> |Y(G + r)| >= 10 - -// double -// -2^10 -2^9 2^9 2^10 -// -----+-----+----+ ... +-----+-----+----- -// p8 | p9 | p8 -// | | p10 | | - -// Form signexp of constants to indicate overflow -{ .mfi - mov pow_GR_big_pos = 0x103ff - fma.s1 POW_ssq = POW_s, POW_s, f0 - cmp.le p8,p9 = 10, pow_GR_true_exp_Y_Gpr -} -{ .mfi - mov pow_GR_big_neg = 0x303ff - fma.s1 POW_v4 = POW_s, POW_Q3, POW_Q2 - andcm pow_GR_sign_Y_Gpr = pow_GR_signexp_Y_Gpr, pow_GR_17ones -} -;; - -// Form big positive and negative constants to test for possible overflow -{ .mfi - setf.exp POW_big_pos = pow_GR_big_pos - fma.s1 POW_v2 = POW_s, POW_Q1, POW_Q0_half -(p9) cmp.le.unc p0,p10 = 9, pow_GR_true_exp_Y_Gpr -} -{ .mfb - setf.exp POW_big_neg = pow_GR_big_neg - fma.s1 POW_1ps = f1,f1,POW_s -(p8) br.cond.spnt POW_OVER_UNDER_X_NOT_INF -} -;; - -// f123 = f12*(e123+1) = f12*e123+f12 -{ .mfi - nop.m 999 - fma.s1 POW_f123 = POW_e123,POW_f12,POW_f12 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 POW_T1T2 = POW_T1, POW_T2, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_v3 = POW_ssq, POW_Q4, POW_v4 - cmp.ne p12,p13 = pow_GR_xneg_yodd, r0 -} -;; - -{ .mfi - nop.m 999 - fma.s1 POW_v21ps = POW_ssq, POW_v2, POW_1ps - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_s4 = POW_ssq, POW_ssq, f0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p12) fnma.s1 POW_A = POW_2M, POW_f123, f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p13) fma.s1 POW_A = POW_2M, POW_f123, f0 - cmp.eq p14,p11 = r0,r0 // Initialize p14 on, p11 off -} -;; - -{ .mfi - nop.m 999 - fmerge.s POW_abs_q = f0, POW_q // Form |q| so can test its size - nop.i 999 -} -;; - -{ .mfi -(p10) cmp.eq p0,p14 = r0,r0 // Turn off p14 if no overflow - fma.s1 POW_es = POW_s4, POW_v3, POW_v21ps - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_A = POW_A, POW_T1T2, f0 - nop.i 999 -} -;; - -{ .mfi -// Test for |q| < 2^-63. If so then reverse last two steps of the result -// to avoid monotonicity problems for results near 1.0 in round up/down/zero. -// p11 will be set if need to reverse the order, p14 if not. - nop.m 999 -(p10) fcmp.lt.s0 p11,p14 = POW_abs_q, POW_2toM63 // Test |q| <2^-63 - nop.i 999 -} -;; - -.pred.rel "mutex",p11,p14 -{ .mfi - nop.m 999 -(p14) fma.s1 POW_A = POW_A, POW_es, f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fma.s1 POW_A = POW_A, POW_q, POW_A - nop.i 999 -} -;; - -// Dummy op to set inexact if |q| < 2^-63 -{ .mfi - nop.m 999 -(p11) fma.d.s0 POW_tmp = POW_A, POW_q, POW_A - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p14) fma.d.s0 f8 = POW_A, POW_q, POW_A - nop.i 999 -} -{ .mfb - nop.m 999 -(p11) fma.d.s0 f8 = POW_A, POW_es, f0 -(p10) br.ret.sptk b0 // Exit main branch if no over/underflow -} -;; - -// POSSIBLE_OVER_UNDER -// p6 = TRUE ==> Y_Gpr negative -// Result is already computed. We just need to know if over/underflow occurred. - -{ .mfb - cmp.eq p0,p6 = pow_GR_sign_Y_Gpr, r0 - nop.f 999 -(p6) br.cond.spnt POW_POSSIBLE_UNDER -} -;; - -// POSSIBLE_OVER -// We got an answer. -// overflow is a possibility, not a certainty - - -// We define an overflow when the answer with -// WRE set -// user-defined rounding mode - -// double -// Largest double is 7FE (biased double) -// 7FE - 3FF + FFFF = 103FE -// Create + largest_double_plus_ulp -// Create - largest_double_plus_ulp -// Calculate answer with WRE set. - -// single -// Largest single is FE (biased double) -// FE - 7F + FFFF = 1007E -// Create + largest_single_plus_ulp -// Create - largest_single_plus_ulp -// Calculate answer with WRE set. - -// Cases when answer is ldn+1 are as follows: -// ldn ldn+1 -// --+----------|----------+------------ -// | -// +inf +inf -inf -// RN RN -// RZ - -// Put in s2 (td set, wre set) -{ .mfi - nop.m 999 - fsetc.s2 0x7F,0x42 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.d.s2 POW_wre_urm_f8 = POW_A, POW_q, POW_A - nop.i 999 -} -;; - -// Return s2 to default -{ .mfi - nop.m 999 - fsetc.s2 0x7F,0x40 - nop.i 999 -} -;; - -// p7 = TRUE ==> yes, we have an overflow -{ .mfi - nop.m 999 - fcmp.ge.s1 p7, p8 = POW_wre_urm_f8, POW_big_pos - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fcmp.le.s1 p7, p0 = POW_wre_urm_f8, POW_big_neg - nop.i 999 -} -;; - -{ .mbb -(p7) mov pow_GR_tag = 24 -(p7) br.cond.spnt __libm_error_region // Branch if overflow - br.ret.sptk b0 // Exit if did not overflow -} -;; - -// Here if |y*log(x)| < 2^(-11) -// pow(x,y) ~ exp(d) ~ 1 + d + 0.5*d^2 + Q1*d^3 + Q2*d^4, where d = y*log(x) -.align 32 -POW_NEAR_ONE: - -{ .mfi - nop.m 999 - fma.s1 POW_d2 = POW_d, POW_d, f0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 POW_poly_d_hi = POW_d, POW_Q0_half, f1 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_poly_d_lo = POW_d, POW_Q2, POW_Q1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 POW_poly_d = POW_d2, POW_poly_d_lo, POW_poly_d_hi - nop.i 999 -} -;; - -{ .mfb - nop.m 999 - fma.d.s0 f8 = POW_d, POW_poly_d, f1 - br.ret.sptk b0 // exit function for arguments |y*log(x)| < 2^(-11) -} -;; - -POW_POSSIBLE_UNDER: -// We got an answer. input was < -2^9 but > -2^10 (double) -// We got an answer. input was < -2^6 but > -2^7 (float) -// underflow is a possibility, not a certainty - -// We define an underflow when the answer with -// ftz set -// is zero (tiny numbers become zero) -// Notice (from below) that if we have an unlimited exponent range, -// then there is an extra machine number E between the largest denormal and -// the smallest normal. -// So if with unbounded exponent we round to E or below, then we are -// tiny and underflow has occurred. -// But notice that you can be in a situation where we are tiny, namely -// rounded to E, but when the exponent is bounded we round to smallest -// normal. So the answer can be the smallest normal with underflow. -// E -// -----+--------------------+--------------------+----- -// | | | -// 1.1...10 2^-3fff 1.1...11 2^-3fff 1.0...00 2^-3ffe -// 0.1...11 2^-3ffe (biased, 1) -// largest dn smallest normal - -// Put in s2 (td set, ftz set) -{ .mfi - nop.m 999 - fsetc.s2 0x7F,0x41 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.d.s2 POW_ftz_urm_f8 = POW_A, POW_q, POW_A - nop.i 999 -} -;; - -// Return s2 to default -{ .mfi - nop.m 999 - fsetc.s2 0x7F,0x40 - nop.i 999 -} -;; - -// p7 = TRUE ==> yes, we have an underflow -{ .mfi - nop.m 999 - fcmp.eq.s1 p7, p0 = POW_ftz_urm_f8, f0 - nop.i 999 -} -;; - -{ .mbb -(p7) mov pow_GR_tag = 25 -(p7) br.cond.spnt __libm_error_region // Branch if underflow - br.ret.sptk b0 // Exit if did not underflow -} -;; - -POW_X_DENORM: -// Here if x unorm. Use the NORM_X for getf instructions, and then back -// to normal path -{ .mfi - getf.exp pow_GR_signexp_X = POW_NORM_X - nop.f 999 - nop.i 999 -} -;; - -{ .mmi - getf.sig pow_GR_sig_X = POW_NORM_X -;; - and pow_GR_exp_X = pow_GR_signexp_X, pow_GR_17ones - nop.i 999 -} -;; - -{ .mib - sub pow_GR_true_exp_X = pow_GR_exp_X, pow_GR_16ones - nop.i 999 - br.cond.sptk POW_COMMON -} -;; - -POW_X_0: -// Here if x=0 and y not nan -// -// We have the following cases: -// p6 x=0 and y>0 and is an integer (may be even or odd) -// p7 x=0 and y>0 and is NOT an integer, return +0 -// p8 x=0 and y>0 and so big as to always be an even integer, return +0 -// p9 x=0 and y>0 and may not be integer -// p10 x=0 and y>0 and is an odd integer, return x -// p11 x=0 and y>0 and is an even integer, return +0 -// p12 used in dummy fcmp to set denormal flag if y=unorm -// p13 x=0 and y>0 -// p14 x=0 and y=0, branch to code for calling error handling -// p15 x=0 and y<0, branch to code for calling error handling -// -{ .mfi - getf.sig pow_GR_sig_int_Y = POW_int_Y // Get signif of int_Y - fcmp.lt.s1 p15,p13 = f9, f0 // Test for y<0 - and pow_GR_exp_Y = pow_GR_signexp_Y, pow_GR_17ones -} -{ .mfb - cmp.ne p14,p0 = pow_GR_y_zero,r0 // Test for y=0 - fcvt.xf POW_float_int_Y = POW_int_Y -(p14) br.cond.spnt POW_X_0_Y_0 // Branch if x=0 and y=0 -} -;; - -// If x=0 and y>0, test y and flag denormal -{ .mfb -(p13) cmp.gt.unc p8,p9 = pow_GR_exp_Y, pow_GR_10033 // Test y +big = even int -(p13) fcmp.eq.s0 p12,p0 = f9,f0 // If x=0, y>0 dummy op to flag denormal -(p15) br.cond.spnt POW_X_0_Y_NEG // Branch if x=0 and y<0 -} -;; - -// Here if x=0 and y>0 -{ .mfi - nop.m 999 -(p9) fcmp.eq.unc.s1 p6,p7 = POW_float_int_Y, POW_NORM_Y // Test y=int - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.d.s0 f8 = f0,f0,f0 // If x=0, y>0 and large even int, return +0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p7) fma.d.s0 f8 = f0,f0,f0 // Result +0 if x=0 and y>0 and not integer -(p6) tbit.nz.unc p10,p11 = pow_GR_sig_int_Y,0 // If y>0 int, test y even/odd -} -;; - -// Note if x=0, y>0 and odd integer, just return x -{ .mfb - nop.m 999 -(p11) fma.d.s0 f8 = f0,f0,f0 // Result +0 if x=0 and y even integer - br.ret.sptk b0 // Exit if x=0 and y>0 -} -;; - -POW_X_0_Y_0: -// When X is +-0 and Y is +-0, IEEE returns 1.0 -// We call error support with this value - -{ .mfb - mov pow_GR_tag = 26 - fma.d.s0 f8 = f1,f1,f0 - br.cond.sptk __libm_error_region -} -;; - -POW_X_0_Y_NEG: -// When X is +-0 and Y is negative, IEEE returns -// X Y answer -// +0 -odd int +inf -// -0 -odd int -inf - -// +0 !-odd int +inf -// -0 !-odd int +inf - -// p6 == Y is a floating point number outside the integer. -// Hence it is an integer and is even. -// return +inf - -// p7 == Y is a floating point number within the integer range. -// p9 == (int_Y = NORM_Y), Y is an integer, which may be odd or even. -// p11 odd -// return (sign_of_x)inf -// p12 even -// return +inf -// p10 == Y is not an integer -// return +inf -// - -{ .mfi - nop.m 999 - nop.f 999 - cmp.gt p6,p7 = pow_GR_exp_Y, pow_GR_10033 -} -;; - -{ .mfi - mov pow_GR_tag = 27 -(p7) fcmp.eq.unc.s1 p9,p10 = POW_float_int_Y, POW_NORM_Y - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p6) frcpa.s0 f8,p13 = f1, f0 -(p6) br.cond.sptk __libm_error_region // x=0, y<0, y large neg int -} -;; - -{ .mfb - nop.m 999 -(p10) frcpa.s0 f8,p13 = f1, f0 -(p10) br.cond.sptk __libm_error_region // x=0, y<0, y not int -} -;; - -// x=0, y<0, y an int -{ .mib - nop.m 999 -(p9) tbit.nz.unc p11,p12 = pow_GR_sig_int_Y,0 - nop.b 999 -} -;; - -{ .mfi - nop.m 999 -(p12) frcpa.s0 f8,p13 = f1,f0 - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p11) frcpa.s0 f8,p13 = f1,f8 - br.cond.sptk __libm_error_region -} -;; - - -POW_Y_0: -// Here for y zero, x anything but zero and nan -// Set flag if x denormal -// Result is +1.0 -{ .mfi - nop.m 999 - fcmp.eq.s0 p6,p0 = f8,f0 // Sets flag if x denormal - nop.i 999 -} -{ .mfb - nop.m 999 - fma.d.s0 f8 = f1,f1,f0 - br.ret.sptk b0 -} -;; - - -POW_X_INF: -// Here when X is +-inf - -// X +inf Y +inf +inf -// X -inf Y +inf +inf - -// X +inf Y >0 +inf -// X -inf Y >0, !odd integer +inf <== (-inf)^0.5 = +inf !! -// X -inf Y >0, odd integer -inf - -// X +inf Y -inf +0 -// X -inf Y -inf +0 - -// X +inf Y <0 +0 -// X -inf Y <0, !odd integer +0 -// X -inf Y <0, odd integer -0 - -// X + inf Y=+0 +1 -// X + inf Y=-0 +1 -// X - inf Y=+0 +1 -// X - inf Y=-0 +1 - -// p13 == Y negative -// p14 == Y positive - -// p6 == Y is a floating point number outside the integer. -// Hence it is an integer and is even. -// p13 == (Y negative) -// return +inf -// p14 == (Y positive) -// return +0 - -// p7 == Y is a floating point number within the integer range. -// p9 == (int_Y = NORM_Y), Y is an integer, which may be odd or even. -// p11 odd -// p13 == (Y negative) -// return (sign_of_x)inf -// p14 == (Y positive) -// return (sign_of_x)0 -// pxx even -// p13 == (Y negative) -// return +inf -// p14 == (Y positive) -// return +0 - -// pxx == Y is not an integer -// p13 == (Y negative) -// return +inf -// p14 == (Y positive) -// return +0 -// - -// If x=inf, test y and flag denormal -{ .mfi - nop.m 999 - fcmp.eq.s0 p10,p11 = f9,f0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fcmp.lt.s0 p13,p14 = POW_NORM_Y,f0 - cmp.gt p6,p7 = pow_GR_exp_Y, pow_GR_10033 -} -{ .mfi - nop.m 999 - fclass.m p12,p0 = f9, 0x23 //@inf - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p15,p0 = f9, 0x07 //@zero - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p15) fmerge.s f8 = f1,f1 // Return +1.0 if x=inf, y=0 -(p15) br.ret.spnt b0 // Exit if x=inf, y=0 -} -;; - -{ .mfi - nop.m 999 -(p14) frcpa.s1 f8,p10 = f1,f0 // If x=inf, y>0, assume result +inf - nop.i 999 -} -{ .mfb - nop.m 999 -(p13) fma.d.s0 f8 = f0,f0,f0 // If x=inf, y<0, assume result +0.0 -(p12) br.ret.spnt b0 // Exit if x=inf, y=inf -} -;; - -// Here if x=inf, and 0 < |y| < inf. Need to correct results if y odd integer. -{ .mfi - nop.m 999 -(p7) fcmp.eq.unc.s1 p9,p0 = POW_float_int_Y, POW_NORM_Y // Is y integer? - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - nop.f 999 -(p9) tbit.nz.unc p11,p0 = pow_GR_sig_int_Y,0 // Test for y odd integer -} -;; - -{ .mfb - nop.m 999 -(p11) fmerge.s f8 = POW_NORM_X,f8 // If y odd integer use sign of x - br.ret.sptk b0 // Exit for x=inf, 0 < |y| < inf -} -;; - - -POW_X_NEG_Y_NONINT: -// When X is negative and Y is a non-integer, IEEE -// returns a qnan indefinite. -// We call error support with this value - -{ .mfb - mov pow_GR_tag = 28 - frcpa.s0 f8,p6 = f0,f0 - br.cond.sptk __libm_error_region -} -;; - -POW_X_NAN: -// Here if x=nan, y not nan -{ .mfi - nop.m 999 - fclass.m p9,p13 = f9, 0x07 // Test y=zero - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p13) fma.d.s0 f8 = f8,f1,f0 -(p13) br.ret.sptk b0 // Exit if x nan, y anything but zero or nan -} -;; - -POW_X_NAN_Y_0: -// When X is a NAN and Y is zero, IEEE returns 1. -// We call error support with this value. -{ .mfi - nop.m 999 - fcmp.eq.s0 p6,p0 = f8,f0 // Dummy op to set invalid on snan - nop.i 999 -} -{ .mfb - mov pow_GR_tag = 29 - fma.d.s0 f8 = f0,f0,f1 - br.cond.sptk __libm_error_region -} -;; - - -POW_OVER_UNDER_X_NOT_INF: - -// p8 is TRUE for overflow -// p9 is TRUE for underflow - -// if y is infinity, we should not over/underflow - -{ .mfi - nop.m 999 - fcmp.eq.s1 p14, p13 = POW_xsq,f1 // Test |x|=1 - cmp.eq p8,p9 = pow_GR_sign_Y_Gpr, r0 -} -;; - -{ .mfi - nop.m 999 -(p14) fclass.m.unc p15, p0 = f9, 0x23 // If |x|=1, test y=inf - nop.i 999 -} -{ .mfi - nop.m 999 -(p13) fclass.m.unc p11,p0 = f9, 0x23 // If |x| not 1, test y=inf - nop.i 999 -} -;; - -// p15 = TRUE if |x|=1, y=inf, return +1 -{ .mfb - nop.m 999 -(p15) fma.d.s0 f8 = f1,f1,f0 // If |x|=1, y=inf, result +1 -(p15) br.ret.spnt b0 // Exit if |x|=1, y=inf -} -;; - -.pred.rel "mutex",p8,p9 -{ .mfb -(p8) setf.exp f8 = pow_GR_17ones // If exp(+big), result inf -(p9) fmerge.s f8 = f0,f0 // If exp(-big), result 0 -(p11) br.ret.sptk b0 // Exit if |x| not 1, y=inf -} -;; - -{ .mfb - nop.m 999 - nop.f 999 - br.cond.sptk POW_OVER_UNDER_ERROR // Branch if y not inf -} -;; - - -POW_Y_NAN: -// Here if y=nan, x anything -// If x = +1 then result is +1, else result is quiet Y -{ .mfi - nop.m 999 - fcmp.eq.s1 p10,p9 = POW_NORM_X, f1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p10) fcmp.eq.s0 p6,p0 = f9,f1 // Set invalid, even if x=+1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p10) fma.d.s0 f8 = f1,f1,f0 - nop.i 999 -} -{ .mfb - nop.m 999 -(p9) fma.d.s0 f8 = f9,f8,f0 - br.ret.sptk b0 // Exit y=nan -} -;; - - -POW_OVER_UNDER_ERROR: -// Here if we have overflow or underflow. -// Enter with p12 true if x negative and y odd int to force -0 or -inf - -{ .mfi - sub pow_GR_17ones_m1 = pow_GR_17ones, r0, 1 - nop.f 999 - mov pow_GR_one = 0x1 -} -;; - -// overflow, force inf with O flag -{ .mmb -(p8) mov pow_GR_tag = 24 -(p8) setf.exp POW_tmp = pow_GR_17ones_m1 - nop.b 999 -} -;; - -// underflow, force zero with I, U flags -{ .mmi -(p9) mov pow_GR_tag = 25 -(p9) setf.exp POW_tmp = pow_GR_one - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.d.s0 f8 = POW_tmp, POW_tmp, f0 - nop.i 999 -} -;; - -// p12 x is negative and y is an odd integer, change sign of result -{ .mfi - nop.m 999 -(p12) fnma.d.s0 f8 = POW_tmp, POW_tmp, f0 - nop.i 999 -} -;; - -GLOBAL_LIBM_END(pow) - - -LOCAL_LIBM_ENTRY(__libm_error_region) - -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfd [GR_Parameter_Y] = POW_NORM_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfd [GR_Parameter_X] = POW_NORM_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_powf.S b/sysdeps/ia64/fpu/e_powf.S deleted file mode 100644 index d61bc79e5e..0000000000 --- a/sysdeps/ia64/fpu/e_powf.S +++ /dev/null @@ -1,2065 +0,0 @@ -.file "powf.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 02/03/00 Added p12 to definite over/under path. With odd power we did not -// maintain the sign of x in this path. -// 04/04/00 Unwind support added -// 04/19/00 pow(+-1,inf) now returns NaN -// pow(+-val, +-inf) returns 0 or inf, but now does not call error -// support -// Added s1 to fcvt.fx because invalid flag was incorrectly set. -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 09/07/00 Improved performance by eliminating bank conflicts and other stalls, -// and tweaking the critical path -// 09/08/00 Per c99, pow(+-1,inf) now returns 1, and pow(+1,nan) returns 1 -// 09/28/00 Updated NaN**0 path -// 01/20/01 Fixed denormal flag settings. -// 02/13/01 Improved speed. -// 03/19/01 Reordered exp polynomial to improve speed and eliminate monotonicity -// problem in round up, down, and to zero modes. Also corrected -// overflow result when x negative, y odd in round up, down, zero. -// 06/14/01 Added brace missing from bundle -// 12/10/01 Corrected case where x negative, 2^23 <= |y| < 2^24, y odd integer. -// 02/08/02 Fixed overflow/underflow cases that were not calling error support. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 08/29/02 Improved Itanium 2 performance -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 10/09/03 Modified algorithm to improve performance, reduce table size, and -// fix boundary case powf(2.0,-150.0) -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// float powf(float x, float y) -// -// Overview of operation -//============================================================== -// -// Three steps... -// 1. Log(x) -// 2. y Log(x) -// 3. exp(y log(x)) -// -// This means we work with the absolute value of x and merge in the sign later. -// Log(x) = G + delta + r -rsq/2 + p -// G,delta depend on the exponent of x and table entries. The table entries are -// indexed by the exponent of x, called K. -// -// The G and delta come out of the reduction; r is the reduced x. -// -// B = frcpa(x) -// xB-1 is small means that B is the approximate inverse of x. -// -// Log(x) = Log( (1/B)(Bx) ) -// = Log(1/B) + Log(Bx) -// = Log(1/B) + Log( 1 + (Bx-1)) -// -// x = 2^K 1.x_1x_2.....x_52 -// B= frcpa(x) = 2^-k Cm -// Log(1/B) = Log(1/(2^-K Cm)) -// Log(1/B) = Log((2^K/ Cm)) -// Log(1/B) = K Log(2) + Log(1/Cm) -// -// Log(x) = K Log(2) + Log(1/Cm) + Log( 1 + (Bx-1)) -// -// If you take the significand of x, set the exponent to true 0, then Cm is -// the frcpa. We tabulate the Log(1/Cm) values. There are 256 of them. -// The frcpa table is indexed by 8 bits, the x_1 thru x_8. -// m = x_1x_2...x_8 is an 8-bit index. -// -// Log(1/Cm) = log(1/frcpa(1+m/256)) where m goes from 0 to 255. -// -// We tabluate as one double, T for single precision power -// -// Log(x) = (K Log(2)_hi + T) + (K Log(2)_lo) + Log( 1 + (Bx-1)) -// Log(x) = G + delta + Log( 1 + (Bx-1)) -// -// The Log( 1 + (Bx-1)) can be calculated as a series in r = Bx-1. -// -// Log( 1 + (Bx-1)) = r - rsq/2 + p -// where p = r^3(P0 + P1*r + P2*r^2) -// -// Then, -// -// yLog(x) = yG + y delta + y(r-rsq/2) + yp -// yLog(x) = Z1 + e3 + Z2 + Z3 -// -// -// exp(yLog(x)) = exp(Z1 + Z2) exp(Z3) exp(e3) -// -// -// exp(Z3) is another series. -// exp(e3) is approximated as f3 = 1 + e3 -// -// exp(Z1 + Z2) = exp(Z) -// Z (128/log2) = number of log2/128 in Z is N -// -// s = Z - N log2/128 -// -// exp(Z) = exp(s) exp(N log2/128) -// -// exp(r) = exp(Z - N log2/128) -// -// r = s + d = (Z - N (log2/128)_hi) -N (log2/128)_lo -// = Z - N (log2/128) -// -// Z = s+d +N (log2/128) -// -// exp(Z) = exp(s) (1+d) exp(N log2/128) -// -// N = M 128 + n -// -// N log2/128 = M log2 + n log2/128 -// -// n is 8 binary digits = n_7n_6...n_1 -// -// n log2/128 = n_7n_6n_5 16 log2/128 + n_4n_3n_2n_1 log2/128 -// n log2/128 = n_7n_6n_5 log2/8 + n_4n_3n_2n_1 log2/128 -// n log2/128 = I2 log2/8 + I1 log2/128 -// -// N log2/128 = M log2 + I2 log2/8 + I1 log2/128 -// -// exp(Z) = exp(s) (1+d) exp(log(2^M) + log(2^I2/8) + log(2^I1/128)) -// exp(Z) = exp(s) f12 (2^M) 2^I2/8 2^I1/128 -// -// I1, I2 are table indices. Use a series for exp(s). -// Then get exp(Z) -// -// exp(yLog(x)) = exp(Z) exp(Z3) f3 -// exp(yLog(x)) = exp(Z)f3 exp(Z3) -// exp(yLog(x)) = A exp(Z3) -// -// We actually calculate exp(Z3) -1. -// Then, -// exp(yLog(x)) = A + A( exp(Z3) -1) -// - -// Table Generation -//============================================================== - -// The log values -// ============== -// The operation (K*log2_hi) must be exact. K is the true exponent of x. -// If we allow gradual underflow (denormals), K can be represented in 12 bits -// (as a two's complement number). We assume 13 bits as an engineering -// precaution. -// -// +------------+----------------+-+ -// | 13 bits | 50 bits | | -// +------------+----------------+-+ -// 0 1 66 -// 2 34 -// -// So we want the lsb(log2_hi) to be 2^-50 -// We get log2 as a quad-extended (15-bit exponent, 128-bit significand) -// -// 0 fffe b17217f7d1cf79ab c9e3b39803f2f6af (4...) -// -// Consider numbering the bits left to right, starting at 0 thru 127. -// Bit 0 is the 2^-1 bit; bit 49 is the 2^-50 bit. -// -// ...79ab -// 0111 1001 1010 1011 -// 44 -// 89 -// -// So if we shift off the rightmost 14 bits, then (shift back only -// the top half) we get -// -// 0 fffe b17217f7d1cf4000 e6af278ece600fcb dabc000000000000 -// -// Put the right 64-bit signficand in an FR register, convert to double; -// it is exact. Put the next 128 bits into a quad register and round to double. -// The true exponent of the low part is -51. -// -// hi is 0 fffe b17217f7d1cf4000 -// lo is 0 ffcc e6af278ece601000 -// -// Convert to double memory format and get -// -// hi is 0x3fe62e42fefa39e8 -// lo is 0x3cccd5e4f1d9cc02 -// -// log2_hi + log2_lo is an accurate value for log2. -// -// -// The T and t values -// ================== -// A similar method is used to generate the T and t values. -// -// K * log2_hi + T must be exact. -// -// Smallest T,t -// ---------- -// The smallest T,t is -// T t -// 0x3f60040155d58800, 0x3c93bce0ce3ddd81 log(1/frcpa(1+0/256))= +1.95503e-003 -// -// The exponent is 0x3f6 (biased) or -9 (true). -// For the smallest T value, what we want is to clip the significand such that -// when it is shifted right by 9, its lsb is in the bit for 2^-51. The 9 is the -// specific for the first entry. In general, it is 0xffff - (biased 15-bit -// exponent). - -// Independently, what we have calculated is the table value as a quad -// precision number. -// Table entry 1 is -// 0 fff6 80200aaeac44ef38 338f77605fdf8000 -// -// We store this quad precision number in a data structure that is -// sign: 1 -// exponent: 15 -// signficand_hi: 64 (includes explicit bit) -// signficand_lo: 49 -// Because the explicit bit is included, the significand is 113 bits. -// -// Consider significand_hi for table entry 1. -// -// -// +-+--- ... -------+--------------------+ -// | | -// +-+--- ... -------+--------------------+ -// 0 1 4444444455555555556666 -// 2345678901234567890123 -// -// Labeled as above, bit 0 is 2^0, bit 1 is 2^-1, etc. -// Bit 42 is 2^-42. If we shift to the right by 9, the bit in -// bit 42 goes in 51. -// -// So what we want to do is shift bits 43 thru 63 into significand_lo. -// This is shifting bit 42 into bit 63, taking care to retain shifted-off bits. -// Then shifting (just with signficaand_hi) back into bit 42. -// -// The shift_value is 63-42 = 21. In general, this is -// 63 - (51 -(0xffff - 0xfff6)) -// For this example, it is -// 63 - (51 - 9) = 63 - 42 = 21 -// -// This means we are shifting 21 bits into significand_lo. We must maintain more -// that a 128-bit signficand not to lose bits. So before the shift we put the -// 128-bit significand into a 256-bit signficand and then shift. -// The 256-bit significand has four parts: hh, hl, lh, and ll. -// -// Start off with -// hh hl lh ll -// <64> <49><15_0> <64_0> <64_0> -// -// After shift by 21 (then return for significand_hi), -// <43><21_0> <21><43> <6><58_0> <64_0> -// -// Take the hh part and convert to a double. There is no rounding here. -// The conversion is exact. The true exponent of the high part is the same as -// the true exponent of the input quad. -// -// We have some 64 plus significand bits for the low part. In this example, we -// have 70 bits. We want to round this to a double. Put them in a quad and then -// do a quad fnorm. -// For this example the true exponent of the low part is -// true_exponent_of_high - 43 = true_exponent_of_high - (64-21) -// In general, this is -// true_exponent_of_high - (64 - shift_value) -// -// -// Largest T,t -// ---------- -// The largest T,t is -// 0x3fe62643fecf9742, 0x3c9e3147684bd37d log(1/frcpa(1+255/256))=+6.92171e-001 -// -// Table entry 256 is -// 0 fffe b1321ff67cba178c 51da12f4df5a0000 -// -// The shift value is -// 63 - (51 -(0xffff - 0xfffe)) = 13 -// -// The true exponent of the low part is -// true_exponent_of_high - (64 - shift_value) -// -1 - (64-13) = -52 -// Biased as a double, this is 0x3cb -// -// -// -// So then lsb(T) must be >= 2^-51 -// msb(Klog2_hi) <= 2^12 -// -// +--------+---------+ -// | 51 bits | <== largest T -// +--------+---------+ -// | 9 bits | 42 bits | <== smallest T -// +------------+----------------+-+ -// | 13 bits | 50 bits | | -// +------------+----------------+-+ -// -// Note: For powf only the table of T is needed - - -// Special Cases -//============================================================== - -// double float -// overflow error 24 30 - -// underflow error 25 31 - -// X zero Y zero -// +0 +0 +1 error 26 32 -// -0 +0 +1 error 26 32 -// +0 -0 +1 error 26 32 -// -0 -0 +1 error 26 32 - -// X zero Y negative -// +0 -odd integer +inf error 27 33 divide-by-zero -// -0 -odd integer -inf error 27 33 divide-by-zero -// +0 !-odd integer +inf error 27 33 divide-by-zero -// -0 !-odd integer +inf error 27 33 divide-by-zero -// +0 -inf +inf error 27 33 divide-by-zero -// -0 -inf +inf error 27 33 divide-by-zero - -// X zero Y positve -// +0 +odd integer +0 -// -0 +odd integer -0 -// +0 !+odd integer +0 -// -0 !+odd integer +0 -// +0 +inf +0 -// -0 +inf +0 -// +0 Y NaN quiet Y invalid if Y SNaN -// -0 Y NaN quiet Y invalid if Y SNaN - -// X one -// -1 Y inf +1 -// -1 Y NaN quiet Y invalid if Y SNaN -// +1 Y NaN +1 invalid if Y SNaN -// +1 Y any else +1 - -// X - Y not integer QNAN error 28 34 invalid - -// X NaN Y 0 +1 error 29 35 -// X NaN Y NaN quiet X invalid if X or Y SNaN -// X NaN Y any else quiet X invalid if X SNaN -// X !+1 Y NaN quiet Y invalid if Y SNaN - - -// X +inf Y >0 +inf -// X -inf Y >0, !odd integer +inf -// X -inf Y >0, odd integer -inf - -// X +inf Y <0 +0 -// X -inf Y <0, !odd integer +0 -// X -inf Y <0, odd integer -0 - -// X +inf Y =0 +1 -// X -inf Y =0 +1 - -// |X|<1 Y +inf +0 -// |X|<1 Y -inf +inf -// |X|>1 Y +inf +inf -// |X|>1 Y -inf +0 - -// X any Y =0 +1 - -// Assembly macros -//============================================================== - -// integer registers used - -pow_GR_exp_half = r10 -pow_GR_signexp_Xm1 = r11 -pow_GR_tmp = r11 - -pow_GR_signexp_X = r14 -pow_GR_17ones = r15 -pow_GR_Fpsr = r15 -pow_AD_P = r16 -pow_GR_rcs0_mask = r16 -pow_GR_exp_2tom8 = r17 -pow_GR_rcs0 = r17 -pow_GR_sig_X = r18 -pow_GR_10033 = r19 -pow_GR_16ones = r20 - -pow_AD_Tt = r21 -pow_GR_exp_X = r22 -pow_AD_Q = r23 -pow_GR_true_exp_X = r24 -pow_GR_y_zero = r25 - -pow_GR_exp_Y = r26 -pow_AD_tbl1 = r27 -pow_AD_tbl2 = r28 -pow_GR_offset = r29 -pow_GR_exp_Xm1 = r30 -pow_GR_xneg_yodd = r31 - -pow_GR_int_N = r38 -pow_GR_index1 = r39 -pow_GR_index2 = r40 - -pow_AD_T1 = r41 -pow_AD_T2 = r42 -pow_int_GR_M = r43 -pow_GR_sig_int_Y = r44 -pow_GR_sign_Y_Gpr = r45 - -pow_GR_17ones_m1 = r46 -pow_GR_one = r47 -pow_GR_sign_Y = r48 -pow_GR_signexp_Y_Gpr = r49 -pow_GR_exp_Y_Gpr = r50 - -pow_GR_true_exp_Y_Gpr = r51 -pow_GR_signexp_Y = r52 -pow_GR_x_one = r53 -pow_GR_big_pos = r55 - -pow_GR_big_neg = r56 - -GR_SAVE_B0 = r50 -GR_SAVE_GP = r51 -GR_SAVE_PFS = r52 - -GR_Parameter_X = r53 -GR_Parameter_Y = r54 -GR_Parameter_RESULT = r55 -pow_GR_tag = r56 - - -// floating point registers used - -POW_B = f32 -POW_NORM_X = f33 -POW_Xm1 = f34 -POW_r1 = f34 - -POW_NORM_Y = f37 -POW_Q2 = f38 -POW_eps = f39 -POW_P2 = f40 - -POW_P0 = f42 -POW_log2_lo = f43 -POW_r = f44 -POW_Q0_half = f45 - -POW_tmp = f47 -POW_log2_hi = f48 -POW_Q1 = f49 -POW_P1 = f50 - -POW_log2_by_128_hi = f51 -POW_inv_log2_by_128 = f52 -POW_rsq = f53 -POW_Yrcub = f54 -POW_log2_by_128_lo = f55 - -POW_xsq = f57 -POW_v2 = f59 -POW_T = f60 - -POW_RSHF = f62 -POW_v210 = f63 -POW_twoV = f65 - -POW_U = f66 -POW_G = f67 -POW_delta = f68 -POW_V = f70 - -POW_p = f71 -POW_Z = f72 -POW_e3 = f73 -POW_Z2 = f75 - -POW_W1 = f77 -POW_Z3 = f80 - -POW_Z3sq = f85 - -POW_Nfloat = f87 -POW_f3 = f89 -POW_q = f90 - -POW_T1 = f96 -POW_T2 = f97 -POW_2M = f98 -POW_s = f99 -POW_f12 = f100 - -POW_ssq = f101 -POW_T1T2 = f102 -POW_1ps = f103 -POW_A = f104 -POW_es = f105 - -POW_Xp1 = f106 -POW_int_K = f107 -POW_K = f108 -POW_f123 = f109 -POW_Gpr = f110 - -POW_Y_Gpr = f111 -POW_int_Y = f112 -POW_2Mqp1 = f113 - -POW_float_int_Y = f116 -POW_ftz_urm_f8 = f117 -POW_wre_urm_f8 = f118 -POW_big_neg = f119 -POW_big_pos = f120 - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(pow_table_P) -data8 0x80000000000018E5, 0x0000BFFD // P_1 -data8 0xb8aa3b295c17f0bc, 0x00004006 // inv_ln2_by_128 -// -// -data8 0x3FA5555555554A9E // Q_2 -data8 0x0000000000000000 // Pad -data8 0x3FC5555555554733 // Q_1 -data8 0x43e8000000000000 // Right shift constant for exp -data8 0xc9e3b39803f2f6af, 0x00003fb7 // ln2_by_128_lo -LOCAL_OBJECT_END(pow_table_P) - -LOCAL_OBJECT_START(pow_table_Q) -data8 0xCCCCCCCC4ED2BA7F, 0x00003FFC // P_2 -data8 0xAAAAAAAAAAAAB505, 0x00003FFD // P_0 -data8 0x3fe62e42fefa39e8, 0x3cccd5e4f1d9cc02 // log2 hi lo = +6.93147e-001 -data8 0xb17217f7d1cf79ab, 0x00003ff7 // ln2_by_128_hi -LOCAL_OBJECT_END(pow_table_Q) - - -LOCAL_OBJECT_START(pow_Tt) -data8 0x3f60040155d58800 // log(1/frcpa(1+0/256))= +1.95503e-003 -data8 0x3f78121214586a00 // log(1/frcpa(1+1/256))= +5.87661e-003 -data8 0x3f841929f9683200 // log(1/frcpa(1+2/256))= +9.81362e-003 -data8 0x3f8c317384c75f00 // log(1/frcpa(1+3/256))= +1.37662e-002 -data8 0x3f91a6b91ac73380 // log(1/frcpa(1+4/256))= +1.72376e-002 -data8 0x3f95ba9a5d9ac000 // log(1/frcpa(1+5/256))= +2.12196e-002 -data8 0x3f99d2a807432580 // log(1/frcpa(1+6/256))= +2.52177e-002 -data8 0x3f9d6b2725979800 // log(1/frcpa(1+7/256))= +2.87291e-002 -data8 0x3fa0c58fa19dfa80 // log(1/frcpa(1+8/256))= +3.27573e-002 -data8 0x3fa2954c78cbce00 // log(1/frcpa(1+9/256))= +3.62953e-002 -data8 0x3fa4a94d2da96c40 // log(1/frcpa(1+10/256))= +4.03542e-002 -data8 0x3fa67c94f2d4bb40 // log(1/frcpa(1+11/256))= +4.39192e-002 -data8 0x3fa85188b630f040 // log(1/frcpa(1+12/256))= +4.74971e-002 -data8 0x3faa6b8abe73af40 // log(1/frcpa(1+13/256))= +5.16017e-002 -data8 0x3fac441e06f72a80 // log(1/frcpa(1+14/256))= +5.52072e-002 -data8 0x3fae1e6713606d00 // log(1/frcpa(1+15/256))= +5.88257e-002 -data8 0x3faffa6911ab9300 // log(1/frcpa(1+16/256))= +6.24574e-002 -data8 0x3fb0ec139c5da600 // log(1/frcpa(1+17/256))= +6.61022e-002 -data8 0x3fb1dbd2643d1900 // log(1/frcpa(1+18/256))= +6.97605e-002 -data8 0x3fb2cc7284fe5f00 // log(1/frcpa(1+19/256))= +7.34321e-002 -data8 0x3fb3bdf5a7d1ee60 // log(1/frcpa(1+20/256))= +7.71173e-002 -data8 0x3fb4b05d7aa012e0 // log(1/frcpa(1+21/256))= +8.08161e-002 -data8 0x3fb580db7ceb5700 // log(1/frcpa(1+22/256))= +8.39975e-002 -data8 0x3fb674f089365a60 // log(1/frcpa(1+23/256))= +8.77219e-002 -data8 0x3fb769ef2c6b5680 // log(1/frcpa(1+24/256))= +9.14602e-002 -data8 0x3fb85fd927506a40 // log(1/frcpa(1+25/256))= +9.52125e-002 -data8 0x3fb9335e5d594980 // log(1/frcpa(1+26/256))= +9.84401e-002 -data8 0x3fba2b0220c8e5e0 // log(1/frcpa(1+27/256))= +1.02219e-001 -data8 0x3fbb0004ac1a86a0 // log(1/frcpa(1+28/256))= +1.05469e-001 -data8 0x3fbbf968769fca00 // log(1/frcpa(1+29/256))= +1.09274e-001 -data8 0x3fbccfedbfee13a0 // log(1/frcpa(1+30/256))= +1.12548e-001 -data8 0x3fbda727638446a0 // log(1/frcpa(1+31/256))= +1.15832e-001 -data8 0x3fbea3257fe10f60 // log(1/frcpa(1+32/256))= +1.19677e-001 -data8 0x3fbf7be9fedbfde0 // log(1/frcpa(1+33/256))= +1.22985e-001 -data8 0x3fc02ab352ff25f0 // log(1/frcpa(1+34/256))= +1.26303e-001 -data8 0x3fc097ce579d2040 // log(1/frcpa(1+35/256))= +1.29633e-001 -data8 0x3fc1178e8227e470 // log(1/frcpa(1+36/256))= +1.33531e-001 -data8 0x3fc185747dbecf30 // log(1/frcpa(1+37/256))= +1.36885e-001 -data8 0x3fc1f3b925f25d40 // log(1/frcpa(1+38/256))= +1.40250e-001 -data8 0x3fc2625d1e6ddf50 // log(1/frcpa(1+39/256))= +1.43627e-001 -data8 0x3fc2d1610c868130 // log(1/frcpa(1+40/256))= +1.47015e-001 -data8 0x3fc340c597411420 // log(1/frcpa(1+41/256))= +1.50414e-001 -data8 0x3fc3b08b6757f2a0 // log(1/frcpa(1+42/256))= +1.53825e-001 -data8 0x3fc40dfb08378000 // log(1/frcpa(1+43/256))= +1.56677e-001 -data8 0x3fc47e74e8ca5f70 // log(1/frcpa(1+44/256))= +1.60109e-001 -data8 0x3fc4ef51f6466de0 // log(1/frcpa(1+45/256))= +1.63553e-001 -data8 0x3fc56092e02ba510 // log(1/frcpa(1+46/256))= +1.67010e-001 -data8 0x3fc5d23857cd74d0 // log(1/frcpa(1+47/256))= +1.70478e-001 -data8 0x3fc6313a37335d70 // log(1/frcpa(1+48/256))= +1.73377e-001 -data8 0x3fc6a399dabbd380 // log(1/frcpa(1+49/256))= +1.76868e-001 -data8 0x3fc70337dd3ce410 // log(1/frcpa(1+50/256))= +1.79786e-001 -data8 0x3fc77654128f6120 // log(1/frcpa(1+51/256))= +1.83299e-001 -data8 0x3fc7e9d82a0b0220 // log(1/frcpa(1+52/256))= +1.86824e-001 -data8 0x3fc84a6b759f5120 // log(1/frcpa(1+53/256))= +1.89771e-001 -data8 0x3fc8ab47d5f5a300 // log(1/frcpa(1+54/256))= +1.92727e-001 -data8 0x3fc91fe490965810 // log(1/frcpa(1+55/256))= +1.96286e-001 -data8 0x3fc981634011aa70 // log(1/frcpa(1+56/256))= +1.99261e-001 -data8 0x3fc9f6c407089660 // log(1/frcpa(1+57/256))= +2.02843e-001 -data8 0x3fca58e729348f40 // log(1/frcpa(1+58/256))= +2.05838e-001 -data8 0x3fcabb55c31693a0 // log(1/frcpa(1+59/256))= +2.08842e-001 -data8 0x3fcb1e104919efd0 // log(1/frcpa(1+60/256))= +2.11855e-001 -data8 0x3fcb94ee93e367c0 // log(1/frcpa(1+61/256))= +2.15483e-001 -data8 0x3fcbf851c0675550 // log(1/frcpa(1+62/256))= +2.18516e-001 -data8 0x3fcc5c0254bf23a0 // log(1/frcpa(1+63/256))= +2.21558e-001 -data8 0x3fccc000c9db3c50 // log(1/frcpa(1+64/256))= +2.24609e-001 -data8 0x3fcd244d99c85670 // log(1/frcpa(1+65/256))= +2.27670e-001 -data8 0x3fcd88e93fb2f450 // log(1/frcpa(1+66/256))= +2.30741e-001 -data8 0x3fcdedd437eaef00 // log(1/frcpa(1+67/256))= +2.33820e-001 -data8 0x3fce530effe71010 // log(1/frcpa(1+68/256))= +2.36910e-001 -data8 0x3fceb89a1648b970 // log(1/frcpa(1+69/256))= +2.40009e-001 -data8 0x3fcf1e75fadf9bd0 // log(1/frcpa(1+70/256))= +2.43117e-001 -data8 0x3fcf84a32ead7c30 // log(1/frcpa(1+71/256))= +2.46235e-001 -data8 0x3fcfeb2233ea07c0 // log(1/frcpa(1+72/256))= +2.49363e-001 -data8 0x3fd028f9c7035c18 // log(1/frcpa(1+73/256))= +2.52501e-001 -data8 0x3fd05c8be0d96358 // log(1/frcpa(1+74/256))= +2.55649e-001 -data8 0x3fd085eb8f8ae790 // log(1/frcpa(1+75/256))= +2.58174e-001 -data8 0x3fd0b9c8e32d1910 // log(1/frcpa(1+76/256))= +2.61339e-001 -data8 0x3fd0edd060b78080 // log(1/frcpa(1+77/256))= +2.64515e-001 -data8 0x3fd122024cf00638 // log(1/frcpa(1+78/256))= +2.67701e-001 -data8 0x3fd14be2927aecd0 // log(1/frcpa(1+79/256))= +2.70257e-001 -data8 0x3fd180618ef18ad8 // log(1/frcpa(1+80/256))= +2.73461e-001 -data8 0x3fd1b50bbe2fc638 // log(1/frcpa(1+81/256))= +2.76675e-001 -data8 0x3fd1df4cc7cf2428 // log(1/frcpa(1+82/256))= +2.79254e-001 -data8 0x3fd214456d0eb8d0 // log(1/frcpa(1+83/256))= +2.82487e-001 -data8 0x3fd23ec5991eba48 // log(1/frcpa(1+84/256))= +2.85081e-001 -data8 0x3fd2740d9f870af8 // log(1/frcpa(1+85/256))= +2.88333e-001 -data8 0x3fd29ecdabcdfa00 // log(1/frcpa(1+86/256))= +2.90943e-001 -data8 0x3fd2d46602adcce8 // log(1/frcpa(1+87/256))= +2.94214e-001 -data8 0x3fd2ff66b04ea9d0 // log(1/frcpa(1+88/256))= +2.96838e-001 -data8 0x3fd335504b355a30 // log(1/frcpa(1+89/256))= +3.00129e-001 -data8 0x3fd360925ec44f58 // log(1/frcpa(1+90/256))= +3.02769e-001 -data8 0x3fd38bf1c3337e70 // log(1/frcpa(1+91/256))= +3.05417e-001 -data8 0x3fd3c25277333180 // log(1/frcpa(1+92/256))= +3.08735e-001 -data8 0x3fd3edf463c16838 // log(1/frcpa(1+93/256))= +3.11399e-001 -data8 0x3fd419b423d5e8c0 // log(1/frcpa(1+94/256))= +3.14069e-001 -data8 0x3fd44591e0539f48 // log(1/frcpa(1+95/256))= +3.16746e-001 -data8 0x3fd47c9175b6f0a8 // log(1/frcpa(1+96/256))= +3.20103e-001 -data8 0x3fd4a8b341552b08 // log(1/frcpa(1+97/256))= +3.22797e-001 -data8 0x3fd4d4f390890198 // log(1/frcpa(1+98/256))= +3.25498e-001 -data8 0x3fd501528da1f960 // log(1/frcpa(1+99/256))= +3.28206e-001 -data8 0x3fd52dd06347d4f0 // log(1/frcpa(1+100/256))= +3.30921e-001 -data8 0x3fd55a6d3c7b8a88 // log(1/frcpa(1+101/256))= +3.33644e-001 -data8 0x3fd5925d2b112a58 // log(1/frcpa(1+102/256))= +3.37058e-001 -data8 0x3fd5bf406b543db0 // log(1/frcpa(1+103/256))= +3.39798e-001 -data8 0x3fd5ec433d5c35a8 // log(1/frcpa(1+104/256))= +3.42545e-001 -data8 0x3fd61965cdb02c18 // log(1/frcpa(1+105/256))= +3.45300e-001 -data8 0x3fd646a84935b2a0 // log(1/frcpa(1+106/256))= +3.48063e-001 -data8 0x3fd6740add31de90 // log(1/frcpa(1+107/256))= +3.50833e-001 -data8 0x3fd6a18db74a58c0 // log(1/frcpa(1+108/256))= +3.53610e-001 -data8 0x3fd6cf31058670e8 // log(1/frcpa(1+109/256))= +3.56396e-001 -data8 0x3fd6f180e852f0b8 // log(1/frcpa(1+110/256))= +3.58490e-001 -data8 0x3fd71f5d71b894e8 // log(1/frcpa(1+111/256))= +3.61289e-001 -data8 0x3fd74d5aefd66d58 // log(1/frcpa(1+112/256))= +3.64096e-001 -data8 0x3fd77b79922bd378 // log(1/frcpa(1+113/256))= +3.66911e-001 -data8 0x3fd7a9b9889f19e0 // log(1/frcpa(1+114/256))= +3.69734e-001 -data8 0x3fd7d81b037eb6a0 // log(1/frcpa(1+115/256))= +3.72565e-001 -data8 0x3fd8069e33827230 // log(1/frcpa(1+116/256))= +3.75404e-001 -data8 0x3fd82996d3ef8bc8 // log(1/frcpa(1+117/256))= +3.77538e-001 -data8 0x3fd85855776dcbf8 // log(1/frcpa(1+118/256))= +3.80391e-001 -data8 0x3fd8873658327cc8 // log(1/frcpa(1+119/256))= +3.83253e-001 -data8 0x3fd8aa75973ab8c8 // log(1/frcpa(1+120/256))= +3.85404e-001 -data8 0x3fd8d992dc8824e0 // log(1/frcpa(1+121/256))= +3.88280e-001 -data8 0x3fd908d2ea7d9510 // log(1/frcpa(1+122/256))= +3.91164e-001 -data8 0x3fd92c59e79c0e50 // log(1/frcpa(1+123/256))= +3.93332e-001 -data8 0x3fd95bd750ee3ed0 // log(1/frcpa(1+124/256))= +3.96231e-001 -data8 0x3fd98b7811a3ee58 // log(1/frcpa(1+125/256))= +3.99138e-001 -data8 0x3fd9af47f33d4068 // log(1/frcpa(1+126/256))= +4.01323e-001 -data8 0x3fd9df270c1914a0 // log(1/frcpa(1+127/256))= +4.04245e-001 -data8 0x3fda0325ed14fda0 // log(1/frcpa(1+128/256))= +4.06442e-001 -data8 0x3fda33440224fa78 // log(1/frcpa(1+129/256))= +4.09379e-001 -data8 0x3fda57725e80c380 // log(1/frcpa(1+130/256))= +4.11587e-001 -data8 0x3fda87d0165dd198 // log(1/frcpa(1+131/256))= +4.14539e-001 -data8 0x3fdaac2e6c03f890 // log(1/frcpa(1+132/256))= +4.16759e-001 -data8 0x3fdadccc6fdf6a80 // log(1/frcpa(1+133/256))= +4.19726e-001 -data8 0x3fdb015b3eb1e790 // log(1/frcpa(1+134/256))= +4.21958e-001 -data8 0x3fdb323a3a635948 // log(1/frcpa(1+135/256))= +4.24941e-001 -data8 0x3fdb56fa04462908 // log(1/frcpa(1+136/256))= +4.27184e-001 -data8 0x3fdb881aa659bc90 // log(1/frcpa(1+137/256))= +4.30182e-001 -data8 0x3fdbad0bef3db160 // log(1/frcpa(1+138/256))= +4.32437e-001 -data8 0x3fdbd21297781c28 // log(1/frcpa(1+139/256))= +4.34697e-001 -data8 0x3fdc039236f08818 // log(1/frcpa(1+140/256))= +4.37718e-001 -data8 0x3fdc28cb1e4d32f8 // log(1/frcpa(1+141/256))= +4.39990e-001 -data8 0x3fdc4e19b84723c0 // log(1/frcpa(1+142/256))= +4.42267e-001 -data8 0x3fdc7ff9c74554c8 // log(1/frcpa(1+143/256))= +4.45311e-001 -data8 0x3fdca57b64e9db00 // log(1/frcpa(1+144/256))= +4.47600e-001 -data8 0x3fdccb130a5ceba8 // log(1/frcpa(1+145/256))= +4.49895e-001 -data8 0x3fdcf0c0d18f3268 // log(1/frcpa(1+146/256))= +4.52194e-001 -data8 0x3fdd232075b5a200 // log(1/frcpa(1+147/256))= +4.55269e-001 -data8 0x3fdd490246defa68 // log(1/frcpa(1+148/256))= +4.57581e-001 -data8 0x3fdd6efa918d25c8 // log(1/frcpa(1+149/256))= +4.59899e-001 -data8 0x3fdd9509707ae528 // log(1/frcpa(1+150/256))= +4.62221e-001 -data8 0x3fddbb2efe92c550 // log(1/frcpa(1+151/256))= +4.64550e-001 -data8 0x3fddee2f3445e4a8 // log(1/frcpa(1+152/256))= +4.67663e-001 -data8 0x3fde148a1a2726c8 // log(1/frcpa(1+153/256))= +4.70004e-001 -data8 0x3fde3afc0a49ff38 // log(1/frcpa(1+154/256))= +4.72350e-001 -data8 0x3fde6185206d5168 // log(1/frcpa(1+155/256))= +4.74702e-001 -data8 0x3fde882578823d50 // log(1/frcpa(1+156/256))= +4.77060e-001 -data8 0x3fdeaedd2eac9908 // log(1/frcpa(1+157/256))= +4.79423e-001 -data8 0x3fded5ac5f436be0 // log(1/frcpa(1+158/256))= +4.81792e-001 -data8 0x3fdefc9326d16ab8 // log(1/frcpa(1+159/256))= +4.84166e-001 -data8 0x3fdf2391a21575f8 // log(1/frcpa(1+160/256))= +4.86546e-001 -data8 0x3fdf4aa7ee031928 // log(1/frcpa(1+161/256))= +4.88932e-001 -data8 0x3fdf71d627c30bb0 // log(1/frcpa(1+162/256))= +4.91323e-001 -data8 0x3fdf991c6cb3b378 // log(1/frcpa(1+163/256))= +4.93720e-001 -data8 0x3fdfc07ada69a908 // log(1/frcpa(1+164/256))= +4.96123e-001 -data8 0x3fdfe7f18eb03d38 // log(1/frcpa(1+165/256))= +4.98532e-001 -data8 0x3fe007c053c5002c // log(1/frcpa(1+166/256))= +5.00946e-001 -data8 0x3fe01b942198a5a0 // log(1/frcpa(1+167/256))= +5.03367e-001 -data8 0x3fe02f74400c64e8 // log(1/frcpa(1+168/256))= +5.05793e-001 -data8 0x3fe04360be7603ac // log(1/frcpa(1+169/256))= +5.08225e-001 -data8 0x3fe05759ac47fe30 // log(1/frcpa(1+170/256))= +5.10663e-001 -data8 0x3fe06b5f1911cf50 // log(1/frcpa(1+171/256))= +5.13107e-001 -data8 0x3fe078bf0533c568 // log(1/frcpa(1+172/256))= +5.14740e-001 -data8 0x3fe08cd9687e7b0c // log(1/frcpa(1+173/256))= +5.17194e-001 -data8 0x3fe0a10074cf9018 // log(1/frcpa(1+174/256))= +5.19654e-001 -data8 0x3fe0b5343a234474 // log(1/frcpa(1+175/256))= +5.22120e-001 -data8 0x3fe0c974c89431cc // log(1/frcpa(1+176/256))= +5.24592e-001 -data8 0x3fe0ddc2305b9884 // log(1/frcpa(1+177/256))= +5.27070e-001 -data8 0x3fe0eb524bafc918 // log(1/frcpa(1+178/256))= +5.28726e-001 -data8 0x3fe0ffb54213a474 // log(1/frcpa(1+179/256))= +5.31214e-001 -data8 0x3fe114253da97d9c // log(1/frcpa(1+180/256))= +5.33709e-001 -data8 0x3fe128a24f1d9afc // log(1/frcpa(1+181/256))= +5.36210e-001 -data8 0x3fe1365252bf0864 // log(1/frcpa(1+182/256))= +5.37881e-001 -data8 0x3fe14ae558b4a92c // log(1/frcpa(1+183/256))= +5.40393e-001 -data8 0x3fe15f85a19c7658 // log(1/frcpa(1+184/256))= +5.42910e-001 -data8 0x3fe16d4d38c119f8 // log(1/frcpa(1+185/256))= +5.44592e-001 -data8 0x3fe18203c20dd130 // log(1/frcpa(1+186/256))= +5.47121e-001 -data8 0x3fe196c7bc4b1f38 // log(1/frcpa(1+187/256))= +5.49656e-001 -data8 0x3fe1a4a738b7a33c // log(1/frcpa(1+188/256))= +5.51349e-001 -data8 0x3fe1b981c0c9653c // log(1/frcpa(1+189/256))= +5.53895e-001 -data8 0x3fe1ce69e8bb1068 // log(1/frcpa(1+190/256))= +5.56447e-001 -data8 0x3fe1dc619de06944 // log(1/frcpa(1+191/256))= +5.58152e-001 -data8 0x3fe1f160a2ad0da0 // log(1/frcpa(1+192/256))= +5.60715e-001 -data8 0x3fe2066d7740737c // log(1/frcpa(1+193/256))= +5.63285e-001 -data8 0x3fe2147dba47a390 // log(1/frcpa(1+194/256))= +5.65001e-001 -data8 0x3fe229a1bc5ebac0 // log(1/frcpa(1+195/256))= +5.67582e-001 -data8 0x3fe237c1841a502c // log(1/frcpa(1+196/256))= +5.69306e-001 -data8 0x3fe24cfce6f80d98 // log(1/frcpa(1+197/256))= +5.71898e-001 -data8 0x3fe25b2c55cd5760 // log(1/frcpa(1+198/256))= +5.73630e-001 -data8 0x3fe2707f4d5f7c40 // log(1/frcpa(1+199/256))= +5.76233e-001 -data8 0x3fe285e0842ca380 // log(1/frcpa(1+200/256))= +5.78842e-001 -data8 0x3fe294294708b770 // log(1/frcpa(1+201/256))= +5.80586e-001 -data8 0x3fe2a9a2670aff0c // log(1/frcpa(1+202/256))= +5.83207e-001 -data8 0x3fe2b7fb2c8d1cc0 // log(1/frcpa(1+203/256))= +5.84959e-001 -data8 0x3fe2c65a6395f5f4 // log(1/frcpa(1+204/256))= +5.86713e-001 -data8 0x3fe2dbf557b0df40 // log(1/frcpa(1+205/256))= +5.89350e-001 -data8 0x3fe2ea64c3f97654 // log(1/frcpa(1+206/256))= +5.91113e-001 -data8 0x3fe3001823684d70 // log(1/frcpa(1+207/256))= +5.93762e-001 -data8 0x3fe30e97e9a8b5cc // log(1/frcpa(1+208/256))= +5.95531e-001 -data8 0x3fe32463ebdd34e8 // log(1/frcpa(1+209/256))= +5.98192e-001 -data8 0x3fe332f4314ad794 // log(1/frcpa(1+210/256))= +5.99970e-001 -data8 0x3fe348d90e7464cc // log(1/frcpa(1+211/256))= +6.02643e-001 -data8 0x3fe35779f8c43d6c // log(1/frcpa(1+212/256))= +6.04428e-001 -data8 0x3fe36621961a6a98 // log(1/frcpa(1+213/256))= +6.06217e-001 -data8 0x3fe37c299f3c3668 // log(1/frcpa(1+214/256))= +6.08907e-001 -data8 0x3fe38ae2171976e4 // log(1/frcpa(1+215/256))= +6.10704e-001 -data8 0x3fe399a157a603e4 // log(1/frcpa(1+216/256))= +6.12504e-001 -data8 0x3fe3afccfe77b9d0 // log(1/frcpa(1+217/256))= +6.15210e-001 -data8 0x3fe3be9d503533b4 // log(1/frcpa(1+218/256))= +6.17018e-001 -data8 0x3fe3cd7480b4a8a0 // log(1/frcpa(1+219/256))= +6.18830e-001 -data8 0x3fe3e3c43918f76c // log(1/frcpa(1+220/256))= +6.21554e-001 -data8 0x3fe3f2acb27ed6c4 // log(1/frcpa(1+221/256))= +6.23373e-001 -data8 0x3fe4019c2125ca90 // log(1/frcpa(1+222/256))= +6.25197e-001 -data8 0x3fe4181061389720 // log(1/frcpa(1+223/256))= +6.27937e-001 -data8 0x3fe42711518df544 // log(1/frcpa(1+224/256))= +6.29769e-001 -data8 0x3fe436194e12b6bc // log(1/frcpa(1+225/256))= +6.31604e-001 -data8 0x3fe445285d68ea68 // log(1/frcpa(1+226/256))= +6.33442e-001 -data8 0x3fe45bcc464c8938 // log(1/frcpa(1+227/256))= +6.36206e-001 -data8 0x3fe46aed21f117fc // log(1/frcpa(1+228/256))= +6.38053e-001 -data8 0x3fe47a1527e8a2d0 // log(1/frcpa(1+229/256))= +6.39903e-001 -data8 0x3fe489445efffcc8 // log(1/frcpa(1+230/256))= +6.41756e-001 -data8 0x3fe4a018bcb69834 // log(1/frcpa(1+231/256))= +6.44543e-001 -data8 0x3fe4af5a0c9d65d4 // log(1/frcpa(1+232/256))= +6.46405e-001 -data8 0x3fe4bea2a5bdbe84 // log(1/frcpa(1+233/256))= +6.48271e-001 -data8 0x3fe4cdf28f10ac44 // log(1/frcpa(1+234/256))= +6.50140e-001 -data8 0x3fe4dd49cf994058 // log(1/frcpa(1+235/256))= +6.52013e-001 -data8 0x3fe4eca86e64a680 // log(1/frcpa(1+236/256))= +6.53889e-001 -data8 0x3fe503c43cd8eb68 // log(1/frcpa(1+237/256))= +6.56710e-001 -data8 0x3fe513356667fc54 // log(1/frcpa(1+238/256))= +6.58595e-001 -data8 0x3fe522ae0738a3d4 // log(1/frcpa(1+239/256))= +6.60483e-001 -data8 0x3fe5322e26867854 // log(1/frcpa(1+240/256))= +6.62376e-001 -data8 0x3fe541b5cb979808 // log(1/frcpa(1+241/256))= +6.64271e-001 -data8 0x3fe55144fdbcbd60 // log(1/frcpa(1+242/256))= +6.66171e-001 -data8 0x3fe560dbc45153c4 // log(1/frcpa(1+243/256))= +6.68074e-001 -data8 0x3fe5707a26bb8c64 // log(1/frcpa(1+244/256))= +6.69980e-001 -data8 0x3fe587f60ed5b8fc // log(1/frcpa(1+245/256))= +6.72847e-001 -data8 0x3fe597a7977c8f30 // log(1/frcpa(1+246/256))= +6.74763e-001 -data8 0x3fe5a760d634bb88 // log(1/frcpa(1+247/256))= +6.76682e-001 -data8 0x3fe5b721d295f10c // log(1/frcpa(1+248/256))= +6.78605e-001 -data8 0x3fe5c6ea94431ef8 // log(1/frcpa(1+249/256))= +6.80532e-001 -data8 0x3fe5d6bb22ea86f4 // log(1/frcpa(1+250/256))= +6.82462e-001 -data8 0x3fe5e6938645d38c // log(1/frcpa(1+251/256))= +6.84397e-001 -data8 0x3fe5f673c61a2ed0 // log(1/frcpa(1+252/256))= +6.86335e-001 -data8 0x3fe6065bea385924 // log(1/frcpa(1+253/256))= +6.88276e-001 -data8 0x3fe6164bfa7cc068 // log(1/frcpa(1+254/256))= +6.90222e-001 -data8 0x3fe62643fecf9740 // log(1/frcpa(1+255/256))= +6.92171e-001 -LOCAL_OBJECT_END(pow_Tt) - - -// Table 1 is 2^(index_1/128) where -// index_1 goes from 0 to 15 -LOCAL_OBJECT_START(pow_tbl1) -data8 0x8000000000000000 , 0x00003FFF -data8 0x80B1ED4FD999AB6C , 0x00003FFF -data8 0x8164D1F3BC030773 , 0x00003FFF -data8 0x8218AF4373FC25EC , 0x00003FFF -data8 0x82CD8698AC2BA1D7 , 0x00003FFF -data8 0x8383594EEFB6EE37 , 0x00003FFF -data8 0x843A28C3ACDE4046 , 0x00003FFF -data8 0x84F1F656379C1A29 , 0x00003FFF -data8 0x85AAC367CC487B15 , 0x00003FFF -data8 0x8664915B923FBA04 , 0x00003FFF -data8 0x871F61969E8D1010 , 0x00003FFF -data8 0x87DB357FF698D792 , 0x00003FFF -data8 0x88980E8092DA8527 , 0x00003FFF -data8 0x8955EE03618E5FDD , 0x00003FFF -data8 0x8A14D575496EFD9A , 0x00003FFF -data8 0x8AD4C6452C728924 , 0x00003FFF -LOCAL_OBJECT_END(pow_tbl1) - - -// Table 2 is 2^(index_1/8) where -// index_2 goes from 0 to 7 -LOCAL_OBJECT_START(pow_tbl2) -data8 0x8000000000000000 , 0x00003FFF -data8 0x8B95C1E3EA8BD6E7 , 0x00003FFF -data8 0x9837F0518DB8A96F , 0x00003FFF -data8 0xA5FED6A9B15138EA , 0x00003FFF -data8 0xB504F333F9DE6484 , 0x00003FFF -data8 0xC5672A115506DADD , 0x00003FFF -data8 0xD744FCCAD69D6AF4 , 0x00003FFF -data8 0xEAC0C6E7DD24392F , 0x00003FFF -LOCAL_OBJECT_END(pow_tbl2) - -.section .text -GLOBAL_LIBM_ENTRY(powf) - -// Get exponent of x. Will be used to calculate K. -{ .mfi - getf.exp pow_GR_signexp_X = f8 - fms.s1 POW_Xm1 = f8,f1,f1 // Will be used for r1 if x>0 - mov pow_GR_17ones = 0x1FFFF -} -{ .mfi - addl pow_AD_P = @ltoff(pow_table_P), gp - fma.s1 POW_Xp1 = f8,f1,f1 // Will be used for r1 if x<0 - nop.i 999 -} -;; - -// Get significand of x. Will be used to get index to fetch T, Tt. -{ .mfi - getf.sig pow_GR_sig_X = f8 - frcpa.s1 POW_B, p6 = f1,f8 - mov pow_GR_exp_half = 0xFFFE // Exponent for 0.5 -} -{ .mfi - ld8 pow_AD_P = [pow_AD_P] - fma.s1 POW_NORM_X = f8,f1,f0 - mov pow_GR_exp_2tom8 = 0xFFF7 -} -;; - -// DOUBLE 0x10033 exponent limit at which y is an integer -{ .mfi - nop.m 999 - fcmp.lt.s1 p8,p9 = f8, f0 // Test for x<0 - addl pow_GR_10033 = 0x10033, r0 -} -{ .mfi - mov pow_GR_16ones = 0xFFFF - fma.s1 POW_NORM_Y = f9,f1,f0 - nop.i 999 -} -;; - -// p13 = TRUE ==> X is unorm -{ .mfi - setf.exp POW_Q0_half = pow_GR_exp_half // Form 0.5 - fclass.m p13,p0 = f8, 0x0b // Test for x unorm - adds pow_AD_Tt = pow_Tt - pow_table_P, pow_AD_P -} -{ .mfi - adds pow_AD_Q = pow_table_Q - pow_table_P, pow_AD_P - nop.f 999 - nop.i 999 -} -;; - -// p14 = TRUE ==> X is ZERO -{ .mfi - ldfe POW_P2 = [pow_AD_Q], 16 - fclass.m p14,p0 = f8, 0x07 - nop.i 999 -} -// Note POW_Xm1 and POW_r1 are used interchangably -{ .mfb - nop.m 999 -(p8) fnma.s1 POW_Xm1 = POW_Xp1,f1,f0 -(p13) br.cond.spnt POW_X_DENORM -} -;; - -// Continue normal and denormal paths here -POW_COMMON: -// p11 = TRUE ==> Y is a NAN -{ .mfi - and pow_GR_exp_X = pow_GR_signexp_X, pow_GR_17ones - fclass.m p11,p0 = f9, 0xc3 - nop.i 999 -} -{ .mfi - nop.m 999 - fms.s1 POW_r = POW_B, POW_NORM_X,f1 - mov pow_GR_y_zero = 0 -} -;; - -// Get exponent of |x|-1 to use in comparison to 2^-8 -{ .mmi - getf.exp pow_GR_signexp_Xm1 = POW_Xm1 - sub pow_GR_true_exp_X = pow_GR_exp_X, pow_GR_16ones - extr.u pow_GR_offset = pow_GR_sig_X, 55, 8 -} -;; - -{ .mfi - alloc r32=ar.pfs,2,19,4,0 - fcvt.fx.s1 POW_int_Y = POW_NORM_Y - shladd pow_AD_Tt = pow_GR_offset, 3, pow_AD_Tt -} -{ .mfi - setf.sig POW_int_K = pow_GR_true_exp_X - nop.f 999 - nop.i 999 -} -;; - -// p12 = TRUE if Y is ZERO -// Compute xsq to decide later if |x|=1 -{ .mfi - ldfe POW_P1 = [pow_AD_P], 16 - fclass.m p12,p0 = f9, 0x07 - nop.i 999 -} -{ .mfb - ldfe POW_P0 = [pow_AD_Q], 16 - fma.s1 POW_xsq = POW_NORM_X, POW_NORM_X, f0 -(p11) br.cond.spnt POW_Y_NAN // Branch if y=nan -} -;; - -{ .mmf - getf.exp pow_GR_signexp_Y = POW_NORM_Y - ldfd POW_T = [pow_AD_Tt] - fma.s1 POW_rsq = POW_r, POW_r,f0 -} -;; - -// p11 = TRUE ==> X is a NAN -{ .mfi - ldfpd POW_log2_hi, POW_log2_lo = [pow_AD_Q], 16 - fclass.m p11,p0 = POW_NORM_X, 0xc3 - nop.i 999 -} -{ .mfi - ldfe POW_inv_log2_by_128 = [pow_AD_P], 16 - fma.s1 POW_delta = f0,f0,f0 // delta=0 in case |x| near 1 -(p12) mov pow_GR_y_zero = 1 -} -;; - -{ .mfi - ldfd POW_Q2 = [pow_AD_P], 16 - fnma.s1 POW_twoV = POW_r, POW_Q0_half,f1 - and pow_GR_exp_Xm1 = pow_GR_signexp_Xm1, pow_GR_17ones -} -{ .mfi - nop.m 999 - fma.s1 POW_U = POW_NORM_Y,POW_r,f0 - nop.i 999 -} -;; - -// Determine if we will use the |x| near 1 path (p6) or normal path (p7) -{ .mfi - nop.m 999 - fcvt.xf POW_K = POW_int_K - cmp.lt p6,p7 = pow_GR_exp_Xm1, pow_GR_exp_2tom8 -} -{ .mfb - nop.m 999 - fma.s1 POW_G = f0,f0,f0 // G=0 in case |x| near 1 -(p11) br.cond.spnt POW_X_NAN // Branch if x=nan and y not nan -} -;; - -// If on the x near 1 path, assign r1 to r -{ .mfi - ldfpd POW_Q1, POW_RSHF = [pow_AD_P], 16 -(p6) fma.s1 POW_r = POW_r1, f1, f0 - nop.i 999 -} -{ .mfb - nop.m 999 -(p6) fma.s1 POW_rsq = POW_r1, POW_r1, f0 -(p14) br.cond.spnt POW_X_0 // Branch if x zero and y not nan -} -;; - -{ .mfi - getf.sig pow_GR_sig_int_Y = POW_int_Y -(p6) fnma.s1 POW_twoV = POW_r1, POW_Q0_half,f1 - and pow_GR_exp_Y = pow_GR_signexp_Y, pow_GR_17ones -} -{ .mfb - andcm pow_GR_sign_Y = pow_GR_signexp_Y, pow_GR_17ones -(p6) fma.s1 POW_U = POW_NORM_Y,POW_r1,f0 -(p12) br.cond.spnt POW_Y_0 // Branch if y=zero, x not zero or nan -} -;; - -{ .mfi - ldfe POW_log2_by_128_lo = [pow_AD_P], 16 -(p7) fma.s1 POW_Z2 = POW_twoV, POW_U, f0 - nop.i 999 -} -{ .mfi - ldfe POW_log2_by_128_hi = [pow_AD_Q], 16 - nop.f 999 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fcvt.xf POW_float_int_Y = POW_int_Y - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fma.s1 POW_G = POW_K, POW_log2_hi, POW_T - adds pow_AD_tbl1 = pow_tbl1 - pow_Tt, pow_AD_Q -} -;; - -// p11 = TRUE ==> X is NEGATIVE but not inf -{ .mfi - nop.m 999 - fclass.m p11,p0 = POW_NORM_X, 0x1a - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fma.s1 POW_delta = POW_K, POW_log2_lo, f0 - adds pow_AD_tbl2 = pow_tbl2 - pow_tbl1, pow_AD_tbl1 -} -;; - -{ .mfi - nop.m 999 -(p6) fma.s1 POW_Z = POW_twoV, POW_U, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_v2 = POW_P1, POW_r, POW_P0 - nop.i 999 -} -;; - -// p11 = TRUE ==> X is NEGATIVE but not inf -// p12 = TRUE ==> X is NEGATIVE AND Y already even int -// p13 = TRUE ==> X is NEGATIVE AND Y possible int -{ .mfi - nop.m 999 -(p7) fma.s1 POW_Z = POW_NORM_Y, POW_G, POW_Z2 -(p11) cmp.gt.unc p12,p13 = pow_GR_exp_Y, pow_GR_10033 -} -{ .mfi - nop.m 999 - fma.s1 POW_Gpr = POW_G, f1, POW_r - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 POW_Yrcub = POW_rsq, POW_U, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_p = POW_rsq, POW_P2, POW_v2 - nop.i 999 -} -;; - -// Test if x inf -{ .mfi - nop.m 999 - fclass.m p15,p0 = POW_NORM_X, 0x23 - nop.i 999 -} -// By adding RSHF (1.1000...*2^63) we put integer part in rightmost significand -{ .mfi - nop.m 999 - fma.s1 POW_W1 = POW_Z, POW_inv_log2_by_128, POW_RSHF - nop.i 999 -} -;; - -// p13 = TRUE ==> X is NEGATIVE AND Y possible int -// p10 = TRUE ==> X is NEG and Y is an int -// p12 = TRUE ==> X is NEG and Y is not an int -{ .mfi - nop.m 999 -(p13) fcmp.eq.unc.s1 p10,p12 = POW_float_int_Y, POW_NORM_Y - mov pow_GR_xneg_yodd = 0 -} -{ .mfi - nop.m 999 - fma.s1 POW_Y_Gpr = POW_NORM_Y, POW_Gpr, f0 - nop.i 999 -} -;; - -// p11 = TRUE ==> X is +1.0 -{ .mfi - nop.m 999 - fcmp.eq.s1 p11,p0 = POW_NORM_X, f1 - nop.i 999 -} -;; - -// Extract rounded integer from rightmost significand of POW_W1 -// By subtracting RSHF we get rounded integer POW_Nfloat -{ .mfi - getf.sig pow_GR_int_N = POW_W1 - fms.s1 POW_Nfloat = POW_W1, f1, POW_RSHF - nop.i 999 -} -{ .mfb - nop.m 999 - fma.s1 POW_Z3 = POW_p, POW_Yrcub, f0 -(p12) br.cond.spnt POW_X_NEG_Y_NONINT // Branch if x neg, y not integer -} -;; - -// p7 = TRUE ==> Y is +1.0 -// p12 = TRUE ==> X is NEGATIVE AND Y is an odd integer -{ .mfi - getf.exp pow_GR_signexp_Y_Gpr = POW_Y_Gpr - fcmp.eq.s1 p7,p0 = POW_NORM_Y, f1 // Test for y=1.0 -(p10) tbit.nz.unc p12,p0 = pow_GR_sig_int_Y,0 -} -{ .mfb - nop.m 999 -(p11) fma.s.s0 f8 = f1,f1,f0 // If x=1, result is +1 -(p15) br.cond.spnt POW_X_INF -} -;; - -// Test x and y and flag denormal -{ .mfi - nop.m 999 - fcmp.eq.s0 p15,p0 = f8,f9 - nop.i 999 -} -{ .mfb - nop.m 999 - fma.s1 POW_e3 = POW_NORM_Y, POW_delta, f0 -(p11) br.ret.spnt b0 // Early exit if x=1.0, result is +1 -} -;; - -{ .mfi -(p12) mov pow_GR_xneg_yodd = 1 - fnma.s1 POW_f12 = POW_Nfloat, POW_log2_by_128_lo, f1 - nop.i 999 -} -{ .mfb - nop.m 999 - fnma.s1 POW_s = POW_Nfloat, POW_log2_by_128_hi, POW_Z -(p7) br.ret.spnt b0 // Early exit if y=1.0, result is x -} -;; - -{ .mmi - and pow_GR_index1 = 0x0f, pow_GR_int_N - and pow_GR_index2 = 0x70, pow_GR_int_N - shr pow_int_GR_M = pow_GR_int_N, 7 // M = N/128 -} -;; - -{ .mfi - shladd pow_AD_T1 = pow_GR_index1, 4, pow_AD_tbl1 - fma.s1 POW_q = POW_Z3, POW_Q1, POW_Q0_half - add pow_int_GR_M = pow_GR_16ones, pow_int_GR_M -} -{ .mfi - add pow_AD_T2 = pow_AD_tbl2, pow_GR_index2 - fma.s1 POW_Z3sq = POW_Z3, POW_Z3, f0 - nop.i 999 -} -;; - -{ .mmi - ldfe POW_T1 = [pow_AD_T1] - ldfe POW_T2 = [pow_AD_T2] - nop.i 999 -} -;; - -// f123 = f12*(e3+1) = f12*e3+f12 -{ .mfi - setf.exp POW_2M = pow_int_GR_M - fma.s1 POW_f123 = POW_e3,POW_f12,POW_f12 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_ssq = POW_s, POW_s, f0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 POW_v2 = POW_s, POW_Q2, POW_Q1 - and pow_GR_exp_Y_Gpr = pow_GR_signexp_Y_Gpr, pow_GR_17ones -} -;; - -{ .mfi - cmp.ne p12,p13 = pow_GR_xneg_yodd, r0 - fma.s1 POW_q = POW_Z3sq, POW_q, POW_Z3 - sub pow_GR_true_exp_Y_Gpr = pow_GR_exp_Y_Gpr, pow_GR_16ones -} -;; - -// p8 TRUE ==> |Y(G + r)| >= 7 - -// single -// -2^7 -2^6 2^6 2^7 -// -----+-----+----+ ... +-----+-----+----- -// p8 | p9 | p8 -// | | p10 | | - -// Form signexp of constants to indicate overflow -{ .mfi - mov pow_GR_big_pos = 0x1007f - nop.f 999 - cmp.le p8,p9 = 7, pow_GR_true_exp_Y_Gpr -} -{ .mfi - mov pow_GR_big_neg = 0x3007f - nop.f 999 - andcm pow_GR_sign_Y_Gpr = pow_GR_signexp_Y_Gpr, pow_GR_17ones -} -;; - -// Form big positive and negative constants to test for possible overflow -// Scale both terms of the polynomial by POW_f123 -{ .mfi - setf.exp POW_big_pos = pow_GR_big_pos - fma.s1 POW_ssq = POW_ssq, POW_f123, f0 -(p9) cmp.le.unc p0,p10 = 6, pow_GR_true_exp_Y_Gpr -} -{ .mfb - setf.exp POW_big_neg = pow_GR_big_neg - fma.s1 POW_1ps = POW_s, POW_f123, POW_f123 -(p8) br.cond.spnt POW_OVER_UNDER_X_NOT_INF -} -;; - -{ .mfi - nop.m 999 -(p12) fnma.s1 POW_T1T2 = POW_T1, POW_T2, f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p13) fma.s1 POW_T1T2 = POW_T1, POW_T2, f0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 POW_v210 = POW_s, POW_v2, POW_Q0_half - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_2Mqp1 = POW_2M, POW_q, POW_2M - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 POW_es = POW_ssq, POW_v210, POW_1ps - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 POW_A = POW_T1T2, POW_2Mqp1, f0 - nop.i 999 -} -;; - -// Dummy op to set inexact -{ .mfi - nop.m 999 - fma.s0 POW_tmp = POW_2M, POW_q, POW_2M - nop.i 999 -} -;; - -{ .mfb - nop.m 999 - fma.s.s0 f8 = POW_A, POW_es, f0 -(p10) br.ret.sptk b0 // Exit main branch if no over/underflow -} -;; - -// POSSIBLE_OVER_UNDER -// p6 = TRUE ==> Y_Gpr negative -// Result is already computed. We just need to know if over/underflow occurred. - -{ .mfb - cmp.eq p0,p6 = pow_GR_sign_Y_Gpr, r0 - nop.f 999 -(p6) br.cond.spnt POW_POSSIBLE_UNDER -} -;; - -// POSSIBLE_OVER -// We got an answer. -// overflow is a possibility, not a certainty - - -// We define an overflow when the answer with -// WRE set -// user-defined rounding mode - -// double -// Largest double is 7FE (biased double) -// 7FE - 3FF + FFFF = 103FE -// Create + largest_double_plus_ulp -// Create - largest_double_plus_ulp -// Calculate answer with WRE set. - -// single -// Largest single is FE (biased double) -// FE - 7F + FFFF = 1007E -// Create + largest_single_plus_ulp -// Create - largest_single_plus_ulp -// Calculate answer with WRE set. - -// Cases when answer is ldn+1 are as follows: -// ldn ldn+1 -// --+----------|----------+------------ -// | -// +inf +inf -inf -// RN RN -// RZ - -// Put in s2 (td set, wre set) -{ .mfi - nop.m 999 - fsetc.s2 0x7F,0x42 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s.s2 POW_wre_urm_f8 = POW_A, POW_es, f0 - nop.i 999 -} -;; - -// Return s2 to default -{ .mfi - nop.m 999 - fsetc.s2 0x7F,0x40 - nop.i 999 -} -;; - -// p7 = TRUE ==> yes, we have an overflow -{ .mfi - nop.m 999 - fcmp.ge.s1 p7, p8 = POW_wre_urm_f8, POW_big_pos - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fcmp.le.s1 p7, p0 = POW_wre_urm_f8, POW_big_neg - nop.i 999 -} -;; - -{ .mbb -(p7) mov pow_GR_tag = 30 -(p7) br.cond.spnt __libm_error_region // Branch if overflow - br.ret.sptk b0 // Exit if did not overflow -} -;; - - -POW_POSSIBLE_UNDER: -// We got an answer. input was < -2^9 but > -2^10 (double) -// We got an answer. input was < -2^6 but > -2^7 (float) -// underflow is a possibility, not a certainty - -// We define an underflow when the answer with -// ftz set -// is zero (tiny numbers become zero) -// Notice (from below) that if we have an unlimited exponent range, -// then there is an extra machine number E between the largest denormal and -// the smallest normal. -// So if with unbounded exponent we round to E or below, then we are -// tiny and underflow has occurred. -// But notice that you can be in a situation where we are tiny, namely -// rounded to E, but when the exponent is bounded we round to smallest -// normal. So the answer can be the smallest normal with underflow. -// E -// -----+--------------------+--------------------+----- -// | | | -// 1.1...10 2^-3fff 1.1...11 2^-3fff 1.0...00 2^-3ffe -// 0.1...11 2^-3ffe (biased, 1) -// largest dn smallest normal - -// Form small constant (2^-170) to correct underflow result near region of -// smallest denormal in round-nearest. - -// Put in s2 (td set, ftz set) -.pred.rel "mutex",p12,p13 -{ .mfi - mov pow_GR_Fpsr = ar40 // Read the fpsr--need to check rc.s0 - fsetc.s2 0x7F,0x41 - mov pow_GR_rcs0_mask = 0x0c00 // Set mask for rc.s0 -} -{ .mfi -(p12) mov pow_GR_tmp = 0x2ffff - 170 - nop.f 999 -(p13) mov pow_GR_tmp = 0x0ffff - 170 -} -;; - -{ .mfi - setf.exp POW_eps = pow_GR_tmp // Form 2^-170 - fma.s.s2 POW_ftz_urm_f8 = POW_A, POW_es, f0 - nop.i 999 -} -;; - -// Return s2 to default -{ .mfi - nop.m 999 - fsetc.s2 0x7F,0x40 - nop.i 999 -} -;; - -// p7 = TRUE ==> yes, we have an underflow -{ .mfi - nop.m 999 - fcmp.eq.s1 p7, p0 = POW_ftz_urm_f8, f0 - nop.i 999 -} -;; - -{ .mmi -(p7) and pow_GR_rcs0 = pow_GR_rcs0_mask, pow_GR_Fpsr // Isolate rc.s0 -;; -(p7) cmp.eq.unc p6,p0 = pow_GR_rcs0, r0 // Test for round to nearest - nop.i 999 -} -;; - -// Tweak result slightly if underflow to get correct rounding near smallest -// denormal if round-nearest -{ .mfi - nop.m 999 -(p6) fms.s.s0 f8 = POW_A, POW_es, POW_eps - nop.i 999 -} -{ .mbb -(p7) mov pow_GR_tag = 31 -(p7) br.cond.spnt __libm_error_region // Branch if underflow - br.ret.sptk b0 // Exit if did not underflow -} -;; - -POW_X_DENORM: -// Here if x unorm. Use the NORM_X for getf instructions, and then back -// to normal path -{ .mfi - getf.exp pow_GR_signexp_X = POW_NORM_X - nop.f 999 - nop.i 999 -} -;; - -{ .mib - getf.sig pow_GR_sig_X = POW_NORM_X - nop.i 999 - br.cond.sptk POW_COMMON -} -;; - -POW_X_0: -// Here if x=0 and y not nan -// -// We have the following cases: -// p6 x=0 and y>0 and is an integer (may be even or odd) -// p7 x=0 and y>0 and is NOT an integer, return +0 -// p8 x=0 and y>0 and so big as to always be an even integer, return +0 -// p9 x=0 and y>0 and may not be integer -// p10 x=0 and y>0 and is an odd integer, return x -// p11 x=0 and y>0 and is an even integer, return +0 -// p12 used in dummy fcmp to set denormal flag if y=unorm -// p13 x=0 and y>0 -// p14 x=0 and y=0, branch to code for calling error handling -// p15 x=0 and y<0, branch to code for calling error handling -// -{ .mfi - getf.sig pow_GR_sig_int_Y = POW_int_Y // Get signif of int_Y - fcmp.lt.s1 p15,p13 = f9, f0 // Test for y<0 - and pow_GR_exp_Y = pow_GR_signexp_Y, pow_GR_17ones -} -{ .mfb - cmp.ne p14,p0 = pow_GR_y_zero,r0 // Test for y=0 - fcvt.xf POW_float_int_Y = POW_int_Y -(p14) br.cond.spnt POW_X_0_Y_0 // Branch if x=0 and y=0 -} -;; - -// If x=0 and y>0, test y and flag denormal -{ .mfb -(p13) cmp.gt.unc p8,p9 = pow_GR_exp_Y, pow_GR_10033 // Test y +big = even int -(p13) fcmp.eq.s0 p12,p0 = f9,f0 // If x=0, y>0 dummy op to flag denormal -(p15) br.cond.spnt POW_X_0_Y_NEG // Branch if x=0 and y<0 -} -;; - -// Here if x=0 and y>0 -{ .mfi - nop.m 999 -(p9) fcmp.eq.unc.s1 p6,p7 = POW_float_int_Y, POW_NORM_Y // Test y=int - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s.s0 f8 = f0,f0,f0 // If x=0, y>0 and large even int, return +0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p7) fma.s.s0 f8 = f0,f0,f0 // Result +0 if x=0 and y>0 and not integer -(p6) tbit.nz.unc p10,p11 = pow_GR_sig_int_Y,0 // If y>0 int, test y even/odd -} -;; - -// Note if x=0, y>0 and odd integer, just return x -{ .mfb - nop.m 999 -(p11) fma.s.s0 f8 = f0,f0,f0 // Result +0 if x=0 and y even integer - br.ret.sptk b0 // Exit if x=0 and y>0 -} -;; - -POW_X_0_Y_0: -// When X is +-0 and Y is +-0, IEEE returns 1.0 -// We call error support with this value - -{ .mfb - mov pow_GR_tag = 32 - fma.s.s0 f8 = f1,f1,f0 - br.cond.sptk __libm_error_region -} -;; - -POW_X_0_Y_NEG: -// When X is +-0 and Y is negative, IEEE returns -// X Y answer -// +0 -odd int +inf -// -0 -odd int -inf - -// +0 !-odd int +inf -// -0 !-odd int +inf - -// p6 == Y is a floating point number outside the integer. -// Hence it is an integer and is even. -// return +inf - -// p7 == Y is a floating point number within the integer range. -// p9 == (int_Y = NORM_Y), Y is an integer, which may be odd or even. -// p11 odd -// return (sign_of_x)inf -// p12 even -// return +inf -// p10 == Y is not an integer -// return +inf -// - -{ .mfi - nop.m 999 - nop.f 999 - cmp.gt p6,p7 = pow_GR_exp_Y, pow_GR_10033 -} -;; - -{ .mfi - mov pow_GR_tag = 33 -(p7) fcmp.eq.unc.s1 p9,p10 = POW_float_int_Y, POW_NORM_Y - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p6) frcpa.s0 f8,p13 = f1, f0 -(p6) br.cond.sptk __libm_error_region // x=0, y<0, y large neg int -} -;; - -{ .mfb - nop.m 999 -(p10) frcpa.s0 f8,p13 = f1, f0 -(p10) br.cond.sptk __libm_error_region // x=0, y<0, y not int -} -;; - -// x=0, y<0, y an int -{ .mib - nop.m 999 -(p9) tbit.nz.unc p11,p12 = pow_GR_sig_int_Y,0 - nop.b 999 -} -;; - -{ .mfi - nop.m 999 -(p12) frcpa.s0 f8,p13 = f1,f0 - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p11) frcpa.s0 f8,p13 = f1,f8 - br.cond.sptk __libm_error_region -} -;; - - -POW_Y_0: -// Here for y zero, x anything but zero and nan -// Set flag if x denormal -// Result is +1.0 -{ .mfi - nop.m 999 - fcmp.eq.s0 p6,p0 = f8,f0 // Sets flag if x denormal - nop.i 999 -} -{ .mfb - nop.m 999 - fma.s.s0 f8 = f1,f1,f0 - br.ret.sptk b0 -} -;; - - -POW_X_INF: -// Here when X is +-inf - -// X +inf Y +inf +inf -// X -inf Y +inf +inf - -// X +inf Y >0 +inf -// X -inf Y >0, !odd integer +inf <== (-inf)^0.5 = +inf !! -// X -inf Y >0, odd integer -inf - -// X +inf Y -inf +0 -// X -inf Y -inf +0 - -// X +inf Y <0 +0 -// X -inf Y <0, !odd integer +0 -// X -inf Y <0, odd integer -0 - -// X + inf Y=+0 +1 -// X + inf Y=-0 +1 -// X - inf Y=+0 +1 -// X - inf Y=-0 +1 - -// p13 == Y negative -// p14 == Y positive - -// p6 == Y is a floating point number outside the integer. -// Hence it is an integer and is even. -// p13 == (Y negative) -// return +inf -// p14 == (Y positive) -// return +0 - -// p7 == Y is a floating point number within the integer range. -// p9 == (int_Y = NORM_Y), Y is an integer, which may be odd or even. -// p11 odd -// p13 == (Y negative) -// return (sign_of_x)inf -// p14 == (Y positive) -// return (sign_of_x)0 -// pxx even -// p13 == (Y negative) -// return +inf -// p14 == (Y positive) -// return +0 - -// pxx == Y is not an integer -// p13 == (Y negative) -// return +inf -// p14 == (Y positive) -// return +0 -// - -// If x=inf, test y and flag denormal -{ .mfi - nop.m 999 - fcmp.eq.s0 p10,p11 = f9,f0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fcmp.lt.s0 p13,p14 = POW_NORM_Y,f0 - cmp.gt p6,p7 = pow_GR_exp_Y, pow_GR_10033 -} -{ .mfi - nop.m 999 - fclass.m p12,p0 = f9, 0x23 //@inf - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p15,p0 = f9, 0x07 //@zero - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p15) fmerge.s f8 = f1,f1 // Return +1.0 if x=inf, y=0 -(p15) br.ret.spnt b0 // Exit if x=inf, y=0 -} -;; - -{ .mfi - nop.m 999 -(p14) frcpa.s1 f8,p10 = f1,f0 // If x=inf, y>0, assume result +inf - nop.i 999 -} -{ .mfb - nop.m 999 -(p13) fma.s.s0 f8 = f0,f0,f0 // If x=inf, y<0, assume result +0.0 -(p12) br.ret.spnt b0 // Exit if x=inf, y=inf -} -;; - -// Here if x=inf, and 0 < |y| < inf. Need to correct results if y odd integer. -{ .mfi - nop.m 999 -(p7) fcmp.eq.unc.s1 p9,p0 = POW_float_int_Y, POW_NORM_Y // Is y integer? - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - nop.f 999 -(p9) tbit.nz.unc p11,p0 = pow_GR_sig_int_Y,0 // Test for y odd integer -} -;; - -{ .mfb - nop.m 999 -(p11) fmerge.s f8 = POW_NORM_X,f8 // If y odd integer use sign of x - br.ret.sptk b0 // Exit for x=inf, 0 < |y| < inf -} -;; - - -POW_X_NEG_Y_NONINT: -// When X is negative and Y is a non-integer, IEEE -// returns a qnan indefinite. -// We call error support with this value - -{ .mfb - mov pow_GR_tag = 34 - frcpa.s0 f8,p6 = f0,f0 - br.cond.sptk __libm_error_region -} -;; - -POW_X_NAN: -// Here if x=nan, y not nan -{ .mfi - nop.m 999 - fclass.m p9,p13 = f9, 0x07 // Test y=zero - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p13) fma.s.s0 f8 = f8,f1,f0 -(p13) br.ret.sptk b0 // Exit if x nan, y anything but zero or nan -} -;; - -POW_X_NAN_Y_0: -// When X is a NAN and Y is zero, IEEE returns 1. -// We call error support with this value. -{ .mfi - nop.m 999 - fcmp.eq.s0 p6,p0 = f8,f0 // Dummy op to set invalid on snan - nop.i 999 -} -{ .mfb - mov pow_GR_tag = 35 - fma.s.s0 f8 = f0,f0,f1 - br.cond.sptk __libm_error_region -} -;; - - -POW_OVER_UNDER_X_NOT_INF: - -// p8 is TRUE for overflow -// p9 is TRUE for underflow - -// if y is infinity, we should not over/underflow - -{ .mfi - nop.m 999 - fcmp.eq.s1 p14, p13 = POW_xsq,f1 // Test |x|=1 - cmp.eq p8,p9 = pow_GR_sign_Y_Gpr, r0 -} -;; - -{ .mfi - nop.m 999 -(p14) fclass.m.unc p15, p0 = f9, 0x23 // If |x|=1, test y=inf - nop.i 999 -} -{ .mfi - nop.m 999 -(p13) fclass.m.unc p11,p0 = f9, 0x23 // If |x| not 1, test y=inf - nop.i 999 -} -;; - -// p15 = TRUE if |x|=1, y=inf, return +1 -{ .mfb - nop.m 999 -(p15) fma.s.s0 f8 = f1,f1,f0 // If |x|=1, y=inf, result +1 -(p15) br.ret.spnt b0 // Exit if |x|=1, y=inf -} -;; - -.pred.rel "mutex",p8,p9 -{ .mfb -(p8) setf.exp f8 = pow_GR_17ones // If exp(+big), result inf -(p9) fmerge.s f8 = f0,f0 // If exp(-big), result 0 -(p11) br.ret.sptk b0 // Exit if |x| not 1, y=inf -} -;; - -{ .mfb - nop.m 999 - nop.f 999 - br.cond.sptk POW_OVER_UNDER_ERROR // Branch if y not inf -} -;; - - -POW_Y_NAN: -// Here if y=nan, x anything -// If x = +1 then result is +1, else result is quiet Y -{ .mfi - nop.m 999 - fcmp.eq.s1 p10,p9 = POW_NORM_X, f1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p10) fcmp.eq.s0 p6,p0 = f9,f1 // Set invalid, even if x=+1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p10) fma.s.s0 f8 = f1,f1,f0 - nop.i 999 -} -{ .mfb - nop.m 999 -(p9) fma.s.s0 f8 = f9,f8,f0 - br.ret.sptk b0 // Exit y=nan -} -;; - - -POW_OVER_UNDER_ERROR: -// Here if we have overflow or underflow. -// Enter with p12 true if x negative and y odd int to force -0 or -inf - -{ .mfi - sub pow_GR_17ones_m1 = pow_GR_17ones, r0, 1 - nop.f 999 - mov pow_GR_one = 0x1 -} -;; - -// overflow, force inf with O flag -{ .mmb -(p8) mov pow_GR_tag = 30 -(p8) setf.exp POW_tmp = pow_GR_17ones_m1 - nop.b 999 -} -;; - -// underflow, force zero with I, U flags -{ .mmi -(p9) mov pow_GR_tag = 31 -(p9) setf.exp POW_tmp = pow_GR_one - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s.s0 f8 = POW_tmp, POW_tmp, f0 - nop.i 999 -} -;; - -// p12 x is negative and y is an odd integer, change sign of result -{ .mfi - nop.m 999 -(p12) fnma.s.s0 f8 = POW_tmp, POW_tmp, f0 - nop.i 999 -} -;; - -GLOBAL_LIBM_END(powf) - - -LOCAL_LIBM_ENTRY(__libm_error_region) - -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfs [GR_Parameter_Y] = POW_NORM_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfs [GR_Parameter_X] = POW_NORM_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_powl.S b/sysdeps/ia64/fpu/e_powl.S deleted file mode 100644 index 3f93f6090e..0000000000 --- a/sysdeps/ia64/fpu/e_powl.S +++ /dev/null @@ -1,2810 +0,0 @@ -.file "powl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// Function: powl(x,y), where -// y -// powl(x,y) = x , for double extended precision x and y values -// -//********************************************************************* -// -// History: -// 02/02/00 (Hand Optimized) -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 01/22/01 Corrected results for powl(1,inf), powl(1,nan), and -// powl(snan,0) to be 1 per C99, not nan. Fixed many flag settings. -// 02/06/01 Call __libm_error support if over/underflow when y=2. -// 04/17/01 Support added for y close to 1 and x a non-special value. -// Shared software under/overflow detection for all paths -// 02/07/02 Corrected sf3 setting to disable traps -// 05/13/02 Improved performance of all paths -// 02/10/03 Reordered header: .section, .global, .proc, .align; -// used data8 for long double table values -// 04/17/03 Added missing mutex directive -// 10/13/03 Corrected .endp names to match .proc names -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: -// f8 (Input x and Return Value) -// f9 (Input y) -// f10-f15,f32-f79 -// -// General Purpose Registers: -// Locals r14-24,r32-r65 -// Parameters to __libm_error_support r62,r63,r64,r65 -// -// Predicate Registers: p6-p15 -// -//********************************************************************* -// -// Special Cases and IEEE special conditions: -// -// Denormal fault raised on denormal inputs -// Overflow exceptions raised when appropriate for pow -// Underflow exceptions raised when appropriate for pow -// (Error Handling Routine called for overflow and Underflow) -// Inexact raised when appropriate by algorithm -// -// 1. (anything) ** NatVal or (NatVal) ** anything is NatVal -// 2. X or Y unsupported or sNaN is qNaN/Invalid -// 3. (anything) ** 0 is 1 -// 4. (anything) ** 1 is itself -// 5. (anything except 1) ** qNAN is qNAN -// 6. qNAN ** (anything except 0) is qNAN -// 7. +-(|x| > 1) ** +INF is +INF -// 8. +-(|x| > 1) ** -INF is +0 -// 9. +-(|x| < 1) ** +INF is +0 -// 10. +-(|x| < 1) ** -INF is +INF -// 11. +-1 ** +-INF is +1 -// 12. +0 ** (+anything except 0, NAN) is +0 -// 13. -0 ** (+anything except 0, NAN, odd integer) is +0 -// 14. +0 ** (-anything except 0, NAN) is +INF/div_0 -// 15. -0 ** (-anything except 0, NAN, odd integer) is +INF/div_0 -// 16. -0 ** (odd integer) = -( +0 ** (odd integer) ) -// 17. +INF ** (+anything except 0,NAN) is +INF -// 18. +INF ** (-anything except 0,NAN) is +0 -// 19. -INF ** (anything except NAN) = -0 ** (-anything) -// 20. (-anything) ** (integer) is (-1)**(integer)*(+anything**integer) -// 21. (-anything except 0 and inf) ** (non-integer) is qNAN/Invalid -// 22. X or Y denorm/unorm and denorm/unorm operand trap is enabled, -// generate denorm/unorm fault except if invalid or div_0 raised. -// -//********************************************************************* -// -// Algorithm -// ========= -// -// Special Cases -// -// If Y = 2, return X*X. -// If Y = 0.5, return sqrt(X). -// -// Compute log(X) to extra precision. -// -// ker_log_80( X, logX_hi, logX_lo, Safe ); -// -// ...logX_hi + logX_lo approximates log(X) to roughly 80 -// ...significant bits of accuracy. -// -// Compute Y*log(X) to extra precision. -// -// P_hi := Y * logX_hi -// P_lo := Y * logX_hi - P_hi ...using FMA -// P_lo := Y * logX_lo + P_lo ...using FMA -// -// Compute exp(P_hi + P_lo) -// -// Flag := 2; -// Expo_Range := 2; (assuming double-extended power function) -// ker_exp_64( P_hi, P_lo, Flag, Expo_Range, -// Z_hi, Z_lo, scale, Safe ) -// -// scale := sgn * scale -// -// If (Safe) then ...result will not over/underflow -// return scale*Z_hi + (scale*Z_lo) -// quickly -// Else -// take necessary precaution in computing -// scale*Z_hi + (scale*Z_lo) -// to set possible exceptions correctly. -// End If -// -// Case_Y_Special -// -// ...Follow the order of the case checks -// -// If Y is +-0, return +1 without raising any exception. -// If Y is +1, return X without raising any exception. -// If Y is qNaN, return Y without exception. -// If X is qNaN, return X without exception. -// -// At this point, X is real and Y is +-inf. -// Thus |X| can only be 1, strictly bigger than 1, or -// strictly less than 1. -// -// If |X| < 1, then -// return ( Y == +inf? +0 : +inf ) -// elseif |X| > 1, then -// return ( Y == +inf? +0 : +inf ) -// else -// goto Case_Invalid -// -// Case_X_Special -// -// ...Follow the order of the case checks -// ...Note that Y is real, finite, non-zero, and not +1. -// -// If X is qNaN, return X without exception. -// -// If X is +-0, -// return ( Y > 0 ? +0 : +inf ) -// -// If X is +inf -// return ( Y > 0 ? +inf : +0 ) -// -// If X is -inf -// return -0 ** -Y -// return ( Y > 0 ? +inf : +0 ) -// -// Case_Invalid -// -// Return 0 * inf to generate a quiet NaN together -// with an invalid exception. -// -// Implementation -// ============== -// -// We describe the quick branch since this part is important -// in reaching the normal case efficiently. -// -// STAGE 1 -// ------- -// This stage contains two threads. -// -// Stage1.Thread1 -// -// fclass.m X_excep, X_ok = X, (NatVal or s/qNaN) or -// +-0, +-infinity -// -// fclass.nm X_unsupp, X_supp = X, (NatVal or s/qNaN) or -// +-(0, unnorm, norm, infinity) -// -// X_norm := fnorm( X ) with traps disabled -// -// If (X_excep) goto Filtering (Step 2) -// If (X_unsupp) goto Filtering (Step 2) -// -// Stage1.Thread2 -// .............. -// -// fclass.m Y_excep, Y_ok = Y, (NatVal or s/qNaN) or -// +-0, +-infinity -// -// fclass.nm Y_unsupp, Y_supp = Y, (NatVal or s/qNaN) or -// +-(0, unnorm, norm, infinity) -// -// Y_norm := fnorm( Y ) with traps disabled -// -// If (Y_excep) goto Filtering (Step 2) -// If (Y_unsupp) goto Filtering (Step 2) -// -// -// STAGE 2 -// ------- -// This stage contains two threads. -// -// Stage2.Thread1 -// .............. -// -// Set X_lt_0 if X < 0 (using fcmp) -// sgn := +1.0 -// If (X_lt_0) goto Filtering (Step 2) -// -// Stage2.Thread2 -// .............. -// -// Set Y_is_1 if Y = +1 (using fcmp) -// If (Y_is_1) goto Filtering (Step 2) -// -// STAGE 3 -// ------- -// This stage contains two threads. -// -// -// Stage3.Thread1 -// .............. -// -// X := fnorm(X) in prevailing traps -// -// -// Stage3.Thread2 -// .............. -// -// Y := fnorm(Y) in prevailing traps -// -// STAGE 4 -// ------- -// -// Go to Case_Normal. -// - - -// ************* DO NOT CHANGE ORDER OF THESE TABLES ******************** - -// double-extended 1/ln(2) -// 3fff b8aa 3b29 5c17 f0bb be87fed0691d3e88 -// 3fff b8aa 3b29 5c17 f0bc -// For speed the significand will be loaded directly with a movl and setf.sig -// and the exponent will be bias+63 instead of bias+0. Thus subsequent -// computations need to scale appropriately. -// The constant 2^12/ln(2) is needed for the computation of N. This is also -// obtained by scaling the computations. -// -// Two shifting constants are loaded directly with movl and setf.d. -// 1. RSHF_2TO51 = 1.1000..00 * 2^(63-12) -// This constant is added to x*1/ln2 to shift the integer part of -// x*2^12/ln2 into the rightmost bits of the significand. -// The result of this fma is N_signif. -// 2. RSHF = 1.1000..00 * 2^(63) -// This constant is subtracted from N_signif * 2^(-51) to give -// the integer part of N, N_fix, as a floating-point number. -// The result of this fms is float_N. -RODATA - -.align 16 -// L_hi, L_lo -LOCAL_OBJECT_START(Constants_exp_64_Arg) -data8 0xB17217F400000000,0x00003FF2 // L_hi = hi part log(2)/2^12 -data8 0xF473DE6AF278ECE6,0x00003FD4 // L_lo = lo part log(2)/2^12 -LOCAL_OBJECT_END(Constants_exp_64_Arg) - -LOCAL_OBJECT_START(Constants_exp_64_A) -// Reversed -data8 0xAAAAAAABB1B736A0,0x00003FFA -data8 0xAAAAAAAB90CD6327,0x00003FFC -data8 0xFFFFFFFFFFFFFFFF,0x00003FFD -LOCAL_OBJECT_END(Constants_exp_64_A) - -LOCAL_OBJECT_START(Constants_exp_64_P) -// Reversed -data8 0xD00D6C8143914A8A,0x00003FF2 -data8 0xB60BC4AC30304B30,0x00003FF5 -data8 0x888888887474C518,0x00003FF8 -data8 0xAAAAAAAA8DAE729D,0x00003FFA -data8 0xAAAAAAAAAAAAAF61,0x00003FFC -data8 0x80000000000004C7,0x00003FFE -LOCAL_OBJECT_END(Constants_exp_64_P) - -LOCAL_OBJECT_START(Constants_exp_64_T1) -data4 0x3F800000,0x3F8164D2,0x3F82CD87,0x3F843A29 -data4 0x3F85AAC3,0x3F871F62,0x3F88980F,0x3F8A14D5 -data4 0x3F8B95C2,0x3F8D1ADF,0x3F8EA43A,0x3F9031DC -data4 0x3F91C3D3,0x3F935A2B,0x3F94F4F0,0x3F96942D -data4 0x3F9837F0,0x3F99E046,0x3F9B8D3A,0x3F9D3EDA -data4 0x3F9EF532,0x3FA0B051,0x3FA27043,0x3FA43516 -data4 0x3FA5FED7,0x3FA7CD94,0x3FA9A15B,0x3FAB7A3A -data4 0x3FAD583F,0x3FAF3B79,0x3FB123F6,0x3FB311C4 -data4 0x3FB504F3,0x3FB6FD92,0x3FB8FBAF,0x3FBAFF5B -data4 0x3FBD08A4,0x3FBF179A,0x3FC12C4D,0x3FC346CD -data4 0x3FC5672A,0x3FC78D75,0x3FC9B9BE,0x3FCBEC15 -data4 0x3FCE248C,0x3FD06334,0x3FD2A81E,0x3FD4F35B -data4 0x3FD744FD,0x3FD99D16,0x3FDBFBB8,0x3FDE60F5 -data4 0x3FE0CCDF,0x3FE33F89,0x3FE5B907,0x3FE8396A -data4 0x3FEAC0C7,0x3FED4F30,0x3FEFE4BA,0x3FF28177 -data4 0x3FF5257D,0x3FF7D0DF,0x3FFA83B3,0x3FFD3E0C -LOCAL_OBJECT_END(Constants_exp_64_T1) - -LOCAL_OBJECT_START(Constants_exp_64_T2) -data4 0x3F800000,0x3F80058C,0x3F800B18,0x3F8010A4 -data4 0x3F801630,0x3F801BBD,0x3F80214A,0x3F8026D7 -data4 0x3F802C64,0x3F8031F2,0x3F803780,0x3F803D0E -data4 0x3F80429C,0x3F80482B,0x3F804DB9,0x3F805349 -data4 0x3F8058D8,0x3F805E67,0x3F8063F7,0x3F806987 -data4 0x3F806F17,0x3F8074A8,0x3F807A39,0x3F807FCA -data4 0x3F80855B,0x3F808AEC,0x3F80907E,0x3F809610 -data4 0x3F809BA2,0x3F80A135,0x3F80A6C7,0x3F80AC5A -data4 0x3F80B1ED,0x3F80B781,0x3F80BD14,0x3F80C2A8 -data4 0x3F80C83C,0x3F80CDD1,0x3F80D365,0x3F80D8FA -data4 0x3F80DE8F,0x3F80E425,0x3F80E9BA,0x3F80EF50 -data4 0x3F80F4E6,0x3F80FA7C,0x3F810013,0x3F8105AA -data4 0x3F810B41,0x3F8110D8,0x3F81166F,0x3F811C07 -data4 0x3F81219F,0x3F812737,0x3F812CD0,0x3F813269 -data4 0x3F813802,0x3F813D9B,0x3F814334,0x3F8148CE -data4 0x3F814E68,0x3F815402,0x3F81599C,0x3F815F37 -LOCAL_OBJECT_END(Constants_exp_64_T2) - -LOCAL_OBJECT_START(Constants_exp_64_W1) -data8 0x0000000000000000, 0xBE384454171EC4B4 -data8 0xBE6947414AA72766, 0xBE5D32B6D42518F8 -data8 0x3E68D96D3A319149, 0xBE68F4DA62415F36 -data8 0xBE6DDA2FC9C86A3B, 0x3E6B2E50F49228FE -data8 0xBE49C0C21188B886, 0x3E64BFC21A4C2F1F -data8 0xBE6A2FBB2CB98B54, 0x3E5DC5DE9A55D329 -data8 0x3E69649039A7AACE, 0x3E54728B5C66DBA5 -data8 0xBE62B0DBBA1C7D7D, 0x3E576E0409F1AF5F -data8 0x3E6125001A0DD6A1, 0xBE66A419795FBDEF -data8 0xBE5CDE8CE1BD41FC, 0xBE621376EA54964F -data8 0x3E6370BE476E76EE, 0x3E390D1A3427EB92 -data8 0x3E1336DE2BF82BF8, 0xBE5FF1CBD0F7BD9E -data8 0xBE60A3550CEB09DD, 0xBE5CA37E0980F30D -data8 0xBE5C541B4C082D25, 0xBE5BBECA3B467D29 -data8 0xBE400D8AB9D946C5, 0xBE5E2A0807ED374A -data8 0xBE66CB28365C8B0A, 0x3E3AAD5BD3403BCA -data8 0x3E526055C7EA21E0, 0xBE442C75E72880D6 -data8 0x3E58B2BB85222A43, 0xBE5AAB79522C42BF -data8 0xBE605CB4469DC2BC, 0xBE589FA7A48C40DC -data8 0xBE51C2141AA42614, 0xBE48D087C37293F4 -data8 0x3E367A1CA2D673E0, 0xBE51BEBB114F7A38 -data8 0xBE6348E5661A4B48, 0xBDF526431D3B9962 -data8 0x3E3A3B5E35A78A53, 0xBE46C46C1CECD788 -data8 0xBE60B7EC7857D689, 0xBE594D3DD14F1AD7 -data8 0xBE4F9C304C9A8F60, 0xBE52187302DFF9D2 -data8 0xBE5E4C8855E6D68F, 0xBE62140F667F3DC4 -data8 0xBE36961B3BF88747, 0x3E602861C96EC6AA -data8 0xBE3B5151D57FD718, 0x3E561CD0FC4A627B -data8 0xBE3A5217CA913FEA, 0x3E40A3CC9A5D193A -data8 0xBE5AB71310A9C312, 0x3E4FDADBC5F57719 -data8 0x3E361428DBDF59D5, 0x3E5DB5DB61B4180D -data8 0xBE42AD5F7408D856, 0x3E2A314831B2B707 -LOCAL_OBJECT_END(Constants_exp_64_W1) - -LOCAL_OBJECT_START(Constants_exp_64_W2) -data8 0x0000000000000000, 0xBE641F2537A3D7A2 -data8 0xBE68DD57AD028C40, 0xBE5C77D8F212B1B6 -data8 0x3E57878F1BA5B070, 0xBE55A36A2ECAE6FE -data8 0xBE620608569DFA3B, 0xBE53B50EA6D300A3 -data8 0x3E5B5EF2223F8F2C, 0xBE56A0D9D6DE0DF4 -data8 0xBE64EEF3EAE28F51, 0xBE5E5AE2367EA80B -data8 0x3E47CB1A5FCBC02D, 0xBE656BA09BDAFEB7 -data8 0x3E6E70C6805AFEE7, 0xBE6E0509A3415EBA -data8 0xBE56856B49BFF529, 0x3E66DD3300508651 -data8 0x3E51165FC114BC13, 0x3E53333DC453290F -data8 0x3E6A072B05539FDA, 0xBE47CD877C0A7696 -data8 0xBE668BF4EB05C6D9, 0xBE67C3E36AE86C93 -data8 0xBE533904D0B3E84B, 0x3E63E8D9556B53CE -data8 0x3E212C8963A98DC8, 0xBE33138F032A7A22 -data8 0x3E530FA9BC584008, 0xBE6ADF82CCB93C97 -data8 0x3E5F91138370EA39, 0x3E5443A4FB6A05D8 -data8 0x3E63DACD181FEE7A, 0xBE62B29DF0F67DEC -data8 0x3E65C4833DDE6307, 0x3E5BF030D40A24C1 -data8 0x3E658B8F14E437BE, 0xBE631C29ED98B6C7 -data8 0x3E6335D204CF7C71, 0x3E529EEDE954A79D -data8 0x3E5D9257F64A2FB8, 0xBE6BED1B854ED06C -data8 0x3E5096F6D71405CB, 0xBE3D4893ACB9FDF5 -data8 0xBDFEB15801B68349, 0x3E628D35C6A463B9 -data8 0xBE559725ADE45917, 0xBE68C29C042FC476 -data8 0xBE67593B01E511FA, 0xBE4A4313398801ED -data8 0x3E699571DA7C3300, 0x3E5349BE08062A9E -data8 0x3E5229C4755BB28E, 0x3E67E42677A1F80D -data8 0xBE52B33F6B69C352, 0xBE6B3550084DA57F -data8 0xBE6DB03FD1D09A20, 0xBE60CBC42161B2C1 -data8 0x3E56ED9C78A2B771, 0xBE508E319D0FA795 -data8 0xBE59482AFD1A54E9, 0xBE2A17CEB07FD23E -data8 0x3E68BF5C17365712, 0x3E3956F9B3785569 -LOCAL_OBJECT_END(Constants_exp_64_W2) - -LOCAL_OBJECT_START(Constants_log_80_P) -// P_8, P_7, ..., P_1 -data8 0xCCCE8B883B1042BC, 0x0000BFFB // P_8 -data8 0xE38997B7CADC2149, 0x00003FFB // P_7 -data8 0xFFFFFFFEB1ACB090, 0x0000BFFB // P_6 -data8 0x9249249806481C81, 0x00003FFC // P_5 -data8 0x0000000000000000, 0x00000000 // Pad for bank conflicts -data8 0xAAAAAAAAAAAAB0EF, 0x0000BFFC // P_4 -data8 0xCCCCCCCCCCC91416, 0x00003FFC // P_3 -data8 0x8000000000000000, 0x0000BFFD // P_2 -data8 0xAAAAAAAAAAAAAAAB, 0x00003FFD // P_1 -LOCAL_OBJECT_END(Constants_log_80_P) - -LOCAL_OBJECT_START(Constants_log_80_Q) -// log2_hi, log2_lo, Q_6, Q_5, Q_4, Q_3, Q_2, Q_1 -data8 0xB172180000000000,0x00003FFE -data8 0x82E308654361C4C6,0x0000BFE2 -data8 0x92492453A51BE0AF,0x00003FFC -data8 0xAAAAAB73A0CFD29F,0x0000BFFC -data8 0xCCCCCCCCCCCE3872,0x00003FFC -data8 0xFFFFFFFFFFFFB4FB,0x0000BFFC -data8 0xAAAAAAAAAAAAAAAB,0x00003FFD -data8 0x8000000000000000,0x0000BFFE -LOCAL_OBJECT_END(Constants_log_80_Q) - -LOCAL_OBJECT_START(Constants_log_80_Z_G_H_h1) -// Z1 - 16 bit fixed, G1 and H1 IEEE single, h1 IEEE double -data4 0x00008000,0x3F800000,0x00000000,0x00000000 -data4 0x00000000,0x00000000,0x00000000,0x00000000 -data4 0x00007879,0x3F70F0F0,0x3D785196,0x00000000 -data4 0xEBA0E0D1,0x8B1D330B,0x00003FDA,0x00000000 -data4 0x000071C8,0x3F638E38,0x3DF13843,0x00000000 -data4 0x9EADD553,0xE2AF365E,0x00003FE2,0x00000000 -data4 0x00006BCB,0x3F579430,0x3E2FF9A0,0x00000000 -data4 0x752F34A2,0xF585FEC3,0x0000BFE3,0x00000000 -data4 0x00006667,0x3F4CCCC8,0x3E647FD6,0x00000000 -data4 0x893B03F3,0xF3546435,0x00003FE2,0x00000000 -data4 0x00006187,0x3F430C30,0x3E8B3AE7,0x00000000 -data4 0x39CDD2AC,0xBABA62E0,0x00003FE4,0x00000000 -data4 0x00005D18,0x3F3A2E88,0x3EA30C68,0x00000000 -data4 0x457978A1,0x8718789F,0x00003FE2,0x00000000 -data4 0x0000590C,0x3F321640,0x3EB9CEC8,0x00000000 -data4 0x3185E56A,0x9442DF96,0x0000BFE4,0x00000000 -data4 0x00005556,0x3F2AAAA8,0x3ECF9927,0x00000000 -data4 0x2BBE2CBD,0xCBF9A4BF,0x00003FE4,0x00000000 -data4 0x000051EC,0x3F23D708,0x3EE47FC5,0x00000000 -data4 0x852D5935,0xF3537535,0x00003FE3,0x00000000 -data4 0x00004EC5,0x3F1D89D8,0x3EF8947D,0x00000000 -data4 0x46CDF32F,0xA1F1E699,0x0000BFDF,0x00000000 -data4 0x00004BDB,0x3F17B420,0x3F05F3A1,0x00000000 -data4 0xD8484CE3,0x84A61856,0x00003FE4,0x00000000 -data4 0x00004925,0x3F124920,0x3F0F4303,0x00000000 -data4 0xFF28821B,0xC7DD97E0,0x0000BFE2,0x00000000 -data4 0x0000469F,0x3F0D3DC8,0x3F183EBF,0x00000000 -data4 0xEF1FD32F,0xD3C4A887,0x00003FE3,0x00000000 -data4 0x00004445,0x3F088888,0x3F20EC80,0x00000000 -data4 0x464C76DA,0x84672BE6,0x00003FE5,0x00000000 -data4 0x00004211,0x3F042108,0x3F29516A,0x00000000 -data4 0x18835FB9,0x9A43A511,0x0000BFE5,0x00000000 -LOCAL_OBJECT_END(Constants_log_80_Z_G_H_h1) - -LOCAL_OBJECT_START(Constants_log_80_Z_G_H_h2) -// Z2 - 16 bit fixed, G2 and H2 IEEE single, h2 IEEE double -data4 0x00008000,0x3F800000,0x00000000,0x00000000 -data4 0x00000000,0x00000000,0x00000000,0x00000000 -data4 0x00007F81,0x3F7F00F8,0x3B7F875D,0x00000000 -data4 0x211398BF,0xAD08B116,0x00003FDB,0x00000000 -data4 0x00007F02,0x3F7E03F8,0x3BFF015B,0x00000000 -data4 0xC376958E,0xB106790F,0x00003FDE,0x00000000 -data4 0x00007E85,0x3F7D08E0,0x3C3EE393,0x00000000 -data4 0x79A7679A,0xFD03F242,0x0000BFDA,0x00000000 -data4 0x00007E08,0x3F7C0FC0,0x3C7E0586,0x00000000 -data4 0x05E7AE08,0xF03F81C3,0x0000BFDF,0x00000000 -data4 0x00007D8D,0x3F7B1880,0x3C9E75D2,0x00000000 -data4 0x049EB22F,0xD1B87D3C,0x00003FDE,0x00000000 -data4 0x00007D12,0x3F7A2328,0x3CBDC97A,0x00000000 -data4 0x3A9E81E0,0xFABC8B95,0x00003FDF,0x00000000 -data4 0x00007C98,0x3F792FB0,0x3CDCFE47,0x00000000 -data4 0x7C4B5443,0xF5F3653F,0x00003FDF,0x00000000 -data4 0x00007C20,0x3F783E08,0x3CFC15D0,0x00000000 -data4 0xF65A1773,0xE78AB204,0x00003FE0,0x00000000 -data4 0x00007BA8,0x3F774E38,0x3D0D874D,0x00000000 -data4 0x7B8EF695,0xDB7CBFFF,0x0000BFE0,0x00000000 -data4 0x00007B31,0x3F766038,0x3D1CF49B,0x00000000 -data4 0xCF773FB3,0xC0241AEA,0x0000BFE0,0x00000000 -data4 0x00007ABB,0x3F757400,0x3D2C531D,0x00000000 -data4 0xC9539FDF,0xFC8F4D48,0x00003FE1,0x00000000 -data4 0x00007A45,0x3F748988,0x3D3BA322,0x00000000 -data4 0x954665C2,0x9CD035FB,0x0000BFE1,0x00000000 -data4 0x000079D1,0x3F73A0D0,0x3D4AE46F,0x00000000 -data4 0xDD367A30,0xEC9017C7,0x00003FE1,0x00000000 -data4 0x0000795D,0x3F72B9D0,0x3D5A1756,0x00000000 -data4 0xCB11189C,0xEE6625D3,0x0000BFE1,0x00000000 -data4 0x000078EB,0x3F71D488,0x3D693B9D,0x00000000 -data4 0xBE11C424,0xA49C8DB5,0x0000BFE0,0x00000000 -LOCAL_OBJECT_END(Constants_log_80_Z_G_H_h2) - -LOCAL_OBJECT_START(Constants_log_80_h3_G_H) -// h3 IEEE double extended, H3 and G3 IEEE single -data4 0x112666B0,0xAAACAAB1,0x00003FD3,0x3F7FFC00 -data4 0x9B7FAD21,0x90051030,0x00003FD8,0x3F7FF400 -data4 0xF4D783C4,0xA6B46F46,0x00003FDA,0x3F7FEC00 -data4 0x11C6DDCA,0xDA148D88,0x0000BFD8,0x3F7FE400 -data4 0xCA964D95,0xCE65C1D8,0x0000BFD8,0x3F7FDC00 -data4 0x23412D13,0x883838EE,0x0000BFDB,0x3F7FD400 -data4 0x983ED687,0xB7E5CFA1,0x00003FDB,0x3F7FCC08 -data4 0xE3C3930B,0xDBE23B16,0x0000BFD9,0x3F7FC408 -data4 0x48AA4DFC,0x9B92F1FC,0x0000BFDC,0x3F7FBC10 -data4 0xCE9C8F7E,0x9A8CEB15,0x0000BFD9,0x3F7FB410 -data4 0x0DECE74A,0x8C220879,0x00003FDC,0x3F7FAC18 -data4 0x2F053150,0xB25CA912,0x0000BFDA,0x3F7FA420 -data4 0xD9A5BE20,0xA5876555,0x00003FDB,0x3F7F9C20 -data4 0x2053F087,0xC919BB6E,0x00003FD9,0x3F7F9428 -data4 0x041E9A77,0xB70BDA79,0x00003FDC,0x3F7F8C30 -data4 0xEA1C9C30,0xF18A5C08,0x00003FDA,0x3F7F8438 -data4 0x796D89E5,0xA3790D84,0x0000BFDD,0x3F7F7C40 -data4 0xA2915A3A,0xE1852369,0x0000BFDD,0x3F7F7448 -data4 0xA39ED868,0xD803858F,0x00003FDC,0x3F7F6C50 -data4 0x9417EBB7,0xB2EEE356,0x0000BFDD,0x3F7F6458 -data4 0x9BB0D07F,0xED5C1F8A,0x0000BFDC,0x3F7F5C68 -data4 0xE87C740A,0xD6D201A0,0x0000BFDD,0x3F7F5470 -data4 0x1CA74025,0xE8DEBF5E,0x00003FDC,0x3F7F4C78 -data4 0x1F34A7EB,0x9A995A97,0x0000BFDC,0x3F7F4488 -data4 0x359EED97,0x9CB0F742,0x0000BFDA,0x3F7F3C90 -data4 0xBBC6A1C8,0xD6F833C2,0x0000BFDD,0x3F7F34A0 -data4 0xE71090EC,0xE1F68F2A,0x00003FDC,0x3F7F2CA8 -data4 0xC160A74F,0xD1881CF1,0x0000BFDB,0x3F7F24B8 -data4 0xD78CB5A4,0x9AD05AE2,0x00003FD6,0x3F7F1CC8 -data4 0x9A77DC4B,0xE658CB8E,0x0000BFDD,0x3F7F14D8 -data4 0x6BD6D312,0xBA281296,0x00003FDC,0x3F7F0CE0 -data4 0xF95210D0,0xB478BBEB,0x0000BFDB,0x3F7F04F0 -data4 0x38800100,0x39400480,0x39A00640,0x39E00C41 // H's start here -data4 0x3A100A21,0x3A300F22,0x3A4FF51C,0x3A6FFC1D -data4 0x3A87F20B,0x3A97F68B,0x3AA7EB86,0x3AB7E101 -data4 0x3AC7E701,0x3AD7DD7B,0x3AE7D474,0x3AF7CBED -data4 0x3B03E1F3,0x3B0BDE2F,0x3B13DAAA,0x3B1BD766 -data4 0x3B23CC5C,0x3B2BC997,0x3B33C711,0x3B3BBCC6 -data4 0x3B43BAC0,0x3B4BB0F4,0x3B53AF6D,0x3B5BA620 -data4 0x3B639D12,0x3B6B9444,0x3B7393BC,0x3B7B8B6D -LOCAL_OBJECT_END(Constants_log_80_h3_G_H) - -GR_sig_inv_ln2 = r14 -GR_rshf_2to51 = r15 -GR_exp_2tom51 = r16 -GR_rshf = r17 -GR_exp_half = r18 -GR_sign_mask = r19 -GR_exp_square_oflow = r20 -GR_exp_square_uflow = r21 -GR_exp_ynear1_oflow = r22 -GR_exp_ynear1_uflow = r23 -GR_signif_Z = r24 - -GR_signexp_x = r32 - -GR_exp_x = r33 - -GR_Table_Ptr = r34 - -GR_Table_Ptr1 = r35 - -GR_Index1 = r36 - -GR_Index2 = r37 -GR_Expo_X = r37 - -GR_M = r38 - -GR_X_0 = r39 -GR_Mask = r39 - -GR_X_1 = r40 -GR_W1_ptr = r40 - -GR_W2_ptr = r41 -GR_X_2 = r41 - -GR_Z_1 = r42 -GR_M2 = r42 - -GR_M1 = r43 -GR_Z_2 = r43 - -GR_N = r44 -GR_k = r44 - -GR_Big_Pos_Exp = r45 - -GR_exp_pos_max = r46 - -GR_exp_bias_p_k = r47 - -GR_Index3 = r48 -GR_temp = r48 - -GR_vsm_expo = r49 - -GR_T1_ptr = r50 -GR_P_ptr1 = r50 -GR_T2_ptr = r51 -GR_P_ptr2 = r51 -GR_N_fix = r52 -GR_exp_y = r53 -GR_signif_y = r54 -GR_signexp_y = r55 -GR_fraction_y = r55 -GR_low_order_bit = r56 -GR_exp_mask = r57 -GR_exp_bias = r58 -GR_y_sign = r59 -GR_table_base = r60 -GR_ptr_exp_Arg = r61 -GR_Delta_Exp = r62 -GR_Special_Exp = r63 -GR_exp_neg_max = r64 -GR_Big_Neg_Exp = r65 - -//** Registers for unwind support - -GR_SAVE_PFS = r59 -GR_SAVE_B0 = r60 -GR_SAVE_GP = r61 -GR_Parameter_X = r62 -GR_Parameter_Y = r63 -GR_Parameter_RESULT = r64 -GR_Parameter_TAG = r65 - -//** - -FR_Input_X = f8 -FR_Result = f8 -FR_Input_Y = f9 - -FR_Neg = f10 -FR_P_hi = f10 -FR_X = f10 - -FR_Half = f11 -FR_h_3 = f11 -FR_poly_hi = f11 - -FR_Sgn = f12 - -FR_half_W = f13 - -FR_X_cor = f14 -FR_P_lo = f14 - -FR_W = f15 - -FR_X_lo = f32 - -FR_S = f33 -FR_W3 = f33 - -FR_Y_hi = f34 -FR_logx_hi = f34 - -FR_Z = f35 -FR_logx_lo = f35 -FR_GS_hi = f35 -FR_Y_lo = f35 - -FR_r_cor = f36 -FR_Scale = f36 - -FR_G_1 = f37 -FR_G = f37 -FR_Wsq = f37 -FR_temp = f37 - -FR_H_1 = f38 -FR_H = f38 -FR_W4 = f38 - -FR_h = f39 -FR_h_1 = f39 -FR_N = f39 -FR_P_7 = f39 - -FR_G_2 = f40 -FR_P_8 = f40 -FR_L_hi = f40 - -FR_H_2 = f41 -FR_L_lo = f41 -FR_A_1 = f41 - -FR_h_2 = f42 - -FR_W1 = f43 - -FR_G_3 = f44 -FR_P_8 = f44 -FR_T1 = f44 - -FR_log2_hi = f45 -FR_W2 = f45 - -FR_GS_lo = f46 -FR_T2 = f46 - -FR_W_1_p1 = f47 -FR_H_3 = f47 - -FR_float_N = f48 - -FR_A_2 = f49 - -FR_Q_4 = f50 -FR_r4 = f50 - -FR_Q_3 = f51 -FR_A_3 = f51 - -FR_Q_2 = f52 -FR_P_2 = f52 - -FR_Q_1 = f53 -FR_P_1 = f53 -FR_T = f53 - -FR_Wp1 = f54 -FR_Q_5 = f54 -FR_P_3 = f54 - -FR_Q_6 = f55 - -FR_log2_lo = f56 -FR_Two = f56 - -FR_Big = f57 - -FR_neg_2_mK = f58 - -FR_r = f59 - -FR_poly_lo = f60 - -FR_poly = f61 - -FR_P_5 = f62 -FR_Result_small = f62 - -FR_rsq = f63 - -FR_Delta = f64 - -FR_save_Input_X = f65 -FR_norm_X = f66 -FR_norm_Y = f67 -FR_Y_lo_2 = f68 - -FR_P_6 = f69 -FR_Result_big = f69 - -FR_RSHF_2TO51 = f70 -FR_INV_LN2_2TO63 = f71 -FR_2TOM51 = f72 -FR_RSHF = f73 -FR_TMP1 = f74 -FR_TMP2 = f75 -FR_TMP3 = f76 -FR_Tscale = f77 -FR_P_4 = f78 -FR_NBig = f79 - - -.section .text -GLOBAL_LIBM_ENTRY(powl) -// -// Get significand of x. It is the critical path. -// -{ .mfi - getf.sig GR_signif_Z = FR_Input_X // Get significand of x - fclass.m p11, p12 = FR_Input_X, 0x0b // Test x unorm - nop.i 999 -} -{ .mfi - nop.m 999 - fnorm.s1 FR_norm_X = FR_Input_X // Normalize x - mov GR_exp_half = 0xffff - 1 // Exponent for 0.5 -} -;; - -{ .mfi - alloc r32 = ar.pfs,0,30,4,0 - fclass.m p7, p0 = FR_Input_Y, 0x1E7 // Test y natval, nan, inf, zero - mov GR_exp_pos_max = 0x13fff // Max exponent for pos oflow test -} -{ .mfi - addl GR_table_base = @ltoff(Constants_exp_64_Arg#), gp // Ptr to tables - fnorm.s1 FR_norm_Y = FR_Input_Y // Normalize y - mov GR_exp_neg_max = 0x33fff // Max exponent for neg oflow test -} -;; - -{ .mfi - getf.exp GR_signexp_y = FR_Input_Y // Get sign and exp of y -(p12) fclass.m p11, p0 = FR_Input_Y, 0x0b // Test y unorm - mov GR_sign_mask = 0x20000 // Sign mask -} -{ .mfi - ld8 GR_table_base = [GR_table_base] // Get base address for tables - fadd.s1 FR_Two = f1, f1 // Form 2.0 for square test - mov GR_exp_mask = 0x1FFFF // Exponent mask -} -;; - -{ .mfi - getf.sig GR_signif_y = FR_Input_Y // Get significand of y - fclass.m p6, p0 = FR_Input_X, 0x1E7 // Test x natval, nan, inf, zero - nop.i 999 -} -;; - -{ .mfi - getf.exp GR_signexp_x = FR_Input_X // Get signexp of x - fmerge.s FR_save_Input_X = FR_Input_X, FR_Input_X - extr.u GR_Index1 = GR_signif_Z, 59, 4 // Extract upper 4 signif bits of x -} -{ .mfb - setf.exp FR_Half = GR_exp_half // Load half - nop.f 999 -(p11) br.cond.spnt POWL_DENORM // Branch if x or y denorm/unorm -} -;; - -// Return here from POWL_DENORM -POWL_COMMON: -{ .mfi - setf.exp FR_Big = GR_exp_pos_max // Form big pos value for oflow test - fclass.nm p11, p0 = FR_Input_Y, 0x1FF // Test Y unsupported - shl GR_Index1 = GR_Index1,5 // Adjust index1 pointer x 32 -} -{ .mfi - add GR_Table_Ptr = 0x7c0, GR_table_base // Constants_log_80_Z_G_H_h1 - fma.s1 FR_Sgn = f1,f1,f0 // Assume result positive - mov GR_exp_bias = 0xFFFF // Form exponent bias -} -;; - -// -// Identify NatVals, NaNs, Infs, and Zeros. -// -// -// Remove sign bit from exponent of y. -// Check for x = 1 -// Branch on Infs, Nans, Zeros, and Natvals -// Check to see that exponent < 0 -// -{ .mfi - setf.exp FR_NBig = GR_exp_neg_max // Form big neg value for oflow test - fclass.nm p8, p0 = FR_Input_X, 0x1FF // Test X unsupported - and GR_exp_y = GR_exp_mask,GR_signexp_y // Get biased exponent of y -} -{ .mfb - add GR_Index1 = GR_Index1,GR_Table_Ptr - nop.f 999 -(p6) br.cond.spnt POWL_64_SPECIAL // Branch if x natval, nan, inf, zero -} -;; - -// load Z_1 from Index1 - -// There is logic starting here to determine if y is an integer when x < 0. -// If 0 < |y| < 1 then clearly y is not an integer. -// If |y| > 1, then the significand of y is shifted left by the size of -// the exponent of y. This preserves the lsb of the integer part + the -// fractional bits. The lsb of the integer can be tested to determine if -// the integer is even or odd. The fractional bits can be tested. If zero, -// then y is an integer. -// -{ .mfi - ld2 GR_Z_1 =[GR_Index1],4 // Load Z_1 - fmerge.s FR_Z = f0, FR_norm_X // Z = |x| - extr.u GR_X_0 = GR_signif_Z, 49, 15 // Extract X_0 from significand -} -{ .mfb - cmp.lt p9, p0 = GR_exp_y,GR_exp_bias // Test 0 < |y| < 1 - nop.f 999 -(p7) br.cond.spnt POWL_64_SPECIAL // Branch if y natval, nan, inf, zero -} -;; - -{ .mfb - ldfs FR_G_1 = [GR_Index1],4 // Load G_1 - fcmp.eq.s1 p10, p0 = FR_Input_Y, f1 // Test Y = +1.0 -(p8) br.cond.spnt POWL_64_UNSUPPORT // Branch if x unsupported -} -;; - -// -// X_0 = High order 15 bit of Z -// -{ .mfb - ldfs FR_H_1 = [GR_Index1],8 // Load H_1 -(p9) fcmp.lt.unc.s1 p9, p0 = FR_Input_X, f0 // Test x<0, 0 <|y|<1 -(p11) br.cond.spnt POWL_64_UNSUPPORT // Branch if y unsupported -} -;; - -{ .mfi - ldfe FR_h_1 = [GR_Index1] // Load h_1 - fcmp.eq.s1 p7, p0 = FR_Input_Y, FR_Two // Test y = 2.0 - pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 // X_1 = X_0 * Z_1 (bits 15-30) - // Wait 4 cycles to use result -} -{ .mfi - add GR_Table_Ptr = 0x9c0, GR_table_base // Constants_log_80_Z_G_H_h2 - nop.f 999 - sub GR_exp_y = GR_exp_y,GR_exp_bias // Get true exponent of y -} -;; - -// -// Branch for (x < 0) and Y not an integer. -// -{ .mfb - nop.m 999 - fcmp.lt.s1 p6, p0 = FR_Input_X, f0 // Test x < 0 -(p9) br.cond.spnt POWL_64_XNEG // Branch if x < 0, 0 < |y| < 1 -} -;; - -{ .mfi - nop.m 999 - fcmp.eq.s1 p12, p0 = FR_Input_X, f1 // Test x=+1.0 - nop.i 999 -} -{ .mfb - nop.m 999 - fsub.s1 FR_W = FR_Z, f1 // W = Z - 1 -(p7) br.cond.spnt POWL_64_SQUARE // Branch if y=2 -} -;; - -{ .mfi - nop.m 999 -(p10) fmpy.s0 FR_Result = FR_Input_X, f1 // If y=+1.0, result=x -(p6) shl GR_fraction_y= GR_signif_y,GR_exp_y // Get lsb of int + fraction - // Wait 4 cycles to use result -} -;; - -{ .mfi - nop.m 999 -(p12) fma.s0 FR_Result = FR_Input_Y, f0, f1 // If x=1.0, result=1, chk denorm - extr.u GR_Index2 = GR_X_1, 6, 4 // Extract index2 -} -;; - -// -// N = exponent of Z -// -{ .mib - getf.exp GR_N = FR_Z // Get exponent of Z (also x) - shl GR_Index2=GR_Index2,5 // Index2 x 32 bytes -(p10) br.ret.spnt b0 // Exit if y=+1.0 -} -;; - -{ .mib - add GR_Index2 = GR_Index2, GR_Table_Ptr // Pointer to table 2 - nop.i 999 -(p12) br.ret.spnt b0 // Exit if x=+1.0 -} -;; - -{ .mmi - ld2 GR_Z_2 =[GR_Index2],4 // Load Z_2 -;; - ldfs FR_G_2 = [GR_Index2],4 // Load G_2 - nop.i 999 -} -;; - -{ .mii - ldfs FR_H_2 = [GR_Index2],8 // Load H_2 -(p6) tbit.nz.unc p9, p0 = GR_fraction_y, 63 // Test x<0 and y odd integer - add GR_Table_Ptr = 0xbcc, GR_table_base // Constants_log_80_h3_G_H, G_3 -} -;; - -// -// For x < 0 and y odd integer,, set sign = -1. -// -{ .mfi - getf.exp GR_M = FR_W // Get signexp of W - nop.f 999 - pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 // X_2 = X_1 * Z_2 (bits 15-30) -} -{ .mfi - ldfe FR_h_2 = [GR_Index2] // Load h_2 -(p9) fnma.s1 FR_Sgn = f1, f1, f0 // If x<0, y odd int, result negative - sub GR_N = GR_N, GR_exp_bias // Get true exponent of x = N -} -;; - -{ .mfi - add GR_Table_Ptr1 = 0xdc0, GR_table_base // Ptr to H_3 - fcmp.eq.s0 p11, p0 = FR_Input_Y, FR_Half // Test y=0.5, also set denorm -(p6) shl GR_fraction_y= GR_fraction_y, 1 // Shift left 1 to get fraction -} -;; - -{ .mmb - setf.sig FR_float_N = GR_N -(p6) cmp.ne.unc p8, p0 = GR_fraction_y, r0 // Test x<0 and y not integer -(p8) br.cond.spnt POWL_64_XNEG // Branch if x<0 and y not int -} -;; - -// -// Raise possible denormal operand exception for both X and Y. -// Set pointers in case |x| near 1 -// Branch to embedded sqrt(x) if y=0.5 -// -{ .mfi - add GR_P_ptr1 = 0x6b0, GR_table_base // Constants_log_80_P, P8, NEAR path - fcmp.eq.s0 p12, p0 = FR_Input_X, FR_Input_Y // Dummy to set denormal - add GR_P_ptr2 = 0x700, GR_table_base // Constants_log_80_P, P4, NEAR path -} -{ .mfb - cmp.eq p15, p14 = r0, r0 // Assume result safe (no over/under) - fsub.s1 FR_Delta = FR_Input_Y,f1 // Delta = y - 1.0 -(p11) br.cond.spnt POWL_64_SQRT // Branch if y=0.5 -} -;; - -// -// Computes ln( x ) to extra precision -// Input FR 1: FR_X -// Output FR 2: FR_Y_hi -// Output FR 3: FR_Y_lo -// Output PR 1: PR_Safe -// -{ .mfi - and GR_M = GR_exp_mask, GR_M // Mask to get exponent of W - nop.f 999 - extr.u GR_Index3 = GR_X_2, 1, 5 // Get index3 -} -;; - -{ .mmi - shladd GR_Table_Ptr1 = GR_Index3,2,GR_Table_Ptr1 // Ptr to H_3 - shladd GR_Index3 = GR_Index3,4,GR_Table_Ptr // Ptr to G_3 - sub GR_M = GR_M, GR_exp_bias // Get true exponent of W -} -;; - -{ .mib - ldfs FR_G_3 = [GR_Index3],-12 // Load G_3 - cmp.gt p7, p14 = -8, GR_M // Test if |x-1| < 2^-8 -(p7) br.cond.spnt LOGL80_NEAR // Branch if |x-1| < 2^-8 -} -;; - -// Here if |x-1| >= 2^-8 -{ .mmf - ldfs FR_H_3 = [GR_Table_Ptr1] // Load H_3 - nop.m 999 - nop.f 999 -} -;; - -{ .mfi - ldfe FR_h_3 = [GR_Index3] // Load h_3 - fmerge.se FR_S = f1,FR_Z // S = merge of 1.0 and signif(Z) - nop.i 999 -} -{ .mfi - add GR_Table_Ptr = 0x740, GR_table_base // Constants_log_80_Q - fmpy.s1 FR_G = FR_G_1, FR_G_2 // G = G_1 * G_2 - nop.i 999 -} -;; - -// -// Begin Loading Q's - load log2_hi part -// -{ .mfi - ldfe FR_log2_hi = [GR_Table_Ptr],16 // Load log2_hi - fadd.s1 FR_H = FR_H_1, FR_H_2 // H = H_1 + H_2 - nop.i 999 -};; - -// -// h = h_1 + h_2 -// -{ .mfi - ldfe FR_log2_lo = [GR_Table_Ptr],16 // Load log2_lo - fadd.s1 FR_h = FR_h_1, FR_h_2 // h = h_1 + h_2 - nop.i 999 -} -;; - -{ .mfi - ldfe FR_Q_6 = [GR_Table_Ptr],16 // Load Q_6 - fcvt.xf FR_float_N = FR_float_N - nop.i 999 -} -;; - -{ .mfi - ldfe FR_Q_5 = [GR_Table_Ptr],16 // Load Q_5 - nop.f 999 - nop.i 999 -} -;; - -// -// G = G_1 * G_2 * G_3 -// -{ .mfi - ldfe FR_Q_4 = [GR_Table_Ptr],16 // Load Q_4 - fmpy.s1 FR_G = FR_G, FR_G_3 - nop.i 999 -} -;; - -// -// H = H_1 + H_2 + H_3 -// -{ .mfi - ldfe FR_Q_3 = [GR_Table_Ptr],16 // Load Q_3 - fadd.s1 FR_H = FR_H, FR_H_3 - nop.i 999 -} -;; - -// -// Y_lo = poly + Y_lo -// -// h = h_1 + h_2 + h_3 -// -{ .mfi - ldfe FR_Q_2 = [GR_Table_Ptr],16 // Load Q_2 - fadd.s1 FR_h = FR_h, FR_h_3 - nop.i 999 -} -;; - -// -// GS_hi = G*S -// r = G*S -1 -// -{ .mfi - ldfe FR_Q_1 = [GR_Table_Ptr],16 // Load Q_1 - fmpy.s1 FR_GS_hi = FR_G, FR_S - nop.i 999 -} -{ .mfi - nop.m 999 - fms.s1 FR_r = FR_G, FR_S, f1 - nop.i 999 -} -;; - -// -// poly_lo = Q_5 + r * Q_6 -// -{ .mfi - getf.exp GR_Delta_Exp = FR_Delta // Get signexp of y-1 for exp calc - fma.s1 FR_poly_lo = FR_r, FR_Q_6, FR_Q_5 - nop.i 999 -} -// -// r_cor = GS_hi -1 -// -{ .mfi - nop.m 999 - fsub.s1 FR_r_cor = FR_GS_hi, f1 - nop.i 999 -} -;; - -// -// GS_lo = G*S - GS_hi -// -{ .mfi - nop.m 999 - fms.s1 FR_GS_lo = FR_G, FR_S, FR_GS_hi - nop.i 999 -} -;; - -// -// rsq = r * r -// -{ .mfi - nop.m 999 - fmpy.s1 FR_rsq = FR_r, FR_r - nop.i 999 -} -// -// G = float_N*log2_hi + H -// -{ .mfi - nop.m 999 - fma.s1 FR_G = FR_float_N, FR_log2_hi, FR_H - nop.i 999 -} -;; - -// -// Y_lo = float_N*log2_lo + h -// -{ .mfi - nop.m 999 - fma.s1 FR_Y_lo = FR_float_N, FR_log2_lo, FR_h - nop.i 999 -} -;; - -// -// poly_lo = Q_4 + r * poly_lo -// r_cor = r_cor - r -// -{ .mfi - nop.m 999 - fma.s1 FR_poly_lo = FR_r, FR_poly_lo, FR_Q_4 - nop.i 999 -} -{ .mfi - nop.m 999 - fsub.s1 FR_r_cor = FR_r_cor, FR_r - nop.i 999 -} -;; - -// -// poly_hi = r * Q_2 + Q_1 -// Y_hi = G + r -// -{ .mfi - nop.m 999 - fma.s1 FR_poly = FR_r, FR_Q_2, FR_Q_1 - nop.i 999 -} -{ .mfi - nop.m 999 - fadd.s1 FR_Y_hi = FR_G, FR_r - nop.i 999 -} -;; - -// -// poly_lo = Q_3 + r * poly_lo -// r_cor = r_cor + GS_lo -// -{ .mfi - nop.m 999 - fma.s1 FR_poly_lo = FR_r, FR_poly_lo, FR_Q_3 - nop.i 999 -} -{ .mfi - nop.m 999 - fadd.s1 FR_r_cor = FR_r_cor, FR_GS_lo - nop.i 999 -} -;; - -// -// Y_lo = G - Y_hi -// -{ .mfi - nop.m 999 - fsub.s1 FR_Y_lo_2 = FR_G, FR_Y_hi - nop.i 999 -} -;; - -// -// r_cor = r_cor + Y_lo -// poly = poly_hi + rsq * poly_lo -// -{ .mfi - add GR_Table_Ptr = 0x0, GR_table_base // Constants_exp_64_Arg - fadd.s1 FR_r_cor = FR_r_cor, FR_Y_lo - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 FR_poly = FR_rsq, FR_poly_lo, FR_poly - nop.i 999 -} -;; - -// -// Load L_hi -// Load L_lo -// all long before they are needed. -// They are used in LOGL_RETURN PATH -// -// Y_lo = Y_lo + r -// poly = rsq * poly + r_cor -// -{ .mfi - ldfe FR_L_hi = [GR_Table_Ptr],16 // Load L_hi - fadd.s1 FR_Y_lo = FR_Y_lo_2, FR_r - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 FR_poly = FR_rsq, FR_poly, FR_r_cor - nop.i 999 -} -;; - -{ .mfb - ldfe FR_L_lo = [GR_Table_Ptr],16 // Load L_lo - fadd.s1 FR_Y_lo = FR_Y_lo, FR_poly - br.cond.sptk LOGL_RETURN // Branch to common code -} -;; - - -LOGL80_NEAR: -// Here if |x-1| < 2^-8 -// -// Branch LOGL80_NEAR -// - -{ .mmf - ldfe FR_P_8 = [GR_P_ptr1],16 // Load P_8 - ldfe FR_P_4 = [GR_P_ptr2],16 // Load P_4 - fmpy.s1 FR_Wsq = FR_W, FR_W -} -;; - -{ .mmi - ldfe FR_P_7 = [GR_P_ptr1],16 // Load P_7 - ldfe FR_P_3 = [GR_P_ptr2],16 // Load P_3 - nop.i 999 -} -;; - -{ .mmi - ldfe FR_P_6 = [GR_P_ptr1],16 // Load P_6 - ldfe FR_P_2 = [GR_P_ptr2],16 // Load P_2 - nop.i 999 -} -;; - -{ .mmi - ldfe FR_P_5 = [GR_P_ptr1],16 // Load P_5 - ldfe FR_P_1 = [GR_P_ptr2],16 // Load P_1 - nop.i 999 -} -;; - -{ .mfi - getf.exp GR_Delta_Exp = FR_Delta // Get signexp of y-1 for exp calc - fmpy.s1 FR_W4 = FR_Wsq, FR_Wsq - nop.i 999 -} -{ .mfi - add GR_Table_Ptr = 0x0, GR_table_base // Constants_exp_64_Arg - fmpy.s1 FR_W3 = FR_Wsq, FR_W - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 FR_half_W = FR_Half, FR_W - nop.i 999 -} -;; - -{ .mfi - ldfe FR_L_hi = [GR_Table_Ptr],16 - fma.s1 FR_poly_lo = FR_W, FR_P_8,FR_P_7 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 FR_poly = FR_W, FR_P_4, FR_P_3 - nop.i 999 -} -;; - -{ .mfi - ldfe FR_L_lo = [GR_Table_Ptr],16 - fnma.s1 FR_Y_hi = FR_W, FR_half_W, FR_W - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_poly_lo = FR_W, FR_poly_lo, FR_P_6 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 FR_poly = FR_W, FR_poly, FR_P_2 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fsub.s1 FR_Y_lo = FR_W, FR_Y_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_poly_lo = FR_W, FR_poly_lo, FR_P_5 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 FR_poly = FR_W, FR_poly, FR_P_1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fnma.s1 FR_Y_lo = FR_W, FR_half_W, FR_Y_lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_poly = FR_poly_lo, FR_W4, FR_poly - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_Y_lo = FR_poly, FR_W3, FR_Y_lo - nop.i 999 -} -;; - - -LOGL_RETURN: -// Common code for completion of both logx paths - -// -// L_hi, L_lo already loaded. -// -// -// kernel_log_80 computed ln(X) -// and return logX_hi and logX_lo as results. -// PR_pow_Safe set as well. -// -// -// Compute Y * (logX_hi + logX_lo) -// P_hi -> X -// P_lo -> X_cor -// (Manipulate names so that inputs are in -// the place kernel_exp expects them) -// -// This function computes exp( x + x_cor) -// Input FR 1: FR_X -// Input FR 2: FR_X_cor -// Output FR 3: FR_Y_hi -// Output FR 4: FR_Y_lo -// Output FR 5: FR_Scale -// Output PR 1: PR_Safe -// -// P15 is True -// -// Load constants used in computing N using right-shift technique -{ .mlx - mov GR_exp_2tom51 = 0xffff-51 - movl GR_sig_inv_ln2 = 0xb8aa3b295c17f0bc // significand of 1/ln2 -} -{ .mlx - add GR_Special_Exp = -50,GR_exp_bias - movl GR_rshf_2to51 = 0x4718000000000000 // 1.10000 2^(63+51) -} -;; - -// -// Point to Table of W1s -// Point to Table of W2s -// -{ .mmi - add GR_W1_ptr = 0x2b0, GR_table_base // Constants_exp_64_W1 - add GR_W2_ptr = 0x4b0, GR_table_base // Constants_exp_64_W2 - cmp.le p6,p0= GR_Delta_Exp,GR_Special_Exp -};; - -// Form two constants we need -// 1/ln2 * 2^63 to compute w = x * 1/ln2 * 128 -// 1.1000..000 * 2^(63+63-12) to right shift int(N) into the significand - -{ .mfi - setf.sig FR_INV_LN2_2TO63 = GR_sig_inv_ln2 // form 1/ln2 * 2^63 - nop.f 999 - and GR_Delta_Exp=GR_Delta_Exp,GR_exp_mask // Get exponent of y-1 -} -{ .mlx - setf.d FR_RSHF_2TO51 = GR_rshf_2to51 // Form const 1.1000 * 2^(63+51) - movl GR_rshf = 0x43e8000000000000 // 1.10000 2^63 for right shift -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 FR_X_lo = FR_Input_Y, FR_logx_lo // logx_lo is Y_lo - cmp.eq p15, p0= r0, r0 // Set p15, assume safe -};; - -{ .mmi - setf.exp FR_2TOM51 = GR_exp_2tom51 // Form 2^-51 for scaling float_N - setf.d FR_RSHF = GR_rshf // Form right shift const 1.1000 * 2^63 - add GR_Table_Ptr1 = 0x50, GR_table_base // Constants_exp_64_P for - // EXPL_SMALL path -} -;; - -{ .mmi - ldfe FR_P_6 = [GR_Table_Ptr1],16 // Load P_6 for EXPL_SMALL path -;; - ldfe FR_P_5 = [GR_Table_Ptr1],16 // Load P_5 for EXPL_SMALL path - nop.i 999 -} -;; - -{ .mfi - ldfe FR_P_4 = [GR_Table_Ptr1],16 // Load P_4 for EXPL_SMALL path - fma.s1 FR_P_hi = FR_Input_Y, FR_logx_hi,FR_X_lo // logx_hi ix Y_hi - nop.i 999 -} -;; - -{ .mmi - ldfe FR_P_3 = [GR_Table_Ptr1],16 // Load P_3 for EXPL_SMALL path -;; - ldfe FR_P_2 = [GR_Table_Ptr1],16 // Load P_2 for EXPL_SMALL path - nop.i 999 -} -;; - -// N = X * Inv_log2_by_2^12 -// By adding 1.10...0*2^63 we shift and get round_int(N_signif) in significand. -// We actually add 1.10...0*2^51 to X * Inv_log2 to do the same thing. -{ .mfi - ldfe FR_P_1 = [GR_Table_Ptr1] // Load P_1 for EXPL_SMALL path - fma.s1 FR_N = FR_X, FR_INV_LN2_2TO63, FR_RSHF_2TO51 - nop.i 999 -} -{ .mfb - nop.m 999 - fms.s1 FR_P_lo= FR_Input_Y, FR_logx_hi, FR_P_hi // P_hi is X -(p6) br.cond.spnt POWL_Y_ALMOST_1 // Branch if |y-1| < 2^-50 -} -;; - -{ .mmi - getf.exp GR_Expo_X = FR_X - add GR_T1_ptr = 0x0b0, GR_table_base // Constants_exp_64_T1 - add GR_T2_ptr = 0x1b0, GR_table_base // Constants_exp_64_T2 -} -;; - -// float_N = round_int(N) -// The signficand of N contains the rounded integer part of X * 2^12/ln2, -// as a twos complement number in the lower bits (that is, it may be negative). -// That twos complement number (called N) is put into GR_N_fix. - -// Since N is scaled by 2^51, it must be multiplied by 2^-51 -// before the shift constant 1.10000 * 2^63 is subtracted to yield float_N. -// Thus, float_N contains the floating point version of N - - -{ .mfi - add GR_Table_Ptr = 0x20, GR_table_base // Constants_exp_64_A - fms.s1 FR_float_N = FR_N, FR_2TOM51, FR_RSHF // Form float_N - nop.i 999 -} -// Create low part of Y(ln(x)_hi + ln(x)_lo) as P_lo -{ .mfi - mov GR_Big_Pos_Exp = 0x3ffe // 16382, largest safe exponent - fadd.s1 FR_P_lo = FR_P_lo, FR_X_lo - mov GR_Big_Neg_Exp = -0x3ffd // -16381 smallest safe exponent -};; - -{ .mfi - nop.m 999 - fmpy.s1 FR_rsq = FR_X, FR_X // rsq = X*X for EXPL_SMALL path - mov GR_vsm_expo = -70 // Exponent for very small path -} -{ .mfi - nop.m 999 - fma.s1 FR_poly_lo = FR_P_6, FR_X, FR_P_5 // poly_lo for EXPL_SMALL path - add GR_temp = 0x1,r0 // For tiny signif if small path -} -;; - -// -// If expo_X < -6 goto exp_small -// -{ .mmi - getf.sig GR_N_fix = FR_N - ldfe FR_A_3 = [GR_Table_Ptr],16 // Load A_3 - and GR_Expo_X = GR_Expo_X, GR_exp_mask // Get exponent of X -} -;; - -{ .mfi - ldfe FR_A_2 = [GR_Table_Ptr],16 // Load A_2 - nop.f 999 - sub GR_Expo_X = GR_Expo_X, GR_exp_bias // Get true exponent of X -} -;; - -// -// If -6 > Expo_X, set P9 and branch -// -{ .mfb - cmp.gt p9, p0 = -6, GR_Expo_X - fnma.s1 FR_r = FR_L_hi, FR_float_N, FR_X // r = X - L_hi * float_N -(p9) br.cond.spnt EXPL_SMALL // Branch if |X| < 2^-6 -} -;; - -// -// If 14 <= Expo_X, set P10 -// -{ .mib - cmp.le p10, p0 = 14, GR_Expo_X - nop.i 999 -(p10) br.cond.spnt EXPL_HUGE // Branch if |X| >= 2^14 -} -;; - -// -// Load single T1 -// Load single T2 -// W_1_p1 = W_1 + 1 -// -{ .mmi - nop.m 999 - nop.m 999 - extr.u GR_M1 = GR_N_fix, 6, 6 // Extract index M_1 -} -;; - -// -// k = extr.u(N_fix,0,6) -// -{ .mmi - shladd GR_W1_ptr = GR_M1,3,GR_W1_ptr // Point to W1 - shladd GR_T1_ptr = GR_M1,2,GR_T1_ptr // Point to T1 - extr.u GR_M2 = GR_N_fix, 0, 6 // Extract index M_2 -} -;; - -// N_fix is only correct up to 50 bits because of our right shift technique. -// Actually in the normal path we will have restricted K to about 14 bits. -// Somewhat arbitrarily we extract 32 bits. -{ .mmi - ldfd FR_W1 = [GR_W1_ptr] - shladd GR_W2_ptr = GR_M2,3,GR_W2_ptr // Point to W2 - extr GR_k = GR_N_fix, 12, 32 // Extract k -} -;; - -{ .mfi - ldfs FR_T1 = [GR_T1_ptr] - fnma.s1 FR_r = FR_L_lo, FR_float_N, FR_r - shladd GR_T2_ptr = GR_M2,2,GR_T2_ptr // Point to T2 -} -{ .mfi - add GR_exp_bias_p_k = GR_exp_bias, GR_k - nop.f 999 - cmp.gt p14,p15 = GR_k,GR_Big_Pos_Exp -} -;; - -// -// if k < big_neg_exp, set p14 and Safe=False -// -{ .mmi - ldfs FR_T2 = [GR_T2_ptr] -(p15) cmp.lt p14,p15 = GR_k,GR_Big_Neg_Exp - nop.i 999 -} -;; - -{ .mmi - setf.exp FR_Scale = GR_exp_bias_p_k - ldfd FR_W2 = [GR_W2_ptr] - nop.i 999 -} -;; - -{ .mfi - ldfe FR_A_1 = [GR_Table_Ptr],16 - fadd.s1 FR_r = FR_r, FR_X_cor - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fadd.s1 FR_W_1_p1 = FR_W1, f1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_poly = FR_r, FR_A_3, FR_A_2 - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s1 FR_rsq = FR_r, FR_r - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 FR_T = FR_T1, FR_T2 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_W = FR_W2, FR_W_1_p1, FR_W1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_TMP1 = FR_Scale, FR_Sgn, f0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_poly = FR_r, FR_poly, FR_A_1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_TMP2 = FR_T, f1, f0 // TMP2 = Y_hi = T - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fadd.s1 FR_Wp1 = FR_W, f1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_poly = FR_rsq, FR_poly,FR_r - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_Tscale = FR_T, FR_TMP1, f0 // Scale * Sgn * T - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 FR_Y_lo = FR_Wp1, FR_poly, FR_W - nop.i 999 -} -;; - -{ .mfb - nop.m 999 - fmpy.s1 FR_TMP3 = FR_Y_lo, FR_Tscale - br.cond.sptk POWL_64_SHARED -} -;; - - -EXPL_SMALL: -// Here if |ylogx| < 2^-6 -// -// Begin creating lsb to perturb final result -// -{ .mfi - setf.sig FR_temp = GR_temp - fma.s1 FR_poly_lo = FR_poly_lo, FR_X, FR_P_4 - cmp.lt p12, p0 = GR_Expo_X, GR_vsm_expo // Test |ylogx| < 2^-70 -} -{ .mfi - nop.m 999 - fma.s1 FR_poly_hi = FR_P_2, FR_X, FR_P_1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 FR_TMP2 = f1, f1 - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s1 FR_TMP1 = FR_Sgn, f1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 FR_r4 = FR_rsq, FR_rsq -(p12) cmp.eq p15, p0 = r0, r0 // Set safe if |ylogx| < 2^-70 -} -{ .mfb - nop.m 999 -(p12) fmpy.s1 FR_TMP3 = FR_Sgn, FR_X -(p12) br.cond.spnt POWL_64_SHARED // Branch if |ylogx| < 2^-70 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_poly_lo = FR_poly_lo, FR_X, FR_P_3 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 FR_poly_hi = FR_poly_hi, FR_rsq, FR_X - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_Y_lo = FR_poly_lo, FR_r4, FR_poly_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 FR_TMP3 = FR_Y_lo, FR_TMP1 // Add sign info - nop.i 999 -} -;; - -// -// Toggle on last bit of Y_lo -// Set lsb of Y_lo to 1 -// -{ .mfi - nop.m 999 - for FR_temp = FR_Y_lo,FR_temp - nop.i 999 -} -;; - -{ .mfb - nop.m 999 - fmerge.se FR_TMP3 = FR_TMP3,FR_temp - br.cond.sptk POWL_64_SHARED -} -;; - - -EXPL_HUGE: -// Here if |ylogx| >= 2^14 -{ .mfi - mov GR_temp = 0x0A1DC // If X < 0, exponent -24100 - fcmp.gt.s1 p12, p13 = FR_X, f0 // Test X > 0 - cmp.eq p14, p15 = r0, r0 // Set Safe to false -} -;; - -{ .mmi -(p12) mov GR_Mask = 0x15DC0 // If X > 0, exponent +24000 -(p13) mov GR_Mask = 0x0A240 // If X < 0, exponent -24000 - nop.i 999 -} -;; - -{ .mmf - setf.exp FR_TMP2 = GR_Mask // Form Y_hi = TMP2 -(p13) setf.exp FR_Y_lo = GR_temp // If X < 0, Y_lo = 2^-24100 -(p12) mov FR_Y_lo = f1 // IF X > 0, Y_lo = 1.0 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 FR_TMP1 = FR_TMP2, FR_Sgn // TMP1 = Y_hi * Sgn - nop.i 999 -} -;; - -{ .mfb - nop.m 999 - fmpy.s1 FR_TMP3 = FR_Y_lo,FR_TMP1 // TMP3 = Y_lo * (Y_hi * Sgn) - br.cond.sptk POWL_64_SHARED -} -;; - -POWL_Y_ALMOST_1: -// Here if delta = |y-1| < 2^-50 -// -// x**(1 + delta) = x * e (ln(x)*delta) = x ( 1 + ln(x) * delta) -// -// Computation will be safe for 2^-16381 <= x < 2^16383 - -{ .mfi - mov GR_exp_ynear1_oflow = 0xffff + 16383 - fma.s1 FR_TMP1 = FR_Input_X,FR_Delta,f0 - and GR_exp_x = GR_exp_mask, GR_signexp_x -} -;; - -{ .mfi - cmp.lt p15, p14 = GR_exp_x, GR_exp_ynear1_oflow - fma.s1 FR_TMP2 = FR_logx_hi,f1,FR_X_lo - mov GR_exp_ynear1_uflow = 0xffff - 16381 -} -;; - -{ .mfb -(p15) cmp.ge p15, p14 = GR_exp_x, GR_exp_ynear1_uflow - fma.s1 FR_TMP3 = FR_Input_X,f1,f0 - br.cond.sptk POWL_64_SHARED -};; - -POWL_64_SQUARE: -// -// Here if x not zero and y=2. -// -// Setup for multipath code -// -{ .mfi - mov GR_exp_square_oflow = 0xffff + 8192 // Exponent where x*x overflows - fmerge.se FR_TMP1 = FR_Input_X, FR_Input_X - and GR_exp_x = GR_exp_mask, GR_signexp_x // Get exponent of x -} -;; - -{ .mfi - cmp.lt p15, p14 = GR_exp_x, GR_exp_square_oflow // Decide safe/unsafe - fmerge.se FR_TMP2 = FR_Input_X, FR_Input_X - mov GR_exp_square_uflow = 0xffff - 8191 // Exponent where x*x underflows -} -;; - -{ .mfi -(p15) cmp.ge p15, p14 = GR_exp_x, GR_exp_square_uflow // Decide safe/unsafe - fma.s1 FR_TMP3 = f0,f0,f0 - nop.i 999 -} -;; - -// -// This is the shared path that will set overflow and underflow. -// -POWL_64_SHARED: - -// -// Return if no danger of over or underflow. -// -{ .mfb - nop.m 999 - fma.s0 FR_Result = FR_TMP1, FR_TMP2, FR_TMP3 -(p15) br.ret.sptk b0 // Main path return if certain no over/underflow -} -;; - -// -// S0 user supplied status -// S2 user supplied status + WRE + TD (Overflows) -// S2 user supplied status + FZ + TD (Underflows) -// -// -// If (Safe) is true, then -// Compute result using user supplied status field. -// No overflow or underflow here, but perhaps inexact. -// Return -// Else -// Determine if overflow or underflow was raised. -// Fetch +/- overflow threshold for IEEE double extended - -{ .mfi - nop.m 999 - fsetc.s2 0x7F,0x41 // For underflow test, set S2=User+TD+FTZ - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s2 FR_Result_small = FR_TMP1, FR_TMP2, FR_TMP3 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fsetc.s2 0x7F,0x42 // For overflow test, set S2=User+TD+WRE - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s2 FR_Result_big = FR_TMP1, FR_TMP2,FR_TMP3 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fsetc.s2 0x7F,0x40 // Reset S2=User - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p11, p0 = FR_Result_small, 0x00F // Test small result unorm/zero - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fcmp.ge.s1 p8, p0 = FR_Result_big , FR_Big // Test >= + oflow threshold - nop.i 999 -} -;; - -{ .mfb -(p11) mov GR_Parameter_TAG = 19 // Set tag for underflow - fcmp.le.s1 p9, p0 = FR_Result_big, FR_NBig // Test <= - oflow threshold -(p11) br.cond.spnt __libm_error_region // Branch if pow underflowed -} -;; - -{ .mfb -(p8) mov GR_Parameter_TAG = 18 // Set tag for overflow - nop.f 999 -(p8) br.cond.spnt __libm_error_region // Branch if pow +overflow -} -;; - -{ .mbb -(p9) mov GR_Parameter_TAG = 18 // Set tag for overflow -(p9) br.cond.spnt __libm_error_region // Branch if pow -overflow - br.ret.sptk b0 // Branch if result really ok -} -;; - - -POWL_64_SPECIAL: -// Here if x or y is NatVal, nan, inf, or zero -{ .mfi - nop.m 999 - fcmp.eq.s1 p15, p0 = FR_Input_X, f1 // Test x=+1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p8, p0 = FR_Input_X, 0x143 // Test x natval, snan - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p15) fcmp.eq.unc.s0 p6,p0 = FR_Input_Y, f0 // If x=1, flag invalid if y=SNaN - nop.i 999 -} -{ .mfb - nop.m 999 -(p15) fmpy.s0 FR_Result = f1,f1 // If x=1, result=1 -(p15) br.ret.spnt b0 // Exit if x=1 -} -;; - -{ .mfi - nop.m 999 - fclass.m p6, p0 = FR_Input_Y, 0x007 // Test y zero - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p9, p0 = FR_Input_Y, 0x143 // Test y natval, snan - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p10, p0 = FR_Input_X, 0x083 // Test x qnan - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fmpy.s0 FR_Result = FR_Input_Y, FR_Input_X // If x=snan, result=qnan -(p6) cmp.ne p8,p0 = r0,r0 // Don't exit if x=snan, y=0 ==> result=+1 -} -;; - -{ .mfi - nop.m 999 -(p6) fclass.m.unc p15, p0 = FR_Input_X,0x007 // Test x=0, y=0 - nop.i 999 -} -{ .mfb - nop.m 999 -(p9) fmpy.s0 FR_Result = FR_Input_Y, FR_Input_X // If y=snan, result=qnan -(p8) br.ret.spnt b0 // Exit if x=snan, y not 0, - // result=qnan -} -;; - -{ .mfi - nop.m 999 - fcmp.eq.s1 p7, p0 = FR_Input_Y, f1 // Test y +1.0 - nop.i 999 -} -{ .mfb - nop.m 999 -(p10) fmpy.s0 FR_Result = FR_Input_X, f0 // If x=qnan, result=qnan -(p9) br.ret.spnt b0 // Exit if y=snan, result=qnan -} -;; - -{ .mfi - nop.m 999 -(p6) fclass.m.unc p8, p0 = FR_Input_X,0x0C3 // Test x=nan, y=0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p6) fcmp.eq.s0 p9,p0 = FR_Input_X, f0 // If y=0, flag if x denormal - nop.i 999 -} -{ .mfi - nop.m 999 -(p6) fadd.s0 FR_Result = f1, f0 // If y=0, result=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p11, p0 = FR_Input_Y, 0x083 // Test y qnan - nop.i 999 -} -{ .mfb -(p15) mov GR_Parameter_TAG = 20 // Error tag for x=0, y=0 -(p7) fmpy.s0 FR_Result = FR_Input_X,f1 // If y=1, result=x -(p15) br.cond.spnt __libm_error_region // Branch if x=0, y=0, result=1 -} -;; - -{ .mfb -(p8) mov GR_Parameter_TAG = 23 // Error tag for x=nan, y=0 - fclass.m p14, p0 = FR_Input_Y, 0x023 // Test y inf -(p8) br.cond.spnt __libm_error_region // Branch if x=snan, y=0, - // result=1 -} -;; - -{ .mfb - nop.m 999 - fclass.m p13, p0 = FR_Input_X, 0x023 // Test x inf -(p6) br.ret.spnt b0 // Exit y=0, x not nan or 0, - // result=1 -} -;; - -{ .mfb - nop.m 999 -(p14) fcmp.eq.unc.s1 p0,p14 = FR_Input_X,f0 // Test x not 0, y=inf -(p7) br.ret.spnt b0 // Exit y=1, x not snan, - // result=x -} -;; - -{ .mfb - nop.m 999 -(p10) fmpy.s0 FR_Result = FR_Input_Y,FR_Input_X // If x=qnan, y not snan, - // result=qnan -(p10) br.ret.spnt b0 // Exit x=qnan, y not snan, - // result=qnan -} -;; - -{ .mfb - nop.m 999 -(p11) fmpy.s0 FR_Result = FR_Input_Y,FR_Input_X // If y=qnan, x not nan or 1, - // result=qnan -(p11) br.ret.spnt b0 // Exit y=qnan, x not nan or 1, - // result=qnan -} -;; - -{ .mbb - nop.m 999 -(p14) br.cond.spnt POWL_64_Y_IS_INF // Branch if y=inf, x not 1 or nan -(p13) br.cond.spnt POWL_64_X_IS_INF // Branch if x=inf, y not 1 or nan -} -;; - - -POWL_64_X_IS_ZERO: -// Here if x=0, y not nan or 1 or inf or 0 - -// There is logic starting here to determine if y is an integer when x = 0. -// If 0 < |y| < 1 then clearly y is not an integer. -// If |y| > 1, then the significand of y is shifted left by the size of -// the exponent of y. This preserves the lsb of the integer part + the -// fractional bits. The lsb of the integer can be tested to determine if -// the integer is even or odd. The fractional bits can be tested. If zero, -// then y is an integer. -// -{ .mfi - and GR_exp_y = GR_exp_mask,GR_signexp_y // Get biased exponent of y - nop.f 999 - and GR_y_sign = GR_sign_mask,GR_signexp_y // Get sign of y -} -;; - -// -// Maybe y is < 1 already, so -// can never be an integer. -// -{ .mfi - cmp.lt p9, p8 = GR_exp_y,GR_exp_bias // Test 0 < |y| < 1 - nop.f 999 - sub GR_exp_y = GR_exp_y,GR_exp_bias // Get true exponent of y -} -;; - -// -// Shift significand of y looking for nonzero bits -// For y > 1, shift signif_y exp_y bits to the left -// For y < 1, turn on 4 low order bits of significand of y -// so that the fraction will always be non-zero -// -{ .mmi -(p9) or GR_exp_y= 0xF,GR_signif_y // Force nonzero fraction if y<1 -;; - nop.m 999 -(p8) shl GR_exp_y= GR_signif_y,GR_exp_y // Get lsb of int + fraction - // Wait 4 cycles to use result -} -;; - -{ .mmi - nop.m 999 -;; - nop.m 999 - nop.i 999 -} -;; - -{ .mmi - nop.m 999 -;; - nop.m 999 - shl GR_fraction_y= GR_exp_y,1 // Shift left 1 to get fraction -} -;; - -// -// Integer part of y shifted off. -// Get y's low even or odd bit - y might not be an int. -// -{ .mii - cmp.eq p13,p0 = GR_fraction_y, r0 // Test for y integer - cmp.eq p8,p0 = GR_y_sign, r0 // Test for y > 0 -;; -(p13) tbit.nz.unc p13,p0 = GR_exp_y, 63 // Test if y an odd integer -} -;; - -{ .mfi -(p13) cmp.eq.unc p13,p14 = GR_y_sign, r0 // Test y pos odd integer -(p8) fcmp.eq.s0 p12,p0 = FR_Input_Y, f0 // If x=0 and y>0 flag if y denormal - nop.i 999 -} -;; - -// -// Return +/-0 when x=+/-0 and y is positive odd integer -// -{ .mfb - nop.m 999 -(p13) mov FR_Result = FR_Input_X // If x=0, y pos odd int, result=x -(p13) br.ret.spnt b0 // Exit x=0, y pos odd int, result=x -} -;; - -// -// Return +/-inf when x=+/-0 and y is negative odd int -// -{ .mfb -(p14) mov GR_Parameter_TAG = 21 -(p14) frcpa.s0 FR_Result, p0 = f1, FR_Input_X // Result +-inf, set Z flag -(p14) br.cond.spnt __libm_error_region -} -;; - -// -// Return +0 when x=+/-0 and y positive and not an odd integer -// -{ .mfb - nop.m 999 -(p8) mov FR_Result = f0 // If x=0, y>0 and not odd integer, result=+0 -(p8) br.ret.sptk b0 // Exit x=0, y>0 and not odd integer, result=+0 -} -;; - -// -// Return +inf when x=+/-0 and y is negative and not odd int -// -{ .mfb - mov GR_Parameter_TAG = 21 - frcpa.s0 FR_Result, p10 = f1,f0 // Result +inf, raise Z flag - br.cond.sptk __libm_error_region -} -;; - - -POWL_64_X_IS_INF: -// -// Here if x=inf, y not 1 or nan -// -{ .mfi - and GR_exp_y = GR_exp_mask,GR_signexp_y // Get biased exponent y - fclass.m p13, p0 = FR_Input_X,0x022 // Test x=-inf - nop.i 999 -} -;; - -{ .mfi - and GR_y_sign = GR_sign_mask,GR_signexp_y // Get sign of y - fcmp.eq.s0 p9,p0 = FR_Input_Y, f0 // Dummy to set flag if y denorm - nop.i 999 -} -;; - -// -// Maybe y is < 1 already, so -// isn't an int. -// -{ .mfi -(p13) cmp.lt.unc p9, p8 = GR_exp_y,GR_exp_bias // Test 0 < |y| < 1 if x=-inf - fclass.m p11, p0 = FR_Input_X,0x021 // Test x=+inf - sub GR_exp_y = GR_exp_y,GR_exp_bias // Get true exponent y -} -;; - -// -// Shift significand of y looking for nonzero bits -// For y > 1, shift signif_y exp_y bits to the left -// For y < 1, turn on 4 low order bits of significand of y -// so that the fraction will always be non-zero -// -{ .mmi -(p9) or GR_exp_y= 0xF,GR_signif_y // Force nonzero fraction if y<1 -;; -(p11) cmp.eq.unc p14,p12 = GR_y_sign, r0 // Test x=+inf, y>0 -(p8) shl GR_exp_y= GR_signif_y,GR_exp_y // Get lsb of int + fraction - // Wait 4 cycles to use result -} -;; - -// -// Return +inf for x=+inf, y > 0 -// Return +0 for x=+inf, y < 0 -// -{ .mfi - nop.m 999 -(p12) mov FR_Result = f0 // If x=+inf, y<0, result=+0 - nop.i 999 -} -{ .mfb - nop.m 999 -(p14) fma.s0 FR_Result = FR_Input_X,f1,f0 // If x=+inf, y>0, result=+inf -(p11) br.ret.sptk b0 // Exit x=+inf -} -;; - -// -// Here only if x=-inf. Wait until can use result of shl... -// -{ .mmi - nop.m 999 -;; - nop.m 999 - nop.i 999 -} -;; - -{ .mfi - cmp.eq p8,p9 = GR_y_sign, r0 // Test y pos - nop.f 999 - shl GR_fraction_y = GR_exp_y,1 // Shift left 1 to get fraction -} -;; - -{ .mmi - cmp.eq p13,p0 = GR_fraction_y, r0 // Test y integer -;; - nop.m 999 -(p13) tbit.nz.unc p13,p0 = GR_exp_y, 63 // Test y odd integer -} -;; - -// -// Is y even or odd? -// -{ .mii -(p13) cmp.eq.unc p14,p10 = GR_y_sign, r0 // Test x=-inf, y pos odd int -(p13) cmp.ne.and p8,p9 = r0,r0 // If y odd int, turn off p8,p9 - nop.i 999 -} -;; - -// -// Return -0 for x = -inf and y < 0 and odd int. -// Return -Inf for x = -inf and y > 0 and odd int. -// -{ .mfi - nop.m 999 -(p10) fmerge.ns FR_Result = f0, f0 // If x=-inf, y neg odd int, result=-0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p14) fmpy.s0 FR_Result = FR_Input_X,f1 // If x=-inf, y pos odd int, result=-inf - nop.i 999 -} -;; - -// -// Return Inf for x = -inf and y > 0 not an odd int. -// Return +0 for x = -inf and y < 0 not an odd int. -// -.pred.rel "mutex",p8,p9 -{ .mfi - nop.m 999 -(p8) fmerge.ns FR_Result = FR_Input_X, FR_Input_X // If x=-inf, y>0 not odd int - // result=+inf - nop.i 999 -} -{ .mfb - nop.m 999 -(p9) fmpy.s0 FR_Result = f0,f0 // If x=-inf, y<0 not odd int - // result=+0 - br.ret.sptk b0 // Exit for x=-inf -} -;; - - -POWL_64_Y_IS_INF: -// Here if y=inf, x not 1 or nan -// -// For y = +Inf and |x| < 1 returns 0 -// For y = +Inf and |x| > 1 returns Inf -// For y = -Inf and |x| < 1 returns Inf -// For y = -Inf and |x| > 1 returns 0 -// For y = Inf and |x| = 1 returns 1 -// -{ .mfi - nop.m 999 - fclass.m p8, p0 = FR_Input_Y, 0x021 // Test y=+inf - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p9, p0 = FR_Input_Y, 0x022 // Test y=-inf - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fabs FR_X = FR_Input_X // Form |x| - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fcmp.eq.s0 p10,p0 = FR_Input_X, f0 // flag if x denormal - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fcmp.lt.unc.s1 p6, p0 = FR_X, f1 // Test y=+inf, |x|<1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fcmp.gt.unc.s1 p7, p0 = FR_X, f1 // Test y=+inf, |x|>1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fcmp.lt.unc.s1 p12, p0 = FR_X, f1 // Test y=-inf, |x|<1 - nop.i 999 -} -{ .mfi - nop.m 999 -(p6) fmpy.s0 FR_Result = f0,f0 // If y=+inf, |x|<1, result=+0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fcmp.gt.unc.s1 p13, p0 = FR_X, f1 // Test y=-inf, |x|>1 - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fmpy.s0 FR_Result = FR_Input_Y, f1 // If y=+inf, |x|>1, result=+inf - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fcmp.eq.s1 p14, p0 = FR_X, f1 // Test y=inf, |x|=1 - nop.i 999 -} -{ .mfi - nop.m 999 -(p12) fnma.s0 FR_Result = FR_Input_Y, f1, f0 // If y=-inf, |x|<1, result=+inf - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p13) mov FR_Result = f0 // If y=-inf, |x|>1, result=+0 - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p14) fmpy.s0 FR_Result = f1,f1 // If y=inf, |x|=1, result=+1 - br.ret.sptk b0 // Common return for y=inf -} -;; - - -// Here if x or y denorm/unorm -POWL_DENORM: -{ .mmi - getf.sig GR_signif_Z = FR_norm_X // Get significand of x -;; - getf.exp GR_signexp_y = FR_norm_Y // Get sign and exp of y - nop.i 999 -} -;; - -{ .mfi - getf.sig GR_signif_y = FR_norm_Y // Get significand of y - nop.f 999 - nop.i 999 -} -;; - -{ .mib - getf.exp GR_signexp_x = FR_norm_X // Get sign and exp of x - extr.u GR_Index1 = GR_signif_Z, 59, 4 // Extract upper 4 signif bits of x - br.cond.sptk POWL_COMMON // Branch back to main path -} -;; - - -POWL_64_UNSUPPORT: -// -// Raise exceptions for specific -// values - pseudo NaN and -// infinities. -// Return NaN and raise invalid -// -{ .mfb - nop.m 999 - fmpy.s0 FR_Result = FR_Input_X,f0 - br.ret.sptk b0 -} -;; - -POWL_64_XNEG: -// -// Raise invalid for x < 0 and -// y not an integer -// -{ .mfi - nop.m 999 - frcpa.s0 FR_Result, p8 = f0, f0 - mov GR_Parameter_TAG = 22 -} -{ .mib - nop.m 999 - nop.i 999 - br.cond.sptk __libm_error_region -} -;; - -POWL_64_SQRT: -{ .mfi - nop.m 999 - frsqrta.s0 FR_Result,p10 = FR_save_Input_X - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fma.s1 f62=FR_Half,FR_save_Input_X,f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fma.s1 f63=FR_Result,FR_Result,f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fnma.s1 f32=f63,f62,FR_Half - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fma.s1 f33=f32,FR_Result,FR_Result - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fma.s1 f34=f33,f62,f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fnma.s1 f35=f34,f33,FR_Half - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fma.s1 f63=f35,f33,f33 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fma.s1 f32=FR_save_Input_X,f63,f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_Result=f63,f62,f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fma.s1 f33=f11,f63,f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fnma.s1 f34=f32,f32,FR_save_Input_X - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fnma.s1 f35=FR_Result,f63,FR_Half - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fma.s1 f62=f33,f34,f32 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 f63=f33,f35,f33 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fnma.s1 f32=f62,f62,FR_save_Input_X - nop.i 999 ;; -} -{ .mfb - nop.m 999 -(p10) fma.s0 FR_Result=f32,f63,f62 - br.ret.sptk b0 // Exit for x > 0, y = 0.5 -} -;; - -GLOBAL_LIBM_END(powl) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfe [GR_Parameter_Y] = FR_Input_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfe [GR_Parameter_X] = FR_save_Input_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfe [GR_Parameter_Y] = FR_Result // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region#) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_rem_pio2.c b/sysdeps/ia64/fpu/e_rem_pio2.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/e_rem_pio2.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/e_rem_pio2f.c b/sysdeps/ia64/fpu/e_rem_pio2f.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/e_rem_pio2f.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/e_rem_pio2l.c b/sysdeps/ia64/fpu/e_rem_pio2l.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/e_rem_pio2l.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/e_remainder.S b/sysdeps/ia64/fpu/e_remainder.S deleted file mode 100644 index 3cd5aac578..0000000000 --- a/sysdeps/ia64/fpu/e_remainder.S +++ /dev/null @@ -1,589 +0,0 @@ -.file "remainder.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//==================================================================== -// 02/02/00 Initial version -// 03/02/00 New Algorithm -// 04/04/00 Unwind support added -// 07/21/00 Fixed quotient=2^{24*m+23}*1.q1...q23 1 bug -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 11/29/00 Set FR_Y to f9 -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//==================================================================== -// double remainder(double,double); -// -// Overview of operation -//==================================================================== -// remainder(a,b)=a-i*b, -// where i is an integer such that, if b!=0 and a is finite, -// |a/b-i|<=1/2. If |a/b-i|=1/2, i is even. -// -// Algorithm -//==================================================================== -// a). eliminate special cases -// b). if |a/b|<0.25 (first quotient estimate), return a -// c). use single precision divide algorithm to get quotient q -// rounded to 24 bits of precision -// d). calculate partial remainders (using both q and q-ulp); -// select one and RZ(a/b) based on the sign of |a|-|b|*q -// e). if the exponent difference (exponent(a)-exponent(b)) -// is less than 24 (quotient estimate<2^{24}-2), use RZ(a/b) -// and sticky bits to round to integer; exit loop and -// calculate final remainder -// f). if exponent(a)-exponent(b)>=24, select new value of a as -// the partial remainder calculated using RZ(a/b); -// repeat from c). -// -// Special cases -//==================================================================== -// a=+/- Inf, or b=+/-0: return NaN, call libm_error_support -// a=NaN or b=NaN: return NaN - -// Registers used -//==================================================================== -// Predicate registers: p6-p14 -// General registers: r2,r3,r28,r29,r32 (ar.pfs), r33-r39 -// Floating point registers: f6-f15,f32 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - -FR_X = f10 -FR_Y = f9 -FR_RESULT = f8 - - -.section .text -GLOBAL_IEEE754_ENTRY(remainder) - -// inputs in f8, f9 -// result in f8 - -{ .mfi - alloc r32=ar.pfs,1,4,4,0 - // f13=|a| - fmerge.s f13=f0,f8 - nop.i 0 -} - {.mfi - nop.m 0 - // f14=|b| - fmerge.s f14=f0,f9 - nop.i 0;; -} - {.mlx - mov r28=0x2ffdd - // r2=2^{23} - movl r3=0x4b000000;; -} - -// Y +-NAN, +-inf, +-0? p11 -{ .mfi - setf.exp f32=r28 - fclass.m.unc p11,p0 = f9, 0xe7 - nop.i 999 -} -// qnan snan inf norm unorm 0 -+ -// 1 1 1 0 0 0 11 -// e 3 -// X +-NAN, +-inf, ? p9 -{ .mfi - nop.m 999 - fclass.m.unc p9,p0 = f8, 0xe3 - nop.i 999;; -} - -{.mfi - nop.m 0 - mov f12=f0 - nop.i 0 -} -{ .mfi - // set p7=1 - cmp.eq.unc p7,p0=r0,r0 - // Step (1) - // y0 = 1 / b in f10 - frcpa.s1 f10,p6=f13,f14 - nop.i 0;; -} - -{.bbb - (p9) br.cond.spnt FREM_X_NAN_INF - (p11) br.cond.spnt FREM_Y_NAN_INF_ZERO - nop.b 0 -} {.mfi - nop.m 0 - // set D flag if a (f8) is denormal - fnma.s0 f6=f8,f1,f8 - nop.i 0;; -} - - -remloop24: - { .mfi - nop.m 0 - // Step (2) - // q0 = a * y0 in f12 - (p6) fma.s1 f12=f13,f10,f0 - nop.i 0 -} { .mfi - nop.m 0 - // Step (3) - // e0 = 1 - b * y0 in f7 - (p6) fnma.s1 f7=f14,f10,f1 - nop.i 0;; -} {.mlx - nop.m 0 - // r2=1.25*2^{-24} - movl r2=0x33a00000;; -} - -{.mfi - nop.m 0 - // q1=q0*(1+e0) - (p6) fma.s1 f15=f12,f7,f12 - nop.i 0 -} -{ .mfi - nop.m 0 - // Step (4) - // e1 = e0 * e0 + E in f7 - (p6) fma.s1 f7=f7,f7,f32 - nop.i 0;; -} - {.mii - (p7) getf.exp r29=f12 - (p7) mov r28=0xfffd - nop.i 0;; -} - { .mfi - // f12=2^{23} - setf.s f12=r3 - // Step (5) - // q2 = q1 + e1 * q1 in f11 - (p6) fma.s.s1 f11=f7,f15,f15 - nop.i 0 -} { .mfi - nop.m 0 - // Step (6) - // q2 = q1 + e1 * q1 in f6 - (p6) fma.s1 f6=f7,f15,f15 - nop.i 0;; -} - - {.mmi - // f15=1.25*2^{-24} - setf.s f15=r2 - // q<1/4 ? (i.e. expon< -2) - (p7) cmp.gt p7,p0=r28,r29 - nop.i 0;; -} - -{.mfb - // r29= -32+bias - mov r29=0xffdf - // if |a/b|<1/4, set D flag before returning - (p7) fma.d.s0 f9=f9,f0,f8 - nop.b 0;; -} - {.mfb - nop.m 0 - // can be combined with bundle above if sign of 0 or - // FTZ enabled are not important - (p7) fmerge.s f8=f8,f9 - // return if |a|<4*|b| (estimated quotient < 1/4) - (p7) br.ret.spnt b0;; -} - {.mfi - // f7=2^{-32} - setf.exp f7=r29 - // set f8 to current a value | sign - fmerge.s f8=f8,f13 - nop.i 0;; -} - - - {.mfi - getf.exp r28=f6 - // last step ? (q<2^{23}) - fcmp.lt.unc.s1 p0,p12=f6,f12 - nop.i 0;; -} - {.mfi - nop.m 0 - // r=a-b*q - fnma.s1 f6=f14,f11,f13 - nop.i 0 -} {.mfi - // r2=23+bias - mov r2=0xffff+23 - // q'=q-q*(1.25*2^{-24}) (q'=q-ulp) - fnma.s.s1 f15=f11,f15,f11 - nop.i 0;; -} - {.mmi - nop.m 0 - cmp.eq p11,p14=r2,r28 - nop.i 0;; -} - -.pred.rel "mutex",p11,p14 - {.mfi - nop.m 0 - // if exp_q=2^23, then r=a-b*2^{23} - (p11) fnma.s1 f13=f12,f14,f13 - nop.i 0 -} -{.mfi - nop.m 0 - // r2=a-b*q' - (p14) fnma.s1 f13=f14,f15,f13 - nop.i 0;; -} - {.mfi - nop.m 0 - // r>0 iff q=RZ(a/b) and inexact - fcmp.gt.unc.s1 p8,p0=f6,f0 - nop.i 0 -} {.mfi - nop.m 0 - // r<0 iff q'=RZ(a/b) and inexact - (p14) fcmp.lt.unc.s1 p9,p10=f6,f0 - nop.i 0;; -} - -.pred.rel "mutex",p8,p9 - {.mfi - nop.m 0 - // (p8) Q=q+(last iteration ? sticky bits:0) - // i.e. Q=q+q*x (x=2^{-32} or 0) - (p8) fma.s1 f11=f11,f7,f11 - nop.i 0 -} {.mfi - nop.m 0 - // (p9) Q=q'+(last iteration ? sticky bits:0) - // i.e. Q=q'+q'*x (x=2^{-32} or 0) - (p9) fma.s1 f11=f15,f7,f15 - nop.i 0;; -} - - {.mfb - nop.m 0 - // (p9) set r=r2 (new a, if not last iteration) - // (p10) new a =r - (p10) mov f13=f6 - (p12) br.cond.sptk remloop24;; -} - -// last iteration - {.mfi - nop.m 0 - // set f9=|b|*sgn(a) - fmerge.s f9=f8,f9 - nop.i 0 -} - {.mfi - nop.m 0 - // round to integer - fcvt.fx.s1 f11=f11 - nop.i 0;; -} - {.mfi - nop.m 0 - // save sign of a - fmerge.s f7=f8,f8 - nop.i 0 -} {.mfi - nop.m 0 - // normalize - fcvt.xf f11=f11 - nop.i 0;; -} - {.mfi - nop.m 0 - // This can be removed if sign of 0 is not important - // get remainder using sf1 - fnma.d.s1 f12=f9,f11,f8 - nop.i 0 -} - {.mfi - nop.m 0 - // get remainder - fnma.d.s0 f8=f9,f11,f8 - nop.i 0;; -} - {.mfi - nop.m 0 - // f12=0? - // This can be removed if sign of 0 is not important - fcmp.eq.unc.s1 p8,p0=f12,f0 - nop.i 0;; -} - {.mfb - nop.m 0 - // if f8=0, set sign correctly - // This can be removed if sign of 0 is not important - (p8) fmerge.s f8=f7,f8 - // return - br.ret.sptk b0;; -} - - -FREM_X_NAN_INF: - -// Y zero ? -{.mfi - nop.m 0 - fma.s1 f10=f9,f1,f0 - nop.i 0;; -} -{.mfi - nop.m 0 - fcmp.eq.unc.s1 p11,p0=f10,f0 - nop.i 0;; -} -{.mib - nop.m 0 - nop.i 0 - // if Y zero - (p11) br.cond.spnt FREM_Y_ZERO;; -} - -// X infinity? Return QNAN indefinite -{ .mfi - nop.m 999 - fclass.m.unc p8,p0 = f8, 0x23 - nop.i 999 -} -// X infinity? Return QNAN indefinite -{ .mfi - nop.m 999 - fclass.m.unc p11,p0 = f8, 0x23 - nop.i 999;; -} -// Y NaN ? -{.mfi - nop.m 999 -(p8) fclass.m.unc p0,p8=f9,0xc3 - nop.i 0;; -} -{.mfi - nop.m 999 - // also set Denormal flag if necessary -(p8) fma.s0 f9=f9,f1,f0 - nop.i 0 -} -{ .mfi - nop.m 999 -(p8) frcpa.s0 f8,p7 = f8,f8 - nop.i 999 ;; -} - -{.mfi - nop.m 999 -(p11) mov f10=f8 - nop.i 0 -} -{ .mfi - nop.m 999 -(p8) fma.d.s0 f8=f8,f1,f0 - nop.i 0 ;; -} - -{ .mfb - nop.m 999 - frcpa.s0 f8,p7=f8,f9 - (p11) br.cond.spnt EXP_ERROR_RETURN;; -} -{ .mib - nop.m 0 - nop.i 0 - br.ret.spnt b0 ;; -} - - -FREM_Y_NAN_INF_ZERO: - -// Y INF -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f9, 0x23 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -(p7) fma.d.s0 f8=f8,f1,f0 -(p7) br.ret.spnt b0 ;; -} - -// Y NAN? -{ .mfi - nop.m 999 - fclass.m.unc p9,p0 = f9, 0xc3 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -(p9) fma.d.s0 f8=f9,f1,f0 -(p9) br.ret.spnt b0 ;; -} - -FREM_Y_ZERO: -// Y zero? Must be zero at this point -// because it is the only choice left. -// Return QNAN indefinite - -// X NAN? -{ .mfi - nop.m 999 - fclass.m.unc p9,p10 = f8, 0xc3 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fclass.nm p9,p10 = f8, 0xff - nop.i 999 ;; -} - -{.mfi - nop.m 999 - (p9) frcpa.s0 f11,p7=f8,f0 - nop.i 0;; -} - -{ .mfi - nop.m 999 -(p10) frcpa.s0 f11,p7 = f0,f0 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fmerge.s f10 = f8, f8 - nop.i 999 -} - -{ .mfi - nop.m 999 - fma.d.s0 f8=f11,f1,f0 - nop.i 999 -} - - -EXP_ERROR_RETURN: - -{ .mib - mov GR_Parameter_TAG = 124 - nop.i 999 - br.sptk __libm_error_region;; -} - -GLOBAL_IEEE754_END(remainder) -weak_alias (__remainder, drem) - - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_remainderf.S b/sysdeps/ia64/fpu/e_remainderf.S deleted file mode 100644 index df4cfdddc8..0000000000 --- a/sysdeps/ia64/fpu/e_remainderf.S +++ /dev/null @@ -1,607 +0,0 @@ -.file "remainderf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//==================================================================== -// 02/02/00 Initial version -// 03/02/00 New algorithm -// 04/04/00 Unwind support added -// 07/21/00 Fixed quotient=2^{24*m+23} bug -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 11/29/00 Set FR_Y to f9 -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//==================================================================== -// float remainderf(float,float); -// -// Overview of operation -//==================================================================== -// remainder(a,b)=a-i*b, -// where i is an integer such that, if b!=0 and a is finite, -// |a/b-i|<=1/2. If |a/b-i|=1/2, i is even. -// -// Algorithm -//==================================================================== -// a). eliminate special cases -// b). if |a/b|<0.25 (first quotient estimate), return a -// c). use single precision divide algorithm to get quotient q -// rounded to 24 bits of precision -// d). calculate partial remainders (using both q and q-ulp); -// select one and RZ(a/b) based on the sign of |a|-|b|*q -// e). if the exponent difference (exponent(a)-exponent(b)) -// is less than 24 (quotient estimate<2^{24}-2), use RZ(a/b) -// and sticky bits to round to integer; exit loop and -// calculate final remainder -// f). if exponent(a)-exponent(b)>=24, select new value of a as -// the partial remainder calculated using RZ(a/b); -// repeat from c). -// -// Special cases -//==================================================================== -// a=+/- Inf, or b=+/-0: return NaN, call libm_error_support -// a=NaN or b=NaN: return NaN -// -// Registers used -//==================================================================== -// Predicate registers: p6-p12 -// General registers: r2,r3,r28,r29,r32 (ar.pfs), r33-r39 -// Floating point registers: f6-f15 -// - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - -FR_X = f10 -FR_Y = f9 -FR_RESULT = f8 - - -.section .text -GLOBAL_IEEE754_ENTRY(remainderf) - -// inputs in f8, f9 -// result in f8 - -{ .mfi - alloc r32=ar.pfs,1,4,4,0 - // f13=|a| - fmerge.s f13=f0,f8 - nop.i 0 -} - {.mfi - nop.m 0 - // f14=|b| - fmerge.s f14=f0,f9 - nop.i 0;; -} - {.mlx - nop.m 0 - // r2=2^{24}-2 - movl r3=0x4b7ffffe;; -} - -// Y +-NAN, +-inf, +-0? p11 -{ .mfi - nop.m 999 - fclass.m.unc p11,p0 = f9, 0xe7 - nop.i 999 -} -// qnan snan inf norm unorm 0 -+ -// 1 1 1 0 0 0 11 -// e 3 -// X +-NAN, +-inf, ? p9 -{ .mfi - nop.m 999 - fclass.m.unc p9,p0 = f8, 0xe3 - nop.i 999;; -} - -{.mfi - nop.m 0 - mov f15=f0 - nop.i 0 -} -{ .mfi - // set p7=1 - cmp.eq.unc p7,p0=r0,r0 - // Step (1) - // y0 = 1 / b in f10 - frcpa.s1 f10,p6=f13,f14 - nop.i 0;; -} -{.bbb - (p9) br.cond.spnt FREM_X_NAN_INF - (p11) br.cond.spnt FREM_Y_NAN_INF_ZERO - nop.b 0 -} {.mfi - nop.m 0 - // set D flag if a (f8) is denormal - fnma.s0 f6=f8,f1,f8 - nop.i 0;; -} - -.align 32 -remloop24: - { .mfi - // f12=2^{24}-2 - setf.s f12=r3 - // Step (2) - // q0 = a * y0 in f15 - (p6) fma.s1 f15=f13,f10,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - // Step (3) - // e0 = 1 - b * y0 in f7 - (p6) fnma.s1 f7=f14,f10,f1 - nop.i 0;; -} -{.mlx - nop.m 0 - // r2=1.25*2^{-24} - movl r2=0x33a00000;; -} - { .mfi - nop.m 0 - // Step (4) - // q1 = q0 + e0 * q0 in f6 - (p6) fma.s1 f6=f7,f15,f15 - nop.i 0 -} -{ .mfi - nop.m 0 - // Step (5) - // e1 = e0 * e0 in f7 - (p6) fma.s1 f7=f7,f7,f0 - nop.i 0;; -} - {.mii - (p7) getf.exp r29=f15 - (p7) mov r28=0xfffd - nop.i 0;; -} - - { .mfi - // f15=1.25*2^{-24} - setf.s f15=r2 - // Step (6) - // q2 = q1 + e1 * q1 in f6 - (p6) fma.s1 f6=f7,f6,f6 - nop.i 0 -} -{ .mfi - mov r2=0x3e7 - // Step (7) - // e2 = e1 * e1 in f7 - (p6) fma.s1 f7=f7,f7,f0 - nop.i 0;; -} - - {.mmi - // q<1/4 ? (i.e. expon< -2) - (p7) cmp.gt.unc p7,p0=r28,r29 - nop.m 0 - // r2=0x3e7000000 - shl r2=r2,24;; -} - -{.mfb - // r2=0x3e7000001 - add r2=1,r2 - // if |a/b|<1/4, set D flag before returning - (p7) fma.s.s0 f9=f9,f0,f8 - nop.b 0;; -} - {.mfb - nop.m 0 - // can be combined with bundle above if sign of 0 or - // FTZ enabled are not important - (p7) fmerge.s f8=f8,f9 - // return if |a|<4*|b| (estimated quotient < 1/4) - (p7) br.ret.spnt b0;; -} - {.mfi - nop.m 0 - // set f8 to current a value | sign - fmerge.s f8=f8,f13 - // r2=2^{-24}+2^{-48} (double prec.) - shl r2=r2,28;; -} - - -{ .mfi - // r29= -32+bias - mov r29=0xffdf - // Step (8) - // q3 = q2 + e2 * q2 in f6 - (p6) fma.d.s1 f6=f7,f6,f6 - nop.i 0;; -} -{ .mfi - nop.m 0 - // Step (9) - // q = q3 in f11 - (p6) fma.s.s1 f11=f6,f1,f0 - nop.i 0;; -} - {.mfi - // f7=2^{-24} - setf.d f7=r2 - // last step ? (q3<2^{24}-2 --> q<2^{24}) - fcmp.lt.unc.s1 p0,p12=f6,f12 - nop.i 0 -} {.mfi - // f12=2^{-32} - setf.exp f12=r29 - nop.f 0 - nop.i 0;; -} - {.mfi - nop.m 0 - // r=a-b*q - fnma.s1 f6=f14,f11,f13 - nop.i 0 -} -{.mfi - nop.m 0 - // q'=q-q*(1.25*2^{-24}) (q'=q-ulp) - fnma.s.s1 f15=f11,f15,f11 - nop.i 0;; -} - - {.mfi - nop.m 0 - // r2=a-b*q' - fnma.s1 f13=f14,f15,f13 - nop.i 0;; -} - {.mfi - nop.m 0 - // r>0 iff q=RZ(a/b) and inexact - fcmp.gt.unc.s1 p8,p0=f6,f0 - nop.i 0 -} -{.mfi - nop.m 0 - // r<0 iff q'=RZ(a/b) and inexact - fcmp.lt.unc.s1 p9,p10=f6,f0 - nop.i 0;; -} -.pred.rel "mutex",p8,p9 - {.mfi - nop.m 0 - // (p8) Q=q+(last iteration ? sticky bits:0) - // i.e. Q=q+q*x (x=2^{-32} or 0) - (p8) fma.s1 f11=f11,f12,f11 - nop.i 0 -} -{.mfi - nop.m 0 - // (p9) Q=q'+(last iteration ? sticky bits:0) - // i.e. Q=q'+q'*x (x=2^{-24} or 0: if expon. difference=23, want to round back to q) - (p9) fma.s1 f11=f15,f7,f15 - nop.i 0;; -} - - {.mfb - nop.m 0 - // (p9) set r=r2 (new a, if not last iteration) - // (p10) new a =r - (p10) mov f13=f6 - (p12) br.cond.sptk remloop24;; -} - -// last iteration - {.mfi - nop.m 0 - // set f9=|b|*sgn(a) - fmerge.s f9=f8,f9 - nop.i 0 -} - {.mfi - nop.m 0 - // round to integer - fcvt.fx.s1 f11=f11 - nop.i 0;; -} - {.mfi - nop.m 0 - // save sign of a - fmerge.s f7=f8,f8 - nop.i 0 -} -{.mfi - nop.m 0 - // normalize - fcvt.xf f11=f11 - nop.i 0;; -} - {.mfi - nop.m 0 - // This can be removed if sign of 0 is not important - // get remainder using sf1 - fnma.s.s1 f12=f9,f11,f8 - nop.i 0 -} - {.mfi - nop.m 0 - // get remainder - fnma.s.s0 f8=f9,f11,f8 - nop.i 0;; -} - - - - {.mfi - nop.m 0 - // f12=0? - // This can be removed if sign of 0 is not important - fcmp.eq.unc.s1 p8,p0=f12,f0 - nop.i 0;; -} - {.mfb - nop.m 0 - // if f8=0, set sign correctly - // This can be removed if sign of 0 is not important - (p8) fmerge.s f8=f7,f8 - // return - br.ret.sptk b0;; -} - - -FREM_X_NAN_INF: - -// Y zero ? -{.mfi - nop.m 0 - fma.s1 f10=f9,f1,f0 - nop.i 0;; -} -{.mfi - nop.m 0 - fcmp.eq.unc.s1 p11,p0=f10,f0 - nop.i 0;; -} -{.mib - nop.m 0 - nop.i 0 - // if Y zero - (p11) br.cond.spnt FREM_Y_ZERO;; -} - -// X infinity? Return QNAN indefinite -{ .mfi - nop.m 999 - fclass.m.unc p8,p0 = f8, 0x23 - nop.i 999 -} -// X infinity? Return QNAN indefinite -{ .mfi - nop.m 999 - fclass.m.unc p11,p0 = f8, 0x23 - nop.i 999;; -} -// Y NaN ? -{.mfi - nop.m 999 -(p8) fclass.m.unc p0,p8=f9,0xc3 - nop.i 0;; -} -{.mfi - nop.m 999 - // also set Denormal flag if necessary -(p8) fma.s0 f9=f9,f1,f0 - nop.i 0 -} -{ .mfi - nop.m 999 -(p8) frcpa.s0 f8,p7 = f8,f8 - nop.i 999 ;; -} - -{.mfi - nop.m 999 -(p11) mov f10=f8 - nop.i 0 -} -{ .mfi - nop.m 999 -(p8) fma.s.s0 f8=f8,f1,f0 - nop.i 0 ;; -} - -{ .mfb - nop.m 999 - frcpa.s0 f8,p7=f8,f9 - (p11) br.cond.spnt EXP_ERROR_RETURN;; -} -{ .mib - nop.m 0 - nop.i 0 - br.ret.spnt b0 ;; -} - - -FREM_Y_NAN_INF_ZERO: - -// Y INF -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f9, 0x23 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -(p7) fma.s.s0 f8=f8,f1,f0 -(p7) br.ret.spnt b0 ;; -} - -// Y NAN? -{ .mfi - nop.m 999 - fclass.m.unc p9,p0 = f9, 0xc3 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -(p9) fma.s.s0 f8=f9,f1,f0 -(p9) br.ret.spnt b0 ;; -} - -FREM_Y_ZERO: -// Y zero? Must be zero at this point -// because it is the only choice left. -// Return QNAN indefinite - -// X NAN? -{ .mfi - nop.m 999 - fclass.m.unc p9,p10 = f8, 0xc3 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fclass.nm p9,p10 = f8, 0xff - nop.i 999 ;; -} - -{.mfi - nop.m 999 - (p9) frcpa.s0 f11,p7=f8,f0 - nop.i 0;; -} - -{ .mfi - nop.m 999 -(p10) frcpa.s0 f11,p7 = f0,f0 -nop.i 999;; -} - -{ .mfi - nop.m 999 - fmerge.s f10 = f8, f8 - nop.i 999 -} - -{ .mfi - nop.m 999 - fma.s.s0 f8=f11,f1,f0 - nop.i 999 -} - - -EXP_ERROR_RETURN: - -{ .mib - mov GR_Parameter_TAG = 125 - nop.i 999 - br.sptk __libm_error_region;; -} - -GLOBAL_IEEE754_END(remainderf) -weak_alias (__remainderf, dremf) - - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support#;; // Call error handling function -} -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_remainderl.S b/sysdeps/ia64/fpu/e_remainderl.S deleted file mode 100644 index d9a9ee8d29..0000000000 --- a/sysdeps/ia64/fpu/e_remainderl.S +++ /dev/null @@ -1,614 +0,0 @@ -.file "remainderl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//==================================================================== -// 02/02/00 Initial version -// 03/02/00 New algorithm -// 04/04/00 Unwind support added -// 07/21/00 Fixed quotient=2^{24*m+23}*1.q1...q23 1 bug -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 11/29/00 Set FR_Y to f9 -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//==================================================================== -// long double remainderl(long double,long double); -// -// Overview of operation -//==================================================================== -// remainder(a,b)=a-i*b, -// where i is an integer such that, if b!=0 and a is finite, -// |a/b-i|<=1/2. If |a/b-i|=1/2, i is even. -// -// Algorithm -//==================================================================== -// a). eliminate special cases -// b). if |a/b|<0.25 (first quotient estimate), return a -// c). use single precision divide algorithm to get quotient q -// rounded to 24 bits of precision -// d). calculate partial remainders (using both q and q-ulp); -// select one and RZ(a/b) based on the sign of |a|-|b|*q -// e). if the exponent difference (exponent(a)-exponent(b)) -// is less than 24 (quotient estimate<2^{24}-2), use RZ(a/b) -// and sticky bits to round to integer; exit loop and -// calculate final remainder -// f). if exponent(a)-exponent(b)>=24, select new value of a as -// the partial remainder calculated using RZ(a/b); -// repeat from c). -// -// Special cases -//==================================================================== -// a=+/- Inf, or b=+/-0: return NaN, call libm_error_support -// a=NaN or b=NaN: return NaN -// -// Registers used -//==================================================================== -// Predicate registers: p6-p14 -// General registers: r2,r3,r28,r29,r32 (ar.pfs), r33-r39 -// Floating point registers: f6-f15,f32 -// - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - -FR_X = f10 -FR_Y = f9 -FR_RESULT = f8 - - -.section .text -GLOBAL_IEEE754_ENTRY(remainderl) - -// inputs in f8, f9 -// result in f8 - -{ .mfi - alloc r32=ar.pfs,1,4,4,0 - // f13=|a| - fmerge.s f13=f0,f8 - nop.i 0 -} - {.mfi - getf.sig r29=f9 - // f14=|b| - fmerge.s f14=f0,f9 - nop.i 0;; -} - {.mlx - mov r28=0x2ffdd - // r2=2^{23} - movl r3=0x4b000000;; -} - - -{.mmi -setf.exp f32=r28 -nop.m 0 -// y pseudo-zero ? -cmp.eq p11,p10=r29,r0;; -} - -// Y +-NAN, +-inf, +-0? p11 -{ .mfi - nop.m 999 -(p10) fclass.m p11,p10 = f9, 0xe7 - nop.i 999 -} -// qnan snan inf norm unorm 0 -+ -// 1 1 1 0 0 0 11 -// e 3 -// X +-NAN, +-inf, ? p9 -{ .mfi - nop.m 999 - fclass.m.unc p9,p8 = f8, 0xe3 - nop.i 999;; -} - -{.mfi - nop.m 0 - mov f12=f0 - nop.i 0 -} -{ .mfi - // set p7=1 - cmp.eq.unc p7,p0=r0,r0 - // Step (1) - // y0 = 1 / b in f10 - frcpa.s1 f10,p6=f13,f14 - nop.i 0;; -} -// Y +-NAN, +-inf, +-0? p11 -{ .mfi - nop.m 999 - // pseudo-NaN ? -(p10) fclass.nm p11,p0 = f9, 0xff - nop.i 999 -} - -// qnan snan inf norm unorm 0 -+ -// 1 1 1 0 0 0 11 -// e 3 -// X +-NAN, +-inf, ? p9 - -{ .mfi - nop.m 999 -(p8) fclass.nm p9,p0 = f8, 0xff - nop.i 999;; -} - -{.bbb - (p9) br.cond.spnt FREM_X_NAN_INF - (p11) br.cond.spnt FREM_Y_NAN_INF_ZERO - nop.b 0 -} {.mfi - nop.m 0 - // set D flag if a (f8) is denormal - fnma.s0 f6=f8,f1,f8 - nop.i 0;; -} - -remloop24: - { .mfi - nop.m 0 - // Step (2) - // q0 = a * y0 in f15 - (p6) fma.s1 f12=f13,f10,f0 - nop.i 0 -} { .mfi - nop.m 0 - // Step (3) - // e0 = 1 - b * y0 in f7 - (p6) fnma.s1 f7=f14,f10,f1 - nop.i 0;; -} {.mlx - nop.m 0 - // r2=1.25*2^{-24} - movl r2=0x33a00000;; -} - -{.mfi - nop.m 0 - // q1=q0*(1+e0) - (p6) fma.s1 f15=f12,f7,f12 - nop.i 0 -} -{ .mfi - nop.m 0 - // Step (4) - // e1 = e0 * e0 + E in f7 - (p6) fma.s1 f7=f7,f7,f32 - nop.i 0;; -} - {.mii - (p7) getf.exp r29=f12 - (p7) mov r28=0xfffd - nop.i 0;; -} - - { .mfi - // f12=2^{23} - setf.s f12=r3 - // Step (5) - // q2 = q1 + e1 * q1 in f11 - (p6) fma.s.s1 f11=f7,f15,f15 - nop.i 0 -} { .mfi - nop.m 0 - // Step (6) - // q2 = q1 + e1 * q1 in f6 - (p6) fma.s1 f6=f7,f15,f15 - nop.i 0;; -} - - {.mmi - // f15=1.25*2^{-24} - setf.s f15=r2 - // q<1/4 ? (i.e. expon< -2) - (p7) cmp.gt p7,p0=r28,r29 - nop.i 0;; -} - -{.mfb - // r29= -32+bias - mov r29=0xffdf - // if |a/b|<1/4, set D flag before returning - (p7) fma.s0 f9=f9,f0,f8 - nop.b 0;; -} - {.mfb - nop.m 0 - // can be combined with bundle above if sign of 0 or - // FTZ enabled are not important - (p7) fmerge.s f8=f8,f9 - // return if |a|<4*|b| (estimated quotient < 1/4) - (p7) br.ret.spnt b0;; -} - {.mfi - // f7=2^{-32} - setf.exp f7=r29 - // set f8 to current a value | sign - fmerge.s f8=f8,f13 - nop.i 0;; -} - {.mfi - getf.exp r28=f6 - // last step ? (q<2^{23}) - fcmp.lt.unc.s1 p0,p12=f6,f12 - nop.i 0;; -} - {.mfi - nop.m 0 - // r=a-b*q - fnma.s1 f6=f14,f11,f13 - nop.i 0 -} {.mfi - // r2=23+bias - mov r2=0xffff+23 - // q'=q-q*(1.25*2^{-24}) (q'=q-ulp) - fnma.s.s1 f15=f11,f15,f11 - nop.i 0;; -} - {.mmi - nop.m 0 - cmp.eq p11,p14=r2,r28 - nop.i 0;; -} - -.pred.rel "mutex",p11,p14 - {.mfi - nop.m 0 - // if exp_q=2^23, then r=a-b*2^{23} - (p11) fnma.s1 f13=f12,f14,f13 - nop.i 0 -} -{.mfi - nop.m 0 - // r2=a-b*q' - (p14) fnma.s1 f13=f14,f15,f13 - nop.i 0;; -} - {.mfi - nop.m 0 - // r>0 iff q=RZ(a/b) and inexact - fcmp.gt.unc.s1 p8,p0=f6,f0 - nop.i 0 -} {.mfi - nop.m 0 - // r<0 iff q'=RZ(a/b) and inexact - (p14) fcmp.lt.unc.s1 p9,p10=f6,f0 - nop.i 0;; -} - -.pred.rel "mutex",p8,p9 - {.mfi - nop.m 0 - // (p8) Q=q+(last iteration ? sticky bits:0) - // i.e. Q=q+q*x (x=2^{-32} or 0) - (p8) fma.s1 f11=f11,f7,f11 - nop.i 0 -} {.mfi - nop.m 0 - // (p9) Q=q'+(last iteration ? sticky bits:0) - // i.e. Q=q'+q'*x (x=2^{-32} or 0) - (p9) fma.s1 f11=f15,f7,f15 - nop.i 0;; -} - - {.mfb - nop.m 0 - // (p9) set r=r2 (new a, if not last iteration) - // (p10) new a =r - (p10) mov f13=f6 - (p12) br.cond.sptk remloop24;; -} - -// last iteration - {.mfi - nop.m 0 - // set f9=|b|*sgn(a) - fmerge.s f9=f8,f9 - nop.i 0 -} - {.mfi - nop.m 0 - // round to integer - fcvt.fx.s1 f11=f11 - nop.i 0;; -} - {.mfi - nop.m 0 - // save sign of a - fmerge.s f7=f8,f8 - nop.i 0 -} {.mfi - nop.m 0 - // normalize - fcvt.xf f11=f11 - nop.i 0;; -} - {.mfi - nop.m 0 - // This can be removed if sign of 0 is not important - // get remainder using sf1 - fnma.s1 f12=f9,f11,f8 - nop.i 0 -} - {.mfi - nop.m 0 - // get remainder - fnma.s0 f8=f9,f11,f8 - nop.i 0;; -} - {.mfi - nop.m 0 - // f12=0? - // This can be removed if sign of 0 is not important - fcmp.eq.unc.s1 p8,p0=f12,f0 - nop.i 0;; -} - {.mfb - nop.m 0 - // if f8=0, set sign correctly - // This can be removed if sign of 0 is not important - (p8) fmerge.s f8=f7,f8 - // return - br.ret.sptk b0;; -} - - - -FREM_X_NAN_INF: - -// Y zero ? -{.mfi - nop.m 0 - fma.s1 f10=f9,f1,f0 - nop.i 0;; -} -{.mfi - nop.m 0 - fcmp.eq.unc.s1 p11,p0=f10,f0 - nop.i 0;; -} -{.mib - nop.m 0 - nop.i 0 - // if Y zero - (p11) br.cond.spnt FREM_Y_ZERO;; -} - -// X infinity? Return QNAN indefinite -{ .mfi - nop.m 999 - fclass.m.unc p8,p0 = f8, 0x23 - nop.i 999 -} -// X infinity? Return QNAN indefinite -{ .mfi - nop.m 999 - fclass.m.unc p11,p0 = f8, 0x23 - nop.i 999;; -} -// Y NaN ? -{.mfi - nop.m 999 -(p8) fclass.m.unc p0,p8=f9,0xc3 - nop.i 0;; -} -{.mfi - nop.m 999 - // also set Denormal flag if necessary -(p8) fnma.s0 f9=f9,f1,f9 - nop.i 0 -} -{ .mfi - nop.m 999 -(p8) frcpa.s0 f8,p7 = f8,f8 - nop.i 999 ;; -} - -{.mfi - nop.m 999 -(p11) mov f10=f8 - nop.i 0 -} -{ .mfi - nop.m 999 -(p8) fma.s0 f8=f8,f1,f0 - nop.i 0 ;; -} - -{ .mfb - nop.m 999 - frcpa.s0 f8,p7=f8,f9 - (p11) br.cond.spnt EXP_ERROR_RETURN;; -} -{ .mib - nop.m 0 - nop.i 0 - br.ret.spnt b0 ;; -} - - -FREM_Y_NAN_INF_ZERO: -// Y INF -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f9, 0x23 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -(p7) fma.s0 f8=f8,f1,f0 -(p7) br.ret.spnt b0 ;; -} - -// Y NAN? -{ .mfi - nop.m 999 - fclass.m.unc p9,p10 = f9, 0xc3 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fclass.nm p9,p0 = f9, 0xff - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -(p9) fma.s0 f8=f9,f1,f0 -(p9) br.ret.spnt b0 ;; -} - -FREM_Y_ZERO: -// Y zero? Must be zero at this point -// because it is the only choice left. -// Return QNAN indefinite - -// X NAN? -{ .mfi - nop.m 999 - fclass.m.unc p9,p10 = f8, 0xc3 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fclass.nm p9,p10 = f8, 0xff - nop.i 999 ;; -} - -{.mfi - nop.m 999 - (p9) frcpa.s0 f11,p7=f8,f0 - nop.i 0;; -} -{ .mfi - nop.m 999 -(p10) frcpa.s0 f11,p7 = f0,f0 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fmerge.s f10 = f8, f8 - nop.i 999 -} - -{ .mfi - nop.m 999 - fma.s0 f8=f11,f1,f0 - nop.i 999;; -} - -EXP_ERROR_RETURN: - -{ .mib - mov GR_Parameter_TAG = 123 - nop.i 999 - br.sptk __libm_error_region;; -} - -GLOBAL_IEEE754_END(remainderl) -weak_alias (__remainderl, dreml) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_scalb.S b/sysdeps/ia64/fpu/e_scalb.S deleted file mode 100644 index c25d8ab671..0000000000 --- a/sysdeps/ia64/fpu/e_scalb.S +++ /dev/null @@ -1,599 +0,0 @@ -.file "scalb.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 01/26/01 Scalb completely reworked and now standalone version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 08/06/03 Improved performance -// -// API -//============================================================== -// double = scalb (double x, double n) -// input floating point f8 and floating point f9 -// output floating point f8 -// -// int_type = 0 if int is 32 bits -// int_type = 1 if int is 64 bits -// -// Returns x* 2**n using an fma and detects overflow -// and underflow. -// -// -// Strategy: -// Compute biased exponent of result exp_Result = N + exp_X -// Break into ranges: -// exp_Result > 0x103fe -> Certain overflow -// exp_Result = 0x103fe -> Possible overflow -// 0x0fc01 <= exp_Result < 0x103fe -> No over/underflow (main path) -// 0x0fc01 - 52 <= exp_Result < 0x0fc01 -> Possible underflow -// exp_Result < 0x0fc01 - 52 -> Certain underflow - -FR_Big = f6 -FR_NBig = f7 -FR_Floating_X = f8 -FR_Result = f8 -FR_Floating_N = f9 -FR_Result2 = f9 -FR_Result3 = f10 -FR_Norm_X = f11 -FR_Two_N = f12 -FR_N_float_int = f13 -FR_Norm_N = f14 - -GR_neg_ov_limit= r14 -GR_big_exp = r14 -GR_N_Biased = r15 -GR_Big = r16 -GR_exp_Result = r18 -GR_pos_ov_limit= r19 -GR_exp_sure_ou = r19 -GR_Bias = r20 -GR_N_as_int = r21 -GR_signexp_X = r22 -GR_exp_X = r23 -GR_exp_mask = r24 -GR_max_exp = r25 -GR_min_exp = r26 -GR_min_den_exp = r27 -GR_Scratch = r28 -GR_signexp_N = r29 -GR_exp_N = r30 - -GR_SAVE_B0 = r32 -GR_SAVE_GP = r33 -GR_SAVE_PFS = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Tag = r38 - -.section .text -GLOBAL_IEEE754_ENTRY(scalb) - -// -// Is x NAN, INF, ZERO, +-? -// Build the exponent Bias -// -{ .mfi - getf.exp GR_signexp_N = FR_Floating_N // Get signexp of n - fclass.m p6,p0 = FR_Floating_X, 0xe7 // @snan | @qnan | @inf | @zero - mov GR_Bias = 0x0ffff -} -{ .mfi - mov GR_Big = 35000 // If N this big then certain overflow - fcvt.fx.trunc.s1 FR_N_float_int = FR_Floating_N // Get N in significand - nop.i 0 -} -;; - -{ .mfi - getf.exp GR_signexp_X = FR_Floating_X // Get signexp of x - fclass.m p7,p0 = FR_Floating_N, 0x0b // Test for n=unorm - nop.i 0 -} -// -// Normalize n -// -{ .mfi - mov GR_exp_mask = 0x1ffff // Exponent mask - fnorm.s1 FR_Norm_N = FR_Floating_N - nop.i 0 -} -;; - -// -// Is n NAN, INF, ZERO, +-? -// -{ .mfi - mov GR_big_exp = 0x1003e // Exponent at which n is integer - fclass.m p9,p0 = FR_Floating_N, 0xe7 // @snan | @qnan | @inf | @zero - mov GR_max_exp = 0x103fe // Exponent of maximum double -} -// -// Normalize x -// -{ .mfb - nop.m 0 - fnorm.s1 FR_Norm_X = FR_Floating_X -(p7) br.cond.spnt SCALB_N_UNORM // Branch if n=unorm -} -;; - -SCALB_COMMON1: -// Main path continues. Also return here from u=unorm path. -// Handle special cases if x = Nan, Inf, Zero -{ .mfb - nop.m 0 - fcmp.lt.s1 p7,p0 = FR_Floating_N, f0 // Test N negative -(p6) br.cond.spnt SCALB_NAN_INF_ZERO -} -;; - -// Handle special cases if n = Nan, Inf, Zero -{ .mfi - getf.sig GR_N_as_int = FR_N_float_int // Get n from significand - fclass.m p8,p0 = FR_Floating_X, 0x0b // Test for x=unorm - mov GR_exp_sure_ou = 0x1000e // Exp_N where x*2^N sure over/under -} -{ .mfb - mov GR_min_exp = 0x0fc01 // Exponent of minimum double - fcvt.xf FR_N_float_int = FR_N_float_int // Convert N to FP integer -(p9) br.cond.spnt SCALB_NAN_INF_ZERO -} -;; - -{ .mmi - and GR_exp_N = GR_exp_mask, GR_signexp_N // Get exponent of N -(p7) sub GR_Big = r0, GR_Big // Limit for N - nop.i 0 -} -;; - -{ .mib - cmp.lt p9,p0 = GR_exp_N, GR_big_exp // N possible non-integer? - cmp.ge p6,p0 = GR_exp_N, GR_exp_sure_ou // N certain over/under? -(p8) br.cond.spnt SCALB_X_UNORM // Branch if x=unorm -} -;; - -SCALB_COMMON2: -// Main path continues. Also return here from x=unorm path. -// Create biased exponent for 2**N -{ .mmi -(p6) mov GR_N_as_int = GR_Big // Limit N -;; - add GR_N_Biased = GR_Bias,GR_N_as_int - nop.i 0 -} -;; - -{ .mfi - setf.exp FR_Two_N = GR_N_Biased // Form 2**N -(p9) fcmp.neq.unc.s1 p9,p0 = FR_Norm_N, FR_N_float_int // Test if N an integer - and GR_exp_X = GR_exp_mask, GR_signexp_X // Get exponent of X -} -;; - -// -// Compute biased result exponent -// Branch if N is not an integer -// -{ .mib - add GR_exp_Result = GR_exp_X, GR_N_as_int - mov GR_min_den_exp = 0x0fc01 - 52 // Exponent of min denorm dble -(p9) br.cond.spnt SCALB_N_NOT_INT -} -;; - -// -// Raise Denormal operand flag with compare -// Do final operation -// -{ .mfi - cmp.lt p7,p6 = GR_exp_Result, GR_max_exp // Test no overflow - fcmp.ge.s0 p0,p11 = FR_Floating_X,FR_Floating_N // Dummy to set denorm - cmp.lt p9,p0 = GR_exp_Result, GR_min_den_exp // Test sure underflow -} -{ .mfb - nop.m 0 - fma.d.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 -(p9) br.cond.spnt SCALB_UNDERFLOW // Branch if certain underflow -} -;; - -{ .mib -(p6) cmp.gt.unc p6,p8 = GR_exp_Result, GR_max_exp // Test sure overflow -(p7) cmp.ge.unc p7,p9 = GR_exp_Result, GR_min_exp // Test no over/underflow -(p7) br.ret.sptk b0 // Return from main path -} -;; - -{ .bbb -(p6) br.cond.spnt SCALB_OVERFLOW // Branch if certain overflow -(p8) br.cond.spnt SCALB_POSSIBLE_OVERFLOW // Branch if possible overflow -(p9) br.cond.spnt SCALB_POSSIBLE_UNDERFLOW // Branch if possible underflow -} -;; - -// Here if possible underflow. -// Resulting exponent: 0x0fc01-52 <= exp_Result < 0x0fc01 -SCALB_POSSIBLE_UNDERFLOW: -// -// Here if possible overflow. -// Resulting exponent: 0x103fe = exp_Result -SCALB_POSSIBLE_OVERFLOW: - -// Set up necessary status fields -// -// S0 user supplied status -// S2 user supplied status + WRE + TD (Overflows) -// S3 user supplied status + FZ + TD (Underflows) -// -{ .mfi - mov GR_pos_ov_limit = 0x103ff // Exponent for positive overflow - fsetc.s3 0x7F,0x41 - nop.i 0 -} -{ .mfi - mov GR_neg_ov_limit = 0x303ff // Exponent for negative overflow - fsetc.s2 0x7F,0x42 - nop.i 0 -} -;; - -// -// Do final operation with s2 and s3 -// -{ .mfi - setf.exp FR_NBig = GR_neg_ov_limit - fma.d.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -{ .mfi - setf.exp FR_Big = GR_pos_ov_limit - fma.d.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -;; - -// Check for overflow or underflow. -// Restore s3 -// Restore s2 -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x40 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 - nop.i 0 -} -;; - -// -// Is the result zero? -// -{ .mfi - nop.m 0 - fclass.m p6, p0 = FR_Result3, 0x007 - nop.i 0 -} -{ .mfi - nop.m 0 - fcmp.ge.s1 p7, p8 = FR_Result2 , FR_Big - nop.i 0 -} -;; - -// -// Detect masked underflow - Tiny + Inexact Only -// -{ .mfi - nop.m 0 -(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 - nop.i 0 -} -;; - -// -// Is result bigger the allowed range? -// Branch out for underflow -// -{ .mfb - nop.m 0 -(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig -(p6) br.cond.spnt SCALB_UNDERFLOW -} -;; - -// -// Branch out for overflow -// -{ .bbb -(p7) br.cond.spnt SCALB_OVERFLOW -(p9) br.cond.spnt SCALB_OVERFLOW - br.ret.sptk b0 // Return from main path. -} -;; - -// Here if result overflows -SCALB_OVERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 53, r0 // Set error tag for overflow - br.cond.sptk __libm_error_region // Call error support for overflow -} -;; - -// Here if result underflows -SCALB_UNDERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 54, r0 // Set error tag for underflow - br.cond.sptk __libm_error_region // Call error support for underflow -} -;; - -SCALB_NAN_INF_ZERO: - -// -// Before entry, N has been converted to a fp integer in significand of -// FR_N_float_int -// -// Convert N_float_int to floating point value -// -{ .mfi - getf.sig GR_N_as_int = FR_N_float_int - fclass.m p6,p0 = FR_Floating_N, 0xc3 //@snan | @qnan - nop.i 0 -} -{ .mfi - addl GR_Scratch = 1,r0 - fcvt.xf FR_N_float_int = FR_N_float_int - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fclass.m p7,p0 = FR_Floating_X, 0xc3 //@snan | @qnan - shl GR_Scratch = GR_Scratch,63 -} -;; - -{ .mfi - nop.m 0 - fclass.m p8,p0 = FR_Floating_N, 0x21 // @inf - nop.i 0 -} -{ .mfi - nop.m 0 - fclass.m p9,p0 = FR_Floating_N, 0x22 // @-inf - nop.i 0 -} -;; - -// -// Either X or N is a Nan, return result and possible raise invalid. -// -{ .mfb - nop.m 0 -(p6) fma.d.s0 FR_Result = FR_Floating_N,FR_Floating_X,f0 -(p6) br.ret.spnt b0 -} -;; - -{ .mfb - nop.m 0 -(p7) fma.d.s0 FR_Result = FR_Floating_N,FR_Floating_X,f0 -(p7) br.ret.spnt b0 -} -;; - -// -// If N + Inf do something special -// For N = -Inf, create Int -// -{ .mfb - nop.m 0 -(p8) fma.d.s0 FR_Result = FR_Floating_X, FR_Floating_N,f0 -(p8) br.ret.spnt b0 -} -{ .mfi - nop.m 0 -(p9) fnma.d.s0 FR_Floating_N = FR_Floating_N, f1, f0 - nop.i 0 -} -;; - -// -// If N==-Inf,return x/(-N) -// -{ .mfb - cmp.ne p7,p0 = GR_N_as_int,GR_Scratch -(p9) frcpa.s0 FR_Result,p0 = FR_Floating_X,FR_Floating_N -(p9) br.ret.spnt b0 -} -;; - -// -// Is N an integer. -// -{ .mfi - nop.m 0 -(p7) fcmp.neq.unc.s1 p7,p0 = FR_Norm_N, FR_N_float_int - nop.i 0 -} -;; - -// -// If N not an int, return NaN and raise invalid. -// -{ .mfb - nop.m 0 -(p7) frcpa.s0 FR_Result,p0 = f0,f0 -(p7) br.ret.spnt b0 -} -;; - -// -// Always return x in other path. -// -{ .mfb - nop.m 0 - fma.d.s0 FR_Result = FR_Floating_X,f1,f0 - br.ret.sptk b0 -} -;; - -// Here if n not int -// Return NaN and raise invalid. -SCALB_N_NOT_INT: -{ .mfb - nop.m 0 - frcpa.s0 FR_Result,p0 = f0,f0 - br.ret.sptk b0 -} -;; - -// Here if n=unorm -SCALB_N_UNORM: -{ .mfb - getf.exp GR_signexp_N = FR_Norm_N // Get signexp of normalized n - fcvt.fx.trunc.s1 FR_N_float_int = FR_Norm_N // Get N in significand - br.cond.sptk SCALB_COMMON1 // Return to main path -} -;; - -// Here if x=unorm -SCALB_X_UNORM: -{ .mib - getf.exp GR_signexp_X = FR_Norm_X // Get signexp of normalized x - nop.i 0 - br.cond.sptk SCALB_COMMON2 // Return to main path -} -;; - -GLOBAL_IEEE754_END(scalb) -LOCAL_LIBM_ENTRY(__libm_error_region) - -// -// Get stack address of N -// -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs -} -// -// Adjust sp -// -{ .mfi -.fframe 64 - add sp=-64,sp - nop.f 0 - mov GR_SAVE_GP=gp -};; - -// -// Store N on stack in correct position -// Locate the address of x on stack -// -{ .mmi - stfd [GR_Parameter_Y] = FR_Norm_N,16 - add GR_Parameter_X = 16,sp -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 -};; - -// -// Store x on the stack. -// Get address for result on stack. -// -.body -{ .mib - stfd [GR_Parameter_X] = FR_Norm_X - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_Result - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# -};; - -// -// Get location of result on stack -// -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -// -// Get the new result -// -{ .mmi - ldfd FR_Result = [GR_Parameter_RESULT] -.restore sp - add sp = 64,sp - mov b0 = GR_SAVE_B0 -};; - -// -// Restore gp, ar.pfs and return -// -{ .mib - mov gp = GR_SAVE_GP - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_scalbf.S b/sysdeps/ia64/fpu/e_scalbf.S deleted file mode 100644 index 2dde9788fc..0000000000 --- a/sysdeps/ia64/fpu/e_scalbf.S +++ /dev/null @@ -1,599 +0,0 @@ -.file "scalbf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 01/26/01 Scalb completely reworked and now standalone version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 08/06/03 Improved performance -// -// API -//============================================================== -// float = scalbf (float x, float n) -// input floating point f8 and floating point f9 -// output floating point f8 -// -// int_type = 0 if int is 32 bits -// int_type = 1 if int is 64 bits -// -// Returns x* 2**n using an fma and detects overflow -// and underflow. -// -// -// Strategy: -// Compute biased exponent of result exp_Result = N + exp_X -// Break into ranges: -// exp_Result > 0x1007e -> Certain overflow -// exp_Result = 0x1007e -> Possible overflow -// 0x0ff81 <= exp_Result < 0x1007e -> No over/underflow (main path) -// 0x0ff81 - 23 <= exp_Result < 0x0ff81 -> Possible underflow -// exp_Result < 0x0ff81 - 23 -> Certain underflow - -FR_Big = f6 -FR_NBig = f7 -FR_Floating_X = f8 -FR_Result = f8 -FR_Floating_N = f9 -FR_Result2 = f9 -FR_Result3 = f10 -FR_Norm_X = f11 -FR_Two_N = f12 -FR_N_float_int = f13 -FR_Norm_N = f14 - -GR_neg_ov_limit= r14 -GR_big_exp = r14 -GR_N_Biased = r15 -GR_Big = r16 -GR_exp_Result = r18 -GR_pos_ov_limit= r19 -GR_exp_sure_ou = r19 -GR_Bias = r20 -GR_N_as_int = r21 -GR_signexp_X = r22 -GR_exp_X = r23 -GR_exp_mask = r24 -GR_max_exp = r25 -GR_min_exp = r26 -GR_min_den_exp = r27 -GR_Scratch = r28 -GR_signexp_N = r29 -GR_exp_N = r30 - -GR_SAVE_B0 = r32 -GR_SAVE_GP = r33 -GR_SAVE_PFS = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Tag = r38 - -.section .text -GLOBAL_IEEE754_ENTRY(scalbf) - -// -// Is x NAN, INF, ZERO, +-? -// Build the exponent Bias -// -{ .mfi - getf.exp GR_signexp_N = FR_Floating_N // Get signexp of n - fclass.m p6,p0 = FR_Floating_X, 0xe7 // @snan | @qnan | @inf | @zero - mov GR_Bias = 0x0ffff -} -{ .mfi - mov GR_Big = 35000 // If N this big then certain overflow - fcvt.fx.trunc.s1 FR_N_float_int = FR_Floating_N // Get N in significand - nop.i 0 -} -;; - -{ .mfi - getf.exp GR_signexp_X = FR_Floating_X // Get signexp of x - fclass.m p7,p0 = FR_Floating_N, 0x0b // Test for n=unorm - nop.i 0 -} -// -// Normalize n -// -{ .mfi - mov GR_exp_mask = 0x1ffff // Exponent mask - fnorm.s1 FR_Norm_N = FR_Floating_N - nop.i 0 -} -;; - -// -// Is n NAN, INF, ZERO, +-? -// -{ .mfi - mov GR_big_exp = 0x1003e // Exponent at which n is integer - fclass.m p9,p0 = FR_Floating_N, 0xe7 // @snan | @qnan | @inf | @zero - mov GR_max_exp = 0x1007e // Exponent of maximum float -} -// -// Normalize x -// -{ .mfb - nop.m 0 - fnorm.s1 FR_Norm_X = FR_Floating_X -(p7) br.cond.spnt SCALBF_N_UNORM // Branch if n=unorm -} -;; - -SCALBF_COMMON1: -// Main path continues. Also return here from u=unorm path. -// Handle special cases if x = Nan, Inf, Zero -{ .mfb - nop.m 0 - fcmp.lt.s1 p7,p0 = FR_Floating_N, f0 // Test N negative -(p6) br.cond.spnt SCALBF_NAN_INF_ZERO -} -;; - -// Handle special cases if n = Nan, Inf, Zero -{ .mfi - getf.sig GR_N_as_int = FR_N_float_int // Get n from significand - fclass.m p8,p0 = FR_Floating_X, 0x0b // Test for x=unorm - mov GR_exp_sure_ou = 0x1000e // Exp_N where x*2^N sure over/under -} -{ .mfb - mov GR_min_exp = 0x0ff81 // Exponent of minimum float - fcvt.xf FR_N_float_int = FR_N_float_int // Convert N to FP integer -(p9) br.cond.spnt SCALBF_NAN_INF_ZERO -} -;; - -{ .mmi - and GR_exp_N = GR_exp_mask, GR_signexp_N // Get exponent of N -(p7) sub GR_Big = r0, GR_Big // Limit for N - nop.i 0 -} -;; - -{ .mib - cmp.lt p9,p0 = GR_exp_N, GR_big_exp // N possible non-integer? - cmp.ge p6,p0 = GR_exp_N, GR_exp_sure_ou // N certain over/under? -(p8) br.cond.spnt SCALBF_X_UNORM // Branch if x=unorm -} -;; - -SCALBF_COMMON2: -// Main path continues. Also return here from x=unorm path. -// Create biased exponent for 2**N -{ .mmi -(p6) mov GR_N_as_int = GR_Big // Limit N -;; - add GR_N_Biased = GR_Bias,GR_N_as_int - nop.i 0 -} -;; - -{ .mfi - setf.exp FR_Two_N = GR_N_Biased // Form 2**N -(p9) fcmp.neq.unc.s1 p9,p0 = FR_Norm_N, FR_N_float_int // Test if N an integer - and GR_exp_X = GR_exp_mask, GR_signexp_X // Get exponent of X -} -;; - -// -// Compute biased result exponent -// Branch if N is not an integer -// -{ .mib - add GR_exp_Result = GR_exp_X, GR_N_as_int - mov GR_min_den_exp = 0x0ff81 - 23 // Exponent of min denorm float -(p9) br.cond.spnt SCALBF_N_NOT_INT -} -;; - -// -// Raise Denormal operand flag with compare -// Do final operation -// -{ .mfi - cmp.lt p7,p6 = GR_exp_Result, GR_max_exp // Test no overflow - fcmp.ge.s0 p0,p11 = FR_Floating_X,FR_Floating_N // Dummy to set denorm - cmp.lt p9,p0 = GR_exp_Result, GR_min_den_exp // Test sure underflow -} -{ .mfb - nop.m 0 - fma.s.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 -(p9) br.cond.spnt SCALBF_UNDERFLOW // Branch if certain underflow -} -;; - -{ .mib -(p6) cmp.gt.unc p6,p8 = GR_exp_Result, GR_max_exp // Test sure overflow -(p7) cmp.ge.unc p7,p9 = GR_exp_Result, GR_min_exp // Test no over/underflow -(p7) br.ret.sptk b0 // Return from main path -} -;; - -{ .bbb -(p6) br.cond.spnt SCALBF_OVERFLOW // Branch if certain overflow -(p8) br.cond.spnt SCALBF_POSSIBLE_OVERFLOW // Branch if possible overflow -(p9) br.cond.spnt SCALBF_POSSIBLE_UNDERFLOW // Branch if possible underflow -} -;; - -// Here if possible underflow. -// Resulting exponent: 0x0ff81-23 <= exp_Result < 0x0ff81 -SCALBF_POSSIBLE_UNDERFLOW: -// -// Here if possible overflow. -// Resulting exponent: 0x1007e = exp_Result -SCALBF_POSSIBLE_OVERFLOW: - -// Set up necessary status fields -// -// S0 user supplied status -// S2 user supplied status + WRE + TD (Overflows) -// S3 user supplied status + FZ + TD (Underflows) -// -{ .mfi - mov GR_pos_ov_limit = 0x1007f // Exponent for positive overflow - fsetc.s3 0x7F,0x41 - nop.i 0 -} -{ .mfi - mov GR_neg_ov_limit = 0x3007f // Exponent for negative overflow - fsetc.s2 0x7F,0x42 - nop.i 0 -} -;; - -// -// Do final operation with s2 and s3 -// -{ .mfi - setf.exp FR_NBig = GR_neg_ov_limit - fma.s.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -{ .mfi - setf.exp FR_Big = GR_pos_ov_limit - fma.s.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -;; - -// Check for overflow or underflow. -// Restore s3 -// Restore s2 -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x40 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 - nop.i 0 -} -;; - -// -// Is the result zero? -// -{ .mfi - nop.m 0 - fclass.m p6, p0 = FR_Result3, 0x007 - nop.i 0 -} -{ .mfi - nop.m 0 - fcmp.ge.s1 p7, p8 = FR_Result2 , FR_Big - nop.i 0 -} -;; - -// -// Detect masked underflow - Tiny + Inexact Only -// -{ .mfi - nop.m 0 -(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 - nop.i 0 -} -;; - -// -// Is result bigger the allowed range? -// Branch out for underflow -// -{ .mfb - nop.m 0 -(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig -(p6) br.cond.spnt SCALBF_UNDERFLOW -} -;; - -// -// Branch out for overflow -// -{ .bbb -(p7) br.cond.spnt SCALBF_OVERFLOW -(p9) br.cond.spnt SCALBF_OVERFLOW - br.ret.sptk b0 // Return from main path. -} -;; - -// Here if result overflows -SCALBF_OVERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 55, r0 // Set error tag for overflow - br.cond.sptk __libm_error_region // Call error support for overflow -} -;; - -// Here if result underflows -SCALBF_UNDERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 56, r0 // Set error tag for underflow - br.cond.sptk __libm_error_region // Call error support for underflow -} -;; - -SCALBF_NAN_INF_ZERO: - -// -// Before entry, N has been converted to a fp integer in significand of -// FR_N_float_int -// -// Convert N_float_int to floating point value -// -{ .mfi - getf.sig GR_N_as_int = FR_N_float_int - fclass.m p6,p0 = FR_Floating_N, 0xc3 //@snan | @qnan - nop.i 0 -} -{ .mfi - addl GR_Scratch = 1,r0 - fcvt.xf FR_N_float_int = FR_N_float_int - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fclass.m p7,p0 = FR_Floating_X, 0xc3 //@snan | @qnan - shl GR_Scratch = GR_Scratch,63 -} -;; - -{ .mfi - nop.m 0 - fclass.m p8,p0 = FR_Floating_N, 0x21 // @inf - nop.i 0 -} -{ .mfi - nop.m 0 - fclass.m p9,p0 = FR_Floating_N, 0x22 // @-inf - nop.i 0 -} -;; - -// -// Either X or N is a Nan, return result and possible raise invalid. -// -{ .mfb - nop.m 0 -(p6) fma.s.s0 FR_Result = FR_Floating_N,FR_Floating_X,f0 -(p6) br.ret.spnt b0 -} -;; - -{ .mfb - nop.m 0 -(p7) fma.s.s0 FR_Result = FR_Floating_N,FR_Floating_X,f0 -(p7) br.ret.spnt b0 -} -;; - -// -// If N + Inf do something special -// For N = -Inf, create Int -// -{ .mfb - nop.m 0 -(p8) fma.s.s0 FR_Result = FR_Floating_X, FR_Floating_N,f0 -(p8) br.ret.spnt b0 -} -{ .mfi - nop.m 0 -(p9) fnma.s.s0 FR_Floating_N = FR_Floating_N, f1, f0 - nop.i 0 -} -;; - -// -// If N==-Inf,return x/(-N) -// -{ .mfb - cmp.ne p7,p0 = GR_N_as_int,GR_Scratch -(p9) frcpa.s0 FR_Result,p0 = FR_Floating_X,FR_Floating_N -(p9) br.ret.spnt b0 -} -;; - -// -// Is N an integer. -// -{ .mfi - nop.m 0 -(p7) fcmp.neq.unc.s1 p7,p0 = FR_Norm_N, FR_N_float_int - nop.i 0 -} -;; - -// -// If N not an int, return NaN and raise invalid. -// -{ .mfb - nop.m 0 -(p7) frcpa.s0 FR_Result,p0 = f0,f0 -(p7) br.ret.spnt b0 -} -;; - -// -// Always return x in other path. -// -{ .mfb - nop.m 0 - fma.s.s0 FR_Result = FR_Floating_X,f1,f0 - br.ret.sptk b0 -} -;; - -// Here if n not int -// Return NaN and raise invalid. -SCALBF_N_NOT_INT: -{ .mfb - nop.m 0 - frcpa.s0 FR_Result,p0 = f0,f0 - br.ret.sptk b0 -} -;; - -// Here if n=unorm -SCALBF_N_UNORM: -{ .mfb - getf.exp GR_signexp_N = FR_Norm_N // Get signexp of normalized n - fcvt.fx.trunc.s1 FR_N_float_int = FR_Norm_N // Get N in significand - br.cond.sptk SCALBF_COMMON1 // Return to main path -} -;; - -// Here if x=unorm -SCALBF_X_UNORM: -{ .mib - getf.exp GR_signexp_X = FR_Norm_X // Get signexp of normalized x - nop.i 0 - br.cond.sptk SCALBF_COMMON2 // Return to main path -} -;; - -GLOBAL_IEEE754_END(scalbf) -LOCAL_LIBM_ENTRY(__libm_error_region) - -// -// Get stack address of N -// -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs -} -// -// Adjust sp -// -{ .mfi -.fframe 64 - add sp=-64,sp - nop.f 0 - mov GR_SAVE_GP=gp -};; - -// -// Store N on stack in correct position -// Locate the address of x on stack -// -{ .mmi - stfs [GR_Parameter_Y] = FR_Norm_N,16 - add GR_Parameter_X = 16,sp -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 -};; - -// -// Store x on the stack. -// Get address for result on stack. -// -.body -{ .mib - stfs [GR_Parameter_X] = FR_Norm_X - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = FR_Result - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# -};; - -// -// Get location of result on stack -// -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -// -// Get the new result -// -{ .mmi - ldfs FR_Result = [GR_Parameter_RESULT] -.restore sp - add sp = 64,sp - mov b0 = GR_SAVE_B0 -};; - -// -// Restore gp, ar.pfs and return -// -{ .mib - mov gp = GR_SAVE_GP - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_scalbl.S b/sysdeps/ia64/fpu/e_scalbl.S deleted file mode 100644 index 8aa3d0cccf..0000000000 --- a/sysdeps/ia64/fpu/e_scalbl.S +++ /dev/null @@ -1,599 +0,0 @@ -.file "scalbl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 01/26/01 Scalb completely reworked and now standalone version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 08/06/03 Improved performance -// -// API -//============================================================== -// long double = scalbl (long double x, long double n) -// input floating point f8 and floating point f9 -// output floating point f8 -// -// int_type = 0 if int is 32 bits -// int_type = 1 if int is 64 bits -// -// Returns x* 2**n using an fma and detects overflow -// and underflow. -// -// -// Strategy: -// Compute biased exponent of result exp_Result = N + exp_X -// Break into ranges: -// exp_Result > 0x13ffe -> Certain overflow -// exp_Result = 0x13ffe -> Possible overflow -// 0x0c001 <= exp_Result < 0x13ffe -> No over/underflow (main path) -// 0x0c001 - 63 <= exp_Result < 0x0c001 -> Possible underflow -// exp_Result < 0x0c001 - 63 -> Certain underflow - -FR_Big = f6 -FR_NBig = f7 -FR_Floating_X = f8 -FR_Result = f8 -FR_Floating_N = f9 -FR_Result2 = f9 -FR_Result3 = f10 -FR_Norm_X = f11 -FR_Two_N = f12 -FR_N_float_int = f13 -FR_Norm_N = f14 - -GR_neg_ov_limit= r14 -GR_big_exp = r14 -GR_N_Biased = r15 -GR_Big = r16 -GR_exp_Result = r18 -GR_pos_ov_limit= r19 -GR_exp_sure_ou = r19 -GR_Bias = r20 -GR_N_as_int = r21 -GR_signexp_X = r22 -GR_exp_X = r23 -GR_exp_mask = r24 -GR_max_exp = r25 -GR_min_exp = r26 -GR_min_den_exp = r27 -GR_Scratch = r28 -GR_signexp_N = r29 -GR_exp_N = r30 - -GR_SAVE_B0 = r32 -GR_SAVE_GP = r33 -GR_SAVE_PFS = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Tag = r38 - -.section .text -GLOBAL_IEEE754_ENTRY(scalbl) - -// -// Is x NAN, INF, ZERO, +-? -// Build the exponent Bias -// -{ .mfi - getf.exp GR_signexp_N = FR_Floating_N // Get signexp of n - fclass.m p6,p0 = FR_Floating_X, 0xe7 // @snan | @qnan | @inf | @zero - mov GR_Bias = 0x0ffff -} -{ .mfi - mov GR_Big = 35000 // If N this big then certain overflow - fcvt.fx.trunc.s1 FR_N_float_int = FR_Floating_N // Get N in significand - nop.i 0 -} -;; - -{ .mfi - getf.exp GR_signexp_X = FR_Floating_X // Get signexp of x - fclass.m p7,p0 = FR_Floating_N, 0x0b // Test for n=unorm - nop.i 0 -} -// -// Normalize n -// -{ .mfi - mov GR_exp_mask = 0x1ffff // Exponent mask - fnorm.s1 FR_Norm_N = FR_Floating_N - nop.i 0 -} -;; - -// -// Is n NAN, INF, ZERO, +-? -// -{ .mfi - mov GR_big_exp = 0x1003e // Exponent at which n is integer - fclass.m p9,p0 = FR_Floating_N, 0xe7 // @snan | @qnan | @inf | @zero - mov GR_max_exp = 0x13ffe // Exponent of maximum long double -} -// -// Normalize x -// -{ .mfb - nop.m 0 - fnorm.s1 FR_Norm_X = FR_Floating_X -(p7) br.cond.spnt SCALBL_N_UNORM // Branch if n=unorm -} -;; - -SCALBL_COMMON1: -// Main path continues. Also return here from u=unorm path. -// Handle special cases if x = Nan, Inf, Zero -{ .mfb - nop.m 0 - fcmp.lt.s1 p7,p0 = FR_Floating_N, f0 // Test N negative -(p6) br.cond.spnt SCALBL_NAN_INF_ZERO -} -;; - -// Handle special cases if n = Nan, Inf, Zero -{ .mfi - getf.sig GR_N_as_int = FR_N_float_int // Get n from significand - fclass.m p8,p0 = FR_Floating_X, 0x0b // Test for x=unorm - mov GR_exp_sure_ou = 0x1000e // Exp_N where x*2^N sure over/under -} -{ .mfb - mov GR_min_exp = 0x0c001 // Exponent of minimum long double - fcvt.xf FR_N_float_int = FR_N_float_int // Convert N to FP integer -(p9) br.cond.spnt SCALBL_NAN_INF_ZERO -} -;; - -{ .mmi - and GR_exp_N = GR_exp_mask, GR_signexp_N // Get exponent of N -(p7) sub GR_Big = r0, GR_Big // Limit for N - nop.i 0 -} -;; - -{ .mib - cmp.lt p9,p0 = GR_exp_N, GR_big_exp // N possible non-integer? - cmp.ge p6,p0 = GR_exp_N, GR_exp_sure_ou // N certain over/under? -(p8) br.cond.spnt SCALBL_X_UNORM // Branch if x=unorm -} -;; - -SCALBL_COMMON2: -// Main path continues. Also return here from x=unorm path. -// Create biased exponent for 2**N -{ .mmi -(p6) mov GR_N_as_int = GR_Big // Limit N -;; - add GR_N_Biased = GR_Bias,GR_N_as_int - nop.i 0 -} -;; - -{ .mfi - setf.exp FR_Two_N = GR_N_Biased // Form 2**N -(p9) fcmp.neq.unc.s1 p9,p0 = FR_Norm_N, FR_N_float_int // Test if N an integer - and GR_exp_X = GR_exp_mask, GR_signexp_X // Get exponent of X -} -;; - -// -// Compute biased result exponent -// Branch if N is not an integer -// -{ .mib - add GR_exp_Result = GR_exp_X, GR_N_as_int - mov GR_min_den_exp = 0x0c001 - 63 // Exp of min denorm long dble -(p9) br.cond.spnt SCALBL_N_NOT_INT -} -;; - -// -// Raise Denormal operand flag with compare -// Do final operation -// -{ .mfi - cmp.lt p7,p6 = GR_exp_Result, GR_max_exp // Test no overflow - fcmp.ge.s0 p0,p11 = FR_Floating_X,FR_Floating_N // Dummy to set denorm - cmp.lt p9,p0 = GR_exp_Result, GR_min_den_exp // Test sure underflow -} -{ .mfb - nop.m 0 - fma.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 -(p9) br.cond.spnt SCALBL_UNDERFLOW // Branch if certain underflow -} -;; - -{ .mib -(p6) cmp.gt.unc p6,p8 = GR_exp_Result, GR_max_exp // Test sure overflow -(p7) cmp.ge.unc p7,p9 = GR_exp_Result, GR_min_exp // Test no over/underflow -(p7) br.ret.sptk b0 // Return from main path -} -;; - -{ .bbb -(p6) br.cond.spnt SCALBL_OVERFLOW // Branch if certain overflow -(p8) br.cond.spnt SCALBL_POSSIBLE_OVERFLOW // Branch if possible overflow -(p9) br.cond.spnt SCALBL_POSSIBLE_UNDERFLOW // Branch if possible underflow -} -;; - -// Here if possible underflow. -// Resulting exponent: 0x0c001-63 <= exp_Result < 0x0c001 -SCALBL_POSSIBLE_UNDERFLOW: -// -// Here if possible overflow. -// Resulting exponent: 0x13ffe = exp_Result -SCALBL_POSSIBLE_OVERFLOW: - -// Set up necessary status fields -// -// S0 user supplied status -// S2 user supplied status + WRE + TD (Overflows) -// S3 user supplied status + FZ + TD (Underflows) -// -{ .mfi - mov GR_pos_ov_limit = 0x13fff // Exponent for positive overflow - fsetc.s3 0x7F,0x41 - nop.i 0 -} -{ .mfi - mov GR_neg_ov_limit = 0x33fff // Exponent for negative overflow - fsetc.s2 0x7F,0x42 - nop.i 0 -} -;; - -// -// Do final operation with s2 and s3 -// -{ .mfi - setf.exp FR_NBig = GR_neg_ov_limit - fma.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -{ .mfi - setf.exp FR_Big = GR_pos_ov_limit - fma.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -;; - -// Check for overflow or underflow. -// Restore s3 -// Restore s2 -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x40 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 - nop.i 0 -} -;; - -// -// Is the result zero? -// -{ .mfi - nop.m 0 - fclass.m p6, p0 = FR_Result3, 0x007 - nop.i 0 -} -{ .mfi - nop.m 0 - fcmp.ge.s1 p7, p8 = FR_Result2 , FR_Big - nop.i 0 -} -;; - -// -// Detect masked underflow - Tiny + Inexact Only -// -{ .mfi - nop.m 0 -(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 - nop.i 0 -} -;; - -// -// Is result bigger the allowed range? -// Branch out for underflow -// -{ .mfb - nop.m 0 -(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig -(p6) br.cond.spnt SCALBL_UNDERFLOW -} -;; - -// -// Branch out for overflow -// -{ .bbb -(p7) br.cond.spnt SCALBL_OVERFLOW -(p9) br.cond.spnt SCALBL_OVERFLOW - br.ret.sptk b0 // Return from main path. -} -;; - -// Here if result overflows -SCALBL_OVERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 51, r0 // Set error tag for overflow - br.cond.sptk __libm_error_region // Call error support for overflow -} -;; - -// Here if result underflows -SCALBL_UNDERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 52, r0 // Set error tag for underflow - br.cond.sptk __libm_error_region // Call error support for underflow -} -;; - -SCALBL_NAN_INF_ZERO: - -// -// Before entry, N has been converted to a fp integer in significand of -// FR_N_float_int -// -// Convert N_float_int to floating point value -// -{ .mfi - getf.sig GR_N_as_int = FR_N_float_int - fclass.m p6,p0 = FR_Floating_N, 0xc3 //@snan | @qnan - nop.i 0 -} -{ .mfi - addl GR_Scratch = 1,r0 - fcvt.xf FR_N_float_int = FR_N_float_int - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fclass.m p7,p0 = FR_Floating_X, 0xc3 //@snan | @qnan - shl GR_Scratch = GR_Scratch,63 -} -;; - -{ .mfi - nop.m 0 - fclass.m p8,p0 = FR_Floating_N, 0x21 // @inf - nop.i 0 -} -{ .mfi - nop.m 0 - fclass.m p9,p0 = FR_Floating_N, 0x22 // @-inf - nop.i 0 -} -;; - -// -// Either X or N is a Nan, return result and possible raise invalid. -// -{ .mfb - nop.m 0 -(p6) fma.s0 FR_Result = FR_Floating_N,FR_Floating_X,f0 -(p6) br.ret.spnt b0 -} -;; - -{ .mfb - nop.m 0 -(p7) fma.s0 FR_Result = FR_Floating_N,FR_Floating_X,f0 -(p7) br.ret.spnt b0 -} -;; - -// -// If N + Inf do something special -// For N = -Inf, create Int -// -{ .mfb - nop.m 0 -(p8) fma.s0 FR_Result = FR_Floating_X, FR_Floating_N,f0 -(p8) br.ret.spnt b0 -} -{ .mfi - nop.m 0 -(p9) fnma.s0 FR_Floating_N = FR_Floating_N, f1, f0 - nop.i 0 -} -;; - -// -// If N==-Inf,return x/(-N) -// -{ .mfb - cmp.ne p7,p0 = GR_N_as_int,GR_Scratch -(p9) frcpa.s0 FR_Result,p0 = FR_Floating_X,FR_Floating_N -(p9) br.ret.spnt b0 -} -;; - -// -// Is N an integer. -// -{ .mfi - nop.m 0 -(p7) fcmp.neq.unc.s1 p7,p0 = FR_Norm_N, FR_N_float_int - nop.i 0 -} -;; - -// -// If N not an int, return NaN and raise invalid. -// -{ .mfb - nop.m 0 -(p7) frcpa.s0 FR_Result,p0 = f0,f0 -(p7) br.ret.spnt b0 -} -;; - -// -// Always return x in other path. -// -{ .mfb - nop.m 0 - fma.s0 FR_Result = FR_Floating_X,f1,f0 - br.ret.sptk b0 -} -;; - -// Here if n not int -// Return NaN and raise invalid. -SCALBL_N_NOT_INT: -{ .mfb - nop.m 0 - frcpa.s0 FR_Result,p0 = f0,f0 - br.ret.sptk b0 -} -;; - -// Here if n=unorm -SCALBL_N_UNORM: -{ .mfb - getf.exp GR_signexp_N = FR_Norm_N // Get signexp of normalized n - fcvt.fx.trunc.s1 FR_N_float_int = FR_Norm_N // Get N in significand - br.cond.sptk SCALBL_COMMON1 // Return to main path -} -;; - -// Here if x=unorm -SCALBL_X_UNORM: -{ .mib - getf.exp GR_signexp_X = FR_Norm_X // Get signexp of normalized x - nop.i 0 - br.cond.sptk SCALBL_COMMON2 // Return to main path -} -;; - -GLOBAL_IEEE754_END(scalbl) -LOCAL_LIBM_ENTRY(__libm_error_region) - -// -// Get stack address of N -// -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs -} -// -// Adjust sp -// -{ .mfi -.fframe 64 - add sp=-64,sp - nop.f 0 - mov GR_SAVE_GP=gp -};; - -// -// Store N on stack in correct position -// Locate the address of x on stack -// -{ .mmi - stfe [GR_Parameter_Y] = FR_Norm_N,16 - add GR_Parameter_X = 16,sp -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 -};; - -// -// Store x on the stack. -// Get address for result on stack. -// -.body -{ .mib - stfe [GR_Parameter_X] = FR_Norm_X - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 -} -{ .mib - stfe [GR_Parameter_Y] = FR_Result - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# -};; - -// -// Get location of result on stack -// -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -// -// Get the new result -// -{ .mmi - ldfe FR_Result = [GR_Parameter_RESULT] -.restore sp - add sp = 64,sp - mov b0 = GR_SAVE_B0 -};; - -// -// Restore gp, ar.pfs and return -// -{ .mib - mov gp = GR_SAVE_GP - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_sinh.S b/sysdeps/ia64/fpu/e_sinh.S deleted file mode 100644 index f60907b72b..0000000000 --- a/sysdeps/ia64/fpu/e_sinh.S +++ /dev/null @@ -1,905 +0,0 @@ -.file "sinh.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 10/12/00 Update to set denormal operand and underflow flags -// 01/22/01 Fixed to set inexact flag for small args. -// 05/02/01 Reworked to improve speed of all paths -// 05/20/02 Cleaned up namespace and sf0 syntax -// 11/20/02 Improved speed with new algorithm -// 03/31/05 Reformatted delimiters between data tables - -// API -//============================================================== -// double sinh(double) - -// Overview of operation -//============================================================== -// Case 1: 0 < |x| < 2^-60 -// Result = x, computed by x+sgn(x)*x^2) to handle flags and rounding -// -// Case 2: 2^-60 < |x| < 0.25 -// Evaluate sinh(x) by a 13th order polynomial -// Care is take for the order of multiplication; and A1 is not exactly 1/3!, -// A2 is not exactly 1/5!, etc. -// sinh(x) = x + (A1*x^3 + A2*x^5 + A3*x^7 + A4*x^9 + A5*x^11 + A6*x^13) -// -// Case 3: 0.25 < |x| < 710.47586 -// Algorithm is based on the identity sinh(x) = ( exp(x) - exp(-x) ) / 2. -// The algorithm for exp is described as below. There are a number of -// economies from evaluating both exp(x) and exp(-x). Although we -// are evaluating both quantities, only where the quantities diverge do we -// duplicate the computations. The basic algorithm for exp(x) is described -// below. -// -// Take the input x. w is "how many log2/128 in x?" -// w = x * 128/log2 -// n = int(w) -// x = n log2/128 + r + delta - -// n = 128M + index_1 + 2^4 index_2 -// x = M log2 + (log2/128) index_1 + (log2/8) index_2 + r + delta - -// exp(x) = 2^M 2^(index_1/128) 2^(index_2/8) exp(r) exp(delta) -// Construct 2^M -// Get 2^(index_1/128) from table_1; -// Get 2^(index_2/8) from table_2; -// Calculate exp(r) by 5th order polynomial -// r = x - n (log2/128)_high -// delta = - n (log2/128)_low -// Calculate exp(delta) as 1 + delta - - -// Special values -//============================================================== -// sinh(+0) = +0 -// sinh(-0) = -0 - -// sinh(+qnan) = +qnan -// sinh(-qnan) = -qnan -// sinh(+snan) = +qnan -// sinh(-snan) = -qnan - -// sinh(-inf) = -inf -// sinh(+inf) = +inf - -// Overflow and Underflow -//======================= -// sinh(x) = largest double normal when -// |x| = 710.47586 = 0x408633ce8fb9f87d -// -// Underflow is handled as described in case 1 above - -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input, output -// f6 -> f15, f32 -> f61 - -// General registers used: -// r14 -> r40 - -// Predicate registers used: -// p6 -> p15 - -// Assembly macros -//============================================================== - -rRshf = r14 -rN_neg = r14 -rAD_TB1 = r15 -rAD_TB2 = r16 -rAD_P = r17 -rN = r18 -rIndex_1 = r19 -rIndex_2_16 = r20 -rM = r21 -rBiased_M = r21 -rSig_inv_ln2 = r22 -rIndex_1_neg = r22 -rExp_bias = r23 -rExp_bias_minus_1 = r23 -rExp_mask = r24 -rTmp = r24 -rGt_ln = r24 -rIndex_2_16_neg = r24 -rM_neg = r25 -rBiased_M_neg = r25 -rRshf_2to56 = r26 -rAD_T1_neg = r26 -rExp_2tom56 = r28 -rAD_T2_neg = r28 -rAD_T1 = r29 -rAD_T2 = r30 -rSignexp_x = r31 -rExp_x = r31 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - -fRSHF_2TO56 = f6 -fINV_LN2_2TO63 = f7 -fW_2TO56_RSH = f9 -f2TOM56 = f11 -fP5 = f12 -fP4 = f13 -fP3 = f14 -fP2 = f15 - -fLn2_by_128_hi = f33 -fLn2_by_128_lo = f34 - -fRSHF = f35 -fNfloat = f36 -fNormX = f37 -fR = f38 -fF = f39 - -fRsq = f40 -f2M = f41 -fS1 = f42 -fT1 = f42 -fS2 = f43 -fT2 = f43 -fS = f43 -fWre_urm_f8 = f44 -fAbsX = f44 - -fMIN_DBL_OFLOW_ARG = f45 -fMAX_DBL_NORM_ARG = f46 -fXsq = f47 -fX4 = f48 -fGt_pln = f49 -fTmp = f49 - -fP54 = f50 -fP5432 = f50 -fP32 = f51 -fP = f52 -fP54_neg = f53 -fP5432_neg = f53 -fP32_neg = f54 -fP_neg = f55 -fF_neg = f56 - -f2M_neg = f57 -fS1_neg = f58 -fT1_neg = f58 -fS2_neg = f59 -fT2_neg = f59 -fS_neg = f59 -fExp = f60 -fExp_neg = f61 - -fA6 = f50 -fA65 = f50 -fA6543 = f50 -fA654321 = f50 -fA5 = f51 -fA4 = f52 -fA43 = f52 -fA3 = f53 -fA2 = f54 -fA21 = f54 -fA1 = f55 -fX3 = f56 - -// Data tables -//============================================================== - -RODATA -.align 16 - -// ************* DO NOT CHANGE ORDER OF THESE TABLES ******************** - -// double-extended 1/ln(2) -// 3fff b8aa 3b29 5c17 f0bb be87fed0691d3e88 -// 3fff b8aa 3b29 5c17 f0bc -// For speed the significand will be loaded directly with a movl and setf.sig -// and the exponent will be bias+63 instead of bias+0. Thus subsequent -// computations need to scale appropriately. -// The constant 128/ln(2) is needed for the computation of w. This is also -// obtained by scaling the computations. -// -// Two shifting constants are loaded directly with movl and setf.d. -// 1. fRSHF_2TO56 = 1.1000..00 * 2^(63-7) -// This constant is added to x*1/ln2 to shift the integer part of -// x*128/ln2 into the rightmost bits of the significand. -// The result of this fma is fW_2TO56_RSH. -// 2. fRSHF = 1.1000..00 * 2^(63) -// This constant is subtracted from fW_2TO56_RSH * 2^(-56) to give -// the integer part of w, n, as a floating-point number. -// The result of this fms is fNfloat. - - -LOCAL_OBJECT_START(exp_table_1) -data8 0x408633ce8fb9f87e // smallest dbl overflow arg -data8 0x408633ce8fb9f87d // largest dbl arg to give normal dbl result -data8 0xb17217f7d1cf79ab , 0x00003ff7 // ln2/128 hi -data8 0xc9e3b39803f2f6af , 0x00003fb7 // ln2/128 lo -// -// Table 1 is 2^(index_1/128) where -// index_1 goes from 0 to 15 -// -data8 0x8000000000000000 , 0x00003FFF -data8 0x80B1ED4FD999AB6C , 0x00003FFF -data8 0x8164D1F3BC030773 , 0x00003FFF -data8 0x8218AF4373FC25EC , 0x00003FFF -data8 0x82CD8698AC2BA1D7 , 0x00003FFF -data8 0x8383594EEFB6EE37 , 0x00003FFF -data8 0x843A28C3ACDE4046 , 0x00003FFF -data8 0x84F1F656379C1A29 , 0x00003FFF -data8 0x85AAC367CC487B15 , 0x00003FFF -data8 0x8664915B923FBA04 , 0x00003FFF -data8 0x871F61969E8D1010 , 0x00003FFF -data8 0x87DB357FF698D792 , 0x00003FFF -data8 0x88980E8092DA8527 , 0x00003FFF -data8 0x8955EE03618E5FDD , 0x00003FFF -data8 0x8A14D575496EFD9A , 0x00003FFF -data8 0x8AD4C6452C728924 , 0x00003FFF -LOCAL_OBJECT_END(exp_table_1) - -// Table 2 is 2^(index_1/8) where -// index_2 goes from 0 to 7 -LOCAL_OBJECT_START(exp_table_2) -data8 0x8000000000000000 , 0x00003FFF -data8 0x8B95C1E3EA8BD6E7 , 0x00003FFF -data8 0x9837F0518DB8A96F , 0x00003FFF -data8 0xA5FED6A9B15138EA , 0x00003FFF -data8 0xB504F333F9DE6484 , 0x00003FFF -data8 0xC5672A115506DADD , 0x00003FFF -data8 0xD744FCCAD69D6AF4 , 0x00003FFF -data8 0xEAC0C6E7DD24392F , 0x00003FFF -LOCAL_OBJECT_END(exp_table_2) - - -LOCAL_OBJECT_START(exp_p_table) -data8 0x3f8111116da21757 //P5 -data8 0x3fa55555d787761c //P4 -data8 0x3fc5555555555414 //P3 -data8 0x3fdffffffffffd6a //P2 -LOCAL_OBJECT_END(exp_p_table) - -LOCAL_OBJECT_START(sinh_p_table) -data8 0xB08AF9AE78C1239F, 0x00003FDE // A6 -data8 0xB8EF1D28926D8891, 0x00003FEC // A4 -data8 0x8888888888888412, 0x00003FF8 // A2 -data8 0xD732377688025BE9, 0x00003FE5 // A5 -data8 0xD00D00D00D4D39F2, 0x00003FF2 // A3 -data8 0xAAAAAAAAAAAAAAAB, 0x00003FFC // A1 -LOCAL_OBJECT_END(sinh_p_table) - - -.section .text -GLOBAL_IEEE754_ENTRY(sinh) - -{ .mlx - getf.exp rSignexp_x = f8 // Must recompute if x unorm - movl rSig_inv_ln2 = 0xb8aa3b295c17f0bc // significand of 1/ln2 -} -{ .mlx - addl rAD_TB1 = @ltoff(exp_table_1), gp - movl rRshf_2to56 = 0x4768000000000000 // 1.10000 2^(63+56) -} -;; - -{ .mfi - ld8 rAD_TB1 = [rAD_TB1] - fclass.m p6,p0 = f8,0x0b // Test for x=unorm - mov rExp_mask = 0x1ffff -} -{ .mfi - mov rExp_bias = 0xffff - fnorm.s1 fNormX = f8 - mov rExp_2tom56 = 0xffff-56 -} -;; - -// Form two constants we need -// 1/ln2 * 2^63 to compute w = x * 1/ln2 * 128 -// 1.1000..000 * 2^(63+63-7) to right shift int(w) into the significand - -{ .mfi - setf.sig fINV_LN2_2TO63 = rSig_inv_ln2 // form 1/ln2 * 2^63 - fclass.m p8,p0 = f8,0x07 // Test for x=0 - nop.i 999 -} -{ .mlx - setf.d fRSHF_2TO56 = rRshf_2to56 // Form const 1.100 * 2^(63+56) - movl rRshf = 0x43e8000000000000 // 1.10000 2^63 for right shift -} -;; - -{ .mfi - ldfpd fMIN_DBL_OFLOW_ARG, fMAX_DBL_NORM_ARG = [rAD_TB1],16 - fclass.m p10,p0 = f8,0x1e3 // Test for x=inf, nan, NaT - nop.i 0 -} -{ .mfb - setf.exp f2TOM56 = rExp_2tom56 // form 2^-56 for scaling Nfloat - nop.f 0 -(p6) br.cond.spnt SINH_UNORM // Branch if x=unorm -} -;; - -SINH_COMMON: -{ .mfi - ldfe fLn2_by_128_hi = [rAD_TB1],16 - nop.f 0 - nop.i 0 -} -{ .mfb - setf.d fRSHF = rRshf // Form right shift const 1.100 * 2^63 - nop.f 0 -(p8) br.ret.spnt b0 // Exit for x=0, result=x -} -;; - -{ .mfi - ldfe fLn2_by_128_lo = [rAD_TB1],16 - nop.f 0 - nop.i 0 -} -{ .mfb - and rExp_x = rExp_mask, rSignexp_x // Biased exponent of x -(p10) fma.d.s0 f8 = f8,f1,f0 // Result if x=inf, nan, NaT -(p10) br.ret.spnt b0 // quick exit for x=inf, nan, NaT -} -;; - -// After that last load rAD_TB1 points to the beginning of table 1 -{ .mfi - nop.m 0 - fcmp.eq.s0 p6,p0 = f8, f0 // Dummy to set D - sub rExp_x = rExp_x, rExp_bias // True exponent of x -} -;; - -{ .mfi - nop.m 0 - fmerge.s fAbsX = f0, fNormX // Form |x| - nop.i 0 -} -{ .mfb - cmp.gt p7, p0 = -2, rExp_x // Test |x| < 2^(-2) - fma.s1 fXsq = fNormX, fNormX, f0 // x*x for small path -(p7) br.cond.spnt SINH_SMALL // Branch if 0 < |x| < 2^-2 -} -;; - -// W = X * Inv_log2_by_128 -// By adding 1.10...0*2^63 we shift and get round_int(W) in significand. -// We actually add 1.10...0*2^56 to X * Inv_log2 to do the same thing. - -{ .mfi - add rAD_P = 0x180, rAD_TB1 - fma.s1 fW_2TO56_RSH = fNormX, fINV_LN2_2TO63, fRSHF_2TO56 - add rAD_TB2 = 0x100, rAD_TB1 -} -;; - -// Divide arguments into the following categories: -// Certain Safe - 0.25 <= |x| <= MAX_DBL_NORM_ARG -// Possible Overflow p14 - MAX_DBL_NORM_ARG < |x| < MIN_DBL_OFLOW_ARG -// Certain Overflow p15 - MIN_DBL_OFLOW_ARG <= |x| < +inf -// -// If the input is really a double arg, then there will never be -// "Possible Overflow" arguments. -// - -{ .mfi - ldfpd fP5, fP4 = [rAD_P] ,16 - fcmp.ge.s1 p15,p14 = fAbsX,fMIN_DBL_OFLOW_ARG - nop.i 0 -} -;; - -// Nfloat = round_int(W) -// The signficand of fW_2TO56_RSH contains the rounded integer part of W, -// as a twos complement number in the lower bits (that is, it may be negative). -// That twos complement number (called N) is put into rN. - -// Since fW_2TO56_RSH is scaled by 2^56, it must be multiplied by 2^-56 -// before the shift constant 1.10000 * 2^63 is subtracted to yield fNfloat. -// Thus, fNfloat contains the floating point version of N - -{ .mfi - ldfpd fP3, fP2 = [rAD_P] -(p14) fcmp.gt.unc.s1 p14,p0 = fAbsX,fMAX_DBL_NORM_ARG - nop.i 0 -} -{ .mfb - nop.m 0 - fms.s1 fNfloat = fW_2TO56_RSH, f2TOM56, fRSHF -(p15) br.cond.spnt SINH_CERTAIN_OVERFLOW -} -;; - -{ .mfi - getf.sig rN = fW_2TO56_RSH - nop.f 0 - mov rExp_bias_minus_1 = 0xfffe -} -;; - -// rIndex_1 has index_1 -// rIndex_2_16 has index_2 * 16 -// rBiased_M has M - -// rM has true M -// r = x - Nfloat * ln2_by_128_hi -// f = 1 - Nfloat * ln2_by_128_lo -{ .mfi - and rIndex_1 = 0x0f, rN - fnma.s1 fR = fNfloat, fLn2_by_128_hi, fNormX - shr rM = rN, 0x7 -} -{ .mfi - and rIndex_2_16 = 0x70, rN - fnma.s1 fF = fNfloat, fLn2_by_128_lo, f1 - sub rN_neg = r0, rN -} -;; - -{ .mmi - and rIndex_1_neg = 0x0f, rN_neg - add rBiased_M = rExp_bias_minus_1, rM - shr rM_neg = rN_neg, 0x7 -} -{ .mmi - and rIndex_2_16_neg = 0x70, rN_neg - add rAD_T2 = rAD_TB2, rIndex_2_16 - shladd rAD_T1 = rIndex_1, 4, rAD_TB1 -} -;; - -// rAD_T1 has address of T1 -// rAD_T2 has address if T2 - -{ .mmi - setf.exp f2M = rBiased_M - ldfe fT2 = [rAD_T2] - nop.i 0 -} -{ .mmi - add rBiased_M_neg = rExp_bias_minus_1, rM_neg - add rAD_T2_neg = rAD_TB2, rIndex_2_16_neg - shladd rAD_T1_neg = rIndex_1_neg, 4, rAD_TB1 -} -;; - -// Create Scale = 2^M -// Load T1 and T2 -{ .mmi - ldfe fT1 = [rAD_T1] - nop.m 0 - nop.i 0 -} -{ .mmf - setf.exp f2M_neg = rBiased_M_neg - ldfe fT2_neg = [rAD_T2_neg] - fma.s1 fF_neg = fNfloat, fLn2_by_128_lo, f1 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fRsq = fR, fR, f0 - nop.i 0 -} -{ .mfi - ldfe fT1_neg = [rAD_T1_neg] - fma.s1 fP54 = fR, fP5, fP4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP32 = fR, fP3, fP2 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 fP54_neg = fR, fP5, fP4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 fP32_neg = fR, fP3, fP2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP5432 = fRsq, fP54, fP32 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS2 = fF,fT2,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fS1 = f2M,fT1,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fP5432_neg = fRsq, fP54_neg, fP32_neg - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fS1_neg = f2M_neg,fT1_neg,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS2_neg = fF_neg,fT2_neg,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP = fRsq, fP5432, fR - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS = fS1,fS2,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fms.s1 fP_neg = fRsq, fP5432_neg, fR - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS_neg = fS1_neg,fS2_neg,f0 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fmpy.s0 fTmp = fLn2_by_128_lo, fLn2_by_128_lo // Force inexact -(p14) br.cond.spnt SINH_POSSIBLE_OVERFLOW -} -;; - -{ .mfi - nop.m 0 - fma.s1 fExp = fS, fP, fS - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fExp_neg = fS_neg, fP_neg, fS_neg - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fms.d.s0 f8 = fExp, f1, fExp_neg - br.ret.sptk b0 // Normal path exit -} -;; - -// Here if 0 < |x| < 0.25 -SINH_SMALL: -{ .mfi - add rAD_T1 = 0x1a0, rAD_TB1 - fcmp.lt.s1 p7, p8 = fNormX, f0 // Test sign of x - cmp.gt p6, p0 = -60, rExp_x // Test |x| < 2^(-60) -} -{ .mfi - add rAD_T2 = 0x1d0, rAD_TB1 - nop.f 0 - nop.i 0 -} -;; - -{ .mmb - ldfe fA6 = [rAD_T1],16 - ldfe fA5 = [rAD_T2],16 -(p6) br.cond.spnt SINH_VERY_SMALL // Branch if |x| < 2^(-60) -} -;; - -{ .mmi - ldfe fA4 = [rAD_T1],16 - ldfe fA3 = [rAD_T2],16 - nop.i 0 -} -;; - -{ .mmi - ldfe fA2 = [rAD_T1] - ldfe fA1 = [rAD_T2] - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fX3 = fNormX, fXsq, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fX4 = fXsq, fXsq, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fA65 = fXsq, fA6, fA5 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA43 = fXsq, fA4, fA3 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fA21 = fXsq, fA2, fA1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fA6543 = fX4, fA65, fA43 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fA654321 = fX4, fA6543, fA21 - nop.i 0 -} -;; - -// Dummy multiply to generate inexact -{ .mfi - nop.m 0 - fmpy.s0 fTmp = fA6, fA6 - nop.i 0 -} -{ .mfb - nop.m 0 - fma.d.s0 f8 = fA654321, fX3, fNormX - br.ret.sptk b0 // Exit if 2^-60 < |x| < 0.25 -} -;; - -SINH_VERY_SMALL: -// Here if 0 < |x| < 2^-60 -// Compute result by x + sgn(x)*x^2 to get properly rounded result -.pred.rel "mutex",p7,p8 -{ .mfi - nop.m 0 -(p7) fnma.d.s0 f8 = fNormX, fNormX, fNormX // If x<0 result ~ x-x^2 - nop.i 0 -} -{ .mfb - nop.m 0 -(p8) fma.d.s0 f8 = fNormX, fNormX, fNormX // If x>0 result ~ x+x^2 - br.ret.sptk b0 // Exit if |x| < 2^-60 -} -;; - - -SINH_POSSIBLE_OVERFLOW: - -// Here if fMAX_DBL_NORM_ARG < |x| < fMIN_DBL_OFLOW_ARG -// This cannot happen if input is a double, only if input higher precision. -// Overflow is a possibility, not a certainty. - -// Recompute result using status field 2 with user's rounding mode, -// and wre set. If result is larger than largest double, then we have -// overflow - -{ .mfi - mov rGt_ln = 0x103ff // Exponent for largest dbl + 1 ulp - fsetc.s2 0x7F,0x42 // Get user's round mode, set wre - nop.i 0 -} -;; - -{ .mfi - setf.exp fGt_pln = rGt_ln // Create largest double + 1 ulp - fma.d.s2 fWre_urm_f8 = fS, fP, fS // Result with wre set - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 // Turn off wre in sf2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.ge.s1 p6, p0 = fWre_urm_f8, fGt_pln // Test for overflow - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - nop.f 0 -(p6) br.cond.spnt SINH_CERTAIN_OVERFLOW // Branch if overflow -} -;; - -{ .mfb - nop.m 0 - fma.d.s0 f8 = fS, fP, fS - br.ret.sptk b0 // Exit if really no overflow -} -;; - -SINH_CERTAIN_OVERFLOW: -{ .mfi - sub rTmp = rExp_mask, r0, 1 - fcmp.lt.s1 p6, p7 = fNormX, f0 // Test for x < 0 - nop.i 0 -} -;; - -{ .mmf - alloc r32=ar.pfs,1,4,4,0 - setf.exp fTmp = rTmp - fmerge.s FR_X = f8,f8 -} -;; - -{ .mfi - mov GR_Parameter_TAG = 127 -(p6) fnma.d.s0 FR_RESULT = fTmp, fTmp, f0 // Set I,O and -INF result - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fma.d.s0 FR_RESULT = fTmp, fTmp, f0 // Set I,O and +INF result - br.cond.sptk __libm_error_region -} -;; - -// Here if x unorm -SINH_UNORM: -{ .mfb - getf.exp rSignexp_x = fNormX // Must recompute if x unorm - fcmp.eq.s0 p6, p0 = f8, f0 // Set D flag - br.cond.sptk SINH_COMMON -} -;; - -GLOBAL_IEEE754_END(sinh) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_sinhf.S b/sysdeps/ia64/fpu/e_sinhf.S deleted file mode 100644 index 6d808cb478..0000000000 --- a/sysdeps/ia64/fpu/e_sinhf.S +++ /dev/null @@ -1,748 +0,0 @@ -.file "sinhf.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. - -// History -//********************************************************************* -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 10/12/00 Update to set denormal operand and underflow flags -// 01/22/01 Fixed to set inexact flag for small args. -// 05/02/01 Reworked to improve speed of all paths -// 05/20/02 Cleaned up namespace and sf0 syntax -// 11/20/02 Improved algorithm based on expf -// 03/31/05 Reformatted delimiters between data tables -// -// API -//********************************************************************* -// float sinhf(float) -// -// Overview of operation -//********************************************************************* -// Case 1: 0 < |x| < 2^-60 -// Result = x, computed by x+sgn(x)*x^2) to handle flags and rounding -// -// Case 2: 2^-60 < |x| < 0.25 -// Evaluate sinh(x) by a 9th order polynomial -// Care is take for the order of multiplication; and A2 is not exactly 1/5!, -// A3 is not exactly 1/7!, etc. -// sinh(x) = x + (A1*x^3 + A2*x^5 + A3*x^7 + A4*x^9) -// -// Case 3: 0.25 < |x| < 89.41598 -// Algorithm is based on the identity sinh(x) = ( exp(x) - exp(-x) ) / 2. -// The algorithm for exp is described as below. There are a number of -// economies from evaluating both exp(x) and exp(-x). Although we -// are evaluating both quantities, only where the quantities diverge do we -// duplicate the computations. The basic algorithm for exp(x) is described -// below. -// -// Take the input x. w is "how many log2/128 in x?" -// w = x * 64/log2 -// NJ = int(w) -// x = NJ*log2/64 + R - -// NJ = 64*n + j -// x = n*log2 + (log2/64)*j + R -// -// So, exp(x) = 2^n * 2^(j/64)* exp(R) -// -// T = 2^n * 2^(j/64) -// Construct 2^n -// Get 2^(j/64) table -// actually all the entries of 2^(j/64) table are stored in DP and -// with exponent bits set to 0 -> multiplication on 2^n can be -// performed by doing logical "or" operation with bits presenting 2^n - -// exp(R) = 1 + (exp(R) - 1) -// P = exp(R) - 1 approximated by Taylor series of 3rd degree -// P = A3*R^3 + A2*R^2 + R, A3 = 1/6, A2 = 1/2 -// - -// The final result is reconstructed as follows -// exp(x) = T + T*P - -// Special values -//********************************************************************* -// sinhf(+0) = +0 -// sinhf(-0) = -0 - -// sinhf(+qnan) = +qnan -// sinhf(-qnan) = -qnan -// sinhf(+snan) = +qnan -// sinhf(-snan) = -qnan - -// sinhf(-inf) = -inf -// sinhf(+inf) = +inf - -// Overflow and Underflow -//********************************************************************* -// sinhf(x) = largest single normal when -// x = 89.41598 = 0x42b2d4fc -// -// Underflow is handled as described in case 1 above - -// Registers used -//********************************************************************* -// Floating Point registers used: -// f8 input, output -// f6,f7, f9 -> f15, f32 -> f45 - -// General registers used: -// r2, r3, r16 -> r38 - -// Predicate registers used: -// p6 -> p15 - -// Assembly macros -//********************************************************************* -// integer registers used -// scratch -rNJ = r2 -rNJ_neg = r3 - -rJ_neg = r16 -rN_neg = r17 -rSignexp_x = r18 -rExp_x = r18 -rExp_mask = r19 -rExp_bias = r20 -rAd1 = r21 -rAd2 = r22 -rJ = r23 -rN = r24 -rTblAddr = r25 -rA3 = r26 -rExpHalf = r27 -rLn2Div64 = r28 -rGt_ln = r29 -r17ones_m1 = r29 -rRightShifter = r30 -rJ_mask = r30 -r64DivLn2 = r31 -rN_mask = r31 -// stacked -GR_SAVE_PFS = r32 -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Parameter_TAG = r38 - -// floating point registers used -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 -// scratch -fRightShifter = f6 -f64DivLn2 = f7 -fNormX = f9 -fNint = f10 -fN = f11 -fR = f12 -fLn2Div64 = f13 -fA2 = f14 -fA3 = f15 -// stacked -fP = f32 -fT = f33 -fMIN_SGL_OFLOW_ARG = f34 -fMAX_SGL_NORM_ARG = f35 -fRSqr = f36 -fA1 = f37 -fA21 = f37 -fA4 = f38 -fA43 = f38 -fA4321 = f38 -fX4 = f39 -fTmp = f39 -fGt_pln = f39 -fWre_urm_f8 = f40 -fXsq = f40 -fP_neg = f41 -fX3 = f41 -fT_neg = f42 -fExp = f43 -fExp_neg = f44 -fAbsX = f45 - - -RODATA -.align 16 - -LOCAL_OBJECT_START(_sinhf_table) -data4 0x42b2d4fd // Smallest single arg to overflow single result -data4 0x42b2d4fc // Largest single arg to give normal single result -data4 0x00000000 // pad -data4 0x00000000 // pad -// -// 2^(j/64) table, j goes from 0 to 63 -data8 0x0000000000000000 // 2^(0/64) -data8 0x00002C9A3E778061 // 2^(1/64) -data8 0x000059B0D3158574 // 2^(2/64) -data8 0x0000874518759BC8 // 2^(3/64) -data8 0x0000B5586CF9890F // 2^(4/64) -data8 0x0000E3EC32D3D1A2 // 2^(5/64) -data8 0x00011301D0125B51 // 2^(6/64) -data8 0x0001429AAEA92DE0 // 2^(7/64) -data8 0x000172B83C7D517B // 2^(8/64) -data8 0x0001A35BEB6FCB75 // 2^(9/64) -data8 0x0001D4873168B9AA // 2^(10/64) -data8 0x0002063B88628CD6 // 2^(11/64) -data8 0x0002387A6E756238 // 2^(12/64) -data8 0x00026B4565E27CDD // 2^(13/64) -data8 0x00029E9DF51FDEE1 // 2^(14/64) -data8 0x0002D285A6E4030B // 2^(15/64) -data8 0x000306FE0A31B715 // 2^(16/64) -data8 0x00033C08B26416FF // 2^(17/64) -data8 0x000371A7373AA9CB // 2^(18/64) -data8 0x0003A7DB34E59FF7 // 2^(19/64) -data8 0x0003DEA64C123422 // 2^(20/64) -data8 0x0004160A21F72E2A // 2^(21/64) -data8 0x00044E086061892D // 2^(22/64) -data8 0x000486A2B5C13CD0 // 2^(23/64) -data8 0x0004BFDAD5362A27 // 2^(24/64) -data8 0x0004F9B2769D2CA7 // 2^(25/64) -data8 0x0005342B569D4F82 // 2^(26/64) -data8 0x00056F4736B527DA // 2^(27/64) -data8 0x0005AB07DD485429 // 2^(28/64) -data8 0x0005E76F15AD2148 // 2^(29/64) -data8 0x0006247EB03A5585 // 2^(30/64) -data8 0x0006623882552225 // 2^(31/64) -data8 0x0006A09E667F3BCD // 2^(32/64) -data8 0x0006DFB23C651A2F // 2^(33/64) -data8 0x00071F75E8EC5F74 // 2^(34/64) -data8 0x00075FEB564267C9 // 2^(35/64) -data8 0x0007A11473EB0187 // 2^(36/64) -data8 0x0007E2F336CF4E62 // 2^(37/64) -data8 0x00082589994CCE13 // 2^(38/64) -data8 0x000868D99B4492ED // 2^(39/64) -data8 0x0008ACE5422AA0DB // 2^(40/64) -data8 0x0008F1AE99157736 // 2^(41/64) -data8 0x00093737B0CDC5E5 // 2^(42/64) -data8 0x00097D829FDE4E50 // 2^(43/64) -data8 0x0009C49182A3F090 // 2^(44/64) -data8 0x000A0C667B5DE565 // 2^(45/64) -data8 0x000A5503B23E255D // 2^(46/64) -data8 0x000A9E6B5579FDBF // 2^(47/64) -data8 0x000AE89F995AD3AD // 2^(48/64) -data8 0x000B33A2B84F15FB // 2^(49/64) -data8 0x000B7F76F2FB5E47 // 2^(50/64) -data8 0x000BCC1E904BC1D2 // 2^(51/64) -data8 0x000C199BDD85529C // 2^(52/64) -data8 0x000C67F12E57D14B // 2^(53/64) -data8 0x000CB720DCEF9069 // 2^(54/64) -data8 0x000D072D4A07897C // 2^(55/64) -data8 0x000D5818DCFBA487 // 2^(56/64) -data8 0x000DA9E603DB3285 // 2^(57/64) -data8 0x000DFC97337B9B5F // 2^(58/64) -data8 0x000E502EE78B3FF6 // 2^(59/64) -data8 0x000EA4AFA2A490DA // 2^(60/64) -data8 0x000EFA1BEE615A27 // 2^(61/64) -data8 0x000F50765B6E4540 // 2^(62/64) -data8 0x000FA7C1819E90D8 // 2^(63/64) -LOCAL_OBJECT_END(_sinhf_table) - -LOCAL_OBJECT_START(sinh_p_table) -data8 0x3ec749d84bc96d7d // A4 -data8 0x3f2a0168d09557cf // A3 -data8 0x3f811111326ed15a // A2 -data8 0x3fc55555552ed1e2 // A1 -LOCAL_OBJECT_END(sinh_p_table) - - -.section .text -GLOBAL_IEEE754_ENTRY(sinhf) - -{ .mlx - getf.exp rSignexp_x = f8 // Must recompute if x unorm - movl r64DivLn2 = 0x40571547652B82FE // 64/ln(2) -} -{ .mlx - addl rTblAddr = @ltoff(_sinhf_table),gp - movl rRightShifter = 0x43E8000000000000 // DP Right Shifter -} -;; - -{ .mfi - // point to the beginning of the table - ld8 rTblAddr = [rTblAddr] - fclass.m p6, p0 = f8, 0x0b // Test for x=unorm - addl rA3 = 0x3E2AA, r0 // high bits of 1.0/6.0 rounded to SP -} -{ .mfi - nop.m 0 - fnorm.s1 fNormX = f8 // normalized x - addl rExpHalf = 0xFFFE, r0 // exponent of 1/2 -} -;; - -{ .mfi - setf.d f64DivLn2 = r64DivLn2 // load 64/ln(2) to FP reg - fclass.m p15, p0 = f8, 0x1e3 // test for NaT,NaN,Inf - nop.i 0 -} -{ .mlx - // load Right Shifter to FP reg - setf.d fRightShifter = rRightShifter - movl rLn2Div64 = 0x3F862E42FEFA39EF // DP ln(2)/64 in GR -} -;; - -{ .mfi - mov rExp_mask = 0x1ffff - fcmp.eq.s1 p13, p0 = f0, f8 // test for x = 0.0 - shl rA3 = rA3, 12 // 0x3E2AA000, approx to 1.0/6.0 in SP -} -{ .mfb - nop.m 0 - nop.f 0 -(p6) br.cond.spnt SINH_UNORM // Branch if x=unorm -} -;; - -SINH_COMMON: -{ .mfi - setf.exp fA2 = rExpHalf // load A2 to FP reg - nop.f 0 - mov rExp_bias = 0xffff -} -{ .mfb - setf.d fLn2Div64 = rLn2Div64 // load ln(2)/64 to FP reg -(p15) fma.s.s0 f8 = f8, f1, f0 // result if x = NaT,NaN,Inf -(p15) br.ret.spnt b0 // exit here if x = NaT,NaN,Inf -} -;; - -{ .mfi - // min overflow and max normal threshold - ldfps fMIN_SGL_OFLOW_ARG, fMAX_SGL_NORM_ARG = [rTblAddr], 8 - nop.f 0 - and rExp_x = rExp_mask, rSignexp_x // Biased exponent of x -} -{ .mfb - setf.s fA3 = rA3 // load A3 to FP reg - nop.f 0 -(p13) br.ret.spnt b0 // exit here if x=0.0, return x -} -;; - -{ .mfi - sub rExp_x = rExp_x, rExp_bias // True exponent of x - fmerge.s fAbsX = f0, fNormX // Form |x| - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // x*(64/ln(2)) + Right Shifter - fma.s1 fNint = fNormX, f64DivLn2, fRightShifter - add rTblAddr = 8, rTblAddr -} -{ .mfb - cmp.gt p7, p0 = -2, rExp_x // Test |x| < 2^(-2) - fma.s1 fXsq = fNormX, fNormX, f0 // x*x for small path -(p7) br.cond.spnt SINH_SMALL // Branch if 0 < |x| < 2^-2 -} -;; - -{ .mfi - nop.m 0 - // check for overflow - fcmp.ge.s1 p12, p13 = fAbsX, fMIN_SGL_OFLOW_ARG - mov rJ_mask = 0x3f // 6-bit mask for J -} -;; - -{ .mfb - nop.m 0 - fms.s1 fN = fNint, f1, fRightShifter // n in FP register - // branch out if overflow -(p12) br.cond.spnt SINH_CERTAIN_OVERFLOW -} -;; - -{ .mfi - getf.sig rNJ = fNint // bits of n, j - // check for possible overflow - fcmp.gt.s1 p13, p0 = fAbsX, fMAX_SGL_NORM_ARG - nop.i 0 -} -;; - -{ .mfi - addl rN = 0xFFBF - 63, rNJ // biased and shifted n-1,j - fnma.s1 fR = fLn2Div64, fN, fNormX // R = x - N*ln(2)/64 - and rJ = rJ_mask, rNJ // bits of j -} -{ .mfi - sub rNJ_neg = r0, rNJ // bits of n, j for -x - nop.f 0 - andcm rN_mask = -1, rJ_mask // 0xff...fc0 to mask N -} -;; - -{ .mfi - shladd rJ = rJ, 3, rTblAddr // address in the 2^(j/64) table - nop.f 0 - and rN = rN_mask, rN // biased, shifted n-1 -} -{ .mfi - addl rN_neg = 0xFFBF - 63, rNJ_neg // -x biased, shifted n-1,j - nop.f 0 - and rJ_neg = rJ_mask, rNJ_neg // bits of j for -x -} -;; - -{ .mfi - ld8 rJ = [rJ] // Table value - nop.f 0 - shl rN = rN, 46 // 2^(n-1) bits in DP format -} -{ .mfi - shladd rJ_neg = rJ_neg, 3, rTblAddr // addr in 2^(j/64) table -x - nop.f 0 - and rN_neg = rN_mask, rN_neg // biased, shifted n-1 for -x -} -;; - -{ .mfi - ld8 rJ_neg = [rJ_neg] // Table value for -x - nop.f 0 - shl rN_neg = rN_neg, 46 // 2^(n-1) bits in DP format for -x -} -;; - -{ .mfi - or rN = rN, rJ // bits of 2^n * 2^(j/64) in DP format - nop.f 0 - nop.i 0 -} -;; - -{ .mmf - setf.d fT = rN // 2^(n-1) * 2^(j/64) - or rN_neg = rN_neg, rJ_neg // -x bits of 2^n * 2^(j/64) in DP - fma.s1 fRSqr = fR, fR, f0 // R^2 -} -;; - -{ .mfi - setf.d fT_neg = rN_neg // 2^(n-1) * 2^(j/64) for -x - fma.s1 fP = fA3, fR, fA2 // A3*R + A2 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 fP_neg = fA3, fR, fA2 // A3*R + A2 for -x - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP = fP, fRSqr, fR // P = (A3*R + A2)*R^2 + R - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fP_neg = fP_neg, fRSqr, fR // P = (A3*R + A2)*R^2 + R, -x - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fmpy.s0 fTmp = fLn2Div64, fLn2Div64 // Force inexact - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fExp = fP, fT, fT // exp(x)/2 - nop.i 0 -} -{ .mfb - nop.m 0 - fma.s1 fExp_neg = fP_neg, fT_neg, fT_neg // exp(-x)/2 - // branch out if possible overflow result -(p13) br.cond.spnt SINH_POSSIBLE_OVERFLOW -} -;; - -{ .mfb - nop.m 0 - // final result in the absence of overflow - fms.s.s0 f8 = fExp, f1, fExp_neg // result = (exp(x)-exp(-x))/2 - // exit here in the absence of overflow - br.ret.sptk b0 // Exit main path, 0.25 <= |x| < 89.41598 -} -;; - -// Here if 0 < |x| < 0.25. Evaluate 9th order polynomial. -SINH_SMALL: -{ .mfi - add rAd1 = 0x200, rTblAddr - fcmp.lt.s1 p7, p8 = fNormX, f0 // Test sign of x - cmp.gt p6, p0 = -60, rExp_x // Test |x| < 2^(-60) -} -{ .mfi - add rAd2 = 0x210, rTblAddr - nop.f 0 - nop.i 0 -} -;; - -{ .mmb - ldfpd fA4, fA3 = [rAd1] - ldfpd fA2, fA1 = [rAd2] -(p6) br.cond.spnt SINH_VERY_SMALL // Branch if |x| < 2^(-60) -} -;; - -{ .mfi - nop.m 0 - fma.s1 fX3 = fXsq, fNormX, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fX4 = fXsq, fXsq, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fA43 = fXsq, fA4, fA3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA21 = fXsq, fA2, fA1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fA4321 = fX4, fA43, fA21 - nop.i 0 -} -;; - -// Dummy multiply to generate inexact -{ .mfi - nop.m 0 - fmpy.s0 fTmp = fA4, fA4 - nop.i 0 -} -{ .mfb - nop.m 0 - fma.s.s0 f8 = fA4321, fX3, fNormX - br.ret.sptk b0 // Exit if 2^-60 < |x| < 0.25 -} -;; - -SINH_VERY_SMALL: -// Here if 0 < |x| < 2^-60 -// Compute result by x + sgn(x)*x^2 to get properly rounded result -.pred.rel "mutex",p7,p8 -{ .mfi - nop.m 0 -(p7) fnma.s.s0 f8 = fNormX, fNormX, fNormX // If x<0 result ~ x-x^2 - nop.i 0 -} -{ .mfb - nop.m 0 -(p8) fma.s.s0 f8 = fNormX, fNormX, fNormX // If x>0 result ~ x+x^2 - br.ret.sptk b0 // Exit if |x| < 2^-60 -} -;; - -SINH_POSSIBLE_OVERFLOW: - -// Here if fMAX_SGL_NORM_ARG < x < fMIN_SGL_OFLOW_ARG -// This cannot happen if input is a single, only if input higher precision. -// Overflow is a possibility, not a certainty. - -// Recompute result using status field 2 with user's rounding mode, -// and wre set. If result is larger than largest single, then we have -// overflow - -{ .mfi - mov rGt_ln = 0x1007f // Exponent for largest single + 1 ulp - fsetc.s2 0x7F,0x42 // Get user's round mode, set wre - nop.i 0 -} -;; - -{ .mfi - setf.exp fGt_pln = rGt_ln // Create largest single + 1 ulp - fma.s.s2 fWre_urm_f8 = fP, fT, fT // Result with wre set - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 // Turn off wre in sf2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.ge.s1 p6, p0 = fWre_urm_f8, fGt_pln // Test for overflow - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - nop.f 0 -(p6) br.cond.spnt SINH_CERTAIN_OVERFLOW // Branch if overflow -} -;; - -{ .mfb - nop.m 0 - fma.s.s0 f8 = fP, fT, fT - br.ret.sptk b0 // Exit if really no overflow -} -;; - -// here if overflow -SINH_CERTAIN_OVERFLOW: -{ .mfi - addl r17ones_m1 = 0x1FFFE, r0 - fcmp.lt.s1 p6, p7 = fNormX, f0 // Test for x < 0 - nop.i 0 -} -;; - -{ .mmf - alloc r32 = ar.pfs, 0, 3, 4, 0 // get some registers - setf.exp fTmp = r17ones_m1 - fmerge.s FR_X = f8,f8 -} -;; - -{ .mfi - mov GR_Parameter_TAG = 128 -(p6) fnma.s.s0 FR_RESULT = fTmp, fTmp, f0 // Set I,O and -INF result - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fma.s.s0 FR_RESULT = fTmp, fTmp, f0 // Set I,O and +INF result - br.cond.sptk __libm_error_region -} -;; - -// Here if x unorm -SINH_UNORM: -{ .mfb - getf.exp rSignexp_x = fNormX // Must recompute if x unorm - fcmp.eq.s0 p6, p0 = f8, f0 // Set D flag - br.cond.sptk SINH_COMMON // Return to main path -} -;; - -GLOBAL_IEEE754_END(sinhf) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = FR_Y,16 // Store Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mfi - stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - nop.f 0 - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address -} -{ .mib - stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_sinhl.S b/sysdeps/ia64/fpu/e_sinhl.S deleted file mode 100644 index b560999514..0000000000 --- a/sysdeps/ia64/fpu/e_sinhl.S +++ /dev/null @@ -1,1117 +0,0 @@ -.file "sinhl.s" - - -// Copyright (c) 2000 - 2002, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 10/12/00 Update to set denormal operand and underflow flags -// 01/22/01 Fixed to set inexact flag for small args. Fixed incorrect -// call to __libm_error_support for 710.476 < x < 11357.2166. -// 05/02/01 Reworked to improve speed of all paths -// 05/20/02 Cleaned up namespace and sf0 syntax -// 12/04/02 Improved performance -// -// API -//============================================================== -// long double = sinhl(long double) -// input floating point f8 -// output floating point f8 -// -// Registers used -//============================================================== -// general registers: -// r14 -> r40 -// predicate registers used: -// p6 -> p11 -// floating-point registers used: -// f9 -> f15; f32 -> f90; -// f8 has input, then output -// -// Overview of operation -//============================================================== -// There are seven paths -// 1. 0 < |x| < 0.25 SINH_BY_POLY -// 2. 0.25 <=|x| < 32 SINH_BY_TBL -// 3. 32 <= |x| < 11357.21655 SINH_BY_EXP (merged path with SINH_BY_TBL) -// 4. |x| >= 11357.21655 SINH_HUGE -// 5. x=0 Done with early exit -// 6. x=inf,nan Done with early exit -// 7. x=denormal SINH_DENORM -// -// For double extended we get overflow for x >= 400c b174 ddc0 31ae c0ea -// >= 11357.21655 -// -// -// 1. SINH_BY_POLY 0 < |x| < 0.25 -// =============== -// Evaluate sinh(x) by a 13th order polynomial -// Care is take for the order of multiplication; and P_1 is not exactly 1/3!, -// P_2 is not exactly 1/5!, etc. -// sinh(x) = sign * (series(e^x) - series(e^-x))/2 -// = sign * (ax + ax^3/3! + ax^5/5! + ax^7/7! + ax^9/9! + ax^11/11! -// + ax^13/13!) -// = sign * (ax + ax * ( ax^2 * (1/3! + ax^4 * (1/7! + ax^4*1/11!)) ) -// + ax * ( ax^4 * (1/5! + ax^4 * (1/9! + ax^4*1/13!)) )) -// = sign * (ax + ax*p_odd + (ax*p_even)) -// = sign * (ax + Y_lo) -// sinh(x) = sign * (Y_hi + Y_lo) -// Note that ax = |x| -// -// 2. SINH_BY_TBL 0.25 <= |x| < 32.0 -// ============= -// sinh(x) = sinh(B+R) -// = sinh(B)cosh(R) + cosh(B)sinh(R) -// -// ax = |x| = M*log2/64 + R -// B = M*log2/64 -// M = 64*N + j -// We will calculate M and get N as (M-j)/64 -// The division is a shift. -// exp(B) = exp(N*log2 + j*log2/64) -// = 2^N * 2^(j*log2/64) -// sinh(B) = 1/2(e^B -e^-B) -// = 1/2(2^N * 2^(j*log2/64) - 2^-N * 2^(-j*log2/64)) -// sinh(B) = (2^(N-1) * 2^(j*log2/64) - 2^(-N-1) * 2^(-j*log2/64)) -// cosh(B) = (2^(N-1) * 2^(j*log2/64) + 2^(-N-1) * 2^(-j*log2/64)) -// 2^(j*log2/64) is stored as Tjhi + Tjlo , j= -32,....,32 -// Tjhi is double-extended (80-bit) and Tjlo is single(32-bit) -// -// R = ax - M*log2/64 -// R = ax - M*log2_by_64_hi - M*log2_by_64_lo -// exp(R) = 1 + R +R^2(1/2! + R(1/3! + R(1/4! + ... + R(1/n!)...) -// = 1 + p_odd + p_even -// where the p_even uses the A coefficients and the p_even uses -// the B coefficients -// -// So sinh(R) = 1 + p_odd + p_even -(1 -p_odd -p_even)/2 = p_odd -// cosh(R) = 1 + p_even -// sinh(B) = S_hi + S_lo -// cosh(B) = C_hi -// sinh(x) = sinh(B)cosh(R) + cosh(B)sinh(R) -// -// 3. SINH_BY_EXP 32.0 <= |x| < 11357.21655 ( 400c b174 ddc0 31ae c0ea ) -// ============== -// Can approximate result by exp(x)/2 in this region. -// Y_hi = Tjhi -// Y_lo = Tjhi * (p_odd + p_even) + Tjlo -// sinh(x) = Y_hi + Y_lo -// -// 4. SINH_HUGE |x| >= 11357.21655 ( 400c b174 ddc0 31ae c0ea ) -// ============ -// Set error tag and call error support -// -// -// Assembly macros -//============================================================== -r_ad5 = r14 -r_rshf_2to57 = r15 -r_exp_denorm = r15 -r_ad_mJ_lo = r15 -r_ad_J_lo = r16 -r_2Nm1 = r17 -r_2mNm1 = r18 -r_exp_x = r18 -r_ad_J_hi = r19 -r_ad2o = r19 -r_ad_mJ_hi = r20 -r_mj = r21 -r_ad2e = r22 -r_ad3 = r23 -r_ad1 = r24 -r_Mmj = r24 -r_rshf = r25 -r_M = r25 -r_N = r25 -r_jshf = r26 -r_exp_2tom57 = r26 -r_j = r26 -r_exp_mask = r27 -r_signexp_x = r28 -r_signexp_sgnx_0_5 = r28 -r_exp_0_25 = r29 -r_sig_inv_ln2 = r30 -r_exp_32 = r30 -r_exp_huge = r30 -r_ad4 = r31 - -GR_SAVE_PFS = r34 -GR_SAVE_B0 = r35 -GR_SAVE_GP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - -f_ABS_X = f9 -f_X2 = f10 -f_X4 = f11 -f_tmp = f14 -f_RSHF = f15 - -f_Inv_log2by64 = f32 -f_log2by64_lo = f33 -f_log2by64_hi = f34 -f_A1 = f35 - -f_A2 = f36 -f_A3 = f37 -f_Rcub = f38 -f_M_temp = f39 -f_R_temp = f40 - -f_Rsq = f41 -f_R = f42 -f_M = f43 -f_B1 = f44 -f_B2 = f45 - -f_B3 = f46 -f_peven_temp1 = f47 -f_peven_temp2 = f48 -f_peven = f49 -f_podd_temp1 = f50 - -f_podd_temp2 = f51 -f_podd = f52 -f_poly65 = f53 -f_poly6543 = f53 -f_poly6to1 = f53 -f_poly43 = f54 -f_poly21 = f55 - -f_X3 = f56 -f_INV_LN2_2TO63 = f57 -f_RSHF_2TO57 = f58 -f_2TOM57 = f59 -f_smlst_oflow_input = f60 - -f_pre_result = f61 -f_huge = f62 -f_spos = f63 -f_sneg = f64 -f_Tjhi = f65 - -f_Tjlo = f66 -f_Tmjhi = f67 -f_Tmjlo = f68 -f_S_hi = f69 -f_SC_hi_temp = f70 - -f_S_lo_temp1 = f71 -f_S_lo_temp2 = f72 -f_S_lo_temp3 = f73 -f_S_lo_temp4 = f73 -f_S_lo = f74 -f_C_hi = f75 - -f_Y_hi = f77 -f_Y_lo_temp = f78 -f_Y_lo = f79 -f_NORM_X = f80 - -f_P1 = f81 -f_P2 = f82 -f_P3 = f83 -f_P4 = f84 -f_P5 = f85 - -f_P6 = f86 -f_Tjhi_spos = f87 -f_Tjlo_spos = f88 -f_huge = f89 -f_signed_hi_lo = f90 - - -// Data tables -//============================================================== - -// DO NOT CHANGE ORDER OF THESE TABLES -RODATA - -.align 16 -LOCAL_OBJECT_START(sinh_arg_reduction) -// data8 0xB8AA3B295C17F0BC, 0x00004005 // 64/log2 -- signif loaded with setf - data8 0xB17217F7D1000000, 0x00003FF8 // log2/64 high part - data8 0xCF79ABC9E3B39804, 0x00003FD0 // log2/64 low part - data8 0xb174ddc031aec0ea, 0x0000400c // Smallest x to overflow (11357.21655) -LOCAL_OBJECT_END(sinh_arg_reduction) - -LOCAL_OBJECT_START(sinh_p_table) - data8 0xB08AF9AE78C1239F, 0x00003FDE // P6 - data8 0xB8EF1D28926D8891, 0x00003FEC // P4 - data8 0x8888888888888412, 0x00003FF8 // P2 - data8 0xD732377688025BE9, 0x00003FE5 // P5 - data8 0xD00D00D00D4D39F2, 0x00003FF2 // P3 - data8 0xAAAAAAAAAAAAAAAB, 0x00003FFC // P1 -LOCAL_OBJECT_END(sinh_p_table) - -LOCAL_OBJECT_START(sinh_ab_table) - data8 0xAAAAAAAAAAAAAAAC, 0x00003FFC // A1 - data8 0x88888888884ECDD5, 0x00003FF8 // A2 - data8 0xD00D0C6DCC26A86B, 0x00003FF2 // A3 - data8 0x8000000000000002, 0x00003FFE // B1 - data8 0xAAAAAAAAAA402C77, 0x00003FFA // B2 - data8 0xB60B6CC96BDB144D, 0x00003FF5 // B3 -LOCAL_OBJECT_END(sinh_ab_table) - -LOCAL_OBJECT_START(sinh_j_hi_table) - data8 0xB504F333F9DE6484, 0x00003FFE - data8 0xB6FD91E328D17791, 0x00003FFE - data8 0xB8FBAF4762FB9EE9, 0x00003FFE - data8 0xBAFF5AB2133E45FB, 0x00003FFE - data8 0xBD08A39F580C36BF, 0x00003FFE - data8 0xBF1799B67A731083, 0x00003FFE - data8 0xC12C4CCA66709456, 0x00003FFE - data8 0xC346CCDA24976407, 0x00003FFE - data8 0xC5672A115506DADD, 0x00003FFE - data8 0xC78D74C8ABB9B15D, 0x00003FFE - data8 0xC9B9BD866E2F27A3, 0x00003FFE - data8 0xCBEC14FEF2727C5D, 0x00003FFE - data8 0xCE248C151F8480E4, 0x00003FFE - data8 0xD06333DAEF2B2595, 0x00003FFE - data8 0xD2A81D91F12AE45A, 0x00003FFE - data8 0xD4F35AABCFEDFA1F, 0x00003FFE - data8 0xD744FCCAD69D6AF4, 0x00003FFE - data8 0xD99D15C278AFD7B6, 0x00003FFE - data8 0xDBFBB797DAF23755, 0x00003FFE - data8 0xDE60F4825E0E9124, 0x00003FFE - data8 0xE0CCDEEC2A94E111, 0x00003FFE - data8 0xE33F8972BE8A5A51, 0x00003FFE - data8 0xE5B906E77C8348A8, 0x00003FFE - data8 0xE8396A503C4BDC68, 0x00003FFE - data8 0xEAC0C6E7DD24392F, 0x00003FFE - data8 0xED4F301ED9942B84, 0x00003FFE - data8 0xEFE4B99BDCDAF5CB, 0x00003FFE - data8 0xF281773C59FFB13A, 0x00003FFE - data8 0xF5257D152486CC2C, 0x00003FFE - data8 0xF7D0DF730AD13BB9, 0x00003FFE - data8 0xFA83B2DB722A033A, 0x00003FFE - data8 0xFD3E0C0CF486C175, 0x00003FFE - data8 0x8000000000000000, 0x00003FFF // Center of table - data8 0x8164D1F3BC030773, 0x00003FFF - data8 0x82CD8698AC2BA1D7, 0x00003FFF - data8 0x843A28C3ACDE4046, 0x00003FFF - data8 0x85AAC367CC487B15, 0x00003FFF - data8 0x871F61969E8D1010, 0x00003FFF - data8 0x88980E8092DA8527, 0x00003FFF - data8 0x8A14D575496EFD9A, 0x00003FFF - data8 0x8B95C1E3EA8BD6E7, 0x00003FFF - data8 0x8D1ADF5B7E5BA9E6, 0x00003FFF - data8 0x8EA4398B45CD53C0, 0x00003FFF - data8 0x9031DC431466B1DC, 0x00003FFF - data8 0x91C3D373AB11C336, 0x00003FFF - data8 0x935A2B2F13E6E92C, 0x00003FFF - data8 0x94F4EFA8FEF70961, 0x00003FFF - data8 0x96942D3720185A00, 0x00003FFF - data8 0x9837F0518DB8A96F, 0x00003FFF - data8 0x99E0459320B7FA65, 0x00003FFF - data8 0x9B8D39B9D54E5539, 0x00003FFF - data8 0x9D3ED9A72CFFB751, 0x00003FFF - data8 0x9EF5326091A111AE, 0x00003FFF - data8 0xA0B0510FB9714FC2, 0x00003FFF - data8 0xA27043030C496819, 0x00003FFF - data8 0xA43515AE09E6809E, 0x00003FFF - data8 0xA5FED6A9B15138EA, 0x00003FFF - data8 0xA7CD93B4E965356A, 0x00003FFF - data8 0xA9A15AB4EA7C0EF8, 0x00003FFF - data8 0xAB7A39B5A93ED337, 0x00003FFF - data8 0xAD583EEA42A14AC6, 0x00003FFF - data8 0xAF3B78AD690A4375, 0x00003FFF - data8 0xB123F581D2AC2590, 0x00003FFF - data8 0xB311C412A9112489, 0x00003FFF - data8 0xB504F333F9DE6484, 0x00003FFF -LOCAL_OBJECT_END(sinh_j_hi_table) - -LOCAL_OBJECT_START(sinh_j_lo_table) - data4 0x1EB2FB13 - data4 0x1CE2CBE2 - data4 0x1DDC3CBC - data4 0x1EE9AA34 - data4 0x9EAEFDC1 - data4 0x9DBF517B - data4 0x1EF88AFB - data4 0x1E03B216 - data4 0x1E78AB43 - data4 0x9E7B1747 - data4 0x9EFE3C0E - data4 0x9D36F837 - data4 0x9DEE53E4 - data4 0x9E24AE8E - data4 0x1D912473 - data4 0x1EB243BE - data4 0x1E669A2F - data4 0x9BBC610A - data4 0x1E761035 - data4 0x9E0BE175 - data4 0x1CCB12A1 - data4 0x1D1BFE90 - data4 0x1DF2F47A - data4 0x1EF22F22 - data4 0x9E3F4A29 - data4 0x1EC01A5B - data4 0x1E8CAC3A - data4 0x9DBB3FAB - data4 0x1EF73A19 - data4 0x9BB795B5 - data4 0x1EF84B76 - data4 0x9EF5818B - data4 0x00000000 // Center of table - data4 0x1F77CACA - data4 0x1EF8A91D - data4 0x1E57C976 - data4 0x9EE8DA92 - data4 0x1EE85C9F - data4 0x1F3BF1AF - data4 0x1D80CA1E - data4 0x9D0373AF - data4 0x9F167097 - data4 0x1EB70051 - data4 0x1F6EB029 - data4 0x1DFD6D8E - data4 0x9EB319B0 - data4 0x1EBA2BEB - data4 0x1F11D537 - data4 0x1F0D5A46 - data4 0x9E5E7BCA - data4 0x9F3AAFD1 - data4 0x9E86DACC - data4 0x9F3EDDC2 - data4 0x1E496E3D - data4 0x9F490BF6 - data4 0x1DD1DB48 - data4 0x1E65EBFB - data4 0x9F427496 - data4 0x1F283C4A - data4 0x1F4B0047 - data4 0x1F130152 - data4 0x9E8367C0 - data4 0x9F705F90 - data4 0x1EFB3C53 - data4 0x1F32FB13 -LOCAL_OBJECT_END(sinh_j_lo_table) - - -.section .text -GLOBAL_IEEE754_ENTRY(sinhl) - -{ .mlx - getf.exp r_signexp_x = f8 // Get signexp of x, must redo if unorm - movl r_sig_inv_ln2 = 0xb8aa3b295c17f0bc // significand of 1/ln2 -} -{ .mlx - addl r_ad1 = @ltoff(sinh_arg_reduction), gp - movl r_rshf_2to57 = 0x4778000000000000 // 1.10000 2^(63+57) -} -;; - -{ .mfi - ld8 r_ad1 = [r_ad1] - fmerge.s f_ABS_X = f0,f8 - mov r_exp_0_25 = 0x0fffd // Form exponent for 0.25 -} -{ .mfi - nop.m 0 - fnorm.s1 f_NORM_X = f8 - mov r_exp_2tom57 = 0xffff-57 -} -;; - -{ .mfi - setf.d f_RSHF_2TO57 = r_rshf_2to57 // Form const 1.100 * 2^120 - fclass.m p10,p0 = f8, 0x0b // Test for denorm - mov r_exp_mask = 0x1ffff -} -{ .mlx - setf.sig f_INV_LN2_2TO63 = r_sig_inv_ln2 // Form 1/ln2 * 2^63 - movl r_rshf = 0x43e8000000000000 // 1.1000 2^63 for right shift -} -;; - -{ .mfi - nop.m 0 - fclass.m p7,p0 = f8, 0x07 // Test if x=0 - nop.i 0 -} -{ .mfi - setf.exp f_2TOM57 = r_exp_2tom57 // Form 2^-57 for scaling - nop.f 0 - add r_ad3 = 0x90, r_ad1 // Point to ab_table -} -;; - -{ .mfi - setf.d f_RSHF = r_rshf // Form right shift const 1.100 * 2^63 - fclass.m p6,p0 = f8, 0xe3 // Test if x nan, inf - add r_ad4 = 0x2f0, r_ad1 // Point to j_hi_table midpoint -} -{ .mib - add r_ad2e = 0x20, r_ad1 // Point to p_table - nop.i 0 -(p10) br.cond.spnt SINH_DENORM // Branch if x denorm -} -;; - -// Common path -- return here from SINH_DENORM if x is unnorm -SINH_COMMON: -{ .mfi - ldfe f_smlst_oflow_input = [r_ad2e],16 - nop.f 0 - add r_ad5 = 0x580, r_ad1 // Point to j_lo_table midpoint -} -{ .mib - ldfe f_log2by64_hi = [r_ad1],16 - and r_exp_x = r_exp_mask, r_signexp_x -(p7) br.ret.spnt b0 // Exit if x=0 -} -;; - -// Get the A coefficients for SINH_BY_TBL -{ .mfi - ldfe f_A1 = [r_ad3],16 - fcmp.lt.s1 p8,p9 = f8,f0 // Test for x<0 - cmp.lt p7,p0 = r_exp_x, r_exp_0_25 // Test x < 0.25 -} -{ .mfb - add r_ad2o = 0x30, r_ad2e // Point to p_table odd coeffs -(p6) fma.s0 f8 = f8,f1,f0 // Result for x nan, inf -(p6) br.ret.spnt b0 // Exit for x nan, inf -} -;; - -// Calculate X2 = ax*ax for SINH_BY_POLY -{ .mfi - ldfe f_log2by64_lo = [r_ad1],16 - nop.f 0 - nop.i 0 -} -{ .mfb - ldfe f_A2 = [r_ad3],16 - fma.s1 f_X2 = f_NORM_X, f_NORM_X, f0 -(p7) br.cond.spnt SINH_BY_POLY -} -;; - -// Here if |x| >= 0.25 -SINH_BY_TBL: -// ****************************************************** -// STEP 1 (TBL and EXP) - Argument reduction -// ****************************************************** -// Get the following constants. -// Inv_log2by64 -// log2by64_hi -// log2by64_lo - - -// We want 2^(N-1) and 2^(-N-1). So bias N-1 and -N-1 and -// put them in an exponent. -// f_spos = 2^(N-1) and f_sneg = 2^(-N-1) -// 0xffff + (N-1) = 0xffff +N -1 -// 0xffff - (N +1) = 0xffff -N -1 - - -// Calculate M and keep it as integer and floating point. -// M = round-to-integer(x*Inv_log2by64) -// f_M = M = truncate(ax/(log2/64)) -// Put the integer representation of M in r_M -// and the floating point representation of M in f_M - -// Get the remaining A,B coefficients -{ .mmi - ldfe f_A3 = [r_ad3],16 - nop.m 0 - nop.i 0 -} -;; - -.pred.rel "mutex",p8,p9 -// Use constant (1.100*2^(63-6)) to get rounded M into rightmost significand -// |x| * 64 * 1/ln2 * 2^(63-6) + 1.1000 * 2^(63+(63-6)) -{ .mfi -(p8) mov r_signexp_sgnx_0_5 = 0x2fffe // signexp of -0.5 - fma.s1 f_M_temp = f_ABS_X, f_INV_LN2_2TO63, f_RSHF_2TO57 -(p9) mov r_signexp_sgnx_0_5 = 0x0fffe // signexp of +0.5 -} -;; - -// Test for |x| >= overflow limit -{ .mfi - ldfe f_B1 = [r_ad3],16 - fcmp.ge.s1 p6,p0 = f_ABS_X, f_smlst_oflow_input - nop.i 0 -} -;; - -{ .mfi - ldfe f_B2 = [r_ad3],16 - nop.f 0 - mov r_exp_32 = 0x10004 -} -;; - -// Subtract RSHF constant to get rounded M as a floating point value -// M_temp * 2^(63-6) - 2^63 -{ .mfb - ldfe f_B3 = [r_ad3],16 - fms.s1 f_M = f_M_temp, f_2TOM57, f_RSHF -(p6) br.cond.spnt SINH_HUGE // Branch if result will overflow -} -;; - -{ .mfi - getf.sig r_M = f_M_temp - nop.f 0 - cmp.ge p7,p6 = r_exp_x, r_exp_32 // Test if x >= 32 -} -;; - -// Calculate j. j is the signed extension of the six lsb of M. It -// has a range of -32 thru 31. - -// Calculate R -// ax - M*log2by64_hi -// R = (ax - M*log2by64_hi) - M*log2by64_lo - -{ .mfi - nop.m 0 - fnma.s1 f_R_temp = f_M, f_log2by64_hi, f_ABS_X - and r_j = 0x3f, r_M -} -;; - -{ .mii - nop.m 0 - shl r_jshf = r_j, 0x2 // Shift j so can sign extend it -;; - sxt1 r_jshf = r_jshf -} -;; - -{ .mii - nop.m 0 - shr r_j = r_jshf, 0x2 // Now j has range -32 to 31 - nop.i 0 -} -;; - -{ .mmi - shladd r_ad_J_hi = r_j, 4, r_ad4 // pointer to Tjhi - sub r_Mmj = r_M, r_j // M-j - sub r_mj = r0, r_j // Form -j -} -;; - -// The TBL and EXP branches are merged and predicated -// If TBL, p6 true, 0.25 <= |x| < 32 -// If EXP, p7 true, 32 <= |x| < overflow_limit -// -// N = (M-j)/64 -{ .mfi - ldfe f_Tjhi = [r_ad_J_hi] - fnma.s1 f_R = f_M, f_log2by64_lo, f_R_temp - shr r_N = r_Mmj, 0x6 // N = (M-j)/64 -} -{ .mfi - shladd r_ad_mJ_hi = r_mj, 4, r_ad4 // pointer to Tmjhi - nop.f 0 - shladd r_ad_mJ_lo = r_mj, 2, r_ad5 // pointer to Tmjlo -} -;; - -{ .mfi - sub r_2mNm1 = r_signexp_sgnx_0_5, r_N // signexp sgnx*2^(-N-1) - nop.f 0 - shladd r_ad_J_lo = r_j, 2, r_ad5 // pointer to Tjlo -} -{ .mfi - ldfe f_Tmjhi = [r_ad_mJ_hi] - nop.f 0 - add r_2Nm1 = r_signexp_sgnx_0_5, r_N // signexp sgnx*2^(N-1) -} -;; - -{ .mmf - ldfs f_Tmjlo = [r_ad_mJ_lo] - setf.exp f_sneg = r_2mNm1 // Form sgnx * 2^(-N-1) - nop.f 0 -} -;; - -{ .mmf - ldfs f_Tjlo = [r_ad_J_lo] - setf.exp f_spos = r_2Nm1 // Form sgnx * 2^(N-1) - nop.f 0 -} -;; - -// ****************************************************** -// STEP 2 (TBL and EXP) -// ****************************************************** -// Calculate Rsquared and Rcubed in preparation for p_even and p_odd - -{ .mmf - nop.m 0 - nop.m 0 - fma.s1 f_Rsq = f_R, f_R, f0 -} -;; - - -// Calculate p_even -// B_2 + Rsq *B_3 -// B_1 + Rsq * (B_2 + Rsq *B_3) -// p_even = Rsq * (B_1 + Rsq * (B_2 + Rsq *B_3)) -{ .mfi - nop.m 0 - fma.s1 f_peven_temp1 = f_Rsq, f_B3, f_B2 - nop.i 0 -} -// Calculate p_odd -// A_2 + Rsq *A_3 -// A_1 + Rsq * (A_2 + Rsq *A_3) -// podd = R + Rcub * (A_1 + Rsq * (A_2 + Rsq *A_3)) -{ .mfi - nop.m 0 - fma.s1 f_podd_temp1 = f_Rsq, f_A3, f_A2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_Rcub = f_Rsq, f_R, f0 - nop.i 0 -} -;; - -// -// If TBL, -// Calculate S_hi and S_lo, and C_hi -// SC_hi_temp = sneg * Tmjhi -// S_hi = spos * Tjhi - SC_hi_temp -// S_hi = spos * Tjhi - (sneg * Tmjhi) -// C_hi = spos * Tjhi + SC_hi_temp -// C_hi = spos * Tjhi + (sneg * Tmjhi) - -{ .mfi - nop.m 0 -(p6) fma.s1 f_SC_hi_temp = f_sneg, f_Tmjhi, f0 - nop.i 0 -} -;; - -// If TBL, -// S_lo_temp3 = sneg * Tmjlo -// S_lo_temp4 = spos * Tjlo - S_lo_temp3 -// S_lo_temp4 = spos * Tjlo -(sneg * Tmjlo) -{ .mfi - nop.m 0 -(p6) fma.s1 f_S_lo_temp3 = f_sneg, f_Tmjlo, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_peven_temp2 = f_Rsq, f_peven_temp1, f_B1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 f_podd_temp2 = f_Rsq, f_podd_temp1, f_A1 - nop.i 0 -} -;; - -// If EXP, -// Compute sgnx * 2^(N-1) * Tjhi and sgnx * 2^(N-1) * Tjlo -{ .mfi - nop.m 0 -(p7) fma.s1 f_Tjhi_spos = f_Tjhi, f_spos, f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.s1 f_Tjlo_spos = f_Tjlo, f_spos, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fms.s1 f_S_hi = f_spos, f_Tjhi, f_SC_hi_temp - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fma.s1 f_C_hi = f_spos, f_Tjhi, f_SC_hi_temp - nop.i 0 -} -{ .mfi - nop.m 0 -(p6) fms.s1 f_S_lo_temp4 = f_spos, f_Tjlo, f_S_lo_temp3 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_peven = f_Rsq, f_peven_temp2, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 f_podd = f_podd_temp2, f_Rcub, f_R - nop.i 0 -} -;; - -// If TBL, -// S_lo_temp1 = spos * Tjhi - S_hi -// S_lo_temp2 = -sneg * Tmjlo + S_lo_temp1 -// S_lo_temp2 = -sneg * Tmjlo + (spos * Tjhi - S_hi) - -{ .mfi - nop.m 0 -(p6) fms.s1 f_S_lo_temp1 = f_spos, f_Tjhi, f_S_hi - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fnma.s1 f_S_lo_temp2 = f_sneg, f_Tmjhi, f_S_lo_temp1 - nop.i 0 -} -;; - -// If EXP, -// Y_hi = sgnx * 2^(N-1) * Tjhi -// Y_lo = sgnx * 2^(N-1) * Tjhi * (p_odd + p_even) + sgnx * 2^(N-1) * Tjlo -{ .mfi - nop.m 0 -(p7) fma.s1 f_Y_lo_temp = f_peven, f1, f_podd - nop.i 0 -} -;; - -// If TBL, -// S_lo = S_lo_temp4 + S_lo_temp2 -{ .mfi - nop.m 0 -(p6) fma.s1 f_S_lo = f_S_lo_temp4, f1, f_S_lo_temp2 - nop.i 0 -} -;; - -// If TBL, -// Y_hi = S_hi -// Y_lo = C_hi*p_odd + (S_hi*p_even + S_lo) -{ .mfi - nop.m 0 -(p6) fma.s1 f_Y_lo_temp = f_S_hi, f_peven, f_S_lo - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p7) fma.s1 f_Y_lo = f_Tjhi_spos, f_Y_lo_temp, f_Tjlo_spos - nop.i 0 -} -;; - -// Dummy multiply to generate inexact -{ .mfi - nop.m 0 - fmpy.s0 f_tmp = f_B2, f_B2 - nop.i 0 -} -{ .mfi - nop.m 0 -(p6) fma.s1 f_Y_lo = f_C_hi, f_podd, f_Y_lo_temp - nop.i 0 -} -;; - -// f8 = answer = Y_hi + Y_lo -{ .mfi - nop.m 0 -(p7) fma.s0 f8 = f_Y_lo, f1, f_Tjhi_spos - nop.i 0 -} -;; - -// f8 = answer = Y_hi + Y_lo -{ .mfb - nop.m 0 -(p6) fma.s0 f8 = f_Y_lo, f1, f_S_hi - br.ret.sptk b0 // Exit for SINH_BY_TBL and SINH_BY_EXP -} -;; - - -// Here if 0 < |x| < 0.25 -SINH_BY_POLY: -{ .mmf - ldfe f_P6 = [r_ad2e],16 - ldfe f_P5 = [r_ad2o],16 - nop.f 0 -} -;; - -{ .mmi - ldfe f_P4 = [r_ad2e],16 - ldfe f_P3 = [r_ad2o],16 - nop.i 0 -} -;; - -{ .mmi - ldfe f_P2 = [r_ad2e],16 - ldfe f_P1 = [r_ad2o],16 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_X3 = f_NORM_X, f_X2, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 f_X4 = f_X2, f_X2, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_poly65 = f_X2, f_P6, f_P5 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 f_poly43 = f_X2, f_P4, f_P3 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_poly21 = f_X2, f_P2, f_P1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_poly6543 = f_X4, f_poly65, f_poly43 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 f_poly6to1 = f_X4, f_poly6543, f_poly21 - nop.i 0 -} -;; - -// Dummy multiply to generate inexact -{ .mfi - nop.m 0 - fmpy.s0 f_tmp = f_P6, f_P6 - nop.i 0 -} -{ .mfb - nop.m 0 - fma.s0 f8 = f_poly6to1, f_X3, f_NORM_X - br.ret.sptk b0 // Exit SINH_BY_POLY -} -;; - - -// Here if x denorm or unorm -SINH_DENORM: -// Determine if x really a denorm and not a unorm -{ .mmf - getf.exp r_signexp_x = f_NORM_X - mov r_exp_denorm = 0x0c001 // Real denorms have exp < this - fmerge.s f_ABS_X = f0, f_NORM_X -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.s0 p10,p0 = f8, f0 // Set denorm flag - nop.i 0 -} -;; - -// Set p8 if really a denorm -{ .mmi - and r_exp_x = r_exp_mask, r_signexp_x -;; - cmp.lt p8,p9 = r_exp_x, r_exp_denorm - nop.i 0 -} -;; - -// Identify denormal operands. -{ .mfb - nop.m 0 -(p8) fcmp.ge.unc.s1 p6,p7 = f8, f0 // Test sign of denorm -(p9) br.cond.sptk SINH_COMMON // Return to main path if x unorm -} -;; - -{ .mfi - nop.m 0 -(p6) fma.s0 f8 = f8,f8,f8 // If x +denorm, result=x+x^2 - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fnma.s0 f8 = f8,f8,f8 // If x -denorm, result=x-x^2 - br.ret.sptk b0 // Exit if x denorm -} -;; - - -// Here if |x| >= overflow limit -SINH_HUGE: -// for SINH_HUGE, put 24000 in exponent; take sign from input -{ .mmi - mov r_exp_huge = 0x15dbf -;; - setf.exp f_huge = r_exp_huge - nop.i 0 -} -;; - -.pred.rel "mutex",p8,p9 -{ .mfi - alloc r32 = ar.pfs,0,5,4,0 -(p8) fnma.s1 f_signed_hi_lo = f_huge, f1, f1 - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 f_signed_hi_lo = f_huge, f1, f1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s0 f_pre_result = f_signed_hi_lo, f_huge, f0 - mov GR_Parameter_TAG = 126 -} -;; - -GLOBAL_IEEE754_END(sinhl) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfe [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfe [GR_Parameter_X] = f8 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfe [GR_Parameter_Y] = f_pre_result // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_sqrt.S b/sysdeps/ia64/fpu/e_sqrt.S deleted file mode 100644 index da4e8ccb6d..0000000000 --- a/sysdeps/ia64/fpu/e_sqrt.S +++ /dev/null @@ -1,342 +0,0 @@ -.file "sqrt.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//******************************************************************** -// History -//******************************************************************** -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -//******************************************************************** -// -// Function: Combined sqrt(x), where -// _ -// sqrt(x) = |x, for double precision x values -// -//******************************************************************** -// -// Accuracy: Correctly Rounded -// -//******************************************************************** -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f7 -f14 -// -// General Purpose Registers: -// r32-r36 (Locals) -// r37-r40 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6, p7, p8 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// All faults and exceptions should be raised correctly. -// sqrt(QNaN) = QNaN -// sqrt(SNaN) = QNaN -// sqrt(+/-0) = +/-0 -// sqrt(negative) = QNaN and error handling is called -// -//********************************************************************* -// -// Implementation: -// -// Modified Newton-Raphson Algorithm -// -//********************************************************************* - -GR_SAVE_PFS = r33 -GR_SAVE_B0 = r34 -GR_SAVE_GP = r35 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 - - -.section .text -GLOBAL_IEEE754_ENTRY(sqrt) -{ .mfi - alloc r32= ar.pfs,0,5,4,0 - frsqrta.s0 f7,p6=f8 - nop.i 0 -} { .mlx - // BEGIN DOUBLE PRECISION MINIMUM LATENCY SQUARE ROOT ALGORITHM - nop.m 0 - // exponent of +1/2 in r2 - movl r2 = 0x0fffe;; -} { .mmi - // +1/2 in f9 - setf.exp f9 = r2 - nop.m 0 - nop.i 0 -} { .mlx - nop.m 0 - // 3/2 in r3 - movl r3=0x3fc00000;; -} { .mfi - setf.s f10=r3 - // Step (1) - // y0 = 1/sqrt(a) in f7 - fclass.m.unc p7,p8 = f8,0x3A - nop.i 0;; -} { .mlx - nop.m 0 - // 5/2 in r2 - movl r2 = 0x40200000 -} { .mlx - nop.m 0 - // 63/8 in r3 - movl r3 = 0x40fc0000;; -} { .mfi - setf.s f11=r2 - // Step (2) - // h = +1/2 * y0 in f6 - (p6) fma.s1 f6=f9,f7,f0 - nop.i 0 -} { .mfi - setf.s f12=r3 - // Step (3) - // g = a * y0 in f7 - (p6) fma.s1 f7=f8,f7,f0 - nop.i 0 -} { .mfi - nop.m 0 - mov f15 = f8 - nop.i 0;; -} { .mlx - nop.m 0 - // 231/16 in r2 - movl r2 = 0x41670000;; -} { .mfi - setf.s f13=r2 - // Step (4) - // e = 1/2 - g * h in f9 - (p6) fnma.s1 f9=f7,f6,f9 - nop.i 0 -} { .mlx - nop.m 0 - // 35/8 in r3 - movl r3 = 0x408c0000;; -} { .mfi - setf.s f14=r3 - // Step (5) - // S = 3/2 + 5/2 * e in f10 - (p6) fma.s1 f10=f11,f9,f10 - nop.i 0 -} { .mfi - nop.m 0 - // Step (6) - // e2 = e * e in f11 - (p6) fma.s1 f11=f9,f9,f0 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (7) - // t = 63/8 + 231/16 * e in f12 - (p6) fma.s1 f12=f13,f9,f12 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (8) - // S1 = e + e2 * S in f10 - (p6) fma.s1 f10=f11,f10,f9 - nop.i 0 -} { .mfi - nop.m 0 - // Step (9) - // e4 = e2 * e2 in f11 - (p6) fma.s1 f11=f11,f11,f0 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (10) - // t1 = 35/8 + e * t in f9 - (p6) fma.s1 f9=f9,f12,f14 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (11) - // G = g + S1 * g in f12 - (p6) fma.s1 f12=f10,f7,f7 - nop.i 0 -} { .mfi - nop.m 0 - // Step (12) - // E = g * e4 in f7 - (p6) fma.s1 f7=f7,f11,f0 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (13) - // u = S1 + e4 * t1 in f10 - (p6) fma.s1 f10=f11,f9,f10 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (14) - // g1 = G + t1 * E in f7 - (p6) fma.d.s1 f7=f9,f7,f12 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (15) - // h1 = h + u * h in f6 - (p6) fma.s1 f6=f10,f6,f6 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (16) - // d = a - g1 * g1 in f9 - (p6) fnma.s1 f9=f7,f7,f8 - nop.i 0;; -} { .mfb - nop.m 0 - // Step (17) - // g2 = g1 + d * h1 in f7 - (p6) fma.d.s0 f8=f9,f6,f7 - (p6) br.ret.sptk b0 ;; -} - -{ .mfb - nop.m 0 - mov f8 = f7 - (p8) br.ret.sptk b0 ;; -} -{ .mfb - (p7) mov r40 = 49 - nop.f 0 - (p7) br.cond.sptk __libm_error_region ;; -} -// END DOUBLE PRECISION MINIMUM LATENCY SQUARE ROOT ALGORITHM -GLOBAL_IEEE754_END(sqrt) - -// Stack operations when calling error support. -// (1) (2) (3) (call) (4) -// sp -> + psp -> + psp -> + sp -> + -// | | | | -// | | <- GR_Y R3 ->| <- GR_RESULT | -> f8 -// | | | | -// | <-GR_Y Y2->| Y2 ->| <- GR_Y | -// | | | | -// | | <- GR_X X1 ->| | -// | | | | -// sp-64 -> + sp -> + sp -> + + -// save ar.pfs save b0 restore gp -// save gp restore ar.pfs - - -LOCAL_LIBM_ENTRY(__libm_error_region) - -// -// This branch includes all those special values that are not negative, -// with the result equal to frcpa(x) -// - -.prologue -// We are distinguishing between over(under)flow and letting -// __libm_error_support set ERANGE or do anything else needed. - -// (1) -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - - -// (2) -{ .mmi - stfd [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -// (3) -{ .mib - stfd [GR_Parameter_X] = f15 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; - -// (4) -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_sqrtf.S b/sysdeps/ia64/fpu/e_sqrtf.S deleted file mode 100644 index d50ff012e4..0000000000 --- a/sysdeps/ia64/fpu/e_sqrtf.S +++ /dev/null @@ -1,260 +0,0 @@ -.file "sqrtf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// History: -// -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -//********************************************************************* -// -// Function: Combined sqrtf(x), where -// _ -// sqrtf(x) = |x, for single precision x values -// -//******************************************************************** -// -// Accuracy: Correctly Rounded -// -//******************************************************************** -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f7 -f14 -// -// General Purpose Registers: -// r32-r36 (Locals) -// r37-r40 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6, p7, p8 -// -//******************************************************************** -// -// IEEE Special Conditions: -// -// All faults and exceptions should be raised correctly. -// sqrtf(QNaN) = QNaN -// sqrtf(SNaN) = QNaN -// sqrtf(+/-0) = +/-0 -// sqrtf(negative) = QNaN and error handling is called -// -//******************************************************************** -// -// Implementation: -// -// Modified Newton-Raphson Algorithm -// -//******************************************************************** - - -GR_SAVE_B0 = r34 -GR_SAVE_PFS = r33 -GR_SAVE_GP = r35 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - -FR_X = f13 -FR_Y = f0 -FR_RESULT = f8 - - -.section .text -GLOBAL_IEEE754_ENTRY(sqrtf) -{ .mlx - // BEGIN SINGLE PRECISION MINIMUM LATENCY SQUARE ROOT ALGORITHM - alloc r32= ar.pfs,0,5,4,0 - // exponent of +1/2 in r2 - movl r2 = 0x0fffe -} { .mfi - // +1/2 in f12 - nop.m 0 - frsqrta.s0 f7,p6=f8 - nop.i 0;; -} { .mfi - setf.exp f12 = r2 - // Step (1) - // y0 = 1/sqrt(a) in f7 - fclass.m.unc p7,p8 = f8,0x3A - nop.i 0 -} { .mfi - nop.m 0 - // Make a copy of x just in case - mov f13 = f8 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (2) - // H0 = 1/2 * y0 in f9 - (p6) fma.s1 f9=f12,f7,f0 - nop.i 0 -} { .mfi - nop.m 0 - // Step (3) - // S0 = a * y0 in f7 - (p6) fma.s1 f7=f8,f7,f0 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (4) - // d = 1/2 - S0 * H0 in f10 - (p6) fnma.s1 f10=f7,f9,f12 - nop.i 0 -} { .mfi - nop.m 0 - // Step (0'') - // 3/2 = 1 + 1/2 in f12 - (p6) fma.s1 f12=f12,f1,f1 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (5) - // e = 1 + 3/2 * d in f12 - (p6) fma.s1 f12=f12,f10,f1 - nop.i 0 -} { .mfi - nop.m 0 - // Step (6) - // T0 = d * S0 in f11 - (p6) fma.s1 f11=f10,f7,f0 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (7) - // G0 = d * H0 in f10 - (p6) fma.s1 f10=f10,f9,f0 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (8) - // S1 = S0 + e * T0 in f7 - (p6) fma.s.s1 f7=f12,f11,f7 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (9) - // H1 = H0 + e * G0 in f12 - (p6) fma.s1 f12=f12,f10,f9 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (10) - // d1 = a - S1 * S1 in f9 - (p6) fnma.s1 f9=f7,f7,f8 - nop.i 0;; -} { .mfb - nop.m 0 - // Step (11) - // S = S1 + d1 * H1 in f7 - (p6) fma.s.s0 f8=f9,f12,f7 - (p6) br.ret.sptk b0 ;; -// END SINGLE PRECISION MINIMUM LATENCY SQUARE ROOT ALGORITHM -} { .mfb - nop.m 0 - mov f8 = f7 - (p8) br.ret.sptk b0 ;; -} -// -// This branch includes all those special values that are not negative, -// with the result equal to frcpa(x) -// -GLOBAL_IEEE754_END(sqrtf) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mii - add GR_Parameter_Y=-32,sp // Parameter 2 value - mov GR_Parameter_TAG = 50 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = FR_Y,16 // Store Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/e_sqrtl.S b/sysdeps/ia64/fpu/e_sqrtl.S deleted file mode 100644 index 6aa402150f..0000000000 --- a/sysdeps/ia64/fpu/e_sqrtl.S +++ /dev/null @@ -1,275 +0,0 @@ -.file "sqrtl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//******************************************************************** -// -// History: -// 02/02/00 (hand-optimized) -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -//******************************************************************** -// -// Function: Combined sqrtl(x), where -// _ -// sqrtl(x) = |x, for double-extended precision x values -// -//******************************************************************** -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f7 -f14 -// -// General Purpose Registers: -// r32-r36 (Locals) -// r37-r40 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6, p7, p8 -// -//******************************************************************** -// -// IEEE Special Conditions: -// -// All faults and exceptions should be raised correctly. -// sqrtl(QNaN) = QNaN -// sqrtl(SNaN) = QNaN -// sqrtl(+/-0) = +/-0 -// sqrtl(negative) = QNaN and error handling is called -// -//******************************************************************** -// -// Implementation: -// -// Modified Newton-Raphson Algorithm -// -//******************************************************************** - -GR_SAVE_PFS = r33 -GR_SAVE_B0 = r34 -GR_SAVE_GP = r35 -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - -FR_X = f15 -FR_Y = f0 -FR_RESULT = f8 - -.section .text -GLOBAL_IEEE754_ENTRY(sqrtl) -{ .mlx -alloc r32= ar.pfs,0,5,4,0 - // exponent of +1/2 in r2 - movl r2 = 0x0fffe;; -} { .mfi - // +1/2 in f10 - setf.exp f12 = r2 - // Step (1) - // y0 = 1/sqrt(a) in f7 - frsqrta.s0 f7,p6=f8 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (2) - // H0 = +1/2 * y0 in f9 - (p6) fma.s1 f9=f12,f7,f0 - nop.i 0 -} { .mfi - nop.m 0 - // Step (3) - // S0 = a * y0 in f7 - (p6) fma.s1 f7=f8,f7,f0 - nop.i 0;; -} { .mfi - nop.m 0 - // Make copy input x - mov f13=f8 - nop.i 0 -} { .mfi - nop.m 0 - fclass.m.unc p7,p8 = f8,0x3A - nop.i 0;; -} { .mfi - nop.m 0 - // Step (4) - // d0 = 1/2 - S0 * H0 in f10 - (p6) fnma.s1 f10=f7,f9,f12 - nop.i 0;; -} -{ .mfi - nop.m 0 - mov f15=f8 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (5) - // H1 = H0 + d0 * H0 in f9 - (p6) fma.s1 f9=f10,f9,f9 - nop.i 0 -} { .mfi - nop.m 0 - // Step (6) - // S1 = S0 + d0 * S0 in f7 - (p6) fma.s1 f7=f10,f7,f7 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (7) - // d1 = 1/2 - S1 * H1 in f10 - (p6) fnma.s1 f10=f7,f9,f12 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (8) - // H2 = H1 + d1 * H1 in f9 - (p6) fma.s1 f9=f10,f9,f9 - nop.i 0 -} { .mfi - nop.m 0 - // Step (9) - // S2 = S1 + d1 * S1 in f7 - (p6) fma.s1 f7=f10,f7,f7 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (10) - // d2 = 1/2 - S2 * H2 in f10 - (p6) fnma.s1 f10=f7,f9,f12 - nop.i 0 -} { .mfi - nop.m 0 - // Step (11) - // e2 = a - S2 * S2 in f12 - (p6) fnma.s1 f12=f7,f7,f8 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (12) - // S3 = S2 + d2 * S2 in f7 - (p6) fma.s1 f7=f12,f9,f7 - nop.i 0 -} { .mfi - nop.m 0 - // Step (13) - // H3 = H2 + d2 * H2 in f9 - (p6) fma.s1 f9=f10,f9,f9 - nop.i 0;; -} { .mfi - nop.m 0 - // Step (14) - // e3 = a - S3 * S3 in f12 - (p6) fnma.s1 f12=f7,f7,f8 - nop.i 0;; -} { .mfb - nop.m 0 - // Step (15) - // S = S3 + e3 * H3 in f7 - (p6) fma.s0 f8=f12,f9,f7 - (p6) br.ret.sptk b0 ;; -} -{ .mfb - mov GR_Parameter_TAG = 48 - mov f8 = f7 - (p8) br.ret.sptk b0 ;; -} -// -// This branch includes all those special values that are not negative, -// with the result equal to frcpa(x) -// - - -// END DOUBLE EXTENDED PRECISION MINIMUM LATENCY SQUARE ROOT ALGORITHM -GLOBAL_IEEE754_END(sqrtl) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region#) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/fclrexcpt.c b/sysdeps/ia64/fpu/fclrexcpt.c deleted file mode 100644 index c38ea25ab5..0000000000 --- a/sysdeps/ia64/fpu/fclrexcpt.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Christian Boissat , 1999 and - Jes Sorensen , 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -feclearexcept (int excepts) -{ - fenv_t fpsr; - - /* Get the current state. */ - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - - /* Clear the relevant bits. */ - fpsr &= ~(((fenv_t) ((excepts & FE_ALL_EXCEPT) << 13))); - /* Put the new state in effect. */ - __asm__ __volatile__ ("mov.m ar.fpsr=%0" :: "r" (fpsr) : "memory"); - - /* success */ - return 0; -} -libm_hidden_def (feclearexcept) diff --git a/sysdeps/ia64/fpu/fedisblxcpt.c b/sysdeps/ia64/fpu/fedisblxcpt.c deleted file mode 100644 index cabba7cf79..0000000000 --- a/sysdeps/ia64/fpu/fedisblxcpt.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jes Sorensen , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fedisableexcept (int excepts) -{ - fenv_t old_fpsr; - fenv_t new_fpsr; - - /* Get the current fpsr. */ - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (old_fpsr)); - - new_fpsr = old_fpsr | ((fenv_t) excepts & FE_ALL_EXCEPT); - - __asm__ __volatile__ ("mov.m ar.fpsr=%0" :: "r" (new_fpsr) : "memory"); - - return (old_fpsr ^ FE_ALL_EXCEPT) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/ia64/fpu/feenablxcpt.c b/sysdeps/ia64/fpu/feenablxcpt.c deleted file mode 100644 index ffb13b9507..0000000000 --- a/sysdeps/ia64/fpu/feenablxcpt.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jes Sorensen , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -feenableexcept (int excepts) -{ - fenv_t old_fpsr; - fenv_t new_fpsr; - - /* Get the current fpsr. */ - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (old_fpsr)); - - new_fpsr = old_fpsr & ~((fenv_t) excepts & FE_ALL_EXCEPT); - - __asm__ __volatile__ ("mov.m ar.fpsr=%0" :: "r" (new_fpsr) : "memory"); - - return (old_fpsr ^ FE_ALL_EXCEPT) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/ia64/fpu/fegetenv.c b/sysdeps/ia64/fpu/fegetenv.c deleted file mode 100644 index 97be099ad9..0000000000 --- a/sysdeps/ia64/fpu/fegetenv.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Christian Boissat , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fegetenv (fenv_t *envp) -{ - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (*envp)); - - return 0; -} -libm_hidden_def (__fegetenv) -weak_alias (__fegetenv, fegetenv) -libm_hidden_weak (fegetenv) diff --git a/sysdeps/ia64/fpu/fegetexcept.c b/sysdeps/ia64/fpu/fegetexcept.c deleted file mode 100644 index e52e4b65ef..0000000000 --- a/sysdeps/ia64/fpu/fegetexcept.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Get enabled floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jes Sorensen , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fegetexcept (void) -{ - fenv_t fpsr; - - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - - return (fpsr ^ FE_ALL_EXCEPT) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/ia64/fpu/fegetmode.c b/sysdeps/ia64/fpu/fegetmode.c deleted file mode 100644 index 669db6ca93..0000000000 --- a/sysdeps/ia64/fpu/fegetmode.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Store current floating-point control modes. IA64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fegetmode (femode_t *modep) -{ - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (*modep)); - return 0; -} diff --git a/sysdeps/ia64/fpu/fegetround.c b/sysdeps/ia64/fpu/fegetround.c deleted file mode 100644 index ce30982ea1..0000000000 --- a/sysdeps/ia64/fpu/fegetround.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Christian Boissat , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fegetround (void) -{ - return get_rounding_mode (); -} -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/ia64/fpu/feholdexcpt.c b/sysdeps/ia64/fpu/feholdexcpt.c deleted file mode 100644 index 98075a17ed..0000000000 --- a/sysdeps/ia64/fpu/feholdexcpt.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Christian Boissat , 1999 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__feholdexcept (fenv_t *envp) -{ - fenv_t fpsr; - /* Save the current state. */ - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - *envp = fpsr; - - /* Set the trap disable bits. */ - fpsr |= FE_ALL_EXCEPT; - - /* And clear the exception bits. */ - fpsr &= ~(fenv_t) (FE_ALL_EXCEPT << 13); - - __asm__ __volatile__ ("mov.m ar.fpsr=%0" :: "r" (fpsr)); - - /* Success. */ - return 0; -} -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/ia64/fpu/fesetenv.c b/sysdeps/ia64/fpu/fesetenv.c deleted file mode 100644 index 261607d4b7..0000000000 --- a/sysdeps/ia64/fpu/fesetenv.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jes Sorensen , 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fesetenv (const fenv_t *envp) -{ - fenv_t env; - - /* - This stinks! - Magic encoding of default values: bit 62+63 set (which will never - happen for a user-space address) means it's not indirect. - */ - if (((fenv_t) envp >> 62) == 0x03) - env = (fenv_t) envp & 0x3fffffffffffffff; - else - env = *envp; - - __asm__ __volatile__ ("mov.m ar.fpsr=%0;;" :: "r" (env)); - - return 0; -} -libm_hidden_def (__fesetenv) -weak_alias (__fesetenv, fesetenv) -libm_hidden_weak (fesetenv) diff --git a/sysdeps/ia64/fpu/fesetexcept.c b/sysdeps/ia64/fpu/fesetexcept.c deleted file mode 100644 index 396c3ae672..0000000000 --- a/sysdeps/ia64/fpu/fesetexcept.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Set given exception flags. IA64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fesetexcept (int excepts) -{ - fenv_t fpsr; - - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - fpsr |= ((excepts & FE_ALL_EXCEPT) << 13); - __asm__ __volatile__ ("mov.m ar.fpsr=%0" :: "r" (fpsr) : "memory"); - - return 0; -} diff --git a/sysdeps/ia64/fpu/fesetmode.c b/sysdeps/ia64/fpu/fesetmode.c deleted file mode 100644 index 889f0f723c..0000000000 --- a/sysdeps/ia64/fpu/fesetmode.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Install given floating-point control modes. IA64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define FPSR_STATUS 0x1f80UL -#define FPSR_STATUS_ALL ((FPSR_STATUS << 6) | (FPSR_STATUS << 19) \ - | (FPSR_STATUS << 32) | (FPSR_STATUS << 45)) - -int -fesetmode (const femode_t *modep) -{ - femode_t mode; - - /* As in fesetenv. */ - if (((fenv_t) modep >> 62) == 0x03) - mode = (femode_t) modep & 0x3fffffffffffffffUL; - else - mode = *modep; - - femode_t fpsr; - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - fpsr = (fpsr & FPSR_STATUS_ALL) | (mode & ~FPSR_STATUS_ALL); - __asm__ __volatile__ ("mov.m ar.fpsr=%0;;" :: "r" (fpsr)); - - return 0; -} diff --git a/sysdeps/ia64/fpu/fesetround.c b/sysdeps/ia64/fpu/fesetround.c deleted file mode 100644 index c77b3c9958..0000000000 --- a/sysdeps/ia64/fpu/fesetround.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Christian Boissat , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fesetround (int round) -{ - fenv_t fpsr; - - if (round & ~3) - return 1; - - /* Get the current state. */ - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - - /* Set the relevant bits. */ - fpsr = (fpsr & ~(3UL << 10)) | ((fenv_t) round << 10); - - /* Put the new state in effect. */ - __asm__ __volatile__ ("mov.m ar.fpsr=%0" :: "r" (fpsr) : "memory"); - - return 0; -} -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/ia64/fpu/feupdateenv.c b/sysdeps/ia64/fpu/feupdateenv.c deleted file mode 100644 index 62f309b87c..0000000000 --- a/sysdeps/ia64/fpu/feupdateenv.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Christian Boissat , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__feupdateenv (const fenv_t *envp) -{ - fenv_t fpsr; - - - /* Get the current exception state. */ - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - - /* Install new environment. */ - __fesetenv (envp); - - /* Raise the saved exceptions. */ - __feraiseexcept ((int) (fpsr >> 13) & FE_ALL_EXCEPT); - - /* Success. */ - return 0; -} -libm_hidden_def (__feupdateenv) -weak_alias (__feupdateenv, feupdateenv) -libm_hidden_weak (feupdateenv) diff --git a/sysdeps/ia64/fpu/fgetexcptflg.c b/sysdeps/ia64/fpu/fgetexcptflg.c deleted file mode 100644 index 82a3a0e765..0000000000 --- a/sysdeps/ia64/fpu/fgetexcptflg.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Christian Boissat , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fegetexceptflag (fexcept_t *flagp, int excepts) -{ - fenv_t fpsr; - - /* Get the current exceptions. */ - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - - *flagp = (fexcept_t) ((fpsr >> 13) & excepts & FE_ALL_EXCEPT); - - /* Success. */ - return 0; -} diff --git a/sysdeps/ia64/fpu/fraiseexcpt.c b/sysdeps/ia64/fpu/fraiseexcpt.c deleted file mode 100644 index b2cb5348e9..0000000000 --- a/sysdeps/ia64/fpu/fraiseexcpt.c +++ /dev/null @@ -1,80 +0,0 @@ -/* Raise given exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jes Sorensen , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -int -__feraiseexcept (int excepts) -{ - double tmp; - double dummy; - - /* Raise exceptions represented by EXPECTS. But we must raise only - one signal at a time. It is important the if the overflow/underflow - exception and the inexact exception are given at the same time, - the overflow/underflow exception precedes the inexact exception. */ - - /* We do these bits in assembly to be certain GCC doesn't optimize - away something important. */ - - /* First: invalid exception. */ - if (FE_INVALID & excepts) - { - /* One example of an invalid operation is 0 * Infinity. */ - tmp = 0; - __asm__ __volatile__ ("frcpa.s0 %0,p1=f0,f0" : "=f" (tmp) : : "p1" ); - } - - /* Next: division by zero. */ - if (FE_DIVBYZERO & excepts) - __asm__ __volatile__ ("frcpa.s0 %0,p1=f1,f0" : "=f" (tmp) : : "p1" ); - - /* Next: overflow. */ - if (FE_OVERFLOW & excepts) - { - dummy = DBL_MAX; - - __asm__ __volatile__ ("fadd.d.s0 %0=%1,%1" : "=f" (dummy) : "0" (dummy)); - } - - /* Next: underflow. */ - if (FE_UNDERFLOW & excepts) - { - dummy = DBL_MIN; - - __asm__ __volatile__ ("fnma.d.s0 %0=%1,%1,f0" : "=f" (tmp) : "f" (dummy)); - } - - /* Last: inexact. */ - if (FE_INEXACT & excepts) - { - dummy = DBL_MAX; - __asm__ __volatile__ ("fsub.d.s0 %0=%1,f1" : "=f" (dummy) : "0" (dummy)); - } - - /* Success. */ - return 0; -} -libm_hidden_def (__feraiseexcept) -weak_alias (__feraiseexcept, feraiseexcept) -libm_hidden_weak (feraiseexcept) diff --git a/sysdeps/ia64/fpu/fsetexcptflg.c b/sysdeps/ia64/fpu/fsetexcptflg.c deleted file mode 100644 index 7ab4ec2576..0000000000 --- a/sysdeps/ia64/fpu/fsetexcptflg.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Christian Boissat , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - fenv_t fpsr; - - /* Get the current exception state. */ - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - - fpsr &= ~(((fenv_t) excepts & FE_ALL_EXCEPT) << 13); - - /* Set all the bits that were called for. */ - fpsr |= ((*flagp & excepts & FE_ALL_EXCEPT) << 13); - - /* And store it back. */ - __asm__ __volatile__ ("mov.m ar.fpsr=%0" :: "r" (fpsr) : "memory"); - - /* Success. */ - return 0; -} diff --git a/sysdeps/ia64/fpu/ftestexcept.c b/sysdeps/ia64/fpu/ftestexcept.c deleted file mode 100644 index b732ec64c0..0000000000 --- a/sysdeps/ia64/fpu/ftestexcept.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Christian Boissat , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fetestexcept (int excepts) -{ - fenv_t fpsr; - - /* Get current exceptions. */ - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - - return (fpsr >> 13) & excepts & FE_ALL_EXCEPT; -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/ia64/fpu/gen_import_file_list b/sysdeps/ia64/fpu/gen_import_file_list deleted file mode 100644 index b8bd6a54f3..0000000000 --- a/sysdeps/ia64/fpu/gen_import_file_list +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/sh - -libm_dir=$1 - -import() { - # $1 = name - # $2 = source file-name - # $3 = destination file-name - echo "$1 $libm_dir/$2 $3" -} - -import_c() { - # $1 = name - # $2 = source file-name - # $3 = destination file-name - echo "$1 $libm_dir/$2 $3" -} - -dummy_files=" -libm_cpu_defs.h -libm_error_codes.h -libm_support.h -libm_error.c -" - -for f in $dummy_files -do - import_c DUMMY $f $f -done - -import_c scalblnf scalblnf.c s_scalblnf.c - -for f in acos acosh asin atanh cosh exp2 exp10 fmod log2 pow remainder \ - scalb sinh sqrt; do - for t in "" f l; do - import $f$t $f$t.s e_$f$t.S - done -done - -for f in atan2 exp; do - for t in "" f; do - import $f$t $f$t.s e_$f$t.S - done -done -import "atan" atan.s s_atan.S -import "atanf" atanf.s s_atanf.S -import "atan(2)?l" atanl.s s_atanl.S -import "exp(m1)?l" expl_m1.s s_expm1l.S - -for t in "" f l; do - import "log(10)?$t" log$t.s e_log$t.S - import tgamma$t tgamma$t.s w_tgamma$t.S - import "(hypot|cabs)$t" hypot$t.s e_hypot$t.S -done - -for f in asinh cbrt ceil erf erfc fabs floor \ - ilogb log1p logb modf nearbyint nextafter nexttoward \ - rint round significand fdim fma fmax tanh trunc; do - for t in "" f l; do - import $f$t $f$t.s s_$f$t.S - done -done - -for t in "" f l; do - import "(tan|cot)$t" tancot$t.s s_tan$t.S -done - -for t in "" f l; do - import "(sin|cos)$t" sincos$t.s s_cos$t.S - import_c frexp$t frexp$t.c s_frexp$t.c - import_c ldexp$t ldexp$t.c s_ldexp$t.c - import_c scalbn$t scalbn$t.c s_scalbn$t.c -done - -import expm1 exp_m1.s s_expm1.S -import expm1f expf_m1.s s_expm1f.S - -for f in frexp frexpf frexpl reduce; do - import __libm_$f libm_$f.s libm_$f.S -done - -for t in "" f l; do - import __libm_ldexp$t libm_ldexp$t.s s_libm_ldexp$t.S - import "(__libm_)?(sincos|cis)$t" libm_sincos$t.s libm_sincos$t.S - import __libm_lgamma$t libm_lgamma$t.s libm_lgamma$t.S - import __libm_scalbn$t libm_scalbn$t.s s_libm_scalbn$t.S -done -import __libm_scalblnf libm_scalblnf.s libm_scalblnf.S -import "__libm_(sin|cos|sincos)_large" libm_sincos_large.s \ - libm_sincos_large.S diff --git a/sysdeps/ia64/fpu/get-rounding-mode.h b/sysdeps/ia64/fpu/get-rounding-mode.h deleted file mode 100644 index 81a1de3c60..0000000000 --- a/sysdeps/ia64/fpu/get-rounding-mode.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Return current rounding direction within libc. IA64 version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Christian Boissat , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef IA64_GET_ROUNDING_MODE_H -#define IA64_GET_ROUNDING_MODE_H 1 - -#include - -/* Return the floating-point rounding mode. */ - -static inline int -get_rounding_mode (void) -{ - fenv_t fpsr; - - __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); - - return (fpsr >> 10) & 3; -} - -#endif /* get-rounding-mode.h */ diff --git a/sysdeps/ia64/fpu/halfulp.c b/sysdeps/ia64/fpu/halfulp.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/halfulp.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/import_check b/sysdeps/ia64/fpu/import_check deleted file mode 100644 index 21176f578d..0000000000 --- a/sysdeps/ia64/fpu/import_check +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/sh - -objdir="$1" - -num_errors=0 - -check_syms() { - global_count=0 - entry_count=0 - while read value type name; do - if [ $value = "U" ]; then - name=$type - # undefined symbols must start with double-underscore - if [ $(expr $name : '\(..\)') != "__" ]; then - echo -e "$(basename $file):\tError: undefined reference $name doesn't start with \"__\"." - num_errors=$(($num_errors + 1)) - fi - continue - fi - - case "$type" in - W) - entry_count=$(($entry_count + 1)) - ;; - *) - entry_count=$(($entry_count + 1)) - if [ "$(expr $name : '\(..\)')" != "__" ]; then - global_count=$(($global_count + 1)) - fi - ;; - esac - done - if [ $entry_count -gt 1 -a $global_count -gt 0 ]; then - echo -e "$(basename $file):\tError: detected $global_count strong " \ - "global and $entry_count entry-points." - num_errors=$(($num_errors + 1)) - fi -} - -check_file() { - file=$1 - size=$(readelf -S $file | \ - (sz=0; while read line; do - if echo $line | fgrep -q " .rodata"; then - read sz rest - break - fi - done; - printf "%d" 0x$sz)) - - summands=$(readelf -s $file | fgrep " OBJECT " | tr -s ' ' | - cut -f4 -d' ' | sed 's,$,+,')0 - sum=$(($summands)) - if [ $sum != $size ]; then - echo -e "$(basename $file):\tError: sum of objects=$sum bytes, .rodata size=$size bytes" - num_errors=$(($num_errors + 1)) - fi - - tmp=$(tempfile -p syms) - nm -g $file > $tmp - check_syms < $tmp -} - -do_checks() { - echo "Note: 1 error expected in w_tgammal.o due to 64-byte alignment-padding." - while read func_pattern src_file dst_file; do - if [ "$(expr $dst_file : '.*\(S\)$')" = "S" ]; then - objfile=$(expr $dst_file : '\(.*\)[.]S$') - check_file $objdir/$objfile.o - fi - done -} - -do_checks < import_file_list - -if [ $num_errors -gt 0 ]; then - echo "FAILURE: Detected $num_errors error(s)." - exit 1 -fi -echo SUCCESS -exit 0 diff --git a/sysdeps/ia64/fpu/import_diffs b/sysdeps/ia64/fpu/import_diffs deleted file mode 100644 index 147280d5fd..0000000000 --- a/sysdeps/ia64/fpu/import_diffs +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -do_diffs() { - while read func_pattern src_file dst_file; do - diff -up $src_file $dst_file - done -} -do_diffs < import_file_list diff --git a/sysdeps/ia64/fpu/import_file.awk b/sysdeps/ia64/fpu/import_file.awk deleted file mode 100644 index 9139faac12..0000000000 --- a/sysdeps/ia64/fpu/import_file.awk +++ /dev/null @@ -1,150 +0,0 @@ -BEGIN { - getline; - while (!match($0, "^/[/*] static char cvs_id")) { - print; - getline; - } - getline; - while (!match($0, "^// WARRANTY DISCLAIMER")) { - print; - if (!getline) { - break; - } - } - if (getline) - { - printf \ -"// Redistribution and use in source and binary forms, with or without\n" \ -"// modification, are permitted provided that the following conditions are\n" \ -"// met:\n" \ -"//\n" \ -"// * Redistributions of source code must retain the above copyright\n" \ -"// notice, this list of conditions and the following disclaimer.\n" \ -"//\n" \ -"// * Redistributions in binary form must reproduce the above copyright\n" \ -"// notice, this list of conditions and the following disclaimer in the\n" \ -"// documentation and/or other materials provided with the distribution.\n" \ -"//\n" \ -"// * The name of Intel Corporation may not be used to endorse or promote\n" \ -"// products derived from this software without specific prior written\n" \ -"// permission.\n\n"; - if (LICENSE_ONLY == "y") { - do { - print; - } while (getline); - } - } -} - -/^[.]data/ { - print "RODATA"; - next; -} -/^([a-zA-Z_0-9]*_(tb[l0-9]|Tt|[tT]able|data|low|coeffs|constants|CONSTANTS|reduction|Stirling)(_?([1-9cdimpqstPQT]+|tail))?|(Constants|Poly|coeff)_.+|(double_sin_?cos|double_cis)[fl]?_.+):/ { - table_name=substr($1,1,length($1)-1); - printf "LOCAL_OBJECT_START(%s)\n", table_name; - getline; - while (!match($0, "^[ \t]*data")) { - print; - getline; - } - while (match($0, "(//|^[ \t]*data)")) { - print; - getline; - } - printf "LOCAL_OBJECT_END(%s)\n\n", table_name; - next; -} -/^[.]proc[ \t]+__libm_(error_region|callout)/ { - printf "LOCAL_LIBM_ENTRY(%s)\n", $2; - getline; - next; -} -/^[.]endp[ \t]+__libm_(error_region|callout)/ { - printf "LOCAL_LIBM_END(%s)\n", $2; - next; -} -/^[.]global/ { - split($2, part, "#"); - name=part[1]; - if (match(name, "^"FUNC"$")) { - next; - } -} -/^[.]proc/ { - split($2, part, "#"); - name=part[1]; - if (match(name, "^"FUNC"$")) { - local_funcs=("^(" \ - "cis|cisf|cisl" \ - "|cabs|cabsf|cabsl" \ - "|cot|cotf|cotl" \ - ")$"); - ieee754_funcs=("^(" \ - "atan2|atan2f|atan2l|atanl" \ - "|cos|cosf|cosl" \ - "|cosh|coshf|coshl" \ - "|exp|expf|expl" \ - "|exp10|exp10f|exp10l" \ - "|expm1|expm1f|expm1l" \ - "|fmod|fmodf|fmodl" \ - "|hypot|hypotf|hypotl" \ - "|fabs|fabsf|fabsl" \ - "|floor|floorf|floorl" \ - "|log1p|log1pf|log1pl" \ - "|log|log10|log10f|log10l|log2l|logf|logl" \ - "|remainder|remainderf|remainderl|" \ - "|rint|rintf|rintl|" \ - "|scalb|scalbf|scalbl" \ - "|sin|sinf|sinl" \ - "|sincos|sincosf|sincosl" \ - "|sinh|sinhf|sinhl" \ - "|sqrt|sqrtf|sqrtl" \ - "|tan|tanf|tanl" \ - ")$"); - if (match(name, ieee754_funcs)) { - type="GLOBAL_IEEE754"; - } else if (match (name, local_funcs)) { - type="LOCAL_LIBM"; - } else { - type="GLOBAL_LIBM"; - } - printf "%s_ENTRY(%s)\n", type, name; - getline; - while (!match($0, "^"name"#?:")) { - getline; - } - getline; - while (!match($0, "^.endp")) { - print - getline; - } - printf "%s_END(%s)\n", type, name; - if (match(name, "^exp10[fl]?$")) { - t=substr(name,6) - printf "weak_alias (exp10%s, pow10%s)\n", t, t - } - next; - } -} -/^[a-zA-Z_]+:/ { - split($1, part, ":"); - name=part[1]; - if (match(name, "^"FUNC"$")) { - printf "GLOBAL_LIBM_ENTRY(%s)\n", name; - getline; - while (!match($0, "^"name"#?:")) { - getline; - } - getline; - while (!match($0, "^.endp")) { - print - getline; - } - getline; - printf "GLOBAL_LIBM_END(%s)\n", name; - next; - } -} - -{ print } diff --git a/sysdeps/ia64/fpu/import_intel_libm b/sysdeps/ia64/fpu/import_intel_libm deleted file mode 100644 index 1aaa646a93..0000000000 --- a/sysdeps/ia64/fpu/import_intel_libm +++ /dev/null @@ -1,106 +0,0 @@ -#!/bin/sh - -# Notes: - -# We don't import copysign finite, fpclassify, isinf, isnan, and signbit -# since our own versions are nicer and just as correct and fast (except -# perhaps that they don't handle non-finite arguments well?). -# -# Also, leave out cabs for now since it doesn't seem overridable in -# glibc. - -libm_dir=$1 - -import_s() { - # $1 = name - # $2 = source file-name - # $3 = destination file-name - echo "Importing $1 from $2 -> $3" - rm -f $3 - awk -f import_file.awk FUNC=$1 $2 > $3 -} - -import_c() { - # $1 = name - # $2 = source file-name - # $3 = destination file-name - echo "Importing $1 from $2 -> $3" - rm -f $3 - awk -f import_file.awk LICENSE_ONLY=y $2 > $3 -} - -do_imports() { - while read func_pattern src_file dst_file; do - case $src_file in - *.[ch]) - import_c "$func_pattern" "$src_file" "$dst_file" - ;; - *) - import_s "$func_pattern" "$src_file" "$dst_file" - ;; - esac - done -} - -./gen_import_file_list $libm_dir > import_file_list - -do_imports < import_file_list - -emptyfiles=" -e_gamma_r.c -e_gammaf_r.c -e_gammal_r.c -s_sincos.c -s_sincosf.c -s_sincosl.c -t_exp.c -w_acosh.c -w_acoshf.c -w_acoshl.c -w_atanh.c -w_atanhf.c -w_atanhl.c -w_exp10.c -w_exp10f.c -w_exp10l.c -w_exp2.c -w_exp2f.c -w_exp2l.c -w_expl.c -w_lgamma_r.c -w_lgammaf_r.c -w_lgammal_r.c -w_log2.c -w_log2f.c -w_log2l.c -w_sinh.c -w_sinhf.c -w_sinhl.c -" -for f in $emptyfiles -do - rm -f $f - echo "/* Not needed. */" > $f -done - -removedfiles=" -libm_atan2_reg.S -s_ldexp.S -s_ldexpf.S -s_ldexpl.S -s_scalbn.S -s_scalbnf.S -s_scalbnl.S -" - -rm -f $removedfiles - -for f in lgammaf_r.c lgammal_r.c lgamma_r.c -do - import_c $f $libm_dir/$f e_$f -done - -for f in lgamma.c lgammaf.c lgammal.c -do - import_c $f $libm_dir/$f w_$f -done diff --git a/sysdeps/ia64/fpu/k_rem_pio2.c b/sysdeps/ia64/fpu/k_rem_pio2.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/k_rem_pio2.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/k_rem_pio2f.c b/sysdeps/ia64/fpu/k_rem_pio2f.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/k_rem_pio2f.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/lgamma-compat.h b/sysdeps/ia64/fpu/lgamma-compat.h deleted file mode 100644 index 57312784be..0000000000 --- a/sysdeps/ia64/fpu/lgamma-compat.h +++ /dev/null @@ -1,42 +0,0 @@ -/* ABI compatibility for lgamma functions. ia64 version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef IA64_LGAMMA_COMPAT_H -#define IA64_LGAMMA_COMPAT_H 1 - -#include - -#undef LGFUNC -#if USE_AS_COMPAT -# define LGFUNC(FUNC) __ ## FUNC ## _compat -#else -# define LGFUNC(FUNC) __ieee754_ ## FUNC -#endif - -#undef CALL_LGAMMA -#define CALL_LGAMMA(TYPE, FUNC, ARG) \ - ({ \ - TYPE lgamma_tmp; \ - extern int __signgam, signgam; \ - lgamma_tmp = FUNC ((ARG), &__signgam, sizeof (__signgam)); \ - if (USE_AS_COMPAT) \ - signgam = __signgam; \ - lgamma_tmp; \ - }) - -#endif /* lgamma-compat.h. */ diff --git a/sysdeps/ia64/fpu/libc_libm_error.c b/sysdeps/ia64/fpu/libc_libm_error.c deleted file mode 100644 index 5a34878d71..0000000000 --- a/sysdeps/ia64/fpu/libc_libm_error.c +++ /dev/null @@ -1,14 +0,0 @@ -/* Error handling in libm-style for libc. */ - -#include - -#include "libm_support.h" - - -void -__libm_error_support (void *arg1, void *arg2, void *retval, - error_types input_tag) -{ - __set_errno (ERANGE); -} -libc_hidden_def (__libm_error_support) diff --git a/sysdeps/ia64/fpu/libm-symbols.h b/sysdeps/ia64/fpu/libm-symbols.h deleted file mode 100644 index 505131b813..0000000000 --- a/sysdeps/ia64/fpu/libm-symbols.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef _ISOMAC -# include -# undef ret /* get rid of the stupid "ret" macro; it breaks br.ret */ - -/* Support for compatible assembler handling. */ - -# define ASM_SIZE_DIRECTIVE(name) .size name,.-name - -# define LOCAL_LIBM_ENTRY(name) \ - .proc name; \ - name: - -# define LOCAL_LIBM_END(name) \ - .endp name; \ - ASM_SIZE_DIRECTIVE(name) - - -# define RODATA .rodata -# define LOCAL_OBJECT_START(name) \ - name:; \ - .type name, @object -# define LOCAL_OBJECT_END(name) \ - ASM_SIZE_DIRECTIVE(name) - -# define GLOBAL_LIBM_ENTRY(name) \ - LOCAL_LIBM_ENTRY(name); \ - .global name -# define GLOBAL_LIBM_END(name) LOCAL_LIBM_END(name) - -# define INTERNAL_LIBM_ENTRY(name) \ - GLOBAL_LIBM_ENTRY(__libm_##name); \ - .global __libm_##name -# define INTERNAL_LIBM_END(name) GLOBAL_LIBM_END(__libm_##name) - -# define WEAK_LIBM_ENTRY(name) \ - .align 32; \ - LOCAL_LIBM_ENTRY(__##name); \ - .global __##name; \ - __##name: -# define WEAK_LIBM_END(name) \ - weak_alias (__##name, name); \ - .hidden __##name; \ - LOCAL_LIBM_END(__##name); \ - ASM_SIZE_DIRECTIVE(__##name); \ - .type __##name, @function - -# define GLOBAL_IEEE754_ENTRY(name) \ - WEAK_LIBM_ENTRY(name); \ - .global __ieee754_##name; \ - .hidden __ieee754_##name; \ - __ieee754_##name: -# define GLOBAL_IEEE754_END(name) \ - WEAK_LIBM_END(name); \ - ASM_SIZE_DIRECTIVE(__ieee754_##name); \ - .type __ieee754_##name, @function - -# if defined ASSEMBLER && IS_IN (libc) -# define __libm_error_support HIDDEN_JUMPTARGET(__libm_error_support) -# endif -#endif diff --git a/sysdeps/ia64/fpu/libm-test-ulps b/sysdeps/ia64/fpu/libm-test-ulps deleted file mode 100644 index 2776ba7fae..0000000000 --- a/sysdeps/ia64/fpu/libm-test-ulps +++ /dev/null @@ -1,508 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "asin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "casin": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casinh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "clog": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "clog10": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos": -double: 1 -idouble: 1 - -Function: "cos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos_upward": -ildouble: 1 -ldouble: 1 - -Function: Real part of "cpow": -double: 2 -float: 5 -idouble: 2 -ifloat: 5 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csin": -float: 1 -ifloat: 1 - -Function: Real part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csqrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csqrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctan_downward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ctan_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctan_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ctan_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctan_upward": -double: 6 -float: 2 -idouble: 6 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: Real part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctanh_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ctanh_downward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctanh_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctanh_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ctanh_upward": -double: 6 -float: 2 -idouble: 6 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "expm1": -ildouble: 1 -ldouble: 1 - -Function: "expm1_downward": -ildouble: 1 -ldouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "pow_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "pow_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "pow_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sin": -double: 1 -idouble: 1 - -Function: "sin_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "sin_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "sin_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "sincos": -double: 1 -idouble: 1 - -Function: "tan_downward": -ildouble: 1 -ldouble: 1 - -Function: "tan_towardzero": -ildouble: 1 -ldouble: 1 - -Function: "tan_upward": -ildouble: 1 -ldouble: 1 - -Function: "tgamma": -ildouble: 1 -ldouble: 1 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "yn": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -# end of automatic generation diff --git a/sysdeps/ia64/fpu/libm-test-ulps-name b/sysdeps/ia64/fpu/libm-test-ulps-name deleted file mode 100644 index 54a0dfffea..0000000000 --- a/sysdeps/ia64/fpu/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -IA64 diff --git a/sysdeps/ia64/fpu/libm_cpu_defs.h b/sysdeps/ia64/fpu/libm_cpu_defs.h deleted file mode 100644 index 810c683ee8..0000000000 --- a/sysdeps/ia64/fpu/libm_cpu_defs.h +++ /dev/null @@ -1,156 +0,0 @@ -/* file: libm_cpu_defs.h */ - - -// Copyright (c) 2000 - 2004, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// - -#ifndef __LIBM_CPU_DEFS__H_INCLUDED__ -#define __LIBM_CPU_DEFS__H_INCLUDED__ - -void __libm_sincos_pi4(double,double*,double*,int); -void __libm_y0y1(double , double *, double *); -void __libm_j0j1(double , double *, double *); -double __libm_j0(double); -double __libm_j1(double); -double __libm_jn(int,double); -double __libm_y0(double); -double __libm_y1(double); -double __libm_yn(int,double); - -double __libm_copysign (double, double); -float __libm_copysignf (float, float); -long double __libm_copysignl (long double, long double); - -extern double sqrt(double); -extern double fabs(double); -extern double log(double); -extern double log1p(double); -extern double sqrt(double); -extern double sin(double); -extern double exp(double); -extern double modf(double, double *); -extern double asinh(double); -extern double acosh(double); -extern double atanh(double); -extern double tanh(double); -extern double erf(double); -extern double erfc(double); -extern double j0(double); -extern double j1(double); -extern double jn(int, double); -extern double y0(double); -extern double y1(double); -extern double yn(int, double); - -extern float fabsf(float); -extern float asinhf(float); -extern float acoshf(float); -extern float atanhf(float); -extern float tanhf(float); -extern float erff(float); -extern float erfcf(float); -extern float j0f(float); -extern float j1f(float); -extern float jnf(int, float); -extern float y0f(float); -extern float y1f(float); -extern float ynf(int, float); - -extern long double log1pl(long double); -extern long double logl(long double); -extern long double sqrtl(long double); -extern long double expl(long double); -extern long double fabsl(long double); - -#if !(defined(SIZE_LONG_INT_32) || defined(SIZE_LONG_INT_64)) -#error long int size not established; define SIZE_LONG_INT_32 or SIZE_LONG_INT_64 -#endif - -#if (defined(SIZE_LONG_INT_32) && defined(SIZE_LONG_INT_64)) -#error multiple long int size definitions; define SIZE_LONG_INT_32 or SIZE_LONG_INT_64 -#endif - -#if !(defined(SIZE_LONG_LONG_INT_32) || defined(SIZE_LONG_LONG_INT_64)) -#error long long int size not established; define SIZE_LONG_LONG_INT_32 or SIZE_LONG_LONG_INT_64 -#endif - -#if (defined(SIZE_LONG_LONG_INT_32) && defined(SIZE_LONG_LONG_INT_64)) -#error multiple long long int size definitions; define SIZE_LONG_LONG_INT_32 or SIZE_LONG_LONG_INT_64 -#endif - -#define HI_SIGNIFICAND_LESS(X, HI) ((X)->hi_significand < 0x ## HI) -#define f64abs(x) ((x) < 0.0 ? -(x) : (x)) - -#define FP80_DECLARE() -#define FP80_SET() -#define FP80_RESET() - -#ifdef _LIBC -# include -#else - -static const unsigned INF[] = { - DOUBLE_HEX(7ff00000, 00000000), - DOUBLE_HEX(fff00000, 00000000) -}; - -static const double _zeroo = 0.0; -static const double _bigg = 1.0e300; -static const double _ponee = 1.0; -static const double _nonee = -1.0; - -#define INVALID (_zeroo * *((double*)&INF[0])) -#define PINF *((double*)&INF[0]) -#define NINF -PINF -#define PINF_DZ (_ponee/_zeroo) -#define X_TLOSS 1.41484755040568800000e+16 -#endif - -/* Set these appropriately to make thread Safe */ -#define ERRNO_RANGE errno = ERANGE -#define ERRNO_DOMAIN errno = EDOM - -#ifndef _LIBC -#if defined(__ICC) || defined(__ICL) || defined(__ECC) || defined(__ECL) -# pragma warning( disable : 68 ) /* #68: integer conversion resulted in a change of sign */ -# pragma warning( disable : 186 ) /* #186: pointless comparison of unsigned integer with zero */ -# pragma warning( disable : 1572 ) /* #1572: floating-point equality and inequality comparisons are unreliable */ -#endif -#endif - -#endif /*__LIBM_CPU_DEFS__H_INCLUDED__*/ diff --git a/sysdeps/ia64/fpu/libm_error.c b/sysdeps/ia64/fpu/libm_error.c deleted file mode 100644 index a9307dd4b5..0000000000 --- a/sysdeps/ia64/fpu/libm_error.c +++ /dev/null @@ -1,4294 +0,0 @@ -/* file: libm_error.c */ - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 2/02/00: Initial version -// 3/22/00: Updated to support flexible and dynamic error handling. -// 8/16/00: Changed all matherr function-calls to use the pmatherr -// function-pointers. -// 10/03/00: Corrected a scalb type. -// 11/28/00: Changed INPUT_XL to INPUT_XD for scalb_underflow case. -// 12/07/00: Added code to make scalbn error support equivalent to ldexp. -// 2/07/01: Added __declspec(align(16)) to long double constants to correct -// alignment problem. -// 4/23/01: Added code for remquo -// 6/07/01: Added code for fdim, lrint, lround, llrint, llround -// Deleted code for remquo -// 8/15/01: Added code for scalbln, nexttoward -// 12/10/01: Added code for erfc -// 12/27/01: Added code for degree argument functions -// 01/02/02: Added code for tand, cotd -// 01/15/02: Corrected SVID/XOPEN code for log1p, pow, and acosh -// 01/25/02: Corrected ISOC for lgamma and gamma to return EDOM for neg ints -// 01/28/02: Corrected SVID/XOPEN stderr message for log2 -// 05/20/02: Added code for cot -// 07/01/02: Added code for sinhcosh -// 10/04/02: Underflow detection in ISOC path redefined to -// be zero rather than tiny and inexact -// 12/06/02: Added code for annuity and compound -// 01/30/03: Corrected test for underflow in ISOC path to not set denormal -// 04/10/03: Corrected ISOC branch for gamma/lgamma to return ERANGE for neg ints. -// Added code for tgamma -// 04/11/03: Corrected POSIX/SVID/XOPEN branches for gamma/lgamma -// to return EDOM for neg ints. -// 09/08/03: Corrected XOPEN/SVID result for pow overflow with neg x, pos y. -// 10/14/03: Added ILP32 ifdef -// 12/12/03: Corrected XOPEN/SVID results for powf_zero_to_negative, -// powl_neg_to_non_integer, atan2f_zero, atan2df_zero, -// acoshf_lt_one, acosh_lt_one. -// 12/07/04: Cast name strings as char *. -// 12/08/04: Corrected POSIX behavior for atan2_zero, acos_gt_one, asin_gt_one, -// log_negative, log10_negative, log1p_negative, and log2_negative. -// Added SVID and XOPEN case log2l_zero. -// 12/13/04: Corrected POSIX behavior for exp2_overflow, exp2_underflow, -// exp10_overflow, exp10_underflow. Added ISOC to set errno for -// exp10_underflow. -// 12/14/04: Corrected POSIX behavior for nextafter_overflow, -// nextafter_underflow, nexttoward_overflow, nexttoward_underflow. -// Added ISOC to set errno for nextafter and nexttoward underflow. -// 12/15/04: Corrected POSIX behavior for exp, exp2, and exp10 underflow. -// 03/31/05: Added missing ALIGNIT statement to 6 float constants. - -#include -#include -#include -#include "libm_support.h" - -#ifdef _LIBC -# define pmatherr matherr -# define pmatherrf matherrf -# define pmatherrl matherrl -#else -_LIB_VERSION_TYPE -#if defined( __POSIX__ ) -_LIB_VERSIONIMF = _POSIX_; -#elif defined( __XOPEN__ ) -_LIB_VERSIONIMF = _XOPEN_; -#elif defined( __SVID__ ) -_LIB_VERSIONIMF = _SVID_; -#elif defined( __IEEE__ ) -_LIB_VERSIONIMF = _IEEE_; -#else -_LIB_VERSIONIMF = _ISOC_; -#endif - -/************************************************************/ -/* matherrX function pointers and setusermatherrX functions */ -/************************************************************/ -int (*pmatherrf)(struct exceptionf*) = MATHERR_F; -int (*pmatherr)(struct EXC_DECL_D*) = MATHERR_D; -int (*pmatherrl)(struct exceptionl*) = matherrl; - -void __libm_setusermatherrf( int(*user_merrf)(struct exceptionf*) ) -{ pmatherrf = ( (user_merrf==NULL)? (MATHERR_F) : (user_merrf) ); } - -void __libm_setusermatherr( int(*user_merr)(struct EXC_DECL_D*) ) -{ pmatherr = ( (user_merr==NULL)? (MATHERR_D) : (user_merr) ); } - -void __libm_setusermatherrl( int(*user_merrl)(struct exceptionl*) ) -{ pmatherrl = ( (user_merrl==NULL)? (matherrl) : (user_merrl) ); } - -#endif /* !_LIBC */ - -/***********************************************/ -/* error-handling function, libm_error_support */ -/***********************************************/ -void __libm_error_support(void *arg1,void *arg2,void *retval,error_types input_tag) -{ - -# ifdef __cplusplus -struct __exception exc; -# else -struct exception exc; -# endif - -struct exceptionf excf; -struct exceptionl excl; - -# ifdef __GNUC__ -#define ALIGNIT __attribute__ ((__aligned__ (16))) -# elif defined opensource -#define ALIGNIT -# else -#define ALIGNIT __declspec(align(16)) -# endif - -# ifdef SIZE_LONG_INT_64 -#define __INT_64__ signed long -# else -# if ILP32 -#define __INT_64__ signed long long -# else -#define __INT_64__ __int64 -# endif -# endif - - -#define _DECL_NUM(type, prefix, var, bytes...) \ - ALIGNIT static const union { \ - const char _bytes[sizeof (type)]; \ - const type num; \ - } prefix ## var = { \ - ._bytes = bytes, \ - } - -#define DECL_FLOAT(var, bytes...) \ - _DECL_NUM (float, float_, var, ##bytes) - -DECL_FLOAT(inf, {0x00,0x00,0x80,0x7F}); -DECL_FLOAT(huge, {0xFF,0xFF,0x7F,0x7F}); -DECL_FLOAT(zero, {0x00,0x00,0x00,0x00}); -DECL_FLOAT(neg_inf, {0x00,0x00,0x80,0xFF}); -DECL_FLOAT(neg_huge, {0xFF,0xFF,0x7F,0xFF}); -DECL_FLOAT(neg_zero, {0x00,0x00,0x00,0x80}); - -#define DECL_DOUBLE(var, bytes...) \ - _DECL_NUM (double, double_, var, ##bytes) - -DECL_DOUBLE(inf, {0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7F}); -#ifndef _LIBC -DECL_DOUBLE(huge, {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0x7F}); -#endif -DECL_DOUBLE(zero, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}); -DECL_DOUBLE(neg_inf, {0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF}); -#ifndef _LIBC -DECL_DOUBLE(neg_huge, {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF}); -#endif -DECL_DOUBLE(neg_zero, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80}); - -#define DECL_LONG_DOUBLE(var, bytes...) \ - _DECL_NUM (long double, long_double_, var, ##bytes) - -DECL_LONG_DOUBLE(inf, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00}); -#ifndef _LIBC -DECL_LONG_DOUBLE(huge, {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00}); -#endif -DECL_LONG_DOUBLE(zero, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}); -DECL_LONG_DOUBLE(neg_inf, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00}); -#ifndef _LIBC -DECL_LONG_DOUBLE(neg_huge, {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00}); -#endif -DECL_LONG_DOUBLE(neg_zero, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00}); - - -#define RETVAL_HUGE_VALL *(long double *)retval = long_double_inf.num -#define RETVAL_NEG_HUGE_VALL *(long double *)retval = long_double_neg_inf.num -#define RETVAL_HUGEL *(long double *)retval = (long double)float_huge.num -#define RETVAL_NEG_HUGEL *(long double *)retval = (long double)float_neg_huge.num - -#define RETVAL_HUGE_VALD *(double *)retval = double_inf.num -#define RETVAL_NEG_HUGE_VALD *(double *)retval = double_neg_inf.num -#define RETVAL_HUGED *(double *)retval = (double)float_huge.num -#define RETVAL_NEG_HUGED *(double *)retval = (double)float_neg_huge.num - -#define RETVAL_HUGE_VALF *(float *)retval = float_inf.num -#define RETVAL_NEG_HUGE_VALF *(float *)retval = float_neg_inf.num -#define RETVAL_HUGEF *(float *)retval = float_huge.num -#define RETVAL_NEG_HUGEF *(float *)retval = float_neg_huge.num - -#define ZEROL_VALUE long_double_zero.num -#define ZEROD_VALUE double_zero.num -#define ZEROF_VALUE float_zero.num - -#define RETVAL_ZEROL *(long double *)retval = long_double_zero.num -#define RETVAL_ZEROD *(double *)retval = double_zero.num -#define RETVAL_ZEROF *(float *)retval = float_zero.num - -#define RETVAL_NEG_ZEROL *(long double *)retval = long_double_neg_zero.num -#define RETVAL_NEG_ZEROD *(double *)retval = double_neg_zero.num -#define RETVAL_NEG_ZEROF *(float *)retval = float_neg_zero.num - -#define RETVAL_ONEL *(long double *)retval = (long double) 1.0 -#define RETVAL_ONED *(double *)retval = 1.0 -#define RETVAL_ONEF *(float *)retval = 1.0f - -#define NOT_MATHERRL excl.arg1=*(long double *)arg1;excl.arg2=*(long double *)arg2;excl.retval=*(long double *)retval;if(!pmatherrl(&excl)) -#define NOT_MATHERRD exc.arg1=*(double *)arg1;exc.arg2=*(double *)arg2;exc.retval=*(double *)retval;if(!pmatherr(&exc)) -#define NOT_MATHERRF excf.arg1=*(float *)arg1;excf.arg2=*(float *)arg2;excf.retval=*(float *)retval;if(!pmatherrf(&excf)) - -#define ifSVID if(_LIB_VERSIONIMF==_SVID_) - -#define NAMEL excl.name -#define NAMED exc.name -#define NAMEF excf.name - -// -// These should work OK for MS because they are ints - -// leading underbars are not necessary. -// - -#define DOMAIN 1 -#define SING 2 -#define OVERFLOW 3 -#define UNDERFLOW 4 -#define TLOSS 5 -#define PLOSS 6 - -#define SINGL excl.type = SING -#define DOMAINL excl.type = DOMAIN -#define OVERFLOWL excl.type = OVERFLOW -#define UNDERFLOWL excl.type = UNDERFLOW -#define TLOSSL excl.type = TLOSS -#define SINGD exc.type = SING -#define DOMAIND exc.type = DOMAIN -#define OVERFLOWD exc.type = OVERFLOW -#define UNDERFLOWD exc.type = UNDERFLOW -#define TLOSSD exc.type = TLOSS -#define SINGF excf.type = SING -#define DOMAINF excf.type = DOMAIN -#define OVERFLOWF excf.type = OVERFLOW -#define UNDERFLOWF excf.type = UNDERFLOW -#define TLOSSF excf.type = TLOSS - -#define INPUT_XL (excl.arg1=*(long double*)arg1) -#define INPUT_XD (exc.arg1=*(double*)arg1) -#define INPUT_XF (excf.arg1=*(float*)arg1) -#define INPUT_YL (excl.arg2=*(long double*)arg2) -#define INPUT_YD (exc.arg2=*(double*)arg2) -#define INPUT_YF (excf.arg2=*(float*)arg2) -#define INPUT_RESL (*(long double *)retval) -#define INPUT_RESD (*(double *)retval) -#define INPUT_RESF (*(float *)retval) -#define INPUT_RESI64 (*(__INT_64__ *)retval) - -#define WRITEL_LOG_ZERO fputs("logl: SING error\n",stderr) -#define WRITED_LOG_ZERO fputs("log: SING error\n",stderr) -#define WRITEF_LOG_ZERO fputs("logf: SING error\n",stderr) -#define WRITEL_LOG_NEGATIVE fputs("logl: DOMAIN error\n",stderr) -#define WRITED_LOG_NEGATIVE fputs("log: DOMAIN error\n",stderr) -#define WRITEF_LOG_NEGATIVE fputs("logf: DOMAIN error\n",stderr) -#define WRITEL_Y0_ZERO fputs("y0l: DOMAIN error\n",stderr) -#define WRITED_Y0_ZERO fputs("y0: DOMAIN error\n",stderr) -#define WRITEF_Y0_ZERO fputs("y0f: DOMAIN error\n",stderr) -#define WRITEL_Y0_NEGATIVE fputs("y0l: DOMAIN error\n",stderr) -#define WRITED_Y0_NEGATIVE fputs("y0: DOMAIN error\n",stderr) -#define WRITEF_Y0_NEGATIVE fputs("y0f: DOMAIN error\n",stderr) -#define WRITEL_Y1_ZERO fputs("y1l: DOMAIN error\n",stderr) -#define WRITED_Y1_ZERO fputs("y1: DOMAIN error\n",stderr) -#define WRITEF_Y1_ZERO fputs("y1f: DOMAIN error\n",stderr) -#define WRITEL_Y1_NEGATIVE fputs("y1l: DOMAIN error\n",stderr) -#define WRITED_Y1_NEGATIVE fputs("y1: DOMAIN error\n",stderr) -#define WRITEF_Y1_NEGATIVE fputs("y1f: DOMAIN error\n",stderr) -#define WRITEL_YN_ZERO fputs("ynl: DOMAIN error\n",stderr) -#define WRITED_YN_ZERO fputs("yn: DOMAIN error\n",stderr) -#define WRITEF_YN_ZERO fputs("ynf: DOMAIN error\n",stderr) -#define WRITEL_YN_NEGATIVE fputs("ynl: DOMAIN error\n",stderr) -#define WRITED_YN_NEGATIVE fputs("yn: DOMAIN error\n",stderr) -#define WRITEF_YN_NEGATIVE fputs("ynf: DOMAIN error\n",stderr) -#define WRITEL_LOG1P_ZERO fputs("log1pl: SING error\n",stderr) -#define WRITED_LOG1P_ZERO fputs("log1p: SING error\n",stderr) -#define WRITEF_LOG1P_ZERO fputs("log1pf: SING error\n",stderr) -#define WRITEL_LOG1P_NEGATIVE fputs("log1pl: DOMAIN error\n",stderr) -#define WRITED_LOG1P_NEGATIVE fputs("log1p: DOMAIN error\n",stderr) -#define WRITEF_LOG1P_NEGATIVE fputs("log1pf: DOMAIN error\n",stderr) -#define WRITEL_LOG10_ZERO fputs("log10l: SING error\n",stderr) -#define WRITED_LOG10_ZERO fputs("log10: SING error\n",stderr) -#define WRITEF_LOG10_ZERO fputs("log10f: SING error\n",stderr) -#define WRITEL_LOG10_NEGATIVE fputs("log10l: DOMAIN error\n",stderr) -#define WRITED_LOG10_NEGATIVE fputs("log10: DOMAIN error\n",stderr) -#define WRITEF_LOG10_NEGATIVE fputs("log10f: DOMAIN error\n",stderr) -#define WRITEL_LOG2_ZERO fputs("log2l: SING error\n",stderr) -#define WRITED_LOG2_ZERO fputs("log2: SING error\n",stderr) -#define WRITEF_LOG2_ZERO fputs("log2f: SING error\n",stderr) -#define WRITEL_LOG2_NEGATIVE fputs("log2l: DOMAIN error\n",stderr) -#define WRITED_LOG2_NEGATIVE fputs("log2: DOMAIN error\n",stderr) -#define WRITEF_LOG2_NEGATIVE fputs("log2f: DOMAIN error\n",stderr) -#define WRITEL_POW_ZERO_TO_ZERO fputs("powl(0,0): DOMAIN error\n",stderr) -#define WRITED_POW_ZERO_TO_ZERO fputs("pow(0,0): DOMAIN error\n",stderr) -#define WRITEF_POW_ZERO_TO_ZERO fputs("powf(0,0): DOMAIN error\n",stderr) -#define WRITEL_POW_ZERO_TO_NEGATIVE fputs("powl(0,negative): DOMAIN error\n",stderr) -#define WRITED_POW_ZERO_TO_NEGATIVE fputs("pow(0,negative): DOMAIN error\n",stderr) -#define WRITEF_POW_ZERO_TO_NEGATIVE fputs("powf(0,negative): DOMAIN error\n",stderr) -#define WRITEL_POW_NEG_TO_NON_INTEGER fputs("powl(negative,non-integer): DOMAIN error\n",stderr) -#define WRITED_POW_NEG_TO_NON_INTEGER fputs("pow(negative,non-integer): DOMAIN error\n",stderr) -#define WRITEF_POW_NEG_TO_NON_INTEGER fputs("powf(negative,non-integer): DOMAIN error\n",stderr) -#define WRITEL_ATAN2_ZERO_BY_ZERO fputs("atan2l: DOMAIN error\n",stderr) -#define WRITED_ATAN2_ZERO_BY_ZERO fputs("atan2: DOMAIN error\n",stderr) -#define WRITEF_ATAN2_ZERO_BY_ZERO fputs("atan2f: DOMAIN error\n",stderr) -#define WRITEL_SQRT fputs("sqrtl: DOMAIN error\n",stderr) -#define WRITED_SQRT fputs("sqrt: DOMAIN error\n",stderr) -#define WRITEF_SQRT fputs("sqrtf: DOMAIN error\n",stderr) -#define WRITEL_FMOD fputs("fmodl: DOMAIN error\n",stderr) -#define WRITED_FMOD fputs("fmod: DOMAIN error\n",stderr) -#define WRITEF_FMOD fputs("fmodf: DOMAIN error\n",stderr) -#define WRITEL_REM fputs("remainderl: DOMAIN error\n",stderr) -#define WRITED_REM fputs("remainder: DOMAIN error\n",stderr) -#define WRITEF_REM fputs("remainderf: DOMAIN error\n",stderr) -#define WRITEL_ACOS fputs("acosl: DOMAIN error\n",stderr) -#define WRITED_ACOS fputs("acos: DOMAIN error\n",stderr) -#define WRITEF_ACOS fputs("acosf: DOMAIN error\n",stderr) -#define WRITEL_ASIN fputs("asinl: DOMAIN error\n",stderr) -#define WRITED_ASIN fputs("asin: DOMAIN error\n",stderr) -#define WRITEF_ASIN fputs("asinf: DOMAIN error\n",stderr) -#define WRITEL_ACOSH fputs("acoshl: DOMAIN error\n",stderr) -#define WRITED_ACOSH fputs("acosh: DOMAIN error\n",stderr) -#define WRITEF_ACOSH fputs("acoshf: DOMAIN error\n",stderr) -#define WRITEL_ATANH_GT_ONE fputs("atanhl: DOMAIN error\n",stderr) -#define WRITED_ATANH_GT_ONE fputs("atanh: DOMAIN error\n",stderr) -#define WRITEF_ATANH_GT_ONE fputs("atanhf: DOMAIN error\n",stderr) -#define WRITEL_ATANH_EQ_ONE fputs("atanhl: SING error\n",stderr) -#define WRITED_ATANH_EQ_ONE fputs("atanh: SING error\n",stderr) -#define WRITEF_ATANH_EQ_ONE fputs("atanhf: SING error\n",stderr) -#define WRITEL_LGAMMA_NEGATIVE fputs("lgammal: SING error\n",stderr) -#define WRITED_LGAMMA_NEGATIVE fputs("lgamma: SING error\n",stderr) -#define WRITEF_LGAMMA_NEGATIVE fputs("lgammaf: SING error\n",stderr) -#define WRITEL_GAMMA_NEGATIVE fputs("gammal: SING error\n",stderr) -#define WRITED_GAMMA_NEGATIVE fputs("gamma: SING error\n",stderr) -#define WRITEF_GAMMA_NEGATIVE fputs("gammaf: SING error\n",stderr) -#define WRITEL_TGAMMA_NEGATIVE fputs("tgammal: SING error\n",stderr) -#define WRITED_TGAMMA_NEGATIVE fputs("tgamma: SING error\n",stderr) -#define WRITEF_TGAMMA_NEGATIVE fputs("tgammaf: SING error\n",stderr) -#define WRITEL_J0_TLOSS fputs("j0l: TLOSS error\n",stderr) -#define WRITEL_Y0_TLOSS fputs("y0l: TLOSS error\n",stderr) -#define WRITEL_J1_TLOSS fputs("j1l: TLOSS error\n",stderr) -#define WRITEL_Y1_TLOSS fputs("y1l: TLOSS error\n",stderr) -#define WRITEL_JN_TLOSS fputs("jnl: TLOSS error\n",stderr) -#define WRITEL_YN_TLOSS fputs("ynl: TLOSS error\n",stderr) -#define WRITED_J0_TLOSS fputs("j0: TLOSS error\n",stderr) -#define WRITED_Y0_TLOSS fputs("y0: TLOSS error\n",stderr) -#define WRITED_J1_TLOSS fputs("j1: TLOSS error\n",stderr) -#define WRITED_Y1_TLOSS fputs("y1: TLOSS error\n",stderr) -#define WRITED_JN_TLOSS fputs("jn: TLOSS error\n",stderr) -#define WRITED_YN_TLOSS fputs("yn: TLOSS error\n",stderr) -#define WRITEF_J0_TLOSS fputs("j0f: TLOSS error\n",stderr) -#define WRITEF_Y0_TLOSS fputs("y0f: TLOSS error\n",stderr) -#define WRITEF_J1_TLOSS fputs("j1f: TLOSS error\n",stderr) -#define WRITEF_Y1_TLOSS fputs("y1f: TLOSS error\n",stderr) -#define WRITEF_JN_TLOSS fputs("jnf: TLOSS error\n",stderr) -#define WRITEF_YN_TLOSS fputs("ynf: TLOSS error\n",stderr) -#define WRITEL_ACOSD fputs("acosdl: DOMAIN error\n",stderr) -#define WRITED_ACOSD fputs("acosd: DOMAIN error\n",stderr) -#define WRITEF_ACOSD fputs("acosdf: DOMAIN error\n",stderr) -#define WRITEL_ASIND fputs("asindl: DOMAIN error\n",stderr) -#define WRITED_ASIND fputs("asind: DOMAIN error\n",stderr) -#define WRITEF_ASIND fputs("asindf: DOMAIN error\n",stderr) -#define WRITEL_ATAN2D_ZERO_BY_ZERO fputs("atan2dl: DOMAIN error\n",stderr) -#define WRITED_ATAN2D_ZERO_BY_ZERO fputs("atan2d: DOMAIN error\n",stderr) -#define WRITEF_ATAN2D_ZERO_BY_ZERO fputs("atan2df: DOMAIN error\n",stderr) - - -/***********************/ -/* IEEE Path */ -/***********************/ -if(_LIB_VERSIONIMF==_IEEE_) return; - -/***********************/ -/* C9X Path */ -/***********************/ -else if(_LIB_VERSIONIMF==_ISOC_) -{ - switch(input_tag) - { - case logl_zero: - case log_zero: - case logf_zero: - case log10l_zero: - case log10_zero: - case log10f_zero: - case log2l_zero: - case log2_zero: - case log2f_zero: - case log1pl_zero: - case log1p_zero: - case log1pf_zero: - case powl_overflow: - case pow_overflow: - case powf_overflow: - case expl_overflow: - case exp_overflow: - case expf_overflow: - case exp2l_overflow: - case exp2_overflow: - case exp2f_overflow: - case exp10l_overflow: - case exp10_overflow: - case exp10f_overflow: - case expm1l_overflow: - case expm1_overflow: - case expm1f_overflow: - case hypotl_overflow: - case hypot_overflow: - case hypotf_overflow: - case sinhl_overflow: - case sinh_overflow: - case sinhf_overflow: - case atanhl_eq_one: - case atanh_eq_one: - case atanhf_eq_one: - case scalbl_overflow: - case scalb_overflow: - case scalbf_overflow: - case coshl_overflow: - case cosh_overflow: - case coshf_overflow: - case nextafterl_overflow: - case nextafter_overflow: - case nextafterf_overflow: - case nextafterl_underflow: - case nextafter_underflow: - case nextafterf_underflow: - case nexttowardl_overflow: - case nexttoward_overflow: - case nexttowardf_overflow: - case nexttowardl_underflow: - case nexttoward_underflow: - case nexttowardf_underflow: - case scalbnl_overflow: - case scalbn_overflow: - case scalbnf_overflow: - case scalblnl_overflow: - case scalbln_overflow: - case scalblnf_overflow: - case ldexpl_overflow: - case ldexp_overflow: - case ldexpf_overflow: - case lgammal_overflow: - case lgamma_overflow: - case lgammaf_overflow: - case gammal_overflow: - case gamma_overflow: - case gammaf_overflow: - case lgammal_negative: - case lgamma_negative: - case lgammaf_negative: - case gammal_negative: - case gamma_negative: - case gammaf_negative: - case ilogbl_zero: - case ilogb_zero: - case ilogbf_zero: - case fdiml_overflow: - case fdim_overflow: - case fdimf_overflow: - case llrintl_large: - case llrint_large: - case llrintf_large: - case llroundl_large: - case llround_large: - case llroundf_large: - case lrintl_large: - case lrint_large: - case lrintf_large: - case lroundl_large: - case lround_large: - case lroundf_large: - case tandl_overflow: - case tand_overflow: - case tandf_overflow: - case cotdl_overflow: - case cotd_overflow: - case cotdf_overflow: - case cotl_overflow: - case cot_overflow: - case cotf_overflow: - case sinhcoshl_overflow: - case sinhcosh_overflow: - case sinhcoshf_overflow: - case annuityl_overflow: - case annuity_overflow: - case annuityf_overflow: - case compoundl_overflow: - case compound_overflow: - case compoundf_overflow: - case tgammal_overflow: - case tgamma_overflow: - case tgammaf_overflow: - { - ERRNO_RANGE; break; - } - case powl_underflow: - case expl_underflow: - case exp10l_underflow: - case exp2l_underflow: - case scalbl_underflow: - case scalbnl_underflow: - case scalblnl_underflow: - case ldexpl_underflow: - case erfcl_underflow: - case annuityl_underflow: - case compoundl_underflow: - { - /* Test for zero by testing 64 significand bits for zero. An integer - test is needed so denormal flag is not set by a floating-point test */ - if ( INPUT_RESI64 == 0 ) ERRNO_RANGE; - break; - } - case pow_underflow: - case exp_underflow: - case exp10_underflow: - case exp2_underflow: - case scalb_underflow: - case scalbn_underflow: - case scalbln_underflow: - case ldexp_underflow: - case erfc_underflow: - case annuity_underflow: - case compound_underflow: - { - /* Test for zero by testing exp and significand bits for zero. An integer - test is needed so denormal flag is not set by a floating-point test */ - if ( (INPUT_RESI64 << 1) == 0 ) ERRNO_RANGE; - break; - } - case powf_underflow: - case expf_underflow: - case exp10f_underflow: - case exp2f_underflow: - case scalbf_underflow: - case scalbnf_underflow: - case scalblnf_underflow: - case ldexpf_underflow: - case erfcf_underflow: - case annuityf_underflow: - case compoundf_underflow: - { - /* Test for zero by testing exp and significand bits for zero. An integer - test is needed so denormal flag is not set by a floating-point test */ - if ( (INPUT_RESI64 << 33) == 0 ) ERRNO_RANGE; - break; - } - case logl_negative: - case log_negative: - case logf_negative: - case log10l_negative: - case log10_negative: - case log10f_negative: - case log2l_negative: - case log2_negative: - case log2f_negative: - case log1pl_negative: - case log1p_negative: - case log1pf_negative: - case sqrtl_negative: - case sqrt_negative: - case sqrtf_negative: - case atan2l_zero: - case atan2_zero: - case atan2f_zero: - case powl_zero_to_negative: - case powl_neg_to_non_integer: - case pow_zero_to_negative: - case pow_neg_to_non_integer: - case powf_zero_to_negative: - case powf_neg_to_non_integer: - case fmodl_by_zero: - case fmod_by_zero: - case fmodf_by_zero: - case atanhl_gt_one: - case atanh_gt_one: - case atanhf_gt_one: - case acosl_gt_one: - case acos_gt_one: - case acosf_gt_one: - case asinl_gt_one: - case asin_gt_one: - case asinf_gt_one: - case logbl_zero: - case logb_zero: - case logbf_zero: - case acoshl_lt_one: - case acosh_lt_one: - case acoshf_lt_one: - case y0l_zero: - case y0_zero: - case y0f_zero: - case y1l_zero: - case y1_zero: - case y1f_zero: - case ynl_zero: - case yn_zero: - case ynf_zero: - case y0l_negative: - case y0_negative: - case y0f_negative: - case y1l_negative: - case y1_negative: - case y1f_negative: - case ynl_negative: - case yn_negative: - case ynf_negative: - case acosdl_gt_one: - case acosd_gt_one: - case acosdf_gt_one: - case asindl_gt_one: - case asind_gt_one: - case asindf_gt_one: - case atan2dl_zero: - case atan2d_zero: - case atan2df_zero: - case annuityl_by_zero: - case annuity_by_zero: - case annuityf_by_zero: - case annuityl_less_m1: - case annuity_less_m1: - case annuityf_less_m1: - case compoundl_by_zero: - case compound_by_zero: - case compoundf_by_zero: - case compoundl_less_m1: - case compound_less_m1: - case compoundf_less_m1: - case tgammal_negative: - case tgamma_negative: - case tgammaf_negative: - { - ERRNO_DOMAIN; break; - } - default: - break; - } - return; -} - -/***********************/ -/* _POSIX_ Path */ -/***********************/ - -else if(_LIB_VERSIONIMF==_POSIX_) -{ -switch(input_tag) - { - case gammal_overflow: - case lgammal_overflow: - case tgammal_overflow: - { - RETVAL_HUGE_VALL; ERRNO_RANGE; break; - } - case gamma_overflow: - case lgamma_overflow: - case tgamma_overflow: - { - RETVAL_HUGE_VALD; ERRNO_RANGE; break; - } - case gammaf_overflow: - case lgammaf_overflow: - case tgammaf_overflow: - { - RETVAL_HUGE_VALF; ERRNO_RANGE; break; - } - case gammal_negative: - case gamma_negative: - case gammaf_negative: - case lgammal_negative: - case lgamma_negative: - case lgammaf_negative: - case tgammal_negative: - case tgamma_negative: - case tgammaf_negative: - { - ERRNO_DOMAIN; break; - } - case ldexpl_overflow: - case ldexpl_underflow: - case ldexp_overflow: - case ldexp_underflow: - case ldexpf_overflow: - case ldexpf_underflow: - case scalbnl_overflow: - case scalbnl_underflow: - case scalbn_overflow: - case scalbn_underflow: - case scalbnf_overflow: - case scalbnf_underflow: - case scalblnl_overflow: - case scalblnl_underflow: - case scalbln_overflow: - case scalbln_underflow: - case scalblnf_overflow: - case scalblnf_underflow: - case tandl_overflow: - case tand_overflow: - case tandf_overflow: - case cotdl_overflow: - case cotd_overflow: - case cotdf_overflow: - case cotl_overflow: - case cot_overflow: - case cotf_overflow: - case sinhcoshl_overflow: - case sinhcosh_overflow: - case sinhcoshf_overflow: - case nextafterl_overflow: - case nextafter_overflow: - case nextafterf_overflow: - case nextafterl_underflow: - case nextafter_underflow: - case nextafterf_underflow: - case nexttowardl_overflow: - case nexttoward_overflow: - case nexttowardf_overflow: - case nexttowardl_underflow: - case nexttoward_underflow: - case nexttowardf_underflow: - { - ERRNO_RANGE; break; - } - case atanhl_gt_one: - case atanhl_eq_one: - /* atanhl(|x| >= 1) */ - { - ERRNO_DOMAIN; break; - } - case atanh_gt_one: - case atanh_eq_one: - /* atanh(|x| >= 1) */ - { - ERRNO_DOMAIN; break; - } - case atanhf_gt_one: - case atanhf_eq_one: - /* atanhf(|x| >= 1) */ - { - ERRNO_DOMAIN; break; - } - case sqrtl_negative: - /* sqrtl(x < 0) */ - { - ERRNO_DOMAIN; break; - } - case sqrt_negative: - /* sqrt(x < 0) */ - { - ERRNO_DOMAIN; break; - } - case sqrtf_negative: - /* sqrtf(x < 0) */ - { - ERRNO_DOMAIN; break; - } - case y0l_zero: - case y1l_zero: - case ynl_zero: - /* y0l(0) */ - /* y1l(0) */ - /* ynl(0) */ - { - RETVAL_NEG_HUGE_VALL; ERRNO_DOMAIN; break; - } - case y0_zero: - case y1_zero: - case yn_zero: - /* y0(0) */ - /* y1(0) */ - /* yn(0) */ - { - RETVAL_NEG_HUGE_VALD; ERRNO_DOMAIN; break; - } - case y0f_zero: - case y1f_zero: - case ynf_zero: - /* y0f(0) */ - /* y1f(0) */ - /* ynf(0) */ - { - RETVAL_NEG_HUGE_VALF; ERRNO_DOMAIN; break; - } - case y0l_negative: - case y1l_negative: - case ynl_negative: - /* y0l(x < 0) */ - /* y1l(x < 0) */ - /* ynl(x < 0) */ - { -#ifndef _LIBC - RETVAL_NEG_HUGE_VALL; -#endif - ERRNO_DOMAIN; break; - } - case y0_negative: - case y1_negative: - case yn_negative: - /* y0(x < 0) */ - /* y1(x < 0) */ - /* yn(x < 0) */ - { - RETVAL_NEG_HUGE_VALD; ERRNO_DOMAIN; break; - } - case y0f_negative: - case y1f_negative: - case ynf_negative: - /* y0f(x < 0) */ - /* y1f(x < 0) */ - /* ynf(x < 0) */ - { - RETVAL_NEG_HUGE_VALF; ERRNO_DOMAIN; break; - } - case logl_zero: - case log1pl_zero: - case log10l_zero: - case log2l_zero: - /* logl(0) */ - /* log1pl(-1) */ - /* log10l(0) */ - /* log2l(0) */ - { - RETVAL_NEG_HUGE_VALL; ERRNO_RANGE; break; - } - case log_zero: - case log1p_zero: - case log10_zero: - case log2_zero: - /* log(0) */ - /* log1p(-1) */ - /* log10(0) */ - /* log2(0) */ - { - RETVAL_NEG_HUGE_VALD; ERRNO_RANGE; break; - } - case logf_zero: - case log1pf_zero: - case log10f_zero: - case log2f_zero: - /* logf(0) */ - /* log1pf(-1) */ - /* log10f(0) */ - /* log2f(0) */ - { - RETVAL_NEG_HUGE_VALF; ERRNO_RANGE; break; - } - case logl_negative: - case log1pl_negative: - case log10l_negative: - case log2l_negative: - /* logl(x < 0) */ - /* log1pl(x < -1) */ - /* log10l(x < 0) */ - /* log2l(x < 0) */ - { - ERRNO_DOMAIN; break; - } - case log_negative: - case log1p_negative: - case log10_negative: - case log2_negative: - /* log(x < 0) */ - /* log1p(x < -1) */ - /* log10(x < 0) */ - /* log2(x < 0) */ - { - ERRNO_DOMAIN; break; - } - case logf_negative: - case log1pf_negative: - case log10f_negative: - case log2f_negative: - /* logf(x < 0) */ - /* log1pf(x < -1) */ - /* log10f(x < 0) */ - /* log2f(x < 0) */ - { - ERRNO_DOMAIN; break; - } - case expl_overflow: - case exp10l_overflow: - case exp2l_overflow: - /* expl overflow */ - /* exp10l overflow */ - /* exp2l overflow */ - { - RETVAL_HUGE_VALL; ERRNO_RANGE; break; - } - case exp_overflow: - case exp10_overflow: - case exp2_overflow: - /* exp overflow */ - /* exp10 overflow */ - /* exp2 overflow */ - { - RETVAL_HUGE_VALD; ERRNO_RANGE; break; - } - case expf_overflow: - case exp10f_overflow: - case exp2f_overflow: - /* expf overflow */ - { - RETVAL_HUGE_VALF; ERRNO_RANGE; break; - } - case expl_underflow: - case exp10l_underflow: - case exp2l_underflow: - /* expl underflow */ - /* exp10l underflow */ - /* exp2l underflow */ - { - ERRNO_RANGE; break; - } - case exp_underflow: - case exp10_underflow: - case exp2_underflow: - /* exp underflow */ - /* exp10 underflow */ - /* exp2 underflow */ - { - ERRNO_RANGE; break; - } - case expf_underflow: - case exp10f_underflow: - case exp2f_underflow: - /* expf underflow */ - /* exp10f underflow */ - /* exp2f underflow */ - { - ERRNO_RANGE; break; - } - case j0l_gt_loss: - case y0l_gt_loss: - case j1l_gt_loss: - case y1l_gt_loss: - case jnl_gt_loss: - case ynl_gt_loss: - /* jn and yn doubl-extended> XLOSS */ - { - RETVAL_ZEROL; ERRNO_RANGE; break; - } - case j0_gt_loss: - case y0_gt_loss: - case j1_gt_loss: - case y1_gt_loss: - case jn_gt_loss: - case yn_gt_loss: - /* jn and yn double > XLOSS */ - { - RETVAL_ZEROD; ERRNO_RANGE; break; - } - case j0f_gt_loss: - case y0f_gt_loss: - case j1f_gt_loss: - case y1f_gt_loss: - case jnf_gt_loss: - case ynf_gt_loss: - /* j0n and y0n > XLOSS */ - { - RETVAL_ZEROF; ERRNO_RANGE; break; - } - case powl_zero_to_zero: - /* powl 0**0 */ - { - break; - } - case pow_zero_to_zero: - /* pow 0**0 */ - { - break; - } - case powf_zero_to_zero: - /* powf 0**0 */ - { - break; - } - case powl_overflow: - case annuityl_overflow: - case compoundl_overflow: - /* powl(x,y) overflow */ - { - if (INPUT_RESL < ZEROL_VALUE /*0*/) RETVAL_NEG_HUGE_VALL; - else RETVAL_HUGE_VALL; - ERRNO_RANGE; break; - } - case pow_overflow: - case annuity_overflow: - case compound_overflow: - /* pow(x,y) overflow */ - { - if (INPUT_RESD < ZEROD_VALUE /*0*/) RETVAL_NEG_HUGE_VALD; - else RETVAL_HUGE_VALD; - ERRNO_RANGE; break; - } - case powf_overflow: - case annuityf_overflow: - case compoundf_overflow: - /* powf(x,y) overflow */ - { - if (INPUT_RESF < ZEROF_VALUE /*0*/) RETVAL_NEG_HUGE_VALF; - else RETVAL_HUGE_VALF; - ERRNO_RANGE; break; - } - case powl_underflow: - case annuityl_underflow: - case compoundl_underflow: - /* powl(x,y) underflow */ - { - RETVAL_ZEROL; ERRNO_RANGE; break; - } - case pow_underflow: - case annuity_underflow: - case compound_underflow: - /* pow(x,y) underflow */ - { - RETVAL_ZEROD; ERRNO_RANGE; break; - } - case powf_underflow: - case annuityf_underflow: - case compoundf_underflow: - /* powf(x,y) underflow */ - { - RETVAL_ZEROF; ERRNO_RANGE; break; - } - case annuityl_by_zero: - case annuityl_less_m1: - case compoundl_by_zero: - case compoundl_less_m1: - case annuity_by_zero: - case annuity_less_m1: - case compound_by_zero: - case compound_less_m1: - case annuityf_by_zero: - case annuityf_less_m1: - case compoundf_by_zero: - case compoundf_less_m1: - { - ERRNO_DOMAIN; break; - } - case powl_zero_to_negative: - /* 0**neg */ - { - ERRNO_DOMAIN; break; - } - case pow_zero_to_negative: - /* 0**neg */ - { - ERRNO_DOMAIN; break; - } - case powf_zero_to_negative: - /* 0**neg */ - { - ERRNO_DOMAIN; break; - } - case powl_neg_to_non_integer: - /* neg**non_integral */ - { - ERRNO_DOMAIN; break; - } - case pow_neg_to_non_integer: - /* neg**non_integral */ - { - ERRNO_DOMAIN; break; - } - case powf_neg_to_non_integer: - /* neg**non-integral */ - { - ERRNO_DOMAIN; break; - } - case powl_nan_to_zero: - /* powl(NaN,0.0) */ - /* Special Error */ - { - break; - } - case pow_nan_to_zero: - /* pow(NaN,0.0) */ - { - break; - } - case powf_nan_to_zero: - /* powf(NaN,0.0) */ - { - break; - } - case atan2l_zero: - case atan2dl_zero: - /* atan2l(0,0) */ - /* atan2dl(0,0) */ - { - break; - } - case atan2_zero: - case atan2d_zero: - /* atan2(0,0) */ - /* atan2d(0,0) */ - { - break; - } - case atan2f_zero: - case atan2df_zero: - /* atan2f(0,0) */ - /* atan2df(0,0) */ - { - break; - } - case expm1l_overflow: - /* expm1 overflow */ - { - ERRNO_RANGE; break; - } - case expm1_overflow: - /* expm1 overflow */ - { - ERRNO_RANGE; break; - } - case expm1f_overflow: - /* expm1f overflow */ - { - ERRNO_RANGE; break; - } - case expm1l_underflow: - /* expm1 underflow */ - { - ERRNO_RANGE; break; - } - case expm1_underflow: - /* expm1 underflow */ - { - ERRNO_RANGE; break; - } - case expm1f_underflow: - /* expm1f underflow */ - { - ERRNO_RANGE; break; - } - case hypotl_overflow: - /* hypotl overflow */ - { - RETVAL_HUGE_VALL; ERRNO_RANGE; break; - } - case hypot_overflow: - /* hypot overflow */ - { - RETVAL_HUGE_VALD; ERRNO_RANGE; break; - } - case hypotf_overflow: - /* hypotf overflow */ - { - RETVAL_HUGE_VALF; ERRNO_RANGE; break; - } - case scalbl_underflow: - /* scalbl underflow */ - { - if (INPUT_XL < ZEROL_VALUE /*0*/) RETVAL_NEG_ZEROL; - else RETVAL_ZEROL; - ERRNO_RANGE; break; - } - case scalb_underflow: - /* scalb underflow */ - { - if (INPUT_XD < ZEROD_VALUE /*0*/) RETVAL_NEG_ZEROD; - else RETVAL_ZEROD; - ERRNO_RANGE; break; - } - case scalbf_underflow: - /* scalbf underflow */ - { - if (INPUT_XF < ZEROF_VALUE /*0*/) RETVAL_NEG_ZEROF; - else RETVAL_ZEROF; - ERRNO_RANGE; break; - } - case scalbl_overflow: - /* scalbl overflow */ - { - if (INPUT_XL < ZEROL_VALUE /*0*/) RETVAL_NEG_HUGE_VALL; - else RETVAL_HUGE_VALL; - ERRNO_RANGE; break; - } - case scalb_overflow: - /* scalb overflow */ - { - if (INPUT_XD < ZEROD_VALUE /*0*/) RETVAL_NEG_HUGE_VALD; - else RETVAL_HUGE_VALD; - ERRNO_RANGE; break; - } - case scalbf_overflow: - /* scalbf overflow */ - { - if (INPUT_XF < ZEROF_VALUE /*0*/) RETVAL_NEG_HUGE_VALF; - else RETVAL_HUGE_VALF; - ERRNO_RANGE; break; - } - case acoshl_lt_one: - /* acoshl(x < 1) */ - { - ERRNO_DOMAIN; break; - } - case acosh_lt_one: - /* acosh(x < 1) */ - { - ERRNO_DOMAIN; break; - } - case acoshf_lt_one: - /* acoshf(x < 1) */ - { - ERRNO_DOMAIN; break; - } - case acosl_gt_one: - case acosdl_gt_one: - /* acosl(x > 1) */ - /* acosdl(x > 1) */ - { - ERRNO_DOMAIN; break; - } - case acos_gt_one: - case acosd_gt_one: - /* acos(x > 1) */ - /* acosd(x > 1) */ - { - ERRNO_DOMAIN; break; - } - case acosf_gt_one: - case acosdf_gt_one: - /* acosf(x > 1) */ - /* acosdf(x > 1) */ - { - ERRNO_DOMAIN; break; - } - case asinl_gt_one: - case asindl_gt_one: - /* asinl(x > 1) */ - /* asindl(x > 1) */ - { - ERRNO_DOMAIN; break; - } - case asin_gt_one: - case asind_gt_one: - /* asin(x > 1) */ - /* asind(x > 1) */ - { - ERRNO_DOMAIN; break; - } - case asinf_gt_one: - case asindf_gt_one: - /* asinf(x > 1) */ - /* asindf(x > 1) */ - { - ERRNO_DOMAIN; break; - } - case remainderl_by_zero: - case fmodl_by_zero: - /* fmodl(x,0) */ - { - ERRNO_DOMAIN; break; - } - case remainder_by_zero: - case fmod_by_zero: - /* fmod(x,0) */ - { - ERRNO_DOMAIN; break; - } - case remainderf_by_zero: - case fmodf_by_zero: - /* fmodf(x,0) */ - { - ERRNO_DOMAIN; break; - } - case coshl_overflow: - /* coshl overflows */ - { - RETVAL_HUGE_VALL; ERRNO_RANGE; break; - } - case cosh_overflow: - /* cosh overflows */ - { - RETVAL_HUGE_VALD; ERRNO_RANGE; break; - } - case coshf_overflow: - /* coshf overflows */ - { - RETVAL_HUGE_VALF; ERRNO_RANGE; break; - } - case sinhl_overflow: - /* sinhl overflows */ - { - if (INPUT_XL > ZEROL_VALUE /*0*/) RETVAL_HUGE_VALL; - else RETVAL_NEG_HUGE_VALL; - ERRNO_RANGE; break; - } - case sinh_overflow: - /* sinh overflows */ - { - if (INPUT_XD > ZEROD_VALUE /*0*/) RETVAL_HUGE_VALD; - else RETVAL_NEG_HUGE_VALD; - ERRNO_RANGE; break; - } - case sinhf_overflow: - /* sinhf overflows */ - { - if (INPUT_XF > ZEROF_VALUE /*0*/) RETVAL_HUGE_VALF; - else RETVAL_NEG_HUGE_VALF; - ERRNO_RANGE; break; - } - case logbl_zero: - /* logbl(0) */ - { - ERRNO_DOMAIN; break; - } - case logb_zero: - /* logb(0) */ - { - ERRNO_DOMAIN; break; - } - case logbf_zero: - /* logbf(0) */ - { - ERRNO_DOMAIN; break; - } - case ilogbl_zero: - /* ilogbl(0) */ - { - ERRNO_RANGE; break; - } - case ilogb_zero: - /* ilogb(0) */ - { - ERRNO_RANGE; break; - } - case ilogbf_zero: - /* ilogbf(0) */ - { - ERRNO_RANGE; break; - } - default: - break; -} -return; -/* _POSIX_ */ -} - -/*******************************/ -/* __SVID__ and __XOPEN__ Path */ -/*******************************/ -else -{ - switch(input_tag) - { - case ldexpl_overflow: - case ldexpl_underflow: - case ldexp_overflow: - case ldexp_underflow: - case ldexpf_overflow: - case ldexpf_underflow: - case scalbnl_overflow: - case scalbnl_underflow: - case scalbn_overflow: - case scalbn_underflow: - case scalbnf_overflow: - case scalbnf_underflow: - case scalblnl_overflow: - case scalblnl_underflow: - case scalbln_overflow: - case scalbln_underflow: - case scalblnf_overflow: - case scalblnf_underflow: - case tandl_overflow: - case tand_overflow: - case tandf_overflow: - case cotdl_overflow: - case cotd_overflow: - case cotdf_overflow: - case cotl_overflow: - case cot_overflow: - case cotf_overflow: - case annuityl_overflow: - case annuityl_underflow: - case annuity_overflow: - case annuity_underflow: - case annuityf_overflow: - case annuityf_underflow: - case compoundl_overflow: - case compoundl_underflow: - case compound_overflow: - case compound_underflow: - case compoundf_overflow: - case compoundf_underflow: - { - ERRNO_RANGE; break; - } - case annuityl_by_zero: - case annuityl_less_m1: - case annuity_by_zero: - case annuity_less_m1: - case annuityf_by_zero: - case annuityf_less_m1: - case compoundl_by_zero: - case compoundl_less_m1: - case compound_by_zero: - case compound_less_m1: - case compoundf_by_zero: - case compoundf_less_m1: - { - ERRNO_DOMAIN; break; - } - case sqrtl_negative: - /* sqrtl(x < 0) */ - { - DOMAINL; NAMEL = (char *) "sqrtl"; - ifSVID - { - RETVAL_ZEROL; - NOT_MATHERRL - { - WRITEL_SQRT; - ERRNO_DOMAIN; - } - } - else - { /* NaN already computed */ - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case sqrt_negative: - /* sqrt(x < 0) */ - { - DOMAIND; NAMED = (char *) "sqrt"; - ifSVID - { - - RETVAL_ZEROD; - NOT_MATHERRD - { - WRITED_SQRT; - ERRNO_DOMAIN; - } - } - else - { /* NaN already computed */ - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case sqrtf_negative: - /* sqrtf(x < 0) */ - { - DOMAINF; NAMEF = (char *) "sqrtf"; - ifSVID - { - RETVAL_ZEROF; - NOT_MATHERRF - { - WRITEF_SQRT; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case logl_zero: - /* logl(0) */ - { - SINGL; NAMEL = (char *) "logl"; - ifSVID - { - RETVAL_NEG_HUGEL; - NOT_MATHERRL - { - WRITEL_LOG_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case log_zero: - /* log(0) */ - { - SINGD; NAMED = (char *) "log"; - ifSVID - { - RETVAL_NEG_HUGED; - NOT_MATHERRD - { - WRITED_LOG_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case logf_zero: - /* logf(0) */ - { - SINGF; NAMEF = (char *) "logf"; - ifSVID - { - RETVAL_NEG_HUGEF; - NOT_MATHERRF - { - WRITEF_LOG_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - - case logl_negative: - /* logl(x < 0) */ - { - DOMAINL; NAMEL = (char *) "logl"; - ifSVID - { - RETVAL_NEG_HUGEL; - NOT_MATHERRL - { - WRITEL_LOG_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case log_negative: - /* log(x < 0) */ - { - DOMAIND; NAMED = (char *) "log"; - ifSVID - { - RETVAL_NEG_HUGED; - NOT_MATHERRD - { - WRITED_LOG_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case logf_negative: - /* logf(x < 0) */ - { - DOMAINF; NAMEF = (char *) "logf"; - ifSVID - { - RETVAL_NEG_HUGEF; - NOT_MATHERRF - { - WRITEF_LOG_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF{ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case log1pl_zero: - /* log1pl(-1) */ - { - SINGL; NAMEL = (char *) "log1pl"; - ifSVID - { - RETVAL_NEG_HUGEL; - NOT_MATHERRL - { - WRITEL_LOG1P_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case log1p_zero: - /* log1p(-1) */ - { - SINGD; NAMED = (char *) "log1p"; - ifSVID - { - RETVAL_NEG_HUGED; - NOT_MATHERRD - { - WRITED_LOG1P_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case log1pf_zero: - /* log1pf(-1) */ - { - SINGF; NAMEF = (char *) "log1pf"; - ifSVID - { - RETVAL_NEG_HUGEF; - NOT_MATHERRF - { - WRITEF_LOG1P_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case log1pl_negative: - /* log1pl(x < -1) */ - { - DOMAINL; NAMEL = (char *) "log1pl"; - ifSVID - { - RETVAL_NEG_HUGEL; - NOT_MATHERRL - { - WRITEL_LOG1P_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case log1p_negative: - /* log1p(x < -1) */ - { - DOMAIND; NAMED = (char *) "log1p"; - ifSVID - { - RETVAL_NEG_HUGED; - NOT_MATHERRD - { - WRITED_LOG1P_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case log1pf_negative: - /* log1pf(x < -1) */ - { - DOMAINF; NAMEF = (char *) "log1pf"; - ifSVID - { - RETVAL_NEG_HUGEF; - NOT_MATHERRF - { - WRITEF_LOG1P_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case log10l_zero: - /* log10l(0) */ - { - SINGL; NAMEL = (char *) "log10l"; - ifSVID - { - RETVAL_NEG_HUGEL; - NOT_MATHERRL - { - WRITEL_LOG10_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case log10_zero: - /* log10(0) */ - { - SINGD; NAMED = (char *) "log10"; - ifSVID - { - RETVAL_NEG_HUGED; - NOT_MATHERRD - { - WRITED_LOG10_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case log10f_zero: - /* log10f(0) */ - { - SINGF; NAMEF = (char *) "log10f"; - ifSVID - { - RETVAL_NEG_HUGEF; - NOT_MATHERRF - { - WRITEF_LOG10_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case log10l_negative: - /* log10l(x < 0) */ - { - DOMAINL; NAMEL = (char *) "log10l"; - ifSVID - { - RETVAL_NEG_HUGEL; - NOT_MATHERRL - { - WRITEL_LOG10_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case log10_negative: - /* log10(x < 0) */ - { - DOMAIND; NAMED = (char *) "log10"; - ifSVID - { - RETVAL_NEG_HUGED; - NOT_MATHERRD - { - WRITED_LOG10_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case log10f_negative: - /* log10f(x < 0) */ - { - DOMAINF; NAMEF = (char *) "log10f"; - ifSVID - { - RETVAL_NEG_HUGEF; - NOT_MATHERRF - { - WRITEF_LOG10_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case log2l_zero: - /* log2l(0) */ - { - SINGL; NAMEL = (char *) "log2l"; - ifSVID - { - RETVAL_NEG_HUGEL; - NOT_MATHERRL - { - WRITEL_LOG2_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case log2_zero: - /* log2(0) */ - { - SINGD; NAMED = (char *) "log2"; - ifSVID - { - RETVAL_NEG_HUGED; - NOT_MATHERRD - { - WRITED_LOG2_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case log2f_zero: - /* log2f(0) */ - { - SINGF; NAMEF = (char *) "log2f"; - ifSVID - { - RETVAL_NEG_HUGEF; - NOT_MATHERRF - { - WRITEF_LOG2_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case log2l_negative: - /* log2l(x < 0) */ - { - DOMAINL; NAMEL = (char *) "log2l"; - ifSVID - { - RETVAL_NEG_HUGEL; - NOT_MATHERRL - { - WRITEL_LOG2_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case log2_negative: - /* log2(x < 0) */ - { - DOMAIND; NAMED = (char *) "log2"; - ifSVID - { - RETVAL_NEG_HUGED; - NOT_MATHERRD - { - WRITED_LOG2_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case log2f_negative: - /* log2f(x < 0) */ - { - DOMAINF; NAMEF = (char *) "log2f"; - ifSVID - { - RETVAL_NEG_HUGEF; - NOT_MATHERRF - { - WRITEF_LOG2_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case expl_overflow: - /* expl overflow */ - { - OVERFLOWL; NAMEL = (char *) "expl"; - ifSVID - { - RETVAL_HUGEL; - } - else - { - RETVAL_HUGE_VALL; - } - NOT_MATHERRL {ERRNO_RANGE;} - *(long double *)retval = excl.retval; - break; - } - case exp_overflow: - /* exp overflow */ - { - OVERFLOWD; NAMED = (char *) "exp"; - ifSVID - { - RETVAL_HUGED; - } - else - { - RETVAL_HUGE_VALD; - } - NOT_MATHERRD {ERRNO_RANGE;} - *(double *)retval = exc.retval; - break; - } - case expf_overflow: - /* expf overflow */ - { - OVERFLOWF; NAMEF = (char *) "expf"; - ifSVID - { - RETVAL_HUGEF; - } - else - { - RETVAL_HUGE_VALF; - } - NOT_MATHERRF {ERRNO_RANGE;} - *(float *)retval = excf.retval; - break; - } - case expl_underflow: - /* expl underflow */ - { - UNDERFLOWL; NAMEL = (char *) "expl"; RETVAL_ZEROL; - NOT_MATHERRL {ERRNO_RANGE;} - *(long double *)retval = excl.retval; - break; - } - case exp_underflow: - /* exp underflow */ - { - UNDERFLOWD; NAMED = (char *) "exp"; RETVAL_ZEROD; - NOT_MATHERRD {ERRNO_RANGE;} - *(double *)retval = exc.retval; - break; - } - case expf_underflow: - /* expf underflow */ - { - UNDERFLOWF; NAMEF = (char *) "expf"; RETVAL_ZEROF; - NOT_MATHERRF {ERRNO_RANGE;} - *(float *)retval = excf.retval; - break; - } - case powl_zero_to_zero: - /* powl 0**0 */ - { - DOMAINL; NAMEL = (char *) "powl"; - ifSVID - { - RETVAL_ZEROL; - NOT_MATHERRL - { - WRITEL_POW_ZERO_TO_ZERO; - ERRNO_DOMAIN; - } - *(long double *)retval = excl.retval; - } - else RETVAL_ONEL; - break; - } - case pow_zero_to_zero: - /* pow 0**0 */ - { - DOMAIND; NAMED = (char *) "pow"; - ifSVID - { - RETVAL_ZEROD; - NOT_MATHERRD - { - WRITED_POW_ZERO_TO_ZERO; - ERRNO_DOMAIN; - } - *(double *)retval = exc.retval; - } - else RETVAL_ONED; - break; - } - case powf_zero_to_zero: - /* powf 0**0 */ - { - DOMAINF; NAMEF = (char *) "powf"; - ifSVID - { - RETVAL_ZEROF; - NOT_MATHERRF - { - WRITEF_POW_ZERO_TO_ZERO; - ERRNO_DOMAIN; - } - *(float *)retval = excf.retval; - } - else RETVAL_ONEF; - break; - } - case powl_overflow: - /* powl(x,y) overflow */ - { - OVERFLOWL; NAMEL = (char *) "powl"; - ifSVID - { - if (INPUT_RESL < ZEROL_VALUE /*0*/) RETVAL_NEG_HUGEL; - else RETVAL_HUGEL; - } - else - { - if (INPUT_RESL < ZEROL_VALUE /*0*/) RETVAL_NEG_HUGE_VALL; - else RETVAL_HUGE_VALL; - } - NOT_MATHERRL {ERRNO_RANGE;} - *(long double *)retval = excl.retval; - break; - } - case pow_overflow: - /* pow(x,y) overflow */ - { - OVERFLOWD; NAMED = (char *) "pow"; - ifSVID - { - if (INPUT_RESD < ZEROD_VALUE /*0*/) RETVAL_NEG_HUGED; - else RETVAL_HUGED; - } - else - { - if (INPUT_RESD < ZEROD_VALUE /*0*/) RETVAL_NEG_HUGE_VALD; - else RETVAL_HUGE_VALD; - } - NOT_MATHERRD {ERRNO_RANGE;} - *(double *)retval = exc.retval; - break; - } - case powf_overflow: - /* powf(x,y) overflow */ - { - OVERFLOWF; NAMEF = (char *) "powf"; - ifSVID - { - if (INPUT_RESF < ZEROF_VALUE /*0*/) RETVAL_NEG_HUGEF; - else RETVAL_HUGEF; - } - else - { - if (INPUT_RESF < ZEROF_VALUE /*0*/) RETVAL_NEG_HUGE_VALF; - else RETVAL_HUGE_VALF; - } - NOT_MATHERRF {ERRNO_RANGE;} - *(float *)retval = excf.retval; - break; - } - case powl_underflow: - /* powl(x,y) underflow */ - { - UNDERFLOWL; NAMEL = (char *) "powl"; RETVAL_ZEROL; - NOT_MATHERRL {ERRNO_RANGE;} - *(long double *)retval = excl.retval; - break; - } - case pow_underflow: - /* pow(x,y) underflow */ - { - UNDERFLOWD; NAMED = (char *) "pow"; RETVAL_ZEROD; - NOT_MATHERRD {ERRNO_RANGE;} - *(double *)retval = exc.retval; - break; - } - case powf_underflow: - /* powf(x,y) underflow */ - { - UNDERFLOWF; NAMEF = (char *) "powf"; RETVAL_ZEROF; - NOT_MATHERRF {ERRNO_RANGE;} - *(float *)retval = excf.retval; - break; - } - case powl_zero_to_negative: - /* 0 to neg */ - { - DOMAINL; NAMEL = (char *) "powl"; - ifSVID - { - RETVAL_ZEROL; - NOT_MATHERRL - { - WRITEL_POW_ZERO_TO_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case pow_zero_to_negative: - /* 0**neg */ - { - DOMAIND; NAMED = (char *) "pow"; - ifSVID - { - RETVAL_ZEROD; - NOT_MATHERRD - { - WRITED_POW_ZERO_TO_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case powf_zero_to_negative: - /* 0**neg */ - { - DOMAINF; NAMEF = (char *) "powf"; - ifSVID - { - RETVAL_ZEROF; - NOT_MATHERRF - { - WRITEF_POW_ZERO_TO_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case powl_neg_to_non_integer: - /* neg**non_integral */ - { - DOMAINL; NAMEL = (char *) "powl"; - ifSVID - { - RETVAL_ZEROL; - NOT_MATHERRL - { - WRITEL_POW_NEG_TO_NON_INTEGER; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case pow_neg_to_non_integer: - /* neg**non_integral */ - { - DOMAIND; NAMED = (char *) "pow"; - ifSVID - { - RETVAL_ZEROD; - NOT_MATHERRD - { - WRITED_POW_NEG_TO_NON_INTEGER; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case powf_neg_to_non_integer: - /* neg**non-integral */ - { - DOMAINF; NAMEF = (char *) "powf"; - ifSVID - { - RETVAL_ZEROF; - NOT_MATHERRF - { - WRITEF_POW_NEG_TO_NON_INTEGER; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case powl_nan_to_zero: - /* pow(NaN,0.0) */ - /* Special Error */ - { - DOMAINL; NAMEL = (char *) "powl"; - *(long double *)retval = *(long double *)arg1; - NOT_MATHERRL {ERRNO_DOMAIN;} - *(long double *)retval = excl.retval; - break; - } - case pow_nan_to_zero: - /* pow(NaN,0.0) */ - /* Special Error */ - { - DOMAIND; NAMED = (char *) "pow"; - *(double *)retval = *(double *)arg1; - NOT_MATHERRD {ERRNO_DOMAIN;} - *(double *)retval = exc.retval; - break; - } - case powf_nan_to_zero: - /* powf(NaN,0.0) */ - /* Special Error */ - { - DOMAINF; NAMEF = (char *) "powf"; - *(float *)retval = *(float *)arg1; - NOT_MATHERRF {ERRNO_DOMAIN;} - *(float *)retval = excf.retval; - break; - } - case atan2l_zero: - /* atan2l(0.0,0.0) */ - { - DOMAINL; NAMEL = (char *) "atan2l"; - RETVAL_ZEROL; - NOT_MATHERRL - { - ifSVID - { - WRITEL_ATAN2_ZERO_BY_ZERO; - } - ERRNO_DOMAIN; - } - *(long double *)retval = excl.retval; - break; - } - case atan2_zero: - /* atan2(0.0,0.0) */ - { - DOMAIND; NAMED = (char *) "atan2"; - RETVAL_ZEROD; - NOT_MATHERRD - { - ifSVID - { - WRITED_ATAN2_ZERO_BY_ZERO; - } - ERRNO_DOMAIN; - } - *(double *)retval = exc.retval; - break; - } - case atan2f_zero: - /* atan2f(0.0,0.0) */ - { - DOMAINF; NAMEF = (char *) "atan2f"; - RETVAL_ZEROF; - NOT_MATHERRF - { - ifSVID - { - WRITEF_ATAN2_ZERO_BY_ZERO; - } - ERRNO_DOMAIN; - } - *(float *)retval = excf.retval; - break; - } - case atan2dl_zero: - /* atan2dl(0.0,0.0) */ - { - DOMAINL; NAMEL = (char *) "atan2dl"; - RETVAL_ZEROL; - NOT_MATHERRL - { - ifSVID - { - WRITEL_ATAN2D_ZERO_BY_ZERO; - } - ERRNO_DOMAIN; - } - *(long double *)retval = excl.retval; - break; - } - case atan2d_zero: - /* atan2d(0.0,0.0) */ - { - DOMAIND; NAMED = (char *) "atan2d"; - RETVAL_ZEROD; - NOT_MATHERRD - { - ifSVID - { - WRITED_ATAN2D_ZERO_BY_ZERO; - } - ERRNO_DOMAIN; - } - *(double *)retval = exc.retval; - break; - } - case atan2df_zero: - /* atan2df(0.0,0.0) */ - { - DOMAINF; NAMEF = (char *) "atan2df"; - RETVAL_ZEROF; - NOT_MATHERRF - { - ifSVID - { - WRITEF_ATAN2D_ZERO_BY_ZERO; - } - ERRNO_DOMAIN; - } - *(float *)retval = excf.retval; - break; - } - case expm1_overflow: - /* expm1(finite) overflow */ - /* Overflow is the only documented */ - /* special value. */ - { - ERRNO_RANGE; - break; - } - case expm1f_overflow: - /* expm1f(finite) overflow */ - { - ERRNO_RANGE; - break; - } - case expm1_underflow: - /* expm1(finite) underflow */ - /* Underflow is not documented */ - /* special value. */ - { - ERRNO_RANGE; - break; - } - case expm1f_underflow: - /* expm1f(finite) underflow */ - { - ERRNO_RANGE; - break; - } - case scalbl_underflow: - /* scalbl underflow */ - { - UNDERFLOWL; NAMEL = (char *) "scalbl"; - if (INPUT_XL < ZEROL_VALUE /*0.0L*/) RETVAL_NEG_ZEROL; - else RETVAL_ZEROL; - NOT_MATHERRL {ERRNO_RANGE;} - *(long double *)retval = excl.retval; - break; - } - case scalb_underflow: - /* scalb underflow */ - { - UNDERFLOWD; NAMED = (char *) "scalb"; - if (INPUT_XD < ZEROD_VALUE /*0.0*/) RETVAL_NEG_ZEROD; - else RETVAL_ZEROD; - NOT_MATHERRD {ERRNO_RANGE;} - *(double *)retval = exc.retval; - break; - } - case scalbf_underflow: - /* scalbf underflow */ - { - UNDERFLOWF; NAMEF = (char *) "scalbf"; - if (INPUT_XF < ZEROF_VALUE /*0.0*/) RETVAL_NEG_ZEROF; - else RETVAL_ZEROF; - NOT_MATHERRF {ERRNO_RANGE;} - *(float *)retval = excf.retval; - break; - } - case scalbl_overflow: - /* scalbl overflow */ - { - OVERFLOWL; NAMEL = (char *) "scalbl"; - if (INPUT_XL < ZEROL_VALUE /*0*/) RETVAL_NEG_HUGE_VALL; - else RETVAL_HUGE_VALL; - NOT_MATHERRL {ERRNO_RANGE;} - *(long double *)retval = excl.retval; - break; - } - case scalb_overflow: - /* scalb overflow */ - { - OVERFLOWD; NAMED = (char *) "scalb"; - if (INPUT_XD < ZEROD_VALUE /*0*/) RETVAL_NEG_HUGE_VALD; - else RETVAL_HUGE_VALD; - NOT_MATHERRD {ERRNO_RANGE;} - *(double *)retval = exc.retval; - break; - } - case scalbf_overflow: - /* scalbf overflow */ - { - OVERFLOWF; NAMEF = (char *) "scalbf"; - if (INPUT_XF < ZEROF_VALUE /*0*/) RETVAL_NEG_HUGE_VALF; - else RETVAL_HUGE_VALF; - NOT_MATHERRF {ERRNO_RANGE;} - *(float *)retval = excf.retval; - break; - } - case hypotl_overflow: - /* hypotl overflow */ - { - OVERFLOWL; NAMEL = (char *) "hypotl"; - ifSVID - { - RETVAL_HUGEL; - } - else - { - RETVAL_HUGE_VALL; - } - NOT_MATHERRL {ERRNO_RANGE;} - *(long double *)retval = excl.retval; - break; - } - case hypot_overflow: - /* hypot overflow */ - { - OVERFLOWD; NAMED = (char *) "hypot"; - ifSVID - { - RETVAL_HUGED; - } - else - { - RETVAL_HUGE_VALD; - } - NOT_MATHERRD {ERRNO_RANGE;} - *(double *)retval = exc.retval; - break; - } - case hypotf_overflow: - /* hypotf overflow */ - { - OVERFLOWF; NAMEF = (char *) "hypotf"; - ifSVID - { - RETVAL_HUGEF; - } - else - { - RETVAL_HUGE_VALF; - } - NOT_MATHERRF {ERRNO_RANGE;} - *(float *)retval = excf.retval; - break; - } - case acosl_gt_one: - /* acosl(x > 1) */ - { - DOMAINL; NAMEL = (char *) "acosl"; - RETVAL_ZEROL; - ifSVID - { - NOT_MATHERRL - { - WRITEL_ACOS; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case acos_gt_one: - /* acos(x > 1) */ - { - DOMAIND; NAMED = (char *) "acos"; - RETVAL_ZEROD; - ifSVID - { - NOT_MATHERRD - { - WRITED_ACOS; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case acosf_gt_one: - /* acosf(x > 1) */ - { - DOMAINF; NAMEF = (char *) "acosf"; - RETVAL_ZEROF; - ifSVID - { - NOT_MATHERRF - { - WRITEF_ACOS; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case asinl_gt_one: - /* asinl(x > 1) */ - { - DOMAINL; NAMEL = (char *) "asinl"; - RETVAL_ZEROL; - ifSVID - { - NOT_MATHERRL - { - WRITEL_ASIN; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case asin_gt_one: - /* asin(x > 1) */ - { - DOMAIND; NAMED = (char *) "asin"; - RETVAL_ZEROD; - ifSVID - { - NOT_MATHERRD - { - WRITED_ASIN; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case asinf_gt_one: - /* asinf(x > 1) */ - { - DOMAINF; NAMEF = (char *) "asinf"; - RETVAL_ZEROF; - ifSVID - { - NOT_MATHERRF - { - WRITEF_ASIN; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case acosdl_gt_one: - /* acosdl(x > 1) */ - { - DOMAINL; NAMEL = (char *) "acosdl"; - RETVAL_ZEROL; - ifSVID - { - NOT_MATHERRL - { - WRITEL_ACOSD; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case acosd_gt_one: - /* acosd(x > 1) */ - { - DOMAIND; NAMED = (char *) "acosd"; - RETVAL_ZEROD; - ifSVID - { - NOT_MATHERRD - { - WRITED_ACOSD; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case acosdf_gt_one: - /* acosdf(x > 1) */ - { - DOMAINF; NAMEF = (char *) "acosdf"; - RETVAL_ZEROF; - ifSVID - { - NOT_MATHERRF - { - WRITEF_ACOSD; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case asindl_gt_one: - /* asindl(x > 1) */ - { - DOMAINL; NAMEL = (char *) "asindl"; - RETVAL_ZEROL; - ifSVID - { - NOT_MATHERRL - { - WRITEL_ASIND; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case asind_gt_one: - /* asind(x > 1) */ - { - DOMAIND; NAMED = (char *) "asind"; - RETVAL_ZEROD; - ifSVID - { - NOT_MATHERRD - { - WRITED_ASIND; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case asindf_gt_one: - /* asindf(x > 1) */ - { - DOMAINF; NAMEF = (char *) "asindf"; - RETVAL_ZEROF; - ifSVID - { - NOT_MATHERRF - { - WRITEF_ASIND; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case coshl_overflow: - /* coshl overflow */ - { - OVERFLOWL; NAMEL = (char *) "coshl"; - ifSVID - { - RETVAL_HUGEL; - } - else - { - RETVAL_HUGE_VALL; - } - NOT_MATHERRL {ERRNO_RANGE;} - *(long double *)retval = excl.retval; - break; - } - case cosh_overflow: - /* cosh overflow */ - { - OVERFLOWD; NAMED = (char *) "cosh"; - ifSVID - { - RETVAL_HUGED; - } - else - { - RETVAL_HUGE_VALD; - } - NOT_MATHERRD {ERRNO_RANGE;} - *(double *)retval = exc.retval; - break; - } - case coshf_overflow: - /* coshf overflow */ - { - OVERFLOWF; NAMEF = (char *) "coshf"; - ifSVID - { - RETVAL_HUGEF; - } - else - { - RETVAL_HUGE_VALF; - } - NOT_MATHERRF {ERRNO_RANGE;} - *(float *)retval = excf.retval; - break; - } - case sinhl_overflow: - /* sinhl overflow */ - { - OVERFLOWL; NAMEL = (char *) "sinhl"; - ifSVID - { - if (INPUT_XL > ZEROL_VALUE /*0.0*/) RETVAL_HUGEL; - else RETVAL_NEG_HUGEL; - } - else - { - if (INPUT_XL > ZEROL_VALUE /*0.0*/) RETVAL_HUGE_VALL; - else RETVAL_NEG_HUGE_VALL; - } - NOT_MATHERRL {ERRNO_RANGE;} - *(long double *)retval = excl.retval; - break; - } - case sinh_overflow: - /* sinh overflow */ - { - OVERFLOWD; NAMED = (char *) "sinh"; - ifSVID - { - if (INPUT_XD > ZEROD_VALUE /*0.0*/) RETVAL_HUGED; - else RETVAL_NEG_HUGED; - } - else - { - if (INPUT_XD > ZEROD_VALUE /*0.0*/) RETVAL_HUGE_VALD; - else RETVAL_NEG_HUGE_VALD; - } - NOT_MATHERRD {ERRNO_RANGE;} - *(double *)retval = exc.retval; - break; - } - case sinhf_overflow: - /* sinhf overflow */ - { - OVERFLOWF; NAMEF = (char *) "sinhf"; - ifSVID - { - if (INPUT_XF > ZEROF_VALUE /*0.0*/) RETVAL_HUGEF; - else RETVAL_NEG_HUGEF; - } - else - { - if (INPUT_XF > ZEROF_VALUE /*0.0*/) RETVAL_HUGE_VALF; - else RETVAL_NEG_HUGE_VALF; - } - NOT_MATHERRF {ERRNO_RANGE;} - *(float *)retval = excf.retval; - break; - } - case acoshl_lt_one: - /* acoshl(x < 1) */ - { - DOMAINL; NAMEL = (char *) "acoshl"; - ifSVID - { - NOT_MATHERRL - { - WRITEL_ACOSH; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case acosh_lt_one: - /* acosh(x < 1) */ - { - DOMAIND; NAMED = (char *) "acosh"; - ifSVID - { - NOT_MATHERRD - { - WRITED_ACOSH; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case acoshf_lt_one: - /* acoshf(x < 1) */ - { - DOMAINF; NAMEF = (char *) "acoshf"; - ifSVID - { - NOT_MATHERRF - { - WRITEF_ACOSH; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case atanhl_gt_one: - /* atanhl(|x| > 1) */ - { - DOMAINL; NAMEL = (char *) "atanhl"; - ifSVID - { - NOT_MATHERRL - { - WRITEL_ATANH_GT_ONE; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRL {ERRNO_DOMAIN;} - } - break; - } - case atanh_gt_one: - /* atanh(|x| > 1) */ - { - DOMAIND; NAMED = (char *) "atanh"; - ifSVID - { - NOT_MATHERRD - { - WRITED_ATANH_GT_ONE; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRD {ERRNO_DOMAIN;} - } - break; - } - case atanhf_gt_one: - /* atanhf(|x| > 1) */ - { - DOMAINF; NAMEF = (char *) "atanhf"; - ifSVID - { - NOT_MATHERRF - { - WRITEF_ATANH_GT_ONE; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRF {ERRNO_DOMAIN;} - } - break; - } - case atanhl_eq_one: - /* atanhl(|x| == 1) */ - { - SINGL; NAMEL = (char *) "atanhl"; - ifSVID - { - NOT_MATHERRL - { - WRITEL_ATANH_EQ_ONE; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRL {ERRNO_DOMAIN;} - } - break; - } - case atanh_eq_one: - /* atanh(|x| == 1) */ - { - SINGD; NAMED = (char *) "atanh"; - ifSVID - { - NOT_MATHERRD - { - WRITED_ATANH_EQ_ONE; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRD {ERRNO_DOMAIN;} - } - break; - } - case atanhf_eq_one: - /* atanhf(|x| == 1) */ - { - SINGF; NAMEF = (char *) "atanhf"; - ifSVID - { - NOT_MATHERRF - { - WRITEF_ATANH_EQ_ONE; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRF {ERRNO_DOMAIN;} - } - break; - } - case gammal_overflow: - /* gammal overflow */ - { - OVERFLOWL; NAMEL = (char *) "gammal"; - ifSVID - { - RETVAL_HUGEL; - } - else - { - RETVAL_HUGE_VALL; - } - NOT_MATHERRL {ERRNO_RANGE;} - *(long double *)retval = excl.retval; - break; - } - case gamma_overflow: - /* gamma overflow */ - { - OVERFLOWD; NAMED = (char *) "gamma"; - ifSVID - { - RETVAL_HUGED; - } - else - { - RETVAL_HUGE_VALD; - } - NOT_MATHERRD {ERRNO_RANGE;} - *(double *)retval = exc.retval; - break; - } - case gammaf_overflow: - /* gammaf overflow */ - { - OVERFLOWF; NAMEF = (char *) "gammaf"; - ifSVID - { - RETVAL_HUGEF; - } - else - { - RETVAL_HUGE_VALF; - } - NOT_MATHERRF {ERRNO_RANGE;} - *(float *)retval = excf.retval; - break; - } - case gammal_negative: - /* gammal -int or 0 */ - { - SINGL; NAMEL = (char *) "gammal"; - ifSVID - { - RETVAL_HUGEL; - NOT_MATHERRL - { - WRITEL_GAMMA_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case gamma_negative: - /* gamma -int or 0 */ - { - SINGD; NAMED = (char *) "gamma"; - ifSVID - { - RETVAL_HUGED; - NOT_MATHERRD - { - WRITED_GAMMA_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case gammaf_negative: - /* gammaf -int or 0 */ - { - SINGF; NAMEF = (char *) "gammaf"; - ifSVID - { - RETVAL_HUGEF; - NOT_MATHERRF - { - WRITEF_GAMMA_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case lgammal_overflow: - /* lgammal overflow */ - { - OVERFLOWL; NAMEL = (char *) "lgammal"; - ifSVID - { - RETVAL_HUGEL; - } - else - { - RETVAL_HUGE_VALL; - } - NOT_MATHERRL {ERRNO_RANGE;} - *(long double *)retval = excl.retval; - break; - } - case lgamma_overflow: - /* lgamma overflow */ - { - OVERFLOWD; NAMED = (char *) "lgamma"; - ifSVID - { - RETVAL_HUGED; - } - else - { - RETVAL_HUGE_VALD; - } - NOT_MATHERRD {ERRNO_RANGE;} - *(double *)retval = exc.retval; - break; - } - case lgammaf_overflow: - /* lgammaf overflow */ - { - OVERFLOWF; NAMEF = (char *) "lgammaf"; - ifSVID - { - RETVAL_HUGEF; - } - else - { - RETVAL_HUGE_VALF; - } - NOT_MATHERRF {ERRNO_RANGE;} - *(float *)retval = excf.retval; - break; - } - case lgammal_negative: - /* lgammal -int or 0 */ - { - SINGL; NAMEL = (char *) "lgammal"; - ifSVID - { - RETVAL_HUGEL; - NOT_MATHERRL - { - WRITEL_LGAMMA_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case lgamma_negative: - /* lgamma -int or 0 */ - { - SINGD; NAMED = (char *) "lgamma"; - ifSVID - { - RETVAL_HUGED; - NOT_MATHERRD - { - WRITED_LGAMMA_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case lgammaf_negative: - /* lgammaf -int or 0 */ - { - SINGF; NAMEF = (char *) "lgammaf"; - ifSVID - { - RETVAL_HUGEF; - NOT_MATHERRF - { - WRITEF_LGAMMA_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case tgammal_overflow: - /* tgammal overflow */ - { - OVERFLOWL; NAMEL = (char *) "tgammal"; - ifSVID - { - RETVAL_HUGEL; - } - else - { - RETVAL_HUGE_VALL; - } - NOT_MATHERRL {ERRNO_RANGE;} - *(long double *)retval = excl.retval; - break; - } - case tgamma_overflow: - /* tgamma overflow */ - { - OVERFLOWD; NAMED = (char *) "tgamma"; - ifSVID - { - RETVAL_HUGED; - } - else - { - RETVAL_HUGE_VALD; - } - NOT_MATHERRD {ERRNO_RANGE;} - *(double *)retval = exc.retval; - break; - } - case tgammaf_overflow: - /* tgammaf overflow */ - { - OVERFLOWF; NAMEF = (char *) "tgammaf"; - ifSVID - { - RETVAL_HUGEF; - } - else - { - RETVAL_HUGE_VALF; - } - NOT_MATHERRF {ERRNO_RANGE;} - *(float *)retval = excf.retval; - break; - } - case tgammal_negative: - /* tgammal -int or 0 */ - { - SINGL; NAMEL = (char *) "tgammal"; - ifSVID - { - NOT_MATHERRL - { - WRITEL_TGAMMA_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case tgamma_negative: - /* tgamma -int or 0 */ - { - SINGD; NAMED = (char *) "tgamma"; - ifSVID - { - NOT_MATHERRD - { - WRITED_TGAMMA_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case tgammaf_negative: - /* tgammaf -int or 0 */ - { - SINGF; NAMEF = (char *) "tgammaf"; - ifSVID - { - NOT_MATHERRF - { - WRITEF_TGAMMA_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case j0l_gt_loss: - /* j0l > loss */ - { - TLOSSL; NAMEL = (char *) "j0l"; - RETVAL_ZEROL; - ifSVID - { - NOT_MATHERRL - { - WRITEL_J0_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRL {ERRNO_RANGE;} - } - *(long double *)retval = excl.retval; - break; - } - case j0_gt_loss: - /* j0 > loss */ - { - TLOSSD; NAMED = (char *) "j0"; - RETVAL_ZEROD; - ifSVID - { - NOT_MATHERRD - { - WRITED_J0_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRD {ERRNO_RANGE;} - } - *(double*)retval = exc.retval; - break; - } - case j0f_gt_loss: - /* j0f > loss */ - { - TLOSSF; NAMEF = (char *) "j0f"; - RETVAL_ZEROF; - ifSVID - { - NOT_MATHERRF - { - WRITEF_J0_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRF {ERRNO_RANGE;} - } - *(float*)retval = excf.retval; - break; - } - case j1l_gt_loss: - /* j1l > loss */ - { - TLOSSL; NAMEL = (char *) "j1l"; - RETVAL_ZEROL; - ifSVID - { - NOT_MATHERRL - { - WRITEL_J1_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRL {ERRNO_RANGE;} - } - *(long double *)retval = excl.retval; - break; - } - case j1_gt_loss: - /* j1 > loss */ - { - TLOSSD; NAMED = (char *) "j1"; - RETVAL_ZEROD; - ifSVID - { - NOT_MATHERRD - { - WRITED_J1_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRD {ERRNO_RANGE;} - } - *(double*)retval = exc.retval; - break; - } - case j1f_gt_loss: - /* j1f > loss */ - { - TLOSSF; NAMEF = (char *) "j1f"; - RETVAL_ZEROF; - ifSVID - { - NOT_MATHERRF - { - WRITEF_J1_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRF {ERRNO_RANGE;} - } - *(float*)retval = excf.retval; - break; - } - case jnl_gt_loss: - /* jnl > loss */ - { - TLOSSL; NAMEL = (char *) "jnl"; - RETVAL_ZEROL; - ifSVID - { - NOT_MATHERRL - { - WRITEL_JN_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRL {ERRNO_RANGE;} - } - *(long double *)retval = excl.retval; - break; - } - case jn_gt_loss: - /* jn > loss */ - { - TLOSSD; NAMED = (char *) "jn"; - RETVAL_ZEROD; - ifSVID - { - NOT_MATHERRD - { - WRITED_JN_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRD {ERRNO_RANGE;} - } - *(double*)retval = exc.retval; - break; - } - case jnf_gt_loss: - /* jnf > loss */ - { - TLOSSF; NAMEF = (char *) "jnf"; - RETVAL_ZEROF; - ifSVID - { - NOT_MATHERRF - { - WRITEF_JN_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRF {ERRNO_RANGE;} - } - *(float*)retval = excf.retval; - break; - } - case y0l_gt_loss: - /* y0l > loss */ - { - TLOSSL; NAMEL = (char *) "y0l"; - RETVAL_ZEROL; - ifSVID - { - NOT_MATHERRL - { - WRITEL_Y0_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRL {ERRNO_RANGE;} - } - *(long double *)retval = excl.retval; - break; - } - case y0_gt_loss: - /* y0 > loss */ - { - TLOSSD; NAMED = (char *) "y0"; - RETVAL_ZEROD; - ifSVID - { - NOT_MATHERRD - { - WRITED_Y0_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRD {ERRNO_RANGE;} - } - *(double*)retval = exc.retval; - break; - } - case y0f_gt_loss: - /* y0f > loss */ - { - TLOSSF; NAMEF = (char *) "y0f"; - RETVAL_ZEROF; - ifSVID - { - NOT_MATHERRF - { - WRITEF_Y0_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRF {ERRNO_RANGE;} - } - *(float*)retval = excf.retval; - break; - } - case y0l_zero: - /* y0l(0) */ - { - DOMAINL; NAMEL = (char *) "y0l"; - ifSVID - { - RETVAL_NEG_HUGEL; - NOT_MATHERRL - { - WRITEL_Y0_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case y0_zero: - /* y0(0) */ - { - DOMAIND; NAMED = (char *) "y0"; - ifSVID - { - RETVAL_NEG_HUGED; - NOT_MATHERRD - { - WRITED_Y0_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case y0f_zero: - /* y0f(0) */ - { - DOMAINF; NAMEF = (char *) "y0f"; - ifSVID - { - RETVAL_NEG_HUGEF; - NOT_MATHERRF - { - WRITEF_Y0_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case y1l_gt_loss: - /* y1l > loss */ - { - TLOSSL; NAMEL = (char *) "y1l"; - RETVAL_ZEROL; - ifSVID - { - NOT_MATHERRL - { - WRITEL_Y1_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRL {ERRNO_RANGE;} - } - *(long double *)retval = excl.retval; - break; - } - case y1_gt_loss: - /* y1 > loss */ - { - TLOSSD; NAMED = (char *) "y1"; - RETVAL_ZEROD; - ifSVID - { - NOT_MATHERRD - { - WRITED_Y1_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRD {ERRNO_RANGE;} - } - *(double*)retval = exc.retval; - break; - } - case y1f_gt_loss: - /* y1f > loss */ - { - TLOSSF; NAMEF = (char *) "y1f"; - RETVAL_ZEROF; - ifSVID - { - NOT_MATHERRF - { - WRITEF_Y1_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRF {ERRNO_RANGE;} - } - *(float*)retval = excf.retval; - break; - } - case y1l_zero: - /* y1l(0) */ - { - DOMAINL; NAMEL = (char *) "y1l"; - ifSVID - { - RETVAL_NEG_HUGEL; - NOT_MATHERRL - { - WRITEL_Y1_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case y1_zero: - /* y1(0) */ - { - DOMAIND; NAMED = (char *) "y1"; - ifSVID - { - RETVAL_NEG_HUGED; - NOT_MATHERRD - { - WRITED_Y1_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case y1f_zero: - /* y1f(0) */ - { - DOMAINF; NAMEF = (char *) "y1f"; - ifSVID - { - RETVAL_NEG_HUGEF; - NOT_MATHERRF - { - WRITEF_Y1_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case ynl_gt_loss: - /* ynl > loss */ - { - TLOSSL; NAMEL = (char *) "ynl"; - RETVAL_ZEROL; - ifSVID - { - NOT_MATHERRL - { - WRITEL_YN_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRL {ERRNO_RANGE;} - } - *(long double *)retval = excl.retval; - break; - } - case yn_gt_loss: - /* yn > loss */ - { - TLOSSD; NAMED = (char *) "yn"; - RETVAL_ZEROD; - ifSVID - { - NOT_MATHERRD - { - WRITED_YN_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRD {ERRNO_RANGE;} - } - *(double*)retval = exc.retval; - break; - } - case ynf_gt_loss: - /* ynf > loss */ - { - TLOSSF; NAMEF = (char *) "ynf"; - RETVAL_ZEROF; - ifSVID - { - NOT_MATHERRF - { - WRITEF_YN_TLOSS; - ERRNO_RANGE; - } - } - else - { - NOT_MATHERRF {ERRNO_RANGE;} - } - *(float*)retval = excf.retval; - break; - } - case ynl_zero: - /* ynl(0) */ - { - DOMAINL; NAMEL = (char *) "ynl"; - ifSVID - { - RETVAL_NEG_HUGEL; - NOT_MATHERRL - { - WRITEL_YN_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case yn_zero: - /* yn(0) */ - { - DOMAIND; NAMED = (char *) "yn"; - ifSVID - { - RETVAL_NEG_HUGED; - NOT_MATHERRD - { - WRITED_YN_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case ynf_zero: - /* ynf(0) */ - { - DOMAINF; NAMEF = (char *) "ynf"; - ifSVID - { - RETVAL_NEG_HUGEF; - NOT_MATHERRF - { - WRITEF_YN_ZERO; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case y0l_negative: - /* y0l(x<0) */ - { - DOMAINL; NAMEL = (char *) "y0l"; - ifSVID - { - RETVAL_NEG_HUGEL; - NOT_MATHERRL - { - WRITEL_Y0_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case y0_negative: - /* y0(x<0) */ - { - DOMAIND; NAMED = (char *) "y0"; - ifSVID - { - RETVAL_NEG_HUGED; - NOT_MATHERRD - { - WRITED_Y0_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case y0f_negative: - /* y0f(x<0) */ - { - DOMAINF; NAMEF = (char *) "y0f"; - ifSVID - { - RETVAL_NEG_HUGEF; - NOT_MATHERRF - { - WRITEF_Y0_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case y1l_negative: - /* y1l(x<0) */ - { - DOMAINL; NAMEL = (char *) "y1l"; - ifSVID - { - RETVAL_NEG_HUGEL; - NOT_MATHERRL - { - WRITEL_Y1_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case y1_negative: - /* y1(x<0) */ - { - DOMAIND; NAMED = (char *) "y1"; - ifSVID - { - RETVAL_NEG_HUGED; - NOT_MATHERRD - { - WRITED_Y1_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case y1f_negative: - /* y1f(x<0) */ - { - DOMAINF; NAMEF = (char *) "y1f"; - ifSVID - { - RETVAL_NEG_HUGEF; - NOT_MATHERRF - { - WRITEF_Y1_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case ynl_negative: - /* ynl(x<0) */ - { - DOMAINL; NAMEL = (char *) "ynl"; - ifSVID - { - RETVAL_NEG_HUGEL; - NOT_MATHERRL - { - WRITEL_YN_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALL; - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case yn_negative: - /* yn(x<0) */ - { - DOMAIND; NAMED = (char *) "yn"; - ifSVID - { - RETVAL_NEG_HUGED; - NOT_MATHERRD - { - WRITED_YN_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALD; - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case ynf_negative: - /* ynf(x<0) */ - { - DOMAINF; NAMEF = (char *) "ynf"; - ifSVID - { - RETVAL_NEG_HUGEF; - NOT_MATHERRF - { - WRITEF_YN_NEGATIVE; - ERRNO_DOMAIN; - } - } - else - { - RETVAL_NEG_HUGE_VALF; - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case fmodl_by_zero: - /* fmodl(x,0) */ - { - DOMAINL; NAMEL = (char *) "fmodl"; - ifSVID - { - *(long double *)retval = *(long double *)arg1; - NOT_MATHERRL - { - WRITEL_FMOD; - ERRNO_DOMAIN; - } - } - else - { /* NaN already computed */ - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case fmod_by_zero: - /* fmod(x,0) */ - { - DOMAIND; NAMED = (char *) "fmod"; - ifSVID - { - *(double *)retval = *(double *)arg1; - NOT_MATHERRD - { - WRITED_FMOD; - ERRNO_DOMAIN; - } - } - else - { /* NaN already computed */ - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case fmodf_by_zero: - /* fmodf(x,0) */ - { - DOMAINF; NAMEF = (char *) "fmodf"; - ifSVID - { - *(float *)retval = *(float *)arg1; - NOT_MATHERRF - { - WRITEF_FMOD; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - case remainderl_by_zero: - /* remainderl(x,0) */ - { - DOMAINL; NAMEL = (char *) "remainderl"; - ifSVID - { - NOT_MATHERRL - { - WRITEL_REM; - ERRNO_DOMAIN; - } - } - else - { /* NaN already computed */ - NOT_MATHERRL {ERRNO_DOMAIN;} - } - *(long double *)retval = excl.retval; - break; - } - case remainder_by_zero: - /* remainder(x,0) */ - { - DOMAIND; NAMED = (char *) "remainder"; - ifSVID - { - NOT_MATHERRD - { - WRITED_REM; - ERRNO_DOMAIN; - } - } - else - { /* NaN already computed */ - NOT_MATHERRD {ERRNO_DOMAIN;} - } - *(double *)retval = exc.retval; - break; - } - case remainderf_by_zero: - /* remainderf(x,0) */ - { - DOMAINF; NAMEF = (char *) "remainderf"; - ifSVID - { - NOT_MATHERRF - { - WRITEF_REM; - ERRNO_DOMAIN; - } - } - else - { - NOT_MATHERRF {ERRNO_DOMAIN;} - } - *(float *)retval = excf.retval; - break; - } - default: - /* We don't want to abort () since SVID doesn't cover all math - library functions. */ - break; - } - return; - } -} diff --git a/sysdeps/ia64/fpu/libm_error_codes.h b/sysdeps/ia64/fpu/libm_error_codes.h deleted file mode 100644 index f196b33a10..0000000000 --- a/sysdeps/ia64/fpu/libm_error_codes.h +++ /dev/null @@ -1,211 +0,0 @@ -/* file: libm_error_codes.h */ - - -/* -// Copyright (c) 2000 - 2004, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// - -// Abstract: -// ======================================================================== -// This file contains the interface to the Intel exception dispatcher. -// -// -// History: -// ======================================================================== -// 12/15/2004 Initial version - extracted from libm_support.h -// -*/ - -#if !defined(__LIBM_ERROR_CODES_H__) -#define __LIBM_ERROR_CODES_H__ - -typedef enum -{ - logl_zero=0, logl_negative, /* 0, 1 */ - log_zero, log_negative, /* 2, 3 */ - logf_zero, logf_negative, /* 4, 5 */ - log10l_zero, log10l_negative, /* 6, 7 */ - log10_zero, log10_negative, /* 8, 9 */ - log10f_zero, log10f_negative, /* 10, 11 */ - expl_overflow, expl_underflow, /* 12, 13 */ - exp_overflow, exp_underflow, /* 14, 15 */ - expf_overflow, expf_underflow, /* 16, 17 */ - powl_overflow, powl_underflow, /* 18, 19 */ - powl_zero_to_zero, /* 20 */ - powl_zero_to_negative, /* 21 */ - powl_neg_to_non_integer, /* 22 */ - powl_nan_to_zero, /* 23 */ - pow_overflow, pow_underflow, /* 24, 25 */ - pow_zero_to_zero, /* 26 */ - pow_zero_to_negative, /* 27 */ - pow_neg_to_non_integer, /* 28 */ - pow_nan_to_zero, /* 29 */ - powf_overflow, powf_underflow, /* 30, 31 */ - powf_zero_to_zero, /* 32 */ - powf_zero_to_negative, /* 33 */ - powf_neg_to_non_integer, /* 34 */ - powf_nan_to_zero, /* 35 */ - atan2l_zero, /* 36 */ - atan2_zero, /* 37 */ - atan2f_zero, /* 38 */ - expm1l_overflow, /* 39 */ - expm1l_underflow, /* 40 */ - expm1_overflow, /* 41 */ - expm1_underflow, /* 42 */ - expm1f_overflow, /* 43 */ - expm1f_underflow, /* 44 */ - hypotl_overflow, /* 45 */ - hypot_overflow, /* 46 */ - hypotf_overflow, /* 47 */ - sqrtl_negative, /* 48 */ - sqrt_negative, /* 49 */ - sqrtf_negative, /* 50 */ - scalbl_overflow, scalbl_underflow, /* 51, 52 */ - scalb_overflow, scalb_underflow, /* 53, 54 */ - scalbf_overflow, scalbf_underflow, /* 55, 56 */ - acosl_gt_one, acos_gt_one, acosf_gt_one, /* 57, 58, 59 */ - asinl_gt_one, asin_gt_one, asinf_gt_one, /* 60, 61, 62 */ - coshl_overflow, cosh_overflow, coshf_overflow, /* 63, 64, 65 */ - y0l_zero, y0l_negative,y0l_gt_loss, /* 66, 67, 68 */ - y0_zero, y0_negative,y0_gt_loss, /* 69, 70, 71 */ - y0f_zero, y0f_negative,y0f_gt_loss, /* 72, 73, 74 */ - y1l_zero, y1l_negative,y1l_gt_loss, /* 75, 76, 77 */ - y1_zero, y1_negative,y1_gt_loss, /* 78, 79, 80 */ - y1f_zero, y1f_negative,y1f_gt_loss, /* 81, 82, 83 */ - ynl_zero, ynl_negative,ynl_gt_loss, /* 84, 85, 86 */ - yn_zero, yn_negative,yn_gt_loss, /* 87, 88, 89 */ - ynf_zero, ynf_negative,ynf_gt_loss, /* 90, 91, 92 */ - j0l_gt_loss, /* 93 */ - j0_gt_loss, /* 94 */ - j0f_gt_loss, /* 95 */ - j1l_gt_loss, /* 96 */ - j1_gt_loss, /* 97 */ - j1f_gt_loss, /* 98 */ - jnl_gt_loss, /* 99 */ - jn_gt_loss, /* 100 */ - jnf_gt_loss, /* 101 */ - lgammal_overflow, lgammal_negative,lgammal_reserve, /* 102, 103, 104 */ - lgamma_overflow, lgamma_negative,lgamma_reserve, /* 105, 106, 107 */ - lgammaf_overflow, lgammaf_negative, lgammaf_reserve,/* 108, 109, 110 */ - gammal_overflow,gammal_negative, gammal_reserve, /* 111, 112, 113 */ - gamma_overflow, gamma_negative, gamma_reserve, /* 114, 115, 116 */ - gammaf_overflow,gammaf_negative,gammaf_reserve, /* 117, 118, 119 */ - fmodl_by_zero, /* 120 */ - fmod_by_zero, /* 121 */ - fmodf_by_zero, /* 122 */ - remainderl_by_zero, /* 123 */ - remainder_by_zero, /* 124 */ - remainderf_by_zero, /* 125 */ - sinhl_overflow, sinh_overflow, sinhf_overflow, /* 126, 127, 128 */ - atanhl_gt_one, atanhl_eq_one, /* 129, 130 */ - atanh_gt_one, atanh_eq_one, /* 131, 132 */ - atanhf_gt_one, atanhf_eq_one, /* 133, 134 */ - acoshl_lt_one, /* 135 */ - acosh_lt_one, /* 136 */ - acoshf_lt_one, /* 137 */ - log1pl_zero, log1pl_negative, /* 138, 139 */ - log1p_zero, log1p_negative, /* 140, 141 */ - log1pf_zero, log1pf_negative, /* 142, 143 */ - ldexpl_overflow, ldexpl_underflow, /* 144, 145 */ - ldexp_overflow, ldexp_underflow, /* 146, 147 */ - ldexpf_overflow, ldexpf_underflow, /* 148, 149 */ - logbl_zero, logb_zero, logbf_zero, /* 150, 151, 152 */ - nextafterl_overflow, nextafter_overflow, - nextafterf_overflow, /* 153, 154, 155 */ - ilogbl_zero, ilogb_zero, ilogbf_zero, /* 156, 157, 158 */ - exp2l_overflow, exp2l_underflow, /* 159, 160 */ - exp2_overflow, exp2_underflow, /* 161, 162 */ - exp2f_overflow, exp2f_underflow, /* 163, 164 */ - exp10l_overflow, exp10_overflow, - exp10f_overflow, /* 165, 166, 167 */ - log2l_zero, log2l_negative, /* 168, 169 */ - log2_zero, log2_negative, /* 170, 171 */ - log2f_zero, log2f_negative, /* 172, 173 */ - scalbnl_overflow, scalbnl_underflow, /* 174, 175 */ - scalbn_overflow, scalbn_underflow, /* 176, 177 */ - scalbnf_overflow, scalbnf_underflow, /* 178, 179 */ - remquol_by_zero, /* 180 */ - remquo_by_zero, /* 181 */ - remquof_by_zero, /* 182 */ - lrintl_large, lrint_large, lrintf_large, /* 183, 184, 185 */ - llrintl_large, llrint_large, llrintf_large, /* 186, 187, 188 */ - lroundl_large, lround_large, lroundf_large, /* 189, 190, 191 */ - llroundl_large, llround_large, llroundf_large, /* 192, 193, 194 */ - fdiml_overflow, fdim_overflow, fdimf_overflow, /* 195, 196, 197 */ - nexttowardl_overflow, nexttoward_overflow, - nexttowardf_overflow, /* 198, 199, 200 */ - scalblnl_overflow, scalblnl_underflow, /* 201, 202 */ - scalbln_overflow, scalbln_underflow, /* 203, 204 */ - scalblnf_overflow, scalblnf_underflow, /* 205, 206 */ - erfcl_underflow, erfc_underflow, erfcf_underflow, /* 207, 208, 209 */ - acosdl_gt_one, acosd_gt_one, acosdf_gt_one, /* 210, 211, 212 */ - asindl_gt_one, asind_gt_one, asindf_gt_one, /* 213, 214, 215 */ - atan2dl_zero, atan2d_zero, atan2df_zero, /* 216, 217, 218 */ - tandl_overflow, tand_overflow, tandf_overflow, /* 219, 220, 221 */ - cotdl_overflow, cotd_overflow, cotdf_overflow, /* 222, 223, 224 */ - cotl_overflow, cot_overflow, cotf_overflow, /* 225, 226, 227 */ - sinhcoshl_overflow, sinhcosh_overflow, sinhcoshf_overflow, /* 228, 229, 230 */ - annuityl_by_zero, annuity_by_zero, annuityf_by_zero, /* 231, 232, 233 */ - annuityl_less_m1, annuity_less_m1, annuityf_less_m1, /* 234, 235, 236 */ - annuityl_overflow, annuity_overflow, annuityf_overflow, /* 237, 238, 239 */ - annuityl_underflow, annuity_underflow, annuityf_underflow, /* 240, 241, 242 */ - compoundl_by_zero, compound_by_zero, compoundf_by_zero, /* 243, 244, 245 */ - compoundl_less_m1, compound_less_m1, compoundf_less_m1, /* 246, 247, 248 */ - compoundl_overflow, compound_overflow, compoundf_overflow, /* 249, 250, 251 */ - compoundl_underflow, compound_underflow, compoundf_underflow, /* 252, 253, 254 */ - tgammal_overflow, tgammal_negative, tgammal_reserve, /* 255, 256, 257 */ - tgamma_overflow, tgamma_negative, tgamma_reserve, /* 258, 259, 260 */ - tgammaf_overflow, tgammaf_negative, tgammaf_reserve, /* 261, 262, 263 */ - exp10l_underflow, exp10_underflow, exp10f_underflow, /* 264, 265, 266 */ - nextafterl_underflow, nextafter_underflow, - nextafterf_underflow, /* 267, 268, 269 */ - nexttowardl_underflow, nexttoward_underflow, - nexttowardf_underflow /* 270, 271, 272 */ -} error_types; - -#define LIBM_ERROR __libm_error_support - -extern void LIBM_ERROR(void*,void*,void*,error_types); -#ifdef _LIBC -libc_hidden_proto(LIBM_ERROR) -#endif - -#define LIBM_ERROR1(x,r,e) LIBM_ERROR(&(x), (void *)0, &(r), e) -#define LIBM_ERROR2(x,y,r,e) LIBM_ERROR(&(x), &(y), &(r), e) - -#endif // !defined(__LIBM_ERROR_CODES_H__) diff --git a/sysdeps/ia64/fpu/libm_frexp.S b/sysdeps/ia64/fpu/libm_frexp.S deleted file mode 100644 index 51bb268dda..0000000000 --- a/sysdeps/ia64/fpu/libm_frexp.S +++ /dev/null @@ -1,209 +0,0 @@ -.file "libm_frexp.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 03/20/00 Improved speed -// 06/01/00 Fixed bug when x a double-extended denormal -// 12/08/00 Corrected label on .endp -// 01/23/02 Added handling for int 32 or 64 bits -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// double __libm_frexp(double x, int* y, int int_type) -// input floating point f8, pointer to y (r33), int int_type (r34) -// output floating point f8, returns the fraction of x, 0.5 <= fraction < 1.0 -// output int* y, returns the true exponent of x -// -// int_type = 0 if int is 32 bits -// int_type = 1 if int is 64 bits -// -// int* y is returned as a 32 bit integer if int_type = 0 -// int* y is returned as a 64 bit integer if int_type = 1 -// -// Overview of operation -//============================================================== -// break a floating point x number into fraction and an exponent -// The fraction is returned as a double -// The exponent is returned as an integer pointed to by y -// This is a true (not a biased exponent) but 0fffe is subtracted -// as a bias instead of 0xffff. This is because the fraction returned -// is between 0.5 and 1.0, not the expected IEEE range. -// -// The fraction is 0.5 <= fraction < 1.0 -// -// Registers used -//============================================================== -// -// general registers: -// r14 exponent bias for x negative -// r15 exponent bias for x positive -// r16 signexp of x -// r17 exponent mask -// r18 exponent of x -// r19 exponent result -// r20 signexp of 2^64 -// r32 on input contains the 64-bit IEEE double that is in f8 -// r33 on input pointer to 32-bit or 64-bit integer for exponent -// r34 on input contains 0 if output int is 32 bits, else output int is 64 bits -// -// predicate registers: -// p6 set if x is Nan, zero, or infinity -// p7 set if x negative -// p8 set if x positive -// p9 set if x double-extended denormal -// p10 set if int_type = 0, 32-bit integer -// p11 set if int_type = 1, 64-bit integer -// -// floating-point registers: -// f8 input, output -// f9 normalized x -// f10 signexp for significand result for x positive -// f11 signexp for significand result for x negative -// f12 2^64 - -.section .text -GLOBAL_LIBM_ENTRY(__libm_frexp) - -// Set signexp for significand result for x>0 -// If x is a NaN, zero, or infinity, return it. -// Put 0 in the int pointer. -// x NAN, ZERO, INFINITY? -// Set signexp for significand result for x<0 -{ .mfi - mov r15 = 0x0fffe - fclass.m p6,p7 = f8, 0xe7 - mov r14 = 0x2fffe -} -// Form signexp of 2^64 in case x double-extended denormal -// Save the normalized value of input in f9 -// The normalization also sets fault flags and takes faults if necessary -{ .mfi - mov r20 = 0x1003f - fnorm.s0 f9 = f8 - nop.i 999 ;; -} - -// Move signexp for significand result for x>0 to FP reg -// Form 2^64 in case x double-extended denormal -{ .mmi - setf.exp f10 = r15 - setf.exp f12 = r20 - nop.i 999 ;; -} - -// Move signexp for significand result for x<0 to FP reg -// p7 if x<0, else p8 -// If x=0,nan,inf, set p10 if output int to be 32 bits, or set p11 if 64 bits -{ .mfi - setf.exp f11 = r14 -(p7) fcmp.lt.s0 p7,p8 = f8,f0 -(p6) cmp.eq.unc p10,p11 = r34, r0 ;; -} - -// If x NAN, ZERO, INFINITY, set *y=0 and exit -{ .mmb -(p10) st4 [r33] = r0 // Store *y=0 as 32-bit integer -(p11) st8 [r33] = r0 // Store *y=0 as 64-bit integer -(p6) br.ret.spnt b0 ;; -} - -// Form exponent mask -// Test for fnorm(x) denormal, means x double-extended denormal -{ .mfi - mov r17 = 0x1ffff - fclass.m p9,p0 = f9, 0x0b - nop.i 999 ;; -} - -// If x double-extended denormal add 64 to exponent bias for scaling -// If x double-extended denormal multiply x * 2^64 which is normal -// Set p10 if output int to be 32 bits, or set p11 if 64 bits -{ .mfi -(p9) add r15 = 64, r15 -(p9) fmpy.s0 f9 = f9, f12 - cmp.eq p10,p11 = r34, r0 ;; -} - -// true exponent stored to int pointer -// the bias is treated as 0xfffe instead of -// normal 0xffff because we want the significand -// to be in the range <=0.5 sig < 1.0 -// Store the value of the exponent at the pointer in r33 - -// If x>0 form significand result -{ .mfi - nop.m 999 -(p8) fmerge.se f8 = f10,f9 - nop.i 999 ;; -} - -// Get signexp of normalized x -// If x<0 form significand result -{ .mfi - getf.exp r16 = f9 -(p7) fmerge.se f8 = f11,f9 - nop.i 999 ;; -} - -// Get exp of normalized x -// Subtract off bias to get true exponent of x -{ .mmi - and r18 = r17,r16 ;; - sub r19 = r18,r15 - nop.i 999 ;; -} - -// Store int *y as a 32-bit integer -// Make the value a double -{ .mfi -(p10) st4 [r33] = r19 // Store *y as 32-bit integer - fnorm.d.s0 f8 = f8 - nop.i 999 -} -{ .mfb -(p11) st8 [r33] = r19 // Store *y as 64-bit integer - nop.f 999 - br.ret.sptk b0 ;; -} - -GLOBAL_LIBM_END(__libm_frexp) diff --git a/sysdeps/ia64/fpu/libm_frexp4.S b/sysdeps/ia64/fpu/libm_frexp4.S deleted file mode 100644 index 08c2de6766..0000000000 --- a/sysdeps/ia64/fpu/libm_frexp4.S +++ /dev/null @@ -1,199 +0,0 @@ -.file "libm_frexp_4.s" - -// Copyright (C) 2000, 2001, Intel Corporation -// All rights reserved. -// -// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, -// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://developer.intel.com/opensource. -// -// History -//============================================================== -// 2/02/00: Initial version -// 3/20/00: Improved speed -// 6/01/00: Fixed bug when x a double-extended denormal -// 12/08/00 Corrected label on .endp -// -// API -//============================================================== -// double frexp(double x, int* y) -// double __libm_frexp_4(double x, int* y) -// where int* y is a 32-bit integer -// -// Overview of operation -//============================================================== -// break a floating point x number into fraction and an exponent -// The fraction is returned as a double -// The exponent is returned as an integer pointed to by y -// This is a true (not a biased exponent) but 0fffe is subtracted -// as a bias instead of 0xffff. This is because the fraction returned -// is between 0.5 and 1.0, not the expected IEEE range. -// -// The fraction is 0.5 <= fraction < 1.0 -// -// Registers used -//============================================================== -// -// general registers: -// r14 exponent bias for x negative -// r15 exponent bias for x positive -// r16 signexp of x -// r17 exponent mask -// r18 exponent of x -// r19 exponent result -// r20 signexp of 2^64 -// r32 on input contains the 64-bit IEEE double that is in f8 -// r33 on input pointer to 32-bit integer for exponent -// -// predicate registers: -// p6 set if x is Nan, zero, or infinity -// p7 set if x negative -// p8 set if x positive -// p9 set if x double-extended denormal -// -// floating-point registers: -// f8 input, output -// f9 normalized x -// f10 signexp for significand result for x positive -// f11 signexp for significand result for x negative -// f12 2^64 - -#include "libm_support.h" - -.align 32 -.global __libm_frexp_4# - -.section .text -.proc __libm_frexp_4# -.align 32 - -__libm_frexp_4: - -// Set signexp for significand result for x>0 -// If x is a NaN, zero, or infinity, return it. -// Put 0 in the int pointer. -// x NAN, ZERO, INFINITY? -// Set signexp for significand result for x<0 -{ .mfi -(p0) mov r15 = 0x0fffe -(p0) fclass.m.unc p6,p0 = f8, 0xe7 -(p0) mov r14 = 0x2fffe -} -// Form signexp of 2^64 in case x double-extended denormal -// Save the normalized value of input in f9 -// The normalization also sets fault flags and takes faults if necessary -{ .mfi -(p0) mov r20 = 0x1003f -(p0) fnorm f9 = f8 - nop.i 999 ;; -} - -// Move signexp for significand result for x>0 to FP reg -// Form 2^64 in case x double-extended denormal -{ .mmi -(p0) setf.exp f10 = r15 -(p0) setf.exp f12 = r20 - nop.i 999 ;; -} - -// Move signexp for significand result for x<0 to FP reg -// If x NAN, ZERO, INFINITY, set *y=0 as a 32-bit integer, and exit -{ .mmb -(p0) setf.exp f11 = r14 -(p6) st4 [r33] = r0 -(p6) br.ret.spnt b0 ;; -} - -// Form exponent mask -// p7 if x<0, else p8 -{ .mfi -(p0) mov r17 = 0x1ffff -(p0) fcmp.lt.unc p7,p8 = f8,f0 - nop.i 999 ;; -} - -// Test for fnorm(x) denormal, means x double-extended denormal -{ .mfi - nop.m 999 -(p0) fclass.m.unc p9,p0 = f9, 0x0b - nop.i 999 ;; -} - -// If x double-extended denormal add 64 to exponent bias for scaling -// If x double-extended denormal multiply x * 2^64 which is normal -{ .mfi -(p9) add r15 = 64, r15 -(p9) fmpy f9 = f9, f12 - nop.i 999 ;; -} - -// true exponent stored to int pointer -// the bias is treated as 0xfffe instead of -// normal 0xffff because we want the significand -// to be in the range <=0.5 sig < 1.0 -// Store the value of the exponent at the pointer in r33 - -// If x>0 form significand result -{ .mfi - nop.m 999 -(p8) fmerge.se f8 = f10,f9 - nop.i 999 ;; -} - -// Get signexp of normalized x -// If x<0 form significand result -{ .mfi -(p0) getf.exp r16 = f9 -(p7) fmerge.se f8 = f11,f9 - nop.i 999 ;; -} - -// Get exp of normalized x -// Subtract off bias to get true exponent of x -{ .mmi -(p0) and r18 = r17,r16 ;; -(p0) sub r19 = r18,r15 - nop.i 999 ;; -} - -// Store int y as a 32-bit integer -// Make the value a double -{ .mfb -(p0) st4 [r33] = r19 -(p0) fnorm.d f8 = f8 -(p0) br.ret.sptk b0 ;; -} - -.endp __libm_frexp_4 -ASM_SIZE_DIRECTIVE(__libm_frexp_4) -strong_alias(__libm_frexp_4, _GI___libm_frexp_4) diff --git a/sysdeps/ia64/fpu/libm_frexp4f.S b/sysdeps/ia64/fpu/libm_frexp4f.S deleted file mode 100644 index 596dea6711..0000000000 --- a/sysdeps/ia64/fpu/libm_frexp4f.S +++ /dev/null @@ -1,199 +0,0 @@ -.file "libm_frexp_4f.s" - -// Copyright (C) 2000, 2001, Intel Corporation -// All rights reserved. -// -// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, -// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://developer.intel.com/opensource. -// -// History -//============================================================== -// 2/02/00: Initial version -// 3/20/00: Improved speed -// 6/01/00: Fixed bug when x a double-extended denormal -// 12/08/00 Corrected label on .endp -// -// API -//============================================================== -// float frexp(float x, int* y) -// float __libm_frexp_4f(float x, int* y) -// where int* y is a 32-bit integer -// -// Overview of operation -//============================================================== -// break a floating point x number into fraction and an exponent -// The fraction is returned as a float -// The exponent is returned as an integer pointed to by y -// This is a true (not a biased exponent) but 0fffe is subtracted -// as a bias instead of 0xffff. This is because the fraction returned -// is between 0.5 and 1.0, not the expected IEEE range. -// -// The fraction is 0.5 <= fraction < 1.0 -// -// Registers used -//============================================================== - -// general registers: -// r14 exponent bias for x negative -// r15 exponent bias for x positive -// r16 signexp of x -// r17 exponent mask -// r18 exponent of x -// r19 exponent result -// r20 signexp of 2^64 -// r32 on input contains the 32-bit IEEE float that is in f8 -// r33 on input pointer to 32-bit integer for exponent - -// predicate registers: -// p6 set if x is Nan, zero, or infinity -// p7 set if x negative -// p8 set if x positive -// p9 set if x double-extended denormal - -// floating-point registers: -// f8 input, output -// f9 normalized x -// f10 signexp for significand result for x positive -// f11 signexp for significand result for x negative -// f12 2^64 - -#include "libm_support.h" - -.align 32 -.global __libm_frexp_4f# - -.section .text -.proc __libm_frexp_4f# -.align 32 - -__libm_frexp_4f: - -// Set signexp for significand result for x>0 -// If x is a NaN, zero, or infinity, return it. -// Put 0 in the int pointer. -// x NAN, ZERO, INFINITY? -// Set signexp for significand result for x<0 -{ .mfi -(p0) mov r15 = 0x0fffe -(p0) fclass.m.unc p6,p0 = f8, 0xe7 -(p0) mov r14 = 0x2fffe -} -// Form signexp of 2^64 in case x double-extended denormal -// Save the normalized value of input in f9 -// The normalization also sets fault flags and takes faults if necessary -{ .mfi -(p0) mov r20 = 0x1003f -(p0) fnorm f9 = f8 - nop.i 999 ;; -} - -// Move signexp for significand result for x>0 to FP reg -// Form 2^64 in case x double-extended denormal -{ .mmi -(p0) setf.exp f10 = r15 -(p0) setf.exp f12 = r20 - nop.i 999 ;; -} - -// Move signexp for significand result for x<0 to FP reg -// If x NAN, ZERO, INFINITY, set *y=0 as a 32-bit integer, and exit -{ .mmb -(p0) setf.exp f11 = r14 -(p6) st4 [r33] = r0 -(p6) br.ret.spnt b0 ;; -} - -// Form exponent mask -// p7 if x<0, else p8 -{ .mfi -(p0) mov r17 = 0x1ffff -(p0) fcmp.lt.unc p7,p8 = f8,f0 - nop.i 999 ;; -} - -// Test for fnorm(x) denormal, means x double-extended denormal -{ .mfi - nop.m 999 -(p0) fclass.m.unc p9,p0 = f9, 0x0b - nop.i 999 ;; -} - -// If x double-extended denormal add 64 to exponent bias for scaling -// If x double-extended denormal multiply x * 2^64 which is normal -{ .mfi -(p9) add r15 = 64, r15 -(p9) fmpy f9 = f9, f12 - nop.i 999 ;; -} - -// true exponent stored to int pointer -// the bias is treated as 0xfffe instead of -// normal 0xffff because we want the significand -// to be in the range <=0.5 sig < 1.0 -// Store the value of the exponent at the pointer in r33 - -// If x>0 form significand result -{ .mfi - nop.m 999 -(p8) fmerge.se f8 = f10,f9 - nop.i 999 ;; -} - -// Get signexp of normalized x -// If x<0 form significand result -{ .mfi -(p0) getf.exp r16 = f9 -(p7) fmerge.se f8 = f11,f9 - nop.i 999 ;; -} - -// Get exp of normalized x -// Subtract off bias to get true exponent of x -{ .mmi -(p0) and r18 = r17,r16 ;; -(p0) sub r19 = r18,r15 - nop.i 999 ;; -} - -// Store int y as a 32-bit integer -// Make the value a float -{ .mfb -(p0) st4 [r33] = r19 -(p0) fnorm.s f8 = f8 -(p0) br.ret.sptk b0 ;; -} - -.endp __libm_frexp_4f -ASM_SIZE_DIRECTIVE(__libm_frexp_4f) -strong_alias(__libm_frexp_4f, _GI___libm_frexp_4f) diff --git a/sysdeps/ia64/fpu/libm_frexp4l.S b/sysdeps/ia64/fpu/libm_frexp4l.S deleted file mode 100644 index 447c574bfc..0000000000 --- a/sysdeps/ia64/fpu/libm_frexp4l.S +++ /dev/null @@ -1,198 +0,0 @@ -.file "libm_frexp_4l.s" - -// Copyright (C) 2000, 2001, Intel Corporation -// All rights reserved. -// -// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, -// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://developer.intel.com/opensource. -// -// History -//============================================================== -// 3/20/00: Initial version -// 6/01/00: Fixed bug when x a double-extended denormal -// 12/08/00 Corrected label on .endp -// -// API -//============================================================== -// long double frexpl(long double x, int* y) -// long double __libm_frexp_4l(long double x, int* y) -// where int* y is a 32-bit integer -// -// Overview of operation -//============================================================== -// break a floating point x number into fraction and an exponent -// The fraction is returned as a long double -// The exponent is returned as an integer pointed to by y -// This is a true (not a biased exponent) but 0fffe is subtracted -// as a bias instead of 0xffff. This is because the fraction returned -// is between 0.5 and 1.0, not the expected IEEE range. -// -// The fraction is 0.5 <= fraction < 1.0 -// -// Registers used -//============================================================== -// -// general registers: -// r14 exponent bias for x negative -// r15 exponent bias for x positive -// r16 signexp of x -// r17 exponent mask -// r18 exponent of x -// r19 exponent result -// r20 signexp of 2^64 -// r32-33 on input contains the 80-bit IEEE long double that is in f8 -// r34 on input pointer to 32-bit integer for exponent -// -// predicate registers: -// p6 set if x is Nan, zero, or infinity -// p7 set if x negative -// p8 set if x positive -// p9 set if x double-extended denormal -// -// floating-point registers: -// f8 input, output -// f9 normalized x -// f10 signexp for significand result for x positive -// f11 signexp for significand result for x negative -// f12 2^64 - -#include "libm_support.h" - -.align 32 -.global __libm_frexp_4l# - -.section .text -.proc __libm_frexp_4l# -.align 32 - -__libm_frexp_4l: - -// Set signexp for significand result for x>0 -// If x is a NaN, zero, or infinity, return it. -// Put 0 in the int pointer. -// x NAN, ZERO, INFINITY? -// Set signexp for significand result for x<0 -{ .mfi -(p0) mov r15 = 0x0fffe -(p0) fclass.m.unc p6,p0 = f8, 0xe7 -(p0) mov r14 = 0x2fffe -} -// Form signexp of 2^64 in case x double-extended denormal -// Save the normalized value of input in f9 -// The normalization also sets fault flags and takes faults if necessary -{ .mfi -(p0) mov r20 = 0x1003f -(p0) fnorm f9 = f8 - nop.i 999 ;; -} - -// Move signexp for significand result for x>0 to FP reg -// Form 2^64 in case x double-extended denormal -{ .mmi -(p0) setf.exp f10 = r15 -(p0) setf.exp f12 = r20 - nop.i 999 ;; -} - -// Move signexp for significand result for x<0 to FP reg -// If x NAN, ZERO, INFINITY, set *y=0 as a 32-bit integer, and exit -{ .mmb -(p0) setf.exp f11 = r14 -(p6) st4 [r34] = r0 -(p6) br.ret.spnt b0 ;; -} - -// Form exponent mask -// p7 if x<0, else p8 -{ .mfi -(p0) mov r17 = 0x1ffff -(p0) fcmp.lt.unc p7,p8 = f8,f0 - nop.i 999 ;; -} - -// Test for fnorm(x) denormal, means x double-extended denormal -{ .mfi - nop.m 999 -(p0) fclass.m.unc p9,p0 = f9, 0x0b - nop.i 999 ;; -} - -// If x double-extended denormal add 64 to exponent bias for scaling -// If x double-extended denormal multiply x * 2^64 which is normal -{ .mfi -(p9) add r15 = 64, r15 -(p9) fmpy f9 = f9, f12 - nop.i 999 ;; -} - -// true exponent stored to int pointer -// the bias is treated as 0xfffe instead of -// normal 0xffff because we want the significand -// to be in the range <=0.5 sig < 1.0 -// Store the value of the exponent at the pointer in r34 - -// If x>0 form significand result -{ .mfi - nop.m 999 -(p8) fmerge.se f8 = f10,f9 - nop.i 999 ;; -} - -// Get signexp of normalized x -// If x<0 form significand result -{ .mfi -(p0) getf.exp r16 = f9 -(p7) fmerge.se f8 = f11,f9 - nop.i 999 ;; -} - -// Get exp of normalized x -// Subtract off bias to get true exponent of x -{ .mmi -(p0) and r18 = r17,r16 ;; -(p0) sub r19 = r18,r15 - nop.i 999 ;; -} - -// Store int y as a 32-bit integer -// Make the value a long double -{ .mfb -(p0) st4 [r34] = r19 -(p0) fnorm f8 = f8 -(p0) br.ret.sptk b0 ;; -} - -.endp __libm_frexp_4l -ASM_SIZE_DIRECTIVE(__libm_frexp_4l) -strong_alias(__libm_frexp_4l, _GI___libm_frexp_4l) diff --git a/sysdeps/ia64/fpu/libm_frexpf.S b/sysdeps/ia64/fpu/libm_frexpf.S deleted file mode 100644 index bf34524cd0..0000000000 --- a/sysdeps/ia64/fpu/libm_frexpf.S +++ /dev/null @@ -1,209 +0,0 @@ -.file "libm_frexpf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 03/20/00 Improved speed -// 06/01/00 Fixed bug when x a double-extended denormal -// 12/08/00 Corrected label on .endp -// 01/23/02 Added handling for int 32 or 64 bits -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// float __libm_frexpf(float x, int* y, int int_type) -// input floating point f8, pointer to y (r33), int int_type (r34) -// output floating point f8, returns the fraction of x, 0.5 <= fraction < 1.0 -// output int* y, returns the true exponent of x -// -// int_type = 0 if int is 32 bits -// int_type = 1 if int is 64 bits -// -// int* y is returned as a 32 bit integer if int_type = 0 -// int* y is returned as a 64 bit integer if int_type = 1 -// -// Overview of operation -//============================================================== -// break a floating point x number into fraction and an exponent -// The fraction is returned as a float -// The exponent is returned as an integer pointed to by y -// This is a true (not a biased exponent) but 0fffe is subtracted -// as a bias instead of 0xffff. This is because the fraction returned -// is between 0.5 and 1.0, not the expected IEEE range. -// -// The fraction is 0.5 <= fraction < 1.0 -// -// Registers used -//============================================================== -// -// general registers: -// r14 exponent bias for x negative -// r15 exponent bias for x positive -// r16 signexp of x -// r17 exponent mask -// r18 exponent of x -// r19 exponent result -// r20 signexp of 2^64 -// r32 on input contains the 32-bit IEEE float that is in f8 -// r33 on input pointer to 32-bit or 64-bit integer for exponent -// r34 on input contains 0 if output int is 32 bits, else output int is 64 bits -// -// predicate registers: -// p6 set if x is Nan, zero, or infinity -// p7 set if x negative -// p8 set if x positive -// p9 set if x double-extended denormal -// p10 set if int_type = 0, 32-bit integer -// p11 set if int_type = 1, 64-bit integer -// -// floating-point registers: -// f8 input, output -// f9 normalized x -// f10 signexp for significand result for x positive -// f11 signexp for significand result for x negative -// f12 2^64 - -.section .text -GLOBAL_LIBM_ENTRY(__libm_frexpf) - -// Set signexp for significand result for x>0 -// If x is a NaN, zero, or infinity, return it. -// Put 0 in the int pointer. -// x NAN, ZERO, INFINITY? -// Set signexp for significand result for x<0 -{ .mfi - mov r15 = 0x0fffe - fclass.m p6,p7 = f8, 0xe7 - mov r14 = 0x2fffe -} -// Form signexp of 2^64 in case x double-extended denormal -// Save the normalized value of input in f9 -// The normalization also sets fault flags and takes faults if necessary -{ .mfi - mov r20 = 0x1003f - fnorm.s0 f9 = f8 - nop.i 999 ;; -} - -// Move signexp for significand result for x>0 to FP reg -// Form 2^64 in case x double-extended denormal -{ .mmi - setf.exp f10 = r15 - setf.exp f12 = r20 - nop.i 999 ;; -} - -// Move signexp for significand result for x<0 to FP reg -// p7 if x<0, else p8 -// If x=0,nan,inf, set p10 if output int to be 32 bits, or set p11 if 64 bits -{ .mfi - setf.exp f11 = r14 -(p7) fcmp.lt.s0 p7,p8 = f8,f0 -(p6) cmp.eq.unc p10,p11 = r34, r0 ;; -} - -// If x NAN, ZERO, INFINITY, set *y=0 and exit -{ .mmb -(p10) st4 [r33] = r0 // Store *y=0 as 32-bit integer -(p11) st8 [r33] = r0 // Store *y=0 as 64-bit integer -(p6) br.ret.spnt b0 ;; -} - -// Form exponent mask -// Test for fnorm(x) denormal, means x double-extended denormal -{ .mfi - mov r17 = 0x1ffff - fclass.m p9,p0 = f9, 0x0b - nop.i 999 ;; -} - -// If x double-extended denormal add 64 to exponent bias for scaling -// If x double-extended denormal multiply x * 2^64 which is normal -// Set p10 if output int to be 32 bits, or set p11 if 64 bits -{ .mfi -(p9) add r15 = 64, r15 -(p9) fmpy.s0 f9 = f9, f12 - cmp.eq p10,p11 = r34, r0 ;; -} - -// true exponent stored to int pointer -// the bias is treated as 0xfffe instead of -// normal 0xffff because we want the significand -// to be in the range <=0.5 sig < 1.0 -// Store the value of the exponent at the pointer in r33 - -// If x>0 form significand result -{ .mfi - nop.m 999 -(p8) fmerge.se f8 = f10,f9 - nop.i 999 ;; -} - -// Get signexp of normalized x -// If x<0 form significand result -{ .mfi - getf.exp r16 = f9 -(p7) fmerge.se f8 = f11,f9 - nop.i 999 ;; -} - -// Get exp of normalized x -// Subtract off bias to get true exponent of x -{ .mmi - and r18 = r17,r16 ;; - sub r19 = r18,r15 - nop.i 999 ;; -} - -// Store int *y as a 32-bit integer -// Make the value a float -{ .mfi -(p10) st4 [r33] = r19 // Store *y as 32-bit integer - fnorm.s.s0 f8 = f8 - nop.i 999 -} -{ .mfb -(p11) st8 [r33] = r19 // Store *y as 64-bit integer - nop.f 999 - br.ret.sptk b0 ;; -} - -GLOBAL_LIBM_END(__libm_frexpf) diff --git a/sysdeps/ia64/fpu/libm_frexpl.S b/sysdeps/ia64/fpu/libm_frexpl.S deleted file mode 100644 index 3c3bba0822..0000000000 --- a/sysdeps/ia64/fpu/libm_frexpl.S +++ /dev/null @@ -1,209 +0,0 @@ -.file "libm_frexpl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 03/20/00 Improved speed -// 06/01/00 Fixed bug when x a double-extended denormal -// 12/08/00 Corrected label on .endp -// 01/23/02 Added handling for int 32 or 64 bits -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// long double __libm_frexpl(long double x, int* y, int int_type) -// input floating point f8, pointer to y (r34), int int_type (r35) -// output floating point f8, returns the fraction of x, 0.5 <= fraction < 1.0 -// output int* y, returns the true exponent of x -// -// int_type = 0 if int is 32 bits -// int_type = 1 if int is 64 bits -// -// int* y is returned as a 32 bit integer if int_type = 0 -// int* y is returned as a 64 bit integer if int_type = 1 -// -// Overview of operation -//============================================================== -// break a floating point x number into fraction and an exponent -// The fraction is returned as a long double -// The exponent is returned as an integer pointed to by y -// This is a true (not a biased exponent) but 0fffe is subtracted -// as a bias instead of 0xffff. This is because the fraction returned -// is between 0.5 and 1.0, not the expected IEEE range. -// -// The fraction is 0.5 <= fraction < 1.0 -// -// Registers used -//============================================================== -// -// general registers: -// r14 exponent bias for x negative -// r15 exponent bias for x positive -// r16 signexp of x -// r17 exponent mask -// r18 exponent of x -// r19 exponent result -// r20 signexp of 2^64 -// r32-33 on input contains the 80-bit IEEE long double that is in f8 -// r34 on input pointer to 32-bit or 64-bit integer for exponent -// r35 on input contains 0 if output int is 32 bits, else output int is 64 bits -// -// predicate registers: -// p6 set if x is Nan, zero, or infinity -// p7 set if x negative -// p8 set if x positive -// p9 set if x double-extended denormal -// p10 set if int_type = 0, 32-bit integer -// p11 set if int_type = 1, 64-bit integer -// -// floating-point registers: -// f8 input, output -// f9 normalized x -// f10 signexp for significand result for x positive -// f11 signexp for significand result for x negative -// f12 2^64 - -.section .text -GLOBAL_LIBM_ENTRY(__libm_frexpl) - -// Set signexp for significand result for x>0 -// If x is a NaN, zero, or infinity, return it. -// Put 0 in the int pointer. -// x NAN, ZERO, INFINITY? -// Set signexp for significand result for x<0 -{ .mfi - mov r15 = 0x0fffe - fclass.m p6,p7 = f8, 0xe7 - mov r14 = 0x2fffe -} -// Form signexp of 2^64 in case x double-extended denormal -// Save the normalized value of input in f9 -// The normalization also sets fault flags and takes faults if necessary -{ .mfi - mov r20 = 0x1003f - fnorm.s0 f9 = f8 - nop.i 999 ;; -} - -// Move signexp for significand result for x>0 to FP reg -// Form 2^64 in case x double-extended denormal -{ .mmi - setf.exp f10 = r15 - setf.exp f12 = r20 - nop.i 999 ;; -} - -// Move signexp for significand result for x<0 to FP reg -// p7 if x<0, else p8 -// If x=0,nan,inf, set p10 if output int to be 32 bits, or set p11 if 64 bits -{ .mfi - setf.exp f11 = r14 -(p7) fcmp.lt.s0 p7,p8 = f8,f0 -(p6) cmp.eq.unc p10,p11 = r35, r0 ;; -} - -// If x NAN, ZERO, INFINITY, set *y=0 and exit -{ .mmb -(p10) st4 [r34] = r0 // Store *y=0 as 32-bit integer -(p11) st8 [r34] = r0 // Store *y=0 as 64-bit integer -(p6) br.ret.spnt b0 ;; -} - -// Form exponent mask -// Test for fnorm(x) denormal, means x double-extended denormal -{ .mfi - mov r17 = 0x1ffff - fclass.m p9,p0 = f9, 0x0b - nop.i 999 ;; -} - -// If x double-extended denormal add 64 to exponent bias for scaling -// If x double-extended denormal multiply x * 2^64 which is normal -// Set p10 if output int to be 32 bits, or set p11 if 64 bits -{ .mfi -(p9) add r15 = 64, r15 -(p9) fmpy.s0 f9 = f9, f12 - cmp.eq p10,p11 = r35, r0 ;; -} - -// true exponent stored to int pointer -// the bias is treated as 0xfffe instead of -// normal 0xffff because we want the significand -// to be in the range <=0.5 sig < 1.0 -// Store the value of the exponent at the pointer in r34 - -// If x>0 form significand result -{ .mfi - nop.m 999 -(p8) fmerge.se f8 = f10,f9 - nop.i 999 ;; -} - -// Get signexp of normalized x -// If x<0 form significand result -{ .mfi - getf.exp r16 = f9 -(p7) fmerge.se f8 = f11,f9 - nop.i 999 ;; -} - -// Get exp of normalized x -// Subtract off bias to get true exponent of x -{ .mmi - and r18 = r17,r16 ;; - sub r19 = r18,r15 - nop.i 999 ;; -} - -// Store int *y as a 32-bit integer -// Make the value a long double -{ .mfi -(p10) st4 [r34] = r19 // Store *y as 32-bit integer - fnorm.s0 f8 = f8 - nop.i 999 -} -{ .mfb -(p11) st8 [r34] = r19 // Store *y as 64-bit integer - nop.f 999 - br.ret.sptk b0 ;; -} - -GLOBAL_LIBM_END(__libm_frexpl) diff --git a/sysdeps/ia64/fpu/libm_lgamma.S b/sysdeps/ia64/fpu/libm_lgamma.S deleted file mode 100644 index 6096319ba5..0000000000 --- a/sysdeps/ia64/fpu/libm_lgamma.S +++ /dev/null @@ -1,3623 +0,0 @@ -.file "libm_lgamma.s" - - -// Copyright (c) 2002 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2002 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,INCLUDING,BUT NOT -// LIMITED TO,THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT,INDIRECT,INCIDENTAL,SPECIAL, -// EXEMPLARY,OR CONSEQUENTIAL DAMAGES (INCLUDING,BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,DATA,OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY,WHETHER IN CONTRACT,STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE,EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code,and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 01/10/02 Initial version -// 01/25/02 Corrected error tag numbers -// 02/04/02 Added support of SIGN(GAMMA(x)) calculation -// 05/20/02 Cleaned up namespace and sf0 syntax -// 09/15/02 Fixed bug on the branch lgamma_negrecursion -// 10/21/02 Now it returns SIGN(GAMMA(x))=-1 for negative zero -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 07/22/03 Reformatted some data tables -// 03/31/05 Reformatted delimiters between data tables -// -//********************************************************************* -// -//********************************************************************* -// -// Function: __libm_lgamma(double x, int* signgam, int szsigngam) -// computes the principle value of the logarithm of the GAMMA function -// of x. Signum of GAMMA(x) is stored to memory starting at the address -// specified by the signgam. -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f6-f15 -// f32-f122 -// -// General Purpose Registers: -// r8-r11 -// r14-r31 -// r32-r36 -// r37-r40 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6-p15 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// __libm_lgamma(+inf) = +inf -// __libm_lgamma(-inf) = QNaN -// __libm_lgamma(+/-0) = +inf -// __libm_lgamma(x<0, x - integer) = +inf -// __libm_lgamma(SNaN) = QNaN -// __libm_lgamma(QNaN) = QNaN -// -//********************************************************************* -// -// Overview -// -// The method consists of three cases. -// -// If 512 <= x < OVERFLOW_BOUNDARY use case lgamma_pstirling; -// else if 1 < x < 512 use case lgamma_regular; -// else if -17 < x < 1 use case lgamma_negrecursion; -// else if -512 < x < -17 use case lgamma_negpoly; -// else if x < -512 use case lgamma_negstirling; -// else if x is close to negative -// roots of ln(GAMMA(x)) use case lgamma_negroots; -// -// -// Case 512 <= x < OVERFLOW_BOUNDARY -// --------------------------------- -// Here we use algorithm based on the Stirling formula: -// ln(GAMMA(x)) = ln(sqrt(2*Pi)) + (x-0.5)ln(x) - x + (W2 + W4/x^2)/x -// -// Case 1 < x < 512 -// ---------------- -// To calculate GAMMA(x) on this interval we use polynomial approximation -// on following intervals [0.875; 1.25), [1.25; 1.75), [1.75, 2.25), -// [2.25; 4), [2^i; 2^(i+1)), i=2..8 -// -// Following variants of approximation and argument reduction are used: -// 1. [0.875; 1.25) -// ln(GAMMA(x)) ~ (x-1.0)*P17(x-1.0) -// -// 2. [1.25; 1.75) -// ln(GAMMA(x)) ~ (x-LocalMinimun)*P17(x-LocalMinimun) -// -// 3. [1.75, 2.25) -// ln(GAMMA(x)) ~ (x-2.0)*P17(x-2.0) -// -// 4. [2.25; 4) -// ln(GAMMA(x)) ~ P22(x) -// -// 5. [2^i; 2^(i+1)), i=2..8 -// ln(GAMMA(x)) ~ P22((x-2^i)/2^i) -// -// Case -17 < x < 1 -// ---------------- -// Here we use the recursive formula: -// ln(GAMMA(x)) = ln(GAMMA(x+1)) - ln(x) -// -// Using this formula we reduce argument to base interval [1.0; 2.0] -// -// Case -512 < x < -17 -// -------------------- -// Here we use the formula: -// ln(GAMMA(-x)) = ln(Pi/(x*GAMMA(x)*sin(Pi*x))) = -// = -ln(x) - ln((GAMMA(x)) - ln(sin(Pi*r)/(Pi*r)) - ln(|r|) -// where r = x - rounded_to_nearest(x), i.e |r| <= 0.5 and -// ln(sin(Pi*r)/(Pi*r)) is approximated by 14-degree polynomial of r^2 -// -// -// Case x < -512 -// ------------- -// Here we use algorithm based on the Stirling formula: -// ln(GAMMA(-x)) = -ln(sqrt(2*Pi)) + (-x-0.5)ln(x) + x - (W2 + W4/x^2)/x - -// - ln(sin(Pi*r)/(Pi*r)) - ln(|r|) -// where r = x - rounded_to_nearest(x). -// -// Neighbourhoods of negative roots -// -------------------------------- -// Here we use polynomial approximation -// ln(GAMMA(x-x0)) = ln(GAMMA(x0)) + (x-x0)*P14(x-x0), -// where x0 is a root of ln(GAMMA(x)) rounded to nearest double -// precision number. -// - -//********************************************************************* - -FR_X = f10 -FR_Y = f1 // __libm_lgamma is single argument function -FR_RESULT = f8 - -FR_B11 = f6 -FR_B10 = f7 - -FR_int_N = f9 -FR_N = f10 -FR_P5 = f11 -FR_P4 = f12 -FR_P3 = f13 -FR_P2 = f14 -FR_NormX = f15 - -FR_Ln2 = f32 -FR_C01 = f33 -FR_A17 = f33 -FR_C00 = f34 -FR_Xp2 = f34 -FR_A00 = f34 -FR_A16 = f34 -FR_C11 = f35 -FR_A15 = f35 -FR_C10 = f36 -FR_Xp3 = f36 -FR_A14 = f36 -FR_B1 = f36 -FR_C21 = f37 -FR_A13 = f37 -FR_PR01 = f37 -FR_C20 = f38 -FR_Xp6 = f38 -FR_A12 = f38 -FR_C31 = f39 -FR_Xp7 = f39 -FR_B0 = f39 -FR_A11 = f39 -FR_C30 = f40 -FR_Xp8 = f40 -FR_A10 = f40 -FR_PR00 = f40 -FR_C41 = f41 -FR_Xp9 = f41 -FR_A9 = f41 -FR_PR11 = f41 -FR_C40 = f42 -FR_A8 = f42 -FR_C51 = f43 -FR_Xp11 = f43 -FR_A7 = f43 -FR_C50 = f44 -FR_C = f44 -FR_Xp12 = f44 -FR_A6 = f44 -FR_Xm2 = f45 -FR_Xp13 = f45 -FR_A5 = f45 -FR_PR10 = f45 -FR_C61 = f46 -FR_Xp14 = f46 -FR_A4 = f46 -FR_PR21 = f46 -FR_C60 = f47 -FR_Xp15 = f47 -FR_A3 = f47 -FR_PR20 = f47 -FR_C71 = f48 -FR_Xp16 = f48 -FR_A2 = f48 -FR_PR31 = f48 -FR_C70 = f49 -FR_Xp17 = f49 -FR_A1 = f49 -FR_PR30 = f49 -FR_C81 = f50 -FR_B17 = f50 -FR_A0 = f50 -FR_C80 = f51 -FR_B16 = f51 -FR_C91 = f52 -FR_B15 = f52 -FR_C90 = f53 -FR_B14 = f53 -FR_CA1 = f54 -FR_B13 = f54 -FR_CA0 = f55 -FR_B12 = f55 -FR_CN = f56 -FR_Qlo = f56 -FR_PRN = f56 -FR_B7 = f57 -FR_B6 = f58 -FR_Qhi = f59 -FR_x = f60 -FR_x2 = f61 -FR_TpNxLn2 = f62 -FR_W2 = f63 -FR_x4 = f64 -FR_r4 = f64 -FR_x8 = f65 -FR_r8 = f65 -FR_r05 = f66 -FR_Xm05 = f66 -FR_B5 = f66 -FR_LnSqrt2Pi = f67 -FR_B4 = f67 -FR_InvX = f68 -FR_B3 = f68 -FR_InvX2 = f69 -FR_B2 = f69 -FR_W4 = f70 -FR_OvfBound = f71 -FR_05 = f72 -FR_LocalMin = f73 -FR_tmp = f73 -FR_LnX = f74 -FR_Xf = f75 -FR_InvXf = f76 -FR_rf = f77 -FR_rf2 = f78 -FR_P54f = f79 -FR_P32f = f80 -FR_rf3 = f81 -FR_P10f = f82 -FR_TpNxLn2f = f83 -FR_Nf = f84 -FR_LnXf = f85 -FR_int_Nf = f86 -FR_Tf = f87 -FR_Xf2 = f88 -FR_Xp10 = f89 -FR_w3 = f90 -FR_S28 = f90 -FR_w2 = f91 -FR_S26 = f91 -FR_w6 = f92 -FR_S24 = f92 -FR_w4 = f93 -FR_S22 = f93 -FR_w = f94 -FR_S20 = f94 -FR_Q8 = f95 -FR_S18 = f95 -FR_Q7 = f96 -FR_S16 = f96 -FR_Q4 = f97 -FR_S14 = f97 -FR_Q3 = f98 -FR_S12 = f98 -FR_Q6 = f99 -FR_S10 = f99 -FR_Q5 = f100 -FR_S8 = f100 -FR_Q2 = f101 -FR_S6 = f101 -FR_Root = f101 -FR_S4 = f102 -FR_Q1 = f102 -FR_S2 = f103 -FR_Xp1 = f104 -FR_Xf4 = f105 -FR_Xf8 = f106 -FR_Xfr = f107 -FR_Xf6 = f108 -FR_Ntrunc = f109 -FR_B9 = f110 -FR_2 = f110 -FR_B8 = f111 -FR_3 = f111 -FR_5 = f112 -FR_Xp4 = f113 -FR_Xp5 = f114 -FR_P54 = f115 -FR_P32 = f116 -FR_P10 = f117 -FR_r = f118 -FR_r2 = f119 -FR_r3 = f120 -FR_T = f121 -FR_int_Ntrunc = f122 - -//=================================== - -GR_TAG = r8 -GR_ExpMask = r8 -GR_ExpBias = r9 -GR_ad_Roots = r9 -GR_Expf = r10 -GR_Arg = r10 -GR_SignExp = r11 -GR_ArgXfr = r11 - -GR_Exp = r14 -GR_Arg125 = r14 -GR_RootInd = r14 -GR_ArgAsIs = r15 -GR_Arg175 = r15 -GR_Sig = r16 -GR_Ind = r17 -GR_ad_Dx = r17 -GR_ad_1 = r18 -GR_SignExp_w = r19 -GR_2_25 = r19 -GR_Arg025 = r19 -GR_Arg15 = r19 -GR_Arg17 = r19 -GR_Exp_w = r19//21 -GR_ad_2 = r20 -GR_2xDx = r21 -GR_SignOfGamma = r21 -GR_fff9 = r22 -GR_Offs = r22 -GR_ad_Co7 = r23 -GR_Arg075 = r23 -GR_Arg0875 = r23 -GR_ad_T = r24 -GR_ad_Root = r24 -GR_Ind = r24 -GR_ad_Co = r25 -GR_ad_Ce = r26 -GR_ad_Ce7 = r27 -GR_Arg05 = r27 -GR_Offs7 = r28 -GR_ArgXfrAsIs = r28 -GR_ExpOf2 = r29 -GR_ad_LnT = r29 -GR_Dx = r29 -GR_ExpOf256 = r30 -GR_0x30033 = r30 -GR_Root = r30 -GR_PseudoRoot = r30 -GR_ad_Data = r31 -GR_ad_SignGam = r31 - - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - - -// Data tables -//============================================================== - -RODATA -.align 16 -LOCAL_OBJECT_START(lgamma_data) -// polynomial approximation of ln(GAMMA(x)), 2.25 <= x < 512 -// [2.25; 4) -data8 0xF888E8D7892718A2,0xC001 // C01 -data8 0xF62F273BA12A4639,0x3FFD // C11 -data8 0xA93AC50A37EC8D38,0xBFFC // C21 -data8 0xB4CC43D2C161E057,0xBFFF // C31 -data8 0xC6AC672F0C1392C7,0xC000 // C41 -data8 0xA292B9AE3276942E,0xC001 // C51 -data8 0xE554E4CCCA6C7B7B,0xC001 // C61 -data8 0x92F0F55FBC87F860,0xC002 // C71 -data8 0xAF60D0112843F6C1,0xC002 // C81 -data8 0xC5956500FA3D92E7,0xC002 // C91 -data8 0xD3B22CCBD8587750,0xC002 // CA1 -data8 0xD888B6CF34159B54,0x4001 // C00 -data8 0xBCB79C8329FD9F44,0x3FFE // C10 -data8 0xCB8896FAD69C455D,0x4000 // C20 -data8 0xE510A424639EBF5E,0x4001 // C30 -data8 0xC65ED41B097486B3,0x4002 // C40 -// [4; 8) -data8 0x9F1F3C822D03080E,0xC001 // C01 -data8 0x941CACFA9C0FA8A6,0xC001 // C11 -data8 0xFE34336391D99CB7,0xC000 // C21 -data8 0xC40BAEAA165F81A1,0xC000 // C31 -data8 0xFE3AE166E9B4DE8F,0xBFFF // C41 -data8 0xD744F91AF7DAF873,0xBFFE // C51 -data8 0x87871851E9C32D02,0x3FFD // C61 -data8 0x9C93C03C502E808F,0x3FFF // C71 -data8 0xF78BED07501D6A8E,0x3FFF // C81 -data8 0x92FE41BA8BEADF70,0x4000 // C91 -data8 0xA021878E1903A2C6,0x3FFF // CA1 -data8 0xC85EFAC379FAFEE2,0x4001 // C00 -data8 0xC10D7AAB7CEC7FF2,0x4001 // C10 -data8 0xB3537BDF603E454C,0x4001 // C20 -data8 0xA0D44E3D5BBE44C4,0x4001 // C30 -data8 0x8B9C229B6241E7B3,0x4001 // C40 -// [8; 16) -data8 0xD16AB33AEC220DF6,0x3FFF // C01 -data8 0x987483646E150BCD,0x4000 // C11 -data8 0x80C10A24C863999B,0x4000 // C21 -data8 0xA39A8EB6F8AACE75,0x3FFF // C31 -data8 0x93E04A1379BEC764,0x3FFD // C41 -data8 0xD9F59C4BD3A69BD1,0xBFFE // C51 -data8 0x82094EC891179B1A,0xC000 // C61 -data8 0xC90CFE3A24F70659,0xC000 // C71 -data8 0x827984EA7C155184,0xC001 // C81 -data8 0x981BFDF79D1E0D80,0xC001 // C91 -data8 0xA37209A8B97D230D,0xC001 // CA1 -data8 0xAA1989737D6BA66D,0x3FFE // C00 -data8 0xDBC013A351630AF8,0x3FFF // C10 -data8 0x8B8D47698299389D,0x4000 // C20 -data8 0xACCDD1315DE06EB0,0x4000 // C30 -data8 0xD3414A5AC81BBB2D,0x4000 // C40 -// [16; 32) -data8 0xECB2B0BE75C5F995,0x3FFF // C01 -data8 0x9DD28BD6DBC96500,0x4000 // C11 -data8 0x8521431B99C6244F,0x4000 // C21 -data8 0xA95F92612B8413C3,0x3FFF // C31 -data8 0x9C76E643B22D9544,0x3FFD // C41 -data8 0xDD90EA99417C8038,0xBFFE // C51 -data8 0x84EA6B6D32E5F906,0xC000 // C61 -data8 0xCDBFE499E05AA622,0xC000 // C71 -data8 0x8594A7DE35427100,0xC001 // C81 -data8 0x9BC1CB2C10DC702F,0xC001 // C91 -data8 0xA7602268762666B0,0xC001 // CA1 -data8 0xDA082BCC6BDB8F7B,0x3FFE // C00 -data8 0xEEBFE1C99322B85E,0x3FFF // C10 -data8 0x96FED4C785361946,0x4000 // C20 -data8 0xB9E3A7207C16B2FE,0x4000 // C30 -data8 0xE1E8170CED48E2C7,0x4000 // C40 -// [32; 64) -data8 0xFD481EB9AEDD53E7,0x3FFF // C01 -data8 0xA216FB66AC8C53E1,0x4000 // C11 -data8 0x885FF935787553BA,0x4000 // C21 -data8 0xAD471CD89A313327,0x3FFF // C31 -data8 0x9FF13FBA139D21E0,0x3FFD // C41 -data8 0xE25E1663A6EE0266,0xBFFE // C51 -data8 0x87BE51DD5D262FA2,0xC000 // C61 -data8 0xD211A9D4CCE55696,0xC000 // C71 -data8 0x885BEFC29FDED3C9,0xC001 // C81 -data8 0x9EFA48E6367A67F6,0xC001 // C91 -data8 0xAAD3978FC0791297,0xC001 // CA1 -data8 0xF96D210DF37A0AEA,0x3FFE // C00 -data8 0xFE11DC6783917C82,0x3FFF // C10 -data8 0x9FFCD928291B7DDE,0x4000 // C20 -data8 0xC4518F4A80E09AE1,0x4000 // C30 -data8 0xEDDFE9E0FD297C63,0x4000 // C40 -// [64; 128) -data8 0x840E2E62609B0AD3,0x4000 // C01 -data8 0xA5275A0DD0D3DDF8,0x4000 // C11 -data8 0x8AADC6ABFC441731,0x4000 // C21 -data8 0xB041C6696BE90E50,0x3FFF // C31 -data8 0xA4A8C9153F4B037E,0x3FFD // C41 -data8 0xE3C6A461A7B86736,0xBFFE // C51 -data8 0x89047681C6DE7673,0xC000 // C61 -data8 0xD42DF77A480092DF,0xC000 // C71 -data8 0x89C25D17F086FB20,0xC001 // C81 -data8 0xA09F907D02E34EC7,0xC001 // C91 -data8 0xAC998A9CB79805B7,0xC001 // CA1 -data8 0x875CC9B69AE964CC,0x3FFF // C00 -data8 0x847836BA85DD4C12,0x4000 // C10 -data8 0xA5F3CB2B32E74936,0x4000 // C20 -data8 0xCAE2197C96CB5A0F,0x4000 // C30 -data8 0xF50F7EB60DE5CD09,0x4000 // C40 -// [128; 256) -data8 0x87D9065DD1876926,0x4000 // C01 -data8 0xA781C28FDAD7CC25,0x4000 // C11 -data8 0x8C6A4FCE35A7EC8D,0x4000 // C21 -data8 0xB27BA081728354F9,0x3FFF // C31 -data8 0xA82FEA7124B0EB2B,0x3FFD // C41 -data8 0xE4C996E42ECBF77A,0xBFFE // C51 -data8 0x89F1A92C84FA538F,0xC000 // C61 -data8 0xD5B6CFF7DB7F6070,0xC000 // C71 -data8 0x8AC6B561FAE38B66,0xC001 // C81 -data8 0xA1D1505C438D8F46,0xC001 // C91 -data8 0xADE2DC1C924FEC81,0xC001 // CA1 -data8 0x8EF6CC62A7E0EB5A,0x3FFF // C00 -data8 0x88A2FFC0ABCB00C0,0x4000 // C10 -data8 0xAA6EA8FCB75B065B,0x4000 // C20 -data8 0xCFC4B82B3D5C9363,0x4000 // C30 -data8 0xFA60FD85DE861771,0x4000 // C40 -// [256; 512) -data8 0x8AAA7CE4ED5C1EFD,0x4000 // C01 -data8 0xA9679234FB56F1E1,0x4000 // C11 -data8 0x8DCE02287789D841,0x4000 // C21 -data8 0xB44328EF30A8DE7E,0x3FFF // C31 -data8 0xAB0DC564BFA1AB12,0x3FFD // C41 -data8 0xE5882B16FCF2D3CB,0xBFFE // C51 -data8 0x8AA7F48993006A86,0xC000 // C61 -data8 0xD6E63752D192750D,0xC000 // C71 -data8 0x8B90080B17853295,0xC001 // C81 -data8 0xA2BDD4253128D1AB,0xC001 // C91 -data8 0xAEE1A042F96B8121,0xC001 // CA1 -data8 0x94A9C37A42E43BA7,0x3FFF // C00 -data8 0x8BFA54E703878F5A,0x4000 // C10 -data8 0xADFA426DDF14647B,0x4000 // C20 -data8 0xD39C7F7B3958EAF0,0x4000 // C30 -data8 0xFE8C3987853C01E3,0x4000 // C40 -// -// [2.25; 4) -data8 0x943AF77763601441,0x4003 // C50 -data8 0xC8A93F9ECB06E891,0x4003 // C60 -data8 0xFC2E5A4AD33DE19D,0x4003 // C70 -data8 0x9526B75B38670119,0x4004 // C80 -data8 0xA7675879D68B587E,0x4004 // C90 -data8 0xB31DFA672D7FB8C0,0x4004 // CA0 -data8 0x83A27775D86F9A81,0xBFD7 // CN -// [4; 8) -data8 0xEB8049BA5E79ADA3,0x4000 // C50 -data8 0xC20C95EA99037228,0x4000 // C60 -data8 0x9D4A8C864053CEB8,0x4000 // C70 -data8 0xFC7716544AB0C5C9,0x3FFF // C80 -data8 0xC7EB985259EABA5F,0x3FFF // C90 -data8 0xC042FB3B4C95096D,0x3FFD // CA0 -data8 0xCC2A7F930856177B,0x3FEE // CN -// [8; 16) -data8 0xFE1903679D078C7A,0x4000 // C50 -data8 0x957C221AB90171F1,0x4001 // C60 -data8 0xAB2C53B2A78F4031,0x4001 // C70 -data8 0xBE080AE6063AE387,0x4001 // C80 -data8 0xCC019A0311605CB9,0x4001 // C90 -data8 0xD3739D85A12C8ADF,0x4001 // CA0 -data8 0x81FA4D2B7BD7A82D,0x3FEF // CN -// [16; 32) -data8 0x871F69E2DD221F02,0x4001 // C50 -data8 0x9E3EF2D477442A9C,0x4001 // C60 -data8 0xB48733582B3C82C5,0x4001 // C70 -data8 0xC7DB9B3C25854A2A,0x4001 // C80 -data8 0xD628B87975BE898F,0x4001 // C90 -data8 0xDDC569C321FF119C,0x4001 // CA0 -data8 0xB27B65560DF7ADA7,0x3FEF // CN -// [32; 64) -data8 0x8DE4127349719B22,0x4001 // C50 -data8 0xA5C30A7760F5FBB2,0x4001 // C60 -data8 0xBCB4096055AA2A4E,0x4001 // C70 -data8 0xD08F5F2FB4E7B899,0x4001 // C80 -data8 0xDF39ED39DC91F9CF,0x4001 // C90 -data8 0xE7063E45322F072E,0x4001 // CA0 -data8 0x85A9E11DDDDE67C8,0x3FF0 // CN -// [64; 128) -data8 0x91CA191EB80E8893,0x4001 // C50 -data8 0xA9F1D5A55397334A,0x4001 // C60 -data8 0xC1222710295094E3,0x4001 // C70 -data8 0xD52FFABBA6CBE5C6,0x4001 // C80 -data8 0xE3FD9D5282052E1D,0x4001 // C90 -data8 0xEBDBE47BB662F3EF,0x4001 // CA0 -data8 0xEF889F489D88FD31,0x3FF0 // CN -// [128; 256) -data8 0x94AA029C2286F8D2,0x4001 // C50 -data8 0xAD0549E55A72389F,0x4001 // C60 -data8 0xC4628899DAF94BA4,0x4001 // C70 -data8 0xD89432A4161C72CB,0x4001 // C80 -data8 0xE77ABA75E9C38F3A,0x4001 // C90 -data8 0xEF65BFFFF71347FF,0x4001 // CA0 -data8 0xE2627460064D918D,0x3FF1 // CN -// [256; 512) -data8 0x96E9890D722C2FC1,0x4001 // C50 -data8 0xAF6C2236F6A1CEC4,0x4001 // C60 -data8 0xC6EBB8C9F987D20D,0x4001 // C70 -data8 0xDB38CEFD5EF328CC,0x4001 // C80 -data8 0xEA3265DC66C9A0B4,0x4001 // C90 -data8 0xF2272D6B368C70B1,0x4001 // CA0 -data8 0xDBFF93ECEBCEF1F3,0x3FF2 // CN -// -data8 0x3FDD8B618D5AF8FE // point of local minimum on [1;2] -data8 0x3FE0000000000000 // 0.5 -data8 0xBFC5555DA7212371 // P5 -data8 0x3FC999A19EEF5826 // P4 -data8 0xb17217f7d1cf79ac,0x3ffe // ln(2) -data8 0xEB3F8E4325F5A535,0x3FFE // ln(sqrt(4*arcsin(1))) -// -data8 0xBFCFFFFFFFFEF009 // P3 -data8 0x3FD555555554ECB2 // P2 -data8 0xBF66C16C16C16C17 // W4=B4/12=-1/360 -data8 0x7F5754D9278B51A8 // overflow boundary (first inf result) -data8 0xAAAAAAAAAAAAAAAB,0x3FFB // W2=B2/2=1/12 -// -data8 0x3FBC756AC654273B // Q8 -data8 0xBFC001A42489AB4D // Q7 -data8 0x3FC99999999A169B // Q4 -data8 0xBFD00000000019AC // Q3 -data8 0x3FC2492479AA0DF8 // Q6 -data8 0xBFC5555544986F52 // Q5 -data8 0x3FD5555555555555 // Q2 -data8 0xBFE0000000000000 // Q1, P1 = -0.5 -// -data8 0x80200aaeac44ef38,0x3ff6 // ln(1/frcpa(1+ 0/2^-8)) -data8 0xc09090a2c35aa070,0x3ff7 // ln(1/frcpa(1+ 1/2^-8)) -data8 0xa0c94fcb41977c75,0x3ff8 // ln(1/frcpa(1+ 2/2^-8)) -data8 0xe18b9c263af83301,0x3ff8 // ln(1/frcpa(1+ 3/2^-8)) -data8 0x8d35c8d6399c30ea,0x3ff9 // ln(1/frcpa(1+ 4/2^-8)) -data8 0xadd4d2ecd601cbb8,0x3ff9 // ln(1/frcpa(1+ 5/2^-8)) -data8 0xce95403a192f9f01,0x3ff9 // ln(1/frcpa(1+ 6/2^-8)) -data8 0xeb59392cbcc01096,0x3ff9 // ln(1/frcpa(1+ 7/2^-8)) -data8 0x862c7d0cefd54c5d,0x3ffa // ln(1/frcpa(1+ 8/2^-8)) -data8 0x94aa63c65e70d499,0x3ffa // ln(1/frcpa(1+ 9/2^-8)) -data8 0xa54a696d4b62b382,0x3ffa // ln(1/frcpa(1+ 10/2^-8)) -data8 0xb3e4a796a5dac208,0x3ffa // ln(1/frcpa(1+ 11/2^-8)) -data8 0xc28c45b1878340a9,0x3ffa // ln(1/frcpa(1+ 12/2^-8)) -data8 0xd35c55f39d7a6235,0x3ffa // ln(1/frcpa(1+ 13/2^-8)) -data8 0xe220f037b954f1f5,0x3ffa // ln(1/frcpa(1+ 14/2^-8)) -data8 0xf0f3389b036834f3,0x3ffa // ln(1/frcpa(1+ 15/2^-8)) -data8 0xffd3488d5c980465,0x3ffa // ln(1/frcpa(1+ 16/2^-8)) -data8 0x87609ce2ed300490,0x3ffb // ln(1/frcpa(1+ 17/2^-8)) -data8 0x8ede9321e8c85927,0x3ffb // ln(1/frcpa(1+ 18/2^-8)) -data8 0x96639427f2f8e2f4,0x3ffb // ln(1/frcpa(1+ 19/2^-8)) -data8 0x9defad3e8f73217b,0x3ffb // ln(1/frcpa(1+ 20/2^-8)) -data8 0xa582ebd50097029c,0x3ffb // ln(1/frcpa(1+ 21/2^-8)) -data8 0xac06dbe75ab80fee,0x3ffb // ln(1/frcpa(1+ 22/2^-8)) -data8 0xb3a78449b2d3ccca,0x3ffb // ln(1/frcpa(1+ 23/2^-8)) -data8 0xbb4f79635ab46bb2,0x3ffb // ln(1/frcpa(1+ 24/2^-8)) -data8 0xc2fec93a83523f3f,0x3ffb // ln(1/frcpa(1+ 25/2^-8)) -data8 0xc99af2eaca4c4571,0x3ffb // ln(1/frcpa(1+ 26/2^-8)) -data8 0xd1581106472fa653,0x3ffb // ln(1/frcpa(1+ 27/2^-8)) -data8 0xd8002560d4355f2e,0x3ffb // ln(1/frcpa(1+ 28/2^-8)) -data8 0xdfcb43b4fe508632,0x3ffb // ln(1/frcpa(1+ 29/2^-8)) -data8 0xe67f6dff709d4119,0x3ffb // ln(1/frcpa(1+ 30/2^-8)) -data8 0xed393b1c22351280,0x3ffb // ln(1/frcpa(1+ 31/2^-8)) -data8 0xf5192bff087bcc35,0x3ffb // ln(1/frcpa(1+ 32/2^-8)) -data8 0xfbdf4ff6dfef2fa3,0x3ffb // ln(1/frcpa(1+ 33/2^-8)) -data8 0x81559a97f92f9cc7,0x3ffc // ln(1/frcpa(1+ 34/2^-8)) -data8 0x84be72bce90266e8,0x3ffc // ln(1/frcpa(1+ 35/2^-8)) -data8 0x88bc74113f23def2,0x3ffc // ln(1/frcpa(1+ 36/2^-8)) -data8 0x8c2ba3edf6799d11,0x3ffc // ln(1/frcpa(1+ 37/2^-8)) -data8 0x8f9dc92f92ea08b1,0x3ffc // ln(1/frcpa(1+ 38/2^-8)) -data8 0x9312e8f36efab5a7,0x3ffc // ln(1/frcpa(1+ 39/2^-8)) -data8 0x968b08643409ceb6,0x3ffc // ln(1/frcpa(1+ 40/2^-8)) -data8 0x9a062cba08a1708c,0x3ffc // ln(1/frcpa(1+ 41/2^-8)) -data8 0x9d845b3abf95485c,0x3ffc // ln(1/frcpa(1+ 42/2^-8)) -data8 0xa06fd841bc001bb4,0x3ffc // ln(1/frcpa(1+ 43/2^-8)) -data8 0xa3f3a74652fbe0db,0x3ffc // ln(1/frcpa(1+ 44/2^-8)) -data8 0xa77a8fb2336f20f5,0x3ffc // ln(1/frcpa(1+ 45/2^-8)) -data8 0xab0497015d28b0a0,0x3ffc // ln(1/frcpa(1+ 46/2^-8)) -data8 0xae91c2be6ba6a615,0x3ffc // ln(1/frcpa(1+ 47/2^-8)) -data8 0xb189d1b99aebb20b,0x3ffc // ln(1/frcpa(1+ 48/2^-8)) -data8 0xb51cced5de9c1b2c,0x3ffc // ln(1/frcpa(1+ 49/2^-8)) -data8 0xb819bee9e720d42f,0x3ffc // ln(1/frcpa(1+ 50/2^-8)) -data8 0xbbb2a0947b093a5d,0x3ffc // ln(1/frcpa(1+ 51/2^-8)) -data8 0xbf4ec1505811684a,0x3ffc // ln(1/frcpa(1+ 52/2^-8)) -data8 0xc2535bacfa8975ff,0x3ffc // ln(1/frcpa(1+ 53/2^-8)) -data8 0xc55a3eafad187eb8,0x3ffc // ln(1/frcpa(1+ 54/2^-8)) -data8 0xc8ff2484b2c0da74,0x3ffc // ln(1/frcpa(1+ 55/2^-8)) -data8 0xcc0b1a008d53ab76,0x3ffc // ln(1/frcpa(1+ 56/2^-8)) -data8 0xcfb6203844b3209b,0x3ffc // ln(1/frcpa(1+ 57/2^-8)) -data8 0xd2c73949a47a19f5,0x3ffc // ln(1/frcpa(1+ 58/2^-8)) -data8 0xd5daae18b49d6695,0x3ffc // ln(1/frcpa(1+ 59/2^-8)) -data8 0xd8f08248cf7e8019,0x3ffc // ln(1/frcpa(1+ 60/2^-8)) -data8 0xdca7749f1b3e540e,0x3ffc // ln(1/frcpa(1+ 61/2^-8)) -data8 0xdfc28e033aaaf7c7,0x3ffc // ln(1/frcpa(1+ 62/2^-8)) -data8 0xe2e012a5f91d2f55,0x3ffc // ln(1/frcpa(1+ 63/2^-8)) -data8 0xe600064ed9e292a8,0x3ffc // ln(1/frcpa(1+ 64/2^-8)) -data8 0xe9226cce42b39f60,0x3ffc // ln(1/frcpa(1+ 65/2^-8)) -data8 0xec4749fd97a28360,0x3ffc // ln(1/frcpa(1+ 66/2^-8)) -data8 0xef6ea1bf57780495,0x3ffc // ln(1/frcpa(1+ 67/2^-8)) -data8 0xf29877ff38809091,0x3ffc // ln(1/frcpa(1+ 68/2^-8)) -data8 0xf5c4d0b245cb89be,0x3ffc // ln(1/frcpa(1+ 69/2^-8)) -data8 0xf8f3afd6fcdef3aa,0x3ffc // ln(1/frcpa(1+ 70/2^-8)) -data8 0xfc2519756be1abc7,0x3ffc // ln(1/frcpa(1+ 71/2^-8)) -data8 0xff59119f503e6832,0x3ffc // ln(1/frcpa(1+ 72/2^-8)) -data8 0x8147ce381ae0e146,0x3ffd // ln(1/frcpa(1+ 73/2^-8)) -data8 0x82e45f06cb1ad0f2,0x3ffd // ln(1/frcpa(1+ 74/2^-8)) -data8 0x842f5c7c573cbaa2,0x3ffd // ln(1/frcpa(1+ 75/2^-8)) -data8 0x85ce471968c8893a,0x3ffd // ln(1/frcpa(1+ 76/2^-8)) -data8 0x876e8305bc04066d,0x3ffd // ln(1/frcpa(1+ 77/2^-8)) -data8 0x891012678031fbb3,0x3ffd // ln(1/frcpa(1+ 78/2^-8)) -data8 0x8a5f1493d766a05f,0x3ffd // ln(1/frcpa(1+ 79/2^-8)) -data8 0x8c030c778c56fa00,0x3ffd // ln(1/frcpa(1+ 80/2^-8)) -data8 0x8da85df17e31d9ae,0x3ffd // ln(1/frcpa(1+ 81/2^-8)) -data8 0x8efa663e7921687e,0x3ffd // ln(1/frcpa(1+ 82/2^-8)) -data8 0x90a22b6875c6a1f8,0x3ffd // ln(1/frcpa(1+ 83/2^-8)) -data8 0x91f62cc8f5d24837,0x3ffd // ln(1/frcpa(1+ 84/2^-8)) -data8 0x93a06cfc3857d980,0x3ffd // ln(1/frcpa(1+ 85/2^-8)) -data8 0x94f66d5e6fd01ced,0x3ffd // ln(1/frcpa(1+ 86/2^-8)) -data8 0x96a330156e6772f2,0x3ffd // ln(1/frcpa(1+ 87/2^-8)) -data8 0x97fb3582754ea25b,0x3ffd // ln(1/frcpa(1+ 88/2^-8)) -data8 0x99aa8259aad1bbf2,0x3ffd // ln(1/frcpa(1+ 89/2^-8)) -data8 0x9b0492f6227ae4a8,0x3ffd // ln(1/frcpa(1+ 90/2^-8)) -data8 0x9c5f8e199bf3a7a5,0x3ffd // ln(1/frcpa(1+ 91/2^-8)) -data8 0x9e1293b9998c1daa,0x3ffd // ln(1/frcpa(1+ 92/2^-8)) -data8 0x9f6fa31e0b41f308,0x3ffd // ln(1/frcpa(1+ 93/2^-8)) -data8 0xa0cda11eaf46390e,0x3ffd // ln(1/frcpa(1+ 94/2^-8)) -data8 0xa22c8f029cfa45aa,0x3ffd // ln(1/frcpa(1+ 95/2^-8)) -data8 0xa3e48badb7856b34,0x3ffd // ln(1/frcpa(1+ 96/2^-8)) -data8 0xa5459a0aa95849f9,0x3ffd // ln(1/frcpa(1+ 97/2^-8)) -data8 0xa6a79c84480cfebd,0x3ffd // ln(1/frcpa(1+ 98/2^-8)) -data8 0xa80a946d0fcb3eb2,0x3ffd // ln(1/frcpa(1+ 99/2^-8)) -data8 0xa96e831a3ea7b314,0x3ffd // ln(1/frcpa(1+100/2^-8)) -data8 0xaad369e3dc544e3b,0x3ffd // ln(1/frcpa(1+101/2^-8)) -data8 0xac92e9588952c815,0x3ffd // ln(1/frcpa(1+102/2^-8)) -data8 0xadfa035aa1ed8fdc,0x3ffd // ln(1/frcpa(1+103/2^-8)) -data8 0xaf6219eae1ad6e34,0x3ffd // ln(1/frcpa(1+104/2^-8)) -data8 0xb0cb2e6d8160f753,0x3ffd // ln(1/frcpa(1+105/2^-8)) -data8 0xb2354249ad950f72,0x3ffd // ln(1/frcpa(1+106/2^-8)) -data8 0xb3a056e98ef4a3b4,0x3ffd // ln(1/frcpa(1+107/2^-8)) -data8 0xb50c6dba52c6292a,0x3ffd // ln(1/frcpa(1+108/2^-8)) -data8 0xb679882c33876165,0x3ffd // ln(1/frcpa(1+109/2^-8)) -data8 0xb78c07429785cedc,0x3ffd // ln(1/frcpa(1+110/2^-8)) -data8 0xb8faeb8dc4a77d24,0x3ffd // ln(1/frcpa(1+111/2^-8)) -data8 0xba6ad77eb36ae0d6,0x3ffd // ln(1/frcpa(1+112/2^-8)) -data8 0xbbdbcc915e9bee50,0x3ffd // ln(1/frcpa(1+113/2^-8)) -data8 0xbd4dcc44f8cf12ef,0x3ffd // ln(1/frcpa(1+114/2^-8)) -data8 0xbec0d81bf5b531fa,0x3ffd // ln(1/frcpa(1+115/2^-8)) -data8 0xc034f19c139186f4,0x3ffd // ln(1/frcpa(1+116/2^-8)) -data8 0xc14cb69f7c5e55ab,0x3ffd // ln(1/frcpa(1+117/2^-8)) -data8 0xc2c2abbb6e5fd56f,0x3ffd // ln(1/frcpa(1+118/2^-8)) -data8 0xc439b2c193e6771e,0x3ffd // ln(1/frcpa(1+119/2^-8)) -data8 0xc553acb9d5c67733,0x3ffd // ln(1/frcpa(1+120/2^-8)) -data8 0xc6cc96e441272441,0x3ffd // ln(1/frcpa(1+121/2^-8)) -data8 0xc8469753eca88c30,0x3ffd // ln(1/frcpa(1+122/2^-8)) -data8 0xc962cf3ce072b05c,0x3ffd // ln(1/frcpa(1+123/2^-8)) -data8 0xcadeba8771f694aa,0x3ffd // ln(1/frcpa(1+124/2^-8)) -data8 0xcc5bc08d1f72da94,0x3ffd // ln(1/frcpa(1+125/2^-8)) -data8 0xcd7a3f99ea035c29,0x3ffd // ln(1/frcpa(1+126/2^-8)) -data8 0xcef93860c8a53c35,0x3ffd // ln(1/frcpa(1+127/2^-8)) -data8 0xd0192f68a7ed23df,0x3ffd // ln(1/frcpa(1+128/2^-8)) -data8 0xd19a201127d3c645,0x3ffd // ln(1/frcpa(1+129/2^-8)) -data8 0xd2bb92f4061c172c,0x3ffd // ln(1/frcpa(1+130/2^-8)) -data8 0xd43e80b2ee8cc8fc,0x3ffd // ln(1/frcpa(1+131/2^-8)) -data8 0xd56173601fc4ade4,0x3ffd // ln(1/frcpa(1+132/2^-8)) -data8 0xd6e6637efb54086f,0x3ffd // ln(1/frcpa(1+133/2^-8)) -data8 0xd80ad9f58f3c8193,0x3ffd // ln(1/frcpa(1+134/2^-8)) -data8 0xd991d1d31aca41f8,0x3ffd // ln(1/frcpa(1+135/2^-8)) -data8 0xdab7d02231484a93,0x3ffd // ln(1/frcpa(1+136/2^-8)) -data8 0xdc40d532cde49a54,0x3ffd // ln(1/frcpa(1+137/2^-8)) -data8 0xdd685f79ed8b265e,0x3ffd // ln(1/frcpa(1+138/2^-8)) -data8 0xde9094bbc0e17b1d,0x3ffd // ln(1/frcpa(1+139/2^-8)) -data8 0xe01c91b78440c425,0x3ffd // ln(1/frcpa(1+140/2^-8)) -data8 0xe14658f26997e729,0x3ffd // ln(1/frcpa(1+141/2^-8)) -data8 0xe270cdc2391e0d23,0x3ffd // ln(1/frcpa(1+142/2^-8)) -data8 0xe3ffce3a2aa64922,0x3ffd // ln(1/frcpa(1+143/2^-8)) -data8 0xe52bdb274ed82887,0x3ffd // ln(1/frcpa(1+144/2^-8)) -data8 0xe6589852e75d7df6,0x3ffd // ln(1/frcpa(1+145/2^-8)) -data8 0xe786068c79937a7d,0x3ffd // ln(1/frcpa(1+146/2^-8)) -data8 0xe91903adad100911,0x3ffd // ln(1/frcpa(1+147/2^-8)) -data8 0xea481236f7d35bb0,0x3ffd // ln(1/frcpa(1+148/2^-8)) -data8 0xeb77d48c692e6b14,0x3ffd // ln(1/frcpa(1+149/2^-8)) -data8 0xeca84b83d7297b87,0x3ffd // ln(1/frcpa(1+150/2^-8)) -data8 0xedd977f4962aa158,0x3ffd // ln(1/frcpa(1+151/2^-8)) -data8 0xef7179a22f257754,0x3ffd // ln(1/frcpa(1+152/2^-8)) -data8 0xf0a450d139366ca7,0x3ffd // ln(1/frcpa(1+153/2^-8)) -data8 0xf1d7e0524ff9ffdb,0x3ffd // ln(1/frcpa(1+154/2^-8)) -data8 0xf30c29036a8b6cae,0x3ffd // ln(1/frcpa(1+155/2^-8)) -data8 0xf4412bc411ea8d92,0x3ffd // ln(1/frcpa(1+156/2^-8)) -data8 0xf576e97564c8619d,0x3ffd // ln(1/frcpa(1+157/2^-8)) -data8 0xf6ad62fa1b5f172f,0x3ffd // ln(1/frcpa(1+158/2^-8)) -data8 0xf7e499368b55c542,0x3ffd // ln(1/frcpa(1+159/2^-8)) -data8 0xf91c8d10abaffe22,0x3ffd // ln(1/frcpa(1+160/2^-8)) -data8 0xfa553f7018c966f3,0x3ffd // ln(1/frcpa(1+161/2^-8)) -data8 0xfb8eb13e185d802c,0x3ffd // ln(1/frcpa(1+162/2^-8)) -data8 0xfcc8e3659d9bcbed,0x3ffd // ln(1/frcpa(1+163/2^-8)) -data8 0xfe03d6d34d487fd2,0x3ffd // ln(1/frcpa(1+164/2^-8)) -data8 0xff3f8c7581e9f0ae,0x3ffd // ln(1/frcpa(1+165/2^-8)) -data8 0x803e029e280173ae,0x3ffe // ln(1/frcpa(1+166/2^-8)) -data8 0x80dca10cc52d0757,0x3ffe // ln(1/frcpa(1+167/2^-8)) -data8 0x817ba200632755a1,0x3ffe // ln(1/frcpa(1+168/2^-8)) -data8 0x821b05f3b01d6774,0x3ffe // ln(1/frcpa(1+169/2^-8)) -data8 0x82bacd623ff19d06,0x3ffe // ln(1/frcpa(1+170/2^-8)) -data8 0x835af8c88e7a8f47,0x3ffe // ln(1/frcpa(1+171/2^-8)) -data8 0x83c5f8299e2b4091,0x3ffe // ln(1/frcpa(1+172/2^-8)) -data8 0x8466cb43f3d87300,0x3ffe // ln(1/frcpa(1+173/2^-8)) -data8 0x850803a67c80ca4b,0x3ffe // ln(1/frcpa(1+174/2^-8)) -data8 0x85a9a1d11a23b461,0x3ffe // ln(1/frcpa(1+175/2^-8)) -data8 0x864ba644a18e6e05,0x3ffe // ln(1/frcpa(1+176/2^-8)) -data8 0x86ee1182dcc432f7,0x3ffe // ln(1/frcpa(1+177/2^-8)) -data8 0x875a925d7e48c316,0x3ffe // ln(1/frcpa(1+178/2^-8)) -data8 0x87fdaa109d23aef7,0x3ffe // ln(1/frcpa(1+179/2^-8)) -data8 0x88a129ed4becfaf2,0x3ffe // ln(1/frcpa(1+180/2^-8)) -data8 0x89451278ecd7f9cf,0x3ffe // ln(1/frcpa(1+181/2^-8)) -data8 0x89b29295f8432617,0x3ffe // ln(1/frcpa(1+182/2^-8)) -data8 0x8a572ac5a5496882,0x3ffe // ln(1/frcpa(1+183/2^-8)) -data8 0x8afc2d0ce3b2dadf,0x3ffe // ln(1/frcpa(1+184/2^-8)) -data8 0x8b6a69c608cfd3af,0x3ffe // ln(1/frcpa(1+185/2^-8)) -data8 0x8c101e106e899a83,0x3ffe // ln(1/frcpa(1+186/2^-8)) -data8 0x8cb63de258f9d626,0x3ffe // ln(1/frcpa(1+187/2^-8)) -data8 0x8d2539c5bd19e2b1,0x3ffe // ln(1/frcpa(1+188/2^-8)) -data8 0x8dcc0e064b29e6f1,0x3ffe // ln(1/frcpa(1+189/2^-8)) -data8 0x8e734f45d88357ae,0x3ffe // ln(1/frcpa(1+190/2^-8)) -data8 0x8ee30cef034a20db,0x3ffe // ln(1/frcpa(1+191/2^-8)) -data8 0x8f8b0515686d1d06,0x3ffe // ln(1/frcpa(1+192/2^-8)) -data8 0x90336bba039bf32f,0x3ffe // ln(1/frcpa(1+193/2^-8)) -data8 0x90a3edd23d1c9d58,0x3ffe // ln(1/frcpa(1+194/2^-8)) -data8 0x914d0de2f5d61b32,0x3ffe // ln(1/frcpa(1+195/2^-8)) -data8 0x91be0c20d28173b5,0x3ffe // ln(1/frcpa(1+196/2^-8)) -data8 0x9267e737c06cd34a,0x3ffe // ln(1/frcpa(1+197/2^-8)) -data8 0x92d962ae6abb1237,0x3ffe // ln(1/frcpa(1+198/2^-8)) -data8 0x9383fa6afbe2074c,0x3ffe // ln(1/frcpa(1+199/2^-8)) -data8 0x942f0421651c1c4e,0x3ffe // ln(1/frcpa(1+200/2^-8)) -data8 0x94a14a3845bb985e,0x3ffe // ln(1/frcpa(1+201/2^-8)) -data8 0x954d133857f861e7,0x3ffe // ln(1/frcpa(1+202/2^-8)) -data8 0x95bfd96468e604c4,0x3ffe // ln(1/frcpa(1+203/2^-8)) -data8 0x9632d31cafafa858,0x3ffe // ln(1/frcpa(1+204/2^-8)) -data8 0x96dfaabd86fa1647,0x3ffe // ln(1/frcpa(1+205/2^-8)) -data8 0x9753261fcbb2a594,0x3ffe // ln(1/frcpa(1+206/2^-8)) -data8 0x9800c11b426b996d,0x3ffe // ln(1/frcpa(1+207/2^-8)) -data8 0x9874bf4d45ae663c,0x3ffe // ln(1/frcpa(1+208/2^-8)) -data8 0x99231f5ee9a74f79,0x3ffe // ln(1/frcpa(1+209/2^-8)) -data8 0x9997a18a56bcad28,0x3ffe // ln(1/frcpa(1+210/2^-8)) -data8 0x9a46c873a3267e79,0x3ffe // ln(1/frcpa(1+211/2^-8)) -data8 0x9abbcfc621eb6cb6,0x3ffe // ln(1/frcpa(1+212/2^-8)) -data8 0x9b310cb0d354c990,0x3ffe // ln(1/frcpa(1+213/2^-8)) -data8 0x9be14cf9e1b3515c,0x3ffe // ln(1/frcpa(1+214/2^-8)) -data8 0x9c5710b8cbb73a43,0x3ffe // ln(1/frcpa(1+215/2^-8)) -data8 0x9ccd0abd301f399c,0x3ffe // ln(1/frcpa(1+216/2^-8)) -data8 0x9d7e67f3bdce8888,0x3ffe // ln(1/frcpa(1+217/2^-8)) -data8 0x9df4ea81a99daa01,0x3ffe // ln(1/frcpa(1+218/2^-8)) -data8 0x9e6ba405a54514ba,0x3ffe // ln(1/frcpa(1+219/2^-8)) -data8 0x9f1e21c8c7bb62b3,0x3ffe // ln(1/frcpa(1+220/2^-8)) -data8 0x9f956593f6b6355c,0x3ffe // ln(1/frcpa(1+221/2^-8)) -data8 0xa00ce1092e5498c3,0x3ffe // ln(1/frcpa(1+222/2^-8)) -data8 0xa0c08309c4b912c1,0x3ffe // ln(1/frcpa(1+223/2^-8)) -data8 0xa1388a8c6faa2afa,0x3ffe // ln(1/frcpa(1+224/2^-8)) -data8 0xa1b0ca7095b5f985,0x3ffe // ln(1/frcpa(1+225/2^-8)) -data8 0xa22942eb47534a00,0x3ffe // ln(1/frcpa(1+226/2^-8)) -data8 0xa2de62326449d0a3,0x3ffe // ln(1/frcpa(1+227/2^-8)) -data8 0xa357690f88bfe345,0x3ffe // ln(1/frcpa(1+228/2^-8)) -data8 0xa3d0a93f45169a4b,0x3ffe // ln(1/frcpa(1+229/2^-8)) -data8 0xa44a22f7ffe65f30,0x3ffe // ln(1/frcpa(1+230/2^-8)) -data8 0xa500c5e5b4c1aa36,0x3ffe // ln(1/frcpa(1+231/2^-8)) -data8 0xa57ad064eb2ebbc2,0x3ffe // ln(1/frcpa(1+232/2^-8)) -data8 0xa5f5152dedf4384e,0x3ffe // ln(1/frcpa(1+233/2^-8)) -data8 0xa66f9478856233ec,0x3ffe // ln(1/frcpa(1+234/2^-8)) -data8 0xa6ea4e7cca02c32e,0x3ffe // ln(1/frcpa(1+235/2^-8)) -data8 0xa765437325341ccf,0x3ffe // ln(1/frcpa(1+236/2^-8)) -data8 0xa81e21e6c75b4020,0x3ffe // ln(1/frcpa(1+237/2^-8)) -data8 0xa899ab333fe2b9ca,0x3ffe // ln(1/frcpa(1+238/2^-8)) -data8 0xa9157039c51ebe71,0x3ffe // ln(1/frcpa(1+239/2^-8)) -data8 0xa991713433c2b999,0x3ffe // ln(1/frcpa(1+240/2^-8)) -data8 0xaa0dae5cbcc048b3,0x3ffe // ln(1/frcpa(1+241/2^-8)) -data8 0xaa8a27ede5eb13ad,0x3ffe // ln(1/frcpa(1+242/2^-8)) -data8 0xab06de228a9e3499,0x3ffe // ln(1/frcpa(1+243/2^-8)) -data8 0xab83d135dc633301,0x3ffe // ln(1/frcpa(1+244/2^-8)) -data8 0xac3fb076adc7fe7a,0x3ffe // ln(1/frcpa(1+245/2^-8)) -data8 0xacbd3cbbe47988f1,0x3ffe // ln(1/frcpa(1+246/2^-8)) -data8 0xad3b06b1a5dc57c3,0x3ffe // ln(1/frcpa(1+247/2^-8)) -data8 0xadb90e94af887717,0x3ffe // ln(1/frcpa(1+248/2^-8)) -data8 0xae3754a218f7c816,0x3ffe // ln(1/frcpa(1+249/2^-8)) -data8 0xaeb5d9175437afa2,0x3ffe // ln(1/frcpa(1+250/2^-8)) -data8 0xaf349c322e9c7cee,0x3ffe // ln(1/frcpa(1+251/2^-8)) -data8 0xafb39e30d1768d1c,0x3ffe // ln(1/frcpa(1+252/2^-8)) -data8 0xb032df51c2c93116,0x3ffe // ln(1/frcpa(1+253/2^-8)) -data8 0xb0b25fd3e6035ad9,0x3ffe // ln(1/frcpa(1+254/2^-8)) -data8 0xb1321ff67cba178c,0x3ffe // ln(1/frcpa(1+255/2^-8)) -// -data8 0xC7DC2985D3B44557,0x3FCA // A00 -// -// polynomial approximation of ln(GAMMA(x)), 1 <= x < 2.25 -// [0.875,1.25) -data8 0xBF9A04F7E40C8498,0x3FAB79D8D9380F03 // C17,C16 -data8 0xBFB3B63609CA0CBD,0x3FB5564EA1675539 // C13,C12 -data8 0xBFBC806766F48C41,0x3FC010B36CDA773A // C9,C8 -data8 0xD45CE0BD54BE3D67,0xBFFC // C5 -data8 0xCD26AADF559676D0,0xBFFD // C3 -data8 0x93C467E37DB0C7A7,0xBFFE // C1 -data8 0xBFB10C251723B123,0x3FB2669DAD69A12D // C15,C14 -data8 0xBFB748A3CFCE4717,0x3FB9A01DEE29966A // C11,C10 -data8 0xBFC2703A1D85497E,0x3FC5B40CB0FD353C // C7,C6 -data8 0x8A8991563ECBBA5D,0x3FFD // C4 -data8 0xD28D3312983E9844,0x3FFE // C2 -data8 0,0 // C0 -// [1.25,1.75) -data8 0xBF12680486396DE6,0x3F23C51FC332CD9D // C17,C16 -data8 0xBF422633DA3A1496,0x3F4CC70680768857 // C13,C12 -data8 0xBF6E2F1A1F804B5D,0x3F78FCE02A032428 // C9,C8 -data8 0x864D46FA895985C1,0xBFFA // C5 -data8 0x97213C6E35E12043,0xBFFC // C3 -data8 0x8A8A42A401D979B7,0x3FC7 // C1 -data8 0xBF2E098A8A2332A8,0x3F370E61B73B205C // C15,C14 -data8 0xBF56F9849D3BC6CC,0x3F6283126F58D7F4 // C11,C10 -data8 0xBF851F9F9516A98F,0x3F9266E797A1433F // C7,C6 -data8 0x845A14A6A81B0638,0x3FFB // C4 -data8 0xF7B95E4771C55C99,0x3FFD // C2 -data8 0xF8CDCDE61C520E0F,0xBFFB // C0 -// [1.75,2.25) -data8 0xBEA01D7AFA5D8F52,0x3EB1010986E60253 // C17,C16 -data8 0xBEE3CBEDB4C918AA,0x3EF580F6D9D0F72D // C13,C12 -data8 0xBF2D3FD4C7F68563,0x3F40B36AF884AE9A // C9,C8 -data8 0xF2027E10C7B051EC,0xBFF7 // C5 -data8 0x89F000D2ABB03401,0xBFFB // C3 -data8 0xD8773039049E70B6,0x3FFD // C1 -data8 0xBEC112CD07CFC31A,0x3ED2528A428D30E1 // C15,C14 -data8 0xBF078DE5618D8C9F,0x3F1A127AD811A53D // C11,C10 -data8 0xBF538AC5C2BF540D,0x3F67ADD6EADB5718 // C7,C6 -data8 0xA8991563EC243383,0x3FF9 // C4 -data8 0xA51A6625307D3230,0x3FFD // C2 -data8 0,0 // C0 -// -// polynomial approximation of ln(sin(Pi*x)/(Pi*x)), 9 <= x <= 0.5 -data8 0xBFDC1BF0931AE591,0x3FD36D6D6CE263D7 //S28,S26 -data8 0xBFBD516F4FD9FB18,0xBFBBE1703F315086 //S20,S18 -data8 0xAAB5A3CCEFCD3628,0xBFFC //S12 -data8 0x80859B5C318E19A5,0xBFFD //S8 -data8 0x8A8991563EC7EB33,0xBFFE //S4 -data8 0xBFD23AB9E6CC88AC,0xBF9957F5146FC7AF //S24,S22 -data8 0xBFC007B324E23040,0xBFC248DEC29CAC4A //S16,S14 -data8 0xCD00EFF2F8F86899,0xBFFC //S10 -data8 0xADA06587FACD668B,0xBFFD //S6 -data8 0xD28D3312983E98A0,0xBFFF //S2 -// -data8 0x8090F777D7942F73,0x4001 // PR01 -data8 0xE5B521193CF61E63,0x4000 // PR11 -data8 0xC02C000000001939 // (-15;-14) -data8 0x0000000000000233 // (-15;-14) -data8 0xC02A000000016124 // (-14;-13) -data8 0x0000000000002BFB // (-14;-13) -data8 0xC02800000011EED9 // (-13;-12) -data8 0x0000000000025CBB // (-13;-12) -data8 0xC026000000D7322A // (-12;-11) -data8 0x00000000001E1095 // (-12;-11) -data8 0xC0240000093F2777 // (-11;-10) -data8 0x00000000013DD3DC // (-11;-10) -data8 0xC02200005C7768FB // (-10;-9) -data8 0x000000000C9539B9 // (-10;-9) -data8 0xC02000034028B3F9 // (-9;-8) -data8 0x000000007570C565 // (-9;-8) -data8 0xC01C0033FDEDFE1F // (-8;-7) -data8 0x00000007357E670E // (-8;-7) -data8 0xC018016B25897C8D // (-7;-6) -data8 0x000000346DC5D639 // (-7;-6) -data8 0xC014086A57F0B6D9 // (-6;-5) -data8 0x0000010624DD2F1B // (-6;-5) -data8 0xC010284E78599581 // (-5;-4) -data8 0x0000051EB851EB85 // (-5;-4) -data8 0xC009260DBC9E59AF // (-4;-3) -data8 0x000028F5C28F5C29 // (-4;-3) -data8 0xC003A7FC9600F86C // (-3;-2) -data8 0x0000666666666666 // (-3;-2) -data8 0xCC15879606130890,0x4000 // PR21 -data8 0xB42FE3281465E1CC,0x4000 // PR31 -// -data8 0x828185F0B95C9916,0x4001 // PR00 -// -data8 0xD4D3C819E4E5654B,0x4000 // PR10 -data8 0xA82FBBA4FCC75298,0x4000 // PR20 -data8 0xC02DFFFFFFFFFE52 // (-15;-14) -data8 0x000000000000001C // (-15;-14) -data8 0xC02BFFFFFFFFE6C7 // (-14;-13) -data8 0x00000000000001A6 // (-14;-13) -data8 0xC029FFFFFFFE9EDC // (-13;-12) -data8 0x0000000000002BFB // (-13;-12) -data8 0xC027FFFFFFEE1127 // (-12;-11) -data8 0x000000000001EEC8 // (-12;-11) -data8 0xC025FFFFFF28CDD4 // (-11;-10) -data8 0x00000000001E1095 // (-11;-10) -data8 0xC023FFFFF6C0D7C0 // (-10;-9) -data8 0x000000000101B2B3 // (-10;-9) -data8 0xC021FFFFA3884BD0 // (-9;-8) -data8 0x000000000D6BF94D // (-9;-8) -data8 0xC01FFFF97F8159CF // (-8;-7) -data8 0x00000000C9539B89 // (-8;-7) -data8 0xC01BFFCBF76B86F0 // (-7;-6) -data8 0x00000007357E670E // (-7;-6) -data8 0xC017FE92F591F40D // (-6;-5) -data8 0x000000346DC5D639 // (-6;-5) -data8 0xC013F7577A6EEAFD // (-5;-4) -data8 0x00000147AE147AE1 // (-5;-4) -data8 0xC00FA471547C2FE5 // (-4;-3) -data8 0x00000C49BA5E353F // (-4;-3) -data8 0xC005FB410A1BD901 // (-3;-2) -data8 0x000053F7CED91687 // (-3;-2) -data8 0x80151BB918A293AA,0x4000 // PR30 -data8 0xB3C9F8F47422A314,0x400B // PRN -// -// right negative roots -//(-3;-2) -data8 0x40BFCF8B90BE7F6B,0x40B237623345EFC3 // A15,A14 -data8 0x407A92EFB03B281E,0x40728700C7819759 // A11,A10 -data8 0x403809F04EF4D0F2,0x4038D32F682D9593 // A7,A6 -data8 0xB4A5302C53C2F2D8,0x3FFF // A3 -data8 0xC1FF4B357A9B0383,0x3FFF // A1 -data8 0x409C46632EB4B2D3,0x4091A72AFA2148F5 // A13,A12 -data8 0x4059297AC79A88DB,0x40548EAA7BE7FA6B // A9,A8 -data8 0x4017339FE04B227F,0x4021718D7CA09E02 // A5,A4 -data8 0x9B775D8017AAE668,0x4001 // A2 -data8 0x8191DB68FF4366A1,0x3FC9 // A0 -//(-4;-3) -data8 0x425260910D35307B,0x422668F5BE7983BB // A15,A14 -data8 0x41A4454DBE4BEE43,0x41799CA93F6EA817 // A11,A10 -data8 0x40FBB97AA1400F31,0x40D293C3F7ADAB15 // A7,A6 -data8 0xE089B8926AE4517B,0x4005 // A3 -data8 0xF90532F97D630C69,0x4001 // A1 -data8 0x41F9F0CF98C5F2EA,0x41D026336C6BF394 // A13,A12 -data8 0x415057F61156D5B8,0x41251EA3055CB754 // A9,A8 -data8 0x40A99A6337D9FC2B,0x408267203D776151 // A5,A4 -data8 0xCEA694BB8A8827A9,0x4003 // A2 -data8 0xF4B02F1D73D30EED,0x3FCD // A0 -//(-5;-4) -data8 0x4412365489340979,0x43C86441BAFDEE39 // A15,A14 -data8 0x42ED68FCB19352DD,0x42A45FCE3905CD6F // A11,A10 -data8 0x41CD14FE49FD4FCA,0x41855E3DBFA89744 // A7,A6 -data8 0xAACD88D954E0EC16,0x400B // A3 -data8 0xD652E7A490B0DCDF,0x4003 // A1 -data8 0x437F52608E0E752A,0x433560E0633E33D5 // A13,A12 -data8 0x425C83998976DE3D,0x421433DCCD3B473B // A9,A8 -data8 0x4140261EB5732106,0x40F96D18E21AE6CC // A5,A4 -data8 0xA220AE6C09FA8A0E,0x4007 // A2 -data8 0xCC1682D17A2B5A58,0xBFCF // A0 -//(-6;-5) -data8 0x4630E41D6386CF5A,0x45C2E7992C628C8C // A15,A14 -data8 0x447AABEC714F913A,0x440EDCAB45339F3A // A11,A10 -data8 0x42C9A8D00C97E3CE,0x425F7D8D5BEAB44D // A7,A6 -data8 0x929EC2B1FB95BB5B,0x4012 // A3 -data8 0xF6B970414D717D38,0x4005 // A1 -data8 0x45545E578976F6A2,0x44E738288DD52686 // A13,A12 -data8 0x43A20921FEC49492,0x433557FD7C6A41B3 // A9,A8 -data8 0x41F3E01773761DB4,0x418A225DF2DA6C47 // A5,A4 -data8 0xE7661976117F9312,0x400B // A2 -data8 0xC33C13FEE07494DE,0x3FCF // A0 -//(-7;-6) -data8 0x4898F1E6133305AD,0x4802C5306FE4A850 // A15,A14 -data8 0x463FD37946B44094,0x45A8D489B784C2DD // A11,A10 -data8 0x43E9500995815F06,0x4354F21E2FEE6DF5 // A7,A6 -data8 0xEF281D1E1BBE10BD,0x4019 // A3 -data8 0xB4EF24F1D78C2029,0x4008 // A1 -data8 0x476AB1D5930011E5,0x46D4867E77BFB622 // A13,A12 -data8 0x45139151ECDEF7C5,0x447F3A2BC6BF466F // A9,A8 -data8 0x42C1D3D50713FA40,0x422F9C7B52556A1B // A5,A4 -data8 0xFE711A4267CEA83A,0x4010 // A2 -data8 0xD11E91B3FF8F4B94,0xBFD2 // A0 -//(-8;-7) -data8 0x4B39E57569811B6E,0x4A7656073EB1FA21 // A15,A14 -data8 0x482C9B24A516B0BB,0x47698FF55139C62B // A11,A10 -data8 0x452393E2BC8E8D04,0x44628E1C710DA478 // A7,A6 -data8 0x9F2A95AF1B7A773F,0x4022 // A3 -data8 0x9DA03D51C303C918,0x400B // A1 -data8 0x49B24C241A3D5BCB,0x48F01CB936ECDA67 // A13,A12 -data8 0x46A712B3425C6797,0x45E5164114BD6DA1 // A9,A8 -data8 0x43A216A356069D01,0x42E25E42A45E2108 // A5,A4 -data8 0xC1F42ED57BBC2529,0x4016 // A2 -data8 0xB1C7B615A7DCA8A9,0xBFD7 // A0 -//(-9;-8) -data8 0x4E09D478E5EE857D,0x4D1647782106E9AB // A15,A14 -data8 0x4A3C7F4D51927548,0x49497954796D743A // A11,A10 -data8 0x467387BD6AF0CBDF,0x4582843E134111D2 // A7,A6 -data8 0x9F003C6DE9666513,0x402B // A3 -data8 0x9D8447F6BF99950A,0x400E // A1 -data8 0x4C22364D238C61A9,0x4B300B18050AB940 // A13,A12 -data8 0x4857004D64215772,0x4765074E448C3C9A // A9,A8 -data8 0x44920E9EA07BF624,0x43A257BEC94BBF48 // A5,A4 -data8 0xC1D1C49AC5B2A4B4,0x401C // A2 -data8 0x9A749AF9F2D2E688,0x3FDB // A0 -//(-10;-9) -data8 0x5102C7C43EA26C83,0x4FDCD174DEB0426B // A15,A14 -data8 0x4C6A036195CD5BAD,0x4B44ABB52B65628A // A11,A10 -data8 0x47D6439374B98FED,0x46B2C3903EF44D7D // A7,A6 -data8 0xE25BAF73AB8A7DB3,0x4034 // A3 -data8 0xB130901CA6D81B61,0x4011 // A1 -data8 0x4EB50BB0726AE206,0x4D907A96E6D2B6E2 // A13,A12 -data8 0x4A20975D78EAF01A,0x48FAF79C9C3E7908 // A9,A8 -data8 0x459044144129A247,0x446D6043FA3150A3 // A5,A4 -data8 0xF547997E083D9BA7,0x4022 // A2 -data8 0x977AF525A6ECA1BC,0x3FDC // A0 -//(-11;-10) -data8 0x5420A5D5E90C6D73,0x52C4710A503DC67A // A15,A14 -data8 0x4EB2ED07BA88D2A8,0x4D581001ED9A5ECE // A11,A10 -data8 0x494A8A28E9E3DFEF,0x47F1E4E1E476793E // A7,A6 -data8 0xDD0C97E12D4A3378,0x403E // A3 -data8 0xDD7C12D5182FD543,0x4014 // A1 -data8 0x5167ED536877A072,0x500DF9AF21DDC0B6 // A13,A12 -data8 0x4BFEE6F04BC34FF8,0x4AA4175CEF736A5E // A9,A8 -data8 0x4698D1B4388FEC78,0x4541EDE7607A600D // A5,A4 -data8 0xBF9F645F282AC552,0x4029 // A2 -data8 0xAE1BBE4D3CDACCF4,0x3FE1 // A0 -//(-12;-11) -data8 0x575F0EEF5FB7D4C0,0x55CBB7302B211A7C // A15,A14 -data8 0x5113A4F1825C7CB2,0x4F822A0D46E0605A // A11,A10 -data8 0x4ACED38FC8BE069A,0x493E3B56D2649F18 // A7,A6 -data8 0x8FA8FF5DF8B72D5E,0x4049 // A3 -data8 0x9845417E8598D642,0x4018 // A1 -data8 0x5437780541C3F2D3,0x52A56279B563C1B2 // A13,A12 -data8 0x4DF0F71A48C50188,0x4C600B358988DEBF // A9,A8 -data8 0x47AE7EE95BDA3DE9,0x46200599DC16B18F // A5,A4 -data8 0xB5249F914932E55D,0x4030 // A2 -data8 0xEAE760CD2C086094,0x3FE5 // A0 -//(-13;-12) -data8 0x5ABA5848651F6D18,0x58EF60D8A817650B // A15,A14 -data8 0x538A8CA86E13EFB1,0x51C05DBD4D01076D // A11,A10 -data8 0x4C607594C339D259,0x4A9585BD5BF932BB // A7,A6 -data8 0xF26D282C36EC3611,0x4053 // A3 -data8 0xE467DF4810EE7EEE,0x401B // A1 -data8 0x5721D9BA485E8CC3,0x5555AF2CCFB2104D // A13,A12 -data8 0x4FF4619A17B14EA6,0x4E29B2F29EB9F8C4 // A9,A8 -data8 0x48CCF27629D46E79,0x47044715F991A63D // A5,A4 -data8 0xCBC92FB9BDAA95A9,0x4037 // A2 -data8 0xFB743A426163665B,0xBFE6 // A0 -//(-14;-13) -data8 0x5E3295B24B353EAA,0x5C2B447E29796F20 // A15,A14 -data8 0x5615A35CB5EAFAE5,0x54106AB089C95CAF // A11,A10 -data8 0x4DFEC7D93501900A,0x4BF8C4C685F01B83 // A7,A6 -data8 0x820899603D9A74D5,0x405F // A3 -data8 0xB9949919933821CB,0x401F // A1 -data8 0x5A23373DB9A995AC,0x581CBA0AF7F53009 // A13,A12 -data8 0x520929836BB304CD,0x500386409A7076DA // A9,A8 -data8 0x49F480173FEAF90B,0x47F1ACB14B810793 // A5,A4 -data8 0x86881B8674DBF205,0x403F // A2 -data8 0x8CF3CC35AA2C5F90,0x3FED // A0 -//(-15;-14) -data8 0x61C37D53BE0029D6,0x5F80667CD9D68354 // A15,A14 -data8 0x58B3F01898E6605B,0x567149652116DB6A // A11,A10 -data8 0x4FA82FA4F5D35B00,0x4D663DB00832DF8F // A7,A6 -data8 0xAE426731C9B94996,0x406A // A3 -data8 0xA264C84BE3708F3F,0x4023 // A1 -data8 0x5D3B254BC1C806A8,0x5AF72E736048B553 // A13,A12 -data8 0x542E476505104BB0,0x51EAD96CDC4FB48F // A9,A8 -data8 0x4B25095F498DB134,0x48E4B9FDEBFE24AB // A5,A4 -data8 0xCE076A5A116C1D34,0x4046 // A2 -data8 0x940013871A15050B,0x3FF1 // A0 -// -// left negative roots -//(-3;-2) -data8 0x41AEB7998DBE2B2C,0xC19053D8FAC05DF7 // A16,A15 -data8 0x4133197BF1ADEAF9,0xC1150728B9B82072 // A12,A11 -data8 0x40BDBA65E74F4526,0xC0A12239BEEF8F72 // A8,A7 -data8 0xFA8256664F99E2AA,0x4004 // A4 -data8 0x9933F9E132D2A5DB,0x4002 // A2 -data8 0x416FFB167B85F77C,0xC15166AE0ACCF87C // A14,A13 -data8 0x40F75815106322C0,0xC0DA2D23C59C348D // A10,A9 -data8 0x4084373F7CC42043,0xC0685884581F8C61 // A6,A5 -data8 0xA0C2D6186460FF9D,0xC003 // A3 -data8 0xF5096D48258CA0AD,0xBFFF // A1 -//(-4;-3) -data8 0xC3E5BD233016D4B9,0x43A084DAD2D94AB1 // A15,A14 -data8 0xC2CCFFF5E5AED722,0x4286D143AC7D29A6 // A11,A10 -data8 0xC1B7DBBE0680D07B,0x4173E8F3ABB79CED // A7,A6 -data8 0xE929ACEA59799BAF,0xC00A // A3 -data8 0xA5CCECB362B21E1C,0xC003 // A1 -data8 0xC357EED873871B81,0x43128E0B873204FC // A13,A12 -data8 0xC242225FA76E8450,0x41FD2F76AE7386CE // A9,A8 -data8 0xC13116F7806D0C7A,0x40EE8F829F141025 // A5,A4 -data8 0xFBB6F57021B5B397,0x4006 // A2 -data8 0xEEE019B4C05AC269,0xBFCB // A0 -//(-5;-4) -data8 0xC626A52FE8AAA100,0x45B9FD1F4DDFE31E // A15,A14 -data8 0xC473812A5675F08B,0x440738530AECC254 // A11,A10 -data8 0xC2C5068B3F94AC27,0x425A8C5C539A500B // A7,A6 -data8 0x869FBFF732F20C3A,0xC012 // A3 -data8 0xE91251F7CF25A655,0xC005 // A1 -data8 0xC54C18CB48E5DA0F,0x44E07BD36FF561DF // A13,A12 -data8 0xC39BEC120D2FEBEA,0x4330FFA5388435BE // A9,A8 -data8 0xC1F13D5D163B7FB5,0x418752A6F5AC0F39 // A5,A4 -data8 0xDA99E33C51D360F0,0x400B // A2 -data8 0x9F47A66A2F53D9B9,0x3FD1 // A0 -//(-6;-5) -data8 0xC8970DAC16B6D59E,0x480170728306FD76 // A15,A14 -data8 0xC63E0E5030604CF3,0x45A7924D74D57C65 // A11,A10 -data8 0xC3E8684E41730FC6,0x43544D54EA2E5B9A // A7,A6 -data8 0xEB7404450C47C5F4,0xC019 // A3 -data8 0xB30FB521D2C19F8B,0xC008 // A1 -data8 0xC768F34D35DF6320,0x46D348B3BB2E68B8 // A13,A12 -data8 0xC512AC2FE5EA638E,0x447DF44BC7FC5E17 // A9,A8 -data8 0xC2C15EA6B0AAFEF9,0x422EF5D308DBC420 // A5,A4 -data8 0xFBCEE5BCA70FD3A3,0x4010 // A2 -data8 0x8589A7CFFE0A3E86,0xBFD5 // A0 -//(-7;-6) -data8 0xCB3995A0CC961E5A,0x4A7615C6C7116ADD // A15,A14 -data8 0xC82C5AFE0BF9C427,0x47695BD2F367668B // A11,A10 -data8 0xC52377E70BA14CF5,0x4462775E859E4392 // A7,A6 -data8 0x9EC8ED6E4C3D4DBE,0xC022 // A3 -data8 0x9D5FBD2E75520E65,0xC00B // A1 -data8 0xC9B21BB881A4DDF8,0x48EFEAB06FBA0207 // A13,A12 -data8 0xC6A6E8550CBC188F,0x45E4F3D26238B099 // A9,A8 -data8 0xC3A20427DF1B110A,0x42E24F3D636F2E4E // A5,A4 -data8 0xC1A4D12A82280CFB,0x4016 // A2 -data8 0xEF46D8DCCA9E8197,0x3FD2 // A0 -//(-8;-7) -data8 0xCE0946982B27DE5B,0x4D15DBC6664E2DD2 // A15,A14 -data8 0xCA3C769F6B3B2B93,0x49497251CD0C4363 // A11,A10 -data8 0xC67384066C47F489,0x458281393433AB28 // A7,A6 -data8 0x9EF3459926D0F14F,0xC02B // A3 -data8 0x9D7BB7F2600DFF0B,0xC00E // A1 -data8 0xCC22351326C939A7,0x4B3009431C4F1D3F // A13,A12 -data8 0xC856FAADDD48815D,0x476502BC3ECA040C // A9,A8 -data8 0xC4920C2A84173810,0x43A255C052525F99 // A5,A4 -data8 0xC1C73B6554011EFA,0x401C // A2 -data8 0x954612700ADF8317,0xBFD8 // A0 -//(-9;-8) -data8 0xD102F5CC7B590D3A,0x4FDD0F1C30E4EB22 // A15,A14 -data8 0xCC6A02912B0DF650,0x4B44AB18E4FCC159 // A11,A10 -data8 0xC7D64314B4A2FAAB,0x46B2C334AE5E2D34 // A7,A6 -data8 0xE2598724F7E28E99,0xC034 // A3 -data8 0xB12F6FE2E195452C,0xC011 // A1 -data8 0xCEB507747AF9356A,0x4D907802C08BA48F // A13,A12 -data8 0xCA2096E3DC29516F,0x48FAF6ED046A1DB7 // A9,A8 -data8 0xC59043D21BA5EE56,0x446D5FE468B30450 // A5,A4 -data8 0xF5460A8196B59C83,0x4022 // A2 -data8 0xB108F35A8EDA92D5,0xBFDD // A0 -//(-10;-9) -data8 0xD420430D91F8265B,0x52C406CAAAC9E0EE // A15,A14 -data8 0xCEB2ECDDDAA3DAD1,0x4D580FDA97F92E3A // A11,A10 -data8 0xC94A8A192341B5D4,0x47F1E4D8C690D07B // A7,A6 -data8 0xDD0C5F920C2F0D2B,0xC03E // A3 -data8 0xDD7BED3631657B48,0xC014 // A1 -data8 0xD167F410E64E90A4,0x500DFFED20F714A7 // A13,A12 -data8 0xCBFEE6D9043169E9,0x4AA4174F64B40AA7 // A9,A8 -data8 0xC698D1A9AF0AB9C2,0x4541EDE14987A887 // A5,A4 -data8 0xBF9F43D461B3DE6E,0x4029 // A2 -data8 0xF3891A50642FAF26,0x3FE1 // A0 -//(-11;-10) -data8 0xD75F0EEAF769D42A,0x55CBB72C8869183A // A15,A14 -data8 0xD113A4EF80394F77,0x4F822A0B96B3ECA9 // A11,A10 -data8 0xCACED38DC75763CB,0x493E3B5522D2D028 // A7,A6 -data8 0x8FA8FB5C92533701,0xC049 // A3 -data8 0x98453EDB9339C24E,0xC018 // A1 -data8 0xD43778026CCD4B20,0x52A5627753273B9B // A13,A12 -data8 0xCDF0F718DD7E1214,0x4C600B34582911EB // A9,A8 -data8 0xC7AE7EE7F112362C,0x46200599439C264F // A5,A4 -data8 0xB5249C335342B5BC,0x4030 // A2 -data8 0x881550711D143475,0x3FE4 // A0 -//(-12;-11) -data8 0xDAB9C724EEEE2BBB,0x58EEC971340EDDBA // A15,A14 -data8 0xD38A8C8AE63BD8BF,0x51C05DB21CEE00D3 // A11,A10 -data8 0xCC607594C311C12D,0x4A9585BD5BE6AB57 // A7,A6 -data8 0xF26D282C36EC0E66,0xC053 // A3 -data8 0xE467DF1FA674BFAE,0xC01B // A1 -data8 0xD721DE506999AA9C,0x5555B34F71B45132 // A13,A12 -data8 0xCFF4619A476BF76F,0x4E29B2F2BBE7A67E // A9,A8 -data8 0xC8CCF27629D48EDC,0x47044715F991AB46 // A5,A4 -data8 0xCBC92FB9BDAA928D,0x4037 // A2 -data8 0xCE27C4F01CF53284,0xBFE6 // A0 -//(-13;-12) -data8 0xDE3295B24355C5A1,0x5C2B447E298B562D // A15,A14 -data8 0xD615A35CB5E92103,0x54106AB089C95E8C // A11,A10 -data8 0xCDFEC7D935019005,0x4BF8C4C685F01B83 // A7,A6 -data8 0x820899603D9A74D5,0xC05F // A3 -data8 0xB9949916F8DF4AC4,0xC01F // A1 -data8 0xDA23373DBA0B7548,0x581CBA0AF7F45C01 // A13,A12 -data8 0xD20929836BB30934,0x500386409A7076D6 // A9,A8 -data8 0xC9F480173FEAF90B,0x47F1ACB14B810793 // A5,A4 -data8 0x86881B8674DBF205,0x403F // A2 -data8 0x8CFAFA9A142C1FF0,0x3FED // A0 -//(-14;-13) -data8 0xE1C33F356FA2C630,0x5F8038B8AA919DD7 // A15,A14 -data8 0xD8B3F0167E14982D,0x5671496400BAE0DB // A11,A10 -data8 0xCFA82FA4F5D25C3E,0x4D663DB008328C58 // A7,A6 -data8 0xAE426731C9B94980,0xC06A // A3 -data8 0xA264C84BB8A66F86,0xC023 // A1 -data8 0xDD3B26E34762ED1E,0x5AF72F76E3C1B793 // A13,A12 -data8 0xD42E476507E3D06E,0x51EAD96CDD881DFA // A9,A8 -data8 0xCB25095F498DB15F,0x48E4B9FDEBFE24B5 // A5,A4 -data8 0xCE076A5A116C1D32,0x4046 // A2 -data8 0x94001BF5A24966F5,0x3FF1 // A0 -//(-15;-14) -data8 0xE56DB8B72D7156FF,0x62EAB0CDB22539BE // A15,A14 -data8 0xDB63D76B0D3457E7,0x58E254823D0AE4FF // A11,A10 -data8 0xD15F060BF548404A,0x4EDE65C20CD4E961 // A7,A6 -data8 0x900DA565ED76C19D,0xC076 // A3 -data8 0x9868C809852DA712,0xC027 // A1 -data8 0xE067CCDA0408AAF0,0x5DE5A79C5C5C54AF // A13,A12 -data8 0xD6611ADBF5958ED0,0x53E0294092BE9677 // A9,A8 -data8 0xCC5EA28D90EE8C5D,0x49E014930EF336EE // A5,A4 -data8 0xB57930DCE7A61AE8,0x404E // A2 -data8 0x976BEC1F30DF151C,0x3FF5 // A0 -LOCAL_OBJECT_END(lgamma_data) - - -.section .text -GLOBAL_LIBM_ENTRY(__libm_lgamma) - -{ .mfi - getf.exp GR_SignExp = f8 - frcpa.s1 FR_C,p9 = f1,f8 - mov GR_ExpMask = 0x1ffff -} -{ .mfi - addl GR_ad_Data = @ltoff(lgamma_data),gp - fcvt.fx.s1 FR_int_N = f8 - mov GR_2_25 = 0x4002 // 2.25 -};; -{ .mfi - getf.d GR_ArgAsIs = f8 - fclass.m p13,p0 = f8,0x1EF // is x NaTVal, NaN, - // +/-0, +/-INF or +/-deno? - mov GR_ExpBias = 0xFFFF -} -{ .mfi - ld8 GR_ad_Data = [GR_ad_Data] - fcvt.fx.trunc.s1 FR_int_Ntrunc = f8 - mov GR_ExpOf256 = 0x10007 -};; -{ .mfi - mov GR_ExpOf2 = 0x10000 - fcmp.lt.s1 p14,p15 = f8,f0 // p14 if x<0 - dep.z GR_Ind = GR_SignExp,8,4 -} -{ .mfi - and GR_Exp = GR_SignExp,GR_ExpMask - fma.s1 FR_2 = f1,f1,f1 - cmp.lt p10,p0 = GR_SignExp,GR_ExpBias -};; -{ .mfi - add GR_ad_1 = 0xB80,GR_ad_Data - fnorm.s1 FR_NormX = f8 - shr.u GR_Arg = GR_ArgAsIs,48 -} -{ .mib - add GR_ad_Co = GR_Ind,GR_ad_Data - add GR_ad_Ce = 0x10,GR_ad_Data - // jump if the input argument is NaTVal, NaN, +/-0, +/-INF or +/-deno -(p13) br.cond.spnt lgamma_spec -};; -lgamma_common: -{ .mfi - ldfpd FR_LocalMin,FR_05 = [GR_ad_1],16 - fmerge.se FR_x = f1,f8 - add GR_ad_2 = 0xBC0,GR_ad_Data -} -{ .mfb - add GR_ad_Ce = GR_Ind,GR_ad_Ce - fms.s1 FR_w = f8,f1,f1 // x-1 - // jump if the input argument is positive and less than 1.0 -(p10) br.cond.spnt lgamma_0_1 -};; -{ .mfi - ldfe FR_C01 = [GR_ad_Co],32 - fnma.s1 FR_InvX = FR_C,f8,f1 // NR iteration #1 -(p15) cmp.lt.unc p8,p0 = GR_ExpOf256,GR_SignExp -} -{ .mib - ldfe FR_C11 = [GR_ad_Ce],32 -(p15) cmp.lt.unc p11,p0 = GR_Arg,GR_2_25 - // jump if the input argument isn't less than 512.0 -(p8) br.cond.spnt lgamma_pstirling -};; -{ .mfi - ldfe FR_C21 = [GR_ad_Co],32 -(p14) fms.s1 FR_r = FR_C,f8,f1 // reduced arg for log(x) -(p14) cmp.lt.unc p0,p9 = GR_Exp,GR_ExpOf256 -} -{ .mib - ldfe FR_C31 = [GR_ad_Ce],32 - add GR_ad_Co7 = 0x12C0,GR_ad_2 - // jump if the input argument is from range [1.0; 2.25) -(p11) br.cond.spnt lgamma_1_2 -};; -{ .mfi - ldfe FR_C41 = [GR_ad_Co],32 - fcvt.xf FR_N = FR_int_N - add GR_ad_Ce7 = 0x1310,GR_ad_2 -} -{ .mfb - ldfe FR_C51 = [GR_ad_Ce],32 -(p14) fma.s1 FR_5 = FR_2,FR_2,f1 - // jump if the input argument is less or equal to -512.0 -(p9) br.cond.spnt lgamma_negstirling -};; -{ .mfi - ldfe FR_C61 = [GR_ad_Co],32 -(p14) fcvt.xf FR_Ntrunc = FR_int_Ntrunc - shr GR_Ind = GR_Ind,4 -} -{ .mfi - ldfe FR_C71 = [GR_ad_Ce],32 -(p14) fma.s1 FR_Xp1 = f1,f1,FR_NormX // x+1 - cmp.eq p6,p7 = GR_ExpOf2,GR_SignExp -};; -.pred.rel "mutex",p6,p7 -{ .mfi - ldfe FR_C81 = [GR_ad_Co],32 -(p6) fma.s1 FR_x = f0,f0,FR_NormX - shladd GR_Offs7 = GR_Ind,2,GR_Ind // (ind*16)*5 -} -{ .mfi - ldfe FR_C91 = [GR_ad_Ce],32 -(p7) fms.s1 FR_x = FR_x,f1,f1 - add GR_ad_Co7 = 0x800,GR_ad_Data -};; -{ .mfi - ldfe FR_CA1 = [GR_ad_Co],32 -(p14) fma.s1 FR_3 = f1,f1,FR_2 - shladd GR_Offs7 = GR_Ind,1,GR_Offs7 // (ind*16)*7 -} -{ .mfi - ldfe FR_C00 = [GR_ad_Ce],32 -(p14) fma.s1 FR_Xp4 = FR_2,FR_2,FR_NormX - add GR_ad_Ce7 = 0x810,GR_ad_Data -};; -{ .mfi - ldfe FR_C10 = [GR_ad_Co],32 -(p6) fms.s1 FR_Xm2 = FR_w,f1,f1 - add GR_ad_Co7 = GR_ad_Co7,GR_Offs7 -} -{ .mfi - ldfe FR_C20 = [GR_ad_Ce],32 -(p14) fma.s1 FR_r2 = FR_r,FR_r,f0 // log(x) - add GR_ad_Ce7 = GR_ad_Ce7,GR_Offs7 -};; -{ .mfi - ldfe FR_C30 = [GR_ad_Co],32 -(p14) fms.s1 FR_Xf = FR_NormX,f1,FR_N // xf = x - [x] -(p14) mov GR_Arg17 = 0xC031 // -17 -} -{ .mfi - ldfe FR_C40 = [GR_ad_Ce],32 -(p14) fma.s1 FR_Xp5 = FR_5,f1,FR_NormX -(p14) sub GR_Exp = GR_Exp,GR_ExpBias -};; -{ .mfi - ldfe FR_C50 = [GR_ad_Co7],32 -(p14) fms.s1 FR_Xfr = FR_Xp1,f1,FR_Ntrunc // xfr = (x+1) - [x] -(p14) cmp.lt.unc p13,p0 = GR_Arg,GR_Arg17 -} -{ .mfb - ldfe FR_C60 = [GR_ad_Ce7],32 -(p14) fma.s1 FR_Xp10 = FR_5,FR_2,FR_NormX - // jump if the input argument is negative and great than -17.0 -(p13) br.cond.spnt lgamma_negrecursion -};; -{ .mfi - ldfe FR_C70 = [GR_ad_Co7],32 - fma.s1 FR_C01 = FR_x,f1,FR_C01 -(p14) add GR_ad_Ce = 0x1310,GR_ad_2 -} -{ .mfi - ldfe FR_C80 = [GR_ad_Ce7],32 - fma.s1 FR_C11 = FR_x,f1,FR_C11 -(p14) add GR_ad_Co = 0x12C0,GR_ad_2 -};; -{ .mfi - ldfe FR_C90 = [GR_ad_Co7],32 - fma.s1 FR_C21 = FR_x,f1,FR_C21 - nop.i 0 -} -{ .mfi - ldfe FR_CA0 = [GR_ad_Ce7],32 - fma.s1 FR_C31 = FR_x,f1,FR_C31 - nop.i 0 -};; -{ .mfi - ldfe FR_CN = [GR_ad_Co7],32 - fma.s1 FR_C41 = FR_x,f1,FR_C41 - nop.i 0 -} -{ .mfi -(p14) ldfpd FR_P5,FR_P4 = [GR_ad_1],16 - fma.s1 FR_C51 = FR_x,f1,FR_C51 - nop.i 0 -};; -{ .mfi -(p14) ldfpd FR_P3,FR_P2 = [GR_ad_2],16 - fma.s1 FR_C61 = FR_x,f1,FR_C61 - nop.i 0 -} -{ .mfi -(p14) ldfe FR_Ln2 = [GR_ad_1] - fma.s1 FR_C71 = FR_x,f1,FR_C71 - nop.i 0 -};; -{ .mfi -(p14) ldfpd FR_S28,FR_S26 = [GR_ad_Co],16 - fma.s1 FR_C81 = FR_x,f1,FR_C81 - add GR_ad_2 = 0x60,GR_ad_2 -} -{ .mfi -(p14) ldfpd FR_S24,FR_S22 = [GR_ad_Ce],16 - fma.s1 FR_C91 = FR_x,f1,FR_C91 - nop.i 0 -};; -{ .mfi -(p14) ldfpd FR_S20,FR_S18 = [GR_ad_Co],16 - fma.s1 FR_CA1 = FR_x,f1,FR_CA1 - nop.i 0 -} -{ .mfi -(p14) ldfpd FR_S16,FR_S14 = [GR_ad_Ce],16 - fma.s1 FR_C01 = FR_C01,FR_x,FR_C00 - nop.i 0 -};; -{ .mfi -(p14) getf.exp GR_SignExp = FR_Xf - fma.s1 FR_C11 = FR_C11,FR_x,FR_C10 - nop.i 0 -} -{ .mfi -(p14) ldfe FR_S12 = [GR_ad_Co],16 - fma.s1 FR_C21 = FR_C21,FR_x,FR_C20 - nop.i 0 -};; -{ .mfi -(p14) getf.sig GR_Sig = FR_Xf -(p14) frcpa.s1 FR_InvXf,p0 = f1,FR_Xf - nop.i 0 -} -{ .mfi -(p14) ldfe FR_S10 = [GR_ad_Ce],16 - fma.s1 FR_C41 = FR_C41,FR_x,FR_C40 - nop.i 0 -};; -{ .mfi -(p14) ldfe FR_S8 = [GR_ad_Co],16 - fma.s1 FR_C51 = FR_C51,FR_x,FR_C50 - nop.i 0 -} -{ .mfi -(p14) ldfe FR_S6 = [GR_ad_Ce],16 - fma.s1 FR_C61 = FR_C61,FR_x,FR_C60 -(p14) and GR_Expf = GR_SignExp,GR_ExpMask -};; -{ .mfi -(p14) sub GR_Expf = GR_Expf,GR_ExpBias - fma.s1 FR_C71 = FR_C71,FR_x,FR_C70 -(p14) shl GR_Ind = GR_Sig,1 -} -{ .mfi -(p14) ldfe FR_S4 = [GR_ad_Co],16 - fma.s1 FR_C81 = FR_C81,FR_x,FR_C80 -(p14) cmp.eq.unc p8,p0 = 0,GR_Sig -};; -{ .mfi -(p14) setf.sig FR_int_Nf = GR_Expf - fma.s1 FR_C91 = FR_C91,FR_x,FR_C90 -(p14) shr.u GR_Ind = GR_Ind,56 -} -{ .mfb -(p14) ldfe FR_S2 = [GR_ad_Ce],16 - fma.s1 FR_CA1 = FR_CA1,FR_x,FR_CA0 - // jump if the input argument is integer number from range (-512.0;-17.0] -(p8) br.cond.spnt lgamma_singularity -};; -{ .mfi -(p14) getf.sig GR_Sig = FR_int_Ntrunc - fma.s1 FR_C01 = FR_C01,FR_C11,f0 - nop.i 0 -} -{ .mfi -(p14) shladd GR_ad_T = GR_Ind,4,GR_ad_2 - fma.s1 FR_C31 = FR_C31,FR_x,FR_C30 - nop.i 0 -};; -{ .mfi -(p14) ldfe FR_Tf = [GR_ad_T] -(p14) fms.s1 FR_rf = FR_InvXf,FR_Xf,f1 // reduced arg for log({x}) -(p14) extr.u GR_Ind = GR_ArgAsIs,44,8 -} -{ .mfi - // set p9 if signgum is 32-bit int - // set p10 if signgum is 64-bit int - cmp.eq p10,p9 = 8,r34 - fma.s1 FR_C21 = FR_C21,FR_C41,f0 - mov GR_SignOfGamma = 1 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C51 = FR_C51,FR_C61,f0 -(p14) tbit.z.unc p8,p0 = GR_Sig,0 -} -{ .mfi -(p14) shladd GR_ad_T = GR_Ind,4,GR_ad_2 -(p6) fma.s1 FR_CN = FR_CN,FR_Xm2,f0 - nop.i 0 -};; -{ .mfi -(p14) setf.sig FR_int_N = GR_Exp - fma.s1 FR_C71 = FR_C71,FR_C81,f0 -(p8) sub GR_SignOfGamma = r0,GR_SignOfGamma -} -{ .mfi - nop.m 0 -(p14) fma.s1 FR_Xf2 = FR_Xf,FR_Xf,f0 - nop.i 0 -};; -{ .mfi -(p14) ldfe FR_T = [GR_ad_T] - fma.s1 FR_C91 = FR_C91,FR_CA1,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p14) fma.s1 FR_r2 = FR_r,FR_r,f0 - nop.i 0 -};; -.pred.rel "mutex",p9,p10 -{ .mfi - // store sign of gamma(x) as 32-bit int -(p9) st4 [r33] = GR_SignOfGamma - fma.s1 FR_C01 = FR_C01,FR_C31,f0 - nop.i 0 -} -{ .mfi - // store sign of gamma(x) as 64-bit int -(p10) st8 [r33] = GR_SignOfGamma -(p14) fma.s1 FR_P54 = FR_P5,FR_r,FR_P4 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p14) fma.s1 FR_P32 = FR_P3,FR_r,FR_P2 - nop.i 0 -} -{ .mfb - nop.m 0 -(p14) fma.s1 FR_P54f = FR_P5,FR_rf,FR_P4 - // jump if the input argument is non-integer from range (-512.0;-17.0] -(p14) br.cond.spnt lgamma_negpoly -};; -{ .mfi - nop.m 0 - fma.s1 FR_C21 = FR_C21,FR_C51,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C71 = FR_C71,FR_C91,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_CN = FR_C01,FR_CN,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C21 = FR_C21,FR_C71,f0 - nop.i 0 -};; -{ .mfb - nop.m 0 - fma.d.s0 f8 = FR_C21,FR_CN,f0 - br.ret.sptk b0 // exit for arguments from range [2.25; 512.0) -};; -// branch for calculating of ln(GAMMA(x)) for -512 < x < -17 -//--------------------------------------------------------------------- -.align 32 -lgamma_negpoly: -{ .mfi - nop.m 0 - fma.s1 FR_Xf4 = FR_Xf2,FR_Xf2,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S28 = FR_S28,FR_Xf2,FR_S26 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S24 = FR_S24,FR_Xf2,FR_S22 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S20 = FR_S20,FR_Xf2,FR_S18 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S16 = FR_S16,FR_Xf2,FR_S14 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S12 = FR_S12,FR_Xf2,FR_S10 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S8 = FR_S8,FR_Xf2,FR_S6 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S4 = FR_S4,FR_Xf2,FR_S2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_rf2 = FR_rf,FR_rf,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P32f = FR_P3,FR_rf,FR_P2 // log(x) - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_r3 = FR_r2,FR_r,f0 // log(x) - nop.i 0 -} -{ .mfi - nop.m 0 - fcvt.xf FR_Nf = FR_int_Nf // log({x}) - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S28 = FR_S28,FR_Xf4,FR_S24 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_Xf8 = FR_Xf4,FR_Xf4,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S20 = FR_S20,FR_Xf4,FR_S16 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_C21 = FR_C21,FR_C51,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S12 = FR_S12,FR_Xf4,FR_S8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_C71 = FR_C71,FR_C91,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fnma.s1 FR_P10 = FR_r2,FR_05,FR_r // log(x) - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P54 = FR_P54,FR_r2,FR_P32 // log(x) - nop.i 0 -};; -{ .mfi - nop.m 0 - fnma.s1 FR_P10f = FR_rf2,FR_05,FR_rf // log({x}) - nop.i 0 -} -{ .mfi - nop.m 0 - fcvt.xf FR_N = FR_int_N // log(x) - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_rf3 = FR_rf2,FR_rf,f0 // log({x}) - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P54f = FR_P54f,FR_rf2,FR_P32f // log({x}) - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S28 = FR_S28,FR_Xf8,FR_S20 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_TpNxLn2f = FR_Nf,FR_Ln2,FR_Tf // log({x}) - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_CN = FR_C01,FR_CN,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_C21 = FR_C21,FR_C71,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_P54 = FR_P54,FR_r3,FR_P10 // log(x) - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_TpNxLn2 = FR_N,FR_Ln2,FR_T // log(x) - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_P54f = FR_P54f,FR_rf3,FR_P10f // log({x}) - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S28 = FR_S28,FR_Xf8,FR_S12 - nop.i 0 -};; -{ .mfi - nop.m 0 - fnma.s1 FR_C21 = FR_C21,FR_CN,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_LnX = FR_TpNxLn2,f1,FR_P54 // log(x) - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_LnXf = FR_TpNxLn2f,f1,FR_P54f // log({x}) - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S28 = FR_S28,FR_Xf4,FR_S4 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_LnX = FR_LnX,f1,FR_LnXf - nop.i 0 -};; -{ .mfi - nop.m 0 - fnma.s1 FR_S28 = FR_S28,FR_Xf2,FR_C21 - nop.i 0 -};; -{ .mfb - nop.m 0 - fms.d.s0 f8 = FR_S28,f1,FR_LnX - br.ret.sptk b0 -};; -// branch for calculating of ln(GAMMA(x)) for x >= 512 -//--------------------------------------------------------------------- -.align 32 -lgamma_pstirling: -{ .mfi - ldfpd FR_P5,FR_P4 = [GR_ad_1],16 - nop.f 0 - and GR_Exp = GR_SignExp,GR_ExpMask -} -{ .mfi - ldfpd FR_P3,FR_P2 = [GR_ad_2],16 - fma.s1 FR_InvX = FR_C,FR_InvX,FR_C // NR iteration #1 - mov GR_ExpBias = 0xffff -};; -{ .mfi - ldfe FR_Ln2 = [GR_ad_1],16 - nop.f 0 - sub GR_Exp = GR_Exp,GR_ExpBias -};; -{ .mfi - ldfpd FR_W4,FR_OvfBound = [GR_ad_2],16 - nop.f 0 - nop.i 0 -};; -{ .mfi - setf.sig FR_int_N = GR_Exp - fms.s1 FR_r = FR_C,f8,f1 - nop.i 0 -};; -{ .mmf - getf.sig GR_Sig = FR_NormX - ldfe FR_LnSqrt2Pi = [GR_ad_1],16 - nop.f 0 -};; -{ .mmf - ldfe FR_W2 = [GR_ad_2],16 - nop.m 0 - fnma.s1 FR_InvX2 = FR_InvX,FR_NormX,f1 // NR iteration #2 -};; -{ .mfi - add GR_ad_2 = 0x40,GR_ad_2 - nop.f 0 - shl GR_Ind = GR_Sig,1 -};; -{ .mfi - mov GR_SignOfGamma = 1 - nop.f 0 - shr.u GR_Ind = GR_Ind,56 -};; -{ .mfi - shladd GR_ad_2 = GR_Ind,4,GR_ad_2 - fma.s1 FR_r2 = FR_r,FR_r,f0 - // set p9 if signgum is 32-bit int - // set p10 if signgum is 64-bit int - cmp.eq p10,p9 = 8,r34 -};; -{ .mfi - ldfe FR_T = [GR_ad_2] - fma.s1 FR_P54 = FR_P5,FR_r,FR_P4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P32 = FR_P3,FR_r,FR_P2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fcmp.le.s1 p6,p0 = FR_OvfBound,FR_NormX - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_InvX2 = FR_InvX,FR_InvX2,FR_InvX // NR iteration #2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fcvt.xf FR_N = FR_int_N - nop.i 0 -} -{ .mfb - nop.m 0 - nop.f 0 - // jump if x is great than OVERFLOW_BOUNDARY -(p6) br.cond.spnt lgamma_overflow -};; -.pred.rel "mutex",p9,p10 -{ .mfi - // store sign of gamma(x) as 32-bit int -(p9) st4 [r33] = GR_SignOfGamma - fma.s1 FR_r3 = FR_r2,FR_r,f0 - nop.i 0 -} -{ .mfi - // store sign of gamma(x) as 64-bit int -(p10) st8 [r33] = GR_SignOfGamma - fnma.s1 FR_P10 = FR_r2,FR_05,FR_r - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_P54 = FR_P54,FR_r2,FR_P32 - nop.i 0 -};; -{ .mfi - nop.m 0 - fnma.s1 FR_InvX = FR_InvX2,FR_NormX,f1 // NR iteration #3 - nop.i 0 -};; -{ .mfi - nop.m 0 - fms.s1 FR_Xm05 = FR_NormX,f1,FR_05 // (x-1/2) - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_TpNxLn2 = FR_N,FR_Ln2,FR_T - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_P54 = FR_P54,FR_r3,FR_P10 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_InvX = FR_InvX2,FR_InvX,FR_InvX2 // NR iteration #3 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_LnSqrt2Pi = FR_LnSqrt2Pi,f1,FR_NormX // ln(sqrt(2*Pi))-x - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_LnX = FR_TpNxLn2,f1,FR_P54 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_InvX2 = FR_InvX,FR_InvX,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - // (x-1/2)*ln(x)+ln(sqrt(2*Pi))-x - fma.s1 FR_LnX = FR_LnX,FR_Xm05,FR_LnSqrt2Pi - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_W2 = FR_W4,FR_InvX2,FR_W2 // W2 + W4/x^2 - nop.i 0 -};; -{ .mfb - nop.m 0 - fma.d.s0 f8 = FR_InvX,FR_W2,FR_LnX - br.ret.sptk b0 -};; -// branch for calculating of ln(GAMMA(x)) for x < -512 -//--------------------------------------------------------------------- -.align 32 -lgamma_negstirling: -{ .mfi - ldfpd FR_P5,FR_P4 = [GR_ad_1],16 - fms.s1 FR_Xf = FR_NormX,f1,FR_N // xf = x - [x] - and GR_Exp = GR_SignExp,GR_ExpMask -} -{ .mfi - ldfpd FR_P3,FR_P2 = [GR_ad_2],16 - fma.s1 FR_InvX = FR_C,FR_InvX,FR_C // NR iteration #1 - mov GR_0x30033 = 0x30033 -};; -{ .mfi - ldfe FR_Ln2 = [GR_ad_1],16 - nop.f 0 - extr.u GR_Ind = GR_ArgAsIs,44,8 -} -{ .mib - ldfd FR_W4 = [GR_ad_2],16 - // jump if x is less or equal to -2^52, i.e. x is big negative integer - cmp.leu.unc p7,p0 = GR_0x30033,GR_SignExp -(p7) br.cond.spnt lgamma_singularity -};; -{ .mfi - ldfpd FR_S28,FR_S26 = [GR_ad_Co7],16 - nop.f 0 - add GR_ad_LnT = 0x50,GR_ad_2 -} -{ .mfi - ldfpd FR_S24,FR_S22 = [GR_ad_Ce7],16 - nop.f 0 - mov GR_ExpBias = 0xffff -};; -{ .mfi - ldfpd FR_S20,FR_S18 = [GR_ad_Co7],16 - nop.f 0 - shladd GR_ad_T = GR_Ind,4,GR_ad_LnT -} -{ .mfi - ldfpd FR_S16,FR_S14 = [GR_ad_Ce7],16 - nop.f 0 - sub GR_Exp = GR_Exp,GR_ExpBias -};; -{ .mfi - ldfe FR_S12 = [GR_ad_Co7],16 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe FR_S10 = [GR_ad_Ce7],16 - fms.s1 FR_r = FR_C,f8,f1 - nop.i 0 -};; -{ .mmf - ldfe FR_S8 = [GR_ad_Co7],16 - ldfe FR_S6 = [GR_ad_Ce7],16 - nop.f 0 -};; -{ .mfi - ldfe FR_S4 = [GR_ad_Co7],16 - fma.s1 FR_Xf2 = FR_Xf,FR_Xf,f0 - nop.i 0 -} -{ .mfi - ldfe FR_S2 = [GR_ad_Ce7],16 - fnma.s1 FR_InvX2 = FR_InvX,FR_NormX,f1 // NR iteration #2 - nop.i 0 -};; -{ .mfi - setf.sig FR_int_N = GR_Exp - frcpa.s1 FR_InvXf,p9 = f1,FR_Xf // 1/xf - nop.i 0 -} -{ .mfi - ldfe FR_LnSqrt2Pi = [GR_ad_1],16 - nop.f 0 - nop.i 0 -};; -{ .mfi - getf.exp GR_SignExp = FR_Xf - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe FR_W2 = [GR_ad_2],16 - nop.f 0 - nop.i 0 -};; -{ .mfi - getf.sig GR_Sig = FR_Xf - fma.s1 FR_P54 = FR_P5,FR_r,FR_P4 - nop.i 0 -} -{ .mfi - ldfe FR_T = [GR_ad_T] - fma.s1 FR_P32 = FR_P3,FR_r,FR_P2 - nop.i 0 -};; -{ .mfi - and GR_Exp = GR_SignExp,GR_ExpMask - fma.s1 FR_r2 = FR_r,FR_r,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_Xm05 = FR_NormX,f1,FR_05 // (x-1/2) - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_InvX2 = FR_InvX,FR_InvX2,FR_InvX // NR iteration #2 - extr.u GR_Ind = GR_Sig,55,8 -} -{ .mfi - sub GR_Exp = GR_Exp,GR_ExpBias - fma.s1 FR_Xf4 = FR_Xf2,FR_Xf2,f0 - cmp.eq p6,p0 = 0,GR_Sig -};; -{ .mfi - setf.sig FR_int_Nf = GR_Exp - fma.s1 FR_S28 = FR_S28,FR_Xf2,FR_S26 - shladd GR_ad_T = GR_Ind,4,GR_ad_LnT -} -{ .mfb - nop.m 0 - fma.s1 FR_S24 = FR_S24,FR_Xf2,FR_S22 - // jump if the input argument is integer number from range (-512.0;-17.0] -(p6) br.cond.spnt lgamma_singularity -};; -{ .mfi - getf.sig GR_Sig = FR_int_Ntrunc - fma.s1 FR_S20 = FR_S20,FR_Xf2,FR_S18 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S16 = FR_S16,FR_Xf2,FR_S14 - nop.i 0 -};; -{ .mfi - ldfe FR_Tf = [GR_ad_T] - fma.s1 FR_S12 = FR_S12,FR_Xf2,FR_S10 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S8 = FR_S8,FR_Xf2,FR_S6 - mov GR_SignOfGamma = 1 -};; -{ .mfi - nop.m 0 - fms.s1 FR_rf = FR_InvXf,FR_Xf,f1 // reduced arg rf - tbit.z p8,p0 = GR_Sig,0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r3 = FR_r2,FR_r,f0 - // set p9 if signgum is 32-bit int - // set p10 if signgum is 64-bit int - cmp.eq p10,p9 = 8,r34 -};; -{ .mfi - nop.m 0 - fcvt.xf FR_N = FR_int_N -(p8) sub GR_SignOfGamma = r0,GR_SignOfGamma -} -{ .mfi - nop.m 0 - fnma.s1 FR_InvX = FR_InvX2,FR_NormX,f1 // NR iteration #3 - nop.i 0 -};; -.pred.rel "mutex",p9,p10 -{ .mfi - // store sign of gamma(x) as 32-bit int -(p9) st4 [r33] = GR_SignOfGamma - fma.s1 FR_P54 = FR_P54,FR_r2,FR_P32 - nop.i 0 -} -{ .mfi - // store sign of gamma(x) as 64-bit int -(p10) st8 [r33] = GR_SignOfGamma - fnma.s1 FR_P10 = FR_r2,FR_05,FR_r - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_Xf8 = FR_Xf4,FR_Xf4,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S28 = FR_S28,FR_Xf4,FR_S24 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S20 = FR_S20,FR_Xf4,FR_S16 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S12 = FR_S12,FR_Xf4,FR_S8 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_rf2 = FR_rf,FR_rf,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P54f = FR_P5,FR_rf,FR_P4 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_P32f = FR_P3,FR_rf,FR_P2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_InvX = FR_InvX2,FR_InvX,FR_InvX2 // NR iteration #3 - nop.i 0 -};; -{ .mfi - nop.m 0 - fcvt.xf FR_Nf = FR_int_Nf - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_LnSqrt2Pi = FR_NormX,f1,FR_LnSqrt2Pi // x+ln(sqrt(2*Pi)) - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_P54 = FR_P54,FR_r3,FR_P10 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S28 = FR_S28,FR_Xf8,FR_S20 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_rf3 = FR_rf2,FR_rf,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_P10f = FR_rf2,FR_05,FR_rf - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_TpNxLn2 = FR_N,FR_Ln2,FR_T - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P54f = FR_P54f,FR_rf2,FR_P32f - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_InvX2 = FR_InvX,FR_InvX,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S28 = FR_S28,FR_Xf8,FR_S12 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S4 = FR_S4,FR_Xf2,FR_S2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_P54f = FR_P54f,FR_rf3,FR_P10f - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_TpNxLn2f = FR_Nf,FR_Ln2,FR_Tf - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_LnX = FR_TpNxLn2,f1,FR_P54 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_W2 = FR_W4,FR_InvX2,FR_W2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S28 = FR_S28,FR_Xf4,FR_S4 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_LnXf = FR_TpNxLn2f,f1,FR_P54f - nop.i 0 -};; -{ .mfi - nop.m 0 - fms.s1 FR_LnX = FR_LnX,FR_Xm05,FR_LnSqrt2Pi - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_LnX = FR_InvX,FR_W2,FR_LnX - nop.i 0 -};; -{ .mfi - nop.m 0 - fnma.s1 FR_LnX = FR_S28,FR_Xf2,FR_LnX - nop.i 0 -};; -{ .mfb - nop.m 0 - fms.d.s0 f8 = FR_LnX,f1,FR_LnXf - br.ret.sptk b0 -};; -// branch for calculating of ln(GAMMA(x)) for 0 <= x < 1 -//--------------------------------------------------------------------- -.align 32 -lgamma_0_1: -{ .mfi - ldfpd FR_P5,FR_P4 = [GR_ad_1],16 - fms.s1 FR_x = FR_NormX,f1,f0 // x - mov GR_Arg025 = 0x3FD0 -} -{ .mfi - ldfpd FR_P3,FR_P2 = [GR_ad_2],16 - nop.f 0 - add GR_ad_Co = 0x1C40,GR_ad_Data -};; -{ .mfi - ldfe FR_Ln2 = [GR_ad_1],0x50 - nop.f 0 - // p6 if arg < 0.25 - cmp.lt p6,p9 = GR_Arg,GR_Arg025 -} -{ .mfi - add GR_ad_2 = 0x40,GR_ad_2 - nop.f 0 - mov GR_Arg075 = 0x3FE8 -};; -{ .mfi - ldfpd FR_Q8,FR_Q7 = [GR_ad_1],16 - fma.s1 FR_w2 = FR_w,FR_w,f0 - // p7 if 0.25 <= arg < 0.75 - // p8 if 0.75 <= arg < 1.0 -(p9) cmp.lt.unc p7,p8 = GR_Arg,GR_Arg075 -} -{ .mfi - mov GR_Arg0875 = 0x3FEC - nop.f 0 - sub GR_Exp = GR_Exp,GR_ExpBias -};; -{ .mfi - ldfpd FR_Q6,FR_Q5 = [GR_ad_2],16 - nop.f 0 -(p8) cmp.lt p9,p0 = GR_Arg,GR_Arg0875 -} -{ .mfi - ldfpd FR_Q4,FR_Q3 = [GR_ad_1],16 - nop.f 0 - add GR_ad_Ce = 0x60,GR_ad_Co -};; -.pred.rel "mutex",p7,p8 -{ .mfi - ldfd FR_Q2 = [GR_ad_2],16 - fms.s1 FR_r = FR_C,f8,f1 -(p7) mov GR_Offs = 0xC0 -} -{ .mfi - setf.sig FR_int_N = GR_Exp - nop.f 0 -(p8) mov GR_Offs = 0x180 -};; -.pred.rel "mutex",p6,p7 -{ .mfi -(p9) add GR_ad_Co = GR_Offs,GR_ad_Co -(p8) fms.s1 FR_x = FR_NormX,f1,f1 // x-1 - nop.i 0 -} -{ .mfi -(p9) add GR_ad_Ce = GR_Offs,GR_ad_Ce -(p7) fms.s1 FR_x = FR_NormX,f1,FR_LocalMin // x-LocalMin - cmp.lt p10,p0 = GR_Arg,GR_Arg0875 -};; -lgamma_common_0_2: -{ .mfi - ldfpd FR_A17,FR_A16 = [GR_ad_Co],16 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfpd FR_A15,FR_A14 = [GR_ad_Ce],16 - nop.f 0 - nop.i 0 -};; -{ .mfi - ldfpd FR_A13,FR_A12 = [GR_ad_Co],16 - nop.f 0 -(p10) extr.u GR_Ind = GR_ArgAsIs,44,8 -} -{ .mfi - ldfpd FR_A11,FR_A10 = [GR_ad_Ce],16 - nop.f 0 - nop.i 0 -};; -{ .mfi - ldfpd FR_A9,FR_A8 = [GR_ad_Co],16 -(p10) fnma.s1 FR_Q1 = FR_05,FR_w2,FR_w - nop.i 0 -} -{ .mfi - ldfpd FR_A7,FR_A6 = [GR_ad_Ce],16 -(p10) fma.s1 FR_w3 = FR_w2,FR_w,f0 - nop.i 0 -};; -{ .mfi -(p10) getf.exp GR_SignExp_w = FR_w -(p10) fma.s1 FR_w4 = FR_w2,FR_w2,f0 - nop.i 0 -} -{ .mfi -(p10) shladd GR_ad_2 = GR_Ind,4,GR_ad_2 -(p10) fma.s1 FR_r2 = FR_r,FR_r,f0 - nop.i 0 -};; -{ .mfi -(p10) ldfe FR_T = [GR_ad_2] -(p10) fma.s1 FR_P54 = FR_P5,FR_r,FR_P4 - nop.i 0 -} -{ .mfi - ldfe FR_A5 = [GR_ad_Co],16 -(p10) fma.s1 FR_P32 = FR_P3,FR_r,FR_P2 - nop.i 0 -};; -{ .mfi - ldfe FR_A4 = [GR_ad_Ce],16 - fma.s1 FR_x2 = FR_x,FR_x,f0 -(p10) and GR_Exp_w = GR_ExpMask, GR_SignExp_w -} -{ .mfi - ldfe FR_A3 = [GR_ad_Co],16 - nop.f 0 -(p10) mov GR_fff9 = 0xfff9 -};; -// p13 <== large w __libm_lgamma -// p14 <== small w __libm_lgamma -{ .mfi - ldfe FR_A2 = [GR_ad_Ce],16 -(p10) fma.s1 FR_Q8 = FR_Q8,FR_w,FR_Q7 -(p10) cmp.ge.unc p13,p14 = GR_Exp_w,GR_fff9 -} -{ .mfi - ldfe FR_A1 = [GR_ad_Co],16 -(p10) fma.s1 FR_Q6 = FR_Q6,FR_w,FR_Q5 - nop.i 0 -};; -{ .mfi - ldfe FR_A0 = [GR_ad_Ce],16 -(p10) fma.s1 FR_Q4 = FR_Q4,FR_w,FR_Q3 - nop.i 0 -} -{ .mfi - nop.m 0 -(p10) fma.s1 FR_Q2 = FR_Q2,FR_w3,FR_Q1 - nop.i 0 -};; -{ .mfi - // set p11 if signgum is 32-bit int - // set p12 if signgum is 64-bit int - cmp.eq p12,p11 = 8,r34 -(p10) fma.s1 FR_r3 = FR_r2,FR_r,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p10) fnma.s1 FR_P10 = FR_r2,FR_05,FR_r - mov GR_SignOfGamma = 1 -};; -.pred.rel "mutex",p11,p12 -{ .mfi - // store sign of gamma(x) as 32-bit int -(p11) st4 [r33] = GR_SignOfGamma - fma.s1 FR_A17 = FR_A17,FR_x,FR_A16 - nop.i 0 -} -{ .mfi - // store sign of gamma(x) as 64-bit int -(p12) st8 [r33] = GR_SignOfGamma - fma.s1 FR_A15 = FR_A15,FR_x,FR_A14 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p10) fcvt.xf FR_N = FR_int_N - nop.i 0 -} -{ .mfi - nop.m 0 -(p10) fma.s1 FR_P54 = FR_P54,FR_r2,FR_P32 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A13 = FR_A13,FR_x,FR_A12 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A11 = FR_A11,FR_x,FR_A10 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A9 = FR_A9,FR_x,FR_A8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A7 = FR_A7,FR_x,FR_A6 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p10) fma.s1 FR_Qlo = FR_Q8,FR_w2,FR_Q6 - nop.i 0 -} -{ .mfi - nop.m 0 -(p10) fma.s1 FR_w6 = FR_w3,FR_w3,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p10) fma.s1 FR_Qhi = FR_Q4,FR_w4,FR_Q2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A5 = FR_A5,FR_x,FR_A4 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p10) fma.s1 FR_TpNxLn2 = FR_N,FR_Ln2,FR_T - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A3 = FR_A3,FR_x,FR_A2 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p10) fma.s1 FR_P54 = FR_P54,FR_r3,FR_P10 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A1 = FR_A1,FR_x,FR_A0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A17 = FR_A17,FR_x2,FR_A15 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A13 = FR_A13,FR_x2,FR_A11 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A9 = FR_A9,FR_x2,FR_A7 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_x4 = FR_x2,FR_x2,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p14) fma.s1 FR_LnX = FR_Qlo,FR_w6,FR_Qhi - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A5 = FR_A5,FR_x2,FR_A3 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p13) fma.s1 FR_LnX = FR_TpNxLn2,f1,FR_P54 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A17 = FR_A17,FR_x4,FR_A13 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_x8 = FR_x4,FR_x4,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A9 = FR_A9,FR_x4,FR_A5 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A17 = FR_A17,FR_x8,FR_A9 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p10) fms.s1 FR_A1 = FR_A1,f1,FR_LnX - nop.i 0 -};; -{ .mfb - nop.m 0 - fma.d.s0 f8 = FR_A17,FR_x2,FR_A1 - br.ret.sptk b0 -};; -// branch for calculating of ln(GAMMA(x)) for 1.0 <= x < 2.25 -//--------------------------------------------------------------------- -.align 32 -lgamma_1_2: -{ .mfi - add GR_ad_Co = 0x10B0,GR_ad_1 - fcmp.eq.s1 p12,p0 = f1,FR_w - mov GR_Arg125 = 0x3FF4 -} -{ .mfi - add GR_ad_Ce = 0x1110,GR_ad_1 - nop.f 0 - mov GR_Arg175 = 0x3FFC -};; -{ .mfi - mov GR_SignOfGamma = 1 - fcmp.eq.s1 p13,p0 = f1,FR_NormX - cmp.lt p6,p9 = GR_Arg,GR_Arg125 // 1.0 <= x < 1.25 -} -{ .mfi - // set p10 if signgum is 32-bit int - // set p11 if signgum is 64-bit int - cmp.eq p11,p10 = 8,r34 - nop.f 0 - cmp.ge p8,p0 = GR_Arg,GR_Arg175 // x >= 1.75 -};; -.pred.rel "mutex",p10,p11 -{ .mfi - // store sign of gamma(x) as 32-bit int -(p10) st4 [r33] = GR_SignOfGamma -(p12) fma.d.s0 f8 = f0,f0,f0 -(p9) cmp.lt.unc p7,p0 = GR_Arg,GR_Arg175 // 1.25 <= x < 1.75 -} -{ .mib - // store sign of gamma(x) as 64-bit int -(p11) st8 [r33] = GR_SignOfGamma - mov GR_Offs = 0 -(p12) br.ret.spnt b0 // fast exit for 2.0 -};; -.pred.rel "mutex",p7,p8 -{ .mfi -(p7) mov GR_Offs = 0xC0 -(p7) fms.s1 FR_x = FR_w,f1,FR_LocalMin - nop.i 0 -} -{ .mfb -(p8) mov GR_Offs = 0x180 -(p13) fma.d.s0 f8 = f0,f0,f0 -(p13) br.ret.spnt b0 // fast exit for 1.0 -};; -.pred.rel "mutex",p6,p8 -{ .mfi - add GR_ad_Co = GR_ad_Co,GR_Offs -(p8) fms.s1 FR_x = FR_w,f1,f1 - cmp.eq p0,p10 = r0,r0 -} -{ .mfb - add GR_ad_Ce = GR_ad_Ce,GR_Offs -(p6) fma.s1 FR_x = f0,f0,FR_w - br.cond.sptk lgamma_common_0_2 -};; -// branch for calculating of ln(GAMMA(x)) for -17 < x < 0 -//--------------------------------------------------------------------- -.align 32 -lgamma_negrecursion: -{ .mfi - getf.d GR_ArgXfrAsIs = FR_Xfr - fma.s1 FR_Xp2 = FR_2,f1,FR_NormX - mov GR_Arg05 = 0x3FE -} -{ .mfi - add GR_ad_Roots = 0x1390,GR_ad_1 - fma.s1 FR_NormX = FR_NormX,FR_Xfr,f0 - mov GR_Arg075 = 0x3FE8 -};; -{ .mfi - getf.sig GR_Sig = FR_int_Ntrunc - fma.s1 FR_Xp3 = FR_2,f1,FR_Xp1 - shl GR_Arg05 = GR_Arg05,52 -} -{ .mfi - mov GR_Arg025 = 0x3FD0 - fma.s1 FR_Xp6 = FR_5,f1,FR_Xp1 - add GR_ad_Co = 0x1C40,GR_ad_Data -};; -{ .mfi - add GR_ad_Dx = 8,GR_ad_Roots - fma.s1 FR_Xp7 = FR_2,f1,FR_Xp5 - shr.u GR_ArgXfr = GR_ArgXfrAsIs,48 -} -{ .mfi - add GR_ad_Ce = 0x60,GR_ad_Co - fma.s1 FR_Xp8 = FR_3,f1,FR_Xp5 - cmp.lt p6,p0 = GR_ArgXfrAsIs,GR_Arg05 -};; -{ .mfi - and GR_RootInd = 0xF,GR_Sig - fma.s1 FR_Xp9 = FR_2,FR_2,FR_Xp5 - // p10 if arg < 0.25 - cmp.lt p10,p14 = GR_ArgXfr,GR_Arg025 -} -{ .mfi -(p6) add GR_ad_Roots = 0x120,GR_ad_Roots - fma.s1 FR_Xp11 = f1,f1,FR_Xp10 -(p6) add GR_ad_Dx = 0x120,GR_ad_Dx -};; -{ .mfi - shladd GR_ad_Root = GR_RootInd,4,GR_ad_Roots - fma.s1 FR_Xp12 = FR_2,f1,FR_Xp10 - // p11 if 0.25 <= arg < 0.75 - // p12 if 0.75 <= arg < 1.0 -(p14) cmp.lt.unc p11,p12 = GR_ArgXfr,GR_Arg075 -} -{ .mfi - shladd GR_ad_Dx = GR_RootInd,4,GR_ad_Dx - fma.s1 FR_Xp13 = FR_3,f1,FR_Xp10 - cmp.eq p0,p13 = 0,GR_Sig -};; -{ .mfi - ld8 GR_Root = [GR_ad_Root] - fma.s1 FR_Xp14 = FR_2,FR_2,FR_Xp10 -(p12) mov GR_Offs = 0x180 -} -{ .mfi - ldfd FR_Root = [GR_ad_Root] - fma.s1 FR_Xp15 = FR_5,f1,FR_Xp10 - and GR_Sig = 0xF,GR_Sig -};; -{ .mfi - ld8 GR_Dx = [GR_ad_Dx] - fma.s1 FR_Xp16 = FR_3,FR_2,FR_Xp10 -(p13) cmp.ge.unc p6,p0 = 0xD,GR_Sig -} -{ .mfi -(p11) mov GR_Offs = 0xC0 -(p13) fma.s1 FR_NormX = FR_NormX,FR_Xp1,f0 -(p13) cmp.ge.unc p7,p0 = 0xB,GR_Sig -};; -{ .mfi -(p14) add GR_ad_Co = GR_Offs,GR_ad_Co -(p6) fma.s1 FR_Xp2 = FR_Xp2,FR_Xp3,f0 -(p13) cmp.ge.unc p8,p0 = 0x9,GR_Sig -} -{ .mfi -(p14) add GR_ad_Ce = GR_Offs,GR_ad_Ce -(p7) fma.s1 FR_Xp4 = FR_Xp4,FR_Xp5,f0 -(p13) cmp.ge.unc p9,p0 = 0x7,GR_Sig -};; -{ .mfi - ldfpd FR_B17,FR_B16 = [GR_ad_Co],16 -(p8) fma.s1 FR_Xp6 = FR_Xp6,FR_Xp7,f0 -(p13) cmp.ge.unc p6,p0 = 0x5,GR_Sig -} -{ .mfi - ldfpd FR_B15,FR_B14 = [GR_ad_Ce],16 -(p9) fma.s1 FR_Xp8 = FR_Xp8,FR_Xp9,f0 -(p13) cmp.ge.unc p7,p0 = 0x3,GR_Sig -};; -{ .mfi - ldfpd FR_B13,FR_B12 = [GR_ad_Co],16 -(p6) fma.s1 FR_Xp10 = FR_Xp10,FR_Xp11,f0 -(p13) cmp.ge.unc p8,p0 = 0x1,GR_Sig -} -{ .mfi - ldfpd FR_B11,FR_B10 = [GR_ad_Ce],16 -(p7) fma.s1 FR_Xp12 = FR_Xp12,FR_Xp13,f0 -(p13) cmp.eq.unc p9,p0 = 0,GR_Sig -};; -{ .mfi - ldfpd FR_B9,FR_B8 = [GR_ad_Co],16 -(p8) fma.s1 FR_Xp14 = FR_Xp14,FR_Xp15,f0 - mov GR_Arg15 = 0xC02E // -15 -} -{ .mfi - ldfpd FR_B7,FR_B6 = [GR_ad_Ce],16 - fcmp.eq.s1 p15,p0 = f0,FR_Xf -(p13) cmp.ge.unc p6,p0 = 0xC,GR_Sig -};; -{ .mfi - ldfe FR_B5 = [GR_ad_Co],16 -(p9) fma.s1 FR_NormX = FR_NormX,FR_Xp16,f0 - sub GR_Root = GR_ArgAsIs,GR_Root -} -{ .mfi - sub GR_RootInd = 0xE,GR_RootInd -(p11) fms.s1 FR_x = FR_Xfr,f1,FR_LocalMin // x-LocalMin -(p13) cmp.ge.unc p7,p0 = 0x8,GR_Sig -};; -.pred.rel "mutex",p10,p12 -{ .mfi - ldfe FR_B4 = [GR_ad_Ce],16 -(p10) fms.s1 FR_x = FR_Xfr,f1,f0 // x - add GR_Root = GR_Root,GR_Dx -} -{ .mfb - cmp.gtu p14,p0 = 0xE,GR_RootInd -(p12) fms.s1 FR_x = FR_Xfr,f1,f1 // x-1 -(p15) br.cond.spnt lgamma_singularity -};; -{ .mfi - ldfe FR_B3 = [GR_ad_Co],16 -(p6) fma.s1 FR_Xp2 = FR_Xp2,FR_Xp4,f0 -(p14) cmp.lt.unc p11,p0 = GR_Arg,GR_Arg15 -} -{ .mfi - ldfe FR_B2 = [GR_ad_Ce],16 -(p7) fma.s1 FR_Xp6 = FR_Xp6,FR_Xp8,f0 - add GR_2xDx = GR_Dx,GR_Dx -};; -{ .mfi - ldfe FR_B1 = [GR_ad_Co],16 - fms.s1 FR_r = f8,f1,FR_Root -(p13) cmp.ge.unc p6,p0 = 0x4,GR_Sig -} -{ .mib - ldfe FR_B0 = [GR_ad_Ce],16 -(p11) cmp.leu.unc p10,p0 = GR_Root,GR_2xDx -(p10) br.cond.spnt lgamma_negroots -};; -{ .mfi - ldfpd FR_P5,FR_P4 = [GR_ad_1],16 -(p6) fma.s1 FR_Xp10 = FR_Xp10,FR_Xp12,f0 - tbit.z p14,p15 = GR_Sig,0 -} -{ .mfi - ldfpd FR_P3,FR_P2 = [GR_ad_2],16 - fnma.d.s0 FR_T = f1,f1,f8 // nop.f 0 - -(p13) cmp.ge.unc p7,p0 = 0x2,GR_Sig -};; -{ .mfi - ldfe FR_Ln2 = [GR_ad_1],0x50 -(p7) fma.s1 FR_NormX = FR_NormX,FR_Xp14,f0 - mov GR_PseudoRoot = 0xBFFBC -} -{ .mlx - add GR_ad_2 = 0x40,GR_ad_2 - movl GR_2xDx = 0x00002346DC5D6389 -};; -{ .mfi - ldfpd FR_Q8,FR_Q7 = [GR_ad_1],16 - fma.s1 FR_x2 = FR_x,FR_x,f0 - shl GR_PseudoRoot = GR_PseudoRoot,44 -} -{ .mfi - ldfpd FR_Q6,FR_Q5 = [GR_ad_2],16 - fma.s1 FR_B17 = FR_B17,FR_x,FR_B16 -(p13) cmp.ge.unc p6,p0 = 0xA,GR_Sig -};; -{ .mfi - ldfpd FR_Q4,FR_Q3 = [GR_ad_1],16 -(p6) fma.s1 FR_Xp2 = FR_Xp2,FR_Xp6,f0 - sub GR_PseudoRoot = GR_ArgAsIs,GR_PseudoRoot -} -{ .mfi - ldfpd FR_Q2,FR_Q1 = [GR_ad_2],16 - fma.s1 FR_B15 = FR_B15,FR_x,FR_B14 -(p13) cmp.ge.unc p7,p0 = 0x6,GR_Sig -};; -{ .mfi - add GR_ad_Co = 0x12F0,GR_ad_2 - fma.s1 FR_B13 = FR_B13,FR_x,FR_B12 - cmp.leu.unc p10,p0 = GR_PseudoRoot,GR_2xDx -} -{ .mfi - add GR_ad_Ce = 0x1300,GR_ad_2 - fma.s1 FR_B11 = FR_B11,FR_x,FR_B10 - mov GR_ExpMask = 0x1ffff -};; -{ .mfi -(p10) ldfe FR_PR01 = [GR_ad_Co],0xF0 - fma.s1 FR_B9 = FR_B9,FR_x,FR_B8 - mov GR_ExpBias = 0xFFFF -} -{ .mfb -(p10) ldfe FR_PR11 = [GR_ad_Ce],0xF0 - fma.s1 FR_B7 = FR_B7,FR_x,FR_B6 -(p10) br.cond.spnt lgamma_pseudoroot -};; -{ .mfi -(p13) cmp.ge.unc p6,p0 = 0xE,GR_Sig -(p7) fma.s1 FR_NormX = FR_NormX,FR_Xp10,f0 - tbit.z.unc p8,p0 = GR_Sig,0 -} -{ .mfi - mov GR_SignOfGamma = 1 - fma.s1 FR_B5 = FR_B5,FR_x,FR_B4 - // set p9 if signgum is 32-bit int - // set p10 if signgum is 64-bit int - cmp.eq p10,p9 = 8,r34 -};; -{ .mfi - nop.m 0 - fma.s1 FR_B3 = FR_B3,FR_x,FR_B2 -(p8) sub GR_SignOfGamma = r0,GR_SignOfGamma -} -{ .mfi - nop.m 0 -(p14) fms.s1 FR_w = f0,f0,f1 - nop.i 0 -};; -.pred.rel "mutex",p9,p10 -{ .mfi - // store sign of gamma(x) as 32-bit int -(p9) st4 [r33] = GR_SignOfGamma - fma.s1 FR_B1 = FR_B1,FR_x,FR_B0 - nop.i 0 -} -{ .mfi - // store sign of gamma(x) as 64-bit int -(p10) st8 [r33] = GR_SignOfGamma - fma.s1 FR_B17 = FR_B17,FR_x2,FR_B15 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_B13 = FR_B13,FR_x2,FR_B11 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_B9 = FR_B9,FR_x2,FR_B7 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_x4 = FR_x2,FR_x2,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p6) fma.s1 FR_NormX = FR_NormX,FR_Xp2,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_B5 = FR_B5,FR_x2,FR_B3 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_B17 = FR_B17,FR_x4,FR_B13 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_x8 = FR_x4,FR_x4,f0 - nop.i 0 -};; -.pred.rel "mutex",p14,p15 -{ .mfi - nop.m 0 -(p15) fms.s1 FR_w = FR_NormX,f1,f1 - nop.i 0 -} -{ .mfi - nop.m 0 -(p14) fnma.s1 FR_w = FR_NormX,f1,FR_w - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_B9 = FR_B9,FR_x4,FR_B5 - nop.i 0 -};; -{ .mfi - nop.m 0 - frcpa.s1 FR_C,p0 = f1,FR_NormX - nop.i 0 -};; -{ .mfi - getf.exp GR_Exp = FR_NormX - nop.f 0 - nop.i 0 -};; -{ .mfi - getf.d GR_ArgAsIs = FR_NormX - nop.f 0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_w2 = FR_w,FR_w,f0 - nop.i 0 -} -{ .mfi - and GR_Exp = GR_Exp,GR_ExpMask - fma.s1 FR_Q8 = FR_Q8,FR_w,FR_Q7 - nop.i 0 -};; -{ .mfi - sub GR_Exp = GR_Exp,GR_ExpBias - fma.s1 FR_B17 = FR_B17,FR_x8,FR_B9 - extr.u GR_Ind = GR_ArgAsIs,44,8 -} -{ .mfi - nop.m 0 - fma.s1 FR_Q6 = FR_Q6,FR_w,FR_Q5 - nop.i 0 -};; -{ .mfi - setf.sig FR_int_N = GR_Exp - fms.s1 FR_r = FR_C,FR_NormX,f1 - nop.i 0 -} -{ .mfi - shladd GR_ad_2 = GR_Ind,4,GR_ad_2 - nop.f 0 - nop.i 0 -};; -{ .mfi - getf.exp GR_SignExp_w = FR_w - fma.s1 FR_Q4 = FR_Q4,FR_w,FR_Q3 - nop.i 0 -} -{ .mfi - ldfe FR_T = [GR_ad_2] - nop.f 0 - nop.i 0 -};; -{ .mfi - and GR_Exp_w = GR_ExpMask, GR_SignExp_w - fnma.s1 FR_Q1 = FR_05,FR_w2,FR_w - mov GR_fff9 = 0xfff9 -} -{ .mfi - nop.m 0 - fma.s1 FR_w3 = FR_w2,FR_w,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_w4 = FR_w2,FR_w2,f0 -// p13 <== large w __libm_lgamma -// p14 <== small w __libm_lgamma - cmp.ge p13,p14 = GR_Exp_w,GR_fff9 -} -{ .mfi - nop.m 0 - fma.s1 FR_Qlo = FR_Q8,FR_w2,FR_Q6 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p13) fma.s1 FR_r2 = FR_r,FR_r,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_B17 = FR_B17,FR_x2,FR_B1 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p13) fma.s1 FR_P32 = FR_P3,FR_r,FR_P2 - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fma.s1 FR_P54 = FR_P5,FR_r,FR_P4 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p14) fma.s1 FR_Q2 = FR_Q2,FR_w3,FR_Q1 - nop.i 0 -} -{ .mfi - nop.m 0 -(p14) fma.s1 FR_w6 = FR_w3,FR_w3,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p13) fcvt.xf FR_N = FR_int_N - nop.i 0 -};; -{ .mfi - nop.m 0 -(p13) fma.s1 FR_r3 = FR_r2,FR_r,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fnma.s1 FR_P10 = FR_r2,FR_05,FR_r - nop.i 0 -};; -{ .mfi - nop.m 0 -(p13) fma.s1 FR_P54 = FR_P54,FR_r2,FR_P32 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p14) fma.s1 FR_Qhi = FR_Q4,FR_w4,FR_Q2 - nop.i 0 -} -{ .mfi - nop.m 0 -(p14) fnma.s1 FR_Qlo = FR_Qlo,FR_w6,FR_B17 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p13) fma.s1 FR_TpNxLn2 = FR_N,FR_Ln2,FR_T - nop.i 0 -};; -{ .mfi - nop.m 0 -(p13) fma.s1 FR_P54 = FR_P54,FR_r3,FR_P10 - nop.i 0 -};; -.pred.rel "mutex",p13,p14 -{ .mfi - nop.m 0 -(p14) fms.d.s0 f8 = FR_Qlo,f1,FR_Qhi - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fma.s1 FR_LnX = FR_TpNxLn2,f1,FR_P54 - nop.i 0 -};; -{ .mfb - nop.m 0 -(p13) fms.d.s0 f8 = FR_B17,f1,FR_LnX - br.ret.sptk b0 -};; -// branch for calculating of ln(GAMMA(x)) near negative roots -//--------------------------------------------------------------------- -.align 32 -lgamma_negroots: -{ .mfi - shladd GR_Offs = GR_RootInd,3,r0 //GR_RootInd*8 - fma.s1 FR_r2 = FR_r,FR_r,f0 - add GR_ad_Co = 0x15C0,GR_ad_1//0x1590,GR_ad_1 -} -{ .mfi - add GR_ad_Ce = 0x1610,GR_ad_1//0x15E0,GR_ad_1 - nop.f 0 - cmp.lt p6,p0 = GR_ArgXfrAsIs,GR_Arg05 -};; -{ .mfi - add GR_ad_Roots = 0x10A0,GR_ad_1 - nop.f 0 -(p6) add GR_ad_Co = 0x820,GR_ad_Co -} -{ .mfi -(p6) add GR_ad_Ce = 0x820,GR_ad_Ce - nop.f 0 - shladd GR_Offs = GR_RootInd,1,GR_Offs //GR_RootInd*10 -};; -{ .mmi - shladd GR_ad_Co = GR_Offs,4,GR_ad_Co - shladd GR_ad_Ce = GR_Offs,4,GR_ad_Ce - cmp.eq p8,p7 = r0,r0 -};; -{ .mmi - ldfpd FR_A15,FR_A14 = [GR_ad_Co],16 - ldfpd FR_A13,FR_A12 = [GR_ad_Ce],16 - mov GR_SignOfGamma = 1 -};; -{ .mmi - ldfpd FR_A11,FR_A10 = [GR_ad_Co],16 - ldfpd FR_A9,FR_A8 = [GR_ad_Ce],16 -(p6) cmp.eq p7,p8 = r0,GR_RootInd -};; -{ .mmi - ldfpd FR_A7,FR_A6 = [GR_ad_Co],16 - ldfpd FR_A5,FR_A4 = [GR_ad_Ce],16 - tbit.z p11,p0 = GR_Sig,0 -};; -{ .mmi - ldfe FR_A3 = [GR_ad_Co],16 - ldfe FR_A2 = [GR_ad_Ce],16 - // set p9 if signgum is 32-bit int - // set p10 if signgum is 64-bit int - cmp.eq p10,p9 = 8,r34 -};; -{ .mmi - ldfe FR_A1 = [GR_ad_Co],16 - ldfe FR_A0 = [GR_ad_Ce],16 -(p11) sub GR_SignOfGamma = r0,GR_SignOfGamma -};; -{ .mfi - ldfe FR_A00 = [GR_ad_Roots] - fma.s1 FR_r4 = FR_r2,FR_r2,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A15 = FR_A15,FR_r,FR_A14 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A13 = FR_A13,FR_r,FR_A12 - nop.i 0 -};; -.pred.rel "mutex",p9,p10 -{ .mfi - // store sign of gamma(x) as 32-bit int -(p9) st4 [r33] = GR_SignOfGamma - fma.s1 FR_A11 = FR_A11,FR_r,FR_A10 - nop.i 0 -} -{ .mfi - // store sign of gamma(x) as 64-bit int -(p10) st8 [r33] = GR_SignOfGamma - fma.s1 FR_A9 = FR_A9,FR_r,FR_A8 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A7 = FR_A7,FR_r,FR_A6 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A5 = FR_A5,FR_r,FR_A4 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A3 = FR_A3,FR_r,FR_A2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r8 = FR_r4,FR_r4,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A1 = FR_A1,FR_r,FR_A0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A15 = FR_A15,FR_r2,FR_A13 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A11 = FR_A11,FR_r2,FR_A9 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A7 = FR_A7,FR_r2,FR_A5 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A3 = FR_A3,FR_r2,FR_A1 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A15 = FR_A15,FR_r4,FR_A11 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A7 = FR_A7,FR_r4,FR_A3 - nop.i 0 -};; -.pred.rel "mutex",p7,p8 -{ .mfi - nop.m 0 -(p7) fma.s1 FR_A1 = FR_A15,FR_r8,FR_A7 - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fma.d.s0 f8 = FR_A15,FR_r8,FR_A7 - nop.i 0 -};; -{ .mfb - nop.m 0 -(p7) fma.d.s0 f8 = FR_A1,FR_r,FR_A00 - br.ret.sptk b0 -};; -// branch for handling pseudo root on (-2;-1) -//--------------------------------------------------------------------- -.align 32 -lgamma_pseudoroot: -{ .mmi - ldfe FR_PR21 = [GR_ad_Co],32 - ldfe FR_PR31 = [GR_ad_Ce],32 - // set p9 if signgum is 32-bit int - // set p10 if signgum is 64-bit int - cmp.eq p10,p9 = 8,r34 -};; -{ .mmi - ldfe FR_PR00 = [GR_ad_Co],32 - ldfe FR_PR10 = [GR_ad_Ce],0xF0 - mov GR_SignOfGamma = 1 -};; -{ .mmi - ldfe FR_PR20 = [GR_ad_Co],0xF0 - ldfe FR_PR30 = [GR_ad_Ce] - tbit.z p8,p0 = GR_Sig,0 -};; -{ .mfi - ldfe FR_PRN = [GR_ad_Co] - fma.s1 FR_PR01 = f8,f1,FR_PR01 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_PR11 = f8,f1,FR_PR11 -(p8) sub GR_SignOfGamma = r0,GR_SignOfGamma -};; -.pred.rel "mutex",p9,p10 -{ .mfi - // store sign of gamma(x) as 32-bit int -(p9) st4 [r33] = GR_SignOfGamma - fma.s1 FR_PR21 = f8,f1,FR_PR21 - nop.i 0 -} -{ .mfi - // store sign of gamma(x) as 64-bit int -(p10) st8 [r33] = GR_SignOfGamma - fma.s1 FR_PR31 = f8,f1,FR_PR31 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_PR01 = f8,FR_PR01,FR_PR00 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_PR11 = f8,FR_PR11,FR_PR10 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_PR21 = f8,FR_PR21,FR_PR20 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_PR31 = f8,FR_PR31,FR_PR30 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_PR01 = FR_PR11,FR_PR01,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_PR21 = FR_PR31,FR_PR21,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_PR01 = FR_PR21,FR_PR01,f0 - nop.i 0 -};; -{ .mfb - nop.m 0 - fma.d.s0 f8 = FR_PR01,FR_PRN,f0 - br.ret.sptk b0 -};; -// branch for handling +/-0, NaT, QNaN, +/-INF and denormalised numbers -//--------------------------------------------------------------------- -.align 32 -lgamma_spec: -{ .mfi - getf.exp GR_SignExp = FR_NormX - fclass.m p6,p0 = f8,0x21 // is arg +INF? - mov GR_SignOfGamma = 1 -};; -{ .mfi - getf.sig GR_ArgAsIs = FR_NormX - fclass.m p7,p0 = f8,0xB // is x deno? - // set p11 if signgum is 32-bit int - // set p12 if signgum is 64-bit int - cmp.eq p12,p11 = 8,r34 -};; -.pred.rel "mutex",p11,p12 -{ .mfi - // store sign of gamma(x) as 32-bit int -(p11) st4 [r33] = GR_SignOfGamma - fclass.m p8,p0 = f8,0x1C0 // is arg NaT or NaN? - dep.z GR_Ind = GR_SignExp,8,4 -} -{ .mib - // store sign of gamma(x) as 64-bit int -(p12) st8 [r33] = GR_SignOfGamma - cmp.lt p10,p0 = GR_SignExp,GR_ExpBias -(p6) br.ret.spnt b0 // exit for +INF -};; -{ .mfi - and GR_Exp = GR_SignExp,GR_ExpMask - fclass.m p9,p0 = f8,0x22 // is arg -INF? - nop.i 0 -};; -{ .mfi - add GR_ad_Co = GR_Ind,GR_ad_Data -(p7) fma.s0 FR_tmp = f8,f8,f8 - extr.u GR_ArgAsIs = GR_ArgAsIs,11,52 -} -{ .mfb - nop.m 0 -(p8) fms.d.s0 f8 = f8,f1,f8 -(p8) br.ret.spnt b0 // exit for NaT and NaN -};; -{ .mib - nop.m 0 - shr.u GR_Arg = GR_ArgAsIs,48 -(p7) br.cond.sptk lgamma_common -};; -{ .mfb - nop.m 0 -(p9) fmerge.s f8 = f1,f8 -(p9) br.ret.spnt b0 // exit -INF -};; -// branch for handling negative integers and +/-0 -//--------------------------------------------------------------------- -.align 32 -lgamma_singularity: -{ .mfi - mov GR_ad_SignGam = r33 - fclass.m p6,p0 = f8, 0x6 // is x -0? - mov GR_SignOfGamma = 1 -} -{ .mfi - // set p9 if signgum is 32-bit int - // set p10 if signgum is 64-bit int - cmp.eq p10,p9 = 8,r34 - fma.s1 FR_X = f0,f0,f8 - nop.i 0 -};; -{ .mfi - nop.m 0 - frcpa.s0 f8,p0 = f1,f0 - mov GR_TAG = 106 // negative -} -{ .mib - nop.m 0 -(p6) sub GR_SignOfGamma = r0,GR_SignOfGamma - br.cond.sptk lgamma_libm_err -};; -// overflow (x > OVERFLOV_BOUNDARY) -//--------------------------------------------------------------------- -.align 32 -lgamma_overflow: -{ .mfi - mov GR_SignOfGamma = 1 - nop.f 0 - mov r8 = 0x1FFFE -};; -{ .mfi - setf.exp f9 = r8 - fmerge.s FR_X = f8,f8 - mov GR_TAG = 105 // overflow -};; -{ .mfi - mov GR_ad_SignGam = r33 - nop.f 0 - // set p9 if signgum is 32-bit int - // set p10 if signgum is 64-bit int - cmp.eq p10,p9 = 8,r34 -} -{ .mfi - nop.m 0 - fma.d.s0 f8 = f9,f9,f0 // Set I,O and +INF result - nop.i 0 -};; -// -//--------------------------------------------------------------------- -.align 32 -lgamma_libm_err: -{ .mmi - alloc r32 = ar.pfs,1,4,4,0 - mov GR_Parameter_TAG = GR_TAG - nop.i 0 -};; -.pred.rel "mutex",p9,p10 -{ .mmi - // store sign of gamma(x) as 32-bit int -(p9) st4 [GR_ad_SignGam] = GR_SignOfGamma - // store sign of gamma(x) as 64-bit int -(p10) st8 [GR_ad_SignGam] = GR_SignOfGamma - nop.i 0 -};; -GLOBAL_LIBM_END(__libm_lgamma) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // STORE Parameter 1 - // on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 - // on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling - // function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/libm_lgammaf.S b/sysdeps/ia64/fpu/libm_lgammaf.S deleted file mode 100644 index 7218911f5d..0000000000 --- a/sysdeps/ia64/fpu/libm_lgammaf.S +++ /dev/null @@ -1,2199 +0,0 @@ -.file "libm_lgammaf.s" - - -// Copyright (c) 2002 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2002 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,INCLUDING,BUT NOT -// LIMITED TO,THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT,INDIRECT,INCIDENTAL,SPECIAL, -// EXEMPLARY,OR CONSEQUENTIAL DAMAGES (INCLUDING,BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,DATA,OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY,WHETHER IN CONTRACT,STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE,EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code,and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 01/10/02 Initial version -// 01/25/02 Corrected parameter store, load, and tag for __libm_error_support -// 02/01/02 Added support of SIGN(GAMMA(x)) calculation -// 05/20/02 Cleaned up namespace and sf0 syntax -// 09/16/02 Improved accuracy on intervals reduced to [1;1.25] -// 10/21/02 Now it returns SIGN(GAMMA(x))=-1 for negative zero -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 07/22/03 Reformatted some data tables -// 03/31/05 Reformatted delimiters between data tables -// -//********************************************************************* -// -//********************************************************************* -// -// Function: __libm_lgammaf(float x, int* signgam, int szsigngam) -// computes the principle value of the logarithm of the GAMMA function -// of x. Signum of GAMMA(x) is stored to memory starting at the address -// specified by the signgam. -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f6-f15 -// f32-f97 -// -// General Purpose Registers: -// r8-r11 -// r14-r30 -// r32-r36 -// r37-r40 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6-p15 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// lgamma(+inf) = +inf -// lgamma(-inf) = +inf -// lgamma(+/-0) = +inf -// lgamma(x<0, x - integer) = +inf -// lgamma(SNaN) = QNaN -// lgamma(QNaN) = QNaN -// -//********************************************************************* -// -// Overview -// -// The method consists of three cases. -// -// If 2^13 <= x < OVERFLOW_BOUNDARY use case lgammaf_pstirling; -// else if 1 < x < 2^13 use case lgammaf_regular; -// else if -9 < x < 1 use case lgammaf_negrecursion; -// else if -2^13 < x < -9 use case lgammaf_negpoly; -// else if x < -2^13 use case lgammaf_negstirling; -// else if x is close to negative -// roots of ln(GAMMA(x)) use case lgammaf_negroots; -// -// -// Case 2^13 <= x < OVERFLOW_BOUNDARY -// ---------------------------------- -// Here we use algorithm based on the Stirling formula: -// ln(GAMMA(x)) = ln(sqrt(2*Pi)) + (x-0.5)*ln(x) - x -// -// Case 1 < x < 2^13 -// ----------------- -// To calculate ln(GAMMA(x)) for such arguments we use polynomial -// approximation on following intervals: [1.0; 1.25), [1.25; 1.5), -// [1.5, 1.75), [1.75; 2), [2; 4), [2^i; 2^(i+1)), i=1..8 -// -// Following variants of approximation and argument reduction are used: -// 1. [1.0; 1.25) -// ln(GAMMA(x)) ~ (x-1.0)*P7(x) -// -// 2. [1.25; 1.5) -// ln(GAMMA(x)) ~ ln(GAMMA(x0))+(x-x0)*P8(x-x0), -// where x0 - point of local minimum on [1;2] rounded to nearest double -// precision number. -// -// 3. [1.5; 1.75) -// ln(GAMMA(x)) ~ P8(x) -// -// 4. [1.75; 2.0) -// ln(GAMMA(x)) ~ (x-2)*P7(x) -// -// 5. [2; 4) -// ln(GAMMA(x)) ~ (x-2)*P10(x) -// -// 6. [2^i; 2^(i+1)), i=2..8 -// ln(GAMMA(x)) ~ P10((x-2^i)/2^i) -// -// Case -9 < x < 1 -// --------------- -// Here we use the recursive formula: -// ln(GAMMA(x)) = ln(GAMMA(x+1)) - ln(x) -// -// Using this formula we reduce argument to base interval [1.0; 2.0] -// -// Case -2^13 < x < -9 -// -------------------- -// Here we use the formula: -// ln(GAMMA(x)) = ln(Pi/(|x|*GAMMA(|x|)*sin(Pi*|x|))) = -// = -ln(|x|) - ln((GAMMA(|x|)) - ln(sin(Pi*r)/(Pi*r)) - ln(|r|) -// where r = x - rounded_to_nearest(x), i.e |r| <= 0.5 and -// ln(sin(Pi*r)/(Pi*r)) is approximated by 8-degree polynomial of r^2 -// -// Case x < -2^13 -// -------------- -// Here we use algorithm based on the Stirling formula: -// ln(GAMMA(x)) = -ln(sqrt(2*Pi)) + (|x|-0.5)ln(x) - |x| - -// - ln(sin(Pi*r)/(Pi*r)) - ln(|r|) -// where r = x - rounded_to_nearest(x). -// -// Neighbourhoods of negative roots -// -------------------------------- -// Here we use polynomial approximation -// ln(GAMMA(x-x0)) = ln(GAMMA(x0)) + (x-x0)*P14(x-x0), -// where x0 is a root of ln(GAMMA(x)) rounded to nearest double -// precision number. -// -// -// Claculation of logarithm -// ------------------------ -// Consider x = 2^N * xf so -// ln(x) = ln(frcpa(x)*x/frcpa(x)) -// = ln(1/frcpa(x)) + ln(frcpa(x)*x) -// -// frcpa(x) = 2^(-N) * frcpa(xf) -// -// ln(1/frcpa(x)) = -ln(2^(-N)) - ln(frcpa(xf)) -// = N*ln(2) - ln(frcpa(xf)) -// = N*ln(2) + ln(1/frcpa(xf)) -// -// ln(x) = ln(1/frcpa(x)) + ln(frcpa(x)*x) = -// = N*ln(2) + ln(1/frcpa(xf)) + ln(frcpa(x)*x) -// = N*ln(2) + T + ln(frcpa(x)*x) -// -// Let r = 1 - frcpa(x)*x, note that r is quite small by -// absolute value so -// -// ln(x) = N*ln(2) + T + ln(1+r) ~ N*ln(2) + T + Series(r), -// where T - is precomputed tabular value, -// Series(r) = (P3*r + P2)*r^2 + (P1*r + 1) -// -//********************************************************************* - -GR_TAG = r8 -GR_ad_Data = r8 -GR_ad_Co = r9 -GR_ad_SignGam = r10 -GR_ad_Ce = r10 -GR_SignExp = r11 - -GR_ad_C650 = r14 -GR_ad_RootCo = r14 -GR_ad_C0 = r15 -GR_Dx = r15 -GR_Ind = r16 -GR_Offs = r17 -GR_IntNum = r17 -GR_ExpBias = r18 -GR_ExpMask = r19 -GR_Ind4T = r20 -GR_RootInd = r20 -GR_Sig = r21 -GR_Exp = r22 -GR_PureExp = r23 -GR_ad_C43 = r24 -GR_StirlBound = r25 -GR_ad_T = r25 -GR_IndX8 = r25 -GR_Neg2 = r25 -GR_2xDx = r25 -GR_SingBound = r26 -GR_IndX2 = r26 -GR_Neg4 = r26 -GR_ad_RootCe = r26 -GR_Arg = r27 -GR_ExpOf2 = r28 -GR_fff7 = r28 -GR_Root = r28 -GR_ReqBound = r28 -GR_N = r29 -GR_ad_Root = r30 -GR_ad_OvfBound = r30 -GR_SignOfGamma = r31 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - -//********************************************************************* - -FR_X = f10 -FR_Y = f1 // lgammaf is single argument function -FR_RESULT = f8 - -FR_x = f6 -FR_x2 = f7 - -FR_x3 = f9 -FR_x4 = f10 -FR_xm2 = f11 -FR_w = f11 -FR_w2 = f12 -FR_Q32 = f13 -FR_Q10 = f14 -FR_InvX = f15 - -FR_NormX = f32 - -FR_A0 = f33 -FR_A1 = f34 -FR_A2 = f35 -FR_A3 = f36 -FR_A4 = f37 -FR_A5 = f38 -FR_A6 = f39 -FR_A7 = f40 -FR_A8 = f41 -FR_A9 = f42 -FR_A10 = f43 - -FR_int_N = f44 -FR_P3 = f45 -FR_P2 = f46 -FR_P1 = f47 -FR_LocalMin = f48 -FR_Ln2 = f49 -FR_05 = f50 -FR_LnSqrt2Pi = f51 -FR_3 = f52 -FR_r = f53 -FR_r2 = f54 -FR_T = f55 -FR_N = f56 -FR_xm05 = f57 -FR_int_Ln = f58 -FR_P32 = f59 -FR_P10 = f60 - -FR_Xf = f61 -FR_InvXf = f62 -FR_rf = f63 -FR_rf2 = f64 -FR_Tf = f65 -FR_Nf = f66 -FR_xm05f = f67 -FR_P32f = f68 -FR_P10f = f69 -FR_Lnf = f70 -FR_Xf2 = f71 -FR_Xf4 = f72 -FR_Xf8 = f73 -FR_Ln = f74 -FR_xx = f75 -FR_Root = f75 -FR_Req = f76 -FR_1pXf = f77 - -FR_S16 = f78 -FR_R3 = f78 -FR_S14 = f79 -FR_R2 = f79 -FR_S12 = f80 -FR_R1 = f80 -FR_S10 = f81 -FR_R0 = f81 -FR_S8 = f82 -FR_rx = f82 -FR_S6 = f83 -FR_rx2 = f84 -FR_S4 = f84 -FR_S2 = f85 - -FR_Xp1 = f86 -FR_Xp2 = f87 -FR_Xp3 = f88 -FR_Xp4 = f89 -FR_Xp5 = f90 -FR_Xp6 = f91 -FR_Xp7 = f92 -FR_Xp8 = f93 -FR_OverflowBound = f93 - -FR_2 = f94 -FR_tmp = f95 -FR_int_Ntrunc = f96 -FR_Ntrunc = f97 - -//********************************************************************* - -RODATA -.align 32 -LOCAL_OBJECT_START(lgammaf_data) -log_table_1: -data8 0xbfd0001008f39d59 // P3 -data8 0x3fd5556073e0c45a // P2 -data8 0x3fe62e42fefa39ef // ln(2) -data8 0x3fe0000000000000 // 0.5 -// -data8 0x3F60040155D5889E //ln(1/frcpa(1+ 0/256) -data8 0x3F78121214586B54 //ln(1/frcpa(1+ 1/256) -data8 0x3F841929F96832F0 //ln(1/frcpa(1+ 2/256) -data8 0x3F8C317384C75F06 //ln(1/frcpa(1+ 3/256) -data8 0x3F91A6B91AC73386 //ln(1/frcpa(1+ 4/256) -data8 0x3F95BA9A5D9AC039 //ln(1/frcpa(1+ 5/256) -data8 0x3F99D2A8074325F4 //ln(1/frcpa(1+ 6/256) -data8 0x3F9D6B2725979802 //ln(1/frcpa(1+ 7/256) -data8 0x3FA0C58FA19DFAAA //ln(1/frcpa(1+ 8/256) -data8 0x3FA2954C78CBCE1B //ln(1/frcpa(1+ 9/256) -data8 0x3FA4A94D2DA96C56 //ln(1/frcpa(1+ 10/256) -data8 0x3FA67C94F2D4BB58 //ln(1/frcpa(1+ 11/256) -data8 0x3FA85188B630F068 //ln(1/frcpa(1+ 12/256) -data8 0x3FAA6B8ABE73AF4C //ln(1/frcpa(1+ 13/256) -data8 0x3FAC441E06F72A9E //ln(1/frcpa(1+ 14/256) -data8 0x3FAE1E6713606D07 //ln(1/frcpa(1+ 15/256) -data8 0x3FAFFA6911AB9301 //ln(1/frcpa(1+ 16/256) -data8 0x3FB0EC139C5DA601 //ln(1/frcpa(1+ 17/256) -data8 0x3FB1DBD2643D190B //ln(1/frcpa(1+ 18/256) -data8 0x3FB2CC7284FE5F1C //ln(1/frcpa(1+ 19/256) -data8 0x3FB3BDF5A7D1EE64 //ln(1/frcpa(1+ 20/256) -data8 0x3FB4B05D7AA012E0 //ln(1/frcpa(1+ 21/256) -data8 0x3FB580DB7CEB5702 //ln(1/frcpa(1+ 22/256) -data8 0x3FB674F089365A7A //ln(1/frcpa(1+ 23/256) -data8 0x3FB769EF2C6B568D //ln(1/frcpa(1+ 24/256) -data8 0x3FB85FD927506A48 //ln(1/frcpa(1+ 25/256) -data8 0x3FB9335E5D594989 //ln(1/frcpa(1+ 26/256) -data8 0x3FBA2B0220C8E5F5 //ln(1/frcpa(1+ 27/256) -data8 0x3FBB0004AC1A86AC //ln(1/frcpa(1+ 28/256) -data8 0x3FBBF968769FCA11 //ln(1/frcpa(1+ 29/256) -data8 0x3FBCCFEDBFEE13A8 //ln(1/frcpa(1+ 30/256) -data8 0x3FBDA727638446A2 //ln(1/frcpa(1+ 31/256) -data8 0x3FBEA3257FE10F7A //ln(1/frcpa(1+ 32/256) -data8 0x3FBF7BE9FEDBFDE6 //ln(1/frcpa(1+ 33/256) -data8 0x3FC02AB352FF25F4 //ln(1/frcpa(1+ 34/256) -data8 0x3FC097CE579D204D //ln(1/frcpa(1+ 35/256) -data8 0x3FC1178E8227E47C //ln(1/frcpa(1+ 36/256) -data8 0x3FC185747DBECF34 //ln(1/frcpa(1+ 37/256) -data8 0x3FC1F3B925F25D41 //ln(1/frcpa(1+ 38/256) -data8 0x3FC2625D1E6DDF57 //ln(1/frcpa(1+ 39/256) -data8 0x3FC2D1610C86813A //ln(1/frcpa(1+ 40/256) -data8 0x3FC340C59741142E //ln(1/frcpa(1+ 41/256) -data8 0x3FC3B08B6757F2A9 //ln(1/frcpa(1+ 42/256) -data8 0x3FC40DFB08378003 //ln(1/frcpa(1+ 43/256) -data8 0x3FC47E74E8CA5F7C //ln(1/frcpa(1+ 44/256) -data8 0x3FC4EF51F6466DE4 //ln(1/frcpa(1+ 45/256) -data8 0x3FC56092E02BA516 //ln(1/frcpa(1+ 46/256) -data8 0x3FC5D23857CD74D5 //ln(1/frcpa(1+ 47/256) -data8 0x3FC6313A37335D76 //ln(1/frcpa(1+ 48/256) -data8 0x3FC6A399DABBD383 //ln(1/frcpa(1+ 49/256) -data8 0x3FC70337DD3CE41B //ln(1/frcpa(1+ 50/256) -data8 0x3FC77654128F6127 //ln(1/frcpa(1+ 51/256) -data8 0x3FC7E9D82A0B022D //ln(1/frcpa(1+ 52/256) -data8 0x3FC84A6B759F512F //ln(1/frcpa(1+ 53/256) -data8 0x3FC8AB47D5F5A310 //ln(1/frcpa(1+ 54/256) -data8 0x3FC91FE49096581B //ln(1/frcpa(1+ 55/256) -data8 0x3FC981634011AA75 //ln(1/frcpa(1+ 56/256) -data8 0x3FC9F6C407089664 //ln(1/frcpa(1+ 57/256) -data8 0x3FCA58E729348F43 //ln(1/frcpa(1+ 58/256) -data8 0x3FCABB55C31693AD //ln(1/frcpa(1+ 59/256) -data8 0x3FCB1E104919EFD0 //ln(1/frcpa(1+ 60/256) -data8 0x3FCB94EE93E367CB //ln(1/frcpa(1+ 61/256) -data8 0x3FCBF851C067555F //ln(1/frcpa(1+ 62/256) -data8 0x3FCC5C0254BF23A6 //ln(1/frcpa(1+ 63/256) -data8 0x3FCCC000C9DB3C52 //ln(1/frcpa(1+ 64/256) -data8 0x3FCD244D99C85674 //ln(1/frcpa(1+ 65/256) -data8 0x3FCD88E93FB2F450 //ln(1/frcpa(1+ 66/256) -data8 0x3FCDEDD437EAEF01 //ln(1/frcpa(1+ 67/256) -data8 0x3FCE530EFFE71012 //ln(1/frcpa(1+ 68/256) -data8 0x3FCEB89A1648B971 //ln(1/frcpa(1+ 69/256) -data8 0x3FCF1E75FADF9BDE //ln(1/frcpa(1+ 70/256) -data8 0x3FCF84A32EAD7C35 //ln(1/frcpa(1+ 71/256) -data8 0x3FCFEB2233EA07CD //ln(1/frcpa(1+ 72/256) -data8 0x3FD028F9C7035C1C //ln(1/frcpa(1+ 73/256) -data8 0x3FD05C8BE0D9635A //ln(1/frcpa(1+ 74/256) -data8 0x3FD085EB8F8AE797 //ln(1/frcpa(1+ 75/256) -data8 0x3FD0B9C8E32D1911 //ln(1/frcpa(1+ 76/256) -data8 0x3FD0EDD060B78081 //ln(1/frcpa(1+ 77/256) -data8 0x3FD122024CF0063F //ln(1/frcpa(1+ 78/256) -data8 0x3FD14BE2927AECD4 //ln(1/frcpa(1+ 79/256) -data8 0x3FD180618EF18ADF //ln(1/frcpa(1+ 80/256) -data8 0x3FD1B50BBE2FC63B //ln(1/frcpa(1+ 81/256) -data8 0x3FD1DF4CC7CF242D //ln(1/frcpa(1+ 82/256) -data8 0x3FD214456D0EB8D4 //ln(1/frcpa(1+ 83/256) -data8 0x3FD23EC5991EBA49 //ln(1/frcpa(1+ 84/256) -data8 0x3FD2740D9F870AFB //ln(1/frcpa(1+ 85/256) -data8 0x3FD29ECDABCDFA04 //ln(1/frcpa(1+ 86/256) -data8 0x3FD2D46602ADCCEE //ln(1/frcpa(1+ 87/256) -data8 0x3FD2FF66B04EA9D4 //ln(1/frcpa(1+ 88/256) -data8 0x3FD335504B355A37 //ln(1/frcpa(1+ 89/256) -data8 0x3FD360925EC44F5D //ln(1/frcpa(1+ 90/256) -data8 0x3FD38BF1C3337E75 //ln(1/frcpa(1+ 91/256) -data8 0x3FD3C25277333184 //ln(1/frcpa(1+ 92/256) -data8 0x3FD3EDF463C1683E //ln(1/frcpa(1+ 93/256) -data8 0x3FD419B423D5E8C7 //ln(1/frcpa(1+ 94/256) -data8 0x3FD44591E0539F49 //ln(1/frcpa(1+ 95/256) -data8 0x3FD47C9175B6F0AD //ln(1/frcpa(1+ 96/256) -data8 0x3FD4A8B341552B09 //ln(1/frcpa(1+ 97/256) -data8 0x3FD4D4F3908901A0 //ln(1/frcpa(1+ 98/256) -data8 0x3FD501528DA1F968 //ln(1/frcpa(1+ 99/256) -data8 0x3FD52DD06347D4F6 //ln(1/frcpa(1+ 100/256) -data8 0x3FD55A6D3C7B8A8A //ln(1/frcpa(1+ 101/256) -data8 0x3FD5925D2B112A59 //ln(1/frcpa(1+ 102/256) -data8 0x3FD5BF406B543DB2 //ln(1/frcpa(1+ 103/256) -data8 0x3FD5EC433D5C35AE //ln(1/frcpa(1+ 104/256) -data8 0x3FD61965CDB02C1F //ln(1/frcpa(1+ 105/256) -data8 0x3FD646A84935B2A2 //ln(1/frcpa(1+ 106/256) -data8 0x3FD6740ADD31DE94 //ln(1/frcpa(1+ 107/256) -data8 0x3FD6A18DB74A58C5 //ln(1/frcpa(1+ 108/256) -data8 0x3FD6CF31058670EC //ln(1/frcpa(1+ 109/256) -data8 0x3FD6F180E852F0BA //ln(1/frcpa(1+ 110/256) -data8 0x3FD71F5D71B894F0 //ln(1/frcpa(1+ 111/256) -data8 0x3FD74D5AEFD66D5C //ln(1/frcpa(1+ 112/256) -data8 0x3FD77B79922BD37E //ln(1/frcpa(1+ 113/256) -data8 0x3FD7A9B9889F19E2 //ln(1/frcpa(1+ 114/256) -data8 0x3FD7D81B037EB6A6 //ln(1/frcpa(1+ 115/256) -data8 0x3FD8069E33827231 //ln(1/frcpa(1+ 116/256) -data8 0x3FD82996D3EF8BCB //ln(1/frcpa(1+ 117/256) -data8 0x3FD85855776DCBFB //ln(1/frcpa(1+ 118/256) -data8 0x3FD8873658327CCF //ln(1/frcpa(1+ 119/256) -data8 0x3FD8AA75973AB8CF //ln(1/frcpa(1+ 120/256) -data8 0x3FD8D992DC8824E5 //ln(1/frcpa(1+ 121/256) -data8 0x3FD908D2EA7D9512 //ln(1/frcpa(1+ 122/256) -data8 0x3FD92C59E79C0E56 //ln(1/frcpa(1+ 123/256) -data8 0x3FD95BD750EE3ED3 //ln(1/frcpa(1+ 124/256) -data8 0x3FD98B7811A3EE5B //ln(1/frcpa(1+ 125/256) -data8 0x3FD9AF47F33D406C //ln(1/frcpa(1+ 126/256) -data8 0x3FD9DF270C1914A8 //ln(1/frcpa(1+ 127/256) -data8 0x3FDA0325ED14FDA4 //ln(1/frcpa(1+ 128/256) -data8 0x3FDA33440224FA79 //ln(1/frcpa(1+ 129/256) -data8 0x3FDA57725E80C383 //ln(1/frcpa(1+ 130/256) -data8 0x3FDA87D0165DD199 //ln(1/frcpa(1+ 131/256) -data8 0x3FDAAC2E6C03F896 //ln(1/frcpa(1+ 132/256) -data8 0x3FDADCCC6FDF6A81 //ln(1/frcpa(1+ 133/256) -data8 0x3FDB015B3EB1E790 //ln(1/frcpa(1+ 134/256) -data8 0x3FDB323A3A635948 //ln(1/frcpa(1+ 135/256) -data8 0x3FDB56FA04462909 //ln(1/frcpa(1+ 136/256) -data8 0x3FDB881AA659BC93 //ln(1/frcpa(1+ 137/256) -data8 0x3FDBAD0BEF3DB165 //ln(1/frcpa(1+ 138/256) -data8 0x3FDBD21297781C2F //ln(1/frcpa(1+ 139/256) -data8 0x3FDC039236F08819 //ln(1/frcpa(1+ 140/256) -data8 0x3FDC28CB1E4D32FD //ln(1/frcpa(1+ 141/256) -data8 0x3FDC4E19B84723C2 //ln(1/frcpa(1+ 142/256) -data8 0x3FDC7FF9C74554C9 //ln(1/frcpa(1+ 143/256) -data8 0x3FDCA57B64E9DB05 //ln(1/frcpa(1+ 144/256) -data8 0x3FDCCB130A5CEBB0 //ln(1/frcpa(1+ 145/256) -data8 0x3FDCF0C0D18F326F //ln(1/frcpa(1+ 146/256) -data8 0x3FDD232075B5A201 //ln(1/frcpa(1+ 147/256) -data8 0x3FDD490246DEFA6B //ln(1/frcpa(1+ 148/256) -data8 0x3FDD6EFA918D25CD //ln(1/frcpa(1+ 149/256) -data8 0x3FDD9509707AE52F //ln(1/frcpa(1+ 150/256) -data8 0x3FDDBB2EFE92C554 //ln(1/frcpa(1+ 151/256) -data8 0x3FDDEE2F3445E4AF //ln(1/frcpa(1+ 152/256) -data8 0x3FDE148A1A2726CE //ln(1/frcpa(1+ 153/256) -data8 0x3FDE3AFC0A49FF40 //ln(1/frcpa(1+ 154/256) -data8 0x3FDE6185206D516E //ln(1/frcpa(1+ 155/256) -data8 0x3FDE882578823D52 //ln(1/frcpa(1+ 156/256) -data8 0x3FDEAEDD2EAC990C //ln(1/frcpa(1+ 157/256) -data8 0x3FDED5AC5F436BE3 //ln(1/frcpa(1+ 158/256) -data8 0x3FDEFC9326D16AB9 //ln(1/frcpa(1+ 159/256) -data8 0x3FDF2391A2157600 //ln(1/frcpa(1+ 160/256) -data8 0x3FDF4AA7EE03192D //ln(1/frcpa(1+ 161/256) -data8 0x3FDF71D627C30BB0 //ln(1/frcpa(1+ 162/256) -data8 0x3FDF991C6CB3B379 //ln(1/frcpa(1+ 163/256) -data8 0x3FDFC07ADA69A910 //ln(1/frcpa(1+ 164/256) -data8 0x3FDFE7F18EB03D3E //ln(1/frcpa(1+ 165/256) -data8 0x3FE007C053C5002E //ln(1/frcpa(1+ 166/256) -data8 0x3FE01B942198A5A1 //ln(1/frcpa(1+ 167/256) -data8 0x3FE02F74400C64EB //ln(1/frcpa(1+ 168/256) -data8 0x3FE04360BE7603AD //ln(1/frcpa(1+ 169/256) -data8 0x3FE05759AC47FE34 //ln(1/frcpa(1+ 170/256) -data8 0x3FE06B5F1911CF52 //ln(1/frcpa(1+ 171/256) -data8 0x3FE078BF0533C568 //ln(1/frcpa(1+ 172/256) -data8 0x3FE08CD9687E7B0E //ln(1/frcpa(1+ 173/256) -data8 0x3FE0A10074CF9019 //ln(1/frcpa(1+ 174/256) -data8 0x3FE0B5343A234477 //ln(1/frcpa(1+ 175/256) -data8 0x3FE0C974C89431CE //ln(1/frcpa(1+ 176/256) -data8 0x3FE0DDC2305B9886 //ln(1/frcpa(1+ 177/256) -data8 0x3FE0EB524BAFC918 //ln(1/frcpa(1+ 178/256) -data8 0x3FE0FFB54213A476 //ln(1/frcpa(1+ 179/256) -data8 0x3FE114253DA97D9F //ln(1/frcpa(1+ 180/256) -data8 0x3FE128A24F1D9AFF //ln(1/frcpa(1+ 181/256) -data8 0x3FE1365252BF0865 //ln(1/frcpa(1+ 182/256) -data8 0x3FE14AE558B4A92D //ln(1/frcpa(1+ 183/256) -data8 0x3FE15F85A19C765B //ln(1/frcpa(1+ 184/256) -data8 0x3FE16D4D38C119FA //ln(1/frcpa(1+ 185/256) -data8 0x3FE18203C20DD133 //ln(1/frcpa(1+ 186/256) -data8 0x3FE196C7BC4B1F3B //ln(1/frcpa(1+ 187/256) -data8 0x3FE1A4A738B7A33C //ln(1/frcpa(1+ 188/256) -data8 0x3FE1B981C0C9653D //ln(1/frcpa(1+ 189/256) -data8 0x3FE1CE69E8BB106B //ln(1/frcpa(1+ 190/256) -data8 0x3FE1DC619DE06944 //ln(1/frcpa(1+ 191/256) -data8 0x3FE1F160A2AD0DA4 //ln(1/frcpa(1+ 192/256) -data8 0x3FE2066D7740737E //ln(1/frcpa(1+ 193/256) -data8 0x3FE2147DBA47A394 //ln(1/frcpa(1+ 194/256) -data8 0x3FE229A1BC5EBAC3 //ln(1/frcpa(1+ 195/256) -data8 0x3FE237C1841A502E //ln(1/frcpa(1+ 196/256) -data8 0x3FE24CFCE6F80D9A //ln(1/frcpa(1+ 197/256) -data8 0x3FE25B2C55CD5762 //ln(1/frcpa(1+ 198/256) -data8 0x3FE2707F4D5F7C41 //ln(1/frcpa(1+ 199/256) -data8 0x3FE285E0842CA384 //ln(1/frcpa(1+ 200/256) -data8 0x3FE294294708B773 //ln(1/frcpa(1+ 201/256) -data8 0x3FE2A9A2670AFF0C //ln(1/frcpa(1+ 202/256) -data8 0x3FE2B7FB2C8D1CC1 //ln(1/frcpa(1+ 203/256) -data8 0x3FE2C65A6395F5F5 //ln(1/frcpa(1+ 204/256) -data8 0x3FE2DBF557B0DF43 //ln(1/frcpa(1+ 205/256) -data8 0x3FE2EA64C3F97655 //ln(1/frcpa(1+ 206/256) -data8 0x3FE3001823684D73 //ln(1/frcpa(1+ 207/256) -data8 0x3FE30E97E9A8B5CD //ln(1/frcpa(1+ 208/256) -data8 0x3FE32463EBDD34EA //ln(1/frcpa(1+ 209/256) -data8 0x3FE332F4314AD796 //ln(1/frcpa(1+ 210/256) -data8 0x3FE348D90E7464D0 //ln(1/frcpa(1+ 211/256) -data8 0x3FE35779F8C43D6E //ln(1/frcpa(1+ 212/256) -data8 0x3FE36621961A6A99 //ln(1/frcpa(1+ 213/256) -data8 0x3FE37C299F3C366A //ln(1/frcpa(1+ 214/256) -data8 0x3FE38AE2171976E7 //ln(1/frcpa(1+ 215/256) -data8 0x3FE399A157A603E7 //ln(1/frcpa(1+ 216/256) -data8 0x3FE3AFCCFE77B9D1 //ln(1/frcpa(1+ 217/256) -data8 0x3FE3BE9D503533B5 //ln(1/frcpa(1+ 218/256) -data8 0x3FE3CD7480B4A8A3 //ln(1/frcpa(1+ 219/256) -data8 0x3FE3E3C43918F76C //ln(1/frcpa(1+ 220/256) -data8 0x3FE3F2ACB27ED6C7 //ln(1/frcpa(1+ 221/256) -data8 0x3FE4019C2125CA93 //ln(1/frcpa(1+ 222/256) -data8 0x3FE4181061389722 //ln(1/frcpa(1+ 223/256) -data8 0x3FE42711518DF545 //ln(1/frcpa(1+ 224/256) -data8 0x3FE436194E12B6BF //ln(1/frcpa(1+ 225/256) -data8 0x3FE445285D68EA69 //ln(1/frcpa(1+ 226/256) -data8 0x3FE45BCC464C893A //ln(1/frcpa(1+ 227/256) -data8 0x3FE46AED21F117FC //ln(1/frcpa(1+ 228/256) -data8 0x3FE47A1527E8A2D3 //ln(1/frcpa(1+ 229/256) -data8 0x3FE489445EFFFCCC //ln(1/frcpa(1+ 230/256) -data8 0x3FE4A018BCB69835 //ln(1/frcpa(1+ 231/256) -data8 0x3FE4AF5A0C9D65D7 //ln(1/frcpa(1+ 232/256) -data8 0x3FE4BEA2A5BDBE87 //ln(1/frcpa(1+ 233/256) -data8 0x3FE4CDF28F10AC46 //ln(1/frcpa(1+ 234/256) -data8 0x3FE4DD49CF994058 //ln(1/frcpa(1+ 235/256) -data8 0x3FE4ECA86E64A684 //ln(1/frcpa(1+ 236/256) -data8 0x3FE503C43CD8EB68 //ln(1/frcpa(1+ 237/256) -data8 0x3FE513356667FC57 //ln(1/frcpa(1+ 238/256) -data8 0x3FE522AE0738A3D8 //ln(1/frcpa(1+ 239/256) -data8 0x3FE5322E26867857 //ln(1/frcpa(1+ 240/256) -data8 0x3FE541B5CB979809 //ln(1/frcpa(1+ 241/256) -data8 0x3FE55144FDBCBD62 //ln(1/frcpa(1+ 242/256) -data8 0x3FE560DBC45153C7 //ln(1/frcpa(1+ 243/256) -data8 0x3FE5707A26BB8C66 //ln(1/frcpa(1+ 244/256) -data8 0x3FE587F60ED5B900 //ln(1/frcpa(1+ 245/256) -data8 0x3FE597A7977C8F31 //ln(1/frcpa(1+ 246/256) -data8 0x3FE5A760D634BB8B //ln(1/frcpa(1+ 247/256) -data8 0x3FE5B721D295F10F //ln(1/frcpa(1+ 248/256) -data8 0x3FE5C6EA94431EF9 //ln(1/frcpa(1+ 249/256) -data8 0x3FE5D6BB22EA86F6 //ln(1/frcpa(1+ 250/256) -data8 0x3FE5E6938645D390 //ln(1/frcpa(1+ 251/256) -data8 0x3FE5F673C61A2ED2 //ln(1/frcpa(1+ 252/256) -data8 0x3FE6065BEA385926 //ln(1/frcpa(1+ 253/256) -data8 0x3FE6164BFA7CC06B //ln(1/frcpa(1+ 254/256) -data8 0x3FE62643FECF9743 //ln(1/frcpa(1+ 255/256) -// -// [2;4) -data8 0xBEB2CC7A38B9355F,0x3F035F2D1833BF4C // A10,A9 -data8 0xBFF51BAA7FD27785,0x3FFC9D5D5B6CDEFF // A2,A1 -data8 0xBF421676F9CB46C7,0x3F7437F2FA1436C6 // A8,A7 -data8 0xBFD7A7041DE592FE,0x3FE9F107FEE8BD29 // A4,A3 -// [4;8) -data8 0x3F6BBBD68451C0CD,0xBF966EC3272A16F7 // A10,A9 -data8 0x40022A24A39AD769,0x4014190EDF49C8C5 // A2,A1 -data8 0x3FB130FD016EE241,0xBFC151B46E635248 // A8,A7 -data8 0x3FDE8F611965B5FE,0xBFEB5110EB265E3D // A4,A3 -// [8;16) -data8 0x3F736EF93508626A,0xBF9FE5DBADF58AF1 // A10,A9 -data8 0x40110A9FC5192058,0x40302008A6F96B29 // A2,A1 -data8 0x3FB8E74E0CE1E4B5,0xBFC9B5DA78873656 // A8,A7 -data8 0x3FE99D0DF10022DC,0xBFF829C0388F9484 // A4,A3 -// [16;32) -data8 0x3F7FFF9D6D7E9269,0xBFAA780A249AEDB1 // A10,A9 -data8 0x402082A807AEA080,0x4045ED9868408013 // A2,A1 -data8 0x3FC4E1E54C2F99B7,0xBFD5DE2D6FFF1490 // A8,A7 -data8 0x3FF75FC89584AE87,0xC006B4BADD886CAE // A4,A3 -// [32;64) -data8 0x3F8CE54375841A5F,0xBFB801ABCFFA1BE2 // A10,A9 -data8 0x403040A8B1815BDA,0x405B99A917D24B7A // A2,A1 -data8 0x3FD30CAB81BFFA03,0xBFE41AEF61ECF48B // A8,A7 -data8 0x400650CC136BEC43,0xC016022046E8292B // A4,A3 -// [64;128) -data8 0x3F9B69BD22CAA8B8,0xBFC6D48875B7A213 // A10,A9 -data8 0x40402028CCAA2F6D,0x40709AACEB3CBE0F // A2,A1 -data8 0x3FE22C6A5924761E,0xBFF342F5F224523D // A8,A7 -data8 0x4015CD405CCA331F,0xC025AAD10482C769 // A4,A3 -// [128;256) -data8 0x3FAAAD9CD0E40D06,0xBFD63FC8505D80CB // A10,A9 -data8 0x40501008D56C2648,0x408364794B0F4376 // A2,A1 -data8 0x3FF1BE0126E00284,0xC002D8E3F6F7F7CA // A8,A7 -data8 0x40258C757E95D860,0xC0357FA8FD398011 // A4,A3 -// [256;512) -data8 0x3FBA4DAC59D49FEB,0xBFE5F476D1C43A77 // A10,A9 -data8 0x40600800D890C7C6,0x40962C42AAEC8EF0 // A2,A1 -data8 0x40018680ECF19B89,0xC012A3EB96FB7BA4 // A8,A7 -data8 0x40356C4CDD3B60F9,0xC0456A34BF18F440 // A4,A3 -// [512;1024) -data8 0x3FCA1B54F6225A5A,0xBFF5CD67BA10E048 // A10,A9 -data8 0x407003FED94C58C2,0x40A8F30B4ACBCD22 // A2,A1 -data8 0x40116A135EB66D8C,0xC022891B1CED527E // A8,A7 -data8 0x40455C4617FDD8BC,0xC0555F82729E59C4 // A4,A3 -// [1024;2048) -data8 0x3FD9FFF9095C6EC9,0xC005B88CB25D76C9 // A10,A9 -data8 0x408001FE58FA734D,0x40BBB953BAABB0F3 // A2,A1 -data8 0x40215B2F9FEB5D87,0xC0327B539DEA5058 // A8,A7 -data8 0x40555444B3E8D64D,0xC0655A2B26F9FC8A // A4,A3 -// [2048;4096) -data8 0x3FE9F065A1C3D6B1,0xC015ACF6FAE8D78D // A10,A9 -data8 0x409000FE383DD2B7,0x40CE7F5C1E8BCB8B // A2,A1 -data8 0x40315324E5DB2EBE,0xC04274194EF70D18 // A8,A7 -data8 0x4065504353FF2207,0xC075577FE1BFE7B6 // A4,A3 -// [4096;8192) -data8 0x3FF9E6FBC6B1C70D,0xC025A62DAF76F85D // A10,A9 -data8 0x40A0007E2F61EBE8,0x40E0A2A23FB5F6C3 // A2,A1 -data8 0x40414E9BC0A0141A,0xC0527030F2B69D43 // A8,A7 -data8 0x40754E417717B45B,0xC085562A447258E5 // A4,A3 -// -data8 0xbfdffffffffaea15 // P1 -data8 0x3FDD8B618D5AF8FE // point of local minimum on [1;2] -data8 0x3FED67F1C864BEB5 // ln(sqrt(2*Pi)) -data8 0x4008000000000000 // 3.0 -// -data8 0xBF9E1C289FB224AB,0x3FBF7422445C9460 // A6,A5 -data8 0xBFF01E76D66F8D8A // A0 -data8 0xBFE2788CFC6F91DA // A1 [1.0;1.25) -data8 0x3FCB8CC69000EB5C,0xBFD41997A0C2C641 // A6,A5 -data8 0x3FFCAB0BFA0EA462 // A0 -data8 0xBFBF19B9BCC38A42 // A0 [1.25;1.5) -data8 0x3FD51EE4DE0A364C,0xBFE00D7F98A16E4B // A6,A5 -data8 0x40210CE1F327E9E4 // A0 -data8 0x4001DB08F9DFA0CC // A0 [1.5;1.75) -data8 0x3FE24F606742D252,0xBFEC81D7D12574EC // A6,A5 -data8 0x403BE636A63A9C27 // A0 -data8 0x4000A0CB38D6CF0A // A0 [1.75;2.0) -data8 0x3FF1029A9DD542B4,0xBFFAD37C209D3B25 // A6,A5 -data8 0x405385E6FD9BE7EA // A0 -data8 0x478895F1C0000000 // Overflow boundary -data8 0x400062D97D26B523,0xC00A03E1529FF023 // A6,A5 -data8 0x4069204C51E566CE // A0 -data8 0x0000000000000000 // pad -data8 0x40101476B38FD501,0xC0199DE7B387C0FC // A6,A5 -data8 0x407EB8DAEC83D759 // A0 -data8 0x0000000000000000 // pad -data8 0x401FDB008D65125A,0xC0296B506E665581 // A6,A5 -data8 0x409226D93107EF66 // A0 -data8 0x0000000000000000 // pad -data8 0x402FB3EAAF3E7B2D,0xC039521142AD8E0D // A6,A5 -data8 0x40A4EFA4F072792E // A0 -data8 0x0000000000000000 // pad -data8 0x403FA024C66B2563,0xC0494569F250E691 // A6,A5 -data8 0x40B7B747C9235BB8 // A0 -data8 0x0000000000000000 // pad -data8 0x404F9607D6DA512C,0xC0593F0B2EDDB4BC // A6,A5 -data8 0x40CA7E29C5F16DE2 // A0 -data8 0x0000000000000000 // pad -data8 0x405F90C5F613D98D,0xC0693BD130E50AAF // A6,A5 -data8 0x40DD4495238B190C // A0 -data8 0x0000000000000000 // pad -// -// polynomial approximation of ln(sin(Pi*x)/(Pi*x)), |x| <= 0.5 -data8 0xBFD58731A486E820,0xBFA4452CC28E15A9 // S16,S14 -data8 0xBFD013F6E1B86C4F,0xBFD5B3F19F7A341F // S8,S6 -data8 0xBFC86A0D5252E778,0xBFC93E08C9EE284B // S12,S10 -data8 0xBFE15132555C9EDD,0xBFFA51A662480E35 // S4,S2 -// -// [1.0;1.25) -data8 0xBFA697D6775F48EA,0x3FB9894B682A98E7 // A9,A8 -data8 0xBFCA8969253CFF55,0x3FD15124EFB35D9D // A5,A4 -data8 0xBFC1B00158AB719D,0x3FC5997D04E7F1C1 // A7,A6 -data8 0xBFD9A4D50BAFF989,0x3FEA51A661F5176A // A3,A2 -// [1.25;1.5) -data8 0x3F838E0D35A6171A,0xBF831BBBD61313B7 // A8,A7 -data8 0x3FB08B40196425D0,0xBFC2E427A53EB830 // A4,A3 -data8 0x3F9285DDDC20D6C3,0xBFA0C90C9C223044 // A6,A5 -data8 0x3FDEF72BC8F5287C,0x3D890B3DAEBC1DFC // A2,A1 -// [1.5;1.75) -data8 0x3F65D5A7EB31047F,0xBFA44EAC9BFA7FDE // A8,A7 -data8 0x40051FEFE7A663D8,0xC012A5CFE00A2522 // A4,A3 -data8 0x3FD0E1583AB00E08,0xBFF084AF95883BA5 // A6,A5 -data8 0x40185982877AE0A2,0xC015F83DB73B57B7 // A2,A1 -// [1.75;2.0) -data8 0x3F4A9222032EB39A,0xBF8CBC9587EEA5A3 // A8,A7 -data8 0x3FF795400783BE49,0xC00851BC418B8A25 // A4,A3 -data8 0x3FBBC992783E8C5B,0xBFDFA67E65E89B29 // A6,A5 -data8 0x4012B408F02FAF88,0xC013284CE7CB0C39 // A2,A1 -// -// roots -data8 0xC003A7FC9600F86C // -2.4570247382208005860 -data8 0xC009260DBC9E59AF // -3.1435808883499798405 -data8 0xC005FB410A1BD901 // -2.7476826467274126919 -data8 0xC00FA471547C2FE5 // -3.9552942848585979085 -// -// polynomial approximation of ln(GAMMA(x)) near roots -// near -2.4570247382208005860 -data8 0x3FF694A6058D9592,0x40136EEBB003A92B // R3,R2 -data8 0x3FF83FE966AF5360,0x3C90323B6D1FE86D // R1,R0 -// near -3.1435808883499798405 -data8 0x405C11371268DA38,0x4039D4D2977D2C23 // R3,R2 -data8 0x401F20A65F2FAC62,0x3CDE9605E3AE7A62 // R1,R0 -// near -2.7476826467274126919 -data8 0xC034185AC31314FF,0x4023267F3C28DFE3 // R3,R2 -data8 0xBFFEA12DA904B194,0x3CA8FB8530BA7689 // R1,R0 -// near -2.7476826467274126919 -data8 0xC0AD25359E70C888,0x406F76DEAEA1B8C6 // R3,R2 -data8 0xC034B99D966C5644,0xBCBDDC0336980B58 // R1,R0 -LOCAL_OBJECT_END(lgammaf_data) - -//********************************************************************* - -.section .text -GLOBAL_LIBM_ENTRY(__libm_lgammaf) -{ .mfi - getf.exp GR_SignExp = f8 - frcpa.s1 FR_InvX,p0 = f1,f8 - mov GR_ExpOf2 = 0x10000 -} -{ .mfi - addl GR_ad_Data = @ltoff(lgammaf_data),gp - fcvt.fx.s1 FR_int_N = f8 - mov GR_ExpMask = 0x1ffff -};; -{ .mfi - getf.sig GR_Sig = f8 - fclass.m p13,p0 = f8,0x1EF // is x NaTVal, NaN, - // +/-0, +/-INF or +/-deno? - mov GR_ExpBias = 0xffff -} -{ .mfi - ld8 GR_ad_Data = [GR_ad_Data] - fma.s1 FR_Xp1 = f8,f1,f1 - mov GR_StirlBound = 0x1000C -};; -{ .mfi - setf.exp FR_2 = GR_ExpOf2 - fmerge.se FR_x = f1,f8 - dep.z GR_Ind = GR_SignExp,3,4 -} -{ .mfi - cmp.eq p8,p0 = GR_SignExp,GR_ExpBias - fcvt.fx.trunc.s1 FR_int_Ntrunc = f8 - and GR_Exp = GR_ExpMask,GR_SignExp -};; -{ .mfi - add GR_ad_C650 = 0xB20,GR_ad_Data - fcmp.lt.s1 p14,p15 = f8,f0 - extr.u GR_Ind4T = GR_Sig,55,8 -} -{ .mfb - sub GR_PureExp = GR_Exp,GR_ExpBias - fnorm.s1 FR_NormX = f8 - // jump if x is NaTVal, NaN, +/-0, +/-INF or +/-deno -(p13) br.cond.spnt lgammaf_spec -};; -lgammaf_core: -{ .mfi - ldfpd FR_P1,FR_LocalMin = [GR_ad_C650],16 - fms.s1 FR_xm2 = f8,f1,f1 - add GR_ad_Co = 0x820,GR_ad_Data -} -{ .mib - ldfpd FR_P3,FR_P2 = [GR_ad_Data],16 - cmp.ltu p9,p0 = GR_SignExp,GR_ExpBias - // jump if x is from the interval [1; 2) -(p8) br.cond.spnt lgammaf_1_2 -};; -{ .mfi - setf.sig FR_int_Ln = GR_PureExp - fms.s1 FR_r = FR_InvX,f8,f1 - shladd GR_ad_Co = GR_Ind,3,GR_ad_Co -} -{ .mib - ldfpd FR_LnSqrt2Pi,FR_3 = [GR_ad_C650],16 - cmp.lt p13,p12 = GR_Exp,GR_StirlBound - // jump if x is from the interval (0; 1) -(p9) br.cond.spnt lgammaf_0_1 -};; -{ .mfi - ldfpd FR_Ln2,FR_05 = [GR_ad_Data],16 - fma.s1 FR_Xp2 = f1,f1,FR_Xp1 // (x+2) - shladd GR_ad_C650 = GR_Ind,2,GR_ad_C650 -} -{ .mfi - add GR_ad_Ce = 0x20,GR_ad_Co - nop.f 0 - add GR_ad_C43 = 0x30,GR_ad_Co -};; -{ .mfi - // load coefficients of polynomial approximation - // of ln(GAMMA(x)), 2 <= x < 2^13 -(p13) ldfpd FR_A10,FR_A9 = [GR_ad_Co],16 - fcvt.xf FR_N = FR_int_N - cmp.eq.unc p6,p7 = GR_ExpOf2,GR_SignExp -} -{ .mib -(p13) ldfpd FR_A8,FR_A7 = [GR_ad_Ce] -(p14) cmp.le.unc p9,p0 = GR_StirlBound,GR_Exp - // jump if x is less or equal to -2^13 -(p9) br.cond.spnt lgammaf_negstirling -};; -.pred.rel "mutex",p6,p7 -{ .mfi -(p13) ldfpd FR_A6,FR_A5 = [GR_ad_C650],16 -(p6) fma.s1 FR_x = f0,f0,FR_NormX - shladd GR_ad_T = GR_Ind4T,3,GR_ad_Data -} -{ .mfi -(p13) ldfpd FR_A4,FR_A3 = [GR_ad_C43] -(p7) fms.s1 FR_x = FR_x,f1,f1 -(p14) mov GR_ReqBound = 0x20005 -};; -{ .mfi -(p13) ldfpd FR_A2,FR_A1 = [GR_ad_Co],16 - fms.s1 FR_xm2 = FR_xm2,f1,f1 -(p14) extr.u GR_Arg = GR_Sig,60,4 -} -{ .mfi - mov GR_SignOfGamma = 1 // set sign of gamma(x) to 1 - fcvt.xf FR_Ntrunc = FR_int_Ntrunc - nop.i 0 -};; -{ .mfi - ldfd FR_T = [GR_ad_T] - fma.s1 FR_r2 = FR_r,FR_r,f0 - shl GR_ReqBound = GR_ReqBound,3 -} -{ .mfi - add GR_ad_Co = 0xCA0,GR_ad_Data - fnma.s1 FR_Req = FR_Xp1,FR_NormX,f0 // -x*(x+1) -(p14) shladd GR_Arg = GR_Exp,4,GR_Arg -};; -{ .mfi -(p13) ldfd FR_A0 = [GR_ad_C650] - fma.s1 FR_Xp3 = FR_2,f1,FR_Xp1 // (x+3) -(p14) cmp.le.unc p9,p0 = GR_Arg,GR_ReqBound -} -{ .mfi -(p14) add GR_ad_Ce = 0x20,GR_ad_Co - fma.s1 FR_Xp4 = FR_2,FR_2,FR_NormX // (x+4) -(p15) add GR_ad_OvfBound = 0xBB8,GR_ad_Data -};; -{ .mfi - // load coefficients of polynomial approximation - // of ln(sin(Pi*xf)/(Pi*xf)), |xf| <= 0.5 -(p14) ldfpd FR_S16,FR_S14 = [GR_ad_Co],16 -(p14) fms.s1 FR_Xf = FR_NormX,f1,FR_N // xf = x - [x] -(p14) sub GR_SignOfGamma = r0,GR_SignOfGamma // set sign of - // gamma(x) to -1 -} -{ .mfb -(p14) ldfpd FR_S12,FR_S10 = [GR_ad_Ce],16 - fma.s1 FR_Xp5 = FR_2,FR_2,FR_Xp1 // (x+5) - // jump if x is from the interval (-9; 0) -(p9) br.cond.spnt lgammaf_negrecursion -};; -{ .mfi -(p14) ldfpd FR_S8,FR_S6 = [GR_ad_Co],16 - fma.s1 FR_P32 = FR_P3,FR_r,FR_P2 - nop.i 0 -} -{ .mfb -(p14) ldfpd FR_S4,FR_S2 = [GR_ad_Ce],16 - fma.s1 FR_x2 = FR_x,FR_x,f0 - // jump if x is from the interval (-2^13; -9) -(p14) br.cond.spnt lgammaf_negpoly -};; -{ .mfi - ldfd FR_OverflowBound = [GR_ad_OvfBound] -(p12) fcvt.xf FR_N = FR_int_Ln - // set p9 if signgum is 32-bit int - // set p10 if signgum is 64-bit int - cmp.eq p10,p9 = 8,r34 -} -{ .mfi - nop.m 0 -(p12) fma.s1 FR_P10 = FR_P1,FR_r,f1 - nop.i 0 -};; -.pred.rel "mutex",p6,p7 -.pred.rel "mutex",p9,p10 -{ .mfi - // store sign of gamma(x) as 32-bit int -(p9) st4 [r33] = GR_SignOfGamma -(p6) fma.s1 FR_xx = FR_x,FR_xm2,f0 - nop.i 0 -} -{ .mfi - // store sign of gamma(x) as 64-bit int -(p10) st8 [r33] = GR_SignOfGamma -(p7) fma.s1 FR_xx = f0,f0,FR_x - nop.i 0 -};; -{ .mfi - nop.m 0 -(p13) fma.s1 FR_A9 = FR_A10,FR_x,FR_A9 - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fma.s1 FR_A7 = FR_A8,FR_x,FR_A7 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p13) fma.s1 FR_A5 = FR_A6,FR_x,FR_A5 - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fma.s1 FR_A3 = FR_A4,FR_x,FR_A3 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p15) fcmp.eq.unc.s1 p8,p0 = FR_NormX,FR_2 // is input argument 2.0? - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fma.s1 FR_A1 = FR_A2,FR_x,FR_A1 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p12) fma.s1 FR_T = FR_N,FR_Ln2,FR_T - nop.i 0 -} -{ .mfi - nop.m 0 -(p12) fma.s1 FR_P32 = FR_P32,FR_r2,FR_P10 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p13) fma.s1 FR_x4 = FR_x2,FR_x2,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fma.s1 FR_x3 = FR_x2,FR_xx,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p13) fma.s1 FR_A7 = FR_A9,FR_x2,FR_A7 - nop.i 0 -} -{ .mfb - nop.m 0 -(p8) fma.s.s0 f8 = f0,f0,f0 -(p8) br.ret.spnt b0 // fast exit for 2.0 -};; -{ .mfi - nop.m 0 -(p6) fma.s1 FR_A0 = FR_A0,FR_xm2,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fma.s1 FR_A3 = FR_A5,FR_x2,FR_A3 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p15) fcmp.le.unc.s1 p8,p0 = FR_OverflowBound,FR_NormX // overflow test - nop.i 0 -} -{ .mfi - nop.m 0 -(p12) fms.s1 FR_xm05 = FR_NormX,f1,FR_05 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p12) fma.s1 FR_Ln = FR_P32,FR_r,FR_T - nop.i 0 -} -{ .mfi - nop.m 0 -(p12) fms.s1 FR_LnSqrt2Pi = FR_LnSqrt2Pi,f1,FR_NormX - nop.i 0 -};; -{ .mfi - nop.m 0 -(p13) fma.s1 FR_A0 = FR_A1,FR_xx,FR_A0 - nop.i 0 -} -{ .mfb - nop.m 0 -(p13) fma.s1 FR_A3 = FR_A7,FR_x4,FR_A3 - // jump if result overflows -(p8) br.cond.spnt lgammaf_overflow -};; -.pred.rel "mutex",p12,p13 -{ .mfi - nop.m 0 -(p12) fma.s.s0 f8 = FR_Ln,FR_xm05,FR_LnSqrt2Pi - nop.i 0 -} -{ .mfb - nop.m 0 -(p13) fma.s.s0 f8 = FR_A3,FR_x3,FR_A0 - br.ret.sptk b0 -};; -// branch for calculating of ln(GAMMA(x)) for 0 < x < 1 -//--------------------------------------------------------------------- -.align 32 -lgammaf_0_1: -{ .mfi - getf.sig GR_Ind = FR_Xp1 - fma.s1 FR_r2 = FR_r,FR_r,f0 - mov GR_fff7 = 0xFFF7 -} -{ .mfi - ldfpd FR_Ln2,FR_05 = [GR_ad_Data],16 - fma.s1 FR_P32 = FR_P3,FR_r,FR_P2 - // input argument can't be equal to 1.0 - cmp.eq p0,p14 = r0,r0 -};; -{ .mfi - getf.exp GR_Exp = FR_w - fcvt.xf FR_N = FR_int_Ln - add GR_ad_Co = 0xCE0,GR_ad_Data -} -{ .mfi - shladd GR_ad_T = GR_Ind4T,3,GR_ad_Data - fma.s1 FR_P10 = FR_P1,FR_r,f1 - add GR_ad_Ce = 0xD00,GR_ad_Data -};; -{ .mfi - ldfd FR_T = [GR_ad_T] - fma.s1 FR_w2 = FR_w,FR_w,f0 - extr.u GR_Ind = GR_Ind,61,2 -} -{ .mfi - nop.m 0 - fma.s1 FR_Q32 = FR_P3,FR_w,FR_P2 -//// add GR_ad_C0 = 0xB30,GR_ad_Data - add GR_ad_C0 = 0xB38,GR_ad_Data -};; -{ .mfi - and GR_Exp = GR_Exp,GR_ExpMask - nop.f 0 - shladd GR_IndX8 = GR_Ind,3,r0 -} -{ .mfi - shladd GR_IndX2 = GR_Ind,1,r0 - fma.s1 FR_Q10 = FR_P1,FR_w,f1 - cmp.eq p6,p15 = 0,GR_Ind -};; -{ .mfi - shladd GR_ad_Co = GR_IndX8,3,GR_ad_Co -(p6) fma.s1 FR_x = f0,f0,FR_NormX - shladd GR_ad_C0 = GR_IndX2,4,GR_ad_C0 -} -{ .mfi - shladd GR_ad_Ce = GR_IndX8,3,GR_ad_Ce - nop.f 0 -(p15) cmp.eq.unc p7,p8 = 1,GR_Ind -};; -.pred.rel "mutex",p7,p8 -{ .mfi - ldfpd FR_A8,FR_A7 = [GR_ad_Co],16 -(p7) fms.s1 FR_x = FR_NormX,f1,FR_LocalMin - cmp.ge p10,p11 = GR_Exp,GR_fff7 -} -{ .mfb - ldfpd FR_A6,FR_A5 = [GR_ad_Ce],16 -(p8) fma.s1 FR_x = f1,f1,FR_NormX - br.cond.sptk lgamma_0_2_core -};; -// branch for calculating of ln(GAMMA(x)) for 1 <= x < 2 -//--------------------------------------------------------------------- -.align 32 -lgammaf_1_2: -{ .mfi - add GR_ad_Co = 0xCF0,GR_ad_Data - fcmp.eq.s1 p14,p0 = f1,FR_NormX // is input argument 1.0? - extr.u GR_Ind = GR_Sig,61,2 -} -{ .mfi - add GR_ad_Ce = 0xD10,GR_ad_Data - nop.f 0 -//// add GR_ad_C0 = 0xB40,GR_ad_Data - add GR_ad_C0 = 0xB48,GR_ad_Data -};; -{ .mfi - shladd GR_IndX8 = GR_Ind,3,r0 - nop.f 0 - shladd GR_IndX2 = GR_Ind,1,r0 -} -{ .mfi - cmp.eq p6,p15 = 0,GR_Ind // p6 <- x from [1;1.25) - nop.f 0 - cmp.ne p9,p0 = r0,r0 -};; -{ .mfi - shladd GR_ad_Co = GR_IndX8,3,GR_ad_Co -(p6) fms.s1 FR_x = FR_NormX,f1,f1 // reduced x for [1;1.25) - shladd GR_ad_C0 = GR_IndX2,4,GR_ad_C0 -} -{ .mfi - shladd GR_ad_Ce = GR_IndX8,3,GR_ad_Ce -(p14) fma.s.s0 f8 = f0,f0,f0 -(p15) cmp.eq.unc p7,p8 = 1,GR_Ind // p7 <- x from [1.25;1.5) -};; -.pred.rel "mutex",p7,p8 -{ .mfi - ldfpd FR_A8,FR_A7 = [GR_ad_Co],16 -(p7) fms.s1 FR_x = FR_xm2,f1,FR_LocalMin - nop.i 0 -} -{ .mfi - ldfpd FR_A6,FR_A5 = [GR_ad_Ce],16 -(p8) fma.s1 FR_x = f0,f0,FR_NormX -(p9) cmp.eq.unc p10,p11 = r0,r0 -};; -lgamma_0_2_core: -{ .mmi - ldfpd FR_A4,FR_A3 = [GR_ad_Co],16 - ldfpd FR_A2,FR_A1 = [GR_ad_Ce],16 - mov GR_SignOfGamma = 1 // set sign of gamma(x) to 1 -};; -{ .mfi -// add GR_ad_C0 = 8,GR_ad_C0 - ldfd FR_A0 = [GR_ad_C0] - nop.f 0 - // set p13 if signgum is 32-bit int - // set p15 if signgum is 64-bit int - cmp.eq p15,p13 = 8,r34 -};; -.pred.rel "mutex",p13,p15 -{ .mmf - // store sign of gamma(x) -(p13) st4 [r33] = GR_SignOfGamma // as 32-bit int -(p15) st8 [r33] = GR_SignOfGamma // as 64-bit int -(p11) fma.s1 FR_Q32 = FR_Q32,FR_w2,FR_Q10 -};; -{ .mfb - nop.m 0 -(p10) fma.s1 FR_P32 = FR_P32,FR_r2,FR_P10 -(p14) br.ret.spnt b0 // fast exit for 1.0 -};; -{ .mfi - nop.m 0 -(p10) fma.s1 FR_T = FR_N,FR_Ln2,FR_T - cmp.eq p6,p7 = 0,GR_Ind // p6 <- x from [1;1.25) -} -{ .mfi - nop.m 0 - fma.s1 FR_x2 = FR_x,FR_x,f0 - cmp.eq p8,p0 = r0,r0 // set p8 to 1 that means we on [1;2] -};; -{ .mfi - nop.m 0 -(p11) fma.s1 FR_Ln = FR_Q32,FR_w,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fma.s1 FR_xx = f0,f0,FR_x - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.s1 FR_xx = f0,f0,f1 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A7 = FR_A8,FR_x,FR_A7 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A5 = FR_A6,FR_x,FR_A5 -(p9) cmp.ne p8,p0 = r0,r0 // set p8 to 0 that means we on [0;1] -};; -{ .mfi - nop.m 0 - fma.s1 FR_A3 = FR_A4,FR_x,FR_A3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A1 = FR_A2,FR_x,FR_A1 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_x4 = FR_x2,FR_x2,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p10) fma.s1 FR_Ln = FR_P32,FR_r,FR_T - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A5 = FR_A7,FR_x2,FR_A5 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A1 = FR_A3,FR_x2,FR_A1 - nop.i 0 -};; -.pred.rel "mutex",p9,p8 -{ .mfi - nop.m 0 -(p9) fms.d.s1 FR_A0 = FR_A0,FR_xx,FR_Ln - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fms.s1 FR_A0 = FR_A0,FR_xx,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.d.s1 FR_A1 = FR_A5,FR_x4,FR_A1 - nop.i 0 -} -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fma.s.s0 f8 = FR_A1,FR_x2,FR_A0 - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fma.s.s0 f8 = FR_A1,FR_x,FR_A0 - br.ret.sptk b0 -};; -// branch for calculating of ln(GAMMA(x)) for -9 < x < 1 -//--------------------------------------------------------------------- -.align 32 -lgammaf_negrecursion: -{ .mfi - getf.sig GR_N = FR_int_Ntrunc - fms.s1 FR_1pXf = FR_Xp2,f1,FR_Ntrunc // 1 + (x+1) - [x] - mov GR_Neg2 = 2 -} -{ .mfi - add GR_ad_Co = 0xCE0,GR_ad_Data - fms.s1 FR_Xf = FR_Xp1,f1,FR_Ntrunc // (x+1) - [x] - mov GR_Neg4 = 4 -};; -{ .mfi - add GR_ad_Ce = 0xD00,GR_ad_Data - fma.s1 FR_Xp6 = FR_2,FR_2,FR_Xp2 // (x+6) - add GR_ad_C0 = 0xB30,GR_ad_Data -} -{ .mfi - sub GR_Neg2 = r0,GR_Neg2 - fma.s1 FR_Xp7 = FR_2,FR_3,FR_Xp1 // (x+7) - sub GR_Neg4 = r0,GR_Neg4 -};; -{ .mfi - cmp.ne p8,p0 = r0,GR_N - fcmp.eq.s1 p13,p0 = FR_NormX,FR_Ntrunc - and GR_IntNum = 0xF,GR_N -} -{ .mfi - cmp.lt p6,p0 = GR_N,GR_Neg2 - fma.s1 FR_Xp8 = FR_2,FR_3,FR_Xp2 // (x+8) - cmp.lt p7,p0 = GR_N,GR_Neg4 -};; -{ .mfi - getf.d GR_Arg = FR_NormX -(p6) fma.s1 FR_Xp2 = FR_Xp2,FR_Xp3,f0 -(p8) tbit.z.unc p14,p15 = GR_IntNum,0 -} -{ .mfi - sub GR_RootInd = 0xE,GR_IntNum -(p7) fma.s1 FR_Xp4 = FR_Xp4,FR_Xp5,f0 - add GR_ad_Root = 0xDE0,GR_ad_Data -};; -{ .mfi - shladd GR_ad_Root = GR_RootInd,3,GR_ad_Root - fms.s1 FR_x = FR_Xp1,f1,FR_Ntrunc // (x+1) - [x] - nop.i 0 -} -{ .mfb - nop.m 0 - nop.f 0 -(p13) br.cond.spnt lgammaf_singularity -};; -.pred.rel "mutex",p14,p15 -{ .mfi - cmp.gt p6,p0 = 0xA,GR_IntNum -(p14) fma.s1 FR_Req = FR_Req,FR_Xf,f0 - cmp.gt p7,p0 = 0xD,GR_IntNum -} -{ .mfi -(p15) mov GR_SignOfGamma = 1 // set sign of gamma(x) to 1 -(p15) fnma.s1 FR_Req = FR_Req,FR_Xf,f0 - cmp.leu p0,p13 = 2,GR_RootInd -};; -{ .mfi - nop.m 0 -(p6) fma.s1 FR_Xp6 = FR_Xp6,FR_Xp7,f0 -(p13) add GR_ad_RootCo = 0xE00,GR_ad_Data -};; -{ .mfi - nop.m 0 - fcmp.eq.s1 p12,p11 = FR_1pXf,FR_2 - nop.i 0 -};; -{ .mfi - getf.sig GR_Sig = FR_1pXf - fcmp.le.s1 p9,p0 = FR_05,FR_Xf - nop.i 0 -} -{ .mfi -(p13) shladd GR_RootInd = GR_RootInd,4,r0 -(p7) fma.s1 FR_Xp2 = FR_Xp2,FR_Xp4,f0 -(p8) cmp.gt.unc p10,p0 = 0x9,GR_IntNum -};; -.pred.rel "mutex",p11,p12 -{ .mfi - nop.m 0 -(p10) fma.s1 FR_Req = FR_Req,FR_Xp8,f0 -(p11) extr.u GR_Ind = GR_Sig,61,2 -} -{ .mfi -(p13) add GR_RootInd = GR_RootInd,GR_RootInd - nop.f 0 -(p12) mov GR_Ind = 3 -};; -{ .mfi - shladd GR_IndX2 = GR_Ind,1,r0 - nop.f 0 - cmp.gt p14,p0 = 2,GR_Ind -} -{ .mfi - shladd GR_IndX8 = GR_Ind,3,r0 - nop.f 0 - cmp.eq p6,p0 = 1,GR_Ind -};; -.pred.rel "mutex",p6,p9 -{ .mfi - shladd GR_ad_Co = GR_IndX8,3,GR_ad_Co -(p6) fms.s1 FR_x = FR_Xf,f1,FR_LocalMin - cmp.gt p10,p0 = 0xB,GR_IntNum -} -{ .mfi - shladd GR_ad_Ce = GR_IndX8,3,GR_ad_Ce -(p9) fma.s1 FR_x = f0,f0,FR_1pXf - shladd GR_ad_C0 = GR_IndX2,4,GR_ad_C0 -};; -{ .mfi - // load coefficients of polynomial approximation - // of ln(GAMMA(x)), 1 <= x < 2 - ldfpd FR_A8,FR_A7 = [GR_ad_Co],16 -(p10) fma.s1 FR_Xp2 = FR_Xp2,FR_Xp6,f0 - add GR_ad_C0 = 8,GR_ad_C0 -} -{ .mfi - ldfpd FR_A6,FR_A5 = [GR_ad_Ce],16 - nop.f 0 -(p14) add GR_ad_Root = 0x10,GR_ad_Root -};; -{ .mfi - ldfpd FR_A4,FR_A3 = [GR_ad_Co],16 - nop.f 0 - add GR_ad_RootCe = 0xE10,GR_ad_Data -} -{ .mfi - ldfpd FR_A2,FR_A1 = [GR_ad_Ce],16 - nop.f 0 -(p14) add GR_RootInd = 0x40,GR_RootInd -};; -{ .mmi - ldfd FR_A0 = [GR_ad_C0] -(p13) add GR_ad_RootCo = GR_ad_RootCo,GR_RootInd -(p13) add GR_ad_RootCe = GR_ad_RootCe,GR_RootInd -};; -{ .mmi -(p13) ld8 GR_Root = [GR_ad_Root] -(p13) ldfd FR_Root = [GR_ad_Root] - mov GR_ExpBias = 0xffff -};; -{ .mfi - nop.m 0 - fma.s1 FR_x2 = FR_x,FR_x,f0 - nop.i 0 -} -{ .mlx -(p8) cmp.gt.unc p10,p0 = 0xF,GR_IntNum - movl GR_Dx = 0x000000014F8B588E -};; -{ .mfi - // load coefficients of polynomial approximation - // of ln(GAMMA(x)), x is close to one of negative roots -(p13) ldfpd FR_R3,FR_R2 = [GR_ad_RootCo] - // arguments for logarithm -(p10) fma.s1 FR_Req = FR_Req,FR_Xp2,f0 - mov GR_ExpMask = 0x1ffff -} -{ .mfi -(p13) ldfpd FR_R1,FR_R0 = [GR_ad_RootCe] - nop.f 0 - // set p9 if signgum is 32-bit int - // set p8 if signgum is 64-bit int - cmp.eq p8,p9 = 8,r34 -};; -.pred.rel "mutex",p9,p8 -{ .mfi -(p9) st4 [r33] = GR_SignOfGamma // as 32-bit int - fma.s1 FR_A7 = FR_A8,FR_x,FR_A7 -(p13) sub GR_Root = GR_Arg,GR_Root -} -{ .mfi -(p8) st8 [r33] = GR_SignOfGamma // as 64-bit int - fma.s1 FR_A5 = FR_A6,FR_x,FR_A5 - nop.i 0 -};; -{ .mfi - nop.m 0 - fms.s1 FR_w = FR_Req,f1,f1 -(p13) add GR_Root = GR_Root,GR_Dx -} -{ .mfi - nop.m 0 - nop.f 0 -(p13) add GR_2xDx = GR_Dx,GR_Dx -};; -{ .mfi - nop.m 0 - fma.s1 FR_A3 = FR_A4,FR_x,FR_A3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A1 = FR_A2,FR_x,FR_A1 -(p13) cmp.leu.unc p10,p0 = GR_Root,GR_2xDx -};; -{ .mfi - nop.m 0 - frcpa.s1 FR_InvX,p0 = f1,FR_Req - nop.i 0 -} -{ .mfi - nop.m 0 -(p10) fms.s1 FR_rx = FR_NormX,f1,FR_Root - nop.i 0 -};; -{ .mfi - getf.exp GR_SignExp = FR_Req - fma.s1 FR_x4 = FR_x2,FR_x2,f0 - nop.i 0 -};; -{ .mfi - getf.sig GR_Sig = FR_Req - fma.s1 FR_A5 = FR_A7,FR_x2,FR_A5 - nop.i 0 -};; -{ .mfi - sub GR_PureExp = GR_SignExp,GR_ExpBias - fma.s1 FR_w2 = FR_w,FR_w,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_Q32 = FR_P3,FR_w,FR_P2 - nop.i 0 -};; -{ .mfi - setf.sig FR_int_Ln = GR_PureExp - fma.s1 FR_A1 = FR_A3,FR_x2,FR_A1 - extr.u GR_Ind4T = GR_Sig,55,8 -} -{ .mfi - nop.m 0 - fma.s1 FR_Q10 = FR_P1,FR_w,f1 - nop.i 0 -};; -{ .mfi - shladd GR_ad_T = GR_Ind4T,3,GR_ad_Data - fms.s1 FR_r = FR_InvX,FR_Req,f1 - nop.i 0 -} -{ .mfi - nop.m 0 -(p10) fms.s1 FR_rx2 = FR_rx,FR_rx,f0 - nop.i 0 -};; -{ .mfi - ldfd FR_T = [GR_ad_T] -(p10) fma.s1 FR_R2 = FR_R3,FR_rx,FR_R2 - nop.i 0 -} -{ .mfi - nop.m 0 -(p10) fma.s1 FR_R0 = FR_R1,FR_rx,FR_R0 - nop.i 0 -};; -{ .mfi - getf.exp GR_Exp = FR_w - fma.s1 FR_A1 = FR_A5,FR_x4,FR_A1 - mov GR_ExpMask = 0x1ffff -} -{ .mfi - nop.m 0 - fma.s1 FR_Q32 = FR_Q32, FR_w2,FR_Q10 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_r2 = FR_r,FR_r,f0 - mov GR_fff7 = 0xFFF7 -} -{ .mfi - nop.m 0 - fma.s1 FR_P32 = FR_P3,FR_r,FR_P2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_P10 = FR_P1,FR_r,f1 - and GR_Exp = GR_ExpMask,GR_Exp -} -{ .mfb - nop.m 0 -(p10) fma.s.s0 f8 = FR_R2,FR_rx2,FR_R0 -(p10) br.ret.spnt b0 // exit for arguments close to negative roots -};; -{ .mfi - nop.m 0 - fcvt.xf FR_N = FR_int_Ln - nop.i 0 -} -{ .mfi - cmp.ge p14,p15 = GR_Exp,GR_fff7 - nop.f 0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A0 = FR_A1,FR_x,FR_A0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fma.s1 FR_Ln = FR_Q32,FR_w,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p14) fma.s1 FR_P32 = FR_P32,FR_r2,FR_P10 - cmp.eq p6,p7 = 0,GR_Ind -};; -{ .mfi - nop.m 0 -(p14) fma.s1 FR_T = FR_N,FR_Ln2,FR_T - nop.i 0 -};; -{ .mfi - nop.m 0 -(p14) fma.s1 FR_Ln = FR_P32,FR_r,FR_T - nop.i 0 -};; -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fms.s.s0 f8 = FR_A0,FR_x,FR_Ln - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fms.s.s0 f8 = FR_A0,f1,FR_Ln - br.ret.sptk b0 -};; - -// branch for calculating of ln(GAMMA(x)) for x < -2^13 -//--------------------------------------------------------------------- -.align 32 -lgammaf_negstirling: -{ .mfi - shladd GR_ad_T = GR_Ind4T,3,GR_ad_Data - fms.s1 FR_Xf = FR_NormX,f1,FR_N // xf = x - [x] - mov GR_SingBound = 0x10016 -} -{ .mfi - add GR_ad_Co = 0xCA0,GR_ad_Data - fma.s1 FR_P32 = FR_P3,FR_r,FR_P2 - nop.i 0 -};; -{ .mfi - ldfd FR_T = [GR_ad_T] - fcvt.xf FR_int_Ln = FR_int_Ln - cmp.le p6,p0 = GR_SingBound,GR_Exp -} -{ .mfb - add GR_ad_Ce = 0x20,GR_ad_Co - fma.s1 FR_r2 = FR_r,FR_r,f0 -(p6) br.cond.spnt lgammaf_singularity -};; -{ .mfi - // load coefficients of polynomial approximation - // of ln(sin(Pi*xf)/(Pi*xf)), |xf| <= 0.5 - ldfpd FR_S16,FR_S14 = [GR_ad_Co],16 - fma.s1 FR_P10 = FR_P1,FR_r,f1 - nop.i 0 -} -{ .mfi - ldfpd FR_S12,FR_S10 = [GR_ad_Ce],16 - fms.s1 FR_xm05 = FR_NormX,f1,FR_05 - nop.i 0 -};; -{ .mmi - ldfpd FR_S8,FR_S6 = [GR_ad_Co],16 - ldfpd FR_S4,FR_S2 = [GR_ad_Ce],16 - nop.i 0 -};; -{ .mfi - getf.sig GR_N = FR_int_Ntrunc // signgam calculation - fma.s1 FR_Xf2 = FR_Xf,FR_Xf,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - frcpa.s1 FR_InvXf,p0 = f1,FR_Xf - nop.i 0 -};; -{ .mfi - getf.d GR_Arg = FR_Xf - fcmp.eq.s1 p6,p0 = FR_NormX,FR_N - mov GR_ExpBias = 0x3FF -};; -{ .mfi - nop.m 0 - fma.s1 FR_T = FR_int_Ln,FR_Ln2,FR_T - extr.u GR_Exp = GR_Arg,52,11 -} -{ .mfi - nop.m 0 - fma.s1 FR_P32 = FR_P32,FR_r2,FR_P10 - nop.i 0 -};; -{ .mfi - sub GR_PureExp = GR_Exp,GR_ExpBias - fma.s1 FR_S14 = FR_S16,FR_Xf2,FR_S14 - extr.u GR_Ind4T = GR_Arg,44,8 -} -{ .mfb - mov GR_SignOfGamma = 1 // set signgam to -1 - fma.s1 FR_S10 = FR_S12,FR_Xf2,FR_S10 -(p6) br.cond.spnt lgammaf_singularity -};; -{ .mfi - setf.sig FR_int_Ln = GR_PureExp - fms.s1 FR_rf = FR_InvXf,FR_Xf,f1 - // set p14 if GR_N is even - tbit.z p14,p0 = GR_N,0 -} -{ .mfi - shladd GR_ad_T = GR_Ind4T,3,GR_ad_Data - fma.s1 FR_Xf4 = FR_Xf2,FR_Xf2,f0 - nop.i 0 -};; -{ .mfi -(p14) sub GR_SignOfGamma = r0,GR_SignOfGamma // set signgam to -1 - fma.s1 FR_S6 = FR_S8,FR_Xf2,FR_S6 - nop.i 0 -} -{ .mfi - // set p9 if signgum is 32-bit int - // set p10 if signgum is 64-bit int - cmp.eq p10,p9 = 8,r34 - fma.s1 FR_S2 = FR_S4,FR_Xf2,FR_S2 - nop.i 0 -};; -{ .mfi - ldfd FR_Tf = [GR_ad_T] - fma.s1 FR_Ln = FR_P32,FR_r,FR_T - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_LnSqrt2Pi = FR_LnSqrt2Pi,f1,FR_NormX - nop.i 0 -};; -.pred.rel "mutex",p9,p10 -{ .mfi -(p9) st4 [r33] = GR_SignOfGamma // as 32-bit int - fma.s1 FR_rf2 = FR_rf,FR_rf,f0 - nop.i 0 -} -{ .mfi -(p10) st8 [r33] = GR_SignOfGamma // as 64-bit int - fma.s1 FR_S10 = FR_S14,FR_Xf4,FR_S10 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_P32f = FR_P3,FR_rf,FR_P2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_Xf8 = FR_Xf4,FR_Xf4,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_P10f = FR_P1,FR_rf,f1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S2 = FR_S6,FR_Xf4,FR_S2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fms.s1 FR_Ln = FR_Ln,FR_xm05,FR_LnSqrt2Pi - nop.i 0 -};; -{ .mfi - nop.m 0 - fcvt.xf FR_Nf = FR_int_Ln - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S2 = FR_S10,FR_Xf8,FR_S2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_Tf = FR_Nf,FR_Ln2,FR_Tf - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P32f = FR_P32f,FR_rf2,FR_P10f // ?????? - nop.i 0 -};; -{ .mfi - nop.m 0 - fnma.s1 FR_Ln = FR_S2,FR_Xf2,FR_Ln - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_Lnf = FR_P32f,FR_rf,FR_Tf - nop.i 0 -};; -{ .mfb - nop.m 0 - fms.s.s0 f8 = FR_Ln,f1,FR_Lnf - br.ret.sptk b0 -};; -// branch for calculating of ln(GAMMA(x)) for -2^13 < x < -9 -//--------------------------------------------------------------------- -.align 32 -lgammaf_negpoly: -{ .mfi - getf.d GR_Arg = FR_Xf - frcpa.s1 FR_InvXf,p0 = f1,FR_Xf - mov GR_ExpBias = 0x3FF -} -{ .mfi - nop.m 0 - fma.s1 FR_Xf2 = FR_Xf,FR_Xf,f0 - nop.i 0 -};; -{ .mfi - getf.sig GR_N = FR_int_Ntrunc - fcvt.xf FR_N = FR_int_Ln - mov GR_SignOfGamma = 1 -} -{ .mfi - nop.m 0 - fma.s1 FR_A9 = FR_A10,FR_x,FR_A9 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_P10 = FR_P1,FR_r,f1 - extr.u GR_Exp = GR_Arg,52,11 -} -{ .mfi - nop.m 0 - fma.s1 FR_x4 = FR_x2,FR_x2,f0 - nop.i 0 -};; -{ .mfi - sub GR_PureExp = GR_Exp,GR_ExpBias - fma.s1 FR_A7 = FR_A8,FR_x,FR_A7 - tbit.z p14,p0 = GR_N,0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A5 = FR_A6,FR_x,FR_A5 - nop.i 0 -};; -{ .mfi - setf.sig FR_int_Ln = GR_PureExp - fma.s1 FR_A3 = FR_A4,FR_x,FR_A3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A1 = FR_A2,FR_x,FR_A1 -(p14) sub GR_SignOfGamma = r0,GR_SignOfGamma -};; -{ .mfi - nop.m 0 - fms.s1 FR_rf = FR_InvXf,FR_Xf,f1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_Xf4 = FR_Xf2,FR_Xf2,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S14 = FR_S16,FR_Xf2,FR_S14 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S10 = FR_S12,FR_Xf2,FR_S10 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_T = FR_N,FR_Ln2,FR_T - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P32 = FR_P32,FR_r2,FR_P10 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S6 = FR_S8,FR_Xf2,FR_S6 - extr.u GR_Ind4T = GR_Arg,44,8 -} -{ .mfi - nop.m 0 - fma.s1 FR_S2 = FR_S4,FR_Xf2,FR_S2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A7 = FR_A9,FR_x2,FR_A7 - nop.i 0 -} -{ .mfi - shladd GR_ad_T = GR_Ind4T,3,GR_ad_Data - fma.s1 FR_A3 = FR_A5,FR_x2,FR_A3 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_Xf8 = FR_Xf4,FR_Xf4,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_rf2 = FR_rf,FR_rf,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_P32f = FR_P3,FR_rf,FR_P2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P10f = FR_P1,FR_rf,f1 - nop.i 0 -};; -{ .mfi - ldfd FR_Tf = [GR_ad_T] - fma.s1 FR_Ln = FR_P32,FR_r,FR_T - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A0 = FR_A1,FR_x,FR_A0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S10 = FR_S14,FR_Xf4,FR_S10 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S2 = FR_S6,FR_Xf4,FR_S2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fcvt.xf FR_Nf = FR_int_Ln - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A3 = FR_A7,FR_x4,FR_A3 - nop.i 0 -};; -{ .mfi - nop.m 0 - fcmp.eq.s1 p13,p0 = FR_NormX,FR_Ntrunc - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_x3 = FR_x2,FR_x,f0 // -x^3 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_P32f = FR_P32f,FR_rf2,FR_P10f - nop.i 0 -};; -{ .mfb - // set p9 if signgum is 32-bit int - // set p10 if signgum is 64-bit int - cmp.eq p10,p9 = 8,r34 - fma.s1 FR_S2 = FR_S10,FR_Xf8,FR_S2 -(p13) br.cond.spnt lgammaf_singularity -};; -.pred.rel "mutex",p9,p10 -{ .mmf -(p9) st4 [r33] = GR_SignOfGamma // as 32-bit int -(p10) st8 [r33] = GR_SignOfGamma // as 64-bit int - fms.s1 FR_A0 = FR_A3,FR_x3,FR_A0 // -A3*x^3-A0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_Tf = FR_Nf,FR_Ln2,FR_Tf - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_Ln = FR_S2,FR_Xf2,FR_Ln // S2*Xf^2+Ln - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_Lnf = FR_P32f,FR_rf,FR_Tf - nop.i 0 -};; -{ .mfi - nop.m 0 - fms.s1 FR_Ln = FR_A0,f1,FR_Ln - nop.i 0 -};; -{ .mfb - nop.m 0 - fms.s.s0 f8 = FR_Ln,f1,FR_Lnf - br.ret.sptk b0 -};; -// branch for handling +/-0, NaT, QNaN, +/-INF and denormalised numbers -//--------------------------------------------------------------------- -.align 32 -lgammaf_spec: -{ .mfi - getf.exp GR_SignExp = FR_NormX - fclass.m p6,p0 = f8,0x21 // is arg +INF? - mov GR_SignOfGamma = 1 // set signgam to 1 -};; -{ .mfi - getf.sig GR_Sig = FR_NormX - fclass.m p7,p0 = f8,0xB // is x deno? - // set p11 if signgum is 32-bit int - // set p12 if signgum is 64-bit int - cmp.eq p12,p11 = 8,r34 -};; -.pred.rel "mutex",p11,p12 -{ .mfi - // store sign of gamma(x) as 32-bit int -(p11) st4 [r33] = GR_SignOfGamma - fclass.m p8,p0 = f8,0x1C0 // is arg NaT or NaN? - dep.z GR_Ind = GR_SignExp,3,4 -} -{ .mib - // store sign of gamma(x) as 64-bit int -(p12) st8 [r33] = GR_SignOfGamma - and GR_Exp = GR_ExpMask,GR_SignExp -(p6) br.ret.spnt b0 // exit for +INF -};; -{ .mfi - sub GR_PureExp = GR_Exp,GR_ExpBias - fclass.m p9,p0 = f8,0x22 // is arg -INF? - extr.u GR_Ind4T = GR_Sig,55,8 -} -{ .mfb - nop.m 0 -(p7) fma.s0 FR_tmp = f1,f1,f8 -(p7) br.cond.sptk lgammaf_core -};; -{ .mfb - nop.m 0 -(p8) fms.s.s0 f8 = f8,f1,f8 -(p8) br.ret.spnt b0 // exit for NaT and NaN -};; -{ .mfb - nop.m 0 -(p9) fmerge.s f8 = f1,f8 -(p9) br.ret.spnt b0 // exit -INF -};; -// branch for handling negative integers and +/-0 -//--------------------------------------------------------------------- -.align 32 -lgammaf_singularity: -{ .mfi - mov GR_SignOfGamma = 1 // set signgam to 1 - fclass.m p6,p0 = f8,0x6 // is x -0? - mov GR_TAG = 109 // negative -} -{ .mfi - mov GR_ad_SignGam = r33 - fma.s1 FR_X = f0,f0,f8 - nop.i 0 -};; -{ .mfi - nop.m 0 - frcpa.s0 f8,p0 = f1,f0 - // set p9 if signgum is 32-bit int - // set p10 if signgum is 64-bit int - cmp.eq p10,p9 = 8,r34 -} -{ .mib - nop.m 0 -(p6) sub GR_SignOfGamma = r0,GR_SignOfGamma - br.cond.sptk lgammaf_libm_err -};; -// overflow (x > OVERFLOV_BOUNDARY) -//--------------------------------------------------------------------- -.align 32 -lgammaf_overflow: -{ .mfi - nop.m 0 - nop.f 0 - mov r8 = 0x1FFFE -};; -{ .mfi - setf.exp f9 = r8 - fmerge.s FR_X = f8,f8 - mov GR_TAG = 108 // overflow -};; -{ .mfi - mov GR_ad_SignGam = r33 - nop.f 0 - // set p9 if signgum is 32-bit int - // set p10 if signgum is 64-bit int - cmp.eq p10,p9 = 8,r34 -} -{ .mfi - nop.m 0 - fma.s.s0 f8 = f9,f9,f0 // Set I,O and +INF result - nop.i 0 -};; -// gate to __libm_error_support# -//--------------------------------------------------------------------- -.align 32 -lgammaf_libm_err: -{ .mmi - alloc r32 = ar.pfs,1,4,4,0 - mov GR_Parameter_TAG = GR_TAG - nop.i 0 -};; -.pred.rel "mutex",p9,p10 -{ .mmi - // store sign of gamma(x) as 32-bit int -(p9) st4 [GR_ad_SignGam] = GR_SignOfGamma - // store sign of gamma(x) as 64-bit int -(p10) st8 [GR_ad_SignGam] = GR_SignOfGamma - nop.i 0 -};; -GLOBAL_LIBM_END(__libm_lgammaf) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfs [GR_Parameter_X] = FR_X // STORE Parameter 1 - // on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 - // on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling - // function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/libm_lgammal.S b/sysdeps/ia64/fpu/libm_lgammal.S deleted file mode 100644 index 185433ab8d..0000000000 --- a/sysdeps/ia64/fpu/libm_lgammal.S +++ /dev/null @@ -1,7678 +0,0 @@ -.file "libm_lgammal.s" - - -// Copyright (c) 2002 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2002 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,INCLUDING,BUT NOT -// LIMITED TO,THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT,INDIRECT,INCIDENTAL,SPECIAL, -// EXEMPLARY,OR CONSEQUENTIAL DAMAGES (INCLUDING,BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,DATA,OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY,WHETHER IN CONTRACT,STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE,EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code,and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 03/28/02 Original version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 08/21/02 Added support of SIGN(GAMMA(x)) calculation -// 09/26/02 Algorithm description improved -// 10/21/02 Now it returns SIGN(GAMMA(x))=-1 for negative zero -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 03/31/05 Reformatted delimiters between data tables -// -//********************************************************************* -// -// Function: __libm_lgammal(long double x, int* signgam, int szsigngam) -// computes the principal value of the logarithm of the GAMMA function -// of x. Signum of GAMMA(x) is stored to memory starting at the address -// specified by the signgam. -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f9-f15 -// f32-f127 -// -// General Purpose Registers: -// r2, r3, r8-r11, r14-r31 -// r32-r65 -// r66-r69 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6-p15 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// __libm_lgammal(+inf) = +inf -// __libm_lgammal(-inf) = QNaN -// __libm_lgammal(+/-0) = +inf -// __libm_lgammal(x<0, x - integer) = QNaN -// __libm_lgammal(SNaN) = QNaN -// __libm_lgammal(QNaN) = QNaN -// -//********************************************************************* -// -// ALGORITHM DESCRIPTION -// -// Below we suppose that there is log(z) function which takes an long -// double argument and returns result as a pair of long double numbers -// lnHi and lnLo (such that sum lnHi + lnLo provides ~80 correct bits -// of significand). Algorithm description for such log(z) function -// see below. -// Also, it this algorithm description we use the following notational -// conventions: -// a) pair A = (Ahi, Alo) means number A represented as sum of Ahi and Alo -// b) C = A + B = (Ahi, Alo) + (Bhi, Blo) means multi-precision addition. -// The result would be C = (Chi, Clo). Notice, that Clo shouldn't be -// equal to Alo + Blo -// c) D = A*B = (Ahi, Alo)*(Bhi, Blo) = (Dhi, Dlo) multi-precisiion -// multiplication. -// -// So, lgammal has the following computational paths: -// 1) |x| < 0.5 -// P = A1*|x| + A2*|x|^2 + ... + A22*|x|^22 -// A1, A2, A3 represented as a sum of two double precision -// numbers and multi-precision computations are used for 3 higher -// terms of the polynomial. We get polynomial as a sum of two -// double extended numbers: P = (Phi, Plo) -// 1.1) x > 0 -// lgammal(x) = P - log(|x|) = (Phi, Plo) - (lnHi(|x|), lnLo(|x|)) -// 1.2) x < 0 -// lgammal(x) = -P - log(|x|) - log(sin(Pi*x)/(Pi*x)) -// P and log(|x|) are computed by the same way as in 1.1; -// - log(sin(Pi*x)/(Pi*x)) is approximated by a polynomial Plnsin. -// Plnsin:= fLnSin2*|x|^2 + fLnSin4*|x|^4 + ... + fLnSin36*|x|^36 -// The first coefficient of Plnsin is represented as sum of two -// double precision numbers (fLnSin2, fLnSin2L). Multi-precision -// computations for higher two terms of Plnsin are used. -// So, the final result is reconstructed by the following formula -// lgammal(x) = (-(Phi, Plo) - (lnHi(|x|), lnLo(|x|))) - -// - (PlnsinHi,PlnsinLo) -// -// 2) 0.5 <= x < 0.75 -> t = x - 0.625 -// -0.75 < x <= -0.5 -> t = x + 0.625 -// 2.25 <= x < 4.0 -> t = x/2 - 1.5 -// 4.0 <= x < 8.0 -> t = x/4 - 1.5 -// -0.5 < x <= -0.40625 -> t = x + 0.5 -// -2.6005859375 < x <= -2.5 -> t = x + 2.5 -// 1.3125 <= x < 1.5625 -> t = x - LOC_MIN, where LOC_MIN is point in -// which lgammal has local minimum. Exact -// value can be found in the table below, -// approximate value is ~1.46 -// -// lgammal(x) is approximated by the polynomial of 25th degree: P25(t) -// P25(t) = A0 + A1*t + ... + A25*t^25 = (Phi, Plo) + t^4*P21(t), -// where -// (Phi, Plo) is sum of four highest terms of the polynomial P25(t): -// (Phi, Plo) = ((A0, A0L) + (A1, A1L)*t) + t^2 *((A2, A2L) + (A3, A3L)*t), -// (Ai, AiL) - coefficients represented as pairs of DP numbers. -// -// P21(t) = (PolC(t)*t^8 + PolD(t))*t^8 + PolE(t), -// where -// PolC(t) = C21*t^5 + C20*t^4 + ... + C16, -// C21 = A25, C20 = A24, ..., C16 = A20 -// -// PolD(t) = D7*t^7 + D6*t^6 + ... + D0, -// D7 = A19, D6 = A18, ..., D0 = A12 -// -// PolE(t) = E7*t^7 + E6*t^6 + ... + E0, -// E7 = A11, E6 = A10, ..., E0 = A4 -// -// Cis and Dis are represented as double precision numbers, -// Eis are represented as double extended numbers. -// -// 3) 0.75 <= x < 1.3125 -> t = x - 1.0 -// 1.5625 <= x < 2.25 -> t = x - 2.0 -// lgammal(x) is approximated by the polynomial of 25th degree: P25(t) -// P25(t) = A1*t + ... + A25*t^25, and computations are carried out -// by similar way as in the previous case -// -// 4) 10.0 < x <= Overflow Bound ("positive Sterling" range) -// lgammal(x) is approximated using Sterling's formula: -// lgammal(x) ~ ((x*(lnHi(x) - 1, lnLo(x))) - 0.5*(lnHi(x), lnLo(x))) + -// + ((Chi, Clo) + S(1/x)) -// where -// C = (Chi, Clo) - pair of double precision numbers representing constant -// 0.5*ln(2*Pi); -// S(1/x) = 1/x * (B2 + B4*(1/x)^2 + ... + B20*(1/x)^18), B2, ..., B20 are -// Bernulli numbers. S is computed in native precision and then added to -// Clo; -// lnHi(x) - 1 is computed in native precision and the multiprecision -// multiplication (x, 0) *(lnHi(x) - 1, lnLo(x)) is used. -// -// 5) -INF < x <= -2^63, any negative integer < 0 -// All numbers in this range are integers -> error handler is called -// -// 6) -2^63 < x <= -0.75 ("negative Sterling" range), x is "far" from root, -// lgammal(-t) for positive t is approximated using the following formula: -// lgammal(-t) = -lgammal(t)-log(t)-log(|dT|)+log(sin(Pi*|dT|)/(Pi*|dT|)) -// where dT = -t -round_to_nearest_integer(-t) -// Last item is approximated by the same polynomial as described in 1.2. -// We split the whole range into three subranges due to different ways of -// approximation of the first terms. -// 6.1) -2^63 < x < -6.0 ("negative Sterling" range) -// lgammal(t) is approximated exactly as in #4. The only difference that -// for -13.0 < x < -6.0 subrange instead of Bernulli numbers we use their -// minimax approximation on this range. -// log(t), log(|dT|) are approximated by the log routine mentioned above. -// 6.2) -6.0 < x <= -0.75, |x + 1|> 2^(-7) -// log(t), log(|dT|) are approximated by the log routine mentioned above, -// lgammal(t) is approximated by polynomials of the 25th degree similar -// to ones from #2. Arguments z of the polynomials are as follows -// a) 0.75 <= t < 1.0 - 2^(-7), z = 2*t - 1.5 -// b) 1.0 - 2^(-7) < t < 2.0, z = t - 1.5 -// c) 2.0 < t < 3.0, z = t/2 - 1.5 -// d) 3.0 < t < 4.0, z = t/2 - 1.5. Notice, that range reduction is -// the same as in case c) but the set of coefficients is different -// e) 4.0 < t < 6.0, z = t/4 - 1.5 -// 6.3) |x + 1| <= 2^(-7) -// log(1 + (x-1)) is approximated by Taylor series, -// log(sin(Pi*|dT|)/(Pi*|dT|)) is still approximated by polynomial but -// it has just 4th degree. -// log(|dT|) is approximated by the log routine mentioned above. -// lgammal(-x) is approximated by polynomial of 8th degree from (-x + 1). -// -// 7) -20.0 < x < -2.0, x falls in root "neighbourhood". -// "Neighbourhood" means that |lgammal(x)| < epsilon, where epsilon is -// different for every root (and it is stored in the table), but typically -// it is ~ 0.15. There are 35 roots significant from "double extended" -// point of view. We split all the roots into two subsets: "left" and "right" -// roots. Considering [-(N+1), -N] range we call root as "left" one if it -// lies closer to -(N+1) and "right" otherwise. There is no "left" root in -// the [-20, -19] range (it exists, but is insignificant for double extended -// precision). To determine if x falls in root "neighbourhood" we store -// significands of all the 35 roots as well as epsilon values (expressed -// by the left and right bound). -// In these ranges we approximate lgammal(x) by polynomial series of 19th -// degree: -// lgammal(x) = P19(t) = A0 + A1*t + ...+ A19*t^19, where t = x - EDP_Root, -// EDP_Root is the exact value of the corresponding root rounded to double -// extended precision. So, we have 35 different polynomials which make our -// table rather big. We may hope that x falls in root "neighbourhood" -// quite rarely -> ther might be no need in frequent use of different -// polynomials. -// A0, A1, A2, A3 are represented as pairs of double precision numbers, -// A4, A5 are long doubles, and to decrease the size of the table we -// keep the rest of coefficients in just double precision -// -//********************************************************************* -// Algorithm for log(X) = (lnHi(X), lnLo(X)) -// -// ALGORITHM -// -// Here we use a table lookup method. The basic idea is that in -// order to compute logl(Arg) for an argument Arg in [1,2), we -// construct a value G such that G*Arg is close to 1 and that -// logl(1/G) is obtainable easily from a table of values calculated -// beforehand. Thus -// -// logl(Arg) = logl(1/G) + logl(G*Arg) -// = logl(1/G) + logl(1 + (G*Arg - 1)) -// -// Because |G*Arg - 1| is small, the second term on the right hand -// side can be approximated by a short polynomial. We elaborate -// this method in four steps. -// -// Step 0: Initialization -// -// We need to calculate logl( X ). Obtain N, S_hi such that -// -// X = 2^N * S_hi exactly -// -// where S_hi in [1,2) -// -// Step 1: Argument Reduction -// -// Based on S_hi, obtain G_1, G_2, G_3 from a table and calculate -// -// G := G_1 * G_2 * G_3 -// r := (G * S_hi - 1) -// -// These G_j's have the property that the product is exactly -// representable and that |r| < 2^(-12) as a result. -// -// Step 2: Approximation -// -// -// logl(1 + r) is approximated by a short polynomial poly(r). -// -// Step 3: Reconstruction -// -// -// Finally, logl( X ) is given by -// -// logl( X ) = logl( 2^N * S_hi ) -// ~=~ N*logl(2) + logl(1/G) + logl(1 + r) -// ~=~ N*logl(2) + logl(1/G) + poly(r). -// -// IMPLEMENTATION -// -// Step 0. Initialization -// ---------------------- -// -// Z := X -// N := unbaised exponent of Z -// S_hi := 2^(-N) * Z -// -// Step 1. Argument Reduction -// -------------------------- -// -// Let -// -// Z = 2^N * S_hi = 2^N * 1.d_1 d_2 d_3 ... d_63 -// -// We obtain G_1, G_2, G_3 by the following steps. -// -// -// Define X_0 := 1.d_1 d_2 ... d_14. This is extracted -// from S_hi. -// -// Define A_1 := 1.d_1 d_2 d_3 d_4. This is X_0 truncated -// to lsb = 2^(-4). -// -// Define index_1 := [ d_1 d_2 d_3 d_4 ]. -// -// Fetch Z_1 := (1/A_1) rounded UP in fixed point with -// fixed point lsb = 2^(-15). -// Z_1 looks like z_0.z_1 z_2 ... z_15 -// Note that the fetching is done using index_1. -// A_1 is actually not needed in the implementation -// and is used here only to explain how is the value -// Z_1 defined. -// -// Fetch G_1 := (1/A_1) truncated to 21 sig. bits. -// floating pt. Again, fetching is done using index_1. A_1 -// explains how G_1 is defined. -// -// Calculate X_1 := X_0 * Z_1 truncated to lsb = 2^(-14) -// = 1.0 0 0 0 d_5 ... d_14 -// This is accomplished by integer multiplication. -// It is proved that X_1 indeed always begin -// with 1.0000 in fixed point. -// -// -// Define A_2 := 1.0 0 0 0 d_5 d_6 d_7 d_8. This is X_1 -// truncated to lsb = 2^(-8). Similar to A_1, -// A_2 is not needed in actual implementation. It -// helps explain how some of the values are defined. -// -// Define index_2 := [ d_5 d_6 d_7 d_8 ]. -// -// Fetch Z_2 := (1/A_2) rounded UP in fixed point with -// fixed point lsb = 2^(-15). Fetch done using index_2. -// Z_2 looks like z_0.z_1 z_2 ... z_15 -// -// Fetch G_2 := (1/A_2) truncated to 21 sig. bits. -// floating pt. -// -// Calculate X_2 := X_1 * Z_2 truncated to lsb = 2^(-14) -// = 1.0 0 0 0 0 0 0 0 d_9 d_10 ... d_14 -// This is accomplished by integer multiplication. -// It is proved that X_2 indeed always begin -// with 1.00000000 in fixed point. -// -// -// Define A_3 := 1.0 0 0 0 0 0 0 0 d_9 d_10 d_11 d_12 d_13 1. -// This is 2^(-14) + X_2 truncated to lsb = 2^(-13). -// -// Define index_3 := [ d_9 d_10 d_11 d_12 d_13 ]. -// -// Fetch G_3 := (1/A_3) truncated to 21 sig. bits. -// floating pt. Fetch is done using index_3. -// -// Compute G := G_1 * G_2 * G_3. -// -// This is done exactly since each of G_j only has 21 sig. bits. -// -// Compute -// -// r := (G*S_hi - 1) -// -// -// Step 2. Approximation -// --------------------- -// -// This step computes an approximation to logl( 1 + r ) where r is the -// reduced argument just obtained. It is proved that |r| <= 1.9*2^(-13); -// thus logl(1+r) can be approximated by a short polynomial: -// -// logl(1+r) ~=~ poly = r + Q1 r^2 + ... + Q4 r^5 -// -// -// Step 3. Reconstruction -// ---------------------- -// -// This step computes the desired result of logl(X): -// -// logl(X) = logl( 2^N * S_hi ) -// = N*logl(2) + logl( S_hi ) -// = N*logl(2) + logl(1/G) + -// logl(1 + G*S_hi - 1 ) -// -// logl(2), logl(1/G_j) are stored as pairs of (single,double) numbers: -// log2_hi, log2_lo, log1byGj_hi, log1byGj_lo. The high parts are -// single-precision numbers and the low parts are double precision -// numbers. These have the property that -// -// N*log2_hi + SUM ( log1byGj_hi ) -// -// is computable exactly in double-extended precision (64 sig. bits). -// Finally -// -// lnHi(X) := N*log2_hi + SUM ( log1byGj_hi ) -// lnLo(X) := poly_hi + [ poly_lo + -// ( SUM ( log1byGj_lo ) + N*log2_lo ) ] -// -// -//********************************************************************* -// General Purpose Registers -// scratch registers -rPolDataPtr = r2 -rLnSinDataPtr = r3 -rExpX = r8 -rSignifX = r9 -rDelta = r10 -rSignExpX = r11 -GR_ad_z_1 = r14 -r17Ones = r15 -GR_Index1 = r16 -rSignif1andQ = r17 -GR_X_0 = r18 -GR_X_1 = r19 -GR_X_2 = r20 -GR_Z_1 = r21 -GR_Z_2 = r22 -GR_N = r23 -rExpHalf = r24 -rExp8 = r25 -rX0Dx = r25 -GR_ad_tbl_1 = r26 -GR_ad_tbl_2 = r27 -GR_ad_tbl_3 = r28 -GR_ad_q = r29 -GR_ad_z_1 = r30 -GR_ad_z_2 = r31 -// stacked registers -rPFS_SAVED = r32 -GR_ad_z_3 = r33 -rSgnGamAddr = r34 -rSgnGamSize = r35 -rLogDataPtr = r36 -rZ1offsett = r37 -rTmpPtr = r38 -rTmpPtr2 = r39 -rTmpPtr3 = r40 -rExp2 = r41 -rExp2tom7 = r42 -rZ625 = r42 -rExpOne = r43 -rNegSingularity = r44 -rXint = r45 -rTbl1Addr = r46 -rTbl2Addr = r47 -rTbl3Addr = r48 -rZ2Addr = r49 -rRootsAddr = r50 -rRootsBndAddr = r51 -rRoot = r52 -rRightBound = r53 -rLeftBound = r54 -rSignifDx = r55 -rBernulliPtr = r56 -rLnSinTmpPtr = r56 -rIndex1Dx = r57 -rIndexPol = r58 -GR_Index3 = r59 -GR_Index2 = r60 -rSgnGam = r61 -rXRnd = r62 - -GR_SAVE_B0 = r63 -GR_SAVE_GP = r64 -GR_SAVE_PFS = r65 -// output parameters when calling error handling routine -GR_Parameter_X = r66 -GR_Parameter_Y = r67 -GR_Parameter_RESULT = r68 -GR_Parameter_TAG = r69 - -//******************************************************************** -// Floating Point Registers -// CAUTION: due to the lack of registers there exist (below in the code) -// sometimes "unconventional" use of declared registers -// -fAbsX = f6 -fDelX4 = f6 -fSignifX = f7 -// macros for error handling routine -FR_X = f10 // first argument -FR_Y = f1 // second argument (lgammal has just one) -FR_RESULT = f8 // result - -// First 7 Bernulli numbers -fB2 = f9 -fLnDeltaL = f9 -fXSqr = f9 -fB4 = f10 -fX4 = f10 -fB6 = f11 -fX6 = f11 -fB8 = f12 -fXSqrL = f12 -fB10 = f13 -fRes7H = f13 -fB12 = f14 -fRes7L = f14 -fB14 = f15 - -// stack registers -// Polynomial coefficients: A0, ..., A25 -fA0 = f32 -fA0L = f33 -fInvXL = f33 -fA1 = f34 -fA1L = f35 -fA2 = f36 -fA2L = f37 -fA3 = f38 -fA3L = f39 -fA4 = f40 -fA4L = f41 -fRes6H = f41 -fA5 = f42 -fB2L = f42 -fA5L = f43 -fMinNegStir = f43 -fRes6L = f43 -fA6 = f44 -fMaxNegStir = f44 -fA7 = f45 -fLnDeltaH = f45 -fA8 = f46 -fBrnL = f46 -fA9 = f47 -fBrnH = f47 -fA10 = f48 -fRes5L = f48 -fA11 = f49 -fRes5H = f49 -fA12 = f50 -fDx6 = f50 -fA13 = f51 -fDx8 = f51 -fA14 = f52 -fDx4 = f52 -fA15 = f53 -fYL = f53 -fh3Dx = f53 -fA16 = f54 -fYH = f54 -fH3Dx = f54 -fA17 = f55 -fResLnDxL = f55 -fG3Dx = f55 -fA18 = f56 -fResLnDxH = f56 -fh2Dx = f56 -fA19 = f57 -fFloatNDx = f57 -fA20 = f58 -fPolyHiDx = f58 -fhDx = f58 -fA21 = f59 -fRDxCub = f59 -fHDx = f59 -fA22 = f60 -fRDxSq = f60 -fGDx = f60 -fA23 = f61 -fPolyLoDx = f61 -fInvX3 = f61 -fA24 = f62 -fRDx = f62 -fInvX8 = f62 -fA25 = f63 -fInvX4 = f63 -fPol = f64 -fPolL = f65 -// Coefficients of ln(sin(Pi*x)/Pi*x) -fLnSin2 = f66 -fLnSin2L = f67 -fLnSin4 = f68 -fLnSin6 = f69 -fLnSin8 = f70 -fLnSin10 = f71 -fLnSin12 = f72 -fLnSin14 = f73 -fLnSin16 = f74 -fLnSin18 = f75 -fDelX8 = f75 -fLnSin20 = f76 -fLnSin22 = f77 -fDelX6 = f77 -fLnSin24 = f78 -fLnSin26 = f79 -fLnSin28 = f80 -fLnSin30 = f81 -fhDelX = f81 -fLnSin32 = f82 -fLnSin34 = f83 -fLnSin36 = f84 -fXint = f85 -fDxSqr = f85 -fRes3L = f86 -fRes3H = f87 -fRes4H = f88 -fRes4L = f89 -fResH = f90 -fResL = f91 -fDx = f92 -FR_MHalf = f93 -fRes1H = f94 -fRes1L = f95 -fRes2H = f96 -fRes2L = f97 -FR_FracX = f98 -fRcpX = f99 -fLnSinH = f99 -fTwo = f100 -fMOne = f100 -FR_G = f101 -FR_H = f102 -FR_h = f103 -FR_G2 = f104 -FR_H2 = f105 -FR_poly_lo = f106 -FR_poly_hi = f107 -FR_h2 = f108 -FR_rsq = f109 -FR_r = f110 -FR_log2_hi = f111 -FR_log2_lo = f112 -fFloatN = f113 -FR_Q4 = f114 -FR_G3 = f115 -FR_H3 = f116 -FR_h3 = f117 -FR_Q3 = f118 -FR_Q2 = f119 -FR_Q1 = f120 -fThirteen = f121 -fSix = f121 -FR_rcub = f121 -// Last three Bernulli numbers -fB16 = f122 -fB18 = f123 -fB20 = f124 -fInvX = f125 -fLnSinL = f125 -fDxSqrL = f126 -fFltIntX = f126 -fRoot = f127 -fNormDx = f127 - -// Data tables -//============================================================== -RODATA -// ************* DO NOT CHANGE THE ORDER OF THESE TABLES ************* -.align 16 -LOCAL_OBJECT_START(lgammal_right_roots_data) -// List of all right roots themselves -data8 0x9D3FE4B007C360AB, 0x0000C000 // Range [-3, -2] -data8 0xC9306DE4F2CD7BEE, 0x0000C000 // Range [-4, -3] -data8 0x814273C2CCAC0618, 0x0000C001 // Range [-5, -4] -data8 0xA04352BF85B6C865, 0x0000C001 // Range [-6, -5] -data8 0xC00B592C4BE4676C, 0x0000C001 // Range [-7, -6] -data8 0xE0019FEF6FF0F5BF, 0x0000C001 // Range [-8, -7] -data8 0x80001A01459FC9F6, 0x0000C002 // Range [-9, -8] -data8 0x900002E3BB47D86D, 0x0000C002 // Range [-10, -9] -data8 0xA0000049F93BB992, 0x0000C002 // Range [-11, -10] -data8 0xB0000006B9915316, 0x0000C002 // Range [-12, -11] -data8 0xC00000008F76C773, 0x0000C002 // Range [-13, -12] -data8 0xD00000000B09230A, 0x0000C002 // Range [-14, -13] -data8 0xE000000000C9CBA5, 0x0000C002 // Range [-15, -14] -data8 0xF0000000000D73FA, 0x0000C002 // Range [-16, -15] -data8 0x8000000000006BA0, 0x0000C003 // Range [-17, -16] -data8 0x8800000000000655, 0x0000C003 // Range [-18, -17] -data8 0x900000000000005A, 0x0000C003 // Range [-19, -18] -data8 0x9800000000000005, 0x0000C003 // Range [-20, -19] -// List of bounds of ranges with special polynomial approximation near root -// Only significands of bounds are actually stored -data8 0xA000000000000000, 0x9800000000000000 // Bounds for root on [-3, -2] -data8 0xCAB88035C5EFBB41, 0xC7E05E31F4B02115 // Bounds for root on [-4, -3] -data8 0x817831B899735C72, 0x8114633941B8053A // Bounds for root on [-5, -4] -data8 0xA04E8B34C6AA9476, 0xA039B4A42978197B // Bounds for root on [-6, -5] -data8 0xC00D3D5E588A78A9, 0xC009BA25F7E858A6 // Bounds for root on [-7, -6] -data8 0xE001E54202991EB4, 0xE001648416CE897F // Bounds for root on [-8, -7] -data8 0x80001E56D13A6B9F, 0x8000164A3BAD888A // Bounds for root on [-9, -8] -data8 0x9000035F0529272A, 0x9000027A0E3D94F0 // Bounds for root on [-10, -9] -data8 0xA00000564D705880, 0xA000003F67EA0CC7 // Bounds for root on [-11, -10] -data8 0xB0000007D87EE0EF, 0xB0000005C3A122A5 // Bounds for root on [-12, -11] -data8 0xC0000000A75FE8B1, 0xC00000007AF818AC // Bounds for root on [-13, -12] -data8 0xD00000000CDFFE36, 0xD000000009758BBF // Bounds for root on [-14, -13] -data8 0xE000000000EB6D96, 0xE000000000ACF7B2 // Bounds for root on [-15, -14] -data8 0xF0000000000FB1F9, 0xF0000000000B87FB // Bounds for root on [-16, -15] -data8 0x8000000000007D90, 0x8000000000005C40 // Bounds for root on [-17, -16] -data8 0x8800000000000763, 0x880000000000056D // Bounds for root on [-18, -17] -data8 0x9000000000000069, 0x900000000000004D // Bounds for root on [-19, -18] -data8 0x9800000000000006, 0x9800000000000005 // Bounds for root on [-20, -19] -// List of all left roots themselves -data8 0xAFDA0850DEC8065E, 0x0000C000 // Range [-3, -2] -data8 0xFD238AA3E17F285C, 0x0000C000 // Range [-4, -3] -data8 0x9FBABBD37757E6A2, 0x0000C001 // Range [-5, -4] -data8 0xBFF497AC8FA06AFC, 0x0000C001 // Range [-6, -5] -data8 0xDFFE5FBB5C377FE8, 0x0000C001 // Range [-7, -6] -data8 0xFFFFCBFC0ACE7879, 0x0000C001 // Range [-8, -7] -data8 0x8FFFFD1C425E8100, 0x0000C002 // Range [-9, -8] -data8 0x9FFFFFB606BDFDCD, 0x0000C002 // Range [-10, -9] -data8 0xAFFFFFF9466E9F1B, 0x0000C002 // Range [-11, -10] -data8 0xBFFFFFFF70893874, 0x0000C002 // Range [-12, -11] -data8 0xCFFFFFFFF4F6DCF6, 0x0000C002 // Range [-13, -12] -data8 0xDFFFFFFFFF36345B, 0x0000C002 // Range [-14, -13] -data8 0xEFFFFFFFFFF28C06, 0x0000C002 // Range [-15, -14] -data8 0xFFFFFFFFFFFF28C0, 0x0000C002 // Range [-16, -15] -data8 0x87FFFFFFFFFFF9AB, 0x0000C003 // Range [-17, -16] -data8 0x8FFFFFFFFFFFFFA6, 0x0000C003 // Range [-18, -17] -data8 0x97FFFFFFFFFFFFFB, 0x0000C003 // Range [-19, -18] -data8 0x0000000000000000, 0x00000000 // pad to keep logic in the main path -// List of bounds of ranges with special polynomial approximation near root -// Only significands of bounds are actually stored -data8 0xB235880944CC758E, 0xADD2F1A9FBE76C8B // Bounds for root on [-3, -2] -data8 0xFD8E7844F307B07C, 0xFCA655C2152BDE4D // Bounds for root on [-4, -3] -data8 0x9FC4D876EE546967, 0x9FAEE4AF68BC4292 // Bounds for root on [-5, -4] -data8 0xBFF641FFBFCC44F1, 0xBFF2A47919F4BA89 // Bounds for root on [-6, -5] -data8 0xDFFE9C803DEFDD59, 0xDFFE18932EB723FE // Bounds for root on [-7, -6] -data8 0xFFFFD393FA47AFC3, 0xFFFFC317CF638AE1 // Bounds for root on [-8, -7] -data8 0x8FFFFD8840279925, 0x8FFFFC9DCECEEE92 // Bounds for root on [-9, -8] -data8 0x9FFFFFC0D34E2AF8, 0x9FFFFFA9619AA3B7 // Bounds for root on [-10, -9] -data8 0xAFFFFFFA41C18246, 0xAFFFFFF82025A23C // Bounds for root on [-11, -10] -data8 0xBFFFFFFF857ACB4E, 0xBFFFFFFF58032378 // Bounds for root on [-12, -11] -data8 0xCFFFFFFFF6934AB8, 0xCFFFFFFFF313EF0A // Bounds for root on [-13, -12] -data8 0xDFFFFFFFFF53A9E9, 0xDFFFFFFFFF13B5A5 // Bounds for root on [-14, -13] -data8 0xEFFFFFFFFFF482CB, 0xEFFFFFFFFFF03F4F // Bounds for root on [-15, -14] -data8 0xFFFFFFFFFFFF482D, 0xFFFFFFFFFFFF03F5 // Bounds for root on [-16, -15] -data8 0x87FFFFFFFFFFFA98, 0x87FFFFFFFFFFF896 // Bounds for root on [-17, -16] -data8 0x8FFFFFFFFFFFFFB3, 0x8FFFFFFFFFFFFF97 // Bounds for root on [-18, -17] -data8 0x97FFFFFFFFFFFFFC, 0x97FFFFFFFFFFFFFB // Bounds for root on [-19, -18] -LOCAL_OBJECT_END(lgammal_right_roots_data) - -LOCAL_OBJECT_START(lgammal_0_Half_data) -// Polynomial coefficients for the lgammal(x), 0.0 < |x| < 0.5 -data8 0xBFD9A4D55BEAB2D6, 0xBC8AA3C097746D1F //A3 -data8 0x3FEA51A6625307D3, 0x3C7180E7BD2D0DCC //A2 -data8 0xBFE2788CFC6FB618, 0xBC9E9346C4692BCC //A1 -data8 0x8A8991563EC1BD13, 0x00003FFD //A4 -data8 0xD45CE0BD52C27EF2, 0x0000BFFC //A5 -data8 0xADA06587FA2BBD47, 0x00003FFC //A6 -data8 0x9381D0ED2194902A, 0x0000BFFC //A7 -data8 0x80859B3CF92D4192, 0x00003FFC //A8 -data8 0xE4033517C622A946, 0x0000BFFB //A9 -data8 0xCD00CE67A51FC82A, 0x00003FFB //A10 -data8 0xBA44E2A96C3B5700, 0x0000BFFB //A11 -data8 0xAAAD008FA46DBD99, 0x00003FFB //A12 -data8 0x9D604AC65A41153D, 0x0000BFFB //A13 -data8 0x917CECB864B5A861, 0x00003FFB //A14 -data8 0x85A4810EB730FDE4, 0x0000BFFB //A15 -data8 0xEF2761C38BD21F77, 0x00003FFA //A16 -data8 0xC913043A128367DA, 0x0000BFFA //A17 -data8 0x96A29B71FF7AFFAA, 0x00003FFA //A18 -data8 0xBB9FFA1A5FE649BB, 0x0000BFF9 //A19 -data8 0xB17982CD2DAA0EE3, 0x00003FF8 //A20 -data8 0xDE1DDCBFFB9453F0, 0x0000BFF6 //A21 -data8 0x87FBF5D7ACD9FA9D, 0x00003FF4 //A22 -LOCAL_OBJECT_END(lgammal_0_Half_data) - -LOCAL_OBJECT_START(Constants_Q) -// log2_hi, log2_lo, Q_4, Q_3, Q_2, and Q_1 -data4 0x00000000,0xB1721800,0x00003FFE,0x00000000 -data4 0x4361C4C6,0x82E30865,0x0000BFE2,0x00000000 -data4 0x328833CB,0xCCCCCAF2,0x00003FFC,0x00000000 -data4 0xA9D4BAFB,0x80000077,0x0000BFFD,0x00000000 -data4 0xAAABE3D2,0xAAAAAAAA,0x00003FFD,0x00000000 -data4 0xFFFFDAB7,0xFFFFFFFF,0x0000BFFD,0x00000000 -LOCAL_OBJECT_END(Constants_Q) - -LOCAL_OBJECT_START(Constants_Z_1) -// Z1 - 16 bit fixed -data4 0x00008000 -data4 0x00007879 -data4 0x000071C8 -data4 0x00006BCB -data4 0x00006667 -data4 0x00006187 -data4 0x00005D18 -data4 0x0000590C -data4 0x00005556 -data4 0x000051EC -data4 0x00004EC5 -data4 0x00004BDB -data4 0x00004925 -data4 0x0000469F -data4 0x00004445 -data4 0x00004211 -LOCAL_OBJECT_END(Constants_Z_1) - -LOCAL_OBJECT_START(Constants_G_H_h1) -// G1 and H1 - IEEE single and h1 - IEEE double -data4 0x3F800000,0x00000000,0x00000000,0x00000000 -data4 0x3F70F0F0,0x3D785196,0x617D741C,0x3DA163A6 -data4 0x3F638E38,0x3DF13843,0xCBD3D5BB,0x3E2C55E6 -data4 0x3F579430,0x3E2FF9A0,0xD86EA5E7,0xBE3EB0BF -data4 0x3F4CCCC8,0x3E647FD6,0x86B12760,0x3E2E6A8C -data4 0x3F430C30,0x3E8B3AE7,0x5C0739BA,0x3E47574C -data4 0x3F3A2E88,0x3EA30C68,0x13E8AF2F,0x3E20E30F -data4 0x3F321640,0x3EB9CEC8,0xF2C630BD,0xBE42885B -data4 0x3F2AAAA8,0x3ECF9927,0x97E577C6,0x3E497F34 -data4 0x3F23D708,0x3EE47FC5,0xA6B0A5AB,0x3E3E6A6E -data4 0x3F1D89D8,0x3EF8947D,0xD328D9BE,0xBDF43E3C -data4 0x3F17B420,0x3F05F3A1,0x0ADB090A,0x3E4094C3 -data4 0x3F124920,0x3F0F4303,0xFC1FE510,0xBE28FBB2 -data4 0x3F0D3DC8,0x3F183EBF,0x10FDE3FA,0x3E3A7895 -data4 0x3F088888,0x3F20EC80,0x7CC8C98F,0x3E508CE5 -data4 0x3F042108,0x3F29516A,0xA223106C,0xBE534874 -LOCAL_OBJECT_END(Constants_G_H_h1) - -LOCAL_OBJECT_START(Constants_Z_2) -// Z2 - 16 bit fixed -data4 0x00008000 -data4 0x00007F81 -data4 0x00007F02 -data4 0x00007E85 -data4 0x00007E08 -data4 0x00007D8D -data4 0x00007D12 -data4 0x00007C98 -data4 0x00007C20 -data4 0x00007BA8 -data4 0x00007B31 -data4 0x00007ABB -data4 0x00007A45 -data4 0x000079D1 -data4 0x0000795D -data4 0x000078EB -LOCAL_OBJECT_END(Constants_Z_2) - -LOCAL_OBJECT_START(Constants_G_H_h2) -// G2 and H2 - IEEE single and h2 - IEEE double -data4 0x3F800000,0x00000000,0x00000000,0x00000000 -data4 0x3F7F00F8,0x3B7F875D,0x22C42273,0x3DB5A116 -data4 0x3F7E03F8,0x3BFF015B,0x21F86ED3,0x3DE620CF -data4 0x3F7D08E0,0x3C3EE393,0x484F34ED,0xBDAFA07E -data4 0x3F7C0FC0,0x3C7E0586,0x3860BCF6,0xBDFE07F0 -data4 0x3F7B1880,0x3C9E75D2,0xA78093D6,0x3DEA370F -data4 0x3F7A2328,0x3CBDC97A,0x72A753D0,0x3DFF5791 -data4 0x3F792FB0,0x3CDCFE47,0xA7EF896B,0x3DFEBE6C -data4 0x3F783E08,0x3CFC15D0,0x409ECB43,0x3E0CF156 -data4 0x3F774E38,0x3D0D874D,0xFFEF71DF,0xBE0B6F97 -data4 0x3F766038,0x3D1CF49B,0x5D59EEE8,0xBE080483 -data4 0x3F757400,0x3D2C531D,0xA9192A74,0x3E1F91E9 -data4 0x3F748988,0x3D3BA322,0xBF72A8CD,0xBE139A06 -data4 0x3F73A0D0,0x3D4AE46F,0xF8FBA6CF,0x3E1D9202 -data4 0x3F72B9D0,0x3D5A1756,0xBA796223,0xBE1DCCC4 -data4 0x3F71D488,0x3D693B9D,0xB6B7C239,0xBE049391 -LOCAL_OBJECT_END(Constants_G_H_h2) - -LOCAL_OBJECT_START(Constants_G_H_h3) -// G3 and H3 - IEEE single and h3 - IEEE double -data4 0x3F7FFC00,0x38800100,0x562224CD,0x3D355595 -data4 0x3F7FF400,0x39400480,0x06136FF6,0x3D8200A2 -data4 0x3F7FEC00,0x39A00640,0xE8DE9AF0,0x3DA4D68D -data4 0x3F7FE400,0x39E00C41,0xB10238DC,0xBD8B4291 -data4 0x3F7FDC00,0x3A100A21,0x3B1952CA,0xBD89CCB8 -data4 0x3F7FD400,0x3A300F22,0x1DC46826,0xBDB10707 -data4 0x3F7FCC08,0x3A4FF51C,0xF43307DB,0x3DB6FCB9 -data4 0x3F7FC408,0x3A6FFC1D,0x62DC7872,0xBD9B7C47 -data4 0x3F7FBC10,0x3A87F20B,0x3F89154A,0xBDC3725E -data4 0x3F7FB410,0x3A97F68B,0x62B9D392,0xBD93519D -data4 0x3F7FAC18,0x3AA7EB86,0x0F21BD9D,0x3DC18441 -data4 0x3F7FA420,0x3AB7E101,0x2245E0A6,0xBDA64B95 -data4 0x3F7F9C20,0x3AC7E701,0xAABB34B8,0x3DB4B0EC -data4 0x3F7F9428,0x3AD7DD7B,0x6DC40A7E,0x3D992337 -data4 0x3F7F8C30,0x3AE7D474,0x4F2083D3,0x3DC6E17B -data4 0x3F7F8438,0x3AF7CBED,0x811D4394,0x3DAE314B -data4 0x3F7F7C40,0x3B03E1F3,0xB08F2DB1,0xBDD46F21 -data4 0x3F7F7448,0x3B0BDE2F,0x6D34522B,0xBDDC30A4 -data4 0x3F7F6C50,0x3B13DAAA,0xB1F473DB,0x3DCB0070 -data4 0x3F7F6458,0x3B1BD766,0x6AD282FD,0xBDD65DDC -data4 0x3F7F5C68,0x3B23CC5C,0xF153761A,0xBDCDAB83 -data4 0x3F7F5470,0x3B2BC997,0x341D0F8F,0xBDDADA40 -data4 0x3F7F4C78,0x3B33C711,0xEBC394E8,0x3DCD1BD7 -data4 0x3F7F4488,0x3B3BBCC6,0x52E3E695,0xBDC3532B -data4 0x3F7F3C90,0x3B43BAC0,0xE846B3DE,0xBDA3961E -data4 0x3F7F34A0,0x3B4BB0F4,0x785778D4,0xBDDADF06 -data4 0x3F7F2CA8,0x3B53AF6D,0xE55CE212,0x3DCC3ED1 -data4 0x3F7F24B8,0x3B5BA620,0x9E382C15,0xBDBA3103 -data4 0x3F7F1CC8,0x3B639D12,0x5C5AF197,0x3D635A0B -data4 0x3F7F14D8,0x3B6B9444,0x71D34EFC,0xBDDCCB19 -data4 0x3F7F0CE0,0x3B7393BC,0x52CD7ADA,0x3DC74502 -data4 0x3F7F04F0,0x3B7B8B6D,0x7D7F2A42,0xBDB68F17 -LOCAL_OBJECT_END(Constants_G_H_h3) - -LOCAL_OBJECT_START(lgammal_data) -// Positive overflow value -data8 0xB8D54C8BFFFDEBF4, 0x00007FF1 -LOCAL_OBJECT_END(lgammal_data) - -LOCAL_OBJECT_START(lgammal_Stirling) -// Coefficients needed for Strirling's formula -data8 0x3FED67F1C864BEB4 // High part of 0.5*ln(2*Pi) -data8 0x3C94D252F2400510 // Low part of 0.5*ln(2*Pi) -// -// Bernulli numbers used in Striling's formula for -2^63 < |x| < -13.0 -//(B1H, B1L) = 8.3333333333333333333262747254e-02 -data8 0x3FB5555555555555, 0x3C55555555555555 -data8 0xB60B60B60B60B60B, 0x0000BFF6 //B2 = -2.7777777777777777777777777778e-03 -data8 0xD00D00D00D00D00D, 0x00003FF4 //B3 = 7.9365079365079365079365079365e-04 -data8 0x9C09C09C09C09C0A, 0x0000BFF4 //B4 = -5.9523809523809523809523809524e-04 -data8 0xDCA8F158C7F91AB8, 0x00003FF4 //B5 = 8.4175084175084175084175084175e-04 -data8 0xFB5586CCC9E3E410, 0x0000BFF5 //B6 = -1.9175269175269175269175269175e-03 -data8 0xD20D20D20D20D20D, 0x00003FF7 //B7 = 6.4102564102564102564102564103e-03 -data8 0xF21436587A9CBEE1, 0x0000BFF9 //B8 = -2.9550653594771241830065359477e-02 -data8 0xB7F4B1C0F033FFD1, 0x00003FFC //B9 = 1.7964437236883057316493849002e-01 -data8 0xB23B3808C0F9CF6E, 0x0000BFFF //B10 = -1.3924322169059011164274322169e+00 -// Polynomial coefficients for Stirling's formula, -13.0 < x < -6.0 -data8 0x3FB5555555555555, 0x3C4D75060289C58B //A0 -data8 0xB60B60B60B0F0876, 0x0000BFF6 //A1 -data8 0xD00D00CE54B1256C, 0x00003FF4 //A2 -data8 0x9C09BF46B58F75E1, 0x0000BFF4 //A3 -data8 0xDCA8483BC91ACC6D, 0x00003FF4 //A4 -data8 0xFB3965C939CC9FEE, 0x0000BFF5 //A5 -data8 0xD0723ADE3F0BC401, 0x00003FF7 //A6 -data8 0xE1ED7434E81F0B73, 0x0000BFF9 //A7 -data8 0x8069C6982F993283, 0x00003FFC //A8 -data8 0xC271F65BFA5BEE3F, 0x0000BFFD //A9 -LOCAL_OBJECT_END(lgammal_Stirling) - -LOCAL_OBJECT_START(lgammal_lnsin_data) -// polynomial approximation of -ln(sin(Pi*x)/(Pi*x)), 0 < x <= 0.5 -data8 0x3FFA51A6625307D3, 0x3C81873332FAF94C //A2 -data8 0x8A8991563EC241C3, 0x00003FFE //A4 -data8 0xADA06588061805DF, 0x00003FFD //A6 -data8 0x80859B57C338D0F7, 0x00003FFD //A8 -data8 0xCD00F1C2D78754BD, 0x00003FFC //A10 -data8 0xAAB56B1D3A1F4655, 0x00003FFC //A12 -data8 0x924B6F2FBBED12B1, 0x00003FFC //A14 -data8 0x80008E58765F43FC, 0x00003FFC //A16 -data8 0x3FBC718EC115E429//A18 -data8 0x3FB99CE544FE183E//A20 -data8 0x3FB7251C09EAAD89//A22 -data8 0x3FB64A970733628C//A24 -data8 0x3FAC92D6802A3498//A26 -data8 0x3FC47E1165261586//A28 -data8 0xBFCA1BAA434750D4//A30 -data8 0x3FE460001C4D5961//A32 -data8 0xBFE6F06A3E4908AD//A34 -data8 0x3FE300889EBB203A//A36 -LOCAL_OBJECT_END(lgammal_lnsin_data) - -LOCAL_OBJECT_START(lgammal_half_3Q_data) -// Polynomial coefficients for the lgammal(x), 0.5 <= x < 0.75 -data8 0xBFF7A648EE90C62E, 0x3C713F326857E066 // A3, A0L -data8 0xBFF73E4B8BA780AE, 0xBCA953BC788877EF // A1, A1L -data8 0x403774DCD58D0291, 0xC0415254D5AE6623 // D0, D1 -data8 0x40B07213855CBFB0, 0xC0B8855E25D2D229 // C20, C21 -data8 0x3FFB359F85FF5000, 0x3C9BAECE6EF9EF3A // A2, A2L -data8 0x3FD717D498A3A8CC, 0xBC9088E101CFEDFA // A0, A3L -data8 0xAFEF36CC5AEC3FF0, 0x00004002 // E6 -data8 0xABE2054E1C34E791, 0x00004001 // E4 -data8 0xB39343637B2900D1, 0x00004000 // E2 -data8 0xD74FB710D53F58F6, 0x00003FFF // E0 -data8 0x4070655963BA4256, 0xC078DA9D263C4EA3 // D6, D7 -data8 0x405CD2B6A9B90978, 0xC065B3B9F4F4F171 // D4, D5 -data8 0x4049BC2204CF61FF, 0xC05337227E0BA152 // D2, D3 -data8 0x4095509A50C07A96, 0xC0A0747949D2FB45 // C18, C19 -data8 0x4082ECCBAD709414, 0xC08CD02FB088A702 // C16, C17 -data8 0xFFE4B2A61B508DD5, 0x0000C002 // E7 -data8 0xF461ADB8AE17E0A5, 0x0000C001 // E5 -data8 0xF5BE8B0B90325F20, 0x0000C000 // E3 -data8 0x877B275F3FB78DCA, 0x0000C000 // E1 -LOCAL_OBJECT_END(lgammal_half_3Q_data) - -LOCAL_OBJECT_START(lgammal_half_3Q_neg_data) -// Polynomial coefficients for the lgammal(x), -0.75 < x <= -0.5 -data8 0xC014836EFD94899C, 0x3C9835679663B44F // A3, A0L -data8 0xBFF276C7B4FB1875, 0xBC92D3D9FA29A1C0 // A1, A1L -data8 0x40C5178F24E1A435, 0xC0D9DE84FBC5D76A // D0, D1 -data8 0x41D4D1B236BF6E93, 0xC1EBB0445CE58550 // C20, C21 -data8 0x4015718CD67F63D3, 0x3CC5354B6F04B59C // A2, A2L -data8 0x3FF554493087E1ED, 0xBCB72715E37B02B9 // A0, A3L -data8 0xE4AC7E915FA72229, 0x00004009 // E6 -data8 0xA28244206395FCC6, 0x00004007 // E4 -data8 0xFB045F19C07B2544, 0x00004004 // E2 -data8 0xE5C8A6E6A9BA7D7B, 0x00004002 // E0 -data8 0x4143943B55BF5118, 0xC158AC05EA675406 // D6, D7 -data8 0x4118F6833D19717C, 0xC12F51A6F375CC80 // D4, D5 -data8 0x40F00C209483481C, 0xC103F1DABF750259 // D2, D3 -data8 0x4191038F2D8F9E40, 0xC1A413066DA8AE4A // C18, C19 -data8 0x4170B537EDD833DE, 0xC1857E79424C61CE // C16, C17 -data8 0x8941D8AB4855DB73, 0x0000C00B // E7 -data8 0xBB822B131BD2E813, 0x0000C008 // E5 -data8 0x852B4C03B83D2D4F, 0x0000C006 // E3 -data8 0xC754CA7E2DDC0F1F, 0x0000C003 // E1 -LOCAL_OBJECT_END(lgammal_half_3Q_neg_data) - -LOCAL_OBJECT_START(lgammal_2Q_4_data) -// Polynomial coefficients for the lgammal(x), 2.25 <= |x| < 4.0 -data8 0xBFCA4D55BEAB2D6F, 0x3C7ABC9DA14141F5 // A3, A0L -data8 0x3FFD8773039049E7, 0x3C66CB7957A95BA4 // A1, A1L -data8 0x3F45C3CC79E91E7D, 0xBF3A8E5005937E97 // D0, D1 -data8 0x3EC951E35E1C9203, 0xBEB030A90026C5DF // C20, C21 -data8 0x3FE94699894C1F4C, 0x3C91884D21D123F1 // A2, A2L -data8 0x3FE62E42FEFA39EF, 0xBC66480CEB70870F // A0, A3L -data8 0xF1C2EAFF0B3A7579, 0x00003FF5 // E6 -data8 0xB36AF863926B55A3, 0x00003FF7 // E4 -data8 0x9620656185BB44CA, 0x00003FF9 // E2 -data8 0xA264558FB0906AFF, 0x00003FFB // E0 -data8 0x3F03D59E9666C961, 0xBEF91115893D84A6 // D6, D7 -data8 0x3F19333611C46225, 0xBF0F89EB7D029870 // D4, D5 -data8 0x3F3055A96B347AFE, 0xBF243B5153E178A8 // D2, D3 -data8 0x3ED9A4AEF30C4BB2, 0xBED388138B1CEFF2 // C18, C19 -data8 0x3EEF7945A3C3A254, 0xBEE36F32A938EF11 // C16, C17 -data8 0x9028923F47C82118, 0x0000BFF5 // E7 -data8 0xCE0DAAFB6DC93B22, 0x0000BFF6 // E5 -data8 0xA0D0983B34AC4C8D, 0x0000BFF8 // E3 -data8 0x94D6C50FEB8B0CE7, 0x0000BFFA // E1 -LOCAL_OBJECT_END(lgammal_2Q_4_data) - -LOCAL_OBJECT_START(lgammal_4_8_data) -// Polynomial coefficients for the lgammal(x), 4.0 <= |x| < 8.0 -data8 0xBFD6626BC9B31B54, 0x3CAA53C82493A92B // A3, A0L -data8 0x401B4C420A50AD7C, 0x3C8C6E9929F789A3 // A1, A1L -data8 0x3F49410427E928C2, 0xBF3E312678F8C146 // D0, D1 -data8 0x3ED51065F7CD5848, 0xBED052782A03312F // C20, C21 -data8 0x3FF735973273D5EC, 0x3C831DFC65BF8CCF // A2, A2L -data8 0x401326643C4479C9, 0xBC6FA0498C5548A6 // A0, A3L -data8 0x9382D8B3CD4EB7E3, 0x00003FF6 // E6 -data8 0xE9F92CAD8A85CBCD, 0x00003FF7 // E4 -data8 0xD58389FE38258CEC, 0x00003FF9 // E2 -data8 0x81310136363AE8AA, 0x00003FFC // E0 -data8 0x3F04F0AE38E78570, 0xBEF9E2144BB8F03C // D6, D7 -data8 0x3F1B5E992A6CBC2A, 0xBF10F3F400113911 // D4, D5 -data8 0x3F323EE00AAB7DEE, 0xBF2640FDFA9FB637 // D2, D3 -data8 0x3ED2143EBAFF067A, 0xBEBBDEB92D6FF35D // C18, C19 -data8 0x3EF173A42B69AAA4, 0xBEE78B9951A2EAA5 // C16, C17 -data8 0xAB3CCAC6344E52AA, 0x0000BFF5 // E7 -data8 0x81ACCB8915B16508, 0x0000BFF7 // E5 -data8 0xDA62C7221102C426, 0x0000BFF8 // E3 -data8 0xDF1BD44C4083580A, 0x0000BFFA // E1 -LOCAL_OBJECT_END(lgammal_4_8_data) - -LOCAL_OBJECT_START(lgammal_loc_min_data) -// Polynomial coefficients for the lgammal(x), 1.3125 <= x < 1.5625 -data8 0xBB16C31AB5F1FB71, 0x00003FFF // xMin - point of local minimum -data8 0xBFC2E4278DC6BC23, 0xBC683DA8DDCA9650 // A3, A0L -data8 0x3BD4DB7D0CA61D5F, 0x386E719EDD01D801 // A1, A1L -data8 0x3F4CC72638E1D93F, 0xBF4228EC9953CCB9 // D0, D1 -data8 0x3ED222F97A04613E,0xBED3DDD58095CB6C // C20, C21 -data8 0x3FDEF72BC8EE38AB, 0x3C863AFF3FC48940 // A2, A2L -data8 0xBFBF19B9BCC38A41, 0xBC7425F1BFFC1442// A0, A3L -data8 0x941890032BEB34C3, 0x00003FF6 // E6 -data8 0xC7E701591CE534BC, 0x00003FF7 // E4 -data8 0x93373CBD05138DD4, 0x00003FF9 // E2 -data8 0x845A14A6A81C05D6, 0x00003FFB // E0 -data8 0x3F0F6C4DF6D47A13, 0xBF045DCDB5B49E19 // D6, D7 -data8 0x3F22E23345DDE59C, 0xBF1851159AFB1735 // D4, D5 -data8 0x3F37101EA4022B78, 0xBF2D721E6323AF13 // D2, D3 -data8 0x3EE691EBE82DF09D, 0xBEDD42550961F730 // C18, C19 -data8 0x3EFA793EDE99AD85, 0xBEF14000108E70BE // C16, C17 -data8 0xB7CBC033ACE0C99C, 0x0000BFF5 // E7 -data8 0xF178D1F7B1A45E27, 0x0000BFF6 // E5 -data8 0xA8FCFCA8106F471C, 0x0000BFF8 // E3 -data8 0x864D46FA898A9AD2, 0x0000BFFA // E1 -LOCAL_OBJECT_END(lgammal_loc_min_data) - -LOCAL_OBJECT_START(lgammal_03Q_1Q_data) -// Polynomial coefficients for the lgammal(x), 0.75 <= |x| < 1.3125 -data8 0x3FD151322AC7D848, 0x3C7184DE0DB7B4EE // A4, A2L -data8 0x3FD9A4D55BEAB2D6, 0x3C9E934AAB10845F // A3, A1L -data8 0x3FB111289C381259, 0x3FAFFFCFB32AE18D // D2, D3 -data8 0x3FB3B1D9E0E3E00D, 0x3FB2496F0D3768DF // D0, D1 -data8 0xBA461972C057D439, 0x00003FFB // E6 -data8 0x3FEA51A6625307D3, 0x3C76ABC886A72DA2 // A2, A4L -data8 0x3FA8EFE46B32A70E, 0x3F8F31B3559576B6 // C17, C20 -data8 0xE403383700387D85, 0x00003FFB // E4 -data8 0x9381D0EE74BF7251, 0x00003FFC // E2 -data8 0x3FAA2177A6D28177, 0x3FA4895E65FBD995 // C18, C19 -data8 0x3FAAED2C77DBEE5D, 0x3FA94CA59385512C // D6, D7 -data8 0x3FAE1F522E8A5941, 0x3FAC785EF56DD87E // D4, D5 -data8 0x3FB556AD5FA56F0A, 0x3FA81F416E87C783 // E7, C16 -data8 0xCD00F1C2DC2C9F1E, 0x00003FFB // E5 -data8 0x3FE2788CFC6FB618, 0x3C8E52519B5B17CB // A1, A3L -data8 0x80859B57C3E7F241, 0x00003FFC // E3 -data8 0xADA065880615F401, 0x00003FFC // E1 -data8 0xD45CE0BD530AB50E, 0x00003FFC // E0 -LOCAL_OBJECT_END(lgammal_03Q_1Q_data) - -LOCAL_OBJECT_START(lgammal_13Q_2Q_data) -// Polynomial coefficients for the lgammal(x), 1.5625 <= |x| < 2.25 -data8 0x3F951322AC7D8483, 0x3C71873D88C6539D // A4, A2L -data8 0xBFB13E001A557606, 0x3C56CB907018A101 // A3, A1L -data8 0xBEC11B2EC1E7F6FC, 0x3EB0064ED9824CC7 // D2, D3 -data8 0xBEE3CBC963EC103A, 0x3ED2597A330C107D // D0, D1 -data8 0xBC6F2DEBDFE66F38, 0x0000BFF0 // E6 -data8 0x3FD4A34CC4A60FA6, 0x3C3AFC9BF775E8A0 // A2, A4L -data8 0x3E48B0C542F85B32, 0xBE347F12EAF787AB // C17, C20 -data8 0xE9FEA63B6984FA1E, 0x0000BFF2 // E4 -data8 0x9C562E15FC703BBF, 0x0000BFF5 // E2 -data8 0xBE3C12A50AB0355E, 0xBE1C941626AE4717 // C18, C19 -data8 0xBE7AFA8714342BC4,0x3E69A12D2B7761CB // D6, D7 -data8 0xBE9E25EF1D526730, 0x3E8C762291889B99 // D4, D5 -data8 0x3EF580DCEE754733, 0xBE57C811D070549C // E7, C16 -data8 0xD093D878BE209C98, 0x00003FF1 // E5 -data8 0x3FDB0EE6072093CE, 0xBC6024B9E81281C4 // A1, A3L -data8 0x859B57C31CB77D96, 0x00003FF4 // E3 -data8 0xBD6EB756DB617E8D, 0x00003FF6 // E1 -data8 0xF2027E10C7AF8C38, 0x0000BFF7 // E0 -LOCAL_OBJECT_END(lgammal_13Q_2Q_data) - -LOCAL_OBJECT_START(lgammal_8_10_data) -// Polynomial coefficients for the lgammal(x), 8.0 <= |x| < 10.0 -// Multi Precision terms -data8 0x40312008A3A23E5C, 0x3CE020B4F2E4083A //A1 -data8 0x4025358E82FCB70C, 0x3CD4A5A74AF7B99C //A0 -// Native precision terms -data8 0xF0AA239FFBC616D2, 0x00004000 //A2 -data8 0x96A8EA798FE57D66, 0x0000BFFF //A3 -data8 0x8D501B7E3B9B9BDB, 0x00003FFE //A4 -data8 0x9EE062401F4B1DC2, 0x0000BFFD //A5 -data8 0xC63FD8CD31E93431, 0x00003FFC //A6 -data8 0x8461101709C23C30, 0x0000BFFC //A7 -data8 0xB96D7EA7EF3648B2, 0x00003FFB //A8 -data8 0x86886759D2ACC906, 0x0000BFFB //A9 -data8 0xC894B6E28265B183, 0x00003FFA //A10 -data8 0x98C4348CAD821662, 0x0000BFFA //A11 -data8 0xEC9B092226A94DF2, 0x00003FF9 //A12 -data8 0xB9F169FF9B98CDDC, 0x0000BFF9 //A13 -data8 0x9A3A32BB040894D3, 0x00003FF9 //A14 -data8 0xF9504CCC1003B3C3, 0x0000BFF8 //A15 -LOCAL_OBJECT_END(lgammal_8_10_data) - -LOCAL_OBJECT_START(lgammal_03Q_6_data) -// Polynomial coefficients for the lgammal(x), 0.75 <= |x| < 1.0 -data8 0xBFBC47DCA479E295, 0xBC607E6C1A379D55 //A3 -data8 0x3FCA051C372609ED, 0x3C7B02D73EB7D831 //A0 -data8 0xBFE15FAFA86B04DB, 0xBC3F52EE4A8945B5 //A1 -data8 0x3FD455C4FF28F0BF, 0x3C75F8C6C99F30BB //A2 -data8 0xD2CF04CD934F03E1, 0x00003FFA //A4 -data8 0xDB4ED667E29256E1, 0x0000BFF9 //A5 -data8 0xF155A33A5B6021BF, 0x00003FF8 //A6 -data8 0x895E9B9D386E0338, 0x0000BFF8 //A7 -data8 0xA001BE94B937112E, 0x00003FF7 //A8 -data8 0xBD82846E490ED048, 0x0000BFF6 //A9 -data8 0xE358D24EC30DBB5D, 0x00003FF5 //A10 -data8 0x89C4F3652446B78B, 0x0000BFF5 //A11 -data8 0xA86043E10280193D, 0x00003FF4 //A12 -data8 0xCF3A2FBA61EB7682, 0x0000BFF3 //A13 -data8 0x3F300900CC9200EC //A14 -data8 0xBF23F42264B94AE8 //A15 -data8 0x3F18EEF29895FE73 //A16 -data8 0xBF0F3C4563E3EDFB //A17 -data8 0x3F0387DBBC385056 //A18 -data8 0xBEF81B4004F92900 //A19 -data8 0x3EECA6692A9A5B81 //A20 -data8 0xBEDF61A0059C15D3 //A21 -data8 0x3ECDA9F40DCA0111 //A22 -data8 0xBEB60FE788217BAF //A23 -data8 0x3E9661D795DFC8C6 //A24 -data8 0xBE66C7756A4EDEE5 //A25 -// Polynomial coefficients for the lgammal(x), 1.0 <= |x| < 2.0 -data8 0xBFC1AE55B180726B, 0xBC7DE1BC478453F5 //A3 -data8 0xBFBEEB95B094C191, 0xBC53456FF6F1C9D9 //A0 -data8 0x3FA2AED059BD608A, 0x3C0B65CC647D557F //A1 -data8 0x3FDDE9E64DF22EF2, 0x3C8993939A8BA8E4 //A2 -data8 0xF07C206D6B100CFF, 0x00003FFA //A4 -data8 0xED2CEA9BA52FE7FB, 0x0000BFF9 //A5 -data8 0xFCE51CED52DF3602, 0x00003FF8 //A6 -data8 0x8D45D27872326619, 0x0000BFF8 //A7 -data8 0xA2B78D6BCEBE27F7, 0x00003FF7 //A8 -data8 0xBF6DC0996A895B6F, 0x0000BFF6 //A9 -data8 0xE4B9AD335AF82D79, 0x00003FF5 //A10 -data8 0x8A451880195362A1, 0x0000BFF5 //A11 -data8 0xA8BE35E63089A7A9, 0x00003FF4 //A12 -data8 0xCF7FA175FA11C40C, 0x0000BFF3 //A13 -data8 0x3F300C282FAA3B02 //A14 -data8 0xBF23F6AEBDA68B80 //A15 -data8 0x3F18F6860E2224DD //A16 -data8 0xBF0F542B3CE32F28 //A17 -data8 0x3F039436218C9BF8 //A18 -data8 0xBEF8AE6307677AEC //A19 -data8 0x3EF0B55527B3A211 //A20 -data8 0xBEE576AC995E7605 //A21 -data8 0x3ED102DDC1365D2D //A22 -data8 0xBEC442184F97EA54 //A23 -data8 0x3ED4D2283DFE5FC6 //A24 -data8 0xBECB9219A9B46787 //A25 -// Polynomial coefficients for the lgammal(x), 2.0 <= |x| < 3.0 -data8 0xBFCA4D55BEAB2D6F, 0xBC66F80E5BFD5AF5 //A3 -data8 0x3FE62E42FEFA39EF, 0x3C7ABC9E3B347E3D //A0 -data8 0x3FFD8773039049E7, 0x3C66CB9007C426EA //A1 -data8 0x3FE94699894C1F4C, 0x3C918726EB111663 //A2 -data8 0xA264558FB0906209, 0x00003FFB //A4 -data8 0x94D6C50FEB902ADC, 0x0000BFFA //A5 -data8 0x9620656184243D17, 0x00003FF9 //A6 -data8 0xA0D0983B8BCA910B, 0x0000BFF8 //A7 -data8 0xB36AF8559B222BD3, 0x00003FF7 //A8 -data8 0xCE0DACB3260AE6E5, 0x0000BFF6 //A9 -data8 0xF1C2C0BF0437C7DB, 0x00003FF5 //A10 -data8 0x902A2F2F3AB74A92, 0x0000BFF5 //A11 -data8 0xAE05009B1B2C6E4C, 0x00003FF4 //A12 -data8 0xD5B71F6456D7D4CB, 0x0000BFF3 //A13 -data8 0x3F2F0351D71BC9C6 //A14 -data8 0xBF2B53BC56A3B793 //A15 -data8 0xBF18B12DC6F6B861 //A16 -data8 0xBF43EE6EB5215C2F //A17 -data8 0xBF5474787CDD455E //A18 -data8 0xBF642B503C9C060A //A19 -data8 0xBF6E07D1AA254AA3 //A20 -data8 0xBF71C785443AAEE8 //A21 -data8 0xBF6F67BF81B71052 //A22 -data8 0xBF63E4BCCF4FFABF //A23 -data8 0xBF50067F8C671D5A //A24 -data8 0xBF29C770D680A5AC //A25 -// Polynomial coefficients for the lgammal(x), 4.0 <= |x| < 6.0 -data8 0xBFD6626BC9B31B54, 0xBC85AABE08680902 //A3 -data8 0x401326643C4479C9, 0x3CAA53C26F31E364 //A0 -data8 0x401B4C420A50AD7C, 0x3C8C76D55E57DD8D //A1 -data8 0x3FF735973273D5EC, 0x3C83A0B78E09188A //A2 -data8 0x81310136363AAB6D, 0x00003FFC //A4 -data8 0xDF1BD44C4075C0E6, 0x0000BFFA //A5 -data8 0xD58389FE38D8D664, 0x00003FF9 //A6 -data8 0xDA62C7221D5B5F87, 0x0000BFF8 //A7 -data8 0xE9F92CAD0263E157, 0x00003FF7 //A8 -data8 0x81ACCB8606C165FE, 0x0000BFF7 //A9 -data8 0x9382D8D263D1C2A3, 0x00003FF6 //A10 -data8 0xAB3CCBA4C853B12C, 0x0000BFF5 //A11 -data8 0xCA0818BBCCC59296, 0x00003FF4 //A12 -data8 0xF18912691CBB5BD0, 0x0000BFF3 //A13 -data8 0x3F323EF5D8330339 //A14 -data8 0xBF2641132EA571F7 //A15 -data8 0x3F1B5D9576175CA9 //A16 -data8 0xBF10F56A689C623D //A17 -data8 0x3F04CACA9141A18D //A18 -data8 0xBEFA307AC9B4E85D //A19 -data8 0x3EF4B625939FBE32 //A20 -data8 0xBECEE6AC1420F86F //A21 -data8 0xBE9A95AE2E485964 //A22 -data8 0xBF039EF47F8C09BB //A23 -data8 0xBF05345957F7B7A9 //A24 -data8 0xBEF85AE6385D4CCC //A25 -// Polynomial coefficients for the lgammal(x), 3.0 <= |x| < 4.0 -data8 0xBFCA4D55BEAB2D6F, 0xBC667B20FF46C6A8 //A3 -data8 0x3FE62E42FEFA39EF, 0x3C7ABC9E3B398012 //A0 -data8 0x3FFD8773039049E7, 0x3C66CB9070238D77 //A1 -data8 0x3FE94699894C1F4C, 0x3C91873D8839B1CD //A2 -data8 0xA264558FB0906D7E, 0x00003FFB //A4 -data8 0x94D6C50FEB8AFD72, 0x0000BFFA //A5 -data8 0x9620656185B68F14, 0x00003FF9 //A6 -data8 0xA0D0983B34B7088A, 0x0000BFF8 //A7 -data8 0xB36AF863964AA440, 0x00003FF7 //A8 -data8 0xCE0DAAFB5497AFB8, 0x0000BFF6 //A9 -data8 0xF1C2EAFA79CC2864, 0x00003FF5 //A10 -data8 0x9028922A839572B8, 0x0000BFF5 //A11 -data8 0xAE1E62F870BA0278, 0x00003FF4 //A12 -data8 0xD4726F681E2ABA29, 0x0000BFF3 //A13 -data8 0x3F30559B9A02FADF //A14 -data8 0xBF243ADEB1266CAE //A15 -data8 0x3F19303B6F552603 //A16 -data8 0xBF0F768C288EC643 //A17 -data8 0x3F039D5356C21DE1 //A18 -data8 0xBEF81BCA8168E6BE //A19 -data8 0x3EEC74A53A06AD54 //A20 -data8 0xBEDED52D1A5DACDF //A21 -data8 0x3ECCB4C2C7087342 //A22 -data8 0xBEB4F1FAFDFF5C2F //A23 -data8 0x3E94C80B52D58904 //A24 -data8 0xBE64A328CBE92A27 //A25 -LOCAL_OBJECT_END(lgammal_03Q_6_data) - -LOCAL_OBJECT_START(lgammal_1pEps_data) -// Polynomial coefficients for the lgammal(x), 1 - 2^(-7) <= |x| < 1 + 2^(-7) -data8 0x93C467E37DB0C7A5, 0x00003FFE //A1 -data8 0xD28D3312983E9919, 0x00003FFE //A2 -data8 0xCD26AADF559A47E3, 0x00003FFD //A3 -data8 0x8A8991563EC22E81, 0x00003FFD //A4 -data8 0x3FCA8B9C168D52FE //A5 -data8 0x3FC5B40CB0696370 //A6 -data8 0x3FC270AC2229A65D //A7 -data8 0x3FC0110AF10FCBFC //A8 -// Polynomial coefficients for the log1p(x), - 2^(-7) <= |x| < 2^(-7) -data8 0x3FBC71C71C71C71C //P8 -data8 0xBFC0000000000000 //P7 -data8 0x3FC2492492492492 //P6 -data8 0xBFC5555555555555 //P5 -data8 0x3FC999999999999A //P4 -data8 0xBFD0000000000000 //P3 -data8 0x3FD5555555555555 //P2 -data8 0xBFE0000000000000 //P1 -// short version of "lnsin" polynomial -data8 0xD28D3312983E9918, 0x00003FFF //A2 -data8 0x8A8991563EC241B6, 0x00003FFE //A4 -data8 0xADA06588061830A5, 0x00003FFD //A6 -data8 0x80859B57C31CB746, 0x00003FFD //A8 -LOCAL_OBJECT_END(lgammal_1pEps_data) - -LOCAL_OBJECT_START(lgammal_neg2andHalf_data) -// Polynomial coefficients for the lgammal(x), -2.005859375 <= x < -2.5 -data8 0xBF927781D4BB093A, 0xBC511D86D85B7045 // A3, A0L -data8 0x3FF1A68793DEFC15, 0x3C9852AE2DA7DEEF // A1, A1L -data8 0x408555562D45FAFD, 0xBF972CDAFE5FEFAD // D0, D1 -data8 0xC18682331EF492A5, 0xC1845E3E0D29606B // C20, C21 -data8 0x4013141822E16979, 0x3CCF8718B6E75F6C // A2, A2L -data8 0xBFACCBF9F5ED0F15, 0xBBDD1AEB73297401 // A0, A3L -data8 0xCCCDB17423046445, 0x00004006 // E6 -data8 0x800514E230A3A452, 0x00004005 // E4 -data8 0xAAE9A48EC162E76F, 0x00004003 // E2 -data8 0x81D4F88B3F3EA0FC, 0x00004002 // E0 -data8 0x40CF3F3E35238DA0, 0xC0F8B340945F1A7E // D6, D7 -data8 0x40BF89EC0BD609C6, 0xC095897242AEFEE2 // D4, D5 -data8 0x40A2482FF01DBC5C, 0xC02095E275FDCF62 // D2, D3 -data8 0xC1641354F2312A6A, 0xC17B3657F85258E9 // C18, C19 -data8 0xC11F964E9ECBE2C9, 0xC146D7A90F70696C // C16, C17 -data8 0xE7AECDE6AF8EA816, 0x0000BFEF // E7 -data8 0xD711252FEBBE1091, 0x0000BFEB // E5 -data8 0xE648BD10F8C43391, 0x0000BFEF // E3 -data8 0x948A1E78AA00A98D, 0x0000BFF4 // E1 -LOCAL_OBJECT_END(lgammal_neg2andHalf_data) - -LOCAL_OBJECT_START(lgammal_near_neg_half_data) -// Polynomial coefficients for the lgammal(x), -0.5 < x < -0.40625 -data8 0xBFC1AE55B180726C, 0x3C8053CD734E6A1D // A3, A0L -data8 0x3FA2AED059BD608A, 0x3C0CD3D2CDBA17F4 // A1, A1L -data8 0x40855554DBCD1E1E, 0x3F96C51AC2BEE9E1 // D0, D1 -data8 0xC18682331EF4927D, 0x41845E3E0D295DFC // C20, C21 -data8 0x4011DE9E64DF22EF, 0x3CA692B70DAD6B7B // A2, A2L -data8 0x3FF43F89A3F0EDD6, 0xBC4955AED0FA087D // A0, A3L -data8 0xCCCD3F1DF4A2C1DD, 0x00004006 // E6 -data8 0x80028ADE33C7FCD9, 0x00004005 // E4 -data8 0xAACA474E485507EF, 0x00004003 // E2 -data8 0x80F07C206D6B0ECD, 0x00004002 // E0 -data8 0x40CF3F3E33E83056, 0x40F8B340944633D9 // D6, D7 -data8 0x40BF89EC059931F0, 0x409589723307AD20 // D4, D5 -data8 0x40A2482FD0054824, 0x402095CE7F19D011 // D2, D3 -data8 0xC1641354F2313614, 0x417B3657F8525354 // C18, C19 -data8 0xC11F964E9ECFD21C, 0x4146D7A90F701836 // C16, C17 -data8 0x86A9C01F0EA11E5A, 0x0000BFF5 // E7 -data8 0xBF6D8469142881C0, 0x0000BFF6 // E5 -data8 0x8D45D277BA8255F1, 0x0000BFF8 // E3 -data8 0xED2CEA9BA528BCC3, 0x0000BFF9 // E1 -LOCAL_OBJECT_END(lgammal_near_neg_half_data) - -//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -////////////// POLYNOMIAL COEFFICIENTS FOR "NEAR ROOTS" RANGES ///////////// -////////////// THIS PART OF TABLE SHOULD BE ADDRESSED REALLY RARE ///////////// -//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -LOCAL_OBJECT_START(lgammal_right_roots_polynomial_data) -// Polynomial coefficients for right root on [-3, -2] -// Lgammal is approximated by polynomial within [-.056244 ; .158208 ] range -data8 0xBBBD5E9DCD11030B, 0xB867411D9FF87DD4 //A0 -data8 0x3FF83FE966AF535E, 0x3CAA21235B8A769A //A1 -data8 0x40136EEBB002F55C, 0x3CC3959A6029838E //A2 -data8 0xB4A5302C53C2BEDD, 0x00003FFF //A3 -data8 0x8B8C6BE504F2DA1C, 0x00004002 //A4 -data8 0xB99CFF02593B4D98, 0x00004001 //A5 -data8 0x4038D32F682AA1CF //A6 -data8 0x403809F04EE6C5B5 //A7 -data8 0x40548EAA81634CEE //A8 -data8 0x4059297ADB6BC03D //A9 -data8 0x407286FB8EC5C9DA //A10 -data8 0x407A92E05B744CFB //A11 -data8 0x4091A9D4144258CD //A12 -data8 0x409C4D01D24F367E //A13 -data8 0x40B1871B9A426A83 //A14 -data8 0x40BE51C48BD9A583 //A15 -data8 0x40D2140D0C6153E7 //A16 -data8 0x40E0FB2C989CE4A3 //A17 -data8 0x40E52739AB005641 //A18 -data8 0x41161E3E6DDF503A //A19 -// Polynomial coefficients for right root on [-4, -3] -// Lgammal is approximated by polynomial within [-.172797 ; .171573 ] range -data8 0x3C172712B248E42E, 0x38CB8D17801A5D67 //A0 -data8 0x401F20A65F2FAC54, 0x3CCB9EA1817A824E //A1 -data8 0x4039D4D2977150EF, 0x3CDA42E149B6276A //A2 -data8 0xE089B8926AE2D9CB, 0x00004005 //A3 -data8 0x933901EBBB586C37, 0x00004008 //A4 -data8 0xCCD319BED1CFA1CD, 0x0000400A //A5 -data8 0x40D293C3F78D3C37 //A6 -data8 0x40FBB97AA0B6DD02 //A7 -data8 0x41251EA3345E5EB9 //A8 -data8 0x415057F65C92E7B0 //A9 -data8 0x41799C865241B505 //A10 -data8 0x41A445209EFE896B //A11 -data8 0x41D02D21880C953B //A12 -data8 0x41F9FFDE8C63E16D //A13 -data8 0x422504DC8302D2BE //A14 -data8 0x425111BF18C95414 //A15 -data8 0x427BCBE74A2B8EF7 //A16 -data8 0x42A7256F59B286F7 //A17 -data8 0x42D462D1586DE61F //A18 -data8 0x42FBB1228D6C5118 //A19 -// Polynomial coefficients for right root on [-5, -4] -// Lgammal is approximated by polynomial within [-.163171 ; .161988 ] range -data8 0x3C5840FBAFDEE5BB, 0x38CAC0336E8C490A //A0 -data8 0x403ACA5CF4921642, 0x3CCEDCDDA5491E56 //A1 -data8 0x40744415CD813F8E, 0x3CFBFEBC17E39146 //A2 -data8 0xAACD88D954E3E1BD, 0x0000400B //A3 -data8 0xCB68C710D75ED802, 0x0000400F //A4 -data8 0x8130F5AB997277AC, 0x00004014 //A5 -data8 0x41855E3DBF99EBA7 //A6 -data8 0x41CD14FE49C49FC2 //A7 -data8 0x421433DCE281F07D //A8 -data8 0x425C8399C7A92B6F //A9 -data8 0x42A45FBE67840F1A //A10 -data8 0x42ED68D75F9E6C98 //A11 -data8 0x433567291C27E5BE //A12 -data8 0x437F5ED7A9D9FD28 //A13 -data8 0x43C720A65C8AB711 //A14 -data8 0x441120A6C1D40B9B //A15 -data8 0x44596F561F2D1CBE //A16 -data8 0x44A3507DA81D5C01 //A17 -data8 0x44EF06A31E39EEDF //A18 -data8 0x45333774C99F523F //A19 -// Polynomial coefficients for right root on [-6, -5] -// Lgammal is approximated by polynomial within [-.156450 ; .156126 ] range -data8 0x3C71B82D6B2B3304, 0x3917186E3C0DC231 //A0 -data8 0x405ED72E0829AE02, 0x3C960C25157980EB //A1 -data8 0x40BCECC32EC22F9B, 0x3D5D8335A32F019C //A2 -data8 0x929EC2B1FB931F17, 0x00004012 //A3 -data8 0xD112EF96D37316DE, 0x00004018 //A4 -data8 0x9F00BB9BB13416AB, 0x0000401F //A5 -data8 0x425F7D8D5BDCB223 //A6 -data8 0x42C9A8D00C776CC6 //A7 -data8 0x433557FD8C481424 //A8 -data8 0x43A209221A953EF0 //A9 -data8 0x440EDC98D5618AB7 //A10 -data8 0x447AABD25E367378 //A11 -data8 0x44E73DE20CC3B288 //A12 -data8 0x455465257B4E0BD8 //A13 -data8 0x45C2011532085353 //A14 -data8 0x462FEE4CC191945B //A15 -data8 0x469C63AEEFEF0A7F //A16 -data8 0x4709D045390A3810 //A17 -data8 0x4778D360873C9F64 //A18 -data8 0x47E26965BE9A682A //A19 -// Polynomial coefficients for right root on [-7, -6] -// Lgammal is approximated by polynomial within [-.154582 ; .154521 ] range -data8 0x3C75F103A1B00A48, 0x391C041C190C726D //A0 -data8 0x40869DE49E3AF2AA, 0x3D1C17E1F813063B //A1 -data8 0x410FCE23484CFD10, 0x3DB6F38C2F11DAB9 //A2 -data8 0xEF281D1E1BE2055A, 0x00004019 //A3 -data8 0xFCE3DA92AC55DFF8, 0x00004022 //A4 -data8 0x8E9EA838A20BD58E, 0x0000402C //A5 -data8 0x4354F21E2FB9E0C9 //A6 -data8 0x43E9500994CD4F09 //A7 -data8 0x447F3A2C23C033DF //A8 -data8 0x45139152656606D8 //A9 -data8 0x45A8D45F8D3BF2E8 //A10 -data8 0x463FD32110E5BFE5 //A11 -data8 0x46D490B3BDBAE0BE //A12 -data8 0x476AC3CAD905DD23 //A13 -data8 0x48018558217AD473 //A14 -data8 0x48970AF371D30585 //A15 -data8 0x492E6273A8BEFFE3 //A16 -data8 0x49C47CC9AE3F1073 //A17 -data8 0x4A5D38E8C35EFF45 //A18 -data8 0x4AF0123E89694CD8 //A19 -// Polynomial coefficients for right root on [-8, -7] -// Lgammal is approximated by polynomial within [-.154217 ; .154208 ] range -data8 0xBCD2507D818DDD68, 0xB97F6940EA2871A0 //A0 -data8 0x40B3B407AA387BCB, 0x3D6320238F2C43D1 //A1 -data8 0x41683E85DAAFBAC7, 0x3E148D085958EA3A //A2 -data8 0x9F2A95AF1E10A548, 0x00004022 //A3 -data8 0x92F21522F482300E, 0x0000402E //A4 -data8 0x90B51AB03A1F244D, 0x0000403A //A5 -data8 0x44628E1C70EF534F //A6 -data8 0x452393E2BC32D244 //A7 -data8 0x45E5164141F4BA0B //A8 -data8 0x46A712B3A8AF5808 //A9 -data8 0x47698FD36CEDD0F2 //A10 -data8 0x482C9AE6BBAA3637 //A11 -data8 0x48F023821857C8E9 //A12 -data8 0x49B2569053FC106F //A13 -data8 0x4A74F646D5C1604B //A14 -data8 0x4B3811CF5ABA4934 //A15 -data8 0x4BFBB5DD6C84E233 //A16 -data8 0x4CC05021086F637B //A17 -data8 0x4D8450A345B0FB49 //A18 -data8 0x4E43825848865DB2 //A19 -// Polynomial coefficients for right root on [-9, -8] -// Lgammal is approximated by polynomial within [-.154160 ; .154158 ] range -data8 0x3CDF4358564F2B46, 0x397969BEE6042F81 //A0 -data8 0x40E3B088FED67721, 0x3D82787BA937EE85 //A1 -data8 0x41C83A3893550EF4, 0x3E542ED57E244DA8 //A2 -data8 0x9F003C6DC56E0B8E, 0x0000402B //A3 -data8 0x92BDF64A3213A699, 0x0000403A //A4 -data8 0x9074F503AAD417AF, 0x00004049 //A5 -data8 0x4582843E1313C8CD //A6 -data8 0x467387BD6A7826C1 //A7 -data8 0x4765074E788CF440 //A8 -data8 0x4857004DD9D1E09D //A9 -data8 0x4949792ED7530EAF //A10 -data8 0x4A3C7F089A292ED3 //A11 -data8 0x4B30125BF0AABB86 //A12 -data8 0x4C224175195E307E //A13 -data8 0x4D14DC4C8B32C08D //A14 -data8 0x4E07F1DB2786197E //A15 -data8 0x4EFB8EA1C336DACB //A16 -data8 0x4FF03797EACD0F23 //A17 -data8 0x50E4304A8E68A730 //A18 -data8 0x51D3618FB2EC9F93 //A19 -// Polynomial coefficients for right root on [-10, -9] -// Lgammal is approximated by polynomial within [-.154152 ; .154152 ] range -data8 0x3D42F34DA97ECF0C, 0x39FD1256F345B0D0 //A0 -data8 0x4116261203919787, 0x3DC12D44055588EB //A1 -data8 0x422EA8F32FB7FE99, 0x3ED849CE4E7B2D77 //A2 -data8 0xE25BAF73477A57B5, 0x00004034 //A3 -data8 0xEB021FD10060504A, 0x00004046 //A4 -data8 0x8220A208EE206C5F, 0x00004059 //A5 -data8 0x46B2C3903EC9DA14 //A6 -data8 0x47D64393744B9C67 //A7 -data8 0x48FAF79CCDC604DD //A8 -data8 0x4A20975DB8061EBA //A9 -data8 0x4B44AB9CBB38DB21 //A10 -data8 0x4C6A032F60094FE9 //A11 -data8 0x4D908103927634B4 //A12 -data8 0x4EB516CA21D30861 //A13 -data8 0x4FDB1BF12C58D318 //A14 -data8 0x510180AAE094A553 //A15 -data8 0x5226A8F2A2D45D57 //A16 -data8 0x534E00B6B0C8B809 //A17 -data8 0x5475022FE21215B2 //A18 -data8 0x5596B02BF6C5E19B //A19 -// Polynomial coefficients for right root on [-11, -10] -// Lgammal is approximated by polynomial within [-.154151 ; .154151 ] range -data8 0x3D7AA9C2E2B1029C, 0x3A15FB37578544DB //A0 -data8 0x414BAF825A0C91D4, 0x3DFB9DA2CE398747 //A1 -data8 0x4297F3EC8AE0AF03, 0x3F34208B55FB8781 //A2 -data8 0xDD0C97D3197F56DE, 0x0000403E //A3 -data8 0x8F6F3AF7A5499674, 0x00004054 //A4 -data8 0xC68DA1AF6D878EEB, 0x00004069 //A5 -data8 0x47F1E4E1E2197CE0 //A6 -data8 0x494A8A28E597C3EB //A7 -data8 0x4AA4175D0D35D705 //A8 -data8 0x4BFEE6F0AF69E814 //A9 -data8 0x4D580FE7B3DBB3C6 //A10 -data8 0x4EB2ECE60E4608AF //A11 -data8 0x500E04BE3E2B4F24 //A12 -data8 0x5167F9450F0FB8FD //A13 -data8 0x52C342BDE747603F //A14 -data8 0x541F1699D557268C //A15 -data8 0x557927C5F079864E //A16 -data8 0x56D4D10FEEDB030C //A17 -data8 0x5832385DF86AD28A //A18 -data8 0x598898914B4D6523 //A19 -// Polynomial coefficients for right root on [-12, -11] -// Lgammal is approximated by polynomial within [-.154151 ; .154151 ] range -data8 0xBD96F61647C58B03, 0xBA3ABB0C2A6C755B //A0 -data8 0x418308A82714B70D, 0x3E1088FC6A104C39 //A1 -data8 0x4306A493DD613C39, 0x3FB2341ECBF85741 //A2 -data8 0x8FA8FE98339474AB, 0x00004049 //A3 -data8 0x802CCDF570BA7942, 0x00004062 //A4 -data8 0xF3F748AF11A32890, 0x0000407A //A5 -data8 0x493E3B567EF178CF //A6 -data8 0x4ACED38F651BA362 //A7 -data8 0x4C600B357337F946 //A8 -data8 0x4DF0F71A52B54CCF //A9 -data8 0x4F8229F3B9FA2C70 //A10 -data8 0x5113A4C4979B770E //A11 -data8 0x52A56BC367F298D5 //A12 -data8 0x543785CF31842DC0 //A13 -data8 0x55C9FC37E3E40896 //A14 -data8 0x575CD5D1BA556C82 //A15 -data8 0x58F00A7AD99A9E08 //A16 -data8 0x5A824088688B008D //A17 -data8 0x5C15F75EF7E08EBD //A18 -data8 0x5DA462EA902F0C90 //A19 -// Polynomial coefficients for right root on [-13, -12] -// Lgammal is approximated by polynomial within [-.154151 ; .154151 ] range -data8 0x3DC3191752ACFC9D, 0x3A26CB6629532DBF //A0 -data8 0x41BC8CFC051191BD, 0x3E68A84DA4E62AF2 //A1 -data8 0x43797926294A0148, 0x400F345FF3723CFF //A2 -data8 0xF26D2AF700B82625, 0x00004053 //A3 -data8 0xA238B24A4B1F7B15, 0x00004070 //A4 -data8 0xE793B5C0A41A264F, 0x0000408C //A5 -data8 0x4A9585BDDACE863D //A6 -data8 0x4C6075953448088A //A7 -data8 0x4E29B2F38D1FC670 //A8 -data8 0x4FF4619B079C440F //A9 -data8 0x51C05DAE118D8AD9 //A10 -data8 0x538A8C7F87326AD4 //A11 -data8 0x5555B6937588DAB3 //A12 -data8 0x5721E1F8B6E6A7DB //A13 -data8 0x58EDA1D7A77DD6E5 //A14 -data8 0x5AB8A9616B7DC9ED //A15 -data8 0x5C84942AA209ED17 //A16 -data8 0x5E518FC34C6F54EF //A17 -data8 0x601FB3F17BCCD9A0 //A18 -data8 0x61E61128D512FE97 //A1 -// Polynomial coefficients for right root on [-14, -13] -// Lgammal is approximated by polynomial within [-.154151 ; .154151 ] range -data8 0xBE170D646421B3F5, 0xBAAD95F79FCB5097 //A0 -data8 0x41F7328CBFCD9AC7, 0x3E743B8B1E8AEDB1 //A1 -data8 0x43F0D0FA2DBDA237, 0x40A0422D6A227B55 //A2 -data8 0x82082DF2D32686CC, 0x0000405F //A3 -data8 0x8D64EE9B42E68B43, 0x0000407F //A4 -data8 0xA3FFD82E08C5F1F1, 0x0000409F //A5 -data8 0x4BF8C49D99123454 //A6 -data8 0x4DFEC79DDF11342F //A7 -data8 0x50038615A892F6BD //A8 -data8 0x520929453DB32EF1 //A9 -data8 0x54106A7808189A7F //A10 -data8 0x5615A302D03C207B //A11 -data8 0x581CC175AA736F5E //A12 -data8 0x5A233E071147C017 //A13 -data8 0x5C29E81917243F22 //A14 -data8 0x5E3184B0B5AC4707 //A15 -data8 0x6037C11DE62D8388 //A16 -data8 0x6240787C4B1C9D6C //A17 -data8 0x6448289235E80977 //A18 -data8 0x664B5352C6C3449E //A19 -// Polynomial coefficients for right root on [-15, -14] -// Lgammal is approximated by polynomial within [-.154151 ; .154151 ] range -data8 0x3E562C2E34A9207D, 0x3ADC00DA3DFF7A83 //A0 -data8 0x42344C3B2F0D90AB, 0x3EB8A2E979F24536 //A1 -data8 0x4469BFFF28B50D07, 0x41181E3D05C1C294 //A2 -data8 0xAE38F64DCB24D9F8, 0x0000406A //A3 -data8 0xA5C3F52C1B350702, 0x0000408E //A4 -data8 0xA83BC857BCD67A1B, 0x000040B2 //A5 -data8 0x4D663B4727B4D80A //A6 -data8 0x4FA82C965B0F7788 //A7 -data8 0x51EAD58C02908D95 //A8 -data8 0x542E427970E073D8 //A9 -data8 0x56714644C558A818 //A10 -data8 0x58B3EC2040C77BAE //A11 -data8 0x5AF72AE6A83D45B1 //A12 -data8 0x5D3B214F611F5D12 //A13 -data8 0x5F7FF5E49C54E92A //A14 -data8 0x61C2E917AB765FB2 //A15 -data8 0x64066FD70907B4C1 //A16 -data8 0x664B3998D60D0F9B //A17 -data8 0x689178710782FA8B //A18 -data8 0x6AD14A66C1C7BEC3 //A19 -// Polynomial coefficients for right root on [-16, -15] -// Lgammal is approximated by polynomial within [-.154151 ; .154151 ] range -data8 0xBE6D7E7192615BAE, 0xBB0137677D7CC719 //A0 -data8 0x4273077763F6628C, 0x3F09250FB8FC8EC9 //A1 -data8 0x44E6A1BF095B1AB3, 0x4178D5A74F6CB3B3 //A2 -data8 0x8F8E0D5060FCC76E, 0x00004076 //A3 -data8 0x800CC1DCFF092A63, 0x0000409E //A4 -data8 0xF3AB0BA9D14CDA72, 0x000040C5 //A5 -data8 0x4EDE3000A2F6D54F //A6 -data8 0x515EC613B9C8E241 //A7 -data8 0x53E003309FEEEA96 //A8 -data8 0x5660ED908D7C9A90 //A9 -data8 0x58E21E9B517B1A50 //A10 -data8 0x5B639745E4374EE2 //A11 -data8 0x5DE55BB626B2075D //A12 -data8 0x606772B7506BA747 //A13 -data8 0x62E9E581AB2E057B //A14 -data8 0x656CBAD1CF85D396 //A15 -data8 0x67EFF4EBD7989872 //A16 -data8 0x6A722D2B19B7E2F9 //A17 -data8 0x6CF5DEB3073B0743 //A18 -data8 0x6F744AC11550B93A //A19 -// Polynomial coefficients for right root on [-17, -16] -// Lgammal is approximated by polynomial within [-.154151 ; .154151 ] range -data8 0xBEDCC6291188207E, 0xBB872E3FDD48F5B7 //A0 -data8 0x42B3076EE7525EF9, 0x3F6687A5038CA81C //A1 -data8 0x4566A1AAD96EBCB5, 0x421F0FEDFBF548D2 //A2 -data8 0x8F8D4D3DE9850DBA, 0x00004082 //A3 -data8 0x800BDD6DA2CE1859, 0x000040AE //A4 -data8 0xF3A8EC4C9CDC1CE5, 0x000040D9 //A5 -data8 0x505E2FAFDB812628 //A6 -data8 0x531EC5B3A7508719 //A7 -data8 0x55E002F77E99B628 //A8 -data8 0x58A0ED4C9B4DAE54 //A9 -data8 0x5B621E4A8240F90C //A10 -data8 0x5E2396E5C8849814 //A11 -data8 0x60E55B43D8C5CE71 //A12 -data8 0x63A7722F5D45D01D //A13 -data8 0x6669E4E010DCE45A //A14 -data8 0x692CBA120D5E78F6 //A15 -data8 0x6BEFF4045350B22E //A16 -data8 0x6EB22C9807C21819 //A17 -data8 0x7175DE20D04617C4 //A18 -data8 0x74344AB87C6D655F //A19 -// Polynomial coefficients for right root on [-18, -17] -// Lgammal is approximated by polynomial within [-.154151 ; .154151 ] range -data8 0xBF28AEEE7B61D77C, 0xBBDBBB5FC57ABF79 //A0 -data8 0x42F436F56B3B8A0C, 0x3FA43EE3C5C576E9 //A1 -data8 0x45E98A22535D115D, 0x42984678BE78CC48 //A2 -data8 0xAC176F3775E6FCFC, 0x0000408E //A3 -data8 0xA3114F53A9FEB922, 0x000040BE //A4 -data8 0xA4D168A8334ABF41, 0x000040EE //A5 -data8 0x51E5B0E7EC7182BB //A6 -data8 0x54E77D67B876EAB6 //A7 -data8 0x57E9F7C30C09C4B6 //A8 -data8 0x5AED29B0488614CA //A9 -data8 0x5DF09486F87E79F9 //A10 -data8 0x60F30B199979654E //A11 -data8 0x63F60E02C7DCCC5F //A12 -data8 0x66F9B8A00EB01684 //A13 -data8 0x69FE2D3ED0700044 //A14 -data8 0x6D01C8363C7DCC84 //A15 -data8 0x700502B29C2F06E3 //A16 -data8 0x730962B4500F4A61 //A17 -data8 0x76103C6ED099192A //A18 -data8 0x79100C7132CFD6E3 //A19 -// Polynomial coefficients for right root on [-19, -18] -// Lgammal is approximated by polynomial within [-.154151 ; .154151 ] range -data8 0x3F3C19A53328A0C3, 0x3BE04ADC3FBE1458 //A0 -data8 0x4336C16C16C16C19, 0x3FE58CE3AC4A7C28 //A1 -data8 0x46702E85C0898B70, 0x432C922E412CEC6E //A2 -data8 0xF57B99A1C034335D, 0x0000409A //A3 -data8 0x82EC9634223DF909, 0x000040CF //A4 -data8 0x94F66D7557E2EA60, 0x00004103 //A5 -data8 0x5376118B79AE34D0 //A6 -data8 0x56BAE7106D52E548 //A7 -data8 0x5A00BD48CC8E25AB //A8 -data8 0x5D4529722821B493 //A9 -data8 0x608B1654AF31BBC1 //A10 -data8 0x63D182CC98AEA859 //A11 -data8 0x6716D43D5EEB05E8 //A12 -data8 0x6A5DF884FC172E1C //A13 -data8 0x6DA3CA7EBB97976B //A14 -data8 0x70EA416D0BE6D2EF //A15 -data8 0x743176C31EBB65F2 //A16 -data8 0x7777C401A8715CF9 //A17 -data8 0x7AC1110C6D350440 //A18 -data8 0x7E02D0971CF84865 //A19 -// Polynomial coefficients for right root on [-20, -19] -// Lgammal is approximated by polynomial within [-.154151 ; .154151 ] range -data8 0xBFAB767F9BE21803, 0xBC5ACEF5BB1BD8B5 //A0 -data8 0x4379999999999999, 0x4029241C7F5914C8 //A1 -data8 0x46F47AE147AE147A, 0x43AC2979B64B9D7E //A2 -data8 0xAEC33E1F67152993, 0x000040A7 //A3 -data8 0xD1B71758E219616F, 0x000040DF //A4 -data8 0x8637BD05AF6CF468, 0x00004118 //A5 -data8 0x55065E9F80F293DE //A6 -data8 0x588EADA78C44EE66 //A7 -data8 0x5C15798EE22DEF09 //A8 -data8 0x5F9E8ABFD644FA63 //A9 -data8 0x6325FD7FE29BD7CD //A10 -data8 0x66AFFC5C57E1F802 //A11 -data8 0x6A3774CD7D5C0181 //A12 -data8 0x6DC152724DE2A6FE //A13 -data8 0x7149BB138EB3D0C2 //A14 -data8 0x74D32FF8A70896C2 //A15 -data8 0x785D3749F9C72BD7 //A16 -data8 0x7BE5CCF65EBC4E40 //A17 -data8 0x7F641A891B5FC652 //A18 -data8 0x7FEFFFFFFFFFFFFF //A19 -LOCAL_OBJECT_END(lgammal_right_roots_polynomial_data) - -LOCAL_OBJECT_START(lgammal_left_roots_polynomial_data) -// Polynomial coefficients for left root on [-3, -2] -// Lgammal is approximated by polynomial within [.084641 ; -.059553 ] range -data8 0xBC0844590979B82E, 0xB8BC7CE8CE2ECC3B //A0 -data8 0xBFFEA12DA904B18C, 0xBC91A6B2BAD5EF6E //A1 -data8 0x4023267F3C265A51, 0x3CD7055481D03AED //A2 -data8 0xA0C2D618645F8E00, 0x0000C003 //A3 -data8 0xFA8256664F8CD2BE, 0x00004004 //A4 -data8 0xC2C422C103F57158, 0x0000C006 //A5 -data8 0x4084373F7CC70AF5 //A6 -data8 0xC0A12239BDD6BB95 //A7 -data8 0x40BDBA65E2709397 //A8 -data8 0xC0DA2D2504DFB085 //A9 -data8 0x40F758173CA5BF3C //A10 -data8 0xC11506C65C267E72 //A11 -data8 0x413318EE3A6B05FC //A12 -data8 0xC1517767F247DA98 //A13 -data8 0x41701237B4754D73 //A14 -data8 0xC18DB8A03BC5C3D8 //A15 -data8 0x41AB80953AC14A07 //A16 -data8 0xC1C9B7B76638D0A4 //A17 -data8 0x41EA727E3033E2D9 //A18 -data8 0xC20812C297729142 //A19 -// -// Polynomial coefficients for left root on [-4, -3] -// Lgammal is approximated by polynomial within [.147147 ; -.145158 ] range -data8 0xBC3130AE5C4F54DB, 0xB8ED23294C13398A //A0 -data8 0xC034B99D966C5646, 0xBCE2E5FE3BC3DBB9 //A1 -data8 0x406F76DEAE0436BD, 0x3D14974DDEC057BD //A2 -data8 0xE929ACEA5979BE96, 0x0000C00A //A3 -data8 0xF47C14F8A0D52771, 0x0000400E //A4 -data8 0x88B7BC036937481C, 0x0000C013 //A5 -data8 0x4173E8F3AB9FC266 //A6 -data8 0xC1B7DBBE062FB11B //A7 -data8 0x41FD2F76DE7A47A7 //A8 -data8 0xC242225FE53B124D //A9 -data8 0x4286D12AE2FBFA30 //A10 -data8 0xC2CCFFC267A3C4C0 //A11 -data8 0x431294E10008E014 //A12 -data8 0xC357FAC8C9A2DF6A //A13 -data8 0x439F2190AB9FAE01 //A14 -data8 0xC3E44C1D8E8C67C3 //A15 -data8 0x442A8901105D5A38 //A16 -data8 0xC471C4421E908C3A //A17 -data8 0x44B92CD4D59D6D17 //A18 -data8 0xC4FB3A078B5247FA //A19 -// Polynomial coefficients for left root on [-5, -4] -// Lgammal is approximated by polynomial within [.155671 ; -.155300 ] range -data8 0xBC57BF3C6E8A94C1, 0xB902FB666934AC9E //A0 -data8 0xC05D224A3EF9E41F, 0xBCF6F5713913E440 //A1 -data8 0x40BB533C678A3955, 0x3D688E53E3C72538 //A2 -data8 0x869FBFF732E99B84, 0x0000C012 //A3 -data8 0xBA9537AD61392DEC, 0x00004018 //A4 -data8 0x89EAE8B1DEA06B05, 0x0000C01F //A5 -data8 0x425A8C5C53458D3C //A6 -data8 0xC2C5068B3ED6509B //A7 -data8 0x4330FFA575E99B4E //A8 -data8 0xC39BEC12DDDF7669 //A9 -data8 0x44073825725F74F9 //A10 -data8 0xC47380EBCA299047 //A11 -data8 0x44E084DD9B666437 //A12 -data8 0xC54C2DA6BF787ACF //A13 -data8 0x45B82D65C8D6FA42 //A14 -data8 0xC624D62113FE950A //A15 -data8 0x469200CC19B45016 //A16 -data8 0xC6FFDDC6DD938E2E //A17 -data8 0x476DD7C07184B9F9 //A18 -data8 0xC7D554A30085C052 //A19 -// Polynomial coefficients for left root on [-6, -5] -// Lgammal is approximated by polynomial within [.157425 ; -.157360 ] range -data8 0x3C9E20A87C8B79F1, 0x39488BE34B2427DB //A0 -data8 0xC08661F6A43A5E12, 0xBD3D912526D759CC //A1 -data8 0x410F79DCB794F270, 0x3DB9BEE7CD3C1BF5 //A2 -data8 0xEB7404450D0005DB, 0x0000C019 //A3 -data8 0xF7AE9846DFE4D4AB, 0x00004022 //A4 -data8 0x8AF535855A95B6DA, 0x0000C02C //A5 -data8 0x43544D54E9FE240E //A6 -data8 0xC3E8684E40CE6CFC //A7 -data8 0x447DF44C1D803454 //A8 -data8 0xC512AC305439B2BA //A9 -data8 0x45A79226AF79211A //A10 -data8 0xC63E0DFF7244893A //A11 -data8 0x46D35216C3A83AF3 //A12 -data8 0xC76903BE0C390E28 //A13 -data8 0x48004A4DECFA4FD5 //A14 -data8 0xC8954FBD243DB8BE //A15 -data8 0x492BF3A31EB18DDA //A16 -data8 0xC9C2C6A864521F3A //A17 -data8 0x4A5AB127C62E8DA1 //A18 -data8 0xCAECF60EF3183C57 //A19 -// Polynomial coefficients for left root on [-7, -6] -// Lgammal is approximated by polynomial within [.157749 ; -.157739 ] range -data8 0x3CC9B9E8B8D551D6, 0x3961813C8E1E10DB //A0 -data8 0xC0B3ABF7A5CEA91F, 0xBD55638D4BCB4CC4 //A1 -data8 0x4168349A25504236, 0x3E0287ECE50CCF76 //A2 -data8 0x9EC8ED6E4C219E67, 0x0000C022 //A3 -data8 0x9279EB1B799A3FF3, 0x0000402E //A4 -data8 0x90213EF8D9A5DBCF, 0x0000C03A //A5 -data8 0x4462775E857FB71C //A6 -data8 0xC52377E70B45FDBF //A7 -data8 0x45E4F3D28EDA8C28 //A8 -data8 0xC6A6E85571BD2D0B //A9 -data8 0x47695BB17E74DF74 //A10 -data8 0xC82C5AC0ED6A662F //A11 -data8 0x48EFF8159441C2E3 //A12 -data8 0xC9B22602C1B68AE5 //A13 -data8 0x4A74BA8CE7B34100 //A14 -data8 0xCB37C7E208482E4B //A15 -data8 0x4BFB5A1D57352265 //A16 -data8 0xCCC01CB3021212FF //A17 -data8 0x4D841613AC3431D1 //A18 -data8 0xCE431C9E9EE43AD9 //A19 -// Polynomial coefficients for left root on [-8, -7] -// Lgammal is approximated by polynomial within [.157799 ; -.157798 ] range -data8 0xBCF9C7A33AD9478C, 0xB995B0470F11E5ED //A0 -data8 0xC0E3AF76FE4C2F8B, 0xBD8DBCD503250511 //A1 -data8 0x41C838E76CAAF0D5, 0x3E5D79F5E2E069C3 //A2 -data8 0x9EF345992B262CE0, 0x0000C02B //A3 -data8 0x92AE0292985FD559, 0x0000403A //A4 -data8 0x90615420C08F7D8C, 0x0000C049 //A5 -data8 0x45828139342CEEB7 //A6 -data8 0xC67384066C31E2D3 //A7 -data8 0x476502BC4DAC2C35 //A8 -data8 0xC856FAADFF22ADC6 //A9 -data8 0x49497243255AB3CE //A10 -data8 0xCA3C768489520F6B //A11 -data8 0x4B300D1EA47AF838 //A12 -data8 0xCC223B0508AC620E //A13 -data8 0x4D14D46583338CD8 //A14 -data8 0xCE07E7A87AA068E4 //A15 -data8 0x4EFB811AD2F8BEAB //A16 -data8 0xCFF0351B51508523 //A17 -data8 0x50E4364CCBF53100 //A18 -data8 0xD1D33CFD0BF96FA6 //A19 -// Polynomial coefficients for left root on [-9, -8] -// Lgammal is approximated by polynomial within [.157806 ; -.157806 ] range -data8 0x3D333E4438B1B9D4, 0x39E7B956B83964C1 //A0 -data8 0xC11625EDFC63DCD8, 0xBDCF39625709EFAC //A1 -data8 0x422EA8C150480F16, 0x3EC16ED908AB7EDD //A2 -data8 0xE2598725E2E11646, 0x0000C034 //A3 -data8 0xEAFF2346DE3EBC98, 0x00004046 //A4 -data8 0x821E90DE12A0F05F, 0x0000C059 //A5 -data8 0x46B2C334AE5366FE //A6 -data8 0xC7D64314B43191B6 //A7 -data8 0x48FAF6ED5899E01B //A8 -data8 0xCA2096E4472AF37D //A9 -data8 0x4B44AAF49FB7E4C8 //A10 -data8 0xCC6A02469F2BD920 //A11 -data8 0x4D9080626D2EFC07 //A12 -data8 0xCEB515EDCF0695F7 //A13 -data8 0x4FDB1AC69BF36960 //A14 -data8 0xD1017F8274339270 //A15 -data8 0x5226A684961BAE2F //A16 -data8 0xD34E085C088404A5 //A17 -data8 0x547511892FF8960E //A18 -data8 0xD5968FA3B1ED67A9 //A19 -// Polynomial coefficients for left root on [-10, -9] -// Lgammal is approximated by polynomial within [.157807 ; -.157807 ] range -data8 0xBD355818A2B42BA2, 0xB9B7320B6A0D61EA //A0 -data8 0xC14BAF7DA5F3770E, 0xBDE64AF9A868F719 //A1 -data8 0x4297F3E8791F9CD3, 0x3F2A553E59B4835E //A2 -data8 0xDD0C5F7E551BD13C, 0x0000C03E //A3 -data8 0x8F6F0A3B2EB08BBB, 0x00004054 //A4 -data8 0xC68D4D5AD230BA08, 0x0000C069 //A5 -data8 0x47F1E4D8C35D1A3E //A6 -data8 0xC94A8A191DB0A466 //A7 -data8 0x4AA4174F65FE6AE8 //A8 -data8 0xCBFEE6D90F94E9DD //A9 -data8 0x4D580FD3438BE16C //A10 -data8 0xCEB2ECD456D50224 //A11 -data8 0x500E049F7FE64546 //A12 -data8 0xD167F92D9600F378 //A13 -data8 0x52C342AE2B43261A //A14 -data8 0xD41F15DEEDA4B67E //A15 -data8 0x55792638748AFB7D //A16 -data8 0xD6D4D760074F6E6B //A17 -data8 0x5832469D58ED3FA9 //A18 -data8 0xD988769F3DC76642 //A19 -// Polynomial coefficients for left root on [-11, -10] -// Lgammal is approximated by polynomial within [.157807 ; -.157807 ] range -data8 0xBDA050601F39778A, 0xBA0D4D1CE53E8241 //A0 -data8 0xC18308A7D8EA4039, 0xBE370C379D3EAD41 //A1 -data8 0x4306A49380644E6C, 0x3FBBB143C0E7B5C8 //A2 -data8 0x8FA8FB233E4AA6D2, 0x0000C049 //A3 -data8 0x802CC9D8AEAC207D, 0x00004062 //A4 -data8 0xF3F73EE651A37A13, 0x0000C07A //A5 -data8 0x493E3B550A7B9568 //A6 -data8 0xCACED38DAA060929 //A7 -data8 0x4C600B346BAB3BC6 //A8 -data8 0xCDF0F719193E3D26 //A9 -data8 0x4F8229F24528B151 //A10 -data8 0xD113A4C2D32FBBE2 //A11 -data8 0x52A56BC13DC4474D //A12 -data8 0xD43785CFAF5E3CE3 //A13 -data8 0x55C9FC3EA5941202 //A14 -data8 0xD75CD545A3341AF5 //A15 -data8 0x58F009911F77C282 //A16 -data8 0xDA8246294D210BEC //A17 -data8 0x5C1608AAC32C3A8E //A18 -data8 0xDDA446E570A397D5 //A19 -// Polynomial coefficients for left root on [-12, -11] -// Lgammal is approximated by polynomial within [.157807 ; -.157807 ] range -data8 0x3DEACBB3081C502E, 0x3A8AA6F01DEDF745 //A0 -data8 0xC1BC8CFBFB0A9912, 0xBE6556B6504A2AE6 //A1 -data8 0x43797926206941D7, 0x40289A9644C2A216 //A2 -data8 0xF26D2A78446D0839, 0x0000C053 //A3 -data8 0xA238B1D937FFED38, 0x00004070 //A4 -data8 0xE793B4F6DE470538, 0x0000C08C //A5 -data8 0x4A9585BDC44DC45D //A6 -data8 0xCC60759520342C47 //A7 -data8 0x4E29B2F3694C0404 //A8 -data8 0xCFF4619AE7B6BBAB //A9 -data8 0x51C05DADF52B89E8 //A10 -data8 0xD38A8C7F48819A4A //A11 -data8 0x5555B6932D687860 //A12 -data8 0xD721E1FACB6C1B5B //A13 -data8 0x58EDA1E2677C8F91 //A14 -data8 0xDAB8A8EC523C1F71 //A15 -data8 0x5C84930133F30411 //A16 -data8 0xDE51952FDFD1EC49 //A17 -data8 0x601FCCEC1BBD25F1 //A18 -data8 0xE1E5F2D76B610920 //A19 -// Polynomial coefficients for left root on [-13, -12] -// Lgammal is approximated by polynomial within [.157807 ; -.157807 ] range -data8 0xBE01612F373268ED, 0xBA97B7A18CDF103B //A0 -data8 0xC1F7328CBF7A4FAC, 0xBE89A25A6952F481 //A1 -data8 0x43F0D0FA2DBDA237, 0x40A0422EC1CE6084 //A2 -data8 0x82082DF2D32686C5, 0x0000C05F //A3 -data8 0x8D64EE9B42E68B36, 0x0000407F //A4 -data8 0xA3FFD82E08C630C9, 0x0000C09F //A5 -data8 0x4BF8C49D99123466 //A6 -data8 0xCDFEC79DDF1119ED //A7 -data8 0x50038615A892D242 //A8 -data8 0xD20929453DC8B537 //A9 -data8 0x54106A78083BA1EE //A10 -data8 0xD615A302C69E27B2 //A11 -data8 0x581CC175870FF16F //A12 -data8 0xDA233E0979E12B74 //A13 -data8 0x5C29E822BC568C80 //A14 -data8 0xDE31845DB5340FBC //A15 -data8 0x6037BFC6D498D5F9 //A16 -data8 0xE2407D92CD613E82 //A17 -data8 0x64483B9B62367EB7 //A18 -data8 0xE64B2DC830E8A799 //A1 -// Polynomial coefficients for left root on [-14, -13] -// Lgammal is approximated by polynomial within [.157807 ; -.157807 ] range -data8 0x3E563D0B930B371F, 0x3AE779957E14F012 //A0 -data8 0xC2344C3B2F083767, 0xBEC0B7769AA3DD66 //A1 -data8 0x4469BFFF28B50D07, 0x41181E3F13ED2401 //A2 -data8 0xAE38F64DCB24D9EE, 0x0000C06A //A3 -data8 0xA5C3F52C1B3506F2, 0x0000408E //A4 -data8 0xA83BC857BCD6BA92, 0x0000C0B2 //A5 -data8 0x4D663B4727B4D81A //A6 -data8 0xCFA82C965B0F62E9 //A7 -data8 0x51EAD58C02905B71 //A8 -data8 0xD42E427970FA56AD //A9 -data8 0x56714644C57D8476 //A10 -data8 0xD8B3EC2037EC95F2 //A11 -data8 0x5AF72AE68BBA5B3D //A12 -data8 0xDD3B2152C67AA6B7 //A13 -data8 0x5F7FF5F082861B8B //A14 -data8 0xE1C2E8BE125A5B7A //A15 -data8 0x64066E92FE9EBE7D //A16 -data8 0xE64B4201CDF9F138 //A17 -data8 0x689186351E58AA88 //A18 -data8 0xEAD132A585DFC60A //A19 -// Polynomial coefficients for left root on [-15, -14] -// Lgammal is approximated by polynomial within [.157807 ; -.157807 ] range -data8 0xBE6D7DDE12700AC1, 0xBB1E025BF1667FB5 //A0 -data8 0xC273077763F60AD5, 0xBF2A1698184C7A9A //A1 -data8 0x44E6A1BF095B1AB3, 0x4178D5AE8A4A2874 //A2 -data8 0x8F8E0D5060FCC767, 0x0000C076 //A3 -data8 0x800CC1DCFF092A57, 0x0000409E //A4 -data8 0xF3AB0BA9D14D37D1, 0x0000C0C5 //A5 -data8 0x4EDE3000A2F6D565 //A6 -data8 0xD15EC613B9C8C800 //A7 -data8 0x53E003309FEECCAA //A8 -data8 0xD660ED908D8B15C4 //A9 -data8 0x58E21E9B51A1C4AE //A10 -data8 0xDB639745DB82210D //A11 -data8 0x5DE55BB60C68FCF6 //A12 -data8 0xE06772BA3FCA23C6 //A13 -data8 0x62E9E58B4F702C31 //A14 -data8 0xE56CBA49B071ABE2 //A15 -data8 0x67EFF31E4F2BA36A //A16 -data8 0xEA7232C8804F32C3 //A17 -data8 0x6CF5EFEE929A0928 //A18 -data8 0xEF742EE03EC3E8FF //A19 -// Polynomial coefficients for left root on [-16, -15] -// Lgammal is approximated by polynomial within [.157807 ; -.157807 ] range -data8 0xBEDCC628FEAC7A1B, 0xBB80582C8BEBB198 //A0 -data8 0xC2B3076EE752595E, 0xBF5388F55AFAE53E //A1 -data8 0x4566A1AAD96EBCB5, 0x421F0FEFE2444293 //A2 -data8 0x8F8D4D3DE9850DB2, 0x0000C082 //A3 -data8 0x800BDD6DA2CE184C, 0x000040AE //A4 -data8 0xF3A8EC4C9CDC7A43, 0x0000C0D9 //A5 -data8 0x505E2FAFDB81263F //A6 -data8 0xD31EC5B3A7506CD9 //A7 -data8 0x55E002F77E999810 //A8 -data8 0xD8A0ED4C9B5C2900 //A9 -data8 0x5B621E4A8267C401 //A10 -data8 0xDE2396E5BFCFDA7A //A11 -data8 0x60E55B43BE6F9A79 //A12 -data8 0xE3A772324C7405FA //A13 -data8 0x6669E4E9B7E57A2D //A14 -data8 0xE92CB989F8A8FB37 //A15 -data8 0x6BEFF2368849A36E //A16 -data8 0xEEB23234FE191D55 //A17 -data8 0x7175EF5D1080B105 //A18 -data8 0xF4342ED7B1B7BE31 //A19 -// Polynomial coefficients for left root on [-17, -16] -// Lgammal is approximated by polynomial within [.157807 ; -.157807 ] range -data8 0xBF28AEEE7B58C790, 0xBBC4448DE371FA0A //A0 -data8 0xC2F436F56B3B89B1, 0xBF636755245AC63A //A1 -data8 0x45E98A22535D115D, 0x4298467DA93DB784 //A2 -data8 0xAC176F3775E6FCF2, 0x0000C08E //A3 -data8 0xA3114F53A9FEB908, 0x000040BE //A4 -data8 0xA4D168A8334AFE5A, 0x0000C0EE //A5 -data8 0x51E5B0E7EC7182CF //A6 -data8 0xD4E77D67B876D6B4 //A7 -data8 0x57E9F7C30C098C83 //A8 -data8 0xDAED29B0489EF7A7 //A9 -data8 0x5DF09486F8A524B8 //A10 -data8 0xE0F30B19910A2393 //A11 -data8 0x63F60E02AB3109F4 //A12 -data8 0xE6F9B8A3431854D5 //A13 -data8 0x69FE2D4A6D94218E //A14 -data8 0xED01C7E272A73560 //A15 -data8 0x7005017D82B186B6 //A16 -data8 0xF3096A81A69BD8AE //A17 -data8 0x76104951BAD67D5C //A18 -data8 0xF90FECC99786FD5B //A19 -// Polynomial coefficients for left root on [-18, -17] -// Lgammal is approximated by polynomial within [.157807 ; -.157807 ] range -data8 0x3F3C19A53328E26A, 0x3BE238D7BA036B3B //A0 -data8 0xC336C16C16C16C13, 0xBFEACE245DEC56F3 //A1 -data8 0x46702E85C0898B70, 0x432C922B64FD1DA4 //A2 -data8 0xF57B99A1C0343350, 0x0000C09A //A3 -data8 0x82EC9634223DF90D, 0x000040CF //A4 -data8 0x94F66D7557E3237D, 0x0000C103 //A5 -data8 0x5376118B79AE34D6 //A6 -data8 0xD6BAE7106D52CE49 //A7 -data8 0x5A00BD48CC8E11AB //A8 -data8 0xDD4529722833E2DF //A9 -data8 0x608B1654AF5F46AF //A10 -data8 0xE3D182CC90D8723F //A11 -data8 0x6716D43D46706AA0 //A12 -data8 0xEA5DF888C5B428D3 //A13 -data8 0x6DA3CA85888931A6 //A14 -data8 0xF0EA40EF2AC7E070 //A15 -data8 0x743175D1A251AFCD //A16 -data8 0xF777CB6E2B550D73 //A17 -data8 0x7AC11E468A134A51 //A18 -data8 0xFE02B6BDD0FC40AA //A19 -// Polynomial coefficients for left root on [-19, -18] -// Lgammal is approximated by polynomial within [.157807 ; -.157807 ] range -data8 0xBFAB767F9BE217FC, 0xBC4A5541CE0D8D0D //A0 -data8 0xC379999999999999, 0xC01A84981B490BE8 //A1 -data8 0x46F47AE147AE147A, 0x43AC2987BBC466EB //A2 -data8 0xAEC33E1F67152987, 0x0000C0A7 //A3 -data8 0xD1B71758E2196153, 0x000040DF //A4 -data8 0x8637BD05AF6D420E, 0x0000C118 //A5 -data8 0x55065E9F80F293B2 //A6 -data8 0xD88EADA78C44BFA7 //A7 -data8 0x5C15798EE22EC6CD //A8 -data8 0xDF9E8ABFD67895CF //A9 -data8 0x6325FD7FE13B0DE0 //A10 -data8 0xE6AFFC5C3DE70858 //A11 -data8 0x6A3774CE81C70D43 //A12 -data8 0xEDC1527412D8129F //A13 -data8 0x7149BABCDA8B7A72 //A14 -data8 0xF4D330AD49071BB5 //A15 -data8 0x785D4046F4C5F1FD //A16 -data8 0xFBE59BFEDBA73FAF //A17 -data8 0x7F64BEF2B2EC8DA1 //A18 -data8 0xFFEFFFFFFFFFFFFF //A19 -LOCAL_OBJECT_END(lgammal_left_roots_polynomial_data) - - -//============================================================== -// Code -//============================================================== - -.section .text -GLOBAL_LIBM_ENTRY(__libm_lgammal) -{ .mfi - getf.exp rSignExpX = f8 - // Test x for NaTVal, NaN, +/-0, +/-INF, denormals - fclass.m p6,p0 = f8,0x1EF - addl r17Ones = 0x1FFFF, r0 // exponent mask -} -{ .mfi - addl GR_ad_z_1 = @ltoff(Constants_Z_1#),gp - fcvt.fx.s1 fXint = f8 // Convert arg to int (int repres. in FR) - adds rDelta = 0x3FC, r0 -} -;; -{ .mfi - getf.sig rSignifX = f8 - fcmp.lt.s1 p15, p14 = f8, f0 - shl rDelta = rDelta, 20 // single precision 1.5 -} -{ .mfi - ld8 GR_ad_z_1 = [GR_ad_z_1]// get pointer to Constants_Z_1 - fma.s1 fTwo = f1, f1, f1 // 2.0 - addl rExp8 = 0x10002, r0 // exponent of 8.0 -} -;; -{ .mfi - alloc rPFS_SAVED = ar.pfs, 0, 34, 4, 0 // get some registers - fmerge.s fAbsX = f1, f8 // |x| - and rExpX = rSignExpX, r17Ones // mask sign bit -} -{ .mib - addl rExpHalf = 0xFFFE, r0 // exponent of 0.5 - addl rExp2 = 0x10000, r0 // exponent of 2.0 - // branch out if x is NaTVal, NaN, +/-0, +/-INF, or denormalized number -(p6) br.cond.spnt lgammal_spec -} -;; -_deno_back_to_main_path: -{ .mfi - // Point to Constants_G_H_h1 - add rTbl1Addr = 0x040, GR_ad_z_1 - frcpa.s1 fRcpX, p0 = f1, f8 // initial approximation of 1/x - extr.u GR_Index1 = rSignifX, 59, 4 -} -{ .mib -(p14) cmp.ge.unc p8, p0 = rExpX, rExp8 // p8 = 1 if x >= 8.0 - adds rZ625 = 0x3F2, r0 -(p8) br.cond.spnt lgammal_big_positive // branch out if x >= 8.0 -} -;; -{ .mfi - shladd rZ1offsett = GR_Index1, 2, GR_ad_z_1 // Point to Z_1 - fmerge.se fSignifX = f1, f8 // sifnificand of x - // Get high 15 bits of significand - extr.u GR_X_0 = rSignifX, 49, 15 -} -{ .mib - cmp.lt.unc p9, p0 = rExpX, rExpHalf // p9 = 1 if |x| < 0.5 - // set p11 if 2 <= x < 4 -(p14) cmp.eq.unc p11, p0 = rExpX, rExp2 -(p9) br.cond.spnt lgammal_0_half // branch out if |x| < 0.5 -} -;; -{ .mfi - ld4 GR_Z_1 = [rZ1offsett] // Load Z_1 - fms.s1 fA5L = f1, f1, f8 // for 0.75 <= x < 1.3125 path - shl rZ625 = rZ625, 20 // sinfle precision 0.625 -} -{ .mib - setf.s FR_MHalf = rDelta - // set p10 if x >= 4.0 -(p14) cmp.gt.unc p10, p0 = rExpX, rExp2 - // branch to special path for 4.0 <= x < 8 -(p10) br.cond.spnt lgammal_4_8 -} -;; -{ .mfi - // for 1.3125 <= x < 1.5625 path - addl rPolDataPtr= @ltoff(lgammal_loc_min_data),gp - // argument of polynomial approximation for 1.5625 <= x < 2.25 - fms.s1 fB4 = f8, f1, fTwo - cmp.eq p12, p0 = rExpX, rExpHalf -} -{ .mib - addl rExpOne = 0xFFFF, r0 // exponent of 1.0 - // set p10 if significand of x >= 1.125 -(p11) cmp.le p11, p0 = 2, GR_Index1 -(p11) br.cond.spnt lgammal_2Q_4 -} -;; -{ .mfi - // point to xMin for 1.3125 <= x < 1.5625 path - ld8 rPolDataPtr = [rPolDataPtr] - fcvt.xf fFltIntX = fXint // RTN(x) -(p14) cmp.eq.unc p13, p7 = rExpX, rExpOne // p13 set if 1.0 <= x < 2.0 -} -{ .mib - setf.s FR_FracX = rZ625 - // set p12 if |x| < 0.75 -(p12) cmp.gt.unc p12, p0 = 8, GR_Index1 - // branch out to special path for |x| < 0.75 -(p12) br.cond.spnt lgammal_half_3Q -} -;; -.pred.rel "mutex", p7, p13 -{ .mfi - getf.sig rXRnd = fXint // integer part of the input value - fnma.s1 fInvX = f8, fRcpX, f1 // start of 1st NR iteration - // Get bits 30-15 of X_0 * Z_1 - pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 -} -{ .mib -(p7) cmp.eq p6, p0 = rExpX, rExp2 // p6 set if 2.0 <= x < 2.25 -(p13) cmp.le p6, p0 = 9, GR_Index1 - // branch to special path 1.5625 <= x < 2.25 -(p6) br.cond.spnt lgammal_13Q_2Q -} -;; -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mfi - shladd GR_ad_tbl_1 = GR_Index1, 4, rTbl1Addr // Point to G_1 - fma.s1 fSix = fTwo, fTwo, fTwo // 6.0 - add GR_ad_q = -0x60, GR_ad_z_1 // Point to Constants_Q -} -{ .mib - add rTmpPtr3 = -0x50, GR_ad_z_1 -(p13) cmp.gt p7, p0 = 5, GR_Index1 - // branch to special path 0.75 <= x < 1.3125 -(p7) br.cond.spnt lgammal_03Q_1Q -} -;; -{ .mfi - add rTmpPtr = 8, GR_ad_tbl_1 - fma.s1 fRoot = f8, f1, f1 // x + 1 - // Absolute value of int arg. Will be used as index in table with roots - sub rXRnd = r0, rXRnd -} -{ .mib - ldfe fA5L = [rPolDataPtr], 16 // xMin - addl rNegSingularity = 0x3003E, r0 -(p14) br.cond.spnt lgammal_loc_min -} -;; -{ .mfi - ldfps FR_G, FR_H = [GR_ad_tbl_1], 8 // Load G_1, H_1 - nop.f 0 - add rZ2Addr = 0x140, GR_ad_z_1 // Point to Constants_Z_2 -} -{ .mib - ldfd FR_h = [rTmpPtr] // Load h_1 - // If arg is less or equal to -2^63 - cmp.geu.unc p8,p0 = rSignExpX, rNegSingularity - // Singularity for x < -2^63 since all such arguments are integers - // branch to special code which deals with singularity -(p8) br.cond.spnt lgammal_singularity -} -;; -{ .mfi - ldfe FR_log2_hi = [GR_ad_q], 32 // Load log2_hi - nop.f 0 - extr.u GR_Index2 = GR_X_1, 6, 4 // Extract bits 6-9 of X_1 -} -{ .mfi - ldfe FR_log2_lo = [rTmpPtr3], 32 // Load log2_lo - fms.s1 fDx = f8, f1, fFltIntX // x - RTN(x) - // index in table with roots and bounds - adds rXint = -2, rXRnd -} -;; -{ .mfi - ldfe FR_Q4 = [GR_ad_q], 32 // Load Q4 - nop.f 0 - // set p12 if x may be close to negative root: -19.5 < x < -2.0 - cmp.gtu p12, p0 = 18, rXint -} -{ .mfi - shladd GR_ad_z_2 = GR_Index2, 2, rZ2Addr // Point to Z_2 - fma.s1 fRcpX = fInvX, fRcpX, fRcpX // end of 1st NR iteration - // Point to Constants_G_H_h2 - add rTbl2Addr = 0x180, GR_ad_z_1 -} -;; -{ .mfi - shladd GR_ad_tbl_2 = GR_Index2, 4, rTbl2Addr // Point to G_2 - // set p9 if x is integer and negative - fcmp.eq.s1 p9, p0 = f8,fFltIntX - // Point to Constants_G_H_h3 - add rTbl3Addr = 0x280, GR_ad_z_1 -} -{ .mfi - ld4 GR_Z_2 = [GR_ad_z_2] // Load Z_2 - nop.f 0 - sub GR_N = rExpX, rExpHalf, 1 -} -;; -{ .mfi - ldfe FR_Q3 = [rTmpPtr3], 32 // Load Q3 - nop.f 0 - // Point to lnsin polynomial coefficients - adds rLnSinDataPtr = 864, rTbl3Addr -} -{ .mfi - ldfe FR_Q2 = [GR_ad_q],32 // Load Q2 - nop.f 0 - add rTmpPtr = 8, GR_ad_tbl_2 -} -;; -{ .mfi - ldfe FR_Q1 = [rTmpPtr3] // Load Q1 - fcmp.lt.s1 p0, p15 = fAbsX, fSix // p15 is set when x < -6.0 - // point to table with roots and bounds - adds rRootsBndAddr = -1296, GR_ad_z_1 -} -{ .mfb - // Put integer N into rightmost significand - setf.sig fFloatN = GR_N - fma.s1 fThirteen = fSix, fTwo, f1 // 13.0 - // Singularity if -2^63 < x < 0 and x is integer - // branch to special code which deals with singularity -(p9) br.cond.spnt lgammal_singularity -} -;; -{ .mfi - ldfps FR_G2, FR_H2 = [GR_ad_tbl_2] // Load G_2, H_2 - // y = |x|/2^(exponent(x)) - 1.5 - fms.s1 FR_FracX = fSignifX, f1, FR_MHalf - // Get bits 30-15 of X_1 * Z_2 - pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 -} -{ .mfi - ldfd FR_h2 = [rTmpPtr] // Load h_2 - fma.s1 fDxSqr = fDx, fDx, f0 // deltaX^2 - adds rTmpPtr3 = 128, rLnSinDataPtr -} -;; -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mfi - getf.exp rRoot = fRoot // sign and biased exponent of (x + 1) - nop.f 0 - // set p6 if -4 < x <= -2 - cmp.eq p6, p0 = rExpX, rExp2 -} -{ .mfi - ldfpd fLnSin2, fLnSin2L = [rLnSinDataPtr], 16 - fnma.s1 fInvX = f8, fRcpX, f1 // start of 2nd NR iteration - sub rIndexPol = rExpX, rExpHalf // index of polynom -} -;; -{ .mfi - ldfe fLnSin4 = [rLnSinDataPtr], 96 - // p10 is set if x is potential "right" root - // p11 set for possible "left" root - fcmp.lt.s1 p10, p11 = fDx, f0 - shl rIndexPol = rIndexPol, 6 // (i*16)*4 -} -{ .mfi - ldfpd fLnSin18, fLnSin20 = [rTmpPtr3], 16 - nop.f 0 - mov rExp2tom7 = 0x0fff8 // Exponent of 2^-7 -} -;; -{ .mfi - getf.sig rSignifDx = fDx // Get significand of RTN(x) - nop.f 0 - // set p6 if -4 < x <= -3.0 -(p6) cmp.le.unc p6, p0 = 0x8, GR_Index1 -} -{ .mfi - ldfpd fLnSin22, fLnSin24 = [rTmpPtr3], 16 - nop.f 0 - // mask sign bit in the exponent of (x + 1) - and rRoot = rRoot, r17Ones -} -;; -{ .mfi - ldfe fLnSin16 = [rLnSinDataPtr], -80 - nop.f 0 - extr.u GR_Index3 = GR_X_2, 1, 5 // Extract bits 1-5 of X_2 -} -{ .mfi - ldfpd fLnSin26, fLnSin28 = [rTmpPtr3], 16 - nop.f 0 - and rXRnd = 1, rXRnd -} -;; -{ .mfi - shladd GR_ad_tbl_3 = GR_Index3, 4, rTbl3Addr // Point to G_3 - fms.s1 fDxSqrL = fDx, fDx, fDxSqr // low part of deltaX^2 - // potential "left" root -(p11) adds rRootsBndAddr = 560, rRootsBndAddr -} -{ .mib - ldfpd fLnSin30, fLnSin32 = [rTmpPtr3], 16 - // set p7 if |x+1| < 2^-7 - cmp.lt p7, p0 = rRoot, rExp2tom7 - // branch to special path for |x+1| < 2^-7 -(p7) br.cond.spnt _closeToNegOne -} -;; -{ .mfi - ldfps FR_G3, FR_H3 = [GR_ad_tbl_3], 8 // Load G_3, H_3 - fcmp.lt.s1 p14, p0 = fAbsX, fThirteen // set p14 if x > -13.0 - // base address of polynomial on range [-6.0, -0.75] - adds rPolDataPtr = 3440, rTbl3Addr -} -{ .mfi - // (i*16)*4 + (i*16)*8 - offsett of polynomial on range [-6.0, -0.75] - shladd rTmpPtr = rIndexPol, 2, rIndexPol - fma.s1 fXSqr = FR_FracX, FR_FracX, f0 // y^2 - // point to left "near root" bound -(p12) shladd rRootsBndAddr = rXint, 4, rRootsBndAddr -} -;; -{ .mfi - ldfpd fLnSin34, fLnSin36 = [rTmpPtr3], 16 - fma.s1 fRcpX = fInvX, fRcpX, fRcpX // end of 2nd NR iteration - // add special offsett if -4 < x <= -3.0 -(p6) adds rPolDataPtr = 640, rPolDataPtr -} -{ .mfi - // point to right "near root" bound - adds rTmpPtr2 = 8, rRootsBndAddr - fnma.s1 fMOne = f1, f1, f0 // -1.0 - // Point to Bernulli numbers - adds rBernulliPtr = 544, rTbl3Addr -} -;; -{ .mfi - // left bound of "near root" range -(p12) ld8 rLeftBound = [rRootsBndAddr] - fmerge.se fNormDx = f1, fDx // significand of DeltaX - // base address + offsett for polynomial coeff. on range [-6.0, -0.75] - add rPolDataPtr = rPolDataPtr, rTmpPtr -} -{ .mfi - // right bound of "near root" range -(p12) ld8 rRightBound = [rTmpPtr2] - fcvt.xf fFloatN = fFloatN - // special "Bernulli" numbers for Stirling's formula for -13 < x < -6 -(p14) adds rBernulliPtr = 160, rBernulliPtr -} -;; -{ .mfi - ldfd FR_h3 = [GR_ad_tbl_3] // Load h_3 - fmpy.s1 FR_G = FR_G, FR_G2 // G = G_1 * G_2 - adds rTmpPtr3 = -160, rTmpPtr3 -} -{ .mfb - adds rTmpPtr = 80, rPolDataPtr - fadd.s1 FR_H = FR_H, FR_H2 // H = H_1 + H_2 - // p15 is set if -2^63 < x < 6.0 and x is not an integer - // branch to path with implementation using Stirling's formula for neg. x -(p15) br.cond.spnt _negStirling -} -;; -{ .mfi - ldfpd fA3, fA3L = [rPolDataPtr], 16 // A3 - fma.s1 fDelX4 = fDxSqr, fDxSqr, f0 // deltaX^4 - // Get high 4 bits of signif - extr.u rIndex1Dx = rSignifDx, 59, 4 -} -{ .mfi - ldfe fA5 = [rTmpPtr], -16 // A5 - fadd.s1 FR_h = FR_h, FR_h2 // h = h_1 + h_2 - adds rLnSinTmpPtr = 16, rLnSinDataPtr -} -;; -{ .mfi - ldfpd fA0, fA0L = [rPolDataPtr], 16 // A0 - fma.s1 fLnSin20 = fLnSin20, fDxSqr, fLnSin18 - // Get high 15 bits of significand - extr.u rX0Dx = rSignifDx, 49, 15 -} -{ .mfi - ldfe fA4 = [rTmpPtr], 192 // A4 - fms.s1 fXSqrL = FR_FracX, FR_FracX, fXSqr // low part of y^2 - shladd GR_ad_z_1 = rIndex1Dx, 2, GR_ad_z_1 // Point to Z_1 -} -;; -{ .mfi - ldfpd fA1, fA1L = [rPolDataPtr], 16 // A1 - fma.s1 fX4 = fXSqr, fXSqr, f0 // y^4 - adds rTmpPtr2 = 32, rTmpPtr -} -{ .mfi - ldfpd fA18, fA19 = [rTmpPtr], 16 // A18, A19 - fma.s1 fLnSin24 = fLnSin24, fDxSqr, fLnSin22 - nop.i 0 -} -;; -{ .mfi - ldfe fLnSin6 = [rLnSinDataPtr], 32 - fma.s1 fLnSin28 = fLnSin28, fDxSqr, fLnSin26 - nop.i 0 -} -{ .mfi - ldfe fLnSin8 = [rLnSinTmpPtr], 32 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA20, fA21 = [rTmpPtr], 16 // A20, A21 - fma.s1 fLnSin32 = fLnSin32, fDxSqr, fLnSin30 - nop.i 0 -} -{ .mfi - ldfpd fA22, fA23 = [rTmpPtr2], 16 // A22, A23 - fma.s1 fB20 = f1, f1, FR_MHalf // 2.5 -(p12) cmp.ltu.unc p6, p0 = rSignifX, rLeftBound -} -;; -{ .mfi - ldfpd fA2, fA2L = [rPolDataPtr], 16 // A2 - fmpy.s1 FR_G = FR_G, FR_G3 // G = (G_1 * G_2) * G_3 - // set p6 if x falls in "near root" range -(p6) cmp.geu.unc p6, p0 = rSignifX, rRightBound -} -{ .mfb - adds rTmpPtr3 = -64, rTmpPtr - fadd.s1 FR_H = FR_H, FR_H3 // H = (H_1 + H_2) + H_3 - // branch to special path if x falls in "near root" range -(p6) br.cond.spnt _negRoots -} -;; -{ .mfi - ldfpd fA24, fA25 = [rTmpPtr2], 16 // A24, A25 - fma.s1 fLnSin36 = fLnSin36, fDxSqr, fLnSin34 -(p11) cmp.eq.unc p7, p0 = 1,rXint // p7 set if -3.0 < x < -2.5 -} -{ .mfi - adds rTmpPtr = -48, rTmpPtr - fma.s1 fLnSin20 = fLnSin20, fDxSqr, fLnSin16 - addl rDelta = 0x5338, r0 // significand of -2.605859375 -} -;; -{ .mfi - getf.exp GR_N = fDx // Get N = exponent of DeltaX - fma.s1 fX6 = fX4, fXSqr, f0 // y^6 - // p7 set if -2.605859375 <= x < -2.5 -(p7) cmp.gt.unc p7, p0 = rDelta, GR_X_0 -} -{ .mfb - ld4 GR_Z_1 = [GR_ad_z_1] // Load Z_1 - fma.s1 fDelX8 = fDelX4, fDelX4, f0 // deltaX^8 - // branch to special path for -2.605859375 <= x < -2.5 -(p7) br.cond.spnt _neg2andHalf -} -;; -{ .mfi - ldfpd fA14, fA15 = [rTmpPtr3], 16 // A14, A15 - fadd.s1 FR_h = FR_h, FR_h3 // h = (h_1 + h_2) + h_3 - adds rTmpPtr2 = 128 , rPolDataPtr -} -{ .mfi - ldfpd fA16, fA17 = [rTmpPtr], 16 // A16, A17 - fma.s1 fLnSin28 = fLnSin28, fDelX4, fLnSin24 - adds rPolDataPtr = 144 , rPolDataPtr -} -;; -{ .mfi - ldfe fLnSin10 = [rLnSinDataPtr], 32 - fma.s1 fRes1H = fA3, FR_FracX, f0 // (A3*y)hi - and GR_N = GR_N, r17Ones // mask sign bit -} -{ .mfi - ldfe fLnSin12 = [rLnSinTmpPtr] - fma.s1 fDelX6 = fDxSqr, fDelX4, f0 // DeltaX^6 - shladd GR_ad_tbl_1 = rIndex1Dx, 4, rTbl1Addr // Point to G_1 -} -;; -{ .mfi - ldfe fA13 = [rPolDataPtr], -32 // A13 - fma.s1 fA4 = fA5, FR_FracX, fA4 // A5*y + A4 - // Get bits 30-15 of X_0 * Z_1 - pmpyshr2.u GR_X_1 = rX0Dx, GR_Z_1, 15 -} -{ .mfi - ldfe fA12 = [rTmpPtr2], -32 // A12 - fms.s1 FR_r = FR_G, fSignifX, f1 // r = G * S_hi - 1 - sub GR_N = GR_N, rExpHalf, 1 // unbisaed exponent of DeltaX -} -;; -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -.pred.rel "mutex",p10,p11 -{ .mfi - ldfe fA11 = [rPolDataPtr], -32 // A11 - // High part of log(|x|) = Y_hi = N * log2_hi + H - fma.s1 fResH = fFloatN, FR_log2_hi, FR_H -(p10) cmp.eq p8, p9 = rXRnd, r0 -} -{ .mfi - ldfe fA10 = [rTmpPtr2], -32 // A10 - fma.s1 fRes6H = fA1, FR_FracX, f0 // (A1*y)hi -(p11) cmp.eq p9, p8 = rXRnd, r0 -} -;; -{ .mfi - ldfe fA9 = [rPolDataPtr], -32 // A9 - fma.s1 fB14 = fLnSin6, fDxSqr, f0 // (LnSin6*deltaX^2)hi - cmp.eq p6, p7 = 4, rSgnGamSize -} -{ .mfi - ldfe fA8 = [rTmpPtr2], -32 // A8 - fma.s1 fA18 = fA19, FR_FracX, fA18 - nop.i 0 -} -;; -{ .mfi - ldfe fA7 = [rPolDataPtr] // A7 - fma.s1 fA23 = fA23, FR_FracX, fA22 - nop.i 0 -} -{ .mfi - ldfe fA6 = [rTmpPtr2] // A6 - fma.s1 fA21 = fA21, FR_FracX, fA20 - nop.i 0 -} -;; -{ .mfi - ldfe fLnSin14 = [rLnSinDataPtr] - fms.s1 fRes1L = fA3, FR_FracX, fRes1H // delta((A3*y)hi) - extr.u GR_Index2 = GR_X_1, 6, 4 // Extract bits 6-9 of X_1 -} -{ .mfi - setf.sig fFloatNDx = GR_N - fadd.s1 fPol = fRes1H, fA2 // (A3*y + A2)hi - nop.i 0 -} -;; -{ .mfi - ldfps FR_G, FR_H = [GR_ad_tbl_1], 8 // Load G_1, H_1 - fma.s1 fRes2H = fA4, fXSqr, f0 // ((A5 + A4*y)*y^2)hi - nop.i 0 -} -{ .mfi - shladd GR_ad_z_2 = GR_Index2, 2, rZ2Addr // Point to Z_2 - fma.s1 fA25 = fA25, FR_FracX, fA24 - shladd GR_ad_tbl_2 = GR_Index2, 4, rTbl2Addr // Point to G_2 -} -;; -.pred.rel "mutex",p8,p9 -{ .mfi - ld4 GR_Z_2 = [GR_ad_z_2] // Load Z_2 - fms.s1 fRes6L = fA1, FR_FracX, fRes6H // delta((A1*y)hi) - // sign of GAMMA(x) is negative -(p8) adds rSgnGam = -1, r0 -} -{ .mfi - adds rTmpPtr = 8, GR_ad_tbl_2 - fadd.s1 fRes3H = fRes6H, fA0 // (A1*y + A0)hi - // sign of GAMMA(x) is positive -(p9) adds rSgnGam = 1, r0 -} -;; -{ .mfi - ldfps FR_G2, FR_H2 = [GR_ad_tbl_2] // Load G_2, H_2 - // (LnSin6*deltaX^2 + LnSin4)hi - fadd.s1 fLnSinH = fB14, fLnSin4 - nop.i 0 -} -{ .mfi - ldfd FR_h2 = [rTmpPtr] // Load h_2 - fms.s1 fB16 = fLnSin6, fDxSqr, fB14 // delta(LnSin6*deltaX^2) - nop.i 0 -} -;; -{ .mfi - ldfd fhDelX = [GR_ad_tbl_1] // Load h_1 - fma.s1 fA21 = fA21, fXSqr, fA18 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin36 = fLnSin36, fDelX4, fLnSin32 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes1L = fA3L, FR_FracX, fRes1L // (A3*y)lo - // Get bits 30-15 of X_1 * Z_ - pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 -} -{ .mfi - nop.m 0 - fsub.s1 fPolL = fA2, fPol - nop.i 0 -} -;; -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mfi - nop.m 0 - // delta(((A5 + A4*y)*y^2)hi) - fms.s1 fRes2L = fA4, fXSqr, fRes2H - nop.i 0 -} -{ .mfi - nop.m 0 - // (((A5 + A4*y)*y^2) + A3*y + A2)hi - fadd.s1 fRes4H = fRes2H, fPol - nop.i 0 -} -;; -{ .mfi - // store signgam if size of variable is 4 bytes -(p6) st4 [rSgnGamAddr] = rSgnGam - fma.s1 fRes6L = fA1L, FR_FracX, fRes6L // (A1*y)lo - nop.i 0 -} -{ .mfi - // store signgam if size of variable is 8 bytes -(p7) st8 [rSgnGamAddr] = rSgnGam - fsub.s1 fRes3L = fA0, fRes3H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fsub.s1 fLnSinL = fLnSin4, fLnSinH - nop.i 0 -} -{ .mfi - nop.m 0 - // ((LnSin6*deltaX^2 + LnSin4)*deltaX^2)hi - fma.s1 fB18 = fLnSinH, fDxSqr, f0 - nop.i 0 -} -;; -{ .mfi - adds rTmpPtr = 8, rTbl3Addr - fma.s1 fB16 = fLnSin6, fDxSqrL, fB16 // (LnSin6*deltaX^2)lo - extr.u GR_Index3 = GR_X_2, 1, 5 // Extract bits 1-5 of X_2 -} -{ .mfi - nop.m 0 - fma.s1 fA25 = fA25, fXSqr, fA23 - nop.i 0 -} -;; -{ .mfi - shladd GR_ad_tbl_3 = GR_Index3, 4, rTbl3Addr // Point to G_3 - fadd.s1 fPolL = fPolL, fRes1H - nop.i 0 -} -{ .mfi - shladd rTmpPtr = GR_Index3, 4, rTmpPtr // Point to G_3 - fadd.s1 fRes1L = fRes1L, fA2L // (A3*y)lo + A2lo - nop.i 0 -} -;; -{ .mfi - ldfps FR_G3, FR_H3 = [GR_ad_tbl_3] // Load G_3, H_3 - fma.s1 fRes2L = fA4, fXSqrL, fRes2L // ((A5 + A4*y)*y^2)lo - nop.i 0 -} -{ .mfi - ldfd FR_h3 = [rTmpPtr] // Load h_3 - fsub.s1 fRes4L = fPol, fRes4H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // ((((A5 + A4*y)*y^2) + A3*y + A2)*y^2)hi - fma.s1 fRes7H = fRes4H, fXSqr, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA15 = fA15, FR_FracX, fA14 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes3L = fRes3L, fRes6H - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fRes6L = fRes6L, fA0L // (A1*y)lo + A0lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fLnSinL = fLnSinL, fB14 - - nop.i 0 -} -{ .mfi - nop.m 0 - // delta((LnSin6*deltaX^2 + LnSin4)*deltaX^2) - fms.s1 fB20 = fLnSinH, fDxSqr, fB18 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fPolL = fPolL, fRes1L // (A3*y + A2)lo - - nop.i 0 -} -{ .mfi - nop.m 0 - // ((LnSin6*deltaX^2 + LnSin4)*deltaX^2 + LnSin2)hi - fadd.s1 fLnSin6 = fB18, fLnSin2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes4L = fRes4L, fRes2H - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA17 = fA17, FR_FracX, fA16 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // delta(((((A5 + A4*y)*y^2) + A3*y + A2)*y^2) - fms.s1 fRes7L = fRes4H, fXSqr, fRes7H - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fPol = fRes7H, fRes3H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes3L = fRes3L, fRes6L // (A1*y + A0)lo - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA25 = fA25, fX4, fA21 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // (LnSin6*deltaX^2 + LnSin4)lo - fadd.s1 fLnSinL = fLnSinL, fB16 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB20 = fLnSinH, fDxSqrL, fB20 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fsub.s1 fLnSin4 = fLnSin2, fLnSin6 - nop.i 0 -} -{ .mfi - nop.m 0 - // (((LnSin6*deltaX^2 + LnSin4)*deltaX^2 + LnSin2)*DeltaX^2)hi - fma.s1 fLnSinH = fLnSin6, fDxSqr, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // ((A5 + A4*y)*y^2)lo + (A3*y + A2)lo - fadd.s1 fRes2L = fRes2L, fPolL - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA17 = fA17, fXSqr, fA15 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // ((((A5 + A4*y)*y^2) + A3*y + A2)*y^2)lo - fma.s1 fRes7L = fRes4H, fXSqrL, fRes7L - nop.i 0 -} -{ .mfi - nop.m 0 - fsub.s1 fPolL = fRes3H, fPol - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA13 = fA13, FR_FracX, fA12 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA11 = fA11, FR_FracX, fA10 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // ((LnSin6*deltaX^2 + LnSin4)*deltaX^2)lo - fma.s1 fB20 = fLnSinL, fDxSqr, fB20 - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 FR_G = FR_G, FR_G2 // G = G_1 * G_2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fLnSin4 = fLnSin4, fB18 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fLnSinL = fLnSin6, fDxSqr, fLnSinH - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // (((A5 + A4*y)*y^2) + A3*y + A2)lo - fadd.s1 fRes4L = fRes4L, fRes2L - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fhDelX = fhDelX, FR_h2 // h = h_1 + h_2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes7L = fRes7L, fRes3L - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fPolL = fPolL, fRes7H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fcvt.xf fFloatNDx = fFloatNDx - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H, FR_H2 // H = H_1 + H_2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fmpy.s1 FR_G = FR_G, FR_G3 // G = (G_1 * G_2) * G_3 - nop.i 0 -} -{ .mfi - nop.m 0 - // ((LnSin6*deltaX^2 + LnSin4)*deltaX^2)lo + (LnSin2)lo - fadd.s1 fLnSin2L = fLnSin2L, fB20 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA25 = fA25, fX4, fA17 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA13 = fA13, fXSqr, fA11 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA9 = fA9, FR_FracX, fA8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA7 = fA7, FR_FracX, fA6 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSin36 = fLnSin36, fDelX8, fLnSin28 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin14 = fLnSin14, fDxSqr, fLnSin12 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSin10 = fLnSin10, fDxSqr, fLnSin8 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H, FR_H3 // H = (H_1 + H_2) + H_3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fRDx = FR_G, fNormDx, f1 // r = G * S_hi - 1 - nop.i 0 -} -{ .mfi - nop.m 0 - // poly_lo = r * Q4 + Q3 - fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fmpy.s1 FR_rsq = FR_r, FR_r // rsq = r * r - nop.i 0 -} -{ .mfi - nop.m 0 - // ((((A5 + A4*y)*y^2) + A3*y + A2)*y^2)lo + (A1*y + A0)lo - fma.s1 fRes7L = fRes4L, fXSqr, fRes7L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA25 = fA25, fX4, fA13 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA9 = fA9, fXSqr, fA7 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // h = N * log2_lo + h - fma.s1 FR_h = fFloatN, FR_log2_lo, FR_h - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fhDelX = fhDelX, FR_h3 // h = (h_1 + h_2) + h_3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSin36 = fLnSin36, fDelX6, fLnSin20 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin14 = fLnSin14, fDelX4, fLnSin10 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_lo = r * Q4 + Q3 - fma.s1 fPolyLoDx = fRDx, FR_Q4, FR_Q3 - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 fRDxSq = fRDx, fRDx // rsq = r * r - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // Y_hi = N * log2_hi + H - fma.s1 fResLnDxH = fFloatNDx, FR_log2_hi, FR_H - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_rcub = FR_rsq, FR_r, f0 // rcub = r^3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA9 = fA25, fX4, fA9 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fPolL = fPolL, fRes7L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fLnSin4 = fLnSin4, fLnSin2L - nop.i 0 -} -{ .mfi - nop.m 0 - // h = N * log2_lo + h - fma.s1 fhDelX = fFloatNDx, FR_log2_lo, fhDelX - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSin36 = fLnSin36, fDelX8, fLnSin14 - nop.i 0 -} -{ .mfi - nop.m 0 - // ((LnSin6*deltaX^2 + LnSin4)*deltaX^2 + LnSin2)lo - fma.s1 fLnSinL = fLnSin6, fDxSqrL, fLnSinL - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_lo = poly_lo * r + Q2 - fma.s1 fPolyLoDx = fPolyLoDx, fRDx, FR_Q2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fRDxCub = fRDxSq, fRDx, f0 // rcub = r^3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - famax.s0 fRes5H = fPol, fResH - nop.i 0 -} -{ .mfi - nop.m 0 - // High part of (lgammal(|x|) + log(|x|)) - fadd.s1 fRes1H = fPol, fResH - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_lo = poly_lo * r + Q2 - fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPolL = fA9, fX6, fPolL // P25lo - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - famin.s0 fRes5L = fPol, fResH - nop.i 0 -} -{ .mfi - nop.m 0 - // High part of -(LnSin + log(|DeltaX|)) - fnma.s1 fRes2H = fResLnDxH, f1, fLnSinH - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // (((LnSin6*deltaX^2 + LnSin4)*deltaX^2 + LnSin2)*DeltaX^2)lo - fma.s1 fLnSinL = fLnSin4, fDxSqr, fLnSinL - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin36 = fLnSin36, fDelX6, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_hi = Q1 * rsq + r - fma.s1 fPolyHiDx = FR_Q1, fRDxSq, fRDx - nop.i 0 -} -{ .mfi - nop.m 0 - // poly_lo = poly_lo*r^3 + h - fma.s1 fPolyLoDx = fPolyLoDx, fRDxCub, fhDelX - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fsub.s1 fRes1L = fRes5H, fRes1H - nop.i 0 -} -{ .mfi - nop.m 0 - // -(lgammal(|x|) + log(|x|))hi - fnma.s1 fRes1H = fRes1H, f1, f0 - - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_hi = Q1 * rsq + r - fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r - nop.i 0 -} -{ .mfi - nop.m 0 - // poly_lo = poly_lo*r^3 + h - fma.s1 FR_poly_lo = FR_poly_lo, FR_rcub, FR_h - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fRes2L = fResLnDxH, fMOne, fRes2H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSinL = fLnSin36, fDxSqr, fLnSinL - nop.i 0 -} -{ .mfi - nop.m 0 - // Y_lo = poly_hi + poly_lo - fadd.s1 fResLnDxL = fPolyHiDx, fPolyLoDx - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes1L = fRes1L, fRes5L - nop.i 0 -} -{ .mfi - nop.m 0 - // high part of the final result - fadd.s1 fYH = fRes2H, fRes1H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // Y_lo = poly_hi + poly_lo - fadd.s1 fResL = FR_poly_hi, FR_poly_lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - famax.s0 fRes4H = fRes2H, fRes1H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - famin.s0 fRes4L = fRes2H, fRes1H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // (LnSin)lo + (log(|DeltaX|))lo - fsub.s1 fLnSinL = fLnSinL, fResLnDxL - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fRes2L = fRes2L, fLnSinH - nop.i 0 -} -;; -{ .mfi - nop.m 0 - //(lgammal(|x|))lo + (log(|x|))lo - fadd.s1 fPolL = fResL, fPolL - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fsub.s1 fYL = fRes4H, fYH - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // Low part of -(LnSin + log(|DeltaX|)) - fadd.s1 fRes2L = fRes2L, fLnSinL - nop.i 0 -} -{ .mfi - nop.m 0 - // High part of (lgammal(|x|) + log(|x|)) - fadd.s1 fRes1L = fRes1L, fPolL - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fYL = fYL, fRes4L - nop.i 0 -} -{ .mfi - nop.m 0 - fsub.s1 fRes2L = fRes2L, fRes1L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // low part of the final result - fadd.s1 fYL = fYL, fRes2L - nop.i 0 -} -;; -{ .mfb - nop.m 0 - // final result for -6.0 < x <= -0.75, non-integer, "far" from roots - fma.s0 f8 = fYH, f1, fYL - // exit here for -6.0 < x <= -0.75, non-integer, "far" from roots - br.ret.sptk b0 -} -;; - -// here if |x+1| < 2^(-7) -.align 32 -_closeToNegOne: -{ .mfi - getf.exp GR_N = fDx // Get N = exponent of x - fmerge.se fAbsX = f1, fDx // Form |deltaX| - // Get high 4 bits of significand of deltaX - extr.u rIndex1Dx = rSignifDx, 59, 4 -} -{ .mfi - addl rPolDataPtr= @ltoff(lgammal_1pEps_data),gp - fma.s1 fA0L = fDxSqr, fDxSqr, f0 // deltaX^4 - // sign of GAMMA is positive if p10 is set to 1 -(p10) adds rSgnGam = 1, r0 -} -;; -{ .mfi - shladd GR_ad_z_1 = rIndex1Dx, 2, GR_ad_z_1 // Point to Z_1 - fnma.s1 fResL = fDx, f1, f0 // -(x+1) - // Get high 15 bits of significand - extr.u GR_X_0 = rSignifDx, 49, 15 -} -{ .mfi - ld8 rPolDataPtr = [rPolDataPtr] - nop.f 0 - shladd GR_ad_tbl_1 = rIndex1Dx, 4, rTbl1Addr // Point to G_1 -} -;; -{ .mfi - ld4 GR_Z_1 = [GR_ad_z_1] // Load Z_1 - nop.f 0 - and GR_N = GR_N, r17Ones // mask sign bit -} -{ .mfi - adds rTmpPtr = 8, GR_ad_tbl_1 - nop.f 0 - cmp.eq p6, p7 = 4, rSgnGamSize -} -;; -{ .mfi - ldfps FR_G, FR_H = [GR_ad_tbl_1],8 // Load G_1, H_1 - nop.f 0 - adds rTmpPtr2 = 96, rPolDataPtr -} -{ .mfi - ldfd FR_h = [rTmpPtr] // Load h_1 - nop.f 0 - // unbiased exponent of deltaX - sub GR_N = GR_N, rExpHalf, 1 -} -;; -{ .mfi - adds rTmpPtr3 = 192, rPolDataPtr - nop.f 0 - // sign of GAMMA is negative if p11 is set to 1 -(p11) adds rSgnGam = -1, r0 -} -{ .mfi - ldfe fA1 = [rPolDataPtr], 16 // A1 - nop.f 0 - nop.i 0 -} -;; -{.mfi - ldfe fA2 = [rPolDataPtr], 16 // A2 - nop.f 0 - // Get bits 30-15 of X_0 * Z_1 - pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 -} -{ .mfi - ldfpd fA20, fA19 = [rTmpPtr2], 16 // P8, P7 - nop.f 0 - nop.i 0 -} -;; -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mfi - ldfe fA3 = [rPolDataPtr], 16 // A3 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfpd fA18, fA17 = [rTmpPtr2], 16 // P6, P5 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfe fA4 = [rPolDataPtr], 16 // A4 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfpd fA16, fA15 = [rTmpPtr2], 16 // P4, p3 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA5L, fA6 = [rPolDataPtr], 16 // A5, A6 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfpd fA14, fA13 = [rTmpPtr2], 16 // P2, P1 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA7, fA8 = [rPolDataPtr], 16 // A7, A8 - nop.f 0 - extr.u GR_Index2 = GR_X_1, 6, 4 // Extract bits 6-9 of X_1 -} -{ .mfi - ldfe fLnSin2 = [rTmpPtr2], 16 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - shladd GR_ad_z_2 = GR_Index2, 2, rZ2Addr // Point to Z_2 - nop.f 0 - shladd GR_ad_tbl_2 = GR_Index2, 4, rTbl2Addr // Point to G_2 -} -{ .mfi - ldfe fLnSin4 = [rTmpPtr2], 32 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ld4 GR_Z_2 = [GR_ad_z_2] // Load Z_2 - nop.f 0 - adds rTmpPtr = 8, GR_ad_tbl_2 -} -{ .mfi - // Put integer N into rightmost significand - setf.sig fFloatN = GR_N - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfe fLnSin6 = [rTmpPtr3] - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe fLnSin8 = [rTmpPtr2] - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfps FR_G2, FR_H2 = [GR_ad_tbl_2],8 // Load G_2, H_2 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfd FR_h2 = [rTmpPtr] // Load h_2 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - // store signgam if size of variable is 4 bytes -(p6) st4 [rSgnGamAddr] = rSgnGam - fma.s1 fResH = fA20, fResL, fA19 //polynomial for log(|x|) - // Get bits 30-15 of X_1 * Z_2 - pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 -} -{ .mfi - // store signgam if size of variable is 8 bytes -(p7) st8 [rSgnGamAddr] = rSgnGam - fma.s1 fA2 = fA2, fDx, fA1 // polynomial for lgammal(|x|) - nop.i 0 -} -;; -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mfi - nop.m 0 - fma.s1 fA18 = fA18, fResL, fA17 //polynomial for log(|x|) - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA16 = fA16, fResL, fA15 //polynomial for log(|x|) - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA4 = fA4, fDx, fA3 // polynomial for lgammal(|x|) - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA14 = fA14, fResL, fA13 //polynomial for log(|x|) - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA6 = fA6, fDx, fA5L // polynomial for lgammal(|x|) - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fPol = fA8, fDx, fA7 // polynomial for lgammal(|x|) - extr.u GR_Index3 = GR_X_2, 1, 5 // Extract bits 1-5 of X_2 -} -;; -{ .mfi - shladd GR_ad_tbl_3 = GR_Index3, 4, rTbl3Addr // Point to G_3 - // loqw part of lnsin polynomial - fma.s1 fRes3L = fLnSin4, fDxSqr, fLnSin2 - nop.i 0 -} -;; -{ .mfi - ldfps FR_G3, FR_H3 = [GR_ad_tbl_3], 8 // Load G_3, H_3 - fcvt.xf fFloatN = fFloatN // N as FP number - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fResH = fResH, fDxSqr, fA18 // High part of log(|x|) - nop.i 0 -} -;; -{ .mfi - ldfd FR_h3 = [GR_ad_tbl_3] // Load h_3 - fma.s1 fA4 = fA4, fDxSqr, fA2 // Low part of lgammal(|x|) - nop.i 0 -} -{ .mfi - nop.m 0 - // high part of lnsin polynomial - fma.s1 fRes3H = fLnSin8, fDxSqr, fLnSin6 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fmpy.s1 FR_G = FR_G, FR_G2 // G = G_1 * G_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H, FR_H2 // H = H_1 + H_2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 FR_h = FR_h, FR_h2 // h = h_1 + h_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA16 = fA16, fDxSqr, fA14 // Low part of log(|x|) - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fPol = fPol, fDxSqr, fA6 // High part of lgammal(|x|) - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fResH = fResH, fA0L, fA16 // log(|x|)/deltaX^2 - deltaX - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fmpy.s1 FR_G = FR_G, FR_G3 // G = (G_1 * G_2) * G_3 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H, FR_H3 // H = (H_1 + H_2) + H_3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 FR_h = FR_h, FR_h3 // h = (h_1 + h_2) + h_3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fResH = fResH, fDxSqr, fResL // log(|x|) - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPol = fPol, fA0L, fA4 // lgammal(|x|)/|x| - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 FR_r = FR_G, fAbsX, f1 // r = G * S_hi - 1 - nop.i 0 -} -{ .mfi - nop.m 0 - // high part of log(deltaX)= Y_hi = N * log2_hi + H - fma.s1 fRes4H = fFloatN, FR_log2_hi, FR_H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // h = N * log2_lo + h - fma.s1 FR_h = fFloatN, FR_log2_lo, FR_h - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fResH = fPol, fDx, fResH // lgammal(|x|) + log(|x|) - nop.i 0 -} -{ .mfi - nop.m 0 - // lnsin/deltaX^2 - fma.s1 fRes3H = fRes3H, fA0L, fRes3L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_lo = r * Q4 + Q3 - fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 FR_rsq = FR_r, FR_r // rsq = r * r - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // lnSin - log(|x|) - lgammal(|x|) - fms.s1 fResH = fRes3H, fDxSqr, fResH - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // poly_lo = poly_lo * r + Q2 - fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_rcub = FR_rsq, FR_r, f0 // rcub = r^3 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // poly_hi = Q1 * rsq + r - fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // poly_lo = poly_lo*r^3 + h - fma.s1 FR_poly_lo = FR_poly_lo, FR_rcub, FR_h - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // low part of log(|deltaX|) = Y_lo = poly_hi + poly_lo - fadd.s1 fRes4L = FR_poly_hi, FR_poly_lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fsub.s1 fResH = fResH, fRes4L - nop.i 0 -} -;; -{ .mfb - nop.m 0 - // final result for |x+1|< 2^(-7) path - fsub.s0 f8 = fResH, fRes4H - // exit for |x+1|< 2^(-7) path - br.ret.sptk b0 -} -;; - - -// here if -2^63 < x < -6.0 and x is not an integer -// Also we are going to filter out cases when x falls in -// range which is "close enough" to negative root. Rhis case -// may occur only for -19.5 < x since other roots of lgamma are -// insignificant from double extended point of view (they are closer -// to RTN(x) than one ulp(x). -.align 32 -_negStirling: -{ .mfi - ldfe fLnSin6 = [rLnSinDataPtr], 32 - fnma.s1 fInvX = f8, fRcpX, f1 // start of 3rd NR iteration - // Get high 4 bits of significand of deltaX - extr.u rIndex1Dx = rSignifDx, 59, 4 -} -{ .mfi - ldfe fLnSin8 = [rTmpPtr3], 32 - fadd.s1 FR_h = FR_h, FR_h2 // h = h_1 + h_2 -(p12) cmp.ltu.unc p6, p0 = rSignifX, rLeftBound -} -;; -{ .mfi - ldfe fLnSin10 = [rLnSinDataPtr], 32 - fmpy.s1 FR_G = FR_G, FR_G3 // G = (G_1 * G_2) * G_3 - // Get high 15 bits of significand - extr.u GR_X_0 = rSignifDx, 49, 15 -} -{ .mfi - shladd GR_ad_z_1 = rIndex1Dx, 2, GR_ad_z_1 // Point to Z_1 - fadd.s1 FR_H = FR_H, FR_H3 // H = (H_1 + H_2) + H_3 - // set p6 if x falls in "near root" range -(p6) cmp.geu.unc p6, p0 = rSignifX, rRightBound -} -;; -{ .mfi - getf.exp GR_N = fDx // Get N = exponent of x - fma.s1 fDx4 = fDxSqr, fDxSqr, f0 // deltaX^4 - adds rTmpPtr = 96, rBernulliPtr -} -{ .mfb - ld4 GR_Z_1 = [GR_ad_z_1] // Load Z_1 - fma.s1 fLnSin34 = fLnSin34, fDxSqr, fLnSin32 - // branch to special path if x falls in "near root" range -(p6) br.cond.spnt _negRoots -} -;; -.pred.rel "mutex",p10,p11 -{ .mfi - ldfe fLnSin12 = [rTmpPtr3] - fma.s1 fLnSin26 = fLnSin26, fDxSqr, fLnSin24 -(p10) cmp.eq p8, p9 = rXRnd, r0 -} -{ .mfi - ldfe fLnSin14 = [rLnSinDataPtr] - fma.s1 fLnSin30 = fLnSin30, fDxSqr, fLnSin28 -(p11) cmp.eq p9, p8 = rXRnd, r0 -} -;; -{ .mfi - ldfpd fB2, fB2L = [rBernulliPtr], 16 - fma.s1 fLnSin18 = fLnSin18, fDxSqr, fLnSin16 - shladd GR_ad_tbl_1 = rIndex1Dx, 4, rTbl1Addr // Point to G_1 - -} -{ .mfi - ldfe fB14 = [rTmpPtr], 16 - fma.s1 fLnSin22 = fLnSin22, fDxSqr, fLnSin20 - and GR_N = GR_N, r17Ones // mask sign bit -} -;; -{ .mfi - ldfe fB4 = [rBernulliPtr], 16 - fma.s1 fInvX = fInvX, fRcpX, fRcpX // end of 3rd NR iteration - // Get bits 30-15 of X_0 * Z_1 - pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 -} -{ .mfi - ldfe fB16 = [rTmpPtr], 16 - fadd.s1 FR_h = FR_h, FR_h3 // h = (h_1 + h_2) + h_3 - adds rTmpPtr2 = 8, GR_ad_tbl_1 -} -;; -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mfi - ldfe fB6 = [rBernulliPtr], 16 - fms.s1 FR_r = FR_G, fSignifX, f1 // r = G * S_hi - 1 - adds rTmpPtr3 = -48, rTmpPtr -} -{ .mfi - ldfe fB18 = [rTmpPtr], 16 - // High part of the log(|x|) = Y_hi = N * log2_hi + H - fma.s1 fResH = fFloatN, FR_log2_hi, FR_H - sub GR_N = GR_N, rExpHalf, 1 // unbiased exponent of deltaX -} -;; -.pred.rel "mutex",p8,p9 -{ .mfi - ldfe fB8 = [rBernulliPtr], 16 - fma.s1 fLnSin36 = fLnSin36, fDx4, fLnSin34 - // sign of GAMMA(x) is negative -(p8) adds rSgnGam = -1, r0 -} -{ .mfi - ldfe fB20 = [rTmpPtr], -160 - fma.s1 fRes5H = fLnSin4, fDxSqr, f0 - // sign of GAMMA(x) is positive -(p9) adds rSgnGam = 1, r0 - -} -;; -{ .mfi - ldfe fB10 = [rBernulliPtr], 16 - fma.s1 fLnSin30 = fLnSin30, fDx4, fLnSin26 -(p14) adds rTmpPtr = -160, rTmpPtr -} -{ .mfi - ldfe fB12 = [rTmpPtr3], 16 - fma.s1 fDx8 = fDx4, fDx4, f0 // deltaX^8 - cmp.eq p6, p7 = 4, rSgnGamSize -} -;; -{ .mfi - ldfps fGDx, fHDx = [GR_ad_tbl_1], 8 // Load G_1, H_1 - fma.s1 fDx6 = fDx4, fDxSqr, f0 // deltaX^6 - extr.u GR_Index2 = GR_X_1, 6, 4 // Extract bits 6-9 of X_1 -} -{ .mfi - ldfd fhDx = [rTmpPtr2] // Load h_1 - fma.s1 fLnSin22 = fLnSin22, fDx4, fLnSin18 - nop.i 0 -} -;; -{ .mfi - // Load two parts of C - ldfpd fRes1H, fRes1L = [rTmpPtr], 16 - fma.s1 fRcpX = fInvX, fInvX, f0 // (1/x)^2 - shladd GR_ad_tbl_2 = GR_Index2, 4, rTbl2Addr // Point to G_2 -} -{ .mfi - shladd GR_ad_z_2 = GR_Index2, 2, rZ2Addr // Point to Z_2 - fma.s1 FR_h = fFloatN, FR_log2_lo, FR_h// h = N * log2_lo + h - nop.i 0 -} -;; -{ .mfi - ld4 GR_Z_2 = [GR_ad_z_2] // Load Z_2 - fnma.s1 fInvXL = f8, fInvX, f1 // relative error of 1/x - nop.i 0 -} -{ .mfi - adds rTmpPtr2 = 8, GR_ad_tbl_2 - fma.s1 fLnSin8 = fLnSin8, fDxSqr, fLnSin6 - nop.i 0 -} -;; -{ .mfi - ldfps FR_G2, FR_H2 = [GR_ad_tbl_2],8 // Load G_2, H_2 - // poly_lo = r * Q4 + Q3 - fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 - nop.i 0 -} -{ .mfi - ldfd fh2Dx = [rTmpPtr2] // Load h_2 - fmpy.s1 FR_rsq = FR_r, FR_r // rsq = r * r - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA1L = fB2, fInvX, f0 // (B2*(1/x))hi - nop.i 0 -} -{ .mfi - // Put integer N into rightmost significand - setf.sig fFloatNDx = GR_N - fms.s1 fRes4H = fResH, f1, f1 // ln(|x|)hi - 1 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes2H = fRes5H, fLnSin2//(lnSin4*DeltaX^2 + lnSin2)hi - // Get bits 30-15 of X_1 * Z_2 - pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 -} -{ .mfi - nop.m 0 - fms.s1 fRes5L = fLnSin4, fDxSqr, fRes5H - nop.i 0 -} -;; -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mfi - nop.m 0 - fma.s1 fInvX4 = fRcpX, fRcpX, f0 // (1/x)^4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB6 = fB6, fRcpX, fB4 - nop.i 0 -} -;; -{ .mfi - // store signgam if size of variable is 4 bytes -(p6) st4 [rSgnGamAddr] = rSgnGam - fma.s1 fB18 = fB18, fRcpX, fB16 - nop.i 0 -} -{ .mfi - // store signgam if size of variable is 8 bytes -(p7) st8 [rSgnGamAddr] = rSgnGam - fma.s1 fInvXL = fInvXL, fInvX, f0 // low part of 1/x - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_lo = poly_lo * r + Q2 - fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_rcub = FR_rsq, FR_r, f0 // rcub = r^3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes3H = fRes4H, f8, f0 // (-|x|*(ln(|x|)-1))hi - extr.u GR_Index3 = GR_X_2, 1, 5 // Extract bits 1-5 of X_2 -} -{ .mfi - nop.m 0 - // poly_hi = Q1 * rsq + r - fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r - nop.i 0 -} -;; -{ .mfi - shladd GR_ad_tbl_3 = GR_Index3, 4, rTbl3Addr // Point to G_3 - fms.s1 fA2L = fB2, fInvX, fA1L // delta(B2*(1/x)) - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 fBrnH = fRes1H, f1, fA1L // (-C - S(1/x))hi - nop.i 0 -} -;; -{ .mfi - ldfps fG3Dx, fH3Dx = [GR_ad_tbl_3],8 // Load G_3, H_3 - fma.s1 fInvX8 = fInvX4, fInvX4, f0 // (1/x)^8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB10 = fB10, fRcpX, fB8 - nop.i 0 -} -;; - -{ .mfi - ldfd fh3Dx = [GR_ad_tbl_3] // Load h_3 - fma.s1 fB20 = fB20, fInvX4, fB18 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB14 = fB14, fRcpX, fB12 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSin36 = fLnSin36, fDx8, fLnSin30 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin12 = fLnSin12, fDxSqr, fLnSin10 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fsub.s1 fRes2L = fLnSin2, fRes2H - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPol = fRes2H, fDxSqr, f0 // high part of LnSin - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fnma.s1 fResH = fResH, FR_MHalf, fResH // -0.5*ln(|x|)hi - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 fGDx = fGDx, FR_G2 // G = G_1 * G_2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_lo = poly_lo*r^3 + h - fma.s1 FR_poly_lo = FR_poly_lo, FR_rcub, FR_h - nop.i 0 -} -{ .mfi - nop.m 0 - // B2lo*(1/x)hi+ delta(B2*(1/x)) - fma.s1 fA2L = fB2L, fInvX, fA2L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fB20 = fB20, fInvX4, fB14 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB10 = fB10, fInvX4, fB6 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fcvt.xf fFloatNDx = fFloatNDx - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin14 = fLnSin14, fDx4, fLnSin12 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSin36 = fLnSin36, fDx8, fLnSin22 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fRes3L = fRes4H, f8, fRes3H // delta(-|x|*(ln(|x|)-1)) - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fmpy.s1 fGDx = fGDx, fG3Dx // G = (G_1 * G_2) * G_3 - nop.i 0 -} -{ .mfi - nop.m 0 - // (-|x|*(ln(|x|)-1) - 0.5ln(|x|))hi - fadd.s1 fRes4H = fRes3H, fResH - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA2L = fInvXL, fB2, fA2L //(B2*(1/x))lo - nop.i 0 -} -{ .mfi - nop.m 0 - // low part of log(|x|) = Y_lo = poly_hi + poly_lo - fadd.s1 fResL = FR_poly_hi, FR_poly_lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fB20 = fB20, fInvX8, fB10 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fInvX3 = fInvX, fRcpX, f0 // (1/x)^3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fHDx = fHDx, FR_H2 // H = H_1 + H_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fRes5L = fRes5L, fLnSin2L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes2L = fRes2L, fRes5H - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fhDx = fhDx, fh2Dx // h = h_1 + h_2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fBrnL = fRes1H, fMOne, fBrnH - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_r = fGDx, fNormDx, f1 // r = G * S_hi - 1 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes3L = fResL, f8 , fRes3L // (-|x|*(ln(|x|)-1))lo - nop.i 0 -} -{ .mfi - nop.m 0 - fsub.s1 fRes4L = fRes3H, fRes4H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // low part of "Bernulli" polynomial - fma.s1 fB20 = fB20, fInvX3, fA2L - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 fResL = fResL, FR_MHalf, fResL // -0.5*ln(|x|)lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fHDx = fHDx, fH3Dx // H = (H_1 + H_2) + H_3 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fPolL = fRes2H, fDxSqr, fPol - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fhDx = fhDx, fh3Dx // h = (h_1 + h_2) + h_3 - nop.i 0 -} -{ .mfi - nop.m 0 - // (-|x|*(ln(|x|)-1) - 0.5ln(|x|) - C - S(1/x))hi - fadd.s1 fB14 = fRes4H, fBrnH - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_lo = r * Q4 + Q3 - fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 FR_rsq = FR_r, FR_r // rsq = r * r - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes4L = fRes4L, fResH - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fBrnL = fBrnL, fA1L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // (-|x|*(ln(|x|)-1))lo + (-0.5ln(|x|))lo - fadd.s1 fRes3L = fRes3L, fResL - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 fB20 = fRes1L, f1, fB20 // -Clo - S(1/x)lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes2L = fRes2L, fRes5L // (lnSin4*DeltaX^2 + lnSin2)lo - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPolL = fDxSqrL, fRes2H, fPolL - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSin14 = fLnSin14, fDx4, fLnSin8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin36 = fLnSin36, fDx8, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_lo = poly_lo * r + Q2 - fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_rcub = FR_rsq, FR_r, f0 // rcub = r^3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_hi = Q1 * rsq + r - fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r - nop.i 0 -} -{ .mfi - nop.m 0 - fsub.s1 fB12 = fRes4H, fB14 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // (-|x|*(ln(|x|)-1) - 0.5ln(|x|))lo - fadd.s1 fRes4L = fRes4L, fRes3L - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fBrnL = fBrnL, fB20 // (-C - S(1/x))lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // high part of log(|DeltaX|) = Y_hi = N * log2_hi + H - fma.s1 fLnDeltaH = fFloatNDx, FR_log2_hi, fHDx - nop.i 0 -} -{ .mfi - nop.m 0 - // h = N * log2_lo + h - fma.s1 fhDx = fFloatNDx, FR_log2_lo, fhDx - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fPolL = fRes2L, fDxSqr, fPolL - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin14 = fLnSin36, fDxSqr, fLnSin14 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // (-|x|*(ln(|x|)-1) - 0.5ln(|x|))lo + (- C - S(1/x))lo - fadd.s1 fBrnL = fBrnL, fRes4L - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fB12 = fB12, fBrnH - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_lo = poly_lo*r^3 + h - fma.s1 FR_poly_lo = FR_poly_lo, FR_rcub, fhDx - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 fRes1H = fLnDeltaH, f1, fPol//(-ln(|DeltaX|) + LnSin)hi - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fPolL = fDxSqrL, fRes2L, fPolL - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin36 = fLnSin14, fDx6, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // (-|x|*(ln(|x|)-1) - 0.5ln(|x|) - C - S(1/x))lo - fadd.s1 fB12 = fB12, fBrnL - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // low part of log(|DeltaX|) = Y_lo = poly_hi + poly_lo - fadd.s1 fLnDeltaL= FR_poly_hi, FR_poly_lo - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fRes1L = fLnDeltaH, fMOne, fRes1H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fPolL = fPolL, fLnSin36 - nop.i 0 -} -{ .mfi - nop.m 0 - //(-|x|*(ln(|x|)-1)-0.5ln(|x|) - C - S(1/x))hi + (-ln(|DeltaX|) + LnSin)hi - fadd.s1 f8 = fRes1H, fB14 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - //max((-|x|*(ln(|x|)-1)-0.5ln(|x|) - C - S(1/x))hi, - // (-ln(|DeltaX|) + LnSin)hi) - famax.s1 fMaxNegStir = fRes1H, fB14 - nop.i 0 -} -{ .mfi - nop.m 0 - //min((-|x|*(ln(|x|)-1)-0.5ln(|x|) - C - S(1/x))hi, - // (-ln(|DeltaX|) + LnSin)hi) - famin.s1 fMinNegStir = fRes1H, fB14 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes1L = fRes1L, fPol - nop.i 0 -} -{ .mfi - nop.m 0 - // (-ln(|DeltaX|))lo + (LnSin)lo - fnma.s1 fPolL = fLnDeltaL, f1, fPolL - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fsub.s1 f9 = fMaxNegStir, f8 // delta1 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes1L = fRes1L, fPolL // (-ln(|DeltaX|) + LnSin)lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 f9 = f9, fMinNegStir - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes1L = fRes1L, fB12 - nop.i 0 -} -;; -{ .mfi - // low part of the result - fadd.s1 f9 = f9, fRes1L - nop.i 0 -} -;; -{ .mfb - nop.m 0 - // final result for -2^63 < x < -6.0 path - fma.s0 f8 = f8, f1, f9 - // exit here for -2^63 < x < -6.0 path - br.ret.sptk b0 -} -;; - -// here if x falls in neighbourhood of any negative root -// "neighbourhood" typically means that |lgammal(x)| < 0.17 -// on the [-3.0,-2.0] range |lgammal(x)| has even less -// magnitude -// rXint contains index of the root -// p10 is set if root belongs to "right" ones -// p11 is set if root belongs to "left" ones -// lgammal(x) is approximated by polynomial of -// 19th degree from (x - root) argument -.align 32 -_negRoots: -{ .mfi - addl rPolDataPtr= @ltoff(lgammal_right_roots_polynomial_data),gp - nop.f 0 - shl rTmpPtr2 = rXint, 7 // (i*16)*8 -} -{ .mfi - adds rRootsAddr = -288, rRootsBndAddr - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfe fRoot = [rRootsAddr] // FP representation of root - nop.f 0 - shl rTmpPtr = rXint, 6 // (i*16)*4 -} -{ .mfi -(p11) adds rTmpPtr2 = 3536, rTmpPtr2 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ld8 rPolDataPtr = [rPolDataPtr] - nop.f 0 - shladd rTmpPtr = rXint, 4, rTmpPtr // (i*16) + (i*16)*4 -} -{ .mfi - adds rTmpPtr3 = 32, rTmpPtr2 - nop.f 0 - nop.i 0 -} -;; -.pred.rel "mutex",p10,p11 -{ .mfi - add rTmpPtr3 = rTmpPtr, rTmpPtr3 - nop.f 0 -(p10) cmp.eq p8, p9 = rXRnd, r0 -} -{ .mfi - // (i*16) + (i*16)*4 + (i*16)*8 - add rTmpPtr = rTmpPtr, rTmpPtr2 - nop.f 0 -(p11) cmp.eq p9, p8 = rXRnd, r0 -} -;; -{ .mfi - add rTmpPtr2 = rPolDataPtr, rTmpPtr3 - nop.f 0 - nop.i 0 -} -{ .mfi - add rPolDataPtr = rPolDataPtr, rTmpPtr // begin + offsett - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA0, fA0L = [rPolDataPtr], 16 // A0 - nop.f 0 - adds rTmpPtr = 112, rTmpPtr2 -} -{ .mfi - ldfpd fA2, fA2L = [rTmpPtr2], 16 // A2 - nop.f 0 - cmp.eq p12, p13 = 4, rSgnGamSize -} -;; -{ .mfi - ldfpd fA1, fA1L = [rPolDataPtr], 16 // A1 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe fA3 = [rTmpPtr2], 128 // A4 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA12, fA13 = [rTmpPtr], 16 // A12, A13 - nop.f 0 - adds rTmpPtr3 = 64, rPolDataPtr -} -{ .mfi - ldfpd fA16, fA17 = [rTmpPtr2], 16 // A16, A17 - nop.f 0 - adds rPolDataPtr = 32, rPolDataPtr -} -;; -.pred.rel "mutex",p8,p9 -{ .mfi - ldfpd fA14, fA15 = [rTmpPtr], 16 // A14, A15 - nop.f 0 - // sign of GAMMA(x) is negative -(p8) adds rSgnGam = -1, r0 -} -{ .mfi - ldfpd fA18, fA19 = [rTmpPtr2], 16 // A18, A19 - nop.f 0 - // sign of GAMMA(x) is positive -(p9) adds rSgnGam = 1, r0 -} -;; -{ .mfi - ldfe fA4 = [rPolDataPtr], 16 // A4 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfpd fA6, fA7 = [rTmpPtr3], 16 // A6, A7 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfe fA5 = [rPolDataPtr], 16 // A5 - // if x equals to (rounded) root exactly - fcmp.eq.s1 p6, p0 = f8, fRoot - nop.i 0 -} -{ .mfi - ldfpd fA8, fA9 = [rTmpPtr3], 16 // A8, A9 - fms.s1 FR_FracX = f8, f1, fRoot - nop.i 0 -} -;; -{ .mfi - // store signgam if size of variable is 4 bytes -(p12) st4 [rSgnGamAddr] = rSgnGam - nop.f 0 - nop.i 0 -} -{ .mfb - // store signgam if size of variable is 8 bytes -(p13) st8 [rSgnGamAddr] = rSgnGam - // answer if x equals to (rounded) root exactly -(p6) fadd.s0 f8 = fA0, fA0L - // exit if x equals to (rounded) root exactly -(p6) br.ret.spnt b0 -} -;; -{ .mmf - ldfpd fA10, fA11 = [rTmpPtr3], 16 // A10, A11 - nop.m 0 - nop.f 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fResH = fA2, FR_FracX, f0 // (A2*x)hi - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA4L = FR_FracX, FR_FracX, f0 // x^2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA17 = fA17, FR_FracX, fA16 - nop.i 0 -} -{.mfi - nop.m 0 - fma.s1 fA13 = fA13, FR_FracX, fA12 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA19 = fA19, FR_FracX, fA18 - nop.i 0 -} -{.mfi - nop.m 0 - fma.s1 fA15 = fA15, FR_FracX, fA14 - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fPol = fA7, FR_FracX, fA6 - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fA9 = fA9, FR_FracX, fA8 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fResL = fA2, FR_FracX, fResH // delta(A2*x) - nop.i 0 -} -{.mfi - nop.m 0 - fadd.s1 fRes1H = fResH, fA1 // (A2*x + A1)hi - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA11 = fA11, FR_FracX, fA10 - nop.i 0 -} -{.mfi - nop.m 0 - fma.s1 fA5L = fA4L, fA4L, f0 // x^4 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA19 = fA19, fA4L, fA17 - nop.i 0 -} -{.mfi - nop.m 0 - fma.s1 fA15 = fA15, fA4L, fA13 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fPol = fPol, FR_FracX, fA5 - nop.i 0 -} -{.mfi - nop.m 0 - fma.s1 fA3L = fA4L, FR_FracX, f0 // x^3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // delta(A2*x) + A2L*x = (A2*x)lo - fma.s1 fResL = fA2L, FR_FracX, fResL - nop.i 0 -} -{.mfi - nop.m 0 - fsub.s1 fRes1L = fA1, fRes1H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA11 = fA11, fA4L, fA9 - nop.i 0 -} -{.mfi - nop.m 0 - fma.s1 fA19 = fA19, fA5L, fA15 - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fPol = fPol, FR_FracX, fA4 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fResL = fResL, fA1L // (A2*x)lo + A1 - nop.i 0 -} -{.mfi - nop.m 0 - fadd.s1 fRes1L = fRes1L, fResH - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes2H = fRes1H, FR_FracX, f0 // ((A2*x + A1)*x)hi - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fA19 = fA19, fA5L, fA11 - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fPol = fPol, FR_FracX, fA3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes1L = fRes1L, fResL // (A2*x + A1)lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // delta((A2*x + A1)*x) - fms.s1 fRes2L = fRes1H, FR_FracX, fRes2H - nop.i 0 -} -{.mfi - nop.m 0 - fadd.s1 fRes3H = fRes2H, fA0 // ((A2*x + A1)*x + A0)hi - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA19 = fA19, fA5L, f0 - nop.i 0 -} - -;; -{ .mfi - nop.m 0 - fma.s1 fRes2L = fRes1L, FR_FracX, fRes2L // ((A2*x + A1)*x)lo - nop.i 0 -} -{.mfi - nop.m 0 - fsub.s1 fRes3L = fRes2H, fRes3H - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fPol = fA19, FR_FracX, fPol - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes3L = fRes3L, fA0 - nop.i 0 -} -{.mfi - nop.m 0 - fadd.s1 fRes2L = fRes2L, fA0L // ((A2*x + A1)*x)lo + A0L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes3L = fRes3L, fRes2L // (((A2*x + A1)*x) + A0)lo - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fRes3L = fPol, fA3L, fRes3L - nop.i 0 -} -;; -{ .mfb - nop.m 0 - // final result for arguments which are close to negative roots - fma.s0 f8 = fRes3H, f1, fRes3L - // exit here for arguments which are close to negative roots - br.ret.sptk b0 -} -;; - -// here if |x| < 0.5 -.align 32 -lgammal_0_half: -{ .mfi - ld4 GR_Z_1 = [rZ1offsett] // Load Z_1 - fma.s1 fA4L = f8, f8, f0 // x^2 - addl rPolDataPtr = @ltoff(lgammal_0_Half_data), gp -} -{ .mfi - shladd GR_ad_tbl_1 = GR_Index1, 4, rTbl1Addr// Point to G_1 - nop.f 0 - addl rLnSinDataPtr = @ltoff(lgammal_lnsin_data), gp -} -;; -{ .mfi - ldfps FR_G, FR_H = [GR_ad_tbl_1],8 // Load G_1, H_1 - nop.f 0 - // Point to Constants_Z_2 - add GR_ad_z_2 = 0x140, GR_ad_z_1 -} -{ .mfi - add GR_ad_q = -0x60, GR_ad_z_1 // Point to Constants_Q - nop.f 0 - // Point to Constants_G_H_h2 - add GR_ad_tbl_2 = 0x180, GR_ad_z_1 -} -;; -{ .mfi - ld8 rPolDataPtr = [rPolDataPtr] - nop.f 0 - // Point to Constants_G_H_h3 - add GR_ad_tbl_3 = 0x280, GR_ad_z_1 -} -{ .mfi - ldfd FR_h = [GR_ad_tbl_1] // Load h_1 - nop.f 0 - sub GR_N = rExpX, rExpHalf, 1 -} -;; -{ .mfi - ld8 rLnSinDataPtr = [rLnSinDataPtr] - nop.f 0 - // Get bits 30-15 of X_0 * Z_1 - pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 -} -{ .mfi - ldfe FR_log2_hi = [GR_ad_q],16 // Load log2_hi - nop.f 0 - sub GR_N = r0, GR_N -} -;; -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mfi - ldfe FR_log2_lo = [GR_ad_q], 16 // Load log2_lo - nop.f 0 - add rTmpPtr2 = 320, rPolDataPtr -} -{ .mfi - add rTmpPtr = 32, rPolDataPtr - nop.f 0 - // exponent of 0.25 - adds rExp2 = -1, rExpHalf -} -;; -{ .mfi - ldfpd fA3, fA3L = [rPolDataPtr], 16 // A3 - fma.s1 fA5L = fA4L, fA4L, f0 // x^4 - nop.i 0 -} -{ .mfi - ldfpd fA1, fA1L = [rTmpPtr], 16 // A1 - fms.s1 fB8 = f8, f8, fA4L // x^2 - - // set p6 if -0.5 < x <= -0.25 -(p15) cmp.eq.unc p6, p0 = rExpX, rExp2 -} -;; -{ .mfi - ldfpd fA2, fA2L = [rPolDataPtr], 16 // A2 - nop.f 0 - // set p6 if -0.5 < x <= -0.40625 -(p6) cmp.le.unc p6, p0 = 10, GR_Index1 -} -{ .mfi - ldfe fA21 = [rTmpPtr2], -16 // A21 - // Put integer N into rightmost significand - nop.f 0 - adds rTmpPtr = 240, rTmpPtr -} -;; -{ .mfi - setf.sig fFloatN = GR_N - nop.f 0 - extr.u GR_Index2 = GR_X_1, 6, 4 // Extract bits 6-9 of X_1 -} -{ .mfi - ldfe FR_Q4 = [GR_ad_q], 16 // Load Q4 - nop.f 0 - adds rPolDataPtr = 304, rPolDataPtr -} -;; -{ .mfi - ldfe fA20 = [rTmpPtr2], -32 // A20 - nop.f 0 - shladd GR_ad_z_2 = GR_Index2, 2, GR_ad_z_2 // Point to Z_2 -} -{ .mfi - ldfe fA19 = [rTmpPtr], -32 // A19 - nop.f 0 - shladd GR_ad_tbl_2 = GR_Index2, 4, GR_ad_tbl_2// Point to G_2 -} -;; -{ .mfi - ldfe fA17 = [rTmpPtr], -32 // A17 - nop.f 0 - adds rTmpPtr3 = 8, GR_ad_tbl_2 -} -{ .mfb - ldfe fA18 = [rTmpPtr2], -32 // A18 - nop.f 0 - // branch to special path for -0.5 < x <= 0.40625 -(p6) br.cond.spnt lgammal_near_neg_half -} -;; -{ .mmf - ld4 GR_Z_2 = [GR_ad_z_2] // Load Z_2 - ldfe fA15 = [rTmpPtr], -32 // A15 - fma.s1 fB20 = fA5L, fA5L, f0 // x^8 -} -;; -{ .mmf - ldfe fA16 = [rTmpPtr2], -32 // A16 - ldfe fA13 = [rTmpPtr], -32 // A13 - fms.s1 fB16 = fA4L, fA4L, fA5L -} -;; -{ .mmf - ldfps FR_G2, FR_H2 = [GR_ad_tbl_2], 8 // Load G_2, H_2 - ldfd FR_h2 = [rTmpPtr3] // Load h_2 - fmerge.s fB10 = f8, fA5L // sign(x) * x^4 -} -;; -{ .mmi - ldfe fA14 = [rTmpPtr2], -32 // A14 - ldfe fA11 = [rTmpPtr], -32 // A11 - // Get bits 30-15 of X_1 * Z_2 - pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 -} -;; -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mfi - ldfe fA12 = [rTmpPtr2], -32 // A12 - fma.s1 fRes4H = fA3, fAbsX, f0 - adds rTmpPtr3 = 16, GR_ad_q -} -{ .mfi - ldfe fA9 = [rTmpPtr], -32 // A9 - nop.f 0 - nop.i 0 -} -;; -{ .mmf - ldfe fA10 = [rTmpPtr2], -32 // A10 - ldfe fA7 = [rTmpPtr], -32 // A7 - fma.s1 fB18 = fB20, fB20, f0 // x^16 -} -;; -{ .mmf - ldfe fA8 = [rTmpPtr2], -32 // A8 - ldfe fA22 = [rPolDataPtr], 16 // A22 - fcvt.xf fFloatN = fFloatN -} -;; -{ .mfi - ldfe fA5 = [rTmpPtr], -32 // A5 - fma.s1 fA21 = fA21, fAbsX, fA20 // v16 - extr.u GR_Index3 = GR_X_2, 1, 5 // Extract bits 1-5 of X_2 -} -{ .mfi - ldfe fA6 = [rTmpPtr2], -32 // A6 - nop.f 0 - nop.i 0 -} -;; -{ .mmf - // Point to G_3 - shladd GR_ad_tbl_3 = GR_Index3, 4, GR_ad_tbl_3 - ldfe fA4 = [rTmpPtr2], -32 // A4 - fma.s1 fA19 = fA19, fAbsX, fA18 // v13 -} -;; -.pred.rel "mutex",p14,p15 -{ .mfi - ldfps FR_G3, FR_H3 = [GR_ad_tbl_3],8 // Load G_3, H_3 - fms.s1 fRes4L = fA3, fAbsX, fRes4H -(p14) adds rSgnGam = 1, r0 -} -{ .mfi - cmp.eq p6, p7 = 4, rSgnGamSize - fadd.s1 fRes2H = fRes4H, fA2 -(p15) adds rSgnGam = -1, r0 -} -;; - -{ .mfi - ldfd FR_h3 = [GR_ad_tbl_3] // Load h_3 - fma.s1 fA17 = fA17, fAbsX, fA16 // v12 - nop.i 0 -} -;; -{ .mfi - ldfe FR_Q3 = [GR_ad_q], 32 // Load Q3 - fmpy.s1 FR_G = FR_G, FR_G2 // G = G_1 * G_2 - nop.i 0 -} -{ .mfi - ldfe FR_Q2 = [rTmpPtr3], 16 // Load Q2 - fadd.s1 FR_H = FR_H, FR_H2 // H = H_1 + H_2 - nop.i 0 -} -;; -{ .mfi - ldfe FR_Q1 = [GR_ad_q] // Load Q1 - fma.s1 fA15 = fA15, fAbsX, fA14 // v8 - nop.i 0 -} -{ .mfi - adds rTmpPtr3 = 32, rLnSinDataPtr - fadd.s1 FR_h = FR_h, FR_h2 // h = h_1 + h_2 - nop.i 0 -} -;; -{ .mmf - ldfpd fLnSin2, fLnSin2L = [rLnSinDataPtr], 16 - ldfe fLnSin6 = [rTmpPtr3], 32 - fma.s1 fA13 = fA13, fAbsX, fA12 // v7 - -} -;; -{ .mfi - ldfe fLnSin4 = [rLnSinDataPtr], 32 - fma.s1 fRes4L = fA3L, fAbsX, fRes4L - nop.i 0 -} -{ .mfi - ldfe fLnSin10 = [rTmpPtr3], 32 - fsub.s1 fRes2L = fA2, fRes2H - nop.i 0 -} -;; -{ .mfi - ldfe fLnSin8 = [rLnSinDataPtr], 32 - fma.s1 fResH = fRes2H, fAbsX, f0 - nop.i 0 -} -{ .mfi - ldfe fLnSin14 = [rTmpPtr3], 32 - fma.s1 fA22 = fA22, fA4L, fA21 // v15 - nop.i 0 -} -;; -{ .mfi - ldfe fLnSin12 = [rLnSinDataPtr], 32 - fma.s1 fA9 = fA9, fAbsX, fA8 // v4 - nop.i 0 -} -{ .mfi - ldfd fLnSin18 = [rTmpPtr3], 16 - fma.s1 fA11 = fA11, fAbsX, fA10 // v5 - nop.i 0 -} -;; -{ .mfi - ldfe fLnSin16 = [rLnSinDataPtr], 24 - fma.s1 fA19 = fA19, fA4L, fA17 // v11 - nop.i 0 -} -{ .mfi - ldfd fLnSin22 = [rTmpPtr3], 16 - fma.s1 fPolL = fA7, fAbsX, fA6 - nop.i 0 -} -;; -{ .mfi - ldfd fLnSin20 = [rLnSinDataPtr], 16 - fmpy.s1 FR_G = FR_G, FR_G3 // G = (G_1 * G_2) * G_3 - nop.i 0 -} -{ .mfi - ldfd fLnSin26 = [rTmpPtr3], 16 - fadd.s1 FR_H = FR_H, FR_H3 // H = (H_1 + H_2) + H_3 - nop.i 0 -} -;; -{ .mfi - ldfd fLnSin24 = [rLnSinDataPtr], 16 - fadd.s1 fRes2L = fRes2L, fRes4H - nop.i 0 -} -{ .mfi - ldfd fLnSin30 = [rTmpPtr3], 16 - fadd.s1 fA2L = fA2L, fRes4L - nop.i 0 -} -;; -{ .mfi - ldfd fLnSin28 = [rLnSinDataPtr], 16 - fms.s1 fResL = fRes2H, fAbsX, fResH - nop.i 0 -} -{ .mfi - ldfd fLnSin34 = [rTmpPtr3], 8 - fadd.s1 fRes2H = fResH, fA1 - nop.i 0 -} -;; -{ .mfi - ldfd fLnSin32 = [rLnSinDataPtr] - fma.s1 fA11 = fA11, fA4L, fA9 // v3 - nop.i 0 -} -{ .mfi - ldfd fLnSin36 = [rTmpPtr3] - fma.s1 fA15 = fA15, fA4L, fA13 // v6 - nop.i 0 -} -;; - -{ .mfi - // store signgam if size of variable is 4 bytes -(p6) st4 [rSgnGamAddr] = rSgnGam - fadd.s1 FR_h = FR_h, FR_h3 // h = (h_1 + h_2) + h_3 - nop.i 0 -} -{ .mfi - // store signgam if size of variable is 8 bytes -(p7) st8 [rSgnGamAddr] = rSgnGam - fma.s1 fA5 = fA5, fAbsX, fA4 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 FR_r = FR_G, fSignifX, f1 // r = G * S_hi - 1 - nop.i 0 -} -{ .mfi - nop.m 0 - // High part of the log(|x|): Y_hi = N * log2_hi + H - fms.s1 FR_log2_hi = fFloatN, FR_log2_hi, FR_H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fA3L = fRes2L, fA2L - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA22 = fA22, fA5L, fA19 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fsub.s1 fRes2L = fA1, fRes2H - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fRes3H = fRes2H, f8, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA15 = fA15, fA5L, fA11 // v2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin18 = fLnSin18, fA4L, fLnSin16 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // h = N * log2_lo + h - fms.s1 FR_h = fFloatN, FR_log2_lo, FR_h - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPolL = fPolL, fA4L, fA5 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_lo = r * Q4 + Q3 - fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 FR_rsq = FR_r, FR_r // rsq = r * r - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fResL = fA3L, fAbsX, fResL - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin30 = fLnSin30, fA4L, fLnSin28 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes2L = fRes2L, fResH - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fRes3L = fRes2H, f8, fRes3H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes1H = fRes3H, FR_log2_hi - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPol = fB20, fA22, fA15 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSin34 = fLnSin34, fA4L, fLnSin32 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin14 = fLnSin14, fA4L, fLnSin12 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // poly_lo = poly_lo * r + Q2 - fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_rcub = FR_rsq, FR_r, f0 // rcub = r^3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_hi = Q1 * rsq + r - fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fA1L = fA1L, fResL - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fLnSin22 = fLnSin22, fA4L, fLnSin20 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin26 = fLnSin26, fA4L, fLnSin24 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fsub.s1 fRes1L = FR_log2_hi, fRes1H - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPol = fPol, fA5L, fPolL - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSin34 = fLnSin36, fA5L, fLnSin34 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin18 = fLnSin18, fA5L, fLnSin14 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSin6 = fLnSin6, fA4L, fLnSin4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin10 = fLnSin10, fA4L, fLnSin8 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_hi = Q1 * rsq + r - fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fRes2L = fRes2L, fA1L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_lo = poly_lo*r^3 + h - fma.s1 FR_poly_lo = FR_poly_lo, FR_rcub, FR_h - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB2 = fLnSin2, fA4L, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes1L = fRes1L, fRes3H - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPol = fPol, fB10, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSin26 = fLnSin26, fA5L, fLnSin22 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin34 = fLnSin34, fA5L, fLnSin30 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSin10 = fLnSin10, fA5L, fLnSin6 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin2L = fLnSin2L, fA4L, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fRes3L = fRes2L, f8, fRes3L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // Y_lo = poly_hi + poly_lo - fsub.s1 FR_log2_lo = FR_poly_lo, FR_poly_hi - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fB4 = fLnSin2, fA4L, fB2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes2H = fRes1H, fPol - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSin34 = fLnSin34, fB20, fLnSin26 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fLnSin18 = fLnSin18, fB20, fLnSin10 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fLnSin2L = fB8, fLnSin2, fLnSin2L - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fadd.s1 FR_log2_lo = FR_log2_lo, fRes3L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fsub.s1 fRes2L = fRes1H, fRes2H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fB6 = fLnSin34, fB18, fLnSin18 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fB4 = fLnSin2L, fB4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fadd.s1 fRes1L = fRes1L, FR_log2_lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes2L = fRes2L, fPol - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fB12 = fB6, fA5L, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes2L = fRes2L, fRes1L - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fms.s1 fB14 = fB6, fA5L, fB12 - nop.i 0 -} -{ .mfb - nop.m 0 - fadd.s1 fLnSin30 = fB2, fB12 - // branch out if x is negative -(p15) br.cond.spnt _O_Half_neg -} -;; -{ .mfb - nop.m 0 - // sign(x)*Pol(|x|) - log(|x|) - fma.s0 f8 = fRes2H, f1, fRes2L - // it's an answer already for positive x - // exit if 0 < x < 0.5 - br.ret.sptk b0 -} -;; - -// here if x is negative and |x| < 0.5 -.align 32 -_O_Half_neg: -{ .mfi - nop.m 0 - fma.s1 fB14 = fB16, fB6, fB14 - nop.i 0 -} -{ .mfi - nop.m 0 - fsub.s1 fLnSin16 = fB2, fLnSin30 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fResH = fLnSin30, fRes2H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fLnSin16 = fLnSin16, fB12 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fB4 = fB14, fB4 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fLnSin16 = fB4, fLnSin16 - nop.i 0 -} -{ .mfi - nop.m 0 - fsub.s1 fResL = fRes2H, fResH - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fResL = fResL, fLnSin30 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fLnSin16 = fLnSin16, fRes2L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fResL = fResL, fLnSin16 - nop.i 0 -} -;; -{ .mfb - nop.m 0 - // final result for -0.5 < x < 0 - fma.s0 f8 = fResH, f1, fResL - // exit for -0.5 < x < 0 - br.ret.sptk b0 -} -;; - -// here if x >= 8.0 -// there are two computational paths: -// 1) For x >10.0 Stirling's formula is used -// 2) Polynomial approximation for 8.0 <= x <= 10.0 -.align 32 -lgammal_big_positive: -{ .mfi - addl rPolDataPtr = @ltoff(lgammal_data), gp - fmerge.se fSignifX = f1, f8 - // Get high 15 bits of significand - extr.u GR_X_0 = rSignifX, 49, 15 -} -{.mfi - shladd rZ1offsett = GR_Index1, 2, GR_ad_z_1 // Point to Z_1 - fnma.s1 fInvX = f8, fRcpX, f1 // start of 1st NR iteration - adds rSignif1andQ = 0x5, r0 -} -;; -{.mfi - ld4 GR_Z_1 = [rZ1offsett] // Load Z_1 - nop.f 0 - shl rSignif1andQ = rSignif1andQ, 61 // significand of 1.25 -} -{ .mfi - cmp.eq p8, p0 = rExpX, rExp8 // p8 = 1 if 8.0 <= x < 16 - nop.f 0 - adds rSgnGam = 1, r0 // gamma is positive at this range -} -;; -{ .mfi - shladd GR_ad_tbl_1 = GR_Index1, 4, rTbl1Addr// Point to G_1 - nop.f 0 - add GR_ad_q = -0x60, GR_ad_z_1 // Point to Constants_Q -} -{ .mlx - ld8 rPolDataPtr = [rPolDataPtr] - movl rDelta = 0x3FF2000000000000 -} -;; -{ .mfi - ldfps FR_G, FR_H = [GR_ad_tbl_1],8 // Load G_1, H_1 - nop.f 0 - add GR_ad_z_2 = 0x140, GR_ad_z_1 // Point to Constants_Z_2 -} -{ .mfi - // Point to Constants_G_H_h2 - add GR_ad_tbl_2 = 0x180, GR_ad_z_1 - nop.f 0 - // p8 = 1 if 8.0 <= x <= 10.0 -(p8) cmp.leu.unc p8, p0 = rSignifX, rSignif1andQ -} -;; -{ .mfi - ldfd FR_h = [GR_ad_tbl_1] // Load h_1 - nop.f 0 - // Get bits 30-15 of X_0 * Z_1 - pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 -} -{ .mfb -(p8) setf.d FR_MHalf = rDelta - nop.f 0 -(p8) br.cond.spnt lgammal_8_10 // branch out if 8.0 <= x <= 10.0 -} -;; -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mfi - ldfe fA1 = [rPolDataPtr], 16 // Load overflow threshold - fma.s1 fRcpX = fInvX, fRcpX, fRcpX // end of 1st NR iteration - // Point to Constants_G_H_h3 - add GR_ad_tbl_3 = 0x280, GR_ad_z_1 -} -{ .mlx - nop.m 0 - movl rDelta = 0xBFE0000000000000 // -0.5 in DP -} -;; -{ .mfi - ldfe FR_log2_hi = [GR_ad_q],16 // Load log2_hi - nop.f 0 - sub GR_N = rExpX, rExpHalf, 1 // unbiased exponent of x -} -;; -{ .mfi - ldfe FR_log2_lo = [GR_ad_q],16 // Load log2_lo - nop.f 0 - nop.i 0 -} -{ .mfi - setf.d FR_MHalf = rDelta - nop.f 0 - nop.i 0 -} -;; -{ .mfi - // Put integer N into rightmost significand - setf.sig fFloatN = GR_N - nop.f 0 - extr.u GR_Index2 = GR_X_1, 6, 4 // Extract bits 6-9 of X_1 -} -{ .mfi - ldfe FR_Q4 = [GR_ad_q], 16 // Load Q4 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - shladd GR_ad_z_2 = GR_Index2, 2, GR_ad_z_2 // Point to Z_2 - nop.f 0 - shladd GR_ad_tbl_2 = GR_Index2, 4, GR_ad_tbl_2// Point to G_2 -} -{ .mfi - ldfe FR_Q3 = [GR_ad_q], 16 // Load Q3 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ld4 GR_Z_2 = [GR_ad_z_2] // Load Z_2 - fnma.s1 fInvX = f8, fRcpX, f1 // start of 2nd NR iteration - nop.i 0 -} -;; -{ .mfi - ldfps FR_G2, FR_H2 = [GR_ad_tbl_2], 8 // Load G_2, H_2 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfd FR_h2 = [GR_ad_tbl_2] // Load h_2 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfe FR_Q2 = [GR_ad_q],16 // Load Q2 - nop.f 0 - // Get bits 30-15 of X_1 * Z_2 - pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 -} -;; -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mfi - ldfe FR_Q1 = [GR_ad_q] // Load Q1 - fcmp.gt.s1 p7,p0 = f8, fA1 // check if x > overflow threshold - nop.i 0 -} -;; -{.mfi - ldfpd fA0, fA0L = [rPolDataPtr], 16 // Load two parts of C - fma.s1 fRcpX = fInvX, fRcpX, fRcpX // end of 2nd NR iteration - nop.i 0 -} -;; -{ .mfb - ldfpd fB2, fA1 = [rPolDataPtr], 16 - nop.f 0 -(p7) br.cond.spnt lgammal_overflow // branch if x > overflow threshold -} -;; -{.mfi - ldfe fB4 = [rPolDataPtr], 16 - fcvt.xf fFloatN = fFloatN - extr.u GR_Index3 = GR_X_2, 1, 5 // Extract bits 1-5 of X_2 -} -;; -{ .mfi - shladd GR_ad_tbl_3 = GR_Index3, 4, GR_ad_tbl_3// Point to G_3 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe fB6 = [rPolDataPtr], 16 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfps FR_G3, FR_H3 = [GR_ad_tbl_3], 8 // Load G_3, H_3 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfd FR_h3 = [GR_ad_tbl_3] // Load h_3 - fmpy.s1 FR_G = FR_G, FR_G2 // G = G_1 * G_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H, FR_H2 // H = H_1 + H_2 - nop.i 0 -} -;; - -{ .mfi - ldfe fB8 = [rPolDataPtr], 16 - fadd.s1 FR_h = FR_h, FR_h2 // h = h_1 + h_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 fInvX = f8, fRcpX, f1 // start of 3rd NR iteration - nop.i 0 -} -;; -{ .mfi - ldfe fB10 = [rPolDataPtr], 16 - nop.f 0 - cmp.eq p6, p7 = 4, rSgnGamSize -} -;; -{ .mfi - ldfe fB12 = [rPolDataPtr], 16 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfe fB14 = [rPolDataPtr], 16 - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - ldfe fB16 = [rPolDataPtr], 16 - // get double extended coefficients from two doubles - // two doubles are needed in Stitling's formula for negative x - fadd.s1 fB2 = fB2, fA1 - nop.i 0 -} -;; -{ .mfi - ldfe fB18 = [rPolDataPtr], 16 - fma.s1 fInvX = fInvX, fRcpX, fRcpX // end of 3rd NR iteration - nop.i 0 -} -;; -{ .mfi - ldfe fB20 = [rPolDataPtr], 16 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - // store signgam if size of variable is 4 bytes -(p6) st4 [rSgnGamAddr] = rSgnGam - fmpy.s1 FR_G = FR_G, FR_G3 // G = (G_1 * G_2) * G_3 - nop.i 0 -} -{ .mfi - // store signgam if size of variable is 8 bytes -(p7) st8 [rSgnGamAddr] = rSgnGam - fadd.s1 FR_H = FR_H, FR_H3 // H = (H_1 + H_2) + H_3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 FR_h = FR_h, FR_h3 // h = (h_1 + h_2) + h_3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRcpX = fInvX, fInvX, f0 // 1/x^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA0L = fB2, fInvX, fA0L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 FR_r = fSignifX, FR_G, f1 // r = G * S_hi - 1 - nop.i 0 -} -{ .mfi - nop.m 0 - // High part of the log(x): Y_hi = N * log2_hi + H - fma.s1 fRes2H = fFloatN, FR_log2_hi, FR_H - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // h = N * log2_lo + h - fma.s1 FR_h = fFloatN, FR_log2_lo, FR_h - nop.i 0 -} -{ .mfi - nop.m 0 - // High part of the log(x): Y_hi = N * log2_hi + H - fma.s1 fRes1H = fFloatN, FR_log2_hi, FR_H - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fPol = fB18, fRcpX, fB16 // v9 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA2L = fRcpX, fRcpX, f0 // v10 - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fA3 = fB6, fRcpX, fB4 // v3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA4 = fB10, fRcpX, fB8 // v4 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fRes2H =fRes2H, f1, f1 // log_Hi(x) -1 - nop.i 0 -} -{ .mfi - nop.m 0 - // poly_lo = r * Q4 + Q3 - fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes1H = fRes1H, FR_MHalf, f0 // -0.5*log_Hi(x) - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 FR_rsq = FR_r, FR_r // rsq = r * r - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA7 = fB14, fRcpX, fB12 // v7 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA8 = fA2L, fB20, fPol // v8 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA2 = fA4, fA2L, fA3 // v2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA4L = fA2L, fA2L, f0 // v5 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fResH = fRes2H, f8, f0 // (x*(ln(x)-1))hi - nop.i 0 -} -{ .mfi - nop.m 0 - // poly_lo = poly_lo * r + Q2 - fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 FR_rcub = FR_rsq, FR_r, f0 // rcub = r^3 - nop.i 0 -} -{ .mfi - nop.m 0 - // poly_hi = Q1 * rsq + r - fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA11 = fRcpX, fInvX, f0 // 1/x^3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA6 = fA8, fA2L, fA7 // v6 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fResL = fRes2H, f8, fResH // d(x*(ln(x)-1)) - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fRes3H = fResH, fRes1H // (x*(ln(x)-1) -0.5ln(x))hi - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // poly_lo = poly_lo*r^3 + h - fma.s1 FR_poly_lo = FR_poly_lo, FR_rcub, FR_h - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fPol = fA4L, fA6, fA2 // v1 - nop.i 0 -} -{ .mfi - nop.m 0 - // raise inexact exception - fma.s0 FR_log2_lo = FR_log2_lo, FR_log2_lo, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes4H = fRes3H, fA0 // (x*(ln(x)-1) -0.5ln(x))hi + Chi - nop.i 0 -} -{ .mfi - nop.m 0 - fsub.s1 fRes3L = fResH, fRes3H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // Y_lo = poly_hi + poly_lo - fadd.s1 fRes2L = FR_poly_hi, FR_poly_lo - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fA0L = fPol, fA11, fA0L // S(1/x) + Clo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes3L = fRes3L, fRes1H - nop.i 0 -} -{ .mfi - nop.m 0 - fsub.s1 fRes4L = fRes3H, fRes4H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fResL = fRes2L, f8 , fResL // lo part of x*(ln(x)-1) - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // Clo + S(1/x) - 0.5*logLo(x) - fma.s1 fA0L = fRes2L, FR_MHalf, fA0L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes4L = fRes4L, fA0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // Clo + S(1/x) - 0.5*logLo(x) + (x*(ln(x)-1))lo - fadd.s1 fA0L = fA0L, fResL - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes4L = fRes4L, fRes3L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes4L = fRes4L, fA0L - nop.i 0 -} -;; -{ .mfb - nop.m 0 - fma.s0 f8 = fRes4H, f1, fRes4L - // exit for x > 10.0 - br.ret.sptk b0 -} -;; -// here if 8.0 <= x <= 10.0 -// Result = P15(y), where y = x/8.0 - 1.5 -.align 32 -lgammal_8_10: -{ .mfi - addl rPolDataPtr = @ltoff(lgammal_8_10_data), gp - fms.s1 FR_FracX = fSignifX, f1, FR_MHalf // y = x/8.0 - 1.5 - cmp.eq p6, p7 = 4, rSgnGamSize -} -;; -{ .mfi - ld8 rLnSinDataPtr = [rPolDataPtr] - nop.f 0 - nop.i 0 -} -{ .mfi - ld8 rPolDataPtr = [rPolDataPtr] - nop.f 0 - nop.i 0 -} -;; -{ .mfi - adds rZ1offsett = 32, rLnSinDataPtr - nop.f 0 - nop.i 0 -} -{ .mfi - adds rLnSinDataPtr = 48, rLnSinDataPtr - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA1, fA1L = [rPolDataPtr], 16 // A1 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe fA2 = [rZ1offsett], 32 // A5 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA0, fA0L = [rPolDataPtr], 16 // A0 - fma.s1 FR_rsq = FR_FracX, FR_FracX, f0 // y^2 - nop.i 0 -} -{ .mfi - ldfe fA3 = [rLnSinDataPtr],32 // A5 - nop.f 0 - nop.i 0 -} -;; -{ .mmf - ldfe fA4 = [rZ1offsett], 32 // A4 - ldfe fA5 = [rLnSinDataPtr], 32 // A5 - nop.f 0 -} -;; -{ .mmf - ldfe fA6 = [rZ1offsett], 32 // A6 - ldfe fA7 = [rLnSinDataPtr], 32 // A7 - nop.f 0 -} -;; -{ .mmf - ldfe fA8 = [rZ1offsett], 32 // A8 - ldfe fA9 = [rLnSinDataPtr], 32 // A9 - nop.f 0 -} -;; -{ .mmf - ldfe fA10 = [rZ1offsett], 32 // A10 - ldfe fA11 = [rLnSinDataPtr], 32 // A11 - nop.f 0 -} -;; -{ .mmf - ldfe fA12 = [rZ1offsett], 32 // A12 - ldfe fA13 = [rLnSinDataPtr], 32 // A13 - fma.s1 FR_Q4 = FR_rsq, FR_rsq, f0 // y^4 -} -;; -{ .mmf - ldfe fA14 = [rZ1offsett], 32 // A14 - ldfe fA15 = [rLnSinDataPtr], 32 // A15 - nop.f 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes1H = FR_FracX, fA1, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA3 = fA3, FR_FracX, fA2 // v4 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA5 = fA5, FR_FracX, fA4 // v5 - nop.i 0 -} -;; -{ .mfi - // store sign of GAMMA(x) if size of variable is 4 bytes -(p6) st4 [rSgnGamAddr] = rSgnGam - fma.s1 fA3L = FR_Q4, FR_Q4, f0 // v9 = y^8 - nop.i 0 -} -{ .mfi - // store sign of GAMMA(x) if size of variable is 8 bytes -(p7) st8 [rSgnGamAddr] = rSgnGam - fma.s1 fA7 = fA7, FR_FracX, fA6 // v7 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA9 = fA9, FR_FracX, fA8 // v8 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fRes1L = FR_FracX, fA1, fRes1H - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA11 = fA11, FR_FracX, fA10 // v12 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA13 = fA13, FR_FracX, fA12 // v13 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fRes2H = fRes1H, f1, fA0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA15 = fA15, FR_FracX, fA14 // v16 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA5 = fA5, FR_rsq, fA3 // v3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA9 = fA9, FR_rsq, fA7 // v6 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes1L = FR_FracX, fA1L, fRes1L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fRes2L = fA0, f1, fRes2H - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA13 = fA13, FR_rsq, fA11 // v11 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA9 = fA9, FR_Q4, fA5 // v2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes1L = fRes1L, f1, fA0L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes2L = fRes2L, f1, fRes1H - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA15 = fA15, FR_Q4, fA13 // v10 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes2L = fRes1L, f1, fRes2L - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPol = fA3L, fA15, fA9 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 f8 = FR_rsq , fPol, fRes2H - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPol = fPol, FR_rsq, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fRes1L = fRes2H, f1, f8 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes1L = fRes1L, f1, fPol - nop.i 0 -} -;; -{.mfi - nop.m 0 - fma.s1 fRes1L = fRes1L, f1, fRes2L - nop.i 0 -} -;; -{ .mfb - nop.m 0 - fma.s0 f8 = f8, f1, fRes1L - // exit for 8.0 <= x <= 10.0 - br.ret.sptk b0 -} -;; - -// here if 4.0 <=x < 8.0 -.align 32 -lgammal_4_8: -{ .mfi - addl rPolDataPtr= @ltoff(lgammal_4_8_data),gp - fms.s1 FR_FracX = fSignifX, f1, FR_MHalf - adds rSgnGam = 1, r0 -} -;; -{ .mfi - ld8 rPolDataPtr = [rPolDataPtr] - nop.f 0 - nop.i 0 -} -;; - -{ .mfb - adds rTmpPtr = 160, rPolDataPtr - nop.f 0 - // branch to special path which computes polynomial of 25th degree - br.sptk lgamma_polynom25 -} -;; - -// here if 2.25 <=x < 4.0 -.align 32 -lgammal_2Q_4: -{ .mfi - addl rPolDataPtr= @ltoff(lgammal_2Q_4_data),gp - fms.s1 FR_FracX = fSignifX, f1, FR_MHalf - adds rSgnGam = 1, r0 -} -;; -{ .mfi - ld8 rPolDataPtr = [rPolDataPtr] - nop.f 0 - nop.i 0 -} -;; - -{ .mfb - adds rTmpPtr = 160, rPolDataPtr - nop.f 0 - // branch to special path which computes polynomial of 25th degree - br.sptk lgamma_polynom25 -} -;; - -// here if 0.5 <= |x| < 0.75 -.align 32 -lgammal_half_3Q: -.pred.rel "mutex", p14, p15 -{ .mfi -(p14) addl rPolDataPtr= @ltoff(lgammal_half_3Q_data),gp - // FR_FracX = x - 0.625 for positive x -(p14) fms.s1 FR_FracX = f8, f1, FR_FracX -(p14) adds rSgnGam = 1, r0 -} -{ .mfi -(p15) addl rPolDataPtr= @ltoff(lgammal_half_3Q_neg_data),gp - // FR_FracX = x + 0.625 for negative x -(p15) fma.s1 FR_FracX = f8, f1, FR_FracX -(p15) adds rSgnGam = -1, r0 -} -;; -{ .mfi - ld8 rPolDataPtr = [rPolDataPtr] - nop.f 0 - nop.i 0 -} -;; -{ .mfb - adds rTmpPtr = 160, rPolDataPtr - nop.f 0 - // branch to special path which computes polynomial of 25th degree - br.sptk lgamma_polynom25 -} -;; -// here if 1.3125 <= x < 1.5625 -.align 32 -lgammal_loc_min: -{ .mfi - adds rSgnGam = 1, r0 - nop.f 0 - nop.i 0 -} -{ .mfb - adds rTmpPtr = 160, rPolDataPtr - fms.s1 FR_FracX = f8, f1, fA5L - br.sptk lgamma_polynom25 -} -;; -// here if -2.605859375 <= x < -2.5 -// special polynomial approximation used since neither "near root" -// approximation nor reflection formula give satisfactory accuracy on -// this range -.align 32 -_neg2andHalf: -{ .mfi - addl rPolDataPtr= @ltoff(lgammal_neg2andHalf_data),gp - fma.s1 FR_FracX = fB20, f1, f8 // 2.5 + x - adds rSgnGam = -1, r0 -} -;; -{.mfi - ld8 rPolDataPtr = [rPolDataPtr] - nop.f 0 - nop.i 0 -} -;; -{ .mfb - adds rTmpPtr = 160, rPolDataPtr - nop.f 0 - // branch to special path which computes polynomial of 25th degree - br.sptk lgamma_polynom25 -} -;; - -// here if -0.5 < x <= -0.40625 -.align 32 -lgammal_near_neg_half: -{ .mmf - addl rPolDataPtr= @ltoff(lgammal_near_neg_half_data),gp - setf.exp FR_FracX = rExpHalf - nop.f 0 -} -;; -{ .mfi - ld8 rPolDataPtr = [rPolDataPtr] - nop.f 0 - adds rSgnGam = -1, r0 -} -;; -{ .mfb - adds rTmpPtr = 160, rPolDataPtr - fma.s1 FR_FracX = FR_FracX, f1, f8 - // branch to special path which computes polynomial of 25th degree - br.sptk lgamma_polynom25 -} -;; - -// here if there an answer is P25(x) -// rPolDataPtr, rTmpPtr point to coefficients -// x is in FR_FracX register -.align 32 -lgamma_polynom25: -{ .mfi - ldfpd fA3, fA0L = [rPolDataPtr], 16 // A3 - nop.f 0 - cmp.eq p6, p7 = 4, rSgnGamSize -} -{ .mfi - ldfpd fA18, fA19 = [rTmpPtr], 16 // D7, D6 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA1, fA1L = [rPolDataPtr], 16 // A1 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfpd fA16, fA17 = [rTmpPtr], 16 // D4, D5 - nop.f 0 -} -;; -{ .mfi - ldfpd fA12, fA13 = [rPolDataPtr], 16 // D0, D1 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfpd fA14, fA15 = [rTmpPtr], 16 // D2, D3 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA24, fA25 = [rPolDataPtr], 16 // C21, C20 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfpd fA22, fA23 = [rTmpPtr], 16 // C19, C18 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA2, fA2L = [rPolDataPtr], 16 // A2 - fma.s1 fA4L = FR_FracX, FR_FracX, f0 // x^2 - nop.i 0 -} -{ .mfi - ldfpd fA20, fA21 = [rTmpPtr], 16 // C17, C16 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfe fA11 = [rTmpPtr], 16 // E7 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfpd fA0, fA3L = [rPolDataPtr], 16 // A0 - nop.f 0 - nop.i 0 -};; -{ .mfi - ldfe fA10 = [rPolDataPtr], 16 // E6 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe fA9 = [rTmpPtr], 16 // E5 - nop.f 0 - nop.i 0 -} -;; -{ .mmf - ldfe fA8 = [rPolDataPtr], 16 // E4 - ldfe fA7 = [rTmpPtr], 16 // E3 - nop.f 0 -} -;; -{ .mmf - ldfe fA6 = [rPolDataPtr], 16 // E2 - ldfe fA5 = [rTmpPtr], 16 // E1 - nop.f 0 -} -;; -{ .mfi - ldfe fA4 = [rPolDataPtr], 16 // E0 - fma.s1 fA5L = fA4L, fA4L, f0 // x^4 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fB2 = FR_FracX, FR_FracX, fA4L // x^2 - - nop.i 0 -} -;; -{ .mfi - // store signgam if size of variable is 4 bytes -(p6) st4 [rSgnGamAddr] = rSgnGam - fma.s1 fRes4H = fA3, FR_FracX, f0 // (A3*x)hi - nop.i 0 -} -{ .mfi - // store signgam if size of variable is 8 bytes -(p7) st8 [rSgnGamAddr] = rSgnGam - fma.s1 fA19 = fA19, FR_FracX, fA18 // D7*x + D6 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fResH = fA1, FR_FracX, f0 // (A1*x)hi - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB6 = fA1L, FR_FracX, fA0L // A1L*x + A0L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA17 = fA17, FR_FracX, fA16 // D5*x + D4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA15 = fA15, FR_FracX, fA14 // D3*x + D2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA25 = fA25, FR_FracX, fA24 // C21*x + C20 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA13 = fA13, FR_FracX, fA12 // D1*x + D0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA23 = fA23, FR_FracX, fA22 // C19*x + C18 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA21 = fA21, FR_FracX, fA20 // C17*x + C16 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fRes4L = fA3, FR_FracX, fRes4H // delta((A3*x)hi) - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fRes2H = fRes4H, fA2 // (A3*x + A2)hi - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fResL = fA1, FR_FracX, fResH // d(A1*x) - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fRes1H = fResH, fA0 // (A1*x + A0)hi - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA19 = fA19, fA4L, fA17 // Dhi - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA11 = fA11, FR_FracX, fA10 // E7*x + E6 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // Doing this to raise inexact flag - fma.s0 fA10 = fA0, fA0, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA15 = fA15, fA4L, fA13 // Dlo - nop.i 0 -} -{ .mfi - nop.m 0 - // (C21*x + C20)*x^2 + C19*x + C18 - fma.s1 fA25 = fA25, fA4L, fA23 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA9 = fA9, FR_FracX, fA8 // E5*x + E4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA7 = fA7, FR_FracX, fA6 // E3*x + E2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes4L = fA3L, FR_FracX, fRes4L // (A3*x)lo - nop.i 0 -} -{ .mfi - nop.m 0 - fsub.s1 fRes2L = fA2, fRes2H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fResL = fResL, fB6 // (A1L*x + A0L) + d(A1*x) - nop.i 0 -} -{ .mfi - nop.m 0 - fsub.s1 fRes1L = fA0, fRes1H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA5 = fA5, FR_FracX, fA4 // E1*x + E0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB8 = fA5L, fA5L, f0 // x^8 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // ((C21*x + C20)*x^2 + C19*x + C18)*x^2 + C17*x + C16 - fma.s1 fA25 = fA25, fA4L, fA21 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA19 = fA19, fA5L, fA15 // D - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA11 = fA11, fA4L, fA9 // Ehi - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes2L = fRes2L, fRes4H - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fRes4L = fRes4L, fA2L // (A3*x)lo + A2L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes3H = fRes2H, fA4L, f0 // ((A3*x + A2)*x^2)hi - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fRes1L = fRes1L, fResH - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes3L = fRes2H, fB2, f0 // (A3*x + A2)hi*d(x^2) - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA7 = fA7, fA4L, fA5 // Elo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA25 = fA25, fB8, fA19 // C*x^8 + D - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes2L = fRes2L, fRes4L // (A3*x + A2)lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fB4 = fRes2H, fA4L, fRes3H // d((A3*x + A2)*x^2)) - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fRes1L = fRes1L, fResL // (A1*x + A0)lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fB20 = fRes3H, fRes1H // Phi - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA11 = fA11, fA5L, fA7 // E - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // ( (A3*x + A2)lo* + (A3*x + A2)hi*d(x^2)) - fma.s1 fRes3L = fRes2L, fA4L, fRes3L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // d((A3*x + A2)*x^2)) + (A1*x + A0)lo - fadd.s1 fRes1L = fRes1L, fB4 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fsub.s1 fB18 = fRes1H, fB20 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPol = fA25, fB8, fA11 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes1L = fRes1L, fRes3L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fB18 = fB18, fRes3H - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fRes4H = fPol, fA5L, fB20 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fPolL = fPol, fA5L, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fB18 = fB18, fRes1L // Plo - nop.i 0 -} -{ .mfi - nop.m 0 - fsub.s1 fRes4L = fB20, fRes4H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fB18 = fB18, fPolL - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes4L = fRes4L, fB18 - nop.i 0 -} -;; -{ .mfb - nop.m 0 - fma.s0 f8 = fRes4H, f1, fRes4L - // P25(x) computed, exit here - br.ret.sptk b0 -} -;; - - -// here if 0.75 <= x < 1.3125 -.align 32 -lgammal_03Q_1Q: -{ .mfi - addl rPolDataPtr= @ltoff(lgammal_03Q_1Q_data),gp - fma.s1 FR_FracX = fA5L, f1, f0 // x - adds rSgnGam = 1, r0 -} -{ .mfi - nop.m 0 - fma.s1 fB4 = fA5L, fA5L, f0 // x^2 - nop.i 0 -} -;; -{ .mfi - ld8 rPolDataPtr = [rPolDataPtr] - nop.f 0 - nop.i 0 -} -;; -{ .mfb - adds rTmpPtr = 144, rPolDataPtr - nop.f 0 - br.sptk lgamma_polynom24x -} -;; - -// here if 1.5625 <= x < 2.25 -.align 32 -lgammal_13Q_2Q: -{ .mfi - addl rPolDataPtr= @ltoff(lgammal_13Q_2Q_data),gp - fma.s1 FR_FracX = fB4, f1, f0 // x - adds rSgnGam = 1, r0 -} -{ .mfi - nop.m 0 - fma.s1 fB4 = fB4, fB4, f0 // x^2 - nop.i 0 -} -;; -{ .mfi - ld8 rPolDataPtr = [rPolDataPtr] - nop.f 0 - nop.i 0 -} -;; -{ .mfb - adds rTmpPtr = 144, rPolDataPtr - nop.f 0 - br.sptk lgamma_polynom24x -} -;; - -// here if result is Pol24(x) -// x is in FR_FracX, -// rPolDataPtr, rTmpPtr point to coefficients -.align 32 -lgamma_polynom24x: -{ .mfi - ldfpd fA4, fA2L = [rPolDataPtr], 16 - nop.f 0 - cmp.eq p6, p7 = 4, rSgnGamSize -} -{ .mfi - ldfpd fA23, fA24 = [rTmpPtr], 16 // C18, C19 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA3, fA1L = [rPolDataPtr], 16 - fma.s1 fA5L = fB4, fB4, f0 // x^4 - nop.i 0 -} -{ .mfi - ldfpd fA19, fA20 = [rTmpPtr], 16 // D6, D7 - fms.s1 fB2 = FR_FracX, FR_FracX, fB4 // x^2 - - nop.i 0 -} -;; -{ .mmf - ldfpd fA15, fA16 = [rPolDataPtr], 16 // D2, D3 - ldfpd fA17, fA18 = [rTmpPtr], 16 // D4, D5 - nop.f 0 -} -;; -{ .mmf - ldfpd fA13, fA14 = [rPolDataPtr], 16 // D0, D1 - ldfpd fA12, fA21 = [rTmpPtr], 16 // E7, C16 - nop.f 0 -} -;; -{ .mfi - ldfe fA11 = [rPolDataPtr], 16 // E6 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe fA10 = [rTmpPtr], 16 // E5 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA2, fA4L = [rPolDataPtr], 16 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfpd fA1, fA3L = [rTmpPtr], 16 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA22, fA25 = [rPolDataPtr], 16 // C17, C20 - fma.s1 fA0 = fA5L, fA5L, f0 // x^8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA0L = fA5L, FR_FracX, f0 // x^5 - nop.i 0 -} -;; -{ .mmf - ldfe fA9 = [rPolDataPtr], 16 // E4 - ldfe fA8 = [rTmpPtr], 16 // E3 - nop.f 0 -} -;; -{ .mmf - ldfe fA7 = [rPolDataPtr], 16 // E2 - ldfe fA6 = [rTmpPtr], 16 // E1 - nop.f 0 -} -;; -{ .mfi - ldfe fA5 = [rTmpPtr], 16 // E0 - fma.s1 fRes4H = fA4, fB4, f0 // A4* - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPol = fA24, FR_FracX, fA23 // C19*x + C18 - nop.i 0 -} -;; -{ .mfi - // store signgam if size of variable is 4 bytes -(p6) st4 [rSgnGamAddr] = rSgnGam - fma.s1 fRes1H = fA3, fB4, f0 // A3* - nop.i 0 -} -{ .mfi - // store signgam if size of variable is 8 bytes -(p7) st8 [rSgnGamAddr] = rSgnGam - fma.s1 fA1L = fA3, fB2,fA1L // A3*d(x^2) + A1L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA20 = fA20, FR_FracX, fA19 // D7*x + D6 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA18 = fA18, FR_FracX, fA17 // D5*x + D4 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA16 = fA16, FR_FracX, fA15 // D3*x + D2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA14 = fA14, FR_FracX, fA13 // D1*x + D0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA2L = fA4, fB2,fA2L // A4*d(x^2) + A2L - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA12 = fA12, FR_FracX, fA11 // E7*x + E6 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fRes2L = fA4, fB4, fRes4H // delta(A4*) - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fRes2H = fRes4H, fA2 // A4* + A2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fms.s1 fRes3L = fA3, fB4, fRes1H // delta(A3*) - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 fRes3H = fRes1H, fA1 // A3* + A1 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA20 = fA20, fB4, fA18 // (D7*x + D6)*x^2 + D5*x + D4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA22 = fA22, FR_FracX, fA21 // C17*x + C16 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA16 = fA16, fB4, fA14 // (D3*x + D2)*x^2 + D1*x + D0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPol = fA25, fB4, fPol // C20*x^2 + C19*x + C18 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA2L = fA4L, fB4, fA2L // A4L* + A4*d(x^2) + A2L - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA1L = fA3L, fB4, fA1L // A3L* + A3*d(x^2) + A1L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fsub.s1 fRes4L = fA2, fRes2H // d1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fResH = fRes2H, fB4, f0 // (A4* + A2)*x^2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fsub.s1 fRes1L = fA1, fRes3H // d1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB6 = fRes3H, FR_FracX, f0 // (A3* + A1)*x - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA10 = fA10, FR_FracX, fA9 // E5*x + E4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA8 = fA8, FR_FracX, fA7 // E3*x + E2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // (C20*x^2 + C19*x + C18)*x^2 + C17*x + C16 - fma.s1 fPol = fPol, fB4, fA22 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA6 = fA6, FR_FracX, fA5 // E1*x + E0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // A4L* + A4*d(x^2) + A2L + delta(A4*) - fadd.s1 fRes2L = fA2L, fRes2L - nop.i 0 -} -{ .mfi - nop.m 0 - // A3L* + A3*d(x^2) + A1L + delta(A3*) - fadd.s1 fRes3L = fA1L, fRes3L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes4L = fRes4L, fRes4H // d2 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fResL = fRes2H, fB4, fResH // d(A4* + A2)*x^2) - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes1L = fRes1L, fRes1H // d2 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fB8 = fRes3H, FR_FracX, fB6 // d((A3* + A1)*x) - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fB10 = fResH, fB6 // (A4*x^4 + .. + A1*x)hi - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA12 = fA12, fB4, fA10 // Ehi - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // ((D7*x + D6)*x^2 + D5*x + D4)*x^4 + (D3*x + D2)*x^2 + D1*x + D0 - fma.s1 fA20 = fA20, fA5L, fA16 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA8 = fA8, fB4, fA6 // Elo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes2L = fRes2L, fRes4L // (A4* + A2)lo - nop.i 0 -} -{ .mfi - nop.m 0 - // d(A4* + A2)*x^2) + A4* + A2)*d(x^2) - fma.s1 fResL = fRes2H, fB2, fResL - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes3L = fRes3L, fRes1L // (A4* + A2)lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fsub.s1 fB12 = fB6, fB10 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fPol = fPol, fA0, fA20 // PolC*x^8 + PolD - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPolL = fA12, fA5L, fA8 // E - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fResL = fB4, fRes2L, fResL // ((A4* + A2)*x^2)lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes3L = fRes3L, FR_FracX, fB8 // ((A3* + A1)*x)lo - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fB12 = fB12, fResH - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fPol = fPol, fA0, fPolL - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes3L = fRes3L, fResL - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes2H = fPol, fA0L, fB10 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes3L = fB12, fRes3L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fsub.s1 fRes4L = fB10, fRes2H - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes4L = fPol, fA0L, fRes4L - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fadd.s1 fRes4L = fRes4L, fRes3L - nop.i 0 -} -;; -{ .mfb - nop.m 0 - // final result for all paths for which the result is Pol24(x) - fma.s0 f8 = fRes2H, f1, fRes4L - // here is the exit for all paths for which the result is Pol24(x) - br.ret.sptk b0 -} -;; - - -// here if x is natval, nan, +/-inf, +/-0, or denormal -.align 32 -lgammal_spec: -{ .mfi - nop.m 0 - fclass.m p9, p0 = f8, 0xB // +/-denormals - nop.i 0 -};; -{ .mfi - nop.m 0 - fclass.m p6, p0 = f8, 0x1E1 // Test x for natval, nan, +inf - nop.i 0 -};; -{ .mfb - nop.m 0 - fclass.m p7, p0 = f8, 0x7 // +/-0 -(p9) br.cond.sptk lgammal_denormal_input -};; -{ .mfb - nop.m 0 - nop.f 0 - // branch out if x is natval, nan, +inf -(p6) br.cond.spnt lgammal_nan_pinf -};; -{ .mfb - nop.m 0 - nop.f 0 -(p7) br.cond.spnt lgammal_singularity -};; -// if we are still here then x = -inf -{ .mfi - cmp.eq p6, p7 = 4, rSgnGamSize - nop.f 0 - adds rSgnGam = 1, r0 -};; -{ .mfi - // store signgam if size of variable is 4 bytes -(p6) st4 [rSgnGamAddr] = rSgnGam - nop.f 0 - nop.i 0 -} -{ .mfb - // store signgam if size of variable is 8 bytes -(p7) st8 [rSgnGamAddr] = rSgnGam - fma.s0 f8 = f8,f8,f0 // return +inf, no call to error support - br.ret.spnt b0 -};; - -// here if x is NaN, NatVal or +INF -.align 32 -lgammal_nan_pinf: -{ .mfi - cmp.eq p6, p7 = 4, rSgnGamSize - nop.f 0 - adds rSgnGam = 1, r0 -} -;; -{ .mfi - // store signgam if size of variable is 4 bytes -(p6) st4 [rSgnGamAddr] = rSgnGam - fma.s0 f8 = f8,f1,f8 // return x+x if x is natval, nan, +inf - nop.i 0 -} -{ .mfb - // store signgam if size of variable is 8 bytes -(p7) st8 [rSgnGamAddr] = rSgnGam - nop.f 0 - br.ret.sptk b0 -} -;; - -// here if x denormal or unnormal -.align 32 -lgammal_denormal_input: -{ .mfi - nop.m 0 - fma.s0 fResH = f1, f1, f8 // raise denormal exception - nop.i 0 -} -{ .mfi - nop.m 0 - fnorm.s1 f8 = f8 // normalize input value - nop.i 0 -} -;; -{ .mfi - getf.sig rSignifX = f8 - fmerge.se fSignifX = f1, f8 - nop.i 0 -} -{ .mfi - getf.exp rSignExpX = f8 - fcvt.fx.s1 fXint = f8 // Convert arg to int (int repres. in FR) - nop.i 0 -} -;; -{ .mfi - getf.exp rSignExpX = f8 - fcmp.lt.s1 p15, p14 = f8, f0 - nop.i 0 -} -;; -{ .mfb - and rExpX = rSignExpX, r17Ones - fmerge.s fAbsX = f1, f8 // |x| - br.cond.sptk _deno_back_to_main_path -} -;; - - -// here if overflow (x > overflow_bound) -.align 32 -lgammal_overflow: -{ .mfi - addl r8 = 0x1FFFE, r0 - nop.f 0 - cmp.eq p6, p7 = 4, rSgnGamSize -} -{ .mfi - adds rSgnGam = 1, r0 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - setf.exp f9 = r8 - fmerge.s FR_X = f8,f8 - mov GR_Parameter_TAG = 102 // overflow -};; -{ .mfi - // store signgam if size of variable is 4 bytes -(p6) st4 [rSgnGamAddr] = rSgnGam - nop.f 0 - nop.i 0 -} -{ .mfb - // store signgam if size of variable is 8 bytes -(p7) st8 [rSgnGamAddr] = rSgnGam - fma.s0 FR_RESULT = f9,f9,f0 // Set I,O and +INF result - br.cond.sptk __libm_error_region -};; - -// here if x is negative integer or +/-0 (SINGULARITY) -.align 32 -lgammal_singularity: -{ .mfi - adds rSgnGam = 1, r0 - fclass.m p8,p0 = f8,0x6 // is x -0? - mov GR_Parameter_TAG = 103 // negative -} -{ .mfi - cmp.eq p6, p7 = 4, rSgnGamSize - fma.s1 FR_X = f0,f0,f8 - nop.i 0 -};; -{ .mfi -(p8) sub rSgnGam = r0, rSgnGam - nop.f 0 - nop.i 0 -} -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; -{ .mfi - // store signgam if size of variable is 4 bytes -(p6) st4 [rSgnGamAddr] = rSgnGam - nop.f 0 - nop.i 0 -} -{ .mfb - // store signgam if size of variable is 8 bytes -(p7) st8 [rSgnGamAddr] = rSgnGam - frcpa.s0 FR_RESULT, p0 = f1, f0 - br.cond.sptk __libm_error_region -};; - -GLOBAL_LIBM_END(__libm_lgammal) - - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 999 - nop.i 999 -};; -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region#) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/libm_reduce.S b/sysdeps/ia64/fpu/libm_reduce.S deleted file mode 100644 index 8b132497b9..0000000000 --- a/sysdeps/ia64/fpu/libm_reduce.S +++ /dev/null @@ -1,1578 +0,0 @@ -.file "libm_reduce.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History: -// 02/02/00 Initial Version -// 05/13/02 Rescheduled for speed, changed interface to pass -// parameters in fp registers -// 02/10/03 Reordered header: .section, .global, .proc, .align; -// used data8 for long double data storage -// -//********************************************************************* -//********************************************************************* -// -// Function: __libm_pi_by_two_reduce(x) return r, c, and N where -// x = N * pi/4 + (r+c) , where |r+c| <= pi/4. -// This function is not designed to be used by the -// general user. -// -//********************************************************************* -// -// Accuracy: Returns double-precision values -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: -// f8 = Input x, return value r -// f9 = return value c -// f32-f70 -// -// General Purpose Registers: -// r8 = return value N -// r34-r64 -// -// Predicate Registers: p6-p14 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// No conditions should be raised. -// -//********************************************************************* -// -// I. Introduction -// =============== -// -// For the forward trigonometric functions sin, cos, sincos, and -// tan, the original algorithms for IA 64 handle arguments up to -// 1 ulp less than 2^63 in magnitude. For double-extended arguments x, -// |x| >= 2^63, this routine returns N and r_hi, r_lo where -// -// x is accurately approximated by -// 2*K*pi + N * pi/2 + r_hi + r_lo, |r_hi+r_lo| <= pi/4. -// CASE = 1 or 2. -// CASE is 1 unless |r_hi + r_lo| < 2^(-33). -// -// The exact value of K is not determined, but that information is -// not required in trigonometric function computations. -// -// We first assume the argument x in question satisfies x >= 2^(63). -// In particular, it is positive. Negative x can be handled by symmetry: -// -// -x is accurately approximated by -// -2*K*pi + (-N) * pi/2 - (r_hi + r_lo), |r_hi+r_lo| <= pi/4. -// -// The idea of the reduction is that -// -// x * 2/pi = N_big + N + f, |f| <= 1/2 -// -// Moreover, for double extended x, |f| >= 2^(-75). (This is an -// non-obvious fact found by enumeration using a special algorithm -// involving continued fraction.) The algorithm described below -// calculates N and an accurate approximation of f. -// -// Roughly speaking, an appropriate 256-bit (4 X 64) portion of -// 2/pi is multiplied with x to give the desired information. -// -// II. Representation of 2/PI -// ========================== -// -// The value of 2/pi in binary fixed-point is -// -// .101000101111100110...... -// -// We store 2/pi in a table, starting at the position corresponding -// to bit position 63 -// -// bit position 63 62 ... 0 -1 -2 -3 -4 -5 -6 -7 .... -16576 -// -// 0 0 ... 0 . 1 0 1 0 1 0 1 .... X -// -// ^ -// |__ implied binary pt -// -// III. Algorithm -// ============== -// -// This describes the algorithm in the most natural way using -// unsigned interger multiplication. The implementation section -// describes how the integer arithmetic is simulated. -// -// STEP 0. Initialization -// ---------------------- -// -// Let the input argument x be -// -// x = 2^m * ( 1. b_1 b_2 b_3 ... b_63 ), 63 <= m <= 16383. -// -// The first crucial step is to fetch four 64-bit portions of 2/pi. -// To fulfill this goal, we calculate the bit position L of the -// beginning of these 256-bit quantity by -// -// L := 62 - m. -// -// Note that -16321 <= L <= -1 because 63 <= m <= 16383; and that -// the storage of 2/pi is adequate. -// -// Fetch P_1, P_2, P_3, P_4 beginning at bit position L thus: -// -// bit position L L-1 L-2 ... L-63 -// -// P_1 = b b b ... b -// -// each b can be 0 or 1. Also, let P_0 be the two bits correspoding to -// bit positions L+2 and L+1. So, when each of the P_j is interpreted -// with appropriate scaling, we have -// -// 2/pi = P_big + P_0 + (P_1 + P_2 + P_3 + P_4) + P_small -// -// Note that P_big and P_small can be ignored. The reasons are as follow. -// First, consider P_big. If P_big = 0, we can certainly ignore it. -// Otherwise, P_big >= 2^(L+3). Now, -// -// P_big * ulp(x) >= 2^(L+3) * 2^(m-63) -// >= 2^(65-m + m-63 ) -// >= 2^2 -// -// Thus, P_big * x is an integer of the form 4*K. So -// -// x = 4*K * (pi/2) + x*(P_0 + P_1 + P_2 + P_3 + P_4)*(pi/2) -// + x*P_small*(pi/2). -// -// Hence, P_big*x corresponds to information that can be ignored for -// trigonometic function evaluation. -// -// Next, we must estimate the effect of ignoring P_small. The absolute -// error made by ignoring P_small is bounded by -// -// |P_small * x| <= ulp(P_4) * x -// <= 2^(L-255) * 2^(m+1) -// <= 2^(62-m-255 + m + 1) -// <= 2^(-192) -// -// Since for double-extended precision, x * 2/pi = integer + f, -// 0.5 >= |f| >= 2^(-75), the relative error introduced by ignoring -// P_small is bounded by 2^(-192+75) <= 2^(-117), which is acceptable. -// -// Further note that if x is split into x_hi + x_lo where x_lo is the -// two bits corresponding to bit positions 2^(m-62) and 2^(m-63); then -// -// P_0 * x_hi -// -// is also an integer of the form 4*K; and thus can also be ignored. -// Let M := P_0 * x_lo which is a small integer. The main part of the -// calculation is really the multiplication of x with the four pieces -// P_1, P_2, P_3, and P_4. -// -// Unless the reduced argument is extremely small in magnitude, it -// suffices to carry out the multiplication of x with P_1, P_2, and -// P_3. x*P_4 will be carried out and added on as a correction only -// when it is found to be needed. Note also that x*P_4 need not be -// computed exactly. A straightforward multiplication suffices since -// the rounding error thus produced would be bounded by 2^(-3*64), -// that is 2^(-192) which is small enough as the reduced argument -// is bounded from below by 2^(-75). -// -// Now that we have four 64-bit data representing 2/pi and a -// 64-bit x. We first need to calculate a highly accurate product -// of x and P_1, P_2, P_3. This is best understood as integer -// multiplication. -// -// -// STEP 1. Multiplication -// ---------------------- -// -// -// --------- --------- --------- -// | P_1 | | P_2 | | P_3 | -// --------- --------- --------- -// -// --------- -// X | X | -// --------- -// ---------------------------------------------------- -// -// --------- --------- -// | A_hi | | A_lo | -// --------- --------- -// -// -// --------- --------- -// | B_hi | | B_lo | -// --------- --------- -// -// -// --------- --------- -// | C_hi | | C_lo | -// --------- --------- -// -// ==================================================== -// --------- --------- --------- --------- -// | S_0 | | S_1 | | S_2 | | S_3 | -// --------- --------- --------- --------- -// -// -// -// STEP 2. Get N and f -// ------------------- -// -// Conceptually, after the individual pieces S_0, S_1, ..., are obtained, -// we have to sum them and obtain an integer part, N, and a fraction, f. -// Here, |f| <= 1/2, and N is an integer. Note also that N need only to -// be known to module 2^k, k >= 2. In the case when |f| is small enough, -// we would need to add in the value x*P_4. -// -// -// STEP 3. Get reduced argument -// ---------------------------- -// -// The value f is not yet the reduced argument that we seek. The -// equation -// -// x * 2/pi = 4K + N + f -// -// says that -// -// x = 2*K*pi + N * pi/2 + f * (pi/2). -// -// Thus, the reduced argument is given by -// -// reduced argument = f * pi/2. -// -// This multiplication must be performed to extra precision. -// -// IV. Implementation -// ================== -// -// Step 0. Initialization -// ---------------------- -// -// Set sgn_x := sign(x); x := |x|; x_lo := 2 lsb of x. -// -// In memory, 2/pi is stored contiguously as -// -// 0x00000000 0x00000000 0xA2F.... -// ^ -// |__ implied binary bit -// -// Given x = 2^m * 1.xxxx...xxx; we calculate L := 62 - m. Thus -// -1 <= L <= -16321. We fetch from memory 5 integer pieces of data. -// -// P_0 is the two bits corresponding to bit positions L+2 and L+1 -// P_1 is the 64-bit starting at bit position L -// P_2 is the 64-bit starting at bit position L-64 -// P_3 is the 64-bit starting at bit position L-128 -// P_4 is the 64-bit starting at bit position L-192 -// -// For example, if m = 63, P_0 would be 0 and P_1 would look like -// 0xA2F... -// -// If m = 65, P_0 would be the two msb of 0xA, thus, P_0 is 10 in binary. -// P_1 in binary would be 1 0 0 0 1 0 1 1 1 1 .... -// -// Step 1. Multiplication -// ---------------------- -// -// At this point, P_1, P_2, P_3, P_4 are integers. They are -// supposed to be interpreted as -// -// 2^(L-63) * P_1; -// 2^(L-63-64) * P_2; -// 2^(L-63-128) * P_3; -// 2^(L-63-192) * P_4; -// -// Since each of them need to be multiplied to x, we would scale -// both x and the P_j's by some convenient factors: scale each -// of P_j's up by 2^(63-L), and scale x down by 2^(L-63). -// -// p_1 := fcvt.xf ( P_1 ) -// p_2 := fcvt.xf ( P_2 ) * 2^(-64) -// p_3 := fcvt.xf ( P_3 ) * 2^(-128) -// p_4 := fcvt.xf ( P_4 ) * 2^(-192) -// x := replace exponent of x by -1 -// because 2^m * 1.xxxx...xxx * 2^(L-63) -// is 2^(-1) * 1.xxxx...xxx -// -// We are now faced with the task of computing the following -// -// --------- --------- --------- -// | P_1 | | P_2 | | P_3 | -// --------- --------- --------- -// -// --------- -// X | X | -// --------- -// ---------------------------------------------------- -// -// --------- --------- -// | A_hi | | A_lo | -// --------- --------- -// -// --------- --------- -// | B_hi | | B_lo | -// --------- --------- -// -// --------- --------- -// | C_hi | | C_lo | -// --------- --------- -// -// ==================================================== -// ----------- --------- --------- --------- -// | S_0 | | S_1 | | S_2 | | S_3 | -// ----------- --------- --------- --------- -// ^ ^ -// | |___ binary point -// | -// |___ possibly one more bit -// -// Let FPSR3 be set to round towards zero with widest precision -// and exponent range. Unless an explicit FPSR is given, -// round-to-nearest with widest precision and exponent range is -// used. -// -// Define sigma_C := 2^63; sigma_B := 2^(-1); sigma_C := 2^(-65). -// -// Tmp_C := fmpy.fpsr3( x, p_1 ); -// If Tmp_C >= sigma_C then -// C_hi := Tmp_C; -// C_lo := x*p_1 - C_hi ...fma, exact -// Else -// C_hi := fadd.fpsr3(sigma_C, Tmp_C) - sigma_C -// ...subtraction is exact, regardless -// ...of rounding direction -// C_lo := x*p_1 - C_hi ...fma, exact -// End If -// -// Tmp_B := fmpy.fpsr3( x, p_2 ); -// If Tmp_B >= sigma_B then -// B_hi := Tmp_B; -// B_lo := x*p_2 - B_hi ...fma, exact -// Else -// B_hi := fadd.fpsr3(sigma_B, Tmp_B) - sigma_B -// ...subtraction is exact, regardless -// ...of rounding direction -// B_lo := x*p_2 - B_hi ...fma, exact -// End If -// -// Tmp_A := fmpy.fpsr3( x, p_3 ); -// If Tmp_A >= sigma_A then -// A_hi := Tmp_A; -// A_lo := x*p_3 - A_hi ...fma, exact -// Else -// A_hi := fadd.fpsr3(sigma_A, Tmp_A) - sigma_A -// ...subtraction is exact, regardless -// ...of rounding direction -// A_lo := x*p_3 - A_hi ...fma, exact -// End If -// -// ...Note that C_hi is of integer value. We need only the -// ...last few bits. Thus we can ensure C_hi is never a big -// ...integer, freeing us from overflow worry. -// -// Tmp_C := fadd.fpsr3( C_hi, 2^(70) ) - 2^(70); -// ...Tmp_C is the upper portion of C_hi -// C_hi := C_hi - Tmp_C -// ...0 <= C_hi < 2^7 -// -// Step 2. Get N and f -// ------------------- -// -// At this point, we have all the components to obtain -// S_0, S_1, S_2, S_3 and thus N and f. We start by adding -// C_lo and B_hi. This sum together with C_hi gives a good -// estimation of N and f. -// -// A := fadd.fpsr3( B_hi, C_lo ) -// B := max( B_hi, C_lo ) -// b := min( B_hi, C_lo ) -// -// a := (B - A) + b ...exact. Note that a is either 0 -// ...or 2^(-64). -// -// N := round_to_nearest_integer_value( A ); -// f := A - N; ...exact because lsb(A) >= 2^(-64) -// ...and |f| <= 1/2. -// -// f := f + a ...exact because a is 0 or 2^(-64); -// ...the msb of the sum is <= 1/2 -// ...lsb >= 2^(-64). -// -// N := convert to integer format( C_hi + N ); -// M := P_0 * x_lo; -// N := N + M; -// -// If sgn_x == 1 (that is original x was negative) -// N := 2^10 - N -// ...this maintains N to be non-negative, but still -// ...equivalent to the (negated N) mod 4. -// End If -// -// If |f| >= 2^(-33) -// -// ...Case 1 -// CASE := 1 -// g := A_hi + B_lo; -// s_hi := f + g; -// s_lo := (f - s_hi) + g; -// -// Else -// -// ...Case 2 -// CASE := 2 -// A := fadd.fpsr3( A_hi, B_lo ) -// B := max( A_hi, B_lo ) -// b := min( A_hi, B_lo ) -// -// a := (B - A) + b ...exact. Note that a is either 0 -// ...or 2^(-128). -// -// f_hi := A + f; -// f_lo := (f - f_hi) + A; -// ...this is exact. -// ...f-f_hi is exact because either |f| >= |A|, in which -// ...case f-f_hi is clearly exact; or otherwise, 0<|f|<|A| -// ...means msb(f) <= msb(A) = 2^(-64) => |f| = 2^(-64). -// ...If f = 2^(-64), f-f_hi involves cancellation and is -// ...exact. If f = -2^(-64), then A + f is exact. Hence -// ...f-f_hi is -A exactly, giving f_lo = 0. -// -// f_lo := f_lo + a; -// -// If |f| >= 2^(-50) then -// s_hi := f_hi; -// s_lo := f_lo; -// Else -// f_lo := (f_lo + A_lo) + x*p_4 -// s_hi := f_hi + f_lo -// s_lo := (f_hi - s_hi) + f_lo -// End If -// -// End If -// -// Step 3. Get reduced argument -// ---------------------------- -// -// If sgn_x == 0 (that is original x is positive) -// -// D_hi := Pi_by_2_hi -// D_lo := Pi_by_2_lo -// ...load from table -// -// Else -// -// D_hi := neg_Pi_by_2_hi -// D_lo := neg_Pi_by_2_lo -// ...load from table -// End If -// -// r_hi := s_hi*D_hi -// r_lo := s_hi*D_hi - r_hi ...fma -// r_lo := (s_hi*D_lo + r_lo) + s_lo*D_hi -// -// Return N, r_hi, r_lo -// -FR_input_X = f8 -FR_r_hi = f8 -FR_r_lo = f9 - -FR_X = f32 -FR_N = f33 -FR_p_1 = f34 -FR_TWOM33 = f35 -FR_TWOM50 = f36 -FR_g = f37 -FR_p_2 = f38 -FR_f = f39 -FR_s_lo = f40 -FR_p_3 = f41 -FR_f_abs = f42 -FR_D_lo = f43 -FR_p_4 = f44 -FR_D_hi = f45 -FR_Tmp2_C = f46 -FR_s_hi = f47 -FR_sigma_A = f48 -FR_A = f49 -FR_sigma_B = f50 -FR_B = f51 -FR_sigma_C = f52 -FR_b = f53 -FR_ScaleP2 = f54 -FR_ScaleP3 = f55 -FR_ScaleP4 = f56 -FR_Tmp_A = f57 -FR_Tmp_B = f58 -FR_Tmp_C = f59 -FR_A_hi = f60 -FR_f_hi = f61 -FR_RSHF = f62 -FR_A_lo = f63 -FR_B_hi = f64 -FR_a = f65 -FR_B_lo = f66 -FR_f_lo = f67 -FR_N_fix = f68 -FR_C_hi = f69 -FR_C_lo = f70 - -GR_N = r8 -GR_Exp_x = r36 -GR_Temp = r37 -GR_BIASL63 = r38 -GR_CASE = r39 -GR_x_lo = r40 -GR_sgn_x = r41 -GR_M = r42 -GR_BASE = r43 -GR_LENGTH1 = r44 -GR_LENGTH2 = r45 -GR_ASUB = r46 -GR_P_0 = r47 -GR_P_1 = r48 -GR_P_2 = r49 -GR_P_3 = r50 -GR_P_4 = r51 -GR_START = r52 -GR_SEGMENT = r53 -GR_A = r54 -GR_B = r55 -GR_C = r56 -GR_D = r57 -GR_E = r58 -GR_TEMP1 = r59 -GR_TEMP2 = r60 -GR_TEMP3 = r61 -GR_TEMP4 = r62 -GR_TEMP5 = r63 -GR_TEMP6 = r64 -GR_rshf = r64 - -RODATA -.align 64 - -LOCAL_OBJECT_START(Constants_Bits_of_2_by_pi) -data8 0x0000000000000000,0xA2F9836E4E441529 -data8 0xFC2757D1F534DDC0,0xDB6295993C439041 -data8 0xFE5163ABDEBBC561,0xB7246E3A424DD2E0 -data8 0x06492EEA09D1921C,0xFE1DEB1CB129A73E -data8 0xE88235F52EBB4484,0xE99C7026B45F7E41 -data8 0x3991D639835339F4,0x9C845F8BBDF9283B -data8 0x1FF897FFDE05980F,0xEF2F118B5A0A6D1F -data8 0x6D367ECF27CB09B7,0x4F463F669E5FEA2D -data8 0x7527BAC7EBE5F17B,0x3D0739F78A5292EA -data8 0x6BFB5FB11F8D5D08,0x56033046FC7B6BAB -data8 0xF0CFBC209AF4361D,0xA9E391615EE61B08 -data8 0x6599855F14A06840,0x8DFFD8804D732731 -data8 0x06061556CA73A8C9,0x60E27BC08C6B47C4 -data8 0x19C367CDDCE8092A,0x8359C4768B961CA6 -data8 0xDDAF44D15719053E,0xA5FF07053F7E33E8 -data8 0x32C2DE4F98327DBB,0xC33D26EF6B1E5EF8 -data8 0x9F3A1F35CAF27F1D,0x87F121907C7C246A -data8 0xFA6ED5772D30433B,0x15C614B59D19C3C2 -data8 0xC4AD414D2C5D000C,0x467D862D71E39AC6 -data8 0x9B0062337CD2B497,0xA7B4D55537F63ED7 -data8 0x1810A3FC764D2A9D,0x64ABD770F87C6357 -data8 0xB07AE715175649C0,0xD9D63B3884A7CB23 -data8 0x24778AD623545AB9,0x1F001B0AF1DFCE19 -data8 0xFF319F6A1E666157,0x9947FBACD87F7EB7 -data8 0x652289E83260BFE6,0xCDC4EF09366CD43F -data8 0x5DD7DE16DE3B5892,0x9BDE2822D2E88628 -data8 0x4D58E232CAC616E3,0x08CB7DE050C017A7 -data8 0x1DF35BE01834132E,0x6212830148835B8E -data8 0xF57FB0ADF2E91E43,0x4A48D36710D8DDAA -data8 0x425FAECE616AA428,0x0AB499D3F2A6067F -data8 0x775C83C2A3883C61,0x78738A5A8CAFBDD7 -data8 0x6F63A62DCBBFF4EF,0x818D67C12645CA55 -data8 0x36D9CAD2A8288D61,0xC277C9121426049B -data8 0x4612C459C444C5C8,0x91B24DF31700AD43 -data8 0xD4E5492910D5FDFC,0xBE00CC941EEECE70 -data8 0xF53E1380F1ECC3E7,0xB328F8C79405933E -data8 0x71C1B3092EF3450B,0x9C12887B20AB9FB5 -data8 0x2EC292472F327B6D,0x550C90A7721FE76B -data8 0x96CB314A1679E279,0x4189DFF49794E884 -data8 0xE6E29731996BED88,0x365F5F0EFDBBB49A -data8 0x486CA46742727132,0x5D8DB8159F09E5BC -data8 0x25318D3974F71C05,0x30010C0D68084B58 -data8 0xEE2C90AA4702E774,0x24D6BDA67DF77248 -data8 0x6EEF169FA6948EF6,0x91B45153D1F20ACF -data8 0x3398207E4BF56863,0xB25F3EDD035D407F -data8 0x8985295255C06437,0x10D86D324832754C -data8 0x5BD4714E6E5445C1,0x090B69F52AD56614 -data8 0x9D072750045DDB3B,0xB4C576EA17F9877D -data8 0x6B49BA271D296996,0xACCCC65414AD6AE2 -data8 0x9089D98850722CBE,0xA4049407777030F3 -data8 0x27FC00A871EA49C2,0x663DE06483DD9797 -data8 0x3FA3FD94438C860D,0xDE41319D39928C70 -data8 0xDDE7B7173BDF082B,0x3715A0805C93805A -data8 0x921110D8E80FAF80,0x6C4BFFDB0F903876 -data8 0x185915A562BBCB61,0xB989C7BD401004F2 -data8 0xD2277549F6B6EBBB,0x22DBAA140A2F2689 -data8 0x768364333B091A94,0x0EAA3A51C2A31DAE -data8 0xEDAF12265C4DC26D,0x9C7A2D9756C0833F -data8 0x03F6F0098C402B99,0x316D07B43915200C -data8 0x5BC3D8C492F54BAD,0xC6A5CA4ECD37A736 -data8 0xA9E69492AB6842DD,0xDE6319EF8C76528B -data8 0x6837DBFCABA1AE31,0x15DFA1AE00DAFB0C -data8 0x664D64B705ED3065,0x29BF56573AFF47B9 -data8 0xF96AF3BE75DF9328,0x3080ABF68C6615CB -data8 0x040622FA1DE4D9A4,0xB33D8F1B5709CD36 -data8 0xE9424EA4BE13B523,0x331AAAF0A8654FA5 -data8 0xC1D20F3F0BCD785B,0x76F923048B7B7217 -data8 0x8953A6C6E26E6F00,0xEBEF584A9BB7DAC4 -data8 0xBA66AACFCF761D02,0xD12DF1B1C1998C77 -data8 0xADC3DA4886A05DF7,0xF480C62FF0AC9AEC -data8 0xDDBC5C3F6DDED01F,0xC790B6DB2A3A25A3 -data8 0x9AAF009353AD0457,0xB6B42D297E804BA7 -data8 0x07DA0EAA76A1597B,0x2A12162DB7DCFDE5 -data8 0xFAFEDB89FDBE896C,0x76E4FCA90670803E -data8 0x156E85FF87FD073E,0x2833676186182AEA -data8 0xBD4DAFE7B36E6D8F,0x3967955BBF3148D7 -data8 0x8416DF30432DC735,0x6125CE70C9B8CB30 -data8 0xFD6CBFA200A4E46C,0x05A0DD5A476F21D2 -data8 0x1262845CB9496170,0xE0566B0152993755 -data8 0x50B7D51EC4F1335F,0x6E13E4305DA92E85 -data8 0xC3B21D3632A1A4B7,0x08D4B1EA21F716E4 -data8 0x698F77FF2780030C,0x2D408DA0CD4F99A5 -data8 0x20D3A2B30A5D2F42,0xF9B4CBDA11D0BE7D -data8 0xC1DB9BBD17AB81A2,0xCA5C6A0817552E55 -data8 0x0027F0147F8607E1,0x640B148D4196DEBE -data8 0x872AFDDAB6256B34,0x897BFEF3059EBFB9 -data8 0x4F6A68A82A4A5AC4,0x4FBCF82D985AD795 -data8 0xC7F48D4D0DA63A20,0x5F57A4B13F149538 -data8 0x800120CC86DD71B6,0xDEC9F560BF11654D -data8 0x6B0701ACB08CD0C0,0xB24855510EFB1EC3 -data8 0x72953B06A33540C0,0x7BDC06CC45E0FA29 -data8 0x4EC8CAD641F3E8DE,0x647CD8649B31BED9 -data8 0xC397A4D45877C5E3,0x6913DAF03C3ABA46 -data8 0x18465F7555F5BDD2,0xC6926E5D2EACED44 -data8 0x0E423E1C87C461E9,0xFD29F3D6E7CA7C22 -data8 0x35916FC5E0088DD7,0xFFE26A6EC6FDB0C1 -data8 0x0893745D7CB2AD6B,0x9D6ECD7B723E6A11 -data8 0xC6A9CFF7DF7329BA,0xC9B55100B70DB2E2 -data8 0x24BA74607DE58AD8,0x742C150D0C188194 -data8 0x667E162901767A9F,0xBEFDFDEF4556367E -data8 0xD913D9ECB9BA8BFC,0x97C427A831C36EF1 -data8 0x36C59456A8D8B5A8,0xB40ECCCF2D891234 -data8 0x576F89562CE3CE99,0xB920D6AA5E6B9C2A -data8 0x3ECC5F114A0BFDFB,0xF4E16D3B8E2C86E2 -data8 0x84D4E9A9B4FCD1EE,0xEFC9352E61392F44 -data8 0x2138C8D91B0AFC81,0x6A4AFBD81C2F84B4 -data8 0x538C994ECC2254DC,0x552AD6C6C096190B -data8 0xB8701A649569605A,0x26EE523F0F117F11 -data8 0xB5F4F5CBFC2DBC34,0xEEBC34CC5DE8605E -data8 0xDD9B8E67EF3392B8,0x17C99B5861BC57E1 -data8 0xC68351103ED84871,0xDDDD1C2DA118AF46 -data8 0x2C21D7F359987AD9,0xC0549EFA864FFC06 -data8 0x56AE79E536228922,0xAD38DC9367AAE855 -data8 0x3826829BE7CAA40D,0x51B133990ED7A948 -data8 0x0569F0B265A7887F,0x974C8836D1F9B392 -data8 0x214A827B21CF98DC,0x9F405547DC3A74E1 -data8 0x42EB67DF9DFE5FD4,0x5EA4677B7AACBAA2 -data8 0xF65523882B55BA41,0x086E59862A218347 -data8 0x39E6E389D49EE540,0xFB49E956FFCA0F1C -data8 0x8A59C52BFA94C5C1,0xD3CFC50FAE5ADB86 -data8 0xC5476243853B8621,0x94792C8761107B4C -data8 0x2A1A2C8012BF4390,0x2688893C78E4C4A8 -data8 0x7BDBE5C23AC4EAF4,0x268A67F7BF920D2B -data8 0xA365B1933D0B7CBD,0xDC51A463DD27DDE1 -data8 0x6919949A9529A828,0xCE68B4ED09209F44 -data8 0xCA984E638270237C,0x7E32B90F8EF5A7E7 -data8 0x561408F1212A9DB5,0x4D7E6F5119A5ABF9 -data8 0xB5D6DF8261DD9602,0x36169F3AC4A1A283 -data8 0x6DED727A8D39A9B8,0x825C326B5B2746ED -data8 0x34007700D255F4FC,0x4D59018071E0E13F -data8 0x89B295F364A8F1AE,0xA74B38FC4CEAB2BB -LOCAL_OBJECT_END(Constants_Bits_of_2_by_pi) - -LOCAL_OBJECT_START(Constants_Bits_of_pi_by_2) -data8 0xC90FDAA22168C234,0x00003FFF -data8 0xC4C6628B80DC1CD1,0x00003FBF -LOCAL_OBJECT_END(Constants_Bits_of_pi_by_2) - -.section .text -.global __libm_pi_by_2_reduce# -.proc __libm_pi_by_2_reduce# -.align 32 - -__libm_pi_by_2_reduce: - -// X is in f8 -// Place the two-piece result r (r_hi) in f8 and c (r_lo) in f9 -// N is returned in r8 - -{ .mfi - alloc r34 = ar.pfs,2,34,0,0 - fsetc.s3 0x00,0x7F // Set sf3 to round to zero, 82-bit prec, td, ftz - nop.i 999 -} -{ .mfi - addl GR_BASE = @ltoff(Constants_Bits_of_2_by_pi#), gp - nop.f 999 - mov GR_BIASL63 = 0x1003E -} -;; - - -// L -1-2-3-4 -// 0 0 0 0 0. 1 0 1 0 -// M 0 1 2 .... 63, 64 65 ... 127, 128 -// --------------------------------------------- -// Segment 0. 1 , 2 , 3 -// START = M - 63 M = 128 becomes 65 -// LENGTH1 = START & 0x3F 65 become position 1 -// SEGMENT = shr(START,6) + 1 0 maps to 1, 64 maps to 2, -// LENGTH2 = 64 - LENGTH1 -// Address_BASE = shladd(SEGMENT,3) + BASE - - -{ .mmi - getf.exp GR_Exp_x = FR_input_X - ld8 GR_BASE = [GR_BASE] - mov GR_TEMP5 = 0x0FFFE -} -;; - -// Define sigma_C := 2^63; sigma_B := 2^(-1); sigma_A := 2^(-65). -{ .mmi - getf.sig GR_x_lo = FR_input_X - mov GR_TEMP6 = 0x0FFBE - nop.i 999 -} -;; - -// Special Code for testing DE arguments -// movl GR_BIASL63 = 0x0000000000013FFE -// movl GR_x_lo = 0xFFFFFFFFFFFFFFFF -// setf.exp FR_X = GR_BIASL63 -// setf.sig FR_ScaleP3 = GR_x_lo -// fmerge.se FR_X = FR_X,FR_ScaleP3 -// Set sgn_x := sign(x); x := |x|; x_lo := 2 lsb of x. -// 2/pi is stored contiguously as -// 0x00000000 0x00000000.0xA2F.... -// M = EXP - BIAS ( M >= 63) -// Given x = 2^m * 1.xxxx...xxx; we calculate L := 62 - m. -// Thus -1 <= L <= -16321. -{ .mmi - setf.exp FR_sigma_B = GR_TEMP5 - setf.exp FR_sigma_A = GR_TEMP6 - extr.u GR_M = GR_Exp_x,0,17 -} -;; - -{ .mii - and GR_x_lo = 0x03,GR_x_lo - sub GR_START = GR_M,GR_BIASL63 - add GR_BASE = 8,GR_BASE // To effectively add 1 to SEGMENT -} -;; - -{ .mii - and GR_LENGTH1 = 0x3F,GR_START - shr.u GR_SEGMENT = GR_START,6 - nop.i 999 -} -;; - -{ .mmi - shladd GR_BASE = GR_SEGMENT,3,GR_BASE - sub GR_LENGTH2 = 0x40,GR_LENGTH1 - cmp.le p6,p7 = 0x2,GR_LENGTH1 -} -;; - -// P_0 is the two bits corresponding to bit positions L+2 and L+1 -// P_1 is the 64-bit starting at bit position L -// P_2 is the 64-bit starting at bit position L-64 -// P_3 is the 64-bit starting at bit position L-128 -// P_4 is the 64-bit starting at bit position L-192 -// P_1 is made up of Alo and Bhi -// P_1 = deposit Alo, position 0, length2 into P_1,position length1 -// deposit Bhi, position length2, length1 into P_1, position 0 -// P_2 is made up of Blo and Chi -// P_2 = deposit Blo, position 0, length2 into P_2, position length1 -// deposit Chi, position length2, length1 into P_2, position 0 -// P_3 is made up of Clo and Dhi -// P_3 = deposit Clo, position 0, length2 into P_3, position length1 -// deposit Dhi, position length2, length1 into P_3, position 0 -// P_4 is made up of Clo and Dhi -// P_4 = deposit Dlo, position 0, length2 into P_4, position length1 -// deposit Ehi, position length2, length1 into P_4, position 0 -{ .mfi - ld8 GR_A = [GR_BASE],8 - fabs FR_X = FR_input_X -(p7) cmp.eq.unc p8,p9 = 0x1,GR_LENGTH1 -} -;; - -// ld_64 A at Base and increment Base by 8 -// ld_64 B at Base and increment Base by 8 -// ld_64 C at Base and increment Base by 8 -// ld_64 D at Base and increment Base by 8 -// ld_64 E at Base and increment Base by 8 -// A/B/C/D -// --------------------- -// A, B, C, D, and E look like | length1 | length2 | -// --------------------- -// hi lo -{ .mlx - ld8 GR_B = [GR_BASE],8 - movl GR_rshf = 0x43e8000000000000 // 1.10000 2^63 for right shift N_fix -} -;; - -{ .mmi - ld8 GR_C = [GR_BASE],8 - nop.m 999 -(p8) extr.u GR_Temp = GR_A,63,1 -} -;; - -// If length1 >= 2, -// P_0 = deposit Ahi, position length2, 2 bit into P_0 at position 0. -{ .mii - ld8 GR_D = [GR_BASE],8 - shl GR_TEMP1 = GR_A,GR_LENGTH1 // MM instruction -(p6) shr.u GR_P_0 = GR_A,GR_LENGTH2 // MM instruction -} -;; - -{ .mii - ld8 GR_E = [GR_BASE],-40 - shl GR_TEMP2 = GR_B,GR_LENGTH1 // MM instruction - shr.u GR_P_1 = GR_B,GR_LENGTH2 // MM instruction -} -;; - -// Else -// Load 16 bit of ASUB from (Base_Address_of_A - 2) -// P_0 = ASUB & 0x3 -// If length1 == 0, -// P_0 complete -// Else -// Deposit element 63 from Ahi and place in element 0 of P_0. -// Endif -// Endif - -{ .mii -(p7) ld2 GR_ASUB = [GR_BASE],8 - shl GR_TEMP3 = GR_C,GR_LENGTH1 // MM instruction - shr.u GR_P_2 = GR_C,GR_LENGTH2 // MM instruction -} -;; - -{ .mii - setf.d FR_RSHF = GR_rshf // Form right shift const 1.100 * 2^63 - shl GR_TEMP4 = GR_D,GR_LENGTH1 // MM instruction - shr.u GR_P_3 = GR_D,GR_LENGTH2 // MM instruction -} -;; - -{ .mmi -(p7) and GR_P_0 = 0x03,GR_ASUB -(p6) and GR_P_0 = 0x03,GR_P_0 - shr.u GR_P_4 = GR_E,GR_LENGTH2 // MM instruction -} -;; - -{ .mmi - nop.m 999 - or GR_P_1 = GR_P_1,GR_TEMP1 -(p8) and GR_P_0 = 0x1,GR_P_0 -} -;; - -{ .mmi - setf.sig FR_p_1 = GR_P_1 - or GR_P_2 = GR_P_2,GR_TEMP2 -(p8) shladd GR_P_0 = GR_P_0,1,GR_Temp -} -;; - -{ .mmf - setf.sig FR_p_2 = GR_P_2 - or GR_P_3 = GR_P_3,GR_TEMP3 - fmerge.se FR_X = FR_sigma_B,FR_X -} -;; - -{ .mmi - setf.sig FR_p_3 = GR_P_3 - or GR_P_4 = GR_P_4,GR_TEMP4 - pmpy2.r GR_M = GR_P_0,GR_x_lo -} -;; - -// P_1, P_2, P_3, P_4 are integers. They should be -// 2^(L-63) * P_1; -// 2^(L-63-64) * P_2; -// 2^(L-63-128) * P_3; -// 2^(L-63-192) * P_4; -// Since each of them need to be multiplied to x, we would scale -// both x and the P_j's by some convenient factors: scale each -// of P_j's up by 2^(63-L), and scale x down by 2^(L-63). -// p_1 := fcvt.xf ( P_1 ) -// p_2 := fcvt.xf ( P_2 ) * 2^(-64) -// p_3 := fcvt.xf ( P_3 ) * 2^(-128) -// p_4 := fcvt.xf ( P_4 ) * 2^(-192) -// x= Set x's exp to -1 because 2^m*1.x...x *2^(L-63)=2^(-1)*1.x...xxx -// --------- --------- --------- -// | P_1 | | P_2 | | P_3 | -// --------- --------- --------- -// --------- -// X | X | -// --------- -// ---------------------------------------------------- -// --------- --------- -// | A_hi | | A_lo | -// --------- --------- -// --------- --------- -// | B_hi | | B_lo | -// --------- --------- -// --------- --------- -// | C_hi | | C_lo | -// --------- --------- -// ==================================================== -// ----------- --------- --------- --------- -// | S_0 | | S_1 | | S_2 | | S_3 | -// ----------- --------- --------- --------- -// | |___ binary point -// |___ possibly one more bit -// -// Let FPSR3 be set to round towards zero with widest precision -// and exponent range. Unless an explicit FPSR is given, -// round-to-nearest with widest precision and exponent range is -// used. -{ .mmi - setf.sig FR_p_4 = GR_P_4 - mov GR_TEMP1 = 0x0FFBF - nop.i 999 -} -;; - -{ .mmi - setf.exp FR_ScaleP2 = GR_TEMP1 - mov GR_TEMP2 = 0x0FF7F - nop.i 999 -} -;; - -{ .mmi - setf.exp FR_ScaleP3 = GR_TEMP2 - mov GR_TEMP4 = 0x1003E - nop.i 999 -} -;; - -{ .mmf - setf.exp FR_sigma_C = GR_TEMP4 - mov GR_Temp = 0x0FFDE - fcvt.xuf.s1 FR_p_1 = FR_p_1 -} -;; - -{ .mfi - setf.exp FR_TWOM33 = GR_Temp - fcvt.xuf.s1 FR_p_2 = FR_p_2 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fcvt.xuf.s1 FR_p_3 = FR_p_3 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fcvt.xuf.s1 FR_p_4 = FR_p_4 - nop.i 999 -} -;; - -// Tmp_C := fmpy.fpsr3( x, p_1 ); -// Tmp_B := fmpy.fpsr3( x, p_2 ); -// Tmp_A := fmpy.fpsr3( x, p_3 ); -// If Tmp_C >= sigma_C then -// C_hi := Tmp_C; -// C_lo := x*p_1 - C_hi ...fma, exact -// Else -// C_hi := fadd.fpsr3(sigma_C, Tmp_C) - sigma_C -// C_lo := x*p_1 - C_hi ...fma, exact -// End If -// If Tmp_B >= sigma_B then -// B_hi := Tmp_B; -// B_lo := x*p_2 - B_hi ...fma, exact -// Else -// B_hi := fadd.fpsr3(sigma_B, Tmp_B) - sigma_B -// B_lo := x*p_2 - B_hi ...fma, exact -// End If -// If Tmp_A >= sigma_A then -// A_hi := Tmp_A; -// A_lo := x*p_3 - A_hi ...fma, exact -// Else -// A_hi := fadd.fpsr3(sigma_A, Tmp_A) - sigma_A -// Exact, regardless ...of rounding direction -// A_lo := x*p_3 - A_hi ...fma, exact -// Endif -{ .mfi - nop.m 999 - fmpy.s3 FR_Tmp_C = FR_X,FR_p_1 - nop.i 999 -} -;; - -{ .mfi - mov GR_TEMP3 = 0x0FF3F - fmpy.s1 FR_p_2 = FR_p_2,FR_ScaleP2 - nop.i 999 -} -;; - -{ .mmf - setf.exp FR_ScaleP4 = GR_TEMP3 - mov GR_TEMP4 = 0x10045 - fmpy.s1 FR_p_3 = FR_p_3,FR_ScaleP3 -} -;; - -{ .mfi - nop.m 999 - fadd.s3 FR_C_hi = FR_sigma_C,FR_Tmp_C // For Tmp_C < sigma_C case - nop.i 999 -} -;; - -{ .mmf - setf.exp FR_Tmp2_C = GR_TEMP4 - nop.m 999 - fmpy.s3 FR_Tmp_B = FR_X,FR_p_2 -} -;; - -{ .mfi - addl GR_BASE = @ltoff(Constants_Bits_of_pi_by_2#), gp - fcmp.ge.s1 p12, p9 = FR_Tmp_C,FR_sigma_C - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s3 FR_Tmp_A = FR_X,FR_p_3 - nop.i 99 -} -;; - -{ .mfi - ld8 GR_BASE = [GR_BASE] -(p12) mov FR_C_hi = FR_Tmp_C - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fsub.s1 FR_C_hi = FR_C_hi,FR_sigma_C - nop.i 999 -} -;; - - - -// End If -// Step 3. Get reduced argument -// If sgn_x == 0 (that is original x is positive) -// D_hi := Pi_by_2_hi -// D_lo := Pi_by_2_lo -// Load from table -// Else -// D_hi := neg_Pi_by_2_hi -// D_lo := neg_Pi_by_2_lo -// Load from table -// End If - -{ .mfi - nop.m 999 - fmpy.s1 FR_p_4 = FR_p_4,FR_ScaleP4 - nop.i 999 -} -{ .mfi - nop.m 999 - fadd.s3 FR_B_hi = FR_sigma_B,FR_Tmp_B // For Tmp_B < sigma_B case - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fadd.s3 FR_A_hi = FR_sigma_A,FR_Tmp_A // For Tmp_A < sigma_A case - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fcmp.ge.s1 p13, p10 = FR_Tmp_B,FR_sigma_B - nop.i 999 -} -{ .mfi - nop.m 999 - fms.s1 FR_C_lo = FR_X,FR_p_1,FR_C_hi - nop.i 999 -} -;; - -{ .mfi - ldfe FR_D_hi = [GR_BASE],16 - fcmp.ge.s1 p14, p11 = FR_Tmp_A,FR_sigma_A - nop.i 999 -} -;; - -{ .mfi - ldfe FR_D_lo = [GR_BASE] -(p13) mov FR_B_hi = FR_Tmp_B - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fsub.s1 FR_B_hi = FR_B_hi,FR_sigma_B - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p14) mov FR_A_hi = FR_Tmp_A - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fsub.s1 FR_A_hi = FR_A_hi,FR_sigma_A - nop.i 999 -} -;; - -// Note that C_hi is of integer value. We need only the -// last few bits. Thus we can ensure C_hi is never a big -// integer, freeing us from overflow worry. -// Tmp_C := fadd.fpsr3( C_hi, 2^(70) ) - 2^(70); -// Tmp_C is the upper portion of C_hi -{ .mfi - nop.m 999 - fadd.s3 FR_Tmp_C = FR_C_hi,FR_Tmp2_C - tbit.z p12,p9 = GR_Exp_x, 17 -} -;; - -{ .mfi - nop.m 999 - fms.s1 FR_B_lo = FR_X,FR_p_2,FR_B_hi - nop.i 999 -} -{ .mfi - nop.m 999 - fadd.s3 FR_A = FR_B_hi,FR_C_lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fms.s1 FR_A_lo = FR_X,FR_p_3,FR_A_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fsub.s1 FR_Tmp_C = FR_Tmp_C,FR_Tmp2_C - nop.i 999 -} -;; - -// ******************* -// Step 2. Get N and f -// ******************* -// We have all the components to obtain -// S_0, S_1, S_2, S_3 and thus N and f. We start by adding -// C_lo and B_hi. This sum together with C_hi estimates -// N and f well. -// A := fadd.fpsr3( B_hi, C_lo ) -// B := max( B_hi, C_lo ) -// b := min( B_hi, C_lo ) -{ .mfi - nop.m 999 - fmax.s1 FR_B = FR_B_hi,FR_C_lo - nop.i 999 -} -;; - -// We use a right-shift trick to get the integer part of A into the rightmost -// bits of the significand by adding 1.1000..00 * 2^63. This operation is good -// if |A| < 2^61, which it is in this case. We are doing this to save a few -// cycles over using fcvt.fx followed by fnorm. The second step of the trick -// is to subtract the same constant to float the rounded integer into a fp reg. - -{ .mfi - nop.m 999 -// N := round_to_nearest_integer_value( A ); - fma.s1 FR_N_fix = FR_A, f1, FR_RSHF - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmin.s1 FR_b = FR_B_hi,FR_C_lo - nop.i 999 -} -{ .mfi - nop.m 999 -// C_hi := C_hi - Tmp_C ...0 <= C_hi < 2^7 - fsub.s1 FR_C_hi = FR_C_hi,FR_Tmp_C - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -// a := (B - A) + b: Exact - note that a is either 0 or 2^(-64). - fsub.s1 FR_a = FR_B,FR_A - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fms.s1 FR_N = FR_N_fix, f1, FR_RSHF - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fadd.s1 FR_a = FR_a,FR_b - nop.i 999 -} -;; - -// f := A - N; Exact because lsb(A) >= 2^(-64) and |f| <= 1/2. -// N := convert to integer format( C_hi + N ); -// M := P_0 * x_lo; -// N := N + M; -{ .mfi - nop.m 999 - fsub.s1 FR_f = FR_A,FR_N - nop.i 999 -} -{ .mfi - nop.m 999 - fadd.s1 FR_N = FR_N,FR_C_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fsub.s1 FR_D_hi = f0, FR_D_hi - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fsub.s1 FR_D_lo = f0, FR_D_lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fadd.s1 FR_g = FR_A_hi,FR_B_lo // For Case 1, g=A_hi+B_lo - nop.i 999 -} -{ .mfi - nop.m 999 - fadd.s3 FR_A = FR_A_hi,FR_B_lo // For Case 2, A=A_hi+B_lo w/ sf3 - nop.i 999 -} -;; - -{ .mfi - mov GR_Temp = 0x0FFCD // For Case 2, exponent of 2^-50 - fmax.s1 FR_B = FR_A_hi,FR_B_lo // For Case 2, B=max(A_hi,B_lo) - nop.i 999 -} -;; - -// f = f + a Exact because a is 0 or 2^(-64); -// the msb of the sum is <= 1/2 and lsb >= 2^(-64). -{ .mfi - setf.exp FR_TWOM50 = GR_Temp // For Case 2, form 2^-50 - fcvt.fx.s1 FR_N = FR_N - nop.i 999 -} -{ .mfi - nop.m 999 - fadd.s1 FR_f = FR_f,FR_a - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmin.s1 FR_b = FR_A_hi,FR_B_lo // For Case 2, b=min(A_hi,B_lo) - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fsub.s1 FR_a = FR_B,FR_A // For Case 2, a=B-A - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fadd.s1 FR_s_hi = FR_f,FR_g // For Case 1, s_hi=f+g - nop.i 999 -} -{ .mfi - nop.m 999 - fadd.s1 FR_f_hi = FR_A,FR_f // For Case 2, f_hi=A+f - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fabs FR_f_abs = FR_f - nop.i 999 -} -;; - -{ .mfi - getf.sig GR_N = FR_N - fsetc.s3 0x7F,0x40 // Reset sf3 to user settings + td - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fsub.s1 FR_s_lo = FR_f,FR_s_hi // For Case 1, s_lo=f-s_hi - nop.i 999 -} -{ .mfi - nop.m 999 - fsub.s1 FR_f_lo = FR_f,FR_f_hi // For Case 2, f_lo=f-f_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 FR_r_hi = FR_s_hi,FR_D_hi // For Case 1, r_hi=s_hi*D_hi - nop.i 999 -} -{ .mfi - nop.m 999 - fadd.s1 FR_a = FR_a,FR_b // For Case 2, a=a+b - nop.i 999 -} -;; - - -// If sgn_x == 1 (that is original x was negative) -// N := 2^10 - N -// this maintains N to be non-negative, but still -// equivalent to the (negated N) mod 4. -// End If -{ .mfi - add GR_N = GR_N,GR_M - fcmp.ge.s1 p13, p10 = FR_f_abs,FR_TWOM33 - mov GR_Temp = 0x00400 -} -;; - -{ .mfi -(p9) sub GR_N = GR_Temp,GR_N - fadd.s1 FR_s_lo = FR_s_lo,FR_g // For Case 1, s_lo=s_lo+g - nop.i 999 -} -{ .mfi - nop.m 999 - fadd.s1 FR_f_lo = FR_f_lo,FR_A // For Case 2, f_lo=f_lo+A - nop.i 999 -} -;; - -// a := (B - A) + b Exact. -// Note that a is either 0 or 2^(-128). -// f_hi := A + f; -// f_lo := (f - f_hi) + A -// f_lo=f-f_hi is exact because either |f| >= |A|, in which -// case f-f_hi is clearly exact; or otherwise, 0<|f|<|A| -// means msb(f) <= msb(A) = 2^(-64) => |f| = 2^(-64). -// If f = 2^(-64), f-f_hi involves cancellation and is -// exact. If f = -2^(-64), then A + f is exact. Hence -// f-f_hi is -A exactly, giving f_lo = 0. -// f_lo := f_lo + a; - -// If |f| >= 2^(-33) -// Case 1 -// CASE := 1 -// g := A_hi + B_lo; -// s_hi := f + g; -// s_lo := (f - s_hi) + g; -// Else -// Case 2 -// CASE := 2 -// A := fadd.fpsr3( A_hi, B_lo ) -// B := max( A_hi, B_lo ) -// b := min( A_hi, B_lo ) - -{ .mfi - nop.m 999 -(p10) fcmp.ge.unc.s1 p14, p11 = FR_f_abs,FR_TWOM50 - nop.i 999 -} -{ .mfi - nop.m 999 -(p13) fms.s1 FR_r_lo = FR_s_hi,FR_D_hi,FR_r_hi //For Case 1, r_lo=s_hi*D_hi+r_hi - nop.i 999 -} -;; - -// If |f| >= 2^(-50) then -// s_hi := f_hi; -// s_lo := f_lo; -// Else -// f_lo := (f_lo + A_lo) + x*p_4 -// s_hi := f_hi + f_lo -// s_lo := (f_hi - s_hi) + f_lo -// End If -{ .mfi - nop.m 999 -(p14) mov FR_s_hi = FR_f_hi - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fadd.s1 FR_f_lo = FR_f_lo,FR_a - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p14) mov FR_s_lo = FR_f_lo - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fadd.s1 FR_f_lo = FR_f_lo,FR_A_lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p11) fma.s1 FR_f_lo = FR_X,FR_p_4,FR_f_lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p13) fma.s1 FR_r_lo = FR_s_hi,FR_D_lo,FR_r_lo //For Case 1, r_lo=s_hi*D_lo+r_lo - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fadd.s1 FR_s_hi = FR_f_hi,FR_f_lo - nop.i 999 -} -;; - -// r_hi := s_hi*D_hi -// r_lo := s_hi*D_hi - r_hi with fma -// r_lo := (s_hi*D_lo + r_lo) + s_lo*D_hi -{ .mfi - nop.m 999 -(p10) fmpy.s1 FR_r_hi = FR_s_hi,FR_D_hi - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fsub.s1 FR_s_lo = FR_f_hi,FR_s_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p10) fms.s1 FR_r_lo = FR_s_hi,FR_D_hi,FR_r_hi - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fadd.s1 FR_s_lo = FR_s_lo,FR_f_lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p10) fma.s1 FR_r_lo = FR_s_hi,FR_D_lo,FR_r_lo - nop.i 999 -} -;; - -// Return N, r_hi, r_lo -// We do not return CASE -{ .mfb - nop.m 999 - fma.s1 FR_r_lo = FR_s_lo,FR_D_hi,FR_r_lo - br.ret.sptk b0 -} -;; - -.endp __libm_pi_by_2_reduce# diff --git a/sysdeps/ia64/fpu/libm_scalblnf.S b/sysdeps/ia64/fpu/libm_scalblnf.S deleted file mode 100644 index 56de44a0c4..0000000000 --- a/sysdeps/ia64/fpu/libm_scalblnf.S +++ /dev/null @@ -1,450 +0,0 @@ -.file "libm_scalblnf.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 08/03/01 Initial version -// 08/23/01 Corrected error tag number -// 02/06/02 Corrected to handle 32- or 64-bit integers -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 08/25/03 Improved performance -// -// API -//============================================================== -// float __libm_scalblnf (float x, long int n, int long_int_type) -// input floating point f8 and long int n (r33) -// input long_int_type = 0 if long int defined as 32 bits, = 1 if 64 bits -// output floating point f8 -// -// Returns x* 2**n using an fma and detects overflow -// and underflow. -// -// -// Strategy: -// Compute biased exponent of result exp_Result = N + exp_X -// Break into ranges: -// exp_Result > 0x1007e -> Certain overflow -// exp_Result = 0x1007e -> Possible overflow -// 0x0ff81 <= exp_Result < 0x1007e -> No over/underflow (main path) -// 0x0ff81 - 23 <= exp_Result < 0x0ff81 -> Possible underflow -// exp_Result < 0x0ff81 - 23 -> Certain underflow - -FR_Big = f6 -FR_NBig = f7 -FR_Floating_X = f8 -FR_Result = f8 -FR_Result2 = f9 -FR_Result3 = f10 -FR_Norm_X = f11 -FR_Two_N = f12 - -GR_neg_ov_limit= r14 -GR_N_Biased = r15 -GR_Big = r16 -GR_NBig = r17 -GR_exp_Result = r18 -GR_pos_ov_limit= r19 -GR_Bias = r20 -GR_N_as_int = r21 -GR_signexp_X = r22 -GR_exp_X = r23 -GR_exp_mask = r24 -GR_max_exp = r25 -GR_min_exp = r26 -GR_min_den_exp = r27 - -GR_SAVE_B0 = r32 -GR_SAVE_GP = r33 -GR_SAVE_PFS = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Tag = r38 - -.section .text -GLOBAL_LIBM_ENTRY(__libm_scalblnf) - -// -// Is x NAN, INF, ZERO, +-? -// Build the exponent Bias -// -{ .mfi - getf.exp GR_signexp_X = FR_Floating_X // Get signexp of x - fclass.m p6,p0 = FR_Floating_X, 0xe7 // @snan | @qnan | @inf | @zero - mov GR_Bias = 0x0ffff -} -// -// Normalize x -// Is long integer type 32 bits? -// -{ .mfi - mov GR_Big = 35000 // If N this big then certain overflow - fnorm.s1 FR_Norm_X = FR_Floating_X - cmp.eq p8,p9 = r34,r0 -} -;; - -// Sign extend N if long int is 32 bits -{ .mfi -(p9) mov GR_N_as_int = r33 // Copy N if long int is 64 bits - fclass.m p9,p0 = FR_Floating_X, 0x0b // Test for x=unorm -(p8) sxt4 GR_N_as_int = r33 // Sign extend N if long int is 32 bits -} -{ .mfi - mov GR_NBig = -35000 // If N this small then certain underflow - nop.f 0 - mov GR_max_exp = 0x1007e // Exponent of maximum float -} -;; - -// Create biased exponent for 2**N -{ .mfi - add GR_N_Biased = GR_Bias,GR_N_as_int - nop.f 0 - cmp.ge p7, p0 = GR_N_as_int, GR_Big // Certain overflow? -} -{ .mib - cmp.le p8, p0 = GR_N_as_int, GR_NBig // Certain underflow? - mov GR_min_exp = 0x0ff81 // Exponent of minimum float -(p9) br.cond.spnt SCALBNF_UNORM // Branch if x=unorm -} -;; - -SCALBNF_COMMON: -// Main path continues. Also return here from x=unorm path. -// Create 2**N -.pred.rel "mutex",p7,p8 -{ .mfi - setf.exp FR_Two_N = GR_N_Biased - nop.f 0 -(p7) mov GR_N_as_int = GR_Big // Limit max N -} -{ .mfi -(p8) mov GR_N_as_int = GR_NBig // Limit min N - nop.f 0 -(p8) cmp.eq p7,p0 = r0,r0 // Set p7 if |N| big -} -;; - -// -// Create biased exponent for 2**N for N big -// Is N zero? -// -{ .mfi -(p7) add GR_N_Biased = GR_Bias,GR_N_as_int - nop.f 0 - cmp.eq.or p6,p0 = r33,r0 -} -{ .mfi - mov GR_pos_ov_limit = 0x1007f // Exponent for positive overflow - nop.f 0 - mov GR_exp_mask = 0x1ffff // Exponent mask -} -;; - -// -// Create 2**N for N big -// Return x when N = 0 or X = Nan, Inf, Zero -// -{ .mfi -(p7) setf.exp FR_Two_N = GR_N_Biased - nop.f 0 - mov GR_min_den_exp = 0x0ff81 - 23 // Exponent of min denorm float -} -{ .mfb - and GR_exp_X = GR_exp_mask, GR_signexp_X -(p6) fma.s.s0 FR_Result = FR_Floating_X, f1, f0 -(p6) br.ret.spnt b0 -} -;; - -// -// Raise Denormal operand flag with compare -// Compute biased result exponent -// -{ .mfi - add GR_exp_Result = GR_exp_X, GR_N_as_int - fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 - mov GR_neg_ov_limit = 0x3007f // Exponent for negative overflow -} -;; - -// -// Do final operation -// -{ .mfi - cmp.lt p7,p6 = GR_exp_Result, GR_max_exp // Test no overflow - fma.s.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 - cmp.lt p9,p0 = GR_exp_Result, GR_min_den_exp // Test sure underflow -} -{ .mfb - nop.m 0 - nop.f 0 -(p9) br.cond.spnt SCALBNF_UNDERFLOW // Branch if certain underflow -} -;; - -{ .mib -(p6) cmp.gt.unc p6,p8 = GR_exp_Result, GR_max_exp // Test sure overflow -(p7) cmp.ge.unc p7,p9 = GR_exp_Result, GR_min_exp // Test no over/underflow -(p7) br.ret.sptk b0 // Return from main path -} -;; - -{ .bbb -(p6) br.cond.spnt SCALBNF_OVERFLOW // Branch if certain overflow -(p8) br.cond.spnt SCALBNF_POSSIBLE_OVERFLOW // Branch if possible overflow -(p9) br.cond.spnt SCALBNF_POSSIBLE_UNDERFLOW // Branch if possible underflow -} -;; - -// Here if possible underflow. -// Resulting exponent: 0x0ff81-23 <= exp_Result < 0x0ff81 -SCALBNF_POSSIBLE_UNDERFLOW: -// -// Here if possible overflow. -// Resulting exponent: 0x1007e = exp_Result -SCALBNF_POSSIBLE_OVERFLOW: - -// Set up necessary status fields -// -// S0 user supplied status -// S2 user supplied status + WRE + TD (Overflows) -// S3 user supplied status + FZ + TD (Underflows) -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x41 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x42 - nop.i 0 -} -;; - -// -// Do final operation with s2 and s3 -// -{ .mfi - setf.exp FR_NBig = GR_neg_ov_limit - fma.s.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -{ .mfi - setf.exp FR_Big = GR_pos_ov_limit - fma.s.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -;; - -// Check for overflow or underflow. -// Restore s3 -// Restore s2 -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x40 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 - nop.i 0 -} -;; - -// -// Is the result zero? -// -{ .mfi - nop.m 0 - fclass.m p6, p0 = FR_Result3, 0x007 - nop.i 0 -} -{ .mfi - nop.m 0 - fcmp.ge.s1 p7, p8 = FR_Result2 , FR_Big - nop.i 0 -} -;; - -// -// Detect masked underflow - Tiny + Inexact Only -// -{ .mfi - nop.m 0 -(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 - nop.i 0 -} -;; - -// -// Is result bigger the allowed range? -// Branch out for underflow -// -{ .mfb - nop.m 0 -(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig -(p6) br.cond.spnt SCALBNF_UNDERFLOW -} -;; - -// -// Branch out for overflow -// -{ .bbb -(p7) br.cond.spnt SCALBNF_OVERFLOW -(p9) br.cond.spnt SCALBNF_OVERFLOW - br.ret.sptk b0 // Return from main path. -} -;; - -// Here if result overflows -SCALBNF_OVERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 205, r0 // Set error tag for overflow - br.cond.sptk __libm_error_region // Call error support for overflow -} -;; - -// Here if result underflows -SCALBNF_UNDERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 206, r0 // Set error tag for underflow - br.cond.sptk __libm_error_region // Call error support for underflow -} -;; - -// Here if x=unorm -SCALBNF_UNORM: -{ .mib - getf.exp GR_signexp_X = FR_Norm_X // Get signexp of normalized x - nop.i 0 - br.cond.sptk SCALBNF_COMMON // Return to main path -} -;; - - -GLOBAL_LIBM_END(__libm_scalblnf) -LOCAL_LIBM_ENTRY(__libm_error_region) - -// -// Get stack address of N -// -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs -} -// -// Adjust sp -// -{ .mfi -.fframe 64 - add sp=-64,sp - nop.f 0 - mov GR_SAVE_GP=gp -};; - -// -// Store N on stack in correct position -// Locate the address of x on stack -// -{ .mmi - st8 [GR_Parameter_Y] = GR_N_as_int,16 - add GR_Parameter_X = 16,sp -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 -};; - -// -// Store x on the stack. -// Get address for result on stack. -// -.body -{ .mib - stfs [GR_Parameter_X] = FR_Norm_X - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = FR_Result - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# -};; - -// -// Get location of result on stack -// -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -// -// Get the new result -// -{ .mmi - ldfs FR_Result = [GR_Parameter_RESULT] -.restore sp - add sp = 64,sp - mov b0 = GR_SAVE_B0 -};; - -// -// Restore gp, ar.pfs and return -// -{ .mib - mov gp = GR_SAVE_GP - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/libm_sincos.S b/sysdeps/ia64/fpu/libm_sincos.S deleted file mode 100644 index c2a9f7262e..0000000000 --- a/sysdeps/ia64/fpu/libm_sincos.S +++ /dev/null @@ -1,782 +0,0 @@ -.file "libm_sincos.s" - - -// Copyright (c) 2002 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2002 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/01/02 Initial version -// 02/18/02 Large arguments processing routine is excluded. -// External interface entry points are added -// 03/13/02 Corrected restore of predicate registers -// 03/19/02 Added stack unwind around call to __libm_cis_large -// 09/05/02 Work range is widened by reduction strengthen (3 parts of Pi/16) -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 08/08/03 Improved performance -// 02/11/04 cis is moved to the separate file. -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// 1) void sincos(double, double*s, double*c) -// 2) __libm_sincos - internal LIBM function, that accepts -// argument in f8 and returns cosine through f8, sine through f9 -// -// Overview of operation -//============================================================== -// -// Step 1 -// ====== -// Reduce x to region -1/2*pi/2^k ===== 0 ===== +1/2*pi/2^k where k=4 -// divide x by pi/2^k. -// Multiply by 2^k/pi. -// nfloat = Round result to integer (round-to-nearest) -// -// r = x - nfloat * pi/2^k -// Do this as ((((x - nfloat * HIGH(pi/2^k))) - -// nfloat * LOW(pi/2^k)) - -// nfloat * LOWEST(pi/2^k) for increased accuracy. -// pi/2^k is stored as two numbers that when added make pi/2^k. -// pi/2^k = HIGH(pi/2^k) + LOW(pi/2^k) -// HIGH and LOW parts are rounded to zero values, -// and LOWEST is rounded to nearest one. -// -// x = (nfloat * pi/2^k) + r -// r is small enough that we can use a polynomial approximation -// and is referred to as the reduced argument. -// -// Step 3 -// ====== -// Take the unreduced part and remove the multiples of 2pi. -// So nfloat = nfloat (with lower k+1 bits cleared) + lower k+1 bits -// -// nfloat (with lower k+1 bits cleared) is a multiple of 2^(k+1) -// N * 2^(k+1) -// nfloat * pi/2^k = N * 2^(k+1) * pi/2^k + (lower k+1 bits) * pi/2^k -// nfloat * pi/2^k = N * 2 * pi + (lower k+1 bits) * pi/2^k -// nfloat * pi/2^k = N2pi + M * pi/2^k -// -// -// Sin(x) = Sin((nfloat * pi/2^k) + r) -// = Sin(nfloat * pi/2^k) * Cos(r) + Cos(nfloat * pi/2^k) * Sin(r) -// -// Sin(nfloat * pi/2^k) = Sin(N2pi + Mpi/2^k) -// = Sin(N2pi)Cos(Mpi/2^k) + Cos(N2pi)Sin(Mpi/2^k) -// = Sin(Mpi/2^k) -// -// Cos(nfloat * pi/2^k) = Cos(N2pi + Mpi/2^k) -// = Cos(N2pi)Cos(Mpi/2^k) + Sin(N2pi)Sin(Mpi/2^k) -// = Cos(Mpi/2^k) -// -// Sin(x) = Sin(Mpi/2^k) Cos(r) + Cos(Mpi/2^k) Sin(r) -// -// -// Step 4 -// ====== -// 0 <= M < 2^(k+1) -// There are 2^(k+1) Sin entries in a table. -// There are 2^(k+1) Cos entries in a table. -// -// Get Sin(Mpi/2^k) and Cos(Mpi/2^k) by table lookup. -// -// -// Step 5 -// ====== -// Calculate Cos(r) and Sin(r) by polynomial approximation. -// -// Cos(r) = 1 + r^2 q1 + r^4 q2 + r^6 q3 + ... = Series for Cos -// Sin(r) = r + r^3 p1 + r^5 p2 + r^7 p3 + ... = Series for Sin -// -// and the coefficients q1, q2, ... and p1, p2, ... are stored in a table -// -// -// Calculate -// Sin(x) = Sin(Mpi/2^k) Cos(r) + Cos(Mpi/2^k) Sin(r) -// -// as follows -// -// S[m] = Sin(Mpi/2^k) and C[m] = Cos(Mpi/2^k) -// rsq = r*r -// -// -// P = p1 + r^2p2 + r^4p3 + r^6p4 -// Q = q1 + r^2q2 + r^4q3 + r^6q4 -// -// rcub = r * rsq -// Sin(r) = r + rcub * P -// = r + r^3p1 + r^5p2 + r^7p3 + r^9p4 + ... = Sin(r) -// -// The coefficients are not exactly these values, but almost. -// -// p1 = -1/6 = -1/3! -// p2 = 1/120 = 1/5! -// p3 = -1/5040 = -1/7! -// p4 = 1/362889 = 1/9! -// -// P = r + rcub * P -// -// Answer = S[m] Cos(r) + C[m] P -// -// Cos(r) = 1 + rsq Q -// Cos(r) = 1 + r^2 Q -// Cos(r) = 1 + r^2 (q1 + r^2q2 + r^4q3 + r^6q4) -// Cos(r) = 1 + r^2q1 + r^4q2 + r^6q3 + r^8q4 + ... -// -// S[m] Cos(r) = S[m](1 + rsq Q) -// S[m] Cos(r) = S[m] + S[m] rsq Q -// S[m] Cos(r) = S[m] + s_rsq Q -// Q = S[m] + s_rsq Q -// -// Then, -// -// Answer = Q + C[m] P - -// Registers used -//============================================================== -// general input registers: -// r14 -> r39 - -// predicate registers used: -// p6 -> p14 -// -// floating-point registers used -// f9 -> f15 -// f32 -> f67 - -// Assembly macros -//============================================================== - -cis_Arg = f8 - -cis_Sin_res = f9 -cis_Cos_res = f8 - -cis_NORM_f8 = f10 -cis_W = f11 -cis_int_Nfloat = f12 -cis_Nfloat = f13 - -cis_r = f14 -cis_rsq = f15 -cis_rcub = f32 - -cis_Inv_Pi_by_16 = f33 -cis_Pi_by_16_hi = f34 -cis_Pi_by_16_lo = f35 - -cis_Inv_Pi_by_64 = f36 -cis_Pi_by_16_lowest = f37 -cis_r_exact = f38 - - -cis_P1 = f39 -cis_Q1 = f40 -cis_P2 = f41 -cis_Q2 = f42 -cis_P3 = f43 -cis_Q3 = f44 -cis_P4 = f45 -cis_Q4 = f46 - -cis_P_temp1 = f47 -cis_P_temp2 = f48 - -cis_Q_temp1 = f49 -cis_Q_temp2 = f50 - -cis_P = f51 - -cis_SIG_INV_PI_BY_16_2TO61 = f52 -cis_RSHF_2TO61 = f53 -cis_RSHF = f54 -cis_2TOM61 = f55 -cis_NFLOAT = f56 -cis_W_2TO61_RSH = f57 - -cis_tmp = f58 - -cis_Sm_sin = f59 -cis_Cm_sin = f60 - -cis_Sm_cos = f61 -cis_Cm_cos = f62 - -cis_srsq_sin = f63 -cis_srsq_cos = f64 - -cis_Q_sin = f65 -cis_Q_cos = f66 -cis_Q = f67 - -///////////////////////////////////////////////////////////// - -cis_pResSin = r33 -cis_pResCos = r34 - -cis_GR_sig_inv_pi_by_16 = r14 -cis_GR_rshf_2to61 = r15 -cis_GR_rshf = r16 -cis_GR_exp_2tom61 = r17 -cis_GR_n = r18 -cis_GR_n_sin = r19 -cis_exp_limit = r20 -cis_r_signexp = r21 -cis_AD_1 = r22 -cis_r_sincos = r23 -cis_r_exp = r24 -cis_r_17_ones = r25 -cis_GR_m_sin = r26 -cis_GR_32m_sin = r26 -cis_GR_n_cos = r27 -cis_GR_m_cos = r28 -cis_GR_32m_cos = r28 -cis_AD_2_sin = r29 -cis_AD_2_cos = r30 -cis_gr_tmp = r31 - -GR_SAVE_B0 = r35 -GR_SAVE_GP = r36 -rB0_SAVED = r37 -GR_SAVE_PFS = r38 -GR_SAVE_PR = r39 - -RODATA - -.align 16 -// Pi/16 parts -LOCAL_OBJECT_START(double_cis_pi) - data8 0xC90FDAA22168C234, 0x00003FFC // pi/16 1st part - data8 0xC4C6628B80DC1CD1, 0x00003FBC // pi/16 2nd part - data8 0xA4093822299F31D0, 0x00003F7A // pi/16 3rd part -LOCAL_OBJECT_END(double_cis_pi) - -// Coefficients for polynomials -LOCAL_OBJECT_START(double_cis_pq_k4) - data8 0x3EC71C963717C63A // P4 - data8 0x3EF9FFBA8F191AE6 // Q4 - data8 0xBF2A01A00F4E11A8 // P3 - data8 0xBF56C16C05AC77BF // Q3 - data8 0x3F8111111110F167 // P2 - data8 0x3FA555555554DD45 // Q2 - data8 0xBFC5555555555555 // P1 - data8 0xBFDFFFFFFFFFFFFC // Q1 -LOCAL_OBJECT_END(double_cis_pq_k4) - -// Sincos table (S[m], C[m]) -LOCAL_OBJECT_START(double_sin_cos_beta_k4) -data8 0x0000000000000000 , 0x00000000 // sin( 0 pi/16) S0 -data8 0x8000000000000000 , 0x00003fff // cos( 0 pi/16) C0 -// -data8 0xc7c5c1e34d3055b3 , 0x00003ffc // sin( 1 pi/16) S1 -data8 0xfb14be7fbae58157 , 0x00003ffe // cos( 1 pi/16) C1 -// -data8 0xc3ef1535754b168e , 0x00003ffd // sin( 2 pi/16) S2 -data8 0xec835e79946a3146 , 0x00003ffe // cos( 2 pi/16) C2 -// -data8 0x8e39d9cd73464364 , 0x00003ffe // sin( 3 pi/16) S3 -data8 0xd4db3148750d181a , 0x00003ffe // cos( 3 pi/16) C3 -// -data8 0xb504f333f9de6484 , 0x00003ffe // sin( 4 pi/16) S4 -data8 0xb504f333f9de6484 , 0x00003ffe // cos( 4 pi/16) C4 -// -data8 0xd4db3148750d181a , 0x00003ffe // sin( 5 pi/16) C3 -data8 0x8e39d9cd73464364 , 0x00003ffe // cos( 5 pi/16) S3 -// -data8 0xec835e79946a3146 , 0x00003ffe // sin( 6 pi/16) C2 -data8 0xc3ef1535754b168e , 0x00003ffd // cos( 6 pi/16) S2 -// -data8 0xfb14be7fbae58157 , 0x00003ffe // sin( 7 pi/16) C1 -data8 0xc7c5c1e34d3055b3 , 0x00003ffc // cos( 7 pi/16) S1 -// -data8 0x8000000000000000 , 0x00003fff // sin( 8 pi/16) C0 -data8 0x0000000000000000 , 0x00000000 // cos( 8 pi/16) S0 -// -data8 0xfb14be7fbae58157 , 0x00003ffe // sin( 9 pi/16) C1 -data8 0xc7c5c1e34d3055b3 , 0x0000bffc // cos( 9 pi/16) -S1 -// -data8 0xec835e79946a3146 , 0x00003ffe // sin(10 pi/16) C2 -data8 0xc3ef1535754b168e , 0x0000bffd // cos(10 pi/16) -S2 -// -data8 0xd4db3148750d181a , 0x00003ffe // sin(11 pi/16) C3 -data8 0x8e39d9cd73464364 , 0x0000bffe // cos(11 pi/16) -S3 -// -data8 0xb504f333f9de6484 , 0x00003ffe // sin(12 pi/16) S4 -data8 0xb504f333f9de6484 , 0x0000bffe // cos(12 pi/16) -S4 -// -data8 0x8e39d9cd73464364 , 0x00003ffe // sin(13 pi/16) S3 -data8 0xd4db3148750d181a , 0x0000bffe // cos(13 pi/16) -C3 -// -data8 0xc3ef1535754b168e , 0x00003ffd // sin(14 pi/16) S2 -data8 0xec835e79946a3146 , 0x0000bffe // cos(14 pi/16) -C2 -// -data8 0xc7c5c1e34d3055b3 , 0x00003ffc // sin(15 pi/16) S1 -data8 0xfb14be7fbae58157 , 0x0000bffe // cos(15 pi/16) -C1 -// -data8 0x0000000000000000 , 0x00000000 // sin(16 pi/16) S0 -data8 0x8000000000000000 , 0x0000bfff // cos(16 pi/16) -C0 -// -data8 0xc7c5c1e34d3055b3 , 0x0000bffc // sin(17 pi/16) -S1 -data8 0xfb14be7fbae58157 , 0x0000bffe // cos(17 pi/16) -C1 -// -data8 0xc3ef1535754b168e , 0x0000bffd // sin(18 pi/16) -S2 -data8 0xec835e79946a3146 , 0x0000bffe // cos(18 pi/16) -C2 -// -data8 0x8e39d9cd73464364 , 0x0000bffe // sin(19 pi/16) -S3 -data8 0xd4db3148750d181a , 0x0000bffe // cos(19 pi/16) -C3 -// -data8 0xb504f333f9de6484 , 0x0000bffe // sin(20 pi/16) -S4 -data8 0xb504f333f9de6484 , 0x0000bffe // cos(20 pi/16) -S4 -// -data8 0xd4db3148750d181a , 0x0000bffe // sin(21 pi/16) -C3 -data8 0x8e39d9cd73464364 , 0x0000bffe // cos(21 pi/16) -S3 -// -data8 0xec835e79946a3146 , 0x0000bffe // sin(22 pi/16) -C2 -data8 0xc3ef1535754b168e , 0x0000bffd // cos(22 pi/16) -S2 -// -data8 0xfb14be7fbae58157 , 0x0000bffe // sin(23 pi/16) -C1 -data8 0xc7c5c1e34d3055b3 , 0x0000bffc // cos(23 pi/16) -S1 -// -data8 0x8000000000000000 , 0x0000bfff // sin(24 pi/16) -C0 -data8 0x0000000000000000 , 0x00000000 // cos(24 pi/16) S0 -// -data8 0xfb14be7fbae58157 , 0x0000bffe // sin(25 pi/16) -C1 -data8 0xc7c5c1e34d3055b3 , 0x00003ffc // cos(25 pi/16) S1 -// -data8 0xec835e79946a3146 , 0x0000bffe // sin(26 pi/16) -C2 -data8 0xc3ef1535754b168e , 0x00003ffd // cos(26 pi/16) S2 -// -data8 0xd4db3148750d181a , 0x0000bffe // sin(27 pi/16) -C3 -data8 0x8e39d9cd73464364 , 0x00003ffe // cos(27 pi/16) S3 -// -data8 0xb504f333f9de6484 , 0x0000bffe // sin(28 pi/16) -S4 -data8 0xb504f333f9de6484 , 0x00003ffe // cos(28 pi/16) S4 -// -data8 0x8e39d9cd73464364 , 0x0000bffe // sin(29 pi/16) -S3 -data8 0xd4db3148750d181a , 0x00003ffe // cos(29 pi/16) C3 -// -data8 0xc3ef1535754b168e , 0x0000bffd // sin(30 pi/16) -S2 -data8 0xec835e79946a3146 , 0x00003ffe // cos(30 pi/16) C2 -// -data8 0xc7c5c1e34d3055b3 , 0x0000bffc // sin(31 pi/16) -S1 -data8 0xfb14be7fbae58157 , 0x00003ffe // cos(31 pi/16) C1 -// -data8 0x0000000000000000 , 0x00000000 // sin(32 pi/16) S0 -data8 0x8000000000000000 , 0x00003fff // cos(32 pi/16) C0 -LOCAL_OBJECT_END(double_sin_cos_beta_k4) - -.section .text - -GLOBAL_IEEE754_ENTRY(sincos) -// cis_GR_sig_inv_pi_by_16 = significand of 16/pi -{ .mlx - getf.exp cis_r_signexp = cis_Arg - movl cis_GR_sig_inv_pi_by_16 = 0xA2F9836E4E44152A - -} -// cis_GR_rshf_2to61 = 1.1000 2^(63+63-2) -{ .mlx - addl cis_AD_1 = @ltoff(double_cis_pi), gp - movl cis_GR_rshf_2to61 = 0x47b8000000000000 -};; - -{ .mfi - ld8 cis_AD_1 = [cis_AD_1] - fnorm.s1 cis_NORM_f8 = cis_Arg - cmp.eq p13, p14 = r0, r0 // p13 set for sincos -} -// cis_GR_exp_2tom61 = exponent of scaling factor 2^-61 -{ .mib - mov cis_GR_exp_2tom61 = 0xffff-61 - nop.i 0 - br.cond.sptk _CIS_COMMON -};; -GLOBAL_IEEE754_END(sincos) - -GLOBAL_LIBM_ENTRY(__libm_sincos) -// cis_GR_sig_inv_pi_by_16 = significand of 16/pi -{ .mlx - getf.exp cis_r_signexp = cis_Arg - movl cis_GR_sig_inv_pi_by_16 = 0xA2F9836E4E44152A -} -// cis_GR_rshf_2to61 = 1.1000 2^(63+63-2) -{ .mlx - addl cis_AD_1 = @ltoff(double_cis_pi), gp - movl cis_GR_rshf_2to61 = 0x47b8000000000000 -};; - -// p14 set for __libm_sincos and cis -{ .mfi - ld8 cis_AD_1 = [cis_AD_1] - fnorm.s1 cis_NORM_f8 = cis_Arg - cmp.eq p14, p13 = r0, r0 -} -// cis_GR_exp_2tom61 = exponent of scaling factor 2^-61 -{ .mib - mov cis_GR_exp_2tom61 = 0xffff-61 - nop.i 0 - nop.b 0 -};; - -_CIS_COMMON: -// Form two constants we need -// 16/pi * 2^-2 * 2^63, scaled by 2^61 since we just loaded the significand -// 1.1000...000 * 2^(63+63-2) to right shift int(W) into the low significand -// fcmp used to set denormal, and invalid on snans -{ .mfi - setf.sig cis_SIG_INV_PI_BY_16_2TO61 = cis_GR_sig_inv_pi_by_16 - fclass.m p6,p0 = cis_Arg, 0xe7 // if x=0,inf,nan - addl cis_gr_tmp = -1, r0 -} -// 1.1000 2^63 for right shift -{ .mlx - setf.d cis_RSHF_2TO61 = cis_GR_rshf_2to61 - movl cis_GR_rshf = 0x43e8000000000000 -};; - -// Form another constant -// 2^-61 for scaling Nfloat -// 0x1001a is register_bias + 27. -// So if f8 >= 2^27, go to large arguments routine -{ .mfi - alloc GR_SAVE_PFS = ar.pfs, 3, 5, 0, 0 - fclass.m p11,p0 = cis_Arg, 0x0b // Test for x=unorm - mov cis_exp_limit = 0x1001a -} -{ .mib - setf.exp cis_2TOM61 = cis_GR_exp_2tom61 - nop.i 0 -(p6) br.cond.spnt _CIS_SPECIAL_ARGS -};; - -// Load the two pieces of pi/16 -// Form another constant -// 1.1000...000 * 2^63, the right shift constant -{ .mmb - ldfe cis_Pi_by_16_hi = [cis_AD_1],16 - setf.d cis_RSHF = cis_GR_rshf -(p11) br.cond.spnt _CIS_UNORM // Branch if x=unorm -};; - -_CIS_COMMON2: -// Return here if x=unorm -// Create constant inexact set -{ .mmi - ldfe cis_Pi_by_16_lo = [cis_AD_1],16 - setf.sig cis_tmp = cis_gr_tmp - nop.i 0 -};; - -// Select exponent (17 lsb) -{ .mfi - ldfe cis_Pi_by_16_lowest = [cis_AD_1],16 - nop.f 0 - dep.z cis_r_exp = cis_r_signexp, 0, 17 -};; - -// Start loading P, Q coefficients -// p10 is true if we must call routines to handle larger arguments -// p10 is true if f8 exp is > 0x1001a -{ .mmb - ldfpd cis_P4,cis_Q4 = [cis_AD_1],16 - cmp.ge p10, p0 = cis_r_exp, cis_exp_limit -(p10) br.cond.spnt _CIS_LARGE_ARGS // go to |x| >= 2^27 path -};; - -// cis_W = x * cis_Inv_Pi_by_16 -// Multiply x by scaled 16/pi and add large const to shift integer part of W to -// rightmost bits of significand -{ .mfi - ldfpd cis_P3,cis_Q3 = [cis_AD_1],16 - fma.s1 cis_W_2TO61_RSH = cis_NORM_f8,cis_SIG_INV_PI_BY_16_2TO61,cis_RSHF_2TO61 - nop.i 0 -};; - -// get N = (int)cis_int_Nfloat -// cis_NFLOAT = Round_Int_Nearest(cis_W) -{ .mmf - getf.sig cis_GR_n = cis_W_2TO61_RSH - ldfpd cis_P2,cis_Q2 = [cis_AD_1],16 - fms.s1 cis_NFLOAT = cis_W_2TO61_RSH,cis_2TOM61,cis_RSHF -};; - -// cis_r = -cis_Nfloat * cis_Pi_by_16_hi + x -{ .mfi - ldfpd cis_P1,cis_Q1 = [cis_AD_1], 16 - fnma.s1 cis_r = cis_NFLOAT,cis_Pi_by_16_hi,cis_NORM_f8 - nop.i 0 -};; - -// Add 2^(k-1) (which is in cis_r_sincos) to N -{ .mmi - add cis_GR_n_cos = 0x8, cis_GR_n -;; -//Get M (least k+1 bits of N) - and cis_GR_m_sin = 0x1f,cis_GR_n - and cis_GR_m_cos = 0x1f,cis_GR_n_cos -};; - -{ .mmi - nop.m 0 - nop.m 0 - shl cis_GR_32m_sin = cis_GR_m_sin,5 -};; - -// Add 32*M to address of sin_cos_beta table -// cis_r = cis_r -cis_Nfloat * cis_Pi_by_16_lo -{ .mfi - add cis_AD_2_sin = cis_GR_32m_sin, cis_AD_1 - fnma.s1 cis_r = cis_NFLOAT, cis_Pi_by_16_lo, cis_r - shl cis_GR_32m_cos = cis_GR_m_cos,5 -};; - -// Add 32*M to address of sin_cos_beta table -{ .mmf - ldfe cis_Sm_sin = [cis_AD_2_sin],16 - add cis_AD_2_cos = cis_GR_32m_cos, cis_AD_1 - fclass.m.unc p10,p0 = cis_Arg,0x0b // den. input - uflow -};; - -{ .mfi - ldfe cis_Sm_cos = [cis_AD_2_cos], 16 - nop.i 0 -};; - -{ .mfi - ldfe cis_Cm_sin = [cis_AD_2_sin] - fma.s1 cis_rsq = cis_r, cis_r, f0 // get r^2 - nop.i 0 -} -// fmpy forces inexact flag -{ .mfi - nop.m 0 - fmpy.s0 cis_tmp = cis_tmp,cis_tmp - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 cis_r_exact = cis_NFLOAT, cis_Pi_by_16_lowest, cis_r - nop.i 0 -};; - -{ .mfi - ldfe cis_Cm_cos = [cis_AD_2_cos] - fma.s1 cis_P_temp1 = cis_rsq, cis_P4, cis_P3 - nop.i 0 -} - -{ .mfi - nop.m 0 - fma.s1 cis_Q_temp1 = cis_rsq, cis_Q4, cis_Q3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fmpy.s1 cis_srsq_sin = cis_Sm_sin, cis_rsq - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 cis_srsq_cos = cis_Sm_cos,cis_rsq - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 cis_Q_temp2 = cis_rsq, cis_Q_temp1, cis_Q2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 cis_P_temp2 = cis_rsq, cis_P_temp1, cis_P2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fmpy.s1 cis_rcub = cis_r_exact, cis_rsq // get r^3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 cis_Q = cis_rsq, cis_Q_temp2, cis_Q1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 cis_P = cis_rsq, cis_P_temp2, cis_P1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 cis_Q_sin = cis_srsq_sin,cis_Q, cis_Sm_sin - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 cis_Q_cos = cis_srsq_cos,cis_Q, cis_Sm_cos - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 cis_P = cis_rcub,cis_P, cis_r_exact // final P - nop.i 0 -};; - -// If den. arg, force underflow to be set -{ .mfi - nop.m 0 -(p10) fmpy.d.s0 cis_tmp = cis_Arg,cis_Arg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.d.s0 cis_Sin_res = cis_Cm_sin,cis_P,cis_Q_sin//Final sin - nop.i 0 -} -{ .mfb - nop.m 0 - fma.d.s0 cis_Cos_res = cis_Cm_cos,cis_P,cis_Q_cos//Final cos -(p14) br.ret.sptk b0 // common exit for __libm_sincos and cis main path -};; - -{ .mmb - stfd [cis_pResSin] = cis_Sin_res - stfd [cis_pResCos] = cis_Cos_res - br.ret.sptk b0 // common exit for sincos main path -};; - -_CIS_SPECIAL_ARGS: -// sin(+/-0) = +/-0 -// sin(Inf) = NaN -// sin(NaN) = NaN -{ .mfi - nop.m 999 - fma.d.s0 cis_Sin_res = cis_Arg, f0, f0 // sinf(+/-0,NaN,Inf) - nop.i 999 -};; -// cos(+/-0) = 1.0 -// cos(Inf) = NaN -// cos(NaN) = NaN -{ .mfb - nop.m 999 - fma.d.s0 cis_Cos_res = cis_Arg, f0, f1 // cosf(+/-0,NaN,Inf) -(p14) br.ret.sptk b0 //spec exit for __libm_sincos and cis main path -};; - -{ .mmb - stfd [cis_pResSin] = cis_Sin_res - stfd [cis_pResCos] = cis_Cos_res - br.ret.sptk b0 // common exit for sincos main path -};; - -_CIS_UNORM: -// Here if x=unorm -{ .mfb - getf.exp cis_r_signexp = cis_NORM_f8 // Get signexp of x - fcmp.eq.s0 p11,p0 = cis_Arg, f0 // Dummy op to set denorm - br.cond.sptk _CIS_COMMON2 // Return to main path -};; - -GLOBAL_LIBM_END(__libm_sincos) - -//// |x| > 2^27 path /////// -.proc _CIS_LARGE_ARGS -_CIS_LARGE_ARGS: -.prologue -{ .mfi - nop.m 0 - nop.f 0 -.save ar.pfs, GR_SAVE_PFS - mov GR_SAVE_PFS = ar.pfs -} -;; - -{ .mfi - mov GR_SAVE_GP = gp - nop.f 0 -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0 = b0 -};; - -.body -// Call of huge arguments sincos -{ .mib - nop.m 0 - mov GR_SAVE_PR = pr - br.call.sptk b0 = __libm_sincos_large -};; - -{ .mfi - mov gp = GR_SAVE_GP - nop.f 0 - mov pr = GR_SAVE_PR, 0x1fffe -} -;; - -{ .mfi - nop.m 0 - nop.f 0 - mov b0 = GR_SAVE_B0 -} -;; - -{ .mfi - nop.m 0 - fma.d.s0 cis_Cos_res = cis_Cos_res, f1, f0 - mov ar.pfs = GR_SAVE_PFS -} -{ .mfb - nop.m 0 - fma.d.s0 cis_Sin_res = cis_Sin_res, f1, f0 -(p14) br.ret.sptk b0 // exit for |x| > 2^27 path (__libm_sincos and cis) -};; - -{ .mmb - stfd [cis_pResSin] = cis_Sin_res - stfd [cis_pResCos] = cis_Cos_res - br.ret.sptk b0 // exit for sincos |x| > 2^27 path -};; -.endp _CIS_LARGE_ARGS - -.type __libm_sincos_large#,@function -.global __libm_sincos_large# diff --git a/sysdeps/ia64/fpu/libm_sincos_large.S b/sysdeps/ia64/fpu/libm_sincos_large.S deleted file mode 100644 index 9faa75980f..0000000000 --- a/sysdeps/ia64/fpu/libm_sincos_large.S +++ /dev/null @@ -1,2756 +0,0 @@ -.file "libm_sincos_large.s" - - -// Copyright (c) 2002 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2002 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/15/02 Initial version -// 05/13/02 Changed interface to __libm_pi_by_2_reduce -// 02/10/03 Reordered header: .section, .global, .proc, .align; -// used data8 for long double table values -// 05/15/03 Reformatted data tables -// -// -// Overview of operation -//============================================================== -// -// These functions calculate the sin and cos for inputs -// greater than 2^10 -// -// __libm_sin_large# -// __libm_cos_large# -// They accept argument in f8 -// and return result in f8 without final rounding -// -// __libm_sincos_large# -// It accepts argument in f8 -// and returns cos in f8 and sin in f9 without final rounding -// -// -//********************************************************************* -// -// Accuracy: Within .7 ulps for 80-bit floating point values -// Very accurate for double precision values -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8 as Input Value, f8 and f9 as Return Values -// f32-f103 -// -// General Purpose Registers: -// r32-r43 -// r44-r45 (Used to pass arguments to pi_by_2 reduce routine) -// -// Predicate Registers: p6-p13 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// Denormal fault raised on denormal inputs -// Overflow exceptions do not occur -// Underflow exceptions raised when appropriate for sin -// (No specialized error handling for this routine) -// Inexact raised when appropriate by algorithm -// -// sin(SNaN) = QNaN -// sin(QNaN) = QNaN -// sin(inf) = QNaN -// sin(+/-0) = +/-0 -// cos(inf) = QNaN -// cos(SNaN) = QNaN -// cos(QNaN) = QNaN -// cos(0) = 1 -// -//********************************************************************* -// -// Mathematical Description -// ======================== -// -// The computation of FSIN and FCOS is best handled in one piece of -// code. The main reason is that given any argument Arg, computation -// of trigonometric functions first calculate N and an approximation -// to alpha where -// -// Arg = N pi/2 + alpha, |alpha| <= pi/4. -// -// Since -// -// cos( Arg ) = sin( (N+1) pi/2 + alpha ), -// -// therefore, the code for computing sine will produce cosine as long -// as 1 is added to N immediately after the argument reduction -// process. -// -// Let M = N if sine -// N+1 if cosine. -// -// Now, given -// -// Arg = M pi/2 + alpha, |alpha| <= pi/4, -// -// let I = M mod 4, or I be the two lsb of M when M is represented -// as 2's complement. I = [i_0 i_1]. Then -// -// sin( Arg ) = (-1)^i_0 sin( alpha ) if i_1 = 0, -// = (-1)^i_0 cos( alpha ) if i_1 = 1. -// -// For example: -// if M = -1, I = 11 -// sin ((-pi/2 + alpha) = (-1) cos (alpha) -// if M = 0, I = 00 -// sin (alpha) = sin (alpha) -// if M = 1, I = 01 -// sin (pi/2 + alpha) = cos (alpha) -// if M = 2, I = 10 -// sin (pi + alpha) = (-1) sin (alpha) -// if M = 3, I = 11 -// sin ((3/2)pi + alpha) = (-1) cos (alpha) -// -// The value of alpha is obtained by argument reduction and -// represented by two working precision numbers r and c where -// -// alpha = r + c accurately. -// -// The reduction method is described in a previous write up. -// The argument reduction scheme identifies 4 cases. For Cases 2 -// and 4, because |alpha| is small, sin(r+c) and cos(r+c) can be -// computed very easily by 2 or 3 terms of the Taylor series -// expansion as follows: -// -// Case 2: -// ------- -// -// sin(r + c) = r + c - r^3/6 accurately -// cos(r + c) = 1 - 2^(-67) accurately -// -// Case 4: -// ------- -// -// sin(r + c) = r + c - r^3/6 + r^5/120 accurately -// cos(r + c) = 1 - r^2/2 + r^4/24 accurately -// -// The only cases left are Cases 1 and 3 of the argument reduction -// procedure. These two cases will be merged since after the -// argument is reduced in either cases, we have the reduced argument -// represented as r + c and that the magnitude |r + c| is not small -// enough to allow the usage of a very short approximation. -// -// The required calculation is either -// -// sin(r + c) = sin(r) + correction, or -// cos(r + c) = cos(r) + correction. -// -// Specifically, -// -// sin(r + c) = sin(r) + c sin'(r) + O(c^2) -// = sin(r) + c cos (r) + O(c^2) -// = sin(r) + c(1 - r^2/2) accurately. -// Similarly, -// -// cos(r + c) = cos(r) - c sin(r) + O(c^2) -// = cos(r) - c(r - r^3/6) accurately. -// -// We therefore concentrate on accurately calculating sin(r) and -// cos(r) for a working-precision number r, |r| <= pi/4 to within -// 0.1% or so. -// -// The greatest challenge of this task is that the second terms of -// the Taylor series -// -// r - r^3/3! + r^r/5! - ... -// -// and -// -// 1 - r^2/2! + r^4/4! - ... -// -// are not very small when |r| is close to pi/4 and the rounding -// errors will be a concern if simple polynomial accumulation is -// used. When |r| < 2^-3, however, the second terms will be small -// enough (6 bits or so of right shift) that a normal Horner -// recurrence suffices. Hence there are two cases that we consider -// in the accurate computation of sin(r) and cos(r), |r| <= pi/4. -// -// Case small_r: |r| < 2^(-3) -// -------------------------- -// -// Since Arg = M pi/4 + r + c accurately, and M mod 4 is [i_0 i_1], -// we have -// -// sin(Arg) = (-1)^i_0 * sin(r + c) if i_1 = 0 -// = (-1)^i_0 * cos(r + c) if i_1 = 1 -// -// can be accurately approximated by -// -// sin(Arg) = (-1)^i_0 * [sin(r) + c] if i_1 = 0 -// = (-1)^i_0 * [cos(r) - c*r] if i_1 = 1 -// -// because |r| is small and thus the second terms in the correction -// are unneccessary. -// -// Finally, sin(r) and cos(r) are approximated by polynomials of -// moderate lengths. -// -// sin(r) = r + S_1 r^3 + S_2 r^5 + ... + S_5 r^11 -// cos(r) = 1 + C_1 r^2 + C_2 r^4 + ... + C_5 r^10 -// -// We can make use of predicates to selectively calculate -// sin(r) or cos(r) based on i_1. -// -// Case normal_r: 2^(-3) <= |r| <= pi/4 -// ------------------------------------ -// -// This case is more likely than the previous one if one considers -// r to be uniformly distributed in [-pi/4 pi/4]. Again, -// -// sin(Arg) = (-1)^i_0 * sin(r + c) if i_1 = 0 -// = (-1)^i_0 * cos(r + c) if i_1 = 1. -// -// Because |r| is now larger, we need one extra term in the -// correction. sin(Arg) can be accurately approximated by -// -// sin(Arg) = (-1)^i_0 * [sin(r) + c(1-r^2/2)] if i_1 = 0 -// = (-1)^i_0 * [cos(r) - c*r*(1 - r^2/6)] i_1 = 1. -// -// Finally, sin(r) and cos(r) are approximated by polynomials of -// moderate lengths. -// -// sin(r) = r + PP_1_hi r^3 + PP_1_lo r^3 + -// PP_2 r^5 + ... + PP_8 r^17 -// -// cos(r) = 1 + QQ_1 r^2 + QQ_2 r^4 + ... + QQ_8 r^16 -// -// where PP_1_hi is only about 16 bits long and QQ_1 is -1/2. -// The crux in accurate computation is to calculate -// -// r + PP_1_hi r^3 or 1 + QQ_1 r^2 -// -// accurately as two pieces: U_hi and U_lo. The way to achieve this -// is to obtain r_hi as a 10 sig. bit number that approximates r to -// roughly 8 bits or so of accuracy. (One convenient way is -// -// r_hi := frcpa( frcpa( r ) ).) -// -// This way, -// -// r + PP_1_hi r^3 = r + PP_1_hi r_hi^3 + -// PP_1_hi (r^3 - r_hi^3) -// = [r + PP_1_hi r_hi^3] + -// [PP_1_hi (r - r_hi) -// (r^2 + r_hi r + r_hi^2) ] -// = U_hi + U_lo -// -// Since r_hi is only 10 bit long and PP_1_hi is only 16 bit long, -// PP_1_hi * r_hi^3 is only at most 46 bit long and thus computed -// exactly. Furthermore, r and PP_1_hi r_hi^3 are of opposite sign -// and that there is no more than 8 bit shift off between r and -// PP_1_hi * r_hi^3. Hence the sum, U_hi, is representable and thus -// calculated without any error. Finally, the fact that -// -// |U_lo| <= 2^(-8) |U_hi| -// -// says that U_hi + U_lo is approximating r + PP_1_hi r^3 to roughly -// 8 extra bits of accuracy. -// -// Similarly, -// -// 1 + QQ_1 r^2 = [1 + QQ_1 r_hi^2] + -// [QQ_1 (r - r_hi)(r + r_hi)] -// = U_hi + U_lo. -// -// Summarizing, we calculate r_hi = frcpa( frcpa( r ) ). -// -// If i_1 = 0, then -// -// U_hi := r + PP_1_hi * r_hi^3 -// U_lo := PP_1_hi * (r - r_hi) * (r^2 + r*r_hi + r_hi^2) -// poly := PP_1_lo r^3 + PP_2 r^5 + ... + PP_8 r^17 -// correction := c * ( 1 + C_1 r^2 ) -// -// Else ...i_1 = 1 -// -// U_hi := 1 + QQ_1 * r_hi * r_hi -// U_lo := QQ_1 * (r - r_hi) * (r + r_hi) -// poly := QQ_2 * r^4 + QQ_3 * r^6 + ... + QQ_8 r^16 -// correction := -c * r * (1 + S_1 * r^2) -// -// End -// -// Finally, -// -// V := poly + ( U_lo + correction ) -// -// / U_hi + V if i_0 = 0 -// result := | -// \ (-U_hi) - V if i_0 = 1 -// -// It is important that in the last step, negation of U_hi is -// performed prior to the subtraction which is to be performed in -// the user-set rounding mode. -// -// -// Algorithmic Description -// ======================= -// -// The argument reduction algorithm is tightly integrated into FSIN -// and FCOS which share the same code. The following is complete and -// self-contained. The argument reduction description given -// previously is repeated below. -// -// -// Step 0. Initialization. -// -// If FSIN is invoked, set N_inc := 0; else if FCOS is invoked, -// set N_inc := 1. -// -// Step 1. Check for exceptional and special cases. -// -// * If Arg is +-0, +-inf, NaN, NaT, go to Step 10 for special -// handling. -// * If |Arg| < 2^24, go to Step 2 for reduction of moderate -// arguments. This is the most likely case. -// * If |Arg| < 2^63, go to Step 8 for pre-reduction of large -// arguments. -// * If |Arg| >= 2^63, go to Step 10 for special handling. -// -// Step 2. Reduction of moderate arguments. -// -// If |Arg| < pi/4 ...quick branch -// N_fix := N_inc (integer) -// r := Arg -// c := 0.0 -// Branch to Step 4, Case_1_complete -// Else ...cf. argument reduction -// N := Arg * two_by_PI (fp) -// N_fix := fcvt.fx( N ) (int) -// N := fcvt.xf( N_fix ) -// N_fix := N_fix + N_inc -// s := Arg - N * P_1 (first piece of pi/2) -// w := -N * P_2 (second piece of pi/2) -// -// If |s| >= 2^(-33) -// go to Step 3, Case_1_reduce -// Else -// go to Step 7, Case_2_reduce -// Endif -// Endif -// -// Step 3. Case_1_reduce. -// -// r := s + w -// c := (s - r) + w ...observe order -// -// Step 4. Case_1_complete -// -// ...At this point, the reduced argument alpha is -// ...accurately represented as r + c. -// If |r| < 2^(-3), go to Step 6, small_r. -// -// Step 5. Normal_r. -// -// Let [i_0 i_1] by the 2 lsb of N_fix. -// FR_rsq := r * r -// r_hi := frcpa( frcpa( r ) ) -// r_lo := r - r_hi -// -// If i_1 = 0, then -// poly := r*FR_rsq*(PP_1_lo + FR_rsq*(PP_2 + ... FR_rsq*PP_8)) -// U_hi := r + PP_1_hi*r_hi*r_hi*r_hi ...any order -// U_lo := PP_1_hi*r_lo*(r*r + r*r_hi + r_hi*r_hi) -// correction := c + c*C_1*FR_rsq ...any order -// Else -// poly := FR_rsq*FR_rsq*(QQ_2 + FR_rsq*(QQ_3 + ... + FR_rsq*QQ_8)) -// U_hi := 1 + QQ_1 * r_hi * r_hi ...any order -// U_lo := QQ_1 * r_lo * (r + r_hi) -// correction := -c*(r + S_1*FR_rsq*r) ...any order -// Endif -// -// V := poly + (U_lo + correction) ...observe order -// -// result := (i_0 == 0? 1.0 : -1.0) -// -// Last instruction in user-set rounding mode -// -// result := (i_0 == 0? result*U_hi + V : -// result*U_hi - V) -// -// Return -// -// Step 6. Small_r. -// -// ...Use flush to zero mode without causing exception -// Let [i_0 i_1] be the two lsb of N_fix. -// -// FR_rsq := r * r -// -// If i_1 = 0 then -// z := FR_rsq*FR_rsq; z := FR_rsq*z *r -// poly_lo := S_3 + FR_rsq*(S_4 + FR_rsq*S_5) -// poly_hi := r*FR_rsq*(S_1 + FR_rsq*S_2) -// correction := c -// result := r -// Else -// z := FR_rsq*FR_rsq; z := FR_rsq*z -// poly_lo := C_3 + FR_rsq*(C_4 + FR_rsq*C_5) -// poly_hi := FR_rsq*(C_1 + FR_rsq*C_2) -// correction := -c*r -// result := 1 -// Endif -// -// poly := poly_hi + (z * poly_lo + correction) -// -// If i_0 = 1, result := -result -// -// Last operation. Perform in user-set rounding mode -// -// result := (i_0 == 0? result + poly : -// result - poly ) -// Return -// -// Step 7. Case_2_reduce. -// -// ...Refer to the write up for argument reduction for -// ...rationale. The reduction algorithm below is taken from -// ...argument reduction description and integrated this. -// -// w := N*P_3 -// U_1 := N*P_2 + w ...FMA -// U_2 := (N*P_2 - U_1) + w ...2 FMA -// ...U_1 + U_2 is N*(P_2+P_3) accurately -// -// r := s - U_1 -// c := ( (s - r) - U_1 ) - U_2 -// -// ...The mathematical sum r + c approximates the reduced -// ...argument accurately. Note that although compared to -// ...Case 1, this case requires much more work to reduce -// ...the argument, the subsequent calculation needed for -// ...any of the trigonometric function is very little because -// ...|alpha| < 1.01*2^(-33) and thus two terms of the -// ...Taylor series expansion suffices. -// -// If i_1 = 0 then -// poly := c + S_1 * r * r * r ...any order -// result := r -// Else -// poly := -2^(-67) -// result := 1.0 -// Endif -// -// If i_0 = 1, result := -result -// -// Last operation. Perform in user-set rounding mode -// -// result := (i_0 == 0? result + poly : -// result - poly ) -// -// Return -// -// -// Step 8. Pre-reduction of large arguments. -// -// ...Again, the following reduction procedure was described -// ...in the separate write up for argument reduction, which -// ...is tightly integrated here. - -// N_0 := Arg * Inv_P_0 -// N_0_fix := fcvt.fx( N_0 ) -// N_0 := fcvt.xf( N_0_fix) - -// Arg' := Arg - N_0 * P_0 -// w := N_0 * d_1 -// N := Arg' * two_by_PI -// N_fix := fcvt.fx( N ) -// N := fcvt.xf( N_fix ) -// N_fix := N_fix + N_inc -// -// s := Arg' - N * P_1 -// w := w - N * P_2 -// -// If |s| >= 2^(-14) -// go to Step 3 -// Else -// go to Step 9 -// Endif -// -// Step 9. Case_4_reduce. -// -// ...first obtain N_0*d_1 and -N*P_2 accurately -// U_hi := N_0 * d_1 V_hi := -N*P_2 -// U_lo := N_0 * d_1 - U_hi V_lo := -N*P_2 - U_hi ...FMAs -// -// ...compute the contribution from N_0*d_1 and -N*P_3 -// w := -N*P_3 -// w := w + N_0*d_2 -// t := U_lo + V_lo + w ...any order -// -// ...at this point, the mathematical value -// ...s + U_hi + V_hi + t approximates the true reduced argument -// ...accurately. Just need to compute this accurately. -// -// ...Calculate U_hi + V_hi accurately: -// A := U_hi + V_hi -// if |U_hi| >= |V_hi| then -// a := (U_hi - A) + V_hi -// else -// a := (V_hi - A) + U_hi -// endif -// ...order in computing "a" must be observed. This branch is -// ...best implemented by predicates. -// ...A + a is U_hi + V_hi accurately. Moreover, "a" is -// ...much smaller than A: |a| <= (1/2)ulp(A). -// -// ...Just need to calculate s + A + a + t -// C_hi := s + A t := t + a -// C_lo := (s - C_hi) + A -// C_lo := C_lo + t -// -// ...Final steps for reduction -// r := C_hi + C_lo -// c := (C_hi - r) + C_lo -// -// ...At this point, we have r and c -// ...And all we need is a couple of terms of the corresponding -// ...Taylor series. -// -// If i_1 = 0 -// poly := c + r*FR_rsq*(S_1 + FR_rsq*S_2) -// result := r -// Else -// poly := FR_rsq*(C_1 + FR_rsq*C_2) -// result := 1 -// Endif -// -// If i_0 = 1, result := -result -// -// Last operation. Perform in user-set rounding mode -// -// result := (i_0 == 0? result + poly : -// result - poly ) -// Return -// -// Large Arguments: For arguments above 2**63, a Payne-Hanek -// style argument reduction is used and pi_by_2 reduce is called. -// - - -RODATA -.align 16 - -LOCAL_OBJECT_START(FSINCOS_CONSTANTS) - -data4 0x4B800000 // two**24 -data4 0xCB800000 // -two**24 -data4 0x00000000 // pad -data4 0x00000000 // pad -data8 0xA2F9836E4E44152A, 0x00003FFE // Inv_pi_by_2 -data8 0xC84D32B0CE81B9F1, 0x00004016 // P_0 -data8 0xC90FDAA22168C235, 0x00003FFF // P_1 -data8 0xECE675D1FC8F8CBB, 0x0000BFBD // P_2 -data8 0xB7ED8FBBACC19C60, 0x0000BF7C // P_3 -data4 0x5F000000 // two**63 -data4 0xDF000000 // -two**63 -data4 0x00000000 // pad -data4 0x00000000 // pad -data8 0xA397E5046EC6B45A, 0x00003FE7 // Inv_P_0 -data8 0x8D848E89DBD171A1, 0x0000BFBF // d_1 -data8 0xD5394C3618A66F8E, 0x0000BF7C // d_2 -data8 0xC90FDAA22168C234, 0x00003FFE // pi_by_4 -data8 0xC90FDAA22168C234, 0x0000BFFE // neg_pi_by_4 -data4 0x3E000000 // two**-3 -data4 0xBE000000 // -two**-3 -data4 0x00000000 // pad -data4 0x00000000 // pad -data4 0x2F000000 // two**-33 -data4 0xAF000000 // -two**-33 -data4 0x9E000000 // -two**-67 -data4 0x00000000 // pad -data8 0xCC8ABEBCA21C0BC9, 0x00003FCE // PP_8 -data8 0xD7468A05720221DA, 0x0000BFD6 // PP_7 -data8 0xB092382F640AD517, 0x00003FDE // PP_6 -data8 0xD7322B47D1EB75A4, 0x0000BFE5 // PP_5 -data8 0xFFFFFFFFFFFFFFFE, 0x0000BFFD // C_1 -data8 0xAAAA000000000000, 0x0000BFFC // PP_1_hi -data8 0xB8EF1D2ABAF69EEA, 0x00003FEC // PP_4 -data8 0xD00D00D00D03BB69, 0x0000BFF2 // PP_3 -data8 0x8888888888888962, 0x00003FF8 // PP_2 -data8 0xAAAAAAAAAAAB0000, 0x0000BFEC // PP_1_lo -data8 0xD56232EFC2B0FE52, 0x00003FD2 // QQ_8 -data8 0xC9C99ABA2B48DCA6, 0x0000BFDA // QQ_7 -data8 0x8F76C6509C716658, 0x00003FE2 // QQ_6 -data8 0x93F27DBAFDA8D0FC, 0x0000BFE9 // QQ_5 -data8 0xAAAAAAAAAAAAAAAA, 0x0000BFFC // S_1 -data8 0x8000000000000000, 0x0000BFFE // QQ_1 -data8 0xD00D00D00C6E5041, 0x00003FEF // QQ_4 -data8 0xB60B60B60B607F60, 0x0000BFF5 // QQ_3 -data8 0xAAAAAAAAAAAAAA9B, 0x00003FFA // QQ_2 -data8 0xFFFFFFFFFFFFFFFE, 0x0000BFFD // C_1 -data8 0xAAAAAAAAAAAA719F, 0x00003FFA // C_2 -data8 0xB60B60B60356F994, 0x0000BFF5 // C_3 -data8 0xD00CFFD5B2385EA9, 0x00003FEF // C_4 -data8 0x93E4BD18292A14CD, 0x0000BFE9 // C_5 -data8 0xAAAAAAAAAAAAAAAA, 0x0000BFFC // S_1 -data8 0x88888888888868DB, 0x00003FF8 // S_2 -data8 0xD00D00D0055EFD4B, 0x0000BFF2 // S_3 -data8 0xB8EF1C5D839730B9, 0x00003FEC // S_4 -data8 0xD71EA3A4E5B3F492, 0x0000BFE5 // S_5 -data4 0x38800000 // two**-14 -data4 0xB8800000 // -two**-14 -LOCAL_OBJECT_END(FSINCOS_CONSTANTS) - -// sin and cos registers - -// FR -FR_Input_X = f8 - -FR_r = f8 -FR_c = f9 - -FR_Two_to_63 = f32 -FR_Two_to_24 = f33 -FR_Pi_by_4 = f33 -FR_Two_to_M14 = f34 -FR_Two_to_M33 = f35 -FR_Neg_Two_to_24 = f36 -FR_Neg_Pi_by_4 = f36 -FR_Neg_Two_to_M14 = f37 -FR_Neg_Two_to_M33 = f38 -FR_Neg_Two_to_M67 = f39 -FR_Inv_pi_by_2 = f40 -FR_N_float = f41 -FR_N_fix = f42 -FR_P_1 = f43 -FR_P_2 = f44 -FR_P_3 = f45 -FR_s = f46 -FR_w = f47 -FR_d_2 = f48 -FR_prelim = f49 -FR_Z = f50 -FR_A = f51 -FR_a = f52 -FR_t = f53 -FR_U_1 = f54 -FR_U_2 = f55 -FR_C_1 = f56 -FR_C_2 = f57 -FR_C_3 = f58 -FR_C_4 = f59 -FR_C_5 = f60 -FR_S_1 = f61 -FR_S_2 = f62 -FR_S_3 = f63 -FR_S_4 = f64 -FR_S_5 = f65 -FR_poly_hi = f66 -FR_poly_lo = f67 -FR_r_hi = f68 -FR_r_lo = f69 -FR_rsq = f70 -FR_r_cubed = f71 -FR_C_hi = f72 -FR_N_0 = f73 -FR_d_1 = f74 -FR_V = f75 -FR_V_hi = f75 -FR_V_lo = f76 -FR_U_hi = f77 -FR_U_lo = f78 -FR_U_hiabs = f79 -FR_V_hiabs = f80 -FR_PP_8 = f81 -FR_QQ_8 = f81 -FR_PP_7 = f82 -FR_QQ_7 = f82 -FR_PP_6 = f83 -FR_QQ_6 = f83 -FR_PP_5 = f84 -FR_QQ_5 = f84 -FR_PP_4 = f85 -FR_QQ_4 = f85 -FR_PP_3 = f86 -FR_QQ_3 = f86 -FR_PP_2 = f87 -FR_QQ_2 = f87 -FR_QQ_1 = f88 -FR_N_0_fix = f89 -FR_Inv_P_0 = f90 -FR_corr = f91 -FR_poly = f92 -FR_Neg_Two_to_M3 = f93 -FR_Two_to_M3 = f94 -FR_Neg_Two_to_63 = f94 -FR_P_0 = f95 -FR_C_lo = f96 -FR_PP_1 = f97 -FR_PP_1_lo = f98 -FR_ArgPrime = f99 - -// GR -GR_Table_Base = r32 -GR_Table_Base1 = r33 -GR_i_0 = r34 -GR_i_1 = r35 -GR_N_Inc = r36 -GR_Sin_or_Cos = r37 - -GR_SAVE_B0 = r39 -GR_SAVE_GP = r40 -GR_SAVE_PFS = r41 - -// sincos combined routine registers - -// GR -GR_SINCOS_SAVE_PFS = r32 -GR_SINCOS_SAVE_B0 = r33 -GR_SINCOS_SAVE_GP = r34 - -// FR -FR_SINCOS_ARG = f100 -FR_SINCOS_RES_SIN = f101 - - -.section .text - - -GLOBAL_LIBM_ENTRY(__libm_sincos_large) - -{ .mfi - alloc GR_SINCOS_SAVE_PFS = ar.pfs,0,3,0,0 - fma.s1 FR_SINCOS_ARG = f8, f1, f0 // Save argument for sin and cos - mov GR_SINCOS_SAVE_B0 = b0 -};; - -{ .mfb - mov GR_SINCOS_SAVE_GP = gp - nop.f 0 - br.call.sptk b0 = __libm_sin_large // Call sin -};; - -{ .mfi - nop.m 0 - fma.s1 FR_SINCOS_RES_SIN = f8, f1, f0 // Save sin result - nop.i 0 -};; - -{ .mfb - nop.m 0 - fma.s1 f8 = FR_SINCOS_ARG, f1, f0 // Arg for cos - br.call.sptk b0 = __libm_cos_large // Call cos -};; - -{ .mfi - mov gp = GR_SINCOS_SAVE_GP - fma.s1 f9 = FR_SINCOS_RES_SIN, f1, f0 // Out sin result - mov b0 = GR_SINCOS_SAVE_B0 -};; - -{ .mib - nop.m 0 - mov ar.pfs = GR_SINCOS_SAVE_PFS - br.ret.sptk b0 // sincos_large exit -};; - -GLOBAL_LIBM_END(__libm_sincos_large) - - - - -GLOBAL_LIBM_ENTRY(__libm_sin_large) - -{ .mlx -alloc GR_Table_Base = ar.pfs,0,12,2,0 - movl GR_Sin_or_Cos = 0x0 ;; -} - -{ .mmi - nop.m 999 - addl GR_Table_Base = @ltoff(FSINCOS_CONSTANTS#), gp - nop.i 999 -} -;; - -{ .mmi - ld8 GR_Table_Base = [GR_Table_Base] - nop.m 999 - nop.i 999 -} -;; - - -{ .mib - nop.m 999 - nop.i 999 - br.cond.sptk SINCOS_CONTINUE ;; -} - -GLOBAL_LIBM_END(__libm_sin_large) - -GLOBAL_LIBM_ENTRY(__libm_cos_large) - -{ .mlx -alloc GR_Table_Base= ar.pfs,0,12,2,0 - movl GR_Sin_or_Cos = 0x1 ;; -} - -{ .mmi - nop.m 999 - addl GR_Table_Base = @ltoff(FSINCOS_CONSTANTS#), gp - nop.i 999 -} -;; - -{ .mmi - ld8 GR_Table_Base = [GR_Table_Base] - nop.m 999 - nop.i 999 -} -;; - -// -// Load Table Address -// -SINCOS_CONTINUE: - -{ .mmi - add GR_Table_Base1 = 96, GR_Table_Base - ldfs FR_Two_to_24 = [GR_Table_Base], 4 - nop.i 999 -} -;; - -{ .mmi - nop.m 999 -// -// Load 2**24, load 2**63. -// - ldfs FR_Neg_Two_to_24 = [GR_Table_Base], 12 - mov r41 = ar.pfs ;; -} - -{ .mfi - ldfs FR_Two_to_63 = [GR_Table_Base1], 4 -// -// Check for unnormals - unsupported operands. We do not want -// to generate denormal exception -// Check for NatVals, QNaNs, SNaNs, +/-Infs -// Check for EM unsupporteds -// Check for Zero -// - fclass.m.unc p6, p8 = FR_Input_X, 0x1E3 - mov r40 = gp ;; -} - -{ .mfi - nop.m 999 - fclass.nm.unc p8, p0 = FR_Input_X, 0x1FF -// GR_Sin_or_Cos denotes - mov r39 = b0 -} - -{ .mfb - ldfs FR_Neg_Two_to_63 = [GR_Table_Base1], 12 - fclass.m.unc p10, p0 = FR_Input_X, 0x007 -(p6) br.cond.spnt SINCOS_SPECIAL ;; -} - -{ .mib - nop.m 999 - nop.i 999 -(p8) br.cond.spnt SINCOS_SPECIAL ;; -} - -{ .mib - nop.m 999 - nop.i 999 -// -// Branch if +/- NaN, Inf. -// Load -2**24, load -2**63. -// -(p10) br.cond.spnt SINCOS_ZERO ;; -} - -{ .mmb - ldfe FR_Inv_pi_by_2 = [GR_Table_Base], 16 - ldfe FR_Inv_P_0 = [GR_Table_Base1], 16 - nop.b 999 ;; -} - -{ .mmb - nop.m 999 - ldfe FR_d_1 = [GR_Table_Base1], 16 - nop.b 999 ;; -} -// -// Raise possible denormal operand flag with useful fcmp -// Is x <= -2**63 -// Load Inv_P_0 for pre-reduction -// Load Inv_pi_by_2 -// - -{ .mmb - ldfe FR_P_0 = [GR_Table_Base], 16 - ldfe FR_d_2 = [GR_Table_Base1], 16 - nop.b 999 ;; -} -// -// Load P_0 -// Load d_1 -// Is x >= 2**63 -// Is x <= -2**24? -// - -{ .mmi - ldfe FR_P_1 = [GR_Table_Base], 16 ;; -// -// Load P_1 -// Load d_2 -// Is x >= 2**24? -// - ldfe FR_P_2 = [GR_Table_Base], 16 - nop.i 999 ;; -} - -{ .mmf - nop.m 999 - ldfe FR_P_3 = [GR_Table_Base], 16 - fcmp.le.unc.s1 p7, p8 = FR_Input_X, FR_Neg_Two_to_24 -} - -{ .mfi - nop.m 999 -// -// Branch if +/- zero. -// Decide about the paths to take: -// If -2**24 < FR_Input_X < 2**24 - CASE 1 OR 2 -// OTHERWISE - CASE 3 OR 4 -// - fcmp.le.unc.s1 p10, p11 = FR_Input_X, FR_Neg_Two_to_63 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p8) fcmp.ge.s1 p7, p0 = FR_Input_X, FR_Two_to_24 - nop.i 999 -} - -{ .mfi - ldfe FR_Pi_by_4 = [GR_Table_Base1], 16 -(p11) fcmp.ge.s1 p10, p0 = FR_Input_X, FR_Two_to_63 - nop.i 999 ;; -} - -{ .mmi - ldfe FR_Neg_Pi_by_4 = [GR_Table_Base1], 16 ;; - ldfs FR_Two_to_M3 = [GR_Table_Base1], 4 - nop.i 999 ;; -} - -{ .mib - ldfs FR_Neg_Two_to_M3 = [GR_Table_Base1], 12 - nop.i 999 -// -// Load P_2 -// Load P_3 -// Load pi_by_4 -// Load neg_pi_by_4 -// Load 2**(-3) -// Load -2**(-3). -// -(p10) br.cond.spnt SINCOS_ARG_TOO_LARGE ;; -} - -{ .mib - nop.m 999 - nop.i 999 -// -// Branch out if x >= 2**63. Use Payne-Hanek Reduction -// -(p7) br.cond.spnt SINCOS_LARGER_ARG ;; -} - -{ .mfi - nop.m 999 -// -// Branch if Arg <= -2**24 or Arg >= 2**24 and use pre-reduction. -// - fma.s1 FR_N_float = FR_Input_X, FR_Inv_pi_by_2, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 - fcmp.lt.unc.s1 p6, p7 = FR_Input_X, FR_Pi_by_4 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Select the case when |Arg| < pi/4 -// Else Select the case when |Arg| >= pi/4 -// - fcvt.fx.s1 FR_N_fix = FR_N_float - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N = Arg * 2/pi -// Check if Arg < pi/4 -// -(p6) fcmp.gt.s1 p6, p7 = FR_Input_X, FR_Neg_Pi_by_4 - nop.i 999 ;; -} -// -// Case 2: Convert integer N_fix back to normalized floating-point value. -// Case 1: p8 is only affected when p6 is set -// - -{ .mfi -(p7) ldfs FR_Two_to_M33 = [GR_Table_Base1], 4 -// -// Grab the integer part of N and call it N_fix -// -(p6) fmerge.se FR_r = FR_Input_X, FR_Input_X -// If |x| < pi/4, r = x and c = 0 -// lf |x| < pi/4, is x < 2**(-3). -// r = Arg -// c = 0 -(p6) mov GR_N_Inc = GR_Sin_or_Cos ;; -} - -{ .mmf - nop.m 999 -(p7) ldfs FR_Neg_Two_to_M33 = [GR_Table_Base1], 4 -(p6) fmerge.se FR_c = f0, f0 -} - -{ .mfi - nop.m 999 -(p6) fcmp.lt.unc.s1 p8, p9 = FR_Input_X, FR_Two_to_M3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// lf |x| < pi/4, is -2**(-3)< x < 2**(-3) - set p8. -// If |x| >= pi/4, -// Create the right N for |x| < pi/4 and otherwise -// Case 2: Place integer part of N in GP register -// -(p7) fcvt.xf FR_N_float = FR_N_fix - nop.i 999 ;; -} - -{ .mmf - nop.m 999 -(p7) getf.sig GR_N_Inc = FR_N_fix -(p8) fcmp.gt.s1 p8, p0 = FR_Input_X, FR_Neg_Two_to_M3 ;; -} - -{ .mib - nop.m 999 - nop.i 999 -// -// Load 2**(-33), -2**(-33) -// -(p8) br.cond.spnt SINCOS_SMALL_R ;; -} - -{ .mib - nop.m 999 - nop.i 999 -(p6) br.cond.sptk SINCOS_NORMAL_R ;; -} -// -// if |x| < pi/4, branch based on |x| < 2**(-3) or otherwise. -// -// -// In this branch, |x| >= pi/4. -// - -{ .mfi - ldfs FR_Neg_Two_to_M67 = [GR_Table_Base1], 8 -// -// Load -2**(-67) -// - fnma.s1 FR_s = FR_N_float, FR_P_1, FR_Input_X -// -// w = N * P_2 -// s = -N * P_1 + Arg -// - add GR_N_Inc = GR_N_Inc, GR_Sin_or_Cos -} - -{ .mfi - nop.m 999 - fma.s1 FR_w = FR_N_float, FR_P_2, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Adjust N_fix by N_inc to determine whether sine or -// cosine is being calculated -// - fcmp.lt.unc.s1 p7, p6 = FR_s, FR_Two_to_M33 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p7) fcmp.gt.s1 p7, p6 = FR_s, FR_Neg_Two_to_M33 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// Remember x >= pi/4. -// Is s <= -2**(-33) or s >= 2**(-33) (p6) -// or -2**(-33) < s < 2**(-33) (p7) -(p6) fms.s1 FR_r = FR_s, f1, FR_w - nop.i 999 -} - -{ .mfi - nop.m 999 -(p7) fma.s1 FR_w = FR_N_float, FR_P_3, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p7) fma.s1 FR_U_1 = FR_N_float, FR_P_2, FR_w - nop.i 999 -} - -{ .mfi - nop.m 999 -(p6) fms.s1 FR_c = FR_s, f1, FR_r - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// For big s: r = s - w: No futher reduction is necessary -// For small s: w = N * P_3 (change sign) More reduction -// -(p6) fcmp.lt.unc.s1 p8, p9 = FR_r, FR_Two_to_M3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p8) fcmp.gt.s1 p8, p9 = FR_r, FR_Neg_Two_to_M3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p7) fms.s1 FR_r = FR_s, f1, FR_U_1 - nop.i 999 -} - -{ .mfb - nop.m 999 -// -// For big s: Is |r| < 2**(-3)? -// For big s: c = S - r -// For small s: U_1 = N * P_2 + w -// -// If p8 is set, prepare to branch to Small_R. -// If p9 is set, prepare to branch to Normal_R. -// For big s, r is complete here. -// -(p6) fms.s1 FR_c = FR_c, f1, FR_w -// -// For big s: c = c + w (w has not been negated.) -// For small s: r = S - U_1 -// -(p8) br.cond.spnt SINCOS_SMALL_R ;; -} - -{ .mib - nop.m 999 - nop.i 999 -(p9) br.cond.sptk SINCOS_NORMAL_R ;; -} - -{ .mfi -(p7) add GR_Table_Base1 = 224, GR_Table_Base1 -// -// Branch to SINCOS_SMALL_R or SINCOS_NORMAL_R -// -(p7) fms.s1 FR_U_2 = FR_N_float, FR_P_2, FR_U_1 -// -// c = S - U_1 -// r = S_1 * r -// -// -(p7) extr.u GR_i_1 = GR_N_Inc, 0, 1 -} - -{ .mmi - nop.m 999 ;; -// -// Get [i_0,i_1] - two lsb of N_fix_gr. -// Do dummy fmpy so inexact is always set. -// -(p7) cmp.eq.unc p9, p10 = 0x0, GR_i_1 -(p7) extr.u GR_i_0 = GR_N_Inc, 1, 1 ;; -} -// -// For small s: U_2 = N * P_2 - U_1 -// S_1 stored constant - grab the one stored with the -// coefficients. -// - -{ .mfi -(p7) ldfe FR_S_1 = [GR_Table_Base1], 16 -// -// Check if i_1 and i_0 != 0 -// -(p10) fma.s1 FR_poly = f0, f1, FR_Neg_Two_to_M67 -(p7) cmp.eq.unc p11, p12 = 0x0, GR_i_0 ;; -} - -{ .mfi - nop.m 999 -(p7) fms.s1 FR_s = FR_s, f1, FR_r - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// S = S - r -// U_2 = U_2 + w -// load S_1 -// -(p7) fma.s1 FR_rsq = FR_r, FR_r, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p7) fma.s1 FR_U_2 = FR_U_2, f1, FR_w - nop.i 999 -} - -{ .mfi - nop.m 999 -//(p7) fmerge.se FR_Input_X = FR_r, FR_r -(p7) fmerge.se FR_prelim = FR_r, FR_r - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -//(p10) fma.s1 FR_Input_X = f0, f1, f1 -(p10) fma.s1 FR_prelim = f0, f1, f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// FR_rsq = r * r -// Save r as the result. -// -(p7) fms.s1 FR_c = FR_s, f1, FR_U_1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if ( i_1 ==0) poly = c + S_1*r*r*r -// else Result = 1 -// -//(p12) fnma.s1 FR_Input_X = FR_Input_X, f1, f0 -(p12) fnma.s1 FR_prelim = FR_prelim, f1, f0 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p7) fma.s1 FR_r = FR_S_1, FR_r, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p7) fma.d.s1 FR_S_1 = FR_S_1, FR_S_1, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// If i_1 != 0, poly = 2**(-67) -// -(p7) fms.s1 FR_c = FR_c, f1, FR_U_2 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// c = c - U_2 -// -(p9) fma.s1 FR_poly = FR_r, FR_rsq, FR_c - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// i_0 != 0, so Result = -Result -// -(p11) fma.s1 FR_Input_X = FR_prelim, f1, FR_poly - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -(p12) fms.s1 FR_Input_X = FR_prelim, f1, FR_poly -// -// if (i_0 == 0), Result = Result + poly -// else Result = Result - poly -// - br.ret.sptk b0 ;; -} -SINCOS_LARGER_ARG: - -{ .mfi - nop.m 999 - fma.s1 FR_N_0 = FR_Input_X, FR_Inv_P_0, f0 - nop.i 999 -} -;; - -// This path for argument > 2*24 -// Adjust table_ptr1 to beginning of table. -// - -{ .mmi - nop.m 999 - addl GR_Table_Base = @ltoff(FSINCOS_CONSTANTS#), gp - nop.i 999 -} -;; - -{ .mmi - ld8 GR_Table_Base = [GR_Table_Base] - nop.m 999 - nop.i 999 -} -;; - - -// -// Point to 2*-14 -// N_0 = Arg * Inv_P_0 -// - -{ .mmi - add GR_Table_Base = 688, GR_Table_Base ;; - ldfs FR_Two_to_M14 = [GR_Table_Base], 4 - nop.i 999 ;; -} - -{ .mfi - ldfs FR_Neg_Two_to_M14 = [GR_Table_Base], 0 - nop.f 999 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Load values 2**(-14) and -2**(-14) -// - fcvt.fx.s1 FR_N_0_fix = FR_N_0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N_0_fix = integer part of N_0 -// - fcvt.xf FR_N_0 = FR_N_0_fix - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Make N_0 the integer part -// - fnma.s1 FR_ArgPrime = FR_N_0, FR_P_0, FR_Input_X - nop.i 999 -} - -{ .mfi - nop.m 999 - fma.s1 FR_w = FR_N_0, FR_d_1, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Arg' = -N_0 * P_0 + Arg -// w = N_0 * d_1 -// - fma.s1 FR_N_float = FR_ArgPrime, FR_Inv_pi_by_2, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N = A' * 2/pi -// - fcvt.fx.s1 FR_N_fix = FR_N_float - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N_fix is the integer part -// - fcvt.xf FR_N_float = FR_N_fix - nop.i 999 ;; -} - -{ .mfi - getf.sig GR_N_Inc = FR_N_fix - nop.f 999 - nop.i 999 ;; -} - -{ .mii - nop.m 999 - nop.i 999 ;; - add GR_N_Inc = GR_N_Inc, GR_Sin_or_Cos ;; -} - -{ .mfi - nop.m 999 -// -// N is the integer part of the reduced-reduced argument. -// Put the integer in a GP register -// - fnma.s1 FR_s = FR_N_float, FR_P_1, FR_ArgPrime - nop.i 999 -} - -{ .mfi - nop.m 999 - fnma.s1 FR_w = FR_N_float, FR_P_2, FR_w - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// s = -N*P_1 + Arg' -// w = -N*P_2 + w -// N_fix_gr = N_fix_gr + N_inc -// - fcmp.lt.unc.s1 p9, p8 = FR_s, FR_Two_to_M14 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p9) fcmp.gt.s1 p9, p8 = FR_s, FR_Neg_Two_to_M14 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// For |s| > 2**(-14) r = S + w (r complete) -// Else U_hi = N_0 * d_1 -// -(p9) fma.s1 FR_V_hi = FR_N_float, FR_P_2, f0 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_U_hi = FR_N_0, FR_d_1, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Either S <= -2**(-14) or S >= 2**(-14) -// or -2**(-14) < s < 2**(-14) -// -(p8) fma.s1 FR_r = FR_s, f1, FR_w - nop.i 999 -} - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_w = FR_N_float, FR_P_3, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// We need abs of both U_hi and V_hi - don't -// worry about switched sign of V_hi. -// -(p9) fms.s1 FR_A = FR_U_hi, f1, FR_V_hi - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// Big s: finish up c = (S - r) + w (c complete) -// Case 4: A = U_hi + V_hi -// Note: Worry about switched sign of V_hi, so subtract instead of add. -// -(p9) fnma.s1 FR_V_lo = FR_N_float, FR_P_2, FR_V_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p9) fms.s1 FR_U_lo = FR_N_0, FR_d_1, FR_U_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p9) fmerge.s FR_V_hiabs = f0, FR_V_hi - nop.i 999 -} - -{ .mfi - nop.m 999 -// For big s: c = S - r -// For small s do more work: U_lo = N_0 * d_1 - U_hi -// -(p9) fmerge.s FR_U_hiabs = f0, FR_U_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// For big s: Is |r| < 2**(-3) -// For big s: if p12 set, prepare to branch to Small_R. -// For big s: If p13 set, prepare to branch to Normal_R. -// -(p8) fms.s1 FR_c = FR_s, f1, FR_r - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// For small S: V_hi = N * P_2 -// w = N * P_3 -// Note the product does not include the (-) as in the writeup -// so (-) missing for V_hi and w. -// -(p8) fcmp.lt.unc.s1 p12, p13 = FR_r, FR_Two_to_M3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fcmp.gt.s1 p12, p13 = FR_r, FR_Neg_Two_to_M3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p8) fma.s1 FR_c = FR_c, f1, FR_w - nop.i 999 -} - -{ .mfb - nop.m 999 -(p9) fms.s1 FR_w = FR_N_0, FR_d_2, FR_w -(p12) br.cond.spnt SINCOS_SMALL_R ;; -} - -{ .mib - nop.m 999 - nop.i 999 -(p13) br.cond.sptk SINCOS_NORMAL_R ;; -} - -{ .mfi - nop.m 999 -// -// Big s: Vector off when |r| < 2**(-3). Recall that p8 will be true. -// The remaining stuff is for Case 4. -// Small s: V_lo = N * P_2 + U_hi (U_hi is in place of V_hi in writeup) -// Note: the (-) is still missing for V_lo. -// Small s: w = w + N_0 * d_2 -// Note: the (-) is now incorporated in w. -// -(p9) fcmp.ge.unc.s1 p10, p11 = FR_U_hiabs, FR_V_hiabs - extr.u GR_i_1 = GR_N_Inc, 0, 1 ;; -} - -{ .mfi - nop.m 999 -// -// C_hi = S + A -// -(p9) fma.s1 FR_t = FR_U_lo, f1, FR_V_lo - extr.u GR_i_0 = GR_N_Inc, 1, 1 ;; -} - -{ .mfi - nop.m 999 -// -// t = U_lo + V_lo -// -// -(p10) fms.s1 FR_a = FR_U_hi, f1, FR_A - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p11) fma.s1 FR_a = FR_V_hi, f1, FR_A - nop.i 999 -} -;; - -{ .mmi - nop.m 999 - addl GR_Table_Base = @ltoff(FSINCOS_CONSTANTS#), gp - nop.i 999 -} -;; - -{ .mmi - ld8 GR_Table_Base = [GR_Table_Base] - nop.m 999 - nop.i 999 -} -;; - - -{ .mfi - add GR_Table_Base = 528, GR_Table_Base -// -// Is U_hiabs >= V_hiabs? -// -(p9) fma.s1 FR_C_hi = FR_s, f1, FR_A - nop.i 999 ;; -} - -{ .mmi - ldfe FR_C_1 = [GR_Table_Base], 16 ;; - ldfe FR_C_2 = [GR_Table_Base], 64 - nop.i 999 ;; -} - -{ .mmf - nop.m 999 -// -// c = c + C_lo finished. -// Load C_2 -// - ldfe FR_S_1 = [GR_Table_Base], 16 -// -// C_lo = S - C_hi -// - fma.s1 FR_t = FR_t, f1, FR_w ;; -} -// -// r and c have been computed. -// Make sure ftz mode is set - should be automatic when using wre -// |r| < 2**(-3) -// Get [i_0,i_1] - two lsb of N_fix. -// Load S_1 -// - -{ .mfi - ldfe FR_S_2 = [GR_Table_Base], 64 -// -// t = t + w -// -(p10) fms.s1 FR_a = FR_a, f1, FR_V_hi - cmp.eq.unc p9, p10 = 0x0, GR_i_0 -} - -{ .mfi - nop.m 999 -// -// For larger u than v: a = U_hi - A -// Else a = V_hi - A (do an add to account for missing (-) on V_hi -// - fms.s1 FR_C_lo = FR_s, f1, FR_C_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p11) fms.s1 FR_a = FR_U_hi, f1, FR_a - cmp.eq.unc p11, p12 = 0x0, GR_i_1 -} - -{ .mfi - nop.m 999 -// -// If u > v: a = (U_hi - A) + V_hi -// Else a = (V_hi - A) + U_hi -// In each case account for negative missing from V_hi. -// - fma.s1 FR_C_lo = FR_C_lo, f1, FR_A - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// C_lo = (S - C_hi) + A -// - fma.s1 FR_t = FR_t, f1, FR_a - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// t = t + a -// - fma.s1 FR_C_lo = FR_C_lo, f1, FR_t - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// C_lo = C_lo + t -// Adjust Table_Base to beginning of table -// - fma.s1 FR_r = FR_C_hi, f1, FR_C_lo - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Load S_2 -// - fma.s1 FR_rsq = FR_r, FR_r, f0 - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// Table_Base points to C_1 -// r = C_hi + C_lo -// - fms.s1 FR_c = FR_C_hi, f1, FR_r - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if i_1 ==0: poly = S_2 * FR_rsq + S_1 -// else poly = C_2 * FR_rsq + C_1 -// -//(p11) fma.s1 FR_Input_X = f0, f1, FR_r -(p11) fma.s1 FR_prelim = f0, f1, FR_r - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -//(p12) fma.s1 FR_Input_X = f0, f1, f1 -(p12) fma.s1 FR_prelim = f0, f1, f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Compute r_cube = FR_rsq * r -// -(p11) fma.s1 FR_poly = FR_rsq, FR_S_2, FR_S_1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fma.s1 FR_poly = FR_rsq, FR_C_2, FR_C_1 - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// Compute FR_rsq = r * r -// Is i_1 == 0 ? -// - fma.s1 FR_r_cubed = FR_rsq, FR_r, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// c = C_hi - r -// Load C_1 -// - fma.s1 FR_c = FR_c, f1, FR_C_lo - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// if i_1 ==0: poly = r_cube * poly + c -// else poly = FR_rsq * poly -// -//(p10) fms.s1 FR_Input_X = f0, f1, FR_Input_X -(p10) fms.s1 FR_prelim = f0, f1, FR_prelim - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if i_1 ==0: Result = r -// else Result = 1.0 -// -(p11) fma.s1 FR_poly = FR_r_cubed, FR_poly, FR_c - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fma.s1 FR_poly = FR_rsq, FR_poly, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if i_0 !=0: Result = -Result -// -(p9) fma.s1 FR_Input_X = FR_prelim, f1, FR_poly - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -(p10) fms.s1 FR_Input_X = FR_prelim, f1, FR_poly -// -// if i_0 == 0: Result = Result + poly -// else Result = Result - poly -// - br.ret.sptk b0 ;; -} -SINCOS_SMALL_R: - -{ .mii - nop.m 999 - extr.u GR_i_1 = GR_N_Inc, 0, 1 ;; -// -// -// Compare both i_1 and i_0 with 0. -// if i_1 == 0, set p9. -// if i_0 == 0, set p11. -// - cmp.eq.unc p9, p10 = 0x0, GR_i_1 ;; -} - -{ .mfi - nop.m 999 - fma.s1 FR_rsq = FR_r, FR_r, f0 - extr.u GR_i_0 = GR_N_Inc, 1, 1 ;; -} - -{ .mfi - nop.m 999 -// -// Z = Z * FR_rsq -// -(p10) fnma.s1 FR_c = FR_c, FR_r, f0 - cmp.eq.unc p11, p12 = 0x0, GR_i_0 -} -;; - -// ****************************************************************** -// ****************************************************************** -// ****************************************************************** -// r and c have been computed. -// We know whether this is the sine or cosine routine. -// Make sure ftz mode is set - should be automatic when using wre -// |r| < 2**(-3) -// -// Set table_ptr1 to beginning of constant table. -// Get [i_0,i_1] - two lsb of N_fix_gr. -// - -{ .mmi - nop.m 999 - addl GR_Table_Base = @ltoff(FSINCOS_CONSTANTS#), gp - nop.i 999 -} -;; - -{ .mmi - ld8 GR_Table_Base = [GR_Table_Base] - nop.m 999 - nop.i 999 -} -;; - - -// -// Set table_ptr1 to point to S_5. -// Set table_ptr1 to point to C_5. -// Compute FR_rsq = r * r -// - -{ .mfi -(p9) add GR_Table_Base = 672, GR_Table_Base -(p10) fmerge.s FR_r = f1, f1 -(p10) add GR_Table_Base = 592, GR_Table_Base ;; -} -// -// Set table_ptr1 to point to S_5. -// Set table_ptr1 to point to C_5. -// - -{ .mmi -(p9) ldfe FR_S_5 = [GR_Table_Base], -16 ;; -// -// if (i_1 == 0) load S_5 -// if (i_1 != 0) load C_5 -// -(p9) ldfe FR_S_4 = [GR_Table_Base], -16 - nop.i 999 ;; -} - -{ .mmf -(p10) ldfe FR_C_5 = [GR_Table_Base], -16 -// -// Z = FR_rsq * FR_rsq -// -(p9) ldfe FR_S_3 = [GR_Table_Base], -16 -// -// Compute FR_rsq = r * r -// if (i_1 == 0) load S_4 -// if (i_1 != 0) load C_4 -// - fma.s1 FR_Z = FR_rsq, FR_rsq, f0 ;; -} -// -// if (i_1 == 0) load S_3 -// if (i_1 != 0) load C_3 -// - -{ .mmi -(p9) ldfe FR_S_2 = [GR_Table_Base], -16 ;; -// -// if (i_1 == 0) load S_2 -// if (i_1 != 0) load C_2 -// -(p9) ldfe FR_S_1 = [GR_Table_Base], -16 - nop.i 999 -} - -{ .mmi -(p10) ldfe FR_C_4 = [GR_Table_Base], -16 ;; -(p10) ldfe FR_C_3 = [GR_Table_Base], -16 - nop.i 999 ;; -} - -{ .mmi -(p10) ldfe FR_C_2 = [GR_Table_Base], -16 ;; -(p10) ldfe FR_C_1 = [GR_Table_Base], -16 - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// if (i_1 != 0): -// poly_lo = FR_rsq * C_5 + C_4 -// poly_hi = FR_rsq * C_2 + C_1 -// -(p9) fma.s1 FR_Z = FR_Z, FR_r, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_1 == 0) load S_1 -// if (i_1 != 0) load C_1 -// -(p9) fma.s1 FR_poly_lo = FR_rsq, FR_S_5, FR_S_4 - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// c = -c * r -// dummy fmpy's to flag inexact. -// -(p9) fma.d.s1 FR_S_4 = FR_S_4, FR_S_4, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// poly_lo = FR_rsq * poly_lo + C_3 -// poly_hi = FR_rsq * poly_hi -// - fma.s1 FR_Z = FR_Z, FR_rsq, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_hi = FR_rsq, FR_S_2, FR_S_1 - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// if (i_1 == 0): -// poly_lo = FR_rsq * S_5 + S_4 -// poly_hi = FR_rsq * S_2 + S_1 -// -(p10) fma.s1 FR_poly_lo = FR_rsq, FR_C_5, FR_C_4 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_1 == 0): -// Z = Z * r for only one of the small r cases - not there -// in original implementation notes. -// -(p9) fma.s1 FR_poly_lo = FR_rsq, FR_poly_lo, FR_S_3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly_hi = FR_rsq, FR_C_2, FR_C_1 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p10) fma.d.s1 FR_C_1 = FR_C_1, FR_C_1, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_hi = FR_poly_hi, FR_rsq, f0 - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// poly_lo = FR_rsq * poly_lo + S_3 -// poly_hi = FR_rsq * poly_hi -// -(p10) fma.s1 FR_poly_lo = FR_rsq, FR_poly_lo, FR_C_3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly_hi = FR_poly_hi, FR_rsq, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_1 == 0): dummy fmpy's to flag inexact -// r = 1 -// -(p9) fma.s1 FR_poly_hi = FR_r, FR_poly_hi, f0 - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// poly_hi = r * poly_hi -// - fma.s1 FR_poly = FR_Z, FR_poly_lo, FR_c - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fms.s1 FR_r = f0, f1, FR_r - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// poly_hi = Z * poly_lo + c -// if i_0 == 1: r = -r -// - fma.s1 FR_poly = FR_poly, f1, FR_poly_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fms.s1 FR_Input_X = FR_r, f1, FR_poly - nop.i 999 -} - -{ .mfb - nop.m 999 -// -// poly = poly + poly_hi -// -(p11) fma.s1 FR_Input_X = FR_r, f1, FR_poly -// -// if (i_0 == 0) Result = r + poly -// if (i_0 != 0) Result = r - poly -// - br.ret.sptk b0 ;; -} -SINCOS_NORMAL_R: - -{ .mii - nop.m 999 - extr.u GR_i_1 = GR_N_Inc, 0, 1 ;; -// -// Set table_ptr1 and table_ptr2 to base address of -// constant table. - cmp.eq.unc p9, p10 = 0x0, GR_i_1 ;; -} - -{ .mfi - nop.m 999 - fma.s1 FR_rsq = FR_r, FR_r, f0 - extr.u GR_i_0 = GR_N_Inc, 1, 1 ;; -} - -{ .mfi - nop.m 999 - frcpa.s1 FR_r_hi, p6 = f1, FR_r - cmp.eq.unc p11, p12 = 0x0, GR_i_0 -} -;; - -// ****************************************************************** -// ****************************************************************** -// ****************************************************************** -// -// r and c have been computed. -// We known whether this is the sine or cosine routine. -// Make sure ftz mode is set - should be automatic when using wre -// Get [i_0,i_1] - two lsb of N_fix_gr alone. -// - -{ .mmi - nop.m 999 - addl GR_Table_Base = @ltoff(FSINCOS_CONSTANTS#), gp - nop.i 999 -} -;; - -{ .mmi - ld8 GR_Table_Base = [GR_Table_Base] - nop.m 999 - nop.i 999 -} -;; - - -{ .mfi -(p10) add GR_Table_Base = 384, GR_Table_Base -//(p12) fms.s1 FR_Input_X = f0, f1, f1 -(p12) fms.s1 FR_prelim = f0, f1, f1 -(p9) add GR_Table_Base = 224, GR_Table_Base ;; -} - -{ .mmf - nop.m 999 -(p10) ldfe FR_QQ_8 = [GR_Table_Base], 16 -// -// if (i_1==0) poly = poly * FR_rsq + PP_1_lo -// else poly = FR_rsq * poly -// -//(p11) fma.s1 FR_Input_X = f0, f1, f1 ;; -(p11) fma.s1 FR_prelim = f0, f1, f1 ;; -} - -{ .mmf -(p10) ldfe FR_QQ_7 = [GR_Table_Base], 16 -// -// Adjust table pointers based on i_0 -// Compute rsq = r * r -// -(p9) ldfe FR_PP_8 = [GR_Table_Base], 16 - fma.s1 FR_r_cubed = FR_r, FR_rsq, f0 ;; -} - -{ .mmf -(p9) ldfe FR_PP_7 = [GR_Table_Base], 16 -(p10) ldfe FR_QQ_6 = [GR_Table_Base], 16 -// -// Load PP_8 and QQ_8; PP_7 and QQ_7 -// - frcpa.s1 FR_r_hi, p6 = f1, FR_r_hi ;; -} -// -// if (i_1==0) poly = PP_7 + FR_rsq * PP_8. -// else poly = QQ_7 + FR_rsq * QQ_8. -// - -{ .mmb -(p9) ldfe FR_PP_6 = [GR_Table_Base], 16 -(p10) ldfe FR_QQ_5 = [GR_Table_Base], 16 - nop.b 999 ;; -} - -{ .mmb -(p9) ldfe FR_PP_5 = [GR_Table_Base], 16 -(p10) ldfe FR_S_1 = [GR_Table_Base], 16 - nop.b 999 ;; -} - -{ .mmb -(p10) ldfe FR_QQ_1 = [GR_Table_Base], 16 -(p9) ldfe FR_C_1 = [GR_Table_Base], 16 - nop.b 999 ;; -} - -{ .mmi -(p10) ldfe FR_QQ_4 = [GR_Table_Base], 16 ;; -(p9) ldfe FR_PP_1 = [GR_Table_Base], 16 - nop.i 999 ;; -} - -{ .mmf -(p10) ldfe FR_QQ_3 = [GR_Table_Base], 16 -// -// if (i_1=0) corr = corr + c*c -// else corr = corr * c -// -(p9) ldfe FR_PP_4 = [GR_Table_Base], 16 -(p10) fma.s1 FR_poly = FR_rsq, FR_QQ_8, FR_QQ_7 ;; -} -// -// if (i_1=0) poly = rsq * poly + PP_5 -// else poly = rsq * poly + QQ_5 -// Load PP_4 or QQ_4 -// - -{ .mmf -(p9) ldfe FR_PP_3 = [GR_Table_Base], 16 -(p10) ldfe FR_QQ_2 = [GR_Table_Base], 16 -// -// r_hi = frcpa(frcpa(r)). -// r_cube = r * FR_rsq. -// -(p9) fma.s1 FR_poly = FR_rsq, FR_PP_8, FR_PP_7 ;; -} -// -// Do dummy multiplies so inexact is always set. -// - -{ .mfi -(p9) ldfe FR_PP_2 = [GR_Table_Base], 16 -// -// r_lo = r - r_hi -// -(p9) fma.s1 FR_U_lo = FR_r_hi, FR_r_hi, f0 - nop.i 999 ;; -} - -{ .mmf - nop.m 999 -(p9) ldfe FR_PP_1_lo = [GR_Table_Base], 16 -(p10) fma.s1 FR_corr = FR_S_1, FR_r_cubed, FR_r -} - -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_6 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_1=0) U_lo = r_hi * r_hi -// else U_lo = r_hi + r -// -(p9) fma.s1 FR_corr = FR_C_1, FR_rsq, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_1=0) corr = C_1 * rsq -// else corr = S_1 * r_cubed + r -// -(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_6 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p10) fma.s1 FR_U_lo = FR_r_hi, f1, FR_r - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_1=0) U_hi = r_hi + U_hi -// else U_hi = QQ_1 * U_hi + 1 -// -(p9) fma.s1 FR_U_lo = FR_r, FR_r_hi, FR_U_lo - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// U_hi = r_hi * r_hi -// - fms.s1 FR_r_lo = FR_r, f1, FR_r_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Load PP_1, PP_6, PP_5, and C_1 -// Load QQ_1, QQ_6, QQ_5, and S_1 -// - fma.s1 FR_U_hi = FR_r_hi, FR_r_hi, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_5 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p10) fnma.s1 FR_corr = FR_corr, FR_c, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_1=0) U_lo = r * r_hi + U_lo -// else U_lo = r_lo * U_lo -// -(p9) fma.s1 FR_corr = FR_corr, FR_c, FR_c - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_5 - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// if (i_1 =0) U_hi = r + U_hi -// if (i_1 =0) U_lo = r_lo * U_lo -// -// -(p9) fma.d.s1 FR_PP_5 = FR_PP_5, FR_PP_4, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_U_lo = FR_r, FR_r, FR_U_lo - nop.i 999 -} - -{ .mfi - nop.m 999 -(p10) fma.s1 FR_U_lo = FR_r_lo, FR_U_lo, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_1=0) poly = poly * rsq + PP_6 -// else poly = poly * rsq + QQ_6 -// -(p9) fma.s1 FR_U_hi = FR_r_hi, FR_U_hi, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_4 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p10) fma.s1 FR_U_hi = FR_QQ_1, FR_U_hi, f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p10) fma.d.s1 FR_QQ_5 = FR_QQ_5, FR_QQ_5, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_1!=0) U_hi = PP_1 * U_hi -// if (i_1!=0) U_lo = r * r + U_lo -// Load PP_3 or QQ_3 -// -(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_4 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_U_lo = FR_r_lo, FR_U_lo, f0 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p10) fma.s1 FR_U_lo = FR_QQ_1,FR_U_lo, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_U_hi = FR_PP_1, FR_U_hi, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Load PP_2, QQ_2 -// -(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_1==0) poly = FR_rsq * poly + PP_3 -// else poly = FR_rsq * poly + QQ_3 -// Load PP_1_lo -// -(p9) fma.s1 FR_U_lo = FR_PP_1, FR_U_lo, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_1 =0) poly = poly * rsq + pp_r4 -// else poly = poly * rsq + qq_r4 -// -(p9) fma.s1 FR_U_hi = FR_r, f1, FR_U_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_2 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_1==0) U_lo = PP_1_hi * U_lo -// else U_lo = QQ_1 * U_lo -// -(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_2 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_0==0) Result = 1 -// else Result = -1 -// - fma.s1 FR_V = FR_U_lo, f1, FR_corr - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_1==0) poly = FR_rsq * poly + PP_2 -// else poly = FR_rsq * poly + QQ_2 -// -(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_1_lo - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// V = U_lo + corr -// -(p9) fma.s1 FR_poly = FR_r_cubed, FR_poly, f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if (i_1==0) poly = r_cube * poly -// else poly = FR_rsq * poly -// - fma.s1 FR_V = FR_poly, f1, FR_V - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -//(p12) fms.s1 FR_Input_X = FR_Input_X, FR_U_hi, FR_V -(p12) fms.s1 FR_Input_X = FR_prelim, FR_U_hi, FR_V - nop.i 999 -} - -{ .mfb - nop.m 999 -// -// V = V + poly -// -//(p11) fma.s1 FR_Input_X = FR_Input_X, FR_U_hi, FR_V -(p11) fma.s1 FR_Input_X = FR_prelim, FR_U_hi, FR_V -// -// if (i_0==0) Result = Result * U_hi + V -// else Result = Result * U_hi - V -// - br.ret.sptk b0 ;; -} - -// -// If cosine, FR_Input_X = 1 -// If sine, FR_Input_X = +/-Zero (Input FR_Input_X) -// Results are exact, no exceptions -// -SINCOS_ZERO: - -{ .mmb - cmp.eq.unc p6, p7 = 0x1, GR_Sin_or_Cos - nop.m 999 - nop.b 999 ;; -} - -{ .mfi - nop.m 999 -(p7) fmerge.s FR_Input_X = FR_Input_X, FR_Input_X - nop.i 999 -} - -{ .mfb - nop.m 999 -(p6) fmerge.s FR_Input_X = f1, f1 - br.ret.sptk b0 ;; -} - -SINCOS_SPECIAL: - -// -// Path for Arg = +/- QNaN, SNaN, Inf -// Invalid can be raised. SNaNs -// become QNaNs -// - -{ .mfb - nop.m 999 - fmpy.s1 FR_Input_X = FR_Input_X, f0 - br.ret.sptk b0 ;; -} -GLOBAL_LIBM_END(__libm_cos_large) - - -// ******************************************************************* -// ******************************************************************* -// ******************************************************************* -// -// Special Code to handle very large argument case. -// Call int __libm_pi_by_2_reduce(x,r,c) for |arguments| >= 2**63 -// The interface is custom: -// On input: -// (Arg or x) is in f8 -// On output: -// r is in f8 -// c is in f9 -// N is in r8 -// Be sure to allocate at least 2 GP registers as output registers for -// __libm_pi_by_2_reduce. This routine uses r49-50. These are used as -// scratch registers within the __libm_pi_by_2_reduce routine (for speed). -// -// We know also that __libm_pi_by_2_reduce preserves f10-15, f71-127. We -// use this to eliminate save/restore of key fp registers in this calling -// function. -// -// ******************************************************************* -// ******************************************************************* -// ******************************************************************* - -LOCAL_LIBM_ENTRY(__libm_callout_2) -SINCOS_ARG_TOO_LARGE: - -.prologue -// Readjust Table ptr -{ .mfi - adds GR_Table_Base1 = -16, GR_Table_Base1 - nop.f 999 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -};; - -{ .mmi - ldfs FR_Two_to_M3 = [GR_Table_Base1],4 - mov GR_SAVE_GP=gp // Save gp -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -// -// Call argument reduction with x in f8 -// Returns with N in r8, r in f8, c in f9 -// Assumes f71-127 are preserved across the call -// -{ .mib - ldfs FR_Neg_Two_to_M3 = [GR_Table_Base1],0 - nop.i 0 - br.call.sptk b0=__libm_pi_by_2_reduce# -};; - -{ .mfi - add GR_N_Inc = GR_Sin_or_Cos,r8 - fcmp.lt.unc.s1 p6, p0 = FR_r, FR_Two_to_M3 - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mfi - mov gp = GR_SAVE_GP // Restore gp -(p6) fcmp.gt.unc.s1 p6, p0 = FR_r, FR_Neg_Two_to_M3 - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs -};; - -{ .mbb - nop.m 999 -(p6) br.cond.spnt SINCOS_SMALL_R // Branch if |r| < 1/4 - br.cond.sptk SINCOS_NORMAL_R ;; // Branch if 1/4 <= |r| < pi/4 -} - -LOCAL_LIBM_END(__libm_callout_2) - -.type __libm_pi_by_2_reduce#,@function -.global __libm_pi_by_2_reduce# diff --git a/sysdeps/ia64/fpu/libm_sincosf.S b/sysdeps/ia64/fpu/libm_sincosf.S deleted file mode 100644 index 26e66fad6e..0000000000 --- a/sysdeps/ia64/fpu/libm_sincosf.S +++ /dev/null @@ -1,744 +0,0 @@ -.file "libm_sincosf.s" - - -// Copyright (c) 2002 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2002 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/01/02 Initial version -// 02/18/02 Large arguments processing routine is excluded. -// External interface entry points are added -// 02/26/02 Added temporary return of results in r8, r9 -// 03/13/02 Corrected restore of predicate registers -// 03/19/02 Added stack unwind around call to __libm_cisf_large -// 09/05/02 Work range is widened by reduction strengthen (2 parts of Pi/16) -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 02/11/04 cisf is moved to the separate file. -// 03/31/05 Reformatted delimiters between data tables - -// API -//============================================================== -// 1) void sincosf(float, float*s, float*c) -// 2) __libm_sincosf - internal LIBM function, that accepts -// argument in f8 and returns cosine through f8, sine through f9 - -// -// Overview of operation -//============================================================== -// -// Step 1 -// ====== -// Reduce x to region -1/2*pi/2^k ===== 0 ===== +1/2*pi/2^k where k=4 -// divide x by pi/2^k. -// Multiply by 2^k/pi. -// nfloat = Round result to integer (round-to-nearest) -// -// r = x - nfloat * pi/2^k -// Do this as (x - nfloat * HIGH(pi/2^k)) - nfloat * LOW(pi/2^k) for increased accuracy. -// pi/2^k is stored as two numbers that when added make pi/2^k. -// pi/2^k = HIGH(pi/2^k) + LOW(pi/2^k) -// HIGH part is rounded to zero, LOW - to nearest -// -// x = (nfloat * pi/2^k) + r -// r is small enough that we can use a polynomial approximation -// and is referred to as the reduced argument. -// -// Step 3 -// ====== -// Take the unreduced part and remove the multiples of 2pi. -// So nfloat = nfloat (with lower k+1 bits cleared) + lower k+1 bits -// -// nfloat (with lower k+1 bits cleared) is a multiple of 2^(k+1) -// N * 2^(k+1) -// nfloat * pi/2^k = N * 2^(k+1) * pi/2^k + (lower k+1 bits) * pi/2^k -// nfloat * pi/2^k = N * 2 * pi + (lower k+1 bits) * pi/2^k -// nfloat * pi/2^k = N2pi + M * pi/2^k -// -// -// Sin(x) = Sin((nfloat * pi/2^k) + r) -// = Sin(nfloat * pi/2^k) * Cos(r) + Cos(nfloat * pi/2^k) * Sin(r) -// -// Sin(nfloat * pi/2^k) = Sin(N2pi + Mpi/2^k) -// = Sin(N2pi)Cos(Mpi/2^k) + Cos(N2pi)Sin(Mpi/2^k) -// = Sin(Mpi/2^k) -// -// Cos(nfloat * pi/2^k) = Cos(N2pi + Mpi/2^k) -// = Cos(N2pi)Cos(Mpi/2^k) + Sin(N2pi)Sin(Mpi/2^k) -// = Cos(Mpi/2^k) -// -// Sin(x) = Sin(Mpi/2^k) Cos(r) + Cos(Mpi/2^k) Sin(r) -// -// -// Step 4 -// ====== -// 0 <= M < 2^(k+1) -// There are 2^(k+1) Sin entries in a table. -// There are 2^(k+1) Cos entries in a table. -// -// Get Sin(Mpi/2^k) and Cos(Mpi/2^k) by table lookup. -// -// -// Step 5 -// ====== -// Calculate Cos(r) and Sin(r) by polynomial approximation. -// -// Cos(r) = 1 + r^2 q1 + r^4 q2 = Series for Cos -// Sin(r) = r + r^3 p1 + r^5 p2 = Series for Sin -// -// and the coefficients q1, q2 and p1, p2 are stored in a table -// -// -// Calculate -// Sin(x) = Sin(Mpi/2^k) Cos(r) + Cos(Mpi/2^k) Sin(r) -// -// as follows -// -// S[m] = Sin(Mpi/2^k) and C[m] = Cos(Mpi/2^k) -// rsq = r*r -// -// -// P = p1 + r^2p2 -// Q = q1 + r^2q2 -// -// rcub = r * rsq -// Sin(r) = r + rcub * P -// = r + r^3p1 + r^5p2 = Sin(r) -// -// P = r + rcub * P -// -// Answer = S[m] Cos(r) + C[m] P -// -// Cos(r) = 1 + rsq Q -// Cos(r) = 1 + r^2 Q -// Cos(r) = 1 + r^2 (q1 + r^2q2) -// Cos(r) = 1 + r^2q1 + r^4q2 -// -// S[m] Cos(r) = S[m](1 + rsq Q) -// S[m] Cos(r) = S[m] + S[m] rsq Q -// S[m] Cos(r) = S[m] + s_rsq Q -// Q = S[m] + s_rsq Q -// -// Then, -// -// Answer = Q + C[m] P - - -// Registers used -//============================================================== -// general input registers: -// r14 -> r19 -// r32 -> r49 - -// predicate registers used: -// p6 -> p14 - -// floating-point registers used -// f9 -> f15 -// f32 -> f100 - -// Assembly macros -//============================================================== - -cisf_Arg = f8 - -cisf_Sin_res = f9 -cisf_Cos_res = f8 - - -cisf_NORM_f8 = f10 -cisf_W = f11 -cisf_int_Nfloat = f12 -cisf_Nfloat = f13 - -cisf_r = f14 -cisf_r_exact = f68 -cisf_rsq = f15 -cisf_rcub = f32 - -cisf_Inv_Pi_by_16 = f33 -cisf_Pi_by_16_hi = f34 -cisf_Pi_by_16_lo = f35 - -cisf_Inv_Pi_by_64 = f36 -cisf_Pi_by_64_hi = f37 -cisf_Pi_by_64_lo = f38 - - -cisf_P1 = f39 -cisf_Q1 = f40 -cisf_P2 = f41 -cisf_Q2 = f42 -cisf_P3 = f43 -cisf_Q3 = f44 -cisf_P4 = f45 -cisf_Q4 = f46 - -cisf_P_temp1 = f47 -cisf_P_temp2 = f48 - -cisf_Q_temp1 = f49 -cisf_Q_temp2 = f50 - -cisf_P = f51 - -cisf_SIG_INV_PI_BY_16_2TO61 = f52 -cisf_RSHF_2TO61 = f53 -cisf_RSHF = f54 -cisf_2TOM61 = f55 -cisf_NFLOAT = f56 -cisf_W_2TO61_RSH = f57 - -cisf_tmp = f58 - -cisf_Sm_sin = f59 -cisf_Cm_sin = f60 - -cisf_Sm_cos = f61 -cisf_Cm_cos = f62 - -cisf_srsq_sin = f63 -cisf_srsq_cos = f64 - -cisf_Q_sin = f65 -cisf_Q_cos = f66 -cisf_Q = f67 - -///////////////////////////////////////////////////////////// - -cisf_pResSin = r33 -cisf_pResCos = r34 - -cisf_exp_limit = r35 -cisf_r_signexp = r36 -cisf_AD_beta_table = r37 -cisf_r_sincos = r38 - -cisf_r_exp = r39 -cisf_r_17_ones = r40 - -cisf_GR_sig_inv_pi_by_16 = r14 -cisf_GR_rshf_2to61 = r15 -cisf_GR_rshf = r16 -cisf_GR_exp_2tom61 = r17 -cisf_GR_n = r18 - -cisf_GR_n_sin = r19 -cisf_GR_m_sin = r41 -cisf_GR_32m_sin = r41 - -cisf_GR_n_cos = r42 -cisf_GR_m_cos = r43 -cisf_GR_32m_cos = r43 - -cisf_AD_2_sin = r44 -cisf_AD_2_cos = r45 - -cisf_gr_tmp = r46 -GR_SAVE_B0 = r47 -GR_SAVE_GP = r48 -rB0_SAVED = r49 -GR_SAVE_PFS = r50 -GR_SAVE_PR = r51 -cisf_AD_1 = r52 - -RODATA - -.align 16 -// Pi/16 parts -LOCAL_OBJECT_START(double_cisf_pi) - data8 0xC90FDAA22168C234, 0x00003FFC // pi/16 1st part - data8 0xC4C6628B80DC1CD1, 0x00003FBC // pi/16 2nd part -LOCAL_OBJECT_END(double_cisf_pi) - -// Coefficients for polynomials -LOCAL_OBJECT_START(double_cisf_pq_k4) - data8 0x3F810FABB668E9A2 // P2 - data8 0x3FA552E3D6DE75C9 // Q2 - data8 0xBFC555554447BC7F // P1 - data8 0xBFDFFFFFC447610A // Q1 -LOCAL_OBJECT_END(double_cisf_pq_k4) - -// Sincos table (S[m], C[m]) -LOCAL_OBJECT_START(double_sin_cos_beta_k4) - data8 0x0000000000000000 // sin ( 0 Pi / 16 ) - data8 0x3FF0000000000000 // cos ( 0 Pi / 16 ) -// - data8 0x3FC8F8B83C69A60B // sin ( 1 Pi / 16 ) - data8 0x3FEF6297CFF75CB0 // cos ( 1 Pi / 16 ) -// - data8 0x3FD87DE2A6AEA963 // sin ( 2 Pi / 16 ) - data8 0x3FED906BCF328D46 // cos ( 2 Pi / 16 ) -// - data8 0x3FE1C73B39AE68C8 // sin ( 3 Pi / 16 ) - data8 0x3FEA9B66290EA1A3 // cos ( 3 Pi / 16 ) -// - data8 0x3FE6A09E667F3BCD // sin ( 4 Pi / 16 ) - data8 0x3FE6A09E667F3BCD // cos ( 4 Pi / 16 ) -// - data8 0x3FEA9B66290EA1A3 // sin ( 5 Pi / 16 ) - data8 0x3FE1C73B39AE68C8 // cos ( 5 Pi / 16 ) -// - data8 0x3FED906BCF328D46 // sin ( 6 Pi / 16 ) - data8 0x3FD87DE2A6AEA963 // cos ( 6 Pi / 16 ) -// - data8 0x3FEF6297CFF75CB0 // sin ( 7 Pi / 16 ) - data8 0x3FC8F8B83C69A60B // cos ( 7 Pi / 16 ) -// - data8 0x3FF0000000000000 // sin ( 8 Pi / 16 ) - data8 0x0000000000000000 // cos ( 8 Pi / 16 ) -// - data8 0x3FEF6297CFF75CB0 // sin ( 9 Pi / 16 ) - data8 0xBFC8F8B83C69A60B // cos ( 9 Pi / 16 ) -// - data8 0x3FED906BCF328D46 // sin ( 10 Pi / 16 ) - data8 0xBFD87DE2A6AEA963 // cos ( 10 Pi / 16 ) -// - data8 0x3FEA9B66290EA1A3 // sin ( 11 Pi / 16 ) - data8 0xBFE1C73B39AE68C8 // cos ( 11 Pi / 16 ) -// - data8 0x3FE6A09E667F3BCD // sin ( 12 Pi / 16 ) - data8 0xBFE6A09E667F3BCD // cos ( 12 Pi / 16 ) -// - data8 0x3FE1C73B39AE68C8 // sin ( 13 Pi / 16 ) - data8 0xBFEA9B66290EA1A3 // cos ( 13 Pi / 16 ) -// - data8 0x3FD87DE2A6AEA963 // sin ( 14 Pi / 16 ) - data8 0xBFED906BCF328D46 // cos ( 14 Pi / 16 ) -// - data8 0x3FC8F8B83C69A60B // sin ( 15 Pi / 16 ) - data8 0xBFEF6297CFF75CB0 // cos ( 15 Pi / 16 ) -// - data8 0x0000000000000000 // sin ( 16 Pi / 16 ) - data8 0xBFF0000000000000 // cos ( 16 Pi / 16 ) -// - data8 0xBFC8F8B83C69A60B // sin ( 17 Pi / 16 ) - data8 0xBFEF6297CFF75CB0 // cos ( 17 Pi / 16 ) -// - data8 0xBFD87DE2A6AEA963 // sin ( 18 Pi / 16 ) - data8 0xBFED906BCF328D46 // cos ( 18 Pi / 16 ) -// - data8 0xBFE1C73B39AE68C8 // sin ( 19 Pi / 16 ) - data8 0xBFEA9B66290EA1A3 // cos ( 19 Pi / 16 ) -// - data8 0xBFE6A09E667F3BCD // sin ( 20 Pi / 16 ) - data8 0xBFE6A09E667F3BCD // cos ( 20 Pi / 16 ) -// - data8 0xBFEA9B66290EA1A3 // sin ( 21 Pi / 16 ) - data8 0xBFE1C73B39AE68C8 // cos ( 21 Pi / 16 ) -// - data8 0xBFED906BCF328D46 // sin ( 22 Pi / 16 ) - data8 0xBFD87DE2A6AEA963 // cos ( 22 Pi / 16 ) -// - data8 0xBFEF6297CFF75CB0 // sin ( 23 Pi / 16 ) - data8 0xBFC8F8B83C69A60B // cos ( 23 Pi / 16 ) -// - data8 0xBFF0000000000000 // sin ( 24 Pi / 16 ) - data8 0x0000000000000000 // cos ( 24 Pi / 16 ) -// - data8 0xBFEF6297CFF75CB0 // sin ( 25 Pi / 16 ) - data8 0x3FC8F8B83C69A60B // cos ( 25 Pi / 16 ) -// - data8 0xBFED906BCF328D46 // sin ( 26 Pi / 16 ) - data8 0x3FD87DE2A6AEA963 // cos ( 26 Pi / 16 ) -// - data8 0xBFEA9B66290EA1A3 // sin ( 27 Pi / 16 ) - data8 0x3FE1C73B39AE68C8 // cos ( 27 Pi / 16 ) -// - data8 0xBFE6A09E667F3BCD // sin ( 28 Pi / 16 ) - data8 0x3FE6A09E667F3BCD // cos ( 28 Pi / 16 ) -// - data8 0xBFE1C73B39AE68C8 // sin ( 29 Pi / 16 ) - data8 0x3FEA9B66290EA1A3 // cos ( 29 Pi / 16 ) -// - data8 0xBFD87DE2A6AEA963 // sin ( 30 Pi / 16 ) - data8 0x3FED906BCF328D46 // cos ( 30 Pi / 16 ) -// - data8 0xBFC8F8B83C69A60B // sin ( 31 Pi / 16 ) - data8 0x3FEF6297CFF75CB0 // cos ( 31 Pi / 16 ) -// - data8 0x0000000000000000 // sin ( 32 Pi / 16 ) - data8 0x3FF0000000000000 // cos ( 32 Pi / 16 ) -LOCAL_OBJECT_END(double_sin_cos_beta_k4) - -.section .text - -GLOBAL_IEEE754_ENTRY(sincosf) -// cis_GR_sig_inv_pi_by_16 = significand of 16/pi -{ .mlx - alloc GR_SAVE_PFS = ar.pfs, 0, 21, 0, 0 - movl cisf_GR_sig_inv_pi_by_16 = 0xA2F9836E4E44152A // 16/pi signd - -} -// cis_GR_rshf_2to61 = 1.1000 2^(63+63-2) -{ .mlx - addl cisf_AD_1 = @ltoff(double_cisf_pi), gp - movl cisf_GR_rshf_2to61 = 0x47b8000000000000 // 1.1 2^(63+63-2) -};; - -{ .mfi - ld8 cisf_AD_1 = [cisf_AD_1] - fnorm.s1 cisf_NORM_f8 = cisf_Arg - cmp.eq p13, p14 = r0, r0 // p13 set for sincos -} -// cis_GR_exp_2tom61 = exponent of scaling factor 2^-61 -{ .mib - mov cisf_GR_exp_2tom61 = 0xffff-61 - nop.i 0 - br.cond.sptk _CISF_COMMON -};; -GLOBAL_IEEE754_END(sincosf) - -GLOBAL_LIBM_ENTRY(__libm_sincosf) -{ .mlx -// cisf_GR_sig_inv_pi_by_16 = significand of 16/pi - alloc GR_SAVE_PFS = ar.pfs,0,21,0,0 - movl cisf_GR_sig_inv_pi_by_16 = 0xA2F9836E4E44152A -} -// cisf_GR_rshf_2to61 = 1.1000 2^(63+63-2) -{ .mlx - addl cisf_AD_1 = @ltoff(double_cisf_pi), gp - movl cisf_GR_rshf_2to61 = 0x47b8000000000000 -};; - -// p14 set for __libm_sincos and cis -{ .mfi - ld8 cisf_AD_1 = [cisf_AD_1] - fnorm.s1 cisf_NORM_f8 = cisf_Arg - cmp.eq p14, p13 = r0, r0 -} -// cisf_GR_exp_2tom61 = exponent of scaling factor 2^-61 -{ .mib - mov cisf_GR_exp_2tom61 = 0xffff-61 - nop.i 0 - nop.b 0 -};; - -_CISF_COMMON: -// Form two constants we need -// 16/pi * 2^-2 * 2^63, scaled by 2^61 since we just loaded the significand -// 1.1000...000 * 2^(63+63-2) to right shift int(W) into the low significand -// fcmp used to set denormal, and invalid on snans -{ .mfi - setf.sig cisf_SIG_INV_PI_BY_16_2TO61 = cisf_GR_sig_inv_pi_by_16 - fclass.m p6,p0 = cisf_Arg, 0xe7//if x=0,inf,nan - addl cisf_gr_tmp = -1, r0 -} -// cisf_GR_rshf = 1.1000 2^63 for right shift -{ .mlx - setf.d cisf_RSHF_2TO61 = cisf_GR_rshf_2to61 - movl cisf_GR_rshf = 0x43e8000000000000 -};; - -// Form another constant -// 2^-61 for scaling Nfloat -// 0x10017 is register_bias + 24. -// So if f8 >= 2^24, go to large args routine -{ .mmi - getf.exp cisf_r_signexp = cisf_Arg - setf.exp cisf_2TOM61 = cisf_GR_exp_2tom61 - mov cisf_exp_limit = 0x10017 -};; - -// Load the two pieces of pi/16 -// Form another constant -// 1.1000...000 * 2^63, the right shift constant -{ .mmb - ldfe cisf_Pi_by_16_hi = [cisf_AD_1],16 - setf.d cisf_RSHF = cisf_GR_rshf -(p6) br.cond.spnt _CISF_SPECIAL_ARGS -};; - -{ .mmi - ldfe cisf_Pi_by_16_lo = [cisf_AD_1],16 - setf.sig cisf_tmp = cisf_gr_tmp //constant for inexact set - nop.i 0 -};; - -// Start loading P, Q coefficients -{ .mmi - ldfpd cisf_P2,cisf_Q2 = [cisf_AD_1],16 - nop.m 0 - dep.z cisf_r_exp = cisf_r_signexp, 0, 17 -};; - -// p10 is true if we must call routines to handle larger arguments -// p10 is true if f8 exp is >= 0x10017 -{ .mmb - ldfpd cisf_P1,cisf_Q1 = [cisf_AD_1], 16 - cmp.ge p10, p0 = cisf_r_exp, cisf_exp_limit -(p10) br.cond.spnt _CISF_LARGE_ARGS // go to |x| >= 2^24 path -};; - -// cisf_W = x * cisf_Inv_Pi_by_16 -// Multiply x by scaled 16/pi and add large const to shift integer part of W to -// rightmost bits of significand -{ .mfi - nop.m 0 - fma.s1 cisf_W_2TO61_RSH = cisf_NORM_f8,cisf_SIG_INV_PI_BY_16_2TO61,cisf_RSHF_2TO61 - nop.i 0 -};; - -// cisf_NFLOAT = Round_Int_Nearest(cisf_W) -{ .mfi - nop.m 0 - fms.s1 cisf_NFLOAT = cisf_W_2TO61_RSH,cisf_2TOM61,cisf_RSHF - nop.i 0 -};; - -// N = (int)cisf_int_Nfloat -{ .mfi - getf.sig cisf_GR_n = cisf_W_2TO61_RSH - nop.f 0 - nop.i 0 -};; - -// Add 2^(k-1) (which is in cisf_r_sincos) to N -// cisf_r = -cisf_Nfloat * cisf_Pi_by_16_hi + x -// cisf_r = cisf_r -cisf_Nfloat * cisf_Pi_by_16_lo -{ .mfi - add cisf_GR_n_cos = 0x8, cisf_GR_n - fnma.s1 cisf_r = cisf_NFLOAT, cisf_Pi_by_16_hi, cisf_NORM_f8 - nop.i 0 -};; - -//Get M (least k+1 bits of N) -{ .mmi - and cisf_GR_m_sin = 0x1f,cisf_GR_n - and cisf_GR_m_cos = 0x1f,cisf_GR_n_cos - nop.i 0 -};; - -{ .mmi - shladd cisf_AD_2_cos = cisf_GR_m_cos,4, cisf_AD_1 - shladd cisf_AD_2_sin = cisf_GR_m_sin,4, cisf_AD_1 - nop.i 0 -};; - -// den. input to set uflow -{ .mmf - ldfpd cisf_Sm_sin, cisf_Cm_sin = [cisf_AD_2_sin] - ldfpd cisf_Sm_cos, cisf_Cm_cos = [cisf_AD_2_cos] - fclass.m.unc p10,p0 = cisf_Arg,0x0b -};; - -{ .mfi - nop.m 0 - fma.s1 cisf_rsq = cisf_r, cisf_r, f0 // get r^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s0 cisf_tmp = cisf_tmp,cisf_tmp // inexact flag - nop.i 0 -};; - -{ .mmf - nop.m 0 - nop.m 0 - fnma.s1 cisf_r_exact = cisf_NFLOAT, cisf_Pi_by_16_lo, cisf_r -};; - -{ .mfi - nop.m 0 - fma.s1 cisf_P = cisf_rsq, cisf_P2, cisf_P1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 cisf_Q = cisf_rsq, cisf_Q2, cisf_Q1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fmpy.s1 cisf_rcub = cisf_r_exact, cisf_rsq // get r^3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fmpy.s1 cisf_srsq_sin = cisf_Sm_sin,cisf_rsq - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 cisf_srsq_cos = cisf_Sm_cos,cisf_rsq - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 cisf_P = cisf_rcub,cisf_P,cisf_r_exact - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 cisf_Q_sin = cisf_srsq_sin,cisf_Q, cisf_Sm_sin - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 cisf_Q_cos = cisf_srsq_cos,cisf_Q, cisf_Sm_cos - nop.i 0 -};; - -// If den. arg, force underflow to be set -{ .mfi - nop.m 0 -(p10) fmpy.s.s0 cisf_tmp = cisf_Arg,cisf_Arg - nop.i 0 -};; - -//Final sin -{ .mfi - nop.m 0 - fma.s.s0 cisf_Sin_res = cisf_Cm_sin, cisf_P, cisf_Q_sin - nop.i 0 -} -//Final cos -{ .mfb - nop.m 0 - fma.s.s0 cisf_Cos_res = cisf_Cm_cos, cisf_P, cisf_Q_cos -(p14) br.cond.sptk _CISF_RETURN //com. exit for __libm_sincos and cis main path -};; - -{ .mmb - stfs [cisf_pResSin] = cisf_Sin_res - stfs [cisf_pResCos] = cisf_Cos_res - br.ret.sptk b0 // common exit for sincos main path -};; - -_CISF_SPECIAL_ARGS: -// sinf(+/-0) = +/-0 -// sinf(Inf) = NaN -// sinf(NaN) = NaN -{ .mfi - nop.m 999 - fma.s.s0 cisf_Sin_res = cisf_Arg, f0, f0 // sinf(+/-0,NaN,Inf) - nop.i 999 -};; - -// cosf(+/-0) = 1.0 -// cosf(Inf) = NaN -// cosf(NaN) = NaN -{ .mfb - nop.m 999 - fma.s.s0 cisf_Cos_res = cisf_Arg, f0, f1 // cosf(+/-0,NaN,Inf) -(p14) br.cond.sptk _CISF_RETURN //spec exit for __libm_sincos and cis main path -};; - -{ .mmb - stfs [cisf_pResSin] = cisf_Sin_res - stfs [cisf_pResCos] = cisf_Cos_res - br.ret.sptk b0 // special exit for sincos main path -};; - - // exit for sincos - // NOTE! r8 and r9 used only because of compiler issue - // connected with float point complex function arguments pass - // After fix of this issue this operations can be deleted -_CISF_RETURN: -{ .mmb - getf.s r8 = cisf_Cos_res - getf.s r9 = cisf_Sin_res - br.ret.sptk b0 // exit for sincos -};; -GLOBAL_LIBM_END(__libm_sincosf) - -//// |x| > 2^24 path /////// -.proc _CISF_LARGE_ARGS -_CISF_LARGE_ARGS: -.prologue -{ .mfi - nop.m 0 - nop.f 0 -.save ar.pfs, GR_SAVE_PFS - mov GR_SAVE_PFS = ar.pfs -};; - -{ .mfi - mov GR_SAVE_GP = gp - nop.f 0 -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0 = b0 -};; - -.body -// Call of huge arguments sincos -{ .mib - nop.m 0 - mov GR_SAVE_PR = pr - br.call.sptk b0 = __libm_sincos_large -};; - -{ .mfi - mov gp = GR_SAVE_GP - nop.f 0 - mov pr = GR_SAVE_PR, 0x1fffe -} -;; - -{ .mfi - nop.m 0 - nop.f 0 - mov b0 = GR_SAVE_B0 -} -;; - -{ .mfi - nop.m 0 - fma.s.s0 cisf_Cos_res = cisf_Cos_res, f1, f0 - mov ar.pfs = GR_SAVE_PFS -} -// exit for |x| > 2^24 path (__libm_sincos and cis) -{ .mfb - nop.m 0 - fma.s.s0 cisf_Sin_res = cisf_Sin_res, f1, f0 -(p14) br.cond.sptk _CISF_RETURN -};; - -{ .mmb - stfs [cisf_pResSin] = cisf_Sin_res - stfs [cisf_pResCos] = cisf_Cos_res - br.ret.sptk b0 // exit for sincos |x| > 2^24 path -};; - -.endp _CISF_LARGE_ARGS - -.type __libm_sincos_large#,@function -.global __libm_sincos_large# diff --git a/sysdeps/ia64/fpu/libm_sincosl.S b/sysdeps/ia64/fpu/libm_sincosl.S deleted file mode 100644 index 7fe92c549c..0000000000 --- a/sysdeps/ia64/fpu/libm_sincosl.S +++ /dev/null @@ -1,2525 +0,0 @@ -.file "libm_sincosl.s" - - -// Copyright (c) 2000 - 2004, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 05/13/02 Initial version of sincosl (based on libm's sinl and cosl) -// 02/10/03 Reordered header: .section, .global, .proc, .align; -// used data8 for long double table values -// 10/13/03 Corrected .file name -// 02/11/04 cisl is moved to the separate file. -// 10/26/04 Avoided using r14-31 as scratch so not clobbered by dynamic loader -// -//********************************************************************* -// -// Function: Combined sincosl routine with 3 different API's -// -// API's -//============================================================== -// 1) void sincosl(long double, long double*s, long double*c) -// 2) __libm_sincosl - internal LIBM function, that accepts -// argument in f8 and returns cosine through f8, sine through f9 -// -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input x and cosl return value), -// f9 (sinl returned) -// f32-f121 -// -// General Purpose Registers: -// r32-r61 -// -// Predicate Registers: p6-p15 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// Denormal fault raised on denormal inputs -// Overflow exceptions do not occur -// Underflow exceptions raised when appropriate for sincosl -// (No specialized error handling for this routine) -// Inexact raised when appropriate by algorithm -// -// sincosl(SNaN) = QNaN, QNaN -// sincosl(QNaN) = QNaN, QNaN -// sincosl(inf) = QNaN, QNaN -// sincosl(+/-0) = +/-0, 1 -// -//********************************************************************* -// -// Mathematical Description -// ======================== -// -// The computation of FSIN and FCOS performed in parallel. -// -// Arg = N pi/2 + alpha, |alpha| <= pi/4. -// -// cosl( Arg ) = sinl( (N+1) pi/2 + alpha ), -// -// therefore, the code for computing sine will produce cosine as long -// as 1 is added to N immediately after the argument reduction -// process. -// -// Let M = N if sine -// N+1 if cosine. -// -// Now, given -// -// Arg = M pi/2 + alpha, |alpha| <= pi/4, -// -// let I = M mod 4, or I be the two lsb of M when M is represented -// as 2's complement. I = [i_0 i_1]. Then -// -// sinl( Arg ) = (-1)^i_0 sinl( alpha ) if i_1 = 0, -// = (-1)^i_0 cosl( alpha ) if i_1 = 1. -// -// For example: -// if M = -1, I = 11 -// sin ((-pi/2 + alpha) = (-1) cos (alpha) -// if M = 0, I = 00 -// sin (alpha) = sin (alpha) -// if M = 1, I = 01 -// sin (pi/2 + alpha) = cos (alpha) -// if M = 2, I = 10 -// sin (pi + alpha) = (-1) sin (alpha) -// if M = 3, I = 11 -// sin ((3/2)pi + alpha) = (-1) cos (alpha) -// -// The value of alpha is obtained by argument reduction and -// represented by two working precision numbers r and c where -// -// alpha = r + c accurately. -// -// The reduction method is described in a previous write up. -// The argument reduction scheme identifies 4 cases. For Cases 2 -// and 4, because |alpha| is small, sinl(r+c) and cosl(r+c) can be -// computed very easily by 2 or 3 terms of the Taylor series -// expansion as follows: -// -// Case 2: -// ------- -// -// sinl(r + c) = r + c - r^3/6 accurately -// cosl(r + c) = 1 - 2^(-67) accurately -// -// Case 4: -// ------- -// -// sinl(r + c) = r + c - r^3/6 + r^5/120 accurately -// cosl(r + c) = 1 - r^2/2 + r^4/24 accurately -// -// The only cases left are Cases 1 and 3 of the argument reduction -// procedure. These two cases will be merged since after the -// argument is reduced in either cases, we have the reduced argument -// represented as r + c and that the magnitude |r + c| is not small -// enough to allow the usage of a very short approximation. -// -// The required calculation is either -// -// sinl(r + c) = sinl(r) + correction, or -// cosl(r + c) = cosl(r) + correction. -// -// Specifically, -// -// sinl(r + c) = sinl(r) + c sin'(r) + O(c^2) -// = sinl(r) + c cos (r) + O(c^2) -// = sinl(r) + c(1 - r^2/2) accurately. -// Similarly, -// -// cosl(r + c) = cosl(r) - c sinl(r) + O(c^2) -// = cosl(r) - c(r - r^3/6) accurately. -// -// We therefore concentrate on accurately calculating sinl(r) and -// cosl(r) for a working-precision number r, |r| <= pi/4 to within -// 0.1% or so. -// -// The greatest challenge of this task is that the second terms of -// the Taylor series -// -// r - r^3/3! + r^r/5! - ... -// -// and -// -// 1 - r^2/2! + r^4/4! - ... -// -// are not very small when |r| is close to pi/4 and the rounding -// errors will be a concern if simple polynomial accumulation is -// used. When |r| < 2^-3, however, the second terms will be small -// enough (6 bits or so of right shift) that a normal Horner -// recurrence suffices. Hence there are two cases that we consider -// in the accurate computation of sinl(r) and cosl(r), |r| <= pi/4. -// -// Case small_r: |r| < 2^(-3) -// -------------------------- -// -// Since Arg = M pi/4 + r + c accurately, and M mod 4 is [i_0 i_1], -// we have -// -// sinl(Arg) = (-1)^i_0 * sinl(r + c) if i_1 = 0 -// = (-1)^i_0 * cosl(r + c) if i_1 = 1 -// -// can be accurately approximated by -// -// sinl(Arg) = (-1)^i_0 * [sinl(r) + c] if i_1 = 0 -// = (-1)^i_0 * [cosl(r) - c*r] if i_1 = 1 -// -// because |r| is small and thus the second terms in the correction -// are unneccessary. -// -// Finally, sinl(r) and cosl(r) are approximated by polynomials of -// moderate lengths. -// -// sinl(r) = r + S_1 r^3 + S_2 r^5 + ... + S_5 r^11 -// cosl(r) = 1 + C_1 r^2 + C_2 r^4 + ... + C_5 r^10 -// -// We can make use of predicates to selectively calculate -// sinl(r) or cosl(r) based on i_1. -// -// Case normal_r: 2^(-3) <= |r| <= pi/4 -// ------------------------------------ -// -// This case is more likely than the previous one if one considers -// r to be uniformly distributed in [-pi/4 pi/4]. Again, -// -// sinl(Arg) = (-1)^i_0 * sinl(r + c) if i_1 = 0 -// = (-1)^i_0 * cosl(r + c) if i_1 = 1. -// -// Because |r| is now larger, we need one extra term in the -// correction. sinl(Arg) can be accurately approximated by -// -// sinl(Arg) = (-1)^i_0 * [sinl(r) + c(1-r^2/2)] if i_1 = 0 -// = (-1)^i_0 * [cosl(r) - c*r*(1 - r^2/6)] i_1 = 1. -// -// Finally, sinl(r) and cosl(r) are approximated by polynomials of -// moderate lengths. -// -// sinl(r) = r + PP_1_hi r^3 + PP_1_lo r^3 + -// PP_2 r^5 + ... + PP_8 r^17 -// -// cosl(r) = 1 + QQ_1 r^2 + QQ_2 r^4 + ... + QQ_8 r^16 -// -// where PP_1_hi is only about 16 bits long and QQ_1 is -1/2. -// The crux in accurate computation is to calculate -// -// r + PP_1_hi r^3 or 1 + QQ_1 r^2 -// -// accurately as two pieces: U_hi and U_lo. The way to achieve this -// is to obtain r_hi as a 10 sig. bit number that approximates r to -// roughly 8 bits or so of accuracy. (One convenient way is -// -// r_hi := frcpa( frcpa( r ) ).) -// -// This way, -// -// r + PP_1_hi r^3 = r + PP_1_hi r_hi^3 + -// PP_1_hi (r^3 - r_hi^3) -// = [r + PP_1_hi r_hi^3] + -// [PP_1_hi (r - r_hi) -// (r^2 + r_hi r + r_hi^2) ] -// = U_hi + U_lo -// -// Since r_hi is only 10 bit long and PP_1_hi is only 16 bit long, -// PP_1_hi * r_hi^3 is only at most 46 bit long and thus computed -// exactly. Furthermore, r and PP_1_hi r_hi^3 are of opposite sign -// and that there is no more than 8 bit shift off between r and -// PP_1_hi * r_hi^3. Hence the sum, U_hi, is representable and thus -// calculated without any error. Finally, the fact that -// -// |U_lo| <= 2^(-8) |U_hi| -// -// says that U_hi + U_lo is approximating r + PP_1_hi r^3 to roughly -// 8 extra bits of accuracy. -// -// Similarly, -// -// 1 + QQ_1 r^2 = [1 + QQ_1 r_hi^2] + -// [QQ_1 (r - r_hi)(r + r_hi)] -// = U_hi + U_lo. -// -// Summarizing, we calculate r_hi = frcpa( frcpa( r ) ). -// -// If i_1 = 0, then -// -// U_hi := r + PP_1_hi * r_hi^3 -// U_lo := PP_1_hi * (r - r_hi) * (r^2 + r*r_hi + r_hi^2) -// poly := PP_1_lo r^3 + PP_2 r^5 + ... + PP_8 r^17 -// correction := c * ( 1 + C_1 r^2 ) -// -// Else ...i_1 = 1 -// -// U_hi := 1 + QQ_1 * r_hi * r_hi -// U_lo := QQ_1 * (r - r_hi) * (r + r_hi) -// poly := QQ_2 * r^4 + QQ_3 * r^6 + ... + QQ_8 r^16 -// correction := -c * r * (1 + S_1 * r^2) -// -// End -// -// Finally, -// -// V := poly + ( U_lo + correction ) -// -// / U_hi + V if i_0 = 0 -// result := | -// \ (-U_hi) - V if i_0 = 1 -// -// It is important that in the last step, negation of U_hi is -// performed prior to the subtraction which is to be performed in -// the user-set rounding mode. -// -// -// Algorithmic Description -// ======================= -// -// The argument reduction algorithm shares the same code between FSIN and FCOS. -// The argument reduction description given -// previously is repeated below. -// -// -// Step 0. Initialization. -// -// Step 1. Check for exceptional and special cases. -// -// * If Arg is +-0, +-inf, NaN, NaT, go to Step 10 for special -// handling. -// * If |Arg| < 2^24, go to Step 2 for reduction of moderate -// arguments. This is the most likely case. -// * If |Arg| < 2^63, go to Step 8 for pre-reduction of large -// arguments. -// * If |Arg| >= 2^63, go to Step 10 for special handling. -// -// Step 2. Reduction of moderate arguments. -// -// If |Arg| < pi/4 ...quick branch -// N_fix := N_inc (integer) -// r := Arg -// c := 0.0 -// Branch to Step 4, Case_1_complete -// Else ...cf. argument reduction -// N := Arg * two_by_PI (fp) -// N_fix := fcvt.fx( N ) (int) -// N := fcvt.xf( N_fix ) -// N_fix := N_fix + N_inc -// s := Arg - N * P_1 (first piece of pi/2) -// w := -N * P_2 (second piece of pi/2) -// -// If |s| >= 2^(-33) -// go to Step 3, Case_1_reduce -// Else -// go to Step 7, Case_2_reduce -// Endif -// Endif -// -// Step 3. Case_1_reduce. -// -// r := s + w -// c := (s - r) + w ...observe order -// -// Step 4. Case_1_complete -// -// ...At this point, the reduced argument alpha is -// ...accurately represented as r + c. -// If |r| < 2^(-3), go to Step 6, small_r. -// -// Step 5. Normal_r. -// -// Let [i_0 i_1] by the 2 lsb of N_fix. -// FR_rsq := r * r -// r_hi := frcpa( frcpa( r ) ) -// r_lo := r - r_hi -// -// If i_1 = 0, then -// poly := r*FR_rsq*(PP_1_lo + FR_rsq*(PP_2 + ... FR_rsq*PP_8)) -// U_hi := r + PP_1_hi*r_hi*r_hi*r_hi ...any order -// U_lo := PP_1_hi*r_lo*(r*r + r*r_hi + r_hi*r_hi) -// correction := c + c*C_1*FR_rsq ...any order -// Else -// poly := FR_rsq*FR_rsq*(QQ_2 + FR_rsq*(QQ_3 + ... + FR_rsq*QQ_8)) -// U_hi := 1 + QQ_1 * r_hi * r_hi ...any order -// U_lo := QQ_1 * r_lo * (r + r_hi) -// correction := -c*(r + S_1*FR_rsq*r) ...any order -// Endif -// -// V := poly + (U_lo + correction) ...observe order -// -// result := (i_0 == 0? 1.0 : -1.0) -// -// Last instruction in user-set rounding mode -// -// result := (i_0 == 0? result*U_hi + V : -// result*U_hi - V) -// -// Return -// -// Step 6. Small_r. -// -// ...Use flush to zero mode without causing exception -// Let [i_0 i_1] be the two lsb of N_fix. -// -// FR_rsq := r * r -// -// If i_1 = 0 then -// z := FR_rsq*FR_rsq; z := FR_rsq*z *r -// poly_lo := S_3 + FR_rsq*(S_4 + FR_rsq*S_5) -// poly_hi := r*FR_rsq*(S_1 + FR_rsq*S_2) -// correction := c -// result := r -// Else -// z := FR_rsq*FR_rsq; z := FR_rsq*z -// poly_lo := C_3 + FR_rsq*(C_4 + FR_rsq*C_5) -// poly_hi := FR_rsq*(C_1 + FR_rsq*C_2) -// correction := -c*r -// result := 1 -// Endif -// -// poly := poly_hi + (z * poly_lo + correction) -// -// If i_0 = 1, result := -result -// -// Last operation. Perform in user-set rounding mode -// -// result := (i_0 == 0? result + poly : -// result - poly ) -// Return -// -// Step 7. Case_2_reduce. -// -// ...Refer to the write up for argument reduction for -// ...rationale. The reduction algorithm below is taken from -// ...argument reduction description and integrated this. -// -// w := N*P_3 -// U_1 := N*P_2 + w ...FMA -// U_2 := (N*P_2 - U_1) + w ...2 FMA -// ...U_1 + U_2 is N*(P_2+P_3) accurately -// -// r := s - U_1 -// c := ( (s - r) - U_1 ) - U_2 -// -// ...The mathematical sum r + c approximates the reduced -// ...argument accurately. Note that although compared to -// ...Case 1, this case requires much more work to reduce -// ...the argument, the subsequent calculation needed for -// ...any of the trigonometric function is very little because -// ...|alpha| < 1.01*2^(-33) and thus two terms of the -// ...Taylor series expansion suffices. -// -// If i_1 = 0 then -// poly := c + S_1 * r * r * r ...any order -// result := r -// Else -// poly := -2^(-67) -// result := 1.0 -// Endif -// -// If i_0 = 1, result := -result -// -// Last operation. Perform in user-set rounding mode -// -// result := (i_0 == 0? result + poly : -// result - poly ) -// -// Return -// -// -// Step 8. Pre-reduction of large arguments. -// -// ...Again, the following reduction procedure was described -// ...in the separate write up for argument reduction, which -// ...is tightly integrated here. - -// N_0 := Arg * Inv_P_0 -// N_0_fix := fcvt.fx( N_0 ) -// N_0 := fcvt.xf( N_0_fix) - -// Arg' := Arg - N_0 * P_0 -// w := N_0 * d_1 -// N := Arg' * two_by_PI -// N_fix := fcvt.fx( N ) -// N := fcvt.xf( N_fix ) -// N_fix := N_fix + N_inc -// -// s := Arg' - N * P_1 -// w := w - N * P_2 -// -// If |s| >= 2^(-14) -// go to Step 3 -// Else -// go to Step 9 -// Endif -// -// Step 9. Case_4_reduce. -// -// ...first obtain N_0*d_1 and -N*P_2 accurately -// U_hi := N_0 * d_1 V_hi := -N*P_2 -// U_lo := N_0 * d_1 - U_hi V_lo := -N*P_2 - U_hi ...FMAs -// -// ...compute the contribution from N_0*d_1 and -N*P_3 -// w := -N*P_3 -// w := w + N_0*d_2 -// t := U_lo + V_lo + w ...any order -// -// ...at this point, the mathematical value -// ...s + U_hi + V_hi + t approximates the true reduced argument -// ...accurately. Just need to compute this accurately. -// -// ...Calculate U_hi + V_hi accurately: -// A := U_hi + V_hi -// if |U_hi| >= |V_hi| then -// a := (U_hi - A) + V_hi -// else -// a := (V_hi - A) + U_hi -// endif -// ...order in computing "a" must be observed. This branch is -// ...best implemented by predicates. -// ...A + a is U_hi + V_hi accurately. Moreover, "a" is -// ...much smaller than A: |a| <= (1/2)ulp(A). -// -// ...Just need to calculate s + A + a + t -// C_hi := s + A t := t + a -// C_lo := (s - C_hi) + A -// C_lo := C_lo + t -// -// ...Final steps for reduction -// r := C_hi + C_lo -// c := (C_hi - r) + C_lo -// -// ...At this point, we have r and c -// ...And all we need is a couple of terms of the corresponding -// ...Taylor series. -// -// If i_1 = 0 -// poly := c + r*FR_rsq*(S_1 + FR_rsq*S_2) -// result := r -// Else -// poly := FR_rsq*(C_1 + FR_rsq*C_2) -// result := 1 -// Endif -// -// If i_0 = 1, result := -result -// -// Last operation. Perform in user-set rounding mode -// -// result := (i_0 == 0? result + poly : -// result - poly ) -// Return -// -// Large Arguments: For arguments above 2**63, a Payne-Hanek -// style argument reduction is used and pi_by_2 reduce is called. -// - - -RODATA -.align 64 - -LOCAL_OBJECT_START(FSINCOSL_CONSTANTS) - -sincosl_table_p: -//data4 0x4E44152A, 0xA2F9836E, 0x00003FFE,0x00000000 // Inv_pi_by_2 -//data4 0xCE81B9F1, 0xC84D32B0, 0x00004016,0x00000000 // P_0 -//data4 0x2168C235, 0xC90FDAA2, 0x00003FFF,0x00000000 // P_1 -//data4 0xFC8F8CBB, 0xECE675D1, 0x0000BFBD,0x00000000 // P_2 -//data4 0xACC19C60, 0xB7ED8FBB, 0x0000BF7C,0x00000000 // P_3 -//data4 0xDBD171A1, 0x8D848E89, 0x0000BFBF,0x00000000 // d_1 -//data4 0x18A66F8E, 0xD5394C36, 0x0000BF7C,0x00000000 // d_2 -data8 0xA2F9836E4E44152A, 0x00003FFE // Inv_pi_by_2 -data8 0xC84D32B0CE81B9F1, 0x00004016 // P_0 -data8 0xC90FDAA22168C235, 0x00003FFF // P_1 -data8 0xECE675D1FC8F8CBB, 0x0000BFBD // P_2 -data8 0xB7ED8FBBACC19C60, 0x0000BF7C // P_3 -data8 0x8D848E89DBD171A1, 0x0000BFBF // d_1 -data8 0xD5394C3618A66F8E, 0x0000BF7C // d_2 -LOCAL_OBJECT_END(FSINCOSL_CONSTANTS) - -LOCAL_OBJECT_START(sincosl_table_d) -//data4 0x2168C234, 0xC90FDAA2, 0x00003FFE,0x00000000 // pi_by_4 -//data4 0x6EC6B45A, 0xA397E504, 0x00003FE7,0x00000000 // Inv_P_0 -data8 0xC90FDAA22168C234, 0x00003FFE // pi_by_4 -data8 0xA397E5046EC6B45A, 0x00003FE7 // Inv_P_0 -data4 0x3E000000, 0xBE000000 // 2^-3 and -2^-3 -data4 0x2F000000, 0xAF000000 // 2^-33 and -2^-33 -data4 0x9E000000, 0x00000000 // -2^-67 -data4 0x00000000, 0x00000000 // pad -LOCAL_OBJECT_END(sincosl_table_d) - -LOCAL_OBJECT_START(sincosl_table_pp) -//data4 0xA21C0BC9, 0xCC8ABEBC, 0x00003FCE,0x00000000 // PP_8 -//data4 0x720221DA, 0xD7468A05, 0x0000BFD6,0x00000000 // PP_7 -//data4 0x640AD517, 0xB092382F, 0x00003FDE,0x00000000 // PP_6 -//data4 0xD1EB75A4, 0xD7322B47, 0x0000BFE5,0x00000000 // PP_5 -//data4 0xFFFFFFFE, 0xFFFFFFFF, 0x0000BFFD,0x00000000 // C_1 -//data4 0x00000000, 0xAAAA0000, 0x0000BFFC,0x00000000 // PP_1_hi -//data4 0xBAF69EEA, 0xB8EF1D2A, 0x00003FEC,0x00000000 // PP_4 -//data4 0x0D03BB69, 0xD00D00D0, 0x0000BFF2,0x00000000 // PP_3 -//data4 0x88888962, 0x88888888, 0x00003FF8,0x00000000 // PP_2 -//data4 0xAAAB0000, 0xAAAAAAAA, 0x0000BFEC,0x00000000 // PP_1_lo -data8 0xCC8ABEBCA21C0BC9, 0x00003FCE // PP_8 -data8 0xD7468A05720221DA, 0x0000BFD6 // PP_7 -data8 0xB092382F640AD517, 0x00003FDE // PP_6 -data8 0xD7322B47D1EB75A4, 0x0000BFE5 // PP_5 -data8 0xFFFFFFFFFFFFFFFE, 0x0000BFFD // C_1 -data8 0xAAAA000000000000, 0x0000BFFC // PP_1_hi -data8 0xB8EF1D2ABAF69EEA, 0x00003FEC // PP_4 -data8 0xD00D00D00D03BB69, 0x0000BFF2 // PP_3 -data8 0x8888888888888962, 0x00003FF8 // PP_2 -data8 0xAAAAAAAAAAAB0000, 0x0000BFEC // PP_1_lo -LOCAL_OBJECT_END(sincosl_table_pp) - -LOCAL_OBJECT_START(sincosl_table_qq) -//data4 0xC2B0FE52, 0xD56232EF, 0x00003FD2 // QQ_8 -//data4 0x2B48DCA6, 0xC9C99ABA, 0x0000BFDA // QQ_7 -//data4 0x9C716658, 0x8F76C650, 0x00003FE2 // QQ_6 -//data4 0xFDA8D0FC, 0x93F27DBA, 0x0000BFE9 // QQ_5 -//data4 0xAAAAAAAA, 0xAAAAAAAA, 0x0000BFFC // S_1 -//data4 0x00000000, 0x80000000, 0x0000BFFE,0x00000000 // QQ_1 -//data4 0x0C6E5041, 0xD00D00D0, 0x00003FEF,0x00000000 // QQ_4 -//data4 0x0B607F60, 0xB60B60B6, 0x0000BFF5,0x00000000 // QQ_3 -//data4 0xAAAAAA9B, 0xAAAAAAAA, 0x00003FFA,0x00000000 // QQ_2 -data8 0xD56232EFC2B0FE52, 0x00003FD2 // QQ_8 -data8 0xC9C99ABA2B48DCA6, 0x0000BFDA // QQ_7 -data8 0x8F76C6509C716658, 0x00003FE2 // QQ_6 -data8 0x93F27DBAFDA8D0FC, 0x0000BFE9 // QQ_5 -data8 0xAAAAAAAAAAAAAAAA, 0x0000BFFC // S_1 -data8 0x8000000000000000, 0x0000BFFE // QQ_1 -data8 0xD00D00D00C6E5041, 0x00003FEF // QQ_4 -data8 0xB60B60B60B607F60, 0x0000BFF5 // QQ_3 -data8 0xAAAAAAAAAAAAAA9B, 0x00003FFA // QQ_2 -LOCAL_OBJECT_END(sincosl_table_qq) - -LOCAL_OBJECT_START(sincosl_table_c) -//data4 0xFFFFFFFE, 0xFFFFFFFF, 0x0000BFFD,0x00000000 // C_1 -//data4 0xAAAA719F, 0xAAAAAAAA, 0x00003FFA,0x00000000 // C_2 -//data4 0x0356F994, 0xB60B60B6, 0x0000BFF5,0x00000000 // C_3 -//data4 0xB2385EA9, 0xD00CFFD5, 0x00003FEF,0x00000000 // C_4 -//data4 0x292A14CD, 0x93E4BD18, 0x0000BFE9,0x00000000 // C_5 -data8 0xFFFFFFFFFFFFFFFE, 0x0000BFFD // C_1 -data8 0xAAAAAAAAAAAA719F, 0x00003FFA // C_2 -data8 0xB60B60B60356F994, 0x0000BFF5 // C_3 -data8 0xD00CFFD5B2385EA9, 0x00003FEF // C_4 -data8 0x93E4BD18292A14CD, 0x0000BFE9 // C_5 -LOCAL_OBJECT_END(sincosl_table_c) - -LOCAL_OBJECT_START(sincosl_table_s) -//data4 0xAAAAAAAA, 0xAAAAAAAA, 0x0000BFFC,0x00000000 // S_1 -//data4 0x888868DB, 0x88888888, 0x00003FF8,0x00000000 // S_2 -//data4 0x055EFD4B, 0xD00D00D0, 0x0000BFF2,0x00000000 // S_3 -//data4 0x839730B9, 0xB8EF1C5D, 0x00003FEC,0x00000000 // S_4 -//data4 0xE5B3F492, 0xD71EA3A4, 0x0000BFE5,0x00000000 // S_5 -data8 0xAAAAAAAAAAAAAAAA, 0x0000BFFC // S_1 -data8 0x88888888888868DB, 0x00003FF8 // S_2 -data8 0xD00D00D0055EFD4B, 0x0000BFF2 // S_3 -data8 0xB8EF1C5D839730B9, 0x00003FEC // S_4 -data8 0xD71EA3A4E5B3F492, 0x0000BFE5 // S_5 -data4 0x38800000, 0xB8800000 // two**-14 and -two**-14 -LOCAL_OBJECT_END(sincosl_table_s) - -FR_Input_X = f8 -FR_Result = f8 -FR_ResultS = f9 -FR_ResultC = f8 -FR_r = f8 -FR_c = f9 - -FR_norm_x = f9 -FR_inv_pi_2to63 = f10 -FR_rshf_2to64 = f11 -FR_2tom64 = f12 -FR_rshf = f13 -FR_N_float_signif = f14 -FR_abs_x = f15 - -FR_r6 = f32 -FR_r7 = f33 -FR_Pi_by_4 = f34 -FR_Two_to_M14 = f35 -FR_Neg_Two_to_M14 = f36 -FR_Two_to_M33 = f37 -FR_Neg_Two_to_M33 = f38 -FR_Neg_Two_to_M67 = f39 -FR_Inv_pi_by_2 = f40 -FR_N_float = f41 -FR_N_fix = f42 -FR_P_1 = f43 -FR_P_2 = f44 -FR_P_3 = f45 -FR_s = f46 -FR_w = f47 -FR_Z = f50 -FR_A = f51 -FR_a = f52 -FR_t = f53 -FR_U_1 = f54 -FR_U_2 = f55 -FR_C_1 = f56 -FR_C_2 = f57 -FR_C_3 = f58 -FR_C_4 = f59 -FR_C_5 = f60 -FR_S_1 = f61 -FR_S_2 = f62 -FR_S_3 = f63 -FR_S_4 = f64 -FR_S_5 = f65 -FR_r_hi = f68 -FR_r_lo = f69 -FR_rsq = f70 -FR_r_cubed = f71 -FR_C_hi = f72 -FR_N_0 = f73 -FR_d_1 = f74 -FR_V_hi = f75 -FR_V_lo = f76 -FR_U_hi = f77 -FR_U_lo = f78 -FR_U_hiabs = f79 -FR_V_hiabs = f80 -FR_PP_8 = f81 -FR_QQ_8 = f101 -FR_PP_7 = f82 -FR_QQ_7 = f102 -FR_PP_6 = f83 -FR_QQ_6 = f103 -FR_PP_5 = f84 -FR_QQ_5 = f104 -FR_PP_4 = f85 -FR_QQ_4 = f105 -FR_PP_3 = f86 -FR_QQ_3 = f106 -FR_PP_2 = f87 -FR_QQ_2 = f107 -FR_QQ_1 = f108 -FR_r_hi_sq = f88 -FR_N_0_fix = f89 -FR_Inv_P_0 = f90 -FR_d_2 = f93 -FR_P_0 = f95 -FR_C_lo = f96 -FR_PP_1 = f97 -FR_PP_1_lo = f98 -FR_ArgPrime = f99 -FR_inexact = f100 - -FR_Neg_Two_to_M3 = f109 -FR_Two_to_M3 = f110 - -FR_poly_hiS = f66 -FR_poly_hiC = f112 - -FR_poly_loS = f67 -FR_poly_loC = f113 - -FR_polyS = f92 -FR_polyC = f114 - -FR_cS = FR_c -FR_cC = f115 - -FR_corrS = f91 -FR_corrC = f116 - -FR_U_hiC = f117 -FR_U_loC = f118 - -FR_VS = f75 -FR_VC = f119 - -FR_FirstS = f120 -FR_FirstC = f121 - -FR_U_hiS = FR_U_hi -FR_U_loS = FR_U_lo - -FR_Tmp = f94 - - - - -sincos_pResSin = r34 -sincos_pResCos = r35 - -GR_exp_m2_to_m3= r36 -GR_N_Inc = r37 -GR_Cis = r38 -GR_signexp_x = r40 -GR_exp_x = r40 -GR_exp_mask = r41 -GR_exp_2_to_63 = r42 -GR_exp_2_to_m3 = r43 -GR_exp_2_to_24 = r44 - -GR_N_SignS = r45 -GR_N_SignC = r46 -GR_N_SinCos = r47 - -GR_sig_inv_pi = r48 -GR_rshf_2to64 = r49 -GR_exp_2tom64 = r50 -GR_rshf = r51 -GR_ad_p = r52 -GR_ad_d = r53 -GR_ad_pp = r54 -GR_ad_qq = r55 -GR_ad_c = r56 -GR_ad_s = r57 -GR_ad_ce = r58 -GR_ad_se = r59 -GR_ad_m14 = r60 -GR_ad_s1 = r61 - -// For unwind support -GR_SAVE_B0 = r39 -GR_SAVE_GP = r40 -GR_SAVE_PFS = r41 - - -.section .text - -GLOBAL_IEEE754_ENTRY(sincosl) -{ .mlx ///////////////////////////// 1 ///////////////// - alloc r32 = ar.pfs,3,27,2,0 - movl GR_sig_inv_pi = 0xa2f9836e4e44152a // significand of 1/pi -} -{ .mlx - mov GR_N_Inc = 0x0 - movl GR_rshf_2to64 = 0x47e8000000000000 // 1.1000 2^(63+64) -};; - -{ .mfi ///////////////////////////// 2 ///////////////// - addl GR_ad_p = @ltoff(FSINCOSL_CONSTANTS#), gp - fclass.m p6, p0 = FR_Input_X, 0x1E3 // Test x natval, nan, inf - mov GR_exp_2_to_m3 = 0xffff - 3 // Exponent of 2^-3 -} -{ .mfb - mov GR_Cis = 0x0 - fnorm.s1 FR_norm_x = FR_Input_X // Normalize x - br.cond.sptk _COMMON_SINCOSL -};; -GLOBAL_IEEE754_END(sincosl) - -GLOBAL_LIBM_ENTRY(__libm_sincosl) -{ .mlx ///////////////////////////// 1 ///////////////// - alloc r32 = ar.pfs,3,27,2,0 - movl GR_sig_inv_pi = 0xa2f9836e4e44152a // significand of 1/pi -} -{ .mlx - mov GR_N_Inc = 0x0 - movl GR_rshf_2to64 = 0x47e8000000000000 // 1.1000 2^(63+64) -};; - -{ .mfi ///////////////////////////// 2 ///////////////// - addl GR_ad_p = @ltoff(FSINCOSL_CONSTANTS#), gp - fclass.m p6, p0 = FR_Input_X, 0x1E3 // Test x natval, nan, inf - mov GR_exp_2_to_m3 = 0xffff - 3 // Exponent of 2^-3 -} -{ .mfb - mov GR_Cis = 0x1 - fnorm.s1 FR_norm_x = FR_Input_X // Normalize x - nop.b 0 -};; - -_COMMON_SINCOSL: -{ .mfi ///////////////////////////// 3 ///////////////// - setf.sig FR_inv_pi_2to63 = GR_sig_inv_pi // Form 1/pi * 2^63 - nop.f 0 - mov GR_exp_2tom64 = 0xffff - 64 // Scaling constant to compute N -} -{ .mlx - setf.d FR_rshf_2to64 = GR_rshf_2to64 // Form const 1.1000 * 2^(63+64) - movl GR_rshf = 0x43e8000000000000 // Form const 1.1000 * 2^63 -};; - -{ .mfi ///////////////////////////// 4 ///////////////// - ld8 GR_ad_p = [GR_ad_p] // Point to Inv_pi_by_2 - fclass.m p7, p0 = FR_Input_X, 0x0b // Test x denormal - nop.i 0 -};; - -{ .mfi ///////////////////////////// 5 ///////////////// - getf.exp GR_signexp_x = FR_Input_X // Get sign and exponent of x - fclass.m p10, p0 = FR_Input_X, 0x007 // Test x zero - nop.i 0 -} -{ .mib - mov GR_exp_mask = 0x1ffff // Exponent mask - nop.i 0 -(p6) br.cond.spnt SINCOSL_SPECIAL // Branch if x natval, nan, inf -};; - -{ .mfi ///////////////////////////// 6 ///////////////// - setf.exp FR_2tom64 = GR_exp_2tom64 // Form 2^-64 for scaling N_float - nop.f 0 - add GR_ad_d = 0x70, GR_ad_p // Point to constant table d -} -{ .mib - setf.d FR_rshf = GR_rshf // Form right shift const 1.1000 * 2^63 - mov GR_exp_m2_to_m3 = 0x2fffc // Form -(2^-3) -(p7) br.cond.spnt SINCOSL_DENORMAL // Branch if x denormal -};; - -SINCOSL_COMMON2: -{ .mfi ///////////////////////////// 7 ///////////////// - and GR_exp_x = GR_exp_mask, GR_signexp_x // Get exponent of x - fclass.nm p8, p0 = FR_Input_X, 0x1FF // Test x unsupported type - mov GR_exp_2_to_63 = 0xffff + 63 // Exponent of 2^63 -} -{ .mib - add GR_ad_pp = 0x40, GR_ad_d // Point to constant table pp - mov GR_exp_2_to_24 = 0xffff + 24 // Exponent of 2^24 -(p10) br.cond.spnt SINCOSL_ZERO // Branch if x zero -};; - -{ .mfi ///////////////////////////// 8 ///////////////// - ldfe FR_Inv_pi_by_2 = [GR_ad_p], 16 // Load 2/pi - fcmp.eq.s0 p15, p0 = FR_Input_X, f0 // Dummy to set denormal - add GR_ad_qq = 0xa0, GR_ad_pp // Point to constant table qq -} -{ .mfi - ldfe FR_Pi_by_4 = [GR_ad_d], 16 // Load pi/4 for range test - nop.f 0 - cmp.ge p10,p0 = GR_exp_x, GR_exp_2_to_63 // Is |x| >= 2^63 -};; - -{ .mfi ///////////////////////////// 9 ///////////////// - ldfe FR_P_0 = [GR_ad_p], 16 // Load P_0 for pi/4 <= |x| < 2^63 - fmerge.s FR_abs_x = f1, FR_norm_x // |x| - add GR_ad_c = 0x90, GR_ad_qq // Point to constant table c -} -{ .mfi - ldfe FR_Inv_P_0 = [GR_ad_d], 16 // Load 1/P_0 for pi/4 <= |x| < 2^63 - nop.f 0 - cmp.ge p7,p0 = GR_exp_x, GR_exp_2_to_24 // Is |x| >= 2^24 -};; - -{ .mfi ///////////////////////////// 10 ///////////////// - ldfe FR_P_1 = [GR_ad_p], 16 // Load P_1 for pi/4 <= |x| < 2^63 - nop.f 0 - add GR_ad_s = 0x50, GR_ad_c // Point to constant table s -} -{ .mfi - ldfe FR_PP_8 = [GR_ad_pp], 16 // Load PP_8 for 2^-3 < |r| < pi/4 - nop.f 0 - nop.i 0 -};; - -{ .mfi ///////////////////////////// 11 ///////////////// - ldfe FR_P_2 = [GR_ad_p], 16 // Load P_2 for pi/4 <= |x| < 2^63 - nop.f 0 - add GR_ad_ce = 0x40, GR_ad_c // Point to end of constant table c -} -{ .mfi - ldfe FR_QQ_8 = [GR_ad_qq], 16 // Load QQ_8 for 2^-3 < |r| < pi/4 - nop.f 0 - nop.i 0 -};; - -{ .mfi ///////////////////////////// 12 ///////////////// - ldfe FR_QQ_7 = [GR_ad_qq], 16 // Load QQ_7 for 2^-3 < |r| < pi/4 - fma.s1 FR_N_float_signif = FR_Input_X, FR_inv_pi_2to63, FR_rshf_2to64 - add GR_ad_se = 0x40, GR_ad_s // Point to end of constant table s -} -{ .mib - ldfe FR_PP_7 = [GR_ad_pp], 16 // Load PP_7 for 2^-3 < |r| < pi/4 - mov GR_ad_s1 = GR_ad_s // Save pointer to S_1 -(p10) br.cond.spnt SINCOSL_ARG_TOO_LARGE // Branch if |x| >= 2^63 - // Use Payne-Hanek Reduction -};; - -{ .mfi ///////////////////////////// 13 ///////////////// - ldfe FR_P_3 = [GR_ad_p], 16 // Load P_3 for pi/4 <= |x| < 2^63 - fmerge.se FR_r = FR_norm_x, FR_norm_x // r = x, in case |x| < pi/4 - add GR_ad_m14 = 0x50, GR_ad_s // Point to constant table m14 -} -{ .mfb - ldfps FR_Two_to_M3, FR_Neg_Two_to_M3 = [GR_ad_d], 8 - fma.s1 FR_rsq = FR_norm_x, FR_norm_x, f0 // rsq = x*x, in case |x| < pi/4 -(p7) br.cond.spnt SINCOSL_LARGER_ARG // Branch if 2^24 <= |x| < 2^63 - // Use pre-reduction -};; - -{ .mmf ///////////////////////////// 14 ///////////////// - ldfe FR_PP_6 = [GR_ad_pp], 16 // Load PP_6 for normal path - ldfe FR_QQ_6 = [GR_ad_qq], 16 // Load QQ_6 for normal path - fmerge.se FR_c = f0, f0 // c = 0 in case |x| < pi/4 -};; - -{ .mmf ///////////////////////////// 15 ///////////////// - ldfe FR_PP_5 = [GR_ad_pp], 16 // Load PP_5 for normal path - ldfe FR_QQ_5 = [GR_ad_qq], 16 // Load QQ_5 for normal path - nop.f 0 -};; - -// Here if 0 < |x| < 2^24 -{ .mfi ///////////////////////////// 17 ///////////////// - ldfe FR_S_5 = [GR_ad_se], -16 // Load S_5 if i_1=0 - fcmp.lt.s1 p6, p7 = FR_abs_x, FR_Pi_by_4 // Test |x| < pi/4 - nop.i 0 -} -{ .mfi - ldfe FR_C_5 = [GR_ad_ce], -16 // Load C_5 if i_1=1 - fms.s1 FR_N_float = FR_N_float_signif, FR_2tom64, FR_rshf - nop.i 0 -};; - -{ .mmi ///////////////////////////// 18 ///////////////// - ldfe FR_S_4 = [GR_ad_se], -16 // Load S_4 if i_1=0 - ldfe FR_C_4 = [GR_ad_ce], -16 // Load C_4 if i_1=1 - nop.i 0 -};; - -// -// N = Arg * 2/pi -// Check if Arg < pi/4 -// -// -// Case 2: Convert integer N_fix back to normalized floating-point value. -// Case 1: p8 is only affected when p6 is set -// -// -// Grab the integer part of N and call it N_fix -// -{ .mfi ///////////////////////////// 19 ///////////////// -(p7) ldfps FR_Two_to_M33, FR_Neg_Two_to_M33 = [GR_ad_d], 8 -(p6) fma.s1 FR_r_cubed = FR_r, FR_rsq, f0 // r^3 if |x| < pi/4 -(p6) mov GR_N_Inc = 0x0 // N_IncS if |x| < pi/4 -};; - -// If |x| < pi/4, r = x and c = 0 -// lf |x| < pi/4, is x < 2**(-3). -// r = Arg -// c = 0 -{ .mmi ///////////////////////////// 20 ///////////////// -(p7) getf.sig GR_N_Inc = FR_N_float_signif - nop.m 0 -(p6) cmp.lt.unc p8,p0 = GR_exp_x, GR_exp_2_to_m3 // Is |x| < 2^-3 -};; - -// -// lf |x| < pi/4, is -2**(-3)< x < 2**(-3) - set p8. -// If |x| >= pi/4, -// Create the right N for |x| < pi/4 and otherwise -// Case 2: Place integer part of N in GP register -// - -{ .mbb ///////////////////////////// 21 ///////////////// - nop.m 0 -(p8) br.cond.spnt SINCOSL_SMALL_R_0 // Branch if 0 < |x| < 2^-3 -(p6) br.cond.spnt SINCOSL_NORMAL_R_0 // Branch if 2^-3 <= |x| < pi/4 -};; - -// Here if pi/4 <= |x| < 2^24 -{ .mfi - ldfs FR_Neg_Two_to_M67 = [GR_ad_d], 8 // Load -2^-67 - fnma.s1 FR_s = FR_N_float, FR_P_1, FR_Input_X // s = -N * P_1 + Arg - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_w = FR_N_float, FR_P_2, f0 // w = N * P_2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r = FR_s, f1, FR_w // r = s - w, assume |s| >= 2^-33 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fcmp.lt.s1 p7, p6 = FR_s, FR_Two_to_M33 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p7) fcmp.gt.s1 p7, p6 = FR_s, FR_Neg_Two_to_M33 // p6 if |s| >= 2^-33, else p7 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_c = FR_s, f1, FR_r // c = s - r, for |s| >= 2^-33 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_rsq = FR_r, FR_r, f0 // rsq = r * r, for |s| >= 2^-33 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p7) fma.s1 FR_w = FR_N_float, FR_P_3, f0 - nop.i 0 -};; - -{ .mmf - ldfe FR_C_1 = [GR_ad_pp], 16 // Load C_1 if i_1=0 - ldfe FR_S_1 = [GR_ad_qq], 16 // Load S_1 if i_1=1 - frcpa.s1 FR_r_hi, p15 = f1, FR_r // r_hi = frcpa(r) -};; - -{ .mfi - nop.m 0 -(p6) fcmp.lt.unc.s1 p8, p13 = FR_r, FR_Two_to_M3 // If big s, test r with 2^-3 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p7) fma.s1 FR_U_1 = FR_N_float, FR_P_2, FR_w - nop.i 0 -};; - -// -// For big s: r = s - w: No futher reduction is necessary -// For small s: w = N * P_3 (change sign) More reduction -// -{ .mfi - nop.m 0 -(p8) fcmp.gt.s1 p8, p13 = FR_r, FR_Neg_Two_to_M3 // If big s, p8 if |r| < 2^-3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_polyS = FR_rsq, FR_PP_8, FR_PP_7 // poly = rsq*PP_8+PP_7 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_polyC = FR_rsq, FR_QQ_8, FR_QQ_7 // poly = rsq*QQ_8+QQ_7 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p7) fms.s1 FR_r = FR_s, f1, FR_U_1 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p6) fma.s1 FR_r_cubed = FR_r, FR_rsq, f0 // rcubed = r * rsq - nop.i 0 -};; - -{ .mfi -// -// For big s: Is |r| < 2**(-3)? -// For big s: c = S - r -// For small s: U_1 = N * P_2 + w -// -// If p8 is set, prepare to branch to Small_R. -// If p9 is set, prepare to branch to Normal_R. -// For big s, r is complete here. -// -// -// For big s: c = c + w (w has not been negated.) -// For small s: r = S - U_1 -// - nop.m 0 -(p6) fms.s1 FR_c = FR_c, f1, FR_w - nop.i 0 -} -{ .mbb - nop.m 0 -(p8) br.cond.spnt SINCOSL_SMALL_R_1 // Branch if |s|>=2^-33, |r| < 2^-3, - // and pi/4 <= |x| < 2^24 -(p13) br.cond.sptk SINCOSL_NORMAL_R_1 // Branch if |s|>=2^-33, |r| >= 2^-3, - // and pi/4 <= |x| < 2^24 -};; - -SINCOSL_S_TINY: -// -// Here if |s| < 2^-33, and pi/4 <= |x| < 2^24 -// -{ .mfi - and GR_N_SinCos = 0x1, GR_N_Inc - fms.s1 FR_U_2 = FR_N_float, FR_P_2, FR_U_1 - tbit.z p8,p12 = GR_N_Inc, 0 -};; - - -// -// For small s: U_2 = N * P_2 - U_1 -// S_1 stored constant - grab the one stored with the -// coefficients. -// -{ .mfi - ldfe FR_S_1 = [GR_ad_s1], 16 - fma.s1 FR_polyC = f0, f1, FR_Neg_Two_to_M67 - sub GR_N_SignS = GR_N_Inc, GR_N_SinCos -} -{ .mfi - add GR_N_SignC = GR_N_Inc, GR_N_SinCos - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_s = FR_s, f1, FR_r -(p8) tbit.z.unc p10,p11 = GR_N_SignC, 1 -} -{ .mfi - nop.m 0 - fma.s1 FR_rsq = FR_r, FR_r, f0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_U_2 = FR_U_2, f1, FR_w -(p8) tbit.z.unc p8,p9 = GR_N_SignS, 1 -};; - -{ .mfi - nop.m 0 - fmerge.se FR_FirstS = FR_r, FR_r -(p12) tbit.z.unc p14,p15 = GR_N_SignC, 1 -} -{ .mfi - nop.m 0 - fma.s1 FR_FirstC = f0, f1, f1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_c = FR_s, f1, FR_U_1 -(p12) tbit.z.unc p12,p13 = GR_N_SignS, 1 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r = FR_S_1, FR_r, f0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s0 FR_S_1 = FR_S_1, FR_S_1, f0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_c = FR_c, f1, FR_U_2 - nop.i 0 -};; - -.pred.rel "mutex",p9,p15 -{ .mfi - nop.m 0 -(p9) fms.s0 FR_FirstS = f1, f0, FR_FirstS - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fms.s0 FR_FirstS = f1, f0, FR_FirstS - nop.i 0 -};; - -.pred.rel "mutex",p11,p13 -{ .mfi - nop.m 0 -(p11) fms.s0 FR_FirstC = f1, f0, FR_FirstC - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fms.s0 FR_FirstC = f1, f0, FR_FirstC - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_polyS = FR_r, FR_rsq, FR_c - nop.i 0 -};; - - -.pred.rel "mutex",p8,p9 -{ .mfi - nop.m 0 -(p8) fma.s0 FR_ResultS = FR_FirstS, f1, FR_polyS - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fms.s0 FR_ResultS = FR_FirstS, f1, FR_polyS - nop.i 0 -};; - -.pred.rel "mutex",p10,p11 -{ .mfi - nop.m 0 -(p10) fma.s0 FR_ResultC = FR_FirstC, f1, FR_polyC - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fms.s0 FR_ResultC = FR_FirstC, f1, FR_polyC - nop.i 0 -};; - - - -.pred.rel "mutex",p12,p13 -{ .mfi - nop.m 0 -(p12) fma.s0 FR_ResultS = FR_FirstC, f1, FR_polyC - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fms.s0 FR_ResultS = FR_FirstC, f1, FR_polyC - nop.i 0 -};; - -.pred.rel "mutex",p14,p15 -{ .mfi - nop.m 0 -(p14) fma.s0 FR_ResultC = FR_FirstS, f1, FR_polyS - nop.i 0 -} -{ .mfb - cmp.eq p10, p0 = 0x1, GR_Cis -(p15) fms.s0 FR_ResultC = FR_FirstS, f1, FR_polyS -(p10) br.ret.sptk b0 -};; - -{ .mmb // exit for sincosl - stfe [sincos_pResSin] = FR_ResultS - stfe [sincos_pResCos] = FR_ResultC - br.ret.sptk b0 -};; - - - - - - -SINCOSL_LARGER_ARG: -// -// Here if 2^24 <= |x| < 2^63 -// -{ .mfi - ldfe FR_d_1 = [GR_ad_p], 16 // Load d_1 for |x| >= 2^24 path - fma.s1 FR_N_0 = FR_Input_X, FR_Inv_P_0, f0 // N_0 = Arg * Inv_P_0 - nop.i 0 -};; - -{ .mmi - ldfps FR_Two_to_M14, FR_Neg_Two_to_M14 = [GR_ad_m14] - nop.m 0 - nop.i 0 -};; - -{ .mfi - ldfe FR_d_2 = [GR_ad_p], 16 // Load d_2 for |x| >= 2^24 path - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fcvt.fx.s1 FR_N_0_fix = FR_N_0 // N_0_fix = integer part of N_0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fcvt.xf FR_N_0 = FR_N_0_fix // Make N_0 the integer part - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_ArgPrime = FR_N_0, FR_P_0, FR_Input_X // Arg'=-N_0*P_0+Arg - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_w = FR_N_0, FR_d_1, f0 // w = N_0 * d_1 - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fma.s1 FR_N_float = FR_ArgPrime, FR_Inv_pi_by_2, f0 // N = A' * 2/pi - nop.i 0 -};; - -{ .mfi - nop.m 0 - fcvt.fx.s1 FR_N_fix = FR_N_float // N_fix is the integer part - nop.i 0 -};; - -{ .mfi - nop.m 0 - fcvt.xf FR_N_float = FR_N_fix - nop.i 0 -};; - -{ .mfi - getf.sig GR_N_Inc = FR_N_fix // N is the integer part of - // the reduced-reduced argument - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_s = FR_N_float, FR_P_1, FR_ArgPrime // s = -N*P_1 + Arg' - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_w = FR_N_float, FR_P_2, FR_w // w = -N*P_2 + w - nop.i 0 -};; - -// -// For |s| > 2**(-14) r = S + w (r complete) -// Else U_hi = N_0 * d_1 -// -{ .mfi - nop.m 0 - fcmp.lt.unc.s1 p9, p8 = FR_s, FR_Two_to_M14 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p9) fcmp.gt.s1 p9, p8 = FR_s, FR_Neg_Two_to_M14 // p9 if |s| < 2^-14 - nop.i 0 -};; - -// -// Either S <= -2**(-14) or S >= 2**(-14) -// or -2**(-14) < s < 2**(-14) -// -{ .mfi - nop.m 0 -(p9) fma.s1 FR_V_hi = FR_N_float, FR_P_2, f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 FR_U_hi = FR_N_0, FR_d_1, f0 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p8) fma.s1 FR_r = FR_s, f1, FR_w - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 FR_w = FR_N_float, FR_P_3, f0 - nop.i 0 -};; - -// -// We need abs of both U_hi and V_hi - don't -// worry about switched sign of V_hi. -// -// Big s: finish up c = (S - r) + w (c complete) -// Case 4: A = U_hi + V_hi -// Note: Worry about switched sign of V_hi, so subtract instead of add. -// -{ .mfi - nop.m 0 -(p9) fms.s1 FR_A = FR_U_hi, f1, FR_V_hi - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fnma.s1 FR_V_lo = FR_N_float, FR_P_2, FR_V_hi - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p9) fmerge.s FR_V_hiabs = f0, FR_V_hi - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fms.s1 FR_U_lo = FR_N_0, FR_d_1, FR_U_hi // For small s: U_lo=N_0*d_1-U_hi - nop.i 0 -};; - -// -// For big s: Is |r| < 2**(-3) -// For big s: if p12 set, prepare to branch to Small_R. -// For big s: If p13 set, prepare to branch to Normal_R. -// -{ .mfi - nop.m 0 -(p9) fmerge.s FR_U_hiabs = f0, FR_U_hi - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fms.s1 FR_c = FR_s, f1, FR_r // For big s: c = S - r - nop.i 0 -};; - -// -// For small S: V_hi = N * P_2 -// w = N * P_3 -// Note the product does not include the (-) as in the writeup -// so (-) missing for V_hi and w. -// -{ .mfi - nop.m 0 -(p8) fcmp.lt.unc.s1 p12, p13 = FR_r, FR_Two_to_M3 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p12) fcmp.gt.s1 p12, p13 = FR_r, FR_Neg_Two_to_M3 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p8) fma.s1 FR_c = FR_c, f1, FR_w - nop.i 0 -} -{ .mfb - nop.m 0 -(p9) fms.s1 FR_w = FR_N_0, FR_d_2, FR_w -(p12) br.cond.spnt SINCOSL_SMALL_R // Branch if |r| < 2^-3 - // and 2^24 <= |x| < 2^63 -};; - -{ .mib - nop.m 0 - nop.i 0 -(p13) br.cond.sptk SINCOSL_NORMAL_R // Branch if |r| >= 2^-3 - // and 2^24 <= |x| < 2^63 -};; - -SINCOSL_LARGER_S_TINY: -// Here if |s| < 2^-14, and 2^24 <= |x| < 2^63 -// -// Big s: Vector off when |r| < 2**(-3). Recall that p8 will be true. -// The remaining stuff is for Case 4. -// Small s: V_lo = N * P_2 + U_hi (U_hi is in place of V_hi in writeup) -// Note: the (-) is still missing for V_lo. -// Small s: w = w + N_0 * d_2 -// Note: the (-) is now incorporated in w. -// -{ .mfi - and GR_N_SinCos = 0x1, GR_N_Inc - fcmp.ge.unc.s1 p6, p7 = FR_U_hiabs, FR_V_hiabs - tbit.z p8,p12 = GR_N_Inc, 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_t = FR_U_lo, f1, FR_V_lo // C_hi = S + A - nop.i 0 -};; - -{ .mfi - sub GR_N_SignS = GR_N_Inc, GR_N_SinCos -(p6) fms.s1 FR_a = FR_U_hi, f1, FR_A - add GR_N_SignC = GR_N_Inc, GR_N_SinCos -} -{ .mfi - nop.m 0 -(p7) fma.s1 FR_a = FR_V_hi, f1, FR_A - nop.i 0 -};; - -{ .mmf - ldfe FR_C_1 = [GR_ad_c], 16 - ldfe FR_S_1 = [GR_ad_s], 16 - fma.s1 FR_C_hi = FR_s, f1, FR_A -};; - -{ .mmi - ldfe FR_C_2 = [GR_ad_c], 64 - ldfe FR_S_2 = [GR_ad_s], 64 -(p8) tbit.z.unc p10,p11 = GR_N_SignC, 1 -};; - -// -// r and c have been computed. -// Make sure ftz mode is set - should be automatic when using wre -// |r| < 2**(-3) -// Get [i_0,i_1] - two lsb of N_fix. -// -// For larger u than v: a = U_hi - A -// Else a = V_hi - A (do an add to account for missing (-) on V_hi -// -{ .mfi - nop.m 0 - fma.s1 FR_t = FR_t, f1, FR_w // t = t + w -(p8) tbit.z.unc p8,p9 = GR_N_SignS, 1 -} -{ .mfi - nop.m 0 -(p6) fms.s1 FR_a = FR_a, f1, FR_V_hi - nop.i 0 -};; - -// -// If u > v: a = (U_hi - A) + V_hi -// Else a = (V_hi - A) + U_hi -// In each case account for negative missing from V_hi. -// -{ .mfi - nop.m 0 - fms.s1 FR_C_lo = FR_s, f1, FR_C_hi -(p12) tbit.z.unc p14,p15 = GR_N_SignC, 1 -} -{ .mfi - nop.m 0 -(p7) fms.s1 FR_a = FR_U_hi, f1, FR_a - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_C_lo = FR_C_lo, f1, FR_A // C_lo = (S - C_hi) + A -(p12) tbit.z.unc p12,p13 = GR_N_SignS, 1 -} -{ .mfi - nop.m 0 - fma.s1 FR_t = FR_t, f1, FR_a // t = t + a - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r = FR_C_hi, f1, FR_C_lo - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_C_lo = FR_C_lo, f1, FR_t // C_lo = C_lo + t - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fma.s1 FR_rsq = FR_r, FR_r, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_c = FR_C_hi, f1, FR_r - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_FirstS = f0, f1, FR_r - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_FirstC = f0, f1, f1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_polyS = FR_rsq, FR_S_2, FR_S_1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_polyC = FR_rsq, FR_C_2, FR_C_1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_cubed = FR_rsq, FR_r, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_c = FR_c, f1, FR_C_lo - nop.i 0 -};; - -.pred.rel "mutex",p9,p15 -{ .mfi - nop.m 0 -(p9) fms.s0 FR_FirstS = f1, f0, FR_FirstS - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fms.s0 FR_FirstS = f1, f0, FR_FirstS - nop.i 0 -};; - -.pred.rel "mutex",p11,p13 -{ .mfi - nop.m 0 -(p11) fms.s0 FR_FirstC = f1, f0, FR_FirstC - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fms.s0 FR_FirstC = f1, f0, FR_FirstC - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fma.s1 FR_polyS = FR_r_cubed, FR_polyS, FR_c - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_polyC = FR_rsq, FR_polyC, f0 - nop.i 0 -};; - - - -.pred.rel "mutex",p8,p9 -{ .mfi - nop.m 0 -(p8) fma.s0 FR_ResultS = FR_FirstS, f1, FR_polyS - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fms.s0 FR_ResultS = FR_FirstS, f1, FR_polyS - nop.i 0 -};; - -.pred.rel "mutex",p10,p11 -{ .mfi - nop.m 0 -(p10) fma.s0 FR_ResultC = FR_FirstC, f1, FR_polyC - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fms.s0 FR_ResultC = FR_FirstC, f1, FR_polyC - nop.i 0 -};; - - - -.pred.rel "mutex",p12,p13 -{ .mfi - nop.m 0 -(p12) fma.s0 FR_ResultS = FR_FirstC, f1, FR_polyC - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fms.s0 FR_ResultS = FR_FirstC, f1, FR_polyC - nop.i 0 -};; - -.pred.rel "mutex",p14,p15 -{ .mfi - nop.m 0 -(p14) fma.s0 FR_ResultC = FR_FirstS, f1, FR_polyS - nop.i 0 -} -{ .mfb - cmp.eq p10, p0 = 0x1, GR_Cis -(p15) fms.s0 FR_ResultC = FR_FirstS, f1, FR_polyS -(p10) br.ret.sptk b0 -};; - - -{ .mmb // exit for sincosl - stfe [sincos_pResSin] = FR_ResultS - stfe [sincos_pResCos] = FR_ResultC - br.ret.sptk b0 -};; - - - -SINCOSL_SMALL_R: -// -// Here if |r| < 2^-3 -// -// Enter with r, c, and N_Inc computed -// -{ .mfi - nop.m 0 - fma.s1 FR_rsq = FR_r, FR_r, f0 // rsq = r * r - nop.i 0 -};; - -{ .mmi - ldfe FR_S_5 = [GR_ad_se], -16 // Load S_5 - ldfe FR_C_5 = [GR_ad_ce], -16 // Load C_5 - nop.i 0 -};; - -{ .mmi - ldfe FR_S_4 = [GR_ad_se], -16 // Load S_4 - ldfe FR_C_4 = [GR_ad_ce], -16 // Load C_4 - nop.i 0 -};; - -SINCOSL_SMALL_R_0: -// Entry point for 2^-3 < |x| < pi/4 -SINCOSL_SMALL_R_1: -// Entry point for pi/4 < |x| < 2^24 and |r| < 2^-3 -{ .mfi - ldfe FR_S_3 = [GR_ad_se], -16 // Load S_3 - fma.s1 FR_r6 = FR_rsq, FR_rsq, f0 // Z = rsq * rsq - tbit.z p7,p11 = GR_N_Inc, 0 -} -{ .mfi - ldfe FR_C_3 = [GR_ad_ce], -16 // Load C_3 - nop.f 0 - and GR_N_SinCos = 0x1, GR_N_Inc -};; - -{ .mfi - ldfe FR_S_2 = [GR_ad_se], -16 // Load S_2 - fnma.s1 FR_cC = FR_c, FR_r, f0 // c = -c * r - sub GR_N_SignS = GR_N_Inc, GR_N_SinCos -} -{ .mfi - ldfe FR_C_2 = [GR_ad_ce], -16 // Load C_2 - nop.f 0 - add GR_N_SignC = GR_N_Inc, GR_N_SinCos -};; - -{ .mmi - ldfe FR_S_1 = [GR_ad_se], -16 // Load S_1 - ldfe FR_C_1 = [GR_ad_ce], -16 // Load C_1 -(p7) tbit.z.unc p9,p10 = GR_N_SignC, 1 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r7 = FR_r6, FR_r, f0 // Z = Z * r -(p7) tbit.z.unc p7,p8 = GR_N_SignS, 1 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_loS = FR_rsq, FR_S_5, FR_S_4 // poly_lo=rsq*S_5+S_4 -(p11) tbit.z.unc p13,p14 = GR_N_SignC, 1 -} -{ .mfi - nop.m 0 - fma.s1 FR_poly_loC = FR_rsq, FR_C_5, FR_C_4 // poly_lo=rsq*C_5+C_4 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_hiS = FR_rsq, FR_S_2, FR_S_1 // poly_hi=rsq*S_2+S_1 -(p11) tbit.z.unc p11,p12 = GR_N_SignS, 1 -} -{ .mfi - nop.m 0 - fma.s1 FR_poly_hiC = FR_rsq, FR_C_2, FR_C_1 // poly_hi=rsq*C_2+C_1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s0 FR_FirstS = FR_r, f1, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s0 FR_FirstC = f1, f1, f0 - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fma.s1 FR_r6 = FR_r6, FR_rsq, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r7 = FR_r7, FR_rsq, f0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_loS = FR_rsq, FR_poly_loS, FR_S_3 // p_lo=p_lo*rsq+S_3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_poly_loC = FR_rsq, FR_poly_loC, FR_C_3 // p_lo=p_lo*rsq+C_3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s0 FR_inexact = FR_S_4, FR_S_4, f0 // Dummy op to set inexact - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_hiS = FR_poly_hiS, FR_rsq, f0 // p_hi=p_hi*rsq - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_poly_hiC = FR_poly_hiC, FR_rsq, f0 // p_hi=p_hi*rsq - nop.i 0 -};; - -.pred.rel "mutex",p8,p14 -{ .mfi - nop.m 0 -(p8) fms.s0 FR_FirstS = f1, f0, FR_FirstS - nop.i 0 -} -{ .mfi - nop.m 0 -(p14) fms.s0 FR_FirstS = f1, f0, FR_FirstS - nop.i 0 -};; - -.pred.rel "mutex",p10,p12 -{ .mfi - nop.m 0 -(p10) fms.s0 FR_FirstC = f1, f0, FR_FirstC - nop.i 0 -} -{ .mfi - nop.m 0 -(p12) fms.s0 FR_FirstC = f1, f0, FR_FirstC - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_polyS = FR_r7, FR_poly_loS, FR_cS // poly=Z*poly_lo+c - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_polyC = FR_r6, FR_poly_loC, FR_cC // poly=Z*poly_lo+c - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_hiS = FR_r, FR_poly_hiS, f0 // p_hi=r*p_hi - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fma.s1 FR_polyS = FR_polyS, f1, FR_poly_hiS - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_polyC = FR_polyC, f1, FR_poly_hiC - nop.i 0 -};; - -.pred.rel "mutex",p7,p8 -{ .mfi - nop.m 0 -(p7) fma.s0 FR_ResultS = FR_FirstS, f1, FR_polyS - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fms.s0 FR_ResultS = FR_FirstS, f1, FR_polyS - nop.i 0 -};; - -.pred.rel "mutex",p9,p10 -{ .mfi - nop.m 0 -(p9) fma.s0 FR_ResultC = FR_FirstC, f1, FR_polyC - nop.i 0 -} -{ .mfi - nop.m 0 -(p10) fms.s0 FR_ResultC = FR_FirstC, f1, FR_polyC - nop.i 0 -};; - -.pred.rel "mutex",p11,p12 -{ .mfi - nop.m 0 -(p11) fma.s0 FR_ResultS = FR_FirstC, f1, FR_polyC - nop.i 0 -} -{ .mfi - nop.m 0 -(p12) fms.s0 FR_ResultS = FR_FirstC, f1, FR_polyC - nop.i 0 -};; - -.pred.rel "mutex",p13,p14 -{ .mfi - nop.m 0 -(p13) fma.s0 FR_ResultC = FR_FirstS, f1, FR_polyS - nop.i 0 -} -{ .mfb - cmp.eq p15, p0 = 0x1, GR_Cis -(p14) fms.s0 FR_ResultC = FR_FirstS, f1, FR_polyS -(p15) br.ret.sptk b0 -};; - - -{ .mmb // exit for sincosl - stfe [sincos_pResSin] = FR_ResultS - stfe [sincos_pResCos] = FR_ResultC - br.ret.sptk b0 -};; - - - - - - -SINCOSL_NORMAL_R: -// -// Here if 2^-3 <= |r| < pi/4 -// THIS IS THE MAIN PATH -// -// Enter with r, c, and N_Inc having been computed -// -{ .mfi - ldfe FR_PP_6 = [GR_ad_pp], 16 // Load PP_6 - fma.s1 FR_rsq = FR_r, FR_r, f0 // rsq = r * r - nop.i 0 -} -{ .mfi - ldfe FR_QQ_6 = [GR_ad_qq], 16 // Load QQ_6 - nop.f 0 - nop.i 0 -};; - -{ .mmi - ldfe FR_PP_5 = [GR_ad_pp], 16 // Load PP_5 - ldfe FR_QQ_5 = [GR_ad_qq], 16 // Load QQ_5 - nop.i 0 -};; - - - -SINCOSL_NORMAL_R_0: -// Entry for 2^-3 < |x| < pi/4 -.pred.rel "mutex",p9,p10 -{ .mmf - ldfe FR_C_1 = [GR_ad_pp], 16 // Load C_1 - ldfe FR_S_1 = [GR_ad_qq], 16 // Load S_1 - frcpa.s1 FR_r_hi, p6 = f1, FR_r // r_hi = frcpa(r) -};; - -{ .mfi - nop.m 0 - fma.s1 FR_polyS = FR_rsq, FR_PP_8, FR_PP_7 // poly = rsq*PP_8+PP_7 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_polyC = FR_rsq, FR_QQ_8, FR_QQ_7 // poly = rsq*QQ_8+QQ_7 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_cubed = FR_r, FR_rsq, f0 // rcubed = r * rsq - nop.i 0 -};; - - -SINCOSL_NORMAL_R_1: -// Entry for pi/4 <= |x| < 2^24 -.pred.rel "mutex",p9,p10 -{ .mmf - ldfe FR_PP_1 = [GR_ad_pp], 16 // Load PP_1_hi - ldfe FR_QQ_1 = [GR_ad_qq], 16 // Load QQ_1 - frcpa.s1 FR_r_hi, p6 = f1, FR_r_hi // r_hi = frpca(frcpa(r)) -};; - -{ .mfi - ldfe FR_PP_4 = [GR_ad_pp], 16 // Load PP_4 - fma.s1 FR_polyS = FR_rsq, FR_polyS, FR_PP_6 // poly = rsq*poly+PP_6 - and GR_N_SinCos = 0x1, GR_N_Inc -} -{ .mfi - ldfe FR_QQ_4 = [GR_ad_qq], 16 // Load QQ_4 - fma.s1 FR_polyC = FR_rsq, FR_polyC, FR_QQ_6 // poly = rsq*poly+QQ_6 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_corrS = FR_C_1, FR_rsq, f0 // corr = C_1 * rsq - sub GR_N_SignS = GR_N_Inc, GR_N_SinCos -} -{ .mfi - nop.m 0 - fma.s1 FR_corrC = FR_S_1, FR_r_cubed, FR_r // corr = S_1 * r^3 + r - add GR_N_SignC = GR_N_Inc, GR_N_SinCos -};; - -{ .mfi - ldfe FR_PP_3 = [GR_ad_pp], 16 // Load PP_3 - fma.s1 FR_r_hi_sq = FR_r_hi, FR_r_hi, f0 // r_hi_sq = r_hi * r_hi - tbit.z p7,p11 = GR_N_Inc, 0 -} -{ .mfi - ldfe FR_QQ_3 = [GR_ad_qq], 16 // Load QQ_3 - fms.s1 FR_r_lo = FR_r, f1, FR_r_hi // r_lo = r - r_hi - nop.i 0 -};; - -{ .mfi - ldfe FR_PP_2 = [GR_ad_pp], 16 // Load PP_2 - fma.s1 FR_polyS = FR_rsq, FR_polyS, FR_PP_5 // poly = rsq*poly+PP_5 -(p7) tbit.z.unc p9,p10 = GR_N_SignC, 1 -} -{ .mfi - ldfe FR_QQ_2 = [GR_ad_qq], 16 // Load QQ_2 - fma.s1 FR_polyC = FR_rsq, FR_polyC, FR_QQ_5 // poly = rsq*poly+QQ_5 - nop.i 0 -};; - -{ .mfi - ldfe FR_PP_1_lo = [GR_ad_pp], 16 // Load PP_1_lo - fma.s1 FR_corrS = FR_corrS, FR_c, FR_c // corr = corr * c + c -(p7) tbit.z.unc p7,p8 = GR_N_SignS, 1 -} -{ .mfi - nop.m 0 - fnma.s1 FR_corrC = FR_corrC, FR_c, f0 // corr = -corr * c - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_U_loS = FR_r, FR_r_hi, FR_r_hi_sq // U_lo = r*r_hi+r_hi_sq -(p11) tbit.z.unc p13,p14 = GR_N_SignC, 1 -} -{ .mfi - nop.m 0 - fma.s1 FR_U_loC = FR_r_hi, f1, FR_r // U_lo = r_hi + r - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_U_hiS = FR_r_hi, FR_r_hi_sq, f0 // U_hi = r_hi*r_hi_sq -(p11) tbit.z.unc p11,p12 = GR_N_SignS, 1 -} -{ .mfi - nop.m 0 - fma.s1 FR_U_hiC = FR_QQ_1, FR_r_hi_sq, f1 // U_hi = QQ_1*r_hi_sq+1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_polyS = FR_rsq, FR_polyS, FR_PP_4 // poly = poly*rsq+PP_4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_polyC = FR_rsq, FR_polyC, FR_QQ_4 // poly = poly*rsq+QQ_4 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_U_loS = FR_r, FR_r, FR_U_loS // U_lo = r * r + U_lo - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_U_loC = FR_r_lo, FR_U_loC, f0 // U_lo = r_lo * U_lo - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_U_hiS = FR_PP_1, FR_U_hiS, f0 // U_hi = PP_1 * U_hi - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_polyS = FR_rsq, FR_polyS, FR_PP_3 // poly = poly*rsq+PP_3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_polyC = FR_rsq, FR_polyC, FR_QQ_3 // poly = poly*rsq+QQ_3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_U_loS = FR_r_lo, FR_U_loS, f0 // U_lo = r_lo * U_lo - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_U_loC = FR_QQ_1,FR_U_loC, f0 // U_lo = QQ_1 * U_lo - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_U_hiS = FR_r, f1, FR_U_hiS // U_hi = r + U_hi - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_polyS = FR_rsq, FR_polyS, FR_PP_2 // poly = poly*rsq+PP_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_polyC = FR_rsq, FR_polyC, FR_QQ_2 // poly = poly*rsq+QQ_2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_U_loS = FR_PP_1, FR_U_loS, f0 // U_lo = PP_1 * U_lo - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_polyS = FR_rsq, FR_polyS, FR_PP_1_lo // poly =poly*rsq+PP1lo - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_polyC = FR_rsq, FR_polyC, f0 // poly = poly*rsq - nop.i 0 -};; - - -.pred.rel "mutex",p8,p14 -{ .mfi - nop.m 0 -(p8) fms.s0 FR_U_hiS = f1, f0, FR_U_hiS - nop.i 0 -} -{ .mfi - nop.m 0 -(p14) fms.s0 FR_U_hiS = f1, f0, FR_U_hiS - nop.i 0 -};; - -.pred.rel "mutex",p10,p12 -{ .mfi - nop.m 0 -(p10) fms.s0 FR_U_hiC = f1, f0, FR_U_hiC - nop.i 0 -} -{ .mfi - nop.m 0 -(p12) fms.s0 FR_U_hiC = f1, f0, FR_U_hiC - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fma.s1 FR_VS = FR_U_loS, f1, FR_corrS // V = U_lo + corr - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_VC = FR_U_loC, f1, FR_corrC // V = U_lo + corr - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s0 FR_inexact = FR_PP_5, FR_PP_4, f0 // Dummy op to set inexact - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fma.s1 FR_polyS = FR_r_cubed, FR_polyS, f0 // poly = poly*r^3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_polyC = FR_rsq, FR_polyC, f0 // poly = poly*rsq - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fma.s1 FR_VS = FR_polyS, f1, FR_VS // V = poly + V - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_VC = FR_polyC, f1, FR_VC // V = poly + V - nop.i 0 -};; - - - -.pred.rel "mutex",p7,p8 -{ .mfi - nop.m 0 -(p7) fma.s0 FR_ResultS = FR_U_hiS, f1, FR_VS - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fms.s0 FR_ResultS = FR_U_hiS, f1, FR_VS - nop.i 0 -};; - -.pred.rel "mutex",p9,p10 -{ .mfi - nop.m 0 -(p9) fma.s0 FR_ResultC = FR_U_hiC, f1, FR_VC - nop.i 0 -} -{ .mfi - nop.m 0 -(p10) fms.s0 FR_ResultC = FR_U_hiC, f1, FR_VC - nop.i 0 -};; - - - -.pred.rel "mutex",p11,p12 -{ .mfi - nop.m 0 -(p11) fma.s0 FR_ResultS = FR_U_hiC, f1, FR_VC - nop.i 0 -} -{ .mfi - nop.m 0 -(p12) fms.s0 FR_ResultS = FR_U_hiC, f1, FR_VC - nop.i 0 -};; - -.pred.rel "mutex",p13,p14 -{ .mfi - nop.m 0 -(p13) fma.s0 FR_ResultC = FR_U_hiS, f1, FR_VS - nop.i 0 -} -{ .mfb - cmp.eq p15, p0 = 0x1, GR_Cis -(p14) fms.s0 FR_ResultC = FR_U_hiS, f1, FR_VS -(p15) br.ret.sptk b0 -};; - -{ .mmb // exit for sincosl - stfe [sincos_pResSin] = FR_ResultS - stfe [sincos_pResCos] = FR_ResultC - br.ret.sptk b0 -};; - - - - - -SINCOSL_ZERO: - -{ .mfi - nop.m 0 - fmerge.s FR_ResultS = FR_Input_X, FR_Input_X // If sin, result = input - nop.i 0 -} -{ .mfb - cmp.eq p15, p0 = 0x1, GR_Cis - fma.s0 FR_ResultC = f1, f1, f0 // If cos, result=1.0 -(p15) br.ret.sptk b0 -};; - -{ .mmb // exit for sincosl - stfe [sincos_pResSin] = FR_ResultS - stfe [sincos_pResCos] = FR_ResultC - br.ret.sptk b0 -};; - - -SINCOSL_DENORMAL: -{ .mmb - getf.exp GR_signexp_x = FR_norm_x // Get sign and exponent of x - nop.m 999 - br.cond.sptk SINCOSL_COMMON2 // Return to common code -} -;; - - -SINCOSL_SPECIAL: -// -// Path for Arg = +/- QNaN, SNaN, Inf -// Invalid can be raised. SNaNs -// become QNaNs -// -{ .mfi - cmp.eq p15, p0 = 0x1, GR_Cis - fmpy.s0 FR_ResultS = FR_Input_X, f0 - nop.i 0 -} -{ .mfb - nop.m 0 - fmpy.s0 FR_ResultC = FR_Input_X, f0 -(p15) br.ret.sptk b0 -};; - -{ .mmb // exit for sincosl - stfe [sincos_pResSin] = FR_ResultS - stfe [sincos_pResCos] = FR_ResultC - br.ret.sptk b0 -};; - -GLOBAL_LIBM_END(__libm_sincosl) - - -// ******************************************************************* -// ******************************************************************* -// ******************************************************************* -// -// Special Code to handle very large argument case. -// Call int __libm_pi_by_2_reduce(x,r,c) for |arguments| >= 2**63 -// The interface is custom: -// On input: -// (Arg or x) is in f8 -// On output: -// r is in f8 -// c is in f9 -// N is in r8 -// Be sure to allocate at least 2 GP registers as output registers for -// __libm_pi_by_2_reduce. This routine uses r62-63. These are used as -// scratch registers within the __libm_pi_by_2_reduce routine (for speed). -// -// We know also that __libm_pi_by_2_reduce preserves f10-15, f71-127. We -// use this to eliminate save/restore of key fp registers in this calling -// function. -// -// ******************************************************************* -// ******************************************************************* -// ******************************************************************* - -LOCAL_LIBM_ENTRY(__libm_callout) -SINCOSL_ARG_TOO_LARGE: -.prologue -{ .mfi - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -};; - -{ .mmi - setf.exp FR_Two_to_M3 = GR_exp_2_to_m3 // Form 2^-3 - mov GR_SAVE_GP=gp // Save gp -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -// -// Call argument reduction with x in f8 -// Returns with N in r8, r in f8, c in f9 -// Assumes f71-127 are preserved across the call -// -{ .mib - setf.exp FR_Neg_Two_to_M3 = GR_exp_m2_to_m3 // Form -(2^-3) - nop.i 0 - br.call.sptk b0=__libm_pi_by_2_reduce# -};; - -{ .mfi - mov GR_N_Inc = r8 - fcmp.lt.unc.s1 p6, p0 = FR_r, FR_Two_to_M3 - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mfi - mov gp = GR_SAVE_GP // Restore gp -(p6) fcmp.gt.unc.s1 p6, p0 = FR_r, FR_Neg_Two_to_M3 - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs -};; - -{ .mbb - nop.m 0 -(p6) br.cond.spnt SINCOSL_SMALL_R // Branch if |r|< 2^-3 for |x| >= 2^63 - br.cond.sptk SINCOSL_NORMAL_R // Branch if |r|>=2^-3 for |x| >= 2^63 -};; - -LOCAL_LIBM_END(__libm_callout) - -.type __libm_pi_by_2_reduce#,@function -.global __libm_pi_by_2_reduce# diff --git a/sysdeps/ia64/fpu/libm_support.h b/sysdeps/ia64/fpu/libm_support.h deleted file mode 100644 index dc9c0a2648..0000000000 --- a/sysdeps/ia64/fpu/libm_support.h +++ /dev/null @@ -1,1051 +0,0 @@ -/* file: libm_support.h */ - - -/* -// Copyright (c) 2000 - 2004, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// - -// History: 02/02/2000 Initial version -// 2/28/2000 added tags for logb and nextafter -// 3/22/2000 Changes to support _LIB_VERSIONIMF variable -// and filled some enum gaps. Added support for C99. -// 5/31/2000 added prototypes for __libm_frexp_4l/8l -// 8/10/2000 Changed declaration of _LIB_VERSIONIMF to work for library -// builds and other application builds (precompiler directives). -// 8/11/2000 Added pointers-to-matherr-functions declarations to allow -// for user-defined matherr functions in the dll build. -// 12/07/2000 Added scalbn error_types values. -// 5/01/2001 Added error_types values for C99 nearest integer -// functions. -// 6/07/2001 Added error_types values for fdim. -// 6/18/2001 Added include of complex_support.h. -// 8/03/2001 Added error_types values for nexttoward, scalbln. -// 8/23/2001 Corrected tag numbers from 186 and higher. -// 8/27/2001 Added check for long int and long long int definitions. -// 12/10/2001 Added error_types for erfc. -// 12/27/2001 Added error_types for degree argument functions. -// 01/02/2002 Added error_types for tand, cotd. -// 01/04/2002 Delete include of complex_support.h -// 01/23/2002 Deleted prototypes for __libm_frexp*. Added check for -// multiple int, long int, and long long int definitions. -// 05/20/2002 Added error_types for cot. -// 06/27/2002 Added error_types for sinhcosh. -// 12/05/2002 Added error_types for annuity and compound -// 04/10/2003 Added error_types for tgammal/tgamma/tgammaf -// 05/16/2003 FP-treatment macros copied here from IA32 libm_support.h -// 06/02/2003 Added pad into struct fp80 (12/16 bytes). -// 08/01/2003 Added struct ker80 and macros for multiprecision addition, -// subtraction, multiplication, division, square root. -// 08/07/2003 History section updated. -// 09/03/2003 ALIGN(n) macro added. -// 10/01/2003 LDOUBLE_ALIGN and fp80 corrected on linux to 16 bytes. -// 11/24/2004 Added ifdef around definitions of INT32/64 -// 12/15/2004 Added error_types for exp10, nextafter, nexttoward -// underflow. Moved error codes into libm_error_codes.h. -// -*/ - -#ifndef __LIBM_SUPPORT_H_INCLUDED__ -#define __LIBM_SUPPORT_H_INCLUDED__ - -#ifndef _LIBC -#if !(defined(_WIN32) || defined(_WIN64)) -# pragma const_seg(".rodata") /* place constant data in text (code) section */ -#endif - -#if defined(__ICC) || defined(__ICL) || defined(__ECC) || defined(__ECL) -# pragma warning( disable : 1682 ) /* #1682: ixplicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem) */ -# pragma warning( disable : 1683 ) /* #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem) */ -#endif -#endif - -/* macros to form a double value in hex representation (unsigned int type) */ - -#define DOUBLE_HEX(hi,lo) 0x##lo,0x##hi /*LITTLE_ENDIAN*/ - -#include "libm_cpu_defs.h" - -#if !(defined (IA64)) -# include "libm_dll.h" -# include "libm_dispatch.h" -#endif - -#include "libm_error_codes.h" - -struct exceptionf -{ - int type; - char *name; - float arg1, arg2, retval; -}; - -# ifdef __cplusplus -struct __exception -{ - int type; - char *name; - double arg1, arg2, retval; -}; -# else - -# ifndef _LIBC -struct exception -{ - int type; - char *name; - double arg1, arg2, retval; -}; -# endif -# endif - -struct exceptionl -{ - int type; - char *name; - long double arg1, arg2, retval; -}; - -#if (defined (_MS_) && defined (IA64)) -#define MATHERR_F _matherrf -#define MATHERR_D _matherr -#else -#define MATHERR_F matherrf -#define MATHERR_D matherr -#endif - -# ifdef __cplusplus -#define EXC_DECL_D __exception -#else -// exception is a reserved name in C++ -#define EXC_DECL_D exception -#endif - -extern int MATHERR_F(struct exceptionf*); -extern int MATHERR_D(struct EXC_DECL_D*); -extern int matherrl(struct exceptionl*); - -#ifndef _LIBC -// Add code to support _LIB_VERSIONIMF -typedef enum -{ - _IEEE_ = -1, // IEEE-like behavior - _SVID_, // SysV, Rel. 4 behavior - _XOPEN_, // Unix98 - _POSIX_, // Posix - _ISOC_ // ISO C9X -} _LIB_VERSION_TYPE; -#endif - -// This is a run-time variable and may affect -// floating point behavior of the libm functions - -#if !defined( LIBM_BUILD ) -#if defined( _DLL ) -extern _LIB_VERSION_TYPE __declspec(dllimport) _LIB_VERSIONIMF; -#else -extern _LIB_VERSION_TYPE _LIB_VERSIONIMF; -#endif /* _DLL */ -#else -extern int (*pmatherrf)(struct exceptionf*); -extern int (*pmatherr)(struct EXC_DECL_D*); -extern int (*pmatherrl)(struct exceptionl*); -#endif /* LIBM_BUILD */ - -/* memory format definitions (LITTLE_ENDIAN only) */ - -#if !(defined(SIZE_INT_32) || defined(SIZE_INT_64)) -# error "You need to define SIZE_INT_32 or SIZE_INT_64" -#endif - -#if (defined(SIZE_INT_32) && defined(SIZE_INT_64)) -#error multiple integer size definitions; define SIZE_INT_32 or SIZE_INT_64 -#endif - -#if !(defined(SIZE_LONG_32) || defined(SIZE_LONG_64)) -# error "You need to define SIZE_LONG_32 or SIZE_LONG_64" -#endif - -#if (defined(SIZE_LONG_32) && defined(SIZE_LONG_64)) -#error multiple integer size definitions; define SIZE_LONG_32 or SIZE_LONG_64 -#endif - -#if !defined(__USE_EXTERNAL_FPMEMTYP_H__) - -#define BIAS_32 0x007F -#define BIAS_64 0x03FF -#define BIAS_80 0x3FFF - -#define MAXEXP_32 0x00FE -#define MAXEXP_64 0x07FE -#define MAXEXP_80 0x7FFE - -#define EXPINF_32 0x00FF -#define EXPINF_64 0x07FF -#define EXPINF_80 0x7FFF - -struct fp32 { /*// sign:1 exponent:8 significand:23 (implied leading 1)*/ -#if defined(SIZE_INT_32) - unsigned significand:23; - unsigned exponent:8; - unsigned sign:1; -#elif defined(SIZE_INT_64) - unsigned significand:23; - unsigned exponent:8; - unsigned sign:1; -#endif -}; - -struct fp64 { /*/ sign:1 exponent:11 significand:52 (implied leading 1)*/ -#if defined(SIZE_INT_32) - unsigned lo_significand:32; - unsigned hi_significand:20; - unsigned exponent:11; - unsigned sign:1; -#elif defined(SIZE_INT_64) - unsigned significand:52; - unsigned exponent:11; - unsigned sign:1; -#endif -}; - -struct fp80 { /*/ sign:1 exponent:15 significand:64 (NO implied bits) */ -#if defined(SIZE_INT_32) - unsigned lo_significand; - unsigned hi_significand; - unsigned exponent:15; - unsigned sign:1; -#elif defined(SIZE_INT_64) - unsigned significand; - unsigned exponent:15; - unsigned sign:1; -#endif - unsigned pad:16; -#if !(defined(__unix__) && defined(__i386__)) - unsigned padwin:32; -#endif -}; - -#endif /*__USE_EXTERNAL_FPMEMTYP_H__*/ - -#if !(defined(opensource)) -typedef __int32 INT32; -typedef signed __int32 SINT32; -typedef unsigned __int32 UINT32; - -typedef __int64 INT64; -typedef signed __int64 SINT64; -typedef unsigned __int64 UINT64; -#else -typedef int INT32; -typedef signed int SINT32; -typedef unsigned int UINT32; - -typedef long long INT64; -typedef signed long long SINT64; -typedef unsigned long long UINT64; -#endif - -#if (defined(_WIN32) || defined(_WIN64)) /* Windows */ -# define I64CONST(bits) 0x##bits##i64 -# define U64CONST(bits) 0x##bits##ui64 -#elif (defined(__linux__) && defined(_M_IA64)) /* Linux,64 */ -# define I64CONST(bits) 0x##bits##L -# define U64CONST(bits) 0x##bits##uL -#else /* Linux,32 */ -# define I64CONST(bits) 0x##bits##LL -# define U64CONST(bits) 0x##bits##uLL -#endif - -struct ker80 { - union { - long double ldhi; - struct fp80 fphi; - }; - union { - long double ldlo; - struct fp80 fplo; - }; - int ex; -}; - -/* Addition: x+y */ -/* The result is sum rhi+rlo */ -/* Temporary variables: t1 */ -/* All variables are in long double precision */ -/* Correct if no overflow (algorithm by D.Knuth) */ -#define __LIBM_ADDL1_K80( rhi,rlo,x,y, t1 ) \ - rhi = x + y; \ - rlo = rhi - x; \ - t1 = rhi - rlo; \ - rlo = y - rlo; \ - t1 = x - t1; \ - rlo = rlo + t1; - -/* Addition: (xhi+xlo) + (yhi+ylo) */ -/* The result is sum rhi+rlo */ -/* Temporary variables: t1 */ -/* All variables are in long double precision */ -/* Correct if no overflow (algorithm by T.J.Dekker) */ -#define __LIBM_ADDL2_K80( rhi,rlo,xhi,xlo,yhi,ylo, t1 ) \ - rlo = xhi+yhi; \ - if ( VALUE_GT_80(FP80(xhi),FP80(yhi)) ) { \ - t1=xhi-rlo;t1=t1+yhi;t1=t1+ylo;t1=t1+xlo; \ - } else { \ - t1=yhi-rlo;t1=t1+xhi;t1=t1+xlo;t1=t1+ylo; \ - } \ - rhi=rlo+t1; \ - rlo=rlo-rhi;rlo=rlo+t1; - -/* Addition: r=x+y */ -/* Variables r,x,y are pointers to struct ker80, */ -/* all other variables are in long double precision */ -/* Temporary variables: t1 */ -/* Correct if x and y belong to interval [2^-8000;2^8000], */ -/* or when one or both of them are zero */ -#if defined(SIZE_INT_32) -#define __LIBM_ADDL_K80(r,x,y, t1) \ - if ( ((y)->ex+(y)->fphi.exponent-134 < \ - (x)->ex+(x)->fphi.exponent) && \ - ((x)->ex+(x)->fphi.exponent < \ - (y)->ex+(y)->fphi.exponent+134) && \ - !SIGNIFICAND_ZERO_80(&((x)->fphi)) && \ - !SIGNIFICAND_ZERO_80(&((y)->fphi)) ) \ - { \ - /* y/2^134 < x < y*2^134, */ \ - /* and x,y are nonzero finite numbers */ \ - if ( (x)->ex != (y)->ex ) { \ - /* adjust x->ex to y->ex */ \ - /* t1 = 2^(x->ex - y->ex) */ \ - FP80(t1)->sign = 0; \ - FP80(t1)->exponent = BIAS_80 + (x)->ex-(y)->ex; \ - /* exponent is correct because */ \ - /* |x->ex - y->ex| = */ \ - /* = | (x->ex + x->fphi.exponent) - */ \ - /* -(y->ex + y->fphi.exponent) + */ \ - /* + y->fphi.exponent - */ \ - /* - x->fphi.exponent | < */ \ - /* < | (x->ex+x->fphi.exponent) - */ \ - /* -(y->ex+y->fphi.exponent) | + */ \ - /* +| y->fphi.exponent - */ \ - /* -x->fphi.exponent | < */ \ - /* < 134 + 16000 */ \ - FP80(t1)->hi_significand = 0x80000000; \ - FP80(t1)->lo_significand = 0x00000000; \ - (x)->ex = (y)->ex; \ - (x)->ldhi *= t1; \ - (x)->ldlo *= t1; \ - } \ - /* r==x+y */ \ - (r)->ex = (y)->ex; \ - __LIBM_ADDL2_K80( (r)->ldhi,(r)->ldlo, \ - (x)->ldhi,(x)->ldlo, (y)->ldhi,(y)->ldlo, t1 ); \ - } else if ( SIGNIFICAND_ZERO_80(&((x)->fphi)) || \ - ((y)->ex+(y)->fphi.exponent-BIAS_80 - 134 >= \ - (x)->ex+(x)->fphi.exponent-BIAS_80) ) \ - { \ - /* |x|<<|y| */ \ - *(r) = *(y); \ - } else { \ - /* |y|<<|x| */ \ - *(r) = *(x); \ - } -#elif defined(SIZE_INT_64) -#define __LIBM_ADDL_K80(r,x,y, t1) \ - if ( ((y)->ex+(y)->fphi.exponent-134 < \ - (x)->ex+(x)->fphi.exponent) && \ - ((x)->ex+(x)->fphi.exponent < \ - (y)->ex+(y)->fphi.exponent+134) && \ - !SIGNIFICAND_ZERO_80(&((x)->fphi)) && \ - !SIGNIFICAND_ZERO_80(&((y)->fphi)) ) \ - { \ - /* y/2^134 < x < y*2^134, */ \ - /* and x,y are nonzero finite numbers */ \ - if ( (x)->ex != (y)->ex ) { \ - /* adjust x->ex to y->ex */ \ - /* t1 = 2^(x->ex - y->ex) */ \ - FP80(t1)->sign = 0; \ - FP80(t1)->exponent = BIAS_80 + (x)->ex-(y)->ex; \ - /* exponent is correct because */ \ - /* |x->ex - y->ex| = */ \ - /* = | (x->ex + x->fphi.exponent) - */ \ - /* -(y->ex + y->fphi.exponent) + */ \ - /* + y->fphi.exponent - */ \ - /* - x->fphi.exponent | < */ \ - /* < | (x->ex+x->fphi.exponent) - */ \ - /* -(y->ex+y->fphi.exponent) | + */ \ - /* +| y->fphi.exponent - */ \ - /* -x->fphi.exponent | < */ \ - /* < 134 + 16000 */ \ - FP80(t1)->significand = 0x8000000000000000; \ - (x)->ex = (y)->ex; \ - (x)->ldhi *= t1; \ - (x)->ldlo *= t1; \ - } \ - /* r==x+y */ \ - (r)->ex = (y)->ex; \ - __LIBM_ADDL2_K80( (r)->ldhi,(r)->ldlo, \ - (x)->ldhi,(x)->ldlo, (y)->ldhi,(y)->ldlo, t1 ); \ - } else if ( SIGNIFICAND_ZERO_80(&((x)->fphi)) || \ - ((y)->ex+(y)->fphi.exponent-BIAS_80 - 134 >= \ - (x)->ex+(x)->fphi.exponent-BIAS_80) ) \ - { \ - /* |x|<<|y| */ \ - *(r) = *(y); \ - } else { \ - /* |y|<<|x| */ \ - *(r) = *(x); \ - } -#endif - -/* Addition: r=x+y */ -/* Variables r,x,y are pointers to struct ker80, */ -/* all other variables are in long double precision */ -/* Temporary variables: t1 */ -/* Correct for any finite x and y */ -#define __LIBM_ADDL_NORM_K80(r,x,y, t1) \ - if ( ((x)->fphi.exponent-BIAS_80<-8000) || \ - ((x)->fphi.exponent-BIAS_80>+8000) || \ - ((y)->fphi.exponent-BIAS_80<-8000) || \ - ((y)->fphi.exponent-BIAS_80>+8000) ) \ - { \ - __libm_normalizel_k80(x); \ - __libm_normalizel_k80(y); \ - } \ - __LIBM_ADDL_K80(r,x,y, t1) - -/* Subtraction: x-y */ -/* The result is sum rhi+rlo */ -/* Temporary variables: t1 */ -/* All variables are in long double precision */ -/* Correct if no overflow (algorithm by D.Knuth) */ -#define __LIBM_SUBL1_K80( rhi, rlo, x, y, t1 ) \ - rhi = x - y; \ - rlo = rhi - x; \ - t1 = rhi - rlo; \ - rlo = y + rlo; \ - t1 = x - t1; \ - rlo = t1 - rlo; - -/* Subtraction: (xhi+xlo) - (yhi+ylo) */ -/* The result is sum rhi+rlo */ -/* Temporary variables: t1 */ -/* All variables are in long double precision */ -/* Correct if no overflow (algorithm by T.J.Dekker) */ -#define __LIBM_SUBL2_K80( rhi,rlo,xhi,xlo,yhi,ylo, t1 ) \ - rlo = xhi-yhi; \ - if ( VALUE_GT_80(FP80(xhi),FP80(yhi)) ) { \ - t1=xhi-rlo;t1=t1-yhi;t1=t1-ylo;t1=t1+xlo; \ - } else { \ - t1=yhi+rlo;t1=xhi-t1;t1=t1+xlo;t1=t1-ylo; \ - } \ - rhi=rlo+t1; \ - rlo=rlo-rhi;rlo=rlo+t1; - -/* Subtraction: r=x-y */ -/* Variables r,x,y are pointers to struct ker80, */ -/* all other variables are in long double precision */ -/* Temporary variables: t1 */ -/* Correct if x and y belong to interval [2^-8000;2^8000], */ -/* or when one or both of them are zero */ -#if defined(SIZE_INT_32) -#define __LIBM_SUBL_K80(r,x,y, t1) \ - if ( ((y)->ex+(y)->fphi.exponent-134 < \ - (x)->ex+(x)->fphi.exponent) && \ - ((x)->ex+(x)->fphi.exponent < \ - (y)->ex+(y)->fphi.exponent+134) && \ - !SIGNIFICAND_ZERO_80(&((x)->fphi)) && \ - !SIGNIFICAND_ZERO_80(&((y)->fphi)) ) \ - { \ - /* y/2^134 < x < y*2^134, */ \ - /* and x,y are nonzero finite numbers */ \ - if ( (x)->ex != (y)->ex ) { \ - /* adjust x->ex to y->ex */ \ - /* t1 = 2^(x->ex - y->ex) */ \ - FP80(t1)->sign = 0; \ - FP80(t1)->exponent = BIAS_80 + (x)->ex-(y)->ex; \ - /* exponent is correct because */ \ - /* |x->ex - y->ex| = */ \ - /* = | (x->ex + x->fphi.exponent) - */ \ - /* -(y->ex + y->fphi.exponent) + */ \ - /* + y->fphi.exponent - */ \ - /* - x->fphi.exponent | < */ \ - /* < | (x->ex+x->fphi.exponent) - */ \ - /* -(y->ex+y->fphi.exponent) | + */ \ - /* +| y->fphi.exponent - */ \ - /* -x->fphi.exponent | < */ \ - /* < 134 + 16000 */ \ - FP80(t1)->hi_significand = 0x80000000; \ - FP80(t1)->lo_significand = 0x00000000; \ - (x)->ex = (y)->ex; \ - (x)->ldhi *= t1; \ - (x)->ldlo *= t1; \ - } \ - /* r==x+y */ \ - (r)->ex = (y)->ex; \ - __LIBM_SUBL2_K80( (r)->ldhi,(r)->ldlo, \ - (x)->ldhi,(x)->ldlo, (y)->ldhi,(y)->ldlo, t1 ); \ - } else if ( SIGNIFICAND_ZERO_80(&((x)->fphi)) || \ - ((y)->ex+(y)->fphi.exponent-BIAS_80 - 134 >= \ - (x)->ex+(x)->fphi.exponent-BIAS_80) ) \ - { \ - /* |x|<<|y| */ \ - (r)->ex = (y)->ex; \ - (r)->ldhi = -((y)->ldhi); \ - (r)->ldlo = -((y)->ldlo); \ - } else { \ - /* |y|<<|x| */ \ - *(r) = *(x); \ - } -#elif defined(SIZE_INT_64) -#define __LIBM_SUBL_K80(r,x,y, t1) \ - if ( ((y)->ex+(y)->fphi.exponent-134 < \ - (x)->ex+(x)->fphi.exponent) && \ - ((x)->ex+(x)->fphi.exponent < \ - (y)->ex+(y)->fphi.exponent+134) && \ - !SIGNIFICAND_ZERO_80(&((x)->fphi)) && \ - !SIGNIFICAND_ZERO_80(&((y)->fphi)) ) \ - { \ - /* y/2^134 < x < y*2^134, */ \ - /* and x,y are nonzero finite numbers */ \ - if ( (x)->ex != (y)->ex ) { \ - /* adjust x->ex to y->ex */ \ - /* t1 = 2^(x->ex - y->ex) */ \ - FP80(t1)->sign = 0; \ - FP80(t1)->exponent = BIAS_80 + (x)->ex-(y)->ex; \ - /* exponent is correct because */ \ - /* |x->ex - y->ex| = */ \ - /* = | (x->ex + x->fphi.exponent) - */ \ - /* -(y->ex + y->fphi.exponent) + */ \ - /* + y->fphi.exponent - */ \ - /* - x->fphi.exponent | < */ \ - /* < | (x->ex+x->fphi.exponent) - */ \ - /* -(y->ex+y->fphi.exponent) | + */ \ - /* +| y->fphi.exponent - */ \ - /* -x->fphi.exponent | < */ \ - /* < 134 + 16000 */ \ - FP80(t1)->significand = 0x8000000000000000; \ - (x)->ex = (y)->ex; \ - (x)->ldhi *= t1; \ - (x)->ldlo *= t1; \ - } \ - /* r==x+y */ \ - (r)->ex = (y)->ex; \ - __LIBM_SUBL2_K80( (r)->ldhi,(r)->ldlo, \ - (x)->ldhi,(x)->ldlo, (y)->ldhi,(y)->ldlo, t1 ); \ - } else if ( SIGNIFICAND_ZERO_80(&((x)->fphi)) || \ - ((y)->ex+(y)->fphi.exponent-BIAS_80 - 134 >= \ - (x)->ex+(x)->fphi.exponent-BIAS_80) ) \ - { \ - /* |x|<<|y| */ \ - (r)->ex = (y)->ex; \ - (r)->ldhi = -((y)->ldhi); \ - (r)->ldlo = -((y)->ldlo); \ - } else { \ - /* |y|<<|x| */ \ - *(r) = *(x); \ - } -#endif - -/* Subtraction: r=x+y */ -/* Variables r,x,y are pointers to struct ker80, */ -/* all other variables are in long double precision */ -/* Temporary variables: t1 */ -/* Correct for any finite x and y */ -#define __LIBM_SUBL_NORM_K80(r,x,y, t1) \ - if ( ((x)->fphi.exponent-BIAS_80<-8000) || \ - ((x)->fphi.exponent-BIAS_80>+8000) || \ - ((y)->fphi.exponent-BIAS_80<-8000) || \ - ((y)->fphi.exponent-BIAS_80>+8000) ) \ - { \ - __libm_normalizel_k80(x); \ - __libm_normalizel_k80(y); \ - } \ - __LIBM_SUBL_K80(r,x,y, t1) - -/* Multiplication: x*y */ -/* The result is sum rhi+rlo */ -/* Here t32 is the constant 2^32+1 */ -/* Temporary variables: t1,t2,t3,t4,t5,t6 */ -/* All variables are in long double precision */ -/* Correct if no over/underflow (algorithm by T.J.Dekker) */ -#define __LIBM_MULL1_K80(rhi,rlo,x,y, \ - t32,t1,t2,t3,t4,t5,t6) \ - t1=(x)*(t32); t3=x-t1; t3=t3+t1; t4=x-t3; \ - t1=(y)*(t32); t5=y-t1; t5=t5+t1; t6=y-t5; \ - t1=(t3)*(t5); \ - t2=(t3)*(t6)+(t4)*(t5); \ - rhi=t1+t2; \ - rlo=t1-rhi; rlo=rlo+t2; rlo=rlo+(t4*t6); - -/* Multiplication: (xhi+xlo)*(yhi+ylo) */ -/* The result is sum rhi+rlo */ -/* Here t32 is the constant 2^32+1 */ -/* Temporary variables: t1,t2,t3,t4,t5,t6,t7,t8 */ -/* All variables are in long double precision */ -/* Correct if no over/underflow (algorithm by T.J.Dekker) */ -#define __LIBM_MULL2_K80(rhi,rlo,xhi,xlo,yhi,ylo, \ - t32,t1,t2,t3,t4,t5,t6,t7,t8) \ - __LIBM_MULL1_K80(t7,t8,xhi,yhi, t32,t1,t2,t3,t4,t5,t6) \ - t1=(xhi)*(ylo)+(xlo)*(yhi); t1=t1+t8; \ - rhi=t7+t1; \ - rlo=t7-rhi; rlo=rlo+t1; - -/* Multiplication: r=x*y */ -/* Variables r,x,y are pointers to struct ker80, */ -/* all other variables are in long double precision */ -/* Here t32 is the constant 2^32+1 */ -/* Temporary variables: t1,t2,t3,t4,t5,t6,t7,t8 */ -/* Correct if x and y belong to interval [2^-8000;2^8000] */ -#define __LIBM_MULL_K80(r,x,y, t32,t1,t2,t3,t4,t5,t6,t7,t8) \ - (r)->ex = (x)->ex + (y)->ex; \ - __LIBM_MULL2_K80((r)->ldhi,(r)->ldlo, \ - (x)->ldhi,(x)->ldlo,(y)->ldhi,(y)->ldlo, \ - t32,t1,t2,t3,t4,t5,t6,t7,t8) - -/* Multiplication: r=x*y */ -/* Variables r,x,y are pointers to struct ker80, */ -/* all other variables are in long double precision */ -/* Here t32 is the constant 2^32+1 */ -/* Temporary variables: t1,t2,t3,t4,t5,t6,t7,t8 */ -/* Correct for any finite x and y */ -#define __LIBM_MULL_NORM_K80(r,x,y, \ - t32,t1,t2,t3,t4,t5,t6,t7,t8) \ - if ( ((x)->fphi.exponent-BIAS_80<-8000) || \ - ((x)->fphi.exponent-BIAS_80>+8000) || \ - ((y)->fphi.exponent-BIAS_80<-8000) || \ - ((y)->fphi.exponent-BIAS_80>+8000) ) \ - { \ - __libm_normalizel_k80(x); \ - __libm_normalizel_k80(y); \ - } \ - __LIBM_MULL_K80(r,x,y, t32,t1,t2,t3,t4,t5,t6,t7,t8) - -/* Division: (xhi+xlo)/(yhi+ylo) */ -/* The result is sum rhi+rlo */ -/* Here t32 is the constant 2^32+1 */ -/* Temporary variables: t1,t2,t3,t4,t5,t6,t7,t8,t9 */ -/* All variables are in long double precision */ -/* Correct if no over/underflow (algorithm by T.J.Dekker) */ -#define __LIBM_DIVL2_K80(rhi,rlo,xhi,xlo,yhi,ylo, \ - t32,t1,t2,t3,t4,t5,t6,t7,t8,t9) \ - t7=(xhi)/(yhi); \ - __LIBM_MULL1_K80(t8,t9,t7,yhi, t32,t1,t2,t3,t4,t5,t6) \ - t1=xhi-t8; t1=t1-t9; t1=t1+xlo; t1=t1-(t7)*(ylo); \ - t1=(t1)/(yhi); \ - rhi=t7+t1; \ - rlo=t7-rhi; rlo=rlo+t1; - -/* Division: r=x/y */ -/* Variables r,x,y are pointers to struct ker80, */ -/* all other variables are in long double precision */ -/* Here t32 is the constant 2^32+1 */ -/* Temporary variables: t1,t2,t3,t4,t5,t6,t7,t8,t9 */ -/* Correct if x and y belong to interval [2^-8000;2^8000] */ -#define __LIBM_DIVL_K80(r,x,y, \ - t32,t1,t2,t3,t4,t5,t6,t7,t8,t9) \ - (r)->ex = (x)->ex - (y)->ex; \ - __LIBM_DIVL2_K80( (r)->ldhi,(r)->ldlo, \ - (x)->ldhi,(x)->ldlo,(y)->ldhi,(y)->ldlo, \ - t32,t1,t2,t3,t4,t5,t6,t7,t8,t9) - -/* Division: r=x/y */ -/* Variables r,x,y are pointers to struct ker80, */ -/* all other variables are in long double precision */ -/* Here t32 is the constant 2^32+1 */ -/* Temporary variables: t1,t2,t3,t4,t5,t6,t7,t8 */ -/* Correct for any finite x and y */ -#define __LIBM_DIVL_NORM_K80(r,x,y, \ - t32,t1,t2,t3,t4,t5,t6,t7,t8,t9) \ - if ( ((x)->fphi.exponent-BIAS_80<-8000) || \ - ((x)->fphi.exponent-BIAS_80>+8000) || \ - ((y)->fphi.exponent-BIAS_80<-8000) || \ - ((y)->fphi.exponent-BIAS_80>+8000) ) \ - { \ - __libm_normalizel_k80(x); \ - __libm_normalizel_k80(y); \ - } \ - __LIBM_DIVL_K80(r,x,y, t32,t1,t2,t3,t4,t5,t6,t7,t8,t9) - -/* Square root: sqrt(xhi+xlo) */ -/* The result is sum rhi+rlo */ -/* Here t32 is the constant 2^32+1 */ -/* half is the constant 0.5 */ -/* Temporary variables: t1,t2,t3,t4,t5,t6,t7,t8,t9 */ -/* All variables are in long double precision */ -/* Correct for positive xhi+xlo (algorithm by T.J.Dekker) */ -#define __LIBM_SQRTL2_NORM_K80(rhi,rlo,xhi,xlo, \ - t32,half,t1,t2,t3,t4,t5,t6,t7,t8,t9) \ - t7=sqrtl(xhi); \ - __LIBM_MULL1_K80(t8,t9,t7,t7, t32,t1,t2,t3,t4,t5,t6) \ - t1=xhi-t8; t1=t1-t9; t1=t1+xlo; t1=(t1)*(half); \ - t1=(t1)/(t7); \ - rhi=t7+t1; \ - rlo=t7-rhi; rlo=rlo+t1; - -/* Square root: r=sqrt(x) */ -/* Variables r,x,y are pointers to struct ker80, */ -/* all other variables are in long double precision */ -/* Here t32 is the constant 2^32+1 */ -/* half is the constant 0.5 */ -/* Temporary variables: t1,t2,t3,t4,t5,t6,t7,t8,t9 */ -/* Correct if x belongs to interval [2^-16000;2^16000] */ -#define __LIBM_SQRTL_K80(r,x, \ - t32,half,t1,t2,t3,t4,t5,t6,t7,t8,t9) \ - if ( ((x)->ex & 1) == 1 ) { \ - (x)->ex = (x)->ex + 1; \ - (x)->ldhi *= half; \ - (x)->ldlo *= half; \ - } \ - (r)->ex = (x)->ex >> 1; \ - __LIBM_SQRTL2_NORM_K80( (r)->ldhi,(r)->ldlo, \ - (x)->ldhi,(x)->ldlo, \ - t32,half,t1,t2,t3,t4,t5,t6,t7,t8,t9) - -/* Square root: r=sqrt(x) */ -/* Variables r,x,y are pointers to struct ker80, */ -/* all other variables are in long double precision */ -/* Here t32 is the constant 2^32+1 */ -/* half is the constant 0.5 */ -/* Temporary variables: t1,t2,t3,t4,t5,t6,t7,t8,t9 */ -/* Correct for any positive x */ -#define __LIBM_SQRTL_NORM_K80(r,x, \ - t32,half,t1,t2,t3,t4,t5,t6,t7,t8,t9) \ - if ( ((x)->fphi.exponent-BIAS_80<-16000) || \ - ((x)->fphi.exponent-BIAS_80>+16000) ) \ - { \ - __libm_normalizel_k80(x); \ - } \ - __LIBM_SQRTL_K80(r,x, t32,half,t1,t2,t3,t4,t5,t6,t7,t8,t9) - - -#ifdef __INTEL_COMPILER -#define ALIGN(n) __declspec(align(n)) -#else /* __INTEL_COMPILER */ -#define ALIGN(n) -#endif /* __INTEL_COMPILER */ - -/* macros to form a long double value in hex representation (unsigned short type) */ - -#if (defined(__unix__) && defined(__i386__)) -# define LDOUBLE_ALIGN 12 /* IA32 Linux: 12-byte alignment */ -#else /*__linux__ & IA32*/ -# define LDOUBLE_ALIGN 16 /* EFI2/IA32 Win or IPF Win/Linux: 16-byte alignment */ -#endif /*__linux__ & IA32*/ - -#if (LDOUBLE_ALIGN == 16) -#define _XPD_ ,0x0000,0x0000,0x0000 -#else /*12*/ -#define _XPD_ ,0x0000 -#endif - -#define LDOUBLE_HEX(w4,w3,w2,w1,w0) 0x##w0,0x##w1,0x##w2,0x##w3,0x##w4 _XPD_ /*LITTLE_ENDIAN*/ - -/* macros to sign-expand low 'num' bits of 'val' to native integer */ - -#if defined(SIZE_INT_32) -# define SIGN_EXPAND(val,num) ((int)(val) << (32-(num))) >> (32-(num)) /* sign expand of 'num' LSBs */ -#elif defined(SIZE_INT_64) -# define SIGN_EXPAND(val,num) ((int)(val) << (64-(num))) >> (64-(num)) /* sign expand of 'num' LSBs */ -#endif - -/* macros to form pointers to FP number on-the-fly */ - -#define FP32(f) ((struct fp32 *)&f) -#define FP64(d) ((struct fp64 *)&d) -#define FP80(ld) ((struct fp80 *)&ld) - -/* macros to extract signed low and high doubleword of long double */ - -#if defined(SIZE_INT_32) -# define HI_DWORD_80(ld) ((((FP80(ld)->sign << 15) | FP80(ld)->exponent) << 16) | \ - ((FP80(ld)->hi_significand >> 16) & 0xFFFF)) -# define LO_DWORD_80(ld) SIGN_EXPAND(FP80(ld)->lo_significand, 32) -#elif defined(SIZE_INT_64) -# define HI_DWORD_80(ld) ((((FP80(ld)->sign << 15) | FP80(ld)->exponent) << 16) | \ - ((FP80(ld)->significand >> 48) & 0xFFFF)) -# define LO_DWORD_80(ld) SIGN_EXPAND(FP80(ld)->significand, 32) -#endif - -/* macros to extract hi bits of significand. - * note that explicit high bit do not count (returns as is) - */ - -#if defined(SIZE_INT_32) -# define HI_SIGNIFICAND_80(X,NBITS) ((X)->hi_significand >> (31 - (NBITS))) -#elif defined(SIZE_INT_64) -# define HI_SIGNIFICAND_80(X,NBITS) ((X)->significand >> (63 - (NBITS))) -#endif - -/* macros to check, whether a significand bits are all zero, or some of them are non-zero. - * note that SIGNIFICAND_ZERO_80 tests high bit also, but SIGNIFICAND_NONZERO_80 does not - */ - -#define SIGNIFICAND_ZERO_32(X) ((X)->significand == 0) -#define SIGNIFICAND_NONZERO_32(X) ((X)->significand != 0) - -#if defined(SIZE_INT_32) -# define SIGNIFICAND_ZERO_64(X) (((X)->hi_significand == 0) && ((X)->lo_significand == 0)) -# define SIGNIFICAND_NONZERO_64(X) (((X)->hi_significand != 0) || ((X)->lo_significand != 0)) -#elif defined(SIZE_INT_64) -# define SIGNIFICAND_ZERO_64(X) ((X)->significand == 0) -# define SIGNIFICAND_NONZERO_64(X) ((X)->significand != 0) -#endif - -#if defined(SIZE_INT_32) -# define SIGNIFICAND_ZERO_80(X) (((X)->hi_significand == 0x00000000) && ((X)->lo_significand == 0)) -# define SIGNIFICAND_NONZERO_80(X) (((X)->hi_significand != 0x80000000) || ((X)->lo_significand != 0)) -#elif defined(SIZE_INT_64) -# define SIGNIFICAND_ZERO_80(X) ((X)->significand == 0x0000000000000000) -# define SIGNIFICAND_NONZERO_80(X) ((X)->significand != 0x8000000000000000) -#endif - -/* macros to compare long double with constant value, represented as hex */ - -#define SIGNIFICAND_EQ_HEX_32(X,BITS) ((X)->significand == 0x ## BITS) -#define SIGNIFICAND_GT_HEX_32(X,BITS) ((X)->significand > 0x ## BITS) -#define SIGNIFICAND_GE_HEX_32(X,BITS) ((X)->significand >= 0x ## BITS) -#define SIGNIFICAND_LT_HEX_32(X,BITS) ((X)->significand < 0x ## BITS) -#define SIGNIFICAND_LE_HEX_32(X,BITS) ((X)->significand <= 0x ## BITS) - -#if defined(SIZE_INT_32) -# define SIGNIFICAND_EQ_HEX_64(X,HI,LO) \ - (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand == 0x ## LO)) -# define SIGNIFICAND_GT_HEX_64(X,HI,LO) (((X)->hi_significand > 0x ## HI) || \ - (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand > 0x ## LO))) -# define SIGNIFICAND_GE_HEX_64(X,HI,LO) (((X)->hi_significand > 0x ## HI) || \ - (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand >= 0x ## LO))) -# define SIGNIFICAND_LT_HEX_64(X,HI,LO) (((X)->hi_significand < 0x ## HI) || \ - (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand < 0x ## LO))) -# define SIGNIFICAND_LE_HEX_64(X,HI,LO) (((X)->hi_significand < 0x ## HI) || \ - (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand <= 0x ## LO))) -#elif defined(SIZE_INT_64) -# define SIGNIFICAND_EQ_HEX_64(X,HI,LO) ((X)->significand == 0x ## HI ## LO) -# define SIGNIFICAND_GT_HEX_64(X,HI,LO) ((X)->significand > 0x ## HI ## LO) -# define SIGNIFICAND_GE_HEX_64(X,HI,LO) ((X)->significand >= 0x ## HI ## LO) -# define SIGNIFICAND_LT_HEX_64(X,HI,LO) ((X)->significand < 0x ## HI ## LO) -# define SIGNIFICAND_LE_HEX_64(X,HI,LO) ((X)->significand <= 0x ## HI ## LO) -#endif - -#if defined(SIZE_INT_32) -# define SIGNIFICAND_EQ_HEX_80(X,HI,LO) \ - (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand == 0x ## LO)) -# define SIGNIFICAND_GT_HEX_80(X,HI,LO) (((X)->hi_significand > 0x ## HI) || \ - (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand > 0x ## LO))) -# define SIGNIFICAND_GE_HEX_80(X,HI,LO) (((X)->hi_significand > 0x ## HI) || \ - (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand >= 0x ## LO))) -# define SIGNIFICAND_LT_HEX_80(X,HI,LO) (((X)->hi_significand < 0x ## HI) || \ - (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand < 0x ## LO))) -# define SIGNIFICAND_LE_HEX_80(X,HI,LO) (((X)->hi_significand < 0x ## HI) || \ - (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand <= 0x ## LO))) -#elif defined(SIZE_INT_64) -# define SIGNIFICAND_EQ_HEX_80(X,HI,LO) ((X)->significand == 0x ## HI ## LO) -# define SIGNIFICAND_GT_HEX_80(X,HI,LO) ((X)->significand > 0x ## HI ## LO) -# define SIGNIFICAND_GE_HEX_80(X,HI,LO) ((X)->significand >= 0x ## HI ## LO) -# define SIGNIFICAND_LT_HEX_80(X,HI,LO) ((X)->significand < 0x ## HI ## LO) -# define SIGNIFICAND_LE_HEX_80(X,HI,LO) ((X)->significand <= 0x ## HI ## LO) -#endif - -#define VALUE_EQ_HEX_32(X,EXP,BITS) \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_EQ_HEX_32(X, BITS))) -#define VALUE_GT_HEX_32(X,EXP,BITS) (((X)->exponent > (EXP)) || \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_GT_HEX_32(X, BITS)))) -#define VALUE_GE_HEX_32(X,EXP,BITS) (((X)->exponent > (EXP)) || \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_GE_HEX_32(X, BITS)))) -#define VALUE_LT_HEX_32(X,EXP,BITS) (((X)->exponent < (EXP)) || \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_LT_HEX_32(X, BITS)))) -#define VALUE_LE_HEX_32(X,EXP,BITS) (((X)->exponent < (EXP)) || \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_LE_HEX_32(X, BITS)))) - -#define VALUE_EQ_HEX_64(X,EXP,HI,LO) \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_EQ_HEX_64(X, HI, LO))) -#define VALUE_GT_HEX_64(X,EXP,HI,LO) (((X)->exponent > (EXP)) || \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_GT_HEX_64(X, HI, LO)))) -#define VALUE_GE_HEX_64(X,EXP,HI,LO) (((X)->exponent > (EXP)) || \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_GE_HEX_64(X, HI, LO)))) -#define VALUE_LT_HEX_64(X,EXP,HI,LO) (((X)->exponent < (EXP)) || \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_LT_HEX_64(X, HI, LO)))) -#define VALUE_LE_HEX_64(X,EXP,HI,LO) (((X)->exponent < (EXP)) || \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_LE_HEX_64(X, HI, LO)))) - -#define VALUE_EQ_HEX_80(X,EXP,HI,LO) \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_EQ_HEX_80(X, HI, LO))) -#define VALUE_GT_HEX_80(X,EXP,HI,LO) (((X)->exponent > (EXP)) || \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_GT_HEX_80(X, HI, LO)))) -#define VALUE_GE_HEX_80(X,EXP,HI,LO) (((X)->exponent > (EXP)) || \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_GE_HEX_80(X, HI, LO)))) -#define VALUE_LT_HEX_80(X,EXP,HI,LO) (((X)->exponent < (EXP)) || \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_LT_HEX_80(X, HI, LO)))) -#define VALUE_LE_HEX_80(X,EXP,HI,LO) (((X)->exponent < (EXP)) || \ - (((X)->exponent == (EXP)) && (SIGNIFICAND_LE_HEX_80(X, HI, LO)))) - -/* macros to compare two long doubles */ - -#define SIGNIFICAND_EQ_32(X,Y) ((X)->significand == (Y)->significand) -#define SIGNIFICAND_GT_32(X,Y) ((X)->significand > (Y)->significand) -#define SIGNIFICAND_GE_32(X,Y) ((X)->significand >= (Y)->significand) -#define SIGNIFICAND_LT_32(X,Y) ((X)->significand < (Y)->significand) -#define SIGNIFICAND_LE_32(X,Y) ((X)->significand <= (Y)->significand) - -#if defined(SIZE_INT_32) -# define SIGNIFICAND_EQ_64(X,Y) \ - (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand == (Y)->lo_significand)) -# define SIGNIFICAND_GT_64(X,Y) (((X)->hi_significand > (Y)->hi_significand) || \ - (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand > (Y)->lo_significand))) -# define SIGNIFICAND_GE_64(X,Y) (((X)->hi_significand > (Y)->hi_significand) || \ - (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand >= (Y)->lo_significand))) -# define SIGNIFICAND_LT_64(X,Y) (((X)->hi_significand < (Y)->hi_significand) || \ - (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand < (Y)->lo_significand))) -# define SIGNIFICAND_LE_64(X,Y) (((X)->hi_significand < (Y)->hi_significand) || \ - (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand <= (Y)->lo_significand))) -#elif defined(SIZE_INT_64) -# define SIGNIFICAND_EQ_64(X,Y) ((X)->significand == (Y)->significand) -# define SIGNIFICAND_GT_64(X,Y) ((X)->significand > (Y)->significand) -# define SIGNIFICAND_GE_64(X,Y) ((X)->significand >= (Y)->significand) -# define SIGNIFICAND_LT_64(X,Y) ((X)->significand < (Y)->significand) -# define SIGNIFICAND_LE_64(X,Y) ((X)->significand <= (Y)->significand) -#endif - -#if defined(SIZE_INT_32) -# define SIGNIFICAND_EQ_80(X,Y) \ - (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand == (Y)->lo_significand)) -# define SIGNIFICAND_GT_80(X,Y) (((X)->hi_significand > (Y)->hi_significand) || \ - (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand > (Y)->lo_significand))) -# define SIGNIFICAND_GE_80(X,Y) (((X)->hi_significand > (Y)->hi_significand) || \ - (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand >= (Y)->lo_significand))) -# define SIGNIFICAND_LT_80(X,Y) (((X)->hi_significand < (Y)->hi_significand) || \ - (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand < (Y)->lo_significand))) -# define SIGNIFICAND_LE_80(X,Y) (((X)->hi_significand < (Y)->hi_significand) || \ - (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand <= (Y)->lo_significand))) -#elif defined(SIZE_INT_64) -# define SIGNIFICAND_EQ_80(X,Y) ((X)->significand == (Y)->significand) -# define SIGNIFICAND_GT_80(X,Y) ((X)->significand > (Y)->significand) -# define SIGNIFICAND_GE_80(X,Y) ((X)->significand >= (Y)->significand) -# define SIGNIFICAND_LT_80(X,Y) ((X)->significand < (Y)->significand) -# define SIGNIFICAND_LE_80(X,Y) ((X)->significand <= (Y)->significand) -#endif - -#define VALUE_EQ_32(X,Y) \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_EQ_32(X, Y))) -#define VALUE_GT_32(X,Y) (((X)->exponent > (Y)->exponent) || \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_GT_32(X, Y)))) -#define VALUE_GE_32(X,Y) (((X)->exponent > (Y)->exponent) || \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_GE_32(X, Y)))) -#define VALUE_LT_32(X,Y) (((X)->exponent < (Y)->exponent) || \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_LT_32(X, Y)))) -#define VALUE_LE_32(X,Y) (((X)->exponent < (Y)->exponent) || \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_LE_32(X, Y)))) - -#define VALUE_EQ_64(X,Y) \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_EQ_64(X, Y))) -#define VALUE_GT_64(X,Y) (((X)->exponent > (Y)->exponent) || \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_GT_64(X, Y)))) -#define VALUE_GE_64(X,Y) (((X)->exponent > (Y)->exponent) || \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_GE_64(X, Y)))) -#define VALUE_LT_64(X,Y) (((X)->exponent < (Y)->exponent) || \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_LT_64(X, Y)))) -#define VALUE_LE_64(X,Y) (((X)->exponent < (Y)->exponent) || \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_LE_64(X, Y)))) - -#define VALUE_EQ_80(X,Y) \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_EQ_80(X, Y))) -#define VALUE_GT_80(X,Y) (((X)->exponent > (Y)->exponent) || \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_GT_80(X, Y)))) -#define VALUE_GE_80(X,Y) (((X)->exponent > (Y)->exponent) || \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_GE_80(X, Y)))) -#define VALUE_LT_80(X,Y) (((X)->exponent < (Y)->exponent) || \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_LT_80(X, Y)))) -#define VALUE_LE_80(X,Y) (((X)->exponent < (Y)->exponent) || \ - (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_LE_80(X, Y)))) - -/* add/subtract 1 ulp macros */ - -#if defined(SIZE_INT_32) -# define ADD_ULP_80(X) \ - if ((++(X)->lo_significand == 0) && \ - (++(X)->hi_significand == (((X)->exponent == 0) ? 0x80000000 : 0))) \ - { \ - (X)->hi_significand |= 0x80000000; \ - ++(X)->exponent; \ - } -# define SUB_ULP_80(X) \ - if (--(X)->lo_significand == 0xFFFFFFFF) { \ - --(X)->hi_significand; \ - if (((X)->exponent != 0) && \ - ((X)->hi_significand == 0x7FFFFFFF) && \ - (--(X)->exponent != 0)) \ - { \ - (X)->hi_significand |= 0x80000000; \ - } \ - } -#elif defined(SIZE_INT_64) -# define ADD_ULP_80(X) \ - if (++(X)->significand == (((X)->exponent == 0) ? 0x8000000000000000 : 0))) { \ - (X)->significand |= 0x8000000000000000; \ - ++(X)->exponent; \ - } -# define SUB_ULP_80(X) \ - { \ - --(X)->significand; \ - if (((X)->exponent != 0) && \ - ((X)->significand == 0x7FFFFFFFFFFFFFFF) && \ - (--(X)->exponent != 0)) \ - { \ - (X)->significand |= 0x8000000000000000; \ - } \ - } -#endif - - -/* error codes */ - -#define DOMAIN 1 /* argument domain error */ -#define SING 2 /* argument singularity */ -#define OVERFLOW 3 /* overflow range error */ -#define UNDERFLOW 4 /* underflow range error */ -#define TLOSS 5 /* total loss of precision */ -#define PLOSS 6 /* partial loss of precision */ - -/* */ - -#define VOLATILE_32 /*volatile*/ -#define VOLATILE_64 /*volatile*/ -#define VOLATILE_80 /*volatile*/ - -#define QUAD_TYPE _Quad - -#endif /*__LIBM_SUPPORT_H_INCLUDED__*/ diff --git a/sysdeps/ia64/fpu/libm_tan.S b/sysdeps/ia64/fpu/libm_tan.S deleted file mode 100644 index b267f13d9e..0000000000 --- a/sysdeps/ia64/fpu/libm_tan.S +++ /dev/null @@ -1,3332 +0,0 @@ -.file "libm_tan.s" - -// Copyright (C) 2000, 2001, Intel Corporation -// All rights reserved. -// -// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, -// and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://developer.intel.com/opensource. -// -// ********************************************************************* -// -// History: -// 02/02/00 Initial Version -// 4/04/00 Unwind support added -// 12/28/00 Fixed false invalid flags -// -// ********************************************************************* -// -// Function: tan(x) = tangent(x), for double precision x values -// -// ********************************************************************* -// -// Accuracy: Very accurate for double-precision values -// -// ********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f9-f15 -// f32-f112 -// -// General Purpose Registers: -// r32-r48 -// r49-r50 (Used to pass arguments to pi_by_2 reduce routine) -// -// Predicate Registers: p6-p15 -// -// ********************************************************************* -// -// IEEE Special Conditions: -// -// Denormal fault raised on denormal inputs -// Overflow exceptions do not occur -// Underflow exceptions raised when appropriate for tan -// (No specialized error handling for this routine) -// Inexact raised when appropriate by algorithm -// -// tan(SNaN) = QNaN -// tan(QNaN) = QNaN -// tan(inf) = QNaN -// tan(+/-0) = +/-0 -// -// ********************************************************************* -// -// Mathematical Description -// -// We consider the computation of FPTAN of Arg. Now, given -// -// Arg = N pi/2 + alpha, |alpha| <= pi/4, -// -// basic mathematical relationship shows that -// -// tan( Arg ) = tan( alpha ) if N is even; -// = -cot( alpha ) otherwise. -// -// The value of alpha is obtained by argument reduction and -// represented by two working precision numbers r and c where -// -// alpha = r + c accurately. -// -// The reduction method is described in a previous write up. -// The argument reduction scheme identifies 4 cases. For Cases 2 -// and 4, because |alpha| is small, tan(r+c) and -cot(r+c) can be -// computed very easily by 2 or 3 terms of the Taylor series -// expansion as follows: -// -// Case 2: -// ------- -// -// tan(r + c) = r + c + r^3/3 ...accurately -// -cot(r + c) = -1/(r+c) + r/3 ...accurately -// -// Case 4: -// ------- -// -// tan(r + c) = r + c + r^3/3 + 2r^5/15 ...accurately -// -cot(r + c) = -1/(r+c) + r/3 + r^3/45 ...accurately -// -// -// The only cases left are Cases 1 and 3 of the argument reduction -// procedure. These two cases will be merged since after the -// argument is reduced in either cases, we have the reduced argument -// represented as r + c and that the magnitude |r + c| is not small -// enough to allow the usage of a very short approximation. -// -// The greatest challenge of this task is that the second terms of -// the Taylor series for tan(r) and -cot(r) -// -// r + r^3/3 + 2 r^5/15 + ... -// -// and -// -// -1/r + r/3 + r^3/45 + ... -// -// are not very small when |r| is close to pi/4 and the rounding -// errors will be a concern if simple polynomial accumulation is -// used. When |r| < 2^(-2), however, the second terms will be small -// enough (5 bits or so of right shift) that a normal Horner -// recurrence suffices. Hence there are two cases that we consider -// in the accurate computation of tan(r) and cot(r), |r| <= pi/4. -// -// Case small_r: |r| < 2^(-2) -// -------------------------- -// -// Since Arg = N pi/4 + r + c accurately, we have -// -// tan(Arg) = tan(r+c) for N even, -// = -cot(r+c) otherwise. -// -// Here for this case, both tan(r) and -cot(r) can be approximated -// by simple polynomials: -// -// tan(r) = r + P1_1 r^3 + P1_2 r^5 + ... + P1_9 r^19 -// -cot(r) = -1/r + Q1_1 r + Q1_2 r^3 + ... + Q1_7 r^13 -// -// accurately. Since |r| is relatively small, tan(r+c) and -// -cot(r+c) can be accurately approximated by replacing r with -// r+c only in the first two terms of the corresponding polynomials. -// -// Note that P1_1 (and Q1_1 for that matter) approximates 1/3 to -// almost 64 sig. bits, thus -// -// P1_1 (r+c)^3 = P1_1 r^3 + c * r^2 accurately. -// -// Hence, -// -// tan(r+c) = r + P1_1 r^3 + P1_2 r^5 + ... + P1_9 r^19 -// + c*(1 + r^2) -// -// -cot(r+c) = -1/(r+c) + Q1_1 r + Q1_2 r^3 + ... + Q1_7 r^13 -// + Q1_1*c -// -// -// Case normal_r: 2^(-2) <= |r| <= pi/4 -// ------------------------------------ -// -// This case is more likely than the previous one if one considers -// r to be uniformly distributed in [-pi/4 pi/4]. -// -// The required calculation is either -// -// tan(r + c) = tan(r) + correction, or -// -cot(r + c) = -cot(r) + correction. -// -// Specifically, -// -// tan(r + c) = tan(r) + c tan'(r) + O(c^2) -// = tan(r) + c sec^2(r) + O(c^2) -// = tan(r) + c SEC_sq ...accurately -// as long as SEC_sq approximates sec^2(r) -// to, say, 5 bits or so. -// -// Similarly, -// -// -cot(r + c) = -cot(r) - c cot'(r) + O(c^2) -// = -cot(r) + c csc^2(r) + O(c^2) -// = -cot(r) + c CSC_sq ...accurately -// as long as CSC_sq approximates csc^2(r) -// to, say, 5 bits or so. -// -// We therefore concentrate on accurately calculating tan(r) and -// cot(r) for a working-precision number r, |r| <= pi/4 to within -// 0.1% or so. -// -// We will employ a table-driven approach. Let -// -// r = sgn_r * 2^k * 1.b_1 b_2 ... b_5 ... b_63 -// = sgn_r * ( B + x ) -// -// where -// -// B = 2^k * 1.b_1 b_2 ... b_5 1 -// x = |r| - B -// -// Now, -// tan(B) + tan(x) -// tan( B + x ) = ------------------------ -// 1 - tan(B)*tan(x) -// -// / \ -// | tan(B) + tan(x) | - -// = tan(B) + | ------------------------ - tan(B) | -// | 1 - tan(B)*tan(x) | -// \ / -// -// sec^2(B) * tan(x) -// = tan(B) + ------------------------ -// 1 - tan(B)*tan(x) -// -// (1/[sin(B)*cos(B)]) * tan(x) -// = tan(B) + -------------------------------- -// cot(B) - tan(x) -// -// -// Clearly, the values of tan(B), cot(B) and 1/(sin(B)*cos(B)) are -// calculated beforehand and stored in a table. Since -// -// |x| <= 2^k * 2^(-6) <= 2^(-7) (because k = -1, -2) -// -// a very short polynomial will be sufficient to approximate tan(x) -// accurately. The details involved in computing the last expression -// will be given in the next section on algorithm description. -// -// -// Now, we turn to the case where cot( B + x ) is needed. -// -// -// 1 - tan(B)*tan(x) -// cot( B + x ) = ------------------------ -// tan(B) + tan(x) -// -// / \ -// | 1 - tan(B)*tan(x) | - -// = cot(B) + | ----------------------- - cot(B) | -// | tan(B) + tan(x) | -// \ / -// -// [tan(B) + cot(B)] * tan(x) -// = cot(B) - ---------------------------- -// tan(B) + tan(x) -// -// (1/[sin(B)*cos(B)]) * tan(x) -// = cot(B) - -------------------------------- -// tan(B) + tan(x) -// -// -// Note that the values of tan(B), cot(B) and 1/(sin(B)*cos(B)) that -// are needed are the same set of values needed in the previous -// case. -// -// Finally, we can put all the ingredients together as follows: -// -// Arg = N * pi/2 + r + c ...accurately -// -// tan(Arg) = tan(r) + correction if N is even; -// = -cot(r) + correction otherwise. -// -// For Cases 2 and 4, -// -// Case 2: -// tan(Arg) = tan(r + c) = r + c + r^3/3 N even -// = -cot(r + c) = -1/(r+c) + r/3 N odd -// Case 4: -// tan(Arg) = tan(r + c) = r + c + r^3/3 + 2r^5/15 N even -// = -cot(r + c) = -1/(r+c) + r/3 + r^3/45 N odd -// -// -// For Cases 1 and 3, -// -// Case small_r: |r| < 2^(-2) -// -// tan(Arg) = r + P1_1 r^3 + P1_2 r^5 + ... + P1_9 r^19 -// + c*(1 + r^2) N even -// -// = -1/(r+c) + Q1_1 r + Q1_2 r^3 + ... + Q1_7 r^13 -// + Q1_1*c N odd -// -// Case normal_r: 2^(-2) <= |r| <= pi/4 -// -// tan(Arg) = tan(r) + c * sec^2(r) N even -// = -cot(r) + c * csc^2(r) otherwise -// -// For N even, -// -// tan(Arg) = tan(r) + c*sec^2(r) -// = tan( sgn_r * (B+x) ) + c * sec^2(|r|) -// = sgn_r * ( tan(B+x) + sgn_r*c*sec^2(|r|) ) -// = sgn_r * ( tan(B+x) + sgn_r*c*sec^2(B) ) -// -// since B approximates |r| to 2^(-6) in relative accuracy. -// -// / (1/[sin(B)*cos(B)]) * tan(x) -// tan(Arg) = sgn_r * | tan(B) + -------------------------------- -// \ cot(B) - tan(x) -// \ -// + CORR | - -// / -// where -// -// CORR = sgn_r*c*tan(B)*SC_inv(B); SC_inv(B) = 1/(sin(B)*cos(B)). -// -// For N odd, -// -// tan(Arg) = -cot(r) + c*csc^2(r) -// = -cot( sgn_r * (B+x) ) + c * csc^2(|r|) -// = sgn_r * ( -cot(B+x) + sgn_r*c*csc^2(|r|) ) -// = sgn_r * ( -cot(B+x) + sgn_r*c*csc^2(B) ) -// -// since B approximates |r| to 2^(-6) in relative accuracy. -// -// / (1/[sin(B)*cos(B)]) * tan(x) -// tan(Arg) = sgn_r * | -cot(B) + -------------------------------- -// \ tan(B) + tan(x) -// \ -// + CORR | - -// / -// where -// -// CORR = sgn_r*c*cot(B)*SC_inv(B); SC_inv(B) = 1/(sin(B)*cos(B)). -// -// -// The actual algorithm prescribes how all the mathematical formulas -// are calculated. -// -// -// 2. Algorithmic Description -// ========================== -// -// 2.1 Computation for Cases 2 and 4. -// ---------------------------------- -// -// For Case 2, we use two-term polynomials. -// -// For N even, -// -// rsq := r * r -// Result := c + r * rsq * P1_1 -// Result := r + Result ...in user-defined rounding -// -// For N odd, -// S_hi := -frcpa(r) ...8 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...16 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...32 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...64 bits -// S_lo := S_hi*( (1 + S_hi*r) + S_hi*c ) -// ...S_hi + S_lo is -1/(r+c) to extra precision -// S_lo := S_lo + Q1_1*r -// -// Result := S_hi + S_lo ...in user-defined rounding -// -// For Case 4, we use three-term polynomials -// -// For N even, -// -// rsq := r * r -// Result := c + r * rsq * (P1_1 + rsq * P1_2) -// Result := r + Result ...in user-defined rounding -// -// For N odd, -// S_hi := -frcpa(r) ...8 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...16 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...32 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...64 bits -// S_lo := S_hi*( (1 + S_hi*r) + S_hi*c ) -// ...S_hi + S_lo is -1/(r+c) to extra precision -// rsq := r * r -// P := Q1_1 + rsq*Q1_2 -// S_lo := S_lo + r*P -// -// Result := S_hi + S_lo ...in user-defined rounding -// -// -// Note that the coefficients P1_1, P1_2, Q1_1, and Q1_2 are -// the same as those used in the small_r case of Cases 1 and 3 -// below. -// -// -// 2.2 Computation for Cases 1 and 3. -// ---------------------------------- -// This is further divided into the case of small_r, -// where |r| < 2^(-2), and the case of normal_r, where |r| lies between -// 2^(-2) and pi/4. -// -// Algorithm for the case of small_r -// --------------------------------- -// -// For N even, -// rsq := r * r -// Poly1 := rsq*(P1_1 + rsq*(P1_2 + rsq*P1_3)) -// r_to_the_8 := rsq * rsq -// r_to_the_8 := r_to_the_8 * r_to_the_8 -// Poly2 := P1_4 + rsq*(P1_5 + rsq*(P1_6 + ... rsq*P1_9)) -// CORR := c * ( 1 + rsq ) -// Poly := Poly1 + r_to_the_8*Poly2 -// Result := r*Poly + CORR -// Result := r + Result ...in user-defined rounding -// ...note that Poly1 and r_to_the_8 can be computed in parallel -// ...with Poly2 (Poly1 is intentionally set to be much -// ...shorter than Poly2 so that r_to_the_8 and CORR can be hidden) -// -// For N odd, -// S_hi := -frcpa(r) ...8 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...16 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...32 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...64 bits -// S_lo := S_hi*( (1 + S_hi*r) + S_hi*c ) -// ...S_hi + S_lo is -1/(r+c) to extra precision -// S_lo := S_lo + Q1_1*c -// -// ...S_hi and S_lo are computed in parallel with -// ...the following -// rsq := r*r -// P := Q1_1 + rsq*(Q1_2 + rsq*(Q1_3 + ... + rsq*Q1_7)) -// -// Result := r*P + S_lo -// Result := S_hi + Result ...in user-defined rounding -// -// -// Algorithm for the case of normal_r -// ---------------------------------- -// -// Here, we first consider the computation of tan( r + c ). As -// presented in the previous section, -// -// tan( r + c ) = tan(r) + c * sec^2(r) -// = sgn_r * [ tan(B+x) + CORR ] -// CORR = sgn_r * c * tan(B) * 1/[sin(B)*cos(B)] -// -// because sec^2(r) = sec^(|r|), and B approximate |r| to 6.5 bits. -// -// tan( r + c ) = -// / (1/[sin(B)*cos(B)]) * tan(x) -// sgn_r * | tan(B) + -------------------------------- + -// \ cot(B) - tan(x) -// \ -// CORR | - -// / -// -// The values of tan(B), cot(B) and 1/(sin(B)*cos(B)) are -// calculated beforehand and stored in a table. Specifically, -// the table values are -// -// tan(B) as T_hi + T_lo; -// cot(B) as C_hi + C_lo; -// 1/[sin(B)*cos(B)] as SC_inv -// -// T_hi, C_hi are in double-precision memory format; -// T_lo, C_lo are in single-precision memory format; -// SC_inv is in extended-precision memory format. -// -// The value of tan(x) will be approximated by a short polynomial of -// the form -// -// tan(x) as x + x * P, where -// P = x^2 * (P2_1 + x^2 * (P2_2 + x^2 * P2_3)) -// -// Because |x| <= 2^(-7), cot(B) - x approximates cot(B) - tan(x) -// to a relative accuracy better than 2^(-20). Thus, a good -// initial guess of 1/( cot(B) - tan(x) ) to initiate the iterative -// division is: -// -// 1/(cot(B) - tan(x)) is approximately -// 1/(cot(B) - x) is -// tan(B)/(1 - x*tan(B)) is approximately -// T_hi / ( 1 - T_hi * x ) is approximately -// -// T_hi * [ 1 + (Thi * x) + (T_hi * x)^2 ] -// -// The calculation of tan(r+c) therefore proceed as follows: -// -// Tx := T_hi * x -// xsq := x * x -// -// V_hi := T_hi*(1 + Tx*(1 + Tx)) -// P := xsq * (P1_1 + xsq*(P1_2 + xsq*P1_3)) -// ...V_hi serves as an initial guess of 1/(cot(B) - tan(x)) -// ...good to about 20 bits of accuracy -// -// tanx := x + x*P -// D := C_hi - tanx -// ...D is a double precision denominator: cot(B) - tan(x) -// -// V_hi := V_hi + V_hi*(1 - V_hi*D) -// ....V_hi approximates 1/(cot(B)-tan(x)) to 40 bits -// -// V_lo := V_hi * ( [ (1 - V_hi*C_hi) + V_hi*tanx ] -// - V_hi*C_lo ) ...observe all order -// ...V_hi + V_lo approximates 1/(cot(B) - tan(x)) -// ...to extra accuracy -// -// ... SC_inv(B) * (x + x*P) -// ... tan(B) + ------------------------- + CORR -// ... cot(B) - (x + x*P) -// ... -// ... = tan(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR -// ... -// -// Sx := SC_inv * x -// CORR := sgn_r * c * SC_inv * T_hi -// -// ...put the ingredients together to compute -// ... SC_inv(B) * (x + x*P) -// ... tan(B) + ------------------------- + CORR -// ... cot(B) - (x + x*P) -// ... -// ... = tan(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR -// ... -// ... = T_hi + T_lo + CORR + -// ... Sx * V_hi + Sx * V_lo + Sx * P *(V_hi + V_lo) -// -// CORR := CORR + T_lo -// tail := V_lo + P*(V_hi + V_lo) -// tail := Sx * tail + CORR -// tail := Sx * V_hi + tail -// T_hi := sgn_r * T_hi -// -// ...T_hi + sgn_r*tail now approximate -// ...sgn_r*(tan(B+x) + CORR) accurately -// -// Result := T_hi + sgn_r*tail ...in user-defined -// ...rounding control -// ...It is crucial that independent paths be fully -// ...exploited for performance's sake. -// -// -// Next, we consider the computation of -cot( r + c ). As -// presented in the previous section, -// -// -cot( r + c ) = -cot(r) + c * csc^2(r) -// = sgn_r * [ -cot(B+x) + CORR ] -// CORR = sgn_r * c * cot(B) * 1/[sin(B)*cos(B)] -// -// because csc^2(r) = csc^(|r|), and B approximate |r| to 6.5 bits. -// -// -cot( r + c ) = -// / (1/[sin(B)*cos(B)]) * tan(x) -// sgn_r * | -cot(B) + -------------------------------- + -// \ tan(B) + tan(x) -// \ -// CORR | - -// / -// -// The values of tan(B), cot(B) and 1/(sin(B)*cos(B)) are -// calculated beforehand and stored in a table. Specifically, -// the table values are -// -// tan(B) as T_hi + T_lo; -// cot(B) as C_hi + C_lo; -// 1/[sin(B)*cos(B)] as SC_inv -// -// T_hi, C_hi are in double-precision memory format; -// T_lo, C_lo are in single-precision memory format; -// SC_inv is in extended-precision memory format. -// -// The value of tan(x) will be approximated by a short polynomial of -// the form -// -// tan(x) as x + x * P, where -// P = x^2 * (P2_1 + x^2 * (P2_2 + x^2 * P2_3)) -// -// Because |x| <= 2^(-7), tan(B) + x approximates tan(B) + tan(x) -// to a relative accuracy better than 2^(-18). Thus, a good -// initial guess of 1/( tan(B) + tan(x) ) to initiate the iterative -// division is: -// -// 1/(tan(B) + tan(x)) is approximately -// 1/(tan(B) + x) is -// cot(B)/(1 + x*cot(B)) is approximately -// C_hi / ( 1 + C_hi * x ) is approximately -// -// C_hi * [ 1 - (C_hi * x) + (C_hi * x)^2 ] -// -// The calculation of -cot(r+c) therefore proceed as follows: -// -// Cx := C_hi * x -// xsq := x * x -// -// V_hi := C_hi*(1 - Cx*(1 - Cx)) -// P := xsq * (P1_1 + xsq*(P1_2 + xsq*P1_3)) -// ...V_hi serves as an initial guess of 1/(tan(B) + tan(x)) -// ...good to about 18 bits of accuracy -// -// tanx := x + x*P -// D := T_hi + tanx -// ...D is a double precision denominator: tan(B) + tan(x) -// -// V_hi := V_hi + V_hi*(1 - V_hi*D) -// ....V_hi approximates 1/(tan(B)+tan(x)) to 40 bits -// -// V_lo := V_hi * ( [ (1 - V_hi*T_hi) - V_hi*tanx ] -// - V_hi*T_lo ) ...observe all order -// ...V_hi + V_lo approximates 1/(tan(B) + tan(x)) -// ...to extra accuracy -// -// ... SC_inv(B) * (x + x*P) -// ... -cot(B) + ------------------------- + CORR -// ... tan(B) + (x + x*P) -// ... -// ... =-cot(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR -// ... -// -// Sx := SC_inv * x -// CORR := sgn_r * c * SC_inv * C_hi -// -// ...put the ingredients together to compute -// ... SC_inv(B) * (x + x*P) -// ... -cot(B) + ------------------------- + CORR -// ... tan(B) + (x + x*P) -// ... -// ... =-cot(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR -// ... -// ... =-C_hi - C_lo + CORR + -// ... Sx * V_hi + Sx * V_lo + Sx * P *(V_hi + V_lo) -// -// CORR := CORR - C_lo -// tail := V_lo + P*(V_hi + V_lo) -// tail := Sx * tail + CORR -// tail := Sx * V_hi + tail -// C_hi := -sgn_r * C_hi -// -// ...C_hi + sgn_r*tail now approximates -// ...sgn_r*(-cot(B+x) + CORR) accurately -// -// Result := C_hi + sgn_r*tail in user-defined rounding control -// ...It is crucial that independent paths be fully -// ...exploited for performance's sake. -// -// 3. Implementation Notes -// ======================= -// -// Table entries T_hi, T_lo; C_hi, C_lo; SC_inv -// -// Recall that 2^(-2) <= |r| <= pi/4; -// -// r = sgn_r * 2^k * 1.b_1 b_2 ... b_63 -// -// and -// -// B = 2^k * 1.b_1 b_2 b_3 b_4 b_5 1 -// -// Thus, for k = -2, possible values of B are -// -// B = 2^(-2) * ( 1 + index/32 + 1/64 ), -// index ranges from 0 to 31 -// -// For k = -1, however, since |r| <= pi/4 = 0.78... -// possible values of B are -// -// B = 2^(-1) * ( 1 + index/32 + 1/64 ) -// index ranges from 0 to 19. -// -// - -#include "libm_support.h" - -#ifdef _LIBC -.rodata -#else -.data -#endif - -.align 128 - -TAN_BASE_CONSTANTS: -.type TAN_BASE_CONSTANTS, @object -data4 0x4B800000, 0xCB800000, 0x38800000, 0xB8800000 // two**24, -two**24 - // two**-14, -two**-14 -data4 0x4E44152A, 0xA2F9836E, 0x00003FFE, 0x00000000 // two_by_pi -data4 0xCE81B9F1, 0xC84D32B0, 0x00004016, 0x00000000 // P_0 -data4 0x2168C235, 0xC90FDAA2, 0x00003FFF, 0x00000000 // P_1 -data4 0xFC8F8CBB, 0xECE675D1, 0x0000BFBD, 0x00000000 // P_2 -data4 0xACC19C60, 0xB7ED8FBB, 0x0000BF7C, 0x00000000 // P_3 -data4 0x5F000000, 0xDF000000, 0x00000000, 0x00000000 // two_to_63, -two_to_63 -data4 0x6EC6B45A, 0xA397E504, 0x00003FE7, 0x00000000 // Inv_P_0 -data4 0xDBD171A1, 0x8D848E89, 0x0000BFBF, 0x00000000 // d_1 -data4 0x18A66F8E, 0xD5394C36, 0x0000BF7C, 0x00000000 // d_2 -data4 0x2168C234, 0xC90FDAA2, 0x00003FFE, 0x00000000 // PI_BY_4 -data4 0x2168C234, 0xC90FDAA2, 0x0000BFFE, 0x00000000 // MPI_BY_4 -data4 0x3E800000, 0xBE800000, 0x00000000, 0x00000000 // two**-2, -two**-2 -data4 0x2F000000, 0xAF000000, 0x00000000, 0x00000000 // two**-33, -two**-33 -data4 0xAAAAAABD, 0xAAAAAAAA, 0x00003FFD, 0x00000000 // P1_1 -data4 0x88882E6A, 0x88888888, 0x00003FFC, 0x00000000 // P1_2 -data4 0x0F0177B6, 0xDD0DD0DD, 0x00003FFA, 0x00000000 // P1_3 -data4 0x646B8C6D, 0xB327A440, 0x00003FF9, 0x00000000 // P1_4 -data4 0x1D5F7D20, 0x91371B25, 0x00003FF8, 0x00000000 // P1_5 -data4 0x61C67914, 0xEB69A5F1, 0x00003FF6, 0x00000000 // P1_6 -data4 0x019318D2, 0xBEDD37BE, 0x00003FF5, 0x00000000 // P1_7 -data4 0x3C794015, 0x9979B146, 0x00003FF4, 0x00000000 // P1_8 -data4 0x8C6EB58A, 0x8EBD21A3, 0x00003FF3, 0x00000000 // P1_9 -data4 0xAAAAAAB4, 0xAAAAAAAA, 0x00003FFD, 0x00000000 // Q1_1 -data4 0x0B5FC93E, 0xB60B60B6, 0x00003FF9, 0x00000000 // Q1_2 -data4 0x0C9BBFBF, 0x8AB355E0, 0x00003FF6, 0x00000000 // Q1_3 -data4 0xCBEE3D4C, 0xDDEBBC89, 0x00003FF2, 0x00000000 // Q1_4 -data4 0x5F80BBB6, 0xB3548A68, 0x00003FEF, 0x00000000 // Q1_5 -data4 0x4CED5BF1, 0x91362560, 0x00003FEC, 0x00000000 // Q1_6 -data4 0x8EE92A83, 0xF189D95A, 0x00003FE8, 0x00000000 // Q1_7 -data4 0xAAAB362F, 0xAAAAAAAA, 0x00003FFD, 0x00000000 // P2_1 -data4 0xE97A6097, 0x88888886, 0x00003FFC, 0x00000000 // P2_2 -data4 0x25E716A1, 0xDD108EE0, 0x00003FFA, 0x00000000 // P2_3 -// -// Entries T_hi double-precision memory format -// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) -// Entries T_lo single-precision memory format -// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) -// -data4 0x62400794, 0x3FD09BC3, 0x23A05C32, 0x00000000 -data4 0xDFFBC074, 0x3FD124A9, 0x240078B2, 0x00000000 -data4 0x5BD4920F, 0x3FD1AE23, 0x23826B8E, 0x00000000 -data4 0x15E2701D, 0x3FD23835, 0x22D31154, 0x00000000 -data4 0x63739C2D, 0x3FD2C2E4, 0x2265C9E2, 0x00000000 -data4 0xAFEEA48B, 0x3FD34E36, 0x245C05EB, 0x00000000 -data4 0x7DBB35D1, 0x3FD3DA31, 0x24749F2D, 0x00000000 -data4 0x67321619, 0x3FD466DA, 0x2462CECE, 0x00000000 -data4 0x1F94A4D5, 0x3FD4F437, 0x246D0DF1, 0x00000000 -data4 0x740C3E6D, 0x3FD5824D, 0x240A85B5, 0x00000000 -data4 0x4CB1E73D, 0x3FD61123, 0x23F96E33, 0x00000000 -data4 0xAD9EA64B, 0x3FD6A0BE, 0x247C5393, 0x00000000 -data4 0xB804FD01, 0x3FD73125, 0x241F3B29, 0x00000000 -data4 0xAB53EE83, 0x3FD7C25E, 0x2479989B, 0x00000000 -data4 0xE6640EED, 0x3FD8546F, 0x23B343BC, 0x00000000 -data4 0xE8AF1892, 0x3FD8E75F, 0x241454D1, 0x00000000 -data4 0x53928BDA, 0x3FD97B35, 0x238613D9, 0x00000000 -data4 0xEB9DE4DE, 0x3FDA0FF6, 0x22859FA7, 0x00000000 -data4 0x99ECF92D, 0x3FDAA5AB, 0x237A6D06, 0x00000000 -data4 0x6D8F1796, 0x3FDB3C5A, 0x23952F6C, 0x00000000 -data4 0x9CFB8BE4, 0x3FDBD40A, 0x2280FC95, 0x00000000 -data4 0x87943100, 0x3FDC6CC3, 0x245D2EC0, 0x00000000 -data4 0xB736C500, 0x3FDD068C, 0x23C4AD7D, 0x00000000 -data4 0xE1DDBC31, 0x3FDDA16D, 0x23D076E6, 0x00000000 -data4 0xEB515A93, 0x3FDE3D6E, 0x244809A6, 0x00000000 -data4 0xE6E9E5F1, 0x3FDEDA97, 0x220856C8, 0x00000000 -data4 0x1963CE69, 0x3FDF78F1, 0x244BE993, 0x00000000 -data4 0x7D635BCE, 0x3FE00C41, 0x23D21799, 0x00000000 -data4 0x1C302CD3, 0x3FE05CAB, 0x248A1B1D, 0x00000000 -data4 0xDB6A1FA0, 0x3FE0ADB9, 0x23D53E33, 0x00000000 -data4 0x4A20BA81, 0x3FE0FF72, 0x24DB9ED5, 0x00000000 -data4 0x153FA6F5, 0x3FE151D9, 0x24E9E451, 0x00000000 -// -// Entries T_hi double-precision memory format -// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) -// Entries T_lo single-precision memory format -// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) -// -data4 0xBA1BE39E, 0x3FE1CEC4, 0x24B60F9E, 0x00000000 -data4 0x5ABD9B2D, 0x3FE277E4, 0x248C2474, 0x00000000 -data4 0x0272B110, 0x3FE32418, 0x247B8311, 0x00000000 -data4 0x890E2DF0, 0x3FE3D38B, 0x24C55751, 0x00000000 -data4 0x46236871, 0x3FE4866D, 0x24E5BC34, 0x00000000 -data4 0x45E044B0, 0x3FE53CEE, 0x24001BA4, 0x00000000 -data4 0x82EC06E4, 0x3FE5F742, 0x24B973DC, 0x00000000 -data4 0x25DF43F9, 0x3FE6B5A1, 0x24895440, 0x00000000 -data4 0xCAFD348C, 0x3FE77844, 0x240021CA, 0x00000000 -data4 0xCEED6B92, 0x3FE83F6B, 0x24C45372, 0x00000000 -data4 0xA34F3665, 0x3FE90B58, 0x240DAD33, 0x00000000 -data4 0x2C1E56B4, 0x3FE9DC52, 0x24F846CE, 0x00000000 -data4 0x27041578, 0x3FEAB2A4, 0x2323FB6E, 0x00000000 -data4 0x9DD8C373, 0x3FEB8E9F, 0x24B3090B, 0x00000000 -data4 0x65C9AA7B, 0x3FEC709B, 0x2449F611, 0x00000000 -data4 0xACCF8435, 0x3FED58F4, 0x23616A7E, 0x00000000 -data4 0x97635082, 0x3FEE480F, 0x24C2FEAE, 0x00000000 -data4 0xF0ACC544, 0x3FEF3E57, 0x242CE964, 0x00000000 -data4 0xF7E06E4B, 0x3FF01E20, 0x2480D3EE, 0x00000000 -data4 0x8A798A69, 0x3FF0A125, 0x24DB8967, 0x00000000 -// -// Entries C_hi double-precision memory format -// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) -// Entries C_lo single-precision memory format -// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) -// -data4 0xE63EFBD0, 0x400ED3E2, 0x259D94D4, 0x00000000 -data4 0xC515DAB5, 0x400DDDB4, 0x245F0537, 0x00000000 -data4 0xBE19A79F, 0x400CF57A, 0x25D4EA9F, 0x00000000 -data4 0xD15298ED, 0x400C1A06, 0x24AE40A0, 0x00000000 -data4 0x164B2708, 0x400B4A4C, 0x25A5AAB6, 0x00000000 -data4 0x5285B068, 0x400A855A, 0x25524F18, 0x00000000 -data4 0x3FFA549F, 0x4009CA5A, 0x24C999C0, 0x00000000 -data4 0x646AF623, 0x4009188A, 0x254FD801, 0x00000000 -data4 0x6084D0E7, 0x40086F3C, 0x2560F5FD, 0x00000000 -data4 0xA29A76EE, 0x4007CDD2, 0x255B9D19, 0x00000000 -data4 0x6C8ECA95, 0x400733BE, 0x25CB021B, 0x00000000 -data4 0x1F8DDC52, 0x4006A07E, 0x24AB4722, 0x00000000 -data4 0xC298AD58, 0x4006139B, 0x252764E2, 0x00000000 -data4 0xBAD7164B, 0x40058CAB, 0x24DAF5DB, 0x00000000 -data4 0xAE31A5D3, 0x40050B4B, 0x25EA20F4, 0x00000000 -data4 0x89F85A8A, 0x40048F21, 0x2583A3E8, 0x00000000 -data4 0xA862380D, 0x400417DA, 0x25DCC4CC, 0x00000000 -data4 0x1088FCFE, 0x4003A52B, 0x2430A492, 0x00000000 -data4 0xCD3527D5, 0x400336CC, 0x255F77CF, 0x00000000 -data4 0x5760766D, 0x4002CC7F, 0x25DA0BDA, 0x00000000 -data4 0x11CE02E3, 0x40026607, 0x256FF4A2, 0x00000000 -data4 0xD37BBE04, 0x4002032C, 0x25208AED, 0x00000000 -data4 0x7F050775, 0x4001A3BD, 0x24B72DD6, 0x00000000 -data4 0xA554848A, 0x40014789, 0x24AB4DAA, 0x00000000 -data4 0x323E81B7, 0x4000EE65, 0x2584C440, 0x00000000 -data4 0x21CF1293, 0x40009827, 0x25C9428D, 0x00000000 -data4 0x3D415EEB, 0x400044A9, 0x25DC8482, 0x00000000 -data4 0xBD72C577, 0x3FFFE78F, 0x257F5070, 0x00000000 -data4 0x75EFD28E, 0x3FFF4AC3, 0x23EBBF7A, 0x00000000 -data4 0x60B52DDE, 0x3FFEB2AF, 0x22EECA07, 0x00000000 -data4 0x35204180, 0x3FFE1F19, 0x24191079, 0x00000000 -data4 0x54F7E60A, 0x3FFD8FCA, 0x248D3058, 0x00000000 -// -// Entries C_hi double-precision memory format -// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) -// Entries C_lo single-precision memory format -// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) -// -data4 0x79F6FADE, 0x3FFCC06A, 0x239C7886, 0x00000000 -data4 0x891662A6, 0x3FFBB91F, 0x250BD191, 0x00000000 -data4 0x529F155D, 0x3FFABFB6, 0x256CC3E6, 0x00000000 -data4 0x2E964AE9, 0x3FF9D300, 0x250843E3, 0x00000000 -data4 0x89DCB383, 0x3FF8F1EF, 0x2277C87E, 0x00000000 -data4 0x7C87DBD6, 0x3FF81B93, 0x256DA6CF, 0x00000000 -data4 0x1042EDE4, 0x3FF74F14, 0x2573D28A, 0x00000000 -data4 0x1784B360, 0x3FF68BAF, 0x242E489A, 0x00000000 -data4 0x7C923C4C, 0x3FF5D0B5, 0x2532D940, 0x00000000 -data4 0xF418EF20, 0x3FF51D88, 0x253C7DD6, 0x00000000 -data4 0x02F88DAE, 0x3FF4719A, 0x23DB59BF, 0x00000000 -data4 0x49DA0788, 0x3FF3CC66, 0x252B4756, 0x00000000 -data4 0x0B980DB8, 0x3FF32D77, 0x23FE585F, 0x00000000 -data4 0xE56C987A, 0x3FF2945F, 0x25378A63, 0x00000000 -data4 0xB16523F6, 0x3FF200BD, 0x247BB2E0, 0x00000000 -data4 0x8CE27778, 0x3FF17235, 0x24446538, 0x00000000 -data4 0xFDEFE692, 0x3FF0E873, 0x2514638F, 0x00000000 -data4 0x33154062, 0x3FF0632C, 0x24A7FC27, 0x00000000 -data4 0xB3EF115F, 0x3FEFC42E, 0x248FD0FE, 0x00000000 -data4 0x135D26F6, 0x3FEEC9E8, 0x2385C719, 0x00000000 -// -// Entries SC_inv in Swapped IEEE format (extended) -// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) -// -data4 0x1BF30C9E, 0x839D6D4A, 0x00004001, 0x00000000 -data4 0x554B0EB0, 0x80092804, 0x00004001, 0x00000000 -data4 0xA1CF0DE9, 0xF959F94C, 0x00004000, 0x00000000 -data4 0x77378677, 0xF3086BA0, 0x00004000, 0x00000000 -data4 0xCCD4723C, 0xED154515, 0x00004000, 0x00000000 -data4 0x1C27CF25, 0xE7790944, 0x00004000, 0x00000000 -data4 0x8DDACB88, 0xE22D037D, 0x00004000, 0x00000000 -data4 0x89C73522, 0xDD2B2D8A, 0x00004000, 0x00000000 -data4 0xBB2C1171, 0xD86E1A23, 0x00004000, 0x00000000 -data4 0xDFF5E0F9, 0xD3F0E288, 0x00004000, 0x00000000 -data4 0x283BEBD5, 0xCFAF16B1, 0x00004000, 0x00000000 -data4 0x0D88DD53, 0xCBA4AFAA, 0x00004000, 0x00000000 -data4 0xCA67C43D, 0xC7CE03CC, 0x00004000, 0x00000000 -data4 0x0CA0DDB0, 0xC427BC82, 0x00004000, 0x00000000 -data4 0xF13D8CAB, 0xC0AECD57, 0x00004000, 0x00000000 -data4 0x71ECE6B1, 0xBD606C38, 0x00004000, 0x00000000 -data4 0xA44C4929, 0xBA3A0A96, 0x00004000, 0x00000000 -data4 0xE5CCCEC1, 0xB7394F6F, 0x00004000, 0x00000000 -data4 0x9637D8BC, 0xB45C1203, 0x00004000, 0x00000000 -data4 0x92CB051B, 0xB1A05528, 0x00004000, 0x00000000 -data4 0x6BA2FFD0, 0xAF04432B, 0x00004000, 0x00000000 -data4 0x7221235F, 0xAC862A23, 0x00004000, 0x00000000 -data4 0x5F00A9D1, 0xAA2478AF, 0x00004000, 0x00000000 -data4 0x81E082BF, 0xA7DDBB0C, 0x00004000, 0x00000000 -data4 0x45684FEE, 0xA5B0987D, 0x00004000, 0x00000000 -data4 0x627A8F53, 0xA39BD0F5, 0x00004000, 0x00000000 -data4 0x6EC5C8B0, 0xA19E3B03, 0x00004000, 0x00000000 -data4 0x91CD7C66, 0x9FB6C1F0, 0x00004000, 0x00000000 -data4 0x1FA3DF8A, 0x9DE46410, 0x00004000, 0x00000000 -data4 0xA8F6B888, 0x9C263139, 0x00004000, 0x00000000 -data4 0xC27B0450, 0x9A7B4968, 0x00004000, 0x00000000 -data4 0x5EE614EE, 0x98E2DB7E, 0x00004000, 0x00000000 -// -// Entries SC_inv in Swapped IEEE format (extended) -// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) -// -data4 0x13B2B5BA, 0x969F335C, 0x00004000, 0x00000000 -data4 0xD4C0F548, 0x93D446D9, 0x00004000, 0x00000000 -data4 0x61B798AF, 0x9147094F, 0x00004000, 0x00000000 -data4 0x758787AC, 0x8EF317CC, 0x00004000, 0x00000000 -data4 0xB99EEFDB, 0x8CD498B3, 0x00004000, 0x00000000 -data4 0xDFF8BC37, 0x8AE82A7D, 0x00004000, 0x00000000 -data4 0xE3C55D42, 0x892AD546, 0x00004000, 0x00000000 -data4 0xD15573C1, 0x8799FEA9, 0x00004000, 0x00000000 -data4 0x435A4B4C, 0x86335F88, 0x00004000, 0x00000000 -data4 0x3E93A87B, 0x84F4FB6E, 0x00004000, 0x00000000 -data4 0x80A382FB, 0x83DD1952, 0x00004000, 0x00000000 -data4 0xA4CB8C9E, 0x82EA3D7F, 0x00004000, 0x00000000 -data4 0x6861D0A8, 0x821B247C, 0x00004000, 0x00000000 -data4 0x63E8D244, 0x816EBED1, 0x00004000, 0x00000000 -data4 0x27E4CFC6, 0x80E42D91, 0x00004000, 0x00000000 -data4 0x28E64AFD, 0x807ABF8D, 0x00004000, 0x00000000 -data4 0x863B4FD8, 0x8031EF26, 0x00004000, 0x00000000 -data4 0xAE8C11FD, 0x800960AD, 0x00004000, 0x00000000 -data4 0x5FDBEC21, 0x8000E147, 0x00004000, 0x00000000 -data4 0xA07791FA, 0x80186650, 0x00004000, 0x00000000 - -Arg = f8 -Result = f8 -fp_tmp = f9 -U_2 = f10 -rsq = f11 -C_hi = f12 -C_lo = f13 -T_hi = f14 -T_lo = f15 - -N_0 = f32 -d_1 = f33 -MPI_BY_4 = f34 -tail = f35 -tanx = f36 -Cx = f37 -Sx = f38 -sgn_r = f39 -CORR = f40 -P = f41 -D = f42 -ArgPrime = f43 -P_0 = f44 - -P2_1 = f45 -P2_2 = f46 -P2_3 = f47 - -P1_1 = f45 -P1_2 = f46 -P1_3 = f47 - -P1_4 = f48 -P1_5 = f49 -P1_6 = f50 -P1_7 = f51 -P1_8 = f52 -P1_9 = f53 - -TWO_TO_63 = f54 -NEGTWO_TO_63 = f55 -x = f56 -xsq = f57 -Tx = f58 -Tx1 = f59 -Set = f60 -poly1 = f61 -poly2 = f62 -Poly = f63 -Poly1 = f64 -Poly2 = f65 -r_to_the_8 = f66 -B = f67 -SC_inv = f68 -Pos_r = f69 -N_0_fix = f70 -PI_BY_4 = f71 -NEGTWO_TO_NEG2 = f72 -TWO_TO_24 = f73 -TWO_TO_NEG14 = f74 -TWO_TO_NEG33 = f75 -NEGTWO_TO_24 = f76 -NEGTWO_TO_NEG14 = f76 -NEGTWO_TO_NEG33 = f77 -two_by_PI = f78 -N = f79 -N_fix = f80 -P_1 = f81 -P_2 = f82 -P_3 = f83 -s_val = f84 -w = f85 -c = f86 -r = f87 -Z = f88 -A = f89 -a = f90 -t = f91 -U_1 = f92 -d_2 = f93 -TWO_TO_NEG2 = f94 -Q1_1 = f95 -Q1_2 = f96 -Q1_3 = f97 -Q1_4 = f98 -Q1_5 = f99 -Q1_6 = f100 -Q1_7 = f101 -Q1_8 = f102 -S_hi = f103 -S_lo = f104 -V_hi = f105 -V_lo = f106 -U_hi = f107 -U_lo = f108 -U_hiabs = f109 -V_hiabs = f110 -V = f111 -Inv_P_0 = f112 - -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_SAVE_PFS = r35 - -delta1 = r36 -table_ptr1 = r37 -table_ptr2 = r38 -i_0 = r39 -i_1 = r40 -N_fix_gr = r41 -N_inc = r42 -exp_Arg = r43 -exp_r = r44 -sig_r = r45 -lookup = r46 -table_offset = r47 -Create_B = r48 -gr_tmp = r49 - -GR_Parameter_X = r49 -GR_Parameter_r = r50 - - - -.global __libm_tan -.section .text -.proc __libm_tan - - -__libm_tan: - -{ .mfi -alloc r32 = ar.pfs, 0,17,2,0 -(p0) fclass.m.unc p6,p0 = Arg, 0x1E7 - addl gr_tmp = -1,r0 -} -;; - -{ .mfi - nop.m 999 -(p0) fclass.nm.unc p7,p0 = Arg, 0x1FF - nop.i 999 -} -;; - -{ .mfi -(p0) addl table_ptr1 = @ltoff(TAN_BASE_CONSTANTS), gp - nop.f 999 - nop.i 999 -} -;; - -{ .mmi - ld8 table_ptr1 = [table_ptr1] - setf.sig fp_tmp = gr_tmp // Make a constant so fmpy produces inexact - nop.i 999 -} -;; - -// -// Check for NatVals, Infs , NaNs, and Zeros -// Check for everything - if false, then must be pseudo-zero -// or pseudo-nan. -// Local table pointer -// - -{ .mbb -(p0) add table_ptr2 = 96, table_ptr1 -(p6) br.cond.spnt __libm_TAN_SPECIAL -(p7) br.cond.spnt __libm_TAN_SPECIAL ;; -} -// -// Point to Inv_P_0 -// Branch out to deal with unsupporteds and special values. -// - -{ .mmf -(p0) ldfs TWO_TO_24 = [table_ptr1],4 -(p0) ldfs TWO_TO_63 = [table_ptr2],4 -// -// Load -2**24, load -2**63. -// -(p0) fcmp.eq.s0 p0, p6 = Arg, f1 ;; -} - -{ .mfi -(p0) ldfs NEGTWO_TO_63 = [table_ptr2],12 -(p0) fnorm.s1 Arg = Arg - nop.i 999 -} -// -// Load 2**24, Load 2**63. -// - -{ .mmi -(p0) ldfs NEGTWO_TO_24 = [table_ptr1],12 ;; -// -// Do fcmp to generate Denormal exception -// - can't do FNORM (will generate Underflow when U is unmasked!) -// Normalize input argument. -// -(p0) ldfe two_by_PI = [table_ptr1],16 - nop.i 999 -} - -{ .mmi -(p0) ldfe Inv_P_0 = [table_ptr2],16 ;; -(p0) ldfe d_1 = [table_ptr2],16 - nop.i 999 -} -// -// Decide about the paths to take: -// PR_1 and PR_3 set if -2**24 < Arg < 2**24 - CASE 1 OR 2 -// OTHERWISE - CASE 3 OR 4 -// Load inverse of P_0 . -// Set PR_6 if Arg <= -2**63 -// Are there any Infs, NaNs, or zeros? -// - -{ .mmi -(p0) ldfe P_0 = [table_ptr1],16 ;; -(p0) ldfe d_2 = [table_ptr2],16 - nop.i 999 -} -// -// Set PR_8 if Arg <= -2**24 -// Set PR_6 if Arg >= 2**63 -// - -{ .mmi -(p0) ldfe P_1 = [table_ptr1],16 ;; -(p0) ldfe PI_BY_4 = [table_ptr2],16 - nop.i 999 -} -// -// Set PR_8 if Arg >= 2**24 -// - -{ .mmi -(p0) ldfe P_2 = [table_ptr1],16 ;; -(p0) ldfe MPI_BY_4 = [table_ptr2],16 - nop.i 999 -} -// -// Load P_2 and PI_BY_4 -// - -{ .mfi -(p0) ldfe P_3 = [table_ptr1],16 - nop.f 999 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p0) fcmp.le.unc.s1 p6,p7 = Arg,NEGTWO_TO_63 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p0) fcmp.le.unc.s1 p8,p9 = Arg,NEGTWO_TO_24 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p7) fcmp.ge.s1 p6,p0 = Arg,TWO_TO_63 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p9) fcmp.ge.s1 p8,p0 = Arg,TWO_TO_24 - nop.i 999 ;; -} - -{ .mib - nop.m 999 - nop.i 999 -// -// Load P_3 and -PI_BY_4 -// -(p6) br.cond.spnt TAN_ARG_TOO_LARGE ;; -} - -{ .mib - nop.m 999 - nop.i 999 -// -// Load 2**(-2). -// Load -2**(-2). -// Branch out if we have a special argument. -// Branch out if the magnitude of the input argument is too large -// - do this branch before the next. -// -(p8) br.cond.spnt TAN_LARGER_ARG ;; -} -// -// Branch to Cases 3 or 4 if Arg <= -2**24 or Arg >= 2**24 -// - -{ .mfi -(p0) ldfs TWO_TO_NEG2 = [table_ptr2],4 -// ARGUMENT REDUCTION CODE - CASE 1 and 2 -// Load 2**(-2). -// Load -2**(-2). -(p0) fmpy.s1 N = Arg,two_by_PI - nop.i 999 ;; -} - -{ .mfi -(p0) ldfs NEGTWO_TO_NEG2 = [table_ptr2],12 -// -// N = Arg * 2/pi -// -(p0) fcmp.lt.unc.s1 p8,p9= Arg,PI_BY_4 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// if Arg < pi/4, set PR_8. -// -(p8) fcmp.gt.s1 p8,p9= Arg,MPI_BY_4 - nop.i 999 ;; -} -// -// Case 1: Is |r| < 2**(-2). -// Arg is the same as r in this case. -// r = Arg -// c = 0 -// - -{ .mfi -(p8) mov N_fix_gr = r0 -// -// if Arg > -pi/4, reset PR_8. -// Select the case when |Arg| < pi/4 - set PR[8] = true. -// Else Select the case when |Arg| >= pi/4 - set PR[9] = true. -// -(p0) fcvt.fx.s1 N_fix = N - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Grab the integer part of N . -// -(p8) mov r = Arg - nop.i 999 -} - -{ .mfi - nop.m 999 -(p8) mov c = f0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p8) fcmp.lt.unc.s1 p10, p11 = Arg, TWO_TO_NEG2 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p10) fcmp.gt.s1 p10,p0 = Arg, NEGTWO_TO_NEG2 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 2: Place integer part of N in GP register. -// -(p9) fcvt.xf N = N_fix - nop.i 999 ;; -} - -{ .mib -(p9) getf.sig N_fix_gr = N_fix - nop.i 999 -// -// Case 2: Convert integer N_fix back to normalized floating-point value. -// -(p10) br.cond.spnt TAN_SMALL_R ;; -} - -{ .mib - nop.m 999 - nop.i 999 -(p8) br.cond.sptk TAN_NORMAL_R ;; -} -// -// Case 1: PR_3 is only affected when PR_1 is set. -// - -{ .mmi -(p9) ldfs TWO_TO_NEG33 = [table_ptr2], 4 ;; -// -// Case 2: Load 2**(-33). -// -(p9) ldfs NEGTWO_TO_NEG33 = [table_ptr2], 4 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 2: Load -2**(-33). -// -(p9) fnma.s1 s_val = N, P_1, Arg - nop.i 999 -} - -{ .mfi - nop.m 999 -(p9) fmpy.s1 w = N, P_2 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 2: w = N * P_2 -// Case 2: s_val = -N * P_1 + Arg -// -(p0) fcmp.lt.unc.s1 p9,p8 = s_val, TWO_TO_NEG33 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Decide between case_1 and case_2 reduce: -// -(p9) fcmp.gt.s1 p9, p8 = s_val, NEGTWO_TO_NEG33 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 1_reduce: s <= -2**(-33) or s >= 2**(-33) -// Case 2_reduce: -2**(-33) < s < 2**(-33) -// -(p8) fsub.s1 r = s_val, w - nop.i 999 -} - -{ .mfi - nop.m 999 -(p9) fmpy.s1 w = N, P_3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p9) fma.s1 U_1 = N, P_2, w - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// Case 1_reduce: Is |r| < 2**(-2), if so set PR_10 -// else set PR_11. -// -(p8) fsub.s1 c = s_val, r - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 1_reduce: r = s + w (change sign) -// Case 2_reduce: w = N * P_3 (change sign) -// -(p8) fcmp.lt.unc.s1 p10, p11 = r, TWO_TO_NEG2 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p10) fcmp.gt.s1 p10, p11 = r, NEGTWO_TO_NEG2 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p9) fsub.s1 r = s_val, U_1 - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// Case 1_reduce: c is complete here. -// c = c + w (w has not been negated.) -// Case 2_reduce: r is complete here - continue to calculate c . -// r = s - U_1 -// -(p9) fms.s1 U_2 = N, P_2, U_1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 1_reduce: c = s - r -// Case 2_reduce: U_1 = N * P_2 + w -// -(p8) fsub.s1 c = c, w - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p9) fsub.s1 s_val = s_val, r - nop.i 999 -} - -{ .mfb - nop.m 999 -// -// Case 2_reduce: -// U_2 = N * P_2 - U_1 -// Not needed until later. -// -(p9) fadd.s1 U_2 = U_2, w -// -// Case 2_reduce: -// s = s - r -// U_2 = U_2 + w -// -(p10) br.cond.spnt TAN_SMALL_R ;; -} - -{ .mib - nop.m 999 - nop.i 999 -(p11) br.cond.sptk TAN_NORMAL_R ;; -} - -{ .mii - nop.m 999 -// -// Case 2_reduce: -// c = c - U_2 -// c is complete here -// Argument reduction ends here. -// -(p9) extr.u i_1 = N_fix_gr, 0, 1 ;; -(p9) cmp.eq.unc p11, p12 = 0x0000,i_1 ;; -} - -{ .mfi - nop.m 999 -// -// Is i_1 even or odd? -// if i_1 == 0, set p11, else set p12. -// -(p11) fmpy.s1 rsq = r, Z - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) frcpa.s1 S_hi,p0 = f1, r - nop.i 999 -} - -// -// Case 1: Branch to SMALL_R or NORMAL_R. -// Case 1 is done now. -// - -{ .mfi -(p9) addl table_ptr1 = @ltoff(TAN_BASE_CONSTANTS), gp -(p9) fsub.s1 c = s_val, U_1 - nop.i 999 ;; -} -;; - -{ .mmi -(p9) ld8 table_ptr1 = [table_ptr1] - nop.m 999 - nop.i 999 -} -;; - -{ .mmi -(p9) add table_ptr1 = 224, table_ptr1 ;; -(p9) ldfe P1_1 = [table_ptr1],144 - nop.i 999 ;; -} -// -// Get [i_1] - lsb of N_fix_gr . -// Load P1_1 and point to Q1_1 . -// - -{ .mfi -(p9) ldfe Q1_1 = [table_ptr1] , 0 -// -// N even: rsq = r * Z -// N odd: S_hi = frcpa(r) -// -(p12) fmerge.ns S_hi = S_hi, S_hi - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// Case 2_reduce: -// c = s - U_1 -// -(p9) fsub.s1 c = c, U_2 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: Change sign of S_hi -// -(p11) fmpy.s1 rsq = rsq, P1_1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: rsq = rsq * P1_1 -// N odd: poly1 = 1.0 + S_hi * r 16 bits partial account for necessary -// -(p11) fma.s1 Result = r, rsq, c - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: Result = c + r * rsq -// N odd: S_hi = S_hi + S_hi*poly1 16 bits account for necessary -// -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: Result = Result + r -// N odd: poly1 = 1.0 + S_hi * r 32 bits partial -// -(p11) fadd.s0 Result = r, Result - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: Result1 = Result + r -// N odd: S_hi = S_hi * poly1 + S_hi 32 bits -// -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * r + 1.0 64 bits partial -// -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * poly + 1.0 64 bits -// -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * r + 1.0 -// -(p12) fma.s1 poly1 = S_hi, c, poly1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * c + poly1 -// -(p12) fmpy.s1 S_lo = S_hi, poly1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: S_lo = S_hi * poly1 -// -(p12) fma.s1 S_lo = Q1_1, r, S_lo - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// N odd: Result = S_hi + S_lo -// -(p0) fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -// -// N odd: S_lo = S_lo + Q1_1 * r -// -(p12) fadd.s0 Result = S_hi, S_lo -(p0) br.ret.sptk b0 ;; -} - - -TAN_LARGER_ARG: - -{ .mmf -(p0) addl table_ptr1 = @ltoff(TAN_BASE_CONSTANTS), gp - nop.m 999 -(p0) fmpy.s1 N_0 = Arg, Inv_P_0 -} -;; - -// -// ARGUMENT REDUCTION CODE - CASE 3 and 4 -// -// -// Adjust table_ptr1 to beginning of table. -// N_0 = Arg * Inv_P_0 -// - - -{ .mmi -(p0) ld8 table_ptr1 = [table_ptr1] - nop.m 999 - nop.i 999 -} -;; - - -{ .mmi -(p0) add table_ptr1 = 8, table_ptr1 ;; -// -// Point to 2*-14 -// -(p0) ldfs TWO_TO_NEG14 = [table_ptr1], 4 - nop.i 999 ;; -} -// -// Load 2**(-14). -// - -{ .mmi -(p0) ldfs NEGTWO_TO_NEG14 = [table_ptr1], 180 ;; -// -// N_0_fix = integer part of N_0 . -// Adjust table_ptr1 to beginning of table. -// -(p0) ldfs TWO_TO_NEG2 = [table_ptr1], 4 - nop.i 999 ;; -} -// -// Make N_0 the integer part. -// - -{ .mfi -(p0) ldfs NEGTWO_TO_NEG2 = [table_ptr1] -// -// Load -2**(-14). -// -(p0) fcvt.fx.s1 N_0_fix = N_0 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p0) fcvt.xf N_0 = N_0_fix - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p0) fnma.s1 ArgPrime = N_0, P_0, Arg - nop.i 999 -} - -{ .mfi - nop.m 999 -(p0) fmpy.s1 w = N_0, d_1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// ArgPrime = -N_0 * P_0 + Arg -// w = N_0 * d_1 -// -(p0) fmpy.s1 N = ArgPrime, two_by_PI - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N = ArgPrime * 2/pi -// -(p0) fcvt.fx.s1 N_fix = N - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N_fix is the integer part. -// -(p0) fcvt.xf N = N_fix - nop.i 999 ;; -} - -{ .mfi -(p0) getf.sig N_fix_gr = N_fix - nop.f 999 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N is the integer part of the reduced-reduced argument. -// Put the integer in a GP register. -// -(p0) fnma.s1 s_val = N, P_1, ArgPrime - nop.i 999 -} - -{ .mfi - nop.m 999 -(p0) fnma.s1 w = N, P_2, w - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// s_val = -N*P_1 + ArgPrime -// w = -N*P_2 + w -// -(p0) fcmp.lt.unc.s1 p11, p10 = s_val, TWO_TO_NEG14 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p11) fcmp.gt.s1 p11, p10 = s_val, NEGTWO_TO_NEG14 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 3: r = s_val + w (Z complete) -// Case 4: U_hi = N_0 * d_1 -// -(p10) fmpy.s1 V_hi = N, P_2 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p11) fmpy.s1 U_hi = N_0, d_1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 3: r = s_val + w (Z complete) -// Case 4: U_hi = N_0 * d_1 -// -(p11) fmpy.s1 V_hi = N, P_2 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p11) fmpy.s1 U_hi = N_0, d_1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Decide between case 3 and 4: -// Case 3: s <= -2**(-14) or s >= 2**(-14) -// Case 4: -2**(-14) < s < 2**(-14) -// -(p10) fadd.s1 r = s_val, w - nop.i 999 -} - -{ .mfi - nop.m 999 -(p11) fmpy.s1 w = N, P_3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 4: We need abs of both U_hi and V_hi - dont -// worry about switched sign of V_hi . -// -(p11) fsub.s1 A = U_hi, V_hi - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// Case 4: A = U_hi + V_hi -// Note: Worry about switched sign of V_hi, so subtract instead of add. -// -(p11) fnma.s1 V_lo = N, P_2, V_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p11) fms.s1 U_lo = N_0, d_1, U_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p11) fabs V_hiabs = V_hi - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// Case 4: V_hi = N * P_2 -// w = N * P_3 -// Note the product does not include the (-) as in the writeup -// so (-) missing for V_hi and w . -(p10) fadd.s1 r = s_val, w - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 3: c = s_val - r -// Case 4: U_lo = N_0 * d_1 - U_hi -// -(p11) fabs U_hiabs = U_hi - nop.i 999 -} - -{ .mfi - nop.m 999 -(p11) fmpy.s1 w = N, P_3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 4: Set P_12 if U_hiabs >= V_hiabs -// -(p11) fadd.s1 C_hi = s_val, A - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 4: C_hi = s_val + A -// -(p11) fadd.s1 t = U_lo, V_lo - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 3: Is |r| < 2**(-2), if so set PR_7 -// else set PR_8. -// Case 3: If PR_7 is set, prepare to branch to Small_R. -// Case 3: If PR_8 is set, prepare to branch to Normal_R. -// -(p10) fsub.s1 c = s_val, r - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 3: c = (s - r) + w (c complete) -// -(p11) fcmp.ge.unc.s1 p12, p13 = U_hiabs, V_hiabs - nop.i 999 -} - -{ .mfi - nop.m 999 -(p11) fms.s1 w = N_0, d_2, w - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 4: V_hi = N * P_2 -// w = N * P_3 -// Note the product does not include the (-) as in the writeup -// so (-) missing for V_hi and w . -// -(p10) fcmp.lt.unc.s1 p14, p15 = r, TWO_TO_NEG2 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p14) fcmp.gt.s1 p14, p15 = r, NEGTWO_TO_NEG2 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -// -// Case 4: V_lo = -N * P_2 - V_hi (U_hi is in place of V_hi in writeup) -// Note: the (-) is still missing for V_hi . -// Case 4: w = w + N_0 * d_2 -// Note: the (-) is now incorporated in w . -// -(p10) fadd.s1 c = c, w -// -// Case 4: t = U_lo + V_lo -// Note: remember V_lo should be (-), subtract instead of add. NO -// -(p14) br.cond.spnt TAN_SMALL_R ;; -} - -{ .mib - nop.m 999 - nop.i 999 -(p15) br.cond.spnt TAN_NORMAL_R ;; -} - -{ .mfi - nop.m 999 -// -// Case 3: Vector off when |r| < 2**(-2). Recall that PR_3 will be true. -// The remaining stuff is for Case 4. -// -(p12) fsub.s1 a = U_hi, A -(p11) extr.u i_1 = N_fix_gr, 0, 1 ;; -} - -{ .mfi - nop.m 999 -// -// Case 4: C_lo = s_val - C_hi -// -(p11) fadd.s1 t = t, w - nop.i 999 -} - -{ .mfi - nop.m 999 -(p13) fadd.s1 a = V_hi, A - nop.i 999 ;; -} - -// -// Case 4: a = U_hi - A -// a = V_hi - A (do an add to account for missing (-) on V_hi -// - -{ .mfi -(p11) addl table_ptr1 = @ltoff(TAN_BASE_CONSTANTS), gp -(p11) fsub.s1 C_lo = s_val, C_hi - nop.i 999 -} -;; - -{ .mmi -(p11) ld8 table_ptr1 = [table_ptr1] - nop.m 999 - nop.i 999 -} -;; - -// -// Case 4: a = (U_hi - A) + V_hi -// a = (V_hi - A) + U_hi -// In each case account for negative missing form V_hi . -// -// -// Case 4: C_lo = (s_val - C_hi) + A -// - -{ .mmi -(p11) add table_ptr1 = 224, table_ptr1 ;; -(p11) ldfe P1_1 = [table_ptr1], 16 - nop.i 999 ;; -} - -{ .mfi -(p11) ldfe P1_2 = [table_ptr1], 128 -// -// Case 4: w = U_lo + V_lo + w -// -(p12) fsub.s1 a = a, V_hi - nop.i 999 ;; -} -// -// Case 4: r = C_hi + C_lo -// - -{ .mfi -(p11) ldfe Q1_1 = [table_ptr1], 16 -(p11) fadd.s1 C_lo = C_lo, A - nop.i 999 ;; -} -// -// Case 4: c = C_hi - r -// Get [i_1] - lsb of N_fix_gr. -// - -{ .mfi -(p11) ldfe Q1_2 = [table_ptr1], 16 - nop.f 999 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p13) fsub.s1 a = U_hi, a - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p11) fadd.s1 t = t, a - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 4: t = t + a -// -(p11) fadd.s1 C_lo = C_lo, t - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Case 4: C_lo = C_lo + t -// -(p11) fadd.s1 r = C_hi, C_lo - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p11) fsub.s1 c = C_hi, r - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// Case 4: c = c + C_lo finished. -// Is i_1 even or odd? -// if i_1 == 0, set PR_4, else set PR_5. -// -// r and c have been computed. -// We known whether this is the sine or cosine routine. -// Make sure ftz mode is set - should be automatic when using wre -(p0) fmpy.s1 rsq = r, r - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p11) fadd.s1 c = c , C_lo -(p11) cmp.eq.unc p11, p12 = 0x0000, i_1 ;; -} - -{ .mfi - nop.m 999 -(p12) frcpa.s1 S_hi, p0 = f1, r - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// N odd: Change sign of S_hi -// -(p11) fma.s1 Result = rsq, P1_2, P1_1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fma.s1 P = rsq, Q1_2, Q1_1 - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// N odd: Result = S_hi + S_lo (User supplied rounding mode for C1) -// -(p0) fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: rsq = r * r -// N odd: S_hi = frcpa(r) -// -(p12) fmerge.ns S_hi = S_hi, S_hi - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// N even: rsq = rsq * P1_2 + P1_1 -// N odd: poly1 = 1.0 + S_hi * r 16 bits partial account for necessary -// -(p11) fmpy.s1 Result = rsq, Result - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fma.s1 poly1 = S_hi, r,f1 - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// N even: Result = Result * rsq -// N odd: S_hi = S_hi + S_hi*poly1 16 bits account for necessary -// -(p11) fma.s1 Result = r, Result, c - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// N odd: S_hi = S_hi * poly1 + S_hi 32 bits -// -(p11) fadd.s0 Result= r, Result - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: Result = Result * r + c -// N odd: poly1 = 1.0 + S_hi * r 32 bits partial -// -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: Result1 = Result + r (Rounding mode S0) -// N odd: poly1 = S_hi * r + 1.0 64 bits partial -// -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * poly + S_hi 64 bits -// -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * r + 1.0 -// -(p12) fma.s1 poly1 = S_hi, c, poly1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * c + poly1 -// -(p12) fmpy.s1 S_lo = S_hi, poly1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: S_lo = S_hi * poly1 -// -(p12) fma.s1 S_lo = P, r, S_lo - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -// -// N odd: S_lo = S_lo + r * P -// -(p12) fadd.s0 Result = S_hi, S_lo -(p0) br.ret.sptk b0 ;; -} - - -TAN_SMALL_R: - -{ .mii - nop.m 999 -(p0) extr.u i_1 = N_fix_gr, 0, 1 ;; -(p0) cmp.eq.unc p11, p12 = 0x0000, i_1 -} - -{ .mfi - nop.m 999 -(p0) fmpy.s1 rsq = r, r - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) frcpa.s1 S_hi, p0 = f1, r - nop.i 999 -} - -{ .mfi -(p0) addl table_ptr1 = @ltoff(TAN_BASE_CONSTANTS), gp - nop.f 999 - nop.i 999 -} -;; - -{ .mmi -(p0) ld8 table_ptr1 = [table_ptr1] - nop.m 999 - nop.i 999 -} -;; - -// ***************************************************************** -// ***************************************************************** -// ***************************************************************** - -{ .mmi -(p0) add table_ptr1 = 224, table_ptr1 ;; -(p0) ldfe P1_1 = [table_ptr1], 16 - nop.i 999 ;; -} -// r and c have been computed. -// We known whether this is the sine or cosine routine. -// Make sure ftz mode is set - should be automatic when using wre -// |r| < 2**(-2) - -{ .mfi -(p0) ldfe P1_2 = [table_ptr1], 16 -(p11) fmpy.s1 r_to_the_8 = rsq, rsq - nop.i 999 ;; -} -// -// Set table_ptr1 to beginning of constant table. -// Get [i_1] - lsb of N_fix_gr. -// - -{ .mfi -(p0) ldfe P1_3 = [table_ptr1], 96 -// -// N even: rsq = r * r -// N odd: S_hi = frcpa(r) -// -(p12) fmerge.ns S_hi = S_hi, S_hi - nop.i 999 ;; -} -// -// Is i_1 even or odd? -// if i_1 == 0, set PR_11. -// if i_1 != 0, set PR_12. -// - -{ .mfi -(p11) ldfe P1_9 = [table_ptr1], -16 -// -// N even: Poly2 = P1_7 + Poly2 * rsq -// N odd: poly2 = Q1_5 + poly2 * rsq -// -(p11) fadd.s1 CORR = rsq, f1 - nop.i 999 ;; -} - -{ .mmi -(p11) ldfe P1_8 = [table_ptr1], -16 ;; -// -// N even: Poly1 = P1_2 + P1_3 * rsq -// N odd: poly1 = 1.0 + S_hi * r -// 16 bits partial account for necessary (-1) -// -(p11) ldfe P1_7 = [table_ptr1], -16 - nop.i 999 ;; -} -// -// N even: Poly1 = P1_1 + Poly1 * rsq -// N odd: S_hi = S_hi + S_hi * poly1) 16 bits account for necessary -// - -{ .mfi -(p11) ldfe P1_6 = [table_ptr1], -16 -// -// N even: Poly2 = P1_5 + Poly2 * rsq -// N odd: poly2 = Q1_3 + poly2 * rsq -// -(p11) fmpy.s1 r_to_the_8 = r_to_the_8, r_to_the_8 - nop.i 999 ;; -} -// -// N even: Poly1 = Poly1 * rsq -// N odd: poly1 = 1.0 + S_hi * r 32 bits partial -// - -{ .mfi -(p11) ldfe P1_5 = [table_ptr1], -16 -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} -// -// N even: CORR = CORR * c -// N odd: S_hi = S_hi * poly1 + S_hi 32 bits -// - -// -// N even: Poly2 = P1_6 + Poly2 * rsq -// N odd: poly2 = Q1_4 + poly2 * rsq -// -{ .mmf -(p0) addl table_ptr2 = @ltoff(TAN_BASE_CONSTANTS), gp -(p11) ldfe P1_4 = [table_ptr1], -16 -(p11) fmpy.s1 CORR = CORR, c -} -;; - - -{ .mmi -(p0) ld8 table_ptr2 = [table_ptr2] - nop.m 999 - nop.i 999 -} -;; - - -{ .mii -(p0) add table_ptr2 = 464, table_ptr2 - nop.i 999 ;; - nop.i 999 -} - -{ .mfi - nop.m 999 -(p11) fma.s1 Poly1 = P1_3, rsq, P1_2 - nop.i 999 ;; -} - -{ .mfi -(p0) ldfe Q1_7 = [table_ptr2], -16 -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 ;; -} - -{ .mfi -(p0) ldfe Q1_6 = [table_ptr2], -16 -(p11) fma.s1 Poly2 = P1_9, rsq, P1_8 - nop.i 999 ;; -} - -{ .mmi -(p0) ldfe Q1_5 = [table_ptr2], -16 ;; -(p12) ldfe Q1_4 = [table_ptr2], -16 - nop.i 999 ;; -} - -{ .mfi -(p12) ldfe Q1_3 = [table_ptr2], -16 -// -// N even: Poly2 = P1_8 + P1_9 * rsq -// N odd: poly2 = Q1_6 + Q1_7 * rsq -// -(p11) fma.s1 Poly1 = Poly1, rsq, P1_1 - nop.i 999 ;; -} - -{ .mfi -(p12) ldfe Q1_2 = [table_ptr2], -16 -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} - -{ .mfi -(p12) ldfe Q1_1 = [table_ptr2], -16 -(p11) fma.s1 Poly2 = Poly2, rsq, P1_7 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: CORR = rsq + 1 -// N even: r_to_the_8 = rsq * rsq -// -(p11) fmpy.s1 Poly1 = Poly1, rsq - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 -} - -{ .mfi - nop.m 999 -(p12) fma.s1 poly2 = Q1_7, rsq, Q1_6 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p11) fma.s1 Poly2 = Poly2, rsq, P1_6 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p12) fma.s1 poly2 = poly2, rsq, Q1_5 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p11) fma.s1 Poly2= Poly2, rsq, P1_5 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 -} - -{ .mfi - nop.m 999 -(p12) fma.s1 poly2 = poly2, rsq, Q1_4 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: r_to_the_8 = r_to_the_8 * r_to_the_8 -// N odd: poly1 = S_hi * r + 1.0 64 bits partial -// -(p11) fma.s1 Poly2 = Poly2, rsq, P1_4 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: Result = CORR + Poly * r -// N odd: P = Q1_1 + poly2 * rsq -// -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p12) fma.s1 poly2 = poly2, rsq, Q1_3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: Poly2 = P1_4 + Poly2 * rsq -// N odd: poly2 = Q1_2 + poly2 * rsq -// -(p11) fma.s1 Poly = Poly2, r_to_the_8, Poly1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fma.s1 poly1 = S_hi, c, poly1 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p12) fma.s1 poly2 = poly2, rsq, Q1_2 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: Poly = Poly1 + Poly2 * r_to_the_8 -// N odd: S_hi = S_hi * poly1 + S_hi 64 bits -// -(p11) fma.s1 Result = Poly, r, CORR - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: Result = r + Result (User supplied rounding mode) -// N odd: poly1 = S_hi * c + poly1 -// -(p12) fmpy.s1 S_lo = S_hi, poly1 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p12) fma.s1 P = poly2, rsq, Q1_1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * r + 1.0 -// -(p11) fadd.s0 Result = Result, r - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: S_lo = S_hi * poly1 -// -(p12) fma.s1 S_lo = Q1_1, c, S_lo - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// N odd: Result = Result + S_hi (user supplied rounding mode) -// -(p0) fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: S_lo = Q1_1 * c + S_lo -// -(p12) fma.s1 Result = P, r, S_lo - nop.i 999 ;; -} - -{ .mfb - nop.m 999 -// -// N odd: Result = S_lo + r * P -// -(p12) fadd.s0 Result = Result, S_hi -(p0) br.ret.sptk b0 ;; -} - - -TAN_NORMAL_R: - -{ .mfi -(p0) getf.sig sig_r = r -// ******************************************************************* -// ******************************************************************* -// ******************************************************************* -// -// r and c have been computed. -// Make sure ftz mode is set - should be automatic when using wre -// -// -// Get [i_1] - lsb of N_fix_gr alone. -// -(p0) fmerge.s Pos_r = f1, r -(p0) extr.u i_1 = N_fix_gr, 0, 1 ;; -} - -{ .mfi - nop.m 999 -(p0) fmerge.s sgn_r = r, f1 -(p0) cmp.eq.unc p11, p12 = 0x0000, i_1 ;; -} - -{ .mfi - nop.m 999 - nop.f 999 -(p0) extr.u lookup = sig_r, 58, 5 -} - -{ .mlx - nop.m 999 -(p0) movl Create_B = 0x8200000000000000 ;; -} - -{ .mfi -(p0) addl table_ptr1 = @ltoff(TAN_BASE_CONSTANTS), gp - nop.f 999 -(p0) dep Create_B = lookup, Create_B, 58, 5 -} -;; - -// -// Get [i_1] - lsb of N_fix_gr alone. -// Pos_r = abs (r) -// - - -{ .mmi - ld8 table_ptr1 = [table_ptr1] - nop.m 999 - nop.i 999 -} -;; - - -{ .mmi - nop.m 999 -(p0) setf.sig B = Create_B -// -// Set table_ptr1 and table_ptr2 to base address of -// constant table. -// -(p0) add table_ptr1 = 480, table_ptr1 ;; -} - -{ .mmb - nop.m 999 -// -// Is i_1 or i_0 == 0 ? -// Create the constant 1 00000 1000000000000000000000... -// -(p0) ldfe P2_1 = [table_ptr1], 16 - nop.b 999 -} - -{ .mmi - nop.m 999 ;; -(p0) getf.exp exp_r = Pos_r - nop.i 999 -} -// -// Get r's exponent -// Get r's significand -// - -{ .mmi -(p0) ldfe P2_2 = [table_ptr1], 16 ;; -// -// Get the 5 bits or r for the lookup. 1.xxxxx .... -// from sig_r. -// Grab lsb of exp of B -// -(p0) ldfe P2_3 = [table_ptr1], 16 - nop.i 999 ;; -} - -{ .mii - nop.m 999 -(p0) andcm table_offset = 0x0001, exp_r ;; -(p0) shl table_offset = table_offset, 9 ;; -} - -{ .mii - nop.m 999 -// -// Deposit 0 00000 1000000000000000000000... on -// 1 xxxxx yyyyyyyyyyyyyyyyyyyyyy..., -// getting rid of the ys. -// Is B = 2** -2 or B= 2** -1? If 2**-1, then -// we want an offset of 512 for table addressing. -// -(p0) shladd table_offset = lookup, 4, table_offset ;; -// -// B = ........ 1xxxxx 1000000000000000000... -// -(p0) add table_ptr1 = table_ptr1, table_offset ;; -} - -{ .mmb - nop.m 999 -// -// B = ........ 1xxxxx 1000000000000000000... -// Convert B so it has the same exponent as Pos_r -// -(p0) ldfd T_hi = [table_ptr1], 8 - nop.b 999 ;; -} - -// -// x = |r| - B -// Load T_hi. -// Load C_hi. -// - -{ .mmf -(p0) addl table_ptr2 = @ltoff(TAN_BASE_CONSTANTS), gp -(p0) ldfs T_lo = [table_ptr1] -(p0) fmerge.se B = Pos_r, B -} -;; - -{ .mmi - ld8 table_ptr2 = [table_ptr2] - nop.m 999 - nop.i 999 -} -;; - -{ .mii -(p0) add table_ptr2 = 1360, table_ptr2 - nop.i 999 ;; -(p0) add table_ptr2 = table_ptr2, table_offset ;; -} - -{ .mfi -(p0) ldfd C_hi = [table_ptr2], 8 -(p0) fsub.s1 x = Pos_r, B - nop.i 999 ;; -} - -{ .mii -(p0) ldfs C_lo = [table_ptr2],255 - nop.i 999 ;; -// -// xsq = x * x -// N even: Tx = T_hi * x -// Load T_lo. -// Load C_lo - increment pointer to get SC_inv -// - cant get all the way, do an add later. -// -(p0) add table_ptr2 = 569, table_ptr2 ;; -} -// -// N even: Tx1 = Tx + 1 -// N odd: Cx1 = 1 - Cx -// - -{ .mfi -(p0) ldfe SC_inv = [table_ptr2], 0 - nop.f 999 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p0) fmpy.s1 xsq = x, x - nop.i 999 -} - -{ .mfi - nop.m 999 -(p11) fmpy.s1 Tx = T_hi, x - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fmpy.s1 Cx = C_hi, x - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: Cx = C_hi * x -// -(p0) fma.s1 P = P2_3, xsq, P2_2 - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// N even and odd: P = P2_3 + P2_2 * xsq -// -(p11) fadd.s1 Tx1 = Tx, f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: D = C_hi - tanx -// N odd: D = T_hi + tanx -// -(p11) fmpy.s1 CORR = SC_inv, T_hi - nop.i 999 -} - -{ .mfi - nop.m 999 -(p0) fmpy.s1 Sx = SC_inv, x - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fmpy.s1 CORR = SC_inv, C_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fsub.s1 V_hi = f1, Cx - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p0) fma.s1 P = P, xsq, P2_1 - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// N even and odd: P = P2_1 + P * xsq -// -(p11) fma.s1 V_hi = Tx, Tx1, f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: Result = sgn_r * tail + T_hi (user rounding mode for C1) -// N odd: Result = sgn_r * tail + C_hi (user rounding mode for C1) -// -(p0) fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p0) fmpy.s1 CORR = CORR, c - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fnma.s1 V_hi = Cx,V_hi,f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: V_hi = Tx * Tx1 + 1 -// N odd: Cx1 = 1 - Cx * Cx1 -// -(p0) fmpy.s1 P = P, xsq - nop.i 999 -} - -{ .mfi - nop.m 999 -// -// N even and odd: P = P * xsq -// -(p11) fmpy.s1 V_hi = V_hi, T_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even and odd: tail = P * tail + V_lo -// -(p11) fmpy.s1 T_hi = sgn_r, T_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p0) fmpy.s1 CORR = CORR, sgn_r - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p12) fmpy.s1 V_hi = V_hi,C_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: V_hi = T_hi * V_hi -// N odd: V_hi = C_hi * V_hi -// -(p0) fma.s1 tanx = P, x, x - nop.i 999 -} - -{ .mfi - nop.m 999 -(p12) fnmpy.s1 C_hi = sgn_r, C_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: V_lo = 1 - V_hi + C_hi -// N odd: V_lo = 1 - V_hi + T_hi -// -(p11) fadd.s1 CORR = CORR, T_lo - nop.i 999 -} - -{ .mfi - nop.m 999 -(p12) fsub.s1 CORR = CORR, C_lo - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even and odd: tanx = x + x * P -// N even and odd: Sx = SC_inv * x -// -(p11) fsub.s1 D = C_hi, tanx - nop.i 999 -} - -{ .mfi - nop.m 999 -(p12) fadd.s1 D = T_hi, tanx - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: CORR = SC_inv * C_hi -// N even: CORR = SC_inv * T_hi -// -(p0) fnma.s1 D = V_hi, D, f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even and odd: D = 1 - V_hi * D -// N even and odd: CORR = CORR * c -// -(p0) fma.s1 V_hi = V_hi, D, V_hi - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even and odd: V_hi = V_hi + V_hi * D -// N even and odd: CORR = sgn_r * CORR -// -(p11) fnma.s1 V_lo = V_hi, C_hi, f1 - nop.i 999 -} - -{ .mfi - nop.m 999 -(p12) fnma.s1 V_lo = V_hi, T_hi, f1 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: CORR = COOR + T_lo -// N odd: CORR = CORR - C_lo -// -(p11) fma.s1 V_lo = tanx, V_hi, V_lo - nop.i 999 -} - -{ .mfi - nop.m 999 -(p12) fnma.s1 V_lo = tanx, V_hi, V_lo - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: V_lo = V_lo + V_hi * tanx -// N odd: V_lo = V_lo - V_hi * tanx -// -(p11) fnma.s1 V_lo = C_lo, V_hi, V_lo - nop.i 999 -} - -{ .mfi - nop.m 999 -(p12) fnma.s1 V_lo = T_lo, V_hi, V_lo - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: V_lo = V_lo - V_hi * C_lo -// N odd: V_lo = V_lo - V_hi * T_lo -// -(p0) fmpy.s1 V_lo = V_hi, V_lo - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even and odd: V_lo = V_lo * V_hi -// -(p0) fadd.s1 tail = V_hi, V_lo - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even and odd: tail = V_hi + V_lo -// -(p0) fma.s1 tail = tail, P, V_lo - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: T_hi = sgn_r * T_hi -// N odd : C_hi = -sgn_r * C_hi -// -(p0) fma.s1 tail = tail, Sx, CORR - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even and odd: tail = Sx * tail + CORR -// -(p0) fma.s1 tail = V_hi, Sx, tail - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even an odd: tail = Sx * V_hi + tail -// -(p11) fma.s0 Result = sgn_r, tail, T_hi - nop.i 999 -} - -{ .mfb - nop.m 999 -(p12) fma.s0 Result = sgn_r, tail, C_hi -(p0) br.ret.sptk b0 ;; -} - -.endp __libm_tan -ASM_SIZE_DIRECTIVE(__libm_tan) - - - -// ******************************************************************* -// ******************************************************************* -// ******************************************************************* -// -// Special Code to handle very large argument case. -// Call int pi_by_2_reduce(&x,&r) -// for |arguments| >= 2**63 -// (Arg or x) is in f8 -// Address to save r and c as double - -// (1) (2) (3) (call) (4) -// sp -> + psp -> + psp -> + sp -> + -// | | | | -// | r50 ->| <- r50 f0 ->| r50 -> | -> c -// | | | | -// sp-32 -> | <- r50 f0 ->| f0 ->| <- r50 r49 -> | -> r -// | | | | -// | r49 ->| <- r49 Arg ->| <- r49 | -> x -// | | | | -// sp -64 ->| sp -64 ->| sp -64 ->| | -// -// save pfs save b0 restore gp -// save gp restore b0 -// restore pfs - - - -.proc __libm_callout -__libm_callout: -TAN_ARG_TOO_LARGE: -.prologue -// (1) -{ .mfi - add GR_Parameter_r =-32,sp // Parameter: r address - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -// (2) -{ .mmi - stfe [GR_Parameter_r ] = f0,16 // Clear Parameter r on stack - add GR_Parameter_X = 16,sp // Parameter x address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -// (3) -.body -{ .mib - stfe [GR_Parameter_r ] = f0,-16 // Clear Parameter c on stack - nop.i 0 - nop.b 0 -} -{ .mib - stfe [GR_Parameter_X] = Arg // Store Parameter x on stack - nop.i 0 -(p0) br.call.sptk b0=__libm_pi_by_2_reduce# -} -;; - - -// (4) -{ .mmi - mov gp = GR_SAVE_GP // Restore gp -(p0) mov N_fix_gr = r8 - nop.i 999 -} -;; - -{ .mmi -(p0) ldfe Arg =[GR_Parameter_X],16 -(p0) ldfs TWO_TO_NEG2 = [table_ptr2],4 - nop.i 999 -} -;; - - -{ .mmb -(p0) ldfe r =[GR_Parameter_r ],16 -(p0) ldfs NEGTWO_TO_NEG2 = [table_ptr2],4 - nop.b 999 ;; -} - -{ .mfi -(p0) ldfe c =[GR_Parameter_r ] - nop.f 999 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// Is |r| < 2**(-2) -// -(p0) fcmp.lt.unc.s1 p6, p0 = r, TWO_TO_NEG2 - mov b0 = GR_SAVE_B0 // Restore return address -} -;; - -{ .mfi - nop.m 999 -(p6) fcmp.gt.unc.s1 p6, p0 = r, NEGTWO_TO_NEG2 - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs -} -;; - -{ .mbb -.restore sp - add sp = 64,sp // Restore stack pointer -(p6) br.cond.spnt TAN_SMALL_R -(p0) br.cond.sptk TAN_NORMAL_R -} -;; -.endp __libm_callout -ASM_SIZE_DIRECTIVE(__libm_callout) - - -.proc __libm_TAN_SPECIAL -__libm_TAN_SPECIAL: - -// -// Code for NaNs, Unsupporteds, Infs, or +/- zero ? -// Invalid raised for Infs and SNaNs. -// - -{ .mfb - nop.m 999 -(p0) fmpy.s0 Arg = Arg, f0 -(p0) br.ret.sptk b0 -} -.endp __libm_TAN_SPECIAL -ASM_SIZE_DIRECTIVE(__libm_TAN_SPECIAL) - - -.type __libm_pi_by_2_reduce#,@function -.global __libm_pi_by_2_reduce# diff --git a/sysdeps/ia64/fpu/math_ldbl.h b/sysdeps/ia64/fpu/math_ldbl.h deleted file mode 100644 index 5dd9c350a1..0000000000 --- a/sysdeps/ia64/fpu/math_ldbl.h +++ /dev/null @@ -1,122 +0,0 @@ -/* Manipulation of the bit representation of 'long double' quantities. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_LDBL_H_ -#define _MATH_LDBL_H_ 1 - -#include -#include - -/* A union which permits us to convert between a long double and - three 32 bit ints. */ - -#if __FLOAT_WORD_ORDER == __BIG_ENDIAN - -typedef union -{ - long double value; - struct - { - unsigned int empty0:32; - int sign_exponent:16; - unsigned int empty1:16; - uint32_t msw; - uint32_t lsw; - } parts; -} ieee_long_double_shape_type; - -#endif - -#if __FLOAT_WORD_ORDER == __LITTLE_ENDIAN - -typedef union -{ - long double value; - struct - { - uint32_t lsw; - uint32_t msw; - int sign_exponent:16; - unsigned int empty1:16; - unsigned int empty0:32; - } parts; -} ieee_long_double_shape_type; - -#endif - -/* Get three 32 bit ints from a double. */ - -#define GET_LDOUBLE_WORDS(exp,ix0,ix1,d) \ -do { \ - ieee_long_double_shape_type ew_u; \ - ew_u.value = (d); \ - (exp) = ew_u.parts.sign_exponent; \ - (ix0) = ew_u.parts.msw; \ - (ix1) = ew_u.parts.lsw; \ -} while (0) - -/* Set a double from two 32 bit ints. */ - -#define SET_LDOUBLE_WORDS(d,exp,ix0,ix1) \ -do { \ - ieee_long_double_shape_type iw_u; \ - iw_u.parts.sign_exponent = (exp); \ - iw_u.parts.msw = (ix0); \ - iw_u.parts.lsw = (ix1); \ - (d) = iw_u.value; \ -} while (0) - -/* Get the more significant 32 bits of a long double mantissa. */ - -#define GET_LDOUBLE_MSW(v,d) \ -do { \ - ieee_long_double_shape_type sh_u; \ - sh_u.value = (d); \ - (v) = sh_u.parts.msw; \ -} while (0) - -/* Set the more significant 32 bits of a long double mantissa from an int. */ - -#define SET_LDOUBLE_MSW(d,v) \ -do { \ - ieee_long_double_shape_type sh_u; \ - sh_u.value = (d); \ - sh_u.parts.msw = (v); \ - (d) = sh_u.value; \ -} while (0) - -/* Get int from the exponent of a long double. */ - -#define GET_LDOUBLE_EXP(exp,d) \ -do { \ - ieee_long_double_shape_type ge_u; \ - ge_u.value = (d); \ - (exp) = ge_u.parts.sign_exponent; \ -} while (0) - -/* Set exponent of a long double from an int. */ - -#define SET_LDOUBLE_EXP(d,exp) \ -do { \ - ieee_long_double_shape_type se_u; \ - se_u.value = (d); \ - se_u.parts.sign_exponent = (exp); \ - (d) = se_u.value; \ -} while (0) - -#endif /* math_ldbl.h */ diff --git a/sysdeps/ia64/fpu/mpa.c b/sysdeps/ia64/fpu/mpa.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/mpa.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/mpatan.c b/sysdeps/ia64/fpu/mpatan.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/mpatan.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/mpatan2.c b/sysdeps/ia64/fpu/mpatan2.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/mpatan2.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/mpexp.c b/sysdeps/ia64/fpu/mpexp.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/mpexp.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/mplog.c b/sysdeps/ia64/fpu/mplog.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/mplog.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/mpsqrt.c b/sysdeps/ia64/fpu/mpsqrt.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/mpsqrt.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/mptan.c b/sysdeps/ia64/fpu/mptan.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/mptan.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/printf_fphex.c b/sysdeps/ia64/fpu/printf_fphex.c deleted file mode 100644 index e0acac5e28..0000000000 --- a/sysdeps/ia64/fpu/printf_fphex.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Print floating point number in hexadecimal notation according to ISO C99. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef LONG_DOUBLE_DENORM_BIAS -# define LONG_DOUBLE_DENORM_BIAS (IEEE854_LONG_DOUBLE_BIAS - 1) -#endif - -#define PRINT_FPHEX_LONG_DOUBLE \ -do { \ - /* The "strange" 80 bit format on ia64 has an explicit \ - leading digit in the 64 bit mantissa. */ \ - unsigned long long int num; \ - union ieee854_long_double u; \ - u.d = fpnum.ldbl; \ - \ - num = (((unsigned long long int) u.ieee.mantissa0) << 32 \ - | u.ieee.mantissa1); \ - \ - zero_mantissa = num == 0; \ - \ - numstr = _itoa_word (num, numbuf + sizeof numbuf, 16, \ - info->spec == 'A'); \ - wnumstr = _itowa_word (num, \ - wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t), \ - 16, info->spec == 'A'); \ - \ - /* Fill with zeroes. */ \ - while (numstr > numbuf + (sizeof numbuf - 64 / 4)) \ - { \ - *--numstr = '0'; \ - *--wnumstr = L'0'; \ - } \ - \ - /* We use a full nibble for the leading digit. */ \ - leading = *numstr++; \ - \ - /* We have 3 bits from the mantissa in the leading nibble. \ - Therefore we are here using `IEEE854_LONG_DOUBLE_BIAS + 3'. */ \ - exponent = u.ieee.exponent; \ - \ - if (exponent == 0) \ - { \ - if (zero_mantissa) \ - expnegative = 0; \ - else \ - { \ - /* This is a denormalized number. */ \ - expnegative = 1; \ - /* This is a hook for the m68k long double format, where the \ - exponent bias is the same for normalized and denormalized \ - numbers. */ \ - exponent = LONG_DOUBLE_DENORM_BIAS + 3; \ - } \ - } \ - else if (exponent >= IEEE854_LONG_DOUBLE_BIAS + 3) \ - { \ - expnegative = 0; \ - exponent -= IEEE854_LONG_DOUBLE_BIAS + 3; \ - } \ - else \ - { \ - expnegative = 1; \ - exponent = -(exponent - (IEEE854_LONG_DOUBLE_BIAS + 3)); \ - } \ -} while (0) - -#include diff --git a/sysdeps/ia64/fpu/s_asinh.S b/sysdeps/ia64/fpu/s_asinh.S deleted file mode 100644 index c5aaee7072..0000000000 --- a/sysdeps/ia64/fpu/s_asinh.S +++ /dev/null @@ -1,1137 +0,0 @@ -.file "asinh.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// ============================================================== -// History -// ============================================================== -// 04/02/01 Initial version -// 04/19/01 Improved speed of the paths #1,2,3,4,5 -// 10/18/01 Improved accuracy -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align -// 05/21/03 Improved performance, fixed to handle unorms -// 03/31/05 Reformatted delimiters between data tables -// -// API -// ============================================================== -// double asinh(double) -// -// Overview of operation -// ============================================================== -// -// There are 7 paths: -// 1. x = 0.0 -// Return asinh(x) = 0.0 -// -// 2. 0.0 <|x| < 2^(-3) -// Return asinh(x) = POL13(x), -// where POL13(x) = (x^2*C13 + ...)*x^2 + C5)*x^2 + C3)*x^3 + x -// -// 3. 2^(-3) <= |x| < 2^63 -// Return asinh(x) = sign(x)*(log(|x| + sqrt(x^2 + 1.0))) -// To compute x + sqrt(x^2 + 1.0) modified Newton Raphson method is used -// (3 iterations) -// Algorithm description for log function see below. -// -// 4. 2^63 <= |x| < +INF -// Return asinh(x) = sign(x)*log(2*|x|) -// Algorithm description for log function see below. -// -// 5. x = INF -// Return asinh(x) = INF -// -// 6. x = [S,Q]NaN -// Return asinh(x) = QNaN -// -// 7. x = denormal -// Return asinh(x) = x correctly rounded -// -//============================================================== -// Algorithm Description for log(x) function -// Below we are using the fact that inequality x - 1.0 > 2^(-6) is always -// true for this asinh implementation -// -// Consider x = 2^N 1.f1 f2 f3 f4...f63 -// Log(x) = log(frcpa(x) x/frcpa(x)) -// = log(1/frcpa(x)) + log(frcpa(x) x) -// = -log(frcpa(x)) + log(frcpa(x) x) -// -// frcpa(x) = 2^-N frcpa((1.f1 f2 ... f63) -// -// -log(frcpa(x)) = -log(C) -// = -log(2^-N) - log(frcpa(1.f1 f2 ... f63)) -// -// -log(frcpa(x)) = -log(C) -// = +Nlog2 - log(frcpa(1.f1 f2 ... f63)) -// -// -log(frcpa(x)) = -log(C) -// = +Nlog2 + log(frcpa(1.f1 f2 ... f63)) -// -// Log(x) = log(1/frcpa(x)) + log(frcpa(x) x) -// -// Log(x) = +Nlog2 + log(1./frcpa(1.f1 f2 ... f63)) + log(frcpa(x) x) -// Log(x) = +Nlog2 - log(/frcpa(1.f1 f2 ... f63)) + log(frcpa(x) x) -// Log(x) = +Nlog2 + T + log(frcpa(x) x) -// -// Log(x) = +Nlog2 + T + log(C x) -// -// Cx = 1 + r -// -// Log(x) = +Nlog2 + T + log(1+r) -// Log(x) = +Nlog2 + T + Series( r - r^2/2 + r^3/3 - r^4/4 ....) -// -// 1.f1 f2 ... f8 has 256 entries. -// They are 1 + k/2^8, k = 0 ... 255 -// These 256 values are the table entries. -// -// Implementation -//============================================================== -// C = frcpa(x) -// r = C * x - 1 -// -// Form rseries = r + P1*r^2 + P2*r^3 + P3*r^4 + P4*r^5 + P5*r^6 -// -// x = f * 2*n where f is 1.f_1f_2f_3....f_63 -// Nfloat = float(n) where n is the true unbiased exponent -// pre-index = f_1f_2....f_8 -// index = pre_index * 16 -// get the dxt table entry at index + offset = T -// -// result = (T + Nfloat * log(2)) + rseries -// -// The T table is calculated as follows -// Form x_k = 1 + k/2^8 where k goes from 0... 255 -// y_k = frcpa(x_k) -// log(1/y_k) in quad and round to double-extended -// -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f9 -> f15, f32 -> f68 - -// General registers used: -// r14 -> r27 - -// Predicate registers used: -// p6 -> p14 - -// p6 to filter out case when x = [Q,S]NaN or INF or zero -// p7 to filter out case when x < 0.0 -// p8 to select path #2 -// p9 used in the frcpa from path #3 -// p11 to filter out case when x >= 0 -// p12 to filter out case when x = unorm -// p13 to select path #4 -// Assembly macros -//============================================================== -log_GR_exp_17_ones = r14 -log_GR_signexp_f8 = r15 -log_table_address2 = r16 -log_GR_exp_16_ones = r17 -log_GR_exp_f8 = r18 -log_GR_true_exp_f8 = r19 -log_GR_significand_f8 = r20 -log_GR_index = r21 -log_GR_comp2 = r22 -asinh_GR_f8 = r23 -asinh_GR_comp = r24 -asinh_GR_f8 = r25 -log_table_address3 = r26 -NR_table_address = r27 - -//============================================================== -log_y = f9 -NR1 = f10 -NR2 = f11 -log_y_rs = f12 -log_y_rs_iter = f13 -log_y_rs_iter1 = f14 -fNormX = f15 -asinh_w_sq = f32 -log_C13 = f33 -log_C11 = f34 -log_P3 = f35 -log_P2 = f36 -log_P1 = f37 -log_P5 = f38 -log_P4 = f39 -log_C3 = f40 -log_C5 = f41 -log_C7 = f42 -log2 = f43 -asinh_f8 = f44 -log_C = f45 -log_arg = f46 -log_C9 = f47 -asinh_w_four = f48 -log_int_Nfloat = f49 -log_r = f50 -log_rsq = f51 -log_rp_p4 = f52 -log_rp_p32 = f53 -log_rcube = f54 -log_rp_p10 = f55 -log_rp_p2 = f56 -log_Nfloat = f57 -log_T = f58 -log_r2P_r = f59 -log_T_plus_Nlog2 = f60 -asinh_w_3 = f61 -asinh_w_5 = f62 -asinh_w_cube = f63 -asinh_w_7 = f64 -log_arg_early = f65 -asinh_w_9 = f66 -asinh_w_13 = f67 -asinh_w_seven = f68 - -// Data tables -//============================================================== - -RODATA -.align 16 - -LOCAL_OBJECT_START(log_table_1) -data8 0xBFC5555DA7212371 // P5 -data8 0x3FC999A19EEF5826 // P4 -data8 0xBFCFFFFFFFFEF009 // P3 -data8 0x3FD555555554ECB2 // P2 -data8 0xBFE0000000000000 // P1 = -0.5 -data8 0x0000000000000000 // pad -data8 0xb17217f7d1cf79ac, 0x00003ffe // log2 -LOCAL_OBJECT_END(log_table_1) - -LOCAL_OBJECT_START(log_table_2) -data8 0x3FE0000000000000 // 0.5 -data8 0x4008000000000000 // 3.0 -// -data8 0x8824BE4D74BC4F00, 0x00003FF9 // C13 -data8 0xB725A2CD9556CC57, 0x0000BFF9 // C11 -data8 0xF8E339127FBFF49D, 0x00003FF9 // C9 -data8 0xB6DB6D7DCE17CB78, 0x0000BFFA // C7 -data8 0x999999998802CCEF, 0x00003FFB // C5 -data8 0xAAAAAAAAAAA8DC40, 0x0000BFFC // C3 -LOCAL_OBJECT_END(log_table_2) - - -LOCAL_OBJECT_START(log_table_3) -data8 0x80200aaeac44ef38 , 0x00003ff6 // log(1/frcpa(1+ 0/2^-8)) -// -data8 0xc09090a2c35aa070 , 0x00003ff7 // log(1/frcpa(1+ 1/2^-8)) -data8 0xa0c94fcb41977c75 , 0x00003ff8 // log(1/frcpa(1+ 2/2^-8)) -data8 0xe18b9c263af83301 , 0x00003ff8 // log(1/frcpa(1+ 3/2^-8)) -data8 0x8d35c8d6399c30ea , 0x00003ff9 // log(1/frcpa(1+ 4/2^-8)) -data8 0xadd4d2ecd601cbb8 , 0x00003ff9 // log(1/frcpa(1+ 5/2^-8)) -// -data8 0xce95403a192f9f01 , 0x00003ff9 // log(1/frcpa(1+ 6/2^-8)) -data8 0xeb59392cbcc01096 , 0x00003ff9 // log(1/frcpa(1+ 7/2^-8)) -data8 0x862c7d0cefd54c5d , 0x00003ffa // log(1/frcpa(1+ 8/2^-8)) -data8 0x94aa63c65e70d499 , 0x00003ffa // log(1/frcpa(1+ 9/2^-8)) -data8 0xa54a696d4b62b382 , 0x00003ffa // log(1/frcpa(1+ 10/2^-8)) -// -data8 0xb3e4a796a5dac208 , 0x00003ffa // log(1/frcpa(1+ 11/2^-8)) -data8 0xc28c45b1878340a9 , 0x00003ffa // log(1/frcpa(1+ 12/2^-8)) -data8 0xd35c55f39d7a6235 , 0x00003ffa // log(1/frcpa(1+ 13/2^-8)) -data8 0xe220f037b954f1f5 , 0x00003ffa // log(1/frcpa(1+ 14/2^-8)) -data8 0xf0f3389b036834f3 , 0x00003ffa // log(1/frcpa(1+ 15/2^-8)) -// -data8 0xffd3488d5c980465 , 0x00003ffa // log(1/frcpa(1+ 16/2^-8)) -data8 0x87609ce2ed300490 , 0x00003ffb // log(1/frcpa(1+ 17/2^-8)) -data8 0x8ede9321e8c85927 , 0x00003ffb // log(1/frcpa(1+ 18/2^-8)) -data8 0x96639427f2f8e2f4 , 0x00003ffb // log(1/frcpa(1+ 19/2^-8)) -data8 0x9defad3e8f73217b , 0x00003ffb // log(1/frcpa(1+ 20/2^-8)) -// -data8 0xa582ebd50097029c , 0x00003ffb // log(1/frcpa(1+ 21/2^-8)) -data8 0xac06dbe75ab80fee , 0x00003ffb // log(1/frcpa(1+ 22/2^-8)) -data8 0xb3a78449b2d3ccca , 0x00003ffb // log(1/frcpa(1+ 23/2^-8)) -data8 0xbb4f79635ab46bb2 , 0x00003ffb // log(1/frcpa(1+ 24/2^-8)) -data8 0xc2fec93a83523f3f , 0x00003ffb // log(1/frcpa(1+ 25/2^-8)) -// -data8 0xc99af2eaca4c4571 , 0x00003ffb // log(1/frcpa(1+ 26/2^-8)) -data8 0xd1581106472fa653 , 0x00003ffb // log(1/frcpa(1+ 27/2^-8)) -data8 0xd8002560d4355f2e , 0x00003ffb // log(1/frcpa(1+ 28/2^-8)) -data8 0xdfcb43b4fe508632 , 0x00003ffb // log(1/frcpa(1+ 29/2^-8)) -data8 0xe67f6dff709d4119 , 0x00003ffb // log(1/frcpa(1+ 30/2^-8)) -// -data8 0xed393b1c22351280 , 0x00003ffb // log(1/frcpa(1+ 31/2^-8)) -data8 0xf5192bff087bcc35 , 0x00003ffb // log(1/frcpa(1+ 32/2^-8)) -data8 0xfbdf4ff6dfef2fa3 , 0x00003ffb // log(1/frcpa(1+ 33/2^-8)) -data8 0x81559a97f92f9cc7 , 0x00003ffc // log(1/frcpa(1+ 34/2^-8)) -data8 0x84be72bce90266e8 , 0x00003ffc // log(1/frcpa(1+ 35/2^-8)) -// -data8 0x88bc74113f23def2 , 0x00003ffc // log(1/frcpa(1+ 36/2^-8)) -data8 0x8c2ba3edf6799d11 , 0x00003ffc // log(1/frcpa(1+ 37/2^-8)) -data8 0x8f9dc92f92ea08b1 , 0x00003ffc // log(1/frcpa(1+ 38/2^-8)) -data8 0x9312e8f36efab5a7 , 0x00003ffc // log(1/frcpa(1+ 39/2^-8)) -data8 0x968b08643409ceb6 , 0x00003ffc // log(1/frcpa(1+ 40/2^-8)) -// -data8 0x9a062cba08a1708c , 0x00003ffc // log(1/frcpa(1+ 41/2^-8)) -data8 0x9d845b3abf95485c , 0x00003ffc // log(1/frcpa(1+ 42/2^-8)) -data8 0xa06fd841bc001bb4 , 0x00003ffc // log(1/frcpa(1+ 43/2^-8)) -data8 0xa3f3a74652fbe0db , 0x00003ffc // log(1/frcpa(1+ 44/2^-8)) -data8 0xa77a8fb2336f20f5 , 0x00003ffc // log(1/frcpa(1+ 45/2^-8)) -// -data8 0xab0497015d28b0a0 , 0x00003ffc // log(1/frcpa(1+ 46/2^-8)) -data8 0xae91c2be6ba6a615 , 0x00003ffc // log(1/frcpa(1+ 47/2^-8)) -data8 0xb189d1b99aebb20b , 0x00003ffc // log(1/frcpa(1+ 48/2^-8)) -data8 0xb51cced5de9c1b2c , 0x00003ffc // log(1/frcpa(1+ 49/2^-8)) -data8 0xb819bee9e720d42f , 0x00003ffc // log(1/frcpa(1+ 50/2^-8)) -// -data8 0xbbb2a0947b093a5d , 0x00003ffc // log(1/frcpa(1+ 51/2^-8)) -data8 0xbf4ec1505811684a , 0x00003ffc // log(1/frcpa(1+ 52/2^-8)) -data8 0xc2535bacfa8975ff , 0x00003ffc // log(1/frcpa(1+ 53/2^-8)) -data8 0xc55a3eafad187eb8 , 0x00003ffc // log(1/frcpa(1+ 54/2^-8)) -data8 0xc8ff2484b2c0da74 , 0x00003ffc // log(1/frcpa(1+ 55/2^-8)) -// -data8 0xcc0b1a008d53ab76 , 0x00003ffc // log(1/frcpa(1+ 56/2^-8)) -data8 0xcfb6203844b3209b , 0x00003ffc // log(1/frcpa(1+ 57/2^-8)) -data8 0xd2c73949a47a19f5 , 0x00003ffc // log(1/frcpa(1+ 58/2^-8)) -data8 0xd5daae18b49d6695 , 0x00003ffc // log(1/frcpa(1+ 59/2^-8)) -data8 0xd8f08248cf7e8019 , 0x00003ffc // log(1/frcpa(1+ 60/2^-8)) -// -data8 0xdca7749f1b3e540e , 0x00003ffc // log(1/frcpa(1+ 61/2^-8)) -data8 0xdfc28e033aaaf7c7 , 0x00003ffc // log(1/frcpa(1+ 62/2^-8)) -data8 0xe2e012a5f91d2f55 , 0x00003ffc // log(1/frcpa(1+ 63/2^-8)) -data8 0xe600064ed9e292a8 , 0x00003ffc // log(1/frcpa(1+ 64/2^-8)) -data8 0xe9226cce42b39f60 , 0x00003ffc // log(1/frcpa(1+ 65/2^-8)) -// -data8 0xec4749fd97a28360 , 0x00003ffc // log(1/frcpa(1+ 66/2^-8)) -data8 0xef6ea1bf57780495 , 0x00003ffc // log(1/frcpa(1+ 67/2^-8)) -data8 0xf29877ff38809091 , 0x00003ffc // log(1/frcpa(1+ 68/2^-8)) -data8 0xf5c4d0b245cb89be , 0x00003ffc // log(1/frcpa(1+ 69/2^-8)) -data8 0xf8f3afd6fcdef3aa , 0x00003ffc // log(1/frcpa(1+ 70/2^-8)) -// -data8 0xfc2519756be1abc7 , 0x00003ffc // log(1/frcpa(1+ 71/2^-8)) -data8 0xff59119f503e6832 , 0x00003ffc // log(1/frcpa(1+ 72/2^-8)) -data8 0x8147ce381ae0e146 , 0x00003ffd // log(1/frcpa(1+ 73/2^-8)) -data8 0x82e45f06cb1ad0f2 , 0x00003ffd // log(1/frcpa(1+ 74/2^-8)) -data8 0x842f5c7c573cbaa2 , 0x00003ffd // log(1/frcpa(1+ 75/2^-8)) -// -data8 0x85ce471968c8893a , 0x00003ffd // log(1/frcpa(1+ 76/2^-8)) -data8 0x876e8305bc04066d , 0x00003ffd // log(1/frcpa(1+ 77/2^-8)) -data8 0x891012678031fbb3 , 0x00003ffd // log(1/frcpa(1+ 78/2^-8)) -data8 0x8a5f1493d766a05f , 0x00003ffd // log(1/frcpa(1+ 79/2^-8)) -data8 0x8c030c778c56fa00 , 0x00003ffd // log(1/frcpa(1+ 80/2^-8)) -// -data8 0x8da85df17e31d9ae , 0x00003ffd // log(1/frcpa(1+ 81/2^-8)) -data8 0x8efa663e7921687e , 0x00003ffd // log(1/frcpa(1+ 82/2^-8)) -data8 0x90a22b6875c6a1f8 , 0x00003ffd // log(1/frcpa(1+ 83/2^-8)) -data8 0x91f62cc8f5d24837 , 0x00003ffd // log(1/frcpa(1+ 84/2^-8)) -data8 0x93a06cfc3857d980 , 0x00003ffd // log(1/frcpa(1+ 85/2^-8)) -// -data8 0x94f66d5e6fd01ced , 0x00003ffd // log(1/frcpa(1+ 86/2^-8)) -data8 0x96a330156e6772f2 , 0x00003ffd // log(1/frcpa(1+ 87/2^-8)) -data8 0x97fb3582754ea25b , 0x00003ffd // log(1/frcpa(1+ 88/2^-8)) -data8 0x99aa8259aad1bbf2 , 0x00003ffd // log(1/frcpa(1+ 89/2^-8)) -data8 0x9b0492f6227ae4a8 , 0x00003ffd // log(1/frcpa(1+ 90/2^-8)) -// -data8 0x9c5f8e199bf3a7a5 , 0x00003ffd // log(1/frcpa(1+ 91/2^-8)) -data8 0x9e1293b9998c1daa , 0x00003ffd // log(1/frcpa(1+ 92/2^-8)) -data8 0x9f6fa31e0b41f308 , 0x00003ffd // log(1/frcpa(1+ 93/2^-8)) -data8 0xa0cda11eaf46390e , 0x00003ffd // log(1/frcpa(1+ 94/2^-8)) -data8 0xa22c8f029cfa45aa , 0x00003ffd // log(1/frcpa(1+ 95/2^-8)) -// -data8 0xa3e48badb7856b34 , 0x00003ffd // log(1/frcpa(1+ 96/2^-8)) -data8 0xa5459a0aa95849f9 , 0x00003ffd // log(1/frcpa(1+ 97/2^-8)) -data8 0xa6a79c84480cfebd , 0x00003ffd // log(1/frcpa(1+ 98/2^-8)) -data8 0xa80a946d0fcb3eb2 , 0x00003ffd // log(1/frcpa(1+ 99/2^-8)) -data8 0xa96e831a3ea7b314 , 0x00003ffd // log(1/frcpa(1+100/2^-8)) -// -data8 0xaad369e3dc544e3b , 0x00003ffd // log(1/frcpa(1+101/2^-8)) -data8 0xac92e9588952c815 , 0x00003ffd // log(1/frcpa(1+102/2^-8)) -data8 0xadfa035aa1ed8fdc , 0x00003ffd // log(1/frcpa(1+103/2^-8)) -data8 0xaf6219eae1ad6e34 , 0x00003ffd // log(1/frcpa(1+104/2^-8)) -data8 0xb0cb2e6d8160f753 , 0x00003ffd // log(1/frcpa(1+105/2^-8)) -// -data8 0xb2354249ad950f72 , 0x00003ffd // log(1/frcpa(1+106/2^-8)) -data8 0xb3a056e98ef4a3b4 , 0x00003ffd // log(1/frcpa(1+107/2^-8)) -data8 0xb50c6dba52c6292a , 0x00003ffd // log(1/frcpa(1+108/2^-8)) -data8 0xb679882c33876165 , 0x00003ffd // log(1/frcpa(1+109/2^-8)) -data8 0xb78c07429785cedc , 0x00003ffd // log(1/frcpa(1+110/2^-8)) -// -data8 0xb8faeb8dc4a77d24 , 0x00003ffd // log(1/frcpa(1+111/2^-8)) -data8 0xba6ad77eb36ae0d6 , 0x00003ffd // log(1/frcpa(1+112/2^-8)) -data8 0xbbdbcc915e9bee50 , 0x00003ffd // log(1/frcpa(1+113/2^-8)) -data8 0xbd4dcc44f8cf12ef , 0x00003ffd // log(1/frcpa(1+114/2^-8)) -data8 0xbec0d81bf5b531fa , 0x00003ffd // log(1/frcpa(1+115/2^-8)) -// -data8 0xc034f19c139186f4 , 0x00003ffd // log(1/frcpa(1+116/2^-8)) -data8 0xc14cb69f7c5e55ab , 0x00003ffd // log(1/frcpa(1+117/2^-8)) -data8 0xc2c2abbb6e5fd56f , 0x00003ffd // log(1/frcpa(1+118/2^-8)) -data8 0xc439b2c193e6771e , 0x00003ffd // log(1/frcpa(1+119/2^-8)) -data8 0xc553acb9d5c67733 , 0x00003ffd // log(1/frcpa(1+120/2^-8)) -// -data8 0xc6cc96e441272441 , 0x00003ffd // log(1/frcpa(1+121/2^-8)) -data8 0xc8469753eca88c30 , 0x00003ffd // log(1/frcpa(1+122/2^-8)) -data8 0xc962cf3ce072b05c , 0x00003ffd // log(1/frcpa(1+123/2^-8)) -data8 0xcadeba8771f694aa , 0x00003ffd // log(1/frcpa(1+124/2^-8)) -data8 0xcc5bc08d1f72da94 , 0x00003ffd // log(1/frcpa(1+125/2^-8)) -// -data8 0xcd7a3f99ea035c29 , 0x00003ffd // log(1/frcpa(1+126/2^-8)) -data8 0xcef93860c8a53c35 , 0x00003ffd // log(1/frcpa(1+127/2^-8)) -data8 0xd0192f68a7ed23df , 0x00003ffd // log(1/frcpa(1+128/2^-8)) -data8 0xd19a201127d3c645 , 0x00003ffd // log(1/frcpa(1+129/2^-8)) -data8 0xd2bb92f4061c172c , 0x00003ffd // log(1/frcpa(1+130/2^-8)) -// -data8 0xd43e80b2ee8cc8fc , 0x00003ffd // log(1/frcpa(1+131/2^-8)) -data8 0xd56173601fc4ade4 , 0x00003ffd // log(1/frcpa(1+132/2^-8)) -data8 0xd6e6637efb54086f , 0x00003ffd // log(1/frcpa(1+133/2^-8)) -data8 0xd80ad9f58f3c8193 , 0x00003ffd // log(1/frcpa(1+134/2^-8)) -data8 0xd991d1d31aca41f8 , 0x00003ffd // log(1/frcpa(1+135/2^-8)) -// -data8 0xdab7d02231484a93 , 0x00003ffd // log(1/frcpa(1+136/2^-8)) -data8 0xdc40d532cde49a54 , 0x00003ffd // log(1/frcpa(1+137/2^-8)) -data8 0xdd685f79ed8b265e , 0x00003ffd // log(1/frcpa(1+138/2^-8)) -data8 0xde9094bbc0e17b1d , 0x00003ffd // log(1/frcpa(1+139/2^-8)) -data8 0xe01c91b78440c425 , 0x00003ffd // log(1/frcpa(1+140/2^-8)) -// -data8 0xe14658f26997e729 , 0x00003ffd // log(1/frcpa(1+141/2^-8)) -data8 0xe270cdc2391e0d23 , 0x00003ffd // log(1/frcpa(1+142/2^-8)) -data8 0xe3ffce3a2aa64922 , 0x00003ffd // log(1/frcpa(1+143/2^-8)) -data8 0xe52bdb274ed82887 , 0x00003ffd // log(1/frcpa(1+144/2^-8)) -data8 0xe6589852e75d7df6 , 0x00003ffd // log(1/frcpa(1+145/2^-8)) -// -data8 0xe786068c79937a7d , 0x00003ffd // log(1/frcpa(1+146/2^-8)) -data8 0xe91903adad100911 , 0x00003ffd // log(1/frcpa(1+147/2^-8)) -data8 0xea481236f7d35bb0 , 0x00003ffd // log(1/frcpa(1+148/2^-8)) -data8 0xeb77d48c692e6b14 , 0x00003ffd // log(1/frcpa(1+149/2^-8)) -data8 0xeca84b83d7297b87 , 0x00003ffd // log(1/frcpa(1+150/2^-8)) -// -data8 0xedd977f4962aa158 , 0x00003ffd // log(1/frcpa(1+151/2^-8)) -data8 0xef7179a22f257754 , 0x00003ffd // log(1/frcpa(1+152/2^-8)) -data8 0xf0a450d139366ca7 , 0x00003ffd // log(1/frcpa(1+153/2^-8)) -data8 0xf1d7e0524ff9ffdb , 0x00003ffd // log(1/frcpa(1+154/2^-8)) -data8 0xf30c29036a8b6cae , 0x00003ffd // log(1/frcpa(1+155/2^-8)) -// -data8 0xf4412bc411ea8d92 , 0x00003ffd // log(1/frcpa(1+156/2^-8)) -data8 0xf576e97564c8619d , 0x00003ffd // log(1/frcpa(1+157/2^-8)) -data8 0xf6ad62fa1b5f172f , 0x00003ffd // log(1/frcpa(1+158/2^-8)) -data8 0xf7e499368b55c542 , 0x00003ffd // log(1/frcpa(1+159/2^-8)) -data8 0xf91c8d10abaffe22 , 0x00003ffd // log(1/frcpa(1+160/2^-8)) -// -data8 0xfa553f7018c966f3 , 0x00003ffd // log(1/frcpa(1+161/2^-8)) -data8 0xfb8eb13e185d802c , 0x00003ffd // log(1/frcpa(1+162/2^-8)) -data8 0xfcc8e3659d9bcbed , 0x00003ffd // log(1/frcpa(1+163/2^-8)) -data8 0xfe03d6d34d487fd2 , 0x00003ffd // log(1/frcpa(1+164/2^-8)) -data8 0xff3f8c7581e9f0ae , 0x00003ffd // log(1/frcpa(1+165/2^-8)) -// -data8 0x803e029e280173ae , 0x00003ffe // log(1/frcpa(1+166/2^-8)) -data8 0x80dca10cc52d0757 , 0x00003ffe // log(1/frcpa(1+167/2^-8)) -data8 0x817ba200632755a1 , 0x00003ffe // log(1/frcpa(1+168/2^-8)) -data8 0x821b05f3b01d6774 , 0x00003ffe // log(1/frcpa(1+169/2^-8)) -data8 0x82bacd623ff19d06 , 0x00003ffe // log(1/frcpa(1+170/2^-8)) -// -data8 0x835af8c88e7a8f47 , 0x00003ffe // log(1/frcpa(1+171/2^-8)) -data8 0x83c5f8299e2b4091 , 0x00003ffe // log(1/frcpa(1+172/2^-8)) -data8 0x8466cb43f3d87300 , 0x00003ffe // log(1/frcpa(1+173/2^-8)) -data8 0x850803a67c80ca4b , 0x00003ffe // log(1/frcpa(1+174/2^-8)) -data8 0x85a9a1d11a23b461 , 0x00003ffe // log(1/frcpa(1+175/2^-8)) -// -data8 0x864ba644a18e6e05 , 0x00003ffe // log(1/frcpa(1+176/2^-8)) -data8 0x86ee1182dcc432f7 , 0x00003ffe // log(1/frcpa(1+177/2^-8)) -data8 0x875a925d7e48c316 , 0x00003ffe // log(1/frcpa(1+178/2^-8)) -data8 0x87fdaa109d23aef7 , 0x00003ffe // log(1/frcpa(1+179/2^-8)) -data8 0x88a129ed4becfaf2 , 0x00003ffe // log(1/frcpa(1+180/2^-8)) -// -data8 0x89451278ecd7f9cf , 0x00003ffe // log(1/frcpa(1+181/2^-8)) -data8 0x89b29295f8432617 , 0x00003ffe // log(1/frcpa(1+182/2^-8)) -data8 0x8a572ac5a5496882 , 0x00003ffe // log(1/frcpa(1+183/2^-8)) -data8 0x8afc2d0ce3b2dadf , 0x00003ffe // log(1/frcpa(1+184/2^-8)) -data8 0x8b6a69c608cfd3af , 0x00003ffe // log(1/frcpa(1+185/2^-8)) -// -data8 0x8c101e106e899a83 , 0x00003ffe // log(1/frcpa(1+186/2^-8)) -data8 0x8cb63de258f9d626 , 0x00003ffe // log(1/frcpa(1+187/2^-8)) -data8 0x8d2539c5bd19e2b1 , 0x00003ffe // log(1/frcpa(1+188/2^-8)) -data8 0x8dcc0e064b29e6f1 , 0x00003ffe // log(1/frcpa(1+189/2^-8)) -data8 0x8e734f45d88357ae , 0x00003ffe // log(1/frcpa(1+190/2^-8)) -// -data8 0x8ee30cef034a20db , 0x00003ffe // log(1/frcpa(1+191/2^-8)) -data8 0x8f8b0515686d1d06 , 0x00003ffe // log(1/frcpa(1+192/2^-8)) -data8 0x90336bba039bf32f , 0x00003ffe // log(1/frcpa(1+193/2^-8)) -data8 0x90a3edd23d1c9d58 , 0x00003ffe // log(1/frcpa(1+194/2^-8)) -data8 0x914d0de2f5d61b32 , 0x00003ffe // log(1/frcpa(1+195/2^-8)) -// -data8 0x91be0c20d28173b5 , 0x00003ffe // log(1/frcpa(1+196/2^-8)) -data8 0x9267e737c06cd34a , 0x00003ffe // log(1/frcpa(1+197/2^-8)) -data8 0x92d962ae6abb1237 , 0x00003ffe // log(1/frcpa(1+198/2^-8)) -data8 0x9383fa6afbe2074c , 0x00003ffe // log(1/frcpa(1+199/2^-8)) -data8 0x942f0421651c1c4e , 0x00003ffe // log(1/frcpa(1+200/2^-8)) -// -data8 0x94a14a3845bb985e , 0x00003ffe // log(1/frcpa(1+201/2^-8)) -data8 0x954d133857f861e7 , 0x00003ffe // log(1/frcpa(1+202/2^-8)) -data8 0x95bfd96468e604c4 , 0x00003ffe // log(1/frcpa(1+203/2^-8)) -data8 0x9632d31cafafa858 , 0x00003ffe // log(1/frcpa(1+204/2^-8)) -data8 0x96dfaabd86fa1647 , 0x00003ffe // log(1/frcpa(1+205/2^-8)) -// -data8 0x9753261fcbb2a594 , 0x00003ffe // log(1/frcpa(1+206/2^-8)) -data8 0x9800c11b426b996d , 0x00003ffe // log(1/frcpa(1+207/2^-8)) -data8 0x9874bf4d45ae663c , 0x00003ffe // log(1/frcpa(1+208/2^-8)) -data8 0x99231f5ee9a74f79 , 0x00003ffe // log(1/frcpa(1+209/2^-8)) -data8 0x9997a18a56bcad28 , 0x00003ffe // log(1/frcpa(1+210/2^-8)) -// -data8 0x9a46c873a3267e79 , 0x00003ffe // log(1/frcpa(1+211/2^-8)) -data8 0x9abbcfc621eb6cb6 , 0x00003ffe // log(1/frcpa(1+212/2^-8)) -data8 0x9b310cb0d354c990 , 0x00003ffe // log(1/frcpa(1+213/2^-8)) -data8 0x9be14cf9e1b3515c , 0x00003ffe // log(1/frcpa(1+214/2^-8)) -data8 0x9c5710b8cbb73a43 , 0x00003ffe // log(1/frcpa(1+215/2^-8)) -// -data8 0x9ccd0abd301f399c , 0x00003ffe // log(1/frcpa(1+216/2^-8)) -data8 0x9d7e67f3bdce8888 , 0x00003ffe // log(1/frcpa(1+217/2^-8)) -data8 0x9df4ea81a99daa01 , 0x00003ffe // log(1/frcpa(1+218/2^-8)) -data8 0x9e6ba405a54514ba , 0x00003ffe // log(1/frcpa(1+219/2^-8)) -data8 0x9f1e21c8c7bb62b3 , 0x00003ffe // log(1/frcpa(1+220/2^-8)) -// -data8 0x9f956593f6b6355c , 0x00003ffe // log(1/frcpa(1+221/2^-8)) -data8 0xa00ce1092e5498c3 , 0x00003ffe // log(1/frcpa(1+222/2^-8)) -data8 0xa0c08309c4b912c1 , 0x00003ffe // log(1/frcpa(1+223/2^-8)) -data8 0xa1388a8c6faa2afa , 0x00003ffe // log(1/frcpa(1+224/2^-8)) -data8 0xa1b0ca7095b5f985 , 0x00003ffe // log(1/frcpa(1+225/2^-8)) -// -data8 0xa22942eb47534a00 , 0x00003ffe // log(1/frcpa(1+226/2^-8)) -data8 0xa2de62326449d0a3 , 0x00003ffe // log(1/frcpa(1+227/2^-8)) -data8 0xa357690f88bfe345 , 0x00003ffe // log(1/frcpa(1+228/2^-8)) -data8 0xa3d0a93f45169a4b , 0x00003ffe // log(1/frcpa(1+229/2^-8)) -data8 0xa44a22f7ffe65f30 , 0x00003ffe // log(1/frcpa(1+230/2^-8)) -// -data8 0xa500c5e5b4c1aa36 , 0x00003ffe // log(1/frcpa(1+231/2^-8)) -data8 0xa57ad064eb2ebbc2 , 0x00003ffe // log(1/frcpa(1+232/2^-8)) -data8 0xa5f5152dedf4384e , 0x00003ffe // log(1/frcpa(1+233/2^-8)) -data8 0xa66f9478856233ec , 0x00003ffe // log(1/frcpa(1+234/2^-8)) -data8 0xa6ea4e7cca02c32e , 0x00003ffe // log(1/frcpa(1+235/2^-8)) -// -data8 0xa765437325341ccf , 0x00003ffe // log(1/frcpa(1+236/2^-8)) -data8 0xa81e21e6c75b4020 , 0x00003ffe // log(1/frcpa(1+237/2^-8)) -data8 0xa899ab333fe2b9ca , 0x00003ffe // log(1/frcpa(1+238/2^-8)) -data8 0xa9157039c51ebe71 , 0x00003ffe // log(1/frcpa(1+239/2^-8)) -data8 0xa991713433c2b999 , 0x00003ffe // log(1/frcpa(1+240/2^-8)) -// -data8 0xaa0dae5cbcc048b3 , 0x00003ffe // log(1/frcpa(1+241/2^-8)) -data8 0xaa8a27ede5eb13ad , 0x00003ffe // log(1/frcpa(1+242/2^-8)) -data8 0xab06de228a9e3499 , 0x00003ffe // log(1/frcpa(1+243/2^-8)) -data8 0xab83d135dc633301 , 0x00003ffe // log(1/frcpa(1+244/2^-8)) -data8 0xac3fb076adc7fe7a , 0x00003ffe // log(1/frcpa(1+245/2^-8)) -// -data8 0xacbd3cbbe47988f1 , 0x00003ffe // log(1/frcpa(1+246/2^-8)) -data8 0xad3b06b1a5dc57c3 , 0x00003ffe // log(1/frcpa(1+247/2^-8)) -data8 0xadb90e94af887717 , 0x00003ffe // log(1/frcpa(1+248/2^-8)) -data8 0xae3754a218f7c816 , 0x00003ffe // log(1/frcpa(1+249/2^-8)) -data8 0xaeb5d9175437afa2 , 0x00003ffe // log(1/frcpa(1+250/2^-8)) -// -data8 0xaf349c322e9c7cee , 0x00003ffe // log(1/frcpa(1+251/2^-8)) -data8 0xafb39e30d1768d1c , 0x00003ffe // log(1/frcpa(1+252/2^-8)) -data8 0xb032df51c2c93116 , 0x00003ffe // log(1/frcpa(1+253/2^-8)) -data8 0xb0b25fd3e6035ad9 , 0x00003ffe // log(1/frcpa(1+254/2^-8)) -data8 0xb1321ff67cba178c , 0x00003ffe // log(1/frcpa(1+255/2^-8)) -LOCAL_OBJECT_END(log_table_3) - - -.section .text -GLOBAL_LIBM_ENTRY(asinh) - -{ .mfi - getf.exp asinh_GR_f8 = f8 // Must recompute later if x unorm - fclass.m p12,p0 = f8, 0x0b // Test x unorm - mov log_GR_exp_17_ones = 0x1ffff -} -{ .mfi - addl NR_table_address = @ltoff(log_table_1), gp - fma.s1 log_y = f8, f8, f1 // y = x^2 + 1 - mov asinh_GR_comp = 0xfffc -} -;; - -{ .mfi - mov log_GR_exp_16_ones = 0xffff //BIAS - fclass.m p6,p0 = f8, 0xe7 // Test for x = NaN and inf and zero - mov log_GR_comp2 = 0x1003e -} -{ .mfi - ld8 NR_table_address = [NR_table_address] - fma.s1 asinh_w_sq = f8,f8,f0 // x^2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.lt.s1 p7,p11 = f8,f0 // if x<0 - nop.i 0 -} -{ .mfb - nop.m 0 - fnorm.s1 fNormX = f8 // Normalize x -(p12) br.cond.spnt ASINH_UNORM // Branch if x=unorm -} -;; - -ASINH_COMMON: -// Return here if x=unorm and not denorm -{ .mfi - //to get second table address - adds log_table_address2 = 0x40, NR_table_address - fma.s1 log_arg = f8,f1,f8 - nop.i 0 -} -{ .mfb - nop.m 0 -(p6) fma.d.s0 f8 = f8,f1,f8 // quietize nan result if x=nan -(p6) br.ret.spnt b0 // Exit for x=nan and inf and zero -} -;; - -{ .mfi - ldfpd NR1,NR2 = [log_table_address2],16 - frsqrta.s1 log_y_rs,p0 = log_y // z=1/sqrt(y) - nop.i 0 -} -;; - -{ .mfi - ldfe log_C13 = [log_table_address2],16 - nop.f 0 - and asinh_GR_f8 = asinh_GR_f8,log_GR_exp_17_ones -} -;; - -{ .mib - ldfe log_C11 = [log_table_address2],16 - cmp.le p13,p0 = log_GR_comp2,asinh_GR_f8 -(p13) br.cond.spnt LOG_COMMON1 // Branch if path 4, |x| >= 2^63 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter = log_y_rs,log_y,f0 // y*z - nop.i 0 -} -;; - -.pred.rel "mutex",p7,p11 -{ .mfi - nop.m 0 -(p11) mov asinh_f8 = fNormX - nop.i 0 -} -{ .mfb - cmp.gt p8,p0 = asinh_GR_comp,asinh_GR_f8 -(p7) fnma.s1 asinh_f8 = fNormX,f1,f0 -(p8) br.cond.spnt ASINH_NEAR_ZERO // Branch if path 2, 0 < |x| < 2^-3 -} -;; - -// Here if main path, 2^-3 <= |x| < 2^63 -///////////////////////////////// The first iteration ///////////////////////// -{ .mfi - ldfpd log_P5,log_P4 = [NR_table_address],16 - fnma.s1 log_y_rs_iter = log_y_rs_iter,log_y_rs,NR2 // 3-(y*z)*z - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter1 = log_y_rs,NR1,f0 // 0.5*z - nop.i 0 -} -;; - -{ .mfi - ldfpd log_P3,log_P2 = [NR_table_address],16 - // (0.5*z)*(3-(y*z)*z) - fma.s1 log_y_rs_iter = log_y_rs_iter1,log_y_rs_iter,f0 - nop.i 0 -} -;; - -/////////////////////////// The second iteration ///////////////////////////// -{ .mfi - ldfd log_P1 = [NR_table_address],16 - fma.s1 log_y_rs = log_y_rs_iter,log_y,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 log_y_rs = log_y_rs,log_y_rs_iter,NR2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter1 = log_y_rs_iter,NR1,f0 - nop.i 0 -} -;; - -{ .mfi - ldfe log2 = [NR_table_address],16 - // (0.5*z)*(3-(y*z)*z) - fma.s1 log_y_rs_iter = log_y_rs_iter1,log_y_rs,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - // (0.5*z)*(3-(y*z)*z) - fma.s1 log_arg_early = log_y_rs_iter1,log_y_rs,f0 - nop.i 0 -} -;; - -////////////////////////////////// The third iteration //////////////////////// -{ .mfi - nop.m 0 - fma.s1 log_y_rs = log_y_rs_iter,log_y,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter1 = log_y_rs_iter,NR1,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_arg_early = log_arg_early,log_y,asinh_f8 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 log_y_rs = log_y_rs,log_y_rs_iter,NR2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter1 = log_y_rs_iter1,log_y,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - frcpa.s1 log_C,p0 = f1,log_arg_early - nop.i 0 -} -;; - -{ .mfi - getf.exp log_GR_signexp_f8 = log_arg_early - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - getf.sig log_GR_significand_f8 = log_arg_early - // (0.5*z)*(3-(y*z)*z)*y + |x| - fma.s1 log_arg = log_y_rs_iter1,log_y_rs,asinh_f8 - //to get third table address - adds log_table_address3 = 0x70, NR_table_address -} -;; - -///////////////////////////////// The end NR iterations ///////////////////// -{ .mfi - nop.m 0 - nop.f 0 - //significant bit destruction - and log_GR_exp_f8 = log_GR_signexp_f8, log_GR_exp_17_ones -} -;; - -{ .mfi - //BIAS subtraction - sub log_GR_true_exp_f8 = log_GR_exp_f8, log_GR_exp_16_ones -(p7) fnma.s1 log2 = log2,f1,f0 - nop.i 0 -} -;; - -{ .mfi - setf.sig log_int_Nfloat = log_GR_true_exp_f8 - fms.s1 log_r = log_C,log_arg,f1 // C = frcpa(x); r = C * x - 1 - extr.u log_GR_index = log_GR_significand_f8,55,8 //Extract 8 bits -} -;; - -{ .mmi - //pre-index*16 + index - shladd log_table_address3 = log_GR_index,4,log_table_address3 -;; - ldfe log_T = [log_table_address3] - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rsq = log_r, log_r, f0 //r^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_rp_p4 = log_P5, log_r, log_P4 //P5*r + P4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rp_p32 = log_P3, log_r, log_P2 //P3*r + P2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //convert N to the floating-point format - fcvt.xf log_Nfloat = log_int_Nfloat - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rcube = log_rsq, log_r, f0 //r^3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_rp_p10 = log_rsq, log_P1, log_r //P1*r^2 + r - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //(P5*r + P4)*r^2 + P3*r + P2 - fma.s1 log_rp_p2 = log_rp_p4, log_rsq, log_rp_p32 - nop.i 0 -} -;; - -.pred.rel "mutex",p7,p11 -{ .mfi - nop.m 0 -(p11) fma.s1 log_T_plus_Nlog2 = log_Nfloat,log2,log_T //N*log2 + T if x>0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fms.s1 log_T_plus_Nlog2 = log_Nfloat,log2,log_T //N*log2 - T if x<0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //((P5*r + P4)*r^2 + P3*r + P2)*w^3 + P1*r^2 + r - fma.s1 log_r2P_r = log_rp_p2, log_rcube, log_rp_p10 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // N*log2 + T + ((P5*r + P4)*r^2 + P3*r + P2)*r^3 + P1*r^2 + r -(p11) fadd.d.s0 f8 = log_T_plus_Nlog2,log_r2P_r - nop.i 0 -} -{ .mfb - nop.m 0 - // -N*log2 - T - ((P5*r + P4)*r^2 + P3*r + P2)*r^3 + P1*r^2 + r -(p7) fsub.d.s0 f8 = log_T_plus_Nlog2,log_r2P_r - br.ret.sptk b0 // Exit main path, path 3: 2^-3 <= |x| < 2^63 -} -;; - -// Here if path 4, |x| >= 2^63 -LOG_COMMON1: -{ .mfi - ldfpd log_P5,log_P4 = [NR_table_address],16 - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - ldfpd log_P3,log_P2 = [NR_table_address],16 - frcpa.s1 log_C,p0 = f1,log_arg - nop.i 0 -} -;; - -{ .mmi - getf.exp log_GR_signexp_f8 = log_arg - ldfd log_P1 = [NR_table_address],16 - nop.i 0 -} -;; - -{ .mmi - getf.sig log_GR_significand_f8 = log_arg - ldfe log2 = [NR_table_address],16 - nop.i 0 -} -;; - -{ .mfi - adds log_table_address3 = 0x70, NR_table_address - nop.f 0 - //significant bit destruction - and log_GR_exp_f8 = log_GR_signexp_f8, log_GR_exp_17_ones -} -;; - -{ .mmf - nop.m 0 - //BIAS subtraction - sub log_GR_true_exp_f8 = log_GR_exp_f8, log_GR_exp_16_ones - fms.s1 log_r = log_C,log_arg,f1 //C = frcpa(x); r = C * x - 1 -} -;; - -{ .mfi - setf.sig log_int_Nfloat = log_GR_true_exp_f8 - nop.f 0 - extr.u log_GR_index = log_GR_significand_f8,55,8 //Extract 8 bits -} -;; - -{ .mmi - //pre-index*16 + index - shladd log_table_address3 = log_GR_index,4,log_table_address3 -;; - ldfe log_T = [log_table_address3] - nop.i 0 - -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rsq = log_r, log_r, f0 //r^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_rp_p4 = log_P5, log_r, log_P4 //P5*r + P4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rp_p32 = log_P3, log_r, log_P2 //P3*r + P2 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fnma.s1 log2 = log2,f1,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rcube = log_rsq, log_r, f0 //r^3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_rp_p10 = log_rsq, log_P1, log_r //P1*r^2 + r - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //convert N to the floating-point format - fcvt.xf log_Nfloat = log_int_Nfloat - nop.i 0 -} -{ .mfi - nop.m 0 - //(P5*r + P4)*r^2 + P3*r + P2 - fma.s1 log_rp_p2 = log_rp_p4, log_rsq, log_rp_p32 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p7) fnma.s1 log_T = log_T,f1,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_T_plus_Nlog2 = log_Nfloat,log2,log_T //N*log2 + T - nop.i 0 -} -{ .mfi - nop.m 0 - //((P5*r + P4)*r^2 + P3*r + P2)*w^3 + P1*r^2 + r - fma.s1 log_r2P_r = log_rp_p2, log_rcube, log_rp_p10 - nop.i 0 -} -;; - -.pred.rel "mutex",p7,p11 -{ .mfi - nop.m 0 - // N*log2 + T + ((P5*r + P4)*r^2 + P3*r + P2)*r^3 + P1*r^2 + r -(p11) fadd.d.s0 f8 = log_T_plus_Nlog2,log_r2P_r - nop.i 0 -} -{ .mfb - nop.m 0 - // -N*log2 - T - ((P5*r + P4)*r^2 + P3*r + P2)*r^3 + P1*r^2 + r -(p7) fsub.d.s0 f8 = log_T_plus_Nlog2,log_r2P_r - br.ret.sptk b0 // Exit path 4, |x| >= 2^63 -} -;; - -// Here is path 2, 0 < |x| < 2^-3 -ASINH_NEAR_ZERO: -{ .mfi - ldfe log_C9 = [log_table_address2],16 - fma.s1 asinh_w_cube = asinh_w_sq,fNormX,f0 - nop.i 0 -} -;; - -{ .mfi - ldfe log_C7 = [log_table_address2],16 - fma.s1 asinh_w_four = asinh_w_sq,asinh_w_sq,f0 - nop.i 0 -} -;; - -{ .mfi - ldfe log_C5 = [log_table_address2],16 - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - ldfe log_C3 = [log_table_address2],16 - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 asinh_w_13 = log_C13,asinh_w_sq,log_C11 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 asinh_w_9 = log_C9,asinh_w_sq,log_C7 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 asinh_w_3 = log_C5,asinh_w_sq,log_C3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 asinh_w_seven = asinh_w_four,asinh_w_cube,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 asinh_w_7 = asinh_w_13,asinh_w_four,asinh_w_9 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 asinh_w_5 = asinh_w_3,asinh_w_cube,fNormX - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fma.d.s0 f8 = asinh_w_7,asinh_w_seven,asinh_w_5 - br.ret.sptk b0 // Exit path 2 (0.0 <|x| < 2^(-3)) -} -;; - -ASINH_UNORM: -// Here if x=unorm -{ .mfi - getf.exp asinh_GR_f8 = fNormX // Recompute if x unorm - fclass.m p0,p13 = fNormX, 0x0b // Test x denorm - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fcmp.eq.s0 p14,p0 = f8, f0 // Dummy to set denormal flag -(p13) br.cond.sptk ASINH_COMMON // Continue if x unorm and not denorm -} -;; - -.pred.rel "mutex",p7,p11 -{ .mfi - nop.m 0 -(p7) fma.d.s0 f8 = f8,f8,f8 // Result x+x^2 if x=-denorm - nop.i 0 -} -{ .mfb - nop.m 0 -(p11) fnma.d.s0 f8 = f8,f8,f8 // Result x-x^2 if x=+denorm - br.ret.spnt b0 // Exit if denorm -} -;; - -GLOBAL_LIBM_END(asinh) diff --git a/sysdeps/ia64/fpu/s_asinhf.S b/sysdeps/ia64/fpu/s_asinhf.S deleted file mode 100644 index df616deae0..0000000000 --- a/sysdeps/ia64/fpu/s_asinhf.S +++ /dev/null @@ -1,937 +0,0 @@ -.file "asinhf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// ============================================================== -// History -// ============================================================== -// 04/02/01 Initial version -// 04/19/01 Improved speed of the paths #1,2,3,4,5 -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align -// 05/21/03 Improved performance, fixed to handle unorms -// -// API -// ============================================================== -// float asinhf(float) -// -// Overview of operation -// ============================================================== -// -// There are 7 paths: -// 1. x = 0.0 -// Return asinhf(x) = 0.0 -// 2. 0.0 <|x| < 2^(-5) -// Return asinhf(x) = Pol5(x), where Pol5(x) = ((x^2)*C1 + C0)*x^3 + x - -// 3. 2^(-5) <= |x| < 2^51 -// Return asinhf(x) = sign(x)*(log(|x| + sqrt(x^2 + 1.0))) -// To compute x + sqrt(x^2 + 1.0) modified Newton Raphson method is used -// (2 iterations) -// Algorithm description for log function see below. -// -// 4. 2^51 <= |x| < +INF -// Return asinhf(x) = sign(x)*log(2*|x|) -// Algorithm description for log function see below. -// -// 5. x = INF -// Return asinhf(x) = INF -// -// 6. x = [S,Q]NaN -// Return asinhf(x) = QNaN -// -// 7. x = denormal -// Return asinhf(x) = x -// -//============================================================== -// Algorithm Description for log(x) function -// Below we are using the fact that inequality x - 1.0 > 2^(-6) is always -// true for this asinh implementation -// -// Consider x = 2^N 1.f1 f2 f3 f4...f63 -// Log(x) = log(frcpa(x) x/frcpa(x)) -// = log(1/frcpa(x)) + log(frcpa(x) x) -// = -log(frcpa(x)) + log(frcpa(x) x) -// -// frcpa(x) = 2^-N frcpa((1.f1 f2 ... f63) -// -// -log(frcpa(x)) = -log(C) -// = -log(2^-N) - log(frcpa(1.f1 f2 ... f63)) -// -// -log(frcpa(x)) = -log(C) -// = +Nlog2 - log(frcpa(1.f1 f2 ... f63)) -// -// -log(frcpa(x)) = -log(C) -// = +Nlog2 + log(frcpa(1.f1 f2 ... f63)) -// -// Log(x) = log(1/frcpa(x)) + log(frcpa(x) x) -// -// Log(x) = +Nlog2 + log(1./frcpa(1.f1 f2 ... f63)) + log(frcpa(x) x) -// Log(x) = +Nlog2 - log(/frcpa(1.f1 f2 ... f63)) + log(frcpa(x) x) -// Log(x) = +Nlog2 + T + log(frcpa(x) x) -// -// Log(x) = +Nlog2 + T + log(C x) -// -// Cx = 1 + r -// -// Log(x) = +Nlog2 + T + log(1+r) -// Log(x) = +Nlog2 + T + Series( r - r^2/2 + r^3/3 - r^4/4 ....) -// -// 1.f1 f2 ... f8 has 256 entries. -// They are 1 + k/2^8, k = 0 ... 255 -// These 256 values are the table entries. -// -// Implementation -//============================================================== -// C = frcpa(x) -// r = C * x - 1 -// -// Form rseries = r + P1*r^2 + P2*r^3 + P3*r^4 -// -// x = f * 2*n where f is 1.f_1f_2f_3....f_63 -// Nfloat = float(n) where n is the true unbiased exponent -// pre-index = f_1f_2....f_8 -// index = pre_index * 8 -// get the dxt table entry at index + offset = T -// -// result = (T + Nfloat * log(2)) + rseries -// -// The T table is calculated as follows -// Form x_k = 1 + k/2^8 where k goes from 0... 255 -// y_k = frcpa(x_k) -// log(1/y_k) in quad and round to double-extended -// -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f9 -> f15, f32 -> f55 - -// General registers used: -// r14 -> r27 - -// Predicate registers used: -// p6 -> p14 - -// p6 to filter out case when x = [Q,S]NaN or INF or zero -// p7 to filter out case when x < 0.0 -// p8 to select path #2 - -// p11 to filter out case when x >= 0 -// p12 to filter out case when x = + denormal -// p13 to select path #4 -// p14 to filtef out case when x = - denormal -// Assembly macros -//============================================================== -log_GR_exp_17_ones = r14 -log_GR_signexp_f8 = r15 -log_table_address2 = r16 -log_GR_exp_16_ones = r17 -log_GR_exp_f8 = r18 -log_GR_true_exp_f8 = r19 -log_GR_significand_f8 = r20 -log_GR_index = r21 -log_GR_comp2 = r22 -asinh_GR_f8 = r23 -asinh_GR_comp = r24 -asinh_GR_f8 = r25 -log_table_address3 = r26 -NR_table_address = r27 - -//============================================================== -log_y = f9 -NR1 = f10 -NR2 = f11 -log_y_rs = f12 -log_y_rs_iter = f13 -log_y_rs_iter1 = f14 -fNormX = f15 -asinh_w_sq = f32 -log_arg_early = f33 -log_y_rs_iter2 = f34 -log_P3 = f35 -log_P2 = f36 -log_P1 = f37 -log2 = f38 -log_C0 = f39 -log_C1 = f40 -asinh_f8 = f41 -log_C = f42 -log_arg = f43 -asinh_w_cube = f44 -log_int_Nfloat = f45 -log_r = f46 -log_rsq = f47 -asinh_w_1 = f48 -log_rp_p32 = f49 -log_rcube = f50 -log_rp_p10 = f51 -log_rp_p2 = f52 -log_Nfloat = f53 -log_T = f54 -log_T_plus_Nlog2 = f55 - -// Data tables -//============================================================== - -RODATA -.align 16 - -LOCAL_OBJECT_START(log_table_1) - -data8 0xbfd0001008f39d59 // p3 -data8 0x3fd5556073e0c45a // p2 -data8 0xbfdffffffffaea15 // p1 -data8 0x3fe62e42fefa39ef // log(2) -LOCAL_OBJECT_END(log_table_1) - -LOCAL_OBJECT_START(log_table_2) -data8 0x3FE0000000000000 // 0.5 -data8 0x4008000000000000 // 3.0 -data8 0x9979C79685A5EB16, 0x00003FFB // C1 3FFB9979C79685A5EB16 -data8 0xAAAAA96F80786D62, 0x0000BFFC // C0 BFFCAAAAA96F80786D62 -LOCAL_OBJECT_END(log_table_2) - -LOCAL_OBJECT_START(log_table_3) -data8 0x3F60040155D5889E //log(1/frcpa(1+ 0/256) -data8 0x3F78121214586B54 //log(1/frcpa(1+ 1/256) -data8 0x3F841929F96832F0 //log(1/frcpa(1+ 2/256) -data8 0x3F8C317384C75F06 //log(1/frcpa(1+ 3/256) -data8 0x3F91A6B91AC73386 //log(1/frcpa(1+ 4/256) -data8 0x3F95BA9A5D9AC039 //log(1/frcpa(1+ 5/256) -data8 0x3F99D2A8074325F4 //log(1/frcpa(1+ 6/256) -data8 0x3F9D6B2725979802 //log(1/frcpa(1+ 7/256) -data8 0x3FA0C58FA19DFAAA //log(1/frcpa(1+ 8/256) -data8 0x3FA2954C78CBCE1B //log(1/frcpa(1+ 9/256) -data8 0x3FA4A94D2DA96C56 //log(1/frcpa(1+ 10/256) -data8 0x3FA67C94F2D4BB58 //log(1/frcpa(1+ 11/256) -data8 0x3FA85188B630F068 //log(1/frcpa(1+ 12/256) -data8 0x3FAA6B8ABE73AF4C //log(1/frcpa(1+ 13/256) -data8 0x3FAC441E06F72A9E //log(1/frcpa(1+ 14/256) -data8 0x3FAE1E6713606D07 //log(1/frcpa(1+ 15/256) -data8 0x3FAFFA6911AB9301 //log(1/frcpa(1+ 16/256) -data8 0x3FB0EC139C5DA601 //log(1/frcpa(1+ 17/256) -data8 0x3FB1DBD2643D190B //log(1/frcpa(1+ 18/256) -data8 0x3FB2CC7284FE5F1C //log(1/frcpa(1+ 19/256) -data8 0x3FB3BDF5A7D1EE64 //log(1/frcpa(1+ 20/256) -data8 0x3FB4B05D7AA012E0 //log(1/frcpa(1+ 21/256) -data8 0x3FB580DB7CEB5702 //log(1/frcpa(1+ 22/256) -data8 0x3FB674F089365A7A //log(1/frcpa(1+ 23/256) -data8 0x3FB769EF2C6B568D //log(1/frcpa(1+ 24/256) -data8 0x3FB85FD927506A48 //log(1/frcpa(1+ 25/256) -data8 0x3FB9335E5D594989 //log(1/frcpa(1+ 26/256) -data8 0x3FBA2B0220C8E5F5 //log(1/frcpa(1+ 27/256) -data8 0x3FBB0004AC1A86AC //log(1/frcpa(1+ 28/256) -data8 0x3FBBF968769FCA11 //log(1/frcpa(1+ 29/256) -data8 0x3FBCCFEDBFEE13A8 //log(1/frcpa(1+ 30/256) -data8 0x3FBDA727638446A2 //log(1/frcpa(1+ 31/256) -data8 0x3FBEA3257FE10F7A //log(1/frcpa(1+ 32/256) -data8 0x3FBF7BE9FEDBFDE6 //log(1/frcpa(1+ 33/256) -data8 0x3FC02AB352FF25F4 //log(1/frcpa(1+ 34/256) -data8 0x3FC097CE579D204D //log(1/frcpa(1+ 35/256) -data8 0x3FC1178E8227E47C //log(1/frcpa(1+ 36/256) -data8 0x3FC185747DBECF34 //log(1/frcpa(1+ 37/256) -data8 0x3FC1F3B925F25D41 //log(1/frcpa(1+ 38/256) -data8 0x3FC2625D1E6DDF57 //log(1/frcpa(1+ 39/256) -data8 0x3FC2D1610C86813A //log(1/frcpa(1+ 40/256) -data8 0x3FC340C59741142E //log(1/frcpa(1+ 41/256) -data8 0x3FC3B08B6757F2A9 //log(1/frcpa(1+ 42/256) -data8 0x3FC40DFB08378003 //log(1/frcpa(1+ 43/256) -data8 0x3FC47E74E8CA5F7C //log(1/frcpa(1+ 44/256) -data8 0x3FC4EF51F6466DE4 //log(1/frcpa(1+ 45/256) -data8 0x3FC56092E02BA516 //log(1/frcpa(1+ 46/256) -data8 0x3FC5D23857CD74D5 //log(1/frcpa(1+ 47/256) -data8 0x3FC6313A37335D76 //log(1/frcpa(1+ 48/256) -data8 0x3FC6A399DABBD383 //log(1/frcpa(1+ 49/256) -data8 0x3FC70337DD3CE41B //log(1/frcpa(1+ 50/256) -data8 0x3FC77654128F6127 //log(1/frcpa(1+ 51/256) -data8 0x3FC7E9D82A0B022D //log(1/frcpa(1+ 52/256) -data8 0x3FC84A6B759F512F //log(1/frcpa(1+ 53/256) -data8 0x3FC8AB47D5F5A310 //log(1/frcpa(1+ 54/256) -data8 0x3FC91FE49096581B //log(1/frcpa(1+ 55/256) -data8 0x3FC981634011AA75 //log(1/frcpa(1+ 56/256) -data8 0x3FC9F6C407089664 //log(1/frcpa(1+ 57/256) -data8 0x3FCA58E729348F43 //log(1/frcpa(1+ 58/256) -data8 0x3FCABB55C31693AD //log(1/frcpa(1+ 59/256) -data8 0x3FCB1E104919EFD0 //log(1/frcpa(1+ 60/256) -data8 0x3FCB94EE93E367CB //log(1/frcpa(1+ 61/256) -data8 0x3FCBF851C067555F //log(1/frcpa(1+ 62/256) -data8 0x3FCC5C0254BF23A6 //log(1/frcpa(1+ 63/256) -data8 0x3FCCC000C9DB3C52 //log(1/frcpa(1+ 64/256) -data8 0x3FCD244D99C85674 //log(1/frcpa(1+ 65/256) -data8 0x3FCD88E93FB2F450 //log(1/frcpa(1+ 66/256) -data8 0x3FCDEDD437EAEF01 //log(1/frcpa(1+ 67/256) -data8 0x3FCE530EFFE71012 //log(1/frcpa(1+ 68/256) -data8 0x3FCEB89A1648B971 //log(1/frcpa(1+ 69/256) -data8 0x3FCF1E75FADF9BDE //log(1/frcpa(1+ 70/256) -data8 0x3FCF84A32EAD7C35 //log(1/frcpa(1+ 71/256) -data8 0x3FCFEB2233EA07CD //log(1/frcpa(1+ 72/256) -data8 0x3FD028F9C7035C1C //log(1/frcpa(1+ 73/256) -data8 0x3FD05C8BE0D9635A //log(1/frcpa(1+ 74/256) -data8 0x3FD085EB8F8AE797 //log(1/frcpa(1+ 75/256) -data8 0x3FD0B9C8E32D1911 //log(1/frcpa(1+ 76/256) -data8 0x3FD0EDD060B78081 //log(1/frcpa(1+ 77/256) -data8 0x3FD122024CF0063F //log(1/frcpa(1+ 78/256) -data8 0x3FD14BE2927AECD4 //log(1/frcpa(1+ 79/256) -data8 0x3FD180618EF18ADF //log(1/frcpa(1+ 80/256) -data8 0x3FD1B50BBE2FC63B //log(1/frcpa(1+ 81/256) -data8 0x3FD1DF4CC7CF242D //log(1/frcpa(1+ 82/256) -data8 0x3FD214456D0EB8D4 //log(1/frcpa(1+ 83/256) -data8 0x3FD23EC5991EBA49 //log(1/frcpa(1+ 84/256) -data8 0x3FD2740D9F870AFB //log(1/frcpa(1+ 85/256) -data8 0x3FD29ECDABCDFA04 //log(1/frcpa(1+ 86/256) -data8 0x3FD2D46602ADCCEE //log(1/frcpa(1+ 87/256) -data8 0x3FD2FF66B04EA9D4 //log(1/frcpa(1+ 88/256) -data8 0x3FD335504B355A37 //log(1/frcpa(1+ 89/256) -data8 0x3FD360925EC44F5D //log(1/frcpa(1+ 90/256) -data8 0x3FD38BF1C3337E75 //log(1/frcpa(1+ 91/256) -data8 0x3FD3C25277333184 //log(1/frcpa(1+ 92/256) -data8 0x3FD3EDF463C1683E //log(1/frcpa(1+ 93/256) -data8 0x3FD419B423D5E8C7 //log(1/frcpa(1+ 94/256) -data8 0x3FD44591E0539F49 //log(1/frcpa(1+ 95/256) -data8 0x3FD47C9175B6F0AD //log(1/frcpa(1+ 96/256) -data8 0x3FD4A8B341552B09 //log(1/frcpa(1+ 97/256) -data8 0x3FD4D4F3908901A0 //log(1/frcpa(1+ 98/256) -data8 0x3FD501528DA1F968 //log(1/frcpa(1+ 99/256) -data8 0x3FD52DD06347D4F6 //log(1/frcpa(1+ 100/256) -data8 0x3FD55A6D3C7B8A8A //log(1/frcpa(1+ 101/256) -data8 0x3FD5925D2B112A59 //log(1/frcpa(1+ 102/256) -data8 0x3FD5BF406B543DB2 //log(1/frcpa(1+ 103/256) -data8 0x3FD5EC433D5C35AE //log(1/frcpa(1+ 104/256) -data8 0x3FD61965CDB02C1F //log(1/frcpa(1+ 105/256) -data8 0x3FD646A84935B2A2 //log(1/frcpa(1+ 106/256) -data8 0x3FD6740ADD31DE94 //log(1/frcpa(1+ 107/256) -data8 0x3FD6A18DB74A58C5 //log(1/frcpa(1+ 108/256) -data8 0x3FD6CF31058670EC //log(1/frcpa(1+ 109/256) -data8 0x3FD6F180E852F0BA //log(1/frcpa(1+ 110/256) -data8 0x3FD71F5D71B894F0 //log(1/frcpa(1+ 111/256) -data8 0x3FD74D5AEFD66D5C //log(1/frcpa(1+ 112/256) -data8 0x3FD77B79922BD37E //log(1/frcpa(1+ 113/256) -data8 0x3FD7A9B9889F19E2 //log(1/frcpa(1+ 114/256) -data8 0x3FD7D81B037EB6A6 //log(1/frcpa(1+ 115/256) -data8 0x3FD8069E33827231 //log(1/frcpa(1+ 116/256) -data8 0x3FD82996D3EF8BCB //log(1/frcpa(1+ 117/256) -data8 0x3FD85855776DCBFB //log(1/frcpa(1+ 118/256) -data8 0x3FD8873658327CCF //log(1/frcpa(1+ 119/256) -data8 0x3FD8AA75973AB8CF //log(1/frcpa(1+ 120/256) -data8 0x3FD8D992DC8824E5 //log(1/frcpa(1+ 121/256) -data8 0x3FD908D2EA7D9512 //log(1/frcpa(1+ 122/256) -data8 0x3FD92C59E79C0E56 //log(1/frcpa(1+ 123/256) -data8 0x3FD95BD750EE3ED3 //log(1/frcpa(1+ 124/256) -data8 0x3FD98B7811A3EE5B //log(1/frcpa(1+ 125/256) -data8 0x3FD9AF47F33D406C //log(1/frcpa(1+ 126/256) -data8 0x3FD9DF270C1914A8 //log(1/frcpa(1+ 127/256) -data8 0x3FDA0325ED14FDA4 //log(1/frcpa(1+ 128/256) -data8 0x3FDA33440224FA79 //log(1/frcpa(1+ 129/256) -data8 0x3FDA57725E80C383 //log(1/frcpa(1+ 130/256) -data8 0x3FDA87D0165DD199 //log(1/frcpa(1+ 131/256) -data8 0x3FDAAC2E6C03F896 //log(1/frcpa(1+ 132/256) -data8 0x3FDADCCC6FDF6A81 //log(1/frcpa(1+ 133/256) -data8 0x3FDB015B3EB1E790 //log(1/frcpa(1+ 134/256) -data8 0x3FDB323A3A635948 //log(1/frcpa(1+ 135/256) -data8 0x3FDB56FA04462909 //log(1/frcpa(1+ 136/256) -data8 0x3FDB881AA659BC93 //log(1/frcpa(1+ 137/256) -data8 0x3FDBAD0BEF3DB165 //log(1/frcpa(1+ 138/256) -data8 0x3FDBD21297781C2F //log(1/frcpa(1+ 139/256) -data8 0x3FDC039236F08819 //log(1/frcpa(1+ 140/256) -data8 0x3FDC28CB1E4D32FD //log(1/frcpa(1+ 141/256) -data8 0x3FDC4E19B84723C2 //log(1/frcpa(1+ 142/256) -data8 0x3FDC7FF9C74554C9 //log(1/frcpa(1+ 143/256) -data8 0x3FDCA57B64E9DB05 //log(1/frcpa(1+ 144/256) -data8 0x3FDCCB130A5CEBB0 //log(1/frcpa(1+ 145/256) -data8 0x3FDCF0C0D18F326F //log(1/frcpa(1+ 146/256) -data8 0x3FDD232075B5A201 //log(1/frcpa(1+ 147/256) -data8 0x3FDD490246DEFA6B //log(1/frcpa(1+ 148/256) -data8 0x3FDD6EFA918D25CD //log(1/frcpa(1+ 149/256) -data8 0x3FDD9509707AE52F //log(1/frcpa(1+ 150/256) -data8 0x3FDDBB2EFE92C554 //log(1/frcpa(1+ 151/256) -data8 0x3FDDEE2F3445E4AF //log(1/frcpa(1+ 152/256) -data8 0x3FDE148A1A2726CE //log(1/frcpa(1+ 153/256) -data8 0x3FDE3AFC0A49FF40 //log(1/frcpa(1+ 154/256) -data8 0x3FDE6185206D516E //log(1/frcpa(1+ 155/256) -data8 0x3FDE882578823D52 //log(1/frcpa(1+ 156/256) -data8 0x3FDEAEDD2EAC990C //log(1/frcpa(1+ 157/256) -data8 0x3FDED5AC5F436BE3 //log(1/frcpa(1+ 158/256) -data8 0x3FDEFC9326D16AB9 //log(1/frcpa(1+ 159/256) -data8 0x3FDF2391A2157600 //log(1/frcpa(1+ 160/256) -data8 0x3FDF4AA7EE03192D //log(1/frcpa(1+ 161/256) -data8 0x3FDF71D627C30BB0 //log(1/frcpa(1+ 162/256) -data8 0x3FDF991C6CB3B379 //log(1/frcpa(1+ 163/256) -data8 0x3FDFC07ADA69A910 //log(1/frcpa(1+ 164/256) -data8 0x3FDFE7F18EB03D3E //log(1/frcpa(1+ 165/256) -data8 0x3FE007C053C5002E //log(1/frcpa(1+ 166/256) -data8 0x3FE01B942198A5A1 //log(1/frcpa(1+ 167/256) -data8 0x3FE02F74400C64EB //log(1/frcpa(1+ 168/256) -data8 0x3FE04360BE7603AD //log(1/frcpa(1+ 169/256) -data8 0x3FE05759AC47FE34 //log(1/frcpa(1+ 170/256) -data8 0x3FE06B5F1911CF52 //log(1/frcpa(1+ 171/256) -data8 0x3FE078BF0533C568 //log(1/frcpa(1+ 172/256) -data8 0x3FE08CD9687E7B0E //log(1/frcpa(1+ 173/256) -data8 0x3FE0A10074CF9019 //log(1/frcpa(1+ 174/256) -data8 0x3FE0B5343A234477 //log(1/frcpa(1+ 175/256) -data8 0x3FE0C974C89431CE //log(1/frcpa(1+ 176/256) -data8 0x3FE0DDC2305B9886 //log(1/frcpa(1+ 177/256) -data8 0x3FE0EB524BAFC918 //log(1/frcpa(1+ 178/256) -data8 0x3FE0FFB54213A476 //log(1/frcpa(1+ 179/256) -data8 0x3FE114253DA97D9F //log(1/frcpa(1+ 180/256) -data8 0x3FE128A24F1D9AFF //log(1/frcpa(1+ 181/256) -data8 0x3FE1365252BF0865 //log(1/frcpa(1+ 182/256) -data8 0x3FE14AE558B4A92D //log(1/frcpa(1+ 183/256) -data8 0x3FE15F85A19C765B //log(1/frcpa(1+ 184/256) -data8 0x3FE16D4D38C119FA //log(1/frcpa(1+ 185/256) -data8 0x3FE18203C20DD133 //log(1/frcpa(1+ 186/256) -data8 0x3FE196C7BC4B1F3B //log(1/frcpa(1+ 187/256) -data8 0x3FE1A4A738B7A33C //log(1/frcpa(1+ 188/256) -data8 0x3FE1B981C0C9653D //log(1/frcpa(1+ 189/256) -data8 0x3FE1CE69E8BB106B //log(1/frcpa(1+ 190/256) -data8 0x3FE1DC619DE06944 //log(1/frcpa(1+ 191/256) -data8 0x3FE1F160A2AD0DA4 //log(1/frcpa(1+ 192/256) -data8 0x3FE2066D7740737E //log(1/frcpa(1+ 193/256) -data8 0x3FE2147DBA47A394 //log(1/frcpa(1+ 194/256) -data8 0x3FE229A1BC5EBAC3 //log(1/frcpa(1+ 195/256) -data8 0x3FE237C1841A502E //log(1/frcpa(1+ 196/256) -data8 0x3FE24CFCE6F80D9A //log(1/frcpa(1+ 197/256) -data8 0x3FE25B2C55CD5762 //log(1/frcpa(1+ 198/256) -data8 0x3FE2707F4D5F7C41 //log(1/frcpa(1+ 199/256) -data8 0x3FE285E0842CA384 //log(1/frcpa(1+ 200/256) -data8 0x3FE294294708B773 //log(1/frcpa(1+ 201/256) -data8 0x3FE2A9A2670AFF0C //log(1/frcpa(1+ 202/256) -data8 0x3FE2B7FB2C8D1CC1 //log(1/frcpa(1+ 203/256) -data8 0x3FE2C65A6395F5F5 //log(1/frcpa(1+ 204/256) -data8 0x3FE2DBF557B0DF43 //log(1/frcpa(1+ 205/256) -data8 0x3FE2EA64C3F97655 //log(1/frcpa(1+ 206/256) -data8 0x3FE3001823684D73 //log(1/frcpa(1+ 207/256) -data8 0x3FE30E97E9A8B5CD //log(1/frcpa(1+ 208/256) -data8 0x3FE32463EBDD34EA //log(1/frcpa(1+ 209/256) -data8 0x3FE332F4314AD796 //log(1/frcpa(1+ 210/256) -data8 0x3FE348D90E7464D0 //log(1/frcpa(1+ 211/256) -data8 0x3FE35779F8C43D6E //log(1/frcpa(1+ 212/256) -data8 0x3FE36621961A6A99 //log(1/frcpa(1+ 213/256) -data8 0x3FE37C299F3C366A //log(1/frcpa(1+ 214/256) -data8 0x3FE38AE2171976E7 //log(1/frcpa(1+ 215/256) -data8 0x3FE399A157A603E7 //log(1/frcpa(1+ 216/256) -data8 0x3FE3AFCCFE77B9D1 //log(1/frcpa(1+ 217/256) -data8 0x3FE3BE9D503533B5 //log(1/frcpa(1+ 218/256) -data8 0x3FE3CD7480B4A8A3 //log(1/frcpa(1+ 219/256) -data8 0x3FE3E3C43918F76C //log(1/frcpa(1+ 220/256) -data8 0x3FE3F2ACB27ED6C7 //log(1/frcpa(1+ 221/256) -data8 0x3FE4019C2125CA93 //log(1/frcpa(1+ 222/256) -data8 0x3FE4181061389722 //log(1/frcpa(1+ 223/256) -data8 0x3FE42711518DF545 //log(1/frcpa(1+ 224/256) -data8 0x3FE436194E12B6BF //log(1/frcpa(1+ 225/256) -data8 0x3FE445285D68EA69 //log(1/frcpa(1+ 226/256) -data8 0x3FE45BCC464C893A //log(1/frcpa(1+ 227/256) -data8 0x3FE46AED21F117FC //log(1/frcpa(1+ 228/256) -data8 0x3FE47A1527E8A2D3 //log(1/frcpa(1+ 229/256) -data8 0x3FE489445EFFFCCC //log(1/frcpa(1+ 230/256) -data8 0x3FE4A018BCB69835 //log(1/frcpa(1+ 231/256) -data8 0x3FE4AF5A0C9D65D7 //log(1/frcpa(1+ 232/256) -data8 0x3FE4BEA2A5BDBE87 //log(1/frcpa(1+ 233/256) -data8 0x3FE4CDF28F10AC46 //log(1/frcpa(1+ 234/256) -data8 0x3FE4DD49CF994058 //log(1/frcpa(1+ 235/256) -data8 0x3FE4ECA86E64A684 //log(1/frcpa(1+ 236/256) -data8 0x3FE503C43CD8EB68 //log(1/frcpa(1+ 237/256) -data8 0x3FE513356667FC57 //log(1/frcpa(1+ 238/256) -data8 0x3FE522AE0738A3D8 //log(1/frcpa(1+ 239/256) -data8 0x3FE5322E26867857 //log(1/frcpa(1+ 240/256) -data8 0x3FE541B5CB979809 //log(1/frcpa(1+ 241/256) -data8 0x3FE55144FDBCBD62 //log(1/frcpa(1+ 242/256) -data8 0x3FE560DBC45153C7 //log(1/frcpa(1+ 243/256) -data8 0x3FE5707A26BB8C66 //log(1/frcpa(1+ 244/256) -data8 0x3FE587F60ED5B900 //log(1/frcpa(1+ 245/256) -data8 0x3FE597A7977C8F31 //log(1/frcpa(1+ 246/256) -data8 0x3FE5A760D634BB8B //log(1/frcpa(1+ 247/256) -data8 0x3FE5B721D295F10F //log(1/frcpa(1+ 248/256) -data8 0x3FE5C6EA94431EF9 //log(1/frcpa(1+ 249/256) -data8 0x3FE5D6BB22EA86F6 //log(1/frcpa(1+ 250/256) -data8 0x3FE5E6938645D390 //log(1/frcpa(1+ 251/256) -data8 0x3FE5F673C61A2ED2 //log(1/frcpa(1+ 252/256) -data8 0x3FE6065BEA385926 //log(1/frcpa(1+ 253/256) -data8 0x3FE6164BFA7CC06B //log(1/frcpa(1+ 254/256) -data8 0x3FE62643FECF9743 //log(1/frcpa(1+ 255/256) -LOCAL_OBJECT_END(log_table_3) - - -.section .text -GLOBAL_LIBM_ENTRY(asinhf) - -{ .mfi - getf.exp asinh_GR_f8 = f8 // Must recompute later if x unorm - fclass.m p12,p0 = f8, 0x0b // Test x unorm - mov log_GR_exp_17_ones = 0x1ffff -} -{ .mfi - addl NR_table_address = @ltoff(log_table_1), gp - fma.s1 log_y = f8, f8, f1 // y = x^2 + 1 - mov asinh_GR_comp = 0xfffa -} -;; - -{ .mfi - mov log_GR_exp_16_ones = 0xffff //BIAS - fclass.m p6,p0 = f8, 0xe7 // Test for x = NaN and inf and zero - mov log_GR_comp2 = 0x10032 -} -{ .mfi - ld8 NR_table_address = [NR_table_address] - fma.s1 asinh_w_sq = f8,f8,f0 // x^2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.lt.s1 p7,p11 = f8,f0 // if x<0 - nop.i 0 -} -{ .mfb - nop.m 0 - fnorm.s1 fNormX = f8 // Normalize x -(p12) br.cond.spnt ASINH_UNORM // Branch if x=unorm -} -;; - -ASINH_COMMON: -// Return here if x=unorm and not denorm -{ .mfi - //to get second table address - adds log_table_address2 = 0x20, NR_table_address - fma.s1 log_arg = f8,f1,f8 -} -{ .mfb - nop.m 0 -(p6) fma.s.s0 f8 = f8,f1,f8 // quietize nan result if x=nan -(p6) br.ret.spnt b0 // Exit for x=nan and inf and zero -} -;; - -{ .mfi - ldfpd NR1,NR2 = [log_table_address2],16 - frsqrta.s1 log_y_rs,p0 = log_y // z=1/sqrt(y) - nop.i 0 -} -;; - -{ .mfi - ldfe log_C1 = [log_table_address2],16 - nop.f 0 - and asinh_GR_f8 = asinh_GR_f8,log_GR_exp_17_ones -} -;; - -{ .mib - ldfe log_C0 = [log_table_address2],16 - cmp.le p13,p0 = log_GR_comp2,asinh_GR_f8 -(p13) br.cond.spnt LOG_COMMON1 // Branch if path 4: |x| >= 2^51 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter = log_y_rs,log_y,f0 // y*z - nop.i 0 -} -;; - -.pred.rel "mutex",p7,p11 -{ .mfi - nop.m 0 -(p11) mov asinh_f8 = fNormX - nop.i 0 -} -{ .mfb - cmp.gt p8,p0 = asinh_GR_comp,asinh_GR_f8 -(p7) fnma.s1 asinh_f8 = fNormX,f1,f0 -(p8) br.cond.spnt ASINH_NEAR_ZERO // Branch if path 2: 0 < |x| < 2^-5 -} -;; - -// Here if main path, 2^-5 <= |x| < 2^51 -///////////////////////////////// The first iteration ///////////////////////// -{ .mfi - ldfpd log_P3,log_P2 = [NR_table_address],16 - fnma.s1 log_y_rs_iter2 = log_y_rs_iter,log_y_rs,NR2 // 3-(y*z)*z - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter1 = log_y_rs,NR1,f0 // 0.5*z - nop.i 0 -} -;; - -{ .mfi - ldfpd log_P1,log2 = [NR_table_address],16 - // (0.5*z)*(3-(y*z)*z) - fma.s1 log_y_rs_iter = log_y_rs_iter1,log_y_rs_iter2,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - // (0.5*z)*(3-(y*z)*z) - fma.s1 log_arg_early = log_y_rs_iter1,log_y_rs_iter2,f0 - nop.i 0 -} -;; - -////////////////////////////////// The second iteration //////////////////////// -{ .mfi - nop.m 0 - fma.s1 log_y_rs = log_y_rs_iter,log_y,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter1 = log_y_rs_iter,NR1,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_arg_early = log_arg_early,log_y,asinh_f8 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 log_y_rs = log_y_rs,log_y_rs_iter,NR2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_y_rs_iter1 = log_y_rs_iter1,log_y,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - frcpa.s1 log_C,p0 = f1,log_arg_early - nop.i 0 -} -;; - -{ .mfi - getf.exp log_GR_signexp_f8 = log_arg_early - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - getf.sig log_GR_significand_f8 = log_arg_early - // (0.5*z)*(3-(y*z)*z)*y + |x| - fma.s1 log_arg = log_y_rs_iter1,log_y_rs,asinh_f8 - //to get third table address - adds log_table_address3 = 0x30, NR_table_address -} -;; - -/////////////////////////////////////////// The end NR iterations ///////////// - -{ .mfi - nop.m 0 - nop.f 0 - //significant bit destruction - and log_GR_exp_f8 = log_GR_signexp_f8, log_GR_exp_17_ones -} -;; - -{ .mfi - //BIAS subtraction - sub log_GR_true_exp_f8 = log_GR_exp_f8, log_GR_exp_16_ones -(p7) fnma.s1 log2 = log2,f1,f0 - nop.i 0 -} -;; - -{ .mfi - setf.sig log_int_Nfloat = log_GR_true_exp_f8 - fms.s1 log_r = log_C,log_arg,f1 //C = frcpa(x); r = C * x - 1 - extr.u log_GR_index = log_GR_significand_f8,55,8 //Extract 8 bits -} -;; - -{ .mmi - //pre-index*16 + index - shladd log_table_address3 = log_GR_index,3,log_table_address3 -;; - ldfd log_T = [log_table_address3] - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rsq = log_r, log_r, f0 //r^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_rp_p32 = log_P3, log_r, log_P2 //P3*r + P2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rp_p10 = log_P1, log_r, f1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //convert N to the floating-point format - fcvt.xf log_Nfloat = log_int_Nfloat - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rp_p2 = log_rp_p32, log_rsq, log_rp_p10 - nop.i 0 -} -;; - -.pred.rel "mutex",p7,p11 -{ .mfi - nop.m 0 -(p11) fma.s1 log_T_plus_Nlog2 = log_Nfloat,log2,log_T //N*log2 + T if x>0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fms.s1 log_T_plus_Nlog2 = log_Nfloat,log2,log_T //N*log2 - T if x<0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p11) fma.s.s0 f8 = log_rp_p2,log_r,log_T_plus_Nlog2 - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fnma.s.s0 f8 = log_rp_p2,log_r,log_T_plus_Nlog2 - br.ret.sptk b0 // Exit main path, path 3: 2^-5 <= |x| < 2^51 -} -;; - - -// Here if path 4, |x| >= 2^51 -LOG_COMMON1: -{ .mfi - ldfpd log_P3,log_P2 = [NR_table_address],16 - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - ldfpd log_P1,log2 = [NR_table_address],16 - frcpa.s1 log_C,p0 = f1,log_arg - nop.i 0 -} -;; - -{ .mfi - getf.exp log_GR_signexp_f8 = log_arg - nop.f 0 - //to get third table address - adds log_table_address3 = 0x30, NR_table_address -} -;; - -{ .mfi - getf.sig log_GR_significand_f8 = log_arg - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - nop.f 0 - //to destroy the most bit in the significant area - and log_GR_exp_f8 = log_GR_signexp_f8, log_GR_exp_17_ones -} -;; - -{ .mmf - nop.m 0 - //BIAS subtraction - sub log_GR_true_exp_f8 = log_GR_exp_f8, log_GR_exp_16_ones - fms.s1 log_r = log_C,log_arg,f1 //C = frcpa(x); r = C * x - 1 -} -;; - -{ .mfi - setf.sig log_int_Nfloat = log_GR_true_exp_f8 - nop.f 0 - extr.u log_GR_index = log_GR_significand_f8,55,8 //Extract 8 bits -} -;; - -{ .mmi - //pre-index*16 + index - shladd log_table_address3 = log_GR_index,3,log_table_address3 -;; - ldfd log_T = [log_table_address3] - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rsq = log_r, log_r, f0 //r^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_rp_p32 = log_P3, log_r, log_P2 //P3*r + P2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 log_rp_p10 = log_P1, log_r, f1 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fnma.s1 log2 = log2,f1,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - //convert N to the floating-point format - fcvt.xf log_Nfloat = log_int_Nfloat - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 log_rp_p2 = log_rp_p32, log_rsq, log_rp_p10 - nop.i 0 -} -;; - -.pred.rel "mutex",p7,p11 -{ .mfi - nop.m 0 -(p11) fma.s1 log_T_plus_Nlog2 = log_Nfloat,log2,log_T //N*log2 + T if x>0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fms.s1 log_T_plus_Nlog2 = log_Nfloat,log2,log_T //N*log2 - T if x<0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p11) fma.s.s0 f8 = log_rp_p2,log_r,log_T_plus_Nlog2 - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fnma.s.s0 f8 = log_rp_p2,log_r,log_T_plus_Nlog2 - br.ret.sptk b0 // Exit path 4, |x| >= 2^51 -} -;; - -// Here if path 2, 0 < |x| < 2^-5 -ASINH_NEAR_ZERO: -{ .mfi - nop.m 0 - fma.s1 asinh_w_1 = asinh_w_sq,log_C1,log_C0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 asinh_w_cube = asinh_w_sq,fNormX,f0 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fma.s.s0 f8 = asinh_w_1,asinh_w_cube,fNormX - br.ret.sptk b0 // Exit path 2, 0 < |x| < 2^-5 -} -;; - -ASINH_UNORM: -// Here if x=unorm -{ .mfi - getf.exp asinh_GR_f8 = fNormX // Recompute if x unorm - fclass.m p0,p13 = fNormX, 0x0b // Test x denorm - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fcmp.eq.s0 p14,p0 = f8, f0 // Dummy to set denormal flag -(p13) br.cond.sptk ASINH_COMMON // Continue if x unorm and not denorm -} -;; - -.pred.rel "mutex",p7,p11 -{ .mfi - nop.m 0 -(p7) fma.s.s0 f8 = f8,f8,f8 // Result x+x^2 if x=-denorm - nop.i 0 -} -{ .mfb - nop.m 0 -(p11) fnma.s.s0 f8 = f8,f8,f8 // Result x-x^2 if x=+denorm - br.ret.spnt b0 // Exit if denorm -} -;; - -GLOBAL_LIBM_END(asinhf) diff --git a/sysdeps/ia64/fpu/s_asinhl.S b/sysdeps/ia64/fpu/s_asinhl.S deleted file mode 100644 index 5b8e73b4dc..0000000000 --- a/sysdeps/ia64/fpu/s_asinhl.S +++ /dev/null @@ -1,1344 +0,0 @@ -.file "asinhl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 09/04/01 Initial version -// 09/13/01 Performance improved, symmetry problems fixed -// 10/10/01 Performance improved, split issues removed -// 12/11/01 Changed huges_logp to not be global -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align; -// used data8 for long double table values -// -//********************************************************************* -// -// API -//============================================================== -// long double asinhl(long double); -// -// Overview of operation -//============================================================== -// -// There are 6 paths: -// 1. x = 0, [S,Q]Nan or +/-INF -// Return asinhl(x) = x + x; -// -// 2. x = + denormal -// Return asinhl(x) = x - x^2; -// -// 3. x = - denormal -// Return asinhl(x) = x + x^2; -// -// 4. 'Near 0': max denormal < |x| < 1/128 -// Return asinhl(x) = sign(x)*(x+x^3*(c3+x^2*(c5+x^2*(c7+x^2*(c9))))); -// -// 5. 'Huges': |x| > 2^63 -// Return asinhl(x) = sign(x)*(logl(2*x)); -// -// 6. 'Main path': 1/128 < |x| < 2^63 -// b_hi + b_lo = x + sqrt(x^2 + 1); -// asinhl(x) = sign(x)*(log_special(b_hi, b_lo)); -// -// Algorithm description -//============================================================== -// -// Main path algorithm -// ( thanks to Peter Markstein for the idea of sqrt(x^2+1) computation! ) -// ************************************************************************* -// -// There are 3 parts of x+sqrt(x^2+1) computation: -// -// 1) p2 = (p2_hi+p2_lo) = x^2+1 obtaining -// ------------------------------------ -// p2_hi = x2_hi + 1, where x2_hi = x * x; -// p2_lo = x2_lo + p1_lo, where -// x2_lo = FMS(x*x-x2_hi), -// p1_lo = (1 - p2_hi) + x2_hi; -// -// 2) g = (g_hi+g_lo) = sqrt(p2) = sqrt(p2_hi+p2_lo) -// ---------------------------------------------- -// r = invsqrt(p2_hi) (8-bit reciprocal square root approximation); -// g = p2_hi * r (first 8 bit-approximation of sqrt); -// -// h = 0.5 * r; -// e = 0.5 - g * h; -// g = g * e + g (second 16 bit-approximation of sqrt); -// -// h = h * e + h; -// e = 0.5 - g * h; -// g = g * e + g (third 32 bit-approximation of sqrt); -// -// h = h * e + h; -// e = 0.5 - g * h; -// g_hi = g * e + g (fourth 64 bit-approximation of sqrt); -// -// Remainder computation: -// h = h * e + h; -// d = (p2_hi - g_hi * g_hi) + p2_lo; -// g_lo = d * h; -// -// 3) b = (b_hi + b_lo) = x + g, where g = (g_hi + g_lo) = sqrt(x^2+1) -// ------------------------------------------------------------------- -// b_hi = (g_hi + x) + gl; -// b_lo = (g_hi - b_hi) + x + gl; -// -// Now we pass b presented as sum b_hi + b_lo to special version -// of logl function which accept a pair of arguments as -// 'mutiprecision' value. -// -// Special log algorithm overview -// ================================ -// Here we use a table lookup method. The basic idea is that in -// order to compute logl(Arg) = logl (Arg-1) for an argument Arg in [1,2), -// we construct a value G such that G*Arg is close to 1 and that -// logl(1/G) is obtainable easily from a table of values calculated -// beforehand. Thus -// -// logl(Arg) = logl(1/G) + logl((G*Arg - 1)) -// -// Because |G*Arg - 1| is small, the second term on the right hand -// side can be approximated by a short polynomial. We elaborate -// this method in four steps. -// -// Step 0: Initialization -// -// We need to calculate logl( X ). Obtain N, S_hi such that -// -// X = 2^N * ( S_hi + S_lo ) exactly -// -// where S_hi in [1,2) and S_lo is a correction to S_hi in the sense -// that |S_lo| <= ulp(S_hi). -// -// For the special version of logl: S_lo = b_lo -// !-----------------------------------------------! -// -// Step 1: Argument Reduction -// -// Based on S_hi, obtain G_1, G_2, G_3 from a table and calculate -// -// G := G_1 * G_2 * G_3 -// r := (G * S_hi - 1) + G * S_lo -// -// These G_j's have the property that the product is exactly -// representable and that |r| < 2^(-12) as a result. -// -// Step 2: Approximation -// -// logl(1 + r) is approximated by a short polynomial poly(r). -// -// Step 3: Reconstruction -// -// Finally, -// -// logl( X ) = logl( 2^N * (S_hi + S_lo) ) -// ~=~ N*logl(2) + logl(1/G) + logl(1 + r) -// ~=~ N*logl(2) + logl(1/G) + poly(r). -// -// For detailed description see logl or log1pl function, regular path. -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f32 -> f101 (70 registers) - -// General registers used: -// r32 -> r57 (26 registers) - -// Predicate registers used: -// p6 -> p11 -// p6 for '0, NaNs, Inf' path -// p7 for '+ denormals' path -// p8 for 'near 0' path -// p9 for 'huges' path -// p10 for '- denormals' path -// p11 for negative values -// -// Data tables -//============================================================== - -RODATA -.align 64 - -// C7, C9 'near 0' polynomial coefficients -LOCAL_OBJECT_START(Poly_C_near_0_79) -data8 0xF8DC939BBEDD5A54, 0x00003FF9 -data8 0xB6DB6DAB21565AC5, 0x0000BFFA -LOCAL_OBJECT_END(Poly_C_near_0_79) - -// C3, C5 'near 0' polynomial coefficients -LOCAL_OBJECT_START(Poly_C_near_0_35) -data8 0x999999999991D582, 0x00003FFB -data8 0xAAAAAAAAAAAAAAA9, 0x0000BFFC -LOCAL_OBJECT_END(Poly_C_near_0_35) - -// Q coeffs -LOCAL_OBJECT_START(Constants_Q) -data4 0x00000000,0xB1721800,0x00003FFE,0x00000000 -data4 0x4361C4C6,0x82E30865,0x0000BFE2,0x00000000 -data4 0x328833CB,0xCCCCCAF2,0x00003FFC,0x00000000 -data4 0xA9D4BAFB,0x80000077,0x0000BFFD,0x00000000 -data4 0xAAABE3D2,0xAAAAAAAA,0x00003FFD,0x00000000 -data4 0xFFFFDAB7,0xFFFFFFFF,0x0000BFFD,0x00000000 -LOCAL_OBJECT_END(Constants_Q) - -// Z1 - 16 bit fixed -LOCAL_OBJECT_START(Constants_Z_1) -data4 0x00008000 -data4 0x00007879 -data4 0x000071C8 -data4 0x00006BCB -data4 0x00006667 -data4 0x00006187 -data4 0x00005D18 -data4 0x0000590C -data4 0x00005556 -data4 0x000051EC -data4 0x00004EC5 -data4 0x00004BDB -data4 0x00004925 -data4 0x0000469F -data4 0x00004445 -data4 0x00004211 -LOCAL_OBJECT_END(Constants_Z_1) - -// G1 and H1 - IEEE single and h1 - IEEE double -LOCAL_OBJECT_START(Constants_G_H_h1) -data4 0x3F800000,0x00000000 -data8 0x0000000000000000 -data4 0x3F70F0F0,0x3D785196 -data8 0x3DA163A6617D741C -data4 0x3F638E38,0x3DF13843 -data8 0x3E2C55E6CBD3D5BB -data4 0x3F579430,0x3E2FF9A0 -data8 0xBE3EB0BFD86EA5E7 -data4 0x3F4CCCC8,0x3E647FD6 -data8 0x3E2E6A8C86B12760 -data4 0x3F430C30,0x3E8B3AE7 -data8 0x3E47574C5C0739BA -data4 0x3F3A2E88,0x3EA30C68 -data8 0x3E20E30F13E8AF2F -data4 0x3F321640,0x3EB9CEC8 -data8 0xBE42885BF2C630BD -data4 0x3F2AAAA8,0x3ECF9927 -data8 0x3E497F3497E577C6 -data4 0x3F23D708,0x3EE47FC5 -data8 0x3E3E6A6EA6B0A5AB -data4 0x3F1D89D8,0x3EF8947D -data8 0xBDF43E3CD328D9BE -data4 0x3F17B420,0x3F05F3A1 -data8 0x3E4094C30ADB090A -data4 0x3F124920,0x3F0F4303 -data8 0xBE28FBB2FC1FE510 -data4 0x3F0D3DC8,0x3F183EBF -data8 0x3E3A789510FDE3FA -data4 0x3F088888,0x3F20EC80 -data8 0x3E508CE57CC8C98F -data4 0x3F042108,0x3F29516A -data8 0xBE534874A223106C -LOCAL_OBJECT_END(Constants_G_H_h1) - -// Z2 - 16 bit fixed -LOCAL_OBJECT_START(Constants_Z_2) -data4 0x00008000 -data4 0x00007F81 -data4 0x00007F02 -data4 0x00007E85 -data4 0x00007E08 -data4 0x00007D8D -data4 0x00007D12 -data4 0x00007C98 -data4 0x00007C20 -data4 0x00007BA8 -data4 0x00007B31 -data4 0x00007ABB -data4 0x00007A45 -data4 0x000079D1 -data4 0x0000795D -data4 0x000078EB -LOCAL_OBJECT_END(Constants_Z_2) - -// G2 and H2 - IEEE single and h2 - IEEE double -LOCAL_OBJECT_START(Constants_G_H_h2) -data4 0x3F800000,0x00000000 -data8 0x0000000000000000 -data4 0x3F7F00F8,0x3B7F875D -data8 0x3DB5A11622C42273 -data4 0x3F7E03F8,0x3BFF015B -data8 0x3DE620CF21F86ED3 -data4 0x3F7D08E0,0x3C3EE393 -data8 0xBDAFA07E484F34ED -data4 0x3F7C0FC0,0x3C7E0586 -data8 0xBDFE07F03860BCF6 -data4 0x3F7B1880,0x3C9E75D2 -data8 0x3DEA370FA78093D6 -data4 0x3F7A2328,0x3CBDC97A -data8 0x3DFF579172A753D0 -data4 0x3F792FB0,0x3CDCFE47 -data8 0x3DFEBE6CA7EF896B -data4 0x3F783E08,0x3CFC15D0 -data8 0x3E0CF156409ECB43 -data4 0x3F774E38,0x3D0D874D -data8 0xBE0B6F97FFEF71DF -data4 0x3F766038,0x3D1CF49B -data8 0xBE0804835D59EEE8 -data4 0x3F757400,0x3D2C531D -data8 0x3E1F91E9A9192A74 -data4 0x3F748988,0x3D3BA322 -data8 0xBE139A06BF72A8CD -data4 0x3F73A0D0,0x3D4AE46F -data8 0x3E1D9202F8FBA6CF -data4 0x3F72B9D0,0x3D5A1756 -data8 0xBE1DCCC4BA796223 -data4 0x3F71D488,0x3D693B9D -data8 0xBE049391B6B7C239 -LOCAL_OBJECT_END(Constants_G_H_h2) - -// G3 and H3 - IEEE single and h3 - IEEE double -LOCAL_OBJECT_START(Constants_G_H_h3) -data4 0x3F7FFC00,0x38800100 -data8 0x3D355595562224CD -data4 0x3F7FF400,0x39400480 -data8 0x3D8200A206136FF6 -data4 0x3F7FEC00,0x39A00640 -data8 0x3DA4D68DE8DE9AF0 -data4 0x3F7FE400,0x39E00C41 -data8 0xBD8B4291B10238DC -data4 0x3F7FDC00,0x3A100A21 -data8 0xBD89CCB83B1952CA -data4 0x3F7FD400,0x3A300F22 -data8 0xBDB107071DC46826 -data4 0x3F7FCC08,0x3A4FF51C -data8 0x3DB6FCB9F43307DB -data4 0x3F7FC408,0x3A6FFC1D -data8 0xBD9B7C4762DC7872 -data4 0x3F7FBC10,0x3A87F20B -data8 0xBDC3725E3F89154A -data4 0x3F7FB410,0x3A97F68B -data8 0xBD93519D62B9D392 -data4 0x3F7FAC18,0x3AA7EB86 -data8 0x3DC184410F21BD9D -data4 0x3F7FA420,0x3AB7E101 -data8 0xBDA64B952245E0A6 -data4 0x3F7F9C20,0x3AC7E701 -data8 0x3DB4B0ECAABB34B8 -data4 0x3F7F9428,0x3AD7DD7B -data8 0x3D9923376DC40A7E -data4 0x3F7F8C30,0x3AE7D474 -data8 0x3DC6E17B4F2083D3 -data4 0x3F7F8438,0x3AF7CBED -data8 0x3DAE314B811D4394 -data4 0x3F7F7C40,0x3B03E1F3 -data8 0xBDD46F21B08F2DB1 -data4 0x3F7F7448,0x3B0BDE2F -data8 0xBDDC30A46D34522B -data4 0x3F7F6C50,0x3B13DAAA -data8 0x3DCB0070B1F473DB -data4 0x3F7F6458,0x3B1BD766 -data8 0xBDD65DDC6AD282FD -data4 0x3F7F5C68,0x3B23CC5C -data8 0xBDCDAB83F153761A -data4 0x3F7F5470,0x3B2BC997 -data8 0xBDDADA40341D0F8F -data4 0x3F7F4C78,0x3B33C711 -data8 0x3DCD1BD7EBC394E8 -data4 0x3F7F4488,0x3B3BBCC6 -data8 0xBDC3532B52E3E695 -data4 0x3F7F3C90,0x3B43BAC0 -data8 0xBDA3961EE846B3DE -data4 0x3F7F34A0,0x3B4BB0F4 -data8 0xBDDADF06785778D4 -data4 0x3F7F2CA8,0x3B53AF6D -data8 0x3DCC3ED1E55CE212 -data4 0x3F7F24B8,0x3B5BA620 -data8 0xBDBA31039E382C15 -data4 0x3F7F1CC8,0x3B639D12 -data8 0x3D635A0B5C5AF197 -data4 0x3F7F14D8,0x3B6B9444 -data8 0xBDDCCB1971D34EFC -data4 0x3F7F0CE0,0x3B7393BC -data8 0x3DC7450252CD7ADA -data4 0x3F7F04F0,0x3B7B8B6D -data8 0xBDB68F177D7F2A42 -LOCAL_OBJECT_END(Constants_G_H_h3) - -// Assembly macros -//============================================================== - -// Floating Point Registers - -FR_Arg = f8 -FR_Res = f8 -FR_AX = f32 -FR_XLog_Hi = f33 -FR_XLog_Lo = f34 - - // Special logl registers -FR_Y_hi = f35 -FR_Y_lo = f36 - -FR_Scale = f37 -FR_X_Prime = f38 -FR_S_hi = f39 -FR_W = f40 -FR_G = f41 - -FR_H = f42 -FR_wsq = f43 -FR_w4 = f44 -FR_h = f45 -FR_w6 = f46 - -FR_G2 = f47 -FR_H2 = f48 -FR_poly_lo = f49 -FR_P8 = f50 -FR_poly_hi = f51 - -FR_P7 = f52 -FR_h2 = f53 -FR_rsq = f54 -FR_P6 = f55 -FR_r = f56 - -FR_log2_hi = f57 -FR_log2_lo = f58 - -FR_float_N = f59 -FR_Q4 = f60 - -FR_G3 = f61 -FR_H3 = f62 -FR_h3 = f63 - -FR_Q3 = f64 -FR_Q2 = f65 -FR_1LN10_hi = f66 - -FR_Q1 = f67 -FR_1LN10_lo = f68 -FR_P5 = f69 -FR_rcub = f70 - -FR_Neg_One = f71 -FR_Z = f72 -FR_AA = f73 -FR_BB = f74 -FR_S_lo = f75 -FR_2_to_minus_N = f76 - - - // Huge & Main path prolog registers -FR_Half = f77 -FR_Two = f78 -FR_X2 = f79 -FR_P2 = f80 -FR_P2L = f81 -FR_Rcp = f82 -FR_GG = f83 -FR_HH = f84 -FR_EE = f85 -FR_DD = f86 -FR_GL = f87 -FR_A = f88 -FR_AL = f89 -FR_B = f90 -FR_BL = f91 -FR_Tmp = f92 - - // Near 0 & Huges path prolog registers -FR_C3 = f93 -FR_C5 = f94 -FR_C7 = f95 -FR_C9 = f96 - -FR_X3 = f97 -FR_X4 = f98 -FR_P9 = f99 -FR_P5 = f100 -FR_P3 = f101 - - -// General Purpose Registers - - // General prolog registers -GR_PFS = r32 -GR_TwoN7 = r40 -GR_TwoP63 = r41 -GR_ExpMask = r42 -GR_ArgExp = r43 -GR_Half = r44 - - // Near 0 path prolog registers -GR_Poly_C_35 = r45 -GR_Poly_C_79 = r46 - - // Special logl registers -GR_Index1 = r34 -GR_Index2 = r35 -GR_signif = r36 -GR_X_0 = r37 -GR_X_1 = r38 -GR_X_2 = r39 -GR_Z_1 = r40 -GR_Z_2 = r41 -GR_N = r42 -GR_Bias = r43 -GR_M = r44 -GR_Index3 = r45 -GR_exp_2tom80 = r45 -GR_exp_mask = r47 -GR_exp_2tom7 = r48 -GR_ad_ln10 = r49 -GR_ad_tbl_1 = r50 -GR_ad_tbl_2 = r51 -GR_ad_tbl_3 = r52 -GR_ad_q = r53 -GR_ad_z_1 = r54 -GR_ad_z_2 = r55 -GR_ad_z_3 = r56 -GR_minus_N = r57 - - - -.section .text -GLOBAL_LIBM_ENTRY(asinhl) - -{ .mfi - alloc GR_PFS = ar.pfs,0,27,0,0 - fma.s1 FR_P2 = FR_Arg, FR_Arg, f1 // p2 = x^2 + 1 - mov GR_Half = 0xfffe // 0.5's exp -} -{ .mfi - addl GR_Poly_C_79 = @ltoff(Poly_C_near_0_79), gp // C7, C9 coeffs - fma.s1 FR_X2 = FR_Arg, FR_Arg, f0 // Obtain x^2 - addl GR_Poly_C_35 = @ltoff(Poly_C_near_0_35), gp // C3, C5 coeffs -};; - -{ .mfi - getf.exp GR_ArgExp = FR_Arg // get arument's exponent - fabs FR_AX = FR_Arg // absolute value of argument - mov GR_TwoN7 = 0xfff8 // 2^-7 exp -} -{ .mfi - ld8 GR_Poly_C_79 = [GR_Poly_C_79] // get actual coeff table address - fma.s0 FR_Two = f1, f1, f1 // construct 2.0 - mov GR_ExpMask = 0x1ffff // mask for exp -};; - -{ .mfi - ld8 GR_Poly_C_35 = [GR_Poly_C_35] // get actual coeff table address - fclass.m p6,p0 = FR_Arg, 0xe7 // if arg NaN inf zero - mov GR_TwoP63 = 0x1003e // 2^63 exp -} -{ .mfi - addl GR_ad_z_1 = @ltoff(Constants_Z_1#),gp - nop.f 0 - nop.i 0 -};; - -{ .mfi - setf.exp FR_Half = GR_Half // construct 0.5 - fclass.m p7,p0 = FR_Arg, 0x09 // if arg + denorm - and GR_ArgExp = GR_ExpMask, GR_ArgExp // select exp -} -{ .mfb - ld8 GR_ad_z_1 = [GR_ad_z_1] // Get pointer to Constants_Z_1 - nop.f 0 - nop.b 0 -};; -{ .mfi - ldfe FR_C9 = [GR_Poly_C_79],16 // load C9 - fclass.m p10,p0 = FR_Arg, 0x0a // if arg - denorm - cmp.gt p8, p0 = GR_TwoN7, GR_ArgExp // if arg < 2^-7 ('near 0') -} -{ .mfb - cmp.le p9, p0 = GR_TwoP63, GR_ArgExp // if arg > 2^63 ('huges') -(p6) fma.s0 FR_Res = FR_Arg,f1,FR_Arg // r = a + a -(p6) br.ret.spnt b0 // return -};; -// (X^2 + 1) computation -{ .mfi -(p8) ldfe FR_C5 = [GR_Poly_C_35],16 // load C5 - fms.s1 FR_Tmp = f1, f1, FR_P2 // Tmp = 1 - p2 - add GR_ad_tbl_1 = 0x040, GR_ad_z_1 // Point to Constants_G_H_h1 -} -{ .mfb -(p8) ldfe FR_C7 = [GR_Poly_C_79],16 // load C7 -(p7) fnma.s0 FR_Res = FR_Arg,FR_Arg,FR_Arg // r = a - a*a -(p7) br.ret.spnt b0 // return -};; - -{ .mfi -(p8) ldfe FR_C3 = [GR_Poly_C_35],16 // load C3 - fcmp.lt.s1 p11, p12 = FR_Arg, f0 // if arg is negative - add GR_ad_q = -0x60, GR_ad_z_1 // Point to Constants_P -} -{ .mfb - add GR_ad_z_2 = 0x140, GR_ad_z_1 // Point to Constants_Z_2 -(p10) fma.s0 FR_Res = FR_Arg,FR_Arg,FR_Arg // r = a + a*a -(p10) br.ret.spnt b0 // return -};; - -{ .mfi - add GR_ad_tbl_2 = 0x180, GR_ad_z_1 // Point to Constants_G_H_h2 - frsqrta.s1 FR_Rcp, p0 = FR_P2 // Rcp = 1/p2 reciprocal appr. - add GR_ad_tbl_3 = 0x280, GR_ad_z_1 // Point to Constants_G_H_h3 -} -{ .mfi - nop.m 0 - fms.s1 FR_P2L = FR_AX, FR_AX, FR_X2 //low part of p2=fma(X*X-p2) - mov GR_Bias = 0x0FFFF // Create exponent bias -};; - -{ .mfb - nop.m 0 -(p9) fms.s1 FR_XLog_Hi = FR_Two, FR_AX, f0 // Hi of log1p arg = 2*X - 1 -(p9) br.cond.spnt huges_logl // special version of log1p -};; - -{ .mfb - ldfe FR_log2_hi = [GR_ad_q],16 // Load log2_hi -(p8) fma.s1 FR_X3 = FR_X2, FR_Arg, f0 // x^3 = x^2 * x -(p8) br.cond.spnt near_0 // Go to near 0 branch -};; - -{ .mfi - ldfe FR_log2_lo = [GR_ad_q],16 // Load log2_lo - nop.f 0 - nop.i 0 -};; - -{ .mfi - ldfe FR_Q4 = [GR_ad_q],16 // Load Q4 - fma.s1 FR_Tmp = FR_Tmp, f1, FR_X2 // Tmp = Tmp + x^2 - mov GR_exp_mask = 0x1FFFF // Create exponent mask -};; - -{ .mfi - ldfe FR_Q3 = [GR_ad_q],16 // Load Q3 - fma.s1 FR_GG = FR_Rcp, FR_P2, f0 // g = Rcp * p2 - // 8 bit Newton Raphson iteration - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_HH = FR_Half, FR_Rcp, f0 // h = 0.5 * Rcp - nop.i 0 -};; -{ .mfi - ldfe FR_Q2 = [GR_ad_q],16 // Load Q2 - fnma.s1 FR_EE = FR_GG, FR_HH, FR_Half // e = 0.5 - g * h - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P2L = FR_Tmp, f1, FR_P2L // low part of p2 = Tmp + p2l - nop.i 0 -};; - -{ .mfi - ldfe FR_Q1 = [GR_ad_q] // Load Q1 - fma.s1 FR_GG = FR_GG, FR_EE, FR_GG // g = g * e + g - // 16 bit Newton Raphson iteration - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_HH = FR_HH, FR_EE, FR_HH // h = h * e + h - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_EE = FR_GG, FR_HH, FR_Half // e = 0.5 - g * h - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_GG = FR_GG, FR_EE, FR_GG // g = g * e + g - // 32 bit Newton Raphson iteration - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_HH = FR_HH, FR_EE, FR_HH // h = h * e + h - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_EE = FR_GG, FR_HH, FR_Half // e = 0.5 - g * h - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_GG = FR_GG, FR_EE, FR_GG // g = g * e + g - // 64 bit Newton Raphson iteration - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_HH = FR_HH, FR_EE, FR_HH // h = h * e + h - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_DD = FR_GG, FR_GG, FR_P2 // Remainder d = g * g - p2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_XLog_Hi = FR_AX, f1, FR_GG // bh = z + gh - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_DD = FR_DD, f1, FR_P2L // add p2l: d = d + p2l - nop.i 0 -};; - - -{ .mfi - getf.sig GR_signif = FR_XLog_Hi // Get significand of x+1 - fmerge.ns FR_Neg_One = f1, f1 // Form -1.0 - mov GR_exp_2tom7 = 0x0fff8 // Exponent of 2^-7 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_GL = FR_DD, FR_HH, f0 // gl = d * h - extr.u GR_Index1 = GR_signif, 59, 4 // Get high 4 bits of signif -} -{ .mfi - nop.m 0 - fma.s1 FR_XLog_Hi = FR_DD, FR_HH, FR_XLog_Hi // bh = bh + gl - nop.i 0 -};; - -{ .mmi - shladd GR_ad_z_1 = GR_Index1, 2, GR_ad_z_1 // Point to Z_1 - shladd GR_ad_tbl_1 = GR_Index1, 4, GR_ad_tbl_1 // Point to G_1 - extr.u GR_X_0 = GR_signif, 49, 15 // Get high 15 bits of signif. -};; - -{ .mmi - ld4 GR_Z_1 = [GR_ad_z_1] // Load Z_1 - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfps FR_G, FR_H = [GR_ad_tbl_1],8 // Load G_1, H_1 - nop.m 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_XLog_Lo = FR_GG, f1, FR_XLog_Hi // bl = gh - bh - pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 // Get bits 30-15 of X_0 * Z_1 -};; - -// WE CANNOT USE GR_X_1 IN NEXT 3 CYCLES BECAUSE OF POSSIBLE 10 CLOCKS STALL! -// "DEAD" ZONE! - -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fmerge.se FR_S_hi = f1,FR_XLog_Hi // Form |x+1| - nop.i 0 -};; - -{ .mmi - getf.exp GR_N = FR_XLog_Hi // Get N = exponent of x+1 - ldfd FR_h = [GR_ad_tbl_1] // Load h_1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - nop.f 0 - extr.u GR_Index2 = GR_X_1, 6, 4 // Extract bits 6-9 of X_1 -};; - - -{ .mfi - shladd GR_ad_tbl_2 = GR_Index2, 4, GR_ad_tbl_2 // Point to G_2 - fma.s1 FR_XLog_Lo = FR_XLog_Lo, f1, FR_AX // bl = bl + x - mov GR_exp_2tom80 = 0x0ffaf // Exponent of 2^-80 -} -{ .mfi - shladd GR_ad_z_2 = GR_Index2, 2, GR_ad_z_2 // Point to Z_2 - nop.f 0 - sub GR_N = GR_N, GR_Bias // sub bias from exp -};; - -{ .mmi - ldfps FR_G2, FR_H2 = [GR_ad_tbl_2],8 // Load G_2, H_2 - ld4 GR_Z_2 = [GR_ad_z_2] // Load Z_2 - sub GR_minus_N = GR_Bias, GR_N // Form exponent of 2^(-N) -};; - -{ .mmi - ldfd FR_h2 = [GR_ad_tbl_2] // Load h_2 - nop.m 0 - nop.i 0 -};; - -{ .mmi - setf.sig FR_float_N = GR_N // Put integer N into rightmost sign - setf.exp FR_2_to_minus_N = GR_minus_N // Form 2^(-N) - pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 // Get bits 30-15 of X_1 * Z_2 -};; - -// WE CANNOT USE GR_X_2 IN NEXT 3 CYCLES ("DEAD" ZONE!) -// BECAUSE OF POSSIBLE 10 CLOCKS STALL! -// So we can negate Q coefficients there for negative values - -{ .mfi - nop.m 0 -(p11) fma.s1 FR_Q1 = FR_Q1, FR_Neg_One, f0 // Negate Q1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_XLog_Lo = FR_XLog_Lo, f1, FR_GL // bl = bl + gl - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p11) fma.s1 FR_Q2 = FR_Q2, FR_Neg_One, f0 // Negate Q2 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p11) fma.s1 FR_Q3 = FR_Q3, FR_Neg_One, f0 // Negate Q3 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p11) fma.s1 FR_Q4 = FR_Q4, FR_Neg_One, f0 // Negate Q4 - extr.u GR_Index3 = GR_X_2, 1, 5 // Extract bits 1-5 of X_2 -};; - -{ .mfi - shladd GR_ad_tbl_3 = GR_Index3, 4, GR_ad_tbl_3 // Point to G_3 - nop.f 0 - nop.i 0 -};; - -{ .mfi - ldfps FR_G3, FR_H3 = [GR_ad_tbl_3],8 // Load G_3, H_3 - nop.f 0 - nop.i 0 -};; - -{ .mfi - ldfd FR_h3 = [GR_ad_tbl_3] // Load h_3 - fcvt.xf FR_float_N = FR_float_N - nop.i 0 -};; - -{ .mfi - nop.m 0 - fmpy.s1 FR_G = FR_G, FR_G2 // G = G_1 * G_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H, FR_H2 // H = H_1 + H_2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fadd.s1 FR_h = FR_h, FR_h2 // h = h_1 + h_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S_lo = FR_XLog_Lo, FR_2_to_minus_N, f0 //S_lo=S_lo*2^-N - nop.i 0 -};; - -{ .mfi - nop.m 0 - fmpy.s1 FR_G = FR_G, FR_G3 // G = (G_1 * G_2) * G_3 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H, FR_H3 // H = (H_1 + H_2) + H_3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fadd.s1 FR_h = FR_h, FR_h3 // h = (h_1 + h_2) + h_3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r = FR_G, FR_S_hi, f1 // r = G * S_hi - 1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_Y_hi = FR_float_N, FR_log2_hi, FR_H // Y_hi=N*log2_hi+H - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_h = FR_float_N, FR_log2_lo, FR_h // h=N*log2_lo+h - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r = FR_G, FR_S_lo, FR_r // r=G*S_lo+(G*S_hi-1) - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 // poly_lo = r * Q4 + Q3 - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 FR_rsq = FR_r, FR_r // rsq = r * r - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 // poly_lo=poly_lo*r+Q2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_rcub = FR_rsq, FR_r, f0 // rcub = r^3 - nop.i 0 -};; - -.pred.rel "mutex",p12,p11 -{ .mfi - nop.m 0 -(p12) fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r // poly_hi = Q1*rsq + r - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fms.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r // poly_hi = Q1*rsq + r - nop.i 0 -};; - - -.pred.rel "mutex",p12,p11 -{ .mfi - nop.m 0 -(p12) fma.s1 FR_poly_lo = FR_poly_lo, FR_rcub, FR_h//poly_lo=poly_lo*r^3+h - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fms.s1 FR_poly_lo = FR_poly_lo, FR_rcub, FR_h//poly_lo=poly_lo*r^3+h - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fadd.s0 FR_Y_lo = FR_poly_hi, FR_poly_lo - // Y_lo=poly_hi+poly_lo - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fma.s0 FR_Y_hi = FR_Y_hi, FR_Neg_One, f0 // FR_Y_hi sign for neg - nop.i 0 -};; - -{ .mfb - nop.m 0 - fadd.s0 FR_Res = FR_Y_lo,FR_Y_hi // Result=Y_lo+Y_hi - br.ret.sptk b0 // Common exit for 2^-7 < x < inf -};; - -// * SPECIAL VERSION OF LOGL FOR HUGE ARGUMENTS * - -huges_logl: -{ .mfi - getf.sig GR_signif = FR_XLog_Hi // Get significand of x+1 - fmerge.ns FR_Neg_One = f1, f1 // Form -1.0 - mov GR_exp_2tom7 = 0x0fff8 // Exponent of 2^-7 -};; - -{ .mfi - add GR_ad_tbl_1 = 0x040, GR_ad_z_1 // Point to Constants_G_H_h1 - nop.f 0 - add GR_ad_q = -0x60, GR_ad_z_1 // Point to Constants_P -} -{ .mfi - add GR_ad_z_2 = 0x140, GR_ad_z_1 // Point to Constants_Z_2 - nop.f 0 - add GR_ad_tbl_2 = 0x180, GR_ad_z_1 // Point to Constants_G_H_h2 -};; - -{ .mfi - nop.m 0 - nop.f 0 - extr.u GR_Index1 = GR_signif, 59, 4 // Get high 4 bits of signif -} -{ .mfi - add GR_ad_tbl_3 = 0x280, GR_ad_z_1 // Point to Constants_G_H_h3 - nop.f 0 - nop.i 0 -};; - -{ .mfi - shladd GR_ad_z_1 = GR_Index1, 2, GR_ad_z_1 // Point to Z_1 - nop.f 0 - extr.u GR_X_0 = GR_signif, 49, 15 // Get high 15 bits of signif. -};; - -{ .mfi - ld4 GR_Z_1 = [GR_ad_z_1] // Load Z_1 - nop.f 0 - mov GR_exp_mask = 0x1FFFF // Create exponent mask -} -{ .mfi - shladd GR_ad_tbl_1 = GR_Index1, 4, GR_ad_tbl_1 // Point to G_1 - nop.f 0 - mov GR_Bias = 0x0FFFF // Create exponent bias -};; - -{ .mfi - ldfps FR_G, FR_H = [GR_ad_tbl_1],8 // Load G_1, H_1 - fmerge.se FR_S_hi = f1,FR_XLog_Hi // Form |x+1| - nop.i 0 -};; - -{ .mmi - getf.exp GR_N = FR_XLog_Hi // Get N = exponent of x+1 - ldfd FR_h = [GR_ad_tbl_1] // Load h_1 - nop.i 0 -};; - -{ .mfi - ldfe FR_log2_hi = [GR_ad_q],16 // Load log2_hi - nop.f 0 - pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 // Get bits 30-15 of X_0 * Z_1 -};; - -// WE CANNOT USE GR_X_1 IN NEXT 3 CYCLES BECAUSE OF POSSIBLE 10 CLOCKS STALL! -// "DEAD" ZONE! - -{ .mmi - ldfe FR_log2_lo = [GR_ad_q],16 // Load log2_lo - sub GR_N = GR_N, GR_Bias - mov GR_exp_2tom80 = 0x0ffaf // Exponent of 2^-80 -};; - -{ .mfi - ldfe FR_Q4 = [GR_ad_q],16 // Load Q4 - nop.f 0 - sub GR_minus_N = GR_Bias, GR_N // Form exponent of 2^(-N) -};; - -{ .mmf - ldfe FR_Q3 = [GR_ad_q],16 // Load Q3 - setf.sig FR_float_N = GR_N // Put integer N into rightmost sign - nop.f 0 -};; - -{ .mmi - nop.m 0 - ldfe FR_Q2 = [GR_ad_q],16 // Load Q2 - extr.u GR_Index2 = GR_X_1, 6, 4 // Extract bits 6-9 of X_1 -};; - -{ .mmi - ldfe FR_Q1 = [GR_ad_q] // Load Q1 - shladd GR_ad_z_2 = GR_Index2, 2, GR_ad_z_2 // Point to Z_2 - nop.i 0 -};; - -{ .mmi - ld4 GR_Z_2 = [GR_ad_z_2] // Load Z_2 - shladd GR_ad_tbl_2 = GR_Index2, 4, GR_ad_tbl_2 // Point to G_2 - nop.i 0 -};; - -{ .mmi - ldfps FR_G2, FR_H2 = [GR_ad_tbl_2],8 // Load G_2, H_2 - nop.m 0 - nop.i 0 -};; - -{ .mfi - ldfd FR_h2 = [GR_ad_tbl_2] // Load h_2 - nop.f 0 - nop.i 0 -} -{ .mfi - setf.exp FR_2_to_minus_N = GR_minus_N // Form 2^(-N) - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - nop.f 0 - pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 // Get bits 30-15 of X_1 * Z_2 -};; - -// WE CANNOT USE GR_X_2 IN NEXT 3 CYCLES BECAUSE OF POSSIBLE 10 CLOCKS STALL! -// "DEAD" ZONE! -// JUST HAVE TO INSERT 3 NOP CYCLES (nothing to do here) - -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p11) fma.s1 FR_Q4 = FR_Q4, FR_Neg_One, f0 // Negate Q4 - extr.u GR_Index3 = GR_X_2, 1, 5 // Extract bits 1-5 of X_2 - };; - -{ .mfi - shladd GR_ad_tbl_3 = GR_Index3, 4, GR_ad_tbl_3 // Point to G_3 - fcvt.xf FR_float_N = FR_float_N - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fma.s1 FR_Q3 = FR_Q3, FR_Neg_One, f0 // Negate Q3 - nop.i 0 -};; - -{ .mfi - ldfps FR_G3, FR_H3 = [GR_ad_tbl_3],8 // Load G_3, H_3 -(p11) fma.s1 FR_Q2 = FR_Q2, FR_Neg_One, f0 // Negate Q2 - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fma.s1 FR_Q1 = FR_Q1, FR_Neg_One, f0 // Negate Q1 - nop.i 0 -};; - -{ .mfi - ldfd FR_h3 = [GR_ad_tbl_3] // Load h_3 - fmpy.s1 FR_G = FR_G, FR_G2 // G = G_1 * G_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H, FR_H2 // H = H_1 + H_2 - nop.i 0 -};; - -{ .mmf - nop.m 0 - nop.m 0 - fadd.s1 FR_h = FR_h, FR_h2 // h = h_1 + h_2 -};; - -{ .mfi - nop.m 0 - fmpy.s1 FR_G = FR_G, FR_G3 // G = (G_1 * G_2) * G_3 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_H = FR_H, FR_H3 // H = (H_1 + H_2) + H_3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fadd.s1 FR_h = FR_h, FR_h3 // h = (h_1 + h_2) + h_3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r = FR_G, FR_S_hi, f1 // r = G * S_hi - 1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_Y_hi = FR_float_N, FR_log2_hi, FR_H // Y_hi=N*log2_hi+H - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_h = FR_float_N, FR_log2_lo, FR_h // h=N*log2_lo+h - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 // poly_lo = r * Q4 + Q3 - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 FR_rsq = FR_r, FR_r // rsq = r * r - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 // poly_lo=poly_lo*r+Q2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_rcub = FR_rsq, FR_r, f0 // rcub = r^3 - nop.i 0 -};; - -.pred.rel "mutex",p12,p11 -{ .mfi - nop.m 0 -(p12) fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r // poly_hi = Q1*rsq + r - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fms.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r // poly_hi = Q1*rsq + r - nop.i 0 -};; - - -.pred.rel "mutex",p12,p11 -{ .mfi - nop.m 0 -(p12) fma.s1 FR_poly_lo = FR_poly_lo, FR_rcub, FR_h//poly_lo=poly_lo*r^3+h - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fms.s1 FR_poly_lo = FR_poly_lo, FR_rcub, FR_h//poly_lo=poly_lo*r^3+h - nop.i 0 -};; - -{ .mfi - nop.m 0 - fadd.s0 FR_Y_lo = FR_poly_hi, FR_poly_lo // Y_lo=poly_hi+poly_lo - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fma.s0 FR_Y_hi = FR_Y_hi, FR_Neg_One, f0 // FR_Y_hi sign for neg - nop.i 0 -};; - -{ .mfb - nop.m 0 - fadd.s0 FR_Res = FR_Y_lo,FR_Y_hi // Result=Y_lo+Y_hi - br.ret.sptk b0 // Common exit for 2^-7 < x < inf -};; - -// NEAR ZERO POLYNOMIAL INTERVAL -near_0: -{ .mfi - nop.m 0 - fma.s1 FR_X4 = FR_X2, FR_X2, f0 // x^4 = x^2 * x^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_P9 = FR_C9,FR_X2,FR_C7 // p9 = C9*x^2 + C7 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P5 = FR_C5,FR_X2,FR_C3 // p5 = C5*x^2 + C3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_P3 = FR_P9,FR_X4,FR_P5 // p3 = p9*x^4 + p5 - nop.i 0 -};; - -{ .mfb - nop.m 0 - fma.s0 FR_Res = FR_P3,FR_X3,FR_Arg // res = p3*C3 + x - br.ret.sptk b0 // Near 0 path return -};; - -GLOBAL_LIBM_END(asinhl) diff --git a/sysdeps/ia64/fpu/s_atan.S b/sysdeps/ia64/fpu/s_atan.S deleted file mode 100644 index 720ecad28a..0000000000 --- a/sysdeps/ia64/fpu/s_atan.S +++ /dev/null @@ -1,753 +0,0 @@ -.file "atan.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/13/00 Improved speed -// 04/19/00 Removed the qualifying predicate from the fmerge.s that -// takes the absolute value. -// 06/16/00 Reassigned FP registers to eliminate stalls on loads -// 08/30/00 Saved 5 cycles in main path by rearranging large argument logic -// and delaying use of result of fcmp in load by 1 group -// 05/20/02 Cleaned up namespace and sf0 syntax -// 08/20/02 Use atan2 algorithm with x=1 for better accuracy -// 02/06/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// double atan(double Y) -// -// Overview of operation -//============================================================== -// -// The atan function returns values in the interval [-pi/2,+pi/2]. -// -// The algorithm used is the atan2(Y,X) algorithm where we fix X=1.0. -// -// There are two basic paths: swap true and swap false. -// atan2(Y,X) ==> atan2(V/U) where U >= V. If Y > X, we must swap. -// -// p6 swap True |Y| > |X| -// p7 swap False |Y| <= |X| -// -// -// Simple trigonometric identities show -// Region 1 -// |Y|<=1.0, V=Y, U=1.0 atan2(Y,X) = sgnY * (0 + atan(V/U)) -// -// Region 2 -// |Y|>1.0, V=1.0, U=Y atan2(Y,X) = sgnY * (pi/2 - atan(V/U)) -// -// -// We compute atan(V/U) from the identity -// atan(z) + atan([(V/U)-z] / [1+(V/U)z]) -// where z is a limited precision approximation (16 bits) to V/U -// -// z is calculated with the assistance of the frcpa instruction. -// -// atan(z) is calculated by a polynomial z + z^3 * p(w), w=z^2 -// where p(w) = P0+P1*w+...+P22*w^22 -// -// Let d = [(V/U)-z] / [1+(V/U)z]) = (V-U*z)/(U+V*z) -// -// Approximate atan(d) by d + P0*d^3 -// Let F = 1/(U+V*z) * (1-a), where |a|< 2^-8.8. -// Compute q(a) = 1 + a + ... + a^5. -// Then F*q(a) approximates the reciprocal to more than 50 bits. - -// Special values -//============================================================== -// atan(QNAN) = QNAN -// atan(SNAN) = quieted SNAN -// atan(+-inf) = +- pi/2 -// atan(+-0) = +-0 - -// Registers used -//============================================================== - -// predicate registers used: -// p6 -> p15 - -// floating-point registers used: -// f8, input -// f32 -> f116 - -// general registers used -// r14 -> r16 - -// Assembly macros -//============================================================== - -EXP_AD_P1 = r14 -EXP_AD_P2 = r15 -rsig_near_one = r16 - -atan2_Y = f8 -atan2_X = f1 - -atan2_u1_X = f32 -atan2_u1_Y = f33 -atan2_z2_X = f34 - -atan2_two = f36 -atan2_B1sq_Y = f37 -atan2_z1_X = f38 -atan2_B1X = f40 - -atan2_B1Y = f41 -atan2_wp_X = f42 -atan2_B1sq_X = f43 -atan2_z = f44 -atan2_w = f45 - -atan2_P0 = f46 -atan2_P1 = f47 -atan2_P2 = f48 -atan2_P3 = f49 -atan2_P4 = f50 - -atan2_P5 = f51 -atan2_P6 = f52 -atan2_P7 = f53 -atan2_P8 = f54 -atan2_P9 = f55 - -atan2_P10 = f56 -atan2_P11 = f57 -atan2_P12 = f58 -atan2_P13 = f59 -atan2_P14 = f60 - -atan2_P15 = f61 -atan2_P16 = f62 -atan2_P17 = f63 -atan2_P18 = f64 -atan2_P19 = f65 - -atan2_P20 = f66 -atan2_P21 = f67 -atan2_P22 = f68 -atan2_pi_by_2 = f69 -atan2_sgn_pi_by_2 = f69 -atan2_V13 = f70 - -atan2_W11 = f71 -atan2_E = f72 -atan2_wp_Y = f73 -atan2_V11 = f74 -atan2_V12 = f75 - -atan2_V7 = f76 -atan2_V8 = f77 -atan2_W7 = f78 -atan2_W8 = f79 -atan2_W3 = f80 - -atan2_W4 = f81 -atan2_V3 = f82 -atan2_V4 = f83 -atan2_F = f84 -atan2_gV = f85 - -atan2_V10 = f86 -atan2_zcub = f87 -atan2_V6 = f88 -atan2_V9 = f89 -atan2_W10 = f90 - -atan2_W6 = f91 -atan2_W2 = f92 -atan2_V2 = f93 -atan2_alpha = f94 -atan2_alpha_1 = f95 - -atan2_gVF = f96 -atan2_V5 = f97 -atan2_W12 = f98 -atan2_W5 = f99 -atan2_alpha_sq = f100 - -atan2_Cp = f101 -atan2_V1 = f102 -atan2_ysq = f103 -atan2_W1 = f104 -atan2_alpha_cub = f105 - -atan2_C = f106 -atan2_d = f108 -atan2_A_hi = f109 -atan2_dsq = f110 - -atan2_pd = f111 -atan2_A_lo = f112 -atan2_A = f113 -atan2_Pp = f114 -atan2_sgnY = f115 - -atan2_sig_near_one = f116 -atan2_near_one = f116 - -///////////////////////////////////////////////////////////// - - -RODATA - -.align 16 - -LOCAL_OBJECT_START(atan2_tb1) -data8 0xA21922DC45605EA1 , 0x00003FFA // P11 -data8 0xB199DD6D2675C40F , 0x0000BFFA // P10 -data8 0xC2F01E5DDD100DBE , 0x00003FFA // P9 -data8 0xD78F28FC2A592781 , 0x0000BFFA // P8 -data8 0xF0F03ADB3FC930D3 , 0x00003FFA // P7 -data8 0x88887EBB209E3543 , 0x0000BFFB // P6 -data8 0x9D89D7D55C3287A5 , 0x00003FFB // P5 -data8 0xBA2E8B9793955C77 , 0x0000BFFB // P4 -data8 0xE38E38E320A8A098 , 0x00003FFB // P3 -data8 0x9249249247E37913 , 0x0000BFFC // P2 -data8 0xCCCCCCCCCCC906CD , 0x00003FFC // P1 -data8 0xAAAAAAAAAAAAA8A9 , 0x0000BFFD // P0 -data8 0x0000000000000000 , 0x00000000 // pad to avoid bank conflict -LOCAL_OBJECT_END(atan2_tb1) - -LOCAL_OBJECT_START(atan2_tb2) -data8 0xCE585A259BD8374C , 0x00003FF0 // P21 -data8 0x9F90FB984D8E39D0 , 0x0000BFF3 // P20 -data8 0x9D3436AABE218776 , 0x00003FF5 // P19 -data8 0xDEC343E068A6D2A8 , 0x0000BFF6 // P18 -data8 0xF396268151CFB11C , 0x00003FF7 // P17 -data8 0xD818B4BB43D84BF2 , 0x0000BFF8 // P16 -data8 0xA2270D30A90AA220 , 0x00003FF9 // P15 -data8 0xD5F4F2182E7A8725 , 0x0000BFF9 // P14 -data8 0x80D601879218B53A , 0x00003FFA // P13 -data8 0x9297B23CCFFB291F , 0x0000BFFA // P12 -data8 0xFE7E52D2A89995B3 , 0x0000BFEC // P22 -data8 0xC90FDAA22168C235 , 0x00003FFF // pi/2 -LOCAL_OBJECT_END(atan2_tb2) - - - - -.section .text -GLOBAL_LIBM_ENTRY(atan) - -{ .mfi - nop.m 999 - frcpa.s1 atan2_u1_Y,p7 = f1,atan2_Y - nop.i 999 -} -{ .mfi - addl EXP_AD_P1 = @ltoff(atan2_tb1), gp - fma.s1 atan2_two = f1,f1,f1 - nop.i 999 -;; -} - -{ .mfi - ld8 EXP_AD_P1 = [EXP_AD_P1] - frcpa.s1 atan2_u1_X,p6 = f1,atan2_X - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_ysq = atan2_Y,atan2_Y,f0 - nop.i 999 -} -;; - -{ .mfi - add EXP_AD_P2 = 0xd0,EXP_AD_P1 - fmerge.s atan2_sgnY = atan2_Y,f1 - nop.i 999 -} -;; - - -{ .mfi - ldfe atan2_P11 = [EXP_AD_P1],16 - fclass.m p10,p0 = atan2_Y, 0xc3 // Test for y=nan - nop.i 999 -} -{ .mfi - ldfe atan2_P21 = [EXP_AD_P2],16 - nop.f 999 - nop.i 999 -;; -} - - -{ .mfi - ldfe atan2_P10 = [EXP_AD_P1],16 - fnma.s1 atan2_B1Y = atan2_u1_Y, atan2_Y, atan2_two - nop.i 999 -} -{ .mfi - ldfe atan2_P20 = [EXP_AD_P2],16 - fma.s1 atan2_wp_Y = atan2_u1_Y, atan2_u1_Y, f0 - nop.i 999 -;; -} - -{ .mfi - ldfe atan2_P9 = [EXP_AD_P1],16 - fma.s1 atan2_z1_X = atan2_u1_X, atan2_Y, f0 - nop.i 999 -} -{ .mfi - ldfe atan2_P19 = [EXP_AD_P2],16 - fnma.s1 atan2_B1X = atan2_u1_X, atan2_X, atan2_two - nop.i 999 -} -;; - -{ .mfi - ldfe atan2_P8 = [EXP_AD_P1],16 - fma.s1 atan2_z2_X = atan2_u1_X, atan2_ysq, f0 - nop.i 999 -} -{ .mfb - ldfe atan2_P18 = [EXP_AD_P2],16 -(p10) fma.d.s0 f8 = atan2_Y,atan2_X,f0 // If y=nan, result quietized y -(p10) br.ret.spnt b0 // Exit if y=nan -} -;; - -// p6 true if swap, means |y| > 1.0 or ysq > 1.0 -// p7 true if no swap, means 1.0 >= |y| or 1.0 >= ysq -{ .mfi - ldfe atan2_P7 = [EXP_AD_P1],16 - fcmp.ge.s1 p7,p6 = f1, atan2_ysq - nop.i 999 -} -{ .mmf - ldfe atan2_P17 = [EXP_AD_P2],16 - nop.m 999 - nop.f 999 -} -;; - -{ .mfi - ldfe atan2_P6 = [EXP_AD_P1],16 - fma.s1 atan2_E = atan2_u1_Y, atan2_B1Y, atan2_Y - nop.i 999 -} -{ .mfi - ldfe atan2_P16 = [EXP_AD_P2],16 - fma.s1 atan2_B1sq_Y = atan2_B1Y, atan2_B1Y, f0 - nop.i 999 -;; -} - -{ .mfi - ldfe atan2_P5 = [EXP_AD_P1],16 -(p7) fma.s1 atan2_wp_X = atan2_z1_X, atan2_z1_X, f0 - nop.i 999 -} -{ .mfi - ldfe atan2_P15 = [EXP_AD_P2],16 -(p7) fma.s1 atan2_B1sq_X = atan2_B1X, atan2_B1X, f0 - nop.i 999 -;; -} - -{ .mfi - ldfe atan2_P4 = [EXP_AD_P1],16 -(p6) fma.s1 atan2_z = atan2_u1_Y, atan2_B1Y, f0 - nop.i 999 -} -{ .mfi - ldfe atan2_P14 = [EXP_AD_P2],16 -(p7) fma.s1 atan2_E = atan2_z2_X, atan2_B1X, atan2_X - nop.i 999 -;; -} - - -{ .mfi - ldfe atan2_P3 = [EXP_AD_P1],16 - fcmp.eq.s0 p14,p15=atan2_X,atan2_Y // Dummy for denorm and invalid - nop.i 999 -} -{ .mmf - ldfe atan2_P13 = [EXP_AD_P2],16 - nop.m 999 -(p7) fma.s1 atan2_z = atan2_z1_X, atan2_B1X, f0 -;; -} - -{ .mfi - ldfe atan2_P2 = [EXP_AD_P1],16 -(p6) fma.s1 atan2_w = atan2_wp_Y, atan2_B1sq_Y,f0 - nop.i 999 -} -{ .mlx - ldfe atan2_P12 = [EXP_AD_P2],16 - movl rsig_near_one = 0x8000000000000001 // signif near 1.0 -;; -} - -{ .mfi - ldfe atan2_P1 = [EXP_AD_P1],16 - fclass.m p9,p0 = atan2_Y, 0x23 // test if y inf - nop.i 999 -} -{ .mfi - ldfe atan2_P22 = [EXP_AD_P2],16 -(p7) fma.s1 atan2_w = atan2_wp_X, atan2_B1sq_X,f0 - nop.i 999 -;; -} - -{ .mfi - ldfe atan2_P0 = [EXP_AD_P1],16 - frcpa.s1 atan2_F,p0 = f1, atan2_E - nop.i 999 -} -{ .mfi - ldfe atan2_pi_by_2 = [EXP_AD_P2],16 -(p6) fnma.s1 atan2_gV = atan2_Y, atan2_z, atan2_X - nop.i 999 -;; -} - -{ .mfi - setf.sig atan2_sig_near_one = rsig_near_one -(p7) fnma.s1 atan2_gV = atan2_X, atan2_z, atan2_Y - nop.i 999 -} -{ .mfb - nop.m 999 -(p9) fma.d.s0 f8 = atan2_sgnY, atan2_pi_by_2, f0 // +-pi/2 if y inf -(p9) br.ret.spnt b0 // exit if y inf, result is +-pi/2 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V13 = atan2_w, atan2_P11, atan2_P10 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W11 = atan2_w, atan2_P21, atan2_P20 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V11 = atan2_w, atan2_P9, atan2_P8 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_V12 = atan2_w, atan2_w, f0 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V8 = atan2_w, atan2_P7 , atan2_P6 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W8 = atan2_w, atan2_P19, atan2_P18 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fnma.s1 atan2_alpha = atan2_E, atan2_F, f1 - nop.i 999 -} -{ .mfi - nop.m 999 - fnma.s1 atan2_alpha_1 = atan2_E, atan2_F, atan2_two - nop.i 999 -;; -} - - -{ .mfi - nop.m 999 - fma.s1 atan2_V7 = atan2_w, atan2_P5 , atan2_P4 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W7 = atan2_w, atan2_P17, atan2_P16 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V4 = atan2_w, atan2_P3 , atan2_P2 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W4 = atan2_w, atan2_P15, atan2_P14 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V3 = atan2_w, atan2_P1 , atan2_P0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W3 = atan2_w, atan2_P13, atan2_P12 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V10 = atan2_V12, atan2_V13, atan2_V11 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_gVF = atan2_gV, atan2_F, f0 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_alpha_sq = atan2_alpha, atan2_alpha, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_Cp = atan2_alpha, atan2_alpha_1, f1 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V9 = atan2_V12, atan2_V12, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W10 = atan2_V12, atan2_P22 , atan2_W11 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V6 = atan2_V12, atan2_V8 , atan2_V7 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W6 = atan2_V12, atan2_W8 , atan2_W7 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V2 = atan2_V12, atan2_V4 , atan2_V3 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W2 = atan2_V12, atan2_W4 , atan2_W3 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_alpha_cub = atan2_alpha, atan2_alpha_sq, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_C = atan2_gVF, atan2_Cp, f0 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_W12 = atan2_V9, atan2_V9, f0 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_V5 = atan2_V9, atan2_V10, atan2_V6 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W5 = atan2_V9, atan2_W10, atan2_W6 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fclass.m p8,p0 = atan2_Y, 0x07 // Test for y=0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_d = atan2_alpha_cub, atan2_C, atan2_C - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 atan2_W12 = atan2_V9, atan2_W12, f0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 atan2_V1 = atan2_V9, atan2_V5, atan2_V2 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_W1 = atan2_V9, atan2_W5, atan2_W2 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 -(p8) fmerge.s f8 = atan2_sgnY, f0 // +-0 if y=0 - nop.i 999 -} -{ .mfb - nop.m 999 - fma.s1 atan2_zcub = atan2_z, atan2_w, f0 -(p8) br.ret.spnt b0 // Exit if y=0 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_pd = atan2_P0, atan2_d, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_dsq = atan2_d, atan2_d, f0 - nop.i 999 -;; -} - - -{ .mfi - nop.m 999 - fmerge.se atan2_near_one = f1, atan2_sig_near_one // Const ~1.0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_Pp = atan2_W12, atan2_W1, atan2_V1 - nop.i 999 -;; -} - -{ .mfi - nop.m 999 - fma.s1 atan2_sgn_pi_by_2 = atan2_pi_by_2, atan2_sgnY, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atan2_A_lo = atan2_pd, atan2_dsq, atan2_d - nop.i 999 -;; -} - - -{ .mfi - nop.m 999 - fma.s1 atan2_A_hi = atan2_zcub, atan2_Pp, atan2_z - nop.i 999 -;; -} - - -{ .mfi - nop.m 999 -(p6) fma.s1 atan2_A = atan2_A_hi, f1, atan2_A_lo - nop.i 999 -} -// For |Y| <= |X| and X > 0, result is A_hi + A_lo -{ .mfi - nop.m 999 -(p7) fma.d.s0 f8 = atan2_A_hi, f1, atan2_A_lo - nop.i 999 -;; -} - -// For |Y| > |X|, result is +- pi/2 - (A_hi + A_lo) -// We perturb A by multiplying by 1.0+1ulp as we produce the result -// in order to get symmetrically rounded results in directed rounding modes. -// If we don't do this, there are a few cases where the trailing 11 bits of -// the significand of the result, before converting to double, are zero. These -// cases do not round symmetrically in round to +infinity or round to -infinity. -{ .mfb - nop.m 999 -(p6) fnma.d.s0 f8 = atan2_A, atan2_near_one, atan2_sgn_pi_by_2 - br.ret.sptk b0 -;; -} - -GLOBAL_LIBM_END(atan) diff --git a/sysdeps/ia64/fpu/s_atanf.S b/sysdeps/ia64/fpu/s_atanf.S deleted file mode 100644 index 8d9e440ba2..0000000000 --- a/sysdeps/ia64/fpu/s_atanf.S +++ /dev/null @@ -1,555 +0,0 @@ -.file "atanf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. - - -// History -//============================================================== -// 02/20/00 Initial version -// 08/17/00 Changed predicate register macro-usage to direct predicate -// names due to an assembler bug. -// 02/06/02 Corrected .section statement -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align; -// added missing bundling - -// -// Assembly macros -//============================================================== - -// integer registers used -EXP_Addr1 = r33 -EXP_Addr2 = r34 - -// floating point registers used -atanf_coeff_R4 = f32 -atanf_coeff_R5 = f33 -atanf_coeff_R1 = f34 -atanf_coeff_R2 = f35 - -atanf_coeff_R3 = f36 -atanf_coeff_P1 = f37 -atanf_coeff_Q6 = f38 -atanf_coeff_Q7 = f39 -atanf_coeff_Q8 = f40 - -atanf_coeff_Q9 = f41 -atanf_coeff_Q4 = f42 -atanf_coeff_Q5 = f43 -atanf_coeff_Q2 = f44 -atanf_coeff_Q3 = f45 - -atanf_coeff_P5 = f46 -atanf_coeff_P6 = f47 -atanf_coeff_Q0 = f48 -atanf_coeff_Q1 = f49 -atanf_coeff_P7 = f50 - -atanf_coeff_P8 = f51 -atanf_coeff_P3 = f52 -atanf_coeff_P4 = f53 -atanf_coeff_P9 = f54 -atanf_coeff_P10 = f55 - -atanf_coeff_P2 = f56 -atanf_piby2 = f57 -atanf_z = f58 -atanf_b = f59 -atanf_zsq = f60 - -atanf_sgn_x = f61 -atanf_sgnx_piby2 = f62 -atanf_abs_x = f63 -atanf_t = f64 -atanf_xcub = f65 - -atanf_tsq = f66 -atanf_t4 = f67 -atanf_x5 = f68 -atanf_x6 = f69 -atanf_x11 = f70 - -atanf_poly_p1 = f71 -atanf_poly_p2 = f72 -atanf_poly_p3 = f73 -atanf_poly_p4 = f74 -atanf_poly_p5 = f75 - -atanf_poly_q1 = f76 -atanf_poly_q2 = f77 -atanf_poly_q3 = f78 -atanf_poly_q4 = f79 -atanf_poly_q5 = f80 - -atanf_poly_q = f81 -atanf_poly_r1 = f81 -atanf_poly_r2 = f82 -atanf_poly_r3 = f83 -atanf_bsq = f84 -atanf_z4 = f85 - -atanf_z5 = f86 -atanf_z8 = f87 -atanf_z13 = f88 -atanf_poly_r2 = f89 -atanf_poly_r1 = f90 - -atanf_z8_bsq = f91 -atanf_poly_r = f92 -atanf_z21_poly_r = f93 -atanf_answer = f8 - - -// predicate registers used -//atanf_pred_LE1 = p6 -//atanf_pred_GT1 = p7 - - -RODATA - -.align 16 - -LOCAL_OBJECT_START(atanf_coeff_1_table) -data8 0x40c4c241be751ff2 // r4 -data8 0x40e9f300c2f3070b // r5 -data8 0x409babffef772075 // r3 -data8 0xbfd5555512191621 // p1 -data8 0x3fc9997e7afbff4e // p2 = q8 -data8 0xbfd5555512191621 // p1 = q9 -data8 0x3f97105b4160f86b // p8 = q2 -data8 0xbfa6e10ba401393f // p7 = q3 -data8 0x3f522e5d33bc9baa // p10 = q0 -data8 0xbf7deaadaa336451 // p9 = q1 -data8 0xbfc2473c5145ee38 // p3 -data8 0x3fbc4f512b1865f5 // p4 -data8 0x3fc9997e7afbff4e // p2 -data8 0x3ff921fb54442d18 // pi/2 -LOCAL_OBJECT_END(atanf_coeff_1_table) - - - -LOCAL_OBJECT_START(atanf_coeff_2_table) -data8 0x4035000000004284 // r1 -data8 0x406cdffff336a59b // r2 -data8 0x3fbc4f512b1865f5 // p4 = q6 -data8 0xbfc2473c5145ee38 // p3 = q7 -data8 0x3fb142a73d7c54e3 // p6 = q4 -data8 0xbfb68eed6a8cfa32 // p5 = q5 -data8 0xbfb68eed6a8cfa32 // p5 -data8 0x3fb142a73d7c54e3 // p6 -data8 0xbfa6e10ba401393f // p7 -data8 0x3f97105b4160f86b // p8 -data8 0xbf7deaadaa336451 // p9 -data8 0x3f522e5d33bc9baa // p10 -LOCAL_OBJECT_END(atanf_coeff_2_table) - - - -.section .text -GLOBAL_LIBM_ENTRY(atanf) - -{ .mfi - alloc r32 = ar.pfs,1,2,0,0 - frcpa.s1 atanf_z,p0 = f1,f8 - addl EXP_Addr2 = @ltoff(atanf_coeff_2_table),gp -} -{ .mfi - addl EXP_Addr1 = @ltoff(atanf_coeff_1_table),gp - fma.s1 atanf_t = f8,f8,f0 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fmerge.s atanf_sgn_x = f8,f1 - nop.i 999;; -} - -{ .mfi - ld8 EXP_Addr1 = [EXP_Addr1] - fmerge.s atanf_abs_x = f1,f8 - nop.i 999 -} -{ .mfi - ld8 EXP_Addr2 = [EXP_Addr2] - nop.f 999 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fclass.m p8,p0 = f8,0x7 // @zero - nop.i 999;; -} - -{ .mfi - nop.m 999 - fcmp.eq.unc.s0 p9,p10 = f8,f1 - nop.i 999;; -} - -{ .mfi - ldfpd atanf_coeff_R4,atanf_coeff_R5 = [EXP_Addr1],16 - fnma.s1 atanf_b = f8,atanf_z,f1 - nop.i 999 -} -{ .mfi - ldfpd atanf_coeff_R1,atanf_coeff_R2 = [EXP_Addr2],16 - fma.s1 atanf_zsq = atanf_z,atanf_z,f0 - nop.i 999;; -} - - -{ .mfi - ldfpd atanf_coeff_R3,atanf_coeff_P1 = [EXP_Addr1],16 - fma.s1 atanf_xcub = f8,atanf_t,f0 - nop.i 999 -} -{ .mfi - ldfpd atanf_coeff_Q6,atanf_coeff_Q7 = [EXP_Addr2],16 - fma.s1 atanf_tsq = atanf_t,atanf_t,f0 - nop.i 999;; -} - - -{ .mfi - ldfpd atanf_coeff_Q8,atanf_coeff_Q9 = [EXP_Addr1],16 -// fcmp.le.s1 atanf_pred_LE1,atanf_pred_GT1 = atanf_abs_x,f1 - fcmp.le.s1 p6,p7 = atanf_abs_x,f1 - nop.i 999 -} -{ .mfi - ldfpd atanf_coeff_Q4,atanf_coeff_Q5 = [EXP_Addr2],16 - nop.f 999 - nop.i 999;; -} - - -{ .mfi - ldfpd atanf_coeff_Q2,atanf_coeff_Q3 = [EXP_Addr1],16 - fclass.m p8,p0 = f8,0xe7 // @inf|@qnan|@snan|@zero - nop.i 999 -} -{ .mfi - ldfpd atanf_coeff_P5,atanf_coeff_P6 = [EXP_Addr2],16 - nop.f 999 - nop.i 999;; -} - - -{ .mfi - ldfpd atanf_coeff_Q0,atanf_coeff_Q1 = [EXP_Addr1],16 - nop.f 999 - nop.i 999 -} -{ .mfi - ldfpd atanf_coeff_P7,atanf_coeff_P8 = [EXP_Addr2],16 - nop.f 999 - nop.i 999;; -} - - -{ .mfi - ldfpd atanf_coeff_P3,atanf_coeff_P4 = [EXP_Addr1],16 - fma.s1 atanf_bsq = atanf_b,atanf_b,f0 - nop.i 999 -} -{ .mfi - ldfpd atanf_coeff_P9,atanf_coeff_P10 = [EXP_Addr2] - fma.s1 atanf_z4 = atanf_zsq,atanf_zsq,f0 - nop.i 999;; -} - - -{ .mfi - ldfpd atanf_coeff_P2,atanf_piby2 = [EXP_Addr1] - fma.s1 atanf_x6 = atanf_t,atanf_tsq,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_t4 = atanf_tsq,atanf_tsq,f0 - nop.i 999;; -} - - -{ .mfb - nop.m 999 - fma.s1 atanf_x5 = atanf_t,atanf_xcub,f0 -(p8) br.cond.spnt ATANF_X_INF_NAN_ZERO -} -;; - -{ .mfi - nop.m 999 - fma.s1 atanf_poly_r1 = atanf_b,atanf_coeff_R1,f1 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_poly_r3 = atanf_b,atanf_coeff_R5,atanf_coeff_R4 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 atanf_poly_r2 = atanf_b,atanf_coeff_R3,atanf_coeff_R2 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_z8 = atanf_z4,atanf_z4,f0 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 atanf_poly_q2 = atanf_t,atanf_coeff_Q5,atanf_coeff_Q4 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_poly_q3 = atanf_t,atanf_coeff_Q7,atanf_coeff_Q6 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 atanf_z5 = atanf_z,atanf_z4,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_poly_q1 = atanf_t,atanf_coeff_Q9,atanf_coeff_Q8 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 atanf_poly_q4 = atanf_t,atanf_coeff_Q1,atanf_coeff_Q0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_poly_q5 = atanf_t,atanf_coeff_Q3,atanf_coeff_Q2 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 atanf_poly_p4 = f8,atanf_coeff_P1,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_poly_p5 = atanf_t,atanf_coeff_P4,atanf_coeff_P3 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 atanf_poly_r1 = atanf_z8,atanf_poly_r1,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_z8_bsq = atanf_z8,atanf_bsq,f0 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 atanf_poly_q2 = atanf_tsq,atanf_poly_q3,atanf_poly_q2 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_poly_r2 = atanf_bsq,atanf_poly_r3,atanf_poly_r2 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 atanf_poly_p2 = atanf_t,atanf_coeff_P8,atanf_coeff_P7 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_poly_q1 = atanf_poly_q1,f1,atanf_tsq - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 atanf_z13 = atanf_z5,atanf_z8,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_poly_p1 = atanf_t,atanf_coeff_P10,atanf_coeff_P9 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 atanf_poly_p4 = atanf_t,atanf_poly_p4,f8 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_poly_q4 = atanf_tsq,atanf_poly_q5,atanf_poly_q4 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 atanf_poly_p3 = atanf_t,atanf_coeff_P6,atanf_coeff_P5 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_poly_p5 = atanf_t,atanf_poly_p5,atanf_coeff_P2 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 atanf_x11 = atanf_x5,atanf_x6,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_poly_r = atanf_z8_bsq,atanf_poly_r2,atanf_poly_r1 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s0 atanf_sgnx_piby2 = atanf_sgn_x,atanf_piby2,f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 atanf_poly_q2 = atanf_t4,atanf_poly_q1,atanf_poly_q2 - nop.i 999;; -} - - -{ .mfi - nop.m 999 - fma.s1 atanf_poly_p1 = atanf_tsq,atanf_poly_p1,atanf_poly_p2 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fma.s1 atanf_poly_p4 = atanf_x5,atanf_poly_p5,atanf_poly_p4 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fma.s1 atanf_z21_poly_r = atanf_z13,atanf_poly_r,f0 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fma.s1 atanf_poly_q = atanf_t4,atanf_poly_q2,atanf_poly_q4 - nop.i 999;; -} - -{ .mfi - nop.m 999 - fma.s1 atanf_poly_p1 = atanf_tsq,atanf_poly_p1,atanf_poly_p3 - nop.i 999;; -} - -{ .mfi - nop.m 999 -//(atanf_pred_GT1) fnma.s atanf_answer = atanf_poly_q,atanf_z21_poly_r,atanf_sgnx_piby2 -(p7) fnma.s.s0 atanf_answer = atanf_poly_q,atanf_z21_poly_r,atanf_sgnx_piby2 - nop.i 999;; -} - -{ .mfb - nop.m 999 -//(atanf_pred_LE1) fma.s atanf_answer = atanf_x11,atanf_poly_p1,atanf_poly_p4 -(p6) fma.s.s0 atanf_answer = atanf_x11,atanf_poly_p1,atanf_poly_p4 - br.ret.sptk b0 -} - - - -ATANF_X_INF_NAN_ZERO: - -{ .mfi - nop.m 0 - fclass.m p8,p9 = f8,0x23 // @inf - nop.i 0 -} -;; -{ .mfi - nop.m 0 -(p8) fmerge.s f8 = f8, atanf_piby2 - nop.i 0 -} -;; -{ .mfb - nop.m 0 - fnorm.s.s0 f8 = f8 - br.ret.sptk b0 -} -;; - -GLOBAL_LIBM_END(atanf) diff --git a/sysdeps/ia64/fpu/s_atanl.S b/sysdeps/ia64/fpu/s_atanl.S deleted file mode 100644 index fea68abfde..0000000000 --- a/sysdeps/ia64/fpu/s_atanl.S +++ /dev/null @@ -1,2007 +0,0 @@ -.file "atanl.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// -//********************************************************************* -// -// History -// 02/02/00 (hand-optimized) -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 03/13/01 Fixed flags when denormal raised on intermediate result -// 01/08/02 Improved speed. -// 02/06/02 Corrected .section statement -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align; -// used data8 for long double table values -// 03/31/05 Reformatted delimiters between data tables -// -//********************************************************************* -// -// Function: atanl(x) = inverse tangent(x), for double extended x values -// Function: atan2l(y,x) = atan(y/x), for double extended y, x values -// -// API -// -// long double atanl (long double x) -// long double atan2l (long double y, long double x) -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f9 (Input for atan2l) -// f10-f15, f32-f83 -// -// General Purpose Registers: -// r32-r51 -// r49-r52 (Arguments to error support for 0,0 case) -// -// Predicate Registers: p6-p15 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// Denormal fault raised on denormal inputs -// Underflow exceptions may occur -// Special error handling for the y=0 and x=0 case -// Inexact raised when appropriate by algorithm -// -// atanl(SNaN) = QNaN -// atanl(QNaN) = QNaN -// atanl(+/-0) = +/- 0 -// atanl(+/-Inf) = +/-pi/2 -// -// atan2l(Any NaN for x or y) = QNaN -// atan2l(+/-0,x) = +/-0 for x > 0 -// atan2l(+/-0,x) = +/-pi for x < 0 -// atan2l(+/-0,+0) = +/-0 -// atan2l(+/-0,-0) = +/-pi -// atan2l(y,+/-0) = pi/2 y > 0 -// atan2l(y,+/-0) = -pi/2 y < 0 -// atan2l(+/-y, Inf) = +/-0 for finite y > 0 -// atan2l(+/-Inf, x) = +/-pi/2 for finite x -// atan2l(+/-y, -Inf) = +/-pi for finite y > 0 -// atan2l(+/-Inf, Inf) = +/-pi/4 -// atan2l(+/-Inf, -Inf) = +/-3pi/4 -// -//********************************************************************* -// -// Mathematical Description -// --------------------------- -// -// The function ATANL( Arg_Y, Arg_X ) returns the "argument" -// or the "phase" of the complex number -// -// Arg_X + i Arg_Y -// -// or equivalently, the angle in radians from the positive -// x-axis to the line joining the origin and the point -// (Arg_X,Arg_Y) -// -// -// (Arg_X, Arg_Y) x -// \ -// \ -// \ -// \ -// \ angle between is ATANL(Arg_Y,Arg_X) - - - - -// \ -// ------------------> X-axis - -// Origin -// -// Moreover, this angle is reported in the range [-pi,pi] thus -// -// -pi <= ATANL( Arg_Y, Arg_X ) <= pi. -// -// From the geometry, it is easy to define ATANL when one of -// Arg_X or Arg_Y is +-0 or +-inf: -// -// -// \ Y | -// X \ | +0 | -0 | +inf | -inf | finite non-zero -// \ | | | | | -// ______________________________________________________ -// | | | | -// +-0 | Invalid/ | pi/2 | -pi/2 | sign(Y)*pi/2 -// | qNaN | | | -// -------------------------------------------------------- -// | | | | | -// +inf | +0 | -0 | pi/4 | -pi/4 | sign(Y)*0 -// -------------------------------------------------------- -// | | | | | -// -inf | +pi | -pi | 3pi/4 | -3pi/4 | sign(Y)*pi -// -------------------------------------------------------- -// finite | X>0? | pi/2 | -pi/2 | normal case -// non-zero| sign(Y)*0: | | | -// | sign(Y)*pi | | | -// -// -// One must take note that ATANL is NOT the arctangent of the -// value Arg_Y/Arg_X; but rather ATANL and arctan are related -// in a slightly more complicated way as follows: -// -// Let U := max(|Arg_X|, |Arg_Y|); V := min(|Arg_X|, |Arg_Y|); -// sign_X be the sign bit of Arg_X, i.e., sign_X is 0 or 1; -// s_X be the sign of Arg_X, i.e., s_X = (-1)^sign_X; -// -// sign_Y be the sign bit of Arg_Y, i.e., sign_Y is 0 or 1; -// s_Y be the sign of Arg_Y, i.e., s_Y = (-1)^sign_Y; -// -// swap be 0 if |Arg_X| >= |Arg_Y| and 1 otherwise. -// -// Then, ATANL(Arg_Y, Arg_X) = -// -// / arctan(V/U) \ sign_X = 0 & swap = 0 -// | pi/2 - arctan(V/U) | sign_X = 0 & swap = 1 -// s_Y * | | -// | pi - arctan(V/U) | sign_X = 1 & swap = 0 -// \ pi/2 + arctan(V/U) / sign_X = 1 & swap = 1 -// -// -// This relationship also suggest that the algorithm's major -// task is to calculate arctan(V/U) for 0 < V <= U; and the -// final Result is given by -// -// s_Y * { (P_hi + P_lo) + sigma * arctan(V/U) } -// -// where -// -// (P_hi,P_lo) represents M(sign_X,swap)*(pi/2) accurately -// -// M(sign_X,swap) = 0 for sign_X = 0 and swap = 0 -// 1 for swap = 1 -// 2 for sign_X = 1 and swap = 0 -// -// and -// -// sigma = { (sign_X XOR swap) : -1.0 : 1.0 } -// -// = (-1) ^ ( sign_X XOR swap ) -// -// Both (P_hi,P_lo) and sigma can be stored in a table and fetched -// using (sign_X,swap) as an index. (P_hi, P_lo) can be stored as a -// double-precision, and single-precision pair; and sigma can -// obviously be just a single-precision number. -// -// In the algorithm we propose, arctan(V/U) is calculated to high accuracy -// as A_hi + A_lo. Consequently, the Result ATANL( Arg_Y, Arg_X ) is -// given by -// -// s_Y*P_hi + s_Y*sigma*A_hi + s_Y*(sigma*A_lo + P_lo) -// -// We now discuss the calculation of arctan(V/U) for 0 < V <= U. -// -// For (V/U) < 2^(-3), we use a simple polynomial of the form -// -// z + z^3*(P_1 + z^2*(P_2 + z^2*(P_3 + ... + P_8))) -// -// where z = V/U. -// -// For the sake of accuracy, the first term "z" must approximate V/U to -// extra precision. For z^3 and higher power, a working precision -// approximation to V/U suffices. Thus, we obtain: -// -// z_hi + z_lo = V/U to extra precision and -// z = V/U to working precision -// -// The value arctan(V/U) is delivered as two pieces (A_hi, A_lo) -// -// (A_hi,A_lo) = (z_hi, z^3*(P_1 + ... + P_8) + z_lo). -// -// -// For 2^(-3) <= (V/U) <= 1, we use a table-driven approach. -// Consider -// -// (V/U) = 2^k * 1.b_1 b_2 .... b_63 b_64 b_65 .... -// -// Define -// -// z_hi = 2^k * 1.b_1 b_2 b_3 b_4 1 -// -// then -// / \ -// | (V/U) - z_hi | - -// arctan(V/U) = arctan(z_hi) + acrtan| -------------- | -// | 1 + (V/U)*z_hi | -// \ / -// -// / \ -// | V - z_hi*U | - -// = arctan(z_hi) + acrtan| -------------- | -// | U + V*z_hi | -// \ / -// -// = arctan(z_hi) + acrtan( V' / U' ) -// -// -// where -// -// V' = V - U*z_hi; U' = U + V*z_hi. -// -// Let -// -// w_hi + w_lo = V'/U' to extra precision and -// w = V'/U' to working precision -// -// then we can approximate arctan(V'/U') by -// -// arctan(V'/U') = w_hi + w_lo -// + w^3*(Q_1 + w^2*(Q_2 + w^2*(Q_3 + w^2*Q_4))) -// -// = w_hi + w_lo + poly -// -// Finally, arctan(z_hi) is calculated beforehand and stored in a table -// as Tbl_hi, Tbl_lo. Thus, -// -// (A_hi, A_lo) = (Tbl_hi, w_hi+(poly+(w_lo+Tbl_lo))) -// -// This completes the mathematical description. -// -// -// Algorithm -// ------------- -// -// Step 0. Check for unsupported format. -// -// If -// ( expo(Arg_X) not zero AND msb(Arg_X) = 0 ) OR -// ( expo(Arg_Y) not zero AND msb(Arg_Y) = 0 ) -// -// then one of the arguments is unsupported. Generate an -// invalid and return qNaN. -// -// Step 1. Initialize -// -// Normalize Arg_X and Arg_Y and set the following -// -// sign_X := sign_bit(Arg_X) -// s_Y := (sign_bit(Arg_Y)==0? 1.0 : -1.0) -// swap := (|Arg_X| >= |Arg_Y|? 0 : 1 ) -// U := max( |Arg_X|, |Arg_Y| ) -// V := min( |Arg_X|, |Arg_Y| ) -// -// execute: frcpa E, pred, V, U -// If pred is 0, go to Step 5 for special cases handling. -// -// Step 2. Decide on branch. -// -// Q := E * V -// If Q < 2^(-3) go to Step 4 for simple polynomial case. -// -// Step 3. Table-driven algorithm. -// -// Q is represented as -// -// 2^(-k) * 1.b_1 b_2 b_3 ... b_63; k = 0,-1,-2,-3 -// -// and that if k = 0, b_1 = b_2 = b_3 = b_4 = 0. -// -// Define -// -// z_hi := 2^(-k) * 1.b_1 b_2 b_3 b_4 1 -// -// (note that there are 49 possible values of z_hi). -// -// ...We now calculate V' and U'. While V' is representable -// ...as a 64-bit number because of cancellation, U' is -// ...not in general a 64-bit number. Obtaining U' accurately -// ...requires two working precision numbers -// -// U_prime_hi := U + V * z_hi ...WP approx. to U' -// U_prime_lo := ( U - U_prime_hi ) + V*z_hi ...observe order -// V_prime := V - U * z_hi ...this is exact -// -// C_hi := frcpa (1.0, U_prime_hi) ...C_hi approx 1/U'_hi -// -// loop 3 times -// C_hi := C_hi + C_hi*(1.0 - C_hi*U_prime_hi) -// -// ...at this point C_hi is (1/U_prime_hi) to roughly 64 bits -// -// w_hi := V_prime * C_hi ...w_hi is V_prime/U_prime to -// ...roughly working precision -// -// ...note that we want w_hi + w_lo to approximate -// ...V_prime/(U_prime_hi + U_prime_lo) to extra precision -// ...but for now, w_hi is good enough for the polynomial -// ...calculation. -// -// wsq := w_hi*w_hi -// poly := w_hi*wsq*(Q_1 + wsq*(Q_2 + wsq*(Q_3 + wsq*Q_4))) -// -// Fetch -// (Tbl_hi, Tbl_lo) = atan(z_hi) indexed by (k,b_1,b_2,b_3,b_4) -// ...Tbl_hi is a double-precision number -// ...Tbl_lo is a single-precision number -// -// (P_hi, P_lo) := M(sign_X,swap)*(Pi_by_2_hi, Pi_by_2_lo) -// ...as discussed previous. Again; the implementation can -// ...chose to fetch P_hi and P_lo from a table indexed by -// ...(sign_X, swap). -// ...P_hi is a double-precision number; -// ...P_lo is a single-precision number. -// -// ...calculate w_lo so that w_hi + w_lo is V'/U' accurately -// w_lo := ((V_prime - w_hi*U_prime_hi) - -// w_hi*U_prime_lo) * C_hi ...observe order -// -// -// ...Ready to deliver arctan(V'/U') as A_hi, A_lo -// A_hi := Tbl_hi -// A_lo := w_hi + (poly + (Tbl_lo + w_lo)) ...observe order -// -// ...Deliver final Result -// ...s_Y*P_hi + s_Y*sigma*A_hi + s_Y*(sigma*A_lo + P_lo) -// -// sigma := ( (sign_X XOR swap) ? -1.0 : 1.0 ) -// ...sigma can be obtained by a table lookup using -// ...(sign_X,swap) as index and stored as single precision -// ...sigma should be calculated earlier -// -// P_hi := s_Y*P_hi -// A_hi := s_Y*A_hi -// -// Res_hi := P_hi + sigma*A_hi ...this is exact because -// ...both P_hi and Tbl_hi -// ...are double-precision -// ...and |Tbl_hi| > 2^(-4) -// ...P_hi is either 0 or -// ...between (1,4) -// -// Res_lo := sigma*A_lo + P_lo -// -// Return Res_hi + s_Y*Res_lo in user-defined rounding control -// -// Step 4. Simple polynomial case. -// -// ...E and Q are inherited from Step 2. -// -// A_hi := Q ...Q is inherited from Step 2 Q approx V/U -// -// loop 3 times -// E := E + E2(1.0 - E*U1 -// ...at this point E approximates 1/U to roughly working precision -// -// z := V * E ...z approximates V/U to roughly working precision -// zsq := z * z -// z4 := zsq * zsq; z8 := z4 * z4 -// -// poly1 := P_4 + zsq*(P_5 + zsq*(P_6 + zsq*(P_7 + zsq*P_8))) -// poly2 := zsq*(P_1 + zsq*(P_2 + zsq*P_3)) -// -// poly := poly1 + z8*poly2 -// -// z_lo := (V - A_hi*U)*E -// -// A_lo := z*poly + z_lo -// ...A_hi, A_lo approximate arctan(V/U) accurately -// -// (P_hi, P_lo) := M(sign_X,swap)*(Pi_by_2_hi, Pi_by_2_lo) -// ...one can store the M(sign_X,swap) as single precision -// ...values -// -// ...Deliver final Result -// ...s_Y*P_hi + s_Y*sigma*A_hi + s_Y*(sigma*A_lo + P_lo) -// -// sigma := ( (sign_X XOR swap) ? -1.0 : 1.0 ) -// ...sigma can be obtained by a table lookup using -// ...(sign_X,swap) as index and stored as single precision -// ...sigma should be calculated earlier -// -// P_hi := s_Y*P_hi -// A_hi := s_Y*A_hi -// -// Res_hi := P_hi + sigma*A_hi ...need to compute -// ...P_hi + sigma*A_hi -// ...exactly -// -// tmp := (P_hi - Res_hi) + sigma*A_hi -// -// Res_lo := s_Y*(sigma*A_lo + P_lo) + tmp -// -// Return Res_hi + Res_lo in user-defined rounding control -// -// Step 5. Special Cases -// -// These are detected early in the function by fclass instructions. -// -// We are in one of those special cases when X or Y is 0,+-inf or NaN -// -// If one of X and Y is NaN, return X+Y (which will generate -// invalid in case one is a signaling NaN). Otherwise, -// return the Result as described in the table -// -// -// -// \ Y | -// X \ | +0 | -0 | +inf | -inf | finite non-zero -// \ | | | | | -// ______________________________________________________ -// | | | | -// +-0 | Invalid/ | pi/2 | -pi/2 | sign(Y)*pi/2 -// | qNaN | | | -// -------------------------------------------------------- -// | | | | | -// +inf | +0 | -0 | pi/4 | -pi/4 | sign(Y)*0 -// -------------------------------------------------------- -// | | | | | -// -inf | +pi | -pi | 3pi/4 | -3pi/4 | sign(Y)*pi -// -------------------------------------------------------- -// finite | X>0? | pi/2 | -pi/2 | -// non-zero| sign(Y)*0: | | | N/A -// | sign(Y)*pi | | | -// -// - -ArgY_orig = f8 -Result = f8 -FR_RESULT = f8 -ArgX_orig = f9 -ArgX = f10 -FR_X = f10 -ArgY = f11 -FR_Y = f11 -s_Y = f12 -U = f13 -V = f14 -E = f15 -Q = f32 -z_hi = f33 -U_prime_hi = f34 -U_prime_lo = f35 -V_prime = f36 -C_hi = f37 -w_hi = f38 -w_lo = f39 -wsq = f40 -poly = f41 -Tbl_hi = f42 -Tbl_lo = f43 -P_hi = f44 -P_lo = f45 -A_hi = f46 -A_lo = f47 -sigma = f48 -Res_hi = f49 -Res_lo = f50 -Z = f52 -zsq = f53 -z4 = f54 -z8 = f54 -poly1 = f55 -poly2 = f56 -z_lo = f57 -tmp = f58 -P_1 = f59 -Q_1 = f60 -P_2 = f61 -Q_2 = f62 -P_3 = f63 -Q_3 = f64 -P_4 = f65 -Q_4 = f66 -P_5 = f67 -P_6 = f68 -P_7 = f69 -P_8 = f70 -U_hold = f71 -TWO_TO_NEG3 = f72 -C_hi_hold = f73 -E_hold = f74 -M = f75 -ArgX_abs = f76 -ArgY_abs = f77 -Result_lo = f78 -A_temp = f79 -FR_temp = f80 -Xsq = f81 -Ysq = f82 -tmp_small = f83 - -GR_SAVE_PFS = r33 -GR_SAVE_B0 = r34 -GR_SAVE_GP = r35 -sign_X = r36 -sign_Y = r37 -swap = r38 -table_ptr1 = r39 -table_ptr2 = r40 -k = r41 -lookup = r42 -exp_ArgX = r43 -exp_ArgY = r44 -exponent_Q = r45 -significand_Q = r46 -special = r47 -sp_exp_Q = r48 -sp_exp_4sig_Q = r49 -table_base = r50 -int_temp = r51 - -GR_Parameter_X = r49 -GR_Parameter_Y = r50 -GR_Parameter_RESULT = r51 -GR_Parameter_TAG = r52 -GR_temp = r52 - -RODATA -.align 16 - -LOCAL_OBJECT_START(Constants_atan) -// double pi/2 -data8 0x3FF921FB54442D18 -// single lo_pi/2, two**(-3) -data4 0x248D3132, 0x3E000000 -data8 0xAAAAAAAAAAAAAAA3, 0xBFFD // P_1 -data8 0xCCCCCCCCCCCC54B2, 0x3FFC // P_2 -data8 0x9249249247E4D0C2, 0xBFFC // P_3 -data8 0xE38E38E058870889, 0x3FFB // P_4 -data8 0xBA2E895B290149F8, 0xBFFB // P_5 -data8 0x9D88E6D4250F733D, 0x3FFB // P_6 -data8 0x884E51FFFB8745A0, 0xBFFB // P_7 -data8 0xE1C7412B394396BD, 0x3FFA // P_8 -data8 0xAAAAAAAAAAAAA52F, 0xBFFD // Q_1 -data8 0xCCCCCCCCC75B60D3, 0x3FFC // Q_2 -data8 0x924923AD011F1940, 0xBFFC // Q_3 -data8 0xE36F716D2A5F89BD, 0x3FFB // Q_4 -// -// Entries Tbl_hi (double precision) -// B = 1+Index/16+1/32 Index = 0 -// Entries Tbl_lo (single precision) -// B = 1+Index/16+1/32 Index = 0 -// -data8 0x3FE9A000A935BD8E -data4 0x23ACA08F, 0x00000000 -// -// Entries Tbl_hi (double precision) Index = 0,1,...,15 -// B = 2^(-1)*(1+Index/16+1/32) -// Entries Tbl_lo (single precision) -// Index = 0,1,...,15 B = 2^(-1)*(1+Index/16+1/32) -// -data8 0x3FDE77EB7F175A34 -data4 0x238729EE, 0x00000000 -data8 0x3FE0039C73C1A40B -data4 0x249334DB, 0x00000000 -data8 0x3FE0C6145B5B43DA -data4 0x22CBA7D1, 0x00000000 -data8 0x3FE1835A88BE7C13 -data4 0x246310E7, 0x00000000 -data8 0x3FE23B71E2CC9E6A -data4 0x236210E5, 0x00000000 -data8 0x3FE2EE628406CBCA -data4 0x2462EAF5, 0x00000000 -data8 0x3FE39C391CD41719 -data4 0x24B73EF3, 0x00000000 -data8 0x3FE445065B795B55 -data4 0x24C11260, 0x00000000 -data8 0x3FE4E8DE5BB6EC04 -data4 0x242519EE, 0x00000000 -data8 0x3FE587D81F732FBA -data4 0x24D4346C, 0x00000000 -data8 0x3FE6220D115D7B8D -data4 0x24ED487B, 0x00000000 -data8 0x3FE6B798920B3D98 -data4 0x2495FF1E, 0x00000000 -data8 0x3FE748978FBA8E0F -data4 0x223D9531, 0x00000000 -data8 0x3FE7D528289FA093 -data4 0x242B0411, 0x00000000 -data8 0x3FE85D69576CC2C5 -data4 0x2335B374, 0x00000000 -data8 0x3FE8E17AA99CC05D -data4 0x24C27CFB, 0x00000000 -// -// Entries Tbl_hi (double precision) Index = 0,1,...,15 -// B = 2^(-2)*(1+Index/16+1/32) -// Entries Tbl_lo (single precision) -// Index = 0,1,...,15 B = 2^(-2)*(1+Index/16+1/32) -// -data8 0x3FD025FA510665B5 -data4 0x24263482, 0x00000000 -data8 0x3FD1151A362431C9 -data4 0x242C8DC9, 0x00000000 -data8 0x3FD2025567E47C95 -data4 0x245CF9BA, 0x00000000 -data8 0x3FD2ED987A823CFE -data4 0x235C892C, 0x00000000 -data8 0x3FD3D6D129271134 -data4 0x2389BE52, 0x00000000 -data8 0x3FD4BDEE586890E6 -data4 0x24436471, 0x00000000 -data8 0x3FD5A2E0175E0F4E -data4 0x2389DBD4, 0x00000000 -data8 0x3FD685979F5FA6FD -data4 0x2476D43F, 0x00000000 -data8 0x3FD7660752817501 -data4 0x24711774, 0x00000000 -data8 0x3FD84422B8DF95D7 -data4 0x23EBB501, 0x00000000 -data8 0x3FD91FDE7CD0C662 -data4 0x23883A0C, 0x00000000 -data8 0x3FD9F93066168001 -data4 0x240DF63F, 0x00000000 -data8 0x3FDAD00F5422058B -data4 0x23FE261A, 0x00000000 -data8 0x3FDBA473378624A5 -data4 0x23A8CD0E, 0x00000000 -data8 0x3FDC76550AAD71F8 -data4 0x2422D1D0, 0x00000000 -data8 0x3FDD45AEC9EC862B -data4 0x2344A109, 0x00000000 -// -// Entries Tbl_hi (double precision) Index = 0,1,...,15 -// B = 2^(-3)*(1+Index/16+1/32) -// Entries Tbl_lo (single precision) -// Index = 0,1,...,15 B = 2^(-3)*(1+Index/16+1/32) -// -data8 0x3FC068D584212B3D -data4 0x239874B6, 0x00000000 -data8 0x3FC1646541060850 -data4 0x2335E774, 0x00000000 -data8 0x3FC25F6E171A535C -data4 0x233E36BE, 0x00000000 -data8 0x3FC359E8EDEB99A3 -data4 0x239680A3, 0x00000000 -data8 0x3FC453CEC6092A9E -data4 0x230FB29E, 0x00000000 -data8 0x3FC54D18BA11570A -data4 0x230C1418, 0x00000000 -data8 0x3FC645BFFFB3AA73 -data4 0x23F0564A, 0x00000000 -data8 0x3FC73DBDE8A7D201 -data4 0x23D4A5E1, 0x00000000 -data8 0x3FC8350BE398EBC7 -data4 0x23D4ADDA, 0x00000000 -data8 0x3FC92BA37D050271 -data4 0x23BCB085, 0x00000000 -data8 0x3FCA217E601081A5 -data4 0x23BC841D, 0x00000000 -data8 0x3FCB1696574D780B -data4 0x23CF4A8E, 0x00000000 -data8 0x3FCC0AE54D768466 -data4 0x23BECC90, 0x00000000 -data8 0x3FCCFE654E1D5395 -data4 0x2323DCD2, 0x00000000 -data8 0x3FCDF110864C9D9D -data4 0x23F53F3A, 0x00000000 -data8 0x3FCEE2E1451D980C -data4 0x23CCB11F, 0x00000000 -// -data8 0x400921FB54442D18, 0x3CA1A62633145C07 // PI two doubles -data8 0x3FF921FB54442D18, 0x3C91A62633145C07 // PI_by_2 two dbles -data8 0x3FE921FB54442D18, 0x3C81A62633145C07 // PI_by_4 two dbles -data8 0x4002D97C7F3321D2, 0x3C9A79394C9E8A0A // 3PI_by_4 two dbles -LOCAL_OBJECT_END(Constants_atan) - - -.section .text -GLOBAL_IEEE754_ENTRY(atanl) - -// Use common code with atan2l after setting x=1.0 -{ .mfi - alloc r32 = ar.pfs, 0, 17, 4, 0 - fma.s1 Ysq = ArgY_orig, ArgY_orig, f0 // Form y*y - nop.i 999 -} -{ .mfi - addl table_ptr1 = @ltoff(Constants_atan#), gp // Address of table pointer - fma.s1 Xsq = f1, f1, f0 // Form x*x - nop.i 999 -} -;; - -{ .mfi - ld8 table_ptr1 = [table_ptr1] // Get table pointer - fnorm.s1 ArgY = ArgY_orig - nop.i 999 -} -{ .mfi - nop.m 999 - fnorm.s1 ArgX = f1 - nop.i 999 -} -;; - -{ .mfi - getf.exp sign_X = f1 // Get signexp of x - fmerge.s ArgX_abs = f0, f1 // Form |x| - nop.i 999 -} -{ .mfi - nop.m 999 - fnorm.s1 ArgX_orig = f1 - nop.i 999 -} -;; - -{ .mfi - getf.exp sign_Y = ArgY_orig // Get signexp of y - fmerge.s ArgY_abs = f0, ArgY_orig // Form |y| - mov table_base = table_ptr1 // Save base pointer to tables -} -;; - -{ .mfi - ldfd P_hi = [table_ptr1],8 // Load double precision hi part of pi - fclass.m p8,p0 = ArgY_orig, 0x1e7 // Test y natval, nan, inf, zero - nop.i 999 -} -;; - -{ .mfi - ldfps P_lo, TWO_TO_NEG3 = [table_ptr1], 8 // Load P_lo and constant 2^-3 - nop.f 999 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 M = f1, f1, f0 // Set M = 1.0 - nop.i 999 -} -;; - -// -// Check for everything - if false, then must be pseudo-zero -// or pseudo-nan (IA unsupporteds). -// -{ .mfb - nop.m 999 - fclass.m p0,p12 = f1, 0x1FF // Test x unsupported -(p8) br.cond.spnt ATANL_Y_SPECIAL // Branch if y natval, nan, inf, zero -} -;; - -// U = max(ArgX_abs,ArgY_abs) -// V = min(ArgX_abs,ArgY_abs) -{ .mfi - nop.m 999 - fcmp.ge.s1 p6,p7 = Xsq, Ysq // Test for |x| >= |y| using squares - nop.i 999 -} -{ .mfb - nop.m 999 - fma.s1 V = ArgX_abs, f1, f0 // Set V assuming |x| < |y| - br.cond.sptk ATANL_COMMON // Branch to common code -} -;; - -GLOBAL_IEEE754_END(atanl) - -GLOBAL_IEEE754_ENTRY(atan2l) - -{ .mfi - alloc r32 = ar.pfs, 0, 17, 4, 0 - fma.s1 Ysq = ArgY_orig, ArgY_orig, f0 // Form y*y - nop.i 999 -} -{ .mfi - addl table_ptr1 = @ltoff(Constants_atan#), gp // Address of table pointer - fma.s1 Xsq = ArgX_orig, ArgX_orig, f0 // Form x*x - nop.i 999 -} -;; - -{ .mfi - ld8 table_ptr1 = [table_ptr1] // Get table pointer - fnorm.s1 ArgY = ArgY_orig - nop.i 999 -} -{ .mfi - nop.m 999 - fnorm.s1 ArgX = ArgX_orig - nop.i 999 -} -;; - -{ .mfi - getf.exp sign_X = ArgX_orig // Get signexp of x - fmerge.s ArgX_abs = f0, ArgX_orig // Form |x| - nop.i 999 -} -;; - -{ .mfi - getf.exp sign_Y = ArgY_orig // Get signexp of y - fmerge.s ArgY_abs = f0, ArgY_orig // Form |y| - mov table_base = table_ptr1 // Save base pointer to tables -} -;; - -{ .mfi - ldfd P_hi = [table_ptr1],8 // Load double precision hi part of pi - fclass.m p8,p0 = ArgY_orig, 0x1e7 // Test y natval, nan, inf, zero - nop.i 999 -} -;; - -{ .mfi - ldfps P_lo, TWO_TO_NEG3 = [table_ptr1], 8 // Load P_lo and constant 2^-3 - fclass.m p9,p0 = ArgX_orig, 0x1e7 // Test x natval, nan, inf, zero - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 M = f1, f1, f0 // Set M = 1.0 - nop.i 999 -} -;; - -// -// Check for everything - if false, then must be pseudo-zero -// or pseudo-nan (IA unsupporteds). -// -{ .mfb - nop.m 999 - fclass.m p0,p12 = ArgX_orig, 0x1FF // Test x unsupported -(p8) br.cond.spnt ATANL_Y_SPECIAL // Branch if y natval, nan, inf, zero -} -;; - -// U = max(ArgX_abs,ArgY_abs) -// V = min(ArgX_abs,ArgY_abs) -{ .mfi - nop.m 999 - fcmp.ge.s1 p6,p7 = Xsq, Ysq // Test for |x| >= |y| using squares - nop.i 999 -} -{ .mfb - nop.m 999 - fma.s1 V = ArgX_abs, f1, f0 // Set V assuming |x| < |y| -(p9) br.cond.spnt ATANL_X_SPECIAL // Branch if x natval, nan, inf, zero -} -;; - -// Now common code for atanl and atan2l -ATANL_COMMON: -{ .mfi - nop.m 999 - fclass.m p0,p13 = ArgY_orig, 0x1FF // Test y unsupported - shr sign_X = sign_X, 17 // Get sign bit of x -} -{ .mfi - nop.m 999 - fma.s1 U = ArgY_abs, f1, f0 // Set U assuming |x| < |y| - adds table_ptr1 = 176, table_ptr1 // Point to Q4 -} -;; - -{ .mfi -(p6) add swap = r0, r0 // Set swap=0 if |x| >= |y| -(p6) frcpa.s1 E, p0 = ArgY_abs, ArgX_abs // Compute E if |x| >= |y| - shr sign_Y = sign_Y, 17 // Get sign bit of y -} -{ .mfb - nop.m 999 -(p6) fma.s1 V = ArgY_abs, f1, f0 // Set V if |x| >= |y| -(p12) br.cond.spnt ATANL_UNSUPPORTED // Branch if x unsupported -} -;; - -// Set p8 if y >=0 -// Set p9 if y < 0 -// Set p10 if |x| >= |y| and x >=0 -// Set p11 if |x| >= |y| and x < 0 -{ .mfi - cmp.eq p8, p9 = 0, sign_Y // Test for y >= 0 -(p7) frcpa.s1 E, p0 = ArgX_abs, ArgY_abs // Compute E if |x| < |y| -(p7) add swap = 1, r0 // Set swap=1 if |x| < |y| -} -{ .mfb -(p6) cmp.eq.unc p10, p11 = 0, sign_X // If |x| >= |y|, test for x >= 0 -(p6) fma.s1 U = ArgX_abs, f1, f0 // Set U if |x| >= |y| -(p13) br.cond.spnt ATANL_UNSUPPORTED // Branch if y unsupported -} -;; - -// -// if p8, s_Y = 1.0 -// if p9, s_Y = -1.0 -// -.pred.rel "mutex",p8,p9 -{ .mfi - nop.m 999 -(p8) fadd.s1 s_Y = f0, f1 // If y >= 0 set s_Y = 1.0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fsub.s1 s_Y = f0, f1 // If y < 0 set s_Y = -1.0 - nop.i 999 -} -;; - -.pred.rel "mutex",p10,p11 -{ .mfi - nop.m 999 -(p10) fsub.s1 M = M, f1 // If |x| >= |y| and x >=0, set M=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fadd.s1 M = M, f1 // If |x| >= |y| and x < 0, set M=2.0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fcmp.eq.s0 p0, p9 = ArgX_orig, ArgY_orig // Dummy to set denormal flag - nop.i 999 -} -// ************************************************* -// ********************* STEP2 ********************* -// ************************************************* -// -// Q = E * V -// -{ .mfi - nop.m 999 - fmpy.s1 Q = E, V - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fnma.s1 E_hold = E, U, f1 // E_hold = 1.0 - E*U (1) if POLY path - nop.i 999 -} -;; - -// Create a single precision representation of the signexp of Q with the -// 4 most significant bits of the significand followed by a 1 and then 18 0's -{ .mfi - nop.m 999 - fmpy.s1 P_hi = M, P_hi - dep.z special = 0x1, 18, 1 // Form 0x0000000000040000 -} -{ .mfi - nop.m 999 - fmpy.s1 P_lo = M, P_lo - add table_ptr2 = 32, table_ptr1 -} -;; - -{ .mfi - nop.m 999 - fma.s1 A_temp = Q, f1, f0 // Set A_temp if POLY path - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 E = E, E_hold, E // E = E + E*E_hold (1) if POLY path - nop.i 999 -} -;; - -// -// Is Q < 2**(-3)? -// swap = xor(swap,sign_X) -// -{ .mfi - nop.m 999 - fcmp.lt.s1 p9, p0 = Q, TWO_TO_NEG3 // Test Q < 2^-3 - xor swap = sign_X, swap -} -;; - -// P_hi = s_Y * P_hi -{ .mmf - getf.exp exponent_Q = Q // Get signexp of Q - cmp.eq.unc p7, p6 = 0x00000, swap - fmpy.s1 P_hi = s_Y, P_hi -} -;; - -// -// if (PR_1) sigma = -1.0 -// if (PR_2) sigma = 1.0 -// -{ .mfi - getf.sig significand_Q = Q // Get significand of Q -(p6) fsub.s1 sigma = f0, f1 - nop.i 999 -} -{ .mfb -(p9) add table_ptr1 = 128, table_base // Point to P8 if POLY path -(p7) fadd.s1 sigma = f0, f1 -(p9) br.cond.spnt ATANL_POLY // Branch to POLY if 0 < Q < 2^-3 -} -;; - -// -// ************************************************* -// ******************** STEP3 ********************** -// ************************************************* -// -// lookup = b_1 b_2 b_3 B_4 -// -{ .mmi - nop.m 999 - nop.m 999 - andcm k = 0x0003, exponent_Q // k=0,1,2,3 for exp_Q=0,-1,-2,-3 -} -;; - -// -// Generate sign_exp_Q b_1 b_2 b_3 b_4 1 0 0 0 ... 0 in single precision -// representation. Note sign of Q is always 0. -// -{ .mfi - cmp.eq p8, p9 = 0x0000, k // Test k=0 - nop.f 999 - extr.u lookup = significand_Q, 59, 4 // Extract b_1 b_2 b_3 b_4 for index -} -{ .mfi - sub sp_exp_Q = 0x7f, k // Form single prec biased exp of Q - nop.f 999 - sub k = k, r0, 1 // Decrement k -} -;; - -// Form pointer to B index table -{ .mfi - ldfe Q_4 = [table_ptr1], -16 // Load Q_4 - nop.f 999 -(p9) shl k = k, 8 // k = 0, 256, or 512 -} -{ .mfi -(p9) shladd table_ptr2 = lookup, 4, table_ptr2 - nop.f 999 - shladd sp_exp_4sig_Q = sp_exp_Q, 4, lookup // Shift and add in 4 high bits -} -;; - -{ .mmi -(p8) add table_ptr2 = -16, table_ptr2 // Pointer if original k was 0 -(p9) add table_ptr2 = k, table_ptr2 // Pointer if k was 1, 2, 3 - dep special = sp_exp_4sig_Q, special, 19, 13 // Form z_hi as single prec -} -;; - -// z_hi = s exp 1.b_1 b_2 b_3 b_4 1 0 0 0 ... 0 -{ .mmi - ldfd Tbl_hi = [table_ptr2], 8 // Load Tbl_hi from index table -;; - setf.s z_hi = special // Form z_hi - nop.i 999 -} -{ .mmi - ldfs Tbl_lo = [table_ptr2], 8 // Load Tbl_lo from index table -;; - ldfe Q_3 = [table_ptr1], -16 // Load Q_3 - nop.i 999 -} -;; - -{ .mmi - ldfe Q_2 = [table_ptr1], -16 // Load Q_2 - nop.m 999 - nop.i 999 -} -;; - -{ .mmf - ldfe Q_1 = [table_ptr1], -16 // Load Q_1 - nop.m 999 - nop.f 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 U_prime_hi = V, z_hi, U // U_prime_hi = U + V * z_hi - nop.i 999 -} -{ .mfi - nop.m 999 - fnma.s1 V_prime = U, z_hi, V // V_prime = V - U * z_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - mov A_hi = Tbl_hi // Start with A_hi = Tbl_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fsub.s1 U_hold = U, U_prime_hi // U_hold = U - U_prime_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - frcpa.s1 C_hi, p0 = f1, U_prime_hi // C_hi = frcpa(1,U_prime_hi) - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 A_hi = s_Y, A_hi // A_hi = s_Y * A_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 U_prime_lo = z_hi, V, U_hold // U_prime_lo = U_hold + V * z_hi - nop.i 999 -} -;; - -// C_hi_hold = 1 - C_hi * U_prime_hi (1) -{ .mfi - nop.m 999 - fnma.s1 C_hi_hold = C_hi, U_prime_hi, f1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 Res_hi = sigma, A_hi, P_hi // Res_hi = P_hi + sigma * A_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 C_hi = C_hi_hold, C_hi, C_hi // C_hi = C_hi + C_hi * C_hi_hold (1) - nop.i 999 -} -;; - -// C_hi_hold = 1 - C_hi * U_prime_hi (2) -{ .mfi - nop.m 999 - fnma.s1 C_hi_hold = C_hi, U_prime_hi, f1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 C_hi = C_hi_hold, C_hi, C_hi // C_hi = C_hi + C_hi * C_hi_hold (2) - nop.i 999 -} -;; - -// C_hi_hold = 1 - C_hi * U_prime_hi (3) -{ .mfi - nop.m 999 - fnma.s1 C_hi_hold = C_hi, U_prime_hi, f1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 C_hi = C_hi_hold, C_hi, C_hi // C_hi = C_hi + C_hi * C_hi_hold (3) - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 w_hi = V_prime, C_hi // w_hi = V_prime * C_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 wsq = w_hi, w_hi // wsq = w_hi * w_hi - nop.i 999 -} -{ .mfi - nop.m 999 - fnma.s1 w_lo = w_hi, U_prime_hi, V_prime // w_lo = V_prime-w_hi*U_prime_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 poly = wsq, Q_4, Q_3 // poly = Q_3 + wsq * Q_4 - nop.i 999 -} -{ .mfi - nop.m 999 - fnma.s1 w_lo = w_hi, U_prime_lo, w_lo // w_lo = w_lo - w_hi * U_prime_lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 poly = wsq, poly, Q_2 // poly = Q_2 + wsq * poly - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s1 w_lo = C_hi, w_lo // w_lo = = w_lo * C_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 poly = wsq, poly, Q_1 // poly = Q_1 + wsq * poly - nop.i 999 -} -{ .mfi - nop.m 999 - fadd.s1 A_lo = Tbl_lo, w_lo // A_lo = Tbl_lo + w_lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s0 Q_1 = Q_1, Q_1 // Dummy operation to raise inexact - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 poly = wsq, poly // poly = wsq * poly - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 poly = w_hi, poly // poly = w_hi * poly - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fadd.s1 A_lo = A_lo, poly // A_lo = A_lo + poly - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fadd.s1 A_lo = A_lo, w_hi // A_lo = A_lo + w_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 Res_lo = sigma, A_lo, P_lo // Res_lo = P_lo + sigma * A_lo - nop.i 999 -} -;; - -// -// Result = Res_hi + Res_lo * s_Y (User Supplied Rounding Mode) -// -{ .mfb - nop.m 999 - fma.s0 Result = Res_lo, s_Y, Res_hi - br.ret.sptk b0 // Exit table path 2^-3 <= V/U < 1 -} -;; - - -ATANL_POLY: -// Here if 0 < V/U < 2^-3 -// -// *********************************************** -// ******************** STEP4 ******************** -// *********************************************** - -// -// Following: -// Iterate 3 times E = E + E*(1.0 - E*U) -// Also load P_8, P_7, P_6, P_5, P_4 -// -{ .mfi - ldfe P_8 = [table_ptr1], -16 // Load P_8 - fnma.s1 z_lo = A_temp, U, V // z_lo = V - A_temp * U - nop.i 999 -} -{ .mfi - nop.m 999 - fnma.s1 E_hold = E, U, f1 // E_hold = 1.0 - E*U (2) - nop.i 999 -} -;; - -{ .mmi - ldfe P_7 = [table_ptr1], -16 // Load P_7 -;; - ldfe P_6 = [table_ptr1], -16 // Load P_6 - nop.i 999 -} -;; - -{ .mfi - ldfe P_5 = [table_ptr1], -16 // Load P_5 - fma.s1 E = E, E_hold, E // E = E + E_hold*E (2) - nop.i 999 -} -;; - -{ .mmi - ldfe P_4 = [table_ptr1], -16 // Load P_4 -;; - ldfe P_3 = [table_ptr1], -16 // Load P_3 - nop.i 999 -} -;; - -{ .mfi - ldfe P_2 = [table_ptr1], -16 // Load P_2 - fnma.s1 E_hold = E, U, f1 // E_hold = 1.0 - E*U (3) - nop.i 999 -} -{ .mlx - nop.m 999 - movl int_temp = 0x24005 // Signexp for small neg number -} -;; - -{ .mmf - ldfe P_1 = [table_ptr1], -16 // Load P_1 - setf.exp tmp_small = int_temp // Form small neg number - fma.s1 E = E, E_hold, E // E = E + E_hold*E (3) -} -;; - -// -// -// At this point E approximates 1/U to roughly working precision -// Z = V*E approximates V/U -// -{ .mfi - nop.m 999 - fmpy.s1 Z = V, E // Z = V * E - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s1 z_lo = z_lo, E // z_lo = z_lo * E - nop.i 999 -} -;; - -// -// Now what we want to do is -// poly1 = P_4 + zsq*(P_5 + zsq*(P_6 + zsq*(P_7 + zsq*P_8))) -// poly2 = zsq*(P_1 + zsq*(P_2 + zsq*P_3)) -// -// -// Fixup added to force inexact later - -// A_hi = A_temp + z_lo -// z_lo = (A_temp - A_hi) + z_lo -// -{ .mfi - nop.m 999 - fmpy.s1 zsq = Z, Z // zsq = Z * Z - nop.i 999 -} -{ .mfi - nop.m 999 - fadd.s1 A_hi = A_temp, z_lo // A_hi = A_temp + z_lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 poly1 = zsq, P_8, P_7 // poly1 = P_7 + zsq * P_8 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 poly2 = zsq, P_3, P_2 // poly2 = P_2 + zsq * P_3 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 z4 = zsq, zsq // z4 = zsq * zsq - nop.i 999 -} -{ .mfi - nop.m 999 - fsub.s1 A_temp = A_temp, A_hi // A_temp = A_temp - A_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmerge.s tmp = A_hi, A_hi // Copy tmp = A_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 poly1 = zsq, poly1, P_6 // poly1 = P_6 + zsq * poly1 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 poly2 = zsq, poly2, P_1 // poly2 = P_2 + zsq * poly2 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 z8 = z4, z4 // z8 = z4 * z4 - nop.i 999 -} -{ .mfi - nop.m 999 - fadd.s1 z_lo = A_temp, z_lo // z_lo = (A_temp - A_hi) + z_lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 poly1 = zsq, poly1, P_5 // poly1 = P_5 + zsq * poly1 - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s1 poly2 = poly2, zsq // poly2 = zsq * poly2 - nop.i 999 -} -;; - -// Create small GR double in case need to raise underflow -{ .mfi - nop.m 999 - fma.s1 poly1 = zsq, poly1, P_4 // poly1 = P_4 + zsq * poly1 - dep GR_temp = -1,r0,0,53 -} -;; - -// Create small double in case need to raise underflow -{ .mfi - setf.d FR_temp = GR_temp - fma.s1 poly = z8, poly1, poly2 // poly = poly2 + z8 * poly1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 A_lo = Z, poly, z_lo // A_lo = z_lo + Z * poly - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fadd.s1 A_hi = tmp, A_lo // A_hi = tmp + A_lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fsub.s1 tmp = tmp, A_hi // tmp = tmp - A_hi - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s1 A_hi = s_Y, A_hi // A_hi = s_Y * A_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fadd.s1 A_lo = tmp, A_lo // A_lo = tmp + A_lo - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 Res_hi = sigma, A_hi, P_hi // Res_hi = P_hi + sigma * A_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fsub.s1 tmp = P_hi, Res_hi // tmp = P_hi - Res_hi - nop.i 999 -} -;; - -// -// Test if A_lo is zero -// -{ .mfi - nop.m 999 - fclass.m p6,p0 = A_lo, 0x007 // Test A_lo = 0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p6) mov A_lo = tmp_small // If A_lo zero, make very small - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 tmp = A_hi, sigma, tmp // tmp = sigma * A_hi + tmp - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 sigma = A_lo, sigma, P_lo // sigma = A_lo * sigma + P_lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 Res_lo = s_Y, sigma, tmp // Res_lo = s_Y * sigma + tmp - nop.i 999 -} -;; - -// -// Test if Res_lo is denormal -// -{ .mfi - nop.m 999 - fclass.m p14, p15 = Res_lo, 0x0b - nop.i 999 -} -;; - -// -// Compute Result = Res_lo + Res_hi. Use s3 if Res_lo is denormal. -// -{ .mfi - nop.m 999 -(p14) fadd.s3 Result = Res_lo, Res_hi // Result for Res_lo denormal - nop.i 999 -} -{ .mfi - nop.m 999 -(p15) fadd.s0 Result = Res_lo, Res_hi // Result for Res_lo normal - nop.i 999 -} -;; - -// -// If Res_lo is denormal test if Result equals zero -// -{ .mfi - nop.m 999 -(p14) fclass.m.unc p14, p0 = Result, 0x07 - nop.i 999 -} -;; - -// -// If Res_lo is denormal and Result equals zero, raise inexact, underflow -// by squaring small double -// -{ .mfb - nop.m 999 -(p14) fmpy.d.s0 FR_temp = FR_temp, FR_temp - br.ret.sptk b0 // Exit POLY path, 0 < Q < 2^-3 -} -;; - - -ATANL_UNSUPPORTED: -{ .mfb - nop.m 999 - fmpy.s0 Result = ArgX,ArgY - br.ret.sptk b0 -} -;; - -// Here if y natval, nan, inf, zero -ATANL_Y_SPECIAL: -// Here if x natval, nan, inf, zero -ATANL_X_SPECIAL: -{ .mfi - nop.m 999 - fclass.m p13,p12 = ArgY_orig, 0x0c3 // Test y nan - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p15,p14 = ArgY_orig, 0x103 // Test y natval - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p12) fclass.m p13,p0 = ArgX_orig, 0x0c3 // Test x nan - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p14) fclass.m p15,p0 = ArgX_orig, 0x103 // Test x natval - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p13) fmpy.s0 Result = ArgX_orig, ArgY_orig // Result nan if x or y nan -(p13) br.ret.spnt b0 // Exit if x or y nan -} -;; - -{ .mfb - nop.m 999 -(p15) fmpy.s0 Result = ArgX_orig, ArgY_orig // Result natval if x or y natval -(p15) br.ret.spnt b0 // Exit if x or y natval -} -;; - - -// Here if x or y inf or zero -ATANL_SPECIAL_HANDLING: -{ .mfi - nop.m 999 - fclass.m p6, p7 = ArgY_orig, 0x007 // Test y zero - mov special = 992 // Offset to table -} -;; - -{ .mfb - add table_ptr1 = table_base, special // Point to 3pi/4 - fcmp.eq.s0 p0, p9 = ArgX_orig, ArgY_orig // Dummy to set denormal flag -(p7) br.cond.spnt ATANL_ArgY_Not_ZERO // Branch if y not zero -} -;; - -// Here if y zero -{ .mmf - ldfd Result = [table_ptr1], 8 // Get pi high - nop.m 999 - fclass.m p14, p0 = ArgX, 0x035 // Test for x>=+0 -} -;; - -{ .mmf - nop.m 999 - ldfd Result_lo = [table_ptr1], -8 // Get pi lo - fclass.m p15, p0 = ArgX, 0x036 // Test for x<=-0 -} -;; - -// -// Return sign_Y * 0 when ArgX > +0 -// -{ .mfi - nop.m 999 -(p14) fmerge.s Result = ArgY, f0 // If x>=+0, y=0, hi sgn(y)*0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p13, p0 = ArgX, 0x007 // Test for x=0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p14) fmerge.s Result_lo = ArgY, f0 // If x>=+0, y=0, lo sgn(y)*0 - nop.i 999 -} -;; - -{ .mfi -(p13) mov GR_Parameter_TAG = 36 // Error tag for x=0, y=0 - nop.f 999 - nop.i 999 -} -;; - -// -// Return sign_Y * pi when ArgX < -0 -// -{ .mfi - nop.m 999 -(p15) fmerge.s Result = ArgY, Result // If x<0, y=0, hi=sgn(y)*pi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p15) fmerge.s Result_lo = ArgY, Result_lo // If x<0, y=0, lo=sgn(y)*pi - nop.i 999 -} -;; - -// -// Call error support function for atan(0,0) -// -{ .mfb - nop.m 999 - fadd.s0 Result = Result, Result_lo -(p13) br.cond.spnt __libm_error_region // Branch if atan(0,0) -} -;; - -{ .mib - nop.m 999 - nop.i 999 - br.ret.sptk b0 // Exit for y=0, x not 0 -} -;; - -// Here if y not zero -ATANL_ArgY_Not_ZERO: -{ .mfi - nop.m 999 - fclass.m p0, p10 = ArgY, 0x023 // Test y inf - nop.i 999 -} -;; - -{ .mfb - nop.m 999 - fclass.m p6, p0 = ArgX, 0x017 // Test for 0 <= |x| < inf -(p10) br.cond.spnt ATANL_ArgY_Not_INF // Branch if 0 < |y| < inf -} -;; - -// Here if y=inf -// -// Return +PI/2 when ArgY = +Inf and ArgX = +/-0 or normal -// Return -PI/2 when ArgY = -Inf and ArgX = +/-0 or normal -// Return +PI/4 when ArgY = +Inf and ArgX = +Inf -// Return -PI/4 when ArgY = -Inf and ArgX = +Inf -// Return +3PI/4 when ArgY = +Inf and ArgX = -Inf -// Return -3PI/4 when ArgY = -Inf and ArgX = -Inf -// -{ .mfi - nop.m 999 - fclass.m p7, p0 = ArgX, 0x021 // Test for x=+inf - nop.i 999 -} -;; - -{ .mfi -(p6) add table_ptr1 = 16, table_ptr1 // Point to pi/2, if x finite - fclass.m p8, p0 = ArgX, 0x022 // Test for x=-inf - nop.i 999 -} -;; - -{ .mmi -(p7) add table_ptr1 = 32, table_ptr1 // Point to pi/4 if x=+inf -;; -(p8) add table_ptr1 = 48, table_ptr1 // Point to 3pi/4 if x=-inf - - nop.i 999 -} -;; - -{ .mmi - ldfd Result = [table_ptr1], 8 // Load pi/2, pi/4, or 3pi/4 hi -;; - ldfd Result_lo = [table_ptr1], -8 // Load pi/2, pi/4, or 3pi/4 lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmerge.s Result = ArgY, Result // Merge sgn(y) in hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmerge.s Result_lo = ArgY, Result_lo // Merge sgn(y) in lo - nop.i 999 -} -;; - -{ .mfb - nop.m 999 - fadd.s0 Result = Result, Result_lo // Compute complete result - br.ret.sptk b0 // Exit for y=inf -} -;; - -// Here if y not INF, and x=0 or INF -ATANL_ArgY_Not_INF: -// -// Return +PI/2 when ArgY NOT Inf, ArgY > 0 and ArgX = +/-0 -// Return -PI/2 when ArgY NOT Inf, ArgY < 0 and ArgX = +/-0 -// Return +0 when ArgY NOT Inf, ArgY > 0 and ArgX = +Inf -// Return -0 when ArgY NOT Inf, ArgY > 0 and ArgX = +Inf -// Return +PI when ArgY NOT Inf, ArgY > 0 and ArgX = -Inf -// Return -PI when ArgY NOT Inf, ArgY > 0 and ArgX = -Inf -// -{ .mfi - nop.m 999 - fclass.m p7, p9 = ArgX, 0x021 // Test for x=+inf - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fclass.m p6, p0 = ArgX, 0x007 // Test for x=0 - nop.i 999 -} -;; - -{ .mfi -(p6) add table_ptr1 = 16, table_ptr1 // Point to pi/2 - fclass.m p8, p0 = ArgX, 0x022 // Test for x=-inf - nop.i 999 -} -;; - -.pred.rel "mutex",p7,p9 -{ .mfi -(p9) ldfd Result = [table_ptr1], 8 // Load pi or pi/2 hi -(p7) fmerge.s Result = ArgY, f0 // If y not inf, x=+inf, sgn(y)*0 - nop.i 999 -} -;; - -{ .mfi -(p9) ldfd Result_lo = [table_ptr1], -8 // Load pi or pi/2 lo -(p7) fnorm.s0 Result = Result // If y not inf, x=+inf normalize - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fmerge.s Result = ArgY, Result // Merge sgn(y) in hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fmerge.s Result_lo = ArgY, Result_lo // Merge sgn(y) in lo - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p9) fadd.s0 Result = Result, Result_lo // Compute complete result - br.ret.spnt b0 // Exit for y not inf, x=0,inf -} -;; - -GLOBAL_IEEE754_END(atan2l) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region#) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_cbrt.S b/sysdeps/ia64/fpu/s_cbrt.S deleted file mode 100644 index 7a74ac19be..0000000000 --- a/sysdeps/ia64/fpu/s_cbrt.S +++ /dev/null @@ -1,767 +0,0 @@ -.file "cbrt.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 05/19/00 New version (modified algorithm) -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/28/03 Updated polynomial coefficients (changed to Remez coefficients), -// to slightly improve accuracy -// -// API -//============================================================== -// double cbrt(double) -// -// Overview of operation -//============================================================== -// Background -// -// Implementation -// -// Let y= frcpa(a), where a is the argument -// -// cbrt(a)= cbrt(a*y)/cbrt(y) = cbrt(1 - (1-a*y)) * (1/cbrt(y)) -// -// For all values of y, the 3 possible significands of 1/cbrt(y) -// are stored in a table (T0) to 64 bits of accuracy. (There are -// 3 possible significands because the exponent of y modulo 3 -// can be 0, 1, or 2.) -// -// -// * cbrt(1 - (1-a*y)) is approximated by a degree-5 polynomial ~ -// -// ~ 1 - (1/3)*r - (1/9)*r^2 - (5/81)*r^3 - (10/243)*r^4 - (22/729)*r^5 -// -// in r = 1-a*y. -// -// -// The table values are stored for three exponent values and are -// then multiplied by e/3 where e is the exponent of the input number. -// This computation is carried out in parallel with the polynomial -// evaluation: -// -// T= 2^(e/3) * T0 - - - - - -//=============== -// input= x -// C= frcpa(x) -// r= 1 - C * x -// -// Special values -//============================================================== - - - -// Registers used -//============================================================== -// f6-f15 -// GR_GP, r23-r26, r28-r30 -// p6, p7, p8, p12 - - FR_R = f6 - FR_COEFF1 = f7 - FR_COEFF2 = f9 - FR_COEFF3 = f10 - FR_COEFF4 = f11 - FR_COEFF5 = f12 - FR_R2 = f13 - FR_ARG = f14 - FR_P23 = f15 - FR_P25 = f32 - FR_P15 = f33 - FR_P1 = f34 - FR_P45 = f35 - FR_2EXP = f36 - FR_TMP63 = f37 - - GR_GP = r2 - GR_ADDR = r2 - GR_CONST1 = r3 - GR_I1 = r8 - GR_EXP = r9 - GR_ADDR2 = r10 - GR_IT1 = r11 - GR_TMP2 = r11 - GR_EXPON = r15 - GR_TMP1 = r16 - GR_TMP6 = r16 - GR_ITB1 = r17 - GR_TMP3 = r18 - GR_TMP4 = r19 - GR_TMP63 = r19 - GR_TMP5 = r20 - GR_EXP_BY_3 = r20 - GR_CONST4 = r21 - GR_TMP6 = r22 - GR_INDEX = r23 - GR_EBIAS = r24 - GR_SIGNIF = r25 - GR_SIGNIF2 = r25 - GR_TEST = r25 - GR_ARGEXP = r26 - GR_CONST2 = r27 - GR_SIGN = r28 - GR_REM = r29 - GR_CONST3 = r30 - GR_SEXP = r31 - - - - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(poly_coeffs) - - data8 0xaaaaaaaaaaaaaab4, 0x0000bffd // ~ 1/3 - data8 0xbfbc71c71c718e45, 0xbfaf9add3c0bbb43 - data8 0xbfa511edb93dc98d, 0xbf9ee71c45f0dfbc -LOCAL_OBJECT_END(poly_coeffs) - - -// For every entry B in the frcpa table, this table contains -// the significands of cbrt(1/B), cbrt(2/B), cbrt(4/B). -// The index to this table is the same as the frcpa index. - -LOCAL_OBJECT_START(T_table) - - - data8 0x80155c748c374836, 0xa160019ed37fb4ae - data8 0xcb51ddcb9e93095e, 0x8040404b0879f7f9 - data8 0xa1960b5966da4608, 0xcb95f333968ad59b - data8 0x806b5dce4b405c10, 0xa1cc5dbe6dc2aab4 - data8 0xcbda64292d3ffd97, 0x8096b586974669b1 - data8 0xa202f97995b69c0d, 0xcc1f3184af961596 - data8 0x80bcd273d952a028, 0xa232fe6eb0c0577d - data8 0xcc5bb1ac954d33e2, 0x80e898c52813f2f3 - data8 0xa26a2582012f6e17, 0xcca12e9831fc6402 - data8 0x81149add67c2d208, 0xa2a197e5d10465cb - data8 0xcce70a67b64f24ad, 0x813b4e2c856b6e9a - data8 0xa2d25a532efefbc8, 0xcd24794726477ea5 - data8 0x8167c1dde03de7aa, 0xa30a5bd6e49e4ab8 - data8 0xcd6b096a0b70ee87, 0x818ed973b811135e - data8 0xa33b9c9b59879e24, 0xcda9177738b15a90 - data8 0x81bbc0c33e13ec98, 0xa3742fca6a3c1f21 - data8 0xcdf05f2247dffab9, 0x81e33e69fbe7504a - data8 0xa3a5f1273887bf22, 0xce2f0f347f96f906 - data8 0x820aec524e3c23e9, 0xa3d7ef508ff11574 - data8 0xce6e0be0cd551a61, 0x823880f78e70b805 - data8 0xa4115ce30548bc15, 0xceb666b2c347d1de - data8 0x826097a62a8e5200, 0xa443df0e53df577a - data8 0xcef609b0cb874f00, 0x8288dfe00e9b5eaf - data8 0xa4769fa5913c0ec3, 0xcf35fb5447e5c765 - data8 0x82b15a10c5371624, 0xa4a99f303bc7def5 - data8 0xcf763c47ee869f00, 0x82da06a527b18937 - data8 0xa4dcde37779adf4b, 0xcfb6cd3888d71785 - data8 0x8302e60b635ab394, 0xa5105d46152c938a - data8 0xcff7aed4fbfbb447, 0x832bf8b2feec2f0e - data8 0xa5441ce89825cb8d, 0xd038e1ce5167e3c6 - data8 0x83553f0ce00e276b, 0xa5781dad3e54d899 - data8 0xd07a66d7bfa0ebba, 0x837eb98b50f8322a - data8 0xa5ac602406c4e68c, 0xd0bc3ea6b32d1b21 - data8 0x83a270f44c84f699, 0xa5d9601d95c2c0bc - data8 0xd0f4f0e8f36c1bf8, 0x83cc4d7cfcfac5ca - data8 0xa60e1e1a2de14745, 0xd1376458e34b037e - data8 0x83f65f78a8872b4c, 0xa6431f6e3fbd9658 - data8 0xd17a2ca133f78572, 0x8420a75f2f7b53c8 - data8 0xa67864b0d432fda4, 0xd1bd4a80301c5715 - data8 0x844510461ff14209, 0xa6a6444aa0243c0b - data8 0xd1f71682b2fa4575, 0x846fbd91b930bed2 - data8 0xa6dc094d10f25792, 0xd23ad555f773f059 - data8 0x84947e18234f3294, 0xa70a574cc02bba69 - data8 0xd2752c7039a5bf73, 0x84bf92755825045a - data8 0xa7409e2af9549084, 0xd2b98ee008c06b59 - data8 0x84e4ac0ee112ba51, 0xa76f5c64ca2cf13b - data8 0xd2f4735ffd700280, 0x8509ef44b86f20be - data8 0xa79e4f0babab5dc0, 0xd32f99ed6d9ac0e1 - data8 0x85359d5d91768427, 0xa7d5579ae5164b85 - data8 0xd374f0666c75d51c, 0x855b3bd5b7384357 - data8 0xa804bd3c6fe61cc8, 0xd3b0a7d13618e4a1 - data8 0x858104f0c415f79a, 0xa8345895e5250a5a - data8 0xd3eca2ea53bcec0c, 0x85a6f90390d29864 - data8 0xa8642a122b44ef0b, 0xd428e23874f13a17 - data8 0x85d3772fcd56a1dd, 0xa89c38ca18f6108b - data8 0xd46f82fe293bc6d3, 0x85f9c982fcc002f3 - data8 0xa8cc81063b6e87ca, 0xd4ac57e9b7186420 - data8 0x862047e0e7ea554b, 0xa8fd00bfa409285e - data8 0xd4e972becb04e8b8, 0x8646f2a26f7f5852 - data8 0xa92db8664d5516da, 0xd526d40a7a9b43a3 - data8 0x866dca21754096b5, 0xa95ea86b75cc2c20 - data8 0xd5647c5b73917370, 0x8694ceb8dfd17a37 - data8 0xa98fd141a4992deb, 0xd5a26c4201bd6d13 - data8 0x86bc00c49e9307e8, 0xa9c1335cae7446ba - data8 0xd5e0a45015350a7e, 0x86dccd74fce79610 - data8 0xa9ea8686f556f645, 0xd614b539c6194104 - data8 0x870453c845acf90f, 0xaa1c52d17906bb19 - data8 0xd6537310e224283f, 0x872c089a1e90342c - data8 0xaa4e59b046dab887, 0xd6927ab62244c917 - data8 0x8753ec4a92d16c5e, 0xaa809b9c60d1890b - data8 0xd6d1ccc1fc4ef4b7, 0x877bff3aca19f6b4 - data8 0xaab319102f3f9b33, 0xd71169cea98fdded - data8 0x879d88b6fe1c324c, 0xaadd5a18c1e21274 - data8 0xd746a66a5bc9f6d9, 0x87c5f346dbf98c3a - data8 0xab1045f2ac31bdf5, 0xd786ce8f0fae5317 - data8 0x87e7c653efacef2c, 0xab3ae3ab2df7231e - data8 0xd7bc7ff214c4e75a, 0x881089d4e73ffefc - data8 0xab6e3f945d1e96fc, 0xd7fd35467a517ed1 - data8 0x88397e6a366f2a8a, 0xaba1d953a08fa94e - data8 0xd83e38838648d815, 0x885bc559e5e1c081 - data8 0xabcd090db7ef4c3f, 0xd874a1db598b8951 - data8 0x887e2ee392bb7a93, 0xabf864602d7c323d - data8 0xd8ab42205b80edaf, 0x88a7a8587e404257 - data8 0xac2ca5886ccf9b57, 0xd8ed1849d202f965 - data8 0x88ca5eda67594784, 0xac5861d4aa441f0f - data8 0xd92432bd5a173685, 0x88f4356166bd590e - data8 0xac8d183fe3a2fbed, 0xd9669ca45b03c23e - data8 0x89173a0acf5ce026, 0xacb93703ff51571e - data8 0xd99e3327cf89574e, 0x893a62a098b6a57b - data8 0xace5830ad0c3f14b, 0xd9d602b19b100466 - data8 0x895daf637236ae2c, 0xad11fca5d78b3ff2 - data8 0xda0e0ba86c096841, 0x89883b9d1c2fa9c5 - data8 0xad4797fddf91a798, 0xda5195fcdb1c3dce - data8 0x89abd8dd374a5d7b, 0xad747701e559ebcb - data8 0xda8a1eb87a491f6c, 0x89cf9b1dcd197fa0 - data8 0xada184a47e9c7613, 0xdac2e230b91c3f84 - data8 0x89f382a258ea79de, 0xadcec13ab0dda8ff - data8 0xdafbe0d0b66aea30, 0x8a178faf06648f29 - data8 0xadfc2d1a5fd21ba8, 0xdb351b04a8fafced - data8 0x8a3bc288b3e1d18a, 0xae29c89a5053c33a - data8 0xdb6e9139e33cdd8e, 0x8a601b74f4d1f835 - data8 0xae5794122b638df9, 0xdba843ded7151ea1 - data8 0x8a849aba14274764, 0xae858fda8137ae0a - data8 0xdbe2336319b61fc8, 0x8aa9409f16cdbc9b - data8 0xaeb3bc4ccc56d3d1, 0xdc1c60376789fa68 - data8 0x8ace0d6bbe2cb316, 0xaee219c374c09920 - data8 0xdc56cacda82d0cd5, 0x8af301688ab33558 - data8 0xaf10a899d3235fe7, 0xdc917398f2797814 - data8 0x8b181cdebe6f3206, 0xaf3f692c341fe8b4 - data8 0xdccc5b0d90a3e628, 0x8b3d60185fafcb7c - data8 0xaf6e5bd7db9ae6c2, 0xdd0781a10469f0f2 - data8 0x8b62cb603bb2fad0, 0xaf9d80fb081cd91b - data8 0xdd42e7ca0b52838f, 0x8b80d7d6bc4104de - data8 0xafc35ce063eb3787, 0xdd729ad01c69114d - data8 0x8ba68bf73ac74f39, 0xaff2ddcb5f28f03d - data8 0xddae749c001fbf5e, 0x8bcc68fb9f9f7335 - data8 0xb022923b148e05c5, 0xddea8f50a51c69b1 - data8 0x8bf26f31c534fca2, 0xb0527a919adbf58b - data8 0xde26eb69a0f0f111, 0x8c10f86e13a1a1f9 - data8 0xb078f3ab1d701c65, 0xde576480262399bc - data8 0x8c3749916cc6abb5, 0xb0a93a6870649f31 - data8 0xde943789645933c8, 0x8c5dc4c4f7706032 - data8 0xb0d9b624d62ec856, 0xded14d58139a28af - data8 0x8c7cac3a8c42e3e0, 0xb100a5f53fb3c8e1 - data8 0xdf025c00bbf2b5c7, 0x8ca373f1b7bf2716 - data8 0xb131821882f5540a, 0xdf3feb44d723a713 - data8 0x8cc29907fb951294, 0xb158bf8e4cb04055 - data8 0xdf715bc16c159be0, 0x8ce9ae4e9492aac8 - data8 0xb189fd69d56b238f, 0xdfaf66240e29cda8 - data8 0x8d0911dddbfdad0e, 0xb1b189958e8108e4 - data8 0xdfe139cbf6e19bdc, 0x8d3075c4f20f04ee - data8 0xb1e32a8165b09832, 0xe01fc0fe94d9fc52 - data8 0x8d5018a9d4de77d5, 0xb20b0678fc271eec - data8 0xe051f92ffcc0bd60, 0x8d77cc47dd143515 - data8 0xb23d0bd3f7592b6e, 0xe090feec9c9a06ac - data8 0x8d97af6352739cb7, 0xb26538b2db8420dc - data8 0xe0c39d0c9ff862d6, 0x8db7af523167800f - data8 0xb28d89e339ceca14, 0xe0f668eeb99f188d - data8 0x8ddfd80bc68c32ff, 0xb2c022ca12e55a16 - data8 0xe1362890eb663139, 0x8e00197e1e7c88fe - data8 0xb2e8c6852c6b03f1, 0xe1695c7212aecbaa - data8 0x8e207859f77e20e7, 0xb3118f4eda9fe40f - data8 0xe19cbf0391bbbbe9, 0x8e40f4ce60c9f8e2 - data8 0xb33a7d6268109ebe, 0xe1d050901c531e85 - data8 0x8e69ba46cf2fde4d, 0xb36ddbc5ea70ec55 - data8 0xe2110903b4f4047a, 0x8e8a7a00bd7ae63e - data8 0xb3971e9b39264023, 0xe2450559b4d80b6d - data8 0x8eab57ef1cf2f529, 0xb3c0877ecc18e24a - data8 0xe27931a231554ef3, 0x8ecc5442cffb1dad - data8 0xb3ea16ae3a6c905f, 0xe2ad8e2ac3c5b04b - data8 0x8eed6f2d2a4acbfe, 0xb413cc67aa0e4d2d - data8 0xe2e21b41b9694cce, 0x8f0ea8dff24441ff - data8 0xb43da8e9d163e1af, 0xe316d93615862714 - data8 0x8f385c95d696b817, 0xb47233773b84d425 - data8 0xe3590bd86a0d30f9, 0x8f59dc43edd930f3 - data8 0xb49c6825430fe730, 0xe38e38e38e38e38e - data8 0x8f7b7b5f5ffad1c4, 0xb4c6c46bcdb27dcf - data8 0xe3c397d1e6db7839, 0x8f9d3a1bea165f38 - data8 0xb4f1488c0b35d26f, 0xe3f928f5953feb9e - data8 0x8fbf18adc34b66da, 0xb51bf4c7c51f0168 - data8 0xe42eeca17c62886c, 0x8fe117499e356095 - data8 0xb546c9616087ab9c, 0xe464e32943446305 - data8 0x90033624aa685f8d, 0xb571c69bdffd9a70 - data8 0xe49b0ce15747a8a2, 0x9025757495f36b86 - data8 0xb59cecbae56984c3, 0xe4d16a1eee94e9d4 - data8 0x903f3a5dcc091203, 0xb5bd64512bb14bb7 - data8 0xe4fa52107353f67d, 0x9061b2fceb2bdbab - data8 0xb5e8d2a4bf5ba416, 0xe5310a471f4d2dc3 - data8 0x90844ca7211032a7, 0xb6146a9a1bc47819 - data8 0xe567f6f1c2b9c224, 0x90a7079403e6a15d - data8 0xb6402c7749d621c0, 0xe59f18689a9e4c9a - data8 0x90c9e3fbafd63799, 0xb66c1882fb435ea2 - data8 0xe5d66f04b8a68ecf, 0x90ece216c8a16ee4 - data8 0xb6982f048c999a56, 0xe60dfb2005c192e9 - data8 0x9110021e7b516f0a, 0xb6c47044075b4142 - data8 0xe645bd1544c7ea51, 0x912a708a39be9075 - data8 0xb6e5bd6bfd02bafd, 0xe66fb21b505b20a0 - data8 0x914dcc7b31146370, 0xb7124a2736ff8ef2 - data8 0xe6a7d32af4a7c59a, 0x91714af8cfe984d5 - data8 0xb73f026a01e94177, 0xe6e02b129c6a5ae4 - data8 0x918c00a6f3795e97, 0xb760a959f1d0a7a7 - data8 0xe70a9136a7403039, 0x91afbc299ed0295d - data8 0xb78dae7e06868ab0, 0xe74349fb2d92a589 - data8 0x91d39add3e958db0, 0xb7badff8ad9e4e02 - data8 0xe77c3a9c86ed7d42, 0x91ee9920a8974d92 - data8 0xb7dce25b8e17ae9f, 0xe7a713f88151518a - data8 0x9212b5fcac537c19, 0xb80a6226904045e2 - data8 0xe7e067453317ed2b, 0x9236f6b256923fcf - data8 0xb8380f1cafd73c1c, 0xe819f37a81871bb5 - data8 0x92523ee6f90dcfc3, 0xb85a6ea8e321b4d8 - data8 0xe8454236bfaeca14, 0x9276bef031e6eb79 - data8 0xb8886b684ae7d2fa, 0xe87f32f24c3fc90e - data8 0x929236ec237a24ad, 0xb8ab0726fa00cf5d - data8 0xe8aacd8688892ba6, 0x92b6f70b7efe9dc3 - data8 0xb8d954a4d13b7cb1, 0xe8e523fd32f606f7 - data8 0x92d29f61eec7dc2b, 0xb8fc2d4f6cd9f04a - data8 0xe9110b5311407927, 0x92f7a05d5b8ba92f - data8 0xb92acc851476b1ab, 0xe94bc8bf0c108fa3 - data8 0x931379a403be5c16, 0xb94de2d841a184c2 - data8 0xe977fdc439c2ca3c, 0x9338bc44de2e3f34 - data8 0xb97cd4c36c92693c, 0xe9b3236528fc349e - data8 0x9354c71412c69486, 0xb9a0297f172665e3 - data8 0xe9dfa70b745ac1b4, 0x937a4c273907e262 - data8 0xb9cf6f21e36c3924, 0xea1b36268d0eaa38 - data8 0x93968919f6e7975d, 0xb9f3030951267208 - data8 0xea480963fd394197, 0x93bc516fdd4680c9 - data8 0xba229d6a618e7c59, 0xea84034425f27484 - data8 0x93d8c123d9be59b2, 0xba467144459f9855 - data8 0xeab12713138dd1cc, 0x93f546c955e60076 - data8 0xba6a60c3c48f1a4b, 0xeade6db73a5e503b - data8 0x941b70a65879079f, 0xba9a76056b67ee7a - data8 0xeb1b0268343b121b, 0x943829f337410591 - data8 0xbabea699563ada6e, 0xeb489b0b2bdb5f14 - data8 0x9454f995765bc4d2, 0xbae2f350b262cc4b - data8 0xeb765721e85f03d0, 0x947b86b57f5842ed - data8 0xbb1385a23be24e57, 0xebb389645f222f62 - data8 0x94988aeb23470f86, 0xbb3814975e17c680 - data8 0xebe198f090607e0c, 0x94b5a5dc9695f42a - data8 0xbb5cc031009bf467, 0xec0fcc9321024509 - data8 0x94d2d7a9170d8b42, 0xbb81889680024764 - data8 0xec3e247da8b82f61, 0x94f9e87dd78bf019 - data8 0xbbb2c0d8703ae95d, 0xec7c27d21321c9f7 - data8 0x95175019a503d89e, 0xbbd7cd09ba3c5463 - data8 0xecaad5278824e453, 0x9534cefa625fcb3a - data8 0xbbfcf68c4977718f, 0xecd9a76d097d4e77 - data8 0x955265405c491a25, 0xbc223d88cfc88eee - data8 0xed089ed5dcd99446, 0x9570130c1f9bb857 - data8 0xbc47a2284fee4ff8, 0xed37bb95add09a1c - data8 0x9597ca4119525184, 0xbc79ac0916ed7b8a - data8 0xed76c70508f904b6, 0x95b5af6fb5aa4d3c - data8 0xbc9f5670d1a13030, 0xeda63bb05e7f93c6 - data8 0x95d3ac9273aafd7a, 0xbcc51f068cb95c1d - data8 0xedd5d661daed2dc4, 0x95f1c1cafdfd3684 - data8 0xbceb05f4b30a9bc0, 0xee05974eef86b903 - data8 0x960fef3b430b8d5f, 0xbd110b6604c7d306 - data8 0xee357ead791fc670, 0x962e350575b409c5 - data8 0xbd372f8598620f19, 0xee658cb3c134a463 - data8 0x964c934c0dfc1708, 0xbd5d727edb6b3c7e - data8 0xee95c1987f080211, 0x966b0a31c9c6bc7d - data8 0xbd83d47d937bbc6d, 0xeec61d92d8c4314f - data8 0x968999d9ad8d264e, 0xbdaa55addf1ae47d - data8 0xeef6a0da64a014ac, 0x96a8426705198795 - data8 0xbdd0f63c36aa73f0, 0xef274ba72a07c811 - data8 0x96c703fd64445ee5, 0xbdf7b6556d550a15 - data8 0xef581e31a2c91260, 0x96e5dec0a7b4268d - data8 0xbe1e9626b1ffa96b, 0xef8918b2bc43aec6 - data8 0x9704d2d4f59f79f3, 0xbe4595dd903e5371 - data8 0xefba3b63d89d7cbf, 0x9723e05ebe91b9b0 - data8 0xbe6cb5a7f14bc935, 0xefeb867ecffaa607 - data8 0x97430782be323831, 0xbe93f5b41d047cf7 - data8 0xf01cfa3df1b9c9fa, 0x97624865fc0df8bf - data8 0xbebb5630bae4c15f, 0xf04e96dc05b43e2d - data8 0x9781a32dcc640b2a, 0xbee2d74cd30a430c - data8 0xf0805c944d827454, 0x97a117ffd0f48e46 - data8 0xbf0a7937cf38d981, 0xf0b24ba285c495cb - data8 0x97c0a701f9d263c9, 0xbf323c217be2bc8c - data8 0xf0e46442e76f6569, 0x97e0505a8637a036 - data8 0xbf5a203a09342bbb, 0xf116a6b2291d7896 - data8 0x97f57a9fb0b08c6e, 0xbf74cad1c14ebfc4 - data8 0xf1383fa9e9b5b381, 0x9815503365914a9d - data8 0xbf9ce6a497a89f78, 0xf16ac84f90083b9b - data8 0x98354085054fd204, 0xbfc52428bec6e72f - data8 0xf19d7b686dcb03d7, 0x98554bbbf8a77902 - data8 0xbfed838fddab024b, 0xf1d0593311db1757 - data8 0x987571fffb7f94f6, 0xc016050c0420981a - data8 0xf20361ee8f1c711e, 0x9895b3791dd03c23 - data8 0xc03ea8cfabddc330, 0xf23695da7de51d3f - data8 0x98ab43a5fc65d0c8, 0xc059d3cbd65ddbce - data8 0xf258d095e465cc35, 0x98cbb2d196bd713d - data8 0xc082b122a3c78c9d, 0xf28c4d0bfc982b34 - data8 0x98ec3d9ec7b6f21a, 0xc0abb1499ae736c4 - data8 0xf2bff55eb3f0ea71, 0x990ce436db5e8344 - data8 0xc0d4d474c3aedaaf, 0xf2f3c9cf9884636e - data8 0x9922b8218160967a, 0xc0f054ca33eb3437 - data8 0xf31670135ab9cc0f, 0x99438d686f75779d - data8 0xc119b2c67e600ed0, 0xf34a8e9f0b54cdfb - data8 0x99647eea131fa20b, 0xc1433453de2033ff - data8 0xf37ed9fa6b8add3f, 0x997a85045a47c6d0 - data8 0xc15ef3e44e10032d, 0xf3a1cfe884ef6bb6 - data8 0x999ba5f14f8add02, 0xc188b130431d80e6 - data8 0xf3d66689dcc8e8d3, 0x99bce38b5465ecae - data8 0xc1b2929d6067730e, 0xf40b2ab069d5c96a - data8 0x99d31ca0887f30f9, 0xc1ce9268f31cc734 - data8 0xf42e718b90c8bc16, 0x99f48a669c74c09e - data8 0xc1f8b0877c1b0c08, 0xf463822a0a3b4b00 - data8 0x9a16154eb445c873, 0xc222f35a87b415ba - data8 0xf498c1076015faf8, 0x9a2c822ec198d667 - data8 0xc23f3467349e5c88, 0xf4bc5a19a33990b5 - data8 0x9a4e3e080cd91b78, 0xc269b4e40e088c01 - data8 0xf4f1e6a7d6f5425f, 0x9a70177afe52322e - data8 0xc2945aac24daaf6e, 0xf527a232cf6be334 - data8 0x9a86b8fa94eebe10, 0xc2b0de05e43c1d66 - data8 0xf54b8ecdcda90851, 0x9aa8c42866ae2958 - data8 0xc2dbc275e1229d09, 0xf5819949c7ad87b4 - data8 0x9abf86f9e12fc45e, 0xc2f86fca9d80eeff - data8 0xf5a5bac9213b48a9, 0x9ae1c462fc05f49d - data8 0xc323938449a2587e, 0xf5dc1501f324a812 - data8 0x9af8a8dc936b84d0, 0xc3406b40a538ed20 - data8 0xf6006bee86b5589e, 0x9b1b19033be35730 - data8 0xc36bcee8211d15e0, 0xf63716b2fa067fa4 - data8 0x9b3da7daf04c2892, 0xc397593adf2ba366 - data8 0xf66df22fb6132b9c, 0x9b54c2e4c8a9012b - data8 0xc3b475b6206155d5, 0xf6929fb98225deb1 - data8 0x9b77854e6c661200, 0xc3e0410243b97383 - data8 0xf6c9cd13021e3fea, 0x9b8ec2e678d56d2f - data8 0xc3fd890709833d37, 0xf6eeb177472cedae - data8 0x9ba60e6a5ca133b6, 0xc41ae295f7e7fa06 - data8 0xf713abf4cb0b3afb, 0x9bc919ea66a151a4 - data8 0xc44709f7bb8a4dd2, 0xf74b4d5333684ef1 - data8 0x9be0887c09ef82bb, 0xc4648fb0e0bec4c1 - data8 0xf7707f75a72f8e94, 0x9c03c8d5fffc3503 - data8 0xc490f9a94695ba14, 0xf7a874b97927af44 - data8 0x9c1b5ad21a81cbb9, 0xc4aeac0173b7d390 - data8 0xf7cddf140aedf1d8, 0x9c3ed09216e9ca02 - data8 0xc4db5941007aa853, 0xf806291bacb7f7a9 - data8 0x9c568656c0423def, 0xc4f938aec206291a - data8 0xf82bcc43b92eafef, 0x9c7a320af242ce60 - data8 0xc52629e899dfd622, 0xf8646bf0defb759e - data8 0x9c920bf7a8c01dc2, 0xc54436e44043b965 - data8 0xf88a487dfc3ff5f7, 0x9ca9f475d98b159c - data8 0xc562563abf9ea07f, 0xf8b03c2b46cdc17f - data8 0x9ccdeca60e80b5f8, 0xc58fa7d1dc42921c - data8 0xf8e95541c152ae7a, 0x9ce5f9d4653d4902 - data8 0xc5adf561b91e110a, 0xf90f832c2700c160 - data8 0x9cfe15cb38bfdd8e, 0xc5cc5591bdbd82fa - data8 0xf935c88e0c7f419b, 0x9d225b983f6c1f96 - data8 0xc5fa08f1ff20593c, 0xf96f5cd84fd86873 - data8 0x9d3a9cca32261ed7, 0xc618980a79ce6862 - data8 0xf995dd53ebdd9d6d, 0x9d52ecfccebe1768 - data8 0xc6373a09e34b50fa, 0xf9bc75a034436a41 - data8 0x9d77818d95b82f86, 0xc66550a6e0baaf35 - data8 0xf9f686f26d5518de, 0x9d8ff7893fa4706c - data8 0xc6842241926342c9, 0xfa1d5b39b910a8c5 - data8 0x9da87cbef36f2a5e, 0xc6a3070b7c93bb9e - data8 0xfa4447acc4ecbfd2, 0x9dcd6140b4a35aeb - data8 0xc6d18260bb84081b, 0xfa7ed7e51e6fdfb4 - data8 0x9de60cd06dc6e2d4, 0xc6f0977c9416828b - data8 0xfaa601394d49a1a0, 0x9dfec7d4cc43b76f - data8 0xc70fc0117c641630, 0xfacd431644ce0e40 - data8 0x9e17925ec9fccc4a, 0xc72efc34d7e615be - data8 0xfaf49d96f7a75909, 0x9e3cdf6db57dc075 - data8 0xc75dfb441594141e, 0xfb2fd3c65e562fd5 - data8 0x9e55d110b63637a8, 0xc77d68aa019bda4c - data8 0xfb576c5762024805, 0x9e6ed27594550d2e - data8 0xc79ce9ea478dbc4f, 0xfb7f1debc22c4040 - data8 0x9e87e3adc385d393, 0xc7bc7f1ae453219d - data8 0xfba6e89f32d0190a, 0x9ead9b54b37a1055 - data8 0xc7ec0476e15e141a, 0xfbe2c803a0894893 - data8 0x9ec6d46a3d7de215, 0xc80bcbe16f1d540f - data8 0xfc0ad1ff0ed9ecf0, 0x9ee01d9108be3154 - data8 0xc82ba78a5d349735, 0xfc32f57bdfbcbe7f - data8 0x9ef976db07288d04, 0xc84b978847a06b87 - data8 0xfc5b32968f99b21c, 0x9f12e05a4759ec25 - data8 0xc86b9bf1ee817bc6, 0xfc83896bc861ab08 - data8 0x9f2c5a20f4da6668, 0xc88bb4de3667cdf4 - data8 0xfcabfa1861ed4815, 0x9f52af78ed1733ca - data8 0xc8bc00e7fe9e23a3, 0xfce8d3cea7d3163e - data8 0x9f6c52426a39d003, 0xc8dc4d7ff2d25232 - data8 0xfd118595143ee273, 0x9f860593d42fd7f3 - data8 0xc8fcaeebcb40eb47, 0xfd3a519943d4865a - data8 0x9f9fc97fdb96bd51, 0xc91d25431426a663 - data8 0xfd6337f8e1ae5a4b, 0x9fb99e194f4a7037 - data8 0xc93db09d7fdb2949, 0xfd8c38d1c8e927eb - data8 0x9fd383731ca51db9, 0xc95e5112e721582a - data8 0xfdb5544205095a53, 0x9fed79a04fbf9423 - data8 0xc97f06bb49787677, 0xfdde8a67d2613531 - data8 0xa00780b413b24ee8, 0xc99fd1aecd6e1b06 - data8 0xfe07db619e781611, 0xa02eab2c4474b0cd - data8 0xc9d12a3e27bb1625, 0xfe460768d80bf758 - data8 0xa048dcd51ccfd142, 0xc9f22ad82ba3d5f0 - data8 0xfe6f9bfb06cd32f6, 0xa0631fa894b11b8d - data8 0xca134113105e67b2, 0xfe994bcd3d14fcc2 - data8 0xa07d73ba65e680af, 0xca346d07b045a876 - data8 0xfec316fecaf3f2ab, 0xa097d91e6aaf71b0 - data8 0xca55aecf0e94bb88, 0xfeecfdaf33fadb80 - data8 0xa0b24fe89e02602f, 0xca77068257be9bab - data8 0xff16fffe2fa8fad6, 0xa0ccd82d1bd2f68b - data8 0xca98743ae1c693a8, 0xff411e0ba9db886d - data8 0xa0e77200215909e6, 0xcab9f8122c99a101 - data8 0xff6b57f7c33e4e9a, 0xa1021d760d584855 - data8 0xcadb9221e268c3b5, 0xff95ade2d1bd7358 - data8 0xa11cdaa36068a57d, 0xcafd4283d8043dfd - data8 0xffc01fed60f86fb5, 0xa137a99cbd3f880b - data8 0xcb1f09520d37c6fb, 0xffeaae3832b63956 -LOCAL_OBJECT_END(T_table) - - - - - - - -.section .text -GLOBAL_LIBM_ENTRY(cbrt) - - -{.mfi - // get significand - getf.sig GR_SIGNIF = f8 - // normalize a - fma.s1 FR_ARG = f8, f1, f0 - // GR_GP = pointer to C_1,..., C_5 followed by T_table - addl GR_GP = @ltoff(poly_coeffs), gp ;; -} - -{.mfi - // get exponent - getf.exp GR_ARGEXP = f8 - // will continue only for normal/denormal numbers - fclass.m.unc p12, p13 = f8, 0x1e7 - // GR_CONST4 = bias-((2^{12}-1)/3)-63 = 0xffff-0x555-0x3f = 0xfa6b - mov GR_CONST4 = 0xfa6b ;; -} - -{.mlx - mov GR_CONST2 = 0x20000 - // GR_CONST3 = 2^52 - movl GR_CONST3 = 0x8000000000000000 ;; -} - -.pred.rel "mutex", p12, p13 -{.mfi - // load start address for C_1,..., C_5 followed by T_table - ld8 GR_ADDR = [ GR_GP ] - // y = frcpa(a) - (p13) frcpa.s0 f8, p0 = f1, f8 - // p7 = 1 if denormal input - cmp.gtu p7, p0 = GR_CONST3, GR_SIGNIF -} -{.mfb - nop.m 0 - // if argument is 0, +/-Infinity, NaN, or NaTVal, then return - (p12) fma.d.s0 f8 = f8, f1, f0 - (p12) br.ret.spnt b0 ;; -} - -{.mmi - // get exponent (for denormal input) - (p7) getf.exp GR_ARGEXP = FR_ARG - // get normalized significand (for denormal input) - (p7) getf.sig GR_SIGNIF = FR_ARG - // GR_CONST1 = bias-(2^{12}-1) - mov GR_CONST1 = 0xf000 ;; -} - -{.mii - // get GR_SIGN = sign - and GR_SIGN = GR_ARGEXP, GR_CONST2 - // eliminate leading 1 from GR_I1 = 1st table index - shl GR_I1 = GR_SIGNIF, 1 - // eliminate sign from exponent - andcm GR_EXP = GR_ARGEXP, GR_CONST2 ;; -} - -{.mib - add GR_ADDR2 = 32, GR_ADDR - // GR_IT1 = 1st table index (y_index, 8 bits) - shr.u GR_IT1 = GR_I1, 56 - nop.b 0 -} -{.mib - // load C_1 - ldfe FR_COEFF1 = [ GR_ADDR ], 16 - // subtract bias from GR_EXPON = exponent - sub GR_EXPON = GR_EXP, GR_CONST1 - nop.b 0 ;; -} - -{.mib - // load C_2, C_3 - ldfpd FR_COEFF2, FR_COEFF3 = [ GR_ADDR ] - // 1: exponent* = 5; // (2^{16}-1)/3 = 0x5555 - shladd GR_TMP1 = GR_EXPON, 2, GR_EXPON - nop.b 0 -} -{.mib - // load C_4, C_5 - ldfpd FR_COEFF4, FR_COEFF5 = [ GR_ADDR2 ], 16 - // GR_TMP2 = 3*y_index - shladd GR_TMP2 = GR_IT1, 1, GR_IT1 - nop.b 0 ;; -} - -{.mfi - // GR_TMP6 = (5*expon)*16+5*expon = (0x55)*expon - shladd GR_TMP6 = GR_TMP1, 4, GR_TMP1 - // r = 1-a*y - fnma.s1 FR_R = f8, FR_ARG, f1 - // adjust T_table pointer by 1st index - shladd GR_ITB1 = GR_TMP2, 3, GR_ADDR2 ;; -} - -{.mii - // eliminate leading 1 from significand - add GR_SIGNIF2 = GR_SIGNIF, GR_SIGNIF - // GR_TMP3 = (0x5500)*expon - shl GR_TMP3 = GR_TMP6, 8 ;; - // GR_TMP4 = (0x5555)*expon - add GR_TMP4 = GR_TMP3, GR_TMP6 ;; -} - -{.mii - // GR_TMP5 = (0x5556)*expon // 0x5556 = (2^{16}+2)/3 - add GR_TMP5 = GR_TMP4, GR_EXPON - nop.i 0 ;; - // GR_EXP_BY_3 = floor(expon/3) - shr GR_EXP_BY_3 = GR_TMP5, 16 ;; -} - -{.mfi - // GR_TMP6 = 3*exponent - shladd GR_TMP6 = GR_EXP_BY_3, 1, GR_EXP_BY_3 - // r*r - fma.s1 FR_R2 = FR_R, FR_R, f0 - // bias exponent - add GR_EBIAS = GR_CONST4, GR_EXP_BY_3 ;; -} - -{.mfi - // get remainder of exponent/3 - sub GR_REM = GR_EXPON, GR_TMP6 - // c2+c3*r - fma.s1 FR_P23 = FR_COEFF3, FR_R, FR_COEFF2 - nop.i 0 -} -{.mfi - // add sign to exponent - or GR_SEXP = GR_EBIAS, GR_SIGN - // c4+c5*r - fma.s1 FR_P45 = FR_COEFF5, FR_R, FR_COEFF4 - mov GR_TMP63 = 63+0xffff ;; -} - -{.mmi - // FR_2EXP = sign*2^{exponent/3} - setf.exp FR_2EXP = GR_SEXP - // adjust T_table pointer by 2nd index - shladd GR_INDEX = GR_REM, 3, GR_ITB1 - // is the argument of the form 2^(3*k) ? - // get (significand - leading 1) | (exponent mod 3) - or GR_TEST = GR_REM, GR_SIGNIF2 ;; -} - -{.mmi - // 2^63 - setf.exp FR_TMP63 = GR_TMP63 - // load T - ldf8 f8 = [ GR_INDEX ] - // is the argument of the form 2^(3*k) ? - cmp.eq p14, p0 = GR_TEST, r0 ;; -} - -{.mfi - nop.m 0 - // (c2+c3*r)+r^2*(c4+c5*r) - fma.s1 FR_P25 = FR_P45, FR_R2, FR_P23 - nop.i 0 -} -{.mfi - nop.m 0 - // c1*r - fma.s1 FR_P1 = FR_COEFF1, FR_R, f0 - nop.i 0 ;; -} - -{.mfb - nop.m 0 - (p14) fma.d.s0 f8 = FR_2EXP, FR_TMP63, f0 - (p14) br.ret.spnt b0 ;; -} - -{.mfi - nop.m 0 - // P = c1*r+r^2* [ (c2+c3*r)+r^2*(c4+c5*r) ] - fma.s1 FR_P15 = FR_P25, FR_R2, FR_P1 - nop.i 0 -} -{.mfi - nop.m 0 - // T' = T*(2^exp) - fma.s1 f8 = f8, FR_2EXP, f0 - nop.i 0 ;; -} - -{.mfb - nop.m 0 - // result = T'+T'*P - fma.d.s0 f8 = f8, FR_P15, f8 - br.ret.sptk b0 ;; -} - - -GLOBAL_LIBM_END(cbrt) diff --git a/sysdeps/ia64/fpu/s_cbrtf.S b/sysdeps/ia64/fpu/s_cbrtf.S deleted file mode 100644 index 5d51963f87..0000000000 --- a/sysdeps/ia64/fpu/s_cbrtf.S +++ /dev/null @@ -1,761 +0,0 @@ -.file "cbrtf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 05/18/00 New version (modified algorithm) -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/28/03 Rescheduled some instructions for better performance -// on Itanium 2, and reformatted -// -// API -//============================================================== -// float cbrtf(float) -// -// Overview of operation -//============================================================== -// Background -// -// Implementation -// -// Let y= frcpa(a), where a is the argument -// -// cbrt(a)= cbrt(a*y)/cbrt(y) = cbrt(1 - (1-a*y)) * (1/cbrt(y)) -// -// For all values of y, the 3 possible significands of 1/cbrt(y) -// are stored in a table (T0) to 64 bits of accuracy. (There are -// 3 possible significands because the exponent of y modulo 3 -// can be 0, 1, or 2.) -// -// -// * cbrt(1 - (1-a*y)) is approximated by a degree-2 polynomial -// -// 1 - (1/3)*r - (1/9)*r^2 -// -// in r = 1-a*y. -// -// The table values are stored for three exponent values and are -// then multiplied by 2^(e/3) where e is the exponent of the input number. -// This computation is carried out in parallel with the polynomial -// evaluation: -// -// T= 2^(e/3) * T0 - - - - - -//=============== -// input= x -// C= frcpa(x) -// r= 1 - C * x -// -// Special values -//============================================================== - - - -// Registers used -//============================================================== -// p6, p7, p8, p12 - - FR_R = f6 - FR_COEFF1 = f7 - FR_COEFF2 = f9 - FR_T0 = f10 - FR_T1 = f11 - FR_T2 = f12 - FR_2M63 = f13 - FR_ARG = f14 - FR_Y = f15 - - GR_GP = r2 - GR_ADDR = r2 - GR_TMP5 = r3 - GR_CONST = r8 - GR_TMP63 = r8 - GR_SIGN = r9 - GR_CT2 = r10 - GR_CT3 = r11 - GR_TMP4 = r14 - GR_EBIAS3 = r15 - GR_REM = r16 - GR_SEXP = r17 - GR_2P63 = r18 - GR_SIGNIF = r19 - GR_I1 = r20 - GR_EBIAS = r21 - GR_EXP = r22 - GR_IT1 = r23 - GR_E5 = r24 - GR_IT1_3 = r25 - GR_TP1 = r26 - GR_TMP = r27 - GR_TMP2 = r28 - GR_TMP3 = r29 - GR_EXP3 = r30 - GR_ARGEXP = r31 - - - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(poly_coeffs) - - data8 0xaaaab19b7e1f5ef9, 0x00003ffd // ~ 1/3 - data8 0xe38e5192a5a8e56c, 0x00003ffb // ~ 1/9 -LOCAL_OBJECT_END(poly_coeffs) - -// For every entry B in the frcpa table, this table contains -// the significands of cbrt(1/B), cbrt(2/B), cbrt(4/B). -// The index to this table is the same as the frcpa index. - -LOCAL_OBJECT_START(T_table) - - data8 0x80155c748c374836, 0xa160019ed37fb4ae - data8 0xcb51ddcb9e93095e, 0x8040404b0879f7f9 - data8 0xa1960b5966da4608, 0xcb95f333968ad59b - data8 0x806b5dce4b405c10, 0xa1cc5dbe6dc2aab4 - data8 0xcbda64292d3ffd97, 0x8096b586974669b1 - data8 0xa202f97995b69c0d, 0xcc1f3184af961596 - data8 0x80bcd273d952a028, 0xa232fe6eb0c0577d - data8 0xcc5bb1ac954d33e2, 0x80e898c52813f2f3 - data8 0xa26a2582012f6e17, 0xcca12e9831fc6402 - data8 0x81149add67c2d208, 0xa2a197e5d10465cb - data8 0xcce70a67b64f24ad, 0x813b4e2c856b6e9a - data8 0xa2d25a532efefbc8, 0xcd24794726477ea5 - data8 0x8167c1dde03de7aa, 0xa30a5bd6e49e4ab8 - data8 0xcd6b096a0b70ee87, 0x818ed973b811135e - data8 0xa33b9c9b59879e24, 0xcda9177738b15a90 - data8 0x81bbc0c33e13ec98, 0xa3742fca6a3c1f21 - data8 0xcdf05f2247dffab9, 0x81e33e69fbe7504a - data8 0xa3a5f1273887bf22, 0xce2f0f347f96f906 - data8 0x820aec524e3c23e9, 0xa3d7ef508ff11574 - data8 0xce6e0be0cd551a61, 0x823880f78e70b805 - data8 0xa4115ce30548bc15, 0xceb666b2c347d1de - data8 0x826097a62a8e5200, 0xa443df0e53df577a - data8 0xcef609b0cb874f00, 0x8288dfe00e9b5eaf - data8 0xa4769fa5913c0ec3, 0xcf35fb5447e5c765 - data8 0x82b15a10c5371624, 0xa4a99f303bc7def5 - data8 0xcf763c47ee869f00, 0x82da06a527b18937 - data8 0xa4dcde37779adf4b, 0xcfb6cd3888d71785 - data8 0x8302e60b635ab394, 0xa5105d46152c938a - data8 0xcff7aed4fbfbb447, 0x832bf8b2feec2f0e - data8 0xa5441ce89825cb8d, 0xd038e1ce5167e3c6 - data8 0x83553f0ce00e276b, 0xa5781dad3e54d899 - data8 0xd07a66d7bfa0ebba, 0x837eb98b50f8322a - data8 0xa5ac602406c4e68c, 0xd0bc3ea6b32d1b21 - data8 0x83a270f44c84f699, 0xa5d9601d95c2c0bc - data8 0xd0f4f0e8f36c1bf8, 0x83cc4d7cfcfac5ca - data8 0xa60e1e1a2de14745, 0xd1376458e34b037e - data8 0x83f65f78a8872b4c, 0xa6431f6e3fbd9658 - data8 0xd17a2ca133f78572, 0x8420a75f2f7b53c8 - data8 0xa67864b0d432fda4, 0xd1bd4a80301c5715 - data8 0x844510461ff14209, 0xa6a6444aa0243c0b - data8 0xd1f71682b2fa4575, 0x846fbd91b930bed2 - data8 0xa6dc094d10f25792, 0xd23ad555f773f059 - data8 0x84947e18234f3294, 0xa70a574cc02bba69 - data8 0xd2752c7039a5bf73, 0x84bf92755825045a - data8 0xa7409e2af9549084, 0xd2b98ee008c06b59 - data8 0x84e4ac0ee112ba51, 0xa76f5c64ca2cf13b - data8 0xd2f4735ffd700280, 0x8509ef44b86f20be - data8 0xa79e4f0babab5dc0, 0xd32f99ed6d9ac0e1 - data8 0x85359d5d91768427, 0xa7d5579ae5164b85 - data8 0xd374f0666c75d51c, 0x855b3bd5b7384357 - data8 0xa804bd3c6fe61cc8, 0xd3b0a7d13618e4a1 - data8 0x858104f0c415f79a, 0xa8345895e5250a5a - data8 0xd3eca2ea53bcec0c, 0x85a6f90390d29864 - data8 0xa8642a122b44ef0b, 0xd428e23874f13a17 - data8 0x85d3772fcd56a1dd, 0xa89c38ca18f6108b - data8 0xd46f82fe293bc6d3, 0x85f9c982fcc002f3 - data8 0xa8cc81063b6e87ca, 0xd4ac57e9b7186420 - data8 0x862047e0e7ea554b, 0xa8fd00bfa409285e - data8 0xd4e972becb04e8b8, 0x8646f2a26f7f5852 - data8 0xa92db8664d5516da, 0xd526d40a7a9b43a3 - data8 0x866dca21754096b5, 0xa95ea86b75cc2c20 - data8 0xd5647c5b73917370, 0x8694ceb8dfd17a37 - data8 0xa98fd141a4992deb, 0xd5a26c4201bd6d13 - data8 0x86bc00c49e9307e8, 0xa9c1335cae7446ba - data8 0xd5e0a45015350a7e, 0x86dccd74fce79610 - data8 0xa9ea8686f556f645, 0xd614b539c6194104 - data8 0x870453c845acf90f, 0xaa1c52d17906bb19 - data8 0xd6537310e224283f, 0x872c089a1e90342c - data8 0xaa4e59b046dab887, 0xd6927ab62244c917 - data8 0x8753ec4a92d16c5e, 0xaa809b9c60d1890b - data8 0xd6d1ccc1fc4ef4b7, 0x877bff3aca19f6b4 - data8 0xaab319102f3f9b33, 0xd71169cea98fdded - data8 0x879d88b6fe1c324c, 0xaadd5a18c1e21274 - data8 0xd746a66a5bc9f6d9, 0x87c5f346dbf98c3a - data8 0xab1045f2ac31bdf5, 0xd786ce8f0fae5317 - data8 0x87e7c653efacef2c, 0xab3ae3ab2df7231e - data8 0xd7bc7ff214c4e75a, 0x881089d4e73ffefc - data8 0xab6e3f945d1e96fc, 0xd7fd35467a517ed1 - data8 0x88397e6a366f2a8a, 0xaba1d953a08fa94e - data8 0xd83e38838648d815, 0x885bc559e5e1c081 - data8 0xabcd090db7ef4c3f, 0xd874a1db598b8951 - data8 0x887e2ee392bb7a93, 0xabf864602d7c323d - data8 0xd8ab42205b80edaf, 0x88a7a8587e404257 - data8 0xac2ca5886ccf9b57, 0xd8ed1849d202f965 - data8 0x88ca5eda67594784, 0xac5861d4aa441f0f - data8 0xd92432bd5a173685, 0x88f4356166bd590e - data8 0xac8d183fe3a2fbed, 0xd9669ca45b03c23e - data8 0x89173a0acf5ce026, 0xacb93703ff51571e - data8 0xd99e3327cf89574e, 0x893a62a098b6a57b - data8 0xace5830ad0c3f14b, 0xd9d602b19b100466 - data8 0x895daf637236ae2c, 0xad11fca5d78b3ff2 - data8 0xda0e0ba86c096841, 0x89883b9d1c2fa9c5 - data8 0xad4797fddf91a798, 0xda5195fcdb1c3dce - data8 0x89abd8dd374a5d7b, 0xad747701e559ebcb - data8 0xda8a1eb87a491f6c, 0x89cf9b1dcd197fa0 - data8 0xada184a47e9c7613, 0xdac2e230b91c3f84 - data8 0x89f382a258ea79de, 0xadcec13ab0dda8ff - data8 0xdafbe0d0b66aea30, 0x8a178faf06648f29 - data8 0xadfc2d1a5fd21ba8, 0xdb351b04a8fafced - data8 0x8a3bc288b3e1d18a, 0xae29c89a5053c33a - data8 0xdb6e9139e33cdd8e, 0x8a601b74f4d1f835 - data8 0xae5794122b638df9, 0xdba843ded7151ea1 - data8 0x8a849aba14274764, 0xae858fda8137ae0a - data8 0xdbe2336319b61fc8, 0x8aa9409f16cdbc9b - data8 0xaeb3bc4ccc56d3d1, 0xdc1c60376789fa68 - data8 0x8ace0d6bbe2cb316, 0xaee219c374c09920 - data8 0xdc56cacda82d0cd5, 0x8af301688ab33558 - data8 0xaf10a899d3235fe7, 0xdc917398f2797814 - data8 0x8b181cdebe6f3206, 0xaf3f692c341fe8b4 - data8 0xdccc5b0d90a3e628, 0x8b3d60185fafcb7c - data8 0xaf6e5bd7db9ae6c2, 0xdd0781a10469f0f2 - data8 0x8b62cb603bb2fad0, 0xaf9d80fb081cd91b - data8 0xdd42e7ca0b52838f, 0x8b80d7d6bc4104de - data8 0xafc35ce063eb3787, 0xdd729ad01c69114d - data8 0x8ba68bf73ac74f39, 0xaff2ddcb5f28f03d - data8 0xddae749c001fbf5e, 0x8bcc68fb9f9f7335 - data8 0xb022923b148e05c5, 0xddea8f50a51c69b1 - data8 0x8bf26f31c534fca2, 0xb0527a919adbf58b - data8 0xde26eb69a0f0f111, 0x8c10f86e13a1a1f9 - data8 0xb078f3ab1d701c65, 0xde576480262399bc - data8 0x8c3749916cc6abb5, 0xb0a93a6870649f31 - data8 0xde943789645933c8, 0x8c5dc4c4f7706032 - data8 0xb0d9b624d62ec856, 0xded14d58139a28af - data8 0x8c7cac3a8c42e3e0, 0xb100a5f53fb3c8e1 - data8 0xdf025c00bbf2b5c7, 0x8ca373f1b7bf2716 - data8 0xb131821882f5540a, 0xdf3feb44d723a713 - data8 0x8cc29907fb951294, 0xb158bf8e4cb04055 - data8 0xdf715bc16c159be0, 0x8ce9ae4e9492aac8 - data8 0xb189fd69d56b238f, 0xdfaf66240e29cda8 - data8 0x8d0911dddbfdad0e, 0xb1b189958e8108e4 - data8 0xdfe139cbf6e19bdc, 0x8d3075c4f20f04ee - data8 0xb1e32a8165b09832, 0xe01fc0fe94d9fc52 - data8 0x8d5018a9d4de77d5, 0xb20b0678fc271eec - data8 0xe051f92ffcc0bd60, 0x8d77cc47dd143515 - data8 0xb23d0bd3f7592b6e, 0xe090feec9c9a06ac - data8 0x8d97af6352739cb7, 0xb26538b2db8420dc - data8 0xe0c39d0c9ff862d6, 0x8db7af523167800f - data8 0xb28d89e339ceca14, 0xe0f668eeb99f188d - data8 0x8ddfd80bc68c32ff, 0xb2c022ca12e55a16 - data8 0xe1362890eb663139, 0x8e00197e1e7c88fe - data8 0xb2e8c6852c6b03f1, 0xe1695c7212aecbaa - data8 0x8e207859f77e20e7, 0xb3118f4eda9fe40f - data8 0xe19cbf0391bbbbe9, 0x8e40f4ce60c9f8e2 - data8 0xb33a7d6268109ebe, 0xe1d050901c531e85 - data8 0x8e69ba46cf2fde4d, 0xb36ddbc5ea70ec55 - data8 0xe2110903b4f4047a, 0x8e8a7a00bd7ae63e - data8 0xb3971e9b39264023, 0xe2450559b4d80b6d - data8 0x8eab57ef1cf2f529, 0xb3c0877ecc18e24a - data8 0xe27931a231554ef3, 0x8ecc5442cffb1dad - data8 0xb3ea16ae3a6c905f, 0xe2ad8e2ac3c5b04b - data8 0x8eed6f2d2a4acbfe, 0xb413cc67aa0e4d2d - data8 0xe2e21b41b9694cce, 0x8f0ea8dff24441ff - data8 0xb43da8e9d163e1af, 0xe316d93615862714 - data8 0x8f385c95d696b817, 0xb47233773b84d425 - data8 0xe3590bd86a0d30f9, 0x8f59dc43edd930f3 - data8 0xb49c6825430fe730, 0xe38e38e38e38e38e - data8 0x8f7b7b5f5ffad1c4, 0xb4c6c46bcdb27dcf - data8 0xe3c397d1e6db7839, 0x8f9d3a1bea165f38 - data8 0xb4f1488c0b35d26f, 0xe3f928f5953feb9e - data8 0x8fbf18adc34b66da, 0xb51bf4c7c51f0168 - data8 0xe42eeca17c62886c, 0x8fe117499e356095 - data8 0xb546c9616087ab9c, 0xe464e32943446305 - data8 0x90033624aa685f8d, 0xb571c69bdffd9a70 - data8 0xe49b0ce15747a8a2, 0x9025757495f36b86 - data8 0xb59cecbae56984c3, 0xe4d16a1eee94e9d4 - data8 0x903f3a5dcc091203, 0xb5bd64512bb14bb7 - data8 0xe4fa52107353f67d, 0x9061b2fceb2bdbab - data8 0xb5e8d2a4bf5ba416, 0xe5310a471f4d2dc3 - data8 0x90844ca7211032a7, 0xb6146a9a1bc47819 - data8 0xe567f6f1c2b9c224, 0x90a7079403e6a15d - data8 0xb6402c7749d621c0, 0xe59f18689a9e4c9a - data8 0x90c9e3fbafd63799, 0xb66c1882fb435ea2 - data8 0xe5d66f04b8a68ecf, 0x90ece216c8a16ee4 - data8 0xb6982f048c999a56, 0xe60dfb2005c192e9 - data8 0x9110021e7b516f0a, 0xb6c47044075b4142 - data8 0xe645bd1544c7ea51, 0x912a708a39be9075 - data8 0xb6e5bd6bfd02bafd, 0xe66fb21b505b20a0 - data8 0x914dcc7b31146370, 0xb7124a2736ff8ef2 - data8 0xe6a7d32af4a7c59a, 0x91714af8cfe984d5 - data8 0xb73f026a01e94177, 0xe6e02b129c6a5ae4 - data8 0x918c00a6f3795e97, 0xb760a959f1d0a7a7 - data8 0xe70a9136a7403039, 0x91afbc299ed0295d - data8 0xb78dae7e06868ab0, 0xe74349fb2d92a589 - data8 0x91d39add3e958db0, 0xb7badff8ad9e4e02 - data8 0xe77c3a9c86ed7d42, 0x91ee9920a8974d92 - data8 0xb7dce25b8e17ae9f, 0xe7a713f88151518a - data8 0x9212b5fcac537c19, 0xb80a6226904045e2 - data8 0xe7e067453317ed2b, 0x9236f6b256923fcf - data8 0xb8380f1cafd73c1c, 0xe819f37a81871bb5 - data8 0x92523ee6f90dcfc3, 0xb85a6ea8e321b4d8 - data8 0xe8454236bfaeca14, 0x9276bef031e6eb79 - data8 0xb8886b684ae7d2fa, 0xe87f32f24c3fc90e - data8 0x929236ec237a24ad, 0xb8ab0726fa00cf5d - data8 0xe8aacd8688892ba6, 0x92b6f70b7efe9dc3 - data8 0xb8d954a4d13b7cb1, 0xe8e523fd32f606f7 - data8 0x92d29f61eec7dc2b, 0xb8fc2d4f6cd9f04a - data8 0xe9110b5311407927, 0x92f7a05d5b8ba92f - data8 0xb92acc851476b1ab, 0xe94bc8bf0c108fa3 - data8 0x931379a403be5c16, 0xb94de2d841a184c2 - data8 0xe977fdc439c2ca3c, 0x9338bc44de2e3f34 - data8 0xb97cd4c36c92693c, 0xe9b3236528fc349e - data8 0x9354c71412c69486, 0xb9a0297f172665e3 - data8 0xe9dfa70b745ac1b4, 0x937a4c273907e262 - data8 0xb9cf6f21e36c3924, 0xea1b36268d0eaa38 - data8 0x93968919f6e7975d, 0xb9f3030951267208 - data8 0xea480963fd394197, 0x93bc516fdd4680c9 - data8 0xba229d6a618e7c59, 0xea84034425f27484 - data8 0x93d8c123d9be59b2, 0xba467144459f9855 - data8 0xeab12713138dd1cc, 0x93f546c955e60076 - data8 0xba6a60c3c48f1a4b, 0xeade6db73a5e503b - data8 0x941b70a65879079f, 0xba9a76056b67ee7a - data8 0xeb1b0268343b121b, 0x943829f337410591 - data8 0xbabea699563ada6e, 0xeb489b0b2bdb5f14 - data8 0x9454f995765bc4d2, 0xbae2f350b262cc4b - data8 0xeb765721e85f03d0, 0x947b86b57f5842ed - data8 0xbb1385a23be24e57, 0xebb389645f222f62 - data8 0x94988aeb23470f86, 0xbb3814975e17c680 - data8 0xebe198f090607e0c, 0x94b5a5dc9695f42a - data8 0xbb5cc031009bf467, 0xec0fcc9321024509 - data8 0x94d2d7a9170d8b42, 0xbb81889680024764 - data8 0xec3e247da8b82f61, 0x94f9e87dd78bf019 - data8 0xbbb2c0d8703ae95d, 0xec7c27d21321c9f7 - data8 0x95175019a503d89e, 0xbbd7cd09ba3c5463 - data8 0xecaad5278824e453, 0x9534cefa625fcb3a - data8 0xbbfcf68c4977718f, 0xecd9a76d097d4e77 - data8 0x955265405c491a25, 0xbc223d88cfc88eee - data8 0xed089ed5dcd99446, 0x9570130c1f9bb857 - data8 0xbc47a2284fee4ff8, 0xed37bb95add09a1c - data8 0x9597ca4119525184, 0xbc79ac0916ed7b8a - data8 0xed76c70508f904b6, 0x95b5af6fb5aa4d3c - data8 0xbc9f5670d1a13030, 0xeda63bb05e7f93c6 - data8 0x95d3ac9273aafd7a, 0xbcc51f068cb95c1d - data8 0xedd5d661daed2dc4, 0x95f1c1cafdfd3684 - data8 0xbceb05f4b30a9bc0, 0xee05974eef86b903 - data8 0x960fef3b430b8d5f, 0xbd110b6604c7d306 - data8 0xee357ead791fc670, 0x962e350575b409c5 - data8 0xbd372f8598620f19, 0xee658cb3c134a463 - data8 0x964c934c0dfc1708, 0xbd5d727edb6b3c7e - data8 0xee95c1987f080211, 0x966b0a31c9c6bc7d - data8 0xbd83d47d937bbc6d, 0xeec61d92d8c4314f - data8 0x968999d9ad8d264e, 0xbdaa55addf1ae47d - data8 0xeef6a0da64a014ac, 0x96a8426705198795 - data8 0xbdd0f63c36aa73f0, 0xef274ba72a07c811 - data8 0x96c703fd64445ee5, 0xbdf7b6556d550a15 - data8 0xef581e31a2c91260, 0x96e5dec0a7b4268d - data8 0xbe1e9626b1ffa96b, 0xef8918b2bc43aec6 - data8 0x9704d2d4f59f79f3, 0xbe4595dd903e5371 - data8 0xefba3b63d89d7cbf, 0x9723e05ebe91b9b0 - data8 0xbe6cb5a7f14bc935, 0xefeb867ecffaa607 - data8 0x97430782be323831, 0xbe93f5b41d047cf7 - data8 0xf01cfa3df1b9c9fa, 0x97624865fc0df8bf - data8 0xbebb5630bae4c15f, 0xf04e96dc05b43e2d - data8 0x9781a32dcc640b2a, 0xbee2d74cd30a430c - data8 0xf0805c944d827454, 0x97a117ffd0f48e46 - data8 0xbf0a7937cf38d981, 0xf0b24ba285c495cb - data8 0x97c0a701f9d263c9, 0xbf323c217be2bc8c - data8 0xf0e46442e76f6569, 0x97e0505a8637a036 - data8 0xbf5a203a09342bbb, 0xf116a6b2291d7896 - data8 0x97f57a9fb0b08c6e, 0xbf74cad1c14ebfc4 - data8 0xf1383fa9e9b5b381, 0x9815503365914a9d - data8 0xbf9ce6a497a89f78, 0xf16ac84f90083b9b - data8 0x98354085054fd204, 0xbfc52428bec6e72f - data8 0xf19d7b686dcb03d7, 0x98554bbbf8a77902 - data8 0xbfed838fddab024b, 0xf1d0593311db1757 - data8 0x987571fffb7f94f6, 0xc016050c0420981a - data8 0xf20361ee8f1c711e, 0x9895b3791dd03c23 - data8 0xc03ea8cfabddc330, 0xf23695da7de51d3f - data8 0x98ab43a5fc65d0c8, 0xc059d3cbd65ddbce - data8 0xf258d095e465cc35, 0x98cbb2d196bd713d - data8 0xc082b122a3c78c9d, 0xf28c4d0bfc982b34 - data8 0x98ec3d9ec7b6f21a, 0xc0abb1499ae736c4 - data8 0xf2bff55eb3f0ea71, 0x990ce436db5e8344 - data8 0xc0d4d474c3aedaaf, 0xf2f3c9cf9884636e - data8 0x9922b8218160967a, 0xc0f054ca33eb3437 - data8 0xf31670135ab9cc0f, 0x99438d686f75779d - data8 0xc119b2c67e600ed0, 0xf34a8e9f0b54cdfb - data8 0x99647eea131fa20b, 0xc1433453de2033ff - data8 0xf37ed9fa6b8add3f, 0x997a85045a47c6d0 - data8 0xc15ef3e44e10032d, 0xf3a1cfe884ef6bb6 - data8 0x999ba5f14f8add02, 0xc188b130431d80e6 - data8 0xf3d66689dcc8e8d3, 0x99bce38b5465ecae - data8 0xc1b2929d6067730e, 0xf40b2ab069d5c96a - data8 0x99d31ca0887f30f9, 0xc1ce9268f31cc734 - data8 0xf42e718b90c8bc16, 0x99f48a669c74c09e - data8 0xc1f8b0877c1b0c08, 0xf463822a0a3b4b00 - data8 0x9a16154eb445c873, 0xc222f35a87b415ba - data8 0xf498c1076015faf8, 0x9a2c822ec198d667 - data8 0xc23f3467349e5c88, 0xf4bc5a19a33990b5 - data8 0x9a4e3e080cd91b78, 0xc269b4e40e088c01 - data8 0xf4f1e6a7d6f5425f, 0x9a70177afe52322e - data8 0xc2945aac24daaf6e, 0xf527a232cf6be334 - data8 0x9a86b8fa94eebe10, 0xc2b0de05e43c1d66 - data8 0xf54b8ecdcda90851, 0x9aa8c42866ae2958 - data8 0xc2dbc275e1229d09, 0xf5819949c7ad87b4 - data8 0x9abf86f9e12fc45e, 0xc2f86fca9d80eeff - data8 0xf5a5bac9213b48a9, 0x9ae1c462fc05f49d - data8 0xc323938449a2587e, 0xf5dc1501f324a812 - data8 0x9af8a8dc936b84d0, 0xc3406b40a538ed20 - data8 0xf6006bee86b5589e, 0x9b1b19033be35730 - data8 0xc36bcee8211d15e0, 0xf63716b2fa067fa4 - data8 0x9b3da7daf04c2892, 0xc397593adf2ba366 - data8 0xf66df22fb6132b9c, 0x9b54c2e4c8a9012b - data8 0xc3b475b6206155d5, 0xf6929fb98225deb1 - data8 0x9b77854e6c661200, 0xc3e0410243b97383 - data8 0xf6c9cd13021e3fea, 0x9b8ec2e678d56d2f - data8 0xc3fd890709833d37, 0xf6eeb177472cedae - data8 0x9ba60e6a5ca133b6, 0xc41ae295f7e7fa06 - data8 0xf713abf4cb0b3afb, 0x9bc919ea66a151a4 - data8 0xc44709f7bb8a4dd2, 0xf74b4d5333684ef1 - data8 0x9be0887c09ef82bb, 0xc4648fb0e0bec4c1 - data8 0xf7707f75a72f8e94, 0x9c03c8d5fffc3503 - data8 0xc490f9a94695ba14, 0xf7a874b97927af44 - data8 0x9c1b5ad21a81cbb9, 0xc4aeac0173b7d390 - data8 0xf7cddf140aedf1d8, 0x9c3ed09216e9ca02 - data8 0xc4db5941007aa853, 0xf806291bacb7f7a9 - data8 0x9c568656c0423def, 0xc4f938aec206291a - data8 0xf82bcc43b92eafef, 0x9c7a320af242ce60 - data8 0xc52629e899dfd622, 0xf8646bf0defb759e - data8 0x9c920bf7a8c01dc2, 0xc54436e44043b965 - data8 0xf88a487dfc3ff5f7, 0x9ca9f475d98b159c - data8 0xc562563abf9ea07f, 0xf8b03c2b46cdc17f - data8 0x9ccdeca60e80b5f8, 0xc58fa7d1dc42921c - data8 0xf8e95541c152ae7a, 0x9ce5f9d4653d4902 - data8 0xc5adf561b91e110a, 0xf90f832c2700c160 - data8 0x9cfe15cb38bfdd8e, 0xc5cc5591bdbd82fa - data8 0xf935c88e0c7f419b, 0x9d225b983f6c1f96 - data8 0xc5fa08f1ff20593c, 0xf96f5cd84fd86873 - data8 0x9d3a9cca32261ed7, 0xc618980a79ce6862 - data8 0xf995dd53ebdd9d6d, 0x9d52ecfccebe1768 - data8 0xc6373a09e34b50fa, 0xf9bc75a034436a41 - data8 0x9d77818d95b82f86, 0xc66550a6e0baaf35 - data8 0xf9f686f26d5518de, 0x9d8ff7893fa4706c - data8 0xc6842241926342c9, 0xfa1d5b39b910a8c5 - data8 0x9da87cbef36f2a5e, 0xc6a3070b7c93bb9e - data8 0xfa4447acc4ecbfd2, 0x9dcd6140b4a35aeb - data8 0xc6d18260bb84081b, 0xfa7ed7e51e6fdfb4 - data8 0x9de60cd06dc6e2d4, 0xc6f0977c9416828b - data8 0xfaa601394d49a1a0, 0x9dfec7d4cc43b76f - data8 0xc70fc0117c641630, 0xfacd431644ce0e40 - data8 0x9e17925ec9fccc4a, 0xc72efc34d7e615be - data8 0xfaf49d96f7a75909, 0x9e3cdf6db57dc075 - data8 0xc75dfb441594141e, 0xfb2fd3c65e562fd5 - data8 0x9e55d110b63637a8, 0xc77d68aa019bda4c - data8 0xfb576c5762024805, 0x9e6ed27594550d2e - data8 0xc79ce9ea478dbc4f, 0xfb7f1debc22c4040 - data8 0x9e87e3adc385d393, 0xc7bc7f1ae453219d - data8 0xfba6e89f32d0190a, 0x9ead9b54b37a1055 - data8 0xc7ec0476e15e141a, 0xfbe2c803a0894893 - data8 0x9ec6d46a3d7de215, 0xc80bcbe16f1d540f - data8 0xfc0ad1ff0ed9ecf0, 0x9ee01d9108be3154 - data8 0xc82ba78a5d349735, 0xfc32f57bdfbcbe7f - data8 0x9ef976db07288d04, 0xc84b978847a06b87 - data8 0xfc5b32968f99b21c, 0x9f12e05a4759ec25 - data8 0xc86b9bf1ee817bc6, 0xfc83896bc861ab08 - data8 0x9f2c5a20f4da6668, 0xc88bb4de3667cdf4 - data8 0xfcabfa1861ed4815, 0x9f52af78ed1733ca - data8 0xc8bc00e7fe9e23a3, 0xfce8d3cea7d3163e - data8 0x9f6c52426a39d003, 0xc8dc4d7ff2d25232 - data8 0xfd118595143ee273, 0x9f860593d42fd7f3 - data8 0xc8fcaeebcb40eb47, 0xfd3a519943d4865a - data8 0x9f9fc97fdb96bd51, 0xc91d25431426a663 - data8 0xfd6337f8e1ae5a4b, 0x9fb99e194f4a7037 - data8 0xc93db09d7fdb2949, 0xfd8c38d1c8e927eb - data8 0x9fd383731ca51db9, 0xc95e5112e721582a - data8 0xfdb5544205095a53, 0x9fed79a04fbf9423 - data8 0xc97f06bb49787677, 0xfdde8a67d2613531 - data8 0xa00780b413b24ee8, 0xc99fd1aecd6e1b06 - data8 0xfe07db619e781611, 0xa02eab2c4474b0cd - data8 0xc9d12a3e27bb1625, 0xfe460768d80bf758 - data8 0xa048dcd51ccfd142, 0xc9f22ad82ba3d5f0 - data8 0xfe6f9bfb06cd32f6, 0xa0631fa894b11b8d - data8 0xca134113105e67b2, 0xfe994bcd3d14fcc2 - data8 0xa07d73ba65e680af, 0xca346d07b045a876 - data8 0xfec316fecaf3f2ab, 0xa097d91e6aaf71b0 - data8 0xca55aecf0e94bb88, 0xfeecfdaf33fadb80 - data8 0xa0b24fe89e02602f, 0xca77068257be9bab - data8 0xff16fffe2fa8fad6, 0xa0ccd82d1bd2f68b - data8 0xca98743ae1c693a8, 0xff411e0ba9db886d - data8 0xa0e77200215909e6, 0xcab9f8122c99a101 - data8 0xff6b57f7c33e4e9a, 0xa1021d760d584855 - data8 0xcadb9221e268c3b5, 0xff95ade2d1bd7358 - data8 0xa11cdaa36068a57d, 0xcafd4283d8043dfd - data8 0xffc01fed60f86fb5, 0xa137a99cbd3f880b - data8 0xcb1f09520d37c6fb, 0xffeaae3832b63956 -LOCAL_OBJECT_END(T_table) - - - - - - - -.section .text -GLOBAL_LIBM_ENTRY(cbrtf) - - -{.mfi - getf.sig GR_SIGNIF = f8 - // will continue only for normal/denormal numbers - fclass.nm.unc p12, p7 = f8, 0x1b - // GR_GP = pointer to C_1, C_2 followed by T_table - nop.i 0 -} -{.mfi - addl GR_GP = @ltoff(poly_coeffs), gp - // normalize a - fma.s1 FR_ARG = f8, f1, f0 - // GR_CT3 = bias-((2^8-1)/3) -63 = 0xffff-0x55-0x3f = 0xff6b - mov GR_CT3 = 0xff6b ;; -} - -{.mmi - // get exponent - getf.exp GR_ARGEXP = f8 - // load start address for C_1, C_2 followed by T_table - ld8 GR_ADDR = [ GR_GP ] - nop.i 0 ;; -} - -{.mlx - // check if input significand is 0 - (p7) cmp.eq p12, p7 = GR_SIGNIF, r0 - // GR_2P63 = 2^63 - movl GR_2P63 = 0x8000000000000000 ;; -} - -{.mfi - nop.m 0 - // y = frcpa(a) - // p7 = 1 for normal and denormal (but non-zero) arguments - (p7) frcpa.s0 FR_Y, p0 = f1, f8 - // p9 = 1 if denormal input - cmp.gtu p9, p0 = GR_2P63, GR_SIGNIF -} -{.mfb - // load C_1 - ldfe FR_COEFF1 = [ GR_ADDR ], 16 - // if argument is 0, +/-Infinity, or NaN, return - (p12) fma.s.s0 f8 = f8, f1, f0 - (p12) br.ret.spnt b0 ;; -} - -{.mmi - // get normalized significand (for denormal inputs only) - (p9) getf.sig GR_SIGNIF = FR_ARG - // load C_2 - ldfe FR_COEFF2 = [ GR_ADDR ], 16 - // GR_CT2 = bias-(2^8-1) - mov GR_CT2 = 0xff00 -} - -{.mii - // get exponent (for denormal inputs only) - (p9) getf.exp GR_ARGEXP = FR_ARG - nop.i 0 - mov GR_CONST = 0x20000 ;; -} - - -{.mii - // get GR_SIGN = sign - and GR_SIGN = GR_ARGEXP, GR_CONST - // eliminate leading 1 from GR_I1 = 1st table index - shl GR_I1 = GR_SIGNIF, 1 - // eliminate sign from exponent - andcm GR_EBIAS = GR_ARGEXP, GR_CONST ;; -} - - -{.mfi - // subtract bias from GR_EXP = exponent - sub GR_EXP = GR_EBIAS, GR_CT2 - // r = 1-a*y - fnma.s1 FR_R = FR_Y, FR_ARG, f1 - // GR_IT1 = 1st table index (y_index8 bits) - shr.u GR_IT1 = GR_I1, 56 ;; -} - - -{.mii - // 1: exponent* = 5; // (2^{16}-1)/3 = 0x5555 - shladd GR_E5 = GR_EXP, 2, GR_EXP - // GR_IT1_3 = 3*y_index - shladd GR_IT1_3 = GR_IT1, 1, GR_IT1 - nop.i 0 ;; -} - - -{.mmi - // GR_TMP5 = (5*expon)*16+5*expon = (0x55)*expon - shladd GR_TMP5 = GR_E5, 4, GR_E5 - // adjust T_table pointer by 1st index - shladd GR_TP1 = GR_IT1_3, 3, GR_ADDR - nop.i 0 ;; -} - - -{.mmi - // FR_T0 = T [ 0 ] [ y ] - ldf8 FR_T0 = [ GR_TP1 ], 8 - // get 2^{-63} - mov GR_TMP63 = 0xffff + 63 - // GR_TMP = (0x5500)*expon - shl GR_TMP = GR_TMP5, 8 ;; -} - - -{.mfi - // FR_T1 = T [ 1 ] [ y ] - ldf8 FR_T1 = [ GR_TP1 ], 8 - // P_1 = C_1+C_2*r - fma.s1 FR_COEFF1 = FR_COEFF2, FR_R, FR_COEFF1 - // GR_TMP2 = (0x5555)*expon - add GR_TMP2 = GR_TMP, GR_TMP5 ;; -} - - -{.mmi - // GR_TMP3 = (0x5556)*expon // 0x5556 = (2^{16}+2)/3 - add GR_TMP3 = GR_TMP2, GR_EXP ;; - // FR_T2 = T [ 2 ] [ y ] - ldf8 FR_T2 = [ GR_TP1 ] - // GR_EXP3 = floor(expon/3) - shr GR_EXP3 = GR_TMP3, 16 ;; -} - - -{.mmi - setf.exp FR_2M63 = GR_TMP63 - // GR_TMP4 = 3*exponent - shladd GR_TMP4 = GR_EXP3, 1, GR_EXP3 - // bias exponent - add GR_EBIAS3 = GR_CT3, GR_EXP3 ;; -} - - -{.mmf - // get remainder of exponent/3 - sub GR_REM = GR_EXP, GR_TMP4 - // add sign to exponent - or GR_SEXP = GR_EBIAS3, GR_SIGN - // P_2 = -r*P_1 - fnma.s1 FR_R = FR_COEFF1, FR_R, f0 ;; -} - - - -{.mmi - // FR_ARG = sign*2^{exponent/3} - setf.exp FR_ARG = GR_SEXP - nop.m 0 - // remainder = 0 ? - // p7=1 if input exponent is 3*j (remainder is 0) - cmp.eq.unc p7, p8 = r0, GR_REM ;; -} - - -{.mfi - // remainder = 1 ? - // p8=1 if input exponent is 3*j+1 (remainder is 1) - // p12=1 if input exponent is 3*j+2 (remainder is 2) - (p8) cmp.eq.unc p8, p12 = 1, GR_REM - // p7=1 -> remainder = 0 -> use T = FR_T0 - (p7) fma.s1 f8 = FR_T0, FR_R, FR_T0 - // argument is of the form 2^(3*k) ? - // ( GR_I1 holds significand bits, without the leading 1) - or GR_I1 = GR_I1, GR_REM ;; -} - - -.pred.rel "mutex", p12, p8 -{.mfi - nop.m 0 - // p8=1 -> remainder = 1 -> use FR_T1 - (p8) fma.s1 f8 = FR_T1, FR_R, FR_T1 - // argument is of the form 2^(3*k) ? - cmp.eq p14, p7 = GR_I1, r0 -} - - -{.mfi - nop.m 0 - // p12=1 -> remainder=2 -> result = T+T*P_2 - (p12) fma.s1 f8 = FR_T2, FR_R, FR_T2 - nop.i 0 ;; -} - - -.pred.rel "mutex", p14, p7 -{.mfi - nop.m 0 - // if argument is sgn*2^{3*(expon/3)} - (p14) fma.s.s0 f8 = FR_2M63, FR_ARG, f0 - nop.i 0 -} -{.mfb - nop.m 0 - // T* = sgn*2^{expon/3} - (p7) fma.s.s0 f8 = f8, FR_ARG, f0 - br.ret.sptk b0 ;; -} - - -GLOBAL_LIBM_END(cbrtf) diff --git a/sysdeps/ia64/fpu/s_cbrtl.S b/sysdeps/ia64/fpu/s_cbrtl.S deleted file mode 100644 index 301c333ff7..0000000000 --- a/sysdeps/ia64/fpu/s_cbrtl.S +++ /dev/null @@ -1,984 +0,0 @@ -.file "cbrtl.s" - - -// Copyright (c) 2000 - 2004, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 04/28/00 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header:.section,.global,.proc,.align -// 11/23/04 Reformatted routine and improved speed -// -// API -//============================================================== -// long double cbrtl(long double) -// -// Overview of operation -//============================================================== -// Background -// -// Implementation -// -// The result is computed as -// cbrt(x)= cbrt(1 - (1 - x*y)) * (1/cbrt(y)) -// where y = frcpa(x) = (-1)^sgn_y * 2^(3*k+j) * m_y, -// m_y in [1,2), j in {0,1,2} -// -// cbrt(1 - (1 - x*y)) is approximated by a degree-6 polynomial -// in r= 1 - x*y : -// P = 1 - c_1 r - c_2 * r^2 - c_3 * r^3 - c_4 * r^4 - c_5 * r^5 - c_6 * r^6 -// -// -// The values (1/cbrt(y)) are stored as two tables of constants T_hi -// (double-extended precision) and D (single precision) as follows: -// T_hi (1 + D)= 1/cbrt(y) to about 80 bits of accuracy -// -// The tables are only stored for three exponent values (i.e. -// only for 2^j * m_y, where j in {0,1,2} and m_y covers the 256 -// possible mantissas for an frcpa result); the index is formed -// by the 8 leading mantissa bits of x, which is the same index used -// by the hardware to get frcpa(x). -// -// The table values are multiplied by 2^k where e is the exponent of -// the input number. This multiplication is carried out in parallel with -// the polynomial evaluation: -// T= 2^(k) * T_hi -// -//======================================================================= - -//=============== -// Special values -//============================================================== - -// Registers used -//============================================================== -// p6, p7, p12 - FR_R = f6 - FR_C1 = f7 - FR_C2 = f9 - FR_C3 = f10 - FR_C4 = f11 - FR_C5 = f12 - FR_C6 = f13 - FR_XNORM = f14 - FR_D = f15 - FR_SPECIAL = f32 - FR_RCP = f33 - FR_R2 = f34 - FR_P1 = f35 - FR_P2 = f36 - FR_P3 = f37 - FR_P4 = f38 - FR_P5 = f39 - FR_R3 = f40 - FR_T = f41 - FR_TF = f42 - FR_P = f43 - FR_SGNEXP = f44 - - GR_ADDR = r2 - GR_C_START = r2 - GR_ARGSIG = r3 - GR_NORMSIG = r15 - GR_D_ADDR = r16 - GR_D_START = r16 - GR_INDEX2 = r17 - GR_IX2 = r17 - GR_NORMEXP = r18 - GR_EXP5 = r19 - GR_EXP3 = r20 - GR_EXP6 = r20 - GR_EXP17 = r21 - GR_TMP1 = r21 - GR_SGNMASK = r22 - GR_T_INDEX = r23 - GR_IX_T = r23 - GR_IX_D = r24 - GR_D_INDEX = r24 - GR_TMP2 = r25 - GR_TMP3 = r25 - GR_TMP4 = r25 - GR_EXP_RES = r26 - GR_BIAS23 = r27 - GR_EXPBIAS = r27 - GR_EXP_MOD_3 = r28 - GR_SIGN = r29 - GR_EXPSIGNRES = r29 - GR_REMTMP = r30 - GR_NORMEXPSGN = r31 - - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(poly_coeffs) - - data8 0xaaaaaaaaaaaaaab1, 0x00003ffd // C_1 - data8 0xe38e38e38e38e3e0, 0x00003ffb // C_2 - data8 0x3faf9add3c0be9a6, 0x3fa511e8d2b1f749 // C_3, C_4 - data8 0x3f9ee71b2c6ebe99, 0x3f9809180fd0340c // C_5, C_6 -LOCAL_OBJECT_END(poly_coeffs) - - -LOCAL_OBJECT_START(T_table) - - data8 0x80155c748c374836, 0x8040404b0879f7f9 - data8 0x806b5dce4b405c10, 0x8096b586974669b1 - data8 0x80bcd273d952a028, 0x80e898c52813f2f3 - data8 0x81149add67c2d208, 0x813b4e2c856b6e9a - data8 0x8167c1dde03de7aa, 0x818ed973b811135e - data8 0x81bbc0c33e13ec98, 0x81e33e69fbe7504a - data8 0x820aec524e3c23e9, 0x823880f78e70b805 - data8 0x826097a62a8e5200, 0x8288dfe00e9b5eaf - data8 0x82b15a10c5371624, 0x82da06a527b18937 - data8 0x8302e60b635ab394, 0x832bf8b2feec2f0e - data8 0x83553f0ce00e276b, 0x837eb98b50f8322a - data8 0x83a270f44c84f699, 0x83cc4d7cfcfac5ca - data8 0x83f65f78a8872b4c, 0x8420a75f2f7b53c8 - data8 0x844510461ff14209, 0x846fbd91b930bed2 - data8 0x84947e18234f3294, 0x84bf92755825045a - data8 0x84e4ac0ee112ba51, 0x8509ef44b86f20be - data8 0x85359d5d91768427, 0x855b3bd5b7384357 - data8 0x858104f0c415f79a, 0x85a6f90390d29864 - data8 0x85d3772fcd56a1dd, 0x85f9c982fcc002f3 - data8 0x862047e0e7ea554b, 0x8646f2a26f7f5852 - data8 0x866dca21754096b5, 0x8694ceb8dfd17a37 - data8 0x86bc00c49e9307e8, 0x86dccd74fce79610 - data8 0x870453c845acf90f, 0x872c089a1e90342c - data8 0x8753ec4a92d16c5e, 0x877bff3aca19f6b4 - data8 0x879d88b6fe1c324c, 0x87c5f346dbf98c3a - data8 0x87e7c653efacef2c, 0x881089d4e73ffefc - data8 0x88397e6a366f2a8a, 0x885bc559e5e1c081 - data8 0x887e2ee392bb7a93, 0x88a7a8587e404257 - data8 0x88ca5eda67594784, 0x88f4356166bd590e - data8 0x89173a0acf5ce026, 0x893a62a098b6a57b - data8 0x895daf637236ae2c, 0x89883b9d1c2fa9c5 - data8 0x89abd8dd374a5d7b, 0x89cf9b1dcd197fa0 - data8 0x89f382a258ea79de, 0x8a178faf06648f29 - data8 0x8a3bc288b3e1d18a, 0x8a601b74f4d1f835 - data8 0x8a849aba14274764, 0x8aa9409f16cdbc9b - data8 0x8ace0d6bbe2cb316, 0x8af301688ab33558 - data8 0x8b181cdebe6f3206, 0x8b3d60185fafcb7c - data8 0x8b62cb603bb2fad0, 0x8b80d7d6bc4104de - data8 0x8ba68bf73ac74f39, 0x8bcc68fb9f9f7335 - data8 0x8bf26f31c534fca2, 0x8c10f86e13a1a1f9 - data8 0x8c3749916cc6abb5, 0x8c5dc4c4f7706032 - data8 0x8c7cac3a8c42e3e0, 0x8ca373f1b7bf2716 - data8 0x8cc29907fb951294, 0x8ce9ae4e9492aac8 - data8 0x8d0911dddbfdad0e, 0x8d3075c4f20f04ee - data8 0x8d5018a9d4de77d5, 0x8d77cc47dd143515 - data8 0x8d97af6352739cb7, 0x8db7af523167800f - data8 0x8ddfd80bc68c32ff, 0x8e00197e1e7c88fe - data8 0x8e207859f77e20e7, 0x8e40f4ce60c9f8e2 - data8 0x8e69ba46cf2fde4d, 0x8e8a7a00bd7ae63e - data8 0x8eab57ef1cf2f529, 0x8ecc5442cffb1dad - data8 0x8eed6f2d2a4acbfe, 0x8f0ea8dff24441ff - data8 0x8f385c95d696b817, 0x8f59dc43edd930f3 - data8 0x8f7b7b5f5ffad1c4, 0x8f9d3a1bea165f38 - data8 0x8fbf18adc34b66da, 0x8fe117499e356095 - data8 0x90033624aa685f8d, 0x9025757495f36b86 - data8 0x903f3a5dcc091203, 0x9061b2fceb2bdbab - data8 0x90844ca7211032a7, 0x90a7079403e6a15d - data8 0x90c9e3fbafd63799, 0x90ece216c8a16ee4 - data8 0x9110021e7b516f0a, 0x912a708a39be9075 - data8 0x914dcc7b31146370, 0x91714af8cfe984d5 - data8 0x918c00a6f3795e97, 0x91afbc299ed0295d - data8 0x91d39add3e958db0, 0x91ee9920a8974d92 - data8 0x9212b5fcac537c19, 0x9236f6b256923fcf - data8 0x92523ee6f90dcfc3, 0x9276bef031e6eb79 - data8 0x929236ec237a24ad, 0x92b6f70b7efe9dc3 - data8 0x92d29f61eec7dc2b, 0x92f7a05d5b8ba92f - data8 0x931379a403be5c16, 0x9338bc44de2e3f34 - data8 0x9354c71412c69486, 0x937a4c273907e262 - data8 0x93968919f6e7975d, 0x93bc516fdd4680c9 - data8 0x93d8c123d9be59b2, 0x93f546c955e60076 - data8 0x941b70a65879079f, 0x943829f337410591 - data8 0x9454f995765bc4d2, 0x947b86b57f5842ed - data8 0x94988aeb23470f86, 0x94b5a5dc9695f42a - data8 0x94d2d7a9170d8b42, 0x94f9e87dd78bf019 - data8 0x95175019a503d89e, 0x9534cefa625fcb3a - data8 0x955265405c491a25, 0x9570130c1f9bb857 - data8 0x9597ca4119525184, 0x95b5af6fb5aa4d3c - data8 0x95d3ac9273aafd7a, 0x95f1c1cafdfd3684 - data8 0x960fef3b430b8d5f, 0x962e350575b409c5 - data8 0x964c934c0dfc1708, 0x966b0a31c9c6bc7d - data8 0x968999d9ad8d264e, 0x96a8426705198795 - data8 0x96c703fd64445ee5, 0x96e5dec0a7b4268d - data8 0x9704d2d4f59f79f3, 0x9723e05ebe91b9b0 - data8 0x97430782be323831, 0x97624865fc0df8bf - data8 0x9781a32dcc640b2a, 0x97a117ffd0f48e46 - data8 0x97c0a701f9d263c9, 0x97e0505a8637a036 - data8 0x97f57a9fb0b08c6e, 0x9815503365914a9d - data8 0x98354085054fd204, 0x98554bbbf8a77902 - data8 0x987571fffb7f94f6, 0x9895b3791dd03c23 - data8 0x98ab43a5fc65d0c8, 0x98cbb2d196bd713d - data8 0x98ec3d9ec7b6f21a, 0x990ce436db5e8344 - data8 0x9922b8218160967a, 0x99438d686f75779d - data8 0x99647eea131fa20b, 0x997a85045a47c6d0 - data8 0x999ba5f14f8add02, 0x99bce38b5465ecae - data8 0x99d31ca0887f30f9, 0x99f48a669c74c09e - data8 0x9a16154eb445c873, 0x9a2c822ec198d667 - data8 0x9a4e3e080cd91b78, 0x9a70177afe52322e - data8 0x9a86b8fa94eebe10, 0x9aa8c42866ae2958 - data8 0x9abf86f9e12fc45e, 0x9ae1c462fc05f49d - data8 0x9af8a8dc936b84d0, 0x9b1b19033be35730 - data8 0x9b3da7daf04c2892, 0x9b54c2e4c8a9012b - data8 0x9b77854e6c661200, 0x9b8ec2e678d56d2f - data8 0x9ba60e6a5ca133b6, 0x9bc919ea66a151a4 - data8 0x9be0887c09ef82bb, 0x9c03c8d5fffc3503 - data8 0x9c1b5ad21a81cbb9, 0x9c3ed09216e9ca02 - data8 0x9c568656c0423def, 0x9c7a320af242ce60 - data8 0x9c920bf7a8c01dc2, 0x9ca9f475d98b159c - data8 0x9ccdeca60e80b5f8, 0x9ce5f9d4653d4902 - data8 0x9cfe15cb38bfdd8e, 0x9d225b983f6c1f96 - data8 0x9d3a9cca32261ed7, 0x9d52ecfccebe1768 - data8 0x9d77818d95b82f86, 0x9d8ff7893fa4706c - data8 0x9da87cbef36f2a5e, 0x9dcd6140b4a35aeb - data8 0x9de60cd06dc6e2d4, 0x9dfec7d4cc43b76f - data8 0x9e17925ec9fccc4a, 0x9e3cdf6db57dc075 - data8 0x9e55d110b63637a8, 0x9e6ed27594550d2e - data8 0x9e87e3adc385d393, 0x9ead9b54b37a1055 - data8 0x9ec6d46a3d7de215, 0x9ee01d9108be3154 - data8 0x9ef976db07288d04, 0x9f12e05a4759ec25 - data8 0x9f2c5a20f4da6668, 0x9f52af78ed1733ca - data8 0x9f6c52426a39d003, 0x9f860593d42fd7f3 - data8 0x9f9fc97fdb96bd51, 0x9fb99e194f4a7037 - data8 0x9fd383731ca51db9, 0x9fed79a04fbf9423 - data8 0xa00780b413b24ee8, 0xa02eab2c4474b0cd - data8 0xa048dcd51ccfd142, 0xa0631fa894b11b8d - data8 0xa07d73ba65e680af, 0xa097d91e6aaf71b0 - data8 0xa0b24fe89e02602f, 0xa0ccd82d1bd2f68b - data8 0xa0e77200215909e6, 0xa1021d760d584855 - data8 0xa11cdaa36068a57d, 0xa137a99cbd3f880b - data8 0xa160019ed37fb4ae, 0xa1960b5966da4608 - data8 0xa1cc5dbe6dc2aab4, 0xa202f97995b69c0d - data8 0xa232fe6eb0c0577d, 0xa26a2582012f6e17 - data8 0xa2a197e5d10465cb, 0xa2d25a532efefbc8 - data8 0xa30a5bd6e49e4ab8, 0xa33b9c9b59879e24 - data8 0xa3742fca6a3c1f21, 0xa3a5f1273887bf22 - data8 0xa3d7ef508ff11574, 0xa4115ce30548bc15 - data8 0xa443df0e53df577a, 0xa4769fa5913c0ec3 - data8 0xa4a99f303bc7def5, 0xa4dcde37779adf4b - data8 0xa5105d46152c938a, 0xa5441ce89825cb8d - data8 0xa5781dad3e54d899, 0xa5ac602406c4e68c - data8 0xa5d9601d95c2c0bc, 0xa60e1e1a2de14745 - data8 0xa6431f6e3fbd9658, 0xa67864b0d432fda4 - data8 0xa6a6444aa0243c0b, 0xa6dc094d10f25792 - data8 0xa70a574cc02bba69, 0xa7409e2af9549084 - data8 0xa76f5c64ca2cf13b, 0xa79e4f0babab5dc0 - data8 0xa7d5579ae5164b85, 0xa804bd3c6fe61cc8 - data8 0xa8345895e5250a5a, 0xa8642a122b44ef0b - data8 0xa89c38ca18f6108b, 0xa8cc81063b6e87ca - data8 0xa8fd00bfa409285e, 0xa92db8664d5516da - data8 0xa95ea86b75cc2c20, 0xa98fd141a4992deb - data8 0xa9c1335cae7446ba, 0xa9ea8686f556f645 - data8 0xaa1c52d17906bb19, 0xaa4e59b046dab887 - data8 0xaa809b9c60d1890b, 0xaab319102f3f9b33 - data8 0xaadd5a18c1e21274, 0xab1045f2ac31bdf5 - data8 0xab3ae3ab2df7231e, 0xab6e3f945d1e96fc - data8 0xaba1d953a08fa94e, 0xabcd090db7ef4c3f - data8 0xabf864602d7c323d, 0xac2ca5886ccf9b57 - data8 0xac5861d4aa441f0f, 0xac8d183fe3a2fbed - data8 0xacb93703ff51571e, 0xace5830ad0c3f14b - data8 0xad11fca5d78b3ff2, 0xad4797fddf91a798 - data8 0xad747701e559ebcb, 0xada184a47e9c7613 - data8 0xadcec13ab0dda8ff, 0xadfc2d1a5fd21ba8 - data8 0xae29c89a5053c33a, 0xae5794122b638df9 - data8 0xae858fda8137ae0a, 0xaeb3bc4ccc56d3d1 - data8 0xaee219c374c09920, 0xaf10a899d3235fe7 - data8 0xaf3f692c341fe8b4, 0xaf6e5bd7db9ae6c2 - data8 0xaf9d80fb081cd91b, 0xafc35ce063eb3787 - data8 0xaff2ddcb5f28f03d, 0xb022923b148e05c5 - data8 0xb0527a919adbf58b, 0xb078f3ab1d701c65 - data8 0xb0a93a6870649f31, 0xb0d9b624d62ec856 - data8 0xb100a5f53fb3c8e1, 0xb131821882f5540a - data8 0xb158bf8e4cb04055, 0xb189fd69d56b238f - data8 0xb1b189958e8108e4, 0xb1e32a8165b09832 - data8 0xb20b0678fc271eec, 0xb23d0bd3f7592b6e - data8 0xb26538b2db8420dc, 0xb28d89e339ceca14 - data8 0xb2c022ca12e55a16, 0xb2e8c6852c6b03f1 - data8 0xb3118f4eda9fe40f, 0xb33a7d6268109ebe - data8 0xb36ddbc5ea70ec55, 0xb3971e9b39264023 - data8 0xb3c0877ecc18e24a, 0xb3ea16ae3a6c905f - data8 0xb413cc67aa0e4d2d, 0xb43da8e9d163e1af - data8 0xb47233773b84d425, 0xb49c6825430fe730 - data8 0xb4c6c46bcdb27dcf, 0xb4f1488c0b35d26f - data8 0xb51bf4c7c51f0168, 0xb546c9616087ab9c - data8 0xb571c69bdffd9a70, 0xb59cecbae56984c3 - data8 0xb5bd64512bb14bb7, 0xb5e8d2a4bf5ba416 - data8 0xb6146a9a1bc47819, 0xb6402c7749d621c0 - data8 0xb66c1882fb435ea2, 0xb6982f048c999a56 - data8 0xb6c47044075b4142, 0xb6e5bd6bfd02bafd - data8 0xb7124a2736ff8ef2, 0xb73f026a01e94177 - data8 0xb760a959f1d0a7a7, 0xb78dae7e06868ab0 - data8 0xb7badff8ad9e4e02, 0xb7dce25b8e17ae9f - data8 0xb80a6226904045e2, 0xb8380f1cafd73c1c - data8 0xb85a6ea8e321b4d8, 0xb8886b684ae7d2fa - data8 0xb8ab0726fa00cf5d, 0xb8d954a4d13b7cb1 - data8 0xb8fc2d4f6cd9f04a, 0xb92acc851476b1ab - data8 0xb94de2d841a184c2, 0xb97cd4c36c92693c - data8 0xb9a0297f172665e3, 0xb9cf6f21e36c3924 - data8 0xb9f3030951267208, 0xba229d6a618e7c59 - data8 0xba467144459f9855, 0xba6a60c3c48f1a4b - data8 0xba9a76056b67ee7a, 0xbabea699563ada6e - data8 0xbae2f350b262cc4b, 0xbb1385a23be24e57 - data8 0xbb3814975e17c680, 0xbb5cc031009bf467 - data8 0xbb81889680024764, 0xbbb2c0d8703ae95d - data8 0xbbd7cd09ba3c5463, 0xbbfcf68c4977718f - data8 0xbc223d88cfc88eee, 0xbc47a2284fee4ff8 - data8 0xbc79ac0916ed7b8a, 0xbc9f5670d1a13030 - data8 0xbcc51f068cb95c1d, 0xbceb05f4b30a9bc0 - data8 0xbd110b6604c7d306, 0xbd372f8598620f19 - data8 0xbd5d727edb6b3c7e, 0xbd83d47d937bbc6d - data8 0xbdaa55addf1ae47d, 0xbdd0f63c36aa73f0 - data8 0xbdf7b6556d550a15, 0xbe1e9626b1ffa96b - data8 0xbe4595dd903e5371, 0xbe6cb5a7f14bc935 - data8 0xbe93f5b41d047cf7, 0xbebb5630bae4c15f - data8 0xbee2d74cd30a430c, 0xbf0a7937cf38d981 - data8 0xbf323c217be2bc8c, 0xbf5a203a09342bbb - data8 0xbf74cad1c14ebfc4, 0xbf9ce6a497a89f78 - data8 0xbfc52428bec6e72f, 0xbfed838fddab024b - data8 0xc016050c0420981a, 0xc03ea8cfabddc330 - data8 0xc059d3cbd65ddbce, 0xc082b122a3c78c9d - data8 0xc0abb1499ae736c4, 0xc0d4d474c3aedaaf - data8 0xc0f054ca33eb3437, 0xc119b2c67e600ed0 - data8 0xc1433453de2033ff, 0xc15ef3e44e10032d - data8 0xc188b130431d80e6, 0xc1b2929d6067730e - data8 0xc1ce9268f31cc734, 0xc1f8b0877c1b0c08 - data8 0xc222f35a87b415ba, 0xc23f3467349e5c88 - data8 0xc269b4e40e088c01, 0xc2945aac24daaf6e - data8 0xc2b0de05e43c1d66, 0xc2dbc275e1229d09 - data8 0xc2f86fca9d80eeff, 0xc323938449a2587e - data8 0xc3406b40a538ed20, 0xc36bcee8211d15e0 - data8 0xc397593adf2ba366, 0xc3b475b6206155d5 - data8 0xc3e0410243b97383, 0xc3fd890709833d37 - data8 0xc41ae295f7e7fa06, 0xc44709f7bb8a4dd2 - data8 0xc4648fb0e0bec4c1, 0xc490f9a94695ba14 - data8 0xc4aeac0173b7d390, 0xc4db5941007aa853 - data8 0xc4f938aec206291a, 0xc52629e899dfd622 - data8 0xc54436e44043b965, 0xc562563abf9ea07f - data8 0xc58fa7d1dc42921c, 0xc5adf561b91e110a - data8 0xc5cc5591bdbd82fa, 0xc5fa08f1ff20593c - data8 0xc618980a79ce6862, 0xc6373a09e34b50fa - data8 0xc66550a6e0baaf35, 0xc6842241926342c9 - data8 0xc6a3070b7c93bb9e, 0xc6d18260bb84081b - data8 0xc6f0977c9416828b, 0xc70fc0117c641630 - data8 0xc72efc34d7e615be, 0xc75dfb441594141e - data8 0xc77d68aa019bda4c, 0xc79ce9ea478dbc4f - data8 0xc7bc7f1ae453219d, 0xc7ec0476e15e141a - data8 0xc80bcbe16f1d540f, 0xc82ba78a5d349735 - data8 0xc84b978847a06b87, 0xc86b9bf1ee817bc6 - data8 0xc88bb4de3667cdf4, 0xc8bc00e7fe9e23a3 - data8 0xc8dc4d7ff2d25232, 0xc8fcaeebcb40eb47 - data8 0xc91d25431426a663, 0xc93db09d7fdb2949 - data8 0xc95e5112e721582a, 0xc97f06bb49787677 - data8 0xc99fd1aecd6e1b06, 0xc9d12a3e27bb1625 - data8 0xc9f22ad82ba3d5f0, 0xca134113105e67b2 - data8 0xca346d07b045a876, 0xca55aecf0e94bb88 - data8 0xca77068257be9bab, 0xca98743ae1c693a8 - data8 0xcab9f8122c99a101, 0xcadb9221e268c3b5 - data8 0xcafd4283d8043dfd, 0xcb1f09520d37c6fb - data8 0xcb51ddcb9e93095e, 0xcb95f333968ad59b - data8 0xcbda64292d3ffd97, 0xcc1f3184af961596 - data8 0xcc5bb1ac954d33e2, 0xcca12e9831fc6402 - data8 0xcce70a67b64f24ad, 0xcd24794726477ea5 - data8 0xcd6b096a0b70ee87, 0xcda9177738b15a90 - data8 0xcdf05f2247dffab9, 0xce2f0f347f96f906 - data8 0xce6e0be0cd551a61, 0xceb666b2c347d1de - data8 0xcef609b0cb874f00, 0xcf35fb5447e5c765 - data8 0xcf763c47ee869f00, 0xcfb6cd3888d71785 - data8 0xcff7aed4fbfbb447, 0xd038e1ce5167e3c6 - data8 0xd07a66d7bfa0ebba, 0xd0bc3ea6b32d1b21 - data8 0xd0f4f0e8f36c1bf8, 0xd1376458e34b037e - data8 0xd17a2ca133f78572, 0xd1bd4a80301c5715 - data8 0xd1f71682b2fa4575, 0xd23ad555f773f059 - data8 0xd2752c7039a5bf73, 0xd2b98ee008c06b59 - data8 0xd2f4735ffd700280, 0xd32f99ed6d9ac0e1 - data8 0xd374f0666c75d51c, 0xd3b0a7d13618e4a1 - data8 0xd3eca2ea53bcec0c, 0xd428e23874f13a17 - data8 0xd46f82fe293bc6d3, 0xd4ac57e9b7186420 - data8 0xd4e972becb04e8b8, 0xd526d40a7a9b43a3 - data8 0xd5647c5b73917370, 0xd5a26c4201bd6d13 - data8 0xd5e0a45015350a7e, 0xd614b539c6194104 - data8 0xd6537310e224283f, 0xd6927ab62244c917 - data8 0xd6d1ccc1fc4ef4b7, 0xd71169cea98fdded - data8 0xd746a66a5bc9f6d9, 0xd786ce8f0fae5317 - data8 0xd7bc7ff214c4e75a, 0xd7fd35467a517ed1 - data8 0xd83e38838648d815, 0xd874a1db598b8951 - data8 0xd8ab42205b80edaf, 0xd8ed1849d202f965 - data8 0xd92432bd5a173685, 0xd9669ca45b03c23e - data8 0xd99e3327cf89574e, 0xd9d602b19b100466 - data8 0xda0e0ba86c096841, 0xda5195fcdb1c3dce - data8 0xda8a1eb87a491f6c, 0xdac2e230b91c3f84 - data8 0xdafbe0d0b66aea30, 0xdb351b04a8fafced - data8 0xdb6e9139e33cdd8e, 0xdba843ded7151ea1 - data8 0xdbe2336319b61fc8, 0xdc1c60376789fa68 - data8 0xdc56cacda82d0cd5, 0xdc917398f2797814 - data8 0xdccc5b0d90a3e628, 0xdd0781a10469f0f2 - data8 0xdd42e7ca0b52838f, 0xdd729ad01c69114d - data8 0xddae749c001fbf5e, 0xddea8f50a51c69b1 - data8 0xde26eb69a0f0f111, 0xde576480262399bc - data8 0xde943789645933c8, 0xded14d58139a28af - data8 0xdf025c00bbf2b5c7, 0xdf3feb44d723a713 - data8 0xdf715bc16c159be0, 0xdfaf66240e29cda8 - data8 0xdfe139cbf6e19bdc, 0xe01fc0fe94d9fc52 - data8 0xe051f92ffcc0bd60, 0xe090feec9c9a06ac - data8 0xe0c39d0c9ff862d6, 0xe0f668eeb99f188d - data8 0xe1362890eb663139, 0xe1695c7212aecbaa - data8 0xe19cbf0391bbbbe9, 0xe1d050901c531e85 - data8 0xe2110903b4f4047a, 0xe2450559b4d80b6d - data8 0xe27931a231554ef3, 0xe2ad8e2ac3c5b04b - data8 0xe2e21b41b9694cce, 0xe316d93615862714 - data8 0xe3590bd86a0d30f9, 0xe38e38e38e38e38e - data8 0xe3c397d1e6db7839, 0xe3f928f5953feb9e - data8 0xe42eeca17c62886c, 0xe464e32943446305 - data8 0xe49b0ce15747a8a2, 0xe4d16a1eee94e9d4 - data8 0xe4fa52107353f67d, 0xe5310a471f4d2dc3 - data8 0xe567f6f1c2b9c224, 0xe59f18689a9e4c9a - data8 0xe5d66f04b8a68ecf, 0xe60dfb2005c192e9 - data8 0xe645bd1544c7ea51, 0xe66fb21b505b20a0 - data8 0xe6a7d32af4a7c59a, 0xe6e02b129c6a5ae4 - data8 0xe70a9136a7403039, 0xe74349fb2d92a589 - data8 0xe77c3a9c86ed7d42, 0xe7a713f88151518a - data8 0xe7e067453317ed2b, 0xe819f37a81871bb5 - data8 0xe8454236bfaeca14, 0xe87f32f24c3fc90e - data8 0xe8aacd8688892ba6, 0xe8e523fd32f606f7 - data8 0xe9110b5311407927, 0xe94bc8bf0c108fa3 - data8 0xe977fdc439c2ca3c, 0xe9b3236528fc349e - data8 0xe9dfa70b745ac1b4, 0xea1b36268d0eaa38 - data8 0xea480963fd394197, 0xea84034425f27484 - data8 0xeab12713138dd1cc, 0xeade6db73a5e503b - data8 0xeb1b0268343b121b, 0xeb489b0b2bdb5f14 - data8 0xeb765721e85f03d0, 0xebb389645f222f62 - data8 0xebe198f090607e0c, 0xec0fcc9321024509 - data8 0xec3e247da8b82f61, 0xec7c27d21321c9f7 - data8 0xecaad5278824e453, 0xecd9a76d097d4e77 - data8 0xed089ed5dcd99446, 0xed37bb95add09a1c - data8 0xed76c70508f904b6, 0xeda63bb05e7f93c6 - data8 0xedd5d661daed2dc4, 0xee05974eef86b903 - data8 0xee357ead791fc670, 0xee658cb3c134a463 - data8 0xee95c1987f080211, 0xeec61d92d8c4314f - data8 0xeef6a0da64a014ac, 0xef274ba72a07c811 - data8 0xef581e31a2c91260, 0xef8918b2bc43aec6 - data8 0xefba3b63d89d7cbf, 0xefeb867ecffaa607 - data8 0xf01cfa3df1b9c9fa, 0xf04e96dc05b43e2d - data8 0xf0805c944d827454, 0xf0b24ba285c495cb - data8 0xf0e46442e76f6569, 0xf116a6b2291d7896 - data8 0xf1383fa9e9b5b381, 0xf16ac84f90083b9b - data8 0xf19d7b686dcb03d7, 0xf1d0593311db1757 - data8 0xf20361ee8f1c711e, 0xf23695da7de51d3f - data8 0xf258d095e465cc35, 0xf28c4d0bfc982b34 - data8 0xf2bff55eb3f0ea71, 0xf2f3c9cf9884636e - data8 0xf31670135ab9cc0f, 0xf34a8e9f0b54cdfb - data8 0xf37ed9fa6b8add3f, 0xf3a1cfe884ef6bb6 - data8 0xf3d66689dcc8e8d3, 0xf40b2ab069d5c96a - data8 0xf42e718b90c8bc16, 0xf463822a0a3b4b00 - data8 0xf498c1076015faf8, 0xf4bc5a19a33990b5 - data8 0xf4f1e6a7d6f5425f, 0xf527a232cf6be334 - data8 0xf54b8ecdcda90851, 0xf5819949c7ad87b4 - data8 0xf5a5bac9213b48a9, 0xf5dc1501f324a812 - data8 0xf6006bee86b5589e, 0xf63716b2fa067fa4 - data8 0xf66df22fb6132b9c, 0xf6929fb98225deb1 - data8 0xf6c9cd13021e3fea, 0xf6eeb177472cedae - data8 0xf713abf4cb0b3afb, 0xf74b4d5333684ef1 - data8 0xf7707f75a72f8e94, 0xf7a874b97927af44 - data8 0xf7cddf140aedf1d8, 0xf806291bacb7f7a9 - data8 0xf82bcc43b92eafef, 0xf8646bf0defb759e - data8 0xf88a487dfc3ff5f7, 0xf8b03c2b46cdc17f - data8 0xf8e95541c152ae7a, 0xf90f832c2700c160 - data8 0xf935c88e0c7f419b, 0xf96f5cd84fd86873 - data8 0xf995dd53ebdd9d6d, 0xf9bc75a034436a41 - data8 0xf9f686f26d5518de, 0xfa1d5b39b910a8c5 - data8 0xfa4447acc4ecbfd2, 0xfa7ed7e51e6fdfb4 - data8 0xfaa601394d49a1a0, 0xfacd431644ce0e40 - data8 0xfaf49d96f7a75909, 0xfb2fd3c65e562fd5 - data8 0xfb576c5762024805, 0xfb7f1debc22c4040 - data8 0xfba6e89f32d0190a, 0xfbe2c803a0894893 - data8 0xfc0ad1ff0ed9ecf0, 0xfc32f57bdfbcbe7f - data8 0xfc5b32968f99b21c, 0xfc83896bc861ab08 - data8 0xfcabfa1861ed4815, 0xfce8d3cea7d3163e - data8 0xfd118595143ee273, 0xfd3a519943d4865a - data8 0xfd6337f8e1ae5a4b, 0xfd8c38d1c8e927eb - data8 0xfdb5544205095a53, 0xfdde8a67d2613531 - data8 0xfe07db619e781611, 0xfe460768d80bf758 - data8 0xfe6f9bfb06cd32f6, 0xfe994bcd3d14fcc2 - data8 0xfec316fecaf3f2ab, 0xfeecfdaf33fadb80 - data8 0xff16fffe2fa8fad6, 0xff411e0ba9db886d - data8 0xff6b57f7c33e4e9a, 0xff95ade2d1bd7358 - data8 0xffc01fed60f86fb5, 0xffeaae3832b63956 -LOCAL_OBJECT_END(T_table) - - -LOCAL_OBJECT_START(D_table) - - data4 0x1e50f488, 0x1ebdc559, 0x1e649ec1, 0x9eed9b2c - data4 0x9e511c44, 0x9ec6d551, 0x9eefe248, 0x9e313854 - data4 0x9f54ff18, 0x9d231411, 0x1ee5d63c, 0x9edf6b95 - data4 0x9f332aaa, 0x1dc92a84, 0x1f73fb7b, 0x1e32f100 - data4 0x9ea636f5, 0x9f6c3353, 0x9f405552, 0x1f33fd97 - data4 0x1e975291, 0x9e59a11e, 0x1e47b0ba, 0x9d8ad33e - data4 0x1ea51bf6, 0x1f25d782, 0x9ecf534d, 0x1f55436f - data4 0x1d0975e4, 0x9f0633a1, 0x1f3e840a, 0x1f523a4c - data4 0x9f53cbbc, 0x9c8b5661, 0x9f6bc8eb, 0x1f4f6c7b - data4 0x9ed9b376, 0x9f5b30b6, 0x1f64fa5e, 0x1cbcc3e0 - data4 0x1f343548, 0x1f62a6a2, 0x9f336abb, 0x9f1d15af - data4 0x1f476c83, 0x1ea86421, 0x1f33b2cf, 0x9e8f1348 - data4 0x1f6fa829, 0x9f30ee3a, 0x9ebd6146, 0x1f2db598 - data4 0x1ef9600d, 0x1f5b1427, 0x9edd741b, 0x1f51ef4e - data4 0x9f1aa57d, 0x9ee9b5e0, 0x9f17ecd7, 0x1ead71ff - data4 0x1f6c910e, 0x9e1837df, 0x9f0f17d9, 0x9e8350dd - data4 0x9d292f1b, 0x9e33b3ab, 0x9d6f0fe8, 0x9ed8c7cc - data4 0x9ec598c8, 0x9d56758c, 0x1e090c1e, 0x9ed4b941 - data4 0x9f1fc4cf, 0x1f63513a, 0x9edd0abc, 0x1e3924dd - data4 0x1f60d56f, 0x1ea84424, 0x9e88f4fb, 0x1f205c09 - data4 0x1ec9ae4e, 0x1d2d5738, 0x9f2c9f6d, 0x1e0765c2 - data4 0x1e8bbdd7, 0x9f16d9f1, 0x9ea62627, 0x1f13904c - data4 0x1e566ab8, 0x9dca3d1a, 0x9e91f2a1, 0x9f14641c - data4 0x9f278946, 0x1f490c1e, 0x1f575eb6, 0x1f50b3fd - data4 0x9da32efb, 0x1ea95e59, 0x9e41e058, 0x9eada15f - data4 0x9e4fe66c, 0x1f3abc98, 0x1f1b8d1e, 0x9ece97e4 - data4 0x1d188aed, 0x9e89b6ee, 0x1f287478, 0x9e8a161a - data4 0x1e4749f7, 0x9e68084a, 0x1e867f33, 0x9f462b63 - data4 0x1db30792, 0x1f59a767, 0x9d1da4ae, 0x9f472a33 - data4 0x1d1e91cd, 0x9f414824, 0x9f473d4f, 0x1f4b5783 - data4 0x9f5b04b8, 0x9f5c205b, 0x1f309617, 0x9f0d6852 - data4 0x9d96a609, 0x9f0965c2, 0x9e23f467, 0x9f089884 - data4 0x9ec71458, 0x9ed6e955, 0x1e5e8691, 0x1f5b2bbc - data4 0x9f128268, 0x1ed40f5b, 0x1dc430ce, 0x1f345986 - data4 0x1d778f72, 0x1e9b11d6, 0x9f5a40be, 0x9e07f61a - data4 0x9ed641a7, 0x9f334787, 0x1e952fd0, 0x1edeb5e2 - data4 0x9e9f3eb1, 0x9e379fd9, 0x1f13102a, 0x9e5e80e1 - data4 0x1c757944, 0x1dae2260, 0x1f183ab7, 0x1e55d576 - data4 0x9e6bb99f, 0x9f52d7cb, 0x9e73a0f5, 0x1d4e1d14 - data4 0x9dd05b53, 0x1f2261e4, 0x9d4ee73d, 0x1ede515e - data4 0x1f22a573, 0x9ecac348, 0x1e6a2ac0, 0x1e2787d2 - data4 0x9eb64b87, 0x1f0c69c6, 0x9f470a01, 0x9d7c1686 - data4 0x1e468ebe, 0x9f21ee2f, 0x9ee52116, 0x9e20f715 - data4 0x1ed18533, 0x9f005b38, 0x9f20cb95, 0x1da72967 - data4 0x1f1ba5d7, 0x1e2f8b16, 0x9c794f96, 0x9ca74ea3 - data4 0x1f410555, 0x9eff2b96, 0x1ce8f0b1, 0x1f0cee77 - data4 0x1f191edd, 0x9ed5fcbc, 0x1f30f242, 0x9e0ad369 - data4 0x1ed8f3c8, 0x1f52bb0e, 0x9e9ce408, 0x1f18907f - data4 0x9ecdad40, 0x9e8af91d, 0x1d46698a, 0x9f4b93d6 - data4 0x9f3f5d33, 0x1e2e52f7, 0x9f13aeec, 0x9f3b1969 - data4 0x1f0996f4, 0x9f2a03df, 0x1e264767, 0x1f3ab1fb - data4 0x9f3193c9, 0x9f21ce22, 0x9eab624c, 0x9ecd8fb1 - data4 0x1eaf9a85, 0x1f0c6a2c, 0x1eecbe61, 0x1f3fead9 - data4 0x1f1d3a29, 0x1e9099ce, 0x1eadd875, 0x1e4dbfb8 - data4 0x9dc640d2, 0x1f413680, 0x9f3f57b3, 0x1dfa1553 - data4 0x1ec71c6b, 0x1e00cc00, 0x9f271e55, 0x1e5a88bb - data4 0x1f46cc2b, 0x1ee80ff9, 0x9e29c6f3, 0x1f15e229 - data4 0x9ea83d66, 0x1f37408e, 0x9dacb66e, 0x1e6f6259 - data4 0x9f106973, 0x1dd4e5ac, 0x1cbfdcc8, 0x9f231c9f - data4 0x9e8677e4, 0x9e9e695a, 0x1efd782b, 0x9dd26959 - data4 0x9e80af69, 0x1f386fb3, 0x1f022e8c, 0x9e839967 - data4 0x1ce6796f, 0x1e4c22c2, 0x1e57ef24, 0x1e919804 - data4 0x9d7ea090, 0x1e40140a, 0x1f261b46, 0x1db75be2 - data4 0x1f145019, 0x9e3102b9, 0x9e22507b, 0x1eae813c - data4 0x1f117e97, 0x1f282296, 0x1f3814b3, 0x1e17977b - data4 0x1f39d6ff, 0x9f1c81b9, 0x9eb5bcad, 0x1f0f596e - data4 0x1e757fd5, 0x9f090daa, 0x9f2532fc, 0x9eebafbb - data4 0x1f086556, 0x9eeedde8, 0x9f32e174, 0x1e33c030 - data4 0x1f1f145a, 0x1e6e556c, 0x1e419ffb, 0x9eb6019a - data4 0x9e872a2e, 0x1e113136, 0x1e93096f, 0x1f39be40 - data4 0x1f1665ad, 0x9db81d7d, 0x9cd29091, 0x1e3f4af7 - data4 0x9f23176c, 0x9eccf9b3, 0x1f34fc6c, 0x9ed36894 - data4 0x1ef08e06, 0x9f3b46bb, 0x9f2c850b, 0x1f1565a4 - data4 0x1e887bc3, 0x1e92629c, 0x9f11ac9e, 0x9e5579f3 - data4 0x1e4d5790, 0x9ee1c3d1, 0x9e916aec, 0x9eb8d9b8 - data4 0x1db46105, 0x1e168663, 0x1f26a942, 0x9f0f0383 - data4 0x9f079032, 0x9ecae1d8, 0x1ed3b34c, 0x9edc5ee6 - data4 0x9e8a75a7, 0x1f3c3de2, 0x9ee5041e, 0x1f08c727 - data4 0x1d02d7ae, 0x9f36adda, 0x9ef9a857, 0x9ef5cb3a - data4 0x9eee73da, 0x9da5d629, 0x1e0e99be, 0x1e5159b9 - data4 0x1f2eac89, 0x9e8eedc5, 0x1dd0ec90, 0x1f229aff - data4 0x1ed9c3e6, 0x1e95c55a, 0x9f0c24e4, 0x1e8afed6 - data4 0x1e599a96, 0x1e881b21, 0x1eab84b9, 0x9ba2bb0e - data4 0x9e33ab10, 0x1f1710b5, 0x1ebfa271, 0x9e90bbc5 - data4 0x9f32515b, 0x9b32aae8, 0x1eda455c, 0x1da8186e - data4 0x9e8917ff, 0x1ec4d08e, 0x1c90069d, 0x9f2f1d29 - data4 0x9ecee86d, 0x9f234d1f, 0x1f370724, 0x1da87496 - data4 0x1e7959f0, 0x9e8ada34, 0x1f1c7f6f, 0x1edd576b - data4 0x9de91e8b, 0x1ec4ef89, 0x1f32078a, 0x1e9925e2 - data4 0x9d8eeccb, 0x9ea3d011, 0x1f231fdf, 0x9f1dbdfa - data4 0x1e7507a3, 0x1ec42614, 0x9e8693cb, 0x9ec68398 - data4 0x1d5b05fb, 0x1de32119, 0x9f003429, 0x9ec16d92 - data4 0x9f095315, 0x9f119d2c, 0x9ed0c984, 0x9f090662 - data4 0x9e59aa1f, 0x9ed4e64a, 0x9f2798a7, 0x9f23624d - data4 0x1e0467d9, 0x1f22e7e7, 0x1e915256, 0x9cb4df70 - data4 0x9e6f687c, 0x9e3c35e5, 0x9e5757ab, 0x9f031fa1 - data4 0x1f25bff7, 0x1f0e58c2, 0x1ef3ce04, 0x1f002ecb - data4 0x9ebdc836, 0x9ed657dd, 0x9f149441, 0x9e8544b2 - data4 0x1cd8ff1e, 0x1e9bb463, 0x1eaa1c5c, 0x1f200c1a - data4 0x1edbfbaf, 0x1f18724d, 0x9ed63c22, 0x9f08e045 - data4 0x1f13ad07, 0x9e949311, 0x9f0c50d4, 0x1e824516 - data4 0x1d5e52ba, 0x1d583fbd, 0x1e3b60a9, 0x9effe6d3 - data4 0x1f0d0508, 0x1f00be77, 0x9e404bfa, 0x9e1ca381 - data4 0x9f084dd8, 0x9e6db85d, 0x1db698e4, 0x9ebd1871 - data4 0x9ecc2679, 0x1ee68442, 0x1edb1050, 0x9dbc96a4 - data4 0x9f27c1f4, 0x1c99b756, 0x1eb4400a, 0x9f24390a - data4 0x1d927875, 0x9f074faa, 0x1e9dc2c3, 0x1f13c0d2 - data4 0x1e3c9685, 0x9e6b6f75, 0x9db9cb31, 0x1ea5f3aa - data4 0x9d992c61, 0x1f1015e4, 0x1f194f70, 0x9e19d2b3 - data4 0x9d89116c, 0x1f23cd35, 0x1e33d3a2, 0x1ee331b8 - data4 0x1d5ba7ec, 0x9f273788, 0x9e6907f4, 0x9ed5f912 - data4 0x9edd458d, 0x1e2ca7b2, 0x1ef81fe4, 0x1dc7ade6 - data4 0x1e876e51, 0x9f04ec89, 0x1f1da63a, 0x1ec02bd0 - data4 0x9e71326f, 0x1e7847b4, 0x1f0de618, 0x9e036cb6 - data4 0x1eec61e2, 0x1ef1758b, 0x9ee880a3, 0x1ed269d7 - data4 0x1e27edd3, 0x9e8a81a1, 0x1eacb84d, 0x9e1aad37 - data4 0x1f1aa8f7, 0x1e9bbd90, 0x1ea1b61f, 0x9ed41c2f - data4 0x1dbb5dd6, 0x1f0ec733, 0x9df06b1b, 0x1e06fef1 - data4 0x9edede3a, 0x1edeb5e2, 0x1f0e63ee, 0x9db316bb - data4 0x9efc1ad3, 0x1f01fbb5, 0x9cc0d078, 0x1ea28b36 - data4 0x9e9dd205, 0x9e791534, 0x1da1c8d5, 0x9e8195cc - data4 0x1f0681a4, 0x1eeaf1e2, 0x9ef83b37, 0x9f22a92b - data4 0x1eabc4ce, 0x1f10eefb, 0x1e06d9aa, 0x1e7cacd5 - data4 0x1f1ea087, 0x1eb21983, 0x9f100c78, 0x1e840abe - data4 0x9efab66c, 0x1f183fa8, 0x9e84ee68, 0x9eea083d - data4 0x9ee23a74, 0x1f1351d7, 0x9ec5d42a, 0x9f071f57 - data4 0x9ef578d9, 0x9f1aa7e7, 0x1eb02044, 0x1f151a2e - data4 0x9c0dc8b2, 0x9ef4087a, 0x1ec12b93, 0x1c1a946b - data4 0x1e89946f, 0x9dafe8c3, 0x1d295288, 0x9e8497ab - data4 0x1ec000c6, 0x1e102f29, 0x1e542256, 0x1e67d44d - data4 0x1ef688d8, 0x1f0e0f29, 0x1e67861f, 0x1e869748 - data4 0x1ee6aa6e, 0x9e4d228b, 0x9e50be5b, 0x1e9fe225 - data4 0x9ea34102, 0x9e628a3b, 0x9ed9fd83, 0x1ecd7109 - data4 0x1f1864ff, 0x1ea19b76, 0x1db0d1c9, 0x9dff519b - data4 0x1e8fea71, 0x9ee82e9a, 0x9f08919b, 0x9ef5c8ae - data4 0x9ee446a4, 0x1ea59444, 0x1eb74230, 0x1ea13fbf - data4 0x9ea6a3ea, 0x1e5f2797, 0x9e0adb07, 0x9d3adadd - data4 0x1ebf2ee2, 0x1da19bfa, 0x1e8dea6d, 0x1ec4fea9 - data4 0x1e669f22, 0x1dc5f919, 0x9ed25caa, 0x1ee475b1 - data4 0x1ed0603e, 0x9eacb35c, 0x1dc00b27, 0x1e2f9991 - data4 0x1e7b0406, 0x1eaa3387, 0x9d865bde, 0x1eb78a48 - data4 0x1c40ae2e, 0x1ee9838b, 0x9f0f0d7f, 0x1e3e5d26 - data4 0x1e99e7a6, 0x9e681ccf, 0x9e93ed65, 0x9eeb6a66 - data4 0x1e29e9af, 0x9e96f923, 0x9e74f11d, 0x9f1474da - data4 0x1eec2ea7, 0x1ebf7aa3, 0x9c25dcca, 0x9f0553c2 - data4 0x9e599efd, 0x1d2ab490, 0x1e95d7cd, 0x9ee4b20e - data4 0x9d988ce5, 0x9ef9787e, 0x9dbbba5b, 0x9f12c304 - data4 0x1e3b9d70, 0x1e7bcae8, 0x9d98bb6e, 0x9e8e6b01 - data4 0x9f07d03b, 0x9d67c822, 0x9f0ef69e, 0x1c7c0fe3 - data4 0x9e9bfbb9, 0x9e83b84b, 0x1efbf15e, 0x9ecfa6a6 - data4 0x9c91158e, 0x9ecf6770, 0x1ee1e3a8, 0x9dc95ec0 - data4 0x1ef603f7, 0x1d5e52ba, 0x1c477d1b, 0x9e955cd8 - data4 0x1ed665b0, 0x9e8376c4, 0x9c0ee88e, 0x1e8c989e - data4 0x1ea2df29, 0x9d961e5c, 0x1e101813, 0x1e7fffff - data4 0x9e5abff4, 0x1dbddd71, 0x1eb69100, 0x1e71f114 - data4 0x1e9ca798, 0x1ef62c8d, 0x9db4e55a, 0x1dbe69ce - data4 0x9ef1c01f, 0x1f044a2a, 0x9eb9e0d7, 0x9ee59745 - data4 0x9e874803, 0x1ea0b418, 0x9e13572a, 0x1ddbb3a2 - data4 0x9ec0e391, 0x1e89fba1, 0x1ee8b261, 0x9e5d25f0 - data4 0x9ef222cb, 0x9ef135ec, 0x1ea04b9a, 0x9f04291f - data4 0x9e969254, 0x9ee32f08, 0x9ed909d3, 0x9e362640 - data4 0x9ec20735, 0x1e50131b, 0x9ed4e049, 0x1ee8e817 - data4 0x1e1e09c0, 0x9ea643c5, 0x9e5a1ab6, 0x9e389059 - data4 0x1e560947, 0x1d02b877, 0x1e4475ab, 0x9ea9aaf6 - data4 0x1e95bc5e, 0x1eaf6afd, 0x1d43067d, 0x9d043821 - data4 0x9e97baa9, 0x1de5c4f9, 0x9e9a0069, 0x9e1b9944 - data4 0x1eb13686, 0x9eb907eb, 0x1e059589, 0x1cbd0f93 - data4 0x9eb7e6ae, 0x1e9fa175, 0x1ee5bdf4, 0x1e8052f7 - data4 0x9c80d1e3, 0x1bfbe28e, 0x9e672b3b, 0x9ecacf19 - data4 0x9e3c04be, 0x1dfe8c5c, 0x1e1ba9cb, 0x1eb40b1e - data4 0x1ec7e7f6, 0x9d0d45b3, 0x1ef0113b, 0x9a155fa3 - data4 0x1e28ec3b, 0x1e7ca8df, 0x9d2f91b4, 0x1eccd9ed - data4 0x9ed943bc, 0x9ccaab19, 0x9e8a5c58, 0x1ec3bca8 - data4 0x1ed78dc7, 0x9ed391a8, 0x9e938f6e, 0x9ec4a030 - data4 0x9e80346e, 0x1e7a4686, 0x9e284315, 0x9e39584c - data4 0x1ebdc9b4, 0x9e9cfce5, 0x9ef55c65, 0x1e2941e7 - data4 0x9efbe59f, 0x1d87c41b, 0x1e40befc, 0x1e3d05b5 - data4 0x1de9ea67, 0x1ec9a21c, 0x1decb69a, 0x1df6e75a - data4 0x9e8030ab, 0x9db20540, 0x9ef1e977, 0x1e3cdc43 - data4 0x1e0492b0, 0x9e91d872, 0x1e775346, 0x9e939978 - data4 0x1eb2714e, 0x1e49a203, 0x9e10195a, 0x1ef1ffc3 - data4 0x9ea8b709, 0x9e832e27, 0x1ed5ac3b, 0x1edb20a6 - data4 0x1e4dbd4e, 0x1efbb932, 0x1d8170ec, 0x1e6c4849 - data4 0x1f008e17, 0x1e8000c4, 0x1d855ecf, 0x9e37cb85 - data4 0x1ecffdf5, 0x1eba6519, 0x9edbe600, 0x1ea3e5e7 - data4 0x1ed4fb39, 0x1f00be77, 0x1e6f4484, 0x9e9e7107 - data4 0x9e30b29d, 0x9ee6e174, 0x1e3a2656, 0x9dd72f3f - data4 0x9ee12138, 0x1ed16fed, 0x9ece8a02, 0x9ca5b249 - data4 0x9eafd508, 0x9ef0e9fc, 0x1d1307ac, 0x1eecee20 - data4 0x1cf60c6f, 0x9d556216, 0x9eaed175, 0x9ec919f4 - data4 0x1ec2c988, 0x1cd82772, 0x9dc99456, 0x1eab0467 - data4 0x1e89b36f, 0x1c757944, 0x1eef9abd, 0x9e98664d -LOCAL_OBJECT_END(D_table) - - -.section .text -GLOBAL_LIBM_ENTRY(cbrtl) - -{ .mfi - getf.sig GR_ARGSIG = f8 - // will continue on main path only for normal/denormal numbers - // all other values will be filtered out and will exit early - fclass.nm.unc p12, p7 = f8, 0x1b - // GR_ADDR = pointer to C_1...C_6 followed by T_table - addl GR_ADDR = @ltoff(poly_coeffs), gp -} -{ .mfi - // GR_BIAS23 = 2/3*bias -63 = 0xaaaa-0x3f = 0xaa6b - mov GR_BIAS23 = 0xaa6b - // normalize a - fma.s1 FR_XNORM = f8, f1, f0 - // GR_D_ADDR = pointer to D table - addl GR_D_ADDR = @ltoff(D_table), gp -} -;; - -{ .mmf - // load start address for C_1...C_6 followed by T_table - ld8 GR_C_START = [ GR_ADDR ] - // load start address of D table - ld8 GR_D_START = [ GR_D_ADDR ] - // y = frcpa(a) - frcpa.s1 FR_RCP, p6 = f1, f8 -} -;; - -{ .mmi - // get normalized significand - getf.sig GR_NORMSIG = FR_XNORM - // get exponent - getf.exp GR_NORMEXPSGN = FR_XNORM - (p7) cmp.eq p12, p0 = GR_ARGSIG, r0 -} -;; - -{ .mii - // load C_1 - ldfe FR_C1 = [ GR_C_START ], 16 - mov GR_SGNMASK = 0x20000 - nop.i 0 -} -;; - -{ .mfb - // load C_2 - ldfe FR_C2 = [ GR_C_START ], 16 - (p12) fma.s0 f8 = f8, f1, f0 - // NaN/Infinities exit early - (p12) br.ret.spnt b0 -} -;; - -{ .mfi - // load C_3, C_4 - ldfpd FR_C3, FR_C4 = [ GR_C_START ], 16 - // y = frcpa(a), set flags and result when argument is 0 - // only used when p6=0 - frcpa.s0 f8, p0 = f1, f8 - nop.i 0 -} -;; - -{ .mii - // get GR_SIGN = sign - and GR_SIGN = GR_NORMEXPSGN, GR_SGNMASK - // eliminate leading 1 from GR_NORMSIG = 2nd table index - shl GR_INDEX2 = GR_NORMSIG, 1 - // eliminate sign from exponent - andcm GR_NORMEXP = GR_NORMEXPSGN, GR_SGNMASK -} -;; - -{ .mfi - // load C_5, C_6 - (p6) ldfpd FR_C5, FR_C6 = [ GR_C_START ], 16 - // r = 1-a*y - (p6) fnma.s1 FR_R = FR_RCP, FR_XNORM, f1 - // Start computation of floor(exponent/3) by - // computing (2^20+2)/3*exponent = exponent*0x55556 - // 1: exponent* = 5; - // (2^{16}-1)/3 = 0x5555: - // will form 0x5555*exponent by using shladd's - shladd GR_EXP5 = GR_NORMEXP, 2, GR_NORMEXP -} -;; - -{ .mib - // Next several integer steps compute floor(exponent/3) - // GR_TMP1 = (5*expon)*16 - shladd GR_TMP1 = GR_EXP5, 4, r0 - // GR_EXP3 = 3*exponent - shladd GR_EXP3 = GR_NORMEXP, 1, GR_NORMEXP - nop.b 0 -} -;; - -{ .mmi - // GR_EXP6 = 6*exponent - shladd GR_EXP6 = GR_EXP3, 1, r0 - // GR_EXP17 = 17*expon - add GR_EXP17 = GR_EXP5, GR_TMP1 - // GR_IX2 = 2nd table index (8 bits) - shr.u GR_IX2 = GR_INDEX2, 56 -} -;; - -{ .mmi - // adjust T_table pointer by 2nd index - shladd GR_T_INDEX = GR_IX2, 3, GR_C_START - // adjust D_table pointer by 2nd index - shladd GR_D_INDEX = GR_IX2, 2, GR_D_START - // GR_TMP2 = (17*expon)*16^2 - shl GR_TMP2 = GR_EXP17, 8 -} -;; - -{ .mmi - // GR_TMP3 = expon*(2^16-1)/3 - add GR_TMP3 = GR_EXP17, GR_TMP2 -;; - // GR_TMP4 = expon*(2^20+2)/3 = expon*0x55556 - shladd GR_TMP4 = GR_TMP3, 4, GR_EXP6 - nop.i 0 -} -;; - -{ .mii - nop.m 0 - // GR_EXP_RES = floor(expon/3) - shr.u GR_EXP_RES = GR_TMP4, 20 - nop.i 0 -} -;; - -{ .mmi - nop.m 0 - // r16 = 3*exponent - shladd r16 = GR_EXP_RES, 1, GR_EXP_RES - // bias exponent - add GR_EXPBIAS = GR_BIAS23, GR_EXP_RES -} -;; - -{ .mmi - // get remainder of exponent/3 - sub GR_EXP_MOD_3 = GR_NORMEXP, r16 -;; - // add sign to exponent - or GR_EXPSIGNRES = GR_EXPBIAS, GR_SIGN - // remainder << = 8 - shl GR_REMTMP = GR_EXP_MOD_3, 8 -} -;; - -{ .mfi - // adjust D_table pointer by 1st index - shladd GR_IX_D = GR_REMTMP, 2, GR_D_INDEX - // P_1 = C_1+C_2*r - (p6) fma.s1 FR_P1 = FR_C2, FR_R, FR_C1 - // adjust T_table pointer by 1st index - shladd GR_IX_T = GR_REMTMP, 3, GR_T_INDEX -} -{ .mfi - // FR_SGNEXP = sign*2^{exponent/3} - (p6) setf.exp FR_SGNEXP = GR_EXPSIGNRES - // r^2 = r*r - (p6) fma.s1 FR_R2 = FR_R, FR_R, f0 - nop.i 0 -} -;; - -{ .mfi - // load D - (p6) ldfs FR_D = [ GR_IX_D ] - // P_2 = C_3+C_4*r - (p6) fma.s1 FR_P2 = FR_C4, FR_R, FR_C3 - nop.i 0 -} -{ .mfi - // load T - (p6) ldf8 FR_T = [ GR_IX_T ] - // P_3 = C_5+C_6*r - (p6) fma.s1 FR_P3 = FR_C6, FR_R, FR_C5 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // P_4 = D-r*P_1 - (p6) fnma.s1 FR_P4 = FR_R, FR_P1, FR_D - nop.i 0 -} -{ .mfi - nop.m 0 - // r^3 = r*r^2 - (p6) fma.s1 FR_R3 = FR_R, FR_R2, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // P_5 = P_2+r2*P_3 - (p6) fma.s1 FR_P5 = FR_R2, FR_P3, FR_P2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // T = T*(sign*2^{exponent/3}) - (p6) fma.s1 FR_TF = FR_T, FR_SGNEXP, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - // P = P_4-r3*P_5 - (p6) fnma.s1 FR_P = FR_R3, FR_P5, FR_P4 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - // result = T+T*p - (p6) fma.s0 f8 = FR_TF, FR_P, FR_TF - br.ret.sptk b0 -} -;; - -GLOBAL_LIBM_END(cbrtl) diff --git a/sysdeps/ia64/fpu/s_ceil.S b/sysdeps/ia64/fpu/s_ceil.S deleted file mode 100644 index d1d2980618..0000000000 --- a/sysdeps/ia64/fpu/s_ceil.S +++ /dev/null @@ -1,224 +0,0 @@ -.file "ceil.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 06/13/00 Improved speed -// 06/27/00 Eliminated incorrect invalid flag setting -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/28/03 Improved performance -//============================================================== - -// API -//============================================================== -// double ceil(double x) -//============================================================== - -// general input registers: -// r14 - r19 - -rSignexp = r14 -rExp = r15 -rExpMask = r16 -rBigexp = r17 -rM1 = r18 -rSignexpM1 = r19 - -// floating-point registers: -// f8 - f13 - -fXInt = f9 -fNormX = f10 -fTmp = f11 -fAdj = f12 -fPreResult = f13 - -// predicate registers used: -// p6 - p10 - -// Overview of operation -//============================================================== -// double ceil(double x) -// Return an integer value (represented as a double) that is the smallest -// value not less than x -// This is x rounded toward +infinity to an integral value. -// Inexact is set if x != ceil(x) -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - - -.section .text -GLOBAL_LIBM_ENTRY(ceil) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fclass.m p7,p0 = f8, 0x0b // Test x unorm - addl rBigexp = 0x10033, r0 // Set exponent at which is integer -} -{ .mfi - mov rM1 = -1 // Set all ones - fcvt.fx.trunc.s1 fXInt = f8 // Convert to int in significand - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - mov rSignexpM1 = 0x2FFFF // Form signexp of -1 - fcmp.lt.s1 p8,p9 = f8, f0 // Test x < 0 - nop.i 0 -} -{ .mfb - setf.sig fTmp = rM1 // Make const for setting inexact - fnorm.s1 fNormX = f8 // Normalize input -(p7) br.cond.spnt CEIL_UNORM // Branch if x unorm -} -;; - -CEIL_COMMON: -// Return here from CEIL_UNORM -{ .mfi - nop.m 0 - fclass.m p6,p0 = f8, 0x1e7 // Test x natval, nan, inf, 0 - nop.i 0 -} -;; - -.pred.rel "mutex",p8,p9 -{ .mfi - nop.m 0 -(p8) fma.s1 fAdj = f0, f0, f0 // If x < 0, adjustment is 0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 fAdj = f1, f1, f0 // If x > 0, adjustment is +1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.xf fPreResult = fXInt // trunc(x) - nop.i 0 -} -{ .mfb - nop.m 0 -(p6) fma.d.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf, 0 -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf, 0 -} -;; - -{ .mmi - and rExp = rSignexp, rExpMask // Get biased exponent -;; - cmp.ge p7,p6 = rExp, rBigexp // Is |x| >= 2^52? -(p8) cmp.lt.unc p10,p0 = rSignexp, rSignexpM1 // Is -1 < x < 0? -} -;; - -// If -1 < x < 0, we turn off p6 and compute result as -0 -{ .mfi -(p10) cmp.ne p6,p0 = r0,r0 -(p10) fmerge.s f8 = fNormX, f0 - nop.i 0 -} -;; - -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fma.d.s0 f8 = fPreResult, f1, fAdj // Result if !int, |x| < 2^52 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.d.s0 f8 = fNormX, f1, f0 // Result, if |x| >= 2^52 -(p10) cmp.eq p6,p0 = r0,r0 // If -1 < x < 0, turn on p6 again -} -;; - -{ .mfi - nop.m 0 -(p6) fcmp.eq.unc.s1 p8, p9 = fPreResult, fNormX // Is trunc(x) = x ? - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p9) fmpy.s0 fTmp = fTmp, fTmp // Dummy to set inexact - nop.i 0 -} -{ .mfb - nop.m 0 -(p8) fma.d.s0 f8 = fNormX, f1, f0 // If x int, result normalized x - br.ret.sptk b0 // Exit main path, 0 < |x| < 2^52 -} -;; - - -CEIL_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk CEIL_COMMON // Return to main path -} -;; - -GLOBAL_LIBM_END(ceil) diff --git a/sysdeps/ia64/fpu/s_ceilf.S b/sysdeps/ia64/fpu/s_ceilf.S deleted file mode 100644 index 051534a202..0000000000 --- a/sysdeps/ia64/fpu/s_ceilf.S +++ /dev/null @@ -1,224 +0,0 @@ -.file "ceilf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 06/13/00 Improved speed -// 06/27/00 Eliminated incorrect invalid flag setting -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/28/03 Improved performance -//============================================================== - -// API -//============================================================== -// float ceilf(float x) -//============================================================== - -// general input registers: -// r14 - r19 - -rSignexp = r14 -rExp = r15 -rExpMask = r16 -rBigexp = r17 -rM1 = r18 -rSignexpM1 = r19 - -// floating-point registers: -// f8 - f13 - -fXInt = f9 -fNormX = f10 -fTmp = f11 -fAdj = f12 -fPreResult = f13 - -// predicate registers used: -// p6 - p10 - -// Overview of operation -//============================================================== -// float ceilf(float x) -// Return an integer value (represented as a float) that is the smallest -// value not less than x -// This is x rounded toward +infinity to an integral value. -// Inexact is set if x != ceilf(x) -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - - -.section .text -GLOBAL_LIBM_ENTRY(ceilf) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fclass.m p7,p0 = f8, 0x0b // Test x unorm - addl rBigexp = 0x10016, r0 // Set exponent at which is integer -} -{ .mfi - mov rM1 = -1 // Set all ones - fcvt.fx.trunc.s1 fXInt = f8 // Convert to int in significand - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - mov rSignexpM1 = 0x2FFFF // Form signexp of -1 - fcmp.lt.s1 p8,p9 = f8, f0 // Test x < 0 - nop.i 0 -} -{ .mfb - setf.sig fTmp = rM1 // Make const for setting inexact - fnorm.s1 fNormX = f8 // Normalize input -(p7) br.cond.spnt CEIL_UNORM // Branch if x unorm -} -;; - -CEIL_COMMON: -// Return here from CEIL_UNORM -{ .mfi - nop.m 0 - fclass.m p6,p0 = f8, 0x1e7 // Test x natval, nan, inf, 0 - nop.i 0 -} -;; - -.pred.rel "mutex",p8,p9 -{ .mfi - nop.m 0 -(p8) fma.s1 fAdj = f0, f0, f0 // If x < 0, adjustment is 0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 fAdj = f1, f1, f0 // If x > 0, adjustment is +1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.xf fPreResult = fXInt // trunc(x) - nop.i 0 -} -{ .mfb - nop.m 0 -(p6) fma.s.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf, 0 -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf, 0 -} -;; - -{ .mmi - and rExp = rSignexp, rExpMask // Get biased exponent -;; - cmp.ge p7,p6 = rExp, rBigexp // Is |x| >= 2^23? -(p8) cmp.lt.unc p10,p0 = rSignexp, rSignexpM1 // Is -1 < x < 0? -} -;; - -// If -1 < x < 0, we turn off p6 and compute result as -0 -{ .mfi -(p10) cmp.ne p6,p0 = r0,r0 -(p10) fmerge.s f8 = fNormX, f0 - nop.i 0 -} -;; - -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fma.s.s0 f8 = fPreResult, f1, fAdj // Result if !int, |x| < 2^23 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.s.s0 f8 = fNormX, f1, f0 // Result, if |x| >= 2^23 -(p10) cmp.eq p6,p0 = r0,r0 // If -1 < x < 0, turn on p6 again -} -;; - -{ .mfi - nop.m 0 -(p6) fcmp.eq.unc.s1 p8, p9 = fPreResult, fNormX // Is trunc(x) = x ? - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p9) fmpy.s0 fTmp = fTmp, fTmp // Dummy to set inexact - nop.i 0 -} -{ .mfb - nop.m 0 -(p8) fma.s.s0 f8 = fNormX, f1, f0 // If x int, result normalized x - br.ret.sptk b0 // Exit main path, 0 < |x| < 2^23 -} -;; - - -CEIL_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk CEIL_COMMON // Return to main path -} -;; - -GLOBAL_LIBM_END(ceilf) diff --git a/sysdeps/ia64/fpu/s_ceill.S b/sysdeps/ia64/fpu/s_ceill.S deleted file mode 100644 index 71cb01d3fa..0000000000 --- a/sysdeps/ia64/fpu/s_ceill.S +++ /dev/null @@ -1,224 +0,0 @@ -.file "ceill.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 06/13/00 Improved speed -// 06/27/00 Eliminated incorrect invalid flag setting -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/28/03 Improved performance -//============================================================== - -// API -//============================================================== -// long double ceill(long double x) -//============================================================== - -// general input registers: -// r14 - r19 - -rSignexp = r14 -rExp = r15 -rExpMask = r16 -rBigexp = r17 -rM1 = r18 -rSignexpM1 = r19 - -// floating-point registers: -// f8 - f13 - -fXInt = f9 -fNormX = f10 -fTmp = f11 -fAdj = f12 -fPreResult = f13 - -// predicate registers used: -// p6 - p10 - -// Overview of operation -//============================================================== -// long double ceill(long double x) -// Return an integer value (represented as a long double) that is the smallest -// value not less than x -// This is x rounded toward +infinity to an integral value. -// Inexact is set if x != ceill(x) -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - - -.section .text -GLOBAL_LIBM_ENTRY(ceill) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fclass.m p7,p0 = f8, 0x0b // Test x unorm - addl rBigexp = 0x1003e, r0 // Set exponent at which is integer -} -{ .mfi - mov rM1 = -1 // Set all ones - fcvt.fx.trunc.s1 fXInt = f8 // Convert to int in significand - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - mov rSignexpM1 = 0x2FFFF // Form signexp of -1 - fcmp.lt.s1 p8,p9 = f8, f0 // Test x < 0 - nop.i 0 -} -{ .mfb - setf.sig fTmp = rM1 // Make const for setting inexact - fnorm.s1 fNormX = f8 // Normalize input -(p7) br.cond.spnt CEIL_UNORM // Branch if x unorm -} -;; - -CEIL_COMMON: -// Return here from CEIL_UNORM -{ .mfi - nop.m 0 - fclass.m p6,p0 = f8, 0x1e7 // Test x natval, nan, inf, 0 - nop.i 0 -} -;; - -.pred.rel "mutex",p8,p9 -{ .mfi - nop.m 0 -(p8) fma.s1 fAdj = f0, f0, f0 // If x < 0, adjustment is 0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 fAdj = f1, f1, f0 // If x > 0, adjustment is +1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.xf fPreResult = fXInt // trunc(x) - nop.i 0 -} -{ .mfb - nop.m 0 -(p6) fma.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf, 0 -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf, 0 -} -;; - -{ .mmi - and rExp = rSignexp, rExpMask // Get biased exponent -;; - cmp.ge p7,p6 = rExp, rBigexp // Is |x| >= 2^63? -(p8) cmp.lt.unc p10,p0 = rSignexp, rSignexpM1 // Is -1 < x < 0? -} -;; - -// If -1 < x < 0, we turn off p6 and compute result as -0 -{ .mfi -(p10) cmp.ne p6,p0 = r0,r0 -(p10) fmerge.s f8 = fNormX, f0 - nop.i 0 -} -;; - -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fma.s0 f8 = fPreResult, f1, fAdj // Result if !int, |x| < 2^63 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.s0 f8 = fNormX, f1, f0 // Result, if |x| >= 2^63 -(p10) cmp.eq p6,p0 = r0,r0 // If -1 < x < 0, turn on p6 again -} -;; - -{ .mfi - nop.m 0 -(p6) fcmp.eq.unc.s1 p8, p9 = fPreResult, fNormX // Is trunc(x) = x ? - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p9) fmpy.s0 fTmp = fTmp, fTmp // Dummy to set inexact - nop.i 0 -} -{ .mfb - nop.m 0 -(p8) fma.s0 f8 = fNormX, f1, f0 // If x int, result normalized x - br.ret.sptk b0 // Exit main path, 0 < |x| < 2^63 -} -;; - - -CEIL_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk CEIL_COMMON // Return to main path -} -;; - -GLOBAL_LIBM_END(ceill) diff --git a/sysdeps/ia64/fpu/s_copysign.S b/sysdeps/ia64/fpu/s_copysign.S deleted file mode 100644 index f41e816b57..0000000000 --- a/sysdeps/ia64/fpu/s_copysign.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#undef ret - -ENTRY (__copysign) -{ - fmerge.s fret0 = farg1, farg0 - br.ret.sptk.many rp -} -END (__copysign) - -strong_alias (__copysign, __copysignf) -strong_alias (__copysign, __copysignl) - -strong_alias (__copysign, __libm_copysign) -strong_alias (__copysign, __libm_copysignf) -strong_alias (__copysign, __libm_copysignl) - -weak_alias (__copysign, copysign) -weak_alias (__copysignf, copysignf) -weak_alias (__copysignl, copysignl) diff --git a/sysdeps/ia64/fpu/s_copysignf.S b/sysdeps/ia64/fpu/s_copysignf.S deleted file mode 100644 index 055251d0d2..0000000000 --- a/sysdeps/ia64/fpu/s_copysignf.S +++ /dev/null @@ -1 +0,0 @@ -/* __copysignf is in s_copysign.S. */ diff --git a/sysdeps/ia64/fpu/s_copysignl.S b/sysdeps/ia64/fpu/s_copysignl.S deleted file mode 100644 index e772372678..0000000000 --- a/sysdeps/ia64/fpu/s_copysignl.S +++ /dev/null @@ -1 +0,0 @@ -/* __copysignl is in s_copysign.S. */ diff --git a/sysdeps/ia64/fpu/s_cos.S b/sysdeps/ia64/fpu/s_cos.S deleted file mode 100644 index 5f5cdc1d36..0000000000 --- a/sysdeps/ia64/fpu/s_cos.S +++ /dev/null @@ -1,767 +0,0 @@ -.file "sincos.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/02/00 Unwind support added. -// 06/16/00 Updated tables to enforce symmetry -// 08/31/00 Saved 2 cycles in main path, and 9 in other paths. -// 09/20/00 The updated tables regressed to an old version, so reinstated them -// 10/18/00 Changed one table entry to ensure symmetry -// 01/03/01 Improved speed, fixed flag settings for small arguments. -// 02/18/02 Large arguments processing routine excluded -// 05/20/02 Cleaned up namespace and sf0 syntax -// 06/03/02 Insure inexact flag set for large arg result -// 09/05/02 Work range is widened by reduction strengthen (3 parts of Pi/16) -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 08/08/03 Improved performance -// 10/28/04 Saved sincos_r_sincos to avoid clobber by dynamic loader -// 03/31/05 Reformatted delimiters between data tables - -// API -//============================================================== -// double sin( double x); -// double cos( double x); -// -// Overview of operation -//============================================================== -// -// Step 1 -// ====== -// Reduce x to region -1/2*pi/2^k ===== 0 ===== +1/2*pi/2^k where k=4 -// divide x by pi/2^k. -// Multiply by 2^k/pi. -// nfloat = Round result to integer (round-to-nearest) -// -// r = x - nfloat * pi/2^k -// Do this as ((((x - nfloat * HIGH(pi/2^k))) - -// nfloat * LOW(pi/2^k)) - -// nfloat * LOWEST(pi/2^k) for increased accuracy. -// pi/2^k is stored as two numbers that when added make pi/2^k. -// pi/2^k = HIGH(pi/2^k) + LOW(pi/2^k) -// HIGH and LOW parts are rounded to zero values, -// and LOWEST is rounded to nearest one. -// -// x = (nfloat * pi/2^k) + r -// r is small enough that we can use a polynomial approximation -// and is referred to as the reduced argument. -// -// Step 3 -// ====== -// Take the unreduced part and remove the multiples of 2pi. -// So nfloat = nfloat (with lower k+1 bits cleared) + lower k+1 bits -// -// nfloat (with lower k+1 bits cleared) is a multiple of 2^(k+1) -// N * 2^(k+1) -// nfloat * pi/2^k = N * 2^(k+1) * pi/2^k + (lower k+1 bits) * pi/2^k -// nfloat * pi/2^k = N * 2 * pi + (lower k+1 bits) * pi/2^k -// nfloat * pi/2^k = N2pi + M * pi/2^k -// -// -// Sin(x) = Sin((nfloat * pi/2^k) + r) -// = Sin(nfloat * pi/2^k) * Cos(r) + Cos(nfloat * pi/2^k) * Sin(r) -// -// Sin(nfloat * pi/2^k) = Sin(N2pi + Mpi/2^k) -// = Sin(N2pi)Cos(Mpi/2^k) + Cos(N2pi)Sin(Mpi/2^k) -// = Sin(Mpi/2^k) -// -// Cos(nfloat * pi/2^k) = Cos(N2pi + Mpi/2^k) -// = Cos(N2pi)Cos(Mpi/2^k) + Sin(N2pi)Sin(Mpi/2^k) -// = Cos(Mpi/2^k) -// -// Sin(x) = Sin(Mpi/2^k) Cos(r) + Cos(Mpi/2^k) Sin(r) -// -// -// Step 4 -// ====== -// 0 <= M < 2^(k+1) -// There are 2^(k+1) Sin entries in a table. -// There are 2^(k+1) Cos entries in a table. -// -// Get Sin(Mpi/2^k) and Cos(Mpi/2^k) by table lookup. -// -// -// Step 5 -// ====== -// Calculate Cos(r) and Sin(r) by polynomial approximation. -// -// Cos(r) = 1 + r^2 q1 + r^4 q2 + r^6 q3 + ... = Series for Cos -// Sin(r) = r + r^3 p1 + r^5 p2 + r^7 p3 + ... = Series for Sin -// -// and the coefficients q1, q2, ... and p1, p2, ... are stored in a table -// -// -// Calculate -// Sin(x) = Sin(Mpi/2^k) Cos(r) + Cos(Mpi/2^k) Sin(r) -// -// as follows -// -// S[m] = Sin(Mpi/2^k) and C[m] = Cos(Mpi/2^k) -// rsq = r*r -// -// -// P = p1 + r^2p2 + r^4p3 + r^6p4 -// Q = q1 + r^2q2 + r^4q3 + r^6q4 -// -// rcub = r * rsq -// Sin(r) = r + rcub * P -// = r + r^3p1 + r^5p2 + r^7p3 + r^9p4 + ... = Sin(r) -// -// The coefficients are not exactly these values, but almost. -// -// p1 = -1/6 = -1/3! -// p2 = 1/120 = 1/5! -// p3 = -1/5040 = -1/7! -// p4 = 1/362889 = 1/9! -// -// P = r + rcub * P -// -// Answer = S[m] Cos(r) + [Cm] P -// -// Cos(r) = 1 + rsq Q -// Cos(r) = 1 + r^2 Q -// Cos(r) = 1 + r^2 (q1 + r^2q2 + r^4q3 + r^6q4) -// Cos(r) = 1 + r^2q1 + r^4q2 + r^6q3 + r^8q4 + ... -// -// S[m] Cos(r) = S[m](1 + rsq Q) -// S[m] Cos(r) = S[m] + Sm rsq Q -// S[m] Cos(r) = S[m] + s_rsq Q -// Q = S[m] + s_rsq Q -// -// Then, -// -// Answer = Q + C[m] P - - -// Registers used -//============================================================== -// general input registers: -// r14 -> r26 -// r32 -> r35 - -// predicate registers used: -// p6 -> p11 - -// floating-point registers used -// f9 -> f15 -// f32 -> f61 - -// Assembly macros -//============================================================== -sincos_NORM_f8 = f9 -sincos_W = f10 -sincos_int_Nfloat = f11 -sincos_Nfloat = f12 - -sincos_r = f13 -sincos_rsq = f14 -sincos_rcub = f15 -sincos_save_tmp = f15 - -sincos_Inv_Pi_by_16 = f32 -sincos_Pi_by_16_1 = f33 -sincos_Pi_by_16_2 = f34 - -sincos_Inv_Pi_by_64 = f35 - -sincos_Pi_by_16_3 = f36 - -sincos_r_exact = f37 - -sincos_Sm = f38 -sincos_Cm = f39 - -sincos_P1 = f40 -sincos_Q1 = f41 -sincos_P2 = f42 -sincos_Q2 = f43 -sincos_P3 = f44 -sincos_Q3 = f45 -sincos_P4 = f46 -sincos_Q4 = f47 - -sincos_P_temp1 = f48 -sincos_P_temp2 = f49 - -sincos_Q_temp1 = f50 -sincos_Q_temp2 = f51 - -sincos_P = f52 -sincos_Q = f53 - -sincos_srsq = f54 - -sincos_SIG_INV_PI_BY_16_2TO61 = f55 -sincos_RSHF_2TO61 = f56 -sincos_RSHF = f57 -sincos_2TOM61 = f58 -sincos_NFLOAT = f59 -sincos_W_2TO61_RSH = f60 - -fp_tmp = f61 - -///////////////////////////////////////////////////////////// - -sincos_GR_sig_inv_pi_by_16 = r14 -sincos_GR_rshf_2to61 = r15 -sincos_GR_rshf = r16 -sincos_GR_exp_2tom61 = r17 -sincos_GR_n = r18 -sincos_GR_m = r19 -sincos_GR_32m = r19 -sincos_GR_all_ones = r19 -sincos_AD_1 = r20 -sincos_AD_2 = r21 -sincos_exp_limit = r22 -sincos_r_signexp = r23 -sincos_r_17_ones = r24 -sincos_r_sincos = r25 -sincos_r_exp = r26 - -GR_SAVE_PFS = r33 -GR_SAVE_B0 = r34 -GR_SAVE_GP = r35 -GR_SAVE_r_sincos = r36 - - -RODATA - -// Pi/16 parts -.align 16 -LOCAL_OBJECT_START(double_sincos_pi) - data8 0xC90FDAA22168C234, 0x00003FFC // pi/16 1st part - data8 0xC4C6628B80DC1CD1, 0x00003FBC // pi/16 2nd part - data8 0xA4093822299F31D0, 0x00003F7A // pi/16 3rd part -LOCAL_OBJECT_END(double_sincos_pi) - -// Coefficients for polynomials -LOCAL_OBJECT_START(double_sincos_pq_k4) - data8 0x3EC71C963717C63A // P4 - data8 0x3EF9FFBA8F191AE6 // Q4 - data8 0xBF2A01A00F4E11A8 // P3 - data8 0xBF56C16C05AC77BF // Q3 - data8 0x3F8111111110F167 // P2 - data8 0x3FA555555554DD45 // Q2 - data8 0xBFC5555555555555 // P1 - data8 0xBFDFFFFFFFFFFFFC // Q1 -LOCAL_OBJECT_END(double_sincos_pq_k4) - -// Sincos table (S[m], C[m]) -LOCAL_OBJECT_START(double_sin_cos_beta_k4) - -data8 0x0000000000000000 , 0x00000000 // sin( 0 pi/16) S0 -data8 0x8000000000000000 , 0x00003fff // cos( 0 pi/16) C0 -// -data8 0xc7c5c1e34d3055b3 , 0x00003ffc // sin( 1 pi/16) S1 -data8 0xfb14be7fbae58157 , 0x00003ffe // cos( 1 pi/16) C1 -// -data8 0xc3ef1535754b168e , 0x00003ffd // sin( 2 pi/16) S2 -data8 0xec835e79946a3146 , 0x00003ffe // cos( 2 pi/16) C2 -// -data8 0x8e39d9cd73464364 , 0x00003ffe // sin( 3 pi/16) S3 -data8 0xd4db3148750d181a , 0x00003ffe // cos( 3 pi/16) C3 -// -data8 0xb504f333f9de6484 , 0x00003ffe // sin( 4 pi/16) S4 -data8 0xb504f333f9de6484 , 0x00003ffe // cos( 4 pi/16) C4 -// -data8 0xd4db3148750d181a , 0x00003ffe // sin( 5 pi/16) C3 -data8 0x8e39d9cd73464364 , 0x00003ffe // cos( 5 pi/16) S3 -// -data8 0xec835e79946a3146 , 0x00003ffe // sin( 6 pi/16) C2 -data8 0xc3ef1535754b168e , 0x00003ffd // cos( 6 pi/16) S2 -// -data8 0xfb14be7fbae58157 , 0x00003ffe // sin( 7 pi/16) C1 -data8 0xc7c5c1e34d3055b3 , 0x00003ffc // cos( 7 pi/16) S1 -// -data8 0x8000000000000000 , 0x00003fff // sin( 8 pi/16) C0 -data8 0x0000000000000000 , 0x00000000 // cos( 8 pi/16) S0 -// -data8 0xfb14be7fbae58157 , 0x00003ffe // sin( 9 pi/16) C1 -data8 0xc7c5c1e34d3055b3 , 0x0000bffc // cos( 9 pi/16) -S1 -// -data8 0xec835e79946a3146 , 0x00003ffe // sin(10 pi/16) C2 -data8 0xc3ef1535754b168e , 0x0000bffd // cos(10 pi/16) -S2 -// -data8 0xd4db3148750d181a , 0x00003ffe // sin(11 pi/16) C3 -data8 0x8e39d9cd73464364 , 0x0000bffe // cos(11 pi/16) -S3 -// -data8 0xb504f333f9de6484 , 0x00003ffe // sin(12 pi/16) S4 -data8 0xb504f333f9de6484 , 0x0000bffe // cos(12 pi/16) -S4 -// -data8 0x8e39d9cd73464364 , 0x00003ffe // sin(13 pi/16) S3 -data8 0xd4db3148750d181a , 0x0000bffe // cos(13 pi/16) -C3 -// -data8 0xc3ef1535754b168e , 0x00003ffd // sin(14 pi/16) S2 -data8 0xec835e79946a3146 , 0x0000bffe // cos(14 pi/16) -C2 -// -data8 0xc7c5c1e34d3055b3 , 0x00003ffc // sin(15 pi/16) S1 -data8 0xfb14be7fbae58157 , 0x0000bffe // cos(15 pi/16) -C1 -// -data8 0x0000000000000000 , 0x00000000 // sin(16 pi/16) S0 -data8 0x8000000000000000 , 0x0000bfff // cos(16 pi/16) -C0 -// -data8 0xc7c5c1e34d3055b3 , 0x0000bffc // sin(17 pi/16) -S1 -data8 0xfb14be7fbae58157 , 0x0000bffe // cos(17 pi/16) -C1 -// -data8 0xc3ef1535754b168e , 0x0000bffd // sin(18 pi/16) -S2 -data8 0xec835e79946a3146 , 0x0000bffe // cos(18 pi/16) -C2 -// -data8 0x8e39d9cd73464364 , 0x0000bffe // sin(19 pi/16) -S3 -data8 0xd4db3148750d181a , 0x0000bffe // cos(19 pi/16) -C3 -// -data8 0xb504f333f9de6484 , 0x0000bffe // sin(20 pi/16) -S4 -data8 0xb504f333f9de6484 , 0x0000bffe // cos(20 pi/16) -S4 -// -data8 0xd4db3148750d181a , 0x0000bffe // sin(21 pi/16) -C3 -data8 0x8e39d9cd73464364 , 0x0000bffe // cos(21 pi/16) -S3 -// -data8 0xec835e79946a3146 , 0x0000bffe // sin(22 pi/16) -C2 -data8 0xc3ef1535754b168e , 0x0000bffd // cos(22 pi/16) -S2 -// -data8 0xfb14be7fbae58157 , 0x0000bffe // sin(23 pi/16) -C1 -data8 0xc7c5c1e34d3055b3 , 0x0000bffc // cos(23 pi/16) -S1 -// -data8 0x8000000000000000 , 0x0000bfff // sin(24 pi/16) -C0 -data8 0x0000000000000000 , 0x00000000 // cos(24 pi/16) S0 -// -data8 0xfb14be7fbae58157 , 0x0000bffe // sin(25 pi/16) -C1 -data8 0xc7c5c1e34d3055b3 , 0x00003ffc // cos(25 pi/16) S1 -// -data8 0xec835e79946a3146 , 0x0000bffe // sin(26 pi/16) -C2 -data8 0xc3ef1535754b168e , 0x00003ffd // cos(26 pi/16) S2 -// -data8 0xd4db3148750d181a , 0x0000bffe // sin(27 pi/16) -C3 -data8 0x8e39d9cd73464364 , 0x00003ffe // cos(27 pi/16) S3 -// -data8 0xb504f333f9de6484 , 0x0000bffe // sin(28 pi/16) -S4 -data8 0xb504f333f9de6484 , 0x00003ffe // cos(28 pi/16) S4 -// -data8 0x8e39d9cd73464364 , 0x0000bffe // sin(29 pi/16) -S3 -data8 0xd4db3148750d181a , 0x00003ffe // cos(29 pi/16) C3 -// -data8 0xc3ef1535754b168e , 0x0000bffd // sin(30 pi/16) -S2 -data8 0xec835e79946a3146 , 0x00003ffe // cos(30 pi/16) C2 -// -data8 0xc7c5c1e34d3055b3 , 0x0000bffc // sin(31 pi/16) -S1 -data8 0xfb14be7fbae58157 , 0x00003ffe // cos(31 pi/16) C1 -// -data8 0x0000000000000000 , 0x00000000 // sin(32 pi/16) S0 -data8 0x8000000000000000 , 0x00003fff // cos(32 pi/16) C0 -LOCAL_OBJECT_END(double_sin_cos_beta_k4) - -.section .text - -//////////////////////////////////////////////////////// -// There are two entry points: sin and cos - - -// If from sin, p8 is true -// If from cos, p9 is true - -GLOBAL_IEEE754_ENTRY(sin) - -{ .mlx - getf.exp sincos_r_signexp = f8 - movl sincos_GR_sig_inv_pi_by_16 = 0xA2F9836E4E44152A // signd of 16/pi -} -{ .mlx - addl sincos_AD_1 = @ltoff(double_sincos_pi), gp - movl sincos_GR_rshf_2to61 = 0x47b8000000000000 // 1.1 2^(63+63-2) -} -;; - -{ .mfi - ld8 sincos_AD_1 = [sincos_AD_1] - fnorm.s0 sincos_NORM_f8 = f8 // Normalize argument - cmp.eq p8,p9 = r0, r0 // set p8 (clear p9) for sin -} -{ .mib - mov sincos_GR_exp_2tom61 = 0xffff-61 // exponent of scale 2^-61 - mov sincos_r_sincos = 0x0 // sincos_r_sincos = 0 for sin - br.cond.sptk _SINCOS_COMMON // go to common part -} -;; - -GLOBAL_IEEE754_END(sin) - -GLOBAL_IEEE754_ENTRY(cos) - -{ .mlx - getf.exp sincos_r_signexp = f8 - movl sincos_GR_sig_inv_pi_by_16 = 0xA2F9836E4E44152A // signd of 16/pi -} -{ .mlx - addl sincos_AD_1 = @ltoff(double_sincos_pi), gp - movl sincos_GR_rshf_2to61 = 0x47b8000000000000 // 1.1 2^(63+63-2) -} -;; - -{ .mfi - ld8 sincos_AD_1 = [sincos_AD_1] - fnorm.s1 sincos_NORM_f8 = f8 // Normalize argument - cmp.eq p9,p8 = r0, r0 // set p9 (clear p8) for cos -} -{ .mib - mov sincos_GR_exp_2tom61 = 0xffff-61 // exp of scale 2^-61 - mov sincos_r_sincos = 0x8 // sincos_r_sincos = 8 for cos - nop.b 999 -} -;; - -//////////////////////////////////////////////////////// -// All entry points end up here. -// If from sin, sincos_r_sincos is 0 and p8 is true -// If from cos, sincos_r_sincos is 8 = 2^(k-1) and p9 is true -// We add sincos_r_sincos to N - -///////////// Common sin and cos part ////////////////// -_SINCOS_COMMON: - - -// Form two constants we need -// 16/pi * 2^-2 * 2^63, scaled by 2^61 since we just loaded the significand -// 1.1000...000 * 2^(63+63-2) to right shift int(W) into the low significand -{ .mfi - setf.sig sincos_SIG_INV_PI_BY_16_2TO61 = sincos_GR_sig_inv_pi_by_16 - fclass.m p6,p0 = f8, 0xe7 // if x = 0,inf,nan - mov sincos_exp_limit = 0x1001a -} -{ .mlx - setf.d sincos_RSHF_2TO61 = sincos_GR_rshf_2to61 - movl sincos_GR_rshf = 0x43e8000000000000 // 1.1 2^63 -} // Right shift -;; - -// Form another constant -// 2^-61 for scaling Nfloat -// 0x1001a is register_bias + 27. -// So if f8 >= 2^27, go to large argument routines -{ .mfi - alloc r32 = ar.pfs, 1, 4, 0, 0 - fclass.m p11,p0 = f8, 0x0b // Test for x=unorm - mov sincos_GR_all_ones = -1 // For "inexect" constant create -} -{ .mib - setf.exp sincos_2TOM61 = sincos_GR_exp_2tom61 - nop.i 999 -(p6) br.cond.spnt _SINCOS_SPECIAL_ARGS -} -;; - -// Load the two pieces of pi/16 -// Form another constant -// 1.1000...000 * 2^63, the right shift constant -{ .mmb - ldfe sincos_Pi_by_16_1 = [sincos_AD_1],16 - setf.d sincos_RSHF = sincos_GR_rshf -(p11) br.cond.spnt _SINCOS_UNORM // Branch if x=unorm -} -;; - -_SINCOS_COMMON2: -// Return here if x=unorm -// Create constant used to set inexact -{ .mmi - ldfe sincos_Pi_by_16_2 = [sincos_AD_1],16 - setf.sig fp_tmp = sincos_GR_all_ones - nop.i 999 -};; - -// Select exponent (17 lsb) -{ .mfi - ldfe sincos_Pi_by_16_3 = [sincos_AD_1],16 - nop.f 999 - dep.z sincos_r_exp = sincos_r_signexp, 0, 17 -};; - -// Polynomial coefficients (Q4, P4, Q3, P3, Q2, Q1, P2, P1) loading -// p10 is true if we must call routines to handle larger arguments -// p10 is true if f8 exp is >= 0x1001a (2^27) -{ .mmb - ldfpd sincos_P4,sincos_Q4 = [sincos_AD_1],16 - cmp.ge p10,p0 = sincos_r_exp,sincos_exp_limit -(p10) br.cond.spnt _SINCOS_LARGE_ARGS // Go to "large args" routine -};; - -// sincos_W = x * sincos_Inv_Pi_by_16 -// Multiply x by scaled 16/pi and add large const to shift integer part of W to -// rightmost bits of significand -{ .mfi - ldfpd sincos_P3,sincos_Q3 = [sincos_AD_1],16 - fma.s1 sincos_W_2TO61_RSH = sincos_NORM_f8,sincos_SIG_INV_PI_BY_16_2TO61,sincos_RSHF_2TO61 - nop.i 999 -};; - -// get N = (int)sincos_int_Nfloat -// sincos_NFLOAT = Round_Int_Nearest(sincos_W) -// This is done by scaling back by 2^-61 and subtracting the shift constant -{ .mmf - getf.sig sincos_GR_n = sincos_W_2TO61_RSH - ldfpd sincos_P2,sincos_Q2 = [sincos_AD_1],16 - fms.s1 sincos_NFLOAT = sincos_W_2TO61_RSH,sincos_2TOM61,sincos_RSHF -};; - -// sincos_r = -sincos_Nfloat * sincos_Pi_by_16_1 + x -{ .mfi - ldfpd sincos_P1,sincos_Q1 = [sincos_AD_1],16 - fnma.s1 sincos_r = sincos_NFLOAT, sincos_Pi_by_16_1, sincos_NORM_f8 - nop.i 999 -};; - -// Add 2^(k-1) (which is in sincos_r_sincos) to N -{ .mmi - add sincos_GR_n = sincos_GR_n, sincos_r_sincos -;; -// Get M (least k+1 bits of N) - and sincos_GR_m = 0x1f,sincos_GR_n - nop.i 999 -};; - -// sincos_r = sincos_r -sincos_Nfloat * sincos_Pi_by_16_2 -{ .mfi - nop.m 999 - fnma.s1 sincos_r = sincos_NFLOAT, sincos_Pi_by_16_2, sincos_r - shl sincos_GR_32m = sincos_GR_m,5 -};; - -// Add 32*M to address of sin_cos_beta table -// For sin denorm. - set uflow -{ .mfi - add sincos_AD_2 = sincos_GR_32m, sincos_AD_1 -(p8) fclass.m.unc p10,p0 = f8,0x0b - nop.i 999 -};; - -// Load Sin and Cos table value using obtained index m (sincosf_AD_2) -{ .mfi - ldfe sincos_Sm = [sincos_AD_2],16 - nop.f 999 - nop.i 999 -};; - -// get rsq = r*r -{ .mfi - ldfe sincos_Cm = [sincos_AD_2] - fma.s1 sincos_rsq = sincos_r, sincos_r, f0 // r^2 = r*r - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s0 fp_tmp = fp_tmp,fp_tmp // forces inexact flag - nop.i 999 -};; - -// sincos_r_exact = sincos_r -sincos_Nfloat * sincos_Pi_by_16_3 -{ .mfi - nop.m 999 - fnma.s1 sincos_r_exact = sincos_NFLOAT, sincos_Pi_by_16_3, sincos_r - nop.i 999 -};; - -// Polynomials calculation -// P_1 = P4*r^2 + P3 -// Q_2 = Q4*r^2 + Q3 -{ .mfi - nop.m 999 - fma.s1 sincos_P_temp1 = sincos_rsq, sincos_P4, sincos_P3 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 sincos_Q_temp1 = sincos_rsq, sincos_Q4, sincos_Q3 - nop.i 999 -};; - -// get rcube = r^3 and S[m]*r^2 -{ .mfi - nop.m 999 - fmpy.s1 sincos_srsq = sincos_Sm,sincos_rsq - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s1 sincos_rcub = sincos_r_exact, sincos_rsq - nop.i 999 -};; - -// Polynomials calculation -// Q_2 = Q_1*r^2 + Q2 -// P_1 = P_1*r^2 + P2 -{ .mfi - nop.m 999 - fma.s1 sincos_Q_temp2 = sincos_rsq, sincos_Q_temp1, sincos_Q2 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 sincos_P_temp2 = sincos_rsq, sincos_P_temp1, sincos_P2 - nop.i 999 -};; - -// Polynomials calculation -// Q = Q_2*r^2 + Q1 -// P = P_2*r^2 + P1 -{ .mfi - nop.m 999 - fma.s1 sincos_Q = sincos_rsq, sincos_Q_temp2, sincos_Q1 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 sincos_P = sincos_rsq, sincos_P_temp2, sincos_P1 - nop.i 999 -};; - -// Get final P and Q -// Q = Q*S[m]*r^2 + S[m] -// P = P*r^3 + r -{ .mfi - nop.m 999 - fma.s1 sincos_Q = sincos_srsq,sincos_Q, sincos_Sm - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 sincos_P = sincos_rcub,sincos_P, sincos_r_exact - nop.i 999 -};; - -// If sin(denormal), force underflow to be set -{ .mfi - nop.m 999 -(p10) fmpy.d.s0 fp_tmp = sincos_NORM_f8,sincos_NORM_f8 - nop.i 999 -};; - -// Final calculation -// result = C[m]*P + Q -{ .mfb - nop.m 999 - fma.d.s0 f8 = sincos_Cm, sincos_P, sincos_Q - br.ret.sptk b0 // Exit for common path -};; - -////////// x = 0/Inf/NaN path ////////////////// -_SINCOS_SPECIAL_ARGS: -.pred.rel "mutex",p8,p9 -// sin(+/-0) = +/-0 -// sin(Inf) = NaN -// sin(NaN) = NaN -{ .mfi - nop.m 999 -(p8) fma.d.s0 f8 = f8, f0, f0 // sin(+/-0,NaN,Inf) - nop.i 999 -} -// cos(+/-0) = 1.0 -// cos(Inf) = NaN -// cos(NaN) = NaN -{ .mfb - nop.m 999 -(p9) fma.d.s0 f8 = f8, f0, f1 // cos(+/-0,NaN,Inf) - br.ret.sptk b0 // Exit for x = 0/Inf/NaN path -};; - -_SINCOS_UNORM: -// Here if x=unorm -{ .mfb - getf.exp sincos_r_signexp = sincos_NORM_f8 // Get signexp of x - fcmp.eq.s0 p11,p0 = f8, f0 // Dummy op to set denorm flag - br.cond.sptk _SINCOS_COMMON2 // Return to main path -};; - -GLOBAL_IEEE754_END(cos) - -//////////// x >= 2^27 - large arguments routine call //////////// -LOCAL_LIBM_ENTRY(__libm_callout_sincos) -_SINCOS_LARGE_ARGS: -.prologue -{ .mfi - mov GR_SAVE_r_sincos = sincos_r_sincos // Save sin or cos - nop.f 999 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS = ar.pfs -} -;; - -{ .mfi - mov GR_SAVE_GP = gp - nop.f 999 -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0 = b0 -} - -.body -{ .mbb - setf.sig sincos_save_tmp = sincos_GR_all_ones// inexact set - nop.b 999 -(p8) br.call.sptk.many b0 = __libm_sin_large# // sin(large_X) - -};; - -{ .mbb - cmp.ne p9,p0 = GR_SAVE_r_sincos, r0 // set p9 if cos - nop.b 999 -(p9) br.call.sptk.many b0 = __libm_cos_large# // cos(large_X) -};; - -{ .mfi - mov gp = GR_SAVE_GP - fma.d.s0 f8 = f8, f1, f0 // Round result to double - mov b0 = GR_SAVE_B0 -} -// Force inexact set -{ .mfi - nop.m 999 - fmpy.s0 sincos_save_tmp = sincos_save_tmp, sincos_save_tmp - nop.i 999 -};; - -{ .mib - nop.m 999 - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 // Exit for large arguments routine call -};; - -LOCAL_LIBM_END(__libm_callout_sincos) - -.type __libm_sin_large#,@function -.global __libm_sin_large# -.type __libm_cos_large#,@function -.global __libm_cos_large# diff --git a/sysdeps/ia64/fpu/s_cosf.S b/sysdeps/ia64/fpu/s_cosf.S deleted file mode 100644 index 2dcdaa8879..0000000000 --- a/sysdeps/ia64/fpu/s_cosf.S +++ /dev/null @@ -1,716 +0,0 @@ -.file "sincosf.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/02/00 Unwind support added. -// 06/16/00 Updated tables to enforce symmetry -// 08/31/00 Saved 2 cycles in main path, and 9 in other paths. -// 09/20/00 The updated tables regressed to an old version, so reinstated them -// 10/18/00 Changed one table entry to ensure symmetry -// 01/03/01 Improved speed, fixed flag settings for small arguments. -// 02/18/02 Large arguments processing routine excluded -// 05/20/02 Cleaned up namespace and sf0 syntax -// 06/03/02 Insure inexact flag set for large arg result -// 09/05/02 Single precision version is made using double precision one as base -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// float sinf( float x); -// float cosf( float x); -// -// Overview of operation -//============================================================== -// -// Step 1 -// ====== -// Reduce x to region -1/2*pi/2^k ===== 0 ===== +1/2*pi/2^k where k=4 -// divide x by pi/2^k. -// Multiply by 2^k/pi. -// nfloat = Round result to integer (round-to-nearest) -// -// r = x - nfloat * pi/2^k -// Do this as (x - nfloat * HIGH(pi/2^k)) - nfloat * LOW(pi/2^k) - -// for increased accuracy. -// pi/2^k is stored as two numbers that when added make pi/2^k. -// pi/2^k = HIGH(pi/2^k) + LOW(pi/2^k) -// HIGH part is rounded to zero, LOW - to nearest -// -// x = (nfloat * pi/2^k) + r -// r is small enough that we can use a polynomial approximation -// and is referred to as the reduced argument. -// -// Step 3 -// ====== -// Take the unreduced part and remove the multiples of 2pi. -// So nfloat = nfloat (with lower k+1 bits cleared) + lower k+1 bits -// -// nfloat (with lower k+1 bits cleared) is a multiple of 2^(k+1) -// N * 2^(k+1) -// nfloat * pi/2^k = N * 2^(k+1) * pi/2^k + (lower k+1 bits) * pi/2^k -// nfloat * pi/2^k = N * 2 * pi + (lower k+1 bits) * pi/2^k -// nfloat * pi/2^k = N2pi + M * pi/2^k -// -// -// Sin(x) = Sin((nfloat * pi/2^k) + r) -// = Sin(nfloat * pi/2^k) * Cos(r) + Cos(nfloat * pi/2^k) * Sin(r) -// -// Sin(nfloat * pi/2^k) = Sin(N2pi + Mpi/2^k) -// = Sin(N2pi)Cos(Mpi/2^k) + Cos(N2pi)Sin(Mpi/2^k) -// = Sin(Mpi/2^k) -// -// Cos(nfloat * pi/2^k) = Cos(N2pi + Mpi/2^k) -// = Cos(N2pi)Cos(Mpi/2^k) + Sin(N2pi)Sin(Mpi/2^k) -// = Cos(Mpi/2^k) -// -// Sin(x) = Sin(Mpi/2^k) Cos(r) + Cos(Mpi/2^k) Sin(r) -// -// -// Step 4 -// ====== -// 0 <= M < 2^(k+1) -// There are 2^(k+1) Sin entries in a table. -// There are 2^(k+1) Cos entries in a table. -// -// Get Sin(Mpi/2^k) and Cos(Mpi/2^k) by table lookup. -// -// -// Step 5 -// ====== -// Calculate Cos(r) and Sin(r) by polynomial approximation. -// -// Cos(r) = 1 + r^2 q1 + r^4 q2 = Series for Cos -// Sin(r) = r + r^3 p1 + r^5 p2 = Series for Sin -// -// and the coefficients q1, q2 and p1, p2 are stored in a table -// -// -// Calculate -// Sin(x) = Sin(Mpi/2^k) Cos(r) + Cos(Mpi/2^k) Sin(r) -// -// as follows -// -// S[m] = Sin(Mpi/2^k) and C[m] = Cos(Mpi/2^k) -// rsq = r*r -// -// -// P = P1 + r^2*P2 -// Q = Q1 + r^2*Q2 -// -// rcub = r * rsq -// Sin(r) = r + rcub * P -// = r + r^3p1 + r^5p2 = Sin(r) -// -// The coefficients are not exactly these values, but almost. -// -// p1 = -1/6 = -1/3! -// p2 = 1/120 = 1/5! -// p3 = -1/5040 = -1/7! -// p4 = 1/362889 = 1/9! -// -// P = r + r^3 * P -// -// Answer = S[m] Cos(r) + C[m] P -// -// Cos(r) = 1 + rsq Q -// Cos(r) = 1 + r^2 Q -// Cos(r) = 1 + r^2 (q1 + r^2q2) -// Cos(r) = 1 + r^2q1 + r^4q2 -// -// S[m] Cos(r) = S[m](1 + rsq Q) -// S[m] Cos(r) = S[m] + S[m] rsq Q -// S[m] Cos(r) = S[m] + s_rsq Q -// Q = S[m] + s_rsq Q -// -// Then, -// -// Answer = Q + C[m] P - - -// Registers used -//============================================================== -// general input registers: -// r14 -> r19 -// r32 -> r45 - -// predicate registers used: -// p6 -> p14 - -// floating-point registers used -// f9 -> f15 -// f32 -> f61 - -// Assembly macros -//============================================================== -sincosf_NORM_f8 = f9 -sincosf_W = f10 -sincosf_int_Nfloat = f11 -sincosf_Nfloat = f12 - -sincosf_r = f13 -sincosf_rsq = f14 -sincosf_rcub = f15 -sincosf_save_tmp = f15 - -sincosf_Inv_Pi_by_16 = f32 -sincosf_Pi_by_16_1 = f33 -sincosf_Pi_by_16_2 = f34 - -sincosf_Inv_Pi_by_64 = f35 - -sincosf_Pi_by_16_3 = f36 - -sincosf_r_exact = f37 - -sincosf_Sm = f38 -sincosf_Cm = f39 - -sincosf_P1 = f40 -sincosf_Q1 = f41 -sincosf_P2 = f42 -sincosf_Q2 = f43 -sincosf_P3 = f44 -sincosf_Q3 = f45 -sincosf_P4 = f46 -sincosf_Q4 = f47 - -sincosf_P_temp1 = f48 -sincosf_P_temp2 = f49 - -sincosf_Q_temp1 = f50 -sincosf_Q_temp2 = f51 - -sincosf_P = f52 -sincosf_Q = f53 - -sincosf_srsq = f54 - -sincosf_SIG_INV_PI_BY_16_2TO61 = f55 -sincosf_RSHF_2TO61 = f56 -sincosf_RSHF = f57 -sincosf_2TOM61 = f58 -sincosf_NFLOAT = f59 -sincosf_W_2TO61_RSH = f60 - -fp_tmp = f61 - -///////////////////////////////////////////////////////////// - -sincosf_AD_1 = r33 -sincosf_AD_2 = r34 -sincosf_exp_limit = r35 -sincosf_r_signexp = r36 -sincosf_AD_beta_table = r37 -sincosf_r_sincos = r38 - -sincosf_r_exp = r39 -sincosf_r_17_ones = r40 - -sincosf_GR_sig_inv_pi_by_16 = r14 -sincosf_GR_rshf_2to61 = r15 -sincosf_GR_rshf = r16 -sincosf_GR_exp_2tom61 = r17 -sincosf_GR_n = r18 -sincosf_GR_m = r19 -sincosf_GR_32m = r19 -sincosf_GR_all_ones = r19 - -gr_tmp = r41 -GR_SAVE_PFS = r41 -GR_SAVE_B0 = r42 -GR_SAVE_GP = r43 - -RODATA -.align 16 - -// Pi/16 parts -LOCAL_OBJECT_START(double_sincosf_pi) - data8 0xC90FDAA22168C234, 0x00003FFC // pi/16 1st part - data8 0xC4C6628B80DC1CD1, 0x00003FBC // pi/16 2nd part -LOCAL_OBJECT_END(double_sincosf_pi) - -// Coefficients for polynomials -LOCAL_OBJECT_START(double_sincosf_pq_k4) - data8 0x3F810FABB668E9A2 // P2 - data8 0x3FA552E3D6DE75C9 // Q2 - data8 0xBFC555554447BC7F // P1 - data8 0xBFDFFFFFC447610A // Q1 -LOCAL_OBJECT_END(double_sincosf_pq_k4) - -// Sincos table (S[m], C[m]) -LOCAL_OBJECT_START(double_sin_cos_beta_k4) - data8 0x0000000000000000 // sin ( 0 Pi / 16 ) - data8 0x3FF0000000000000 // cos ( 0 Pi / 16 ) -// - data8 0x3FC8F8B83C69A60B // sin ( 1 Pi / 16 ) - data8 0x3FEF6297CFF75CB0 // cos ( 1 Pi / 16 ) -// - data8 0x3FD87DE2A6AEA963 // sin ( 2 Pi / 16 ) - data8 0x3FED906BCF328D46 // cos ( 2 Pi / 16 ) -// - data8 0x3FE1C73B39AE68C8 // sin ( 3 Pi / 16 ) - data8 0x3FEA9B66290EA1A3 // cos ( 3 Pi / 16 ) -// - data8 0x3FE6A09E667F3BCD // sin ( 4 Pi / 16 ) - data8 0x3FE6A09E667F3BCD // cos ( 4 Pi / 16 ) -// - data8 0x3FEA9B66290EA1A3 // sin ( 5 Pi / 16 ) - data8 0x3FE1C73B39AE68C8 // cos ( 5 Pi / 16 ) -// - data8 0x3FED906BCF328D46 // sin ( 6 Pi / 16 ) - data8 0x3FD87DE2A6AEA963 // cos ( 6 Pi / 16 ) -// - data8 0x3FEF6297CFF75CB0 // sin ( 7 Pi / 16 ) - data8 0x3FC8F8B83C69A60B // cos ( 7 Pi / 16 ) -// - data8 0x3FF0000000000000 // sin ( 8 Pi / 16 ) - data8 0x0000000000000000 // cos ( 8 Pi / 16 ) -// - data8 0x3FEF6297CFF75CB0 // sin ( 9 Pi / 16 ) - data8 0xBFC8F8B83C69A60B // cos ( 9 Pi / 16 ) -// - data8 0x3FED906BCF328D46 // sin ( 10 Pi / 16 ) - data8 0xBFD87DE2A6AEA963 // cos ( 10 Pi / 16 ) -// - data8 0x3FEA9B66290EA1A3 // sin ( 11 Pi / 16 ) - data8 0xBFE1C73B39AE68C8 // cos ( 11 Pi / 16 ) -// - data8 0x3FE6A09E667F3BCD // sin ( 12 Pi / 16 ) - data8 0xBFE6A09E667F3BCD // cos ( 12 Pi / 16 ) -// - data8 0x3FE1C73B39AE68C8 // sin ( 13 Pi / 16 ) - data8 0xBFEA9B66290EA1A3 // cos ( 13 Pi / 16 ) -// - data8 0x3FD87DE2A6AEA963 // sin ( 14 Pi / 16 ) - data8 0xBFED906BCF328D46 // cos ( 14 Pi / 16 ) -// - data8 0x3FC8F8B83C69A60B // sin ( 15 Pi / 16 ) - data8 0xBFEF6297CFF75CB0 // cos ( 15 Pi / 16 ) -// - data8 0x0000000000000000 // sin ( 16 Pi / 16 ) - data8 0xBFF0000000000000 // cos ( 16 Pi / 16 ) -// - data8 0xBFC8F8B83C69A60B // sin ( 17 Pi / 16 ) - data8 0xBFEF6297CFF75CB0 // cos ( 17 Pi / 16 ) -// - data8 0xBFD87DE2A6AEA963 // sin ( 18 Pi / 16 ) - data8 0xBFED906BCF328D46 // cos ( 18 Pi / 16 ) -// - data8 0xBFE1C73B39AE68C8 // sin ( 19 Pi / 16 ) - data8 0xBFEA9B66290EA1A3 // cos ( 19 Pi / 16 ) -// - data8 0xBFE6A09E667F3BCD // sin ( 20 Pi / 16 ) - data8 0xBFE6A09E667F3BCD // cos ( 20 Pi / 16 ) -// - data8 0xBFEA9B66290EA1A3 // sin ( 21 Pi / 16 ) - data8 0xBFE1C73B39AE68C8 // cos ( 21 Pi / 16 ) -// - data8 0xBFED906BCF328D46 // sin ( 22 Pi / 16 ) - data8 0xBFD87DE2A6AEA963 // cos ( 22 Pi / 16 ) -// - data8 0xBFEF6297CFF75CB0 // sin ( 23 Pi / 16 ) - data8 0xBFC8F8B83C69A60B // cos ( 23 Pi / 16 ) -// - data8 0xBFF0000000000000 // sin ( 24 Pi / 16 ) - data8 0x0000000000000000 // cos ( 24 Pi / 16 ) -// - data8 0xBFEF6297CFF75CB0 // sin ( 25 Pi / 16 ) - data8 0x3FC8F8B83C69A60B // cos ( 25 Pi / 16 ) -// - data8 0xBFED906BCF328D46 // sin ( 26 Pi / 16 ) - data8 0x3FD87DE2A6AEA963 // cos ( 26 Pi / 16 ) -// - data8 0xBFEA9B66290EA1A3 // sin ( 27 Pi / 16 ) - data8 0x3FE1C73B39AE68C8 // cos ( 27 Pi / 16 ) -// - data8 0xBFE6A09E667F3BCD // sin ( 28 Pi / 16 ) - data8 0x3FE6A09E667F3BCD // cos ( 28 Pi / 16 ) -// - data8 0xBFE1C73B39AE68C8 // sin ( 29 Pi / 16 ) - data8 0x3FEA9B66290EA1A3 // cos ( 29 Pi / 16 ) -// - data8 0xBFD87DE2A6AEA963 // sin ( 30 Pi / 16 ) - data8 0x3FED906BCF328D46 // cos ( 30 Pi / 16 ) -// - data8 0xBFC8F8B83C69A60B // sin ( 31 Pi / 16 ) - data8 0x3FEF6297CFF75CB0 // cos ( 31 Pi / 16 ) -// - data8 0x0000000000000000 // sin ( 32 Pi / 16 ) - data8 0x3FF0000000000000 // cos ( 32 Pi / 16 ) -LOCAL_OBJECT_END(double_sin_cos_beta_k4) - -.section .text - -//////////////////////////////////////////////////////// -// There are two entry points: sin and cos -// If from sin, p8 is true -// If from cos, p9 is true - -GLOBAL_IEEE754_ENTRY(sinf) - -{ .mlx - alloc r32 = ar.pfs,1,13,0,0 - movl sincosf_GR_sig_inv_pi_by_16 = 0xA2F9836E4E44152A //signd of 16/pi -} -{ .mlx - addl sincosf_AD_1 = @ltoff(double_sincosf_pi), gp - movl sincosf_GR_rshf_2to61 = 0x47b8000000000000 // 1.1 2^(63+63-2) -};; - -{ .mfi - ld8 sincosf_AD_1 = [sincosf_AD_1] - fnorm.s1 sincosf_NORM_f8 = f8 // Normalize argument - cmp.eq p8,p9 = r0, r0 // set p8 (clear p9) for sin -} -{ .mib - mov sincosf_GR_exp_2tom61 = 0xffff-61 // exponent of scale 2^-61 - mov sincosf_r_sincos = 0x0 // 0 for sin - br.cond.sptk _SINCOSF_COMMON // go to common part -};; - -GLOBAL_IEEE754_END(sinf) - -GLOBAL_IEEE754_ENTRY(cosf) - -{ .mlx - alloc r32 = ar.pfs,1,13,0,0 - movl sincosf_GR_sig_inv_pi_by_16 = 0xA2F9836E4E44152A //signd of 16/pi -} -{ .mlx - addl sincosf_AD_1 = @ltoff(double_sincosf_pi), gp - movl sincosf_GR_rshf_2to61 = 0x47b8000000000000 // 1.1 2^(63+63-2) -};; - -{ .mfi - ld8 sincosf_AD_1 = [sincosf_AD_1] - fnorm.s1 sincosf_NORM_f8 = f8 // Normalize argument - cmp.eq p9,p8 = r0, r0 // set p9 (clear p8) for cos -} -{ .mib - mov sincosf_GR_exp_2tom61 = 0xffff-61 // exponent of scale 2^-61 - mov sincosf_r_sincos = 0x8 // 8 for cos - nop.b 999 -};; - -//////////////////////////////////////////////////////// -// All entry points end up here. -// If from sin, sincosf_r_sincos is 0 and p8 is true -// If from cos, sincosf_r_sincos is 8 = 2^(k-1) and p9 is true -// We add sincosf_r_sincos to N - -///////////// Common sin and cos part ////////////////// -_SINCOSF_COMMON: - -// Form two constants we need -// 16/pi * 2^-2 * 2^63, scaled by 2^61 since we just loaded the significand -// 1.1000...000 * 2^(63+63-2) to right shift int(W) into the low significand -// fcmp used to set denormal, and invalid on snans -{ .mfi - setf.sig sincosf_SIG_INV_PI_BY_16_2TO61 = sincosf_GR_sig_inv_pi_by_16 - fclass.m p6,p0 = f8, 0xe7 // if x=0,inf,nan - mov sincosf_exp_limit = 0x10017 -} -{ .mlx - setf.d sincosf_RSHF_2TO61 = sincosf_GR_rshf_2to61 - movl sincosf_GR_rshf = 0x43e8000000000000 // 1.1000 2^63 -};; // Right shift - -// Form another constant -// 2^-61 for scaling Nfloat -// 0x10017 is register_bias + 24. -// So if f8 >= 2^24, go to large argument routines -{ .mmi - getf.exp sincosf_r_signexp = f8 - setf.exp sincosf_2TOM61 = sincosf_GR_exp_2tom61 - addl gr_tmp = -1,r0 // For "inexect" constant create -};; - -// Load the two pieces of pi/16 -// Form another constant -// 1.1000...000 * 2^63, the right shift constant -{ .mmb - ldfe sincosf_Pi_by_16_1 = [sincosf_AD_1],16 - setf.d sincosf_RSHF = sincosf_GR_rshf -(p6) br.cond.spnt _SINCOSF_SPECIAL_ARGS -};; - -// Getting argument's exp for "large arguments" filtering -{ .mmi - ldfe sincosf_Pi_by_16_2 = [sincosf_AD_1],16 - setf.sig fp_tmp = gr_tmp // constant for inexact set - nop.i 999 -};; - -// Polynomial coefficients (Q2, Q1, P2, P1) loading -{ .mmi - ldfpd sincosf_P2,sincosf_Q2 = [sincosf_AD_1],16 - nop.m 999 - nop.i 999 -};; - -// Select exponent (17 lsb) -{ .mmi - ldfpd sincosf_P1,sincosf_Q1 = [sincosf_AD_1],16 - nop.m 999 - dep.z sincosf_r_exp = sincosf_r_signexp, 0, 17 -};; - -// p10 is true if we must call routines to handle larger arguments -// p10 is true if f8 exp is >= 0x10017 (2^24) -{ .mfb - cmp.ge p10,p0 = sincosf_r_exp,sincosf_exp_limit - nop.f 999 -(p10) br.cond.spnt _SINCOSF_LARGE_ARGS // Go to "large args" routine -};; - -// sincosf_W = x * sincosf_Inv_Pi_by_16 -// Multiply x by scaled 16/pi and add large const to shift integer part of W to -// rightmost bits of significand -{ .mfi - nop.m 999 - fma.s1 sincosf_W_2TO61_RSH = sincosf_NORM_f8, sincosf_SIG_INV_PI_BY_16_2TO61, sincosf_RSHF_2TO61 - nop.i 999 -};; - -// sincosf_NFLOAT = Round_Int_Nearest(sincosf_W) -// This is done by scaling back by 2^-61 and subtracting the shift constant -{ .mfi - nop.m 999 - fms.s1 sincosf_NFLOAT = sincosf_W_2TO61_RSH,sincosf_2TOM61,sincosf_RSHF - nop.i 999 -};; - -// get N = (int)sincosf_int_Nfloat -{ .mfi - getf.sig sincosf_GR_n = sincosf_W_2TO61_RSH // integer N value - nop.f 999 - nop.i 999 -};; - -// Add 2^(k-1) (which is in sincosf_r_sincos=8) to N -// sincosf_r = -sincosf_Nfloat * sincosf_Pi_by_16_1 + x -{ .mfi - add sincosf_GR_n = sincosf_GR_n, sincosf_r_sincos - fnma.s1 sincosf_r = sincosf_NFLOAT, sincosf_Pi_by_16_1, sincosf_NORM_f8 - nop.i 999 -};; - -// Get M (least k+1 bits of N) -{ .mmi - and sincosf_GR_m = 0x1f,sincosf_GR_n // Put mask 0x1F - - nop.m 999 // - select k+1 bits - nop.i 999 -};; - -// Add 16*M to address of sin_cos_beta table -{ .mfi - shladd sincosf_AD_2 = sincosf_GR_32m, 4, sincosf_AD_1 -(p8) fclass.m.unc p10,p0 = f8,0x0b // If sin denormal input - - nop.i 999 -};; - -// Load Sin and Cos table value using obtained index m (sincosf_AD_2) -{ .mfi - ldfd sincosf_Sm = [sincosf_AD_2],8 // Sin value S[m] -(p9) fclass.m.unc p11,p0 = f8,0x0b // If cos denormal input - - nop.i 999 // - set denormal -};; - -// sincosf_r = sincosf_r -sincosf_Nfloat * sincosf_Pi_by_16_2 -{ .mfi - ldfd sincosf_Cm = [sincosf_AD_2] // Cos table value C[m] - fnma.s1 sincosf_r_exact = sincosf_NFLOAT, sincosf_Pi_by_16_2, sincosf_r - nop.i 999 -} -// get rsq = r*r -{ .mfi - nop.m 999 - fma.s1 sincosf_rsq = sincosf_r, sincosf_r, f0 // r^2 = r*r - nop.i 999 -};; - -{ .mfi - nop.m 999 - fmpy.s0 fp_tmp = fp_tmp, fp_tmp // forces inexact flag - nop.i 999 -};; - -// Polynomials calculation -// Q = Q2*r^2 + Q1 -// P = P2*r^2 + P1 -{ .mfi - nop.m 999 - fma.s1 sincosf_Q = sincosf_rsq, sincosf_Q2, sincosf_Q1 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 sincosf_P = sincosf_rsq, sincosf_P2, sincosf_P1 - nop.i 999 -};; - -// get rcube and S[m]*r^2 -{ .mfi - nop.m 999 - fmpy.s1 sincosf_srsq = sincosf_Sm,sincosf_rsq // r^2*S[m] - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s1 sincosf_rcub = sincosf_r_exact, sincosf_rsq - nop.i 999 -};; - -// Get final P and Q -// Q = Q*S[m]*r^2 + S[m] -// P = P*r^3 + r -{ .mfi - nop.m 999 - fma.s1 sincosf_Q = sincosf_srsq,sincosf_Q, sincosf_Sm - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 sincosf_P = sincosf_rcub,sincosf_P,sincosf_r_exact - nop.i 999 -};; - -// If sinf(denormal) - force underflow to be set -.pred.rel "mutex",p10,p11 -{ .mfi - nop.m 999 -(p10) fmpy.s.s0 fp_tmp = f8,f8 // forces underflow flag - nop.i 999 // for denormal sine args -} -// If cosf(denormal) - force denormal to be set -{ .mfi - nop.m 999 -(p11) fma.s.s0 fp_tmp = f8, f1, f8 // forces denormal flag - nop.i 999 // for denormal cosine args -};; - - -// Final calculation -// result = C[m]*P + Q -{ .mfb - nop.m 999 - fma.s.s0 f8 = sincosf_Cm, sincosf_P, sincosf_Q - br.ret.sptk b0 // Exit for common path -};; - -////////// x = 0/Inf/NaN path ////////////////// -_SINCOSF_SPECIAL_ARGS: -.pred.rel "mutex",p8,p9 -// sinf(+/-0) = +/-0 -// sinf(Inf) = NaN -// sinf(NaN) = NaN -{ .mfi - nop.m 999 -(p8) fma.s.s0 f8 = f8, f0, f0 // sinf(+/-0,NaN,Inf) - nop.i 999 -} -// cosf(+/-0) = 1.0 -// cosf(Inf) = NaN -// cosf(NaN) = NaN -{ .mfb - nop.m 999 -(p9) fma.s.s0 f8 = f8, f0, f1 // cosf(+/-0,NaN,Inf) - br.ret.sptk b0 // Exit for x = 0/Inf/NaN path -};; - -GLOBAL_IEEE754_END(cosf) - -//////////// x >= 2^24 - large arguments routine call //////////// -LOCAL_LIBM_ENTRY(__libm_callout_sincosf) -_SINCOSF_LARGE_ARGS: -.prologue -{ .mfi - mov sincosf_GR_all_ones = -1 // 0xffffffff - nop.f 999 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS = ar.pfs -} -;; - -{ .mfi - mov GR_SAVE_GP = gp - nop.f 999 -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0 = b0 -} -.body - -{ .mbb - setf.sig sincosf_save_tmp = sincosf_GR_all_ones // inexact set - nop.b 999 -(p8) br.call.sptk.many b0 = __libm_sin_large# // sinf(large_X) -};; - -{ .mbb - cmp.ne p9,p0 = sincosf_r_sincos, r0 // set p9 if cos - nop.b 999 -(p9) br.call.sptk.many b0 = __libm_cos_large# // cosf(large_X) -};; - -{ .mfi - mov gp = GR_SAVE_GP - fma.s.s0 f8 = f8, f1, f0 // Round result to single - mov b0 = GR_SAVE_B0 -} -{ .mfi // force inexact set - nop.m 999 - fmpy.s0 sincosf_save_tmp = sincosf_save_tmp, sincosf_save_tmp - nop.i 999 -};; - -{ .mib - nop.m 999 - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 // Exit for large arguments routine call -};; -LOCAL_LIBM_END(__libm_callout_sincosf) - -.type __libm_sin_large#, @function -.global __libm_sin_large# -.type __libm_cos_large#, @function -.global __libm_cos_large# diff --git a/sysdeps/ia64/fpu/s_cosl.S b/sysdeps/ia64/fpu/s_cosl.S deleted file mode 100644 index 8d71e50c1a..0000000000 --- a/sysdeps/ia64/fpu/s_cosl.S +++ /dev/null @@ -1,2365 +0,0 @@ -.file "sincosl.s" - - -// Copyright (c) 2000 - 2004, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 02/02/00 (hand-optimized) -// 04/04/00 Unwind support added -// 07/30/01 Improved speed on all paths -// 08/20/01 Fixed bundling typo -// 05/13/02 Changed interface to __libm_pi_by_2_reduce -// 02/10/03 Reordered header: .section, .global, .proc, .align; -// used data8 for long double table values -// 10/13/03 Corrected final .endp name to match .proc -// 10/26/04 Avoided using r14-31 as scratch so not clobbered by dynamic loader -// -//********************************************************************* -// -// Function: Combined sinl(x) and cosl(x), where -// -// sinl(x) = sine(x), for double-extended precision x values -// cosl(x) = cosine(x), for double-extended precision x values -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f32-f99 -// -// General Purpose Registers: -// r32-r58 -// -// Predicate Registers: p6-p13 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// Denormal fault raised on denormal inputs -// Overflow exceptions do not occur -// Underflow exceptions raised when appropriate for sin -// (No specialized error handling for this routine) -// Inexact raised when appropriate by algorithm -// -// sinl(SNaN) = QNaN -// sinl(QNaN) = QNaN -// sinl(inf) = QNaN -// sinl(+/-0) = +/-0 -// cosl(inf) = QNaN -// cosl(SNaN) = QNaN -// cosl(QNaN) = QNaN -// cosl(0) = 1 -// -//********************************************************************* -// -// Mathematical Description -// ======================== -// -// The computation of FSIN and FCOS is best handled in one piece of -// code. The main reason is that given any argument Arg, computation -// of trigonometric functions first calculate N and an approximation -// to alpha where -// -// Arg = N pi/2 + alpha, |alpha| <= pi/4. -// -// Since -// -// cosl( Arg ) = sinl( (N+1) pi/2 + alpha ), -// -// therefore, the code for computing sine will produce cosine as long -// as 1 is added to N immediately after the argument reduction -// process. -// -// Let M = N if sine -// N+1 if cosine. -// -// Now, given -// -// Arg = M pi/2 + alpha, |alpha| <= pi/4, -// -// let I = M mod 4, or I be the two lsb of M when M is represented -// as 2's complement. I = [i_0 i_1]. Then -// -// sinl( Arg ) = (-1)^i_0 sinl( alpha ) if i_1 = 0, -// = (-1)^i_0 cosl( alpha ) if i_1 = 1. -// -// For example: -// if M = -1, I = 11 -// sin ((-pi/2 + alpha) = (-1) cos (alpha) -// if M = 0, I = 00 -// sin (alpha) = sin (alpha) -// if M = 1, I = 01 -// sin (pi/2 + alpha) = cos (alpha) -// if M = 2, I = 10 -// sin (pi + alpha) = (-1) sin (alpha) -// if M = 3, I = 11 -// sin ((3/2)pi + alpha) = (-1) cos (alpha) -// -// The value of alpha is obtained by argument reduction and -// represented by two working precision numbers r and c where -// -// alpha = r + c accurately. -// -// The reduction method is described in a previous write up. -// The argument reduction scheme identifies 4 cases. For Cases 2 -// and 4, because |alpha| is small, sinl(r+c) and cosl(r+c) can be -// computed very easily by 2 or 3 terms of the Taylor series -// expansion as follows: -// -// Case 2: -// ------- -// -// sinl(r + c) = r + c - r^3/6 accurately -// cosl(r + c) = 1 - 2^(-67) accurately -// -// Case 4: -// ------- -// -// sinl(r + c) = r + c - r^3/6 + r^5/120 accurately -// cosl(r + c) = 1 - r^2/2 + r^4/24 accurately -// -// The only cases left are Cases 1 and 3 of the argument reduction -// procedure. These two cases will be merged since after the -// argument is reduced in either cases, we have the reduced argument -// represented as r + c and that the magnitude |r + c| is not small -// enough to allow the usage of a very short approximation. -// -// The required calculation is either -// -// sinl(r + c) = sinl(r) + correction, or -// cosl(r + c) = cosl(r) + correction. -// -// Specifically, -// -// sinl(r + c) = sinl(r) + c sin'(r) + O(c^2) -// = sinl(r) + c cos (r) + O(c^2) -// = sinl(r) + c(1 - r^2/2) accurately. -// Similarly, -// -// cosl(r + c) = cosl(r) - c sinl(r) + O(c^2) -// = cosl(r) - c(r - r^3/6) accurately. -// -// We therefore concentrate on accurately calculating sinl(r) and -// cosl(r) for a working-precision number r, |r| <= pi/4 to within -// 0.1% or so. -// -// The greatest challenge of this task is that the second terms of -// the Taylor series -// -// r - r^3/3! + r^r/5! - ... -// -// and -// -// 1 - r^2/2! + r^4/4! - ... -// -// are not very small when |r| is close to pi/4 and the rounding -// errors will be a concern if simple polynomial accumulation is -// used. When |r| < 2^-3, however, the second terms will be small -// enough (6 bits or so of right shift) that a normal Horner -// recurrence suffices. Hence there are two cases that we consider -// in the accurate computation of sinl(r) and cosl(r), |r| <= pi/4. -// -// Case small_r: |r| < 2^(-3) -// -------------------------- -// -// Since Arg = M pi/4 + r + c accurately, and M mod 4 is [i_0 i_1], -// we have -// -// sinl(Arg) = (-1)^i_0 * sinl(r + c) if i_1 = 0 -// = (-1)^i_0 * cosl(r + c) if i_1 = 1 -// -// can be accurately approximated by -// -// sinl(Arg) = (-1)^i_0 * [sinl(r) + c] if i_1 = 0 -// = (-1)^i_0 * [cosl(r) - c*r] if i_1 = 1 -// -// because |r| is small and thus the second terms in the correction -// are unneccessary. -// -// Finally, sinl(r) and cosl(r) are approximated by polynomials of -// moderate lengths. -// -// sinl(r) = r + S_1 r^3 + S_2 r^5 + ... + S_5 r^11 -// cosl(r) = 1 + C_1 r^2 + C_2 r^4 + ... + C_5 r^10 -// -// We can make use of predicates to selectively calculate -// sinl(r) or cosl(r) based on i_1. -// -// Case normal_r: 2^(-3) <= |r| <= pi/4 -// ------------------------------------ -// -// This case is more likely than the previous one if one considers -// r to be uniformly distributed in [-pi/4 pi/4]. Again, -// -// sinl(Arg) = (-1)^i_0 * sinl(r + c) if i_1 = 0 -// = (-1)^i_0 * cosl(r + c) if i_1 = 1. -// -// Because |r| is now larger, we need one extra term in the -// correction. sinl(Arg) can be accurately approximated by -// -// sinl(Arg) = (-1)^i_0 * [sinl(r) + c(1-r^2/2)] if i_1 = 0 -// = (-1)^i_0 * [cosl(r) - c*r*(1 - r^2/6)] i_1 = 1. -// -// Finally, sinl(r) and cosl(r) are approximated by polynomials of -// moderate lengths. -// -// sinl(r) = r + PP_1_hi r^3 + PP_1_lo r^3 + -// PP_2 r^5 + ... + PP_8 r^17 -// -// cosl(r) = 1 + QQ_1 r^2 + QQ_2 r^4 + ... + QQ_8 r^16 -// -// where PP_1_hi is only about 16 bits long and QQ_1 is -1/2. -// The crux in accurate computation is to calculate -// -// r + PP_1_hi r^3 or 1 + QQ_1 r^2 -// -// accurately as two pieces: U_hi and U_lo. The way to achieve this -// is to obtain r_hi as a 10 sig. bit number that approximates r to -// roughly 8 bits or so of accuracy. (One convenient way is -// -// r_hi := frcpa( frcpa( r ) ).) -// -// This way, -// -// r + PP_1_hi r^3 = r + PP_1_hi r_hi^3 + -// PP_1_hi (r^3 - r_hi^3) -// = [r + PP_1_hi r_hi^3] + -// [PP_1_hi (r - r_hi) -// (r^2 + r_hi r + r_hi^2) ] -// = U_hi + U_lo -// -// Since r_hi is only 10 bit long and PP_1_hi is only 16 bit long, -// PP_1_hi * r_hi^3 is only at most 46 bit long and thus computed -// exactly. Furthermore, r and PP_1_hi r_hi^3 are of opposite sign -// and that there is no more than 8 bit shift off between r and -// PP_1_hi * r_hi^3. Hence the sum, U_hi, is representable and thus -// calculated without any error. Finally, the fact that -// -// |U_lo| <= 2^(-8) |U_hi| -// -// says that U_hi + U_lo is approximating r + PP_1_hi r^3 to roughly -// 8 extra bits of accuracy. -// -// Similarly, -// -// 1 + QQ_1 r^2 = [1 + QQ_1 r_hi^2] + -// [QQ_1 (r - r_hi)(r + r_hi)] -// = U_hi + U_lo. -// -// Summarizing, we calculate r_hi = frcpa( frcpa( r ) ). -// -// If i_1 = 0, then -// -// U_hi := r + PP_1_hi * r_hi^3 -// U_lo := PP_1_hi * (r - r_hi) * (r^2 + r*r_hi + r_hi^2) -// poly := PP_1_lo r^3 + PP_2 r^5 + ... + PP_8 r^17 -// correction := c * ( 1 + C_1 r^2 ) -// -// Else ...i_1 = 1 -// -// U_hi := 1 + QQ_1 * r_hi * r_hi -// U_lo := QQ_1 * (r - r_hi) * (r + r_hi) -// poly := QQ_2 * r^4 + QQ_3 * r^6 + ... + QQ_8 r^16 -// correction := -c * r * (1 + S_1 * r^2) -// -// End -// -// Finally, -// -// V := poly + ( U_lo + correction ) -// -// / U_hi + V if i_0 = 0 -// result := | -// \ (-U_hi) - V if i_0 = 1 -// -// It is important that in the last step, negation of U_hi is -// performed prior to the subtraction which is to be performed in -// the user-set rounding mode. -// -// -// Algorithmic Description -// ======================= -// -// The argument reduction algorithm is tightly integrated into FSIN -// and FCOS which share the same code. The following is complete and -// self-contained. The argument reduction description given -// previously is repeated below. -// -// -// Step 0. Initialization. -// -// If FSIN is invoked, set N_inc := 0; else if FCOS is invoked, -// set N_inc := 1. -// -// Step 1. Check for exceptional and special cases. -// -// * If Arg is +-0, +-inf, NaN, NaT, go to Step 10 for special -// handling. -// * If |Arg| < 2^24, go to Step 2 for reduction of moderate -// arguments. This is the most likely case. -// * If |Arg| < 2^63, go to Step 8 for pre-reduction of large -// arguments. -// * If |Arg| >= 2^63, go to Step 10 for special handling. -// -// Step 2. Reduction of moderate arguments. -// -// If |Arg| < pi/4 ...quick branch -// N_fix := N_inc (integer) -// r := Arg -// c := 0.0 -// Branch to Step 4, Case_1_complete -// Else ...cf. argument reduction -// N := Arg * two_by_PI (fp) -// N_fix := fcvt.fx( N ) (int) -// N := fcvt.xf( N_fix ) -// N_fix := N_fix + N_inc -// s := Arg - N * P_1 (first piece of pi/2) -// w := -N * P_2 (second piece of pi/2) -// -// If |s| >= 2^(-33) -// go to Step 3, Case_1_reduce -// Else -// go to Step 7, Case_2_reduce -// Endif -// Endif -// -// Step 3. Case_1_reduce. -// -// r := s + w -// c := (s - r) + w ...observe order -// -// Step 4. Case_1_complete -// -// ...At this point, the reduced argument alpha is -// ...accurately represented as r + c. -// If |r| < 2^(-3), go to Step 6, small_r. -// -// Step 5. Normal_r. -// -// Let [i_0 i_1] by the 2 lsb of N_fix. -// FR_rsq := r * r -// r_hi := frcpa( frcpa( r ) ) -// r_lo := r - r_hi -// -// If i_1 = 0, then -// poly := r*FR_rsq*(PP_1_lo + FR_rsq*(PP_2 + ... FR_rsq*PP_8)) -// U_hi := r + PP_1_hi*r_hi*r_hi*r_hi ...any order -// U_lo := PP_1_hi*r_lo*(r*r + r*r_hi + r_hi*r_hi) -// correction := c + c*C_1*FR_rsq ...any order -// Else -// poly := FR_rsq*FR_rsq*(QQ_2 + FR_rsq*(QQ_3 + ... + FR_rsq*QQ_8)) -// U_hi := 1 + QQ_1 * r_hi * r_hi ...any order -// U_lo := QQ_1 * r_lo * (r + r_hi) -// correction := -c*(r + S_1*FR_rsq*r) ...any order -// Endif -// -// V := poly + (U_lo + correction) ...observe order -// -// result := (i_0 == 0? 1.0 : -1.0) -// -// Last instruction in user-set rounding mode -// -// result := (i_0 == 0? result*U_hi + V : -// result*U_hi - V) -// -// Return -// -// Step 6. Small_r. -// -// ...Use flush to zero mode without causing exception -// Let [i_0 i_1] be the two lsb of N_fix. -// -// FR_rsq := r * r -// -// If i_1 = 0 then -// z := FR_rsq*FR_rsq; z := FR_rsq*z *r -// poly_lo := S_3 + FR_rsq*(S_4 + FR_rsq*S_5) -// poly_hi := r*FR_rsq*(S_1 + FR_rsq*S_2) -// correction := c -// result := r -// Else -// z := FR_rsq*FR_rsq; z := FR_rsq*z -// poly_lo := C_3 + FR_rsq*(C_4 + FR_rsq*C_5) -// poly_hi := FR_rsq*(C_1 + FR_rsq*C_2) -// correction := -c*r -// result := 1 -// Endif -// -// poly := poly_hi + (z * poly_lo + correction) -// -// If i_0 = 1, result := -result -// -// Last operation. Perform in user-set rounding mode -// -// result := (i_0 == 0? result + poly : -// result - poly ) -// Return -// -// Step 7. Case_2_reduce. -// -// ...Refer to the write up for argument reduction for -// ...rationale. The reduction algorithm below is taken from -// ...argument reduction description and integrated this. -// -// w := N*P_3 -// U_1 := N*P_2 + w ...FMA -// U_2 := (N*P_2 - U_1) + w ...2 FMA -// ...U_1 + U_2 is N*(P_2+P_3) accurately -// -// r := s - U_1 -// c := ( (s - r) - U_1 ) - U_2 -// -// ...The mathematical sum r + c approximates the reduced -// ...argument accurately. Note that although compared to -// ...Case 1, this case requires much more work to reduce -// ...the argument, the subsequent calculation needed for -// ...any of the trigonometric function is very little because -// ...|alpha| < 1.01*2^(-33) and thus two terms of the -// ...Taylor series expansion suffices. -// -// If i_1 = 0 then -// poly := c + S_1 * r * r * r ...any order -// result := r -// Else -// poly := -2^(-67) -// result := 1.0 -// Endif -// -// If i_0 = 1, result := -result -// -// Last operation. Perform in user-set rounding mode -// -// result := (i_0 == 0? result + poly : -// result - poly ) -// -// Return -// -// -// Step 8. Pre-reduction of large arguments. -// -// ...Again, the following reduction procedure was described -// ...in the separate write up for argument reduction, which -// ...is tightly integrated here. - -// N_0 := Arg * Inv_P_0 -// N_0_fix := fcvt.fx( N_0 ) -// N_0 := fcvt.xf( N_0_fix) - -// Arg' := Arg - N_0 * P_0 -// w := N_0 * d_1 -// N := Arg' * two_by_PI -// N_fix := fcvt.fx( N ) -// N := fcvt.xf( N_fix ) -// N_fix := N_fix + N_inc -// -// s := Arg' - N * P_1 -// w := w - N * P_2 -// -// If |s| >= 2^(-14) -// go to Step 3 -// Else -// go to Step 9 -// Endif -// -// Step 9. Case_4_reduce. -// -// ...first obtain N_0*d_1 and -N*P_2 accurately -// U_hi := N_0 * d_1 V_hi := -N*P_2 -// U_lo := N_0 * d_1 - U_hi V_lo := -N*P_2 - U_hi ...FMAs -// -// ...compute the contribution from N_0*d_1 and -N*P_3 -// w := -N*P_3 -// w := w + N_0*d_2 -// t := U_lo + V_lo + w ...any order -// -// ...at this point, the mathematical value -// ...s + U_hi + V_hi + t approximates the true reduced argument -// ...accurately. Just need to compute this accurately. -// -// ...Calculate U_hi + V_hi accurately: -// A := U_hi + V_hi -// if |U_hi| >= |V_hi| then -// a := (U_hi - A) + V_hi -// else -// a := (V_hi - A) + U_hi -// endif -// ...order in computing "a" must be observed. This branch is -// ...best implemented by predicates. -// ...A + a is U_hi + V_hi accurately. Moreover, "a" is -// ...much smaller than A: |a| <= (1/2)ulp(A). -// -// ...Just need to calculate s + A + a + t -// C_hi := s + A t := t + a -// C_lo := (s - C_hi) + A -// C_lo := C_lo + t -// -// ...Final steps for reduction -// r := C_hi + C_lo -// c := (C_hi - r) + C_lo -// -// ...At this point, we have r and c -// ...And all we need is a couple of terms of the corresponding -// ...Taylor series. -// -// If i_1 = 0 -// poly := c + r*FR_rsq*(S_1 + FR_rsq*S_2) -// result := r -// Else -// poly := FR_rsq*(C_1 + FR_rsq*C_2) -// result := 1 -// Endif -// -// If i_0 = 1, result := -result -// -// Last operation. Perform in user-set rounding mode -// -// result := (i_0 == 0? result + poly : -// result - poly ) -// Return -// -// Large Arguments: For arguments above 2**63, a Payne-Hanek -// style argument reduction is used and pi_by_2 reduce is called. -// - - -RODATA -.align 16 - -LOCAL_OBJECT_START(FSINCOSL_CONSTANTS) - -sincosl_table_p: -data8 0xA2F9836E4E44152A, 0x00003FFE // Inv_pi_by_2 -data8 0xC84D32B0CE81B9F1, 0x00004016 // P_0 -data8 0xC90FDAA22168C235, 0x00003FFF // P_1 -data8 0xECE675D1FC8F8CBB, 0x0000BFBD // P_2 -data8 0xB7ED8FBBACC19C60, 0x0000BF7C // P_3 -data8 0x8D848E89DBD171A1, 0x0000BFBF // d_1 -data8 0xD5394C3618A66F8E, 0x0000BF7C // d_2 -LOCAL_OBJECT_END(FSINCOSL_CONSTANTS) - -LOCAL_OBJECT_START(sincosl_table_d) -data8 0xC90FDAA22168C234, 0x00003FFE // pi_by_4 -data8 0xA397E5046EC6B45A, 0x00003FE7 // Inv_P_0 -data4 0x3E000000, 0xBE000000 // 2^-3 and -2^-3 -data4 0x2F000000, 0xAF000000 // 2^-33 and -2^-33 -data4 0x9E000000, 0x00000000 // -2^-67 -data4 0x00000000, 0x00000000 // pad -LOCAL_OBJECT_END(sincosl_table_d) - -LOCAL_OBJECT_START(sincosl_table_pp) -data8 0xCC8ABEBCA21C0BC9, 0x00003FCE // PP_8 -data8 0xD7468A05720221DA, 0x0000BFD6 // PP_7 -data8 0xB092382F640AD517, 0x00003FDE // PP_6 -data8 0xD7322B47D1EB75A4, 0x0000BFE5 // PP_5 -data8 0xFFFFFFFFFFFFFFFE, 0x0000BFFD // C_1 -data8 0xAAAA000000000000, 0x0000BFFC // PP_1_hi -data8 0xB8EF1D2ABAF69EEA, 0x00003FEC // PP_4 -data8 0xD00D00D00D03BB69, 0x0000BFF2 // PP_3 -data8 0x8888888888888962, 0x00003FF8 // PP_2 -data8 0xAAAAAAAAAAAB0000, 0x0000BFEC // PP_1_lo -LOCAL_OBJECT_END(sincosl_table_pp) - -LOCAL_OBJECT_START(sincosl_table_qq) -data8 0xD56232EFC2B0FE52, 0x00003FD2 // QQ_8 -data8 0xC9C99ABA2B48DCA6, 0x0000BFDA // QQ_7 -data8 0x8F76C6509C716658, 0x00003FE2 // QQ_6 -data8 0x93F27DBAFDA8D0FC, 0x0000BFE9 // QQ_5 -data8 0xAAAAAAAAAAAAAAAA, 0x0000BFFC // S_1 -data8 0x8000000000000000, 0x0000BFFE // QQ_1 -data8 0xD00D00D00C6E5041, 0x00003FEF // QQ_4 -data8 0xB60B60B60B607F60, 0x0000BFF5 // QQ_3 -data8 0xAAAAAAAAAAAAAA9B, 0x00003FFA // QQ_2 -LOCAL_OBJECT_END(sincosl_table_qq) - -LOCAL_OBJECT_START(sincosl_table_c) -data8 0xFFFFFFFFFFFFFFFE, 0x0000BFFD // C_1 -data8 0xAAAAAAAAAAAA719F, 0x00003FFA // C_2 -data8 0xB60B60B60356F994, 0x0000BFF5 // C_3 -data8 0xD00CFFD5B2385EA9, 0x00003FEF // C_4 -data8 0x93E4BD18292A14CD, 0x0000BFE9 // C_5 -LOCAL_OBJECT_END(sincosl_table_c) - -LOCAL_OBJECT_START(sincosl_table_s) -data8 0xAAAAAAAAAAAAAAAA, 0x0000BFFC // S_1 -data8 0x88888888888868DB, 0x00003FF8 // S_2 -data8 0xD00D00D0055EFD4B, 0x0000BFF2 // S_3 -data8 0xB8EF1C5D839730B9, 0x00003FEC // S_4 -data8 0xD71EA3A4E5B3F492, 0x0000BFE5 // S_5 -data4 0x38800000, 0xB8800000 // two**-14 and -two**-14 -LOCAL_OBJECT_END(sincosl_table_s) - -FR_Input_X = f8 -FR_Result = f8 - -FR_r = f8 -FR_c = f9 - -FR_norm_x = f9 -FR_inv_pi_2to63 = f10 -FR_rshf_2to64 = f11 -FR_2tom64 = f12 -FR_rshf = f13 -FR_N_float_signif = f14 -FR_abs_x = f15 -FR_Pi_by_4 = f34 -FR_Two_to_M14 = f35 -FR_Neg_Two_to_M14 = f36 -FR_Two_to_M33 = f37 -FR_Neg_Two_to_M33 = f38 -FR_Neg_Two_to_M67 = f39 -FR_Inv_pi_by_2 = f40 -FR_N_float = f41 -FR_N_fix = f42 -FR_P_1 = f43 -FR_P_2 = f44 -FR_P_3 = f45 -FR_s = f46 -FR_w = f47 -FR_d_2 = f48 -FR_tmp_result = f49 -FR_Z = f50 -FR_A = f51 -FR_a = f52 -FR_t = f53 -FR_U_1 = f54 -FR_U_2 = f55 -FR_C_1 = f56 -FR_C_2 = f57 -FR_C_3 = f58 -FR_C_4 = f59 -FR_C_5 = f60 -FR_S_1 = f61 -FR_S_2 = f62 -FR_S_3 = f63 -FR_S_4 = f64 -FR_S_5 = f65 -FR_poly_hi = f66 -FR_poly_lo = f67 -FR_r_hi = f68 -FR_r_lo = f69 -FR_rsq = f70 -FR_r_cubed = f71 -FR_C_hi = f72 -FR_N_0 = f73 -FR_d_1 = f74 -FR_V = f75 -FR_V_hi = f75 -FR_V_lo = f76 -FR_U_hi = f77 -FR_U_lo = f78 -FR_U_hiabs = f79 -FR_V_hiabs = f80 -FR_PP_8 = f81 -FR_QQ_8 = f101 -FR_PP_7 = f82 -FR_QQ_7 = f102 -FR_PP_6 = f83 -FR_QQ_6 = f103 -FR_PP_5 = f84 -FR_QQ_5 = f104 -FR_PP_4 = f85 -FR_QQ_4 = f105 -FR_PP_3 = f86 -FR_QQ_3 = f106 -FR_PP_2 = f87 -FR_QQ_2 = f107 -FR_QQ_1 = f108 -FR_r_hi_sq = f88 -FR_N_0_fix = f89 -FR_Inv_P_0 = f90 -FR_corr = f91 -FR_poly = f92 -FR_Neg_Two_to_M3 = f93 -FR_Two_to_M3 = f94 -FR_P_0 = f95 -FR_C_lo = f96 -FR_PP_1 = f97 -FR_PP_1_lo = f98 -FR_ArgPrime = f99 -FR_inexact = f100 - -GR_exp_m2_to_m3= r36 -GR_N_Inc = r37 -GR_Sin_or_Cos = r38 -GR_signexp_x = r40 -GR_exp_x = r40 -GR_exp_mask = r41 -GR_exp_2_to_63 = r42 -GR_exp_2_to_m3 = r43 -GR_exp_2_to_24 = r44 - -GR_sig_inv_pi = r45 -GR_rshf_2to64 = r46 -GR_exp_2tom64 = r47 -GR_rshf = r48 -GR_ad_p = r49 -GR_ad_d = r50 -GR_ad_pp = r51 -GR_ad_qq = r52 -GR_ad_c = r53 -GR_ad_s = r54 -GR_ad_ce = r55 -GR_ad_se = r56 -GR_ad_m14 = r57 -GR_ad_s1 = r58 - -// Added for unwind support - -GR_SAVE_B0 = r39 -GR_SAVE_GP = r40 -GR_SAVE_PFS = r41 - - -.section .text - -GLOBAL_IEEE754_ENTRY(sinl) -{ .mlx - alloc r32 = ar.pfs,0,27,2,0 - movl GR_sig_inv_pi = 0xa2f9836e4e44152a // significand of 1/pi -} -{ .mlx - mov GR_Sin_or_Cos = 0x0 - movl GR_rshf_2to64 = 0x47e8000000000000 // 1.1000 2^(63+64) -} -;; - -{ .mfi - addl GR_ad_p = @ltoff(FSINCOSL_CONSTANTS#), gp - fclass.m p6, p0 = FR_Input_X, 0x1E3 // Test x natval, nan, inf - mov GR_exp_2_to_m3 = 0xffff - 3 // Exponent of 2^-3 -} -{ .mfb - nop.m 999 - fnorm.s1 FR_norm_x = FR_Input_X // Normalize x - br.cond.sptk SINCOSL_CONTINUE -} -;; - -GLOBAL_IEEE754_END(sinl) - -GLOBAL_IEEE754_ENTRY(cosl) -{ .mlx - alloc r32 = ar.pfs,0,27,2,0 - movl GR_sig_inv_pi = 0xa2f9836e4e44152a // significand of 1/pi -} -{ .mlx - mov GR_Sin_or_Cos = 0x1 - movl GR_rshf_2to64 = 0x47e8000000000000 // 1.1000 2^(63+64) -} -;; - -{ .mfi - addl GR_ad_p = @ltoff(FSINCOSL_CONSTANTS#), gp - fclass.m p6, p0 = FR_Input_X, 0x1E3 // Test x natval, nan, inf - mov GR_exp_2_to_m3 = 0xffff - 3 // Exponent of 2^-3 -} -{ .mfi - nop.m 999 - fnorm.s1 FR_norm_x = FR_Input_X // Normalize x - nop.i 999 -} -;; - -SINCOSL_CONTINUE: -{ .mfi - setf.sig FR_inv_pi_2to63 = GR_sig_inv_pi // Form 1/pi * 2^63 - nop.f 999 - mov GR_exp_2tom64 = 0xffff - 64 // Scaling constant to compute N -} -{ .mlx - setf.d FR_rshf_2to64 = GR_rshf_2to64 // Form const 1.1000 * 2^(63+64) - movl GR_rshf = 0x43e8000000000000 // Form const 1.1000 * 2^63 -} -;; - -{ .mfi - ld8 GR_ad_p = [GR_ad_p] // Point to Inv_pi_by_2 - fclass.m p7, p0 = FR_Input_X, 0x0b // Test x denormal - nop.i 999 -} -;; - -{ .mfi - getf.exp GR_signexp_x = FR_Input_X // Get sign and exponent of x - fclass.m p10, p0 = FR_Input_X, 0x007 // Test x zero - nop.i 999 -} -{ .mib - mov GR_exp_mask = 0x1ffff // Exponent mask - nop.i 999 -(p6) br.cond.spnt SINCOSL_SPECIAL // Branch if x natval, nan, inf -} -;; - -{ .mfi - setf.exp FR_2tom64 = GR_exp_2tom64 // Form 2^-64 for scaling N_float - nop.f 0 - add GR_ad_d = 0x70, GR_ad_p // Point to constant table d -} -{ .mib - setf.d FR_rshf = GR_rshf // Form right shift const 1.1000 * 2^63 - mov GR_exp_m2_to_m3 = 0x2fffc // Form -(2^-3) -(p7) br.cond.spnt SINCOSL_DENORMAL // Branch if x denormal -} -;; - -SINCOSL_COMMON: -{ .mfi - and GR_exp_x = GR_exp_mask, GR_signexp_x // Get exponent of x - fclass.nm p8, p0 = FR_Input_X, 0x1FF // Test x unsupported type - mov GR_exp_2_to_63 = 0xffff + 63 // Exponent of 2^63 -} -{ .mib - add GR_ad_pp = 0x40, GR_ad_d // Point to constant table pp - mov GR_exp_2_to_24 = 0xffff + 24 // Exponent of 2^24 -(p10) br.cond.spnt SINCOSL_ZERO // Branch if x zero -} -;; - -{ .mfi - ldfe FR_Inv_pi_by_2 = [GR_ad_p], 16 // Load 2/pi - fcmp.eq.s0 p15, p0 = FR_Input_X, f0 // Dummy to set denormal - add GR_ad_qq = 0xa0, GR_ad_pp // Point to constant table qq -} -{ .mfi - ldfe FR_Pi_by_4 = [GR_ad_d], 16 // Load pi/4 for range test - nop.f 999 - cmp.ge p10,p0 = GR_exp_x, GR_exp_2_to_63 // Is |x| >= 2^63 -} -;; - -{ .mfi - ldfe FR_P_0 = [GR_ad_p], 16 // Load P_0 for pi/4 <= |x| < 2^63 - fmerge.s FR_abs_x = f1, FR_norm_x // |x| - add GR_ad_c = 0x90, GR_ad_qq // Point to constant table c -} -{ .mfi - ldfe FR_Inv_P_0 = [GR_ad_d], 16 // Load 1/P_0 for pi/4 <= |x| < 2^63 - nop.f 999 - cmp.ge p7,p0 = GR_exp_x, GR_exp_2_to_24 // Is |x| >= 2^24 -} -;; - -{ .mfi - ldfe FR_P_1 = [GR_ad_p], 16 // Load P_1 for pi/4 <= |x| < 2^63 - nop.f 999 - add GR_ad_s = 0x50, GR_ad_c // Point to constant table s -} -{ .mfi - ldfe FR_PP_8 = [GR_ad_pp], 16 // Load PP_8 for 2^-3 < |r| < pi/4 - nop.f 999 - nop.i 999 -} -;; - -{ .mfi - ldfe FR_P_2 = [GR_ad_p], 16 // Load P_2 for pi/4 <= |x| < 2^63 - nop.f 999 - add GR_ad_ce = 0x40, GR_ad_c // Point to end of constant table c -} -{ .mfi - ldfe FR_QQ_8 = [GR_ad_qq], 16 // Load QQ_8 for 2^-3 < |r| < pi/4 - nop.f 999 - nop.i 999 -} -;; - -{ .mfi - ldfe FR_QQ_7 = [GR_ad_qq], 16 // Load QQ_7 for 2^-3 < |r| < pi/4 - fma.s1 FR_N_float_signif = FR_Input_X, FR_inv_pi_2to63, FR_rshf_2to64 - add GR_ad_se = 0x40, GR_ad_s // Point to end of constant table s -} -{ .mib - ldfe FR_PP_7 = [GR_ad_pp], 16 // Load PP_7 for 2^-3 < |r| < pi/4 - mov GR_ad_s1 = GR_ad_s // Save pointer to S_1 -(p10) br.cond.spnt SINCOSL_ARG_TOO_LARGE // Branch if |x| >= 2^63 - // Use Payne-Hanek Reduction -} -;; - -{ .mfi - ldfe FR_P_3 = [GR_ad_p], 16 // Load P_3 for pi/4 <= |x| < 2^63 - fmerge.se FR_r = FR_norm_x, FR_norm_x // r = x, in case |x| < pi/4 - add GR_ad_m14 = 0x50, GR_ad_s // Point to constant table m14 -} -{ .mfb - ldfps FR_Two_to_M3, FR_Neg_Two_to_M3 = [GR_ad_d], 8 - fma.s1 FR_rsq = FR_norm_x, FR_norm_x, f0 // rsq = x*x, in case |x| < pi/4 -(p7) br.cond.spnt SINCOSL_LARGER_ARG // Branch if 2^24 <= |x| < 2^63 - // Use pre-reduction -} -;; - -{ .mmf - ldfe FR_PP_6 = [GR_ad_pp], 16 // Load PP_6 for normal path - ldfe FR_QQ_6 = [GR_ad_qq], 16 // Load QQ_6 for normal path - fmerge.se FR_c = f0, f0 // c = 0 in case |x| < pi/4 -} -;; - -{ .mmf - ldfe FR_PP_5 = [GR_ad_pp], 16 // Load PP_5 for normal path - ldfe FR_QQ_5 = [GR_ad_qq], 16 // Load QQ_5 for normal path - nop.f 999 -} -;; - -// Here if 0 < |x| < 2^24 -{ .mfi - ldfe FR_S_5 = [GR_ad_se], -16 // Load S_5 if i_1=0 - fcmp.lt.s1 p6, p7 = FR_abs_x, FR_Pi_by_4 // Test |x| < pi/4 - nop.i 999 -} -{ .mfi - ldfe FR_C_5 = [GR_ad_ce], -16 // Load C_5 if i_1=1 - fms.s1 FR_N_float = FR_N_float_signif, FR_2tom64, FR_rshf - nop.i 999 -} -;; - -{ .mmi - ldfe FR_S_4 = [GR_ad_se], -16 // Load S_4 if i_1=0 - ldfe FR_C_4 = [GR_ad_ce], -16 // Load C_4 if i_1=1 - nop.i 999 -} -;; - -// -// N = Arg * 2/pi -// Check if Arg < pi/4 -// -// -// Case 2: Convert integer N_fix back to normalized floating-point value. -// Case 1: p8 is only affected when p6 is set -// -// -// Grab the integer part of N and call it N_fix -// -{ .mfi -(p7) ldfps FR_Two_to_M33, FR_Neg_Two_to_M33 = [GR_ad_d], 8 -(p6) fma.s1 FR_r_cubed = FR_r, FR_rsq, f0 // r^3 if |x| < pi/4 -(p6) mov GR_N_Inc = GR_Sin_or_Cos // N_Inc if |x| < pi/4 -} -;; - -// If |x| < pi/4, r = x and c = 0 -// lf |x| < pi/4, is x < 2**(-3). -// r = Arg -// c = 0 -{ .mmi -(p7) getf.sig GR_N_Inc = FR_N_float_signif -(p6) cmp.lt.unc p8,p0 = GR_exp_x, GR_exp_2_to_m3 // Is |x| < 2^-3 -(p6) tbit.z p9,p10 = GR_N_Inc, 0 // p9 if i_1=0, N mod 4 = 0,1 - // p10 if i_1=1, N mod 4 = 2,3 -} -;; - -// -// lf |x| < pi/4, is -2**(-3)< x < 2**(-3) - set p8. -// If |x| >= pi/4, -// Create the right N for |x| < pi/4 and otherwise -// Case 2: Place integer part of N in GP register -// - - -{ .mbb - nop.m 999 -(p8) br.cond.spnt SINCOSL_SMALL_R_0 // Branch if 0 < |x| < 2^-3 -(p6) br.cond.spnt SINCOSL_NORMAL_R_0 // Branch if 2^-3 <= |x| < pi/4 -} -;; - -// Here if pi/4 <= |x| < 2^24 -{ .mfi - ldfs FR_Neg_Two_to_M67 = [GR_ad_d], 8 // Load -2^-67 - fnma.s1 FR_s = FR_N_float, FR_P_1, FR_Input_X // s = -N * P_1 + Arg - add GR_N_Inc = GR_N_Inc, GR_Sin_or_Cos // Adjust N_Inc for sin/cos -} -{ .mfi - nop.m 999 - fma.s1 FR_w = FR_N_float, FR_P_2, f0 // w = N * P_2 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fms.s1 FR_r = FR_s, f1, FR_w // r = s - w, assume |s| >= 2^-33 - tbit.z p9,p10 = GR_N_Inc, 0 // p9 if i_1=0, N mod 4 = 0,1 - // p10 if i_1=1, N mod 4 = 2,3 -} -;; - -{ .mfi - nop.m 999 - fcmp.lt.s1 p7, p6 = FR_s, FR_Two_to_M33 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p7) fcmp.gt.s1 p7, p6 = FR_s, FR_Neg_Two_to_M33 // p6 if |s| >= 2^-33, else p7 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fms.s1 FR_c = FR_s, f1, FR_r // c = s - r, for |s| >= 2^-33 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 FR_rsq = FR_r, FR_r, f0 // rsq = r * r, for |s| >= 2^-33 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p7) fma.s1 FR_w = FR_N_float, FR_P_3, f0 - nop.i 999 -} -;; - -{ .mmf -(p9) ldfe FR_C_1 = [GR_ad_pp], 16 // Load C_1 if i_1=0 -(p10) ldfe FR_S_1 = [GR_ad_qq], 16 // Load S_1 if i_1=1 - frcpa.s1 FR_r_hi, p15 = f1, FR_r // r_hi = frcpa(r) -} -;; - -{ .mfi - nop.m 999 -(p6) fcmp.lt.unc.s1 p8, p13 = FR_r, FR_Two_to_M3 // If big s, test r with 2^-3 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p7) fma.s1 FR_U_1 = FR_N_float, FR_P_2, FR_w - nop.i 999 -} -;; - -// -// For big s: r = s - w: No futher reduction is necessary -// For small s: w = N * P_3 (change sign) More reduction -// -{ .mfi - nop.m 999 -(p8) fcmp.gt.s1 p8, p13 = FR_r, FR_Neg_Two_to_M3 // If big s, p8 if |r| < 2^-3 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly = FR_rsq, FR_PP_8, FR_PP_7 // poly = rsq*PP_8+PP_7 if i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_QQ_8, FR_QQ_7 // poly = rsq*QQ_8+QQ_7 if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p7) fms.s1 FR_r = FR_s, f1, FR_U_1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p6) fma.s1 FR_r_cubed = FR_r, FR_rsq, f0 // rcubed = r * rsq - nop.i 999 -} -;; - -{ .mfi -// -// For big s: Is |r| < 2**(-3)? -// For big s: c = S - r -// For small s: U_1 = N * P_2 + w -// -// If p8 is set, prepare to branch to Small_R. -// If p9 is set, prepare to branch to Normal_R. -// For big s, r is complete here. -// -// -// For big s: c = c + w (w has not been negated.) -// For small s: r = S - U_1 -// - nop.m 999 -(p6) fms.s1 FR_c = FR_c, f1, FR_w - nop.i 999 -} -{ .mbb - nop.m 999 -(p8) br.cond.spnt SINCOSL_SMALL_R_1 // Branch if |s|>=2^-33, |r| < 2^-3, - // and pi/4 <= |x| < 2^24 -(p13) br.cond.sptk SINCOSL_NORMAL_R_1 // Branch if |s|>=2^-33, |r| >= 2^-3, - // and pi/4 <= |x| < 2^24 -} -;; - -SINCOSL_S_TINY: -// -// Here if |s| < 2^-33, and pi/4 <= |x| < 2^24 -// -{ .mfi - fms.s1 FR_U_2 = FR_N_float, FR_P_2, FR_U_1 -// -// c = S - U_1 -// r = S_1 * r -// -// -} -;; - -{ .mmi - nop.m 999 -// -// Get [i_0,i_1] - two lsb of N_fix_gr. -// Do dummy fmpy so inexact is always set. -// - tbit.z p9,p10 = GR_N_Inc, 0 // p9 if i_1=0, N mod 4 = 0,1 - // p10 if i_1=1, N mod 4 = 2,3 -} -;; - -// -// For small s: U_2 = N * P_2 - U_1 -// S_1 stored constant - grab the one stored with the -// coefficients. -// -{ .mfi - ldfe FR_S_1 = [GR_ad_s1], 16 -// -// Check if i_1 and i_0 != 0 -// -(p10) fma.s1 FR_poly = f0, f1, FR_Neg_Two_to_M67 - tbit.z p11,p12 = GR_N_Inc, 1 // p11 if i_0=0, N mod 4 = 0,2 - // p12 if i_0=1, N mod 4 = 1,3 -} -;; - -{ .mfi - nop.m 999 - fms.s1 FR_s = FR_s, f1, FR_r - nop.i 999 -} -{ .mfi - nop.m 999 -// -// S = S - r -// U_2 = U_2 + w -// load S_1 -// - fma.s1 FR_rsq = FR_r, FR_r, f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 - fma.s1 FR_U_2 = FR_U_2, f1, FR_w - nop.i 999 -} -{ .mfi - nop.m 999 - fmerge.se FR_tmp_result = FR_r, FR_r - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_tmp_result = f0, f1, f1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// FR_rsq = r * r -// Save r as the result. -// - fms.s1 FR_c = FR_s, f1, FR_U_1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// if ( i_1 ==0) poly = c + S_1*r*r*r -// else Result = 1 -// -(p12) fnma.s1 FR_tmp_result = FR_tmp_result, f1, f0 - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 FR_r = FR_S_1, FR_r, f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 - fma.s0 FR_S_1 = FR_S_1, FR_S_1, f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// If i_1 != 0, poly = 2**(-67) -// - fms.s1 FR_c = FR_c, f1, FR_U_2 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// c = c - U_2 -// -(p9) fma.s1 FR_poly = FR_r, FR_rsq, FR_c - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// i_0 != 0, so Result = -Result -// -(p11) fma.s0 FR_Result = FR_tmp_result, f1, FR_poly - nop.i 999 ;; -} -{ .mfb - nop.m 999 -(p12) fms.s0 FR_Result = FR_tmp_result, f1, FR_poly -// -// if (i_0 == 0), Result = Result + poly -// else Result = Result - poly -// - br.ret.sptk b0 // Exit if |s| < 2^-33, and pi/4 <= |x| < 2^24 -} -;; - -SINCOSL_LARGER_ARG: -// -// Here if 2^24 <= |x| < 2^63 -// -{ .mfi - ldfe FR_d_1 = [GR_ad_p], 16 // Load d_1 for |x| >= 2^24 path - fma.s1 FR_N_0 = FR_Input_X, FR_Inv_P_0, f0 - nop.i 999 -} -;; - -// -// N_0 = Arg * Inv_P_0 -// -// Load values 2**(-14) and -2**(-14) -{ .mmi - ldfps FR_Two_to_M14, FR_Neg_Two_to_M14 = [GR_ad_m14] - nop.i 999 ;; -} -{ .mfi - ldfe FR_d_2 = [GR_ad_p], 16 // Load d_2 for |x| >= 2^24 path - nop.f 999 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// - fcvt.fx.s1 FR_N_0_fix = FR_N_0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N_0_fix = integer part of N_0 -// - fcvt.xf FR_N_0 = FR_N_0_fix - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// Make N_0 the integer part -// - fnma.s1 FR_ArgPrime = FR_N_0, FR_P_0, FR_Input_X - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 FR_w = FR_N_0, FR_d_1, f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// Arg' = -N_0 * P_0 + Arg -// w = N_0 * d_1 -// - fma.s1 FR_N_float = FR_ArgPrime, FR_Inv_pi_by_2, f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N = A' * 2/pi -// - fcvt.fx.s1 FR_N_fix = FR_N_float - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N_fix is the integer part -// - fcvt.xf FR_N_float = FR_N_fix - nop.i 999 ;; -} -{ .mfi - getf.sig GR_N_Inc = FR_N_fix - nop.f 999 - nop.i 999 ;; -} -{ .mii - nop.m 999 - nop.i 999 ;; - add GR_N_Inc = GR_N_Inc, GR_Sin_or_Cos ;; -} -{ .mfi - nop.m 999 -// -// N is the integer part of the reduced-reduced argument. -// Put the integer in a GP register -// - fnma.s1 FR_s = FR_N_float, FR_P_1, FR_ArgPrime - nop.i 999 -} -{ .mfi - nop.m 999 - fnma.s1 FR_w = FR_N_float, FR_P_2, FR_w - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// s = -N*P_1 + Arg' -// w = -N*P_2 + w -// N_fix_gr = N_fix_gr + N_inc -// - fcmp.lt.unc.s1 p9, p8 = FR_s, FR_Two_to_M14 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p9) fcmp.gt.s1 p9, p8 = FR_s, FR_Neg_Two_to_M14 // p9 if |s| < 2^-14 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// For |s| > 2**(-14) r = S + w (r complete) -// Else U_hi = N_0 * d_1 -// -(p9) fma.s1 FR_V_hi = FR_N_float, FR_P_2, f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 FR_U_hi = FR_N_0, FR_d_1, f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// Either S <= -2**(-14) or S >= 2**(-14) -// or -2**(-14) < s < 2**(-14) -// -(p8) fma.s1 FR_r = FR_s, f1, FR_w - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 FR_w = FR_N_float, FR_P_3, f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// We need abs of both U_hi and V_hi - don't -// worry about switched sign of V_hi. -// -(p9) fms.s1 FR_A = FR_U_hi, f1, FR_V_hi - nop.i 999 -} -{ .mfi - nop.m 999 -// -// Big s: finish up c = (S - r) + w (c complete) -// Case 4: A = U_hi + V_hi -// Note: Worry about switched sign of V_hi, so subtract instead of add. -// -(p9) fnma.s1 FR_V_lo = FR_N_float, FR_P_2, FR_V_hi - nop.i 999 ;; -} -{ .mmf - nop.m 999 - nop.m 999 -(p9) fms.s1 FR_U_lo = FR_N_0, FR_d_1, FR_U_hi -} -{ .mfi - nop.m 999 -(p9) fmerge.s FR_V_hiabs = f0, FR_V_hi - nop.i 999 ;; -} -//{ .mfb -//(p9) fmerge.s f8= FR_V_lo,FR_V_lo -//(p9) br.ret.sptk b0 -//} -//;; -{ .mfi - nop.m 999 -// For big s: c = S - r -// For small s do more work: U_lo = N_0 * d_1 - U_hi -// -(p9) fmerge.s FR_U_hiabs = f0, FR_U_hi - nop.i 999 -} -{ .mfi - nop.m 999 -// -// For big s: Is |r| < 2**(-3) -// For big s: if p12 set, prepare to branch to Small_R. -// For big s: If p13 set, prepare to branch to Normal_R. -// -(p8) fms.s1 FR_c = FR_s, f1, FR_r - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// For small S: V_hi = N * P_2 -// w = N * P_3 -// Note the product does not include the (-) as in the writeup -// so (-) missing for V_hi and w. -// -(p8) fcmp.lt.unc.s1 p12, p13 = FR_r, FR_Two_to_M3 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fcmp.gt.s1 p12, p13 = FR_r, FR_Neg_Two_to_M3 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p8) fma.s1 FR_c = FR_c, f1, FR_w - nop.i 999 -} -{ .mfb - nop.m 999 -(p9) fms.s1 FR_w = FR_N_0, FR_d_2, FR_w -(p12) br.cond.spnt SINCOSL_SMALL_R // Branch if |r| < 2^-3 - // and 2^24 <= |x| < 2^63 -} -;; - -{ .mib - nop.m 999 - nop.i 999 -(p13) br.cond.sptk SINCOSL_NORMAL_R // Branch if |r| >= 2^-3 - // and 2^24 <= |x| < 2^63 -} -;; - -SINCOSL_LARGER_S_TINY: -// -// Here if |s| < 2^-14, and 2^24 <= |x| < 2^63 -// -{ .mfi - nop.m 999 -// -// Big s: Vector off when |r| < 2**(-3). Recall that p8 will be true. -// The remaining stuff is for Case 4. -// Small s: V_lo = N * P_2 + U_hi (U_hi is in place of V_hi in writeup) -// Note: the (-) is still missing for V_lo. -// Small s: w = w + N_0 * d_2 -// Note: the (-) is now incorporated in w. -// - fcmp.ge.unc.s1 p7, p8 = FR_U_hiabs, FR_V_hiabs -} -{ .mfi - nop.m 999 -// -// C_hi = S + A -// - fma.s1 FR_t = FR_U_lo, f1, FR_V_lo -} -;; - -{ .mfi - nop.m 999 -// -// t = U_lo + V_lo -// -// -(p7) fms.s1 FR_a = FR_U_hi, f1, FR_A - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p8) fma.s1 FR_a = FR_V_hi, f1, FR_A - nop.i 999 -} -;; - -{ .mfi -// -// Is U_hiabs >= V_hiabs? -// - nop.m 999 - fma.s1 FR_C_hi = FR_s, f1, FR_A - nop.i 999 ;; -} -{ .mmi - ldfe FR_C_1 = [GR_ad_c], 16 ;; - ldfe FR_C_2 = [GR_ad_c], 64 - nop.i 999 ;; -} -// -// c = c + C_lo finished. -// Load C_2 -// -{ .mfi - ldfe FR_S_1 = [GR_ad_s], 16 -// -// C_lo = S - C_hi -// - fma.s1 FR_t = FR_t, f1, FR_w - nop.i 999 ;; -} -// -// r and c have been computed. -// Make sure ftz mode is set - should be automatic when using wre -// |r| < 2**(-3) -// Get [i_0,i_1] - two lsb of N_fix. -// Load S_1 -// -{ .mfi - ldfe FR_S_2 = [GR_ad_s], 64 -// -// t = t + w -// -(p7) fms.s1 FR_a = FR_a, f1, FR_V_hi - tbit.z p9,p10 = GR_N_Inc, 0 // p9 if i_1=0, N mod 4 = 0,1 - // p10 if i_1=1, N mod 4 = 2,3 -} -;; -{ .mfi - nop.m 999 -// -// For larger u than v: a = U_hi - A -// Else a = V_hi - A (do an add to account for missing (-) on V_hi -// - fms.s1 FR_C_lo = FR_s, f1, FR_C_hi - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p8) fms.s1 FR_a = FR_U_hi, f1, FR_a - tbit.z p11,p12 = GR_N_Inc, 1 // p11 if i_0=0, N mod 4 = 0,2 - // p12 if i_0=1, N mod 4 = 1,3 -} -;; - -{ .mfi - nop.m 999 -// -// If u > v: a = (U_hi - A) + V_hi -// Else a = (V_hi - A) + U_hi -// In each case account for negative missing from V_hi. -// - fma.s1 FR_C_lo = FR_C_lo, f1, FR_A - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// C_lo = (S - C_hi) + A -// - fma.s1 FR_t = FR_t, f1, FR_a - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// t = t + a -// - fma.s1 FR_C_lo = FR_C_lo, f1, FR_t - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// C_lo = C_lo + t -// - fma.s1 FR_r = FR_C_hi, f1, FR_C_lo - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// Load S_2 -// - fma.s1 FR_rsq = FR_r, FR_r, f0 - nop.i 999 -} -{ .mfi - nop.m 999 -// -// r = C_hi + C_lo -// - fms.s1 FR_c = FR_C_hi, f1, FR_r - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// if i_1 ==0: poly = S_2 * FR_rsq + S_1 -// else poly = C_2 * FR_rsq + C_1 -// -(p9) fma.s1 FR_tmp_result = f0, f1, FR_r - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_tmp_result = f0, f1, f1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// Compute r_cube = FR_rsq * r -// -(p9) fma.s1 FR_poly = FR_rsq, FR_S_2, FR_S_1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_C_2, FR_C_1 - nop.i 999 -} -{ .mfi - nop.m 999 -// -// Compute FR_rsq = r * r -// Is i_1 == 0 ? -// - fma.s1 FR_r_cubed = FR_rsq, FR_r, f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// c = C_hi - r -// Load C_1 -// - fma.s1 FR_c = FR_c, f1, FR_C_lo - nop.i 999 -} -{ .mfi - nop.m 999 -// -// if i_1 ==0: poly = r_cube * poly + c -// else poly = FR_rsq * poly -// -(p12) fms.s1 FR_tmp_result = f0, f1, FR_tmp_result - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// if i_1 ==0: Result = r -// else Result = 1.0 -// -(p9) fma.s1 FR_poly = FR_r_cubed, FR_poly, FR_c - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, f0 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// if i_0 !=0: Result = -Result -// -(p11) fma.s0 FR_Result = FR_tmp_result, f1, FR_poly - nop.i 999 ;; -} -{ .mfb - nop.m 999 -(p12) fms.s0 FR_Result = FR_tmp_result, f1, FR_poly -// -// if i_0 == 0: Result = Result + poly -// else Result = Result - poly -// - br.ret.sptk b0 // Exit for |s| < 2^-14, and 2^24 <= |x| < 2^63 -} -;; - - -SINCOSL_SMALL_R: -// -// Here if |r| < 2^-3 -// -// Enter with r, c, and N_Inc computed -// -// Compare both i_1 and i_0 with 0. -// if i_1 == 0, set p9. -// if i_0 == 0, set p11. -// - -{ .mfi - nop.m 999 - fma.s1 FR_rsq = FR_r, FR_r, f0 // rsq = r * r - tbit.z p9,p10 = GR_N_Inc, 0 // p9 if i_1=0, N mod 4 = 0,1 - // p10 if i_1=1, N mod 4 = 2,3 -} -;; - -{ .mmi -(p9) ldfe FR_S_5 = [GR_ad_se], -16 // Load S_5 if i_1=0 -(p10) ldfe FR_C_5 = [GR_ad_ce], -16 // Load C_5 if i_1=1 - nop.i 999 -} -;; - -{ .mmi -(p9) ldfe FR_S_4 = [GR_ad_se], -16 // Load S_4 if i_1=0 -(p10) ldfe FR_C_4 = [GR_ad_ce], -16 // Load C_4 if i_1=1 - nop.i 999 -} -;; - -SINCOSL_SMALL_R_0: -// Entry point for 2^-3 < |x| < pi/4 -.pred.rel "mutex",p9,p10 -SINCOSL_SMALL_R_1: -// Entry point for pi/4 < |x| < 2^24 and |r| < 2^-3 -.pred.rel "mutex",p9,p10 -{ .mfi -(p9) ldfe FR_S_3 = [GR_ad_se], -16 // Load S_3 if i_1=0 - fma.s1 FR_Z = FR_rsq, FR_rsq, f0 // Z = rsq * rsq - nop.i 999 -} -{ .mfi -(p10) ldfe FR_C_3 = [GR_ad_ce], -16 // Load C_3 if i_1=1 -(p10) fnma.s1 FR_c = FR_c, FR_r, f0 // c = -c * r if i_1=0 - nop.i 999 -} -;; - -{ .mmf -(p9) ldfe FR_S_2 = [GR_ad_se], -16 // Load S_2 if i_1=0 -(p10) ldfe FR_C_2 = [GR_ad_ce], -16 // Load C_2 if i_1=1 -(p10) fmerge.s FR_r = f1, f1 -} -;; - -{ .mmi -(p9) ldfe FR_S_1 = [GR_ad_se], -16 // Load S_1 if i_1=0 -(p10) ldfe FR_C_1 = [GR_ad_ce], -16 // Load C_1 if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_Z = FR_Z, FR_r, f0 // Z = Z * r if i_1=0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_lo = FR_rsq, FR_S_5, FR_S_4 // poly_lo=rsq*S_5+S_4 if i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly_lo = FR_rsq, FR_C_5, FR_C_4 // poly_lo=rsq*C_5+C_4 if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_hi = FR_rsq, FR_S_2, FR_S_1 // poly_hi=rsq*S_2+S_1 if i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly_hi = FR_rsq, FR_C_2, FR_C_1 // poly_hi=rsq*C_2+C_1 if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_Z = FR_Z, FR_rsq, f0 // Z = Z * rsq - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_lo = FR_rsq, FR_poly_lo, FR_S_3 // p_lo=p_lo*rsq+S_3, i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly_lo = FR_rsq, FR_poly_lo, FR_C_3 // p_lo=p_lo*rsq+C_3, i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s0 FR_inexact = FR_S_4, FR_S_4, f0 // Dummy op to set inexact - tbit.z p11,p12 = GR_N_Inc, 1 // p11 if i_0=0, N mod 4 = 0,2 - // p12 if i_0=1, N mod 4 = 1,3 -} -{ .mfi - nop.m 999 -(p10) fma.s0 FR_inexact = FR_C_1, FR_C_1, f0 // Dummy op to set inexact - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_hi = FR_poly_hi, FR_rsq, f0 // p_hi=p_hi*rsq if i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly_hi = FR_poly_hi, FR_rsq, f0 // p_hi=p_hi*rsq if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_poly = FR_Z, FR_poly_lo, FR_c // poly=Z*poly_lo+c - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_hi = FR_r, FR_poly_hi, f0 // p_hi=r*p_hi if i_1=0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p12) fms.s1 FR_r = f0, f1, FR_r // r = -r if i_0=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_poly = FR_poly, f1, FR_poly_hi // poly=poly+poly_hi - nop.i 999 -} -;; - -// -// if (i_0 == 0) Result = r + poly -// if (i_0 != 0) Result = r - poly -// -{ .mfi - nop.m 999 -(p11) fma.s0 FR_Result = FR_r, f1, FR_poly - nop.i 999 -} -{ .mfb - nop.m 999 -(p12) fms.s0 FR_Result = FR_r, f1, FR_poly - br.ret.sptk b0 // Exit for |r| < 2^-3 -} -;; - - -SINCOSL_NORMAL_R: -// -// Here if 2^-3 <= |r| < pi/4 -// THIS IS THE MAIN PATH -// -// Enter with r, c, and N_Inc having been computed -// -{ .mfi - ldfe FR_PP_6 = [GR_ad_pp], 16 // Load PP_6 - fma.s1 FR_rsq = FR_r, FR_r, f0 // rsq = r * r - tbit.z p9,p10 = GR_N_Inc, 0 // p9 if i_1=0, N mod 4 = 0,1 - // p10 if i_1=1, N mod 4 = 2,3 -} -{ .mfi - ldfe FR_QQ_6 = [GR_ad_qq], 16 // Load QQ_6 - nop.f 999 - nop.i 999 -} -;; - -{ .mmi -(p9) ldfe FR_PP_5 = [GR_ad_pp], 16 // Load PP_5 if i_1=0 -(p10) ldfe FR_QQ_5 = [GR_ad_qq], 16 // Load QQ_5 if i_1=1 - nop.i 999 -} -;; - -SINCOSL_NORMAL_R_0: -// Entry for 2^-3 < |x| < pi/4 -.pred.rel "mutex",p9,p10 -{ .mmf -(p9) ldfe FR_C_1 = [GR_ad_pp], 16 // Load C_1 if i_1=0 -(p10) ldfe FR_S_1 = [GR_ad_qq], 16 // Load S_1 if i_1=1 - frcpa.s1 FR_r_hi, p6 = f1, FR_r // r_hi = frcpa(r) -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly = FR_rsq, FR_PP_8, FR_PP_7 // poly = rsq*PP_8+PP_7 if i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_QQ_8, FR_QQ_7 // poly = rsq*QQ_8+QQ_7 if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_r_cubed = FR_r, FR_rsq, f0 // rcubed = r * rsq - nop.i 999 -} -;; - - -SINCOSL_NORMAL_R_1: -// Entry for pi/4 <= |x| < 2^24 -.pred.rel "mutex",p9,p10 -{ .mmf -(p9) ldfe FR_PP_1 = [GR_ad_pp], 16 // Load PP_1_hi if i_1=0 -(p10) ldfe FR_QQ_1 = [GR_ad_qq], 16 // Load QQ_1 if i_1=1 - frcpa.s1 FR_r_hi, p6 = f1, FR_r_hi // r_hi = frpca(frcpa(r)) -} -;; - -{ .mfi -(p9) ldfe FR_PP_4 = [GR_ad_pp], 16 // Load PP_4 if i_1=0 -(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_6 // poly = rsq*poly+PP_6 if i_1=0 - nop.i 999 -} -{ .mfi -(p10) ldfe FR_QQ_4 = [GR_ad_qq], 16 // Load QQ_4 if i_1=1 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_6 // poly = rsq*poly+QQ_6 if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_corr = FR_C_1, FR_rsq, f0 // corr = C_1 * rsq if i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_corr = FR_S_1, FR_r_cubed, FR_r // corr = S_1 * r^3 + r if i_1=1 - nop.i 999 -} -;; - -{ .mfi -(p9) ldfe FR_PP_3 = [GR_ad_pp], 16 // Load PP_3 if i_1=0 - fma.s1 FR_r_hi_sq = FR_r_hi, FR_r_hi, f0 // r_hi_sq = r_hi * r_hi - nop.i 999 -} -{ .mfi -(p10) ldfe FR_QQ_3 = [GR_ad_qq], 16 // Load QQ_3 if i_1=1 - fms.s1 FR_r_lo = FR_r, f1, FR_r_hi // r_lo = r - r_hi - nop.i 999 -} -;; - -{ .mfi -(p9) ldfe FR_PP_2 = [GR_ad_pp], 16 // Load PP_2 if i_1=0 -(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_5 // poly = rsq*poly+PP_5 if i_1=0 - nop.i 999 -} -{ .mfi -(p10) ldfe FR_QQ_2 = [GR_ad_qq], 16 // Load QQ_2 if i_1=1 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_5 // poly = rsq*poly+QQ_5 if i_1=1 - nop.i 999 -} -;; - -{ .mfi -(p9) ldfe FR_PP_1_lo = [GR_ad_pp], 16 // Load PP_1_lo if i_1=0 -(p9) fma.s1 FR_corr = FR_corr, FR_c, FR_c // corr = corr * c + c if i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fnma.s1 FR_corr = FR_corr, FR_c, f0 // corr = -corr * c if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_U_lo = FR_r, FR_r_hi, FR_r_hi_sq // U_lo = r*r_hi+r_hi_sq, i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_U_lo = FR_r_hi, f1, FR_r // U_lo = r_hi + r if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_U_hi = FR_r_hi, FR_r_hi_sq, f0 // U_hi = r_hi*r_hi_sq if i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_U_hi = FR_QQ_1, FR_r_hi_sq, f1 // U_hi = QQ_1*r_hi_sq+1, i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_4 // poly = poly*rsq+PP_4 if i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_4 // poly = poly*rsq+QQ_4 if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_U_lo = FR_r, FR_r, FR_U_lo // U_lo = r * r + U_lo if i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_U_lo = FR_r_lo, FR_U_lo, f0 // U_lo = r_lo * U_lo if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_U_hi = FR_PP_1, FR_U_hi, f0 // U_hi = PP_1 * U_hi if i_1=0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_3 // poly = poly*rsq+PP_3 if i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_3 // poly = poly*rsq+QQ_3 if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_U_lo = FR_r_lo, FR_U_lo, f0 // U_lo = r_lo * U_lo if i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_U_lo = FR_QQ_1,FR_U_lo, f0 // U_lo = QQ_1 * U_lo if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_U_hi = FR_r, f1, FR_U_hi // U_hi = r + U_hi if i_1=0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_2 // poly = poly*rsq+PP_2 if i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, FR_QQ_2 // poly = poly*rsq+QQ_2 if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_U_lo = FR_PP_1, FR_U_lo, f0 // U_lo = PP_1 * U_lo if i_1=0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly = FR_rsq, FR_poly, FR_PP_1_lo // poly =poly*rsq+PP1lo i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, f0 // poly = poly*rsq if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_V = FR_U_lo, f1, FR_corr // V = U_lo + corr - tbit.z p11,p12 = GR_N_Inc, 1 // p11 if i_0=0, N mod 4 = 0,2 - // p12 if i_0=1, N mod 4 = 1,3 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s0 FR_inexact = FR_PP_5, FR_PP_4, f0 // Dummy op to set inexact - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s0 FR_inexact = FR_QQ_5, FR_QQ_5, f0 // Dummy op to set inexact - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly = FR_r_cubed, FR_poly, f0 // poly = poly*r^3 if i_1=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fma.s1 FR_poly = FR_rsq, FR_poly, f0 // poly = poly*rsq if i_1=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p11) fma.s1 FR_tmp_result = f0, f1, f1// tmp_result=+1.0 if i_0=0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p12) fms.s1 FR_tmp_result = f0, f1, f1// tmp_result=-1.0 if i_0=1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_V = FR_poly, f1, FR_V // V = poly + V - nop.i 999 -} -;; - -// If i_0 = 0 Result = U_hi + V -// If i_0 = 1 Result = -U_hi - V -{ .mfi - nop.m 999 -(p11) fma.s0 FR_Result = FR_tmp_result, FR_U_hi, FR_V - nop.i 999 -} -{ .mfb - nop.m 999 -(p12) fms.s0 FR_Result = FR_tmp_result, FR_U_hi, FR_V - br.ret.sptk b0 // Exit for 2^-3 <= |r| < pi/4 -} -;; - -SINCOSL_ZERO: -// Here if x = 0 -{ .mfi - cmp.eq.unc p6, p7 = 0x1, GR_Sin_or_Cos - nop.f 999 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p7) fmerge.s FR_Result = FR_Input_X, FR_Input_X // If sin, result = input - nop.i 999 -} -{ .mfb - nop.m 999 -(p6) fma.s0 FR_Result = f1, f1, f0 // If cos, result=1.0 - br.ret.sptk b0 // Exit for x=0 -} -;; - - -SINCOSL_DENORMAL: -{ .mmb - getf.exp GR_signexp_x = FR_norm_x // Get sign and exponent of x - nop.m 999 - br.cond.sptk SINCOSL_COMMON // Return to common code -} -;; - -SINCOSL_SPECIAL: -{ .mfb - nop.m 999 -// -// Path for Arg = +/- QNaN, SNaN, Inf -// Invalid can be raised. SNaNs -// become QNaNs -// - fmpy.s0 FR_Result = FR_Input_X, f0 - br.ret.sptk b0 ;; -} - -GLOBAL_IEEE754_END(cosl) - -// ******************************************************************* -// ******************************************************************* -// ******************************************************************* -// -// Special Code to handle very large argument case. -// Call int __libm_pi_by_2_reduce(x,r,c) for |arguments| >= 2**63 -// The interface is custom: -// On input: -// (Arg or x) is in f8 -// On output: -// r is in f8 -// c is in f9 -// N is in r8 -// Be sure to allocate at least 2 GP registers as output registers for -// __libm_pi_by_2_reduce. This routine uses r59-60. These are used as -// scratch registers within the __libm_pi_by_2_reduce routine (for speed). -// -// We know also that __libm_pi_by_2_reduce preserves f10-15, f71-127. We -// use this to eliminate save/restore of key fp registers in this calling -// function. -// -// ******************************************************************* -// ******************************************************************* -// ******************************************************************* - -LOCAL_LIBM_ENTRY(__libm_callout) -SINCOSL_ARG_TOO_LARGE: -.prologue -{ .mfi - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -};; - -{ .mmi - setf.exp FR_Two_to_M3 = GR_exp_2_to_m3 // Form 2^-3 - mov GR_SAVE_GP=gp // Save gp -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -// -// Call argument reduction with x in f8 -// Returns with N in r8, r in f8, c in f9 -// Assumes f71-127 are preserved across the call -// -{ .mib - setf.exp FR_Neg_Two_to_M3 = GR_exp_m2_to_m3 // Form -(2^-3) - nop.i 0 - br.call.sptk b0=__libm_pi_by_2_reduce# -};; - -{ .mfi - add GR_N_Inc = GR_Sin_or_Cos,r8 - fcmp.lt.unc.s1 p6, p0 = FR_r, FR_Two_to_M3 - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mfi - mov gp = GR_SAVE_GP // Restore gp -(p6) fcmp.gt.unc.s1 p6, p0 = FR_r, FR_Neg_Two_to_M3 - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs -};; - -{ .mbb - nop.m 999 -(p6) br.cond.spnt SINCOSL_SMALL_R // Branch if |r|< 2^-3 for |x| >= 2^63 - br.cond.sptk SINCOSL_NORMAL_R // Branch if |r|>=2^-3 for |x| >= 2^63 -};; - -LOCAL_LIBM_END(__libm_callout) -.type __libm_pi_by_2_reduce#,@function -.global __libm_pi_by_2_reduce# diff --git a/sysdeps/ia64/fpu/s_erf.S b/sysdeps/ia64/fpu/s_erf.S deleted file mode 100644 index 2ae2874cab..0000000000 --- a/sysdeps/ia64/fpu/s_erf.S +++ /dev/null @@ -1,924 +0,0 @@ -.file "erf.s" - - -// Copyright (c) 2001 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 08/15/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// double erf(double) -// -// Overview of operation -//============================================================== -// Background -// -// -// There are 9 paths: -// 1. x = +/-0.0 -// Return erf(x) = +/-0.0 -// -// 2. 0.0 < |x| < 0.5 -// Return erf(x) = x *Pol9(x^2) -// -// 3. For several subranges of 0.5 <= |x| < 5.90625 -// Return erf(x) = sign(x)*Pol19(y), -// where y = (|x|-b)/a, Pol19(y) = A0 + A1*y^1 + A2*y^2 + ... + A19*y^19 -// -// For each subrange there is particular set of coefficients. -// Below is the list of subranges: -// 3.1 0.5 <= |x| < 1.0 b = a = 0.5 -// 3.2 1.0 <= |x| < 2.0, b = a = 1.0 -// 3.3 2.0 <= |x| < 3.25 b = a = 2.0 -// 3.4 4.0 <= |x| < 5.90625 b = 4.0, a = 2.0 -// -// 4. 3.25 <= |x| < 4.0 -// Return erf(x) = sign(x)*Pol14(|x| - 3.25) -// -// 5. 5.90625 <= |x| < +INF -// Return erf(x) = sign(x)*(1.0d - 2^(-63)) -// -// 6. |x| = INF -// Return erf(x) = sign(x) * 1.0 -// -// 7. x = [S,Q]NaN -// Return erf(x) = QNaN -// -// 8. x is positive denormal -// Return erf(x) = A0*x - x^2, -// where A0 = 2.0/sqrt(Pi) -// -// 9. x is negative denormal -// Return erf(x) = A0*x + x^2, -// where A0 = 2.0/sqrt(Pi) -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input, output -// f32 -> f63 - -// General registers used: -// r32 -> r48, r2, r3 - -// Predicate registers used: -// p0, p6 -> p15 - -// p6 to filter out case when x = denormal -// p7 to filter out case when x = [Q,S]NaN or +/-0, -// used also to process denormals -// p8 to filter out case when 3.25 <= |x| < 4.0, -// used also to process denormals -// p9 to filter out case when |x| = inf -// p10 to filter out case when |x| < 0.5 -// p11 set when |x| < 3.25 or |x| > 4.0 -// p12 to filter out case when |x| >= 5.90625 -// p13 set if 4.0 <=|x| < 5.90625 -// p14 set to 1 for positive x -// p15 set to 1 for negative x - -// Assembly macros -//============================================================== -rDataPtr = r2 -rDataPtr1 = r3 - -rBias = r33 -rCoeffAddr3 = r34 -rThreeAndQ = r35 -rCoeffAddr2 = r36 -rMask = r37 -rArg = r38 -rSignBit = r39 -rAbsArg = r40 -rSaturation = r41 -rIndex = r42 -rCoeffAddr1 = r43 -rCoeffAddr4 = r44 -rShiftedArg = r45 -rShiftedArgMasked = r46 -rBiasedExpOf4 = r47 -rShiftedAbsArg = r48 - -//============================================================== -fA0 = f32 -fA1 = f33 -fA2 = f34 -fA3 = f35 -fA4 = f36 -fA5 = f37 -fA6 = f38 -fA7 = f39 -fA8 = f40 -fA9 = f41 -fA10 = f42 -fA11 = f43 -fA12 = f44 -fA13 = f45 -fA14 = f46 -fA15 = f47 -fA16 = f48 -fA17 = f49 -fA18 = f50 -fA19 = f51 -fArgSqr = f52 -fArgAbsNorm = f53 -fSignumX = f54 -fRes = f55 -fThreeAndQ = f56 -fArgAbs = f57 -fTSqr = f58 -fTQuadr = f59 -fTDeg3 = f60 -fTDeg7 = f61 -fArgAbsNormSgn = f62 -fTQuadrSgn = f63 - -// Data tables -//============================================================== -RODATA - -.align 64 - -LOCAL_OBJECT_START(erf_data) -// Coefficients ##0..15 -// Polynomial coefficients for the erf(x), 0.5 <= |x| < 1.0 -data8 0xB69AC40646D1F6C1, 0x00003FD2 //A19 -data8 0x90AD48C0118FA10C, 0x00003FD7 //A18 -data8 0x826FBAD055EA4AB8, 0x0000BFDB //A17 -data8 0x8DAB171246CC2B89, 0x00003FDC //A16 -data8 0xC0B1D6662F8A7564, 0x00003FDF //A15 -data8 0xA46374AC35099BAF, 0x0000BFE1 //A14 -data8 0xB2F230996346EF27, 0x0000BFE4 //A13 -data8 0xCDEC50950FACE04A, 0x00003FE6 //A12 -data8 0x826014649396E9D2, 0x00003FE9 //A11 -data8 0xCDB787DC718B13F9, 0x0000BFEB //A10 -data8 0x8E0B23C24EE0C8EE, 0x0000BFED //A9 -data8 0xA49EA40A4E5A3F76, 0x00003FF0 //A8 -data8 0xB11E30BE912617D3, 0x00003FF0 //A7 -data8 0xCCF89D9351CE26E3, 0x0000BFF4 //A6 -data8 0xEFF75AD1F0F22809, 0x00003FF2 //A5 -data8 0xBB793EF404C09A22, 0x00003FF8 //A4 -// Polynomial coefficients for the erf(x), 1.0 <= |x| < 2.0 -data8 0xBAE93FF4174EA59B, 0x00003FE6 //A19 -data8 0x8A0FD46092F95D44, 0x0000BFEA //A18 -data8 0xA37B3242B7809E12, 0x00003FEC //A17 -data8 0xA0330A5CD2E91689, 0x0000BFED //A16 -data8 0x8E34A678F3497D17, 0x0000BFEC //A15 -data8 0xAC185D45A2772384, 0x00003FEF //A14 -data8 0xB0C11347CE7EEDE8, 0x00003FEF //A13 -data8 0xD3330DC14EA0E4EB, 0x0000BFF2 //A12 -data8 0xB4A6DFDE578A428F, 0x00003FF1 //A11 -data8 0xA0B4034310D2D9CB, 0x00003FF5 //A10 -data8 0xF71662D3132B7759, 0x0000BFF5 //A9 -data8 0x9C88BF157695E9EC, 0x0000BFF7 //A8 -data8 0xF84B80EFCA43895D, 0x00003FF8 //A7 -data8 0x9722D22DA628A17B, 0x00003FF7 //A6 -data8 0x8DB0A586F8F3381F, 0x0000BFFB //A5 -data8 0x8DB0A5879F87E5BE, 0x00003FFB //A4 -// Polynomial coefficients for the erf(x), 2.0 <= |x| < 3.25 -data8 0x9C4AF1F3A4B21AFC, 0x00003FF6 //A19 -data8 0x8D40D5D5DB741AB8, 0x0000BFF9 //A18 -data8 0xDEBE7099E0A75BA4, 0x00003FFA //A17 -data8 0xB99A33294D32429D, 0x0000BFFB //A16 -data8 0x8109D9C7197BC7C9, 0x00003FFB //A15 -data8 0xC30DE8E2EFC2D760, 0x00003FFA //A14 -data8 0x80DDA28C5B35DC73, 0x0000BFFC //A13 -data8 0x9BE4DE5095BACE0D, 0x00003FF9 //A12 -data8 0xDA4092509EE7D111, 0x00003FFC //A11 -data8 0x89D98C561B0C9040, 0x0000BFFD //A10 -data8 0xD20B26EB2F0881D4, 0x0000BFF9 //A9 -data8 0xD089C56948731561, 0x00003FFD //A8 -data8 0xDD704DEFFB21B7E7, 0x0000BFFD //A7 -data8 0xF0C9A6BBDE469115, 0x00003FF9 //A6 -data8 0xD673A02CB5766633, 0x00003FFD //A5 -data8 0x8D162CBAD8A12649, 0x0000BFFE //A4 -// Polynomial coefficients for the erf(x), 4.0 <= |x| < 6.0 -data8 0xD4428B75C6FE8FD1, 0x0000BFFC //A19 -data8 0xF76BE1935675D5C8, 0x00003FFE //A18 -data8 0xFD6BB3B14AA7A8E6, 0x0000BFFF //A17 -data8 0x8BE8F573D348DDA4, 0x00004000 //A16 -data8 0x81E91923A1030502, 0x0000BFFF //A15 -data8 0xCE7FE87B26CFD286, 0x0000BFFE //A14 -data8 0x84EF6B4E17404384, 0x00004000 //A13 -data8 0x91FEF33015404991, 0x0000C000 //A12 -data8 0xDEDF6A9370747E56, 0x00003FFF //A11 -data8 0x8397E6FF56CDFD9D, 0x0000BFFF //A10 -data8 0xFAD1CE912473937B, 0x00003FFD //A9 -data8 0xC48C1EA8AAA624EA, 0x0000BFFC //A8 -data8 0xFECAF0097ACF981B, 0x00003FFA //A7 -data8 0x8829A394065E4B95, 0x0000BFF9 //A6 -data8 0xED3003E477A53EE7, 0x00003FF6 //A5 -data8 0xA4C07E9BB3FCB0F3, 0x0000BFF4 //A4 -// -// Coefficients ##16..19 -// Polynomial coefficients for the erf(x), 0.5 <= |x| < 1.0 -data8 0x95FA98C337005D13, 0x0000BFF9 //A3 -data8 0xE0F7E524D2808A97, 0x0000BFFB //A2 -data8 0xE0F7E524D2808A98, 0x00003FFD //A1 -data8 0x853F7AE0C76E915F, 0x00003FFE //A0 -// Polynomial coefficients for the erf(x), 1.0 <= |x| < 2.0 -data8 0x8DB0A587A96ABCF0, 0x00003FFC //A3 -data8 0xD488F84B7DE18DA8, 0x0000BFFD //A2 -data8 0xD488F84B7DE12E9C, 0x00003FFD //A1 -data8 0xD7BB3D3A08445636, 0x00003FFE //A0 -// Polynomial coefficients for the erf(x), 2.0 <= |x| < 3.25 -data8 0xC58571D23D5C4B3A, 0x00003FFD //A3 -data8 0xA94DCF467CD6AFF3, 0x0000BFFC //A2 -data8 0xA94DCF467CD10A16, 0x00003FFA //A1 -data8 0xFECD70A13CAF1997, 0x00003FFE //A0 -// Polynomial coefficients for the erf(x), 4.0 <= |x| < 6.0 -data8 0xB01D2B4F0D5AB8B0, 0x00003FF1 //A3 -data8 0x8858A465CE594BD1, 0x0000BFEE //A2 -data8 0x8858A447456DE61D, 0x00003FEA //A1 -data8 0xFFFFFFBDC88BB107, 0x00003FFE //A0 -// Polynomial coefficients for the erf(x), 0.0 <= |x| < 0.5 -data8 0xBE839EDBB36C7FCE //A9 -data8 0x3EBB7745A18DD242 //A8 -data8 0xBF4C02DB238F2AFC //A5 -data8 0x3F7565BCD0A9A3EA //A4 -data8 0xC093A3581BCF3333, 0x0000BFFD //A1 -data8 0xBEEF4BB82AD8AE22 //A7 -data8 0x3F1F9A2A57A218CD //A6 -data8 0xBF9B82CE3127F4E4 //A3 -data8 0x3FBCE2F21A042B25 //A2 -data8 0x906EBA8214DB688D, 0x00003FFF //A0 -// 1.0 - 2^(-63) -data8 0xFFFFFFFFFFFFFFFF, 0x00003FFE -// Polynomial coefficients for the erf(x), 3.25 <= |x| < 4.0 -data8 0x95E91576C7A12250, 0x00003FE7 //A14 -data8 0x8E5E0D0E1F5D3CB5, 0x0000BFEA //A13 -data8 0xED761DAFAF814DE9, 0x00003FEB //A12 -data8 0xB3A77D921D0ACFC7, 0x0000BFEC //A11 -data8 0xA662D27096B08D7C, 0x0000BFEC //A10 -data8 0xDA0F410AE6233EA5, 0x00003FEF //A9 -data8 0xAB4A8B16B3124327, 0x0000BFF1 //A8 -data8 0xB241E236A5EDCED3, 0x00003FF2 //A7 -data8 0x8A2A65BA1F551F77, 0x0000BFF3 //A6 -data8 0xA4852D0B1D87000A, 0x00003FF3 //A5 -data8 0x963EB00039489476, 0x0000BFF3 //A4 -data8 0xCD5244FF4F7313A5, 0x00003FF2 //A3 -data8 0xC6F1E695363BCB26, 0x0000BFF1 //A2 -data8 0xF4DAF4680DA54C02, 0x00003FEF //A1 -data8 0xFFFFB7CFB3F2ABBE, 0x00003FFE //A0 -// A = 2.0/sqrt(Pi) -data8 0x906EBA8214DB688D, 0x00003FFF -LOCAL_OBJECT_END(erf_data) - - -.section .text -GLOBAL_LIBM_ENTRY(erf) - -{ .mfi - alloc r32 = ar.pfs, 0, 17, 0, 0 - fmerge.se fArgAbsNorm = f1, f8 // normalized x - adds rSignBit = 0x1, r0 -} -{ .mfi - addl rDataPtr = @ltoff(erf_data), gp - fma.s1 fArgSqr = f8, f8, f0 // x^2 - addl rThreeAndQ = 0x400A0, r0 // shifted bits of 3.25 -} -;; -{ .mfi - getf.d rArg = f8 // x in GR - fclass.m p6,p0 = f8, 0x0b // is x denormal ? - shl rThreeAndQ = rThreeAndQ, 44 // bits of 3.25 -} -{ .mfi - ld8 rDataPtr = [rDataPtr] - nop.f 0 - addl rBiasedExpOf4 = 0x40100, r0 // shifted bits of 4.0 -} -;; -{ .mfi - addl rSaturation = 0x4017A, r0 // shifted bits of 5.90625 - fclass.m p7,p0 = f8, 0xc7 // is x [S,Q]NaN or +/-0 ? - shl rSignBit = rSignBit, 63 // mask for sign bit -} -{ .mfi - addl rMask = 0x7FF00, r0 // Mask for index bits - nop.f 0 - addl rBias = 0x3FE00, r0 // bias of 0.5 << 8 -} -;; -{ .mfi - setf.d fThreeAndQ = rThreeAndQ // 3.25 if FP register - fclass.m p9,p0 = f8, 0x23 // is x +/- inf? - shr.u rShiftedArg = rArg, 44 -} -{ .mfb - andcm rAbsArg = rArg, rSignBit // |x| in GR - nop.f 0 -(p6) br.cond.spnt erf_denormal // branch out if x is denormal -} -;; -{ .mfi - and rShiftedArgMasked = rShiftedArg, rMask // bias of x << 8 - fmerge.s fArgAbs = f1, f8 // |x| - shr rShiftedAbsArg = rAbsArg, 44 -} -{ .mfb - cmp.lt p8, p11 = rThreeAndQ, rAbsArg // p8 = 1 if |x| >= 3.25 -(p7) fma.d.s0 f8 = f8,f1,f8 // NaN or +/-0 -(p7) br.ret.spnt b0 // exit for x = NaN or +/-0 -} -;; -{ .mfi - sub rIndex = rShiftedArgMasked, rBias // index << 8 - nop.f 0 - cmp.lt p10, p0 = rShiftedArgMasked, rBias // p10 = 1 if |x| < 0.5 -} -{ .mfb - // p8 = 1 if 3.25 <= |x| < 4.0 -(p8) cmp.lt p8, p11 = rShiftedAbsArg, rBiasedExpOf4 - fms.s1 fArgAbsNorm = fArgAbsNorm, f1, f1 -(p10) br.cond.spnt erf_near_zero // branch out if |x| < 0.5 -} -;; -.pred.rel "mutex", p8, p11 -{ .mfi -(p8) adds rCoeffAddr1 = 1392, rDataPtr // coeff. for 3.25 <=|x|<4.0 -(p9) fmerge.s f8 = f8,f1 // +/- inf - nop.i 0 -} -{ .mfb -(p11) add rCoeffAddr1 = rDataPtr, rIndex// coeff. ##0,2,..14 - nop.f 0 -(p9) br.ret.spnt b0 // exit for x = +/- inf -} -;; -{ .mfi - adds rCoeffAddr2 = 16, rCoeffAddr1 - fmerge.s fSignumX = f8, f1 // signum(x) - nop.i 0 -} -{ .mfb - cmp.lt p12, p0 = rSaturation, rShiftedAbsArg // |x| > 5.90625? - nop.f 0 -(p12) br.cond.spnt erf_saturation // branch out if x |x| >= 6.0 -} -;; -// Here if paths #3,4 -// if path #4 we'll branch out after loading of 14 necessary coefficients -{.mfi - ldfe fA19 = [rCoeffAddr1], 32 - nop.f 0 - nop.i 0 -} -{.mfi - ldfe fA18 = [rCoeffAddr2], 32 - nop.f 0 - adds rCoeffAddr3 = 1024, rDataPtr -} -;; -{.mfi - ldfe fA17 = [rCoeffAddr1], 32 - nop.f 0 - nop.i 0 -} -{.mfi - ldfe fA16 = [rCoeffAddr2], 32 - nop.f 0 - nop.i 0 -} -;; -{.mfi - ldfe fA15 = [rCoeffAddr1], 32 - fma.s1 fTSqr = fArgAbsNorm, fArgAbsNorm, f0 - shr.u rIndex = rIndex, 2 -} -{.mfi - ldfe fA14 = [rCoeffAddr2], 32 - nop.f 0 - adds rCoeffAddr4 = 16, r0 -} -;; -{.mfi - ldfe fA13 = [rCoeffAddr1], 32 - nop.f 0 - // address of coefficients ##16..23 - add rCoeffAddr3 = rCoeffAddr3, rIndex -} -{.mfi - ldfe fA12 = [rCoeffAddr2], 32 - nop.f 0 - cmp.lt p15, p14 = rArg, r0 -} -;; -{.mfi - ldfe fA11 = [rCoeffAddr1], 32 - nop.f 0 - add rCoeffAddr4 = rCoeffAddr3, rCoeffAddr4 -} -{.mfi - ldfe fA10 = [rCoeffAddr2], 32 - nop.f 0 - nop.i 0 -} -;; -{.mfi - ldfe fA9 = [rCoeffAddr1], 32 - nop.f 0 - nop.i 0 -} -{.mfi - ldfe fA8 = [rCoeffAddr2], 32 - nop.f 0 - nop.i 0 -} -;; -{.mfi - ldfe fA7 = [rCoeffAddr1], 32 - fms.s1 fArgAbs = fArgAbs, f1, fThreeAndQ - nop.i 0 -} -{.mfb - ldfe fA6 = [rCoeffAddr2], 32 - nop.f 0 -(p8) br.cond.spnt erf_3q_4 // branch out if 3.25 < |x| < 4.0 -} -;; -{.mfi - ldfe fA5 = [rCoeffAddr1], 32 - fma.s1 fTDeg3 = fArgAbsNorm, fTSqr, f0 - nop.i 0 -} -{.mfi - ldfe fA4 = [rCoeffAddr2], 32 - fma.s1 fTQuadr = fTSqr, fTSqr, f0 - nop.i 0 -} -;; -// Path #3 Polynomial Pol19(y) computation; y = fArgAbsNorm -{.mfi - ldfe fA3 = [rCoeffAddr3], 32 - fma.s1 fArgAbsNormSgn = fArgAbsNorm, fSignumX, f0 - nop.i 0 -} -{.mfi - ldfe fA2 = [rCoeffAddr4], 32 - nop.f 0 - nop.i 0 -} -;; -{.mfi - ldfe fA1 = [rCoeffAddr3], 32 - fma.s1 fRes = fA19, fArgAbsNorm, fA18 - nop.i 0 -} -{.mfi - ldfe fA0 = [rCoeffAddr4], 32 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA17 = fA17, fArgAbsNorm, fA16 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA15 = fA15, fArgAbsNorm, fA14 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fTDeg7 = fTDeg3, fTQuadr, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA13 = fA13, fArgAbsNorm, fA12 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA11 = fA11, fArgAbsNorm, fA10 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA9 = fA9, fArgAbsNorm, fA8 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTSqr, fA17 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA7 = fA7, fArgAbsNorm, fA6 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA5 = fA5, fArgAbsNorm, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA15 = fA15, fTSqr, fA13 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA4 = fA4, fArgAbsNorm, fA3 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA2 = fA2, fArgAbsNorm, fA1 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA11 = fA11, fTSqr, fA9 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA7 = fA7, fTSqr, fA5 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTQuadr, fA15 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA4 = fA4, fTSqr, fA2 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTQuadr, fA11 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA4 = fA7, fTDeg3, fA4 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTDeg7, fA4 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // result for negative argument -(p15) fms.d.s0 f8 = fRes, fArgAbsNormSgn, fA0 - nop.i 0 -} -{ .mfb - nop.m 0 - // result for positive argument -(p14) fma.d.s0 f8 = fRes, fArgAbsNormSgn, fA0 - br.ret.sptk b0 -} - -// Here if 3.25 < |x| < 4.0 -.align 32 -erf_3q_4: -.pred.rel "mutex", p14, p15 -{ .mfi - ldfe fA5 = [rCoeffAddr1], 32 - fma.s1 fTSqr = fArgAbs, fArgAbs, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fRes = fA19, fArgAbs, fA18 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA17 = fA17, fArgAbs, fA16 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA15 = fA15, fArgAbs, fA14 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA13 = fA13, fArgAbs, fA12 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA11 = fA11, fArgAbs, fA10 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA9 = fA9, fArgAbs, fA8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fArgAbsNormSgn = fArgAbs, fSignumX, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fTQuadr = fTSqr, fTSqr, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTSqr, fA17 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA15 = fA15, fTSqr, fA13 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA11 = fA11, fTSqr, fA9 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA7 = fA7, fArgAbs, fA6 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fTDeg7 = fTQuadr, fTSqr, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTQuadr, fA15 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA11 = fA11, fTSqr, fA7 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTDeg7, fA11 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - // result for negative argument -(p15) fms.d.s0 f8 = fRes, fArgAbsNormSgn, fA5 - nop.i 0 -} -{ .mfb - nop.m 0 - // result for positive argument -(p14) fma.d.s0 f8 = fRes, fArgAbsNormSgn, fA5 - br.ret.sptk b0 -} -;; - -// Here if |x| < 0.5 -.align 32 -erf_near_zero: -{ .mfi - adds rCoeffAddr1 = 1280, rDataPtr // address of A9 - fma.s1 fTSqr = fArgSqr, fArgSqr, f0 // x^4 - nop.i 0 -} -{ .mfi - adds rCoeffAddr2 = 1328, rDataPtr // address of A7 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA9, fA8 = [rCoeffAddr1], 16 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfpd fA7, fA6 = [rCoeffAddr2], 16 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfpd fA5, fA4 = [rCoeffAddr1], 16 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfpd fA3, fA2 = [rCoeffAddr2], 16 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfe fA1 = [rCoeffAddr1] - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe fA0 = [rCoeffAddr2] - nop.f 0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fTQuadr = fTSqr, fTSqr, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes = fA9, fArgSqr, fA8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA7 = fA7, fArgSqr, fA6 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA3 = fA3, fArgSqr, fA2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA5 = fA5, fArgSqr, fA4 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA1 = fA1, fArgSqr, fA0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fTQuadrSgn = fTQuadr, f8, f0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTSqr, fA7 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA1 = fA3, fTSqr, fA1 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTSqr, fA5 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA1 = fA1, f8, f0 - nop.i 0 -} -;; -{ .mfb - nop.m 0 - fma.d.s0 f8 = fRes, fTQuadrSgn, fA1 // x*Pol9(x^2) - br.ret.sptk b0 // Exit for |x| < 0.5 -};; - -// Here if 5.90625 <= |x| < +inf -.align 32 -erf_saturation: -{ .mfi - adds rDataPtr = 1376, rDataPtr // address of A0 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - ldfe fA0 = [rDataPtr] - nop.f 0 - nop.i 0 -} -;; -{ .mfb - nop.m 0 - fma.d.s0 f8 = fA0, fSignumX, f0 // sign(x)*(1.0 - 2^(-63)) - // Exit for 5.90625 <= |x| < +inf - br.ret.sptk b0 // Exit for 5.90625 <=|x|< +inf -} -;; - -// Here if x is double precision denormal -.align 32 -erf_denormal: -{ .mfi - adds rDataPtr = 1632, rDataPtr // address of A0 - fclass.m p7,p8 = f8, 0x0a // is x -denormal ? - nop.i 0 -} -;; -{ .mfi - ldfe fA0 = [rDataPtr] // A0 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fA0 = fA0,f8,f0 // A0*x - nop.i 0 -} -;; -{ .mfi - nop.m 0 -(p7) fma.d.s0 f8 = f8,f8,fA0 // -denormal - nop.i 0 -} -{ .mfb - nop.m 0 -(p8) fnma.d.s0 f8 = f8,f8,fA0 // +denormal - br.ret.sptk b0 // Exit for denormal -} -;; - -GLOBAL_LIBM_END(erf) diff --git a/sysdeps/ia64/fpu/s_erfc.S b/sysdeps/ia64/fpu/s_erfc.S deleted file mode 100644 index cd26545264..0000000000 --- a/sysdeps/ia64/fpu/s_erfc.S +++ /dev/null @@ -1,1196 +0,0 @@ -.file "erfc.s" - - -// Copyright (c) 2001 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 11/12/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// double erfc(double) -// -// Overview of operation -//============================================================== -// 1. 0 <= x <= 28.0 -// -// erfc(x) = P14(z) * exp( -x^2 ), z = x - x(i). -// -// Comment: -// -// Let x(i) = -1.0 + 2^(i/4),i=0,...19. So we have 20 unequal -// argument intervals [x(i),x(i+1)] with length ratio q = 2^(1/4). -// Values x(i) we have in the table erfc_xb_table. -// -// Let x(i)<= x < x(i+1). -// We can find i as exponent of number (x + 1)^4. -// -// Let P14(z) - polynomial approximation of degree 14 for function -// erfc(z+x(i)) * exp( (z+x(i))^2) and 0 <= z <= x(i+1)-x(i). -// Polynomial coefficients we have in the table erfc_p_table. -// -// So we can find result for erfc(x) as above. -// Algorithm description for exp function see below. -// -// 2. -6 <= x < 0 -// -// erfc(x) = 2.0 - erfc(-x) -// -// 3. x > 28.0 -// erfc(x) ~=~ 0.0 -// -// 4. x < -6.0 -// erfc(x) ~=~ 2.0 - -// Special values -//============================================================== -// erfc(+0) = 1.0 -// erfc(-0) = 1.0 - -// erfc(+qnan) = +qnan -// erfc(-qnan) = -qnan -// erfc(+snan) = +qnan -// erfc(-snan) = -qnan - -// erfc(-inf) = 2.0 -// erfc(+inf) = +0 - -//============================================================== -// Take double exp(double) from libm_64. -// -// Overview of operation -//============================================================== -// Take the input x. w is "how many log2/128 in x?" -// w = x * 128/log2 -// n = int(w) -// x = n log2/128 + r + delta - -// n = 128M + index_1 + 2^4 index_2 -// x = M log2 + (log2/128) index_1 + (log2/8) index_2 + r + delta - -// exp(x) = 2^M 2^(index_1/128) 2^(index_2/8) exp(r) exp(delta) -// Construct 2^M -// Get 2^(index_1/128) from table_1; -// Get 2^(index_2/8) from table_2; -// Calculate exp(r) by series -// r = x - n (log2/128)_high -// delta = - n (log2/128)_low -// Calculate exp(delta) as 1 + delta -//============================================================== -// Comment for exp for erfc: -// -// We use quad precision for calculate input argument -x^2 and add -// result low bits to value delta in exp. - -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f9 -> f15, f32 -> f93 - -// General registers used: -// r32 -> r68 - -// Predicate registers used: -// p6 -> p15 - -// Assembly macros -//============================================================== - -exp_GR_rshf = r33 -EXP_AD_TB1 = r34 -EXP_AD_TB2 = r35 -EXP_AD_P = r36 -exp_GR_N = r37 -exp_GR_index_1 = r38 -exp_GR_index_2_16 = r39 -exp_GR_biased_M = r40 -EXP_AD_T1 = r41 -EXP_AD_T2 = r42 -exp_GR_sig_inv_ln2 = r43 -exp_GR_17ones = r44 -exp_TB1_size = r45 -exp_TB2_size = r46 -exp_GR_rshf_2to56 = r47 -exp_GR_exp_2tom56 = r48 - -// GR for erfc(x) -//============================================================== -GR_POS_ARG_ASYMP = r49 -GR_NEG_ARG_ASYMP = r50 -GR_ARG_ASYMP = r51 -GR_ERFC_XB_TB = r52 -GR_ERFC_P_TB = r53 -GR_IndxPlusBias = r54 -GR_BIAS = r55 -GR_P_A12 = r56 -GR_P_A13 = r57 -GR_AbsArg = r58 -GR_ShftXBi = r59 -GR_ShftPi = r60 -GR_mBIAS = r61 -GR_ShftPi_bias = r62 -GR_ShftXBi_bias = r63 -GR_ShftA12 = r64 -GR_ShftA13 = r65 -GR_EpsNorm = r66 -GR_0x1 = r67 -GR_ShftPi_8 = r68 - -// GR for __libm_support call - -//============================================================== - -GR_SAVE_B0 = r61 -GR_SAVE_PFS = r62 -GR_SAVE_GP = r63 -GR_SAVE_SP = r64 - -GR_Parameter_X = r65 -GR_Parameter_Y = r66 -GR_Parameter_RESULT = r67 -GR_Parameter_TAG = r68 - - -// FR for exp(-x^2) -//============================================================== -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - -EXP_2TOM56 = f6 -EXP_INV_LN2_2TO63 = f7 -EXP_W_2TO56_RSH = f9 -EXP_RSHF_2TO56 = f10 - -exp_P4 = f11 -exp_P3 = f12 -exp_P2 = f13 -exp_P1 = f14 -exp_ln2_by_128_hi = f15 - -exp_ln2_by_128_lo = f32 -EXP_RSHF = f33 -EXP_Nfloat = f34 -exp_r = f35 -exp_f = f36 -exp_rsq = f37 -exp_rcube = f38 -EXP_2M = f39 -exp_S1 = f40 -exp_T1 = f41 -exp_rP4pP3 = f42 -exp_P_lo = f43 -exp_P_hi = f44 -exp_P = f45 -exp_S = f46 -EXP_NORM_f8 = f47 -exp_S2 = f48 -exp_T2 = f49 - -// FR for erfc(x) -//============================================================== -FR_AbsArg = f50 -FR_Tmp = f51 -FR_Xb = f52 -FR_A0 = f53 -FR_A1 = f54 -FR_A2 = f55 -FR_A3 = f56 -FR_A4 = f57 -FR_A5 = f58 -FR_A6 = f59 -FR_A7 = f60 -FR_A8 = f61 -FR_A9 = f62 -FR_A10 = f63 -FR_A11 = f64 -FR_A12 = f65 -FR_A13 = f66 -FR_A14 = f67 - -FR_P14_0_1 = f68 -FR_P14_0_2 = f69 -FR_P14_1_1 = f70 -FR_P14_1_2 = f71 -FR_P14_2_1 = f72 -FR_P14_2_2 = f73 -FR_P14_3_1 = f74 -FR_P14_3_2 = f75 -FR_P14_6_1 = f76 - -FR_P14_7_1 = f77 -FR_P14_7_2 = f78 -FR_P14_8_1 = f79 -FR_P14_8_2 = f80 -FR_P14_12_1 = f81 -FR_P14_13_1 = f82 -FR_P14_13_2 = f83 -FR_Pol = f84 -FR_Exp = f85 -FR_2 = f86 -f8_sq_lo = f87 -FR_LocArg = f88 -FR_Tmpf = f89 -FR_Tmp1 = f90 -FR_EpsNorm = f91 -FR_UnfBound = f92 -FR_NormX = f93 - - -// Data tables -//============================================================== -RODATA -.align 16 - -// ************* DO NOT CHANGE ORDER OF THESE TABLES ******************** - -LOCAL_OBJECT_START(exp_table_1) - -data8 0x403a8b12fc6e4892 , 0 // underflow boundary -data8 0xb17217f7d1cf79ab , 0x00003ff7 // ln2/128 hi -data8 0xc9e3b39803f2f6af , 0x00003fb7 // ln2/128 lo -// -// Table 1 is 2^(index_1/128) where -// index_1 goes from 0 to 15 -// -data8 0x8000000000000000 , 0x00003FFF -data8 0x80B1ED4FD999AB6C , 0x00003FFF -data8 0x8164D1F3BC030773 , 0x00003FFF -data8 0x8218AF4373FC25EC , 0x00003FFF -data8 0x82CD8698AC2BA1D7 , 0x00003FFF -data8 0x8383594EEFB6EE37 , 0x00003FFF -data8 0x843A28C3ACDE4046 , 0x00003FFF -data8 0x84F1F656379C1A29 , 0x00003FFF -data8 0x85AAC367CC487B15 , 0x00003FFF -data8 0x8664915B923FBA04 , 0x00003FFF -data8 0x871F61969E8D1010 , 0x00003FFF -data8 0x87DB357FF698D792 , 0x00003FFF -data8 0x88980E8092DA8527 , 0x00003FFF -data8 0x8955EE03618E5FDD , 0x00003FFF -data8 0x8A14D575496EFD9A , 0x00003FFF -data8 0x8AD4C6452C728924 , 0x00003FFF -LOCAL_OBJECT_END(exp_table_1) - -// Table 2 is 2^(index_1/8) where -// index_2 goes from 0 to 7 -LOCAL_OBJECT_START(exp_table_2) -data8 0x8000000000000000 , 0x00003FFF -data8 0x8B95C1E3EA8BD6E7 , 0x00003FFF -data8 0x9837F0518DB8A96F , 0x00003FFF -data8 0xA5FED6A9B15138EA , 0x00003FFF -data8 0xB504F333F9DE6484 , 0x00003FFF -data8 0xC5672A115506DADD , 0x00003FFF -data8 0xD744FCCAD69D6AF4 , 0x00003FFF -data8 0xEAC0C6E7DD24392F , 0x00003FFF -LOCAL_OBJECT_END(exp_table_2) - -LOCAL_OBJECT_START(exp_p_table) -data8 0x3f8111116da21757 //P_4 -data8 0x3fa55555d787761c //P_3 -data8 0x3fc5555555555414 //P_2 -data8 0x3fdffffffffffd6a //P_1 -LOCAL_OBJECT_END(exp_p_table) - -LOCAL_OBJECT_START(erfc_xb_table) -data8 0x0000000000000000, 0x00000000 //XB[0] = +0.00000000000000000000e-01L -data8 0xC1BF828C6DC54B7A, 0x00003FFC //XB[1] = +1.89207115002721066717e-01L -data8 0xD413CCCFE7799211, 0x00003FFD //XB[2] = +4.14213562373095048802e-01L -data8 0xAE89F995AD3AD5E8, 0x00003FFE //XB[3] = +6.81792830507429086062e-01L -data8 0x8000000000000000, 0x00003FFF //XB[4] = +1.00000000000000000000e+00L -data8 0xB06FE0A31B7152DF, 0x00003FFF //XB[5] = +1.37841423000544213343e+00L -data8 0xEA09E667F3BCC909, 0x00003FFF //XB[6] = +1.82842712474619009760e+00L -data8 0x9744FCCAD69D6AF4, 0x00004000 //XB[7] = +2.36358566101485817212e+00L -data8 0xC000000000000000, 0x00004000 //XB[8] = +3.00000000000000000000e+00L -data8 0xF06FE0A31B7152DF, 0x00004000 //XB[9] = +3.75682846001088426687e+00L -data8 0x9504F333F9DE6484, 0x00004001 //XB[10] = +4.65685424949238019521e+00L -data8 0xB744FCCAD69D6AF4, 0x00004001 //XB[11] = +5.72717132202971634425e+00L -data8 0xE000000000000000, 0x00004001 //XB[12] = +7.00000000000000000000e+00L -data8 0x8837F0518DB8A96F, 0x00004002 //XB[13] = +8.51365692002176853374e+00L -data8 0xA504F333F9DE6484, 0x00004002 //XB[14] = +1.03137084989847603904e+01L -data8 0xC744FCCAD69D6AF4, 0x00004002 //XB[15] = +1.24543426440594326885e+01L -data8 0xF000000000000000, 0x00004002 //XB[16] = +1.50000000000000000000e+01L -data8 0x9037F0518DB8A96F, 0x00004003 //XB[17] = +1.80273138400435370675e+01L -data8 0xAD04F333F9DE6484, 0x00004003 //XB[18] = +2.16274169979695207808e+01L -data8 0xCF44FCCAD69D6AF4, 0x00004003 //XB[19] = +2.59086852881188653770e+01L -LOCAL_OBJECT_END(erfc_xb_table) - -LOCAL_OBJECT_START(erfc_p_table) - -// Pol0 -data8 0x8000000000000000, 0x00003FFF //A0 = +1.00000000000000000000e+00L -data8 0x906EBA8214DB688D, 0x0000BFFF //A1 = -1.12837916709551257389e+00L -data8 0xFFFFFFFFFFFFFFEB, 0x00003FFE //A2 = +9.99999999999999998841e-01L -data8 0xC093A3581BCF2925, 0x0000BFFE //A3 = -7.52252778063674869885e-01L -data8 0xFFFFFFFFFFF7CDBD, 0x00003FFD //A4 = +4.99999999999985440383e-01L -data8 0x9A0FB5E014AE3EFB, 0x0000BFFD //A5 = -3.00901111224757482205e-01L -data8 0xAAAAAAAA4672B0BD, 0x00003FFC //A6 = +1.66666666643879582201e-01L -data8 0xB011F45C9F590FC0, 0x0000BFFB //A7 = -8.59717455640916223912e-02L -data8 0xAAAAA89474161033, 0x00003FFA //A8 = +4.16666588928413935202e-02L -data8 0x9C818E2CE37D4214, 0x0000BFF9 //A9 = -1.91047455656271634308e-02L -data8 0x8885969315AB76A1, 0x00003FF8 //A10 = +8.33263115449753085659e-03L -data8 0xE36112A686F5165B, 0x0000BFF6 //A11 = -3.46953111013788405745e-03L -data8 0xB3DD6B2DB3307D2E, 0x00003FF5 //A12 = +1.37226041156280127011e-03L -data8 0x8018A34267FED226, 0x0000BFF4 //A13 = -4.88648380816410282971e-04L -data8 0xFBBA6A7AEBD3ABD9, 0x00003FF1 //A14 = +1.20033353451879025825e-04L -// Pol1 -data8 0xD15A1EF03BB91E71, 0x00003FFE //A0 = +8.17781385088640600540e-01L -data8 0xD1A4ADDAC3337118, 0x0000BFFE //A1 = -8.18919053944410683867e-01L -data8 0xA9AF9FFA2AD18CB0, 0x00003FFE //A2 = +6.62836073471060947628e-01L -data8 0xECB77514F0F151B3, 0x0000BFFD //A3 = -4.62337168508812580002e-01L -data8 0x934AB35EA5CD5EEB, 0x00003FFD //A4 = +2.87679295829458273854e-01L -data8 0xA71410A68C1EF21C, 0x0000BFFC //A5 = -1.63162479558223113104e-01L -data8 0xAF506A335238094A, 0x00003FFB //A6 = +8.56025978958108330224e-02L -data8 0xABFDF67F968765A7, 0x0000BFFA //A7 = -4.19902447551140139048e-02L -data8 0x9F0B0165A6CDCA99, 0x00003FF9 //A8 = +1.94144274984979538382e-02L -data8 0x8B8197BFC346CDEA, 0x0000BFF8 //A9 = -8.51478404279186775501e-03L -data8 0xE950D763FE51AB1E, 0x00003FF6 //A10 = +3.56011637267641495904e-03L -data8 0xBA821A59FC05FBAD, 0x0000BFF5 //A11 = -1.42294475244146555952e-03L -data8 0x8D535042E11A0D89, 0x00003FF4 //A12 = +5.39113782651680545599e-04L -data8 0xBE589447DB26564E, 0x0000BFF2 //A13 = -1.81528103431449706486e-04L -data8 0xABC8C7EF636F5B0A, 0x00003FF0 //A14 = +4.09565689009869217620e-05L -// Pol2 -data8 0xA9973ABB272898B2, 0x00003FFE //A0 = +6.62463827792779356910e-01L -data8 0x945F1A7993F7AADD, 0x0000BFFE //A1 = -5.79576162988785154930e-01L -data8 0xD84439C6609A8A62, 0x00003FFD //A2 = +4.22395520654665085222e-01L -data8 0x8A1BBAA7E9CB8C52, 0x0000BFFD //A3 = -2.69742806431984313298e-01L -data8 0x9F0F67364B466975, 0x00003FFC //A4 = +1.55332195938916594663e-01L -data8 0xA843F180287DAF7F, 0x0000BFFB //A5 = -8.21608416782158837025e-02L -data8 0xA59D71B7C690E545, 0x00003FFA //A6 = +4.04333536247671644540e-02L -data8 0x991A733518C74874, 0x0000BFF9 //A7 = -1.86893701691354422481e-02L -data8 0x85E7F91148F9F6D2, 0x00003FF8 //A8 = +8.17298243522623724858e-03L -data8 0xDEE0607CC9D6777E, 0x0000BFF6 //A9 = -3.40082507754089306495e-03L -data8 0xB145D2CC470B306B, 0x00003FF5 //A10 = +1.35248373238824318949e-03L -data8 0x86FAEBB4438A20FA, 0x0000BFF4 //A11 = -5.14908443679775343409e-04L -data8 0xC2503856CE48A657, 0x00003FF2 //A12 = +1.85311660448280465934e-04L -data8 0xF52642F22A26965B, 0x0000BFF0 //A13 = -5.84481856856861454591e-05L -data8 0xC98588E1A95FFDBD, 0x00003FEE //A14 = +1.20116245684500489648e-05L -// Pol3 -data8 0x887CBA2C47B1E2B5, 0x00003FFE //A0 = +5.33153186617432643784e-01L -data8 0xCD81909CF194328E, 0x0000BFFD //A1 = -4.01379126699602646289e-01L -data8 0x84DCA15C52122372, 0x00003FFD //A2 = +2.59495775718310530164e-01L -data8 0x993AA9C76AD28157, 0x0000BFFC //A3 = -1.49637844845261107836e-01L -data8 0xA140CD8A96FADBA5, 0x00003FFB //A4 = +7.87368829650154013961e-02L -data8 0x9D36B25E76E56EEA, 0x0000BFFA //A5 = -3.83822410143975630292e-02L -data8 0x8F8BCC2C0536ECD3, 0x00003FF9 //A6 = +1.75227153523910189727e-02L -data8 0xF77EDC644BA17AF9, 0x0000BFF7 //A7 = -7.55296479527793552675e-03L -data8 0xCAB8AC76793C1151, 0x00003FF6 //A8 = +3.09328279988546711083e-03L -data8 0x9E8FCBC793D555AF, 0x0000BFF5 //A9 = -1.20972979110659888616e-03L -data8 0xEDC1328664A0CE79, 0x00003FF3 //A10 = +4.53481058502015766058e-04L -data8 0xAAE3CAAB9D117591, 0x0000BFF2 //A11 = -1.62973223928790256249e-04L -data8 0xE7704D06A3080C19, 0x00003FF0 //A12 = +5.51792801195012080688e-05L -data8 0x875A5B53E510F305, 0x0000BFEF //A13 = -1.61353297293572230995e-05L -data8 0xC8F10CDDB9CC9A42, 0x00003FEC //A14 = +2.99426321046583353559e-06L -// Pol4 -data8 0xDAEC3C07CAB590C1, 0x00003FFD //A0 = +4.27583576155807004411e-01L -data8 0x8BE271F8BE0280AC, 0x0000BFFD //A1 = -2.73212014783898564863e-01L -data8 0x9E13941E19661429, 0x00003FFC //A2 = +1.54371561371908397882e-01L -data8 0xA241BFC48377449D, 0x0000BFFB //A3 = -7.92269689413235358504e-02L -data8 0x99E56877AD00D1AE, 0x00003FFA //A4 = +3.75722962151600767952e-02L -data8 0x887E78DA3BA57C80, 0x0000BFF9 //A5 = -1.66618690872055148862e-02L -data8 0xE465CAA9F4D54FD8, 0x00003FF7 //A6 = +6.97014232347351913821e-03L -data8 0xB57930370208D4A7, 0x0000BFF6 //A7 = -2.76906420823065422653e-03L -data8 0x89A90B5DF0C0C55E, 0x00003FF5 //A8 = +1.05026496655247749532e-03L -data8 0xC83DB867F08D93C6, 0x0000BFF3 //A9 = -3.81929578900287685559e-04L -data8 0x8C0C9113FC8061FA, 0x00003FF2 //A10 = +1.33561218944256209215e-04L -data8 0xBC17A73E9CA51313, 0x0000BFF0 //A11 = -4.48447217225392170834e-05L -data8 0xED10FE8FC0E44CAD, 0x00003FEE //A12 = +1.41302576244352578317e-05L -data8 0xFE49912328516F81, 0x0000BFEC //A13 = -3.78917710289305330220e-06L -data8 0xA8F6077E25DAFD33, 0x00003FEA //A14 = +6.29428967202166402369e-07L -// Pol5 -data8 0xAF72220985BED710, 0x00003FFD //A0 = +3.42667640364081975844e-01L -data8 0xBC1CB559042410AB, 0x0000BFFC //A1 = -1.83703263815036934677e-01L -data8 0xB730BF62E0B63A3C, 0x00003FFB //A2 = +8.94484474229911741150e-02L -data8 0xA4F307B1D1A1534E, 0x0000BFFA //A3 = -4.02708340235238993824e-02L -data8 0x8B0327F5117861DB, 0x00003FF9 //A4 = +1.69692783752415790321e-02L -data8 0xDD4059307B2B081C, 0x0000BFF7 //A5 = -6.75205569219747369303e-03L -data8 0xA761D738974FECF6, 0x00003FF6 //A6 = +2.55404953403837072821e-03L -data8 0xF208F6D704F4B487, 0x0000BFF4 //A7 = -9.23290315545127419886e-04L -data8 0xA7F3658D34EC10B9, 0x00003FF3 //A8 = +3.20340668304962386053e-04L -data8 0xE079C35CEFD4E6D6, 0x0000BFF1 //A9 = -1.07038324953715640850e-04L -data8 0x90C5CDD19BB3DD2F, 0x00003FF0 //A10 = +3.45164947021915687751e-05L -data8 0xB3911863705825F6, 0x0000BFEE //A11 = -1.07030140392753204852e-05L -data8 0xD023CF5C3F915685, 0x00003FEC //A12 = +3.10152594473606007552e-06L -data8 0xCA7016FADFF584F5, 0x0000BFEA //A13 = -7.54139761055503416594e-07L -data8 0xEEBB5CC0901D2BB0, 0x00003FE7 //A14 = +1.11168196441717301549e-07L -// Pol6 -data8 0x8CD1160326A754AF, 0x00003FFD //A0 = +2.75032699474947383325e-01L -data8 0xFB22A4C657119388, 0x0000BFFB //A1 = -1.22624671271190511269e-01L -data8 0xD02B2CA872A774E9, 0x00003FFA //A2 = +5.08224243596176920409e-02L -data8 0xA23302E146E9E406, 0x0000BFF9 //A3 = -1.97997146844646077750e-02L -data8 0xEF8918FEDE237C98, 0x00003FF7 //A4 = +7.31004448401605074486e-03L -data8 0xA8A8B598FA20D881, 0x0000BFF6 //A5 = -2.57353242430059589053e-03L -data8 0xE3964D9788BFF50F, 0x00003FF4 //A6 = +8.68175969920725727944e-04L -data8 0x93B83C10B7210AC7, 0x0000BFF3 //A7 = -2.81752903983413936245e-04L -data8 0xB913B752B0D56A42, 0x00003FF1 //A8 = +8.82515983758695613094e-05L -data8 0xE0623EFA0B1E8DE9, 0x0000BFEF //A9 = -2.67486302195396417310e-05L -data8 0x83C4D1A4019E1D2E, 0x00003FEE //A10 = +7.85403393879249335151e-06L -data8 0x950CBA5D80D8125E, 0x0000BFEC //A11 = -2.22101388436550539151e-06L -data8 0x9CE72C0409A3E800, 0x00003FEA //A12 = +5.84509280984781223375e-07L -data8 0x88CCD7A000D1C213, 0x0000BFE8 //A13 = -1.27405082040077425019e-07L -data8 0x8DF4EC84F093B1C0, 0x00003FE5 //A14 = +1.65259388738830506389e-08L -// Pol7 -data8 0xE2BF82A153B1B82E, 0x00003FFC //A0 = +2.21433678719152843912e-01L -data8 0xA72A9AE0BD7F29D5, 0x0000BFFB //A1 = -8.16242313227913578068e-02L -data8 0xE98939292289EDBE, 0x00003FF9 //A2 = +2.85078159732432477516e-02L -data8 0x9B93E5E0EEFF9516, 0x0000BFF8 //A3 = -9.49571084105114051468e-03L -data8 0xC6B39897AABC47BC, 0x00003FF6 //A4 = +3.03194499398790451607e-03L -data8 0xF442AC7D84DDF1E0, 0x0000BFF4 //A5 = -9.31779649708690069328e-04L -data8 0x90FBD9F8B41DF23E, 0x00003FF3 //A6 = +2.76534642660360753287e-04L -data8 0xA6AC59077C78B437, 0x0000BFF1 //A7 = -7.94759910003852154521e-05L -data8 0xB9FC0BADD531E5E9, 0x00003FEF //A8 = +2.21710864553358009804e-05L -data8 0xC9CFC8CD93648856, 0x0000BFED //A9 = -6.01445608619100503330e-06L -data8 0xD4FA51B86A9B2494, 0x00003FEB //A10 = +1.58680833469323702924e-06L -data8 0xD8D0ED030032926D, 0x0000BFE9 //A11 = -4.03851487695924456733e-07L -data8 0xCCA1CA2AC3EB8973, 0x00003FE7 //A12 = +9.52891963880517988726e-08L -data8 0x9E26A080F9DA39DE, 0x0000BFE5 //A13 = -1.84111863600343741644e-08L -data8 0x8F3DC58F64A92C62, 0x00003FE2 //A14 = +2.08443519336792003049e-09L -// Pol8 -data8 0xB74C13E914E9666F, 0x00003FFC //A0 = +1.79001151181389950418e-01L -data8 0xDEB57268A58B763B, 0x0000BFFA //A1 = -5.43722600071728705200e-02L -data8 0x821FF0D4C605A4CD, 0x00003FF9 //A2 = +1.58843711598712515609e-02L -data8 0x92C830DD423DB924, 0x0000BFF7 //A3 = -4.47943101836927657394e-03L -data8 0xA04E61767A095BB6, 0x00003FF5 //A4 = +1.22303905230942532198e-03L -data8 0xA9EF64E0F6654358, 0x0000BFF3 //A5 = -3.24125543666296226957e-04L -data8 0xAF39C8969BD163E8, 0x00003FF1 //A6 = +8.35541329311315562274e-05L -data8 0xB01273B34197330C, 0x0000BFEF //A7 = -2.09894273215824495783e-05L -data8 0xACAE4C820B99EBAC, 0x00003FED //A8 = +5.14629050848703676006e-06L -data8 0xA57BF2AEA52B92DF, 0x0000BFEB //A9 = -1.23295315941138567172e-06L -data8 0x9AD6FE7A852DA239, 0x00003FE9 //A10 = +2.88411640627675721042e-07L -data8 0x8BFE95FCD7B92763, 0x0000BFE7 //A11 = -6.51900079707465044843e-08L -data8 0xE9F15C8E7F58CF90, 0x00003FE4 //A12 = +1.36172642554216769522e-08L -data8 0x9E90F22B11FAF8B5, 0x0000BFE2 //A13 = -2.30744183054978535129e-09L -data8 0xF8CF74F1A138FBBA, 0x00003FDE //A14 = +2.26291720693360003233e-10L -// Pol9 -data8 0x94D45274A831ED57, 0x00003FFC //A0 = +1.45341194505862183128e-01L -data8 0x94D4518B699A4A68, 0x0000BFFA //A1 = -3.63352952323113355459e-02L -data8 0x90C3B59FF403A916, 0x00003FF8 //A2 = +8.83572327421709216515e-03L -data8 0x893B796D0E9B4867, 0x0000BFF6 //A3 = -2.09399904729894563201e-03L -data8 0xFDFFA94903DCB8EA, 0x00003FF3 //A4 = +4.84464029001979577664e-04L -data8 0xE5CE7C2E4B05CF16, 0x0000BFF1 //A5 = -1.09580317663729186599e-04L -data8 0xCB88CC8F1146FDAE, 0x00003FEF //A6 = +2.42631878042764234194e-05L -data8 0xB0AA52C6F44E47C8, 0x0000BFED //A7 = -5.26503698764159271674e-06L -data8 0x966DD813170F8EBD, 0x00003FEB //A8 = +1.12078397189300511086e-06L -data8 0xFB75782788A6E378, 0x0000BFE8 //A9 = -2.34189317246047219283e-07L -data8 0xCDF787C4E5FDCF2A, 0x00003FE6 //A10 = +4.79554094892420966704e-08L -data8 0xA34CD3DFAC12AA45, 0x0000BFE4 //A11 = -9.50531730989412282035e-09L -data8 0xEEBB49645DE0E34C, 0x00003FE1 //A12 = +1.73700091999434388879e-09L -data8 0x8C86D8677DEACFBA, 0x0000BFDF //A13 = -2.55616650187281815453e-10L -data8 0xBDB223D0FE2A7D6B, 0x00003FDB //A14 = +2.15659223402509415592e-11L -// Pol10 -data8 0xF2C1812715E4050A, 0x00003FFB //A0 = +1.18533143048567888157e-01L -data8 0xC7DA2C565ADAEE57, 0x0000BFF9 //A1 = -2.43960252726894623056e-02L -data8 0xA15CEFFD632F697D, 0x00003FF7 //A2 = +4.92440908672041077933e-03L -data8 0xFFCFF4D3FB118F69, 0x0000BFF4 //A3 = -9.75846593969603576904e-04L -data8 0xC73F437D2F226C56, 0x00003FF2 //A4 = +1.90016864347860462550e-04L -data8 0x989D7E1F60845811, 0x0000BFF0 //A5 = -3.63863004988760879054e-05L -data8 0xE615A5A669361BE1, 0x00003FED //A6 = +6.85705419984646959791e-06L -data8 0xAACD08E0BE6270F8, 0x0000BFEB //A7 = -1.27256599602163049440e-06L -data8 0xF9DEE9C1C02A3062, 0x00003FE8 //A8 = +2.32710274258898439253e-07L -data8 0xB420E960508A3003, 0x0000BFE6 //A9 = -4.19394488070741280136e-08L -data8 0xFF5E3ECA229CB0C7, 0x00003FE3 //A10 = +7.43219121339261970485e-09L -data8 0xAF86504D78D35E89, 0x0000BFE1 //A11 = -1.27711000692808421573e-09L -data8 0xDE1CE78ADB6DDF04, 0x00003FDE //A12 = +2.02010513073041015283e-10L -data8 0xE124FFAA267301A5, 0x0000BFDB //A13 = -2.55959692063871343080e-11L -data8 0x81F1BEBEFBE168D2, 0x00003FD8 //A14 = +1.84661980716000872722e-12L -// Pol11 -data8 0xC6CE5D7D18203EAA, 0x00003FFB //A0 = +9.70732978630764996752e-02L -data8 0x86E8A30A76923C88, 0x0000BFF9 //A1 = -1.64683517829920230086e-02L -data8 0xB4A1CBB7576B4183, 0x00003FF6 //A2 = +2.75622581042760461528e-03L -data8 0xEEB782FBC8BB352B, 0x0000BFF3 //A3 = -4.55316242981110299585e-04L -data8 0x9BC489CC00C7E63A, 0x00003FF1 //A4 = +7.42758405750422020216e-05L -data8 0xC8D418A9F2A78515, 0x0000BFEE //A5 = -1.19703114831817055481e-05L -data8 0xFFE671DCEE8665A8, 0x00003FEB //A6 = +1.90660487794668853072e-06L -data8 0xA1313247D3E35365, 0x0000BFE9 //A7 = -3.00243820009225833104e-07L -data8 0xC8D5A87C970712B1, 0x00003FE6 //A8 = +4.67604496871825103188e-08L -data8 0xF77258CEF4675E25, 0x0000BFE3 //A9 = -7.20164586117313631144e-09L -data8 0x96549D79C0F33C27, 0x00003FE1 //A10 = +1.09379854902340983112e-09L -data8 0xB16A6CC5A3AE6E01, 0x0000BFDE //A11 = -1.61358659378896671620e-10L -data8 0xC0970F2551C52F96, 0x00003FDB //A12 = +2.18949565869759698947e-11L -data8 0xA6E029ABB3BB500C, 0x0000BFD8 //A13 = -2.37144541649446501026e-12L -data8 0xA3E43F3857D1B6A5, 0x00003FD4 //A14 = +1.45564973108152568130e-13L -// Pol12 -data8 0xA36E35FC807B3E64, 0x00003FFB //A0 = +7.98000543291529334886e-02L -data8 0xB725A29237C8F94F, 0x0000BFF8 //A1 = -1.11784064873715046550e-02L -data8 0xCB51EF23EAD5F327, 0x00003FF5 //A2 = +1.55120891755237931425e-03L -data8 0xDFA838770AE711A2, 0x0000BFF2 //A3 = -2.13296043002775850891e-04L -data8 0xF3D7B777730B202D, 0x00003FEF //A4 = +2.90683082614108095819e-05L -data8 0x83C5FF0D475796DD, 0x0000BFED //A5 = -3.92715403535014263671e-06L -data8 0x8D37B41345244FD5, 0x00003FEA //A6 = +5.26076523514903487927e-07L -data8 0x9616B7E9C40C1DCC, 0x0000BFE7 //A7 = -6.98905176445499510102e-08L -data8 0x9E38FDF61B26699A, 0x00003FE4 //A8 = +9.20976891314475742405e-09L -data8 0xA565DFE27AEA03A1, 0x0000BFE1 //A9 = -1.20342845518628622757e-09L -data8 0xAAEB9EFB497EC812, 0x00003FDE //A10 = +1.55451193328690040046e-10L -data8 0xABD305A38349EAEB, 0x0000BFDB //A11 = -1.95341618552982314342e-11L -data8 0x9EDB00104DB66DD9, 0x00003FD8 //A12 = +2.25747200093121867690e-12L -data8 0xE9F80AF513F2B8AB, 0x0000BFD4 //A13 = -2.07806143133802417637e-13L -data8 0xC2B840C3859AB166, 0x00003FD0 //A14 = +1.08091168358477817812e-14L -// Pol13 -data8 0x86CD0BF01914407A, 0x00003FFB //A0 = +6.58207829138836028568e-02L -data8 0xF9F4A17FA70807C3, 0x0000BFF7 //A1 = -7.62803922344113067603e-03L -data8 0xE63BF84EDE20EDAA, 0x00003FF4 //A2 = +8.78273993036530088653e-04L -data8 0xD2B746011B39D879, 0x0000BFF1 //A3 = -1.00477176633442906101e-04L -data8 0xBFA4F1F66023C975, 0x00003FEE //A4 = +1.14228914411837438985e-05L -data8 0xAD3A05E1F1F0EA8F, 0x0000BFEB //A5 = -1.29063913420827451449e-06L -data8 0x9BA1F2E56DBE1B49, 0x00003FE8 //A6 = +1.44944165416032280452e-07L -data8 0x8AFE93AF627BAFA6, 0x0000BFE5 //A7 = -1.61810825806733824014e-08L -data8 0xF6CEAB6E78304875, 0x00003FE1 //A8 = +1.79575947795401009493e-09L -data8 0xD9BFD64FD9166ECF, 0x0000BFDE //A9 = -1.98041892772535870322e-10L -data8 0xBE482C8AEA403737, 0x00003FDB //A10 = +2.16325508593741350803e-11L -data8 0xA1FB98FA19E62A4F, 0x0000BFD8 //A11 = -2.30191407969654156362e-12L -data8 0xFDB2E0599016AD1E, 0x00003FD4 //A12 = +2.25329742249079975388e-13L -data8 0x9E179A99CDD4BF4B, 0x0000BFD1 //A13 = -1.75517603530017718494e-14L -data8 0xDE4DE992A707C7BC, 0x00003FCC //A14 = +7.71273133169032472595e-16L -// Pol14 -data8 0xDF0639E60CF6E96C, 0x00003FFA //A0 = +5.44492971101228988138e-02L -data8 0xAB6737B6065BD1C2, 0x0000BFF7 //A1 = -5.23081035867078490333e-03L -data8 0x8322CC0765FD9C27, 0x00003FF4 //A2 = +5.00243857322493802503e-04L -data8 0xC7C37C447AABC9BE, 0x0000BFF0 //A3 = -4.76273572257807668623e-05L -data8 0x977C068C67DD09B3, 0x00003FED //A4 = +4.51458915834329225528e-06L -data8 0xE4C00648054CBD72, 0x0000BFE9 //A5 = -4.26080256412742187632e-07L -data8 0xABF9032C426C0F54, 0x00003FE6 //A6 = +4.00405155179176153559e-08L -data8 0x80BD82177111B70D, 0x0000BFE3 //A7 = -3.74683488305340664541e-09L -data8 0xBFEFB2BBFC4AAE16, 0x00003FDF //A8 = +3.49130134089615132836e-10L -data8 0x8E68BCEC2A2F6025, 0x0000BFDC //A9 = -3.23800879252444001040e-11L -data8 0xD19FEF92B2157585, 0x00003FD8 //A10 = +2.97894685764287382560e-12L -data8 0x967A0ECC142382D9, 0x0000BFD5 //A11 = -2.67300472044743953909e-13L -data8 0xC6D8869855133985, 0x00003FD1 //A12 = +2.20763189681614758000e-14L -data8 0xD10AC0B228ABCECC, 0x0000BFCD //A13 = -1.45052027893524847250e-15L -data8 0xF7C6DEB4522487A3, 0x00003FC8 //A14 = +5.37280367113168366711e-17L -// Pol15 -data8 0xB8F57DECFAC3B255, 0x00003FFA //A0 = +4.51559943173131409760e-02L -data8 0xEC1B8A6C822C036F, 0x0000BFF6 //A1 = -3.60271577347565115947e-03L -data8 0x963A6DD66951B72E, 0x00003FF3 //A2 = +2.86537625289770759336e-04L -data8 0xBE93F9E80DF4AE0A, 0x0000BFEF //A3 = -2.27186718010906557773e-05L -data8 0xF10589FC10D908E0, 0x00003FEB //A4 = +1.79575113004740124999e-06L -data8 0x97F1A2435C7877EF, 0x0000BFE8 //A5 = -1.41508767557208714648e-07L -data8 0xBEFF2FB5F00E9327, 0x00003FE4 //A6 = +1.11174782364058338591e-08L -data8 0xEF5E09DC714DF198, 0x0000BFE0 //A7 = -8.70813302639377671664e-10L -data8 0x958A6EB9408970A4, 0x00003FDD //A8 = +6.80032608255179732632e-11L -data8 0xBA31F40954675710, 0x0000BFD9 //A9 = -5.29198388081297293593e-12L -data8 0xE63B9CEEDC4CF0E6, 0x00003FD5 //A10 = +4.08975721481205179918e-13L -data8 0x8AF8F1E3FED32CEC, 0x0000BFD2 //A11 = -3.08580807479307213059e-14L -data8 0x9A88033A08842BEA, 0x00003FCE //A12 = +2.14455258045503137285e-15L -data8 0x88BCF775B7B3A939, 0x0000BFCA //A13 = -1.18601440246395438386e-16L -data8 0x88687B63A5B7135E, 0x00003FC5 //A14 = +3.69734984736162880476e-18L -// Pol16 -data8 0x99B8A501204BF3E7, 0x00003FFA //A0 = +3.75296063885057657456e-02L -data8 0xA33FA20D2867C79C, 0x0000BFF6 //A1 = -2.49097544033960143953e-03L -data8 0xACFD14CA6AA55829, 0x00003FF2 //A2 = +1.64974783411741182991e-04L -data8 0xB6E9B4ED9B378B09, 0x0000BFEE //A3 = -1.09024594422859744844e-05L -data8 0xC0FD95D38ADCF301, 0x00003FEA //A4 = +7.18945888498730738040e-07L -data8 0xCB302F7AAFFFA074, 0x0000BFE6 //A5 = -4.73084450875945514829e-08L -data8 0xD578674188198402, 0x00003FE2 //A6 = +3.10640208133938026422e-09L -data8 0xDFCC6ED4219E7FC4, 0x0000BFDE //A7 = -2.03543610142159316364e-10L -data8 0xEA1F448AA373E4A9, 0x00003FDA //A8 = +1.33083028465054001215e-11L -data8 0xF44780B8EACD37B5, 0x0000BFD6 //A9 = -8.67854438613319891312e-13L -data8 0xFD55794492F53AEE, 0x00003FD2 //A10 = +5.62514216652784597182e-14L -data8 0x805C040421E7A098, 0x0000BFCF //A11 = -3.56269003968981157635e-15L -data8 0xEFCCD20DE93A138E, 0x00003FCA //A12 = +2.07993414310230172191e-16L -data8 0xB259764466732080, 0x0000BFC6 //A13 = -9.66834364652262630640e-18L -data8 0x9597C1DB6AF830E4, 0x00003FC1 //A14 = +2.53420063550355940811e-19L -// Pol17 -data8 0xFFFCBD66BAA4368C, 0x00003FF9 //A0 = +3.12484454387527380657e-02L -data8 0xE28174723762D197, 0x0000BFF5 //A1 = -1.72810121976742793952e-03L -data8 0xC81D832836019EC4, 0x00003FF1 //A2 = +9.54224026432644399736e-05L -data8 0xB0885530C7D7AB5B, 0x0000BFED //A3 = -5.26107996417947739207e-06L -data8 0x9B7EA64F62F6FD06, 0x00003FE9 //A4 = +2.89631495607631932854e-07L -data8 0x88C24ACAA9042166, 0x0000BFE5 //A5 = -1.59208376111789845204e-08L -data8 0xF033E5CD9B7F2822, 0x00003FE0 //A6 = +8.73852423930118273815e-10L -data8 0xD2A1B161FB4DFBFE, 0x0000BFDC //A7 = -4.78920839886600387264e-11L -data8 0xB86B27FCBB5A1E9D, 0x00003FD8 //A8 = +2.62074563162805723295e-12L -data8 0xA124E1303F08E508, 0x0000BFD4 //A9 = -1.43124677534734729453e-13L -data8 0x8C0B270950D7C697, 0x00003FD0 //A10 = +7.77397948226387851915e-15L -data8 0xEE034E350C65D2D9, 0x0000BFCB //A11 = -4.12886586201102092942e-16L -data8 0xBA94473E52495304, 0x00003FC7 //A12 = +2.02289587087169937807e-17L -data8 0xE913D34CBB853CEE, 0x0000BFC2 //A13 = -7.89697093687557412061e-19L -data8 0xA44576A85E8CAB59, 0x00003FBD //A14 = +1.73929048516879172258e-20L -// Pol18 -data8 0xD579A3FE4622DED2, 0x00003FF9 //A0 = +2.60589793198885278242e-02L -data8 0x9D97EB84E7CD89C8, 0x0000BFF5 //A1 = -1.20234251012583627659e-03L -data8 0xE86EFDC2CCA5C47B, 0x00003FF0 //A2 = +5.54164790116744315389e-05L -data8 0xAB39FA5621E39B15, 0x0000BFEC //A3 = -2.55147332073979814633e-06L -data8 0xFC0244F58F8D8097, 0x00003FE7 //A4 = +1.17350772365097747003e-07L -data8 0xB941D44B71B14FE2, 0x0000BFE3 //A5 = -5.39169255673480031672e-09L -data8 0x880B4A40B6F2C901, 0x00003FDF //A6 = +2.47462779512141204748e-10L -data8 0xC7998AE5652CDCFC, 0x0000BFDA //A7 = -1.13459336509953900777e-11L -data8 0x92438AA45915CD95, 0x00003FD6 //A8 = +5.19633524685027215673e-13L -data8 0xD6067243AD3AEAE6, 0x0000BFD1 //A9 = -2.37615683835509918256e-14L -data8 0x9BD0722A07669E4D, 0x00003FCD //A10 = +1.08117849400479298186e-15L -data8 0xDDF6F1B79F50E3C4, 0x0000BFC8 //A11 = -4.81309059042573202592e-17L -data8 0x91F283C0351A9ACA, 0x00003FC4 //A12 = +1.97795505638619048412e-18L -data8 0x990BC4FAFA9C7542, 0x0000BFBF //A13 = -6.48174913943425248713e-20L -data8 0xB536865B89676892, 0x00003FB9 //A14 = +1.19916696090758913485e-21L -// Pol19 -data8 0xB241CEB1B7C953F1, 0x00003FF9 //A0 = +2.17598950382519671244e-02L -data8 0xDBD6FBA9B11B85E1, 0x0000BFF4 //A1 = -8.38622198373701898430e-04L -data8 0x877605B1AD082441, 0x00003FF0 //A2 = +3.22964249573360786077e-05L -data8 0xA6D04DC067A5D310, 0x0000BFEB //A3 = -1.24285881515578912302e-06L -data8 0xCD458A72BC161315, 0x00003FE6 //A4 = +4.77935289502172654216e-08L -data8 0xFC6902CFB5DE90A2, 0x0000BFE1 //A5 = -1.83652591038905929358e-09L -data8 0x9B12B0707DFE615C, 0x00003FDD //A6 = +7.05190381049444126079e-11L -data8 0xBE67972F2C8EE5AE, 0x0000BFD8 //A7 = -2.70581282732878853626e-12L -data8 0xE99D8CAF9A3FFE02, 0x00003FD3 //A8 = +1.03746090805854376435e-13L -data8 0x8F35F5BBEF9E4299, 0x0000BFCF //A9 = -3.97489765699919189983e-15L -data8 0xAF6E62C3C91B7178, 0x00003FCA //A10 = +1.52162305785839987182e-16L -data8 0xD6636229C1646963, 0x0000BFC5 //A11 = -5.81100425482928485309e-18L -data8 0x810331BF289E068F, 0x00003FC1 //A12 = +2.18555638648715837944e-19L -data8 0x8E3D07CA59546B83, 0x0000BFBC //A13 = -7.53003820427900359431e-21L -data8 0xD5970B291ED73560, 0x00003FB6 //A14 = +1.76677518655145552907e-22L -LOCAL_OBJECT_END(erfc_p_table) - - -.section .text -GLOBAL_LIBM_ENTRY(erfc) - -{ .mfi - alloc r32 = ar.pfs, 0, 33, 4, 0 - fma.s1 FR_Tmp = f1, f1, f8 // |x|+1, if x >= 0 - nop.i 0 -} -{ .mfi - addl EXP_AD_TB1 = @ltoff(exp_table_1), gp - fms.s1 FR_Tmp1 = f1, f1, f8 // |x|+1, if x < 0 - mov exp_GR_rshf_2to56 = 0x4768 // begin 1.1 2^(63+56) -};; - -{ .mfi - ld8 EXP_AD_TB1 = [EXP_AD_TB1] - fcmp.ge.s1 p6,p7 = f8, f0 // p6: x >= 0 ,p7: x<0 - mov exp_GR_rshf_2to56 = 0x4768 // begin 1.1 2^(63+56) -} -{ .mlx - mov exp_TB1_size = 0x100 - movl exp_GR_sig_inv_ln2 = 0xb8aa3b295c17f0bc //signif. of 1/ln2 -};; - -{ .mfi - nop.m 0 - fclass.m p8,p0 = f8,0x07 // p8: x = 0 - shl exp_GR_rshf_2to56 = exp_GR_rshf_2to56, 48 //end 1.1 2^(63+56) -} -{ .mfi - mov exp_GR_exp_2tom56 = 0xffff-56 - fnma.s1 EXP_NORM_f8 = f8, f8, f0 // high bits for -x^2 - nop.i 0 -};; - - -.pred.rel "mutex",p6,p7 -{ .mfi - setf.sig EXP_INV_LN2_2TO63 = exp_GR_sig_inv_ln2 // form 1/ln2 * 2^63 -(p6) fma.s1 FR_AbsArg = f1, f0, f8 // |x|, if x >= 0 - mov GR_POS_ARG_ASYMP = 0x403C -} -{ .mfi - mov GR_NEG_ARG_ASYMP = 0x4018 -(p7) fms.s1 FR_AbsArg = f1, f0, f8 // |x|, if x < 0 - mov exp_GR_rshf = 0x43e8 // begin 1.1 2^63 for right shift -};; - -{ .mfi - setf.exp EXP_2TOM56 = exp_GR_exp_2tom56 // 2^-56 for scaling Nfloat - fclass.m p10,p0 = f8, 0x21 // p10: x = +inf - mov exp_GR_17ones = 0x1FFFF -} -{ .mlx - setf.d EXP_RSHF_2TO56 = exp_GR_rshf_2to56 // const 1.10*2^(63+56) - movl GR_ERFC_XB_TB = 0x1A0 -};; - - -.pred.rel "mutex",p6,p7 -{ .mfi - ldfd FR_UnfBound = [EXP_AD_TB1], 16 -(p6) fma.s1 FR_Tmp = FR_Tmp, FR_Tmp, f0 // (|x|+1)^2,x >=0 - shl exp_GR_rshf = exp_GR_rshf, 48 //end 1.1 2^63 for right shift -} -{ .mfi - nop.m 0 -(p7) fma.s1 FR_Tmp = FR_Tmp1, FR_Tmp1, f0 // (|x|+1)^2, x<0 - mov GR_0x1 = 0x1 -};; - -{ .mfi - mov GR_BIAS = 0x0FFFF - fclass.m p9,p0 = f8, 0x22 // p9: x = -inf - shl GR_EpsNorm = GR_0x1,53 -} -{ .mfb - mov exp_TB2_size = 0x80 -(p8) fma.d.s0 f8 = f1, f1, f0 //p8: y = 1.0, x = 0 -(p8) br.ret.spnt b0 //p8: quick exit for x = 0 -};; - -{ .mfi - nop.m 0 - fclass.m p11,p0 = f8, 0xc3 // p11: x = nan - nop.i 0 -} -{ .mfi - setf.d EXP_RSHF = exp_GR_rshf //Form right shift const 1.100 * 2^63 - fma.s1 FR_NormX = f8,f1,f0 - nop.i 0 -};; - -{ .mfi - setf.d FR_EpsNorm = GR_EpsNorm - nop.f 0 -(p6) shl GR_ARG_ASYMP = GR_POS_ARG_ASYMP, 48//p6:ARG_ASYMP= 28.0,x>=0 -} -{ .mfi - nop.m 0 - fma.s1 FR_2 = f1, f1, f1 - nop.i 0 -};; - -{ .mfi - ldfe exp_ln2_by_128_hi = [EXP_AD_TB1],16 - fma.s1 f8_sq_lo = f8, f8, EXP_NORM_f8 // low bits for -x^2 -(p7) shl GR_ARG_ASYMP = GR_NEG_ARG_ASYMP, 48//p6:ARG_ASYMP= 6.0,x < 0 -};; - -{ .mfi - sub GR_mBIAS = r0, GR_BIAS - fma.s1 FR_Tmp = FR_Tmp, FR_Tmp, f0 // (|x|+1)^4 - nop.i 0 -} -{ .mfi - ldfe exp_ln2_by_128_lo = [EXP_AD_TB1], 16 - nop.f 0 - nop.i 0 -};; - -{ .mfi - getf.d GR_AbsArg = FR_AbsArg - nop.f 0 - add GR_ERFC_XB_TB = GR_ERFC_XB_TB, EXP_AD_TB1//pointer to XB_TBL -} -{ .mfb - shladd GR_ShftPi_bias = GR_BIAS, 4, GR_mBIAS // BIAS * 2^4 - BIAS -(p9) fma.d.s0 f8 = f1, f1, f1 // p9: y = 2 for x = -inf -(p9) br.ret.spnt b0 // p9: quick exit for x = -inf -};; - -{ .mfi - add GR_ERFC_P_TB = 0x140, GR_ERFC_XB_TB // pointer to P_TBL - fma.s1 EXP_W_2TO56_RSH = EXP_NORM_f8,EXP_INV_LN2_2TO63,EXP_RSHF_2TO56 - shladd GR_ShftPi_bias = GR_ShftPi_bias, 4, r0 // BIAS * 240 -} -{ .mfb - nop.m 0 -(p10) fma.d.s0 f8 = f0, f1, f0 // p10: y = 0 for x = +inf -(p10) br.ret.spnt b0 // p10: quick exit for x = +inf -};; - - -.pred.rel "mutex",p6,p7 -{ .mfi -(p6) cmp.gt.unc p15,p0 = GR_AbsArg,GR_ARG_ASYMP //p15: x > 28.0,p6: x >= 0 - nop.f 0 -(p7) cmp.gt.unc p14,p0 = GR_AbsArg, GR_ARG_ASYMP //p14: x < - 6.0,p7: x < 0 -} -{ .mfb - add EXP_AD_TB2 = exp_TB1_size, EXP_AD_TB1 -(p11) fma.d.s0 f8 = f8, f1, f0 //p11: y = x for x = nan -(p11) br.ret.spnt b0 //p11: quick exit for x = nan -};; - -{ .mfi - add EXP_AD_P = exp_TB2_size, EXP_AD_TB2 - fms.s1 f8_sq_lo = f1, f1, f8_sq_lo // 1 - low bits for -x^2 - nop.i 0 -};; - -{ .mfi - ldfpd exp_P4, exp_P3 = [EXP_AD_P], 16 - fmerge.s FR_X = f8,f8 - shladd GR_ShftXBi_bias = GR_mBIAS, 4, r0 -} -{ .mfb - nop.m 0 -(p14) fnma.d.s0 FR_RESULT = FR_EpsNorm,FR_EpsNorm,FR_2 //p14:y ~=~ 2,x< -6.0 -(p14) br.ret.spnt b0 //p14: quick exit for x < -6.0 -};; - -//p15: y ~=~ 0.0(result with underflow error), x > ARG_ASYMP = 28, -{ .mfi - ldfpd exp_P2, exp_P1 = [EXP_AD_P] - fma.d.s0 FR_Tmpf = f1, f1, FR_EpsNorm // flag i - nop.i 0 -} -{ .mfb -(p15) mov GR_Parameter_TAG = 208 -(p15) fma.d.s0 FR_RESULT = FR_EpsNorm,FR_EpsNorm,f0 -(p15) br.cond.spnt __libm_error_region -};; - -//p8: x < 27.0, result without ungerflow error -{ .mfi - getf.exp GR_IndxPlusBias = FR_Tmp // exp + bias for (|x|+1)^4 - fcmp.lt.s1 p8,p0 = FR_NormX,FR_UnfBound - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 EXP_Nfloat = EXP_W_2TO56_RSH, EXP_2TOM56, EXP_RSHF - nop.i 0 -};; - -{ .mmi - shladd GR_ShftXBi = GR_IndxPlusBias, 4, GR_ShftXBi_bias - shladd GR_ShftPi = GR_IndxPlusBias, 4, GR_ShftPi_bias - shl GR_ShftPi_8 = GR_IndxPlusBias, 8 -};; - -{ .mmi - getf.sig exp_GR_N = EXP_W_2TO56_RSH - add GR_ERFC_XB_TB = GR_ERFC_XB_TB, GR_ShftXBi// pointer to XB[i] - sub GR_ShftPi = GR_ShftPi_8, GR_ShftPi // (256-16)*i -};; - -{ .mmi - ldfe FR_Xb = [GR_ERFC_XB_TB] - add GR_ShftA12 = 0xC0, GR_ShftPi // pointer shift for A12 - add GR_ShftA13 = 0xD0, GR_ShftPi // pointer shift for A13 -};; - -{ .mfi - add GR_P_A13 = GR_ERFC_P_TB, GR_ShftA13 // pointer to A13 - nop.f 0 - and exp_GR_index_1 = 0x0f, exp_GR_N -} -{ .mfi - add GR_P_A12 = GR_ERFC_P_TB, GR_ShftA12 // pointer to A12 - fnma.s1 exp_r = EXP_Nfloat, exp_ln2_by_128_hi, EXP_NORM_f8 - nop.i 0 -};; - -{ .mfi - ldfe FR_A12 = [GR_P_A12], -64 - nop.f 0 - and exp_GR_index_2_16 = 0x70, exp_GR_N -} -{ .mfi - ldfe FR_A13 = [GR_P_A13], -64 - nop.f 0 - shladd EXP_AD_T1 = exp_GR_index_1, 4, EXP_AD_TB1 -};; - -{ .mmi - ldfe FR_A8 = [GR_P_A12], 32 - ldfe FR_A9 = [GR_P_A13], 32 - add EXP_AD_T2 = EXP_AD_TB2, exp_GR_index_2_16 -};; - -{ .mmi - ldfe FR_A10 = [GR_P_A12], -96 - ldfe FR_A11 = [GR_P_A13], -96 - nop.i 0 -};; - -{ .mmi - ldfe FR_A4 = [GR_P_A12], 32 - ldfe FR_A5 = [GR_P_A13], 32 - shr r2 = exp_GR_N, 0x7 -};; - -{ .mfi - ldfe FR_A6 = [GR_P_A12], -64 - fma.s1 exp_rP4pP3 = exp_r, exp_P4, exp_P3 - nop.i 0 -} -{ .mfi - ldfe FR_A7 = [GR_P_A13], -64 - fma.s1 exp_rsq = exp_r, exp_r, f0 - nop.i 0 -};; - -{ .mmi - ldfe FR_A2 = [GR_P_A12], -32 - ldfe FR_A3 = [GR_P_A13], -32 - addl exp_GR_biased_M = 0xffff, r2 -};; - -{ .mmi - ldfe FR_A0 = [GR_P_A12], 224 - ldfe FR_A1 = [GR_P_A13] - nop.i 0 -};; - -{ .mfi - ldfe FR_A14 = [GR_P_A12] - fms.s1 FR_LocArg = FR_AbsArg, f1, FR_Xb // xloc = x - x[i] - nop.i 0 -};; - -{ .mmi - setf.exp EXP_2M = exp_GR_biased_M - ldfe exp_T1 = [EXP_AD_T1] - nop.i 0 -};; - -{ .mfi - ldfe exp_T2 = [EXP_AD_T2] - fma.s1 exp_P_hi = exp_rsq, exp_P1, exp_r - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 exp_rcube = exp_r, exp_rsq, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 exp_P_lo = exp_r, exp_rP4pP3, exp_P2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 exp_f = EXP_Nfloat, exp_ln2_by_128_lo, f8_sq_lo - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_P14_0_1 = FR_LocArg, FR_LocArg, f0 // xloc ^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P14_0_2 = FR_A13, FR_LocArg, FR_A12 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_P14_1_1 = FR_A9, FR_LocArg, FR_A8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P14_1_2 = FR_A11, FR_LocArg, FR_A10 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_P14_2_1 = FR_A5, FR_LocArg, FR_A4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P14_2_2 = FR_A7, FR_LocArg, FR_A6 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_P14_3_1 = FR_A1, FR_LocArg, FR_A0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P14_3_2 = FR_A3, FR_LocArg, FR_A2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_P14_6_1 = FR_P14_0_1, FR_A14, FR_P14_0_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P14_7_2 = FR_P14_0_1, FR_P14_0_1, f0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_P14_7_1 = FR_P14_0_1, FR_P14_1_2, FR_P14_1_1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 exp_S2 = exp_f, exp_T2, f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 exp_S1 = EXP_2M, exp_T1, f0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_P14_8_1 = FR_P14_0_1, FR_P14_3_2, FR_P14_3_1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P14_8_2 = FR_P14_0_1, FR_P14_2_2, FR_P14_2_1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_P14_12_1 = FR_P14_7_2, FR_P14_6_1, FR_P14_7_1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 exp_S = exp_S1, exp_S2, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 exp_P = exp_rcube, exp_P_lo, exp_P_hi - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fma.s1 FR_P14_13_1 = FR_P14_7_2, FR_P14_8_2, FR_P14_8_1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P14_13_2 = FR_P14_7_2, FR_P14_7_2, f0 // xloc^8 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_Exp = exp_S, exp_P, exp_S // exp(-x^2) - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_Pol = FR_P14_13_2, FR_P14_12_1, FR_P14_13_1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.d.s0 FR_Tmpf = f8, f1, f0 // flag d - nop.i 0 -};; - -//p6: result for 0 < x < = 28.0, -//p7: result for -6.0 <= x < 0, -//p8: exit for - 6.0 <= x < UnfBound ~=~ 26.54.. - -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fma.d.s0 f8 = FR_Exp, FR_Pol, f0 - nop.i 0 -} -{ .mfb - mov GR_Parameter_TAG = 208 -(p7) fnma.d.s0 f8 = FR_Exp, FR_Pol, FR_2 -(p8) br.ret.sptk b0 -};; - -GLOBAL_LIBM_END(erfc) - -// call via (p15) br.cond.spnt __libm_error_region -// for x > ARG_ASYMP = 28.0 -// or -// -// after .endp erfc for UnfBound < = x < = ARG_ASYMP = 28.0 - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_erfcf.S b/sysdeps/ia64/fpu/s_erfcf.S deleted file mode 100644 index f9502d7e4a..0000000000 --- a/sysdeps/ia64/fpu/s_erfcf.S +++ /dev/null @@ -1,980 +0,0 @@ -.file "erfcf.s" - - -// Copyright (c) 2002 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2002 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 01/17/02 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// float erfcf(float) -// -// Overview of operation -//============================================================== -// 1. 0 <= x <= 10.06 -// -// erfcf(x) = P15(x) * exp( -x^2 ) -// -// Comment: -// -// Let x(0)=0, x(i) = 2^(i), i=1,...3, x(4)= 10.06 -// -// Let x(i)<= x < x(i+1). -// We can find i as exponent of argument x (let i = 0 for 0<= x < 2 ) -// -// Let P15(x) - polynomial approximation of degree 15 for function -// erfcf(x) * exp( x^2) and x(i) <= x <= x(i+1), i = 0,1,2,3 -// Polynomial coefficients we have in the table erfc_p_table. -// -// So we can find result for erfcf(x) as above. -// Algorithm description for exp function see below. -// -// 2. -4.4 <= x < 0 -// -// erfcf(x) = 2.0 - erfcf(-x) -// -// 3. x > 10.06 -// -// erfcf(x) ~=~ 0.0 -// -// 4. x < -4.4 -// -// erfcf(x) ~=~ 2.0 - -// Special values -//============================================================== -// erfcf(+0) = 1.0 -// erfcf(-0) = 1.0 - -// erfcf(+qnan) = +qnan -// erfcf(-qnan) = -qnan -// erfcf(+snan) = +qnan -// erfcf(-snan) = -qnan - -// erfcf(-inf) = 2.0 -// erfcf(+inf) = +0 - -//============================================================== -// Take double exp(double) from libm_64. -// -// Overview of operation -//============================================================== -// Take the input x. w is "how many log2/128 in x?" -// w = x * 128/log2 -// n = int(w) -// x = n log2/128 + r + delta - -// n = 128M + index_1 + 2^4 index_2 -// x = M log2 + (log2/128) index_1 + (log2/8) index_2 + r + delta - -// exp(x) = 2^M 2^(index_1/128) 2^(index_2/8) exp(r) exp(delta) -// Construct 2^M -// Get 2^(index_1/128) from table_1; -// Get 2^(index_2/8) from table_2; -// Calculate exp(r) by series -// r = x - n (log2/128)_high -// delta = - n (log2/128)_low -// Calculate exp(delta) as 1 + delta -// -// Comment for erfcf: -// -// Let exp(r) = 1 + x + 0.5*x^2 + (1/6)*x^3 -// Let delta = 0. -//============================================================== -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f6,f7,f9 -> f11, f32 -> f92 - -// General registers used: -// r14 -> r22,r32 -> r50 - -// Predicate registers used: -// p6 -> p15 - -// Assembly macros -//============================================================== -EXP_AD_TB1 = r14 -exp_GR_sig_inv_ln2 = r15 -exp_TB1_size = r16 -exp_GR_rshf_2to56 = r17 -exp_GR_exp_2tom56 = r18 - -exp_GR_rshf = r33 -EXP_AD_TB2 = r34 -EXP_AD_P = r35 -exp_GR_N = r36 -exp_GR_index_1 = r37 -exp_GR_index_2_16 = r38 -exp_GR_biased_M = r39 -EXP_AD_T1 = r40 -EXP_AD_T2 = r41 -exp_TB2_size = r42 - -// GR for erfcf(x) -//============================================================== -GR_IndxPlusBias = r19 -GR_ExpMask = r20 -GR_BIAS = r21 -GR_ShftPi_bias = r22 - -GR_P_POINT_1 = r43 -GR_P_POINT_2 = r44 -GR_P_POINT_3 = r45 -GR_P_POINT_4 = r46 - -GR_ShftPi = r47 -GR_EpsNorm = r48 - -GR_05 = r49 -GR_1_by_6 = r50 - -// GR for __libm_support call -//============================================================== - -GR_SAVE_B0 = r43 -GR_SAVE_PFS = r44 -GR_SAVE_GP = r45 -GR_SAVE_SP = r46 - -GR_Parameter_X = r47 -GR_Parameter_Y = r48 -GR_Parameter_RESULT = r49 -GR_Parameter_TAG = r50 - - -// FR for exp(-x^2) -//============================================================== -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - -EXP_2TOM56 = f6 -EXP_INV_LN2_2TO63 = f7 -EXP_W_2TO56_RSH = f9 -exp_ln2_by_128_hi = f11 - -EXP_RSHF_2TO56 = f32 -exp_ln2_by_128_lo = f33 -EXP_RSHF = f34 -EXP_Nfloat = f35 -exp_r = f36 -exp_rsq = f37 -EXP_2M = f38 -exp_S1 = f39 -exp_T1 = f40 -exp_P = f41 -exp_S = f42 -EXP_NORM_f8 = f43 -exp_S2 = f44 -exp_T2 = f45 - -// FR for erfcf(x) -//============================================================== -FR_AbsArg = f46 -FR_Tmp = f47 -FR_Tmp1 = f48 -FR_Tmpf = f49 -FR_NormX = f50 - -FR_A15 = f51 -FR_A14 = f52 - -FR_A13 = f53 -FR_A12 = f54 - -FR_A11 = f55 -FR_A10 = f56 - -FR_A9 = f57 -FR_A8 = f58 - -FR_A7 = f59 -FR_A6 = f60 - -FR_A5 = f61 -FR_A4 = f62 - -FR_A3 = f63 -FR_A2 = f64 - -FR_A1 = f65 -FR_A0 = f66 - -FR_P15_0_1 = f67 -FR_P15_1_1 = f68 -FR_P15_1_2 = f69 -FR_P15_2_1 = f70 -FR_P15_2_2 = f71 -FR_P15_3_1 = f72 -FR_P15_3_2 = f73 -FR_P15_4_1 = f74 -FR_P15_4_2 = f75 -FR_P15_7_1 = f76 -FR_P15_7_2 = f77 -FR_P15_8_1 = f78 -FR_P15_9_1 = f79 -FR_P15_9_2 = f80 -FR_P15_13_1 = f81 -FR_P15_14_1 = f82 -FR_P15_14_2 = f83 - -FR_2 = f84 -FR_05 = f85 -FR_1_by_6 = f86 -FR_Pol = f87 -FR_Exp = f88 - -FR_POS_ARG_ASYMP = f89 -FR_NEG_ARG_ASYMP = f90 - -FR_UnfBound = f91 -FR_EpsNorm = f92 - -// Data tables -//============================================================== -RODATA -.align 16 - -// ************* DO NOT CHANGE ORDER OF THESE TABLES ******************** - -// double-extended 1/ln(2) -// 3fff b8aa 3b29 5c17 f0bb be87fed0691d3e88 -// 3fff b8aa 3b29 5c17 f0bc -// For speed the significand will be loaded directly with a movl and setf.sig -// and the exponent will be bias+63 instead of bias+0. Thus subsequent -// computations need to scale appropriately. -// The constant 128/ln(2) is needed for the computation of w. This is also -// obtained by scaling the computations. -// -// Two shifting constants are loaded directly with movl and setf.d. -// 1. EXP_RSHF_2TO56 = 1.1000..00 * 2^(63-7) -// This constant is added to x*1/ln2 to shift the integer part of -// x*128/ln2 into the rightmost bits of the significand. -// The result of this fma is EXP_W_2TO56_RSH. -// 2. EXP_RSHF = 1.1000..00 * 2^(63) -// This constant is subtracted from EXP_W_2TO56_RSH * 2^(-56) to give -// the integer part of w, n, as a floating-point number. -// The result of this fms is EXP_Nfloat. - - -LOCAL_OBJECT_START(exp_table_1) - -data4 0x4120f5c3, 0x408ccccd //POS_ARG_ASYMP = 10.06, NEG_ARG_ASYMP = 4.4 -data4 0x41131Cdf, 0x00800000 //UnfBound ~=~ 9.1, EpsNorm ~=~ 1.1754944e-38 -// -data8 0xb17217f7d1cf79ab , 0x00003ff7 // ln2/128 hi -data8 0xc9e3b39803f2f6af , 0x00003fb7 // ln2/128 lo -// -// Table 1 is 2^(index_1/128) where -// index_1 goes from 0 to 15 -// -data8 0x8000000000000000 , 0x00003FFF -data8 0x80B1ED4FD999AB6C , 0x00003FFF -data8 0x8164D1F3BC030773 , 0x00003FFF -data8 0x8218AF4373FC25EC , 0x00003FFF -data8 0x82CD8698AC2BA1D7 , 0x00003FFF -data8 0x8383594EEFB6EE37 , 0x00003FFF -data8 0x843A28C3ACDE4046 , 0x00003FFF -data8 0x84F1F656379C1A29 , 0x00003FFF -data8 0x85AAC367CC487B15 , 0x00003FFF -data8 0x8664915B923FBA04 , 0x00003FFF -data8 0x871F61969E8D1010 , 0x00003FFF -data8 0x87DB357FF698D792 , 0x00003FFF -data8 0x88980E8092DA8527 , 0x00003FFF -data8 0x8955EE03618E5FDD , 0x00003FFF -data8 0x8A14D575496EFD9A , 0x00003FFF -data8 0x8AD4C6452C728924 , 0x00003FFF -LOCAL_OBJECT_END(exp_table_1) - -// Table 2 is 2^(index_1/8) where -// index_2 goes from 0 to 7 - -LOCAL_OBJECT_START(exp_table_2) - -data8 0x8000000000000000 , 0x00003FFF -data8 0x8B95C1E3EA8BD6E7 , 0x00003FFF -data8 0x9837F0518DB8A96F , 0x00003FFF -data8 0xA5FED6A9B15138EA , 0x00003FFF -data8 0xB504F333F9DE6484 , 0x00003FFF -data8 0xC5672A115506DADD , 0x00003FFF -data8 0xD744FCCAD69D6AF4 , 0x00003FFF -data8 0xEAC0C6E7DD24392F , 0x00003FFF -LOCAL_OBJECT_END(exp_table_2) - -LOCAL_OBJECT_START(erfc_p_table) - -// Pol_0 -data8 0xBEA3260C63CB0446 //A15 = -5.70673541831883454676e-07 -data8 0x3EE63D6178077654 //A14 = +1.06047480138940182343e-05 -data8 0xBF18646BC5FC70A7 //A13 = -9.30491237309283694347e-05 -data8 0x3F40F92F909117FE //A12 = +5.17986512144075019133e-04 -data8 0xBF611344289DE1E6 //A11 = -2.08438217390159994419e-03 -data8 0x3F7AF9FE6AD16DC0 //A10 = +6.58606893292862351928e-03 -data8 0xBF91D219E196CBA7 //A9 = -1.74030345858217321001e-02 -data8 0x3FA4AFDDA355854C //A8 = +4.04042493708041968315e-02 -data8 0xBFB5D465BB7025AE //A7 = -8.52721769916999425445e-02 -data8 0x3FC54C15A95B717D //A6 = +1.66384418195672549029e-01 -data8 0xBFD340A75B4B1AB5 //A5 = -3.00821150926292166899e-01 -data8 0x3FDFFFC0BFCD247F //A4 = +4.99984919839853542841e-01 -data8 0xBFE81270C361852B //A3 = -7.52251035312075583309e-01 -data8 0x3FEFFFFFC67295FC //A2 = +9.99999892800303301771e-01 -data8 0xBFF20DD74F8CD2BF //A1 = -1.12837916445020868099e+00 -data8 0x3FEFFFFFFFFE7C1D //A0 = +9.99999999988975570714e-01 -// Pol_1 -data8 0xBDE8EC4BDD953B56 //A15 = -1.81338928934942767144e-10 -data8 0x3E43607F269E2A1C //A14 = +9.02309090272196442358e-09 -data8 0xBE8C4D9E69C10E02 //A13 = -2.10875261143659275328e-07 -data8 0x3EC9CF2F84566725 //A12 = +3.07671055805877356583e-06 -data8 0xBF007980B1B46A4D //A11 = -3.14228438702169818945e-05 -data8 0x3F2F4C3AD6DEF24A //A10 = +2.38783056770846320260e-04 -data8 0xBF56F5129F8D30FA //A9 = -1.40120333363130546426e-03 -data8 0x3F7AA6C7ABFC38EE //A8 = +6.50671002200751820429e-03 -data8 0xBF98E7522CB84BEF //A7 = -2.43199195666185511109e-02 -data8 0x3FB2F68EB1C3D073 //A6 = +7.40746673580490638637e-02 -data8 0xBFC7C16055AC6385 //A5 = -1.85588876564704611769e-01 -data8 0x3FD8A707AEF5A440 //A4 = +3.85194702967570635211e-01 -data8 0xBFE547BFE39AE2EA //A3 = -6.65008492032112467310e-01 -data8 0x3FEE7C91BDF13578 //A2 = +9.52706213932898128515e-01 -data8 0xBFF1CB5B61F8C589 //A1 = -1.11214769621105541214e+00 -data8 0x3FEFEA56BC81FD37 //A0 = +9.97355812243688815239e-01 -// Pol_2 -data8 0xBD302724A12F46E0 //A15 = -5.73866382814058809406e-14 -data8 0x3D98889B75D3102E //A14 = +5.57829983681360947356e-12 -data8 0xBDF16EA15074A1E9 //A13 = -2.53671153922423457844e-10 -data8 0x3E3EC6E688CFEE5F //A12 = +7.16581828336436419561e-09 -data8 0xBE82E5ED44C52609 //A11 = -1.40802202239825487803e-07 -data8 0x3EC120BE5CE42353 //A10 = +2.04180535157522081699e-06 -data8 0xBEF7B8B0311A1911 //A9 = -2.26225266204633600888e-05 -data8 0x3F29A281F43FC238 //A8 = +1.95577968156184077632e-04 -data8 0xBF55E19858B3B7A4 //A7 = -1.33552434527526534043e-03 -data8 0x3F7DAC8C3D12E5FD //A6 = +7.24463253680473816303e-03 -data8 0xBF9FF9C04613FB47 //A5 = -3.12261622211693854028e-02 -data8 0x3FBB3D5DBF9D9366 //A4 = +1.06405123978743883370e-01 -data8 0xBFD224DE9F62C258 //A3 = -2.83500342989133623476e-01 -data8 0x3FE28A95CB8C6D3E //A2 = +5.79417131000276437708e-01 -data8 0xBFEC21205D358672 //A1 = -8.79043752717008257224e-01 -data8 0x3FEDAE44D5EDFE5B //A0 = +9.27523057776805771830e-01 -// Pol_3 -data8 0xBCA3BCA734AC82F1 //A15 = -1.36952437983096410260e-16 -data8 0x3D16740DC3990612 //A14 = +1.99425676175410093285e-14 -data8 0xBD77F4353812C46A //A13 = -1.36162367755616790260e-12 -data8 0x3DCFD0BE13C73DB4 //A12 = +5.78718761040355136007e-11 -data8 0xBE1D728DF71189B4 //A11 = -1.71406885583934105120e-09 -data8 0x3E64252C8CB710B5 //A10 = +3.75233795940731111303e-08 -data8 0xBEA514B93180F33D //A9 = -6.28261292774310809962e-07 -data8 0x3EE1381118CC7151 //A8 = +8.21066421390821904504e-06 -data8 0xBF1634404FB0FA72 //A7 = -8.47019436358372148764e-05 -data8 0x3F46B2CBBCF0EB32 //A6 = +6.92700845213200923490e-04 -data8 0xBF725C2B445E6D81 //A5 = -4.48243046949004063741e-03 -data8 0x3F974E7CFA4D89D9 //A4 = +2.27603462002522228717e-02 -data8 0xBFB6D7BAC2E342D1 //A3 = -8.92292714882032736443e-02 -data8 0x3FD0D156AD9CE2A6 //A2 = +2.62777013343603696631e-01 -data8 0xBFE1C228572AADB0 //A1 = -5.54950876471982857725e-01 -data8 0x3FE8A739F48B9A3B //A0 = +7.70413377406675619766e-01 -LOCAL_OBJECT_END(erfc_p_table) - - -.section .text -GLOBAL_LIBM_ENTRY(erfcf) - -// Form index i for table erfc_p_table as exponent of x -// We use i + bias in real calculations -{ .mlx - getf.exp GR_IndxPlusBias = f8 // (sign + exp + bias) of x - movl exp_GR_sig_inv_ln2 = 0xb8aa3b295c17f0bc //signif.of 1/ln2 -} -{ .mlx - addl EXP_AD_TB1 = @ltoff(exp_table_1), gp - movl exp_GR_rshf_2to56 = 0x4768000000000000 // 1.100 2^(63+56) -} -;; - -// Form argument EXP_NORM_f8 for exp(-x^2) -{ .mfi - ld8 EXP_AD_TB1 = [EXP_AD_TB1] - fcmp.ge.s1 p6,p7 = f8, f0 // p6: x >= 0 ,p7: x<0 - mov GR_BIAS = 0x0FFFF -} -{ .mfi - mov exp_GR_exp_2tom56 = 0xffff-56 - fnma.s1 EXP_NORM_f8 = f8, f8, f0 // -x^2 - mov GR_ExpMask = 0x1ffff -} -;; - -// Form two constants we need -// 1/ln2 * 2^63 to compute w = x * 1/ln2 * 128 -// 1.1000..000 * 2^(63+63-7) to right shift int(w) into the significand - -// p9: x = 0,+inf,-inf,nan,unnorm. -// p10: x!= 0,+inf,-inf,nan,unnorm. -{ .mfi - setf.sig EXP_INV_LN2_2TO63 = exp_GR_sig_inv_ln2 // Form 1/ln2*2^63 - fclass.m p9,p10 = f8,0xef - shl GR_ShftPi_bias = GR_BIAS, 7 -} -{ .mfi - setf.d EXP_RSHF_2TO56 = exp_GR_rshf_2to56 //Const 1.10*2^(63+56) - nop.f 0 - and GR_IndxPlusBias = GR_IndxPlusBias, GR_ExpMask // i + bias -} -;; - -{ .mfi - alloc r32 = ar.pfs, 0, 15, 4, 0 -(p6) fma.s1 FR_AbsArg = f1, f0, f8 // |x| if x >= 0 - cmp.lt p15,p0 = GR_IndxPlusBias, GR_BIAS//p15: i < 0 (for |x|<1) -} -{ .mlx - setf.exp EXP_2TOM56 = exp_GR_exp_2tom56 //2^-56 for scaling Nfloat - movl exp_GR_rshf = 0x43e8000000000000 //1.10 2^63,right shift. -} -;; - -{ .mfi - ldfps FR_POS_ARG_ASYMP, FR_NEG_ARG_ASYMP = [EXP_AD_TB1],8 - nop.f 0 -(p15) mov GR_IndxPlusBias = GR_BIAS //Let i = 0 if i < 0 -} -{ .mlx - mov GR_P_POINT_3 = 0x1A0 - movl GR_05 = 0x3fe0000000000000 -} -;; - -// Form shift GR_ShftPi from the beginning of erfc_p_table -// to the polynomial with number i -{ .mfi - ldfps FR_UnfBound, FR_EpsNorm = [EXP_AD_TB1],8 - nop.f 0 - shl GR_ShftPi = GR_IndxPlusBias, 7 -} -{ .mfi - setf.d EXP_RSHF = exp_GR_rshf // Form right shift 1.100 * 2^63 -(p7) fms.s1 FR_AbsArg = f1, f0, f8 // |x| if x < 0 - mov exp_TB1_size = 0x100 -} -;; - -// Form pointer GR_P_POINT_3 to the beginning of erfc_p_table -{ .mfi - setf.d FR_05 = GR_05 - nop.f 0 - sub GR_ShftPi = GR_ShftPi,GR_ShftPi_bias -} -{ .mfb - add GR_P_POINT_3 = GR_P_POINT_3, EXP_AD_TB1 - nop.f 0 -(p9) br.cond.spnt SPECIAL // For x = 0,+inf,-inf,nan,unnorm -} -;; - -{ .mfi - add GR_P_POINT_1 = GR_P_POINT_3, GR_ShftPi - nop.f 0 - add GR_P_POINT_2 = GR_P_POINT_3, GR_ShftPi -} -{ .mfi - ldfe exp_ln2_by_128_hi = [EXP_AD_TB1],16 - fma.s1 FR_NormX = f8,f1,f0 - add GR_P_POINT_3 = GR_P_POINT_3, GR_ShftPi -} -;; - -// Load coefficients for polynomial P15(x) -{ .mfi - ldfpd FR_A15, FR_A14 = [GR_P_POINT_1], 16 - nop.f 0 - add GR_P_POINT_3 = 0x30, GR_P_POINT_3 -} -{ .mfi - ldfe exp_ln2_by_128_lo = [EXP_AD_TB1], 16 - nop.f 0 - add GR_P_POINT_2 = 0x20, GR_P_POINT_2 -} -;; - -// Now EXP_AD_TB1 points to the beginning of table 1 -{ .mlx - ldfpd FR_A13, FR_A12 = [GR_P_POINT_1] - movl GR_1_by_6 = 0x3FC5555555555555 -} -{ .mfi - add GR_P_POINT_4 = 0x30, GR_P_POINT_2 - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - ldfpd FR_A11, FR_A10 = [GR_P_POINT_2] - fma.s1 FR_2 = f1, f1, f1 - mov exp_TB2_size = 0x80 -} -{ .mfi - ldfpd FR_A9, FR_A8 = [GR_P_POINT_3],16 - nop.f 0 - add GR_P_POINT_1 = 0x60 ,GR_P_POINT_1 -} -;; - -// W = X * Inv_log2_by_128 -// By adding 1.10...0*2^63 we shift and get round_int(W) in significand. -// We actually add 1.10...0*2^56 to X * Inv_log2 to do the same thing. -{ .mfi - ldfpd FR_A7, FR_A6 = [GR_P_POINT_3] - fma.s1 EXP_W_2TO56_RSH = EXP_NORM_f8,EXP_INV_LN2_2TO63,EXP_RSHF_2TO56 - add EXP_AD_TB2 = exp_TB1_size, EXP_AD_TB1 - -} -{ .mfi - ldfpd FR_A5, FR_A4 = [GR_P_POINT_4], 16 - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - ldfpd FR_A3, FR_A2 = [GR_P_POINT_4] - fmerge.s FR_X = f8,f8 - nop.i 0 -} -{ .mfi - ldfpd FR_A1, FR_A0 = [GR_P_POINT_1] - nop.f 0 - nop.i 0 -} -;; - -//p14: x < - NEG_ARG_ASYMP = -4.4 -> erfcf(x) ~=~ 2.0 -{ .mfi - setf.d FR_1_by_6 = GR_1_by_6 -(p7) fcmp.gt.unc.s1 p14,p0 = FR_AbsArg, FR_NEG_ARG_ASYMP //p7: x < 0 - nop.i 0 -} -;; - -//p15: x > POS_ARG_ASYMP = 10.06 -> erfcf(x) ~=~ 0.0 -{ .mfi - nop.m 0 -(p6) fcmp.gt.unc.s1 p15,p0 = FR_AbsArg, FR_POS_ARG_ASYMP //p6: x > 0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.le.s1 p8,p0 = FR_NormX, FR_UnfBound // p8: x <= UnfBound - nop.i 0 -} -{ .mfb - nop.m 0 -(p14) fnma.s.s0 FR_RESULT = FR_EpsNorm, FR_EpsNorm, FR_2//y = 2 if x <-4.4 -(p14) br.ret.spnt b0 -} -;; - -// Nfloat = round_int(W) -// The signficand of EXP_W_2TO56_RSH contains the rounded integer part of W, -// as a twos complement number in the lower bits (that is, it may be negative). -// That twos complement number (called N) is put into exp_GR_N. - -// Since EXP_W_2TO56_RSH is scaled by 2^56, it must be multiplied by 2^-56 -// before the shift constant 1.10000 * 2^63 is subtracted to yield EXP_Nfloat. -// Thus, EXP_Nfloat contains the floating point version of N - -{ .mfi - nop.m 0 - fms.s1 EXP_Nfloat = EXP_W_2TO56_RSH, EXP_2TOM56, EXP_RSHF - nop.i 0 -} -{ .mfb -(p15) mov GR_Parameter_TAG = 209 -(p15) fma.s.s0 FR_RESULT = FR_EpsNorm,FR_EpsNorm,f0 //Result.for x>10.06 -(p15) br.cond.spnt __libm_error_region -} -;; - -// Now we can calculate polynomial P15(x) -{ .mfi - nop.m 0 - fma.s1 FR_P15_1_1 = FR_AbsArg, FR_AbsArg, f0 // x ^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P15_0_1 = FR_A15, FR_AbsArg, FR_A14 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_P15_1_2 = FR_A13, FR_AbsArg, FR_A12 - nop.i 0 -} -;; - -{ .mfi - getf.sig exp_GR_N = EXP_W_2TO56_RSH - fma.s1 FR_P15_2_1 = FR_A9, FR_AbsArg, FR_A8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P15_2_2 = FR_A11, FR_AbsArg, FR_A10 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_P15_3_1 = FR_A5, FR_AbsArg, FR_A4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P15_3_2 = FR_A7, FR_AbsArg, FR_A6 - nop.i 0 -} -;; - -// exp_GR_index_1 has index_1 -// exp_GR_index_2_16 has index_2 * 16 -// exp_GR_biased_M has M -// exp_GR_index_1_16 has index_1 * 16 - -// r2 has true M -{ .mfi - and exp_GR_index_1 = 0x0f, exp_GR_N - fma.s1 FR_P15_4_1 = FR_A1, FR_AbsArg, FR_A0 - shr r2 = exp_GR_N, 0x7 - -} -{ .mfi - and exp_GR_index_2_16 = 0x70, exp_GR_N - fma.s1 FR_P15_4_2 = FR_A3, FR_AbsArg, FR_A2 - nop.i 0 -} -;; - -// EXP_AD_T1 has address of T1 -// EXP_AD_T2 has address if T2 - -{ .mfi - add EXP_AD_T2 = EXP_AD_TB2, exp_GR_index_2_16 - nop.f 0 - shladd EXP_AD_T1 = exp_GR_index_1, 4, EXP_AD_TB1 -} -{ .mfi - addl exp_GR_biased_M = 0xffff, r2 - fnma.s1 exp_r = EXP_Nfloat, exp_ln2_by_128_hi, EXP_NORM_f8 - nop.i 0 -} -;; - -// Create Scale = 2^M -// r = x - Nfloat * ln2_by_128_hi - -{ .mfi - setf.exp EXP_2M = exp_GR_biased_M - fma.s1 FR_P15_7_1 = FR_P15_0_1, FR_P15_1_1, FR_P15_1_2 - nop.i 0 -} -{ .mfi - ldfe exp_T2 = [EXP_AD_T2] - nop.f 0 - nop.i 0 -} -;; - -// Load T1 and T2 - -{ .mfi - ldfe exp_T1 = [EXP_AD_T1] - fma.s1 FR_P15_7_2 = FR_P15_1_1, FR_P15_1_1, f0 // x^4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P15_8_1 = FR_P15_1_1, FR_P15_2_2, FR_P15_2_1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_P15_9_1 = FR_P15_1_1, FR_P15_4_2, FR_P15_4_1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P15_9_2 = FR_P15_1_1, FR_P15_3_2, FR_P15_3_1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 exp_P = FR_1_by_6, exp_r, FR_05 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 exp_rsq = exp_r, exp_r, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_P15_13_1 = FR_P15_7_2, FR_P15_7_1, FR_P15_8_1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_P15_14_1 = FR_P15_7_2, FR_P15_9_2, FR_P15_9_1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P15_14_2 = FR_P15_7_2, FR_P15_7_2, f0 // x^8 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 exp_P = exp_P, exp_rsq, exp_r - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 exp_S1 = EXP_2M, exp_T2, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_Pol = FR_P15_14_2, FR_P15_13_1, FR_P15_14_1 // P15(x) - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 exp_S = exp_S1, exp_T1, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_Exp = exp_S, exp_P, exp_S // exp(-x^2) - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s.s0 FR_Tmpf = f8, f1, f0 // Flag d - nop.i 0 -} -;; - -//p6: result for 0 < x < = POS_ARG_ASYMP -//p7: result for - NEG_ARG_ASYMP <= x < 0 -//p8: exit for - NEG_ARG_ASYMP <= x <= UnfBound, x!=0 -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fma.s.s0 f8 = FR_Exp, FR_Pol, f0 - nop.i 0 -} -{ .mfb - mov GR_Parameter_TAG = 209 -(p7) fnma.s.s0 f8 = FR_Exp, FR_Pol, FR_2 -(p8) br.ret.sptk b0 -} -;; - -//p10: branch for UnfBound < x < = POS_ARG_ASYMP -{ .mfb - nop.m 0 - nop.f 0 -(p10) br.cond.spnt __libm_error_region -} -;; - -//Only via (p9) br.cond.spnt SPECIAL for x = 0,+inf,-inf,nan,unnorm -SPECIAL: - -{ .mfi - nop.m 0 - fclass.m.unc p10,p0 = f8,0x07 // p10: x = 0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fclass.m.unc p11,p0 = f8,0x21 // p11: x = +inf - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fclass.m.unc p12,p0 = f8,0x22 // p12 x = -inf - nop.i 0 -} -{ .mfb - nop.m 0 -(p10) fma.s.s0 f8 = f1, f1, f0 -(p10) br.ret.sptk b0 // Quick exit for x = 0 -} -;; - -{ .mfi - nop.m 0 - fclass.m.unc p13,p0 = f8,0xc3 // p13: x = nan - nop.i 0 -} -{ .mfb - nop.m 0 -(p11) fma.s.s0 f8 = f0, f1, f0 -(p11) br.ret.spnt b0 // Quick exit for x = +inf -} -;; -{ .mfi - nop.m 0 - fclass.m.unc p14,p0 = f8,0x0b // P14: x = unnormalized - nop.i 0 -} -{ .mfb - nop.m 0 -(p12) fma.s.s0 f8 = f1, f1, f1 -(p12) br.ret.spnt b0 // Quick exit for x = -inf -} -;; - -{ .mfb - nop.m 0 -(p13) fma.s.s0 f8 = f8, f1, f0 -(p13) br.ret.sptk b0 // Quick exit for x = nan -} -;; - -{ .mfb - nop.m 0 -(p14) fnma.s.s0 f8 = f8, f1, f1 -(p14) br.ret.sptk b0 // Quick exit for x = unnormalized -} -;; - -GLOBAL_LIBM_END(erfcf) - - -// Call via (p10) br.cond.spnt __libm_error_region -// for UnfBound < x < = POS_ARG_ASYMP -// and -// -// call via (p15) br.cond.spnt __libm_error_region -// for x > POS_ARG_ASYMP - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfs [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_erfcl.S b/sysdeps/ia64/fpu/s_erfcl.S deleted file mode 100644 index aaa0bb0240..0000000000 --- a/sysdeps/ia64/fpu/s_erfcl.S +++ /dev/null @@ -1,2063 +0,0 @@ -.file "erfcl.s" - - -// Copyright (c) 2001 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 11/12/01 Initial version -// 02/08/02 Added missing } -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align; -// used data8 for long double table values -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// long double erfcl(long double) -// -// Implementation and Algorithm Notes: -//============================================================== -// 1. 0 <= x <= 107.0 -// -// erfcl(x) ~=~ P15(z) * expl( -x^2 )/(dx + x), z = x - xc(i). -// -// Comment: -// -// Let x(i) = -1.0 + 2^(i/4),i=0,...27. So we have 28 unequal -// argument intervals [x(i),x(i+1)] with length ratio q = 2^(1/4). -// Values xc(i) we have in the table erfc_xc_table,xc(i)=x(i)for i = 0 -// and xc(i)= 0.5*( x(i)+x(i+1) ) for i>0. -// -// Let x(i)<= x < x(i+1). -// We can find i as exponent of number (x + 1)^4. -// -// Let P15(z)= a0+ a1*z +..+a15*z^15 - polynomial approximation of degree 15 -// for function erfcl(z+xc(i)) * expl( (z+xc(i))^2)* (dx+z+xc(i)) and -// -0.5*[x(i+1)-x(i)] <= z <= 0.5*[x(i+1)-x(i)]. -// -// Let Q(z)= (P(z)- S)/S, S = a0, rounded to 16 bits. -// Polynomial coefficients for Q(z) we have in the table erfc_Q_table as -// long double values -// -// We use multi precision to calculate input argument -x^2 for expl and -// for u = 1/(dx + x). -// -// Algorithm description for expl function see below. In accordance with -// denotation of this algorithm we have for expl: -// -// expl(X) ~=~ 2^K*T_1*(1+W_1)*T_2*(1+W_2)*(1+ poly(r)), X = -x^2. -// -// Final calculations for erfcl: -// -// erfcl(x) ~=~ -// -// 2^K*T_1*(1+W_1)*T_2*(1+W_2)*(1+ poly(r))*(1-dy)*S*(1+Q(z))*u*(1+du), -// -// where dy - low bits of x^2 and u, u*du - hi and low bits of 1/(dx + x). -// -// The order of calculations is the next: -// -// 1) M = 2^K*T_1*T_2*S without rounding error, -// 2) W = W_1 + (W_2 + W_1*W_2), where 1+W ~=~ (1+W_1)(1+W_2), -// 3) H = W - dy, where 1+H ~=~ (1+W )(1-dy), -// 4) R = poly(r)*H + poly(r), -// 5) R = H + R , where 1+R ~=~ (1+H )(1+poly(r)), -// 6) G = Q(z)*R + Q(z), -// 7) R1 = R + du, where 1+R1 ~=~ (1+R)(1+du), -// 8) G1 = R1 + G, where 1+G1 ~=~ (1+R1)(1+Q(z)), -// 9) V = G1*M*u, -// 10) erfcl(x) ~=~ M*u + V -// -// 2. -6.5 <= x < 0 -// -// erfcl(x) = 2.0 - erfl(-x) -// -// 3. x > 107.0 -// erfcl(x) ~=~ 0.0 -// -// 4. x < -6.5 -// erfcl(x) ~=~ 2.0 - -// Special values -//============================================================== -// erfcl(+0) = 1.0 -// erfcl(-0) = 1.0 - -// erfcl(+qnan) = +qnan -// erfcl(-qnan) = -qnan -// erfcl(+snan) = +qnan -// erfcl(-snan) = -qnan - -// erfcl(-inf) = 2.0 -// erfcl(+inf) = +0 - -//============================================================== -// Algorithm description of used expl function. -// -// Implementation and Algorithm Notes: -// -// ker_exp_64( in_FR : X, -// out_FR : Y_hi, -// out_FR : Y_lo, -// out_FR : scale, -// out_PR : Safe ) -// -// On input, X is in register format -// -// On output, -// -// scale*(Y_hi + Y_lo) approximates exp(X) -// -// The accuracy is sufficient for a highly accurate 64 sig. -// bit implementation. Safe is set if there is no danger of -// overflow/underflow when the result is composed from scale, -// Y_hi and Y_lo. Thus, we can have a fast return if Safe is set. -// Otherwise, one must prepare to handle the possible exception -// appropriately. Note that SAFE not set (false) does not mean -// that overflow/underflow will occur; only the setting of SAFE -// guarantees the opposite. -// -// **** High Level Overview **** -// -// The method consists of three cases. -// -// If |X| < Tiny use case exp_tiny; -// else if |X| < 2^(-6) use case exp_small; -// else use case exp_regular; -// -// Case exp_tiny: -// -// 1 + X can be used to approximate exp(X) -// X + X^2/2 can be used to approximate exp(X) - 1 -// -// Case exp_small: -// -// Here, exp(X) and exp(X) - 1 can all be -// approximated by a relatively simple polynomial. -// -// This polynomial resembles the truncated Taylor series -// -// exp(w) = 1 + w + w^2/2! + w^3/3! + ... + w^n/n! -// -// Case exp_regular: -// -// Here we use a table lookup method. The basic idea is that in -// order to compute exp(X), we accurately decompose X into -// -// X = N * log(2)/(2^12) + r, |r| <= log(2)/2^13. -// -// Hence -// -// exp(X) = 2^( N / 2^12 ) * exp(r). -// -// The value 2^( N / 2^12 ) is obtained by simple combinations -// of values calculated beforehand and stored in table; exp(r) -// is approximated by a short polynomial because |r| is small. -// -// We elaborate this method in 4 steps. -// -// Step 1: Reduction -// -// The value 2^12/log(2) is stored as a double-extended number -// L_Inv. -// -// N := round_to_nearest_integer( X * L_Inv ) -// -// The value log(2)/2^12 is stored as two numbers L_hi and L_lo so -// that r can be computed accurately via -// -// r := (X - N*L_hi) - N*L_lo -// -// We pick L_hi such that N*L_hi is representable in 64 sig. bits -// and thus the FMA X - N*L_hi is error free. So r is the -// 1 rounding error from an exact reduction with respect to -// -// L_hi + L_lo. -// -// In particular, L_hi has 30 significant bit and can be stored -// as a double-precision number; L_lo has 64 significant bits and -// stored as a double-extended number. -// -// Step 2: Approximation -// -// exp(r) - 1 is approximated by a short polynomial of the form -// -// r + A_1 r^2 + A_2 r^3 + A_3 r^4 . -// -// Step 3: Composition from Table Values -// -// The value 2^( N / 2^12 ) can be composed from a couple of tables -// of precalculated values. First, express N as three integers -// K, M_1, and M_2 as -// -// N = K * 2^12 + M_1 * 2^6 + M_2 -// -// Where 0 <= M_1, M_2 < 2^6; and K can be positive or negative. -// When N is represented in 2's complement, M_2 is simply the 6 -// lsb's, M_1 is the next 6, and K is simply N shifted right -// arithmetically (sign extended) by 12 bits. -// -// Now, 2^( N / 2^12 ) is simply -// -// 2^K * 2^( M_1 / 2^6 ) * 2^( M_2 / 2^12 ) -// -// Clearly, 2^K needs no tabulation. The other two values are less -// trivial because if we store each accurately to more than working -// precision, than its product is too expensive to calculate. We -// use the following method. -// -// Define two mathematical values, delta_1 and delta_2, implicitly -// such that -// -// T_1 = exp( [M_1 log(2)/2^6] - delta_1 ) -// T_2 = exp( [M_2 log(2)/2^12] - delta_2 ) -// -// are representable as 24 significant bits. To illustrate the idea, -// we show how we define delta_1: -// -// T_1 := round_to_24_bits( exp( M_1 log(2)/2^6 ) ) -// delta_1 = (M_1 log(2)/2^6) - log( T_1 ) -// -// The last equality means mathematical equality. We then tabulate -// -// W_1 := exp(delta_1) - 1 -// W_2 := exp(delta_2) - 1 -// -// Both in double precision. -// -// From the tabulated values T_1, T_2, W_1, W_2, we compose the values -// T and W via -// -// T := T_1 * T_2 ...exactly -// W := W_1 + (1 + W_1)*W_2 -// -// W approximates exp( delta ) - 1 where delta = delta_1 + delta_2. -// The mathematical product of T and (W+1) is an accurate representation -// of 2^(M_1/2^6) * 2^(M_2/2^12). -// -// Step 4. Reconstruction -// -// Finally, we can reconstruct exp(X), exp(X) - 1. -// Because -// -// X = K * log(2) + (M_1*log(2)/2^6 - delta_1) -// + (M_2*log(2)/2^12 - delta_2) -// + delta_1 + delta_2 + r ...accurately -// We have -// -// exp(X) ~=~ 2^K * ( T + T*[exp(delta_1+delta_2+r) - 1] ) -// ~=~ 2^K * ( T + T*[exp(delta + r) - 1] ) -// ~=~ 2^K * ( T + T*[(exp(delta)-1) -// + exp(delta)*(exp(r)-1)] ) -// ~=~ 2^K * ( T + T*( W + (1+W)*poly(r) ) ) -// ~=~ 2^K * ( Y_hi + Y_lo ) -// -// where Y_hi = T and Y_lo = T*(W + (1+W)*poly(r)) -// -// For exp(X)-1, we have -// -// exp(X)-1 ~=~ 2^K * ( Y_hi + Y_lo ) - 1 -// ~=~ 2^K * ( Y_hi + Y_lo - 2^(-K) ) -// -// and we combine Y_hi + Y_lo - 2^(-N) into the form of two -// numbers Y_hi + Y_lo carefully. -// -// **** Algorithm Details **** -// -// A careful algorithm must be used to realize the mathematical ideas -// accurately. We describe each of the three cases. We assume SAFE -// is preset to be TRUE. -// -// Case exp_tiny: -// -// The important points are to ensure an accurate result under -// different rounding directions and a correct setting of the SAFE -// flag. -// -// If expm1 is 1, then -// SAFE := False ...possibility of underflow -// Scale := 1.0 -// Y_hi := X -// Y_lo := 2^(-17000) -// Else -// Scale := 1.0 -// Y_hi := 1.0 -// Y_lo := X ...for different rounding modes -// Endif -// -// Case exp_small: -// -// Here we compute a simple polynomial. To exploit parallelism, we split -// the polynomial into several portions. -// -// Let r = X -// -// If exp ...i.e. exp( argument ) -// -// rsq := r * r; -// r4 := rsq*rsq -// poly_lo := P_3 + r*(P_4 + r*(P_5 + r*P_6)) -// poly_hi := r + rsq*(P_1 + r*P_2) -// Y_lo := poly_hi + r4 * poly_lo -// Y_hi := 1.0 -// Scale := 1.0 -// -// Else ...i.e. exp( argument ) - 1 -// -// rsq := r * r -// r4 := rsq * rsq -// r6 := rsq * r4 -// poly_lo := r6*(Q_5 + r*(Q_6 + r*Q_7)) -// poly_hi := Q_1 + r*(Q_2 + r*(Q_3 + r*Q_4)) -// Y_lo := rsq*poly_hi + poly_lo -// Y_hi := X -// Scale := 1.0 -// -// Endif -// -// Case exp_regular: -// -// The previous description contain enough information except the -// computation of poly and the final Y_hi and Y_lo in the case for -// exp(X)-1. -// -// The computation of poly for Step 2: -// -// rsq := r*r -// poly := r + rsq*(A_1 + r*(A_2 + r*A_3)) -// -// For the case exp(X) - 1, we need to incorporate 2^(-K) into -// Y_hi and Y_lo at the end of Step 4. -// -// If K > 10 then -// Y_lo := Y_lo - 2^(-K) -// Else -// If K < -10 then -// Y_lo := Y_hi + Y_lo -// Y_hi := -2^(-K) -// Else -// Y_hi := Y_hi - 2^(-K) -// End If -// End If -// - -// Overview of operation -//============================================================== - -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f9 -> f14, f36 -> f126 - -// General registers used: -// r32 -> r71 - -// Predicate registers used: -// p6 -> p15 - -// Assembly macros -//============================================================== -// GR for exp(X) -GR_ad_Arg = r33 -GR_ad_C = r34 -GR_ERFC_S_TB = r35 -GR_signexp_x = r36 -GR_exp_x = r36 -GR_exp_mask = r37 -GR_ad_W1 = r38 -GR_ad_W2 = r39 -GR_M2 = r40 -GR_M1 = r41 -GR_K = r42 -GR_exp_2_k = r43 -GR_ad_T1 = r44 -GR_ad_T2 = r45 -GR_N_fix = r46 -GR_ad_P = r47 -GR_exp_bias = r48 -GR_BIAS = r48 -GR_exp_half = r49 -GR_sig_inv_ln2 = r50 -GR_rshf_2to51 = r51 -GR_exp_2tom51 = r52 -GR_rshf = r53 - -// GR for erfcl(x) -//============================================================== - -GR_ERFC_XC_TB = r54 -GR_ERFC_P_TB = r55 -GR_IndxPlusBias = r56 -GR_P_POINT_1 = r57 -GR_P_POINT_2 = r58 -GR_AbsArg = r59 -GR_ShftXBi = r60 -GR_ShftPi = r61 -GR_mBIAS = r62 -GR_ShftPi_bias = r63 -GR_ShftXBi_bias = r64 -GR_ShftA14 = r65 -GR_ShftA15 = r66 -GR_EpsNorm = r67 -GR_0x1 = r68 -GR_ShftPi_8 = r69 -GR_26PlusBias = r70 -GR_27PlusBias = r71 - -// GR for __libm_support call -//============================================================== -GR_SAVE_B0 = r64 -GR_SAVE_PFS = r65 -GR_SAVE_GP = r66 -GR_SAVE_SP = r67 - -GR_Parameter_X = r68 -GR_Parameter_Y = r69 -GR_Parameter_RESULT = r70 -GR_Parameter_TAG = r71 - -//============================================================== -// Floating Point Registers -// -FR_RSHF_2TO51 = f10 -FR_INV_LN2_2TO63 = f11 -FR_W_2TO51_RSH = f12 -FR_2TOM51 = f13 -FR_RSHF = f14 - -FR_scale = f36 -FR_float_N = f37 -FR_N_signif = f38 -FR_L_hi = f39 -FR_L_lo = f40 -FR_r = f41 -FR_W1 = f42 -FR_T1 = f43 -FR_W2 = f44 -FR_T2 = f45 -FR_rsq = f46 -FR_C2 = f47 -FR_C3 = f48 -FR_poly = f49 -FR_P6 = f49 -FR_T = f50 -FR_P5 = f50 -FR_P4 = f51 -FR_W = f51 -FR_P3 = f52 -FR_Wp1 = f52 -FR_P2 = f53 -FR_P1 = f54 -FR_Q7 = f56 -FR_Q6 = f57 -FR_Q5 = f58 -FR_Q4 = f59 -FR_Q3 = f60 -FR_Q2 = f61 -FR_Q1 = f62 -FR_C1 = f63 -FR_A15 = f64 -FR_ch_dx = f65 -FR_T_scale = f66 -FR_norm_x = f67 -FR_AbsArg = f68 -FR_POS_ARG_ASYMP = f69 -FR_NEG_ARG_ASYMP = f70 -FR_Tmp = f71 -FR_Xc = f72 -FR_A0 = f73 -FR_A1 = f74 -FR_A2 = f75 -FR_A3 = f76 -FR_A4 = f77 -FR_A5 = f78 -FR_A6 = f79 -FR_A7 = f80 -FR_A8 = f81 -FR_A9 = f82 -FR_A10 = f83 -FR_A11 = f84 -FR_A12 = f85 -FR_A13 = f86 -FR_A14 = f87 -FR_P15_0_1 = f88 -FR_P15_8_1 = f88 -FR_P15_1_1 = f89 -FR_P15_8_2 = f89 -FR_P15_1_2 = f90 -FR_P15_2_1 = f91 -FR_P15_2_2 = f92 -FR_P15_3_1 = f93 -FR_P15_3_2 = f94 -FR_P15_4_2 = f95 -FR_P15_7_1 = f96 -FR_P15_7_2 = f97 -FR_P15_9_1 = f98 -FR_P15_9_2 = f99 -FR_P15_13_1 = f100 -FR_P15_14_1 = f101 -FR_P15_14_2 = f102 -FR_Tmp2 = f103 -FR_Xpdx_lo = f104 -FR_2 = f105 -FR_xsq_lo = f106 -FR_LocArg = f107 -FR_Tmpf = f108 -FR_Tmp1 = f109 -FR_EpsNorm = f110 -FR_UnfBound = f111 -FR_NormX = f112 -FR_Xpdx_hi = f113 -FR_dU = f114 -FR_H = f115 -FR_G = f116 -FR_V = f117 -FR_M = f118 -FR_U = f119 -FR_Q = f120 -FR_S = f121 -FR_R = f122 -FR_res_pos_x_hi = f123 -FR_res_pos_x_lo = f124 -FR_dx = f125 -FR_dx1 = f126 - -// for error handler routine -FR_X = f9 -FR_Y = f0 -FR_RESULT = f8 - -// Data tables -//============================================================== -RODATA -.align 16 - -// ************* DO NOT CHANGE ORDER OF THESE TABLES ******************** -LOCAL_OBJECT_START(exp_table_1) - -data8 0xae89f995ad3ad5ea , 0x00003ffe // x = 0.681..,bound for dx = 0.875 -data8 0x405AC00000000000 , 0x401A000000000000 //ARG_ASYMP,NEG_ARG_ASYMP -data8 0x3FE4000000000000 , 0x3FEC000000000000 //0.625,0.875 -data8 0xD5126065B720A4e9 , 0x00004005 // underflow boundary -data8 0x8000000000000000 , 0x00000001 //FR_EpsNorm -LOCAL_OBJECT_END(exp_table_1) - -LOCAL_OBJECT_START(Constants_exp_64_Arg) -data8 0xB17217F400000000,0x00003FF2 //L_hi = hi part log(2)/2^12 -data8 0xF473DE6AF278ECE6,0x00003FD4 //L_lo = lo part log(2)/2^12 -LOCAL_OBJECT_END(Constants_exp_64_Arg) - -LOCAL_OBJECT_START(Constants_exp_64_C) -data8 0xAAAAAAABB1B736A0,0x00003FFA // C3 -data8 0xAAAAAAAB90CD6327,0x00003FFC // C2 -data8 0xFFFFFFFFFFFFFFFF,0x00003FFD // C1 -LOCAL_OBJECT_END(Constants_exp_64_C) - -LOCAL_OBJECT_START(Constants_exp_64_T1) -data4 0x3F800000,0x3F8164D2,0x3F82CD87,0x3F843A29 -data4 0x3F85AAC3,0x3F871F62,0x3F88980F,0x3F8A14D5 -data4 0x3F8B95C2,0x3F8D1ADF,0x3F8EA43A,0x3F9031DC -data4 0x3F91C3D3,0x3F935A2B,0x3F94F4F0,0x3F96942D -data4 0x3F9837F0,0x3F99E046,0x3F9B8D3A,0x3F9D3EDA -data4 0x3F9EF532,0x3FA0B051,0x3FA27043,0x3FA43516 -data4 0x3FA5FED7,0x3FA7CD94,0x3FA9A15B,0x3FAB7A3A -data4 0x3FAD583F,0x3FAF3B79,0x3FB123F6,0x3FB311C4 -data4 0x3FB504F3,0x3FB6FD92,0x3FB8FBAF,0x3FBAFF5B -data4 0x3FBD08A4,0x3FBF179A,0x3FC12C4D,0x3FC346CD -data4 0x3FC5672A,0x3FC78D75,0x3FC9B9BE,0x3FCBEC15 -data4 0x3FCE248C,0x3FD06334,0x3FD2A81E,0x3FD4F35B -data4 0x3FD744FD,0x3FD99D16,0x3FDBFBB8,0x3FDE60F5 -data4 0x3FE0CCDF,0x3FE33F89,0x3FE5B907,0x3FE8396A -data4 0x3FEAC0C7,0x3FED4F30,0x3FEFE4BA,0x3FF28177 -data4 0x3FF5257D,0x3FF7D0DF,0x3FFA83B3,0x3FFD3E0C -LOCAL_OBJECT_END(Constants_exp_64_T1) - -LOCAL_OBJECT_START(Constants_exp_64_T2) -data4 0x3F800000,0x3F80058C,0x3F800B18,0x3F8010A4 -data4 0x3F801630,0x3F801BBD,0x3F80214A,0x3F8026D7 -data4 0x3F802C64,0x3F8031F2,0x3F803780,0x3F803D0E -data4 0x3F80429C,0x3F80482B,0x3F804DB9,0x3F805349 -data4 0x3F8058D8,0x3F805E67,0x3F8063F7,0x3F806987 -data4 0x3F806F17,0x3F8074A8,0x3F807A39,0x3F807FCA -data4 0x3F80855B,0x3F808AEC,0x3F80907E,0x3F809610 -data4 0x3F809BA2,0x3F80A135,0x3F80A6C7,0x3F80AC5A -data4 0x3F80B1ED,0x3F80B781,0x3F80BD14,0x3F80C2A8 -data4 0x3F80C83C,0x3F80CDD1,0x3F80D365,0x3F80D8FA -data4 0x3F80DE8F,0x3F80E425,0x3F80E9BA,0x3F80EF50 -data4 0x3F80F4E6,0x3F80FA7C,0x3F810013,0x3F8105AA -data4 0x3F810B41,0x3F8110D8,0x3F81166F,0x3F811C07 -data4 0x3F81219F,0x3F812737,0x3F812CD0,0x3F813269 -data4 0x3F813802,0x3F813D9B,0x3F814334,0x3F8148CE -data4 0x3F814E68,0x3F815402,0x3F81599C,0x3F815F37 -LOCAL_OBJECT_END(Constants_exp_64_T2) - -LOCAL_OBJECT_START(Constants_exp_64_W1) -data8 0x0000000000000000, 0xBE384454171EC4B4 -data8 0xBE6947414AA72766, 0xBE5D32B6D42518F8 -data8 0x3E68D96D3A319149, 0xBE68F4DA62415F36 -data8 0xBE6DDA2FC9C86A3B, 0x3E6B2E50F49228FE -data8 0xBE49C0C21188B886, 0x3E64BFC21A4C2F1F -data8 0xBE6A2FBB2CB98B54, 0x3E5DC5DE9A55D329 -data8 0x3E69649039A7AACE, 0x3E54728B5C66DBA5 -data8 0xBE62B0DBBA1C7D7D, 0x3E576E0409F1AF5F -data8 0x3E6125001A0DD6A1, 0xBE66A419795FBDEF -data8 0xBE5CDE8CE1BD41FC, 0xBE621376EA54964F -data8 0x3E6370BE476E76EE, 0x3E390D1A3427EB92 -data8 0x3E1336DE2BF82BF8, 0xBE5FF1CBD0F7BD9E -data8 0xBE60A3550CEB09DD, 0xBE5CA37E0980F30D -data8 0xBE5C541B4C082D25, 0xBE5BBECA3B467D29 -data8 0xBE400D8AB9D946C5, 0xBE5E2A0807ED374A -data8 0xBE66CB28365C8B0A, 0x3E3AAD5BD3403BCA -data8 0x3E526055C7EA21E0, 0xBE442C75E72880D6 -data8 0x3E58B2BB85222A43, 0xBE5AAB79522C42BF -data8 0xBE605CB4469DC2BC, 0xBE589FA7A48C40DC -data8 0xBE51C2141AA42614, 0xBE48D087C37293F4 -data8 0x3E367A1CA2D673E0, 0xBE51BEBB114F7A38 -data8 0xBE6348E5661A4B48, 0xBDF526431D3B9962 -data8 0x3E3A3B5E35A78A53, 0xBE46C46C1CECD788 -data8 0xBE60B7EC7857D689, 0xBE594D3DD14F1AD7 -data8 0xBE4F9C304C9A8F60, 0xBE52187302DFF9D2 -data8 0xBE5E4C8855E6D68F, 0xBE62140F667F3DC4 -data8 0xBE36961B3BF88747, 0x3E602861C96EC6AA -data8 0xBE3B5151D57FD718, 0x3E561CD0FC4A627B -data8 0xBE3A5217CA913FEA, 0x3E40A3CC9A5D193A -data8 0xBE5AB71310A9C312, 0x3E4FDADBC5F57719 -data8 0x3E361428DBDF59D5, 0x3E5DB5DB61B4180D -data8 0xBE42AD5F7408D856, 0x3E2A314831B2B707 -LOCAL_OBJECT_END(Constants_exp_64_W1) - -LOCAL_OBJECT_START(Constants_exp_64_W2) -data8 0x0000000000000000, 0xBE641F2537A3D7A2 -data8 0xBE68DD57AD028C40, 0xBE5C77D8F212B1B6 -data8 0x3E57878F1BA5B070, 0xBE55A36A2ECAE6FE -data8 0xBE620608569DFA3B, 0xBE53B50EA6D300A3 -data8 0x3E5B5EF2223F8F2C, 0xBE56A0D9D6DE0DF4 -data8 0xBE64EEF3EAE28F51, 0xBE5E5AE2367EA80B -data8 0x3E47CB1A5FCBC02D, 0xBE656BA09BDAFEB7 -data8 0x3E6E70C6805AFEE7, 0xBE6E0509A3415EBA -data8 0xBE56856B49BFF529, 0x3E66DD3300508651 -data8 0x3E51165FC114BC13, 0x3E53333DC453290F -data8 0x3E6A072B05539FDA, 0xBE47CD877C0A7696 -data8 0xBE668BF4EB05C6D9, 0xBE67C3E36AE86C93 -data8 0xBE533904D0B3E84B, 0x3E63E8D9556B53CE -data8 0x3E212C8963A98DC8, 0xBE33138F032A7A22 -data8 0x3E530FA9BC584008, 0xBE6ADF82CCB93C97 -data8 0x3E5F91138370EA39, 0x3E5443A4FB6A05D8 -data8 0x3E63DACD181FEE7A, 0xBE62B29DF0F67DEC -data8 0x3E65C4833DDE6307, 0x3E5BF030D40A24C1 -data8 0x3E658B8F14E437BE, 0xBE631C29ED98B6C7 -data8 0x3E6335D204CF7C71, 0x3E529EEDE954A79D -data8 0x3E5D9257F64A2FB8, 0xBE6BED1B854ED06C -data8 0x3E5096F6D71405CB, 0xBE3D4893ACB9FDF5 -data8 0xBDFEB15801B68349, 0x3E628D35C6A463B9 -data8 0xBE559725ADE45917, 0xBE68C29C042FC476 -data8 0xBE67593B01E511FA, 0xBE4A4313398801ED -data8 0x3E699571DA7C3300, 0x3E5349BE08062A9E -data8 0x3E5229C4755BB28E, 0x3E67E42677A1F80D -data8 0xBE52B33F6B69C352, 0xBE6B3550084DA57F -data8 0xBE6DB03FD1D09A20, 0xBE60CBC42161B2C1 -data8 0x3E56ED9C78A2B771, 0xBE508E319D0FA795 -data8 0xBE59482AFD1A54E9, 0xBE2A17CEB07FD23E -data8 0x3E68BF5C17365712, 0x3E3956F9B3785569 -LOCAL_OBJECT_END(Constants_exp_64_W2) - - -LOCAL_OBJECT_START(erfc_xc_table) - -data8 0x0000000000000000, 0x00000000 //XC[0] = +0.00000000000000000000e-01L -data8 0x9A79C70000000000, 0x00003FFD //XC[1] = +3.01710337400436401367e-01L -data8 0x8C49EF0000000000, 0x00003FFE //XC[2] = +5.48003137111663818359e-01L -data8 0xD744FC0000000000, 0x00003FFE //XC[3] = +8.40896368026733398438e-01L -data8 0x9837F00000000000, 0x00003FFF //XC[4] = +1.18920707702636718750e+00L -data8 0xCD3CE30000000000, 0x00003FFF //XC[5] = +1.60342061519622802734e+00L -data8 0x8624F70000000000, 0x00004000 //XC[6] = +2.09600615501403808594e+00L -data8 0xABA27E0000000000, 0x00004000 //XC[7] = +2.68179273605346679688e+00L -data8 0xD837F00000000000, 0x00004000 //XC[8] = +3.37841415405273437500e+00L -data8 0x869E710000000000, 0x00004001 //XC[9] = +4.20684099197387695313e+00L -data8 0xA624F70000000000, 0x00004001 //XC[10] = +5.19201231002807617188e+00L -data8 0xCBA27E0000000000, 0x00004001 //XC[11] = +6.36358547210693359375e+00L -data8 0xF837F00000000000, 0x00004001 //XC[12] = +7.75682830810546875000e+00L -data8 0x969E710000000000, 0x00004002 //XC[13] = +9.41368198394775390625e+00L -data8 0xB624F70000000000, 0x00004002 //XC[14] = +1.13840246200561523438e+01L -data8 0xDBA27E0000000000, 0x00004002 //XC[15] = +1.37271709442138671875e+01L -data8 0x841BF80000000000, 0x00004003 //XC[16] = +1.65136566162109375000e+01L -data8 0x9E9E710000000000, 0x00004003 //XC[17] = +1.98273639678955078125e+01L -data8 0xBE24F70000000000, 0x00004003 //XC[18] = +2.37680492401123046875e+01L -data8 0xE3A27E0000000000, 0x00004003 //XC[19] = +2.84543418884277343750e+01L -data8 0x881BF80000000000, 0x00004004 //XC[20] = +3.40273132324218750000e+01L -data8 0xA29E710000000000, 0x00004004 //XC[21] = +4.06547279357910156250e+01L -data8 0xC224F70000000000, 0x00004004 //XC[22] = +4.85360984802246093750e+01L -data8 0xE7A27E0000000000, 0x00004004 //XC[23] = +5.79086837768554687500e+01L -data8 0x8A1BF80000000000, 0x00004005 //XC[24] = +6.90546264648437500000e+01L -data8 0xA49E710000000000, 0x00004005 //XC[25] = +8.23094558715820312500e+01L -data8 0xC424F70000000000, 0x00004005 //XC[26] = +9.80721969604492187500e+01L -data8 0xD5A27E0000000000, 0x00004005 //XC[27] = +1.06817367553710937500e+02L -LOCAL_OBJECT_END(erfc_xc_table) - -LOCAL_OBJECT_START(erfc_s_table) - -data8 0xE000000000000000, 0x00003FFE //s[0] = +8.75000000000000000000e-01L -data8 0xDCEF000000000000, 0x00003FFE //s[1] = +8.63021850585937500000e-01L -data8 0xD79D000000000000, 0x00003FFE //s[2] = +8.42239379882812500000e-01L -data8 0xB25E000000000000, 0x00003FFE //s[3] = +6.96746826171875000000e-01L -data8 0xB0EA000000000000, 0x00003FFE //s[4] = +6.91070556640625000000e-01L -data8 0xAE3F000000000000, 0x00003FFE //s[5] = +6.80648803710937500000e-01L -data8 0xAB05000000000000, 0x00003FFE //s[6] = +6.68045043945312500000e-01L -data8 0xA7AC000000000000, 0x00003FFE //s[7] = +6.54968261718750000000e-01L -data8 0xA478000000000000, 0x00003FFE //s[8] = +6.42456054687500000000e-01L -data8 0xA18D000000000000, 0x00003FFE //s[9] = +6.31057739257812500000e-01L -data8 0x9EF8000000000000, 0x00003FFE //s[10] = +6.20971679687500000000e-01L -data8 0x9CBA000000000000, 0x00003FFE //s[11] = +6.12213134765625000000e-01L -data8 0x9ACD000000000000, 0x00003FFE //s[12] = +6.04690551757812500000e-01L -data8 0x992A000000000000, 0x00003FFE //s[13] = +5.98297119140625000000e-01L -data8 0x97C7000000000000, 0x00003FFE //s[14] = +5.92880249023437500000e-01L -data8 0x969C000000000000, 0x00003FFE //s[15] = +5.88317871093750000000e-01L -data8 0x95A0000000000000, 0x00003FFE //s[16] = +5.84472656250000000000e-01L -data8 0x94CB000000000000, 0x00003FFE //s[17] = +5.81222534179687500000e-01L -data8 0x9419000000000000, 0x00003FFE //s[18] = +5.78506469726562500000e-01L -data8 0x9383000000000000, 0x00003FFE //s[19] = +5.76217651367187500000e-01L -data8 0x9305000000000000, 0x00003FFE //s[20] = +5.74295043945312500000e-01L -data8 0x929B000000000000, 0x00003FFE //s[21] = +5.72677612304687500000e-01L -data8 0x9242000000000000, 0x00003FFE //s[22] = +5.71319580078125000000e-01L -data8 0x91F8000000000000, 0x00003FFE //s[23] = +5.70190429687500000000e-01L -data8 0x91B9000000000000, 0x00003FFE //s[24] = +5.69229125976562500000e-01L -data8 0x9184000000000000, 0x00003FFE //s[25] = +5.68420410156250000000e-01L -data8 0x9158000000000000, 0x00003FFE //s[26] = +5.67749023437500000000e-01L -data8 0x9145000000000000, 0x00003FFE //s[27] = +5.67459106445312500000e-01L -LOCAL_OBJECT_END(erfc_s_table) - -LOCAL_OBJECT_START(erfc_Q_table) -// Q(z)= (P(z)- S)/S -// -// Pol0 -data8 0x98325D50F9DC3499, 0x0000BFAA //A0 = +3.07358861423101280650e-26L -data8 0xED35081A2494DDD9, 0x00003FF8 //A1 = +1.44779757616302832466e-02L -data8 0x9443549BCD0F94CE, 0x0000BFFD //A2 = -2.89576190966300084405e-01L -data8 0xC7FD4B98ECF3DBBF, 0x00003FFD //A3 = +3.90604364793467799170e-01L -data8 0xB82CE31288B49759, 0x0000BFFD //A4 = -3.59717460644199233866e-01L -data8 0x8A8293447BEF69B5, 0x00003FFD //A5 = +2.70527460203054582368e-01L -data8 0xB5793E30EE36766C, 0x0000BFFC //A6 = -1.77220317589265674647e-01L -data8 0xD6066D16BBDECE17, 0x00003FFB //A7 = +1.04504444366724593714e-01L -data8 0xE7C783CE3C997BD8, 0x0000BFFA //A8 = -5.65867565781331646771e-02L -data8 0xE9969EBC2F5B2828, 0x00003FF9 //A9 = +2.85142040533900194955e-02L -data8 0xDD31D619F29AD7BF, 0x0000BFF8 //A10 = -1.35006514390540367929e-02L -data8 0xC63A20EB59768F3A, 0x00003FF7 //A11 = +6.04940993680332271481e-03L -data8 0xA8DEC641AACEB600, 0x0000BFF6 //A12 = -2.57675495383156581601e-03L -data8 0x87F0E77BA914FBEB, 0x00003FF5 //A13 = +1.03714776726541296794e-03L -data8 0xC306C2894C5CEF2D, 0x0000BFF3 //A14 = -3.71983348634136412407e-04L -data8 0xBDAB416A989D0697, 0x00003FF1 //A15 = +9.04412111877987292294e-05L -// Pol1 -data8 0x82808893DA2DD83F, 0x00003FEE //A0 = +7.77853035974467145290e-06L -data8 0xAE9CD9DCADC86113, 0x0000BFFB //A1 = -8.52601070853077921197e-02L -data8 0x9D429743E312AD9F, 0x0000BFFB //A2 = -7.67871682732076080494e-02L -data8 0x8637FC533AE805DC, 0x00003FFC //A3 = +1.31072943286859831330e-01L -data8 0xF68DBE3639ABCB6E, 0x0000BFFB //A4 = -1.20387540845703264588e-01L -data8 0xB168FFC3CFA71256, 0x00003FFB //A5 = +8.66260511047190247534e-02L -data8 0xDBC5078A7EA89236, 0x0000BFFA //A6 = -5.36546988077281230848e-02L -data8 0xF4331FEDB2CB838F, 0x00003FF9 //A7 = +2.98095344165515989564e-02L -data8 0xF909173C0E61C25D, 0x0000BFF8 //A8 = -1.51999213123642373375e-02L -data8 0xEC83560A2ACB23E9, 0x00003FF7 //A9 = +7.21780491979582106904e-03L -data8 0xD350D62C4FEAD8F5, 0x0000BFF6 //A10 = -3.22442272982896360044e-03L -data8 0xB2F44F4B3FD9B826, 0x00003FF5 //A11 = +1.36531322425499451283e-03L -data8 0x9078BC61927671C6, 0x0000BFF4 //A12 = -5.51115510818844954547e-04L -data8 0xDF67AC6287A63B03, 0x00003FF2 //A13 = +2.13055585989529858265e-04L -data8 0xA719CFEE67FCE1CE, 0x0000BFF1 //A14 = -7.96798844477905965933e-05L -data8 0xEF926367BABBB029, 0x00003FEF //A15 = +2.85591875675765038065e-05L -// Pol2 -data8 0x82B5E5A93B059C50, 0x00003FEF //A0 = +1.55819100856330860049e-05L -data8 0xDC856BC2542B1938, 0x0000BFFB //A1 = -1.07676355235999875911e-01L -data8 0xDF225EF5694F14AE, 0x0000BFF8 //A2 = -1.36190345125628043277e-02L -data8 0xDAF66A954ED22428, 0x00003FFA //A3 = +5.34576571853233908886e-02L -data8 0xD28AE4F21A392EC6, 0x0000BFFA //A4 = -5.14019911949062230820e-02L -data8 0x9441A95713F0DB5B, 0x00003FFA //A5 = +3.61954321717769771045e-02L -data8 0xB0957B5C483C7A04, 0x0000BFF9 //A6 = -2.15556535133667988704e-02L -data8 0xBB9260E812814F71, 0x00003FF8 //A7 = +1.14484735825400480057e-02L -data8 0xB68AB17287ABAB04, 0x0000BFF7 //A8 = -5.57073273108465072470e-03L -data8 0xA56A95E0BC0EF01B, 0x00003FF6 //A9 = +2.52405318381952650677e-03L -data8 0x8D19C7D286839C00, 0x0000BFF5 //A10 = -1.07651294935087466892e-03L -data8 0xE45DB3766711A0D3, 0x00003FF3 //A11 = +4.35573615323234291196e-04L -data8 0xB05949F947FA7AEF, 0x0000BFF2 //A12 = -1.68179306983868501372e-04L -data8 0x82901D055A0D5CB6, 0x00003FF1 //A13 = +6.22572626227726684168e-05L -data8 0xBB957698542D6FD0, 0x0000BFEF //A14 = -2.23617364009159182821e-05L -data8 0x810740E1DF572394, 0x00003FEE //A15 = +7.69068800065192940487e-06L -// Pol3 -data8 0x9526D1C87655AFA8, 0x00003FEC //A0 = +2.22253260814242012255e-06L -data8 0xA47E21EBFE73F72F, 0x0000BFF8 //A1 = -1.00398379581527733314e-02L -data8 0xDE65685FCDF7A913, 0x0000BFFA //A2 = -5.42959286802879105148e-02L -data8 0xED289CB8F97D4860, 0x00003FFA //A3 = +5.79000589346770417248e-02L -data8 0xAA3100D5A7D870F1, 0x0000BFFA //A4 = -4.15506394006027604387e-02L -data8 0xCA0567032C5308C0, 0x00003FF9 //A5 = +2.46607791863290331169e-02L -data8 0xD3E1794A50F31BEB, 0x0000BFF8 //A6 = -1.29321751094401754013e-02L -data8 0xCAA02CB4C87CC1F0, 0x00003FF7 //A7 = +6.18364508551740736863e-03L -data8 0xB3F126AF16B121F2, 0x0000BFF6 //A8 = -2.74569696838501870748e-03L -data8 0x962B2D64D3900510, 0x00003FF5 //A9 = +1.14569596409019883022e-03L -data8 0xED8785714A9A00FB, 0x0000BFF3 //A10 = -4.53051338046340380512e-04L -data8 0xB325DA4515D8B54C, 0x00003FF2 //A11 = +1.70848714622328427290e-04L -data8 0x8179C36354571747, 0x0000BFF1 //A12 = -6.17387951061077132522e-05L -data8 0xB40F241C01C907E9, 0x00003FEF //A13 = +2.14647227210702861416e-05L -data8 0xF436D84AD7D4D316, 0x0000BFED //A14 = -7.27815144835213913238e-06L -data8 0x9EB432503FB0B7BC, 0x00003FEC //A15 = +2.36487228755136968792e-06L -// Pol4 -data8 0xE0BA539E4AFC4741, 0x00003FED //A0 = +6.69741148991838024429e-06L -data8 0x8583BF71139452CF, 0x0000BFFA //A1 = -3.25963476363756051657e-02L -data8 0x8384FEF6D08AD6CE, 0x0000BFF9 //A2 = -1.60546283500634200479e-02L -data8 0xB1E67DFB84C97036, 0x00003FF9 //A3 = +2.17163525195697635702e-02L -data8 0xFB6ACEE6899E360D, 0x0000BFF8 //A4 = -1.53452892792759316229e-02L -data8 0x8D2B869EB9149905, 0x00003FF8 //A5 = +8.61633440480716870830e-03L -data8 0x8A90BFE0FD869A41, 0x0000BFF7 //A6 = -4.22868126950622376530e-03L -data8 0xF7536A76E59F54D2, 0x00003FF5 //A7 = +1.88694643606912107006e-03L -data8 0xCCF6FE58C16E1CC7, 0x0000BFF4 //A8 = -7.81878732767742447339e-04L -data8 0x9FCC6ED9914FAA24, 0x00003FF3 //A9 = +3.04791577214885118730e-04L -data8 0xEC7F5AAACAE593E8, 0x0000BFF1 //A10 = -1.12770784960291779798e-04L -data8 0xA72CE628A114C940, 0x00003FF0 //A11 = +3.98577182157456408782e-05L -data8 0xE2DCC5750FD769BA, 0x0000BFEE //A12 = -1.35220520471857266339e-05L -data8 0x9459160B1E6F1F8D, 0x00003FED //A13 = +4.42111470121432700283e-06L -data8 0xBE0A05701BD0DD42, 0x0000BFEB //A14 = -1.41590196994052764542e-06L -data8 0xE905D729105081BF, 0x00003FE9 //A15 = +4.34038814785401120999e-07L -// Pol5 -data8 0xA33649C3AB459832, 0x00003FEE //A0 = +9.72819704141525206634e-06L -data8 0x9E4EA2F44C9A24BD, 0x0000BFFA //A1 = -3.86492123987296806210e-02L -data8 0xE80C0B1280F357BF, 0x0000BFF2 //A2 = -2.21297306012713370124e-04L -data8 0xDAECCE90A4D45D9A, 0x00003FF7 //A3 = +6.68106161291482829670e-03L -data8 0xA4006572071BDD4B, 0x0000BFF7 //A4 = -5.00493005170532147076e-03L -data8 0xB07FD7EB1F4D8E8E, 0x00003FF6 //A5 = +2.69316693731732554959e-03L -data8 0xA1F471D42ADD73A1, 0x0000BFF5 //A6 = -1.23561753760779610478e-03L -data8 0x8611D0ED1B4C8176, 0x00003FF4 //A7 = +5.11434914439322741260e-04L -data8 0xCDADB789B487A541, 0x0000BFF2 //A8 = -1.96150380913036018825e-04L -data8 0x9470252731687FEE, 0x00003FF1 //A9 = +7.07807859951401721129e-05L -data8 0xCB9399AD1C376D85, 0x0000BFEF //A10 = -2.42682175234436724152e-05L -data8 0x858D815F9CA0A9F7, 0x00003FEE //A11 = +7.96036454038012144300e-06L -data8 0xA878D338E6E6A079, 0x0000BFEC //A12 = -2.51042802626063073967e-06L -data8 0xCD2C2F079D2FCB36, 0x00003FEA //A13 = +7.64327468786076941271e-07L -data8 0xF5EF4A4B2EA426F2, 0x0000BFE8 //A14 = -2.29044563492386125272e-07L -data8 0x8CE52181393820FC, 0x00003FE7 //A15 = +6.56093668622712763489e-08L -// Pol6 -data8 0xB2015D7F1864B7CF, 0x00003FEC //A0 = +2.65248615880090351276e-06L -data8 0x954EA7A861B4462A, 0x0000BFFA //A1 = -3.64519642954351295215e-02L -data8 0x9E46F2A4D9157E69, 0x00003FF7 //A2 = +4.83023498390681965101e-03L -data8 0xA0D12B422FFD5BAD, 0x00003FF5 //A3 = +1.22693684633643883352e-03L -data8 0xB291D16A560A740E, 0x0000BFF5 //A4 = -1.36237794246703606647e-03L -data8 0xC138941BC8AF4A9D, 0x00003FF4 //A5 = +7.37079658343628747256e-04L -data8 0xA761669D61B405CF, 0x0000BFF3 //A6 = -3.19252914480518163396e-04L -data8 0x8053680F1C84607E, 0x00003FF2 //A7 = +1.22381025852939439541e-04L -data8 0xB518F4B6F25015F9, 0x0000BFF0 //A8 = -4.31770048258291369742e-05L -data8 0xEFF526AC70B9411E, 0x00003FEE //A9 = +1.43025887824433324525e-05L -data8 0x970B2A848DF5B5C2, 0x0000BFED //A10 = -4.50145058393497252604e-06L -data8 0xB614D2E61DB86963, 0x00003FEB //A11 = +1.35661172167726780059e-06L -data8 0xD34EA4D283EC33FA, 0x0000BFE9 //A12 = -3.93590335713880681528e-07L -data8 0xED209EBD68E1145F, 0x00003FE7 //A13 = +1.10421060667544991323e-07L -data8 0x83A126E22A17568D, 0x0000BFE6 //A14 = -3.06473811074239684132e-08L -data8 0x8B778496EDE9F415, 0x00003FE4 //A15 = +8.11804009754249175736e-09L -// Pol7 -data8 0x8E152F522501B7B9, 0x00003FEE //A0 = +8.46879203970927626532e-06L -data8 0xFD22F92EE21F491E, 0x0000BFF9 //A1 = -3.09004656656418947425e-02L -data8 0xAF0C41847D89EC14, 0x00003FF7 //A2 = +5.34203719233189217519e-03L -data8 0xB7C539C400445956, 0x0000BFF3 //A3 = -3.50514245383356287965e-04L -data8 0x8428C78B2B1E3622, 0x0000BFF3 //A4 = -2.52073850239006530978e-04L -data8 0xAFC0CCC7D1A05F5B, 0x00003FF2 //A5 = +1.67611241057491801028e-04L -data8 0x95DC7272C5695A5A, 0x0000BFF1 //A6 = -7.14593512262564106636e-05L -data8 0xD6FCA68A61F0E835, 0x00003FEF //A7 = +2.56284375437771117850e-05L -data8 0x8B71C74DEA936C66, 0x0000BFEE //A8 = -8.31153675277218441096e-06L -data8 0xA8AC71E2A56AA2C9, 0x00003FEC //A9 = +2.51343269277107451413e-06L -data8 0xC15DED6C44B46046, 0x0000BFEA //A10 = -7.20347851650066610771e-07L -data8 0xD42BA1DFBD1277AC, 0x00003FE8 //A11 = +1.97599119274780745741e-07L -data8 0xE03A81F2C976D11A, 0x0000BFE6 //A12 = -5.22072765405802337371e-08L -data8 0xE56A19A67DD66100, 0x00003FE4 //A13 = +1.33536787408751203998e-08L -data8 0xE964D255CB31DFFA, 0x0000BFE2 //A14 = -3.39632729387679010008e-09L -data8 0xE22E62E932B704D4, 0x00003FE0 //A15 = +8.22842400379225526299e-10L -// Pol8 -data8 0xB8B835882D46A6C8, 0x00003FEF //A0 = +2.20202883282415435401e-05L -data8 0xC9D1F63F89B74E90, 0x0000BFF9 //A1 = -2.46362504515706189782e-02L -data8 0x8E376748B1274F30, 0x00003FF7 //A2 = +4.34010070001387441657e-03L -data8 0x98174C7EA49B5B37, 0x0000BFF4 //A3 = -5.80181163659971286762e-04L -data8 0x8D2C40506AE9FF97, 0x00003FEF //A4 = +1.68291159100251734927e-05L -data8 0xD9A580C115B9D150, 0x00003FEF //A5 = +2.59454841475194555896e-05L -data8 0xDB35B21F1C3F99CE, 0x0000BFEE //A6 = -1.30659192305072674545e-05L -data8 0x99FAADAE17A3050E, 0x00003FED //A7 = +4.58893813631592314881e-06L -data8 0xBA1D259BCD6987A9, 0x0000BFEB //A8 = -1.38665627771423394637e-06L -data8 0xCDD7FF5BEA0145C2, 0x00003FE9 //A9 = +3.83413844219813384124e-07L -data8 0xD60857176CE6AB9D, 0x0000BFE7 //A10 = -9.96666862214499946343e-08L -data8 0xD446A2402112DF4C, 0x00003FE5 //A11 = +2.47121687566658908126e-08L -data8 0xCA87133235F1F495, 0x0000BFE3 //A12 = -5.89433000014933371980e-09L -data8 0xBB15B0021581C8B6, 0x00003FE1 //A13 = +1.36122047057936849125e-09L -data8 0xAC9D6585D4AF505E, 0x0000BFDF //A14 = -3.13984547328132268695e-10L -data8 0x975A1439C3795183, 0x00003FDD //A15 = +6.88268624429648826457e-11L -// Pol9 -data8 0x99A7676284CDC9FE, 0x00003FEF //A0 = +1.83169747921764176475e-05L -data8 0x9AD0AE249A02896C, 0x0000BFF9 //A1 = -1.88983346204739151909e-02L -data8 0xCB89B4AEC19898BE, 0x00003FF6 //A2 = +3.10574208447745576452e-03L -data8 0xEBBC47E30E1AC2C2, 0x0000BFF3 //A3 = -4.49629730048297442064e-04L -data8 0xD1E35B7FCE1CF859, 0x00003FF0 //A4 = +5.00412261289558493438e-05L -data8 0xB40743664EF24552, 0x0000BFEB //A5 = -1.34131589671166307319e-06L -data8 0xCAD2F5C596FFE1B4, 0x0000BFEB //A6 = -1.51115702599728593837e-06L -data8 0xAE42B6D069DFDDF2, 0x00003FEA //A7 = +6.49171330116787223873e-07L -data8 0xD0739A05BB43A714, 0x0000BFE8 //A8 = -1.94135651872623440782e-07L -data8 0xD745B854AB601BD7, 0x00003FE6 //A9 = +5.01219983943456578062e-08L -data8 0xCC4066E13E338B13, 0x0000BFE4 //A10 = -1.18890061172430768892e-08L -data8 0xB6EAADB55A6C3CB4, 0x00003FE2 //A11 = +2.66178850259168707794e-09L -data8 0x9CC6C178AD3F96AD, 0x0000BFE0 //A12 = -5.70349182959704086428e-10L -data8 0x81D0E2AA27DEB74A, 0x00003FDE //A13 = +1.18066926578104076645e-10L -data8 0xD75FB9049190BEFD, 0x0000BFDB //A14 = -2.44851795398843967972e-11L -data8 0xA9384A51D48C8703, 0x00003FD9 //A15 = +4.80951837368635202609e-12L -// Pol10 -data8 0xD2B3482EE449C535, 0x00003FEE //A0 = +1.25587177382575655080e-05L -data8 0xE7939B2D0607DFCF, 0x0000BFF8 //A1 = -1.41343131436717436429e-02L -data8 0x8810EB4AC5F0F1CE, 0x00003FF6 //A2 = +2.07620377002350121270e-03L -data8 0x9546589602AEB955, 0x0000BFF3 //A3 = -2.84719065122144294949e-04L -data8 0x9333434342229798, 0x00003FF0 //A4 = +3.50952732796136549298e-05L -data8 0xEB36A98FD81D3DEB, 0x0000BFEC //A5 = -3.50495464815398722482e-06L -data8 0xAC370EFA025D0477, 0x00003FE8 //A6 = +1.60387784498518639254e-07L -data8 0xC8DF7F8ACA099426, 0x00003FE6 //A7 = +4.67693991699936842330e-08L -data8 0xAC694AD4921C02CF, 0x0000BFE5 //A8 = -2.00713167514877937714e-08L -data8 0xB6E29F2FDE2D8C1A, 0x00003FE3 //A9 = +5.32266106167252495164e-09L -data8 0xA41F8EEA75474358, 0x0000BFE1 //A10 = -1.19415398856537468324e-09L -data8 0x869D778A1C56D3D6, 0x00003FDF //A11 = +2.44863450057778470469e-10L -data8 0xD02658BF31411F4C, 0x0000BFDC //A12 = -4.73277831746128372261e-11L -data8 0x9A4A95EE59127779, 0x00003FDA //A13 = +8.77044784978207256260e-12L -data8 0xE518330AF013C2F6, 0x0000BFD7 //A14 = -1.62781453276882333209e-12L -data8 0xA036A9DF71BD108A, 0x00003FD5 //A15 = +2.84596398987114375607e-13L -// Pol11 -data8 0x9191CFBF001F3BB3, 0x00003FEE //A0 = +8.67662287973472452343e-06L -data8 0xAA47E0CF01AE9730, 0x0000BFF8 //A1 = -1.03931136509584404513e-02L -data8 0xAEABE7F17B01D18F, 0x00003FF5 //A2 = +1.33263784731775399430e-03L -data8 0xAC0D6A309D04E5DB, 0x0000BFF2 //A3 = -1.64081956462118568288e-04L -data8 0xA08357DF458054D0, 0x00003FEF //A4 = +1.91346477952797715021e-05L -data8 0x8A1596B557440FE0, 0x0000BFEC //A5 = -2.05761687274453412571e-06L -data8 0xCDA0EAE0A5615E9A, 0x00003FE8 //A6 = +1.91506542215670149741e-07L -data8 0xD36A08FB4E104F9A, 0x0000BFE4 //A7 = -1.23059260396551086769e-08L -data8 0xD7433F91E78A7A11, 0x0000BFDF //A8 = -3.91560549815575091188e-10L -data8 0xC2F5308FD4F5CE62, 0x00003FDF //A9 = +3.54626121852421163117e-10L -data8 0xC83876915F49D630, 0x0000BFDD //A10 = -9.10497688901018285126e-11L -data8 0xA11C605DEAE1FE9C, 0x00003FDB //A11 = +1.83161825409194847892e-11L -data8 0xE7977BC1342D19BF, 0x0000BFD8 //A12 = -3.29111645807102123274e-12L -data8 0x9BC3A7D6396C6756, 0x00003FD6 //A13 = +5.53385887288503961220e-13L -data8 0xD0110D5683740B8C, 0x0000BFD3 //A14 = -9.24001363293241428519e-14L -data8 0x81786D7856A5CC92, 0x00003FD1 //A15 = +1.43741041714595023996e-14L -// Pol12 -data8 0xB85654F6033B3372, 0x00003FEF //A0 = +2.19747106911869287049e-05L -data8 0xF78B40078736B406, 0x0000BFF7 //A1 = -7.55444170413862312647e-03L -data8 0xDA8FDE84D88E5D5D, 0x00003FF4 //A2 = +8.33747822263358628569e-04L -data8 0xBC2D3F3891721AA9, 0x0000BFF1 //A3 = -8.97296647669960333635e-05L -data8 0x9D15ACFD3BF50064, 0x00003FEE //A4 = +9.36297600601039610762e-06L -data8 0xFBED3D03F3C1B671, 0x0000BFEA //A5 = -9.38500137149172923985e-07L -data8 0xBEE615E3B2FA16C8, 0x00003FE7 //A6 = +8.88941676851808958175e-08L -data8 0x843D32692CF5662A, 0x0000BFE4 //A7 = -7.69732580860195238520e-09L -data8 0x99E74472FD94E22B, 0x00003FE0 //A8 = +5.59897264617128952416e-10L -data8 0xCEF63DABF4C32E15, 0x0000BFDB //A9 = -2.35288414996279313219e-11L -data8 0xA2D86C25C0991123, 0x0000BFD8 //A10 = -2.31417232327307408235e-12L -data8 0xF50C1B31D2E922BD, 0x00003FD6 //A11 = +8.70582858983364191159e-13L -data8 0xC0F093DEC2B019A1, 0x0000BFD4 //A12 = -1.71364927865227509533e-13L -data8 0xFC1441C4CD105981, 0x00003FD1 //A13 = +2.79864052545369490865e-14L -data8 0x9CC959853267F026, 0x0000BFCF //A14 = -4.35170017302700609509e-15L -data8 0xB06BA14016154F1E, 0x00003FCC //A15 = +6.12081320471295704631e-16L -// Pol13 -data8 0xA59E74BF544F2422, 0x00003FEF //A0 = +1.97433196215210145261e-05L -data8 0xB2814F4EDAE15330, 0x0000BFF7 //A1 = -5.44754383528015875700e-03L -data8 0x867C249D378F0A23, 0x00003FF4 //A2 = +5.13019308804593120161e-04L -data8 0xC76644393388AB68, 0x0000BFF0 //A3 = -4.75405403392600215101e-05L -data8 0x91143AD5CCA229FE, 0x00003FED //A4 = +4.32369180778264703719e-06L -data8 0xCE6A11FB6840A974, 0x0000BFE9 //A5 = -3.84476663329551178495e-07L -data8 0x8EC29F66C59DE243, 0x00003FE6 //A6 = +3.32389596787155456596e-08L -data8 0xBE3FCDDCA94CA24E, 0x0000BFE2 //A7 = -2.76849073931513325199e-09L -data8 0xF06A84BDC70A0B0D, 0x00003FDE //A8 = +2.18657158231304988330e-10L -data8 0x8B8E6969D056D124, 0x0000BFDB //A9 = -1.58657139740906811035e-11L -data8 0x8984985AA29A0567, 0x00003FD7 //A10 = +9.77123802231106533829e-13L -data8 0xA53ABA084300137C, 0x0000BFD2 //A11 = -3.66882970952892030306e-14L -data8 0xA90EC851E91C3319, 0x0000BFCE //A12 = -2.34614750044359490986e-15L -data8 0xEC9CAF64237B5060, 0x00003FCC //A13 = +8.20912960028437475035e-16L -data8 0xA9156668FCF01479, 0x0000BFCA //A14 = -1.46656639874123613261e-16L -data8 0xBAEF58D8118DD5D4, 0x00003FC7 //A15 = +2.02675278255254907493e-17L -// Pol14 -data8 0xC698952E9CEAA800, 0x00003FEF //A0 = +2.36744912073515619263e-05L -data8 0x800395F8C7B4FA00, 0x0000BFF7 //A1 = -3.90667746392883642897e-03L -data8 0xA3B2467B6B391831, 0x00003FF3 //A2 = +3.12226081793919541155e-04L -data8 0xCF2061122A69D72B, 0x0000BFEF //A3 = -2.46914006692526122176e-05L -data8 0x817FAB6B5DEB9924, 0x00003FEC //A4 = +1.92968114320180123521e-06L -data8 0x9FC190F5827740E7, 0x0000BFE8 //A5 = -1.48784479265231093475e-07L -data8 0xC1FE5C1835C8AFCD, 0x00003FE4 //A6 = +1.12919132662720380018e-08L -data8 0xE7216A9FBB204DA3, 0x0000BFE0 //A7 = -8.40847981461949000003e-10L -data8 0x867566ED95C5C64F, 0x00003FDD //A8 = +6.11446929759298780795e-11L -data8 0x97A8BFA723F0F014, 0x0000BFD9 //A9 = -4.31041298699752869577e-12L -data8 0xA3D24B7034984522, 0x00003FD5 //A10 = +2.91005377301348717042e-13L -data8 0xA5AAA371C22F3741, 0x0000BFD1 //A11 = -1.83926825395757259128e-14L -data8 0x95352E5597EACC23, 0x00003FCD //A12 = +1.03533666540077850452e-15L -data8 0xCCEBE3043B689428, 0x0000BFC8 //A13 = -4.44352525147076912166e-17L -data8 0xA779DAB4BE1F80BB, 0x0000BFBC //A14 = -8.86610526981738255206e-21L -data8 0xB171271F3517282C, 0x00003FC1 //A15 = +3.00598445879282370850e-19L -// Pol15 -data8 0xB7AC727D1C3FEB05, 0x00003FEE //A0 = +1.09478009914822049780e-05L -data8 0xB6E6274485C10B0A, 0x0000BFF6 //A1 = -2.79081782038927199588e-03L -data8 0xC5CAE2122D009506, 0x00003FF2 //A2 = +1.88629638738336219173e-04L -data8 0xD466E7957D0A3362, 0x0000BFEE //A3 = -1.26601440424012313479e-05L -data8 0xE2593D798DA20E2E, 0x00003FEA //A4 = +8.43214222346512003230e-07L -data8 0xEF2D2BBA7D2882CC, 0x0000BFE6 //A5 = -5.56876064495961858535e-08L -data8 0xFA5819BB4AE974C2, 0x00003FE2 //A6 = +3.64298674151704370449e-09L -data8 0x819BB0CE825FBB28, 0x0000BFDF //A7 = -2.35755881668932259913e-10L -data8 0x84871099BF728B8F, 0x00003FDB //A8 = +1.50666434199945890414e-11L -data8 0x858188962DFEBC9F, 0x0000BFD7 //A9 = -9.48617116568458677088e-13L -data8 0x840F38FF2FBAE753, 0x00003FD3 //A10 = +5.86461827778372616657e-14L -data8 0xFF47EAF69577B213, 0x0000BFCE //A11 = -3.54273456410181081472e-15L -data8 0xEF402CCB4D29FAF8, 0x00003FCA //A12 = +2.07516888659313950588e-16L -data8 0xD6B789E01141231B, 0x0000BFC6 //A13 = -1.16398290506765191078e-17L -data8 0xB5EEE343E9CFE3EC, 0x00003FC2 //A14 = +6.16413506924643419723e-19L -data8 0x859B41A39D600346, 0x0000BFBE //A15 = -2.82922705825870414438e-20L -// Pol16 -data8 0x85708B69FD184E11, 0x00003FED //A0 = +3.97681079176353356199e-06L -data8 0x824D92BC60A1F70A, 0x0000BFF6 //A1 = -1.98826630037499070532e-03L -data8 0xEDCF7D3576BB5258, 0x00003FF1 //A2 = +1.13396885054265675352e-04L -data8 0xD7FC59226A947CDF, 0x0000BFED //A3 = -6.43687650810478871875e-06L -data8 0xC32C51B574E2651E, 0x00003FE9 //A4 = +3.63538268539251809118e-07L -data8 0xAF67910F5681401F, 0x0000BFE5 //A5 = -2.04197779750247395258e-08L -data8 0x9CB3E8D7DCD1EA9D, 0x00003FE1 //A6 = +1.14016272459029850306e-09L -data8 0x8B14ECFBF7D4F114, 0x0000BFDD //A7 = -6.32470533185766848692e-11L -data8 0xF518253AE4A3AE72, 0x00003FD8 //A8 = +3.48299974583453268369e-12L -data8 0xD631A5699AA2F334, 0x0000BFD4 //A9 = -1.90242426474085078079e-13L -data8 0xB971AD4C30C56E5D, 0x00003FD0 //A10 = +1.02942127356740047925e-14L -data8 0x9ED0065A601F3160, 0x0000BFCC //A11 = -5.50991880383698965959e-16L -data8 0x863A04008E12867C, 0x00003FC8 //A12 = +2.91057593756148904838e-17L -data8 0xDF62F9F44F5C7170, 0x0000BFC3 //A13 = -1.51372666097522872780e-18L -data8 0xBA4E118E88CFDD31, 0x00003FBF //A14 = +7.89032177282079635722e-20L -data8 0x942AD897FC4D2F2A, 0x0000BFBB //A15 = -3.92195756076319409245e-21L -// Pol17 -data8 0xCB8514540566C717, 0x00003FEF //A0 = +2.42614557068144130848e-05L -data8 0xB94F08D6816E0CD4, 0x0000BFF5 //A1 = -1.41379340061829929314e-03L -data8 0x8E7C342C2DABB51B, 0x00003FF1 //A2 = +6.79422240687700109911e-05L -data8 0xDA69DAFF71E30D5B, 0x0000BFEC //A3 = -3.25461473899657142468e-06L -data8 0xA6D5B2DB69B4B3F6, 0x00003FE8 //A4 = +1.55376978584082701045e-07L -data8 0xFDF4F76BC1D1BD47, 0x0000BFE3 //A5 = -7.39111857092131684572e-09L -data8 0xC08BC52C95B12C2D, 0x00003FDF //A6 = +3.50239092565793882444e-10L -data8 0x91624BF6D3A3F6C9, 0x0000BFDB //A7 = -1.65282439890232458821e-11L -data8 0xDA91F7A450DE4270, 0x00003FD6 //A8 = +7.76517285902715940501e-13L -data8 0xA380ADF55416E624, 0x0000BFD2 //A9 = -3.63048822989374426852e-14L -data8 0xF350FC0CEDEE0FD6, 0x00003FCD //A10 = +1.68834630987974622269e-15L -data8 0xB3FA19FBDC8F023C, 0x0000BFC9 //A11 = -7.80525639701804380489e-17L -data8 0x8435328C80940126, 0x00003FC5 //A12 = +3.58349966898667910204e-18L -data8 0xC0D22F655BA5EF39, 0x0000BFC0 //A13 = -1.63325770165403860181e-19L -data8 0x8F14B9EBD5A9AB25, 0x00003FBC //A14 = +7.57464305512080733773e-21L -data8 0xCD4804BBF6DC1B6F, 0x0000BFB7 //A15 = -3.39609459750208886298e-22L -// Pol18 -data8 0xE251DFE45AB0C22E, 0x00003FEE //A0 = +1.34897126299700418200e-05L -data8 0x83943CC7D59D4215, 0x0000BFF5 //A1 = -1.00386850310061655307e-03L -data8 0xAA57896951134BCA, 0x00003FF0 //A2 = +4.06126834109940757047e-05L -data8 0xDC0A67051E1C4A2C, 0x0000BFEB //A3 = -1.63943048164477430317e-06L -data8 0x8DCB3C0A8CD07BBE, 0x00003FE7 //A4 = +6.60279229777753829876e-08L -data8 0xB64DE81C24F7F265, 0x0000BFE2 //A5 = -2.65287705357477481067e-09L -data8 0xE9CBB7A990DBA8B5, 0x00003FDD //A6 = +1.06318007608620426224e-10L -data8 0x9583D4B85C2ADC6F, 0x0000BFD9 //A7 = -4.24947087941505088222e-12L -data8 0xBEB0EE8114EEDF77, 0x00003FD4 //A8 = +1.69367754741562774916e-13L -data8 0xF2791BB8F06BDA93, 0x0000BFCF //A9 = -6.72997988617021128704e-15L -data8 0x99A907F6A92195B4, 0x00003FCB //A10 = +2.66558091161711891239e-16L -data8 0xC213E5E6F833BB93, 0x0000BFC6 //A11 = -1.05209746502719578617e-17L -data8 0xF41FBBA6B343960F, 0x00003FC1 //A12 = +4.13562069721140021224e-19L -data8 0x98F194AEE31D188D, 0x0000BFBD //A13 = -1.61935414722333263347e-20L -data8 0xC42F5029BB622157, 0x00003FB8 //A14 = +6.49121108201931196678e-22L -data8 0xF43BD08079E50E0F, 0x0000BFB3 //A15 = -2.52531675510242468317e-23L -// Pol19 -data8 0x82557B149A04D08E, 0x00003FEF //A0 = +1.55370127331027842820e-05L -data8 0xBAAB433307CE614B, 0x0000BFF4 //A1 = -7.12085701486669872724e-04L -data8 0xCB52D9DBAC16FE82, 0x00003FEF //A2 = +2.42380662859334411743e-05L -data8 0xDD214359DBBCE7D1, 0x0000BFEA //A3 = -8.23773197624244883859e-07L -data8 0xF01E8E968139524C, 0x00003FE5 //A4 = +2.79535729459988509676e-08L -data8 0x82286A057E0916CE, 0x0000BFE1 //A5 = -9.47023128967039348510e-10L -data8 0x8CDDDC4E8D013365, 0x00003FDC //A6 = +3.20293663356974901319e-11L -data8 0x982FEEE90D4E8751, 0x0000BFD7 //A7 = -1.08135537312234452657e-12L -data8 0xA41D1E84083B8FD6, 0x00003FD2 //A8 = +3.64405720894915411836e-14L -data8 0xB0A1B6111B72E159, 0x0000BFCD //A9 = -1.22562851790685744085e-15L -data8 0xBDB77DE6B650FFA2, 0x00003FC8 //A10 = +4.11382657214908334175e-17L -data8 0xCB54E95CDB66978A, 0x0000BFC3 //A11 = -1.37782909696752432371e-18L -data8 0xD959E428A62B1B6C, 0x00003FBE //A12 = +4.60258936838597812582e-20L -data8 0xE7D49EC23F1A16A0, 0x0000BFB9 //A13 = -1.53412587409583783059e-21L -data8 0xFDE429BC9947B2BE, 0x00003FB4 //A14 = +5.25034823750902928092e-23L -data8 0x872137A062C042EF, 0x0000BFB0 //A15 = -1.74651114923000080365e-24L -// Pol20 -data8 0x8B9B185C6A2659AC, 0x00003FEF //A0 = +1.66423130594825442963e-05L -data8 0x84503AD52588A1E8, 0x0000BFF4 //A1 = -5.04735556466270303549e-04L -data8 0xF26C7C2B566388E1, 0x00003FEE //A2 = +1.44495826764677427386e-05L -data8 0xDDDA15FEE262BB47, 0x0000BFE9 //A3 = -4.13231361893675488873e-07L -data8 0xCACEBC73C90C2FE0, 0x00003FE4 //A4 = +1.18049538609157282958e-08L -data8 0xB9314D00022B41DD, 0x0000BFDF //A5 = -3.36863342776746896664e-10L -data8 0xA8E9FBDC714638B9, 0x00003FDA //A6 = +9.60164921624768038366e-12L -data8 0x99E246C0CC8CA6F6, 0x0000BFD5 //A7 = -2.73352704217713596798e-13L -data8 0x8C04E7B5DF372EA1, 0x00003FD0 //A8 = +7.77262480048865685174e-15L -data8 0xFE7B90CAA0B6D5F7, 0x0000BFCA //A9 = -2.20728537958846147109e-16L -data8 0xE6F40BAD4EC6CB4F, 0x00003FC5 //A10 = +6.26000182616999972048e-18L -data8 0xD14F4E0538F0F992, 0x0000BFC0 //A11 = -1.77292283439752259258e-19L -data8 0xBD5A7FAA548CC749, 0x00003FBB //A12 = +5.01214569023722089225e-21L -data8 0xAB15D69425373A67, 0x0000BFB6 //A13 = -1.41518447770061562822e-22L -data8 0x9EF95456F75B4DF4, 0x00003FB1 //A14 = +4.10938011540250142351e-24L -data8 0x8FADCC45E81433E7, 0x0000BFAC //A15 = -1.16062889679749879834e-25L -// Pol21 -data8 0xB47A917B0F7B50AE, 0x00003FEF //A0 = +2.15147474240529518138e-05L -data8 0xBB77DC3BA0C937B3, 0x0000BFF3 //A1 = -3.57567223048598672970e-04L -data8 0x90694DFF4EBF7370, 0x00003FEE //A2 = +8.60758700336677694536e-06L -data8 0xDE5379AA90A98F3F, 0x0000BFE8 //A3 = -2.07057292787309736495e-07L -data8 0xAB0322293F1F9CA0, 0x00003FE3 //A4 = +4.97711123919916694625e-09L -data8 0x837119E59D3B7AC2, 0x0000BFDE //A5 = -1.19545621970063369582e-10L -data8 0xC9E5B74A38ECF3FC, 0x00003FD8 //A6 = +2.86913359605586285967e-12L -data8 0x9AEF5110C6885352, 0x0000BFD3 //A7 = -6.88048865490621757799e-14L -data8 0xED988D52189CE6A3, 0x00003FCD //A8 = +1.64865278639132278935e-15L -data8 0xB6063CECD8012B6D, 0x0000BFC8 //A9 = -3.94702428606368525374e-17L -data8 0x8B541EB15E79CEEC, 0x00003FC3 //A10 = +9.44127272399408815784e-19L -data8 0xD51A136D8C75BC25, 0x0000BFBD //A11 = -2.25630369561137931232e-20L -data8 0xA2C1C5E19CC79E6F, 0x00003FB8 //A12 = +5.38517493921589837361e-22L -data8 0xF86F9772306F56C1, 0x0000BFB2 //A13 = -1.28438352359240135735e-23L -data8 0xC32F6FEEDE86528E, 0x00003FAD //A14 = +3.15338862172962186458e-25L -data8 0x9534ED189744D7D4, 0x0000BFA8 //A15 = -7.53301543611470014315e-27L -// Pol22 -data8 0xCBA0A2DB94A2C494, 0x00003FEF //A0 = +2.42742878212752702946e-05L -data8 0x84C089154A49E0E8, 0x0000BFF3 //A1 = -2.53204520651046300034e-04L -data8 0xABF5665BD0D8B0CD, 0x00003FED //A2 = +5.12476542947092361490e-06L -data8 0xDEA1C518E3EEE872, 0x0000BFE7 //A3 = -1.03671063536324831083e-07L -data8 0x900B77F271559AE8, 0x00003FE2 //A4 = +2.09612770408581408652e-09L -data8 0xBA4C74A262BE3E4E, 0x0000BFDC //A5 = -4.23594098489216166935e-11L -data8 0xF0D1680FCC1EAF97, 0x00003FD6 //A6 = +8.55557381760467917779e-13L -data8 0x9B8F8E033BB83A24, 0x0000BFD1 //A7 = -1.72707138247091685914e-14L -data8 0xC8DCA6A691DB8335, 0x00003FCB //A8 = +3.48439884388851942939e-16L -data8 0x819A6CB9CEA5E9BD, 0x0000BFC6 //A9 = -7.02580471688245511753e-18L -data8 0xA726B4F622585BEA, 0x00003FC0 //A10 = +1.41582572516648501043e-19L -data8 0xD7727648A4095986, 0x0000BFBA //A11 = -2.85141885626054217632e-21L -data8 0x8AB627E09CF45997, 0x00003FB5 //A12 = +5.73697507862703019314e-23L -data8 0xB28C15C117CC604F, 0x0000BFAF //A13 = -1.15383428132352407085e-24L -data8 0xECB8428626DA072C, 0x00003FA9 //A14 = +2.39025879246942839796e-26L -data8 0x98B731BCFA2CE2B2, 0x0000BFA4 //A15 = -4.81885474332093262902e-28L -// Pol23 -data8 0xC6D013811314D31B, 0x00003FED //A0 = +5.92508308918577687876e-06L -data8 0xBBF3057B8DBACBCF, 0x0000BFF2 //A1 = -1.79242422493281965934e-04L -data8 0xCCADECA501162313, 0x00003FEC //A2 = +3.04996061562356504918e-06L -data8 0xDED1FDBE8CCAF3DB, 0x0000BFE6 //A3 = -5.18793887648024117154e-08L -data8 0xF27B74EDDCA65859, 0x00003FE0 //A4 = +8.82145297317787820675e-10L -data8 0x83E4415687F01A0C, 0x0000BFDB //A5 = -1.49943414247603665601e-11L -data8 0x8F6CB350861CE446, 0x00003FD5 //A6 = +2.54773288906376920377e-13L -data8 0x9BE8456A30CBFC02, 0x0000BFCF //A7 = -4.32729710913845745148e-15L -data8 0xA9694F7E1033977D, 0x00003FC9 //A8 = +7.34704698157502347441e-17L -data8 0xB8035A3D5AF82D85, 0x0000BFC3 //A9 = -1.24692123826025468001e-18L -data8 0xC7CB4B3ACB905FDA, 0x00003FBD //A10 = +2.11540249352095943317e-20L -data8 0xD8D70AEB2E58D729, 0x0000BFB7 //A11 = -3.58731705184186608576e-22L -data8 0xEB27A61B1D5C7697, 0x00003FB1 //A12 = +6.07861113430709162243e-24L -data8 0xFEF9ED74D4F4C9B0, 0x0000BFAB //A13 = -1.02984099170876754831e-25L -data8 0x8E6F410068C12043, 0x00003FA6 //A14 = +1.79777721804459361762e-27L -data8 0x9AE2F6705481630E, 0x0000BFA0 //A15 = -3.05459905177379058768e-29L -// Pol24 -data8 0xD2D858D5B01C9434, 0x00003FEE //A0 = +1.25673476165670766128e-05L -data8 0x8505330F8B4FDE49, 0x0000BFF2 //A1 = -1.26858053564784963985e-04L -data8 0xF39171C8B1D418C2, 0x00003FEB //A2 = +1.81472407620770441249e-06L -data8 0xDEF065C3D7BFD26E, 0x0000BFE5 //A3 = -2.59535215807652675043e-08L -data8 0xCC0199EA6ACA630C, 0x00003FDF //A4 = +3.71085215769339916703e-10L -data8 0xBAA25319F01ED248, 0x0000BFD9 //A5 = -5.30445960650683029105e-12L -data8 0xAAB28A84F8CFE4D1, 0x00003FD3 //A6 = +7.58048850973457592162e-14L -data8 0x9C14B931AEB311A8, 0x0000BFCD //A7 = -1.08302915828084288776e-15L -data8 0x8EADA745715A0714, 0x00003FC7 //A8 = +1.54692159263197000533e-17L -data8 0x82643F3F722CE6B5, 0x0000BFC1 //A9 = -2.20891945694400066611e-19L -data8 0xEE42ECDE465A99E4, 0x00003FBA //A10 = +3.15336372779307614198e-21L -data8 0xD99FC74326ACBFC0, 0x0000BFB4 //A11 = -4.50036161691276556269e-23L -data8 0xC6A4DCACC554911E, 0x00003FAE //A12 = +6.41853356148678957077e-25L -data8 0xB550CEA09DA96F44, 0x0000BFA8 //A13 = -9.15410112414783078242e-27L -data8 0xAA9149317996F32F, 0x00003FA2 //A14 = +1.34554050666508391264e-28L -data8 0x9C3008EFE3F52F19, 0x0000BF9C //A15 = -1.92516125328592532359e-30L -// Pol25 -data8 0xA68E78218806283F, 0x00003FEF //A0 = +1.98550844852103406280e-05L -data8 0xBC41423996DC8A37, 0x0000BFF1 //A1 = -8.97669395268764751516e-05L -data8 0x90E55AE31A2F8271, 0x00003FEB //A2 = +1.07955871580069359702e-06L -data8 0xDF022272DA4A3BEF, 0x0000BFE4 //A3 = -1.29807937275957214439e-08L -data8 0xAB95DCBFFB0BAAB8, 0x00003FDE //A4 = +1.56056011861921437794e-10L -data8 0x83FF2547BA9011FF, 0x0000BFD8 //A5 = -1.87578539510813332135e-12L -data8 0xCB0C353560EEDC45, 0x00003FD1 //A6 = +2.25428217090412574481e-14L -data8 0x9C24CEB86E76D2C5, 0x0000BFCB //A7 = -2.70866279585559299821e-16L -data8 0xF01AFA23DDFDAE0E, 0x00003FC4 //A8 = +3.25403467375734083376e-18L -data8 0xB892BDFBCF1D9740, 0x0000BFBE //A9 = -3.90848978133441513662e-20L -data8 0x8DDBBF34415AAECA, 0x00003FB8 //A10 = +4.69370027479731756829e-22L -data8 0xDA04170D07458C3B, 0x0000BFB1 //A11 = -5.63558091177482043435e-24L -data8 0xA76F391095A9563A, 0x00003FAB //A12 = +6.76262416498584003290e-26L -data8 0x8098FA125C18D8DB, 0x0000BFA5 //A13 = -8.11564737276592661642e-28L -data8 0xCB9E4D5C08923227, 0x00003F9E //A14 = +1.00391606269366059664e-29L -data8 0x9CEC3BF7A0BE2CAF, 0x0000BF98 //A15 = -1.20888920108938909316e-31L -// Pol26 -data8 0xC17AB25E269272F7, 0x00003FEE //A0 = +1.15322640047234590651e-05L -data8 0x85310509E633FEF2, 0x0000BFF1 //A1 = -6.35106483144690768696e-05L -data8 0xAC5E4C4DCB2D940C, 0x00003FEA //A2 = +6.42122148740412561597e-07L -data8 0xDF0AAD0571FFDD48, 0x0000BFE3 //A3 = -6.49136789710824396482e-09L -data8 0x9049D8440AFD180F, 0x00003FDD //A4 = +6.56147932223174570008e-11L -data8 0xBAA936477C5FA9D7, 0x0000BFD6 //A5 = -6.63153032879993841863e-13L -data8 0xF17261294EAB1443, 0x00003FCF //A6 = +6.70149477756803680009e-15L -data8 0x9C22F87C31DB007A, 0x0000BFC9 //A7 = -6.77134581402030645534e-17L -data8 0xC9E98E633942AC12, 0x00003FC2 //A8 = +6.84105580182052870823e-19L -data8 0x828998181309642C, 0x0000BFBC //A9 = -6.91059649300859944955e-21L -data8 0xA8C3D4DCE1ECBAB6, 0x00003FB5 //A10 = +6.97995542988331257517e-23L -data8 0xDA288D52CC4C351A, 0x0000BFAE //A11 = -7.04907829139578377009e-25L -data8 0x8CEEACB790B5F374, 0x00003FA8 //A12 = +7.11526399101774993883e-27L -data8 0xB61C8A29D98F24C0, 0x0000BFA1 //A13 = -7.18303147470398859453e-29L -data8 0xF296F69FE45BDA7D, 0x00003F9A //A14 = +7.47537230021540031251e-31L -data8 0x9D4B25BF6FB7234B, 0x0000BF94 //A15 = -7.57340869663212138051e-33L -// Pol27 -data8 0xC7772CC326D6FBB8, 0x00003FEE //A0 = +1.18890718679826004395e-05L -data8 0xE0F9D5410565D55D, 0x0000BFF0 //A1 = -5.36384368533203585378e-05L -data8 0x85C0BE825680E148, 0x00003FEA //A2 = +4.98268406609692971520e-07L -data8 0x9F058A389D7BA177, 0x0000BFE3 //A3 = -4.62813885933188677790e-09L -data8 0xBD0B751F0A6BAC7A, 0x00003FDC //A4 = +4.29838009673609430305e-11L -data8 0xE0B6823570502E9D, 0x0000BFD5 //A5 = -3.99170340031272728535e-13L -data8 0x858A9C52FC426D86, 0x00003FCF //A6 = +3.70651975271664045723e-15L -data8 0x9EB4438BFDF1928D, 0x0000BFC8 //A7 = -3.44134780748056488222e-17L -data8 0xBC968DCD8C06D74E, 0x00003FC1 //A8 = +3.19480670422195579127e-19L -data8 0xE0133A405F782125, 0x0000BFBA //A9 = -2.96560935615546392028e-21L -data8 0x851AFEBB70D07E79, 0x00003FB4 //A10 = +2.75255617931932536111e-23L -data8 0x9E1E21A841BF8738, 0x0000BFAD //A11 = -2.55452923487640676799e-25L -data8 0xBBCF2EF1C6E72327, 0x00003FA6 //A12 = +2.37048675755308004410e-27L -data8 0xDF0D320CF12B8BCB, 0x0000BF9F //A13 = -2.19945804585962185550e-29L -data8 0x8470A76DE5FCADD8, 0x00003F99 //A14 = +2.04056213851532266258e-31L -data8 0x9D41C15F6A6FBB04, 0x0000BF92 //A15 = -1.89291056020108587823e-33L -LOCAL_OBJECT_END(erfc_Q_table) - - -.section .text -GLOBAL_LIBM_ENTRY(erfcl) - -{ .mfi - alloc r32 = ar.pfs, 0, 36, 4, 0 - fma.s1 FR_Tmp = f1, f1, f8 // |x|+1, if x >= 0 - nop.i 0 -} -{ .mfi - addl GR_ad_Arg = @ltoff(exp_table_1), gp - fms.s1 FR_Tmp1 = f1, f1, f8 // |x|+1, if x < 0 - mov GR_rshf_2to51 = 0x4718 // begin 1.10000 2^(63+51) -} -;; - -{ .mfi - ld8 GR_ad_Arg = [GR_ad_Arg] // Point to Arg table - fcmp.ge.s1 p6,p7 = f8, f0 // p6: x >= 0 ,p7: x<0 - shl GR_rshf_2to51 = GR_rshf_2to51,48 // end 1.10000 2^(63+51) -} -{ .mlx - mov GR_rshf = 0x43e8 // begin 1.1000 2^63 for right shift - movl GR_sig_inv_ln2 = 0xb8aa3b295c17f0bc // signif. of 1/ln2 -} -;; - -{ .mfi - mov GR_exp_2tom51 = 0xffff-51 - fclass.m p8,p0 = f8,0x07 // p8: x = 0 - shl GR_rshf = GR_rshf,48 // end 1.1000 2^63 for right shift -} -{ .mfi - nop.m 0 - fnma.s1 FR_norm_x = f8, f8, f0 //high bits for -x^2 - nop.i 0 -} -;; - -.pred.rel "mutex",p6,p7 -{ .mfi - setf.sig FR_INV_LN2_2TO63 = GR_sig_inv_ln2 // form 1/ln2 * 2^63 -(p6) fma.s1 FR_AbsArg = f1, f0, f8 // |x|, if x >= 0 - nop.i 0 -} -{ .mfi - setf.d FR_RSHF_2TO51 = GR_rshf_2to51 //const 1.10 * 2^(63+51) -(p7) fms.s1 FR_AbsArg = f1, f0, f8 // |x|, if x < 0 - mov GR_exp_mask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - ldfe FR_ch_dx = [GR_ad_Arg], 16 - fclass.m p10,p0 = f8, 0x21 // p10: x = +inf - mov GR_exp_bias = 0x0FFFF // Set exponent bias -} -{ .mlx - setf.d FR_RSHF = GR_rshf // Right shift const 1.1000 * 2^63 - movl GR_ERFC_XC_TB = 0x650 -} -;; - -.pred.rel "mutex",p6,p7 -{ .mfi - setf.exp FR_2TOM51 = GR_exp_2tom51 // 2^-51 for scaling float_N -(p6) fma.s1 FR_Tmp = FR_Tmp, FR_Tmp, f0 // (|x|+1)^2,x >=0 - nop.i 0 -} -{ .mfi - ldfpd FR_POS_ARG_ASYMP,FR_NEG_ARG_ASYMP = [GR_ad_Arg], 16 -(p7) fma.s1 FR_Tmp = FR_Tmp1, FR_Tmp1, f0 // (|x|+1)^2, x<0 - mov GR_0x1 = 0x1 -} -;; - -//p8: y = 1.0, x = 0.0,quick exit -{ .mfi - ldfpd FR_dx,FR_dx1 = [GR_ad_Arg], 16 - fclass.m p9,p0 = f8, 0x22 // p9: x = -inf - nop.i 0 - -} -{ .mfb - nop.m 0 -(p8) fma.s0 f8 = f1, f1, f0 -(p8) br.ret.spnt b0 -} -;; - -{ .mfi - ldfe FR_UnfBound = [GR_ad_Arg], 16 - fclass.m p11,p0 = f8, 0xc3 // p11: x = nan - mov GR_BIAS = 0x0FFFF -} -{ .mfi - nop.m 0 - fma.s1 FR_NormX = f8,f1,f0 - nop.i 0 -} -;; - -{ .mfi - ldfe FR_EpsNorm = [GR_ad_Arg], 16 - fmerge.s FR_X = f8,f8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_xsq_lo = f8, f8, FR_norm_x // low bits for -x^2 - nop.i 0 -} -;; - -{ .mfi - add GR_ad_C = 0x20, GR_ad_Arg // Point to C table - nop.f 0 - add GR_ad_T1 = 0x50, GR_ad_Arg // Point to T1 table -} -{ .mfi - add GR_ad_T2 = 0x150, GR_ad_Arg // Point to T2 table - nop.f 0 - add GR_ERFC_XC_TB = GR_ERFC_XC_TB, GR_ad_Arg //poin.to XB_TBL -} -;; - -{ .mfi - getf.exp GR_signexp_x = FR_norm_x // Extr. sign and exponent of x - fma.s1 FR_Tmp = FR_Tmp, FR_Tmp, f0 // (|x|+1)^4 - add GR_ad_W1 = 0x100, GR_ad_T2 // Point to W1 table -} -{ .mfi - ldfe FR_L_hi = [GR_ad_Arg],16 // Get L_hi - nop.f 0 - add GR_ad_W2 = 0x300, GR_ad_T2 // Point to W2 table -} -;; - -// p9: y = 2.0, x = -inf, quick exit -{ .mfi - sub GR_mBIAS = r0, GR_BIAS - fma.s1 FR_2 = f1, f1, f1 - nop.i 0 -} -{ .mfb - ldfe FR_L_lo = [GR_ad_Arg],16 // Get L_lo -(p9) fma.s0 f8 = f1, f1, f1 -(p9) br.ret.spnt b0 -} -;; - -// p10: y = 0.0, x = +inf, quick exit -{ .mfi - adds GR_ERFC_P_TB = 0x380, GR_ERFC_XC_TB // pointer to P_TBL - fma.s1 FR_N_signif = FR_norm_x, FR_INV_LN2_2TO63, FR_RSHF_2TO51 - and GR_exp_x = GR_signexp_x, GR_exp_mask -} -{ .mfb - adds GR_ERFC_S_TB = 0x1C0, GR_ERFC_XC_TB // pointer to S_TBL -(p10) fma.s0 f8 = f0, f1, f0 -(p10) br.ret.spnt b0 -} -;; - -// p12: |x| < 0.681... -> dx = 0.875 (else dx = 0.625 ) -// p11: y = x, x = nan, quick exit -{ .mfi - ldfe FR_C3 = [GR_ad_C],16 // Get C3 for normal path - fcmp.lt.s1 p12,p0 = FR_AbsArg, FR_ch_dx - shl GR_ShftPi_bias = GR_BIAS, 8 // BIAS * 256 -} -{ .mfb - sub GR_exp_x = GR_exp_x, GR_exp_bias // Get exponent -(p11) fma.s0 f8 = f8, f1, f0 -(p11) br.ret.spnt b0 - -} -;; - -{ .mfi - ldfe FR_C2 = [GR_ad_C],16 // Get A2 for main path - nop.f 0 - nop.i 0 -} -;; - -//p15: x > POS_ARG_ASYMP = 107.0 -> erfcl(x) ~=~ 0.0 -{ .mfi - ldfe FR_C1 = [GR_ad_C],16 // Get C1 for main path -(p6) fcmp.gt.unc.s1 p15,p0 = FR_AbsArg, FR_POS_ARG_ASYMP // p6: x >= 0 - nop.i 0 -} -{ .mfb - nop.m 0 -(p12) fma.s1 FR_dx = FR_dx1, f1, f0 //p12: dx = 0.875 for x < 0.681 - nop.b 0 -} -;; - -//p14: x < - NEG_ARG_ASYMP = -6.5 -> erfcl(x) ~=~ 2.0 -{ .mfi - nop.m 0 -(p7) fcmp.gt.unc.s1 p14,p0 = FR_AbsArg,FR_NEG_ARG_ASYMP // p7: x < 0 - shladd GR_ShftXBi_bias = GR_mBIAS, 4, r0 -} -;; - -{ .mfi - nop.m 0 - fma.s0 FR_Tmpf = f1, f1, FR_EpsNorm // flag i - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_float_N = FR_N_signif, FR_2TOM51, FR_RSHF - nop.i 0 -} -;; - -// p8: x < UnfBound ~=~ 106.53... -> result without underflow error -// p14: y ~=~ 2, x < -6.5,quick exit -{ .mfi - getf.exp GR_IndxPlusBias = FR_Tmp // exp + bias for (|x|+1)^4 - fcmp.lt.s1 p8,p0 = FR_NormX,FR_UnfBound - nop.i 0 -} -{ .mfb - nop.m 0 -(p14) fnma.s0 FR_RESULT = FR_EpsNorm,FR_EpsNorm,FR_2 -(p14) br.ret.spnt b0 - -} -;; - -// p15: y ~=~ 0.0 (result with underflow error), x > POS_ARG_ASYMP = 107.0, -// call __libm_error_region -{ .mfb -(p15) mov GR_Parameter_TAG = 207 -(p15) fma.s0 FR_RESULT = FR_EpsNorm,FR_EpsNorm,f0 -(p15) br.cond.spnt __libm_error_region -} -;; - -{ .mfi - getf.sig GR_N_fix = FR_N_signif // Get N from significand - nop.f 0 - shl GR_ShftPi = GR_IndxPlusBias, 8 - -} -{ .mfi - shladd GR_ShftXBi = GR_IndxPlusBias, 4, GR_ShftXBi_bias - nop.f 0 - nop.i 0 -} -;; - -{ .mmi - add GR_ERFC_S_TB = GR_ERFC_S_TB, GR_ShftXBi //poin.to S[i] - add GR_ERFC_XC_TB = GR_ERFC_XC_TB, GR_ShftXBi //poin.to XC[i] - sub GR_ShftPi = GR_ShftPi, GR_ShftPi_bias // 256*i -} -;; - -{ .mfi - ldfe FR_Xc = [GR_ERFC_XC_TB] - fma.s1 FR_Xpdx_hi = FR_AbsArg, f1, FR_dx // x + dx - add GR_ShftA14 = 0xE0, GR_ShftPi // pointer shift for A14 - - -} -{ .mfi - ldfe FR_S = [GR_ERFC_S_TB] - fnma.s1 FR_r = FR_L_hi, FR_float_N, FR_norm_x//r= -L_hi*float_N+x - add GR_ShftA15 = 0xF0, GR_ShftPi // pointer shift for A15 -} -;; - -{ .mfi - add GR_P_POINT_1 = GR_ERFC_P_TB, GR_ShftA14 // pointer to A14 - fcmp.gt.s1 p9,p10 = FR_AbsArg, FR_dx //p9: x > dx, p10: x <= dx - extr.u GR_M1 = GR_N_fix, 6, 6 // Extract index M_1 -} -{ .mfi - add GR_P_POINT_2 = GR_ERFC_P_TB, GR_ShftA15 // pointer to A15 - nop.f 0 - nop.i 0 - -} -;; - -{ .mfi - ldfe FR_A14 = [GR_P_POINT_1], -32 - nop.f 0 - extr.u GR_M2 = GR_N_fix, 0, 6 // Extract index M_2 -} -{ .mfi - ldfe FR_A15 = [GR_P_POINT_2], -32 - nop.f 0 - shladd GR_ad_W1 = GR_M1,3,GR_ad_W1 // Point to W1 -} -;; - -{ .mfi - ldfe FR_A12 = [GR_P_POINT_1], -64 - nop.f 0 - extr GR_K = GR_N_fix, 12, 32 // Extract limite range K -} -{ .mfi - ldfe FR_A13 = [GR_P_POINT_2], -64 - nop.f 0 - shladd GR_ad_T1 = GR_M1,2,GR_ad_T1 // Point to T1 -} -;; - -{ .mfi - ldfe FR_A8 = [GR_P_POINT_1], 32 - nop.f 0 - add GR_exp_2_k = GR_exp_bias, GR_K // Form exponent of 2^k -} -{ .mfi - ldfe FR_A9 = [GR_P_POINT_2], 32 - nop.f 0 - shladd GR_ad_W2 = GR_M2,3,GR_ad_W2 // Point to W2 -} -;; - -{ .mfi - ldfe FR_A10 = [GR_P_POINT_1], -96 - nop.f 0 - shladd GR_ad_T2 = GR_M2,2,GR_ad_T2 // Point to T2 -} -{ .mfi - ldfe FR_A11 = [GR_P_POINT_2], -96 - fnma.s1 FR_r = FR_L_lo, FR_float_N, FR_r //r = -L_lo*float_N + r - nop.i 0 -} -;; - -{ .mfi - ldfe FR_A4 = [GR_P_POINT_1], 32 -(p10) fms.s1 FR_Tmp = FR_dx,f1, FR_Xpdx_hi //for lo of x+dx, x<=dx - nop.i 0 -} -{ .mfi - ldfe FR_A5 = [GR_P_POINT_2], 32 -(p9) fms.s1 FR_Tmp = FR_AbsArg, f1, FR_Xpdx_hi //for lo of x+dx, x>dx - nop.i 0 -} -;; - -{ .mfi - ldfe FR_A6 = [GR_P_POINT_1], -64 - frcpa.s1 FR_U,p11 = f1, FR_Xpdx_hi // hi of 1 /(x + dx) - nop.i 0 -} -{ .mfi - ldfe FR_A7 = [GR_P_POINT_2], -64 - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - ldfe FR_A2 = [GR_P_POINT_1], -32 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe FR_A3 = [GR_P_POINT_2], -32 - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - ldfe FR_A0 = [GR_P_POINT_1], 224 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe FR_A1 = [GR_P_POINT_2] - fms.s1 FR_LocArg = FR_AbsArg, f1, FR_Xc // xloc = x - x[i] - nop.i 0 -} -;; - -{ .mfi - ldfd FR_W1 = [GR_ad_W1],0 // Get W1 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfd FR_W2 = [GR_ad_W2],0 // Get W2 - fma.s1 FR_poly = FR_r, FR_C3, FR_C2 // poly = r * A3 + A2 - nop.i 0 -} -;; - -{ .mfi - ldfs FR_T1 = [GR_ad_T1],0 // Get T1 -(p10) fma.s1 FR_Xpdx_lo = FR_AbsArg,f1, FR_Tmp//lo of x + dx , x <= dx - nop.i 0 -} -{ .mfi - ldfs FR_T2 = [GR_ad_T2],0 // Get T2 -(p9) fma.s1 FR_Xpdx_lo = FR_dx,f1, FR_Tmp // lo of x + dx, x > dx - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 FR_Tmp1 = FR_Xpdx_hi, FR_U, FR_2 // N-R, iter. N1 - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 FR_rsq = FR_r, FR_r // rsq = r * r - nop.i 0 -} -;; - -{ .mfi - setf.exp FR_scale = GR_exp_2_k // Set scale = 2^k - fma.s1 FR_P15_1_1 = FR_LocArg, FR_LocArg, f0 // xloc ^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P15_0_1 = FR_A15, FR_LocArg, FR_A14 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_P15_1_2 = FR_A13, FR_LocArg, FR_A12 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_poly = FR_r, FR_poly, FR_C1 // poly = r * poly + A1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_P15_2_1 = FR_A9, FR_LocArg, FR_A8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P15_2_2 = FR_A11, FR_LocArg, FR_A10 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_U = FR_U, FR_Tmp1, f0 // N-R, iter. N1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_P15_3_1 = FR_A5, FR_LocArg, FR_A4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P15_3_2 = FR_A7, FR_LocArg, FR_A6 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_P15_4_2 = FR_A3, FR_LocArg, FR_A2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_W = FR_W1, FR_W2, FR_W2 // W = W1 * W2 + W2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fmpy.s1 FR_T = FR_T1, FR_T2 // T = T1 * T2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P15_7_1 = FR_P15_0_1, FR_P15_1_1, FR_P15_1_2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_P15_7_2 = FR_P15_1_1, FR_P15_1_1, f0 // xloc^4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P15_8_1 = FR_P15_1_1, FR_P15_2_2, FR_P15_2_1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 FR_Tmp = FR_Xpdx_hi, FR_U, FR_2 // N-R, iter. N2 - nop.i 0 -} - -{ .mfi - nop.m 0 - fma.s1 FR_poly = FR_rsq, FR_poly, FR_r // poly = rsq * poly + r - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_P15_9_1 = FR_P15_1_1, FR_P15_4_2, FR_A0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P15_9_2 = FR_P15_1_1, FR_P15_3_2, FR_P15_3_1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_W = FR_W, f1, FR_W1 // W = W + W1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_T_scale = FR_T, FR_scale, f0 // T_scale = T * scale - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_P15_13_1 = FR_P15_7_2, FR_P15_7_1, FR_P15_8_1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_U = FR_U, FR_Tmp, f0 // N-R, iter. N2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_P15_14_1 = FR_P15_7_2, FR_P15_9_2, FR_P15_9_1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_P15_14_2 = FR_P15_7_2, FR_P15_7_2, f0 // xloc^8 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_M = FR_T_scale, FR_S, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 FR_Tmp = FR_Xpdx_hi, FR_U, FR_2 // N-R, iter. N3 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_Q = FR_P15_14_2, FR_P15_13_1, FR_P15_14_1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fms.s1 FR_H = FR_W, f1, FR_xsq_lo // H = W - xsq_lo - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_U = FR_U, FR_Tmp, f0 // N-R, iter. N3 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_Q = FR_A1, FR_LocArg, FR_Q - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 FR_Tmp = FR_Xpdx_hi, FR_U, f1 // for du - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_R = FR_H, FR_poly, FR_poly - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_res_pos_x_hi = FR_M, FR_U, f0 // M *U - nop.i 0 - -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_R = FR_R, f1, FR_H // R = H + P(r) + H*P(r) - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s0 FR_Tmpf = f8, f1, f0 // flag d - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 FR_dU = FR_Xpdx_lo, FR_U, FR_Tmp - nop.i 0 -} -;; - -// p7: we begin to calculate y(x) = 2 - erfcl(-x) in multi precision -// for -6.5 <= x < 0 -{ .mfi - nop.m 0 - fms.s1 FR_res_pos_x_lo = FR_M, FR_U, FR_res_pos_x_hi - nop.i 0 - -} -{ .mfi - nop.m 0 -(p7) fnma.s1 FR_Tmp1 = FR_res_pos_x_hi, f1, FR_2 //p7: x < 0 - nop.i 0 - -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_G = FR_R, FR_Q, FR_Q - nop.i 0 - -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_Tmp = FR_R, f1, FR_dU // R + du - nop.i 0 - -} -;; - -{ .mfi - nop.m 0 -(p7) fnma.s1 FR_Tmp2 = FR_Tmp1, f1, FR_2 //p7: x < 0 - nop.i 0 - -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_G = FR_G, f1, FR_Tmp - nop.i 0 - -} -;; - -{ .mfi - nop.m 0 -(p7) fnma.s1 FR_Tmp2 = FR_res_pos_x_hi, f1, FR_Tmp2 //p7: x < 0 - nop.i 0 - -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_V = FR_G, FR_res_pos_x_hi, f0 // V = G * M *U - nop.i 0 - -} -;; - -{ .mfi - nop.m 0 -(p7) fma.s1 FR_res_pos_x_lo = FR_res_pos_x_lo, f1, FR_V //p7: x < 0 - nop.i 0 - -} -;; - -{ .mfi - nop.m 0 -(p7) fnma.s1 FR_Tmp2 = FR_res_pos_x_lo, f1, FR_Tmp2 //p7: x < 0 - nop.i 0 - -} -;; - - -//p6: result for 0 < x < = POS_ARG_ASYMP -//p7: result for - NEG_ARG_ASYMP <= x < 0 -//p8: exit for - NEG_ARG_ASYMP <= x < UnfBound - -ERFC_RESULT: -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fma.s0 f8 = FR_M, FR_U, FR_V // p6: x >= 0 - nop.i 0 -} -{ .mfb - mov GR_Parameter_TAG = 207 -(p7) fma.s0 f8 = FR_Tmp2, f1, FR_Tmp1 // p7: x < 0 -(p8) br.ret.sptk b0 -};; - -GLOBAL_LIBM_END(erfcl) - -// call via (p15) br.cond.spnt __libm_error_region -// for x > POS_ARG_ASYMP -// or -// -// after .endp erfcl for UnfBound < = x < = POS_ARG_ASYMP - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfe [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfe [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfe [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_erff.S b/sysdeps/ia64/fpu/s_erff.S deleted file mode 100644 index a5cde66d5d..0000000000 --- a/sysdeps/ia64/fpu/s_erff.S +++ /dev/null @@ -1,558 +0,0 @@ -.file "erff.s" - - -// Copyright (c) 2001 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 08/14/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/06/03 Reordered header: .section, .global, .proc, .align -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// float erff(float) -// -// Overview of operation -//============================================================== -// Background -// -// -// There are 8 paths: -// 1. x = +/-0.0 -// Return erff(x) = +/-0.0 -// -// 2. 0.0 < |x| < 0.125 -// Return erff(x) = x *Pol3(x^2), -// where Pol3(x^2) = C3*x^6 + C2*x^4 + C1*x^2 + C0 -// -// 3. 0.125 <= |x| < 4.0 -// Return erff(x) = sign(x)*PolD(x)*PolC(|x|) + sign(x)*PolA(|x|), -// where sign(x)*PolD(x) = sign(x)*(|x|^7 + D2*x^6 + D1*|x|^5 + D0*x^4), -// PolC(|x|) = B0*x^4 + C3*|x|^3 + C2*|x|^2 + C1*|x| + C0, -// PolA(|x|) = A3|x|^3 + A2*x^2 + A1*|x| + A0 -// -// Actually range 0.125<=|x|< 4.0 is splitted to 5 subranges. -// For each subrange there is particular set of coefficients. -// Below is the list of subranges: -// 3.1 0.125 <= |x| < 0.25 -// 3.2 0.25 <= |x| < 0.5 -// 3.3 0.5 <= |x| < 1.0 -// 3.4 1.0 <= |x| < 2.0 -// 3.5 2.0 <= |x| < 4.0 -// -// 4. 4.0 <= |x| < +INF -// Return erff(x) = sign(x)*(1.0d - 2^(-52)) -// -// 5. |x| = INF -// Return erff(x) = sign(x) * 1.0 -// -// 6. x = [S,Q]NaN -// Return erff(x) = QNaN -// -// 7. x is positive denormal -// Return erff(x) = C0*x - x^2, -// where C0 = 2.0/sqrt(Pi) -// -// 8. x is negative denormal -// Return erff(x) = C0*x + x^2, -// where C0 = 2.0/sqrt(Pi) -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f32 -> f59 - -// General registers used: -// r32 -> r45, r2, r3 - -// Predicate registers used: -// p0, p6 -> p12, p14, p15 - -// p6 to filter out case when x = [Q,S]NaN or +/-0 -// p7 to filter out case when x = denormal -// p8 set if |x| >= 0.3125, used also to process denormal input -// p9 to filter out case when |x| = inf -// p10 to filter out case when |x| < 0.125 -// p11 to filter out case when 0.125 <= |x| < 4.0 -// p12 to filter out case when |x| >= 4.0 -// p14 set to 1 for positive x -// p15 set to 1 for negative x - -// Assembly macros -//============================================================== -rDataPtr = r2 -rDataPtr1 = r3 - -rBias = r33 -rCoeffAddr3 = r34 -rCoeffAddr1 = r35 -rCoeffAddr2 = r36 -rOffset2 = r37 -rBias2 = r38 -rMask = r39 -rArg = r40 -rBound = r41 -rSignBit = r42 -rAbsArg = r43 -rDataPtr2 = r44 -rSaturation = r45 - -//============================================================== -fA0 = f32 -fA1 = f33 -fA2 = f34 -fA3 = f35 -fC0 = f36 -fC1 = f37 -fC2 = f38 -fC3 = f39 -fD0 = f40 -fD1 = f41 -fD2 = f42 -fB0 = f43 -fArgSqr = f44 -fAbsArg = f45 -fSignumX = f46 -fArg4 = f47 -fArg4Sgn = f48 -fArg3 = f49 -fArg3Sgn = f50 -fArg7Sgn = f51 -fArg6Sgn = f52 -fPolC = f53 -fPolCTmp = f54 -fPolA = f55 -fPolATmp = f56 -fPolD = f57 -fPolDTmp = f58 -fArgSqrSgn = f59 - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(erff_data) -// Polynomial coefficients for the erf(x), 0.125 <= |x| < 0.25 -data8 0xBE4218BB56B49E66 // C0 -data8 0x3F7AFB8315DA322B // C1 -data8 0x3F615D6EBEE0CA32 // C2 -data8 0xBF468D71CF4F0918 // C3 -data8 0x40312115B0932F24 // D0 -data8 0xC0160D6CD0991EA3 // D1 -data8 0xBFE04A567A6DBE4A // D2 -data8 0xBF4207BC640D1509 // B0 -// Polynomial coefficients for the erf(x), 0.25 <= |x| < 0.5 -data8 0x3F90849356383F58 // C0 -data8 0x3F830BD5BA240F09 // C1 -data8 0xBF3FA4970E2BCE23 // C2 -data8 0xBF6061798E58D0FD // C3 -data8 0xBF68C0D83DD22E02 // D0 -data8 0x401C0A9EE4108F94 // D1 -data8 0xC01056F9B5E387F5 // D2 -data8 0x3F1C9744E36A5706 // B0 -// Polynomial coefficients for the erf(x), 0.5 <= |x| < 1.0 -data8 0x3F85F7D419A13DE3 // C0 -data8 0x3F791A13FF66D45A // C1 -data8 0x3F46B17B16B5929F // C2 -data8 0xBF5124947A8BF45E // C3 -data8 0x3FA1B3FD95EA9564 // D0 -data8 0x40250CECD79A020A // D1 -data8 0xC0190DC96FF66CCD // D2 -data8 0x3F4401AE28BA4DD5 // B0 -// Polynomial coefficients for the erf(x), 1.0 <= |x| < 2.0 -data8 0xBF49E07E3584C3AE // C0 -data8 0x3F3166621131445C // C1 -data8 0xBF65B7FC1EAC2099 // C2 -data8 0x3F508C6BD211D736 // C3 -data8 0xC053FABD70601067 // D0 -data8 0x404A06640EE87808 // D1 -data8 0xC0283F30817A3F08 // D2 -data8 0xBF2F6DBBF4D6257F // B0 -// Polynomial coefficients for the erf(x), 2.0 <= |x| < 4.0 -data8 0xBF849855D67E9407 // C0 -data8 0x3F5ECA5FEC01C70C // C1 -data8 0xBF483110C30FABA4 // C2 -data8 0x3F1618DA72860403 // C3 -data8 0xC08A5C9D5FE8B9F6 // D0 -data8 0x406EFF5F088CEC4B // D1 -data8 0xC03A5743DF38FDE0 // D2 -data8 0xBEE397A9FA5686A2 // B0 -// Polynomial coefficients for the erf(x), -0.125 < x < 0.125 -data8 0x3FF20DD7504270CB // C0 -data8 0xBFD8127465AFE719 // C1 -data8 0x3FBCE2D77791DD77 // C2 -data8 0xBF9B582755CDF345 // C3 -// Polynomial coefficients for the erf(x), 0.125 <= |x| < 0.25 -data8 0xBD54E7E451AF0E36 // A0 -data8 0x3FF20DD75043FE20 // A1 -data8 0xBE05680ACF8280E4 // A2 -data8 0xBFD812745E92C3D3 // A3 -// Polynomial coefficients for the erf(x), 0.25 <= |x| < 0.5 -data8 0xBE1ACEC2859CB55F // A0 -data8 0x3FF20DD75E8D2B64 // A1 -data8 0xBEABC6A83208FCFC // A2 -data8 0xBFD81253E42E7B99 // A3 -// Polynomial coefficients for the erf(x), 0.5 <= |x| < 1.0 -data8 0x3EABD5A2482B4979 // A0 -data8 0x3FF20DCAA52085D5 // A1 -data8 0x3F13A994A348795B // A2 -data8 0xBFD8167B2DFCDE44 // A3 -// Polynomial coefficients for the erf(x), 1.0 <= |x| < 2.0 -data8 0xBF5BA377DDAB4E17 // A0 -data8 0x3FF2397F1D8FC0ED // A1 -data8 0xBF9945BFC1915C21 // A2 -data8 0xBFD747AAABB690D8 // A3 -// Polynomial coefficients for the erf(x), 2.0 <= |x| < 4.0 -data8 0x3FF0E2920E0391AF // A0 -data8 0xC00D249D1A95A5AE // A1 -data8 0x40233905061C3803 // A2 -data8 0xC027560B851F7690 // A3 -// -data8 0x3FEFFFFFFFFFFFFF // 1.0 - epsilon -data8 0x3FF20DD750429B6D // C0 = 2.0/sqrt(Pi) -LOCAL_OBJECT_END(erff_data) - - -.section .text -GLOBAL_LIBM_ENTRY(erff) - -{ .mfi - alloc r32 = ar.pfs, 0, 14, 0, 0 - fmerge.s fAbsArg = f1, f8 // |x| - addl rMask = 0x806, r0 -} -{ .mfi - addl rDataPtr = @ltoff(erff_data), gp - fma.s1 fArgSqr = f8, f8, f0 // x^2 - adds rSignBit = 0x1, r0 -} -;; - -{ .mfi - getf.s rArg = f8 // x in GR - fclass.m p7,p0 = f8, 0x0b // is x denormal ? - // sign bit and 2 most bits in significand - shl rMask = rMask, 20 -} -{ .mfi - ld8 rDataPtr = [rDataPtr] - nop.f 0 - adds rBias2 = 0x1F0, r0 -} -;; - -{ .mfi - nop.m 0 - fmerge.s fSignumX = f8, f1 // signum(x) - shl rSignBit = rSignBit, 31 // mask for sign bit -} -{ .mfi - adds rBound = 0x3E0, r0 - nop.f 0 - adds rSaturation = 0x408, r0 -} -;; - -{ .mfi - andcm rOffset2 = rArg, rMask - fclass.m p6,p0 = f8, 0xc7 // is x [S,Q]NaN or +/-0 ? - shl rBound = rBound, 20 // 0.125f in GR -} -{ .mfb - andcm rAbsArg = rArg, rSignBit // |x| in GR - nop.f 0 -(p7) br.cond.spnt erff_denormal // branch out if x is denormal -} -;; - -{ .mfi - adds rCoeffAddr2 = 352, rDataPtr - fclass.m p9,p0 = f8, 0x23 // is x +/- inf? - shr rOffset2 = rOffset2, 21 -} -{ .mfi - cmp.lt p10, p8 = rAbsArg, rBound // |x| < 0.125? - nop.f 0 - adds rCoeffAddr3 = 16, rDataPtr -} -;; - -{ .mfi -(p8) sub rBias = rOffset2, rBias2 - fma.s1 fArg4 = fArgSqr, fArgSqr, f0 // x^4 - shl rSaturation = rSaturation, 20// 4.0 in GR (saturation bound) -} -{ .mfb -(p10) adds rBias = 0x14, r0 -(p6) fma.s.s0 f8 = f8,f1,f8 // NaN or +/-0 -(p6) br.ret.spnt b0 // exit for x = NaN or +/-0 -} -;; - -{ .mfi - shladd rCoeffAddr1 = rBias, 4, rDataPtr - fma.s1 fArg3Sgn = fArgSqr, f8, f0 // sign(x)*|x|^3 - // is |x| < 4.0? - cmp.lt p11, p12 = rAbsArg, rSaturation -} -{ .mfi - shladd rCoeffAddr3 = rBias, 4, rCoeffAddr3 - fma.s1 fArg3 = fArgSqr, fAbsArg, f0 // |x|^3 - shladd rCoeffAddr2 = rBias, 3, rCoeffAddr2 -} -;; - -{ .mfi -(p11) ldfpd fC0, fC1 = [rCoeffAddr1] -(p9) fmerge.s f8 = f8,f1 // +/- inf -(p12) adds rDataPtr = 512, rDataPtr -} -{ .mfb -(p11) ldfpd fC2, fC3 = [rCoeffAddr3], 16 - nop.f 0 -(p9) br.ret.spnt b0 // exit for x = +/- inf -} -;; - -{ .mfi -(p11) ldfpd fA0, fA1 = [rCoeffAddr2], 16 - nop.f 0 - nop.i 0 -} -{ .mfi - add rCoeffAddr1 = 48, rCoeffAddr1 - nop.f 0 - nop.i 0 -} -;; - -{ .mfi -(p11) ldfpd fD0, fD1 = [rCoeffAddr3] - nop.f 0 - nop.i 0 -} -{ .mfb -(p11) ldfpd fD2, fB0 = [rCoeffAddr1] - // sign(x)*|x|^2 - fma.s1 fArgSqrSgn = fArgSqr, fSignumX, f0 -(p10) br.cond.spnt erff_near_zero -} -;; - -{ .mfi -(p11) ldfpd fA2, fA3 = [rCoeffAddr2], 16 - fcmp.lt.s1 p15, p14 = f8,f0 - nop.i 0 -} -{ .mfb -(p12) ldfd fA0 = [rDataPtr] - fma.s1 fArg4Sgn = fArg4, fSignumX, f0 // sign(x)*|x|^4 -(p12) br.cond.spnt erff_saturation -} -;; -{ .mfi - nop.m 0 - fma.s1 fArg7Sgn = fArg4, fArg3Sgn, f0 // sign(x)*|x|^7 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fArg6Sgn = fArg3, fArg3Sgn, f0 // sign(x)*|x|^6 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fPolC = fC3, fAbsArg, fC2 // C3*|x| + C2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPolCTmp = fC1, fAbsArg, fC0 // C1*|x| + C0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fPolA = fA1, fAbsArg, fA0 // A1*|x| + A0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fPolD = fD1, fAbsArg, fD0 // D1*|x| + D0 - nop.i 0 -} -{ .mfi - nop.m 0 - // sign(x)*(|x|^7 + D2*x^6) - fma.s1 fPolDTmp = fArg6Sgn, fD2, fArg7Sgn - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fPolATmp = fA3, fAbsArg, fA2 // A3*|x| + A2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB0 = fB0, fArg4, f0 // B0*x^4 - nop.i 0 -};; - -{ .mfi - nop.m 0 - // C3*|x|^3 + C2*x^2 + C1*|x| + C0 - fma.s1 fPolC = fPolC, fArgSqr, fPolCTmp - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // PolD = sign(x)*(|x|^7 + D2*x^6 + D1*|x|^5 + D0*x^4) - fma.d.s1 fPolD = fPolD, fArg4Sgn, fPolDTmp - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // PolA = A3|x|^3 + A2*x^2 + A1*|x| + A0 - fma.d.s1 fPolA = fPolATmp, fArgSqr, fPolA - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // PolC = B0*x^4 + C3*|x|^3 + C2*|x|^2 + C1*|x| + C0 - fma.d.s1 fPolC = fPolC, f1, fB0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p14) fma.s.s0 f8 = fPolC, fPolD, fPolA // for positive x - nop.i 0 -} -{ .mfb - nop.m 0 -(p15) fms.s.s0 f8 = fPolC, fPolD, fPolA // for negative x - br.ret.sptk b0 // Exit for 0.125 <=|x|< 4.0 -};; - - -// Here if |x| < 0.125 -erff_near_zero: -{ .mfi - nop.m 0 - fma.s1 fPolC = fC3, fArgSqr, fC2 // C3*x^2 + C2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPolCTmp = fC1, fArgSqr, fC0 // C1*x^2 + C0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fPolC = fPolC, fArg4, fPolCTmp // C3*x^6 + C2*x^4 + C1*x^2 + C0 - nop.i 0 -};; - -{ .mfb - nop.m 0 - // x*(C3*x^6 + C2*x^4 + C1*x^2 + C0) - fma.s.s0 f8 = fPolC, f8, f0 - br.ret.sptk b0 // Exit for |x| < 0.125 -};; - -// Here if 4.0 <= |x| < +inf -erff_saturation: -{ .mfb - nop.m 0 - fma.s.s0 f8 = fA0, fSignumX, f0 // sign(x)*(1.0d - 2^(-52)) - // Exit for 4.0 <= |x| < +inf - br.ret.sptk b0 // Exit for 4.0 <=|x|< +inf -} -;; - -// Here if x is single precision denormal -erff_denormal: -{ .mfi - adds rDataPtr = 520, rDataPtr // address of C0 - fclass.m p7,p8 = f8, 0x0a // is x -denormal ? - nop.i 0 -} -;; -{ .mfi - ldfd fC0 = [rDataPtr] // C0 - nop.f 0 - nop.i 0 -} -;; -{ .mfi - nop.m 0 - fma.s1 fC0 = fC0,f8,f0 // C0*x - nop.i 0 -} -;; -{ .mfi - nop.m 0 -(p7) fma.s.s0 f8 = f8,f8,fC0 // -denormal - nop.i 0 -} -{ .mfb - nop.m 0 -(p8) fnma.s.s0 f8 = f8,f8,fC0 // +denormal - br.ret.sptk b0 // Exit for denormal -} -;; - -GLOBAL_LIBM_END(erff) diff --git a/sysdeps/ia64/fpu/s_erfl.S b/sysdeps/ia64/fpu/s_erfl.S deleted file mode 100644 index 1fcb2127ea..0000000000 --- a/sysdeps/ia64/fpu/s_erfl.S +++ /dev/null @@ -1,1237 +0,0 @@ -.file "erfl.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 11/21/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 08/14/02 Changed mli templates to mlx -// 02/06/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// long double erfl(long double) -// -// Overview of operation -//============================================================== -// -// Algorithm description -// --------------------- -// -// There are 4 paths: -// -// 1. Special path: x = 0, Inf, NaNs, denormal -// Return erfl(x) = +/-0.0 for zeros -// Return erfl(x) = QNaN for NaNs -// Return erfl(x) = sign(x)*1.0 for Inf -// Return erfl(x) = (A0H+A0L)*x + x^2, ((A0H+A0L) = 2.0/sqrt(Pi)) -// for denormals -// -// 2. [0;1/8] path: 0.0 < |x| < 1/8 -// Return erfl(x) = x*(A1H+A1L) + x^3*A3 + ... + x^15*A15 -// -// 3. Main path: 1/8 <= |x| < 6.53 -// For several ranges of 1/8 <= |x| < 6.53 -// Return erfl(x) = sign(x)*((A0H+A0L) + y*(A1H+A1L) + y^2*(A2H+A2L) + -// + y^3*A3 + y^4*A4 + ... + y^25*A25 ) -// where y = (|x|/a) - b -// -// For each range there is particular set of coefficients. -// Below is the list of ranges: -// 1/8 <= |x| < 1/4 a = 0.125, b = 1.5 -// 1/4 <= |x| < 1/2 a = 0.25, b = 1.5 -// 1/2 <= |x| < 1.0 a = 0.5, b = 1.5 -// 1.0 <= |x| < 2.0 a = 1.0, b = 1.5 -// 2.0 <= |x| < 3.25 a = 2.0, b = 1.5 -// 3.25 <= |x| < 4.0 a = 2.0, b = 2.0 -// 4.0 <= |x| < 6.53 a = 4.0, b = 1.5 -// ( [3.25;4.0] subrange separated for monotonicity issues resolve ) -// -// 4. Saturation path: 6.53 <= |x| < +INF -// Return erfl(x) = sign(x)*(1.0 - tiny_value) -// (tiny_value ~ 1e-1233) -// -// Implementation notes -// -------------------- -// -// 1. Special path: x = 0, INF, NaNa, denormals -// -// This branch is cut off by one fclass operation. -// Then zeros+nans, infinities and denormals processed separately. -// For denormals we had to use multiprecision A0 coefficient to reach -// necessary accuracy: (A0H+A0L)*x-x^2 -// -// 2. [0;1/8] path: 0.0 < |x| < 1/8 -// -// First coefficient of polynomial we must split to multiprecision too. -// Also we can parallelise computations: -// (x*(A1H+A1L)) calculated in parallel with "tail" (x^3*A3 + ... + x^15*A15) -// Furthermore the second part is factorized using binary tree technique. -// -// 3. Main path: 1/8 <= |x| < 6.53 -// -// Multiprecision have to be performed only for first few -// polynomial iterations (up to 3-rd x degree) -// Here we use the same parallelisation way as above: -// Split whole polynomial to first, "multiprecision" part, and second, -// so called "tail", native precision part. -// -// 1) Multiprecision part: -// [v1=(A0H+A0L)+y*(A1H+A1L)] + [v2=y^2*((A2H+A2L)+y*A3)] -// v1 and v2 terms calculated in parallel -// -// 2) Tail part: -// v3 = x^4 * ( A4 + x*A5 + ... + x^21*A25 ) -// v3 is splitted to 2 even parts (10 coefficient in each one). -// These 2 parts are also factorized using binary tree technique. -// -// So Multiprecision and Tail parts cost is almost the same -// and we have both results ready before final summation. -// -// 4. Saturation path: 6.53 <= |x| < +INF -// -// We use formula sign(x)*(1.0 - tiny_value) instead of simple sign(x)*1.0 -// just to meet IEEE requirements for different rounding modes in this case. -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8 - input & output -// f32 -> f90 - -// General registers used: -// r2, r3, r32 -> r52 - -// Predicate registers used: -// p0, p6 -> p11, p14, p15 - -// p6 - arg is zero, denormal or special IEEE -// p7 - arg is in [4;8] binary interval -// p8 - arg is in [3.25;4] interval -// p9 - arg < 1/8 -// p10 - arg is NOT in [3.25;4] interval -// p11 - arg in saturation domain -// p14 - arg is positive -// p15 - arg is negative - -// Assembly macros -//============================================================== -rDataPtr = r2 -rTailDataPtr = r3 - -rBias = r33 -rSignBit = r34 -rInterval = r35 - -rArgExp = r36 -rArgSig = r37 -r3p25Offset = r38 -r2to4 = r39 -r1p25 = r40 -rOffset = r41 -r1p5 = r42 -rSaturation = r43 -r3p25Sign = r44 -rTiny = r45 -rAddr1 = r46 -rAddr2 = r47 -rTailAddr1 = r48 -rTailAddr2 = r49 -rTailOffset = r50 -rTailAddOffset = r51 -rShiftedDataPtr = r52 - -//============================================================== -fA0H = f32 -fA0L = f33 -fA1H = f34 -fA1L = f35 -fA2H = f36 -fA2L = f37 -fA3 = f38 -fA4 = f39 -fA5 = f40 -fA6 = f41 -fA7 = f42 -fA8 = f43 -fA9 = f44 -fA10 = f45 -fA11 = f46 -fA12 = f47 -fA13 = f48 -fA14 = f49 -fA15 = f50 -fA16 = f51 -fA17 = f52 -fA18 = f53 -fA19 = f54 -fA20 = f55 -fA21 = f56 -fA22 = f57 -fA23 = f58 -fA24 = f59 -fA25 = f60 - -fArgSqr = f61 -fArgCube = f62 -fArgFour = f63 -fArgEight = f64 - -fArgAbsNorm = f65 -fArgAbsNorm2 = f66 -fArgAbsNorm2L = f67 -fArgAbsNorm3 = f68 -fArgAbsNorm4 = f69 -fArgAbsNorm11 = f70 - -fRes = f71 -fResH = f72 -fResL = f73 -fRes1H = f74 -fRes1L = f75 -fRes1Hd = f76 -fRes2H = f77 -fRes2L = f78 -fRes3H = f79 -fRes3L = f80 -fRes4 = f81 - -fTT = f82 -fTH = f83 -fTL = f84 -fTT2 = f85 -fTH2 = f86 -fTL2 = f87 - -f1p5 = f88 -f2p0 = f89 -fTiny = f90 - - -// Data tables -//============================================================== -RODATA - -.align 64 -LOCAL_OBJECT_START(erfl_data) -////////// Main tables /////////// -_0p125_to_0p25_data: // exp = 2^-3 -// Polynomial coefficients for the erf(x), 1/8 <= |x| < 1/4 -data8 0xACD9ED470F0BB048, 0x0000BFF4 //A3 = -6.5937529303909561891162915809e-04 -data8 0xBF6A254428DDB452 //A2H = -3.1915980570631852578089571182e-03 -data8 0xBC131B3BE3AC5079 //A2L = -2.5893976889070198978842231134e-19 -data8 0x3FC16E2D7093CD8C //A1H = 1.3617485043469590433318217038e-01 -data8 0x3C6979A52F906B4C //A1L = 1.1048096806003284897639351952e-17 -data8 0x3FCAC45E37FE2526 //A0H = 2.0911767705937583938791135552e-01 -data8 0x3C648D48536C61E3 //A0L = 8.9129592834861155344147026365e-18 -data8 0xD1FC135B4A30E746, 0x00003F90 //A25 = 6.3189963203954877364460345654e-34 -data8 0xB1C79B06DD8C988C, 0x00003F97 //A24 = 6.8478253118093953461840838106e-32 -data8 0xCC7AE121D1DEDA30, 0x0000BF9A //A23 = -6.3010264109146390803803408666e-31 -data8 0x8927B8841D1E0CA8, 0x0000BFA1 //A22 = -5.4098171537601308358556861717e-29 -data8 0xB4E84D6D0C8F3515, 0x00003FA4 //A21 = 5.7084320046554628404861183887e-28 -data8 0xC190EAE69A67959A, 0x00003FAA //A20 = 3.9090359419467121266470910523e-26 -data8 0x90122425D312F680, 0x0000BFAE //A19 = -4.6551806872355374409398000522e-25 -data8 0xF8456C9C747138D6, 0x0000BFB3 //A18 = -2.5670639225386507569611436435e-23 -data8 0xCDCAE0B3C6F65A3A, 0x00003FB7 //A17 = 3.4045511783329546779285646369e-22 -data8 0x8F41909107C62DCC, 0x00003FBD //A16 = 1.5167830861896169812375771948e-20 -data8 0x82F0FCB8A4B8C0A3, 0x0000BFC1 //A15 = -2.2182328575376704666050112195e-19 -data8 0x92E992C58B7C3847, 0x0000BFC6 //A14 = -7.9641369349930600223371163611e-18 -LOCAL_OBJECT_END(erfl_data) - -LOCAL_OBJECT_START(_0p25_to_0p5_data) -// Polynomial coefficients for the erf(x), 1/4 <= |x| < 1/2 -data8 0xF083628E8F7CE71D, 0x0000BFF6 //A3 = -3.6699405305266733332335619531e-03 -data8 0xBF978749A434FE4E //A2H = -2.2977018973732214746075186440e-02 -data8 0xBC30B3FAFBC21107 //A2L = -9.0547407100537663337591537643e-19 -data8 0x3FCF5F0CDAF15313 //A1H = 2.4508820238647696654332719390e-01 -data8 0x3C1DFF29F5AD8117 //A1L = 4.0653155218104625249413579084e-19 -data8 0x3FD9DD0D2B721F38 //A0H = 4.0411690943482225790717166092e-01 -data8 0x3C874C71FEF1759E //A0L = 4.0416653425001310671815863946e-17 -data8 0xA621D99B8C12595E, 0x0000BFAB //A25 = -6.7100271986703749013021666304e-26 -data8 0xBD7BBACB439992E5, 0x00003FAE //A24 = 6.1225362452814749024566661525e-25 -data8 0xFF2FEFF03A98E410, 0x00003FB2 //A23 = 1.3192871864994282747963195183e-23 -data8 0xAE8180957ABE6FD5, 0x0000BFB6 //A22 = -1.4434787102181180110707433640e-22 -data8 0xAF0566617B453AA6, 0x0000BFBA //A21 = -2.3163848847252215762970075142e-21 -data8 0x8F33D3616B9B8257, 0x00003FBE //A20 = 3.0324297082969526400202995913e-20 -data8 0xD58AB73354438856, 0x00003FC1 //A19 = 3.6175397854863872232142412590e-19 -data8 0xD214550E2F3210DF, 0x0000BFC5 //A18 = -5.6942141660091333278722310354e-18 -data8 0xE2CA60C328F3BBF5, 0x0000BFC8 //A17 = -4.9177359011428870333915211291e-17 -data8 0x88D9BB274F9B3873, 0x00003FCD //A16 = 9.4959118337089189766177270051e-16 -data8 0xCA4A00AB538A2DB2, 0x00003FCF //A15 = 5.6146496538690657993449251855e-15 -data8 0x9CC8FFFBDDCF9853, 0x0000BFD4 //A14 = -1.3925319209173383944263942226e-13 -LOCAL_OBJECT_END(_0p25_to_0p5_data) - -LOCAL_OBJECT_START(_0p5_to_1_data) -// Polynomial coefficients for the erf(x), 1/2 <= |x| < 1 -data8 0xDB742C8FB372DBE0, 0x00003FF6 //A3 = 3.3485993187250381721535255963e-03 -data8 0xBFBEDC5644353C26 //A2H = -1.2054957547410136142751468924e-01 -data8 0xBC6D7215B023455F //A2L = -1.2770012232203569059818773287e-17 -data8 0x3FD492E42D78D2C4 //A1H = 3.2146553459760363047337250464e-01 -data8 0x3C83A163CAC22E05 //A1L = 3.4053365952542489137756724868e-17 -data8 0x3FE6C1C9759D0E5F //A0H = 7.1115563365351508462453011816e-01 -data8 0x3C8B1432F2CBC455 //A0L = 4.6974407716428899960674098333e-17 -data8 0x95A6B92162813FF8, 0x00003FC3 //A25 = 1.0140763985766801318711038400e-18 -data8 0xFE5EC3217F457B83, 0x0000BFC6 //A24 = -1.3789434273280972156856405853e-17 -data8 0x9B49651031B5310B, 0x0000BFC8 //A23 = -3.3672435142472427475576375889e-17 -data8 0xDBF73927E19B7C8D, 0x00003FCC //A22 = 7.6315938248752024965922341872e-16 -data8 0xF55CBA3052730592, 0x00003FCB //A21 = 4.2563559623888750271176552350e-16 -data8 0xA1DC9380DA82CFF6, 0x0000BFD2 //A20 = -3.5940500736023122607663701015e-14 -data8 0xAAD1AE1067F3D577, 0x00003FD2 //A19 = 3.7929451192558641569555227613e-14 -data8 0xCD1DB83F3B9D2090, 0x00003FD7 //A18 = 1.4574374961011929143375716362e-12 -data8 0x87235ACB5E8BB298, 0x0000BFD9 //A17 = -3.8408559294899660346666452560e-12 -data8 0xDA417B78FF9F46B4, 0x0000BFDC //A16 = -4.9625621225715971268115023451e-11 -data8 0xF075762685484436, 0x00003FDE //A15 = 2.1869603559309150844390066920e-10 -data8 0xB989FDB3795165C7, 0x00003FE1 //A14 = 1.3499740992928183247608593000e-09 -LOCAL_OBJECT_END(_0p5_to_1_data) - -LOCAL_OBJECT_START(_1_to_2_data) -// Polynomial coefficients for the erf(x), 1 <= |x| < 2.0 -data8 0x8E15015F5B55BEAC, 0x00003FFC //A3 = 1.3875200409423426678618977531e-01 -data8 0xBFC6D5A95D0A1B7E //A2H = -1.7839543383544403942764233761e-01 -data8 0xBC7499F704C80E02 //A2L = -1.7868888188464394090788198634e-17 -data8 0x3FBE723726B824A8 //A1H = 1.1893028922362935961842822508e-01 -data8 0x3C6B77F399C2AD27 //A1L = 1.1912589318015368492508652194e-17 -data8 0x3FEEEA5557137ADF //A0H = 9.6610514647531064991170524081e-01 -data8 0x3C963D0DDD0A762F //A0L = 7.7155271023949055047261953350e-17 -data8 0x8FAA405DAD409771, 0x0000BFDB //A25 = -1.6332824616946528652252813763e-11 -data8 0x941386F4697976D8, 0x0000BFDD //A24 = -6.7337295147729213955410252613e-11 -data8 0xBCBE75234530B404, 0x00003FDF //A23 = 3.4332329029092304943838374908e-10 -data8 0xF55E2CE71A00D040, 0x00003FDF //A22 = 4.4632156034175937694868068394e-10 -data8 0xA6CADFE489D2671F, 0x0000BFE3 //A21 = -4.8543000253822277507724949798e-09 -data8 0xA4C69F11FEAFB3A8, 0x00003FE2 //A20 = 2.3978044150868471771557059958e-09 -data8 0xD63441E3BED59703, 0x00003FE6 //A19 = 4.9873285553412397317802071288e-08 -data8 0xDFDAED9D3089D732, 0x0000BFE7 //A18 = -1.0424069510877052249228047044e-07 -data8 0xB47287FF165756A5, 0x0000BFE9 //A17 = -3.3610945128073834488448164164e-07 -data8 0xCDAF2DC0A79A9059, 0x00003FEB //A16 = 1.5324673941628851136481785187e-06 -data8 0x9FD6A7B2ECE8EDA9, 0x00003FEA //A15 = 5.9544479989469083598476592569e-07 -data8 0xEC6E63BB4507B585, 0x0000BFEE //A14 = -1.4092398243085031882423746824e-05 -LOCAL_OBJECT_END(_1_to_2_data) - -LOCAL_OBJECT_START(_2_to_3p25_data) -// Polynomial coefficients for the erf(x), 2 <= |x| < 3.25 -data8 0xCEDBA58E8EE6F055, 0x00003FF7 //A3 = 6.3128050215859026984338771121e-03 -data8 0xBF5B60D5E974CBBD //A2H = -1.6710366233609740427984435840e-03 -data8 0xBC0E11E2AEC18AF6 //A2L = -2.0376133202996259839305825162e-19 -data8 0x3F32408E9BA3327E //A1H = 2.7850610389349567379974059733e-04 -data8 0x3BE41010E4B3B224 //A1L = 3.3987633691879253781833531576e-20 -data8 0x3FEFFFD1AC4135F9 //A0H = 9.9997790950300136092465663751e-01 -data8 0x3C8EEAFA1E97EAE0 //A0L = 5.3633970564750967956196033852e-17 -data8 0xBF9C6F2C6D7263C1, 0x00003FF0 //A25 = 4.5683639377039166585098497471e-05 -data8 0xCB4167CC4798096D, 0x00003FF0 //A24 = 4.8459885139772945417160731273e-05 -data8 0xE1394FECFE972D32, 0x0000BFF2 //A23 = -2.1479022581129892562916533804e-04 -data8 0xC7F9E47581FC2A5F, 0x0000BFF2 //A22 = -1.9071211076537531370822343363e-04 -data8 0xDD612EDFAA41BEAE, 0x00003FF2 //A21 = 2.1112405918671957390188348542e-04 -data8 0x8C166AA4CB2AD8FD, 0x0000BFF4 //A20 = -5.3439165021555312536009227942e-04 -data8 0xEFBE33D9F62B68D4, 0x0000BFF2 //A19 = -2.2863672131516067770956697877e-04 -data8 0xCCB92F5D91562494, 0x00003FF5 //A18 = 1.5619154280865226092321881421e-03 -data8 0x80A5DBE71D4BA0E2, 0x0000BFF6 //A17 = -1.9630109664962540123775799179e-03 -data8 0xA0ADEB2D4C41347A, 0x0000BFF4 //A16 = -6.1294315248639348947483422457e-04 -data8 0xB1F5D4911B911665, 0x00003FF7 //A15 = 5.4309165882071876864550213817e-03 -data8 0xF2F3D8D21E8762E0, 0x0000BFF7 //A14 = -7.4143227286535936033409745884e-03 -LOCAL_OBJECT_END(_2_to_3p25_data) - -LOCAL_OBJECT_START(_4_to_6p53_data) -// Polynomial coefficients for the erf(x), 4 <= |x| < 6.53 -data8 0xDF3151BE8652827E, 0x00003FD5 //A3 = 3.9646979666953349095427642209e-13 -data8 0xBD1C4A9787DF888B //A2H = -2.5127788450714750484839908889e-14 -data8 0xB99B35483E4603FD //A2L = -3.3536613901268985626466020210e-31 -data8 0x3CD2DBF507F1A1F3 //A1H = 1.0468963266736687758710258897e-15 -data8 0x398A97B60913B4BD //A1L = 1.6388968267515149775818013207e-31 -data8 0x3FEFFFFFFFFFFFFF //A0H = 9.9999999999999988897769753748e-01 -data8 0x3C99CC25E658129E //A0L = 8.9502895736398715695745861054e-17 -data8 0xB367B21294713D39, 0x00003FFB //A25 = 8.7600127403270828432337605471e-02 -data8 0xCEE3A423ADEC0F4C, 0x00003FFD //A24 = 4.0408051429309221404807497715e-01 -data8 0xC389626CF2D727C0, 0x00003FFE //A23 = 7.6381507072332210580356159947e-01 -data8 0xD15A03E082D0A307, 0x00003FFE //A22 = 8.1777977210259904277239787430e-01 -data8 0x8FD3DA92675E8E00, 0x00003FFE //A21 = 5.6182638239203638864793584264e-01 -data8 0xFD375E6EE167AA58, 0x00003FFC //A20 = 2.4728152801285544751731937424e-01 -data8 0x89A9482FADE66AE1, 0x00003FFB //A19 = 6.7217410998398471333985773237e-02 -data8 0xC62E1F02606C04DD, 0x00003FF7 //A18 = 6.0479785358923404401184993359e-03 -data8 0xEE7BF2BE71CC531C, 0x0000BFF5 //A17 = -1.8194898432032114199803271708e-03 -data8 0x8084081981CDC79C, 0x0000BFF5 //A16 = -9.8049734947701208487713246099e-04 -data8 0x8975DFB834C118C3, 0x0000BFF0 //A15 = -3.2773123965143773578608926094e-05 -data8 0x965DA4A80008B7BC, 0x0000BFEE //A14 = -8.9624997201558650125662820562e-06 -LOCAL_OBJECT_END(_4_to_6p53_data) - -LOCAL_OBJECT_START(_3p25_to_4_data) -// Polynomial coefficients for the erf(x), 3.25 <= |x| < 4 -data8 0xB01D29846286CE08, 0x00003FEE //A3 = 1.0497207328743021499800978059e-05 -data8 0xBEC10B1488AEB234 //A2H = -2.0317175474986489113480084279e-06 -data8 0xBB7F19701B8B74F9 //A2L = -4.1159669348226960337518214996e-22 -data8 0x3E910B1488AEB234 //A1H = 2.5396469343733111391850105348e-07 -data8 0x3B4F1944906D5D60 //A1L = 5.1448487494628801547474934193e-23 -data8 0x3FEFFFFFF7B91176 //A0H = 9.9999998458274208523732795584e-01 -data8 0x3C70B2865615DB3F //A0L = 1.4482653192002495179309994964e-17 -data8 0xA818D085D56F3021, 0x00003FEC //A25 = 2.5048394770210505593609705765e-06 -data8 0xD9C5C509AAE5561F, 0x00003FEC //A24 = 3.2450636894654766492719395406e-06 -data8 0x9682D71C549EEB07, 0x0000BFED //A23 = -4.4855801709974050650263470866e-06 -data8 0xBC230E1EB6FBF8B9, 0x00003FEA //A22 = 7.0086469577174843181452303996e-07 -data8 0xE1432649FF29D4DE, 0x0000BFEA //A21 = -8.3916747195472308725504497231e-07 -data8 0xB40CEEBD2803D2F0, 0x0000BFEF //A20 = -2.1463694318102769992677291330e-05 -data8 0xEAAB57ABFFA003EB, 0x00003FEF //A19 = 2.7974761309213643228699449426e-05 -data8 0xFBFA4D0B893A5BFB, 0x0000BFEE //A18 = -1.5019043571612821858165073446e-05 -data8 0xBB6AA248EED3E364, 0x0000BFF0 //A17 = -4.4683584873907316507141131797e-05 -data8 0x86C1B3AE3E500ED9, 0x00003FF2 //A16 = 1.2851395412345761361068234880e-04 -data8 0xB60729445F0C37B5, 0x0000BFF2 //A15 = -1.7359540313300841352152461287e-04 -data8 0xCA389F9E707337B1, 0x00003FF1 //A14 = 9.6426575465763394281615740282e-05 -LOCAL_OBJECT_END(_3p25_to_4_data) - - -//////// "Tail" tables ////////// -LOCAL_OBJECT_START(_0p125_to_0p25_data_tail) -// Polynomial coefficients for the erf(x), 1/8 <= |x| < 1/4 -data8 0x93086CBD21ED3962, 0x00003FCA //A13 = 1.2753071968462837024755878679e-16 -data8 0x83CB5045A6D4B419, 0x00003FCF //A12 = 3.6580237062957773626379648530e-15 -data8 0x8FCDB723209690EB, 0x0000BFD3 //A11 = -6.3861616307180801527566117146e-14 -data8 0xCAA173F680B5D56B, 0x0000BFD7 //A10 = -1.4397775466324880354578008779e-12 -data8 0xF0CEA934AD6AC013, 0x00003FDB //A9 = 2.7376616955640415767655526857e-11 -data8 0x81C69F9D0B5AB8EE, 0x00003FE0 //A8 = 4.7212187567505249115688961488e-10 -data8 0xA8B590298C20A194, 0x0000BFE4 //A7 = -9.8201697105565925460801441797e-09 -data8 0x84F3DE72AC964615, 0x0000BFE8 //A6 = -1.2382176987480830706988411266e-07 -data8 0xC01A1398868CC4BD, 0x00003FEC //A5 = 2.8625408039722670291121341583e-06 -data8 0xCC43247F4410C54A, 0x00003FEF //A4 = 2.4349960762505993017186935493e-05 -LOCAL_OBJECT_END(_0p125_to_0p25_data_tail) - -LOCAL_OBJECT_START(_0p25_to_0p5_data_tail) -// Polynomial coefficients for the erf(x), 1/4 <= |x| < 1/2 -data8 0x8CEAC59AF361B78A, 0x0000BFD6 //A13 = -5.0063802958258679384986669123e-13 -data8 0x9BC67404F348C0CE, 0x00003FDB //A12 = 1.7709590771868743572061278273e-11 -data8 0xF4B5D0348AFAAC7A, 0x00003FDB //A11 = 2.7820329729584630464848160970e-11 -data8 0x83AB447FF619DA4A, 0x0000BFE2 //A10 = -1.9160363295631539615395477207e-09 -data8 0x82115AB487202E7B, 0x00003FE0 //A9 = 4.7318386460142606822119637959e-10 -data8 0xB84D5B0AE17054AA, 0x00003FE8 //A8 = 1.7164477188916895004843908951e-07 -data8 0xB2E085C1C4AA06E5, 0x0000BFE9 //A7 = -3.3318445266863554512523957574e-07 -data8 0xCD3CA2E6C3971666, 0x0000BFEE //A6 = -1.2233070175554502732980949519e-05 -data8 0xBA445C53F8DD40E6, 0x00003FF0 //A5 = 4.4409521535330413551781808621e-05 -data8 0xAA94D5E68033B764, 0x00003FF4 //A4 = 6.5071635765452563856926608000e-04 -LOCAL_OBJECT_END(_0p25_to_0p5_data_tail) - -LOCAL_OBJECT_START(_0p5_to_1_data_tail) -// Polynomial coefficients for the erf(x), 1/2 <= |x| < 1 -data8 0x9ED99EDF111CB785, 0x0000BFE4 //A13 = -9.2462916180079278241704711522e-09 -data8 0xDEAF7539AE2FB062, 0x0000BFE5 //A12 = -2.5923990465973151101298441139e-08 -data8 0xA392D5E5CC9DB1A7, 0x00003FE9 //A11 = 3.0467952847327075747032372101e-07 -data8 0xC311A7619B96CA1A, 0x00003FE8 //A10 = 1.8167212632079596881709988649e-07 -data8 0x82082E6B6A93F116, 0x0000BFEE //A9 = -7.7505086843257228386931766018e-06 -data8 0x96D9997CF326A36D, 0x00003FEE //A8 = 8.9913605625817479172071008270e-06 -data8 0x97057D85DCB0ED99, 0x00003FF2 //A7 = 1.4402527482741758767786898553e-04 -data8 0xDC23BCB3599C0490, 0x0000BFF3 //A6 = -4.1988296144950673955519083419e-04 -data8 0xDA150C4867208A81, 0x0000BFF5 //A5 = -1.6638352864915033417887831090e-03 -data8 0x9A4DAF550A2CC29A, 0x00003FF8 //A4 = 9.4179355839141698591817907680e-03 -LOCAL_OBJECT_END(_0p5_to_1_data_tail) - -LOCAL_OBJECT_START(_1_to_2_data_tail) -// Polynomial coefficients for the erf(x), 1 <= |x| < 2.0 -data8 0x969EAC5C7B46CAB9, 0x00003FEF //A13 = 1.7955281439310148162059582795e-05 -data8 0xA2ED832912E9FCD9, 0x00003FF1 //A12 = 7.7690020847111408916570845775e-05 -data8 0x85677C39C48E43E7, 0x0000BFF3 //A11 = -2.5444839340796031538582511806e-04 -data8 0xC2DAFA91683DAAE4, 0x0000BFF1 //A10 = -9.2914288456063075386925076097e-05 -data8 0xE01C061CBC6A2825, 0x00003FF5 //A9 = 1.7098195515864039518892834211e-03 -data8 0x9AD7271CAFD01C78, 0x0000BFF6 //A8 = -2.3626776207372761518718893636e-03 -data8 0x9B6B9D30EDD5F4FF, 0x0000BFF7 //A7 = -4.7430532011804570628999212874e-03 -data8 0x9E51EB9623F1D446, 0x00003FF9 //A6 = 1.9326171998839772791190405201e-02 -data8 0xF391B935C12546DE, 0x0000BFF8 //A5 = -1.4866286152953671441682166195e-02 -data8 0xB6AD4AE850DBF526, 0x0000BFFA //A4 = -4.4598858458861014323191919669e-02 -LOCAL_OBJECT_END(_1_to_2_data_tail) - -LOCAL_OBJECT_START(_2_to_3p25_data_tail) -// Polynomial coefficients for the erf(x), 2 <= |x| < 3.25 -data8 0x847C24DAC7C7558B, 0x00003FF5 //A13 = 1.0107798565424606512130100541e-03 -data8 0xCB6340EAF02C3DF8, 0x00003FF8 //A12 = 1.2413800617425931997420375435e-02 -data8 0xB5163D252DBBC107, 0x0000BFF9 //A11 = -2.2105330871844825370020459523e-02 -data8 0x82FF9C0B68E331E4, 0x00003FF9 //A10 = 1.5991024756001692140897408128e-02 -data8 0xE9519E4A49752E04, 0x00003FF7 //A9 = 7.1203253651891723548763348088e-03 -data8 0x8D52F11B7AE846D9, 0x0000BFFA //A8 = -3.4502927613795425888684181521e-02 -data8 0xCCC5A3E32BC6FA30, 0x00003FFA //A7 = 4.9993171868423886228679106871e-02 -data8 0xC1791AD8284A1919, 0x0000BFFA //A6 = -4.7234635220336795411997070641e-02 -data8 0x853DAAA35A8A3C18, 0x00003FFA //A5 = 3.2529512934760303976755163452e-02 -data8 0x88E42D8F47FAB60E, 0x0000BFF9 //A4 = -1.6710366233609742619461063050e-02 -LOCAL_OBJECT_END(_2_to_3p25_data_tail) - -LOCAL_OBJECT_START(_4_to_6p53_data_tail) -// Polynomial coefficients for the erf(x), 4 <= |x| < 6.53 -data8 0xD8235ABF08B8A6D1, 0x00003FEE //A13 = 1.2882834877224764938429832586e-05 -data8 0xAEDF44F9C77844C2, 0x0000BFEC //A12 = -2.6057980393716019511497492890e-06 -data8 0xCCD5490956A4FCFD, 0x00003FEA //A11 = 7.6306293047300300284923464089e-07 -data8 0xF71AF0126EE26AEA, 0x0000BFE8 //A10 = -2.3013467500738417953513680935e-07 -data8 0xE4CE68089858AC20, 0x00003FE6 //A9 = 5.3273112263151109935867439775e-08 -data8 0xBD15106FBBAEE593, 0x0000BFE4 //A8 = -1.1006037358336556244645388790e-08 -data8 0x8BBF9A5769B6E480, 0x00003FE2 //A7 = 2.0336075804332107927300019116e-09 -data8 0xB049D845D105E302, 0x0000BFDF //A6 = -3.2066683399502826067820249320e-10 -data8 0xBAC69B3F0DFE5483, 0x00003FDC //A5 = 4.2467901578369360007795282687e-11 -data8 0xA29C398F83F8A0D1, 0x0000BFD9 //A4 = -4.6216613698438694005327544047e-12 -LOCAL_OBJECT_END(_4_to_6p53_data_tail) - -LOCAL_OBJECT_START(_3p25_to_4_data_tail) -// Polynomial coefficients for the erf(x), 3.25 <= |x| < 4 -data8 0x95BE1BEAD738160F, 0x00003FF2 //A13 = 1.4280568455209843005829620687e-04 -data8 0x8108C8FFAC0F0B21, 0x0000BFF4 //A12 = -4.9222685622046459346377033307e-04 -data8 0xD72A7FAEE7832BBE, 0x00003FF4 //A11 = 8.2079319302109644436194651098e-04 -data8 0x823AB4281CA7BBE7, 0x0000BFF5 //A10 = -9.9357079675971109178261577703e-04 -data8 0xFA1232D476048D11, 0x00003FF4 //A9 = 9.5394549599882496825916138915e-04 -data8 0xC463D7AF88025FB2, 0x0000BFF4 //A8 = -7.4916843357898101689031755368e-04 -data8 0xFEBE32B6B379D072, 0x00003FF3 //A7 = 4.8588363901002111193445057206e-04 -data8 0x882829BB68409BF3, 0x0000BFF3 //A6 = -2.5969865184916169002074135516e-04 -data8 0xED2F886E29DAAB09, 0x00003FF1 //A5 = 1.1309894347742479284610149994e-04 -data8 0xA4C07129436555B2, 0x0000BFF0 //A4 = -3.9279872584973887163830479579e-05 -LOCAL_OBJECT_END(_3p25_to_4_data_tail) - - -LOCAL_OBJECT_START(_0_to_1o8_data) -// Polynomial coefficients for the erf(x), 0.0 <= |x| < 0.125 -data8 0x3FF20DD750429B6D, 0x3C71AE3A8DDFFEDE //A1H, A1L -data8 0xF8B0DACE42525CC2, 0x0000BFEE //A15 -data8 0xFCD02E1BF0EC2C37, 0x00003FF1 //A13 -data8 0xE016D968FE473B5E, 0x0000BFF4 //A11 -data8 0xAB2DE68711BF5A79, 0x00003FF7 //A9 -data8 0xDC16718944518309, 0x0000BFF9 //A7 -data8 0xE71790D0215F0C8F, 0x00003FFB //A5 -data8 0xC093A3581BCF3612, 0x0000BFFD //A3 -LOCAL_OBJECT_END(_0_to_1o8_data) - - -LOCAL_OBJECT_START(_denorm_data) -data8 0x3FF20DD750429B6D //A1H = 1.1283791670955125585606992900e+00 -data8 0x3C71AE3A914FED80 //A1L = 1.5335459613165880745599768129e-17 -LOCAL_OBJECT_END(_denorm_data) - - -.section .text -GLOBAL_LIBM_ENTRY(erfl) - -{ .mfi - alloc r32 = ar.pfs, 0, 21, 0, 0 - fmerge.se fArgAbsNorm = f1, f8 // normalized x (1.0 <= x < 2.0) - addl rSignBit = 0x20000, r0 // Set sign bit for exponent -} -{ .mlx - addl rDataPtr = @ltoff(erfl_data), gp // Get common data ptr - movl r1p5 = 0x3FF8000000000000 // 1.5 in dbl repres. -};; - -{ .mfi - getf.exp rArgExp = f8 // Get arg exponent - fclass.m p6,p0 = f8, 0xEF // Filter 0, denormals and specials - // 0xEF = @qnan|@snan|@pos|@neg|@zero|@unorm|@inf - addl rBias = 0xfffc, r0 // Value to subtract from exp - // to get actual interval number -} -{ .mfi - ld8 rDataPtr = [rDataPtr] // Get real common data pointer - fma.s1 fArgSqr = f8, f8, f0 // x^2 (for [0;1/8] path) - addl r2to4 = 0x10000, r0 // unbiased exponent - // for [2;4] binary interval -};; - -{ .mfi - getf.sig rArgSig = f8 // Get arg significand - fcmp.lt.s1 p15, p14 = f8, f0 // Is arg negative/positive? - addl rSaturation = 0xd0e, r0 // First 12 bits of - // saturation value signif. -} -{ .mfi - setf.d f1p5 = r1p5 // 1.5 construction - fma.s1 f2p0 = f1,f1,f1 // 2.0 construction - addl r3p25Sign = 0xd00, r0 // First 12 bits of - // 3.25 value signif. -};; - -{ .mfi - addl rTailDataPtr = 0x700, rDataPtr // Pointer to "tail" data - nop.f 0 - andcm rArgExp = rArgExp, rSignBit // Remove sign of exp -} -{ .mfb - addl rTiny = 0xf000, r0 // Tiny value for saturation path - nop.f 0 -(p6) br.cond.spnt erfl_spec // Branch to zero, denorm & specs -};; - -{ .mfi - sub rInterval = rArgExp, rBias // Get actual interval number - nop.f 0 - shr.u rArgSig = rArgSig, 52 // Leave only 12 bits of sign. -} -{ .mfi - adds rShiftedDataPtr = 0x10, rDataPtr // Second ptr to data - nop.f 0 - cmp.eq p8, p10 = r2to4, rArgExp // If exp is in 2to4 interval? -};; - -{ .mfi -(p8) cmp.le p8, p10 = r3p25Sign, rArgSig // If sign. is greater - // than 1.25? (means arg is in [3.25;4] interval) - nop.f 0 - shl rOffset = rInterval, 8 // Make offset from - // interval number -} -{ .mfi - cmp.gt p9, p0 = 0x0, rInterval // If interval is less than 0 - // (means arg is in [0; 1/8]) - nop.f 0 - cmp.eq p7, p0 = 0x5, rInterval // If arg is in [4:8] interv.? -};; - -{ .mfi -(p8) adds rOffset = 0x200, rOffset // Add additional offset - // if arg is in [3.25;4] (another data set) - fma.s1 fArgCube = fArgSqr, f8, f0 // x^3 (for [0;1/8] path) - shl rTailOffset = rInterval, 7 // Make offset to "tail" data - // from interval number -} -{ .mib - setf.exp fTiny = rTiny // Construct "tiny" value - // for saturation path - cmp.ltu p11, p0 = 0x5, rInterval // if arg > 8 -(p9) br.cond.spnt _0_to_1o8 -};; - -{ .mfi - add rAddr1 = rDataPtr, rOffset // Get address for - // interval data - nop.f 0 - shl rTailAddOffset = rInterval, 5 // Offset to interval - // "tail" data -} -{ .mib - add rAddr2 = rShiftedDataPtr, rOffset // Get second - // address for interval data -(p7) cmp.leu p11, p0 = rSaturation, rArgSig // if arg is - // in [6.53;8] interval -(p11) br.cond.spnt _saturation // Branch to Saturation path -};; - -{ .mmi - ldfe fA3 = [rAddr1], 0x90 // Load A3 - ldfpd fA2H, fA2L = [rAddr2], 16 // Load A2High, A2Low - add rTailOffset = rTailOffset, rTailAddOffset // "Tail" offset -};; - -{ .mmi - ldfe fA20 = [rAddr1], 16 // Load A20 - ldfpd fA1H, fA1L = [rAddr2], 16 // Load A1High, A1Low -(p8) adds rTailOffset = 0x140, rTailOffset // Additional offset - // for [3.24;4] interval -};; - -{ .mmi - ldfe fA19 = [rAddr1], 16 // Load A19 - ldfpd fA0H, fA0L = [rAddr2], 16 // Load A0High, A0Low - add rTailAddr1 = rTailDataPtr, rTailOffset // First tail - // data address -};; - -.pred.rel "mutex",p8,p10 -{ .mfi - ldfe fA18 = [rAddr1], 16 // Load A18 -(p8) fms.s1 fArgAbsNorm = fArgAbsNorm, f1, f2p0 // Add 2.0 - // to normalized arg (for [3.24;4] interval) - adds rTailAddr2 = 0x10, rTailAddr1 // First tail - // data address -} -{ .mfi - ldfe fA25 = [rAddr2], 16 // Load A25 -(p10) fms.s1 fArgAbsNorm = fArgAbsNorm, f1, f1p5 // Add 1.5 - // to normalized arg - nop.i 0 -};; - -{ .mmi - ldfe fA17 = [rAddr1], 16 // Load A17 - ldfe fA24 = [rAddr2], 16 // Load A24 - nop.i 0 -};; - -{ .mmi - ldfe fA16 = [rAddr1], 16 // Load A16 - ldfe fA23 = [rAddr2], 16 // Load A23 - nop.i 0 -};; - -{ .mmi - ldfe fA15 = [rAddr1], 16 // Load A15 - ldfe fA22 = [rAddr2], 16 // Load A22 - nop.i 0 -};; - -{ .mmi - ldfe fA14 = [rAddr1], 16 // Load A14 - ldfe fA21 = [rAddr2], 16 // Load A21 - nop.i 0 -};; - -{ .mfi - ldfe fA13 = [rTailAddr1], 32 // Load A13 - fms.s1 fArgAbsNorm2 = fArgAbsNorm, fArgAbsNorm, f0 // x^2 - nop.i 0 -} -{ .mfi - ldfe fA12 = [rTailAddr2], 32 // Load A12 - nop.f 0 - nop.i 0 -};; - -{ .mfi - ldfe fA11 = [rTailAddr1], 32 // Load A11 - fma.s1 fRes3H = fA3, fArgAbsNorm, fA2H // (A3*x+A2)*x^2 - nop.i 0 -} -{ .mfi - ldfe fA10 = [rTailAddr2], 32 // Load A10 - fma.s1 fTH = fA3, fArgAbsNorm, f0 // (A3*x+A2)*x^2 - nop.i 0 -};; - -{ .mfi - ldfe fA9 = [rTailAddr1], 32 // Load A9 - fma.s1 fTT2 = fA1L, fArgAbsNorm, f0 // A1*x+A0 - nop.i 0 -} -{ .mfi - ldfe fA8 = [rTailAddr2], 32 // Load A8 - nop.f 0 - nop.i 0 -};; - -{ .mmi - ldfe fA7 = [rTailAddr1], 32 // Load A7 - ldfe fA6 = [rTailAddr2], 32 // Load A6 - nop.i 0 -};; - -{ .mmi - ldfe fA5 = [rTailAddr1], 32 // Load A5 - ldfe fA4 = [rTailAddr2], 32 // Load A4 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 fArgAbsNorm2L = fArgAbsNorm, fArgAbsNorm, fArgAbsNorm2 - // Low part of x^2 (delta) - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fArgAbsNorm4 = fArgAbsNorm2, fArgAbsNorm2, f0 // x^4 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 fRes3L = fA2H, f1, fRes3H // // (A3*x+A2)*x^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 fArgAbsNorm3 = fArgAbsNorm2, fArgAbsNorm, f0 // x^3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fTH2 = fA1H, fArgAbsNorm, fTT2 // A1*x+A0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA23 = fA24, fArgAbsNorm, fA23 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA21 = fA22, fArgAbsNorm, fA21 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA12 = fA13, fArgAbsNorm, fA12 // Polynomial tail - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fRes3L = fRes3L, f1, fTH // (A3*x+A2)*x^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA19 = fA20, fArgAbsNorm, fA19 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes1H = fTH2, f1, fA0H // A1*x+A0 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fTL2 = fA1H, fArgAbsNorm, fTH2 // A1*x+A0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA8 = fA9, fArgAbsNorm, fA8 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA10 = fA11, fArgAbsNorm, fA10 // Polynomial tail - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 fA15 = fA16, fArgAbsNorm, fA15 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA17 = fA18, fArgAbsNorm, fA17 // Polynomial tail - nop.i 0 -};; -{ .mfi - nop.m 0 - fms.s1 fArgAbsNorm11 = fArgAbsNorm4, fArgAbsNorm4, f0 // x^8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA4 = fA5, fArgAbsNorm, fA4 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes3L = fRes3L, f1, fA2L // (A3*x+A2)*x^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA6 = fA7, fArgAbsNorm, fA6 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fTL2 = fTL2, f1, fTT2 // A1*x+A0 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fRes1L = fA0H, f1, fRes1H // A1*x+A0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA23 = fA25, fArgAbsNorm2, fA23 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA12 = fA14, fArgAbsNorm2, fA12 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA19 = fA21, fArgAbsNorm2, fA19 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA8 = fA10, fArgAbsNorm2, fA8 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA15 = fA17, fArgAbsNorm2, fA15 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fArgAbsNorm11 = fArgAbsNorm11, fArgAbsNorm3, f0 // x^11 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fTT = fRes3L, fArgAbsNorm2, f0 // (A3*x+A2)*x^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA4 = fA6, fArgAbsNorm2, fA4 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes1L = fRes1L, f1, fTH2 // A1*x+A0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA19 = fA23, fArgAbsNorm4, fA19 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA8 = fA12, fArgAbsNorm4, fA8 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fTT = fRes3H, fArgAbsNorm2L, fTT // (A3*x+A2)*x^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes1L = fRes1L, f1, fTL2 // A1*x+A0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA15 = fA19, fArgAbsNorm4, fA15 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA4 = fA8, fArgAbsNorm4, fA4 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes2H = fRes3H, fArgAbsNorm2, fTT // (A3*x+A2)*x^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes1L = fRes1L, f1, fA0L // A1*x+A0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes4 = fA15, fArgAbsNorm11, fA4 // Result of - // polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 fRes2L = fRes3H, fArgAbsNorm2, fRes2H // (A3*x+A2)*x^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fResH = fRes2H, f1, fRes1H // High result - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes1L = fRes4, fArgAbsNorm4, fRes1L // A1*x+A0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes2L = fRes2L, f1, fTT // (A3*x+A2)*x^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fResL = fRes1H, f1, fResH // Low result - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes1L = fRes1L, f1, fRes2L // Low result - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fResL = fResL, f1, fRes2H // Low result - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) fneg fResH = fResH // Invert high result if arg is neg. - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fResL = fResL, f1, fRes1L // Low result - nop.i 0 -};; - -.pred.rel "mutex",p14,p15 -{ .mfi - nop.m 0 -(p14) fma.s0 f8 = fResH, f1, fResL // Add high and low results - nop.i 0 -} -{ .mfb - nop.m 0 -(p15) fms.s0 f8 = fResH, f1, fResL // Add high and low results - br.ret.sptk b0 // Main path return -};; - -// satiration path //////////////////////////////////////////////////////////// -_saturation: - -.pred.rel "mutex",p14,p15 -{ .mfi - nop.m 0 -(p14) fms.s0 f8 = f1, f1, fTiny // Saturation result r = 1-tiny - nop.i 0 -};; -{ .mfb - nop.m 0 -(p15) fnma.s0 f8 = f1, f1, fTiny // Saturation result r = tiny-1 - br.ret.sptk b0 // Saturation path return -};; - - -// 0, denormals and special IEEE numbers path ///////////////////////////////// -erfl_spec: - -{ .mfi - addl rDataPtr = 0xBE0, rDataPtr // Ptr to denormals coeffs - fclass.m p6,p0 = f8, 0x23 // To filter infinities - // 0x23 = @pos|@neg|@inf - nop.i 0 -};; - -{ .mfi - ldfpd fA1H, fA1L = [rDataPtr] // Load denormals coeffs A1H, A1L - fclass.m p7,p0 = f8, 0xC7 // To filter NaNs & Zeros - // 0xC7 = @pos|@neg|@zero|@qnan|@snan - nop.i 0 -};; - -{ .mfb - nop.m 0 -(p6) fmerge.s f8 = f8, f1 // +/-1 for INF args -(p6) br.ret.spnt b0 // exit for x = INF -};; - -{ .mfb - nop.m 0 -(p7) fma.s0 f8 = f8, f1, f8 // +/-0 for 0 args - // and NaNs for NaNs -(p7) br.ret.spnt b0 // exit for x = NaN or +/-0 -};; - -{ .mfi - nop.m 0 - fnorm.s0 f8 = f8 // Normalize arg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 fRes1H = f8, fA1H, f0 // HighRes - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fRes1L = f8, fA1L, f0 // LowRes - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 fRes1Hd = f8, fA1H, fRes1H // HighRes delta - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes = fRes1L, f1, fRes1Hd // LowRes+HighRes delta - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes = f8, f8, fRes // r=x^2+r - nop.i 0 -};; - -{ .mfb - nop.m 0 - fma.s0 f8 = fRes, f1, fRes1H // res = r+ResHigh - br.ret.sptk b0 // 0, denormals, specials return -};; - - -// 0 < |x| < 1/8 path ///////////////////////////////////////////////////////// -_0_to_1o8: - -{ .mmi - adds rAddr1 = 0xB60, rDataPtr // Ptr 1 to coeffs - adds rAddr2 = 0xB80, rDataPtr // Ptr 2 to coeffs - nop.i 0 -};; - -{ .mmi - ldfpd fA1H, fA1L = [rAddr1], 16 // Load A1High, A1Low - ldfe fA13 = [rAddr2], 16 // Load A13 - nop.i 0 -};; - -{ .mmi - ldfe fA15 = [rAddr1], 48 // Load A15 - ldfe fA11 = [rAddr2], 32 // Load A11 - nop.i 0 -};; - -{ .mmi - ldfe fA9 = [rAddr1], 32 // Load A9 - ldfe fA7 = [rAddr2], 32 // Load A7 - nop.i 0 -};; - -{ .mmi - ldfe fA5 = [rAddr1] // Load A5 - ldfe fA3 = [rAddr2] // Load A3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 fRes1H = f8, fA1H, f0 // x*(A1H+A1L) - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fRes1L = f8, fA1L, f0 // x*(A1H+A1L) - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA11 = fA13, fArgSqr, fA11 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fArgFour = fArgSqr, fArgSqr, f0 // a^4 - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fma.s1 fA3 = fA5, fArgSqr, fA3 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA7 = fA9, fArgSqr, fA7 // Polynomial tail - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fms.s1 fRes1Hd = f8, fA1H, fRes1H // x*(A1H+A1L) delta - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA11 = fA15, fArgFour, fA11 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA3 = fA7, fArgFour, fA3 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fArgEight = fArgFour, fArgFour, f0 // a^8 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 f8 = fRes1L, f1, fRes1Hd // x*(A1H+A1L) - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes = fA11, fArgEight, fA3 //Polynomial tail result - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 f8 = fRes, fArgCube, f8 // (Polynomial tail)*x^3 - nop.i 0 -};; - -{ .mfb - nop.m 0 - fma.s0 f8 = f8, f1, fRes1H // (Polynomial tail)*x^3 + - // + x*(A1H+A1L) - br.ret.sptk b0 // [0;1/8] interval return -};; - - -GLOBAL_LIBM_END(erfl) diff --git a/sysdeps/ia64/fpu/s_expm1.S b/sysdeps/ia64/fpu/s_expm1.S deleted file mode 100644 index f0b911e295..0000000000 --- a/sysdeps/ia64/fpu/s_expm1.S +++ /dev/null @@ -1,886 +0,0 @@ -.file "exp_m1.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial Version -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 07/07/01 Improved speed of all paths -// 05/20/02 Cleaned up namespace and sf0 syntax -// 11/20/02 Improved speed, algorithm based on exp -// 03/31/05 Reformatted delimiters between data tables - -// API -//============================================================== -// double expm1(double) - -// Overview of operation -//============================================================== -// 1. Inputs of Nan, Inf, Zero, NatVal handled with special paths -// -// 2. |x| < 2^-60 -// Result = x, computed by x + x*x to handle appropriate flags and rounding -// -// 3. 2^-60 <= |x| < 2^-2 -// Result determined by 13th order Taylor series polynomial -// expm1f(x) = x + Q2*x^2 + ... + Q13*x^13 -// -// 4. x < -48.0 -// Here we know result is essentially -1 + eps, where eps only affects -// rounded result. Set I. -// -// 5. x >= 709.7827 -// Result overflows. Set I, O, and call error support -// -// 6. 2^-2 <= x < 709.7827 or -48.0 <= x < -2^-2 -// This is the main path. The algorithm is described below: - -// Take the input x. w is "how many log2/128 in x?" -// w = x * 128/log2 -// n = int(w) -// x = n log2/128 + r + delta - -// n = 128M + index_1 + 2^4 index_2 -// x = M log2 + (log2/128) index_1 + (log2/8) index_2 + r + delta - -// exp(x) = 2^M 2^(index_1/128) 2^(index_2/8) exp(r) exp(delta) -// Construct 2^M -// Get 2^(index_1/128) from table_1; -// Get 2^(index_2/8) from table_2; -// Calculate exp(r) by series by 5th order polynomial -// r = x - n (log2/128)_high -// delta = - n (log2/128)_low -// Calculate exp(delta) as 1 + delta - - -// Special values -//============================================================== -// expm1(+0) = +0.0 -// expm1(-0) = -0.0 - -// expm1(+qnan) = +qnan -// expm1(-qnan) = -qnan -// expm1(+snan) = +qnan -// expm1(-snan) = -qnan - -// expm1(-inf) = -1.0 -// expm1(+inf) = +inf - -// Overflow and Underflow -//======================= -// expm1(x) = largest double normal when -// x = 709.7827 = 40862e42fefa39ef -// -// Underflow is handled as described in case 2 above. - - -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f9 -> f15, f32 -> f75 - -// General registers used: -// r14 -> r40 - -// Predicate registers used: -// p6 -> p15 - -// Assembly macros -//============================================================== - -rRshf = r14 -rAD_TB1 = r15 -rAD_T1 = r15 -rAD_TB2 = r16 -rAD_T2 = r16 -rAD_Ln2_lo = r17 -rAD_P = r17 - -rN = r18 -rIndex_1 = r19 -rIndex_2_16 = r20 - -rM = r21 -rBiased_M = r21 -rIndex_1_16 = r22 -rSignexp_x = r23 -rExp_x = r24 -rSig_inv_ln2 = r25 - -rAD_Q1 = r26 -rAD_Q2 = r27 -rTmp = r27 -rExp_bias = r28 -rExp_mask = r29 -rRshf_2to56 = r30 - -rGt_ln = r31 -rExp_2tom56 = r31 - - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - -fRSHF_2TO56 = f6 -fINV_LN2_2TO63 = f7 -fW_2TO56_RSH = f9 -f2TOM56 = f11 -fP5 = f12 -fP54 = f50 -fP5432 = f50 -fP4 = f13 -fP3 = f14 -fP32 = f14 -fP2 = f15 - -fLn2_by_128_hi = f33 -fLn2_by_128_lo = f34 - -fRSHF = f35 -fNfloat = f36 -fW = f37 -fR = f38 -fF = f39 - -fRsq = f40 -fRcube = f41 - -f2M = f42 -fS1 = f43 -fT1 = f44 - -fMIN_DBL_OFLOW_ARG = f45 -fMAX_DBL_MINUS_1_ARG = f46 -fMAX_DBL_NORM_ARG = f47 -fP_lo = f51 -fP_hi = f52 -fP = f53 -fS = f54 - -fNormX = f56 - -fWre_urm_f8 = f57 - -fGt_pln = f58 -fTmp = f58 - -fS2 = f59 -fT2 = f60 -fSm1 = f61 - -fXsq = f62 -fX6 = f63 -fX4 = f63 -fQ7 = f64 -fQ76 = f64 -fQ7654 = f64 -fQ765432 = f64 -fQ6 = f65 -fQ5 = f66 -fQ54 = f66 -fQ4 = f67 -fQ3 = f68 -fQ32 = f68 -fQ2 = f69 -fQD = f70 -fQDC = f70 -fQDCBA = f70 -fQDCBA98 = f70 -fQDCBA98765432 = f70 -fQC = f71 -fQB = f72 -fQBA = f72 -fQA = f73 -fQ9 = f74 -fQ98 = f74 -fQ8 = f75 - -// Data tables -//============================================================== - -RODATA -.align 16 - -// ************* DO NOT CHANGE ORDER OF THESE TABLES ******************** - -// double-extended 1/ln(2) -// 3fff b8aa 3b29 5c17 f0bb be87fed0691d3e88 -// 3fff b8aa 3b29 5c17 f0bc -// For speed the significand will be loaded directly with a movl and setf.sig -// and the exponent will be bias+63 instead of bias+0. Thus subsequent -// computations need to scale appropriately. -// The constant 128/ln(2) is needed for the computation of w. This is also -// obtained by scaling the computations. -// -// Two shifting constants are loaded directly with movl and setf.d. -// 1. fRSHF_2TO56 = 1.1000..00 * 2^(63-7) -// This constant is added to x*1/ln2 to shift the integer part of -// x*128/ln2 into the rightmost bits of the significand. -// The result of this fma is fW_2TO56_RSH. -// 2. fRSHF = 1.1000..00 * 2^(63) -// This constant is subtracted from fW_2TO56_RSH * 2^(-56) to give -// the integer part of w, n, as a floating-point number. -// The result of this fms is fNfloat. - - -LOCAL_OBJECT_START(exp_Table_1) -data8 0x40862e42fefa39f0 // smallest dbl overflow arg -data8 0xc048000000000000 // approx largest arg for minus one result -data8 0x40862e42fefa39ef // largest dbl arg to give normal dbl result -data8 0x0 // pad -data8 0xb17217f7d1cf79ab , 0x00003ff7 // ln2/128 hi -data8 0xc9e3b39803f2f6af , 0x00003fb7 // ln2/128 lo -// -// Table 1 is 2^(index_1/128) where -// index_1 goes from 0 to 15 -// -data8 0x8000000000000000 , 0x00003FFF -data8 0x80B1ED4FD999AB6C , 0x00003FFF -data8 0x8164D1F3BC030773 , 0x00003FFF -data8 0x8218AF4373FC25EC , 0x00003FFF -data8 0x82CD8698AC2BA1D7 , 0x00003FFF -data8 0x8383594EEFB6EE37 , 0x00003FFF -data8 0x843A28C3ACDE4046 , 0x00003FFF -data8 0x84F1F656379C1A29 , 0x00003FFF -data8 0x85AAC367CC487B15 , 0x00003FFF -data8 0x8664915B923FBA04 , 0x00003FFF -data8 0x871F61969E8D1010 , 0x00003FFF -data8 0x87DB357FF698D792 , 0x00003FFF -data8 0x88980E8092DA8527 , 0x00003FFF -data8 0x8955EE03618E5FDD , 0x00003FFF -data8 0x8A14D575496EFD9A , 0x00003FFF -data8 0x8AD4C6452C728924 , 0x00003FFF -LOCAL_OBJECT_END(exp_Table_1) - -// Table 2 is 2^(index_1/8) where -// index_2 goes from 0 to 7 -LOCAL_OBJECT_START(exp_Table_2) -data8 0x8000000000000000 , 0x00003FFF -data8 0x8B95C1E3EA8BD6E7 , 0x00003FFF -data8 0x9837F0518DB8A96F , 0x00003FFF -data8 0xA5FED6A9B15138EA , 0x00003FFF -data8 0xB504F333F9DE6484 , 0x00003FFF -data8 0xC5672A115506DADD , 0x00003FFF -data8 0xD744FCCAD69D6AF4 , 0x00003FFF -data8 0xEAC0C6E7DD24392F , 0x00003FFF -LOCAL_OBJECT_END(exp_Table_2) - - -LOCAL_OBJECT_START(exp_p_table) -data8 0x3f8111116da21757 //P5 -data8 0x3fa55555d787761c //P4 -data8 0x3fc5555555555414 //P3 -data8 0x3fdffffffffffd6a //P2 -LOCAL_OBJECT_END(exp_p_table) - -LOCAL_OBJECT_START(exp_Q1_table) -data8 0x3de6124613a86d09 // QD = 1/13! -data8 0x3e21eed8eff8d898 // QC = 1/12! -data8 0x3ec71de3a556c734 // Q9 = 1/9! -data8 0x3efa01a01a01a01a // Q8 = 1/8! -data8 0x8888888888888889,0x3ff8 // Q5 = 1/5! -data8 0xaaaaaaaaaaaaaaab,0x3ffc // Q3 = 1/3! -data8 0x0,0x0 // Pad to avoid bank conflicts -LOCAL_OBJECT_END(exp_Q1_table) - -LOCAL_OBJECT_START(exp_Q2_table) -data8 0x3e5ae64567f544e4 // QB = 1/11! -data8 0x3e927e4fb7789f5c // QA = 1/10! -data8 0x3f2a01a01a01a01a // Q7 = 1/7! -data8 0x3f56c16c16c16c17 // Q6 = 1/6! -data8 0xaaaaaaaaaaaaaaab,0x3ffa // Q4 = 1/4! -data8 0x8000000000000000,0x3ffe // Q2 = 1/2! -LOCAL_OBJECT_END(exp_Q2_table) - - -.section .text -GLOBAL_IEEE754_ENTRY(expm1) - -{ .mlx - getf.exp rSignexp_x = f8 // Must recompute if x unorm - movl rSig_inv_ln2 = 0xb8aa3b295c17f0bc // signif of 1/ln2 -} -{ .mlx - addl rAD_TB1 = @ltoff(exp_Table_1), gp - movl rRshf_2to56 = 0x4768000000000000 // 1.10000 2^(63+56) -} -;; - -// We do this fnorm right at the beginning to normalize -// any input unnormals so that SWA is not taken. -{ .mfi - ld8 rAD_TB1 = [rAD_TB1] - fclass.m p6,p0 = f8,0x0b // Test for x=unorm - mov rExp_mask = 0x1ffff -} -{ .mfi - mov rExp_bias = 0xffff - fnorm.s1 fNormX = f8 - mov rExp_2tom56 = 0xffff-56 -} -;; - -// Form two constants we need -// 1/ln2 * 2^63 to compute w = x * 1/ln2 * 128 -// 1.1000..000 * 2^(63+63-7) to right shift int(w) into the significand - -{ .mfi - setf.sig fINV_LN2_2TO63 = rSig_inv_ln2 // form 1/ln2 * 2^63 - fclass.m p8,p0 = f8,0x07 // Test for x=0 - nop.i 0 -} -{ .mlx - setf.d fRSHF_2TO56 = rRshf_2to56 // Form 1.100 * 2^(63+56) - movl rRshf = 0x43e8000000000000 // 1.10000 2^63 for rshift -} -;; - -{ .mfi - setf.exp f2TOM56 = rExp_2tom56 // form 2^-56 for scaling Nfloat - fclass.m p9,p0 = f8,0x22 // Test for x=-inf - add rAD_TB2 = 0x140, rAD_TB1 // Point to Table 2 -} -{ .mib - add rAD_Q1 = 0x1e0, rAD_TB1 // Point to Q table for small path - add rAD_Ln2_lo = 0x30, rAD_TB1 // Point to ln2_by_128_lo -(p6) br.cond.spnt EXPM1_UNORM // Branch if x unorm -} -;; - -EXPM1_COMMON: -{ .mfi - ldfpd fMIN_DBL_OFLOW_ARG, fMAX_DBL_MINUS_1_ARG = [rAD_TB1],16 - fclass.m p10,p0 = f8,0x1e1 // Test for x=+inf, NaN, NaT - add rAD_Q2 = 0x50, rAD_Q1 // Point to Q table for small path -} -{ .mfb - nop.m 0 - nop.f 0 -(p8) br.ret.spnt b0 // Exit for x=0, return x -} -;; - -{ .mfi - ldfd fMAX_DBL_NORM_ARG = [rAD_TB1],16 - nop.f 0 - and rExp_x = rExp_mask, rSignexp_x // Biased exponent of x -} -{ .mfb - setf.d fRSHF = rRshf // Form right shift const 1.100 * 2^63 -(p9) fms.d.s0 f8 = f0,f0,f1 // quick exit for x=-inf -(p9) br.ret.spnt b0 -} -;; - -{ .mfi - ldfpd fQD, fQC = [rAD_Q1], 16 // Load coeff for small path - nop.f 0 - sub rExp_x = rExp_x, rExp_bias // True exponent of x -} -{ .mfb - ldfpd fQB, fQA = [rAD_Q2], 16 // Load coeff for small path -(p10) fma.d.s0 f8 = f8, f1, f0 // For x=+inf, NaN, NaT -(p10) br.ret.spnt b0 // Exit for x=+inf, NaN, NaT -} -;; - -{ .mfi - ldfpd fQ9, fQ8 = [rAD_Q1], 16 // Load coeff for small path - fma.s1 fXsq = fNormX, fNormX, f0 // x*x for small path - cmp.gt p7, p8 = -2, rExp_x // Test |x| < 2^(-2) -} -{ .mfi - ldfpd fQ7, fQ6 = [rAD_Q2], 16 // Load coeff for small path - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - ldfe fQ5 = [rAD_Q1], 16 // Load coeff for small path - nop.f 0 - nop.i 0 -} -{ .mib - ldfe fQ4 = [rAD_Q2], 16 // Load coeff for small path -(p7) cmp.gt.unc p6, p7 = -60, rExp_x // Test |x| < 2^(-60) -(p7) br.cond.spnt EXPM1_SMALL // Branch if 2^-60 <= |x| < 2^-2 -} -;; - -// W = X * Inv_log2_by_128 -// By adding 1.10...0*2^63 we shift and get round_int(W) in significand. -// We actually add 1.10...0*2^56 to X * Inv_log2 to do the same thing. - -{ .mfi - ldfe fLn2_by_128_hi = [rAD_TB1],32 - fma.s1 fW_2TO56_RSH = fNormX, fINV_LN2_2TO63, fRSHF_2TO56 - nop.i 0 -} -{ .mfb - ldfe fLn2_by_128_lo = [rAD_Ln2_lo] -(p6) fma.d.s0 f8 = f8, f8, f8 // If x < 2^-60, result=x+x*x -(p6) br.ret.spnt b0 // Exit if x < 2^-60 -} -;; - -// Divide arguments into the following categories: -// Certain minus one p11 - -inf < x <= MAX_DBL_MINUS_1_ARG -// Possible Overflow p14 - MAX_DBL_NORM_ARG < x < MIN_DBL_OFLOW_ARG -// Certain Overflow p15 - MIN_DBL_OFLOW_ARG <= x < +inf -// -// If the input is really a double arg, then there will never be "Possible -// Overflow" arguments. -// - -// After that last load, rAD_TB1 points to the beginning of table 1 - -{ .mfi - nop.m 0 - fcmp.ge.s1 p15,p14 = fNormX,fMIN_DBL_OFLOW_ARG - nop.i 0 -} -;; - -{ .mfi - add rAD_P = 0x80, rAD_TB2 - fcmp.le.s1 p11,p0 = fNormX,fMAX_DBL_MINUS_1_ARG - nop.i 0 -} -;; - -{ .mfb - ldfpd fP5, fP4 = [rAD_P] ,16 -(p14) fcmp.gt.unc.s1 p14,p0 = fNormX,fMAX_DBL_NORM_ARG -(p15) br.cond.spnt EXPM1_CERTAIN_OVERFLOW -} -;; - -// Nfloat = round_int(W) -// The signficand of fW_2TO56_RSH contains the rounded integer part of W, -// as a twos complement number in the lower bits (that is, it may be negative). -// That twos complement number (called N) is put into rN. - -// Since fW_2TO56_RSH is scaled by 2^56, it must be multiplied by 2^-56 -// before the shift constant 1.10000 * 2^63 is subtracted to yield fNfloat. -// Thus, fNfloat contains the floating point version of N - -{ .mfb - ldfpd fP3, fP2 = [rAD_P] - fms.s1 fNfloat = fW_2TO56_RSH, f2TOM56, fRSHF -(p11) br.cond.spnt EXPM1_CERTAIN_MINUS_ONE -} -;; - -{ .mfi - getf.sig rN = fW_2TO56_RSH - nop.f 0 - nop.i 0 -} -;; - -// rIndex_1 has index_1 -// rIndex_2_16 has index_2 * 16 -// rBiased_M has M -// rIndex_1_16 has index_1 * 16 - -// r = x - Nfloat * ln2_by_128_hi -// f = 1 - Nfloat * ln2_by_128_lo -{ .mfi - and rIndex_1 = 0x0f, rN - fnma.s1 fR = fNfloat, fLn2_by_128_hi, fNormX - shr rM = rN, 0x7 -} -{ .mfi - and rIndex_2_16 = 0x70, rN - fnma.s1 fF = fNfloat, fLn2_by_128_lo, f1 - nop.i 0 -} -;; - -// rAD_T1 has address of T1 -// rAD_T2 has address if T2 - -{ .mmi - add rBiased_M = rExp_bias, rM - add rAD_T2 = rAD_TB2, rIndex_2_16 - shladd rAD_T1 = rIndex_1, 4, rAD_TB1 -} -;; - -// Create Scale = 2^M -// Load T1 and T2 -{ .mmi - setf.exp f2M = rBiased_M - ldfe fT2 = [rAD_T2] - nop.i 0 -} -;; - -{ .mfi - ldfe fT1 = [rAD_T1] - fmpy.s0 fTmp = fLn2_by_128_lo, fLn2_by_128_lo // Force inexact - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP54 = fR, fP5, fP4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fP32 = fR, fP3, fP2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fRsq = fR, fR, f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP5432 = fRsq, fP54, fP32 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fS2 = fF,fT2,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fS1 = f2M,fT1,f0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP = fRsq, fP5432, fR - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fms.s1 fSm1 = fS1,fS2,f1 // S - 1.0 - nop.i 0 -} -{ .mfb - nop.m 0 - fma.s1 fS = fS1,fS2,f0 -(p14) br.cond.spnt EXPM1_POSSIBLE_OVERFLOW -} -;; - -{ .mfb - nop.m 0 - fma.d.s0 f8 = fS, fP, fSm1 - br.ret.sptk b0 // Normal path exit -} -;; - -// Here if 2^-60 <= |x| <2^-2 -// Compute 13th order polynomial -EXPM1_SMALL: -{ .mmf - ldfe fQ3 = [rAD_Q1], 16 - ldfe fQ2 = [rAD_Q2], 16 - fma.s1 fX4 = fXsq, fXsq, f0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fQDC = fQD, fNormX, fQC - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fQBA = fQB, fNormX, fQA - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fQ98 = fQ9, fNormX, fQ8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fQ76= fQ7, fNormX, fQ6 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fQ54 = fQ5, fNormX, fQ4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fX6 = fX4, fXsq, f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fQ32= fQ3, fNormX, fQ2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fQDCBA = fQDC, fXsq, fQBA - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fQ7654 = fQ76, fXsq, fQ54 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fQDCBA98 = fQDCBA, fXsq, fQ98 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fQ765432 = fQ7654, fXsq, fQ32 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fQDCBA98765432 = fQDCBA98, fX6, fQ765432 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fma.d.s0 f8 = fQDCBA98765432, fXsq, fNormX - br.ret.sptk b0 // Exit small branch -} -;; - - -EXPM1_POSSIBLE_OVERFLOW: - -// Here if fMAX_DBL_NORM_ARG < x < fMIN_DBL_OFLOW_ARG -// This cannot happen if input is a double, only if input higher precision. -// Overflow is a possibility, not a certainty. - -// Recompute result using status field 2 with user's rounding mode, -// and wre set. If result is larger than largest double, then we have -// overflow - -{ .mfi - mov rGt_ln = 0x103ff // Exponent for largest dbl + 1 ulp - fsetc.s2 0x7F,0x42 // Get user's round mode, set wre - nop.i 0 -} -;; - -{ .mfi - setf.exp fGt_pln = rGt_ln // Create largest double + 1 ulp - fma.d.s2 fWre_urm_f8 = fS, fP, fSm1 // Result with wre set - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 // Turn off wre in sf2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.ge.s1 p6, p0 = fWre_urm_f8, fGt_pln // Test for overflow - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - nop.f 0 -(p6) br.cond.spnt EXPM1_CERTAIN_OVERFLOW // Branch if overflow -} -;; - -{ .mfb - nop.m 0 - fma.d.s0 f8 = fS, fP, fSm1 - br.ret.sptk b0 // Exit if really no overflow -} -;; - -EXPM1_CERTAIN_OVERFLOW: -{ .mmi - sub rTmp = rExp_mask, r0, 1 -;; - setf.exp fTmp = rTmp - nop.i 0 -} -;; - -{ .mfi - alloc r32=ar.pfs,1,4,4,0 - fmerge.s FR_X = f8,f8 - nop.i 0 -} -{ .mfb - mov GR_Parameter_TAG = 41 - fma.d.s0 FR_RESULT = fTmp, fTmp, f0 // Set I,O and +INF result - br.cond.sptk __libm_error_region -} -;; - -// Here if x unorm -EXPM1_UNORM: -{ .mfb - getf.exp rSignexp_x = fNormX // Must recompute if x unorm - fcmp.eq.s0 p6, p0 = f8, f0 // Set D flag - br.cond.sptk EXPM1_COMMON -} -;; - -// here if result will be -1 and inexact, x <= -48.0 -EXPM1_CERTAIN_MINUS_ONE: -{ .mmi - mov rTmp = 1 -;; - setf.exp fTmp = rTmp - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fms.d.s0 FR_RESULT = fTmp, fTmp, f1 // Set I, rounded -1+eps result - br.ret.sptk b0 -} -;; - -GLOBAL_IEEE754_END(expm1) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_expm1f.S b/sysdeps/ia64/fpu/s_expm1f.S deleted file mode 100644 index 55264a9875..0000000000 --- a/sysdeps/ia64/fpu/s_expm1f.S +++ /dev/null @@ -1,671 +0,0 @@ -.file "expf_m1.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. - -// History -//********************************************************************* -// 02/02/00 Initial Version -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 07/07/01 Improved speed of all paths -// 05/20/02 Cleaned up namespace and sf0 syntax -// 11/20/02 Improved speed, algorithm based on expf -// 03/31/05 Reformatted delimiters between data tables -// -// -// API -//********************************************************************* -// float expm1f(float) -// -// Overview of operation -//********************************************************************* -// 1. Inputs of Nan, Inf, Zero, NatVal handled with special paths -// -// 2. |x| < 2^-40 -// Result = x, computed by x + x*x to handle appropriate flags and rounding -// -// 3. 2^-40 <= |x| < 2^-2 -// Result determined by 8th order Taylor series polynomial -// expm1f(x) = x + A2*x^2 + ... + A8*x^8 -// -// 4. x < -24.0 -// Here we know result is essentially -1 + eps, where eps only affects -// rounded result. Set I. -// -// 5. x >= 88.7228 -// Result overflows. Set I, O, and call error support -// -// 6. 2^-2 <= x < 88.7228 or -24.0 <= x < -2^-2 -// This is the main path. The algorithm is described below: - -// Take the input x. w is "how many log2/128 in x?" -// w = x * 64/log2 -// NJ = int(w) -// x = NJ*log2/64 + R - -// NJ = 64*n + j -// x = n*log2 + (log2/64)*j + R -// -// So, exp(x) = 2^n * 2^(j/64)* exp(R) -// -// T = 2^n * 2^(j/64) -// Construct 2^n -// Get 2^(j/64) table -// actually all the entries of 2^(j/64) table are stored in DP and -// with exponent bits set to 0 -> multiplication on 2^n can be -// performed by doing logical "or" operation with bits presenting 2^n - -// exp(R) = 1 + (exp(R) - 1) -// P = exp(R) - 1 approximated by Taylor series of 3rd degree -// P = A3*R^3 + A2*R^2 + R, A3 = 1/6, A2 = 1/2 -// - -// The final result is reconstructed as follows -// expm1f(x) = T*P + (T - 1.0) - -// Special values -//********************************************************************* -// expm1f(+0) = +0.0 -// expm1f(-0) = -0.0 - -// expm1f(+qnan) = +qnan -// expm1f(-qnan) = -qnan -// expm1f(+snan) = +qnan -// expm1f(-snan) = -qnan - -// expm1f(-inf) = -1.0 -// expm1f(+inf) = +inf - -// Overflow and Underflow -//********************************************************************* -// expm1f(x) = largest single normal when -// x = 88.7228 = 0x42b17217 -// -// Underflow is handled as described in case 2 above. - - -// Registers used -//********************************************************************* -// Floating Point registers used: -// f8, input -// f6,f7, f9 -> f15, f32 -> f45 - -// General registers used: -// r3, r20 -> r38 - -// Predicate registers used: -// p9 -> p15 - -// Assembly macros -//********************************************************************* -// integer registers used -// scratch -rNJ = r3 - -rExp_half = r20 -rSignexp_x = r21 -rExp_x = r22 -rExp_mask = r23 -rExp_bias = r24 -rTmp = r25 -rM1_lim = r25 -rGt_ln = r25 -rJ = r26 -rN = r27 -rTblAddr = r28 -rLn2Div64 = r29 -rRightShifter = r30 -r64DivLn2 = r31 -// stacked -GR_SAVE_PFS = r32 -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Parameter_TAG = r38 - -// floating point registers used -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 -// scratch -fRightShifter = f6 -f64DivLn2 = f7 -fNormX = f9 -fNint = f10 -fN = f11 -fR = f12 -fLn2Div64 = f13 -fA2 = f14 -fA3 = f15 -// stacked -fP = f32 -fX3 = f33 -fT = f34 -fMIN_SGL_OFLOW_ARG = f35 -fMAX_SGL_NORM_ARG = f36 -fMAX_SGL_MINUS_1_ARG = f37 -fA4 = f38 -fA43 = f38 -fA432 = f38 -fRSqr = f39 -fA5 = f40 -fTmp = f41 -fGt_pln = f41 -fXsq = f41 -fA7 = f42 -fA6 = f43 -fA65 = f43 -fTm1 = f44 -fA8 = f45 -fA87 = f45 -fA8765 = f45 -fA8765432 = f45 -fWre_urm_f8 = f45 - -RODATA -.align 16 -LOCAL_OBJECT_START(_expf_table) -data8 0x3efa01a01a01a01a // A8 = 1/8! -data8 0x3f2a01a01a01a01a // A7 = 1/7! -data8 0x3f56c16c16c16c17 // A6 = 1/6! -data8 0x3f81111111111111 // A5 = 1/5! -data8 0x3fa5555555555555 // A4 = 1/4! -data8 0x3fc5555555555555 // A3 = 1/3! -// -data4 0x42b17218 // Smallest sgl arg to overflow sgl result -data4 0x42b17217 // Largest sgl arg to give sgl result -// -// 2^(j/64) table, j goes from 0 to 63 -data8 0x0000000000000000 // 2^(0/64) -data8 0x00002C9A3E778061 // 2^(1/64) -data8 0x000059B0D3158574 // 2^(2/64) -data8 0x0000874518759BC8 // 2^(3/64) -data8 0x0000B5586CF9890F // 2^(4/64) -data8 0x0000E3EC32D3D1A2 // 2^(5/64) -data8 0x00011301D0125B51 // 2^(6/64) -data8 0x0001429AAEA92DE0 // 2^(7/64) -data8 0x000172B83C7D517B // 2^(8/64) -data8 0x0001A35BEB6FCB75 // 2^(9/64) -data8 0x0001D4873168B9AA // 2^(10/64) -data8 0x0002063B88628CD6 // 2^(11/64) -data8 0x0002387A6E756238 // 2^(12/64) -data8 0x00026B4565E27CDD // 2^(13/64) -data8 0x00029E9DF51FDEE1 // 2^(14/64) -data8 0x0002D285A6E4030B // 2^(15/64) -data8 0x000306FE0A31B715 // 2^(16/64) -data8 0x00033C08B26416FF // 2^(17/64) -data8 0x000371A7373AA9CB // 2^(18/64) -data8 0x0003A7DB34E59FF7 // 2^(19/64) -data8 0x0003DEA64C123422 // 2^(20/64) -data8 0x0004160A21F72E2A // 2^(21/64) -data8 0x00044E086061892D // 2^(22/64) -data8 0x000486A2B5C13CD0 // 2^(23/64) -data8 0x0004BFDAD5362A27 // 2^(24/64) -data8 0x0004F9B2769D2CA7 // 2^(25/64) -data8 0x0005342B569D4F82 // 2^(26/64) -data8 0x00056F4736B527DA // 2^(27/64) -data8 0x0005AB07DD485429 // 2^(28/64) -data8 0x0005E76F15AD2148 // 2^(29/64) -data8 0x0006247EB03A5585 // 2^(30/64) -data8 0x0006623882552225 // 2^(31/64) -data8 0x0006A09E667F3BCD // 2^(32/64) -data8 0x0006DFB23C651A2F // 2^(33/64) -data8 0x00071F75E8EC5F74 // 2^(34/64) -data8 0x00075FEB564267C9 // 2^(35/64) -data8 0x0007A11473EB0187 // 2^(36/64) -data8 0x0007E2F336CF4E62 // 2^(37/64) -data8 0x00082589994CCE13 // 2^(38/64) -data8 0x000868D99B4492ED // 2^(39/64) -data8 0x0008ACE5422AA0DB // 2^(40/64) -data8 0x0008F1AE99157736 // 2^(41/64) -data8 0x00093737B0CDC5E5 // 2^(42/64) -data8 0x00097D829FDE4E50 // 2^(43/64) -data8 0x0009C49182A3F090 // 2^(44/64) -data8 0x000A0C667B5DE565 // 2^(45/64) -data8 0x000A5503B23E255D // 2^(46/64) -data8 0x000A9E6B5579FDBF // 2^(47/64) -data8 0x000AE89F995AD3AD // 2^(48/64) -data8 0x000B33A2B84F15FB // 2^(49/64) -data8 0x000B7F76F2FB5E47 // 2^(50/64) -data8 0x000BCC1E904BC1D2 // 2^(51/64) -data8 0x000C199BDD85529C // 2^(52/64) -data8 0x000C67F12E57D14B // 2^(53/64) -data8 0x000CB720DCEF9069 // 2^(54/64) -data8 0x000D072D4A07897C // 2^(55/64) -data8 0x000D5818DCFBA487 // 2^(56/64) -data8 0x000DA9E603DB3285 // 2^(57/64) -data8 0x000DFC97337B9B5F // 2^(58/64) -data8 0x000E502EE78B3FF6 // 2^(59/64) -data8 0x000EA4AFA2A490DA // 2^(60/64) -data8 0x000EFA1BEE615A27 // 2^(61/64) -data8 0x000F50765B6E4540 // 2^(62/64) -data8 0x000FA7C1819E90D8 // 2^(63/64) -LOCAL_OBJECT_END(_expf_table) - - -.section .text -GLOBAL_IEEE754_ENTRY(expm1f) - -{ .mlx - getf.exp rSignexp_x = f8 // Must recompute if x unorm - movl r64DivLn2 = 0x40571547652B82FE // 64/ln(2) -} -{ .mlx - addl rTblAddr = @ltoff(_expf_table),gp - movl rRightShifter = 0x43E8000000000000 // DP Right Shifter -} -;; - -{ .mfi - // point to the beginning of the table - ld8 rTblAddr = [rTblAddr] - fclass.m p14, p0 = f8 , 0x22 // test for -INF - mov rExp_mask = 0x1ffff // Exponent mask -} -{ .mfi - nop.m 0 - fnorm.s1 fNormX = f8 // normalized x - nop.i 0 -} -;; - -{ .mfi - setf.d f64DivLn2 = r64DivLn2 // load 64/ln(2) to FP reg - fclass.m p9, p0 = f8 , 0x0b // test for x unorm - mov rExp_bias = 0xffff // Exponent bias -} -{ .mlx - // load Right Shifter to FP reg - setf.d fRightShifter = rRightShifter - movl rLn2Div64 = 0x3F862E42FEFA39EF // DP ln(2)/64 in GR -} -;; - -{ .mfi - ldfpd fA8, fA7 = [rTblAddr], 16 - fcmp.eq.s1 p13, p0 = f0, f8 // test for x = 0.0 - mov rExp_half = 0xfffe -} -{ .mfb - setf.d fLn2Div64 = rLn2Div64 // load ln(2)/64 to FP reg - nop.f 0 -(p9) br.cond.spnt EXPM1_UNORM // Branch if x unorm -} -;; - -EXPM1_COMMON: -{ .mfb - ldfpd fA6, fA5 = [rTblAddr], 16 -(p14) fms.s.s0 f8 = f0, f0, f1 // result if x = -inf -(p14) br.ret.spnt b0 // exit here if x = -inf -} -;; - -{ .mfb - ldfpd fA4, fA3 = [rTblAddr], 16 - fclass.m p15, p0 = f8 , 0x1e1 // test for NaT,NaN,+Inf -(p13) br.ret.spnt b0 // exit here if x =0.0, result is x -} -;; - -{ .mfi - // overflow thresholds - ldfps fMIN_SGL_OFLOW_ARG, fMAX_SGL_NORM_ARG = [rTblAddr], 8 - fma.s1 fXsq = fNormX, fNormX, f0 // x^2 for small path - and rExp_x = rExp_mask, rSignexp_x // Biased exponent of x -} -{ .mlx - nop.m 0 - movl rM1_lim = 0xc1c00000 // Minus -1 limit (-24.0), SP -} -;; - -{ .mfi - setf.exp fA2 = rExp_half - // x*(64/ln(2)) + Right Shifter - fma.s1 fNint = fNormX, f64DivLn2, fRightShifter - sub rExp_x = rExp_x, rExp_bias // True exponent of x -} -{ .mfb - nop.m 0 -(p15) fma.s.s0 f8 = f8, f1, f0 // result if x = NaT,NaN,+Inf -(p15) br.ret.spnt b0 // exit here if x = NaT,NaN,+Inf -} -;; - -{ .mfi - setf.s fMAX_SGL_MINUS_1_ARG = rM1_lim // -1 threshold, -24.0 - nop.f 0 - cmp.gt p7, p8 = -2, rExp_x // Test |x| < 2^(-2) -} -;; - -{ .mfi -(p7) cmp.gt.unc p6, p7 = -40, rExp_x // Test |x| < 2^(-40) - fma.s1 fA87 = fA8, fNormX, fA7 // Small path, A8*x+A7 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA65 = fA6, fNormX, fA5 // Small path, A6*x+A5 - nop.i 0 -} -;; - -{ .mfb - nop.m 0 -(p6) fma.s.s0 f8 = f8, f8, f8 // If x < 2^-40, result=x+x*x -(p6) br.ret.spnt b0 // Exit if x < 2^-40 -} -;; - -{ .mfi - nop.m 0 - // check for overflow - fcmp.gt.s1 p15, p14 = fNormX, fMIN_SGL_OFLOW_ARG - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fN = fNint, f1, fRightShifter // n in FP register - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p7) fma.s1 fA43 = fA4, fNormX, fA3 // Small path, A4*x+A3 - nop.i 0 -} -;; - -{ .mfi - getf.sig rNJ = fNint // bits of n, j -(p7) fma.s1 fA8765 = fA87, fXsq, fA65 // Small path, A87*xsq+A65 - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fma.s1 fX3 = fXsq, fNormX, f0 // Small path, x^3 - // branch out if overflow -(p15) br.cond.spnt EXPM1_CERTAIN_OVERFLOW -} -;; - -{ .mfi - addl rN = 0xffff-63, rNJ // biased and shifted n - fnma.s1 fR = fLn2Div64, fN, fNormX // R = x - N*ln(2)/64 - extr.u rJ = rNJ , 0 , 6 // bits of j -} -;; - -{ .mfi - shladd rJ = rJ, 3, rTblAddr // address in the 2^(j/64) table - // check for certain -1 - fcmp.le.s1 p13, p0 = fNormX, fMAX_SGL_MINUS_1_ARG - shr rN = rN, 6 // biased n -} -{ .mfi - nop.m 0 -(p7) fma.s1 fA432 = fA43, fNormX, fA2 // Small path, A43*x+A2 - nop.i 0 -} -;; - -{ .mfi - ld8 rJ = [rJ] - nop.f 0 - shl rN = rN , 52 // 2^n bits in DP format -} -;; - -{ .mmi - or rN = rN, rJ // bits of 2^n * 2^(j/64) in DP format -(p13) mov rTmp = 1 // Make small value for -1 path - nop.i 0 -} -;; - -{ .mfi - setf.d fT = rN // 2^n - // check for possible overflow (only happens if input higher precision) -(p14) fcmp.gt.s1 p14, p0 = fNormX, fMAX_SGL_NORM_ARG - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.s1 fA8765432 = fA8765, fX3, fA432 // A8765*x^3+A432 - nop.i 0 -} -;; - -{ .mfi -(p13) setf.exp fTmp = rTmp // Make small value for -1 path - fma.s1 fP = fA3, fR, fA2 // A3*R + A2 - nop.i 0 -} -{ .mfb - nop.m 0 - fma.s1 fRSqr = fR, fR, f0 // R^2 -(p13) br.cond.spnt EXPM1_CERTAIN_MINUS_ONE // Branch if x < -24.0 -} -;; - -{ .mfb - nop.m 0 -(p7) fma.s.s0 f8 = fA8765432, fXsq, fNormX // Small path, - // result=xsq*A8765432+x -(p7) br.ret.spnt b0 // Exit if 2^-40 <= |x| < 2^-2 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fP = fP, fRSqr, fR // P = (A3*R + A2)*Rsqr + R - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fms.s1 fTm1 = fT, f1, f1 // T - 1.0 -(p14) br.cond.spnt EXPM1_POSSIBLE_OVERFLOW -} -;; - -{ .mfb - nop.m 0 - fma.s.s0 f8 = fP, fT, fTm1 - br.ret.sptk b0 // Result for main path - // minus_one_limit < x < -2^-2 - // and +2^-2 <= x < overflow_limit -} -;; - -// Here if x unorm -EXPM1_UNORM: -{ .mfb - getf.exp rSignexp_x = fNormX // Must recompute if x unorm - fcmp.eq.s0 p6, p0 = f8, f0 // Set D flag - br.cond.sptk EXPM1_COMMON -} -;; - -// here if result will be -1 and inexact, x <= -24.0 -EXPM1_CERTAIN_MINUS_ONE: -{ .mfb - nop.m 0 - fms.s.s0 f8 = fTmp, fTmp, f1 // Result -1, and Inexact set - br.ret.sptk b0 -} -;; - -EXPM1_POSSIBLE_OVERFLOW: - -// Here if fMAX_SGL_NORM_ARG < x < fMIN_SGL_OFLOW_ARG -// This cannot happen if input is a single, only if input higher precision. -// Overflow is a possibility, not a certainty. - -// Recompute result using status field 2 with user's rounding mode, -// and wre set. If result is larger than largest single, then we have -// overflow - -{ .mfi - mov rGt_ln = 0x1007f // Exponent for largest sgl + 1 ulp - fsetc.s2 0x7F,0x42 // Get user's round mode, set wre - nop.i 0 -} -;; - -{ .mfi - setf.exp fGt_pln = rGt_ln // Create largest single + 1 ulp - fma.s.s2 fWre_urm_f8 = fP, fT, fTm1 // Result with wre set - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 // Turn off wre in sf2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.ge.s1 p6, p0 = fWre_urm_f8, fGt_pln // Test for overflow - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - nop.f 0 -(p6) br.cond.spnt EXPM1_CERTAIN_OVERFLOW // Branch if overflow -} -;; - -{ .mfb - nop.m 0 - fma.s.s0 f8 = fP, fT, fTm1 - br.ret.sptk b0 // Exit if really no overflow -} -;; - -// here if overflow -EXPM1_CERTAIN_OVERFLOW: -{ .mmi - addl rTmp = 0x1FFFE, r0;; - setf.exp fTmp = rTmp - nop.i 999 -} -;; - -{ .mfi - alloc r32 = ar.pfs, 0, 3, 4, 0 // get some registers - fmerge.s FR_X = fNormX,fNormX - nop.i 0 -} -{ .mfb - mov GR_Parameter_TAG = 43 - fma.s.s0 FR_RESULT = fTmp, fTmp, f0 // Set I,O and +INF result - br.cond.sptk __libm_error_region -} -;; - -GLOBAL_IEEE754_END(expm1f) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 999 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = FR_Y,16 // Store Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mfi - stfs [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - nop.f 0 - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address -} -{ .mib - stfs [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_expm1l.S b/sysdeps/ia64/fpu/s_expm1l.S deleted file mode 100644 index 63bf39a3c1..0000000000 --- a/sysdeps/ia64/fpu/s_expm1l.S +++ /dev/null @@ -1,1431 +0,0 @@ -.file "expl_m1.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial Version -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 07/07/01 Improved speed of all paths -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align; -// used data8 for long double table values -// 03/11/03 Improved accuracy and performance, corrected missing inexact flags -// 04/17/03 Eliminated misplaced and unused data label -// 12/15/03 Eliminated call to error support on expm1l underflow -// -//********************************************************************* -// -// Function: Combined expl(x) and expm1l(x), where -// x -// expl(x) = e , for double-extended precision x values -// x -// expm1l(x) = e - 1 for double-extended precision x values -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f9-f15,f32-f77 -// -// General Purpose Registers: -// r14-r38 -// r35-r38 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6-p15 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// Denormal fault raised on denormal inputs -// Overflow exceptions raised when appropriate for exp and expm1 -// Underflow exceptions raised when appropriate for exp and expm1 -// (Error Handling Routine called for overflow and Underflow) -// Inexact raised when appropriate by algorithm -// -// exp(inf) = inf -// exp(-inf) = +0 -// exp(SNaN) = QNaN -// exp(QNaN) = QNaN -// exp(0) = 1 -// exp(EM_special Values) = QNaN -// exp(inf) = inf -// expm1(-inf) = -1 -// expm1(SNaN) = QNaN -// expm1(QNaN) = QNaN -// expm1(0) = 0 -// expm1(EM_special Values) = QNaN -// -//********************************************************************* -// -// Implementation and Algorithm Notes: -// -// ker_exp_64( in_FR : X, -// out_FR : Y_hi, -// out_FR : Y_lo, -// out_FR : scale, -// out_PR : Safe ) -// -// On input, X is in register format -// p6 for exp, -// p7 for expm1, -// -// On output, -// -// scale*(Y_hi + Y_lo) approximates exp(X) if exp -// scale*(Y_hi + Y_lo) approximates exp(X)-1 if expm1 -// -// The accuracy is sufficient for a highly accurate 64 sig. -// bit implementation. Safe is set if there is no danger of -// overflow/underflow when the result is composed from scale, -// Y_hi and Y_lo. Thus, we can have a fast return if Safe is set. -// Otherwise, one must prepare to handle the possible exception -// appropriately. Note that SAFE not set (false) does not mean -// that overflow/underflow will occur; only the setting of SAFE -// guarantees the opposite. -// -// **** High Level Overview **** -// -// The method consists of three cases. -// -// If |X| < Tiny use case exp_tiny; -// else if |X| < 2^(-m) use case exp_small; m=12 for exp, m=7 for expm1 -// else use case exp_regular; -// -// Case exp_tiny: -// -// 1 + X can be used to approximate exp(X) -// X + X^2/2 can be used to approximate exp(X) - 1 -// -// Case exp_small: -// -// Here, exp(X) and exp(X) - 1 can all be -// approximated by a relatively simple polynomial. -// -// This polynomial resembles the truncated Taylor series -// -// exp(w) = 1 + w + w^2/2! + w^3/3! + ... + w^n/n! -// -// Case exp_regular: -// -// Here we use a table lookup method. The basic idea is that in -// order to compute exp(X), we accurately decompose X into -// -// X = N * log(2)/(2^12) + r, |r| <= log(2)/2^13. -// -// Hence -// -// exp(X) = 2^( N / 2^12 ) * exp(r). -// -// The value 2^( N / 2^12 ) is obtained by simple combinations -// of values calculated beforehand and stored in table; exp(r) -// is approximated by a short polynomial because |r| is small. -// -// We elaborate this method in 4 steps. -// -// Step 1: Reduction -// -// The value 2^12/log(2) is stored as a double-extended number -// L_Inv. -// -// N := round_to_nearest_integer( X * L_Inv ) -// -// The value log(2)/2^12 is stored as two numbers L_hi and L_lo so -// that r can be computed accurately via -// -// r := (X - N*L_hi) - N*L_lo -// -// We pick L_hi such that N*L_hi is representable in 64 sig. bits -// and thus the FMA X - N*L_hi is error free. So r is the -// 1 rounding error from an exact reduction with respect to -// -// L_hi + L_lo. -// -// In particular, L_hi has 30 significant bit and can be stored -// as a double-precision number; L_lo has 64 significant bits and -// stored as a double-extended number. -// -// Step 2: Approximation -// -// exp(r) - 1 is approximated by a short polynomial of the form -// -// r + A_1 r^2 + A_2 r^3 + A_3 r^4 . -// -// Step 3: Composition from Table Values -// -// The value 2^( N / 2^12 ) can be composed from a couple of tables -// of precalculated values. First, express N as three integers -// K, M_1, and M_2 as -// -// N = K * 2^12 + M_1 * 2^6 + M_2 -// -// Where 0 <= M_1, M_2 < 2^6; and K can be positive or negative. -// When N is represented in 2's complement, M_2 is simply the 6 -// lsb's, M_1 is the next 6, and K is simply N shifted right -// arithmetically (sign extended) by 12 bits. -// -// Now, 2^( N / 2^12 ) is simply -// -// 2^K * 2^( M_1 / 2^6 ) * 2^( M_2 / 2^12 ) -// -// Clearly, 2^K needs no tabulation. The other two values are less -// trivial because if we store each accurately to more than working -// precision, than its product is too expensive to calculate. We -// use the following method. -// -// Define two mathematical values, delta_1 and delta_2, implicitly -// such that -// -// T_1 = exp( [M_1 log(2)/2^6] - delta_1 ) -// T_2 = exp( [M_2 log(2)/2^12] - delta_2 ) -// -// are representable as 24 significant bits. To illustrate the idea, -// we show how we define delta_1: -// -// T_1 := round_to_24_bits( exp( M_1 log(2)/2^6 ) ) -// delta_1 = (M_1 log(2)/2^6) - log( T_1 ) -// -// The last equality means mathematical equality. We then tabulate -// -// W_1 := exp(delta_1) - 1 -// W_2 := exp(delta_2) - 1 -// -// Both in double precision. -// -// From the tabulated values T_1, T_2, W_1, W_2, we compose the values -// T and W via -// -// T := T_1 * T_2 ...exactly -// W := W_1 + (1 + W_1)*W_2 -// -// W approximates exp( delta ) - 1 where delta = delta_1 + delta_2. -// The mathematical product of T and (W+1) is an accurate representation -// of 2^(M_1/2^6) * 2^(M_2/2^12). -// -// Step 4. Reconstruction -// -// Finally, we can reconstruct exp(X), exp(X) - 1. -// Because -// -// X = K * log(2) + (M_1*log(2)/2^6 - delta_1) -// + (M_2*log(2)/2^12 - delta_2) -// + delta_1 + delta_2 + r ...accurately -// We have -// -// exp(X) ~=~ 2^K * ( T + T*[exp(delta_1+delta_2+r) - 1] ) -// ~=~ 2^K * ( T + T*[exp(delta + r) - 1] ) -// ~=~ 2^K * ( T + T*[(exp(delta)-1) -// + exp(delta)*(exp(r)-1)] ) -// ~=~ 2^K * ( T + T*( W + (1+W)*poly(r) ) ) -// ~=~ 2^K * ( Y_hi + Y_lo ) -// -// where Y_hi = T and Y_lo = T*(W + (1+W)*poly(r)) -// -// For exp(X)-1, we have -// -// exp(X)-1 ~=~ 2^K * ( Y_hi + Y_lo ) - 1 -// ~=~ 2^K * ( Y_hi + Y_lo - 2^(-K) ) -// -// and we combine Y_hi + Y_lo - 2^(-N) into the form of two -// numbers Y_hi + Y_lo carefully. -// -// **** Algorithm Details **** -// -// A careful algorithm must be used to realize the mathematical ideas -// accurately. We describe each of the three cases. We assume SAFE -// is preset to be TRUE. -// -// Case exp_tiny: -// -// The important points are to ensure an accurate result under -// different rounding directions and a correct setting of the SAFE -// flag. -// -// If expm1 is 1, then -// SAFE := False ...possibility of underflow -// Scale := 1.0 -// Y_hi := X -// Y_lo := 2^(-17000) -// Else -// Scale := 1.0 -// Y_hi := 1.0 -// Y_lo := X ...for different rounding modes -// Endif -// -// Case exp_small: -// -// Here we compute a simple polynomial. To exploit parallelism, we split -// the polynomial into several portions. -// -// Let r = X -// -// If exp ...i.e. exp( argument ) -// -// rsq := r * r; -// r4 := rsq*rsq -// poly_lo := P_3 + r*(P_4 + r*(P_5 + r*P_6)) -// poly_hi := r + rsq*(P_1 + r*P_2) -// Y_lo := poly_hi + r4 * poly_lo -// Y_hi := 1.0 -// Scale := 1.0 -// -// Else ...i.e. exp( argument ) - 1 -// -// rsq := r * r -// r4 := rsq * rsq -// poly_lo := Q_7 + r*(Q_8 + r*Q_9)) -// poly_med:= Q_3 + r*Q_4 + rsq*(Q_5 + r*Q_6) -// poly_med:= poly_med + r4*poly_lo -// poly_hi := Q_1 + r*Q_2 -// Y_lo := rsq*(poly_hi + rsq*poly_lo) -// Y_hi := X -// Scale := 1.0 -// -// Endif -// -// Case exp_regular: -// -// The previous description contain enough information except the -// computation of poly and the final Y_hi and Y_lo in the case for -// exp(X)-1. -// -// The computation of poly for Step 2: -// -// rsq := r*r -// poly := r + rsq*(A_1 + r*(A_2 + r*A_3)) -// -// For the case exp(X) - 1, we need to incorporate 2^(-K) into -// Y_hi and Y_lo at the end of Step 4. -// -// If K > 10 then -// Y_lo := Y_lo - 2^(-K) -// Else -// If K < -10 then -// Y_lo := Y_hi + Y_lo -// Y_hi := -2^(-K) -// Else -// Y_hi := Y_hi - 2^(-K) -// End If -// End If -// -//======================================================= -// General Purpose Registers -// -GR_ad_Arg = r14 -GR_ad_A = r15 -GR_sig_inv_ln2 = r15 -GR_rshf_2to51 = r16 -GR_ad_PQ = r16 -GR_ad_Q = r16 -GR_signexp_x = r17 -GR_exp_x = r17 -GR_small_exp = r18 -GR_rshf = r18 -GR_exp_mask = r19 -GR_ad_W1 = r20 -GR_exp_2tom51 = r20 -GR_ad_W2 = r21 -GR_exp_underflow = r21 -GR_M2 = r22 -GR_huge_exp = r22 -GR_M1 = r23 -GR_huge_signif = r23 -GR_K = r24 -GR_one = r24 -GR_minus_one = r24 -GR_exp_bias = r25 -GR_ad_Limits = r26 -GR_N_fix = r26 -GR_exp_2_mk = r26 -GR_ad_P = r27 -GR_exp_2_k = r27 -GR_big_expo_neg = r28 -GR_very_small_exp = r29 -GR_exp_half = r29 -GR_ad_T1 = r30 -GR_ad_T2 = r31 - -GR_SAVE_PFS = r32 -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Parameter_TAG = r38 - -// Floating Point Registers -// -FR_norm_x = f9 -FR_RSHF_2TO51 = f10 -FR_INV_LN2_2TO63 = f11 -FR_W_2TO51_RSH = f12 -FR_2TOM51 = f13 -FR_RSHF = f14 -FR_Y_hi = f34 -FR_Y_lo = f35 -FR_scale = f36 -FR_tmp = f37 -FR_float_N = f38 -FR_N_signif = f39 -FR_L_hi = f40 -FR_L_lo = f41 -FR_r = f42 -FR_W1 = f43 -FR_T1 = f44 -FR_W2 = f45 -FR_T2 = f46 -FR_W1_p1 = f47 -FR_rsq = f48 -FR_A2 = f49 -FR_r4 = f50 -FR_A3 = f51 -FR_poly = f52 -FR_T = f53 -FR_W = f54 -FR_Wp1 = f55 -FR_p21 = f59 -FR_p210 = f59 -FR_p65 = f60 -FR_p654 = f60 -FR_p6543 = f60 -FR_2_mk = f61 -FR_P4Q7 = f61 -FR_P4 = f61 -FR_Q7 = f61 -FR_P3Q6 = f62 -FR_P3 = f62 -FR_Q6 = f62 -FR_q65 = f62 -FR_q6543 = f62 -FR_P2Q5 = f63 -FR_P2 = f63 -FR_Q5 = f63 -FR_P1Q4 = f64 -FR_P1 = f64 -FR_Q4 = f64 -FR_q43 = f64 -FR_Q3 = f65 -FR_Q2 = f66 -FR_q21 = f66 -FR_Q1 = f67 -FR_A1 = f68 -FR_P6Q9 = f68 -FR_P6 = f68 -FR_Q9 = f68 -FR_P5Q8 = f69 -FR_P5 = f69 -FR_Q8 = f69 -FR_q987 = f69 -FR_q98 = f69 -FR_q9876543 = f69 -FR_min_oflow_x = f70 -FR_huge_exp = f70 -FR_zero_uflow_x = f71 -FR_huge_signif = f71 -FR_huge = f72 -FR_small = f72 -FR_half = f73 -FR_T_scale = f74 -FR_result_lo = f75 -FR_W_T_scale = f76 -FR_Wp1_T_scale = f77 -FR_ftz = f77 -FR_half_x = f77 -// - -FR_X = f9 -FR_Y = f0 -FR_RESULT = f15 - -// ************* DO NOT CHANGE ORDER OF THESE TABLES ******************** - -// double-extended 1/ln(2) -// 3fff b8aa 3b29 5c17 f0bb be87fed0691d3e88 -// 3fff b8aa 3b29 5c17 f0bc -// For speed the significand will be loaded directly with a movl and setf.sig -// and the exponent will be bias+63 instead of bias+0. Thus subsequent -// computations need to scale appropriately. -// The constant 2^12/ln(2) is needed for the computation of N. This is also -// obtained by scaling the computations. -// -// Two shifting constants are loaded directly with movl and setf.d. -// 1. RSHF_2TO51 = 1.1000..00 * 2^(63-12) -// This constant is added to x*1/ln2 to shift the integer part of -// x*2^12/ln2 into the rightmost bits of the significand. -// The result of this fma is N_signif. -// 2. RSHF = 1.1000..00 * 2^(63) -// This constant is subtracted from N_signif * 2^(-51) to give -// the integer part of N, N_fix, as a floating-point number. -// The result of this fms is float_N. - -RODATA -.align 64 -LOCAL_OBJECT_START(Constants_exp_64_Arg) -//data8 0xB8AA3B295C17F0BC,0x0000400B // Inv_L = 2^12/log(2) -data8 0xB17217F400000000,0x00003FF2 // L_hi = hi part log(2)/2^12 -data8 0xF473DE6AF278ECE6,0x00003FD4 // L_lo = lo part log(2)/2^12 -LOCAL_OBJECT_END(Constants_exp_64_Arg) - -LOCAL_OBJECT_START(Constants_exp_64_Limits) -data8 0xb17217f7d1cf79ac,0x0000400c // Smallest long dbl oflow x -data8 0xb220000000000000,0x0000c00c // Small long dbl uflow zero x -LOCAL_OBJECT_END(Constants_exp_64_Limits) - -LOCAL_OBJECT_START(Constants_exp_64_A) -data8 0xAAAAAAABB1B736A0,0x00003FFA // A3 -data8 0xAAAAAAAB90CD6327,0x00003FFC // A2 -data8 0xFFFFFFFFFFFFFFFF,0x00003FFD // A1 -LOCAL_OBJECT_END(Constants_exp_64_A) - -LOCAL_OBJECT_START(Constants_exp_64_P) -data8 0xD00D6C8143914A8A,0x00003FF2 // P6 -data8 0xB60BC4AC30304B30,0x00003FF5 // P5 -data8 0x888888887474C518,0x00003FF8 // P4 -data8 0xAAAAAAAA8DAE729D,0x00003FFA // P3 -data8 0xAAAAAAAAAAAAAF61,0x00003FFC // P2 -data8 0x80000000000004C7,0x00003FFE // P1 -LOCAL_OBJECT_END(Constants_exp_64_P) - -LOCAL_OBJECT_START(Constants_exp_64_Q) -data8 0x93F2AC5F7471F32E, 0x00003FE9 // Q9 -data8 0xB8DA0F3550B3E764, 0x00003FEC // Q8 -data8 0xD00D00D0028E89C4, 0x00003FEF // Q7 -data8 0xD00D00DAEB8C4E91, 0x00003FF2 // Q6 -data8 0xB60B60B60B60B6F5, 0x00003FF5 // Q5 -data8 0x888888888886CC23, 0x00003FF8 // Q4 -data8 0xAAAAAAAAAAAAAAAB, 0x00003FFA // Q3 -data8 0xAAAAAAAAAAAAAAAB, 0x00003FFC // Q2 -data8 0x8000000000000000, 0x00003FFE // Q1 -LOCAL_OBJECT_END(Constants_exp_64_Q) - -LOCAL_OBJECT_START(Constants_exp_64_T1) -data4 0x3F800000,0x3F8164D2,0x3F82CD87,0x3F843A29 -data4 0x3F85AAC3,0x3F871F62,0x3F88980F,0x3F8A14D5 -data4 0x3F8B95C2,0x3F8D1ADF,0x3F8EA43A,0x3F9031DC -data4 0x3F91C3D3,0x3F935A2B,0x3F94F4F0,0x3F96942D -data4 0x3F9837F0,0x3F99E046,0x3F9B8D3A,0x3F9D3EDA -data4 0x3F9EF532,0x3FA0B051,0x3FA27043,0x3FA43516 -data4 0x3FA5FED7,0x3FA7CD94,0x3FA9A15B,0x3FAB7A3A -data4 0x3FAD583F,0x3FAF3B79,0x3FB123F6,0x3FB311C4 -data4 0x3FB504F3,0x3FB6FD92,0x3FB8FBAF,0x3FBAFF5B -data4 0x3FBD08A4,0x3FBF179A,0x3FC12C4D,0x3FC346CD -data4 0x3FC5672A,0x3FC78D75,0x3FC9B9BE,0x3FCBEC15 -data4 0x3FCE248C,0x3FD06334,0x3FD2A81E,0x3FD4F35B -data4 0x3FD744FD,0x3FD99D16,0x3FDBFBB8,0x3FDE60F5 -data4 0x3FE0CCDF,0x3FE33F89,0x3FE5B907,0x3FE8396A -data4 0x3FEAC0C7,0x3FED4F30,0x3FEFE4BA,0x3FF28177 -data4 0x3FF5257D,0x3FF7D0DF,0x3FFA83B3,0x3FFD3E0C -LOCAL_OBJECT_END(Constants_exp_64_T1) - -LOCAL_OBJECT_START(Constants_exp_64_T2) -data4 0x3F800000,0x3F80058C,0x3F800B18,0x3F8010A4 -data4 0x3F801630,0x3F801BBD,0x3F80214A,0x3F8026D7 -data4 0x3F802C64,0x3F8031F2,0x3F803780,0x3F803D0E -data4 0x3F80429C,0x3F80482B,0x3F804DB9,0x3F805349 -data4 0x3F8058D8,0x3F805E67,0x3F8063F7,0x3F806987 -data4 0x3F806F17,0x3F8074A8,0x3F807A39,0x3F807FCA -data4 0x3F80855B,0x3F808AEC,0x3F80907E,0x3F809610 -data4 0x3F809BA2,0x3F80A135,0x3F80A6C7,0x3F80AC5A -data4 0x3F80B1ED,0x3F80B781,0x3F80BD14,0x3F80C2A8 -data4 0x3F80C83C,0x3F80CDD1,0x3F80D365,0x3F80D8FA -data4 0x3F80DE8F,0x3F80E425,0x3F80E9BA,0x3F80EF50 -data4 0x3F80F4E6,0x3F80FA7C,0x3F810013,0x3F8105AA -data4 0x3F810B41,0x3F8110D8,0x3F81166F,0x3F811C07 -data4 0x3F81219F,0x3F812737,0x3F812CD0,0x3F813269 -data4 0x3F813802,0x3F813D9B,0x3F814334,0x3F8148CE -data4 0x3F814E68,0x3F815402,0x3F81599C,0x3F815F37 -LOCAL_OBJECT_END(Constants_exp_64_T2) - -LOCAL_OBJECT_START(Constants_exp_64_W1) -data8 0x0000000000000000, 0xBE384454171EC4B4 -data8 0xBE6947414AA72766, 0xBE5D32B6D42518F8 -data8 0x3E68D96D3A319149, 0xBE68F4DA62415F36 -data8 0xBE6DDA2FC9C86A3B, 0x3E6B2E50F49228FE -data8 0xBE49C0C21188B886, 0x3E64BFC21A4C2F1F -data8 0xBE6A2FBB2CB98B54, 0x3E5DC5DE9A55D329 -data8 0x3E69649039A7AACE, 0x3E54728B5C66DBA5 -data8 0xBE62B0DBBA1C7D7D, 0x3E576E0409F1AF5F -data8 0x3E6125001A0DD6A1, 0xBE66A419795FBDEF -data8 0xBE5CDE8CE1BD41FC, 0xBE621376EA54964F -data8 0x3E6370BE476E76EE, 0x3E390D1A3427EB92 -data8 0x3E1336DE2BF82BF8, 0xBE5FF1CBD0F7BD9E -data8 0xBE60A3550CEB09DD, 0xBE5CA37E0980F30D -data8 0xBE5C541B4C082D25, 0xBE5BBECA3B467D29 -data8 0xBE400D8AB9D946C5, 0xBE5E2A0807ED374A -data8 0xBE66CB28365C8B0A, 0x3E3AAD5BD3403BCA -data8 0x3E526055C7EA21E0, 0xBE442C75E72880D6 -data8 0x3E58B2BB85222A43, 0xBE5AAB79522C42BF -data8 0xBE605CB4469DC2BC, 0xBE589FA7A48C40DC -data8 0xBE51C2141AA42614, 0xBE48D087C37293F4 -data8 0x3E367A1CA2D673E0, 0xBE51BEBB114F7A38 -data8 0xBE6348E5661A4B48, 0xBDF526431D3B9962 -data8 0x3E3A3B5E35A78A53, 0xBE46C46C1CECD788 -data8 0xBE60B7EC7857D689, 0xBE594D3DD14F1AD7 -data8 0xBE4F9C304C9A8F60, 0xBE52187302DFF9D2 -data8 0xBE5E4C8855E6D68F, 0xBE62140F667F3DC4 -data8 0xBE36961B3BF88747, 0x3E602861C96EC6AA -data8 0xBE3B5151D57FD718, 0x3E561CD0FC4A627B -data8 0xBE3A5217CA913FEA, 0x3E40A3CC9A5D193A -data8 0xBE5AB71310A9C312, 0x3E4FDADBC5F57719 -data8 0x3E361428DBDF59D5, 0x3E5DB5DB61B4180D -data8 0xBE42AD5F7408D856, 0x3E2A314831B2B707 -LOCAL_OBJECT_END(Constants_exp_64_W1) - -LOCAL_OBJECT_START(Constants_exp_64_W2) -data8 0x0000000000000000, 0xBE641F2537A3D7A2 -data8 0xBE68DD57AD028C40, 0xBE5C77D8F212B1B6 -data8 0x3E57878F1BA5B070, 0xBE55A36A2ECAE6FE -data8 0xBE620608569DFA3B, 0xBE53B50EA6D300A3 -data8 0x3E5B5EF2223F8F2C, 0xBE56A0D9D6DE0DF4 -data8 0xBE64EEF3EAE28F51, 0xBE5E5AE2367EA80B -data8 0x3E47CB1A5FCBC02D, 0xBE656BA09BDAFEB7 -data8 0x3E6E70C6805AFEE7, 0xBE6E0509A3415EBA -data8 0xBE56856B49BFF529, 0x3E66DD3300508651 -data8 0x3E51165FC114BC13, 0x3E53333DC453290F -data8 0x3E6A072B05539FDA, 0xBE47CD877C0A7696 -data8 0xBE668BF4EB05C6D9, 0xBE67C3E36AE86C93 -data8 0xBE533904D0B3E84B, 0x3E63E8D9556B53CE -data8 0x3E212C8963A98DC8, 0xBE33138F032A7A22 -data8 0x3E530FA9BC584008, 0xBE6ADF82CCB93C97 -data8 0x3E5F91138370EA39, 0x3E5443A4FB6A05D8 -data8 0x3E63DACD181FEE7A, 0xBE62B29DF0F67DEC -data8 0x3E65C4833DDE6307, 0x3E5BF030D40A24C1 -data8 0x3E658B8F14E437BE, 0xBE631C29ED98B6C7 -data8 0x3E6335D204CF7C71, 0x3E529EEDE954A79D -data8 0x3E5D9257F64A2FB8, 0xBE6BED1B854ED06C -data8 0x3E5096F6D71405CB, 0xBE3D4893ACB9FDF5 -data8 0xBDFEB15801B68349, 0x3E628D35C6A463B9 -data8 0xBE559725ADE45917, 0xBE68C29C042FC476 -data8 0xBE67593B01E511FA, 0xBE4A4313398801ED -data8 0x3E699571DA7C3300, 0x3E5349BE08062A9E -data8 0x3E5229C4755BB28E, 0x3E67E42677A1F80D -data8 0xBE52B33F6B69C352, 0xBE6B3550084DA57F -data8 0xBE6DB03FD1D09A20, 0xBE60CBC42161B2C1 -data8 0x3E56ED9C78A2B771, 0xBE508E319D0FA795 -data8 0xBE59482AFD1A54E9, 0xBE2A17CEB07FD23E -data8 0x3E68BF5C17365712, 0x3E3956F9B3785569 -LOCAL_OBJECT_END(Constants_exp_64_W2) - - -.section .text - -GLOBAL_IEEE754_ENTRY(expm1l) - -// -// Set p7 true for expm1, p6 false -// - -{ .mlx - getf.exp GR_signexp_x = f8 // Get sign and exponent of x, redo if unorm - movl GR_sig_inv_ln2 = 0xb8aa3b295c17f0bc // significand of 1/ln2 -} -{ .mlx - addl GR_ad_Arg = @ltoff(Constants_exp_64_Arg#),gp - movl GR_rshf_2to51 = 0x4718000000000000 // 1.10000 2^(63+51) -} -;; - -{ .mfi - ld8 GR_ad_Arg = [GR_ad_Arg] // Point to Arg table - fclass.m p8, p0 = f8, 0x1E7 // Test x for natval, nan, inf, zero - cmp.eq p7, p6 = r0, r0 -} -{ .mfb - mov GR_exp_half = 0x0FFFE // Exponent of 0.5, for very small path - fnorm.s1 FR_norm_x = f8 // Normalize x - br.cond.sptk exp_continue -} -;; - -GLOBAL_IEEE754_END(expm1l) - - -GLOBAL_IEEE754_ENTRY(expl) -// -// Set p7 false for exp, p6 true -// -{ .mlx - getf.exp GR_signexp_x = f8 // Get sign and exponent of x, redo if unorm - movl GR_sig_inv_ln2 = 0xb8aa3b295c17f0bc // significand of 1/ln2 -} -{ .mlx - addl GR_ad_Arg = @ltoff(Constants_exp_64_Arg#),gp - movl GR_rshf_2to51 = 0x4718000000000000 // 1.10000 2^(63+51) -} -;; - -{ .mfi - ld8 GR_ad_Arg = [GR_ad_Arg] // Point to Arg table - fclass.m p8, p0 = f8, 0x1E7 // Test x for natval, nan, inf, zero - cmp.eq p6, p7 = r0, r0 -} -{ .mfi - mov GR_exp_half = 0x0FFFE // Exponent of 0.5, for very small path - fnorm.s1 FR_norm_x = f8 // Normalize x - nop.i 999 -} -;; - -exp_continue: -// Form two constants we need -// 1/ln2 * 2^63 to compute w = x * 1/ln2 * 128 -// 1.1000..000 * 2^(63+63-12) to right shift int(N) into the significand - -{ .mfi - setf.sig FR_INV_LN2_2TO63 = GR_sig_inv_ln2 // form 1/ln2 * 2^63 - fclass.nm.unc p9, p0 = f8, 0x1FF // Test x for unsupported - mov GR_exp_2tom51 = 0xffff-51 -} -{ .mlx - setf.d FR_RSHF_2TO51 = GR_rshf_2to51 // Form const 1.1000 * 2^(63+51) - movl GR_rshf = 0x43e8000000000000 // 1.10000 2^63 for right shift -} -;; - -{ .mfi - setf.exp FR_half = GR_exp_half // Form 0.5 for very small path - fma.s1 FR_scale = f1,f1,f0 // Scale = 1.0 - mov GR_exp_bias = 0x0FFFF // Set exponent bias -} -{ .mib - add GR_ad_Limits = 0x20, GR_ad_Arg // Point to Limits table - mov GR_exp_mask = 0x1FFFF // Form exponent mask -(p8) br.cond.spnt EXP_64_SPECIAL // Branch if natval, nan, inf, zero -} -;; - -{ .mfi - setf.exp FR_2TOM51 = GR_exp_2tom51 // Form 2^-51 for scaling float_N - nop.f 999 - add GR_ad_A = 0x40, GR_ad_Arg // Point to A table -} -{ .mib - setf.d FR_RSHF = GR_rshf // Form right shift const 1.1000 * 2^63 - add GR_ad_T1 = 0x160, GR_ad_Arg // Point to T1 table -(p9) br.cond.spnt EXP_64_UNSUPPORTED // Branch if unsupported -} -;; - -.pred.rel "mutex",p6,p7 -{ .mfi - ldfe FR_L_hi = [GR_ad_Arg],16 // Get L_hi - fcmp.eq.s0 p9,p0 = f8, f0 // Dummy op to flag denormals -(p6) add GR_ad_PQ = 0x30, GR_ad_A // Point to P table for exp -} -{ .mfi - ldfe FR_min_oflow_x = [GR_ad_Limits],16 // Get min x to cause overflow - fmpy.s1 FR_rsq = f8, f8 // rsq = x * x for small path -(p7) add GR_ad_PQ = 0x90, GR_ad_A // Point to Q table for expm1 -};; - -{ .mmi - ldfe FR_L_lo = [GR_ad_Arg],16 // Get L_lo - ldfe FR_zero_uflow_x = [GR_ad_Limits],16 // Get x for zero uflow result - add GR_ad_W1 = 0x200, GR_ad_T1 // Point to W1 table -} -;; - -{ .mfi - ldfe FR_P6Q9 = [GR_ad_PQ],16 // P6(exp) or Q9(expm1) for small path - mov FR_r = FR_norm_x // r = X for small path - mov GR_very_small_exp = -60 // Exponent of x for very small path -} -{ .mfi - add GR_ad_W2 = 0x400, GR_ad_T1 // Point to W2 table - nop.f 999 -(p7) mov GR_small_exp = -7 // Exponent of x for small path expm1 -} -;; - -{ .mmi - ldfe FR_P5Q8 = [GR_ad_PQ],16 // P5(exp) or Q8(expm1) for small path - and GR_exp_x = GR_signexp_x, GR_exp_mask -(p6) mov GR_small_exp = -12 // Exponent of x for small path exp -} -;; - -// N_signif = X * Inv_log2_by_2^12 -// By adding 1.10...0*2^63 we shift and get round_int(N_signif) in significand. -// We actually add 1.10...0*2^51 to X * Inv_log2 to do the same thing. -{ .mfi - ldfe FR_P4Q7 = [GR_ad_PQ],16 // P4(exp) or Q7(expm1) for small path - fma.s1 FR_N_signif = FR_norm_x, FR_INV_LN2_2TO63, FR_RSHF_2TO51 - nop.i 999 -} -{ .mfi - sub GR_exp_x = GR_exp_x, GR_exp_bias // Get exponent - fmpy.s1 FR_r4 = FR_rsq, FR_rsq // Form r4 for small path - cmp.eq.unc p15, p0 = r0, r0 // Set Safe as default -} -;; - -{ .mmi - ldfe FR_P3Q6 = [GR_ad_PQ],16 // P3(exp) or Q6(expm1) for small path - cmp.lt p14, p0 = GR_exp_x, GR_very_small_exp // Is |x| < 2^-60? - nop.i 999 -} -;; - -{ .mfi - ldfe FR_P2Q5 = [GR_ad_PQ],16 // P2(exp) or Q5(expm1) for small path - fmpy.s1 FR_half_x = FR_half, FR_norm_x // 0.5 * x for very small path - cmp.lt p13, p0 = GR_exp_x, GR_small_exp // Is |x| < 2^-m? -} -{ .mib - nop.m 999 - nop.i 999 -(p14) br.cond.spnt EXP_VERY_SMALL // Branch if |x| < 2^-60 -} -;; - -{ .mfi - ldfe FR_A3 = [GR_ad_A],16 // Get A3 for normal path - fcmp.ge.s1 p10,p0 = FR_norm_x, FR_min_oflow_x // Will result overflow? - mov GR_big_expo_neg = -16381 // -0x3ffd -} -{ .mfb - ldfe FR_P1Q4 = [GR_ad_PQ],16 // P1(exp) or Q4(expm1) for small path - nop.f 999 -(p13) br.cond.spnt EXP_SMALL // Branch if |x| < 2^-m - // m=12 for exp, m=7 for expm1 -} -;; - -// Now we are on the main path for |x| >= 2^-m, m=12 for exp, m=7 for expm1 -// -// float_N = round_int(N_signif) -// The signficand of N_signif contains the rounded integer part of X * 2^12/ln2, -// as a twos complement number in the lower bits (that is, it may be negative). -// That twos complement number (called N) is put into GR_N. - -// Since N_signif is scaled by 2^51, it must be multiplied by 2^-51 -// before the shift constant 1.10000 * 2^63 is subtracted to yield float_N. -// Thus, float_N contains the floating point version of N - - -{ .mfi - ldfe FR_A2 = [GR_ad_A],16 // Get A2 for main path - fcmp.lt.s1 p11,p0 = FR_norm_x, FR_zero_uflow_x // Certain zero, uflow? - add GR_ad_T2 = 0x100, GR_ad_T1 // Point to T2 table -} -{ .mfi - nop.m 999 - fms.s1 FR_float_N = FR_N_signif, FR_2TOM51, FR_RSHF // Form float_N - nop.i 999 -} -;; - -{ .mbb - getf.sig GR_N_fix = FR_N_signif // Get N from significand -(p10) br.cond.spnt EXP_OVERFLOW // Branch if result will overflow -(p11) br.cond.spnt EXP_CERTAIN_UNDERFLOW_ZERO // Branch if certain zero, uflow -} -;; - -{ .mfi - ldfe FR_A1 = [GR_ad_A],16 // Get A1 for main path - fnma.s1 FR_r = FR_L_hi, FR_float_N, FR_norm_x // r = -L_hi * float_N + x - extr.u GR_M1 = GR_N_fix, 6, 6 // Extract index M_1 -} -{ .mfi - and GR_M2 = 0x3f, GR_N_fix // Extract index M_2 - nop.f 999 - nop.i 999 -} -;; - -// N_fix is only correct up to 50 bits because of our right shift technique. -// Actually in the normal path we will have restricted K to about 14 bits. -// Somewhat arbitrarily we extract 32 bits. -{ .mfi - shladd GR_ad_W1 = GR_M1,3,GR_ad_W1 // Point to W1 - nop.f 999 - extr GR_K = GR_N_fix, 12, 32 // Extract limited range K -} -{ .mfi - shladd GR_ad_T1 = GR_M1,2,GR_ad_T1 // Point to T1 - nop.f 999 - shladd GR_ad_T2 = GR_M2,2,GR_ad_T2 // Point to T2 -} -;; - -{ .mmi - ldfs FR_T1 = [GR_ad_T1],0 // Get T1 - ldfd FR_W1 = [GR_ad_W1],0 // Get W1 - add GR_exp_2_k = GR_exp_bias, GR_K // Form exponent of 2^k -} -;; - -{ .mmi - ldfs FR_T2 = [GR_ad_T2],0 // Get T2 - shladd GR_ad_W2 = GR_M2,3,GR_ad_W2 // Point to W2 - sub GR_exp_2_mk = GR_exp_bias, GR_K // Form exponent of 2^-k -} -;; - -{ .mmf - ldfd FR_W2 = [GR_ad_W2],0 // Get W2 - setf.exp FR_scale = GR_exp_2_k // Set scale = 2^k - fnma.s1 FR_r = FR_L_lo, FR_float_N, FR_r // r = -L_lo * float_N + r -} -;; - -{ .mfi - setf.exp FR_2_mk = GR_exp_2_mk // Form 2^-k - fma.s1 FR_poly = FR_r, FR_A3, FR_A2 // poly = r * A3 + A2 - cmp.lt p8,p15 = GR_K,GR_big_expo_neg // Set Safe if K > big_expo_neg -} -{ .mfi - nop.m 999 - fmpy.s1 FR_rsq = FR_r, FR_r // rsq = r * r - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s1 FR_T = FR_T1, FR_T2 // T = T1 * T2 - nop.i 999 -} -{ .mfi - nop.m 999 - fadd.s1 FR_W1_p1 = FR_W1, f1 // W1_p1 = W1 + 1.0 - nop.i 999 -} -;; - -{ .mfi -(p7) cmp.lt.unc p8, p9 = 10, GR_K // If expm1, set p8 if K > 10 - fma.s1 FR_poly = FR_r, FR_poly, FR_A1 // poly = r * poly + A1 - nop.i 999 -} -;; - -{ .mfi -(p7) cmp.eq p15, p0 = r0, r0 // If expm1, set Safe flag - fma.s1 FR_T_scale = FR_T, FR_scale, f0 // T_scale = T * scale -(p9) cmp.gt.unc p9, p10 = -10, GR_K // If expm1, set p9 if K < -10 - // If expm1, set p10 if -10<=K<=10 -} -{ .mfi - nop.m 999 - fma.s1 FR_W = FR_W2, FR_W1_p1, FR_W1 // W = W2 * (W1+1.0) + W1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - mov FR_Y_hi = FR_T // Assume Y_hi = T - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_poly = FR_rsq, FR_poly, FR_r // poly = rsq * poly + r - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_Wp1_T_scale = FR_W, FR_T_scale, FR_T_scale // (W+1)*T*scale - nop.i 999 -} -{ .mfi - nop.m 999 - fma.s1 FR_W_T_scale = FR_W, FR_T_scale, f0 // W*T*scale - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fsub.s1 FR_Y_hi = f0, FR_2_mk // If expm1, if K < -10 set Y_hi - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fsub.s1 FR_Y_hi = FR_T, FR_2_mk // If expm1, if |K|<=10 set Y_hi - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s1 FR_result_lo = FR_Wp1_T_scale, FR_poly, FR_W_T_scale - nop.i 999 -} -;; - -.pred.rel "mutex",p8,p9 -// If K > 10 adjust result_lo = result_lo - scale * 2^-k -// If |K| <= 10 adjust result_lo = result_lo + scale * T -{ .mfi - nop.m 999 -(p8) fnma.s1 FR_result_lo = FR_scale, FR_2_mk, FR_result_lo // If K > 10 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 FR_result_lo = FR_T_scale, f1, FR_result_lo // If |K| <= 10 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s0 FR_tmp = FR_A1, FR_A1 // Dummy op to set inexact - nop.i 999 -} -{ .mfb - nop.m 999 -(p15) fma.s0 f8 = FR_Y_hi, FR_scale, FR_result_lo // Safe result -(p15) br.ret.sptk b0 // Safe exit for normal path -} -;; - -// Here if unsafe, will only be here for exp with K < big_expo_neg -{ .mfb - nop.m 999 - fma.s0 FR_RESULT = FR_Y_hi, FR_scale, FR_result_lo // Prelim result - br.cond.sptk EXP_POSSIBLE_UNDERFLOW // Branch to unsafe code -} -;; - - -EXP_SMALL: -// Here if 2^-60 < |x| < 2^-m, m=12 for exp, m=7 for expm1 -{ .mfi -(p7) ldfe FR_Q3 = [GR_ad_Q],16 // Get Q3 for small path, if expm1 -(p6) fma.s1 FR_p65 = FR_P6, FR_r, FR_P5 // If exp, p65 = P6 * r + P5 - nop.i 999 -} -{ .mfi - mov GR_minus_one = -1 -(p7) fma.s1 FR_q98 = FR_Q9, FR_r, FR_Q8 // If expm1, q98 = Q9 * r + Q8 - nop.i 999 -} -;; - -{ .mfi -(p7) ldfe FR_Q2 = [GR_ad_Q],16 // Get Q2 for small path, if expm1 -(p7) fma.s1 FR_q65 = FR_Q6, FR_r, FR_Q5 // If expm1, q65 = Q6 * r + Q5 - nop.i 999 -} -;; - -{ .mfi - setf.sig FR_tmp = GR_minus_one // Create value to force inexact -(p6) fma.s1 FR_p21 = FR_P2, FR_r, FR_P1 // If exp, p21 = P2 * r + P1 - nop.i 999 -} -{ .mfi -(p7) ldfe FR_Q1 = [GR_ad_Q],16 // Get Q1 for small path, if expm1 -(p7) fma.s1 FR_q43 = FR_Q4, FR_r, FR_Q3 // If expm1, q43 = Q4 * r + Q3 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p6) fma.s1 FR_p654 = FR_p65, FR_r, FR_P4 // If exp, p654 = p65 * r + P4 - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fma.s1 FR_q987 = FR_q98, FR_r, FR_Q7 // If expm1, q987 = q98 * r + Q7 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p7) fma.s1 FR_q21 = FR_Q2, FR_r, FR_Q1 // If expm1, q21 = Q2 * r + Q1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p6) fma.s1 FR_p210 = FR_p21, FR_rsq, FR_r // If exp, p210 = p21 * r + P0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fma.s1 FR_q6543 = FR_q65, FR_rsq, FR_q43 // If expm1, q6543 = q65*r2+q43 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p6) fma.s1 FR_p6543 = FR_p654, FR_r, FR_P3 // If exp, p6543 = p654 * r + P3 - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fma.s1 FR_q9876543 = FR_q987, FR_r4, FR_q6543 // If expm1, q9876543 = ... - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p6) fma.s1 FR_Y_lo = FR_p6543, FR_r4, FR_p210 // If exp, form Y_lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p7) fma.s1 FR_Y_lo = FR_q9876543, FR_rsq, FR_q21 // If expm1, form Y_lo - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmpy.s0 FR_tmp = FR_tmp, FR_tmp // Dummy op to set inexact - nop.i 999 -} -;; - -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 999 -(p6) fma.s0 f8 = FR_Y_lo, f1, f1 // If exp, result = 1 + Y_lo - nop.i 999 -} -{ .mfb - nop.m 999 -(p7) fma.s0 f8 = FR_Y_lo, FR_rsq, FR_norm_x // If expm1, result = Y_lo*r2+x - br.ret.sptk b0 // Exit for 2^-60 <= |x| < 2^-m - // m=12 for exp, m=7 for expm1 -} -;; - - -EXP_VERY_SMALL: -// -// Here if 0 < |x| < 2^-60 -// If exp, result = 1.0 + x -// If expm1, result = x +x*x/2, but have to check for possible underflow -// - -{ .mfi -(p7) mov GR_exp_underflow = -16381 // Exponent for possible underflow -(p6) fadd.s0 f8 = f1, FR_norm_x // If exp, result = 1+x - nop.i 999 -} -{ .mfi - nop.m 999 -(p7) fmpy.s1 FR_result_lo = FR_half_x, FR_norm_x // If expm1 result_lo = x*x/2 - nop.i 999 -} -;; - -{ .mfi -(p7) cmp.lt.unc p0, p8 = GR_exp_x, GR_exp_underflow // Unsafe if expm1 x small -(p7) mov FR_Y_hi = FR_norm_x // If expm1, Y_hi = x -(p7) cmp.lt p0, p15 = GR_exp_x, GR_exp_underflow // Unsafe if expm1 x small -} -;; - -{ .mfb - nop.m 999 -(p8) fma.s0 f8 = FR_norm_x, f1, FR_result_lo // If expm1, result=x+x*x/2 -(p15) br.ret.sptk b0 // If Safe, exit -} -;; - -// Here if expm1 and 0 < |x| < 2^-16381; may be possible underflow -{ .mfb - nop.m 999 - fma.s0 FR_RESULT = FR_Y_hi, FR_scale, FR_result_lo // Prelim result - br.cond.sptk EXP_POSSIBLE_UNDERFLOW // Branch to unsafe code -} -;; - -EXP_CERTAIN_UNDERFLOW_ZERO: -// Here if x < zero_uflow_x -// For exp, set result to tiny+0.0 and set I, U, and branch to error handling -// For expm1, set result to tiny-1.0 and set I, and exit -{ .mmi - alloc GR_SAVE_PFS = ar.pfs,0,3,4,0 - nop.m 999 - mov GR_one = 1 -} -;; - -{ .mmi - setf.exp FR_small = GR_one // Form small value - nop.m 999 -(p6) mov GR_Parameter_TAG = 13 // Error tag for exp underflow -} -;; - -{ .mfi - nop.m 999 - fmerge.s FR_X = f8,f8 // Save x for error call - nop.i 999 -} -;; - -.pred.rel "mutex",p6,p7 -{ .mfb - nop.m 999 -(p6) fma.s0 FR_RESULT = FR_small, FR_small, f0 // If exp, set I,U, tiny result -(p6) br.cond.sptk __libm_error_region // If exp, go to error handling -} -{ .mfb - nop.m 999 -(p7) fms.s0 f8 = FR_small, FR_small, f1 // If expm1, set I, result -1.0 -(p7) br.ret.sptk b0 // If expm1, exit -} -;; - - -EXP_OVERFLOW: -// Here if x >= min_oflow_x -{ .mmi - alloc GR_SAVE_PFS = ar.pfs,0,3,4,0 - mov GR_huge_exp = 0x1fffe - nop.i 999 -} -{ .mfi - mov GR_huge_signif = -0x1 - nop.f 999 -(p6) mov GR_Parameter_TAG = 12 // Error tag for exp overflow -} -;; - -{ .mmf - setf.exp FR_huge_exp = GR_huge_exp // Create huge value - setf.sig FR_huge_signif = GR_huge_signif // Create huge value - fmerge.s FR_X = f8,f8 // Save x for error call -} -;; - -{ .mfi - nop.m 999 - fmerge.se FR_huge = FR_huge_exp, FR_huge_signif -(p7) mov GR_Parameter_TAG = 39 // Error tag for expm1 overflow -} -;; - -{ .mfb - nop.m 999 - fma.s0 FR_RESULT = FR_huge, FR_huge, FR_huge // Force I, O, and Inf - br.cond.sptk __libm_error_region // Branch to error handling -} -;; - - - -EXP_POSSIBLE_UNDERFLOW: -// Here if exp and zero_uflow_x < x < about -11356 [where k < -16381] -// Here if expm1 and |x| < 2^-16381 -{ .mfi - alloc GR_SAVE_PFS = ar.pfs,0,3,4,0 - fsetc.s2 0x7F,0x41 // Set FTZ and disable traps - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fma.s2 FR_ftz = FR_Y_hi, FR_scale, FR_result_lo // Result with FTZ - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fsetc.s2 0x7F,0x40 // Disable traps (set s2 default) - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p6) fclass.m.unc p11, p0 = FR_ftz, 0x00F // If exp, FTZ result denorm or zero? - nop.i 999 -} -;; - -{ .mfb -(p11) mov GR_Parameter_TAG = 13 // exp underflow - fmerge.s FR_X = f8,f8 // Save x for error call -(p11) br.cond.spnt __libm_error_region // Branch on exp underflow -} -;; - -{ .mfb - nop.m 999 - mov f8 = FR_RESULT // Was safe after all - br.ret.sptk b0 -} -;; - - -EXP_64_SPECIAL: -// Here if x natval, nan, inf, zero -// If x natval, +inf, or if expm1 and x zero, just return x. -// The other cases must be tested for, and results set. -// These cases do not generate exceptions. -{ .mfi - nop.m 999 - fclass.m p8, p0 = f8, 0x0c3 // Is x nan? - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p6) fclass.m.unc p13, p0 = f8, 0x007 // If exp, is x zero? - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p6) fclass.m.unc p11, p0 = f8, 0x022 // If exp, is x -inf? - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fadd.s0 f8 = f8, f1 // If x nan, result quietized x - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p7) fclass.m.unc p10, p0 = f8, 0x022 // If expm1, is x -inf? - nop.i 999 -} -{ .mfi - nop.m 999 -(p13) fadd.s0 f8 = f0, f1 // If exp and x zero, result 1.0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p11) mov f8 = f0 // If exp and x -inf, result 0 - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p10) fsub.s1 f8 = f0, f1 // If expm1, x -inf, result -1.0 - br.ret.sptk b0 // Exit special cases -} -;; - - -EXP_64_UNSUPPORTED: -// Here if x unsupported type -{ .mfb - nop.m 999 - fmpy.s0 f8 = f8, f0 // Return nan - br.ret.sptk b0 -} -;; - -GLOBAL_IEEE754_END(expl) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; -LOCAL_LIBM_END(__libm_error_region#) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_fabs.S b/sysdeps/ia64/fpu/s_fabs.S deleted file mode 100644 index 8bbdf9b084..0000000000 --- a/sysdeps/ia64/fpu/s_fabs.S +++ /dev/null @@ -1,82 +0,0 @@ -.file "fabs.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 02/07/02 Added __libm_fabs entry point to test in case compiler inlines -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// double fabs (double x) -// -// Overview of operation -//============================================================== -// returns absolute value of x - -// floating-point registers used: 1 -// f8, input - -.section .text -.global __libm_fabs# - -.proc __libm_fabs# -__libm_fabs: -.endp __libm_fabs# - -GLOBAL_IEEE754_ENTRY(fabs) - -// set invalid or denormal flags and take fault if -// necessary - -{ .mfi - nop.m 999 - fcmp.eq.unc.s0 p6,p7 = f8,f1 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 - fmerge.s f8 = f0,f8 - br.ret.sptk b0 ;; -} - -GLOBAL_IEEE754_END(fabs) diff --git a/sysdeps/ia64/fpu/s_fabsf.S b/sysdeps/ia64/fpu/s_fabsf.S deleted file mode 100644 index 546865fadc..0000000000 --- a/sysdeps/ia64/fpu/s_fabsf.S +++ /dev/null @@ -1,82 +0,0 @@ -.file "fabsf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 02/07/02 Added __libm_fabsf entry point to test in case compiler inlines -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// float fabsf (float x) -// -// Overview of operation -//============================================================== -// returns absolute value of x - -// floating-point registers used: 1 -// f8, input - -.section .text -.global __libm_fabsf# - -.proc __libm_fabsf# -__libm_fabsf: -.endp __libm_fabsf# - -GLOBAL_IEEE754_ENTRY(fabsf) - -// set invalid or denormal flags and take fault if -// necessary - -{ .mfi - nop.m 999 - fcmp.eq.unc.s0 p6,p7 = f8,f1 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 - fmerge.s f8 = f0,f8 - br.ret.sptk b0 ;; -} - -GLOBAL_IEEE754_END(fabsf) diff --git a/sysdeps/ia64/fpu/s_fabsl.S b/sysdeps/ia64/fpu/s_fabsl.S deleted file mode 100644 index 3794d19a8a..0000000000 --- a/sysdeps/ia64/fpu/s_fabsl.S +++ /dev/null @@ -1,82 +0,0 @@ -.file "fabsl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 02/07/02 Added __libm_fabsl entry point to test in case compiler inlines -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// long double fabsl (long double x) -// -// Overview of operation -//============================================================== -// returns absolute value of x - -// floating-point registers used: 1 -// f8, input - -.section .text -.global __libm_fabsl# - -.proc __libm_fabsl# -__libm_fabsl: -.endp __libm_fabsl# - -GLOBAL_IEEE754_ENTRY(fabsl) - -// set invalid or denormal flags and take fault if -// necessary - -{ .mfi - nop.m 999 - fcmp.eq.unc.s0 p6,p7 = f8,f1 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 - fmerge.s f8 = f0,f8 - br.ret.sptk b0 ;; -} - -GLOBAL_IEEE754_END(fabsl) diff --git a/sysdeps/ia64/fpu/s_fdim.S b/sysdeps/ia64/fpu/s_fdim.S deleted file mode 100644 index a6bdf1f5f8..0000000000 --- a/sysdeps/ia64/fpu/s_fdim.S +++ /dev/null @@ -1,227 +0,0 @@ -.file "fdim.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 06/08/01 Initial version -// 08/23/01 Corrected error tag number -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/28/03 Improved performance -// -// API -//============================================================== -// double fdim( double x, double y ); -// input floating point f8, f9 -// output floating point f8 -// -// -// Overview of operation -//============================================================== -// fdim determines the positive difference between the arguments -// Result = x - y if x > y -// = +0 if x <= y -// -// Error support is called if x-y overflows for x > y -// - -// Registers used -//============================================================== -// General purpose registers: r14, r32 - r39 - -rExpBig = r14 - -// r36-39 parameters for libm_error_support -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_SAVE_PFS = r35 - -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -GR_Parameter_TAG = r39 - -// Floating-point registers: f8 - f12 - -f_tmp_result = f10 -fBig = f11 -fNormX = f12 - -// Predicate registers: p6 - p10 - - -.section .text -GLOBAL_LIBM_ENTRY(fdim) - -{ .mfi - mov rExpBig = 0x103ff // Exponent to indicate overflow - fcmp.le.s1 p6,p7 = f8, f9 // Is x <= y? - nop.i 0 -} -{ .mfi - nop.m 0 - fnorm.s1 fNormX = f8 // Save x - nop.i 0 -} -;; - -{ .mfi - setf.exp fBig = rExpBig // Constant to test for overflow - fcmp.eq.s0 p8,p0 = f8, f9 // Dummy op to set Denormal or Invalid - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fclass.m p9,p10 = f8, 0x1e3 // Test for x natval, nan, inf - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fmerge.s f8 = f0, f0 // Result is +0 if x <= y - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fms.d.s0 f8 = f8, f1, f9 // Result is x - y if x > y - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p10) fclass.m p9,p10 = f9, 0x1e3 // Test for y natval, nan, inf - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p10) fcmp.ge.s1 p8,p0 = f8, fBig // Test result for overflow - nop.i 0 -} -;; - -{ .mbb -(p9) cmp.ne p8,p0 = r0,r0 // Clear p8 if x or y natval,nan,inf -(p8) br.cond.spnt FDIM_OVERFLOW // Branch if result overflows - br.ret.sptk b0 // Normal return -} -;; - - -// Here if result will overflow -FDIM_OVERFLOW: -{ .mfi - alloc r32=ar.pfs,2,2,4,0 - fms.d.s0 f_tmp_result = f8,f1,f9 // Normalize result force overflow - nop.i 0 -} -{ .mfb - mov GR_Parameter_TAG = 196 // Error code - nop.f 0 - br.cond.sptk __libm_error_region // Branch to error code -} -;; - -GLOBAL_LIBM_END(fdim) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -// Call error support to report possible range error -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfd [GR_Parameter_Y] = f9,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfd [GR_Parameter_X] = fNormX // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = f_tmp_result // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_fdimf.S b/sysdeps/ia64/fpu/s_fdimf.S deleted file mode 100644 index 10bc5a619a..0000000000 --- a/sysdeps/ia64/fpu/s_fdimf.S +++ /dev/null @@ -1,227 +0,0 @@ -.file "fdimf.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 06/08/01 Initial version -// 08/23/01 Corrected error tag number -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/28/03 Improved performance; fixed parameters for call to error routine -// -// API -//============================================================== -// float fdimf( float x, float y ); -// input floating point f8, f9 -// output floating point f8 -// -// -// Overview of operation -//============================================================== -// fdimf determines the positive difference between the arguments -// Result = x - y if x > y -// = +0 if x <= y -// -// Error support is called if x-y overflows for x > y -// - -// Registers used -//============================================================== -// General purpose registers: r14, r32 - r39 - -rExpBig = r14 - -// r36-39 parameters for libm_error_support -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_SAVE_PFS = r35 - -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -GR_Parameter_TAG = r39 - -// Floating-point registers: f8 - f12 - -f_tmp_result = f10 -fBig = f11 -fNormX = f12 - -// Predicate registers: p6 - p10 - - -.section .text -GLOBAL_LIBM_ENTRY(fdimf) - -{ .mfi - mov rExpBig = 0x1007f // Exponent to indicate overflow - fcmp.le.s1 p6,p7 = f8, f9 // Is x <= y? - nop.i 0 -} -{ .mfi - nop.m 0 - fnorm.s1 fNormX = f8 // Save x - nop.i 0 -} -;; - -{ .mfi - setf.exp fBig = rExpBig // Constant to test for overflow - fcmp.eq.s0 p8,p0 = f8, f9 // Dummy op to set Denormal or Invalid - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fclass.m p9,p10 = f8, 0x1e3 // Test for x natval, nan, inf - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fmerge.s f8 = f0, f0 // Result is +0 if x <= y - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fms.s.s0 f8 = f8, f1, f9 // Result is x - y if x > y - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p10) fclass.m p9,p10 = f9, 0x1e3 // Test for y natval, nan, inf - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p10) fcmp.ge.s1 p8,p0 = f8, fBig // Test result for overflow - nop.i 0 -} -;; - -{ .mbb -(p9) cmp.ne p8,p0 = r0,r0 // Clear p8 if x or y natval,nan,inf -(p8) br.cond.spnt FDIM_OVERFLOW // Branch if result overflows - br.ret.sptk b0 // Normal return -} -;; - - -// Here if result will overflow -FDIM_OVERFLOW: -{ .mfi - alloc r32=ar.pfs,2,2,4,0 - fms.s.s0 f_tmp_result = f8,f1,f9 // Normalize result force overflow - nop.i 0 -} -{ .mfb - mov GR_Parameter_TAG = 197 // Error code - nop.f 0 - br.cond.sptk __libm_error_region // Branch to error code -} -;; - -GLOBAL_LIBM_END(fdimf) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -// Call error support to report possible range error -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfs [GR_Parameter_Y] = f9,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfs [GR_Parameter_X] = fNormX // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = f_tmp_result // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_fdiml.S b/sysdeps/ia64/fpu/s_fdiml.S deleted file mode 100644 index a5c7396bbd..0000000000 --- a/sysdeps/ia64/fpu/s_fdiml.S +++ /dev/null @@ -1,227 +0,0 @@ -.file "fdiml.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 06/08/01 Initial version -// 08/23/01 Corrected error tag number -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/28/03 Improved performance; fixed parameters for call to error routine -// -// API -//============================================================== -// long double fdiml( long double x, long double y ); -// input floating point f8, f9 -// output floating point f8 -// -// -// Overview of operation -//============================================================== -// fdiml determines the positive difference between the arguments -// Result = x - y if x > y -// = +0 if x <= y -// -// Error support is called if x-y overflows for x > y -// - -// Registers used -//============================================================== -// General purpose registers: r14, r32 - r39 - -rExpBig = r14 - -// r36-39 parameters for libm_error_support -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_SAVE_PFS = r35 - -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -GR_Parameter_TAG = r39 - -// Floating-point registers: f8 - f12 - -f_tmp_result = f10 -fBig = f11 -fNormX = f12 - -// Predicate registers: p6 - p10 - - -.section .text -GLOBAL_LIBM_ENTRY(fdiml) - -{ .mfi - mov rExpBig = 0x13fff // Exponent to indicate overflow - fcmp.le.s1 p6,p7 = f8, f9 // Is x <= y? - nop.i 0 -} -{ .mfi - nop.m 0 - fnorm.s1 fNormX = f8 // Save x - nop.i 0 -} -;; - -{ .mfi - setf.exp fBig = rExpBig // Constant to test for overflow - fcmp.eq.s0 p8,p0 = f8, f9 // Dummy op to set Denormal or Invalid - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fclass.m p9,p10 = f8, 0x1e3 // Test for x natval, nan, inf - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fmerge.s f8 = f0, f0 // Result is +0 if x <= y - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fms.s0 f8 = f8, f1, f9 // Result is x - y if x > y - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p10) fclass.m p9,p10 = f9, 0x1e3 // Test for y natval, nan, inf - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p10) fcmp.ge.s1 p8,p0 = f8, fBig // Test result for overflow - nop.i 0 -} -;; - -{ .mbb -(p9) cmp.ne p8,p0 = r0,r0 // Clear p8 if x or y natval,nan,inf -(p8) br.cond.spnt FDIM_OVERFLOW // Branch if result overflows - br.ret.sptk b0 // Normal return -} -;; - - -// Here if result will overflow -FDIM_OVERFLOW: -{ .mfi - alloc r32=ar.pfs,2,2,4,0 - fms.s0 f_tmp_result = f8,f1,f9 // Normalize result force overflow - nop.i 0 -} -{ .mfb - mov GR_Parameter_TAG = 195 // Error code - nop.f 0 - br.cond.sptk __libm_error_region // Branch to error code -} -;; - -GLOBAL_LIBM_END(fdiml) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -// Call error support to report possible range error -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfe [GR_Parameter_Y] = f9,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfe [GR_Parameter_X] = fNormX // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfe [GR_Parameter_Y] = f_tmp_result // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_finite.S b/sysdeps/ia64/fpu/s_finite.S deleted file mode 100644 index af69e68526..0000000000 --- a/sysdeps/ia64/fpu/s_finite.S +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#undef ret - -ENTRY (__finite) -{ -.mfi - fclass.m p6, p7 = farg0, @nat | @qnan | @snan | @inf - ;; -} -{ -.mib -(p6) mov ret0 = 0 -(p7) mov ret0 = 1 - br.ret.sptk.many rp -} -END (__finite) - -strong_alias (__finite, __finitef) -strong_alias (__finite, __finitel) - -weak_alias (__finite, finite) -weak_alias (__finitef, finitef) -weak_alias (__finitel, finitel) - -hidden_def (__finite) -hidden_def (__finitef) -hidden_def (__finitel) diff --git a/sysdeps/ia64/fpu/s_finitef.S b/sysdeps/ia64/fpu/s_finitef.S deleted file mode 100644 index cf9b5ce8ba..0000000000 --- a/sysdeps/ia64/fpu/s_finitef.S +++ /dev/null @@ -1 +0,0 @@ -/* __finitef is in s_finite.S. */ diff --git a/sysdeps/ia64/fpu/s_finitel.S b/sysdeps/ia64/fpu/s_finitel.S deleted file mode 100644 index 362b186429..0000000000 --- a/sysdeps/ia64/fpu/s_finitel.S +++ /dev/null @@ -1 +0,0 @@ -/* __finitel is in s_finite.S. */ diff --git a/sysdeps/ia64/fpu/s_floor.S b/sysdeps/ia64/fpu/s_floor.S deleted file mode 100644 index 9ed9d6dcdb..0000000000 --- a/sysdeps/ia64/fpu/s_floor.S +++ /dev/null @@ -1,216 +0,0 @@ -.file "floor.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 03/22/00 Updated to improve performance -// 06/13/00 Improved speed, fixed setting of inexact flag -// 06/27/00 Eliminated incorrect invalid flag setting -// 02/07/01 Corrected sign of zero result in round to -inf mode -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/28/03 Improved performance -//============================================================== - -// API -//============================================================== -// double floor(double x) -//============================================================== - -// general input registers: -// r14 - r18 - -rSignexp = r14 -rExp = r15 -rExpMask = r16 -rBigexp = r17 -rM1 = r18 - -// floating-point registers: -// f8 - f13 - -fXInt = f9 -fNormX = f10 -fTmp = f11 -fAdj = f12 -fPreResult = f13 - -// predicate registers used: -// p6 - p9 - -// Overview of operation -//============================================================== -// double floor(double x) -// Return an integer value (represented as a double) that is the largest -// value not greater than x -// This is x rounded toward -infinity to an integral value. -// Inexact is set if x != floor(x) -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - - -.section .text -GLOBAL_IEEE754_ENTRY(floor) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fclass.m p7,p0 = f8, 0x0b // Test x unorm - addl rBigexp = 0x10033, r0 // Set exponent at which is integer -} -{ .mfi - mov rM1 = -1 // Set all ones - fcvt.fx.trunc.s1 fXInt = f8 // Convert to int in significand - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - nop.m 0 - fcmp.lt.s1 p8,p9 = f8, f0 // Test x < 0 - nop.i 0 -} -{ .mfb - setf.sig fTmp = rM1 // Make const for setting inexact - fnorm.s1 fNormX = f8 // Normalize input -(p7) br.cond.spnt FLOOR_UNORM // Branch if x unorm -} -;; - -FLOOR_COMMON: -// Return here from FLOOR_UNORM -{ .mfi - nop.m 0 - fclass.m p6,p0 = f8, 0x1e7 // Test x natval, nan, inf, 0 - nop.i 0 -} -;; - -.pred.rel "mutex",p8,p9 -{ .mfi - nop.m 0 -(p8) fnma.s1 fAdj = f1, f1, f0 // If x < 0, adjustment is -1 - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 fAdj = f0, f0, f0 // If x > 0, adjustment is 0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.xf fPreResult = fXInt // trunc(x) - nop.i 0 -} -{ .mfb - nop.m 0 -(p6) fma.d.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf, 0 -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf, 0 -} -;; - -{ .mmi - and rExp = rSignexp, rExpMask // Get biased exponent -;; - cmp.ge p7,p6 = rExp, rBigexp // Is |x| >= 2^52? - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fma.d.s0 f8 = fPreResult, f1, fAdj // Result if !int, |x| < 2^52 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.d.s0 f8 = fNormX, f1, f0 // Result, if |x| >= 2^52 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fcmp.eq.unc.s1 p8, p9 = fPreResult, fNormX // Is trunc(x) = x ? - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p9) fmpy.s0 fTmp = fTmp, fTmp // Dummy to set inexact - nop.i 0 -} -{ .mfb - nop.m 0 -(p8) fma.d.s0 f8 = fNormX, f1, f0 // If x int, result normalized x - br.ret.sptk b0 // Exit main path, 0 < |x| < 2^52 -} -;; - - -FLOOR_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk FLOOR_COMMON // Return to main path -} -;; - -GLOBAL_IEEE754_END(floor) diff --git a/sysdeps/ia64/fpu/s_floorf.S b/sysdeps/ia64/fpu/s_floorf.S deleted file mode 100644 index a3f2095931..0000000000 --- a/sysdeps/ia64/fpu/s_floorf.S +++ /dev/null @@ -1,215 +0,0 @@ -.file "floorf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 06/13/00 Improved speed -// 06/27/00 Eliminated incorrect invalid flag setting -// 02/07/01 Corrected sign of zero result in round to -inf mode -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/28/03 Improved performance -//============================================================== - -// API -//============================================================== -// float floorf(float x) -//============================================================== - -// general input registers: -// r14 - r18 - -rSignexp = r14 -rExp = r15 -rExpMask = r16 -rBigexp = r17 -rM1 = r18 - -// floating-point registers: -// f8 - f13 - -fXInt = f9 -fNormX = f10 -fTmp = f11 -fAdj = f12 -fPreResult = f13 - -// predicate registers used: -// p6 - p9 - -// Overview of operation -//============================================================== -// float floorf(float x) -// Return an integer value (represented as a float) that is the largest -// value not greater than x -// This is x rounded toward -infinity to an integral value. -// Inexact is set if x != floorf(x) -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - - -.section .text -GLOBAL_IEEE754_ENTRY(floorf) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fclass.m p7,p0 = f8, 0x0b // Test x unorm - addl rBigexp = 0x10016, r0 // Set exponent at which is integer -} -{ .mfi - mov rM1 = -1 // Set all ones - fcvt.fx.trunc.s1 fXInt = f8 // Convert to int in significand - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - nop.m 0 - fcmp.lt.s1 p8,p9 = f8, f0 // Test x < 0 - nop.i 0 -} -{ .mfb - setf.sig fTmp = rM1 // Make const for setting inexact - fnorm.s1 fNormX = f8 // Normalize input -(p7) br.cond.spnt FLOOR_UNORM // Branch if x unorm -} -;; - -FLOOR_COMMON: -// Return here from FLOOR_UNORM -{ .mfi - nop.m 0 - fclass.m p6,p0 = f8, 0x1e7 // Test x natval, nan, inf, 0 - nop.i 0 -} -;; - -.pred.rel "mutex",p8,p9 -{ .mfi - nop.m 0 -(p8) fnma.s1 fAdj = f1, f1, f0 // If x < 0, adjustment is -1 - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 fAdj = f0, f0, f0 // If x > 0, adjustment is 0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.xf fPreResult = fXInt // trunc(x) - nop.i 0 -} -{ .mfb - nop.m 0 -(p6) fma.s.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf, 0 -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf, 0 -} -;; - -{ .mmi - and rExp = rSignexp, rExpMask // Get biased exponent -;; - cmp.ge p7,p6 = rExp, rBigexp // Is |x| >= 2^23? - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fma.s.s0 f8 = fPreResult, f1, fAdj // Result if !int, |x| < 2^23 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.s.s0 f8 = fNormX, f1, f0 // Result, if |x| >= 2^23 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fcmp.eq.unc.s1 p8, p9 = fPreResult, fNormX // Is trunc(x) = x ? - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p9) fmpy.s0 fTmp = fTmp, fTmp // Dummy to set inexact - nop.i 0 -} -{ .mfb - nop.m 0 -(p8) fma.s.s0 f8 = fNormX, f1, f0 // If x int, result normalized x - br.ret.sptk b0 // Exit main path, 0 < |x| < 2^23 -} -;; - - -FLOOR_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk FLOOR_COMMON // Return to main path -} -;; - -GLOBAL_IEEE754_END(floorf) diff --git a/sysdeps/ia64/fpu/s_floorl.S b/sysdeps/ia64/fpu/s_floorl.S deleted file mode 100644 index 345c4f30dd..0000000000 --- a/sysdeps/ia64/fpu/s_floorl.S +++ /dev/null @@ -1,215 +0,0 @@ -.file "floorl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 06/13/00 Improved speed -// 06/27/00 Eliminated incorrect invalid flag setting -// 02/07/01 Corrected sign of zero result in round to -inf mode -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/28/03 Improved performance -//============================================================== - -// API -//============================================================== -// long double floorl(long double x) -//============================================================== - -// general input registers: -// r14 - r18 - -rSignexp = r14 -rExp = r15 -rExpMask = r16 -rBigexp = r17 -rM1 = r18 - -// floating-point registers: -// f8 - f13 - -fXInt = f9 -fNormX = f10 -fTmp = f11 -fAdj = f12 -fPreResult = f13 - -// predicate registers used: -// p6 - p9 - -// Overview of operation -//============================================================== -// long double floorl(long double x) -// Return an integer value (represented as a long double) that is the largest -// value not greater than x -// This is x rounded toward -infinity to an integral value. -// Inexact is set if x != floorl(x) -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - - -.section .text -GLOBAL_IEEE754_ENTRY(floorl) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fclass.m p7,p0 = f8, 0x0b // Test x unorm - addl rBigexp = 0x1003e, r0 // Set exponent at which is integer -} -{ .mfi - mov rM1 = -1 // Set all ones - fcvt.fx.trunc.s1 fXInt = f8 // Convert to int in significand - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - nop.m 0 - fcmp.lt.s1 p8,p9 = f8, f0 // Test x < 0 - nop.i 0 -} -{ .mfb - setf.sig fTmp = rM1 // Make const for setting inexact - fnorm.s1 fNormX = f8 // Normalize input -(p7) br.cond.spnt FLOOR_UNORM // Branch if x unorm -} -;; - -FLOOR_COMMON: -// Return here from FLOOR_UNORM -{ .mfi - nop.m 0 - fclass.m p6,p0 = f8, 0x1e7 // Test x natval, nan, inf, 0 - nop.i 0 -} -;; - -.pred.rel "mutex",p8,p9 -{ .mfi - nop.m 0 -(p8) fnma.s1 fAdj = f1, f1, f0 // If x < 0, adjustment is -1 - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 fAdj = f0, f0, f0 // If x > 0, adjustment is 0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.xf fPreResult = fXInt // trunc(x) - nop.i 0 -} -{ .mfb - nop.m 0 -(p6) fma.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf, 0 -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf, 0 -} -;; - -{ .mmi - and rExp = rSignexp, rExpMask // Get biased exponent -;; - cmp.ge p7,p6 = rExp, rBigexp // Is |x| >= 2^63? - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fma.s0 f8 = fPreResult, f1, fAdj // Result if !int, |x| < 2^63 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.s0 f8 = fNormX, f1, f0 // Result, if |x| >= 2^63 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p6) fcmp.eq.unc.s1 p8, p9 = fPreResult, fNormX // Is trunc(x) = x ? - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p9) fmpy.s0 fTmp = fTmp, fTmp // Dummy to set inexact - nop.i 0 -} -{ .mfb - nop.m 0 -(p8) fma.s0 f8 = fNormX, f1, f0 // If x int, result normalized x - br.ret.sptk b0 // Exit main path, 0 < |x| < 2^63 -} -;; - - -FLOOR_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk FLOOR_COMMON // Return to main path -} -;; - -GLOBAL_IEEE754_END(floorl) diff --git a/sysdeps/ia64/fpu/s_fma.S b/sysdeps/ia64/fpu/s_fma.S deleted file mode 100644 index 556f82a0d0..0000000000 --- a/sysdeps/ia64/fpu/s_fma.S +++ /dev/null @@ -1,71 +0,0 @@ -.file "fma.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 06/07/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// double fma (double x, double y, double z) -// -// Overview of operation -//============================================================== -// returns x * y + z with one rounding error - -// All the special cases are handled by the fma instruction itself - -// floating-point registers used: 3 -// f8, input x, output -// f9, input y -// f10, input z - -.section .text -GLOBAL_LIBM_ENTRY(fma) - -{ .mfb - nop.m 999 - fma.d.s0 f8 = f8, f9, f10 // Result = x * y + z - br.ret.sptk b0 -} -;; - -GLOBAL_LIBM_END(fma) diff --git a/sysdeps/ia64/fpu/s_fmaf.S b/sysdeps/ia64/fpu/s_fmaf.S deleted file mode 100644 index 132467593a..0000000000 --- a/sysdeps/ia64/fpu/s_fmaf.S +++ /dev/null @@ -1,71 +0,0 @@ -.file "fmaf.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 06/07/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// float fmaf (float x, float y, float z) -// -// Overview of operation -//============================================================== -// returns x * y + z with one rounding error - -// All the special cases are handled by the fma instruction itself - -// floating-point registers used: 3 -// f8, input x, output -// f9, input y -// f10, input z - -.section .text -GLOBAL_LIBM_ENTRY(fmaf) - -{ .mfb - nop.m 999 - fma.s.s0 f8 = f8, f9, f10 // Result = x * y + z - br.ret.sptk b0 -} -;; - -GLOBAL_LIBM_END(fmaf) diff --git a/sysdeps/ia64/fpu/s_fmal.S b/sysdeps/ia64/fpu/s_fmal.S deleted file mode 100644 index 979fa9fb16..0000000000 --- a/sysdeps/ia64/fpu/s_fmal.S +++ /dev/null @@ -1,71 +0,0 @@ -.file "fmal.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 06/07/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// long double fmal (long double x, long double y, long double z) -// -// Overview of operation -//============================================================== -// returns x * y + z with one rounding error - -// All the special cases are handled by the fma instruction itself - -// floating-point registers used: 3 -// f8, input x, output -// f9, input y -// f10, input z - -.section .text -GLOBAL_LIBM_ENTRY(fmal) - -{ .mfb - nop.m 999 - fma.s0 f8 = f8, f9, f10 // Result = x * y + z - br.ret.sptk b0 -} -;; - -GLOBAL_LIBM_END(fmal) diff --git a/sysdeps/ia64/fpu/s_fmax.S b/sysdeps/ia64/fpu/s_fmax.S deleted file mode 100644 index bf0897457b..0000000000 --- a/sysdeps/ia64/fpu/s_fmax.S +++ /dev/null @@ -1,114 +0,0 @@ -.file "fmax.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 05/31/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// double fmax (double x, double y) -// -// Overview of operation -//============================================================== -// returns the algebraic maximum of 2 input values -// -// Special cases: -// fmax(x, nan) returns x if x is numeric // Must special case this one -// fmax(nan, y) returns y if y is numeric -// fmax(nan1, nan2) returns quietized nan2 -// fmax(+0,+0) returns +0 -// fmax(-0,+0) returns +0 -// fmax(-0,-0) returns -0 -// fmax(+0,-0) returns +0 // Must special case this one -// -// SNaN causes invalid to be set - -// floating-point registers used: 2 -// f8, input x, output -// f9, input y - -.section .text -GLOBAL_LIBM_ENTRY(fmax) - -{ .mfi - nop.m 999 - fcmp.unord.s0 p6,p7 = f8, f9 // Is x or y a nan? Raise invalid or denormal - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p7) fclass.m.unc p8,p9 = f9, 0x06 // If no nan, is y=-0? - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p6) fclass.m.unc p10,p0 = f8, 0xc3 // Is x nan? - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fmax.s0 f8 = f8, f9 // Normal case, no nan and y not -0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fmax.s0 f8 = f9, f8 // No nan and y -0 - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p10) fmerge.s f8 = f9, f9 // If x nan, return y, else do nothing (returns x) - br.ret.sptk b0 -} -;; - -GLOBAL_LIBM_END(fmax) diff --git a/sysdeps/ia64/fpu/s_fmaxf.S b/sysdeps/ia64/fpu/s_fmaxf.S deleted file mode 100644 index 30a78c708b..0000000000 --- a/sysdeps/ia64/fpu/s_fmaxf.S +++ /dev/null @@ -1,114 +0,0 @@ -.file "fmaxf.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 05/31/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// float fmaxf (float x, float y) -// -// Overview of operation -//============================================================== -// returns the algebraic maximum of 2 input values -// -// Special cases: -// fmaxf(x, nan) returns x if x is numeric // Must special case this one -// fmaxf(nan, y) returns y if y is numeric -// fmaxf(nan1, nan2) returns quietized nan2 -// fmaxf(+0,+0) returns +0 -// fmaxf(-0,+0) returns +0 -// fmaxf(-0,-0) returns -0 -// fmaxf(+0,-0) returns +0 // Must special case this one -// -// SNaN causes invalid to be set - -// floating-point registers used: 2 -// f8, input x, output -// f9, input y - -.section .text -GLOBAL_LIBM_ENTRY(fmaxf) - -{ .mfi - nop.m 999 - fcmp.unord.s0 p6,p7 = f8, f9 // Is x or y a nan? Raise invalid or denormal - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p7) fclass.m.unc p8,p9 = f9, 0x06 // If no nan, is y=-0? - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p6) fclass.m.unc p10,p0 = f8, 0xc3 // Is x nan? - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fmax.s0 f8 = f8, f9 // Normal case, no nan and y not -0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fmax.s0 f8 = f9, f8 // No nan and y -0 - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p10) fmerge.s f8 = f9, f9 // If x nan, return y, else do nothing (returns x) - br.ret.sptk b0 -} -;; - -GLOBAL_LIBM_END(fmaxf) diff --git a/sysdeps/ia64/fpu/s_fmaxl.S b/sysdeps/ia64/fpu/s_fmaxl.S deleted file mode 100644 index a575cf00eb..0000000000 --- a/sysdeps/ia64/fpu/s_fmaxl.S +++ /dev/null @@ -1,114 +0,0 @@ -.file "fmaxl.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 05/31/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// long double fmaxl (long double x, long double y) -// -// Overview of operation -//============================================================== -// returns the algebraic maximum of 2 input values -// -// Special cases: -// fmaxl(x, nan) returns x if x is numeric // Must special case this one -// fmaxl(nan, y) returns y if y is numeric -// fmaxl(nan1, nan2) returns quietized nan2 -// fmaxl(+0,+0) returns +0 -// fmaxl(-0,+0) returns +0 -// fmaxl(-0,-0) returns -0 -// fmaxl(+0,-0) returns +0 // Must special case this one -// -// SNaN causes invalid to be set - -// floating-point registers used: 2 -// f8, input x, output -// f9, input y - -.section .text -GLOBAL_LIBM_ENTRY(fmaxl) - -{ .mfi - nop.m 999 - fcmp.unord.s0 p6,p7 = f8, f9 // Is x or y a nan? Raise invalid or denormal - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p7) fclass.m.unc p8,p9 = f9, 0x06 // If no nan, is y=-0? - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p6) fclass.m.unc p10,p0 = f8, 0xc3 // Is x nan? - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fmax.s0 f8 = f8, f9 // Normal case, no nan and y not -0 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fmax.s0 f8 = f9, f8 // No nan and y -0 - nop.i 999 -} -;; - -{ .mfb - nop.m 999 -(p10) fmerge.s f8 = f9, f9 // If x nan, return y, else do nothing (returns x) - br.ret.sptk b0 -} -;; - -GLOBAL_LIBM_END(fmaxl) diff --git a/sysdeps/ia64/fpu/s_fpclassify.S b/sysdeps/ia64/fpu/s_fpclassify.S deleted file mode 100644 index 44fdf88696..0000000000 --- a/sysdeps/ia64/fpu/s_fpclassify.S +++ /dev/null @@ -1,61 +0,0 @@ -/* Return classification value corresponding to argument. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#undef ret - -ENTRY (__fpclassify) -{ -.mfi - fclass.m p6, p7 = farg0, @nat | @qnan | @snan - ;; -} -{ -.mfb -(p6) mov ret0 = 0 -(p7) fclass.m p7, p8 = farg0, @inf -(p6) br.ret.sptk.many rp - ;; -} -{ -.mfb -(p7) mov ret0 = 1 -(p8) fclass.m p8, p6 = farg0, @zero -(p7) br.ret.sptk.many rp - ;; -} -{ -.mfb -(p8) mov ret0 = 2 -(p6) fclass.m p6, p7 = farg0, @unorm -(p8) br.ret.sptk.many rp - ;; -} -{ - .pred.rel.mutex p6, p7 -(p6) mov ret0 = 3 -(p7) mov ret0 = 4 - br.ret.sptk.many rp -} -END (__fpclassify) - -strong_alias (__fpclassify, __fpclassifyf) -strong_alias (__fpclassify, __fpclassifyl) -libm_hidden_def (__fpclassify) -libm_hidden_def (__fpclassifyf) -libm_hidden_def (__fpclassifyl) diff --git a/sysdeps/ia64/fpu/s_fpclassifyf.S b/sysdeps/ia64/fpu/s_fpclassifyf.S deleted file mode 100644 index cf31fca7ad..0000000000 --- a/sysdeps/ia64/fpu/s_fpclassifyf.S +++ /dev/null @@ -1 +0,0 @@ -/* __fpclassifyf is in s_fpclassify.S. */ diff --git a/sysdeps/ia64/fpu/s_fpclassifyl.S b/sysdeps/ia64/fpu/s_fpclassifyl.S deleted file mode 100644 index 621e3c53a4..0000000000 --- a/sysdeps/ia64/fpu/s_fpclassifyl.S +++ /dev/null @@ -1 +0,0 @@ -/* __fpclassifyl is in s_fpclassify.S. */ diff --git a/sysdeps/ia64/fpu/s_frexp.c b/sysdeps/ia64/fpu/s_frexp.c deleted file mode 100644 index 95421eafdd..0000000000 --- a/sysdeps/ia64/fpu/s_frexp.c +++ /dev/null @@ -1,67 +0,0 @@ -/* file: frexp.c */ - - -// Copyright (c) 2000-2002, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// -// History -//===================================================================== -// 2/02/00 Initial version -// 1/23/02 Calls kernel with parameter to specify 32- or 64-bit int -// -//===================================================================== - -#include "libm_support.h" - -double __libm_frexp(double, int*, int); - -double frexp(double x, int *y) -{ - -#ifdef SIZE_INT_64 - return( __libm_frexp(x, y, 1) ); - -#else - -#ifdef SIZE_INT_32 - return( __libm_frexp(x, y, 0) ); -#endif - -#endif - -} diff --git a/sysdeps/ia64/fpu/s_frexpf.c b/sysdeps/ia64/fpu/s_frexpf.c deleted file mode 100644 index 03290b2846..0000000000 --- a/sysdeps/ia64/fpu/s_frexpf.c +++ /dev/null @@ -1,67 +0,0 @@ -/* file: frexpf.c */ - - -// Copyright (c) 2000-2002, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// -// History -//===================================================================== -// 2/02/00 Initial version -// 1/23/02 Calls kernel with parameter to specify 32- or 64-bit int -// -//===================================================================== - -#include "libm_support.h" - -float __libm_frexpf(float, int*, int); - -float frexpf(float x, int *y) -{ - -#ifdef SIZE_INT_64 - return( __libm_frexpf(x, y, 1) ); - -#else - -#ifdef SIZE_INT_32 - return( __libm_frexpf(x, y, 0) ); -#endif - -#endif - -} diff --git a/sysdeps/ia64/fpu/s_frexpl.c b/sysdeps/ia64/fpu/s_frexpl.c deleted file mode 100644 index f999e20361..0000000000 --- a/sysdeps/ia64/fpu/s_frexpl.c +++ /dev/null @@ -1,67 +0,0 @@ -/* file: frexpl.c */ - - -// Copyright (c) 2000-2002, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// -// History -//===================================================================== -// 2/02/00 Initial version -// 1/23/02 Calls kernel with parameter to specify 32- or 64-bit int -// -//===================================================================== - -#include "libm_support.h" - -long double __libm_frexpl(long double, int*, int); - -long double frexpl(long double x, int *y) -{ - -#ifdef SIZE_INT_64 - return( __libm_frexpl(x, y, 1) ); - -#else - -#ifdef SIZE_INT_32 - return( __libm_frexpl(x, y, 0) ); -#endif - -#endif - -} diff --git a/sysdeps/ia64/fpu/s_ilogb.S b/sysdeps/ia64/fpu/s_ilogb.S deleted file mode 100644 index 0102370cd6..0000000000 --- a/sysdeps/ia64/fpu/s_ilogb.S +++ /dev/null @@ -1,268 +0,0 @@ -.file "ilogb.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/03/00 Initial version -// 05/26/00 Fix bug when x a double-extended denormal; -// if x=0 call error routine, per C9X -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 01/20/01 Fixed result for x=0, corrected error tag value. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/20/03 Improved performance -// -// API -//============================================================== -// int ilogb( double x ); -// -// Overview of operation -//============================================================== -// The ilogb function extracts the exponent of x as an integer -// and returns it in r8 -// -// ilogb is similar to logb but differs in the following ways: -// +-inf -// ilogb: returns INT_MAX -// logb: returns +inf -// Nan returns FP_LOGBNAN (which is either INT_MAX or INT_MIN) -// ilogb: returns INT_MAX (7fffffff) -// logb: returns QNAN (quietized SNAN) -// 0 returns FP_ILOGB0 (which is either INT_MIN or -INT_MAX) -// ilogb: returns -INT_MAX (80000001) -// logb: returns -inf, raises the divide-by-zero exception, -// and calls libm_error_support to set domain error -// -// Registers used -//============================================================== -// general registers used: -// r26 -> r39 -// r36 -> r39 used as parameters to error path -// -// predicate registers used: -// p6 -> p10 -// floating-point registers used: -// f9, f10, f11 -// f8, input - -rExpBias = r26 -rExpMask = r27 -rSignexp_x = r28 -rExp_x = r29 -rIntMax = r30 -rExp_2to64 = r31 - -GR_SAVE_PFS = r32 -rTrialResult = r33 -GR_SAVE_B0 = r34 -GR_SAVE_GP = r35 - -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -GR_Parameter_TAG = r39 - -fTmp = f9 -fNorm_x = f10 -f2to64 = f11 - -.section .text -GLOBAL_LIBM_ENTRY(ilogb) - -// X NORMAL -// TrueExp_x = exp(f8) - 0xffff -// r8 = TrueExp_x -{ .mfi - getf.exp rSignexp_x = f8 - fclass.m p8,p0 = f8, 0x0b // Test for x unorm - mov rExpBias = 0xffff // Exponent bias -} -{ .mfi - nop.m 0 - fnorm.s1 fNorm_x = f8 - mov rExpMask = 0x1ffff // Exponent mask -} -;; - -// Form signexp of 2^64 in case need to scale denormal -{ .mfb - mov rExp_2to64 = 0x1003f - fclass.m p6,p9 = f8, 0x1e3 // Test x natval, nan, inf -(p8) br.cond.spnt ILOGB_DENORM // Branch if x unorm -} -;; - -ILOGB_COMMON: -// Return here from ILOGB_DENORM -{ .mfi - and rExp_x = rSignexp_x, rExpMask // Get biased exponent - fclass.m p7,p10 = f8, 0x07 // Test x zero - nop.i 0 -} -{ .mlx - nop.m 0 - movl rIntMax = 0x000000007fffffff // Form INT_MAX -} -;; - -.pred.rel "mutex",p6,p9 -{ .mfi -(p9) sub r8 = rExp_x, rExpBias // Get true exponent for normal path -(p6) fma.s0 fTmp = f8, f8, f0 // Dummy to set Invalid flag -(p6) mov r8 = rIntMax // If nan, inf, return INT_MAX -} -{ .mbb - nop.m 0 -(p7) br.cond.spnt ILOGB_ZERO // Branch if x zero -(p10) br.ret.sptk b0 // Exit if x not zero -} -;; - - -ILOGB_DENORM: -// Form 2^64 in case need to scale denormal -// Check to see if double-extended denormal -{ .mfi - setf.exp f2to64 = rExp_2to64 - fclass.m p8,p0 = fNorm_x, 0x0b - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - nop.i 0 -} -;; - -// If double-extended denormal add 64 to exponent bias for scaling -// If double-extended denormal form x * 2^64 which is normal -{ .mfi -(p8) add rExpBias = 64, rExpBias -(p8) fmpy.s1 fNorm_x = fNorm_x, f2to64 - nop.i 0 -} -;; - -// Logic is the same as normal path but use normalized input -{ .mib - getf.exp rSignexp_x = fNorm_x - nop.i 0 - br.cond.sptk ILOGB_COMMON // Return to main path -} -;; - -ILOGB_ZERO: -// Here if x zero -// Return INT_MIN, call error support - -{ .mlx - alloc r32=ar.pfs,1,3,4,0 - movl rTrialResult = 0x0000000080000000 -} -{ .mib - mov GR_Parameter_TAG = 157 // Error code - nop.i 0 - br.cond.sptk __libm_error_region // Call error support -} -;; - -GLOBAL_LIBM_END(ilogb) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfd [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfd [GR_Parameter_X] = f8 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = f9 // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - mov r8 = rTrialResult -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_ilogbf.S b/sysdeps/ia64/fpu/s_ilogbf.S deleted file mode 100644 index 9e971bc634..0000000000 --- a/sysdeps/ia64/fpu/s_ilogbf.S +++ /dev/null @@ -1,268 +0,0 @@ -.file "ilogbf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/03/00 Initial version -// 05/26/00 Fix bug when x a double-extended denormal; -// if x=0 call error routine, per C9X -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 01/20/01 Fixed result for x=0 -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/20/03 Improved performance -// -// API -//============================================================== -// int ilogbf( float x ); -// -// Overview of operation -//============================================================== -// The ilogbf function extracts the exponent of x as an integer -// and returns it in r8 -// -// ilogbf is similar to logbf but differs in the following ways: -// +-inf -// ilogbf: returns INT_MAX -// logbf: returns +inf -// Nan returns FP_LOGBNAN (which is either INT_MAX or INT_MIN) -// ilogbf: returns INT_MAX (7fffffff) -// logbf: returns QNAN (quietized SNAN) -// 0 returns FP_ILOGB0 (which is either INT_MIN or -INT_MAX) -// ilogbf: returns -INT_MAX (80000001) -// logbf: returns -inf, raises the divide-by-zero exception, -// and calls libm_error_support to set domain error -// -// Registers used -//============================================================== -// general registers used: -// r26 -> r39 -// r36 -> r39 used as parameters to error path -// -// predicate registers used: -// p6 -> p10 -// floating-point registers used: -// f9, f10, f11 -// f8, input - -rExpBias = r26 -rExpMask = r27 -rSignexp_x = r28 -rExp_x = r29 -rIntMax = r30 -rExp_2to64 = r31 - -GR_SAVE_PFS = r32 -rTrialResult = r33 -GR_SAVE_B0 = r34 -GR_SAVE_GP = r35 - -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -GR_Parameter_TAG = r39 - -fTmp = f9 -fNorm_x = f10 -f2to64 = f11 - -.section .text -GLOBAL_LIBM_ENTRY(ilogbf) - -// X NORMAL -// TrueExp_x = exp(f8) - 0xffff -// r8 = TrueExp_x -{ .mfi - getf.exp rSignexp_x = f8 - fclass.m p8,p0 = f8, 0x0b // Test for x unorm - mov rExpBias = 0xffff // Exponent bias -} -{ .mfi - nop.m 0 - fnorm.s1 fNorm_x = f8 - mov rExpMask = 0x1ffff // Exponent mask -} -;; - -// Form signexp of 2^64 in case need to scale denormal -{ .mfb - mov rExp_2to64 = 0x1003f - fclass.m p6,p9 = f8, 0x1e3 // Test x natval, nan, inf -(p8) br.cond.spnt ILOGB_DENORM // Branch if x unorm -} -;; - -ILOGB_COMMON: -// Return here from ILOGB_DENORM -{ .mfi - and rExp_x = rSignexp_x, rExpMask // Get biased exponent - fclass.m p7,p10 = f8, 0x07 // Test x zero - nop.i 0 -} -{ .mlx - nop.m 0 - movl rIntMax = 0x000000007fffffff // Form INT_MAX -} -;; - -.pred.rel "mutex",p6,p9 -{ .mfi -(p9) sub r8 = rExp_x, rExpBias // Get true exponent for normal path -(p6) fma.s0 fTmp = f8, f8, f0 // Dummy to set Invalid flag -(p6) mov r8 = rIntMax // If nan, inf, return INT_MAX -} -{ .mbb - nop.m 0 -(p7) br.cond.spnt ILOGB_ZERO // Branch if x zero -(p10) br.ret.sptk b0 // Exit if x not zero -} -;; - - -ILOGB_DENORM: -// Form 2^64 in case need to scale denormal -// Check to see if double-extended denormal -{ .mfi - setf.exp f2to64 = rExp_2to64 - fclass.m p8,p0 = fNorm_x, 0x0b - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - nop.i 0 -} -;; - -// If double-extended denormal add 64 to exponent bias for scaling -// If double-extended denormal form x * 2^64 which is normal -{ .mfi -(p8) add rExpBias = 64, rExpBias -(p8) fmpy.s1 fNorm_x = fNorm_x, f2to64 - nop.i 0 -} -;; - -// Logic is the same as normal path but use normalized input -{ .mib - getf.exp rSignexp_x = fNorm_x - nop.i 0 - br.cond.sptk ILOGB_COMMON // Return to main path -} -;; - -ILOGB_ZERO: -// Here if x zero -// Return INT_MIN, call error support - -{ .mlx - alloc r32=ar.pfs,1,3,4,0 - movl rTrialResult = 0x0000000080000000 -} -{ .mib - mov GR_Parameter_TAG = 158 // Error code - nop.i 0 - br.cond.sptk __libm_error_region // Call error support -} -;; - -GLOBAL_LIBM_END(ilogbf) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfs [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfs [GR_Parameter_X] = f8 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = f9 // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - mov r8 = rTrialResult -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_isinf.S b/sysdeps/ia64/fpu/s_isinf.S deleted file mode 100644 index d4d582d46f..0000000000 --- a/sysdeps/ia64/fpu/s_isinf.S +++ /dev/null @@ -1,57 +0,0 @@ -/* Test for inf/-inf - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jes Sorensen , October 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * isinf(x) returns 1 if x is inf, -1 for x == -inf, else 0; - */ - -#include -#undef ret - -ENTRY (__isinf) -{ -.mfi - fclass.m p6, p7 = farg0, @inf|@pos - ;; -} -{ -.mfb -(p6) mov ret0 = 1 -(p7) fclass.m p7, p8 = farg0, @inf|@neg -(p6) br.ret.sptk.many rp - ;; -} -{ - .pred.rel.mutex p7,p8 -(p7) mov ret0 = -1 -(p8) mov ret0 = 0 - br.ret.sptk.many rp -} -END (__isinf) - -strong_alias (__isinf, __isinff) -strong_alias (__isinf, __isinfl) - -weak_alias (__isinf, isinf) -weak_alias (__isinff, isinff) -weak_alias (__isinfl, isinfl) - -hidden_def (__isinf) -hidden_def (__isinff) -hidden_def (__isinfl) diff --git a/sysdeps/ia64/fpu/s_isinff.S b/sysdeps/ia64/fpu/s_isinff.S deleted file mode 100644 index 37da979e19..0000000000 --- a/sysdeps/ia64/fpu/s_isinff.S +++ /dev/null @@ -1 +0,0 @@ -/* __isinff is in s_isinf.S. */ diff --git a/sysdeps/ia64/fpu/s_isinfl.S b/sysdeps/ia64/fpu/s_isinfl.S deleted file mode 100644 index c3bca40991..0000000000 --- a/sysdeps/ia64/fpu/s_isinfl.S +++ /dev/null @@ -1 +0,0 @@ -/* __isinfl is in s_isinf.S. */ diff --git a/sysdeps/ia64/fpu/s_isnan.S b/sysdeps/ia64/fpu/s_isnan.S deleted file mode 100644 index b2446e7b70..0000000000 --- a/sysdeps/ia64/fpu/s_isnan.S +++ /dev/null @@ -1,50 +0,0 @@ -/* Test for NaN - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jes Sorensen , October 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * isnan(x) returns 1 is x is nan, else 0; - */ - -#include -#undef ret - -ENTRY (__isnan) -{ -.mfi - fclass.m p6, p7 = farg0, @nat | @qnan | @snan - ;; -} -{ -.mib -(p6) mov ret0 = 1 -(p7) mov ret0 = 0 - br.ret.sptk.many rp -} -END (__isnan) - -strong_alias (__isnan, __isnanf) -strong_alias (__isnan, __isnanl) - -weak_alias (__isnan, isnan) -weak_alias (__isnanf, isnanf) -weak_alias (__isnanl, isnanl) - -hidden_def (__isnan) -hidden_def (__isnanf) -hidden_def (__isnanl) diff --git a/sysdeps/ia64/fpu/s_isnanf.S b/sysdeps/ia64/fpu/s_isnanf.S deleted file mode 100644 index a8911b15e3..0000000000 --- a/sysdeps/ia64/fpu/s_isnanf.S +++ /dev/null @@ -1 +0,0 @@ -/* __isnanf is in s_isnan.S. */ diff --git a/sysdeps/ia64/fpu/s_isnanl.S b/sysdeps/ia64/fpu/s_isnanl.S deleted file mode 100644 index 82fb19d72c..0000000000 --- a/sysdeps/ia64/fpu/s_isnanl.S +++ /dev/null @@ -1 +0,0 @@ -/* __isnanl is in s_isnan.S. */ diff --git a/sysdeps/ia64/fpu/s_ldexp.c b/sysdeps/ia64/fpu/s_ldexp.c deleted file mode 100644 index 6cf0ffc083..0000000000 --- a/sysdeps/ia64/fpu/s_ldexp.c +++ /dev/null @@ -1,61 +0,0 @@ -/* file: ldexp.c */ - - -// Copyright (c) 2000, 2001, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// - -#include "libm_support.h" - -double __libm_ldexp(double, int, int); - - -double ldexp(double x, int n) -{ - -#ifdef SIZE_INT_64 - return __libm_ldexp(x,n,1); -#else - -#ifdef SIZE_INT_32 - return __libm_ldexp(x,n,0); -#endif - -#endif - -} diff --git a/sysdeps/ia64/fpu/s_ldexpf.c b/sysdeps/ia64/fpu/s_ldexpf.c deleted file mode 100644 index 64e335b0ec..0000000000 --- a/sysdeps/ia64/fpu/s_ldexpf.c +++ /dev/null @@ -1,61 +0,0 @@ -/* file: ldexpf.c */ - - -// Copyright (c) 2000, 2001, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// - -#include "libm_support.h" - -float __libm_ldexpf(float, int, int); - - -float ldexpf(float x, int n) -{ - -#ifdef SIZE_INT_64 - return __libm_ldexpf(x,n,1); -#else - -#ifdef SIZE_INT_32 - return __libm_ldexpf(x,n,0); -#endif - -#endif - -} diff --git a/sysdeps/ia64/fpu/s_ldexpl.c b/sysdeps/ia64/fpu/s_ldexpl.c deleted file mode 100644 index aa6f2d7642..0000000000 --- a/sysdeps/ia64/fpu/s_ldexpl.c +++ /dev/null @@ -1,61 +0,0 @@ -/* file: ldexpl.c */ - - -// Copyright (c) 2000, 2001, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// - -#include "libm_support.h" - -long double __libm_ldexpl(long double, int, int); - - -long double ldexpl(long double x, int n) -{ - -#ifdef SIZE_INT_64 - return __libm_ldexpl(x,n,1); -#else - -#ifdef SIZE_INT_32 - return __libm_ldexpl(x,n,0); -#endif - -#endif - -} diff --git a/sysdeps/ia64/fpu/s_libm_ldexp.S b/sysdeps/ia64/fpu/s_libm_ldexp.S deleted file mode 100644 index 2aaf2c35fd..0000000000 --- a/sysdeps/ia64/fpu/s_libm_ldexp.S +++ /dev/null @@ -1,452 +0,0 @@ -.file "libm_ldexp.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 01/26/01 ldexp completely reworked and now standalone version -// 01/04/02 Added handling for int 32 or 64 bits -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 08/04/03 Improved performance -// -// API -//============================================================== -// double __libm_ldexp (double x, int n, int int_type) -// input floating point f8 and int n (r33), int int_type (r34) -// output floating point f8 -// -// int_type = 0 if int is 32 bits -// int_type = 1 if int is 64 bits -// -// Returns x* 2**n using an fma and detects overflow -// and underflow. -// -// -// Strategy: -// Compute biased exponent of result exp_Result = N + exp_X -// Break into ranges: -// exp_Result > 0x103fe -> Certain overflow -// exp_Result = 0x103fe -> Possible overflow -// 0x0fc01 <= exp_Result < 0x103fe -> No over/underflow (main path) -// 0x0fc01 - 52 <= exp_Result < 0x0fc01 -> Possible underflow -// exp_Result < 0x0fc01 - 52 -> Certain underflow - -FR_Big = f6 -FR_NBig = f7 -FR_Floating_X = f8 -FR_Result = f8 -FR_Result2 = f9 -FR_Result3 = f10 -FR_Norm_X = f11 -FR_Two_N = f12 - -GR_neg_ov_limit= r14 -GR_N_Biased = r15 -GR_Big = r16 -GR_NBig = r17 -GR_exp_Result = r18 -GR_pos_ov_limit= r19 -GR_Bias = r20 -GR_N_as_int = r21 -GR_signexp_X = r22 -GR_exp_X = r23 -GR_exp_mask = r24 -GR_max_exp = r25 -GR_min_exp = r26 -GR_min_den_exp = r27 - -GR_SAVE_B0 = r32 -GR_SAVE_GP = r33 -GR_SAVE_PFS = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Tag = r38 - -.section .text -GLOBAL_LIBM_ENTRY(__libm_ldexp) - -// -// Is x NAN, INF, ZERO, +-? -// Build the exponent Bias -// -{ .mfi - getf.exp GR_signexp_X = FR_Floating_X // Get signexp of x - fclass.m p6,p0 = FR_Floating_X, 0xe7 // @snan | @qnan | @inf | @zero - mov GR_Bias = 0x0ffff -} -// -// Normalize x -// Is integer type 32 bits? -// -{ .mfi - mov GR_Big = 35000 // If N this big then certain overflow - fnorm.s1 FR_Norm_X = FR_Floating_X - cmp.eq p8,p9 = r34,r0 -} -;; - -// Sign extend N if int is 32 bits -{ .mfi -(p9) mov GR_N_as_int = r33 // Copy N if int is 64 bits - fclass.m p9,p0 = FR_Floating_X, 0x0b // Test for x=unorm -(p8) sxt4 GR_N_as_int = r33 // Sign extend N if int is 32 bits -} -{ .mfi - mov GR_NBig = -35000 // If N this small then certain underflow - nop.f 0 - mov GR_max_exp = 0x103fe // Exponent of maximum double -} -;; - -// Create biased exponent for 2**N -{ .mfi - add GR_N_Biased = GR_Bias,GR_N_as_int - nop.f 0 - cmp.ge p7, p0 = GR_N_as_int, GR_Big // Certain overflow? -} -{ .mib - cmp.le p8, p0 = GR_N_as_int, GR_NBig // Certain underflow? - mov GR_min_exp = 0x0fc01 // Exponent of minimum double -(p9) br.cond.spnt LDEXP_UNORM // Branch if x=unorm -} -;; - -LDEXP_COMMON: -// Main path continues. Also return here from x=unorm path. -// Create 2**N -.pred.rel "mutex",p7,p8 -{ .mfi - setf.exp FR_Two_N = GR_N_Biased - nop.f 0 -(p7) mov GR_N_as_int = GR_Big // Limit max N -} -{ .mfi -(p8) mov GR_N_as_int = GR_NBig // Limit min N - nop.f 0 -(p8) cmp.eq p7,p0 = r0,r0 // Set p7 if |N| big -} -;; - -// -// Create biased exponent for 2**N for N big -// Is N zero? -// -{ .mfi -(p7) add GR_N_Biased = GR_Bias,GR_N_as_int - nop.f 0 - cmp.eq.or p6,p0 = r33,r0 -} -{ .mfi - mov GR_pos_ov_limit = 0x103ff // Exponent for positive overflow - nop.f 0 - mov GR_exp_mask = 0x1ffff // Exponent mask -} -;; - -// -// Create 2**N for N big -// Return x when N = 0 or X = Nan, Inf, Zero -// -{ .mfi -(p7) setf.exp FR_Two_N = GR_N_Biased - nop.f 0 - mov GR_min_den_exp = 0x0fc01 - 52 // Exponent of min denorm dble -} -{ .mfb - and GR_exp_X = GR_exp_mask, GR_signexp_X -(p6) fma.d.s0 FR_Result = FR_Floating_X, f1, f0 -(p6) br.ret.spnt b0 -} -;; - -// -// Raise Denormal operand flag with compare -// Compute biased result exponent -// -{ .mfi - add GR_exp_Result = GR_exp_X, GR_N_as_int - fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 - mov GR_neg_ov_limit = 0x303ff // Exponent for negative overflow -} -;; - -// -// Do final operation -// -{ .mfi - cmp.lt p7,p6 = GR_exp_Result, GR_max_exp // Test no overflow - fma.d.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 - cmp.lt p9,p0 = GR_exp_Result, GR_min_den_exp // Test sure underflow -} -{ .mfb - nop.m 0 - nop.f 0 -(p9) br.cond.spnt LDEXP_UNDERFLOW // Branch if certain underflow -} -;; - -{ .mib -(p6) cmp.gt.unc p6,p8 = GR_exp_Result, GR_max_exp // Test sure overflow -(p7) cmp.ge.unc p7,p9 = GR_exp_Result, GR_min_exp // Test no over/underflow -(p7) br.ret.sptk b0 // Return from main path -} -;; - -{ .bbb -(p6) br.cond.spnt LDEXP_OVERFLOW // Branch if certain overflow -(p8) br.cond.spnt LDEXP_POSSIBLE_OVERFLOW // Branch if possible overflow -(p9) br.cond.spnt LDEXP_POSSIBLE_UNDERFLOW // Branch if possible underflow -} -;; - -// Here if possible underflow. -// Resulting exponent: 0x0fc01-52 <= exp_Result < 0x0fc01 -LDEXP_POSSIBLE_UNDERFLOW: -// -// Here if possible overflow. -// Resulting exponent: 0x103fe = exp_Result -LDEXP_POSSIBLE_OVERFLOW: - -// Set up necessary status fields -// -// S0 user supplied status -// S2 user supplied status + WRE + TD (Overflows) -// S3 user supplied status + FZ + TD (Underflows) -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x41 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x42 - nop.i 0 -} -;; - -// -// Do final operation with s2 and s3 -// -{ .mfi - setf.exp FR_NBig = GR_neg_ov_limit - fma.d.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -{ .mfi - setf.exp FR_Big = GR_pos_ov_limit - fma.d.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -;; - -// Check for overflow or underflow. -// Restore s3 -// Restore s2 -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x40 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 - nop.i 0 -} -;; - -// -// Is the result zero? -// -{ .mfi - nop.m 0 - fclass.m p6, p0 = FR_Result3, 0x007 - nop.i 0 -} -{ .mfi - nop.m 0 - fcmp.ge.s1 p7, p8 = FR_Result2 , FR_Big - nop.i 0 -} -;; - -// -// Detect masked underflow - Tiny + Inexact Only -// -{ .mfi - nop.m 0 -(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 - nop.i 0 -} -;; - -// -// Is result bigger the allowed range? -// Branch out for underflow -// -{ .mfb - nop.m 0 -(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig -(p6) br.cond.spnt LDEXP_UNDERFLOW -} -;; - -// -// Branch out for overflow -// -{ .bbb -(p7) br.cond.spnt LDEXP_OVERFLOW -(p9) br.cond.spnt LDEXP_OVERFLOW - br.ret.sptk b0 // Return from main path. -} -;; - -// Here if result overflows -LDEXP_OVERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 146, r0 // Set error tag for overflow - br.cond.sptk __libm_error_region // Call error support for overflow -} -;; - -// Here if result underflows -LDEXP_UNDERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 147, r0 // Set error tag for underflow - br.cond.sptk __libm_error_region // Call error support for underflow -} -;; - -// Here if x=unorm -LDEXP_UNORM: -{ .mib - getf.exp GR_signexp_X = FR_Norm_X // Get signexp of normalized x - nop.i 0 - br.cond.sptk LDEXP_COMMON // Return to main path -} -;; - - -GLOBAL_LIBM_END(__libm_ldexp) -LOCAL_LIBM_ENTRY(__libm_error_region) - -// -// Get stack address of N -// -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs -} -// -// Adjust sp -// -{ .mfi -.fframe 64 - add sp=-64,sp - nop.f 0 - mov GR_SAVE_GP=gp -};; - -// -// Store N on stack in correct position -// Locate the address of x on stack -// -{ .mmi - st8 [GR_Parameter_Y] = GR_N_as_int,16 - add GR_Parameter_X = 16,sp -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 -};; - -// -// Store x on the stack. -// Get address for result on stack. -// -.body -{ .mib - stfd [GR_Parameter_X] = FR_Norm_X - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_Result - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# -};; - -// -// Get location of result on stack -// -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -// -// Get the new result -// -{ .mmi - ldfd FR_Result = [GR_Parameter_RESULT] -.restore sp - add sp = 64,sp - mov b0 = GR_SAVE_B0 -};; - -// -// Restore gp, ar.pfs and return -// -{ .mib - mov gp = GR_SAVE_GP - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_libm_ldexpf.S b/sysdeps/ia64/fpu/s_libm_ldexpf.S deleted file mode 100644 index 1326a14c2d..0000000000 --- a/sysdeps/ia64/fpu/s_libm_ldexpf.S +++ /dev/null @@ -1,452 +0,0 @@ -.file "libm_ldexpf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 01/26/01 ldexpf completely reworked and now standalone version -// 01/04/02 Added handling for int 32 or 64 bits -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 08/04/03 Improved performance -// -// API -//============================================================== -// float __libm_ldexpf (float x, int n, int int_type) -// input floating point f8 and int n (r33), int int_type (r34) -// output floating point f8 -// -// int_type = 0 if int is 32 bits -// int_type = 1 if int is 64 bits -// -// Returns x* 2**n using an fma and detects overflow -// and underflow. -// -// -// Strategy: -// Compute biased exponent of result exp_Result = N + exp_X -// Break into ranges: -// exp_Result > 0x1007e -> Certain overflow -// exp_Result = 0x1007e -> Possible overflow -// 0x0ff81 <= exp_Result < 0x1007e -> No over/underflow (main path) -// 0x0ff81 - 23 <= exp_Result < 0x0ff81 -> Possible underflow -// exp_Result < 0x0ff81 - 23 -> Certain underflow - -FR_Big = f6 -FR_NBig = f7 -FR_Floating_X = f8 -FR_Result = f8 -FR_Result2 = f9 -FR_Result3 = f10 -FR_Norm_X = f11 -FR_Two_N = f12 - -GR_neg_ov_limit= r14 -GR_N_Biased = r15 -GR_Big = r16 -GR_NBig = r17 -GR_exp_Result = r18 -GR_pos_ov_limit= r19 -GR_Bias = r20 -GR_N_as_int = r21 -GR_signexp_X = r22 -GR_exp_X = r23 -GR_exp_mask = r24 -GR_max_exp = r25 -GR_min_exp = r26 -GR_min_den_exp = r27 - -GR_SAVE_B0 = r32 -GR_SAVE_GP = r33 -GR_SAVE_PFS = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Tag = r38 - -.section .text -GLOBAL_LIBM_ENTRY(__libm_ldexpf) - -// -// Is x NAN, INF, ZERO, +-? -// Build the exponent Bias -// -{ .mfi - getf.exp GR_signexp_X = FR_Floating_X // Get signexp of x - fclass.m p6,p0 = FR_Floating_X, 0xe7 // @snan | @qnan | @inf | @zero - mov GR_Bias = 0x0ffff -} -// -// Normalize x -// Is integer type 32 bits? -// -{ .mfi - mov GR_Big = 35000 // If N this big then certain overflow - fnorm.s1 FR_Norm_X = FR_Floating_X - cmp.eq p8,p9 = r34,r0 -} -;; - -// Sign extend N if int is 32 bits -{ .mfi -(p9) mov GR_N_as_int = r33 // Copy N if int is 64 bits - fclass.m p9,p0 = FR_Floating_X, 0x0b // Test for x=unorm -(p8) sxt4 GR_N_as_int = r33 // Sign extend N if int is 32 bits -} -{ .mfi - mov GR_NBig = -35000 // If N this small then certain underflow - nop.f 0 - mov GR_max_exp = 0x1007e // Exponent of maximum float -} -;; - -// Create biased exponent for 2**N -{ .mfi - add GR_N_Biased = GR_Bias,GR_N_as_int - nop.f 0 - cmp.ge p7, p0 = GR_N_as_int, GR_Big // Certain overflow? -} -{ .mib - cmp.le p8, p0 = GR_N_as_int, GR_NBig // Certain underflow? - mov GR_min_exp = 0x0ff81 // Exponent of minimum float -(p9) br.cond.spnt LDEXPF_UNORM // Branch if x=unorm -} -;; - -LDEXPF_COMMON: -// Main path continues. Also return here from x=unorm path. -// Create 2**N -.pred.rel "mutex",p7,p8 -{ .mfi - setf.exp FR_Two_N = GR_N_Biased - nop.f 0 -(p7) mov GR_N_as_int = GR_Big // Limit max N -} -{ .mfi -(p8) mov GR_N_as_int = GR_NBig // Limit min N - nop.f 0 -(p8) cmp.eq p7,p0 = r0,r0 // Set p7 if |N| big -} -;; - -// -// Create biased exponent for 2**N for N big -// Is N zero? -// -{ .mfi -(p7) add GR_N_Biased = GR_Bias,GR_N_as_int - nop.f 0 - cmp.eq.or p6,p0 = r33,r0 -} -{ .mfi - mov GR_pos_ov_limit = 0x1007f // Exponent for positive overflow - nop.f 0 - mov GR_exp_mask = 0x1ffff // Exponent mask -} -;; - -// -// Create 2**N for N big -// Return x when N = 0 or X = Nan, Inf, Zero -// -{ .mfi -(p7) setf.exp FR_Two_N = GR_N_Biased - nop.f 0 - mov GR_min_den_exp = 0x0ff81 - 23 // Exponent of min denorm float -} -{ .mfb - and GR_exp_X = GR_exp_mask, GR_signexp_X -(p6) fma.s.s0 FR_Result = FR_Floating_X, f1, f0 -(p6) br.ret.spnt b0 -} -;; - -// -// Raise Denormal operand flag with compare -// Compute biased result exponent -// -{ .mfi - add GR_exp_Result = GR_exp_X, GR_N_as_int - fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 - mov GR_neg_ov_limit = 0x3007f // Exponent for negative overflow -} -;; - -// -// Do final operation -// -{ .mfi - cmp.lt p7,p6 = GR_exp_Result, GR_max_exp // Test no overflow - fma.s.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 - cmp.lt p9,p0 = GR_exp_Result, GR_min_den_exp // Test sure underflow -} -{ .mfb - nop.m 0 - nop.f 0 -(p9) br.cond.spnt LDEXPF_UNDERFLOW // Branch if certain underflow -} -;; - -{ .mib -(p6) cmp.gt.unc p6,p8 = GR_exp_Result, GR_max_exp // Test sure overflow -(p7) cmp.ge.unc p7,p9 = GR_exp_Result, GR_min_exp // Test no over/underflow -(p7) br.ret.sptk b0 // Return from main path -} -;; - -{ .bbb -(p6) br.cond.spnt LDEXPF_OVERFLOW // Branch if certain overflow -(p8) br.cond.spnt LDEXPF_POSSIBLE_OVERFLOW // Branch if possible overflow -(p9) br.cond.spnt LDEXPF_POSSIBLE_UNDERFLOW // Branch if possible underflow -} -;; - -// Here if possible underflow. -// Resulting exponent: 0x0ff81-23 <= exp_Result < 0x0ff81 -LDEXPF_POSSIBLE_UNDERFLOW: -// -// Here if possible overflow. -// Resulting exponent: 0x1007e = exp_Result -LDEXPF_POSSIBLE_OVERFLOW: - -// Set up necessary status fields -// -// S0 user supplied status -// S2 user supplied status + WRE + TD (Overflows) -// S3 user supplied status + FZ + TD (Underflows) -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x41 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x42 - nop.i 0 -} -;; - -// -// Do final operation with s2 and s3 -// -{ .mfi - setf.exp FR_NBig = GR_neg_ov_limit - fma.s.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -{ .mfi - setf.exp FR_Big = GR_pos_ov_limit - fma.s.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -;; - -// Check for overflow or underflow. -// Restore s3 -// Restore s2 -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x40 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 - nop.i 0 -} -;; - -// -// Is the result zero? -// -{ .mfi - nop.m 0 - fclass.m p6, p0 = FR_Result3, 0x007 - nop.i 0 -} -{ .mfi - nop.m 0 - fcmp.ge.s1 p7, p8 = FR_Result2 , FR_Big - nop.i 0 -} -;; - -// -// Detect masked underflow - Tiny + Inexact Only -// -{ .mfi - nop.m 0 -(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 - nop.i 0 -} -;; - -// -// Is result bigger the allowed range? -// Branch out for underflow -// -{ .mfb - nop.m 0 -(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig -(p6) br.cond.spnt LDEXPF_UNDERFLOW -} -;; - -// -// Branch out for overflow -// -{ .bbb -(p7) br.cond.spnt LDEXPF_OVERFLOW -(p9) br.cond.spnt LDEXPF_OVERFLOW - br.ret.sptk b0 // Return from main path. -} -;; - -// Here if result overflows -LDEXPF_OVERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 148, r0 // Set error tag for overflow - br.cond.sptk __libm_error_region // Call error support for overflow -} -;; - -// Here if result underflows -LDEXPF_UNDERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 149, r0 // Set error tag for underflow - br.cond.sptk __libm_error_region // Call error support for underflow -} -;; - -// Here if x=unorm -LDEXPF_UNORM: -{ .mib - getf.exp GR_signexp_X = FR_Norm_X // Get signexp of normalized x - nop.i 0 - br.cond.sptk LDEXPF_COMMON // Return to main path -} -;; - - -GLOBAL_LIBM_END(__libm_ldexpf) -LOCAL_LIBM_ENTRY(__libm_error_region) - -// -// Get stack address of N -// -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs -} -// -// Adjust sp -// -{ .mfi -.fframe 64 - add sp=-64,sp - nop.f 0 - mov GR_SAVE_GP=gp -};; - -// -// Store N on stack in correct position -// Locate the address of x on stack -// -{ .mmi - st8 [GR_Parameter_Y] = GR_N_as_int,16 - add GR_Parameter_X = 16,sp -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 -};; - -// -// Store x on the stack. -// Get address for result on stack. -// -.body -{ .mib - stfs [GR_Parameter_X] = FR_Norm_X - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = FR_Result - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# -};; - -// -// Get location of result on stack -// -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -// -// Get the new result -// -{ .mmi - ldfs FR_Result = [GR_Parameter_RESULT] -.restore sp - add sp = 64,sp - mov b0 = GR_SAVE_B0 -};; - -// -// Restore gp, ar.pfs and return -// -{ .mib - mov gp = GR_SAVE_GP - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_libm_ldexpl.S b/sysdeps/ia64/fpu/s_libm_ldexpl.S deleted file mode 100644 index fffda9e55a..0000000000 --- a/sysdeps/ia64/fpu/s_libm_ldexpl.S +++ /dev/null @@ -1,452 +0,0 @@ -.file "libm_ldexpl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 01/26/01 ldexpl completely reworked and now standalone version -// 01/04/02 Added handling for int 32 or 64 bits -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 08/04/03 Improved performance -// -// API -//============================================================== -// long double __libm_ldexpl (long double x, int n, int int_type) -// input floating point f8 and int n (r34), int int_type (r35) -// output floating point f8 -// -// int_type = 0 if int is 32 bits -// int_type = 1 if int is 64 bits -// -// Returns x* 2**n using an fma and detects overflow -// and underflow. -// -// -// Strategy: -// Compute biased exponent of result exp_Result = N + exp_X -// Break into ranges: -// exp_Result > 0x13ffe -> Certain overflow -// exp_Result = 0x13ffe -> Possible overflow -// 0x0c001 <= exp_Result < 0x13ffe -> No over/underflow (main path) -// 0x0c001 - 63 <= exp_Result < 0x0c001 -> Possible underflow -// exp_Result < 0x0c001 - 63 -> Certain underflow - -FR_Big = f6 -FR_NBig = f7 -FR_Floating_X = f8 -FR_Result = f8 -FR_Result2 = f9 -FR_Result3 = f10 -FR_Norm_X = f11 -FR_Two_N = f12 - -GR_neg_ov_limit= r14 -GR_N_Biased = r15 -GR_Big = r16 -GR_NBig = r17 -GR_exp_Result = r18 -GR_pos_ov_limit= r19 -GR_Bias = r20 -GR_N_as_int = r21 -GR_signexp_X = r22 -GR_exp_X = r23 -GR_exp_mask = r24 -GR_max_exp = r25 -GR_min_exp = r26 -GR_min_den_exp = r27 - -GR_SAVE_B0 = r32 -GR_SAVE_GP = r33 -GR_SAVE_PFS = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Tag = r38 - -.section .text -GLOBAL_LIBM_ENTRY(__libm_ldexpl) - -// -// Is x NAN, INF, ZERO, +-? -// Build the exponent Bias -// -{ .mfi - getf.exp GR_signexp_X = FR_Floating_X // Get signexp of x - fclass.m p6,p0 = FR_Floating_X, 0xe7 // @snan | @qnan | @inf | @zero - mov GR_Bias = 0x0ffff -} -// -// Normalize x -// Is integer type 32 bits? -// -{ .mfi - mov GR_Big = 35000 // If N this big then certain overflow - fnorm.s1 FR_Norm_X = FR_Floating_X - cmp.eq p8,p9 = r35,r0 -} -;; - -// Sign extend N if int is 32 bits -{ .mfi -(p9) mov GR_N_as_int = r34 // Copy N if int is 64 bits - fclass.m p9,p0 = FR_Floating_X, 0x0b // Test for x=unorm -(p8) sxt4 GR_N_as_int = r34 // Sign extend N if int is 32 bits -} -{ .mfi - mov GR_NBig = -35000 // If N this small then certain underflow - nop.f 0 - mov GR_max_exp = 0x13ffe // Exponent of maximum long double -} -;; - -// Create biased exponent for 2**N -{ .mfi - add GR_N_Biased = GR_Bias,GR_N_as_int - nop.f 0 - cmp.ge p7, p0 = GR_N_as_int, GR_Big // Certain overflow? -} -{ .mib - cmp.le p8, p0 = GR_N_as_int, GR_NBig // Certain underflow? - mov GR_min_exp = 0x0c001 // Exponent of minimum long double -(p9) br.cond.spnt LDEXPL_UNORM // Branch if x=unorm -} -;; - -LDEXPL_COMMON: -// Main path continues. Also return here from x=unorm path. -// Create 2**N -.pred.rel "mutex",p7,p8 -{ .mfi - setf.exp FR_Two_N = GR_N_Biased - nop.f 0 -(p7) mov GR_N_as_int = GR_Big // Limit max N -} -{ .mfi -(p8) mov GR_N_as_int = GR_NBig // Limit min N - nop.f 0 -(p8) cmp.eq p7,p0 = r0,r0 // Set p7 if |N| big -} -;; - -// -// Create biased exponent for 2**N for N big -// Is N zero? -// -{ .mfi -(p7) add GR_N_Biased = GR_Bias,GR_N_as_int - nop.f 0 - cmp.eq.or p6,p0 = r34,r0 -} -{ .mfi - mov GR_pos_ov_limit = 0x13fff // Exponent for positive overflow - nop.f 0 - mov GR_exp_mask = 0x1ffff // Exponent mask -} -;; - -// -// Create 2**N for N big -// Return x when N = 0 or X = Nan, Inf, Zero -// -{ .mfi -(p7) setf.exp FR_Two_N = GR_N_Biased - nop.f 0 - mov GR_min_den_exp = 0x0c001 - 63 // Exp of min denorm long dble -} -{ .mfb - and GR_exp_X = GR_exp_mask, GR_signexp_X -(p6) fma.s0 FR_Result = FR_Floating_X, f1, f0 -(p6) br.ret.spnt b0 -} -;; - -// -// Raise Denormal operand flag with compare -// Compute biased result exponent -// -{ .mfi - add GR_exp_Result = GR_exp_X, GR_N_as_int - fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 - mov GR_neg_ov_limit = 0x33fff // Exponent for negative overflow -} -;; - -// -// Do final operation -// -{ .mfi - cmp.lt p7,p6 = GR_exp_Result, GR_max_exp // Test no overflow - fma.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 - cmp.lt p9,p0 = GR_exp_Result, GR_min_den_exp // Test sure underflow -} -{ .mfb - nop.m 0 - nop.f 0 -(p9) br.cond.spnt LDEXPL_UNDERFLOW // Branch if certain underflow -} -;; - -{ .mib -(p6) cmp.gt.unc p6,p8 = GR_exp_Result, GR_max_exp // Test sure overflow -(p7) cmp.ge.unc p7,p9 = GR_exp_Result, GR_min_exp // Test no over/underflow -(p7) br.ret.sptk b0 // Return from main path -} -;; - -{ .bbb -(p6) br.cond.spnt LDEXPL_OVERFLOW // Branch if certain overflow -(p8) br.cond.spnt LDEXPL_POSSIBLE_OVERFLOW // Branch if possible overflow -(p9) br.cond.spnt LDEXPL_POSSIBLE_UNDERFLOW // Branch if possible underflow -} -;; - -// Here if possible underflow. -// Resulting exponent: 0x0c001-63 <= exp_Result < 0x0c001 -LDEXPL_POSSIBLE_UNDERFLOW: -// -// Here if possible overflow. -// Resulting exponent: 0x13ffe = exp_Result -LDEXPL_POSSIBLE_OVERFLOW: - -// Set up necessary status fields -// -// S0 user supplied status -// S2 user supplied status + WRE + TD (Overflows) -// S3 user supplied status + FZ + TD (Underflows) -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x41 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x42 - nop.i 0 -} -;; - -// -// Do final operation with s2 and s3 -// -{ .mfi - setf.exp FR_NBig = GR_neg_ov_limit - fma.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -{ .mfi - setf.exp FR_Big = GR_pos_ov_limit - fma.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -;; - -// Check for overflow or underflow. -// Restore s3 -// Restore s2 -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x40 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 - nop.i 0 -} -;; - -// -// Is the result zero? -// -{ .mfi - nop.m 0 - fclass.m p6, p0 = FR_Result3, 0x007 - nop.i 0 -} -{ .mfi - nop.m 0 - fcmp.ge.s1 p7, p8 = FR_Result2 , FR_Big - nop.i 0 -} -;; - -// -// Detect masked underflow - Tiny + Inexact Only -// -{ .mfi - nop.m 0 -(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 - nop.i 0 -} -;; - -// -// Is result bigger the allowed range? -// Branch out for underflow -// -{ .mfb - nop.m 0 -(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig -(p6) br.cond.spnt LDEXPL_UNDERFLOW -} -;; - -// -// Branch out for overflow -// -{ .bbb -(p7) br.cond.spnt LDEXPL_OVERFLOW -(p9) br.cond.spnt LDEXPL_OVERFLOW - br.ret.sptk b0 // Return from main path. -} -;; - -// Here if result overflows -LDEXPL_OVERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 144, r0 // Set error tag for overflow - br.cond.sptk __libm_error_region // Call error support for overflow -} -;; - -// Here if result underflows -LDEXPL_UNDERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 145, r0 // Set error tag for underflow - br.cond.sptk __libm_error_region // Call error support for underflow -} -;; - -// Here if x=unorm -LDEXPL_UNORM: -{ .mib - getf.exp GR_signexp_X = FR_Norm_X // Get signexp of normalized x - nop.i 0 - br.cond.sptk LDEXPL_COMMON // Return to main path -} -;; - - -GLOBAL_LIBM_END(__libm_ldexpl) -LOCAL_LIBM_ENTRY(__libm_error_region) - -// -// Get stack address of N -// -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs -} -// -// Adjust sp -// -{ .mfi -.fframe 64 - add sp=-64,sp - nop.f 0 - mov GR_SAVE_GP=gp -};; - -// -// Store N on stack in correct position -// Locate the address of x on stack -// -{ .mmi - st8 [GR_Parameter_Y] = GR_N_as_int,16 - add GR_Parameter_X = 16,sp -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 -};; - -// -// Store x on the stack. -// Get address for result on stack. -// -.body -{ .mib - stfe [GR_Parameter_X] = FR_Norm_X - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 -} -{ .mib - stfe [GR_Parameter_Y] = FR_Result - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# -};; - -// -// Get location of result on stack -// -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -// -// Get the new result -// -{ .mmi - ldfe FR_Result = [GR_Parameter_RESULT] -.restore sp - add sp = 64,sp - mov b0 = GR_SAVE_B0 -};; - -// -// Restore gp, ar.pfs and return -// -{ .mib - mov gp = GR_SAVE_GP - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_libm_scalbn.S b/sysdeps/ia64/fpu/s_libm_scalbn.S deleted file mode 100644 index eaccb7de7a..0000000000 --- a/sysdeps/ia64/fpu/s_libm_scalbn.S +++ /dev/null @@ -1,452 +0,0 @@ -.file "libm_scalbn.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 01/26/01 Scalbn completely reworked and now standalone version -// 01/04/02 Added handling for int 32 or 64 bits -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 08/04/03 Improved performance -// -// API -//============================================================== -// double __libm_scalbn (double x, int n, int int_type) -// input floating point f8 and int n (r33), int int_type (r34) -// output floating point f8 -// -// int_type = 0 if int is 32 bits -// int_type = 1 if int is 64 bits -// -// Returns x* 2**n using an fma and detects overflow -// and underflow. -// -// -// Strategy: -// Compute biased exponent of result exp_Result = N + exp_X -// Break into ranges: -// exp_Result > 0x103fe -> Certain overflow -// exp_Result = 0x103fe -> Possible overflow -// 0x0fc01 <= exp_Result < 0x103fe -> No over/underflow (main path) -// 0x0fc01 - 52 <= exp_Result < 0x0fc01 -> Possible underflow -// exp_Result < 0x0fc01 - 52 -> Certain underflow - -FR_Big = f6 -FR_NBig = f7 -FR_Floating_X = f8 -FR_Result = f8 -FR_Result2 = f9 -FR_Result3 = f10 -FR_Norm_X = f11 -FR_Two_N = f12 - -GR_neg_ov_limit= r14 -GR_N_Biased = r15 -GR_Big = r16 -GR_NBig = r17 -GR_exp_Result = r18 -GR_pos_ov_limit= r19 -GR_Bias = r20 -GR_N_as_int = r21 -GR_signexp_X = r22 -GR_exp_X = r23 -GR_exp_mask = r24 -GR_max_exp = r25 -GR_min_exp = r26 -GR_min_den_exp = r27 - -GR_SAVE_B0 = r32 -GR_SAVE_GP = r33 -GR_SAVE_PFS = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Tag = r38 - -.section .text -GLOBAL_LIBM_ENTRY(__libm_scalbn) - -// -// Is x NAN, INF, ZERO, +-? -// Build the exponent Bias -// -{ .mfi - getf.exp GR_signexp_X = FR_Floating_X // Get signexp of x - fclass.m p6,p0 = FR_Floating_X, 0xe7 // @snan | @qnan | @inf | @zero - mov GR_Bias = 0x0ffff -} -// -// Normalize x -// Is integer type 32 bits? -// -{ .mfi - mov GR_Big = 35000 // If N this big then certain overflow - fnorm.s1 FR_Norm_X = FR_Floating_X - cmp.eq p8,p9 = r34,r0 -} -;; - -// Sign extend N if int is 32 bits -{ .mfi -(p9) mov GR_N_as_int = r33 // Copy N if int is 64 bits - fclass.m p9,p0 = FR_Floating_X, 0x0b // Test for x=unorm -(p8) sxt4 GR_N_as_int = r33 // Sign extend N if int is 32 bits -} -{ .mfi - mov GR_NBig = -35000 // If N this small then certain underflow - nop.f 0 - mov GR_max_exp = 0x103fe // Exponent of maximum double -} -;; - -// Create biased exponent for 2**N -{ .mfi - add GR_N_Biased = GR_Bias,GR_N_as_int - nop.f 0 - cmp.ge p7, p0 = GR_N_as_int, GR_Big // Certain overflow? -} -{ .mib - cmp.le p8, p0 = GR_N_as_int, GR_NBig // Certain underflow? - mov GR_min_exp = 0x0fc01 // Exponent of minimum double -(p9) br.cond.spnt SCALBN_UNORM // Branch if x=unorm -} -;; - -SCALBN_COMMON: -// Main path continues. Also return here from x=unorm path. -// Create 2**N -.pred.rel "mutex",p7,p8 -{ .mfi - setf.exp FR_Two_N = GR_N_Biased - nop.f 0 -(p7) mov GR_N_as_int = GR_Big // Limit max N -} -{ .mfi -(p8) mov GR_N_as_int = GR_NBig // Limit min N - nop.f 0 -(p8) cmp.eq p7,p0 = r0,r0 // Set p7 if |N| big -} -;; - -// -// Create biased exponent for 2**N for N big -// Is N zero? -// -{ .mfi -(p7) add GR_N_Biased = GR_Bias,GR_N_as_int - nop.f 0 - cmp.eq.or p6,p0 = r33,r0 -} -{ .mfi - mov GR_pos_ov_limit = 0x103ff // Exponent for positive overflow - nop.f 0 - mov GR_exp_mask = 0x1ffff // Exponent mask -} -;; - -// -// Create 2**N for N big -// Return x when N = 0 or X = Nan, Inf, Zero -// -{ .mfi -(p7) setf.exp FR_Two_N = GR_N_Biased - nop.f 0 - mov GR_min_den_exp = 0x0fc01 - 52 // Exponent of min denorm dble -} -{ .mfb - and GR_exp_X = GR_exp_mask, GR_signexp_X -(p6) fma.d.s0 FR_Result = FR_Floating_X, f1, f0 -(p6) br.ret.spnt b0 -} -;; - -// -// Raise Denormal operand flag with compare -// Compute biased result exponent -// -{ .mfi - add GR_exp_Result = GR_exp_X, GR_N_as_int - fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 - mov GR_neg_ov_limit = 0x303ff // Exponent for negative overflow -} -;; - -// -// Do final operation -// -{ .mfi - cmp.lt p7,p6 = GR_exp_Result, GR_max_exp // Test no overflow - fma.d.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 - cmp.lt p9,p0 = GR_exp_Result, GR_min_den_exp // Test sure underflow -} -{ .mfb - nop.m 0 - nop.f 0 -(p9) br.cond.spnt SCALBN_UNDERFLOW // Branch if certain underflow -} -;; - -{ .mib -(p6) cmp.gt.unc p6,p8 = GR_exp_Result, GR_max_exp // Test sure overflow -(p7) cmp.ge.unc p7,p9 = GR_exp_Result, GR_min_exp // Test no over/underflow -(p7) br.ret.sptk b0 // Return from main path -} -;; - -{ .bbb -(p6) br.cond.spnt SCALBN_OVERFLOW // Branch if certain overflow -(p8) br.cond.spnt SCALBN_POSSIBLE_OVERFLOW // Branch if possible overflow -(p9) br.cond.spnt SCALBN_POSSIBLE_UNDERFLOW // Branch if possible underflow -} -;; - -// Here if possible underflow. -// Resulting exponent: 0x0fc01-52 <= exp_Result < 0x0fc01 -SCALBN_POSSIBLE_UNDERFLOW: -// -// Here if possible overflow. -// Resulting exponent: 0x103fe = exp_Result -SCALBN_POSSIBLE_OVERFLOW: - -// Set up necessary status fields -// -// S0 user supplied status -// S2 user supplied status + WRE + TD (Overflows) -// S3 user supplied status + FZ + TD (Underflows) -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x41 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x42 - nop.i 0 -} -;; - -// -// Do final operation with s2 and s3 -// -{ .mfi - setf.exp FR_NBig = GR_neg_ov_limit - fma.d.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -{ .mfi - setf.exp FR_Big = GR_pos_ov_limit - fma.d.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -;; - -// Check for overflow or underflow. -// Restore s3 -// Restore s2 -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x40 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 - nop.i 0 -} -;; - -// -// Is the result zero? -// -{ .mfi - nop.m 0 - fclass.m p6, p0 = FR_Result3, 0x007 - nop.i 0 -} -{ .mfi - nop.m 0 - fcmp.ge.s1 p7, p8 = FR_Result2 , FR_Big - nop.i 0 -} -;; - -// -// Detect masked underflow - Tiny + Inexact Only -// -{ .mfi - nop.m 0 -(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 - nop.i 0 -} -;; - -// -// Is result bigger the allowed range? -// Branch out for underflow -// -{ .mfb - nop.m 0 -(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig -(p6) br.cond.spnt SCALBN_UNDERFLOW -} -;; - -// -// Branch out for overflow -// -{ .bbb -(p7) br.cond.spnt SCALBN_OVERFLOW -(p9) br.cond.spnt SCALBN_OVERFLOW - br.ret.sptk b0 // Return from main path. -} -;; - -// Here if result overflows -SCALBN_OVERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 176, r0 // Set error tag for overflow - br.cond.sptk __libm_error_region // Call error support for overflow -} -;; - -// Here if result underflows -SCALBN_UNDERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 177, r0 // Set error tag for underflow - br.cond.sptk __libm_error_region // Call error support for underflow -} -;; - -// Here if x=unorm -SCALBN_UNORM: -{ .mib - getf.exp GR_signexp_X = FR_Norm_X // Get signexp of normalized x - nop.i 0 - br.cond.sptk SCALBN_COMMON // Return to main path -} -;; - - -GLOBAL_LIBM_END(__libm_scalbn) -LOCAL_LIBM_ENTRY(__libm_error_region) - -// -// Get stack address of N -// -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs -} -// -// Adjust sp -// -{ .mfi -.fframe 64 - add sp=-64,sp - nop.f 0 - mov GR_SAVE_GP=gp -};; - -// -// Store N on stack in correct position -// Locate the address of x on stack -// -{ .mmi - st8 [GR_Parameter_Y] = GR_N_as_int,16 - add GR_Parameter_X = 16,sp -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 -};; - -// -// Store x on the stack. -// Get address for result on stack. -// -.body -{ .mib - stfd [GR_Parameter_X] = FR_Norm_X - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_Result - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# -};; - -// -// Get location of result on stack -// -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -// -// Get the new result -// -{ .mmi - ldfd FR_Result = [GR_Parameter_RESULT] -.restore sp - add sp = 64,sp - mov b0 = GR_SAVE_B0 -};; - -// -// Restore gp, ar.pfs and return -// -{ .mib - mov gp = GR_SAVE_GP - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_libm_scalbnf.S b/sysdeps/ia64/fpu/s_libm_scalbnf.S deleted file mode 100644 index e00997aba7..0000000000 --- a/sysdeps/ia64/fpu/s_libm_scalbnf.S +++ /dev/null @@ -1,452 +0,0 @@ -.file "libm_scalbnf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 01/26/01 Scalbnf completely reworked and now standalone version -// 01/04/02 Added handling for int 32 or 64 bits -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 08/04/03 Improved performance -// -// API -//============================================================== -// float __libm_scalbnf (float x, int n, int int_type) -// input floating point f8 and int n (r33), int int_type (r34) -// output floating point f8 -// -// int_type = 0 if int is 32 bits -// int_type = 1 if int is 64 bits -// -// Returns x* 2**n using an fma and detects overflow -// and underflow. -// -// -// Strategy: -// Compute biased exponent of result exp_Result = N + exp_X -// Break into ranges: -// exp_Result > 0x1007e -> Certain overflow -// exp_Result = 0x1007e -> Possible overflow -// 0x0ff81 <= exp_Result < 0x1007e -> No over/underflow (main path) -// 0x0ff81 - 23 <= exp_Result < 0x0ff81 -> Possible underflow -// exp_Result < 0x0ff81 - 23 -> Certain underflow - -FR_Big = f6 -FR_NBig = f7 -FR_Floating_X = f8 -FR_Result = f8 -FR_Result2 = f9 -FR_Result3 = f10 -FR_Norm_X = f11 -FR_Two_N = f12 - -GR_neg_ov_limit= r14 -GR_N_Biased = r15 -GR_Big = r16 -GR_NBig = r17 -GR_exp_Result = r18 -GR_pos_ov_limit= r19 -GR_Bias = r20 -GR_N_as_int = r21 -GR_signexp_X = r22 -GR_exp_X = r23 -GR_exp_mask = r24 -GR_max_exp = r25 -GR_min_exp = r26 -GR_min_den_exp = r27 - -GR_SAVE_B0 = r32 -GR_SAVE_GP = r33 -GR_SAVE_PFS = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Tag = r38 - -.section .text -GLOBAL_LIBM_ENTRY(__libm_scalbnf) - -// -// Is x NAN, INF, ZERO, +-? -// Build the exponent Bias -// -{ .mfi - getf.exp GR_signexp_X = FR_Floating_X // Get signexp of x - fclass.m p6,p0 = FR_Floating_X, 0xe7 // @snan | @qnan | @inf | @zero - mov GR_Bias = 0x0ffff -} -// -// Normalize x -// Is integer type 32 bits? -// -{ .mfi - mov GR_Big = 35000 // If N this big then certain overflow - fnorm.s1 FR_Norm_X = FR_Floating_X - cmp.eq p8,p9 = r34,r0 -} -;; - -// Sign extend N if int is 32 bits -{ .mfi -(p9) mov GR_N_as_int = r33 // Copy N if int is 64 bits - fclass.m p9,p0 = FR_Floating_X, 0x0b // Test for x=unorm -(p8) sxt4 GR_N_as_int = r33 // Sign extend N if int is 32 bits -} -{ .mfi - mov GR_NBig = -35000 // If N this small then certain underflow - nop.f 0 - mov GR_max_exp = 0x1007e // Exponent of maximum float -} -;; - -// Create biased exponent for 2**N -{ .mfi - add GR_N_Biased = GR_Bias,GR_N_as_int - nop.f 0 - cmp.ge p7, p0 = GR_N_as_int, GR_Big // Certain overflow? -} -{ .mib - cmp.le p8, p0 = GR_N_as_int, GR_NBig // Certain underflow? - mov GR_min_exp = 0x0ff81 // Exponent of minimum float -(p9) br.cond.spnt SCALBNF_UNORM // Branch if x=unorm -} -;; - -SCALBNF_COMMON: -// Main path continues. Also return here from x=unorm path. -// Create 2**N -.pred.rel "mutex",p7,p8 -{ .mfi - setf.exp FR_Two_N = GR_N_Biased - nop.f 0 -(p7) mov GR_N_as_int = GR_Big // Limit max N -} -{ .mfi -(p8) mov GR_N_as_int = GR_NBig // Limit min N - nop.f 0 -(p8) cmp.eq p7,p0 = r0,r0 // Set p7 if |N| big -} -;; - -// -// Create biased exponent for 2**N for N big -// Is N zero? -// -{ .mfi -(p7) add GR_N_Biased = GR_Bias,GR_N_as_int - nop.f 0 - cmp.eq.or p6,p0 = r33,r0 -} -{ .mfi - mov GR_pos_ov_limit = 0x1007f // Exponent for positive overflow - nop.f 0 - mov GR_exp_mask = 0x1ffff // Exponent mask -} -;; - -// -// Create 2**N for N big -// Return x when N = 0 or X = Nan, Inf, Zero -// -{ .mfi -(p7) setf.exp FR_Two_N = GR_N_Biased - nop.f 0 - mov GR_min_den_exp = 0x0ff81 - 23 // Exponent of min denorm float -} -{ .mfb - and GR_exp_X = GR_exp_mask, GR_signexp_X -(p6) fma.s.s0 FR_Result = FR_Floating_X, f1, f0 -(p6) br.ret.spnt b0 -} -;; - -// -// Raise Denormal operand flag with compare -// Compute biased result exponent -// -{ .mfi - add GR_exp_Result = GR_exp_X, GR_N_as_int - fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 - mov GR_neg_ov_limit = 0x3007f // Exponent for negative overflow -} -;; - -// -// Do final operation -// -{ .mfi - cmp.lt p7,p6 = GR_exp_Result, GR_max_exp // Test no overflow - fma.s.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 - cmp.lt p9,p0 = GR_exp_Result, GR_min_den_exp // Test sure underflow -} -{ .mfb - nop.m 0 - nop.f 0 -(p9) br.cond.spnt SCALBNF_UNDERFLOW // Branch if certain underflow -} -;; - -{ .mib -(p6) cmp.gt.unc p6,p8 = GR_exp_Result, GR_max_exp // Test sure overflow -(p7) cmp.ge.unc p7,p9 = GR_exp_Result, GR_min_exp // Test no over/underflow -(p7) br.ret.sptk b0 // Return from main path -} -;; - -{ .bbb -(p6) br.cond.spnt SCALBNF_OVERFLOW // Branch if certain overflow -(p8) br.cond.spnt SCALBNF_POSSIBLE_OVERFLOW // Branch if possible overflow -(p9) br.cond.spnt SCALBNF_POSSIBLE_UNDERFLOW // Branch if possible underflow -} -;; - -// Here if possible underflow. -// Resulting exponent: 0x0ff81-23 <= exp_Result < 0x0ff81 -SCALBNF_POSSIBLE_UNDERFLOW: -// -// Here if possible overflow. -// Resulting exponent: 0x1007e = exp_Result -SCALBNF_POSSIBLE_OVERFLOW: - -// Set up necessary status fields -// -// S0 user supplied status -// S2 user supplied status + WRE + TD (Overflows) -// S3 user supplied status + FZ + TD (Underflows) -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x41 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x42 - nop.i 0 -} -;; - -// -// Do final operation with s2 and s3 -// -{ .mfi - setf.exp FR_NBig = GR_neg_ov_limit - fma.s.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -{ .mfi - setf.exp FR_Big = GR_pos_ov_limit - fma.s.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -;; - -// Check for overflow or underflow. -// Restore s3 -// Restore s2 -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x40 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 - nop.i 0 -} -;; - -// -// Is the result zero? -// -{ .mfi - nop.m 0 - fclass.m p6, p0 = FR_Result3, 0x007 - nop.i 0 -} -{ .mfi - nop.m 0 - fcmp.ge.s1 p7, p8 = FR_Result2 , FR_Big - nop.i 0 -} -;; - -// -// Detect masked underflow - Tiny + Inexact Only -// -{ .mfi - nop.m 0 -(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 - nop.i 0 -} -;; - -// -// Is result bigger the allowed range? -// Branch out for underflow -// -{ .mfb - nop.m 0 -(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig -(p6) br.cond.spnt SCALBNF_UNDERFLOW -} -;; - -// -// Branch out for overflow -// -{ .bbb -(p7) br.cond.spnt SCALBNF_OVERFLOW -(p9) br.cond.spnt SCALBNF_OVERFLOW - br.ret.sptk b0 // Return from main path. -} -;; - -// Here if result overflows -SCALBNF_OVERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 178, r0 // Set error tag for overflow - br.cond.sptk __libm_error_region // Call error support for overflow -} -;; - -// Here if result underflows -SCALBNF_UNDERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 179, r0 // Set error tag for underflow - br.cond.sptk __libm_error_region // Call error support for underflow -} -;; - -// Here if x=unorm -SCALBNF_UNORM: -{ .mib - getf.exp GR_signexp_X = FR_Norm_X // Get signexp of normalized x - nop.i 0 - br.cond.sptk SCALBNF_COMMON // Return to main path -} -;; - - -GLOBAL_LIBM_END(__libm_scalbnf) -LOCAL_LIBM_ENTRY(__libm_error_region) - -// -// Get stack address of N -// -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs -} -// -// Adjust sp -// -{ .mfi -.fframe 64 - add sp=-64,sp - nop.f 0 - mov GR_SAVE_GP=gp -};; - -// -// Store N on stack in correct position -// Locate the address of x on stack -// -{ .mmi - st8 [GR_Parameter_Y] = GR_N_as_int,16 - add GR_Parameter_X = 16,sp -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 -};; - -// -// Store x on the stack. -// Get address for result on stack. -// -.body -{ .mib - stfs [GR_Parameter_X] = FR_Norm_X - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = FR_Result - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# -};; - -// -// Get location of result on stack -// -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -// -// Get the new result -// -{ .mmi - ldfs FR_Result = [GR_Parameter_RESULT] -.restore sp - add sp = 64,sp - mov b0 = GR_SAVE_B0 -};; - -// -// Restore gp, ar.pfs and return -// -{ .mib - mov gp = GR_SAVE_GP - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_libm_scalbnl.S b/sysdeps/ia64/fpu/s_libm_scalbnl.S deleted file mode 100644 index 1edf9a05d3..0000000000 --- a/sysdeps/ia64/fpu/s_libm_scalbnl.S +++ /dev/null @@ -1,452 +0,0 @@ -.file "libm_scalbnl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 01/26/01 Scalbnl completely reworked and now standalone version -// 01/04/02 Added handling for int 32 or 64 bits -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 08/04/03 Improved performance -// -// API -//============================================================== -// long double __libm_scalbnl (long double x, int n, int int_type) -// input floating point f8 and int n (r34), int int_type (r35) -// output floating point f8 -// -// int_type = 0 if int is 32 bits -// int_type = 1 if int is 64 bits -// -// Returns x* 2**n using an fma and detects overflow -// and underflow. -// -// -// Strategy: -// Compute biased exponent of result exp_Result = N + exp_X -// Break into ranges: -// exp_Result > 0x13ffe -> Certain overflow -// exp_Result = 0x13ffe -> Possible overflow -// 0x0c001 <= exp_Result < 0x13ffe -> No over/underflow (main path) -// 0x0c001 - 63 <= exp_Result < 0x0c001 -> Possible underflow -// exp_Result < 0x0c001 - 63 -> Certain underflow - -FR_Big = f6 -FR_NBig = f7 -FR_Floating_X = f8 -FR_Result = f8 -FR_Result2 = f9 -FR_Result3 = f10 -FR_Norm_X = f11 -FR_Two_N = f12 - -GR_neg_ov_limit= r14 -GR_N_Biased = r15 -GR_Big = r16 -GR_NBig = r17 -GR_exp_Result = r18 -GR_pos_ov_limit= r19 -GR_Bias = r20 -GR_N_as_int = r21 -GR_signexp_X = r22 -GR_exp_X = r23 -GR_exp_mask = r24 -GR_max_exp = r25 -GR_min_exp = r26 -GR_min_den_exp = r27 - -GR_SAVE_B0 = r32 -GR_SAVE_GP = r33 -GR_SAVE_PFS = r34 -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Tag = r38 - -.section .text -GLOBAL_LIBM_ENTRY(__libm_scalbnl) - -// -// Is x NAN, INF, ZERO, +-? -// Build the exponent Bias -// -{ .mfi - getf.exp GR_signexp_X = FR_Floating_X // Get signexp of x - fclass.m p6,p0 = FR_Floating_X, 0xe7 // @snan | @qnan | @inf | @zero - mov GR_Bias = 0x0ffff -} -// -// Normalize x -// Is integer type 32 bits? -// -{ .mfi - mov GR_Big = 35000 // If N this big then certain overflow - fnorm.s1 FR_Norm_X = FR_Floating_X - cmp.eq p8,p9 = r35,r0 -} -;; - -// Sign extend N if int is 32 bits -{ .mfi -(p9) mov GR_N_as_int = r34 // Copy N if int is 64 bits - fclass.m p9,p0 = FR_Floating_X, 0x0b // Test for x=unorm -(p8) sxt4 GR_N_as_int = r34 // Sign extend N if int is 32 bits -} -{ .mfi - mov GR_NBig = -35000 // If N this small then certain underflow - nop.f 0 - mov GR_max_exp = 0x13ffe // Exponent of maximum long double -} -;; - -// Create biased exponent for 2**N -{ .mfi - add GR_N_Biased = GR_Bias,GR_N_as_int - nop.f 0 - cmp.ge p7, p0 = GR_N_as_int, GR_Big // Certain overflow? -} -{ .mib - cmp.le p8, p0 = GR_N_as_int, GR_NBig // Certain underflow? - mov GR_min_exp = 0x0c001 // Exponent of minimum long double -(p9) br.cond.spnt SCALBNL_UNORM // Branch if x=unorm -} -;; - -SCALBNL_COMMON: -// Main path continues. Also return here from x=unorm path. -// Create 2**N -.pred.rel "mutex",p7,p8 -{ .mfi - setf.exp FR_Two_N = GR_N_Biased - nop.f 0 -(p7) mov GR_N_as_int = GR_Big // Limit max N -} -{ .mfi -(p8) mov GR_N_as_int = GR_NBig // Limit min N - nop.f 0 -(p8) cmp.eq p7,p0 = r0,r0 // Set p7 if |N| big -} -;; - -// -// Create biased exponent for 2**N for N big -// Is N zero? -// -{ .mfi -(p7) add GR_N_Biased = GR_Bias,GR_N_as_int - nop.f 0 - cmp.eq.or p6,p0 = r34,r0 -} -{ .mfi - mov GR_pos_ov_limit = 0x13fff // Exponent for positive overflow - nop.f 0 - mov GR_exp_mask = 0x1ffff // Exponent mask -} -;; - -// -// Create 2**N for N big -// Return x when N = 0 or X = Nan, Inf, Zero -// -{ .mfi -(p7) setf.exp FR_Two_N = GR_N_Biased - nop.f 0 - mov GR_min_den_exp = 0x0c001 - 63 // Exp of min denorm long dble -} -{ .mfb - and GR_exp_X = GR_exp_mask, GR_signexp_X -(p6) fma.s0 FR_Result = FR_Floating_X, f1, f0 -(p6) br.ret.spnt b0 -} -;; - -// -// Raise Denormal operand flag with compare -// Compute biased result exponent -// -{ .mfi - add GR_exp_Result = GR_exp_X, GR_N_as_int - fcmp.ge.s0 p0,p11 = FR_Floating_X,f0 - mov GR_neg_ov_limit = 0x33fff // Exponent for negative overflow -} -;; - -// -// Do final operation -// -{ .mfi - cmp.lt p7,p6 = GR_exp_Result, GR_max_exp // Test no overflow - fma.s0 FR_Result = FR_Two_N,FR_Norm_X,f0 - cmp.lt p9,p0 = GR_exp_Result, GR_min_den_exp // Test sure underflow -} -{ .mfb - nop.m 0 - nop.f 0 -(p9) br.cond.spnt SCALBNL_UNDERFLOW // Branch if certain underflow -} -;; - -{ .mib -(p6) cmp.gt.unc p6,p8 = GR_exp_Result, GR_max_exp // Test sure overflow -(p7) cmp.ge.unc p7,p9 = GR_exp_Result, GR_min_exp // Test no over/underflow -(p7) br.ret.sptk b0 // Return from main path -} -;; - -{ .bbb -(p6) br.cond.spnt SCALBNL_OVERFLOW // Branch if certain overflow -(p8) br.cond.spnt SCALBNL_POSSIBLE_OVERFLOW // Branch if possible overflow -(p9) br.cond.spnt SCALBNL_POSSIBLE_UNDERFLOW // Branch if possible underflow -} -;; - -// Here if possible underflow. -// Resulting exponent: 0x0c001-63 <= exp_Result < 0x0c001 -SCALBNL_POSSIBLE_UNDERFLOW: -// -// Here if possible overflow. -// Resulting exponent: 0x13ffe = exp_Result -SCALBNL_POSSIBLE_OVERFLOW: - -// Set up necessary status fields -// -// S0 user supplied status -// S2 user supplied status + WRE + TD (Overflows) -// S3 user supplied status + FZ + TD (Underflows) -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x41 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x42 - nop.i 0 -} -;; - -// -// Do final operation with s2 and s3 -// -{ .mfi - setf.exp FR_NBig = GR_neg_ov_limit - fma.s3 FR_Result3 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -{ .mfi - setf.exp FR_Big = GR_pos_ov_limit - fma.s2 FR_Result2 = FR_Two_N,FR_Norm_X,f0 - nop.i 0 -} -;; - -// Check for overflow or underflow. -// Restore s3 -// Restore s2 -// -{ .mfi - nop.m 0 - fsetc.s3 0x7F,0x40 - nop.i 0 -} -{ .mfi - nop.m 0 - fsetc.s2 0x7F,0x40 - nop.i 0 -} -;; - -// -// Is the result zero? -// -{ .mfi - nop.m 0 - fclass.m p6, p0 = FR_Result3, 0x007 - nop.i 0 -} -{ .mfi - nop.m 0 - fcmp.ge.s1 p7, p8 = FR_Result2 , FR_Big - nop.i 0 -} -;; - -// -// Detect masked underflow - Tiny + Inexact Only -// -{ .mfi - nop.m 0 -(p6) fcmp.neq.unc.s1 p6, p0 = FR_Result , FR_Result2 - nop.i 0 -} -;; - -// -// Is result bigger the allowed range? -// Branch out for underflow -// -{ .mfb - nop.m 0 -(p8) fcmp.le.unc.s1 p9, p10 = FR_Result2 , FR_NBig -(p6) br.cond.spnt SCALBNL_UNDERFLOW -} -;; - -// -// Branch out for overflow -// -{ .bbb -(p7) br.cond.spnt SCALBNL_OVERFLOW -(p9) br.cond.spnt SCALBNL_OVERFLOW - br.ret.sptk b0 // Return from main path. -} -;; - -// Here if result overflows -SCALBNL_OVERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 174, r0 // Set error tag for overflow - br.cond.sptk __libm_error_region // Call error support for overflow -} -;; - -// Here if result underflows -SCALBNL_UNDERFLOW: -{ .mib - alloc r32=ar.pfs,3,0,4,0 - addl GR_Tag = 175, r0 // Set error tag for underflow - br.cond.sptk __libm_error_region // Call error support for underflow -} -;; - -// Here if x=unorm -SCALBNL_UNORM: -{ .mib - getf.exp GR_signexp_X = FR_Norm_X // Get signexp of normalized x - nop.i 0 - br.cond.sptk SCALBNL_COMMON // Return to main path -} -;; - - -GLOBAL_LIBM_END(__libm_scalbnl) -LOCAL_LIBM_ENTRY(__libm_error_region) - -// -// Get stack address of N -// -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs -} -// -// Adjust sp -// -{ .mfi -.fframe 64 - add sp=-64,sp - nop.f 0 - mov GR_SAVE_GP=gp -};; - -// -// Store N on stack in correct position -// Locate the address of x on stack -// -{ .mmi - st8 [GR_Parameter_Y] = GR_N_as_int,16 - add GR_Parameter_X = 16,sp -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 -};; - -// -// Store x on the stack. -// Get address for result on stack. -// -.body -{ .mib - stfe [GR_Parameter_X] = FR_Norm_X - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 -} -{ .mib - stfe [GR_Parameter_Y] = FR_Result - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# -};; - -// -// Get location of result on stack -// -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -// -// Get the new result -// -{ .mmi - ldfe FR_Result = [GR_Parameter_RESULT] -.restore sp - add sp = 64,sp - mov b0 = GR_SAVE_B0 -};; - -// -// Restore gp, ar.pfs and return -// -{ .mib - mov gp = GR_SAVE_GP - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_log1p.S b/sysdeps/ia64/fpu/s_log1p.S deleted file mode 100644 index 94f9f872e9..0000000000 --- a/sysdeps/ia64/fpu/s_log1p.S +++ /dev/null @@ -1,1102 +0,0 @@ -.file "log1p.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 06/29/01 Improved speed of all paths -// 05/20/02 Cleaned up namespace and sf0 syntax -// 10/02/02 Improved performance by basing on log algorithm -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 04/18/03 Eliminate possible WAW dependency warning -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// double log1p(double) -// -// log1p(x) = log(x+1) -// -// Overview of operation -//============================================================== -// Background -// ---------- -// -// This algorithm is based on fact that -// log1p(x) = log(1+x) and -// log(a b) = log(a) + log(b). -// In our case we have 1+x = 2^N f, where 1 <= f < 2. -// So -// log(1+x) = log(2^N f) = log(2^N) + log(f) = n*log(2) + log(f) -// -// To calculate log(f) we do following -// log(f) = log(f * frcpa(f) / frcpa(f)) = -// = log(f * frcpa(f)) + log(1/frcpa(f)) -// -// According to definition of IA-64's frcpa instruction it's a -// floating point that approximates 1/f using a lookup on the -// top of 8 bits of the input number's + 1 significand with relative -// error < 2^(-8.886). So we have following -// -// |(1/f - frcpa(f)) / (1/f))| = |1 - f*frcpa(f)| < 1/256 -// -// and -// -// log(f) = log(f * frcpa(f)) + log(1/frcpa(f)) = -// = log(1 + r) + T -// -// The first value can be computed by polynomial P(r) approximating -// log(1 + r) on |r| < 1/256 and the second is precomputed tabular -// value defined by top 8 bit of f. -// -// Finally we have that log(1+x) ~ (N*log(2) + T) + P(r) -// -// Note that if input argument is close to 0.0 (in our case it means -// that |x| < 1/256) we can use just polynomial approximation -// because 1+x = 2^0 * f = f = 1 + r and -// log(1+x) = log(1 + r) ~ P(r) -// -// -// Implementation -// -------------- -// -// 1. |x| >= 2^(-8), and x > -1 -// InvX = frcpa(x+1) -// r = InvX*(x+1) - 1 -// P(r) = r*((r*A3 - A2) + r^4*((A4 + r*A5) + r^2*(A6 + r*A7)), -// all coefficients are calculated in quad and rounded to double -// precision. A7,A6,A5,A4 are stored in memory whereas A3 and A2 -// created with setf. -// -// N = float(n) where n is true unbiased exponent of x -// -// T is tabular value of log(1/frcpa(x)) calculated in quad precision -// and represented by two floating-point numbers 64-bit Thi and 32-bit Tlo. -// To load Thi,Tlo we get bits from 55 to 62 of register format significand -// as index and calculate two addresses -// ad_Thi = Thi_table_base_addr + 8 * index -// ad_Tlo = Tlo_table_base_addr + 4 * index -// -// L1 (log(2)) is calculated in quad -// precision and represented by two floating-point 64-bit numbers L1hi,L1lo -// stored in memory. -// -// And final result = ((L1hi*N + Thi) + (N*L1lo + Tlo)) + P(r) -// -// -// 2. 2^(-80) <= |x| < 2^(-8) -// r = x -// P(r) = r*((r*A3 - A2) + r^4*((A4 + r*A5) + r^2*(A6 + r*A7)), -// A7,A6,A5,A4,A3,A2 are the same as in case |x| >= 1/256 -// -// And final results -// log(1+x) = P(r) -// -// 3. 0 < |x| < 2^(-80) -// Although log1p(x) is basically x, we would like to preserve the inexactness -// nature as well as consistent behavior under different rounding modes. -// We can do this by computing the result as -// -// log1p(x) = x - x*x -// -// -// Note: NaT, any NaNs, +/-INF, +/-0, negatives and unnormalized numbers are -// filtered and processed on special branches. -// - -// -// Special values -//============================================================== -// -// log1p(-1) = -inf // Call error support -// -// log1p(+qnan) = +qnan -// log1p(-qnan) = -qnan -// log1p(+snan) = +qnan -// log1p(-snan) = -qnan -// -// log1p(x),x<-1= QNAN Indefinite // Call error support -// log1p(-inf) = QNAN Indefinite -// log1p(+inf) = +inf -// log1p(+/-0) = +/-0 -// -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f7 -> f15, f32 -> f40 -// -// General registers used: -// r8 -> r11 -// r14 -> r20 -// -// Predicate registers used: -// p6 -> p12 - -// Assembly macros -//============================================================== -GR_TAG = r8 -GR_ad_1 = r8 -GR_ad_2 = r9 -GR_Exp = r10 -GR_N = r11 - -GR_signexp_x = r14 -GR_exp_mask = r15 -GR_exp_bias = r16 -GR_05 = r17 -GR_A3 = r18 -GR_Sig = r19 -GR_Ind = r19 -GR_exp_x = r20 - - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - - -FR_NormX = f7 -FR_RcpX = f9 -FR_r = f10 -FR_r2 = f11 -FR_r4 = f12 -FR_N = f13 -FR_Ln2hi = f14 -FR_Ln2lo = f15 - -FR_A7 = f32 -FR_A6 = f33 -FR_A5 = f34 -FR_A4 = f35 -FR_A3 = f36 -FR_A2 = f37 - -FR_Thi = f38 -FR_NxLn2hipThi = f38 -FR_NxLn2pT = f38 -FR_Tlo = f39 -FR_NxLn2lopTlo = f39 - -FR_Xp1 = f40 - - -FR_Y = f1 -FR_X = f10 -FR_RESULT = f8 - - -// Data -//============================================================== -RODATA -.align 16 - -LOCAL_OBJECT_START(log_data) -// coefficients of polynomial approximation -data8 0x3FC2494104381A8E // A7 -data8 0xBFC5556D556BBB69 // A6 -data8 0x3FC999999988B5E9 // A5 -data8 0xBFCFFFFFFFF6FFF5 // A4 -// -// hi parts of ln(1/frcpa(1+i/256)), i=0...255 -data8 0x3F60040155D5889D // 0 -data8 0x3F78121214586B54 // 1 -data8 0x3F841929F96832EF // 2 -data8 0x3F8C317384C75F06 // 3 -data8 0x3F91A6B91AC73386 // 4 -data8 0x3F95BA9A5D9AC039 // 5 -data8 0x3F99D2A8074325F3 // 6 -data8 0x3F9D6B2725979802 // 7 -data8 0x3FA0C58FA19DFAA9 // 8 -data8 0x3FA2954C78CBCE1A // 9 -data8 0x3FA4A94D2DA96C56 // 10 -data8 0x3FA67C94F2D4BB58 // 11 -data8 0x3FA85188B630F068 // 12 -data8 0x3FAA6B8ABE73AF4C // 13 -data8 0x3FAC441E06F72A9E // 14 -data8 0x3FAE1E6713606D06 // 15 -data8 0x3FAFFA6911AB9300 // 16 -data8 0x3FB0EC139C5DA600 // 17 -data8 0x3FB1DBD2643D190B // 18 -data8 0x3FB2CC7284FE5F1C // 19 -data8 0x3FB3BDF5A7D1EE64 // 20 -data8 0x3FB4B05D7AA012E0 // 21 -data8 0x3FB580DB7CEB5701 // 22 -data8 0x3FB674F089365A79 // 23 -data8 0x3FB769EF2C6B568D // 24 -data8 0x3FB85FD927506A47 // 25 -data8 0x3FB9335E5D594988 // 26 -data8 0x3FBA2B0220C8E5F4 // 27 -data8 0x3FBB0004AC1A86AB // 28 -data8 0x3FBBF968769FCA10 // 29 -data8 0x3FBCCFEDBFEE13A8 // 30 -data8 0x3FBDA727638446A2 // 31 -data8 0x3FBEA3257FE10F79 // 32 -data8 0x3FBF7BE9FEDBFDE5 // 33 -data8 0x3FC02AB352FF25F3 // 34 -data8 0x3FC097CE579D204C // 35 -data8 0x3FC1178E8227E47B // 36 -data8 0x3FC185747DBECF33 // 37 -data8 0x3FC1F3B925F25D41 // 38 -data8 0x3FC2625D1E6DDF56 // 39 -data8 0x3FC2D1610C868139 // 40 -data8 0x3FC340C59741142E // 41 -data8 0x3FC3B08B6757F2A9 // 42 -data8 0x3FC40DFB08378003 // 43 -data8 0x3FC47E74E8CA5F7C // 44 -data8 0x3FC4EF51F6466DE4 // 45 -data8 0x3FC56092E02BA516 // 46 -data8 0x3FC5D23857CD74D4 // 47 -data8 0x3FC6313A37335D76 // 48 -data8 0x3FC6A399DABBD383 // 49 -data8 0x3FC70337DD3CE41A // 50 -data8 0x3FC77654128F6127 // 51 -data8 0x3FC7E9D82A0B022D // 52 -data8 0x3FC84A6B759F512E // 53 -data8 0x3FC8AB47D5F5A30F // 54 -data8 0x3FC91FE49096581B // 55 -data8 0x3FC981634011AA75 // 56 -data8 0x3FC9F6C407089664 // 57 -data8 0x3FCA58E729348F43 // 58 -data8 0x3FCABB55C31693AC // 59 -data8 0x3FCB1E104919EFD0 // 60 -data8 0x3FCB94EE93E367CA // 61 -data8 0x3FCBF851C067555E // 62 -data8 0x3FCC5C0254BF23A5 // 63 -data8 0x3FCCC000C9DB3C52 // 64 -data8 0x3FCD244D99C85673 // 65 -data8 0x3FCD88E93FB2F450 // 66 -data8 0x3FCDEDD437EAEF00 // 67 -data8 0x3FCE530EFFE71012 // 68 -data8 0x3FCEB89A1648B971 // 69 -data8 0x3FCF1E75FADF9BDE // 70 -data8 0x3FCF84A32EAD7C35 // 71 -data8 0x3FCFEB2233EA07CD // 72 -data8 0x3FD028F9C7035C1C // 73 -data8 0x3FD05C8BE0D9635A // 74 -data8 0x3FD085EB8F8AE797 // 75 -data8 0x3FD0B9C8E32D1911 // 76 -data8 0x3FD0EDD060B78080 // 77 -data8 0x3FD122024CF0063F // 78 -data8 0x3FD14BE2927AECD4 // 79 -data8 0x3FD180618EF18ADF // 80 -data8 0x3FD1B50BBE2FC63B // 81 -data8 0x3FD1DF4CC7CF242D // 82 -data8 0x3FD214456D0EB8D4 // 83 -data8 0x3FD23EC5991EBA49 // 84 -data8 0x3FD2740D9F870AFB // 85 -data8 0x3FD29ECDABCDFA03 // 86 -data8 0x3FD2D46602ADCCEE // 87 -data8 0x3FD2FF66B04EA9D4 // 88 -data8 0x3FD335504B355A37 // 89 -data8 0x3FD360925EC44F5C // 90 -data8 0x3FD38BF1C3337E74 // 91 -data8 0x3FD3C25277333183 // 92 -data8 0x3FD3EDF463C1683E // 93 -data8 0x3FD419B423D5E8C7 // 94 -data8 0x3FD44591E0539F48 // 95 -data8 0x3FD47C9175B6F0AD // 96 -data8 0x3FD4A8B341552B09 // 97 -data8 0x3FD4D4F39089019F // 98 -data8 0x3FD501528DA1F967 // 99 -data8 0x3FD52DD06347D4F6 // 100 -data8 0x3FD55A6D3C7B8A89 // 101 -data8 0x3FD5925D2B112A59 // 102 -data8 0x3FD5BF406B543DB1 // 103 -data8 0x3FD5EC433D5C35AD // 104 -data8 0x3FD61965CDB02C1E // 105 -data8 0x3FD646A84935B2A1 // 106 -data8 0x3FD6740ADD31DE94 // 107 -data8 0x3FD6A18DB74A58C5 // 108 -data8 0x3FD6CF31058670EC // 109 -data8 0x3FD6F180E852F0B9 // 110 -data8 0x3FD71F5D71B894EF // 111 -data8 0x3FD74D5AEFD66D5C // 112 -data8 0x3FD77B79922BD37D // 113 -data8 0x3FD7A9B9889F19E2 // 114 -data8 0x3FD7D81B037EB6A6 // 115 -data8 0x3FD8069E33827230 // 116 -data8 0x3FD82996D3EF8BCA // 117 -data8 0x3FD85855776DCBFA // 118 -data8 0x3FD8873658327CCE // 119 -data8 0x3FD8AA75973AB8CE // 120 -data8 0x3FD8D992DC8824E4 // 121 -data8 0x3FD908D2EA7D9511 // 122 -data8 0x3FD92C59E79C0E56 // 123 -data8 0x3FD95BD750EE3ED2 // 124 -data8 0x3FD98B7811A3EE5B // 125 -data8 0x3FD9AF47F33D406B // 126 -data8 0x3FD9DF270C1914A7 // 127 -data8 0x3FDA0325ED14FDA4 // 128 -data8 0x3FDA33440224FA78 // 129 -data8 0x3FDA57725E80C382 // 130 -data8 0x3FDA87D0165DD199 // 131 -data8 0x3FDAAC2E6C03F895 // 132 -data8 0x3FDADCCC6FDF6A81 // 133 -data8 0x3FDB015B3EB1E790 // 134 -data8 0x3FDB323A3A635948 // 135 -data8 0x3FDB56FA04462909 // 136 -data8 0x3FDB881AA659BC93 // 137 -data8 0x3FDBAD0BEF3DB164 // 138 -data8 0x3FDBD21297781C2F // 139 -data8 0x3FDC039236F08818 // 140 -data8 0x3FDC28CB1E4D32FC // 141 -data8 0x3FDC4E19B84723C1 // 142 -data8 0x3FDC7FF9C74554C9 // 143 -data8 0x3FDCA57B64E9DB05 // 144 -data8 0x3FDCCB130A5CEBAF // 145 -data8 0x3FDCF0C0D18F326F // 146 -data8 0x3FDD232075B5A201 // 147 -data8 0x3FDD490246DEFA6B // 148 -data8 0x3FDD6EFA918D25CD // 149 -data8 0x3FDD9509707AE52F // 150 -data8 0x3FDDBB2EFE92C554 // 151 -data8 0x3FDDEE2F3445E4AE // 152 -data8 0x3FDE148A1A2726CD // 153 -data8 0x3FDE3AFC0A49FF3F // 154 -data8 0x3FDE6185206D516D // 155 -data8 0x3FDE882578823D51 // 156 -data8 0x3FDEAEDD2EAC990C // 157 -data8 0x3FDED5AC5F436BE2 // 158 -data8 0x3FDEFC9326D16AB8 // 159 -data8 0x3FDF2391A21575FF // 160 -data8 0x3FDF4AA7EE03192C // 161 -data8 0x3FDF71D627C30BB0 // 162 -data8 0x3FDF991C6CB3B379 // 163 -data8 0x3FDFC07ADA69A90F // 164 -data8 0x3FDFE7F18EB03D3E // 165 -data8 0x3FE007C053C5002E // 166 -data8 0x3FE01B942198A5A0 // 167 -data8 0x3FE02F74400C64EA // 168 -data8 0x3FE04360BE7603AC // 169 -data8 0x3FE05759AC47FE33 // 170 -data8 0x3FE06B5F1911CF51 // 171 -data8 0x3FE078BF0533C568 // 172 -data8 0x3FE08CD9687E7B0E // 173 -data8 0x3FE0A10074CF9019 // 174 -data8 0x3FE0B5343A234476 // 175 -data8 0x3FE0C974C89431CD // 176 -data8 0x3FE0DDC2305B9886 // 177 -data8 0x3FE0EB524BAFC918 // 178 -data8 0x3FE0FFB54213A475 // 179 -data8 0x3FE114253DA97D9F // 180 -data8 0x3FE128A24F1D9AFF // 181 -data8 0x3FE1365252BF0864 // 182 -data8 0x3FE14AE558B4A92D // 183 -data8 0x3FE15F85A19C765B // 184 -data8 0x3FE16D4D38C119FA // 185 -data8 0x3FE18203C20DD133 // 186 -data8 0x3FE196C7BC4B1F3A // 187 -data8 0x3FE1A4A738B7A33C // 188 -data8 0x3FE1B981C0C9653C // 189 -data8 0x3FE1CE69E8BB106A // 190 -data8 0x3FE1DC619DE06944 // 191 -data8 0x3FE1F160A2AD0DA3 // 192 -data8 0x3FE2066D7740737E // 193 -data8 0x3FE2147DBA47A393 // 194 -data8 0x3FE229A1BC5EBAC3 // 195 -data8 0x3FE237C1841A502E // 196 -data8 0x3FE24CFCE6F80D9A // 197 -data8 0x3FE25B2C55CD5762 // 198 -data8 0x3FE2707F4D5F7C40 // 199 -data8 0x3FE285E0842CA383 // 200 -data8 0x3FE294294708B773 // 201 -data8 0x3FE2A9A2670AFF0C // 202 -data8 0x3FE2B7FB2C8D1CC0 // 203 -data8 0x3FE2C65A6395F5F5 // 204 -data8 0x3FE2DBF557B0DF42 // 205 -data8 0x3FE2EA64C3F97654 // 206 -data8 0x3FE3001823684D73 // 207 -data8 0x3FE30E97E9A8B5CC // 208 -data8 0x3FE32463EBDD34E9 // 209 -data8 0x3FE332F4314AD795 // 210 -data8 0x3FE348D90E7464CF // 211 -data8 0x3FE35779F8C43D6D // 212 -data8 0x3FE36621961A6A99 // 213 -data8 0x3FE37C299F3C366A // 214 -data8 0x3FE38AE2171976E7 // 215 -data8 0x3FE399A157A603E7 // 216 -data8 0x3FE3AFCCFE77B9D1 // 217 -data8 0x3FE3BE9D503533B5 // 218 -data8 0x3FE3CD7480B4A8A2 // 219 -data8 0x3FE3E3C43918F76C // 220 -data8 0x3FE3F2ACB27ED6C6 // 221 -data8 0x3FE4019C2125CA93 // 222 -data8 0x3FE4181061389722 // 223 -data8 0x3FE42711518DF545 // 224 -data8 0x3FE436194E12B6BF // 225 -data8 0x3FE445285D68EA69 // 226 -data8 0x3FE45BCC464C893A // 227 -data8 0x3FE46AED21F117FC // 228 -data8 0x3FE47A1527E8A2D3 // 229 -data8 0x3FE489445EFFFCCB // 230 -data8 0x3FE4A018BCB69835 // 231 -data8 0x3FE4AF5A0C9D65D7 // 232 -data8 0x3FE4BEA2A5BDBE87 // 233 -data8 0x3FE4CDF28F10AC46 // 234 -data8 0x3FE4DD49CF994058 // 235 -data8 0x3FE4ECA86E64A683 // 236 -data8 0x3FE503C43CD8EB68 // 237 -data8 0x3FE513356667FC57 // 238 -data8 0x3FE522AE0738A3D7 // 239 -data8 0x3FE5322E26867857 // 240 -data8 0x3FE541B5CB979809 // 241 -data8 0x3FE55144FDBCBD62 // 242 -data8 0x3FE560DBC45153C6 // 243 -data8 0x3FE5707A26BB8C66 // 244 -data8 0x3FE587F60ED5B8FF // 245 -data8 0x3FE597A7977C8F31 // 246 -data8 0x3FE5A760D634BB8A // 247 -data8 0x3FE5B721D295F10E // 248 -data8 0x3FE5C6EA94431EF9 // 249 -data8 0x3FE5D6BB22EA86F5 // 250 -data8 0x3FE5E6938645D38F // 251 -data8 0x3FE5F673C61A2ED1 // 252 -data8 0x3FE6065BEA385926 // 253 -data8 0x3FE6164BFA7CC06B // 254 -data8 0x3FE62643FECF9742 // 255 -// -// two parts of ln(2) -data8 0x3FE62E42FEF00000,0x3DD473DE6AF278ED -// -// lo parts of ln(1/frcpa(1+i/256)), i=0...255 -data4 0x20E70672 // 0 -data4 0x1F60A5D0 // 1 -data4 0x218EABA0 // 2 -data4 0x21403104 // 3 -data4 0x20E9B54E // 4 -data4 0x21EE1382 // 5 -data4 0x226014E3 // 6 -data4 0x2095E5C9 // 7 -data4 0x228BA9D4 // 8 -data4 0x22932B86 // 9 -data4 0x22608A57 // 10 -data4 0x220209F3 // 11 -data4 0x212882CC // 12 -data4 0x220D46E2 // 13 -data4 0x21FA4C28 // 14 -data4 0x229E5BD9 // 15 -data4 0x228C9838 // 16 -data4 0x2311F954 // 17 -data4 0x221365DF // 18 -data4 0x22BD0CB3 // 19 -data4 0x223D4BB7 // 20 -data4 0x22A71BBE // 21 -data4 0x237DB2FA // 22 -data4 0x23194C9D // 23 -data4 0x22EC639E // 24 -data4 0x2367E669 // 25 -data4 0x232E1D5F // 26 -data4 0x234A639B // 27 -data4 0x2365C0E0 // 28 -data4 0x234646C1 // 29 -data4 0x220CBF9C // 30 -data4 0x22A00FD4 // 31 -data4 0x2306A3F2 // 32 -data4 0x23745A9B // 33 -data4 0x2398D756 // 34 -data4 0x23DD0B6A // 35 -data4 0x23DE338B // 36 -data4 0x23A222DF // 37 -data4 0x223164F8 // 38 -data4 0x23B4E87B // 39 -data4 0x23D6CCB8 // 40 -data4 0x220C2099 // 41 -data4 0x21B86B67 // 42 -data4 0x236D14F1 // 43 -data4 0x225A923F // 44 -data4 0x22748723 // 45 -data4 0x22200D13 // 46 -data4 0x23C296EA // 47 -data4 0x2302AC38 // 48 -data4 0x234B1996 // 49 -data4 0x2385E298 // 50 -data4 0x23175BE5 // 51 -data4 0x2193F482 // 52 -data4 0x23BFEA90 // 53 -data4 0x23D70A0C // 54 -data4 0x231CF30A // 55 -data4 0x235D9E90 // 56 -data4 0x221AD0CB // 57 -data4 0x22FAA08B // 58 -data4 0x23D29A87 // 59 -data4 0x20C4B2FE // 60 -data4 0x2381B8B7 // 61 -data4 0x23F8D9FC // 62 -data4 0x23EAAE7B // 63 -data4 0x2329E8AA // 64 -data4 0x23EC0322 // 65 -data4 0x2357FDCB // 66 -data4 0x2392A9AD // 67 -data4 0x22113B02 // 68 -data4 0x22DEE901 // 69 -data4 0x236A6D14 // 70 -data4 0x2371D33E // 71 -data4 0x2146F005 // 72 -data4 0x23230B06 // 73 -data4 0x22F1C77D // 74 -data4 0x23A89FA3 // 75 -data4 0x231D1241 // 76 -data4 0x244DA96C // 77 -data4 0x23ECBB7D // 78 -data4 0x223E42B4 // 79 -data4 0x23801BC9 // 80 -data4 0x23573263 // 81 -data4 0x227C1158 // 82 -data4 0x237BD749 // 83 -data4 0x21DDBAE9 // 84 -data4 0x23401735 // 85 -data4 0x241D9DEE // 86 -data4 0x23BC88CB // 87 -data4 0x2396D5F1 // 88 -data4 0x23FC89CF // 89 -data4 0x2414F9A2 // 90 -data4 0x2474A0F5 // 91 -data4 0x24354B60 // 92 -data4 0x23C1EB40 // 93 -data4 0x2306DD92 // 94 -data4 0x24353B6B // 95 -data4 0x23CD1701 // 96 -data4 0x237C7A1C // 97 -data4 0x245793AA // 98 -data4 0x24563695 // 99 -data4 0x23C51467 // 100 -data4 0x24476B68 // 101 -data4 0x212585A9 // 102 -data4 0x247B8293 // 103 -data4 0x2446848A // 104 -data4 0x246A53F8 // 105 -data4 0x246E496D // 106 -data4 0x23ED1D36 // 107 -data4 0x2314C258 // 108 -data4 0x233244A7 // 109 -data4 0x245B7AF0 // 110 -data4 0x24247130 // 111 -data4 0x22D67B38 // 112 -data4 0x2449F620 // 113 -data4 0x23BBC8B8 // 114 -data4 0x237D3BA0 // 115 -data4 0x245E8F13 // 116 -data4 0x2435573F // 117 -data4 0x242DE666 // 118 -data4 0x2463BC10 // 119 -data4 0x2466587D // 120 -data4 0x2408144B // 121 -data4 0x2405F0E5 // 122 -data4 0x22381CFF // 123 -data4 0x24154F9B // 124 -data4 0x23A4E96E // 125 -data4 0x24052967 // 126 -data4 0x2406963F // 127 -data4 0x23F7D3CB // 128 -data4 0x2448AFF4 // 129 -data4 0x24657A21 // 130 -data4 0x22FBC230 // 131 -data4 0x243C8DEA // 132 -data4 0x225DC4B7 // 133 -data4 0x23496EBF // 134 -data4 0x237C2B2B // 135 -data4 0x23A4A5B1 // 136 -data4 0x2394E9D1 // 137 -data4 0x244BC950 // 138 -data4 0x23C7448F // 139 -data4 0x2404A1AD // 140 -data4 0x246511D5 // 141 -data4 0x24246526 // 142 -data4 0x23111F57 // 143 -data4 0x22868951 // 144 -data4 0x243EB77F // 145 -data4 0x239F3DFF // 146 -data4 0x23089666 // 147 -data4 0x23EBFA6A // 148 -data4 0x23C51312 // 149 -data4 0x23E1DD5E // 150 -data4 0x232C0944 // 151 -data4 0x246A741F // 152 -data4 0x2414DF8D // 153 -data4 0x247B5546 // 154 -data4 0x2415C980 // 155 -data4 0x24324ABD // 156 -data4 0x234EB5E5 // 157 -data4 0x2465E43E // 158 -data4 0x242840D1 // 159 -data4 0x24444057 // 160 -data4 0x245E56F0 // 161 -data4 0x21AE30F8 // 162 -data4 0x23FB3283 // 163 -data4 0x247A4D07 // 164 -data4 0x22AE314D // 165 -data4 0x246B7727 // 166 -data4 0x24EAD526 // 167 -data4 0x24B41DC9 // 168 -data4 0x24EE8062 // 169 -data4 0x24A0C7C4 // 170 -data4 0x24E8DA67 // 171 -data4 0x231120F7 // 172 -data4 0x24401FFB // 173 -data4 0x2412DD09 // 174 -data4 0x248C131A // 175 -data4 0x24C0A7CE // 176 -data4 0x243DD4C8 // 177 -data4 0x24457FEB // 178 -data4 0x24DEEFBB // 179 -data4 0x243C70AE // 180 -data4 0x23E7A6FA // 181 -data4 0x24C2D311 // 182 -data4 0x23026255 // 183 -data4 0x2437C9B9 // 184 -data4 0x246BA847 // 185 -data4 0x2420B448 // 186 -data4 0x24C4CF5A // 187 -data4 0x242C4981 // 188 -data4 0x24DE1525 // 189 -data4 0x24F5CC33 // 190 -data4 0x235A85DA // 191 -data4 0x24A0B64F // 192 -data4 0x244BA0A4 // 193 -data4 0x24AAF30A // 194 -data4 0x244C86F9 // 195 -data4 0x246D5B82 // 196 -data4 0x24529347 // 197 -data4 0x240DD008 // 198 -data4 0x24E98790 // 199 -data4 0x2489B0CE // 200 -data4 0x22BC29AC // 201 -data4 0x23F37C7A // 202 -data4 0x24987FE8 // 203 -data4 0x22AFE20B // 204 -data4 0x24C8D7C2 // 205 -data4 0x24B28B7D // 206 -data4 0x23B6B271 // 207 -data4 0x24C77CB6 // 208 -data4 0x24EF1DCA // 209 -data4 0x24A4F0AC // 210 -data4 0x24CF113E // 211 -data4 0x2496BBAB // 212 -data4 0x23C7CC8A // 213 -data4 0x23AE3961 // 214 -data4 0x2410A895 // 215 -data4 0x23CE3114 // 216 -data4 0x2308247D // 217 -data4 0x240045E9 // 218 -data4 0x24974F60 // 219 -data4 0x242CB39F // 220 -data4 0x24AB8D69 // 221 -data4 0x23436788 // 222 -data4 0x24305E9E // 223 -data4 0x243E71A9 // 224 -data4 0x23C2A6B3 // 225 -data4 0x23FFE6CF // 226 -data4 0x2322D801 // 227 -data4 0x24515F21 // 228 -data4 0x2412A0D6 // 229 -data4 0x24E60D44 // 230 -data4 0x240D9251 // 231 -data4 0x247076E2 // 232 -data4 0x229B101B // 233 -data4 0x247B12DE // 234 -data4 0x244B9127 // 235 -data4 0x2499EC42 // 236 -data4 0x21FC3963 // 237 -data4 0x23E53266 // 238 -data4 0x24CE102D // 239 -data4 0x23CC45D2 // 240 -data4 0x2333171D // 241 -data4 0x246B3533 // 242 -data4 0x24931129 // 243 -data4 0x24405FFA // 244 -data4 0x24CF464D // 245 -data4 0x237095CD // 246 -data4 0x24F86CBD // 247 -data4 0x24E2D84B // 248 -data4 0x21ACBB44 // 249 -data4 0x24F43A8C // 250 -data4 0x249DB931 // 251 -data4 0x24A385EF // 252 -data4 0x238B1279 // 253 -data4 0x2436213E // 254 -data4 0x24F18A3B // 255 -LOCAL_OBJECT_END(log_data) - - -// Code -//============================================================== - -.section .text -GLOBAL_IEEE754_ENTRY(log1p) -{ .mfi - getf.exp GR_signexp_x = f8 // if x is unorm then must recompute - fadd.s1 FR_Xp1 = f8, f1 // Form 1+x - mov GR_05 = 0xfffe -} -{ .mlx - addl GR_ad_1 = @ltoff(log_data),gp - movl GR_A3 = 0x3fd5555555555557 // double precision memory - // representation of A3 -} -;; - -{ .mfi - ld8 GR_ad_1 = [GR_ad_1] - fclass.m p8,p0 = f8,0xb // Is x unorm? - mov GR_exp_mask = 0x1ffff -} -{ .mfi - nop.m 0 - fnorm.s1 FR_NormX = f8 // Normalize x - mov GR_exp_bias = 0xffff -} -;; - -{ .mfi - setf.exp FR_A2 = GR_05 // create A2 = 0.5 - fclass.m p9,p0 = f8,0x1E1 // is x NaN, NaT or +Inf? - nop.i 0 -} -{ .mib - setf.d FR_A3 = GR_A3 // create A3 - add GR_ad_2 = 16,GR_ad_1 // address of A5,A4 -(p8) br.cond.spnt log1p_unorm // Branch if x=unorm -} -;; - -log1p_common: -{ .mfi - nop.m 0 - frcpa.s1 FR_RcpX,p0 = f1,FR_Xp1 - nop.i 0 -} -{ .mfb - nop.m 0 -(p9) fma.d.s0 f8 = f8,f1,f0 // set V-flag -(p9) br.ret.spnt b0 // exit for NaN, NaT and +Inf -} -;; - -{ .mfi - getf.exp GR_Exp = FR_Xp1 // signexp of x+1 - fclass.m p10,p0 = FR_Xp1,0x3A // is 1+x < 0? - and GR_exp_x = GR_exp_mask, GR_signexp_x // biased exponent of x -} -{ .mfi - ldfpd FR_A7,FR_A6 = [GR_ad_1] - nop.f 0 - nop.i 0 -} -;; - -{ .mfi - getf.sig GR_Sig = FR_Xp1 // get significand to calculate index - // for Thi,Tlo if |x| >= 2^-8 - fcmp.eq.s1 p12,p0 = f8,f0 // is x equal to 0? - sub GR_exp_x = GR_exp_x, GR_exp_bias // true exponent of x -} -;; - -{ .mfi - sub GR_N = GR_Exp,GR_exp_bias // true exponent of x+1 - fcmp.eq.s1 p11,p0 = FR_Xp1,f0 // is x = -1? - cmp.gt p6,p7 = -8, GR_exp_x // Is |x| < 2^-8 -} -{ .mfb - ldfpd FR_A5,FR_A4 = [GR_ad_2],16 - nop.f 0 -(p10) br.cond.spnt log1p_lt_minus_1 // jump if x < -1 -} -;; - -// p6 is true if |x| < 1/256 -// p7 is true if |x| >= 1/256 -.pred.rel "mutex",p6,p7 -{ .mfi -(p7) add GR_ad_1 = 0x820,GR_ad_1 // address of log(2) parts -(p6) fms.s1 FR_r = f8,f1,f0 // range reduction for |x|<1/256 -(p6) cmp.gt.unc p10,p0 = -80, GR_exp_x // Is |x| < 2^-80 -} -{ .mfb -(p7) setf.sig FR_N = GR_N // copy unbiased exponent of x to the - // significand field of FR_N -(p7) fms.s1 FR_r = FR_RcpX,FR_Xp1,f1 // range reduction for |x|>=1/256 -(p12) br.ret.spnt b0 // exit for x=0, return x -} -;; - -{ .mib -(p7) ldfpd FR_Ln2hi,FR_Ln2lo = [GR_ad_1],16 -(p7) extr.u GR_Ind = GR_Sig,55,8 // get bits from 55 to 62 as index -(p11) br.cond.spnt log1p_eq_minus_1 // jump if x = -1 -} -;; - -{ .mmf -(p7) shladd GR_ad_2 = GR_Ind,3,GR_ad_2 // address of Thi -(p7) shladd GR_ad_1 = GR_Ind,2,GR_ad_1 // address of Tlo -(p10) fnma.d.s0 f8 = f8,f8,f8 // If |x| very small, result=x-x*x -} -;; - -{ .mmb -(p7) ldfd FR_Thi = [GR_ad_2] -(p7) ldfs FR_Tlo = [GR_ad_1] -(p10) br.ret.spnt b0 // Exit if |x| < 2^(-80) -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_r2 = FR_r,FR_r,f0 // r^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_A2 = FR_A3,FR_r,FR_A2 // A3*r+A2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_A6 = FR_A7,FR_r,FR_A6 // A7*r+A6 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A4 = FR_A5,FR_r,FR_A4 // A5*r+A4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p7) fcvt.xf FR_N = FR_N - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_r4 = FR_r2,FR_r2,f0 // r^4 - nop.i 0 -} -{ .mfi - nop.m 0 - // (A3*r+A2)*r^2+r - fma.s1 FR_A2 = FR_A2,FR_r2,FR_r - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // (A7*r+A6)*r^2+(A5*r+A4) - fma.s1 FR_A4 = FR_A6,FR_r2,FR_A4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // N*Ln2hi+Thi -(p7) fma.s1 FR_NxLn2hipThi = FR_N,FR_Ln2hi,FR_Thi - nop.i 0 -} -{ .mfi - nop.m 0 - // N*Ln2lo+Tlo -(p7) fma.s1 FR_NxLn2lopTlo = FR_N,FR_Ln2lo,FR_Tlo - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p7) fma.s1 f8 = FR_A4,FR_r4,FR_A2 // P(r) if |x| >= 1/256 - nop.i 0 -} -{ .mfi - nop.m 0 - // (N*Ln2hi+Thi) + (N*Ln2lo+Tlo) -(p7) fma.s1 FR_NxLn2pT = FR_NxLn2hipThi,f1,FR_NxLn2lopTlo - nop.i 0 -} -;; - -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fma.d.s0 f8 = FR_A4,FR_r4,FR_A2 // result if 2^(-80) <= |x| < 1/256 - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fma.d.s0 f8 = f8,f1,FR_NxLn2pT // result if |x| >= 1/256 - br.ret.sptk b0 // Exit if |x| >= 2^(-80) -} -;; - -.align 32 -log1p_unorm: -// Here if x=unorm -{ .mfb - getf.exp GR_signexp_x = FR_NormX // recompute biased exponent - nop.f 0 - br.cond.sptk log1p_common -} -;; - -.align 32 -log1p_eq_minus_1: -// Here if x=-1 -{ .mfi - nop.m 0 - fmerge.s FR_X = f8,f8 // keep input argument for subsequent - // call of __libm_error_support# - nop.i 0 -} -;; - -{ .mfi - mov GR_TAG = 140 // set libm error in case of log1p(-1). - frcpa.s0 f8,p0 = f8,f0 // log1p(-1) should be equal to -INF. - // We can get it using frcpa because it - // sets result to the IEEE-754 mandated - // quotient of f8/f0. - nop.i 0 -} -{ .mib - nop.m 0 - nop.i 0 - br.cond.sptk log_libm_err -} -;; - -.align 32 -log1p_lt_minus_1: -// Here if x < -1 -{ .mfi - nop.m 0 - fmerge.s FR_X = f8,f8 - nop.i 0 -} -;; - -{ .mfi - mov GR_TAG = 141 // set libm error in case of x < -1. - frcpa.s0 f8,p0 = f0,f0 // log1p(x) x < -1 should be equal to NaN. - // We can get it using frcpa because it - // sets result to the IEEE-754 mandated - // quotient of f0/f0 i.e. NaN. - nop.i 0 -} -;; - -.align 32 -log_libm_err: -{ .mmi - alloc r32 = ar.pfs,1,4,4,0 - mov GR_Parameter_TAG = GR_TAG - nop.i 0 -} -;; - -GLOBAL_IEEE754_END(log1p) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y = -32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS = ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp = -64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP = gp // Save gp -};; -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0 = b0 // Save b0 -};; -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_log1pf.S b/sysdeps/ia64/fpu/s_log1pf.S deleted file mode 100644 index b04b18ed74..0000000000 --- a/sysdeps/ia64/fpu/s_log1pf.S +++ /dev/null @@ -1,788 +0,0 @@ -.file "log1pf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 06/29/01 Improved speed of all paths -// 05/20/02 Cleaned up namespace and sf0 syntax -// 10/02/02 Improved performance by basing on log algorithm -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 04/18/03 Eliminate possible WAW dependency warning -// 12/16/03 Fixed parameter passing to/from error handling routine -// -// API -//============================================================== -// float log1pf(float) -// -// log1p(x) = log(x+1) -// -// Overview of operation -//============================================================== -// Background -// ---------- -// -// This algorithm is based on fact that -// log1p(x) = log(1+x) and -// log(a b) = log(a) + log(b). -// In our case we have 1+x = 2^N f, where 1 <= f < 2. -// So -// log(1+x) = log(2^N f) = log(2^N) + log(f) = n*log(2) + log(f) -// -// To calculate log(f) we do following -// log(f) = log(f * frcpa(f) / frcpa(f)) = -// = log(f * frcpa(f)) + log(1/frcpa(f)) -// -// According to definition of IA-64's frcpa instruction it's a -// floating point that approximates 1/f using a lookup on the -// top of 8 bits of the input number's + 1 significand with relative -// error < 2^(-8.886). So we have following -// -// |(1/f - frcpa(f)) / (1/f))| = |1 - f*frcpa(f)| < 1/256 -// -// and -// -// log(f) = log(f * frcpa(f)) + log(1/frcpa(f)) = -// = log(1 + r) + T -// -// The first value can be computed by polynomial P(r) approximating -// log(1 + r) on |r| < 1/256 and the second is precomputed tabular -// value defined by top 8 bit of f. -// -// Finally we have that log(1+x) ~ (N*log(2) + T) + P(r) -// -// Note that if input argument is close to 0.0 (in our case it means -// that |x| < 1/256) we can use just polynomial approximation -// because 1+x = 2^0 * f = f = 1 + r and -// log(1+x) = log(1 + r) ~ P(r) -// -// -// Implementation -// -------------- -// -// 1. |x| >= 2^(-8), and x > -1 -// InvX = frcpa(x+1) -// r = InvX*(x+1) - 1 -// P(r) = r*((1 - A2*4) + r^2*(A3 - A4*r)) = r*P2(r), -// A4,A3,A2 are created with setf instruction. -// We use Taylor series and so A4 = 1/4, A3 = 1/3, -// A2 = 1/2 rounded to double. -// -// N = float(n) where n is true unbiased exponent of x -// -// T is tabular value of log(1/frcpa(x)) calculated in quad precision -// and rounded to double. To load T we get bits from 55 to 62 of register -// format significand as index and calculate address -// ad_T = table_base_addr + 8 * index -// -// L1 (log(2)) is calculated in quad precision and rounded to double; -// it's created with setf -// -// And final result = P2(r)*r + (T + N*L1) -// -// -// 2. 2^(-40) <= |x| < 2^(-8) -// r = x -// P(r) = r*((1 - A2*4) + r^2*(A3 - A4*r)) = r*P2(r), -// A4,A3,A2 are the same as in case |x| >= 1/256 -// -// And final result = P2(r)*r -// -// 3. 0 < |x| < 2^(-40) -// Although log1p(x) is basically x, we would like to preserve the inexactness -// nature as well as consistent behavior under different rounding modes. -// We can do this by computing the result as -// -// log1p(x) = x - x*x -// -// -// Note: NaT, any NaNs, +/-INF, +/-0, negatives and unnormalized numbers are -// filtered and processed on special branches. -// - -// -// Special values -//============================================================== -// -// log1p(-1) = -inf // Call error support -// -// log1p(+qnan) = +qnan -// log1p(-qnan) = -qnan -// log1p(+snan) = +qnan -// log1p(-snan) = -qnan -// -// log1p(x),x<-1= QNAN Indefinite // Call error support -// log1p(-inf) = QNAN Indefinite -// log1p(+inf) = +inf -// log1p(+/-0) = +/-0 -// -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f7 -> f15, f32 -> f36 -// -// General registers used: -// r8 -> r11 -// r14 -> r22 -// -// Predicate registers used: -// p6 -> p12 - -// Assembly macros -//============================================================== -GR_TAG = r8 -GR_ad_T = r9 -GR_Exp = r10 -GR_N = r11 - -GR_signexp_x = r14 -GR_exp_mask = r15 -GR_exp_bias = r16 -GR_05 = r17 -GR_A3 = r18 -GR_Sig = r19 -GR_Ind = r19 -GR_exp_x = r20 -GR_Ln2 = r21 -GR_025 = r22 - - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - - -FR_NormX = f7 -FR_RcpX = f9 -FR_r = f10 -FR_r2 = f11 -FR_r4 = f12 -FR_N = f13 -FR_Ln2 = f14 -FR_Xp1 = f15 - -FR_A4 = f33 -FR_A3 = f34 -FR_A2 = f35 - -FR_T = f36 -FR_NxLn2pT = f36 - - - -FR_Y = f1 -FR_X = f10 -FR_RESULT = f8 - - -// Data -//============================================================== -RODATA -.align 16 - -LOCAL_OBJECT_START(log_data) -// ln(1/frcpa(1+i/256)), i=0...255 -data8 0x3F60040155D5889E // 0 -data8 0x3F78121214586B54 // 1 -data8 0x3F841929F96832F0 // 2 -data8 0x3F8C317384C75F06 // 3 -data8 0x3F91A6B91AC73386 // 4 -data8 0x3F95BA9A5D9AC039 // 5 -data8 0x3F99D2A8074325F4 // 6 -data8 0x3F9D6B2725979802 // 7 -data8 0x3FA0C58FA19DFAAA // 8 -data8 0x3FA2954C78CBCE1B // 9 -data8 0x3FA4A94D2DA96C56 // 10 -data8 0x3FA67C94F2D4BB58 // 11 -data8 0x3FA85188B630F068 // 12 -data8 0x3FAA6B8ABE73AF4C // 13 -data8 0x3FAC441E06F72A9E // 14 -data8 0x3FAE1E6713606D07 // 15 -data8 0x3FAFFA6911AB9301 // 16 -data8 0x3FB0EC139C5DA601 // 17 -data8 0x3FB1DBD2643D190B // 18 -data8 0x3FB2CC7284FE5F1C // 19 -data8 0x3FB3BDF5A7D1EE64 // 20 -data8 0x3FB4B05D7AA012E0 // 21 -data8 0x3FB580DB7CEB5702 // 22 -data8 0x3FB674F089365A7A // 23 -data8 0x3FB769EF2C6B568D // 24 -data8 0x3FB85FD927506A48 // 25 -data8 0x3FB9335E5D594989 // 26 -data8 0x3FBA2B0220C8E5F5 // 27 -data8 0x3FBB0004AC1A86AC // 28 -data8 0x3FBBF968769FCA11 // 29 -data8 0x3FBCCFEDBFEE13A8 // 30 -data8 0x3FBDA727638446A2 // 31 -data8 0x3FBEA3257FE10F7A // 32 -data8 0x3FBF7BE9FEDBFDE6 // 33 -data8 0x3FC02AB352FF25F4 // 34 -data8 0x3FC097CE579D204D // 35 -data8 0x3FC1178E8227E47C // 36 -data8 0x3FC185747DBECF34 // 37 -data8 0x3FC1F3B925F25D41 // 38 -data8 0x3FC2625D1E6DDF57 // 39 -data8 0x3FC2D1610C86813A // 40 -data8 0x3FC340C59741142E // 41 -data8 0x3FC3B08B6757F2A9 // 42 -data8 0x3FC40DFB08378003 // 43 -data8 0x3FC47E74E8CA5F7C // 44 -data8 0x3FC4EF51F6466DE4 // 45 -data8 0x3FC56092E02BA516 // 46 -data8 0x3FC5D23857CD74D5 // 47 -data8 0x3FC6313A37335D76 // 48 -data8 0x3FC6A399DABBD383 // 49 -data8 0x3FC70337DD3CE41B // 50 -data8 0x3FC77654128F6127 // 51 -data8 0x3FC7E9D82A0B022D // 52 -data8 0x3FC84A6B759F512F // 53 -data8 0x3FC8AB47D5F5A310 // 54 -data8 0x3FC91FE49096581B // 55 -data8 0x3FC981634011AA75 // 56 -data8 0x3FC9F6C407089664 // 57 -data8 0x3FCA58E729348F43 // 58 -data8 0x3FCABB55C31693AD // 59 -data8 0x3FCB1E104919EFD0 // 60 -data8 0x3FCB94EE93E367CB // 61 -data8 0x3FCBF851C067555F // 62 -data8 0x3FCC5C0254BF23A6 // 63 -data8 0x3FCCC000C9DB3C52 // 64 -data8 0x3FCD244D99C85674 // 65 -data8 0x3FCD88E93FB2F450 // 66 -data8 0x3FCDEDD437EAEF01 // 67 -data8 0x3FCE530EFFE71012 // 68 -data8 0x3FCEB89A1648B971 // 69 -data8 0x3FCF1E75FADF9BDE // 70 -data8 0x3FCF84A32EAD7C35 // 71 -data8 0x3FCFEB2233EA07CD // 72 -data8 0x3FD028F9C7035C1C // 73 -data8 0x3FD05C8BE0D9635A // 74 -data8 0x3FD085EB8F8AE797 // 75 -data8 0x3FD0B9C8E32D1911 // 76 -data8 0x3FD0EDD060B78081 // 77 -data8 0x3FD122024CF0063F // 78 -data8 0x3FD14BE2927AECD4 // 79 -data8 0x3FD180618EF18ADF // 80 -data8 0x3FD1B50BBE2FC63B // 81 -data8 0x3FD1DF4CC7CF242D // 82 -data8 0x3FD214456D0EB8D4 // 83 -data8 0x3FD23EC5991EBA49 // 84 -data8 0x3FD2740D9F870AFB // 85 -data8 0x3FD29ECDABCDFA04 // 86 -data8 0x3FD2D46602ADCCEE // 87 -data8 0x3FD2FF66B04EA9D4 // 88 -data8 0x3FD335504B355A37 // 89 -data8 0x3FD360925EC44F5D // 90 -data8 0x3FD38BF1C3337E75 // 91 -data8 0x3FD3C25277333184 // 92 -data8 0x3FD3EDF463C1683E // 93 -data8 0x3FD419B423D5E8C7 // 94 -data8 0x3FD44591E0539F49 // 95 -data8 0x3FD47C9175B6F0AD // 96 -data8 0x3FD4A8B341552B09 // 97 -data8 0x3FD4D4F3908901A0 // 98 -data8 0x3FD501528DA1F968 // 99 -data8 0x3FD52DD06347D4F6 // 100 -data8 0x3FD55A6D3C7B8A8A // 101 -data8 0x3FD5925D2B112A59 // 102 -data8 0x3FD5BF406B543DB2 // 103 -data8 0x3FD5EC433D5C35AE // 104 -data8 0x3FD61965CDB02C1F // 105 -data8 0x3FD646A84935B2A2 // 106 -data8 0x3FD6740ADD31DE94 // 107 -data8 0x3FD6A18DB74A58C5 // 108 -data8 0x3FD6CF31058670EC // 109 -data8 0x3FD6F180E852F0BA // 110 -data8 0x3FD71F5D71B894F0 // 111 -data8 0x3FD74D5AEFD66D5C // 112 -data8 0x3FD77B79922BD37E // 113 -data8 0x3FD7A9B9889F19E2 // 114 -data8 0x3FD7D81B037EB6A6 // 115 -data8 0x3FD8069E33827231 // 116 -data8 0x3FD82996D3EF8BCB // 117 -data8 0x3FD85855776DCBFB // 118 -data8 0x3FD8873658327CCF // 119 -data8 0x3FD8AA75973AB8CF // 120 -data8 0x3FD8D992DC8824E5 // 121 -data8 0x3FD908D2EA7D9512 // 122 -data8 0x3FD92C59E79C0E56 // 123 -data8 0x3FD95BD750EE3ED3 // 124 -data8 0x3FD98B7811A3EE5B // 125 -data8 0x3FD9AF47F33D406C // 126 -data8 0x3FD9DF270C1914A8 // 127 -data8 0x3FDA0325ED14FDA4 // 128 -data8 0x3FDA33440224FA79 // 129 -data8 0x3FDA57725E80C383 // 130 -data8 0x3FDA87D0165DD199 // 131 -data8 0x3FDAAC2E6C03F896 // 132 -data8 0x3FDADCCC6FDF6A81 // 133 -data8 0x3FDB015B3EB1E790 // 134 -data8 0x3FDB323A3A635948 // 135 -data8 0x3FDB56FA04462909 // 136 -data8 0x3FDB881AA659BC93 // 137 -data8 0x3FDBAD0BEF3DB165 // 138 -data8 0x3FDBD21297781C2F // 139 -data8 0x3FDC039236F08819 // 140 -data8 0x3FDC28CB1E4D32FD // 141 -data8 0x3FDC4E19B84723C2 // 142 -data8 0x3FDC7FF9C74554C9 // 143 -data8 0x3FDCA57B64E9DB05 // 144 -data8 0x3FDCCB130A5CEBB0 // 145 -data8 0x3FDCF0C0D18F326F // 146 -data8 0x3FDD232075B5A201 // 147 -data8 0x3FDD490246DEFA6B // 148 -data8 0x3FDD6EFA918D25CD // 149 -data8 0x3FDD9509707AE52F // 150 -data8 0x3FDDBB2EFE92C554 // 151 -data8 0x3FDDEE2F3445E4AF // 152 -data8 0x3FDE148A1A2726CE // 153 -data8 0x3FDE3AFC0A49FF40 // 154 -data8 0x3FDE6185206D516E // 155 -data8 0x3FDE882578823D52 // 156 -data8 0x3FDEAEDD2EAC990C // 157 -data8 0x3FDED5AC5F436BE3 // 158 -data8 0x3FDEFC9326D16AB9 // 159 -data8 0x3FDF2391A2157600 // 160 -data8 0x3FDF4AA7EE03192D // 161 -data8 0x3FDF71D627C30BB0 // 162 -data8 0x3FDF991C6CB3B379 // 163 -data8 0x3FDFC07ADA69A910 // 164 -data8 0x3FDFE7F18EB03D3E // 165 -data8 0x3FE007C053C5002E // 166 -data8 0x3FE01B942198A5A1 // 167 -data8 0x3FE02F74400C64EB // 168 -data8 0x3FE04360BE7603AD // 169 -data8 0x3FE05759AC47FE34 // 170 -data8 0x3FE06B5F1911CF52 // 171 -data8 0x3FE078BF0533C568 // 172 -data8 0x3FE08CD9687E7B0E // 173 -data8 0x3FE0A10074CF9019 // 174 -data8 0x3FE0B5343A234477 // 175 -data8 0x3FE0C974C89431CE // 176 -data8 0x3FE0DDC2305B9886 // 177 -data8 0x3FE0EB524BAFC918 // 178 -data8 0x3FE0FFB54213A476 // 179 -data8 0x3FE114253DA97D9F // 180 -data8 0x3FE128A24F1D9AFF // 181 -data8 0x3FE1365252BF0865 // 182 -data8 0x3FE14AE558B4A92D // 183 -data8 0x3FE15F85A19C765B // 184 -data8 0x3FE16D4D38C119FA // 185 -data8 0x3FE18203C20DD133 // 186 -data8 0x3FE196C7BC4B1F3B // 187 -data8 0x3FE1A4A738B7A33C // 188 -data8 0x3FE1B981C0C9653D // 189 -data8 0x3FE1CE69E8BB106B // 190 -data8 0x3FE1DC619DE06944 // 191 -data8 0x3FE1F160A2AD0DA4 // 192 -data8 0x3FE2066D7740737E // 193 -data8 0x3FE2147DBA47A394 // 194 -data8 0x3FE229A1BC5EBAC3 // 195 -data8 0x3FE237C1841A502E // 196 -data8 0x3FE24CFCE6F80D9A // 197 -data8 0x3FE25B2C55CD5762 // 198 -data8 0x3FE2707F4D5F7C41 // 199 -data8 0x3FE285E0842CA384 // 200 -data8 0x3FE294294708B773 // 201 -data8 0x3FE2A9A2670AFF0C // 202 -data8 0x3FE2B7FB2C8D1CC1 // 203 -data8 0x3FE2C65A6395F5F5 // 204 -data8 0x3FE2DBF557B0DF43 // 205 -data8 0x3FE2EA64C3F97655 // 206 -data8 0x3FE3001823684D73 // 207 -data8 0x3FE30E97E9A8B5CD // 208 -data8 0x3FE32463EBDD34EA // 209 -data8 0x3FE332F4314AD796 // 210 -data8 0x3FE348D90E7464D0 // 211 -data8 0x3FE35779F8C43D6E // 212 -data8 0x3FE36621961A6A99 // 213 -data8 0x3FE37C299F3C366A // 214 -data8 0x3FE38AE2171976E7 // 215 -data8 0x3FE399A157A603E7 // 216 -data8 0x3FE3AFCCFE77B9D1 // 217 -data8 0x3FE3BE9D503533B5 // 218 -data8 0x3FE3CD7480B4A8A3 // 219 -data8 0x3FE3E3C43918F76C // 220 -data8 0x3FE3F2ACB27ED6C7 // 221 -data8 0x3FE4019C2125CA93 // 222 -data8 0x3FE4181061389722 // 223 -data8 0x3FE42711518DF545 // 224 -data8 0x3FE436194E12B6BF // 225 -data8 0x3FE445285D68EA69 // 226 -data8 0x3FE45BCC464C893A // 227 -data8 0x3FE46AED21F117FC // 228 -data8 0x3FE47A1527E8A2D3 // 229 -data8 0x3FE489445EFFFCCC // 230 -data8 0x3FE4A018BCB69835 // 231 -data8 0x3FE4AF5A0C9D65D7 // 232 -data8 0x3FE4BEA2A5BDBE87 // 233 -data8 0x3FE4CDF28F10AC46 // 234 -data8 0x3FE4DD49CF994058 // 235 -data8 0x3FE4ECA86E64A684 // 236 -data8 0x3FE503C43CD8EB68 // 237 -data8 0x3FE513356667FC57 // 238 -data8 0x3FE522AE0738A3D8 // 239 -data8 0x3FE5322E26867857 // 240 -data8 0x3FE541B5CB979809 // 241 -data8 0x3FE55144FDBCBD62 // 242 -data8 0x3FE560DBC45153C7 // 243 -data8 0x3FE5707A26BB8C66 // 244 -data8 0x3FE587F60ED5B900 // 245 -data8 0x3FE597A7977C8F31 // 246 -data8 0x3FE5A760D634BB8B // 247 -data8 0x3FE5B721D295F10F // 248 -data8 0x3FE5C6EA94431EF9 // 249 -data8 0x3FE5D6BB22EA86F6 // 250 -data8 0x3FE5E6938645D390 // 251 -data8 0x3FE5F673C61A2ED2 // 252 -data8 0x3FE6065BEA385926 // 253 -data8 0x3FE6164BFA7CC06B // 254 -data8 0x3FE62643FECF9743 // 255 -LOCAL_OBJECT_END(log_data) - - -// Code -//============================================================== - -.section .text -GLOBAL_IEEE754_ENTRY(log1pf) -{ .mfi - getf.exp GR_signexp_x = f8 // if x is unorm then must recompute - fadd.s1 FR_Xp1 = f8, f1 // Form 1+x - mov GR_05 = 0xfffe -} -{ .mlx - addl GR_ad_T = @ltoff(log_data),gp - movl GR_A3 = 0x3fd5555555555555 // double precision memory - // representation of A3 -} -;; - -{ .mfi - ld8 GR_ad_T = [GR_ad_T] - fclass.m p8,p0 = f8,0xb // Is x unorm? - mov GR_exp_mask = 0x1ffff -} -{ .mfi - mov GR_025 = 0xfffd // Exponent of 0.25 - fnorm.s1 FR_NormX = f8 // Normalize x - mov GR_exp_bias = 0xffff -} -;; - -{ .mfi - setf.exp FR_A2 = GR_05 // create A2 = 0.5 - fclass.m p9,p0 = f8,0x1E1 // is x NaN, NaT or +Inf? - nop.i 0 -} -{ .mib - setf.d FR_A3 = GR_A3 // create A3 - nop.i 0 -(p8) br.cond.spnt log1p_unorm // Branch if x=unorm -} -;; - -log1p_common: -{ .mfi - setf.exp FR_A4 = GR_025 // create A4 = 0.25 - frcpa.s1 FR_RcpX,p0 = f1,FR_Xp1 - nop.i 0 -} -{ .mfb - nop.m 0 -(p9) fma.s.s0 f8 = f8,f1,f0 // set V-flag -(p9) br.ret.spnt b0 // exit for NaN, NaT and +Inf -} -;; - -{ .mfi - getf.exp GR_Exp = FR_Xp1 // signexp of x+1 - fclass.m p10,p0 = FR_Xp1,0x3A // is 1+x < 0? - and GR_exp_x = GR_exp_mask, GR_signexp_x // biased exponent of x -} -{ .mlx - nop.m 0 - movl GR_Ln2 = 0x3FE62E42FEFA39EF // double precision memory - // representation of log(2) -} -;; - -{ .mfi - getf.sig GR_Sig = FR_Xp1 // get significand to calculate index - // for T if |x| >= 2^-8 - fcmp.eq.s1 p12,p0 = f8,f0 // is x equal to 0? - sub GR_exp_x = GR_exp_x, GR_exp_bias // true exponent of x -} -;; - -{ .mfi - sub GR_N = GR_Exp,GR_exp_bias // true exponent of x+1 - fcmp.eq.s1 p11,p0 = FR_Xp1,f0 // is x = -1? - cmp.gt p6,p7 = -8, GR_exp_x // Is |x| < 2^-8 -} -{ .mfb - nop.m 0 - nop.f 0 -(p10) br.cond.spnt log1p_lt_minus_1 // jump if x < -1 -} -;; - -// p6 is true if |x| < 1/256 -// p7 is true if |x| >= 1/256 -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fms.s1 FR_r = f8,f1,f0 // range reduction for |x|<1/256 -(p6) cmp.gt.unc p10,p0 = -40, GR_exp_x // Is |x| < 2^-40 -} -{ .mfb -(p7) setf.sig FR_N = GR_N // copy unbiased exponent of x to the - // significand field of FR_N -(p7) fms.s1 FR_r = FR_RcpX,FR_Xp1,f1 // range reduction for |x|>=1/256 -(p12) br.ret.spnt b0 // exit for x=0, return x -} -;; - -{ .mib - setf.d FR_Ln2 = GR_Ln2 // create log(2) -(p7) extr.u GR_Ind = GR_Sig,55,8 // get bits from 55 to 62 as index -(p11) br.cond.spnt log1p_eq_minus_1 // jump if x = -1 -} -;; - -{ .mmf -(p7) shladd GR_ad_T = GR_Ind,3,GR_ad_T // address of T - nop.m 0 -(p10) fnma.s.s0 f8 = f8,f8,f8 // If |x| very small, result=x-x*x -} -;; - -{ .mmb -(p7) ldfd FR_T = [GR_ad_T] - nop.m 0 -(p10) br.ret.spnt b0 // Exit if |x| < 2^-40 -} -;; - -{ .mfi - nop.m 0 - fma.s1 FR_r2 = FR_r,FR_r,f0 // r^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_A2 = FR_A2,FR_r,f1 // 1.0 - A2*r - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fnma.s1 FR_A3 = FR_A4,FR_r,FR_A3 // A3 - A4*r - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p7) fcvt.xf FR_N = FR_N - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // (A3*r+A2)*r^2+r - fma.s1 FR_A2 = FR_A3,FR_r2,FR_A2 // (A4*r+A3)*r^2+(A2*r+1) - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // N*Ln2hi+T -(p7) fma.s1 FR_NxLn2pT = FR_N,FR_Ln2,FR_T - nop.i 0 -} -;; - -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fma.s.s0 f8 = FR_A2,FR_r,f0 // result if 2^(-40) <= |x| < 1/256 - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fma.s.s0 f8 = FR_A2,FR_r,FR_NxLn2pT // result if |x| >= 1/256 - br.ret.sptk b0 // Exit if |x| >= 2^(-40) -} -;; - -.align 32 -log1p_unorm: -// Here if x=unorm -{ .mfb - getf.exp GR_signexp_x = FR_NormX // recompute biased exponent - nop.f 0 - br.cond.sptk log1p_common -} -;; - -.align 32 -log1p_eq_minus_1: -// Here if x=-1 -{ .mfi - nop.m 0 - fmerge.s FR_X = f8,f8 // keep input argument for subsequent - // call of __libm_error_support# - nop.i 0 -} -;; - -{ .mfi - mov GR_TAG = 142 // set libm error in case of log1p(-1). - frcpa.s0 f8,p0 = f8,f0 // log1p(-1) should be equal to -INF. - // We can get it using frcpa because it - // sets result to the IEEE-754 mandated - // quotient of f8/f0. - nop.i 0 -} -{ .mib - nop.m 0 - nop.i 0 - br.cond.sptk log_libm_err -} -;; - -.align 32 -log1p_lt_minus_1: -// Here if x < -1 -{ .mfi - nop.m 0 - fmerge.s FR_X = f8,f8 - nop.i 0 -} -;; - -{ .mfi - mov GR_TAG = 143 // set libm error in case of x < -1. - frcpa.s0 f8,p0 = f0,f0 // log1p(x) x < -1 should be equal to NaN. - // We can get it using frcpa because it - // sets result to the IEEE-754 mandated - // quotient of f0/f0 i.e. NaN. - nop.i 0 -} -;; - -.align 32 -log_libm_err: -{ .mmi - alloc r32 = ar.pfs,1,4,4,0 - mov GR_Parameter_TAG = GR_TAG - nop.i 0 -} -;; - -GLOBAL_IEEE754_END(log1pf) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y = -32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS = ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp = -64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP = gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0 = b0 // Save b0 -};; -.body -{ .mib - stfs [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_log1pl.S b/sysdeps/ia64/fpu/s_log1pl.S deleted file mode 100644 index 3c8be02826..0000000000 --- a/sysdeps/ia64/fpu/s_log1pl.S +++ /dev/null @@ -1,1200 +0,0 @@ -.file "log1pl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 05/21/01 Removed logl and log10l, putting them in a separate file -// 06/29/01 Improved speed of all paths -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align; -// used data8 for long double table values -// -//********************************************************************* -// -//********************************************************************* -// -// Function: log1pl(x) = ln(x+1), for double-extended precision x values -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f34-f82 -// -// General Purpose Registers: -// r32-r56 -// r53-r56 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6-p13 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// Denormal fault raised on denormal inputs -// Overflow exceptions cannot occur -// Underflow exceptions raised when appropriate for log1p -// Inexact raised when appropriate by algorithm -// -// log1pl(inf) = inf -// log1pl(-inf) = QNaN -// log1pl(+/-0) = +/-0 -// log1pl(-1) = -inf -// log1pl(SNaN) = QNaN -// log1pl(QNaN) = QNaN -// log1pl(EM_special Values) = QNaN -// -//********************************************************************* -// -// Overview -// -// The method consists of three cases. -// -// If |X| < 2^(-80) use case log1p_small; -// else |X| < 2^(-7) use case log_near1; -// else use case log_regular; -// -// Case log1p_small: -// -// log1pl( X ) = logl( X+1 ) can be approximated by X -// -// Case log_near1: -// -// log1pl( X ) = log( X+1 ) can be approximated by a simple polynomial -// in W = X. This polynomial resembles the truncated Taylor -// series W - W^/2 + W^3/3 - ... -// -// Case log_regular: -// -// Here we use a table lookup method. The basic idea is that in -// order to compute logl(Arg) = log1pl (Arg-1) for an argument Arg in [1,2), -// we construct a value G such that G*Arg is close to 1 and that -// logl(1/G) is obtainable easily from a table of values calculated -// beforehand. Thus -// -// logl(Arg) = logl(1/G) + logl(G*Arg) -// = logl(1/G) + logl(1 + (G*Arg - 1)) -// -// Because |G*Arg - 1| is small, the second term on the right hand -// side can be approximated by a short polynomial. We elaborate -// this method in four steps. -// -// Step 0: Initialization -// -// We need to calculate logl( X+1 ). Obtain N, S_hi such that -// -// X+1 = 2^N * ( S_hi + S_lo ) exactly -// -// where S_hi in [1,2) and S_lo is a correction to S_hi in the sense -// that |S_lo| <= ulp(S_hi). -// -// Step 1: Argument Reduction -// -// Based on S_hi, obtain G_1, G_2, G_3 from a table and calculate -// -// G := G_1 * G_2 * G_3 -// r := (G * S_hi - 1) + G * S_lo -// -// These G_j's have the property that the product is exactly -// representable and that |r| < 2^(-12) as a result. -// -// Step 2: Approximation -// -// -// logl(1 + r) is approximated by a short polynomial poly(r). -// -// Step 3: Reconstruction -// -// -// Finally, log1pl( X ) = logl( X+1 ) is given by -// -// logl( X+1 ) = logl( 2^N * (S_hi + S_lo) ) -// ~=~ N*logl(2) + logl(1/G) + logl(1 + r) -// ~=~ N*logl(2) + logl(1/G) + poly(r). -// -// **** Algorithm **** -// -// Case log1p_small: -// -// Although log1pl(X) is basically X, we would like to preserve the inexactness -// nature as well as consistent behavior under different rounding modes. -// We can do this by computing the result as -// -// log1pl(X) = X - X*X -// -// -// Case log_near1: -// -// Here we compute a simple polynomial. To exploit parallelism, we split -// the polynomial into two portions. -// -// W := X -// Wsq := W * W -// W4 := Wsq*Wsq -// W6 := W4*Wsq -// Y_hi := W + Wsq*(P_1 + W*(P_2 + W*(P_3 + W*P_4)) -// Y_lo := W6*(P_5 + W*(P_6 + W*(P_7 + W*P_8))) -// -// Case log_regular: -// -// We present the algorithm in four steps. -// -// Step 0. Initialization -// ---------------------- -// -// Z := X + 1 -// N := unbaised exponent of Z -// S_hi := 2^(-N) * Z -// S_lo := 2^(-N) * { (max(X,1)-Z) + min(X,1) } -// -// Step 1. Argument Reduction -// -------------------------- -// -// Let -// -// Z = 2^N * S_hi = 2^N * 1.d_1 d_2 d_3 ... d_63 -// -// We obtain G_1, G_2, G_3 by the following steps. -// -// -// Define X_0 := 1.d_1 d_2 ... d_14. This is extracted -// from S_hi. -// -// Define A_1 := 1.d_1 d_2 d_3 d_4. This is X_0 truncated -// to lsb = 2^(-4). -// -// Define index_1 := [ d_1 d_2 d_3 d_4 ]. -// -// Fetch Z_1 := (1/A_1) rounded UP in fixed point with -// fixed point lsb = 2^(-15). -// Z_1 looks like z_0.z_1 z_2 ... z_15 -// Note that the fetching is done using index_1. -// A_1 is actually not needed in the implementation -// and is used here only to explain how is the value -// Z_1 defined. -// -// Fetch G_1 := (1/A_1) truncated to 21 sig. bits. -// floating pt. Again, fetching is done using index_1. A_1 -// explains how G_1 is defined. -// -// Calculate X_1 := X_0 * Z_1 truncated to lsb = 2^(-14) -// = 1.0 0 0 0 d_5 ... d_14 -// This is accomplished by integer multiplication. -// It is proved that X_1 indeed always begin -// with 1.0000 in fixed point. -// -// -// Define A_2 := 1.0 0 0 0 d_5 d_6 d_7 d_8. This is X_1 -// truncated to lsb = 2^(-8). Similar to A_1, -// A_2 is not needed in actual implementation. It -// helps explain how some of the values are defined. -// -// Define index_2 := [ d_5 d_6 d_7 d_8 ]. -// -// Fetch Z_2 := (1/A_2) rounded UP in fixed point with -// fixed point lsb = 2^(-15). Fetch done using index_2. -// Z_2 looks like z_0.z_1 z_2 ... z_15 -// -// Fetch G_2 := (1/A_2) truncated to 21 sig. bits. -// floating pt. -// -// Calculate X_2 := X_1 * Z_2 truncated to lsb = 2^(-14) -// = 1.0 0 0 0 0 0 0 0 d_9 d_10 ... d_14 -// This is accomplished by integer multiplication. -// It is proved that X_2 indeed always begin -// with 1.00000000 in fixed point. -// -// -// Define A_3 := 1.0 0 0 0 0 0 0 0 d_9 d_10 d_11 d_12 d_13 1. -// This is 2^(-14) + X_2 truncated to lsb = 2^(-13). -// -// Define index_3 := [ d_9 d_10 d_11 d_12 d_13 ]. -// -// Fetch G_3 := (1/A_3) truncated to 21 sig. bits. -// floating pt. Fetch is done using index_3. -// -// Compute G := G_1 * G_2 * G_3. -// -// This is done exactly since each of G_j only has 21 sig. bits. -// -// Compute -// -// r := (G*S_hi - 1) + G*S_lo using 2 FMA operations. -// -// Thus r approximates G*(S_hi + S_lo) - 1 to within a couple of -// rounding errors. -// -// -// Step 2. Approximation -// --------------------- -// -// This step computes an approximation to logl( 1 + r ) where r is the -// reduced argument just obtained. It is proved that |r| <= 1.9*2^(-13); -// thus logl(1+r) can be approximated by a short polynomial: -// -// logl(1+r) ~=~ poly = r + Q1 r^2 + ... + Q4 r^5 -// -// -// Step 3. Reconstruction -// ---------------------- -// -// This step computes the desired result of logl(X+1): -// -// logl(X+1) = logl( 2^N * (S_hi + S_lo) ) -// = N*logl(2) + logl( S_hi + S_lo) ) -// = N*logl(2) + logl(1/G) + -// logl(1 + G * ( S_hi + S_lo ) - 1 ) -// -// logl(2), logl(1/G_j) are stored as pairs of (single,double) numbers: -// log2_hi, log2_lo, log1byGj_hi, log1byGj_lo. The high parts are -// single-precision numbers and the low parts are double precision -// numbers. These have the property that -// -// N*log2_hi + SUM ( log1byGj_hi ) -// -// is computable exactly in double-extended precision (64 sig. bits). -// Finally -// -// Y_hi := N*log2_hi + SUM ( log1byGj_hi ) -// Y_lo := poly_hi + [ poly_lo + -// ( SUM ( log1byGj_lo ) + N*log2_lo ) ] -// - -RODATA -.align 64 - -// ************* DO NOT CHANGE THE ORDER OF THESE TABLES ************* - -// P_8, P_7, P_6, P_5, P_4, P_3, P_2, and P_1 - -LOCAL_OBJECT_START(Constants_P) -//data4 0xEFD62B15,0xE3936754,0x00003FFB,0x00000000 -//data4 0xA5E56381,0x8003B271,0x0000BFFC,0x00000000 -//data4 0x73282DB0,0x9249248C,0x00003FFC,0x00000000 -//data4 0x47305052,0xAAAAAA9F,0x0000BFFC,0x00000000 -//data4 0xCCD17FC9,0xCCCCCCCC,0x00003FFC,0x00000000 -//data4 0x00067ED5,0x80000000,0x0000BFFD,0x00000000 -//data4 0xAAAAAAAA,0xAAAAAAAA,0x00003FFD,0x00000000 -//data4 0xFFFFFFFE,0xFFFFFFFF,0x0000BFFD,0x00000000 -data8 0xE3936754EFD62B15,0x00003FFB -data8 0x8003B271A5E56381,0x0000BFFC -data8 0x9249248C73282DB0,0x00003FFC -data8 0xAAAAAA9F47305052,0x0000BFFC -data8 0xCCCCCCCCCCD17FC9,0x00003FFC -data8 0x8000000000067ED5,0x0000BFFD -data8 0xAAAAAAAAAAAAAAAA,0x00003FFD -data8 0xFFFFFFFFFFFFFFFE,0x0000BFFD -LOCAL_OBJECT_END(Constants_P) - -// log2_hi, log2_lo, Q_4, Q_3, Q_2, and Q_1 - -LOCAL_OBJECT_START(Constants_Q) -//data4 0x00000000,0xB1721800,0x00003FFE,0x00000000 -//data4 0x4361C4C6,0x82E30865,0x0000BFE2,0x00000000 -//data4 0x328833CB,0xCCCCCAF2,0x00003FFC,0x00000000 -//data4 0xA9D4BAFB,0x80000077,0x0000BFFD,0x00000000 -//data4 0xAAABE3D2,0xAAAAAAAA,0x00003FFD,0x00000000 -//data4 0xFFFFDAB7,0xFFFFFFFF,0x0000BFFD,0x00000000 -data8 0xB172180000000000,0x00003FFE -data8 0x82E308654361C4C6,0x0000BFE2 -data8 0xCCCCCAF2328833CB,0x00003FFC -data8 0x80000077A9D4BAFB,0x0000BFFD -data8 0xAAAAAAAAAAABE3D2,0x00003FFD -data8 0xFFFFFFFFFFFFDAB7,0x0000BFFD -LOCAL_OBJECT_END(Constants_Q) - -// 1/ln10_hi, 1/ln10_lo - -LOCAL_OBJECT_START(Constants_1_by_LN10) -//data4 0x37287195,0xDE5BD8A9,0x00003FFD,0x00000000 -//data4 0xACCF70C8,0xD56EAABE,0x00003FBB,0x00000000 -data8 0xDE5BD8A937287195,0x00003FFD -data8 0xD56EAABEACCF70C8,0x00003FBB -LOCAL_OBJECT_END(Constants_1_by_LN10) - - -// Z1 - 16 bit fixed - -LOCAL_OBJECT_START(Constants_Z_1) -data4 0x00008000 -data4 0x00007879 -data4 0x000071C8 -data4 0x00006BCB -data4 0x00006667 -data4 0x00006187 -data4 0x00005D18 -data4 0x0000590C -data4 0x00005556 -data4 0x000051EC -data4 0x00004EC5 -data4 0x00004BDB -data4 0x00004925 -data4 0x0000469F -data4 0x00004445 -data4 0x00004211 -LOCAL_OBJECT_END(Constants_Z_1) - -// G1 and H1 - IEEE single and h1 - IEEE double - -LOCAL_OBJECT_START(Constants_G_H_h1) -data4 0x3F800000,0x00000000 -data8 0x0000000000000000 -data4 0x3F70F0F0,0x3D785196 -data8 0x3DA163A6617D741C -data4 0x3F638E38,0x3DF13843 -data8 0x3E2C55E6CBD3D5BB -data4 0x3F579430,0x3E2FF9A0 -data8 0xBE3EB0BFD86EA5E7 -data4 0x3F4CCCC8,0x3E647FD6 -data8 0x3E2E6A8C86B12760 -data4 0x3F430C30,0x3E8B3AE7 -data8 0x3E47574C5C0739BA -data4 0x3F3A2E88,0x3EA30C68 -data8 0x3E20E30F13E8AF2F -data4 0x3F321640,0x3EB9CEC8 -data8 0xBE42885BF2C630BD -data4 0x3F2AAAA8,0x3ECF9927 -data8 0x3E497F3497E577C6 -data4 0x3F23D708,0x3EE47FC5 -data8 0x3E3E6A6EA6B0A5AB -data4 0x3F1D89D8,0x3EF8947D -data8 0xBDF43E3CD328D9BE -data4 0x3F17B420,0x3F05F3A1 -data8 0x3E4094C30ADB090A -data4 0x3F124920,0x3F0F4303 -data8 0xBE28FBB2FC1FE510 -data4 0x3F0D3DC8,0x3F183EBF -data8 0x3E3A789510FDE3FA -data4 0x3F088888,0x3F20EC80 -data8 0x3E508CE57CC8C98F -data4 0x3F042108,0x3F29516A -data8 0xBE534874A223106C -LOCAL_OBJECT_END(Constants_G_H_h1) - -// Z2 - 16 bit fixed - -LOCAL_OBJECT_START(Constants_Z_2) -data4 0x00008000 -data4 0x00007F81 -data4 0x00007F02 -data4 0x00007E85 -data4 0x00007E08 -data4 0x00007D8D -data4 0x00007D12 -data4 0x00007C98 -data4 0x00007C20 -data4 0x00007BA8 -data4 0x00007B31 -data4 0x00007ABB -data4 0x00007A45 -data4 0x000079D1 -data4 0x0000795D -data4 0x000078EB -LOCAL_OBJECT_END(Constants_Z_2) - -// G2 and H2 - IEEE single and h2 - IEEE double - -LOCAL_OBJECT_START(Constants_G_H_h2) -data4 0x3F800000,0x00000000 -data8 0x0000000000000000 -data4 0x3F7F00F8,0x3B7F875D -data8 0x3DB5A11622C42273 -data4 0x3F7E03F8,0x3BFF015B -data8 0x3DE620CF21F86ED3 -data4 0x3F7D08E0,0x3C3EE393 -data8 0xBDAFA07E484F34ED -data4 0x3F7C0FC0,0x3C7E0586 -data8 0xBDFE07F03860BCF6 -data4 0x3F7B1880,0x3C9E75D2 -data8 0x3DEA370FA78093D6 -data4 0x3F7A2328,0x3CBDC97A -data8 0x3DFF579172A753D0 -data4 0x3F792FB0,0x3CDCFE47 -data8 0x3DFEBE6CA7EF896B -data4 0x3F783E08,0x3CFC15D0 -data8 0x3E0CF156409ECB43 -data4 0x3F774E38,0x3D0D874D -data8 0xBE0B6F97FFEF71DF -data4 0x3F766038,0x3D1CF49B -data8 0xBE0804835D59EEE8 -data4 0x3F757400,0x3D2C531D -data8 0x3E1F91E9A9192A74 -data4 0x3F748988,0x3D3BA322 -data8 0xBE139A06BF72A8CD -data4 0x3F73A0D0,0x3D4AE46F -data8 0x3E1D9202F8FBA6CF -data4 0x3F72B9D0,0x3D5A1756 -data8 0xBE1DCCC4BA796223 -data4 0x3F71D488,0x3D693B9D -data8 0xBE049391B6B7C239 -LOCAL_OBJECT_END(Constants_G_H_h2) - -// G3 and H3 - IEEE single and h3 - IEEE double - -LOCAL_OBJECT_START(Constants_G_H_h3) -data4 0x3F7FFC00,0x38800100 -data8 0x3D355595562224CD -data4 0x3F7FF400,0x39400480 -data8 0x3D8200A206136FF6 -data4 0x3F7FEC00,0x39A00640 -data8 0x3DA4D68DE8DE9AF0 -data4 0x3F7FE400,0x39E00C41 -data8 0xBD8B4291B10238DC -data4 0x3F7FDC00,0x3A100A21 -data8 0xBD89CCB83B1952CA -data4 0x3F7FD400,0x3A300F22 -data8 0xBDB107071DC46826 -data4 0x3F7FCC08,0x3A4FF51C -data8 0x3DB6FCB9F43307DB -data4 0x3F7FC408,0x3A6FFC1D -data8 0xBD9B7C4762DC7872 -data4 0x3F7FBC10,0x3A87F20B -data8 0xBDC3725E3F89154A -data4 0x3F7FB410,0x3A97F68B -data8 0xBD93519D62B9D392 -data4 0x3F7FAC18,0x3AA7EB86 -data8 0x3DC184410F21BD9D -data4 0x3F7FA420,0x3AB7E101 -data8 0xBDA64B952245E0A6 -data4 0x3F7F9C20,0x3AC7E701 -data8 0x3DB4B0ECAABB34B8 -data4 0x3F7F9428,0x3AD7DD7B -data8 0x3D9923376DC40A7E -data4 0x3F7F8C30,0x3AE7D474 -data8 0x3DC6E17B4F2083D3 -data4 0x3F7F8438,0x3AF7CBED -data8 0x3DAE314B811D4394 -data4 0x3F7F7C40,0x3B03E1F3 -data8 0xBDD46F21B08F2DB1 -data4 0x3F7F7448,0x3B0BDE2F -data8 0xBDDC30A46D34522B -data4 0x3F7F6C50,0x3B13DAAA -data8 0x3DCB0070B1F473DB -data4 0x3F7F6458,0x3B1BD766 -data8 0xBDD65DDC6AD282FD -data4 0x3F7F5C68,0x3B23CC5C -data8 0xBDCDAB83F153761A -data4 0x3F7F5470,0x3B2BC997 -data8 0xBDDADA40341D0F8F -data4 0x3F7F4C78,0x3B33C711 -data8 0x3DCD1BD7EBC394E8 -data4 0x3F7F4488,0x3B3BBCC6 -data8 0xBDC3532B52E3E695 -data4 0x3F7F3C90,0x3B43BAC0 -data8 0xBDA3961EE846B3DE -data4 0x3F7F34A0,0x3B4BB0F4 -data8 0xBDDADF06785778D4 -data4 0x3F7F2CA8,0x3B53AF6D -data8 0x3DCC3ED1E55CE212 -data4 0x3F7F24B8,0x3B5BA620 -data8 0xBDBA31039E382C15 -data4 0x3F7F1CC8,0x3B639D12 -data8 0x3D635A0B5C5AF197 -data4 0x3F7F14D8,0x3B6B9444 -data8 0xBDDCCB1971D34EFC -data4 0x3F7F0CE0,0x3B7393BC -data8 0x3DC7450252CD7ADA -data4 0x3F7F04F0,0x3B7B8B6D -data8 0xBDB68F177D7F2A42 -LOCAL_OBJECT_END(Constants_G_H_h3) - - -// Floating Point Registers - -FR_Input_X = f8 - -FR_Y_hi = f34 -FR_Y_lo = f35 - -FR_Scale = f36 -FR_X_Prime = f37 -FR_S_hi = f38 -FR_W = f39 -FR_G = f40 - -FR_H = f41 -FR_wsq = f42 -FR_w4 = f43 -FR_h = f44 -FR_w6 = f45 - -FR_G2 = f46 -FR_H2 = f47 -FR_poly_lo = f48 -FR_P8 = f49 -FR_poly_hi = f50 - -FR_P7 = f51 -FR_h2 = f52 -FR_rsq = f53 -FR_P6 = f54 -FR_r = f55 - -FR_log2_hi = f56 -FR_log2_lo = f57 -FR_p87 = f58 -FR_p876 = f58 -FR_p8765 = f58 -FR_float_N = f59 -FR_Q4 = f60 - -FR_p43 = f61 -FR_p432 = f61 -FR_p4321 = f61 -FR_P4 = f62 -FR_G3 = f63 -FR_H3 = f64 -FR_h3 = f65 - -FR_Q3 = f66 -FR_P3 = f67 -FR_Q2 = f68 -FR_P2 = f69 -FR_1LN10_hi = f70 - -FR_Q1 = f71 -FR_P1 = f72 -FR_1LN10_lo = f73 -FR_P5 = f74 -FR_rcub = f75 - -FR_Output_X_tmp = f76 -FR_Neg_One = f77 -FR_Z = f78 -FR_AA = f79 -FR_BB = f80 -FR_S_lo = f81 -FR_2_to_minus_N = f82 - -FR_X = f8 -FR_Y = f0 -FR_RESULT = f76 - - -// General Purpose Registers - -GR_ad_p = r33 -GR_Index1 = r34 -GR_Index2 = r35 -GR_signif = r36 -GR_X_0 = r37 -GR_X_1 = r38 -GR_X_2 = r39 -GR_minus_N = r39 -GR_Z_1 = r40 -GR_Z_2 = r41 -GR_N = r42 -GR_Bias = r43 -GR_M = r44 -GR_Index3 = r45 -GR_exp_2tom80 = r45 -GR_ad_p2 = r46 -GR_exp_mask = r47 -GR_exp_2tom7 = r48 -GR_ad_ln10 = r49 -GR_ad_tbl_1 = r50 -GR_ad_tbl_2 = r51 -GR_ad_tbl_3 = r52 -GR_ad_q = r53 -GR_ad_z_1 = r54 -GR_ad_z_2 = r55 -GR_ad_z_3 = r56 -GR_minus_N = r39 - -// -// Added for unwind support -// - -GR_SAVE_PFS = r50 -GR_SAVE_B0 = r51 -GR_SAVE_GP = r52 -GR_Parameter_X = r53 -GR_Parameter_Y = r54 -GR_Parameter_RESULT = r55 -GR_Parameter_TAG = r56 - -.section .text -GLOBAL_IEEE754_ENTRY(log1pl) -{ .mfi - alloc r32 = ar.pfs,0,21,4,0 - fclass.m p6, p0 = FR_Input_X, 0x1E3 // Test for natval, nan, inf - nop.i 999 -} -{ .mfi - addl GR_ad_z_1 = @ltoff(Constants_Z_1#),gp - fma.s1 FR_Z = FR_Input_X, f1, f1 // x+1 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fmerge.ns FR_Neg_One = f1, f1 // Form -1.0 - nop.i 999 -} -{ .mfi - nop.m 999 - fnorm.s1 FR_X_Prime = FR_Input_X // Normalize x - nop.i 999 -} -;; - -{ .mfi - ld8 GR_ad_z_1 = [GR_ad_z_1] // Get pointer to Constants_Z_1 - nop.f 999 - mov GR_exp_2tom7 = 0x0fff8 // Exponent of 2^-7 -} -;; - -{ .mfb - getf.sig GR_signif = FR_Z // Get significand of x+1 - fcmp.eq.s1 p9, p0 = FR_Input_X, f0 // Test for x=0 -(p6) br.cond.spnt LOG1P_special // Branch for nan, inf, natval -} -;; - -{ .mfi - add GR_ad_tbl_1 = 0x040, GR_ad_z_1 // Point to Constants_G_H_h1 - fcmp.lt.s1 p13, p0 = FR_X_Prime, FR_Neg_One // Test for x<-1 - add GR_ad_p = -0x100, GR_ad_z_1 // Point to Constants_P -} -{ .mfi - add GR_ad_z_2 = 0x140, GR_ad_z_1 // Point to Constants_Z_2 - nop.f 999 - add GR_ad_tbl_2 = 0x180, GR_ad_z_1 // Point to Constants_G_H_h2 -} -;; - -{ .mfi - add GR_ad_q = 0x080, GR_ad_p // Point to Constants_Q - fcmp.eq.s1 p8, p0 = FR_X_Prime, FR_Neg_One // Test for x=-1 - extr.u GR_Index1 = GR_signif, 59, 4 // Get high 4 bits of signif -} -{ .mfb - add GR_ad_tbl_3 = 0x280, GR_ad_z_1 // Point to Constants_G_H_h3 - nop.f 999 -(p9) br.ret.spnt b0 // Exit if x=0, return input -} -;; - -{ .mfi - shladd GR_ad_z_1 = GR_Index1, 2, GR_ad_z_1 // Point to Z_1 - fclass.nm p10, p0 = FR_Input_X, 0x1FF // Test for unsupported - extr.u GR_X_0 = GR_signif, 49, 15 // Get high 15 bits of significand -} -{ .mfi - ldfe FR_P8 = [GR_ad_p],16 // Load P_8 for near1 path - fsub.s1 FR_W = FR_X_Prime, f0 // W = x - add GR_ad_ln10 = 0x060, GR_ad_q // Point to Constants_1_by_LN10 -} -;; - -{ .mfi - ld4 GR_Z_1 = [GR_ad_z_1] // Load Z_1 - fmax.s1 FR_AA = FR_X_Prime, f1 // For S_lo, form AA = max(X,1.0) - mov GR_exp_mask = 0x1FFFF // Create exponent mask -} -{ .mib - shladd GR_ad_tbl_1 = GR_Index1, 4, GR_ad_tbl_1 // Point to G_1 - mov GR_Bias = 0x0FFFF // Create exponent bias -(p13) br.cond.spnt LOG1P_LT_Minus_1 // Branch if x<-1 -} -;; - -{ .mfb - ldfps FR_G, FR_H = [GR_ad_tbl_1],8 // Load G_1, H_1 - fmerge.se FR_S_hi = f1,FR_Z // Form |x+1| -(p8) br.cond.spnt LOG1P_EQ_Minus_1 // Branch if x=-1 -} -;; - -{ .mmb - getf.exp GR_N = FR_Z // Get N = exponent of x+1 - ldfd FR_h = [GR_ad_tbl_1] // Load h_1 -(p10) br.cond.spnt LOG1P_unsupported // Branch for unsupported type -} -;; - -{ .mfi - ldfe FR_log2_hi = [GR_ad_q],16 // Load log2_hi - fcmp.eq.s0 p8, p0 = FR_Input_X, f0 // Dummy op to flag denormals - pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15 // Get bits 30-15 of X_0 * Z_1 -} -;; - -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mmi - ldfe FR_log2_lo = [GR_ad_q],16 // Load log2_lo - sub GR_N = GR_N, GR_Bias - mov GR_exp_2tom80 = 0x0ffaf // Exponent of 2^-80 -} -;; - -{ .mfi - ldfe FR_Q4 = [GR_ad_q],16 // Load Q4 - fms.s1 FR_S_lo = FR_AA, f1, FR_Z // Form S_lo = AA - Z - sub GR_minus_N = GR_Bias, GR_N // Form exponent of 2^(-N) -} -;; - -{ .mmf - ldfe FR_Q3 = [GR_ad_q],16 // Load Q3 - setf.sig FR_float_N = GR_N // Put integer N into rightmost significand - fmin.s1 FR_BB = FR_X_Prime, f1 // For S_lo, form BB = min(X,1.0) -} -;; - -{ .mmi - getf.exp GR_M = FR_W // Get signexp of w = x - ldfe FR_Q2 = [GR_ad_q],16 // Load Q2 - extr.u GR_Index2 = GR_X_1, 6, 4 // Extract bits 6-9 of X_1 -} -;; - -{ .mmi - ldfe FR_Q1 = [GR_ad_q] // Load Q1 - shladd GR_ad_z_2 = GR_Index2, 2, GR_ad_z_2 // Point to Z_2 - add GR_ad_p2 = 0x30,GR_ad_p // Point to P_4 -} -;; - -{ .mmi - ld4 GR_Z_2 = [GR_ad_z_2] // Load Z_2 - shladd GR_ad_tbl_2 = GR_Index2, 4, GR_ad_tbl_2 // Point to G_2 - and GR_M = GR_exp_mask, GR_M // Get exponent of w = x -} -;; - -{ .mmi - ldfps FR_G2, FR_H2 = [GR_ad_tbl_2],8 // Load G_2, H_2 - cmp.lt p8, p9 = GR_M, GR_exp_2tom7 // Test |x| < 2^-7 - cmp.lt p7, p0 = GR_M, GR_exp_2tom80 // Test |x| < 2^-80 -} -;; - -// Small path is separate code -// p7 is for the small path: |x| < 2^-80 -// near1 and regular paths are merged. -// p8 is for the near1 path: |x| < 2^-7 -// p9 is for regular path: |x| >= 2^-7 - -{ .mfi - ldfd FR_h2 = [GR_ad_tbl_2] // Load h_2 - nop.f 999 - nop.i 999 -} -{ .mfb -(p9) setf.exp FR_2_to_minus_N = GR_minus_N // Form 2^(-N) -(p7) fnma.s0 f8 = FR_X_Prime, FR_X_Prime, FR_X_Prime // Result x - x*x -(p7) br.ret.spnt b0 // Branch if |x| < 2^-80 -} -;; - -{ .mmi -(p8) ldfe FR_P7 = [GR_ad_p],16 // Load P_7 for near1 path -(p8) ldfe FR_P4 = [GR_ad_p2],16 // Load P_4 for near1 path -(p9) pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15 // Get bits 30-15 of X_1 * Z_2 -} -;; - -// -// For performance, don't use result of pmpyshr2.u for 4 cycles. -// -{ .mmf -(p8) ldfe FR_P6 = [GR_ad_p],16 // Load P_6 for near1 path -(p8) ldfe FR_P3 = [GR_ad_p2],16 // Load P_3 for near1 path -(p9) fma.s1 FR_S_lo = FR_S_lo, f1, FR_BB // S_lo = S_lo + BB -} -;; - -{ .mmf -(p8) ldfe FR_P5 = [GR_ad_p],16 // Load P_5 for near1 path -(p8) ldfe FR_P2 = [GR_ad_p2],16 // Load P_2 for near1 path -(p8) fmpy.s1 FR_wsq = FR_W, FR_W // wsq = w * w for near1 path -} -;; - -{ .mmi -(p8) ldfe FR_P1 = [GR_ad_p2],16 ;; // Load P_1 for near1 path - nop.m 999 -(p9) extr.u GR_Index3 = GR_X_2, 1, 5 // Extract bits 1-5 of X_2 -} -;; - -{ .mfi -(p9) shladd GR_ad_tbl_3 = GR_Index3, 4, GR_ad_tbl_3 // Point to G_3 -(p9) fcvt.xf FR_float_N = FR_float_N - nop.i 999 -} -;; - -{ .mfi -(p9) ldfps FR_G3, FR_H3 = [GR_ad_tbl_3],8 // Load G_3, H_3 - nop.f 999 - nop.i 999 -} -;; - -{ .mfi -(p9) ldfd FR_h3 = [GR_ad_tbl_3] // Load h_3 -(p9) fmpy.s1 FR_G = FR_G, FR_G2 // G = G_1 * G_2 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fadd.s1 FR_H = FR_H, FR_H2 // H = H_1 + H_2 - nop.i 999 -} -;; - -{ .mmf - nop.m 999 - nop.m 999 -(p9) fadd.s1 FR_h = FR_h, FR_h2 // h = h_1 + h_2 -} -;; - -{ .mfi - nop.m 999 -(p8) fmpy.s1 FR_w4 = FR_wsq, FR_wsq // w4 = w^4 for near1 path - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 FR_p87 = FR_W, FR_P8, FR_P7 // p87 = w * P8 + P7 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_S_lo = FR_S_lo, FR_2_to_minus_N, f0 // S_lo = S_lo * 2^(-N) - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 FR_p43 = FR_W, FR_P4, FR_P3 // p43 = w * P4 + P3 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fmpy.s1 FR_G = FR_G, FR_G3 // G = (G_1 * G_2) * G_3 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fadd.s1 FR_H = FR_H, FR_H3 // H = (H_1 + H_2) + H_3 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fadd.s1 FR_h = FR_h, FR_h3 // h = (h_1 + h_2) + h_3 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fmpy.s1 FR_w6 = FR_w4, FR_wsq // w6 = w^6 for near1 path - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fma.s1 FR_p432 = FR_W, FR_p43, FR_P2 // p432 = w * p43 + P2 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 FR_p876 = FR_W, FR_p87, FR_P6 // p876 = w * p87 + P6 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fms.s1 FR_r = FR_G, FR_S_hi, f1 // r = G * S_hi - 1 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 FR_Y_hi = FR_float_N, FR_log2_hi, FR_H // Y_hi = N * log2_hi + H - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_h = FR_float_N, FR_log2_lo, FR_h // h = N * log2_lo + h - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_r = FR_G, FR_S_lo, FR_r // r = G * S_lo + (G * S_hi - 1) - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fma.s1 FR_p4321 = FR_W, FR_p432, FR_P1 // p4321 = w * p432 + P1 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 FR_p8765 = FR_W, FR_p876, FR_P5 // p8765 = w * p876 + P5 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3 // poly_lo = r * Q4 + Q3 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fmpy.s1 FR_rsq = FR_r, FR_r // rsq = r * r - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fma.s1 FR_Y_lo = FR_wsq, FR_p4321, f0 // Y_lo = wsq * p4321 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 FR_Y_hi = FR_W, f1, f0 // Y_hi = w for near1 path - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 // poly_lo = poly_lo * r + Q2 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 FR_rcub = FR_rsq, FR_r, f0 // rcub = r^3 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p8) fma.s1 FR_Y_lo = FR_w6, FR_p8765,FR_Y_lo // Y_lo = w6 * p8765 + w2 * p4321 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r // poly_hi = Q1 * rsq + r - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fma.s1 FR_poly_lo = FR_poly_lo, FR_rcub, FR_h // poly_lo = poly_lo*r^3 + h - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fadd.s1 FR_Y_lo = FR_poly_hi, FR_poly_lo // Y_lo = poly_hi + poly_lo - nop.i 999 -} -;; - -// Remainder of code is common for near1 and regular paths -{ .mfb - nop.m 999 - fadd.s0 f8 = FR_Y_lo,FR_Y_hi // Result=Y_lo+Y_hi - br.ret.sptk b0 // Common exit for 2^-80 < x < inf -} -;; - - -// Here if x=-1 -LOG1P_EQ_Minus_1: -// -// If x=-1 raise divide by zero and return -inf -// -{ .mfi - mov GR_Parameter_TAG = 138 - fsub.s1 FR_Output_X_tmp = f0, f1 - nop.i 999 -} -;; - -{ .mfb - nop.m 999 - frcpa.s0 FR_Output_X_tmp, p8 = FR_Output_X_tmp, f0 - br.cond.sptk __libm_error_region -} -;; - -LOG1P_special: -{ .mfi - nop.m 999 - fclass.m.unc p8, p0 = FR_Input_X, 0x1E1 // Test for natval, nan, +inf - nop.i 999 -} -;; - -// -// For SNaN raise invalid and return QNaN. -// For QNaN raise invalid and return QNaN. -// For +Inf return +Inf. -// -{ .mfb - nop.m 999 -(p8) fmpy.s0 f8 = FR_Input_X, f1 -(p8) br.ret.sptk b0 // Return for natval, nan, +inf -} -;; - -// -// For -Inf raise invalid and return QNaN. -// -{ .mfb - mov GR_Parameter_TAG = 139 - fmpy.s0 FR_Output_X_tmp = FR_Input_X, f0 - br.cond.sptk __libm_error_region -} -;; - - -LOG1P_unsupported: -// -// Return generated NaN or other value. -// -{ .mfb - nop.m 999 - fmpy.s0 f8 = FR_Input_X, f0 - br.ret.sptk b0 -} -;; - -// Here if -inf < x < -1 -LOG1P_LT_Minus_1: -// -// Deal with x < -1 in a special way - raise -// invalid and produce QNaN indefinite. -// -{ .mfb - mov GR_Parameter_TAG = 139 - frcpa.s0 FR_Output_X_tmp, p8 = f0, f0 - br.cond.sptk __libm_error_region -} -;; - - -GLOBAL_IEEE754_END(log1pl) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 999 - nop.m 999 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region#) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_logb.S b/sysdeps/ia64/fpu/s_logb.S deleted file mode 100644 index 7ee898712b..0000000000 --- a/sysdeps/ia64/fpu/s_logb.S +++ /dev/null @@ -1,281 +0,0 @@ -.file "logb.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 02/16/00 Modified to conform to C9X -// 03/16/00 Improved speed -// 04/04/00 Unwind support added -// 05/30/00 Fixed bug when x double-extended denormal -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/20/03 Improved performance -// -// API -//============================================================== -// double logb( double x ); -// -// Overview of operation -//============================================================== -// The logb function extracts the exponent of x as an integer in -// floating-point format. -// logb computes log2 of x as a double -// -// logb is similar to ilogb but differs in the following ways: -// +-inf -// ilogb: returns INT_MAX -// logb: returns +inf -// Nan returns FP_LOGBNAN (which is either INT_MAX or INT_MIN) -// ilogb: returns INT_MAX (7fffffff) -// logb: returns QNAN (quietized SNAN) -// 0 returns FP_ILOGB0 (which is either INT_MIN or -INT_MAX) -// ilogb: returns -INT_MAX (80000001) -// logb: returns -inf, raises the divide-by-zero exception, -// and calls libm_error_support to set domain error -// -// Registers used -//============================================================== -// general registers used: -// r26 -> r38 -// r35 -> r38 used as parameters to error path -// -// predicate registers used: -// p6, p7, p8 -// floating-point registers used: -// f9, f10, f11 -// f8, input - -rExpBias = r26 -rExpMask = r27 -rSignexp_x = r28 -rExp_x = r29 -rTrueExp_x = r30 -rExp_2to64 = r31 - -GR_SAVE_PFS = r32 -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 - -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Parameter_TAG = r38 - -fExp_in_signif = f9 -fNorm_x = f10 -fFloat_Exp = f10 -f2to64 = f11 - -.section .text -GLOBAL_LIBM_ENTRY(logb) - -// X NORMAL -// TrueExp_x = exp(f8) - 0xffff -// sig = TrueExp_x -// f8 = convert_to_fp (sig)) -{ .mfi - getf.exp rSignexp_x = f8 - fclass.m p8,p0 = f8, 0x0b // Test for x unorm - mov rExpBias = 0xffff // Exponent bias -} -{ .mfi - nop.m 0 - fnorm.s1 fNorm_x = f8 - mov rExpMask = 0x1ffff // Exponent mask -} -;; - -// Form signexp of 2^64 in case need to scale denormal -{ .mfb - mov rExp_2to64 = 0x1003f - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf -(p8) br.cond.spnt LOGB_DENORM // Branch if x unorm -} -;; - -LOGB_COMMON: -// Return here from LOGB_DENORM -{ .mfi - and rExp_x = rSignexp_x, rExpMask // Get biased exponent - fclass.m p7,p0 = f8, 0x07 // Test x zero - nop.i 0 -} -;; - -// X NAN or INFINITY, return f8 * f8 -{ .mfb - sub rTrueExp_x = rExp_x, rExpBias // Get true exponent -(p6) fma.d.s0 f8= f8,f8,f0 // Result if x natval, nan, inf -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf -} -;; - -{ .mib - setf.sig fExp_in_signif = rTrueExp_x // Exponent as integer in fp - nop.i 999 -(p7) br.cond.spnt LOGB_ZERO -} -;; - -// Result can be represented in less than 24 bits, so no precision completer -// is needed. -{ .mfb - nop.m 0 - fcvt.xf f8 = fExp_in_signif - br.ret.sptk b0 // Exit main path, 0 < |x| < inf -} -;; - -LOGB_DENORM: -// Form 2^64 in case need to scale denormal -// Check to see if double-extended denormal -{ .mfi - setf.exp f2to64 = rExp_2to64 - fclass.m p8,p0 = fNorm_x, 0x0b - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - nop.i 0 -} -;; - -// If double-extended denormal add 64 to exponent bias for scaling -// If double-extended denormal form x * 2^64 which is normal -{ .mfi -(p8) add rExpBias = 64, rExpBias -(p8) fmpy.s1 fNorm_x = fNorm_x, f2to64 - nop.i 0 -} -;; - -// Logic is the same as normal path but use normalized input -{ .mib - getf.exp rSignexp_x = fNorm_x - nop.i 0 - br.cond.sptk LOGB_COMMON // Return to main path -} -;; - -LOGB_ZERO: -// Here if x zero -// f10 = -|f8| -// f9 = 1.0/f10 = -1.0/|f8| = -inf - -{ .mmf - alloc r32=ar.pfs,1,2,4,0 - mov GR_Parameter_TAG = 151 // Error code - fmerge.ns f10 = f0,f8 -} -;; - -{ .mfb - nop.m 0 - frcpa.s0 f9,p6 = f1,f10 // Produce -inf, Z flag - br.cond.sptk __libm_error_region // Call error support -} -;; - -GLOBAL_LIBM_END(logb) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfd [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfd [GR_Parameter_X] = f8 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = f9 // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_logbf.S b/sysdeps/ia64/fpu/s_logbf.S deleted file mode 100644 index eefa270db9..0000000000 --- a/sysdeps/ia64/fpu/s_logbf.S +++ /dev/null @@ -1,281 +0,0 @@ -.file "logbf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 02/16/00 Modified to conform to C9X -// 03/16/00 Improved speed -// 04/04/00 Unwind support added -// 05/30/00 Fixed bug when x double-extended denormal -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/20/03 Improved performance -// -// API -//============================================================== -// float logbf( float x ); -// -// Overview of operation -//============================================================== -// The logbf function extracts the exponent of x as an integer in -// floating-point format. -// logbf computes log2 of x as a float -// -// logbf is similar to ilogbf but differs in the following ways: -// +-inf -// ilogbf: returns INT_MAX -// logbf: returns +inf -// Nan returns FP_LOGBNAN (which is either INT_MAX or INT_MIN) -// ilogbf: returns INT_MAX (7fffffff) -// logbf: returns QNAN (quietized SNAN) -// 0 returns FP_ILOGB0 (which is either INT_MIN or -INT_MAX) -// ilogbf: returns -INT_MAX (80000001) -// logbf: returns -inf, raises the divide-by-zero exception, -// and calls libm_error_support to set domain error -// -// Registers used -//============================================================== -// general registers used: -// r26 -> r38 -// r35 -> r38 used as parameters to error path -// -// predicate registers used: -// p6, p7, p8 -// floating-point registers used: -// f9, f10, f11 -// f8, input - -rExpBias = r26 -rExpMask = r27 -rSignexp_x = r28 -rExp_x = r29 -rTrueExp_x = r30 -rExp_2to64 = r31 - -GR_SAVE_PFS = r32 -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 - -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Parameter_TAG = r38 - -fExp_in_signif = f9 -fNorm_x = f10 -fFloat_Exp = f10 -f2to64 = f11 - -.section .text -GLOBAL_LIBM_ENTRY(logbf) - -// X NORMAL -// TrueExp_x = exp(f8) - 0xffff -// sig = TrueExp_x -// f8 = convert_to_fp (sig)) -{ .mfi - getf.exp rSignexp_x = f8 - fclass.m p8,p0 = f8, 0x0b // Test for x unorm - mov rExpBias = 0xffff // Exponent bias -} -{ .mfi - nop.m 0 - fnorm.s1 fNorm_x = f8 - mov rExpMask = 0x1ffff // Exponent mask -} -;; - -// Form signexp of 2^64 in case need to scale denormal -{ .mfb - mov rExp_2to64 = 0x1003f - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf -(p8) br.cond.spnt LOGB_DENORM // Branch if x unorm -} -;; - -LOGB_COMMON: -// Return here from LOGB_DENORM -{ .mfi - and rExp_x = rSignexp_x, rExpMask // Get biased exponent - fclass.m p7,p0 = f8, 0x07 // Test x zero - nop.i 0 -} -;; - -// X NAN or INFINITY, return f8 * f8 -{ .mfb - sub rTrueExp_x = rExp_x, rExpBias // Get true exponent -(p6) fma.s.s0 f8= f8,f8,f0 // Result if x natval, nan, inf -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf -} -;; - -{ .mib - setf.sig fExp_in_signif = rTrueExp_x // Exponent as integer in fp - nop.i 999 -(p7) br.cond.spnt LOGB_ZERO -} -;; - -// Result can be represented in less than 24 bits, so no precision completer -// is needed. -{ .mfb - nop.m 0 - fcvt.xf f8 = fExp_in_signif - br.ret.sptk b0 // Exit main path, 0 < |x| < inf -} -;; - -LOGB_DENORM: -// Form 2^64 in case need to scale denormal -// Check to see if double-extended denormal -{ .mfi - setf.exp f2to64 = rExp_2to64 - fclass.m p8,p0 = fNorm_x, 0x0b - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - nop.i 0 -} -;; - -// If double-extended denormal add 64 to exponent bias for scaling -// If double-extended denormal form x * 2^64 which is normal -{ .mfi -(p8) add rExpBias = 64, rExpBias -(p8) fmpy.s1 fNorm_x = fNorm_x, f2to64 - nop.i 0 -} -;; - -// Logic is the same as normal path but use normalized input -{ .mib - getf.exp rSignexp_x = fNorm_x - nop.i 0 - br.cond.sptk LOGB_COMMON // Return to main path -} -;; - -LOGB_ZERO: -// Here if x zero -// f10 = -|f8| -// f9 = 1.0/f10 = -1.0/|f8| = -inf - -{ .mmf - alloc r32=ar.pfs,1,2,4,0 - mov GR_Parameter_TAG = 152 // Error code - fmerge.ns f10 = f0,f8 -} -;; - -{ .mfb - nop.m 0 - frcpa.s0 f9,p6 = f1,f10 // Produce -inf, Z flag - br.cond.sptk __libm_error_region // Call error support -} -;; - -GLOBAL_LIBM_END(logbf) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfs [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfs [GR_Parameter_X] = f8 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = f9 // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_logbl.S b/sysdeps/ia64/fpu/s_logbl.S deleted file mode 100644 index e312c1b438..0000000000 --- a/sysdeps/ia64/fpu/s_logbl.S +++ /dev/null @@ -1,281 +0,0 @@ -.file "logbl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 02/16/00 Modified to conform to C9X -// 03/16/00 Improved speed -// 04/04/00 Unwind support added -// 05/30/00 Fixed bug when x double-extended denormal -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/20/03 Improved performance -// -// API -//============================================================== -// long double logbl( long double x ); -// -// Overview of operation -//============================================================== -// The logbl function extracts the exponent of x as an integer in -// floating-point format. -// logbl computes log2 of x as a long double -// -// logbl is similar to ilogbl but differs in the following ways: -// +-inf -// ilogbl: returns INT_MAX -// logbl: returns +inf -// Nan returns FP_LOGBNAN (which is either INT_MAX or INT_MIN) -// ilogbl: returns INT_MAX (7fffffff) -// logbl: returns QNAN (quietized SNAN) -// 0 returns FP_ILOGB0 (which is either INT_MIN or -INT_MAX) -// ilogbl: returns -INT_MAX (80000001) -// logbl: returns -inf, raises the divide-by-zero exception, -// and calls libm_error_support to set domain error -// -// Registers used -//============================================================== -// general registers used: -// r26 -> r38 -// r35 -> r38 used as parameters to error path -// -// predicate registers used: -// p6, p7, p8 -// floating-point registers used: -// f9, f10, f11 -// f8, input - -rExpBias = r26 -rExpMask = r27 -rSignexp_x = r28 -rExp_x = r29 -rTrueExp_x = r30 -rExp_2to64 = r31 - -GR_SAVE_PFS = r32 -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 - -GR_Parameter_X = r35 -GR_Parameter_Y = r36 -GR_Parameter_RESULT = r37 -GR_Parameter_TAG = r38 - -fExp_in_signif = f9 -fNorm_x = f10 -fFloat_Exp = f10 -f2to64 = f11 - -.section .text -GLOBAL_LIBM_ENTRY(logbl) - -// X NORMAL -// TrueExp_x = exp(f8) - 0xffff -// sig = TrueExp_x -// f8 = convert_to_fp (sig)) -{ .mfi - getf.exp rSignexp_x = f8 - fclass.m p8,p0 = f8, 0x0b // Test for x unorm - mov rExpBias = 0xffff // Exponent bias -} -{ .mfi - nop.m 0 - fnorm.s1 fNorm_x = f8 - mov rExpMask = 0x1ffff // Exponent mask -} -;; - -// Form signexp of 2^64 in case need to scale denormal -{ .mfb - mov rExp_2to64 = 0x1003f - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf -(p8) br.cond.spnt LOGB_DENORM // Branch if x unorm -} -;; - -LOGB_COMMON: -// Return here from LOGB_DENORM -{ .mfi - and rExp_x = rSignexp_x, rExpMask // Get biased exponent - fclass.m p7,p0 = f8, 0x07 // Test x zero - nop.i 0 -} -;; - -// X NAN or INFINITY, return f8 * f8 -{ .mfb - sub rTrueExp_x = rExp_x, rExpBias // Get true exponent -(p6) fma.s0 f8= f8,f8,f0 // Result if x natval, nan, inf -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf -} -;; - -{ .mib - setf.sig fExp_in_signif = rTrueExp_x // Exponent as integer in fp - nop.i 999 -(p7) br.cond.spnt LOGB_ZERO -} -;; - -// Result can be represented in less than 24 bits, so no precision completer -// is needed. -{ .mfb - nop.m 0 - fcvt.xf f8 = fExp_in_signif - br.ret.sptk b0 // Exit main path, 0 < |x| < inf -} -;; - -LOGB_DENORM: -// Form 2^64 in case need to scale denormal -// Check to see if double-extended denormal -{ .mfi - setf.exp f2to64 = rExp_2to64 - fclass.m p8,p0 = fNorm_x, 0x0b - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - nop.i 0 -} -;; - -// If double-extended denormal add 64 to exponent bias for scaling -// If double-extended denormal form x * 2^64 which is normal -{ .mfi -(p8) add rExpBias = 64, rExpBias -(p8) fmpy.s1 fNorm_x = fNorm_x, f2to64 - nop.i 0 -} -;; - -// Logic is the same as normal path but use normalized input -{ .mib - getf.exp rSignexp_x = fNorm_x - nop.i 0 - br.cond.sptk LOGB_COMMON // Return to main path -} -;; - -LOGB_ZERO: -// Here if x zero -// f10 = -|f8| -// f9 = 1.0/f10 = -1.0/|f8| = -inf - -{ .mmf - alloc r32=ar.pfs,1,2,4,0 - mov GR_Parameter_TAG = 150 // Error code - fmerge.ns f10 = f0,f8 -} -;; - -{ .mfb - nop.m 0 - frcpa.s0 f9,p6 = f1,f10 // Produce -inf, Z flag - br.cond.sptk __libm_error_region // Call error support -} -;; - -GLOBAL_LIBM_END(logbl) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -{ .mmi - stfe [GR_Parameter_Y] = f0,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -{ .mib - stfe [GR_Parameter_X] = f8 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfe [GR_Parameter_Y] = f9 // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; - -{ .mmi - add GR_Parameter_RESULT = 48,sp - nop.m 0 - nop.i 0 -};; - -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; - -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 -};; - -LOCAL_LIBM_END(__libm_error_region) - - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_matherrf.c b/sysdeps/ia64/fpu/s_matherrf.c deleted file mode 100644 index a47d4b89a2..0000000000 --- a/sysdeps/ia64/fpu/s_matherrf.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Derived from: */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - - -#include -#include -#include "libm_support.h" - -int -weak_function -__matherrf(struct exceptionf *x) -{ - int n=0; - if(x->arg1!=x->arg1) return 0; - return n; -} -weak_alias (__matherrf, matherrf) diff --git a/sysdeps/ia64/fpu/s_matherrl.c b/sysdeps/ia64/fpu/s_matherrl.c deleted file mode 100644 index 6fe92d7739..0000000000 --- a/sysdeps/ia64/fpu/s_matherrl.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Derived from: */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - - -#include -#include -#include "libm_support.h" - -int -weak_function -__matherrl(struct exceptionl *x) -{ - int n=0; - if(x->arg1!=x->arg1) return 0; - return n; -} -weak_alias (__matherrl, matherrl) diff --git a/sysdeps/ia64/fpu/s_modf.S b/sysdeps/ia64/fpu/s_modf.S deleted file mode 100644 index 4634acfb0d..0000000000 --- a/sysdeps/ia64/fpu/s_modf.S +++ /dev/null @@ -1,278 +0,0 @@ -.file "modf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/04/00 Improved speed, corrected result for NaN input -// 12/22/00 Fixed so inexact flag is never set, and invalid is not set for -// qnans nor for inputs larger than 2^63. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// double modf(double x, double *iptr) -// break a floating point x number into fraction and an exponent -// -// input floating point f8, address in r33 -// output floating point f8 (x fraction), and *iptr (x integral part) -// -// OVERVIEW -//============================================================== -// -// NO FRACTIONAL PART: HUGE -// If -// for double-extended -// If the true exponent is greater than or equal 63 -// 1003e ==> 1003e -ffff = 3f = 63(dec) -// for double -// If the true exponent is greater than or equal 52 -// 10033 -ffff = 34 = 52(dec) -// for single -// If the true exponent is greater than or equal 23 -// 10016 -ffff = 17 = 23(dec) -// then -// we are already an integer (p9 true) - -// NO INTEGER PART: SMALL -// Is f8 exponent less than register bias (that is, is it -// less than 1). If it is, get the right sign of -// zero and store this in iptr. - -// CALCULATION: NOT HUGE, NOT SMALL -// To get the integer part -// Take the floating-point input and truncate -// then convert this integer to fp Call it MODF_INTEGER_PART - -// Subtract MODF_INTEGER_PART from MODF_NORM_F8 to get fraction part -// Then put fraction part in f8 -// put integer part MODF_INTEGER_PART into *iptr - -// Registers used -//============================================================== - -// predicate registers used: -// p6 - p13 - -// 0xFFFF 0x10033 -// -----------------------+-----------------+------------- -// SMALL | NORMAL | HUGE -// p11 --------------->|<----- p12 ----->| <-------------- p9 -// p10 --------------------------------->| -// p13 --------------------------------------------------->| -// - -// floating-point registers used: -MODF_NORM_F8 = f9 -MODF_FRACTION_PART = f10 -MODF_INTEGER_PART = f11 -MODF_INT_INTEGER_PART = f12 - - -// general registers used -modf_signexp = r14 -modf_GR_no_frac = r15 -modf_GR_FFFF = r16 -modf_17_ones = r17 -modf_exp = r18 -// r33 = iptr - - -.section .text -GLOBAL_LIBM_ENTRY(modf) - -// Main path is p9, p11, p8 FALSE and p12 TRUE - -// Assume input is normalized and get signexp -// Normalize input just in case -// Form exponent bias -{ .mfi - getf.exp modf_signexp = f8 - fnorm.s0 MODF_NORM_F8 = f8 - addl modf_GR_FFFF = 0xffff, r0 -} -// Get integer part of input -// Form exponent mask -{ .mfi - nop.m 999 - fcvt.fx.trunc.s1 MODF_INT_INTEGER_PART = f8 - mov modf_17_ones = 0x1ffff ;; -} - -// Is x nan or inf? -// qnan snan inf norm unorm 0 -+ -// 1 1 1 0 0 0 11 = 0xe3 NAN_INF -// Form biased exponent where input only has an integer part -{ .mfi - nop.m 999 - fclass.m.unc p6,p13 = f8, 0xe3 - addl modf_GR_no_frac = 0x10033, r0 ;; -} - -// Mask to get exponent -// Is x unnorm? -// qnan snan inf norm unorm 0 -+ -// 0 0 0 0 1 0 11 = 0x0b UNORM -// Set p13 to indicate calculation path, else p6 if nan or inf -{ .mfi - and modf_exp = modf_17_ones, modf_signexp - fclass.m.unc p8,p0 = f8, 0x0b - nop.i 999 ;; -} - -// p11 <== SMALL, no integer part, fraction is everyting -// p9 <== HUGE, no fraction part, integer is everything -// p12 <== NORMAL, fraction part and integer part -{ .mii -(p13) cmp.lt.unc p11,p10 = modf_exp, modf_GR_FFFF - nop.i 999 - nop.i 999 ;; -} - -// Is x inf? p6 if inf, p7 if nan -{ .mfb -(p10) cmp.ge.unc p9,p12 = modf_exp, modf_GR_no_frac -(p6) fclass.m.unc p6,p7 = f8, 0x23 -(p8) br.cond.spnt MODF_DENORM ;; -} - -MODF_COMMON: -// For HUGE set fraction to signed 0 -{ .mfi - nop.m 999 -(p9) fmerge.s f8 = f8,f0 - nop.i 999 -} -// For HUGE set integer part to normalized input -{ .mfi - nop.m 999 -(p9) fnorm.d.s0 MODF_INTEGER_PART = MODF_NORM_F8 - nop.i 999 ;; -} - -// For SMALL set fraction to normalized input, integer part to signed 0 -{ .mfi - nop.m 999 -(p11) fmerge.s MODF_INTEGER_PART = f8,f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fnorm.d.s0 f8 = MODF_NORM_F8 - nop.i 999 ;; -} - -// For NORMAL float the integer part -{ .mfi - nop.m 999 -(p12) fcvt.xf MODF_INTEGER_PART = MODF_INT_INTEGER_PART - nop.i 999 ;; -} - -// If x inf set integer part to INF, fraction to signed 0 -{ .mfi -(p6) stfd [r33] = MODF_NORM_F8 -(p6) fmerge.s f8 = f8,f0 - nop.i 999 ;; -} - -// If x nan set integer and fraction parts to NaN (quietized) -{ .mfi -(p7) stfd [r33] = MODF_NORM_F8 -(p7) fmerge.s f8 = MODF_NORM_F8, MODF_NORM_F8 - nop.i 999 ;; -} - -{ .mmi -(p9) stfd [r33] = MODF_INTEGER_PART - nop.m 999 - nop.i 999 ;; -} - -// For NORMAL compute fraction part -{ .mfi -(p11) stfd [r33] = MODF_INTEGER_PART -(p12) fms.d.s0 f8 = MODF_NORM_F8,f1, MODF_INTEGER_PART - nop.i 999 ;; -} - -// For NORMAL test if fraction part is zero; if so append correct sign -{ .mfi - nop.m 999 -(p12) fcmp.eq.unc.s0 p7,p0 = MODF_NORM_F8, MODF_INTEGER_PART - nop.i 999 ;; -} - -{ .mfi -(p12) stfd [r33] = MODF_INTEGER_PART - nop.f 999 - nop.i 999 ;; -} - -// For NORMAL if fraction part is zero append sign of input -{ .mfb - nop.m 999 -(p7) fmerge.s f8 = MODF_NORM_F8, f0 - br.ret.sptk b0 ;; -} - -MODF_DENORM: -// If x unorm get signexp from normalized input -// If x unorm get integer part from normalized input -{ .mfi - getf.exp modf_signexp = MODF_NORM_F8 - fcvt.fx.trunc.s1 MODF_INT_INTEGER_PART = MODF_NORM_F8 - nop.i 999 ;; -} - -// If x unorm mask to get exponent -{ .mmi - and modf_exp = modf_17_ones, modf_signexp ;; - cmp.lt.unc p11,p10 = modf_exp, modf_GR_FFFF - nop.i 999 ;; -} - -{ .mfb -(p10) cmp.ge.unc p9,p12 = modf_exp, modf_GR_no_frac - nop.f 999 - br.cond.spnt MODF_COMMON ;; -} - -GLOBAL_LIBM_END(modf) diff --git a/sysdeps/ia64/fpu/s_modff.S b/sysdeps/ia64/fpu/s_modff.S deleted file mode 100644 index 36e02be81b..0000000000 --- a/sysdeps/ia64/fpu/s_modff.S +++ /dev/null @@ -1,278 +0,0 @@ -.file "modff.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/04/00 Improved speed, corrected result for NaN input -// 12/22/00 Fixed so inexact flag is never set, and invalid is not set for -// qnans nor for inputs larger than 2^63. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// float modff(float x, float *iptr) -// break a floating point x number into fraction and an exponent -// -// input floating point f8, address in r33 -// output floating point f8 (x fraction), and *iptr (x integral part) -// -// OVERVIEW -//============================================================== - -// NO FRACTIONAL PART: HUGE -// If -// for double-extended -// If the true exponent is greater than or equal 63 -// 1003e ==> 1003e -ffff = 3f = 63(dec) -// for double -// If the true exponent is greater than or equal 52 -// 10033 -ffff = 34 = 52(dec) -// for single -// If the true exponent is greater than or equal 23 -// 10016 -ffff = 17 = 23(dec) -// then -// we are already an integer (p9 true) - -// NO INTEGER PART: SMALL -// Is f8 exponent less than register bias (that is, is it -// less than 1). If it is, get the right sign of -// zero and store this in iptr. - -// CALCULATION: NOT HUGE, NOT SMALL -// To get the integer part -// Take the floating-point input and truncate -// then convert this integer to fp Call it MODF_INTEGER_PART - -// Subtract MODF_INTEGER_PART from MODF_NORM_F8 to get fraction part -// Then put fraction part in f8 -// put integer part MODF_INTEGER_PART into *iptr - -// Registers used -//============================================================== - -// predicate registers used: -// p6 - p13 - -// 0xFFFF 0x10016 -// -----------------------+-----------------+------------- -// SMALL | NORMAL | HUGE -// p11 --------------->|<----- p12 ----->| <-------------- p9 -// p10 --------------------------------->| -// p13 --------------------------------------------------->| -// - -// floating-point registers used: -MODF_NORM_F8 = f9 -MODF_FRACTION_PART = f10 -MODF_INTEGER_PART = f11 -MODF_INT_INTEGER_PART = f12 - - -// general registers used -modf_signexp = r14 -modf_GR_no_frac = r15 -modf_GR_FFFF = r16 -modf_17_ones = r17 -modf_exp = r18 -// r33 = iptr - - -.section .text -GLOBAL_LIBM_ENTRY(modff) - -// Main path is p9, p11, p8 FALSE and p12 TRUE - -// Assume input is normalized and get signexp -// Normalize input just in case -// Form exponent bias -{ .mfi - getf.exp modf_signexp = f8 - fnorm.s0 MODF_NORM_F8 = f8 - addl modf_GR_FFFF = 0xffff, r0 -} -// Get integer part of input -// Form exponent mask -{ .mfi - nop.m 999 - fcvt.fx.trunc.s1 MODF_INT_INTEGER_PART = f8 - mov modf_17_ones = 0x1ffff ;; -} - -// Is x nan or inf? -// qnan snan inf norm unorm 0 -+ -// 1 1 1 0 0 0 11 = 0xe3 NAN_INF -// Form biased exponent where input only has an integer part -{ .mfi - nop.m 999 - fclass.m.unc p6,p13 = f8, 0xe3 - addl modf_GR_no_frac = 0x10016, r0 ;; -} - -// Mask to get exponent -// Is x unnorm? -// qnan snan inf norm unorm 0 -+ -// 0 0 0 0 1 0 11 = 0x0b UNORM -// Set p13 to indicate calculation path, else p6 if nan or inf -{ .mfi - and modf_exp = modf_17_ones, modf_signexp - fclass.m.unc p8,p0 = f8, 0x0b - nop.i 999 ;; -} - -// p11 <== SMALL, no integer part, fraction is everyting -// p9 <== HUGE, no fraction part, integer is everything -// p12 <== NORMAL, fraction part and integer part -{ .mii -(p13) cmp.lt.unc p11,p10 = modf_exp, modf_GR_FFFF - nop.i 999 - nop.i 999 ;; -} - -// Is x inf? p6 if inf, p7 if nan -{ .mfb -(p10) cmp.ge.unc p9,p12 = modf_exp, modf_GR_no_frac -(p6) fclass.m.unc p6,p7 = f8, 0x23 -(p8) br.cond.spnt MODF_DENORM ;; -} - -MODF_COMMON: -// For HUGE set fraction to signed 0 -{ .mfi - nop.m 999 -(p9) fmerge.s f8 = f8,f0 - nop.i 999 -} -// For HUGE set integer part to normalized input -{ .mfi - nop.m 999 -(p9) fnorm.s.s0 MODF_INTEGER_PART = MODF_NORM_F8 - nop.i 999 ;; -} - -// For SMALL set fraction to normalized input, integer part to signed 0 -{ .mfi - nop.m 999 -(p11) fmerge.s MODF_INTEGER_PART = f8,f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fnorm.s.s0 f8 = MODF_NORM_F8 - nop.i 999 ;; -} - -// For NORMAL float the integer part -{ .mfi - nop.m 999 -(p12) fcvt.xf MODF_INTEGER_PART = MODF_INT_INTEGER_PART - nop.i 999 ;; -} - -// If x inf set integer part to INF, fraction to signed 0 -{ .mfi -(p6) stfs [r33] = MODF_NORM_F8 -(p6) fmerge.s f8 = f8,f0 - nop.i 999 ;; -} - -// If x nan set integer and fraction parts to NaN (quietized) -{ .mfi -(p7) stfs [r33] = MODF_NORM_F8 -(p7) fmerge.s f8 = MODF_NORM_F8, MODF_NORM_F8 - nop.i 999 ;; -} - -{ .mmi -(p9) stfs [r33] = MODF_INTEGER_PART - nop.m 999 - nop.i 999 ;; -} - -// For NORMAL compute fraction part -{ .mfi -(p11) stfs [r33] = MODF_INTEGER_PART -(p12) fms.s.s0 f8 = MODF_NORM_F8,f1, MODF_INTEGER_PART - nop.i 999 ;; -} - -// For NORMAL test if fraction part is zero; if so append correct sign -{ .mfi - nop.m 999 -(p12) fcmp.eq.unc.s0 p7,p0 = MODF_NORM_F8, MODF_INTEGER_PART - nop.i 999 ;; -} - -{ .mfi -(p12) stfs [r33] = MODF_INTEGER_PART - nop.f 999 - nop.i 999 ;; -} - -// For NORMAL if fraction part is zero append sign of input -{ .mfb - nop.m 999 -(p7) fmerge.s f8 = MODF_NORM_F8, f0 - br.ret.sptk b0 ;; -} - -MODF_DENORM: -// If x unorm get signexp from normalized input -// If x unorm get integer part from normalized input -{ .mfi - getf.exp modf_signexp = MODF_NORM_F8 - fcvt.fx.trunc.s1 MODF_INT_INTEGER_PART = MODF_NORM_F8 - nop.i 999 ;; -} - -// If x unorm mask to get exponent -{ .mmi - and modf_exp = modf_17_ones, modf_signexp ;; - cmp.lt.unc p11,p10 = modf_exp, modf_GR_FFFF - nop.i 999 ;; -} - -{ .mfb -(p10) cmp.ge.unc p9,p12 = modf_exp, modf_GR_no_frac - nop.f 999 - br.cond.spnt MODF_COMMON ;; -} - -GLOBAL_LIBM_END(modff) diff --git a/sysdeps/ia64/fpu/s_modfl.S b/sysdeps/ia64/fpu/s_modfl.S deleted file mode 100644 index e95d520b4b..0000000000 --- a/sysdeps/ia64/fpu/s_modfl.S +++ /dev/null @@ -1,273 +0,0 @@ -.file "modfl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/04/00 Improved speed, corrected result for NaN input -// 05/30/00 Fixed bug for exponent 0x1003e -// 12/22/00 Fixed so inexact flag is never set, and invalid is not set for -// qnans nor for inputs larger than 2^63. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// long double modfl(long double x, long double *iptr) -// break a floating point x number into fraction and an exponent -// -// input floating point f8, address in r34 -// output floating point f8 (x fraction), and *iptr (x integral part) -// -// OVERVIEW -//============================================================== -// -// NO FRACTIONAL PART: HUGE -// If -// for double-extended -// If the true exponent is >= 63 -// 1003e ==> 1003e -ffff = 3f = 63(dec) -// then -// we are already an integer (p9 true) - -// NO INTEGER PART: SMALL -// Is f8 exponent less than register bias (that is, is it -// less than 1). If it is, get the right sign of -// zero and store this in iptr. - -// CALCULATION: NOT HUGE, NOT SMALL -// To get the integer part -// Take the floating-point input and truncate -// then convert this integer to fp Call it MODF_INTEGER_PART - -// Subtract MODF_INTEGER_PART from MODF_NORM_F8 to get fraction part -// Then put fraction part in f8 -// put integer part MODF_INTEGER_PART into *iptr - -// Registers used -//============================================================== - -// predicate registers used: -// p6 - p13 - -// 0xFFFF 0x1003e -// -----------------------+-----------------+------------- -// SMALL | NORMAL | HUGE -// p11 --------------->|<----- p12 ----->| <-------------- p9 -// p10 --------------------------------->| -// p13 --------------------------------------------------->| -// - -// floating-point registers used: -MODF_NORM_F8 = f9 -MODF_FRACTION_PART = f10 -MODF_INTEGER_PART = f11 -MODF_INT_INTEGER_PART = f12 - - -// general registers used -modf_signexp = r14 -modf_GR_no_frac = r15 -modf_GR_FFFF = r16 -modf_17_ones = r17 -modf_exp = r18 -// r34 = iptr - - -.section .text -GLOBAL_LIBM_ENTRY(modfl) - -// Main path is p9, p11, p8 FALSE and p12 TRUE - -// Assume input is normalized and get signexp -// Normalize input just in case -// Form exponent bias -{ .mfi - getf.exp modf_signexp = f8 - fnorm.s0 MODF_NORM_F8 = f8 - addl modf_GR_FFFF = 0xffff, r0 -} -// Get integer part of input -// Form exponent mask -{ .mfi - nop.m 999 - fcvt.fx.trunc.s1 MODF_INT_INTEGER_PART = f8 - mov modf_17_ones = 0x1ffff ;; -} - -// Is x nan or inf? -// qnan snan inf norm unorm 0 -+ -// 1 1 1 0 0 0 11 = 0xe3 NAN_INF -// Form biased exponent where input only has an integer part -{ .mfi - nop.m 999 - fclass.m.unc p6,p13 = f8, 0xe3 - addl modf_GR_no_frac = 0x1003e, r0 ;; -} - -// Mask to get exponent -// Is x unnorm? -// qnan snan inf norm unorm 0 -+ -// 0 0 0 0 1 0 11 = 0x0b UNORM -// Set p13 to indicate calculation path, else p6 if nan or inf -{ .mfi - and modf_exp = modf_17_ones, modf_signexp - fclass.m.unc p8,p0 = f8, 0x0b - nop.i 999 ;; -} - -// p11 <== SMALL, no integer part, fraction is everyting -// p9 <== HUGE, no fraction part, integer is everything -// p12 <== NORMAL, fraction part and integer part -{ .mii -(p13) cmp.lt.unc p11,p10 = modf_exp, modf_GR_FFFF - nop.i 999 - nop.i 999 ;; -} - -// Is x inf? p6 if inf, p7 if nan -{ .mfb -(p10) cmp.ge.unc p9,p12 = modf_exp, modf_GR_no_frac -(p6) fclass.m.unc p6,p7 = f8, 0x23 -(p8) br.cond.spnt MODF_DENORM ;; -} - -MODF_COMMON: -// For HUGE set fraction to signed 0 -{ .mfi - nop.m 999 -(p9) fmerge.s f8 = f8,f0 - nop.i 999 -} -// For HUGE set integer part to normalized input -{ .mfi - nop.m 999 -(p9) fnorm.s0 MODF_INTEGER_PART = MODF_NORM_F8 - nop.i 999 ;; -} - -// For SMALL set fraction to normalized input, integer part to signed 0 -{ .mfi - nop.m 999 -(p11) fmerge.s MODF_INTEGER_PART = f8,f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fnorm.s0 f8 = MODF_NORM_F8 - nop.i 999 ;; -} - -// For NORMAL float the integer part -{ .mfi - nop.m 999 -(p12) fcvt.xf MODF_INTEGER_PART = MODF_INT_INTEGER_PART - nop.i 999 ;; -} - -// If x inf set integer part to INF, fraction to signed 0 -{ .mfi -(p6) stfe [r34] = MODF_NORM_F8 -(p6) fmerge.s f8 = f8,f0 - nop.i 999 ;; -} - -// If x nan set integer and fraction parts to NaN (quietized) -{ .mfi -(p7) stfe [r34] = MODF_NORM_F8 -(p7) fmerge.s f8 = MODF_NORM_F8, MODF_NORM_F8 - nop.i 999 ;; -} - -{ .mmi -(p9) stfe [r34] = MODF_INTEGER_PART - nop.m 999 - nop.i 999 ;; -} - -// For NORMAL compute fraction part -{ .mfi -(p11) stfe [r34] = MODF_INTEGER_PART -(p12) fms.s0 f8 = MODF_NORM_F8,f1, MODF_INTEGER_PART - nop.i 999 ;; -} - -// For NORMAL test if fraction part is zero; if so append correct sign -{ .mfi - nop.m 999 -(p12) fcmp.eq.unc.s0 p7,p0 = MODF_NORM_F8, MODF_INTEGER_PART - nop.i 999 ;; -} - -{ .mfi -(p12) stfe [r34] = MODF_INTEGER_PART - nop.f 999 - nop.i 999 ;; -} - -// For NORMAL if fraction part is zero append sign of input -{ .mfb - nop.m 999 -(p7) fmerge.s f8 = MODF_NORM_F8, f0 - br.ret.sptk b0 ;; -} - -MODF_DENORM: -// If x unorm get signexp from normalized input -// If x unorm get integer part from normalized input -{ .mfi - getf.exp modf_signexp = MODF_NORM_F8 - fcvt.fx.trunc.s1 MODF_INT_INTEGER_PART = MODF_NORM_F8 - nop.i 999 ;; -} - -// If x unorm mask to get exponent -{ .mmi - and modf_exp = modf_17_ones, modf_signexp ;; - cmp.lt.unc p11,p10 = modf_exp, modf_GR_FFFF - nop.i 999 ;; -} - -{ .mfb -(p10) cmp.ge.unc p9,p12 = modf_exp, modf_GR_no_frac - nop.f 999 - br.cond.spnt MODF_COMMON ;; -} - -GLOBAL_LIBM_END(modfl) diff --git a/sysdeps/ia64/fpu/s_nearbyint.S b/sysdeps/ia64/fpu/s_nearbyint.S deleted file mode 100644 index ec1ff22dbc..0000000000 --- a/sysdeps/ia64/fpu/s_nearbyint.S +++ /dev/null @@ -1,217 +0,0 @@ -.file "nearbyint.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 10/19/00 Created -// 02/08/01 Corrected behavior for all rounding modes. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 07/25/03 Improved performance -//============================================================== - -// API -//============================================================== -// double nearbyint(double x) -//============================================================== - -// general input registers: -// r14 - r21 - -rSignexp = r14 -rExp = r15 -rExpMask = r16 -rBigexp = r17 -rFpsr = r19 -rRcs0 = r20 -rRcs0Mask = r21 - -// floating-point registers: -// f8 - f10 - -fXInt = f9 -fNormX = f10 - -// predicate registers used: -// p6 - p10 - -// Overview of operation -//============================================================== -// double nearbyint(double x) -// Return an integer value (represented as a double) that is x -// rounded to integer in current rounding mode -// Inexact is not set, otherwise result identical with rint. -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - -.section .text -GLOBAL_LIBM_ENTRY(nearbyint) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fclass.m p7,p0 = f8, 0x0b // Test x unorm - addl rBigexp = 0x10033, r0 // Set exponent at which is integer -} -{ .mfi - nop.m 0 - fcvt.fx.s1 fXInt = f8 // Convert to int in significand - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - mov rFpsr = ar40 // Read fpsr -- check rc.s0 - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf - nop.i 0 -} -{ .mfb - nop.m 0 - fnorm.s1 fNormX = f8 // Normalize input -(p7) br.cond.spnt RINT_UNORM // Branch if x unorm -} -;; - - -RINT_COMMON: -// Return here from RINT_UNORM -{ .mfb - and rExp = rSignexp, rExpMask // Get biased exponent -(p6) fma.d.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf -} -;; - -{ .mfi - mov rRcs0Mask = 0x0c00 // Mask for rc.s0 - fcvt.xf f8 = fXInt // Result assume |x| < 2^52 - cmp.ge p7,p8 = rExp, rBigexp // Is |x| >= 2^52? -} -;; - -// We must correct result if |x| >= 2^52 -{ .mfi - nop.m 0 -(p7) fma.d.s0 f8 = fNormX, f1, f0 // If |x| >= 2^52, result x - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p8) fmerge.s f8 = fNormX, f8 // Make sign nearbyint(x) = sign x - nop.i 0 -} -;; - -{ .mfi -(p8) and rRcs0 = rFpsr, rRcs0Mask // Get rounding mode for sf0 - nop.f 0 - nop.i 0 -} -;; - -// If |x| < 2^52 we must test for other rounding modes -{ .mbb -(p8) cmp.ne.unc p10,p0 = rRcs0, r0 // Test for other rounding modes -(p10) br.cond.spnt RINT_NOT_ROUND_NEAREST // Branch if not round nearest - br.ret.sptk b0 // Exit main path if round nearest -} -;; - - -RINT_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk RINT_COMMON // Return to main path -} -;; - -RINT_NOT_ROUND_NEAREST: -// Here if not round to nearest, and |x| < 2^52 -// Set rounding mode of s2 to that of s0, and repeat the conversion using s2 -{ .mfi - nop.m 0 - fsetc.s2 0x7f, 0x40 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.fx.s2 fXInt = fNormX // Convert to int in significand - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.xf f8 = fXInt // Expected result - nop.i 0 -} -;; - -// Be sure sign of result = sign of input. Fixes cases where result is 0. -{ .mfb - nop.m 0 - fmerge.s f8 = fNormX, f8 - br.ret.sptk b0 // Exit main path -} -;; - -GLOBAL_LIBM_END(nearbyint) diff --git a/sysdeps/ia64/fpu/s_nearbyintf.S b/sysdeps/ia64/fpu/s_nearbyintf.S deleted file mode 100644 index aac7b5c126..0000000000 --- a/sysdeps/ia64/fpu/s_nearbyintf.S +++ /dev/null @@ -1,217 +0,0 @@ -.file "nearbyintf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 10/19/00 Created -// 02/08/01 Corrected behavior for all rounding modes. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 07/25/03 Improved performance -//============================================================== - -// API -//============================================================== -// float nearbyintf(float x) -//============================================================== - -// general input registers: -// r14 - r21 - -rSignexp = r14 -rExp = r15 -rExpMask = r16 -rBigexp = r17 -rFpsr = r19 -rRcs0 = r20 -rRcs0Mask = r21 - -// floating-point registers: -// f8 - f10 - -fXInt = f9 -fNormX = f10 - -// predicate registers used: -// p6 - p10 - -// Overview of operation -//============================================================== -// float nearbyintf(float x) -// Return an integer value (represented as a float) that is x -// rounded to integer in current rounding mode -// Inexact is not set, otherwise result identical with rint. -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - -.section .text -GLOBAL_LIBM_ENTRY(nearbyintf) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fclass.m p7,p0 = f8, 0x0b // Test x unorm - addl rBigexp = 0x10016, r0 // Set exponent at which is integer -} -{ .mfi - nop.m 0 - fcvt.fx.s1 fXInt = f8 // Convert to int in significand - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - mov rFpsr = ar40 // Read fpsr -- check rc.s0 - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf - nop.i 0 -} -{ .mfb - nop.m 0 - fnorm.s1 fNormX = f8 // Normalize input -(p7) br.cond.spnt RINT_UNORM // Branch if x unorm -} -;; - - -RINT_COMMON: -// Return here from RINT_UNORM -{ .mfb - and rExp = rSignexp, rExpMask // Get biased exponent -(p6) fma.s.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf -} -;; - -{ .mfi - mov rRcs0Mask = 0x0c00 // Mask for rc.s0 - fcvt.xf f8 = fXInt // Result assume |x| < 2^23 - cmp.ge p7,p8 = rExp, rBigexp // Is |x| >= 2^23? -} -;; - -// We must correct result if |x| >= 2^23 -{ .mfi - nop.m 0 -(p7) fma.s.s0 f8 = fNormX, f1, f0 // If |x| >= 2^23, result x - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p8) fmerge.s f8 = fNormX, f8 // Make sign nearbyintf(x)= sign x - nop.i 0 -} -;; - -{ .mfi -(p8) and rRcs0 = rFpsr, rRcs0Mask // Get rounding mode for sf0 - nop.f 0 - nop.i 0 -} -;; - -// If |x| < 2^23 we must test for other rounding modes -{ .mbb -(p8) cmp.ne.unc p10,p0 = rRcs0, r0 // Test for other rounding modes -(p10) br.cond.spnt RINT_NOT_ROUND_NEAREST // Branch if not round nearest - br.ret.sptk b0 // Exit main path if round nearest -} -;; - - -RINT_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk RINT_COMMON // Return to main path -} -;; - -RINT_NOT_ROUND_NEAREST: -// Here if not round to nearest, and |x| < 2^23 -// Set rounding mode of s2 to that of s0, and repeat the conversion using s2 -{ .mfi - nop.m 0 - fsetc.s2 0x7f, 0x40 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.fx.s2 fXInt = fNormX // Convert to int in significand - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.xf f8 = fXInt // Expected result - nop.i 0 -} -;; - -// Be sure sign of result = sign of input. Fixes cases where result is 0. -{ .mfb - nop.m 0 - fmerge.s f8 = fNormX, f8 - br.ret.sptk b0 // Exit main path -} -;; - -GLOBAL_LIBM_END(nearbyintf) diff --git a/sysdeps/ia64/fpu/s_nearbyintl.S b/sysdeps/ia64/fpu/s_nearbyintl.S deleted file mode 100644 index 83adc07896..0000000000 --- a/sysdeps/ia64/fpu/s_nearbyintl.S +++ /dev/null @@ -1,218 +0,0 @@ -.file "nearbyintl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 10/19/00 Created -// 02/08/01 Corrected behavior for all rounding modes. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 07/25/03 Improved performance -//============================================================== - -// API -//============================================================== -// long double nearbyintl(long double x) -//============================================================== - -// general input registers: -// r14 - r21 - -rSignexp = r14 -rExp = r15 -rExpMask = r16 -rBigexp = r17 -rFpsr = r19 -rRcs0 = r20 -rRcs0Mask = r21 - -// floating-point registers: -// f8 - f10 - -fXInt = f9 -fNormX = f10 - -// predicate registers used: -// p6 - p10 - -// Overview of operation -//============================================================== -// long double nearbyintl(long double x) -// Return an integer value (represented as a long double) that is x -// rounded to integer in current rounding mode -// Inexact is not set, otherwise result identical with rint. -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - -.section .text -GLOBAL_LIBM_ENTRY(__nearbyintl) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fclass.m p7,p0 = f8, 0x0b // Test x unorm - addl rBigexp = 0x1003e, r0 // Set exponent at which is integer -} -{ .mfi - nop.m 0 - fcvt.fx.s1 fXInt = f8 // Convert to int in significand - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - mov rFpsr = ar40 // Read fpsr -- check rc.s0 - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf - nop.i 0 -} -{ .mfb - nop.m 0 - fnorm.s1 fNormX = f8 // Normalize input -(p7) br.cond.spnt RINT_UNORM // Branch if x unorm -} -;; - - -RINT_COMMON: -// Return here from RINT_UNORM -{ .mfb - and rExp = rSignexp, rExpMask // Get biased exponent -(p6) fma.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf -} -;; - -{ .mfi - mov rRcs0Mask = 0x0c00 // Mask for rc.s0 - fcvt.xf f8 = fXInt // Result assume |x| < 2^63 - cmp.ge p7,p8 = rExp, rBigexp // Is |x| >= 2^63? -} -;; - -// We must correct result if |x| >= 2^63 -{ .mfi - nop.m 0 -(p7) fma.s0 f8 = fNormX, f1, f0 // If |x| >= 2^63, result x - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p8) fmerge.s f8 = fNormX, f8 // Make sign nearbyintl(x)= sign x - nop.i 0 -} -;; - -{ .mfi -(p8) and rRcs0 = rFpsr, rRcs0Mask // Get rounding mode for sf0 - nop.f 0 - nop.i 0 -} -;; - -// If |x| < 2^63 we must test for other rounding modes -{ .mbb -(p8) cmp.ne.unc p10,p0 = rRcs0, r0 // Test for other rounding modes -(p10) br.cond.spnt RINT_NOT_ROUND_NEAREST // Branch if not round nearest - br.ret.sptk b0 // Exit main path if round nearest -} -;; - - -RINT_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk RINT_COMMON // Return to main path -} -;; - -RINT_NOT_ROUND_NEAREST: -// Here if not round to nearest, and |x| < 2^63 -// Set rounding mode of s2 to that of s0, and repeat the conversion using s2 -{ .mfi - nop.m 0 - fsetc.s2 0x7f, 0x40 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.fx.s2 fXInt = fNormX // Convert to int in significand - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.xf f8 = fXInt // Expected result - nop.i 0 -} -;; - -// Be sure sign of result = sign of input. Fixes cases where result is 0. -{ .mfb - nop.m 0 - fmerge.s f8 = fNormX, f8 - br.ret.sptk b0 // Exit main path -} -;; - -GLOBAL_LIBM_END(__nearbyintl) -weak_alias (__nearbyintl, nearbyintl) diff --git a/sysdeps/ia64/fpu/s_nextafter.S b/sysdeps/ia64/fpu/s_nextafter.S deleted file mode 100644 index 44a43c50b9..0000000000 --- a/sysdeps/ia64/fpu/s_nextafter.S +++ /dev/null @@ -1,497 +0,0 @@ -.file "nextafter.s" - - -// Copyright (c) 2000 - 2004, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 03/03/00 Modified to conform to C9X, and improve speed of main path -// 03/14/00 Fixed case where x is a power of 2, and x > y, improved speed -// 04/04/00 Unwind support added -// 05/12/00 Fixed erroneous denormal flag setting for exponent change cases 1,3 -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 09/09/00 Updated fcmp so that qnans do not raise invalid -// 12/15/00 Corrected behavior when both args are zero to conform to C99, and -// fixed flag settings for several cases -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 12/14/04 Added error handling on underflow. -// -// API -//============================================================== -// double nextafter( double x, double y ); -// input floating point f8, f9 -// output floating point f8 -// -// Registers used -//============================================================== -GR_max_pexp = r14 -GR_min_pexp = r15 -GR_exp = r16 -GR_sig = r17 -GR_lnorm_sig = r18 -GR_sign_mask = r19 -GR_exp_mask = r20 -GR_sden_sig = r21 -GR_new_sig = r22 -GR_new_exp = r23 -GR_lden_sig = r24 -GR_snorm_sig = r25 -GR_exp1 = r26 -GR_x_exp = r27 -GR_min_den_rexp = r28 -// r36-39 parameters for libm_error_support - -GR_SAVE_B0 = r34 -GR_SAVE_GP = r35 -GR_SAVE_PFS = r32 - -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -GR_Parameter_TAG = r39 - -FR_lnorm_sig = f10 -FR_lnorm_exp = f11 -FR_lnorm = f12 -FR_sden_sig = f13 -FR_sden_exp = f14 -FR_sden = f15 -FR_save_f8 = f33 -FR_new_exp = f34 -FR_new_sig = f35 -FR_lden_sig = f36 -FR_snorm_sig = f37 -FR_exp1 = f38 -FR_tmp = f39 - -// -// Overview of operation -//============================================================== -// nextafter determines the next representable value -// after x in the direction of y. - - -.section .text -GLOBAL_LIBM_ENTRY(nextafter) - -// Extract signexp from x -// Is x < y ? p10 if yes, p11 if no -// Form smallest denormal significand = ulp size -{ .mfi - getf.exp GR_exp = f8 - fcmp.lt.s1 p10,p11 = f8, f9 - addl GR_sden_sig = 0x800, r0 -} -// Form largest normal significand 0xfffffffffffff800 -// Form smallest normal exponent -{ .mfi - addl GR_lnorm_sig = -0x800,r0 - nop.f 999 - addl GR_min_pexp = 0x0fc01, r0 ;; -} -// Extract significand from x -// Is x=y? -// Form largest normal exponent -{ .mfi - getf.sig GR_sig = f8 - fcmp.eq.s0 p6,p0 = f8, f9 - addl GR_max_pexp = 0x103fe, r0 -} -// Move largest normal significand to fp reg for special cases -{ .mfi - setf.sig FR_lnorm_sig = GR_lnorm_sig - nop.f 999 - addl GR_sign_mask = 0x20000, r0 ;; -} - -// Move smallest denormal significand and signexp to fp regs -// Is x=nan? -// Set p12 and p13 based on whether significand increases or decreases -// It increases (p12 set) if x=0 or if x>y and x<0 -// It decreases (p13 set) if xy and x>=0 -{ .mfi - setf.sig FR_sden_sig = GR_sden_sig - fclass.m p8,p0 = f8, 0xc3 -(p10) cmp.lt p12,p13 = GR_exp, GR_sign_mask -} -{ .mfi - setf.exp FR_sden_exp = GR_min_pexp -(p11) cmp.ge p12,p13 = GR_exp, GR_sign_mask ;; -} - -.pred.rel "mutex",p12,p13 - -// Form expected new significand, adding or subtracting 1 ulp increment -// If x=y set result to y -// Form smallest normal significand and largest denormal significand -{ .mfi -(p12) add GR_new_sig = GR_sig, GR_sden_sig -(p6) fmerge.s f8=f9,f9 - dep.z GR_snorm_sig = 1,63,1 // 0x8000000000000000 -} -{ .mlx -(p13) sub GR_new_sig = GR_sig, GR_sden_sig - movl GR_lden_sig = 0x7ffffffffffff800 ;; -} - -// Move expected result significand and signexp to fp regs -// Is y=nan? -// Form new exponent in case result exponent needs incrementing or decrementing -{ .mfi - setf.exp FR_new_exp = GR_exp - fclass.m p9,p0 = f9, 0xc3 -(p12) add GR_exp1 = 1, GR_exp -} -{ .mib - setf.sig FR_new_sig = GR_new_sig -(p13) add GR_exp1 = -1, GR_exp -(p6) br.ret.spnt b0 ;; // Exit if x=y -} - -// Move largest normal signexp to fp reg for special cases -// Is x=zero? -{ .mfi - setf.exp FR_lnorm_exp = GR_max_pexp - fclass.m p7,p0 = f8, 0x7 - nop.i 999 -} -{ .mfb - nop.m 999 -(p8) fma.s0 f8 = f8,f1,f9 -(p8) br.ret.spnt b0 ;; // Exit if x=nan -} - -// Move exp+-1 and smallest normal significand to fp regs for special cases -// Is x=inf? -{ .mfi - setf.exp FR_exp1 = GR_exp1 - fclass.m p6,p0 = f8, 0x23 - addl GR_exp_mask = 0x1ffff, r0 -} -{ .mfb - setf.sig FR_snorm_sig = GR_snorm_sig -(p9) fma.s0 f8 = f8,f1,f9 -(p9) br.ret.spnt b0 ;; // Exit if y=nan -} - -// Move largest denormal significand to fp regs for special cases -// Save x -{ .mfb - setf.sig FR_lden_sig = GR_lden_sig - mov FR_save_f8 = f8 -(p7) br.cond.spnt NEXT_ZERO ;; // Exit if x=0 -} - -// Mask off the sign to get x_exp -{ .mfb - and GR_x_exp = GR_exp_mask, GR_exp - nop.f 999 -(p6) br.cond.spnt NEXT_INF ;; // Exit if x=inf -} - -// Check 6 special cases when significand rolls over: -// 1 sig size incr, x_sig=max_sig, x_exp < max_exp -// Set p6, result is sig=min_sig, exp++ -// 2 sig size incr, x_sig=max_sig, x_exp >= max_exp -// Set p7, result is inf, signal overflow -// 3 sig size decr, x_sig=min_sig, x_exp > min_exp -// Set p8, result is sig=max_sig, exp-- -// 4 sig size decr, x_sig=min_sig, x_exp = min_exp -// Set p9, result is sig=max_den_sig, exp same, signal underflow and inexact -// 5 sig size decr, x_sig=min_den_sig, x_exp = min_exp -// Set p10, result is zero, sign of x, signal underflow and inexact -// 6 sig size decr, x_sig=min_sig, x_exp < min_exp -// Set p14, result is zero, sign of x, signal underflow and inexact -// -// Form exponent of smallest double denormal (if normalized register format) -{ .mmi - adds GR_min_den_rexp = -52, GR_min_pexp -(p12) cmp.eq.unc p6,p0 = GR_new_sig, r0 -(p13) cmp.eq.unc p8,p10 = GR_new_sig, GR_lden_sig ;; -} - -{ .mmi -(p6) cmp.lt.unc p6,p7 = GR_x_exp, GR_max_pexp -(p8) cmp.gt.unc p8,p9 = GR_x_exp, GR_min_pexp -(p10) cmp.eq.unc p10,p0 = GR_new_sig, r0 ;; -} - -// Create small normal in case need to generate underflow flag -{ .mfi -(p10) cmp.le.unc p10,p0 = GR_x_exp, GR_min_pexp - fmerge.se FR_tmp = FR_sden_exp, FR_lnorm_sig -(p9) cmp.gt.unc p9,p14 = GR_x_exp, GR_min_den_rexp -} -// Branch if cases 1, 2, 3 -{ .bbb -(p6) br.cond.spnt NEXT_EXPUP -(p7) br.cond.spnt NEXT_OVERFLOW -(p8) br.cond.spnt NEXT_EXPDOWN ;; -} - -// Branch if cases 4, 5, 6 -{ .bbb -(p9) br.cond.spnt NEXT_NORM_TO_DENORM -(p10) br.cond.spnt NEXT_UNDERFLOW_TO_ZERO -(p14) br.cond.spnt NEXT_UNDERFLOW_TO_ZERO ;; -} - -// Here if no special cases -// Set p6 if result will be a denormal, so can force underflow flag -// Case 1: x_exp=min_exp, x_sig=unnormalized -// Case 2: x_exp y, improved speed -// 04/04/00 Unwind support added -// 05/12/00 Fixed erroneous denormal flag setting for exponent change cases 1,3 -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 09/09/00 Updated fcmp so that qnans do not raise invalid -// 12/15/00 Corrected behavior when both args are zero to conform to C99, and -// fixed flag settings for several cases -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 12/14/04 Added error handling on underflow. -// -// API -//============================================================== -// float nextafterf( float x, float y ); -// input floating point f8, f9 -// output floating point f8 -// -// Registers used -//============================================================== -GR_max_pexp = r14 -GR_min_pexp = r15 -GR_exp = r16 -GR_sig = r17 -GR_lnorm_sig = r18 -GR_sign_mask = r19 -GR_exp_mask = r20 -GR_sden_sig = r21 -GR_new_sig = r22 -GR_new_exp = r23 -GR_lden_sig = r24 -GR_snorm_sig = r25 -GR_exp1 = r26 -GR_x_exp = r27 -GR_min_den_rexp = r28 -// r36-39 parameters for libm_error_support - -GR_SAVE_B0 = r34 -GR_SAVE_GP = r35 -GR_SAVE_PFS = r32 - -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -GR_Parameter_TAG = r39 - -FR_lnorm_sig = f10 -FR_lnorm_exp = f11 -FR_lnorm = f12 -FR_sden_sig = f13 -FR_sden_exp = f14 -FR_sden = f15 -FR_save_f8 = f33 -FR_new_exp = f34 -FR_new_sig = f35 -FR_lden_sig = f36 -FR_snorm_sig = f37 -FR_exp1 = f38 -FR_tmp = f39 - -// -// Overview of operation -//============================================================== -// nextafterf determines the next representable value -// after x in the direction of y. - - -.section .text -GLOBAL_LIBM_ENTRY(nextafterf) - -// Extract signexp from x -// Form smallest denormal significand = ulp size -{ .mlx - getf.exp GR_exp = f8 - movl GR_sden_sig = 0x0000010000000000 -} -// Form largest normal exponent -// Is x < y ? p10 if yes, p11 if no -// Form smallest normal exponent -{ .mfi - addl GR_max_pexp = 0x1007e, r0 - fcmp.lt.s1 p10,p11 = f8, f9 - addl GR_min_pexp = 0x0ff81, r0 ;; -} - -// Is x=y? -{ .mfi - getf.sig GR_sig = f8 - fcmp.eq.s0 p6,p0 = f8, f9 - nop.i 0 -} -// Extract significand from x -// Form largest normal significand -{ .mlx - nop.m 0 - movl GR_lnorm_sig = 0xffffff0000000000 ;; -} - -// Move largest normal significand to fp reg for special cases -{ .mfi - setf.sig FR_lnorm_sig = GR_lnorm_sig - nop.f 0 - addl GR_sign_mask = 0x20000, r0 ;; -} - -// Move smallest denormal significand and signexp to fp regs -// Is x=nan? -// Set p12 and p13 based on whether significand increases or decreases -// It increases (p12 set) if x=0 or if x>y and x<0 -// It decreases (p13 set) if xy and x>=0 -{ .mfi - setf.sig FR_sden_sig = GR_sden_sig - fclass.m p8,p0 = f8, 0xc3 -(p10) cmp.lt p12,p13 = GR_exp, GR_sign_mask -} -{ .mfi - setf.exp FR_sden_exp = GR_min_pexp - nop.f 999 -(p11) cmp.ge p12,p13 = GR_exp, GR_sign_mask ;; -} - -.pred.rel "mutex",p12,p13 - -// Form expected new significand, adding or subtracting 1 ulp increment -// If x=y set result to y -// Form smallest normal significand and largest denormal significand -{ .mfi -(p12) add GR_new_sig = GR_sig, GR_sden_sig -(p6) fmerge.s f8=f9,f9 - dep.z GR_snorm_sig = 1,63,1 // 0x8000000000000000 -} -{ .mlx -(p13) sub GR_new_sig = GR_sig, GR_sden_sig - movl GR_lden_sig = 0x7fffff0000000000 ;; -} - -// Move expected result significand and signexp to fp regs -// Is y=nan? -// Form new exponent in case result exponent needs incrementing or decrementing -{ .mfi - setf.exp FR_new_exp = GR_exp - fclass.m p9,p0 = f9, 0xc3 -(p12) add GR_exp1 = 1, GR_exp -} -{ .mib - setf.sig FR_new_sig = GR_new_sig -(p13) add GR_exp1 = -1, GR_exp -(p6) br.ret.spnt b0 ;; // Exit if x=y -} - -// Move largest normal signexp to fp reg for special cases -// Is x=zero? -{ .mfi - setf.exp FR_lnorm_exp = GR_max_pexp - fclass.m p7,p0 = f8, 0x7 - nop.i 999 -} -{ .mfb - nop.m 999 -(p8) fma.s0 f8 = f8,f1,f9 -(p8) br.ret.spnt b0 ;; // Exit if x=nan -} - -// Move exp+-1 and smallest normal significand to fp regs for special cases -// Is x=inf? -{ .mfi - setf.exp FR_exp1 = GR_exp1 - fclass.m p6,p0 = f8, 0x23 - addl GR_exp_mask = 0x1ffff, r0 -} -{ .mfb - setf.sig FR_snorm_sig = GR_snorm_sig -(p9) fma.s0 f8 = f8,f1,f9 -(p9) br.ret.spnt b0 ;; // Exit if y=nan -} - -// Move largest denormal significand to fp regs for special cases -// Save x -{ .mfb - setf.sig FR_lden_sig = GR_lden_sig - mov FR_save_f8 = f8 -(p7) br.cond.spnt NEXT_ZERO ;; // Exit if x=0 -} - -// Mask off the sign to get x_exp -{ .mfb - and GR_x_exp = GR_exp_mask, GR_exp - nop.f 999 -(p6) br.cond.spnt NEXT_INF ;; // Exit if x=inf -} - -// Check 6 special cases when significand rolls over: -// 1 sig size incr, x_sig=max_sig, x_exp < max_exp -// Set p6, result is sig=min_sig, exp++ -// 2 sig size incr, x_sig=max_sig, x_exp >= max_exp -// Set p7, result is inf, signal overflow -// 3 sig size decr, x_sig=min_sig, x_exp > min_exp -// Set p8, result is sig=max_sig, exp-- -// 4 sig size decr, x_sig=min_sig, x_exp = min_exp -// Set p9, result is sig=max_den_sig, exp same, signal underflow and inexact -// 5 sig size decr, x_sig=min_den_sig, x_exp = min_exp -// Set p10, result is zero, sign of x, signal underflow and inexact -// 6 sig size decr, x_sig=min_sig, x_exp < min_exp -// Set p14, result is zero, sign of x, signal underflow and inexact -// -// Form exponent of smallest float denormal (if normalized register format) -{ .mmi - adds GR_min_den_rexp = -23, GR_min_pexp -(p12) cmp.eq.unc p6,p0 = GR_new_sig, r0 -(p13) cmp.eq.unc p8,p10 = GR_new_sig, GR_lden_sig ;; -} - -{ .mmi -(p6) cmp.lt.unc p6,p7 = GR_x_exp, GR_max_pexp -(p8) cmp.gt.unc p8,p9 = GR_x_exp, GR_min_pexp -(p10) cmp.eq.unc p10,p0 = GR_new_sig, r0 ;; -} - -// Create small normal in case need to generate underflow flag -{ .mfi -(p10) cmp.le.unc p10,p0 = GR_x_exp, GR_min_pexp - fmerge.se FR_tmp = FR_sden_exp, FR_lnorm_sig -(p9) cmp.gt.unc p9,p14 = GR_x_exp, GR_min_den_rexp -} -// Branch if cases 1, 2, 3 -{ .bbb -(p6) br.cond.spnt NEXT_EXPUP -(p7) br.cond.spnt NEXT_OVERFLOW -(p8) br.cond.spnt NEXT_EXPDOWN ;; -} - -// Branch if cases 4, 5, 6 -{ .bbb -(p9) br.cond.spnt NEXT_NORM_TO_DENORM -(p10) br.cond.spnt NEXT_UNDERFLOW_TO_ZERO -(p14) br.cond.spnt NEXT_UNDERFLOW_TO_ZERO ;; -} - -// Here if no special cases -// Set p6 if result will be a denormal, so can force underflow flag -// Case 1: x_exp=min_exp, x_sig=unnormalized -// Case 2: x_exp y, improved speed -// 04/04/00 Unwind support added -// 05/12/00 Fixed erroneous denormal flag setting for exponent change cases 1,3 -// 08/15/00 Bundle added after call to __libm_error_support to properly -// set [the previously overwritten] GR_Parameter_RESULT. -// 09/09/00 Updated fcmp so that qnans do not raise invalid. -// 12/15/00 Fixed case of smallest long double normal to largest denormal, -// now adhere to C99 for two zero args, and fixed flag settings -// for several cases -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 12/14/04 Added error handling on underflow. -// -// API -//============================================================== -// long double nextafterl( long double x, long double y ); -// input floating point f8, f9 -// output floating point f8 -// -// Registers used -//============================================================== -GR_max_pexp = r14 -GR_min_pexp = r15 -GR_exp = r16 -GR_sig = r17 -GR_lnorm_sig = r18 -GR_sign_mask = r19 -GR_exp_mask = r20 -GR_sden_sig = r21 -GR_new_sig = r22 -GR_new_exp = r23 -GR_lden_sig = r24 -GR_snorm_sig = r25 -GR_exp1 = r26 -GR_x_exp = r27 -// r36-39 parameters for libm_error_support - -GR_SAVE_B0 = r34 -GR_SAVE_GP = r35 -GR_SAVE_PFS = r32 - -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -GR_Parameter_TAG = r39 - -FR_lnorm_sig = f10 -FR_lnorm_exp = f11 -FR_lnorm = f12 -FR_sden_sig = f13 -FR_den_exp = f14 -FR_sden = f15 -FR_snorm_exp = f32 -FR_save_f8 = f33 -FR_new_exp = f34 -FR_new_sig = f35 -FR_lden_sig = f36 -FR_snorm_sig = f37 -FR_exp1 = f38 -FR_tmp = f39 - -// -// Overview of operation -//============================================================== -// nextafterl determines the next representable value -// after x in the direction of y. - - -.section .text -GLOBAL_LIBM_ENTRY(nextafterl) - -// Extract signexp from x -// Is x < y ? p10 if yes, p11 if no -// Form smallest denormal significand = ulp size -{ .mfi - getf.exp GR_exp = f8 - fcmp.lt.s1 p10,p11 = f8, f9 - addl GR_sden_sig = 0x1, r0 -} -// Form largest normal significand 0xffffffffffffffff -// Form smallest normal exponent -{ .mfi - addl GR_lnorm_sig = -0x1,r0 - nop.f 999 - addl GR_min_pexp = 0x0c001, r0 ;; -} - -// Extract significand from x -// Is x=y? This fcmp also sets Invalid and Denormal if required -// Form largest normal exponent -{ .mfi - getf.sig GR_sig = f8 - fcmp.eq.s0 p6,p0 = f8, f9 - addl GR_max_pexp = 0x13ffe, r0 -} -// Move largest normal significand to fp reg for special cases -{ .mfi - setf.sig FR_lnorm_sig = GR_lnorm_sig - nop.f 999 - addl GR_sign_mask = 0x20000, r0 ;; -} - -// Move smallest denormal significand and exp to fp regs -// Is x=nan? -// Set p12 and p13 based on whether significand increases or decreases -// It increases (p12 set) if x=0 or if x>y and x<0 -// It decreases (p13 set) if xy and x>=0 -{ .mfi - setf.sig FR_sden_sig = GR_sden_sig - fclass.m p8,p0 = f8, 0xc3 -(p10) cmp.lt p12,p13 = GR_exp, GR_sign_mask -} -// Move smallest normal exp to fp regs -{ .mfi - setf.exp FR_snorm_exp = GR_min_pexp - nop.f 999 -(p11) cmp.ge p12,p13 = GR_exp, GR_sign_mask ;; -} - -.pred.rel "mutex",p12,p13 - -// Form expected new significand, adding or subtracting 1 ulp increment -// If x=y set result to y -// Form smallest normal significand and largest denormal significand -{ .mfi -(p12) add GR_new_sig = GR_sig, GR_sden_sig -(p6) fmerge.s f8=f9,f9 - dep.z GR_snorm_sig = 1,63,1 // 0x8000000000000000 -} -{ .mlx -(p13) sub GR_new_sig = GR_sig, GR_sden_sig - movl GR_lden_sig = 0x7fffffffffffffff ;; -} - -// Move expected result significand and signexp to fp regs -// Is y=nan? -// Form new exponent in case result exponent needs incrementing or decrementing -{ .mfi - setf.exp FR_new_exp = GR_exp - fclass.m p9,p0 = f9, 0xc3 -(p12) add GR_exp1 = 1, GR_exp -} -{ .mib - setf.sig FR_new_sig = GR_new_sig -(p13) add GR_exp1 = -1, GR_exp -(p6) br.ret.spnt b0 ;; // Exit if x=y -} - -// Move largest normal signexp to fp reg for special cases -// Is x=zero? -{ .mfi - setf.exp FR_lnorm_exp = GR_max_pexp - fclass.m p7,p0 = f8, 0x7 - nop.i 999 -} -{ .mfb - setf.exp FR_den_exp = GR_min_pexp -(p8) fma.s0 f8 = f8,f1,f9 -(p8) br.ret.spnt b0 ;; // Exit if x=nan -} - -// Move exp+-1 and smallest normal significand to fp regs for special cases -// Is x=inf? -{ .mfi - setf.exp FR_exp1 = GR_exp1 - fclass.m p6,p0 = f8, 0x23 - addl GR_exp_mask = 0x1ffff, r0 -} -{ .mfb - setf.sig FR_snorm_sig = GR_snorm_sig -(p9) fma.s0 f8 = f8,f1,f9 -(p9) br.ret.spnt b0 ;; // Exit if y=nan -} - -// Move largest denormal significand to fp regs for special cases -// Save x -{ .mfb - setf.sig FR_lden_sig = GR_lden_sig - mov FR_save_f8 = f8 -(p7) br.cond.spnt NEXT_ZERO ;; // Exit if x=0 -} - -// Mask off the sign to get x_exp -{ .mfb - and GR_x_exp = GR_exp_mask, GR_exp - nop.f 999 -(p6) br.cond.spnt NEXT_INF ;; // Exit if x=inf -} - -// Check 5 special cases when significand rolls over: -// 1 sig size incr, x_sig=max_sig, x_exp < max_exp -// Set p6, result is sig=min_sig, exp++ -// 2 sig size incr, x_sig=max_sig, x_exp >= max_exp -// Set p7, result is inf, signal overflow -// 3 sig size decr, x_sig=min_sig, x_exp > min_exp -// Set p8, result is sig=max_sig, exp-- -// 4 sig size decr, x_sig=min_sig, x_exp = min_exp -// Set p9, result is sig=max_den_sig, exp same, signal underflow and inexact -// 5 sig size decr, x_sig=min_den_sig, x_exp = min_exp -// Set p10, result is zero, sign of x, signal underflow and inexact -// -{ .mmi -(p12) cmp.eq.unc p6,p0 = GR_new_sig, r0 -(p13) cmp.eq.unc p9,p10 = GR_new_sig, GR_lden_sig - nop.i 999 -;; -} - -{ .mmi -(p6) cmp.lt.unc p6,p7 = GR_x_exp, GR_max_pexp -(p10) cmp.eq.unc p10,p0 = GR_new_sig, r0 -(p9) cmp.le.unc p9,p8 = GR_x_exp, GR_min_pexp -;; -} - -// Create small normal in case need to generate underflow flag -{ .mfi - nop.m 999 - fmerge.se FR_tmp = FR_snorm_exp, FR_lnorm_sig - nop.i 999 -} -// Branch if cases 1, 2, 3 -{ .bbb -(p6) br.cond.spnt NEXT_EXPUP -(p7) br.cond.spnt NEXT_OVERFLOW -(p8) br.cond.spnt NEXT_EXPDOWN ;; -} - -// Branch if cases 4, 5 -{ .mbb - nop.m 999 -(p9) br.cond.spnt NEXT_NORM_TO_DENORM -(p10) br.cond.spnt NEXT_UNDERFLOW_TO_ZERO -;; -} - -// Here if no special cases -// Set p6 if result will be a denormal, so can force underflow flag -// Case 1: x_exp=min_exp, x_sig=unnormalized -// Case 2: x_exp=0 or if x>y and x<0 -// It decreases (p13 set) if xy and x>=0 -{ .mfi - setf.sig FR_sden_sig = GR_sden_sig - fclass.m p8,p0 = f8, 0xc3 -(p10) cmp.lt p12,p13 = GR_exp, GR_sign_mask -} -{ .mfi - setf.exp FR_sden_exp = GR_min_pexp -(p11) cmp.ge p12,p13 = GR_exp, GR_sign_mask ;; -} - -.pred.rel "mutex",p12,p13 - -// Form expected new significand, adding or subtracting 1 ulp increment -// If x=y set result to y -// Form smallest normal significand and largest denormal significand -{ .mfi -(p12) add GR_new_sig = GR_sig, GR_sden_sig -(p6) fnorm.d.s0 f8=f9 //Normalise - dep.z GR_snorm_sig = 1,63,1 // 0x8000000000000000 -} -{ .mlx -(p13) sub GR_new_sig = GR_sig, GR_sden_sig - movl GR_lden_sig = 0x7ffffffffffff800 ;; -} - -// Move expected result significand and signexp to fp regs -// Is y=nan? -// Form new exponent in case result exponent needs incrementing or decrementing -{ .mfi - setf.exp FR_new_exp = GR_exp - fclass.m p9,p0 = f9, 0xc3 -(p12) add GR_exp1 = 1, GR_exp -} -{ .mib - setf.sig FR_new_sig = GR_new_sig -(p13) add GR_exp1 = -1, GR_exp -(p6) br.ret.spnt b0 ;; // Exit if x=y -} - -// Move largest normal signexp to fp reg for special cases -// Is x=zero? -{ .mfi - setf.exp FR_lnorm_exp = GR_max_pexp - fclass.m p7,p0 = f8, 0x7 - nop.i 999 -} -{ .mfb - nop.m 999 -(p8) fma.s0 f8 = f8,f1,f9 -(p8) br.ret.spnt b0 ;; // Exit if x=nan -} - -// Move exp+-1 and smallest normal significand to fp regs for special cases -// Is x=inf? -{ .mfi - setf.exp FR_exp1 = GR_exp1 - fclass.m p6,p0 = f8, 0x23 - addl GR_exp_mask = 0x1ffff, r0 -} -{ .mfb - setf.sig FR_snorm_sig = GR_snorm_sig -(p9) fma.s0 f8 = f8,f1,f9 -(p9) br.ret.spnt b0 ;; // Exit if y=nan -} - -// Move largest denormal significand to fp regs for special cases -// Save x -{ .mfb - setf.sig FR_lden_sig = GR_lden_sig - mov FR_save_f8 = f8 -(p7) br.cond.spnt NEXT_ZERO ;; // Exit if x=0 -} - -// Mask off the sign to get x_exp -{ .mfb - and GR_x_exp = GR_exp_mask, GR_exp - nop.f 999 -(p6) br.cond.spnt NEXT_INF ;; // Exit if x=inf -} - -// Check 6 special cases when significand rolls over: -// 1 sig size incr, x_sig=max_sig, x_exp < max_exp -// Set p6, result is sig=min_sig, exp++ -// 2 sig size incr, x_sig=max_sig, x_exp >= max_exp -// Set p7, result is inf, signal overflow -// 3 sig size decr, x_sig=min_sig, x_exp > min_exp -// Set p8, result is sig=max_sig, exp-- -// 4 sig size decr, x_sig=min_sig, x_exp = min_exp -// Set p9, result is sig=max_den_sig, exp same, signal underflow and inexact -// 5 sig size decr, x_sig=min_den_sig, x_exp = min_exp -// Set p10, result is zero, sign of x, signal underflow and inexact -// 6 sig size decr, x_sig=min_sig, x_exp < min_exp -// Set p14, result is zero, sign of x, signal underflow and inexact -// -// Form exponent of smallest double denormal (if normalized register format) -{ .mmi - adds GR_min_den_rexp = -52, GR_min_pexp -(p12) cmp.eq.unc p6,p0 = GR_new_sig, r0 -(p13) cmp.eq.unc p8,p10 = GR_new_sig, GR_lden_sig ;; -} - -{ .mmi -(p6) cmp.lt.unc p6,p7 = GR_x_exp, GR_max_pexp -(p8) cmp.gt.unc p8,p9 = GR_x_exp, GR_min_pexp -(p10) cmp.eq.unc p10,p0 = GR_new_sig, r0 ;; -} - -// Create small normal in case need to generate underflow flag -{ .mfi -(p10) cmp.le.unc p10,p0 = GR_x_exp, GR_min_pexp - fmerge.se FR_tmp = FR_sden_exp, FR_lnorm_sig -(p9) cmp.gt.unc p9,p14 = GR_x_exp, GR_min_den_rexp -} -// Branch if cases 1, 2, 3 -{ .bbb -(p6) br.cond.spnt NEXT_EXPUP -(p7) br.cond.spnt NEXT_OVERFLOW -(p8) br.cond.spnt NEXT_EXPDOWN ;; -} - -// Branch if cases 4, 5, 6 -{ .bbb -(p9) br.cond.spnt NEXT_NORM_TO_DENORM -(p10) br.cond.spnt NEXT_UNDERFLOW_TO_ZERO -(p14) br.cond.spnt NEXT_UNDERFLOW_TO_ZERO ;; -} - -// Here if no special cases -// Set p6 if result will be a denormal, so can force underflow flag -// Case 1: x_exp=min_exp, x_sig=unnormalized -// Case 2: x_exp=0 or if x>y and x<0 -// It decreases (p13 set) if xy and x>=0 -{ .mfi - setf.sig FR_sden_sig = GR_sden_sig - fclass.m p8,p0 = f8, 0xc3 -(p10) cmp.lt p12,p13 = GR_exp, GR_sign_mask -} -{ .mfi - setf.exp FR_sden_exp = GR_min_pexp - nop.f 999 -(p11) cmp.ge p12,p13 = GR_exp, GR_sign_mask ;; -} - -.pred.rel "mutex",p12,p13 - -// Form expected new significand, adding or subtracting 1 ulp increment -// If x=y set result to y -// Form smallest normal significand and largest denormal significand -{ .mfi -(p12) add GR_new_sig = GR_sig, GR_sden_sig -(p6) fnorm.s.s0 f8=f9 //Normalise - dep.z GR_snorm_sig = 1,63,1 // 0x8000000000000000 -} -{ .mlx -(p13) sub GR_new_sig = GR_sig, GR_sden_sig - movl GR_lden_sig = 0x7fffff0000000000 ;; -} - -// Move expected result significand and signexp to fp regs -// Is y=nan? -// Form new exponent in case result exponent needs incrementing or decrementing -{ .mfi - setf.exp FR_new_exp = GR_exp - fclass.m p9,p0 = f9, 0xc3 -(p12) add GR_exp1 = 1, GR_exp -} -{ .mib - setf.sig FR_new_sig = GR_new_sig -(p13) add GR_exp1 = -1, GR_exp -(p6) br.ret.spnt b0 ;; // Exit if x=y -} - -// Move largest normal signexp to fp reg for special cases -// Is x=zero? -{ .mfi - setf.exp FR_lnorm_exp = GR_max_pexp - fclass.m p7,p0 = f8, 0x7 - nop.i 999 -} -{ .mfb - nop.m 999 -(p8) fma.s0 f8 = f8,f1,f9 -(p8) br.ret.spnt b0 ;; // Exit if x=nan -} - -// Move exp+-1 and smallest normal significand to fp regs for special cases -// Is x=inf? -{ .mfi - setf.exp FR_exp1 = GR_exp1 - fclass.m p6,p0 = f8, 0x23 - addl GR_exp_mask = 0x1ffff, r0 -} -{ .mfb - setf.sig FR_snorm_sig = GR_snorm_sig -(p9) fma.s0 f8 = f8,f1,f9 -(p9) br.ret.spnt b0 ;; // Exit if y=nan -} - -// Move largest denormal significand to fp regs for special cases -// Save x -{ .mfb - setf.sig FR_lden_sig = GR_lden_sig - mov FR_save_f8 = f8 -(p7) br.cond.spnt NEXT_ZERO ;; // Exit if x=0 -} - -// Mask off the sign to get x_exp -{ .mfb - and GR_x_exp = GR_exp_mask, GR_exp - nop.f 999 -(p6) br.cond.spnt NEXT_INF ;; // Exit if x=inf -} - -// Check 6 special cases when significand rolls over: -// 1 sig size incr, x_sig=max_sig, x_exp < max_exp -// Set p6, result is sig=min_sig, exp++ -// 2 sig size incr, x_sig=max_sig, x_exp >= max_exp -// Set p7, result is inf, signal overflow -// 3 sig size decr, x_sig=min_sig, x_exp > min_exp -// Set p8, result is sig=max_sig, exp-- -// 4 sig size decr, x_sig=min_sig, x_exp = min_exp -// Set p9, result is sig=max_den_sig, exp same, signal underflow and inexact -// 5 sig size decr, x_sig=min_den_sig, x_exp = min_exp -// Set p10, result is zero, sign of x, signal underflow and inexact -// 6 sig size decr, x_sig=min_sig, x_exp < min_exp -// Set p14, result is zero, sign of x, signal underflow and inexact -// -// Form exponent of smallest float denormal (if normalized register format) -{ .mmi - adds GR_min_den_rexp = -23, GR_min_pexp -(p12) cmp.eq.unc p6,p0 = GR_new_sig, r0 -(p13) cmp.eq.unc p8,p10 = GR_new_sig, GR_lden_sig ;; -} - -{ .mmi -(p6) cmp.lt.unc p6,p7 = GR_x_exp, GR_max_pexp -(p8) cmp.gt.unc p8,p9 = GR_x_exp, GR_min_pexp -(p10) cmp.eq.unc p10,p0 = GR_new_sig, r0 ;; -} - -// Create small normal in case need to generate underflow flag -{ .mfi -(p10) cmp.le.unc p10,p0 = GR_x_exp, GR_min_pexp - fmerge.se FR_tmp = FR_sden_exp, FR_lnorm_sig -(p9) cmp.gt.unc p9,p14 = GR_x_exp, GR_min_den_rexp -} -// Branch if cases 1, 2, 3 -{ .bbb -(p6) br.cond.spnt NEXT_EXPUP -(p7) br.cond.spnt NEXT_OVERFLOW -(p8) br.cond.spnt NEXT_EXPDOWN ;; -} - -// Branch if cases 4, 5, 6 -{ .bbb -(p9) br.cond.spnt NEXT_NORM_TO_DENORM -(p10) br.cond.spnt NEXT_UNDERFLOW_TO_ZERO -(p14) br.cond.spnt NEXT_UNDERFLOW_TO_ZERO ;; -} - -// Here if no special cases -// Set p6 if result will be a denormal, so can force underflow flag -// Case 1: x_exp=min_exp, x_sig=unnormalized -// Case 2: x_exp=0 or if x>y and x<0 -// It decreases (p13 set) if xy and x>=0 -{ .mfi - setf.sig FR_sden_sig = GR_sden_sig - fclass.m p8,p0 = f8, 0xc3 -(p10) cmp.lt p12,p13 = GR_exp, GR_sign_mask -} -// Move smallest normal exp to fp regs -{ .mfi - setf.exp FR_snorm_exp = GR_min_pexp - nop.f 999 -(p11) cmp.ge p12,p13 = GR_exp, GR_sign_mask ;; -} - -.pred.rel "mutex",p12,p13 - -// Form expected new significand, adding or subtracting 1 ulp increment -// If x=y set result to y -// Form smallest normal significand and largest denormal significand -{ .mfi -(p12) add GR_new_sig = GR_sig, GR_sden_sig -(p6) fmerge.s f8=f9,f9 - dep.z GR_snorm_sig = 1,63,1 // 0x8000000000000000 -} -{ .mlx -(p13) sub GR_new_sig = GR_sig, GR_sden_sig - movl GR_lden_sig = 0x7fffffffffffffff ;; -} - -// Move expected result significand and signexp to fp regs -// Is y=nan? -// Form new exponent in case result exponent needs incrementing or decrementing -{ .mfi - setf.exp FR_new_exp = GR_exp - fclass.m p9,p0 = f9, 0xc3 -(p12) add GR_exp1 = 1, GR_exp -} -{ .mib - setf.sig FR_new_sig = GR_new_sig -(p13) add GR_exp1 = -1, GR_exp -(p6) br.ret.spnt b0 ;; // Exit if x=y -} - -// Move largest normal signexp to fp reg for special cases -// Is x=zero? -{ .mfi - setf.exp FR_lnorm_exp = GR_max_pexp - fclass.m p7,p0 = f8, 0x7 - nop.i 999 -} -{ .mfb - setf.exp FR_den_exp = GR_min_pexp -(p8) fma.s0 f8 = f8,f1,f9 -(p8) br.ret.spnt b0 ;; // Exit if x=nan -} - -// Move exp+-1 and smallest normal significand to fp regs for special cases -// Is x=inf? -{ .mfi - setf.exp FR_exp1 = GR_exp1 - fclass.m p6,p0 = f8, 0x23 - addl GR_exp_mask = 0x1ffff, r0 -} -{ .mfb - setf.sig FR_snorm_sig = GR_snorm_sig -(p9) fma.s0 f8 = f8,f1,f9 -(p9) br.ret.spnt b0 ;; // Exit if y=nan -} - -// Move largest denormal significand to fp regs for special cases -// Save x -{ .mfb - setf.sig FR_lden_sig = GR_lden_sig - mov FR_save_f8 = f8 -(p7) br.cond.spnt NEXT_ZERO ;; // Exit if x=0 -} - -// Mask off the sign to get x_exp -{ .mfb - and GR_x_exp = GR_exp_mask, GR_exp - nop.f 999 -(p6) br.cond.spnt NEXT_INF ;; // Exit if x=inf -} - -// Check 5 special cases when significand rolls over: -// 1 sig size incr, x_sig=max_sig, x_exp < max_exp -// Set p6, result is sig=min_sig, exp++ -// 2 sig size incr, x_sig=max_sig, x_exp >= max_exp -// Set p7, result is inf, signal overflow -// 3 sig size decr, x_sig=min_sig, x_exp > min_exp -// Set p8, result is sig=max_sig, exp-- -// 4 sig size decr, x_sig=min_sig, x_exp = min_exp -// Set p9, result is sig=max_den_sig, exp same, signal underflow and inexact -// 5 sig size decr, x_sig=min_den_sig, x_exp = min_exp -// Set p10, result is zero, sign of x, signal underflow and inexact -// -{ .mmi -(p12) cmp.eq.unc p6,p0 = GR_new_sig, r0 -(p13) cmp.eq.unc p9,p10 = GR_new_sig, GR_lden_sig - nop.i 999 -;; -} - -{ .mmi -(p6) cmp.lt.unc p6,p7 = GR_x_exp, GR_max_pexp -(p10) cmp.eq.unc p10,p0 = GR_new_sig, r0 -(p9) cmp.le.unc p9,p8 = GR_x_exp, GR_min_pexp -;; -} - -// Create small normal in case need to generate underflow flag -{ .mfi - nop.m 999 - fmerge.se FR_tmp = FR_snorm_exp, FR_lnorm_sig - nop.i 999 -} -// Branch if cases 1, 2, 3 -{ .bbb -(p6) br.cond.spnt NEXT_EXPUP -(p7) br.cond.spnt NEXT_OVERFLOW -(p8) br.cond.spnt NEXT_EXPDOWN ;; -} - -// Branch if cases 4, 5 -{ .mbb - nop.m 999 -(p9) br.cond.spnt NEXT_NORM_TO_DENORM -(p10) br.cond.spnt NEXT_UNDERFLOW_TO_ZERO -;; -} - -// Here if no special cases -// Set p6 if result will be a denormal, so can force underflow flag -// Case 1: x_exp=min_exp, x_sig=unnormalized -// Case 2: x_exp 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - -.section .text -GLOBAL_IEEE754_ENTRY(rint) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fclass.m p7,p0 = f8, 0x0b // Test x unorm - addl rBigexp = 0x10033, r0 // Set exponent at which is integer -} -{ .mfi - mov rM1 = -1 // Set all ones - fcvt.fx.s1 fXInt = f8 // Convert to int in significand - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - mov rFpsr = ar40 // Read fpsr -- check rc.s0 - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf - nop.i 0 -} -{ .mfb - setf.sig fTmp = rM1 // Make const for setting inexact - fnorm.s1 fNormX = f8 // Normalize input -(p7) br.cond.spnt RINT_UNORM // Branch if x unorm -} -;; - - -RINT_COMMON: -// Return here from RINT_UNORM -{ .mfb - and rExp = rSignexp, rExpMask // Get biased exponent -(p6) fma.d.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf -} -;; - -{ .mfi - mov rRcs0Mask = 0x0c00 // Mask for rc.s0 - fcvt.xf f8 = fXInt // Result assume |x| < 2^52 - cmp.ge p7,p8 = rExp, rBigexp // Is |x| >= 2^52? -} -;; - -// We must correct result if |x| >= 2^52 -{ .mfi - nop.m 0 -(p7) fma.d.s0 f8 = fNormX, f1, f0 // If |x| >= 2^52, result x - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.unc.s1 p0, p9 = f8, fNormX // Is result = x ? - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fmerge.s f8 = fNormX, f8 // Make sure sign rint(x) = sign x - nop.i 0 -} -;; - -{ .mfi -(p8) and rRcs0 = rFpsr, rRcs0Mask // Get rounding mode for sf0 - nop.f 0 - nop.i 0 -} -;; - -// If |x| < 2^52 we must test for other rounding modes -{ .mfi -(p8) cmp.ne.unc p10,p0 = rRcs0, r0 // Test for other rounding modes -(p9) fmpy.s0 fTmp = fTmp, fTmp // Dummy to set inexact - nop.i 0 -} -{ .mbb - nop.m 0 -(p10) br.cond.spnt RINT_NOT_ROUND_NEAREST // Branch if not round nearest - br.ret.sptk b0 // Exit main path if round nearest -} -;; - - - -RINT_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk RINT_COMMON // Return to main path -} -;; - -RINT_NOT_ROUND_NEAREST: -// Here if not round to nearest, and |x| < 2^52 -// Set rounding mode of s2 to that of s0, and repeat the conversion using s2 -{ .mfi - nop.m 0 - fsetc.s2 0x7f, 0x40 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.fx.s2 fXInt = fNormX // Convert to int in significand - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.xf f8 = fXInt // Expected result - nop.i 0 -} -;; - -// Be sure sign of result = sign of input. Fixes cases where result is 0. -{ .mfb - nop.m 0 - fmerge.s f8 = fNormX, f8 - br.ret.sptk b0 // Exit main path -} -;; - -GLOBAL_IEEE754_END(rint) diff --git a/sysdeps/ia64/fpu/s_rintf.S b/sysdeps/ia64/fpu/s_rintf.S deleted file mode 100644 index 05d6b411f2..0000000000 --- a/sysdeps/ia64/fpu/s_rintf.S +++ /dev/null @@ -1,229 +0,0 @@ -.file "rintf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 02/08/01 Corrected behavior for all rounding modes. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/20/03 Improved performance -//============================================================== - -// API -//============================================================== -// float rintf(float x) -//============================================================== - -// general input registers: -// r14 - r21 - -rSignexp = r14 -rExp = r15 -rExpMask = r16 -rBigexp = r17 -rM1 = r18 -rFpsr = r19 -rRcs0 = r20 -rRcs0Mask = r21 - -// floating-point registers: -// f8 - f11 - -fXInt = f9 -fNormX = f10 -fTmp = f11 - -// predicate registers used: -// p6 - p10 - -// Overview of operation -//============================================================== -// float rintf(float x) -// Return an integer value (represented as a float) that is x -// rounded to integer in current rounding mode -// Inexact is set if x != rint(x) -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - -.section .text -GLOBAL_IEEE754_ENTRY(rintf) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fclass.m p7,p0 = f8, 0x0b // Test x unorm - addl rBigexp = 0x10016, r0 // Set exponent at which is integer -} -{ .mfi - mov rM1 = -1 // Set all ones - fcvt.fx.s1 fXInt = f8 // Convert to int in significand - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - mov rFpsr = ar40 // Read fpsr -- check rc.s0 - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf - nop.i 0 -} -{ .mfb - setf.sig fTmp = rM1 // Make const for setting inexact - fnorm.s1 fNormX = f8 // Normalize input -(p7) br.cond.spnt RINT_UNORM // Branch if x unorm -} -;; - - -RINT_COMMON: -// Return here from RINT_UNORM -{ .mfb - and rExp = rSignexp, rExpMask // Get biased exponent -(p6) fma.s.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf -} -;; - -{ .mfi - mov rRcs0Mask = 0x0c00 // Mask for rc.s0 - fcvt.xf f8 = fXInt // Result assume |x| < 2^23 - cmp.ge p7,p8 = rExp, rBigexp // Is |x| >= 2^23? -} -;; - -// We must correct result if |x| >= 2^23 -{ .mfi - nop.m 0 -(p7) fma.s.s0 f8 = fNormX, f1, f0 // If |x| >= 2^23, result x - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.unc.s1 p0, p9 = f8, fNormX // Is result = x ? - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fmerge.s f8 = fNormX, f8 // Make sure sign rint(x) = sign x - nop.i 0 -} -;; - -{ .mfi -(p8) and rRcs0 = rFpsr, rRcs0Mask // Get rounding mode for sf0 - nop.f 0 - nop.i 0 -} -;; - -// If |x| < 2^23 we must test for other rounding modes -{ .mfi -(p8) cmp.ne.unc p10,p0 = rRcs0, r0 // Test for other rounding modes -(p9) fmpy.s0 fTmp = fTmp, fTmp // Dummy to set inexact - nop.i 0 -} -{ .mbb - nop.m 0 -(p10) br.cond.spnt RINT_NOT_ROUND_NEAREST // Branch if not round nearest - br.ret.sptk b0 // Exit main path if round nearest -} -;; - - - -RINT_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk RINT_COMMON // Return to main path -} -;; - -RINT_NOT_ROUND_NEAREST: -// Here if not round to nearest, and |x| < 2^23 -// Set rounding mode of s2 to that of s0, and repeat the conversion using s2 -{ .mfi - nop.m 0 - fsetc.s2 0x7f, 0x40 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.fx.s2 fXInt = fNormX // Convert to int in significand - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.xf f8 = fXInt // Expected result - nop.i 0 -} -;; - -// Be sure sign of result = sign of input. Fixes cases where result is 0. -{ .mfb - nop.m 0 - fmerge.s f8 = fNormX, f8 - br.ret.sptk b0 // Exit main path -} -;; - -GLOBAL_IEEE754_END(rintf) diff --git a/sysdeps/ia64/fpu/s_rintl.S b/sysdeps/ia64/fpu/s_rintl.S deleted file mode 100644 index b5402149ec..0000000000 --- a/sysdeps/ia64/fpu/s_rintl.S +++ /dev/null @@ -1,229 +0,0 @@ -.file "rintl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 02/08/01 Corrected behavior for all rounding modes. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/20/03 Improved performance -//============================================================== - -// API -//============================================================== -// long double rintl(long double x) -//============================================================== - -// general input registers: -// r14 - r21 - -rSignexp = r14 -rExp = r15 -rExpMask = r16 -rBigexp = r17 -rM1 = r18 -rFpsr = r19 -rRcs0 = r20 -rRcs0Mask = r21 - -// floating-point registers: -// f8 - f11 - -fXInt = f9 -fNormX = f10 -fTmp = f11 - -// predicate registers used: -// p6 - p10 - -// Overview of operation -//============================================================== -// long double rintl(long double x) -// Return an integer value (represented as a long double) that is x -// rounded to integer in current rounding mode -// Inexact is set if x != rint(x) -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - -.section .text -GLOBAL_IEEE754_ENTRY(rintl) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fclass.m p7,p0 = f8, 0x0b // Test x unorm - addl rBigexp = 0x1003e, r0 // Set exponent at which is integer -} -{ .mfi - mov rM1 = -1 // Set all ones - fcvt.fx.s1 fXInt = f8 // Convert to int in significand - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - mov rFpsr = ar40 // Read fpsr -- check rc.s0 - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf - nop.i 0 -} -{ .mfb - setf.sig fTmp = rM1 // Make const for setting inexact - fnorm.s1 fNormX = f8 // Normalize input -(p7) br.cond.spnt RINT_UNORM // Branch if x unorm -} -;; - - -RINT_COMMON: -// Return here from RINT_UNORM -{ .mfb - and rExp = rSignexp, rExpMask // Get biased exponent -(p6) fma.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf -} -;; - -{ .mfi - mov rRcs0Mask = 0x0c00 // Mask for rc.s0 - fcvt.xf f8 = fXInt // Result assume |x| < 2^63 - cmp.ge p7,p8 = rExp, rBigexp // Is |x| >= 2^63? -} -;; - -// We must correct result if |x| >= 2^63 -{ .mfi - nop.m 0 -(p7) fma.s0 f8 = fNormX, f1, f0 // If |x| >= 2^63, result x - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.eq.unc.s1 p0, p9 = f8, fNormX // Is result = x ? - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fmerge.s f8 = fNormX, f8 // Make sure sign rint(x) = sign x - nop.i 0 -} -;; - -{ .mfi -(p8) and rRcs0 = rFpsr, rRcs0Mask // Get rounding mode for sf0 - nop.f 0 - nop.i 0 -} -;; - -// If |x| < 2^63 we must test for other rounding modes -{ .mfi -(p8) cmp.ne.unc p10,p0 = rRcs0, r0 // Test for other rounding modes -(p9) fmpy.s0 fTmp = fTmp, fTmp // Dummy to set inexact - nop.i 0 -} -{ .mbb - nop.m 0 -(p10) br.cond.spnt RINT_NOT_ROUND_NEAREST // Branch if not round nearest - br.ret.sptk b0 // Exit main path if round nearest -} -;; - - - -RINT_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk RINT_COMMON // Return to main path -} -;; - -RINT_NOT_ROUND_NEAREST: -// Here if not round to nearest, and |x| < 2^63 -// Set rounding mode of s2 to that of s0, and repeat the conversion using s2 -{ .mfi - nop.m 0 - fsetc.s2 0x7f, 0x40 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.fx.s2 fXInt = fNormX // Convert to int in significand - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcvt.xf f8 = fXInt // Expected result - nop.i 0 -} -;; - -// Be sure sign of result = sign of input. Fixes cases where result is 0. -{ .mfb - nop.m 0 - fmerge.s f8 = fNormX, f8 - br.ret.sptk b0 // Exit main path -} -;; - -GLOBAL_IEEE754_END(rintl) diff --git a/sysdeps/ia64/fpu/s_round.S b/sysdeps/ia64/fpu/s_round.S deleted file mode 100644 index 821187522b..0000000000 --- a/sysdeps/ia64/fpu/s_round.S +++ /dev/null @@ -1,233 +0,0 @@ -.file "round.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 10/25/00 Initial version -// 06/14/01 Changed cmp to an equivalent form -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/20/03 Improved performance and reduced code size -// 04/18/03 Eliminate possible WAW dependency warning -// 09/03/03 Improved performance -//============================================================== - -// API -//============================================================== -// double round(double x) -//============================================================== - -// general input registers: -// r14 - r18 - -rSignexp = r14 -rExp = r15 -rExpMask = r16 -rBigexp = r17 -rExpHalf = r18 - -// floating-point registers: -// f8 - f13 - -fXtruncInt = f9 -fNormX = f10 -fHalf = f11 -fInc = f12 -fRem = f13 - -// predicate registers used: -// p6 - p10 - -// Overview of operation -//============================================================== -// double round(double x) -// Return an integer value (represented as a double) that is x -// rounded to nearest integer, halfway cases rounded away from -// zero. -// if x>0 result = trunc(x+0.5) -// if x<0 result = trunc(x-0.5) -// -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - - -.section .text -GLOBAL_LIBM_ENTRY(round) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fcvt.fx.trunc.s1 fXtruncInt = f8 // Convert to int in significand - addl rBigexp = 0x10033, r0 // Set exponent at which is integer -} -{ .mfi - mov rExpHalf = 0x0FFFE // Form sign and exponent of 0.5 - fnorm.s1 fNormX = f8 // Normalize input - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - setf.exp fHalf = rExpHalf // Form 0.5 - fclass.m p7,p0 = f8, 0x0b // Test x unorm - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf -(p7) br.cond.spnt ROUND_UNORM // Branch if x unorm -} -;; - -ROUND_COMMON: -// Return here from ROUND_UNORM -{ .mfb - nop.m 0 - fcmp.lt.s1 p8,p9 = f8, f0 // Test if x < 0 -(p6) br.cond.spnt ROUND_SPECIAL // Exit if x natval, nan, inf -} -;; - -{ .mfi - nop.m 0 - fcvt.xf f8 = fXtruncInt // Pre-Result if 0.5 <= |x| < 2^52 - nop.i 0 -} -;; - -{ .mfi - and rExp = rSignexp, rExpMask // Get biased exponent - fmerge.s fInc = fNormX, f1 // Form increment if |rem| >= 0.5 - nop.i 0 -} -;; - -{ .mmi - cmp.lt p6,p0 = rExp, rExpHalf // Is |x| < 0.5? - cmp.ge p7,p0 = rExp, rBigexp // Is |x| >= 2^52? - cmp.lt p10,p0 = rExp, rExpHalf // Is |x| < 0.5? -} -;; - -// We must correct result if |x| < 0.5, or |x| >= 2^52 -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fmerge.s f8 = fNormX, f0 // If |x| < 0.5, result sgn(x)*0 - nop.i 0 -} -{ .mfb -(p7) cmp.eq p10,p0 = r0, r0 // Also turn on p10 if |x| >= 2^52 -(p7) fma.d.s0 f8 = fNormX, f1, f0 // If |x| >= 2^52, result x -(p10) br.ret.spnt b0 // Exit |x| < 0.5 or |x| >= 2^52 -} -;; - -// Here if 0.5 <= |x| < 2^52 -{ .mfi - nop.m 0 -(p9) fms.s1 fRem = fNormX, f1, f8 // Get remainder = x - trunc(x) - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fms.s1 fRem = f8, f1, fNormX // Get remainder = trunc(x) - x - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.ge.s1 p9,p0 = fRem, fHalf // Test |rem| >= 0.5 - nop.i 0 -} -;; - -// If x < 0 and remainder <= -0.5, then subtract 1 from result -// If x > 0 and remainder >= +0.5, then add 1 to result -{ .mfb - nop.m 0 -(p9) fma.d.s0 f8 = f8, f1, fInc - br.ret.sptk b0 -} -;; - - -ROUND_SPECIAL: -// Here if x natval, nan, inf -{ .mfb - nop.m 0 - fma.d.s0 f8 = f8, f1, f0 - br.ret.sptk b0 -} -;; - -ROUND_UNORM: -// Here if x unorm -{ .mfi - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - nop.i 0 -} -{ .mfb - nop.m 0 - fcvt.fx.trunc.s1 fXtruncInt = fNormX // Convert to int in significand - br.cond.sptk ROUND_COMMON // Return to main path -} -;; - -GLOBAL_LIBM_END(round) diff --git a/sysdeps/ia64/fpu/s_roundf.S b/sysdeps/ia64/fpu/s_roundf.S deleted file mode 100644 index c0351b4a4d..0000000000 --- a/sysdeps/ia64/fpu/s_roundf.S +++ /dev/null @@ -1,233 +0,0 @@ -.file "roundf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 10/25/00 Initial version -// 06/14/01 Changed cmp to an equivalent form -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/20/03 Improved performance and reduced code size -// 04/18/03 Eliminate possible WAW dependency warning -// 09/03/03 Improved performance -//============================================================== - -// API -//============================================================== -// float roundf(float x) -//============================================================== - -// general input registers: -// r14 - r18 - -rSignexp = r14 -rExp = r15 -rExpMask = r16 -rBigexp = r17 -rExpHalf = r18 - -// floating-point registers: -// f8 - f13 - -fXtruncInt = f9 -fNormX = f10 -fHalf = f11 -fInc = f12 -fRem = f13 - -// predicate registers used: -// p6 - p10 - -// Overview of operation -//============================================================== -// float roundf(float x) -// Return an integer value (represented as a float) that is x -// rounded to nearest integer, halfway cases rounded away from -// zero. -// if x>0 result = trunc(x+0.5) -// if x<0 result = trunc(x-0.5) -// -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - - -.section .text -GLOBAL_LIBM_ENTRY(roundf) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fcvt.fx.trunc.s1 fXtruncInt = f8 // Convert to int in significand - addl rBigexp = 0x10016, r0 // Set exponent at which is integer -} -{ .mfi - mov rExpHalf = 0x0FFFE // Form sign and exponent of 0.5 - fnorm.s1 fNormX = f8 // Normalize input - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - setf.exp fHalf = rExpHalf // Form 0.5 - fclass.m p7,p0 = f8, 0x0b // Test x unorm - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf -(p7) br.cond.spnt ROUND_UNORM // Branch if x unorm -} -;; - -ROUND_COMMON: -// Return here from ROUND_UNORM -{ .mfb - nop.m 0 - fcmp.lt.s1 p8,p9 = f8, f0 // Test if x < 0 -(p6) br.cond.spnt ROUND_SPECIAL // Exit if x natval, nan, inf -} -;; - -{ .mfi - nop.m 0 - fcvt.xf f8 = fXtruncInt // Pre-Result if 0.5 <= |x| < 2^23 - nop.i 0 -} -;; - -{ .mfi - and rExp = rSignexp, rExpMask // Get biased exponent - fmerge.s fInc = fNormX, f1 // Form increment if |rem| >= 0.5 - nop.i 0 -} -;; - -{ .mmi - cmp.lt p6,p0 = rExp, rExpHalf // Is |x| < 0.5? - cmp.ge p7,p0 = rExp, rBigexp // Is |x| >= 2^23? - cmp.lt p10,p0 = rExp, rExpHalf // Is |x| < 0.5? -} -;; - -// We must correct result if |x| < 0.5, or |x| >= 2^23 -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fmerge.s f8 = fNormX, f0 // If |x| < 0.5, result sgn(x)*0 - nop.i 0 -} -{ .mfb -(p7) cmp.eq p10,p0 = r0, r0 // Also turn on p10 if |x| >= 2^23 -(p7) fma.s.s0 f8 = fNormX, f1, f0 // If |x| >= 2^23, result x -(p10) br.ret.spnt b0 // Exit |x| < 0.5 or |x| >= 2^23 -} -;; - -// Here if 0.5 <= |x| < 2^23 -{ .mfi - nop.m 0 -(p9) fms.s1 fRem = fNormX, f1, f8 // Get remainder = x - trunc(x) - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fms.s1 fRem = f8, f1, fNormX // Get remainder = trunc(x) - x - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.ge.s1 p9,p0 = fRem, fHalf // Test |rem| >= 0.5 - nop.i 0 -} -;; - -// If x < 0 and remainder <= -0.5, then subtract 1 from result -// If x > 0 and remainder >= +0.5, then add 1 to result -{ .mfb - nop.m 0 -(p9) fma.s.s0 f8 = f8, f1, fInc - br.ret.sptk b0 -} -;; - - -ROUND_SPECIAL: -// Here if x natval, nan, inf -{ .mfb - nop.m 0 - fma.s.s0 f8 = f8, f1, f0 - br.ret.sptk b0 -} -;; - -ROUND_UNORM: -// Here if x unorm -{ .mfi - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - nop.i 0 -} -{ .mfb - nop.m 0 - fcvt.fx.trunc.s1 fXtruncInt = fNormX // Convert to int in significand - br.cond.sptk ROUND_COMMON // Return to main path -} -;; - -GLOBAL_LIBM_END(roundf) diff --git a/sysdeps/ia64/fpu/s_roundl.S b/sysdeps/ia64/fpu/s_roundl.S deleted file mode 100644 index 355eaf5057..0000000000 --- a/sysdeps/ia64/fpu/s_roundl.S +++ /dev/null @@ -1,233 +0,0 @@ -.file "roundl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 10/25/00 Initial version -// 06/14/01 Changed cmp to an equivalent form -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/20/03 Improved performance and reduced code size -// 04/18/03 Eliminate possible WAW dependency warning -// 09/03/03 Improved performance -//============================================================== - -// API -//============================================================== -// long double roundl(long double x) -//============================================================== - -// general input registers: -// r14 - r18 - -rSignexp = r14 -rExp = r15 -rExpMask = r16 -rBigexp = r17 -rExpHalf = r18 - -// floating-point registers: -// f8 - f13 - -fXtruncInt = f9 -fNormX = f10 -fHalf = f11 -fInc = f12 -fRem = f13 - -// predicate registers used: -// p6 - p10 - -// Overview of operation -//============================================================== -// long double roundl(long double x) -// Return an integer value (represented as a long double) that is x -// rounded to nearest integer, halfway cases rounded away from -// zero. -// if x>0 result = trunc(x+0.5) -// if x<0 result = trunc(x-0.5) -// -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - - -.section .text -GLOBAL_LIBM_ENTRY(roundl) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fcvt.fx.trunc.s1 fXtruncInt = f8 // Convert to int in significand - addl rBigexp = 0x1003e, r0 // Set exponent at which is integer -} -{ .mfi - mov rExpHalf = 0x0FFFE // Form sign and exponent of 0.5 - fnorm.s1 fNormX = f8 // Normalize input - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - setf.exp fHalf = rExpHalf // Form 0.5 - fclass.m p7,p0 = f8, 0x0b // Test x unorm - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf -(p7) br.cond.spnt ROUND_UNORM // Branch if x unorm -} -;; - -ROUND_COMMON: -// Return here from ROUND_UNORM -{ .mfb - nop.m 0 - fcmp.lt.s1 p8,p9 = f8, f0 // Test if x < 0 -(p6) br.cond.spnt ROUND_SPECIAL // Exit if x natval, nan, inf -} -;; - -{ .mfi - nop.m 0 - fcvt.xf f8 = fXtruncInt // Pre-Result if 0.5 <= |x| < 2^63 - nop.i 0 -} -;; - -{ .mfi - and rExp = rSignexp, rExpMask // Get biased exponent - fmerge.s fInc = fNormX, f1 // Form increment if |rem| >= 0.5 - nop.i 0 -} -;; - -{ .mmi - cmp.lt p6,p0 = rExp, rExpHalf // Is |x| < 0.5? - cmp.ge p7,p0 = rExp, rBigexp // Is |x| >= 2^63? - cmp.lt p10,p0 = rExp, rExpHalf // Is |x| < 0.5? -} -;; - -// We must correct result if |x| < 0.5, or |x| >= 2^63 -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fmerge.s f8 = fNormX, f0 // If |x| < 0.5, result sgn(x)*0 - nop.i 0 -} -{ .mfb -(p7) cmp.eq p10,p0 = r0, r0 // Also turn on p10 if |x| >= 2^63 -(p7) fma.s0 f8 = fNormX, f1, f0 // If |x| >= 2^63, result x -(p10) br.ret.spnt b0 // Exit |x| < 0.5 or |x| >= 2^63 -} -;; - -// Here if 0.5 <= |x| < 2^63 -{ .mfi - nop.m 0 -(p9) fms.s1 fRem = fNormX, f1, f8 // Get remainder = x - trunc(x) - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fms.s1 fRem = f8, f1, fNormX // Get remainder = trunc(x) - x - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fcmp.ge.s1 p9,p0 = fRem, fHalf // Test |rem| >= 0.5 - nop.i 0 -} -;; - -// If x < 0 and remainder <= -0.5, then subtract 1 from result -// If x > 0 and remainder >= +0.5, then add 1 to result -{ .mfb - nop.m 0 -(p9) fma.s0 f8 = f8, f1, fInc - br.ret.sptk b0 -} -;; - - -ROUND_SPECIAL: -// Here if x natval, nan, inf -{ .mfb - nop.m 0 - fma.s0 f8 = f8, f1, f0 - br.ret.sptk b0 -} -;; - -ROUND_UNORM: -// Here if x unorm -{ .mfi - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - nop.i 0 -} -{ .mfb - nop.m 0 - fcvt.fx.trunc.s1 fXtruncInt = fNormX // Convert to int in significand - br.cond.sptk ROUND_COMMON // Return to main path -} -;; - -GLOBAL_LIBM_END(roundl) diff --git a/sysdeps/ia64/fpu/s_scalblnf.c b/sysdeps/ia64/fpu/s_scalblnf.c deleted file mode 100644 index ed92bfd989..0000000000 --- a/sysdeps/ia64/fpu/s_scalblnf.c +++ /dev/null @@ -1,61 +0,0 @@ -/* file: scalblnf.c */ - - -// Copyright (c) 2000, 2001, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// - -#include "libm_support.h" - -float __libm_scalblnf(float, long int, int); - - -float scalblnf(float x, long int n) -{ - -#ifdef SIZE_LONG_INT_64 - return __libm_scalblnf(x,n,1); -#else - -#ifdef SIZE_LONG_INT_32 - return __libm_scalblnf(x,n,0); -#endif - -#endif - -} diff --git a/sysdeps/ia64/fpu/s_scalbn.c b/sysdeps/ia64/fpu/s_scalbn.c deleted file mode 100644 index 23e8d818b2..0000000000 --- a/sysdeps/ia64/fpu/s_scalbn.c +++ /dev/null @@ -1,63 +0,0 @@ -/* file: scalbn.c */ - - -// Copyright (c) 2000, 2001, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// - -#include "libm_support.h" - -double __libm_scalbn(double, int, int); - - -double __scalbn(double x, int n) -{ - -#ifdef SIZE_INT_64 - return __libm_scalbn(x,n,1); -#else - -#ifdef SIZE_INT_32 - return __libm_scalbn(x,n,0); -#endif - -#endif - -} - -weak_alias (__scalbn, scalbn) diff --git a/sysdeps/ia64/fpu/s_scalbnf.c b/sysdeps/ia64/fpu/s_scalbnf.c deleted file mode 100644 index ec2582cddc..0000000000 --- a/sysdeps/ia64/fpu/s_scalbnf.c +++ /dev/null @@ -1,63 +0,0 @@ -/* file: scalbnf.c */ - - -// Copyright (c) 2000, 2001, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// - -#include "libm_support.h" - -float __libm_scalbnf(float, int, int); - - -float __scalbnf(float x, int n) -{ - -#ifdef SIZE_INT_64 - return __libm_scalbnf(x,n,1); -#else - -#ifdef SIZE_INT_32 - return __libm_scalbnf(x,n,0); -#endif - -#endif - -} - -weak_alias (__scalbnf, scalbnf) diff --git a/sysdeps/ia64/fpu/s_scalbnl.c b/sysdeps/ia64/fpu/s_scalbnl.c deleted file mode 100644 index 73ffb904b7..0000000000 --- a/sysdeps/ia64/fpu/s_scalbnl.c +++ /dev/null @@ -1,63 +0,0 @@ -/* file: scalbnl.c */ - - -// Copyright (c) 2000, 2001, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// - -#include "libm_support.h" - -long double __libm_scalbnl(long double, int, int); - - -long double __scalbnl(long double x, int n) -{ - -#ifdef SIZE_INT_64 - return __libm_scalbnl(x,n,1); -#else - -#ifdef SIZE_INT_32 - return __libm_scalbnl(x,n,0); -#endif - -#endif - -} - -weak_alias (__scalbnl, scalbnl) diff --git a/sysdeps/ia64/fpu/s_signbit.S b/sysdeps/ia64/fpu/s_signbit.S deleted file mode 100644 index f357722fda..0000000000 --- a/sysdeps/ia64/fpu/s_signbit.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#undef ret - -ENTRY (__signbit) -{ -.mfi - fclass.m p6, p7 = farg0, @zero | @unorm | @norm | @inf | @neg - ;; -} -{ -.mib -(p6) mov ret0 = 1 -(p7) mov ret0 = 0 - br.ret.sptk.many rp -} -END (__signbit) - -strong_alias (__signbit, __signbitf) -strong_alias (__signbit, __signbitl) diff --git a/sysdeps/ia64/fpu/s_signbitf.S b/sysdeps/ia64/fpu/s_signbitf.S deleted file mode 100644 index 34eadfca36..0000000000 --- a/sysdeps/ia64/fpu/s_signbitf.S +++ /dev/null @@ -1 +0,0 @@ -/* __signbitf is in s_signbit.S. */ diff --git a/sysdeps/ia64/fpu/s_signbitl.S b/sysdeps/ia64/fpu/s_signbitl.S deleted file mode 100644 index 52d7678526..0000000000 --- a/sysdeps/ia64/fpu/s_signbitl.S +++ /dev/null @@ -1 +0,0 @@ -/* __signbitl is in s_signbit.S. */ diff --git a/sysdeps/ia64/fpu/s_significand.S b/sysdeps/ia64/fpu/s_significand.S deleted file mode 100644 index c3f921f820..0000000000 --- a/sysdeps/ia64/fpu/s_significand.S +++ /dev/null @@ -1,153 +0,0 @@ -.file "significand.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 05/31/00 Fixed bug when x a double-extended denormal -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// double significand(double x) -// -// Overview of operation -//============================================================== -// If x = sig * 2**n with 1 <= sig < 2 -// significand returns sig -// -// predicate registers used: -// p6, p7 -// -// floating-point registers used: -// f8, f9, f10 - -.section .text -GLOBAL_LIBM_ENTRY(significand) - -// qnan snan inf norm unorm 0 -+ -// 1 1 1 0 0 1 11 - -// f10 gets f8(sign) with f1(exp,significand) -{ .mfi - nop.m 999 - fmerge.s f10 = f8,f1 - nop.i 999 -} -{ .mfi - nop.m 999 - fnorm.s0 f9 = f8 - nop.i 999 ;; -} - -// Test for denormal input -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f8, 0x0b - nop.i 999 ;; -} - -// p6 = TRUE ==> x is not (nan,inf,0) -// return sign(f8) exp(f1) significand(f8) -// else x is (nan,inf,0) -// return sign(f8) exp(f8) significand(f8), normalized. -{ .mfi - nop.m 999 - fclass.m.unc p0,p6 = f8, 0xe7 - nop.i 999 ;; -} - -{ .mmb - nop.m 999 - nop.m 999 -(p7) br.cond.spnt SIGNIFICAND_DENORM ;; // Branch if x denormal -} - -{ .mfi - nop.m 999 -(p6) fmerge.se f8 = f10,f8 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 - fnorm.d.s0 f8 = f8 - br.ret.sptk b0 ;; -} - -SIGNIFICAND_DENORM: -// Here if x denorm -{ .mfi - nop.m 999 - fmerge.se f8 = f10,f9 - nop.i 999 ;; -} - -// Check if fnorm(x) still denormal, means x double-extended denormal -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f9, 0x0b - nop.i 999 ;; -} - -// This will be the final result unless x double-extended denormal -{ .mfi - nop.m 999 - fnorm.d.s0 f8 = f8 - nop.i 999 ;; -} - -// If x double-extended denorm, then significand ok, but must merge in -// correct signexp -{ .mfi - nop.m 999 -(p7) fmerge.se f8 = f10,f8 - nop.i 999 ;; -} - -// Final normalization if x double-extended denorm -{ .mfb - nop.m 999 -(p7) fnorm.d.s0 f8 = f8 - br.ret.sptk b0 ;; -} - -GLOBAL_LIBM_END(significand) diff --git a/sysdeps/ia64/fpu/s_significandf.S b/sysdeps/ia64/fpu/s_significandf.S deleted file mode 100644 index 5ae4c74ab5..0000000000 --- a/sysdeps/ia64/fpu/s_significandf.S +++ /dev/null @@ -1,152 +0,0 @@ -.file "significandf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 02/03/00 Modified to improve speed -// 05/31/00 Fixed bug when x a double-extended denormal -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// float significandf(float x) -// Overview of operation -//============================================================== -// If x = sig * 2**n with 1 <= sig < 2 -// significandf returns sig -// -// predicate registers used: -// p6, p7 -// -// floating-point registers used: -// f8, f9, f10 - -.section .text -GLOBAL_LIBM_ENTRY(significandf) - -// qnan snan inf norm unorm 0 -+ -// 1 1 1 0 0 1 11 - -// f10 gets f8(sign) with f1(exp,significand) -{ .mfi - nop.m 999 - fmerge.s f10 = f8,f1 - nop.i 999 -} -{ .mfi - nop.m 999 - fnorm.s0 f9 = f8 - nop.i 999 ;; -} - -// Test for denormal input -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f8, 0x0b - nop.i 999 ;; -} - -// p6 = TRUE ==> x is not (nan,inf,0) -// return sign(f8) exp(f1) significand(f8) -// else x is (nan,inf,0) -// return sign(f8) exp(f8) significand(f8), normalized. -{ .mfi - nop.m 999 - fclass.m.unc p0,p6 = f8, 0xe7 - nop.i 999 ;; -} - -{ .mmb - nop.m 999 - nop.m 999 -(p7) br.cond.spnt SIGNIFICAND_DENORM ;; // Branch if x denormal -} - -{ .mfi - nop.m 999 -(p6) fmerge.se f8 = f10,f8 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 - fnorm.s.s0 f8 = f8 - br.ret.sptk b0 ;; -} - -SIGNIFICAND_DENORM: -// Here if x denorm -{ .mfi - nop.m 999 - fmerge.se f8 = f10,f9 - nop.i 999 ;; -} - -// Check if fnorm(x) still denormal, means x double-extended denormal -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f9, 0x0b - nop.i 999 ;; -} - -// This will be the final result unless x double-extended denormal -{ .mfi - nop.m 999 - fnorm.s.s0 f8 = f8 - nop.i 999 ;; -} - -// If x double-extended denorm, then significand ok, but must merge in -// correct signexp -{ .mfi - nop.m 999 -(p7) fmerge.se f8 = f10,f8 - nop.i 999 ;; -} - -// Final normalization if x double-extended denorm -{ .mfb - nop.m 999 -(p7) fnorm.s.s0 f8 = f8 - br.ret.sptk b0 ;; -} - -GLOBAL_LIBM_END(significandf) diff --git a/sysdeps/ia64/fpu/s_significandl.S b/sysdeps/ia64/fpu/s_significandl.S deleted file mode 100644 index e30c83cb72..0000000000 --- a/sysdeps/ia64/fpu/s_significandl.S +++ /dev/null @@ -1,153 +0,0 @@ -.file "significandl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 02/03/00 Modified to improve speed -// 05/31/00 Fixed bug when x a double-extended denormal -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// long double significandl(long double x) -// -// Overview of operation -//============================================================== -// If x = sig * 2**n with 1 <= sig < 2 -// significandl returns sig -// -// predicate registers used: -// p6, p7 -// -// floating-point registers used: -// f8, f9, f10 - -.section .text -GLOBAL_LIBM_ENTRY(significandl) - -// qnan snan inf norm unorm 0 -+ -// 1 1 1 0 0 1 11 - -// f10 gets f8(sign) with f1(exp,significand) -{ .mfi - nop.m 999 - fmerge.s f10 = f8,f1 - nop.i 999 -} -{ .mfi - nop.m 999 - fnorm.s0 f9 = f8 - nop.i 999 ;; -} - -// Test for denormal input -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f8, 0x0b - nop.i 999 ;; -} - -// p6 = TRUE ==> x is not (nan,inf,0) -// return sign(f8) exp(f1) significand(f8) -// else x is (nan,inf,0) -// return sign(f8) exp(f8) significand(f8), normalized. -{ .mfi - nop.m 999 - fclass.m.unc p0,p6 = f8, 0xe7 - nop.i 999 ;; -} - -{ .mmb - nop.m 999 - nop.m 999 -(p7) br.cond.spnt SIGNIFICAND_DENORM ;; // Branch if x denormal -} - -{ .mfi - nop.m 999 -(p6) fmerge.se f8 = f10,f8 - nop.i 999 ;; -} - -{ .mfb - nop.m 999 - fnorm.s0 f8 = f8 - br.ret.sptk b0 ;; -} - -SIGNIFICAND_DENORM: -// Here if x denorm -{ .mfi - nop.m 999 - fmerge.se f8 = f10,f9 - nop.i 999 ;; -} - -// Check if fnorm(x) still denormal, means x double-extended denormal -{ .mfi - nop.m 999 - fclass.m.unc p7,p0 = f9, 0x0b - nop.i 999 ;; -} - -// This will be the final result unless x double-extended denormal -{ .mfi - nop.m 999 - fnorm.s0 f8 = f8 - nop.i 999 ;; -} - -// If x double-extended denorm, then significand ok, but must merge in -// correct signexp -{ .mfi - nop.m 999 -(p7) fmerge.se f8 = f10,f8 - nop.i 999 ;; -} - -// Final normalization if x double-extended denorm -{ .mfb - nop.m 999 -(p7) fnorm.s0 f8 = f8 - br.ret.sptk b0 ;; -} - -GLOBAL_LIBM_END(significandl) diff --git a/sysdeps/ia64/fpu/s_sin.c b/sysdeps/ia64/fpu/s_sin.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/s_sin.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/s_sincos.c b/sysdeps/ia64/fpu/s_sincos.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/s_sincos.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/s_sincosf.c b/sysdeps/ia64/fpu/s_sincosf.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/s_sincosf.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/s_sincosl.c b/sysdeps/ia64/fpu/s_sincosl.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/s_sincosl.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/s_sinf.c b/sysdeps/ia64/fpu/s_sinf.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/s_sinf.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/s_sinl.c b/sysdeps/ia64/fpu/s_sinl.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/s_sinl.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/s_tan.S b/sysdeps/ia64/fpu/s_tan.S deleted file mode 100644 index 050b4434e1..0000000000 --- a/sysdeps/ia64/fpu/s_tan.S +++ /dev/null @@ -1,877 +0,0 @@ -.file "tancot.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 12/27/00 Improved speed -// 02/21/01 Updated to call tanl -// 05/30/02 Added cot -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// double tan(double x); -// double cot(double x); -// -// Overview of operation -//============================================================== -// If the input value in radians is |x| >= 1.xxxxx 2^10 call the -// older slower version. -// -// The new algorithm is used when |x| <= 1.xxxxx 2^9. -// -// Represent the input X as Nfloat * pi/2 + r -// where r can be negative and |r| <= pi/4 -// -// tan_W = x * 2/pi -// Nfloat = round_int(tan_W) -// -// tan_r = x - Nfloat * (pi/2)_hi -// a) tan_r = tan_r - Nfloat * (pi/2)_lo (for tan) -// b) tan_r = Nfloat * (pi/2)_lo - tan_r (for cot) -// -// We have two paths: p8, when Nfloat is even and p9. when Nfloat is odd. -// a) for tan: p8: tan(X) = tan(r) -// p9: tan(X) = -cot(r) -// b) for cot: p9: cot(X) = cot(r) -// p8: cot(X) = -tan(r) -// -// Each is evaluated as a series. The p9 path requires 1/r. -// -// The coefficients used in the series are stored in a table as -// are the pi constants. -// -// Registers used -//============================================================== -// -// predicate registers used: -// p6-12 -// -// floating-point registers used: -// f10-15, f32-106 -// f8, input -// -// general registers used -// r14-26, r32-39 -// -// Assembly macros -//============================================================== -TAN_INV_PI_BY_2_2TO64 = f10 -TAN_RSHF_2TO64 = f11 -TAN_2TOM64 = f12 -TAN_RSHF = f13 -TAN_W_2TO64_RSH = f14 -TAN_NFLOAT = f15 - -tan_Inv_Pi_by_2 = f32 -tan_Pi_by_2_hi = f33 -tan_Pi_by_2_lo = f34 - - -tan_P0 = f35 -tan_P1 = f36 -tan_P2 = f37 -tan_P3 = f38 -tan_P4 = f39 -tan_P5 = f40 -tan_P6 = f41 -tan_P7 = f42 -tan_P8 = f43 -tan_P9 = f44 -tan_P10 = f45 -tan_P11 = f46 -tan_P12 = f47 -tan_P13 = f48 -tan_P14 = f49 -tan_P15 = f50 - -tan_Q0 = f51 -tan_Q1 = f52 -tan_Q2 = f53 -tan_Q3 = f54 -tan_Q4 = f55 -tan_Q5 = f56 -tan_Q6 = f57 -tan_Q7 = f58 -tan_Q8 = f59 -tan_Q9 = f60 -tan_Q10 = f61 - -tan_r = f62 -tan_rsq = f63 -tan_rcube = f64 - -tan_v18 = f65 -tan_v16 = f66 -tan_v17 = f67 -tan_v12 = f68 -tan_v13 = f69 -tan_v7 = f70 -tan_v8 = f71 -tan_v4 = f72 -tan_v5 = f73 -tan_v15 = f74 -tan_v11 = f75 -tan_v14 = f76 -tan_v3 = f77 -tan_v6 = f78 -tan_v10 = f79 -tan_v2 = f80 -tan_v9 = f81 -tan_v1 = f82 -tan_int_Nfloat = f83 -tan_Nfloat = f84 - -tan_NORM_f8 = f85 -tan_W = f86 - -tan_y0 = f87 -tan_d = f88 -tan_y1 = f89 -tan_dsq = f90 -tan_y2 = f91 -tan_d4 = f92 -tan_inv_r = f93 - -tan_z1 = f94 -tan_z2 = f95 -tan_z3 = f96 -tan_z4 = f97 -tan_z5 = f98 -tan_z6 = f99 -tan_z7 = f100 -tan_z8 = f101 -tan_z9 = f102 -tan_z10 = f103 -tan_z11 = f104 -tan_z12 = f105 - -arg_copy = f106 - -///////////////////////////////////////////////////////////// - -tan_GR_sig_inv_pi_by_2 = r14 -tan_GR_rshf_2to64 = r15 -tan_GR_exp_2tom64 = r16 -tan_GR_n = r17 -tan_GR_rshf = r18 -tan_AD = r19 -tan_GR_10009 = r20 -tan_GR_17_ones = r21 -tan_GR_N_odd_even = r22 -tan_GR_N = r23 -tan_signexp = r24 -tan_exp = r25 -tan_ADQ = r26 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -GR_Parameter_Tag = r39 - - -RODATA - -.align 16 - -LOCAL_OBJECT_START(double_tan_constants) - data8 0xC90FDAA22168C234, 0x00003FFF // pi/2 hi - data8 0xBEEA54580DDEA0E1 // P14 - data8 0x3ED3021ACE749A59 // P15 - data8 0xBEF312BD91DC8DA1 // P12 - data8 0x3EFAE9AFC14C5119 // P13 - data8 0x3F2F342BF411E769 // P8 - data8 0x3F1A60FC9F3B0227 // P9 - data8 0x3EFF246E78E5E45B // P10 - data8 0x3F01D9D2E782875C // P11 - data8 0x3F8226E34C4499B6 // P4 - data8 0x3F6D6D3F12C236AC // P5 - data8 0x3F57DA1146DCFD8B // P6 - data8 0x3F43576410FE3D75 // P7 - data8 0x3FD5555555555555 // P0 - data8 0x3FC11111111111C2 // P1 - data8 0x3FABA1BA1BA0E850 // P2 - data8 0x3F9664F4886725A7 // P3 -LOCAL_OBJECT_END(double_tan_constants) - -LOCAL_OBJECT_START(double_Q_tan_constants) - data8 0xC4C6628B80DC1CD1, 0x00003FBF // pi/2 lo - data8 0x3E223A73BA576E48 // Q8 - data8 0x3DF54AD8D1F2CA43 // Q9 - data8 0x3EF66A8EE529A6AA // Q4 - data8 0x3EC2281050410EE6 // Q5 - data8 0x3E8D6BB992CC3CF5 // Q6 - data8 0x3E57F88DE34832E4 // Q7 - data8 0x3FD5555555555555 // Q0 - data8 0x3F96C16C16C16DB8 // Q1 - data8 0x3F61566ABBFFB489 // Q2 - data8 0x3F2BBD77945C1733 // Q3 - data8 0x3D927FB33E2B0E04 // Q10 -LOCAL_OBJECT_END(double_Q_tan_constants) - - -.section .text - -//////////////////////////////////////////////////////// - -LOCAL_LIBM_ENTRY(cot) -// The initial fnorm will take any unmasked faults and -// normalize any single/double unorms - -{ .mlx - cmp.eq p12, p11 = r0, r0 // set p12=1, p11=0 for cot - movl tan_GR_sig_inv_pi_by_2 = 0xA2F9836E4E44152A // significand of 2/pi -} -{ .mlx - addl tan_AD = @ltoff(double_tan_constants), gp - movl tan_GR_rshf_2to64 = 0x47e8000000000000 // 1.1000 2^(63+63+1) -} -;; - -{ .mlx - mov tan_GR_exp_2tom64 = 0xffff-64 // exponent of scaling factor 2^-64 - movl tan_GR_rshf = 0x43e8000000000000 // 1.1000 2^63 for right shift -} -{ .mfb - ld8 tan_AD = [tan_AD] - fnorm.s0 tan_NORM_f8 = f8 - br.cond.sptk COMMON_PATH -} -;; - -LOCAL_LIBM_END(cot) - - -GLOBAL_IEEE754_ENTRY(tan) -// The initial fnorm will take any unmasked faults and -// normalize any single/double unorms - -{ .mlx - cmp.eq p11, p12 = r0, r0 // set p11=1, p12=0 for tan - movl tan_GR_sig_inv_pi_by_2 = 0xA2F9836E4E44152A // significand of 2/pi -} -{ .mlx - addl tan_AD = @ltoff(double_tan_constants), gp - movl tan_GR_rshf_2to64 = 0x47e8000000000000 // 1.1000 2^(63+63+1) -} -;; - -{ .mlx - mov tan_GR_exp_2tom64 = 0xffff-64 // exponent of scaling factor 2^-64 - movl tan_GR_rshf = 0x43e8000000000000 // 1.1000 2^63 for right shift -} -{ .mfi - ld8 tan_AD = [tan_AD] - fnorm.s0 tan_NORM_f8 = f8 - nop.i 0 -} -;; - - -// Common path for both tan and cot -COMMON_PATH: -// Form two constants we need -// 2/pi * 2^1 * 2^63, scaled by 2^64 since we just loaded the significand -// 1.1000...000 * 2^(63+63+1) to right shift int(W) into the significand -{ .mmi - setf.sig TAN_INV_PI_BY_2_2TO64 = tan_GR_sig_inv_pi_by_2 - setf.d TAN_RSHF_2TO64 = tan_GR_rshf_2to64 - mov tan_GR_17_ones = 0x1ffff ;; -} - - -// Form another constant -// 2^-64 for scaling Nfloat -// 1.1000...000 * 2^63, the right shift constant -{ .mmf - setf.exp TAN_2TOM64 = tan_GR_exp_2tom64 - adds tan_ADQ = double_Q_tan_constants - double_tan_constants, tan_AD -(p11) fclass.m.unc p6,p0 = f8, 0x07 // Test for x=0 (tan) -} -;; - - -// Form another constant -// 2^-64 for scaling Nfloat -// 1.1000...000 * 2^63, the right shift constant -{ .mmf - setf.d TAN_RSHF = tan_GR_rshf - ldfe tan_Pi_by_2_hi = [tan_AD],16 - fclass.m.unc p7,p0 = f8, 0x23 // Test for x=inf -} -;; - -{ .mfb - ldfe tan_Pi_by_2_lo = [tan_ADQ],16 - fclass.m.unc p8,p0 = f8, 0xc3 // Test for x=nan -(p6) br.ret.spnt b0 ;; // Exit for x=0 (tan only) -} - -{ .mfi - ldfpd tan_P14,tan_P15 = [tan_AD],16 -(p7) frcpa.s0 f8,p9=f0,f0 // Set qnan indef if x=inf - mov tan_GR_10009 = 0x10009 -} -{ .mib - ldfpd tan_Q8,tan_Q9 = [tan_ADQ],16 - nop.i 999 -(p7) br.ret.spnt b0 ;; // Exit for x=inf -} - -{ .mfi - ldfpd tan_P12,tan_P13 = [tan_AD],16 -(p12) fclass.m.unc p6,p0 = f8, 0x07 // Test for x=0 (cot) - nop.i 999 -} -{ .mfb - ldfpd tan_Q4,tan_Q5 = [tan_ADQ],16 -(p8) fma.d.s0 f8=f8,f1,f8 // Set qnan if x=nan -(p8) br.ret.spnt b0 ;; // Exit for x=nan -} - -{ .mmf - getf.exp tan_signexp = tan_NORM_f8 - ldfpd tan_P8,tan_P9 = [tan_AD],16 - fmerge.s arg_copy = f8, f8 ;; // Save input for error call -} - -// Multiply x by scaled 2/pi and add large const to shift integer part of W to -// rightmost bits of significand -{ .mmf - alloc r32=ar.pfs,0,4,4,0 - ldfpd tan_Q6,tan_Q7 = [tan_ADQ],16 - fma.s1 TAN_W_2TO64_RSH = tan_NORM_f8,TAN_INV_PI_BY_2_2TO64,TAN_RSHF_2TO64 -};; - -{ .mmf - ldfpd tan_P10,tan_P11 = [tan_AD],16 - and tan_exp = tan_GR_17_ones, tan_signexp -(p6) frcpa.s0 f8, p0 = f1, f8 ;; // cot(+-0) = +-Inf -} - - -// p7 is true if we must call DBX TAN -// p7 is true if f8 exp is > 0x10009 (which includes all ones -// NAN or inf) -{ .mmb - ldfpd tan_Q0,tan_Q1 = [tan_ADQ],16 - cmp.ge.unc p7,p0 = tan_exp,tan_GR_10009 -(p7) br.cond.spnt TAN_DBX ;; -} - - -{ .mmb - ldfpd tan_P4,tan_P5 = [tan_AD],16 -(p6) mov GR_Parameter_Tag = 226 // (cot) -(p6) br.cond.spnt __libm_error_region ;; // call error support if cot(+-0) -} - - -{ .mmi - ldfpd tan_Q2,tan_Q3 = [tan_ADQ],16 - nop.m 999 - nop.i 999 ;; -} - - - -// TAN_NFLOAT = Round_Int_Nearest(tan_W) -{ .mfi - ldfpd tan_P6,tan_P7 = [tan_AD],16 - fms.s1 TAN_NFLOAT = TAN_W_2TO64_RSH,TAN_2TOM64,TAN_RSHF - nop.i 999 ;; -} - - -{ .mfi - ldfd tan_Q10 = [tan_ADQ] - nop.f 999 - nop.i 999 ;; -} - - -{ .mfi - ldfpd tan_P0,tan_P1 = [tan_AD],16 - nop.f 999 - nop.i 999 ;; -} - - -{ .mmi - getf.sig tan_GR_n = TAN_W_2TO64_RSH - ldfpd tan_P2,tan_P3 = [tan_AD] - nop.i 999 ;; -} - -// tan_r = -tan_Nfloat * tan_Pi_by_2_hi + x -{ .mfi -(p12) add tan_GR_n = 0x1, tan_GR_n // N = N + 1 (for cot) - fnma.s1 tan_r = TAN_NFLOAT, tan_Pi_by_2_hi, tan_NORM_f8 - nop.i 999 ;; -} - - -// p8 ==> even -// p9 ==> odd -{ .mmi - and tan_GR_N_odd_even = 0x1, tan_GR_n ;; - nop.m 999 - cmp.eq.unc p8,p9 = tan_GR_N_odd_even, r0 ;; -} - - -.pred.rel "mutex", p11, p12 -// tan_r = tan_r -tan_Nfloat * tan_Pi_by_2_lo (tan) -{ .mfi - nop.m 999 -(p11) fnma.s1 tan_r = TAN_NFLOAT, tan_Pi_by_2_lo, tan_r - nop.i 999 -} -// tan_r = -(tan_r -tan_Nfloat * tan_Pi_by_2_lo) (cot) -{ .mfi - nop.m 999 -(p12) fms.s1 tan_r = TAN_NFLOAT, tan_Pi_by_2_lo, tan_r - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 - fma.s1 tan_rsq = tan_r, tan_r, f0 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p9) frcpa.s1 tan_y0, p0 = f1,tan_r - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v18 = tan_rsq, tan_P15, tan_P14 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v4 = tan_rsq, tan_P1, tan_P0 - nop.i 999 ;; -} - - - -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v16 = tan_rsq, tan_P13, tan_P12 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v17 = tan_rsq, tan_rsq, f0 - nop.i 999 ;; -} - - - -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v12 = tan_rsq, tan_P9, tan_P8 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v13 = tan_rsq, tan_P11, tan_P10 - nop.i 999 ;; -} - - - -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v7 = tan_rsq, tan_P5, tan_P4 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v8 = tan_rsq, tan_P7, tan_P6 - nop.i 999 ;; -} - - - -{ .mfi - nop.m 999 -(p9) fnma.s1 tan_d = tan_r, tan_y0, f1 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v5 = tan_rsq, tan_P3, tan_P2 - nop.i 999 ;; -} - - - -{ .mfi - nop.m 999 -(p9) fma.s1 tan_z11 = tan_rsq, tan_Q9, tan_Q8 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 tan_z12 = tan_rsq, tan_rsq, f0 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v15 = tan_v17, tan_v18, tan_v16 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 tan_z7 = tan_rsq, tan_Q5, tan_Q4 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v11 = tan_v17, tan_v13, tan_v12 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 tan_z8 = tan_rsq, tan_Q7, tan_Q6 - nop.i 999 ;; -} - - - -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v14 = tan_v17, tan_v17, f0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 tan_z3 = tan_rsq, tan_Q1, tan_Q0 - nop.i 999 ;; -} - - - - -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v3 = tan_v17, tan_v5, tan_v4 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v6 = tan_v17, tan_v8, tan_v7 - nop.i 999 ;; -} - - - -{ .mfi - nop.m 999 -(p9) fma.s1 tan_y1 = tan_y0, tan_d, tan_y0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 tan_dsq = tan_d, tan_d, f0 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p9) fma.s1 tan_z10 = tan_z12, tan_Q10, tan_z11 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 tan_z9 = tan_z12, tan_z12,f0 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p9) fma.s1 tan_z4 = tan_rsq, tan_Q3, tan_Q2 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 tan_z6 = tan_z12, tan_z8, tan_z7 - nop.i 999 ;; -} - - - -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v10 = tan_v14, tan_v15, tan_v11 - nop.i 999 ;; -} - - - -{ .mfi - nop.m 999 -(p9) fma.s1 tan_y2 = tan_y1, tan_d, tan_y0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 tan_d4 = tan_dsq, tan_dsq, tan_d - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v2 = tan_v14, tan_v6, tan_v3 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v9 = tan_v14, tan_v14, f0 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p9) fma.s1 tan_z2 = tan_z12, tan_z4, tan_z3 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 tan_z5 = tan_z9, tan_z10, tan_z6 - nop.i 999 ;; -} - - -{ .mfi - nop.m 999 -(p9) fma.s1 tan_inv_r = tan_d4, tan_y2, tan_y0 - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fma.s1 tan_rcube = tan_rsq, tan_r, f0 - nop.i 999 ;; -} - - - -{ .mfi - nop.m 999 -(p8) fma.s1 tan_v1 = tan_v9, tan_v10, tan_v2 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fma.s1 tan_z1 = tan_z9, tan_z5, tan_z2 - nop.i 999 ;; -} - - - -{ .mfi - nop.m 999 -(p8) fma.d.s0 f8 = tan_v1, tan_rcube, tan_r - nop.i 999 -} -{ .mfb - nop.m 999 -(p9) fms.d.s0 f8 = tan_r, tan_z1, tan_inv_r - br.ret.sptk b0 ;; -} -GLOBAL_IEEE754_END(tan) - - -LOCAL_LIBM_ENTRY(__libm_callout) -TAN_DBX: -.prologue - -{ .mfi - nop.m 0 - fmerge.s f9 = f0,f0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs -} -;; - -{ .mfi - mov GR_SAVE_GP=gp - nop.f 0 -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 -} - -.body -{ .mmb - nop.m 999 - nop.m 999 -(p11) br.cond.sptk.many call_tanl ;; -} - -// Here if we should call cotl -{ .mmb - nop.m 999 - nop.m 999 - br.call.sptk.many b0=__libm_cotl# ;; -} - -{ .mfi - mov gp = GR_SAVE_GP - fnorm.d.s0 f8 = f8 - mov b0 = GR_SAVE_B0 -} -;; - -{ .mib - nop.m 999 - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 -;; -} - -// Here if we should call tanl -call_tanl: -{ .mmb - nop.m 999 - nop.m 999 - br.call.sptk.many b0=__libm_tanl# ;; -} - -{ .mfi - mov gp = GR_SAVE_GP - fnorm.d.s0 f8 = f8 - mov b0 = GR_SAVE_B0 -} -;; - -{ .mib - nop.m 999 - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 -;; -} - -LOCAL_LIBM_END(__libm_callout) - -.type __libm_tanl#,@function -.global __libm_tanl# -.type __libm_cotl#,@function -.global __libm_cotl# - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -// (1) -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -// (2) -{ .mmi - stfd [GR_Parameter_Y] = f1,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -// (3) -{ .mib - stfd [GR_Parameter_X] = arg_copy // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; - -// (4) -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_tanf.S b/sysdeps/ia64/fpu/s_tanf.S deleted file mode 100644 index 7df762f621..0000000000 --- a/sysdeps/ia64/fpu/s_tanf.S +++ /dev/null @@ -1,691 +0,0 @@ -.file "tancotf.s" - - -// Copyright (c) 2000 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 02/02/00 Initial version -// 04/04/00 Unwind support added -// 12/27/00 Improved speed -// 02/21/01 Updated to call tanl -// 05/30/02 Improved speed, added cotf. -// 11/25/02 Added explicit completer on fnorm -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 04/17/03 Eliminated redundant stop bits -// 03/31/05 Reformatted delimiters between data tables -// -// APIs -//============================================================== -// float tanf(float) -// float cotf(float) -// -// Algorithm Description for tanf -//============================================================== -// The tanf function computes the principle value of the tangent of x, -// where x is radian argument. -// -// There are 5 paths: -// 1. x = +/-0.0 -// Return tanf(x) = +/-0.0 -// -// 2. x = [S,Q]NaN -// Return tanf(x) = QNaN -// -// 3. x = +/-Inf -// Return tanf(x) = QNaN -// -// 4. x = r + (Pi/2)*N, N = RoundInt(x*(2/Pi)), N is even, |r| f80 -// -// General registers used: -// r14 -> r23, r32 -> r39 -// -// Predicate registers used: -// p6 -> p13 -// -// Assembly macros -//============================================================== -// integer registers -rExp = r14 -rSignMask = r15 -rRshf = r16 -rScFctrExp = r17 -rIntN = r18 -rSigRcpPiby2 = r19 -rScRshf = r20 -rCoeffA = r21 -rCoeffB = r22 -rExpCut = r23 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_Parameter_X = r36 -GR_Parameter_Y = r37 -GR_Parameter_RESULT = r38 -GR_Parameter_Tag = r39 - -//============================================================== -// floating point registers -fScRcpPiby2 = f32 -fScRshf = f33 -fNormArg = f34 -fScFctr = f35 -fRshf = f36 -fShiftedN = f37 -fN = f38 -fR = f39 -fA01 = f40 -fA03 = f41 -fA05 = f42 -fA07 = f43 -fA09 = f44 -fA11 = f45 -fA13 = f46 -fA15 = f47 -fA17 = f48 -fA19 = f49 -fB01 = f50 -fB03 = f51 -fB05 = f52 -fB07 = f53 -fB09 = f54 -fB11 = f55 -fA03_01 = f56 -fA07_05 = f57 -fA11_09 = f58 -fA15_13 = f59 -fA19_17 = f60 -fA11_05 = f61 -fA19_13 = f62 -fA19_05 = f63 -fRbyA03_01 = f64 -fB03_01 = f65 -fB07_05 = f66 -fB11_09 = f67 -fB11_05 = f68 -fRbyB03_01 = f69 -fRbyB11_01 = f70 -fRp2 = f71 -fRp4 = f72 -fRp8 = f73 -fRp5 = f74 -fY0 = f75 -fY1 = f76 -fD = f77 -fDp2 = f78 -fInvR = f79 -fPiby2 = f80 -//============================================================== - - -RODATA -.align 16 - -LOCAL_OBJECT_START(coeff_A) -data8 0x3FF0000000000000 // A1 = 1.00000000000000000000e+00 -data8 0x3FD5555556BCE758 // A3 = 3.33333334641442641606e-01 -data8 0x3FC111105C2DAE48 // A5 = 1.33333249100689099175e-01 -data8 0x3FABA1F876341060 // A7 = 5.39701122561673229739e-02 -data8 0x3F965FB86D12A38D // A9 = 2.18495194027670719750e-02 -data8 0x3F8265F62415F9D6 // A11 = 8.98353860497717439465e-03 -data8 0x3F69E3AE64CCF58D // A13 = 3.16032468108912746342e-03 -data8 0x3F63920D09D0E6F6 // A15 = 2.38897844840557235331e-03 -LOCAL_OBJECT_END(coeff_A) - -LOCAL_OBJECT_START(coeff_B) -data8 0xC90FDAA22168C235, 0x3FFF // pi/2 -data8 0x3FD55555555358DB // B1 = 3.33333333326107426583e-01 -data8 0x3F96C16C252F643F // B3 = 2.22222230621336129239e-02 -data8 0x3F61566243AB3C60 // B5 = 2.11638633968606896785e-03 -data8 0x3F2BC1169BD4438B // B7 = 2.11748132564551094391e-04 -data8 0x3EF611B4CEA056A1 // B9 = 2.10467959860990200942e-05 -data8 0x3EC600F9E32194BF // B11 = 2.62305891234274186608e-06 -data8 0xBF42BA7BCC177616 // A17 =-5.71546981685324877205e-04 -data8 0x3F4F2614BC6D3BB8 // A19 = 9.50584530849832782542e-04 -LOCAL_OBJECT_END(coeff_B) - - -.section .text - -LOCAL_LIBM_ENTRY(cotf) - -{ .mlx - getf.exp rExp = f8 // ***** Get 2ˆ17 * s + E - movl rSigRcpPiby2= 0xA2F9836E4E44152A // significand of 2/Pi -} -{ .mlx - addl rCoeffA = @ltoff(coeff_A), gp - movl rScRshf = 0x47e8000000000000 // 1.5*2^(63+63+1) -} -;; - -{ .mfi - alloc r32 = ar.pfs, 0, 4, 4, 0 - fclass.m p9, p0 = f8, 0xc3 // Test for x=nan - cmp.eq p11, p10 = r0, r0 // if p11=1 we compute cotf -} -{ .mib - ld8 rCoeffA = [rCoeffA] - mov rExpCut = 0x10009 // cutoff for exponent - br.cond.sptk Common_Path -} -;; - -LOCAL_LIBM_END(cotf) - - -GLOBAL_IEEE754_ENTRY(tanf) - -{ .mlx - getf.exp rExp = f8 // ***** Get 2ˆ17 * s + E - movl rSigRcpPiby2= 0xA2F9836E4E44152A // significand of 2/Pi -} -{ .mlx - addl rCoeffA = @ltoff(coeff_A), gp - movl rScRshf = 0x47e8000000000000 // 1.5*2^(63+63+1) -} -;; - -{ .mfi - alloc r32 = ar.pfs, 0, 4, 4, 0 - fclass.m p9, p0 = f8, 0xc3 // Test for x=nan - cmp.eq p10, p11 = r0, r0 // if p10=1 we compute tandf -} -{ .mib - ld8 rCoeffA = [rCoeffA] - mov rExpCut = 0x10009 // cutoff for exponent - nop.b 0 -} -;; - -// Below is common path for both tandf and cotdf -Common_Path: -{ .mfi - setf.sig fScRcpPiby2 = rSigRcpPiby2 // 2^(63+1)*(2/Pi) - fclass.m p8, p0 = f8, 0x23 // Test for x=inf - mov rSignMask = 0x1ffff // mask for sign bit -} -{ .mlx - setf.d fScRshf = rScRshf // 1.5*2^(63+63+1) - movl rRshf = 0x43e8000000000000 // 1.5 2^63 for right shift -} -;; - -{ .mfi - and rSignMask = rSignMask, rExp // clear sign bit -(p10) fclass.m.unc p7, p0 = f8, 0x07 // Test for x=0 (for tanf) - mov rScFctrExp = 0xffff-64 // exp of scaling factor -} -{ .mfb - adds rCoeffB = coeff_B - coeff_A, rCoeffA -(p9) fma.s.s0 f8 = f8, f1, f8 // Set qnan if x=nan -(p9) br.ret.spnt b0 // Exit for x=nan -} -;; - -{ .mfi - cmp.ge p6, p0 = rSignMask, rExpCut // p6 = (E => 0x10009) -(p8) frcpa.s0 f8, p0 = f0, f0 // Set qnan indef if x=inf - mov GR_Parameter_Tag = 227 // (cotf) -} -{ .mbb - ldfe fPiby2 = [rCoeffB], 16 -(p8) br.ret.spnt b0 // Exit for x=inf -(p6) br.cond.spnt Huge_Argument // Branch if |x|>=2^10 -} -;; - -{ .mfi - nop.m 0 -(p11) fclass.m.unc p6, p0 = f8, 0x07 // Test for x=0 (for cotf) - nop.i 0 -} -{ .mfb - nop.m 0 - fnorm.s0 fNormArg = f8 -(p7) br.ret.spnt b0 // Exit for x=0 (for tanf) -} -;; - -{ .mmf - ldfpd fA01, fA03 = [rCoeffA], 16 - ldfpd fB01, fB03 = [rCoeffB], 16 - fmerge.s f10 = f8, f8 // Save input for error call -} -;; - -{ .mmf - setf.exp fScFctr = rScFctrExp // get as real - setf.d fRshf = rRshf // get right shifter as real -(p6) frcpa.s0 f8, p0 = f1, f8 // cotf(+-0) = +-Inf -} -;; - -{ .mmb - ldfpd fA05, fA07 = [rCoeffA], 16 - ldfpd fB05, fB07 = [rCoeffB], 16 -(p6) br.cond.spnt __libm_error_region // call error support if cotf(+-0) -} -;; - -{ .mmi - ldfpd fA09, fA11 = [rCoeffA], 16 - ldfpd fB09, fB11 = [rCoeffB], 16 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fShiftedN = fNormArg,fScRcpPiby2,fScRshf // x*2^70*(2/Pi)+ScRshf - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fms.s1 fN = fShiftedN, fScFctr, fRshf // N = Y*2^(-70) - Rshf - nop.i 0 -} -;; - -.pred.rel "mutex", p10, p11 -{ .mfi - getf.sig rIntN = fShiftedN // get N as integer -(p10) fnma.s1 fR = fN, fPiby2, fNormArg // R = x - (Pi/2)*N (tanf) - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fms.s1 fR = fN, fPiby2, fNormArg // R = (Pi/2)*N - x (cotf) - nop.i 0 -} -;; - -{ .mmi - ldfpd fA13, fA15 = [rCoeffA], 16 - ldfpd fA17, fA19 = [rCoeffB], 16 - nop.i 0 -} -;; - -Return_From_Huges: -{ .mfi - nop.m 0 - fma.s1 fRp2 = fR, fR, f0 // R^2 -(p11) add rIntN = 0x1, rIntN // N = N + 1 (cotf) -} -;; - -{ .mfi - nop.m 0 - frcpa.s1 fY0, p0 = f1, fR // Y0 ~ 1/R - tbit.z p8, p9 = rIntN, 0 // p8=1 if N is even -} -;; - -// Below are mixed polynomial calculations (mixed for even and odd N) -{ .mfi - nop.m 0 -(p9) fma.s1 fB03_01 = fRp2, fB03, fB01 // R^2*B3 + B1 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fRp4 = fRp2, fRp2, f0 // R^4 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p8) fma.s1 fA15_13 = fRp2, fA15, fA13 // R^2*A15 + A13 - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fma.s1 fA19_17 = fRp2, fA19, fA17 // R^2*A19 + A17 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p8) fma.s1 fA07_05 = fRp2, fA07, fA05 // R^2*A7 + A5 - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fma.s1 fA11_09 = fRp2, fA11, fA09 // R^2*A11 + A9 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p9) fma.s1 fB07_05 = fRp2, fB07, fB05 // R^2*B7 + B5 - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 fB11_09 = fRp2, fB11, fB09 // R^2*B11 + B9 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p9) fnma.s1 fD = fR, fY0, f1 // D = 1 - R*Y0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fma.s1 fA03_01 = fRp2, fA03, fA01 // R^2*A3 + A1 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fRp8 = fRp4, fRp4, f0 // R^8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fRp5 = fR, fRp4, f0 // R^5 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p8) fma.s1 fA11_05 = fRp4, fA11_09, fA07_05 // R^4*(R^2*A11 + A9) + ... - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fma.s1 fA19_13 = fRp4, fA19_17, fA15_13 // R^4*(R^2*A19 + A17) + .. - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p9) fma.s1 fB11_05 = fRp4, fB11_09, fB07_05 // R^4*(R^2*B11 + B9) + ... - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 fRbyB03_01 = fR, fB03_01, f0 // R*(R^2*B3 + B1) - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p9) fma.s1 fY1 = fY0, fD, fY0 // Y1 = Y0*D + Y0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 fDp2 = fD, fD, f0 // D^2 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // R^8*(R^6*A19 + R^4*A17 + R^2*A15 + A13) + R^6*A11 + R^4*A9 + R^2*A7 + A5 -(p8) fma.d.s1 fA19_05 = fRp8, fA19_13, fA11_05 - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fma.d.s1 fRbyA03_01 = fR, fA03_01, f0 // R*(R^2*A3 + A1) - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p9) fma.d.s1 fInvR = fY1, fDp2, fY1 // 1/R = Y1*D^2 + Y1 - nop.i 0 -} -{ .mfi - nop.m 0 - // R^5*(R^6*B11 + R^4*B9 + R^2*B7 + B5) + R^3*B3 + R*B1 -(p9) fma.d.s1 fRbyB11_01 = fRp5, fB11_05, fRbyB03_01 - nop.i 0 -} -;; - -.pred.rel "mutex", p8, p9 -{ .mfi - nop.m 0 - // Result = R^5*(R^14*A19 + R^12*A17 + R^10*A15 + ...) + R^3*A3 + R*A1 -(p8) fma.s.s0 f8 = fRp5, fA19_05, fRbyA03_01 - nop.i 0 -} -{ .mfb - nop.m 0 - // Result = -1/R + R^11*B11 + R^9*B9 + R^7*B7 + R^5*B5 + R^3*B3 + R*B1 -(p9) fnma.s.s0 f8 = f1, fInvR, fRbyB11_01 - br.ret.sptk b0 // exit for main path -} -;; - -GLOBAL_IEEE754_END(tanf) - - -LOCAL_LIBM_ENTRY(__libm_callout) -Huge_Argument: -.prologue - -{ .mfi - nop.m 0 - fmerge.s f9 = f0,f0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs -} -;; - -{ .mfi - mov GR_SAVE_GP=gp - nop.f 0 -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 -} - -.body -{ .mmb - nop.m 999 - nop.m 999 -(p10) br.cond.sptk.many call_tanl ;; -} - -// Here if we should call cotl (p10=0, p11=1) -{ .mmb - nop.m 999 - nop.m 999 - br.call.sptk.many b0=__libm_cotl# ;; -} - -{ .mfi - mov gp = GR_SAVE_GP - fnorm.s.s0 f8 = f8 - mov b0 = GR_SAVE_B0 -} -;; - -{ .mib - nop.m 999 - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 -;; -} - -// Here if we should call tanl (p10=1, p11=0) -call_tanl: -{ .mmb - nop.m 999 - nop.m 999 - br.call.sptk.many b0=__libm_tanl# ;; -} - -{ .mfi - mov gp = GR_SAVE_GP - fnorm.s.s0 f8 = f8 - mov b0 = GR_SAVE_B0 -} -;; - -{ .mib - nop.m 999 - mov ar.pfs = GR_SAVE_PFS - br.ret.sptk b0 -;; -} - -LOCAL_LIBM_END(__libm_callout) - -.type __libm_tanl#,@function -.global __libm_tanl# -.type __libm_cotl#,@function -.global __libm_cotl# - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -// (1) -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -// (2) -{ .mmi - stfs [GR_Parameter_Y] = f1,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -// (3) -{ .mib - stfs [GR_Parameter_X] = f10 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; - -// (4) -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/s_tanh.S b/sysdeps/ia64/fpu/s_tanh.S deleted file mode 100644 index 393af1f8c2..0000000000 --- a/sysdeps/ia64/fpu/s_tanh.S +++ /dev/null @@ -1,984 +0,0 @@ -.file "tanh.s" - - -// Copyright (c) 2001 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================================== -// 05/30/01 Initial version -// 12/04/01 Rewritten version with erf-like algorithm. -// Performance improved. -// 05/20/02 Cleaned up namespace and sf0 syntax -// 08/14/02 Changed mli templates to mlx -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================================== -// double tanh(double) -// -// Overview of operation -//============================================================================== -// -// Algorithm description -// --------------------- -// -// There are 4 paths: -// -// 1. Special path: x = 0, Inf, NaNs, denormals -// Return tanh(x) = +/-0.0 for zeros -// Return tanh(x) = QNaN for NaNs -// Return tanh(x) = sign(x)*1.0 for Inf -// Return tanh(x) = x + x^2 for - denormals -// Return tanh(x) = x - x^2 for + denormals -// -// 2. Near zero path: 0.0 < |x| < 0.25 -// Return tanh(x) = x + x^3*A3 + ... + x^19*A19 -// -// 3. Main path: 0.25 <= |x| < 19.0625 -// For several ranges of 0.25 <= |x| < 19.0625 -// Return tanh(x) = sign(x)*(A0 + y*A1 + y^2*A2 + -// + y^3*A3 + ... + y^19*A19) -// where y = (|x|/a) - b -// -// For each range there is particular set of coefficients. -// Below is the list of ranges: -// 1/4 <= |x| < 1/2 a = 0.25, b = 1.0 -// 1/2 <= |x| < 1.0 a = 0.5, b = 1.0 -// 1.0 <= |x| < 2.0 a = 1.0, b = 1.0 -// 2.0 <= |x| < 3.25 a = 2.0, b = 1.0 -// 3.25 <= |x| < 4.0 a = 2.0, b = 2.0 -// 4.0 <= |x| < 6.5 a = 4.0, b = 1.0 -// 6.5 <= |x| < 8.0 a = 4.0, b = 2.0 -// 8.0 <= |x| < 13.0 a = 8.0, b = 1.0 -// 13.0 <= |x| < 16.0 a = 8.0, b = 2.0 -// 16.0 <= |x| < 19.0625 a = 16.0, b = 1.0 -// ( [3.25;4.0], [6.5;8.0], [13.0;16.0] subranges separated -// for monotonicity issues resolve ) -// -// 4. Saturation path: 19.0625 <= |x| < +INF -// Return tanh(x) = sign(x)*(1.0 - tiny_value) -// (tiny_value ~ 2^(-63)) -// -// Registers used -//============================================================================== -// Floating Point registers used: -// f8 = input, output -// f32 -> f64 -// -// General registers used: -// r32 -> r51, r2, r3 -// -// Predicate registers used: -// p6, p8, p10, p11, p12, p14, p15 -// p6 arg is zero, denormal or special IEEE -// p8 to filter out case when signd(x) > 1.625 -// p10 to filter out case when |x| < 0.25 -// p11 to filter out case when signd(x) <= 1.625 -// p12 to filter out case when |x| >= 19.0625 -// p14 set to 1 for positive x -// p15 set to 1 for negative x - -// Assembly macros -//============================================================================== -rDataPtr = r2 -rDataPtr1 = r3 - -rBias = r33 -rCoeffAddr3 = r34 -rThreeAndQ = r35 -rCoeffAddr2 = r36 -rMask = r37 -rArg = r38 -rSignBit = r39 -rAbsArg = r40 -rSaturation = r41 -rIndex = r42 -rCoeffAddr1 = r43 -rCoeffAddr4 = r44 -rShiftedArg = r45 -rShiftedArgMasked = r46 -rBiasedExpOf4 = r47 -rShiftedAbsArg = r48 -rArgSgnd = r49 -r1625Sgnd = r50 -rTwo = r51 - -//============================================================================== -fA0 = f32 -fA1 = f33 -fA2 = f34 -fA3 = f35 -fA4 = f36 -fA5 = f37 -fA6 = f38 -fA7 = f39 -fA8 = f40 -fA9 = f41 -fA10 = f42 -fA11 = f43 -fA12 = f44 -fA13 = f45 -fA14 = f46 -fA15 = f47 -fA16 = f48 -fA17 = f49 -fA18 = f50 -fA19 = f51 -fArgSqr = f52 -fArgAbsNorm = f53 -fSignumX = f54 -fRes = f55 -fThreeAndQ = f56 -fArgAbs = f57 -fTSqr = f58 -fTQuadr = f59 -fTDeg3 = f60 -fTDeg7 = f61 -fArgAbsNormSgn = f62 -fTQuadrSgn = f63 -fTwo = f64 - -// Data tables -//============================================================================== -RODATA - -.align 16 - -LOCAL_OBJECT_START(tanh_data) -// CAUTION: The order of these table coefficients shouldn't be changed! - -// Main path coefficients: -// Coefficients ##0..15 ("main" coefficient tables) -// Polynomial coefficients for the tanh(x), 0.25 <= |x| < 0.5 -data8 0xE9D218BC9A3FB55A, 0x00003FC7 //A19 -data8 0xC8C0D38687F36EBA, 0x00003FCE //A18 -data8 0xA2663E519FAC8A43, 0x0000BFD2 //A17 -data8 0xD913F0490674B0DF, 0x00003FD3 //A16 -data8 0xF75D84789DE0AE52, 0x00003FD6 //A15 -data8 0xACB3C40EEF3A06F0, 0x0000BFD9 //A14 -data8 0xEBD7F5DC02CFD5BA, 0x0000BFDB //A13 -data8 0x8B52CDF66D709E2A, 0x00003FDF //A12 -data8 0x9EC21F28E05C4A3E, 0x00003FE0 //A11 -data8 0xC412B44D0176F3ED, 0x0000BFE4 //A10 -data8 0x97BF35A34DD1EA4C, 0x0000BFE0 //A9 -data8 0xF89F5B39E3A3AA36, 0x00003FE9 //A8 -data8 0xF2BA654BCEEBA433, 0x0000BFEA //A7 -data8 0x8E1C15876AA589AD, 0x0000BFEF //A6 -data8 0x942226246A8C2A86, 0x00003FF1 //A5 -data8 0x8F06D9FF7DB47261, 0x00003FF4 //A4 -// -// Polynomial coefficients for the tanh(x), 0.5 <= |x| < 1.0 -data8 0xC4A7B8FB672A8520, 0x00003FDC //A19 -data8 0xA20724B847E13499, 0x0000BFE0 //A18 -data8 0xE17DB53F02E4D340, 0x00003FE2 //A17 -data8 0x90264A1012F4CA6F, 0x0000BFE4 //A16 -data8 0xEBEC9F776F0BF415, 0x0000BFE0 //A15 -data8 0x89AF912B305B45A4, 0x00003FE7 //A14 -data8 0xB4A960B81F5EC36A, 0x0000BFE7 //A13 -data8 0x969A4E95B2DA86B5, 0x0000BFEA //A12 -data8 0x8A3FC0EC082305CB, 0x00003FEC //A11 -data8 0x83D7795BCBE24373, 0x00003FEC //A10 -data8 0xDCBF42AEB82932EC, 0x0000BFEF //A9 -data8 0x83318E61ECAFD804, 0x00003FF0 //A8 -data8 0xEA4DE5746975A914, 0x00003FF2 //A7 -data8 0xCE63E8FA6B96480B, 0x0000BFF4 //A6 -data8 0xDF017BE0D4FE45D8, 0x0000BFF4 //A5 -data8 0xA8A0C6E2226DF3CD, 0x00003FF8 //A4 -// -// Polynomial coefficients for the tanh(x), 1.0 <= |x| < 2.0 -data8 0x8E89D2EBFDAA160B, 0x00003FE9 //A19 -data8 0xDD9226310A272046, 0x0000BFEC //A18 -data8 0xA038042D28B0D665, 0x00003FEF //A17 -data8 0x8C04796F03516306, 0x0000BFF1 //A16 -data8 0x9CD6A9CB4E90A2FD, 0x00003FF2 //A15 -data8 0xC8980E166F5A84FD, 0x0000BFF2 //A14 -data8 0x9ADFE65F56B7BCFD, 0x00003FED //A13 -data8 0x8B11FDFB5D0A7B96, 0x00003FF4 //A12 -data8 0x8209A125E829CBFA, 0x0000BFF5 //A11 -data8 0xCF38AAC17B85BD76, 0x00003FF1 //A10 -data8 0xD5C2E248D8AB99AB, 0x00003FF6 //A9 -data8 0xE12BE2785727F2D6, 0x0000BFF7 //A8 -data8 0x9FC9EF90F87BF1E2, 0x00003FF6 //A7 -data8 0x9B02FE0DAF42C08F, 0x00003FF9 //A6 -data8 0xBDACE06F531D9491, 0x0000BFFA //A5 -data8 0xE3048AD1DB2F648C, 0x00003FF9 //A4 -// -// Polynomial coefficients for the tanh(x), 2.0 <= |x| < 3.25 -data8 0x856EC3B0330A385A, 0x00003FEB //A19 -data8 0xC641D69DAE2D429C, 0x0000BFF2 //A18 -data8 0xC683EB0BE1343FFF, 0x00003FF5 //A17 -data8 0xC358954224E4E823, 0x0000BFF7 //A16 -data8 0xF813A8D6D396BC5F, 0x00003FF8 //A15 -data8 0xE0ECDFED078D37D6, 0x0000BFF9 //A14 -data8 0x950E4E619855E316, 0x00003FFA //A13 -data8 0x8453B8F93370FB58, 0x0000BFFA //A12 -data8 0xFDBA28430AEC95BA, 0x00003FF7 //A11 -data8 0x9371AAC1FDB1E664, 0x00003FFA //A10 -data8 0xAC972DA97782D88A, 0x0000BFFB //A9 -data8 0xE18F47B10B9CE1BC, 0x00003FFB //A8 -data8 0xAB7C81230BF13BC6, 0x0000BFFB //A7 -data8 0xA6CAAD4A3E31A7D5, 0x0000BFF8 //A6 -data8 0x9CABD76D1D5C3878, 0x00003FFC //A5 -data8 0x92906D077941CAA9, 0x0000BFFD //A4 -// -// Polynomial coefficients for the tanh(x), 4.0 <= |x| < 6.5 -data8 0x9232D19F71709AC9, 0x0000BFF5 //A19 -data8 0x819E31323F5DD3F8, 0x00003FF8 //A18 -data8 0xDA8E1CDB8D23DC29, 0x0000BFF9 //A17 -data8 0xE97C7CD8FC0486D8, 0x00003FFA //A16 -data8 0xB0C4AD234D88C9F2, 0x0000BFFB //A15 -data8 0xC5989BFB28FDE267, 0x00003FFB //A14 -data8 0x9B26520EC4EFEE8E, 0x0000BFFB //A13 -data8 0xC4B6F758AD21E574, 0x00003FF9 //A12 -data8 0xCC36E3FFA10D2CFF, 0x00003FFA //A11 -data8 0x8738696FB06A5CED, 0x0000BFFC //A10 -data8 0xD31981825BF39228, 0x00003FFC //A9 -data8 0x82C58FB9BEE43992, 0x0000BFFD //A8 -data8 0x88D5AAE49164B6F3, 0x00003FFD //A7 -data8 0xF4CA0B968AF2DDE2, 0x0000BFFC //A6 -data8 0xB99874B482BD17EE, 0x00003FFC //A5 -data8 0xE93FB2F99431DC1D, 0x0000BFFB //A4 -// -// Polynomial coefficients for the tanh(x), 8.0 <= |x| < 13.0 -data8 0xAAA9EB7EADA85CEC, 0x00003FF5 //A19 -data8 0x980C80EE05A6BE78, 0x0000BFF8 //A18 -data8 0x818DA9F5396390A5, 0x00003FFA //A17 -data8 0x8D8CC21E23D8A6A2, 0x0000BFFB //A16 -data8 0xE0EC19E55A886765, 0x00003FFB //A15 -data8 0x8C11197A7E6244C5, 0x0000BFFC //A14 -data8 0x901D2BF203C2F7F3, 0x00003FFC //A13 -data8 0xFEACAEE66EE803E5, 0x0000BFFB //A12 -data8 0xC684E4925E318C3F, 0x00003FFB //A11 -data8 0x8A9D8A970565F28D, 0x0000BFFB //A10 -data8 0xAE34C61DE5CEA4D4, 0x00003FFA //A9 -data8 0xC44C5714BD6208A0, 0x0000BFF9 //A8 -data8 0xC4612F7D6C8BDB79, 0x00003FF8 //A7 -data8 0xABD91DCE40D5EECB, 0x0000BFF7 //A6 -data8 0x80E375C1B847B72F, 0x00003FF6 //A5 -data8 0xA11C7DD978CF700A, 0x0000BFF4 //A4 -// -// Polynomial coefficients for the tanh(x), 16.0 <= |x| < 19.0625 -data8 0xE29D17C510F86F6B, 0x00003FF3 //A19 -data8 0x88FE52EB39A3A98C, 0x0000BFF5 //A18 -data8 0xA406547E50360693, 0x00003FF5 //A17 -data8 0x83E6260B71C6D7DE, 0x0000BFF5 //A16 -data8 0xA36AB5B0CBC97B85, 0x00003FF4 //A15 -data8 0xA94931E0B7BA6C14, 0x0000BFF3 //A14 -data8 0x9A4596DAF350AD63, 0x00003FF2 //A13 -data8 0xFE47643F375AECA5, 0x0000BFF0 //A12 -data8 0xBF8433C5ABEE63B1, 0x00003FEF //A11 -data8 0x83CEE05D7AE90A0A, 0x0000BFEE //A10 -data8 0xA4CC45480BCEB02D, 0x00003FEC //A9 -data8 0xB967CBDCBC16CB10, 0x0000BFEA //A8 -data8 0xB9681B214EDC098D, 0x00003FE8 //A7 -data8 0xA23B20D87B80DFA8, 0x0000BFE6 //A6 -data8 0xF358B2C46F10CBAF, 0x00003FE3 //A5 -data8 0x98176FD06229A385, 0x0000BFE1 //A4 -// -// Binary subranges -// Polynomial coefficients for the tanh(x), 3.25 <= |x| < 4.0 -data8 0xEF2EE841288F6706, 0x00003FE9 //A19 -data8 0xE65D5B74B85F82A6, 0x00003FEB //A18 -data8 0xE495FC21E42A79FF, 0x00003FEA //A17 -data8 0xF99B267A913CF3E5, 0x00003FEC //A16 -data8 0xFE3D700F4A0A0FDE, 0x0000BFEC //A15 -data8 0x8F91BB4EE4E4EA52, 0x00003FEE //A14 -data8 0xBCA9F41A5C6EF8BA, 0x0000BFEE //A13 -data8 0xF93E00884027A9CF, 0x00003FED //A12 -data8 0xC4D4036A61BABC2F, 0x00003FEF //A11 -data8 0x86CC2AD1AD47C7D5, 0x0000BFF2 //A10 -data8 0xD3065DEF4CE9AD32, 0x00003FF3 //A9 -data8 0x82C44125F568D54E, 0x0000BFF5 //A8 -data8 0x88D588729BAF14CA, 0x00003FF6 //A7 -data8 0xF4CA0661307243C7, 0x0000BFF6 //A6 -data8 0xB998746D57061F74, 0x00003FF7 //A5 -data8 0xE93FB2F482327C19, 0x0000BFF7 //A4 -// -// Polynomial coefficients for the tanh(x), 6.5 <= |x| < 8.0 -data8 0xEB189B71ADC40BE2, 0x00003FEA //A19 -data8 0xA60B46F9FF6DC2DF, 0x00003FEA //A18 -data8 0xBB061CDD9F368B9D, 0x00003FEC //A17 -data8 0x841E08BDF5429991, 0x0000BFEC //A16 -data8 0xDD33990B433F25BE, 0x00003FED //A15 -data8 0xBA5DE6B870F0A2BB, 0x0000BFEE //A14 -data8 0xA71D489AAA6DACF0, 0x00003FEF //A13 -data8 0x874CCB2B8F3FBC0E, 0x0000BFF0 //A12 -data8 0xCB1D2E9754EA534A, 0x00003FF0 //A11 -data8 0x8BA5ABB53BA6ABCF, 0x0000BFF1 //A10 -data8 0xAE91FD1C2391A32B, 0x00003FF1 //A9 -data8 0xC465A74B798E5761, 0x0000BFF1 //A8 -data8 0xC4666152397D15C1, 0x00003FF1 //A7 -data8 0xABD9E63CA575B950, 0x0000BFF1 //A6 -data8 0x80E38B18E8D0F460, 0x00003FF1 //A5 -data8 0xA11C80E20AAFDD3C, 0x0000BFF0 //A4 -// -// Polynomial coefficients for the tanh(x), 13.0 <= |x| < 16.0 -data8 0xBECD0AF7E22E5594, 0x00003FE9 //A19 -data8 0xE2834E2D68C1128C, 0x00003FEA //A18 -data8 0x97B117611B317379, 0x00003FEB //A17 -data8 0xEE91A0D39A772F6B, 0x00003FEA //A16 -data8 0x92F6EC377DCADA4F, 0x00003FEA //A15 -data8 0xD8FCCD6A3277FAB7, 0x00003FE8 //A14 -data8 0xC15AB9CB0C3DCFE0, 0x00003FE7 //A13 -data8 0xC3C659704A7147CD, 0x00003FE2 //A12 -data8 0xFA17F09D27C97912, 0x00003FE4 //A11 -data8 0xF664147182B94788, 0x0000BFE3 //A10 -data8 0xA6C89FA741464DA1, 0x00003FE3 //A9 -data8 0xB90FE464A825EFA8, 0x0000BFE2 //A8 -data8 0xB973AE0FD86EC024, 0x00003FE1 //A7 -data8 0xA23A087F96846951, 0x0000BFE0 //A6 -data8 0xF358D8A7FC012D5D, 0x00003FDE //A5 -data8 0x98176E2309B7C73A, 0x0000BFDD //A4 -// -// Coefficients ##16..19 ("tail" coefficient tables) -// Polynomial coefficients for the tanh(x), 0.25 <= |x| < 0.5 -data8 0x838F209ABB9BA7B3, 0x0000BFF7 //A3 -data8 0xEBC0AC78DA4FC500, 0x0000BFF8 //A2 -data8 0xF0A4D02960B60E69, 0x00003FFC //A1 -data8 0xFACBF534D0E42F8A, 0x00003FFC //A0 -// -// Polynomial coefficients for the tanh(x), 0.5 <= |x| < 1.0 -data8 0xC0ECBDC0A0D133A6, 0x0000BFF8 //A3 -data8 0xBA13A076BF8E812F, 0x0000BFFB //A2 -data8 0xC954A37D1A1CA070, 0x00003FFD //A1 -data8 0xEC9A9EBAB4579B29, 0x00003FFD //A0 -// -// Polynomial coefficients for the tanh(x), 1.0 <= |x| < 2.0 -data8 0xD42E9175A6EA1397, 0x00003FFB //A3 -data8 0xA3C361378A55CF56, 0x0000BFFD //A2 -data8 0xD706E07CC8622983, 0x00003FFD //A1 -data8 0xC2F7D5A8A79CA2AC, 0x00003FFE //A0 -// -// Polynomial coefficients for the tanh(x), 2.0 <= |x| < 3.25 -data8 0xAC7A7F8776817C7E, 0x00003FFD //A3 -data8 0x8B7CE95E69FCFE9A, 0x0000BFFD //A2 -data8 0x90B161317028D995, 0x00003FFC //A1 -data8 0xF6CA82F0DE1E9E9A, 0x00003FFE //A0 -// -// Polynomial coefficients for the tanh(x), 4.0 <= |x| < 6.5 -data8 0xE9E072407BC22DC6, 0x00003FFA //A3 -data8 0xAFA4A913D8E6BB4A, 0x0000BFF9 //A2 -data8 0xAFC2D6A885BAA875, 0x00003FF7 //A1 -data8 0xFFD40B84505A10B2, 0x00003FFE //A0 -// -// Polynomial coefficients for the tanh(x), 8.0 <= |x| < 13.0 -data8 0xA11C8A1FED168CD5, 0x00003FF2 //A3 -data8 0xF1AAD6B02063A5F5, 0x0000BFEF //A2 -data8 0xF1AADA46AD341C34, 0x00003FEC //A1 -data8 0xFFFFFC39548FC34B, 0x00003FFE //A0 -// -// Polynomial coefficients for the tanh(x), 16.0 <= |x| < 19.0625 -data8 0x98176FD1F0950C16, 0x00003FDE //A3 -data8 0xE42327BB09C8B2A5, 0x0000BFDA //A2 -data8 0xE42327BB0B154F13, 0x00003FD6 //A1 -data8 0xFFFFFFFFFFF8DEE7, 0x00003FFE //A0 -// -// Binary subranges -// Polynomial coefficients for the tanh(x), 3.25 <= |x| < 4.0 -data8 0xE9E072404329293B, 0x00003FF7 //A3 -data8 0xAFA4A913D798300B, 0x0000BFF7 //A2 -data8 0xAFC2D6A885B48567, 0x00003FF6 //A1 -data8 0xFFD40B84505A10B4, 0x00003FFE //A0 -// -// Polynomial coefficients for the tanh(x), 6.5 <= |x| < 8.0 -data8 0xA11C8A63815F7A28, 0x00003FEF //A3 -data8 0xF1AAD6B65B0EBF53, 0x0000BFED //A2 -data8 0xF1AADA46E799831F, 0x00003FEB //A1 -data8 0xFFFFFC39548FC348, 0x00003FFE //A0 -// -// Polynomial coefficients for the tanh(x), 13.0 <= |x| < 16.0 -data8 0x98176FE982140A59, 0x00003FDB //A3 -data8 0xE42327B9B0D7202F, 0x0000BFD8 //A2 -data8 0xE42327BB13076BD6, 0x00003FD5 //A1 -data8 0xFFFFFFFFFFF8DEE7, 0x00003FFE //A0 -// -// Polynomial coefficients for the tanh(x), 0.0 <= |x| < 0.25 -// ('tanh_near_zero' path) -data8 0xBF2BA5D26E479D0C //A9 -data8 0x3F4336D96F81EE26 //A8 -data8 0xBF8226E34AE197B0 //A5 -data8 0x3F9664F488148657 //A4 -data8 0xAAAAAAAAAAAAAA99, 0x0000BFFD //A1 -data8 0xBF57D91925BB5EE2 //A7 -data8 0x3F6D6D36C3D5B7A1 //A6 -data8 0xBFABA1BA1BA19D32 //A3 -data8 0x3FC1111111111108 //A2 -// -// 1.0 - 2^(-63) -// ('tanh_saturation' path) -data8 0xFFFFFFFFFFFFFFFF, 0x00003FFE -LOCAL_OBJECT_END(tanh_data) - -// CAUTION: The order of table coefficients shouldn't be changed! - - -.section .text -GLOBAL_LIBM_ENTRY(tanh) -{ .mfi - alloc r32 = ar.pfs, 0, 20, 0, 0 - fmerge.se fArgAbsNorm = f1, f8 // normalized x - adds rSignBit = 0x1, r0 // Bit for sign removing -} -{ .mfi - addl rDataPtr = @ltoff(tanh_data), gp // Data pointer - fma.s1 fTwo = f1, f1, f1 // 2.0 construct - addl rArgSgnd = 0xfff, r0 // mask for exponent -};; - -{ .mfi - getf.d rArg = f8 // x in GR - fclass.m p6,p0 = f8, 0xEF // Filter 0, denormals and specials - // 0xEF = @qnan|@snan|@pos|@neg|@zero|@unorm|@inf - shl rArgSgnd = rArgSgnd, 52 // mask for exponent -} -{ .mlx - ld8 rDataPtr = [rDataPtr] // Real data pointer - movl r1625Sgnd = 0xA000000000000 // 1.625 signd - // 1.625 significand used to filter values greater than 3.25, 6.5, 13.0 - // to enter binary subranges -};; - -{ .mfi - addl rBias = 0x3FD00, r0 // bias of 0.25 << 8 - fma.s1 fArgSqr = f8, f8, f0 // x^2 - shl rSignBit = rSignBit, 63 // mask for sign bit -} -{ .mlx - addl rMask = 0x7FF00, r0 // Mask for index bits - movl rTwo = 0x4000000000000000 // 2.0 -};; - -{ .mfi - andcm rArgSgnd = rArg, rArgSgnd // Remove exponent - nop.f 0 - shr.u rShiftedArg = rArg, 44 // Select only necessary bits of arg -} -{ .mfb - andcm rAbsArg = rArg, rSignBit // Remove sign - nop.f 0 -(p6) br.cond.spnt _tanh_spec // Branch to zero, denorm & specs -};; - -{ .mfi - and rShiftedArgMasked = rShiftedArg, rMask // bias of x << 8 - fmerge.s fArgAbs = f1, f8 // |x| - shr rShiftedAbsArg = rAbsArg, 44 // Select only necessary - // bits of absolute arg -} -{ .mfi - cmp.gt p8, p11 = rArgSgnd, r1625Sgnd // p8 = 1 if - // signd(x) > 1.625 - to filter values greater than 3.25, 6.5, 13.0 - nop.f 0 - nop.i 0 -};; - -{ .mfi - sub rIndex = rShiftedArgMasked, rBias // index << 8 - nop.f 0 - cmp.lt p10, p0 = rShiftedArgMasked, rBias // p10=1 if |x|<0.25 -} -{ .mfb -(p8) cmp.gt p8, p11 = rAbsArg, rTwo // If arg is greater than 2.0? - // (then we should use binary subranges) - nop.f 0 -(p10) br.cond.spnt tanh_near_zero // branch out if |x| < 0.25 -};; - -.pred.rel "mutex",p8,p11 -{ .mfi -(p8) add rIndex = 0x400, rIndex // Make pointer to binary - // subranges -(p11) fms.s1 fArgAbsNorm = fArgAbsNorm, f1, f1 // |x|/b - 1.0 - addl rSaturation = 0x40331, r0 // shifted bits of 19.0625 -} -{ .mfi - nop.m 0 -(p8) fms.s1 fArgAbsNorm = fArgAbsNorm, f1, fTwo // |x|/b - 2.0 - // this is only for binary subranges [3.25;4], [6.5;8], [13.0;16] - nop.i 0 -} -;; - -{ .mfi - add rCoeffAddr1 = rDataPtr, rIndex// coeff. ##0,2,..14 - nop.f 0 - nop.i 0 -};; - -{ .mfi - adds rCoeffAddr2 = 16, rCoeffAddr1 // Shifted pointer to coeffs - fmerge.s fSignumX = f8, f1 // signum(x) - nop.i 0 -} -{ .mfb - cmp.le p12, p0 = rSaturation, rShiftedAbsArg // |x|>=19.0625? - nop.f 0 -(p12) br.cond.spnt tanh_saturation // branch out if x |x| >= 19.0625 -};; - -{.mfi - ldfe fA19 = [rCoeffAddr1], 32 // Load A19 - nop.f 0 - nop.i 0 -} -{.mfi - ldfe fA18 = [rCoeffAddr2], 32 // Load A18 - nop.f 0 - adds rCoeffAddr3 = 0xA00, rDataPtr // Pointer to "tail" - // coefficients tables -};; - -{.mfi - ldfe fA17 = [rCoeffAddr1], 32 // Load A17 - nop.f 0 - nop.i 0 -} -{.mfi - ldfe fA16 = [rCoeffAddr2], 32 // Load A16 - nop.f 0 - nop.i 0 -};; - -{.mfi - ldfe fA15 = [rCoeffAddr1], 32 // Load A15 - fma.s1 fTSqr = fArgAbsNorm, fArgAbsNorm, f0 // x^2 - shr.u rIndex = rIndex, 2 // Index for "tail" tables -} -{.mfi - ldfe fA14 = [rCoeffAddr2], 32 // Load A14 - nop.f 0 - adds rCoeffAddr4 = 16, r0 // Shifter pointer - // to "tail" tables -};; - -{.mfi - ldfe fA13 = [rCoeffAddr1], 32 // Load A13 - nop.f 0 - add rCoeffAddr3 = rCoeffAddr3, rIndex // "tail" coeffs to load - // ##16..23 -} -{.mfi - ldfe fA12 = [rCoeffAddr2], 32 // Load A12 - nop.f 0 - cmp.lt p15, p14 = rArg, r0 // Arg positive (p14) - // or negative (p15)? -};; - -{.mfi - ldfe fA11 = [rCoeffAddr1], 32 // Load A11 - nop.f 0 - add rCoeffAddr4 = rCoeffAddr3, rCoeffAddr4 // shifted "tail" - // coeffs to load -} -{.mfi - ldfe fA10 = [rCoeffAddr2], 32 // Load A10 - nop.f 0 - nop.i 0 -};; - -{.mfi - ldfe fA9 = [rCoeffAddr1], 32 // Load A9 - nop.f 0 - nop.i 0 -} -{.mfi - ldfe fA8 = [rCoeffAddr2], 32 // Load A8 - nop.f 0 - nop.i 0 -};; - -{.mfi - ldfe fA7 = [rCoeffAddr1], 32 // Load A7 - nop.f 0 - nop.i 0 -} -{.mfi - ldfe fA6 = [rCoeffAddr2], 32 // Load A6 - nop.f 0 - nop.i 0 -};; - -{.mfi - ldfe fA5 = [rCoeffAddr1], 32 // Load A5 - fma.s1 fTDeg3 = fArgAbsNorm, fTSqr, f0 // x^3 - nop.i 0 -} -{.mfi - ldfe fA4 = [rCoeffAddr2], 32 // Load A4 - fma.s1 fTQuadr = fTSqr, fTSqr, f0 // x^4 - nop.i 0 -};; - -// Path #3 Polynomial Pol19(y) computation; y = fArgAbsNorm -{.mfi - ldfe fA3 = [rCoeffAddr3], 32 // Load A3 - fma.s1 fArgAbsNormSgn = fArgAbsNorm, fSignumX, f0 // sign(x)*x - nop.i 0 -} -{.mfi - ldfe fA2 = [rCoeffAddr4], 32 // Load A2 - nop.f 0 - nop.i 0 -};; - -{.mfi - ldfe fA1 = [rCoeffAddr3], 32 // Load A1 - fma.s1 fRes = fA19, fArgAbsNorm, fA18 // Polynomial - nop.i 0 -} -{.mfi - ldfe fA0 = [rCoeffAddr4], 32 // Load A0 - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA17 = fA17, fArgAbsNorm, fA16 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA15 = fA15, fArgAbsNorm, fA14 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fTDeg7 = fTDeg3, fTQuadr, f0 // Polynomial - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA13 = fA13, fArgAbsNorm, fA12 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA11 = fA11, fArgAbsNorm, fA10 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA9 = fA9, fArgAbsNorm, fA8 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTSqr, fA17 // Polynomial - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA7 = fA7, fArgAbsNorm, fA6 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA5 = fA5, fArgAbsNorm, f0 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA15 = fA15, fTSqr, fA13 // Polynomial - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA4 = fA4, fArgAbsNorm, fA3 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA2 = fA2, fArgAbsNorm, fA1 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA11 = fA11, fTSqr, fA9 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA7 = fA7, fTSqr, fA5 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTQuadr, fA15 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA4 = fA4, fTSqr, fA2 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTQuadr, fA11 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA4 = fA7, fTDeg3, fA4 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTDeg7, fA4 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - // result for negative argument -(p15) fms.d.s0 f8 = fRes, fArgAbsNormSgn, fA0 // Polynomial - nop.i 0 -} -{ .mfb - nop.m 0 - // result for positive argument -(p14) fma.d.s0 f8 = fRes, fArgAbsNormSgn, fA0 // Polynomial - br.ret.sptk b0 -};; - - -// |x| < 0.25 Path ///////////////////////////////////////////////////////////// -.align 32 -tanh_near_zero: -{ .mfi - adds rCoeffAddr1 = 0xC80, rDataPtr // address of A9 - fma.s0 fTSqr = fArgSqr, fArgSqr, f0 // x^4 - nop.i 0 -} -{ .mfi - adds rCoeffAddr2 = 0xCB0, rDataPtr // address of A7 - nop.f 0 - nop.i 0 -};; - -{ .mfi - ldfpd fA9, fA8 = [rCoeffAddr1], 16 // Load A9, A8 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfpd fA7, fA6 = [rCoeffAddr2], 16 // Load A7, A6 - nop.f 0 - nop.i 0 -};; - -{ .mfi - ldfpd fA5, fA4 = [rCoeffAddr1], 16 // Load A5, A4 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfpd fA3, fA2 = [rCoeffAddr2], 16 // Load A3, A2 - nop.f 0 - nop.i 0 -};; - -{ .mfi - ldfe fA1 = [rCoeffAddr1] // Load A1 - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fTQuadr = fTSqr, fTSqr, f0 // x^4 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes = fA9, fArgSqr, fA8 // Polynomial - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA7 = fA7, fArgSqr, fA6 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA3 = fA3, fArgSqr, fA2 // Polynomial - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA5 = fA5, fArgSqr, fA4 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA1 = fA1, fArgSqr, f0 // Polynomial - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fTQuadrSgn = fTQuadr, f8, f0 // x^4 * x - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTSqr, fA7 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA1 = fA3, fTSqr, fA1 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTSqr, fA5 // Polynomial - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes = fRes, fTQuadr, fA1 // Polynomial - nop.i 0 -};; - -{ .mfb - nop.m 0 - fma.d.s0 f8 = fRes, f8, f8 // x+x*Polynomial - br.ret.sptk b0 // Exit for |x| < 0.25 -};; - - - - - -// 19.0625 <= |x| < +inf Saturation path /////////////////////////////////////// -.align 32 -tanh_saturation: -{ .mfi - adds rDataPtr = 0xCD0, rDataPtr // address of A0 - nop.f 0 - nop.i 0 -};; - -{ .mfi - ldfe fA0 = [rDataPtr] // Load A0 = 2^(-63) - nop.f 0 - nop.i 0 -};; - -{ .mfb - nop.m 0 - fma.d.s0 f8 = fA0, fSignumX, f0 // sign(x)*(1.0-2^(-63)) - br.ret.sptk b0 // Exit for 19.0625 <=|x|< +inf -};; - - - - - -// 0, denormals and special IEEE numbers path ///////////////////////////////// -_tanh_spec: - -{ .mfi - cmp.lt p15, p14 = rArg, r0 // Is arg negative (p15) - // or positive p14) - fclass.m p6,p0 = f8, 0x23 // To filter infinities - // 0x23 = @pos|@neg|@inf - nop.i 0 -};; - -{ .mfi - nop.m 0 - fclass.m p7,p0 = f8, 0xC7 // To filter NaNs & Zeros - // 0xC7 = @pos|@neg|@zero|@qnan|@snan - nop.i 0 -};; - -{ .mfb - nop.m 0 -(p6) fmerge.s f8 = f8, f1 // +/-1 for INF args -(p6) br.ret.spnt b0 // exit for x = INF -};; - -{ .mfb - nop.m 0 -(p7) fma.d.s0 f8 = f8, f1, f8 // +/-0 for 0 args - // and NaNs for NaNs -(p7) br.ret.spnt b0 // exit for x = NaN or +/-0 -};; - -{ .mfi - nop.m 0 - fnorm.s0 f8 = f8 // Normalize arg - nop.i 0 -};; - -.pred.rel "mutex",p14,p15 -{ .mfi - nop.m 0 -(p14) fnma.d.s0 f8 = f8, f8, f8 // res = r-r^2 - nop.i 0 -} -{ .mfb - nop.m 0 -(p15) fma.d.s0 f8 = f8, f8, f8 // res = r+r^2 - br.ret.sptk b0 // 0, denormals, specials return -};; - -GLOBAL_LIBM_END(tanh) diff --git a/sysdeps/ia64/fpu/s_tanhf.S b/sysdeps/ia64/fpu/s_tanhf.S deleted file mode 100644 index 4749477b40..0000000000 --- a/sysdeps/ia64/fpu/s_tanhf.S +++ /dev/null @@ -1,581 +0,0 @@ -.file "tanhf.s" - - -// Copyright (c) 2001 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 05/30/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// float tanhf(float) -// -// Overview of operation -//============================================================== -// Background -// -// -// There are 9 paths: -// 1. x = +/-0.0 -// Return tanhf(x) = +/-0.0 -// -// 2. 0.0 < |x| < 0.3125 -// Return tanhf(x) = x + x^3*Pol3(x^2), -// where Pol3(x^2) = C3*x^6 + C2*x^4 + C1*x^2 + C0 -// -// 3. 0.3125 <= |x| < 8.0 -// Return tanhf(x) = sign(x)*PolD(x)*PolC(|x|) + sign(x)*PolA(|x|), -// where sign(x)*PolD(x) = sign(x)*(|x|^7 + D2*x^6 + D1*|x|^5 + D0*x^4), -// PolC(|x|) = B0*x^4 + C3*|x|^3 + C2*|x|^2 + C1*|x| + C0, -// PolA(|x|) = A3|x|^3 + A2*x^2 + A1*|x| + A0 -// -// Actually range 0.3125<=|x|< 8.0 is split to 5 subranges. -// For each subrange there is particular set of coefficients. -// Below is the list of subranges: -// 3.1 0.3125 <= |x| < 0.5 -// 3.2 0.5 <= |x| < 1.0 -// 3.3 1.0 <= |x| < 2.0 -// 3.4 2.0 <= |x| < 4.0 -// 3.5 4.0 <= |x| < 8.0 -// -// 4. 8.0 <= |x| < 9.125 -// Return tanhf(x) = sign(x)*(A3|x|^3 + A2*x^2 + A1*|x| + A0) -// -// 5. 9.125 <= |x| < +INF -// Return tanhf(x) = sign(x)*(1.0d - 2^(-52)) -// -// 6. |x| = INF -// Return tanhf(x) = sign(x) * 1.0 -// -// 7. x = [S,Q]NaN -// Return tanhf(x) = QNaN -// -// 8. x is positive denormal -// Return tanhf(x) = x - x^2 -// -// 9. x is negative denormal -// Return tanhf(x) = x + x^2 -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8, input -// f32 -> f59 - -// General registers used: -// r32 -> r46, r2, r3 - -// Predicate registers used: -// p0, p6 -> p15 - -// p6 to filter out case when x = [Q,S]NaN or +/-0 -// p7 to filter out case when x = denormal -// p8 set if |x| >= 0.3125, used also to process denormal input -// p9 to filter out case when |x| = inf -// p10 to filter out case when |x| < 0.3125 -// p11 to filter out case when 0.3125 <= |x| < 9.125 -// p12 to filter out case when |x| >= 9.125 -// p13 to filter out case when 8.0 <= |x| < 9.125 -// p14 set to 1 for positive x -// p15 set to 1 for negative x - -// Assembly macros -//============================================================== -rDataPtr = r2 -rDataPtr1 = r3 - -rBias = r33 -rCoeffAddr3 = r34 -rNearSaturation = r35 -rCoeffAddr1 = r36 -rCoeffAddr2 = r37 -rOffset2 = r38 -rBias2 = r39 -rMask = r40 -rArg = r41 -rBound = r42 -rSignBit = r43 -rAbsArg = r44 -rDataPtr2 = r45 -rSaturation = r46 - -//============================================================== -fA0 = f32 -fA1 = f33 -fA2 = f34 -fA3 = f35 -fC0 = f36 -fC1 = f37 -fC2 = f38 -fC3 = f39 -fD0 = f40 -fD1 = f41 -fD2 = f42 -fB0 = f43 -fArgSqr = f44 -fAbsArg = f45 -fSignumX = f46 -fArg4 = f47 -fArg4Sgn = f48 -fArg3 = f49 -fArg3Sgn = f50 -fArg7Sgn = f51 -fArg6Sgn = f52 -fPolC = f53 -fPolCTmp = f54 -fPolA = f55 -fPolATmp = f56 -fPolD = f57 -fPolDTmp = f58 -fArgSqrSgn = f59 - -// Data tables -//============================================================== - -RODATA - -.align 16 - -LOCAL_OBJECT_START(tanhf_data) -// Polynomial coefficients for the tanh(x), 0.3125 <= |x| < 0.5 -data8 0x3F9BEEDFDD177D7B // C0 -data8 0x3F970D10C7F32458 // C1 -data8 0x3F766D6B051F3A38 // C2 -data8 0xBF732F2001B23402 // C3 -data8 0xBF854BE1CE1ED499 // D0 -data8 0x4013C944F3999A16 // D1 -data8 0xC01106C6975222C0 // D2 -data8 0x3F783D5ACCF9EBE8 // B0 -// Polynomial coefficients for the tanh(x), 0.5 <= |x| < 1.0 -data8 0xBF5D631440786869 // C0 -data8 0xBF575D79A0D52069 // C1 -data8 0xBF7E2237B7EFC705 // C2 -data8 0x3F6A7ACBC273041F // C3 -data8 0xC040E32EA52D91EB // D0 -data8 0x403D19463E5DB4D7 // D1 -data8 0xC02216F61F759F39 // D2 -data8 0xBF55B4EA0B844BE7 // B0 -// Polynomial coefficients for the tanh(x), 1.0 <= |x| < 2.0 -data8 0x3F8637DBE5B3E690 // C0 -data8 0xBF7F7FEC158C07F5 // C1 -data8 0x3F711C586706838A // C2 -data8 0xBF50EF7EF605554E // C3 -data8 0xC054D45448354E25 // D0 -data8 0x404ADFEEA282E730 // D1 -data8 0xC028AEE456D59549 // D2 -data8 0x3F25232D1BED59A8 // B0 -// Polynomial coefficients for the tanh(x), 2.0 <= |x| < 4.0 -data8 0xBF52602285F2D06C // C0 -data8 0x3F2E57C298FFE1E0 // C1 -data8 0xBF15ED575DB3C811 // C2 -data8 0x3EE428878A08525C // C3 -data8 0xC0895A26849039C1 // D0 -data8 0x406E3C60BBFBB575 // D1 -data8 0xC03A06F62867C75A // D2 -data8 0xBEB114C70F1C723E // B0 -// Polynomial coefficients for the tanh(x), 4.0 <= |x| < 8.0 -data8 0x3EF4B22BD17039A3 // C0 -data8 0xBEB704ADC040C57F // C1 -data8 0x3E937A98288AFE1A // C2 -data8 0xBE4F33B2C9FFE7E7 // C3 -data8 0xC0BE48CFADE2431E // D0 -data8 0x4090E74249760FDD // D1 -data8 0xC04B6F537FCF2F1E // D2 -data8 0x3E0DCD879C91ADEA // B0 -// Polynomial coefficients for the tanh(x), -0.3125 < x < 0.3125 -data8 0xBFD555551E8245B7 // A0 -data8 0x3FC110E63F52E689 // A1 -data8 0xBFAB8CD6A5B7BAFA // A2 -data8 0x3F945D467FCEB553 // A3 -// Polynomial coefficients for the tanh(x), 0.3125 <= |x| < 0.5 -data8 0xBE3DCC92FCAECBB6 // A0 -data8 0x3FF0000043B7D267 // A1 -data8 0xBED18BF28ACFC4B1 // A2 -data8 0xBFD554A56F82837E // A3 -// Polynomial coefficients for the tanh(x), 0.5 <= |x| < 1.0 -data8 0x3EFD6054758539F9 // A0 -data8 0x3FEFFBFC77198EBE // A1 -data8 0x3F700327CA98D237 // A2 -data8 0xBFD68955F5BB2FA1 // A3 -// Polynomial coefficients for the tanh(x), 1.0 <= |x| < 2.0 -data8 0xBF71A53F229DF01B // A0 -data8 0x3FF0AECFD730DE50 // A1 -data8 0xBFC882F88E5DF3BA // A2 -data8 0x3FC6EDF212CA2A8D // A3 -// Polynomial coefficients for the tanh(x), 2.0 <= |x| < 4.0 -data8 0xBFAF0B712E9EDA47 // A0 -data8 0x3FF1C208080BEA64 // A1 -data8 0x3FC3D29B20C8946E // A2 -data8 0xBFF04514ED900A6A // A3 -// Polynomial coefficients for the tanh(x), 4.0 <= |x| < 8.0 -data8 0xBFB1DEA49A831CBC // A0 -data8 0x3FFA729FC7085674 // A1 -data8 0xBFF2F44D923A8FA4 // A2 -data8 0x3FE092FC5712227E // A3 -// Polynomial coefficients for the tanh(x), 8.0 <= |x| <= 9.125 -data8 0x3FEFFF5769EE3041 // A0 -data8 0x3EFBBF148D850891 // A1 -data8 0xBEC86BCEF0F5C2FE // A2 -data8 0x3E7CBA4F3A885A5C // A3 -// -data8 0x3FEFFFFFFFFFFFFF // 1.0 - epsilon -LOCAL_OBJECT_END(tanhf_data) - -.section .text -GLOBAL_LIBM_ENTRY(tanhf) - -{ .mfi - alloc r32 = ar.pfs, 1, 14, 0, 0 - fmerge.s fAbsArg = f1, f8 // |x| - addl rMask = 0x806, r0 -} -{ .mfi - addl rDataPtr = @ltoff(tanhf_data), gp - fma.s1 fArgSqr = f8, f8, f0 // x^2 - adds rSignBit = 0x1, r0 -} -;; - -{ .mfi - getf.s rArg = f8 // x in GR - fclass.m p7,p0 = f8, 0x0b // is x denormal ? - // sign bit and 2 most bits in significand - shl rMask = rMask, 20 -} -{ .mfi - ld8 rDataPtr = [rDataPtr] - nop.f 0 - adds rBias2 = 0x1F4, r0 -} -;; - -{ .mfi - adds rNearSaturation = 0x14, r0 - fmerge.s fSignumX = f8, f1 // signum(x) - shl rSignBit = rSignBit, 31 // mask for sign bit -} -{ .mfi - adds rBound = 0x3EA, r0 - nop.f 0 - addl rSaturation = 0x4112, r0 -} -;; - -{ .mfi - andcm rOffset2 = rArg, rMask - fclass.m p6,p0 = f8, 0xc7 // is x [S,Q]NaN or +/-0 ? - shl rBound = rBound, 20 // 1.0f in GR -} -{ .mfb - andcm rAbsArg = rArg, rSignBit // |x| in GR - nop.f 0 -(p7) br.cond.spnt tanhf_denormal // branch out if x is denormal -} -;; - -{ .mfi - adds rCoeffAddr2 = 352, rDataPtr - fclass.m p9,p0 = f8, 0x23 // is x +/- inf? - shr rOffset2 = rOffset2, 21 -} -{ .mfi - cmp.lt p10, p8 = rAbsArg, rBound // |x| < 0.3125? - nop.f 0 - adds rCoeffAddr3 = 16, rDataPtr -} -;; - -{ .mfi -(p8) sub rBias = rOffset2, rBias2 - fma.s1 fArg4 = fArgSqr, fArgSqr, f0 // x^4 - shl rSaturation = rSaturation, 16 -} -{ .mfb -(p10) adds rBias = 0x14, r0 -(p6) fma.s.s0 f8 = f8,f1,f8 // NaN or +/-0 -(p6) br.ret.spnt b0 // exit for x = NaN or +/-0 -} -;; - -{ .mfi - shladd rCoeffAddr1 = rBias, 4, rDataPtr - fma.s1 fArg3Sgn = fArgSqr, f8, f0 // sign(x)*|x|^3 - // is |x| < 9.125? - cmp.lt p11, p12 = rAbsArg, rSaturation -} -{ .mfi - shladd rCoeffAddr3 = rBias, 4, rCoeffAddr3 - fma.s1 fArg3 = fArgSqr, fAbsArg, f0 // |x|^3 - shladd rCoeffAddr2 = rBias, 3, rCoeffAddr2 -} -;; - -{ .mfi -(p11) ldfpd fC0, fC1 = [rCoeffAddr1] -(p9) fmerge.s f8 = f8,f1 // +/- inf -(p12) adds rDataPtr = 544, rDataPtr -} -{ .mfb -(p11) ldfpd fC2, fC3 = [rCoeffAddr3], 16 - nop.f 0 -(p9) br.ret.spnt b0 // exit for x = +/- inf -} -;; - -{ .mfi -(p11) ldfpd fA0, fA1 = [rCoeffAddr2], 16 - nop.f 0 -(p8) cmp.eq.unc p13, p0 = rBias, rNearSaturation -} -{ .mfi - add rCoeffAddr1 = 48, rCoeffAddr1 - nop.f 0 - nop.i 0 -} -;; - -{ .mfi -(p11) ldfpd fD0, fD1 = [rCoeffAddr3] - nop.f 0 - nop.i 0 -} -{ .mfb -(p11) ldfpd fD2, fB0 = [rCoeffAddr1] - // sign(x)*|x|^2 - fma.s1 fArgSqrSgn = fArgSqr, fSignumX, f0 -(p10) br.cond.spnt tanhf_near_zero -} -;; - -{ .mfi -(p11) ldfpd fA2, fA3 = [rCoeffAddr2], 16 - fcmp.lt.s1 p15, p14 = f8,f0 - nop.i 0 -} -{ .mfb -(p12) ldfd fA0 = [rDataPtr] - fma.s1 fArg4Sgn = fArg4, fSignumX, f0 // sign(x)*|x|^4 -(p12) br.cond.spnt tanhf_saturation -} -;; -{ .mfi - nop.m 0 - fma.s1 fArg7Sgn = fArg4, fArg3Sgn, f0 // sign(x)*|x|^7 - nop.i 0 -} -{ .mfb - nop.m 0 - fma.s1 fArg6Sgn = fArg3, fArg3Sgn, f0 // sign(x)*|x|^6 -(p13) br.cond.spnt tanhf_close_to_saturation -} -;; - -{ .mfi - nop.m 0 - fma.s1 fPolC = fC3, fAbsArg, fC2 // C3*|x| + C2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPolCTmp = fC1, fAbsArg, fC0 // C1*|x| + C0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fPolA = fA1, fAbsArg, fA0 // A1*|x| + A0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fPolD = fD1, fAbsArg, fD0 // D1*|x| + D0 - nop.i 0 -} -{ .mfi - nop.m 0 - // sign(x)*(|x|^7 + D2*x^6) - fma.s1 fPolDTmp = fArg6Sgn, fD2, fArg7Sgn - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fPolATmp = fA3, fAbsArg, fA2 // A3*|x| + A2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fB0 = fB0, fArg4, f0 // B0*x^4 - nop.i 0 -};; - -{ .mfi - nop.m 0 - // C3*|x|^3 + C2*x^2 + C1*|x| + C0 - fma.s1 fPolC = fPolC, fArgSqr, fPolCTmp - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // PolD = sign(x)*(|x|^7 + D2*x^6 + D1*|x|^5 + D0*x^4) - fma.d.s1 fPolD = fPolD, fArg4Sgn, fPolDTmp - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // PolA = A3|x|^3 + A2*x^2 + A1*|x| + A0 - fma.d.s1 fPolA = fPolATmp, fArgSqr, fPolA - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - // PolC = B0*x^4 + C3*|x|^3 + C2*|x|^2 + C1*|x| + C0 - fma.d.s1 fPolC = fPolC, f1, fB0 - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p14) fma.s.s0 f8 = fPolC, fPolD, fPolA // for positive x - nop.i 0 -} -{ .mfb - nop.m 0 -(p15) fms.s.s0 f8 = fPolC, fPolD, fPolA // for negative x - br.ret.sptk b0 // Exit for 0.3125 <=|x|< 8.0 -};; - - -// Here if |x| < 0.3125 -tanhf_near_zero: -{ .mfi - nop.m 0 - fma.s1 fPolC = fC3, fArgSqr, fC2 // C3*x^2 + C2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPolCTmp = fC1, fArgSqr, fC0 // C1*x^2 + C0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fPolC = fPolC, fArg4, fPolCTmp // C3*x^6 + C2*x^4 + C1*x^2 + C0 - nop.i 0 -};; - -{ .mfb - nop.m 0 - // x + x^3*(C3*x^6 + C2*x^4 + C1*x^2 + C0) - fma.s.s0 f8 = fPolC, fArg3Sgn, f8 - br.ret.sptk b0 // Exit for |x| < 0.3125 -};; - -// Here if 9.125 <= |x| < +inf -tanhf_saturation: -{ .mfb - nop.m 0 - fma.s.s0 f8 = fA0, fSignumX, f0 // sign(x)*(1.0d - 2^(-52)) - // Exit for 9.125 <= |x| < +inf - br.ret.sptk b0 // Exit for 9.125 <=|x|< +inf -} -;; - -// Here if 8.0 <= |x| < 9.125 -tanhf_close_to_saturation: -{ .mfi - nop.m 0 - fma.s1 fPolATmp = fA1, fAbsArg, fA0 // A1*|x| + A0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fPolA = fA3, fAbsArg, fA2 // A3*|x| + A2 - nop.i 0 -} -;; - -.pred.rel "mutex", p14, p15 -{ .mfi - nop.m 0 - // for positive x -(p14) fma.s.s0 f8 = fPolA, fArgSqr, fPolATmp - nop.i 0 -} -{ .mfb - nop.m 0 - // for negative x -(p15) fms.s.s0 f8 = fPolA, fArgSqrSgn, fPolATmp - br.ret.sptk b0 // Exit for 8.0 <=|x|< 9.125 -};; - -// Here if x is single precision denormal -tanhf_denormal: -{ .mfi - nop.m 0 - fclass.m p7,p8 = f8, 0x0a // is x -denormal ? - nop.i 0 -} -;; - -{ .mfi - nop.m 0 -(p7) fma.s.s0 f8 = f8,f8,f8 // -denormal - nop.i 0 -} -{ .mfb - nop.m 0 -(p8) fnma.s.s0 f8 = f8,f8,f8 // +denormal - br.ret.sptk b0 // Exit for denormal -} -;; - -GLOBAL_LIBM_END(tanhf) diff --git a/sysdeps/ia64/fpu/s_tanhl.S b/sysdeps/ia64/fpu/s_tanhl.S deleted file mode 100644 index 2ebd1e780e..0000000000 --- a/sysdeps/ia64/fpu/s_tanhl.S +++ /dev/null @@ -1,1344 +0,0 @@ -.file "tanhl.s" - - -// Copyright (c) 2001 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 11/29/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 08/14/02 Changed mli templates to mlx -// 02/10/03 Reordered header: .section, .global, .proc, .align -// -// API -//============================================================== -// long double tanhl(long double) -// -// Overview of operation -//============================================================== -// -// Algorithm description -// --------------------- -// -// There are 4 paths: -// -// 1. Special path: x = 0, Inf, NaNs, denormal -// Return tanhl(x) = +/-0.0 for zeros -// Return tanhl(x) = QNaN for NaNs -// Return tanhl(x) = sign(x)*1.0 for Inf -// Return tanhl(x) = x + x^2 for - denormals -// Return tanhl(x) = x - x^2 for + denormals -// -// 2. [0;1/8] path: 0.0 < |x| < 1/8 -// Return tanhl(x) = x + x^3*A3 + ... + x^15*A15 -// -// 3. Main path: 1/8 <= |x| < 22.8 -// For several ranges of 1/8 <= |x| < 22.8 -// Return tanhl(x) = sign(x)*((A0H+A0L) + y*(A1H+A1L) + y^2*(A2H+A2L) + -// + y^3*A3 + y^4*A4 + ... + y^25*A25 ) -// where y = (|x|/a) - b -// -// For each range there is particular set of coefficients. -// Below is the list of ranges: -// 1/8 <= |x| < 1/4 a = 0.125, b = 1.5 -// 1/4 <= |x| < 1/2 a = 0.25, b = 1.5 -// 1/2 <= |x| < 1.0 a = 0.5, b = 1.5 -// 1.0 <= |x| < 2.0 a = 1.0, b = 1.5 -// 2.0 <= |x| < 3.25 a = 2.0, b = 1.5 -// 3.25 <= |x| < 4.0 a = 2.0, b = 2.0 -// 4.0 <= |x| < 6.5 a = 4.0, b = 1.5 -// 6.5 <= |x| < 8.0 a = 4.0, b = 2.0 -// 8.0 <= |x| < 13.0 a = 8.0, b = 1.5 -// 13.0 <= |x| < 16.0 a = 8.0, b = 2.0 -// 16.0 <= |x| < 22.8 a = 16.0, b = 1.5 -// ( [3.25;4.0], [6.5;8.0], [13.9;16.0] subranges separated -// for monotonicity issues resolve ) -// -// 4. Saturation path: 22.8 <= |x| < +INF -// Return tanhl(x) = sign(x)*(1.0 - tiny_value) -// (tiny_value ~ 1e-1233) -// -// Implementation notes -// -------------------- -// -// 1. Special path: x = 0, INF, NaNa, denormals -// -// This branch is cut off by one fclass operation. -// Then zeros+nans, infinities and denormals processed separately. -// For denormals we use simple fma operaton x+x*x (- for +denorms) -// -// 2. [0;1/8] path: 0.0 < |x| < 1/8 -// -// Here we use simple polynimial computations, where last step -// is performed as x + x^3*A3+... -// The rest of polynomial is factorized using binary tree technique. -// -// 3. Main path: 1/8 <= |x| < 22.8 -// -// Multiprecision have to be performed only for first few -// polynomial iterations (up to 3-rd x degree) -// Here we use the same parallelisation way as above: -// Split whole polynomial to first, "multiprecision" part, and second, -// so called "tail", native precision part. -// -// 1) Multiprecision part: -// [v1=(A0H+A0L)+y*(A1H+A1L)] + [v2=y^2*((A2H+A2L)+y*A3)] -// v1 and v2 terms calculated in parallel -// -// 2) Tail part: -// v3 = x^4 * ( A4 + x*A5 + ... + x^21*A25 ) -// v3 is splitted to 2 even parts (10 coefficient in each one). -// These 2 parts are also factorized using binary tree technique. -// -// So Multiprecision and Tail parts cost is almost the same -// and we have both results ready before final summation. -// -// Some tricks were applied to maintain symmetry at direct -// rounding modes (to +/-inf). We had to set result sign -// not at the last operation but much more earlier and at -// several places. -// -// 4. Saturation path: 22.8 <= |x| < +INF -// -// We use formula sign(x)*(1.0 - tiny_value) instead of simple sign(x)*1.0 -// just to meet IEEE requirements for different rounding modes in this case. -// -// Registers used -//============================================================== -// Floating Point registers used: -// f8 - input & output -// f32 -> f92 - -// General registers used: -// r2, r3, r32 -> r52 - -// Predicate registers used: -// p0, p6 -> p11, p14, p15 - -// p6 - arg is zero, denormal or special IEEE -// p7 - arg is in [16;32] binary interval -// p8 - arg is in one of subranges -// [3.25;4.0], [6.5;8.0], [13.9;16.0] -// p9 - arg < 1/8 -// p10 - arg is NOT in one of subranges -// [3.25;4.0], [6.5;8.0], [13.9;16.0] -// p11 - arg in saturation domain -// p14 - arg is positive -// p15 - arg is negative - -// Assembly macros -//============================================================== -rDataPtr = r2 -rTailDataPtr = r3 - -rBias = r33 -rSignBit = r34 -rInterval = r35 - -rArgExp = r36 -rArgSig = r37 -r3p25Offset = r38 -r2to4 = r39 -r1p25 = r40 -rOffset = r41 -r1p5 = r42 -rSaturation = r43 -r1625Sign = r44 -rTiny = r45 -rAddr1 = r46 -rAddr2 = r47 -rTailAddr1 = r48 -rTailAddr2 = r49 -rTailOffset = r50 -rTailAddOffset = r51 -rShiftedDataPtr = r52 - -//============================================================== -fA0H = f32 -fA0L = f33 -fA1H = f34 -fA1L = f35 -fA2H = f36 -fA2L = f37 -fA3 = f38 -fA4 = f39 -fA5 = f40 -fA6 = f41 -fA7 = f42 -fA8 = f43 -fA9 = f44 -fA10 = f45 -fA11 = f46 -fA12 = f47 -fA13 = f48 -fA14 = f49 -fA15 = f50 -fA16 = f51 -fA17 = f52 -fA18 = f53 -fA19 = f54 -fA20 = f55 -fA21 = f56 -fA22 = f57 -fA23 = f58 -fA24 = f59 -fA25 = f60 - -fArgSqr = f61 -fArgCube = f62 -fArgFour = f63 -fArgEight = f64 - -fArgAbsNorm = f65 -fArgAbsNorm2 = f66 -fArgAbsNorm2L = f67 -fArgAbsNorm3 = f68 -fArgAbsNorm4 = f69 -fArgAbsNorm11 = f70 - -fRes = f71 -fResH = f72 -fResL = f73 -fRes1H = f74 -fRes1L = f75 -fRes1Hd = f76 -fRes2H = f77 -fRes2L = f78 -fRes3H = f79 -fRes3L = f80 -fRes4 = f81 - -fTT = f82 -fTH = f83 -fTL = f84 -fTT2 = f85 -fTH2 = f86 -fTL2 = f87 - -f1p5 = f88 -f2p0 = f89 -fTiny = f90 -fSignumX = f91 -fArgAbsNorm4X = f92 - -// Data tables -//============================================================== -RODATA - -.align 16 -LOCAL_OBJECT_START(tanhl_data) - -////////// Main tables /////////// -_0p125_to_0p25_data: // exp = 2^-3 -// Polynomial coefficients for the tanh(x), 1/8 <= |x| < 1/4 -data8 0x93D27D6AE7E835F8, 0x0000BFF4 //A3 = -5.6389704216278164626050408239e-04 -data8 0xBF66E8668A78A8BC //A2H = -2.7963640930198357253955165902e-03 -data8 0xBBD5384EFD0E7A54 //A2L = -1.7974001252014762983581666453e-20 -data8 0x3FBEE69E31DB6156 //A1H = 1.2070645062647619716322822114e-01 -data8 0x3C43A0B4E24A3DCA //A1L = 2.1280460108882061756490131241e-18 -data8 0x3FC7B8FF903BF776 //A0H = 1.8533319990813951205765874874e-01 -data8 0x3C593F1A61986FD4 //A0L = 5.4744612262799573374268254539e-18 -data8 0xDB9E6735560AAE5A, 0x0000BFA3 //A25 = -3.4649731131719154051239475238e-28 -data8 0xF0DDE953E4327704, 0x00003FA4 //A24 = 7.6004173864565644629900702857e-28 -data8 0x8532AED11DEC5612, 0x00003FAB //A23 = 5.3798235684551098715428515761e-26 -data8 0xAEF72A34D88B0038, 0x0000BFAD //A22 = -2.8267199091484508912273222600e-25 -data8 0x9645EF1DCB759DDD, 0x0000BFB2 //A21 = -7.7689413112830095709522203109e-24 -data8 0xA5D12364E121F70F, 0x00003FB5 //A20 = 6.8580281614531622113161030550e-23 -data8 0x9CF166EA815AC705, 0x00003FB9 //A19 = 1.0385615003184753213024737634e-21 -data8 0x852B1D0252498752, 0x0000BFBD //A18 = -1.4099753997949827217635356478e-20 -data8 0x9270F5716D25EC9F, 0x0000BFC0 //A17 = -1.2404055949090177751123473821e-19 -data8 0xC216A9C4EEBDDDCA, 0x00003FC4 //A16 = 2.6303900460415782677749729120e-18 -data8 0xDCE944D89FF592F2, 0x00003FC6 //A15 = 1.1975620514752377092265425941e-17 -data8 0x83C8DDF213711381, 0x0000BFCC //A14 = -4.5721980583985311263109531319e-16 -LOCAL_OBJECT_END(tanhl_data) - -LOCAL_OBJECT_START(_0p25_to_0p5_data) -// Polynomial coefficients for the tanh(x), 1/4 <= |x| < 1/2 -data8 0xB6E27B747C47C8AD, 0x0000BFF6 //A3 = -2.7905990032063258105302045572e-03 -data8 0xBF93FD54E226F8F7 //A2H = -1.9521070769536099515084615064e-02 -data8 0xBC491BC884F6F18A //A2L = -2.7222721075104525371410300625e-18 -data8 0x3FCBE3FBB015A591 //A1H = 2.1789499376181400980279079249e-01 -data8 0x3C76AFC2D1AE35F7 //A1L = 1.9677459707672596091076696742e-17 -data8 0x3FD6EF53DE8C8FAF //A0H = 3.5835739835078589399230963863e-01 -data8 0x3C8E2A1C14355F9D //A0L = 5.2327050592919416045278607775e-17 -data8 0xF56D363AAE3BAD53, 0x00003FBB //A25 = 6.4963882412697389947564301120e-21 -data8 0xAD6348526CEEB897, 0x0000BFBD //A24 = -1.8358149767147407353343152624e-20 -data8 0x85D96A988565FD65, 0x0000BFC1 //A23 = -2.2674950494950919052759556703e-19 -data8 0xD52CAF6B1E4D9717, 0x00003FC3 //A22 = 1.4445269502644677106995571101e-18 -data8 0xBD7E1BE5CBEF7A01, 0x00003FC5 //A21 = 5.1362075721080004718090799595e-18 -data8 0xAE84A9B12ADD6948, 0x0000BFC9 //A20 = -7.5685210830925426342786733068e-17 -data8 0xEAC2D5FCF80E250C, 0x00003FC6 //A19 = 1.2726423522879522181100392135e-17 -data8 0xE0D2A8AC8C2EDB95, 0x00003FCE //A18 = 3.1200443098733419749016380203e-15 -data8 0xB22F0AB7B417F78E, 0x0000BFD0 //A17 = -9.8911854977385933809488291835e-15 -data8 0xE25A627BAEFFA7A4, 0x0000BFD3 //A16 = -1.0052095388666003876301743498e-13 -data8 0xC90F32EC4A17F908, 0x00003FD6 //A15 = 7.1430637679768183097897337145e-13 -data8 0x905F6F124AF956B1, 0x00003FD8 //A14 = 2.0516607231389483452611375485e-12 -LOCAL_OBJECT_END(_0p25_to_0p5_data) - -LOCAL_OBJECT_START(_0p5_to_1_data) -// Polynomial coefficients for the tanh(x), 1/2 <= |x| < 1 -data8 0xAB402BE491EE72A7, 0x00003FF7 //A3 = 5.2261556931080934657023772945e-03 -data8 0xBFB8403D3DDA87BE //A2H = -9.4730212784752659826992271519e-02 -data8 0xBC6FF7BC2AB71A8B //A2L = -1.3863786398568460929625760740e-17 -data8 0x3FD3173B1EFA6EF4 //A1H = 2.9829290414066567116435635398e-01 -data8 0x3C881E4DCABDE840 //A1L = 4.1838710466827119847963316219e-17 -data8 0x3FE45323E552F228 //A0H = 6.3514895238728730220145735075e-01 -data8 0x3C739D5832BF7BCF //A0L = 1.7012977006567066423682445459e-17 -data8 0xF153980BECD8AE12, 0x00003FD0 //A25 = 1.3396313991261493342597057700e-14 -data8 0xEC9ACCD245368129, 0x0000BFD3 //A24 = -1.0507358886349528807350792383e-13 -data8 0x8AE6498CA36D2D1A, 0x00003FD4 //A23 = 1.2336759149738309660361813001e-13 -data8 0x8DF02FBF5AC70E64, 0x00003FD7 //A22 = 1.0085317723615282268326194551e-12 -data8 0x9E15C7125DA204EE, 0x0000BFD9 //A21 = -4.4930478919612724261941857560e-12 -data8 0xA62C6F39BDDCEC1C, 0x00003FD7 //A20 = 1.1807342457875095150035780314e-12 -data8 0xDFD8D65D30F80F52, 0x00003FDC //A19 = 5.0896919887121116317817665996e-11 -data8 0xB795AFFD458F743E, 0x0000BFDE //A18 = -1.6696932710534097241291327756e-10 -data8 0xFEF30234CB01EC89, 0x0000BFDD //A17 = -1.1593749714588103589483091370e-10 -data8 0xA2F638356E13761E, 0x00003FE2 //A16 = 2.3714062288761887457674853605e-09 -data8 0xC429CC0D031E4FD5, 0x0000BFE3 //A15 = -5.7091025466377379046489586383e-09 -data8 0xC78363FF929EFF62, 0x0000BFE4 //A14 = -1.1613199289622686725595739572e-08 -LOCAL_OBJECT_END(_0p5_to_1_data) - -LOCAL_OBJECT_START(_1_to_2_data) -// Polynomial coefficients for the tanh(x), 1 <= |x| < 2.0 -data8 0xB3D8FB48A548D99A, 0x00003FFB //A3 = 8.7816203264683800892441646129e-02 -data8 0xBFC4EFBD8FB38E3B //A2H = -1.6356629864377389416141284073e-01 -data8 0xBC77687FD8087B23 //A2L = -2.0303377679446772162287121190e-17 -data8 0x3FC72165282C6F72 //A1H = 1.8070663892364852154415189034e-01 -data8 0x3C64E01F7A76D777 //A1L = 9.0532964466719018524360408402e-18 -data8 0x3FECF6F9786DF577 //A0H = 9.0514825364486639625027919465e-01 -data8 0x3C8834EDCE71A65B //A0L = 4.1992023813070331863928976191e-17 -data8 0xC3EEEB3EFA688094, 0x00003FE2 //A25 = 2.8512044383274095705865793485e-09 -data8 0x88461973672AEB12, 0x0000BFE1 //A24 = -9.9152258079470849685057375343e-10 -data8 0xFC2AF9950DC5027E, 0x0000BFE4 //A23 = -1.4678101918123116001692289670e-08 -data8 0x9C80CA742F89B7B5, 0x00003FE6 //A22 = 3.6438714992394138274843759814e-08 -data8 0xA0B3D7FAA606260A, 0x0000BFE6 //A21 = -3.7416469848124568887944709492e-08 -data8 0xDA5858432FBD9D9D, 0x0000BFE6 //A20 = -5.0837429421503142141842414978e-08 -data8 0xB0244D1E1AE9C1B0, 0x00003FE9 //A19 = 3.2808967255272595749004827841e-07 -data8 0xC8D3109ACF740738, 0x0000BFEA //A18 = -7.4812945767507614821609020680e-07 -data8 0xBB0F3440EEA55BBF, 0x00003FEA //A17 = 6.9685053481643125932497676583e-07 -data8 0xC13A8B08D8576C19, 0x00003FEB //A16 = 1.4396658837712390333960587173e-06 -data8 0xFF3A1163CC5522A1, 0x0000BFED //A15 = -7.6063522055104010298762276148e-06 -data8 0x8672AF27EB0823B7, 0x00003FEF //A14 = 1.6027448793338500004496520337e-05 -LOCAL_OBJECT_END(_1_to_2_data) - -LOCAL_OBJECT_START(_2_to_3p25_data) -// Polynomial coefficients for the tanh(x), 2 <= |x| < 3.25 -data8 0xD45657BEC559E366, 0x00003FFA //A3 = 5.1840155367548909799883161889e-02 -data8 0xBFA41B109CA6AB81 //A2H = -3.9268988726084870510835145296e-02 -data8 0xBC2C3D708A4E56C5 //A2L = -7.6544669252238280132415018518e-19 -data8 0x3F9434A517BBC5F4 //A1H = 1.9732074330880380874653212686e-02 -data8 0x3C3ED62DD9585229 //A1L = 1.6716574468135097509707871438e-18 -data8 0x3FEFD77D111A0AFF //A0H = 9.9505475368673035330147058630e-01 -data8 0x3C9C415E151C6CA5 //A0L = 9.8030409604070051319822874013e-17 -data8 0xB1596391D4534D52, 0x00003FEC //A25 = 2.6427086526487251988631279067e-06 -data8 0xC4DC44E243D1AF5F, 0x00003FEF //A24 = 2.3467591534149209236830008333e-05 -data8 0xAED5786023982BB8, 0x00003FF0 //A23 = 4.1683642395739762658623742687e-05 -data8 0xCF39926C9FBC6A10, 0x00003FF0 //A22 = 4.9406263949321793291856681624e-05 -data8 0xA255A72359928142, 0x00003FF0 //A21 = 3.8703580278108400672236161973e-05 -data8 0xA2E573B9FC332C0D, 0x00003FED //A20 = 4.8546879618263642155709302480e-06 -data8 0x82C7BD01830ACA93, 0x00003FF0 //A19 = 3.1180436075031301077175550468e-05 -data8 0xB38AF4C76E96444B, 0x0000BFF0 //A18 = -4.2806338675404452784440167120e-05 -data8 0xEC08FF0FB194464C, 0x00003FF0 //A17 = 5.6275163156181928637744511210e-05 -data8 0xB850825D9E235135, 0x0000BFF0 //A16 = -4.3943998628289568813056822585e-05 -data8 0xF98436E838763687, 0x0000BFEF //A15 = -2.9744680263523220185672219686e-05 -data8 0xE1851A2D00737A5D, 0x00003FF2 //A14 = 2.1507256570895163202182573369e-04 -LOCAL_OBJECT_END(_2_to_3p25_data) - -LOCAL_OBJECT_START(_4_to_6p5_data) -// Polynomial coefficients for the tanh(x), 4 <= |x| < 6.5 -data8 0x896FDBD321A0BE58, 0x00003FF5 //A3 = 1.0485606995331904734870550114e-03 -data8 0xBF39C522B95A37D6 //A2H = -3.9321992640217512306882730044e-04 -data8 0xBBA9B3EC39A45338 //A2L = -2.7213922673282819034134988241e-21 -data8 0x3F19C5377A48B5AD //A1H = 9.8306189621330793766869338146e-05 -data8 0x3BCAFCB1D08A891C //A1L = 1.1429476443042275163117526657e-20 -data8 0x3FEFFFE63ABE253B //A0H = 9.9998771165079547440512897083e-01 -data8 0x3C9BB74C4EE0D16F //A0L = 9.6159219890436197391279544561e-17 -data8 0x8D86121D469AFA7E, 0x0000BFEF //A25 = -1.6870941388985743600323604423e-05 -data8 0x9D3656A36593C5C4, 0x00003FEF //A24 = 1.8741161763079973068909254398e-05 -data8 0xDCD772D5BF9ADB96, 0x00003FF0 //A23 = 5.2652739523018349983563695656e-05 -data8 0xFF79ADCF0DCBCC2D, 0x00003FF1 //A22 = 1.2182012003034659966028035977e-04 -data8 0x84D24E394DEFD0D2, 0x00003FF1 //A21 = 6.3334229517535065590380468696e-05 -data8 0xA66B56BFD2782544, 0x00003FF1 //A20 = 7.9354902476954571736114945842e-05 -data8 0xFB15771FBF3155FE, 0x0000BFEE //A19 = -1.4965763624796745134798717707e-05 -data8 0xC774790126BE54C3, 0x00003FEF //A18 = 2.3776885435831770523136610539e-05 -data8 0x825A13DACB8C68CD, 0x00003FEF //A17 = 1.5539153272890695426189818556e-05 -data8 0xCFF96E6810AACE27, 0x0000BFF1 //A16 = -9.9169893703251156059893890295e-05 -data8 0x8A85D2061B865024, 0x00003FF3 //A15 = 2.6421115104625621420758344535e-04 -data8 0x922EC6F3CFE0496E, 0x0000BFF4 //A14 = -5.5764283474946207558456581668e-04 -LOCAL_OBJECT_END(_4_to_6p5_data) - -LOCAL_OBJECT_START(_8_to_13_data) -// Polynomial coefficients for the tanh(x), 8 <= |x| < 13 -data8 0xDD6050A898303460, 0x00003FE6 //A3 = 5.1543170295688189081352133793e-08 -data8 0xBE44C1078FDBADC0 //A2H = -9.6643444318955652627581125180e-09 -data8 0xBAF95FCAA6DBBA6F //A2L = -1.3118146684038113473094275420e-24 -data8 0x3E14C1078FE26748 //A1H = 1.2080430540780827633746315479e-09 -data8 0x3A88168082F37D95 //A1L = 9.7290246966246404028418245094e-27 -data8 0x3FEFFFFFFFF59F7C //A0H = 9.9999999992449728480892190419e-01 -data8 0x3C7C068EBC5C2EEB //A0L = 2.4308346546749583521003998922e-17 -data8 0x9DC155C77A6C46E5, 0x00003FF2 //A25 = 1.5044709695520252096006763473e-04 -data8 0xF2F9E09CA47F46E9, 0x00003FF3 //A24 = 4.6344010077547944693833282056e-04 -data8 0xCBFD67E704734BC8, 0x00003FF4 //A23 = 7.7815958662026429864083620142e-04 -data8 0xC18DC821CD67E621, 0x00003FF4 //A22 = 7.3834928521190855055818897104e-04 -data8 0x8AF72BCAB05A296E, 0x00003FF4 //A21 = 5.3011135848666430331904214879e-04 -data8 0xC2E73BE9B9AB4007, 0x00003FF2 //A20 = 1.8587423129049905806822275188e-04 -data8 0xE7E8C2058E2FF9F7, 0x00003FF1 //A19 = 1.1058292891321512917337425414e-04 -data8 0xC46309F52E429F97, 0x0000BFF0 //A18 = -4.6822278664829811025251866877e-05 -data8 0x81966C1E007E9BEB, 0x00003FF1 //A17 = 6.1792176836716291200611553354e-05 -data8 0x8CEDC4BEFCAB9A7E, 0x0000BFF1 //A16 = -6.7200080564674449915571760779e-05 -data8 0x8B64E9FA53210018, 0x00003FF1 //A15 = 6.6468331917938095774361868182e-05 -data8 0x82DEDAA539A3A3F1, 0x0000BFF1 //A14 = -6.2403928644276709411156885292e-05 -LOCAL_OBJECT_END(_8_to_13_data) - -LOCAL_OBJECT_START(_16_to_22p8_data) -// Polynomial coefficients for the tanh(x), 16 <= |x| < 22.88 -data8 0x992C00F33DDE804D, 0x00003FCE //A3 = 2.1256869805798788337547274131e-15 -data8 0x3C8D42EA28102760 //A2H = 5.0760412270332007485198379096e-17 -data8 0x391A747B43B072DD //A2L = 1.2737621993898125881520341053e-33 -data8 0x3C309BC5C3CB4D5F //A1H = 9.0034785192019775952205276560e-19 -data8 0x38A8EF3B5C9DCE71 //A1L = 9.3793162715476168397242934494e-36 -data8 0x3FF0000000000000 //A0H = 1.0000000000000000000000000000e+00 -data8 0x3BACC66AFD5CA22A //A0L = 3.0466790472070565954180861749e-21 -data8 0xF020FB351C2F37CB, 0x00003FF1 //A25 = 1.1450235038836625246604146870e-04 -data8 0xBE80596C51302A7B, 0x00003FF4 //A24 = 7.2670503421185030764546828414e-04 -data8 0x91343CF8577E0131, 0x00003FF6 //A23 = 2.2156380512949603402001207105e-03 -data8 0x8D029A8679641286, 0x00003FF7 //A22 = 4.3032888906494613055765544559e-03 -data8 0xC3713F64D8DC4BAB, 0x00003FF7 //A21 = 5.9644279041951657632420721490e-03 -data8 0xCD678C455A5D06C2, 0x00003FF7 //A20 = 6.2684473911812928601693994403e-03 -data8 0xA9E1C825BDCEEBCC, 0x00003FF7 //A19 = 5.1843859941826642445235686826e-03 -data8 0xE29C919AD93F6EB9, 0x00003FF6 //A18 = 3.4578185539872939928152204329e-03 -data8 0xF7E615A75994A607, 0x00003FF5 //A17 = 1.8913175041916131006881986311e-03 -data8 0xE102EFE0F7F2B2AD, 0x00003FF4 //A16 = 8.5835064987089641065525269712e-04 -data8 0xAAD62946DEE96996, 0x00003FF3 //A15 = 3.2584489313998677644253007210e-04 -data8 0xDA2470DE110B293E, 0x00003FF1 //A14 = 1.0401837693241806604296821650e-04 -LOCAL_OBJECT_END(_16_to_22p8_data) - -LOCAL_OBJECT_START(_3p25_to_4_data) -// Polynomial coefficients for the tanh(x), 3.25 <= |x| < 4 -data8 0xE9E07240432926E6, 0x00003FF7 //A3 = 7.1373517862636557382403555215e-03 -data8 0xBF75F495227AF306 //A2H = -5.3602052282115727338540622782e-03 -data8 0xBBBE92D355A6B716 //A2L = -6.4741983326810209847018826624e-21 -data8 0x3F65F85AD510B690 //A1H = 2.6819013660517934671823070403e-03 -data8 0x3C159A0B73E6EC01 //A1L = 2.9275813076637328121849573333e-19 -data8 0x3FEFFA81708A0B42 //A0H = 9.9932929973906703402519724477e-01 -data8 0x3C66857246C19DC6 //A0L = 9.7670460995685717424398031188e-18 -data8 0xE6B6B8365B1E4D6C, 0x00003FE3 //A25 = 6.7146538162212081470554423396e-09 -data8 0xE0453CEEF483A510, 0x00003FE2 //A24 = 3.2635647369924061614015292015e-09 -data8 0x9C7D83B56E92CF1A, 0x00003FE5 //A23 = 1.8217867585545497089756353348e-08 -data8 0xA94635C48ABA9EB4, 0x0000BFE4 //A22 = -9.8530586070049930796756799547e-09 -data8 0xB1B0C14443067646, 0x00003FE5 //A21 = 2.0685890807654992387562340307e-08 -data8 0x9C6E549781E293C3, 0x00003FDE //A20 = 1.4227314592865135171341122138e-10 -data8 0xB0CBFCE7C80F57A7, 0x0000BFE7 //A19 = -8.2327438416004542109809245219e-08 -data8 0xB151AB3876E896E1, 0x00003FE9 //A18 = 3.3028241036175815328309577940e-07 -data8 0xFCF3A5C1A5CB7EEE, 0x0000BFEA //A17 = -9.4231869277542043001280640966e-07 -data8 0x96A9016C7C95BEDA, 0x00003FEC //A16 = 2.2450115975007100522962781833e-06 -data8 0x9B9B0A3901DEC05B, 0x0000BFED //A15 = -4.6374089937147736266514566049e-06 -data8 0x8987DF26A6789CCF, 0x00003FEE //A14 = 8.1974714257536543772040700977e-06 -LOCAL_OBJECT_END(_3p25_to_4_data) - -LOCAL_OBJECT_START(_6p5_to_8_data) -// Polynomial coefficients for the tanh(x), 6.5 <= |x| < 8.0 -data8 0xA11C8A63815E5657, 0x00003FEF //A3 = 1.9205985861286093001394561449e-05 -data8 0xBEDE355AD6CB61D8 //A2H = -7.2022479400070228499307345427e-06 -data8 0xBB8E6B50B8468A63 //A2L = -8.0518953122203408718779840543e-22 -data8 0x3EBE355B48DCF330 //A1H = 1.8005623902549165889479948488e-06 -data8 0x3B5837550FFA98DA //A1L = 8.0124491698609178046195694087e-23 -data8 0x3FEFFFFF872A91F8 //A0H = 9.9999977492967584424832239165e-01 -data8 0x3C8A43B839B4EB63 //A0L = 4.5561696441306660142461355317e-17 -data8 0xB5BC1948966B8826, 0x0000BFE6 //A25 = -4.2313421330480692560677276010e-08 -data8 0x91D0BE367389BDFC, 0x0000BFE8 //A24 = -1.3580117599617083801153887619e-07 -data8 0xFFD950AF282AB36C, 0x0000BFE8 //A23 = -2.3827784451962439125197203287e-07 -data8 0x959B1770EBB8903A, 0x0000BFE9 //A22 = -2.7866256690165347051403663794e-07 -data8 0xCC78060D1C0CFF3C, 0x0000BFE8 //A21 = -1.9042644867126442102188429523e-07 -data8 0xF8919BAF2E87F31D, 0x0000BFE8 //A20 = -2.3149771783868910586746973299e-07 -data8 0xC5B6AC942A3F2440, 0x00003FE8 //A19 = 1.8413511183396213757149263639e-07 -data8 0xABF1A4703056450A, 0x0000BFEA //A18 = -6.4054099983863829656292958643e-07 -data8 0xBB543D8BDB670453, 0x00003FEB //A17 = 1.3957102903892251890348444989e-06 -data8 0xC9D6F37700C1D092, 0x0000BFEC //A16 = -3.0076451968978522605262647414e-06 -data8 0xCA6EF4BB64E49EC8, 0x00003FED //A15 = 6.0329860989478473738709576062e-06 -data8 0xBE25D0FD069D0A93, 0x0000BFEE //A14 = -1.1333687314965721384777951065e-05 -LOCAL_OBJECT_END(_6p5_to_8_data) - -LOCAL_OBJECT_START(_13_to_16_data) -// Polynomial coefficients for the tanh(x), 13 <= |x| < 16 -data8 0x98176FD2075BDBD5, 0x00003FDB //A3 = 1.7290807363028159200235264756e-11 -data8 0xBD8C8464F76162D1 //A2H = -3.2420263805679445515400340441e-12 -data8 0xBA2D56B508E0F1FD //A2L = -1.8515322669984580704502445180e-28 -data8 0x3D5C8464F761639C //A1H = 4.0525329757100331782338488690e-13 -data8 0x3A0A09D9E328E620 //A1L = 4.1081479300866418212862258651e-29 -data8 0x3FEFFFFFFFFFFF1B //A0H = 9.9999999999997457589273608392e-01 -data8 0x3C9B9B089E9BFD89 //A0L = 9.5776165728054091471814161399e-17 -data8 0xC5395B9EC765BDB7, 0x00003FE6 //A25 = 4.5919803498257974411526879804e-08 -data8 0x9A0F1FCB1DC24C3A, 0x00003FE8 //A24 = 1.4347869798460288751020493795e-07 -data8 0x8AA5C3459FAD0B28, 0x00003FE9 //A23 = 2.5825111356333853968900510087e-07 -data8 0x9578B747988CFF9D, 0x00003FE9 //A22 = 2.7841245127068220034870119246e-07 -data8 0x810DF1A589D9CAF1, 0x00003FE9 //A21 = 2.4038267971021370956311255310e-07 -data8 0x8A00D77B9416EB75, 0x00003FE8 //A20 = 1.2852557749068320312899366352e-07 -data8 0xB2436C4A1849C498, 0x00003FE7 //A19 = 8.3010350873515703893886683374e-08 -data8 0xEA6405B18356600B, 0x00003FE3 //A18 = 6.8216675390299296071261114202e-09 -data8 0xF7606C022194B7E8, 0x00003FE5 //A17 = 2.8798432098264655723769995993e-08 -data8 0xAF4B0C453FCAF34E, 0x0000BFE5 //A16 = -2.0406809167824936143455638336e-08 -data8 0xC324C1F10D5FA7CC, 0x00003FE5 //A15 = 2.2717703170390130238356558599e-08 -data8 0xB34A2E3A4D3B9C31, 0x0000BFE5 //A14 = -2.0872076027950789618606920471e-08 -LOCAL_OBJECT_END(_13_to_16_data) - - -//////// "Tail" tables ////////// -LOCAL_OBJECT_START(_0p125_to_0p25_data_tail) -// Polynomial coefficients for the erf(x), 1/8 <= |x| < 1/4 -data8 0x9D7D206E97ADC83A, 0x0000BFCC //A13 = -5.4639895428711257047470806445e-16 -data8 0xA8972B666A845810, 0x00003FD3 //A12 = 7.4869224589947988668562043110e-14 -data8 0x9A5B31511C9F4698, 0x0000BFD4 //A11 = -1.3709586467430093373657009487e-13 -data8 0xCBB8047BCB274982, 0x0000BFDA //A10 = -1.1580074124926108509393610532e-11 -data8 0xF95EB849E5F9247C, 0x00003FDC //A9 = 5.6700173336564916962945623180e-11 -data8 0xE7893404C6A53386, 0x00003FE1 //A8 = 1.6846457582993065168777704528e-09 -data8 0xF2E5C7E2B5F55ECC, 0x0000BFE4 //A7 = -1.4138500046802141367543484859e-08 -data8 0xF43906FF53A002C0, 0x0000BFE8 //A6 = -2.2745017243678613107034288816e-07 -data8 0xC6175D5E47D1D259, 0x00003FEC //A5 = 2.9517899220726077077586632607e-06 -data8 0xE7C2AE92CB36769B, 0x00003FEF //A4 = 2.7628001723157068127646694830e-05 -LOCAL_OBJECT_END(_0p125_to_0p25_data_tail) - -LOCAL_OBJECT_START(_0p25_to_0p5_data_tail) -// Polynomial coefficients for the tanh(x), 1/4 <= |x| < 1/2 -data8 0x9E2972C008B9965E, 0x0000BFDC //A13 = -3.5961854154738002253192260213e-11 -data8 0xC3EABA3D219BEA8A, 0x00003FDB //A12 = 2.2273173303628274478819473067e-11 -data8 0xC50FB68D960D5CD9, 0x00003FE1 //A11 = 1.4338102430978399800743148719e-09 -data8 0xB3BB92499EF2D583, 0x0000BFE3 //A10 = -5.2309100551458044083112632491e-09 -data8 0xBD915BE632F1D04E, 0x0000BFE6 //A9 = -4.4137194873936112573773943707e-08 -data8 0xBC48C813FA819141, 0x00003FE9 //A8 = 3.5070684356359066908197915734e-07 -data8 0xD3E34EA031AC611B, 0x00003FEA //A7 = 7.8934400708919584259192272835e-07 -data8 0x8EAC489D859541CD, 0x0000BFEF //A6 = -1.7007944944124693133572815137e-05 -data8 0x98D4D7E5D1508B8A, 0x00003FEF //A5 = 1.8218924920302265989878708948e-05 -data8 0xAC262F3F8CF49C02, 0x00003FF4 //A4 = 6.5669692402266433496312492412e-04 -LOCAL_OBJECT_END(_0p25_to_0p5_data_tail) - -LOCAL_OBJECT_START(_0p5_to_1_data_tail) -// Polynomial coefficients for the tanh(x), 1/2 <= |x| < 1 -data8 0xDF67FB36FFA2A538, 0x00003FE7 //A13 = 1.0403160796697495720021114635e-07 -data8 0xB7FB80FB5AFA63A4, 0x0000BFE8 //A12 = -1.7134699677764282023124981753e-07 -data8 0xC87625A0BA7D6C5F, 0x0000BFEA //A11 = -7.4677732458471897291461679095e-07 -data8 0x90DA375DD9AF6D79, 0x00003FED //A10 = 4.3169381418023765618186668159e-06 -data8 0x82DFB03317B17316, 0x0000BFED //A9 = -3.9003426534601562552753368105e-06 -data8 0xAA582FD4F3438BB4, 0x0000BFF0 //A8 = -4.0613288845040776435400454867e-05 -data8 0xB1532D8CF763B21C, 0x00003FF2 //A7 = 1.6911021594787399557528570601e-04 -data8 0x82E12AEF7CAB76C6, 0x0000BFEF //A6 = -1.5602059530458172761585925044e-05 -data8 0x83256E3D0FBA5C93, 0x0000BFF6 //A5 = -2.0011324059500451791903108104e-03 -data8 0xCC4AB2EC0965499B, 0x00003FF7 //A4 = 6.2344907419841579664122448353e-03 -LOCAL_OBJECT_END(_0p5_to_1_data_tail) - -LOCAL_OBJECT_START(_1_to_2_data_tail) -// Polynomial coefficients for the tanh(x), 1 <= |x| < 2.0 -data8 0xCCAEE174EAC17F78, 0x0000BFEE //A13 = -1.2200065117856038355953618829e-05 -data8 0xA39DD0981D1A2776, 0x0000BFF0 //A12 = -3.9009204899026604074167603200e-05 -data8 0xB7104FA27FAF80D0, 0x00003FF2 //A11 = 1.7458316338540792661905876072e-04 -data8 0xB219A7274436A734, 0x0000BFF3 //A10 = -3.3969918595931391572998415468e-04 -data8 0xCCD9D03C0C73CECF, 0x00003FF2 //A9 = 1.9536097875337884986025498958e-04 -data8 0x85321EA40CFEEBEE, 0x00003FF5 //A8 = 1.0162031558369402750607778300e-03 -data8 0x81F272C08C308220, 0x0000BFF7 //A7 = -3.9656696618251138315464862909e-03 -data8 0xE8761C6BDEA9ED87, 0x00003FF7 //A6 = 7.0941580558970243020090656343e-03 -data8 0xAE4E9F3691F66877, 0x0000BFF6 //A5 = -2.6597155288710984120834711909e-03 -data8 0xCC8286B331BD8AAA, 0x0000BFF9 //A4 = -2.4964583478826523250880337777e-02 -LOCAL_OBJECT_END(_1_to_2_data_tail) - -LOCAL_OBJECT_START(_2_to_3p25_data_tail) -// Polynomial coefficients for the tanh(x), 2 <= |x| < 3.25 -data8 0x92E1711A3BD6408B, 0x0000BFF4 //A13 = -5.6030514548041036913731470443e-04 -data8 0x8B9BD885FF3E98C5, 0x00003FF5 //A12 = 1.0651304064581604055612602669e-03 -data8 0xD041356C7FA26A22, 0x0000BFF5 //A11 = -1.5888574328066952147023520244e-03 -data8 0xDFA210BE9BE6B7FD, 0x00003FF5 //A10 = 1.7061849060196387827639060629e-03 -data8 0x8ECC3606808028E9, 0x0000BFF4 //A9 = -5.4472999329435778312080340471e-04 -data8 0xD5C053B8EEBD10C8, 0x0000BFF6 //A8 = -3.2615856552479930645151033322e-03 -data8 0xB7BFD63AC5051539, 0x00003FF8 //A7 = 1.1215171059191957498023766643e-02 -data8 0xC367C59D7FA3ADA2, 0x0000BFF9 //A6 = -2.3853193251842394834616848995e-02 -data8 0x9FC9FB890BB053CF, 0x00003FFA //A5 = 3.9010984954739386625695104667e-02 -data8 0xD01D077B42E7ED76, 0x0000BFFA //A4 = -5.0808934425896607486919526567e-02 -LOCAL_OBJECT_END(_2_to_3p25_data_tail) - -LOCAL_OBJECT_START(_4_to_6p5_data_tail) -// Polynomial coefficients for the tanh(x), 4 <= |x| < 6.5 -data8 0x870CCE8C76C52C7E, 0x00003FF5 //A13 = 1.0303499350193060915603525934e-03 -data8 0xE1431E54AD2A738B, 0x0000BFF5 //A12 = -1.7186140560972621669872002486e-03 -data8 0xAB20056533E28734, 0x00003FF6 //A11 = 2.6111615345168277554841545330e-03 -data8 0xECCB91D64718B9BD, 0x0000BFF6 //A10 = -3.6132079169671860943878776041e-03 -data8 0x94771DA3B8C2EB4F, 0x00003FF7 //A9 = 4.5308012699419563988381317896e-03 -data8 0xA7497377E4946F2C, 0x0000BFF7 //A8 = -5.1051915941441437592654444804e-03 -data8 0xA76B2D6FCA088AE9, 0x00003FF7 //A7 = 5.1092120989582196669504468168e-03 -data8 0x928C8961F33C9560, 0x0000BFF7 //A6 = -4.4723196805537430568162704711e-03 -data8 0xDBDDDF6CDE9AB9BE, 0x00003FF6 //A5 = 3.3548994514326736175581084349e-03 -data8 0x896E211733AD9D40, 0x0000BFF6 //A4 = -2.0970183170010094667442967500e-03 -LOCAL_OBJECT_END(_4_to_6p5_data_tail) - -LOCAL_OBJECT_START(_8_to_13_data_tail) -// Polynomial coefficients for the tanh(x), 8 <= |x| < 13 -data8 0xE50C3476BED020AA, 0x00003FF0 //A13 = 5.4609221347524272615754239857e-05 -data8 0xBA16F5F4EDC0EABC, 0x0000BFF0 //A12 = -4.4367239594986428539386662937e-05 -data8 0x8B916C2F002C3D91, 0x00003FF0 //A11 = 3.3275617838067362533536610680e-05 -data8 0xBFE8031097CB4442, 0x0000BFEF //A10 = -2.2877013297722792747267224605e-05 -data8 0xEFE1FFD106B2DA41, 0x00003FEE //A9 = 1.4298129659899553350478452989e-05 -data8 0x86EF1FF403A6622E, 0x0000BFEE //A8 = -8.0426979849841642112688693288e-06 -data8 0x86EF200FD047306B, 0x00003FED //A7 = 4.0213490418736097707257704218e-06 -data8 0xEC22782377882553, 0x0000BFEB //A6 = -1.7593402092805559754997565942e-06 -data8 0xB119DA1DB7C47773, 0x00003FEA //A5 = 6.5975257917246601211360847253e-07 -data8 0xDD6050A7761D67BB, 0x0000BFE8 //A4 = -2.0617268111985310661707082242e-07 -LOCAL_OBJECT_END(_8_to_13_data_tail) - -LOCAL_OBJECT_START(_16_to_22p8_data_tail) -// Polynomial coefficients for the tanh(x), 16 <= |x| < 22.88 -data8 0xEAF4AF87336E81B1, 0x00003FEF //A13 = 2.8008914392791730186582989654e-05 -data8 0xD5B309EA768E2711, 0x00003FED //A12 = 6.3687375204024238267961143128e-06 -data8 0xA4048CA537113538, 0x00003FEB //A11 = 1.2220276227448617951538196845e-06 -data8 0xD3EC78BB3425377D, 0x00003FE8 //A10 = 1.9736934193679794194181457250e-07 -data8 0xE5763CD37440266E, 0x00003FE5 //A9 = 2.6712876934440631473215182284e-08 -data8 0xCECA765EEB4A265F, 0x00003FE2 //A8 = 3.0092031912460315516888139627e-09 -data8 0x99ABF588DF81A52E, 0x00003FDF //A7 = 2.7952722177649984066847682907e-10 -data8 0xB9C78918294A4685, 0x00003FDB //A6 = 2.1120676552098603524020495036e-11 -data8 0xB3A3C42AD539D50F, 0x00003FD7 //A5 = 1.2764169243389521270291967366e-12 -data8 0x86BC347939478174, 0x00003FD3 //A4 = 5.9834437707863962671883176163e-14 -LOCAL_OBJECT_END(_16_to_22p8_data_tail) - -LOCAL_OBJECT_START(_3p25_to_4_data_tail) -// Polynomial coefficients for the tanh(x), 3.25 <= |x| < 4 -data8 0xBE9A2BE19F21BA1C, 0x0000BFEE //A13 = -1.1360778336288065244475976873e-05 -data8 0xF84910F515BDB014, 0x00003FED //A12 = 7.3994819819577018481862729782e-06 -data8 0xC4C84FB788AA4007, 0x00003FEF //A11 = 2.3458298013663976251972482656e-05 -data8 0x86CC6243C170E5ED, 0x0000BFF2 //A10 = -1.2855374755847770638424932233e-04 -data8 0xD3065AC539ABABFF, 0x00003FF3 //A9 = 4.0249790677367806832685138089e-04 -data8 0x82C4413795EC381B, 0x0000BFF5 //A8 = -9.9767013652382759950854031514e-04 -data8 0x88D588720888899A, 0x00003FF6 //A7 = 2.0879228705174076794011525274e-03 -data8 0xF4CA066137741469, 0x0000BFF6 //A6 = -3.7351861548964870836350490741e-03 -data8 0xB998746D56E81737, 0x00003FF7 //A5 = 5.6639259807333999973200378964e-03 -data8 0xE93FB2F48233275B, 0x0000BFF7 //A4 = -7.1181892208343798194003322900e-03 -LOCAL_OBJECT_END(_3p25_to_4_data_tail) - -LOCAL_OBJECT_START(_6p5_to_8_data_tail) -// Polynomial coefficients for the tanh(x), 6.5 <= |x| < 8.0 -data8 0xA6881D7D21774BFD, 0x00003FEF //A13 = 1.9852125640303530752913966680e-05 -data8 0x875E983AA042E605, 0x0000BFF0 //A12 = -3.2274606306629334402383651599e-05 -data8 0xCB19E01E94FC133C, 0x00003FF0 //A11 = 4.8423069963831314927026982707e-05 -data8 0x8BA5E8D9E72D56B2, 0x0000BFF1 //A10 = -6.6589395655200734237190902534e-05 -data8 0xAE91F647ED4E46B2, 0x00003FF1 //A9 = 8.3241541003842930001632190258e-05 -data8 0xC465A7E0B22F884E, 0x0000BFF1 //A8 = -9.3649431639051891449916386619e-05 -data8 0xC4666148AA01A4D7, 0x00003FF1 //A7 = 9.3650780646160216748407869111e-05 -data8 0xABD9E63D181B0C6C, 0x0000BFF1 //A6 = -8.1945023256769295802996591839e-05 -data8 0x80E38B18E509387A, 0x00003FF1 //A5 = 6.1458988764532931141264026311e-05 -data8 0xA11C80E20ADA5A64, 0x0000BFF0 //A4 = -3.8411937140983728563216440713e-05 -LOCAL_OBJECT_END(_6p5_to_8_data_tail) - -LOCAL_OBJECT_START(_13_to_16_data_tail) -// Polynomial coefficients for the tanh(x), 13 <= |x| < 16 -data8 0x9D6CCDA4767CA6D9, 0x00003FE5 //A13 = 1.8326683535066775712253572575e-08 -data8 0xFFAF154F334BF403, 0x0000BFE4 //A12 = -1.4882762852665077172347508377e-08 -data8 0xBFC68FA7C61B6C17, 0x00003FE4 //A11 = 1.1162810813806544919835662888e-08 -data8 0x83D8439A6B19A015, 0x0000BFE4 //A10 = -7.6743763372603959795701788561e-09 -data8 0xA4CE5BE9DC6A2962, 0x00003FE3 //A9 = 4.7964885012772346158732715382e-09 -data8 0xB96826C0697253CA, 0x0000BFE2 //A8 = -2.6980246373950994097953903952e-09 -data8 0xB96826CADDC00E35, 0x00003FE1 //A7 = 1.3490123232313844006540534789e-09 -data8 0xA23B21F1155DF322, 0x0000BFE0 //A6 = -5.9019289132168830718664922372e-10 -data8 0xF358B2E9A50C349C, 0x00003FDE //A5 = 2.2132233424669131155945897524e-10 -data8 0x98176FD2074C1D77, 0x0000BFDD //A4 = -6.9163229452106125388824134881e-11 -LOCAL_OBJECT_END(_13_to_16_data_tail) - -LOCAL_OBJECT_START(_0_to_1o8_data) -// Polynomial coefficients for the tanh(x), 0.0 <= |x| < 0.125 -data8 0xBA0EC1879495150B, 0x0000BFF5 // A15 = -1.4195071451378679802688367813e-03 -data8 0xEB5A82898D1BCBA4, 0x00003FF6 // A13 = 3.5912102408030526706365632879e-03 -data8 0x91370DAFE0B64438, 0x0000BFF8 // A11 = -8.8632234251336964576640807982e-03 -data8 0xB327A435358F1200, 0x00003FF9 // A9 = 2.1869488447622383899199238857e-02 -data8 0xDD0DD0DD07A0775F, 0x0000BFFA // A7 = -5.3968253967902161405327069187e-02 -data8 0x888888888887C299, 0x00003FFC // A5 = 1.3333333333333264660338062012e-01 -data8 0xAAAAAAAAAAAAAA98, 0x0000BFFD // A3 = -3.3333333333333333282255458755e-01 -LOCAL_OBJECT_END(_0_to_1o8_data) - - -.section .text -GLOBAL_LIBM_ENTRY(tanhl) - -{ .mfi - alloc r32 = ar.pfs, 0, 21, 0, 0 - fmerge.se fArgAbsNorm = f1, f8 // normalized x (1.0 <= x < 2.0) - addl rSignBit = 0x20000, r0 // Set sign bit for exponent -} -{ .mlx - addl rDataPtr = @ltoff(tanhl_data), gp // Get common data ptr - movl r1p5 = 0x3FF8000000000000 // 1.5 in dbl repres. -};; - -{ .mfi - getf.exp rArgExp = f8 // Get arg exponent - fclass.m p6,p0 = f8, 0xEF // Filter 0, denormals and specials - // 0xEF = @qnan|@snan|@pos|@neg|@zero|@unorm|@inf - addl rBias = 0xfffc, r0 // Value to subtract from exp - // to get actual interval number -} -{ .mfi - ld8 rDataPtr = [rDataPtr] // Get real common data pointer - fma.s1 fArgSqr = f8, f8, f0 // x^2 (for [0;1/8] path) - addl r2to4 = 0x10000, r0 // unbiased exponent - // for [2;4] binary interval -};; - -{ .mfi - getf.sig rArgSig = f8 // Get arg significand - fcmp.lt.s1 p15, p14 = f8, f0 // Is arg negative/positive? - addl rSaturation = 0xb70, r0 // First 12 bits of - // saturation value signif. -} -{ .mfi - setf.d f1p5 = r1p5 // 1.5 construction - fma.s1 f2p0 = f1,f1,f1 // 2.0 construction - addl r1625Sign = 0xd01, r0 // First 12 bits of - // 1.625 value signif. - // 1.625 significand used to filter values greater than 3.25, 6.5, 13.0 -};; - -{ .mfi - addl rTailDataPtr = 0xB00, rDataPtr // Pointer to "tail" data - fmerge.s fSignumX = f8, f1 // signum(x) - andcm rArgExp = rArgExp, rSignBit // Remove sign of exp -} -{ .mfb - addl rTiny = 0xf000, r0 // Tiny value for saturation path - nop.f 0 -(p6) br.cond.spnt tanhl_spec // Branch to zero, denorm & specs -};; - -{ .mfi - sub rInterval = rArgExp, rBias // Get actual interval number - nop.f 0 - shr.u rArgSig = rArgSig, 52 // Leave only 12 bits of sign. -} -{ .mfi - adds rShiftedDataPtr = 0x10, rDataPtr // Second ptr to data - nop.f 0 - cmp.ge p8, p10 = rArgExp, r2to4 // If exp >= 2to4 interval? -};; - -{ .mfi -(p8) cmp.le p8, p10 = r1625Sign, rArgSig // If signd is greater - // than 1.625? (arg is at one of binary subranges) - nop.f 0 - shl rOffset = rInterval, 8 // Make offset from - // interval number -} -{ .mfi - cmp.gt p9, p0 = 0x0, rInterval // If interval is less than 0 - // (means arg is in [0; 1/8]) - nop.f 0 - cmp.eq p7, p0 = 0x7, rInterval // If arg is in [16;] interv.? -};; - -{ .mfi -(p8) adds rOffset = 0x400, rOffset // Add additional offset - // (arg is at one of binary subranges) - fma.s1 fArgCube = fArgSqr, f8, f0 // x^3 (for [0;1/8] path) - shl rTailOffset = rInterval, 7 // Make offset to "tail" data - // from interval number -} -{ .mib - setf.exp fTiny = rTiny // Construct "tiny" value - // for saturation path - cmp.ltu p11, p0 = 0x7, rInterval // if arg > 32 -(p9) br.cond.spnt _0_to_1o8 -};; - -{ .mfi - add rAddr1 = rDataPtr, rOffset // Get address for - // interval data - nop.f 0 - shl rTailAddOffset = rInterval, 5 // Offset to interval - // "tail" data -} -{ .mib - add rAddr2 = rShiftedDataPtr, rOffset // Get second - // address for interval data -(p7) cmp.leu p11, p0 = rSaturation, rArgSig // if arg is - // in [22.8;32] interval -(p11) br.cond.spnt _saturation // Branch to Saturation path -};; - -{ .mmi - ldfe fA3 = [rAddr1], 0x90 // Load A3 - ldfpd fA2H, fA2L = [rAddr2], 16 // Load A2High, A2Low - add rTailOffset = rTailOffset, rTailAddOffset // "Tail" offset -};; - -{ .mmi - ldfe fA20 = [rAddr1], 16 // Load A20 - ldfpd fA1H, fA1L = [rAddr2], 16 // Load A1High, A1Low -(p8) adds rTailOffset = 0x280, rTailOffset // Additional offset - // (arg is at one of binary subranges) -};; - -{ .mmi - ldfe fA19 = [rAddr1], 16 // Load A19 - ldfpd fA0H, fA0L = [rAddr2], 16 // Load A0High, A0Low - add rTailAddr1 = rTailDataPtr, rTailOffset // First tail - // data address -};; - -.pred.rel "mutex",p8,p10 -{ .mfi - ldfe fA18 = [rAddr1], 16 // Load A18 -(p8) fms.s1 fArgAbsNorm = fArgAbsNorm, f1, f2p0 // Add 2.0 - // (arg is at one of binary subranges) - adds rTailAddr2 = 0x10, rTailAddr1 // First tail - // data address -} -{ .mfi - ldfe fA25 = [rAddr2], 16 // Load A25 -(p10) fms.s1 fArgAbsNorm = fArgAbsNorm, f1, f1p5 // Add 1.5 - // to normalized arg - nop.i 0 -};; - -{ .mmi - ldfe fA17 = [rAddr1], 16 // Load A17 - ldfe fA24 = [rAddr2], 16 // Load A24 - nop.i 0 -};; - -{ .mmi - ldfe fA16 = [rAddr1], 16 // Load A16 - ldfe fA23 = [rAddr2], 16 // Load A23 - nop.i 0 -};; - -{ .mmi - ldfe fA15 = [rAddr1], 16 // Load A15 - ldfe fA22 = [rAddr2], 16 // Load A22 - nop.i 0 -};; - -{ .mmi - ldfe fA14 = [rAddr1], 16 // Load A14 - ldfe fA21 = [rAddr2], 16 // Load A21 - nop.i 0 -};; - -{ .mfi - ldfe fA13 = [rTailAddr1], 32 // Load A13 - fms.s1 fArgAbsNorm2 = fArgAbsNorm, fArgAbsNorm, f0 // x^2 - nop.i 0 -} -{ .mfi - ldfe fA12 = [rTailAddr2], 32 // Load A12 - nop.f 0 - nop.i 0 -};; - -{ .mfi - ldfe fA11 = [rTailAddr1], 32 // Load A11 - fma.s1 fRes3H = fA3, fArgAbsNorm, fA2H // (A3*x+A2)*x^2 - nop.i 0 -} -{ .mfi - ldfe fA10 = [rTailAddr2], 32 // Load A10 - fma.s1 fTH = fA3, fArgAbsNorm, f0 // (A3*x+A2)*x^2 - nop.i 0 -};; - -{ .mfi - ldfe fA9 = [rTailAddr1], 32 // Load A9 - fma.s1 fTT2 = fA1L, fArgAbsNorm, f0 // A1*x+A0 - nop.i 0 -} -{ .mfi - ldfe fA8 = [rTailAddr2], 32 // Load A8 - nop.f 0 - nop.i 0 -};; - -{ .mmi - ldfe fA7 = [rTailAddr1], 32 // Load A7 - ldfe fA6 = [rTailAddr2], 32 // Load A6 - nop.i 0 -};; - -{ .mmi - ldfe fA5 = [rTailAddr1], 32 // Load A5 - ldfe fA4 = [rTailAddr2], 32 // Load A4 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 fArgAbsNorm2L = fArgAbsNorm, fArgAbsNorm, fArgAbsNorm2 - // Low part of x^2 (delta) - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fArgAbsNorm4 = fArgAbsNorm2, fArgAbsNorm2, f0 // x^4 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 fRes3L = fA2H, f1, fRes3H // // (A3*x+A2)*x^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 fArgAbsNorm3 = fArgAbsNorm2, fArgAbsNorm, f0 // x^3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fTH2 = fA1H, fArgAbsNorm, fTT2 // A1*x+A0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA23 = fA24, fArgAbsNorm, fA23 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA21 = fA22, fArgAbsNorm, fA21 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA12 = fA13, fArgAbsNorm, fA12 // Polynomial tail - nop.i 0 -} -;; - -{ .mfi - nop.m 0 - fma.s1 fRes3L = fRes3L, f1, fTH // (A3*x+A2)*x^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA19 = fA20, fArgAbsNorm, fA19 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes1H = fTH2, f1, fA0H // A1*x+A0 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fTL2 = fA1H, fArgAbsNorm, fTH2 // A1*x+A0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA8 = fA9, fArgAbsNorm, fA8 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA10 = fA11, fArgAbsNorm, fA10 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA15 = fA16, fArgAbsNorm, fA15 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA17 = fA18, fArgAbsNorm, fA17 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 fArgAbsNorm11 = fArgAbsNorm4, fArgAbsNorm4, f0 // x^8 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA4 = fA5, fArgAbsNorm, fA4 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes3L = fRes3L, f1, fA2L // (A3*x+A2)*x^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA6 = fA7, fArgAbsNorm, fA6 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fTL2 = fTL2, f1, fTT2 // A1*x+A0 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fRes1L = fA0H, f1, fRes1H // A1*x+A0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA23 = fA25, fArgAbsNorm2, fA23 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA12 = fA14, fArgAbsNorm2, fA12 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA19 = fA21, fArgAbsNorm2, fA19 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA8 = fA10, fArgAbsNorm2, fA8 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA15 = fA17, fArgAbsNorm2, fA15 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fArgAbsNorm11 = fArgAbsNorm11, fArgAbsNorm3, f0 // x^11 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fTT = fRes3L, fArgAbsNorm2, f0 // (A3*x+A2)*x^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA4 = fA6, fArgAbsNorm2, fA4 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes1L = fRes1L, f1, fTH2 // A1*x+A0 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fArgAbsNorm4X = fArgAbsNorm4, fSignumX, f0 // x^4 * signum - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA19 = fA23, fArgAbsNorm4, fA19 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA8 = fA12, fArgAbsNorm4, fA8 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fTT = fRes3H, fArgAbsNorm2L, fTT // (A3*x+A2)*x^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes1L = fRes1L, f1, fTL2 // A1*x+A0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA15 = fA19, fArgAbsNorm4, fA15 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA4 = fA8, fArgAbsNorm4, fA4 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes2H = fRes3H, fArgAbsNorm2, fTT // (A3*x+A2)*x^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes1L = fRes1L, f1, fA0L // A1*x+A0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes4 = fA15, fArgAbsNorm11, fA4 // Result of - // polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 fRes2L = fRes3H, fArgAbsNorm2, fRes2H // (A3*x+A2)*x^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fResH = fRes2H, f1, fRes1H // High result - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p14) fma.s1 fRes1L = fRes4, fArgAbsNorm4X, fRes1L // A1*x+A0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fms.s1 fRes1L = fRes4, fArgAbsNorm4X, fRes1L // A1*x+A0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes2L = fRes2L, f1, fTT // (A3*x+A2)*x^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 fResL = fRes1H, f1, fResH // Low result - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s0 fRes1L = fRes2L, fSignumX, fRes1L // Low result - // .s0 - for symmetry issue resolving at +/-inf rounding mode - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fResL = fResL, f1, fRes2H // Low result - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p14) fma.s0 fResL = fRes1L, f1, fResL // Low result - // .s0 - for symmetry issue resolving at +/-inf rounding mode - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fms.s0 fResL = fRes1L, f1, fResL // Low result - // .s0 - for symmetry issue resolving at +/-inf rounding mode - nop.i 0 -};; - -.pred.rel "mutex",p14,p15 -{ .mfi - nop.m 0 -(p14) fma.s0 f8 = fResL, f1, fResH// Add high and low results - nop.i 0 -} -{ .mfb - nop.m 0 -(p15) fms.s0 f8 = fResL, f1, fResH // Add high and low results - br.ret.sptk b0 // Main path return -};; - -// satiration path //////////////////////////////////////////////////////////// -_saturation: - -.pred.rel "mutex",p14,p15 -{ .mfi - nop.m 0 -(p14) fms.s0 f8 = f1, f1, fTiny // Saturation result r = 1-tiny - nop.i 0 -};; -{ .mfb - nop.m 0 -(p15) fnma.s0 f8 = f1, f1, fTiny // Saturation result r = tiny-1 - br.ret.sptk b0 // Saturation path return -};; - - -// 0, denormals and special IEEE numbers path ///////////////////////////////// -tanhl_spec: - -{ .mfi - nop.m 0 - fclass.m p6,p0 = f8, 0x23 // To filter infinities - // 0x23 = @pos|@neg|@inf - nop.i 0 -};; - -{ .mfi - nop.m 0 - fclass.m p7,p0 = f8, 0xC7 // To filter NaNs & Zeros - // 0xC7 = @pos|@neg|@zero|@qnan|@snan - nop.i 0 -};; - -{ .mfb - nop.m 0 -(p6) fmerge.s f8 = f8, f1 // +/-1 for INF args -(p6) br.ret.spnt b0 // exit for x = INF -};; - -{ .mfb - nop.m 0 -(p7) fma.s0 f8 = f8, f1, f8 // +/-0 for 0 args - // and NaNs for NaNs -(p7) br.ret.spnt b0 // exit for x = NaN or +/-0 -};; - -{ .mfi - nop.m 0 - fnorm.s0 f8 = f8 // Normalize arg - nop.i 0 -};; - -.pred.rel "mutex",p14,p15 -{ .mfi - nop.m 0 -(p14) fnma.s0 f8 = f8, f8, f8 // res = r-r^2 - nop.i 0 -} -{ .mfb - nop.m 0 -(p15) fma.s0 f8 = f8, f8, f8 // res = r+r^2 - br.ret.sptk b0 // 0, denormals, IEEE specials return -};; - - -// 0 < |x| < 1/8 path ///////////////////////////////////////////////////////// -_0_to_1o8: - -{ .mmi - adds rAddr1 = 0x11e0, rDataPtr // Ptr 1 to coeffs - adds rAddr2 = 0x11f0, rDataPtr // Ptr 2 to coeffs - nop.i 0 -};; - -{ .mmi - ldfe fA15 = [rAddr1], 32 // Load A15 - ldfe fA13 = [rAddr2], 32 // Load A13 - nop.i 0 -};; - -{ .mmi - ldfe fA11 = [rAddr1], 32 // Load A11 - ldfe fA9 = [rAddr2], 32 // Load A9 - nop.i 0 -};; - -{ .mmi - ldfe fA7 = [rAddr1], 32 // Load A7 - ldfe fA5 = [rAddr2] // Load A5 - nop.i 0 -};; - -{ .mfi - ldfe fA3 = [rAddr1] // Load A3 - fma.s1 fA11 = fA13, fArgSqr, fA11 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fArgFour = fArgSqr, fArgSqr, f0 // a^4 - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fma.s1 fA3 = fA5, fArgSqr, fA3 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fA7 = fA9, fArgSqr, fA7 // Polynomial tail - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fma.s1 fA11 = fA15, fArgFour, fA11 // Polynomial tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fA3 = fA7, fArgFour, fA3 // Polynomial tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 fArgEight = fArgFour, fArgFour, f0 // a^8 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 fRes = fA11, fArgEight, fA3 //Polynomial tail result - nop.i 0 -};; - -{ .mfb - nop.m 0 - fma.s0 f8 = fRes, fArgCube, f8 // (Polynomial tail)*x^3 - br.ret.sptk b0 // [0;1/8] interval return -};; - -GLOBAL_LIBM_END(tanhl) diff --git a/sysdeps/ia64/fpu/s_tanl.S b/sysdeps/ia64/fpu/s_tanl.S deleted file mode 100644 index b59936c4a1..0000000000 --- a/sysdeps/ia64/fpu/s_tanl.S +++ /dev/null @@ -1,3248 +0,0 @@ -.file "tancotl.s" - - -// Copyright (c) 2000 - 2004, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// -// 02/02/00 (hand-optimized) -// 04/04/00 Unwind support added -// 12/28/00 Fixed false invalid flags -// 02/06/02 Improved speed -// 05/07/02 Changed interface to __libm_pi_by_2_reduce -// 05/30/02 Added cotl -// 02/10/03 Reordered header: .section, .global, .proc, .align; -// used data8 for long double table values -// 05/15/03 Reformatted data tables -// 10/26/04 Avoided using r14-31 as scratch so not clobbered by dynamic loader -// -//********************************************************************* -// -// Functions: tanl(x) = tangent(x), for double-extended precision x values -// cotl(x) = cotangent(x), for double-extended precision x values -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8 (Input and Return Value) -// f9-f15 -// f32-f121 -// -// General Purpose Registers: -// r32-r70 -// -// Predicate Registers: p6-p15 -// -//********************************************************************* -// -// IEEE Special Conditions for tanl: -// -// Denormal fault raised on denormal inputs -// Overflow exceptions do not occur -// Underflow exceptions raised when appropriate for tan -// (No specialized error handling for this routine) -// Inexact raised when appropriate by algorithm -// -// tanl(SNaN) = QNaN -// tanl(QNaN) = QNaN -// tanl(inf) = QNaN -// tanl(+/-0) = +/-0 -// -//********************************************************************* -// -// IEEE Special Conditions for cotl: -// -// Denormal fault raised on denormal inputs -// Overflow exceptions occur at zero and near zero -// Underflow exceptions do not occur -// Inexact raised when appropriate by algorithm -// -// cotl(SNaN) = QNaN -// cotl(QNaN) = QNaN -// cotl(inf) = QNaN -// cotl(+/-0) = +/-Inf and error handling is called -// -//********************************************************************* -// -// Below are mathematical and algorithmic descriptions for tanl. -// For cotl we use next identity cot(x) = -tan(x + Pi/2). -// So, to compute cot(x) we just need to increment N (N = N + 1) -// and invert sign of the computed result. -// -//********************************************************************* -// -// Mathematical Description -// -// We consider the computation of FPTANL of Arg. Now, given -// -// Arg = N pi/2 + alpha, |alpha| <= pi/4, -// -// basic mathematical relationship shows that -// -// tan( Arg ) = tan( alpha ) if N is even; -// = -cot( alpha ) otherwise. -// -// The value of alpha is obtained by argument reduction and -// represented by two working precision numbers r and c where -// -// alpha = r + c accurately. -// -// The reduction method is described in a previous write up. -// The argument reduction scheme identifies 4 cases. For Cases 2 -// and 4, because |alpha| is small, tan(r+c) and -cot(r+c) can be -// computed very easily by 2 or 3 terms of the Taylor series -// expansion as follows: -// -// Case 2: -// ------- -// -// tan(r + c) = r + c + r^3/3 ...accurately -// -cot(r + c) = -1/(r+c) + r/3 ...accurately -// -// Case 4: -// ------- -// -// tan(r + c) = r + c + r^3/3 + 2r^5/15 ...accurately -// -cot(r + c) = -1/(r+c) + r/3 + r^3/45 ...accurately -// -// -// The only cases left are Cases 1 and 3 of the argument reduction -// procedure. These two cases will be merged since after the -// argument is reduced in either cases, we have the reduced argument -// represented as r + c and that the magnitude |r + c| is not small -// enough to allow the usage of a very short approximation. -// -// The greatest challenge of this task is that the second terms of -// the Taylor series for tan(r) and -cot(r) -// -// r + r^3/3 + 2 r^5/15 + ... -// -// and -// -// -1/r + r/3 + r^3/45 + ... -// -// are not very small when |r| is close to pi/4 and the rounding -// errors will be a concern if simple polynomial accumulation is -// used. When |r| < 2^(-2), however, the second terms will be small -// enough (5 bits or so of right shift) that a normal Horner -// recurrence suffices. Hence there are two cases that we consider -// in the accurate computation of tan(r) and cot(r), |r| <= pi/4. -// -// Case small_r: |r| < 2^(-2) -// -------------------------- -// -// Since Arg = N pi/4 + r + c accurately, we have -// -// tan(Arg) = tan(r+c) for N even, -// = -cot(r+c) otherwise. -// -// Here for this case, both tan(r) and -cot(r) can be approximated -// by simple polynomials: -// -// tan(r) = r + P1_1 r^3 + P1_2 r^5 + ... + P1_9 r^19 -// -cot(r) = -1/r + Q1_1 r + Q1_2 r^3 + ... + Q1_7 r^13 -// -// accurately. Since |r| is relatively small, tan(r+c) and -// -cot(r+c) can be accurately approximated by replacing r with -// r+c only in the first two terms of the corresponding polynomials. -// -// Note that P1_1 (and Q1_1 for that matter) approximates 1/3 to -// almost 64 sig. bits, thus -// -// P1_1 (r+c)^3 = P1_1 r^3 + c * r^2 accurately. -// -// Hence, -// -// tan(r+c) = r + P1_1 r^3 + P1_2 r^5 + ... + P1_9 r^19 -// + c*(1 + r^2) -// -// -cot(r+c) = -1/(r+c) + Q1_1 r + Q1_2 r^3 + ... + Q1_7 r^13 -// + Q1_1*c -// -// -// Case normal_r: 2^(-2) <= |r| <= pi/4 -// ------------------------------------ -// -// This case is more likely than the previous one if one considers -// r to be uniformly distributed in [-pi/4 pi/4]. -// -// The required calculation is either -// -// tan(r + c) = tan(r) + correction, or -// -cot(r + c) = -cot(r) + correction. -// -// Specifically, -// -// tan(r + c) = tan(r) + c tan'(r) + O(c^2) -// = tan(r) + c sec^2(r) + O(c^2) -// = tan(r) + c SEC_sq ...accurately -// as long as SEC_sq approximates sec^2(r) -// to, say, 5 bits or so. -// -// Similarly, -// -// -cot(r + c) = -cot(r) - c cot'(r) + O(c^2) -// = -cot(r) + c csc^2(r) + O(c^2) -// = -cot(r) + c CSC_sq ...accurately -// as long as CSC_sq approximates csc^2(r) -// to, say, 5 bits or so. -// -// We therefore concentrate on accurately calculating tan(r) and -// cot(r) for a working-precision number r, |r| <= pi/4 to within -// 0.1% or so. -// -// We will employ a table-driven approach. Let -// -// r = sgn_r * 2^k * 1.b_1 b_2 ... b_5 ... b_63 -// = sgn_r * ( B + x ) -// -// where -// -// B = 2^k * 1.b_1 b_2 ... b_5 1 -// x = |r| - B -// -// Now, -// tan(B) + tan(x) -// tan( B + x ) = ------------------------ -// 1 - tan(B)*tan(x) -// -// / \ -// | tan(B) + tan(x) | - -// = tan(B) + | ------------------------ - tan(B) | -// | 1 - tan(B)*tan(x) | -// \ / -// -// sec^2(B) * tan(x) -// = tan(B) + ------------------------ -// 1 - tan(B)*tan(x) -// -// (1/[sin(B)*cos(B)]) * tan(x) -// = tan(B) + -------------------------------- -// cot(B) - tan(x) -// -// -// Clearly, the values of tan(B), cot(B) and 1/(sin(B)*cos(B)) are -// calculated beforehand and stored in a table. Since -// -// |x| <= 2^k * 2^(-6) <= 2^(-7) (because k = -1, -2) -// -// a very short polynomial will be sufficient to approximate tan(x) -// accurately. The details involved in computing the last expression -// will be given in the next section on algorithm description. -// -// -// Now, we turn to the case where cot( B + x ) is needed. -// -// -// 1 - tan(B)*tan(x) -// cot( B + x ) = ------------------------ -// tan(B) + tan(x) -// -// / \ -// | 1 - tan(B)*tan(x) | - -// = cot(B) + | ----------------------- - cot(B) | -// | tan(B) + tan(x) | -// \ / -// -// [tan(B) + cot(B)] * tan(x) -// = cot(B) - ---------------------------- -// tan(B) + tan(x) -// -// (1/[sin(B)*cos(B)]) * tan(x) -// = cot(B) - -------------------------------- -// tan(B) + tan(x) -// -// -// Note that the values of tan(B), cot(B) and 1/(sin(B)*cos(B)) that -// are needed are the same set of values needed in the previous -// case. -// -// Finally, we can put all the ingredients together as follows: -// -// Arg = N * pi/2 + r + c ...accurately -// -// tan(Arg) = tan(r) + correction if N is even; -// = -cot(r) + correction otherwise. -// -// For Cases 2 and 4, -// -// Case 2: -// tan(Arg) = tan(r + c) = r + c + r^3/3 N even -// = -cot(r + c) = -1/(r+c) + r/3 N odd -// Case 4: -// tan(Arg) = tan(r + c) = r + c + r^3/3 + 2r^5/15 N even -// = -cot(r + c) = -1/(r+c) + r/3 + r^3/45 N odd -// -// -// For Cases 1 and 3, -// -// Case small_r: |r| < 2^(-2) -// -// tan(Arg) = r + P1_1 r^3 + P1_2 r^5 + ... + P1_9 r^19 -// + c*(1 + r^2) N even -// -// = -1/(r+c) + Q1_1 r + Q1_2 r^3 + ... + Q1_7 r^13 -// + Q1_1*c N odd -// -// Case normal_r: 2^(-2) <= |r| <= pi/4 -// -// tan(Arg) = tan(r) + c * sec^2(r) N even -// = -cot(r) + c * csc^2(r) otherwise -// -// For N even, -// -// tan(Arg) = tan(r) + c*sec^2(r) -// = tan( sgn_r * (B+x) ) + c * sec^2(|r|) -// = sgn_r * ( tan(B+x) + sgn_r*c*sec^2(|r|) ) -// = sgn_r * ( tan(B+x) + sgn_r*c*sec^2(B) ) -// -// since B approximates |r| to 2^(-6) in relative accuracy. -// -// / (1/[sin(B)*cos(B)]) * tan(x) -// tan(Arg) = sgn_r * | tan(B) + -------------------------------- -// \ cot(B) - tan(x) -// \ -// + CORR | - -// / -// where -// -// CORR = sgn_r*c*tan(B)*SC_inv(B); SC_inv(B) = 1/(sin(B)*cos(B)). -// -// For N odd, -// -// tan(Arg) = -cot(r) + c*csc^2(r) -// = -cot( sgn_r * (B+x) ) + c * csc^2(|r|) -// = sgn_r * ( -cot(B+x) + sgn_r*c*csc^2(|r|) ) -// = sgn_r * ( -cot(B+x) + sgn_r*c*csc^2(B) ) -// -// since B approximates |r| to 2^(-6) in relative accuracy. -// -// / (1/[sin(B)*cos(B)]) * tan(x) -// tan(Arg) = sgn_r * | -cot(B) + -------------------------------- -// \ tan(B) + tan(x) -// \ -// + CORR | - -// / -// where -// -// CORR = sgn_r*c*cot(B)*SC_inv(B); SC_inv(B) = 1/(sin(B)*cos(B)). -// -// -// The actual algorithm prescribes how all the mathematical formulas -// are calculated. -// -// -// 2. Algorithmic Description -// ========================== -// -// 2.1 Computation for Cases 2 and 4. -// ---------------------------------- -// -// For Case 2, we use two-term polynomials. -// -// For N even, -// -// rsq := r * r -// Poly := c + r * rsq * P1_1 -// Result := r + Poly ...in user-defined rounding -// -// For N odd, -// S_hi := -frcpa(r) ...8 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...16 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...32 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...64 bits -// S_lo := S_hi*( (1 + S_hi*r) + S_hi*c ) -// ...S_hi + S_lo is -1/(r+c) to extra precision -// S_lo := S_lo + Q1_1*r -// -// Result := S_hi + S_lo ...in user-defined rounding -// -// For Case 4, we use three-term polynomials -// -// For N even, -// -// rsq := r * r -// Poly := c + r * rsq * (P1_1 + rsq * P1_2) -// Result := r + Poly ...in user-defined rounding -// -// For N odd, -// S_hi := -frcpa(r) ...8 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...16 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...32 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...64 bits -// S_lo := S_hi*( (1 + S_hi*r) + S_hi*c ) -// ...S_hi + S_lo is -1/(r+c) to extra precision -// rsq := r * r -// P := Q1_1 + rsq*Q1_2 -// S_lo := S_lo + r*P -// -// Result := S_hi + S_lo ...in user-defined rounding -// -// -// Note that the coefficients P1_1, P1_2, Q1_1, and Q1_2 are -// the same as those used in the small_r case of Cases 1 and 3 -// below. -// -// -// 2.2 Computation for Cases 1 and 3. -// ---------------------------------- -// This is further divided into the case of small_r, -// where |r| < 2^(-2), and the case of normal_r, where |r| lies between -// 2^(-2) and pi/4. -// -// Algorithm for the case of small_r -// --------------------------------- -// -// For N even, -// rsq := r * r -// Poly1 := rsq*(P1_1 + rsq*(P1_2 + rsq*P1_3)) -// r_to_the_8 := rsq * rsq -// r_to_the_8 := r_to_the_8 * r_to_the_8 -// Poly2 := P1_4 + rsq*(P1_5 + rsq*(P1_6 + ... rsq*P1_9)) -// CORR := c * ( 1 + rsq ) -// Poly := Poly1 + r_to_the_8*Poly2 -// Poly := r*Poly + CORR -// Result := r + Poly ...in user-defined rounding -// ...note that Poly1 and r_to_the_8 can be computed in parallel -// ...with Poly2 (Poly1 is intentionally set to be much -// ...shorter than Poly2 so that r_to_the_8 and CORR can be hidden) -// -// For N odd, -// S_hi := -frcpa(r) ...8 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...16 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...32 bits -// S_hi := S_hi + S_hi*(1 + S_hi*r) ...64 bits -// S_lo := S_hi*( (1 + S_hi*r) + S_hi*c ) -// ...S_hi + S_lo is -1/(r+c) to extra precision -// S_lo := S_lo + Q1_1*c -// -// ...S_hi and S_lo are computed in parallel with -// ...the following -// rsq := r*r -// P := Q1_1 + rsq*(Q1_2 + rsq*(Q1_3 + ... + rsq*Q1_7)) -// -// Poly := r*P + S_lo -// Result := S_hi + Poly ...in user-defined rounding -// -// -// Algorithm for the case of normal_r -// ---------------------------------- -// -// Here, we first consider the computation of tan( r + c ). As -// presented in the previous section, -// -// tan( r + c ) = tan(r) + c * sec^2(r) -// = sgn_r * [ tan(B+x) + CORR ] -// CORR = sgn_r * c * tan(B) * 1/[sin(B)*cos(B)] -// -// because sec^2(r) = sec^(|r|), and B approximate |r| to 6.5 bits. -// -// tan( r + c ) = -// / (1/[sin(B)*cos(B)]) * tan(x) -// sgn_r * | tan(B) + -------------------------------- + -// \ cot(B) - tan(x) -// \ -// CORR | - -// / -// -// The values of tan(B), cot(B) and 1/(sin(B)*cos(B)) are -// calculated beforehand and stored in a table. Specifically, -// the table values are -// -// tan(B) as T_hi + T_lo; -// cot(B) as C_hi + C_lo; -// 1/[sin(B)*cos(B)] as SC_inv -// -// T_hi, C_hi are in double-precision memory format; -// T_lo, C_lo are in single-precision memory format; -// SC_inv is in extended-precision memory format. -// -// The value of tan(x) will be approximated by a short polynomial of -// the form -// -// tan(x) as x + x * P, where -// P = x^2 * (P2_1 + x^2 * (P2_2 + x^2 * P2_3)) -// -// Because |x| <= 2^(-7), cot(B) - x approximates cot(B) - tan(x) -// to a relative accuracy better than 2^(-20). Thus, a good -// initial guess of 1/( cot(B) - tan(x) ) to initiate the iterative -// division is: -// -// 1/(cot(B) - tan(x)) is approximately -// 1/(cot(B) - x) is -// tan(B)/(1 - x*tan(B)) is approximately -// T_hi / ( 1 - T_hi * x ) is approximately -// -// T_hi * [ 1 + (Thi * x) + (T_hi * x)^2 ] -// -// The calculation of tan(r+c) therefore proceed as follows: -// -// Tx := T_hi * x -// xsq := x * x -// -// V_hi := T_hi*(1 + Tx*(1 + Tx)) -// P := xsq * (P1_1 + xsq*(P1_2 + xsq*P1_3)) -// ...V_hi serves as an initial guess of 1/(cot(B) - tan(x)) -// ...good to about 20 bits of accuracy -// -// tanx := x + x*P -// D := C_hi - tanx -// ...D is a double precision denominator: cot(B) - tan(x) -// -// V_hi := V_hi + V_hi*(1 - V_hi*D) -// ....V_hi approximates 1/(cot(B)-tan(x)) to 40 bits -// -// V_lo := V_hi * ( [ (1 - V_hi*C_hi) + V_hi*tanx ] -// - V_hi*C_lo ) ...observe all order -// ...V_hi + V_lo approximates 1/(cot(B) - tan(x)) -// ...to extra accuracy -// -// ... SC_inv(B) * (x + x*P) -// ... tan(B) + ------------------------- + CORR -// ... cot(B) - (x + x*P) -// ... -// ... = tan(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR -// ... -// -// Sx := SC_inv * x -// CORR := sgn_r * c * SC_inv * T_hi -// -// ...put the ingredients together to compute -// ... SC_inv(B) * (x + x*P) -// ... tan(B) + ------------------------- + CORR -// ... cot(B) - (x + x*P) -// ... -// ... = tan(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR -// ... -// ... = T_hi + T_lo + CORR + -// ... Sx * V_hi + Sx * V_lo + Sx * P *(V_hi + V_lo) -// -// CORR := CORR + T_lo -// tail := V_lo + P*(V_hi + V_lo) -// tail := Sx * tail + CORR -// tail := Sx * V_hi + tail -// T_hi := sgn_r * T_hi -// -// ...T_hi + sgn_r*tail now approximate -// ...sgn_r*(tan(B+x) + CORR) accurately -// -// Result := T_hi + sgn_r*tail ...in user-defined -// ...rounding control -// ...It is crucial that independent paths be fully -// ...exploited for performance's sake. -// -// -// Next, we consider the computation of -cot( r + c ). As -// presented in the previous section, -// -// -cot( r + c ) = -cot(r) + c * csc^2(r) -// = sgn_r * [ -cot(B+x) + CORR ] -// CORR = sgn_r * c * cot(B) * 1/[sin(B)*cos(B)] -// -// because csc^2(r) = csc^(|r|), and B approximate |r| to 6.5 bits. -// -// -cot( r + c ) = -// / (1/[sin(B)*cos(B)]) * tan(x) -// sgn_r * | -cot(B) + -------------------------------- + -// \ tan(B) + tan(x) -// \ -// CORR | - -// / -// -// The values of tan(B), cot(B) and 1/(sin(B)*cos(B)) are -// calculated beforehand and stored in a table. Specifically, -// the table values are -// -// tan(B) as T_hi + T_lo; -// cot(B) as C_hi + C_lo; -// 1/[sin(B)*cos(B)] as SC_inv -// -// T_hi, C_hi are in double-precision memory format; -// T_lo, C_lo are in single-precision memory format; -// SC_inv is in extended-precision memory format. -// -// The value of tan(x) will be approximated by a short polynomial of -// the form -// -// tan(x) as x + x * P, where -// P = x^2 * (P2_1 + x^2 * (P2_2 + x^2 * P2_3)) -// -// Because |x| <= 2^(-7), tan(B) + x approximates tan(B) + tan(x) -// to a relative accuracy better than 2^(-18). Thus, a good -// initial guess of 1/( tan(B) + tan(x) ) to initiate the iterative -// division is: -// -// 1/(tan(B) + tan(x)) is approximately -// 1/(tan(B) + x) is -// cot(B)/(1 + x*cot(B)) is approximately -// C_hi / ( 1 + C_hi * x ) is approximately -// -// C_hi * [ 1 - (C_hi * x) + (C_hi * x)^2 ] -// -// The calculation of -cot(r+c) therefore proceed as follows: -// -// Cx := C_hi * x -// xsq := x * x -// -// V_hi := C_hi*(1 - Cx*(1 - Cx)) -// P := xsq * (P1_1 + xsq*(P1_2 + xsq*P1_3)) -// ...V_hi serves as an initial guess of 1/(tan(B) + tan(x)) -// ...good to about 18 bits of accuracy -// -// tanx := x + x*P -// D := T_hi + tanx -// ...D is a double precision denominator: tan(B) + tan(x) -// -// V_hi := V_hi + V_hi*(1 - V_hi*D) -// ....V_hi approximates 1/(tan(B)+tan(x)) to 40 bits -// -// V_lo := V_hi * ( [ (1 - V_hi*T_hi) - V_hi*tanx ] -// - V_hi*T_lo ) ...observe all order -// ...V_hi + V_lo approximates 1/(tan(B) + tan(x)) -// ...to extra accuracy -// -// ... SC_inv(B) * (x + x*P) -// ... -cot(B) + ------------------------- + CORR -// ... tan(B) + (x + x*P) -// ... -// ... =-cot(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR -// ... -// -// Sx := SC_inv * x -// CORR := sgn_r * c * SC_inv * C_hi -// -// ...put the ingredients together to compute -// ... SC_inv(B) * (x + x*P) -// ... -cot(B) + ------------------------- + CORR -// ... tan(B) + (x + x*P) -// ... -// ... =-cot(B) + SC_inv(B)*(x + x*P)*(V_hi + V_lo) + CORR -// ... -// ... =-C_hi - C_lo + CORR + -// ... Sx * V_hi + Sx * V_lo + Sx * P *(V_hi + V_lo) -// -// CORR := CORR - C_lo -// tail := V_lo + P*(V_hi + V_lo) -// tail := Sx * tail + CORR -// tail := Sx * V_hi + tail -// C_hi := -sgn_r * C_hi -// -// ...C_hi + sgn_r*tail now approximates -// ...sgn_r*(-cot(B+x) + CORR) accurately -// -// Result := C_hi + sgn_r*tail in user-defined rounding control -// ...It is crucial that independent paths be fully -// ...exploited for performance's sake. -// -// 3. Implementation Notes -// ======================= -// -// Table entries T_hi, T_lo; C_hi, C_lo; SC_inv -// -// Recall that 2^(-2) <= |r| <= pi/4; -// -// r = sgn_r * 2^k * 1.b_1 b_2 ... b_63 -// -// and -// -// B = 2^k * 1.b_1 b_2 b_3 b_4 b_5 1 -// -// Thus, for k = -2, possible values of B are -// -// B = 2^(-2) * ( 1 + index/32 + 1/64 ), -// index ranges from 0 to 31 -// -// For k = -1, however, since |r| <= pi/4 = 0.78... -// possible values of B are -// -// B = 2^(-1) * ( 1 + index/32 + 1/64 ) -// index ranges from 0 to 19. -// -// - -RODATA -.align 16 - -LOCAL_OBJECT_START(TANL_BASE_CONSTANTS) - -tanl_table_1: -data8 0xA2F9836E4E44152A, 0x00003FFE // two_by_pi -data8 0xC84D32B0CE81B9F1, 0x00004016 // P_0 -data8 0xC90FDAA22168C235, 0x00003FFF // P_1 -data8 0xECE675D1FC8F8CBB, 0x0000BFBD // P_2 -data8 0xB7ED8FBBACC19C60, 0x0000BF7C // P_3 -LOCAL_OBJECT_END(TANL_BASE_CONSTANTS) - -LOCAL_OBJECT_START(tanl_table_2) -data8 0xC90FDAA22168C234, 0x00003FFE // PI_BY_4 -data8 0xA397E5046EC6B45A, 0x00003FE7 // Inv_P_0 -data8 0x8D848E89DBD171A1, 0x0000BFBF // d_1 -data8 0xD5394C3618A66F8E, 0x0000BF7C // d_2 -data4 0x3E800000 // two**-2 -data4 0xBE800000 // -two**-2 -data4 0x00000000 // pad -data4 0x00000000 // pad -LOCAL_OBJECT_END(tanl_table_2) - -LOCAL_OBJECT_START(tanl_table_p1) -data8 0xAAAAAAAAAAAAAABD, 0x00003FFD // P1_1 -data8 0x8888888888882E6A, 0x00003FFC // P1_2 -data8 0xDD0DD0DD0F0177B6, 0x00003FFA // P1_3 -data8 0xB327A440646B8C6D, 0x00003FF9 // P1_4 -data8 0x91371B251D5F7D20, 0x00003FF8 // P1_5 -data8 0xEB69A5F161C67914, 0x00003FF6 // P1_6 -data8 0xBEDD37BE019318D2, 0x00003FF5 // P1_7 -data8 0x9979B1463C794015, 0x00003FF4 // P1_8 -data8 0x8EBD21A38C6EB58A, 0x00003FF3 // P1_9 -LOCAL_OBJECT_END(tanl_table_p1) - -LOCAL_OBJECT_START(tanl_table_q1) -data8 0xAAAAAAAAAAAAAAB4, 0x00003FFD // Q1_1 -data8 0xB60B60B60B5FC93E, 0x00003FF9 // Q1_2 -data8 0x8AB355E00C9BBFBF, 0x00003FF6 // Q1_3 -data8 0xDDEBBC89CBEE3D4C, 0x00003FF2 // Q1_4 -data8 0xB3548A685F80BBB6, 0x00003FEF // Q1_5 -data8 0x913625604CED5BF1, 0x00003FEC // Q1_6 -data8 0xF189D95A8EE92A83, 0x00003FE8 // Q1_7 -LOCAL_OBJECT_END(tanl_table_q1) - -LOCAL_OBJECT_START(tanl_table_p2) -data8 0xAAAAAAAAAAAB362F, 0x00003FFD // P2_1 -data8 0x88888886E97A6097, 0x00003FFC // P2_2 -data8 0xDD108EE025E716A1, 0x00003FFA // P2_3 -LOCAL_OBJECT_END(tanl_table_p2) - -LOCAL_OBJECT_START(tanl_table_tm2) -// -// Entries T_hi double-precision memory format -// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) -// Entries T_lo single-precision memory format -// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) -// -data8 0x3FD09BC362400794 -data4 0x23A05C32, 0x00000000 -data8 0x3FD124A9DFFBC074 -data4 0x240078B2, 0x00000000 -data8 0x3FD1AE235BD4920F -data4 0x23826B8E, 0x00000000 -data8 0x3FD2383515E2701D -data4 0x22D31154, 0x00000000 -data8 0x3FD2C2E463739C2D -data4 0x2265C9E2, 0x00000000 -data8 0x3FD34E36AFEEA48B -data4 0x245C05EB, 0x00000000 -data8 0x3FD3DA317DBB35D1 -data4 0x24749F2D, 0x00000000 -data8 0x3FD466DA67321619 -data4 0x2462CECE, 0x00000000 -data8 0x3FD4F4371F94A4D5 -data4 0x246D0DF1, 0x00000000 -data8 0x3FD5824D740C3E6D -data4 0x240A85B5, 0x00000000 -data8 0x3FD611234CB1E73D -data4 0x23F96E33, 0x00000000 -data8 0x3FD6A0BEAD9EA64B -data4 0x247C5393, 0x00000000 -data8 0x3FD73125B804FD01 -data4 0x241F3B29, 0x00000000 -data8 0x3FD7C25EAB53EE83 -data4 0x2479989B, 0x00000000 -data8 0x3FD8546FE6640EED -data4 0x23B343BC, 0x00000000 -data8 0x3FD8E75FE8AF1892 -data4 0x241454D1, 0x00000000 -data8 0x3FD97B3553928BDA -data4 0x238613D9, 0x00000000 -data8 0x3FDA0FF6EB9DE4DE -data4 0x22859FA7, 0x00000000 -data8 0x3FDAA5AB99ECF92D -data4 0x237A6D06, 0x00000000 -data8 0x3FDB3C5A6D8F1796 -data4 0x23952F6C, 0x00000000 -data8 0x3FDBD40A9CFB8BE4 -data4 0x2280FC95, 0x00000000 -data8 0x3FDC6CC387943100 -data4 0x245D2EC0, 0x00000000 -data8 0x3FDD068CB736C500 -data4 0x23C4AD7D, 0x00000000 -data8 0x3FDDA16DE1DDBC31 -data4 0x23D076E6, 0x00000000 -data8 0x3FDE3D6EEB515A93 -data4 0x244809A6, 0x00000000 -data8 0x3FDEDA97E6E9E5F1 -data4 0x220856C8, 0x00000000 -data8 0x3FDF78F11963CE69 -data4 0x244BE993, 0x00000000 -data8 0x3FE00C417D635BCE -data4 0x23D21799, 0x00000000 -data8 0x3FE05CAB1C302CD3 -data4 0x248A1B1D, 0x00000000 -data8 0x3FE0ADB9DB6A1FA0 -data4 0x23D53E33, 0x00000000 -data8 0x3FE0FF724A20BA81 -data4 0x24DB9ED5, 0x00000000 -data8 0x3FE151D9153FA6F5 -data4 0x24E9E451, 0x00000000 -LOCAL_OBJECT_END(tanl_table_tm2) - -LOCAL_OBJECT_START(tanl_table_tm1) -// -// Entries T_hi double-precision memory format -// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) -// Entries T_lo single-precision memory format -// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) -// -data8 0x3FE1CEC4BA1BE39E -data4 0x24B60F9E, 0x00000000 -data8 0x3FE277E45ABD9B2D -data4 0x248C2474, 0x00000000 -data8 0x3FE324180272B110 -data4 0x247B8311, 0x00000000 -data8 0x3FE3D38B890E2DF0 -data4 0x24C55751, 0x00000000 -data8 0x3FE4866D46236871 -data4 0x24E5BC34, 0x00000000 -data8 0x3FE53CEE45E044B0 -data4 0x24001BA4, 0x00000000 -data8 0x3FE5F74282EC06E4 -data4 0x24B973DC, 0x00000000 -data8 0x3FE6B5A125DF43F9 -data4 0x24895440, 0x00000000 -data8 0x3FE77844CAFD348C -data4 0x240021CA, 0x00000000 -data8 0x3FE83F6BCEED6B92 -data4 0x24C45372, 0x00000000 -data8 0x3FE90B58A34F3665 -data4 0x240DAD33, 0x00000000 -data8 0x3FE9DC522C1E56B4 -data4 0x24F846CE, 0x00000000 -data8 0x3FEAB2A427041578 -data4 0x2323FB6E, 0x00000000 -data8 0x3FEB8E9F9DD8C373 -data4 0x24B3090B, 0x00000000 -data8 0x3FEC709B65C9AA7B -data4 0x2449F611, 0x00000000 -data8 0x3FED58F4ACCF8435 -data4 0x23616A7E, 0x00000000 -data8 0x3FEE480F97635082 -data4 0x24C2FEAE, 0x00000000 -data8 0x3FEF3E57F0ACC544 -data4 0x242CE964, 0x00000000 -data8 0x3FF01E20F7E06E4B -data4 0x2480D3EE, 0x00000000 -data8 0x3FF0A1258A798A69 -data4 0x24DB8967, 0x00000000 -LOCAL_OBJECT_END(tanl_table_tm1) - -LOCAL_OBJECT_START(tanl_table_cm2) -// -// Entries C_hi double-precision memory format -// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) -// Entries C_lo single-precision memory format -// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) -// -data8 0x400ED3E2E63EFBD0 -data4 0x259D94D4, 0x00000000 -data8 0x400DDDB4C515DAB5 -data4 0x245F0537, 0x00000000 -data8 0x400CF57ABE19A79F -data4 0x25D4EA9F, 0x00000000 -data8 0x400C1A06D15298ED -data4 0x24AE40A0, 0x00000000 -data8 0x400B4A4C164B2708 -data4 0x25A5AAB6, 0x00000000 -data8 0x400A855A5285B068 -data4 0x25524F18, 0x00000000 -data8 0x4009CA5A3FFA549F -data4 0x24C999C0, 0x00000000 -data8 0x4009188A646AF623 -data4 0x254FD801, 0x00000000 -data8 0x40086F3C6084D0E7 -data4 0x2560F5FD, 0x00000000 -data8 0x4007CDD2A29A76EE -data4 0x255B9D19, 0x00000000 -data8 0x400733BE6C8ECA95 -data4 0x25CB021B, 0x00000000 -data8 0x4006A07E1F8DDC52 -data4 0x24AB4722, 0x00000000 -data8 0x4006139BC298AD58 -data4 0x252764E2, 0x00000000 -data8 0x40058CABBAD7164B -data4 0x24DAF5DB, 0x00000000 -data8 0x40050B4BAE31A5D3 -data4 0x25EA20F4, 0x00000000 -data8 0x40048F2189F85A8A -data4 0x2583A3E8, 0x00000000 -data8 0x400417DAA862380D -data4 0x25DCC4CC, 0x00000000 -data8 0x4003A52B1088FCFE -data4 0x2430A492, 0x00000000 -data8 0x400336CCCD3527D5 -data4 0x255F77CF, 0x00000000 -data8 0x4002CC7F5760766D -data4 0x25DA0BDA, 0x00000000 -data8 0x4002660711CE02E3 -data4 0x256FF4A2, 0x00000000 -data8 0x4002032CD37BBE04 -data4 0x25208AED, 0x00000000 -data8 0x4001A3BD7F050775 -data4 0x24B72DD6, 0x00000000 -data8 0x40014789A554848A -data4 0x24AB4DAA, 0x00000000 -data8 0x4000EE65323E81B7 -data4 0x2584C440, 0x00000000 -data8 0x4000982721CF1293 -data4 0x25C9428D, 0x00000000 -data8 0x400044A93D415EEB -data4 0x25DC8482, 0x00000000 -data8 0x3FFFE78FBD72C577 -data4 0x257F5070, 0x00000000 -data8 0x3FFF4AC375EFD28E -data4 0x23EBBF7A, 0x00000000 -data8 0x3FFEB2AF60B52DDE -data4 0x22EECA07, 0x00000000 -data8 0x3FFE1F1935204180 -data4 0x24191079, 0x00000000 -data8 0x3FFD8FCA54F7E60A -data4 0x248D3058, 0x00000000 -LOCAL_OBJECT_END(tanl_table_cm2) - -LOCAL_OBJECT_START(tanl_table_cm1) -// -// Entries C_hi double-precision memory format -// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) -// Entries C_lo single-precision memory format -// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) -// -data8 0x3FFCC06A79F6FADE -data4 0x239C7886, 0x00000000 -data8 0x3FFBB91F891662A6 -data4 0x250BD191, 0x00000000 -data8 0x3FFABFB6529F155D -data4 0x256CC3E6, 0x00000000 -data8 0x3FF9D3002E964AE9 -data4 0x250843E3, 0x00000000 -data8 0x3FF8F1EF89DCB383 -data4 0x2277C87E, 0x00000000 -data8 0x3FF81B937C87DBD6 -data4 0x256DA6CF, 0x00000000 -data8 0x3FF74F141042EDE4 -data4 0x2573D28A, 0x00000000 -data8 0x3FF68BAF1784B360 -data4 0x242E489A, 0x00000000 -data8 0x3FF5D0B57C923C4C -data4 0x2532D940, 0x00000000 -data8 0x3FF51D88F418EF20 -data4 0x253C7DD6, 0x00000000 -data8 0x3FF4719A02F88DAE -data4 0x23DB59BF, 0x00000000 -data8 0x3FF3CC6649DA0788 -data4 0x252B4756, 0x00000000 -data8 0x3FF32D770B980DB8 -data4 0x23FE585F, 0x00000000 -data8 0x3FF2945FE56C987A -data4 0x25378A63, 0x00000000 -data8 0x3FF200BDB16523F6 -data4 0x247BB2E0, 0x00000000 -data8 0x3FF172358CE27778 -data4 0x24446538, 0x00000000 -data8 0x3FF0E873FDEFE692 -data4 0x2514638F, 0x00000000 -data8 0x3FF0632C33154062 -data4 0x24A7FC27, 0x00000000 -data8 0x3FEFC42EB3EF115F -data4 0x248FD0FE, 0x00000000 -data8 0x3FEEC9E8135D26F6 -data4 0x2385C719, 0x00000000 -LOCAL_OBJECT_END(tanl_table_cm1) - -LOCAL_OBJECT_START(tanl_table_scim2) -// -// Entries SC_inv in Swapped IEEE format (extended) -// Index = 0,1,...,31 B = 2^(-2)*(1+Index/32+1/64) -// -data8 0x839D6D4A1BF30C9E, 0x00004001 -data8 0x80092804554B0EB0, 0x00004001 -data8 0xF959F94CA1CF0DE9, 0x00004000 -data8 0xF3086BA077378677, 0x00004000 -data8 0xED154515CCD4723C, 0x00004000 -data8 0xE77909441C27CF25, 0x00004000 -data8 0xE22D037D8DDACB88, 0x00004000 -data8 0xDD2B2D8A89C73522, 0x00004000 -data8 0xD86E1A23BB2C1171, 0x00004000 -data8 0xD3F0E288DFF5E0F9, 0x00004000 -data8 0xCFAF16B1283BEBD5, 0x00004000 -data8 0xCBA4AFAA0D88DD53, 0x00004000 -data8 0xC7CE03CCCA67C43D, 0x00004000 -data8 0xC427BC820CA0DDB0, 0x00004000 -data8 0xC0AECD57F13D8CAB, 0x00004000 -data8 0xBD606C3871ECE6B1, 0x00004000 -data8 0xBA3A0A96A44C4929, 0x00004000 -data8 0xB7394F6FE5CCCEC1, 0x00004000 -data8 0xB45C12039637D8BC, 0x00004000 -data8 0xB1A0552892CB051B, 0x00004000 -data8 0xAF04432B6BA2FFD0, 0x00004000 -data8 0xAC862A237221235F, 0x00004000 -data8 0xAA2478AF5F00A9D1, 0x00004000 -data8 0xA7DDBB0C81E082BF, 0x00004000 -data8 0xA5B0987D45684FEE, 0x00004000 -data8 0xA39BD0F5627A8F53, 0x00004000 -data8 0xA19E3B036EC5C8B0, 0x00004000 -data8 0x9FB6C1F091CD7C66, 0x00004000 -data8 0x9DE464101FA3DF8A, 0x00004000 -data8 0x9C263139A8F6B888, 0x00004000 -data8 0x9A7B4968C27B0450, 0x00004000 -data8 0x98E2DB7E5EE614EE, 0x00004000 -LOCAL_OBJECT_END(tanl_table_scim2) - -LOCAL_OBJECT_START(tanl_table_scim1) -// -// Entries SC_inv in Swapped IEEE format (extended) -// Index = 0,1,...,19 B = 2^(-1)*(1+Index/32+1/64) -// -data8 0x969F335C13B2B5BA, 0x00004000 -data8 0x93D446D9D4C0F548, 0x00004000 -data8 0x9147094F61B798AF, 0x00004000 -data8 0x8EF317CC758787AC, 0x00004000 -data8 0x8CD498B3B99EEFDB, 0x00004000 -data8 0x8AE82A7DDFF8BC37, 0x00004000 -data8 0x892AD546E3C55D42, 0x00004000 -data8 0x8799FEA9D15573C1, 0x00004000 -data8 0x86335F88435A4B4C, 0x00004000 -data8 0x84F4FB6E3E93A87B, 0x00004000 -data8 0x83DD195280A382FB, 0x00004000 -data8 0x82EA3D7FA4CB8C9E, 0x00004000 -data8 0x821B247C6861D0A8, 0x00004000 -data8 0x816EBED163E8D244, 0x00004000 -data8 0x80E42D9127E4CFC6, 0x00004000 -data8 0x807ABF8D28E64AFD, 0x00004000 -data8 0x8031EF26863B4FD8, 0x00004000 -data8 0x800960ADAE8C11FD, 0x00004000 -data8 0x8000E1475FDBEC21, 0x00004000 -data8 0x80186650A07791FA, 0x00004000 -LOCAL_OBJECT_END(tanl_table_scim1) - -Arg = f8 -Save_Norm_Arg = f8 // For input to reduction routine -Result = f8 -r = f8 // For output from reduction routine -c = f9 // For output from reduction routine -U_2 = f10 -rsq = f11 -C_hi = f12 -C_lo = f13 -T_hi = f14 -T_lo = f15 - -d_1 = f33 -N_0 = f34 -tail = f35 -tanx = f36 -Cx = f37 -Sx = f38 -sgn_r = f39 -CORR = f40 -P = f41 -D = f42 -ArgPrime = f43 -P_0 = f44 - -P2_1 = f45 -P2_2 = f46 -P2_3 = f47 - -P1_1 = f45 -P1_2 = f46 -P1_3 = f47 - -P1_4 = f48 -P1_5 = f49 -P1_6 = f50 -P1_7 = f51 -P1_8 = f52 -P1_9 = f53 - -x = f56 -xsq = f57 -Tx = f58 -Tx1 = f59 -Set = f60 -poly1 = f61 -poly2 = f62 -Poly = f63 -Poly1 = f64 -Poly2 = f65 -r_to_the_8 = f66 -B = f67 -SC_inv = f68 -Pos_r = f69 -N_0_fix = f70 -d_2 = f71 -PI_BY_4 = f72 -TWO_TO_NEG14 = f74 -TWO_TO_NEG33 = f75 -NEGTWO_TO_NEG14 = f76 -NEGTWO_TO_NEG33 = f77 -two_by_PI = f78 -N = f79 -N_fix = f80 -P_1 = f81 -P_2 = f82 -P_3 = f83 -s_val = f84 -w = f85 -B_mask1 = f86 -B_mask2 = f87 -w2 = f88 -A = f89 -a = f90 -t = f91 -U_1 = f92 -NEGTWO_TO_NEG2 = f93 -TWO_TO_NEG2 = f94 -Q1_1 = f95 -Q1_2 = f96 -Q1_3 = f97 -Q1_4 = f98 -Q1_5 = f99 -Q1_6 = f100 -Q1_7 = f101 -Q1_8 = f102 -S_hi = f103 -S_lo = f104 -V_hi = f105 -V_lo = f106 -U_hi = f107 -U_lo = f108 -U_hiabs = f109 -V_hiabs = f110 -V = f111 -Inv_P_0 = f112 - -FR_inv_pi_2to63 = f113 -FR_rshf_2to64 = f114 -FR_2tom64 = f115 -FR_rshf = f116 -Norm_Arg = f117 -Abs_Arg = f118 -TWO_TO_NEG65 = f119 -fp_tmp = f120 -mOne = f121 - -GR_SAVE_B0 = r33 -GR_SAVE_GP = r34 -GR_SAVE_PFS = r35 -table_base = r36 -table_ptr1 = r37 -table_ptr2 = r38 -table_ptr3 = r39 -lookup = r40 -N_fix_gr = r41 -GR_exp_2tom2 = r42 -GR_exp_2tom65 = r43 -exp_r = r44 -sig_r = r45 -bmask1 = r46 -table_offset = r47 -bmask2 = r48 -gr_tmp = r49 -cot_flag = r50 - -GR_sig_inv_pi = r51 -GR_rshf_2to64 = r52 -GR_exp_2tom64 = r53 -GR_rshf = r54 -GR_exp_2_to_63 = r55 -GR_exp_2_to_24 = r56 -GR_signexp_x = r57 -GR_exp_x = r58 -GR_exp_mask = r59 -GR_exp_2tom14 = r60 -GR_exp_m2tom14 = r61 -GR_exp_2tom33 = r62 -GR_exp_m2tom33 = r63 - -GR_SAVE_B0 = r64 -GR_SAVE_PFS = r65 -GR_SAVE_GP = r66 - -GR_Parameter_X = r67 -GR_Parameter_Y = r68 -GR_Parameter_RESULT = r69 -GR_Parameter_Tag = r70 - - -.section .text -.global __libm_tanl# -.global __libm_cotl# - -.proc __libm_cotl# -__libm_cotl: -.endp __libm_cotl# -LOCAL_LIBM_ENTRY(cotl) - -{ .mlx - alloc r32 = ar.pfs, 0,35,4,0 - movl GR_sig_inv_pi = 0xa2f9836e4e44152a // significand of 1/pi -} -{ .mlx - mov GR_exp_mask = 0x1ffff // Exponent mask - movl GR_rshf_2to64 = 0x47e8000000000000 // 1.1000 2^(63+64) -} -;; - -// Check for NatVals, Infs , NaNs, and Zeros -{ .mfi - getf.exp GR_signexp_x = Arg // Get sign and exponent of x - fclass.m p6,p0 = Arg, 0x1E7 // Test for natval, nan, inf, zero - mov cot_flag = 0x1 -} -{ .mfb - addl table_base = @ltoff(TANL_BASE_CONSTANTS), gp // Pointer to table ptr - fnorm.s1 Norm_Arg = Arg // Normalize x - br.cond.sptk COMMON_PATH -};; - -LOCAL_LIBM_END(cotl) - - -.proc __libm_tanl# -__libm_tanl: -.endp __libm_tanl# -GLOBAL_IEEE754_ENTRY(tanl) - -{ .mlx - alloc r32 = ar.pfs, 0,35,4,0 - movl GR_sig_inv_pi = 0xa2f9836e4e44152a // significand of 1/pi -} -{ .mlx - mov GR_exp_mask = 0x1ffff // Exponent mask - movl GR_rshf_2to64 = 0x47e8000000000000 // 1.1000 2^(63+64) -} -;; - -// Check for NatVals, Infs , NaNs, and Zeros -{ .mfi - getf.exp GR_signexp_x = Arg // Get sign and exponent of x - fclass.m p6,p0 = Arg, 0x1E7 // Test for natval, nan, inf, zero - mov cot_flag = 0x0 -} -{ .mfi - addl table_base = @ltoff(TANL_BASE_CONSTANTS), gp // Pointer to table ptr - fnorm.s1 Norm_Arg = Arg // Normalize x - nop.i 0 -};; - -// Common path for both tanl and cotl -COMMON_PATH: -{ .mfi - setf.sig FR_inv_pi_2to63 = GR_sig_inv_pi // Form 1/pi * 2^63 - fclass.m p9, p0 = Arg, 0x0b // Test x denormal - mov GR_exp_2tom64 = 0xffff - 64 // Scaling constant to compute N -} -{ .mlx - setf.d FR_rshf_2to64 = GR_rshf_2to64 // Form const 1.1000 * 2^(63+64) - movl GR_rshf = 0x43e8000000000000 // Form const 1.1000 * 2^63 -} -;; - -// Check for everything - if false, then must be pseudo-zero or pseudo-nan. -// Branch out to deal with special values. -{ .mfi - addl gr_tmp = -1,r0 - fclass.nm p7,p0 = Arg, 0x1FF // Test x unsupported - mov GR_exp_2_to_63 = 0xffff + 63 // Exponent of 2^63 -} -{ .mfb - ld8 table_base = [table_base] // Get pointer to constant table - fms.s1 mOne = f0, f0, f1 -(p6) br.cond.spnt TANL_SPECIAL // Branch if x natval, nan, inf, zero -} -;; - -{ .mmb - setf.sig fp_tmp = gr_tmp // Make a constant so fmpy produces inexact - mov GR_exp_2_to_24 = 0xffff + 24 // Exponent of 2^24 -(p9) br.cond.spnt TANL_DENORMAL // Branch if x denormal -} -;; - -TANL_COMMON: -// Return to here if x denormal -// -// Do fcmp to generate Denormal exception -// - can't do FNORM (will generate Underflow when U is unmasked!) -// Branch out to deal with unsupporteds values. -{ .mfi - setf.exp FR_2tom64 = GR_exp_2tom64 // Form 2^-64 for scaling N_float - fcmp.eq.s0 p0, p6 = Arg, f1 // Dummy to flag denormals - add table_ptr1 = 0, table_base // Point to tanl_table_1 -} -{ .mib - setf.d FR_rshf = GR_rshf // Form right shift const 1.1000 * 2^63 - add table_ptr2 = 80, table_base // Point to tanl_table_2 -(p7) br.cond.spnt TANL_UNSUPPORTED // Branch if x unsupported type -} -;; - -{ .mfi - and GR_exp_x = GR_exp_mask, GR_signexp_x // Get exponent of x - fmpy.s1 Save_Norm_Arg = Norm_Arg, f1 // Save x if large arg reduction - dep.z bmask1 = 0x7c, 56, 8 // Form mask to get 5 msb of r - // bmask1 = 0x7c00000000000000 -} -;; - -// -// Decide about the paths to take: -// Set PR_6 if |Arg| >= 2**63 -// Set PR_9 if |Arg| < 2**24 - CASE 1 OR 2 -// OTHERWISE Set PR_8 - CASE 3 OR 4 -// -// Branch out if the magnitude of the input argument is >= 2^63 -// - do this branch before the next. -{ .mfi - ldfe two_by_PI = [table_ptr1],16 // Load 2/pi - nop.f 999 - dep.z bmask2 = 0x41, 57, 7 // Form mask to OR to produce B - // bmask2 = 0x8200000000000000 -} -{ .mib - ldfe PI_BY_4 = [table_ptr2],16 // Load pi/4 - cmp.ge p6,p0 = GR_exp_x, GR_exp_2_to_63 // Is |x| >= 2^63 -(p6) br.cond.spnt TANL_ARG_TOO_LARGE // Branch if |x| >= 2^63 -} -;; - -{ .mmi - ldfe P_0 = [table_ptr1],16 // Load P_0 - ldfe Inv_P_0 = [table_ptr2],16 // Load Inv_P_0 - nop.i 999 -} -;; - -{ .mfi - ldfe P_1 = [table_ptr1],16 // Load P_1 - fmerge.s Abs_Arg = f0, Norm_Arg // Get |x| - mov GR_exp_m2tom33 = 0x2ffff - 33 // Form signexp of -2^-33 -} -{ .mfi - ldfe d_1 = [table_ptr2],16 // Load d_1 for 2^24 <= |x| < 2^63 - nop.f 999 - mov GR_exp_2tom33 = 0xffff - 33 // Form signexp of 2^-33 -} -;; - -{ .mmi - ldfe P_2 = [table_ptr1],16 // Load P_2 - ldfe d_2 = [table_ptr2],16 // Load d_2 for 2^24 <= |x| < 2^63 - cmp.ge p8,p0 = GR_exp_x, GR_exp_2_to_24 // Is |x| >= 2^24 -} -;; - -// Use special scaling to right shift so N=Arg * 2/pi is in rightmost bits -// Branch to Cases 3 or 4 if Arg <= -2**24 or Arg >= 2**24 -{ .mfb - ldfe P_3 = [table_ptr1],16 // Load P_3 - fma.s1 N_fix = Norm_Arg, FR_inv_pi_2to63, FR_rshf_2to64 -(p8) br.cond.spnt TANL_LARGER_ARG // Branch if 2^24 <= |x| < 2^63 -} -;; - -// Here if 0 < |x| < 2^24 -// ARGUMENT REDUCTION CODE - CASE 1 and 2 -// -{ .mmf - setf.exp TWO_TO_NEG33 = GR_exp_2tom33 // Form 2^-33 - setf.exp NEGTWO_TO_NEG33 = GR_exp_m2tom33 // Form -2^-33 - fmerge.s r = Norm_Arg,Norm_Arg // Assume r=x, ok if |x| < pi/4 -} -;; - -// -// If |Arg| < pi/4, set PR_8, else pi/4 <=|Arg| < 2^24 - set PR_9. -// -// Case 2: Convert integer N_fix back to normalized floating-point value. -{ .mfi - getf.sig sig_r = Norm_Arg // Get sig_r if 1/4 <= |x| < pi/4 - fcmp.lt.s1 p8,p9= Abs_Arg,PI_BY_4 // Test |x| < pi/4 - mov GR_exp_2tom2 = 0xffff - 2 // Form signexp of 2^-2 -} -{ .mfi - ldfps TWO_TO_NEG2, NEGTWO_TO_NEG2 = [table_ptr2] // Load 2^-2, -2^-2 - fms.s1 N = N_fix, FR_2tom64, FR_rshf // Use scaling to get N floated - mov N_fix_gr = r0 // Assume N=0, ok if |x| < pi/4 -} -;; - -// -// Case 1: Is |r| < 2**(-2). -// Arg is the same as r in this case. -// r = Arg -// c = 0 -// -// Case 2: Place integer part of N in GP register. -{ .mfi -(p9) getf.sig N_fix_gr = N_fix - fmerge.s c = f0, f0 // Assume c=0, ok if |x| < pi/4 - cmp.lt p10, p0 = GR_exp_x, GR_exp_2tom2 // Test if |x| < 1/4 -} -;; - -{ .mfi - setf.sig B_mask1 = bmask1 // Form mask to get 5 msb of r - nop.f 999 - mov exp_r = GR_exp_x // Get exp_r if 1/4 <= |x| < pi/4 -} -{ .mbb - setf.sig B_mask2 = bmask2 // Form mask to form B from r -(p10) br.cond.spnt TANL_SMALL_R // Branch if 0 < |x| < 1/4 -(p8) br.cond.spnt TANL_NORMAL_R // Branch if 1/4 <= |x| < pi/4 -} -;; - -// Here if pi/4 <= |x| < 2^24 -// -// Case 1: PR_3 is only affected when PR_1 is set. -// -// -// Case 2: w = N * P_2 -// Case 2: s_val = -N * P_1 + Arg -// - -{ .mfi - nop.m 999 - fnma.s1 s_val = N, P_1, Norm_Arg - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s1 w = N, P_2 // w = N * P_2 for |s| >= 2^-33 - nop.i 999 -} -;; - -// Case 2_reduce: w = N * P_3 (change sign) -{ .mfi - nop.m 999 - fmpy.s1 w2 = N, P_3 // w = N * P_3 for |s| < 2^-33 - nop.i 999 -} -;; - -// Case 1_reduce: r = s + w (change sign) -{ .mfi - nop.m 999 - fsub.s1 r = s_val, w // r = s_val - w for |s| >= 2^-33 - nop.i 999 -} -;; - -// Case 2_reduce: U_1 = N * P_2 + w -{ .mfi - nop.m 999 - fma.s1 U_1 = N, P_2, w2 // U_1 = N * P_2 + w for |s| < 2^-33 - nop.i 999 -} -;; - -// -// Decide between case_1 and case_2 reduce: -// Case 1_reduce: |s| >= 2**(-33) -// Case 2_reduce: |s| < 2**(-33) -// -{ .mfi - nop.m 999 - fcmp.lt.s1 p9, p8 = s_val, TWO_TO_NEG33 - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p9) fcmp.gt.s1 p9, p8 = s_val, NEGTWO_TO_NEG33 - nop.i 999 -} -;; - -// Case 1_reduce: c = s - r -{ .mfi - nop.m 999 - fsub.s1 c = s_val, r // c = s_val - r for |s| >= 2^-33 - nop.i 999 -} -;; - -// Case 2_reduce: r is complete here - continue to calculate c . -// r = s - U_1 -{ .mfi - nop.m 999 -(p9) fsub.s1 r = s_val, U_1 - nop.i 999 -} -{ .mfi - nop.m 999 -(p9) fms.s1 U_2 = N, P_2, U_1 - nop.i 999 -} -;; - -// -// Case 1_reduce: Is |r| < 2**(-2), if so set PR_10 -// else set PR_13. -// - -{ .mfi - nop.m 999 - fand B = B_mask1, r - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fcmp.lt.unc.s1 p10, p13 = r, TWO_TO_NEG2 - nop.i 999 -} -;; - -{ .mfi -(p8) getf.sig sig_r = r // Get signif of r if |s| >= 2^-33 - nop.f 999 - nop.i 999 -} -;; - -{ .mfi -(p8) getf.exp exp_r = r // Extract signexp of r if |s| >= 2^-33 -(p10) fcmp.gt.s1 p10, p13 = r, NEGTWO_TO_NEG2 - nop.i 999 -} -;; - -// Case 1_reduce: c is complete here. -// Case 1: Branch to SMALL_R or NORMAL_R. -// c = c + w (w has not been negated.) -{ .mfi - nop.m 999 -(p8) fsub.s1 c = c, w // c = c - w for |s| >= 2^-33 - nop.i 999 -} -{ .mbb - nop.m 999 -(p10) br.cond.spnt TANL_SMALL_R // Branch if pi/4 < |x| < 2^24 and |r|<1/4 -(p13) br.cond.sptk TANL_NORMAL_R_A // Branch if pi/4 < |x| < 2^24 and |r|>=1/4 -} -;; - - -// Here if pi/4 < |x| < 2^24 and |s| < 2^-33 -// -// Is i_1 = lsb of N_fix_gr even or odd? -// if i_1 == 0, set p11, else set p12. -// -{ .mfi - nop.m 999 - fsub.s1 s_val = s_val, r - add N_fix_gr = N_fix_gr, cot_flag // N = N + 1 (for cotl) -} -{ .mfi - nop.m 999 -// -// Case 2_reduce: -// U_2 = N * P_2 - U_1 -// Not needed until later. -// - fadd.s1 U_2 = U_2, w2 -// -// Case 2_reduce: -// s = s - r -// U_2 = U_2 + w -// - nop.i 999 -} -;; - -// -// Case 2_reduce: -// c = c - U_2 -// c is complete here -// Argument reduction ends here. -// -{ .mfi - nop.m 999 - fmpy.s1 rsq = r, r - tbit.z p11, p12 = N_fix_gr, 0 ;; // Set p11 if N even, p12 if odd -} - -{ .mfi - nop.m 999 -(p12) frcpa.s1 S_hi,p0 = f1, r - nop.i 999 -} -{ .mfi - nop.m 999 - fsub.s1 c = s_val, U_1 - nop.i 999 -} -;; - -{ .mmi - add table_ptr1 = 160, table_base ;; // Point to tanl_table_p1 - ldfe P1_1 = [table_ptr1],144 - nop.i 999 ;; -} -// -// Load P1_1 and point to Q1_1 . -// -{ .mfi - ldfe Q1_1 = [table_ptr1] -// -// N even: rsq = r * Z -// N odd: S_hi = frcpa(r) -// -(p12) fmerge.ns S_hi = S_hi, S_hi - nop.i 999 -} -{ .mfi - nop.m 999 -// -// Case 2_reduce: -// c = s - U_1 -// -(p9) fsub.s1 c = c, U_2 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N odd: Change sign of S_hi -// -(p11) fmpy.s1 rsq = rsq, P1_1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: rsq = rsq * P1_1 -// N odd: poly1 = 1.0 + S_hi * r 16 bits partial account for necessary -// -(p11) fma.s1 Poly = r, rsq, c - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: Poly = c + r * rsq -// N odd: S_hi = S_hi + S_hi*poly1 16 bits account for necessary -// -(p12) fma.s1 poly1 = S_hi, r, f1 -(p11) tbit.z.unc p14, p15 = cot_flag, 0 ;; // p14=1 for tanl; p15=1 for cotl -} -{ .mfi - nop.m 999 -// -// N even: Result = Poly + r -// N odd: poly1 = 1.0 + S_hi * r 32 bits partial -// -(p14) fadd.s0 Result = r, Poly // for tanl - nop.i 999 -} -{ .mfi - nop.m 999 -(p15) fms.s0 Result = r, mOne, Poly // for cotl - nop.i 999 -} -;; - -{ .mfi - nop.m 999 -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: Result1 = Result + r -// N odd: S_hi = S_hi * poly1 + S_hi 32 bits -// -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * r + 1.0 64 bits partial -// -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * poly + 1.0 64 bits -// -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * r + 1.0 -// -(p12) fma.s1 poly1 = S_hi, c, poly1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * c + poly1 -// -(p12) fmpy.s1 S_lo = S_hi, poly1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N odd: S_lo = S_hi * poly1 -// -(p12) fma.s1 S_lo = Q1_1, r, S_lo -(p12) tbit.z.unc p14, p15 = cot_flag, 0 // p14=1 for tanl; p15=1 for cotl -} -{ .mfi - nop.m 999 -// -// N odd: Result = S_hi + S_lo -// - fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N odd: S_lo = S_lo + Q1_1 * r -// -(p14) fadd.s0 Result = S_hi, S_lo // for tanl - nop.i 999 -} -{ .mfb - nop.m 999 -(p15) fms.s0 Result = S_hi, mOne, S_lo // for cotl - br.ret.sptk b0 ;; // Exit for pi/4 <= |x| < 2^24 and |s| < 2^-33 -} - - -TANL_LARGER_ARG: -// Here if 2^24 <= |x| < 2^63 -// -// ARGUMENT REDUCTION CODE - CASE 3 and 4 -// - -{ .mmf - mov GR_exp_2tom14 = 0xffff - 14 // Form signexp of 2^-14 - mov GR_exp_m2tom14 = 0x2ffff - 14 // Form signexp of -2^-14 - fmpy.s1 N_0 = Norm_Arg, Inv_P_0 -} -;; - -{ .mmi - setf.exp TWO_TO_NEG14 = GR_exp_2tom14 // Form 2^-14 - setf.exp NEGTWO_TO_NEG14 = GR_exp_m2tom14// Form -2^-14 - nop.i 999 -} -;; - - -// -// Adjust table_ptr1 to beginning of table. -// N_0 = Arg * Inv_P_0 -// -{ .mmi - add table_ptr2 = 144, table_base ;; // Point to 2^-2 - ldfps TWO_TO_NEG2, NEGTWO_TO_NEG2 = [table_ptr2] - nop.i 999 -} -;; - -// -// N_0_fix = integer part of N_0 . -// -// -// Make N_0 the integer part. -// -{ .mfi - nop.m 999 - fcvt.fx.s1 N_0_fix = N_0 - nop.i 999 ;; -} -{ .mfi - setf.sig B_mask1 = bmask1 // Form mask to get 5 msb of r - fcvt.xf N_0 = N_0_fix - nop.i 999 ;; -} -{ .mfi - setf.sig B_mask2 = bmask2 // Form mask to form B from r - fnma.s1 ArgPrime = N_0, P_0, Norm_Arg - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s1 w = N_0, d_1 - nop.i 999 ;; -} -// -// ArgPrime = -N_0 * P_0 + Arg -// w = N_0 * d_1 -// -// -// N = ArgPrime * 2/pi -// -// fcvt.fx.s1 N_fix = N -// Use special scaling to right shift so N=Arg * 2/pi is in rightmost bits -// Branch to Cases 3 or 4 if Arg <= -2**24 or Arg >= 2**24 -{ .mfi - nop.m 999 - fma.s1 N_fix = ArgPrime, FR_inv_pi_2to63, FR_rshf_2to64 - - nop.i 999 ;; -} -// Convert integer N_fix back to normalized floating-point value. -{ .mfi - nop.m 999 - fms.s1 N = N_fix, FR_2tom64, FR_rshf // Use scaling to get N floated - nop.i 999 -} -;; - -// -// N is the integer part of the reduced-reduced argument. -// Put the integer in a GP register. -// -{ .mfi - getf.sig N_fix_gr = N_fix - nop.f 999 - nop.i 999 -} -;; - -// -// s_val = -N*P_1 + ArgPrime -// w = -N*P_2 + w -// -{ .mfi - nop.m 999 - fnma.s1 s_val = N, P_1, ArgPrime - nop.i 999 -} -{ .mfi - nop.m 999 - fnma.s1 w = N, P_2, w - nop.i 999 -} -;; - -// Case 4: V_hi = N * P_2 -// Case 4: U_hi = N_0 * d_1 -{ .mfi - nop.m 999 - fmpy.s1 V_hi = N, P_2 // V_hi = N * P_2 for |s| < 2^-14 - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s1 U_hi = N_0, d_1 // U_hi = N_0 * d_1 for |s| < 2^-14 - nop.i 999 -} -;; - -// Case 3: r = s_val + w (Z complete) -// Case 4: w = N * P_3 -{ .mfi - nop.m 999 - fadd.s1 r = s_val, w // r = s_val + w for |s| >= 2^-14 - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s1 w2 = N, P_3 // w = N * P_3 for |s| < 2^-14 - nop.i 999 -} -;; - -// Case 4: A = U_hi + V_hi -// Note: Worry about switched sign of V_hi, so subtract instead of add. -// Case 4: V_lo = -N * P_2 - V_hi (U_hi is in place of V_hi in writeup) -// Note: the (-) is still missing for V_hi. -{ .mfi - nop.m 999 - fsub.s1 A = U_hi, V_hi // A = U_hi - V_hi for |s| < 2^-14 - nop.i 999 -} -{ .mfi - nop.m 999 - fnma.s1 V_lo = N, P_2, V_hi // V_lo = V_hi - N * P_2 for |s| < 2^-14 - nop.i 999 -} -;; - -// Decide between case 3 and 4: -// Case 3: |s| >= 2**(-14) Set p10 -// Case 4: |s| < 2**(-14) Set p11 -// -// Case 4: U_lo = N_0 * d_1 - U_hi -{ .mfi - nop.m 999 - fms.s1 U_lo = N_0, d_1, U_hi // U_lo = N_0*d_1 - U_hi for |s| < 2^-14 - nop.i 999 -} -{ .mfi - nop.m 999 - fcmp.lt.s1 p11, p10 = s_val, TWO_TO_NEG14 - nop.i 999 -} -;; - -// Case 4: We need abs of both U_hi and V_hi - dont -// worry about switched sign of V_hi. -{ .mfi - nop.m 999 - fabs V_hiabs = V_hi // |V_hi| for |s| < 2^-14 - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fcmp.gt.s1 p11, p10 = s_val, NEGTWO_TO_NEG14 - nop.i 999 -} -;; - -// Case 3: c = s_val - r -{ .mfi - nop.m 999 - fabs U_hiabs = U_hi // |U_hi| for |s| < 2^-14 - nop.i 999 -} -{ .mfi - nop.m 999 - fsub.s1 c = s_val, r // c = s_val - r for |s| >= 2^-14 - nop.i 999 -} -;; - -// For Case 3, |s| >= 2^-14, determine if |r| < 1/4 -// -// Case 4: C_hi = s_val + A -// -{ .mfi - nop.m 999 -(p11) fadd.s1 C_hi = s_val, A // C_hi = s_val + A for |s| < 2^-14 - nop.i 999 -} -{ .mfi - nop.m 999 -(p10) fcmp.lt.unc.s1 p14, p15 = r, TWO_TO_NEG2 - nop.i 999 -} -;; - -{ .mfi - getf.sig sig_r = r // Get signif of r if |s| >= 2^-33 - fand B = B_mask1, r - nop.i 999 -} -;; - -// Case 4: t = U_lo + V_lo -{ .mfi - getf.exp exp_r = r // Extract signexp of r if |s| >= 2^-33 -(p11) fadd.s1 t = U_lo, V_lo // t = U_lo + V_lo for |s| < 2^-14 - nop.i 999 -} -{ .mfi - nop.m 999 -(p14) fcmp.gt.s1 p14, p15 = r, NEGTWO_TO_NEG2 - nop.i 999 -} -;; - -// Case 3: c = (s - r) + w (c complete) -{ .mfi - nop.m 999 -(p10) fadd.s1 c = c, w // c = c + w for |s| >= 2^-14 - nop.i 999 -} -{ .mbb - nop.m 999 -(p14) br.cond.spnt TANL_SMALL_R // Branch if 2^24 <= |x| < 2^63 and |r|< 1/4 -(p15) br.cond.sptk TANL_NORMAL_R_A // Branch if 2^24 <= |x| < 2^63 and |r|>=1/4 -} -;; - - -// Here if 2^24 <= |x| < 2^63 and |s| < 2^-14 >>>>>>> Case 4. -// -// Case 4: Set P_12 if U_hiabs >= V_hiabs -// Case 4: w = w + N_0 * d_2 -// Note: the (-) is now incorporated in w . -{ .mfi - add table_ptr1 = 160, table_base // Point to tanl_table_p1 - fcmp.ge.unc.s1 p12, p13 = U_hiabs, V_hiabs - nop.i 999 -} -{ .mfi - nop.m 999 - fms.s1 w2 = N_0, d_2, w2 - nop.i 999 -} -;; - -// Case 4: C_lo = s_val - C_hi -{ .mfi - ldfe P1_1 = [table_ptr1], 16 // Load P1_1 - fsub.s1 C_lo = s_val, C_hi - nop.i 999 -} -;; - -// -// Case 4: a = U_hi - A -// a = V_hi - A (do an add to account for missing (-) on V_hi -// -{ .mfi - ldfe P1_2 = [table_ptr1], 128 // Load P1_2 -(p12) fsub.s1 a = U_hi, A - nop.i 999 -} -{ .mfi - nop.m 999 -(p13) fadd.s1 a = V_hi, A - nop.i 999 -} -;; - -// Case 4: t = U_lo + V_lo + w -{ .mfi - ldfe Q1_1 = [table_ptr1], 16 // Load Q1_1 - fadd.s1 t = t, w2 - nop.i 999 -} -;; - -// Case 4: a = (U_hi - A) + V_hi -// a = (V_hi - A) + U_hi -// In each case account for negative missing form V_hi . -// -{ .mfi - ldfe Q1_2 = [table_ptr1], 16 // Load Q1_2 -(p12) fsub.s1 a = a, V_hi - nop.i 999 -} -{ .mfi - nop.m 999 -(p13) fsub.s1 a = U_hi, a - nop.i 999 -} -;; - -// -// Case 4: C_lo = (s_val - C_hi) + A -// -{ .mfi - nop.m 999 - fadd.s1 C_lo = C_lo, A - nop.i 999 ;; -} -// -// Case 4: t = t + a -// -{ .mfi - nop.m 999 - fadd.s1 t = t, a - nop.i 999 -} -;; - -// Case 4: C_lo = C_lo + t -// Case 4: r = C_hi + C_lo -{ .mfi - nop.m 999 - fadd.s1 C_lo = C_lo, t - nop.i 999 -} -;; - -{ .mfi - nop.m 999 - fadd.s1 r = C_hi, C_lo - nop.i 999 -} -;; - -// -// Case 4: c = C_hi - r -// -{ .mfi - nop.m 999 - fsub.s1 c = C_hi, r - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s1 rsq = r, r - add N_fix_gr = N_fix_gr, cot_flag // N = N + 1 (for cotl) -} -;; - -// Case 4: c = c + C_lo finished. -// -// Is i_1 = lsb of N_fix_gr even or odd? -// if i_1 == 0, set PR_11, else set PR_12. -// -{ .mfi - nop.m 999 - fadd.s1 c = c , C_lo - tbit.z p11, p12 = N_fix_gr, 0 -} -;; - -// r and c have been computed. -{ .mfi - nop.m 999 -(p12) frcpa.s1 S_hi, p0 = f1, r - nop.i 999 -} -{ .mfi - nop.m 999 -// -// N odd: Change sign of S_hi -// -(p11) fma.s1 Poly = rsq, P1_2, P1_1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fma.s1 P = rsq, Q1_2, Q1_1 - nop.i 999 -} -{ .mfi - nop.m 999 -// -// N odd: Result = S_hi + S_lo (User supplied rounding mode for C1) -// - fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: rsq = r * r -// N odd: S_hi = frcpa(r) -// -(p12) fmerge.ns S_hi = S_hi, S_hi - nop.i 999 -} -{ .mfi - nop.m 999 -// -// N even: rsq = rsq * P1_2 + P1_1 -// N odd: poly1 = 1.0 + S_hi * r 16 bits partial account for necessary -// -(p11) fmpy.s1 Poly = rsq, Poly - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fma.s1 poly1 = S_hi, r,f1 -(p11) tbit.z.unc p14, p15 = cot_flag, 0 // p14=1 for tanl; p15=1 for cotl -} -{ .mfi - nop.m 999 -// -// N even: Poly = Poly * rsq -// N odd: S_hi = S_hi + S_hi*poly1 16 bits account for necessary -// -(p11) fma.s1 Poly = r, Poly, c - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 -} -{ .mfi - nop.m 999 -// -// N odd: S_hi = S_hi * poly1 + S_hi 32 bits -// -(p14) fadd.s0 Result = r, Poly // for tanl - nop.i 999 ;; -} - -.pred.rel "mutex",p15,p12 -{ .mfi - nop.m 999 -(p15) fms.s0 Result = r, mOne, Poly // for cotl - nop.i 999 -} -{ .mfi - nop.m 999 -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: Poly = Poly * r + c -// N odd: poly1 = 1.0 + S_hi * r 32 bits partial -// -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: Result = Poly + r (Rounding mode S0) -// N odd: poly1 = S_hi * r + 1.0 64 bits partial -// -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * poly + S_hi 64 bits -// -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * r + 1.0 -// -(p12) fma.s1 poly1 = S_hi, c, poly1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * c + poly1 -// -(p12) fmpy.s1 S_lo = S_hi, poly1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N odd: S_lo = S_hi * poly1 -// -(p12) fma.s1 S_lo = P, r, S_lo -(p12) tbit.z.unc p14, p15 = cot_flag, 0 ;; // p14=1 for tanl; p15=1 for cotl -} - -{ .mfi - nop.m 999 -(p14) fadd.s0 Result = S_hi, S_lo // for tanl - nop.i 999 -} -{ .mfb - nop.m 999 -// -// N odd: S_lo = S_lo + r * P -// -(p15) fms.s0 Result = S_hi, mOne, S_lo // for cotl - br.ret.sptk b0 ;; // Exit for 2^24 <= |x| < 2^63 and |s| < 2^-14 -} - - -TANL_SMALL_R: -// Here if |r| < 1/4 -// r and c have been computed. -// ***************************************************************** -// ***************************************************************** -// ***************************************************************** -// N odd: S_hi = frcpa(r) -// Get [i_1] - lsb of N_fix_gr. Set p11 if N even, p12 if N odd. -// N even: rsq = r * r -{ .mfi - add table_ptr1 = 160, table_base // Point to tanl_table_p1 - frcpa.s1 S_hi, p0 = f1, r // S_hi for N odd - add N_fix_gr = N_fix_gr, cot_flag // N = N + 1 (for cotl) -} -{ .mfi - add table_ptr2 = 400, table_base // Point to Q1_7 - fmpy.s1 rsq = r, r - nop.i 999 -} -;; - -{ .mmi - ldfe P1_1 = [table_ptr1], 16 -;; - ldfe P1_2 = [table_ptr1], 16 - tbit.z p11, p12 = N_fix_gr, 0 -} -;; - - -{ .mfi - ldfe P1_3 = [table_ptr1], 96 - nop.f 999 - nop.i 999 -} -;; - -{ .mfi -(p11) ldfe P1_9 = [table_ptr1], -16 -(p12) fmerge.ns S_hi = S_hi, S_hi - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fmpy.s1 r_to_the_8 = rsq, rsq - nop.i 999 -} -;; - -// -// N even: Poly2 = P1_7 + Poly2 * rsq -// N odd: poly2 = Q1_5 + poly2 * rsq -// -{ .mfi -(p11) ldfe P1_8 = [table_ptr1], -16 -(p11) fadd.s1 CORR = rsq, f1 - nop.i 999 -} -;; - -// -// N even: Poly1 = P1_2 + P1_3 * rsq -// N odd: poly1 = 1.0 + S_hi * r -// 16 bits partial account for necessary (-1) -// -{ .mmi -(p11) ldfe P1_7 = [table_ptr1], -16 -;; -(p11) ldfe P1_6 = [table_ptr1], -16 - nop.i 999 -} -;; - -// -// N even: Poly1 = P1_1 + Poly1 * rsq -// N odd: S_hi = S_hi + S_hi * poly1) 16 bits account for necessary -// -// -// N even: Poly2 = P1_5 + Poly2 * rsq -// N odd: poly2 = Q1_3 + poly2 * rsq -// -{ .mfi -(p11) ldfe P1_5 = [table_ptr1], -16 -(p11) fmpy.s1 r_to_the_8 = r_to_the_8, r_to_the_8 - nop.i 999 -} -{ .mfi - nop.m 999 -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 -} -;; - -// -// N even: Poly1 = Poly1 * rsq -// N odd: poly1 = 1.0 + S_hi * r 32 bits partial -// - -// -// N even: CORR = CORR * c -// N odd: S_hi = S_hi * poly1 + S_hi 32 bits -// - -// -// N even: Poly2 = P1_6 + Poly2 * rsq -// N odd: poly2 = Q1_4 + poly2 * rsq -// - -{ .mmf -(p11) ldfe P1_4 = [table_ptr1], -16 - nop.m 999 -(p11) fmpy.s1 CORR = CORR, c -} -;; - -{ .mfi - nop.m 999 -(p11) fma.s1 Poly1 = P1_3, rsq, P1_2 - nop.i 999 ;; -} -{ .mfi -(p12) ldfe Q1_7 = [table_ptr2], -16 -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 ;; -} -{ .mfi -(p12) ldfe Q1_6 = [table_ptr2], -16 -(p11) fma.s1 Poly2 = P1_9, rsq, P1_8 - nop.i 999 ;; -} -{ .mmi -(p12) ldfe Q1_5 = [table_ptr2], -16 ;; -(p12) ldfe Q1_4 = [table_ptr2], -16 - nop.i 999 ;; -} -{ .mfi -(p12) ldfe Q1_3 = [table_ptr2], -16 -// -// N even: Poly2 = P1_8 + P1_9 * rsq -// N odd: poly2 = Q1_6 + Q1_7 * rsq -// -(p11) fma.s1 Poly1 = Poly1, rsq, P1_1 - nop.i 999 ;; -} -{ .mfi -(p12) ldfe Q1_2 = [table_ptr2], -16 -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 ;; -} -{ .mfi -(p12) ldfe Q1_1 = [table_ptr2], -16 -(p11) fma.s1 Poly2 = Poly2, rsq, P1_7 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: CORR = rsq + 1 -// N even: r_to_the_8 = rsq * rsq -// -(p11) fmpy.s1 Poly1 = Poly1, rsq - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 -} -{ .mfi - nop.m 999 -(p12) fma.s1 poly2 = Q1_7, rsq, Q1_6 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p11) fma.s1 Poly2 = Poly2, rsq, P1_6 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 -} -{ .mfi - nop.m 999 -(p12) fma.s1 poly2 = poly2, rsq, Q1_5 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p11) fma.s1 Poly2= Poly2, rsq, P1_5 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fma.s1 S_hi = S_hi, poly1, S_hi - nop.i 999 -} -{ .mfi - nop.m 999 -(p12) fma.s1 poly2 = poly2, rsq, Q1_4 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: r_to_the_8 = r_to_the_8 * r_to_the_8 -// N odd: poly1 = S_hi * r + 1.0 64 bits partial -// -(p11) fma.s1 Poly2 = Poly2, rsq, P1_4 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: Poly = CORR + Poly * r -// N odd: P = Q1_1 + poly2 * rsq -// -(p12) fma.s1 poly1 = S_hi, r, f1 - nop.i 999 -} -{ .mfi - nop.m 999 -(p12) fma.s1 poly2 = poly2, rsq, Q1_3 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: Poly2 = P1_4 + Poly2 * rsq -// N odd: poly2 = Q1_2 + poly2 * rsq -// -(p11) fma.s1 Poly = Poly2, r_to_the_8, Poly1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fma.s1 poly1 = S_hi, c, poly1 - nop.i 999 -} -{ .mfi - nop.m 999 -(p12) fma.s1 poly2 = poly2, rsq, Q1_2 - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N even: Poly = Poly1 + Poly2 * r_to_the_8 -// N odd: S_hi = S_hi * poly1 + S_hi 64 bits -// -(p11) fma.s1 Poly = Poly, r, CORR - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: Result = r + Poly (User supplied rounding mode) -// N odd: poly1 = S_hi * c + poly1 -// -(p12) fmpy.s1 S_lo = S_hi, poly1 -(p11) tbit.z.unc p14, p15 = cot_flag, 0 // p14=1 for tanl; p15=1 for cotl -} -{ .mfi - nop.m 999 -(p12) fma.s1 P = poly2, rsq, Q1_1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N odd: poly1 = S_hi * r + 1.0 -// -// -// N odd: S_lo = S_hi * poly1 -// -(p14) fadd.s0 Result = Poly, r // for tanl - nop.i 999 -} -{ .mfi - nop.m 999 -(p15) fms.s0 Result = Poly, mOne, r // for cotl - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -// -// N odd: S_lo = Q1_1 * c + S_lo -// -(p12) fma.s1 S_lo = Q1_1, c, S_lo - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N odd: Result = S_lo + r * P -// -(p12) fma.s1 Result = P, r, S_lo -(p12) tbit.z.unc p14, p15 = cot_flag, 0 ;; // p14=1 for tanl; p15=1 for cotl -} - -// -// N odd: Result = Result + S_hi (user supplied rounding mode) -// -{ .mfi - nop.m 999 -(p14) fadd.s0 Result = Result, S_hi // for tanl - nop.i 999 -} -{ .mfb - nop.m 999 -(p15) fms.s0 Result = Result, mOne, S_hi // for cotl - br.ret.sptk b0 ;; // Exit |r| < 1/4 path -} - - -TANL_NORMAL_R: -// Here if 1/4 <= |x| < pi/4 or if |x| >= 2^63 and |r| >= 1/4 -// ******************************************************************* -// ******************************************************************* -// ******************************************************************* -// -// r and c have been computed. -// -{ .mfi - nop.m 999 - fand B = B_mask1, r - nop.i 999 -} -;; - -TANL_NORMAL_R_A: -// Enter here if pi/4 <= |x| < 2^63 and |r| >= 1/4 -// Get the 5 bits or r for the lookup. 1.xxxxx .... -{ .mmi - add table_ptr1 = 416, table_base // Point to tanl_table_p2 - mov GR_exp_2tom65 = 0xffff - 65 // Scaling constant for B - extr.u lookup = sig_r, 58, 5 -} -;; - -{ .mmi - ldfe P2_1 = [table_ptr1], 16 - setf.exp TWO_TO_NEG65 = GR_exp_2tom65 // 2^-65 for scaling B if exp_r=-2 - add N_fix_gr = N_fix_gr, cot_flag // N = N + 1 (for cotl) -} -;; - -.pred.rel "mutex",p11,p12 -// B = 2^63 * 1.xxxxx 100...0 -{ .mfi - ldfe P2_2 = [table_ptr1], 16 - for B = B_mask2, B - mov table_offset = 512 // Assume table offset is 512 -} -;; - -{ .mfi - ldfe P2_3 = [table_ptr1], 16 - fmerge.s Pos_r = f1, r - tbit.nz p8,p9 = exp_r, 0 -} -;; - -// Is B = 2** -2 or B= 2** -1? If 2**-1, then -// we want an offset of 512 for table addressing. -{ .mii - add table_ptr2 = 1296, table_base // Point to tanl_table_cm2 -(p9) shladd table_offset = lookup, 4, table_offset -(p8) shladd table_offset = lookup, 4, r0 -} -;; - -{ .mmi - add table_ptr1 = table_ptr1, table_offset // Point to T_hi - add table_ptr2 = table_ptr2, table_offset // Point to C_hi - add table_ptr3 = 2128, table_base // Point to tanl_table_scim2 -} -;; - -{ .mmi - ldfd T_hi = [table_ptr1], 8 // Load T_hi -;; - ldfd C_hi = [table_ptr2], 8 // Load C_hi - add table_ptr3 = table_ptr3, table_offset // Point to SC_inv -} -;; - -// -// x = |r| - B -// -// Convert B so it has the same exponent as Pos_r before subtracting -{ .mfi - ldfs T_lo = [table_ptr1] // Load T_lo -(p9) fnma.s1 x = B, FR_2tom64, Pos_r - nop.i 999 -} -{ .mfi - nop.m 999 -(p8) fnma.s1 x = B, TWO_TO_NEG65, Pos_r - nop.i 999 -} -;; - -{ .mfi - ldfs C_lo = [table_ptr2] // Load C_lo - nop.f 999 - nop.i 999 -} -;; - -{ .mfi - ldfe SC_inv = [table_ptr3] // Load SC_inv - fmerge.s sgn_r = r, f1 - tbit.z p11, p12 = N_fix_gr, 0 // p11 if N even, p12 if odd - -} -;; - -// -// xsq = x * x -// N even: Tx = T_hi * x -// -// N even: Tx1 = Tx + 1 -// N odd: Cx1 = 1 - Cx -// - -{ .mfi - nop.m 999 - fmpy.s1 xsq = x, x - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fmpy.s1 Tx = T_hi, x - nop.i 999 -} -;; - -// -// N odd: Cx = C_hi * x -// -{ .mfi - nop.m 999 -(p12) fmpy.s1 Cx = C_hi, x - nop.i 999 -} -;; -// -// N even and odd: P = P2_3 + P2_2 * xsq -// -{ .mfi - nop.m 999 - fma.s1 P = P2_3, xsq, P2_2 - nop.i 999 -} -{ .mfi - nop.m 999 -(p11) fadd.s1 Tx1 = Tx, f1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: D = C_hi - tanx -// N odd: D = T_hi + tanx -// -(p11) fmpy.s1 CORR = SC_inv, T_hi - nop.i 999 -} -{ .mfi - nop.m 999 - fmpy.s1 Sx = SC_inv, x - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fmpy.s1 CORR = SC_inv, C_hi - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fsub.s1 V_hi = f1, Cx - nop.i 999 ;; -} -{ .mfi - nop.m 999 - fma.s1 P = P, xsq, P2_1 - nop.i 999 -} -{ .mfi - nop.m 999 -// -// N even and odd: P = P2_1 + P * xsq -// -(p11) fma.s1 V_hi = Tx, Tx1, f1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: Result = sgn_r * tail + T_hi (user rounding mode for C1) -// N odd: Result = sgn_r * tail + C_hi (user rounding mode for C1) -// - fmpy.s0 fp_tmp = fp_tmp, fp_tmp // Dummy mult to set inexact - nop.i 999 ;; -} -{ .mfi - nop.m 999 - fmpy.s1 CORR = CORR, c - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fnma.s1 V_hi = Cx,V_hi,f1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: V_hi = Tx * Tx1 + 1 -// N odd: Cx1 = 1 - Cx * Cx1 -// - fmpy.s1 P = P, xsq - nop.i 999 -} -{ .mfi - nop.m 999 -// -// N even and odd: P = P * xsq -// -(p11) fmpy.s1 V_hi = V_hi, T_hi - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even and odd: tail = P * tail + V_lo -// -(p11) fmpy.s1 T_hi = sgn_r, T_hi - nop.i 999 ;; -} -{ .mfi - nop.m 999 - fmpy.s1 CORR = CORR, sgn_r - nop.i 999 ;; -} -{ .mfi - nop.m 999 -(p12) fmpy.s1 V_hi = V_hi,C_hi - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: V_hi = T_hi * V_hi -// N odd: V_hi = C_hi * V_hi -// - fma.s1 tanx = P, x, x - nop.i 999 -} -{ .mfi - nop.m 999 -(p12) fnmpy.s1 C_hi = sgn_r, C_hi - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: V_lo = 1 - V_hi + C_hi -// N odd: V_lo = 1 - V_hi + T_hi -// -(p11) fadd.s1 CORR = CORR, T_lo - nop.i 999 -} -{ .mfi - nop.m 999 -(p12) fsub.s1 CORR = CORR, C_lo - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even and odd: tanx = x + x * P -// N even and odd: Sx = SC_inv * x -// -(p11) fsub.s1 D = C_hi, tanx - nop.i 999 -} -{ .mfi - nop.m 999 -(p12) fadd.s1 D = T_hi, tanx - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N odd: CORR = SC_inv * C_hi -// N even: CORR = SC_inv * T_hi -// - fnma.s1 D = V_hi, D, f1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even and odd: D = 1 - V_hi * D -// N even and odd: CORR = CORR * c -// - fma.s1 V_hi = V_hi, D, V_hi - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even and odd: V_hi = V_hi + V_hi * D -// N even and odd: CORR = sgn_r * CORR -// -(p11) fnma.s1 V_lo = V_hi, C_hi, f1 - nop.i 999 -} -{ .mfi - nop.m 999 -(p12) fnma.s1 V_lo = V_hi, T_hi, f1 - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: CORR = COOR + T_lo -// N odd: CORR = CORR - C_lo -// -(p11) fma.s1 V_lo = tanx, V_hi, V_lo - tbit.nz p15, p0 = cot_flag, 0 // p15=1 if we compute cotl -} -{ .mfi - nop.m 999 -(p12) fnma.s1 V_lo = tanx, V_hi, V_lo - nop.i 999 ;; -} - -{ .mfi - nop.m 999 -(p15) fms.s1 T_hi = f0, f0, T_hi // to correct result's sign for cotl - nop.i 999 -} -{ .mfi - nop.m 999 -(p15) fms.s1 C_hi = f0, f0, C_hi // to correct result's sign for cotl - nop.i 999 -};; - -{ .mfi - nop.m 999 -(p15) fms.s1 sgn_r = f0, f0, sgn_r // to correct result's sign for cotl - nop.i 999 -};; - -{ .mfi - nop.m 999 -// -// N even: V_lo = V_lo + V_hi * tanx -// N odd: V_lo = V_lo - V_hi * tanx -// -(p11) fnma.s1 V_lo = C_lo, V_hi, V_lo - nop.i 999 -} -{ .mfi - nop.m 999 -(p12) fnma.s1 V_lo = T_lo, V_hi, V_lo - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: V_lo = V_lo - V_hi * C_lo -// N odd: V_lo = V_lo - V_hi * T_lo -// - fmpy.s1 V_lo = V_hi, V_lo - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even and odd: V_lo = V_lo * V_hi -// - fadd.s1 tail = V_hi, V_lo - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even and odd: tail = V_hi + V_lo -// - fma.s1 tail = tail, P, V_lo - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even: T_hi = sgn_r * T_hi -// N odd : C_hi = -sgn_r * C_hi -// - fma.s1 tail = tail, Sx, CORR - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even and odd: tail = Sx * tail + CORR -// - fma.s1 tail = V_hi, Sx, tail - nop.i 999 ;; -} -{ .mfi - nop.m 999 -// -// N even an odd: tail = Sx * V_hi + tail -// -(p11) fma.s0 Result = sgn_r, tail, T_hi - nop.i 999 -} -{ .mfb - nop.m 999 -(p12) fma.s0 Result = sgn_r, tail, C_hi - br.ret.sptk b0 ;; // Exit for 1/4 <= |r| < pi/4 -} - -TANL_DENORMAL: -// Here if x denormal -{ .mfb - getf.exp GR_signexp_x = Norm_Arg // Get sign and exponent of x - nop.f 999 - br.cond.sptk TANL_COMMON // Return to common code -} -;; - - -TANL_SPECIAL: -TANL_UNSUPPORTED: -// -// Code for NaNs, Unsupporteds, Infs, or +/- zero ? -// Invalid raised for Infs and SNaNs. -// - -{ .mfi - nop.m 999 - fmerge.s f10 = f8, f8 // Save input for error call - tbit.nz p6, p7 = cot_flag, 0 // p6=1 if we compute cotl -} -;; - -{ .mfi - nop.m 999 -(p6) fclass.m p6, p7 = f8, 0x7 // Test for zero (cotl only) - nop.i 999 -} -;; - -.pred.rel "mutex", p6, p7 -{ .mfi -(p6) mov GR_Parameter_Tag = 225 // (cotl) -(p6) frcpa.s0 f8, p0 = f1, f8 // cotl(+-0) = +-Inf - nop.i 999 -} -{ .mfb - nop.m 999 -(p7) fmpy.s0 f8 = f8, f0 -(p7) br.ret.sptk b0 -} -;; - -GLOBAL_IEEE754_END(tanl) - - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue - -// (1) -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; - -// (2) -{ .mmi - stfe [GR_Parameter_Y] = f1,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -// (3) -{ .mib - stfe [GR_Parameter_X] = f10 // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfe [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; - -// (4) -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) - -.type __libm_error_support#,@function -.global __libm_error_support# - - -// ******************************************************************* -// ******************************************************************* -// ******************************************************************* -// -// Special Code to handle very large argument case. -// Call int __libm_pi_by_2_reduce(x,r,c) for |arguments| >= 2**63 -// The interface is custom: -// On input: -// (Arg or x) is in f8 -// On output: -// r is in f8 -// c is in f9 -// N is in r8 -// We know also that __libm_pi_by_2_reduce preserves f10-15, f71-127. We -// use this to eliminate save/restore of key fp registers in this calling -// function. -// -// ******************************************************************* -// ******************************************************************* -// ******************************************************************* - -LOCAL_LIBM_ENTRY(__libm_callout) -TANL_ARG_TOO_LARGE: -.prologue -{ .mfi - add table_ptr2 = 144, table_base // Point to 2^-2 - nop.f 999 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -;; - -// Load 2^-2, -2^-2 -{ .mmi - ldfps TWO_TO_NEG2, NEGTWO_TO_NEG2 = [table_ptr2] - setf.sig B_mask1 = bmask1 // Form mask to get 5 msb of r -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; - -.body -// -// Call argument reduction with x in f8 -// Returns with N in r8, r in f8, c in f9 -// Assumes f71-127 are preserved across the call -// -{ .mib - setf.sig B_mask2 = bmask2 // Form mask to form B from r - mov GR_SAVE_GP=gp // Save gp - br.call.sptk b0=__libm_pi_by_2_reduce# -} -;; - -// -// Is |r| < 2**(-2) -// -{ .mfi - getf.sig sig_r = r // Extract significand of r - fcmp.lt.s1 p6, p0 = r, TWO_TO_NEG2 - mov gp = GR_SAVE_GP // Restore gp -} -;; - -{ .mfi - getf.exp exp_r = r // Extract signexp of r - nop.f 999 - mov b0 = GR_SAVE_B0 // Restore return address -} -;; - -// -// Get N_fix_gr -// -{ .mfi - mov N_fix_gr = r8 -(p6) fcmp.gt.unc.s1 p6, p0 = r, NEGTWO_TO_NEG2 - mov ar.pfs = GR_SAVE_PFS // Restore pfs -} -;; - -{ .mbb - nop.m 999 -(p6) br.cond.spnt TANL_SMALL_R // Branch if |r| < 1/4 - br.cond.sptk TANL_NORMAL_R // Branch if 1/4 <= |r| < pi/4 -} -;; - -LOCAL_LIBM_END(__libm_callout) - -.type __libm_pi_by_2_reduce#,@function -.global __libm_pi_by_2_reduce# diff --git a/sysdeps/ia64/fpu/s_trunc.S b/sysdeps/ia64/fpu/s_trunc.S deleted file mode 100644 index b9ad03b5a8..0000000000 --- a/sysdeps/ia64/fpu/s_trunc.S +++ /dev/null @@ -1,166 +0,0 @@ -.file "trunc.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 07/07/00 Created -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/20/03 Improved performance and reduced code size -//============================================================== - -// API -//============================================================== -// double trunc(double x) -//============================================================== - -// general input registers: -// r14 - r18 - -rExpBias = r14 -rSignexp = r15 -rExp = r16 -rExpMask = r17 -rBigexp = r18 - -// floating-point registers: -// f8 - f10 - -fXtruncInt = f9 -fNormX = f10 - -// predicate registers used: -// p6, p7 - -// Overview of operation -//============================================================== -// double trunc(double x) -// Return an integer value (represented as a double) less than or -// equal to x in magnitude. -// This is x rounded toward zero to an integral value. -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - -.section .text -GLOBAL_LIBM_ENTRY(trunc) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fcvt.fx.trunc.s1 fXtruncInt = f8 // Convert to int in significand - addl rBigexp = 0x10033, r0 // Set exponent at which is integer -} -{ .mfi - mov rExpBias = 0x0FFFF // Form exponent bias - fnorm.s1 fNormX = f8 // Normalize input - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - nop.m 0 - fclass.m p7,p0 = f8, 0x0b // Test x unorm - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf -(p7) br.cond.spnt TRUNC_UNORM // Branch if x unorm -} -;; - -TRUNC_COMMON: -// Return here from TRUNC_UNORM -{ .mfb - and rExp = rSignexp, rExpMask // Get biased exponent -(p6) fma.d.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf -} -;; - -{ .mfi - cmp.lt p6,p0 = rExp, rExpBias // Is |x| < 1? - fcvt.xf f8 = fXtruncInt // Result, assume 1 <= |x| < 2^52 - cmp.ge p7,p0 = rExp, rBigexp // Is |x| >= 2^52? -} -;; - -// We must correct result if |x| < 1, or |x| >= 2^52 -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fmerge.s f8 = fNormX, f0 // If |x| < 1, result sgn(x)*0 - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fma.d.s0 f8 = fNormX, f1, f0 // If |x| >= 2^52, result x - br.ret.sptk b0 // Exit main path -} -;; - - -TRUNC_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk TRUNC_COMMON // Return to main path -} -;; - -GLOBAL_LIBM_END(trunc) diff --git a/sysdeps/ia64/fpu/s_truncf.S b/sysdeps/ia64/fpu/s_truncf.S deleted file mode 100644 index ff40bc7101..0000000000 --- a/sysdeps/ia64/fpu/s_truncf.S +++ /dev/null @@ -1,166 +0,0 @@ -.file "truncf.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 07/07/00 Created -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/20/03 Improved performance and reduced code size -//============================================================== - -// API -//============================================================== -// float truncf(float x) -//============================================================== - -// general input registers: -// r14 - r18 - -rExpBias = r14 -rSignexp = r15 -rExp = r16 -rExpMask = r17 -rBigexp = r18 - -// floating-point registers: -// f8 - f10 - -fXtruncInt = f9 -fNormX = f10 - -// predicate registers used: -// p6, p7 - -// Overview of operation -//============================================================== -// float truncf(float x) -// Return an integer value (represented as a float) less than or -// equal to x in magnitude. -// This is x rounded toward zero to an integral value. -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - -.section .text -GLOBAL_LIBM_ENTRY(truncf) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fcvt.fx.trunc.s1 fXtruncInt = f8 // Convert to int in significand - addl rBigexp = 0x10016, r0 // Set exponent at which is integer -} -{ .mfi - mov rExpBias = 0x0FFFF // Form exponent bias - fnorm.s1 fNormX = f8 // Normalize input - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - nop.m 0 - fclass.m p7,p0 = f8, 0x0b // Test x unorm - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf -(p7) br.cond.spnt TRUNC_UNORM // Branch if x unorm -} -;; - -TRUNC_COMMON: -// Return here from TRUNC_UNORM -{ .mfb - and rExp = rSignexp, rExpMask // Get biased exponent -(p6) fma.s.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf -} -;; - -{ .mfi - cmp.lt p6,p0 = rExp, rExpBias // Is |x| < 1? - fcvt.xf f8 = fXtruncInt // Result, assume 1 <= |x| < 2^23 - cmp.ge p7,p0 = rExp, rBigexp // Is |x| >= 2^23? -} -;; - -// We must correct result if |x| < 1, or |x| >= 2^23 -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fmerge.s f8 = fNormX, f0 // If |x| < 1, result sgn(x)*0 - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fma.s.s0 f8 = fNormX, f1, f0 // If |x| >= 2^23, result x - br.ret.sptk b0 // Exit main path -} -;; - - -TRUNC_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk TRUNC_COMMON // Return to main path -} -;; - -GLOBAL_LIBM_END(truncf) diff --git a/sysdeps/ia64/fpu/s_truncl.S b/sysdeps/ia64/fpu/s_truncl.S deleted file mode 100644 index 1afa19ba2b..0000000000 --- a/sysdeps/ia64/fpu/s_truncl.S +++ /dev/null @@ -1,166 +0,0 @@ -.file "truncl.s" - - -// Copyright (c) 2000 - 2003, Intel Corporation -// All rights reserved. -// -// Contributed 2000 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 07/07/00 Created -// 05/20/02 Cleaned up namespace and sf0 syntax -// 01/20/03 Improved performance and reduced code size -//============================================================== - -// API -//============================================================== -// long double truncl(long double x) -//============================================================== - -// general input registers: -// r14 - r18 - -rExpBias = r14 -rSignexp = r15 -rExp = r16 -rExpMask = r17 -rBigexp = r18 - -// floating-point registers: -// f8 - f10 - -fXtruncInt = f9 -fNormX = f10 - -// predicate registers used: -// p6, p7 - -// Overview of operation -//============================================================== -// long double truncl(long double x) -// Return an integer value (represented as a long double) less than or -// equal to x in magnitude. -// This is x rounded toward zero to an integral value. -//============================================================== - -// double_extended -// if the exponent is > 1003e => 3F(true) = 63(decimal) -// we have a significand of 64 bits 1.63-bits. -// If we multiply by 2^63, we no longer have a fractional part -// So input is an integer value already. - -// double -// if the exponent is >= 10033 => 34(true) = 52(decimal) -// 34 + 3ff = 433 -// we have a significand of 53 bits 1.52-bits. (implicit 1) -// If we multiply by 2^52, we no longer have a fractional part -// So input is an integer value already. - -// single -// if the exponent is > 10016 => 17(true) = 23(decimal) -// we have a significand of 24 bits 1.23-bits. (implicit 1) -// If we multiply by 2^23, we no longer have a fractional part -// So input is an integer value already. - -.section .text -GLOBAL_LIBM_ENTRY(truncl) - -{ .mfi - getf.exp rSignexp = f8 // Get signexp, recompute if unorm - fcvt.fx.trunc.s1 fXtruncInt = f8 // Convert to int in significand - addl rBigexp = 0x1003e, r0 // Set exponent at which is integer -} -{ .mfi - mov rExpBias = 0x0FFFF // Form exponent bias - fnorm.s1 fNormX = f8 // Normalize input - mov rExpMask = 0x1FFFF // Form exponent mask -} -;; - -{ .mfi - nop.m 0 - fclass.m p7,p0 = f8, 0x0b // Test x unorm - nop.i 0 -} -;; - -{ .mfb - nop.m 0 - fclass.m p6,p0 = f8, 0x1e3 // Test x natval, nan, inf -(p7) br.cond.spnt TRUNC_UNORM // Branch if x unorm -} -;; - -TRUNC_COMMON: -// Return here from TRUNC_UNORM -{ .mfb - and rExp = rSignexp, rExpMask // Get biased exponent -(p6) fma.s0 f8 = f8, f1, f0 // Result if x natval, nan, inf -(p6) br.ret.spnt b0 // Exit if x natval, nan, inf -} -;; - -{ .mfi - cmp.lt p6,p0 = rExp, rExpBias // Is |x| < 1? - fcvt.xf f8 = fXtruncInt // Result, assume 1 <= |x| < 2^63 - cmp.ge p7,p0 = rExp, rBigexp // Is |x| >= 2^63? -} -;; - -// We must correct result if |x| < 1, or |x| >= 2^63 -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fmerge.s f8 = fNormX, f0 // If |x| < 1, result sgn(x)*0 - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fma.s0 f8 = fNormX, f1, f0 // If |x| >= 2^63, result x - br.ret.sptk b0 // Exit main path -} -;; - - -TRUNC_UNORM: -// Here if x unorm -{ .mfb - getf.exp rSignexp = fNormX // Get signexp, recompute if unorm - fcmp.eq.s0 p7,p0 = f8, f0 // Dummy op to set denormal flag - br.cond.sptk TRUNC_COMMON // Return to main path -} -;; - -GLOBAL_LIBM_END(truncl) diff --git a/sysdeps/ia64/fpu/sincos32.c b/sysdeps/ia64/fpu/sincos32.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/sincos32.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/slowexp.c b/sysdeps/ia64/fpu/slowexp.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/slowexp.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/slowpow.c b/sysdeps/ia64/fpu/slowpow.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/slowpow.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/t_exp.c b/sysdeps/ia64/fpu/t_exp.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/t_exp.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_acos_compat.c b/sysdeps/ia64/fpu/w_acos_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_acos_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_acosf_compat.c b/sysdeps/ia64/fpu/w_acosf_compat.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/w_acosf_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_acosh_compat.c b/sysdeps/ia64/fpu/w_acosh_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_acosh_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_acoshf_compat.c b/sysdeps/ia64/fpu/w_acoshf_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_acoshf_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_acoshl_compat.c b/sysdeps/ia64/fpu/w_acoshl_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_acoshl_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_acosl_compat.c b/sysdeps/ia64/fpu/w_acosl_compat.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ia64/fpu/w_acosl_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_asin_compat.c b/sysdeps/ia64/fpu/w_asin_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_asin_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_asinf_compat.c b/sysdeps/ia64/fpu/w_asinf_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_asinf_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_asinl_compat.c b/sysdeps/ia64/fpu/w_asinl_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_asinl_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_atan2_compat.c b/sysdeps/ia64/fpu/w_atan2_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_atan2_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_atan2f_compat.c b/sysdeps/ia64/fpu/w_atan2f_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_atan2f_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_atan2l_compat.c b/sysdeps/ia64/fpu/w_atan2l_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_atan2l_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_atanh_compat.c b/sysdeps/ia64/fpu/w_atanh_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_atanh_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_atanhf_compat.c b/sysdeps/ia64/fpu/w_atanhf_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_atanhf_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_atanhl_compat.c b/sysdeps/ia64/fpu/w_atanhl_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_atanhl_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_cosh_compat.c b/sysdeps/ia64/fpu/w_cosh_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_cosh_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_coshf_compat.c b/sysdeps/ia64/fpu/w_coshf_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_coshf_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_coshl_compat.c b/sysdeps/ia64/fpu/w_coshl_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_coshl_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_exp10_compat.c b/sysdeps/ia64/fpu/w_exp10_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_exp10_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_exp10f_compat.c b/sysdeps/ia64/fpu/w_exp10f_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_exp10f_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_exp10l_compat.c b/sysdeps/ia64/fpu/w_exp10l_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_exp10l_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_exp2_compat.c b/sysdeps/ia64/fpu/w_exp2_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_exp2_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_exp2f_compat.c b/sysdeps/ia64/fpu/w_exp2f_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_exp2f_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_exp2l_compat.c b/sysdeps/ia64/fpu/w_exp2l_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_exp2l_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_exp_compat.c b/sysdeps/ia64/fpu/w_exp_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_exp_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_expf_compat.c b/sysdeps/ia64/fpu/w_expf_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_expf_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_expl_compat.c b/sysdeps/ia64/fpu/w_expl_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_expl_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_fmod_compat.c b/sysdeps/ia64/fpu/w_fmod_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_fmod_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_fmodf_compat.c b/sysdeps/ia64/fpu/w_fmodf_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_fmodf_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_fmodl_compat.c b/sysdeps/ia64/fpu/w_fmodl_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_fmodl_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_hypot_compat.c b/sysdeps/ia64/fpu/w_hypot_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_hypot_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_hypotf_compat.c b/sysdeps/ia64/fpu/w_hypotf_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_hypotf_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_hypotl_compat.c b/sysdeps/ia64/fpu/w_hypotl_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_hypotl_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_lgamma_main.c b/sysdeps/ia64/fpu/w_lgamma_main.c deleted file mode 100644 index 3ad73b6756..0000000000 --- a/sysdeps/ia64/fpu/w_lgamma_main.c +++ /dev/null @@ -1,77 +0,0 @@ -/* file: lgamma.c */ - - -// Copyright (c) 2002 Intel Corporation -// All rights reserved. -// -// Contributed 2002 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// - -// History -//============================================================== -// 02/04/02: Initial version -// 02/22/02: Removed lgammaf/gammaf -// -/* -// FUNCTIONS: double lgamma(double x) -// double gamma(double x) -// Natural logarithm of GAMMA function -*/ - -#include "libm_support.h" - -#include -#include - -#include - -extern double __libm_lgamma(double /*x*/, int* /*signgam*/, int /*signgamsz*/); - -#if BUILD_LGAMMA -double LGFUNC (lgamma) (double x) -{ - return CALL_LGAMMA (double, __libm_lgamma, x); -} -# if USE_AS_COMPAT -compat_symbol (libm, __lgamma_compat, lgamma, LGAMMA_OLD_VER); -# else -versioned_symbol (libm, __ieee754_lgamma, lgamma, LGAMMA_NEW_VER); -# endif -# if GAMMA_ALIAS -strong_alias (LGFUNC (lgamma), __ieee754_gamma) -weak_alias (__ieee754_gamma, gamma) -# endif -#endif diff --git a/sysdeps/ia64/fpu/w_lgamma_r_compat.c b/sysdeps/ia64/fpu/w_lgamma_r_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_lgamma_r_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_lgammaf_main.c b/sysdeps/ia64/fpu/w_lgammaf_main.c deleted file mode 100644 index 2f3dd41088..0000000000 --- a/sysdeps/ia64/fpu/w_lgammaf_main.c +++ /dev/null @@ -1,77 +0,0 @@ -/* file: lgammaf.c */ - - -// Copyright (c) 2002 Intel Corporation -// All rights reserved. -// -// Contributed 2002 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// - -// History -//============================================================== -// 02/04/02: Initial version -// 02/22/02: Removed lgamma/gamma -// -/* -// FUNCTIONS: float lgammaf(float x) -// float gammaf(float x) -// Natural logarithm of GAMMA function -*/ - -#include "libm_support.h" - -#include -#include - -#include - -extern float __libm_lgammaf(float /*x*/, int* /*signgam*/, int /*signgamsz*/); - -#if BUILD_LGAMMA -float LGFUNC (lgammaf) (float x) -{ - return CALL_LGAMMA (float, __libm_lgammaf, x); -} -# if USE_AS_COMPAT -compat_symbol (libm, __lgammaf_compat, lgammaf, LGAMMA_OLD_VER); -# else -versioned_symbol (libm, __ieee754_lgammaf, lgammaf, LGAMMA_NEW_VER); -# endif -# if GAMMA_ALIAS -strong_alias (LGFUNC (lgammaf), __ieee754_gammaf) -weak_alias (__ieee754_gammaf, gammaf) -# endif -#endif diff --git a/sysdeps/ia64/fpu/w_lgammaf_r_compat.c b/sysdeps/ia64/fpu/w_lgammaf_r_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_lgammaf_r_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_lgammal_main.c b/sysdeps/ia64/fpu/w_lgammal_main.c deleted file mode 100644 index 7879611d54..0000000000 --- a/sysdeps/ia64/fpu/w_lgammal_main.c +++ /dev/null @@ -1,76 +0,0 @@ -/* file: lgammal.c */ - - -// Copyright (c) 2002 Intel Corporation -// All rights reserved. -// -// Contributed 2002 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// - -// History -//============================================================== -// 08/15/02: Initial version -// -/* -// FUNCTIONS: long double lgammal(long double x) -// long double gammal(long double x) -// Natural logarithm of GAMMA function -*/ - -#include "libm_support.h" - -#include -#include - -#include - -extern double __libm_lgammal(long double /*x*/, int* /*signgam*/, int /*signgamsz*/); - -#if BUILD_LGAMMA -long double LGFUNC (lgammal) (long double x) -{ - return CALL_LGAMMA (long double, __libm_lgammal, x); -} -# if USE_AS_COMPAT -compat_symbol (libm, __lgammal_compat, lgammal, LGAMMA_OLD_VER); -# else -versioned_symbol (libm, __ieee754_lgammal, lgammal, LGAMMA_NEW_VER); -# endif -# if GAMMA_ALIAS -strong_alias (LGFUNC (lgammal), __ieee754_gammal) -weak_alias (__ieee754_gammal, gammal) -# endif -#endif diff --git a/sysdeps/ia64/fpu/w_lgammal_r_compat.c b/sysdeps/ia64/fpu/w_lgammal_r_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_lgammal_r_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_log10_compat.c b/sysdeps/ia64/fpu/w_log10_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_log10_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_log10f_compat.c b/sysdeps/ia64/fpu/w_log10f_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_log10f_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_log10l_compat.c b/sysdeps/ia64/fpu/w_log10l_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_log10l_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_log1p.c b/sysdeps/ia64/fpu/w_log1p.c deleted file mode 100644 index 32855ef9bb..0000000000 --- a/sysdeps/ia64/fpu/w_log1p.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Wrapper for __log1p that handles setting errno. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Nothing to do. - errno is set in sysdeps/ia64/fpu/s_log1p.S. */ diff --git a/sysdeps/ia64/fpu/w_log1pf.c b/sysdeps/ia64/fpu/w_log1pf.c deleted file mode 100644 index 0880882c83..0000000000 --- a/sysdeps/ia64/fpu/w_log1pf.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Wrapper for __log1pf that handles setting errno. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Nothing to do. - errno is set in sysdeps/ia64/fpu/s_log1pf.S. */ diff --git a/sysdeps/ia64/fpu/w_log1pl.c b/sysdeps/ia64/fpu/w_log1pl.c deleted file mode 100644 index 9848e53d28..0000000000 --- a/sysdeps/ia64/fpu/w_log1pl.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Wrapper for __log1pl that handles setting errno. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Nothing to do. - errno is set in sysdeps/ia64/fpu/s_log1pl.S. */ diff --git a/sysdeps/ia64/fpu/w_log2_compat.c b/sysdeps/ia64/fpu/w_log2_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_log2_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_log2f_compat.c b/sysdeps/ia64/fpu/w_log2f_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_log2f_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_log2l_compat.c b/sysdeps/ia64/fpu/w_log2l_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_log2l_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_log_compat.c b/sysdeps/ia64/fpu/w_log_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_log_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_logf_compat.c b/sysdeps/ia64/fpu/w_logf_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_logf_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_logl_compat.c b/sysdeps/ia64/fpu/w_logl_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_logl_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_pow_compat.c b/sysdeps/ia64/fpu/w_pow_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_pow_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_powf_compat.c b/sysdeps/ia64/fpu/w_powf_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_powf_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_powl_compat.c b/sysdeps/ia64/fpu/w_powl_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_powl_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_remainder_compat.c b/sysdeps/ia64/fpu/w_remainder_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_remainder_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_remainderf_compat.c b/sysdeps/ia64/fpu/w_remainderf_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_remainderf_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_remainderl_compat.c b/sysdeps/ia64/fpu/w_remainderl_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_remainderl_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_scalb_compat.c b/sysdeps/ia64/fpu/w_scalb_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_scalb_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_scalbf_compat.c b/sysdeps/ia64/fpu/w_scalbf_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_scalbf_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_scalbl_compat.c b/sysdeps/ia64/fpu/w_scalbl_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_scalbl_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_scalblnf.c b/sysdeps/ia64/fpu/w_scalblnf.c deleted file mode 100644 index b4f407953a..0000000000 --- a/sysdeps/ia64/fpu/w_scalblnf.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Wrapper for __scalblnf handles setting errno. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Nothing to do. - The function scalblnf is used without the wrapper function. */ diff --git a/sysdeps/ia64/fpu/w_sinh_compat.c b/sysdeps/ia64/fpu/w_sinh_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_sinh_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_sinhf_compat.c b/sysdeps/ia64/fpu/w_sinhf_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_sinhf_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_sinhl_compat.c b/sysdeps/ia64/fpu/w_sinhl_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_sinhl_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_sqrt_compat.c b/sysdeps/ia64/fpu/w_sqrt_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_sqrt_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_sqrtf_compat.c b/sysdeps/ia64/fpu/w_sqrtf_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_sqrtf_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_sqrtl_compat.c b/sysdeps/ia64/fpu/w_sqrtl_compat.c deleted file mode 100644 index 41254ae60a..0000000000 --- a/sysdeps/ia64/fpu/w_sqrtl_compat.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ia64/fpu/w_tgamma_compat.S b/sysdeps/ia64/fpu/w_tgamma_compat.S deleted file mode 100644 index 867815cf46..0000000000 --- a/sysdeps/ia64/fpu/w_tgamma_compat.S +++ /dev/null @@ -1,1835 +0,0 @@ -.file "tgamma.s" - - -// Copyright (c) 2001 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,INCLUDING,BUT NOT -// LIMITED TO,THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT,INDIRECT,INCIDENTAL,SPECIAL, -// EXEMPLARY,OR CONSEQUENTIAL DAMAGES (INCLUDING,BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,DATA,OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY,WHETHER IN CONTRACT,STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE,EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code,and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 10/12/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 04/04/03 Changed error codes for overflow and negative integers -// 04/10/03 Changed code for overflow near zero handling -// 03/31/05 Reformatted delimiters between data tables -// -//********************************************************************* -// -//********************************************************************* -// -// Function: tgamma(x) computes the principle value of the GAMMA -// function of x. -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8-f15 -// f33-f87 -// -// General Purpose Registers: -// r8-r11 -// r14-r28 -// r32-r36 -// r37-r40 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6-p15 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// tgamma(+inf) = +inf -// tgamma(-inf) = QNaN -// tgamma(+/-0) = +/-inf -// tgamma(x<0, x - integer) = QNaN -// tgamma(SNaN) = QNaN -// tgamma(QNaN) = QNaN -// -//********************************************************************* -// -// Overview -// -// The method consists of three cases. -// -// If 2 <= x < OVERFLOW_BOUNDARY use case tgamma_regular; -// else if 0 < x < 2 use case tgamma_from_0_to_2; -// else if -(i+1) < x < -i, i = 0...184 use case tgamma_negatives; -// -// Case 2 <= x < OVERFLOW_BOUNDARY -// ------------------------------- -// Here we use algorithm based on the recursive formula -// GAMMA(x+1) = x*GAMMA(x). For that we subdivide interval -// [2; OVERFLOW_BOUNDARY] into intervals [16*n; 16*(n+1)] and -// approximate GAMMA(x) by polynomial of 22th degree on each -// [16*n; 16*n+1], recursive formula is used to expand GAMMA(x) -// to [16*n; 16*n+1]. In other words we need to find n, i and r -// such that x = 16 * n + i + r where n and i are integer numbers -// and r is fractional part of x. So GAMMA(x) = GAMMA(16*n+i+r) = -// = (x-1)*(x-2)*...*(x-i)*GAMMA(x-i) = -// = (x-1)*(x-2)*...*(x-i)*GAMMA(16*n+r) ~ -// ~ (x-1)*(x-2)*...*(x-i)*P22n(r). -// -// Step 1: Reduction -// ----------------- -// N = [x] with truncate -// r = x - N, note 0 <= r < 1 -// -// n = N & ~0xF - index of table that contains coefficient of -// polynomial approximation -// i = N & 0xF - is used in recursive formula -// -// -// Step 2: Approximation -// --------------------- -// We use factorized minimax approximation polynomials -// P22n(r) = A22*(r^2+C01(n)*R+C00(n))* -// *(r^2+C11(n)*R+C10(n))*...*(r^2+CA1(n)*R+CA0(n)) -// -// Step 3: Recursion -// ----------------- -// In case when i > 0 we need to multiply P22n(r) by product -// R(i)=(x-1)*(x-2)*...*(x-i). To reduce number of fp-instructions -// we can calculate R as follow: -// R(i) = ((x-1)*(x-2))*((x-3)*(x-4))*...*((x-(i-1))*(x-i)) if i is -// even or R = ((x-1)*(x-2))*((x-3)*(x-4))*...*((x-(i-2))*(x-(i-1)))* -// *(i-1) if i is odd. In both cases we need to calculate -// R2(i) = (x^2-3*x+2)*(x^2-7*x+12)*...*(x^2+x+2*j*(2*j-1)) = -// = (x^2-3*x+2)*(x^2-7*x+12)*...*((x^2+x)+2*j*(2*(j-1)+(1-2*x))) = -// = (RA+2*(2-RB))*(RA+4*(4-RB))*...*(RA+2*j*(2*(j-1)+RB)) -// where j = 1..[i/2], RA = x^2+x, RB = 1-2*x. -// -// Step 4: Reconstruction -// ---------------------- -// Reconstruction is just simple multiplication i.e. -// GAMMA(x) = P22n(r)*R(i) -// -// Case 0 < x < 2 -// -------------- -// To calculate GAMMA(x) on this interval we do following -// if 1 <= x < 1.25 than GAMMA(x) = P15(x-1) -// if 1.25 <= x < 1.5 than GAMMA(x) = P15(x-x_min) where -// x_min is point of local minimum on [1; 2] interval. -// if 1.5 <= x < 2.0 than GAMMA(x) = P15(x-1.5) -// and -// if 0 < x < 1 than GAMMA(x) = GAMMA(x+1)/x -// -// Case -(i+1) < x < -i, i = 0...184 -// ---------------------------------- -// Here we use the fact that GAMMA(-x) = PI/(x*GAMMA(x)*sin(PI*x)) and -// so we need to calculate GAMMA(x), sin(PI*x)/PI. Calculation of -// GAMMA(x) is described above. -// -// Step 1: Reduction -// ----------------- -// Note that period of sin(PI*x) is 2 and range reduction for -// sin(PI*x) is like to range reduction for GAMMA(x) -// i.e r = x - [x] with exception of cases -// when r > 0.5 (in such cases r = 1 - (x - [x])). -// -// Step 2: Approximation -// --------------------- -// To approximate sin(PI*x)/PI = sin(PI*(2*n+r))/PI = -// = (-1)^n*sin(PI*r)/PI Taylor series is used. -// sin(PI*r)/PI ~ S21(r). -// -// Step 3: Division -// ---------------- -// To calculate 1/(x*GAMMA(x)*S21(r)) we use frcpa instruction -// with following Newton-Raphson interations. -// -// -//********************************************************************* - -GR_Sig = r8 -GR_TAG = r8 -GR_ad_Data = r9 -GR_SigRqLin = r10 -GR_iSig = r11 -GR_ExpOf1 = r11 -GR_ExpOf8 = r11 - - -GR_Sig2 = r14 -GR_Addr_Mask1 = r15 -GR_Sign_Exp = r16 -GR_Tbl_Offs = r17 -GR_Addr_Mask2 = r18 -GR_ad_Co = r19 -GR_Bit2 = r19 -GR_ad_Ce = r20 -GR_ad_Co7 = r21 -GR_NzOvfBound = r21 -GR_ad_Ce7 = r22 -GR_Tbl_Ind = r23 -GR_Tbl_16xInd = r24 -GR_ExpOf025 = r24 -GR_ExpOf05 = r25 -GR_0x30033 = r26 -GR_10 = r26 -GR_12 = r27 -GR_185 = r27 -GR_14 = r28 -GR_2 = r28 -GR_fpsr = r28 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - - -FR_X = f10 -FR_Y = f1 // tgamma is single argument function -FR_RESULT = f8 - -FR_AbsX = f9 -FR_NormX = f9 -FR_r02 = f11 -FR_AbsXp1 = f12 -FR_X2pX = f13 -FR_1m2X = f14 -FR_Rq1 = f14 -FR_Xt = f15 - -FR_r = f33 -FR_OvfBound = f34 -FR_Xmin = f35 -FR_2 = f36 -FR_Rcp1 = f36 -FR_Rcp3 = f36 -FR_4 = f37 -FR_5 = f38 -FR_6 = f39 -FR_8 = f40 -FR_10 = f41 -FR_12 = f42 -FR_14 = f43 -FR_GAMMA = f43 -FR_05 = f44 - -FR_Rq2 = f45 -FR_Rq3 = f46 -FR_Rq4 = f47 -FR_Rq5 = f48 -FR_Rq6 = f49 -FR_Rq7 = f50 -FR_RqLin = f51 - -FR_InvAn = f52 - -FR_C01 = f53 -FR_A15 = f53 -FR_C11 = f54 -FR_A14 = f54 -FR_C21 = f55 -FR_A13 = f55 -FR_C31 = f56 -FR_A12 = f56 -FR_C41 = f57 -FR_A11 = f57 -FR_C51 = f58 -FR_A10 = f58 -FR_C61 = f59 -FR_A9 = f59 -FR_C71 = f60 -FR_A8 = f60 -FR_C81 = f61 -FR_A7 = f61 -FR_C91 = f62 -FR_A6 = f62 -FR_CA1 = f63 -FR_A5 = f63 -FR_C00 = f64 -FR_A4 = f64 -FR_rs2 = f64 -FR_C10 = f65 -FR_A3 = f65 -FR_rs3 = f65 -FR_C20 = f66 -FR_A2 = f66 -FR_rs4 = f66 -FR_C30 = f67 -FR_A1 = f67 -FR_rs7 = f67 -FR_C40 = f68 -FR_A0 = f68 -FR_rs8 = f68 -FR_C50 = f69 -FR_r2 = f69 -FR_C60 = f70 -FR_r3 = f70 -FR_C70 = f71 -FR_r4 = f71 -FR_C80 = f72 -FR_r7 = f72 -FR_C90 = f73 -FR_r8 = f73 -FR_CA0 = f74 -FR_An = f75 - -FR_S21 = f76 -FR_S19 = f77 -FR_Rcp0 = f77 -FR_Rcp2 = f77 -FR_S17 = f78 -FR_S15 = f79 -FR_S13 = f80 -FR_S11 = f81 -FR_S9 = f82 -FR_S7 = f83 -FR_S5 = f84 -FR_S3 = f85 - -FR_iXt = f86 -FR_rs = f87 - - -// Data tables -//============================================================== -RODATA -.align 16 - -LOCAL_OBJECT_START(tgamma_data) -data8 0x406573FAE561F648 // overflow boundary (171.624376956302739927196) -data8 0x3FDD8B618D5AF8FE // point of local minium (0.461632144968362356785) -// -//[2; 3] -data8 0xEF0E85C9AE40ABE2,0x00004000 // C01 -data8 0xCA2049DDB4096DD8,0x00004000 // C11 -data8 0x99A203B4DC2D1A8C,0x00004000 // C21 -data8 0xBF5D9D9C0C295570,0x00003FFF // C31 -data8 0xE8DD037DEB833BAB,0x00003FFD // C41 -data8 0xB6AE39A2A36AA03A,0x0000BFFE // C51 -data8 0x804960DC2850277B,0x0000C000 // C61 -data8 0xD9F3973841C09F80,0x0000C000 // C71 -data8 0x9C198A676F8A2239,0x0000C001 // C81 -data8 0xC98B7DAE02BE3226,0x0000C001 // C91 -data8 0xE9CAF31AC69301BA,0x0000C001 // CA1 -data8 0xFBBDD58608A0D172,0x00004000 // C00 -data8 0xFDD0316D1E078301,0x00004000 // C10 -data8 0x8630B760468C15E4,0x00004001 // C20 -data8 0x93EDE20E47D9152E,0x00004001 // C30 -data8 0xA86F3A38C77D6B19,0x00004001 // C40 -//[16; 17] -data8 0xF87F757F365EE813,0x00004000 // C01 -data8 0xECA84FBA92759DA4,0x00004000 // C11 -data8 0xD4E0A55E07A8E913,0x00004000 // C21 -data8 0xB0EB45E94C8A5F7B,0x00004000 // C31 -data8 0x8050D6B4F7C8617D,0x00004000 // C41 -data8 0x8471B111AA691E5A,0x00003FFF // C51 -data8 0xADAF462AF96585C9,0x0000BFFC // C61 -data8 0xD327C7A587A8C32B,0x0000BFFF // C71 -data8 0xDEF5192B4CF5E0F1,0x0000C000 // C81 -data8 0xBADD64BB205AEF02,0x0000C001 // C91 -data8 0x9330A24AA67D6860,0x0000C002 // CA1 -data8 0xF57EEAF36D8C47BE,0x00004000 // C00 -data8 0x807092E12A251B38,0x00004001 // C10 -data8 0x8C458F80DEE7ED1C,0x00004001 // C20 -data8 0x9F30C731DC77F1A6,0x00004001 // C30 -data8 0xBAC4E7E099C3A373,0x00004001 // C40 -//[32; 33] -data8 0xC3059A415F142DEF,0x00004000 // C01 -data8 0xB9C1DAC24664587A,0x00004000 // C11 -data8 0xA7101D910992FFB2,0x00004000 // C21 -data8 0x8A9522B8E4AA0AB4,0x00004000 // C31 -data8 0xC76A271E4BA95DCC,0x00003FFF // C41 -data8 0xC5D6DE2A38DB7FF2,0x00003FFE // C51 -data8 0xDBA42086997818B2,0x0000BFFC // C61 -data8 0xB8EDDB1424C1C996,0x0000BFFF // C71 -data8 0xBF7372FB45524B5D,0x0000C000 // C81 -data8 0xA03DDE759131580A,0x0000C001 // C91 -data8 0xFDA6FC4022C1FFE3,0x0000C001 // CA1 -data8 0x9759ABF797B2533D,0x00004000 // C00 -data8 0x9FA160C6CF18CEC5,0x00004000 // C10 -data8 0xB0EFF1E3530E0FCD,0x00004000 // C20 -data8 0xCCD60D5C470165D1,0x00004000 // C30 -data8 0xF5E53F6307B0B1C1,0x00004000 // C40 -//[48; 49] -data8 0xAABE577FBCE37F5E,0x00004000 // C01 -data8 0xA274CAEEB5DF7172,0x00004000 // C11 -data8 0x91B90B6646C1B924,0x00004000 // C21 -data8 0xF06718519CA256D9,0x00003FFF // C31 -data8 0xAA9EE181C0E30263,0x00003FFF // C41 -data8 0xA07BDB5325CB28D2,0x00003FFE // C51 -data8 0x86C8B873204F9219,0x0000BFFD // C61 -data8 0xB0192C5D3E4787D6,0x0000BFFF // C71 -data8 0xB1E0A6263D4C19EF,0x0000C000 // C81 -data8 0x93BA32A118EAC9AE,0x0000C001 // C91 -data8 0xE942A39CD9BEE887,0x0000C001 // CA1 -data8 0xE838B0957B0D3D0D,0x00003FFF // C00 -data8 0xF60E0F00074FCF34,0x00003FFF // C10 -data8 0x89869936AE00C2A5,0x00004000 // C20 -data8 0xA0FE4E8AA611207F,0x00004000 // C30 -data8 0xC3B1229CFF1DDAFE,0x00004000 // C40 -//[64; 65] -data8 0x9C00DDF75CDC6183,0x00004000 // C01 -data8 0x9446AE9C0F6A833E,0x00004000 // C11 -data8 0x84ABC5083310B774,0x00004000 // C21 -data8 0xD9BA3A0977B1ED83,0x00003FFF // C31 -data8 0x989B18C99411D300,0x00003FFF // C41 -data8 0x886E66402318CE6F,0x00003FFE // C51 -data8 0x99028C2468F18F38,0x0000BFFD // C61 -data8 0xAB72D17DCD40CCE1,0x0000BFFF // C71 -data8 0xA9D9AC9BE42C2EF9,0x0000C000 // C81 -data8 0x8C11D983AA177AD2,0x0000C001 // C91 -data8 0xDC779E981C1F0F06,0x0000C001 // CA1 -data8 0xC1FD4AC85965E8D6,0x00003FFF // C00 -data8 0xCE3D2D909D389EC2,0x00003FFF // C10 -data8 0xE7F79980AD06F5D8,0x00003FFF // C20 -data8 0x88DD9F73C8680B5D,0x00004000 // C30 -data8 0xA7D6CB2CB2D46F9D,0x00004000 // C40 -//[80; 81] -data8 0x91C7FF4E993430D0,0x00004000 // C01 -data8 0x8A6E7AB83E45A7E9,0x00004000 // C11 -data8 0xF72D6382E427BEA9,0x00003FFF // C21 -data8 0xC9E2E4F9B3B23ED6,0x00003FFF // C31 -data8 0x8BEFEF56AE05D775,0x00003FFF // C41 -data8 0xEE9666AB6A185560,0x00003FFD // C51 -data8 0xA6AFAF5CEFAEE04D,0x0000BFFD // C61 -data8 0xA877EAFEF1F9C880,0x0000BFFF // C71 -data8 0xA45BD433048ECA15,0x0000C000 // C81 -data8 0x86BD1636B774CC2E,0x0000C001 // C91 -data8 0xD3721BE006E10823,0x0000C001 // CA1 -data8 0xA97EFABA91854208,0x00003FFF // C00 -data8 0xB4AF0AEBB3F97737,0x00003FFF // C10 -data8 0xCC38241936851B0B,0x00003FFF // C20 -data8 0xF282A6261006EA84,0x00003FFF // C30 -data8 0x95B8E9DB1BD45BAF,0x00004000 // C40 -//[96; 97] -data8 0x8A1FA3171B35A106,0x00004000 // C01 -data8 0x830D5B8843890F21,0x00004000 // C11 -data8 0xE98B0F1616677A23,0x00003FFF // C21 -data8 0xBDF8347F5F67D4EC,0x00003FFF // C31 -data8 0x825F15DE34EC055D,0x00003FFF // C41 -data8 0xD4846186B8AAC7BE,0x00003FFD // C51 -data8 0xB161093AB14919B1,0x0000BFFD // C61 -data8 0xA65758EEA4800EF4,0x0000BFFF // C71 -data8 0xA046B67536FA329C,0x0000C000 // C81 -data8 0x82BBEC1BCB9E9068,0x0000C001 // C91 -data8 0xCC9DE2B23BA91B0B,0x0000C001 // CA1 -data8 0x983B16148AF77F94,0x00003FFF // C00 -data8 0xA2A4D8EE90FEE5DD,0x00003FFF // C10 -data8 0xB89446FA37FF481C,0x00003FFF // C20 -data8 0xDC5572648485FB01,0x00003FFF // C30 -data8 0x88CD5D7DB976129A,0x00004000 // C40 -//[112; 113] -data8 0x8417098FD62AC5E3,0x00004000 // C01 -data8 0xFA7896486B779CBB,0x00003FFF // C11 -data8 0xDEC98B14AF5EEBD1,0x00003FFF // C21 -data8 0xB48E153C6BF0B5A3,0x00003FFF // C31 -data8 0xF597B038BC957582,0x00003FFE // C41 -data8 0xBFC6F0884A415694,0x00003FFD // C51 -data8 0xBA075A1392BDB5E5,0x0000BFFD // C61 -data8 0xA4B79E01B44C7DB4,0x0000BFFF // C71 -data8 0x9D12FA7711BFAB0F,0x0000C000 // C81 -data8 0xFF24C47C8E108AB4,0x0000C000 // C91 -data8 0xC7325EC86562606A,0x0000C001 // CA1 -data8 0x8B47DCD9E1610938,0x00003FFF // C00 -data8 0x9518B111B70F88B8,0x00003FFF // C10 -data8 0xA9CC197206F68682,0x00003FFF // C20 -data8 0xCB98294CC0D7A6A6,0x00003FFF // C30 -data8 0xFE09493EA9165181,0x00003FFF // C40 -//[128; 129] -data8 0xFE53D03442270D90,0x00003FFF // C01 -data8 0xF0F857BAEC1993E4,0x00003FFF // C11 -data8 0xD5FF6D70DBBC2FD3,0x00003FFF // C21 -data8 0xACDAA5F4988B1074,0x00003FFF // C31 -data8 0xE92E069F8AD75B54,0x00003FFE // C41 -data8 0xAEBB64645BD94234,0x00003FFD // C51 -data8 0xC13746249F39B43C,0x0000BFFD // C61 -data8 0xA36B74F5B6297A1F,0x0000BFFF // C71 -data8 0x9A77860DF180F6E5,0x0000C000 // C81 -data8 0xF9F8457D84410A0C,0x0000C000 // C91 -data8 0xC2BF44C649EB8597,0x0000C001 // CA1 -data8 0x81225E7489BCDC0E,0x00003FFF // C00 -data8 0x8A788A09CE0EED11,0x00003FFF // C10 -data8 0x9E2E6F86D1B1D89C,0x00003FFF // C20 -data8 0xBE6866B21CF6CCB5,0x00003FFF // C30 -data8 0xEE94426EC1486AAE,0x00003FFF // C40 -//[144; 145] -data8 0xF6113E09732A6497,0x00003FFF // C01 -data8 0xE900D45931B04FC8,0x00003FFF // C11 -data8 0xCE9FD58F745EBA5D,0x00003FFF // C21 -data8 0xA663A9636C864C86,0x00003FFF // C31 -data8 0xDEBF5315896CE629,0x00003FFE // C41 -data8 0xA05FEA415EBD7737,0x00003FFD // C51 -data8 0xC750F112BD9C4031,0x0000BFFD // C61 -data8 0xA2593A35C51C6F6C,0x0000BFFF // C71 -data8 0x9848E1DA7FB40C8C,0x0000C000 // C81 -data8 0xF59FEE87A5759A4B,0x0000C000 // C91 -data8 0xBF00203909E45A1D,0x0000C001 // CA1 -data8 0xF1D8E157200127E5,0x00003FFE // C00 -data8 0x81DD5397CB08D487,0x00003FFF // C10 -data8 0x94C1DC271A8B766F,0x00003FFF // C20 -data8 0xB3AFAF9B5D6EDDCF,0x00003FFF // C30 -data8 0xE1FB4C57CA81BE1E,0x00003FFF // C40 -//[160; 161] -data8 0xEEFFE5122AC72FFD,0x00003FFF // C01 -data8 0xE22F70BB52AD54B3,0x00003FFF // C11 -data8 0xC84FF021FE993EEA,0x00003FFF // C21 -data8 0xA0DA2208EB5B2752,0x00003FFF // C31 -data8 0xD5CDD2FCF8AD2DF5,0x00003FFE // C41 -data8 0x940BEC6DCD811A59,0x00003FFD // C51 -data8 0xCC954EF4FD4EBB81,0x0000BFFD // C61 -data8 0xA1712E29A8C04554,0x0000BFFF // C71 -data8 0x966B55DFB243521A,0x0000C000 // C81 -data8 0xF1E6A2B9CEDD0C4C,0x0000C000 // C91 -data8 0xBBC87BCC031012DB,0x0000C001 // CA1 -data8 0xE43974E6D2818583,0x00003FFE // C00 -data8 0xF5702A516B64C5B7,0x00003FFE // C10 -data8 0x8CEBCB1B32E19471,0x00003FFF // C20 -data8 0xAAC10F05BB77E0AF,0x00003FFF // C30 -data8 0xD776EFCAB205CC58,0x00003FFF // C40 -//[176; 177] -data8 0xE8DA614119811E5D,0x00003FFF // C01 -data8 0xDC415E0288B223D8,0x00003FFF // C11 -data8 0xC2D2243E44EC970E,0x00003FFF // C21 -data8 0x9C086664B5307BEA,0x00003FFF // C31 -data8 0xCE03D7A08B461156,0x00003FFE // C41 -data8 0x894BE3BAAAB66ADC,0x00003FFD // C51 -data8 0xD131EDD71A702D4D,0x0000BFFD // C61 -data8 0xA0A907CDDBE10898,0x0000BFFF // C71 -data8 0x94CC3CD9C765C808,0x0000C000 // C81 -data8 0xEEA85F237815FC0D,0x0000C000 // C91 -data8 0xB8FA04B023E43F91,0x0000C001 // CA1 -data8 0xD8B2C7D9FCBD7EF9,0x00003FFE // C00 -data8 0xE9566E93AAE7E38F,0x00003FFE // C10 -data8 0x8646E78AABEF0255,0x00003FFF // C20 -data8 0xA32AEDB62E304345,0x00003FFF // C30 -data8 0xCE83E40280EE7DF0,0x00003FFF // C40 -// -//[2; 3] -data8 0xC44FB47E90584083,0x00004001 // C50 -data8 0xE863EE77E1C45981,0x00004001 // C60 -data8 0x8AC15BE238B9D70E,0x00004002 // C70 -data8 0xA5D94B6592350EF4,0x00004002 // C80 -data8 0xC379DB3E20A148B3,0x00004002 // C90 -data8 0xDACA49B73974F6C9,0x00004002 // CA0 -data8 0x810E496A1AFEC895,0x00003FE1 // An -//[16; 17] -data8 0xE17C0357AAF3F817,0x00004001 // C50 -data8 0x8BA8804750FBFBFE,0x00004002 // C60 -data8 0xB18EAB3CB64BEBEE,0x00004002 // C70 -data8 0xE90AB7015AF1C28F,0x00004002 // C80 -data8 0xA0AB97CE9E259196,0x00004003 // C90 -data8 0xF5E0E0A000C2D720,0x00004003 // CA0 -data8 0xD97F0F87EC791954,0x00004005 // An -//[32; 33] -data8 0x980C293F3696040D,0x00004001 // C50 -data8 0xC0DBFFBB948A9A4E,0x00004001 // C60 -data8 0xFAB54625E9A588A2,0x00004001 // C70 -data8 0xA7E08176D6050FBF,0x00004002 // C80 -data8 0xEBAAEC4952270A9F,0x00004002 // C90 -data8 0xB7479CDAD20550FE,0x00004003 // CA0 -data8 0xAACD45931C3FF634,0x00004054 // An -//[48; 49] -data8 0xF5180F0000419AD5,0x00004000 // C50 -data8 0x9D507D07BFBB2273,0x00004001 // C60 -data8 0xCEB53F7A13A383E3,0x00004001 // C70 -data8 0x8BAFEF9E0A49128F,0x00004002 // C80 -data8 0xC58EF912D39E228C,0x00004002 // C90 -data8 0x9A88118422BA208E,0x00004003 // CA0 -data8 0xBD6C0E2477EC12CB,0x000040AC // An -//[64; 65] -data8 0xD410AC48BF7748DA,0x00004000 // C50 -data8 0x89399B90AFEBD931,0x00004001 // C60 -data8 0xB596DF8F77EB8560,0x00004001 // C70 -data8 0xF6D9445A047FB4A6,0x00004001 // C80 -data8 0xAF52F0DD65221357,0x00004002 // C90 -data8 0x8989B45BFC881989,0x00004003 // CA0 -data8 0xB7FCAE86E6E10D5A,0x0000410B // An -//[80; 81] -data8 0xBE759740E3B5AA84,0x00004000 // C50 -data8 0xF8037B1B07D27609,0x00004000 // C60 -data8 0xA4F6F6C7F0977D4F,0x00004001 // C70 -data8 0xE131960233BF02C4,0x00004001 // C80 -data8 0xA06DF43D3922BBE2,0x00004002 // C90 -data8 0xFC266AB27255A360,0x00004002 // CA0 -data8 0xD9F4B012EDAFEF2F,0x0000416F // An -//[96; 97] -data8 0xAEFC84CDA8E1EAA6,0x00004000 // C50 -data8 0xE5009110DB5F3C8A,0x00004000 // C60 -data8 0x98F5F48738E7B232,0x00004001 // C70 -data8 0xD17EE64E21FFDC6B,0x00004001 // C80 -data8 0x9596F7A7E36145CC,0x00004002 // C90 -data8 0xEB64DBE50E125CAF,0x00004002 // CA0 -data8 0xA090530D79E32D2E,0x000041D8 // An -//[112; 113] -data8 0xA33AEA22A16B2655,0x00004000 // C50 -data8 0xD682B93BD7D7945C,0x00004000 // C60 -data8 0x8FC854C6E6E30CC3,0x00004001 // C70 -data8 0xC5754D828AFFDC7A,0x00004001 // C80 -data8 0x8D41216B397139C2,0x00004002 // C90 -data8 0xDE78D746848116E5,0x00004002 // CA0 -data8 0xB8A297A2DC0630DB,0x00004244 // An -//[128; 129] -data8 0x99EB00F11D95E292,0x00004000 // C50 -data8 0xCB005CB911EB779A,0x00004000 // C60 -data8 0x8879AA2FDFF3A37A,0x00004001 // C70 -data8 0xBBDA538AD40CAC2C,0x00004001 // C80 -data8 0x8696D849D311B9DE,0x00004002 // C90 -data8 0xD41E1C041481199F,0x00004002 // CA0 -data8 0xEBA1A43D34EE61EE,0x000042B3 // An -//[144; 145] -data8 0x924F822578AA9F3D,0x00004000 // C50 -data8 0xC193FAF9D3B36960,0x00004000 // C60 -data8 0x827AE3A6B68ED0CA,0x00004001 // C70 -data8 0xB3F52A27EED23F0B,0x00004001 // C80 -data8 0x811A079FB3C94D79,0x00004002 // C90 -data8 0xCB94415470B6F8D2,0x00004002 // CA0 -data8 0x80A0260DCB3EC9AC,0x00004326 // An -//[160; 161] -data8 0x8BF24091E88B331D,0x00004000 // C50 -data8 0xB9ADE01187E65201,0x00004000 // C60 -data8 0xFAE4508F6E7625FE,0x00004000 // C70 -data8 0xAD516668AD6D7367,0x00004001 // C80 -data8 0xF8F5FF171154F637,0x00004001 // C90 -data8 0xC461321268990C82,0x00004002 // CA0 -data8 0xC3B693F344B0E6FE,0x0000439A // An -// -//[176; 177] -data8 0x868545EB42A258ED,0x00004000 // C50 -data8 0xB2EF04ACE8BA0E6E,0x00004000 // C60 -data8 0xF247D22C22E69230,0x00004000 // C70 -data8 0xA7A1AB93E3981A90,0x00004001 // C80 -data8 0xF10951733E2C697F,0x00004001 // C90 -data8 0xBE3359BFAD128322,0x00004002 // CA0 -data8 0x8000000000000000,0x00003fff -// -//[160; 161] for negatives -data8 0xA76DBD55B2E32D71,0x00003C63 // 1/An -// -// sin(pi*x)/pi -data8 0xBCBC4342112F52A2,0x00003FDE // S21 -data8 0xFAFCECB86536F655,0x0000BFE3 // S19 -data8 0x87E4C97F9CF09B92,0x00003FE9 // S17 -data8 0xEA124C68E704C5CB,0x0000BFED // S15 -data8 0x9BA38CFD59C8AA1D,0x00003FF2 // S13 -data8 0x99C0B552303D5B21,0x0000BFF6 // S11 -// -//[176; 177] for negatives -data8 0xBA5D5869211696FF,0x00003BEC // 1/An -// -// sin(pi*x)/pi -data8 0xD63402E79A853175,0x00003FF9 // S9 -data8 0xC354723906DB36BA,0x0000BFFC // S7 -data8 0xCFCE5A015E236291,0x00003FFE // S5 -data8 0xD28D3312983E9918,0x0000BFFF // S3 -// -// -// [1.0;1.25] -data8 0xA405530B067ECD3C,0x0000BFFC // A15 -data8 0xF5B5413F95E1C282,0x00003FFD // A14 -data8 0xC4DED71C782F76C8,0x0000BFFE // A13 -data8 0xECF7DDDFD27C9223,0x00003FFE // A12 -data8 0xFB73D31793068463,0x0000BFFE // A11 -data8 0xFF173B7E66FD1D61,0x00003FFE // A10 -data8 0xFFA5EF3959089E94,0x0000BFFE // A9 -data8 0xFF8153BD42E71A4F,0x00003FFE // A8 -data8 0xFEF9CAEE2CB5B533,0x0000BFFE // A7 -data8 0xFE3F02E5EDB6811E,0x00003FFE // A6 -data8 0xFB64074CED2658FB,0x0000BFFE // A5 -data8 0xFB52882A095B18A4,0x00003FFE // A4 -data8 0xE8508C7990A0DAC0,0x0000BFFE // A3 -data8 0xFD32C611D8A881D0,0x00003FFE // A2 -data8 0x93C467E37DB0C536,0x0000BFFE // A1 -data8 0x8000000000000000,0x00003FFF // A0 -// -// [1.25;1.5] -data8 0xD038092400619677,0x0000BFF7 // A15 -data8 0xEA6DE925E6EB8C8F,0x00003FF3 // A14 -data8 0xC53F83645D4597FC,0x0000BFF7 // A13 -data8 0xE366DB2FB27B7ECD,0x00003FF7 // A12 -data8 0xAC8FD5E11F6EEAD8,0x0000BFF8 // A11 -data8 0xFB14010FB3697785,0x00003FF8 // A10 -data8 0xB6F91CB5C371177B,0x0000BFF9 // A9 -data8 0x85A262C6F8FEEF71,0x00003FFA // A8 -data8 0xC038E6E3261568F9,0x0000BFFA // A7 -data8 0x8F4BDE8883232364,0x00003FFB // A6 -data8 0xBCFBBD5786537E9A,0x0000BFFB // A5 -data8 0xA4C08BAF0A559479,0x00003FFC // A4 -data8 0x85D74FA063E81476,0x0000BFFC // A3 -data8 0xDB629FB9BBDC1C4E,0x00003FFD // A2 -data8 0xF4F8FBC7C0C9D317,0x00003FC6 // A1 -data8 0xE2B6E4153A57746C,0x00003FFE // A0 -// -// [1.25;1.5] -data8 0x9533F9D3723B448C,0x0000BFF2 // A15 -data8 0xF1F75D3C561CBBAF,0x00003FF5 // A14 -data8 0xBA55A9A1FC883523,0x0000BFF8 // A13 -data8 0xB5D5E9E5104FA995,0x00003FFA // A12 -data8 0xFD84F35B70CD9AE2,0x0000BFFB // A11 -data8 0x87445235F4688CC5,0x00003FFD // A10 -data8 0xE7F236EBFB9F774E,0x0000BFFD // A9 -data8 0xA6605F2721F787CE,0x00003FFE // A8 -data8 0xCF579312AD7EAD72,0x0000BFFE // A7 -data8 0xE96254A2407A5EAC,0x00003FFE // A6 -data8 0xF41312A8572ED346,0x0000BFFE // A5 -data8 0xF9535027C1B1F795,0x00003FFE // A4 -data8 0xE7E82D0C613A8DE4,0x0000BFFE // A3 -data8 0xFD23CD9741B460B8,0x00003FFE // A2 -data8 0x93C30FD9781DBA88,0x0000BFFE // A1 -data8 0xFFFFF1781FDBEE84,0x00003FFE // A0 -LOCAL_OBJECT_END(tgamma_data) - - -//============================================================== -// Code -//============================================================== - -.section .text -GLOBAL_LIBM_ENTRY(tgamma) -{ .mfi - getf.exp GR_Sign_Exp = f8 - fma.s1 FR_1m2X = f8,f1,f8 // 2x - addl GR_ad_Data = @ltoff(tgamma_data), gp -} -{ .mfi - mov GR_ExpOf8 = 0x10002 // 8 - fcvt.fx.trunc.s1 FR_iXt = f8 // [x] - mov GR_ExpOf05 = 0xFFFE // 0.5 -};; -{ .mfi - getf.sig GR_Sig = f8 - fma.s1 FR_2 = f1,f1,f1 // 2 - mov GR_Addr_Mask1 = 0x780 -} -{ .mlx - setf.exp FR_8 = GR_ExpOf8 - movl GR_10 = 0x4024000000000000 -};; -{ .mfi - ld8 GR_ad_Data = [GR_ad_Data] - fcmp.lt.s1 p14,p15 = f8,f0 - tbit.z p12,p13 = GR_Sign_Exp,0x10 // p13 if x >= 2 -} -{ .mlx - and GR_Bit2 = 4,GR_Sign_Exp - movl GR_12 = 0x4028000000000000 -};; -{ .mfi - setf.d FR_10 = GR_10 - fma.s1 FR_r02 = f8,f1,f0 - extr.u GR_Tbl_Offs = GR_Sig,58,6 -} -{ .mfi -(p12) mov GR_Addr_Mask1 = r0 - fma.s1 FR_NormX = f8,f1,f0 - cmp.ne p8,p0 = GR_Bit2,r0 -};; -{ .mfi -(p8) shladd GR_Tbl_Offs = GR_Tbl_Offs,4,r0 - fclass.m p10,p0 = f8,0x1E7 // Test x for NaTVal, NaN, +/-0, +/-INF - tbit.nz p11,p0 = GR_Sign_Exp,1 -} -{ .mlx - add GR_Addr_Mask2 = GR_Addr_Mask1,GR_Addr_Mask1 - movl GR_14 = 0x402C000000000000 -};; -.pred.rel "mutex",p14,p15 -{ .mfi - setf.d FR_12 = GR_12 -(p14) fma.s1 FR_1m2X = f1,f1,FR_1m2X // RB=1-2|x| - tbit.nz p8,p9 = GR_Sign_Exp,0 -} -{ .mfi - ldfpd FR_OvfBound,FR_Xmin = [GR_ad_Data],16 -(p15) fms.s1 FR_1m2X = f1,f1,FR_1m2X // RB=1-2|x| -(p11) shladd GR_Tbl_Offs = GR_Tbl_Offs,2,r0 -};; -.pred.rel "mutex",p9,p8 -{ .mfi - setf.d FR_14 = GR_14 - fma.s1 FR_4 = FR_2,FR_2,f0 -(p8) and GR_Tbl_Offs = GR_Tbl_Offs, GR_Addr_Mask1 -} -{ .mfi - setf.exp FR_05 = GR_ExpOf05 - fma.s1 FR_6 = FR_2,FR_2,FR_2 -(p9) and GR_Tbl_Offs = GR_Tbl_Offs, GR_Addr_Mask2 -};; -.pred.rel "mutex",p9,p8 -{ .mfi -(p8) shladd GR_ad_Co = GR_Tbl_Offs,1,GR_ad_Data - fcvt.xf FR_Xt = FR_iXt // [x] -(p15) tbit.z.unc p11,p0 = GR_Sign_Exp,0x10 // p11 if 0 < x < 2 -} -{ .mfi -(p9) add GR_ad_Co = GR_ad_Data,GR_Tbl_Offs - fma.s1 FR_5 = FR_2,FR_2,f1 -(p15) cmp.lt.unc p7,p6 = GR_ExpOf05,GR_Sign_Exp // p7 if 0 < x < 1 -};; -{ .mfi - add GR_ad_Ce = 16,GR_ad_Co -(p11) frcpa.s1 FR_Rcp0,p0 = f1,f8 - sub GR_Tbl_Offs = GR_ad_Co,GR_ad_Data -} -{ .mfb - ldfe FR_C01 = [GR_ad_Co],32 -(p7) fms.s1 FR_r02 = FR_r02,f1,f1 - // jump if x is NaTVal, NaN, +/-0, +/-INF -(p10) br.cond.spnt tgamma_spec -};; -.pred.rel "mutex",p14,p15 -{ .mfi - ldfe FR_C11 = [GR_ad_Ce],32 -(p14) fms.s1 FR_X2pX = f8,f8,f8 // RA=x^2+|x| - shr GR_Tbl_Ind = GR_Tbl_Offs,8 -} -{ .mfb - ldfe FR_C21 = [GR_ad_Co],32 -(p15) fma.s1 FR_X2pX = f8,f8,f8 // RA=x^2+x - // jump if 0 < x < 2 -(p11) br.cond.spnt tgamma_from_0_to_2 -};; -{ .mfi - ldfe FR_C31 = [GR_ad_Ce],32 - fma.s1 FR_Rq2 = FR_2,f1,FR_1m2X // 2 + B - cmp.ltu p7,p0=0xB,GR_Tbl_Ind -} -{ .mfb - ldfe FR_C41 = [GR_ad_Co],32 - fma.s1 FR_Rq3 = FR_2,FR_2,FR_1m2X // 4 + B - // jump if GR_Tbl_Ind > 11, i.e |x| is more than 192 -(p7) br.cond.spnt tgamma_spec_res -};; -{ .mfi - ldfe FR_C51 = [GR_ad_Ce],32 - fma.s1 FR_Rq4 = FR_6,f1,FR_1m2X // 6 + B - shr GR_Tbl_Offs = GR_Tbl_Offs,1 -} -{ .mfi - ldfe FR_C61 = [GR_ad_Co],32 - fma.s1 FR_Rq5 = FR_4,FR_2,FR_1m2X // 8 + B - nop.i 0 -};; -{ .mfi - ldfe FR_C71 = [GR_ad_Ce],32 -(p14) fms.s1 FR_r = FR_Xt,f1,f8 // r = |x| - [|x|] - shr GR_Tbl_16xInd = GR_Tbl_Offs,3 -} -{ .mfi - ldfe FR_C81 = [GR_ad_Co],32 -(p15) fms.s1 FR_r = f8,f1,FR_Xt // r = x - [x] - add GR_ad_Data = 0xC00,GR_ad_Data -};; -{ .mfi - ldfe FR_C91 = [GR_ad_Ce],32 - fma.s1 FR_Rq6 = FR_5,FR_2,FR_1m2X // 10 + B -(p14) mov GR_0x30033 = 0x30033 -} -{ .mfi - ldfe FR_CA1 = [GR_ad_Co],32 - fma.s1 FR_Rq7 = FR_6,FR_2,FR_1m2X // 12 + B - sub GR_Tbl_Offs = GR_Tbl_Offs,GR_Tbl_16xInd -};; -{ .mfi - ldfe FR_C00 = [GR_ad_Ce],32 - fma.s1 FR_Rq1 = FR_Rq1,FR_2,FR_X2pX // (x-1)*(x-2) -(p13) cmp.eq.unc p8,p0 = r0,GR_Tbl_16xInd // index is 0 i.e. arg from [2;16) -} -{ .mfi - ldfe FR_C10 = [GR_ad_Co],32 -(p14) fms.s1 FR_AbsX = f0,f0,FR_NormX // absolute value of argument - add GR_ad_Co7 = GR_ad_Data,GR_Tbl_Offs -};; -{ .mfi - ldfe FR_C20 = [GR_ad_Ce],32 - fma.s1 FR_Rq2 = FR_Rq2,FR_4,FR_X2pX // (x-3)*(x-4) - add GR_ad_Ce7 = 16,GR_ad_Co7 -} -{ .mfi - ldfe FR_C30 = [GR_ad_Co],32 - fma.s1 FR_Rq3 = FR_Rq3,FR_6,FR_X2pX // (x-5)*(x-6) - nop.i 0 -};; -{ .mfi - ldfe FR_C40 = [GR_ad_Ce],32 - fma.s1 FR_Rq4 = FR_Rq4,FR_8,FR_X2pX // (x-7)*(x-8) -(p14) cmp.leu.unc p7,p0 = GR_0x30033,GR_Sign_Exp -} -{ .mfb - ldfe FR_C50 = [GR_ad_Co7],32 - fma.s1 FR_Rq5 = FR_Rq5,FR_10,FR_X2pX // (x-9)*(x-10) - // jump if x is less or equal to -2^52, i.e. x is big negative integer -(p7) br.cond.spnt tgamma_singularity -};; -{ .mfi - ldfe FR_C60 = [GR_ad_Ce7],32 - fma.s1 FR_C01 = FR_C01,f1,FR_r - add GR_ad_Ce = 0x560,GR_ad_Data -} -{ .mfi - ldfe FR_C70 = [GR_ad_Co7],32 - fma.s1 FR_rs = f0,f0,FR_r // reduced arg for sin(pi*x) - add GR_ad_Co = 0x550,GR_ad_Data -};; -{ .mfi - ldfe FR_C80 = [GR_ad_Ce7],32 - fma.s1 FR_C11 = FR_C11,f1,FR_r - nop.i 0 -} -{ .mfi - ldfe FR_C90 = [GR_ad_Co7],32 - fma.s1 FR_C21 = FR_C21,f1,FR_r - nop.i 0 -};; -.pred.rel "mutex",p12,p13 -{ .mfi -(p13) getf.sig GR_iSig = FR_iXt - fcmp.lt.s1 p11,p0 = FR_05,FR_r - mov GR_185 = 185 -} -{ .mfi - nop.m 0 - fma.s1 FR_Rq6 = FR_Rq6,FR_12,FR_X2pX // (x-11)*(x-12) - nop.i 0 -};; -{ .mfi - ldfe FR_CA0 = [GR_ad_Ce7],32 - fma.s1 FR_C31 = FR_C31,f1,FR_r -(p12) mov GR_iSig = 0 -} -{ .mfi - ldfe FR_An = [GR_ad_Co7],0x80 - fma.s1 FR_C41 = FR_C41,f1,FR_r - nop.i 0 -};; -{ .mfi -(p14) getf.sig GR_Sig = FR_r - fma.s1 FR_C51 = FR_C51,f1,FR_r -(p14) sub GR_iSig = r0,GR_iSig -} -{ .mfi - ldfe FR_S21 = [GR_ad_Co],32 - fma.s1 FR_C61 = FR_C61,f1,FR_r - nop.i 0 -};; -{ .mfi - ldfe FR_S19 = [GR_ad_Ce],32 - fma.s1 FR_C71 = FR_C71,f1,FR_r - and GR_SigRqLin = 0xF,GR_iSig -} -{ .mfi - ldfe FR_S17 = [GR_ad_Co],32 - fma.s1 FR_C81 = FR_C81,f1,FR_r - mov GR_2 = 2 -};; -{ .mfi -(p14) ldfe FR_InvAn = [GR_ad_Co7] - fma.s1 FR_C91 = FR_C91,f1,FR_r - // if significand of r is 0 tnan argument is negative integer -(p14) cmp.eq.unc p12,p0 = r0,GR_Sig -} -{ .mfb -(p8) sub GR_SigRqLin = GR_SigRqLin,GR_2 // subtract 2 if 2 <= x < 16 - fma.s1 FR_CA1 = FR_CA1,f1,FR_r - // jump if x is negative integer such that -2^52 < x < -185 -(p12) br.cond.spnt tgamma_singularity -};; -{ .mfi - setf.sig FR_Xt = GR_SigRqLin -(p11) fms.s1 FR_rs = f1,f1,FR_r -(p14) cmp.ltu.unc p7,p0 = GR_185,GR_iSig -} -{ .mfb - ldfe FR_S15 = [GR_ad_Ce],32 - fma.s1 FR_Rq7 = FR_Rq7,FR_14,FR_X2pX // (x-13)*(x-14) - // jump if x is noninteger such that -2^52 < x < -185 -(p7) br.cond.spnt tgamma_underflow -};; -{ .mfi - ldfe FR_S13 = [GR_ad_Co],48 - fma.s1 FR_C01 = FR_C01,FR_r,FR_C00 - and GR_Sig2 = 0xE,GR_SigRqLin -} -{ .mfi - ldfe FR_S11 = [GR_ad_Ce],48 - fma.s1 FR_C11 = FR_C11,FR_r,FR_C10 - nop.i 0 -};; -{ .mfi - ldfe FR_S9 = [GR_ad_Co],32 - fma.s1 FR_C21 = FR_C21,FR_r,FR_C20 - // should we mul by polynomial of recursion? - cmp.eq p13,p12 = r0,GR_SigRqLin -} -{ .mfi - ldfe FR_S7 = [GR_ad_Ce],32 - fma.s1 FR_C31 = FR_C31,FR_r,FR_C30 - nop.i 0 -};; -{ .mfi - ldfe FR_S5 = [GR_ad_Co],32 - fma.s1 FR_C41 = FR_C41,FR_r,FR_C40 - nop.i 0 -} -{ .mfi - ldfe FR_S3 = [GR_ad_Ce],32 - fma.s1 FR_C51 = FR_C51,FR_r,FR_C50 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C61 = FR_C61,FR_r,FR_C60 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_C71 = FR_C71,FR_r,FR_C70 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C81 = FR_C81,FR_r,FR_C80 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_C91 = FR_C91,FR_r,FR_C90 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_CA1 = FR_CA1,FR_r,FR_CA0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_C01 = FR_C01,FR_C11,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C21 = FR_C21,FR_C31,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_rs2 = FR_rs,FR_rs,f0 -(p12) cmp.lt.unc p7,p0 = 2,GR_Sig2 // should mul by FR_Rq2? -};; -{ .mfi - nop.m 0 - fma.s1 FR_C41 = FR_C41,FR_C51,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.s1 FR_Rq1 = FR_Rq1,FR_Rq2,f0 -(p12) cmp.lt.unc p9,p0 = 6,GR_Sig2 // should mul by FR_Rq4? -};; -{ .mfi - nop.m 0 - fma.s1 FR_C61 = FR_C61,FR_C71,f0 -(p15) cmp.eq p11,p0 = r0,r0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 FR_Rq3 = FR_Rq3,FR_Rq4,f0 -(p12) cmp.lt.unc p8,p0 = 10,GR_Sig2 // should mul by FR_Rq6? -};; -{ .mfi - nop.m 0 - fma.s1 FR_C81 = FR_C81,FR_C91,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fma.s1 FR_Rq5 = FR_Rq5,FR_Rq6,f0 -(p14) cmp.ltu p0,p11 = 0x9,GR_Tbl_Ind -};; -{ .mfi - nop.m 0 - fcvt.xf FR_RqLin = FR_Xt - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fma.s1 FR_CA1 = FR_CA1,FR_An,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S21 = FR_S21,FR_rs2,FR_S19 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S17 = FR_S17,FR_rs2,FR_S15 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C01 = FR_C01,FR_C21,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_rs4 = FR_rs2,FR_rs2,f0 -(p12) cmp.lt.unc p8,p0 = 4,GR_Sig2 // should mul by FR_Rq3? -};; -{ .mfi - nop.m 0 -(p8) fma.s1 FR_Rq1 = FR_Rq1,FR_Rq3,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S13 = FR_S13,FR_rs2,FR_S11 -(p12) cmp.lt.unc p9,p0 = 12,GR_Sig2 // should mul by FR_Rq7? -};; -{ .mfi - nop.m 0 - fma.s1 FR_C41 = FR_C41,FR_C61,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 FR_Rq5 = FR_Rq5,FR_Rq7,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C81 = FR_C81,FR_CA1,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S9 = FR_S9,FR_rs2,FR_S7 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S5 = FR_S5,FR_rs2,FR_S3 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_rs3 = FR_rs2,FR_rs,f0 -(p12) tbit.nz.unc p6,p0 = GR_SigRqLin,0 -} -{ .mfi - nop.m 0 - fma.s1 FR_rs8 = FR_rs4,FR_rs4,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S21 = FR_S21,FR_rs4,FR_S17 - mov GR_ExpOf1 = 0x2FFFF -} -{ .mfi - nop.m 0 -(p6) fms.s1 FR_RqLin = FR_AbsX,f1,FR_RqLin -(p12) cmp.lt.unc p8,p0 = 8,GR_Sig2 // should mul by FR_Rq5? -};; -{ .mfi - nop.m 0 - fma.s1 FR_C01 = FR_C01,FR_C41,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p8) fma.s1 FR_Rq1 = FR_Rq1,FR_Rq5,f0 -(p14) cmp.gtu.unc p7,p0 = GR_Sign_Exp,GR_ExpOf1 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S13 = FR_S13,FR_rs4,FR_S9 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.s1 FR_C81 = FR_C81,FR_AbsX,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p14) fma.s1 FR_AbsXp1 = f1,f1,FR_AbsX // |x|+1 - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fcmp.lt.unc.s1 p0,p10 = FR_AbsX,FR_OvfBound // x >= overflow_boundary - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_rs7 = FR_rs4,FR_rs3,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_S5 = FR_S5,FR_rs3,FR_rs - nop.i 0 -};; -{ .mib -(p14) cmp.lt p13,p0 = r0,r0 // set p13 to 0 if x < 0 -(p12) cmp.eq.unc p8,p9 = 1,GR_SigRqLin -(p10) br.cond.spnt tgamma_spec_res -};; -{ .mfi - getf.sig GR_Sig = FR_iXt -(p6) fma.s1 FR_Rq1 = FR_Rq1,FR_RqLin,f0 - // should we mul by polynomial of recursion? -(p15) cmp.eq.unc p0,p11 = r0,GR_SigRqLin -} -{ .mfb - nop.m 0 - fma.s1 FR_GAMMA = FR_C01,FR_C81,f0 -(p11) br.cond.spnt tgamma_positives -};; -{ .mfi - nop.m 0 - fma.s1 FR_S21 = FR_S21,FR_rs8,FR_S13 - nop.i 0 -} -{ .mfb - nop.m 0 -(p13) fma.d.s0 f8 = FR_C01,FR_C81,f0 -(p13) br.ret.spnt b0 -};; -.pred.rel "mutex",p8,p9 -{ .mfi - nop.m 0 -(p9) fma.s1 FR_GAMMA = FR_GAMMA,FR_Rq1,f0 - tbit.z p6,p7 = GR_Sig,0 // p6 if sin<0, p7 if sin>0 -} -{ .mfi - nop.m 0 -(p8) fma.s1 FR_GAMMA = FR_GAMMA,FR_RqLin,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_S21 = FR_S21,FR_rs7,FR_S5 - nop.i 0 -};; -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fnma.s1 FR_GAMMA = FR_GAMMA,FR_S21,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.s1 FR_GAMMA = FR_GAMMA,FR_S21,f0 - mov GR_Sig2 = 1 -};; -{ .mfi - nop.m 0 - frcpa.s1 FR_Rcp0,p0 = f1,FR_GAMMA - cmp.ltu p13,p0 = GR_Sign_Exp,GR_ExpOf1 -};; -// NR method: ineration #1 -{ .mfi -(p13) getf.exp GR_Sign_Exp = FR_AbsX - fnma.s1 FR_Rcp1 = FR_Rcp0,FR_GAMMA,f1 // t = 1 - r0*x -(p13) shl GR_Sig2 = GR_Sig2,63 -};; -{ .mfi -(p13) getf.sig GR_Sig = FR_AbsX - nop.f 0 -(p13) mov GR_NzOvfBound = 0xFBFF -};; -{ .mfi -(p13) cmp.ltu.unc p8,p0 = GR_Sign_Exp,GR_NzOvfBound // p8 <- overflow - nop.f 0 -(p13) cmp.eq.unc p9,p0 = GR_Sign_Exp,GR_NzOvfBound -};; -{ .mfb - nop.m 0 -(p13) fma.d.s0 FR_X = f1,f1,f8 // set deno & inexact flags -(p8) br.cond.spnt tgamma_ovf_near_0 //tgamma_neg_overflow -};; -{ .mib - nop.m 0 -(p9) cmp.eq.unc p8,p0 = GR_Sig,GR_Sig2 -(p8) br.cond.spnt tgamma_ovf_near_0_boundary //tgamma_neg_overflow -};; -{ .mfi - nop.m 0 - fma.s1 FR_Rcp1 = FR_Rcp0,FR_Rcp1,FR_Rcp0 - nop.i 0 -};; -// NR method: ineration #2 -{ .mfi - nop.m 0 - fnma.s1 FR_Rcp2 = FR_Rcp1,FR_GAMMA,f1 // t = 1 - r1*x - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_Rcp2 = FR_Rcp1,FR_Rcp2,FR_Rcp1 - nop.i 0 -};; -// NR method: ineration #3 -{ .mfi - nop.m 0 - fnma.s1 FR_Rcp3 = FR_Rcp2,FR_GAMMA,f1 // t = 1 - r2*x - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fma.s1 FR_Rcp2 = FR_Rcp2,FR_AbsXp1,f0 -(p14) cmp.ltu p10,p11 = 0x9,GR_Tbl_Ind -};; -.pred.rel "mutex",p10,p11 -{ .mfi - nop.m 0 -(p10) fma.s1 FR_GAMMA = FR_Rcp2,FR_Rcp3,FR_Rcp2 - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fma.d.s0 f8 = FR_Rcp2,FR_Rcp3,FR_Rcp2 - nop.i 0 -};; -{ .mfb - nop.m 0 -(p10) fma.d.s0 f8 = FR_GAMMA,FR_InvAn,f0 - br.ret.sptk b0 -};; - - -// here if x >= 3 -//-------------------------------------------------------------------- -.align 32 -tgamma_positives: -.pred.rel "mutex",p8,p9 -{ .mfi - nop.m 0 -(p9) fma.d.s0 f8 = FR_GAMMA,FR_Rq1,f0 - nop.i 0 -} -{ .mfb - nop.m 0 -(p8) fma.d.s0 f8 = FR_GAMMA,FR_RqLin,f0 - br.ret.sptk b0 -};; - -// here if 0 < x < 1 -//-------------------------------------------------------------------- -.align 32 -tgamma_from_0_to_2: -{ .mfi - getf.exp GR_Sign_Exp = FR_r02 - fms.s1 FR_r = FR_r02,f1,FR_Xmin - mov GR_ExpOf025 = 0xFFFD -} -{ .mfi - add GR_ad_Co = 0x1200,GR_ad_Data -(p6) fnma.s1 FR_Rcp1 = FR_Rcp0,FR_NormX,f1 // t = 1 - r0*x -(p6) mov GR_Sig2 = 1 -};; -{ .mfi -(p6) getf.sig GR_Sig = FR_NormX - nop.f 0 -(p6) shl GR_Sig2 = GR_Sig2,63 -} -{ .mfi - add GR_ad_Ce = 0x1210,GR_ad_Data - nop.f 0 -(p6) mov GR_NzOvfBound = 0xFBFF -};; -{ .mfi - cmp.eq p8,p0 = GR_Sign_Exp,GR_ExpOf05 // r02 >= 1/2 - nop.f 0 - cmp.eq p9,p10 = GR_Sign_Exp,GR_ExpOf025 // r02 >= 1/4 -} -{ .mfi -(p6) cmp.ltu.unc p11,p0 = GR_Sign_Exp,GR_NzOvfBound // p11 <- overflow - nop.f 0 -(p6) cmp.eq.unc p12,p0 = GR_Sign_Exp,GR_NzOvfBound -};; -.pred.rel "mutex",p8,p9 -{ .mfi -(p8) add GR_ad_Co = 0x200,GR_ad_Co -(p6) fma.d.s0 FR_X = f1,f1,f8 // set deno & inexact flags -(p9) add GR_ad_Co = 0x100,GR_ad_Co -} -{ .mib -(p8) add GR_ad_Ce = 0x200,GR_ad_Ce -(p9) add GR_ad_Ce = 0x100,GR_ad_Ce -(p11) br.cond.spnt tgamma_ovf_near_0 //tgamma_spec_res -};; -{ .mfi - ldfe FR_A15 = [GR_ad_Co],32 - nop.f 0 -(p12) cmp.eq.unc p13,p0 = GR_Sig,GR_Sig2 -} -{ .mfb - ldfe FR_A14 = [GR_ad_Ce],32 - nop.f 0 -(p13) br.cond.spnt tgamma_ovf_near_0_boundary //tgamma_spec_res -};; -{ .mfi - ldfe FR_A13 = [GR_ad_Co],32 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe FR_A12 = [GR_ad_Ce],32 - nop.f 0 - nop.i 0 -};; -.pred.rel "mutex",p9,p10 -{ .mfi - ldfe FR_A11 = [GR_ad_Co],32 -(p10) fma.s1 FR_r2 = FR_r02,FR_r02,f0 - nop.i 0 -} -{ .mfi - ldfe FR_A10 = [GR_ad_Ce],32 -(p9) fma.s1 FR_r2 = FR_r,FR_r,f0 - nop.i 0 -};; -{ .mfi - ldfe FR_A9 = [GR_ad_Co],32 -(p6) fma.s1 FR_Rcp1 = FR_Rcp0,FR_Rcp1,FR_Rcp0 - nop.i 0 -} -{ .mfi - ldfe FR_A8 = [GR_ad_Ce],32 -(p10) fma.s1 FR_r = f0,f0,FR_r02 - nop.i 0 -};; -{ .mfi - ldfe FR_A7 = [GR_ad_Co],32 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe FR_A6 = [GR_ad_Ce],32 - nop.f 0 - nop.i 0 -};; -{ .mfi - ldfe FR_A5 = [GR_ad_Co],32 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe FR_A4 = [GR_ad_Ce],32 - nop.f 0 - nop.i 0 -};; -{ .mfi - ldfe FR_A3 = [GR_ad_Co],32 - nop.f 0 - nop.i 0 -} -{ .mfi - ldfe FR_A2 = [GR_ad_Ce],32 - nop.f 0 - nop.i 0 -};; -{ .mfi - ldfe FR_A1 = [GR_ad_Co],32 - fma.s1 FR_r4 = FR_r2,FR_r2,f0 - nop.i 0 -} -{ .mfi - ldfe FR_A0 = [GR_ad_Ce],32 - nop.f 0 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p6) fnma.s1 FR_Rcp2 = FR_Rcp1,FR_NormX,f1 // t = 1 - r1*x - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A15 = FR_A15,FR_r,FR_A14 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A11 = FR_A11,FR_r,FR_A10 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_r8 = FR_r4,FR_r4,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p6) fma.s1 FR_Rcp2 = FR_Rcp1,FR_Rcp2,FR_Rcp1 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A7 = FR_A7,FR_r,FR_A6 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A3 = FR_A3,FR_r,FR_A2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A15 = FR_A15,FR_r,FR_A13 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A11 = FR_A11,FR_r,FR_A9 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p6) fnma.s1 FR_Rcp3 = FR_Rcp2,FR_NormX,f1 // t = 1 - r1*x - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A7 = FR_A7,FR_r,FR_A5 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A3 = FR_A3,FR_r,FR_A1 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A15 = FR_A15,FR_r,FR_A12 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A11 = FR_A11,FR_r,FR_A8 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p6) fma.s1 FR_Rcp3 = FR_Rcp2,FR_Rcp3,FR_Rcp2 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A7 = FR_A7,FR_r,FR_A4 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A3 = FR_A3,FR_r,FR_A0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A15 = FR_A15,FR_r4,FR_A11 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A7 = FR_A7,FR_r4,FR_A3 - nop.i 0 -};; -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fma.s1 FR_A15 = FR_A15,FR_r8,FR_A7 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.d.s0 f8 = FR_A15,FR_r8,FR_A7 - nop.i 0 -};; -{ .mfb - nop.m 0 -(p6) fma.d.s0 f8 = FR_A15,FR_Rcp3,f0 - br.ret.sptk b0 -};; - -// overflow -//-------------------------------------------------------------------- -.align 32 -tgamma_ovf_near_0_boundary: -.pred.rel "mutex",p14,p15 -{ .mfi - mov GR_fpsr = ar.fpsr - nop.f 0 -(p15) mov r8 = 0x7ff -} -{ .mfi - nop.m 0 - nop.f 0 -(p14) mov r8 = 0xfff -};; -{ .mfi - nop.m 0 - nop.f 0 - shl r8 = r8,52 -};; -{ .mfi - sub r8 = r8,r0,1 - nop.f 0 - extr.u GR_fpsr = GR_fpsr,10,2 // rounding mode -};; -.pred.rel "mutex",p14,p15 -{ .mfi - // set p8 to 0 in case of overflow and to 1 otherwise - // for negative arg: - // no overflow if rounding mode either Z or +Inf, i.e. - // GR_fpsr > 1 -(p14) cmp.lt p8,p0 = 1,GR_fpsr - nop.f 0 - // for positive arg: - // no overflow if rounding mode either Z or -Inf, i.e. - // (GR_fpsr & 1) == 0 -(p15) tbit.z p0,p8 = GR_fpsr,0 -};; -{ .mib -(p8) setf.d f8 = r8 // set result to 0x7fefffffffffffff without - // OVERFLOW flag raising - nop.i 0 -(p8) br.ret.sptk b0 -};; -.align 32 -tgamma_ovf_near_0: -{ .mfi - mov r8 = 0x1FFFE - nop.f 0 - nop.i 0 -};; -{ .mfi - setf.exp f9 = r8 - fmerge.s FR_X = f8,f8 - mov GR_TAG = 258 // overflow -};; -.pred.rel "mutex",p14,p15 -{ .mfi - nop.m 0 -(p15) fma.d.s0 f8 = f9,f9,f0 // Set I,O and +INF result - nop.i 0 -} -{ .mfb - nop.m 0 -(p14) fnma.d.s0 f8 = f9,f9,f0 // Set I,O and -INF result - br.cond.sptk tgamma_libm_err -};; -// overflow or absolute value of x is too big -//-------------------------------------------------------------------- -.align 32 -tgamma_spec_res: -{ .mfi - mov GR_0x30033 = 0x30033 -(p14) fcmp.eq.unc.s1 p10,p11 = f8,FR_Xt -(p15) mov r8 = 0x1FFFE -};; -{ .mfi -(p15) setf.exp f9 = r8 - nop.f 0 - nop.i 0 -};; -{ .mfb -(p11) cmp.ltu.unc p7,p8 = GR_0x30033,GR_Sign_Exp - nop.f 0 -(p10) br.cond.spnt tgamma_singularity -};; -.pred.rel "mutex",p7,p8 -{ .mbb - nop.m 0 -(p7) br.cond.spnt tgamma_singularity -(p8) br.cond.spnt tgamma_underflow -};; -{ .mfi - nop.m 0 - fmerge.s FR_X = f8,f8 - mov GR_TAG = 258 // overflow -} -{ .mfb - nop.m 0 -(p15) fma.d.s0 f8 = f9,f9,f0 // Set I,O and +INF result - br.cond.sptk tgamma_libm_err -};; - -// x is negative integer or +/-0 -//-------------------------------------------------------------------- -.align 32 -tgamma_singularity: -{ .mfi - nop.m 0 - fmerge.s FR_X = f8,f8 - mov GR_TAG = 259 // negative -} -{ .mfb - nop.m 0 - frcpa.s0 f8,p0 = f0,f0 - br.cond.sptk tgamma_libm_err -};; -// x is negative noninteger with big absolute value -//-------------------------------------------------------------------- -.align 32 -tgamma_underflow: -{ .mmi - getf.sig GR_Sig = FR_iXt - mov r11 = 0x00001 - nop.i 0 -};; -{ .mfi - setf.exp f9 = r11 - nop.f 0 - nop.i 0 -};; -{ .mfi - nop.m 0 - nop.f 0 - tbit.z p6,p7 = GR_Sig,0 -};; -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fms.d.s0 f8 = f9,f9,f9 - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fma.d.s0 f8 = f9,f9,f9 - br.ret.sptk b0 -};; - -// x for natval, nan, +/-inf or +/-0 -//-------------------------------------------------------------------- -.align 32 -tgamma_spec: -{ .mfi - nop.m 0 - fclass.m p6,p0 = f8,0x1E1 // Test x for natval, nan, +inf - nop.i 0 -};; -{ .mfi - nop.m 0 - fclass.m p7,p8 = f8,0x7 // +/-0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fmerge.s FR_X = f8,f8 - nop.i 0 -} -{ .mfb - nop.m 0 -(p6) fma.d.s0 f8 = f8,f1,f8 -(p6) br.ret.spnt b0 -};; -.pred.rel "mutex",p7,p8 -{ .mfi -(p7) mov GR_TAG = 259 // negative -(p7) frcpa.s0 f8,p0 = f1,f8 - nop.i 0 -} -{ .mib - nop.m 0 - nop.i 0 -(p8) br.cond.spnt tgamma_singularity -};; - -.align 32 -tgamma_libm_err: -{ .mfi - alloc r32 = ar.pfs,1,4,4,0 - nop.f 0 - mov GR_Parameter_TAG = GR_TAG -};; - -GLOBAL_LIBM_END(tgamma) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfd [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfd [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfd [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/w_tgammaf_compat.S b/sysdeps/ia64/fpu/w_tgammaf_compat.S deleted file mode 100644 index 0fbd840adb..0000000000 --- a/sysdeps/ia64/fpu/w_tgammaf_compat.S +++ /dev/null @@ -1,1330 +0,0 @@ -.file "tgammaf.s" - - -// Copyright (c) 2001 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2001 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,INCLUDING,BUT NOT -// LIMITED TO,THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT,INDIRECT,INCIDENTAL,SPECIAL, -// EXEMPLARY,OR CONSEQUENTIAL DAMAGES (INCLUDING,BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,DATA,OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY,WHETHER IN CONTRACT,STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE,EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code,and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -//********************************************************************* -// -// History: -// 11/30/01 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align -// 04/04/03 Changed error codes for overflow and negative integers -// 04/10/03 Changed code for overflow near zero handling -// 12/16/03 Fixed parameter passing to/from error handling routine -// 03/31/05 Reformatted delimiters between data tables -// -//********************************************************************* -// -//********************************************************************* -// -// Function: tgammaf(x) computes the principle value of the GAMMA -// function of x. -// -//********************************************************************* -// -// Resources Used: -// -// Floating-Point Registers: f8-f15 -// f33-f75 -// -// General Purpose Registers: -// r8-r11 -// r14-r29 -// r32-r36 -// r37-r40 (Used to pass arguments to error handling routine) -// -// Predicate Registers: p6-p15 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// tgammaf(+inf) = +inf -// tgammaf(-inf) = QNaN -// tgammaf(+/-0) = +/-inf -// tgammaf(x<0, x - integer) = QNaN -// tgammaf(SNaN) = QNaN -// tgammaf(QNaN) = QNaN -// -//********************************************************************* -// -// Overview -// -// The method consists of three cases. -// -// If 2 <= x < OVERFLOW_BOUNDARY use case tgamma_regular; -// else if 0 < x < 2 use case tgamma_from_0_to_2; -// else if -(i+1) < x < -i, i = 0...43 use case tgamma_negatives; -// -// Case 2 <= x < OVERFLOW_BOUNDARY -// ------------------------------- -// Here we use algorithm based on the recursive formula -// GAMMA(x+1) = x*GAMMA(x). For that we subdivide interval -// [2; OVERFLOW_BOUNDARY] into intervals [8*n; 8*(n+1)] and -// approximate GAMMA(x) by polynomial of 22th degree on each -// [8*n; 8*n+1], recursive formula is used to expand GAMMA(x) -// to [8*n; 8*n+1]. In other words we need to find n, i and r -// such that x = 8 * n + i + r where n and i are integer numbers -// and r is fractional part of x. So GAMMA(x) = GAMMA(8*n+i+r) = -// = (x-1)*(x-2)*...*(x-i)*GAMMA(x-i) = -// = (x-1)*(x-2)*...*(x-i)*GAMMA(8*n+r) ~ -// ~ (x-1)*(x-2)*...*(x-i)*P12n(r). -// -// Step 1: Reduction -// ----------------- -// N = [x] with truncate -// r = x - N, note 0 <= r < 1 -// -// n = N & ~0xF - index of table that contains coefficient of -// polynomial approximation -// i = N & 0xF - is used in recursive formula -// -// -// Step 2: Approximation -// --------------------- -// We use factorized minimax approximation polynomials -// P12n(r) = A12*(r^2+C01(n)*r+C00(n))* -// *(r^2+C11(n)*r+C10(n))*...*(r^2+C51(n)*r+C50(n)) -// -// Step 3: Recursion -// ----------------- -// In case when i > 0 we need to multiply P12n(r) by product -// R(i,x)=(x-1)*(x-2)*...*(x-i). To reduce number of fp-instructions -// we can calculate R as follow: -// R(i,x) = ((x-1)*(x-2))*((x-3)*(x-4))*...*((x-(i-1))*(x-i)) if i is -// even or R = ((x-1)*(x-2))*((x-3)*(x-4))*...*((x-(i-2))*(x-(i-1)))* -// *(i-1) if i is odd. In both cases we need to calculate -// R2(i,x) = (x^2-3*x+2)*(x^2-7*x+12)*...*(x^2+x+2*j*(2*j-1)) = -// = ((x^2-x)+2*(1-x))*((x^2-x)+6*(2-x))*...*((x^2-x)+2*(2*j-1)*(j-x)) = -// = (RA+2*RB)*(RA+6*(1-RB))*...*(RA+2*(2*j-1)*(j-1+RB)) -// where j = 1..[i/2], RA = x^2-x, RB = 1-x. -// -// Step 4: Reconstruction -// ---------------------- -// Reconstruction is just simple multiplication i.e. -// GAMMA(x) = P12n(r)*R(i,x) -// -// Case 0 < x < 2 -// -------------- -// To calculate GAMMA(x) on this interval we do following -// if 1.0 <= x < 1.25 than GAMMA(x) = P7(x-1) -// if 1.25 <= x < 1.5 than GAMMA(x) = P7(x-x_min) where -// x_min is point of local minimum on [1; 2] interval. -// if 1.5 <= x < 1.75 than GAMMA(x) = P7(x-1.5) -// if 1.75 <= x < 2.0 than GAMMA(x) = P7(x-1.5) -// and -// if 0 < x < 1 than GAMMA(x) = GAMMA(x+1)/x -// -// Case -(i+1) < x < -i, i = 0...43 -// ---------------------------------- -// Here we use the fact that GAMMA(-x) = PI/(x*GAMMA(x)*sin(PI*x)) and -// so we need to calculate GAMMA(x), sin(PI*x)/PI. Calculation of -// GAMMA(x) is described above. -// -// Step 1: Reduction -// ----------------- -// Note that period of sin(PI*x) is 2 and range reduction for -// sin(PI*x) is like to range reduction for GAMMA(x) -// i.e rs = x - round(x) and |rs| <= 0.5. -// -// Step 2: Approximation -// --------------------- -// To approximate sin(PI*x)/PI = sin(PI*(2*n+rs))/PI = -// = (-1)^n*sin(PI*rs)/PI Taylor series is used. -// sin(PI*rs)/PI ~ S17(rs). -// -// Step 3: Division -// ---------------- -// To calculate 1/x and 1/(GAMMA(x)*S12(rs)) we use frcpa -// instruction with following Newton-Raphson interations. -// -// -//********************************************************************* - -GR_ad_Data = r8 -GR_TAG = r8 -GR_SignExp = r9 -GR_Sig = r10 -GR_ArgNz = r10 -GR_RqDeg = r11 - -GR_NanBound = r14 -GR_ExpOf025 = r15 -GR_ExpOf05 = r16 -GR_ad_Co = r17 -GR_ad_Ce = r18 -GR_TblOffs = r19 -GR_Arg = r20 -GR_Exp2Ind = r21 -GR_TblOffsMask = r21 -GR_Offs = r22 -GR_OvfNzBound = r23 -GR_ZeroResBound = r24 -GR_ad_SinO = r25 -GR_ad_SinE = r26 -GR_Correction = r27 -GR_Tbl12Offs = r28 -GR_NzBound = r28 -GR_ExpOf1 = r29 -GR_fpsr = r29 - -GR_SAVE_B0 = r33 -GR_SAVE_PFS = r34 -GR_SAVE_GP = r35 -GR_SAVE_SP = r36 - -GR_Parameter_X = r37 -GR_Parameter_Y = r38 -GR_Parameter_RESULT = r39 -GR_Parameter_TAG = r40 - - -FR_X = f10 -FR_Y = f1 -FR_RESULT = f8 - -FR_iXt = f11 -FR_Xt = f12 -FR_r = f13 -FR_r2 = f14 -FR_r4 = f15 - -FR_C01 = f33 -FR_A7 = f33 -FR_C11 = f34 -FR_A6 = f34 -FR_C21 = f35 -FR_A5 = f35 -FR_C31 = f36 -FR_A4 = f36 -FR_C41 = f37 -FR_A3 = f37 -FR_C51 = f38 -FR_A2 = f38 - -FR_C00 = f39 -FR_A1 = f39 -FR_C10 = f40 -FR_A0 = f40 -FR_C20 = f41 -FR_C30 = f42 -FR_C40 = f43 -FR_C50 = f44 -FR_An = f45 -FR_OvfBound = f46 -FR_InvAn = f47 - -FR_Multplr = f48 -FR_NormX = f49 -FR_X2mX = f50 -FR_1mX = f51 -FR_Rq0 = f51 -FR_Rq1 = f52 -FR_Rq2 = f53 -FR_Rq3 = f54 - -FR_Rcp0 = f55 -FR_Rcp1 = f56 -FR_Rcp2 = f57 - -FR_InvNormX1 = f58 -FR_InvNormX2 = f59 - -FR_rs = f60 -FR_rs2 = f61 - -FR_LocalMin = f62 -FR_10 = f63 - -FR_05 = f64 - -FR_S32 = f65 -FR_S31 = f66 -FR_S01 = f67 -FR_S11 = f68 -FR_S21 = f69 -FR_S00 = f70 -FR_S10 = f71 -FR_S20 = f72 - -FR_GAMMA = f73 -FR_2 = f74 -FR_6 = f75 - - - - -// Data tables -//============================================================== -RODATA -.align 16 -LOCAL_OBJECT_START(tgammaf_data) -data8 0x3FDD8B618D5AF8FE // local minimum (0.461632144968362356785) -data8 0x4024000000000000 // 10.0 -data8 0x3E90FC992FF39E13 // S32 -data8 0xBEC144B2760626E2 // S31 -// -//[2; 8) -data8 0x4009EFD1BA0CB3B4 // C01 -data8 0x3FFFB35378FF4822 // C11 -data8 0xC01032270413B896 // C41 -data8 0xC01F171A4C0D6827 // C51 -data8 0x40148F8E197396AC // C20 -data8 0x401C601959F1249C // C30 -data8 0x3EE21AD881741977 // An -data8 0x4041852200000000 // overflow boundary (35.04010009765625) -data8 0x3FD9CE68F695B198 // C21 -data8 0xBFF8C30AC900DA03 // C31 -data8 0x400E17D2F0535C02 // C00 -data8 0x4010689240F7FAC8 // C10 -data8 0x402563147DDCCF8D // C40 -data8 0x4033406D0480A21C // C50 -// -//[8; 16) -data8 0x4006222BAE0B793B // C01 -data8 0x4002452733473EDA // C11 -data8 0xC0010EF3326FDDB3 // C41 -data8 0xC01492B817F99C0F // C51 -data8 0x40099C905A249B75 // C20 -data8 0x4012B972AE0E533D // C30 -data8 0x3FE6F6DB91D0D4CC // An -data8 0x4041852200000000 // overflow boundary -data8 0x3FF545828F7B73C5 // C21 -data8 0xBFBBD210578764DF // C31 -data8 0x4000542098F53CFC // C00 -data8 0x40032C1309AD6C81 // C10 -data8 0x401D7331E19BD2E1 // C40 -data8 0x402A06807295EF57 // C50 -// -//[16; 24) -data8 0x4000131002867596 // C01 -data8 0x3FFAA362D5D1B6F2 // C11 -data8 0xBFFCB6985697DB6D // C41 -data8 0xC0115BEE3BFC3B3B // C51 -data8 0x3FFE62FF83456F73 // C20 -data8 0x4007E33478A114C4 // C30 -data8 0x41E9B2B73795ED57 // An -data8 0x4041852200000000 // overflow boundary -data8 0x3FEEB1F345BC2769 // C21 -data8 0xBFC3BBE6E7F3316F // C31 -data8 0x3FF14E07DA5E9983 // C00 -data8 0x3FF53B76BF81E2C0 // C10 -data8 0x4014051E0269A3DC // C40 -data8 0x40229D4227468EDB // C50 -// -//[24; 32) -data8 0x3FFAF7BD498384DE // C01 -data8 0x3FF62AD8B4D1C3D2 // C11 -data8 0xBFFABCADCD004C32 // C41 -data8 0xC00FADE97C097EC9 // C51 -data8 0x3FF6DA9ED737707E // C20 -data8 0x4002A29E9E0C782C // C30 -data8 0x44329D5B5167C6C3 // An -data8 0x4041852200000000 // overflow boundary -data8 0x3FE8943CBBB4B727 // C21 -data8 0xBFCB39D466E11756 // C31 -data8 0x3FE879AF3243D8C1 // C00 -data8 0x3FEEC7DEBB14CE1E // C10 -data8 0x401017B79BA80BCB // C40 -data8 0x401E941DC3C4DE80 // C50 -// -//[32; 40) -data8 0x3FF7ECB3A0E8FE5C // C01 -data8 0x3FF3815A8516316B // C11 -data8 0xBFF9ABD8FCC000C3 // C41 -data8 0xC00DD89969A4195B // C51 -data8 0x3FF2E43139CBF563 // C20 -data8 0x3FFF96DC3474A606 // C30 -data8 0x46AFF4CA9B0DDDF0 // An -data8 0x4041852200000000 // overflow boundary -data8 0x3FE4CE76DA1B5783 // C21 -data8 0xBFD0524DB460BC4E // C31 -data8 0x3FE35852DF14E200 // C00 -data8 0x3FE8C7610359F642 // C10 -data8 0x400BCF750EC16173 // C40 -data8 0x401AC14E02EA701C // C50 -// -//[40; 48) -data8 0x3FF5DCE4D8193097 // C01 -data8 0x3FF1B0D8C4974FFA // C11 -data8 0xBFF8FB450194CAEA // C41 -data8 0xC00C9658E030A6C4 // C51 -data8 0x3FF068851118AB46 // C20 -data8 0x3FFBF7C7BB46BF7D // C30 -data8 0x3FF0000000000000 // An -data8 0x4041852200000000 // overflow boundary -data8 0x3FE231DEB11D847A // C21 -data8 0xBFD251ECAFD7E935 // C31 -data8 0x3FE0368AE288F6BF // C00 -data8 0x3FE513AE4215A70C // C10 -data8 0x4008F960F7141B8B // C40 -data8 0x40183BA08134397B // C50 -// -//[1.0; 1.25) -data8 0xBFD9909648921868 // A7 -data8 0x3FE96FFEEEA8520F // A6 -data8 0xBFED0800D93449B8 // A3 -data8 0x3FEFA648D144911C // A2 -data8 0xBFEE3720F7720B4D // A5 -data8 0x3FEF4857A010CA3B // A4 -data8 0xBFE2788CCD545AA4 // A1 -data8 0x3FEFFFFFFFE9209E // A0 -// -//[1.25; 1.5) -data8 0xBFB421236426936C // A7 -data8 0x3FAF237514F36691 // A6 -data8 0xBFC0BADE710A10B9 // A3 -data8 0x3FDB6C5465BBEF1F // A2 -data8 0xBFB7E7F83A546EBE // A5 -data8 0x3FC496A01A545163 // A4 -data8 0xBDEE86A39D8452EB // A1 -data8 0x3FEC56DC82A39AA2 // A0 -// -//[1.5; 1.75) -data8 0xBF94730B51795867 // A7 -data8 0x3FBF4203E3816C7B // A6 -data8 0xBFE85B427DBD23E4 // A3 -data8 0x3FEE65557AB26771 // A2 -data8 0xBFD59D31BE3AB42A // A5 -data8 0x3FE3C90CC8F09147 // A4 -data8 0xBFE245971DF735B8 // A1 -data8 0x3FEFFC613AE7FBC8 // A0 -// -//[1.75; 2.0) -data8 0xBF7746A85137617E // A7 -data8 0x3FA96E37D09735F3 // A6 -data8 0xBFE3C24AC40AC0BB // A3 -data8 0x3FEC56A80A977CA5 // A2 -data8 0xBFC6F0E707560916 // A5 -data8 0x3FDB262D949175BE // A4 -data8 0xBFE1C1AEDFB25495 // A1 -data8 0x3FEFEE1E644B2022 // A0 -// -// sin(pi*x)/pi -data8 0xC026FB0D377656CC // S01 -data8 0x3FFFB15F95A22324 // S11 -data8 0x406CE58F4A41C6E7 // S10 -data8 0x404453786302C61E // S20 -data8 0xC023D59A47DBFCD3 // S21 -data8 0x405541D7ABECEFCA // S00 -// -// 1/An for [40; 48) -data8 0xCAA7576DE621FCD5, 0x3F68 -LOCAL_OBJECT_END(tgammaf_data) - -//============================================================== -// Code -//============================================================== - -.section .text -GLOBAL_LIBM_ENTRY(tgammaf) -{ .mfi - getf.exp GR_SignExp = f8 - fma.s1 FR_NormX = f8,f1,f0 - addl GR_ad_Data = @ltoff(tgammaf_data), gp -} -{ .mfi - mov GR_ExpOf05 = 0xFFFE - fcvt.fx.trunc.s1 FR_iXt = f8 // [x] - mov GR_Offs = 0 // 2 <= x < 8 -};; -{ .mfi - getf.d GR_Arg = f8 - fcmp.lt.s1 p14,p15 = f8,f0 - mov GR_Tbl12Offs = 0 -} -{ .mfi - setf.exp FR_05 = GR_ExpOf05 - fma.s1 FR_2 = f1,f1,f1 // 2 - mov GR_Correction = 0 -};; -{ .mfi - ld8 GR_ad_Data = [GR_ad_Data] - fclass.m p10,p0 = f8,0x1E7 // is x NaTVal, NaN, +/-0 or +/-INF? - tbit.z p12,p13 = GR_SignExp,16 // p13 if |x| >= 2 -} -{ .mfi - mov GR_ExpOf1 = 0xFFFF - fcvt.fx.s1 FR_rs = f8 // round(x) - and GR_Exp2Ind = 7,GR_SignExp -};; -.pred.rel "mutex",p14,p15 -{ .mfi -(p15) cmp.eq.unc p11,p0 = GR_ExpOf1,GR_SignExp // p11 if 1 <= x < 2 -(p14) fma.s1 FR_1mX = f1,f1,f8 // 1 - |x| - mov GR_Sig = 0 // if |x| < 2 -} -{ .mfi -(p13) cmp.eq.unc p7,p0 = 2,GR_Exp2Ind -(p15) fms.s1 FR_1mX = f1,f1,f8 // 1 - |x| -(p13) cmp.eq.unc p8,p0 = 3,GR_Exp2Ind -};; -.pred.rel "mutex",p7,p8 -{ .mfi -(p7) mov GR_Offs = 0x7 // 8 <= |x| < 16 - nop.f 0 -(p8) tbit.z.unc p0,p6 = GR_Arg,51 -} -{ .mib -(p13) cmp.lt.unc p9,p0 = 3,GR_Exp2Ind -(p8) mov GR_Offs = 0xE // 16 <= |x| < 32 - // jump if x is NaTVal, NaN, +/-0 or +/-INF? -(p10) br.cond.spnt tgammaf_spec_args -};; -.pred.rel "mutex",p14,p15 -.pred.rel "mutex",p6,p9 -{ .mfi -(p9) mov GR_Offs = 0x1C // 32 <= |x| -(p14) fma.s1 FR_X2mX = FR_NormX,FR_NormX,FR_NormX // x^2-|x| -(p9) tbit.z.unc p0,p8 = GR_Arg,50 -} -{ .mfi - ldfpd FR_LocalMin,FR_10 = [GR_ad_Data],16 -(p15) fms.s1 FR_X2mX = FR_NormX,FR_NormX,FR_NormX // x^2-|x| -(p6) add GR_Offs = 0x7,GR_Offs // 24 <= x < 32 -};; -.pred.rel "mutex",p8,p12 -{ .mfi - add GR_ad_Ce = 0x50,GR_ad_Data -(p15) fcmp.lt.unc.s1 p10,p0 = f8,f1 // p10 if 0 <= x < 1 - mov GR_OvfNzBound = 2 -} -{ .mib - ldfpd FR_S32,FR_S31 = [GR_ad_Data],16 -(p8) add GR_Offs = 0x7,GR_Offs // 40 <= |x| - // jump if 1 <= x < 2 -(p11) br.cond.spnt tgammaf_from_1_to_2 -};; -{ .mfi - shladd GR_ad_Ce = GR_Offs,4,GR_ad_Ce - fcvt.xf FR_Xt = FR_iXt // [x] -(p13) cmp.eq.unc p7,p0 = r0,GR_Offs // p7 if 2 <= |x| < 8 -} -{ .mfi - shladd GR_ad_Co = GR_Offs,4,GR_ad_Data - fma.s1 FR_6 = FR_2,FR_2,FR_2 - mov GR_ExpOf05 = 0x7FC -};; -{ .mfi -(p13) getf.sig GR_Sig = FR_iXt // if |x| >= 2 - frcpa.s1 FR_Rcp0,p0 = f1,FR_NormX -(p10) shr GR_Arg = GR_Arg,51 -} -{ .mib - ldfpd FR_C01,FR_C11 = [GR_ad_Co],16 -(p7) mov GR_Correction = 2 - // jump if 0 < x < 1 -(p10) br.cond.spnt tgammaf_from_0_to_1 -};; -{ .mfi - ldfpd FR_C21,FR_C31 = [GR_ad_Ce],16 - fma.s1 FR_Rq2 = f1,f1,FR_1mX // 2 - |x| -(p14) sub GR_Correction = r0,GR_Correction -} -{ .mfi - ldfpd FR_C41,FR_C51 = [GR_ad_Co],16 -(p14) fcvt.xf FR_rs = FR_rs -(p14) add GR_ad_SinO = 0x3A0,GR_ad_Data -};; -.pred.rel "mutex",p14,p15 -{ .mfi - ldfpd FR_C00,FR_C10 = [GR_ad_Ce],16 - nop.f 0 -(p14) sub GR_Sig = GR_Correction,GR_Sig -} -{ .mfi - ldfpd FR_C20,FR_C30 = [GR_ad_Co],16 - fma.s1 FR_Rq1 = FR_1mX,FR_2,FR_X2mX // (x-1)*(x-2) -(p15) sub GR_Sig = GR_Sig,GR_Correction -};; -{ .mfi -(p14) ldfpd FR_S01,FR_S11 = [GR_ad_SinO],16 - fma.s1 FR_Rq3 = FR_2,f1,FR_1mX // 3 - |x| - and GR_RqDeg = 0x6,GR_Sig -} -{ .mfi - ldfpd FR_C40,FR_C50 = [GR_ad_Ce],16 -(p14) fma.d.s0 FR_X = f0,f0,f8 // set deno flag - mov GR_NanBound = 0x30016 // -2^23 -};; -.pred.rel "mutex",p14,p15 -{ .mfi -(p14) add GR_ad_SinE = 0x3C0,GR_ad_Data -(p15) fms.s1 FR_r = FR_NormX,f1,FR_Xt // r = x - [x] - cmp.eq p8,p0 = 2,GR_RqDeg -} -{ .mfi - ldfpd FR_An,FR_OvfBound = [GR_ad_Co] -(p14) fms.s1 FR_r = FR_Xt,f1,FR_NormX // r = |x - [x]| - cmp.eq p9,p0 = 4,GR_RqDeg -};; -.pred.rel "mutex",p8,p9 -{ .mfi -(p14) ldfpd FR_S21,FR_S00 = [GR_ad_SinE],16 -(p8) fma.s1 FR_Rq0 = FR_2,f1,FR_1mX // (3-x) - tbit.z p0,p6 = GR_Sig,0 -} -{ .mfi -(p14) ldfpd FR_S10,FR_S20 = [GR_ad_SinO],16 -(p9) fma.s1 FR_Rq0 = FR_2,FR_2,FR_1mX // (5-x) - cmp.eq p10,p0 = 6,GR_RqDeg -};; -{ .mfi -(p14) getf.s GR_Arg = f8 -(p14) fcmp.eq.unc.s1 p13,p0 = FR_NormX,FR_Xt -(p14) mov GR_ZeroResBound = 0xC22C // -43 -} -{ .mfi -(p14) ldfe FR_InvAn = [GR_ad_SinE] -(p10) fma.s1 FR_Rq0 = FR_6,f1,FR_1mX // (7-x) - cmp.eq p7,p0 = r0,GR_RqDeg -};; -{ .mfi -(p14) cmp.ge.unc p11,p0 = GR_SignExp,GR_NanBound - fma.s1 FR_Rq2 = FR_Rq2,FR_6,FR_X2mX // (x-3)*(x-4) -(p14) shl GR_ZeroResBound = GR_ZeroResBound,16 -} -{ .mfb -(p14) mov GR_OvfNzBound = 0x802 -(p14) fms.s1 FR_rs = FR_rs,f1,FR_NormX // rs = round(x) - x - // jump if x < -2^23 i.e. x is negative integer -(p11) br.cond.spnt tgammaf_singularity -};; -{ .mfi - nop.m 0 -(p7) fma.s1 FR_Rq1 = f0,f0,f1 -(p14) shl GR_OvfNzBound = GR_OvfNzBound,20 -} -{ .mfb - nop.m 0 - fma.s1 FR_Rq3 = FR_Rq3,FR_10,FR_X2mX // (x-5)*(x-6) - // jump if x is negative integer such that -2^23 < x < 0 -(p13) br.cond.spnt tgammaf_singularity -};; -{ .mfi - nop.m 0 - fma.s1 FR_C01 = FR_C01,f1,FR_r -(p14) mov GR_ExpOf05 = 0xFFFE -} -{ .mfi -(p14) cmp.eq.unc p7,p0 = GR_Arg,GR_OvfNzBound - fma.s1 FR_C11 = FR_C11,f1,FR_r -(p14) cmp.ltu.unc p11,p0 = GR_Arg,GR_OvfNzBound -};; -{ .mfi - nop.m 0 - fma.s1 FR_C21 = FR_C21,f1,FR_r -(p14) cmp.ltu.unc p9,p0 = GR_ZeroResBound,GR_Arg -} -{ .mfb - nop.m 0 - fma.s1 FR_C31 = FR_C31,f1,FR_r - // jump if argument is close to 0 negative -(p11) br.cond.spnt tgammaf_overflow -};; -{ .mfi - nop.m 0 - fma.s1 FR_C41 = FR_C41,f1,FR_r - nop.i 0 -} -{ .mfb - nop.m 0 - fma.s1 FR_C51 = FR_C51,f1,FR_r - // jump if x is negative noninteger such that -2^23 < x < -43 -(p9) br.cond.spnt tgammaf_underflow -};; -{ .mfi - nop.m 0 -(p14) fma.s1 FR_rs2 = FR_rs,FR_rs,f0 - nop.i 0 -} -{ .mfb - nop.m 0 -(p14) fma.s1 FR_S01 = FR_rs,FR_rs,FR_S01 - // jump if argument is 0x80200000 -(p7) br.cond.spnt tgammaf_overflow_near0_bound -};; -{ .mfi - nop.m 0 -(p6) fnma.s1 FR_Rq1 = FR_Rq1,FR_Rq0,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p10) fma.s1 FR_Rq2 = FR_Rq2,FR_Rq3,f0 - and GR_Sig = 0x7,GR_Sig -};; -{ .mfi - nop.m 0 - fma.s1 FR_C01 = FR_C01,FR_r,FR_C00 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_C11 = FR_C11,FR_r,FR_C10 - cmp.eq p6,p7 = r0,GR_Sig // p6 if |x| from one of base intervals -};; -{ .mfi - nop.m 0 - fma.s1 FR_C21 = FR_C21,FR_r,FR_C20 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_C31 = FR_C31,FR_r,FR_C30 -(p7) cmp.lt.unc p9,p0 = 2,GR_RqDeg -};; -{ .mfi - nop.m 0 -(p14) fma.s1 FR_S11 = FR_rs,FR_rs,FR_S11 - nop.i 0 -} -{ .mfi - nop.m 0 -(p14) fma.s1 FR_S21 = FR_rs,FR_rs,FR_S21 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C41 = FR_C41,FR_r,FR_C40 - nop.i 0 -} -{ .mfi - nop.m 0 -(p14) fma.s1 FR_S32 = FR_rs2,FR_S32,FR_S31 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p9) fma.s1 FR_Rq1 = FR_Rq1,FR_Rq2,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_C51 = FR_C51,FR_r,FR_C50 - nop.i 0 -};; -{ .mfi -(p14) getf.exp GR_SignExp = FR_rs - fma.s1 FR_C01 = FR_C01,FR_C11,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p14) fma.s1 FR_S01 = FR_S01,FR_rs2,FR_S00 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C21 = FR_C21,FR_C31,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - // NR-iteration -(p14) fnma.s1 FR_InvNormX1 = FR_Rcp0,FR_NormX,f1 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p14) fma.s1 FR_S11 = FR_S11,FR_rs2,FR_S10 -(p14) tbit.z.unc p11,p12 = GR_SignExp,17 -} -{ .mfi - nop.m 0 -(p14) fma.s1 FR_S21 = FR_S21,FR_rs2,FR_S20 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p15) fcmp.lt.unc.s1 p0,p13 = FR_NormX,FR_OvfBound - nop.i 0 -} -{ .mfi - nop.m 0 -(p14) fma.s1 FR_S32 = FR_rs2,FR_S32,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_C41 = FR_C41,FR_C51,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p7) fma.s1 FR_An = FR_Rq1,FR_An,f0 - nop.i 0 -};; -{ .mfb - nop.m 0 - nop.f 0 - // jump if x > 35.04010009765625 -(p13) br.cond.spnt tgammaf_overflow -};; -{ .mfi - nop.m 0 - // NR-iteration -(p14) fma.s1 FR_InvNormX1 = FR_Rcp0,FR_InvNormX1,FR_Rcp0 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p14) fma.s1 FR_S01 = FR_S01,FR_S11,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p14) fma.s1 FR_S21 = FR_S21,FR_S32,f0 - nop.i 0 -};; -{ .mfi -(p14) getf.exp GR_SignExp = FR_NormX - fma.s1 FR_C01 = FR_C01,FR_C21,f0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_C41 = FR_C41,FR_An,f0 -(p14) mov GR_ExpOf1 = 0x2FFFF -};; -{ .mfi - nop.m 0 - // NR-iteration -(p14) fnma.s1 FR_InvNormX2 = FR_InvNormX1,FR_NormX,f1 - nop.i 0 -};; -.pred.rel "mutex",p11,p12 -{ .mfi - nop.m 0 -(p12) fnma.s1 FR_S01 = FR_S01,FR_S21,f0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fma.s1 FR_S01 = FR_S01,FR_S21,f0 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p14) fma.s1 FR_GAMMA = FR_C01,FR_C41,f0 -(p14) tbit.z.unc p6,p7 = GR_Sig,0 -} -{ .mfb - nop.m 0 -(p15) fma.s.s0 f8 = FR_C01,FR_C41,f0 -(p15) br.ret.spnt b0 // exit for positives -};; -.pred.rel "mutex",p11,p12 -{ .mfi - nop.m 0 -(p12) fms.s1 FR_S01 = FR_rs,FR_S01,FR_rs - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fma.s1 FR_S01 = FR_rs,FR_S01,FR_rs - nop.i 0 -};; -{ .mfi - nop.m 0 - // NR-iteration - fma.s1 FR_InvNormX2 = FR_InvNormX1,FR_InvNormX2,FR_InvNormX1 - cmp.eq p10,p0 = 0x23,GR_Offs -};; -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fma.s1 FR_GAMMA = FR_S01,FR_GAMMA,f0 - cmp.gtu p8,p0 = GR_SignExp,GR_ExpOf1 -} -{ .mfi - nop.m 0 -(p7) fnma.s1 FR_GAMMA = FR_S01,FR_GAMMA,f0 - cmp.eq p9,p0 = GR_SignExp,GR_ExpOf1 -};; -{ .mfi - nop.m 0 - // NR-iteration - fnma.s1 FR_InvNormX1 = FR_InvNormX2,FR_NormX,f1 - nop.i 0 -} -{ .mfi - nop.m 0 -(p10) fma.s1 FR_InvNormX2 = FR_InvNormX2,FR_InvAn,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - frcpa.s1 FR_Rcp0,p0 = f1,FR_GAMMA - nop.i 0 -};; -{ .mfi - nop.m 0 - fms.s1 FR_Multplr = FR_NormX,f1,f1 // x - 1 - nop.i 0 -};; -{ .mfi - nop.m 0 - // NR-iteration - fnma.s1 FR_Rcp1 = FR_Rcp0,FR_GAMMA,f1 - nop.i 0 -};; -.pred.rel "mutex",p8,p9 -{ .mfi - nop.m 0 - // 1/x or 1/(An*x) -(p8) fma.s1 FR_Multplr = FR_InvNormX2,FR_InvNormX1,FR_InvNormX2 - nop.i 0 -} -{ .mfi - nop.m 0 -(p9) fma.s1 FR_Multplr = f1,f1,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - // NR-iteration - fma.s1 FR_Rcp1 = FR_Rcp0,FR_Rcp1,FR_Rcp0 - nop.i 0 -};; -{ .mfi - nop.m 0 - // NR-iteration - fnma.s1 FR_Rcp2 = FR_Rcp1,FR_GAMMA,f1 - nop.i 0 -} -{ .mfi - nop.m 0 - // NR-iteration - fma.s1 FR_Rcp1 = FR_Rcp1,FR_Multplr,f0 - nop.i 0 -};; -{ .mfb - nop.m 0 - fma.s.s0 f8 = FR_Rcp1,FR_Rcp2,FR_Rcp1 - br.ret.sptk b0 -};; - -// here if 0 < x < 1 -//-------------------------------------------------------------------- -.align 32 -tgammaf_from_0_to_1: -{ .mfi - cmp.lt p7,p0 = GR_Arg,GR_ExpOf05 - // NR-iteration - fnma.s1 FR_Rcp1 = FR_Rcp0,FR_NormX,f1 - cmp.eq p8,p0 = GR_Arg,GR_ExpOf05 -} -{ .mfi - cmp.gt p9,p0 = GR_Arg,GR_ExpOf05 - fma.s1 FR_r = f0,f0,FR_NormX // reduced arg for (0;1) - mov GR_ExpOf025 = 0x7FA -};; -{ .mfi - getf.s GR_ArgNz = f8 - fma.d.s0 FR_X = f0,f0,f8 // set deno flag - shl GR_OvfNzBound = GR_OvfNzBound,20 -} -{ .mfi -(p8) mov GR_Tbl12Offs = 0x80 // 0.5 <= x < 0.75 - nop.f 0 -(p7) cmp.ge.unc p6,p0 = GR_Arg,GR_ExpOf025 -};; -.pred.rel "mutex",p6,p9 -{ .mfi -(p9) mov GR_Tbl12Offs = 0xC0 // 0.75 <= x < 1 - nop.f 0 -(p6) mov GR_Tbl12Offs = 0x40 // 0.25 <= x < 0.5 -} -{ .mfi - add GR_ad_Ce = 0x2C0,GR_ad_Data - nop.f 0 - add GR_ad_Co = 0x2A0,GR_ad_Data -};; -{ .mfi - add GR_ad_Co = GR_ad_Co,GR_Tbl12Offs - nop.f 0 - cmp.lt p12,p0 = GR_ArgNz,GR_OvfNzBound -} -{ .mib - add GR_ad_Ce = GR_ad_Ce,GR_Tbl12Offs - cmp.eq p7,p0 = GR_ArgNz,GR_OvfNzBound - // jump if argument is 0x00200000 -(p7) br.cond.spnt tgammaf_overflow_near0_bound -};; -{ .mmb - ldfpd FR_A7,FR_A6 = [GR_ad_Co],16 - ldfpd FR_A5,FR_A4 = [GR_ad_Ce],16 - // jump if argument is close to 0 positive -(p12) br.cond.spnt tgammaf_overflow -};; -{ .mfi - ldfpd FR_A3,FR_A2 = [GR_ad_Co],16 - // NR-iteration - fma.s1 FR_Rcp1 = FR_Rcp0,FR_Rcp1,FR_Rcp0 - nop.i 0 -} -{ .mfb - ldfpd FR_A1,FR_A0 = [GR_ad_Ce],16 - nop.f 0 - br.cond.sptk tgamma_from_0_to_2 -};; - -// here if 1 < x < 2 -//-------------------------------------------------------------------- -.align 32 -tgammaf_from_1_to_2: -{ .mfi - add GR_ad_Co = 0x2A0,GR_ad_Data - fms.s1 FR_r = f0,f0,FR_1mX - shr GR_TblOffs = GR_Arg,47 -} -{ .mfi - add GR_ad_Ce = 0x2C0,GR_ad_Data - nop.f 0 - mov GR_TblOffsMask = 0x18 -};; -{ .mfi - nop.m 0 - nop.f 0 - and GR_TblOffs = GR_TblOffs,GR_TblOffsMask -};; -{ .mfi - shladd GR_ad_Co = GR_TblOffs,3,GR_ad_Co - nop.f 0 - nop.i 0 -} -{ .mfi - shladd GR_ad_Ce = GR_TblOffs,3,GR_ad_Ce - nop.f 0 - cmp.eq p6,p7 = 8,GR_TblOffs -};; -{ .mmi - ldfpd FR_A7,FR_A6 = [GR_ad_Co],16 - ldfpd FR_A5,FR_A4 = [GR_ad_Ce],16 - nop.i 0 -};; -{ .mmi - ldfpd FR_A3,FR_A2 = [GR_ad_Co],16 - ldfpd FR_A1,FR_A0 = [GR_ad_Ce],16 - nop.i 0 -};; - -.align 32 -tgamma_from_0_to_2: -{ .mfi - nop.m 0 -(p6) fms.s1 FR_r = FR_r,f1,FR_LocalMin - nop.i 0 -};; -{ .mfi - nop.m 0 - // NR-iteration -(p10) fnma.s1 FR_Rcp2 = FR_Rcp1,FR_NormX,f1 - nop.i 0 -};; -{ .mfi - nop.m 0 - fms.s1 FR_r2 = FR_r,FR_r,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A7 = FR_A7,FR_r,FR_A6 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A5 = FR_A5,FR_r,FR_A4 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A3 = FR_A3,FR_r,FR_A2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_A1 = FR_A1,FR_r,FR_A0 - nop.i 0 -};; -{ .mfi - nop.m 0 - // NR-iteration -(p10) fma.s1 FR_Rcp2 = FR_Rcp1,FR_Rcp2,FR_Rcp1 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A7 = FR_A7,FR_r2,FR_A5 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r4 = FR_r2,FR_r2,f0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fma.s1 FR_A3 = FR_A3,FR_r2,FR_A1 - nop.i 0 -};; -{ .mfi - nop.m 0 -(p10) fma.s1 FR_GAMMA = FR_A7,FR_r4,FR_A3 - nop.i 0 -} -{ .mfi - nop.m 0 -(p11) fma.s.s0 f8 = FR_A7,FR_r4,FR_A3 - nop.i 0 -};; -{ .mfb - nop.m 0 -(p10) fma.s.s0 f8 = FR_GAMMA,FR_Rcp2,f0 - br.ret.sptk b0 -};; - - -// overflow -//-------------------------------------------------------------------- -.align 32 -tgammaf_overflow_near0_bound: -.pred.rel "mutex",p14,p15 -{ .mfi - mov GR_fpsr = ar.fpsr - nop.f 0 -(p15) mov r8 = 0x7f8 -} -{ .mfi - nop.m 0 - nop.f 0 -(p14) mov r8 = 0xff8 -};; -{ .mfi - nop.m 0 - nop.f 0 - shl r8 = r8,20 -};; -{ .mfi - sub r8 = r8,r0,1 - nop.f 0 - extr.u GR_fpsr = GR_fpsr,10,2 // rounding mode -};; -.pred.rel "mutex",p14,p15 -{ .mfi - // set p8 to 0 in case of overflow and to 1 otherwise - // for negative arg: - // no overflow if rounding mode either Z or +Inf, i.e. - // GR_fpsr > 1 -(p14) cmp.lt p8,p0 = 1,GR_fpsr - nop.f 0 - // for positive arg: - // no overflow if rounding mode either Z or -Inf, i.e. - // (GR_fpsr & 1) == 0 -(p15) tbit.z p0,p8 = GR_fpsr,0 -};; -{ .mib -(p8) setf.s f8 = r8 // set result to 0x7f7fffff without - // OVERFLOW flag raising - nop.i 0 -(p8) br.ret.sptk b0 -};; - -.align 32 -tgammaf_overflow: -{ .mfi - nop.m 0 - nop.f 0 - mov r8 = 0x1FFFE -};; -{ .mfi - setf.exp f9 = r8 - fmerge.s FR_X = f8,f8 - nop.i 0 -};; -.pred.rel "mutex",p14,p15 -{ .mfi - nop.m 0 -(p14) fnma.s.s0 f8 = f9,f9,f0 // set I,O and -INF result - mov GR_TAG = 261 // overflow -} -{ .mfb - nop.m 0 -(p15) fma.s.s0 f8 = f9,f9,f0 // set I,O and +INF result - br.cond.sptk tgammaf_libm_err -};; - -// x is negative integer or +/-0 -//-------------------------------------------------------------------- -.align 32 -tgammaf_singularity: -{ .mfi - nop.m 0 - fmerge.s FR_X = f8,f8 - mov GR_TAG = 262 // negative -} -{ .mfb - nop.m 0 - frcpa.s0 f8,p0 = f0,f0 - br.cond.sptk tgammaf_libm_err -};; -// x is negative noninteger with big absolute value -//-------------------------------------------------------------------- -.align 32 -tgammaf_underflow: -{ .mfi - mov r8 = 0x00001 - nop.f 0 - tbit.z p6,p7 = GR_Sig,0 -};; -{ .mfi - setf.exp f9 = r8 - nop.f 0 - nop.i 0 -};; -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fms.s.s0 f8 = f9,f9,f9 - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fma.s.s0 f8 = f9,f9,f9 - br.ret.sptk b0 -};; - -// x for natval, nan, +/-inf or +/-0 -//-------------------------------------------------------------------- -.align 32 -tgammaf_spec_args: -{ .mfi - nop.m 0 - fclass.m p6,p0 = f8,0x1E1 // Test x for natval, nan, +inf - nop.i 0 -};; -{ .mfi - nop.m 0 - fclass.m p7,p8 = f8,0x7 // +/-0 - nop.i 0 -};; -{ .mfi - nop.m 0 - fmerge.s FR_X = f8,f8 - nop.i 0 -} -{ .mfb - nop.m 0 -(p6) fma.s.s0 f8 = f8,f1,f8 -(p6) br.ret.spnt b0 -};; -.pred.rel "mutex",p7,p8 -{ .mfi -(p7) mov GR_TAG = 262 // negative -(p7) frcpa.s0 f8,p0 = f1,f8 - nop.i 0 -} -{ .mib - nop.m 0 - nop.i 0 -(p8) br.cond.spnt tgammaf_singularity -};; - -.align 32 -tgammaf_libm_err: -{ .mfi - alloc r32 = ar.pfs,1,4,4,0 - nop.f 0 - mov GR_Parameter_TAG = GR_TAG -};; - -GLOBAL_LIBM_END(tgammaf) - -LOCAL_LIBM_ENTRY(__libm_error_region) -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfs [GR_Parameter_Y] = FR_Y,16 // STORE Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfs [GR_Parameter_X] = FR_X // STORE Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address - nop.b 0 -} -{ .mib - stfs [GR_Parameter_Y] = FR_RESULT // STORE Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 0 - nop.m 0 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfs f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region) -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/fpu/w_tgammal_compat.S b/sysdeps/ia64/fpu/w_tgammal_compat.S deleted file mode 100644 index b10c5dc276..0000000000 --- a/sysdeps/ia64/fpu/w_tgammal_compat.S +++ /dev/null @@ -1,4487 +0,0 @@ -.file "tgammal.s" - - -// Copyright (c) 2002 - 2005, Intel Corporation -// All rights reserved. -// -// Contributed 2002 by the Intel Numerics Group, Intel Corporation -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. - -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Intel Corporation is the author of this code, and requests that all -// problem reports or change requests be submitted to it directly at -// http://www.intel.com/software/products/opensource/libraries/num.htm. -// -// History -//============================================================== -// 01/16/02 Initial version -// 05/20/02 Cleaned up namespace and sf0 syntax -// 02/10/03 Reordered header: .section, .global, .proc, .align; -// used data8 for long double table values -// 03/17/03 Moved tgammal_libm_err label into .proc region -// 04/10/03 Changed error codes for overflow and negative integers -// 03/31/05 Reformatted delimiters between data tables -// -// API -//============================================================== -// long double tgammal(long double) -// -// Resources Used: -// -// Floating-Point Registers: f8-f15 -// f32-f127 -// -// General Purpose Registers: r32-r67 -// -// Predicate Registers: p6-p15 -// -//********************************************************************* -// -// IEEE Special Conditions: -// -// tgammal(+inf) = +inf -// tgammal(-inf) = QNaN -// tgammal(+/-0) = +/-inf -// tgammal(x<0, x - integer) = QNaN -// tgammal(SNaN) = QNaN -// tgammal(QNaN) = QNaN -// -//********************************************************************* -// Overview of operation -//============================================================== -// -// Algorithm description -// --------------------- -// -// There are 3 main paths in the implementation -// (and additional special values branches) -// -// 1) |X| >= 13 - Stirling formula computation -// a) Positive arguments: -// TGAMMAL(X) = exp((X-0.5)*ln(X) - X + C + S(Z)), -// where C = 0.5*ln(2*Pi) , Z = 1/Z, S(Z) - Bernulli polynomial -// (up to 'B18' term). -// Some of these calculation done in multiprecision. -// Ln returns multiprecision result too -// and exp also accepts and returns pair of values. -// -// b) Negative arguments -// TGAMMAL(-X) = PI/(X*TGAMMAL(X)*sin(PI*X)). -// (X*sin(PI*X))/PI calculated in parallel with TGAMMAL. -// Here we use polynomial of 9th degree with 2 multiprecision steps. -// Argument range reduction is: -// N = [x] with round to nearest, r = x - N, -0.5 <= r < 0.5 -// After ((X-0.5)*ln(X) - X + C + S(Z)) completed we just invert -// its result and compute exp with negative argument (1/exp(x)=exp(-x)) -// Then we multiply exp result to PI/(X*sin(PI*X)). -// -// 2) 1 <= |X| < 13 - Polynomial part -// a) Positive arguments: -// All values are splitted to such intervals as: -// #0->[2;3], #1->[3,4], #2->[5,6]... -// For even intervals we just use polynomial computation with degree 20 -// and first 6 multiprecision computations. -// Range reduction looks like -// N = [x] with truncate, r = x - N - 0.5, -0.5 <= r < 0.5 -// For odd intervals we use reccurent formula: -// TGAMMAL(X) = TGAMMA(X-1)*(X-1) -// [1;2] interval is splitted to 3 subranges: -// [1;1.25], [1.25;1.75], [1.75;2] with the same polynomial forms -// -// b) Negative arguments -// TGAMMAL(-X) = PI/(X*TGAMMAL(X)*sin(PI*X)). -// (X*sin(PI*X))/PI calculated in parallel with TGAMMAL. -// After multiplication by TGAMMAL(X) result we calculate reciprocal -// and get final result. -// -// 3) 0 < |X| < 1 - Near 0 part -// a) Here we use reccurent formula TGAMMAL(X) = TGAMMAL(X+1)/X -// TGAMMAL(X+1) calculated as shown above, -// 1/X result obtained in parallel. Then we just multiply these values. -// There is only additional separated subrange: [0;0.125] with specific -// polynomial constants set. -// -// b) Negative arguments -// TGAMMAL(-X) = PI/(TGAMMAL(X+1)*sin(PI*X)). -// There is no need to compute 1/X. - - - -RODATA - -.align 16 -LOCAL_OBJECT_START(Constants_Tgammal_log_80_Q) -// log2_hi, log2_lo, Q_6, Q_5, Q_4, Q_3, Q_2, Q_1 -data4 0x00000000,0xB1721800,0x00003FFE,0x00000000 -data4 0x4361C4C6,0x82E30865,0x0000BFE2,0x00000000 -data4 0xA51BE0AF,0x92492453,0x00003FFC,0x00000000 -data4 0xA0CFD29F,0xAAAAAB73,0x0000BFFC,0x00000000 -data4 0xCCCE3872,0xCCCCCCCC,0x00003FFC,0x00000000 -data4 0xFFFFB4FB,0xFFFFFFFF,0x0000BFFC,0x00000000 -data4 0xAAAAAAAB,0xAAAAAAAA,0x00003FFD,0x00000000 -data4 0x00000000,0x80000000,0x0000BFFE,0x00000000 -LOCAL_OBJECT_END(Constants_Tgammal_log_80_Q) - -.align 64 -LOCAL_OBJECT_START(Constants_Tgammal_log_80_Z_G_H_h1) -// Z1 - 16 bit fixed, G1 and H1 IEEE single, h1 IEEE double -data4 0x00008000,0x3F800000,0x00000000,0x00000000 -data4 0x00000000,0x00000000,0x00000000,0x00000000 -data4 0x00007879,0x3F70F0F0,0x3D785196,0x00000000 -data4 0xEBA0E0D1,0x8B1D330B,0x00003FDA,0x00000000 -data4 0x000071C8,0x3F638E38,0x3DF13843,0x00000000 -data4 0x9EADD553,0xE2AF365E,0x00003FE2,0x00000000 -data4 0x00006BCB,0x3F579430,0x3E2FF9A0,0x00000000 -data4 0x752F34A2,0xF585FEC3,0x0000BFE3,0x00000000 -data4 0x00006667,0x3F4CCCC8,0x3E647FD6,0x00000000 -data4 0x893B03F3,0xF3546435,0x00003FE2,0x00000000 -data4 0x00006187,0x3F430C30,0x3E8B3AE7,0x00000000 -data4 0x39CDD2AC,0xBABA62E0,0x00003FE4,0x00000000 -data4 0x00005D18,0x3F3A2E88,0x3EA30C68,0x00000000 -data4 0x457978A1,0x8718789F,0x00003FE2,0x00000000 -data4 0x0000590C,0x3F321640,0x3EB9CEC8,0x00000000 -data4 0x3185E56A,0x9442DF96,0x0000BFE4,0x00000000 -data4 0x00005556,0x3F2AAAA8,0x3ECF9927,0x00000000 -data4 0x2BBE2CBD,0xCBF9A4BF,0x00003FE4,0x00000000 -data4 0x000051EC,0x3F23D708,0x3EE47FC5,0x00000000 -data4 0x852D5935,0xF3537535,0x00003FE3,0x00000000 -data4 0x00004EC5,0x3F1D89D8,0x3EF8947D,0x00000000 -data4 0x46CDF32F,0xA1F1E699,0x0000BFDF,0x00000000 -data4 0x00004BDB,0x3F17B420,0x3F05F3A1,0x00000000 -data4 0xD8484CE3,0x84A61856,0x00003FE4,0x00000000 -data4 0x00004925,0x3F124920,0x3F0F4303,0x00000000 -data4 0xFF28821B,0xC7DD97E0,0x0000BFE2,0x00000000 -data4 0x0000469F,0x3F0D3DC8,0x3F183EBF,0x00000000 -data4 0xEF1FD32F,0xD3C4A887,0x00003FE3,0x00000000 -data4 0x00004445,0x3F088888,0x3F20EC80,0x00000000 -data4 0x464C76DA,0x84672BE6,0x00003FE5,0x00000000 -data4 0x00004211,0x3F042108,0x3F29516A,0x00000000 -data4 0x18835FB9,0x9A43A511,0x0000BFE5,0x00000000 -LOCAL_OBJECT_END(Constants_Tgammal_log_80_Z_G_H_h1) - -.align 64 -LOCAL_OBJECT_START(Constants_Tgammal_log_80_Z_G_H_h2) -// Z2 - 16 bit fixed, G2 and H2 IEEE single, h2 IEEE double -data4 0x00008000,0x3F800000,0x00000000,0x00000000 -data4 0x00000000,0x00000000,0x00000000,0x00000000 -data4 0x00007F81,0x3F7F00F8,0x3B7F875D,0x00000000 -data4 0x211398BF,0xAD08B116,0x00003FDB,0x00000000 -data4 0x00007F02,0x3F7E03F8,0x3BFF015B,0x00000000 -data4 0xC376958E,0xB106790F,0x00003FDE,0x00000000 -data4 0x00007E85,0x3F7D08E0,0x3C3EE393,0x00000000 -data4 0x79A7679A,0xFD03F242,0x0000BFDA,0x00000000 -data4 0x00007E08,0x3F7C0FC0,0x3C7E0586,0x00000000 -data4 0x05E7AE08,0xF03F81C3,0x0000BFDF,0x00000000 -data4 0x00007D8D,0x3F7B1880,0x3C9E75D2,0x00000000 -data4 0x049EB22F,0xD1B87D3C,0x00003FDE,0x00000000 -data4 0x00007D12,0x3F7A2328,0x3CBDC97A,0x00000000 -data4 0x3A9E81E0,0xFABC8B95,0x00003FDF,0x00000000 -data4 0x00007C98,0x3F792FB0,0x3CDCFE47,0x00000000 -data4 0x7C4B5443,0xF5F3653F,0x00003FDF,0x00000000 -data4 0x00007C20,0x3F783E08,0x3CFC15D0,0x00000000 -data4 0xF65A1773,0xE78AB204,0x00003FE0,0x00000000 -data4 0x00007BA8,0x3F774E38,0x3D0D874D,0x00000000 -data4 0x7B8EF695,0xDB7CBFFF,0x0000BFE0,0x00000000 -data4 0x00007B31,0x3F766038,0x3D1CF49B,0x00000000 -data4 0xCF773FB3,0xC0241AEA,0x0000BFE0,0x00000000 -data4 0x00007ABB,0x3F757400,0x3D2C531D,0x00000000 -data4 0xC9539FDF,0xFC8F4D48,0x00003FE1,0x00000000 -data4 0x00007A45,0x3F748988,0x3D3BA322,0x00000000 -data4 0x954665C2,0x9CD035FB,0x0000BFE1,0x00000000 -data4 0x000079D1,0x3F73A0D0,0x3D4AE46F,0x00000000 -data4 0xDD367A30,0xEC9017C7,0x00003FE1,0x00000000 -data4 0x0000795D,0x3F72B9D0,0x3D5A1756,0x00000000 -data4 0xCB11189C,0xEE6625D3,0x0000BFE1,0x00000000 -data4 0x000078EB,0x3F71D488,0x3D693B9D,0x00000000 -data4 0xBE11C424,0xA49C8DB5,0x0000BFE0,0x00000000 -LOCAL_OBJECT_END(Constants_Tgammal_log_80_Z_G_H_h2) - -.align 64 -LOCAL_OBJECT_START(Constants_Tgammal_log_80_h3_G_H) -// h3 IEEE double extended, H3 and G3 IEEE single -data4 0x112666B0,0xAAACAAB1,0x00003FD3,0x3F7FFC00 -data4 0x9B7FAD21,0x90051030,0x00003FD8,0x3F7FF400 -data4 0xF4D783C4,0xA6B46F46,0x00003FDA,0x3F7FEC00 -data4 0x11C6DDCA,0xDA148D88,0x0000BFD8,0x3F7FE400 -data4 0xCA964D95,0xCE65C1D8,0x0000BFD8,0x3F7FDC00 -data4 0x23412D13,0x883838EE,0x0000BFDB,0x3F7FD400 -data4 0x983ED687,0xB7E5CFA1,0x00003FDB,0x3F7FCC08 -data4 0xE3C3930B,0xDBE23B16,0x0000BFD9,0x3F7FC408 -data4 0x48AA4DFC,0x9B92F1FC,0x0000BFDC,0x3F7FBC10 -data4 0xCE9C8F7E,0x9A8CEB15,0x0000BFD9,0x3F7FB410 -data4 0x0DECE74A,0x8C220879,0x00003FDC,0x3F7FAC18 -data4 0x2F053150,0xB25CA912,0x0000BFDA,0x3F7FA420 -data4 0xD9A5BE20,0xA5876555,0x00003FDB,0x3F7F9C20 -data4 0x2053F087,0xC919BB6E,0x00003FD9,0x3F7F9428 -data4 0x041E9A77,0xB70BDA79,0x00003FDC,0x3F7F8C30 -data4 0xEA1C9C30,0xF18A5C08,0x00003FDA,0x3F7F8438 -data4 0x796D89E5,0xA3790D84,0x0000BFDD,0x3F7F7C40 -data4 0xA2915A3A,0xE1852369,0x0000BFDD,0x3F7F7448 -data4 0xA39ED868,0xD803858F,0x00003FDC,0x3F7F6C50 -data4 0x9417EBB7,0xB2EEE356,0x0000BFDD,0x3F7F6458 -data4 0x9BB0D07F,0xED5C1F8A,0x0000BFDC,0x3F7F5C68 -data4 0xE87C740A,0xD6D201A0,0x0000BFDD,0x3F7F5470 -data4 0x1CA74025,0xE8DEBF5E,0x00003FDC,0x3F7F4C78 -data4 0x1F34A7EB,0x9A995A97,0x0000BFDC,0x3F7F4488 -data4 0x359EED97,0x9CB0F742,0x0000BFDA,0x3F7F3C90 -data4 0xBBC6A1C8,0xD6F833C2,0x0000BFDD,0x3F7F34A0 -data4 0xE71090EC,0xE1F68F2A,0x00003FDC,0x3F7F2CA8 -data4 0xC160A74F,0xD1881CF1,0x0000BFDB,0x3F7F24B8 -data4 0xD78CB5A4,0x9AD05AE2,0x00003FD6,0x3F7F1CC8 -data4 0x9A77DC4B,0xE658CB8E,0x0000BFDD,0x3F7F14D8 -data4 0x6BD6D312,0xBA281296,0x00003FDC,0x3F7F0CE0 -data4 0xF95210D0,0xB478BBEB,0x0000BFDB,0x3F7F04F0 -data4 0x38800100,0x39400480,0x39A00640,0x39E00C41 // H's start here -data4 0x3A100A21,0x3A300F22,0x3A4FF51C,0x3A6FFC1D -data4 0x3A87F20B,0x3A97F68B,0x3AA7EB86,0x3AB7E101 -data4 0x3AC7E701,0x3AD7DD7B,0x3AE7D474,0x3AF7CBED -data4 0x3B03E1F3,0x3B0BDE2F,0x3B13DAAA,0x3B1BD766 -data4 0x3B23CC5C,0x3B2BC997,0x3B33C711,0x3B3BBCC6 -data4 0x3B43BAC0,0x3B4BB0F4,0x3B53AF6D,0x3B5BA620 -data4 0x3B639D12,0x3B6B9444,0x3B7393BC,0x3B7B8B6D -LOCAL_OBJECT_END(Constants_Tgammal_log_80_h3_G_H) - -.align 64 -LOCAL_OBJECT_START(Constants_Tgammal_stirling) -//0.5*ln(2*Pi)=9.1893853320467266954096885e-01 + 7.2239360881843238220057778e-17 -data8 0x3FED67F1C864BEB4, 0x3C94D252F2400510 -// Bernulli numbers -data8 0xAAAAAAAAAAAAAAAB, 0x00003FFB //B2 = 8.3333333333333333333333333333e-02 -data8 0xBF66C16C16C16C17 //B4 = -2.7777777777777777777777777778e-03 -data8 0x3F4A01A01A01A01A //B6 = 7.9365079365079365079365079365e-04 -data8 0xBF43813813813814 //B8 = -5.9523809523809523809523809524e-04 -data8 0x3F4B951E2B18FF23 //B10 = 8.4175084175084175084175084175e-04 -data8 0xBF5F6AB0D9993C7D //B12 = -1.9175269175269175269175269175e-03 -data8 0x3F7A41A41A41A41A //B14 = 6.4102564102564102564102564103e-03 -data8 0xBF9E4286CB0F5398 //B16 = -2.9550653594771241830065359477e-02 -data8 0x3FC6FE96381E0680 //B18 = 1.7964437236883057316493849002e-01 -data8 0x3FE0000000000000 // 0.5 -LOCAL_OBJECT_END(Constants_Tgammal_stirling) - -.align 64 -LOCAL_OBJECT_START(Constants_Tgammal_sin) -// Polynomial coefficients for the sin(Pi*x)/Pi, 0 <= |x| < 0.5 -//A2 = 8.1174242528335360802316245099e-01 + 5.1302254650266899774269946201e-18 -data8 0x3FE9F9CB402BC46C, 0x3C57A8B3819B7CEC -//A1 = -1.6449340668482264060656916627e+00 + -3.0210280454695477893051351574e-17 -data8 0xBFFA51A6625307D3, 0xBC816A402079D0EF -data8 0xF3AEF1FFCCE6C813, 0x0000BFE3 //A9 = -7.0921197799923779127089910470e-09 -data8 0x87D54408E6D4BB9D, 0x00003FE9 //A8 = 2.5300880778252693946712766029e-07 -data8 0xEA12033DCE7B8ED9, 0x0000BFED //A7 = -6.9758403885461690048189307819e-06 -data8 0x9BA38C952A59D1A8, 0x00003FF2 //A6 = 1.4842878710882320255092707181e-04 -data8 0x99C0B55178FF0E38, 0x0000BFF6 //A5 = -2.3460810348048124421268761990e-03 -data8 0xD63402E798FEC896, 0x00003FF9 //A4 = 2.6147847817611456327417812320e-02 -data8 0xC354723906D95E92, 0x0000BFFC //A3 = -1.9075182412208257558294507774e-01 -LOCAL_OBJECT_END(Constants_Tgammal_sin) - -.align 64 -LOCAL_OBJECT_START(Constants_Tgammal_exp_64_Arg) -data4 0x00000000,0xB17217F4,0x00003FF2,0x00000000 // L_hi = hi part log(2)/2^12 -data4 0xF278ECE6,0xF473DE6A,0x00003FD4,0x00000000 // L_lo = lo part log(2)/2^12 -LOCAL_OBJECT_END(Constants_Tgammal_exp_64_Arg) - -LOCAL_OBJECT_START(Constants_Tgammal_exp_64_A) -data4 0xB1B736A0,0xAAAAAAAB,0x00003FFA,0x00000000 // A3 -data4 0x90CD6327,0xAAAAAAAB,0x00003FFC,0x00000000 // A2 -data4 0xFFFFFFFF,0xFFFFFFFF,0x00003FFD,0x00000000 // A1 -LOCAL_OBJECT_END(Constants_Tgammal_exp_64_A) - -LOCAL_OBJECT_START(Constants_Tgammal_exp_64_T1) -data4 0x3F800000,0x3F8164D2,0x3F82CD87,0x3F843A29 -data4 0x3F85AAC3,0x3F871F62,0x3F88980F,0x3F8A14D5 -data4 0x3F8B95C2,0x3F8D1ADF,0x3F8EA43A,0x3F9031DC -data4 0x3F91C3D3,0x3F935A2B,0x3F94F4F0,0x3F96942D -data4 0x3F9837F0,0x3F99E046,0x3F9B8D3A,0x3F9D3EDA -data4 0x3F9EF532,0x3FA0B051,0x3FA27043,0x3FA43516 -data4 0x3FA5FED7,0x3FA7CD94,0x3FA9A15B,0x3FAB7A3A -data4 0x3FAD583F,0x3FAF3B79,0x3FB123F6,0x3FB311C4 -data4 0x3FB504F3,0x3FB6FD92,0x3FB8FBAF,0x3FBAFF5B -data4 0x3FBD08A4,0x3FBF179A,0x3FC12C4D,0x3FC346CD -data4 0x3FC5672A,0x3FC78D75,0x3FC9B9BE,0x3FCBEC15 -data4 0x3FCE248C,0x3FD06334,0x3FD2A81E,0x3FD4F35B -data4 0x3FD744FD,0x3FD99D16,0x3FDBFBB8,0x3FDE60F5 -data4 0x3FE0CCDF,0x3FE33F89,0x3FE5B907,0x3FE8396A -data4 0x3FEAC0C7,0x3FED4F30,0x3FEFE4BA,0x3FF28177 -data4 0x3FF5257D,0x3FF7D0DF,0x3FFA83B3,0x3FFD3E0C -LOCAL_OBJECT_END(Constants_Tgammal_exp_64_T1) - -LOCAL_OBJECT_START(Constants_Tgammal_exp_64_T2) -data4 0x3F800000,0x3F80058C,0x3F800B18,0x3F8010A4 -data4 0x3F801630,0x3F801BBD,0x3F80214A,0x3F8026D7 -data4 0x3F802C64,0x3F8031F2,0x3F803780,0x3F803D0E -data4 0x3F80429C,0x3F80482B,0x3F804DB9,0x3F805349 -data4 0x3F8058D8,0x3F805E67,0x3F8063F7,0x3F806987 -data4 0x3F806F17,0x3F8074A8,0x3F807A39,0x3F807FCA -data4 0x3F80855B,0x3F808AEC,0x3F80907E,0x3F809610 -data4 0x3F809BA2,0x3F80A135,0x3F80A6C7,0x3F80AC5A -data4 0x3F80B1ED,0x3F80B781,0x3F80BD14,0x3F80C2A8 -data4 0x3F80C83C,0x3F80CDD1,0x3F80D365,0x3F80D8FA -data4 0x3F80DE8F,0x3F80E425,0x3F80E9BA,0x3F80EF50 -data4 0x3F80F4E6,0x3F80FA7C,0x3F810013,0x3F8105AA -data4 0x3F810B41,0x3F8110D8,0x3F81166F,0x3F811C07 -data4 0x3F81219F,0x3F812737,0x3F812CD0,0x3F813269 -data4 0x3F813802,0x3F813D9B,0x3F814334,0x3F8148CE -data4 0x3F814E68,0x3F815402,0x3F81599C,0x3F815F37 -LOCAL_OBJECT_END(Constants_Tgammal_exp_64_T2) - -LOCAL_OBJECT_START(Constants_Tgammal_exp_64_W1) -data8 0x0000000000000000, 0xBE384454171EC4B4 -data8 0xBE6947414AA72766, 0xBE5D32B6D42518F8 -data8 0x3E68D96D3A319149, 0xBE68F4DA62415F36 -data8 0xBE6DDA2FC9C86A3B, 0x3E6B2E50F49228FE -data8 0xBE49C0C21188B886, 0x3E64BFC21A4C2F1F -data8 0xBE6A2FBB2CB98B54, 0x3E5DC5DE9A55D329 -data8 0x3E69649039A7AACE, 0x3E54728B5C66DBA5 -data8 0xBE62B0DBBA1C7D7D, 0x3E576E0409F1AF5F -data8 0x3E6125001A0DD6A1, 0xBE66A419795FBDEF -data8 0xBE5CDE8CE1BD41FC, 0xBE621376EA54964F -data8 0x3E6370BE476E76EE, 0x3E390D1A3427EB92 -data8 0x3E1336DE2BF82BF8, 0xBE5FF1CBD0F7BD9E -data8 0xBE60A3550CEB09DD, 0xBE5CA37E0980F30D -data8 0xBE5C541B4C082D25, 0xBE5BBECA3B467D29 -data8 0xBE400D8AB9D946C5, 0xBE5E2A0807ED374A -data8 0xBE66CB28365C8B0A, 0x3E3AAD5BD3403BCA -data8 0x3E526055C7EA21E0, 0xBE442C75E72880D6 -data8 0x3E58B2BB85222A43, 0xBE5AAB79522C42BF -data8 0xBE605CB4469DC2BC, 0xBE589FA7A48C40DC -data8 0xBE51C2141AA42614, 0xBE48D087C37293F4 -data8 0x3E367A1CA2D673E0, 0xBE51BEBB114F7A38 -data8 0xBE6348E5661A4B48, 0xBDF526431D3B9962 -data8 0x3E3A3B5E35A78A53, 0xBE46C46C1CECD788 -data8 0xBE60B7EC7857D689, 0xBE594D3DD14F1AD7 -data8 0xBE4F9C304C9A8F60, 0xBE52187302DFF9D2 -data8 0xBE5E4C8855E6D68F, 0xBE62140F667F3DC4 -data8 0xBE36961B3BF88747, 0x3E602861C96EC6AA -data8 0xBE3B5151D57FD718, 0x3E561CD0FC4A627B -data8 0xBE3A5217CA913FEA, 0x3E40A3CC9A5D193A -data8 0xBE5AB71310A9C312, 0x3E4FDADBC5F57719 -data8 0x3E361428DBDF59D5, 0x3E5DB5DB61B4180D -data8 0xBE42AD5F7408D856, 0x3E2A314831B2B707 -LOCAL_OBJECT_END(Constants_Tgammal_exp_64_W1) - -LOCAL_OBJECT_START(Constants_Tgammal_exp_64_W2) -data8 0x0000000000000000, 0xBE641F2537A3D7A2 -data8 0xBE68DD57AD028C40, 0xBE5C77D8F212B1B6 -data8 0x3E57878F1BA5B070, 0xBE55A36A2ECAE6FE -data8 0xBE620608569DFA3B, 0xBE53B50EA6D300A3 -data8 0x3E5B5EF2223F8F2C, 0xBE56A0D9D6DE0DF4 -data8 0xBE64EEF3EAE28F51, 0xBE5E5AE2367EA80B -data8 0x3E47CB1A5FCBC02D, 0xBE656BA09BDAFEB7 -data8 0x3E6E70C6805AFEE7, 0xBE6E0509A3415EBA -data8 0xBE56856B49BFF529, 0x3E66DD3300508651 -data8 0x3E51165FC114BC13, 0x3E53333DC453290F -data8 0x3E6A072B05539FDA, 0xBE47CD877C0A7696 -data8 0xBE668BF4EB05C6D9, 0xBE67C3E36AE86C93 -data8 0xBE533904D0B3E84B, 0x3E63E8D9556B53CE -data8 0x3E212C8963A98DC8, 0xBE33138F032A7A22 -data8 0x3E530FA9BC584008, 0xBE6ADF82CCB93C97 -data8 0x3E5F91138370EA39, 0x3E5443A4FB6A05D8 -data8 0x3E63DACD181FEE7A, 0xBE62B29DF0F67DEC -data8 0x3E65C4833DDE6307, 0x3E5BF030D40A24C1 -data8 0x3E658B8F14E437BE, 0xBE631C29ED98B6C7 -data8 0x3E6335D204CF7C71, 0x3E529EEDE954A79D -data8 0x3E5D9257F64A2FB8, 0xBE6BED1B854ED06C -data8 0x3E5096F6D71405CB, 0xBE3D4893ACB9FDF5 -data8 0xBDFEB15801B68349, 0x3E628D35C6A463B9 -data8 0xBE559725ADE45917, 0xBE68C29C042FC476 -data8 0xBE67593B01E511FA, 0xBE4A4313398801ED -data8 0x3E699571DA7C3300, 0x3E5349BE08062A9E -data8 0x3E5229C4755BB28E, 0x3E67E42677A1F80D -data8 0xBE52B33F6B69C352, 0xBE6B3550084DA57F -data8 0xBE6DB03FD1D09A20, 0xBE60CBC42161B2C1 -data8 0x3E56ED9C78A2B771, 0xBE508E319D0FA795 -data8 0xBE59482AFD1A54E9, 0xBE2A17CEB07FD23E -data8 0x3E68BF5C17365712, 0x3E3956F9B3785569 -LOCAL_OBJECT_END(Constants_Tgammal_exp_64_W2) - - - -LOCAL_OBJECT_START(Constants_Tgammal_poly) - -// Polynomial coefficients for the tgammal(x), 2 <= |x| < 3 -//A5 = 2.8360780594841213109180699803e-02 + 2.2504152891014320704380000000e-19 -data8 0x3F9D0A9BC49353D2, 0x3C109AEA0F23CE2D -//A4 = 1.0967323400216015538699565468e-01 + 9.9225166000430644587276000000e-18 -data8 0x3FBC138B89492C5B, 0x3C66E138506D5652 -//A3 = 2.5387124684114281691904579930e-01 + 2.2667777637607113205546600000e-17 -data8 0x3FD03F6D2FA4F4F8, 0x3C7A2258DA8CD8B1 -data8 0xC5866457328BC39B, 0x00003FE3 //A20 = 5.7487331964156762795056629138e-09 -data8 0xE93D9F1ACD59C929, 0x0000BFE4 //A19= -1.3576396100397317396956445658e-08 -data8 0xE33389C8F6CBA813, 0x00003FE5 //A18 = 2.6449714924964597501721434271e-08 -data8 0x8FE7B25B9CD26D2A, 0x0000BFE7 //A17= -6.7011017946055513660266853311e-08 -data8 0xB89F4721BFBC15B0, 0x00003FE8 //A16 = 1.7194280320370423615174419192e-07 -data8 0xE49CBDC1874EBABA, 0x0000BFE9 //A15= -4.2582353660153782928729466776e-07 -data8 0x913AF50A336129CA, 0x00003FEB //A14 = 1.0820500665257088283172211622e-06 -data8 0xABCF0F7313B3B332, 0x0000BFEC //A13= -2.5601510627710417669568115706e-06 -//A2 = 6.5455857798133676439533701341e-01 + 1.3292075193155190798867000000e-18 -data8 0x3FE4F224D4B7E01C, 0x3C3885014A2B8319 -//A1 = 9.3473452162608550164435428087e-01 + 3.2785154201417136611642400000e-17 -data8 0x3FEDE9585F1A7093, 0x3C82E63C1B5028BF -//A0 = 1.3293403881791368004172682049e+00 + 2.2005689328949279282607500000e-16 -data8 0x3FF544FA6D47B38F, 0x3CAFB6AA9829E81F -data8 0xF3668F799997C76D, 0x00003FED //A12 = 7.2539039479124273660331538367e-06 -data8 0xD6C6BBD54CDEAEB1, 0x0000BFEE //A11= -1.2801665282681088568639378920e-05 -data8 0x809E4763B06F6883, 0x00003FF1 //A10 = 6.1329973609906572700697893187e-05 -data8 0x8443B000F8F9A71A, 0x00003FED //A9 = 3.9417864189995544394564413428e-06 -data8 0xC5C7E6D62A6991D8, 0x00003FF4 //A8 = 7.5447412886334708803357581519e-04 -data8 0xD2AF690725C62D88, 0x00003FF5 //A7 = 1.6074004848394703022110823298e-03 -data8 0xAA44E635D4B7B682, 0x00003FF8 //A6 = 1.0392403425906843901680697839e-02 -// -// Polynomial coefficients for the tgammal(x), 4 <= |x| < 5 -//A5 = 1.1600674810589555185913468449e+00 + 3.0229979112715124660731000000e-17 -data8 0x3FF28FA2EB44D22E, 0x3C816D285234C815 -//A4 = 3.1374268565470946334983182169e+00 + 1.3694868953995008497659600000e-16 -data8 0x400919734073B1E1, 0x3CA3BC83CD7E9565 -//A3 = 7.0834593993741057360580271052e+00 + 3.3899702569039156457249800000e-16 -data8 0x401C5576617B6C1F, 0x3CB86D6431213296 -data8 0xA4A5FB49C094966B, 0x00003FDA //A20 = 9.3591760106637809309720130828e-12 -data8 0xA9260DA0F51D7ED8, 0x00003FDD //A19 = 7.6919898428091669411809372180e-11 -data8 0xA16441DFB14BD6E1, 0x00003FE0 //A18 = 5.8713933014370867331213494535e-10 -data8 0x95F098D9C2234849, 0x00003FE3 //A17 = 4.3638234584169302324461091035e-09 -data8 0x8581817400E5AD2B, 0x00003FE6 //A16 = 3.1084260332429955234755367839e-08 -data8 0xE272940E373EBE15, 0x00003FE8 //A15 = 2.1089573544273993580820317236e-07 -data8 0xB6B3391145D226FB, 0x00003FEB //A14 = 1.3612217421122787182942706259e-06 -data8 0x8B9428C4DF95FCD5, 0x00003FEE //A13 = 8.3195416382628990683949003789e-06 -//A2 = 1.2665135075272345943631080445e+01 + 9.8721896915973874255877000000e-16 -data8 0x4029548C95A76F38, 0x3CD1C8BE715B8E13 -//A1 = 1.6154969393303069580269948347e+01 + 9.6850518810678379641029000000e-16 -data8 0x403027AC12FC1E1E, 0x3CD172711C15501B -//A0 = 1.1631728396567448058362970187e+01 + 8.7078125362814179268673000000e-16 -data8 0x40274371E7866C65, 0x3CCF5F8A1A5FACA0 -data8 0xC94A903114272C03, 0x00003FF0 //A12 = 4.7991576836334427243159066630e-05 -data8 0x8844262960E04BE6, 0x00003FF3 //A11 = 2.5990716419283017929486175141e-04 -data8 0xAC5418A76767678D, 0x00003FF5 //A10 = 1.3147621245497801180184809726e-03 -data8 0xCA231B6EFE959132, 0x00003FF7 //A9 = 6.1687358811367989146517222415e-03 -data8 0xDA38E39C13819D2A, 0x00003FF9 //A8 = 2.6638454961912040754759086920e-02 -data8 0xD696DF8D8389FE53, 0x00003FFB //A7 = 1.0477995539298934056097943975e-01 -data8 0xBDD5C153048BC435, 0x00003FFD //A6 = 3.7077144754791605130056406006e-01 -// -// Polynomial coefficients for the tgammal(x), 6 <= |x| < 7 -//A5 = 6.7169398121054200601065531373e+01 + 2.9481001527213915901489600000e-15 -data8 0x4050CAD76B377BA0, 0x3CEA8DDB2B2DE93E -//A4 = 1.6115104376855398982115730178e+02 + 1.3422421925418824418257300000e-14 -data8 0x406424D559BDC687, 0x3D0E397FDB5B33DC -//A3 = 3.1812194028053562533386866562e+02 + 3.9881709875858650942409600000e-14 -data8 0x4073E1F377A6CF73, 0x3D26738F63FE9C4C -data8 0xD6E1B5FF90CAABD3, 0x00003FE1 //A20 = 1.5634700199277480081025480635e-09 -data8 0xD451987B925DD37E, 0x00003FE4 //A19 = 1.2358576813211397717382327174e-08 -data8 0xBFC151B67FA58E6B, 0x00003FE7 //A18 = 8.9292951435632759686382657901e-08 -data8 0xA9034C5E1D67572E, 0x00003FEA //A17 = 6.2962205718327848327368724720e-07 -data8 0x8E40F6EAA30A71EC, 0x00003FED //A16 = 4.2394926442967995119170095258e-06 -data8 0xE3C3541B03A1C350, 0x00003FEF //A15 = 2.7151465666109594512258841637e-05 -data8 0xACE2E58436B2DDCE, 0x00003FF2 //A14 = 1.6487723793339152877117376243e-04 -data8 0xF7EAF8D8D1CAA3D1, 0x00003FF4 //A13 = 9.4573158112768812533636022369e-04 -//A2 = 4.8664351544258869353143381886e+02 + 4.7424047995944376868895400000e-14 -data8 0x407E6A4BD6D9463B, 0x3D2AB2868D79E192 -//A1 = 5.1615277644992545447166776285e+02 + 3.0901956935588717379242200000e-14 -data8 0x40802138E2DC003B, 0x3D216570FB601AEA -//A0 = 2.8788527781504433278314536437e+02 + 2.8213174117085164944959600000e-14 -data8 0x4071FE2A1911F7D6, 0x3D1FC3E4CF4DB5AF -data8 0xA72B88E48D3D1BAB, 0x00003FF7 //A12 = 5.1016252919939028020562237471e-03 -data8 0xD2EFB1067DB4FFB2, 0x00003FF9 //A11 = 2.5749059441230515023024615917e-02 -data8 0xF788AF9522205C24, 0x00003FFB //A10 = 1.2086617635601742290221382521e-01 -data8 0x861A6CE06CB29EAF, 0x00003FFE //A9 = 5.2384071807018493367136112163e-01 -data8 0x84FBDE0947718B58, 0x00004000 //A8 = 2.0778727617851237754568261869e+00 -data8 0xEEC1371E265A2C3A, 0x00004001 //A7 = 7.4610858525146049022238037342e+00 -data8 0xBF514B9BE68ED59D, 0x00004003 //A6 = 2.3914694993947572859629197920e+01 -// -// Polynomial coefficients for the tgammal(x), 8 <= |x| < 9 -//A5 = 5.8487447114416836484451778233e+03 + 4.7365465221455983144182900000e-13 -data8 0x40B6D8BEA568B6FD, 0x3D60AA4D44C2589B -//A4 = 1.2796464063087094473303295672e+04 + 1.2373341702514898266244200000e-12 -data8 0x40C8FE3B666B532D, 0x3D75C4752C5B4783 -//A3 = 2.2837606581322281272150576115e+04 + 2.6598064610627891398831000000e-13 -data8 0x40D64D66D23A7764, 0x3D52B77B3A10EA5C -data8 0xB23418F75B0BE22A, 0x00003FE9 //A20 = 3.3192989594206801808678663868e-07 -data8 0xA984A7BC8B856ED2, 0x00003FEC //A19 = 2.5260177918662350066375115788e-06 -data8 0x921A49729416372C, 0x00003FEF //A18 = 1.7416797068239475136398213598e-05 -data8 0xF5BB9415CC399CA4, 0x00003FF1 //A17 = 1.1717449586392814601938207599e-04 -data8 0xC50B91A40B81F9DF, 0x00003FF4 //A16 = 7.5166775151159345732094429036e-04 -data8 0x96002572326DB203, 0x00003FF7 //A15 = 4.5776541559407384162139204300e-03 -data8 0xD81A1A595E4157BA, 0x00003FF9 //A14 = 2.6379634345126284099420760736e-02 -data8 0x92B700D0CFECADD8, 0x00003FFC //A13 = 1.4327622675407940907282658100e-01 -//A2 = 3.1237895525940199149772524834e+04 + 3.1280450505163186432331700000e-12 -data8 0x40DE8179504C0878, 0x3D8B83BB33FBB766 -//A1 = 2.9192841741344487672904506326e+04 + 7.9300780509779689630767000000e-13 -data8 0x40DC8235DF171691, 0x3D6BE6C780EE54DF -//A0 = 1.4034407293483411194756627083e+04 + 1.4038139346291543309253700000e-12 -data8 0x40CB693422315F90, 0x3D78B23746113FCE -data8 0xBAE50807548BC711, 0x00003FFE //A12 = 7.3005724123917935346868107005e-01 -data8 0xDE28B1F57E68CFB6, 0x00004000 //A11 = 3.4712338349724065462763671443e+00 -data8 0xF4DCA5A5FF901118, 0x00004002 //A10 = 1.5303868912154033908205911714e+01 -data8 0xF85AAA1AD5E84E5E, 0x00004004 //A9 = 6.2088539523416399361048051373e+01 -data8 0xE5AA8BB1BF02934D, 0x00004006 //A8 = 2.2966619406617480799195651466e+02 -data8 0xBF6CFEFD67F59845, 0x00004008 //A7 = 7.6570306334640770654588802417e+02 -data8 0x8DB5D2F001635C29, 0x0000400A //A6 = 2.2673639984182571062068713002e+03 -// -// Polynomial coefficients for the tgammal(x), 10 <= |x| < 11 -//A5 = 7.2546009516580589115619659424e+05 + 1.0343348865365065212891728822e-10 -data8 0x412623A830B99290, 0x3DDC6E7C157611C4 -//A4 = 1.4756292870840241666883230209e+06 + 8.1516565365333844166705674775e-11 -data8 0x4136842D497E56AF, 0x3DD66837E4C3F9EE -//A3 = 2.4356116926500420086085796356e+06 + 3.5508860076560925641351069404e-10 -data8 0x4142950DD8A8C1AF, 0x3DF866C8E3DD0980 -data8 0xB7FD0D1EEAC38EB4, 0x00003FF1 //A20 = 8.7732544640091602721643775932e-05 -data8 0xA9345C64AC750AE9, 0x00003FF4 //A19 = 6.4546407626804942279126469603e-04 -data8 0x8BEABC81BE1E93C9, 0x00003FF7 //A18 = 4.2699261134524096128048819443e-03 -data8 0xE1CD281EDD7315F8, 0x00003FF9 //A17 = 2.7563646660310313164706189622e-02 -data8 0xAD8A5BA6D0FD9758, 0x00003FFC //A16 = 1.6947310643831556048460963841e-01 -data8 0xFCDDA464AD3F182E, 0x00003FFE //A15 = 9.8775699098518676937088606052e-01 -data8 0xAE0DCE2F7B60D1AE, 0x00004001 //A14 = 5.4391852309591064073782104822e+00 -data8 0xE1745D9ABEB8D1A7, 0x00004003 //A13 = 2.8181819161363002758615770457e+01 -//A2 = 3.0619656223573554307222366333e+06 + 1.0819940302945474471259520006e-10 -data8 0x41475C66CFA967E4, 0x3DDDBDDB2A27334B -//A1 = 2.6099413018962685018777847290e+06 + 3.6851882860056025385268615240e-10 -data8 0x4143E98AA6A48974, 0x3DF9530D42589AB6 -//A0 = 1.1332783889487853739410638809e+06 + 1.9339350553312096248591829758e-10 -data8 0x41314ADE639225C9, 0x3DEA946DD6C2C8D3 -data8 0x88BCFAAE71812A1C, 0x00004006 //A12 = 1.3673820009490115307300592012e+02 -data8 0x9A770F5AB540A326, 0x00004008 //A11 = 6.1786031215382040427126476507e+02 -data8 0xA170C1D2C6B413FC, 0x0000400A //A10 = 2.5830473201524594051391525170e+03 -data8 0x9AE56061CB02EB55, 0x0000400C //A9 = 9.9133441230507404119297200255e+03 -data8 0x872390769650FBE2, 0x0000400E //A8 = 3.4595564309496661629764193479e+04 -data8 0xD3E5E8D6923910C1, 0x0000400F //A7 = 1.0849181904819284819615140521e+05 -data8 0x930D70602F50B754, 0x00004011 //A6 = 3.0116351174131169193070583741e+05 -// -// Polynomial coefficients for the tgammal(x), 12 <= |x| < 13 -//A5 = 1.2249876249976964294910430908e+08 + 6.0051348061679753770848000000e-09 -data8 0x419D34BB29FFC39D, 0x3E39CAB72E01818D -//A4 = 2.3482765927605420351028442383e+08 + 1.1874729051592862323641700000e-08 -data8 0x41ABFE5F168D56FA, 0x3E4980338AA7B04B -//A3 = 3.6407329688125067949295043945e+08 + 2.6657200942150363994658700000e-08 -data8 0x41B5B35150E199A5, 0x3E5C9F79C0EB5300 -data8 0xE89AE0F8D726329D, 0x00003FF9 //A20 = 2.8394164465429105626588451540e-02 -data8 0xCF90981F86E38013, 0x00003FFC //A19 = 2.0270002071785908652476845915e-01 -data8 0xA56C658079CA8C4A, 0x00003FFF //A18 = 1.2923704984019263122675412350e+00 -data8 0x80AEF96A67C5615A, 0x00004002 //A17 = 8.0427183300456238315262463506e+00 -data8 0xBE886D7529678931, 0x00004004 //A16 = 4.7633230047847868242503413461e+01 -data8 0x858EDBA4CE2F7508, 0x00004007 //A15 = 2.6711607799594541057655957154e+02 -data8 0xB0B0A3AF388274F0, 0x00004009 //A14 = 1.4135199810126975119809102782e+03 -data8 0xDBA87137988751EF, 0x0000400B //A13 = 7.0290552818218513870879313985e+03 -//A2 = 4.2828433593031734228134155273e+08 + 3.9760422293645854535247300000e-08 -data8 0x41B98719AFEE2947, 0x3E6558A17E0D3007 -//A1 = 3.4008253676084774732589721680e+08 + 1.2558352335001093116071000000e-09 -data8 0x41B4453F68C2C6EB, 0x3E159338C5BC7EC3 -//A0 = 1.3684336546556583046913146973e+08 + 2.6786516700381562934240300000e-08 -data8 0x41A05020CAEE5EA5, 0x3E5CC3058A858579 -data8 0xFF5E3940FB4BA576, 0x0000400D //A12 = 3.2687111823895439312116108631e+04 -data8 0x8A08C124C7F74B6C, 0x00004010 //A11 = 1.4134701786994123329786229006e+05 -data8 0x89D701953540BFFB, 0x00004012 //A10 = 5.6459209892773907605385652281e+05 -data8 0xFC46344B3116C3AD, 0x00004013 //A9 = 2.0666305367147234406757715163e+06 -data8 0xD183EBD7A400151F, 0x00004015 //A8 = 6.8653979211730981618367536737e+06 -data8 0x9C083A40742112F4, 0x00004017 //A7 = 2.0451444503543981795037456447e+07 -data8 0xCD3C475B1A8B6662, 0x00004018 //A6 = 5.3801245423495149598177886823e+07 -LOCAL_OBJECT_END(Constants_Tgammal_poly) - - -LOCAL_OBJECT_START(Constants_Tgammal_poly_splitted) - -// Polynomial coefficients for the tgammal(x), 1 <= |x| < 1.25 -//A5 = -9.8199506890310417350775651357e-01+ -3.2546247786122976510752200000e-17 -data8 0xBFEF6C80EC38B509, 0xBC82C2FA7A3DE3BD -//A4 = 9.8172808683439960475425323239e-01 + 4.4847611775298520359811400000e-17 -data8 0x3FEF6A51055096B0, 0x3C89DA56DE95EFE4 -//A3 = -9.0747907608088618225394839101e-01 +-1.0244057366544064435443970000e-16 -data8 0xBFED0A118F324B62, 0xBC9D86C7B9EBCFFF -data8 0xB8E3FDAA66CC738E, 0x00003FFB //A20 = 9.0278608095877488976217714815e-02 -data8 0xA76067AE1738699C, 0x0000BFFD //A19 =-3.2690738678103132837070881737e-01 -data8 0x9D66B13718408C44, 0x00003FFE //A18 = 6.1484820933424283818320582920e-01 -data8 0xD4AC67BBB4AE5599, 0x0000BFFE //A17 =-8.3075569470082063491389474937e-01 -data8 0xF1426ED1C1488DB3, 0x00003FFE //A16 = 9.4241993542644505594957058785e-01 -data8 0xFC12EB07AA6F4B6B, 0x0000BFFE //A15 =-9.8466366707947121954333549690e-01 -data8 0xFF2B32CFE5B0DDC8, 0x00003FFE //A14 = 9.9675290656677214804168895915e-01 -data8 0xFFD8E7E6FF3662EA, 0x0000BFFE //A13 =-9.9940347089360552383472582319e-01 -//A2 = 9.8905599532797250361682017683e-01 + 5.1760162410376024240867300000e-17 -data8 0x3FEFA658C23B1578, 0x3C8DD673A61F6FE7 -//A1 = -5.7721566490153275452712478000e-01+ -1.0607935612223465065923310000e-16 -data8 0xBFE2788CFC6FB618, 0xBC9E9346622D53B7 -//A0 = 9.9999999999999988897769753748e-01 + 1.1102230245372554544790880000e-16 -data8 0x3FEFFFFFFFFFFFFF, 0x3C9FFFFFFFF51E4E -data8 0xFFF360DF628F0BC9, 0x00003FFE //A12 = 9.9980740979895815468216470840e-01 -data8 0xFFEF8F9A72B40480, 0x0000BFFE //A11 = -9.9974916001038145045939523470e-01 -data8 0xFFE037B8C7E39952, 0x00003FFE //A10 = 9.9951504002809911822597567307e-01 -data8 0xFFC01E08F348BED2, 0x0000BFFE //A9 = -9.9902522772325406705059517941e-01 -data8 0xFF83DAC83119B52C, 0x00003FFE //A8 = 9.9810569179053383842734164901e-01 -data8 0xFEF9F8AB891ABB24, 0x0000BFFE //A7 = -9.9600176036720260345608796766e-01 -data8 0xFE3F0537573C8235, 0x00003FFE //A6 = 9.9314911461918778676646301341e-01 -// -// Polynomial coefficients for the tgammal(x), 1.25 <= |x| < 1.75 -//A5 = -7.7523052299853054125655660300e-02+ -1.2693512521686721504433600000e-17 -data8 0xBFB3D88CFE50601B, 0xBC6D44ED60EE2170 -//A4 = 1.4464535904462152982041800442e-01 + 2.5426820829345729856648800000e-17 -data8 0x3FC283BD374EB2A9, 0x3C7D50AC436187C3 -//A3 = -1.0729480456477220873257039102e-01+ -6.2429894945456418196551000000e-18 -data8 0xBFBB77AC1CA2EBA5, 0xBC5CCA6BCC422D41 -data8 0xF732D2689F323283, 0x00003FF2 //A20 = 2.3574688251652899567587145422e-04 -data8 0xB6B00E23DE89D13A, 0x0000BFF3 //A19 =-3.4844916488842618776630058875e-04 -data8 0xE98396FE4A1B2799, 0x00003FF3 //A18 =4.4539265198744452020440735977e-04 -data8 0xAF8D235A640DB1A2, 0x0000BFF4 //A17 =-6.6967514303333563295261178346e-04 -data8 0x8513B736C918B261, 0x00003FF5 //A16 = 1.0152970456990865810615917715e-03 -data8 0xC790A1A2C78D8E17, 0x0000BFF5 //A15 =-1.5225598630329403515321688394e-03 -data8 0x959706CFA638CDE2, 0x00003FF6 //A14 = 2.2825614575133879623648932383e-03 -data8 0xE050A6021E129860, 0x0000BFF6 //A13 =-3.4227757733947066666295285936e-03 -//A2 = 4.1481345368830113695679528973e-01 + 3.1252439808354284892632100000e-17 -data8 0x3FDA8C4DBA620D56, 0x3C82040BCB483C76 -//A1 = 3.2338397448885010387886751460e-02 + 3.4437825798552300531443100000e-18 -data8 0x3FA08EA88EE561B1, 0x3C4FC366D6C64806 -//A0 = 8.8622692545275794095971377828e-01 + 7.2689375867553992399219000000e-17 -data8 0x3FEC5BF891B4EF6A, 0x3C94F3877D311C0C -data8 0xA8275AADC09D16FC, 0x00003FF7 //A12 = 5.1316445128621071486146117136e-03 -data8 0xFBFE2CE9215267A2, 0x0000BFF7 //A11= -7.6902121820788373000579382408e-03 -data8 0xBCC8EEAB67ECD91D, 0x00003FF8 //A10 = 1.1522515369164312742737727262e-02 -data8 0x8D1614BB97E5E8C2, 0x0000BFF9 //A9 = -1.7222443097804730395560633583e-02 -data8 0xD3A963578BE291E3, 0x00003FF9 //A8 = 2.5837606456090186343624210891e-02 -data8 0x9BA7EAE64C42FDF7, 0x0000BFFA //A7 = -3.8001935555045161419575037512e-02 -data8 0xF0115BA1A77607E7, 0x00003FFA //A6 = 5.8610303817173477119764956736e-02 -// -// Polynomial coefficients for the tgammal(x), 1.75 <= |x| < 2.0 -//A5 = 2.6698206874501426502654943818e-04 + 3.4033756836921062797887300000e-20 -data8 0x3F317F3740FE2A68, 0x3BE417093234B06E -//A4 = 7.4249010753513894345090307070e-02 + 3.9810018444482764697014200000e-18 -data8 0x3FB301FBB0F25A92, 0x3C525BEFFABB622F -//A3 = -8.1576919247086265851720554565e-02+ -5.2716624487804746360745000000e-19 -data8 0xBFB4E239984650AC, 0xBC2372F1C4F276FF -data8 0xFEF3AEE71038E9A3, 0x00003FEB //A20 = 1.8995395865421509009969188571e-06 -data8 0xA11CFA2672BF876A, 0x0000BFEB //A19 =-1.2003868221414015771269244270e-06 -data8 0xF8E107215DAE2164, 0x00003FEC //A18 = 3.7085863210303833432006027217e-06 -data8 0xBCDDD3FC011EF7D6, 0x00003FEC //A17 = 2.8143303971756051015245433043e-06 -data8 0x8683C4687FA22E68, 0x00003FEE //A16 = 8.0177018464360416764308252462e-06 -data8 0xFDA09E5D33E32968, 0x00003FEE //A15 = 1.5117372062443781157389064848e-05 -data8 0xFFB00D0CFF4089B4, 0x00003FEF //A14 = 3.0480348961227424242198174995e-05 -data8 0xFEF6C39566785085, 0x00003FF0 //A13 = 6.0788135974125244644334004947e-05 -//A2 = 4.1184033042643969357854416558e-01 + 1.2103396182129232634761000000e-18 -data8 0x3FDA5B978B96BEBF, 0x3C3653AAD0A139E4 -//A1 = -4.2278433509846713445057275749e-01+ -4.9429151528135657430413000000e-18 -data8 0xBFDB0EE6072093CE, 0xBC56CB907027554F -//A0 = 1.0000000000000000000000000000e+00 + 1.0969171200000000000000000000e-31 -data8 0x3FF0000000000000, 0x3981CC6A5B20B4D5 -data8 0xFF2B7BA9A8D68C37, 0x00003FF1 //A12 = 1.2167446884801403650547161615e-04 -data8 0xFCA53468E3692EF1, 0x00003FF2 //A11 = 2.4094136329542400976250900707e-04 -data8 0x808D698A9C993615, 0x00003FF4 //A10 = 4.9038845704938303659791698883e-04 -data8 0xF10F8E3FB8BB4AFB, 0x00003FF4 //A9 = 9.1957383840999861214472423976e-04 -data8 0x89E224E42F93F005, 0x00003FF6 //A8 = 2.1039333407187324139473634747e-03 -data8 0xBAF374824937A323, 0x00003FF6 //A7 = 2.8526458211545152218493600470e-03 -data8 0xB6BF7564F52140C6, 0x00003FF8 //A6 = 1.1154045718131014476684982178e-02 -// -// Polynomial coefficients for the tgammal(x), 0.0 <= |x| < 0.125 -//A5 = -9.8199506890314514073736518185e-01+ -5.9363811993837985890950900000e-17 -data8 0xBFEF6C80EC38B67A, 0xBC911C46B447C81F -//A4 = 9.8172808683440015986576554496e-01 + 2.7457414262802803699834200000e-17 -data8 0x3FEF6A51055096B5, 0x3C7FA7FF90ACAD1F -//A3 = -9.0747907608088618225394839101e-01 + -1.0676255850934306734701780000e-16 -data8 0xBFED0A118F324B62, 0xBC9EC5AFB633438D -data8 0x9217E83FA207CB80, 0x00003FFD //A20 = 2.8533864762086088781083621561e-01 -data8 0xA8DABFA52FDF03EC, 0x0000BFFE //A19= -6.5958783896337186303285832783e-01 -data8 0xE331ED293AF39F9B, 0x00003FFE //A18 = 8.8748056656454687449654731184e-01 -data8 0xF9163C5DDB52419D, 0x0000BFFE //A17= -9.7299554149078295602977718525e-01 -data8 0xFEC0A1C672CB9265, 0x00003FFE //A16 = 9.9512683005268190987854104489e-01 -data8 0xFFD2D65B8EA7B5F4, 0x0000BFFE //A15= -9.9931087241443958201592847861e-01 -data8 0xFFF93AA39EE53445, 0x00003FFE //A14 = 9.9989668364186884793382816496e-01 -data8 0xFFFB99A9A3F5F480, 0x0000BFFE //A13= -9.9993286506283835663204999212e-01 -//A2 = 9.8905599532797250361682017683e-01 + 5.1778575360788420716540100000e-17 -data8 0x3FEFA658C23B1578, 0x3C8DD92B45408D07 -//A1 = -5.7721566490153275452712478000e-01+ -1.0607938730998824663273110000e-16 -data8 0xBFE2788CFC6FB618, 0xBC9E9346F8FDE55B -//A0 = 9.9999999999999988897769753748e-01 + 1.1102230246251564036631420000e-16 -data8 0x3FEFFFFFFFFFFFFF, 0x3C9FFFFFFFFFFFFF -data8 0xFFF7FEBB545812C1, 0x00003FFE //A12 = 9.9987785409425126648628395084e-01 -data8 0xFFF00C02E943A3F2, 0x0000BFFE //A11= -9.9975657530855116454438747397e-01 -data8 0xFFE0420AADC53820, 0x00003FFE //A10 = 9.9951565514290485919027183699e-01 -data8 0xFFC01EB42EF27EEB, 0x0000BFFE //A9 = -9.9902526759155739377365522320e-01 -data8 0xFF83DAD0BF23FF12, 0x00003FFE //A8 = 9.9810569378236378800364235948e-01 -data8 0xFEF9F8ABDBCDB2F3, 0x0000BFFE //A7 = -9.9600176044241699109053158187e-01 -data8 0xFE3F05375988491D, 0x00003FFE //A6 = 9.9314911462127599008937257662e-01 -LOCAL_OBJECT_END(Constants_Tgammal_poly_splitted) - -.align 64 -LOCAL_OBJECT_START(Constants_Tgammal_common) -// Positive overflow value -data8 0x3FE0000000000000 // 0.5 -data8 0x3FF8000000000000 // 1.5 -data8 0x3FD0000000000000 // 0.25 -data8 0x0000000000000000 // 0 -data8 0xDB718C066B352E21, 0x00004009 // Positive overflow value -LOCAL_OBJECT_END(Constants_Tgammal_common) - - - -//======================================================= -// Lgamma registers - -// General Purpose Registers -GR_l_Log_Table = r33 -GR_l_Log_Table1 = r34 -GR_l_BIAS = r34 -GR_l_Index1 = r35 -GR_l_Index2 = r36 -GR_l_signif_Z = r37 -GR_l_X_0 = r38 -GR_l_X_1 = r39 -GR_l_X_2 = r40 -GR_l_Z_1 = r41 -GR_l_Z_2 = r42 -GR_l_N = r43 -GR_l_Index3 = r44 -GR_l_Stirling_Table = r45 -GR_l_N_Unbiased = r46 - -// Floating Point Registers -FR_l_logl_X = f8 - -FR_l_h_3 = f10 -FR_l_poly_hi = f10 -FR_l_W = f11 -FR_l_S = f12 -FR_l_GS_hi = f13 -FR_l_Y_lo = f13 -FR_l_r_cor = f14 -FR_l_G_1 = f15 -FR_l_G = f15 -FR_l_H_1 = f32 -FR_l_H = f32 -FR_l_h = f33 -FR_l_h_1 = f33 -FR_l_N = f33 -FR_l_G_2 = f34 -FR_l_H_2 = f35 -FR_l_h_2 = f36 -FR_l_G_3 = f37 -FR_l_log2_hi = f38 -FR_l_GS_lo = f39 -FR_l_H_3 = f40 -FR_l_float_N = f41 -FR_l_Q_4 = f42 -FR_l_Q_3 = f43 -FR_l_Q_2 = f44 -FR_l_Q_1 = f45 -FR_l_Q_5 = f46 -FR_l_Q_6 = f47 -FR_l_log2_lo = f48 -FR_l_r = f49 -FR_l_poly_lo = f50 -FR_l_poly = f51 -FR_l_rsq = f52 -FR_l_Y_lo_res = f53 - -FR_l_Y0 = f55 -FR_l_Q0 = f56 -FR_l_E0 = f57 -FR_l_E2 = f58 -FR_l_E1 = f59 -FR_l_Y1 = f60 -FR_l_E3 = f61 -FR_l_Y2 = f62 - -FR_l_Z = f63 -FR_l_Z2 = f64 -FR_l_Z4 = f65 -FR_l_Z8 = f66 - -FR_l_CH = f67 -FR_l_CL = f68 - -FR_l_B2 = f69 -FR_l_B4 = f70 -FR_l_B6 = f71 -FR_l_B8 = f72 -FR_l_B10 = f73 -FR_l_B12 = f74 -FR_l_B14 = f75 -FR_l_B16 = f76 -FR_l_B18 = f77 -FR_l_Half = f78 -FR_l_SS = f79 -FR_l_AbsX_m_Half = f80 -FR_l_CXH = f81 -FR_l_CXL = f82 -FR_l_SSCXH = f83 -FR_l_SSCXL = f84 -FR_l_XYH = f85 -FR_l_XYL = f86 -FR_l_Temp = f87 - -FR_l_logl_YHi = f88 -FR_l_logl_YLo = f89 - -FR_l_SignedXYH = f123 - -FR_l_AbsX = f127 - - - -//======================================================= -// Negative part registers - -// General Purpose Registers -GR_n_sin_Table = r47 -GR_n_XN = r48 - -// Float point registers -FR_n_IXNS = f125 -FR_n_IXN = f126 - -FR_n_XNS = f90 -FR_n_XS = f91 -FR_n_XS2 = f92 -FR_n_XS2L = f93 -FR_n_XS4 = f94 -FR_n_XS7 = f95 -FR_n_XS8 = f96 -FR_n_TT = f97 -FR_n_TH = f98 -FR_n_TL = f99 - -FR_n_A2H = f100 -FR_n_A2L = f101 -FR_n_A1H = f102 -FR_n_A1L = f103 -FR_n_A9 = f104 -FR_n_A8 = f105 -FR_n_A7 = f106 -FR_n_A6 = f107 -FR_n_A5 = f108 -FR_n_A4 = f109 -FR_n_A3 = f110 - -FR_n_PolyH = f111 -FR_n_PolyL = f112 - -FR_n_Poly1H = f113 -FR_n_SinxH = f113 // the same as FR_n_Poly1H -FR_n_Poly1L = f114 -FR_n_SinxL = f114 // the same as FR_n_Poly1L - -FR_n_Tail = f115 -FR_n_NegOne = f116 - -FR_n_Y0 = f117 - -FR_n_Q0 = f118 -FR_n_E0 = f119 - -FR_n_E2 = f120 -FR_n_E1 = f121 - -FR_n_Y1 = f55 -FR_n_E3 = f56 - -FR_n_Y2 = f57 -FR_n_R0 = f58 - -FR_n_E4 = f59 -FR_n_RcpResH = f60 - -FR_n_Y3 = f61 -FR_n_R1 = f62 -FR_n_Temp = f63 - -FR_n_RcpResL = f64 - -FR_n_ResH = f65 -FR_n_ResL = f66 - - - - -//======================================================= -// Exp registers - -// General Purpose Registers -GR_e_ad_Arg = r33 -GR_e_ad_A = r34 -GR_e_signexp_x = r35 -GR_e_exp_x = r35 -GR_e_exp_mask = r36 -GR_e_ad_W1 = r37 -GR_e_ad_W2 = r38 -GR_e_M2 = r39 -GR_e_M1 = r40 -GR_e_K = r41 -GR_e_exp_2_mk = r42 -GR_e_exp_2_k = r43 -GR_e_ad_T1 = r44 -GR_e_ad_T2 = r45 -GR_e_N_fix = r46 -GR_e_one = r47 -GR_e_exp_bias = r48 -GR_e_sig_inv_ln2 = r49 -GR_e_rshf_2to51 = r50 -GR_e_exp_2tom51 = r51 -GR_e_rshf = r52 - -// Floating Point Registers -FR_e_RSHF_2TO51 = f10 -FR_e_INV_LN2_2TO63 = f11 -FR_e_W_2TO51_RSH = f12 -FR_e_2TOM51 = f13 -FR_e_RSHF = f14 -FR_e_Y_hi = f15 -FR_e_Y_lo = f32 -FR_e_scale = f33 -FR_e_float_N = f34 -FR_e_N_signif = f35 -FR_e_L_hi = f36 -FR_e_L_lo = f37 -FR_e_r = f38 -FR_e_W1 = f39 -FR_e_T1 = f40 -FR_e_W2 = f41 -FR_e_T2 = f42 -FR_e_W1_p1 = f43 -FR_e_rsq = f44 -FR_e_A2 = f45 -FR_e_r4 = f46 -FR_e_A3 = f47 -FR_e_poly = f48 -FR_e_T = f49 -FR_e_W = f50 -FR_e_Wp1 = f51 -FR_e_r6 = f52 -FR_e_2_mk = f53 -FR_e_A1 = f54 -FR_e_T_scale = f55 -FR_e_result_lo = f56 -FR_e_W_T_scale = f57 -FR_e_Wp1_T_scale = f58 - -FR_e_expl_Input_X = f123 -FR_e_expl_Input_Y = f124 -FR_e_expl_Output_X = f123 -FR_e_expl_Output_Y = f124 - - -FR_e_expl_Input_AbsX = f122 - - - -//======================================================= -// Common registers - -// General Purpose Registers -GR_c_Table = r53 -GR_c_NegUnderflow = r54 -GR_c_NegSingularity = r55 -GR_c_X = r56 -GR_c_SignBit = r57 -GR_c_13 = r58 - - -// Floating Point Registers -FR_c_PosOverflow = f123 -FR_c_XN = f124 - - -//======================================================= -// Polynomial part registers - -// General Purpose Registers -GR_p_Table = r59 -GR_p_XN = r33 -GR_p_Table2 = r34 -GR_p_Int = r35 -GR_p_Offset = r36 -GR_p_Offset2 = r38 -GR_p_X_Sgnd = GR_l_signif_Z // = r37 -GR_p_Exp = r61 -GR_p_Bias = r62 -GR_p_0p75 = r63 - -// Floating Point Registers -FR_p_AbsX = FR_l_AbsX // = f127 -FR_p_IXN = FR_n_IXN // = f126 -FR_p_XN = f32 -FR_p_0p5 = f33 -FR_p_1p5 = f34 -FR_p_AbsXM1 = f35 -FR_p_2 = f36 - -FR_p_A20 = f37 -FR_p_A19 = f38 -FR_p_A18 = f39 -FR_p_A17 = f40 -FR_p_A16 = f41 -FR_p_A15 = f42 -FR_p_A14 = f43 -FR_p_A13 = f44 -FR_p_A12 = f45 -FR_p_A11 = f46 -FR_p_A10 = f47 -FR_p_A9 = f48 -FR_p_A8 = f49 -FR_p_A7 = f50 -FR_p_A6 = f51 -FR_p_A5H = f52 -FR_p_A5L = f53 -FR_p_A4H = f54 -FR_p_A4L = f55 -FR_p_A3H = f56 -FR_p_A3L = f57 -FR_p_A2H = f58 -FR_p_A2L = f59 -FR_p_A1H = f60 -FR_p_A1L = f61 -FR_p_A0H = f62 -FR_p_A0L = f63 - -FR_p_XR = f64 -FR_p_XR2 = f65 -FR_p_XR2L = f52 - -FR_p_XR3 = f58 -FR_p_XR3L = f38 - -FR_p_XR4 = f42 -FR_p_XR6 = f40 -FR_p_XR8 = f37 - -FR_p_Poly5H = f66 -FR_p_Poly5L = f67 -FR_p_Poly4H = f53 -FR_p_Poly4L = f44 -FR_p_Poly3H = f41 -FR_p_Poly3L = f47 -FR_p_Poly2H = f68 -FR_p_Poly2L = f54 -FR_p_Poly1H = f55 -FR_p_Poly1L = f46 -FR_p_Poly0H = f39 -FR_p_Poly0L = f43 - -FR_p_Temp5H = f69 -FR_p_Temp5L = f70 -FR_p_Temp4H = f71 -FR_p_Temp4L = f60 -FR_p_Temp2H = f72 -FR_p_Temp2L = f73 -FR_p_Temp1H = f59 -FR_p_Temp1L = f61 -FR_p_Temp0H = f49 -FR_p_Temp0L = f48 -FR_p_PolyTail = f45 -FR_p_OddPoly0H = f56 -FR_p_OddPoly0L = f51 - -FR_p_0p25 = f73 - - -//======================================================= -// Negative polynomial part registers -// General Purpose Registers -GR_r_sin_Table = r47 -GR_r_sin_Table2 = r60 - -// Floating Point Registers -FR_r_IXNS = FR_n_IXNS -FR_r_IXN = FR_n_IXN - -FR_r_AbsX = FR_l_AbsX - -FR_r_A9 = f74 -FR_r_A8 = f75 -FR_r_A7 = f76 -FR_r_A6 = f77 -FR_r_A5 = f78 -FR_r_A4 = f79 -FR_r_A3 = f80 -FR_r_A2H = f81 -FR_r_A2L = f82 -FR_r_A1H = f83 -FR_r_A1L = f84 - -FR_r_XNS = f85 -FR_r_XS = f86 -FR_r_XS2 = f87 -FR_r_XS2L = f88 -FR_r_XS4 = f89 -FR_r_XS7 = f90 -FR_r_XS8 = f91 - -FR_r_Tail = f92 - -FR_r_TT = f93 -FR_r_TH = f94 -FR_r_TL = f95 - -FR_r_ResH = f96 -FR_r_ResL = f97 - -FR_r_Res3H = f98 -FR_r_Res3L = f99 - -FR_r_Res1H = f100 -FR_r_Res1L = f101 - - - -FR_r_Y0 = f102 -FR_r_Q0 = f103 -FR_r_E0 = f104 -FR_r_E2 = f105 -FR_r_E1 = f106 -FR_r_Y1 = f107 -FR_r_E3 = f108 -FR_r_Y2 = f109 -FR_r_R0 = f110 -FR_r_E4 = f111 -FR_r_ZH = f112 -FR_r_Y3 = f113 -FR_r_R1 = f114 -FR_r_ZHN = f115 -FR_r_ZL = f115 -FR_r_NegOne = f116 - -FR_z_Y0 = f102 -FR_z_Q0 = f103 -FR_z_E0 = f104 -FR_z_E2 = f105 -FR_z_E1 = f106 -FR_z_Y1 = f107 -FR_z_E3 = f108 -FR_z_Y2 = f109 -FR_z_R0 = f110 -FR_z_E4 = f111 -FR_z_ZH = f112 -FR_z_Y3 = f113 -FR_z_R1 = f114 -FR_z_ZL = f115 - - -// General Purpose Registers -GR_SAVE_PFS = r32 -GR_DenOverflow = r33 -GR_u_XN = r34 - -GR_SAVE_B0 = r35 -GR_SAVE_GP = r36 -GR_SAVE_SP = r37 - -// Floating Point Registers -FR_u_IXN = f34 - - -// ERROR HANDLER REGISTERS -GR_Parameter_X = r64 -GR_Parameter_Y = r65 -GR_Parameter_RESULT = r66 -GR_Parameter_TAG = r67 - -FR_RESULT = f8 -FR_X = f32 -FR_Y = f1 - - -.section .text -GLOBAL_LIBM_ENTRY(tgammal) -{ .mfi - alloc r32 = ar.pfs,0,32,4,0 - fabs FR_l_AbsX = f8 // Get absolute value of X - addl GR_n_sin_Table = @ltoff(Constants_Tgammal_sin), gp -} -{ .mfi - addl GR_l_Log_Table=@ltoff(Constants_Tgammal_log_80_Z_G_H_h1#),gp - nop.f 0 - addl GR_l_Stirling_Table = @ltoff(Constants_Tgammal_stirling), gp -};; - -{ .mfi - getf.sig GR_l_signif_Z = f8 // Significand of X - fcvt.fx.s1 FR_n_IXNS = f8 // Convert to fixed point - addl GR_c_Table = @ltoff(Constants_Tgammal_common), gp -} -{ .mfi - ld8 GR_l_Log_Table = [GR_l_Log_Table] - nop.f 0 - addl GR_p_Table = @ltoff(Constants_Tgammal_poly), gp -};; - -{ .mfi - ld8 GR_n_sin_Table = [GR_n_sin_Table] - fclass.m p6,p0 = f8,0x1EF // Check x for NaN, 0, INF, denorm - // NatVal. - addl GR_c_NegSingularity = 0x1003E, r0 -} -{ .mlx - ld8 GR_l_Stirling_Table = [GR_l_Stirling_Table] - movl GR_c_13 = 0x402A000000000000 // 13.0 -};; - -{ .mfi - getf.d GR_c_X = f8 // Double prec. X to general register - frcpa.s1 FR_z_Y0,p0 = f1,f8 // y = frcpa(x) (for negatives) - extr.u GR_l_Index1 = GR_l_signif_Z, 59, 4 // = High 4 bits of Z -} -{ .mlx - ld8 GR_c_Table = [GR_c_Table] - movl GR_c_SignBit = 0x8000000000000000 // High bit (sign) -};; - -{ .mfi - ld8 GR_p_Table = [GR_p_Table] - fcmp.lt.s1 p15, p14 = f8,f0 // p14 - positive arg, p15 - negative - shl GR_l_Index1 = GR_l_Index1,5 // Adjust Index1 ptr (x32) -} -{ .mfb - adds GR_c_NegUnderflow = 1765, r0 - nop.f 0 -(p6) br.cond.spnt tgammal_spec // Spec. values processing branch //////////// - // (0s, INFs, NANs, NatVals, denormals) ////// -};; - -{ .mfi - ldfpd FR_l_CH,FR_l_CL= [GR_l_Stirling_Table], 16 // Load CH, CL - fcvt.fx.trunc.s1 FR_n_IXN = FR_l_AbsX // Abs arg to int by trunc - extr.u GR_l_X_0 = GR_l_signif_Z, 49, 15 // High 15 bit of Z -} -{ .mfi - add GR_l_Index1 = GR_l_Index1,GR_l_Log_Table // Add offset - fma.s1 FR_p_2 = f1, f1, f1 // 2.0 - andcm GR_c_X = GR_c_X, GR_c_SignBit // Remove sign -};; - -{ .mfi - addl GR_l_Log_Table = @ltoff(Constants_Tgammal_log_80_Z_G_H_h2#), gp - fcmp.lt.s1 p10, p0 = FR_l_AbsX, f1 // If |X|<1 then p10 = 1 - nop.i 0 -} -{ .mlx - ld2 GR_l_Z_1 = [GR_l_Index1],4 // load Z_1 from Index1 - movl GR_l_BIAS = 0x000000000000FFFF // Bias for exponent -};; - -{ .mfi - ld8 GR_l_Log_Table = [GR_l_Log_Table] - frcpa.s1 FR_l_Y0, p0 = f1, FR_l_AbsX // y = frcpa(x) - nop.i 0 -} -{ .mfi - ldfs FR_l_G_1 = [GR_l_Index1],4 // Load G_1 - fsub.s1 FR_l_W = FR_l_AbsX, f1 // W = |X|-1 - nop.i 0 -};; - -{ .mfi - getf.exp GR_l_N_Unbiased= FR_l_AbsX // exponent of |X| - fmerge.se FR_l_S = f1, FR_l_AbsX // S = merging of X and 1.0 - cmp.gtu p11, p0 = GR_c_13, GR_c_X // If 1 <= |X| < 13 - // then p11 = 1 -} -{ .mfb - ldfs FR_l_H_1 = [GR_l_Index1],8 // Load H_1 - fcvt.xf FR_n_XNS = FR_n_IXNS // Convert to FP repr. of int X -(p10) br.cond.spnt tgamma_lt_1 // Branch to |X| < 1 path /////////////////// -};; - -{ .mfi - ldfpd FR_n_A2H, FR_n_A2L = [GR_n_sin_Table], 16 - nop.f 0 - pmpyshr2.u GR_l_X_1 = GR_l_X_0,GR_l_Z_1,15 // Adjust Index2 (x32) -} -{ .mfb - ldfe FR_l_B2 = [GR_l_Stirling_Table], 16 - nop.f 0 -(p11) br.cond.spnt tgamma_lt_13 // Branch to 1 <= |X| < 13 path /////////////// -};; - -{ .mfi - ldfe FR_l_h_1 = [GR_l_Index1],0 - nop.f 0 - sub GR_l_N = GR_l_N_Unbiased, GR_l_BIAS // N - BIAS -} -{ .mib - ldfpd FR_l_B4,FR_l_B6= [GR_l_Stirling_Table], 16 // Load C -(p15) cmp.geu.unc p8,p0 = GR_l_N_Unbiased, GR_c_NegSingularity -(p8) br.cond.spnt tgammal_singularity // Singularity for arg < to -2^63 ////// -};; - -{ .mmi -(p15) ldfpd FR_n_A1H, FR_n_A1L = [GR_n_sin_Table], 16 - ldfpd FR_l_B8, FR_l_B10 = [GR_l_Stirling_Table], 16 - add GR_c_Table = 0x20, GR_c_Table -};; - -{ .mfi -(p15) ldfe FR_n_A9 = [GR_n_sin_Table], 16 - fma.s1 FR_l_Q0 = f1,FR_l_Y0,f0 // Q0 = Y0 - nop.i 0 -} -{ .mfi - ldfpd FR_l_B12, FR_l_B14 = [GR_l_Stirling_Table], 16 - fnma.s1 FR_l_E0 = FR_l_Y0,FR_l_AbsX,f1 // e = 1-b*y - nop.i 0 -};; - -{ .mfi -(p15) ldfe FR_n_A8 = [GR_n_sin_Table], 16 - fcvt.xf FR_c_XN = FR_n_IXN // Convert to FP repr. of int X - extr.u GR_l_Index2 = GR_l_X_1, 6, 4 // Extract Index2 -} -{ .mfi - ldfpd FR_l_B16, FR_l_B18 = [GR_l_Stirling_Table], 16 - nop.f 0 - nop.i 0 -};; - -{ .mfi -(p15) ldfe FR_n_A7 = [GR_n_sin_Table], 16 - fms.s1 FR_l_CXH = FR_l_CH, f1, FR_l_AbsX // CXH = CH+|X| - shl GR_l_Index2 = GR_l_Index2,5 -} -{ .mfi - ldfd FR_l_Half = [GR_l_Stirling_Table] // Load 0.5 - nop.f 0 - nop.i 0 -};; - -{ .mfi - add GR_l_Index2 = GR_l_Index2, GR_l_Log_Table // Add offset - nop.f 0 - nop.i 0 -} -{ .mfi -(p15) ldfe FR_n_A6 = [GR_n_sin_Table], 16 -(p15) fma.s1 FR_n_XS = FR_l_AbsX , f1, FR_n_XNS // xs = x - int(x) - nop.i 0 -};; - -{ .mmi - ld2 GR_l_Z_2 = [GR_l_Index2],4 - addl GR_l_Log_Table = @ltoff(Constants_Tgammal_log_80_h3_G_H#),gp - nop.i 0 -};; - -{ .mfi - ld8 GR_l_Log_Table = [GR_l_Log_Table] - fma.s1 FR_l_E2 = FR_l_E0,FR_l_E0,FR_l_E0 // e2 = e+e^2 - nop.i 0 -} -{ .mfi - ldfs FR_l_G_2 = [GR_l_Index2],4 - fma.s1 FR_l_E1 = FR_l_E0,FR_l_E0,f0 // e1 = e^2 - nop.i 0 -};; - -{ .mmi - ldfs FR_l_H_2 = [GR_l_Index2],8 -(p15) ldfe FR_n_A5 = [GR_n_sin_Table], 16 - nop.i 0 -};; - -{ .mfi - setf.sig FR_l_float_N = GR_l_N // float_N = Make N a fp number - nop.f 0 - pmpyshr2.u GR_l_X_2 = GR_l_X_1,GR_l_Z_2,15 // X_2 = X_1 * Z_2 -} -{ .mfi - ldfe FR_l_h_2 = [GR_l_Index2],0 - fma.s1 FR_l_CXL = FR_l_AbsX, f1, FR_l_CXH // CXL = |X|+CXH - add GR_l_Log_Table1= 0x200, GR_l_Log_Table -};; - -{ .mfi -(p15) ldfe FR_n_A4 = [GR_n_sin_Table], 16 -(p15) fcmp.eq.unc.s1 p9,p0 = FR_l_AbsX, FR_c_XN //if argument is integer - // and negative - nop.i 0 -} -{ .mfi - ldfe FR_c_PosOverflow = [GR_c_Table],16 //Load pos overflow value -(p15) fma.s1 FR_n_XS2 = FR_n_XS, FR_n_XS, f0 // xs^2 = xs*xs - nop.i 0 -};; - -{ .mfi -(p15) ldfe FR_n_A3 = [GR_n_sin_Table], 16 - nop.f 0 - nop.i 0 -};; - -{ .mfi -(p15) getf.sig GR_n_XN = FR_n_IXN // int(x) to general reg - fma.s1 FR_l_Y1 = FR_l_Y0,FR_l_E2,FR_l_Y0 // y1 = y+y*e2 - nop.i 0 -} -{ .mfb - nop.m 0 - fma.s1 FR_l_E3 = FR_l_E1,FR_l_E1,FR_l_E0 // e3 = e+e1^2 -(p9) br.cond.spnt tgammal_singularity // Singularity for integer ///////////// - // and negative arguments ////////////// -};; - -{ .mfi - nop.m 0 - fms.s1 FR_l_AbsX_m_Half = FR_l_AbsX, f1, FR_l_Half // |x|-0.5 - extr.u GR_l_Index2 = GR_l_X_2, 1, 5 // Get Index3 -};; - -{ .mfi - shladd GR_l_Log_Table1= GR_l_Index2, 2, GR_l_Log_Table1 - nop.f 0 - shladd GR_l_Index3 = GR_l_Index2,4, GR_l_Log_Table // Index3 -} -{ .mfb -(p15) cmp.gtu.unc p11, p0 = GR_n_XN, GR_c_NegUnderflow // X < -1765 - fms.s1 FR_l_CXL = FR_l_CH, f1, FR_l_CXL // CXL = CH - CXL -(p11) br.cond.spnt tgammal_underflow // Singularity for negative argument ////// - // at underflow domain (X < -1765) ////// -};; - -{ .mfi - addl GR_l_Log_Table = @ltoff(Constants_Tgammal_log_80_Q#), gp -(p15) fma.s1 FR_n_TT = FR_n_A2L, FR_n_XS2, f0 // T=A2L*x^2 - tbit.nz.unc p13, p12 = GR_n_XN, 0x0 // whether [X] odd or even -} -{ .mfi - nop.m 0 -(p15) fms.s1 FR_n_XS2L = FR_n_XS, FR_n_XS, FR_n_XS2 // xs^2 Low part - nop.i 0 -};; - -{ .mfi - ld8 GR_l_Log_Table = [GR_l_Log_Table] -(p15) fma.s1 FR_n_A7 = FR_n_A8, FR_n_XS2, FR_n_A7 // poly tail - nop.i 0 -} -{ .mfi - ldfe FR_l_h_3 = [GR_l_Index3],12 -(p15) fma.s1 FR_n_XS4 = FR_n_XS2, FR_n_XS2, f0 // xs^4 = xs^2*xs^2 - nop.i 0 -};; - -{ .mfi - ldfs FR_l_H_3 = [GR_l_Log_Table1], 0 - fma.s1 FR_l_Y2 = FR_l_Y1, FR_l_E3, FR_l_Y0 // y2 = y+y1*e3 - nop.i 0 -} -{ .mfi - ldfs FR_l_G_3 = [GR_l_Index3], 0 - fnma.s1 FR_l_Z = FR_l_AbsX,FR_l_Q0,f1 // r = a-b*q - nop.i 0 -};; - -{ .mfi - nop.m 0 - fmpy.s1 FR_l_G = FR_l_G_1, FR_l_G_2 // G = G1 * G_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_l_H = FR_l_H_1, FR_l_H_2 // H = H_1 + H_2 - nop.i 0 -};; - -{ .mfi - ldfe FR_l_log2_hi = [GR_l_Log_Table],16 // load log2_hi part - fadd.s1 FR_l_h = FR_l_h_1, FR_l_h_2 // h = h_1 + h_2 - nop.i 0 -} -{ .mfi - nop.m 0 - fcvt.xf FR_l_float_N = FR_l_float_N // int(N) - nop.i 0 -};; - -{ .mfi - ldfe FR_l_log2_lo = [GR_l_Log_Table],16 // Load log2_lo part - fma.s1 FR_l_CXL = FR_l_CXL, f1, FR_l_CL - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_TT = FR_n_A2H, FR_n_XS2L, FR_n_TT // T=A2H*x2L+T - nop.i 0 -};; - -{ .mfi - ldfe FR_l_Q_6 = [GR_l_Log_Table],16 -(p15) fma.s1 FR_n_A3 = FR_n_A4, FR_n_XS2, FR_n_A3 // poly tail - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_A5 = FR_n_A6, FR_n_XS2, FR_n_A5 // poly tail - nop.i 0 -};; - -{ .mfi - ldfe FR_l_Q_5 = [GR_l_Log_Table],16 -(p15) fabs FR_n_XS = FR_n_XS // abs(xs) - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_l_Z = FR_l_Z,FR_l_Y2,FR_l_Q0 // x_hi = q+r*y2 - nop.i 0 -};; - -{ .mfi - ldfe FR_l_Q_4 = [GR_l_Log_Table],16 -(p15) fma.s1 FR_n_A7 = FR_n_A9, FR_n_XS4, FR_n_A7 // poly tail - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_XS7 = FR_n_XS4, FR_n_XS2, f0 // = x^4*x^2 - nop.i 0 -};; - -{ .mfi - ldfe FR_l_Q_3 = [GR_l_Log_Table],16 - fneg FR_n_NegOne = f1 // -1.0 - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_XS8 = FR_n_XS4, FR_n_XS4, f0 // xs^8 = xs^4*xs^4 - nop.i 0 -};; - -{ .mfi - ldfe FR_l_Q_2 = [GR_l_Log_Table],16 - fadd.s1 FR_l_h = FR_l_h, FR_l_h_3 // h = h_1 + h_2 + h_3 - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_TH = FR_n_A2H, FR_n_XS2, FR_n_TT // A2H*xs2+T - nop.i 0 -};; - -{ .mfi - ldfe FR_l_Q_1 = [GR_l_Log_Table],16 - fmpy.s1 FR_l_G = FR_l_G, FR_l_G_3 // G = G_1 * G_2 * G_3 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_l_H = FR_l_H, FR_l_H_3 // H = H_1 + H_2 + H_3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_Z2 = FR_l_Z, FR_l_Z, f0 // Z^2 - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_A3 = FR_n_A5, FR_n_XS4, FR_n_A3 // poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p14) fcmp.gt.unc.s1 p7,p0 = FR_l_AbsX, FR_c_PosOverflow //X > 1755.5483 - // (overflow domain, result cannot be represented by normal value) - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_XS7 = FR_n_XS7, FR_n_XS, f0 // x^7 construction - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) fms.s1 FR_n_TL = FR_n_A2H, FR_n_XS2, FR_n_TH // A2H*xs2+TH - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_PolyH = FR_n_TH, f1, FR_n_A1H // PolyH=TH+A1H - nop.i 0 -};; - -{ .mfi - nop.m 0 - fmpy.s1 FR_l_GS_hi = FR_l_G, FR_l_S // GS_hi = G*S - nop.i 0 -} -{ .mfb - nop.m 0 - fms.s1 FR_l_r = FR_l_G, FR_l_S, f1 // r = G*S -1 -(p7) br.cond.spnt tgammal_overflow // Overflow path for arg > 1755.5483 ////// -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_B14 = FR_l_B16, FR_l_Z2, FR_l_B14// Bernoulli tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_l_Z4 = FR_l_Z2, FR_l_Z2, f0 // Z^4 = Z^2*Z^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_B2 = FR_l_B4, FR_l_Z2, FR_l_B2 // Bernoulli tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_l_B6 = FR_l_B8, FR_l_Z2, FR_l_B6 // Bernoulli tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_B10 = FR_l_B12, FR_l_Z2, FR_l_B10// Bernoulli tail - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_Tail = FR_n_A7, FR_n_XS8, FR_n_A3 // poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_TL = FR_n_TL, f1, FR_n_TT // TL = TL+T - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fms.s1 FR_n_PolyL = FR_n_A1H, f1, FR_n_PolyH // polyH+A1H - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_poly_lo = FR_l_r, FR_l_Q_6, FR_l_Q_5 // Q_5+r*Q_6 - nop.i 0 -} -{ .mfi - nop.m 0 - fsub.s1 FR_l_r_cor = FR_l_GS_hi, f1 // r_cor = GS_hi -1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_l_GS_lo = FR_l_G, FR_l_S, FR_l_GS_hi // G*S-GS_hi - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_l_poly = FR_l_r, FR_l_Q_2, FR_l_Q_1 //poly=r*Q2+Q1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fmpy.s1 FR_l_rsq = FR_l_r, FR_l_r // rsq = r * r - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_l_G = FR_l_float_N, FR_l_log2_hi, FR_l_H // Tbl = - // float_N*log2_hi + H - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_Y_lo = FR_l_float_N, FR_l_log2_lo, FR_l_h // Y_lo= - // float_N*log2_lo + h - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_l_B14 = FR_l_B18, FR_l_Z4, FR_l_B14 //bernulli tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_B2 = FR_l_B6, FR_l_Z4, FR_l_B2 //bernulli tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_l_Z8 = FR_l_Z4, FR_l_Z4, f0 //bernulli tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_poly_lo = FR_l_r, FR_l_poly_lo, FR_l_Q_4 // poly_lo = - // Q_4 + r * poly_lo - nop.i 0 -} -{ .mfi - nop.m 0 - fsub.s1 FR_l_r_cor = FR_l_r_cor, FR_l_r // r_cor = r_cor - r - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_PolyL = FR_n_PolyL, f1, FR_n_TH // polyL+TH - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_TT = FR_n_TL, f1, FR_n_A1L // TL+A1L - nop.i 0 -};; - -{ .mfi - nop.m 0 - fadd.s1 FR_l_logl_YHi = FR_l_G, FR_l_r // Y_hi = Tbl + r - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_B10 = FR_l_B14, FR_l_Z4, FR_l_B10 //bernulli tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_poly_lo = FR_l_r, FR_l_poly_lo, FR_l_Q_3 // poly_lo = - // Q_3 + r * poly_lo - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_l_r_cor = FR_l_r_cor, FR_l_GS_lo // r_cor=r_cor+GS_lo - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_PolyL = FR_n_PolyL, f1, FR_n_TT // polyL+TT - nop.i 0 -};; - -{ .mfi - nop.m 0 - fsub.s1 FR_l_Y_lo_res = FR_l_G, FR_l_logl_YHi // Y_lo = Tbl - Y_hi - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_l_XYH = FR_l_logl_YHi, FR_l_AbsX_m_Half, f0 // XYH= - // YHi*|x-0.5| - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_SS = FR_l_B10, FR_l_Z8, FR_l_B2 // Bernoulli tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fadd.s1 FR_l_r_cor = FR_l_r_cor, FR_l_Y_lo // r_cor = r_cor+Y_lo - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_l_poly = FR_l_rsq, FR_l_poly_lo, FR_l_poly //poly= - // r^2*polyLo+poly - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_TT = FR_n_PolyL, FR_n_XS2, f0 // T=polyL*xs^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fadd.s1 FR_l_Y_lo = FR_l_Y_lo_res, FR_l_r // Y_lo = Y_lo + r - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_l_XYL = FR_l_logl_YHi, FR_l_AbsX_m_Half, FR_l_XYH - // XYL = YHi*|x-0.5|-XYH - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_SSCXH = FR_l_SS, FR_l_Z, FR_l_CXH // SS*Z+CXH - nop.i 0 -} -{ .mfi - mov GR_e_exp_2tom51= 0xffff-51 // 2^-51 -(p15) fma.s1 FR_l_SignedXYH = FR_l_XYH, FR_n_NegOne, f0 // XYH = -XYH - // for negatives - nop.i 0 -};; - -{ .mlx - nop.m 0 - movl GR_e_rshf_2to51 = 0x4718000000000000 // 1.10000 2^(63+51) -} -{ .mlx - nop.m 0 - movl GR_e_sig_inv_ln2 = 0xb8aa3b295c17f0bc //significand of 1/ln2 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_poly = FR_l_rsq, FR_l_poly, FR_l_r_cor // poly = - // rsq * poly + r_cor - nop.i 0 -};; - -{ .mfi - addl GR_e_ad_Arg = @ltoff(Constants_Tgammal_exp_64_Arg#),gp -(p15) fma.s1 FR_n_TT = FR_n_PolyH, FR_n_XS2L, FR_n_TT - mov GR_e_exp_mask = 0x1FFFF // Form exponent mask -} -{ .mlx - nop.m 0 - movl GR_e_rshf = 0x43e8000000000000 // 1.10000 2^63 rshift -};; - - -{ .mmi - setf.sig FR_e_INV_LN2_2TO63 = GR_e_sig_inv_ln2 // form 1/ln2 * 2^63 - setf.d FR_e_RSHF_2TO51 = GR_e_rshf_2to51 // 1.1000 * 2^(63+51) - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_l_SSCXL = FR_l_CXH, f1, FR_l_SSCXH // CXH+SS*CXH - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_e_expl_Input_AbsX = FR_l_XYH, f1, FR_l_SSCXH // HI EXP - nop.i 0 -};; - -.pred.rel "mutex",p14,p15 -{ .mfi - nop.m 0 -(p14) fma.s1 FR_e_expl_Input_X = FR_l_XYH, f1, FR_l_SSCXH // HI EXP - mov GR_e_exp_bias = 0x0FFFF // Set exponent bias -} -{ .mfi - ld8 GR_e_ad_Arg = [GR_e_ad_Arg] // Point to Arg table -(p15) fms.s1 FR_e_expl_Input_X = FR_l_SignedXYH, f1, FR_l_SSCXH // HI EXP - nop.i 0 -};; - -{ .mfi - nop.m 0 - fadd.s1 FR_l_logl_YLo = FR_l_Y_lo, FR_l_poly // YLo = YLo+poly - nop.i 0 -};; - -{ .mfi - setf.exp FR_e_2TOM51 = GR_e_exp_2tom51 //2^-51 for scaling float_N -(p15) fma.s1 FR_n_TH = FR_n_PolyH, FR_n_XS2, FR_n_TT // TH= - // polyH*xs^2+T - nop.i 0 -} -{ .mib - setf.d FR_e_RSHF = GR_e_rshf // Right shift const 1.1000*2^63 - nop.i 0 - nop.b 0 -};; - -{ .mfi - add GR_e_ad_A = 0x20, GR_e_ad_Arg // Point to A table - nop.f 0 - add GR_e_ad_T1 = 0x50, GR_e_ad_Arg // Point to T1 table -} -{ .mfi - add GR_e_ad_T2 = 0x150, GR_e_ad_Arg // Point to T2 table - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_SSCXL = FR_l_SS, FR_l_Z, FR_l_SSCXL - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_e_expl_Input_Y = FR_l_XYH, f1, FR_e_expl_Input_AbsX - nop.i 0 -};; - -{ .mfi - ldfe FR_e_L_hi = [GR_e_ad_Arg],16 // Get L_hi - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_XYL = FR_l_logl_YLo, FR_l_AbsX_m_Half, FR_l_XYL - // XYL = YLo*|x-0.5|+XYL - nop.i 0 -};; - -{ .mfi - ldfe FR_e_L_lo = [GR_e_ad_Arg],16 // Get L_lo -(p15) fms.s1 FR_n_TL = FR_n_PolyH, FR_n_XS2, FR_n_TH // TL = - // = polyH*xs^2-TH - add GR_e_ad_W1 = 0x100, GR_e_ad_T2 // Point to W1 table -} -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_Poly1H = FR_n_TH, f1, f1 // poly1H = TH+1 - add GR_e_ad_W2 = 0x300, GR_e_ad_T2 // Point to W2 table -};; - -{ .mmi - getf.exp GR_e_signexp_x = FR_e_expl_Input_X // Extract sign and exp - ldfe FR_e_A3 = [GR_e_ad_A],16 // Get A3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_SSCXL = FR_l_SSCXL, f1, FR_l_CXL - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_e_expl_Input_Y = FR_e_expl_Input_Y, f1, FR_l_SSCXH - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_e_N_signif=FR_e_expl_Input_X,FR_e_INV_LN2_2TO63,FR_e_RSHF_2TO51 - and GR_e_exp_x = GR_e_signexp_x, GR_e_exp_mask -};; - -{ .mmi - sub GR_e_exp_x = GR_e_exp_x, GR_e_exp_bias // Get exponent - ldfe FR_e_A2 = [GR_e_ad_A],16 // Get A2 for main path - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_PolyH = FR_n_Poly1H, FR_n_XS, f0//sin(Pi*x) poly - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fms.s1 FR_n_Poly1L = f1, f1, FR_n_Poly1H//sin(Pi*x) poly - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_TL = FR_n_TL, f1, FR_n_TT//sin(Pi*x) poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_l_Temp = FR_l_XYL, f1, FR_l_SSCXL // XYL+SS*CXL - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fma.s1 FR_e_expl_Input_Y = FR_e_expl_Input_Y, FR_n_NegOne, f0 - // Negate lo part of exp argument for negative input values - nop.i 0 -};; - -{ .mfi - ldfe FR_e_A1 = [GR_e_ad_A],16 // Get A1 - nop.f 0 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_e_float_N = FR_e_N_signif, FR_e_2TOM51, FR_e_RSHF - // Get float N = signd*2^51-RSHIFTER - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_Poly1L = FR_n_Poly1L, f1, FR_n_TH //sin(Pi*x) poly - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fms.s1 FR_n_PolyL = FR_n_Poly1H, FR_n_XS, FR_n_PolyH//sin(Pi*x) - nop.i 0 -};; - -{ .mfi - getf.sig GR_e_N_fix = FR_e_N_signif // Get N from significand - nop.f 0 - nop.i 0 -};; - -.pred.rel "mutex",p14,p15 -{ .mfi - nop.m 0 -(p14) fma.s1 FR_e_expl_Input_Y = FR_e_expl_Input_Y, f1, FR_l_Temp - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fms.s1 FR_e_expl_Input_Y = FR_e_expl_Input_Y, f1, FR_l_Temp - // arguments for exp computation - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_e_r = FR_e_L_hi, FR_e_float_N, FR_e_expl_Input_X - // r = -L_hi * float_N + x - extr.u GR_e_M1 = GR_e_N_fix, 6, 6 // Extract index M_1 -};; - -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_Poly1L = FR_n_Poly1L, f1, FR_n_TL //sin(Pi*x) poly - nop.i 0 -};; - - -{ .mmf - nop.m 0 - nop.m 0 - fma.s1 FR_e_r = FR_e_r, f1, FR_e_expl_Input_Y - // r = r + FR_e_expl_Input_Y -};; - -{ .mmi - shladd GR_e_ad_W1 = GR_e_M1,3,GR_e_ad_W1 // Point to W1 - shladd GR_e_ad_T1 = GR_e_M1,2,GR_e_ad_T1 // Point to T1 - extr.u GR_e_M2 = GR_e_N_fix, 0, 6 // Extract index M_2 -};; - - -{ .mfi - ldfs FR_e_T1 = [GR_e_ad_T1],0 // Get T1 - nop.f 0 - extr GR_e_K = GR_e_N_fix, 12, 32 //Extract limit range K -} -{ .mfi - shladd GR_e_ad_T2 = GR_e_M2,2,GR_e_ad_T2 // Point to T2 -(p15) fma.s1 FR_n_PolyL = FR_n_Poly1L, FR_n_XS, FR_n_PolyL - //sin(Pi*x) poly - shladd GR_e_ad_W2 = GR_e_M2,3,GR_e_ad_W2 // Point to W2 -};; - -{ .mfi - ldfs FR_e_T2 = [GR_e_ad_T2],0 // Get T2 - nop.f 0 - add GR_e_exp_2_k = GR_e_exp_bias, GR_e_K // exp of 2^k -} -{ .mfi - ldfd FR_e_W1 = [GR_e_ad_W1],0 // Get W1 - nop.f 0 - sub GR_e_exp_2_mk = GR_e_exp_bias, GR_e_K // exp of 2^-k -};; - -{ .mmi - ldfd FR_e_W2 = [GR_e_ad_W2],0 // Get W2 - nop.m 0 - nop.i 0 -};; - -{ .mmf - setf.exp FR_e_scale = GR_e_exp_2_k // Set scale = 2^k - setf.exp FR_e_2_mk = GR_e_exp_2_mk // Form 2^-k - fnma.s1 FR_e_r = FR_e_L_lo, FR_e_float_N, FR_e_r - // r = -L_lo * float_N + r -};; - -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_PolyL = FR_n_Tail, FR_n_XS7, FR_n_PolyL - //sin(Pi*x) poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_e_poly = FR_e_r, FR_e_A3, FR_e_A2 // poly=r*A3+A2 - nop.i 0 -} -{ .mfi - nop.m 0 - fmpy.s1 FR_e_rsq = FR_e_r, FR_e_r // rsq = r * r - nop.i 0 -};; - -{ .mfi - nop.m 0 - fmpy.s1 FR_e_T = FR_e_T1, FR_e_T2 // T = T1 * T2 - nop.i 0 -} -{ .mfi - nop.m 0 - fadd.s1 FR_e_W1_p1 = FR_e_W1, f1 // W1_p1 = W1 + 1.0 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_TT = FR_n_PolyL, FR_l_AbsX, f0 //sin(Pi*x) poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_e_poly = FR_e_r, FR_e_poly, FR_e_A1 - // poly = r * poly + A1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_e_T_scale = FR_e_T, FR_e_scale, f0 // T_scale=T*scale - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_e_W = FR_e_W2, FR_e_W1_p1, FR_e_W1 - // W = W2 * (W1+1.0) + W1 - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_SinxH = FR_n_PolyH, FR_l_AbsX, FR_n_TT - // sin(Pi*x) poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - mov FR_e_Y_hi = FR_e_T // Assume Y_hi = T - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_e_poly = FR_e_rsq, FR_e_poly, FR_e_r - // poly = rsq * poly + r - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_e_Wp1_T_scale = FR_e_W, FR_e_T_scale, FR_e_T_scale - // (W+1)*T*scale - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_e_W_T_scale = FR_e_W, FR_e_T_scale, f0 // W*T*scale - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) fms.s1 FR_n_SinxL = FR_n_PolyH, FR_l_AbsX, FR_n_SinxH - // Low part of sin - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) frcpa.s1 FR_n_Y0, p0 = f1, FR_n_SinxH // y = frcpa(b) - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_e_result_lo = FR_e_Wp1_T_scale, FR_e_poly, FR_e_W_T_scale - // Low part of exp result - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_SinxL = FR_n_SinxL, f1, FR_n_TT // sin low result - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p15) fma.s1 FR_n_Q0 = f1,FR_n_Y0,f0 // q = y - nop.i 0 -} -{ .mfi - nop.m 0 -(p15) fnma.s1 FR_n_E0 = FR_n_Y0, FR_n_SinxH, f1 // e = 1-b*y - nop.i 0 -};; - - -{ .mfb - nop.m 0 -(p14) fma.s0 f8 = FR_e_Y_hi, FR_e_scale, FR_e_result_lo -(p14) br.ret.spnt b0 // Exit for positive Stirling path ////////////////////// -};; - -{ .mfi - nop.m 0 - fma.s1 FR_e_expl_Output_X = FR_e_Y_hi, FR_e_scale, f0 // exp result - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_e_expl_Output_Y = FR_e_result_lo, f1, f0// exp lo result - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_n_E2 = FR_n_E0,FR_n_E0,FR_n_E0 // e2 = e+e^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_n_E1 = FR_n_E0,FR_n_E0,f0 // e1 = e^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_n_Y1 = FR_n_Y0,FR_n_E2,FR_n_Y0 // y1 = y+y*e2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_n_E3 = FR_n_E1,FR_n_E1,FR_n_E0 // e3 = e+e1^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_n_Y2 = FR_n_Y1,FR_n_E3,FR_n_Y0 // y2 = y+y1*e3 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_n_R0 = FR_n_SinxH,FR_n_Q0,f1 // r = a-b*q - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_n_E4 = FR_n_SinxH,FR_n_Y2,f1 // e4 = 1-b*y2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_n_RcpResH = FR_n_R0,FR_n_Y2,FR_n_Q0 // x = q+r*y2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_n_Y3 = FR_n_Y2,FR_n_E4,FR_n_Y2 // y3 = y2+y2*e4 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_n_R1 = FR_n_SinxH,FR_n_RcpResH,f1 // r1 = a-b*x - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_n_R1 = FR_n_SinxL,FR_n_RcpResH,FR_n_R1 - // r1 = r1 - b_lo*X - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_n_RcpResL = FR_n_R1,FR_n_Y3,f0 // x_lo = r1*y3 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_n_Temp = FR_n_RcpResH, FR_e_expl_Output_Y, f0 - // Multiplying exp and sin result - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_n_Temp = FR_n_RcpResL, FR_e_expl_Output_X, FR_n_Temp - // Multiplying exp and sin result - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_n_ResH = FR_n_RcpResH, FR_e_expl_Output_X, FR_n_Temp - // Multiplying exp and sin result - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_n_ResL = FR_n_RcpResH, FR_e_expl_Output_X, FR_n_ResH - // Multiplying exp and sin result - nop.i 0 -} -{ .mfi - nop.m 0 -(p12) fma.s1 FR_n_ResH = FR_n_ResH, FR_n_NegOne, f0 // Negate - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_n_ResL = FR_n_ResL, f1, FR_n_Temp - // Multiplying exp and sin result - low result obtained - nop.i 0 -};; - -.pred.rel "mutex",p12,p13 -{ .mfi - nop.m 0 -(p13) fma.s0 f8 = FR_n_ResH, f1, FR_n_ResL // For odd - nop.i 0 -} -{ .mfb - nop.m 0 -(p12) fms.s0 f8 = FR_n_ResH, f1, FR_n_ResL // For even - br.ret.sptk b0 // Exit for negative Stirling path ////////////////////// -};; - - -//////////// 1 <= |X| < 13 path //////////////////////////////////////////////// -//------------------------------------------------------------------------------ -.align 64 -tgamma_lt_13: -{ .mfi - getf.sig GR_p_XN = FR_p_IXN // Get significand - fcvt.xf FR_p_XN = FR_p_IXN // xn = [x] - add GR_r_sin_Table2= 0x40, GR_r_sin_Table // Shifted table addr. -} -{ .mfi - ldfpd FR_p_0p5, FR_p_1p5 = [GR_c_Table], 16 // 0.5 & 1.5 - fms.s1 FR_p_AbsXM1 = FR_p_AbsX, f1, f1 // X-1 - add GR_p_Table2 = 0xB0, GR_p_Table -};; - -{ .mfi - add GR_r_sin_Table = -16, GR_r_sin_Table // For compensation - fcvt.xf FR_r_XNS = FR_r_IXNS // Convert int repr to float - shr.u GR_p_X_Sgnd = GR_p_X_Sgnd, 59 // Get only 5 bit of signd -};; - -{ .mfi - ldfpd FR_r_A2H,FR_r_A2L = [GR_r_sin_Table], 16 // Load A2 - nop.f 0 - add GR_p_Int = -2, GR_p_XN // int = int - 2 -} -{ .mfi - ldfe FR_r_A6 = [GR_r_sin_Table2], 16 - nop.f 0 - cmp.gtu p11, p12 = 0x2, GR_p_XN // p11: x < 2 (splitted intervals), - // p12: x > 2 (base intervals) -};; - -{ .mfi - ldfpd FR_r_A1H, FR_r_A1L = [GR_r_sin_Table], 16 - nop.f 0 - shr GR_p_Int = GR_p_Int, 1 // int/2 -} -{ .mfi - ldfe FR_r_A5 = [GR_r_sin_Table2], 16 - nop.f 0 -(p11) cmp.gtu.unc p10, p11 = 0x1C, GR_p_X_Sgnd // sgnd(x) < 0.75 -};; - -{ .mfi - ldfe FR_r_A9 = [GR_r_sin_Table], 16 - nop.f 0 - shl GR_p_Offset = GR_p_Int, 4 // offset = int*16 -} -{ .mfi - ldfe FR_r_A4 = [GR_r_sin_Table2], 16 - nop.f 0 -(p10) cmp.gtu.unc p9, p10 = 0x14, GR_p_X_Sgnd // sgnd(x) < 0.25 -};; - - -{ .mfi - ldfe FR_r_A8 = [GR_r_sin_Table], 16 - nop.f 0 -(p12) tbit.nz.unc p13, p12 = GR_p_XN, 0x0 // p13: reccurent computations - // X is at [3;4], [5;6], [7;8]... interval -} -{ .mfi - ldfe FR_r_A3 = [GR_r_sin_Table2], 16 - nop.f 0 - shladd GR_p_Offset = GR_p_Int, 2, GR_p_Offset // +int*4 -};; - -.pred.rel "mutex",p9,p11 -{ .mfi - add GR_p_Offset = GR_p_Int, GR_p_Offset - // +int, so offset = int*21 -(p9) fms.s1 FR_p_XR = FR_p_AbsX, f1, f1 // r = x-1 - nop.i 0 -} -{ .mfi - ldfe FR_r_A7 = [GR_r_sin_Table], 16 -(p11) fms.s1 FR_p_XR = FR_p_2, f1, FR_p_AbsX - // r = 2-x for 1.75 < x < 2 - nop.i 0 -};; - -.pred.rel "mutex",p9,p10 -.pred.rel "mutex",p10,p11 -.pred.rel "mutex",p9,p11 -{ .mfi -(p9) add GR_p_Offset = 126, r0 // 1.0 < x < 1.25 table -(p15) fcmp.eq.unc.s1 p7,p0 = FR_p_AbsX, FR_p_XN - // If arg is integer and negative - singularity branch - nop.i 0 -} -{ .mfi -(p10) add GR_p_Offset = 147, r0 // 1.25 < x < 1.75 table - nop.f 0 -(p11) add GR_p_Offset = 168, r0 // 1.75 < x < 2.0 table -};; - -{ .mmf - shladd GR_p_Table = GR_p_Offset, 4, GR_p_Table - shladd GR_p_Table2 = GR_p_Offset, 4, GR_p_Table2 - fma.s1 FR_r_XS = FR_r_AbsX , f1, FR_r_XNS // xs = x - [x] -};; - -{ .mmb - ldfpd FR_p_A5H, FR_p_A5L = [GR_p_Table], 16 - ldfpd FR_p_A2H, FR_p_A2L = [GR_p_Table2], 16 -(p7) br.cond.spnt tgammal_singularity // Singularity for integer ///////////// - // and negative argument /////////////// -};; - -{ .mfi - ldfpd FR_p_A4H, FR_p_A4L = [GR_p_Table], 16 - fma.s1 FR_p_XN = FR_p_XN, f1, FR_p_0p5 // xn = xn+0.5 - nop.i 0 -} -{ .mfi - ldfpd FR_p_A1H, FR_p_A1L = [GR_p_Table2], 16 -(p10) fms.s1 FR_p_XR = FR_p_AbsX, f1, FR_p_1p5 // r = x - 1.5 - nop.i 0 -};; - -{ .mmi - ldfpd FR_p_A3H, FR_p_A3L = [GR_p_Table], 16 - ldfpd FR_p_A0H, FR_p_A0L = [GR_p_Table2], 16 - nop.i 0 -};; - -{ .mmi - ldfe FR_p_A20 = [GR_p_Table], 16 - ldfe FR_p_A12 = [GR_p_Table2], 16 - nop.i 0 -};; - -{ .mmf - ldfe FR_p_A19 = [GR_p_Table], 16 - ldfe FR_p_A11 = [GR_p_Table2], 16 - fma.s1 FR_r_XS2 = FR_r_XS, FR_r_XS, f0 // xs2 = xs*xs -};; - -{ .mmi - ldfe FR_p_A18 = [GR_p_Table], 16 - ldfe FR_p_A10 = [GR_p_Table2], 16 - nop.i 0 -};; - -.pred.rel "mutex",p12,p13 -{ .mfi - ldfe FR_p_A17 = [GR_p_Table], 16 -(p12) fms.s1 FR_p_XR = FR_p_AbsX, f1, FR_p_XN // r = x - xn - nop.i 0 -} -{ .mfi - ldfe FR_p_A9 = [GR_p_Table2], 16 -(p13) fms.s1 FR_p_XR = FR_p_AbsX, f1, FR_p_XN - nop.i 0 -};; - -{ .mmi - ldfe FR_p_A16 = [GR_p_Table], 16 - ldfe FR_p_A8 = [GR_p_Table2], 16 -(p9) cmp.eq p12, p0 = r0, r0 // clear p12 -};; - -{ .mmi - ldfe FR_p_A15 = [GR_p_Table], 16 - ldfe FR_p_A7 = [GR_p_Table2], 16 -(p10) cmp.eq p12, p0 = r0, r0 // clear p12 -};; - -{ .mfi - ldfe FR_p_A14 = [GR_p_Table], 16 - fma.s1 FR_r_TH = FR_r_A2H, FR_r_XS2, f0 // sin for neg -(p11) cmp.eq p12, p0 = r0, r0 // clear p12 -} -{ .mfi - ldfe FR_p_A6 = [GR_p_Table2], 16 - fma.s1 FR_r_TL = FR_r_A2L, FR_r_XS2, f0 // sin for neg - nop.i 0 -};; - -{ .mfi - ldfe FR_p_A13 = [GR_p_Table], 16 - fms.s1 FR_r_XS2L = FR_r_XS, FR_r_XS, FR_r_XS2 // x2Lo part - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp5H = FR_p_A5H, FR_p_XR, f0 // A5H*r - // 'Low poly' - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_XR2 = FR_p_XR, FR_p_XR, f0 // r^2 = r*r - nop.i 0 -};; - -{ .mfi - nop.m 0 - fabs FR_r_XS = FR_r_XS // abs(xs) - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp2H = FR_p_A2H, FR_p_XR, f0 // A2H*r - // 'High poly' - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r_TT = FR_r_A2H, FR_r_XS2, FR_r_TH // sin for neg - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_ResH = FR_r_TH, f1, FR_r_A1H // sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_TL = FR_r_A2H, FR_r_XS2L, FR_r_TL // sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Temp5L = FR_p_A5H,FR_p_XR,FR_p_Temp5H //A5H*r delta - // 'Low poly' - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly5H = FR_p_Temp5H, f1, FR_p_A4H // A5H*r+A4H - // 'Low poly' - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Temp2L = FR_p_A2H, FR_p_XR, FR_p_Temp2H//A2H*r delta - //'High poly' - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly2H = FR_p_Temp2H, f1, FR_p_A1H // A2H*r+A1H - //'High poly' - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_XR3 = FR_p_XR2, FR_p_XR, f0 // r^3 = r^2*r - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_p_XR2L = FR_p_XR, FR_p_XR, FR_p_XR2 // r^2 delta - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_A18 = FR_p_A19, FR_p_XR, FR_p_A18 // Poly tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A14 = FR_p_A15, FR_p_XR, FR_p_A14 // Poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_XR4 = FR_p_XR2, FR_p_XR2, f0 // r^4 = r^2*r^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp5L = FR_p_A5L, FR_p_XR, FR_p_Temp5L// Low part - // of A5*r+A4 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_p_Poly5L = FR_p_A4H, f1, FR_p_Poly5H // Low part - // of A5*r+A4 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp4H = FR_p_Poly5H, FR_p_XR, f0 // (A5H*r+A4H)*r - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp2L = FR_p_A2L, FR_p_XR, FR_p_Temp2L // A2*r low - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Poly2L = FR_p_A1H, f1, FR_p_Poly2H // High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp1H = FR_p_Poly2H, FR_p_XR, f0 // High poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_XR3L = FR_p_XR2, FR_p_XR, FR_p_XR3 // x^3 delta - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A16 = FR_p_A17, FR_p_XR, FR_p_A16 // Poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r_ResL = FR_r_A1H, f1, FR_r_ResH // sin for neg - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_TL = FR_r_TL, f1, FR_r_TT // sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp5L = FR_p_Temp5L, f1, FR_p_A4L // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly5L = FR_p_Poly5L, f1, FR_p_Temp5H // Low poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Temp4L = FR_p_Poly5H,FR_p_XR,FR_p_Temp4H //Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly4H = FR_p_Temp4H, f1, FR_p_A3H // Low poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp2L = FR_p_Temp2L, f1, FR_p_A1L // High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly2L = FR_p_Poly2L, f1, FR_p_Temp2H // High poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Temp1L = FR_p_Poly2H,FR_p_XR,FR_p_Temp1H //High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly1H = FR_p_Temp1H, f1, FR_p_A0H // High poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_A12 = FR_p_A13, FR_p_XR, FR_p_A12 // Poly tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_XR3L = FR_p_XR2L, FR_p_XR, FR_p_XR3L // x^3 low - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly5L = FR_p_Poly5L, f1, FR_p_Temp5L // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A10 = FR_p_A11, FR_p_XR, FR_p_A10 // Poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Poly4L = FR_p_A3H, f1, FR_p_Poly4H // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A6 = FR_p_A7, FR_p_XR, FR_p_A6 // Poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_A8 = FR_p_A9, FR_p_XR, FR_p_A8 // Poly tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_XR6 = FR_p_XR4, FR_p_XR2, f0 // Poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly2L = FR_p_Poly2L, f1, FR_p_Temp2L // High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_p_Poly1L = FR_p_A0H, f1, FR_p_Poly1H // High poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_ResL = FR_r_ResL, f1, FR_r_TH // sin for neg - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_TT = FR_r_TL, f1, FR_r_A1L // sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp4L = FR_p_Poly5L,FR_p_XR,FR_p_Temp4L // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A18 = FR_p_A20, FR_p_XR2, FR_p_A18 // Poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly4L = FR_p_Poly4L, f1, FR_p_Temp4H // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A14 = FR_p_A16, FR_p_XR2, FR_p_A14 // Poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_A6 = FR_p_A8, FR_p_XR2, FR_p_A6 // Poly tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A10 = FR_p_A12, FR_p_XR2, FR_p_A10 // Poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp1L = FR_p_Poly2L,FR_p_XR,FR_p_Temp1L //High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly1L = FR_p_Poly1L, f1, FR_p_Temp1H // High poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_ResL = FR_r_ResL, f1, FR_r_TT // sin for neg - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_TH = FR_r_ResH, FR_r_XS2, f0 // sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp4L = FR_p_Temp4L, f1, FR_p_A3L // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly3H = FR_p_Poly4H, FR_p_XR3, f0 // Low poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_A14 = FR_p_A18, FR_p_XR4, FR_p_A14 // Poly tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_XR8 = FR_p_XR4, FR_p_XR4, f0 // Poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_TL = FR_r_ResH, FR_r_XS2L, f0 // sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp1L = FR_p_Temp1L, f1, FR_p_A0L // High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A6 = FR_p_A10, FR_p_XR4, FR_p_A6 // Poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r_TT = FR_r_ResH, FR_r_XS2, FR_r_TH // sin for neg - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_Res3H = FR_r_TH, f1, f1 // sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly4L = FR_p_Poly4L, f1, FR_p_Temp4L // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly3L = FR_p_Poly4H, FR_p_XR3L, f0 // Low poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly0H = FR_p_Poly3H,f1,FR_p_Poly1H //Low & High add - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_A7 = FR_r_A8, FR_r_XS2, FR_r_A7 // sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_TL = FR_r_ResL, FR_r_XS2, FR_r_TL // sin for neg - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_XS4 = FR_r_XS2, FR_r_XS2, f0 // sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly1L = FR_p_Poly1L, f1, FR_p_Temp1L // High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_PolyTail = FR_p_A14, FR_p_XR8, FR_p_A6 // Poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r_Res3L = f1, f1, FR_r_Res3H // sin for neg - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_ResH = FR_r_Res3H, FR_r_XS, f0 // sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Temp0L = FR_p_Poly4H,FR_p_XR3,FR_p_Poly3H //Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly3L = FR_p_Poly4L,FR_p_XR3,FR_p_Poly3L //Low poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Poly0L = FR_p_Poly1H,f1,FR_p_Poly0H //Low & High add - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fma.s1 FR_p_OddPoly0H = FR_p_Poly0H, FR_p_AbsXM1, f0 - // Reccurent computations - multiplying by X-1 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_TL = FR_r_TL, f1, FR_r_TT // sin for neg - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_A3 = FR_r_A4, FR_r_XS2, FR_r_A3 // sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly1L = FR_p_PolyTail,FR_p_XR6,FR_p_Poly1L//High - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_A5 = FR_r_A6, FR_r_XS2, FR_r_A5 // sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Res3L = FR_r_Res3L, f1, FR_r_TH // sin for neg - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_r_ResL = FR_r_Res3H, FR_r_XS, FR_r_ResH//sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly3L = FR_p_Poly3L, f1, FR_p_Temp0L // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_A7 = FR_r_A9, FR_r_XS4, FR_r_A7 // sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly0L = FR_p_Poly0L,f1,FR_p_Poly3H //Low & High add - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fms.s1 FR_p_OddPoly0L = FR_p_Poly0H, FR_p_AbsXM1, FR_p_OddPoly0H - // Reccurent computations - multiplying by X-1 (low part) - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_A3 = FR_r_A5, FR_r_XS4, FR_r_A3 // sin for neg - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_XS7 = FR_r_XS4, FR_r_XS2, f0 // xs^6 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Res3L = FR_r_Res3L, f1, FR_r_TL // sin for neg - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_XS8 = FR_r_XS4, FR_r_XS4, f0 // sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp0H = FR_p_Poly3L,f1,FR_p_Poly1L //Low & High add - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_XS7 = FR_r_XS7, FR_r_XS, f0 // xs^7 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_ResL = FR_r_Res3L, FR_r_XS, FR_r_ResL//sin for neg - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_Tail = FR_r_A7, FR_r_XS8, FR_r_A3 // sin tail res - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly0L = FR_p_Poly0L,f1,FR_p_Temp0H //Low & High add - nop.i 0 -};; - - -{ .mfi - nop.m 0 - fma.s1 FR_r_ResL = FR_r_Tail,FR_r_XS7,FR_r_ResL //sin for neg - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p13) fma.s1 FR_p_OddPoly0L = FR_p_Poly0L, FR_p_AbsXM1, FR_p_OddPoly0L - // Reccurent computations - multiplying by X-1 (low part) - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_TT = FR_r_ResL, FR_r_AbsX, f0 // X*sin - nop.i 0 -};; - -.pred.rel "mutex",p12,p13 -{ .mfi - nop.m 0 -(p12) fma.s0 f8 = FR_p_Poly0H, f1, FR_p_Poly0L // Even - nop.i 0 -} -{ .mfb - nop.m 0 -(p13) fma.s0 f8 = FR_p_OddPoly0H, f1, FR_p_OddPoly0L // Odd -(p14) br.ret.spnt b0 // Exit for 1 <= |X| < 13 path (positive arguments)///// -};; - -{ .mfi - nop.m 0 -(p13) fma.s1 FR_p_Poly0H = FR_p_OddPoly0H, f1, f0 - // Reccurent computations - nop.i 0 -} -{ .mfi - nop.m 0 -(p13) fma.s1 FR_p_Poly0L = FR_p_OddPoly0L, f1, f0 - // Reccurent computations - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Res1H = FR_r_ResH, FR_r_AbsX, FR_r_TT // X*sin -(p11) cmp.eq p13, p12 = r0, r0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r_Res1L = FR_r_ResH,FR_r_AbsX,FR_r_Res1H// X*sin -(p9) cmp.eq p13, p12 = r0, r0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Res1L = FR_r_Res1L, f1, FR_r_TT // sin for neg -(p10) cmp.eq p13, p12 = r0, r0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_TL = FR_p_Poly0L, FR_r_Res1H, f0 // mult by sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_TL = FR_p_Poly0H,FR_r_Res1L,FR_r_TL//mult by sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_ResH = FR_p_Poly0H,FR_r_Res1H,FR_r_TL//mult by sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r_ResL = FR_p_Poly0H,FR_r_Res1H,FR_r_ResH//sin mult - nop.i 0 -};; - -{ .mfi - nop.m 0 - frcpa.s1 FR_r_Y0,p0 = f1,FR_r_ResH // y = frcpa(b) - nop.i 0 -};; - -{ .mfi - nop.m 0 - fneg FR_r_NegOne = f1 // Form -1.0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_ResL = FR_r_ResL, f1, FR_r_TL //Low result of mult - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Q0 = f1,FR_r_Y0,f0 // q = a*y - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_r_E0 = FR_r_Y0,FR_r_ResH,f1 // e = 1-b*y - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_E2 = FR_r_E0,FR_r_E0,FR_r_E0 // e2 = e+e^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_E1 = FR_r_E0,FR_r_E0,f0 // e1 = e^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Y1 = FR_r_Y0,FR_r_E2,FR_r_Y0 // y1 = y+y*e2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_E3 = FR_r_E1,FR_r_E1,FR_r_E0 // e3 = e+e1^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Y2 = FR_r_Y1,FR_r_E3,FR_r_Y0 // y2 = y+y1*e3 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_r_R0 = FR_r_ResH,FR_r_Q0,f1 // r = a-b*q - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_r_E4 = FR_r_ResH,FR_r_Y2,f1 // e4 = 1-b*y2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_ZH = FR_r_R0,FR_r_Y2,FR_r_Q0 // x = q+r*y2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Y3 = FR_r_Y2,FR_r_E4,FR_r_Y2 // y3 = y2+y2*e4 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_r_R1 = FR_r_ResH,FR_r_ZH,f1 // r1 = a-b*x - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_r_R1 = FR_r_ResL,FR_r_ZH,FR_r_R1 // r1=r1-b_lo*X - nop.i 0 -} -{ .mfi - nop.m 0 -(p12) fma.s1 FR_r_ZHN = FR_r_ZH,FR_r_NegOne, f0 // Negate for evens - nop.i 0 -};; - -.pred.rel "mutex",p13,p12 -{ .mfi - nop.m 0 -(p13) fma.s0 f8 = FR_r_R1,FR_r_Y3,FR_r_ZH // Final result - nop.i 0 -} -{ .mfb - nop.m 0 -(p12) fnma.s0 f8 = FR_r_R1,FR_r_Y3,FR_r_ZHN // Final result - br.ret.sptk b0 // Exit for 1 <= |X| < 13 path (negative arguments)////// -};; - - -//////////// |X| < 1 path ///////////////////////////////////////////////////// -//------------------------------------------------------------------------------ -.align 64 -tgamma_lt_1: -{ .mfi - getf.exp GR_p_Exp = FR_p_AbsX // exp of abs X - fma.s1 FR_z_Q0 = f1,FR_z_Y0,f0 // q = a*y - add GR_r_sin_Table2= 0x50, GR_r_sin_Table -} -{ .mfi - ldfpd FR_p_0p5, FR_p_1p5 = [GR_c_Table], 16 - fnma.s1 FR_z_E0 = FR_z_Y0,f8,f1 // e = 1-b*y - add GR_p_Table2 = 0xB0, GR_p_Table -};; - -{ .mfi - ldfd FR_p_0p25 = [GR_c_Table] - fcvt.xf FR_r_XNS = FR_r_IXNS // Convert int repr to float - shr.u GR_p_X_Sgnd = GR_p_X_Sgnd, 60 - // Obtain only 4 bits of significand -} -{ .mfi - nop.m 0 - nop.f 0 - add GR_p_Bias = 0xffff, r0 // Set bias -};; - -{ .mfi - ldfpd FR_r_A2H, FR_r_A2L = [GR_r_sin_Table], 16 - nop.f 0 - shl GR_p_XN = GR_p_Exp, 4 - // Shift exp to 4 bits left to set place for significand -} -{ .mlx - ldfe FR_r_A6 = [GR_r_sin_Table2], 16 - movl GR_p_0p75 = 0xfffec // 0.75 -};; - -{ .mfi - ldfpd FR_r_A1H, FR_r_A1L = [GR_r_sin_Table], 16 - nop.f 0 - or GR_p_XN = GR_p_XN, GR_p_X_Sgnd - // Combine exp with 4 high bits of significand -} -{ .mfi - ldfe FR_r_A5 = [GR_r_sin_Table2], 16 - nop.f 0 - sub GR_p_Exp = GR_p_Exp, GR_p_Bias // Unbiased exp -};; - -{ .mmi - ldfe FR_r_A9 = [GR_r_sin_Table], 16 - ldfe FR_r_A4 = [GR_r_sin_Table2], 16 - cmp.gtu.unc p10, p11 = GR_p_0p75, GR_p_XN // sgnd(x) < 0.75 -};; - -{ .mfi - ldfe FR_r_A8 = [GR_r_sin_Table], 16 - fma.s1 FR_z_E2 = FR_z_E0,FR_z_E0,FR_z_E0 // e2 = e+e^2 -(p10) cmp.gt.unc p9, p10 = -2, GR_p_Exp // x < 0.25 -} -{ .mfi - ldfe FR_r_A3 = [GR_r_sin_Table2], 16 - fma.s1 FR_z_E1 = FR_z_E0,FR_z_E0,f0 // e1 = e^2 -(p11) add GR_p_Offset = 168, r0 // [0.75;1] interval -};; - -{ .mmi -(p10) add GR_p_Offset = 147, r0 // [0.25;0.75] interval - ldfe FR_r_A7 = [GR_r_sin_Table], 16 -(p9) cmp.gt.unc p8, p9 = -3, GR_p_Exp // x < 0.125 -};; - -.pred.rel "mutex",p9,p8 -{ .mmi -(p9) add GR_p_Offset = 126, r0 // [0.125;0.25] interval -(p8) add GR_p_Offset = 189, r0 // [0.;0.125] interval - nop.i 0 -};; - -{ .mmf - shladd GR_p_Table = GR_p_Offset, 4, GR_p_Table //Make addresses - shladd GR_p_Table2 = GR_p_Offset, 4, GR_p_Table2 - fma.s1 FR_r_XS = FR_r_AbsX , f1, FR_r_XNS // xs = |x|-[x] -};; - -.pred.rel "mutex",p8,p11 -{ .mfi - ldfpd FR_p_A5H, FR_p_A5L = [GR_p_Table], 16 -(p11) fms.s1 FR_p_XR = f1, f1, FR_p_AbsX // r = 1 - |x| - // for [0.75;1] interval - nop.i 0 -} -{ .mfi - ldfpd FR_p_A2H, FR_p_A2L = [GR_p_Table2], 16 -(p8) fms.s1 FR_p_XR = FR_p_AbsX, f1, f0 // r = |x| - // for [0.;0.125] interval - nop.i 0 -};; - -{ .mfi - ldfpd FR_p_A4H, FR_p_A4L = [GR_p_Table], 16 - fma.s1 FR_z_Y1 = FR_z_Y0,FR_z_E2,FR_z_Y0 // y1 = y+y*e2 - nop.i 0 -} -{ .mfi - ldfpd FR_p_A1H, FR_p_A1L = [GR_p_Table2], 16 - fma.s1 FR_z_E3 = FR_z_E1,FR_z_E1,FR_z_E0 // e3 = e+e1^2 - nop.i 0 -};; - -.pred.rel "mutex",p9,p10 -{ .mfi - ldfpd FR_p_A3H, FR_p_A3L = [GR_p_Table], 16 -(p9) fms.s1 FR_p_XR = FR_p_AbsX, f1, f0 // r = |x| - // for [0.125;0.25] interval - nop.i 0 -} -{ .mfi - ldfpd FR_p_A0H, FR_p_A0L = [GR_p_Table2], 16 -(p10) fms.s1 FR_p_XR = FR_p_AbsX, f1, FR_p_0p5 // r = |x| - 0.5 - // for [0.25;0.75] interval - nop.i 0 -};; - -{ .mmi - ldfe FR_p_A20 = [GR_p_Table], 16 - ldfe FR_p_A12 = [GR_p_Table2], 16 - nop.i 0 -};; - -{ .mfi - ldfe FR_p_A19 = [GR_p_Table], 16 - fma.s1 FR_r_XS2 = FR_r_XS, FR_r_XS, f0 // xs^2 - nop.i 0 -} -{ .mfi - ldfe FR_p_A11 = [GR_p_Table2], 16 - nop.f 0 - nop.i 0 -};; - -{ .mmi - ldfe FR_p_A18 = [GR_p_Table], 16 - ldfe FR_p_A10 = [GR_p_Table2], 16 - nop.i 0 -};; - -.pred.rel "mutex",p12,p13 -{ .mfi - ldfe FR_p_A17 = [GR_p_Table], 16 - fma.s1 FR_z_Y2 = FR_z_Y1,FR_z_E3,FR_z_Y0 // y2 = y+y1*e3 - nop.i 0 -} -{ .mfi - ldfe FR_p_A9 = [GR_p_Table2], 16 - fnma.s1 FR_z_R0 = f8,FR_z_Q0,f1 // r = a-b*q - nop.i 0 -};; - -{ .mmi - ldfe FR_p_A16 = [GR_p_Table], 16 - ldfe FR_p_A8 = [GR_p_Table2], 16 - nop.i 0 -};; - -{ .mmi - ldfe FR_p_A15 = [GR_p_Table], 16 - ldfe FR_p_A7 = [GR_p_Table2], 16 - nop.i 0 -};; - -{ .mfi - ldfe FR_p_A14 = [GR_p_Table], 16 - fma.s1 FR_r_TH = FR_r_A2H, FR_r_XS2, f0 // neg sin - nop.i 0 -} -{ .mfi - ldfe FR_p_A6 = [GR_p_Table2], 16 - fma.s1 FR_r_TL = FR_r_A2L, FR_r_XS2, f0 // neg sin - nop.i 0 -};; - -{ .mfi - ldfe FR_p_A13 = [GR_p_Table], 16 - fms.s1 FR_r_XS2L = FR_r_XS, FR_r_XS, FR_r_XS2 // xs^2 delta - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp5H = FR_p_A5H, FR_p_XR, f0 // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_XR2 = FR_p_XR, FR_p_XR, f0 // poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fabs FR_r_XS = FR_r_XS // Absolute value of xs - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp2H = FR_p_A2H, FR_p_XR, f0 // High poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_z_E4 = f8,FR_z_Y2,f1 // e4 = 1-b*y2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_z_ZH = FR_z_R0,FR_z_Y2,FR_z_Q0 // 1/x = q+r*y2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r_TT = FR_r_A2H, FR_r_XS2, FR_r_TH // neg sin - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_ResH = FR_r_TH, f1, FR_r_A1H // neg sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_TL = FR_r_A2H, FR_r_XS2L, FR_r_TL // neg sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Temp5L = FR_p_A5H, FR_p_XR, FR_p_Temp5H // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly5H = FR_p_Temp5H, f1, FR_p_A4H // Low poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Temp2L = FR_p_A2H, FR_p_XR, FR_p_Temp2H // High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly2H = FR_p_Temp2H, f1, FR_p_A1H // High poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_XR3 = FR_p_XR2, FR_p_XR, f0 // r^3 - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_p_XR2L = FR_p_XR, FR_p_XR, FR_p_XR2 // r^2 delta - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_A18 = FR_p_A19, FR_p_XR, FR_p_A18 // poly tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A14 = FR_p_A15, FR_p_XR, FR_p_A14 // poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_XR4 = FR_p_XR2, FR_p_XR2, f0 // poly tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_z_Y3 = FR_z_Y2,FR_z_E4,FR_z_Y2 // y3 = y2+y2*e4 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp5L = FR_p_A5L, FR_p_XR, FR_p_Temp5L // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_p_Poly5L = FR_p_A4H, f1, FR_p_Poly5H // Low poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp4H = FR_p_Poly5H, FR_p_XR, f0 // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp2L = FR_p_A2L, FR_p_XR, FR_p_Temp2L // High poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Poly2L = FR_p_A1H, f1, FR_p_Poly2H // High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp1H = FR_p_Poly2H, FR_p_XR, f0 // High poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_XR3L = FR_p_XR2, FR_p_XR, FR_p_XR3 // x^3 delta - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A16 = FR_p_A17, FR_p_XR, FR_p_A16 //poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r_ResL = FR_r_A1H, f1, FR_r_ResH // neg sin - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_TL = FR_r_TL, f1, FR_r_TT // neg sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp5L = FR_p_Temp5L, f1, FR_p_A4L // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly5L = FR_p_Poly5L, f1, FR_p_Temp5H //Low poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Temp4L = FR_p_Poly5H, FR_p_XR, FR_p_Temp4H//Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly4H = FR_p_Temp4H, f1, FR_p_A3H // Low poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp2L = FR_p_Temp2L, f1, FR_p_A1L // High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly2L = FR_p_Poly2L, f1, FR_p_Temp2H // High poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Temp1L = FR_p_Poly2H,FR_p_XR,FR_p_Temp1H //High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly1H = FR_p_Temp1H, f1, FR_p_A0H // High poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_A12 = FR_p_A13, FR_p_XR, FR_p_A12 // poly tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_XR3L = FR_p_XR2L, FR_p_XR, FR_p_XR3L // x^3 low - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly5L = FR_p_Poly5L, f1, FR_p_Temp5L //Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A10 = FR_p_A11, FR_p_XR, FR_p_A10 //poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Poly4L = FR_p_A3H, f1, FR_p_Poly4H /// Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A6 = FR_p_A7, FR_p_XR, FR_p_A6 // poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_A8 = FR_p_A9, FR_p_XR, FR_p_A8 // poly tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_XR6 = FR_p_XR4, FR_p_XR2, f0 // r^6 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly2L = FR_p_Poly2L, f1, FR_p_Temp2L // High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_p_Poly1L = FR_p_A0H, f1, FR_p_Poly1H // High poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_ResL = FR_r_ResL, f1, FR_r_TH // neg sin - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_TT = FR_r_TL, f1, FR_r_A1L // neg sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp4L = FR_p_Poly5L,FR_p_XR,FR_p_Temp4L //Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A18 = FR_p_A20, FR_p_XR2, FR_p_A18 // poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly4L = FR_p_Poly4L, f1, FR_p_Temp4H // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A14 = FR_p_A16, FR_p_XR2, FR_p_A14 // poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_A6 = FR_p_A8, FR_p_XR2, FR_p_A6 // poly tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A10 = FR_p_A12, FR_p_XR2, FR_p_A10 // poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp1L = FR_p_Poly2L,FR_p_XR,FR_p_Temp1L //High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly1L = FR_p_Poly1L, f1, FR_p_Temp1H // High poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_ResL = FR_r_ResL, f1, FR_r_TT // neg sin - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_TH = FR_r_ResH, FR_r_XS2, f0 // neg sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp4L = FR_p_Temp4L, f1, FR_p_A3L // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly3H = FR_p_Poly4H, FR_p_XR3, f0 // Low poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_A14 = FR_p_A18, FR_p_XR4, FR_p_A14 // poly tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_XR8 = FR_p_XR4, FR_p_XR4, f0 // r^8 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_TL = FR_r_ResH, FR_r_XS2L, f0 // neg sin - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_z_R1 = f8,FR_z_ZH,f1 // r1 = a-b*x - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp1L = FR_p_Temp1L, f1, FR_p_A0L // High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_A6 = FR_p_A10, FR_p_XR4, FR_p_A6 // poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r_TT = FR_r_ResH, FR_r_XS2, FR_r_TH // neg sin - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_Res3H = FR_r_TH, f1, f1 // neg sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly4L = FR_p_Poly4L, f1, FR_p_Temp4L // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly3L = FR_p_Poly4H, FR_p_XR3L, f0 // Low poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly0H = FR_p_Poly3H, f1, FR_p_Poly1H // Result - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_A7 = FR_r_A8, FR_r_XS2, FR_r_A7 // neg sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_TL = FR_r_ResL, FR_r_XS2, FR_r_TL // neg sin - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_XS4 = FR_r_XS2, FR_r_XS2, f0 // xs^4 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly1L = FR_p_Poly1L, f1, FR_p_Temp1L // High poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_PolyTail = FR_p_A14, FR_p_XR8, FR_p_A6 // poly tail - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r_Res3L = f1, f1, FR_r_Res3H // neg sin - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_ResH = FR_r_Res3H, FR_r_XS, f0 // neg sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Temp0L = FR_p_Poly4H,FR_p_XR3,FR_p_Poly3H //Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly3L = FR_p_Poly4L,FR_p_XR3,FR_p_Poly3L //Low poly - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_p_Poly0L = FR_p_Poly1H, f1, FR_p_Poly0H // Result - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_z_ZL = FR_z_R1,FR_z_Y3, f0 // x_lo = r1*y3 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_TL = FR_r_TL, f1, FR_r_TT // neg sin - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_A3 = FR_r_A4, FR_r_XS2, FR_r_A3 /// neg sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly1L = FR_p_PolyTail,FR_p_XR6,FR_p_Poly1L // High - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_A5 = FR_r_A6, FR_r_XS2, FR_r_A5 // neg sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Res3L = FR_r_Res3L, f1, FR_r_TH // neg sin - nop.i 0 -} -{ .mfi - nop.m 0 - fms.s1 FR_r_ResL = FR_r_Res3H, FR_r_XS, FR_r_ResH // neg sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly3L = FR_p_Poly3L, f1, FR_p_Temp0L // Low poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_A7 = FR_r_A9, FR_r_XS4, FR_r_A7 // neg sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly0L = FR_p_Poly0L, f1, FR_p_Poly3H // result - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p14) fma.s1 f8 = FR_p_Poly0H, FR_z_ZH, f0 // z*poly - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp1L = FR_p_Poly0H, FR_z_ZL, f0 // z*poly low - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_A3 = FR_r_A5, FR_r_XS4, FR_r_A3 // sin tail - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_XS7 = FR_r_XS4, FR_r_XS2, f0 // xs^6 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Res3L = FR_r_Res3L, f1, FR_r_TL // sin low - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_XS8 = FR_r_XS4, FR_r_XS4, f0 // xs^8 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Temp0H = FR_p_Poly3L, f1, FR_p_Poly1L // result - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p14) fms.s1 FR_p_Temp1H = FR_p_Poly0H, FR_z_ZH, f8 // hi result - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_XS7 = FR_r_XS7, FR_r_XS, f0 // xs^7 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_ResL = FR_r_Res3L, FR_r_XS, FR_r_ResL // lo result - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_Tail = FR_r_A7, FR_r_XS8, FR_r_A3 // tail result - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_p_Poly0L = FR_p_Poly0L, f1, FR_p_Temp0H // lo result - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_ResL = FR_r_Tail, FR_r_XS7, FR_r_ResL // lo result - nop.i 0 -};; - -{ .mfi - nop.m 0 -(p14) fma.s1 FR_p_Temp1L = FR_p_Poly0L,FR_z_ZH,FR_p_Temp1L //hi result - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_TT = FR_r_ResL, f1, f0 // for low result - nop.i 0 -};; - -.pred.rel "mutex",p12,p13 -{ .mfi - nop.m 0 -(p14) fma.s1 FR_p_Temp1L = FR_p_Temp1L, f1, FR_p_Temp1H // for lo res - nop.i 0 -};; - -{ .mfi -(p10) cmp.eq p13, p12 = r0, r0 // set p13, clear p12 - fma.s1 FR_r_Res1H = FR_r_ResH, f1, FR_r_TT // hi res - nop.i 0 -};; - -{ .mfb -(p9) cmp.eq p13, p12 = r0, r0 // set p13, clear p12 -(p14) fma.s0 f8 = f8, f1, FR_p_Temp1L // Final result -(p14) br.ret.spnt b0 // Exit for 0 < |X| < 1 path (positive arguments)/////// -};; - -{ .mfi -(p11) cmp.eq p13, p12 = r0, r0 // set p13, clear p12 - fms.s1 FR_r_Res1L = FR_r_ResH, f1, FR_r_Res1H // Low sin result - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Res1L = FR_r_Res1L, f1, FR_r_TT // Low sin result - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_TL = FR_p_Poly0L,FR_r_Res1H,f0 //Low sin result - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_TL = FR_p_Poly0H, FR_r_Res1L, FR_r_TL //Low sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_ResH = FR_p_Poly0H, FR_r_Res1H, FR_r_TL //High sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fms.s1 FR_r_ResL = FR_p_Poly0H,FR_r_Res1H,FR_r_ResH //Low res - nop.i 0 -};; - -{ .mfi - nop.m 0 - frcpa.s1 FR_r_Y0,p0 = f1,FR_r_ResH // y = frcpa(b) - nop.i 0 -};; - -{ .mfi - nop.m 0 - fneg FR_r_NegOne = f1 // Construct -1.0 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_ResL = FR_r_ResL, f1, FR_r_TL // low sin - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Q0 = f1,FR_r_Y0,f0 // q = a*y - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_r_E0 = FR_r_Y0,FR_r_ResH,f1 // e = 1-b*y - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_E2 = FR_r_E0,FR_r_E0,FR_r_E0 // e2 = e+e^2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_E1 = FR_r_E0,FR_r_E0,f0 // e1 = e^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Y1 = FR_r_Y0,FR_r_E2,FR_r_Y0 // y1 = y+y*e2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_E3 = FR_r_E1,FR_r_E1,FR_r_E0 // e3 = e+e1^2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Y2 = FR_r_Y1,FR_r_E3,FR_r_Y0 // y2 = y+y1*e3 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_r_R0 = FR_r_ResH,FR_r_Q0,f1 // r = a-b*q - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_r_E4 = FR_r_ResH,FR_r_Y2,f1 // e4 = 1-b*y2 - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_ZH = FR_r_R0,FR_r_Y2,FR_r_Q0 // x = q+r*y2 - nop.i 0 -};; - -{ .mfi - nop.m 0 - fma.s1 FR_r_Y3 = FR_r_Y2,FR_r_E4,FR_r_Y2 // y3 = y2+y2*e4 - nop.i 0 -} -{ .mfi - nop.m 0 - fnma.s1 FR_r_R1 = FR_r_ResH,FR_r_ZH,f1 // r1 = a-b*x - nop.i 0 -};; - -{ .mfi - nop.m 0 - fnma.s1 FR_r_R1 = FR_r_ResL,FR_r_ZH,FR_r_R1 // r1=r1 - b_lo*X - nop.i 0 -} -{ .mfi - nop.m 0 - fma.s1 FR_r_ZHN = FR_r_ZH,FR_r_NegOne, f0 // Negate - nop.i 0 -};; - -.pred.rel "mutex",p13,p12 -{ .mfb - nop.m 0 - fnma.s0 f8 = FR_r_R1,FR_r_Y3,FR_r_ZHN // Result for neg - br.ret.sptk b0 // Exit for 0 < |X| < 1 path (negative arguments)////// -};; - - - - -// SPECIALS (x for natval, nan, +/-inf or +/-0) /////////////////////////////// -//------------------------------------------------------------------------------ -.align 32 -tgammal_spec: -{ .mlx - nop.m 0 - movl GR_DenOverflow = 0x2000000000000001 -} -{ .mfi - nop.m 0 - fclass.m p9,p0 = f8,0xB // +/-denormals - nop.i 0 -};; -{ .mfi - nop.m 0 - fclass.m p6,p0 = f8,0x1E1 // Test x for natval, nan, +inf - nop.i 0 -};; -{ .mfi - nop.m 0 - fclass.m p7,p8 = f8,0x7 // +/-0 - nop.i 0 -} - -{ .mfi -(p9) cmp.ltu.unc p10,p11 = GR_l_signif_Z, GR_DenOverflow -(p9) fnorm.s0 f8 = f8 - nop.i 0 -};; - -{ .mfb - nop.m 0 -(p9) fcvt.fx.trunc.s1 FR_n_IXN = FR_l_AbsX // Round by truncate -(p11) br.cond.sptk tgamma_lt_1 // Return to gamma ('good' denormal)//////////// -};; - -{ .mfb - nop.m 0 - nop.f 0 -(p10) br.cond.spnt tgammal_overflow // "Bad" denormal - overflow! ///////////// -};; - -{ .mfi - nop.m 0 - mov FR_X = f8 // for error handler - nop.i 0 -} -{ .mfb - nop.m 0 -(p6) fma.s0 f8 = f8,f1,f8 // res = x + x -(p6) br.ret.spnt b0 // Exit for NAN, INF and NatVals //////////////////////// -};; -.pred.rel "mutex",p7,p8 -{ .mfi -(p7) mov GR_Parameter_TAG = 256 // negative -(p7) frcpa.s0 f8,p0 = f1,f8 // Raise V flag - nop.i 0 -} -{ .mfb - nop.m 0 - nop.f 0 -(p8) br.cond.spnt tgammal_singularity // Branch for +ZERO //////////////////// -};; - -{ .mfb - nop.m 0 - nop.f 0 - br.cond.spnt tgammal_libm_err // Branch for -ZERO /////////////////////// -};; - - - - -// SINGULARITY (x is negative integer or 0) //////////////////////////////////// -//------------------------------------------------------------------------------ -.align 32 -tgammal_singularity: -{ .mfi - nop.m 0 - mov FR_X = f8 // For error handler - mov GR_Parameter_TAG = 256 // negative -} -{ .mfb - nop.m 0 - frcpa.s0 f8,p0 = f0,f0 // Raise V flag - br.cond.sptk tgammal_libm_err // Call error handler ///////////////////// - // with singularity error ///////////////// -};; - - - - -// OVERFLOW (result is too big and cannot be represented by normal value) ////// -// ( X > 1755.54 and for denormals with abs value less than 0x2000000000000001 ) -//------------------------------------------------------------------------------ -.align 32 -tgammal_overflow: -{ .mfi - addl r8 = 0x1FFFE, r0 // Exp of INF - fcmp.lt.s1 p15,p14 = f8,f0 // p14 - pos arg, p15 - neg arg - nop.i 0 -};; - -{ .mfi - setf.exp f9 = r8 - mov FR_X = f8 // For error handler - mov GR_Parameter_TAG = 255 // overflow -};; - -.pred.rel "mutex",p14,p15 -{ .mfi - nop.m 0 -(p14) fma.s0 f8 = f9,f9,f0 // Set I,O and +INF result - nop.i 0 -} -{ .mfb - nop.m 0 -(p15) fnma.s0 f8 = f9,f9,f0 // Set I,O and -INF result - br.cond.sptk tgammal_libm_err // Call error handler ///////////////////// - // with overflow error //////////////////// -};; - - - - - -// UNDERFLOW (x is negative noninteger with big absolute value) //////////////// -//------------------------------------------------------------------------------ -.align 32 -tgammal_underflow: -{ .mfi - nop.m 0 - fcvt.fx.trunc.s1 FR_u_IXN = f8 // Convert arg to int repres. in FR - nop.i 0 -};; - -{ .mmi - getf.sig GR_u_XN = FR_u_IXN - mov r11 = 0x00001 - nop.i 0 -};; - -{ .mfi - setf.exp f9 = r11 - nop.f 0 - nop.i 0 -};; - -{ .mfi - nop.m 0 - nop.f 0 - tbit.z p6,p7 = GR_u_XN,0 // even or odd -};; - -.pred.rel "mutex",p6,p7 -{ .mfi - nop.m 0 -(p6) fms.s0 f8 = f9,f9,f9 // for negatives - nop.i 0 -} -{ .mfb - nop.m 0 -(p7) fma.s0 f8 = f9,f9,f9 // for positives - br.ret.sptk b0 // Exit for underflow path ////////////////////////////// -};; - - -GLOBAL_LIBM_END(tgammal) - - - - -////////////////// Tgammal error handler /////////////////////////////////////// -//------------------------------------------------------------------------------ -LOCAL_LIBM_ENTRY(__libm_error_region) -tgammal_libm_err: -.prologue -{ .mfi - add GR_Parameter_Y=-32,sp // Parameter 2 value - nop.f 0 -.save ar.pfs,GR_SAVE_PFS - mov GR_SAVE_PFS=ar.pfs // Save ar.pfs -} -{ .mfi -.fframe 64 - add sp=-64,sp // Create new stack - nop.f 0 - mov GR_SAVE_GP=gp // Save gp -};; -{ .mmi - stfe [GR_Parameter_Y] = FR_Y,16 // Save Parameter 2 on stack - add GR_Parameter_X = 16,sp // Parameter 1 address -.save b0, GR_SAVE_B0 - mov GR_SAVE_B0=b0 // Save b0 -};; -.body -{ .mib - stfe [GR_Parameter_X] = FR_X // Store Parameter 1 on stack - add GR_Parameter_RESULT = 0,GR_Parameter_Y - nop.b 0 // Parameter 3 address -} -{ .mib - stfe [GR_Parameter_Y] = FR_RESULT // Store Parameter 3 on stack - add GR_Parameter_Y = -16,GR_Parameter_Y - br.call.sptk b0=__libm_error_support# // Call error handling function -};; -{ .mmi - nop.m 999 - nop.m 999 - add GR_Parameter_RESULT = 48,sp -};; -{ .mmi - ldfe f8 = [GR_Parameter_RESULT] // Get return result off stack -.restore sp - add sp = 64,sp // Restore stack pointer - mov b0 = GR_SAVE_B0 // Restore return address -};; -{ .mib - mov gp = GR_SAVE_GP // Restore gp - mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs - br.ret.sptk b0 // Return -};; - -LOCAL_LIBM_END(__libm_error_region#) - -.type __libm_error_support#,@function -.global __libm_error_support# diff --git a/sysdeps/ia64/gccframe.h b/sysdeps/ia64/gccframe.h deleted file mode 100644 index 04736a8912..0000000000 --- a/sysdeps/ia64/gccframe.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Definition of object in frame unwind info. ia64 version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This must match what's in frame.h in gcc. */ - -struct object -{ - void *pc_base; /* This field will be set by find_fde. */ - void *pc_begin; - void *pc_end; - void *fde_begin; - void *fde_end; - void *fde_array; - __SIZE_TYPE__ count; - struct object *next; -}; diff --git a/sysdeps/ia64/hp-timing.h b/sysdeps/ia64/hp-timing.h deleted file mode 100644 index 4af128a1a1..0000000000 --- a/sysdeps/ia64/hp-timing.h +++ /dev/null @@ -1,49 +0,0 @@ -/* High precision, low overhead timing functions. IA-64 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _HP_TIMING_H -#define _HP_TIMING_H 1 - -/* We always assume having the timestamp register. */ -#define HP_TIMING_AVAIL (1) -#define HP_SMALL_TIMING_AVAIL (1) - -/* We indeed have inlined functions. */ -#define HP_TIMING_INLINE (1) - -/* We use 64bit values for the times. */ -typedef unsigned long int hp_timing_t; - -/* The Itanium/Merced has a bug where the ar.itc register value read - is not correct in some situations. The solution is to read again. - For now we always do this until we know how to recognize a fixed - processor implementation. */ -#define REPEAT_READ(val) __builtin_expect ((long int) val == -1, 0) - -/* That's quite simple. Use the `ar.itc' instruction. */ -#define HP_TIMING_NOW(Var) \ - ({ unsigned long int __itc; \ - do \ - asm volatile ("mov %0=ar.itc" : "=r" (__itc) : : "memory"); \ - while (REPEAT_READ (__itc)); \ - Var = __itc; }) - -#include - -#endif /* hp-timing.h */ diff --git a/sysdeps/ia64/htonl.S b/sysdeps/ia64/htonl.S deleted file mode 100644 index 3f532f3906..0000000000 --- a/sysdeps/ia64/htonl.S +++ /dev/null @@ -1,30 +0,0 @@ -/* Change byte order in 32-bit value. ia64 version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Dan Pop - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include - -ENTRY(htonl) - shl ret0 = r32, 32 - ;; - mux1 ret0 = ret0, @rev - ret -END(htonl) - -weak_alias (htonl, ntohl) diff --git a/sysdeps/ia64/htons.S b/sysdeps/ia64/htons.S deleted file mode 100644 index 83ffe1bc88..0000000000 --- a/sysdeps/ia64/htons.S +++ /dev/null @@ -1,30 +0,0 @@ -/* Change byte order in 16-bit value. ia64 version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Dan Pop - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include - -ENTRY(htons) - shl ret0 = r32, 48 - ;; - mux1 ret0 = ret0, @rev - ret -END(htons) - -weak_alias (htons, ntohs) diff --git a/sysdeps/ia64/ia64libgcc.S b/sysdeps/ia64/ia64libgcc.S deleted file mode 100644 index 3f77b06a5a..0000000000 --- a/sysdeps/ia64/ia64libgcc.S +++ /dev/null @@ -1,350 +0,0 @@ -/* From the Intel IA-64 Optimization Guide, choose the minimum latency - alternative. */ - -#include -#undef ret - -#include - -#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_2_6) - -/* __divtf3 - Compute a 80-bit IEEE double-extended quotient. - farg0 holds the dividend. farg1 holds the divisor. */ - -ENTRY(___divtf3) - cmp.eq p7, p0 = r0, r0 - frcpa.s0 f10, p6 = farg0, farg1 - ;; -(p6) cmp.ne p7, p0 = r0, r0 - .pred.rel.mutex p6, p7 -(p6) fnma.s1 f11 = farg1, f10, f1 -(p6) fma.s1 f12 = farg0, f10, f0 - ;; -(p6) fma.s1 f13 = f11, f11, f0 -(p6) fma.s1 f14 = f11, f11, f11 - ;; -(p6) fma.s1 f11 = f13, f13, f11 -(p6) fma.s1 f13 = f14, f10, f10 - ;; -(p6) fma.s1 f10 = f13, f11, f10 -(p6) fnma.s1 f11 = farg1, f12, farg0 - ;; -(p6) fma.s1 f11 = f11, f10, f12 -(p6) fnma.s1 f12 = farg1, f10, f1 - ;; -(p6) fma.s1 f10 = f12, f10, f10 -(p6) fnma.s1 f12 = farg1, f11, farg0 - ;; -(p6) fma.s0 fret0 = f12, f10, f11 -(p7) mov fret0 = f10 - br.ret.sptk rp -END(___divtf3) - .symver ___divtf3, __divtf3@GLIBC_2.2 - -/* __divdf3 - Compute a 64-bit IEEE double quotient. - farg0 holds the dividend. farg1 holds the divisor. */ - -ENTRY(___divdf3) - cmp.eq p7, p0 = r0, r0 - frcpa.s0 f10, p6 = farg0, farg1 - ;; -(p6) cmp.ne p7, p0 = r0, r0 - .pred.rel.mutex p6, p7 -(p6) fmpy.s1 f11 = farg0, f10 -(p6) fnma.s1 f12 = farg1, f10, f1 - ;; -(p6) fma.s1 f11 = f12, f11, f11 -(p6) fmpy.s1 f13 = f12, f12 - ;; -(p6) fma.s1 f10 = f12, f10, f10 -(p6) fma.s1 f11 = f13, f11, f11 - ;; -(p6) fmpy.s1 f12 = f13, f13 -(p6) fma.s1 f10 = f13, f10, f10 - ;; -(p6) fma.d.s1 f11 = f12, f11, f11 -(p6) fma.s1 f10 = f12, f10, f10 - ;; -(p6) fnma.d.s1 f8 = farg1, f11, farg0 - ;; -(p6) fma.d fret0 = f8, f10, f11 -(p7) mov fret0 = f10 - br.ret.sptk rp - ;; -END(___divdf3) - .symver ___divdf3, __divdf3@GLIBC_2.2 - -/* __divsf3 - Compute a 32-bit IEEE float quotient. - farg0 holds the dividend. farg1 holds the divisor. */ - -ENTRY(___divsf3) - cmp.eq p7, p0 = r0, r0 - frcpa.s0 f10, p6 = farg0, farg1 - ;; -(p6) cmp.ne p7, p0 = r0, r0 - .pred.rel.mutex p6, p7 -(p6) fmpy.s1 f8 = farg0, f10 -(p6) fnma.s1 f9 = farg1, f10, f1 - ;; -(p6) fma.s1 f8 = f9, f8, f8 -(p6) fmpy.s1 f9 = f9, f9 - ;; -(p6) fma.s1 f8 = f9, f8, f8 -(p6) fmpy.s1 f9 = f9, f9 - ;; -(p6) fma.d.s1 f10 = f9, f8, f8 - ;; -(p6) fnorm.s.s0 fret0 = f10 -(p7) mov fret0 = f10 - br.ret.sptk rp - ;; -END(___divsf3) - .symver ___divsf3, __divsf3@GLIBC_2.2 - -/* __divdi3 - Compute a 64-bit integer quotient. - in0 holds the dividend. in1 holds the divisor. */ - -ENTRY(___divdi3) - .regstk 2,0,0,0 - /* Transfer inputs to FP registers. */ - setf.sig f8 = in0 - setf.sig f9 = in1 - ;; - /* Convert the inputs to FP, so that they won't be treated as - unsigned. */ - fcvt.xf f8 = f8 - fcvt.xf f9 = f9 - ;; - /* Compute the reciprocal approximation. */ - frcpa.s1 f10, p6 = f8, f9 - ;; - /* 3 Newton-Raphson iterations. */ -(p6) fnma.s1 f11 = f9, f10, f1 -(p6) fmpy.s1 f12 = f8, f10 - ;; -(p6) fmpy.s1 f13 = f11, f11 -(p6) fma.s1 f12 = f11, f12, f12 - ;; -(p6) fma.s1 f10 = f11, f10, f10 -(p6) fma.s1 f11 = f13, f12, f12 - ;; -(p6) fma.s1 f10 = f13, f10, f10 -(p6) fnma.s1 f12 = f9, f11, f8 - ;; -(p6) fma.s1 f10 = f12, f10, f11 - ;; - /* Round quotient to an integer. */ - fcvt.fx.trunc.s1 f10 = f10 - ;; - /* Transfer result to GP registers. */ - getf.sig ret0 = f10 - br.ret.sptk rp - ;; -END(___divdi3) - .symver ___divdi3, __divdi3@GLIBC_2.2 - -/* __moddi3 - Compute a 64-bit integer modulus. - in0 holds the dividend (a). in1 holds the divisor (b). */ - -ENTRY(___moddi3) - .regstk 2,0,0,0 - /* Transfer inputs to FP registers. */ - setf.sig f14 = in0 - setf.sig f9 = in1 - ;; - /* Convert the inputs to FP, so that they won't be treated as - unsigned. */ - fcvt.xf f8 = f14 - fcvt.xf f9 = f9 - ;; - /* Compute the reciprocal approximation. */ - frcpa.s1 f10, p6 = f8, f9 - ;; - /* 3 Newton-Raphson iterations. */ -(p6) fmpy.s1 f12 = f8, f10 -(p6) fnma.s1 f11 = f9, f10, f1 - ;; -(p6) fma.s1 f12 = f11, f12, f12 -(p6) fmpy.s1 f13 = f11, f11 - ;; -(p6) fma.s1 f10 = f11, f10, f10 -(p6) fma.s1 f11 = f13, f12, f12 - ;; - sub in1 = r0, in1 -(p6) fma.s1 f10 = f13, f10, f10 -(p6) fnma.s1 f12 = f9, f11, f8 - ;; - setf.sig f9 = in1 -(p6) fma.s1 f10 = f12, f10, f11 - ;; - fcvt.fx.trunc.s1 f10 = f10 - ;; - /* r = q * (-b) + a */ - xma.l f10 = f10, f9, f14 - ;; - /* Transfer result to GP registers. */ - getf.sig ret0 = f10 - br.ret.sptk rp - ;; -END(___moddi3) - .symver ___moddi3, __moddi3@GLIBC_2.2 - -/* __udivdi3 - Compute a 64-bit unsigned integer quotient. - in0 holds the dividend. in1 holds the divisor. */ - -ENTRY(___udivdi3) - .regstk 2,0,0,0 - /* Transfer inputs to FP registers. */ - setf.sig f8 = in0 - setf.sig f9 = in1 - ;; - /* Convert the inputs to FP, to avoid FP software-assist faults. */ - fcvt.xuf.s1 f8 = f8 - fcvt.xuf.s1 f9 = f9 - ;; - /* Compute the reciprocal approximation. */ - frcpa.s1 f10, p6 = f8, f9 - ;; - /* 3 Newton-Raphson iterations. */ -(p6) fnma.s1 f11 = f9, f10, f1 -(p6) fmpy.s1 f12 = f8, f10 - ;; -(p6) fmpy.s1 f13 = f11, f11 -(p6) fma.s1 f12 = f11, f12, f12 - ;; -(p6) fma.s1 f10 = f11, f10, f10 -(p6) fma.s1 f11 = f13, f12, f12 - ;; -(p6) fma.s1 f10 = f13, f10, f10 -(p6) fnma.s1 f12 = f9, f11, f8 - ;; -(p6) fma.s1 f10 = f12, f10, f11 - ;; - /* Round quotient to an unsigned integer. */ - fcvt.fxu.trunc.s1 f10 = f10 - ;; - /* Transfer result to GP registers. */ - getf.sig ret0 = f10 - br.ret.sptk rp - ;; -END(___udivdi3) - .symver ___udivdi3, __udivdi3@GLIBC_2.2 - -/* __umoddi3 - Compute a 64-bit unsigned integer modulus. - in0 holds the dividend (a). in1 holds the divisor (b). */ - -ENTRY(___umoddi3) - .regstk 2,0,0,0 - /* Transfer inputs to FP registers. */ - setf.sig f14 = in0 - setf.sig f9 = in1 - ;; - /* Convert the inputs to FP, to avoid FP software assist faults. */ - fcvt.xuf.s1 f8 = f14 - fcvt.xuf.s1 f9 = f9 - ;; - /* Compute the reciprocal approximation. */ - frcpa.s1 f10, p6 = f8, f9 - ;; - /* 3 Newton-Raphson iterations. */ -(p6) fmpy.s1 f12 = f8, f10 -(p6) fnma.s1 f11 = f9, f10, f1 - ;; -(p6) fma.s1 f12 = f11, f12, f12 -(p6) fmpy.s1 f13 = f11, f11 - ;; -(p6) fma.s1 f10 = f11, f10, f10 -(p6) fma.s1 f11 = f13, f12, f12 - ;; - sub in1 = r0, in1 -(p6) fma.s1 f10 = f13, f10, f10 -(p6) fnma.s1 f12 = f9, f11, f8 - ;; - setf.sig f9 = in1 -(p6) fma.s1 f10 = f12, f10, f11 - ;; - /* Round quotient to an unsigned integer. */ - fcvt.fxu.trunc.s1 f10 = f10 - ;; - /* r = q * (-b) + a */ - xma.l f10 = f10, f9, f14 - ;; - /* Transfer result to GP registers. */ - getf.sig ret0 = f10 - br.ret.sptk rp - ;; -END(___umoddi3) - .symver ___umoddi3, __umoddi3@GLIBC_2.2 - -/* __multi3 - Compute a 128-bit multiply of 128-bit multiplicands. - in0/in1 holds one multiplicand (a), in2/in3 holds the other one (b). */ - -ENTRY(___multi3) - .regstk 4,0,0,0 - setf.sig f6 = in1 - movl r19 = 0xffffffff - setf.sig f7 = in2 - ;; - and r14 = r19, in0 - ;; - setf.sig f10 = r14 - and r14 = r19, in2 - xmpy.l f9 = f6, f7 - ;; - setf.sig f6 = r14 - shr.u r14 = in0, 32 - ;; - setf.sig f7 = r14 - shr.u r14 = in2, 32 - ;; - setf.sig f8 = r14 - xmpy.l f11 = f10, f6 - xmpy.l f6 = f7, f6 - ;; - getf.sig r16 = f11 - xmpy.l f7 = f7, f8 - ;; - shr.u r14 = r16, 32 - and r16 = r19, r16 - getf.sig r17 = f6 - setf.sig f6 = in0 - ;; - setf.sig f11 = r14 - getf.sig r21 = f7 - setf.sig f7 = in3 - ;; - xma.l f11 = f10, f8, f11 - xma.l f6 = f6, f7, f9 - ;; - getf.sig r18 = f11 - ;; - add r18 = r18, r17 - ;; - and r15 = r19, r18 - cmp.ltu p7, p6 = r18, r17 - ;; - getf.sig r22 = f6 -(p7) adds r14 = 1, r19 - ;; -(p7) add r21 = r21, r14 - shr.u r14 = r18, 32 - shl r15 = r15, 32 - ;; - add r20 = r21, r14 - ;; - add ret0 = r15, r16 - add ret1 = r22, r20 - br.ret.sptk rp - ;; -END(___multi3) - .symver ___multi3, __multi3@GLIBC_2.2 - -#endif diff --git a/sysdeps/ia64/ieee754.h b/sysdeps/ia64/ieee754.h deleted file mode 100644 index 8dd1198692..0000000000 --- a/sysdeps/ia64/ieee754.h +++ /dev/null @@ -1,204 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _IEEE754_H - -#define _IEEE754_H 1 -#include - -#include - -__BEGIN_DECLS - -union ieee754_float - { - float f; - - /* This is the IEEE 754 single-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int mantissa:23; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:23; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int quiet_nan:1; - unsigned int mantissa:22; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:22; - unsigned int quiet_nan:1; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee_nan; - }; - -#define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */ - - -union ieee754_double - { - double d; - - /* This is the IEEE 754 double-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:20; - unsigned int mantissa1:32; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN -# if __FLOAT_WORD_ORDER == __BIG_ENDIAN - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; - unsigned int mantissa1:32; -# else - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; -# endif -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - unsigned int quiet_nan:1; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:19; - unsigned int mantissa1:32; -#else -# if __FLOAT_WORD_ORDER == __BIG_ENDIAN - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; - unsigned int mantissa1:32; -# else - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; -# endif -#endif - } ieee_nan; - }; - -#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */ - - -union ieee854_long_double - { - long double d; - - /* This is the IEEE 854 double-extended-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int empty0:32; - unsigned int negative:1; - unsigned int exponent:15; - unsigned int empty1:16; - unsigned int mantissa0:32; - unsigned int mantissa1:32; -#endif -#if __BYTE_ORDER == __LITTLE_ENDIAN -# if __FLOAT_WORD_ORDER == __BIG_ENDIAN - unsigned int empty0:32; - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty1:16; - unsigned int mantissa0:32; - unsigned int mantissa1:32; -# else - unsigned int mantissa1:32; - unsigned int mantissa0:32; - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty1:16; - unsigned int empty0:32; -# endif -#endif - } ieee; - - /* This is for NaNs in the IEEE 854 double-extended-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int empty0:32; - unsigned int negative:1; - unsigned int exponent:15; - unsigned int empty1:16; - unsigned int one:1; - unsigned int quiet_nan:1; - unsigned int mantissa0:30; - unsigned int mantissa1:32; -#endif -#if __BYTE_ORDER == __LITTLE_ENDIAN -# if __FLOAT_WORD_ORDER == __BIG_ENDIAN - unsigned int empty0:32; - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty1:16; - unsigned int mantissa0:30; - unsigned int quiet_nan:1; - unsigned int one:1; - unsigned int mantissa1:32; -# else - unsigned int mantissa1:32; - unsigned int mantissa0:30; - unsigned int quiet_nan:1; - unsigned int one:1; - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty1:16; - unsigned int empty0:32; -# endif -#endif - } ieee_nan; - }; - -#define IEEE854_LONG_DOUBLE_BIAS 0x3fff - -__END_DECLS - -#endif /* ieee754.h */ diff --git a/sysdeps/ia64/jmpbuf-unwind.h b/sysdeps/ia64/jmpbuf-unwind.h deleted file mode 100644 index 05f8b754cc..0000000000 --- a/sysdeps/ia64/jmpbuf-unwind.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame containing a local - variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(_jmpbuf, _address, _demangle) \ - ((void *) (_address) < (void *) (((long int *) _jmpbuf)[0])) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - ({ uintptr_t _cfa = (uintptr_t) _Unwind_GetCFA (_context) - (_adj); \ - (_cfa < (uintptr_t)(((long *)(_jmpbuf))[0]) - (_adj) \ - || (_cfa == (uintptr_t)(((long *)(_jmpbuf))[0]) - (_adj) \ - && (uintptr_t) _Unwind_GetBSP (_context) - (_adj) \ - >= (uintptr_t)(((long *)(_jmpbuf))[17]) - (_adj))); \ - }) - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t)(_address) - (_adj) < (uintptr_t)(((long *)_jmpbuf)[0]) - (_adj)) - -/* We use a longjmp() which can cross from the alternate signal-stack - to the normal stack. */ -extern void __libc_unwind_longjmp (sigjmp_buf env, int val) - __attribute__ ((noreturn)); -hidden_proto (__libc_unwind_longjmp) diff --git a/sysdeps/ia64/ldbl2mpn.c b/sysdeps/ia64/ldbl2mpn.c deleted file mode 100644 index 641b789cd4..0000000000 --- a/sysdeps/ia64/ldbl2mpn.c +++ /dev/null @@ -1 +0,0 @@ -#include "../i386/ldbl2mpn.c" diff --git a/sysdeps/ia64/ldsodefs.h b/sysdeps/ia64/ldsodefs.h deleted file mode 100644 index 7ef1d7e550..0000000000 --- a/sysdeps/ia64/ldsodefs.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef __LDSODEFS_H - -#include - -struct La_ia64_regs; -struct La_ia64_retval; - -#define ARCH_PLTENTER_MEMBERS \ - Elf64_Addr (*ia64_gnu_pltenter) (Elf64_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - struct La_ia64_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep); - -#define ARCH_PLTEXIT_MEMBERS \ - unsigned int (*ia64_gnu_pltexit) (Elf64_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - const struct La_ia64_regs *, \ - struct La_ia64_retval *, \ - const char *); - -#include_next - -#endif diff --git a/sysdeps/ia64/libc-tls.c b/sysdeps/ia64/libc-tls.c deleted file mode 100644 index 06cd706509..0000000000 --- a/sysdeps/ia64/libc-tls.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. IA-64 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* On IA-64, as it lacks linker optimizations, __tls_get_addr can be - called even in statically linked binaries. - In this case module must be always 1 and PT_TLS segment - exist in the binary, otherwise it would not link. */ - -void * -__tls_get_addr (size_t m, size_t offset) -{ - dtv_t *dtv = THREAD_DTV (); - return (char *) dtv[1].pointer.val + offset; -} diff --git a/sysdeps/ia64/linkmap.h b/sysdeps/ia64/linkmap.h deleted file mode 100644 index 7f8b0550d9..0000000000 --- a/sysdeps/ia64/linkmap.h +++ /dev/null @@ -1,5 +0,0 @@ -struct link_map_machine - { - size_t fptr_table_len; - Elf64_Addr *fptr_table; - }; diff --git a/sysdeps/ia64/machine-gmon.h b/sysdeps/ia64/machine-gmon.h deleted file mode 100644 index 63bb02fd0d..0000000000 --- a/sysdeps/ia64/machine-gmon.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Machine-specific calling sequence for `mcount' profiling function. IA-64. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define _MCOUNT_DECL(from, self) \ - void __mcount (u_long from, u_long self) - -/* Call __mcount with our the return PC for our caller, and the return - PC our caller will return to. Empty since we use an assembly stub - instead. */ -#define MCOUNT diff --git a/sysdeps/ia64/memccpy.S b/sysdeps/ia64/memccpy.S deleted file mode 100644 index 0911595074..0000000000 --- a/sysdeps/ia64/memccpy.S +++ /dev/null @@ -1,249 +0,0 @@ -/* Optimized version of the memccpy() function. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Dan Pop . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Return: a pointer to the next byte after char in dest or NULL - - Inputs: - in0: dest - in1: src - in2: char - in3: byte count - - This implementation assumes little endian mode (UM.be = 0). - - This implementation assumes that it is safe to do read ahead - in the src block, without getting beyond its limit. */ - -#include -#undef ret - -#define OP_T_THRES 16 -#define OPSIZ 8 - -#define saved_pr r17 -#define saved_lc r18 -#define dest r19 -#define src r20 -#define len r21 -#define asrc r22 -#define tmp r23 -#define char r24 -#define charx8 r25 -#define saved_ec r26 -#define sh2 r28 -#define sh1 r29 -#define loopcnt r30 -#define value r31 - -#ifdef GAS_ALIGN_BREAKS_UNWIND_INFO -/* Manually force proper loop-alignment. Note: be sure to - double-check the code-layout after making any changes to - this routine! */ -# define ALIGN(n) { nop 0 } -#else -# define ALIGN(n) .align n -#endif - -ENTRY(memccpy) - .prologue - alloc r2 = ar.pfs, 4, 40 - 4, 0, 40 - -#include "softpipe.h" - .rotr r[MEMLAT + 7], tmp1[4], tmp2[4], val[4], tmp3[2], pos0[2] - .rotp p[MEMLAT + 6 + 1] - - mov ret0 = r0 // return NULL if no match - .save pr, saved_pr - mov saved_pr = pr // save the predicate registers - mov dest = in0 // dest - .save ar.lc, saved_lc - mov saved_lc = ar.lc // save the loop counter - mov saved_ec = ar.ec // save the loop counter - .body - mov src = in1 // src - extr.u char = in2, 0, 8 // char - mov len = in3 // len - sub tmp = r0, in0 // tmp = -dest - cmp.ne p7, p0 = r0, r0 // clear p7 - ;; - and loopcnt = 7, tmp // loopcnt = -dest % 8 - cmp.ge p6, p0 = OP_T_THRES, len // is len <= OP_T_THRES - mov ar.ec = 0 // ec not guaranteed zero on entry -(p6) br.cond.spnt .cpyfew // copy byte by byte - ;; - cmp.eq p6, p0 = loopcnt, r0 - mux1 charx8 = char, @brcst -(p6) br.cond.sptk .dest_aligned - sub len = len, loopcnt // len -= -dest % 8 - adds loopcnt = -1, loopcnt // --loopcnt - ;; - mov ar.lc = loopcnt -.l1: // copy -dest % 8 bytes - ld1 value = [src], 1 // value = *src++ - ;; - st1 [dest] = value, 1 // *dest++ = value - cmp.eq p6, p0 = value, char -(p6) br.cond.spnt .foundit - br.cloop.dptk .l1 -.dest_aligned: - and sh1 = 7, src // sh1 = src % 8 - and tmp = -8, len // tmp = len & -OPSIZ - and asrc = -8, src // asrc = src & -OPSIZ -- align src - shr.u loopcnt = len, 3 // loopcnt = len / 8 - and len = 7, len ;; // len = len % 8 - shl sh1 = sh1, 3 // sh1 = 8 * (src % 8) - adds loopcnt = -1, loopcnt // --loopcnt - mov pr.rot = 1 << 16 ;; // set rotating predicates - sub sh2 = 64, sh1 // sh2 = 64 - sh1 - mov ar.lc = loopcnt // set LC - cmp.eq p6, p0 = sh1, r0 // is the src aligned? -(p6) br.cond.sptk .src_aligned ;; - add src = src, tmp // src += len & -OPSIZ - mov ar.ec = MEMLAT + 6 + 1 // six more passes needed - ld8 r[1] = [asrc], 8 // r[1] = w0 - cmp.ne p6, p0 = r0, r0 ;; // clear p6 - ALIGN(32) -.l2: -(p[0]) ld8.s r[0] = [asrc], 8 // r[0] = w1 -(p[MEMLAT]) shr.u tmp1[0] = r[1 + MEMLAT], sh1 // tmp1 = w0 >> sh1 -(p[MEMLAT]) shl tmp2[0] = r[0 + MEMLAT], sh2 // tmp2 = w1 << sh2 -(p[MEMLAT+4]) xor tmp3[0] = val[1], charx8 -(p[MEMLAT+5]) czx1.r pos0[0] = tmp3[1] -(p[MEMLAT+6]) chk.s r[6 + MEMLAT], .recovery1 // our data isn't - // valid - rollback! -(p[MEMLAT+6]) cmp.ne p6, p0 = 8, pos0[1] -(p6) br.cond.spnt .gotit -(p[MEMLAT+6]) st8 [dest] = val[3], 8 // store val to dest -(p[MEMLAT+3]) or val[0] = tmp1[3], tmp2[3] // val = tmp1 | tmp2 - br.ctop.sptk .l2 - br.cond.sptk .cpyfew - -.src_aligned: - cmp.ne p6, p0 = r0, r0 // clear p6 - mov ar.ec = MEMLAT + 2 + 1 ;; // set EC -.l3: -(p[0]) ld8.s r[0] = [src], 8 -(p[MEMLAT]) xor tmp3[0] = r[MEMLAT], charx8 -(p[MEMLAT+1]) czx1.r pos0[0] = tmp3[1] -(p[MEMLAT+2]) cmp.ne p7, p0 = 8, pos0[1] -(p[MEMLAT+2]) chk.s r[MEMLAT+2], .recovery2 -(p7) br.cond.spnt .gotit -.back2: -(p[MEMLAT+2]) st8 [dest] = r[MEMLAT+2], 8 - br.ctop.dptk .l3 -.cpyfew: - cmp.eq p6, p0 = len, r0 // is len == 0 ? - adds len = -1, len // --len; -(p6) br.cond.spnt .restore_and_exit ;; - mov ar.lc = len -.l4: - ld1 value = [src], 1 - ;; - st1 [dest] = value, 1 - cmp.eq p6, p0 = value, char -(p6) br.cond.spnt .foundit - br.cloop.dptk .l4 ;; -.foundit: -(p6) mov ret0 = dest -.restore_and_exit: - mov pr = saved_pr, -1 // restore the predicate registers - mov ar.lc = saved_lc // restore the loop counter - mov ar.ec = saved_ec ;; // restore the epilog counter - br.ret.sptk.many b0 -.gotit: - .pred.rel "mutex" p6, p7 -(p6) mov value = val[3] // if coming from l2 -(p7) mov value = r[MEMLAT+2] // if coming from l3 - mov ar.lc = pos0[1] ;; -.l5: - extr.u tmp = value, 0, 8 ;; - st1 [dest] = tmp, 1 - shr.u value = value, 8 - br.cloop.sptk .l5 ;; - mov ret0 = dest - mov pr = saved_pr, -1 - mov ar.lc = saved_lc - br.ret.sptk.many b0 - -.recovery1: -#if MEMLAT != 6 -# error "MEMLAT must be 6!" -#endif - adds src = -8, asrc - mov loopcnt = ar.lc - mov tmp = ar.ec - ;; -(p[0]) adds src = -8, src - ;; -(p[1]) adds src = -8, src - sub sh1 = (MEMLAT + 6 + 1), tmp - ;; -(p[2]) adds src = -8, src - ;; -(p[3]) adds src = -8, src - shl loopcnt = loopcnt, 3 - ;; -(p[4]) adds src = -8, src - ;; -(p[5]) adds src = -8, src - shl sh1 = sh1, 3 - ;; -(p[6]) adds src = -8, src - ;; -(p[7]) adds src = -8, src - shl tmp = tmp, 3 - ;; -(p[8]) adds src = -8, src - ;; -(p[9]) adds src = -8, src - shr.u sh2 = sh2, 3 - ;; -(p[10]) adds src = -8, src - ;; -(p[11]) adds src = -8, src - add len = len, loopcnt - ;; - sub src = src, sh2 - ;; - add len = tmp, len - add src = sh1, src - br.cond.sptk .cpyfew - -.recovery2: -#if MEMLAT != 6 -# error "MEMLAT must be 6!" -#endif - add tmp = -8, src -(p7) br.cond.spnt .gotit - ;; -(p[0]) add tmp = -8, tmp ;; -(p[1]) add tmp = -8, tmp ;; -(p[2]) add tmp = -8, tmp ;; -(p[3]) add tmp = -8, tmp ;; -(p[4]) add tmp = -8, tmp ;; -(p[5]) add tmp = -8, tmp ;; -(p[6]) add tmp = -8, tmp ;; -(p[7]) add tmp = -8, tmp ;; - ld8 r[MEMLAT+2] = [tmp] ;; - xor pos0[1] = r[MEMLAT+2], charx8 ;; - czx1.r pos0[1] = pos0[1] ;; - cmp.ne p7, p6 = 8, pos0[1] -(p7) br.cond.spnt .gotit - br.cond.sptk .back2 -END(memccpy) diff --git a/sysdeps/ia64/memchr.S b/sysdeps/ia64/memchr.S deleted file mode 100644 index d60cf7bd87..0000000000 --- a/sysdeps/ia64/memchr.S +++ /dev/null @@ -1,157 +0,0 @@ -/* Optimized version of the standard memchr() function. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Dan Pop . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Return: the address of the first occurence of chr in str or NULL - - Inputs: - in0: str - in1: chr - in2: byte count - - This implementation assumes little endian mode. For big endian mode, - the instruction czx1.r should be replaced by czx1.l. - - The algorithm is fairly straightforward: search byte by byte until we - we get to a word aligned address, then search word by word as much as - possible; the remaining few bytes are searched one at a time. - - The word by word search is performed by xor-ing the word with a word - containing chr in every byte. If there is a hit, the result will - contain a zero byte in the corresponding position. The presence and - position of that zero byte is detected with a czx instruction. - - All the loops in this function could have had the internal branch removed - if br.ctop and br.cloop could be predicated :-(. */ - -#include -#undef ret - -#define saved_pr r15 -#define saved_lc r16 -#define chr r17 -#define len r18 -#define last r20 -#define val r21 -#define tmp r24 -#define chrx8 r25 -#define loopcnt r30 - -#define str in0 - -ENTRY(__memchr) - .prologue - alloc r2 = ar.pfs, 3, 0, 29, 32 -#include "softpipe.h" - .rotr value[MEMLAT+1], addr[MEMLAT+3], aux[2], poschr[2] - .rotp p[MEMLAT+3] - .save ar.lc, saved_lc - mov saved_lc = ar.lc // save the loop counter - .save pr, saved_pr - mov saved_pr = pr // save the predicates - .body - mov ret0 = str - add last = str, in2 // last byte - and tmp = 7, str // tmp = str % 8 - cmp.ne p7, p0 = r0, r0 // clear p7 - extr.u chr = in1, 0, 8 // chr = (unsigned char) in1 - mov len = in2 - cmp.gtu p6, p0 = 16, in2 // use a simple loop for short -(p6) br.cond.spnt .srchfew ;; // searches - sub loopcnt = 8, tmp // loopcnt = 8 - tmp - cmp.eq p6, p0 = tmp, r0 -(p6) br.cond.sptk .str_aligned;; - sub len = len, loopcnt - adds loopcnt = -1, loopcnt;; - mov ar.lc = loopcnt -.l1: - ld1 val = [ret0], 1 - ;; - cmp.eq p6, p0 = val, chr -(p6) br.cond.spnt .foundit - br.cloop.sptk .l1 ;; -.str_aligned: - cmp.ne p6, p0 = r0, r0 // clear p6 - shr.u loopcnt = len, 3 // loopcnt = len / 8 - and len = 7, len ;; // remaining len = len & 7 - adds loopcnt = -1, loopcnt - mov ar.ec = MEMLAT + 3 - mux1 chrx8 = chr, @brcst ;; // get a word full of chr - mov ar.lc = loopcnt - mov pr.rot = 1 << 16 ;; -.l2: -(p[0]) mov addr[0] = ret0 -(p[0]) ld8.s value[0] = [ret0], 8 // speculative load -(p[MEMLAT]) chk.s value[MEMLAT], .recovery // check and recovery -(p[MEMLAT]) xor aux[0] = value[MEMLAT], chrx8 -(p[MEMLAT+1]) czx1.r poschr[0] = aux[1] -(p[MEMLAT+2]) cmp.ne p7, p0 = 8, poschr[1] -(p7) br.cond.dpnt .foundit - br.ctop.dptk .l2 -.srchfew: - adds loopcnt = -1, len - cmp.eq p6, p0 = len, r0 -(p6) br.cond.spnt .notfound ;; - mov ar.lc = loopcnt -.l3: - ld1 val = [ret0], 1 - ;; - cmp.eq p6, p0 = val, chr -(p6) br.cond.dpnt .foundit - br.cloop.sptk .l3 ;; -.notfound: - cmp.ne p6, p0 = r0, r0 // clear p6 (p7 was already 0 when we got here) - mov ret0 = r0 ;; // return NULL -.foundit: - .pred.rel "mutex" p6, p7 -(p6) adds ret0 = -1, ret0 // if we got here from l1 or l3 -(p7) add ret0 = addr[MEMLAT+2], poschr[1] // if we got here from l2 - mov pr = saved_pr, -1 - mov ar.lc = saved_lc - br.ret.sptk.many b0 - -.recovery: -#if MEMLAT != 6 -# error "MEMLAT must be 6!" -#endif -(p[MEMLAT-6]) add ret0 = -8, ret0;; -(p[MEMLAT-5]) add ret0 = -8, ret0;; -(p[MEMLAT-4]) add ret0 = -8, ret0;; -(p[MEMLAT-3]) add ret0 = -8, ret0;; -(p[MEMLAT-2]) add ret0 = -8, ret0;; -(p[MEMLAT-1]) add ret0 = -8, ret0;; -(p[MEMLAT]) add ret0 = -8, ret0;; -(p[MEMLAT+1]) add ret0 = -8, ret0;; -(p[MEMLAT+2]) add ret0 = -8, ret0;; -.l4: - mov addr[MEMLAT+2] = ret0 - ld8 tmp = [ret0];; // load the first unchecked 8byte - xor aux[1] = tmp, chrx8;; - czx1.r poschr[1] = aux[1];; - cmp.ne p7, p0 = 8, poschr[1];; -(p7) add ret0 = addr[MEMLAT+2], poschr[1];; -(p7) cmp.geu p6, p7 = ret0, last // don't go over the last byte -(p6) br.cond.spnt .notfound;; -(p7) br.cond.spnt .foundit;; - adds ret0 = 8, ret0 // load the next unchecked 8byte - br.sptk .l4;; - -END(__memchr) - -weak_alias (__memchr, memchr) -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/ia64/memcmp.S b/sysdeps/ia64/memcmp.S deleted file mode 100644 index 5c7210150e..0000000000 --- a/sysdeps/ia64/memcmp.S +++ /dev/null @@ -1,164 +0,0 @@ -/* Optimized version of the standard memcmp() function. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Dan Pop . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Return: the result of the comparison - - Inputs: - in0: dest (aka s1) - in1: src (aka s2) - in2: byte count - - In this form, it assumes little endian mode. For big endian mode, - the two shifts in .l2 must be inverted: - - shl tmp1[0] = r[1 + MEMLAT], sh1 // tmp1 = w0 << sh1 - shr.u tmp2[0] = r[0 + MEMLAT], sh2 // tmp2 = w1 >> sh2 - - and all the mux1 instructions should be replaced by plain mov's. */ - -#include -#undef ret - -#define OP_T_THRES 16 -#define OPSIZ 8 -#define MEMLAT 2 - -#define start r15 -#define saved_pr r17 -#define saved_lc r18 -#define dest r19 -#define src r20 -#define len r21 -#define asrc r22 -#define tmp r23 -#define value1 r24 -#define value2 r25 -#define sh2 r28 -#define sh1 r29 -#define loopcnt r30 - -ENTRY(memcmp) - .prologue - alloc r2 = ar.pfs, 3, 37, 0, 40 - - .rotr r[MEMLAT + 2], q[MEMLAT + 5], tmp1[4], tmp2[4], val[2] - .rotp p[MEMLAT + 4 + 1] - - mov ret0 = r0 // by default return value = 0 - .save pr, saved_pr - mov saved_pr = pr // save the predicate registers - .save ar.lc, saved_lc - mov saved_lc = ar.lc // save the loop counter - .body - mov dest = in0 // dest - mov src = in1 // src - mov len = in2 // len - sub tmp = r0, in0 // tmp = -dest - ;; - and loopcnt = 7, tmp // loopcnt = -dest % 8 - cmp.ge p6, p0 = OP_T_THRES, len // is len <= OP_T_THRES -(p6) br.cond.spnt .cmpfew // compare byte by byte - ;; - cmp.eq p6, p0 = loopcnt, r0 -(p6) br.cond.sptk .dest_aligned - sub len = len, loopcnt // len -= -dest % 8 - adds loopcnt = -1, loopcnt // --loopcnt - ;; - mov ar.lc = loopcnt -.l1: // copy -dest % 8 bytes - ld1 value1 = [src], 1 // value = *src++ - ld1 value2 = [dest], 1 - ;; - cmp.ne p6, p0 = value1, value2 -(p6) br.cond.spnt .done - br.cloop.dptk .l1 -.dest_aligned: - and sh1 = 7, src // sh1 = src % 8 - and tmp = -8, len // tmp = len & -OPSIZ - and asrc = -8, src // asrc = src & -OPSIZ -- align src - shr.u loopcnt = len, 3 // loopcnt = len / 8 - and len = 7, len ;; // len = len % 8 - shl sh1 = sh1, 3 // sh1 = 8 * (src % 8) - adds loopcnt = -1, loopcnt // --loopcnt - mov pr.rot = 1 << 16 ;; // set rotating predicates - sub sh2 = 64, sh1 // sh2 = 64 - sh1 - mov ar.lc = loopcnt // set LC - cmp.eq p6, p0 = sh1, r0 // is the src aligned? -(p6) br.cond.sptk .src_aligned - add src = src, tmp // src += len & -OPSIZ - mov ar.ec = MEMLAT + 4 + 1 // four more passes needed - ld8 r[1] = [asrc], 8 ;; // r[1] = w0 - .align 32 - -// We enter this loop with p6 cleared by the above comparison - -.l2: -(p[0]) ld8 r[0] = [asrc], 8 // r[0] = w1 -(p[0]) ld8 q[0] = [dest], 8 -(p[MEMLAT]) shr.u tmp1[0] = r[1 + MEMLAT], sh1 // tmp1 = w0 >> sh1 -(p[MEMLAT]) shl tmp2[0] = r[0 + MEMLAT], sh2 // tmp2 = w1 << sh2 -(p[MEMLAT+4]) cmp.ne p6, p0 = q[MEMLAT + 4], val[1] -(p[MEMLAT+3]) or val[0] = tmp1[3], tmp2[3] // val = tmp1 | tmp2 -(p6) br.cond.spnt .l2exit - br.ctop.sptk .l2 - br.cond.sptk .cmpfew -.l3exit: - mux1 value1 = r[MEMLAT], @rev - mux1 value2 = q[MEMLAT], @rev - cmp.ne p6, p0 = r0, r0 ;; // clear p6 -.l2exit: -(p6) mux1 value1 = val[1], @rev -(p6) mux1 value2 = q[MEMLAT + 4], @rev ;; - cmp.ltu p6, p7 = value2, value1 ;; -(p6) mov ret0 = -1 -(p7) mov ret0 = 1 - mov pr = saved_pr, -1 // restore the predicate registers - mov ar.lc = saved_lc // restore the loop counter - br.ret.sptk.many b0 -.src_aligned: - cmp.ne p6, p0 = r0, r0 // clear p6 - mov ar.ec = MEMLAT + 1 ;; // set EC -.l3: -(p[0]) ld8 r[0] = [src], 8 -(p[0]) ld8 q[0] = [dest], 8 -(p[MEMLAT]) cmp.ne p6, p0 = r[MEMLAT], q[MEMLAT] -(p6) br.cond.spnt .l3exit - br.ctop.dptk .l3 ;; -.cmpfew: - cmp.eq p6, p0 = len, r0 // is len == 0 ? - adds len = -1, len // --len; -(p6) br.cond.spnt .restore_and_exit ;; - mov ar.lc = len -.l4: - ld1 value1 = [src], 1 - ld1 value2 = [dest], 1 - ;; - cmp.ne p6, p0 = value1, value2 -(p6) br.cond.spnt .done - br.cloop.dptk .l4 ;; -.done: -(p6) sub ret0 = value2, value1 // don't execute it if falling thru -.restore_and_exit: - mov pr = saved_pr, -1 // restore the predicate registers - mov ar.lc = saved_lc // restore the loop counter - br.ret.sptk.many b0 -END(memcmp) - -weak_alias (memcmp, bcmp) -libc_hidden_builtin_def (memcmp) diff --git a/sysdeps/ia64/memcpy.S b/sysdeps/ia64/memcpy.S deleted file mode 100644 index 0b5788263d..0000000000 --- a/sysdeps/ia64/memcpy.S +++ /dev/null @@ -1,435 +0,0 @@ -/* Optimized version of the standard memcpy() function. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Dan Pop for Itanium . - Rewritten for McKinley by Sverre Jarp, HP Labs/CERN - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Return: dest - - Inputs: - in0: dest - in1: src - in2: byte count - - An assembly implementation of the algorithm used by the generic C - version from glibc. The case when source and sest are aligned is - treated separately, for extra performance. - - In this form, memcpy assumes little endian mode. For big endian mode, - sh1 must be computed using an extra instruction: sub sh1 = 64, sh1 - and the order of r[MEMLAT] and r[MEMLAT+1] must be reverted in the - shrp instruction. */ - -#define USE_LFETCH -#define USE_FLP -#include -#undef ret - -#define LFETCH_DIST 500 - -#define ALIGN_UNROLL_no 4 // no. of elements -#define ALIGN_UNROLL_sh 2 // (shift amount) - -#define MEMLAT 8 -#define Nrot ((4*(MEMLAT+2) + 7) & ~7) - -#define OP_T_THRES 16 -#define OPSIZ 8 - -#define loopcnt r14 -#define elemcnt r15 -#define saved_pr r16 -#define saved_lc r17 -#define adest r18 -#define dest r19 -#define asrc r20 -#define src r21 -#define len r22 -#define tmp2 r23 -#define tmp3 r24 -#define tmp4 r25 -#define ptable r26 -#define ploop56 r27 -#define loopaddr r28 -#define sh1 r29 -#define ptr1 r30 -#define ptr2 r31 - -#define movi0 mov - -#define p_scr p6 -#define p_xtr p7 -#define p_nxtr p8 -#define p_few p9 - -#if defined(USE_FLP) -#define load ldf8 -#define store stf8 -#define tempreg f6 -#define the_r fr -#define the_s fs -#define the_t ft -#define the_q fq -#define the_w fw -#define the_x fx -#define the_y fy -#define the_z fz -#elif defined(USE_INT) -#define load ld8 -#define store st8 -#define tempreg tmp2 -#define the_r r -#define the_s s -#define the_t t -#define the_q q -#define the_w w -#define the_x x -#define the_y y -#define the_z z -#endif - -#ifdef GAS_ALIGN_BREAKS_UNWIND_INFO -/* Manually force proper loop-alignment. Note: be sure to - double-check the code-layout after making any changes to - this routine! */ -# define ALIGN(n) { nop 0 } -#else -# define ALIGN(n) .align n -#endif - -#if defined(USE_LFETCH) -#define LOOP(shift) \ - ALIGN(32); \ -.loop##shift##: \ -{ .mmb \ -(p[0]) ld8.nt1 r[0] = [asrc], 8 ; \ -(p[0]) lfetch.nt1 [ptr1], 16 ; \ - nop.b 0 ; \ -} { .mib \ -(p[MEMLAT+1]) st8 [dest] = tmp3, 8 ; \ -(p[MEMLAT]) shrp tmp3 = r[MEMLAT], s[MEMLAT+1], shift ; \ - nop.b 0 ;; \ - } { .mmb \ -(p[0]) ld8.nt1 s[0] = [asrc], 8 ; \ -(p[0]) lfetch.nt1 [ptr2], 16 ; \ - nop.b 0 ; \ -} { .mib \ -(p[MEMLAT+1]) st8 [dest] = tmp4, 8 ; \ -(p[MEMLAT]) shrp tmp4 = s[MEMLAT], r[MEMLAT], shift ; \ - br.ctop.sptk.many .loop##shift \ -;; } \ -{ .mib \ - br.cond.sptk.many .copy_bytes ; /* deal with the remaining bytes */ \ -} -#else -#define LOOP(shift) \ - ALIGN(32); \ -.loop##shift##: \ -{ .mmb \ -(p[0]) ld8.nt1 r[0] = [asrc], 8 ; \ - nop.b 0 ; \ -} { .mib \ -(p[MEMLAT+1]) st8 [dest] = tmp3, 8 ; \ -(p[MEMLAT]) shrp tmp3 = r[MEMLAT], s[MEMLAT+1], shift ; \ - nop.b 0 ;; \ - } { .mmb \ -(p[0]) ld8.nt1 s[0] = [asrc], 8 ; \ - nop.b 0 ; \ -} { .mib \ -(p[MEMLAT+1]) st8 [dest] = tmp4, 8 ; \ -(p[MEMLAT]) shrp tmp4 = s[MEMLAT], r[MEMLAT], shift ; \ - br.ctop.sptk.many .loop##shift \ -;; } \ -{ .mib \ - br.cond.sptk.many .copy_bytes ; /* deal with the remaining bytes */ \ -} -#endif - - -ENTRY(memcpy) -{ .mmi - .prologue - alloc r2 = ar.pfs, 3, Nrot - 3, 0, Nrot - .rotr r[MEMLAT+1], s[MEMLAT+2], q[MEMLAT+1], t[MEMLAT+1] - .rotp p[MEMLAT+2] - .rotf fr[MEMLAT+1], fq[MEMLAT+1], fs[MEMLAT+1], ft[MEMLAT+1] - mov ret0 = in0 // return tmp2 = dest - .save pr, saved_pr - movi0 saved_pr = pr // save the predicate registers -} { .mmi - and tmp4 = 7, in0 // check if destination is aligned - mov dest = in0 // dest - mov src = in1 // src -;; } -{ .mii - cmp.eq p_scr, p0 = in2, r0 // if (len == 0) - .save ar.lc, saved_lc - movi0 saved_lc = ar.lc // save the loop counter - .body - cmp.ge p_few, p0 = OP_T_THRES, in2 // is len <= OP_T_THRESH -} { .mbb - mov len = in2 // len -(p_scr) br.cond.dpnt.few .restore_and_exit // Branch no. 1: return dest -(p_few) br.cond.dpnt.many .copy_bytes // Branch no. 2: copy byte by byte -;; } -{ .mmi -#if defined(USE_LFETCH) - lfetch.nt1 [dest] // - lfetch.nt1 [src] // -#endif - shr.u elemcnt = len, 3 // elemcnt = len / 8 -} { .mib - cmp.eq p_scr, p0 = tmp4, r0 // is destination aligned? - sub loopcnt = 7, tmp4 // -(p_scr) br.cond.dptk.many .dest_aligned -;; } -{ .mmi - ld1 tmp2 = [src], 1 // - sub len = len, loopcnt, 1 // reduce len - movi0 ar.lc = loopcnt // -} { .mib - cmp.ne p_scr, p0 = 0, loopcnt // avoid loading beyond end-point -;; } - -.l0: // ---------------------------- // L0: Align src on 8-byte boundary -{ .mmi - st1 [dest] = tmp2, 1 // -(p_scr) ld1 tmp2 = [src], 1 // -} { .mib - cmp.lt p_scr, p0 = 1, loopcnt // avoid load beyond end-point - add loopcnt = -1, loopcnt - br.cloop.dptk.few .l0 // -;; } - -.dest_aligned: -{ .mmi - and tmp4 = 7, src // ready for alignment check - shr.u elemcnt = len, 3 // elemcnt = len / 8 -;; } -{ .mib - cmp.ne p_scr, p0 = tmp4, r0 // is source also aligned - tbit.nz p_xtr, p_nxtr = src, 3 // prepare a separate move if src -} { .mib // is not 16B aligned - add ptr2 = LFETCH_DIST, dest // prefetch address - add ptr1 = LFETCH_DIST, src -(p_scr) br.cond.dptk.many .src_not_aligned -;; } - -// The optimal case, when dest, and src are aligned - -.both_aligned: -{ .mmi - .pred.rel "mutex",p_xtr,p_nxtr -(p_xtr) cmp.gt p_scr, p0 = ALIGN_UNROLL_no+1, elemcnt // Need N + 1 to qualify -(p_nxtr) cmp.gt p_scr, p0 = ALIGN_UNROLL_no, elemcnt // Need only N to qualify - movi0 pr.rot = 1 << 16 // set rotating predicates -} { .mib -(p_scr) br.cond.dpnt.many .copy_full_words -;; } - -{ .mmi -(p_xtr) load tempreg = [src], 8 -(p_xtr) add elemcnt = -1, elemcnt - movi0 ar.ec = MEMLAT + 1 // set the epilog counter -;; } -{ .mmi -(p_xtr) add len = -8, len // - add asrc = 16, src // one bank apart (for USE_INT) - shr.u loopcnt = elemcnt, ALIGN_UNROLL_sh // cater for unrolling -;;} -{ .mmi - add loopcnt = -1, loopcnt -(p_xtr) store [dest] = tempreg, 8 // copy the "extra" word - nop.i 0 -;; } -{ .mib - add adest = 16, dest - movi0 ar.lc = loopcnt // set the loop counter -;; } - -#ifdef GAS_ALIGN_BREAKS_UNWIND_INFO - { nop 0 } -#else - .align 32 -#endif -#if defined(USE_FLP) -.l1: // ------------------------------- // L1: Everything a multiple of 8 -{ .mmi -#if defined(USE_LFETCH) -(p[0]) lfetch.nt1 [ptr2],32 -#endif -(p[0]) ldfp8 the_r[0],the_q[0] = [src], 16 -(p[0]) add len = -32, len -} {.mmb -(p[MEMLAT]) store [dest] = the_r[MEMLAT], 8 -(p[MEMLAT]) store [adest] = the_s[MEMLAT], 8 -;; } -{ .mmi -#if defined(USE_LFETCH) -(p[0]) lfetch.nt1 [ptr1],32 -#endif -(p[0]) ldfp8 the_s[0], the_t[0] = [src], 16 -} {.mmb -(p[MEMLAT]) store [dest] = the_q[MEMLAT], 24 -(p[MEMLAT]) store [adest] = the_t[MEMLAT], 24 - br.ctop.dptk.many .l1 -;; } -#elif defined(USE_INT) -.l1: // ------------------------------- // L1: Everything a multiple of 8 -{ .mmi -(p[0]) load the_r[0] = [src], 8 -(p[0]) load the_q[0] = [asrc], 8 -(p[0]) add len = -32, len -} {.mmb -(p[MEMLAT]) store [dest] = the_r[MEMLAT], 8 -(p[MEMLAT]) store [adest] = the_q[MEMLAT], 8 -;; } -{ .mmi -(p[0]) load the_s[0] = [src], 24 -(p[0]) load the_t[0] = [asrc], 24 -} {.mmb -(p[MEMLAT]) store [dest] = the_s[MEMLAT], 24 -(p[MEMLAT]) store [adest] = the_t[MEMLAT], 24 -#if defined(USE_LFETCH) -;; } -{ .mmb -(p[0]) lfetch.nt1 [ptr2],32 -(p[0]) lfetch.nt1 [ptr1],32 -#endif - br.ctop.dptk.many .l1 -;; } -#endif - -.copy_full_words: -{ .mib - cmp.gt p_scr, p0 = 8, len // - shr.u elemcnt = len, 3 // -(p_scr) br.cond.dpnt.many .copy_bytes -;; } -{ .mii - load tempreg = [src], 8 - add loopcnt = -1, elemcnt // -;; } -{ .mii - cmp.ne p_scr, p0 = 0, loopcnt // - mov ar.lc = loopcnt // -;; } - -.l2: // ------------------------------- // L2: Max 4 words copied separately -{ .mmi - store [dest] = tempreg, 8 -(p_scr) load tempreg = [src], 8 // - add len = -8, len -} { .mib - cmp.lt p_scr, p0 = 1, loopcnt // avoid load beyond end-point - add loopcnt = -1, loopcnt - br.cloop.dptk.few .l2 -;; } - -.copy_bytes: -{ .mib - cmp.eq p_scr, p0 = len, r0 // is len == 0 ? - add loopcnt = -1, len // len--; -(p_scr) br.cond.spnt .restore_and_exit -;; } -{ .mii - ld1 tmp2 = [src], 1 - movi0 ar.lc = loopcnt - cmp.ne p_scr, p0 = 0, loopcnt // avoid load beyond end-point -;; } - -.l3: // ------------------------------- // L3: Final byte move -{ .mmi - st1 [dest] = tmp2, 1 -(p_scr) ld1 tmp2 = [src], 1 -} { .mib - cmp.lt p_scr, p0 = 1, loopcnt // avoid load beyond end-point - add loopcnt = -1, loopcnt - br.cloop.dptk.few .l3 -;; } - -.restore_and_exit: -{ .mmi - movi0 pr = saved_pr, -1 // restore the predicate registers -;; } -{ .mib - movi0 ar.lc = saved_lc // restore the loop counter - br.ret.sptk.many b0 -;; } - - -.src_not_aligned: -{ .mmi - cmp.gt p_scr, p0 = 16, len - and sh1 = 7, src // sh1 = src % 8 - shr.u loopcnt = len, 4 // element-cnt = len / 16 -} { .mib - add tmp4 = @ltoff(.table), gp - add tmp3 = @ltoff(.loop56), gp -(p_scr) br.cond.dpnt.many .copy_bytes // do byte by byte if too few -;; } -{ .mmi - and asrc = -8, src // asrc = (-8) -- align src for loop - add loopcnt = -1, loopcnt // loopcnt-- - shl sh1 = sh1, 3 // sh1 = 8 * (src % 8) -} { .mmi - ld8 ptable = [tmp4] // ptable = &table - ld8 ploop56 = [tmp3] // ploop56 = &loop56 - and tmp2 = -16, len // tmp2 = len & -OPSIZ -;; } -{ .mmi - add tmp3 = ptable, sh1 // tmp3 = &table + sh1 - add src = src, tmp2 // src += len & (-16) - movi0 ar.lc = loopcnt // set LC -;; } -{ .mmi - ld8 tmp4 = [tmp3] // tmp4 = loop offset - sub len = len, tmp2 // len -= len & (-16) - movi0 ar.ec = MEMLAT + 2 // one more pass needed -;; } -{ .mmi - ld8 s[1] = [asrc], 8 // preload - sub loopaddr = ploop56,tmp4 // loopadd = &loop56 - loop offset - movi0 pr.rot = 1 << 16 // set rotating predicates -;; } -{ .mib - nop.m 0 - movi0 b6 = loopaddr - br b6 // jump to the appropriate loop -;; } - - LOOP(8) - LOOP(16) - LOOP(24) - LOOP(32) - LOOP(40) - LOOP(48) - LOOP(56) -END(memcpy) -libc_hidden_builtin_def (memcpy) - - .rodata - .align 8 -.table: - data8 0 // dummy entry - data8 .loop56 - .loop8 - data8 .loop56 - .loop16 - data8 .loop56 - .loop24 - data8 .loop56 - .loop32 - data8 .loop56 - .loop40 - data8 .loop56 - .loop48 - data8 .loop56 - .loop56 diff --git a/sysdeps/ia64/memmove.S b/sysdeps/ia64/memmove.S deleted file mode 100644 index 87a14b46c8..0000000000 --- a/sysdeps/ia64/memmove.S +++ /dev/null @@ -1,250 +0,0 @@ -/* Optimized version of the standard memmove() function. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Dan Pop . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Return: dest - - Inputs: - in0: dest - in1: src - in2: byte count - - The core of the function is the memcpy implementation used in memcpy.S. - When bytes have to be copied backwards, only the easy case, when - all arguments are multiples of 8, is optimised. - - In this form, it assumes little endian mode. For big endian mode, - sh1 must be computed using an extra instruction: sub sh1 = 64, sh1 - or the UM.be bit should be cleared at the beginning and set at the end. */ - -#include -#undef ret - -#define OP_T_THRES 16 -#define OPSIZ 8 - -#define adest r15 -#define saved_pr r17 -#define saved_lc r18 -#define dest r19 -#define src r20 -#define len r21 -#define asrc r22 -#define tmp2 r23 -#define tmp3 r24 -#define tmp4 r25 -#define ptable r26 -#define ploop56 r27 -#define loopaddr r28 -#define sh1 r29 -#define loopcnt r30 -#define value r31 - -#ifdef GAS_ALIGN_BREAKS_UNWIND_INFO -# define ALIGN(n) { nop 0 } -#else -# define ALIGN(n) .align n -#endif - -#define LOOP(shift) \ - ALIGN(32); \ -.loop##shift##: \ -(p[0]) ld8 r[0] = [asrc], 8 ; /* w1 */ \ -(p[MEMLAT+1]) st8 [dest] = value, 8 ; \ -(p[MEMLAT]) shrp value = r[MEMLAT], r[MEMLAT+1], shift ; \ - nop.b 0 ; \ - nop.b 0 ; \ - br.ctop.sptk .loop##shift ; \ - br.cond.sptk .cpyfew ; /* deal with the remaining bytes */ - -#define MEMLAT 21 -#define Nrot (((2*MEMLAT+3) + 7) & ~7) - -ENTRY(memmove) - .prologue - alloc r2 = ar.pfs, 3, Nrot - 3, 0, Nrot - .rotr r[MEMLAT + 2], q[MEMLAT + 1] - .rotp p[MEMLAT + 2] - mov ret0 = in0 // return value = dest - .save pr, saved_pr - mov saved_pr = pr // save the predicate registers - .save ar.lc, saved_lc - mov saved_lc = ar.lc // save the loop counter - .body - or tmp3 = in0, in1 ;; // tmp3 = dest | src - or tmp3 = tmp3, in2 // tmp3 = dest | src | len - mov dest = in0 // dest - mov src = in1 // src - mov len = in2 // len - sub tmp2 = r0, in0 // tmp2 = -dest - cmp.eq p6, p0 = in2, r0 // if (len == 0) -(p6) br.cond.spnt .restore_and_exit;;// return dest; - and tmp4 = 7, tmp3 // tmp4 = (dest | src | len) & 7 - cmp.le p6, p0 = dest, src // if dest <= src it's always safe -(p6) br.cond.spnt .forward // to copy forward - add tmp3 = src, len;; - cmp.lt p6, p0 = dest, tmp3 // if dest > src && dest < src + len -(p6) br.cond.spnt .backward // we have to copy backward - -.forward: - shr.u loopcnt = len, 4 ;; // loopcnt = len / 16 - cmp.ne p6, p0 = tmp4, r0 // if ((dest | src | len) & 7 != 0) -(p6) br.cond.sptk .next // goto next; - -// The optimal case, when dest, src and len are all multiples of 8 - - and tmp3 = 0xf, len - mov pr.rot = 1 << 16 // set rotating predicates - mov ar.ec = MEMLAT + 1 ;; // set the epilog counter - cmp.ne p6, p0 = tmp3, r0 // do we have to copy an extra word? - adds loopcnt = -1, loopcnt;; // --loopcnt -(p6) ld8 value = [src], 8;; -(p6) st8 [dest] = value, 8 // copy the "odd" word - mov ar.lc = loopcnt // set the loop counter - cmp.eq p6, p0 = 8, len -(p6) br.cond.spnt .restore_and_exit;;// the one-word special case - adds adest = 8, dest // set adest one word ahead of dest - adds asrc = 8, src ;; // set asrc one word ahead of src - nop.b 0 // get the "golden" alignment for - nop.b 0 // the next loop -.l0: -(p[0]) ld8 r[0] = [src], 16 -(p[0]) ld8 q[0] = [asrc], 16 -(p[MEMLAT]) st8 [dest] = r[MEMLAT], 16 -(p[MEMLAT]) st8 [adest] = q[MEMLAT], 16 - br.ctop.dptk .l0 ;; - - mov pr = saved_pr, -1 // restore the predicate registers - mov ar.lc = saved_lc // restore the loop counter - br.ret.sptk.many b0 -.next: - cmp.ge p6, p0 = OP_T_THRES, len // is len <= OP_T_THRES - and loopcnt = 7, tmp2 // loopcnt = -dest % 8 -(p6) br.cond.spnt .cpyfew // copy byte by byte - ;; - cmp.eq p6, p0 = loopcnt, r0 -(p6) br.cond.sptk .dest_aligned - sub len = len, loopcnt // len -= -dest % 8 - adds loopcnt = -1, loopcnt // --loopcnt - ;; - mov ar.lc = loopcnt -.l1: // copy -dest % 8 bytes - ld1 value = [src], 1 // value = *src++ - ;; - st1 [dest] = value, 1 // *dest++ = value - br.cloop.dptk .l1 -.dest_aligned: - and sh1 = 7, src // sh1 = src % 8 - and tmp2 = -8, len // tmp2 = len & -OPSIZ - and asrc = -8, src // asrc = src & -OPSIZ -- align src - shr.u loopcnt = len, 3 // loopcnt = len / 8 - and len = 7, len;; // len = len % 8 - adds loopcnt = -1, loopcnt // --loopcnt - addl tmp4 = @ltoff(.table), gp - addl tmp3 = @ltoff(.loop56), gp - mov ar.ec = MEMLAT + 1 // set EC - mov pr.rot = 1 << 16;; // set rotating predicates - mov ar.lc = loopcnt // set LC - cmp.eq p6, p0 = sh1, r0 // is the src aligned? -(p6) br.cond.sptk .src_aligned - add src = src, tmp2 // src += len & -OPSIZ - shl sh1 = sh1, 3 // sh1 = 8 * (src % 8) - ld8 ploop56 = [tmp3] // ploop56 = &loop56 - ld8 ptable = [tmp4];; // ptable = &table - add tmp3 = ptable, sh1;; // tmp3 = &table + sh1 - mov ar.ec = MEMLAT + 1 + 1 // one more pass needed - ld8 tmp4 = [tmp3];; // tmp4 = loop offset - sub loopaddr = ploop56,tmp4 // loopadd = &loop56 - loop offset - ld8 r[1] = [asrc], 8;; // w0 - mov b6 = loopaddr;; - br b6 // jump to the appropriate loop - - LOOP(8) - LOOP(16) - LOOP(24) - LOOP(32) - LOOP(40) - LOOP(48) - LOOP(56) - -.src_aligned: -.l3: -(p[0]) ld8 r[0] = [src], 8 -(p[MEMLAT]) st8 [dest] = r[MEMLAT], 8 - br.ctop.dptk .l3 -.cpyfew: - cmp.eq p6, p0 = len, r0 // is len == 0 ? - adds len = -1, len // --len; -(p6) br.cond.spnt .restore_and_exit ;; - mov ar.lc = len -.l4: - ld1 value = [src], 1 - ;; - st1 [dest] = value, 1 - br.cloop.dptk .l4 ;; -.restore_and_exit: - mov pr = saved_pr, -1 // restore the predicate registers - mov ar.lc = saved_lc // restore the loop counter - br.ret.sptk.many b0 - -// In the case of a backward copy, optimise only the case when everything -// is a multiple of 8, otherwise copy byte by byte. The backward copy is -// used only when the blocks are overlapping and dest > src. - -.backward: - shr.u loopcnt = len, 3 // loopcnt = len / 8 - add src = src, len // src points one byte past the end - add dest = dest, len ;; // dest points one byte past the end - mov ar.ec = MEMLAT + 1 // set the epilog counter - mov pr.rot = 1 << 16 // set rotating predicates - adds loopcnt = -1, loopcnt // --loopcnt - cmp.ne p6, p0 = tmp4, r0 // if ((dest | src | len) & 7 != 0) -(p6) br.cond.sptk .bytecopy ;; // copy byte by byte backward - adds src = -8, src // src points to the last word - adds dest = -8, dest // dest points to the last word - mov ar.lc = loopcnt;; // set the loop counter -.l5: -(p[0]) ld8 r[0] = [src], -8 -(p[MEMLAT]) st8 [dest] = r[MEMLAT], -8 - br.ctop.dptk .l5 - br.cond.sptk .restore_and_exit -.bytecopy: - adds src = -1, src // src points to the last byte - adds dest = -1, dest // dest points to the last byte - adds loopcnt = -1, len;; // loopcnt = len - 1 - mov ar.lc = loopcnt;; // set the loop counter -.l6: -(p[0]) ld1 r[0] = [src], -1 -(p[MEMLAT]) st1 [dest] = r[MEMLAT], -1 - br.ctop.dptk .l6 - br.cond.sptk .restore_and_exit -END(memmove) - - .rodata - .align 8 -.table: - data8 0 // dummy entry - data8 .loop56 - .loop8 - data8 .loop56 - .loop16 - data8 .loop56 - .loop24 - data8 .loop56 - .loop32 - data8 .loop56 - .loop40 - data8 .loop56 - .loop48 - data8 .loop56 - .loop56 - -libc_hidden_builtin_def (memmove) diff --git a/sysdeps/ia64/memset.S b/sysdeps/ia64/memset.S deleted file mode 100644 index 8f0b984810..0000000000 --- a/sysdeps/ia64/memset.S +++ /dev/null @@ -1,399 +0,0 @@ -/* Optimized version of the standard memset() function. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Dan Pop for Itanium . - Rewritten for McKinley by Sverre Jarp, HP Labs/CERN - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Return: dest - - Inputs: - in0: dest - in1: value - in2: count - - The algorithm is fairly straightforward: set byte by byte until we - we get to a 16B-aligned address, then loop on 128 B chunks using an - early store as prefetching, then loop on 32B chucks, then clear remaining - words, finally clear remaining bytes. - Since a stf.spill f0 can store 16B in one go, we use this instruction - to get peak speed when value = 0. */ - -#include -#undef ret - -#define dest in0 -#define value in1 -#define cnt in2 - -#define tmp r31 -#define save_lc r30 -#define ptr0 r29 -#define ptr1 r28 -#define ptr2 r27 -#define ptr3 r26 -#define ptr9 r24 -#define loopcnt r23 -#define linecnt r22 -#define bytecnt r21 - -#define fvalue f6 - -// This routine uses only scratch predicate registers (p6 - p15) -#define p_scr p6 // default register for same-cycle branches -#define p_nz p7 -#define p_zr p8 -#define p_unalgn p9 -#define p_y p11 -#define p_n p12 -#define p_yy p13 -#define p_nn p14 - -#define movi0 mov - -#define MIN1 15 -#define MIN1P1HALF 8 -#define LINE_SIZE 128 -#define LSIZE_SH 7 // shift amount -#define PREF_AHEAD 8 - -#define USE_FLP -#if defined(USE_INT) -#define store st8 -#define myval value -#elif defined(USE_FLP) -#define store stf8 -#define myval fvalue -#endif - -.align 64 -ENTRY(memset) -{ .mmi - .prologue - alloc tmp = ar.pfs, 3, 0, 0, 0 - lfetch.nt1 [dest] - .save ar.lc, save_lc - movi0 save_lc = ar.lc -} { .mmi - .body - mov ret0 = dest // return value - cmp.ne p_nz, p_zr = value, r0 // use stf.spill if value is zero - cmp.eq p_scr, p0 = cnt, r0 -;; } -{ .mmi - and ptr2 = -(MIN1+1), dest // aligned address - and tmp = MIN1, dest // prepare to check for alignment - tbit.nz p_y, p_n = dest, 0 // Do we have an odd address? (M_B_U) -} { .mib - mov ptr1 = dest - mux1 value = value, @brcst // create 8 identical bytes in word -(p_scr) br.ret.dpnt.many rp // return immediately if count = 0 -;; } -{ .mib - cmp.ne p_unalgn, p0 = tmp, r0 -} { .mib // NB: # of bytes to move is 1 higher - sub bytecnt = (MIN1+1), tmp // than loopcnt - cmp.gt p_scr, p0 = 16, cnt // is it a minimalistic task? -(p_scr) br.cond.dptk.many .move_bytes_unaligned // go move just a few (M_B_U) -;; } -{ .mmi -(p_unalgn) add ptr1 = (MIN1+1), ptr2 // after alignment -(p_unalgn) add ptr2 = MIN1P1HALF, ptr2 // after alignment -(p_unalgn) tbit.nz.unc p_y, p_n = bytecnt, 3 // should we do a st8 ? -;; } -{ .mib -(p_y) add cnt = -8, cnt -(p_unalgn) tbit.nz.unc p_yy, p_nn = bytecnt, 2 // should we do a st4 ? -} { .mib -(p_y) st8 [ptr2] = value, -4 -(p_n) add ptr2 = 4, ptr2 -;; } -{ .mib -(p_yy) add cnt = -4, cnt -(p_unalgn) tbit.nz.unc p_y, p_n = bytecnt, 1 // should we do a st2 ? -} { .mib -(p_yy) st4 [ptr2] = value, -2 -(p_nn) add ptr2 = 2, ptr2 -;; } -{ .mmi - mov tmp = LINE_SIZE+1 // for compare -(p_y) add cnt = -2, cnt -(p_unalgn) tbit.nz.unc p_yy, p_nn = bytecnt, 0 // should we do a st1 ? -} { .mmi - setf.sig fvalue=value // transfer value to FLP side -(p_y) st2 [ptr2] = value, -1 -(p_n) add ptr2 = 1, ptr2 -;; } - -{ .mmi -(p_yy) st1 [ptr2] = value - cmp.gt p_scr, p0 = tmp, cnt // is it a minimalistic task? -} { .mbb -(p_yy) add cnt = -1, cnt -(p_scr) br.cond.dpnt.many .fraction_of_line // go move just a few -;; } - -{ .mib - nop.m 0 - shr.u linecnt = cnt, LSIZE_SH -(p_zr) br.cond.dptk.many .l1b // Jump to use stf.spill -;; } - -#ifndef GAS_ALIGN_BREAKS_UNWIND_INFO - .align 32 // -------- // L1A: store ahead into cache lines; fill later -#endif -{ .mmi - and tmp = -(LINE_SIZE), cnt // compute end of range - mov ptr9 = ptr1 // used for prefetching - and cnt = (LINE_SIZE-1), cnt // remainder -} { .mmi - mov loopcnt = PREF_AHEAD-1 // default prefetch loop - cmp.gt p_scr, p0 = PREF_AHEAD, linecnt // check against actual value -;; } -{ .mmi -(p_scr) add loopcnt = -1, linecnt // start of stores - add ptr2 = 8, ptr1 // (beyond prefetch stores) - add ptr1 = tmp, ptr1 // first address beyond total -;; } // range -{ .mmi - add tmp = -1, linecnt // next loop count - movi0 ar.lc = loopcnt -;; } -.pref_l1a: -{ .mib - store [ptr9] = myval, 128 // Do stores one cache line apart - nop.i 0 - br.cloop.dptk.few .pref_l1a -;; } -{ .mmi - add ptr0 = 16, ptr2 // Two stores in parallel - movi0 ar.lc = tmp -;; } -.l1ax: - { .mmi - store [ptr2] = myval, 8 - store [ptr0] = myval, 8 - ;; } - { .mmi - store [ptr2] = myval, 24 - store [ptr0] = myval, 24 - ;; } - { .mmi - store [ptr2] = myval, 8 - store [ptr0] = myval, 8 - ;; } - { .mmi - store [ptr2] = myval, 24 - store [ptr0] = myval, 24 - ;; } - { .mmi - store [ptr2] = myval, 8 - store [ptr0] = myval, 8 - ;; } - { .mmi - store [ptr2] = myval, 24 - store [ptr0] = myval, 24 - ;; } - { .mmi - store [ptr2] = myval, 8 - store [ptr0] = myval, 32 - cmp.lt p_scr, p0 = ptr9, ptr1 // do we need more prefetching? - ;; } -{ .mmb - store [ptr2] = myval, 24 -(p_scr) store [ptr9] = myval, 128 - br.cloop.dptk.few .l1ax -;; } -{ .mbb - cmp.le p_scr, p0 = 8, cnt // just a few bytes left ? -(p_scr) br.cond.dpnt.many .fraction_of_line // Branch no. 2 - br.cond.dpnt.many .move_bytes_from_alignment // Branch no. 3 -;; } - -#ifdef GAS_ALIGN_BREAKS_UNWIND_INFO - { nop 0 } -#else - .align 32 -#endif -.l1b: // ------------------ // L1B: store ahead into cache lines; fill later -{ .mmi - and tmp = -(LINE_SIZE), cnt // compute end of range - mov ptr9 = ptr1 // used for prefetching - and cnt = (LINE_SIZE-1), cnt // remainder -} { .mmi - mov loopcnt = PREF_AHEAD-1 // default prefetch loop - cmp.gt p_scr, p0 = PREF_AHEAD, linecnt // check against actual value -;; } -{ .mmi -(p_scr) add loopcnt = -1, linecnt - add ptr2 = 16, ptr1 // start of stores (beyond prefetch stores) - add ptr1 = tmp, ptr1 // first address beyond total range -;; } -{ .mmi - add tmp = -1, linecnt // next loop count - movi0 ar.lc = loopcnt -;; } -.pref_l1b: -{ .mib - stf.spill [ptr9] = f0, 128 // Do stores one cache line apart - nop.i 0 - br.cloop.dptk.few .pref_l1b -;; } -{ .mmi - add ptr0 = 16, ptr2 // Two stores in parallel - movi0 ar.lc = tmp -;; } -.l1bx: - { .mmi - stf.spill [ptr2] = f0, 32 - stf.spill [ptr0] = f0, 32 - ;; } - { .mmi - stf.spill [ptr2] = f0, 32 - stf.spill [ptr0] = f0, 32 - ;; } - { .mmi - stf.spill [ptr2] = f0, 32 - stf.spill [ptr0] = f0, 64 - cmp.lt p_scr, p0 = ptr9, ptr1 // do we need more prefetching? - ;; } -{ .mmb - stf.spill [ptr2] = f0, 32 -(p_scr) stf.spill [ptr9] = f0, 128 - br.cloop.dptk.few .l1bx -;; } -{ .mib - cmp.gt p_scr, p0 = 8, cnt // just a few bytes left ? -(p_scr) br.cond.dpnt.many .move_bytes_from_alignment -;; } - -.fraction_of_line: -{ .mib - add ptr2 = 16, ptr1 - shr.u loopcnt = cnt, 5 // loopcnt = cnt / 32 -;; } -{ .mib - cmp.eq p_scr, p0 = loopcnt, r0 - add loopcnt = -1, loopcnt -(p_scr) br.cond.dpnt.many store_words -;; } -{ .mib - and cnt = 0x1f, cnt // compute the remaining cnt - movi0 ar.lc = loopcnt -;; } -#ifndef GAS_ALIGN_BREAKS_UNWIND_INFO - .align 32 -#endif -.l2: // ---------------------------- // L2A: store 32B in 2 cycles -{ .mmb - store [ptr1] = myval, 8 - store [ptr2] = myval, 8 -;; } { .mmb - store [ptr1] = myval, 24 - store [ptr2] = myval, 24 - br.cloop.dptk.many .l2 -;; } -store_words: -{ .mib - cmp.gt p_scr, p0 = 8, cnt // just a few bytes left ? -(p_scr) br.cond.dpnt.many .move_bytes_from_alignment // Branch -;; } - -{ .mmi - store [ptr1] = myval, 8 // store - cmp.le p_y, p_n = 16, cnt // - add cnt = -8, cnt // subtract -;; } -{ .mmi -(p_y) store [ptr1] = myval, 8 // store -(p_y) cmp.le.unc p_yy, p_nn = 16, cnt // -(p_y) add cnt = -8, cnt // subtract -;; } -{ .mmi // store -(p_yy) store [ptr1] = myval, 8 // -(p_yy) add cnt = -8, cnt // subtract -;; } - -.move_bytes_from_alignment: -{ .mib - cmp.eq p_scr, p0 = cnt, r0 - tbit.nz.unc p_y, p0 = cnt, 2 // should we terminate with a st4 ? -(p_scr) br.cond.dpnt.few .restore_and_exit -;; } -{ .mib -(p_y) st4 [ptr1] = value, 4 - tbit.nz.unc p_yy, p0 = cnt, 1 // should we terminate with a st2 ? -;; } -{ .mib -(p_yy) st2 [ptr1] = value, 2 - tbit.nz.unc p_y, p0 = cnt, 0 -;; } - -{ .mib -(p_y) st1 [ptr1] = value -;; } -.restore_and_exit: -{ .mib - nop.m 0 - movi0 ar.lc = save_lc - br.ret.sptk.many rp -;; } - -.move_bytes_unaligned: -{ .mmi - .pred.rel "mutex",p_y, p_n - .pred.rel "mutex",p_yy, p_nn -(p_n) cmp.le p_yy, p_nn = 4, cnt -(p_y) cmp.le p_yy, p_nn = 5, cnt -(p_n) add ptr2 = 2, ptr1 -} { .mmi -(p_y) add ptr2 = 3, ptr1 -(p_y) st1 [ptr1] = value, 1 // fill 1 (odd-aligned) byte -(p_y) add cnt = -1, cnt // [15, 14 (or less) left] -;; } -{ .mmi -(p_yy) cmp.le.unc p_y, p0 = 8, cnt - add ptr3 = ptr1, cnt // prepare last store - movi0 ar.lc = save_lc -} { .mmi -(p_yy) st2 [ptr1] = value, 4 // fill 2 (aligned) bytes -(p_yy) st2 [ptr2] = value, 4 // fill 2 (aligned) bytes -(p_yy) add cnt = -4, cnt // [11, 10 (o less) left] -;; } -{ .mmi -(p_y) cmp.le.unc p_yy, p0 = 8, cnt - add ptr3 = -1, ptr3 // last store - tbit.nz p_scr, p0 = cnt, 1 // will there be a st2 at the end ? -} { .mmi -(p_y) st2 [ptr1] = value, 4 // fill 2 (aligned) bytes -(p_y) st2 [ptr2] = value, 4 // fill 2 (aligned) bytes -(p_y) add cnt = -4, cnt // [7, 6 (or less) left] -;; } -{ .mmi -(p_yy) st2 [ptr1] = value, 4 // fill 2 (aligned) bytes -(p_yy) st2 [ptr2] = value, 4 // fill 2 (aligned) bytes - // [3, 2 (or less) left] - tbit.nz p_y, p0 = cnt, 0 // will there be a st1 at the end ? -} { .mmi -(p_yy) add cnt = -4, cnt -;; } -{ .mmb -(p_scr) st2 [ptr1] = value // fill 2 (aligned) bytes -(p_y) st1 [ptr3] = value // fill last byte (using ptr3) - br.ret.sptk.many rp -;; } -END(memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/ia64/memusage.h b/sysdeps/ia64/memusage.h deleted file mode 100644 index 02d483dd9b..0000000000 --- a/sysdeps/ia64/memusage.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define GETSP() ({ register uintptr_t stack_ptr asm ("%r12"); stack_ptr; }) -#define GETTIME(low, high) \ - { \ - hp_timing_t __now; \ - HP_TIMING_NOW (__now); \ - low = __now & 0xffffffff; \ - high = __now >> 32; \ - } - -#include diff --git a/sysdeps/ia64/nptl/Makefile b/sysdeps/ia64/nptl/Makefile deleted file mode 100644 index bf21dbd658..0000000000 --- a/sysdeps/ia64/nptl/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (C) 2003-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif - -ifeq ($(subdir),nptl) -libpthread-routines += sysdep sigblock sigprocmask -libpthread-shared-only-routines += sysdep sigblock sigprocmask -endif diff --git a/sysdeps/ia64/nptl/bits/pthreadtypes-arch.h b/sysdeps/ia64/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index 631cb33d09..0000000000 --- a/sysdeps/ia64/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -#define _BITS_PTHREADTYPES_ARCH_H 1 - -#define __SIZEOF_PTHREAD_ATTR_T 56 -#define __SIZEOF_PTHREAD_MUTEX_T 40 -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_RWLOCK_T 56 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -#define __SIZEOF_PTHREAD_BARRIER_T 32 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - -/* Definitions for internal mutex struct. */ -#define __PTHREAD_COMPAT_PADDING_MID -#define __PTHREAD_COMPAT_PADDING_END -#define __PTHREAD_MUTEX_LOCK_ELISION 0 - -#define __LOCK_ALIGNMENT -#define __ONCE_ALIGNMENT - -/* Data structure for reader-write lock variable handling. The - structure of the attribute type is not exposed on purpose. */ -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; - int __cur_writer; - int __shared; - unsigned long int __pad1; - unsigned long int __pad2; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned int __flags; -}; - -#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/ia64/nptl/bits/semaphore.h b/sysdeps/ia64/nptl/bits/semaphore.h deleted file mode 100644 index 65130ddf2c..0000000000 --- a/sysdeps/ia64/nptl/bits/semaphore.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - - -#define __SIZEOF_SEM_T 32 - - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/sysdeps/ia64/nptl/pthread_spin_lock.c b/sysdeps/ia64/nptl/pthread_spin_lock.c deleted file mode 100644 index 6635433d86..0000000000 --- a/sysdeps/ia64/nptl/pthread_spin_lock.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "pthreadP.h" - -int -pthread_spin_lock (pthread_spinlock_t *lock) -{ - int *p = (int *) lock; - - while (__builtin_expect (__sync_val_compare_and_swap (p, 0, 1), 0)) - { - /* Spin without using the atomic instruction. */ - do - __asm __volatile ("hint @pause" : : : "memory"); - while (*p); - } - return 0; -} diff --git a/sysdeps/ia64/nptl/pthread_spin_trylock.c b/sysdeps/ia64/nptl/pthread_spin_trylock.c deleted file mode 100644 index b33be4f276..0000000000 --- a/sysdeps/ia64/nptl/pthread_spin_trylock.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "pthreadP.h" - -int -pthread_spin_trylock (pthread_spinlock_t *lock) -{ - return __sync_val_compare_and_swap ((int *) lock, 0, 1) == 0 ? 0 : EBUSY; -} diff --git a/sysdeps/ia64/nptl/pthread_spin_unlock.c b/sysdeps/ia64/nptl/pthread_spin_unlock.c deleted file mode 100644 index 97f8b356fe..0000000000 --- a/sysdeps/ia64/nptl/pthread_spin_unlock.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "pthreadP.h" - - -int -pthread_spin_unlock (pthread_spinlock_t *lock) -{ - __sync_lock_release ((int *) lock); - return 0; -} diff --git a/sysdeps/ia64/nptl/pthreaddef.h b/sysdeps/ia64/nptl/pthreaddef.h deleted file mode 100644 index 294bcc7908..0000000000 --- a/sysdeps/ia64/nptl/pthreaddef.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (32 * 1024 * 1024) - -/* IA-64 uses a normal stack and a register stack. */ -#define NEED_SEPARATE_REGISTER_STACK - -/* Required stack pointer alignment at beginning. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 16384 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 16 - - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME __stack_pointer -register char *__stack_pointer __asm__ ("sp"); diff --git a/sysdeps/ia64/nptl/tcb-offsets.sym b/sysdeps/ia64/nptl/tcb-offsets.sym deleted file mode 100644 index b01f712be2..0000000000 --- a/sysdeps/ia64/nptl/tcb-offsets.sym +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include - -TID offsetof (struct pthread, tid) - TLS_PRE_TCB_SIZE -MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) - TLS_PRE_TCB_SIZE -SYSINFO_OFFSET offsetof (tcbhead_t, __private) diff --git a/sysdeps/ia64/nptl/tls.h b/sysdeps/ia64/nptl/tls.h deleted file mode 100644 index 400caf3567..0000000000 --- a/sysdeps/ia64/nptl/tls.h +++ /dev/null @@ -1,182 +0,0 @@ -/* Definition for thread-local data handling. nptl/IA-64 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TLS_H -#define _TLS_H 1 - -#include -#ifndef __ASSEMBLER__ -# include -# include -# include -# include -# include -# include - -typedef struct -{ - dtv_t *dtv; - void *__private; -} tcbhead_t; - -register struct pthread *__thread_self __asm__("r13"); - -# define TLS_MULTIPLE_THREADS_IN_TCB 1 - -#else /* __ASSEMBLER__ */ -# include -#endif - - -/* Alignment requirement for the stack. */ -#define STACK_ALIGN 16 - -#ifndef __ASSEMBLER__ -/* Get system call information. */ -# include - -/* This is the size of the initial TCB. */ -# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t) - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE sizeof (tcbhead_t) - -/* This is the size we need before TCB. - If there is not any room for uintptr_t stack_guard and - uintptr_t pointer_guard in struct pthread's final padding, - we need to put struct pthread 16 byte slower. */ -# define TLS_PRE_TCB_SIZE \ - (sizeof (struct pthread) \ - + (PTHREAD_STRUCT_END_PADDING < 2 * sizeof (uintptr_t) \ - ? ((2 * sizeof (uintptr_t) + __alignof__ (struct pthread) - 1) \ - & ~(__alignof__ (struct pthread) - 1)) \ - : 0)) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* The DTV is allocated at the TP; the TCB is placed elsewhere. */ -# define TLS_DTV_AT_TP 1 -# define TLS_TCB_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(descr, dtvp) \ - ((tcbhead_t *) (descr))->dtv = (dtvp) + 1 - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(DTV) \ - (((tcbhead_t *)__thread_self)->dtv = (DTV)) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(descr) \ - (((tcbhead_t *) (descr))->dtv) - -#define THREAD_SELF_SYSINFO (((tcbhead_t *) __thread_self)->__private) -#define THREAD_SYSINFO(pd) \ - (((tcbhead_t *) ((char *) (pd) + TLS_PRE_TCB_SIZE))->__private) - -#ifdef NEED_DL_SYSINFO -# define INIT_SYSINFO THREAD_SELF_SYSINFO = (void *) GLRO(dl_sysinfo) -# define SETUP_THREAD_SYSINFO(pd) \ - (THREAD_SYSINFO (pd) = THREAD_SELF_SYSINFO) -# define CHECK_THREAD_SYSINFO(pd) \ - assert (THREAD_SYSINFO (pd) == THREAD_SELF_SYSINFO) -#else -# define INIT_SYSINFO NULL -#endif - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(thrdescr) \ - (__thread_self = (thrdescr), INIT_SYSINFO, NULL) - -/* Value passed to 'clone2' for initialization of the thread register. */ -# define TLS_DEFINE_INIT_TP(tp, pd) \ - void *tp = (char *) (pd) + TLS_PRE_TCB_SIZE - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - (((tcbhead_t *)__thread_self)->dtv) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF \ - ((struct pthread *) ((char *) __thread_self - TLS_PRE_TCB_SIZE)) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF REGISTER (64, 64, 13 * 8, -TLS_PRE_TCB_SIZE) - -/* Access to data in the thread descriptor is easy. */ -#define THREAD_GETMEM(descr, member) \ - descr->member -#define THREAD_GETMEM_NC(descr, member, idx) \ - descr->member[idx] -#define THREAD_SETMEM(descr, member, value) \ - descr->member = (value) -#define THREAD_SETMEM_NC(descr, member, idx, value) \ - descr->member[idx] = (value) - -/* Set the stack guard field in TCB head. */ -#define THREAD_SET_STACK_GUARD(value) \ - (((uintptr_t *) __thread_self)[-1] = (value)) -#define THREAD_COPY_STACK_GUARD(descr) \ - (((uintptr_t *) ((char *) (descr) + TLS_PRE_TCB_SIZE))[-1] \ - = ((uintptr_t *) __thread_self)[-1]) - -/* Set the pointer guard field in TCB head. */ -#define THREAD_GET_POINTER_GUARD() \ - (((uintptr_t *) __thread_self)[-2]) -#define THREAD_SET_POINTER_GUARD(value) \ - (((uintptr_t *) __thread_self)[-2] = (value)) -#define THREAD_COPY_POINTER_GUARD(descr) \ - (((uintptr_t *) ((char *) (descr) + TLS_PRE_TCB_SIZE))[-2] \ - = THREAD_GET_POINTER_GUARD ()) - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/ia64/sched_cpucount.c b/sysdeps/ia64/sched_cpucount.c deleted file mode 100644 index 946643969e..0000000000 --- a/sysdeps/ia64/sched_cpucount.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define POPCNT(l) __builtin_popcountl (l) - -#include diff --git a/sysdeps/ia64/softpipe.h b/sysdeps/ia64/softpipe.h deleted file mode 100644 index 5db2cf648d..0000000000 --- a/sysdeps/ia64/softpipe.h +++ /dev/null @@ -1,28 +0,0 @@ -/* This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The latency of a memory load assumed by the assembly implementation - of the mem and str functions. Since we don't have any clue about - where the data might be, let's assume it's in the L2 cache. - Assuming L3 would be too pessimistic :-) - - Some functions define MEMLAT as 2, because they expect their data - to be in the L1D cache. */ - -#ifndef MEMLAT -# define MEMLAT 6 -#endif diff --git a/sysdeps/ia64/sotruss-lib.c b/sysdeps/ia64/sotruss-lib.c deleted file mode 100644 index 3f1e6b0eab..0000000000 --- a/sysdeps/ia64/sotruss-lib.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Override generic sotruss-lib.c to define actual functions for ia64. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define HAVE_ARCH_PLTENTER -#define HAVE_ARCH_PLTEXIT - -#include - -ElfW(Addr) -la_ia64_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - La_ia64_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - print_enter (refcook, defcook, symname, - regs->lr_gr[0], regs->lr_gr[1], regs->lr_gr[2], *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -la_ia64_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, - const struct La_ia64_regs *inregs, - struct La_ia64_retval *outregs, const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_r8); - - return 0; -} diff --git a/sysdeps/ia64/stackguard-macros.h b/sysdeps/ia64/stackguard-macros.h deleted file mode 100644 index 390729327a..0000000000 --- a/sysdeps/ia64/stackguard-macros.h +++ /dev/null @@ -1,7 +0,0 @@ -#include - -#define STACK_CHK_GUARD \ - ({ uintptr_t x; asm ("adds %0 = -8, r13;; ld8 %0 = [%0]" : "=r" (x)); x; }) - -#define POINTER_CHK_GUARD \ - ({ uintptr_t x; asm ("adds %0 = -16, r13;; ld8 %0 = [%0]" : "=r" (x)); x; }) diff --git a/sysdeps/ia64/stackinfo.h b/sysdeps/ia64/stackinfo.h deleted file mode 100644 index 87e144876f..0000000000 --- a/sysdeps/ia64/stackinfo.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* On IA-64 the stack grows down. The register stack is of no concern - here. */ -#define _STACK_GROWS_DOWN 1 - -/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK is - * present, but it is presumed absent. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X) - -#endif /* stackinfo.h */ diff --git a/sysdeps/ia64/start.S b/sysdeps/ia64/start.S deleted file mode 100644 index dda469f626..0000000000 --- a/sysdeps/ia64/start.S +++ /dev/null @@ -1,119 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Written by Jes Sorensen, , April 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include -#include - -/* - * Arguments for __libc_start_main: - * out0: main - * out1: argc - * out2: argv - * out3: init - * out4: fini - * out5: rtld_fini - * out6: stack_end - */ - - .align 32 - .global _start - - .proc _start - .type _start,@function -_start: - .prologue - .save rp, r0 - .body - .prologue - { .mlx - alloc r2 = ar.pfs,0,0,7,0 - movl r3 = FPSR_DEFAULT - } - { .mlx - adds out2 = 16, sp /* get address of argc value */ - movl gp = @gprel(0f) - ;; - } -0: { .mmi - ld8 out1 = [out2], 8 /* load argc and move out2 to become argv */ - mov.m r10 = ar.bsp /* fetch rbs base address */ - mov r9 = ip - ;; - } - { .mii - mov ar.fpsr = r3 - sub gp = r9, gp /* back-compute gp value */ - adds out6 = 16, sp /* highest non-environment stack address */ - ;; - } - { - addl r11 = @ltoff(__libc_ia64_register_backing_store_base), gp - addl out0 = @ltoff(@fptr(main)), gp - addl out3 = @ltoff(@fptr(__libc_csu_init)), gp - ;; - } - { .mmi - ld8 r3 = [r11] /* pointer to __libc_ia64_register_backing_store_base */ - ld8 out0 = [out0] /* pointer to `main' function descriptor */ - addl out4 = @ltoff(@fptr(__libc_csu_fini)), gp - ;; - } - { .mmi - ld8 out3 = [out3] /* pointer to `init' function descriptor */ - ld8 out4 = [out4] /* pointer to `fini' function descriptor */ - nop 0 - } - .body - { .mib - st8 [r3] = r10 - mov out5 = ret0 /* dynamic linker destructor */ - br.call.sptk.few rp = __libc_start_main - } - { .mib - break 0 /* break miserably if we ever return */ - } - .endp _start - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start - - .common __libc_ia64_register_backing_store_base, 8, 8 diff --git a/sysdeps/ia64/strchr.S b/sysdeps/ia64/strchr.S deleted file mode 100644 index e781e47401..0000000000 --- a/sysdeps/ia64/strchr.S +++ /dev/null @@ -1,111 +0,0 @@ -/* Optimized version of the standard strchr() function. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Dan Pop . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Return: the address of the first occurence of chr in str or NULL - - Inputs: - in0: str - in1: chr - - A modified version of memchr.S, the search ends when the character is - found or the terminating null character is encountered. - - This implementation assumes little endian mode. For big endian mode, - the instruction czx1.r should be replaced by czx1.l. */ - -#include -#undef ret - -#define saved_lc r18 -#define poschr r19 -#define pos0 r20 -#define val1 r21 -#define val2 r22 -#define tmp r24 -#define chrx8 r25 -#define loopcnt r30 - -#define str in0 -#define chr in1 - -ENTRY(strchr) - .prologue - alloc r2 = ar.pfs, 2, 0, 0, 0 - .save ar.lc, saved_lc - mov saved_lc = ar.lc // save the loop counter - .body - mov ret0 = str - and tmp = 7, str // tmp = str % 8 - mux1 chrx8 = chr, @brcst - extr.u chr = chr, 0, 8 // retain only the last byte - cmp.ne p8, p0 = r0, r0 // clear p8 - ;; - sub loopcnt = 8, tmp // loopcnt = 8 - tmp - cmp.eq p6, p0 = tmp, r0 -(p6) br.cond.sptk .str_aligned;; - adds loopcnt = -1, loopcnt;; - mov ar.lc = loopcnt -.l1: - ld1 val2 = [ret0], 1 - ;; - cmp.eq p6, p0 = val2, chr - cmp.eq p7, p0 = val2, r0 -(p6) br.cond.spnt .restore_and_exit -(p7) br.cond.spnt .notfound - br.cloop.sptk .l1 -.str_aligned: - ld8 val1 = [ret0], 8;; - nop.b 0 - nop.b 0 -.l2: - ld8.s val2 = [ret0], 8 // don't bomb out here - czx1.r pos0 = val1 - xor tmp = val1, chrx8 // if val1 contains chr, tmp will - ;; // contain a zero in its position - czx1.r poschr = tmp - cmp.ne p6, p0 = 8, pos0 - ;; - cmp.ne p7, p0 = 8, poschr -(p7) br.cond.spnt .foundit -(p6) br.cond.spnt .notfound - chk.s val2, .recovery -.back: - mov val1 = val2 - br.cond.dptk .l2 -.foundit: -(p6) cmp.lt p8, p0 = pos0, poschr // we found chr and null in the word -(p8) br.cond.spnt .notfound // null was found before chr - add ret0 = ret0, poschr ;; - adds ret0 = -15, ret0 ;; // should be -16, but we decrement -.restore_and_exit: // ret0 in the next instruction - adds ret0 = -1, ret0 // ret0 was pointing 1 char too far - mov ar.lc = saved_lc // restore the loop counter - br.ret.sptk.many b0 -.notfound: - mov ret0 = r0 // return NULL if null was found - mov ar.lc = saved_lc - br.ret.sptk.many b0 -.recovery: - adds ret0 = -8, ret0;; - ld8 val2 = [ret0], 8 // bomb out here - br.cond.sptk .back -END(strchr) - -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/ia64/strcmp.S b/sysdeps/ia64/strcmp.S deleted file mode 100644 index 587dd40124..0000000000 --- a/sysdeps/ia64/strcmp.S +++ /dev/null @@ -1,53 +0,0 @@ -/* Optimized version of the standard strcmp() function. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Dan Pop . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Return: the result of the comparison - - Inputs: - in0: s1 - in1: s2 - - Unlike memcmp(), this function is optimized for mismatches within the - first few characters. */ - -#include -#undef ret - -#define s1 in0 -#define s2 in1 - -#define val1 r15 -#define val2 r16 - - -ENTRY(strcmp) - alloc r2 = ar.pfs, 2, 0, 0, 0 -.loop: - ld1 val1 = [s1], 1 - ld1 val2 = [s2], 1 - cmp.eq p6, p0 = r0, r0 // set p6 - ;; - cmp.ne.and p6, p0 = val1, r0 - cmp.ne.and p6, p0 = val2, r0 - cmp.eq.and p6, p0 = val1, val2 -(p6) br.cond.sptk .loop - sub ret0 = val1, val2 - br.ret.sptk.many b0 -END(strcmp) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/ia64/strcpy.S b/sysdeps/ia64/strcpy.S deleted file mode 100644 index d75e922618..0000000000 --- a/sysdeps/ia64/strcpy.S +++ /dev/null @@ -1,144 +0,0 @@ -/* Optimized version of the standard strcpy() function. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Dan Pop . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Return: dest - - Inputs: - in0: dest - in1: src - - In this form, it assumes little endian mode. For big endian mode, - the two shifts in .l2 must be inverted: - - shl value = r[1], sh1 // value = w0 << sh1 - shr.u tmp = r[0], sh2 // tmp = w1 >> sh2 - */ - -#include -#undef ret - -#define saved_lc r15 -#define saved_pr r16 -#define thresh r17 -#define dest r19 -#define src r20 -#define len r21 -#define asrc r22 -#define tmp r23 -#define pos r24 -#define w0 r25 -#define w1 r26 -#define c r27 -#define sh2 r28 -#define sh1 r29 -#define loopcnt r30 -#define value r31 - -ENTRY(strcpy) - .prologue - alloc r2 = ar.pfs, 2, 0, 30, 32 - -#define MEMLAT 2 - .rotr r[MEMLAT + 2] - .rotp p[MEMLAT + 1] - - mov ret0 = in0 // return value = dest - .save pr, saved_pr - mov saved_pr = pr // save the predicate registers - .save ar.lc, saved_lc - mov saved_lc = ar.lc // save the loop counter - .body - sub tmp = r0, in0 ;; // tmp = -dest - mov dest = in0 // dest - mov src = in1 // src - and loopcnt = 7, tmp ;; // loopcnt = -dest % 8 - cmp.eq p6, p0 = loopcnt, r0 - adds loopcnt = -1, loopcnt // --loopcnt -(p6) br.cond.sptk .dest_aligned ;; - mov ar.lc = loopcnt -.l1: // copy -dest % 8 bytes - ld1 c = [src], 1 // c = *src++ - ;; - st1 [dest] = c, 1 // *dest++ = c - cmp.eq p6, p0 = c, r0 -(p6) br.cond.dpnt .restore_and_exit - br.cloop.dptk .l1 ;; -.dest_aligned: - and sh1 = 7, src // sh1 = src % 8 - mov ar.lc = -1 // "infinite" loop - and asrc = -8, src ;; // asrc = src & -OPSIZ -- align src - sub thresh = 8, sh1 - mov pr.rot = 1 << 16 // set rotating predicates - cmp.ne p7, p0 = r0, r0 // clear p7 - shl sh1 = sh1, 3 ;; // sh1 = 8 * (src % 8) - sub sh2 = 64, sh1 // sh2 = 64 - sh1 - cmp.eq p6, p0 = sh1, r0 // is the src aligned? -(p6) br.cond.sptk .src_aligned ;; - ld8 r[1] = [asrc],8 ;; - - .align 32 -.l2: - ld8.s r[0] = [asrc], 8 - shr.u value = r[1], sh1 ;; // value = w0 >> sh1 - czx1.r pos = value ;; // do we have an "early" zero - cmp.lt p7, p0 = pos, thresh // in w0 >> sh1? -(p7) br.cond.dpnt .found0 - chk.s r[0], .recovery2 // it is safe to do that only -.back2: // after the previous test - shl tmp = r[0], sh2 // tmp = w1 << sh2 - ;; - or value = value, tmp ;; // value |= tmp - czx1.r pos = value ;; - cmp.ne p7, p0 = 8, pos -(p7) br.cond.dpnt .found0 - st8 [dest] = value, 8 // store val to dest - br.ctop.dptk .l2 ;; -.src_aligned: -.l3: -(p[0]) ld8.s r[0] = [src], 8 -(p[MEMLAT]) chk.s r[MEMLAT], .recovery3 -.back3: -(p[MEMLAT]) mov value = r[MEMLAT] -(p[MEMLAT]) czx1.r pos = r[MEMLAT] ;; -(p[MEMLAT]) cmp.ne p7, p0 = 8, pos -(p7) br.cond.dpnt .found0 -(p[MEMLAT]) st8 [dest] = r[MEMLAT], 8 - br.ctop.dptk .l3 ;; -.found0: - mov ar.lc = pos -.l4: - extr.u c = value, 0, 8 // c = value & 0xff - shr.u value = value, 8 - ;; - st1 [dest] = c, 1 - br.cloop.dptk .l4 ;; -.restore_and_exit: - mov ar.lc = saved_lc // restore the loop counter - mov pr = saved_pr, -1 // restore the predicate registers - br.ret.sptk.many b0 -.recovery2: - add tmp = -8, asrc ;; - ld8 r[0] = [tmp] - br.cond.sptk .back2 -.recovery3: - add tmp = -(MEMLAT + 1) * 8, src ;; - ld8 r[MEMLAT] = [tmp] - br.cond.sptk .back3 -END(strcpy) -libc_hidden_builtin_def (strcpy) diff --git a/sysdeps/ia64/strlen.S b/sysdeps/ia64/strlen.S deleted file mode 100644 index 7d19add5d3..0000000000 --- a/sysdeps/ia64/strlen.S +++ /dev/null @@ -1,97 +0,0 @@ -/* Optimized version of the standard strlen() function. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Dan Pop . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Return: the length of the input string - - Input: - in0: str - - Look for the null character byte by byte, until we reach a word aligned - address, then search word by word, using the czx instruction. We're - also doing one word of read ahead, which could cause problems if the - null character is on the last word of a page and the next page is not - mapped in the process address space. Hence the use of the speculative - load. - - This implementation assumes little endian mode. For big endian mode, - the instruction czx1.r should be replaced by czx1.l. */ - -#include -#undef ret - -#define saved_lc r18 -#define str r19 -#define pos0 r20 -#define val1 r21 -#define val2 r22 -#define origadd r23 -#define tmp r24 -#define loopcnt r30 -#define len ret0 - -ENTRY(strlen) - .prologue - alloc r2 = ar.pfs, 1, 0, 0, 0 - .save ar.lc, saved_lc - mov saved_lc = ar.lc // save the loop counter - .body - mov str = in0 - mov len = r0 // len = 0 - and tmp = 7, in0 // tmp = str % 8 - ;; - sub loopcnt = 8, tmp // loopcnt = 8 - tmp - cmp.eq p6, p0 = tmp, r0 -(p6) br.cond.sptk .str_aligned;; - adds loopcnt = -1, loopcnt;; - mov ar.lc = loopcnt -.l1: - ld1 val2 = [str], 1 - ;; - cmp.eq p6, p0 = val2, r0 -(p6) br.cond.spnt .restore_and_exit - adds len = 1, len - br.cloop.dptk .l1 -.str_aligned: - mov origadd = str // origadd = orig - ld8 val1 = [str], 8;; - nop.b 0 - nop.b 0 -.l2: ld8.s val2 = [str], 8 // don't bomb out here - czx1.r pos0 = val1 - ;; - cmp.ne p6, p0 = 8, pos0 -(p6) br.cond.spnt .foundit - chk.s val2, .recovery -.back: - mov val1 = val2 - br.cond.dptk .l2 -.foundit: - sub tmp = str, origadd // tmp = crt address - orig - add len = len, pos0;; - add len = len, tmp;; - adds len = -16, len -.restore_and_exit: - mov ar.lc = saved_lc // restore the loop counter - br.ret.sptk.many b0 -.recovery: - adds str = -8, str;; - ld8 val2 = [str], 8 // bomb out here - br.cond.sptk .back -END(strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/ia64/strncmp.S b/sysdeps/ia64/strncmp.S deleted file mode 100644 index 1b7f8568dd..0000000000 --- a/sysdeps/ia64/strncmp.S +++ /dev/null @@ -1,61 +0,0 @@ -/* Optimized version of the standard strncmp() function. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Dan Pop . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Return: the result of the comparison - - Inputs: - in0: s1 - in1: s2 - in2: n - - Unlike memcmp(), this function is optimized for mismatches within the - first few characters. */ - -#include -#undef ret - -#define s1 in0 -#define s2 in1 -#define n in2 - -#define val1 r15 -#define val2 r16 - - -ENTRY(strncmp) - alloc r2 = ar.pfs, 3, 0, 0, 0 - mov ret0 = r0 - cmp.eq p6, p0 = r0, r0 // set p6 - cmp.eq p7, p0 = n, r0 // return immediately if n == 0 -(p7) br.cond.spnt .restore_and_exit ;; -.loop: - ld1 val1 = [s1], 1 - ld1 val2 = [s2], 1 - adds n = -1, n // n-- - ;; - cmp.ne.and p6, p0 = val1, r0 - cmp.ne.and p6, p0 = val2, r0 - cmp.ne.and p6, p0 = n, r0 - cmp.eq.and p6, p0 = val1, val2 -(p6) br.cond.sptk .loop - sub ret0 = val1, val2 -.restore_and_exit: - br.ret.sptk.many b0 -END(strncmp) -libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/ia64/strncpy.S b/sysdeps/ia64/strncpy.S deleted file mode 100644 index 8c767e2969..0000000000 --- a/sysdeps/ia64/strncpy.S +++ /dev/null @@ -1,231 +0,0 @@ -/* Optimized version of the standard strncpy() function. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Dan Pop - and Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Return: dest - - Inputs: - in0: dest - in1: src - in2: len - - In this form, it assumes little endian mode. - */ - -#include -#undef ret - -#define saved_lc r15 -#define saved_pr r16 -#define thresh r17 -#define dest r18 -#define dest2 r19 -#define src r20 -#define len r21 -#define asrc r22 -#define tmp r23 -#define pos r24 -#define w0 r25 -#define w1 r26 -#define c r27 -#define sh2 r28 -#define sh1 r29 -#define loopcnt r30 -#define value r31 - -ENTRY(strncpy) - .prologue - alloc r2 = ar.pfs, 3, 0, 29, 32 - -#define MEMLAT 2 - .rotr r[MEMLAT + 2] - .rotp p[MEMLAT + 1] - - mov ret0 = in0 // return value = dest - .save pr, saved_pr - mov saved_pr = pr // save the predicate registers - .save ar.lc, saved_lc - mov saved_lc = ar.lc // save the loop counter - mov ar.ec = 0 // ec is not guaranteed to - // be zero upon function entry - .body - cmp.geu p6, p5 = 24, in2 -(p6) br.cond.spnt .short_len - sub tmp = r0, in0 ;; // tmp = -dest - mov len = in2 // len - mov dest = in0 // dest - mov src = in1 // src - and tmp = 7, tmp ;; // loopcnt = -dest % 8 - cmp.eq p6, p7 = tmp, r0 - adds loopcnt = -1, tmp // --loopcnt -(p6) br.cond.sptk .dest_aligned ;; - sub len = len, tmp // len -= -dest % 8 - mov ar.lc = loopcnt -.l1: // copy -dest % 8 bytes -(p5) ld1 c = [src], 1 // c = *src++ - ;; - st1 [dest] = c, 1 // *dest++ = c - cmp.ne p5, p7 = c, r0 - br.cloop.dptk .l1 ;; -(p7) br.cond.dpnt .found0_align - -.dest_aligned: // p7 should be cleared here - shr.u c = len, 3 // c = len / 8 - and sh1 = 7, src // sh1 = src % 8 - and asrc = -8, src ;; // asrc = src & -OPSIZ -- align src - adds c = (MEMLAT-1), c // c = (len / 8) + MEMLAT - 1 - sub thresh = 8, sh1 - mov pr.rot = 1 << 16 // set rotating predicates - shl sh1 = sh1, 3 ;; // sh1 = 8 * (src % 8) - mov ar.lc = c // "infinite" loop - sub sh2 = 64, sh1 // sh2 = 64 - sh1 - cmp.eq p6, p0 = sh1, r0 // is the src aligned? -(p6) br.cond.sptk .src_aligned - adds c = -(MEMLAT-1), c ;; // c = (len / 8) - ld8 r[1] = [asrc],8 - mov ar.lc = c ;; - - .align 32 -.l2: -(p6) st8 [dest] = value, 8 // store val to dest - ld8.s r[0] = [asrc], 8 - shr.u value = r[1], sh1 ;; // value = w0 >> sh1 - czx1.r pos = value ;; // do we have an "early" zero - cmp.lt p7, p0 = pos, thresh // in w0 >> sh1? - adds len = -8, len // len -= 8 -(p7) br.cond.dpnt .nonalign_found0 - chk.s r[0], .recovery2 // it is safe to do that only -.back2: // after the previous test - shl tmp = r[0], sh2 // tmp = w1 << sh2 - ;; - or value = value, tmp ;; // value |= tmp - czx1.r pos = value ;; - cmp.ne p7, p6 = 8, pos -(p7) br.cond.dpnt .nonalign_found0 - br.ctop.dptk .l2 ;; - adds len = 8, len - br.cond.sptk .not_found0 ;; -.nonalign_found0: - cmp.gtu p6, p0 = -8, len -(p6) br.cond.dptk .found0 - adds len = 8, len - br.cond.sptk .not_found0 ;; - - .align 32 -.src_aligned: -.l3: -(p[0]) ld8.s r[0] = [src], 8 -(p[MEMLAT]) chk.s r[MEMLAT], .recovery3 -.back3: -(p[MEMLAT]) mov value = r[MEMLAT] -(p[MEMLAT]) czx1.r pos = r[MEMLAT] ;; -(p[MEMLAT]) cmp.ne p7, p0 = 8, pos -(p[MEMLAT]) adds len = -8, len // len -= 8 -(p7) br.cond.dpnt .found0 -(p[MEMLAT]) st8 [dest] = r[MEMLAT], 8 - br.ctop.dptk .l3 ;; - - chk.s r[MEMLAT-1], .recovery4 -.back4: - mov value = r[MEMLAT-1] - -.not_found0: - cmp.eq p5, p6 = len, r0 - adds len = -1, len -(p5) br.cond.dptk .restore_and_exit ;; - mov ar.lc = len -.l4: -(p6) extr.u c = value, 0, 8 // c = value & 0xff -(p6) shr.u value = value, 8 ;; - st1 [dest] = c, 1 - cmp.ne p6, p0 = c, r0 - br.cloop.dptk .l4 - br.cond.sptk .restore_and_exit - -.found0_align: - mov pos = 0 - adds len = -8, len - mov value = 0 ;; -.found0: - shl tmp = pos, 3 - shr.u loopcnt = len, 4 // loopcnt = len / 16 - mov c = -1 ;; - cmp.eq p6, p0 = loopcnt, r0 - adds loopcnt = -1, loopcnt - shl c = c, tmp ;; - and len = 0xf, len - andcm value = value, c - mov ar.lc = loopcnt ;; - cmp.le p7, p0 = 8, len - adds dest2 = 16, dest - st8 [dest] = value, 8 - and len = 0x7, len -(p6) br.cond.dpnt .l6 ;; -.l5: - st8 [dest] = r0, 16 - st8 [dest2] = r0, 16 - br.cloop.dptk .l5 ;; -.l6: -(p7) st8 [dest] = r0, 8 - cmp.eq p5, p0 = len, r0 - adds len = -1, len -(p5) br.cond.dptk .restore_and_exit ;; - mov ar.lc = len ;; -.l7: - st1 [dest] = r0, 1 - br.cloop.dptk .l7 ;; -.restore_and_exit: - mov ar.lc = saved_lc // restore the loop counter - mov pr = saved_pr, -1 // restore the predicate registers - br.ret.sptk.many b0 - -.short_len: - cmp.eq p5, p0 = in2, r0 - adds loopcnt = -1, in2 -(p5) br.cond.spnt .restore_and_exit ;; - mov ar.lc = loopcnt // p6 should be set when we get here -.l8: -(p6) ld1 c = [in1], 1 // c = *src++ - ;; - st1 [in0] = c, 1 // *dest++ = c -(p6) cmp.ne p6, p0 = c, r0 - br.cloop.dptk .l8 - ;; - mov ar.lc = saved_lc // restore the loop counter - mov pr = saved_pr, -1 // restore the predicate registers - br.ret.sptk.many b0 -.recovery2: - add c = 8, len - add tmp = -8, asrc ;; - cmp.gtu p8, p5 = c, thresh ;; -(p8) ld8 r[0] = [tmp] -(p5) mov r[0] = r0 - br.cond.sptk .back2 -.recovery3: - add tmp = -(MEMLAT + 1) * 8, src ;; - ld8 r[MEMLAT] = [tmp] - br.cond.sptk .back3 -.recovery4: - cmp.eq p5, p6 = len, r0 - add tmp = -MEMLAT * 8, src ;; -(p6) ld8 r[MEMLAT - 1] = [tmp] -(p5) mov r[MEMLAT - 1] = r0 - br.cond.sptk .back4 -END(strncpy) -libc_hidden_builtin_def (strncpy) diff --git a/sysdeps/ia64/sysdep.h b/sysdeps/ia64/sysdep.h deleted file mode 100644 index b4d95ac317..0000000000 --- a/sysdeps/ia64/sysdep.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef __ASSEMBLER__ - -/* Macros to help writing .prologue directives in assembly code. */ -#define ASM_UNW_PRLG_RP 0x8 -#define ASM_UNW_PRLG_PFS 0x4 -#define ASM_UNW_PRLG_PSP 0x2 -#define ASM_UNW_PRLG_PR 0x1 -#define ASM_UNW_PRLG_GRSAVE(ninputs) (32+(ninputs)) - -#define ENTRY(name) \ - .text; \ - .align 32; \ - .proc C_SYMBOL_NAME(name); \ - .global C_SYMBOL_NAME(name); \ - C_LABEL(name) \ - CALL_MCOUNT - -#define LOCAL_ENTRY(name) \ - .text; \ - .align 32; \ - .proc C_SYMBOL_NAME(name); \ - C_LABEL(name) \ - CALL_MCOUNT - -#define LEAF(name) \ - .text; \ - .align 32; \ - .proc C_SYMBOL_NAME(name); \ - .global name; \ - C_LABEL(name) - -#define LOCAL_LEAF(name) \ - .text; \ - .align 32; \ - .proc C_SYMBOL_NAME(name); \ - C_LABEL(name) - -/* Mark the end of function SYM. */ -#undef END -#define END(sym) .endp C_SYMBOL_NAME(sym) - -#endif /* ASSEMBLER */ diff --git a/sysdeps/ia64/tininess.h b/sysdeps/ia64/tininess.h deleted file mode 100644 index 1db37790f8..0000000000 --- a/sysdeps/ia64/tininess.h +++ /dev/null @@ -1 +0,0 @@ -#define TININESS_AFTER_ROUNDING 1 diff --git a/sysdeps/ia64/tls-macros.h b/sysdeps/ia64/tls-macros.h deleted file mode 100644 index 13b216d85d..0000000000 --- a/sysdeps/ia64/tls-macros.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Macros to support TLS testing in times of missing compiler support. */ - -extern void *__tls_get_addr (void *); - -# define TLS_LE(x) \ - ({ void *__l; \ - asm ("mov r2=r13\n\t" \ - ";;\n\t" \ - "addl %0=@tprel(" #x "),r2\n\t" \ - : "=r" (__l) : : "r2" ); __l; }) - -# define TLS_IE(x) \ - ({ void *__l; \ - register long __gp asm ("gp"); \ - asm (";;\n\t" \ - "addl r16=@ltoff(@tprel(" #x ")),gp\n\t" \ - ";;\n\t" \ - "ld8 r17=[r16]\n\t" \ - ";;\n\t" \ - "add %0=r13,r17\n\t" \ - ";;\n\t" \ - : "=r" (__l) : "r" (__gp) : "r16", "r17" ); __l; }) - -# define __TLS_CALL_CLOBBERS \ - "r2", "r3", "r8", "r9", "r10", "r11", "r14", "r15", "r16", "r17", \ - "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", \ - "r27", "r28", "r29", "r30", "r31", \ - "p6", "p7", "p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15", \ - "f6", "f7", "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \ - "b6", "b7", \ - "out0", "out1", "out2", "out3", "out4", "out5", "out6", "out7" - -# define TLS_LD(x) \ - ({ void *__l; \ - register long __gp asm ("gp"); \ - asm (";;\n\t" \ - "mov loc0=gp\n\t" \ - "addl r16=@ltoff(@dtpmod(" #x ")),gp\n\t" \ - "addl out1=@dtprel(" #x "),r0\n\t" \ - ";;\n\t" \ - "ld8 out0=[r16]\n\t" \ - "br.call.sptk.many b0=__tls_get_addr" \ - ";;\n\t" \ - "mov gp=loc0\n\t" \ - "mov %0=r8\n\t" \ - ";;\n\t" \ - : "=r" (__l) : "r" (__gp) : "loc0", __TLS_CALL_CLOBBERS); \ - __l; }) - -# define TLS_GD(x) \ - ({ void *__l; \ - register long __gp asm ("gp"); \ - asm (";;\n\t" \ - "mov loc0=gp\n\t" \ - "addl r16=@ltoff(@dtpmod(" #x ")),gp\n\t" \ - "addl r17=@ltoff(@dtprel(" #x ")),gp\n\t" \ - ";;\n\t" \ - "ld8 out0=[r16]\n\t" \ - "ld8 out1=[r17]\n\t" \ - "br.call.sptk.many b0=__tls_get_addr" \ - ";;\n\t" \ - "mov gp=loc0\n\t" \ - "mov %0=r8\n\t" \ - ";;\n\t" \ - : "=r" (__l) : "r" (__gp) : "loc0", __TLS_CALL_CLOBBERS); \ - __l; }) diff --git a/sysdeps/ia64/tst-audit.h b/sysdeps/ia64/tst-audit.h deleted file mode 100644 index 94f20909ce..0000000000 --- a/sysdeps/ia64/tst-audit.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. IA64 version. - - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define pltenter la_ia64_gnu_pltenter -#define pltexit la_ia64_gnu_pltexit -#define La_regs La_ia64_regs -#define La_retval La_ia64_retval -#define int_retval lrv_r8 diff --git a/sysdeps/ieee754/Makefile b/sysdeps/ieee754/Makefile deleted file mode 100644 index 5c7fc3fc52..0000000000 --- a/sysdeps/ieee754/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -ifeq ($(subdir),math) -sysdep_headers += ieee754.h -endif - diff --git a/sysdeps/ieee754/bits/huge_val.h b/sysdeps/ieee754/bits/huge_val.h deleted file mode 100644 index fb3ba69c44..0000000000 --- a/sysdeps/ieee754/bits/huge_val.h +++ /dev/null @@ -1,53 +0,0 @@ -/* `HUGE_VAL' constant for IEEE 754 machines (where it is infinity). - Used by and functions for overflow. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -/* IEEE positive infinity (-HUGE_VAL is negative infinity). */ - -#if __GNUC_PREREQ(3,3) -# define HUGE_VAL (__builtin_huge_val()) -#elif __GNUC_PREREQ(2,96) -# define HUGE_VAL (__extension__ 0x1.0p2047) -#elif defined __GNUC__ - -# define HUGE_VAL \ - (__extension__ \ - ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; }) \ - { __l: 0x7ff0000000000000ULL }).__d) - -#else /* not GCC */ - -# include - -typedef union { unsigned char __c[8]; double __d; } __huge_val_t; - -# if __BYTE_ORDER == __BIG_ENDIAN -# define __HUGE_VAL_bytes { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 } -# endif -# if __BYTE_ORDER == __LITTLE_ENDIAN -# define __HUGE_VAL_bytes { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f } -# endif - -static __huge_val_t __huge_val = { __HUGE_VAL_bytes }; -# define HUGE_VAL (__huge_val.__d) - -#endif /* GCC. */ diff --git a/sysdeps/ieee754/bits/huge_valf.h b/sysdeps/ieee754/bits/huge_valf.h deleted file mode 100644 index f24bcf452f..0000000000 --- a/sysdeps/ieee754/bits/huge_valf.h +++ /dev/null @@ -1,51 +0,0 @@ -/* `HUGE_VALF' constant for IEEE 754 machines (where it is infinity). - Used by and functions for overflow. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -/* IEEE positive infinity (-HUGE_VAL is negative infinity). */ - -#if __GNUC_PREREQ(3,3) -# define HUGE_VALF (__builtin_huge_valf()) -#elif __GNUC_PREREQ(2,96) -# define HUGE_VALF (__extension__ 0x1.0p255f) -#elif defined __GNUC__ - -# define HUGE_VALF \ - (__extension__ \ - ((union { unsigned __l __attribute__((__mode__(__SI__))); float __d; }) \ - { __l: 0x7f800000UL }).__d) - -#else /* not GCC */ - -typedef union { unsigned char __c[4]; float __f; } __huge_valf_t; - -# if __BYTE_ORDER == __BIG_ENDIAN -# define __HUGE_VALF_bytes { 0x7f, 0x80, 0, 0 } -# endif -# if __BYTE_ORDER == __LITTLE_ENDIAN -# define __HUGE_VALF_bytes { 0, 0, 0x80, 0x7f } -# endif - -static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes }; -# define HUGE_VALF (__huge_valf.__f) - -#endif /* GCC. */ diff --git a/sysdeps/ieee754/bits/inf.h b/sysdeps/ieee754/bits/inf.h deleted file mode 100644 index eee0f2ea88..0000000000 --- a/sysdeps/ieee754/bits/inf.h +++ /dev/null @@ -1,29 +0,0 @@ -/* `INFINITY' constant for IEEE 754 machines. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -/* IEEE positive infinity. */ - -#if __GNUC_PREREQ(3,3) -# define INFINITY (__builtin_inff()) -#else -# define INFINITY HUGE_VALF -#endif diff --git a/sysdeps/ieee754/bits/nan.h b/sysdeps/ieee754/bits/nan.h deleted file mode 100644 index b6e14f5873..0000000000 --- a/sysdeps/ieee754/bits/nan.h +++ /dev/null @@ -1,52 +0,0 @@ -/* `NAN' constant for IEEE 754 machines. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - - -/* IEEE Not A Number. */ - -#if __GNUC_PREREQ(3,3) - -# define NAN (__builtin_nanf ("")) - -#elif defined __GNUC__ - -# define NAN \ - (__extension__ \ - ((union { unsigned __l __attribute__ ((__mode__ (__SI__))); float __d; }) \ - { __l: 0x7fc00000UL }).__d) - -#else - -# include - -# if __BYTE_ORDER == __BIG_ENDIAN -# define __qnan_bytes { 0x7f, 0xc0, 0, 0 } -# endif -# if __BYTE_ORDER == __LITTLE_ENDIAN -# define __qnan_bytes { 0, 0, 0xc0, 0x7f } -# endif - -static union { unsigned char __c[4]; float __d; } __qnan_union - __attribute__ ((__unused__)) = { __qnan_bytes }; -# define NAN (__qnan_union.__d) - -#endif /* GCC. */ diff --git a/sysdeps/ieee754/dbl-64/Makefile b/sysdeps/ieee754/dbl-64/Makefile deleted file mode 100644 index 5557c75b45..0000000000 --- a/sysdeps/ieee754/dbl-64/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -ifeq ($(subdir),math) -# branred depends on precise IEEE double rounding -CFLAGS-branred.c = $(config-cflags-nofma) -CFLAGS-e_sqrt.c = $(config-cflags-nofma) -CFLAGS-e_pow.c = $(config-cflags-nofma) -endif diff --git a/sysdeps/ieee754/dbl-64/MathLib.h b/sysdeps/ieee754/dbl-64/MathLib.h deleted file mode 100644 index ffda70a413..0000000000 --- a/sysdeps/ieee754/dbl-64/MathLib.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/********************************************************************/ -/* Ultimate math functions. Each function computes the exact */ -/* theoretical value of its argument rounded to nearest or even. */ -/* */ -/* Assumption: Machine arithmetic operations are performed in */ -/* round nearest mode of IEEE 754 standard. */ -/********************************************************************/ - -#ifndef UMATH_LIB -#define UMATH_LIB -/********************************************************************/ -/* Function changes the precision mode to IEEE 754 double precision */ -/* and the rounding mode to nearest or even. */ -/* It returns the original status of these modes. */ -/* See further explanations of usage in DPChange.h */ -/********************************************************************/ -unsigned short Init_Lib (void); - -/********************************************************************/ -/* Function that changes the precision and rounding modes to the */ -/* specified by the argument received. See further explanations in */ -/* DPChange.h */ -/********************************************************************/ -void Exit_Lib (unsigned short); - - -/* The asin() function calculates the arc sine of its argument. */ -/* The function returns the arc sine in radians */ -/* (between -PI/2 and PI/2). */ -/* If the argument is greater than 1 or less than -1 it returns */ -/* a NaN. */ -double uasin (double); - - -/* The acos() function calculates the arc cosine of its argument. */ -/* The function returns the arc cosine in radians */ -/* (between -PI/2 and PI/2). */ -/* If the argument is greater than 1 or less than -1 it returns */ -/* a NaN. */ -double uacos (double); - -/* The atan() function calculates the arctanget of its argument. */ -/* The function returns the arc tangent in radians */ -/* (between -PI/2 and PI/2). */ -double uatan (double); - - -/* The uatan2() function calculates the arc tangent of the two arguments x */ -/* and y (x is the right argument and y is the left one).The signs of both */ -/* arguments are used to determine the quadrant of the result. */ -/* The function returns the result in radians, which is between -PI and PI */ -double uatan2 (double, double); - -/* Compute log(x). The base of log is e (natural logarithm) */ -double ulog (double); - -/* Compute e raised to the power of argument x. */ -double uexp (double); - -/* Compute sin(x). The argument x is assumed to be given in radians.*/ -double usin (double); - -/* Compute cos(x). The argument x is assumed to be given in radians.*/ -double ucos (double); - -/* Compute tan(x). The argument x is assumed to be given in radians.*/ -double utan (double); - -/* Compute the square root of non-negative argument x. */ -/* If x is negative the returned value is NaN. */ -double usqrt (double); - -/* Compute x raised to the power of y, where x is the left argument */ -/* and y is the right argument. The function returns a NaN if x<0. */ -/* If x equals zero it returns -inf */ -double upow (double, double); - -/* Computing x mod y, where x is the left argument and y is the */ -/* right one. */ -double uremainder (double, double); -#endif diff --git a/sysdeps/ieee754/dbl-64/asincos.tbl b/sysdeps/ieee754/dbl-64/asincos.tbl deleted file mode 100644 index 5e7670c3b1..0000000000 --- a/sysdeps/ieee754/dbl-64/asincos.tbl +++ /dev/null @@ -1,5168 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/***************************************************************************/ -/* Table for arcsin() and arccos() FUNCTIONS */ -/***************************************************************************/ - -#ifdef BIG_ENDI -static const union {int4 i[5136];double x[2568];} asncs = { .i = { -/**/ 0x3FC04000, 0x00000000, -/**/ 0x3FF02169, 0x88994424, -/**/ 0x3FB0A6A2, 0xB799B115, -/**/ 0x3FC6EF15, 0xD57409A0, -/**/ 0x3FAA141E, 0xAF52EAA0, -/**/ 0x3FB75591, 0xABBBE261, -/**/ 0x3FA72B51, 0xD206D88F, -/**/ 0x3C96B595, 0x5BB33E7D, -/**/ 0x3FC04B41, 0xA03E2700, -/**/ 0x3FF04000, 0x00000000, -/**/ 0xBF7E9677, 0x66BBDC7C, -/**/ 0x3FC0C000, 0x00000000, -/**/ 0x3FF02386, 0xF9E23A56, -/**/ 0x3FB1308C, 0x60FD0235, -/**/ 0x3FC7099F, 0x14D16B02, -/**/ 0x3FAAFED6, 0x27C01EE1, -/**/ 0x3FB79C6F, 0xDBCD5F98, -/**/ 0x3FA8144A, 0x4084DAAC, -/**/ 0xBC87C092, 0x38D8505E, -/**/ 0x3FC0CC55, 0x56C9F380, -/**/ 0x3FF04000, 0x00000000, -/**/ 0xBF7C7906, 0x1DC5AA24, -/**/ 0x3FC14000, 0x00000000, -/**/ 0x3FF025B5, 0xB27141F6, -/**/ 0x3FB1BB18, 0x04CE7400, -/**/ 0x3FC72514, 0x72907342, -/**/ 0x3FABEC60, 0x0BF4222C, -/**/ 0x3FB7E610, 0x75B3736C, -/**/ 0x3FA9024C, 0x5199C343, -/**/ 0xBC8AE84C, 0x06B56F60, -/**/ 0x3FC14D7A, 0x3DEFA070, -/**/ 0x3FF04000, 0x00000000, -/**/ 0xBF7A4A4D, 0x8EBE0A5C, -/**/ 0x3FC1C000, 0x00000000, -/**/ 0x3FF027F5, 0xC6DE8F57, -/**/ 0x3FB2464B, 0x345751E1, -/**/ 0x3FC74178, 0xCF026805, -/**/ 0x3FACDCD8, 0x40A9E0D6, -/**/ 0x3FB83282, 0xEB1D9C38, -/**/ 0x3FA9F590, 0xD7BE707B, -/**/ 0xBCAB9768, 0x03A2A6D6, -/**/ 0x3FC1CEB0, 0xE03B4870, -/**/ 0x3FF04000, 0x00000000, -/**/ 0xBF780A39, 0x2170A943, -/**/ 0x3FC24000, 0x00000000, -/**/ 0x3FF02A47, 0x4C759796, -/**/ 0x3FB2D22B, 0x92771935, -/**/ 0x3FC75ECF, 0x26ABA06D, -/**/ 0x3FADD05B, 0x486A1932, -/**/ 0x3FB881D7, 0x5AF971D5, -/**/ 0x3FAAEE52, 0x831AEE0C, -/**/ 0x3CA13F57, 0xAD1B1BEF, -/**/ 0x3FC24FF9, 0xC8E09330, -/**/ 0x3FF04000, 0x00000000, -/**/ 0xBF75B8B3, 0x8A68699B, -/**/ 0x3FC2C000, 0x00000000, -/**/ 0x3FF02CAA, 0x59374E09, -/**/ 0x3FB35EBE, 0xD44E8BEA, -/**/ 0x3FC77D1A, 0x92E4BE8A, -/**/ 0x3FAEC706, 0x4A6C34FD, -/**/ 0x3FB8D41E, 0x972F6E07, -/**/ 0x3FABECCD, 0xF9845F69, -/**/ 0x3C8BA1FA, 0x945C4185, -/**/ 0x3FC2D155, 0x83C058B0, -/**/ 0x3FF04000, 0x00000000, -/**/ 0xBF7355A6, 0xC8B1F774, -/**/ 0x3FC34000, 0x00000000, -/**/ 0x3FF02F1F, 0x03DC7745, -/**/ 0x3FB3EC0A, 0xC1EE9F61, -/**/ 0x3FC79C5E, 0x4A82E6D2, -/**/ 0x3FAFC0F7, 0x19B1EF72, -/**/ 0x3FB9296A, 0x2AA943E5, -/**/ 0x3FACF141, 0xEF8B9DE7, -/**/ 0xBC834081, 0x083C8716, -/**/ 0x3FC352C4, 0x9D6E5610, -/**/ 0x3FF04000, 0x00000000, -/**/ 0xBF70E0FC, 0x2388BB30, -/**/ 0x3FC3C000, 0x00000000, -/**/ 0x3FF031A5, 0x63D81251, -/**/ 0x3FB47A15, 0x370B721F, -/**/ 0x3FC7BC9D, 0xA28731E5, -/**/ 0x3FB05F26, 0x1E305BE9, -/**/ 0x3FB981CC, 0x5FA50FBD, -/**/ 0x3FADFBEF, 0x42AC4083, -/**/ 0x3CA20ACB, 0xA8E107C7, -/**/ 0x3FC3D447, 0xA336F5E0, -/**/ 0x3FF04000, 0x00000000, -/**/ 0xBF6CB538, 0x4FDB5D5C, -/**/ 0x3FC44000, 0x00000000, -/**/ 0x3FF0343D, 0x9159D86F, -/**/ 0x3FB508E4, 0x23B3747C, -/**/ 0x3FC7DDDC, 0x0ED597CB, -/**/ 0x3FB0DF92, 0x79ADF104, -/**/ 0x3FB9DD58, 0x4658D945, -/**/ 0x3FAF0D19, 0x14ACA06B, -/**/ 0xBCA4E10D, 0xDF636EFE, -/**/ 0x3FC455DF, 0x23252C00, -/**/ 0x3FF04000, 0x00000000, -/**/ 0xBF6784DD, 0x4C4F221A, -/**/ 0x3FC4C000, 0x00000000, -/**/ 0x3FF036E7, 0xA550D410, -/**/ 0x3FB5987D, 0x8D0AF1E7, -/**/ 0x3FC8001D, 0x22F39726, -/**/ 0x3FB161D0, 0xA1116D73, -/**/ 0x3FBA3C21, 0xBBEA1528, -/**/ 0x3FB01282, 0x74202FF6, -/**/ 0x3CAA0611, 0xD10866E2, -/**/ 0x3FC4D78B, 0xAC086560, -/**/ 0x3FF04000, 0x00000000, -/**/ 0xBF6230B5, 0x5E57DF8A, -/**/ 0x3FC54000, 0x00000000, -/**/ 0x3FF039A3, 0xB96E0F8A, -/**/ 0x3FB628E7, 0x8E0C29F6, -/**/ 0x3FC82364, 0x92CEDE01, -/**/ 0x3FB1E5F0, 0xFB7B5D84, -/**/ 0x3FBA9E3D, 0x71BD08EE, -/**/ 0x3FB0A1FD, 0x5F7FFAB4, -/**/ 0xBC90F980, 0xEF04F6E7, -/**/ 0x3FC5594D, 0xCD7A8DC0, -/**/ 0x3FF04000, 0x00000000, -/**/ 0xBF59711A, 0x47C1D879, -/**/ 0x3FC5C000, 0x00000000, -/**/ 0x3FF03C71, 0xE8275C12, -/**/ 0x3FB6BA28, 0x584C2A23, -/**/ 0x3FC847B6, 0x338C3D4B, -/**/ 0x3FB26C04, 0x59A55DD8, -/**/ 0x3FBB03C0, 0xF5202D6A, -/**/ 0x3FB13522, 0x9C6466A4, -/**/ 0x3C983C9A, 0x2A268973, -/**/ 0x3FC5DB26, 0x17E62A20, -/**/ 0x3FF04000, 0x00000000, -/**/ 0xBF4C70BE, 0xC51F7008, -/**/ 0x3FC64000, 0x00000000, -/**/ 0x3FF03F52, 0x4CBA31A9, -/**/ 0x3FB74C46, 0x34C49ADE, -/**/ 0x3FC86D15, 0xFC5F33CC, -/**/ 0x3FB2F41B, 0xFA419D7C, -/**/ 0x3FBB6CC2, 0xB757E82A, -/**/ 0x3FB1CC18, 0xDA4D5C39, -/**/ 0xBCA862D4, 0x2DFB224D, -/**/ 0x3FC65D15, 0x1C8C8AF0, -/**/ 0x3FF04000, 0x00000000, -/**/ 0xBF25B668, 0xB9CADBBF, -/**/ 0x3FC6C000, 0x00000000, -/**/ 0x3FF04245, 0x032EA88F, -/**/ 0x3FB7DF47, 0x84A2B473, -/**/ 0x3FC89388, 0x076A60F5, -/**/ 0x3FB37E49, 0x8E8394C1, -/**/ 0x3FBBD95A, 0x160F3472, -/**/ 0x3FB26708, 0x39844810, -/**/ 0x3C994228, 0x698BC8EA, -/**/ 0x3FC6DF1B, 0x6D8C14A0, -/**/ 0x3FF04000, 0x00000000, -/**/ 0x3F422819, 0x754477AC, -/**/ 0x3FC74000, 0x00000000, -/**/ 0x3FF0454A, 0x285A8CEB, -/**/ 0x3FB87332, 0xC21B9224, -/**/ 0x3FC8BB10, 0x92A93402, -/**/ 0x3FB40A9F, 0x3ED3F586, -/**/ 0x3FBC499F, 0x643217C8, -/**/ 0x3FB3061A, 0x5D29A16B, -/**/ 0xBCA3B2DF, 0x3DF9F2D7, -/**/ 0x3FC76139, 0x9DE6A160, -/**/ 0x3FF04000, 0x00000000, -/**/ 0x3F5528A1, 0x6A33AB4B, -/**/ 0x3FC7C000, 0x00000000, -/**/ 0x3FF04861, 0xD9E48D58, -/**/ 0x3FB9080E, 0x81461BF6, -/**/ 0x3FC8E3B4, 0x00E32FFA, -/**/ 0x3FB4992F, 0xAFB1F2A5, -/**/ 0x3FBCBDAB, 0xF33705D5, -/**/ 0x3FB3A97A, 0x7E23EE89, -/**/ 0x3C7AAD12, 0xCCE44C41, -/**/ 0x3FC7E370, 0x4187FAE0, -/**/ 0x3FF04000, 0x00000000, -/**/ 0x3F60C3B3, 0xC91AAF11, -/**/ 0x3FC84000, 0x00000000, -/**/ 0x3FF04B8C, 0x36478509, -/**/ 0x3FB99DE1, 0x70FAC1B4, -/**/ 0x3FC90D76, 0xDAA92166, -/**/ 0x3FB52A0E, 0x06C416A6, -/**/ 0x3FBD359A, 0x1CDCA344, -/**/ 0x3FB45155, 0x7EFD4CA0, -/**/ 0x3C396CA5, 0x35A8895D, -/**/ 0x3FC865BF, 0xED4C6EF0, -/**/ 0x3FF04000, 0x00000000, -/**/ 0x3F67186C, 0x8F0A11A4, -/**/ 0x3FC8C000, 0x00000000, -/**/ 0x3FF04EC9, 0x5CD5E248, -/**/ 0x3FBA34B2, 0x5BB94403, -/**/ 0x3FC9385D, 0xCF5CA73A, -/**/ 0x3FB5BD4D, 0xF01AFDBE, -/**/ 0x3FBDB185, 0x4D61A7A9, -/**/ 0x3FB4FDDA, 0x00BD47CF, -/**/ 0xBC9D1119, 0x727E8B64, -/**/ 0x3FC8E829, 0x37077E20, -/**/ 0x3FF04000, 0x00000000, -/**/ 0x3F6D92B9, 0xABC490CB, -/**/ 0x3FC94000, 0x00000000, -/**/ 0x3FF05219, 0x6DBD2A10, -/**/ 0x3FBACC88, 0x2894CAA1, -/**/ 0x3FC9646D, 0xB6427516, -/**/ 0x3FB65303, 0xA3A864D7, -/**/ 0x3FBE318A, 0x0E3CF3D4, -/**/ 0x3FB5AF38, 0x78CDA678, -/**/ 0x3CA3841D, 0xDA9D51DF, -/**/ 0x3FC96AAC, 0xB58AA660, -/**/ 0x3FF04000, 0x00000000, -/**/ 0x3F72196D, 0xBD2A1052, -/**/ 0x3FC9C000, 0x00000000, -/**/ 0x3FF0557C, 0x8A099990, -/**/ 0x3FBB6569, 0xDC268965, -/**/ 0x3FC991AB, 0x8F9FBA21, -/**/ 0x3FB6EB43, 0xEAED1E85, -/**/ 0x3FBEB5C6, 0x115C4C63, -/**/ 0x3FB665A3, 0x47F9AEFA, -/**/ 0xBCA1F8FD, 0x03AB3673, -/**/ 0x3FC9ED4B, 0x00AC4A60, -/**/ 0x3FF04000, 0x00000000, -/**/ 0x3F757C8A, 0x0999905B, -/**/ 0x3FCA4000, 0x00000000, -/**/ 0x3FF058F2, 0xD3A9E674, -/**/ 0x3FBBFF5E, 0x99873832, -/**/ 0x3FC9C01C, 0x85E31CE9, -/**/ 0x3FB78624, 0x26E09FF2, -/**/ 0x3FBF3E58, 0x3CF0885C, -/**/ 0x3FB7214E, 0xD2986239, -/**/ 0x3C97E3E5, 0x3E594694, -/**/ 0x3FCA7004, 0xB14EB5D0, -/**/ 0x3FF04000, 0x00000000, -/**/ 0x3F78F2D3, 0xA9E6746B, -/**/ 0x3FCAC000, 0x00000000, -/**/ 0x3FF05C7C, 0x6D731ECB, -/**/ 0x3FBC9A6D, 0xA34FA4B3, -/**/ 0x3FC9EFC5, 0xEED9C253, -/**/ 0x3FB823BA, 0x5614FAEB, -/**/ 0x3FBFCB60, 0xB7CE698F, -/**/ 0x3FB7E271, 0x99F3292F, -/**/ 0xBC9842C6, 0x068D709C, -/**/ 0x3FCAF2DA, 0x61674110, -/**/ 0x3FF04000, 0x00000000, -/**/ 0x3F7C7C6D, 0x731ECAE2, -/**/ 0x3FCB4000, 0x00000000, -/**/ 0x3FF06019, 0x7B24A973, -/**/ 0x3FBD369E, 0x5CA0A798, -/**/ 0x3FCA20AD, 0x4CF0DB64, -/**/ 0x3FB8C41D, 0x1B1A3F31, -/**/ 0x3FC02E80, 0x7B35E049, -/**/ 0x3FB8A944, 0x56FB8A97, -/**/ 0xBCACBF9C, 0xD337B37C, -/**/ 0x3FCB75CC, 0xAC059370, -/**/ 0x3FF08000, 0x00000000, -/**/ 0xBF7FE684, 0xDB568D78, -/**/ 0x3FCBC000, 0x00000000, -/**/ 0x3FF063CA, 0x216C6801, -/**/ 0x3FBDD3F8, 0x4A32C9FD, -/**/ 0x3FCA52D8, 0x50843BC9, -/**/ 0x3FB96763, 0xC324648A, -/**/ 0x3FC079AD, 0xE4407899, -/**/ 0x3FB97602, 0x1663A5DC, -/**/ 0xBCA3ADC3, 0xC637289D, -/**/ 0x3FCBF8DC, 0x2D5B06A0, -/**/ 0x3FF08000, 0x00000000, -/**/ 0xBF7C35DE, 0x9397FEA6, -/**/ 0x3FCC4000, 0x00000000, -/**/ 0x3FF0678E, 0x85EAFB1F, -/**/ 0x3FBE7283, 0x136DEAC6, -/**/ 0x3FCA864C, 0xD93A817D, -/**/ 0x3FBA0DA6, 0x4CF7089B, -/**/ 0x3FC0C74A, 0xB3ABB322, -/**/ 0x3FBA48E8, 0x562E6E1E, -/**/ 0xBC951E3E, 0x7EB8FFF8, -/**/ 0x3FCC7C09, 0x82C22B80, -/**/ 0x3FF08000, 0x00000000, -/**/ 0xBF78717A, 0x1504E0D3, -/**/ 0x3FCCC000, 0x00000000, -/**/ 0x3FF06B66, 0xCF382A59, -/**/ 0x3FBF1246, 0x838936FB, -/**/ 0x3FCABB10, 0xF76F5C94, -/**/ 0x3FBAB6FD, 0x701A77AE, -/**/ 0x3FC11769, 0xC26702C6, -/**/ 0x3FBB2237, 0x24CDF38E, -/**/ 0xBC8DB69A, 0xE28307A9, -/**/ 0x3FCCFF55, 0x4AC67190, -/**/ 0x3FF08000, 0x00000000, -/**/ 0xBF749930, 0xC7D5A6B9, -/**/ 0x3FCD4000, 0x00000000, -/**/ 0x3FF06F53, 0x24E7707F, -/**/ 0x3FBFB34A, 0x8AB3CBB2, -/**/ 0x3FCAF12A, 0xEDAC8D74, -/**/ 0x3FBB6382, 0xA45DA614, -/**/ 0x3FC16A1E, 0xAD8E9F44, -/**/ 0x3FBC0231, 0x41E7749D, -/**/ 0x3C76CA27, 0x22DC16A2, -/**/ 0x3FCD82C0, 0x252BF240, -/**/ 0x3FF08000, 0x00000000, -/**/ 0xBF70ACDB, 0x188F814B, -/**/ 0x3FCDC000, 0x00000000, -/**/ 0x3FF07353, 0xAF8CADA0, -/**/ 0x3FC02ACB, 0x9FA32DC9, -/**/ 0x3FCB28A1, 0x32323718, -/**/ 0x3FBC1350, 0x29A8F15E, -/**/ 0x3FC1BF7D, 0xDEB270E1, -/**/ 0x3FBCE91C, 0x40D67463, -/**/ 0x3CA6E976, 0x104BAA08, -/**/ 0x3FCE064A, 0xB2F76140, -/**/ 0x3FF08000, 0x00000000, -/**/ 0xBF6958A0, 0xE6A4BFC9, -/**/ 0x3FCE4000, 0x00000000, -/**/ 0x3FF07768, 0x98C0FFD9, -/**/ 0x3FC07C9A, 0x6F7F1AF0, -/**/ 0x3FCB617A, 0x708F2AFB, -/**/ 0x3FBCC681, 0x1025B50C, -/**/ 0x3FC2179C, 0x9487453A, -/**/ 0x3FBDD740, 0xAD09B3AB, -/**/ 0xBC8D32DB, 0x189038C0, -/**/ 0x3FCE89F5, 0x96762300, -/**/ 0x3FF08000, 0x00000000, -/**/ 0xBF612ECE, 0x7E004D50, -/**/ 0x3FCEC000, 0x00000000, -/**/ 0x3FF07B92, 0x0B27C417, -/**/ 0x3FC0CF15, 0xE821087A, -/**/ 0x3FCB9BBD, 0x8B49DC8C, -/**/ 0x3FBD7D31, 0x40BEF5C2, -/**/ 0x3FC27290, 0xEC080575, -/**/ 0x3FBECCEA, 0x3056A6A9, -/**/ 0x3C9DE506, 0x0C9B27A2, -/**/ 0x3FCF0DC1, 0x73468A50, -/**/ 0x3FF08000, 0x00000000, -/**/ 0xBF51B7D3, 0x60EFA34D, -/**/ 0x3FCF4000, 0x00000000, -/**/ 0x3FF07FD0, 0x3273C018, -/**/ 0x3FC12242, 0x51B87F08, -/**/ 0x3FCBD771, 0x9D9AB2BC, -/**/ 0x3FBE377D, 0x85FFA125, -/**/ 0x3FC2D071, 0xEA0CFE55, -/**/ 0x3FBFCA67, 0xBB61DDD3, -/**/ 0xBCA25383, 0x88A645E7, -/**/ 0x3FCF91AE, 0xEE603F40, -/**/ 0x3FF08000, 0x00000000, -/**/ 0xBF07E6C6, 0x1FF422B6, -/**/ 0x3FCFC000, 0x00000000, -/**/ 0x3FF08423, 0x3B6C76F2, -/**/ 0x3FC17624, 0x0A1DF897, -/**/ 0x3FCC149D, 0xFD38779D, -/**/ 0x3FBEF583, 0x95531ECD, -/**/ 0x3FC33157, 0x855FA966, -/**/ 0x3FC06805, 0xD81E6BAA, -/**/ 0x3C86827E, 0x1B47FAEC, -/**/ 0x3FD00ADF, 0x570E6798, -/**/ 0x3FF08000, 0x00000000, -/**/ 0x3F508CED, 0xB1DBC656, -/**/ 0x3FD02000, 0x00000000, -/**/ 0x3FF0888B, 0x53F3A97B, -/**/ 0x3FC1CABF, 0x858525D6, -/**/ 0x3FCC534A, 0x3C37AF90, -/**/ 0x3FBFB762, 0x18AD312A, -/**/ 0x3FC3955A, 0xB151CAAD, -/**/ 0x3FC0EF16, 0x07ADE82D, -/**/ 0x3CAEEF44, 0xFCDE8746, -/**/ 0x3FD04CF8, 0xAD203480, -/**/ 0x3FF08000, 0x00000000, -/**/ 0x3F6116A7, 0xE752F5A1, -/**/ 0x3FD06000, 0x00000000, -/**/ 0x3FF08D08, 0xAB0B03F8, -/**/ 0x3FC22019, 0x4F34EEE8, -/**/ 0x3FCC937E, 0x2AFDABDE, -/**/ 0x3FC03E9C, 0x5C4F35BA, -/**/ 0x3FC3FC95, 0x68DF21A6, -/**/ 0x3FC17A91, 0x53843C52, -/**/ 0xBC9D6F54, 0xC2BB835A, -/**/ 0x3FD08F23, 0xCE0162B8, -/**/ 0x3FF08000, 0x00000000, -/**/ 0x3F6A1156, 0x1607EF23, -/**/ 0x3FD0A000, 0x00000000, -/**/ 0x3FF0919B, 0x70D9FA87, -/**/ 0x3FC27636, 0x0A456C09, -/**/ 0x3FCCD541, 0xDA483778, -/**/ 0x3FC0A394, 0x136D6630, -/**/ 0x3FC46722, 0xBA615E9C, -/**/ 0x3FC20AA6, 0xA2BC6F73, -/**/ 0x3CA9D006, 0x7F1D9D86, -/**/ 0x3FD0D161, 0x0F0C1EC8, -/**/ 0x3FF08000, 0x00000000, -/**/ 0x3F719B70, 0xD9FA8688, -/**/ 0x3FD0E000, 0x00000000, -/**/ 0x3FF09643, 0xD6B3D5D1, -/**/ 0x3FC2CD1A, 0x72641546, -/**/ 0x3FCD189D, 0x9D4AC7EC, -/**/ 0x3FC10AA9, 0x149C2E66, -/**/ 0x3FC4D51E, 0xD3DE8741, -/**/ 0x3FC29F86, 0xF6DA4768, -/**/ 0x3CAEA900, 0x828C2A81, -/**/ 0x3FD113B0, 0xC65D88C8, -/**/ 0x3FF08000, 0x00000000, -/**/ 0x3F7643D6, 0xB3D5D119, -/**/ 0x3FD12000, 0x00000000, -/**/ 0x3FF09B02, 0x0F1DF195, -/**/ 0x3FC324CB, 0x5C9E6B3F, -/**/ 0x3FCD5D9A, 0x0BE228B7, -/**/ 0x3FC173EC, 0xD29602B0, -/**/ 0x3FC546A7, 0x0FFA7799, -/**/ 0x3FC33965, 0x87BA569F, -/**/ 0xBCAE3258, 0x9956F2C3, -/**/ 0x3FD15613, 0x4ADA6FF0, -/**/ 0x3FF08000, 0x00000000, -/**/ 0x3F7B020F, 0x1DF1952F, -/**/ 0x3FD16000, 0x00000000, -/**/ 0x3FF09FD6, 0x4DD62EB0, -/**/ 0x3FC37D4D, 0xB8335DE5, -/**/ 0x3FCDA440, 0x04DFA3F1, -/**/ 0x3FC1DF71, 0x55E59412, -/**/ 0x3FC5BBDA, 0x0394B72E, -/**/ 0x3FC3D877, 0xE1177398, -/**/ 0x3CA8AC88, 0x3B5720A7, -/**/ 0x3FD19888, 0xF43427A8, -/**/ 0x3FF08000, 0x00000000, -/**/ 0x3F7FD64D, 0xD62EAF85, -/**/ 0x3FD1A000, 0x00000000, -/**/ 0x3FF0A4C0, 0xC7D99A5F, -/**/ 0x3FC3D6A6, 0x8F6BB942, -/**/ 0x3FCDEC98, 0xB06CB8A9, -/**/ 0x3FC24D49, 0x432C74B1, -/**/ 0x3FC634D7, 0x8C1C6EC6, -/**/ 0x3FC47CF6, 0x01BF2560, -/**/ 0x3CA3EDE7, 0x476E25C7, -/**/ 0x3FD1DB12, 0x1AED7720, -/**/ 0x3FF0C000, 0x00000000, -/**/ 0xBF7B3F38, 0x2665A126, -/**/ 0x3FD1E000, 0x00000000, -/**/ 0x3FF0A9C1, 0xB36B4C8B, -/**/ 0x3FC430DB, 0x0879E39B, -/**/ 0x3FCE36AD, 0x82887D8B, -/**/ 0x3FC2BD87, 0xE1B33C79, -/**/ 0x3FC6B1C0, 0xDEA4E95E, -/**/ 0x3FC5271A, 0x7C90504A, -/**/ 0x3CAAFAD9, 0x8A6EBD08, -/**/ 0x3FD21DAF, 0x185FA360, -/**/ 0x3FF0C000, 0x00000000, -/**/ 0xBF763E4C, 0x94B3751C, -/**/ 0x3FD22000, 0x00000000, -/**/ 0x3FF0AED9, 0x481B7EED, -/**/ 0x3FC48BF0, 0x66613BB3, -/**/ 0x3FCE8288, 0x3D9FDD8F, -/**/ 0x3FC33041, 0x22470BF2, -/**/ 0x3FC732B8, 0x97C5B476, -/**/ 0x3FC5D722, 0x9B614F73, -/**/ 0x3CA96B82, 0x759745C8, -/**/ 0x3FD26060, 0x46BF95B8, -/**/ 0x3FF0C000, 0x00000000, -/**/ 0xBF7126B7, 0xE48112DC, -/**/ 0x3FD26000, 0x00000000, -/**/ 0x3FF0B407, 0xBECEDF0E, -/**/ 0x3FC4E7EC, 0x09E5699A, -/**/ 0x3FCED032, 0xF541EC2D, -/**/ 0x3FC3A589, 0xA6688484, -/**/ 0x3FC7B7E2, 0xCC5228BD, -/**/ 0x3FC68D4E, 0x83ECAD1F, -/**/ 0x3CA98586, 0x7CB79363, -/**/ 0x3FD2A326, 0x01231EC8, -/**/ 0x3FF0C000, 0x00000000, -/**/ 0xBF67F082, 0x6241E449, -/**/ 0x3FD2A000, 0x00000000, -/**/ 0x3FF0B94D, 0x51C61D1C, -/**/ 0x3FC544D3, 0x7281F837, -/**/ 0x3FCF1FB8, 0x10F19F89, -/**/ 0x3FC41D76, 0xC7D08A44, -/**/ 0x3FC84165, 0x1AF4E5E6, -/**/ 0x3FC749E1, 0x5EE5D838, -/**/ 0x3C8A2A36, 0xA1F9A890, -/**/ 0x3FD2E600, 0xA3865760, -/**/ 0x3FF0C000, 0x00000000, -/**/ 0xBF5ACAB8, 0xE78B8E2F, -/**/ 0x3FD2E000, 0x00000000, -/**/ 0x3FF0BEAA, 0x3CA5B9C1, -/**/ 0x3FC5A2AC, 0x3F6A91D3, -/**/ 0x3FCF7122, 0x4F1650DB, -/**/ 0x3FC4981E, 0xA04F63E7, -/**/ 0x3FC8CF66, 0xBEBC9B64, -/**/ 0x3FC80D21, 0x81598BF7, -/**/ 0xBC984143, 0x8E0FD320, -/**/ 0x3FD328F0, 0x8AD12008, -/**/ 0x3FF0C000, 0x00000000, -/**/ 0xBF355C35, 0xA463F3FD, -/**/ 0x3FD32000, 0x00000000, -/**/ 0x3FF0C41E, 0xBC7E151A, -/**/ 0x3FC6017C, 0x30943E19, -/**/ 0x3FCFC47C, 0xC80C760D, -/**/ 0x3FC51598, 0x120B129D, -/**/ 0x3FC96210, 0xA2A855B5, -/**/ 0x3FC8D758, 0x9880230D, -/**/ 0xBCA4D129, 0xBF178596, -/**/ 0x3FD36BF6, 0x14DCC050, -/**/ 0x3FF0C000, 0x00000000, -/**/ 0x3F507AF1, 0xF854661E, -/**/ 0x3FD36000, 0x00000000, -/**/ 0x3FF0C9AB, 0x0FD3C135, -/**/ 0x3FC66149, 0x27C80482, -/**/ 0x3FD00CE9, 0x78AC0DDD, -/**/ 0x3FC595FA, 0xD02204B1, -/**/ 0x3FC9F98D, 0x7642750D, -/**/ 0x3FC9A8D3, 0xD82AC48A, -/**/ 0x3C977587, 0x289B3951, -/**/ 0x3FD3AF11, 0xA079A6D8, -/**/ 0x3FF0C000, 0x00000000, -/**/ 0x3F63561F, 0xA7826A0D, -/**/ 0x3FD3A000, 0x00000000, -/**/ 0x3FF0CF4F, 0x76A81A69, -/**/ 0x3FC6C219, 0x29BF5ACD, -/**/ 0x3FD03898, 0x507D5DD4, -/**/ 0x3FC6195F, 0x67B79439, -/**/ 0x3FCA9609, 0xC35A709F, -/**/ 0x3FCA81E4, 0x2BF7455C, -/**/ 0x3CA03304, 0xF424551E, -/**/ 0x3FD3F243, 0x8D754B40, -/**/ 0x3FF0C000, 0x00000000, -/**/ 0x3F6E9EED, 0x5034D2A8, -/**/ 0x3FD3E000, 0x00000000, -/**/ 0x3FF0D50C, 0x3282280D, -/**/ 0x3FC723F2, 0x5F4ACC23, -/**/ 0x3FD06551, 0x08771131, -/**/ 0x3FC69FDF, 0x4970163E, -/**/ 0x3FCB37B4, 0x04EE9A0A, -/**/ 0x3FCB62DE, 0x6B79BC18, -/**/ 0x3CAECF25, 0x02A2F456, -/**/ 0x3FD4358C, 0x3CA032E0, -/**/ 0x3FF0C000, 0x00000000, -/**/ 0x3F750C32, 0x82280D28, -/**/ 0x3FD42000, 0x00000000, -/**/ 0x3FF0DAE1, 0x8677C82D, -/**/ 0x3FC786DB, 0x16834ABE, -/**/ 0x3FD09319, 0xF1631731, -/**/ 0x3FC72994, 0xD36297AF, -/**/ 0x3FCBDEBC, 0xBF583888, -/**/ 0x3FCC4C1B, 0x918E2AE6, -/**/ 0x3CA92F70, 0xF34A155C, -/**/ 0x3FD478EC, 0x0FD419C8, -/**/ 0x3FF0C000, 0x00000000, -/**/ 0x3F7AE186, 0x77C82D53, -/**/ 0x3FD46000, 0x00000000, -/**/ 0x3FF0E0CF, 0xB73728F8, -/**/ 0x3FC7EAD9, 0xC406A36A, -/**/ 0x3FD0C1F9, 0x91BDA616, -/**/ 0x3FC7B69B, 0x5B86C42B, -/**/ 0x3FCC8B56, 0x99CD8C9F, -/**/ 0x3FCD3DF8, 0xF7084936, -/**/ 0xBC923B74, 0x54942387, -/**/ 0x3FD4BC63, 0x69FA40E8, -/**/ 0x3FF10000, 0x00000000, -/**/ 0xBF7F3048, 0xC8D707BB, -/**/ 0x3FD4A000, 0x00000000, -/**/ 0x3FF0E6D7, 0x0B1092B8, -/**/ 0x3FC84FF5, 0x043F9011, -/**/ 0x3FD0F1F6, 0xA7AFD6EB, -/**/ 0x3FC8470F, 0x3AA5D7B9, -/**/ 0x3FCD3DB6, 0x794E9CFD, -/**/ 0x3FCE38D8, 0x90FB69FD, -/**/ 0x3C9CFA2D, 0xC2327DC5, -/**/ 0x3FD4FFF2, 0xAF11E2C0, -/**/ 0x3FF10000, 0x00000000, -/**/ 0xBF7928F4, 0xEF6D4848, -/**/ 0x3FD4E000, 0x00000000, -/**/ 0x3FF0ECF7, 0xCA008550, -/**/ 0x3FC8B633, 0x9CB9ECA7, -/**/ 0x3FD12318, 0x2B20AC3D, -/**/ 0x3FC8DB0D, 0xD7D5E860, -/**/ 0x3FCDF613, 0x9D1315AF, -/**/ 0x3FCF3D21, 0x32D8BC6F, -/**/ 0x3C9C6A36, 0x92E48EEE, -/**/ 0x3FD5439A, 0x4436D008, -/**/ 0x3FF10000, 0x00000000, -/**/ 0xBF730835, 0xFF7AAF92, -/**/ 0x3FD52000, 0x00000000, -/**/ 0x3FF0F332, 0x3DBA2C62, -/**/ 0x3FC91D9C, 0x7D83983C, -/**/ 0x3FD15565, 0x4FDDA02E, -/**/ 0x3FC972B5, 0xB48747C7, -/**/ 0x3FCEB4A7, 0xBC9105F9, -/**/ 0x3FD0259F, 0x6A535ECF, -/**/ 0x3C87EB36, 0xF6EA55C1, -/**/ 0x3FD5875A, 0x8FA83538, -/**/ 0x3FF10000, 0x00000000, -/**/ 0xBF699B84, 0x8BA73C6A, -/**/ 0x3FD56000, 0x00000000, -/**/ 0x3FF0F986, 0xB1B22D42, -/**/ 0x3FC98636, 0xC29A92ED, -/**/ 0x3FD188E5, 0x87DBE62D, -/**/ 0x3FCA0E26, 0x792C37EB, -/**/ 0x3FCF79AF, 0x2735E8CD, -/**/ 0x3FD0B1D1, 0x6ECCD4C0, -/**/ 0x3C9502B5, 0xBEAE0510, -/**/ 0x3FD5CB33, 0xF8CF8AC0, -/**/ 0x3FF10000, 0x00000000, -/**/ 0xBF59E539, 0x374AF74C, -/**/ 0x3FD5A000, 0x00000000, -/**/ 0x3FF0FFF5, 0x7329D23A, -/**/ 0x3FC9F009, 0xB568F082, -/**/ 0x3FD1BDA0, 0x85939DB2, -/**/ 0x3FCAAD81, 0x0283B18A, -/**/ 0x3FD022B4, 0x72F69148, -/**/ 0x3FD14362, 0x39AD0B79, -/**/ 0xBCAD7968, 0x80828B86, -/**/ 0x3FD60F26, 0xE847B130, -/**/ 0x3FF10000, 0x00000000, -/**/ 0xBEE519AC, 0x5B8BC081, -/**/ 0x3FD5E000, 0x00000000, -/**/ 0x3FF1067E, 0xD13A9687, -/**/ 0x3FCA5B1C, 0xCE4F3F61, -/**/ 0x3FD1F39E, 0x3E764545, -/**/ 0x3FCB50E7, 0x6F90871B, -/**/ 0x3FD08C0B, 0x6F487F97, -/**/ 0x3FD1DA90, 0x67265C20, -/**/ 0x3CAE5B02, 0x995723AD, -/**/ 0x3FD65333, 0xC7E43AA0, -/**/ 0x3FF10000, 0x00000000, -/**/ 0x3F59FB44, 0xEA5A1D64, -/**/ 0x3FD62000, 0x00000000, -/**/ 0x3FF10D23, 0x1CE216D9, -/**/ 0x3FCAC777, 0xB63E0B53, -/**/ 0x3FD22AE6, 0xED81D055, -/**/ 0x3FCBF87D, 0x3046C5AC, -/**/ 0x3FD0F8FE, 0xFCB29FE4, -/**/ 0x3FD2779D, 0xC99A404E, -/**/ 0xBCA2AF1E, 0xC3202AE8, -/**/ 0x3FD6975B, 0x02B8E378, -/**/ 0x3FF10000, 0x00000000, -/**/ 0x3F6A4639, 0xC42DB2AB, -/**/ 0x3FD66000, 0x00000000, -/**/ 0x3FF113E2, 0xA90E6A24, -/**/ 0x3FCB3522, 0x485F2C6B, -/**/ 0x3FD26383, 0x15F1D6CC, -/**/ 0x3FCCA467, 0x14F9D555, -/**/ 0x3FD169B3, 0x245E397E, -/**/ 0x3FD31ACF, 0x99479CF7, -/**/ 0xBC730D3F, 0x8992C228, -/**/ 0x3FD6DB9D, 0x05213B28, -/**/ 0x3FF10000, 0x00000000, -/**/ 0x3F73E2A9, 0x0E6A2469, -/**/ 0x3FD6A000, 0x00000000, -/**/ 0x3FF11ABD, 0xCAAAE6D5, -/**/ 0x3FCBA424, 0x93CF9B23, -/**/ 0x3FD29D7B, 0x86106AD4, -/**/ 0x3FCD54CB, 0x5E96870B, -/**/ 0x3FD1DE4D, 0x9975D46D, -/**/ 0x3FD3C46E, 0xA709F8A4, -/**/ 0xBC9CB630, 0x457B6F5C, -/**/ 0x3FD71FFA, 0x3CC87FC8, -/**/ 0x3FF10000, 0x00000000, -/**/ 0x3F7ABDCA, 0xAAE6D53D, -/**/ 0x3FD6E000, 0x00000000, -/**/ 0x3FF121B4, 0xD8AD589E, -/**/ 0x3FCC1486, 0xDD6A8C89, -/**/ 0x3FD2D8D9, 0x5A283891, -/**/ 0x3FCE09D1, 0xCFB4F5A1, -/**/ 0x3FD256F5, 0xCF594BB6, -/**/ 0x3FD474C7, 0x92614C29, -/**/ 0xBC88FB31, 0x533051E9, -/**/ 0x3FD76473, 0x18B1AD28, -/**/ 0x3FF14000, 0x00000000, -/**/ 0xBF7E4B27, 0x52A761D6, -/**/ 0x3FD72000, 0x00000000, -/**/ 0x3FF128C8, 0x2C23AB4A, -/**/ 0x3FCC8651, 0xA1A6A356, -/**/ 0x3FD315A5, 0xFF99ABE3, -/**/ 0x3FCEC3A3, 0xBE8EE4C2, -/**/ 0x3FD2D3D5, 0x11207D5D, -/**/ 0x3FD52C2B, 0x02FE6DF8, -/**/ 0xBCA3F304, 0xFE4D8DF3, -/**/ 0x3FD7A908, 0x093FC1F0, -/**/ 0x3FF14000, 0x00000000, -/**/ 0xBF7737D3, 0xDC54B622, -/**/ 0x3FD76000, 0x00000000, -/**/ 0x3FF12FF8, 0x20420F33, -/**/ 0x3FCCF98D, 0x96860D89, -/**/ 0x3FD353EB, 0x3814F292, -/**/ 0x3FCF826C, 0x27E81BF7, -/**/ 0x3FD35516, 0x9A827352, -/**/ 0x3FD5EAED, 0xE614C6DF, -/**/ 0x3C80AEDB, 0x36C1700C, -/**/ 0x3FD7EDB9, 0x803E3C28, -/**/ 0x3FF14000, 0x00000000, -/**/ 0xBF7007DF, 0xBDF0CCC6, -/**/ 0x3FD7A000, 0x00000000, -/**/ 0x3FF13745, 0x12719C3A, -/**/ 0x3FCD6E43, 0xAD9A717F, -/**/ 0x3FD393B3, 0x1CFACD12, -/**/ 0x3FD0232B, 0xE17B8F05, -/**/ 0x3FD3DAE7, 0xB23873BC, -/**/ 0x3FD6B169, 0xAFB712E5, -/**/ 0x3C994C0C, 0x0BC74599, -/**/ 0x3FD83287, 0xF0E9CF80, -/**/ 0x3FF14000, 0x00000000, -/**/ 0xBF6175DB, 0x1CC78CA5, -/**/ 0x3FD7E000, 0x00000000, -/**/ 0x3FF13EAF, 0x625F7844, -/**/ 0x3FCDE47D, 0x161D9978, -/**/ 0x3FD3D508, 0x22E63DCA, -/**/ 0x3FD087CA, 0x8B2EC7EB, -/**/ 0x3FD46577, 0xC5F619C8, -/**/ 0x3FD77FFC, 0xA08A73DE, -/**/ 0x3CA1DBDE, 0x6E7B547F, -/**/ 0x3FD87773, 0xCFF956F8, -/**/ 0x3FF14000, 0x00000000, -/**/ 0xBF3509DA, 0x087BC752, -/**/ 0x3FD82000, 0x00000000, -/**/ 0x3FF14637, 0x720C869D, -/**/ 0x3FCE5C43, 0x3F1FD940, -/**/ 0x3FD417F5, 0x1D614654, -/**/ 0x3FD0EF2A, 0x472052ED, -/**/ 0x3FD4F4F8, 0x88116DA6, -/**/ 0x3FD8570A, 0x102117B6, -/**/ 0xBCAB6E89, 0x214A7328, -/**/ 0x3FD8BC7D, 0x93A70458, -/**/ 0x3FF14000, 0x00000000, -/**/ 0x3F58DDC8, 0x321A7479, -/**/ 0x3FD86000, 0x00000000, -/**/ 0x3FF14DDD, 0xA5DDA5C4, -/**/ 0x3FCED59F, 0xD9CD3739, -/**/ 0x3FD45C85, 0x42C70412, -/**/ 0x3FD15964, 0x49C983A8, -/**/ 0x3FD5899E, 0x0EF7ED0B, -/**/ 0x3FD936FA, 0xBC543499, -/**/ 0x3CAFF50D, 0x7B29F22E, -/**/ 0x3FD901A5, 0xB3B9CF50, -/**/ 0x3FF14000, 0x00000000, -/**/ 0x3F6BBB4B, 0xBB4B87E0, -/**/ 0x3FD8A000, 0x00000000, -/**/ 0x3FF155A2, 0x64AC8172, -/**/ 0x3FCF509C, 0xDBCA7047, -/**/ 0x3FD4A2C4, 0x3055A16F, -/**/ 0x3FD1C692, 0xD25160C7, -/**/ 0x3FD6239E, 0xF68F9906, -/**/ 0x3FDA203D, 0x1DFC2EE2, -/**/ 0x3CAD2019, 0x671EF39F, -/**/ 0x3FD946EC, 0xA98F2718, -/**/ 0x3FF14000, 0x00000000, -/**/ 0x3F75A264, 0xAC8171A9, -/**/ 0x3FD8E000, 0x00000000, -/**/ 0x3FF15D86, 0x17D8FF02, -/**/ 0x3FCFCD44, 0x81AAFD5E, -/**/ 0x3FD4EABD, 0xEE72B776, -/**/ 0x3FD236D1, 0x377F943F, -/**/ 0x3FD6C334, 0x83A56DB7, -/**/ 0x3FDB1345, 0xC36D6C50, -/**/ 0xBC7841E5, 0x761537BB, -/**/ 0x3FD98C52, 0xF024E808, -/**/ 0x3FF14000, 0x00000000, -/**/ 0x3F7D8617, 0xD8FF01DE, -/**/ 0x3FD92000, 0x00000000, -/**/ 0x3FF16589, 0x2B5B4A9A, -/**/ 0x3FD025D0, 0xA8C0A8C6, -/**/ 0x3FD5347E, 0xF524E4B6, -/**/ 0x3FD2AA3B, 0xF565EDBD, -/**/ 0x3FD7689A, 0xC98D2842, -/**/ 0x3FDC108F, 0xB128B4DD, -/**/ 0xBC8A5EEB, 0x4452A669, -/**/ 0x3FD9D1D9, 0x04239878, -/**/ 0x3FF18000, 0x00000000, -/**/ 0xBF7A76D4, 0xA4B56661, -/**/ 0x3FD96000, 0x00000000, -/**/ 0x3FF16DAC, 0x0DD68BC8, -/**/ 0x3FD065DF, 0x0EC54C3A, -/**/ 0x3FD58014, 0x30C58A12, -/**/ 0x3FD320F0, 0xBBCBCCEF, -/**/ 0x3FD81410, 0xD218F380, -/**/ 0x3FDD189C, 0xC9371D29, -/**/ 0x3C58C3C1, 0x1D6E6EC7, -/**/ 0x3FDA177F, 0x63E8EF18, -/**/ 0x3FF18000, 0x00000000, -/**/ 0xBF7253F2, 0x29743866, -/**/ 0x3FD9A000, 0x00000000, -/**/ 0x3FF175EF, 0x30AC48A8, -/**/ 0x3FD0A6D3, 0x037BA7C0, -/**/ 0x3FD5CD8B, 0x06EDCD18, -/**/ 0x3FD39B0E, 0x7D679188, -/**/ 0x3FD8C5D8, 0xC8128143, -/**/ 0x3FDE2BF6, 0x39B3613A, -/**/ 0xBC874080, 0xC70C9C76, -/**/ 0x3FDA5D46, 0x8F92A560, -/**/ 0x3FF18000, 0x00000000, -/**/ 0xBF64219E, 0xA76EB06E, -/**/ 0x3FD9E000, 0x00000000, -/**/ 0x3FF17E53, 0x08107EEF, -/**/ 0x3FD0E8B2, 0x40691386, -/**/ 0x3FD61CF1, 0x5BA2319A, -/**/ 0x3FD418B5, 0x7FF30656, -/**/ 0x3FD97E38, 0x24624146, -/**/ 0x3FDF4B2C, 0xF30D6589, -/**/ 0xBC8D4AD9, 0x74DD0C9B, -/**/ 0x3FDAA32F, 0x090998F8, -/**/ 0x3FF18000, 0x00000000, -/**/ 0xBF3ACF7E, 0xF81116BC, -/**/ 0x3FDA2000, 0x00000000, -/**/ 0x3FF186D8, 0x0B1E7A9D, -/**/ 0x3FD12B82, 0xA98356F0, -/**/ 0x3FD66E55, 0x96C051D8, -/**/ 0x3FD49A07, 0x6D28A49D, -/**/ 0x3FDA3D77, 0xDE14D616, -/**/ 0x3FE03B6D, 0x13502F53, -/**/ 0x3CA51700, 0x4AD59707, -/**/ 0x3FDAE939, 0x540D3F08, -/**/ 0x3FF18000, 0x00000000, -/**/ 0x3F5B602C, 0x79EA752F, -/**/ 0x3FDA6000, 0x00000000, -/**/ 0x3FF18F7E, 0xB3EE7285, -/**/ 0x3FD16F4A, 0x4EC4AF40, -/**/ 0x3FD6C1C6, 0xA9B275FD, -/**/ 0x3FD51F27, 0x64B886B9, -/**/ 0x3FDB03E4, 0x9D72A144, -/**/ 0x3FE0D7CF, 0xE7207DD5, -/**/ 0xBCAACE1E, 0x8E77D1B2, -/**/ 0x3FDB2F65, 0xF63F6C78, -/**/ 0x3FF18000, 0x00000000, -/**/ 0x3F6EFD67, 0xDCE509F5, -/**/ 0x3FDAA000, 0x00000000, -/**/ 0x3FF19847, 0x7FABF325, -/**/ 0x3FD1B40F, 0x6DD15EDB, -/**/ 0x3FD71754, 0x156D090D, -/**/ 0x3FD5A83A, 0x0F44EE42, -/**/ 0x3FDBD1CE, 0xF26149CC, -/**/ 0x3FE17B14, 0x9EBB7D53, -/**/ 0x3CA18867, 0x054C177A, -/**/ 0x3FDB75B5, 0x773075F8, -/**/ 0x3FF18000, 0x00000000, -/**/ 0x3F78477F, 0xABF3257B, -/**/ 0x3FDAE000, 0x00000000, -/**/ 0x3FF1A132, 0xEEAD20E6, -/**/ 0x3FD1F9D8, 0x73AFA8F4, -/**/ 0x3FD76F0D, 0xF0BA2B44, -/**/ 0x3FD63565, 0xB2776412, -/**/ 0x3FDCA78B, 0x8E4B8181, -/**/ 0x3FE22595, 0xDE92725A, -/**/ 0xBCABDA45, 0x225EE470, -/**/ 0x3FDBBC28, 0x606BABE0, -/**/ 0x3FF1C000, 0x00000000, -/**/ 0xBF7ECD11, 0x52DF1A7E, -/**/ 0x3FDB2000, 0x00000000, -/**/ 0x3FF1AA41, 0x848ADB16, -/**/ 0x3FD240AB, 0xFE932ABB, -/**/ 0x3FD7C904, 0xEED7E85D, -/**/ 0x3FD6C6D2, 0x4640B1B3, -/**/ 0x3FDD8573, 0x81D01020, -/**/ 0x3FE2D7B3, 0x9938B939, -/**/ 0x3CA12ECB, 0x36D76E02, -/**/ 0x3FDC02BF, 0x3D843430, -/**/ 0x3FF1C000, 0x00000000, -/**/ 0xBF75BE7B, 0x7524EA70, -/**/ 0x3FDB6000, 0x00000000, -/**/ 0x3FF1B373, 0xC839C9AC, -/**/ 0x3FD28890, 0xDFBC912D, -/**/ 0x3FD8254A, 0x666DE3CA, -/**/ 0x3FD75CA9, 0x8B57457C, -/**/ 0x3FDE6BE4, 0x7E7E55FE, -/**/ 0x3FE391D3, 0x68EC3777, -/**/ 0xBC9F7EFE, 0x4D8A80A5, -/**/ 0x3FDC497A, 0x9C2247A0, -/**/ 0x3FF1C000, 0x00000000, -/**/ 0xBF69186F, 0x8C6CA8A7, -/**/ 0x3FDBA000, 0x00000000, -/**/ 0x3FF1BCCA, 0x44246029, -/**/ 0x3FD2D18E, 0x1D6EB966, -/**/ 0x3FD883F0, 0x58DF9E20, -/**/ 0x3FD7F717, 0x2308FF84, -/**/ 0x3FDF5B41, 0x1CEC1692, -/**/ 0x3FE45460, 0xEFAE7F7E, -/**/ 0xBCACA88A, 0xC247C281, -/**/ 0x3FDC905B, 0x0C10D428, -/**/ 0x3FF1C000, 0x00000000, -/**/ 0xBF49ADDE, 0xDCFEB6F6, -/**/ 0x3FDBE000, 0x00000000, -/**/ 0x3FF1C645, 0x8645E0A6, -/**/ 0x3FD31BAA, 0xF4FA598C, -/**/ 0x3FD8E509, 0x7A00CDBD, -/**/ 0x3FD89648, 0xA876EFA4, -/**/ 0x3FE029F8, 0x93BB3BA0, -/**/ 0x3FE51FCE, 0x3E769492, -/**/ 0xBC63BD0A, 0xDAC78BA6, -/**/ 0x3FDCD761, 0x1F4B8A08, -/**/ 0x3FF1C000, 0x00000000, -/**/ 0x3F591619, 0x178298DB, -/**/ 0x3FDC2000, 0x00000000, -/**/ 0x3FF1CFE6, 0x20466A93, -/**/ 0x3FD366EE, 0xDCE16113, -/**/ 0x3FD948A9, 0x3831A262, -/**/ 0x3FD93A6D, 0xCB5336B7, -/**/ 0x3FE0AB30, 0xF50362A5, -/**/ 0x3FE5F494, 0x440F45E4, -/**/ 0xBCA1B23F, 0x79A811B8, -/**/ 0x3FDD1E8D, 0x6A0D56C8, -/**/ 0x3FF1C000, 0x00000000, -/**/ 0x3F6FCC40, 0x8CD52690, -/**/ 0x3FDC6000, 0x00000000, -/**/ 0x3FF1D9AC, 0xA798215A, -/**/ 0x3FD3B361, 0x87135170, -/**/ 0x3FD9AEE3, 0xC4E92F90, -/**/ 0x3FD9E3B8, 0x6C3B0A06, -/**/ 0x3FE13183, 0x439D6983, -/**/ 0x3FE6D333, 0x444347EE, -/**/ 0x3C9E6687, 0x141D7ADE, -/**/ 0x3FDD65E0, 0x82DF5278, -/**/ 0x3FF1C000, 0x00000000, -/**/ 0x3F79ACA7, 0x98215A4D, -/**/ 0x3FDCA000, 0x00000000, -/**/ 0x3FF1E399, 0xB59577B1, -/**/ 0x3FD4010A, 0xE343E389, -/**/ 0x3FDA17CE, 0x1DB4A57B, -/**/ 0x3FDA925C, 0xBAC8CA27, -/**/ 0x3FE1BD2C, 0x29AC5009, -/**/ 0x3FE7BC33, 0x5806ABBE, -/**/ 0x3C89743A, 0xD953CBEA, -/**/ 0x3FDDAD5B, 0x02A82420, -/**/ 0x3FF20000, 0x00000000, -/**/ 0xBF7C664A, 0x6A884EAF, -/**/ 0x3FDCE000, 0x00000000, -/**/ 0x3FF1EDAD, 0xE7A0AD1E, -/**/ 0x3FD44FF3, 0x215D62D8, -/**/ 0x3FDA837E, 0x15B2742E, -/**/ 0x3FDB4691, 0x557C3A62, -/**/ 0x3FE24E6B, 0x9ABECCA0, -/**/ 0x3FE8B024, 0xF75D3619, -/**/ 0xBC60A42B, 0x953C1F21, -/**/ 0x3FDDF4FD, 0x84BBE168, -/**/ 0x3FF20000, 0x00000000, -/**/ 0xBF725218, 0x5F52E269, -/**/ 0x3FDD2000, 0x00000000, -/**/ 0x3FF1F7E9, 0xDF448BE1, -/**/ 0x3FD4A022, 0xB4103D45, -/**/ 0x3FDAF20A, 0x5F90F152, -/**/ 0x3FDC008F, 0x6B992E26, -/**/ 0x3FE2E585, 0x07C18F30, -/**/ 0x3FE9AFA1, 0x8DCE89C2, -/**/ 0xBC8B90A5, 0xE5B4E0DD, -/**/ 0x3FDE3CC8, 0xA6EC6EF0, -/**/ 0x3FF20000, 0x00000000, -/**/ 0xBF602C41, 0x76E83DEE, -/**/ 0x3FDD6000, 0x00000000, -/**/ 0x3FF2024E, 0x42567651, -/**/ 0x3FD4F1A2, 0x53815E48, -/**/ 0x3FDB638A, 0x98189F26, -/**/ 0x3FDCC092, 0xE11F7BB9, -/**/ 0x3FE382BF, 0x968E1C3C, -/**/ 0x3FEABB4C, 0x1A4C4551, -/**/ 0xBCAC384D, 0xC65EE1E9, -/**/ 0x3FDE84BD, 0x099A6620, -/**/ 0x3FF20000, 0x00000000, -/**/ 0x3F427212, 0xB3B2877E, -/**/ 0x3FDDA000, 0x00000000, -/**/ 0x3FF20CDB, 0xBB19D366, -/**/ 0x3FD5447B, 0x00190520, -/**/ 0x3FDBD817, 0x514AC3D7, -/**/ 0x3FDD86DA, 0x7501B24E, -/**/ 0x3FE42666, 0x5D5DCC91, -/**/ 0x3FEBD3D1, 0xDB834BBA, -/**/ 0xBCA62892, 0x64307FE4, -/**/ 0x3FDECCDB, 0x4FC685E0, -/**/ 0x3FF20000, 0x00000000, -/**/ 0x3F69B776, 0x33A6CD00, -/**/ 0x3FDDE000, 0x00000000, -/**/ 0x3FF21792, 0xF864EB38, -/**/ 0x3FD598B6, 0x0573E0CA, -/**/ 0x3FDC4FCA, 0x1E1D9C05, -/**/ 0x3FDE53A7, 0xE9C2FB44, -/**/ 0x3FE4D0C8, 0xA26E99AF, -/**/ 0x3FECF9EB, 0x09A8A359, -/**/ 0xBCADF861, 0xD9AFA9E0, -/**/ 0x3FDF1524, 0x1F23B3F8, -/**/ 0x3FF20000, 0x00000000, -/**/ 0x3F7792F8, 0x64EB3836, -/**/ 0x3FDE2000, 0x00000000, -/**/ 0x3FF22274, 0xADC744F8, -/**/ 0x3FD5EE5C, 0xFD785957, -/**/ 0x3FDCCABD, 0x9EE01B3A, -/**/ 0x3FDF2740, 0x30A7B7B5, -/**/ 0x3FE5823A, 0x202E0D0D, -/**/ 0x3FEE2E5B, 0x9EEBE829, -/**/ 0xBC93BB42, 0xE2EA9787, -/**/ 0x3FDF5D98, 0x202994B8, -/**/ 0x3FF24000, 0x00000000, -/**/ 0xBF7D8B52, 0x38BB0864, -/**/ 0x3FDE6000, 0x00000000, -/**/ 0x3FF22D81, 0x93B1990A, -/**/ 0x3FD64579, 0xD3920D0F, -/**/ 0x3FDD490D, 0x8E4FE1FE, -/**/ 0x3FE000F5, 0xCBD3ED59, -/**/ 0x3FE63B13, 0x4E45F774, -/**/ 0x3FEF71F4, 0x2FD578CE, -/**/ 0x3CA8AD1C, 0xC0E1AC47, -/**/ 0x3FDFA637, 0xFE27BF60, -/**/ 0x3FF24000, 0x00000000, -/**/ 0xBF727E6C, 0x4E66F5A1, -/**/ 0x3FDEA000, 0x00000000, -/**/ 0x3FF238BA, 0x679F6AE1, -/**/ 0x3FD69E16, 0xC815A8F5, -/**/ 0x3FDDCAD6, 0xCF6CD4C9, -/**/ 0x3FE071FA, 0xFD2ADE38, -/**/ 0x3FE6FBB1, 0xAFEE9630, -/**/ 0x3FF062C9, 0x6A7ACB82, -/**/ 0x3C7E3580, 0x35D3555B, -/**/ 0x3FDFEF04, 0x67599588, -/**/ 0x3FF24000, 0x00000000, -/**/ 0xBF5D1661, 0x82547B6F, -/**/ 0x3FDEE000, 0x00000000, -/**/ 0x3FF2441F, 0xEC425F4B, -/**/ 0x3FD6F83E, 0x73CF67B4, -/**/ 0x3FDE5037, 0x7C1691BA, -/**/ 0x3FE0E6D7, 0x7AF8190E, -/**/ 0x3FE7C478, 0x27F29078, -/**/ 0x3FF11512, 0x13B5FFDC, -/**/ 0x3C6CC7A1, 0x5FEBA301, -/**/ 0x3FE01BFF, 0x067D6224, -/**/ 0x3FF24000, 0x00000000, -/**/ 0x3F507FB1, 0x097D2BDC, -/**/ 0x3FDF2000, 0x00000000, -/**/ 0x3FF24FB2, 0xE9AF6533, -/**/ 0x3FD753FB, 0xCBBEA804, -/**/ 0x3FDED94E, 0xF480E731, -/**/ 0x3FE15FB5, 0x106D90C6, -/**/ 0x3FE895CF, 0x52DAD430, -/**/ 0x3FF1D052, 0x28FAAE13, -/**/ 0xBCA50976, 0xE849F35A, -/**/ 0x3FE04092, 0xD1AE3B48, -/**/ 0x3FF24000, 0x00000000, -/**/ 0x3F6F65D3, 0x5ECA665D, -/**/ 0x3FDF6000, 0x00000000, -/**/ 0x3FF25B74, 0x2D8DC7FA, -/**/ 0x3FD7B15A, 0x25013475, -/**/ 0x3FDF663D, 0xEF8D6387, -/**/ 0x3FE1DCBF, 0xA2DF4BFF, -/**/ 0x3FE97025, 0xE7C2E4E5, -/**/ 0x3FF29510, 0x1C2AE4AB, -/**/ 0x3CA4C8DC, 0xB02A3D13, -/**/ 0x3FE0653D, 0xF0FD9FD8, -/**/ 0x3FF24000, 0x00000000, -/**/ 0x3F7B742D, 0x8DC7FA40, -/**/ 0x3FDFA000, 0x00000000, -/**/ 0x3FF26764, 0x8B4843F2, -/**/ 0x3FD81065, 0x38F10257, -/**/ 0x3FDFF726, 0x8C1920B1, -/**/ 0x3FE25E25, 0x5148D4E4, -/**/ 0x3FEA53F1, 0x2061C3FE, -/**/ 0x3FF363DB, 0x5B9300E5, -/**/ 0xBCA47774, 0x624B8B97, -/**/ 0x3FE08A00, 0xC1CAE338, -/**/ 0x3FF28000, 0x00000000, -/**/ 0xBF789B74, 0xB7BC0E50, -/**/ 0x3FDFE000, 0x00000000, -/**/ 0x3FF27384, 0xDC4036F2, -/**/ 0x3FD87129, 0x29775C8F, -/**/ 0x3FE04616, 0x31A78776, -/**/ 0x3FE2E416, 0x95EE0C65, -/**/ 0x3FEB41AD, 0x28E05161, -/**/ 0x3FF43D4C, 0xFF1DF849, -/**/ 0x3CA5941C, 0xBABBA919, -/**/ 0x3FE0AEDB, 0xA3221C1C, -/**/ 0x3FF28000, 0x00000000, -/**/ 0xBF68F647, 0x7F921C27, -/**/ 0x3FE01000, 0x00000000, -/**/ 0x3FF27FD6, 0x00030888, -/**/ 0x3FD8D3B2, 0x8598A1B5, -/**/ 0x3FE092BA, 0x4E0BC755, -/**/ 0x3FE36EC6, 0x6A428EEC, -/**/ 0x3FEC39C0, 0x44F514C9, -/**/ 0x3FF52205, 0x18C4EF3A, -/**/ 0x4000C1D1, 0xA852F235, -/**/ 0x3CA78082, 0xD00F64B8, -/**/ 0x3FE0D3CE, 0xF5C846F8, -/**/ 0x3FF28000, 0x00000000, -/**/ 0xBF04FFFE, 0x7BBC39DF, -/**/ 0x3FE03000, 0x00000000, -/**/ 0x3FF28C58, 0xDC81E6D7, -/**/ 0x3FD9380E, 0x4E3BF356, -/**/ 0x3FE0E192, 0xFFC646A7, -/**/ 0x3FE3FE6A, 0x6D34756D, -/**/ 0x3FED3CEF, 0x139ABC91, -/**/ 0x3FF612B8, 0xF80111C0, -/**/ 0x4001A33C, 0x3467C688, -/**/ 0xBC8A9954, 0x34F59445, -/**/ 0x3FE0F8DB, 0x1C47D550, -/**/ 0x3FF28000, 0x00000000, -/**/ 0x3F68B1B9, 0x03CDAE3F, -/**/ 0x3FE05000, 0x00000000, -/**/ 0x3FF2990E, 0x5E4BF713, -/**/ 0x3FD99E49, 0xFB326E9E, -/**/ 0x3FE132B4, 0x8779391A, -/**/ 0x3FE4933B, 0x0C2FE325, -/**/ 0x3FEE4BB1, 0xAEAAE1D0, -/**/ 0x3FF71020, 0x1F4377BD, -/**/ 0x40029271, 0x1C886605, -/**/ 0xBCA33AB1, 0x7130CE99, -/**/ 0x3FE11E00, 0x7AFDAF10, -/**/ 0x3FF28000, 0x00000000, -/**/ 0x3F790E5E, 0x4BF712C7, -/**/ 0x3FE07000, 0x00000000, -/**/ 0x3FF2A5F7, 0x78CB1A3B, -/**/ 0x3FDA0673, 0x8081C5D1, -/**/ 0x3FE18634, 0x0D5E6499, -/**/ 0x3FE52D73, 0xAEDD6BE6, -/**/ 0x3FEF66A5, 0x1CF1AAA0, -/**/ 0x3FF81B02, 0x4834E5A9, -/**/ 0x40039066, 0xFCE48906, -/**/ 0xBCA34E4F, 0x6BFB4C85, -/**/ 0x3FE1433F, 0x7826AAD4, -/**/ 0x3FF2C000, 0x00000000, -/**/ 0xBF7A0887, 0x34E5C574, -/**/ 0x3FE09000, 0x00000000, -/**/ 0x3FF2B315, 0x268368DB, -/**/ 0x3FDA7099, 0x53F655B7, -/**/ 0x3FE1DC27, 0xAD9032EC, -/**/ 0x3FE5CD52, 0xE5F88E23, -/**/ 0x3FF04738, 0x0A68BDFC, -/**/ 0x3FF93435, 0x2F057820, -/**/ 0x40049E27, 0xDAE8A2FC, -/**/ 0x3C86832C, 0xFAA44565, -/**/ 0x3FE16898, 0x7BED8260, -/**/ 0x3FF2C000, 0x00000000, -/**/ 0xBF69D5B2, 0xF92E4A41, -/**/ 0x3FE0B000, 0x00000000, -/**/ 0x3FF2C068, 0x69558A9E, -/**/ 0x3FDADCCA, 0x73011B64, -/**/ 0x3FE234A6, 0x8511146A, -/**/ 0x3FE6731A, 0x9D6CBF3C, -/**/ 0x3FF0E1E1, 0xD575F00A, -/**/ 0x3FFA5C9D, 0xADEA17E7, -/**/ 0x4005BCD2, 0xD9123E7C, -/**/ 0xBCA23E4F, 0xCC2AE1E4, -/**/ 0x3FE18E0B, 0xF07948F0, -/**/ 0x3FF2C000, 0x00000000, -/**/ 0x3F1A1A55, 0x62A7614A, -/**/ 0x3FE0D000, 0x00000000, -/**/ 0x3FF2CDF2, 0x4AC410C6, -/**/ 0x3FDB4B16, 0x68E63D97, -/**/ 0x3FE28FC8, 0xBFA256B2, -/**/ 0x3FE71F10, 0x51FDF05A, -/**/ 0x3FF183AE, 0x0753C882, -/**/ 0x3FFB9530, 0xF1921090, -/**/ 0x4006ED9E, 0x14F942BC, -/**/ 0x3CA27879, 0x89C77FA3, -/**/ 0x3FE1B39A, 0x41FC691C, -/**/ 0x3FF2C000, 0x00000000, -/**/ 0x3F6BE495, 0x88218CD6, -/**/ 0x3FE0F000, 0x00000000, -/**/ 0x3FF2DBB3, 0xDC3BFD25, -/**/ 0x3FDBBB8D, 0x55413207, -/**/ 0x3FE2EDA7, 0xA6792BF1, -/**/ 0x3FE7D17D, 0x4AC4E230, -/**/ 0x3FF22D00, 0xAAE6CB05, -/**/ 0x3FFCDEF5, 0xC9028E71, -/**/ 0x400831D8, 0xB40C626C, -/**/ 0x3C953FEF, 0x9873F484, -/**/ 0x3FE1D943, 0xDEC430C0, -/**/ 0x3FF2C000, 0x00000000, -/**/ 0x3F7BB3DC, 0x3BFD24A1, -/**/ 0x3FE11000, 0x00000000, -/**/ 0x3FF2E9AE, 0x3760A19B, -/**/ 0x3FDC2E3F, 0xF2E3E2EB, -/**/ 0x3FE34E5D, 0xAFE1CD38, -/**/ 0x3FE88AAE, 0xD6CE0B26, -/**/ 0x3FF2DE44, 0x2C4B06C6, -/**/ 0x3FFE3B06, 0x138813D2, -/**/ 0x40098AED, 0x23FD5612, -/**/ 0xBC91EC19, 0xB7AF0E54, -/**/ 0x3FE1FF09, 0x3748F114, -/**/ 0x3FF30000, 0x00000000, -/**/ 0xBF7651C8, 0x9F5E657E, -/**/ 0x3FE13000, 0x00000000, -/**/ 0x3FF2F7E2, 0x7E5B072B, -/**/ 0x3FDCA33F, 0x9F169C4D, -/**/ 0x3FE3B206, 0x8FE1EB56, -/**/ 0x3FE94AF6, 0x8F30E1B7, -/**/ 0x3FF397E9, 0xCFCF9887, -/**/ 0x3FFFAA90, 0x4FB7F25F, -/**/ 0x400AFA63, 0x94745D90, -/**/ 0x3C96955C, 0x2A139390, -/**/ 0x3FE224EA, 0xBE3EBA20, -/**/ 0x3FF30000, 0x00000000, -/**/ 0xBF603B03, 0x49F1AA85, -/**/ 0x3FE15000, 0x00000000, -/**/ 0x3FF30651, 0xDC2D0E76, -/**/ 0x3FDD1A9E, 0x613EF408, -/**/ 0x3FE418BF, 0x49ED083D, -/**/ 0x3FEA12AA, 0x9DFD1E23, -/**/ 0x3FF45A6A, 0x32B75F76, -/**/ 0x4000976C, 0xA7673F47, -/**/ 0x400C81E4, 0xB046AC6A, -/**/ 0x3C879FF7, 0x7D1BEB80, -/**/ 0x3FE24AE8, 0xE8A6B8B0, -/**/ 0x3FF30000, 0x00000000, -/**/ 0x3F594770, 0xB439D90E, -/**/ 0x3FE17000, 0x00000000, -/**/ 0x3FF314FD, 0x85087ECD, -/**/ 0x3FDD946E, 0xF2F45390, -/**/ 0x3FE482A6, 0x43BEDA05, -/**/ 0x3FEAE226, 0x0A640DD7, -/**/ 0x3FF52645, 0xD6A3D695, -/**/ 0x4001649F, 0x08098FE0, -/**/ 0x400E233C, 0x9D2BADE7, -/**/ 0x3C9E948C, 0x4E5F8348, -/**/ 0x3FE27104, 0x2DE13E58, -/**/ 0x3FF30000, 0x00000000, -/**/ 0x3F74FD85, 0x087ECD1A, -/**/ 0x3FE19000, 0x00000000, -/**/ 0x3FF323E6, 0xB6AA3C67, -/**/ 0x3FDE10C4, 0xC8894828, -/**/ 0x3FE4EFDB, 0x59718389, -/**/ 0x3FEBB9C9, 0x0A8D7622, -/**/ 0x3FF5FC05, 0xB8A62B12, -/**/ 0x40023D9A, 0xE4296831, -/**/ 0x400FE05E, 0x49C0B830, -/**/ 0x3CA19107, 0xC1189DE8, -/**/ 0x3FE2973D, 0x07C07BCC, -/**/ 0x3FF34000, 0x00000000, -/**/ 0xBF7C1949, 0x55C3993D, -/**/ 0x3FE1B000, 0x00000000, -/**/ 0x3FF3330E, 0xB8B9E20B, -/**/ 0x3FDE8FB4, 0x1A11468B, -/**/ 0x3FE5607F, 0xF2E740E1, -/**/ 0x3FEC99F9, 0x5B91DB14, -/**/ 0x3FF6DC3B, 0xF50C5FAA, -/**/ 0x4003232A, 0x0CFAC1C7, -/**/ 0x4010DDB3, 0x894EFD30, -/**/ 0xBCA7760F, 0x3783D916, -/**/ 0x3FE2BD93, 0xF29BF5F0, -/**/ 0x3FF34000, 0x00000000, -/**/ 0xBF69E28E, 0x8C3BEA7F, -/**/ 0x3FE1D000, 0x00000000, -/**/ 0x3FF34276, 0xDD2DFE6D, -/**/ 0x3FDF1151, 0xECEB226B, -/**/ 0x3FE5D4B7, 0x1AA123CE, -/**/ 0x3FED8322, 0xA01F65F8, -/**/ 0x3FF7C784, 0x791CE583, -/**/ 0x40041625, 0xC15A6B9C, -/**/ 0x4011DB51, 0x64280FEB, -/**/ 0x3CA10463, 0x28CA6DBB, -/**/ 0x3FE2E409, 0x6D64BEAC, -/**/ 0x3FF34000, 0x00000000, -/**/ 0x3F43B6E9, 0x6FF364E1, -/**/ 0x3FE1F000, 0x00000000, -/**/ 0x3FF35220, 0x80B539C7, -/**/ 0x3FDF95B4, 0x1DD91A82, -/**/ 0x3FE64CA5, 0x961EA9CA, -/**/ 0x3FEE75B6, 0xC65B3B2F, -/**/ 0x3FF8BE85, 0xC412E59F, -/**/ 0x40051778, 0x02462A51, -/**/ 0x4012EA48, 0x109FC81B, -/**/ 0x3C959E4C, 0x9F70CA98, -/**/ 0x3FE30A9D, 0xF9BA7B3C, -/**/ 0x3FF34000, 0x00000000, -/**/ 0x3F722080, 0xB539C6A2, -/**/ 0x3FE21000, 0x00000000, -/**/ 0x3FF3620D, 0x0B24ACDA, -/**/ 0x3FE00E78, 0xB5D803B6, -/**/ 0x3FE6C871, 0xFFE457FB, -/**/ 0x3FEF722E, 0x759EF386, -/**/ 0x3FF9C1F1, 0xB8D0E874, -/**/ 0x4006281D, 0x080FB06E, -/**/ 0x40140BF2, 0xD1F69DF7, -/**/ 0xBC8489EA, 0xCBFAF37F, -/**/ 0x3FE33152, 0x1C0141BC, -/**/ 0x3FF38000, 0x00000000, -/**/ 0xBF7DF2F4, 0xDB532667, -/**/ 0x3FE23000, 0x00000000, -/**/ 0x3FF3723D, 0xEFEBB76D, -/**/ 0x3FE05390, 0xC153FC4C, -/**/ 0x3FE74844, 0xE34A2666, -/**/ 0x3FF03C84, 0xC260A400, -/**/ 0x3FFAD286, 0x81E70F01, -/**/ 0x40074924, 0xDBC4A78E, -/**/ 0x401541CB, 0x8BBCA2E0, -/**/ 0x3C9C7528, 0x7BEA8472, -/**/ 0x3FE35826, 0x5B7858F8, -/**/ 0x3FF38000, 0x00000000, -/**/ 0xBF6B8420, 0x28912510, -/**/ 0x3FE25000, 0x00000000, -/**/ 0x3FF382B4, 0xAE8DA9C7, -/**/ 0x3FE09A2E, 0x842CABB9, -/**/ 0x3FE7CC48, 0xDA356141, -/**/ 0x3FF0C567, 0xBCD4FDB8, -/**/ 0x3FFBF10F, 0x89B62C32, -/**/ 0x40087BB5, 0x18ADC4B9, -/**/ 0x40168D6D, 0xC516F6F1, -/**/ 0xBC933A6B, 0x2E37D6A3, -/**/ 0x3FE37F1B, 0x4251E5AC, -/**/ 0x3FF38000, 0x00000000, -/**/ 0x3F45A574, 0x6D4E3A7A, -/**/ 0x3FE27000, 0x00000000, -/**/ 0x3FF39372, 0xD3219A4C, -/**/ 0x3FE0E25E, 0xD4394437, -/**/ 0x3FE854AA, 0xACE4CC74, -/**/ 0x3FF15408, 0x0981EE13, -/**/ 0x3FFD1E66, 0x88AA5332, -/**/ 0x4009C10A, 0xDA3BD18F, -/**/ 0x4017F099, 0xFFE4AE21, -/**/ 0xBCAED56B, 0x7B588ABE, -/**/ 0x3FE3A631, 0x5DCB911C, -/**/ 0x3FF38000, 0x00000000, -/**/ 0x3F7372D3, 0x219A4BA9, -/**/ 0x3FE29000, 0x00000000, -/**/ 0x3FF3A479, 0xF6D8C6BC, -/**/ 0x3FE12C2F, 0x11197A32, -/**/ 0x3FE8E199, 0x73F949D5, -/**/ 0x3FF1E8B1, 0xEE7A481D, -/**/ 0x3FFE5B74, 0xABBE8828, -/**/ 0x400B1A7C, 0xDB3D83BC, -/**/ 0x40196D39, 0x6DC46100, -/**/ 0x3CA7798C, 0xACD8F69C, -/**/ 0x3FE3CD69, 0x3E4835E8, -/**/ 0x3FF3C000, 0x00000000, -/**/ 0xBF7B8609, 0x27394391, -/**/ 0x3FE2B000, 0x00000000, -/**/ 0x3FF3B5CB, 0xC08BE738, -/**/ 0x3FE177AD, 0x2B5CB6B7, -/**/ 0x3FE97346, 0xBCE90EB1, -/**/ 0x3FF283B6, 0x68EC7F04, -/**/ 0x3FFFA933, 0xD5B8ED04, -/**/ 0x400C897D, 0xCBCDFF9A, -/**/ 0x401B0562, 0x0E4ABF55, -/**/ 0x3C881FF6, 0x1EE42043, -/**/ 0x3FE3F4C3, 0x776AA08C, -/**/ 0x3FF3C000, 0x00000000, -/**/ 0xBF64687E, 0xE8319086, -/**/ 0x3FE2D000, 0x00000000, -/**/ 0x3FF3C769, 0xE54FE05E, -/**/ 0x3FE1C4E7, 0xAC1A81A0, -/**/ 0x3FEA09E6, 0xB10FA326, -/**/ 0x3FF3256B, 0x840F679B, -/**/ 0x40008457, 0xFEE9EF1A, -/**/ 0x400E0F9E, 0xE4146343, -/**/ 0x401CBB5B, 0x433496A9, -/**/ 0xBCA57A4C, 0x59F087C0, -/**/ 0x3FE41C40, 0xA03171A8, -/**/ 0x3FF3C000, 0x00000000, -/**/ 0x3F5DA795, 0x3F81773D, -/**/ 0x3FE2F000, 0x00000000, -/**/ 0x3FF3D956, 0x291249DC, -/**/ 0x3FE213ED, 0xBD044AC9, -/**/ 0x3FEAA5B0, 0x3F917FA8, -/**/ 0x3FF3CE2C, 0xB7380A79, -/**/ 0x40013D84, 0x576AFAE8, -/**/ 0x400FAE92, 0xBAAB74F3, -/**/ 0x401E91A2, 0xE9129E4A, -/**/ 0x3C905671, 0x0CEC83F7, -/**/ 0x3FE443E1, 0x53143194, -/**/ 0x3FF3C000, 0x00000000, -/**/ 0x3F795629, 0x1249DBC4, -/**/ 0x3FE31000, 0x00000000, -/**/ 0x3FF3EB92, 0x5F3E4715, -/**/ 0x3FE264CF, 0x30F965D1, -/**/ 0x3FEB46DD, 0x4A4F2FB2, -/**/ 0x3FF47E5B, 0x4BC2E94F, -/**/ 0x400200B9, 0x54F8F9EB, -/**/ 0x4010B418, 0x33305D9F, -/**/ 0x40204579, 0x826EF167, -/**/ 0xBC9737A0, 0xE06EBCAE, -/**/ 0x3FE46BA6, 0x2E21A53C, -/**/ 0x3FF40000, 0x00000000, -/**/ 0xBF746DA0, 0xC1B8EB04, -/**/ 0x3FE33000, 0x00000000, -/**/ 0x3FF3FE20, 0x6B6A38D5, -/**/ 0x3FE2B79C, 0x8D26C7A0, -/**/ 0x3FEBEDAA, 0xD62978F8, -/**/ 0x3FF5365E, 0xCB8CC6D1, -/**/ 0x4002CE9C, 0xD894AF54, -/**/ 0x40119F3B, 0x79F7C63E, -/**/ 0x40215524, 0x0C8E7B9E, -/**/ 0x3CA485D0, 0x13DC9A80, -/**/ 0x3FE4938F, 0xD31F754C, -/**/ 0x3FF40000, 0x00000000, -/**/ 0xBF3DF949, 0x5C72B1E7, -/**/ 0x3FE35000, 0x00000000, -/**/ 0x3FF41102, 0x420ED8E7, -/**/ 0x3FE30C67, 0x12BCE2B2, -/**/ 0x3FEC9A59, 0x3EDE345E, -/**/ 0x3FF5F6A5, 0x78CAB466, -/**/ 0x4003A7E1, 0x3EAD62EE, -/**/ 0x401299C8, 0x9CB9A228, -/**/ 0x40227974, 0x1BE749B0, -/**/ 0x3CAFE28F, 0xC6A9831F, -/**/ 0x3FE4BB9E, 0xE7AB3A40, -/**/ 0x3FF40000, 0x00000000, -/**/ 0x3F710242, 0x0ED8E776, -/**/ 0x3FE37000, 0x00000000, -/**/ 0x3FF42439, 0xE9485B43, -/**/ 0x3FE36340, 0xC946E033, -/**/ 0x3FED4D2C, 0x6ECC5A7E, -/**/ 0x3FF6BFA4, 0xD027255A, -/**/ 0x40048D46, 0x72504BE1, -/**/ 0x4013A4ED, 0x09445BD5, -/**/ 0x4023B435, 0x749E19F9, -/**/ 0xBC40E7E5, 0xEAAAF53E, -/**/ 0x3FE4E3D4, 0x155D0070, -/**/ 0x3FF44000, 0x00000000, -/**/ 0xBF7BC616, 0xB7A4BD36, -/**/ 0x3FE39000, 0x00000000, -/**/ 0x3FF437C9, 0x79A23C23, -/**/ 0x3FE3BC3C, 0x89AF6A9D, -/**/ 0x3FEE066C, 0x1AF553BA, -/**/ 0x3FF791DA, 0x1622569A, -/**/ 0x40057F9B, 0x1B18AE2B, -/**/ 0x4014C1F0, 0x88BFF240, -/**/ 0x40250761, 0x019A4522, -/**/ 0x3CA4C238, 0xFDFCCB13, -/**/ 0x3FE50C30, 0x09EB58F8, -/**/ 0x3FF44000, 0x00000000, -/**/ 0xBF606D0C, 0xBB87B9E1, -/**/ 0x3FE3B000, 0x00000000, -/**/ 0x3FF44BB3, 0x1EEE6F35, -/**/ 0x3FE4176E, 0x0A004D1D, -/**/ 0x3FEEC664, 0x0399FA54, -/**/ 0x3FF86DCA, 0xF0CFD106, -/**/ 0x40067FBD, 0xE8C80E97, -/**/ 0x4015F237, 0xD9CD2D79, -/**/ 0x40267521, 0xC8076345, -/**/ 0x3CAEC756, 0xB089F7AF, -/**/ 0x3FE534B3, 0x77510D94, -/**/ 0x3FF44000, 0x00000000, -/**/ 0x3F67663D, 0xDCDE698F, -/**/ 0x3FE3D000, 0x00000000, -/**/ 0x3FF45FF9, 0x1928B1BE, -/**/ 0x3FE474E9, 0xE9EB53E9, -/**/ 0x3FEF8D64, 0x39DB03B6, -/**/ 0x3FF95406, 0x0F298B87, -/**/ 0x40078E9E, 0xFFC72AB6, -/**/ 0x40173747, 0x941456E7, -/**/ 0x4027FFDA, 0x74A71E71, -/**/ 0xBCAEED93, 0xFE7483B3, -/**/ 0x3FE55D5F, 0x13F48EC0, -/**/ 0x3FF44000, 0x00000000, -/**/ 0x3F7FF919, 0x28B1BDFF, -/**/ 0x3FE3F000, 0x00000000, -/**/ 0x3FF4749D, 0xBD66D0C4, -/**/ 0x3FE4D4C5, 0xC02C2013, -/**/ 0x3FF02DE0, 0xB56768CC, -/**/ 0x3FFA4523, 0xDF53A7BD, -/**/ 0x4008AD41, 0x8A357386, -/**/ 0x401892C7, 0x5E392799, -/**/ 0x4029AA2B, 0x97746ACD, -/**/ 0x3C924F0A, 0xB4A71E44, -/**/ 0x3FE58633, 0x9AD13548, -/**/ 0x3FF48000, 0x00000000, -/**/ 0xBF66C485, 0x325E775E, -/**/ 0x3FE41000, 0x00000000, -/**/ 0x3FF489A3, 0x76D6C491, -/**/ 0x3FE53718, 0x28D40829, -/**/ 0x3FF098EA, 0x98450D83, -/**/ 0x3FFB41C7, 0x55526E3B, -/**/ 0x4009DCBD, 0x719F540E, -/**/ 0x401A0685, 0x805D08D1, -/**/ 0x402B76FA, 0xA5142633, -/**/ 0x3C2AD9A7, 0xF1FF56FC, -/**/ 0x3FE5AF31, 0xCBA27244, -/**/ 0x3FF48000, 0x00000000, -/**/ 0x3F6346ED, 0xAD892100, -/**/ 0x3FE43000, 0x00000000, -/**/ 0x3FF49F0C, 0xC7CB94CC, -/**/ 0x3FE59BF8, 0xD492AA1E, -/**/ 0x3FF107FF, 0x34D2CA82, -/**/ 0x3FFC4A9E, 0xC3DF9E51, -/**/ 0x400B1E41, 0x45F5874E, -/**/ 0x401B947A, 0xDEB92648, -/**/ 0x402D6979, 0xD903D532, -/**/ 0x3CA43231, 0x04C67F5E, -/**/ 0x3FE5D85A, 0x6B1109A4, -/**/ 0x3FF48000, 0x00000000, -/**/ 0x3F7F0CC7, 0xCB94CC1A, -/**/ 0x3FE45000, 0x00000000, -/**/ 0x3FF4B4DC, 0x4ADA0BF0, -/**/ 0x3FE60380, 0x990F861F, -/**/ 0x3FF17B50, 0xCBEC7542, -/**/ 0x3FFD6064, 0xC93CFE8F, -/**/ 0x400C7314, 0x56F36FE3, -/**/ 0x401D3ECF, 0x696E5374, -/**/ 0x402F8531, 0x1778AF1D, -/**/ 0x3C7A53BF, 0x31EBDA84, -/**/ 0x3FE601AE, 0x42E27660, -/**/ 0x3FF4C000, 0x00000000, -/**/ 0xBF66476A, 0x4BE81F81, -/**/ 0x3FE47000, 0x00000000, -/**/ 0x3FF4CB14, 0xB4065600, -/**/ 0x3FE66DC9, 0x826ADA4F, -/**/ 0x3FF1F314, 0xA3298D4D, -/**/ 0x3FFE83E1, 0x52191CB4, -/**/ 0x400DDC99, 0x05CA69AF, -/**/ 0x401F07DF, 0x1079C46A, -/**/ 0x4030E703, 0xF9440EB0, -/**/ 0x3CA495E1, 0x5817D0DD, -/**/ 0x3FE62B2E, 0x222A98A0, -/**/ 0x3FF4C000, 0x00000000, -/**/ 0x3F662968, 0x0CAC00D4, -/**/ 0x3FE49000, 0x00000000, -/**/ 0x3FF4E1B8, 0xD203BDC9, -/**/ 0x3FE6DAEE, 0xE5FE0976, -/**/ 0x3FF26F83, 0x3C44F71E, -/**/ 0x3FFFB5EA, 0xB4D92F91, -/**/ 0x400F5C4F, 0x55A779C8, -/**/ 0x4020791F, 0xA66A7536, -/**/ 0x40322428, 0x7DCE5D75, -/**/ 0x3CADE7E8, 0x964F770B, -/**/ 0x3FE654DA, 0xDD7FD12C, -/**/ 0x3FF50000, 0x00000000, -/**/ 0xBF7E472D, 0xFC42374B, -/**/ 0x3FE4B000, 0x00000000, -/**/ 0x3FF4F8CB, 0x8F87D541, -/**/ 0x3FE74B0D, 0x767620C4, -/**/ 0x3FF2F0D8, 0x9126F083, -/**/ 0x40007BB3, 0x73F08794, -/**/ 0x401079EB, 0xE1419117, -/**/ 0x40218062, 0xA917F81E, -/**/ 0x40337C6B, 0x48444DEE, -/**/ 0x3C907A41, 0xF4061E08, -/**/ 0x3FE67EB5, 0x4F31AF70, -/**/ 0x3FF50000, 0x00000000, -/**/ 0xBF5CD1C1, 0xE0AAFA85, -/**/ 0x3FE4D000, 0x00000000, -/**/ 0x3FF5104F, 0xF4B2718C, -/**/ 0x3FE7BE43, 0x59659939, -/**/ 0x3FF37754, 0x5502EAE6, -/**/ 0x400124A6, 0x6AE0AC51, -/**/ 0x4011527B, 0x33524D17, -/**/ 0x40229B46, 0x7FBF7A2D, -/**/ 0x4034F274, 0xAD716768, -/**/ 0xBC9C610F, 0x7C204EA8, -/**/ 0x3FE6A8BE, 0x57825A6C, -/**/ 0x3FF50000, 0x00000000, -/**/ 0x3F704FF4, 0xB2718C01, -/**/ 0x3FE4F000, 0x00000000, -/**/ 0x3FF52849, 0x288C017D, -/**/ 0x3FE834B0, 0x3E6D3F7F, -/**/ 0x3FF4033A, 0x3B0747CB, -/**/ 0x4001D652, 0xE946B196, -/**/ 0x401238CB, 0x3C2F8CB4, -/**/ 0x4023CB80, 0x53E520C1, -/**/ 0x40368938, 0x607BC0F6, -/**/ 0xBC84274C, 0xCC053597, -/**/ 0x3FE6D2F6, 0xDCE2DFB8, -/**/ 0x3FF54000, 0x00000000, -/**/ 0xBF77B6D7, 0x73FE8364, -/**/ 0x3FE51000, 0x00000000, -/**/ 0x3FF540BA, 0x729BE713, -/**/ 0x3FE8AE75, 0x781F49A2, -/**/ 0x3FF494D2, 0x432AC103, -/**/ 0x40029147, 0x9B0015B6, -/**/ 0x40132DE7, 0x156B74E9, -/**/ 0x402512F0, 0xE8362EC8, -/**/ 0x403843FE, 0xC8D2E0F8, -/**/ 0xBC8F55DB, 0xBB3ACC53, -/**/ 0x3FE6FD5F, 0xCC3296F0, -/**/ 0x3FF54000, 0x00000000, -/**/ 0x3F274E53, 0x7CE2565E, -/**/ 0x3FE53000, 0x00000000, -/**/ 0x3FF559A7, 0x3C98A101, -/**/ 0x3FE92BB6, 0x16C3163D, -/**/ 0x3FF52C69, 0x0DB2C44D, -/**/ 0x4003561E, 0x0F4546B8, -/**/ 0x401432F1, 0x7F099A82, -/**/ 0x402673A9, 0x831E227A, -/**/ 0x403A266F, 0xA02BBCD5, -/**/ 0x3CA279A8, 0xAEA9CB9D, -/**/ 0x3FE727FA, 0x1901CB44, -/**/ 0x3FF54000, 0x00000000, -/**/ 0x3F79A73C, 0x98A10084, -/**/ 0x3FE55000, 0x00000000, -/**/ 0x3FF57313, 0x1433B9BD, -/**/ 0x3FE9AC97, 0x0523E7B2, -/**/ 0x3FF5CA50, 0x361F7393, -/**/ 0x4004257B, 0xB0F40825, -/**/ 0x40154927, 0x46286025, -/**/ 0x4027EFF1, 0x781495B4, -/**/ 0x403C349E, 0x0A1139F1, -/**/ 0xBC5D2C66, 0x8B6015DA, -/**/ 0x3FE752C6, 0xBDD7E0E0, -/**/ 0x3FF58000, 0x00000000, -/**/ 0xBF69D9D7, 0x988C865F, -/**/ 0x3FE57000, 0x00000000, -/**/ 0x3FF58D01, 0xAD039E07, -/**/ 0x3FEA313F, 0x279933CD, -/**/ 0x3FF66EDE, 0xB63D93A6, -/**/ 0x40050012, 0xD836441A, -/**/ 0x401671E1, 0xF23D152C, -/**/ 0x40298A4C, 0x65D3A1DD, -/**/ 0x403E7316, 0x5EBDBF39, -/**/ 0xBCAE5B6C, 0x7AAA4996, -/**/ 0x3FE77DC6, 0xBC7D2FA0, -/**/ 0x3FF58000, 0x00000000, -/**/ 0x3F6A035A, 0x073C0E86, -/**/ 0x3FE59000, 0x00000000, -/**/ 0x3FF5A776, 0xE28DADB6, -/**/ 0x3FEAB9D7, 0x7D7BE2B5, -/**/ 0x3FF71A71, 0x5234C8A9, -/**/ 0x4005E6A3, 0xF873554C, -/**/ 0x4017AE9A, 0xC1F33F9B, -/**/ 0x402B4581, 0x4310046E, -/**/ 0x40407376, 0xF64B03E7, -/**/ 0xBCA3F39B, 0xB3AB0542, -/**/ 0x3FE7A8FB, 0x1E48D158, -/**/ 0x3FF5C000, 0x00000000, -/**/ 0xBF78891D, 0x725249CA, -/**/ 0x3FE5B000, 0x00000000, -/**/ 0x3FF5C276, 0xBA730F9B, -/**/ 0x3FEB468B, 0x454127C3, -/**/ 0x3FF7CD6B, 0x0E816ADB, -/**/ 0x4006D9FE, 0xEDDAC837, -/**/ 0x401900EE, 0x0209E3B7, -/**/ 0x402D24A2, 0x57489C7E, -/**/ 0x4041CAEA, 0x7F810E14, -/**/ 0xBC84F20E, 0x24F9675B, -/**/ 0x3FE7D464, 0xF472A690, -/**/ 0x3FF5C000, 0x00000000, -/**/ 0x3F43B5D3, 0x987CD623, -/**/ 0x3FE5D000, 0x00000000, -/**/ 0x3FF5DE05, 0x66C30CDC, -/**/ 0x3FEBD788, 0x23798D1A, -/**/ 0x3FF88835, 0xB0E567D8, -/**/ 0x4007DB04, 0x6E46660A, -/**/ 0x401A6A9E, 0xCA07CAA5, -/**/ 0x402F2B16, 0x41ECEF64, -/**/ 0x40434315, 0xC36F367B, -/**/ 0xBCA08CA1, 0x542594A6, -/**/ 0x3FE80005, 0x5869D9E8, -/**/ 0x3FF5C000, 0x00000000, -/**/ 0x3F7E0566, 0xC30CDBD9, -/**/ 0x3FE5F000, 0x00000000, -/**/ 0x3FF5FA27, 0x4875FA03, -/**/ 0x3FEC6CFE, 0x4CF96D63, -/**/ 0x3FF94B42, 0x4D7B8313, -/**/ 0x4008EAA7, 0xA1B04592, -/**/ 0x401BED9B, 0x2C5A9D87, -/**/ 0x4030AE51, 0x1BC92F68, -/**/ 0x4044DF8C, 0x685FBD64, -/**/ 0xBCAC07A8, 0x30FE6378, -/**/ 0x3FE82BDD, 0x6C30303C, -/**/ 0x3FF60000, 0x00000000, -/**/ 0xBF5762DE, 0x2817F40C, -/**/ 0x3FE61000, 0x00000000, -/**/ 0x3FF616E0, 0xF213FCD6, -/**/ 0x3FED0720, 0xB47784FF, -/**/ 0x3FFA1709, 0xE13C6707, -/**/ 0x400A09EF, 0xE70B2E72, -/**/ 0x401D8C00, 0xE976AAD9, -/**/ 0x4031DEBA, 0xD1AE1EA8, -/**/ 0x4046A453, 0x6424341F, -/**/ 0x3CA13E53, 0xA65D40B1, -/**/ 0x3FE857EE, 0x5ABA79E8, -/**/ 0x3FF60000, 0x00000000, -/**/ 0x3F76E0F2, 0x13FCD614, -/**/ 0x3FE63000, 0x00000000, -/**/ 0x3FF63437, 0x2A8B4ED8, -/**/ 0x3FEDA625, 0x3BF69915, -/**/ 0x3FFAEC0D, 0xFB6DF86F, -/**/ 0x400B39FA, 0xCAF2D64B, -/**/ 0x401F4822, 0xB7E2DC06, -/**/ 0x4033291B, 0xB12537E3, -/**/ 0x404895F0, 0xAF3EF0D1, -/**/ 0x3CAEA588, 0x71E7ED76, -/**/ 0x3FE88439, 0x5856807C, -/**/ 0x3FF64000, 0x00000000, -/**/ 0xBF6791AA, 0xE9624F1C, -/**/ 0x3FE65000, 0x00000000, -/**/ 0x3FF6522E, 0xF039F5E3, -/**/ 0x3FEE4A44, 0xEA588E54, -/**/ 0x3FFBCAD9, 0x77A3F8A4, -/**/ 0x400C7BFE, 0x3669F2F2, -/**/ 0x40209247, 0x1AEA54A4, -/**/ 0x4034900A, 0x6B866959, -/**/ 0x404AB97D, 0x620634CF, -/**/ 0x3C948649, 0xDA91B0FD, -/**/ 0x3FE8B0BF, 0xA316D3A0, -/**/ 0x3FF64000, 0x00000000, -/**/ 0x3F722EF0, 0x39F5E2AD, -/**/ 0x3FE67000, 0x00000000, -/**/ 0x3FF670CD, 0x7C2F4FC3, -/**/ 0x3FEEF3BC, 0x2583CF60, -/**/ 0x3FFCB401, 0x4A2E1684, -/**/ 0x400DD14A, 0xDCB9F8FB, -/**/ 0x40219209, 0x4E164373, -/**/ 0x40361669, 0x8FC171BC, -/**/ 0x404D14BA, 0xA46B7BE1, -/**/ 0xBCABAC31, 0xBBDFE65A, -/**/ 0x3FE8DD82, 0x8344E08C, -/**/ 0x3FF68000, 0x00000000, -/**/ 0xBF6E6507, 0xA1607A77, -/**/ 0x3FE69000, 0x00000000, -/**/ 0x3FF69018, 0x45AA3C85, -/**/ 0x3FEFA2CA, 0xF18FBD18, -/**/ 0x3FFDA825, 0x610C140E, -/**/ 0x400F3B4E, 0xF08895E1, -/**/ 0x4022A4E4, 0x272CD203, -/**/ 0x4037BF71, 0x60C4A0EE, -/**/ 0x404FAE29, 0xEC79351D, -/**/ 0x3C6BF5BB, 0x3E22FB0A, -/**/ 0x3FE90A83, 0x4BD9C858, -/**/ 0x3FF68000, 0x00000000, -/**/ 0x3F701845, 0xAA3C8533, -/**/ 0x3FE6B000, 0x00000000, -/**/ 0x3FF6B015, 0x05D92E4E, -/**/ 0x3FF02BDA, 0x9ABD20D8, -/**/ 0x3FFEA7F1, 0x9BC5CC13, -/**/ 0x40105DCC, 0x94AFB2BB, -/**/ 0x4023CC8C, 0xB382B54A, -/**/ 0x40398EBB, 0x19C28EAE, -/**/ 0x40514694, 0x8F7609B5, -/**/ 0x3C9CD223, 0xF66137E5, -/**/ 0x3FE937C3, 0x5AFE73AC, -/**/ 0x3FF6C000, 0x00000000, -/**/ 0xBF6FD5F4, 0x4DA36334, -/**/ 0x3FE6D000, 0x00000000, -/**/ 0x3FF6D0C9, 0xBBE1EF2B, -/**/ 0x3FF08961, 0x82FBDD29, -/**/ 0x3FFFB41E, 0xDCD403EC, -/**/ 0x401129EE, 0x121D0023, -/**/ 0x40250AE5, 0xB34159B2, -/**/ 0x403B884D, 0xDB5CEAC4, -/**/ 0x4052DD09, 0xA0B334B0, -/**/ 0xBC96BF1D, 0xD8F14BF9, -/**/ 0x3FE96544, 0x1A936D24, -/**/ 0x3FF6C000, 0x00000000, -/**/ 0x3F70C9BB, 0xE1EF2AEE, -/**/ 0x3FE6F000, 0x00000000, -/**/ 0x3FF6F23C, 0xB13786CF, -/**/ 0x3FF0EA20, 0x7B7FC134, -/**/ 0x400066BA, 0x1BD0D518, -/**/ 0x401202F9, 0x159EC945, -/**/ 0x40266205, 0x16FF868A, -/**/ 0x403DB0AD, 0x87398014, -/**/ 0x40549F33, 0x47D58711, -/**/ 0x3C8D858F, 0x54B11A28, -/**/ 0x3FE99307, 0x00C1184C, -/**/ 0x3FF70000, 0x00000000, -/**/ 0xBF6B869D, 0x90F2626A, -/**/ 0x3FE71000, 0x00000000, -/**/ 0x3FF71474, 0x7E455603, -/**/ 0x3FF14E40, 0x3A65655F, -/**/ 0x4000FA64, 0x1F4AA7A1, -/**/ 0x4012E9F0, 0xB946C70A, -/**/ 0x4027D43A, 0x3CC53936, -/**/ 0x40400675, 0xEE087279, -/**/ 0x40569278, 0x77313CEF, -/**/ 0xBCAB1BA1, 0x772D6E62, -/**/ 0x3FE9C10D, 0x9090E874, -/**/ 0x3FF70000, 0x00000000, -/**/ 0x3F74747E, 0x455602D3, -/**/ 0x3FE73000, 0x00000000, -/**/ 0x3FF73778, 0x0F773DEC, -/**/ 0x3FF1B5EC, 0x1288B243, -/**/ 0x40019581, 0x3A853FA5, -/**/ 0x4013DFF0, 0x6D2743E5, -/**/ 0x40296415, 0x09B4B924, -/**/ 0x4041515E, 0x19A59D1F, -/**/ 0x4058BD01, 0xF3E53877, -/**/ 0x3C962269, 0xFC348BAE, -/**/ 0x3FE9EF59, 0x5A90493C, -/**/ 0x3FF74000, 0x00000000, -/**/ 0xBF610FE1, 0x11842743, -/**/ 0x3FE75000, 0x00000000, -/**/ 0x3FF75B4E, 0xAAA78140, -/**/ 0x3FF22152, 0x28B49576, -/**/ 0x4002388E, 0x74D66746, -/**/ 0x4014E62E, 0xA43083A8, -/**/ 0x402B146E, 0x02885ED7, -/**/ 0x4042BC45, 0x29A3BC2C, -/**/ 0x405B25D8, 0xCDAFE7E5, -/**/ 0x3CA8862D, 0xF03F8A74, -/**/ 0x3FEA1DEB, 0xFD7DFBD8, -/**/ 0x3FF74000, 0x00000000, -/**/ 0x3F7B4EAA, 0xA7813FBA, -/**/ 0x3FE77000, 0x00000000, -/**/ 0x3FF77FFF, 0xF4FC0008, -/**/ 0x3FF290A3, 0xADE499E4, -/**/ 0x4002E412, 0xFF22FE11, -/**/ 0x4015FDFF, 0xD7A17943, -/**/ 0x402CE86F, 0x8AF79AEF, -/**/ 0x40444ACA, 0x6F8EDF86, -/**/ 0x405DD50A, 0x29CF9F92, -/**/ 0x3CA49DB0, 0xC5865233, -/**/ 0x3FEA4CC7, 0x2702BD90, -/**/ 0x3FF78000, 0x00000000, -/**/ 0xBE6607FF, 0xF08268E1, -/**/ 0x3FE79000, 0x00000000, -/**/ 0x3FF7A593, 0xF93D7FBC, -/**/ 0x3FF30415, 0x1F293A81, -/**/ 0x400398A1, 0x31649EA4, -/**/ 0x401728D9, 0xED75DA1E, -/**/ 0x402EE3A0, 0x7B1736CA, -/**/ 0x40460106, 0x036EC9D4, -/**/ 0x406069E8, 0xB3E5A09F, -/**/ 0xBCA79BBD, 0x4E8EB882, -/**/ 0x3FEA7BEC, 0x94762100, -/**/ 0x3FF7C000, 0x00000000, -/**/ 0xBF7A6C06, 0xC280445C, -/**/ 0x3FE7B000, 0x00000000, -/**/ 0x3FF7CC13, 0x2EB4E536, -/**/ 0x3FF37BDE, 0x8BD25D7D, -/**/ 0x400456D7, 0xA51DF797, -/**/ 0x40186858, 0x103AF33E, -/**/ 0x403084F8, 0x21121C2E, -/**/ 0x4047E39A, 0x9D7C6DE3, -/**/ 0x40621664, 0xEF4C9A12, -/**/ 0x3C804D2D, 0x39DB72FF, -/**/ 0x3FEAAB5E, 0x13B099B0, -/**/ 0x3FF7C000, 0x00000000, -/**/ 0x3F68265D, 0x69CA6C2F, -/**/ 0x3FE7D000, 0x00000000, -/**/ 0x3FF7F386, 0x809BA1CD, -/**/ 0x3FF3F83B, 0xE298B2EB, -/**/ 0x40051F62, 0x708A6ABE, -/**/ 0x4019BE3F, 0x090F77AB, -/**/ 0x4031AFE2, 0x6C13BF38, -/**/ 0x4049F7CA, 0x65FF02A8, -/**/ 0x4063F614, 0xDA840FE0, -/**/ 0xBCA7BDE9, 0xAB5D1A54, -/**/ 0x3FEADB1D, 0x83EBD320, -/**/ 0x3FF80000, 0x00000000, -/**/ 0xBF68F2FE, 0xC8BC6562, -/**/ 0x3FE7F000, 0x00000000, -/**/ 0x3FF81BF7, 0x562E1E24, -/**/ 0x3FF4796D, 0x469724DB, -/**/ 0x4005F2FC, 0x86E67917, -/**/ 0x401B2C82, 0x2F5AE582, -/**/ 0x4032F505, 0x65EE1919, -/**/ 0x404C438F, 0x4744D220, -/**/ 0x40661003, 0xD66309FD, -/**/ 0x3C8470C8, 0xFC828894, -/**/ 0x3FEB0B2C, 0xD6B287DC, -/**/ 0x3FF80000, 0x00000000, -/**/ 0x3F7BF756, 0x2E1E23E5, -/**/ 0x3FE81000, 0x00000000, -/**/ 0x3FF8456F, 0x9B70AB1D, -/**/ 0x3FF4FFB7, 0x6D01A674, -/**/ 0x4006D271, 0x42D7B667, -/**/ 0x401CB549, 0x05DD4055, -/**/ 0x40345723, 0xE490CA9B, -/**/ 0x404ECD17, 0x47C5589B, -/**/ 0x40686C46, 0x3D6DB036, -/**/ 0x4084044D, 0xECF23C2E, -/**/ 0xBC7F0990, 0x0D173A5F, -/**/ 0x3FEB3B8E, 0x10E12D3C, -/**/ 0x3FF84000, 0x00000000, -/**/ 0x3F55BE6D, 0xC2AC733C, -/**/ 0x3FE83000, 0x00000000, -/**/ 0x3FF86FF9, 0xCAB97B9D, -/**/ 0x3FF58B64, 0x04A71B42, -/**/ 0x4007BE9E, 0x20C0FB6E, -/**/ 0x401E5AF5, 0x9B426297, -/**/ 0x4035D958, 0x013C40EE, -/**/ 0x4050CEA9, 0x2215E48C, -/**/ 0x406B146B, 0xB8C0669A, -/**/ 0x40868C96, 0xFB8EB0FE, -/**/ 0x3CA55848, 0x1FCCBAD4, -/**/ 0x3FEB6C43, 0x4BB8EA98, -/**/ 0x3FF88000, 0x00000000, -/**/ 0xBF700635, 0x46846319, -/**/ 0x3FE85000, 0x00000000, -/**/ 0x3FF89BA0, 0xF71469BF, -/**/ 0x3FF61CC2, 0x28717EFA, -/**/ 0x4008B874, 0xAFB7BAF7, -/**/ 0x40201015, 0xEC7286DB, -/**/ 0x40377F1F, 0x8329A469, -/**/ 0x40525E49, 0x2927F0DD, -/**/ 0x406E135C, 0x5AE80CD9, -/**/ 0x40897364, 0x40DF64FD, -/**/ 0x3C89F53B, 0x1ED91B03, -/**/ 0x3FEB9D4E, 0xB6067ABC, -/**/ 0x3FF88000, 0x00000000, -/**/ 0x3F7BA0F7, 0x1469BF33, -/**/ 0x3FE87000, 0x00000000, -/**/ 0x3FF8C870, 0xD797DABF, -/**/ 0x3FF6B426, 0xDE42D55F, -/**/ 0x4009C0FC, 0xC0E06552, -/**/ 0x402103EC, 0xEB059907, -/**/ 0x40394C6A, 0x49A75AA7, -/**/ 0x40541A81, 0xB2A496D0, -/**/ 0x4070BAEE, 0x209CB693, -/**/ 0x408CC860, 0x285808C5, -/**/ 0xBCAE6D8C, 0x9B0DC6F3, -/**/ 0x3FEBCEB2, 0x955EC1C4, -/**/ 0x3FF8C000, 0x00000000, -/**/ 0x3F60E1AF, 0x2FB57EE7, -/**/ 0x3FE89000, 0x00000000, -/**/ 0x3FF8F675, 0xD3C502F4, -/**/ 0x3FF751ED, 0xA3BFB2E4, -/**/ 0x400AD956, 0xDE3987BC, -/**/ 0x40220AA0, 0xB30AAD0A, -/**/ 0x403B45AB, 0x16220014, -/**/ 0x40560929, 0xEC84429C, -/**/ 0x4072A569, 0x0D747939, -/**/ 0x40904F10, 0x5407F41E, -/**/ 0xBC675CEB, 0xFC269962, -/**/ 0x3FEC0071, 0x4773138C, -/**/ 0x3FF90000, 0x00000000, -/**/ 0xBF631458, 0x75FA1750, -/**/ 0x3FE8B000, 0x00000000, -/**/ 0x3FF925BD, 0x111125DF, -/**/ 0x3FF7F679, 0x0AD2B4C2, -/**/ 0x400C02BF, 0x1359A3C8, -/**/ 0x40232601, 0x88857C21, -/**/ 0x403D6FEB, 0x2515D90E, -/**/ 0x405830FA, 0xD421145E, -/**/ 0x4074D1D6, 0xFD789544, -/**/ 0x40928561, 0x4B30EBF1, -/**/ 0x3CA13E7B, 0x7876F9D2, -/**/ 0x3FEC328D, 0x437F5E74, -/**/ 0x3FF94000, 0x00000000, -/**/ 0xBF7A42EE, 0xEEDA20A4, -/**/ 0x3FE8D000, 0x00000000, -/**/ 0x3FF95654, 0x81B9477B, -/**/ 0x3FF8A233, 0x67F87779, -/**/ 0x400D3E90, 0x14665EA0, -/**/ 0x40245815, 0x5A415747, -/**/ 0x403FD0E1, 0x1D7511C0, -/**/ 0x405A99B6, 0x01EC30FB, -/**/ 0x40774A72, 0xDD7EE7A1, -/**/ 0x40951454, 0x5C2F1724, -/**/ 0x3C8185B3, 0x774A5205, -/**/ 0x3FEC6509, 0x1BD4AD0C, -/**/ 0x3FF94000, 0x00000000, -/**/ 0x3F765481, 0xB9477AC0, -/**/ 0x3FE8F000, 0x00000000, -/**/ 0x3FF9884A, 0xF50630B5, -/**/ 0x3FF9558F, 0x94B35A8D, -/**/ 0x400E8E46, 0xD1A32B1D, -/**/ 0x4025A31F, 0x0AEC68DB, -/**/ 0x40413785, 0xFD21A759, -/**/ 0x405D4C53, 0xF56DFCA6, -/**/ 0x407A1B45, 0xF89C0F5F, -/**/ 0x40980BB3, 0xC92C8CF3, -/**/ 0xBC8696E8, 0xFEB6A05E, -/**/ 0x3FEC97E7, 0x7F82B8CC, -/**/ 0x3FF98000, 0x00000000, -/**/ 0x3F6095EA, 0x0C6169C6, -/**/ 0x3FE91000, 0x00000000, -/**/ 0x3FF9BBB0, 0x292BC29F, -/**/ 0x3FFA1109, 0xC8E3D76B, -/**/ 0x400FF386, 0x8873C480, -/**/ 0x402709A6, 0xDE619C77, -/**/ 0x4042A8E9, 0x5A9417B9, -/**/ 0x4060299D, 0xBFE20B57, -/**/ 0x407D5283, 0xE1225431, -/**/ 0x409B7E74, 0xC225406C, -/**/ 0xBC879431, 0x74F396DB, -/**/ 0x3FECCB2B, 0x3C239888, -/**/ 0x3FF9C000, 0x00000000, -/**/ 0xBF513F5B, 0x50F5839F, -/**/ 0x3FE93000, 0x00000000, -/**/ 0x3FF9F094, 0xDEF4783D, -/**/ 0x3FFAD528, 0x8E300736, -/**/ 0x4010B80E, 0xB2D4D4EE, -/**/ 0x40288E84, 0x3F3D0057, -/**/ 0x404440D4, 0xD20263C0, -/**/ 0x4061DD42, 0x26E14927, -/**/ 0x4080807D, 0x5EF13D09, -/**/ 0x409F836C, 0xFE9E94BE, -/**/ 0xBC813C84, 0xE5FD9D2D, -/**/ 0x3FECFED7, 0x3FCCF104, -/**/ 0x3FFA0000, 0x00000000, -/**/ 0xBF6ED642, 0x170F854B, -/**/ 0x3FE95000, 0x00000000, -/**/ 0x3FFA270A, 0xEF70C9F9, -/**/ 0x3FFBA27D, 0xD12662D9, -/**/ 0x40118304, 0xE8433B59, -/**/ 0x402A34E9, 0x1B4DD8D9, -/**/ 0x4046041F, 0x58AA354C, -/**/ 0x4063C823, 0x87EB035B, -/**/ 0x40829D4E, 0x7F89A6B6, -/**/ 0x40A21B1A, 0xB4BED54D, -/**/ 0x3C855D66, 0xFD8283D4, -/**/ 0x3FED32EE, 0x9B2A7684, -/**/ 0x3FFA4000, 0x00000000, -/**/ 0xBF78F510, 0x8F3606B9, -/**/ 0x3FE97000, 0x00000000, -/**/ 0x3FFA5F25, 0x63EA127F, -/**/ 0x3FFC79A8, 0x1460C218, -/**/ 0x40125BC0, 0x3D14975C, -/**/ 0x402C006F, 0x2249DB66, -/**/ 0x4047F856, 0xED0AEFCD, -/**/ 0x4065F27F, 0x2E2028D0, -/**/ 0x40850B95, 0x6CE59595, -/**/ 0x40A4DC23, 0x18C497E2, -/**/ 0x3C8BDFAE, 0x76BA54CA, -/**/ 0x3FED6774, 0x83C60554, -/**/ 0x3FFA4000, 0x00000000, -/**/ 0x3F7F2563, 0xEA127F53, -/**/ 0x3FE99000, 0x00000000, -/**/ 0x3FFA98F8, 0x9061CEFE, -/**/ 0x3FFD5B53, 0xCAA1F466, -/**/ 0x40134379, 0xA92630E8, -/**/ 0x402DF527, 0x41E37357, -/**/ 0x404A23DF, 0xD7DE2305, -/**/ 0x406865FE, 0x1911C50F, -/**/ 0x4087D981, 0xD5CE543D, -/**/ 0x40A8192E, 0x2134A322, -/**/ 0xBC915CF9, 0x4FE6DAC8, -/**/ 0x3FED9C6C, 0x56821F74, -/**/ 0x3FFA8000, 0x00000000, -/**/ 0x3F78F890, 0x61CEFDBB, -/**/ 0x3FE9B000, 0x00000000, -/**/ 0x3FFAD49A, 0x30F0DACC, -/**/ 0x3FFE483C, 0xDDBFEE70, -/**/ 0x40143B8C, 0xC4418459, -/**/ 0x40300BD5, 0xE6E7E816, -/**/ 0x404C8E1A, 0x02EE200E, -/**/ 0x406B2DFC, 0x83038A03, -/**/ 0x408B1814, 0xD987E3D9, -/**/ 0x40ABEB1E, 0x8827CEFA, -/**/ 0x3CA8829A, 0xE22AFCE0, -/**/ 0x3FEDD1D9, 0x9A4C39D0, -/**/ 0x3FFAC000, 0x00000000, -/**/ 0x3F749A30, 0xF0DACB86, -/**/ 0x3FE9D000, 0x00000000, -/**/ 0x3FFB1221, 0x8A66E40D, -/**/ 0x3FFF4130, 0x692DC10A, -/**/ 0x4015457C, 0x64621A80, -/**/ 0x4031369A, 0xED2A1AB4, -/**/ 0x404F3F8D, 0xBC003A70, -/**/ 0x406E57E1, 0x462E99D6, -/**/ 0x408EDBC2, 0xC53F5717, -/**/ 0x40B0383D, 0x0A71E453, -/**/ 0x3C90AF9F, 0xBEDD86A9, -/**/ 0x3FEE07C0, 0x030CF708, -/**/ 0x3FFB0000, 0x00000000, -/**/ 0x3F72218A, 0x66E40CBE, -/**/ 0x3FE9F000, 0x00000000, -/**/ 0x3FFB51A7, 0x8E9927E5, -/**/ 0x40002387, 0x581637B3, -/**/ 0x401662F7, 0xF5B2C17E, -/**/ 0x40327DDB, 0x36EAC07E, -/**/ 0x40512110, 0xC70D9C43, -/**/ 0x4070F9C4, 0x88C52943, -/**/ 0x40919E9E, 0xB1AB4848, -/**/ 0x40B2E76B, 0xB1EC7695, -/**/ 0x3CAA2400, 0x5E9F6FD9, -/**/ 0x3FEE3E23, 0x74DD3C64, -/**/ 0x3FFB4000, 0x00000000, -/**/ 0x3F71A78E, 0x9927E571, -/**/ 0x3FEA1000, 0x00000000, -/**/ 0x3FFB9347, 0x04E0F95F, -/**/ 0x4000AD66, 0xAC8DC27B, -/**/ 0x401795E1, 0xAE05A580, -/**/ 0x4033E4FA, 0x299AA0A0, -/**/ 0x4052D0AD, 0xA33AB75C, -/**/ 0x407309E5, 0x39D64C89, -/**/ 0x40942D39, 0x154C34C4, -/**/ 0x40B61A59, 0x59D15B1D, -/**/ 0xBCAFC899, 0x114BE565, -/**/ 0x3FEE7508, 0x0787FD30, -/**/ 0x3FFB8000, 0x00000000, -/**/ 0x3F734704, 0xE0F95E8B, -/**/ 0x3FEA3000, 0x00000000, -/**/ 0x3FFBD71C, 0xB75F37A1, -/**/ 0x40013EBC, 0xFC9006E1, -/**/ 0x4018E055, 0xC48D2C09, -/**/ 0x40356FD7, 0xC2C8C9CD, -/**/ 0x4054B557, 0x6198B971, -/**/ 0x4075678C, 0x9680F9AF, -/**/ 0x40972BE5, 0x8AF946DD, -/**/ 0x40B9EDE4, 0xE1B531F9, -/**/ 0xBC447F69, 0xE4527544, -/**/ 0x3FEEAC72, 0x0A61AD1C, -/**/ 0x3FFBC000, 0x00000000, -/**/ 0x3F771CB7, 0x5F37A0DF, -/**/ 0x3FEA5000, 0x00000000, -/**/ 0x3FFC1D47, 0xA5B24F80, -/**/ 0x4001D81E, 0x7EB9F789, -/**/ 0x401A44B2, 0xDF42B6B7, -/**/ 0x403722E5, 0xB4766752, -/**/ 0x4056D6EE, 0xECFADFF0, -/**/ 0x40782028, 0x8B1EB8D5, -/**/ 0x409AB0E2, 0xCA840144, -/**/ 0x40BE8614, 0xE2126BBF, -/**/ 0xBC8D9A93, 0x2CC624E2, -/**/ 0x3FEEE466, 0x087F8D20, -/**/ 0x3FFC0000, 0x00000000, -/**/ 0x3F7D47A5, 0xB24F8064, -/**/ 0x3FEA7000, 0x00000000, -/**/ 0x3FFC65E9, 0x3DE98207, -/**/ 0x40027A2E, 0x811F641B, -/**/ 0x401BC5A3, 0xF223266D, -/**/ 0x40390340, 0xA6ECBE29, -/**/ 0x40593EB6, 0xC3D499AF, -/**/ 0x407B43D9, 0xAD8CC2F1, -/**/ 0x409ED77C, 0xA519B816, -/**/ 0x40C2080A, 0x5B3B703B, -/**/ 0x3C7B187D, 0xE993C3DD, -/**/ 0x3FEF1CE8, 0xCD5A7CE8, -/**/ 0x3FFC8000, 0x00000000, -/**/ 0xBF7A16C2, 0x167DF937, -/**/ 0x3FEA9000, 0x00000000, -/**/ 0x3FFCB125, 0x9CA2F05E, -/**/ 0x400325A1, 0x54FC4C95, -/**/ 0x401D662B, 0xD9C5FF75, -/**/ 0x403B16CE, 0x8E93577D, -/**/ 0x405BF79A, 0xE0E3029E, -/**/ 0x407EE612, 0x04BCDF91, -/**/ 0x40A1E0AC, 0x31EFE3F1, -/**/ 0x40C56267, 0x85DF051C, -/**/ 0xBCAD6122, 0x2D0BC06E, -/**/ 0x3FEF55FF, 0x69EAB2F0, -/**/ 0x3FFCC000, 0x00000000, -/**/ 0xBF6DB4C6, 0xBA1F43E4, -/**/ 0x3FEAB000, 0x00000000, -/**/ 0x3FFCFF23, 0xD56B9F55, -/**/ 0x4003DB3E, 0x86149A3B, -/**/ 0x401F29B3, 0x0B8D0DAD, -/**/ 0x403D6463, 0x40E9D1A7, -/**/ 0x405F0E89, 0x619D6679, -/**/ 0x40818F2E, 0x92CF3FBC, -/**/ 0x40A4CC10, 0x844E51BD, -/**/ 0x40C9762D, 0xF3A9EB60, -/**/ 0x3CA20E79, 0xEF4B1E02, -/**/ 0x3FEF8FAF, 0x3A4BC01C, -/**/ 0x3FFD0000, 0x00000000, -/**/ 0xBF2B8552, 0x8C156248, -/**/ 0x3FEAD000, 0x00000000, -/**/ 0x3FFD500E, 0x44AAD4F2, -/**/ 0x40049BE3, 0x6B85DB68, -/**/ 0x40208A0B, 0xE558F351, -/**/ 0x403FF3EC, 0xC1BCC632, -/**/ 0x40614970, 0x2A555E45, -/**/ 0x408404AE, 0xDD057F33, -/**/ 0x40A847D9, 0x22610A18, -/**/ 0x40CE7146, 0x3C7AA2B4, -/**/ 0xBC9571D0, 0x53CA14EC, -/**/ 0x3FEFC9FD, 0xEBFAA348, -/**/ 0x3FFD4000, 0x00000000, -/**/ 0x3F700E44, 0xAAD4F267, -/**/ 0x3FEAF000, 0x00000000, -/**/ 0x3FFDA412, 0xEC9EDC5A, -/**/ 0x40056886, 0x22B6D908, -/**/ 0x402194E0, 0xB605B3B4, -/**/ 0x40416754, 0x9338560C, -/**/ 0x40634B7B, 0x34B16169, -/**/ 0x4086E508, 0x3B1BAF9C, -/**/ 0x40AC7475, 0xFB9DFBF5, -/**/ 0x40D2473E, 0xF4B4BB01, -/**/ 0x3CA82B31, 0xE9F06EFC, -/**/ 0x3FF00278, 0xC2613F02, -/**/ 0x3FFDC000, 0x00000000, -/**/ 0xBF7BED13, 0x6123A5D1, -/**/ 0x3FEB1000, 0x00000000, -/**/ 0x3FFDFB63, 0xDF3AE0DB, -/**/ 0x40064239, 0x08AD38CF, -/**/ 0x4022B7DB, 0xAA166573, -/**/ 0x4042FFB4, 0x38210D3E, -/**/ 0x40659862, 0xFB634456, -/**/ 0x408A45B4, 0xEE8F3E34, -/**/ 0x40B0BD59, 0xD39A6C6F, -/**/ 0x40D60CCD, 0x2B4867E8, -/**/ 0xBCA6097F, 0x1CBB85B3, -/**/ 0x3FF02048, 0x3537E800, -/**/ 0x3FFE0000, 0x00000000, -/**/ 0xBF527083, 0x147C93ED, -/**/ 0x3FEB3000, 0x00000000, -/**/ 0x3FFE5637, 0xB70F5F72, -/**/ 0x40072A2E, 0xCA935102, -/**/ 0x4023F5DE, 0x43559218, -/**/ 0x4044C96E, 0xB4E19CA3, -/**/ 0x40683D62, 0x1272DDA3, -/**/ 0x408E4135, 0xC6BFAAED, -/**/ 0x40B3C717, 0x099FB249, -/**/ 0x40DABA6D, 0xD5294F7D, -/**/ 0x3CA488B1, 0xC91FFA21, -/**/ 0x3FF03E70, 0xB5B309E0, -/**/ 0x3FFE4000, 0x00000000, -/**/ 0x3F7637B7, 0x0F5F723E, -/**/ 0x3FEB5000, 0x00000000, -/**/ 0x3FFEB4CA, 0x21D4B842, -/**/ 0x400821BF, 0x2BE08FC5, -/**/ 0x40255238, 0x6A6A3BD0, -/**/ 0x4046CC00, 0xBAC907E2, -/**/ 0x406B4A78, 0x94202458, -/**/ 0x40917C35, 0xFE065CA6, -/**/ 0x40B77848, 0xE8D5B845, -/**/ 0x40E04820, 0x0CD72D76, -/**/ 0x3CA54B6E, 0x9CBE508B, -/**/ 0x3FF05CF5, 0xE41C2ACE, -/**/ 0x3FFEC000, 0x00000000, -/**/ 0xBF666BBC, 0x568F7C18, -/**/ 0x3FEB7000, 0x00000000, -/**/ 0x3FFF175C, 0x7FB6EB26, -/**/ 0x40092A6C, 0xA7BA9C35, -/**/ 0x4026D0BC, 0x80F5BA9F, -/**/ 0x40491048, 0x33BD74FB, -/**/ 0x406ED319, 0x61FCE21F, -/**/ 0x40944A2E, 0x60DF5AED, -/**/ 0x40BBFAFC, 0x1AC97175, -/**/ 0x40E3F145, 0xC3A8BC22, -/**/ 0xBC994B5D, 0xA70A42D9, -/**/ 0x3FF07BDB, 0x9F358760, -/**/ 0x3FFF0000, 0x00000000, -/**/ 0x3F775C7F, 0xB6EB2582, -/**/ 0x3FEB9000, 0x00000000, -/**/ 0x3FFF7E36, 0x9B29492C, -/**/ 0x400A45EB, 0x1C35AD8A, -/**/ 0x402875D7, 0xC8373BB1, -/**/ 0x404BA0D1, 0x885E6AE6, -/**/ 0x40717784, 0x0831631E, -/**/ 0x4097A441, 0x7F51DA78, -/**/ 0x40C0C2B2, 0x6D7642FB, -/**/ 0x40E89073, 0x594961FB, -/**/ 0xBCA5DECE, 0x96CDC181, -/**/ 0x3FF09B26, 0x0A46374E, -/**/ 0x3FFF8000, 0x00000000, -/**/ 0xBF3C964D, 0x6B6D3D05, -/**/ 0x3FEBB000, 0x00000000, -/**/ 0x3FFFE9A7, 0x7DD9B1CF, -/**/ 0x400B7627, 0xB9AE77AF, -/**/ 0x402A46B0, 0x3338306D, -/**/ 0x404E8A38, 0xA0CAACE9, -/**/ 0x4073DDBB, 0x864F53A2, -/**/ 0x409BAAF0, 0xD6C97F8D, -/**/ 0x40C42EEF, 0xDFAE5A98, -/**/ 0x40EE701A, 0xE19501DA, -/**/ 0x3C9CC4F4, 0xC7D3D675, -/**/ 0x3FF0BAD9, 0x93EC49AE, -/**/ 0x40000000, 0x00000000, -/**/ 0xBF765882, 0x264E310D, -/**/ 0x3FEBD000, 0x00000000, -/**/ 0x40002D03, 0x34302F3B, -/**/ 0x400CBD52, 0x7F5AAF0D, -/**/ 0x402C4949, 0x0C635C0A, -/**/ 0x4050EDD1, 0xB6BB1732, -/**/ 0x4076AE3D, 0x9691A9F4, -/**/ 0x40A043C7, 0x61482FC6, -/**/ 0x40C87037, 0xF81EB6E0, -/**/ 0x40F2FA30, 0xE84FE55E, -/**/ 0xBC9820F1, 0x228FC41D, -/**/ 0x3FF0DAFA, 0xFDD4AE68, -/**/ 0x40002000, 0x00000000, -/**/ 0x3F7A0668, 0x605E76B0, -/**/ 0x3FEBF000, 0x00000000, -/**/ 0x400067D9, 0xF9C947A3, -/**/ 0x400E1DE9, 0xA1722882, -/**/ 0x402E84B0, 0x41FE0247, -/**/ 0x4052D3AE, 0xDBD1D676, -/**/ 0x4079FF78, 0xE088BEF5, -/**/ 0x40A33780, 0x64D9A484, -/**/ 0x40CDC32D, 0x1974F9B5, -/**/ 0x40F7D295, 0xCE268611, -/**/ 0xBCA5A192, 0xD437D23F, -/**/ 0x3FF0FB8F, 0x657EFDCA, -/**/ 0x40006000, 0x00000000, -/**/ 0x3F6F67E7, 0x251E8CF3, -/**/ 0x3FEC1000, 0x00000000, -/**/ 0x4000A58D, 0xB1FFFA6D, -/**/ 0x400F9AC7, 0x4E7307C3, -/**/ 0x4030809B, 0x5EA15962, -/**/ 0x405501D0, 0x5418E1B6, -/**/ 0x407DED80, 0xB476D79F, -/**/ 0x40A6D2BF, 0x37F33D5F, -/**/ 0x40D23C31, 0xA43F6C6F, -/**/ 0x40FE1E46, 0xDB17BBAA, -/**/ 0xBCA7EB62, 0x41D8AD56, -/**/ 0x3FF11C9C, 0x4E3ADE0A, -/**/ 0x4000A000, 0x00000000, -/**/ 0x3F6636C7, 0xFFE9B457, -/**/ 0x3FEC3000, 0x00000000, -/**/ 0x4000E65A, 0x1D1BDCC6, -/**/ 0x40109B99, 0x3503CCCE, -/**/ 0x4031E45B, 0x7580EC24, -/**/ 0x405785CA, 0x1803E176, -/**/ 0x40814DDB, 0x8458A77D, -/**/ 0x40AB41D9, 0x6C115AB7, -/**/ 0x40D67DF0, 0xD7BCE584, -/**/ 0x41032EF5, 0xF5487646, -/**/ 0xBC9C4040, 0xF3631254, -/**/ 0x3FF13E27, 0xAC964DA8, -/**/ 0x4000E000, 0x00000000, -/**/ 0x3F696874, 0x6F731770, -/**/ 0x3FEC5000, 0x00000000, -/**/ 0x40012A82, 0x068FBCB4, -/**/ 0x40117B79, 0x7FE89A5F, -/**/ 0x40337376, 0xD37F3897, -/**/ 0x405A704E, 0xDF3B47A2, -/**/ 0x40841B83, 0xEB114449, -/**/ 0x40B05F75, 0x8D323120, -/**/ 0x40DBEFEC, 0x8AE65DDD, -/**/ 0x4108A2A2, 0xD1814341, -/**/ 0x3CA3E83D, 0xFB25EC76, -/**/ 0x3FF16037, 0xF37FFEDA, -/**/ 0x40012000, 0x00000000, -/**/ 0x3F75040D, 0x1F796787, -/**/ 0x3FEC7000, 0x00000000, -/**/ 0x40017250, 0x5F8F574B, -/**/ 0x40126F35, 0xB566493D, -/**/ 0x403534F5, 0x95186E3D, -/**/ 0x405DD60B, 0x947D5EA5, -/**/ 0x40877C77, 0x568C5D73, -/**/ 0x40B3CB66, 0xA26261F0, -/**/ 0x40E17B06, 0xBF32194D, -/**/ 0x410FE921, 0x11490E42, -/**/ 0xBCA34428, 0x5376CB61, -/**/ 0x3FF182D4, 0x236FE314, -/**/ 0x40018000, 0x00000000, -/**/ 0xBF7B5F40, 0xE15169A9, -/**/ 0x3FEC9000, 0x00000000, -/**/ 0x4001BE19, 0x91B4C8D8, -/**/ 0x4013795B, 0xBE69BAE6, -/**/ 0x40373151, 0xCD6F8B02, -/**/ 0x4060E864, 0xD86A7BFF, -/**/ 0x408B95CC, 0x515F5BD6, -/**/ 0x40B8180C, 0xD070B4A1, -/**/ 0x40E60D2C, 0xC9B24D80, -/**/ 0x4114DBF6, 0xAA392CAF, -/**/ 0xBCA89BD0, 0xF5844C55, -/**/ 0x3FF1A603, 0xDBFAF236, -/**/ 0x4001C000, 0x00000000, -/**/ 0xBF4E66E4, 0xB37285FC, -/**/ 0x3FECB000, 0x00000000, -/**/ 0x40020E3D, 0x1757F6B1, -/**/ 0x40149CE9, 0xAE890640, -/**/ 0x403972D4, 0xD6174F60, -/**/ 0x40634079, 0x8C82DF92, -/**/ 0x40904BE6, 0xACAB5569, -/**/ 0x40BD8A99, 0xB362E75A, -/**/ 0x40EC0ED7, 0x389374DC, -/**/ 0x411B8ADF, 0xCA5E9653, -/**/ 0xBC80CBC7, 0x4A1E3E49, -/**/ 0x3FF1C9CF, 0x704F5D26, -/**/ 0x40020000, 0x00000000, -/**/ 0x3F7C7A2E, 0xAFED62A2, -/**/ 0x3FECD000, 0x00000000, -/**/ 0x40026327, 0x6B3395AA, -/**/ 0x4015DD66, 0x33FB1467, -/**/ 0x403C0610, 0xDCF3437C, -/**/ 0x406607CE, 0xC9D7C47A, -/**/ 0x409360FB, 0xA330DC5C, -/**/ 0x40C240B4, 0x38A3194B, -/**/ 0x40F20437, 0xBAA6A879, -/**/ 0x41226106, 0x04D6F19C, -/**/ 0x3CABCCF5, 0x15E5252C, -/**/ 0x3FF1EE3F, 0xFF35681A, -/**/ 0x40026000, 0x00000000, -/**/ 0x3F593B59, 0x9CAD4CE9, -/**/ 0x3FECF000, 0x00000000, -/**/ 0x4002BD54, 0x664A8350, -/**/ 0x40173EFF, 0x945190A0, -/**/ 0x403EFA80, 0xC7CC5224, -/**/ 0x406958AA, 0x896F1658, -/**/ 0x40973450, 0x4FD54E04, -/**/ 0x40C6BF55, 0x4CD60C4A, -/**/ 0x40F75EBE, 0x3EFFD07C, -/**/ 0x4128D03C, 0x9E2E6981, -/**/ 0xBC987CEE, 0xC8A488FF, -/**/ 0x3FF2135F, 0x8F597306, -/**/ 0x4002C000, 0x00000000, -/**/ 0xBF555CCD, 0xABE583FE, -/**/ 0x3FED1000, 0x00000000, -/**/ 0x40031D52, 0x2A40EA5C, -/**/ 0x4018C6B3, 0x52B4947D, -/**/ 0x404131AE, 0x5D01146E, -/**/ 0x406D54FB, 0x0163E71C, -/**/ 0x409BFE8A, 0xEF3ED15B, -/**/ 0x40CC9C28, 0xA33A6B00, -/**/ 0x40FEA523, 0x1456E1A6, -/**/ 0x4130F60F, 0xFC8790DB, -/**/ 0x3CAC104F, 0x6FABCA41, -/**/ 0x3FF23939, 0x30D87C68, -/**/ 0x40032000, 0x00000000, -/**/ 0xBF556EAD, 0xF8AD1CF9, -/**/ 0x3FED3000, 0x00000000, -/**/ 0x400383C4, 0xC053C623, -/**/ 0x401A7A81, 0x6ADBFF2C, -/**/ 0x40432C5B, 0xE219A24E, -/**/ 0x40711484, 0x30F4B8D8, -/**/ 0x40A10659, 0xBC59423E, -/**/ 0x40D22C09, 0x3D537AE5, -/**/ 0x410454A2, 0xA4B7D930, -/**/ 0x41378151, 0xC151F3C3, -/**/ 0xBCA2F226, 0x779E9951, -/**/ 0x3FF25FD9, 0x254E3F9C, -/**/ 0x40038000, 0x00000000, -/**/ 0x3F5E2602, 0x9E311A8B, -/**/ 0x3FED5000, 0x00000000, -/**/ 0x4003F16A, 0xA2F65F8C, -/**/ 0x401C61AF, 0x36C0308E, -/**/ 0x40457C82, 0x5337FF7D, -/**/ 0x407407A3, 0x7FB84BA9, -/**/ 0x40A4E476, 0x4C74DEA7, -/**/ 0x40D75638, 0xDF1C2124, -/**/ 0x410B5320, 0xA2556E94, -/**/ 0x414087CD, 0x7D68ABBE, -/**/ 0xBCACD58C, 0x73A87AB9, -/**/ 0x3FF2874D, 0x10017B06, -/**/ 0x40040000, 0x00000000, -/**/ 0xBF7D2ABA, 0x1340E849, -/**/ 0x3FED7000, 0x00000000, -/**/ 0x40046722, 0x7BA9A810, -/**/ 0x401E851F, 0xCBC74735, -/**/ 0x40483596, 0xF3879985, -/**/ 0x4077AAEB, 0xCD297F00, -/**/ 0x40A9E3C8, 0x31669F50, -/**/ 0x40DE5420, 0xB7CBB664, -/**/ 0x41129F7B, 0xB75100A0, -/**/ 0x4147A1C1, 0x51D127BF, -/**/ 0x3CAC647E, 0x46D9C78F, -/**/ 0x3FF2AFA4, 0x304962AE, -/**/ 0x40046000, 0x00000000, -/**/ 0x3F6C89EE, 0xA6A041C9, -/**/ 0x3FED9000, 0x00000000, -/**/ 0x4004E5F2, 0x7A99A835, -/**/ 0x402077E5, 0x15B0232D, -/**/ 0x404B70C1, 0xEE468866, -/**/ 0x407C334A, 0x43A041C3, -/**/ 0x40B036D1, 0x53D2C164, -/**/ 0x40E3F7B1, 0x10CCEDBE, -/**/ 0x4119C160, 0xF6C2E560, -/**/ 0x415131DD, 0x6D21D20F, -/**/ 0x41878683, 0x2EC50766, -/**/ 0xBCA95596, 0xD1134ECC, -/**/ 0x3FF2D8EF, 0xA8F4B028, -/**/ 0x4004E000, 0x00000000, -/**/ 0x3F67C9EA, 0x66A0D2C7, -/**/ 0x3FEDB000, 0x00000000, -/**/ 0x40056F11, 0xD6373B90, -/**/ 0x4021D7AC, 0xC3747DF3, -/**/ 0x404F4EF3, 0x6A014D6F, -/**/ 0x4080F4C4, 0x505C454B, -/**/ 0x40B48D16, 0x214975C5, -/**/ 0x40EAACFD, 0xF57BFAC6, -/**/ 0x41222235, 0x5225A6ED, -/**/ 0x41598643, 0xACBA67AB, -/**/ 0x419267B9, 0xDE5D19B9, -/**/ 0xBCAEF63C, 0x42C92439, -/**/ 0x3FF30342, 0xD86BED76, -/**/ 0x40056000, 0x00000000, -/**/ 0x3F7E23AC, 0x6E771F48, -/**/ 0x3FEDD000, 0x00000000, -/**/ 0x400603F5, 0x3D2D8CF1, -/**/ 0x40236A84, 0xEF4A10FA, -/**/ 0x4051FDF3, 0x4EA265AF, -/**/ 0x408499B5, 0xD944F636, -/**/ 0x40BA64B8, 0x37F73BAC, -/**/ 0x40F21B9F, 0x259B27FC, -/**/ 0x412A0669, 0x265D5B9F, -/**/ 0x41635D8E, 0x3DC806E2, -/**/ 0x419D8657, 0x36AD8B00, -/**/ 0x3CA4CEEB, 0x3FFCDCA3, -/**/ 0x3FF32EB3, 0xC69D2D10, -/**/ 0x40060000, 0x00000000, -/**/ 0x3F5FA9E9, 0x6C678625, -/**/ 0x3FEDF000, 0x00000000, -/**/ 0x4006A65F, 0x5FCDF915, -/**/ 0x40253B6E, 0x68321BDA, -/**/ 0x4054D949, 0x706E8DA9, -/**/ 0x408950EF, 0x4A70D2D7, -/**/ 0x40C13319, 0x1F15E14E, -/**/ 0x40F907B1, 0x846A9BD5, -/**/ 0x4133139C, 0x17C39016, -/**/ 0x416E1DA3, 0xBC86F11B, -/**/ 0x41A8597F, 0xD9F86F3B, -/**/ 0x3C32D4F8, 0x7D0D5190, -/**/ 0x3FF35B5B, 0xAFA88354, -/**/ 0x4006A000, 0x00000000, -/**/ 0x3F697D7F, 0x37E455FD, -/**/ 0x3FEE1000, 0x00000000, -/**/ 0x40075877, 0x41D1DBF9, -/**/ 0x402758A8, 0xF5852184, -/**/ 0x405861EE, 0x65C0F467, -/**/ 0x408F83C0, 0xD2D91276, -/**/ 0x40C6CA7C, 0x43EC3B0E, -/**/ 0x4101A722, 0x718322C8, -/**/ 0x413CA4C6, 0x9533D806, -/**/ 0x417812B7, 0xE9899583, -/**/ 0x41B4B875, 0x85EE8B86, -/**/ 0xBC99DEFB, 0xD1AEEED1, -/**/ 0x3FF38957, 0xB510476E, -/**/ 0x40076000, 0x00000000, -/**/ 0xBF6E22F8, 0xB8901BF9, -/**/ 0x3FEE3000, 0x00000000, -/**/ 0x40081CE6, 0xE1C37E57, -/**/ 0x4029D4F3, 0xD3DC9910, -/**/ 0x405CD074, 0xE3095065, -/**/ 0x4093E764, 0xC5C38224, -/**/ 0x40CEC5AE, 0x3CAE1F31, -/**/ 0x41097A50, 0xC0645F38, -/**/ 0x41461866, 0xD8A7F25E, -/**/ 0x4183DAF5, 0x8C2F04A3, -/**/ 0x41C2450E, 0xA9143C1F, -/**/ 0x3C7D25BE, 0x9FD995BC, -/**/ 0x3FF3B8C9, 0xC35D33E6, -/**/ 0x40082000, 0x00000000, -/**/ 0xBF58C8F1, 0xE40D49E0, -/**/ 0x3FEE5000, 0x00000000, -/**/ 0x4008F706, 0x285640BB, -/**/ 0x402CC96B, 0x3B2B7CD1, -/**/ 0x40613ADF, 0xC5341328, -/**/ 0x4099908D, 0x16E928A9, -/**/ 0x40D53986, 0x7CC08A3C, -/**/ 0x4112DFC5, 0x31DD3E45, -/**/ 0x41519499, 0xE2A13787, -/**/ 0x4190F943, 0xF94424AD, -/**/ 0x41D0C6BC, 0xCDCD49BE, -/**/ 0xBC9E2458, 0x6D41701D, -/**/ 0x3FF3E9D9, 0xC088BD28, -/**/ 0x40090000, 0x00000000, -/**/ 0xBF71F3AF, 0x537E8A00, -/**/ 0x3FEE7000, 0x00000000, -/**/ 0x4009EB18, 0x6562D1E0, -/**/ 0x40302C31, 0x75651223, -/**/ 0x4064E431, 0x336E41C7, -/**/ 0x40A0BCA6, 0xA065DA69, -/**/ 0x40DE034D, 0x917AF357, -/**/ 0x411CD2C1, 0x4168FB0F, -/**/ 0x415CFEB6, 0x15BB794D, -/**/ 0x419E3EE1, 0x6EFFD5E5, -/**/ 0x41E024E7, 0x1ACB4D9C, -/**/ 0xBC9C29C8, 0xD93F153F, -/**/ 0x3FF41CB7, 0x2183E810, -/**/ 0x4009E000, 0x00000000, -/**/ 0x3F7630CA, 0xC5A3C038, -/**/ 0x3FEE9000, 0x00000000, -/**/ 0x400AFEA6, 0xA364196F, -/**/ 0x403258F3, 0x0B19A2EB, -/**/ 0x4069BDA5, 0x2520AC75, -/**/ 0x40A669BC, 0x8F67EDEA, -/**/ 0x40E5D78C, 0xC026C9F8, -/**/ 0x4126CCB4, 0x1E3B36C2, -/**/ 0x4168EDE4, 0xBF45C805, -/**/ 0x41AC2F6A, 0x8AC89E76, -/**/ 0x41F0675E, 0x4CA9EB55, -/**/ 0x42336AC1, 0x0D13E3DF, -/**/ 0x3C9B1D74, 0xF2DE93A6, -/**/ 0x3FF4519B, 0x155FB22E, -/**/ 0x400B0000, 0x00000000, -/**/ 0xBF4595C9, 0xBE690E67, -/**/ 0x3FEEB000, 0x00000000, -/**/ 0x400C3908, 0x4BD1C065, -/**/ 0x40350D88, 0x26C39FFD, -/**/ 0x4070296B, 0x69D3E79E, -/**/ 0x40AED279, 0xD7FEEA5D, -/**/ 0x40F072A8, 0xFD5BD547, -/**/ 0x4132CDB9, 0x4A08BB38, -/**/ 0x41768482, 0x536BED06, -/**/ 0x41BBE1FF, 0x2F10E88D, -/**/ 0x4201C966, 0xABDBBDAC, -/**/ 0x42471011, 0x02E62DDA, -/**/ 0xBCA0855D, 0x3E907E71, -/**/ 0x3FF488CB, 0x8FA73920, -/**/ 0x400C4000, 0x00000000, -/**/ 0xBF6BDED0, 0xB8FE6DDF, -/**/ 0x3FEED000, 0x00000000, -/**/ 0x400DA439, 0x12AAF9A9, -/**/ 0x40387D46, 0x62F25109, -/**/ 0x4074C339, 0x3F133A3F, -/**/ 0x40B5E143, 0x662036F9, -/**/ 0x40F9CF04, 0x74467831, -/**/ 0x41404E10, 0x576C6FA8, -/**/ 0x41859489, 0xFF4F8E88, -/**/ 0x41CD88D2, 0xB44962A9, -/**/ 0x4214D838, 0x97A288F3, -/**/ 0x425DE10B, 0x6CF738B3, -/**/ 0xBC8E9EA7, 0x5F7263CC, -/**/ 0x3FF4C29F, 0xAA786F36, -/**/ 0x400DA000, 0x00000000, -/**/ 0x3F60E44A, 0xABE6A2AD, -/**/ 0x3FEEF000, 0x00000000, -/**/ 0x400F4E35, 0xC169B52F, -/**/ 0x403CF773, 0x29E8699C, -/**/ 0x407B6D37, 0xFC1818D6, -/**/ 0x40C02655, 0x1386790A, -/**/ 0x41054A1F, 0x4FF79D1E, -/**/ 0x414E104A, 0x7DB0265A, -/**/ 0x41963C39, 0xE5C8114B, -/**/ 0x41E10156, 0xF52A87DB, -/**/ 0x422ADD76, 0x2E9E7ABE, -/**/ 0x427586AB, 0x6EC81361, -/**/ 0x3C935690, 0xE395EEA6, -/**/ 0x3FF4FF86, 0x2E5965A2, -/**/ 0x400F4000, 0x00000000, -/**/ 0x3F7C6B82, 0xD36A5E70 } }; - -#else -#ifdef LITTLE_ENDI -static const union {int4 i[5136];double x[2568];} asncs = { .i = { -/**/ 0x00000000, 0x3FC04000, -/**/ 0x88994424, 0x3FF02169, -/**/ 0xB799B115, 0x3FB0A6A2, -/**/ 0xD57409A0, 0x3FC6EF15, -/**/ 0xAF52EAA0, 0x3FAA141E, -/**/ 0xABBBE261, 0x3FB75591, -/**/ 0xD206D88F, 0x3FA72B51, -/**/ 0x5BB33E7D, 0x3C96B595, -/**/ 0xA03E2700, 0x3FC04B41, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x66BBDC7C, 0xBF7E9677, -/**/ 0x00000000, 0x3FC0C000, -/**/ 0xF9E23A56, 0x3FF02386, -/**/ 0x60FD0235, 0x3FB1308C, -/**/ 0x14D16B02, 0x3FC7099F, -/**/ 0x27C01EE1, 0x3FAAFED6, -/**/ 0xDBCD5F98, 0x3FB79C6F, -/**/ 0x4084DAAC, 0x3FA8144A, -/**/ 0x38D8505E, 0xBC87C092, -/**/ 0x56C9F380, 0x3FC0CC55, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x1DC5AA24, 0xBF7C7906, -/**/ 0x00000000, 0x3FC14000, -/**/ 0xB27141F6, 0x3FF025B5, -/**/ 0x04CE7400, 0x3FB1BB18, -/**/ 0x72907342, 0x3FC72514, -/**/ 0x0BF4222C, 0x3FABEC60, -/**/ 0x75B3736C, 0x3FB7E610, -/**/ 0x5199C343, 0x3FA9024C, -/**/ 0x06B56F60, 0xBC8AE84C, -/**/ 0x3DEFA070, 0x3FC14D7A, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x8EBE0A5C, 0xBF7A4A4D, -/**/ 0x00000000, 0x3FC1C000, -/**/ 0xC6DE8F57, 0x3FF027F5, -/**/ 0x345751E1, 0x3FB2464B, -/**/ 0xCF026805, 0x3FC74178, -/**/ 0x40A9E0D6, 0x3FACDCD8, -/**/ 0xEB1D9C38, 0x3FB83282, -/**/ 0xD7BE707B, 0x3FA9F590, -/**/ 0x03A2A6D6, 0xBCAB9768, -/**/ 0xE03B4870, 0x3FC1CEB0, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x2170A943, 0xBF780A39, -/**/ 0x00000000, 0x3FC24000, -/**/ 0x4C759796, 0x3FF02A47, -/**/ 0x92771935, 0x3FB2D22B, -/**/ 0x26ABA06D, 0x3FC75ECF, -/**/ 0x486A1932, 0x3FADD05B, -/**/ 0x5AF971D5, 0x3FB881D7, -/**/ 0x831AEE0C, 0x3FAAEE52, -/**/ 0xAD1B1BEF, 0x3CA13F57, -/**/ 0xC8E09330, 0x3FC24FF9, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x8A68699B, 0xBF75B8B3, -/**/ 0x00000000, 0x3FC2C000, -/**/ 0x59374E09, 0x3FF02CAA, -/**/ 0xD44E8BEA, 0x3FB35EBE, -/**/ 0x92E4BE8A, 0x3FC77D1A, -/**/ 0x4A6C34FD, 0x3FAEC706, -/**/ 0x972F6E07, 0x3FB8D41E, -/**/ 0xF9845F69, 0x3FABECCD, -/**/ 0x945C4185, 0x3C8BA1FA, -/**/ 0x83C058B0, 0x3FC2D155, -/**/ 0x00000000, 0x3FF04000, -/**/ 0xC8B1F774, 0xBF7355A6, -/**/ 0x00000000, 0x3FC34000, -/**/ 0x03DC7745, 0x3FF02F1F, -/**/ 0xC1EE9F61, 0x3FB3EC0A, -/**/ 0x4A82E6D2, 0x3FC79C5E, -/**/ 0x19B1EF72, 0x3FAFC0F7, -/**/ 0x2AA943E5, 0x3FB9296A, -/**/ 0xEF8B9DE7, 0x3FACF141, -/**/ 0x083C8716, 0xBC834081, -/**/ 0x9D6E5610, 0x3FC352C4, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x2388BB30, 0xBF70E0FC, -/**/ 0x00000000, 0x3FC3C000, -/**/ 0x63D81251, 0x3FF031A5, -/**/ 0x370B721F, 0x3FB47A15, -/**/ 0xA28731E5, 0x3FC7BC9D, -/**/ 0x1E305BE9, 0x3FB05F26, -/**/ 0x5FA50FBD, 0x3FB981CC, -/**/ 0x42AC4083, 0x3FADFBEF, -/**/ 0xA8E107C7, 0x3CA20ACB, -/**/ 0xA336F5E0, 0x3FC3D447, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x4FDB5D5C, 0xBF6CB538, -/**/ 0x00000000, 0x3FC44000, -/**/ 0x9159D86F, 0x3FF0343D, -/**/ 0x23B3747C, 0x3FB508E4, -/**/ 0x0ED597CB, 0x3FC7DDDC, -/**/ 0x79ADF104, 0x3FB0DF92, -/**/ 0x4658D945, 0x3FB9DD58, -/**/ 0x14ACA06B, 0x3FAF0D19, -/**/ 0xDF636EFE, 0xBCA4E10D, -/**/ 0x23252C00, 0x3FC455DF, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x4C4F221A, 0xBF6784DD, -/**/ 0x00000000, 0x3FC4C000, -/**/ 0xA550D410, 0x3FF036E7, -/**/ 0x8D0AF1E7, 0x3FB5987D, -/**/ 0x22F39726, 0x3FC8001D, -/**/ 0xA1116D73, 0x3FB161D0, -/**/ 0xBBEA1528, 0x3FBA3C21, -/**/ 0x74202FF6, 0x3FB01282, -/**/ 0xD10866E2, 0x3CAA0611, -/**/ 0xAC086560, 0x3FC4D78B, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x5E57DF8A, 0xBF6230B5, -/**/ 0x00000000, 0x3FC54000, -/**/ 0xB96E0F8A, 0x3FF039A3, -/**/ 0x8E0C29F6, 0x3FB628E7, -/**/ 0x92CEDE01, 0x3FC82364, -/**/ 0xFB7B5D84, 0x3FB1E5F0, -/**/ 0x71BD08EE, 0x3FBA9E3D, -/**/ 0x5F7FFAB4, 0x3FB0A1FD, -/**/ 0xEF04F6E7, 0xBC90F980, -/**/ 0xCD7A8DC0, 0x3FC5594D, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x47C1D879, 0xBF59711A, -/**/ 0x00000000, 0x3FC5C000, -/**/ 0xE8275C12, 0x3FF03C71, -/**/ 0x584C2A23, 0x3FB6BA28, -/**/ 0x338C3D4B, 0x3FC847B6, -/**/ 0x59A55DD8, 0x3FB26C04, -/**/ 0xF5202D6A, 0x3FBB03C0, -/**/ 0x9C6466A4, 0x3FB13522, -/**/ 0x2A268973, 0x3C983C9A, -/**/ 0x17E62A20, 0x3FC5DB26, -/**/ 0x00000000, 0x3FF04000, -/**/ 0xC51F7008, 0xBF4C70BE, -/**/ 0x00000000, 0x3FC64000, -/**/ 0x4CBA31A9, 0x3FF03F52, -/**/ 0x34C49ADE, 0x3FB74C46, -/**/ 0xFC5F33CC, 0x3FC86D15, -/**/ 0xFA419D7C, 0x3FB2F41B, -/**/ 0xB757E82A, 0x3FBB6CC2, -/**/ 0xDA4D5C39, 0x3FB1CC18, -/**/ 0x2DFB224D, 0xBCA862D4, -/**/ 0x1C8C8AF0, 0x3FC65D15, -/**/ 0x00000000, 0x3FF04000, -/**/ 0xB9CADBBF, 0xBF25B668, -/**/ 0x00000000, 0x3FC6C000, -/**/ 0x032EA88F, 0x3FF04245, -/**/ 0x84A2B473, 0x3FB7DF47, -/**/ 0x076A60F5, 0x3FC89388, -/**/ 0x8E8394C1, 0x3FB37E49, -/**/ 0x160F3472, 0x3FBBD95A, -/**/ 0x39844810, 0x3FB26708, -/**/ 0x698BC8EA, 0x3C994228, -/**/ 0x6D8C14A0, 0x3FC6DF1B, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x754477AC, 0x3F422819, -/**/ 0x00000000, 0x3FC74000, -/**/ 0x285A8CEB, 0x3FF0454A, -/**/ 0xC21B9224, 0x3FB87332, -/**/ 0x92A93402, 0x3FC8BB10, -/**/ 0x3ED3F586, 0x3FB40A9F, -/**/ 0x643217C8, 0x3FBC499F, -/**/ 0x5D29A16B, 0x3FB3061A, -/**/ 0x3DF9F2D7, 0xBCA3B2DF, -/**/ 0x9DE6A160, 0x3FC76139, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x6A33AB4B, 0x3F5528A1, -/**/ 0x00000000, 0x3FC7C000, -/**/ 0xD9E48D58, 0x3FF04861, -/**/ 0x81461BF6, 0x3FB9080E, -/**/ 0x00E32FFA, 0x3FC8E3B4, -/**/ 0xAFB1F2A5, 0x3FB4992F, -/**/ 0xF33705D5, 0x3FBCBDAB, -/**/ 0x7E23EE89, 0x3FB3A97A, -/**/ 0xCCE44C41, 0x3C7AAD12, -/**/ 0x4187FAE0, 0x3FC7E370, -/**/ 0x00000000, 0x3FF04000, -/**/ 0xC91AAF11, 0x3F60C3B3, -/**/ 0x00000000, 0x3FC84000, -/**/ 0x36478509, 0x3FF04B8C, -/**/ 0x70FAC1B4, 0x3FB99DE1, -/**/ 0xDAA92166, 0x3FC90D76, -/**/ 0x06C416A6, 0x3FB52A0E, -/**/ 0x1CDCA344, 0x3FBD359A, -/**/ 0x7EFD4CA0, 0x3FB45155, -/**/ 0x35A8895D, 0x3C396CA5, -/**/ 0xED4C6EF0, 0x3FC865BF, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x8F0A11A4, 0x3F67186C, -/**/ 0x00000000, 0x3FC8C000, -/**/ 0x5CD5E248, 0x3FF04EC9, -/**/ 0x5BB94403, 0x3FBA34B2, -/**/ 0xCF5CA73A, 0x3FC9385D, -/**/ 0xF01AFDBE, 0x3FB5BD4D, -/**/ 0x4D61A7A9, 0x3FBDB185, -/**/ 0x00BD47CF, 0x3FB4FDDA, -/**/ 0x727E8B64, 0xBC9D1119, -/**/ 0x37077E20, 0x3FC8E829, -/**/ 0x00000000, 0x3FF04000, -/**/ 0xABC490CB, 0x3F6D92B9, -/**/ 0x00000000, 0x3FC94000, -/**/ 0x6DBD2A10, 0x3FF05219, -/**/ 0x2894CAA1, 0x3FBACC88, -/**/ 0xB6427516, 0x3FC9646D, -/**/ 0xA3A864D7, 0x3FB65303, -/**/ 0x0E3CF3D4, 0x3FBE318A, -/**/ 0x78CDA678, 0x3FB5AF38, -/**/ 0xDA9D51DF, 0x3CA3841D, -/**/ 0xB58AA660, 0x3FC96AAC, -/**/ 0x00000000, 0x3FF04000, -/**/ 0xBD2A1052, 0x3F72196D, -/**/ 0x00000000, 0x3FC9C000, -/**/ 0x8A099990, 0x3FF0557C, -/**/ 0xDC268965, 0x3FBB6569, -/**/ 0x8F9FBA21, 0x3FC991AB, -/**/ 0xEAED1E85, 0x3FB6EB43, -/**/ 0x115C4C63, 0x3FBEB5C6, -/**/ 0x47F9AEFA, 0x3FB665A3, -/**/ 0x03AB3673, 0xBCA1F8FD, -/**/ 0x00AC4A60, 0x3FC9ED4B, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x0999905B, 0x3F757C8A, -/**/ 0x00000000, 0x3FCA4000, -/**/ 0xD3A9E674, 0x3FF058F2, -/**/ 0x99873832, 0x3FBBFF5E, -/**/ 0x85E31CE9, 0x3FC9C01C, -/**/ 0x26E09FF2, 0x3FB78624, -/**/ 0x3CF0885C, 0x3FBF3E58, -/**/ 0xD2986239, 0x3FB7214E, -/**/ 0x3E594694, 0x3C97E3E5, -/**/ 0xB14EB5D0, 0x3FCA7004, -/**/ 0x00000000, 0x3FF04000, -/**/ 0xA9E6746B, 0x3F78F2D3, -/**/ 0x00000000, 0x3FCAC000, -/**/ 0x6D731ECB, 0x3FF05C7C, -/**/ 0xA34FA4B3, 0x3FBC9A6D, -/**/ 0xEED9C253, 0x3FC9EFC5, -/**/ 0x5614FAEB, 0x3FB823BA, -/**/ 0xB7CE698F, 0x3FBFCB60, -/**/ 0x99F3292F, 0x3FB7E271, -/**/ 0x068D709C, 0xBC9842C6, -/**/ 0x61674110, 0x3FCAF2DA, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x731ECAE2, 0x3F7C7C6D, -/**/ 0x00000000, 0x3FCB4000, -/**/ 0x7B24A973, 0x3FF06019, -/**/ 0x5CA0A798, 0x3FBD369E, -/**/ 0x4CF0DB64, 0x3FCA20AD, -/**/ 0x1B1A3F31, 0x3FB8C41D, -/**/ 0x7B35E049, 0x3FC02E80, -/**/ 0x56FB8A97, 0x3FB8A944, -/**/ 0xD337B37C, 0xBCACBF9C, -/**/ 0xAC059370, 0x3FCB75CC, -/**/ 0x00000000, 0x3FF08000, -/**/ 0xDB568D78, 0xBF7FE684, -/**/ 0x00000000, 0x3FCBC000, -/**/ 0x216C6801, 0x3FF063CA, -/**/ 0x4A32C9FD, 0x3FBDD3F8, -/**/ 0x50843BC9, 0x3FCA52D8, -/**/ 0xC324648A, 0x3FB96763, -/**/ 0xE4407899, 0x3FC079AD, -/**/ 0x1663A5DC, 0x3FB97602, -/**/ 0xC637289D, 0xBCA3ADC3, -/**/ 0x2D5B06A0, 0x3FCBF8DC, -/**/ 0x00000000, 0x3FF08000, -/**/ 0x9397FEA6, 0xBF7C35DE, -/**/ 0x00000000, 0x3FCC4000, -/**/ 0x85EAFB1F, 0x3FF0678E, -/**/ 0x136DEAC6, 0x3FBE7283, -/**/ 0xD93A817D, 0x3FCA864C, -/**/ 0x4CF7089B, 0x3FBA0DA6, -/**/ 0xB3ABB322, 0x3FC0C74A, -/**/ 0x562E6E1E, 0x3FBA48E8, -/**/ 0x7EB8FFF8, 0xBC951E3E, -/**/ 0x82C22B80, 0x3FCC7C09, -/**/ 0x00000000, 0x3FF08000, -/**/ 0x1504E0D3, 0xBF78717A, -/**/ 0x00000000, 0x3FCCC000, -/**/ 0xCF382A59, 0x3FF06B66, -/**/ 0x838936FB, 0x3FBF1246, -/**/ 0xF76F5C94, 0x3FCABB10, -/**/ 0x701A77AE, 0x3FBAB6FD, -/**/ 0xC26702C6, 0x3FC11769, -/**/ 0x24CDF38E, 0x3FBB2237, -/**/ 0xE28307A9, 0xBC8DB69A, -/**/ 0x4AC67190, 0x3FCCFF55, -/**/ 0x00000000, 0x3FF08000, -/**/ 0xC7D5A6B9, 0xBF749930, -/**/ 0x00000000, 0x3FCD4000, -/**/ 0x24E7707F, 0x3FF06F53, -/**/ 0x8AB3CBB2, 0x3FBFB34A, -/**/ 0xEDAC8D74, 0x3FCAF12A, -/**/ 0xA45DA614, 0x3FBB6382, -/**/ 0xAD8E9F44, 0x3FC16A1E, -/**/ 0x41E7749D, 0x3FBC0231, -/**/ 0x22DC16A2, 0x3C76CA27, -/**/ 0x252BF240, 0x3FCD82C0, -/**/ 0x00000000, 0x3FF08000, -/**/ 0x188F814B, 0xBF70ACDB, -/**/ 0x00000000, 0x3FCDC000, -/**/ 0xAF8CADA0, 0x3FF07353, -/**/ 0x9FA32DC9, 0x3FC02ACB, -/**/ 0x32323718, 0x3FCB28A1, -/**/ 0x29A8F15E, 0x3FBC1350, -/**/ 0xDEB270E1, 0x3FC1BF7D, -/**/ 0x40D67463, 0x3FBCE91C, -/**/ 0x104BAA08, 0x3CA6E976, -/**/ 0xB2F76140, 0x3FCE064A, -/**/ 0x00000000, 0x3FF08000, -/**/ 0xE6A4BFC9, 0xBF6958A0, -/**/ 0x00000000, 0x3FCE4000, -/**/ 0x98C0FFD9, 0x3FF07768, -/**/ 0x6F7F1AF0, 0x3FC07C9A, -/**/ 0x708F2AFB, 0x3FCB617A, -/**/ 0x1025B50C, 0x3FBCC681, -/**/ 0x9487453A, 0x3FC2179C, -/**/ 0xAD09B3AB, 0x3FBDD740, -/**/ 0x189038C0, 0xBC8D32DB, -/**/ 0x96762300, 0x3FCE89F5, -/**/ 0x00000000, 0x3FF08000, -/**/ 0x7E004D50, 0xBF612ECE, -/**/ 0x00000000, 0x3FCEC000, -/**/ 0x0B27C417, 0x3FF07B92, -/**/ 0xE821087A, 0x3FC0CF15, -/**/ 0x8B49DC8C, 0x3FCB9BBD, -/**/ 0x40BEF5C2, 0x3FBD7D31, -/**/ 0xEC080575, 0x3FC27290, -/**/ 0x3056A6A9, 0x3FBECCEA, -/**/ 0x0C9B27A2, 0x3C9DE506, -/**/ 0x73468A50, 0x3FCF0DC1, -/**/ 0x00000000, 0x3FF08000, -/**/ 0x60EFA34D, 0xBF51B7D3, -/**/ 0x00000000, 0x3FCF4000, -/**/ 0x3273C018, 0x3FF07FD0, -/**/ 0x51B87F08, 0x3FC12242, -/**/ 0x9D9AB2BC, 0x3FCBD771, -/**/ 0x85FFA125, 0x3FBE377D, -/**/ 0xEA0CFE55, 0x3FC2D071, -/**/ 0xBB61DDD3, 0x3FBFCA67, -/**/ 0x88A645E7, 0xBCA25383, -/**/ 0xEE603F40, 0x3FCF91AE, -/**/ 0x00000000, 0x3FF08000, -/**/ 0x1FF422B6, 0xBF07E6C6, -/**/ 0x00000000, 0x3FCFC000, -/**/ 0x3B6C76F2, 0x3FF08423, -/**/ 0x0A1DF897, 0x3FC17624, -/**/ 0xFD38779D, 0x3FCC149D, -/**/ 0x95531ECD, 0x3FBEF583, -/**/ 0x855FA966, 0x3FC33157, -/**/ 0xD81E6BAA, 0x3FC06805, -/**/ 0x1B47FAEC, 0x3C86827E, -/**/ 0x570E6798, 0x3FD00ADF, -/**/ 0x00000000, 0x3FF08000, -/**/ 0xB1DBC656, 0x3F508CED, -/**/ 0x00000000, 0x3FD02000, -/**/ 0x53F3A97B, 0x3FF0888B, -/**/ 0x858525D6, 0x3FC1CABF, -/**/ 0x3C37AF90, 0x3FCC534A, -/**/ 0x18AD312A, 0x3FBFB762, -/**/ 0xB151CAAD, 0x3FC3955A, -/**/ 0x07ADE82D, 0x3FC0EF16, -/**/ 0xFCDE8746, 0x3CAEEF44, -/**/ 0xAD203480, 0x3FD04CF8, -/**/ 0x00000000, 0x3FF08000, -/**/ 0xE752F5A1, 0x3F6116A7, -/**/ 0x00000000, 0x3FD06000, -/**/ 0xAB0B03F8, 0x3FF08D08, -/**/ 0x4F34EEE8, 0x3FC22019, -/**/ 0x2AFDABDE, 0x3FCC937E, -/**/ 0x5C4F35BA, 0x3FC03E9C, -/**/ 0x68DF21A6, 0x3FC3FC95, -/**/ 0x53843C52, 0x3FC17A91, -/**/ 0xC2BB835A, 0xBC9D6F54, -/**/ 0xCE0162B8, 0x3FD08F23, -/**/ 0x00000000, 0x3FF08000, -/**/ 0x1607EF23, 0x3F6A1156, -/**/ 0x00000000, 0x3FD0A000, -/**/ 0x70D9FA87, 0x3FF0919B, -/**/ 0x0A456C09, 0x3FC27636, -/**/ 0xDA483778, 0x3FCCD541, -/**/ 0x136D6630, 0x3FC0A394, -/**/ 0xBA615E9C, 0x3FC46722, -/**/ 0xA2BC6F73, 0x3FC20AA6, -/**/ 0x7F1D9D86, 0x3CA9D006, -/**/ 0x0F0C1EC8, 0x3FD0D161, -/**/ 0x00000000, 0x3FF08000, -/**/ 0xD9FA8688, 0x3F719B70, -/**/ 0x00000000, 0x3FD0E000, -/**/ 0xD6B3D5D1, 0x3FF09643, -/**/ 0x72641546, 0x3FC2CD1A, -/**/ 0x9D4AC7EC, 0x3FCD189D, -/**/ 0x149C2E66, 0x3FC10AA9, -/**/ 0xD3DE8741, 0x3FC4D51E, -/**/ 0xF6DA4768, 0x3FC29F86, -/**/ 0x828C2A81, 0x3CAEA900, -/**/ 0xC65D88C8, 0x3FD113B0, -/**/ 0x00000000, 0x3FF08000, -/**/ 0xB3D5D119, 0x3F7643D6, -/**/ 0x00000000, 0x3FD12000, -/**/ 0x0F1DF195, 0x3FF09B02, -/**/ 0x5C9E6B3F, 0x3FC324CB, -/**/ 0x0BE228B7, 0x3FCD5D9A, -/**/ 0xD29602B0, 0x3FC173EC, -/**/ 0x0FFA7799, 0x3FC546A7, -/**/ 0x87BA569F, 0x3FC33965, -/**/ 0x9956F2C3, 0xBCAE3258, -/**/ 0x4ADA6FF0, 0x3FD15613, -/**/ 0x00000000, 0x3FF08000, -/**/ 0x1DF1952F, 0x3F7B020F, -/**/ 0x00000000, 0x3FD16000, -/**/ 0x4DD62EB0, 0x3FF09FD6, -/**/ 0xB8335DE5, 0x3FC37D4D, -/**/ 0x04DFA3F1, 0x3FCDA440, -/**/ 0x55E59412, 0x3FC1DF71, -/**/ 0x0394B72E, 0x3FC5BBDA, -/**/ 0xE1177398, 0x3FC3D877, -/**/ 0x3B5720A7, 0x3CA8AC88, -/**/ 0xF43427A8, 0x3FD19888, -/**/ 0x00000000, 0x3FF08000, -/**/ 0xD62EAF85, 0x3F7FD64D, -/**/ 0x00000000, 0x3FD1A000, -/**/ 0xC7D99A5F, 0x3FF0A4C0, -/**/ 0x8F6BB942, 0x3FC3D6A6, -/**/ 0xB06CB8A9, 0x3FCDEC98, -/**/ 0x432C74B1, 0x3FC24D49, -/**/ 0x8C1C6EC6, 0x3FC634D7, -/**/ 0x01BF2560, 0x3FC47CF6, -/**/ 0x476E25C7, 0x3CA3EDE7, -/**/ 0x1AED7720, 0x3FD1DB12, -/**/ 0x00000000, 0x3FF0C000, -/**/ 0x2665A126, 0xBF7B3F38, -/**/ 0x00000000, 0x3FD1E000, -/**/ 0xB36B4C8B, 0x3FF0A9C1, -/**/ 0x0879E39B, 0x3FC430DB, -/**/ 0x82887D8B, 0x3FCE36AD, -/**/ 0xE1B33C79, 0x3FC2BD87, -/**/ 0xDEA4E95E, 0x3FC6B1C0, -/**/ 0x7C90504A, 0x3FC5271A, -/**/ 0x8A6EBD08, 0x3CAAFAD9, -/**/ 0x185FA360, 0x3FD21DAF, -/**/ 0x00000000, 0x3FF0C000, -/**/ 0x94B3751C, 0xBF763E4C, -/**/ 0x00000000, 0x3FD22000, -/**/ 0x481B7EED, 0x3FF0AED9, -/**/ 0x66613BB3, 0x3FC48BF0, -/**/ 0x3D9FDD8F, 0x3FCE8288, -/**/ 0x22470BF2, 0x3FC33041, -/**/ 0x97C5B476, 0x3FC732B8, -/**/ 0x9B614F73, 0x3FC5D722, -/**/ 0x759745C8, 0x3CA96B82, -/**/ 0x46BF95B8, 0x3FD26060, -/**/ 0x00000000, 0x3FF0C000, -/**/ 0xE48112DC, 0xBF7126B7, -/**/ 0x00000000, 0x3FD26000, -/**/ 0xBECEDF0E, 0x3FF0B407, -/**/ 0x09E5699A, 0x3FC4E7EC, -/**/ 0xF541EC2D, 0x3FCED032, -/**/ 0xA6688484, 0x3FC3A589, -/**/ 0xCC5228BD, 0x3FC7B7E2, -/**/ 0x83ECAD1F, 0x3FC68D4E, -/**/ 0x7CB79363, 0x3CA98586, -/**/ 0x01231EC8, 0x3FD2A326, -/**/ 0x00000000, 0x3FF0C000, -/**/ 0x6241E449, 0xBF67F082, -/**/ 0x00000000, 0x3FD2A000, -/**/ 0x51C61D1C, 0x3FF0B94D, -/**/ 0x7281F837, 0x3FC544D3, -/**/ 0x10F19F89, 0x3FCF1FB8, -/**/ 0xC7D08A44, 0x3FC41D76, -/**/ 0x1AF4E5E6, 0x3FC84165, -/**/ 0x5EE5D838, 0x3FC749E1, -/**/ 0xA1F9A890, 0x3C8A2A36, -/**/ 0xA3865760, 0x3FD2E600, -/**/ 0x00000000, 0x3FF0C000, -/**/ 0xE78B8E2F, 0xBF5ACAB8, -/**/ 0x00000000, 0x3FD2E000, -/**/ 0x3CA5B9C1, 0x3FF0BEAA, -/**/ 0x3F6A91D3, 0x3FC5A2AC, -/**/ 0x4F1650DB, 0x3FCF7122, -/**/ 0xA04F63E7, 0x3FC4981E, -/**/ 0xBEBC9B64, 0x3FC8CF66, -/**/ 0x81598BF7, 0x3FC80D21, -/**/ 0x8E0FD320, 0xBC984143, -/**/ 0x8AD12008, 0x3FD328F0, -/**/ 0x00000000, 0x3FF0C000, -/**/ 0xA463F3FD, 0xBF355C35, -/**/ 0x00000000, 0x3FD32000, -/**/ 0xBC7E151A, 0x3FF0C41E, -/**/ 0x30943E19, 0x3FC6017C, -/**/ 0xC80C760D, 0x3FCFC47C, -/**/ 0x120B129D, 0x3FC51598, -/**/ 0xA2A855B5, 0x3FC96210, -/**/ 0x9880230D, 0x3FC8D758, -/**/ 0xBF178596, 0xBCA4D129, -/**/ 0x14DCC050, 0x3FD36BF6, -/**/ 0x00000000, 0x3FF0C000, -/**/ 0xF854661E, 0x3F507AF1, -/**/ 0x00000000, 0x3FD36000, -/**/ 0x0FD3C135, 0x3FF0C9AB, -/**/ 0x27C80482, 0x3FC66149, -/**/ 0x78AC0DDD, 0x3FD00CE9, -/**/ 0xD02204B1, 0x3FC595FA, -/**/ 0x7642750D, 0x3FC9F98D, -/**/ 0xD82AC48A, 0x3FC9A8D3, -/**/ 0x289B3951, 0x3C977587, -/**/ 0xA079A6D8, 0x3FD3AF11, -/**/ 0x00000000, 0x3FF0C000, -/**/ 0xA7826A0D, 0x3F63561F, -/**/ 0x00000000, 0x3FD3A000, -/**/ 0x76A81A69, 0x3FF0CF4F, -/**/ 0x29BF5ACD, 0x3FC6C219, -/**/ 0x507D5DD4, 0x3FD03898, -/**/ 0x67B79439, 0x3FC6195F, -/**/ 0xC35A709F, 0x3FCA9609, -/**/ 0x2BF7455C, 0x3FCA81E4, -/**/ 0xF424551E, 0x3CA03304, -/**/ 0x8D754B40, 0x3FD3F243, -/**/ 0x00000000, 0x3FF0C000, -/**/ 0x5034D2A8, 0x3F6E9EED, -/**/ 0x00000000, 0x3FD3E000, -/**/ 0x3282280D, 0x3FF0D50C, -/**/ 0x5F4ACC23, 0x3FC723F2, -/**/ 0x08771131, 0x3FD06551, -/**/ 0x4970163E, 0x3FC69FDF, -/**/ 0x04EE9A0A, 0x3FCB37B4, -/**/ 0x6B79BC18, 0x3FCB62DE, -/**/ 0x02A2F456, 0x3CAECF25, -/**/ 0x3CA032E0, 0x3FD4358C, -/**/ 0x00000000, 0x3FF0C000, -/**/ 0x82280D28, 0x3F750C32, -/**/ 0x00000000, 0x3FD42000, -/**/ 0x8677C82D, 0x3FF0DAE1, -/**/ 0x16834ABE, 0x3FC786DB, -/**/ 0xF1631731, 0x3FD09319, -/**/ 0xD36297AF, 0x3FC72994, -/**/ 0xBF583888, 0x3FCBDEBC, -/**/ 0x918E2AE6, 0x3FCC4C1B, -/**/ 0xF34A155C, 0x3CA92F70, -/**/ 0x0FD419C8, 0x3FD478EC, -/**/ 0x00000000, 0x3FF0C000, -/**/ 0x77C82D53, 0x3F7AE186, -/**/ 0x00000000, 0x3FD46000, -/**/ 0xB73728F8, 0x3FF0E0CF, -/**/ 0xC406A36A, 0x3FC7EAD9, -/**/ 0x91BDA616, 0x3FD0C1F9, -/**/ 0x5B86C42B, 0x3FC7B69B, -/**/ 0x99CD8C9F, 0x3FCC8B56, -/**/ 0xF7084936, 0x3FCD3DF8, -/**/ 0x54942387, 0xBC923B74, -/**/ 0x69FA40E8, 0x3FD4BC63, -/**/ 0x00000000, 0x3FF10000, -/**/ 0xC8D707BB, 0xBF7F3048, -/**/ 0x00000000, 0x3FD4A000, -/**/ 0x0B1092B8, 0x3FF0E6D7, -/**/ 0x043F9011, 0x3FC84FF5, -/**/ 0xA7AFD6EB, 0x3FD0F1F6, -/**/ 0x3AA5D7B9, 0x3FC8470F, -/**/ 0x794E9CFD, 0x3FCD3DB6, -/**/ 0x90FB69FD, 0x3FCE38D8, -/**/ 0xC2327DC5, 0x3C9CFA2D, -/**/ 0xAF11E2C0, 0x3FD4FFF2, -/**/ 0x00000000, 0x3FF10000, -/**/ 0xEF6D4848, 0xBF7928F4, -/**/ 0x00000000, 0x3FD4E000, -/**/ 0xCA008550, 0x3FF0ECF7, -/**/ 0x9CB9ECA7, 0x3FC8B633, -/**/ 0x2B20AC3D, 0x3FD12318, -/**/ 0xD7D5E860, 0x3FC8DB0D, -/**/ 0x9D1315AF, 0x3FCDF613, -/**/ 0x32D8BC6F, 0x3FCF3D21, -/**/ 0x92E48EEE, 0x3C9C6A36, -/**/ 0x4436D008, 0x3FD5439A, -/**/ 0x00000000, 0x3FF10000, -/**/ 0xFF7AAF92, 0xBF730835, -/**/ 0x00000000, 0x3FD52000, -/**/ 0x3DBA2C62, 0x3FF0F332, -/**/ 0x7D83983C, 0x3FC91D9C, -/**/ 0x4FDDA02E, 0x3FD15565, -/**/ 0xB48747C7, 0x3FC972B5, -/**/ 0xBC9105F9, 0x3FCEB4A7, -/**/ 0x6A535ECF, 0x3FD0259F, -/**/ 0xF6EA55C1, 0x3C87EB36, -/**/ 0x8FA83538, 0x3FD5875A, -/**/ 0x00000000, 0x3FF10000, -/**/ 0x8BA73C6A, 0xBF699B84, -/**/ 0x00000000, 0x3FD56000, -/**/ 0xB1B22D42, 0x3FF0F986, -/**/ 0xC29A92ED, 0x3FC98636, -/**/ 0x87DBE62D, 0x3FD188E5, -/**/ 0x792C37EB, 0x3FCA0E26, -/**/ 0x2735E8CD, 0x3FCF79AF, -/**/ 0x6ECCD4C0, 0x3FD0B1D1, -/**/ 0xBEAE0510, 0x3C9502B5, -/**/ 0xF8CF8AC0, 0x3FD5CB33, -/**/ 0x00000000, 0x3FF10000, -/**/ 0x374AF74C, 0xBF59E539, -/**/ 0x00000000, 0x3FD5A000, -/**/ 0x7329D23A, 0x3FF0FFF5, -/**/ 0xB568F082, 0x3FC9F009, -/**/ 0x85939DB2, 0x3FD1BDA0, -/**/ 0x0283B18A, 0x3FCAAD81, -/**/ 0x72F69148, 0x3FD022B4, -/**/ 0x39AD0B79, 0x3FD14362, -/**/ 0x80828B86, 0xBCAD7968, -/**/ 0xE847B130, 0x3FD60F26, -/**/ 0x00000000, 0x3FF10000, -/**/ 0x5B8BC081, 0xBEE519AC, -/**/ 0x00000000, 0x3FD5E000, -/**/ 0xD13A9687, 0x3FF1067E, -/**/ 0xCE4F3F61, 0x3FCA5B1C, -/**/ 0x3E764545, 0x3FD1F39E, -/**/ 0x6F90871B, 0x3FCB50E7, -/**/ 0x6F487F97, 0x3FD08C0B, -/**/ 0x67265C20, 0x3FD1DA90, -/**/ 0x995723AD, 0x3CAE5B02, -/**/ 0xC7E43AA0, 0x3FD65333, -/**/ 0x00000000, 0x3FF10000, -/**/ 0xEA5A1D64, 0x3F59FB44, -/**/ 0x00000000, 0x3FD62000, -/**/ 0x1CE216D9, 0x3FF10D23, -/**/ 0xB63E0B53, 0x3FCAC777, -/**/ 0xED81D055, 0x3FD22AE6, -/**/ 0x3046C5AC, 0x3FCBF87D, -/**/ 0xFCB29FE4, 0x3FD0F8FE, -/**/ 0xC99A404E, 0x3FD2779D, -/**/ 0xC3202AE8, 0xBCA2AF1E, -/**/ 0x02B8E378, 0x3FD6975B, -/**/ 0x00000000, 0x3FF10000, -/**/ 0xC42DB2AB, 0x3F6A4639, -/**/ 0x00000000, 0x3FD66000, -/**/ 0xA90E6A24, 0x3FF113E2, -/**/ 0x485F2C6B, 0x3FCB3522, -/**/ 0x15F1D6CC, 0x3FD26383, -/**/ 0x14F9D555, 0x3FCCA467, -/**/ 0x245E397E, 0x3FD169B3, -/**/ 0x99479CF7, 0x3FD31ACF, -/**/ 0x8992C228, 0xBC730D3F, -/**/ 0x05213B28, 0x3FD6DB9D, -/**/ 0x00000000, 0x3FF10000, -/**/ 0x0E6A2469, 0x3F73E2A9, -/**/ 0x00000000, 0x3FD6A000, -/**/ 0xCAAAE6D5, 0x3FF11ABD, -/**/ 0x93CF9B23, 0x3FCBA424, -/**/ 0x86106AD4, 0x3FD29D7B, -/**/ 0x5E96870B, 0x3FCD54CB, -/**/ 0x9975D46D, 0x3FD1DE4D, -/**/ 0xA709F8A4, 0x3FD3C46E, -/**/ 0x457B6F5C, 0xBC9CB630, -/**/ 0x3CC87FC8, 0x3FD71FFA, -/**/ 0x00000000, 0x3FF10000, -/**/ 0xAAE6D53D, 0x3F7ABDCA, -/**/ 0x00000000, 0x3FD6E000, -/**/ 0xD8AD589E, 0x3FF121B4, -/**/ 0xDD6A8C89, 0x3FCC1486, -/**/ 0x5A283891, 0x3FD2D8D9, -/**/ 0xCFB4F5A1, 0x3FCE09D1, -/**/ 0xCF594BB6, 0x3FD256F5, -/**/ 0x92614C29, 0x3FD474C7, -/**/ 0x533051E9, 0xBC88FB31, -/**/ 0x18B1AD28, 0x3FD76473, -/**/ 0x00000000, 0x3FF14000, -/**/ 0x52A761D6, 0xBF7E4B27, -/**/ 0x00000000, 0x3FD72000, -/**/ 0x2C23AB4A, 0x3FF128C8, -/**/ 0xA1A6A356, 0x3FCC8651, -/**/ 0xFF99ABE3, 0x3FD315A5, -/**/ 0xBE8EE4C2, 0x3FCEC3A3, -/**/ 0x11207D5D, 0x3FD2D3D5, -/**/ 0x02FE6DF8, 0x3FD52C2B, -/**/ 0xFE4D8DF3, 0xBCA3F304, -/**/ 0x093FC1F0, 0x3FD7A908, -/**/ 0x00000000, 0x3FF14000, -/**/ 0xDC54B622, 0xBF7737D3, -/**/ 0x00000000, 0x3FD76000, -/**/ 0x20420F33, 0x3FF12FF8, -/**/ 0x96860D89, 0x3FCCF98D, -/**/ 0x3814F292, 0x3FD353EB, -/**/ 0x27E81BF7, 0x3FCF826C, -/**/ 0x9A827352, 0x3FD35516, -/**/ 0xE614C6DF, 0x3FD5EAED, -/**/ 0x36C1700C, 0x3C80AEDB, -/**/ 0x803E3C28, 0x3FD7EDB9, -/**/ 0x00000000, 0x3FF14000, -/**/ 0xBDF0CCC6, 0xBF7007DF, -/**/ 0x00000000, 0x3FD7A000, -/**/ 0x12719C3A, 0x3FF13745, -/**/ 0xAD9A717F, 0x3FCD6E43, -/**/ 0x1CFACD12, 0x3FD393B3, -/**/ 0xE17B8F05, 0x3FD0232B, -/**/ 0xB23873BC, 0x3FD3DAE7, -/**/ 0xAFB712E5, 0x3FD6B169, -/**/ 0x0BC74599, 0x3C994C0C, -/**/ 0xF0E9CF80, 0x3FD83287, -/**/ 0x00000000, 0x3FF14000, -/**/ 0x1CC78CA5, 0xBF6175DB, -/**/ 0x00000000, 0x3FD7E000, -/**/ 0x625F7844, 0x3FF13EAF, -/**/ 0x161D9978, 0x3FCDE47D, -/**/ 0x22E63DCA, 0x3FD3D508, -/**/ 0x8B2EC7EB, 0x3FD087CA, -/**/ 0xC5F619C8, 0x3FD46577, -/**/ 0xA08A73DE, 0x3FD77FFC, -/**/ 0x6E7B547F, 0x3CA1DBDE, -/**/ 0xCFF956F8, 0x3FD87773, -/**/ 0x00000000, 0x3FF14000, -/**/ 0x087BC752, 0xBF3509DA, -/**/ 0x00000000, 0x3FD82000, -/**/ 0x720C869D, 0x3FF14637, -/**/ 0x3F1FD940, 0x3FCE5C43, -/**/ 0x1D614654, 0x3FD417F5, -/**/ 0x472052ED, 0x3FD0EF2A, -/**/ 0x88116DA6, 0x3FD4F4F8, -/**/ 0x102117B6, 0x3FD8570A, -/**/ 0x214A7328, 0xBCAB6E89, -/**/ 0x93A70458, 0x3FD8BC7D, -/**/ 0x00000000, 0x3FF14000, -/**/ 0x321A7479, 0x3F58DDC8, -/**/ 0x00000000, 0x3FD86000, -/**/ 0xA5DDA5C4, 0x3FF14DDD, -/**/ 0xD9CD3739, 0x3FCED59F, -/**/ 0x42C70412, 0x3FD45C85, -/**/ 0x49C983A8, 0x3FD15964, -/**/ 0x0EF7ED0B, 0x3FD5899E, -/**/ 0xBC543499, 0x3FD936FA, -/**/ 0x7B29F22E, 0x3CAFF50D, -/**/ 0xB3B9CF50, 0x3FD901A5, -/**/ 0x00000000, 0x3FF14000, -/**/ 0xBB4B87E0, 0x3F6BBB4B, -/**/ 0x00000000, 0x3FD8A000, -/**/ 0x64AC8172, 0x3FF155A2, -/**/ 0xDBCA7047, 0x3FCF509C, -/**/ 0x3055A16F, 0x3FD4A2C4, -/**/ 0xD25160C7, 0x3FD1C692, -/**/ 0xF68F9906, 0x3FD6239E, -/**/ 0x1DFC2EE2, 0x3FDA203D, -/**/ 0x671EF39F, 0x3CAD2019, -/**/ 0xA98F2718, 0x3FD946EC, -/**/ 0x00000000, 0x3FF14000, -/**/ 0xAC8171A9, 0x3F75A264, -/**/ 0x00000000, 0x3FD8E000, -/**/ 0x17D8FF02, 0x3FF15D86, -/**/ 0x81AAFD5E, 0x3FCFCD44, -/**/ 0xEE72B776, 0x3FD4EABD, -/**/ 0x377F943F, 0x3FD236D1, -/**/ 0x83A56DB7, 0x3FD6C334, -/**/ 0xC36D6C50, 0x3FDB1345, -/**/ 0x761537BB, 0xBC7841E5, -/**/ 0xF024E808, 0x3FD98C52, -/**/ 0x00000000, 0x3FF14000, -/**/ 0xD8FF01DE, 0x3F7D8617, -/**/ 0x00000000, 0x3FD92000, -/**/ 0x2B5B4A9A, 0x3FF16589, -/**/ 0xA8C0A8C6, 0x3FD025D0, -/**/ 0xF524E4B6, 0x3FD5347E, -/**/ 0xF565EDBD, 0x3FD2AA3B, -/**/ 0xC98D2842, 0x3FD7689A, -/**/ 0xB128B4DD, 0x3FDC108F, -/**/ 0x4452A669, 0xBC8A5EEB, -/**/ 0x04239878, 0x3FD9D1D9, -/**/ 0x00000000, 0x3FF18000, -/**/ 0xA4B56661, 0xBF7A76D4, -/**/ 0x00000000, 0x3FD96000, -/**/ 0x0DD68BC8, 0x3FF16DAC, -/**/ 0x0EC54C3A, 0x3FD065DF, -/**/ 0x30C58A12, 0x3FD58014, -/**/ 0xBBCBCCEF, 0x3FD320F0, -/**/ 0xD218F380, 0x3FD81410, -/**/ 0xC9371D29, 0x3FDD189C, -/**/ 0x1D6E6EC7, 0x3C58C3C1, -/**/ 0x63E8EF18, 0x3FDA177F, -/**/ 0x00000000, 0x3FF18000, -/**/ 0x29743866, 0xBF7253F2, -/**/ 0x00000000, 0x3FD9A000, -/**/ 0x30AC48A8, 0x3FF175EF, -/**/ 0x037BA7C0, 0x3FD0A6D3, -/**/ 0x06EDCD18, 0x3FD5CD8B, -/**/ 0x7D679188, 0x3FD39B0E, -/**/ 0xC8128143, 0x3FD8C5D8, -/**/ 0x39B3613A, 0x3FDE2BF6, -/**/ 0xC70C9C76, 0xBC874080, -/**/ 0x8F92A560, 0x3FDA5D46, -/**/ 0x00000000, 0x3FF18000, -/**/ 0xA76EB06E, 0xBF64219E, -/**/ 0x00000000, 0x3FD9E000, -/**/ 0x08107EEF, 0x3FF17E53, -/**/ 0x40691386, 0x3FD0E8B2, -/**/ 0x5BA2319A, 0x3FD61CF1, -/**/ 0x7FF30656, 0x3FD418B5, -/**/ 0x24624146, 0x3FD97E38, -/**/ 0xF30D6589, 0x3FDF4B2C, -/**/ 0x74DD0C9B, 0xBC8D4AD9, -/**/ 0x090998F8, 0x3FDAA32F, -/**/ 0x00000000, 0x3FF18000, -/**/ 0xF81116BC, 0xBF3ACF7E, -/**/ 0x00000000, 0x3FDA2000, -/**/ 0x0B1E7A9D, 0x3FF186D8, -/**/ 0xA98356F0, 0x3FD12B82, -/**/ 0x96C051D8, 0x3FD66E55, -/**/ 0x6D28A49D, 0x3FD49A07, -/**/ 0xDE14D616, 0x3FDA3D77, -/**/ 0x13502F53, 0x3FE03B6D, -/**/ 0x4AD59707, 0x3CA51700, -/**/ 0x540D3F08, 0x3FDAE939, -/**/ 0x00000000, 0x3FF18000, -/**/ 0x79EA752F, 0x3F5B602C, -/**/ 0x00000000, 0x3FDA6000, -/**/ 0xB3EE7285, 0x3FF18F7E, -/**/ 0x4EC4AF40, 0x3FD16F4A, -/**/ 0xA9B275FD, 0x3FD6C1C6, -/**/ 0x64B886B9, 0x3FD51F27, -/**/ 0x9D72A144, 0x3FDB03E4, -/**/ 0xE7207DD5, 0x3FE0D7CF, -/**/ 0x8E77D1B2, 0xBCAACE1E, -/**/ 0xF63F6C78, 0x3FDB2F65, -/**/ 0x00000000, 0x3FF18000, -/**/ 0xDCE509F5, 0x3F6EFD67, -/**/ 0x00000000, 0x3FDAA000, -/**/ 0x7FABF325, 0x3FF19847, -/**/ 0x6DD15EDB, 0x3FD1B40F, -/**/ 0x156D090D, 0x3FD71754, -/**/ 0x0F44EE42, 0x3FD5A83A, -/**/ 0xF26149CC, 0x3FDBD1CE, -/**/ 0x9EBB7D53, 0x3FE17B14, -/**/ 0x054C177A, 0x3CA18867, -/**/ 0x773075F8, 0x3FDB75B5, -/**/ 0x00000000, 0x3FF18000, -/**/ 0xABF3257B, 0x3F78477F, -/**/ 0x00000000, 0x3FDAE000, -/**/ 0xEEAD20E6, 0x3FF1A132, -/**/ 0x73AFA8F4, 0x3FD1F9D8, -/**/ 0xF0BA2B44, 0x3FD76F0D, -/**/ 0xB2776412, 0x3FD63565, -/**/ 0x8E4B8181, 0x3FDCA78B, -/**/ 0xDE92725A, 0x3FE22595, -/**/ 0x225EE470, 0xBCABDA45, -/**/ 0x606BABE0, 0x3FDBBC28, -/**/ 0x00000000, 0x3FF1C000, -/**/ 0x52DF1A7E, 0xBF7ECD11, -/**/ 0x00000000, 0x3FDB2000, -/**/ 0x848ADB16, 0x3FF1AA41, -/**/ 0xFE932ABB, 0x3FD240AB, -/**/ 0xEED7E85D, 0x3FD7C904, -/**/ 0x4640B1B3, 0x3FD6C6D2, -/**/ 0x81D01020, 0x3FDD8573, -/**/ 0x9938B939, 0x3FE2D7B3, -/**/ 0x36D76E02, 0x3CA12ECB, -/**/ 0x3D843430, 0x3FDC02BF, -/**/ 0x00000000, 0x3FF1C000, -/**/ 0x7524EA70, 0xBF75BE7B, -/**/ 0x00000000, 0x3FDB6000, -/**/ 0xC839C9AC, 0x3FF1B373, -/**/ 0xDFBC912D, 0x3FD28890, -/**/ 0x666DE3CA, 0x3FD8254A, -/**/ 0x8B57457C, 0x3FD75CA9, -/**/ 0x7E7E55FE, 0x3FDE6BE4, -/**/ 0x68EC3777, 0x3FE391D3, -/**/ 0x4D8A80A5, 0xBC9F7EFE, -/**/ 0x9C2247A0, 0x3FDC497A, -/**/ 0x00000000, 0x3FF1C000, -/**/ 0x8C6CA8A7, 0xBF69186F, -/**/ 0x00000000, 0x3FDBA000, -/**/ 0x44246029, 0x3FF1BCCA, -/**/ 0x1D6EB966, 0x3FD2D18E, -/**/ 0x58DF9E20, 0x3FD883F0, -/**/ 0x2308FF84, 0x3FD7F717, -/**/ 0x1CEC1692, 0x3FDF5B41, -/**/ 0xEFAE7F7E, 0x3FE45460, -/**/ 0xC247C281, 0xBCACA88A, -/**/ 0x0C10D428, 0x3FDC905B, -/**/ 0x00000000, 0x3FF1C000, -/**/ 0xDCFEB6F6, 0xBF49ADDE, -/**/ 0x00000000, 0x3FDBE000, -/**/ 0x8645E0A6, 0x3FF1C645, -/**/ 0xF4FA598C, 0x3FD31BAA, -/**/ 0x7A00CDBD, 0x3FD8E509, -/**/ 0xA876EFA4, 0x3FD89648, -/**/ 0x93BB3BA0, 0x3FE029F8, -/**/ 0x3E769492, 0x3FE51FCE, -/**/ 0xDAC78BA6, 0xBC63BD0A, -/**/ 0x1F4B8A08, 0x3FDCD761, -/**/ 0x00000000, 0x3FF1C000, -/**/ 0x178298DB, 0x3F591619, -/**/ 0x00000000, 0x3FDC2000, -/**/ 0x20466A93, 0x3FF1CFE6, -/**/ 0xDCE16113, 0x3FD366EE, -/**/ 0x3831A262, 0x3FD948A9, -/**/ 0xCB5336B7, 0x3FD93A6D, -/**/ 0xF50362A5, 0x3FE0AB30, -/**/ 0x440F45E4, 0x3FE5F494, -/**/ 0x79A811B8, 0xBCA1B23F, -/**/ 0x6A0D56C8, 0x3FDD1E8D, -/**/ 0x00000000, 0x3FF1C000, -/**/ 0x8CD52690, 0x3F6FCC40, -/**/ 0x00000000, 0x3FDC6000, -/**/ 0xA798215A, 0x3FF1D9AC, -/**/ 0x87135170, 0x3FD3B361, -/**/ 0xC4E92F90, 0x3FD9AEE3, -/**/ 0x6C3B0A06, 0x3FD9E3B8, -/**/ 0x439D6983, 0x3FE13183, -/**/ 0x444347EE, 0x3FE6D333, -/**/ 0x141D7ADE, 0x3C9E6687, -/**/ 0x82DF5278, 0x3FDD65E0, -/**/ 0x00000000, 0x3FF1C000, -/**/ 0x98215A4D, 0x3F79ACA7, -/**/ 0x00000000, 0x3FDCA000, -/**/ 0xB59577B1, 0x3FF1E399, -/**/ 0xE343E389, 0x3FD4010A, -/**/ 0x1DB4A57B, 0x3FDA17CE, -/**/ 0xBAC8CA27, 0x3FDA925C, -/**/ 0x29AC5009, 0x3FE1BD2C, -/**/ 0x5806ABBE, 0x3FE7BC33, -/**/ 0xD953CBEA, 0x3C89743A, -/**/ 0x02A82420, 0x3FDDAD5B, -/**/ 0x00000000, 0x3FF20000, -/**/ 0x6A884EAF, 0xBF7C664A, -/**/ 0x00000000, 0x3FDCE000, -/**/ 0xE7A0AD1E, 0x3FF1EDAD, -/**/ 0x215D62D8, 0x3FD44FF3, -/**/ 0x15B2742E, 0x3FDA837E, -/**/ 0x557C3A62, 0x3FDB4691, -/**/ 0x9ABECCA0, 0x3FE24E6B, -/**/ 0xF75D3619, 0x3FE8B024, -/**/ 0x953C1F21, 0xBC60A42B, -/**/ 0x84BBE168, 0x3FDDF4FD, -/**/ 0x00000000, 0x3FF20000, -/**/ 0x5F52E269, 0xBF725218, -/**/ 0x00000000, 0x3FDD2000, -/**/ 0xDF448BE1, 0x3FF1F7E9, -/**/ 0xB4103D45, 0x3FD4A022, -/**/ 0x5F90F152, 0x3FDAF20A, -/**/ 0x6B992E26, 0x3FDC008F, -/**/ 0x07C18F30, 0x3FE2E585, -/**/ 0x8DCE89C2, 0x3FE9AFA1, -/**/ 0xE5B4E0DD, 0xBC8B90A5, -/**/ 0xA6EC6EF0, 0x3FDE3CC8, -/**/ 0x00000000, 0x3FF20000, -/**/ 0x76E83DEE, 0xBF602C41, -/**/ 0x00000000, 0x3FDD6000, -/**/ 0x42567651, 0x3FF2024E, -/**/ 0x53815E48, 0x3FD4F1A2, -/**/ 0x98189F26, 0x3FDB638A, -/**/ 0xE11F7BB9, 0x3FDCC092, -/**/ 0x968E1C3C, 0x3FE382BF, -/**/ 0x1A4C4551, 0x3FEABB4C, -/**/ 0xC65EE1E9, 0xBCAC384D, -/**/ 0x099A6620, 0x3FDE84BD, -/**/ 0x00000000, 0x3FF20000, -/**/ 0xB3B2877E, 0x3F427212, -/**/ 0x00000000, 0x3FDDA000, -/**/ 0xBB19D366, 0x3FF20CDB, -/**/ 0x00190520, 0x3FD5447B, -/**/ 0x514AC3D7, 0x3FDBD817, -/**/ 0x7501B24E, 0x3FDD86DA, -/**/ 0x5D5DCC91, 0x3FE42666, -/**/ 0xDB834BBA, 0x3FEBD3D1, -/**/ 0x64307FE4, 0xBCA62892, -/**/ 0x4FC685E0, 0x3FDECCDB, -/**/ 0x00000000, 0x3FF20000, -/**/ 0x33A6CD00, 0x3F69B776, -/**/ 0x00000000, 0x3FDDE000, -/**/ 0xF864EB38, 0x3FF21792, -/**/ 0x0573E0CA, 0x3FD598B6, -/**/ 0x1E1D9C05, 0x3FDC4FCA, -/**/ 0xE9C2FB44, 0x3FDE53A7, -/**/ 0xA26E99AF, 0x3FE4D0C8, -/**/ 0x09A8A359, 0x3FECF9EB, -/**/ 0xD9AFA9E0, 0xBCADF861, -/**/ 0x1F23B3F8, 0x3FDF1524, -/**/ 0x00000000, 0x3FF20000, -/**/ 0x64EB3836, 0x3F7792F8, -/**/ 0x00000000, 0x3FDE2000, -/**/ 0xADC744F8, 0x3FF22274, -/**/ 0xFD785957, 0x3FD5EE5C, -/**/ 0x9EE01B3A, 0x3FDCCABD, -/**/ 0x30A7B7B5, 0x3FDF2740, -/**/ 0x202E0D0D, 0x3FE5823A, -/**/ 0x9EEBE829, 0x3FEE2E5B, -/**/ 0xE2EA9787, 0xBC93BB42, -/**/ 0x202994B8, 0x3FDF5D98, -/**/ 0x00000000, 0x3FF24000, -/**/ 0x38BB0864, 0xBF7D8B52, -/**/ 0x00000000, 0x3FDE6000, -/**/ 0x93B1990A, 0x3FF22D81, -/**/ 0xD3920D0F, 0x3FD64579, -/**/ 0x8E4FE1FE, 0x3FDD490D, -/**/ 0xCBD3ED59, 0x3FE000F5, -/**/ 0x4E45F774, 0x3FE63B13, -/**/ 0x2FD578CE, 0x3FEF71F4, -/**/ 0xC0E1AC47, 0x3CA8AD1C, -/**/ 0xFE27BF60, 0x3FDFA637, -/**/ 0x00000000, 0x3FF24000, -/**/ 0x4E66F5A1, 0xBF727E6C, -/**/ 0x00000000, 0x3FDEA000, -/**/ 0x679F6AE1, 0x3FF238BA, -/**/ 0xC815A8F5, 0x3FD69E16, -/**/ 0xCF6CD4C9, 0x3FDDCAD6, -/**/ 0xFD2ADE38, 0x3FE071FA, -/**/ 0xAFEE9630, 0x3FE6FBB1, -/**/ 0x6A7ACB82, 0x3FF062C9, -/**/ 0x35D3555B, 0x3C7E3580, -/**/ 0x67599588, 0x3FDFEF04, -/**/ 0x00000000, 0x3FF24000, -/**/ 0x82547B6F, 0xBF5D1661, -/**/ 0x00000000, 0x3FDEE000, -/**/ 0xEC425F4B, 0x3FF2441F, -/**/ 0x73CF67B4, 0x3FD6F83E, -/**/ 0x7C1691BA, 0x3FDE5037, -/**/ 0x7AF8190E, 0x3FE0E6D7, -/**/ 0x27F29078, 0x3FE7C478, -/**/ 0x13B5FFDC, 0x3FF11512, -/**/ 0x5FEBA301, 0x3C6CC7A1, -/**/ 0x067D6224, 0x3FE01BFF, -/**/ 0x00000000, 0x3FF24000, -/**/ 0x097D2BDC, 0x3F507FB1, -/**/ 0x00000000, 0x3FDF2000, -/**/ 0xE9AF6533, 0x3FF24FB2, -/**/ 0xCBBEA804, 0x3FD753FB, -/**/ 0xF480E731, 0x3FDED94E, -/**/ 0x106D90C6, 0x3FE15FB5, -/**/ 0x52DAD430, 0x3FE895CF, -/**/ 0x28FAAE13, 0x3FF1D052, -/**/ 0xE849F35A, 0xBCA50976, -/**/ 0xD1AE3B48, 0x3FE04092, -/**/ 0x00000000, 0x3FF24000, -/**/ 0x5ECA665D, 0x3F6F65D3, -/**/ 0x00000000, 0x3FDF6000, -/**/ 0x2D8DC7FA, 0x3FF25B74, -/**/ 0x25013475, 0x3FD7B15A, -/**/ 0xEF8D6387, 0x3FDF663D, -/**/ 0xA2DF4BFF, 0x3FE1DCBF, -/**/ 0xE7C2E4E5, 0x3FE97025, -/**/ 0x1C2AE4AB, 0x3FF29510, -/**/ 0xB02A3D13, 0x3CA4C8DC, -/**/ 0xF0FD9FD8, 0x3FE0653D, -/**/ 0x00000000, 0x3FF24000, -/**/ 0x8DC7FA40, 0x3F7B742D, -/**/ 0x00000000, 0x3FDFA000, -/**/ 0x8B4843F2, 0x3FF26764, -/**/ 0x38F10257, 0x3FD81065, -/**/ 0x8C1920B1, 0x3FDFF726, -/**/ 0x5148D4E4, 0x3FE25E25, -/**/ 0x2061C3FE, 0x3FEA53F1, -/**/ 0x5B9300E5, 0x3FF363DB, -/**/ 0x624B8B97, 0xBCA47774, -/**/ 0xC1CAE338, 0x3FE08A00, -/**/ 0x00000000, 0x3FF28000, -/**/ 0xB7BC0E50, 0xBF789B74, -/**/ 0x00000000, 0x3FDFE000, -/**/ 0xDC4036F2, 0x3FF27384, -/**/ 0x29775C8F, 0x3FD87129, -/**/ 0x31A78776, 0x3FE04616, -/**/ 0x95EE0C65, 0x3FE2E416, -/**/ 0x28E05161, 0x3FEB41AD, -/**/ 0xFF1DF849, 0x3FF43D4C, -/**/ 0xBABBA919, 0x3CA5941C, -/**/ 0xA3221C1C, 0x3FE0AEDB, -/**/ 0x00000000, 0x3FF28000, -/**/ 0x7F921C27, 0xBF68F647, -/**/ 0x00000000, 0x3FE01000, -/**/ 0x00030888, 0x3FF27FD6, -/**/ 0x8598A1B5, 0x3FD8D3B2, -/**/ 0x4E0BC755, 0x3FE092BA, -/**/ 0x6A428EEC, 0x3FE36EC6, -/**/ 0x44F514C9, 0x3FEC39C0, -/**/ 0x18C4EF3A, 0x3FF52205, -/**/ 0xA852F235, 0x4000C1D1, -/**/ 0xD00F64B8, 0x3CA78082, -/**/ 0xF5C846F8, 0x3FE0D3CE, -/**/ 0x00000000, 0x3FF28000, -/**/ 0x7BBC39DF, 0xBF04FFFE, -/**/ 0x00000000, 0x3FE03000, -/**/ 0xDC81E6D7, 0x3FF28C58, -/**/ 0x4E3BF356, 0x3FD9380E, -/**/ 0xFFC646A7, 0x3FE0E192, -/**/ 0x6D34756D, 0x3FE3FE6A, -/**/ 0x139ABC91, 0x3FED3CEF, -/**/ 0xF80111C0, 0x3FF612B8, -/**/ 0x3467C688, 0x4001A33C, -/**/ 0x34F59445, 0xBC8A9954, -/**/ 0x1C47D550, 0x3FE0F8DB, -/**/ 0x00000000, 0x3FF28000, -/**/ 0x03CDAE3F, 0x3F68B1B9, -/**/ 0x00000000, 0x3FE05000, -/**/ 0x5E4BF713, 0x3FF2990E, -/**/ 0xFB326E9E, 0x3FD99E49, -/**/ 0x8779391A, 0x3FE132B4, -/**/ 0x0C2FE325, 0x3FE4933B, -/**/ 0xAEAAE1D0, 0x3FEE4BB1, -/**/ 0x1F4377BD, 0x3FF71020, -/**/ 0x1C886605, 0x40029271, -/**/ 0x7130CE99, 0xBCA33AB1, -/**/ 0x7AFDAF10, 0x3FE11E00, -/**/ 0x00000000, 0x3FF28000, -/**/ 0x4BF712C7, 0x3F790E5E, -/**/ 0x00000000, 0x3FE07000, -/**/ 0x78CB1A3B, 0x3FF2A5F7, -/**/ 0x8081C5D1, 0x3FDA0673, -/**/ 0x0D5E6499, 0x3FE18634, -/**/ 0xAEDD6BE6, 0x3FE52D73, -/**/ 0x1CF1AAA0, 0x3FEF66A5, -/**/ 0x4834E5A9, 0x3FF81B02, -/**/ 0xFCE48906, 0x40039066, -/**/ 0x6BFB4C85, 0xBCA34E4F, -/**/ 0x7826AAD4, 0x3FE1433F, -/**/ 0x00000000, 0x3FF2C000, -/**/ 0x34E5C574, 0xBF7A0887, -/**/ 0x00000000, 0x3FE09000, -/**/ 0x268368DB, 0x3FF2B315, -/**/ 0x53F655B7, 0x3FDA7099, -/**/ 0xAD9032EC, 0x3FE1DC27, -/**/ 0xE5F88E23, 0x3FE5CD52, -/**/ 0x0A68BDFC, 0x3FF04738, -/**/ 0x2F057820, 0x3FF93435, -/**/ 0xDAE8A2FC, 0x40049E27, -/**/ 0xFAA44565, 0x3C86832C, -/**/ 0x7BED8260, 0x3FE16898, -/**/ 0x00000000, 0x3FF2C000, -/**/ 0xF92E4A41, 0xBF69D5B2, -/**/ 0x00000000, 0x3FE0B000, -/**/ 0x69558A9E, 0x3FF2C068, -/**/ 0x73011B64, 0x3FDADCCA, -/**/ 0x8511146A, 0x3FE234A6, -/**/ 0x9D6CBF3C, 0x3FE6731A, -/**/ 0xD575F00A, 0x3FF0E1E1, -/**/ 0xADEA17E7, 0x3FFA5C9D, -/**/ 0xD9123E7C, 0x4005BCD2, -/**/ 0xCC2AE1E4, 0xBCA23E4F, -/**/ 0xF07948F0, 0x3FE18E0B, -/**/ 0x00000000, 0x3FF2C000, -/**/ 0x62A7614A, 0x3F1A1A55, -/**/ 0x00000000, 0x3FE0D000, -/**/ 0x4AC410C6, 0x3FF2CDF2, -/**/ 0x68E63D97, 0x3FDB4B16, -/**/ 0xBFA256B2, 0x3FE28FC8, -/**/ 0x51FDF05A, 0x3FE71F10, -/**/ 0x0753C882, 0x3FF183AE, -/**/ 0xF1921090, 0x3FFB9530, -/**/ 0x14F942BC, 0x4006ED9E, -/**/ 0x89C77FA3, 0x3CA27879, -/**/ 0x41FC691C, 0x3FE1B39A, -/**/ 0x00000000, 0x3FF2C000, -/**/ 0x88218CD6, 0x3F6BE495, -/**/ 0x00000000, 0x3FE0F000, -/**/ 0xDC3BFD25, 0x3FF2DBB3, -/**/ 0x55413207, 0x3FDBBB8D, -/**/ 0xA6792BF1, 0x3FE2EDA7, -/**/ 0x4AC4E230, 0x3FE7D17D, -/**/ 0xAAE6CB05, 0x3FF22D00, -/**/ 0xC9028E71, 0x3FFCDEF5, -/**/ 0xB40C626C, 0x400831D8, -/**/ 0x9873F484, 0x3C953FEF, -/**/ 0xDEC430C0, 0x3FE1D943, -/**/ 0x00000000, 0x3FF2C000, -/**/ 0x3BFD24A1, 0x3F7BB3DC, -/**/ 0x00000000, 0x3FE11000, -/**/ 0x3760A19B, 0x3FF2E9AE, -/**/ 0xF2E3E2EB, 0x3FDC2E3F, -/**/ 0xAFE1CD38, 0x3FE34E5D, -/**/ 0xD6CE0B26, 0x3FE88AAE, -/**/ 0x2C4B06C6, 0x3FF2DE44, -/**/ 0x138813D2, 0x3FFE3B06, -/**/ 0x23FD5612, 0x40098AED, -/**/ 0xB7AF0E54, 0xBC91EC19, -/**/ 0x3748F114, 0x3FE1FF09, -/**/ 0x00000000, 0x3FF30000, -/**/ 0x9F5E657E, 0xBF7651C8, -/**/ 0x00000000, 0x3FE13000, -/**/ 0x7E5B072B, 0x3FF2F7E2, -/**/ 0x9F169C4D, 0x3FDCA33F, -/**/ 0x8FE1EB56, 0x3FE3B206, -/**/ 0x8F30E1B7, 0x3FE94AF6, -/**/ 0xCFCF9887, 0x3FF397E9, -/**/ 0x4FB7F25F, 0x3FFFAA90, -/**/ 0x94745D90, 0x400AFA63, -/**/ 0x2A139390, 0x3C96955C, -/**/ 0xBE3EBA20, 0x3FE224EA, -/**/ 0x00000000, 0x3FF30000, -/**/ 0x49F1AA85, 0xBF603B03, -/**/ 0x00000000, 0x3FE15000, -/**/ 0xDC2D0E76, 0x3FF30651, -/**/ 0x613EF408, 0x3FDD1A9E, -/**/ 0x49ED083D, 0x3FE418BF, -/**/ 0x9DFD1E23, 0x3FEA12AA, -/**/ 0x32B75F76, 0x3FF45A6A, -/**/ 0xA7673F47, 0x4000976C, -/**/ 0xB046AC6A, 0x400C81E4, -/**/ 0x7D1BEB80, 0x3C879FF7, -/**/ 0xE8A6B8B0, 0x3FE24AE8, -/**/ 0x00000000, 0x3FF30000, -/**/ 0xB439D90E, 0x3F594770, -/**/ 0x00000000, 0x3FE17000, -/**/ 0x85087ECD, 0x3FF314FD, -/**/ 0xF2F45390, 0x3FDD946E, -/**/ 0x43BEDA05, 0x3FE482A6, -/**/ 0x0A640DD7, 0x3FEAE226, -/**/ 0xD6A3D695, 0x3FF52645, -/**/ 0x08098FE0, 0x4001649F, -/**/ 0x9D2BADE7, 0x400E233C, -/**/ 0x4E5F8348, 0x3C9E948C, -/**/ 0x2DE13E58, 0x3FE27104, -/**/ 0x00000000, 0x3FF30000, -/**/ 0x087ECD1A, 0x3F74FD85, -/**/ 0x00000000, 0x3FE19000, -/**/ 0xB6AA3C67, 0x3FF323E6, -/**/ 0xC8894828, 0x3FDE10C4, -/**/ 0x59718389, 0x3FE4EFDB, -/**/ 0x0A8D7622, 0x3FEBB9C9, -/**/ 0xB8A62B12, 0x3FF5FC05, -/**/ 0xE4296831, 0x40023D9A, -/**/ 0x49C0B830, 0x400FE05E, -/**/ 0xC1189DE8, 0x3CA19107, -/**/ 0x07C07BCC, 0x3FE2973D, -/**/ 0x00000000, 0x3FF34000, -/**/ 0x55C3993D, 0xBF7C1949, -/**/ 0x00000000, 0x3FE1B000, -/**/ 0xB8B9E20B, 0x3FF3330E, -/**/ 0x1A11468B, 0x3FDE8FB4, -/**/ 0xF2E740E1, 0x3FE5607F, -/**/ 0x5B91DB14, 0x3FEC99F9, -/**/ 0xF50C5FAA, 0x3FF6DC3B, -/**/ 0x0CFAC1C7, 0x4003232A, -/**/ 0x894EFD30, 0x4010DDB3, -/**/ 0x3783D916, 0xBCA7760F, -/**/ 0xF29BF5F0, 0x3FE2BD93, -/**/ 0x00000000, 0x3FF34000, -/**/ 0x8C3BEA7F, 0xBF69E28E, -/**/ 0x00000000, 0x3FE1D000, -/**/ 0xDD2DFE6D, 0x3FF34276, -/**/ 0xECEB226B, 0x3FDF1151, -/**/ 0x1AA123CE, 0x3FE5D4B7, -/**/ 0xA01F65F8, 0x3FED8322, -/**/ 0x791CE583, 0x3FF7C784, -/**/ 0xC15A6B9C, 0x40041625, -/**/ 0x64280FEB, 0x4011DB51, -/**/ 0x28CA6DBB, 0x3CA10463, -/**/ 0x6D64BEAC, 0x3FE2E409, -/**/ 0x00000000, 0x3FF34000, -/**/ 0x6FF364E1, 0x3F43B6E9, -/**/ 0x00000000, 0x3FE1F000, -/**/ 0x80B539C7, 0x3FF35220, -/**/ 0x1DD91A82, 0x3FDF95B4, -/**/ 0x961EA9CA, 0x3FE64CA5, -/**/ 0xC65B3B2F, 0x3FEE75B6, -/**/ 0xC412E59F, 0x3FF8BE85, -/**/ 0x02462A51, 0x40051778, -/**/ 0x109FC81B, 0x4012EA48, -/**/ 0x9F70CA98, 0x3C959E4C, -/**/ 0xF9BA7B3C, 0x3FE30A9D, -/**/ 0x00000000, 0x3FF34000, -/**/ 0xB539C6A2, 0x3F722080, -/**/ 0x00000000, 0x3FE21000, -/**/ 0x0B24ACDA, 0x3FF3620D, -/**/ 0xB5D803B6, 0x3FE00E78, -/**/ 0xFFE457FB, 0x3FE6C871, -/**/ 0x759EF386, 0x3FEF722E, -/**/ 0xB8D0E874, 0x3FF9C1F1, -/**/ 0x080FB06E, 0x4006281D, -/**/ 0xD1F69DF7, 0x40140BF2, -/**/ 0xCBFAF37F, 0xBC8489EA, -/**/ 0x1C0141BC, 0x3FE33152, -/**/ 0x00000000, 0x3FF38000, -/**/ 0xDB532667, 0xBF7DF2F4, -/**/ 0x00000000, 0x3FE23000, -/**/ 0xEFEBB76D, 0x3FF3723D, -/**/ 0xC153FC4C, 0x3FE05390, -/**/ 0xE34A2666, 0x3FE74844, -/**/ 0xC260A400, 0x3FF03C84, -/**/ 0x81E70F01, 0x3FFAD286, -/**/ 0xDBC4A78E, 0x40074924, -/**/ 0x8BBCA2E0, 0x401541CB, -/**/ 0x7BEA8472, 0x3C9C7528, -/**/ 0x5B7858F8, 0x3FE35826, -/**/ 0x00000000, 0x3FF38000, -/**/ 0x28912510, 0xBF6B8420, -/**/ 0x00000000, 0x3FE25000, -/**/ 0xAE8DA9C7, 0x3FF382B4, -/**/ 0x842CABB9, 0x3FE09A2E, -/**/ 0xDA356141, 0x3FE7CC48, -/**/ 0xBCD4FDB8, 0x3FF0C567, -/**/ 0x89B62C32, 0x3FFBF10F, -/**/ 0x18ADC4B9, 0x40087BB5, -/**/ 0xC516F6F1, 0x40168D6D, -/**/ 0x2E37D6A3, 0xBC933A6B, -/**/ 0x4251E5AC, 0x3FE37F1B, -/**/ 0x00000000, 0x3FF38000, -/**/ 0x6D4E3A7A, 0x3F45A574, -/**/ 0x00000000, 0x3FE27000, -/**/ 0xD3219A4C, 0x3FF39372, -/**/ 0xD4394437, 0x3FE0E25E, -/**/ 0xACE4CC74, 0x3FE854AA, -/**/ 0x0981EE13, 0x3FF15408, -/**/ 0x88AA5332, 0x3FFD1E66, -/**/ 0xDA3BD18F, 0x4009C10A, -/**/ 0xFFE4AE21, 0x4017F099, -/**/ 0x7B588ABE, 0xBCAED56B, -/**/ 0x5DCB911C, 0x3FE3A631, -/**/ 0x00000000, 0x3FF38000, -/**/ 0x219A4BA9, 0x3F7372D3, -/**/ 0x00000000, 0x3FE29000, -/**/ 0xF6D8C6BC, 0x3FF3A479, -/**/ 0x11197A32, 0x3FE12C2F, -/**/ 0x73F949D5, 0x3FE8E199, -/**/ 0xEE7A481D, 0x3FF1E8B1, -/**/ 0xABBE8828, 0x3FFE5B74, -/**/ 0xDB3D83BC, 0x400B1A7C, -/**/ 0x6DC46100, 0x40196D39, -/**/ 0xACD8F69C, 0x3CA7798C, -/**/ 0x3E4835E8, 0x3FE3CD69, -/**/ 0x00000000, 0x3FF3C000, -/**/ 0x27394391, 0xBF7B8609, -/**/ 0x00000000, 0x3FE2B000, -/**/ 0xC08BE738, 0x3FF3B5CB, -/**/ 0x2B5CB6B7, 0x3FE177AD, -/**/ 0xBCE90EB1, 0x3FE97346, -/**/ 0x68EC7F04, 0x3FF283B6, -/**/ 0xD5B8ED04, 0x3FFFA933, -/**/ 0xCBCDFF9A, 0x400C897D, -/**/ 0x0E4ABF55, 0x401B0562, -/**/ 0x1EE42043, 0x3C881FF6, -/**/ 0x776AA08C, 0x3FE3F4C3, -/**/ 0x00000000, 0x3FF3C000, -/**/ 0xE8319086, 0xBF64687E, -/**/ 0x00000000, 0x3FE2D000, -/**/ 0xE54FE05E, 0x3FF3C769, -/**/ 0xAC1A81A0, 0x3FE1C4E7, -/**/ 0xB10FA326, 0x3FEA09E6, -/**/ 0x840F679B, 0x3FF3256B, -/**/ 0xFEE9EF1A, 0x40008457, -/**/ 0xE4146343, 0x400E0F9E, -/**/ 0x433496A9, 0x401CBB5B, -/**/ 0x59F087C0, 0xBCA57A4C, -/**/ 0xA03171A8, 0x3FE41C40, -/**/ 0x00000000, 0x3FF3C000, -/**/ 0x3F81773D, 0x3F5DA795, -/**/ 0x00000000, 0x3FE2F000, -/**/ 0x291249DC, 0x3FF3D956, -/**/ 0xBD044AC9, 0x3FE213ED, -/**/ 0x3F917FA8, 0x3FEAA5B0, -/**/ 0xB7380A79, 0x3FF3CE2C, -/**/ 0x576AFAE8, 0x40013D84, -/**/ 0xBAAB74F3, 0x400FAE92, -/**/ 0xE9129E4A, 0x401E91A2, -/**/ 0x0CEC83F7, 0x3C905671, -/**/ 0x53143194, 0x3FE443E1, -/**/ 0x00000000, 0x3FF3C000, -/**/ 0x1249DBC4, 0x3F795629, -/**/ 0x00000000, 0x3FE31000, -/**/ 0x5F3E4715, 0x3FF3EB92, -/**/ 0x30F965D1, 0x3FE264CF, -/**/ 0x4A4F2FB2, 0x3FEB46DD, -/**/ 0x4BC2E94F, 0x3FF47E5B, -/**/ 0x54F8F9EB, 0x400200B9, -/**/ 0x33305D9F, 0x4010B418, -/**/ 0x826EF167, 0x40204579, -/**/ 0xE06EBCAE, 0xBC9737A0, -/**/ 0x2E21A53C, 0x3FE46BA6, -/**/ 0x00000000, 0x3FF40000, -/**/ 0xC1B8EB04, 0xBF746DA0, -/**/ 0x00000000, 0x3FE33000, -/**/ 0x6B6A38D5, 0x3FF3FE20, -/**/ 0x8D26C7A0, 0x3FE2B79C, -/**/ 0xD62978F8, 0x3FEBEDAA, -/**/ 0xCB8CC6D1, 0x3FF5365E, -/**/ 0xD894AF54, 0x4002CE9C, -/**/ 0x79F7C63E, 0x40119F3B, -/**/ 0x0C8E7B9E, 0x40215524, -/**/ 0x13DC9A80, 0x3CA485D0, -/**/ 0xD31F754C, 0x3FE4938F, -/**/ 0x00000000, 0x3FF40000, -/**/ 0x5C72B1E7, 0xBF3DF949, -/**/ 0x00000000, 0x3FE35000, -/**/ 0x420ED8E7, 0x3FF41102, -/**/ 0x12BCE2B2, 0x3FE30C67, -/**/ 0x3EDE345E, 0x3FEC9A59, -/**/ 0x78CAB466, 0x3FF5F6A5, -/**/ 0x3EAD62EE, 0x4003A7E1, -/**/ 0x9CB9A228, 0x401299C8, -/**/ 0x1BE749B0, 0x40227974, -/**/ 0xC6A9831F, 0x3CAFE28F, -/**/ 0xE7AB3A40, 0x3FE4BB9E, -/**/ 0x00000000, 0x3FF40000, -/**/ 0x0ED8E776, 0x3F710242, -/**/ 0x00000000, 0x3FE37000, -/**/ 0xE9485B43, 0x3FF42439, -/**/ 0xC946E033, 0x3FE36340, -/**/ 0x6ECC5A7E, 0x3FED4D2C, -/**/ 0xD027255A, 0x3FF6BFA4, -/**/ 0x72504BE1, 0x40048D46, -/**/ 0x09445BD5, 0x4013A4ED, -/**/ 0x749E19F9, 0x4023B435, -/**/ 0xEAAAF53E, 0xBC40E7E5, -/**/ 0x155D0070, 0x3FE4E3D4, -/**/ 0x00000000, 0x3FF44000, -/**/ 0xB7A4BD36, 0xBF7BC616, -/**/ 0x00000000, 0x3FE39000, -/**/ 0x79A23C23, 0x3FF437C9, -/**/ 0x89AF6A9D, 0x3FE3BC3C, -/**/ 0x1AF553BA, 0x3FEE066C, -/**/ 0x1622569A, 0x3FF791DA, -/**/ 0x1B18AE2B, 0x40057F9B, -/**/ 0x88BFF240, 0x4014C1F0, -/**/ 0x019A4522, 0x40250761, -/**/ 0xFDFCCB13, 0x3CA4C238, -/**/ 0x09EB58F8, 0x3FE50C30, -/**/ 0x00000000, 0x3FF44000, -/**/ 0xBB87B9E1, 0xBF606D0C, -/**/ 0x00000000, 0x3FE3B000, -/**/ 0x1EEE6F35, 0x3FF44BB3, -/**/ 0x0A004D1D, 0x3FE4176E, -/**/ 0x0399FA54, 0x3FEEC664, -/**/ 0xF0CFD106, 0x3FF86DCA, -/**/ 0xE8C80E97, 0x40067FBD, -/**/ 0xD9CD2D79, 0x4015F237, -/**/ 0xC8076345, 0x40267521, -/**/ 0xB089F7AF, 0x3CAEC756, -/**/ 0x77510D94, 0x3FE534B3, -/**/ 0x00000000, 0x3FF44000, -/**/ 0xDCDE698F, 0x3F67663D, -/**/ 0x00000000, 0x3FE3D000, -/**/ 0x1928B1BE, 0x3FF45FF9, -/**/ 0xE9EB53E9, 0x3FE474E9, -/**/ 0x39DB03B6, 0x3FEF8D64, -/**/ 0x0F298B87, 0x3FF95406, -/**/ 0xFFC72AB6, 0x40078E9E, -/**/ 0x941456E7, 0x40173747, -/**/ 0x74A71E71, 0x4027FFDA, -/**/ 0xFE7483B3, 0xBCAEED93, -/**/ 0x13F48EC0, 0x3FE55D5F, -/**/ 0x00000000, 0x3FF44000, -/**/ 0x28B1BDFF, 0x3F7FF919, -/**/ 0x00000000, 0x3FE3F000, -/**/ 0xBD66D0C4, 0x3FF4749D, -/**/ 0xC02C2013, 0x3FE4D4C5, -/**/ 0xB56768CC, 0x3FF02DE0, -/**/ 0xDF53A7BD, 0x3FFA4523, -/**/ 0x8A357386, 0x4008AD41, -/**/ 0x5E392799, 0x401892C7, -/**/ 0x97746ACD, 0x4029AA2B, -/**/ 0xB4A71E44, 0x3C924F0A, -/**/ 0x9AD13548, 0x3FE58633, -/**/ 0x00000000, 0x3FF48000, -/**/ 0x325E775E, 0xBF66C485, -/**/ 0x00000000, 0x3FE41000, -/**/ 0x76D6C491, 0x3FF489A3, -/**/ 0x28D40829, 0x3FE53718, -/**/ 0x98450D83, 0x3FF098EA, -/**/ 0x55526E3B, 0x3FFB41C7, -/**/ 0x719F540E, 0x4009DCBD, -/**/ 0x805D08D1, 0x401A0685, -/**/ 0xA5142633, 0x402B76FA, -/**/ 0xF1FF56FC, 0x3C2AD9A7, -/**/ 0xCBA27244, 0x3FE5AF31, -/**/ 0x00000000, 0x3FF48000, -/**/ 0xAD892100, 0x3F6346ED, -/**/ 0x00000000, 0x3FE43000, -/**/ 0xC7CB94CC, 0x3FF49F0C, -/**/ 0xD492AA1E, 0x3FE59BF8, -/**/ 0x34D2CA82, 0x3FF107FF, -/**/ 0xC3DF9E51, 0x3FFC4A9E, -/**/ 0x45F5874E, 0x400B1E41, -/**/ 0xDEB92648, 0x401B947A, -/**/ 0xD903D532, 0x402D6979, -/**/ 0x04C67F5E, 0x3CA43231, -/**/ 0x6B1109A4, 0x3FE5D85A, -/**/ 0x00000000, 0x3FF48000, -/**/ 0xCB94CC1A, 0x3F7F0CC7, -/**/ 0x00000000, 0x3FE45000, -/**/ 0x4ADA0BF0, 0x3FF4B4DC, -/**/ 0x990F861F, 0x3FE60380, -/**/ 0xCBEC7542, 0x3FF17B50, -/**/ 0xC93CFE8F, 0x3FFD6064, -/**/ 0x56F36FE3, 0x400C7314, -/**/ 0x696E5374, 0x401D3ECF, -/**/ 0x1778AF1D, 0x402F8531, -/**/ 0x31EBDA84, 0x3C7A53BF, -/**/ 0x42E27660, 0x3FE601AE, -/**/ 0x00000000, 0x3FF4C000, -/**/ 0x4BE81F81, 0xBF66476A, -/**/ 0x00000000, 0x3FE47000, -/**/ 0xB4065600, 0x3FF4CB14, -/**/ 0x826ADA4F, 0x3FE66DC9, -/**/ 0xA3298D4D, 0x3FF1F314, -/**/ 0x52191CB4, 0x3FFE83E1, -/**/ 0x05CA69AF, 0x400DDC99, -/**/ 0x1079C46A, 0x401F07DF, -/**/ 0xF9440EB0, 0x4030E703, -/**/ 0x5817D0DD, 0x3CA495E1, -/**/ 0x222A98A0, 0x3FE62B2E, -/**/ 0x00000000, 0x3FF4C000, -/**/ 0x0CAC00D4, 0x3F662968, -/**/ 0x00000000, 0x3FE49000, -/**/ 0xD203BDC9, 0x3FF4E1B8, -/**/ 0xE5FE0976, 0x3FE6DAEE, -/**/ 0x3C44F71E, 0x3FF26F83, -/**/ 0xB4D92F91, 0x3FFFB5EA, -/**/ 0x55A779C8, 0x400F5C4F, -/**/ 0xA66A7536, 0x4020791F, -/**/ 0x7DCE5D75, 0x40322428, -/**/ 0x964F770B, 0x3CADE7E8, -/**/ 0xDD7FD12C, 0x3FE654DA, -/**/ 0x00000000, 0x3FF50000, -/**/ 0xFC42374B, 0xBF7E472D, -/**/ 0x00000000, 0x3FE4B000, -/**/ 0x8F87D541, 0x3FF4F8CB, -/**/ 0x767620C4, 0x3FE74B0D, -/**/ 0x9126F083, 0x3FF2F0D8, -/**/ 0x73F08794, 0x40007BB3, -/**/ 0xE1419117, 0x401079EB, -/**/ 0xA917F81E, 0x40218062, -/**/ 0x48444DEE, 0x40337C6B, -/**/ 0xF4061E08, 0x3C907A41, -/**/ 0x4F31AF70, 0x3FE67EB5, -/**/ 0x00000000, 0x3FF50000, -/**/ 0xE0AAFA85, 0xBF5CD1C1, -/**/ 0x00000000, 0x3FE4D000, -/**/ 0xF4B2718C, 0x3FF5104F, -/**/ 0x59659939, 0x3FE7BE43, -/**/ 0x5502EAE6, 0x3FF37754, -/**/ 0x6AE0AC51, 0x400124A6, -/**/ 0x33524D17, 0x4011527B, -/**/ 0x7FBF7A2D, 0x40229B46, -/**/ 0xAD716768, 0x4034F274, -/**/ 0x7C204EA8, 0xBC9C610F, -/**/ 0x57825A6C, 0x3FE6A8BE, -/**/ 0x00000000, 0x3FF50000, -/**/ 0xB2718C01, 0x3F704FF4, -/**/ 0x00000000, 0x3FE4F000, -/**/ 0x288C017D, 0x3FF52849, -/**/ 0x3E6D3F7F, 0x3FE834B0, -/**/ 0x3B0747CB, 0x3FF4033A, -/**/ 0xE946B196, 0x4001D652, -/**/ 0x3C2F8CB4, 0x401238CB, -/**/ 0x53E520C1, 0x4023CB80, -/**/ 0x607BC0F6, 0x40368938, -/**/ 0xCC053597, 0xBC84274C, -/**/ 0xDCE2DFB8, 0x3FE6D2F6, -/**/ 0x00000000, 0x3FF54000, -/**/ 0x73FE8364, 0xBF77B6D7, -/**/ 0x00000000, 0x3FE51000, -/**/ 0x729BE713, 0x3FF540BA, -/**/ 0x781F49A2, 0x3FE8AE75, -/**/ 0x432AC103, 0x3FF494D2, -/**/ 0x9B0015B6, 0x40029147, -/**/ 0x156B74E9, 0x40132DE7, -/**/ 0xE8362EC8, 0x402512F0, -/**/ 0xC8D2E0F8, 0x403843FE, -/**/ 0xBB3ACC53, 0xBC8F55DB, -/**/ 0xCC3296F0, 0x3FE6FD5F, -/**/ 0x00000000, 0x3FF54000, -/**/ 0x7CE2565E, 0x3F274E53, -/**/ 0x00000000, 0x3FE53000, -/**/ 0x3C98A101, 0x3FF559A7, -/**/ 0x16C3163D, 0x3FE92BB6, -/**/ 0x0DB2C44D, 0x3FF52C69, -/**/ 0x0F4546B8, 0x4003561E, -/**/ 0x7F099A82, 0x401432F1, -/**/ 0x831E227A, 0x402673A9, -/**/ 0xA02BBCD5, 0x403A266F, -/**/ 0xAEA9CB9D, 0x3CA279A8, -/**/ 0x1901CB44, 0x3FE727FA, -/**/ 0x00000000, 0x3FF54000, -/**/ 0x98A10084, 0x3F79A73C, -/**/ 0x00000000, 0x3FE55000, -/**/ 0x1433B9BD, 0x3FF57313, -/**/ 0x0523E7B2, 0x3FE9AC97, -/**/ 0x361F7393, 0x3FF5CA50, -/**/ 0xB0F40825, 0x4004257B, -/**/ 0x46286025, 0x40154927, -/**/ 0x781495B4, 0x4027EFF1, -/**/ 0x0A1139F1, 0x403C349E, -/**/ 0x8B6015DA, 0xBC5D2C66, -/**/ 0xBDD7E0E0, 0x3FE752C6, -/**/ 0x00000000, 0x3FF58000, -/**/ 0x988C865F, 0xBF69D9D7, -/**/ 0x00000000, 0x3FE57000, -/**/ 0xAD039E07, 0x3FF58D01, -/**/ 0x279933CD, 0x3FEA313F, -/**/ 0xB63D93A6, 0x3FF66EDE, -/**/ 0xD836441A, 0x40050012, -/**/ 0xF23D152C, 0x401671E1, -/**/ 0x65D3A1DD, 0x40298A4C, -/**/ 0x5EBDBF39, 0x403E7316, -/**/ 0x7AAA4996, 0xBCAE5B6C, -/**/ 0xBC7D2FA0, 0x3FE77DC6, -/**/ 0x00000000, 0x3FF58000, -/**/ 0x073C0E86, 0x3F6A035A, -/**/ 0x00000000, 0x3FE59000, -/**/ 0xE28DADB6, 0x3FF5A776, -/**/ 0x7D7BE2B5, 0x3FEAB9D7, -/**/ 0x5234C8A9, 0x3FF71A71, -/**/ 0xF873554C, 0x4005E6A3, -/**/ 0xC1F33F9B, 0x4017AE9A, -/**/ 0x4310046E, 0x402B4581, -/**/ 0xF64B03E7, 0x40407376, -/**/ 0xB3AB0542, 0xBCA3F39B, -/**/ 0x1E48D158, 0x3FE7A8FB, -/**/ 0x00000000, 0x3FF5C000, -/**/ 0x725249CA, 0xBF78891D, -/**/ 0x00000000, 0x3FE5B000, -/**/ 0xBA730F9B, 0x3FF5C276, -/**/ 0x454127C3, 0x3FEB468B, -/**/ 0x0E816ADB, 0x3FF7CD6B, -/**/ 0xEDDAC837, 0x4006D9FE, -/**/ 0x0209E3B7, 0x401900EE, -/**/ 0x57489C7E, 0x402D24A2, -/**/ 0x7F810E14, 0x4041CAEA, -/**/ 0x24F9675B, 0xBC84F20E, -/**/ 0xF472A690, 0x3FE7D464, -/**/ 0x00000000, 0x3FF5C000, -/**/ 0x987CD623, 0x3F43B5D3, -/**/ 0x00000000, 0x3FE5D000, -/**/ 0x66C30CDC, 0x3FF5DE05, -/**/ 0x23798D1A, 0x3FEBD788, -/**/ 0xB0E567D8, 0x3FF88835, -/**/ 0x6E46660A, 0x4007DB04, -/**/ 0xCA07CAA5, 0x401A6A9E, -/**/ 0x41ECEF64, 0x402F2B16, -/**/ 0xC36F367B, 0x40434315, -/**/ 0x542594A6, 0xBCA08CA1, -/**/ 0x5869D9E8, 0x3FE80005, -/**/ 0x00000000, 0x3FF5C000, -/**/ 0xC30CDBD9, 0x3F7E0566, -/**/ 0x00000000, 0x3FE5F000, -/**/ 0x4875FA03, 0x3FF5FA27, -/**/ 0x4CF96D63, 0x3FEC6CFE, -/**/ 0x4D7B8313, 0x3FF94B42, -/**/ 0xA1B04592, 0x4008EAA7, -/**/ 0x2C5A9D87, 0x401BED9B, -/**/ 0x1BC92F68, 0x4030AE51, -/**/ 0x685FBD64, 0x4044DF8C, -/**/ 0x30FE6378, 0xBCAC07A8, -/**/ 0x6C30303C, 0x3FE82BDD, -/**/ 0x00000000, 0x3FF60000, -/**/ 0x2817F40C, 0xBF5762DE, -/**/ 0x00000000, 0x3FE61000, -/**/ 0xF213FCD6, 0x3FF616E0, -/**/ 0xB47784FF, 0x3FED0720, -/**/ 0xE13C6707, 0x3FFA1709, -/**/ 0xE70B2E72, 0x400A09EF, -/**/ 0xE976AAD9, 0x401D8C00, -/**/ 0xD1AE1EA8, 0x4031DEBA, -/**/ 0x6424341F, 0x4046A453, -/**/ 0xA65D40B1, 0x3CA13E53, -/**/ 0x5ABA79E8, 0x3FE857EE, -/**/ 0x00000000, 0x3FF60000, -/**/ 0x13FCD614, 0x3F76E0F2, -/**/ 0x00000000, 0x3FE63000, -/**/ 0x2A8B4ED8, 0x3FF63437, -/**/ 0x3BF69915, 0x3FEDA625, -/**/ 0xFB6DF86F, 0x3FFAEC0D, -/**/ 0xCAF2D64B, 0x400B39FA, -/**/ 0xB7E2DC06, 0x401F4822, -/**/ 0xB12537E3, 0x4033291B, -/**/ 0xAF3EF0D1, 0x404895F0, -/**/ 0x71E7ED76, 0x3CAEA588, -/**/ 0x5856807C, 0x3FE88439, -/**/ 0x00000000, 0x3FF64000, -/**/ 0xE9624F1C, 0xBF6791AA, -/**/ 0x00000000, 0x3FE65000, -/**/ 0xF039F5E3, 0x3FF6522E, -/**/ 0xEA588E54, 0x3FEE4A44, -/**/ 0x77A3F8A4, 0x3FFBCAD9, -/**/ 0x3669F2F2, 0x400C7BFE, -/**/ 0x1AEA54A4, 0x40209247, -/**/ 0x6B866959, 0x4034900A, -/**/ 0x620634CF, 0x404AB97D, -/**/ 0xDA91B0FD, 0x3C948649, -/**/ 0xA316D3A0, 0x3FE8B0BF, -/**/ 0x00000000, 0x3FF64000, -/**/ 0x39F5E2AD, 0x3F722EF0, -/**/ 0x00000000, 0x3FE67000, -/**/ 0x7C2F4FC3, 0x3FF670CD, -/**/ 0x2583CF60, 0x3FEEF3BC, -/**/ 0x4A2E1684, 0x3FFCB401, -/**/ 0xDCB9F8FB, 0x400DD14A, -/**/ 0x4E164373, 0x40219209, -/**/ 0x8FC171BC, 0x40361669, -/**/ 0xA46B7BE1, 0x404D14BA, -/**/ 0xBBDFE65A, 0xBCABAC31, -/**/ 0x8344E08C, 0x3FE8DD82, -/**/ 0x00000000, 0x3FF68000, -/**/ 0xA1607A77, 0xBF6E6507, -/**/ 0x00000000, 0x3FE69000, -/**/ 0x45AA3C85, 0x3FF69018, -/**/ 0xF18FBD18, 0x3FEFA2CA, -/**/ 0x610C140E, 0x3FFDA825, -/**/ 0xF08895E1, 0x400F3B4E, -/**/ 0x272CD203, 0x4022A4E4, -/**/ 0x60C4A0EE, 0x4037BF71, -/**/ 0xEC79351D, 0x404FAE29, -/**/ 0x3E22FB0A, 0x3C6BF5BB, -/**/ 0x4BD9C858, 0x3FE90A83, -/**/ 0x00000000, 0x3FF68000, -/**/ 0xAA3C8533, 0x3F701845, -/**/ 0x00000000, 0x3FE6B000, -/**/ 0x05D92E4E, 0x3FF6B015, -/**/ 0x9ABD20D8, 0x3FF02BDA, -/**/ 0x9BC5CC13, 0x3FFEA7F1, -/**/ 0x94AFB2BB, 0x40105DCC, -/**/ 0xB382B54A, 0x4023CC8C, -/**/ 0x19C28EAE, 0x40398EBB, -/**/ 0x8F7609B5, 0x40514694, -/**/ 0xF66137E5, 0x3C9CD223, -/**/ 0x5AFE73AC, 0x3FE937C3, -/**/ 0x00000000, 0x3FF6C000, -/**/ 0x4DA36334, 0xBF6FD5F4, -/**/ 0x00000000, 0x3FE6D000, -/**/ 0xBBE1EF2B, 0x3FF6D0C9, -/**/ 0x82FBDD29, 0x3FF08961, -/**/ 0xDCD403EC, 0x3FFFB41E, -/**/ 0x121D0023, 0x401129EE, -/**/ 0xB34159B2, 0x40250AE5, -/**/ 0xDB5CEAC4, 0x403B884D, -/**/ 0xA0B334B0, 0x4052DD09, -/**/ 0xD8F14BF9, 0xBC96BF1D, -/**/ 0x1A936D24, 0x3FE96544, -/**/ 0x00000000, 0x3FF6C000, -/**/ 0xE1EF2AEE, 0x3F70C9BB, -/**/ 0x00000000, 0x3FE6F000, -/**/ 0xB13786CF, 0x3FF6F23C, -/**/ 0x7B7FC134, 0x3FF0EA20, -/**/ 0x1BD0D518, 0x400066BA, -/**/ 0x159EC945, 0x401202F9, -/**/ 0x16FF868A, 0x40266205, -/**/ 0x87398014, 0x403DB0AD, -/**/ 0x47D58711, 0x40549F33, -/**/ 0x54B11A28, 0x3C8D858F, -/**/ 0x00C1184C, 0x3FE99307, -/**/ 0x00000000, 0x3FF70000, -/**/ 0x90F2626A, 0xBF6B869D, -/**/ 0x00000000, 0x3FE71000, -/**/ 0x7E455603, 0x3FF71474, -/**/ 0x3A65655F, 0x3FF14E40, -/**/ 0x1F4AA7A1, 0x4000FA64, -/**/ 0xB946C70A, 0x4012E9F0, -/**/ 0x3CC53936, 0x4027D43A, -/**/ 0xEE087279, 0x40400675, -/**/ 0x77313CEF, 0x40569278, -/**/ 0x772D6E62, 0xBCAB1BA1, -/**/ 0x9090E874, 0x3FE9C10D, -/**/ 0x00000000, 0x3FF70000, -/**/ 0x455602D3, 0x3F74747E, -/**/ 0x00000000, 0x3FE73000, -/**/ 0x0F773DEC, 0x3FF73778, -/**/ 0x1288B243, 0x3FF1B5EC, -/**/ 0x3A853FA5, 0x40019581, -/**/ 0x6D2743E5, 0x4013DFF0, -/**/ 0x09B4B924, 0x40296415, -/**/ 0x19A59D1F, 0x4041515E, -/**/ 0xF3E53877, 0x4058BD01, -/**/ 0xFC348BAE, 0x3C962269, -/**/ 0x5A90493C, 0x3FE9EF59, -/**/ 0x00000000, 0x3FF74000, -/**/ 0x11842743, 0xBF610FE1, -/**/ 0x00000000, 0x3FE75000, -/**/ 0xAAA78140, 0x3FF75B4E, -/**/ 0x28B49576, 0x3FF22152, -/**/ 0x74D66746, 0x4002388E, -/**/ 0xA43083A8, 0x4014E62E, -/**/ 0x02885ED7, 0x402B146E, -/**/ 0x29A3BC2C, 0x4042BC45, -/**/ 0xCDAFE7E5, 0x405B25D8, -/**/ 0xF03F8A74, 0x3CA8862D, -/**/ 0xFD7DFBD8, 0x3FEA1DEB, -/**/ 0x00000000, 0x3FF74000, -/**/ 0xA7813FBA, 0x3F7B4EAA, -/**/ 0x00000000, 0x3FE77000, -/**/ 0xF4FC0008, 0x3FF77FFF, -/**/ 0xADE499E4, 0x3FF290A3, -/**/ 0xFF22FE11, 0x4002E412, -/**/ 0xD7A17943, 0x4015FDFF, -/**/ 0x8AF79AEF, 0x402CE86F, -/**/ 0x6F8EDF86, 0x40444ACA, -/**/ 0x29CF9F92, 0x405DD50A, -/**/ 0xC5865233, 0x3CA49DB0, -/**/ 0x2702BD90, 0x3FEA4CC7, -/**/ 0x00000000, 0x3FF78000, -/**/ 0xF08268E1, 0xBE6607FF, -/**/ 0x00000000, 0x3FE79000, -/**/ 0xF93D7FBC, 0x3FF7A593, -/**/ 0x1F293A81, 0x3FF30415, -/**/ 0x31649EA4, 0x400398A1, -/**/ 0xED75DA1E, 0x401728D9, -/**/ 0x7B1736CA, 0x402EE3A0, -/**/ 0x036EC9D4, 0x40460106, -/**/ 0xB3E5A09F, 0x406069E8, -/**/ 0x4E8EB882, 0xBCA79BBD, -/**/ 0x94762100, 0x3FEA7BEC, -/**/ 0x00000000, 0x3FF7C000, -/**/ 0xC280445C, 0xBF7A6C06, -/**/ 0x00000000, 0x3FE7B000, -/**/ 0x2EB4E536, 0x3FF7CC13, -/**/ 0x8BD25D7D, 0x3FF37BDE, -/**/ 0xA51DF797, 0x400456D7, -/**/ 0x103AF33E, 0x40186858, -/**/ 0x21121C2E, 0x403084F8, -/**/ 0x9D7C6DE3, 0x4047E39A, -/**/ 0xEF4C9A12, 0x40621664, -/**/ 0x39DB72FF, 0x3C804D2D, -/**/ 0x13B099B0, 0x3FEAAB5E, -/**/ 0x00000000, 0x3FF7C000, -/**/ 0x69CA6C2F, 0x3F68265D, -/**/ 0x00000000, 0x3FE7D000, -/**/ 0x809BA1CD, 0x3FF7F386, -/**/ 0xE298B2EB, 0x3FF3F83B, -/**/ 0x708A6ABE, 0x40051F62, -/**/ 0x090F77AB, 0x4019BE3F, -/**/ 0x6C13BF38, 0x4031AFE2, -/**/ 0x65FF02A8, 0x4049F7CA, -/**/ 0xDA840FE0, 0x4063F614, -/**/ 0xAB5D1A54, 0xBCA7BDE9, -/**/ 0x83EBD320, 0x3FEADB1D, -/**/ 0x00000000, 0x3FF80000, -/**/ 0xC8BC6562, 0xBF68F2FE, -/**/ 0x00000000, 0x3FE7F000, -/**/ 0x562E1E24, 0x3FF81BF7, -/**/ 0x469724DB, 0x3FF4796D, -/**/ 0x86E67917, 0x4005F2FC, -/**/ 0x2F5AE582, 0x401B2C82, -/**/ 0x65EE1919, 0x4032F505, -/**/ 0x4744D220, 0x404C438F, -/**/ 0xD66309FD, 0x40661003, -/**/ 0xFC828894, 0x3C8470C8, -/**/ 0xD6B287DC, 0x3FEB0B2C, -/**/ 0x00000000, 0x3FF80000, -/**/ 0x2E1E23E5, 0x3F7BF756, -/**/ 0x00000000, 0x3FE81000, -/**/ 0x9B70AB1D, 0x3FF8456F, -/**/ 0x6D01A674, 0x3FF4FFB7, -/**/ 0x42D7B667, 0x4006D271, -/**/ 0x05DD4055, 0x401CB549, -/**/ 0xE490CA9B, 0x40345723, -/**/ 0x47C5589B, 0x404ECD17, -/**/ 0x3D6DB036, 0x40686C46, -/**/ 0xECF23C2E, 0x4084044D, -/**/ 0x0D173A5F, 0xBC7F0990, -/**/ 0x10E12D3C, 0x3FEB3B8E, -/**/ 0x00000000, 0x3FF84000, -/**/ 0xC2AC733C, 0x3F55BE6D, -/**/ 0x00000000, 0x3FE83000, -/**/ 0xCAB97B9D, 0x3FF86FF9, -/**/ 0x04A71B42, 0x3FF58B64, -/**/ 0x20C0FB6E, 0x4007BE9E, -/**/ 0x9B426297, 0x401E5AF5, -/**/ 0x013C40EE, 0x4035D958, -/**/ 0x2215E48C, 0x4050CEA9, -/**/ 0xB8C0669A, 0x406B146B, -/**/ 0xFB8EB0FE, 0x40868C96, -/**/ 0x1FCCBAD4, 0x3CA55848, -/**/ 0x4BB8EA98, 0x3FEB6C43, -/**/ 0x00000000, 0x3FF88000, -/**/ 0x46846319, 0xBF700635, -/**/ 0x00000000, 0x3FE85000, -/**/ 0xF71469BF, 0x3FF89BA0, -/**/ 0x28717EFA, 0x3FF61CC2, -/**/ 0xAFB7BAF7, 0x4008B874, -/**/ 0xEC7286DB, 0x40201015, -/**/ 0x8329A469, 0x40377F1F, -/**/ 0x2927F0DD, 0x40525E49, -/**/ 0x5AE80CD9, 0x406E135C, -/**/ 0x40DF64FD, 0x40897364, -/**/ 0x1ED91B03, 0x3C89F53B, -/**/ 0xB6067ABC, 0x3FEB9D4E, -/**/ 0x00000000, 0x3FF88000, -/**/ 0x1469BF33, 0x3F7BA0F7, -/**/ 0x00000000, 0x3FE87000, -/**/ 0xD797DABF, 0x3FF8C870, -/**/ 0xDE42D55F, 0x3FF6B426, -/**/ 0xC0E06552, 0x4009C0FC, -/**/ 0xEB059907, 0x402103EC, -/**/ 0x49A75AA7, 0x40394C6A, -/**/ 0xB2A496D0, 0x40541A81, -/**/ 0x209CB693, 0x4070BAEE, -/**/ 0x285808C5, 0x408CC860, -/**/ 0x9B0DC6F3, 0xBCAE6D8C, -/**/ 0x955EC1C4, 0x3FEBCEB2, -/**/ 0x00000000, 0x3FF8C000, -/**/ 0x2FB57EE7, 0x3F60E1AF, -/**/ 0x00000000, 0x3FE89000, -/**/ 0xD3C502F4, 0x3FF8F675, -/**/ 0xA3BFB2E4, 0x3FF751ED, -/**/ 0xDE3987BC, 0x400AD956, -/**/ 0xB30AAD0A, 0x40220AA0, -/**/ 0x16220014, 0x403B45AB, -/**/ 0xEC84429C, 0x40560929, -/**/ 0x0D747939, 0x4072A569, -/**/ 0x5407F41E, 0x40904F10, -/**/ 0xFC269962, 0xBC675CEB, -/**/ 0x4773138C, 0x3FEC0071, -/**/ 0x00000000, 0x3FF90000, -/**/ 0x75FA1750, 0xBF631458, -/**/ 0x00000000, 0x3FE8B000, -/**/ 0x111125DF, 0x3FF925BD, -/**/ 0x0AD2B4C2, 0x3FF7F679, -/**/ 0x1359A3C8, 0x400C02BF, -/**/ 0x88857C21, 0x40232601, -/**/ 0x2515D90E, 0x403D6FEB, -/**/ 0xD421145E, 0x405830FA, -/**/ 0xFD789544, 0x4074D1D6, -/**/ 0x4B30EBF1, 0x40928561, -/**/ 0x7876F9D2, 0x3CA13E7B, -/**/ 0x437F5E74, 0x3FEC328D, -/**/ 0x00000000, 0x3FF94000, -/**/ 0xEEDA20A4, 0xBF7A42EE, -/**/ 0x00000000, 0x3FE8D000, -/**/ 0x81B9477B, 0x3FF95654, -/**/ 0x67F87779, 0x3FF8A233, -/**/ 0x14665EA0, 0x400D3E90, -/**/ 0x5A415747, 0x40245815, -/**/ 0x1D7511C0, 0x403FD0E1, -/**/ 0x01EC30FB, 0x405A99B6, -/**/ 0xDD7EE7A1, 0x40774A72, -/**/ 0x5C2F1724, 0x40951454, -/**/ 0x774A5205, 0x3C8185B3, -/**/ 0x1BD4AD0C, 0x3FEC6509, -/**/ 0x00000000, 0x3FF94000, -/**/ 0xB9477AC0, 0x3F765481, -/**/ 0x00000000, 0x3FE8F000, -/**/ 0xF50630B5, 0x3FF9884A, -/**/ 0x94B35A8D, 0x3FF9558F, -/**/ 0xD1A32B1D, 0x400E8E46, -/**/ 0x0AEC68DB, 0x4025A31F, -/**/ 0xFD21A759, 0x40413785, -/**/ 0xF56DFCA6, 0x405D4C53, -/**/ 0xF89C0F5F, 0x407A1B45, -/**/ 0xC92C8CF3, 0x40980BB3, -/**/ 0xFEB6A05E, 0xBC8696E8, -/**/ 0x7F82B8CC, 0x3FEC97E7, -/**/ 0x00000000, 0x3FF98000, -/**/ 0x0C6169C6, 0x3F6095EA, -/**/ 0x00000000, 0x3FE91000, -/**/ 0x292BC29F, 0x3FF9BBB0, -/**/ 0xC8E3D76B, 0x3FFA1109, -/**/ 0x8873C480, 0x400FF386, -/**/ 0xDE619C77, 0x402709A6, -/**/ 0x5A9417B9, 0x4042A8E9, -/**/ 0xBFE20B57, 0x4060299D, -/**/ 0xE1225431, 0x407D5283, -/**/ 0xC225406C, 0x409B7E74, -/**/ 0x74F396DB, 0xBC879431, -/**/ 0x3C239888, 0x3FECCB2B, -/**/ 0x00000000, 0x3FF9C000, -/**/ 0x50F5839F, 0xBF513F5B, -/**/ 0x00000000, 0x3FE93000, -/**/ 0xDEF4783D, 0x3FF9F094, -/**/ 0x8E300736, 0x3FFAD528, -/**/ 0xB2D4D4EE, 0x4010B80E, -/**/ 0x3F3D0057, 0x40288E84, -/**/ 0xD20263C0, 0x404440D4, -/**/ 0x26E14927, 0x4061DD42, -/**/ 0x5EF13D09, 0x4080807D, -/**/ 0xFE9E94BE, 0x409F836C, -/**/ 0xE5FD9D2D, 0xBC813C84, -/**/ 0x3FCCF104, 0x3FECFED7, -/**/ 0x00000000, 0x3FFA0000, -/**/ 0x170F854B, 0xBF6ED642, -/**/ 0x00000000, 0x3FE95000, -/**/ 0xEF70C9F9, 0x3FFA270A, -/**/ 0xD12662D9, 0x3FFBA27D, -/**/ 0xE8433B59, 0x40118304, -/**/ 0x1B4DD8D9, 0x402A34E9, -/**/ 0x58AA354C, 0x4046041F, -/**/ 0x87EB035B, 0x4063C823, -/**/ 0x7F89A6B6, 0x40829D4E, -/**/ 0xB4BED54D, 0x40A21B1A, -/**/ 0xFD8283D4, 0x3C855D66, -/**/ 0x9B2A7684, 0x3FED32EE, -/**/ 0x00000000, 0x3FFA4000, -/**/ 0x8F3606B9, 0xBF78F510, -/**/ 0x00000000, 0x3FE97000, -/**/ 0x63EA127F, 0x3FFA5F25, -/**/ 0x1460C218, 0x3FFC79A8, -/**/ 0x3D14975C, 0x40125BC0, -/**/ 0x2249DB66, 0x402C006F, -/**/ 0xED0AEFCD, 0x4047F856, -/**/ 0x2E2028D0, 0x4065F27F, -/**/ 0x6CE59595, 0x40850B95, -/**/ 0x18C497E2, 0x40A4DC23, -/**/ 0x76BA54CA, 0x3C8BDFAE, -/**/ 0x83C60554, 0x3FED6774, -/**/ 0x00000000, 0x3FFA4000, -/**/ 0xEA127F53, 0x3F7F2563, -/**/ 0x00000000, 0x3FE99000, -/**/ 0x9061CEFE, 0x3FFA98F8, -/**/ 0xCAA1F466, 0x3FFD5B53, -/**/ 0xA92630E8, 0x40134379, -/**/ 0x41E37357, 0x402DF527, -/**/ 0xD7DE2305, 0x404A23DF, -/**/ 0x1911C50F, 0x406865FE, -/**/ 0xD5CE543D, 0x4087D981, -/**/ 0x2134A322, 0x40A8192E, -/**/ 0x4FE6DAC8, 0xBC915CF9, -/**/ 0x56821F74, 0x3FED9C6C, -/**/ 0x00000000, 0x3FFA8000, -/**/ 0x61CEFDBB, 0x3F78F890, -/**/ 0x00000000, 0x3FE9B000, -/**/ 0x30F0DACC, 0x3FFAD49A, -/**/ 0xDDBFEE70, 0x3FFE483C, -/**/ 0xC4418459, 0x40143B8C, -/**/ 0xE6E7E816, 0x40300BD5, -/**/ 0x02EE200E, 0x404C8E1A, -/**/ 0x83038A03, 0x406B2DFC, -/**/ 0xD987E3D9, 0x408B1814, -/**/ 0x8827CEFA, 0x40ABEB1E, -/**/ 0xE22AFCE0, 0x3CA8829A, -/**/ 0x9A4C39D0, 0x3FEDD1D9, -/**/ 0x00000000, 0x3FFAC000, -/**/ 0xF0DACB86, 0x3F749A30, -/**/ 0x00000000, 0x3FE9D000, -/**/ 0x8A66E40D, 0x3FFB1221, -/**/ 0x692DC10A, 0x3FFF4130, -/**/ 0x64621A80, 0x4015457C, -/**/ 0xED2A1AB4, 0x4031369A, -/**/ 0xBC003A70, 0x404F3F8D, -/**/ 0x462E99D6, 0x406E57E1, -/**/ 0xC53F5717, 0x408EDBC2, -/**/ 0x0A71E453, 0x40B0383D, -/**/ 0xBEDD86A9, 0x3C90AF9F, -/**/ 0x030CF708, 0x3FEE07C0, -/**/ 0x00000000, 0x3FFB0000, -/**/ 0x66E40CBE, 0x3F72218A, -/**/ 0x00000000, 0x3FE9F000, -/**/ 0x8E9927E5, 0x3FFB51A7, -/**/ 0x581637B3, 0x40002387, -/**/ 0xF5B2C17E, 0x401662F7, -/**/ 0x36EAC07E, 0x40327DDB, -/**/ 0xC70D9C43, 0x40512110, -/**/ 0x88C52943, 0x4070F9C4, -/**/ 0xB1AB4848, 0x40919E9E, -/**/ 0xB1EC7695, 0x40B2E76B, -/**/ 0x5E9F6FD9, 0x3CAA2400, -/**/ 0x74DD3C64, 0x3FEE3E23, -/**/ 0x00000000, 0x3FFB4000, -/**/ 0x9927E571, 0x3F71A78E, -/**/ 0x00000000, 0x3FEA1000, -/**/ 0x04E0F95F, 0x3FFB9347, -/**/ 0xAC8DC27B, 0x4000AD66, -/**/ 0xAE05A580, 0x401795E1, -/**/ 0x299AA0A0, 0x4033E4FA, -/**/ 0xA33AB75C, 0x4052D0AD, -/**/ 0x39D64C89, 0x407309E5, -/**/ 0x154C34C4, 0x40942D39, -/**/ 0x59D15B1D, 0x40B61A59, -/**/ 0x114BE565, 0xBCAFC899, -/**/ 0x0787FD30, 0x3FEE7508, -/**/ 0x00000000, 0x3FFB8000, -/**/ 0xE0F95E8B, 0x3F734704, -/**/ 0x00000000, 0x3FEA3000, -/**/ 0xB75F37A1, 0x3FFBD71C, -/**/ 0xFC9006E1, 0x40013EBC, -/**/ 0xC48D2C09, 0x4018E055, -/**/ 0xC2C8C9CD, 0x40356FD7, -/**/ 0x6198B971, 0x4054B557, -/**/ 0x9680F9AF, 0x4075678C, -/**/ 0x8AF946DD, 0x40972BE5, -/**/ 0xE1B531F9, 0x40B9EDE4, -/**/ 0xE4527544, 0xBC447F69, -/**/ 0x0A61AD1C, 0x3FEEAC72, -/**/ 0x00000000, 0x3FFBC000, -/**/ 0x5F37A0DF, 0x3F771CB7, -/**/ 0x00000000, 0x3FEA5000, -/**/ 0xA5B24F80, 0x3FFC1D47, -/**/ 0x7EB9F789, 0x4001D81E, -/**/ 0xDF42B6B7, 0x401A44B2, -/**/ 0xB4766752, 0x403722E5, -/**/ 0xECFADFF0, 0x4056D6EE, -/**/ 0x8B1EB8D5, 0x40782028, -/**/ 0xCA840144, 0x409AB0E2, -/**/ 0xE2126BBF, 0x40BE8614, -/**/ 0x2CC624E2, 0xBC8D9A93, -/**/ 0x087F8D20, 0x3FEEE466, -/**/ 0x00000000, 0x3FFC0000, -/**/ 0xB24F8064, 0x3F7D47A5, -/**/ 0x00000000, 0x3FEA7000, -/**/ 0x3DE98207, 0x3FFC65E9, -/**/ 0x811F641B, 0x40027A2E, -/**/ 0xF223266D, 0x401BC5A3, -/**/ 0xA6ECBE29, 0x40390340, -/**/ 0xC3D499AF, 0x40593EB6, -/**/ 0xAD8CC2F1, 0x407B43D9, -/**/ 0xA519B816, 0x409ED77C, -/**/ 0x5B3B703B, 0x40C2080A, -/**/ 0xE993C3DD, 0x3C7B187D, -/**/ 0xCD5A7CE8, 0x3FEF1CE8, -/**/ 0x00000000, 0x3FFC8000, -/**/ 0x167DF937, 0xBF7A16C2, -/**/ 0x00000000, 0x3FEA9000, -/**/ 0x9CA2F05E, 0x3FFCB125, -/**/ 0x54FC4C95, 0x400325A1, -/**/ 0xD9C5FF75, 0x401D662B, -/**/ 0x8E93577D, 0x403B16CE, -/**/ 0xE0E3029E, 0x405BF79A, -/**/ 0x04BCDF91, 0x407EE612, -/**/ 0x31EFE3F1, 0x40A1E0AC, -/**/ 0x85DF051C, 0x40C56267, -/**/ 0x2D0BC06E, 0xBCAD6122, -/**/ 0x69EAB2F0, 0x3FEF55FF, -/**/ 0x00000000, 0x3FFCC000, -/**/ 0xBA1F43E4, 0xBF6DB4C6, -/**/ 0x00000000, 0x3FEAB000, -/**/ 0xD56B9F55, 0x3FFCFF23, -/**/ 0x86149A3B, 0x4003DB3E, -/**/ 0x0B8D0DAD, 0x401F29B3, -/**/ 0x40E9D1A7, 0x403D6463, -/**/ 0x619D6679, 0x405F0E89, -/**/ 0x92CF3FBC, 0x40818F2E, -/**/ 0x844E51BD, 0x40A4CC10, -/**/ 0xF3A9EB60, 0x40C9762D, -/**/ 0xEF4B1E02, 0x3CA20E79, -/**/ 0x3A4BC01C, 0x3FEF8FAF, -/**/ 0x00000000, 0x3FFD0000, -/**/ 0x8C156248, 0xBF2B8552, -/**/ 0x00000000, 0x3FEAD000, -/**/ 0x44AAD4F2, 0x3FFD500E, -/**/ 0x6B85DB68, 0x40049BE3, -/**/ 0xE558F351, 0x40208A0B, -/**/ 0xC1BCC632, 0x403FF3EC, -/**/ 0x2A555E45, 0x40614970, -/**/ 0xDD057F33, 0x408404AE, -/**/ 0x22610A18, 0x40A847D9, -/**/ 0x3C7AA2B4, 0x40CE7146, -/**/ 0x53CA14EC, 0xBC9571D0, -/**/ 0xEBFAA348, 0x3FEFC9FD, -/**/ 0x00000000, 0x3FFD4000, -/**/ 0xAAD4F267, 0x3F700E44, -/**/ 0x00000000, 0x3FEAF000, -/**/ 0xEC9EDC5A, 0x3FFDA412, -/**/ 0x22B6D908, 0x40056886, -/**/ 0xB605B3B4, 0x402194E0, -/**/ 0x9338560C, 0x40416754, -/**/ 0x34B16169, 0x40634B7B, -/**/ 0x3B1BAF9C, 0x4086E508, -/**/ 0xFB9DFBF5, 0x40AC7475, -/**/ 0xF4B4BB01, 0x40D2473E, -/**/ 0xE9F06EFC, 0x3CA82B31, -/**/ 0xC2613F02, 0x3FF00278, -/**/ 0x00000000, 0x3FFDC000, -/**/ 0x6123A5D1, 0xBF7BED13, -/**/ 0x00000000, 0x3FEB1000, -/**/ 0xDF3AE0DB, 0x3FFDFB63, -/**/ 0x08AD38CF, 0x40064239, -/**/ 0xAA166573, 0x4022B7DB, -/**/ 0x38210D3E, 0x4042FFB4, -/**/ 0xFB634456, 0x40659862, -/**/ 0xEE8F3E34, 0x408A45B4, -/**/ 0xD39A6C6F, 0x40B0BD59, -/**/ 0x2B4867E8, 0x40D60CCD, -/**/ 0x1CBB85B3, 0xBCA6097F, -/**/ 0x3537E800, 0x3FF02048, -/**/ 0x00000000, 0x3FFE0000, -/**/ 0x147C93ED, 0xBF527083, -/**/ 0x00000000, 0x3FEB3000, -/**/ 0xB70F5F72, 0x3FFE5637, -/**/ 0xCA935102, 0x40072A2E, -/**/ 0x43559218, 0x4023F5DE, -/**/ 0xB4E19CA3, 0x4044C96E, -/**/ 0x1272DDA3, 0x40683D62, -/**/ 0xC6BFAAED, 0x408E4135, -/**/ 0x099FB249, 0x40B3C717, -/**/ 0xD5294F7D, 0x40DABA6D, -/**/ 0xC91FFA21, 0x3CA488B1, -/**/ 0xB5B309E0, 0x3FF03E70, -/**/ 0x00000000, 0x3FFE4000, -/**/ 0x0F5F723E, 0x3F7637B7, -/**/ 0x00000000, 0x3FEB5000, -/**/ 0x21D4B842, 0x3FFEB4CA, -/**/ 0x2BE08FC5, 0x400821BF, -/**/ 0x6A6A3BD0, 0x40255238, -/**/ 0xBAC907E2, 0x4046CC00, -/**/ 0x94202458, 0x406B4A78, -/**/ 0xFE065CA6, 0x40917C35, -/**/ 0xE8D5B845, 0x40B77848, -/**/ 0x0CD72D76, 0x40E04820, -/**/ 0x9CBE508B, 0x3CA54B6E, -/**/ 0xE41C2ACE, 0x3FF05CF5, -/**/ 0x00000000, 0x3FFEC000, -/**/ 0x568F7C18, 0xBF666BBC, -/**/ 0x00000000, 0x3FEB7000, -/**/ 0x7FB6EB26, 0x3FFF175C, -/**/ 0xA7BA9C35, 0x40092A6C, -/**/ 0x80F5BA9F, 0x4026D0BC, -/**/ 0x33BD74FB, 0x40491048, -/**/ 0x61FCE21F, 0x406ED319, -/**/ 0x60DF5AED, 0x40944A2E, -/**/ 0x1AC97175, 0x40BBFAFC, -/**/ 0xC3A8BC22, 0x40E3F145, -/**/ 0xA70A42D9, 0xBC994B5D, -/**/ 0x9F358760, 0x3FF07BDB, -/**/ 0x00000000, 0x3FFF0000, -/**/ 0xB6EB2582, 0x3F775C7F, -/**/ 0x00000000, 0x3FEB9000, -/**/ 0x9B29492C, 0x3FFF7E36, -/**/ 0x1C35AD8A, 0x400A45EB, -/**/ 0xC8373BB1, 0x402875D7, -/**/ 0x885E6AE6, 0x404BA0D1, -/**/ 0x0831631E, 0x40717784, -/**/ 0x7F51DA78, 0x4097A441, -/**/ 0x6D7642FB, 0x40C0C2B2, -/**/ 0x594961FB, 0x40E89073, -/**/ 0x96CDC181, 0xBCA5DECE, -/**/ 0x0A46374E, 0x3FF09B26, -/**/ 0x00000000, 0x3FFF8000, -/**/ 0x6B6D3D05, 0xBF3C964D, -/**/ 0x00000000, 0x3FEBB000, -/**/ 0x7DD9B1CF, 0x3FFFE9A7, -/**/ 0xB9AE77AF, 0x400B7627, -/**/ 0x3338306D, 0x402A46B0, -/**/ 0xA0CAACE9, 0x404E8A38, -/**/ 0x864F53A2, 0x4073DDBB, -/**/ 0xD6C97F8D, 0x409BAAF0, -/**/ 0xDFAE5A98, 0x40C42EEF, -/**/ 0xE19501DA, 0x40EE701A, -/**/ 0xC7D3D675, 0x3C9CC4F4, -/**/ 0x93EC49AE, 0x3FF0BAD9, -/**/ 0x00000000, 0x40000000, -/**/ 0x264E310D, 0xBF765882, -/**/ 0x00000000, 0x3FEBD000, -/**/ 0x34302F3B, 0x40002D03, -/**/ 0x7F5AAF0D, 0x400CBD52, -/**/ 0x0C635C0A, 0x402C4949, -/**/ 0xB6BB1732, 0x4050EDD1, -/**/ 0x9691A9F4, 0x4076AE3D, -/**/ 0x61482FC6, 0x40A043C7, -/**/ 0xF81EB6E0, 0x40C87037, -/**/ 0xE84FE55E, 0x40F2FA30, -/**/ 0x228FC41D, 0xBC9820F1, -/**/ 0xFDD4AE68, 0x3FF0DAFA, -/**/ 0x00000000, 0x40002000, -/**/ 0x605E76B0, 0x3F7A0668, -/**/ 0x00000000, 0x3FEBF000, -/**/ 0xF9C947A3, 0x400067D9, -/**/ 0xA1722882, 0x400E1DE9, -/**/ 0x41FE0247, 0x402E84B0, -/**/ 0xDBD1D676, 0x4052D3AE, -/**/ 0xE088BEF5, 0x4079FF78, -/**/ 0x64D9A484, 0x40A33780, -/**/ 0x1974F9B5, 0x40CDC32D, -/**/ 0xCE268611, 0x40F7D295, -/**/ 0xD437D23F, 0xBCA5A192, -/**/ 0x657EFDCA, 0x3FF0FB8F, -/**/ 0x00000000, 0x40006000, -/**/ 0x251E8CF3, 0x3F6F67E7, -/**/ 0x00000000, 0x3FEC1000, -/**/ 0xB1FFFA6D, 0x4000A58D, -/**/ 0x4E7307C3, 0x400F9AC7, -/**/ 0x5EA15962, 0x4030809B, -/**/ 0x5418E1B6, 0x405501D0, -/**/ 0xB476D79F, 0x407DED80, -/**/ 0x37F33D5F, 0x40A6D2BF, -/**/ 0xA43F6C6F, 0x40D23C31, -/**/ 0xDB17BBAA, 0x40FE1E46, -/**/ 0x41D8AD56, 0xBCA7EB62, -/**/ 0x4E3ADE0A, 0x3FF11C9C, -/**/ 0x00000000, 0x4000A000, -/**/ 0xFFE9B457, 0x3F6636C7, -/**/ 0x00000000, 0x3FEC3000, -/**/ 0x1D1BDCC6, 0x4000E65A, -/**/ 0x3503CCCE, 0x40109B99, -/**/ 0x7580EC24, 0x4031E45B, -/**/ 0x1803E176, 0x405785CA, -/**/ 0x8458A77D, 0x40814DDB, -/**/ 0x6C115AB7, 0x40AB41D9, -/**/ 0xD7BCE584, 0x40D67DF0, -/**/ 0xF5487646, 0x41032EF5, -/**/ 0xF3631254, 0xBC9C4040, -/**/ 0xAC964DA8, 0x3FF13E27, -/**/ 0x00000000, 0x4000E000, -/**/ 0x6F731770, 0x3F696874, -/**/ 0x00000000, 0x3FEC5000, -/**/ 0x068FBCB4, 0x40012A82, -/**/ 0x7FE89A5F, 0x40117B79, -/**/ 0xD37F3897, 0x40337376, -/**/ 0xDF3B47A2, 0x405A704E, -/**/ 0xEB114449, 0x40841B83, -/**/ 0x8D323120, 0x40B05F75, -/**/ 0x8AE65DDD, 0x40DBEFEC, -/**/ 0xD1814341, 0x4108A2A2, -/**/ 0xFB25EC76, 0x3CA3E83D, -/**/ 0xF37FFEDA, 0x3FF16037, -/**/ 0x00000000, 0x40012000, -/**/ 0x1F796787, 0x3F75040D, -/**/ 0x00000000, 0x3FEC7000, -/**/ 0x5F8F574B, 0x40017250, -/**/ 0xB566493D, 0x40126F35, -/**/ 0x95186E3D, 0x403534F5, -/**/ 0x947D5EA5, 0x405DD60B, -/**/ 0x568C5D73, 0x40877C77, -/**/ 0xA26261F0, 0x40B3CB66, -/**/ 0xBF32194D, 0x40E17B06, -/**/ 0x11490E42, 0x410FE921, -/**/ 0x5376CB61, 0xBCA34428, -/**/ 0x236FE314, 0x3FF182D4, -/**/ 0x00000000, 0x40018000, -/**/ 0xE15169A9, 0xBF7B5F40, -/**/ 0x00000000, 0x3FEC9000, -/**/ 0x91B4C8D8, 0x4001BE19, -/**/ 0xBE69BAE6, 0x4013795B, -/**/ 0xCD6F8B02, 0x40373151, -/**/ 0xD86A7BFF, 0x4060E864, -/**/ 0x515F5BD6, 0x408B95CC, -/**/ 0xD070B4A1, 0x40B8180C, -/**/ 0xC9B24D80, 0x40E60D2C, -/**/ 0xAA392CAF, 0x4114DBF6, -/**/ 0xF5844C55, 0xBCA89BD0, -/**/ 0xDBFAF236, 0x3FF1A603, -/**/ 0x00000000, 0x4001C000, -/**/ 0xB37285FC, 0xBF4E66E4, -/**/ 0x00000000, 0x3FECB000, -/**/ 0x1757F6B1, 0x40020E3D, -/**/ 0xAE890640, 0x40149CE9, -/**/ 0xD6174F60, 0x403972D4, -/**/ 0x8C82DF92, 0x40634079, -/**/ 0xACAB5569, 0x40904BE6, -/**/ 0xB362E75A, 0x40BD8A99, -/**/ 0x389374DC, 0x40EC0ED7, -/**/ 0xCA5E9653, 0x411B8ADF, -/**/ 0x4A1E3E49, 0xBC80CBC7, -/**/ 0x704F5D26, 0x3FF1C9CF, -/**/ 0x00000000, 0x40020000, -/**/ 0xAFED62A2, 0x3F7C7A2E, -/**/ 0x00000000, 0x3FECD000, -/**/ 0x6B3395AA, 0x40026327, -/**/ 0x33FB1467, 0x4015DD66, -/**/ 0xDCF3437C, 0x403C0610, -/**/ 0xC9D7C47A, 0x406607CE, -/**/ 0xA330DC5C, 0x409360FB, -/**/ 0x38A3194B, 0x40C240B4, -/**/ 0xBAA6A879, 0x40F20437, -/**/ 0x04D6F19C, 0x41226106, -/**/ 0x15E5252C, 0x3CABCCF5, -/**/ 0xFF35681A, 0x3FF1EE3F, -/**/ 0x00000000, 0x40026000, -/**/ 0x9CAD4CE9, 0x3F593B59, -/**/ 0x00000000, 0x3FECF000, -/**/ 0x664A8350, 0x4002BD54, -/**/ 0x945190A0, 0x40173EFF, -/**/ 0xC7CC5224, 0x403EFA80, -/**/ 0x896F1658, 0x406958AA, -/**/ 0x4FD54E04, 0x40973450, -/**/ 0x4CD60C4A, 0x40C6BF55, -/**/ 0x3EFFD07C, 0x40F75EBE, -/**/ 0x9E2E6981, 0x4128D03C, -/**/ 0xC8A488FF, 0xBC987CEE, -/**/ 0x8F597306, 0x3FF2135F, -/**/ 0x00000000, 0x4002C000, -/**/ 0xABE583FE, 0xBF555CCD, -/**/ 0x00000000, 0x3FED1000, -/**/ 0x2A40EA5C, 0x40031D52, -/**/ 0x52B4947D, 0x4018C6B3, -/**/ 0x5D01146E, 0x404131AE, -/**/ 0x0163E71C, 0x406D54FB, -/**/ 0xEF3ED15B, 0x409BFE8A, -/**/ 0xA33A6B00, 0x40CC9C28, -/**/ 0x1456E1A6, 0x40FEA523, -/**/ 0xFC8790DB, 0x4130F60F, -/**/ 0x6FABCA41, 0x3CAC104F, -/**/ 0x30D87C68, 0x3FF23939, -/**/ 0x00000000, 0x40032000, -/**/ 0xF8AD1CF9, 0xBF556EAD, -/**/ 0x00000000, 0x3FED3000, -/**/ 0xC053C623, 0x400383C4, -/**/ 0x6ADBFF2C, 0x401A7A81, -/**/ 0xE219A24E, 0x40432C5B, -/**/ 0x30F4B8D8, 0x40711484, -/**/ 0xBC59423E, 0x40A10659, -/**/ 0x3D537AE5, 0x40D22C09, -/**/ 0xA4B7D930, 0x410454A2, -/**/ 0xC151F3C3, 0x41378151, -/**/ 0x779E9951, 0xBCA2F226, -/**/ 0x254E3F9C, 0x3FF25FD9, -/**/ 0x00000000, 0x40038000, -/**/ 0x9E311A8B, 0x3F5E2602, -/**/ 0x00000000, 0x3FED5000, -/**/ 0xA2F65F8C, 0x4003F16A, -/**/ 0x36C0308E, 0x401C61AF, -/**/ 0x5337FF7D, 0x40457C82, -/**/ 0x7FB84BA9, 0x407407A3, -/**/ 0x4C74DEA7, 0x40A4E476, -/**/ 0xDF1C2124, 0x40D75638, -/**/ 0xA2556E94, 0x410B5320, -/**/ 0x7D68ABBE, 0x414087CD, -/**/ 0x73A87AB9, 0xBCACD58C, -/**/ 0x10017B06, 0x3FF2874D, -/**/ 0x00000000, 0x40040000, -/**/ 0x1340E849, 0xBF7D2ABA, -/**/ 0x00000000, 0x3FED7000, -/**/ 0x7BA9A810, 0x40046722, -/**/ 0xCBC74735, 0x401E851F, -/**/ 0xF3879985, 0x40483596, -/**/ 0xCD297F00, 0x4077AAEB, -/**/ 0x31669F50, 0x40A9E3C8, -/**/ 0xB7CBB664, 0x40DE5420, -/**/ 0xB75100A0, 0x41129F7B, -/**/ 0x51D127BF, 0x4147A1C1, -/**/ 0x46D9C78F, 0x3CAC647E, -/**/ 0x304962AE, 0x3FF2AFA4, -/**/ 0x00000000, 0x40046000, -/**/ 0xA6A041C9, 0x3F6C89EE, -/**/ 0x00000000, 0x3FED9000, -/**/ 0x7A99A835, 0x4004E5F2, -/**/ 0x15B0232D, 0x402077E5, -/**/ 0xEE468866, 0x404B70C1, -/**/ 0x43A041C3, 0x407C334A, -/**/ 0x53D2C164, 0x40B036D1, -/**/ 0x10CCEDBE, 0x40E3F7B1, -/**/ 0xF6C2E560, 0x4119C160, -/**/ 0x6D21D20F, 0x415131DD, -/**/ 0x2EC50766, 0x41878683, -/**/ 0xD1134ECC, 0xBCA95596, -/**/ 0xA8F4B028, 0x3FF2D8EF, -/**/ 0x00000000, 0x4004E000, -/**/ 0x66A0D2C7, 0x3F67C9EA, -/**/ 0x00000000, 0x3FEDB000, -/**/ 0xD6373B90, 0x40056F11, -/**/ 0xC3747DF3, 0x4021D7AC, -/**/ 0x6A014D6F, 0x404F4EF3, -/**/ 0x505C454B, 0x4080F4C4, -/**/ 0x214975C5, 0x40B48D16, -/**/ 0xF57BFAC6, 0x40EAACFD, -/**/ 0x5225A6ED, 0x41222235, -/**/ 0xACBA67AB, 0x41598643, -/**/ 0xDE5D19B9, 0x419267B9, -/**/ 0x42C92439, 0xBCAEF63C, -/**/ 0xD86BED76, 0x3FF30342, -/**/ 0x00000000, 0x40056000, -/**/ 0x6E771F48, 0x3F7E23AC, -/**/ 0x00000000, 0x3FEDD000, -/**/ 0x3D2D8CF1, 0x400603F5, -/**/ 0xEF4A10FA, 0x40236A84, -/**/ 0x4EA265AF, 0x4051FDF3, -/**/ 0xD944F636, 0x408499B5, -/**/ 0x37F73BAC, 0x40BA64B8, -/**/ 0x259B27FC, 0x40F21B9F, -/**/ 0x265D5B9F, 0x412A0669, -/**/ 0x3DC806E2, 0x41635D8E, -/**/ 0x36AD8B00, 0x419D8657, -/**/ 0x3FFCDCA3, 0x3CA4CEEB, -/**/ 0xC69D2D10, 0x3FF32EB3, -/**/ 0x00000000, 0x40060000, -/**/ 0x6C678625, 0x3F5FA9E9, -/**/ 0x00000000, 0x3FEDF000, -/**/ 0x5FCDF915, 0x4006A65F, -/**/ 0x68321BDA, 0x40253B6E, -/**/ 0x706E8DA9, 0x4054D949, -/**/ 0x4A70D2D7, 0x408950EF, -/**/ 0x1F15E14E, 0x40C13319, -/**/ 0x846A9BD5, 0x40F907B1, -/**/ 0x17C39016, 0x4133139C, -/**/ 0xBC86F11B, 0x416E1DA3, -/**/ 0xD9F86F3B, 0x41A8597F, -/**/ 0x7D0D5190, 0x3C32D4F8, -/**/ 0xAFA88354, 0x3FF35B5B, -/**/ 0x00000000, 0x4006A000, -/**/ 0x37E455FD, 0x3F697D7F, -/**/ 0x00000000, 0x3FEE1000, -/**/ 0x41D1DBF9, 0x40075877, -/**/ 0xF5852184, 0x402758A8, -/**/ 0x65C0F467, 0x405861EE, -/**/ 0xD2D91276, 0x408F83C0, -/**/ 0x43EC3B0E, 0x40C6CA7C, -/**/ 0x718322C8, 0x4101A722, -/**/ 0x9533D806, 0x413CA4C6, -/**/ 0xE9899583, 0x417812B7, -/**/ 0x85EE8B86, 0x41B4B875, -/**/ 0xD1AEEED1, 0xBC99DEFB, -/**/ 0xB510476E, 0x3FF38957, -/**/ 0x00000000, 0x40076000, -/**/ 0xB8901BF9, 0xBF6E22F8, -/**/ 0x00000000, 0x3FEE3000, -/**/ 0xE1C37E57, 0x40081CE6, -/**/ 0xD3DC9910, 0x4029D4F3, -/**/ 0xE3095065, 0x405CD074, -/**/ 0xC5C38224, 0x4093E764, -/**/ 0x3CAE1F31, 0x40CEC5AE, -/**/ 0xC0645F38, 0x41097A50, -/**/ 0xD8A7F25E, 0x41461866, -/**/ 0x8C2F04A3, 0x4183DAF5, -/**/ 0xA9143C1F, 0x41C2450E, -/**/ 0x9FD995BC, 0x3C7D25BE, -/**/ 0xC35D33E6, 0x3FF3B8C9, -/**/ 0x00000000, 0x40082000, -/**/ 0xE40D49E0, 0xBF58C8F1, -/**/ 0x00000000, 0x3FEE5000, -/**/ 0x285640BB, 0x4008F706, -/**/ 0x3B2B7CD1, 0x402CC96B, -/**/ 0xC5341328, 0x40613ADF, -/**/ 0x16E928A9, 0x4099908D, -/**/ 0x7CC08A3C, 0x40D53986, -/**/ 0x31DD3E45, 0x4112DFC5, -/**/ 0xE2A13787, 0x41519499, -/**/ 0xF94424AD, 0x4190F943, -/**/ 0xCDCD49BE, 0x41D0C6BC, -/**/ 0x6D41701D, 0xBC9E2458, -/**/ 0xC088BD28, 0x3FF3E9D9, -/**/ 0x00000000, 0x40090000, -/**/ 0x537E8A00, 0xBF71F3AF, -/**/ 0x00000000, 0x3FEE7000, -/**/ 0x6562D1E0, 0x4009EB18, -/**/ 0x75651223, 0x40302C31, -/**/ 0x336E41C7, 0x4064E431, -/**/ 0xA065DA69, 0x40A0BCA6, -/**/ 0x917AF357, 0x40DE034D, -/**/ 0x4168FB0F, 0x411CD2C1, -/**/ 0x15BB794D, 0x415CFEB6, -/**/ 0x6EFFD5E5, 0x419E3EE1, -/**/ 0x1ACB4D9C, 0x41E024E7, -/**/ 0xD93F153F, 0xBC9C29C8, -/**/ 0x2183E810, 0x3FF41CB7, -/**/ 0x00000000, 0x4009E000, -/**/ 0xC5A3C038, 0x3F7630CA, -/**/ 0x00000000, 0x3FEE9000, -/**/ 0xA364196F, 0x400AFEA6, -/**/ 0x0B19A2EB, 0x403258F3, -/**/ 0x2520AC75, 0x4069BDA5, -/**/ 0x8F67EDEA, 0x40A669BC, -/**/ 0xC026C9F8, 0x40E5D78C, -/**/ 0x1E3B36C2, 0x4126CCB4, -/**/ 0xBF45C805, 0x4168EDE4, -/**/ 0x8AC89E76, 0x41AC2F6A, -/**/ 0x4CA9EB55, 0x41F0675E, -/**/ 0x0D13E3DF, 0x42336AC1, -/**/ 0xF2DE93A6, 0x3C9B1D74, -/**/ 0x155FB22E, 0x3FF4519B, -/**/ 0x00000000, 0x400B0000, -/**/ 0xBE690E67, 0xBF4595C9, -/**/ 0x00000000, 0x3FEEB000, -/**/ 0x4BD1C065, 0x400C3908, -/**/ 0x26C39FFD, 0x40350D88, -/**/ 0x69D3E79E, 0x4070296B, -/**/ 0xD7FEEA5D, 0x40AED279, -/**/ 0xFD5BD547, 0x40F072A8, -/**/ 0x4A08BB38, 0x4132CDB9, -/**/ 0x536BED06, 0x41768482, -/**/ 0x2F10E88D, 0x41BBE1FF, -/**/ 0xABDBBDAC, 0x4201C966, -/**/ 0x02E62DDA, 0x42471011, -/**/ 0x3E907E71, 0xBCA0855D, -/**/ 0x8FA73920, 0x3FF488CB, -/**/ 0x00000000, 0x400C4000, -/**/ 0xB8FE6DDF, 0xBF6BDED0, -/**/ 0x00000000, 0x3FEED000, -/**/ 0x12AAF9A9, 0x400DA439, -/**/ 0x62F25109, 0x40387D46, -/**/ 0x3F133A3F, 0x4074C339, -/**/ 0x662036F9, 0x40B5E143, -/**/ 0x74467831, 0x40F9CF04, -/**/ 0x576C6FA8, 0x41404E10, -/**/ 0xFF4F8E88, 0x41859489, -/**/ 0xB44962A9, 0x41CD88D2, -/**/ 0x97A288F3, 0x4214D838, -/**/ 0x6CF738B3, 0x425DE10B, -/**/ 0x5F7263CC, 0xBC8E9EA7, -/**/ 0xAA786F36, 0x3FF4C29F, -/**/ 0x00000000, 0x400DA000, -/**/ 0xABE6A2AD, 0x3F60E44A, -/**/ 0x00000000, 0x3FEEF000, -/**/ 0xC169B52F, 0x400F4E35, -/**/ 0x29E8699C, 0x403CF773, -/**/ 0xFC1818D6, 0x407B6D37, -/**/ 0x1386790A, 0x40C02655, -/**/ 0x4FF79D1E, 0x41054A1F, -/**/ 0x7DB0265A, 0x414E104A, -/**/ 0xE5C8114B, 0x41963C39, -/**/ 0xF52A87DB, 0x41E10156, -/**/ 0x2E9E7ABE, 0x422ADD76, -/**/ 0x6EC81361, 0x427586AB, -/**/ 0xE395EEA6, 0x3C935690, -/**/ 0x2E5965A2, 0x3FF4FF86, -/**/ 0x00000000, 0x400F4000, -/**/ 0xD36A5E70, 0x3F7C6B82 } }; - -#endif -#endif diff --git a/sysdeps/ieee754/dbl-64/atnat.h b/sysdeps/ieee754/dbl-64/atnat.h deleted file mode 100644 index 3ba064ae59..0000000000 --- a/sysdeps/ieee754/dbl-64/atnat.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/************************************************************************/ -/* MODULE_NAME: atnat.h */ -/* */ -/* */ -/* common data and variables definition for BIG or LITTLE ENDIAN */ -/************************************************************************/ -#ifndef ATNAT_H -#define ATNAT_H - -#define M 4 - -#ifdef BIG_ENDI - static const number - /* polynomial I */ -/**/ d3 = {{0xbfd55555, 0x55555555} }, /* -0.333... */ -/**/ d5 = {{0x3fc99999, 0x999997fd} }, /* 0.199... */ -/**/ d7 = {{0xbfc24924, 0x923f7603} }, /* -0.142... */ -/**/ d9 = {{0x3fbc71c6, 0xe5129a3b} }, /* 0.111... */ -/**/ d11 = {{0xbfb74580, 0x22b13c25} }, /* -0.090... */ -/**/ d13 = {{0x3fb375f0, 0x8b31cbce} }, /* 0.076... */ - /* polynomial II */ -/**/ f3 = {{0xbfd55555, 0x55555555} }, /* -1/3 */ -/**/ ff3 = {{0xbc755555, 0x55555555} }, /* -1/3-f3 */ -/**/ f5 = {{0x3fc99999, 0x9999999a} }, /* 1/5 */ -/**/ ff5 = {{0xbc699999, 0x9999999a} }, /* 1/5-f5 */ -/**/ f7 = {{0xbfc24924, 0x92492492} }, /* -1/7 */ -/**/ ff7 = {{0xbc624924, 0x92492492} }, /* -1/7-f7 */ -/**/ f9 = {{0x3fbc71c7, 0x1c71c71c} }, /* 1/9 */ -/**/ ff9 = {{0x3c5c71c7, 0x1c71c71c} }, /* 1/9-f9 */ -/**/ f11 = {{0xbfb745d1, 0x745d1746} }, /* -1/11 */ -/**/ f13 = {{0x3fb3b13b, 0x13b13b14} }, /* 1/13 */ -/**/ f15 = {{0xbfb11111, 0x11111111} }, /* -1/15 */ -/**/ f17 = {{0x3fae1e1e, 0x1e1e1e1e} }, /* 1/17 */ -/**/ f19 = {{0xbfaaf286, 0xbca1af28} }, /* -1/19 */ - /* constants */ -/**/ a = {{0x3e4bb67a, 0x00000000} }, /* 1.290e-8 */ -/**/ b = {{0x3fb00000, 0x00000000} }, /* 1/16 */ -/**/ c = {{0x3ff00000, 0x00000000} }, /* 1 */ -/**/ d = {{0x40300000, 0x00000000} }, /* 16 */ -/**/ e = {{0x43349ff2, 0x00000000} }, /* 5.805e15 */ -/**/ hpi = {{0x3ff921fb, 0x54442d18} }, /* pi/2 */ -/**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */ -/**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */ -/**/ u1 = {{0x3c2d3382, 0x00000000} }, /* 7.915e-19 */ -/**/ u21 = {{0x3c6dffc0, 0x00000000} }, /* 1.301e-17 */ -/**/ u22 = {{0x3c527bd0, 0x00000000} }, /* 4.008e-18 */ -/**/ u23 = {{0x3c3cd057, 0x00000000} }, /* 1.562e-18 */ -/**/ u24 = {{0x3c329cdf, 0x00000000} }, /* 1.009e-18 */ -/**/ u31 = {{0x3c3a1edf, 0x00000000} }, /* 1.416e-18 */ -/**/ u32 = {{0x3c33f0e1, 0x00000000} }, /* 1.081e-18 */ -/**/ u4 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */ -/**/ u5 = {{0x3aaef2d1, 0x00000000} }, /* 5e-26 */ -/**/ u6 = {{0x3a98c56d, 0x00000000} }, /* 2.001e-26 */ -/**/ u7 = {{0x3a9375de, 0x00000000} }, /* 1.572e-26 */ -/**/ u8 = {{0x3a6eeb36, 0x00000000} }, /* 3.122e-27 */ -/**/ u9[M] ={{{0x38c1aa5b, 0x00000000} }, /* 2.658e-35 */ -/**/ {{0x35c1aa4d, 0x00000000} }, /* 9.443e-50 */ -/**/ {{0x32c1aa88, 0x00000000} }, /* 3.355e-64 */ -/**/ {{0x11c1aa56, 0x00000000} }};/* 3.818e-223 */ - -#else -#ifdef LITTLE_ENDI - static const number - /* polynomial I */ -/**/ d3 = {{0x55555555, 0xbfd55555} }, /* -0.333... */ -/**/ d5 = {{0x999997fd, 0x3fc99999} }, /* 0.199... */ -/**/ d7 = {{0x923f7603, 0xbfc24924} }, /* -0.142... */ -/**/ d9 = {{0xe5129a3b, 0x3fbc71c6} }, /* 0.111... */ -/**/ d11 = {{0x22b13c25, 0xbfb74580} }, /* -0.090... */ -/**/ d13 = {{0x8b31cbce, 0x3fb375f0} }, /* 0.076... */ - /* polynomial II */ -/**/ f3 = {{0x55555555, 0xbfd55555} }, /* -1/3 */ -/**/ ff3 = {{0x55555555, 0xbc755555} }, /* -1/3-f3 */ -/**/ f5 = {{0x9999999a, 0x3fc99999} }, /* 1/5 */ -/**/ ff5 = {{0x9999999a, 0xbc699999} }, /* 1/5-f5 */ -/**/ f7 = {{0x92492492, 0xbfc24924} }, /* -1/7 */ -/**/ ff7 = {{0x92492492, 0xbc624924} }, /* -1/7-f7 */ -/**/ f9 = {{0x1c71c71c, 0x3fbc71c7} }, /* 1/9 */ -/**/ ff9 = {{0x1c71c71c, 0x3c5c71c7} }, /* 1/9-f9 */ -/**/ f11 = {{0x745d1746, 0xbfb745d1} }, /* -1/11 */ -/**/ f13 = {{0x13b13b14, 0x3fb3b13b} }, /* 1/13 */ -/**/ f15 = {{0x11111111, 0xbfb11111} }, /* -1/15 */ -/**/ f17 = {{0x1e1e1e1e, 0x3fae1e1e} }, /* 1/17 */ -/**/ f19 = {{0xbca1af28, 0xbfaaf286} }, /* -1/19 */ - /* constants */ -/**/ a = {{0x00000000, 0x3e4bb67a} }, /* 1.290e-8 */ -/**/ b = {{0x00000000, 0x3fb00000} }, /* 1/16 */ -/**/ c = {{0x00000000, 0x3ff00000} }, /* 1 */ -/**/ d = {{0x00000000, 0x40300000} }, /* 16 */ -/**/ e = {{0x00000000, 0x43349ff2} }, /* 5.805e15 */ -/**/ hpi = {{0x54442d18, 0x3ff921fb} }, /* pi/2 */ -/**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */ -/**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */ -/**/ u1 = {{0x00000000, 0x3c2d3382} }, /* 7.915e-19 */ -/**/ u21 = {{0x00000000, 0x3c6dffc0} }, /* 1.301e-17 */ -/**/ u22 = {{0x00000000, 0x3c527bd0} }, /* 4.008e-18 */ -/**/ u23 = {{0x00000000, 0x3c3cd057} }, /* 1.562e-18 */ -/**/ u24 = {{0x00000000, 0x3c329cdf} }, /* 1.009e-18 */ -/**/ u31 = {{0x00000000, 0x3c3a1edf} }, /* 1.416e-18 */ -/**/ u32 = {{0x00000000, 0x3c33f0e1} }, /* 1.081e-18 */ -/**/ u4 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */ -/**/ u5 = {{0x00000000, 0x3aaef2d1} }, /* 5e-26 */ -/**/ u6 = {{0x00000000, 0x3a98c56d} }, /* 2.001e-26 */ -/**/ u7 = {{0x00000000, 0x3a9375de} }, /* 1.572e-26 */ -/**/ u8 = {{0x00000000, 0x3a6eeb36} }, /* 3.122e-27 */ -/**/ u9[M] ={{{0x00000000, 0x38c1aa5b} }, /* 2.658e-35 */ -/**/ {{0x00000000, 0x35c1aa4d} }, /* 9.443e-50 */ -/**/ {{0x00000000, 0x32c1aa88} }, /* 3.355e-64 */ -/**/ {{0x00000000, 0x11c1aa56} }};/* 3.818e-223 */ - -#endif -#endif - -#define A a.d -#define B b.d -#define C c.d -#define D d.d -#define E e.d -#define HPI hpi.d -#define MHPI mhpi.d -#define HPI1 hpi1.d -#define U1 u1.d -#define U21 u21.d -#define U22 u22.d -#define U23 u23.d -#define U24 u24.d -#define U31 u31.d -#define U32 u32.d -#define U4 u4.d -#define U5 u5.d -#define U6 u6.d -#define U7 u7.d -#define U8 u8.d - -#endif diff --git a/sysdeps/ieee754/dbl-64/atnat2.h b/sysdeps/ieee754/dbl-64/atnat2.h deleted file mode 100644 index 27033b6ceb..0000000000 --- a/sysdeps/ieee754/dbl-64/atnat2.h +++ /dev/null @@ -1,161 +0,0 @@ - -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/************************************************************************/ -/* MODULE_NAME: atnat2.h */ -/* */ -/* */ -/* common data and variables definition for BIG or LITTLE ENDIAN */ -/************************************************************************/ - - - -#ifndef ATNAT2_H -#define ATNAT2_H - - -#define MM 5 -#ifdef BIG_ENDI - - static const number - /* polynomial I */ -/**/ d3 = {{0xbfd55555, 0x55555555} }, /* -0.333... */ -/**/ d5 = {{0x3fc99999, 0x999997fd} }, /* 0.199... */ -/**/ d7 = {{0xbfc24924, 0x923f7603} }, /* -0.142... */ -/**/ d9 = {{0x3fbc71c6, 0xe5129a3b} }, /* 0.111... */ -/**/ d11 = {{0xbfb74580, 0x22b13c25} }, /* -0.090... */ -/**/ d13 = {{0x3fb375f0, 0x8b31cbce} }, /* 0.076... */ - /* polynomial II */ -/**/ f3 = {{0xbfd55555, 0x55555555} }, /* -1/3 */ -/**/ ff3 = {{0xbc755555, 0x55555555} }, /* -1/3-f3 */ -/**/ f5 = {{0x3fc99999, 0x9999999a} }, /* 1/5 */ -/**/ ff5 = {{0xbc699999, 0x9999999a} }, /* 1/5-f5 */ -/**/ f7 = {{0xbfc24924, 0x92492492} }, /* -1/7 */ -/**/ ff7 = {{0xbc624924, 0x92492492} }, /* -1/7-f7 */ -/**/ f9 = {{0x3fbc71c7, 0x1c71c71c} }, /* 1/9 */ -/**/ ff9 = {{0x3c5c71c7, 0x1c71c71c} }, /* 1/9-f9 */ -/**/ f11 = {{0xbfb745d1, 0x745d1746} }, /* -1/11 */ -/**/ f13 = {{0x3fb3b13b, 0x13b13b14} }, /* 1/13 */ -/**/ f15 = {{0xbfb11111, 0x11111111} }, /* -1/15 */ -/**/ f17 = {{0x3fae1e1e, 0x1e1e1e1e} }, /* 1/17 */ -/**/ f19 = {{0xbfaaf286, 0xbca1af28} }, /* -1/19 */ - /* constants */ -/**/ inv16 = {{0x3fb00000, 0x00000000} }, /* 1/16 */ -/**/ opi = {{0x400921fb, 0x54442d18} }, /* pi */ -/**/ opi1 = {{0x3ca1a626, 0x33145c07} }, /* pi-opi */ -/**/ mopi = {{0xc00921fb, 0x54442d18} }, /* -pi */ -/**/ hpi = {{0x3ff921fb, 0x54442d18} }, /* pi/2 */ -/**/ hpi1 = {{0x3c91a626, 0x33145c07} }, /* pi/2-hpi */ -/**/ mhpi = {{0xbff921fb, 0x54442d18} }, /* -pi/2 */ -/**/ qpi = {{0x3fe921fb, 0x54442d18} }, /* pi/4 */ -/**/ mqpi = {{0xbfe921fb, 0x54442d18} }, /* -pi/4 */ -/**/ tqpi = {{0x4002d97c, 0x7f3321d2} }, /* 3pi/4 */ -/**/ mtqpi = {{0xc002d97c, 0x7f3321d2} }, /* -3pi/4 */ -/**/ u1 = {{0x3c314c2a, 0x00000000} }, /* 9.377e-19 */ -/**/ u2 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */ -/**/ u3 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */ -/**/ u4 = {{0x3bf955e4, 0x00000000} }, /* 8.584e-20 */ -/**/ u5 = {{0x3aaef2d1, 0x00000000} }, /* 5e-26 */ -/**/ u6 = {{0x3a6eeb36, 0x00000000} }, /* 3.122e-27 */ -/**/ u7 = {{0x3a6eeb36, 0x00000000} }, /* 3.122e-27 */ -/**/ u8 = {{0x3a6eeb36, 0x00000000} }, /* 3.122e-27 */ -/**/ u91 = {{0x3c6dffc0, 0x00000000} }, /* 1.301e-17 */ -/**/ u92 = {{0x3c527bd0, 0x00000000} }, /* 4.008e-18 */ -/**/ u93 = {{0x3c3cd057, 0x00000000} }, /* 1.562e-18 */ -/**/ u94 = {{0x3c329cdf, 0x00000000} }, /* 1.009e-18 */ -/**/ ua1 = {{0x3c3a1edf, 0x00000000} }, /* 1.416e-18 */ -/**/ ua2 = {{0x3c33f0e1, 0x00000000} }, /* 1.081e-18 */ -/**/ ub = {{0x3a98c56d, 0x00000000} }, /* 2.001e-26 */ -/**/ uc = {{0x3a9375de, 0x00000000} }, /* 1.572e-26 */ -/**/ ud[MM] ={{{0x38c6eddf, 0x00000000} }, /* 3.450e-35 */ -/**/ {{0x35c6ef60, 0x00000000} }, /* 1.226e-49 */ -/**/ {{0x32c6ed2f, 0x00000000} }, /* 4.354e-64 */ -/**/ {{0x23c6eee8, 0x00000000} }, /* 2.465e-136 */ -/**/ {{0x11c6ed16, 0x00000000} }},/* 4.955e-223 */ -/**/ ue = {{0x38900e9d, 0x00000000} }, /* 3.02e-36 */ -/**/ two500 = {{0x5f300000, 0x00000000} }, /* 2**500 */ -/**/ twom500 = {{0x20b00000, 0x00000000} }; /* 2**(-500) */ - -#else -#ifdef LITTLE_ENDI - - static const number - /* polynomial I */ -/**/ d3 = {{0x55555555, 0xbfd55555} }, /* -0.333... */ -/**/ d5 = {{0x999997fd, 0x3fc99999} }, /* 0.199... */ -/**/ d7 = {{0x923f7603, 0xbfc24924} }, /* -0.142... */ -/**/ d9 = {{0xe5129a3b, 0x3fbc71c6} }, /* 0.111... */ -/**/ d11 = {{0x22b13c25, 0xbfb74580} }, /* -0.090... */ -/**/ d13 = {{0x8b31cbce, 0x3fb375f0} }, /* 0.076... */ - /* polynomial II */ -/**/ f3 = {{0x55555555, 0xbfd55555} }, /* -1/3 */ -/**/ ff3 = {{0x55555555, 0xbc755555} }, /* -1/3-f3 */ -/**/ f5 = {{0x9999999a, 0x3fc99999} }, /* 1/5 */ -/**/ ff5 = {{0x9999999a, 0xbc699999} }, /* 1/5-f5 */ -/**/ f7 = {{0x92492492, 0xbfc24924} }, /* -1/7 */ -/**/ ff7 = {{0x92492492, 0xbc624924} }, /* -1/7-f7 */ -/**/ f9 = {{0x1c71c71c, 0x3fbc71c7} }, /* 1/9 */ -/**/ ff9 = {{0x1c71c71c, 0x3c5c71c7} }, /* 1/9-f9 */ -/**/ f11 = {{0x745d1746, 0xbfb745d1} }, /* -1/11 */ -/**/ f13 = {{0x13b13b14, 0x3fb3b13b} }, /* 1/13 */ -/**/ f15 = {{0x11111111, 0xbfb11111} }, /* -1/15 */ -/**/ f17 = {{0x1e1e1e1e, 0x3fae1e1e} }, /* 1/17 */ -/**/ f19 = {{0xbca1af28, 0xbfaaf286} }, /* -1/19 */ - /* constants */ -/**/ inv16 = {{0x00000000, 0x3fb00000} }, /* 1/16 */ -/**/ opi = {{0x54442d18, 0x400921fb} }, /* pi */ -/**/ opi1 = {{0x33145c07, 0x3ca1a626} }, /* pi-opi */ -/**/ mopi = {{0x54442d18, 0xc00921fb} }, /* -pi */ -/**/ hpi = {{0x54442d18, 0x3ff921fb} }, /* pi/2 */ -/**/ hpi1 = {{0x33145c07, 0x3c91a626} }, /* pi/2-hpi */ -/**/ mhpi = {{0x54442d18, 0xbff921fb} }, /* -pi/2 */ -/**/ qpi = {{0x54442d18, 0x3fe921fb} }, /* pi/4 */ -/**/ mqpi = {{0x54442d18, 0xbfe921fb} }, /* -pi/4 */ -/**/ tqpi = {{0x7f3321d2, 0x4002d97c} }, /* 3pi/4 */ -/**/ mtqpi = {{0x7f3321d2, 0xc002d97c} }, /* -3pi/4 */ -/**/ u1 = {{0x00000000, 0x3c314c2a} }, /* 9.377e-19 */ -/**/ u2 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */ -/**/ u3 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */ -/**/ u4 = {{0x00000000, 0x3bf955e4} }, /* 8.584e-20 */ -/**/ u5 = {{0x00000000, 0x3aaef2d1} }, /* 5e-26 */ -/**/ u6 = {{0x00000000, 0x3a6eeb36} }, /* 3.122e-27 */ -/**/ u7 = {{0x00000000, 0x3a6eeb36} }, /* 3.122e-27 */ -/**/ u8 = {{0x00000000, 0x3a6eeb36} }, /* 3.122e-27 */ -/**/ u91 = {{0x00000000, 0x3c6dffc0} }, /* 1.301e-17 */ -/**/ u92 = {{0x00000000, 0x3c527bd0} }, /* 4.008e-18 */ -/**/ u93 = {{0x00000000, 0x3c3cd057} }, /* 1.562e-18 */ -/**/ u94 = {{0x00000000, 0x3c329cdf} }, /* 1.009e-18 */ -/**/ ua1 = {{0x00000000, 0x3c3a1edf} }, /* 1.416e-18 */ -/**/ ua2 = {{0x00000000, 0x3c33f0e1} }, /* 1.081e-18 */ -/**/ ub = {{0x00000000, 0x3a98c56d} }, /* 2.001e-26 */ -/**/ uc = {{0x00000000, 0x3a9375de} }, /* 1.572e-26 */ -/**/ ud[MM] ={{{0x00000000, 0x38c6eddf} }, /* 3.450e-35 */ -/**/ {{0x00000000, 0x35c6ef60} }, /* 1.226e-49 */ -/**/ {{0x00000000, 0x32c6ed2f} }, /* 4.354e-64 */ -/**/ {{0x00000000, 0x23c6eee8} }, /* 2.465e-136 */ -/**/ {{0x00000000, 0x11c6ed16} }},/* 4.955e-223 */ -/**/ ue = {{0x00000000, 0x38900e9d} }, /* 3.02e-36 */ -/**/ two500 = {{0x00000000, 0x5f300000} }, /* 2**500 */ -/**/ twom500 = {{0x00000000, 0x20b00000} }; /* 2**(-500) */ - -#endif -#endif - -#endif diff --git a/sysdeps/ieee754/dbl-64/branred.c b/sysdeps/ieee754/dbl-64/branred.c deleted file mode 100644 index 30ae9c79e2..0000000000 --- a/sysdeps/ieee754/dbl-64/branred.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/*******************************************************************/ -/* */ -/* MODULE_NAME: branred.c */ -/* */ -/* FUNCTIONS: branred */ -/* */ -/* FILES NEEDED: branred.h mydefs.h endian.h mpa.h */ -/* mha.c */ -/* */ -/* Routine branred() performs range reduction of a double number */ -/* x into Double length number a+aa,such that */ -/* x=n*pi/2+(a+aa), abs(a+aa) -#include - -#ifndef SECTION -# define SECTION -#endif - - -/*******************************************************************/ -/* Routine branred() performs range reduction of a double number */ -/* x into Double length number a+aa,such that */ -/* x=n*pi/2+(a+aa), abs(a+aa)>20)&2047; - k = (k-450)/24; - if (k<0) - k=0; - gor.x = t576.x; - gor.i[HIGH_HALF] -= ((k*24)<<20); - for (i=0;i<6;i++) - { r[i] = x1*toverp[k+i]*gor.x; gor.x *= tm24.x; } - for (i=0;i<3;i++) { - s=(r[i]+big.x)-big.x; - sum+=s; - r[i]-=s; - } - t=0; - for (i=0;i<6;i++) - t+=r[5-i]; - bb=(((((r[0]-t)+r[1])+r[2])+r[3])+r[4])+r[5]; - s=(t+big.x)-big.x; - sum+=s; - t-=s; - b=t+bb; - bb=(t-b)+bb; - s=(sum+big1.x)-big1.x; - sum-=s; - b1=b; - bb1=bb; - sum1=sum; - sum=0; - - u.x = x2; - k = (u.i[HIGH_HALF]>>20)&2047; - k = (k-450)/24; - if (k<0) - k=0; - gor.x = t576.x; - gor.i[HIGH_HALF] -= ((k*24)<<20); - for (i=0;i<6;i++) - { r[i] = x2*toverp[k+i]*gor.x; gor.x *= tm24.x; } - for (i=0;i<3;i++) { - s=(r[i]+big.x)-big.x; - sum+=s; - r[i]-=s; - } - t=0; - for (i=0;i<6;i++) - t+=r[5-i]; - bb=(((((r[0]-t)+r[1])+r[2])+r[3])+r[4])+r[5]; - s=(t+big.x)-big.x; - sum+=s; - t-=s; - b=t+bb; - bb=(t-b)+bb; - s=(sum+big1.x)-big1.x; - sum-=s; - - b2=b; - bb2=bb; - sum2=sum; - - sum=sum1+sum2; - b=b1+b2; - bb = (fabs(b1)>fabs(b2))? (b1-b)+b2 : (b2-b)+b1; - if (b > 0.5) - {b-=1.0; sum+=1.0;} - else if (b < -0.5) - {b+=1.0; sum-=1.0;} - s=b+(bb+bb1+bb2); - t=((b-s)+bb)+(bb1+bb2); - b=s*split; - t1=b-(b-s); - t2=s-t1; - b=s*hp0.x; - bb=(((t1*mp1.x-b)+t1*mp2.x)+t2*mp1.x)+(t2*mp2.x+s*hp1.x+t*hp0.x); - s=b+bb; - t=(b-s)+bb; - *a=s; - *aa=t; - return ((int) sum)&3; /* return quater of unit circle */ -} diff --git a/sysdeps/ieee754/dbl-64/branred.h b/sysdeps/ieee754/dbl-64/branred.h deleted file mode 100644 index c3fd7dd27b..0000000000 --- a/sysdeps/ieee754/dbl-64/branred.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/************************************************************************/ -/* MODULE_NAME: branred.h */ -/* */ -/* */ -/* common data and variables definition for BIG or LITTLE ENDIAN */ -/************************************************************************/ - -#ifndef BRANRED_H -#define BRANRED_H - -#include - -#ifdef BIG_ENDI -static const mynumber - -/**/ t576 = {{0x63f00000, 0x00000000}}, /* 2 ^ 576 */ -/**/ tm600 = {{0x1a700000, 0x00000000}}, /* 2 ^- 600 */ -/**/ tm24 = {{0x3e700000, 0x00000000}}, /* 2 ^- 24 */ -/**/ big = {{0x43380000, 0x00000000}}, /* 6755399441055744 */ -/**/ big1 = {{0x43580000, 0x00000000}}, /* 27021597764222976 */ -/**/ hp0 = {{0x3FF921FB, 0x54442D18}} ,/* 1.5707963267948966 */ -/**/ hp1 = {{0x3C91A626, 0x33145C07}} ,/* 6.123233995736766e-17 */ -/**/ mp1 = {{0x3FF921FB, 0x58000000}}, /* 1.5707963407039642 */ -/**/ mp2 = {{0xBE4DDE97, 0x40000000}}; /*-1.3909067675399456e-08 */ - -#else -#ifdef LITTLE_ENDI -static const mynumber - -/**/ t576 = {{0x00000000, 0x63f00000}}, /* 2 ^ 576 */ -/**/ tm600 = {{0x00000000, 0x1a700000}}, /* 2 ^- 600 */ -/**/ tm24 = {{0x00000000, 0x3e700000}}, /* 2 ^- 24 */ -/**/ big = {{0x00000000, 0x43380000}}, /* 6755399441055744 */ -/**/ big1 = {{0x00000000, 0x43580000}}, /* 27021597764222976 */ -/**/ hp0 = {{0x54442D18, 0x3FF921FB}}, /* 1.5707963267948966 */ -/**/ hp1 = {{0x33145C07, 0x3C91A626}}, /* 6.123233995736766e-17 */ -/**/ mp1 = {{0x58000000, 0x3FF921FB}}, /* 1.5707963407039642 */ -/**/ mp2 = {{0x40000000, 0xBE4DDE97}}; /*-1.3909067675399456e-08 */ - -#endif -#endif - -static const double toverp[75] = { /* 2/ PI base 24*/ - 10680707.0, 7228996.0, 1387004.0, 2578385.0, 16069853.0, - 12639074.0, 9804092.0, 4427841.0, 16666979.0, 11263675.0, - 12935607.0, 2387514.0, 4345298.0, 14681673.0, 3074569.0, - 13734428.0, 16653803.0, 1880361.0, 10960616.0, 8533493.0, - 3062596.0, 8710556.0, 7349940.0, 6258241.0, 3772886.0, - 3769171.0, 3798172.0, 8675211.0, 12450088.0, 3874808.0, - 9961438.0, 366607.0, 15675153.0, 9132554.0, 7151469.0, - 3571407.0, 2607881.0, 12013382.0, 4155038.0, 6285869.0, - 7677882.0, 13102053.0, 15825725.0, 473591.0, 9065106.0, - 15363067.0, 6271263.0, 9264392.0, 5636912.0, 4652155.0, - 7056368.0, 13614112.0, 10155062.0, 1944035.0, 9527646.0, - 15080200.0, 6658437.0, 6231200.0, 6832269.0, 16767104.0, - 5075751.0, 3212806.0, 1398474.0, 7579849.0, 6349435.0, - 12618859.0, 4703257.0, 12806093.0, 14477321.0, 2786137.0, - 12875403.0, 9837734.0, 14528324.0, 13719321.0, 343717.0 }; - -static const double split = CN; /* 2^27 + 1 */ - -#endif diff --git a/sysdeps/ieee754/dbl-64/dbl2mpn.c b/sysdeps/ieee754/dbl-64/dbl2mpn.c deleted file mode 100644 index 8294dc26ed..0000000000 --- a/sysdeps/ieee754/dbl-64/dbl2mpn.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" -#include -#include -#include - -/* Convert a `double' in IEEE754 standard double-precision format to a - multi-precision integer representing the significand scaled up by its - number of bits (52 for double) and an integral power of two (MPN frexp). */ - -mp_size_t -__mpn_extract_double (mp_ptr res_ptr, mp_size_t size, - int *expt, int *is_neg, - double value) -{ - union ieee754_double u; - u.d = value; - - *is_neg = u.ieee.negative; - *expt = (int) u.ieee.exponent - IEEE754_DOUBLE_BIAS; - -#if BITS_PER_MP_LIMB == 32 - res_ptr[0] = u.ieee.mantissa1; /* Low-order 32 bits of fraction. */ - res_ptr[1] = u.ieee.mantissa0; /* High-order 20 bits. */ - # define N 2 -#elif BITS_PER_MP_LIMB == 64 - /* Hopefully the compiler will combine the two bitfield extracts - and this composition into just the original quadword extract. */ - res_ptr[0] = ((mp_limb_t) u.ieee.mantissa0 << 32) | u.ieee.mantissa1; - # define N 1 -#else - # error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" -#endif -/* The format does not fill the last limb. There are some zeros. */ -#define NUM_LEADING_ZEROS (BITS_PER_MP_LIMB \ - - (DBL_MANT_DIG - ((N - 1) * BITS_PER_MP_LIMB))) - - if (u.ieee.exponent == 0) - { - /* A biased exponent of zero is a special case. - Either it is a zero or it is a denormal number. */ - if (res_ptr[0] == 0 && res_ptr[N - 1] == 0) /* Assumes N<=2. */ - /* It's zero. */ - *expt = 0; - else - { - /* It is a denormal number, meaning it has no implicit leading - one bit, and its exponent is in fact the format minimum. */ - int cnt; - - if (res_ptr[N - 1] != 0) - { - count_leading_zeros (cnt, res_ptr[N - 1]); - cnt -= NUM_LEADING_ZEROS; -#if N == 2 - res_ptr[N - 1] = res_ptr[1] << cnt - | (N - 1) - * (res_ptr[0] >> (BITS_PER_MP_LIMB - cnt)); - res_ptr[0] <<= cnt; -#else - res_ptr[N - 1] <<= cnt; -#endif - *expt = DBL_MIN_EXP - 1 - cnt; - } - else - { - count_leading_zeros (cnt, res_ptr[0]); - if (cnt >= NUM_LEADING_ZEROS) - { - res_ptr[N - 1] = res_ptr[0] << (cnt - NUM_LEADING_ZEROS); - res_ptr[0] = 0; - } - else - { - res_ptr[N - 1] = res_ptr[0] >> (NUM_LEADING_ZEROS - cnt); - res_ptr[0] <<= BITS_PER_MP_LIMB - (NUM_LEADING_ZEROS - cnt); - } - *expt = DBL_MIN_EXP - 1 - - (BITS_PER_MP_LIMB - NUM_LEADING_ZEROS) - cnt; - } - } - } - else - /* Add the implicit leading one bit for a normalized number. */ - res_ptr[N - 1] |= (mp_limb_t) 1 << (DBL_MANT_DIG - 1 - - ((N - 1) * BITS_PER_MP_LIMB)); - - return N; -} diff --git a/sysdeps/ieee754/dbl-64/dla.h b/sysdeps/ieee754/dbl-64/dla.h deleted file mode 100644 index 88e8ffb1ca..0000000000 --- a/sysdeps/ieee754/dbl-64/dla.h +++ /dev/null @@ -1,183 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -#include - -/***********************************************************************/ -/*MODULE_NAME: dla.h */ -/* */ -/* This file holds C language macros for 'Double Length Floating Point */ -/* Arithmetic'. The macros are based on the paper: */ -/* T.J.Dekker, "A floating-point Technique for extending the */ -/* Available Precision", Number. Math. 18, 224-242 (1971). */ -/* A Double-Length number is defined by a pair (r,s), of IEEE double */ -/* precision floating point numbers that satisfy, */ -/* */ -/* abs(s) <= abs(r+s)*2**(-53)/(1+2**(-53)). */ -/* */ -/* The computer arithmetic assumed is IEEE double precision in */ -/* round to nearest mode. All variables in the macros must be of type */ -/* IEEE double. */ -/***********************************************************************/ - -/* CN = 1+2**27 = '41a0000002000000' IEEE double format. Use it to split a - double for better accuracy. */ -#define CN 134217729.0 - - -/* Exact addition of two single-length floating point numbers, Dekker. */ -/* The macro produces a double-length number (z,zz) that satisfies */ -/* z+zz = x+y exactly. */ - -#define EADD(x,y,z,zz) \ - z=(x)+(y); zz=(fabs(x)>fabs(y)) ? (((x)-(z))+(y)) : (((y)-(z))+(x)); - - -/* Exact subtraction of two single-length floating point numbers, Dekker. */ -/* The macro produces a double-length number (z,zz) that satisfies */ -/* z+zz = x-y exactly. */ - -#define ESUB(x,y,z,zz) \ - z=(x)-(y); zz=(fabs(x)>fabs(y)) ? (((x)-(z))-(y)) : ((x)-((y)+(z))); - - -#ifdef __FP_FAST_FMA -# define DLA_FMS(x, y, z) __builtin_fma (x, y, -(z)) -#endif - -/* Exact multiplication of two single-length floating point numbers, */ -/* Veltkamp. The macro produces a double-length number (z,zz) that */ -/* satisfies z+zz = x*y exactly. p,hx,tx,hy,ty are temporary */ -/* storage variables of type double. */ - -#ifdef DLA_FMS -# define EMULV(x, y, z, zz, p, hx, tx, hy, ty) \ - z = x * y; zz = DLA_FMS (x, y, z); -#else -# define EMULV(x, y, z, zz, p, hx, tx, hy, ty) \ - p = CN * (x); hx = ((x) - p) + p; tx = (x) - hx; \ - p = CN * (y); hy = ((y) - p) + p; ty = (y) - hy; \ - z = (x) * (y); zz = (((hx * hy - z) + hx * ty) + tx * hy) + tx * ty; -#endif - - -/* Exact multiplication of two single-length floating point numbers, Dekker. */ -/* The macro produces a nearly double-length number (z,zz) (see Dekker) */ -/* that satisfies z+zz = x*y exactly. p,hx,tx,hy,ty,q are temporary */ -/* storage variables of type double. */ - -#ifdef DLA_FMS -# define MUL12(x,y,z,zz,p,hx,tx,hy,ty,q) \ - EMULV(x,y,z,zz,p,hx,tx,hy,ty) -#else -# define MUL12(x,y,z,zz,p,hx,tx,hy,ty,q) \ - p=CN*(x); hx=((x)-p)+p; tx=(x)-hx; \ - p=CN*(y); hy=((y)-p)+p; ty=(y)-hy; \ - p=hx*hy; q=hx*ty+tx*hy; z=p+q; zz=((p-z)+q)+tx*ty; -#endif - - -/* Double-length addition, Dekker. The macro produces a double-length */ -/* number (z,zz) which satisfies approximately z+zz = x+xx + y+yy. */ -/* An error bound: (abs(x+xx)+abs(y+yy))*4.94e-32. (x,xx), (y,yy) */ -/* are assumed to be double-length numbers. r,s are temporary */ -/* storage variables of type double. */ - -#define ADD2(x, xx, y, yy, z, zz, r, s) \ - r = (x) + (y); s = (fabs (x) > fabs (y)) ? \ - (((((x) - r) + (y)) + (yy)) + (xx)) : \ - (((((y) - r) + (x)) + (xx)) + (yy)); \ - z = r + s; zz = (r - z) + s; - - -/* Double-length subtraction, Dekker. The macro produces a double-length */ -/* number (z,zz) which satisfies approximately z+zz = x+xx - (y+yy). */ -/* An error bound: (abs(x+xx)+abs(y+yy))*4.94e-32. (x,xx), (y,yy) */ -/* are assumed to be double-length numbers. r,s are temporary */ -/* storage variables of type double. */ - -#define SUB2(x, xx, y, yy, z, zz, r, s) \ - r = (x) - (y); s = (fabs (x) > fabs (y)) ? \ - (((((x) - r) - (y)) - (yy)) + (xx)) : \ - ((((x) - ((y) + r)) + (xx)) - (yy)); \ - z = r + s; zz = (r - z) + s; - - -/* Double-length multiplication, Dekker. The macro produces a double-length */ -/* number (z,zz) which satisfies approximately z+zz = (x+xx)*(y+yy). */ -/* An error bound: abs((x+xx)*(y+yy))*1.24e-31. (x,xx), (y,yy) */ -/* are assumed to be double-length numbers. p,hx,tx,hy,ty,q,c,cc are */ -/* temporary storage variables of type double. */ - -#define MUL2(x, xx, y, yy, z, zz, p, hx, tx, hy, ty, q, c, cc) \ - MUL12 (x, y, c, cc, p, hx, tx, hy, ty, q) \ - cc = ((x) * (yy) + (xx) * (y)) + cc; z = c + cc; zz = (c - z) + cc; - - -/* Double-length division, Dekker. The macro produces a double-length */ -/* number (z,zz) which satisfies approximately z+zz = (x+xx)/(y+yy). */ -/* An error bound: abs((x+xx)/(y+yy))*1.50e-31. (x,xx), (y,yy) */ -/* are assumed to be double-length numbers. p,hx,tx,hy,ty,q,c,cc,u,uu */ -/* are temporary storage variables of type double. */ - -#define DIV2(x,xx,y,yy,z,zz,p,hx,tx,hy,ty,q,c,cc,u,uu) \ - c=(x)/(y); MUL12(c,y,u,uu,p,hx,tx,hy,ty,q) \ - cc=(((((x)-u)-uu)+(xx))-c*(yy))/(y); z=c+cc; zz=(c-z)+cc; - - -/* Double-length addition, slower but more accurate than ADD2. */ -/* The macro produces a double-length */ -/* number (z,zz) which satisfies approximately z+zz = (x+xx)+(y+yy). */ -/* An error bound: abs(x+xx + y+yy)*1.50e-31. (x,xx), (y,yy) */ -/* are assumed to be double-length numbers. r,rr,s,ss,u,uu,w */ -/* are temporary storage variables of type double. */ - -#define ADD2A(x, xx, y, yy, z, zz, r, rr, s, ss, u, uu, w) \ - r = (x) + (y); \ - if (fabs (x) > fabs (y)) { rr = ((x) - r) + (y); s = (rr + (yy)) + (xx); } \ - else { rr = ((y) - r) + (x); s = (rr + (xx)) + (yy); } \ - if (rr != 0.0) { \ - z = r + s; zz = (r - z) + s; } \ - else { \ - ss = (fabs (xx) > fabs (yy)) ? (((xx) - s) + (yy)) : (((yy) - s) + (xx));\ - u = r + s; \ - uu = (fabs (r) > fabs (s)) ? ((r - u) + s) : ((s - u) + r); \ - w = uu + ss; z = u + w; \ - zz = (fabs (u) > fabs (w)) ? ((u - z) + w) : ((w - z) + u); } - - -/* Double-length subtraction, slower but more accurate than SUB2. */ -/* The macro produces a double-length */ -/* number (z,zz) which satisfies approximately z+zz = (x+xx)-(y+yy). */ -/* An error bound: abs(x+xx - (y+yy))*1.50e-31. (x,xx), (y,yy) */ -/* are assumed to be double-length numbers. r,rr,s,ss,u,uu,w */ -/* are temporary storage variables of type double. */ - -#define SUB2A(x, xx, y, yy, z, zz, r, rr, s, ss, u, uu, w) \ - r = (x) - (y); \ - if (fabs (x) > fabs (y)) { rr = ((x) - r) - (y); s = (rr - (yy)) + (xx); } \ - else { rr = (x) - ((y) + r); s = (rr + (xx)) - (yy); } \ - if (rr != 0.0) { \ - z = r + s; zz = (r - z) + s; } \ - else { \ - ss = (fabs (xx) > fabs (yy)) ? (((xx) - s) - (yy)) : ((xx) - ((yy) + s)); \ - u = r + s; \ - uu = (fabs (r) > fabs (s)) ? ((r - u) + s) : ((s - u) + r); \ - w = uu + ss; z = u + w; \ - zz = (fabs (u) > fabs (w)) ? ((u - z) + w) : ((w - z) + u); } diff --git a/sysdeps/ieee754/dbl-64/doasin.c b/sysdeps/ieee754/dbl-64/doasin.c deleted file mode 100644 index 7c2f3c3dc2..0000000000 --- a/sysdeps/ieee754/dbl-64/doasin.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/**********************************************************************/ -/* MODULE_NAME: doasin.c */ -/* */ -/* FUNCTION: doasin */ -/* */ -/* FILES NEEDED:endian.h mydefs.h dla.h doasin.h */ -/* mpa.c */ -/* */ -/* Compute arcsin(x,dx,v) of double-length number (x+dx) the result */ -/* stored in v where v= v[0]+v[1] =arcsin(x+dx) */ -/**********************************************************************/ - -#include "endian.h" -#include "mydefs.h" -#include -#include - -#ifndef SECTION -# define SECTION -#endif - -/********************************************************************/ -/* Compute arcsin(x,dx,v) of double-length number (x+dx) the result */ -/* stored in v where v= v[0]+v[1] =arcsin(x+dx) */ -/********************************************************************/ -void -SECTION -__doasin(double x, double dx, double v[]) { - -#include "doasin.h" - - static const double - d5 = 0.22372159090911789889975459505194491E-01, - d6 = 0.17352764422456822913014975683014622E-01, - d7 = 0.13964843843786693521653681033981614E-01, - d8 = 0.11551791438485242609036067259086589E-01, - d9 = 0.97622386568166960207425666787248914E-02, - d10 = 0.83638737193775788576092749009744976E-02, - d11 = 0.79470250400727425881446981833568758E-02; - - double xx,p,pp,u,uu,r,s; - double tc,tcc; -#ifndef DLA_FMS - double hx,tx,hy,ty,tp,tq; -#endif - - -/* Taylor series for arcsin for Double-Length numbers */ - xx = x*x+2.0*x*dx; - p = ((((((d11*xx+d10)*xx+d9)*xx+d8)*xx+d7)*xx+d6)*xx+d5)*xx; - pp = 0; - - MUL2(x,dx,x,dx,u,uu,tp,hx,tx,hy,ty,tq,tc,tcc); - ADD2(p,pp,c4.x,cc4.x,p,pp,r,s); - MUL2(p,pp,u,uu,p,pp,tp,hx,tx,hy,ty,tq,tc,tcc); - ADD2(p,pp,c3.x,cc3.x,p,pp,r,s); - MUL2(p,pp,u,uu,p,pp,tp,hx,tx,hy,ty,tq,tc,tcc); - ADD2(p,pp,c2.x,cc2.x,p,pp,r,s); - MUL2(p,pp,u,uu,p,pp,tp,hx,tx,hy,ty,tq,tc,tcc); - ADD2(p,pp,c1.x,cc1.x,p,pp,r,s); - MUL2(p,pp,u,uu,p,pp,tp,hx,tx,hy,ty,tq,tc,tcc); - MUL2(p,pp,x,dx,p,pp,tp,hx,tx,hy,ty,tq,tc,tcc); - ADD2(p,pp,x,dx,p,pp,r,s); - v[0]=p; - v[1]=pp; /* arcsin(x+dx)=v[0]+v[1] */ -} diff --git a/sysdeps/ieee754/dbl-64/doasin.h b/sysdeps/ieee754/dbl-64/doasin.h deleted file mode 100644 index c6b64597fb..0000000000 --- a/sysdeps/ieee754/dbl-64/doasin.h +++ /dev/null @@ -1,63 +0,0 @@ - -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/************************************************************************/ -/* MODULE_NAME: doasin.h */ -/* */ -/* */ -/* common data and variables definition for BIG or LITTLE ENDIAN */ -/************************************************************************/ - - - -#ifndef DOASIN_H -#define DOASIN_H - -#ifdef BIG_ENDI - - static const mynumber -/**/ c1 = {{0x3FC55555, 0x55555555}}, /* 0.16666666666666666 */ -/**/ cc1 = {{0x3C655555, 0x55775389}}, /* 9.2518585419753846e-18 */ -/**/ c2 = {{0x3FB33333, 0x33333333}}, /* 0.074999999999999997 */ -/**/ cc2 = {{0x3C499993, 0x63F1A115}}, /* 2.7755472886508899e-18 */ -/**/ c3 = {{0x3FA6DB6D, 0xB6DB6DB7}}, /* 0.044642857142857144 */ -/**/ cc3 = {{0xBC320FC0, 0x3D5CF0C5}}, /* -9.7911734574147224e-19 */ -/**/ c4 = {{0x3F9F1C71, 0xC71C71C5}}, /* 0.030381944444444437 */ -/**/ cc4 = {{0xBC02B240, 0xFF23ED1E}}; /* -1.2669108566898312e-19 */ - -#else -#ifdef LITTLE_ENDI - - static const mynumber -/**/ c1 = {{0x55555555, 0x3FC55555}}, /* 0.16666666666666666 */ -/**/ cc1 = {{0x55775389, 0x3C655555}}, /* 9.2518585419753846e-18 */ -/**/ c2 = {{0x33333333, 0x3FB33333}}, /* 0.074999999999999997 */ -/**/ cc2 = {{0x63F1A115, 0x3C499993}}, /* 2.7755472886508899e-18 */ -/**/ c3 = {{0xB6DB6DB7, 0x3FA6DB6D}}, /* 0.044642857142857144 */ -/**/ cc3 = {{0x3D5CF0C5, 0xBC320FC0}}, /* -9.7911734574147224e-19 */ -/**/ c4 = {{0xC71C71C5, 0x3F9F1C71}}, /* 0.030381944444444437 */ -/**/ cc4 = {{0xFF23ED1E, 0xBC02B240}}; /* -1.2669108566898312e-19 */ - - -#endif -#endif - - -#endif diff --git a/sysdeps/ieee754/dbl-64/dosincos.c b/sysdeps/ieee754/dbl-64/dosincos.c deleted file mode 100644 index 372872b42b..0000000000 --- a/sysdeps/ieee754/dbl-64/dosincos.c +++ /dev/null @@ -1,223 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/********************************************************************/ -/* */ -/* MODULE_NAME: dosincos.c */ -/* */ -/* */ -/* FUNCTIONS: dubsin */ -/* dubcos */ -/* docos */ -/* FILES NEEDED: endian.h mydefs.h dla.h dosincos.h */ -/* sincos.tbl */ -/* */ -/* Routines compute sin() and cos() as Double-Length numbers */ -/********************************************************************/ - - - -#include "endian.h" -#include "mydefs.h" -#include -#include "dosincos.h" -#include - -#ifndef SECTION -# define SECTION -#endif - -extern const union -{ - int4 i[880]; - double x[440]; -} __sincostab attribute_hidden; - -/***********************************************************************/ -/* Routine receive Double-Length number (x+dx) and computing sin(x+dx) */ -/* as Double-Length number and store it at array v .It computes it by */ -/* arithmetic action on Double-Length numbers */ -/*(x+dx) between 0 and PI/4 */ -/***********************************************************************/ - -void -SECTION -__dubsin (double x, double dx, double v[]) -{ - double r, s, c, cc, d, dd, d2, dd2, e, ee, - sn, ssn, cs, ccs, ds, dss, dc, dcc; -#ifndef DLA_FMS - double p, hx, tx, hy, ty, q; -#endif - mynumber u; - int4 k; - - u.x = x + big.x; - k = u.i[LOW_HALF] << 2; - x = x - (u.x - big.x); - d = x + dx; - dd = (x - d) + dx; - /* sin(x+dx)=sin(Xi+t)=sin(Xi)*cos(t) + cos(Xi)sin(t) where t ->0 */ - MUL2 (d, dd, d, dd, d2, dd2, p, hx, tx, hy, ty, q, c, cc); - sn = __sincostab.x[k]; /* */ - ssn = __sincostab.x[k + 1]; /* sin(Xi) and cos(Xi) */ - cs = __sincostab.x[k + 2]; /* */ - ccs = __sincostab.x[k + 3]; /* */ - /* Taylor series for sin ds=sin(t) */ - MUL2 (d2, dd2, s7.x, ss7.x, ds, dss, p, hx, tx, hy, ty, q, c, cc); - ADD2 (ds, dss, s5.x, ss5.x, ds, dss, r, s); - MUL2 (d2, dd2, ds, dss, ds, dss, p, hx, tx, hy, ty, q, c, cc); - ADD2 (ds, dss, s3.x, ss3.x, ds, dss, r, s); - MUL2 (d2, dd2, ds, dss, ds, dss, p, hx, tx, hy, ty, q, c, cc); - MUL2 (d, dd, ds, dss, ds, dss, p, hx, tx, hy, ty, q, c, cc); - ADD2 (ds, dss, d, dd, ds, dss, r, s); - - /* Taylor series for cos dc=cos(t) */ - MUL2 (d2, dd2, c8.x, cc8.x, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - ADD2 (dc, dcc, c6.x, cc6.x, dc, dcc, r, s); - MUL2 (d2, dd2, dc, dcc, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - ADD2 (dc, dcc, c4.x, cc4.x, dc, dcc, r, s); - MUL2 (d2, dd2, dc, dcc, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - ADD2 (dc, dcc, c2.x, cc2.x, dc, dcc, r, s); - MUL2 (d2, dd2, dc, dcc, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - - MUL2 (cs, ccs, ds, dss, e, ee, p, hx, tx, hy, ty, q, c, cc); - MUL2 (dc, dcc, sn, ssn, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - SUB2 (e, ee, dc, dcc, e, ee, r, s); - ADD2 (e, ee, sn, ssn, e, ee, r, s); /* e+ee=sin(x+dx) */ - - v[0] = e; - v[1] = ee; -} -/**********************************************************************/ -/* Routine receive Double-Length number (x+dx) and computes cos(x+dx) */ -/* as Double-Length number and store it in array v .It computes it by */ -/* arithmetic action on Double-Length numbers */ -/*(x+dx) between 0 and PI/4 */ -/**********************************************************************/ - -void -SECTION -__dubcos (double x, double dx, double v[]) -{ - double r, s, c, cc, d, dd, d2, dd2, e, ee, - sn, ssn, cs, ccs, ds, dss, dc, dcc; -#ifndef DLA_FMS - double p, hx, tx, hy, ty, q; -#endif - mynumber u; - int4 k; - u.x = x + big.x; - k = u.i[LOW_HALF] << 2; - x = x - (u.x - big.x); - d = x + dx; - dd = (x - d) + dx; /* cos(x+dx)=cos(Xi+t)=cos(Xi)cos(t) - sin(Xi)sin(t) */ - MUL2 (d, dd, d, dd, d2, dd2, p, hx, tx, hy, ty, q, c, cc); - sn = __sincostab.x[k]; /* */ - ssn = __sincostab.x[k + 1]; /* sin(Xi) and cos(Xi) */ - cs = __sincostab.x[k + 2]; /* */ - ccs = __sincostab.x[k + 3]; /* */ - MUL2 (d2, dd2, s7.x, ss7.x, ds, dss, p, hx, tx, hy, ty, q, c, cc); - ADD2 (ds, dss, s5.x, ss5.x, ds, dss, r, s); - MUL2 (d2, dd2, ds, dss, ds, dss, p, hx, tx, hy, ty, q, c, cc); - ADD2 (ds, dss, s3.x, ss3.x, ds, dss, r, s); - MUL2 (d2, dd2, ds, dss, ds, dss, p, hx, tx, hy, ty, q, c, cc); - MUL2 (d, dd, ds, dss, ds, dss, p, hx, tx, hy, ty, q, c, cc); - ADD2 (ds, dss, d, dd, ds, dss, r, s); - - MUL2 (d2, dd2, c8.x, cc8.x, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - ADD2 (dc, dcc, c6.x, cc6.x, dc, dcc, r, s); - MUL2 (d2, dd2, dc, dcc, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - ADD2 (dc, dcc, c4.x, cc4.x, dc, dcc, r, s); - MUL2 (d2, dd2, dc, dcc, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - ADD2 (dc, dcc, c2.x, cc2.x, dc, dcc, r, s); - MUL2 (d2, dd2, dc, dcc, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - - MUL2 (cs, ccs, ds, dss, e, ee, p, hx, tx, hy, ty, q, c, cc); - MUL2 (dc, dcc, sn, ssn, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - - MUL2 (d2, dd2, s7.x, ss7.x, ds, dss, p, hx, tx, hy, ty, q, c, cc); - ADD2 (ds, dss, s5.x, ss5.x, ds, dss, r, s); - MUL2 (d2, dd2, ds, dss, ds, dss, p, hx, tx, hy, ty, q, c, cc); - ADD2 (ds, dss, s3.x, ss3.x, ds, dss, r, s); - MUL2 (d2, dd2, ds, dss, ds, dss, p, hx, tx, hy, ty, q, c, cc); - MUL2 (d, dd, ds, dss, ds, dss, p, hx, tx, hy, ty, q, c, cc); - ADD2 (ds, dss, d, dd, ds, dss, r, s); - MUL2 (d2, dd2, c8.x, cc8.x, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - ADD2 (dc, dcc, c6.x, cc6.x, dc, dcc, r, s); - MUL2 (d2, dd2, dc, dcc, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - ADD2 (dc, dcc, c4.x, cc4.x, dc, dcc, r, s); - MUL2 (d2, dd2, dc, dcc, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - ADD2 (dc, dcc, c2.x, cc2.x, dc, dcc, r, s); - MUL2 (d2, dd2, dc, dcc, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - MUL2 (sn, ssn, ds, dss, e, ee, p, hx, tx, hy, ty, q, c, cc); - MUL2 (dc, dcc, cs, ccs, dc, dcc, p, hx, tx, hy, ty, q, c, cc); - ADD2 (e, ee, dc, dcc, e, ee, r, s); - SUB2 (cs, ccs, e, ee, e, ee, r, s); - - v[0] = e; - v[1] = ee; -} -/**********************************************************************/ -/* Routine receive Double-Length number (x+dx) and computes cos(x+dx) */ -/* as Double-Length number and store it in array v */ -/**********************************************************************/ -void -SECTION -__docos (double x, double dx, double v[]) -{ - double y, yy, p, w[2]; - if (x > 0) - { - y = x; yy = dx; - } - else - { - y = -x; yy = -dx; - } - if (y < 0.5 * hp0.x) /* y< PI/4 */ - { - __dubcos (y, yy, w); v[0] = w[0]; v[1] = w[1]; - } - else if (y < 1.5 * hp0.x) /* y< 3/4 * PI */ - { - p = hp0.x - y; /* p = PI/2 - y */ - yy = hp1.x - yy; - y = p + yy; - yy = (p - y) + yy; - if (y > 0) - { - __dubsin (y, yy, w); v[0] = w[0]; v[1] = w[1]; - } - /* cos(x) = sin ( 90 - x ) */ - else - { - __dubsin (-y, -yy, w); v[0] = -w[0]; v[1] = -w[1]; - } - } - else /* y>= 3/4 * PI */ - { - p = 2.0 * hp0.x - y; /* p = PI- y */ - yy = 2.0 * hp1.x - yy; - y = p + yy; - yy = (p - y) + yy; - __dubcos (y, yy, w); - v[0] = -w[0]; - v[1] = -w[1]; - } -} diff --git a/sysdeps/ieee754/dbl-64/dosincos.h b/sysdeps/ieee754/dbl-64/dosincos.h deleted file mode 100644 index 9fda3d77cc..0000000000 --- a/sysdeps/ieee754/dbl-64/dosincos.h +++ /dev/null @@ -1,80 +0,0 @@ - -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/************************************************************************/ -/* MODULE_NAME: dosincos.h */ -/* */ -/* */ -/* common data and variables definition for BIG or LITTLE ENDIAN */ -/************************************************************************/ - - - -#ifndef DOSINCOS_H -#define DOSINCOS_H - - -#ifdef BIG_ENDI -static const mynumber -/**/ s3 = {{0xBFC55555, 0x55555555}},/* -0.16666666666666666 */ -/**/ ss3 = {{0xBC6553AA, 0xE77EE482}},/* -9.2490366677784492e-18 */ -/**/ s5 = {{0x3F811111, 0x11110F15}},/* 0.008333333333332452 */ -/**/ ss5 = {{0xBC21AC06, 0xDA488820}},/* -4.7899996586987931e-19 */ -/**/ s7 = {{0xBF2A019F, 0x5816C78D}},/* -0.00019841261022928957 */ -/**/ ss7 = {{0x3BCDCEC9, 0x6A18BF2A}},/* 1.2624077757871259e-20 */ -/**/ c2 = {{0x3FE00000, 0x00000000}},/* 0.5 */ -/**/ cc2 = {{0xBA282FD8, 0x00000000}},/* -1.5264073330037701e-28 */ -/**/ c4 = {{0xBFA55555, 0x55555555}},/* -0.041666666666666664 */ -/**/ cc4 = {{0xBC4554BC, 0x2FFF257E}},/* -2.312711276085743e-18 */ -/**/ c6 = {{0x3F56C16C, 0x16C16A96}},/* 0.0013888888888888055 */ -/**/ cc6 = {{0xBBD2E846, 0xE6346F14}},/* -1.6015133010194884e-20 */ -/**/ c8 = {{0xBEFA019F, 0x821D5987}},/* -2.480157866754367e-05 */ -/**/ cc8 = {{0x3B7AB71E, 0x72FFE5CC}},/* 3.5357416224857556e-22 */ - -/**/ big = {{0x42c80000, 0x00000000}}, /* 52776558133248 */ - -/**/ hp0 = {{0x3FF921FB, 0x54442D18}}, /* PI / 2 */ -/**/ hp1 = {{0x3C91A626, 0x33145C07}}; /* 6.123233995736766e-17 */ -#else -#ifdef LITTLE_ENDI -static const mynumber -/**/ s3 = {{0x55555555, 0xBFC55555}},/* -0.16666666666666666 */ -/**/ ss3 = {{0xE77EE482, 0xBC6553AA}},/* -9.2490366677784492e-18 */ -/**/ s5 = {{0x11110F15, 0x3F811111}},/* 0.008333333333332452 */ -/**/ ss5 = {{0xDA488820, 0xBC21AC06}},/* -4.7899996586987931e-19 */ -/**/ s7 = {{0x5816C78D, 0xBF2A019F}},/* -0.00019841261022928957 */ -/**/ ss7 = {{0x6A18BF2A, 0x3BCDCEC9}},/* 1.2624077757871259e-20 */ -/**/ c2 = {{0x00000000, 0x3FE00000}},/* 0.5 */ -/**/ cc2 = {{0x00000000, 0xBA282FD8}},/* -1.5264073330037701e-28 */ -/**/ c4 = {{0x55555555, 0xBFA55555}},/* -0.041666666666666664 */ -/**/ cc4 = {{0x2FFF257E, 0xBC4554BC}},/* -2.312711276085743e-18 */ -/**/ c6 = {{0x16C16A96, 0x3F56C16C}},/* 0.0013888888888888055 */ -/**/ cc6 = {{0xE6346F14, 0xBBD2E846}},/* -1.6015133010194884e-20 */ -/**/ c8 = {{0x821D5987, 0xBEFA019F}},/* -2.480157866754367e-05 */ -/**/ cc8 = {{0x72FFE5CC, 0x3B7AB71E}},/* 3.5357416224857556e-22 */ - -/**/ big = {{0x00000000, 0x42c80000}}, /* 52776558133248 */ - -/**/ hp0 = {{0x54442D18, 0x3FF921FB}}, /* PI / 2 */ -/**/ hp1 = {{0x33145C07, 0x3C91A626}}; /* 6.123233995736766e-17 */ -#endif -#endif - -#endif diff --git a/sysdeps/ieee754/dbl-64/e_acos.c b/sysdeps/ieee754/dbl-64/e_acos.c deleted file mode 100644 index 8f7cd89249..0000000000 --- a/sysdeps/ieee754/dbl-64/e_acos.c +++ /dev/null @@ -1 +0,0 @@ -/* In e_asin.c */ diff --git a/sysdeps/ieee754/dbl-64/e_acosh.c b/sysdeps/ieee754/dbl-64/e_acosh.c deleted file mode 100644 index c1f3590f75..0000000000 --- a/sysdeps/ieee754/dbl-64/e_acosh.c +++ /dev/null @@ -1,69 +0,0 @@ -/* @(#)e_acosh.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_acosh(x) - * Method : - * Based on - * acosh(x) = log [ x + sqrt(x*x-1) ] - * we have - * acosh(x) := log(x)+ln2, if x is large; else - * acosh(x) := log(2x-1/(sqrt(x*x-1)+x)) if x>2; else - * acosh(x) := log1p(t+sqrt(2.0*t+t*t)); where t=x-1. - * - * Special cases: - * acosh(x) is NaN with signal if x<1. - * acosh(NaN) is NaN without signal. - */ - -#include -#include - -static const double - one = 1.0, - ln2 = 6.93147180559945286227e-01; /* 0x3FE62E42, 0xFEFA39EF */ - -double -__ieee754_acosh (double x) -{ - double t; - int32_t hx; - u_int32_t lx; - EXTRACT_WORDS (hx, lx, x); - if (hx < 0x3ff00000) /* x < 1 */ - { - return (x - x) / (x - x); - } - else if (hx >= 0x41b00000) /* x > 2**28 */ - { - if (hx >= 0x7ff00000) /* x is inf of NaN */ - { - return x + x; - } - else - return __ieee754_log (x) + ln2; /* acosh(huge)=log(2x) */ - } - else if (((hx - 0x3ff00000) | lx) == 0) - { - return 0.0; /* acosh(1) = 0 */ - } - else if (hx > 0x40000000) /* 2**28 > x > 2 */ - { - t = x * x; - return __ieee754_log (2.0 * x - one / (x + __ieee754_sqrt (t - one))); - } - else /* 1. - */ -/******************************************************************/ -/* MODULE_NAME:uasncs.c */ -/* */ -/* FUNCTIONS: uasin */ -/* uacos */ -/* FILES NEEDED: dla.h endian.h mpa.h mydefs.h usncs.h */ -/* doasin.c sincos32.c dosincos.c mpa.c */ -/* sincos.tbl asincos.tbl powtwo.tbl root.tbl */ -/* */ -/* Ultimate asin/acos routines. Given an IEEE double machine */ -/* number x, compute the correctly rounded value of */ -/* arcsin(x)or arccos(x) according to the function called. */ -/* Assumption: Machine arithmetic operations are performed in */ -/* round to nearest mode of IEEE 754 standard. */ -/* */ -/******************************************************************/ -#include "endian.h" -#include "mydefs.h" -#include "asincos.tbl" -#include "root.tbl" -#include "powtwo.tbl" -#include "MathLib.h" -#include "uasncs.h" -#include -#include -#include - -#ifndef SECTION -# define SECTION -#endif - -void __doasin(double x, double dx, double w[]); -void __dubsin(double x, double dx, double v[]); -void __dubcos(double x, double dx, double v[]); -void __docos(double x, double dx, double v[]); -double __sin32(double x, double res, double res1); -double __cos32(double x, double res, double res1); - -/***************************************************************************/ -/* An ultimate asin routine. Given an IEEE double machine number x */ -/* it computes the correctly rounded (to nearest) value of arcsin(x) */ -/***************************************************************************/ -double -SECTION -__ieee754_asin(double x){ - double x1,x2,xx,s1,s2,res1,p,t,res,r,cor,cc,y,c,z,w[2]; - mynumber u,v; - int4 k,m,n; - - u.x = x; - m = u.i[HIGH_HALF]; - k = 0x7fffffff&m; /* no sign */ - - if (k < 0x3e500000) - { - math_check_force_underflow (x); - return x; /* for x->0 => sin(x)=x */ - } - /*----------------------2^-26 <= |x| < 2^ -3 -----------------*/ - else - if (k < 0x3fc00000) { - x2 = x*x; - t = (((((f6*x2 + f5)*x2 + f4)*x2 + f3)*x2 + f2)*x2 + f1)*(x2*x); - res = x+t; /* res=arcsin(x) according to Taylor series */ - cor = (x-res)+t; - if (res == res+1.025*cor) return res; - else { - x1 = x+big; - xx = x*x; - x1 -= big; - x2 = x - x1; - p = x1*x1*x1; - s1 = a1.x*p; - s2 = ((((((c7*xx + c6)*xx + c5)*xx + c4)*xx + c3)*xx + c2)*xx*xx*x + - ((a1.x+a2.x)*x2*x2+ 0.5*x1*x)*x2) + a2.x*p; - res1 = x+s1; - s2 = ((x-res1)+s1)+s2; - res = res1+s2; - cor = (res1-res)+s2; - if (res == res+1.00014*cor) return res; - else { - __doasin(x,0,w); - if (w[0]==(w[0]+1.00000001*w[1])) return w[0]; - else { - y=fabs(x); - res=fabs(w[0]); - res1=fabs(w[0]+1.1*w[1]); - return (m>0)?__sin32(y,res,res1):-__sin32(y,res,res1); - } - } - } - } - /*---------------------0.125 <= |x| < 0.5 -----------------------------*/ - else if (k < 0x3fe00000) { - if (k<0x3fd00000) n = 11*((k&0x000fffff)>>15); - else n = 11*((k&0x000fffff)>>14)+352; - if (m>0) xx = x - asncs.x[n]; - else xx = -x - asncs.x[n]; - t = asncs.x[n+1]*xx; - p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+xx*(asncs.x[n+5] - +xx*asncs.x[n+6]))))+asncs.x[n+7]; - t+=p; - res =asncs.x[n+8] +t; - cor = (asncs.x[n+8]-res)+t; - if (res == res+1.05*cor) return (m>0)?res:-res; - else { - r=asncs.x[n+8]+xx*asncs.x[n+9]; - t=((asncs.x[n+8]-r)+xx*asncs.x[n+9])+(p+xx*asncs.x[n+10]); - res = r+t; - cor = (r-res)+t; - if (res == res+1.0005*cor) return (m>0)?res:-res; - else { - res1=res+1.1*cor; - z=0.5*(res1-res); - __dubsin(res,z,w); - z=(w[0]-fabs(x))+w[1]; - if (z>1.0e-27) return (m>0)?min(res,res1):-min(res,res1); - else if (z<-1.0e-27) return (m>0)?max(res,res1):-max(res,res1); - else { - y=fabs(x); - return (m>0)?__sin32(y,res,res1):-__sin32(y,res,res1); - } - } - } - } /* else if (k < 0x3fe00000) */ - /*-------------------- 0.5 <= |x| < 0.75 -----------------------------*/ - else - if (k < 0x3fe80000) { - n = 1056+((k&0x000fe000)>>11)*3; - if (m>0) xx = x - asncs.x[n]; - else xx = -x - asncs.x[n]; - t = asncs.x[n+1]*xx; - p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+xx*(asncs.x[n+5] - +xx*(asncs.x[n+6]+xx*asncs.x[n+7])))))+asncs.x[n+8]; - t+=p; - res =asncs.x[n+9] +t; - cor = (asncs.x[n+9]-res)+t; - if (res == res+1.01*cor) return (m>0)?res:-res; - else { - r=asncs.x[n+9]+xx*asncs.x[n+10]; - t=((asncs.x[n+9]-r)+xx*asncs.x[n+10])+(p+xx*asncs.x[n+11]); - res = r+t; - cor = (r-res)+t; - if (res == res+1.0005*cor) return (m>0)?res:-res; - else { - res1=res+1.1*cor; - z=0.5*(res1-res); - __dubsin(res,z,w); - z=(w[0]-fabs(x))+w[1]; - if (z>1.0e-27) return (m>0)?min(res,res1):-min(res,res1); - else if (z<-1.0e-27) return (m>0)?max(res,res1):-max(res,res1); - else { - y=fabs(x); - return (m>0)?__sin32(y,res,res1):-__sin32(y,res,res1); - } - } - } - } /* else if (k < 0x3fe80000) */ - /*--------------------- 0.75 <= |x|< 0.921875 ----------------------*/ - else - if (k < 0x3fed8000) { - n = 992+((k&0x000fe000)>>13)*13; - if (m>0) xx = x - asncs.x[n]; - else xx = -x - asncs.x[n]; - t = asncs.x[n+1]*xx; - p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+xx*(asncs.x[n+5] - +xx*(asncs.x[n+6]+xx*(asncs.x[n+7]+xx*asncs.x[n+8]))))))+asncs.x[n+9]; - t+=p; - res =asncs.x[n+10] +t; - cor = (asncs.x[n+10]-res)+t; - if (res == res+1.01*cor) return (m>0)?res:-res; - else { - r=asncs.x[n+10]+xx*asncs.x[n+11]; - t=((asncs.x[n+10]-r)+xx*asncs.x[n+11])+(p+xx*asncs.x[n+12]); - res = r+t; - cor = (r-res)+t; - if (res == res+1.0008*cor) return (m>0)?res:-res; - else { - res1=res+1.1*cor; - z=0.5*(res1-res); - y=hp0.x-res; - z=((hp0.x-y)-res)+(hp1.x-z); - __dubcos(y,z,w); - z=(w[0]-fabs(x))+w[1]; - if (z>1.0e-27) return (m>0)?min(res,res1):-min(res,res1); - else if (z<-1.0e-27) return (m>0)?max(res,res1):-max(res,res1); - else { - y=fabs(x); - return (m>0)?__sin32(y,res,res1):-__sin32(y,res,res1); - } - } - } - } /* else if (k < 0x3fed8000) */ - /*-------------------0.921875 <= |x| < 0.953125 ------------------------*/ - else - if (k < 0x3fee8000) { - n = 884+((k&0x000fe000)>>13)*14; - if (m>0) xx = x - asncs.x[n]; - else xx = -x - asncs.x[n]; - t = asncs.x[n+1]*xx; - p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+ - xx*(asncs.x[n+5]+xx*(asncs.x[n+6] - +xx*(asncs.x[n+7]+xx*(asncs.x[n+8]+ - xx*asncs.x[n+9])))))))+asncs.x[n+10]; - t+=p; - res =asncs.x[n+11] +t; - cor = (asncs.x[n+11]-res)+t; - if (res == res+1.01*cor) return (m>0)?res:-res; - else { - r=asncs.x[n+11]+xx*asncs.x[n+12]; - t=((asncs.x[n+11]-r)+xx*asncs.x[n+12])+(p+xx*asncs.x[n+13]); - res = r+t; - cor = (r-res)+t; - if (res == res+1.0007*cor) return (m>0)?res:-res; - else { - res1=res+1.1*cor; - z=0.5*(res1-res); - y=(hp0.x-res)-z; - z=y+hp1.x; - y=(y-z)+hp1.x; - __dubcos(z,y,w); - z=(w[0]-fabs(x))+w[1]; - if (z>1.0e-27) return (m>0)?min(res,res1):-min(res,res1); - else if (z<-1.0e-27) return (m>0)?max(res,res1):-max(res,res1); - else { - y=fabs(x); - return (m>0)?__sin32(y,res,res1):-__sin32(y,res,res1); - } - } - } - } /* else if (k < 0x3fee8000) */ - - /*--------------------0.953125 <= |x| < 0.96875 ------------------------*/ - else - if (k < 0x3fef0000) { - n = 768+((k&0x000fe000)>>13)*15; - if (m>0) xx = x - asncs.x[n]; - else xx = -x - asncs.x[n]; - t = asncs.x[n+1]*xx; - p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+ - xx*(asncs.x[n+5]+xx*(asncs.x[n+6] - +xx*(asncs.x[n+7]+xx*(asncs.x[n+8]+ - xx*(asncs.x[n+9]+xx*asncs.x[n+10]))))))))+asncs.x[n+11]; - t+=p; - res =asncs.x[n+12] +t; - cor = (asncs.x[n+12]-res)+t; - if (res == res+1.01*cor) return (m>0)?res:-res; - else { - r=asncs.x[n+12]+xx*asncs.x[n+13]; - t=((asncs.x[n+12]-r)+xx*asncs.x[n+13])+(p+xx*asncs.x[n+14]); - res = r+t; - cor = (r-res)+t; - if (res == res+1.0007*cor) return (m>0)?res:-res; - else { - res1=res+1.1*cor; - z=0.5*(res1-res); - y=(hp0.x-res)-z; - z=y+hp1.x; - y=(y-z)+hp1.x; - __dubcos(z,y,w); - z=(w[0]-fabs(x))+w[1]; - if (z>1.0e-27) return (m>0)?min(res,res1):-min(res,res1); - else if (z<-1.0e-27) return (m>0)?max(res,res1):-max(res,res1); - else { - y=fabs(x); - return (m>0)?__sin32(y,res,res1):-__sin32(y,res,res1); - } - } - } - } /* else if (k < 0x3fef0000) */ - /*--------------------0.96875 <= |x| < 1 --------------------------------*/ - else - if (k<0x3ff00000) { - z = 0.5*((m>0)?(1.0-x):(1.0+x)); - v.x=z; - k=v.i[HIGH_HALF]; - t=inroot[(k&0x001fffff)>>14]*powtwo[511-(k>>21)]; - r=1.0-t*t*z; - t = t*(rt0+r*(rt1+r*(rt2+r*rt3))); - c=t*z; - t=c*(1.5-0.5*t*c); - y=(c+t24)-t24; - cc = (z-y*y)/(t+y); - p=(((((f6*z+f5)*z+f4)*z+f3)*z+f2)*z+f1)*z; - cor = (hp1.x - 2.0*cc)-2.0*(y+cc)*p; - res1 = hp0.x - 2.0*y; - res =res1 + cor; - if (res == res+1.003*((res1-res)+cor)) return (m>0)?res:-res; - else { - c=y+cc; - cc=(y-c)+cc; - __doasin(c,cc,w); - res1=hp0.x-2.0*w[0]; - cor=((hp0.x-res1)-2.0*w[0])+(hp1.x-2.0*w[1]); - res = res1+cor; - cor = (res1-res)+cor; - if (res==(res+1.0000001*cor)) return (m>0)?res:-res; - else { - y=fabs(x); - res1=res+1.1*cor; - return (m>0)?__sin32(y,res,res1):-__sin32(y,res,res1); - } - } - } /* else if (k < 0x3ff00000) */ - /*---------------------------- |x|>=1 -------------------------------*/ - else if (k==0x3ff00000 && u.i[LOW_HALF]==0) return (m>0)?hp0.x:-hp0.x; - else - if (k>0x7ff00000 || (k == 0x7ff00000 && u.i[LOW_HALF] != 0)) return x + x; - else { - u.i[HIGH_HALF]=0x7ff00000; - v.i[HIGH_HALF]=0x7ff00000; - u.i[LOW_HALF]=0; - v.i[LOW_HALF]=0; - return u.x/v.x; /* NaN */ - } -} -#ifndef __ieee754_asin -strong_alias (__ieee754_asin, __asin_finite) -#endif - -/*******************************************************************/ -/* */ -/* End of arcsine, below is arccosine */ -/* */ -/*******************************************************************/ - -double -SECTION -__ieee754_acos(double x) -{ - double x1,x2,xx,s1,s2,res1,p,t,res,r,cor,cc,y,c,z,w[2],eps; - mynumber u,v; - int4 k,m,n; - u.x = x; - m = u.i[HIGH_HALF]; - k = 0x7fffffff&m; - /*------------------- |x|<2.77556*10^-17 ----------------------*/ - if (k < 0x3c880000) return hp0.x; - - /*----------------- 2.77556*10^-17 <= |x| < 2^-3 --------------*/ - else - if (k < 0x3fc00000) { - x2 = x*x; - t = (((((f6*x2 + f5)*x2 + f4)*x2 + f3)*x2 + f2)*x2 + f1)*(x2*x); - r=hp0.x-x; - cor=(((hp0.x-r)-x)+hp1.x)-t; - res = r+cor; - cor = (r-res)+cor; - if (res == res+1.004*cor) return res; - else { - x1 = x+big; - xx = x*x; - x1 -= big; - x2 = x - x1; - p = x1*x1*x1; - s1 = a1.x*p; - s2 = ((((((c7*xx + c6)*xx + c5)*xx + c4)*xx + c3)*xx + c2)*xx*xx*x + - ((a1.x+a2.x)*x2*x2+ 0.5*x1*x)*x2) + a2.x*p; - res1 = x+s1; - s2 = ((x-res1)+s1)+s2; - r=hp0.x-res1; - cor=(((hp0.x-r)-res1)+hp1.x)-s2; - res = r+cor; - cor = (r-res)+cor; - if (res == res+1.00004*cor) return res; - else { - __doasin(x,0,w); - r=hp0.x-w[0]; - cor=((hp0.x-r)-w[0])+(hp1.x-w[1]); - res=r+cor; - cor=(r-res)+cor; - if (res ==(res +1.00000001*cor)) return res; - else { - res1=res+1.1*cor; - return __cos32(x,res,res1); - } - } - } - } /* else if (k < 0x3fc00000) */ - /*---------------------- 0.125 <= |x| < 0.5 --------------------*/ - else - if (k < 0x3fe00000) { - if (k<0x3fd00000) n = 11*((k&0x000fffff)>>15); - else n = 11*((k&0x000fffff)>>14)+352; - if (m>0) xx = x - asncs.x[n]; - else xx = -x - asncs.x[n]; - t = asncs.x[n+1]*xx; - p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+ - xx*(asncs.x[n+5]+xx*asncs.x[n+6]))))+asncs.x[n+7]; - t+=p; - y = (m>0)?(hp0.x-asncs.x[n+8]):(hp0.x+asncs.x[n+8]); - t = (m>0)?(hp1.x-t):(hp1.x+t); - res = y+t; - if (res == res+1.02*((y-res)+t)) return res; - else { - r=asncs.x[n+8]+xx*asncs.x[n+9]; - t=((asncs.x[n+8]-r)+xx*asncs.x[n+9])+(p+xx*asncs.x[n+10]); - if (m>0) - {p = hp0.x-r; t = (((hp0.x-p)-r)-t)+hp1.x; } - else - {p = hp0.x+r; t = ((hp0.x-p)+r)+(hp1.x+t); } - res = p+t; - cor = (p-res)+t; - if (res == (res+1.0002*cor)) return res; - else { - res1=res+1.1*cor; - z=0.5*(res1-res); - __docos(res,z,w); - z=(w[0]-x)+w[1]; - if (z>1.0e-27) return max(res,res1); - else if (z<-1.0e-27) return min(res,res1); - else return __cos32(x,res,res1); - } - } - } /* else if (k < 0x3fe00000) */ - - /*--------------------------- 0.5 <= |x| < 0.75 ---------------------*/ - else - if (k < 0x3fe80000) { - n = 1056+((k&0x000fe000)>>11)*3; - if (m>0) {xx = x - asncs.x[n]; eps=1.04; } - else {xx = -x - asncs.x[n]; eps=1.02; } - t = asncs.x[n+1]*xx; - p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+ - xx*(asncs.x[n+5]+xx*(asncs.x[n+6]+ - xx*asncs.x[n+7])))))+asncs.x[n+8]; - t+=p; - y = (m>0)?(hp0.x-asncs.x[n+9]):(hp0.x+asncs.x[n+9]); - t = (m>0)?(hp1.x-t):(hp1.x+t); - res = y+t; - if (res == res+eps*((y-res)+t)) return res; - else { - r=asncs.x[n+9]+xx*asncs.x[n+10]; - t=((asncs.x[n+9]-r)+xx*asncs.x[n+10])+(p+xx*asncs.x[n+11]); - if (m>0) {p = hp0.x-r; t = (((hp0.x-p)-r)-t)+hp1.x; eps=1.0004; } - else {p = hp0.x+r; t = ((hp0.x-p)+r)+(hp1.x+t); eps=1.0002; } - res = p+t; - cor = (p-res)+t; - if (res == (res+eps*cor)) return res; - else { - res1=res+1.1*cor; - z=0.5*(res1-res); - __docos(res,z,w); - z=(w[0]-x)+w[1]; - if (z>1.0e-27) return max(res,res1); - else if (z<-1.0e-27) return min(res,res1); - else return __cos32(x,res,res1); - } - } - } /* else if (k < 0x3fe80000) */ - -/*------------------------- 0.75 <= |x| < 0.921875 -------------*/ - else - if (k < 0x3fed8000) { - n = 992+((k&0x000fe000)>>13)*13; - if (m>0) {xx = x - asncs.x[n]; eps = 1.04; } - else {xx = -x - asncs.x[n]; eps = 1.01; } - t = asncs.x[n+1]*xx; - p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+ - xx*(asncs.x[n+5]+xx*(asncs.x[n+6]+xx*(asncs.x[n+7]+ - xx*asncs.x[n+8]))))))+asncs.x[n+9]; - t+=p; - y = (m>0)?(hp0.x-asncs.x[n+10]):(hp0.x+asncs.x[n+10]); - t = (m>0)?(hp1.x-t):(hp1.x+t); - res = y+t; - if (res == res+eps*((y-res)+t)) return res; - else { - r=asncs.x[n+10]+xx*asncs.x[n+11]; - t=((asncs.x[n+10]-r)+xx*asncs.x[n+11])+(p+xx*asncs.x[n+12]); - if (m>0) {p = hp0.x-r; t = (((hp0.x-p)-r)-t)+hp1.x; eps=1.0032; } - else {p = hp0.x+r; t = ((hp0.x-p)+r)+(hp1.x+t); eps=1.0008; } - res = p+t; - cor = (p-res)+t; - if (res == (res+eps*cor)) return res; - else { - res1=res+1.1*cor; - z=0.5*(res1-res); - __docos(res,z,w); - z=(w[0]-x)+w[1]; - if (z>1.0e-27) return max(res,res1); - else if (z<-1.0e-27) return min(res,res1); - else return __cos32(x,res,res1); - } - } - } /* else if (k < 0x3fed8000) */ - -/*-------------------0.921875 <= |x| < 0.953125 ------------------*/ - else - if (k < 0x3fee8000) { - n = 884+((k&0x000fe000)>>13)*14; - if (m>0) {xx = x - asncs.x[n]; eps=1.04; } - else {xx = -x - asncs.x[n]; eps =1.005; } - t = asncs.x[n+1]*xx; - p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+ - xx*(asncs.x[n+5]+xx*(asncs.x[n+6] - +xx*(asncs.x[n+7]+xx*(asncs.x[n+8]+ - xx*asncs.x[n+9])))))))+asncs.x[n+10]; - t+=p; - y = (m>0)?(hp0.x-asncs.x[n+11]):(hp0.x+asncs.x[n+11]); - t = (m>0)?(hp1.x-t):(hp1.x+t); - res = y+t; - if (res == res+eps*((y-res)+t)) return res; - else { - r=asncs.x[n+11]+xx*asncs.x[n+12]; - t=((asncs.x[n+11]-r)+xx*asncs.x[n+12])+(p+xx*asncs.x[n+13]); - if (m>0) {p = hp0.x-r; t = (((hp0.x-p)-r)-t)+hp1.x; eps=1.0030; } - else {p = hp0.x+r; t = ((hp0.x-p)+r)+(hp1.x+t); eps=1.0005; } - res = p+t; - cor = (p-res)+t; - if (res == (res+eps*cor)) return res; - else { - res1=res+1.1*cor; - z=0.5*(res1-res); - __docos(res,z,w); - z=(w[0]-x)+w[1]; - if (z>1.0e-27) return max(res,res1); - else if (z<-1.0e-27) return min(res,res1); - else return __cos32(x,res,res1); - } - } - } /* else if (k < 0x3fee8000) */ - - /*--------------------0.953125 <= |x| < 0.96875 ----------------*/ - else - if (k < 0x3fef0000) { - n = 768+((k&0x000fe000)>>13)*15; - if (m>0) {xx = x - asncs.x[n]; eps=1.04; } - else {xx = -x - asncs.x[n]; eps=1.005;} - t = asncs.x[n+1]*xx; - p=xx*xx*(asncs.x[n+2]+xx*(asncs.x[n+3]+xx*(asncs.x[n+4]+ - xx*(asncs.x[n+5]+xx*(asncs.x[n+6] - +xx*(asncs.x[n+7]+xx*(asncs.x[n+8]+xx*(asncs.x[n+9]+ - xx*asncs.x[n+10]))))))))+asncs.x[n+11]; - t+=p; - y = (m>0)?(hp0.x-asncs.x[n+12]):(hp0.x+asncs.x[n+12]); - t = (m>0)?(hp1.x-t):(hp1.x+t); - res = y+t; - if (res == res+eps*((y-res)+t)) return res; - else { - r=asncs.x[n+12]+xx*asncs.x[n+13]; - t=((asncs.x[n+12]-r)+xx*asncs.x[n+13])+(p+xx*asncs.x[n+14]); - if (m>0) {p = hp0.x-r; t = (((hp0.x-p)-r)-t)+hp1.x; eps=1.0030; } - else {p = hp0.x+r; t = ((hp0.x-p)+r)+(hp1.x+t); eps=1.0005; } - res = p+t; - cor = (p-res)+t; - if (res == (res+eps*cor)) return res; - else { - res1=res+1.1*cor; - z=0.5*(res1-res); - __docos(res,z,w); - z=(w[0]-x)+w[1]; - if (z>1.0e-27) return max(res,res1); - else if (z<-1.0e-27) return min(res,res1); - else return __cos32(x,res,res1); - } - } - } /* else if (k < 0x3fef0000) */ - /*-----------------0.96875 <= |x| < 1 ---------------------------*/ - - else - if (k<0x3ff00000) { - z = 0.5*((m>0)?(1.0-x):(1.0+x)); - v.x=z; - k=v.i[HIGH_HALF]; - t=inroot[(k&0x001fffff)>>14]*powtwo[511-(k>>21)]; - r=1.0-t*t*z; - t = t*(rt0+r*(rt1+r*(rt2+r*rt3))); - c=t*z; - t=c*(1.5-0.5*t*c); - y = (t27*c+c)-t27*c; - cc = (z-y*y)/(t+y); - p=(((((f6*z+f5)*z+f4)*z+f3)*z+f2)*z+f1)*z; - if (m<0) { - cor = (hp1.x - cc)-(y+cc)*p; - res1 = hp0.x - y; - res =res1 + cor; - if (res == res+1.002*((res1-res)+cor)) return (res+res); - else { - c=y+cc; - cc=(y-c)+cc; - __doasin(c,cc,w); - res1=hp0.x-w[0]; - cor=((hp0.x-res1)-w[0])+(hp1.x-w[1]); - res = res1+cor; - cor = (res1-res)+cor; - if (res==(res+1.000001*cor)) return (res+res); - else { - res=res+res; - res1=res+1.2*cor; - return __cos32(x,res,res1); - } - } - } - else { - cor = cc+p*(y+cc); - res = y + cor; - if (res == res+1.03*((y-res)+cor)) return (res+res); - else { - c=y+cc; - cc=(y-c)+cc; - __doasin(c,cc,w); - res = w[0]; - cor=w[1]; - if (res==(res+1.000001*cor)) return (res+res); - else { - res=res+res; - res1=res+1.2*cor; - return __cos32(x,res,res1); - } - } - } - } /* else if (k < 0x3ff00000) */ - - /*---------------------------- |x|>=1 -----------------------*/ - else - if (k==0x3ff00000 && u.i[LOW_HALF]==0) return (m>0)?0:2.0*hp0.x; - else - if (k>0x7ff00000 || (k == 0x7ff00000 && u.i[LOW_HALF] != 0)) return x + x; - else { - u.i[HIGH_HALF]=0x7ff00000; - v.i[HIGH_HALF]=0x7ff00000; - u.i[LOW_HALF]=0; - v.i[LOW_HALF]=0; - return u.x/v.x; - } -} -#ifndef __ieee754_acos -strong_alias (__ieee754_acos, __acos_finite) -#endif diff --git a/sysdeps/ieee754/dbl-64/e_atan2.c b/sysdeps/ieee754/dbl-64/e_atan2.c deleted file mode 100644 index 3c9d964b9b..0000000000 --- a/sysdeps/ieee754/dbl-64/e_atan2.c +++ /dev/null @@ -1,620 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/************************************************************************/ -/* MODULE_NAME: atnat2.c */ -/* */ -/* FUNCTIONS: uatan2 */ -/* atan2Mp */ -/* signArctan2 */ -/* normalized */ -/* */ -/* FILES NEEDED: dla.h endian.h mpa.h mydefs.h atnat2.h */ -/* mpatan.c mpatan2.c mpsqrt.c */ -/* uatan.tbl */ -/* */ -/* An ultimate atan2() routine. Given two IEEE double machine numbers y,*/ -/* x it computes the correctly rounded (to nearest) value of atan2(y,x).*/ -/* */ -/* Assumption: Machine arithmetic operations are performed in */ -/* round to nearest mode of IEEE 754 standard. */ -/* */ -/************************************************************************/ - -#include -#include "mpa.h" -#include "MathLib.h" -#include "uatan.tbl" -#include "atnat2.h" -#include -#include -#include -#include -#include - -#ifndef SECTION -# define SECTION -#endif - -/************************************************************************/ -/* An ultimate atan2 routine. Given two IEEE double machine numbers y,x */ -/* it computes the correctly rounded (to nearest) value of atan2(y,x). */ -/* Assumption: Machine arithmetic operations are performed in */ -/* round to nearest mode of IEEE 754 standard. */ -/************************************************************************/ -static double atan2Mp (double, double, const int[]); - /* Fix the sign and return after stage 1 or stage 2 */ -static double -signArctan2 (double y, double z) -{ - return __copysign (z, y); -} - -static double normalized (double, double, double, double); -void __mpatan2 (mp_no *, mp_no *, mp_no *, int); - -double -SECTION -__ieee754_atan2 (double y, double x) -{ - int i, de, ux, dx, uy, dy; - static const int pr[MM] = { 6, 8, 10, 20, 32 }; - double ax, ay, u, du, u9, ua, v, vv, dv, t1, t2, t3, t7, t8, - z, zz, cor, s1, ss1, s2, ss2; -#ifndef DLA_FMS - double t4, t5, t6; -#endif - number num; - - static const int ep = 59768832, /* 57*16**5 */ - em = -59768832; /* -57*16**5 */ - - /* x=NaN or y=NaN */ - num.d = x; - ux = num.i[HIGH_HALF]; - dx = num.i[LOW_HALF]; - if ((ux & 0x7ff00000) == 0x7ff00000) - { - if (((ux & 0x000fffff) | dx) != 0x00000000) - return x + y; - } - num.d = y; - uy = num.i[HIGH_HALF]; - dy = num.i[LOW_HALF]; - if ((uy & 0x7ff00000) == 0x7ff00000) - { - if (((uy & 0x000fffff) | dy) != 0x00000000) - return y + y; - } - - /* y=+-0 */ - if (uy == 0x00000000) - { - if (dy == 0x00000000) - { - if ((ux & 0x80000000) == 0x00000000) - return 0; - else - return opi.d; - } - } - else if (uy == 0x80000000) - { - if (dy == 0x00000000) - { - if ((ux & 0x80000000) == 0x00000000) - return -0.0; - else - return mopi.d; - } - } - - /* x=+-0 */ - if (x == 0) - { - if ((uy & 0x80000000) == 0x00000000) - return hpi.d; - else - return mhpi.d; - } - - /* x=+-INF */ - if (ux == 0x7ff00000) - { - if (dx == 0x00000000) - { - if (uy == 0x7ff00000) - { - if (dy == 0x00000000) - return qpi.d; - } - else if (uy == 0xfff00000) - { - if (dy == 0x00000000) - return mqpi.d; - } - else - { - if ((uy & 0x80000000) == 0x00000000) - return 0; - else - return -0.0; - } - } - } - else if (ux == 0xfff00000) - { - if (dx == 0x00000000) - { - if (uy == 0x7ff00000) - { - if (dy == 0x00000000) - return tqpi.d; - } - else if (uy == 0xfff00000) - { - if (dy == 0x00000000) - return mtqpi.d; - } - else - { - if ((uy & 0x80000000) == 0x00000000) - return opi.d; - else - return mopi.d; - } - } - } - - /* y=+-INF */ - if (uy == 0x7ff00000) - { - if (dy == 0x00000000) - return hpi.d; - } - else if (uy == 0xfff00000) - { - if (dy == 0x00000000) - return mhpi.d; - } - - SET_RESTORE_ROUND (FE_TONEAREST); - /* either x/y or y/x is very close to zero */ - ax = (x < 0) ? -x : x; - ay = (y < 0) ? -y : y; - de = (uy & 0x7ff00000) - (ux & 0x7ff00000); - if (de >= ep) - { - return ((y > 0) ? hpi.d : mhpi.d); - } - else if (de <= em) - { - if (x > 0) - { - double ret; - if ((z = ay / ax) < TWOM1022) - ret = normalized (ax, ay, y, z); - else - ret = signArctan2 (y, z); - if (fabs (ret) < DBL_MIN) - { - double vret = ret ? ret : DBL_MIN; - double force_underflow = vret * vret; - math_force_eval (force_underflow); - } - return ret; - } - else - { - return ((y > 0) ? opi.d : mopi.d); - } - } - - /* if either x or y is extremely close to zero, scale abs(x), abs(y). */ - if (ax < twom500.d || ay < twom500.d) - { - ax *= two500.d; - ay *= two500.d; - } - - /* Likewise for large x and y. */ - if (ax > two500.d || ay > two500.d) - { - ax *= twom500.d; - ay *= twom500.d; - } - - /* x,y which are neither special nor extreme */ - if (ay < ax) - { - u = ay / ax; - EMULV (ax, u, v, vv, t1, t2, t3, t4, t5); - du = ((ay - v) - vv) / ax; - } - else - { - u = ax / ay; - EMULV (ay, u, v, vv, t1, t2, t3, t4, t5); - du = ((ax - v) - vv) / ay; - } - - if (x > 0) - { - /* (i) x>0, abs(y)< abs(x): atan(ay/ax) */ - if (ay < ax) - { - if (u < inv16.d) - { - v = u * u; - - zz = du + u * v * (d3.d - + v * (d5.d - + v * (d7.d - + v * (d9.d - + v * (d11.d - + v * d13.d))))); - - if ((z = u + (zz - u1.d * u)) == u + (zz + u1.d * u)) - return signArctan2 (y, z); - - MUL2 (u, du, u, du, v, vv, t1, t2, t3, t4, t5, t6, t7, t8); - s1 = v * (f11.d + v * (f13.d - + v * (f15.d + v * (f17.d + v * f19.d)))); - ADD2 (f9.d, ff9.d, s1, 0, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f7.d, ff7.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f5.d, ff5.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f3.d, ff3.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (u, du, s1, ss1, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (u, du, s2, ss2, s1, ss1, t1, t2); - - if ((z = s1 + (ss1 - u5.d * s1)) == s1 + (ss1 + u5.d * s1)) - return signArctan2 (y, z); - - return atan2Mp (x, y, pr); - } - - i = (TWO52 + TWO8 * u) - TWO52; - i -= 16; - t3 = u - cij[i][0].d; - EADD (t3, du, v, dv); - t1 = cij[i][1].d; - t2 = cij[i][2].d; - zz = v * t2 + (dv * t2 - + v * v * (cij[i][3].d - + v * (cij[i][4].d - + v * (cij[i][5].d - + v * cij[i][6].d)))); - if (i < 112) - { - if (i < 48) - u9 = u91.d; /* u < 1/4 */ - else - u9 = u92.d; - } /* 1/4 <= u < 1/2 */ - else - { - if (i < 176) - u9 = u93.d; /* 1/2 <= u < 3/4 */ - else - u9 = u94.d; - } /* 3/4 <= u <= 1 */ - if ((z = t1 + (zz - u9 * t1)) == t1 + (zz + u9 * t1)) - return signArctan2 (y, z); - - t1 = u - hij[i][0].d; - EADD (t1, du, v, vv); - s1 = v * (hij[i][11].d - + v * (hij[i][12].d - + v * (hij[i][13].d - + v * (hij[i][14].d - + v * hij[i][15].d)))); - ADD2 (hij[i][9].d, hij[i][10].d, s1, 0, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][7].d, hij[i][8].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][5].d, hij[i][6].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][3].d, hij[i][4].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][1].d, hij[i][2].d, s1, ss1, s2, ss2, t1, t2); - - if ((z = s2 + (ss2 - ub.d * s2)) == s2 + (ss2 + ub.d * s2)) - return signArctan2 (y, z); - return atan2Mp (x, y, pr); - } - - /* (ii) x>0, abs(x)<=abs(y): pi/2-atan(ax/ay) */ - if (u < inv16.d) - { - v = u * u; - zz = u * v * (d3.d - + v * (d5.d - + v * (d7.d - + v * (d9.d - + v * (d11.d - + v * d13.d))))); - ESUB (hpi.d, u, t2, cor); - t3 = ((hpi1.d + cor) - du) - zz; - if ((z = t2 + (t3 - u2.d)) == t2 + (t3 + u2.d)) - return signArctan2 (y, z); - - MUL2 (u, du, u, du, v, vv, t1, t2, t3, t4, t5, t6, t7, t8); - s1 = v * (f11.d - + v * (f13.d - + v * (f15.d + v * (f17.d + v * f19.d)))); - ADD2 (f9.d, ff9.d, s1, 0, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f7.d, ff7.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f5.d, ff5.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f3.d, ff3.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (u, du, s1, ss1, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (u, du, s2, ss2, s1, ss1, t1, t2); - SUB2 (hpi.d, hpi1.d, s1, ss1, s2, ss2, t1, t2); - - if ((z = s2 + (ss2 - u6.d)) == s2 + (ss2 + u6.d)) - return signArctan2 (y, z); - return atan2Mp (x, y, pr); - } - - i = (TWO52 + TWO8 * u) - TWO52; - i -= 16; - v = (u - cij[i][0].d) + du; - - zz = hpi1.d - v * (cij[i][2].d - + v * (cij[i][3].d - + v * (cij[i][4].d - + v * (cij[i][5].d - + v * cij[i][6].d)))); - t1 = hpi.d - cij[i][1].d; - if (i < 112) - ua = ua1.d; /* w < 1/2 */ - else - ua = ua2.d; /* w >= 1/2 */ - if ((z = t1 + (zz - ua)) == t1 + (zz + ua)) - return signArctan2 (y, z); - - t1 = u - hij[i][0].d; - EADD (t1, du, v, vv); - - s1 = v * (hij[i][11].d - + v * (hij[i][12].d - + v * (hij[i][13].d - + v * (hij[i][14].d - + v * hij[i][15].d)))); - - ADD2 (hij[i][9].d, hij[i][10].d, s1, 0, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][7].d, hij[i][8].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][5].d, hij[i][6].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][3].d, hij[i][4].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][1].d, hij[i][2].d, s1, ss1, s2, ss2, t1, t2); - SUB2 (hpi.d, hpi1.d, s2, ss2, s1, ss1, t1, t2); - - if ((z = s1 + (ss1 - uc.d)) == s1 + (ss1 + uc.d)) - return signArctan2 (y, z); - return atan2Mp (x, y, pr); - } - - /* (iii) x<0, abs(x)< abs(y): pi/2+atan(ax/ay) */ - if (ax < ay) - { - if (u < inv16.d) - { - v = u * u; - zz = u * v * (d3.d - + v * (d5.d - + v * (d7.d - + v * (d9.d - + v * (d11.d + v * d13.d))))); - EADD (hpi.d, u, t2, cor); - t3 = ((hpi1.d + cor) + du) + zz; - if ((z = t2 + (t3 - u3.d)) == t2 + (t3 + u3.d)) - return signArctan2 (y, z); - - MUL2 (u, du, u, du, v, vv, t1, t2, t3, t4, t5, t6, t7, t8); - s1 = v * (f11.d - + v * (f13.d + v * (f15.d + v * (f17.d + v * f19.d)))); - ADD2 (f9.d, ff9.d, s1, 0, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f7.d, ff7.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f5.d, ff5.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f3.d, ff3.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (u, du, s1, ss1, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (u, du, s2, ss2, s1, ss1, t1, t2); - ADD2 (hpi.d, hpi1.d, s1, ss1, s2, ss2, t1, t2); - - if ((z = s2 + (ss2 - u7.d)) == s2 + (ss2 + u7.d)) - return signArctan2 (y, z); - return atan2Mp (x, y, pr); - } - - i = (TWO52 + TWO8 * u) - TWO52; - i -= 16; - v = (u - cij[i][0].d) + du; - zz = hpi1.d + v * (cij[i][2].d - + v * (cij[i][3].d - + v * (cij[i][4].d - + v * (cij[i][5].d - + v * cij[i][6].d)))); - t1 = hpi.d + cij[i][1].d; - if (i < 112) - ua = ua1.d; /* w < 1/2 */ - else - ua = ua2.d; /* w >= 1/2 */ - if ((z = t1 + (zz - ua)) == t1 + (zz + ua)) - return signArctan2 (y, z); - - t1 = u - hij[i][0].d; - EADD (t1, du, v, vv); - s1 = v * (hij[i][11].d - + v * (hij[i][12].d - + v * (hij[i][13].d - + v * (hij[i][14].d - + v * hij[i][15].d)))); - ADD2 (hij[i][9].d, hij[i][10].d, s1, 0, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][7].d, hij[i][8].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][5].d, hij[i][6].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][3].d, hij[i][4].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][1].d, hij[i][2].d, s1, ss1, s2, ss2, t1, t2); - ADD2 (hpi.d, hpi1.d, s2, ss2, s1, ss1, t1, t2); - - if ((z = s1 + (ss1 - uc.d)) == s1 + (ss1 + uc.d)) - return signArctan2 (y, z); - return atan2Mp (x, y, pr); - } - - /* (iv) x<0, abs(y)<=abs(x): pi-atan(ax/ay) */ - if (u < inv16.d) - { - v = u * u; - zz = u * v * (d3.d - + v * (d5.d - + v * (d7.d - + v * (d9.d + v * (d11.d + v * d13.d))))); - ESUB (opi.d, u, t2, cor); - t3 = ((opi1.d + cor) - du) - zz; - if ((z = t2 + (t3 - u4.d)) == t2 + (t3 + u4.d)) - return signArctan2 (y, z); - - MUL2 (u, du, u, du, v, vv, t1, t2, t3, t4, t5, t6, t7, t8); - s1 = v * (f11.d + v * (f13.d + v * (f15.d + v * (f17.d + v * f19.d)))); - ADD2 (f9.d, ff9.d, s1, 0, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f7.d, ff7.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f5.d, ff5.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f3.d, ff3.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (u, du, s1, ss1, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (u, du, s2, ss2, s1, ss1, t1, t2); - SUB2 (opi.d, opi1.d, s1, ss1, s2, ss2, t1, t2); - - if ((z = s2 + (ss2 - u8.d)) == s2 + (ss2 + u8.d)) - return signArctan2 (y, z); - return atan2Mp (x, y, pr); - } - - i = (TWO52 + TWO8 * u) - TWO52; - i -= 16; - v = (u - cij[i][0].d) + du; - zz = opi1.d - v * (cij[i][2].d - + v * (cij[i][3].d - + v * (cij[i][4].d - + v * (cij[i][5].d + v * cij[i][6].d)))); - t1 = opi.d - cij[i][1].d; - if (i < 112) - ua = ua1.d; /* w < 1/2 */ - else - ua = ua2.d; /* w >= 1/2 */ - if ((z = t1 + (zz - ua)) == t1 + (zz + ua)) - return signArctan2 (y, z); - - t1 = u - hij[i][0].d; - - EADD (t1, du, v, vv); - - s1 = v * (hij[i][11].d - + v * (hij[i][12].d - + v * (hij[i][13].d - + v * (hij[i][14].d + v * hij[i][15].d)))); - - ADD2 (hij[i][9].d, hij[i][10].d, s1, 0, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][7].d, hij[i][8].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][5].d, hij[i][6].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][3].d, hij[i][4].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][1].d, hij[i][2].d, s1, ss1, s2, ss2, t1, t2); - SUB2 (opi.d, opi1.d, s2, ss2, s1, ss1, t1, t2); - - if ((z = s1 + (ss1 - uc.d)) == s1 + (ss1 + uc.d)) - return signArctan2 (y, z); - return atan2Mp (x, y, pr); -} - -#ifndef __ieee754_atan2 -strong_alias (__ieee754_atan2, __atan2_finite) -#endif - -/* Treat the Denormalized case */ -static double -SECTION -normalized (double ax, double ay, double y, double z) -{ - int p; - mp_no mpx, mpy, mpz, mperr, mpz2, mpt1; - p = 6; - __dbl_mp (ax, &mpx, p); - __dbl_mp (ay, &mpy, p); - __dvd (&mpy, &mpx, &mpz, p); - __dbl_mp (ue.d, &mpt1, p); - __mul (&mpz, &mpt1, &mperr, p); - __sub (&mpz, &mperr, &mpz2, p); - __mp_dbl (&mpz2, &z, p); - return signArctan2 (y, z); -} - -/* Stage 3: Perform a multi-Precision computation */ -static double -SECTION -atan2Mp (double x, double y, const int pr[]) -{ - double z1, z2; - int i, p; - mp_no mpx, mpy, mpz, mpz1, mpz2, mperr, mpt1; - for (i = 0; i < MM; i++) - { - p = pr[i]; - __dbl_mp (x, &mpx, p); - __dbl_mp (y, &mpy, p); - __mpatan2 (&mpy, &mpx, &mpz, p); - __dbl_mp (ud[i].d, &mpt1, p); - __mul (&mpz, &mpt1, &mperr, p); - __add (&mpz, &mperr, &mpz1, p); - __sub (&mpz, &mperr, &mpz2, p); - __mp_dbl (&mpz1, &z1, p); - __mp_dbl (&mpz2, &z2, p); - if (z1 == z2) - { - LIBC_PROBE (slowatan2, 4, &p, &x, &y, &z1); - return z1; - } - } - LIBC_PROBE (slowatan2_inexact, 4, &p, &x, &y, &z1); - return z1; /*if impossible to do exact computing */ -} diff --git a/sysdeps/ieee754/dbl-64/e_atanh.c b/sysdeps/ieee754/dbl-64/e_atanh.c deleted file mode 100644 index a9d19a0472..0000000000 --- a/sysdeps/ieee754/dbl-64/e_atanh.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* __ieee754_atanh(x) - Method : - 1.Reduced x to positive by atanh(-x) = -atanh(x) - 2.For x>=0.5 - 1 2x x - atanh(x) = --- * log(1 + -------) = 0.5 * log1p(2 * --------) - 2 1 - x 1 - x - - For x<0.5 - atanh(x) = 0.5*log1p(2x+2x*x/(1-x)) - - Special cases: - atanh(x) is NaN if |x| > 1 with signal; - atanh(NaN) is that NaN with no signal; - atanh(+-1) is +-INF with signal. - - */ - -#include -#include -#include -#include - -static const double huge = 1e300; - -double -__ieee754_atanh (double x) -{ - double xa = fabs (x); - double t; - if (isless (xa, 0.5)) - { - if (__glibc_unlikely (xa < 0x1.0p-28)) - { - math_force_eval (huge + x); - math_check_force_underflow (x); - return x; - } - - t = xa + xa; - t = 0.5 * __log1p (t + t * xa / (1.0 - xa)); - } - else if (__glibc_likely (isless (xa, 1.0))) - t = 0.5 * __log1p ((xa + xa) / (1.0 - xa)); - else - { - if (isgreater (xa, 1.0)) - return (x - x) / (x - x); - - return x / 0.0; - } - - return __copysign (t, x); -} -strong_alias (__ieee754_atanh, __atanh_finite) diff --git a/sysdeps/ieee754/dbl-64/e_cosh.c b/sysdeps/ieee754/dbl-64/e_cosh.c deleted file mode 100644 index 52a5d5007d..0000000000 --- a/sysdeps/ieee754/dbl-64/e_cosh.c +++ /dev/null @@ -1,88 +0,0 @@ -/* Optimized by Ulrich Drepper , 2011 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_cosh(x) - * Method : - * mathematically cosh(x) if defined to be (exp(x)+exp(-x))/2 - * 1. Replace x by |x| (cosh(x) = cosh(-x)). - * 2. - * [ exp(x) - 1 ]^2 - * 0 <= x <= ln2/2 : cosh(x) := 1 + ------------------- - * 2*exp(x) - * - * exp(x) + 1/exp(x) - * ln2/2 <= x <= 22 : cosh(x) := ------------------- - * 2 - * 22 <= x <= lnovft : cosh(x) := exp(x)/2 - * lnovft <= x <= ln2ovft: cosh(x) := exp(x/2)/2 * exp(x/2) - * ln2ovft < x : cosh(x) := huge*huge (overflow) - * - * Special cases: - * cosh(x) is |x| if x is +INF, -INF, or NaN. - * only cosh(0)=1 is exact for finite x. - */ - -#include -#include - -static const double one = 1.0, half = 0.5, huge = 1.0e300; - -double -__ieee754_cosh (double x) -{ - double t, w; - int32_t ix; - u_int32_t lx; - - /* High word of |x|. */ - GET_HIGH_WORD (ix, x); - ix &= 0x7fffffff; - - /* |x| in [0,22] */ - if (ix < 0x40360000) - { - /* |x| in [0,0.5*ln2], return 1+expm1(|x|)^2/(2*exp(|x|)) */ - if (ix < 0x3fd62e43) - { - if (ix < 0x3c800000) - return one; /* cosh(tiny) = 1 */ - t = __expm1 (fabs (x)); - w = one + t; - return one + (t * t) / (w + w); - } - - /* |x| in [0.5*ln2,22], return (exp(|x|)+1/exp(|x|)/2; */ - t = __ieee754_exp (fabs (x)); - return half * t + half / t; - } - - /* |x| in [22, log(maxdouble)] return half*exp(|x|) */ - if (ix < 0x40862e42) - return half * __ieee754_exp (fabs (x)); - - /* |x| in [log(maxdouble), overflowthresold] */ - GET_LOW_WORD (lx, x); - if (ix < 0x408633ce || ((ix == 0x408633ce) && (lx <= (u_int32_t) 0x8fb9f87d))) - { - w = __ieee754_exp (half * fabs (x)); - t = half * w; - return t * w; - } - - /* x is INF or NaN */ - if (ix >= 0x7ff00000) - return x * x; - - /* |x| > overflowthresold, cosh(x) overflow */ - return math_narrow_eval (huge * huge); -} -strong_alias (__ieee754_cosh, __cosh_finite) diff --git a/sysdeps/ieee754/dbl-64/e_exp.c b/sysdeps/ieee754/dbl-64/e_exp.c deleted file mode 100644 index 6757a14ce1..0000000000 --- a/sysdeps/ieee754/dbl-64/e_exp.c +++ /dev/null @@ -1,361 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/***************************************************************************/ -/* MODULE_NAME:uexp.c */ -/* */ -/* FUNCTION:uexp */ -/* exp1 */ -/* */ -/* FILES NEEDED:dla.h endian.h mpa.h mydefs.h uexp.h */ -/* mpa.c mpexp.x slowexp.c */ -/* */ -/* An ultimate exp routine. Given an IEEE double machine number x */ -/* it computes the correctly rounded (to nearest) value of e^x */ -/* Assumption: Machine arithmetic operations are performed in */ -/* round to nearest mode of IEEE 754 standard. */ -/* */ -/***************************************************************************/ - -#include -#include "endian.h" -#include "uexp.h" -#include "mydefs.h" -#include "MathLib.h" -#include "uexp.tbl" -#include -#include -#include - -#ifndef SECTION -# define SECTION -#endif - -double __slowexp (double); - -/* An ultimate exp routine. Given an IEEE double machine number x it computes - the correctly rounded (to nearest) value of e^x. */ -double -SECTION -__ieee754_exp (double x) -{ - double bexp, t, eps, del, base, y, al, bet, res, rem, cor; - mynumber junk1, junk2, binexp = {{0, 0}}; - int4 i, j, m, n, ex; - double retval; - - { - SET_RESTORE_ROUND (FE_TONEAREST); - - junk1.x = x; - m = junk1.i[HIGH_HALF]; - n = m & hugeint; - - if (n > smallint && n < bigint) - { - y = x * log2e.x + three51.x; - bexp = y - three51.x; /* multiply the result by 2**bexp */ - - junk1.x = y; - - eps = bexp * ln_two2.x; /* x = bexp*ln(2) + t - eps */ - t = x - bexp * ln_two1.x; - - y = t + three33.x; - base = y - three33.x; /* t rounded to a multiple of 2**-18 */ - junk2.x = y; - del = (t - base) - eps; /* x = bexp*ln(2) + base + del */ - eps = del + del * del * (p3.x * del + p2.x); - - binexp.i[HIGH_HALF] = (junk1.i[LOW_HALF] + 1023) << 20; - - i = ((junk2.i[LOW_HALF] >> 8) & 0xfffffffe) + 356; - j = (junk2.i[LOW_HALF] & 511) << 1; - - al = coar.x[i] * fine.x[j]; - bet = ((coar.x[i] * fine.x[j + 1] + coar.x[i + 1] * fine.x[j]) - + coar.x[i + 1] * fine.x[j + 1]); - - rem = (bet + bet * eps) + al * eps; - res = al + rem; - cor = (al - res) + rem; - if (res == (res + cor * err_0)) - { - retval = res * binexp.x; - goto ret; - } - else - { - retval = __slowexp (x); - goto ret; - } /*if error is over bound */ - } - - if (n <= smallint) - { - retval = 1.0; - goto ret; - } - - if (n >= badint) - { - if (n > infint) - { - retval = x + x; - goto ret; - } /* x is NaN */ - if (n < infint) - { - if (x > 0) - goto ret_huge; - else - goto ret_tiny; - } - /* x is finite, cause either overflow or underflow */ - if (junk1.i[LOW_HALF] != 0) - { - retval = x + x; - goto ret; - } /* x is NaN */ - retval = (x > 0) ? inf.x : zero; /* |x| = inf; return either inf or 0 */ - goto ret; - } - - y = x * log2e.x + three51.x; - bexp = y - three51.x; - junk1.x = y; - eps = bexp * ln_two2.x; - t = x - bexp * ln_two1.x; - y = t + three33.x; - base = y - three33.x; - junk2.x = y; - del = (t - base) - eps; - eps = del + del * del * (p3.x * del + p2.x); - i = ((junk2.i[LOW_HALF] >> 8) & 0xfffffffe) + 356; - j = (junk2.i[LOW_HALF] & 511) << 1; - al = coar.x[i] * fine.x[j]; - bet = ((coar.x[i] * fine.x[j + 1] + coar.x[i + 1] * fine.x[j]) - + coar.x[i + 1] * fine.x[j + 1]); - rem = (bet + bet * eps) + al * eps; - res = al + rem; - cor = (al - res) + rem; - if (m >> 31) - { - ex = junk1.i[LOW_HALF]; - if (res < 1.0) - { - res += res; - cor += cor; - ex -= 1; - } - if (ex >= -1022) - { - binexp.i[HIGH_HALF] = (1023 + ex) << 20; - if (res == (res + cor * err_0)) - { - retval = res * binexp.x; - goto ret; - } - else - { - retval = __slowexp (x); - goto check_uflow_ret; - } /*if error is over bound */ - } - ex = -(1022 + ex); - binexp.i[HIGH_HALF] = (1023 - ex) << 20; - res *= binexp.x; - cor *= binexp.x; - eps = 1.0000000001 + err_0 * binexp.x; - t = 1.0 + res; - y = ((1.0 - t) + res) + cor; - res = t + y; - cor = (t - res) + y; - if (res == (res + eps * cor)) - { - binexp.i[HIGH_HALF] = 0x00100000; - retval = (res - 1.0) * binexp.x; - goto check_uflow_ret; - } - else - { - retval = __slowexp (x); - goto check_uflow_ret; - } /* if error is over bound */ - check_uflow_ret: - if (retval < DBL_MIN) - { - double force_underflow = tiny * tiny; - math_force_eval (force_underflow); - } - if (retval == 0) - goto ret_tiny; - goto ret; - } - else - { - binexp.i[HIGH_HALF] = (junk1.i[LOW_HALF] + 767) << 20; - if (res == (res + cor * err_0)) - retval = res * binexp.x * t256.x; - else - retval = __slowexp (x); - if (isinf (retval)) - goto ret_huge; - else - goto ret; - } - } -ret: - return retval; - - ret_huge: - return hhuge * hhuge; - - ret_tiny: - return tiny * tiny; -} -#ifndef __ieee754_exp -strong_alias (__ieee754_exp, __exp_finite) -#endif - -/* Compute e^(x+xx). The routine also receives bound of error of previous - calculation. If after computing exp the error exceeds the allowed bounds, - the routine returns a non-positive number. Otherwise it returns the - computed result, which is always positive. */ -double -SECTION -__exp1 (double x, double xx, double error) -{ - double bexp, t, eps, del, base, y, al, bet, res, rem, cor; - mynumber junk1, junk2, binexp = {{0, 0}}; - int4 i, j, m, n, ex; - - junk1.x = x; - m = junk1.i[HIGH_HALF]; - n = m & hugeint; /* no sign */ - - if (n > smallint && n < bigint) - { - y = x * log2e.x + three51.x; - bexp = y - three51.x; /* multiply the result by 2**bexp */ - - junk1.x = y; - - eps = bexp * ln_two2.x; /* x = bexp*ln(2) + t - eps */ - t = x - bexp * ln_two1.x; - - y = t + three33.x; - base = y - three33.x; /* t rounded to a multiple of 2**-18 */ - junk2.x = y; - del = (t - base) + (xx - eps); /* x = bexp*ln(2) + base + del */ - eps = del + del * del * (p3.x * del + p2.x); - - binexp.i[HIGH_HALF] = (junk1.i[LOW_HALF] + 1023) << 20; - - i = ((junk2.i[LOW_HALF] >> 8) & 0xfffffffe) + 356; - j = (junk2.i[LOW_HALF] & 511) << 1; - - al = coar.x[i] * fine.x[j]; - bet = ((coar.x[i] * fine.x[j + 1] + coar.x[i + 1] * fine.x[j]) - + coar.x[i + 1] * fine.x[j + 1]); - - rem = (bet + bet * eps) + al * eps; - res = al + rem; - cor = (al - res) + rem; - if (res == (res + cor * (1.0 + error + err_1))) - return res * binexp.x; - else - return -10.0; - } - - if (n <= smallint) - return 1.0; /* if x->0 e^x=1 */ - - if (n >= badint) - { - if (n > infint) - return (zero / zero); /* x is NaN, return invalid */ - if (n < infint) - return ((x > 0) ? (hhuge * hhuge) : (tiny * tiny)); - /* x is finite, cause either overflow or underflow */ - if (junk1.i[LOW_HALF] != 0) - return (zero / zero); /* x is NaN */ - return ((x > 0) ? inf.x : zero); /* |x| = inf; return either inf or 0 */ - } - - y = x * log2e.x + three51.x; - bexp = y - three51.x; - junk1.x = y; - eps = bexp * ln_two2.x; - t = x - bexp * ln_two1.x; - y = t + three33.x; - base = y - three33.x; - junk2.x = y; - del = (t - base) + (xx - eps); - eps = del + del * del * (p3.x * del + p2.x); - i = ((junk2.i[LOW_HALF] >> 8) & 0xfffffffe) + 356; - j = (junk2.i[LOW_HALF] & 511) << 1; - al = coar.x[i] * fine.x[j]; - bet = ((coar.x[i] * fine.x[j + 1] + coar.x[i + 1] * fine.x[j]) - + coar.x[i + 1] * fine.x[j + 1]); - rem = (bet + bet * eps) + al * eps; - res = al + rem; - cor = (al - res) + rem; - if (m >> 31) - { - ex = junk1.i[LOW_HALF]; - if (res < 1.0) - { - res += res; - cor += cor; - ex -= 1; - } - if (ex >= -1022) - { - binexp.i[HIGH_HALF] = (1023 + ex) << 20; - if (res == (res + cor * (1.0 + error + err_1))) - return res * binexp.x; - else - return -10.0; - } - ex = -(1022 + ex); - binexp.i[HIGH_HALF] = (1023 - ex) << 20; - res *= binexp.x; - cor *= binexp.x; - eps = 1.00000000001 + (error + err_1) * binexp.x; - t = 1.0 + res; - y = ((1.0 - t) + res) + cor; - res = t + y; - cor = (t - res) + y; - if (res == (res + eps * cor)) - { - binexp.i[HIGH_HALF] = 0x00100000; - return (res - 1.0) * binexp.x; - } - else - return -10.0; - } - else - { - binexp.i[HIGH_HALF] = (junk1.i[LOW_HALF] + 767) << 20; - if (res == (res + cor * (1.0 + error + err_1))) - return res * binexp.x * t256.x; - else - return -10.0; - } -} diff --git a/sysdeps/ieee754/dbl-64/e_exp10.c b/sysdeps/ieee754/dbl-64/e_exp10.c deleted file mode 100644 index 6c8783e405..0000000000 --- a/sysdeps/ieee754/dbl-64/e_exp10.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const double log10_high = 0x2.4d7637p0; -static const double log10_low = 0x7.6aaa2b05ba95cp-28; - -double -__ieee754_exp10 (double arg) -{ - int32_t lx; - double arg_high, arg_low; - double exp_high, exp_low; - - if (!isfinite (arg)) - return __ieee754_exp (arg); - if (arg < DBL_MIN_10_EXP - DBL_DIG - 10) - return DBL_MIN * DBL_MIN; - else if (arg > DBL_MAX_10_EXP + 1) - return DBL_MAX * DBL_MAX; - else if (fabs (arg) < 0x1p-56) - return 1.0; - - GET_LOW_WORD (lx, arg); - lx &= 0xf8000000; - arg_high = arg; - SET_LOW_WORD (arg_high, lx); - arg_low = arg - arg_high; - exp_high = arg_high * log10_high; - exp_low = arg_high * log10_low + arg_low * M_LN10; - return __ieee754_exp (exp_high) * __ieee754_exp (exp_low); -} -strong_alias (__ieee754_exp10, __exp10_finite) diff --git a/sysdeps/ieee754/dbl-64/e_exp2.c b/sysdeps/ieee754/dbl-64/e_exp2.c deleted file mode 100644 index 9efda23f06..0000000000 --- a/sysdeps/ieee754/dbl-64/e_exp2.c +++ /dev/null @@ -1,133 +0,0 @@ -/* Double-precision floating point 2^x. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Geoffrey Keating - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The basic design here is from - Shmuel Gal and Boris Bachelis, "An Accurate Elementary Mathematical - Library for the IEEE Floating Point Standard", ACM Trans. Math. Soft., - 17 (1), March 1991, pp. 26-45. - It has been slightly modified to compute 2^x instead of e^x. - */ -#include -#include -#include -#include -#include -#include -#include - -#include "t_exp2.h" - -static const double TWO1023 = 8.988465674311579539e+307; -static const double TWOM1000 = 9.3326361850321887899e-302; - -double -__ieee754_exp2 (double x) -{ - static const double himark = (double) DBL_MAX_EXP; - static const double lomark = (double) (DBL_MIN_EXP - DBL_MANT_DIG - 1); - - /* Check for usual case. */ - if (__glibc_likely (isless (x, himark))) - { - /* Exceptional cases: */ - if (__glibc_unlikely (!isgreaterequal (x, lomark))) - { - if (isinf (x)) - /* e^-inf == 0, with no error. */ - return 0; - else - /* Underflow */ - return TWOM1000 * TWOM1000; - } - - static const double THREEp42 = 13194139533312.0; - int tval, unsafe; - double rx, x22, result; - union ieee754_double ex2_u, scale_u; - - if (fabs (x) < DBL_EPSILON / 4.0) - return 1.0 + x; - - { - SET_RESTORE_ROUND_NOEX (FE_TONEAREST); - - /* 1. Argument reduction. - Choose integers ex, -256 <= t < 256, and some real - -1/1024 <= x1 <= 1024 so that - x = ex + t/512 + x1. - - First, calculate rx = ex + t/512. */ - rx = x + THREEp42; - rx -= THREEp42; - x -= rx; /* Compute x=x1. */ - /* Compute tval = (ex*512 + t)+256. - Now, t = (tval mod 512)-256 and ex=tval/512 [that's mod, NOT %; - and /-round-to-nearest not the usual c integer /]. */ - tval = (int) (rx * 512.0 + 256.0); - - /* 2. Adjust for accurate table entry. - Find e so that - x = ex + t/512 + e + x2 - where -1e6 < e < 1e6, and - (double)(2^(t/512+e)) - is accurate to one part in 2^-64. */ - - /* 'tval & 511' is the same as 'tval%512' except that it's always - positive. - Compute x = x2. */ - x -= exp2_deltatable[tval & 511]; - - /* 3. Compute ex2 = 2^(t/512+e+ex). */ - ex2_u.d = exp2_accuratetable[tval & 511]; - tval >>= 9; - /* x2 is an integer multiple of 2^-54; avoid intermediate - underflow from the calculation of x22 * x. */ - unsafe = abs (tval) >= -DBL_MIN_EXP - 56; - ex2_u.ieee.exponent += tval >> unsafe; - scale_u.d = 1.0; - scale_u.ieee.exponent += tval - (tval >> unsafe); - - /* 4. Approximate 2^x2 - 1, using a fourth-degree polynomial, - with maximum error in [-2^-10-2^-30,2^-10+2^-30] - less than 10^-19. */ - - x22 = (((.0096181293647031180 - * x + .055504110254308625) - * x + .240226506959100583) - * x + .69314718055994495) * ex2_u.d; - math_opt_barrier (x22); - } - - /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */ - result = x22 * x + ex2_u.d; - - if (!unsafe) - return result; - else - { - result *= scale_u.d; - math_check_force_underflow_nonneg (result); - return result; - } - } - else - /* Return x, if x is a NaN or Inf; or overflow, otherwise. */ - return TWO1023 * x; -} -strong_alias (__ieee754_exp2, __exp2_finite) diff --git a/sysdeps/ieee754/dbl-64/e_fmod.c b/sysdeps/ieee754/dbl-64/e_fmod.c deleted file mode 100644 index e82b302200..0000000000 --- a/sysdeps/ieee754/dbl-64/e_fmod.c +++ /dev/null @@ -1,173 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * __ieee754_fmod(x,y) - * Return x mod y in exact arithmetic - * Method: shift and subtract - */ - -#include -#include - -static const double one = 1.0, Zero[] = { 0.0, -0.0, }; - -double -__ieee754_fmod (double x, double y) -{ - int32_t n, hx, hy, hz, ix, iy, sx, i; - u_int32_t lx, ly, lz; - - EXTRACT_WORDS (hx, lx, x); - EXTRACT_WORDS (hy, ly, y); - sx = hx & 0x80000000; /* sign of x */ - hx ^= sx; /* |x| */ - hy &= 0x7fffffff; /* |y| */ - - /* purge off exception values */ - if ((hy | ly) == 0 || (hx >= 0x7ff00000) || /* y=0,or x not finite */ - ((hy | ((ly | -ly) >> 31)) > 0x7ff00000)) /* or y is NaN */ - return (x * y) / (x * y); - if (hx <= hy) - { - if ((hx < hy) || (lx < ly)) - return x; /* |x|<|y| return x */ - if (lx == ly) - return Zero[(u_int32_t) sx >> 31]; /* |x|=|y| return x*0*/ - } - - /* determine ix = ilogb(x) */ - if (__glibc_unlikely (hx < 0x00100000)) /* subnormal x */ - { - if (hx == 0) - { - for (ix = -1043, i = lx; i > 0; i <<= 1) - ix -= 1; - } - else - { - for (ix = -1022, i = (hx << 11); i > 0; i <<= 1) - ix -= 1; - } - } - else - ix = (hx >> 20) - 1023; - - /* determine iy = ilogb(y) */ - if (__glibc_unlikely (hy < 0x00100000)) /* subnormal y */ - { - if (hy == 0) - { - for (iy = -1043, i = ly; i > 0; i <<= 1) - iy -= 1; - } - else - { - for (iy = -1022, i = (hy << 11); i > 0; i <<= 1) - iy -= 1; - } - } - else - iy = (hy >> 20) - 1023; - - /* set up {hx,lx}, {hy,ly} and align y to x */ - if (__glibc_likely (ix >= -1022)) - hx = 0x00100000 | (0x000fffff & hx); - else /* subnormal x, shift x to normal */ - { - n = -1022 - ix; - if (n <= 31) - { - hx = (hx << n) | (lx >> (32 - n)); - lx <<= n; - } - else - { - hx = lx << (n - 32); - lx = 0; - } - } - if (__glibc_likely (iy >= -1022)) - hy = 0x00100000 | (0x000fffff & hy); - else /* subnormal y, shift y to normal */ - { - n = -1022 - iy; - if (n <= 31) - { - hy = (hy << n) | (ly >> (32 - n)); - ly <<= n; - } - else - { - hy = ly << (n - 32); - ly = 0; - } - } - - /* fix point fmod */ - n = ix - iy; - while (n--) - { - hz = hx - hy; lz = lx - ly; if (lx < ly) - hz -= 1; - if (hz < 0) - { - hx = hx + hx + (lx >> 31); lx = lx + lx; - } - else - { - if ((hz | lz) == 0) /* return sign(x)*0 */ - return Zero[(u_int32_t) sx >> 31]; - hx = hz + hz + (lz >> 31); lx = lz + lz; - } - } - hz = hx - hy; lz = lx - ly; if (lx < ly) - hz -= 1; - if (hz >= 0) - { - hx = hz; lx = lz; - } - - /* convert back to floating value and restore the sign */ - if ((hx | lx) == 0) /* return sign(x)*0 */ - return Zero[(u_int32_t) sx >> 31]; - while (hx < 0x00100000) /* normalize x */ - { - hx = hx + hx + (lx >> 31); lx = lx + lx; - iy -= 1; - } - if (__glibc_likely (iy >= -1022)) /* normalize output */ - { - hx = ((hx - 0x00100000) | ((iy + 1023) << 20)); - INSERT_WORDS (x, hx | sx, lx); - } - else /* subnormal output */ - { - n = -1022 - iy; - if (n <= 20) - { - lx = (lx >> n) | ((u_int32_t) hx << (32 - n)); - hx >>= n; - } - else if (n <= 31) - { - lx = (hx << (32 - n)) | (lx >> n); hx = sx; - } - else - { - lx = hx >> (n - 32); hx = sx; - } - INSERT_WORDS (x, hx | sx, lx); - x *= one; /* create necessary signal */ - } - return x; /* exact output */ -} -strong_alias (__ieee754_fmod, __fmod_finite) diff --git a/sysdeps/ieee754/dbl-64/e_gamma_r.c b/sysdeps/ieee754/dbl-64/e_gamma_r.c deleted file mode 100644 index 818fa94766..0000000000 --- a/sysdeps/ieee754/dbl-64/e_gamma_r.c +++ /dev/null @@ -1,220 +0,0 @@ -/* Implementation of gamma function according to ISO C. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) inside exp in Stirling's - approximation to gamma function. */ - -static const double gamma_coeff[] = - { - 0x1.5555555555555p-4, - -0xb.60b60b60b60b8p-12, - 0x3.4034034034034p-12, - -0x2.7027027027028p-12, - 0x3.72a3c5631fe46p-12, - -0x7.daac36664f1f4p-12, - }; - -#define NCOEFF (sizeof (gamma_coeff) / sizeof (gamma_coeff[0])) - -/* Return gamma (X), for positive X less than 184, in the form R * - 2^(*EXP2_ADJ), where R is the return value and *EXP2_ADJ is set to - avoid overflow or underflow in intermediate calculations. */ - -static double -gamma_positive (double x, int *exp2_adj) -{ - int local_signgam; - if (x < 0.5) - { - *exp2_adj = 0; - return __ieee754_exp (__ieee754_lgamma_r (x + 1, &local_signgam)) / x; - } - else if (x <= 1.5) - { - *exp2_adj = 0; - return __ieee754_exp (__ieee754_lgamma_r (x, &local_signgam)); - } - else if (x < 6.5) - { - /* Adjust into the range for using exp (lgamma). */ - *exp2_adj = 0; - double n = __ceil (x - 1.5); - double x_adj = x - n; - double eps; - double prod = __gamma_product (x_adj, 0, n, &eps); - return (__ieee754_exp (__ieee754_lgamma_r (x_adj, &local_signgam)) - * prod * (1.0 + eps)); - } - else - { - double eps = 0; - double x_eps = 0; - double x_adj = x; - double prod = 1; - if (x < 12.0) - { - /* Adjust into the range for applying Stirling's - approximation. */ - double n = __ceil (12.0 - x); - x_adj = math_narrow_eval (x + n); - x_eps = (x - (x_adj - n)); - prod = __gamma_product (x_adj - n, x_eps, n, &eps); - } - /* The result is now gamma (X_ADJ + X_EPS) / (PROD * (1 + EPS)). - Compute gamma (X_ADJ + X_EPS) using Stirling's approximation, - starting by computing pow (X_ADJ, X_ADJ) with a power of 2 - factored out. */ - double exp_adj = -eps; - double x_adj_int = __round (x_adj); - double x_adj_frac = x_adj - x_adj_int; - int x_adj_log2; - double x_adj_mant = __frexp (x_adj, &x_adj_log2); - if (x_adj_mant < M_SQRT1_2) - { - x_adj_log2--; - x_adj_mant *= 2.0; - } - *exp2_adj = x_adj_log2 * (int) x_adj_int; - double ret = (__ieee754_pow (x_adj_mant, x_adj) - * __ieee754_exp2 (x_adj_log2 * x_adj_frac) - * __ieee754_exp (-x_adj) - * __ieee754_sqrt (2 * M_PI / x_adj) - / prod); - exp_adj += x_eps * __ieee754_log (x_adj); - double bsum = gamma_coeff[NCOEFF - 1]; - double x_adj2 = x_adj * x_adj; - for (size_t i = 1; i <= NCOEFF - 1; i++) - bsum = bsum / x_adj2 + gamma_coeff[NCOEFF - 1 - i]; - exp_adj += bsum / x_adj; - return ret + ret * __expm1 (exp_adj); - } -} - -double -__ieee754_gamma_r (double x, int *signgamp) -{ - int32_t hx; - u_int32_t lx; - double ret; - - EXTRACT_WORDS (hx, lx, x); - - if (__glibc_unlikely (((hx & 0x7fffffff) | lx) == 0)) - { - /* Return value for x == 0 is Inf with divide by zero exception. */ - *signgamp = 0; - return 1.0 / x; - } - if (__builtin_expect (hx < 0, 0) - && (u_int32_t) hx < 0xfff00000 && __rint (x) == x) - { - /* Return value for integer x < 0 is NaN with invalid exception. */ - *signgamp = 0; - return (x - x) / (x - x); - } - if (__glibc_unlikely ((unsigned int) hx == 0xfff00000 && lx == 0)) - { - /* x == -Inf. According to ISO this is NaN. */ - *signgamp = 0; - return x - x; - } - if (__glibc_unlikely ((hx & 0x7ff00000) == 0x7ff00000)) - { - /* Positive infinity (return positive infinity) or NaN (return - NaN). */ - *signgamp = 0; - return x + x; - } - - if (x >= 172.0) - { - /* Overflow. */ - *signgamp = 0; - ret = math_narrow_eval (DBL_MAX * DBL_MAX); - return ret; - } - else - { - SET_RESTORE_ROUND (FE_TONEAREST); - if (x > 0.0) - { - *signgamp = 0; - int exp2_adj; - double tret = gamma_positive (x, &exp2_adj); - ret = __scalbn (tret, exp2_adj); - } - else if (x >= -DBL_EPSILON / 4.0) - { - *signgamp = 0; - ret = 1.0 / x; - } - else - { - double tx = __trunc (x); - *signgamp = (tx == 2.0 * __trunc (tx / 2.0)) ? -1 : 1; - if (x <= -184.0) - /* Underflow. */ - ret = DBL_MIN * DBL_MIN; - else - { - double frac = tx - x; - if (frac > 0.5) - frac = 1.0 - frac; - double sinpix = (frac <= 0.25 - ? __sin (M_PI * frac) - : __cos (M_PI * (0.5 - frac))); - int exp2_adj; - double tret = M_PI / (-x * sinpix - * gamma_positive (-x, &exp2_adj)); - ret = __scalbn (tret, -exp2_adj); - math_check_force_underflow_nonneg (ret); - } - } - ret = math_narrow_eval (ret); - } - if (isinf (ret) && x != 0) - { - if (*signgamp < 0) - { - ret = math_narrow_eval (-__copysign (DBL_MAX, ret) * DBL_MAX); - ret = -ret; - } - else - ret = math_narrow_eval (__copysign (DBL_MAX, ret) * DBL_MAX); - return ret; - } - else if (ret == 0) - { - if (*signgamp < 0) - { - ret = math_narrow_eval (-__copysign (DBL_MIN, ret) * DBL_MIN); - ret = -ret; - } - else - ret = math_narrow_eval (__copysign (DBL_MIN, ret) * DBL_MIN); - return ret; - } - else - return ret; -} -strong_alias (__ieee754_gamma_r, __gamma_r_finite) diff --git a/sysdeps/ieee754/dbl-64/e_hypot.c b/sysdeps/ieee754/dbl-64/e_hypot.c deleted file mode 100644 index 76eb408348..0000000000 --- a/sysdeps/ieee754/dbl-64/e_hypot.c +++ /dev/null @@ -1,161 +0,0 @@ -/* @(#)e_hypot.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_hypot(x,y) - * - * Method : - * If (assume round-to-nearest) z=x*x+y*y - * has error less than sqrt(2)/2 ulp, than - * sqrt(z) has error less than 1 ulp (exercise). - * - * So, compute sqrt(x*x+y*y) with some care as - * follows to get the error below 1 ulp: - * - * Assume x>y>0; - * (if possible, set rounding to round-to-nearest) - * 1. if x > 2y use - * x1*x1+(y*y+(x2*(x+x1))) for x*x+y*y - * where x1 = x with lower 32 bits cleared, x2 = x-x1; else - * 2. if x <= 2y use - * t1*y1+((x-y)*(x-y)+(t1*y2+t2*y)) - * where t1 = 2x with lower 32 bits cleared, t2 = 2x-t1, - * y1= y with lower 32 bits chopped, y2 = y-y1. - * - * NOTE: scaling may be necessary if some argument is too - * large or too tiny - * - * Special cases: - * hypot(x,y) is INF if x or y is +INF or -INF; else - * hypot(x,y) is NAN if x or y is NAN. - * - * Accuracy: - * hypot(x,y) returns sqrt(x^2+y^2) with error less - * than 1 ulps (units in the last place) - */ - -#include -#include - -double -__ieee754_hypot (double x, double y) -{ - double a, b, t1, t2, y1, y2, w; - int32_t j, k, ha, hb; - - GET_HIGH_WORD (ha, x); - ha &= 0x7fffffff; - GET_HIGH_WORD (hb, y); - hb &= 0x7fffffff; - if (hb > ha) - { - a = y; b = x; j = ha; ha = hb; hb = j; - } - else - { - a = x; b = y; - } - SET_HIGH_WORD (a, ha); /* a <- |a| */ - SET_HIGH_WORD (b, hb); /* b <- |b| */ - if ((ha - hb) > 0x3c00000) - { - return a + b; - } /* x/y > 2**60 */ - k = 0; - if (__glibc_unlikely (ha > 0x5f300000)) /* a>2**500 */ - { - if (ha >= 0x7ff00000) /* Inf or NaN */ - { - u_int32_t low; - w = a + b; /* for sNaN */ - if (issignaling (a) || issignaling (b)) - return w; - GET_LOW_WORD (low, a); - if (((ha & 0xfffff) | low) == 0) - w = a; - GET_LOW_WORD (low, b); - if (((hb ^ 0x7ff00000) | low) == 0) - w = b; - return w; - } - /* scale a and b by 2**-600 */ - ha -= 0x25800000; hb -= 0x25800000; k += 600; - SET_HIGH_WORD (a, ha); - SET_HIGH_WORD (b, hb); - } - if (__builtin_expect (hb < 0x23d00000, 0)) /* b < 2**-450 */ - { - if (hb <= 0x000fffff) /* subnormal b or 0 */ - { - u_int32_t low; - GET_LOW_WORD (low, b); - if ((hb | low) == 0) - return a; - t1 = 0; - SET_HIGH_WORD (t1, 0x7fd00000); /* t1=2^1022 */ - b *= t1; - a *= t1; - k -= 1022; - GET_HIGH_WORD (ha, a); - GET_HIGH_WORD (hb, b); - if (hb > ha) - { - t1 = a; - a = b; - b = t1; - j = ha; - ha = hb; - hb = j; - } - } - else /* scale a and b by 2^600 */ - { - ha += 0x25800000; /* a *= 2^600 */ - hb += 0x25800000; /* b *= 2^600 */ - k -= 600; - SET_HIGH_WORD (a, ha); - SET_HIGH_WORD (b, hb); - } - } - /* medium size a and b */ - w = a - b; - if (w > b) - { - t1 = 0; - SET_HIGH_WORD (t1, ha); - t2 = a - t1; - w = __ieee754_sqrt (t1 * t1 - (b * (-b) - t2 * (a + t1))); - } - else - { - a = a + a; - y1 = 0; - SET_HIGH_WORD (y1, hb); - y2 = b - y1; - t1 = 0; - SET_HIGH_WORD (t1, ha + 0x00100000); - t2 = a - t1; - w = __ieee754_sqrt (t1 * y1 - (w * (-w) - (t1 * y2 + t2 * b))); - } - if (k != 0) - { - u_int32_t high; - t1 = 1.0; - GET_HIGH_WORD (high, t1); - SET_HIGH_WORD (t1, high + (k << 20)); - w *= t1; - math_check_force_underflow_nonneg (w); - return w; - } - else - return w; -} -strong_alias (__ieee754_hypot, __hypot_finite) diff --git a/sysdeps/ieee754/dbl-64/e_ilogb.c b/sysdeps/ieee754/dbl-64/e_ilogb.c deleted file mode 100644 index 1e338a59c1..0000000000 --- a/sysdeps/ieee754/dbl-64/e_ilogb.c +++ /dev/null @@ -1,63 +0,0 @@ -/* @(#)s_ilogb.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_ilogb.c,v 1.9 1995/05/10 20:47:28 jtc Exp $"; -#endif - -/* ilogb(double x) - * return the binary exponent of non-zero x - * ilogb(0) = FP_ILOGB0 - * ilogb(NaN) = FP_ILOGBNAN (no signal is raised) - * ilogb(+-Inf) = INT_MAX (no signal is raised) - */ - -#include -#include -#include - -int -__ieee754_ilogb (double x) -{ - int32_t hx, lx, ix; - - GET_HIGH_WORD (hx, x); - hx &= 0x7fffffff; - if (hx < 0x00100000) - { - GET_LOW_WORD (lx, x); - if ((hx | lx) == 0) - return FP_ILOGB0; /* ilogb(0) = FP_ILOGB0 */ - else /* subnormal x */ - if (hx == 0) - { - for (ix = -1043; lx > 0; lx <<= 1) - ix -= 1; - } - else - { - for (ix = -1022, hx <<= 11; hx > 0; hx <<= 1) - ix -= 1; - } - return ix; - } - else if (hx < 0x7ff00000) - return (hx >> 20) - 1023; - else if (FP_ILOGBNAN != INT_MAX) - { - /* ISO C99 requires ilogb(+-Inf) == INT_MAX. */ - GET_LOW_WORD (lx, x); - if (((hx ^ 0x7ff00000) | lx) == 0) - return INT_MAX; - } - return FP_ILOGBNAN; -} diff --git a/sysdeps/ieee754/dbl-64/e_j0.c b/sysdeps/ieee754/dbl-64/e_j0.c deleted file mode 100644 index 4b440cf0d0..0000000000 --- a/sysdeps/ieee754/dbl-64/e_j0.c +++ /dev/null @@ -1,458 +0,0 @@ -/* @(#)e_j0.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ -/* Modified by Naohiko Shimizu/Tokai University, Japan 1997/08/26, - for performance improvement on pipelined processors. - */ - -/* __ieee754_j0(x), __ieee754_y0(x) - * Bessel function of the first and second kinds of order zero. - * Method -- j0(x): - * 1. For tiny x, we use j0(x) = 1 - x^2/4 + x^4/64 - ... - * 2. Reduce x to |x| since j0(x)=j0(-x), and - * for x in (0,2) - * j0(x) = 1-z/4+ z^2*R0/S0, where z = x*x; - * (precision: |j0-1+z/4-z^2R0/S0 |<2**-63.67 ) - * for x in (2,inf) - * j0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x0)-q0(x)*sin(x0)) - * where x0 = x-pi/4. It is better to compute sin(x0),cos(x0) - * as follow: - * cos(x0) = cos(x)cos(pi/4)+sin(x)sin(pi/4) - * = 1/sqrt(2) * (cos(x) + sin(x)) - * sin(x0) = sin(x)cos(pi/4)-cos(x)sin(pi/4) - * = 1/sqrt(2) * (sin(x) - cos(x)) - * (To avoid cancellation, use - * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) - * to compute the worse one.) - * - * 3 Special cases - * j0(nan)= nan - * j0(0) = 1 - * j0(inf) = 0 - * - * Method -- y0(x): - * 1. For x<2. - * Since - * y0(x) = 2/pi*(j0(x)*(ln(x/2)+Euler) + x^2/4 - ...) - * therefore y0(x)-2/pi*j0(x)*ln(x) is an even function. - * We use the following function to approximate y0, - * y0(x) = U(z)/V(z) + (2/pi)*(j0(x)*ln(x)), z= x^2 - * where - * U(z) = u00 + u01*z + ... + u06*z^6 - * V(z) = 1 + v01*z + ... + v04*z^4 - * with absolute approximation error bounded by 2**-72. - * Note: For tiny x, U/V = u0 and j0(x)~1, hence - * y0(tiny) = u0 + (2/pi)*ln(tiny), (choose tiny<2**-27) - * 2. For x>=2. - * y0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x0)+q0(x)*sin(x0)) - * where x0 = x-pi/4. It is better to compute sin(x0),cos(x0) - * by the method mentioned above. - * 3. Special cases: y0(0)=-inf, y0(x<0)=NaN, y0(inf)=0. - */ - -#include -#include - -static double pzero (double), qzero (double); - -static const double - huge = 1e300, - one = 1.0, - invsqrtpi = 5.64189583547756279280e-01, /* 0x3FE20DD7, 0x50429B6D */ - tpi = 6.36619772367581382433e-01, /* 0x3FE45F30, 0x6DC9C883 */ -/* R0/S0 on [0, 2.00] */ - R[] = { 0.0, 0.0, 1.56249999999999947958e-02, /* 0x3F8FFFFF, 0xFFFFFFFD */ - -1.89979294238854721751e-04, /* 0xBF28E6A5, 0xB61AC6E9 */ - 1.82954049532700665670e-06, /* 0x3EBEB1D1, 0x0C503919 */ - -4.61832688532103189199e-09 }, /* 0xBE33D5E7, 0x73D63FCE */ - S[] = { 0.0, 1.56191029464890010492e-02, /* 0x3F8FFCE8, 0x82C8C2A4 */ - 1.16926784663337450260e-04, /* 0x3F1EA6D2, 0xDD57DBF4 */ - 5.13546550207318111446e-07, /* 0x3EA13B54, 0xCE84D5A9 */ - 1.16614003333790000205e-09 }; /* 0x3E1408BC, 0xF4745D8F */ - -static const double zero = 0.0; - -double -__ieee754_j0 (double x) -{ - double z, s, c, ss, cc, r, u, v, r1, r2, s1, s2, z2, z4; - int32_t hx, ix; - - GET_HIGH_WORD (hx, x); - ix = hx & 0x7fffffff; - if (ix >= 0x7ff00000) - return one / (x * x); - x = fabs (x); - if (ix >= 0x40000000) /* |x| >= 2.0 */ - { - __sincos (x, &s, &c); - ss = s - c; - cc = s + c; - if (ix < 0x7fe00000) /* make sure x+x not overflow */ - { - z = -__cos (x + x); - if ((s * c) < zero) - cc = z / ss; - else - ss = z / cc; - } - /* - * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x) - * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x) - */ - if (ix > 0x48000000) - z = (invsqrtpi * cc) / __ieee754_sqrt (x); - else - { - u = pzero (x); v = qzero (x); - z = invsqrtpi * (u * cc - v * ss) / __ieee754_sqrt (x); - } - return z; - } - if (ix < 0x3f200000) /* |x| < 2**-13 */ - { - math_force_eval (huge + x); /* raise inexact if x != 0 */ - if (ix < 0x3e400000) - return one; /* |x|<2**-27 */ - else - return one - 0.25 * x * x; - } - z = x * x; - r1 = z * R[2]; z2 = z * z; - r2 = R[3] + z * R[4]; z4 = z2 * z2; - r = r1 + z2 * r2 + z4 * R[5]; - s1 = one + z * S[1]; - s2 = S[2] + z * S[3]; - s = s1 + z2 * s2 + z4 * S[4]; - if (ix < 0x3FF00000) /* |x| < 1.00 */ - { - return one + z * (-0.25 + (r / s)); - } - else - { - u = 0.5 * x; - return ((one + u) * (one - u) + z * (r / s)); - } -} -strong_alias (__ieee754_j0, __j0_finite) - -static const double -U[] = { -7.38042951086872317523e-02, /* 0xBFB2E4D6, 0x99CBD01F */ - 1.76666452509181115538e-01, /* 0x3FC69D01, 0x9DE9E3FC */ - -1.38185671945596898896e-02, /* 0xBF8C4CE8, 0xB16CFA97 */ - 3.47453432093683650238e-04, /* 0x3F36C54D, 0x20B29B6B */ - -3.81407053724364161125e-06, /* 0xBECFFEA7, 0x73D25CAD */ - 1.95590137035022920206e-08, /* 0x3E550057, 0x3B4EABD4 */ - -3.98205194132103398453e-11 }, /* 0xBDC5E43D, 0x693FB3C8 */ -V[] = { 1.27304834834123699328e-02, /* 0x3F8A1270, 0x91C9C71A */ - 7.60068627350353253702e-05, /* 0x3F13ECBB, 0xF578C6C1 */ - 2.59150851840457805467e-07, /* 0x3E91642D, 0x7FF202FD */ - 4.41110311332675467403e-10 }; /* 0x3DFE5018, 0x3BD6D9EF */ - -double -__ieee754_y0 (double x) -{ - double z, s, c, ss, cc, u, v, z2, z4, z6, u1, u2, u3, v1, v2; - int32_t hx, ix, lx; - - EXTRACT_WORDS (hx, lx, x); - ix = 0x7fffffff & hx; - /* Y0(NaN) is NaN, y0(-inf) is Nan, y0(inf) is 0, y0(0) is -inf. */ - if (ix >= 0x7ff00000) - return one / (x + x * x); - if ((ix | lx) == 0) - return -1 / zero; /* -inf and divide by zero exception. */ - if (hx < 0) - return zero / (zero * x); - if (ix >= 0x40000000) /* |x| >= 2.0 */ - { /* y0(x) = sqrt(2/(pi*x))*(p0(x)*sin(x0)+q0(x)*cos(x0)) - * where x0 = x-pi/4 - * Better formula: - * cos(x0) = cos(x)cos(pi/4)+sin(x)sin(pi/4) - * = 1/sqrt(2) * (sin(x) + cos(x)) - * sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4) - * = 1/sqrt(2) * (sin(x) - cos(x)) - * To avoid cancellation, use - * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) - * to compute the worse one. - */ - __sincos (x, &s, &c); - ss = s - c; - cc = s + c; - /* - * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x) - * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x) - */ - if (ix < 0x7fe00000) /* make sure x+x not overflow */ - { - z = -__cos (x + x); - if ((s * c) < zero) - cc = z / ss; - else - ss = z / cc; - } - if (ix > 0x48000000) - z = (invsqrtpi * ss) / __ieee754_sqrt (x); - else - { - u = pzero (x); v = qzero (x); - z = invsqrtpi * (u * ss + v * cc) / __ieee754_sqrt (x); - } - return z; - } - if (ix <= 0x3e400000) /* x < 2**-27 */ - { - return (U[0] + tpi * __ieee754_log (x)); - } - z = x * x; - u1 = U[0] + z * U[1]; z2 = z * z; - u2 = U[2] + z * U[3]; z4 = z2 * z2; - u3 = U[4] + z * U[5]; z6 = z4 * z2; - u = u1 + z2 * u2 + z4 * u3 + z6 * U[6]; - v1 = one + z * V[0]; - v2 = V[1] + z * V[2]; - v = v1 + z2 * v2 + z4 * V[3]; - return (u / v + tpi * (__ieee754_j0 (x) * __ieee754_log (x))); -} -strong_alias (__ieee754_y0, __y0_finite) - -/* The asymptotic expansions of pzero is - * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x. - * For x >= 2, We approximate pzero by - * pzero(x) = 1 + (R/S) - * where R = pR0 + pR1*s^2 + pR2*s^4 + ... + pR5*s^10 - * S = 1 + pS0*s^2 + ... + pS4*s^10 - * and - * | pzero(x)-1-R/S | <= 2 ** ( -60.26) - */ -static const double pR8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ - 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */ - -7.03124999999900357484e-02, /* 0xBFB1FFFF, 0xFFFFFD32 */ - -8.08167041275349795626e+00, /* 0xC02029D0, 0xB44FA779 */ - -2.57063105679704847262e+02, /* 0xC0701102, 0x7B19E863 */ - -2.48521641009428822144e+03, /* 0xC0A36A6E, 0xCD4DCAFC */ - -5.25304380490729545272e+03, /* 0xC0B4850B, 0x36CC643D */ -}; -static const double pS8[5] = { - 1.16534364619668181717e+02, /* 0x405D2233, 0x07A96751 */ - 3.83374475364121826715e+03, /* 0x40ADF37D, 0x50596938 */ - 4.05978572648472545552e+04, /* 0x40E3D2BB, 0x6EB6B05F */ - 1.16752972564375915681e+05, /* 0x40FC810F, 0x8F9FA9BD */ - 4.76277284146730962675e+04, /* 0x40E74177, 0x4F2C49DC */ -}; - -static const double pR5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ - -1.14125464691894502584e-11, /* 0xBDA918B1, 0x47E495CC */ - -7.03124940873599280078e-02, /* 0xBFB1FFFF, 0xE69AFBC6 */ - -4.15961064470587782438e+00, /* 0xC010A370, 0xF90C6BBF */ - -6.76747652265167261021e+01, /* 0xC050EB2F, 0x5A7D1783 */ - -3.31231299649172967747e+02, /* 0xC074B3B3, 0x6742CC63 */ - -3.46433388365604912451e+02, /* 0xC075A6EF, 0x28A38BD7 */ -}; -static const double pS5[5] = { - 6.07539382692300335975e+01, /* 0x404E6081, 0x0C98C5DE */ - 1.05125230595704579173e+03, /* 0x40906D02, 0x5C7E2864 */ - 5.97897094333855784498e+03, /* 0x40B75AF8, 0x8FBE1D60 */ - 9.62544514357774460223e+03, /* 0x40C2CCB8, 0xFA76FA38 */ - 2.40605815922939109441e+03, /* 0x40A2CC1D, 0xC70BE864 */ -}; - -static const double pR3[6] = {/* for x in [4.547,2.8571]=1/[0.2199,0.35001] */ - -2.54704601771951915620e-09, /* 0xBE25E103, 0x6FE1AA86 */ - -7.03119616381481654654e-02, /* 0xBFB1FFF6, 0xF7C0E24B */ - -2.40903221549529611423e+00, /* 0xC00345B2, 0xAEA48074 */ - -2.19659774734883086467e+01, /* 0xC035F74A, 0x4CB94E14 */ - -5.80791704701737572236e+01, /* 0xC04D0A22, 0x420A1A45 */ - -3.14479470594888503854e+01, /* 0xC03F72AC, 0xA892D80F */ -}; -static const double pS3[5] = { - 3.58560338055209726349e+01, /* 0x4041ED92, 0x84077DD3 */ - 3.61513983050303863820e+02, /* 0x40769839, 0x464A7C0E */ - 1.19360783792111533330e+03, /* 0x4092A66E, 0x6D1061D6 */ - 1.12799679856907414432e+03, /* 0x40919FFC, 0xB8C39B7E */ - 1.73580930813335754692e+02, /* 0x4065B296, 0xFC379081 */ -}; - -static const double pR2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */ - -8.87534333032526411254e-08, /* 0xBE77D316, 0xE927026D */ - -7.03030995483624743247e-02, /* 0xBFB1FF62, 0x495E1E42 */ - -1.45073846780952986357e+00, /* 0xBFF73639, 0x8A24A843 */ - -7.63569613823527770791e+00, /* 0xC01E8AF3, 0xEDAFA7F3 */ - -1.11931668860356747786e+01, /* 0xC02662E6, 0xC5246303 */ - -3.23364579351335335033e+00, /* 0xC009DE81, 0xAF8FE70F */ -}; -static const double pS2[5] = { - 2.22202997532088808441e+01, /* 0x40363865, 0x908B5959 */ - 1.36206794218215208048e+02, /* 0x4061069E, 0x0EE8878F */ - 2.70470278658083486789e+02, /* 0x4070E786, 0x42EA079B */ - 1.53875394208320329881e+02, /* 0x40633C03, 0x3AB6FAFF */ - 1.46576176948256193810e+01, /* 0x402D50B3, 0x44391809 */ -}; - -static double -pzero (double x) -{ - const double *p, *q; - double z, r, s, z2, z4, r1, r2, r3, s1, s2, s3; - int32_t ix; - GET_HIGH_WORD (ix, x); - ix &= 0x7fffffff; - /* ix >= 0x40000000 for all calls to this function. */ - if (ix >= 0x41b00000) - { - return one; - } - else if (ix >= 0x40200000) - { - p = pR8; q = pS8; - } - else if (ix >= 0x40122E8B) - { - p = pR5; q = pS5; - } - else if (ix >= 0x4006DB6D) - { - p = pR3; q = pS3; - } - else - { - p = pR2; q = pS2; - } - z = one / (x * x); - r1 = p[0] + z * p[1]; z2 = z * z; - r2 = p[2] + z * p[3]; z4 = z2 * z2; - r3 = p[4] + z * p[5]; - r = r1 + z2 * r2 + z4 * r3; - s1 = one + z * q[0]; - s2 = q[1] + z * q[2]; - s3 = q[3] + z * q[4]; - s = s1 + z2 * s2 + z4 * s3; - return one + r / s; -} - - -/* For x >= 8, the asymptotic expansions of qzero is - * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. - * We approximate pzero by - * qzero(x) = s*(-1.25 + (R/S)) - * where R = qR0 + qR1*s^2 + qR2*s^4 + ... + qR5*s^10 - * S = 1 + qS0*s^2 + ... + qS5*s^12 - * and - * | qzero(x)/s +1.25-R/S | <= 2 ** ( -61.22) - */ -static const double qR8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ - 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */ - 7.32421874999935051953e-02, /* 0x3FB2BFFF, 0xFFFFFE2C */ - 1.17682064682252693899e+01, /* 0x40278952, 0x5BB334D6 */ - 5.57673380256401856059e+02, /* 0x40816D63, 0x15301825 */ - 8.85919720756468632317e+03, /* 0x40C14D99, 0x3E18F46D */ - 3.70146267776887834771e+04, /* 0x40E212D4, 0x0E901566 */ -}; -static const double qS8[6] = { - 1.63776026895689824414e+02, /* 0x406478D5, 0x365B39BC */ - 8.09834494656449805916e+03, /* 0x40BFA258, 0x4E6B0563 */ - 1.42538291419120476348e+05, /* 0x41016652, 0x54D38C3F */ - 8.03309257119514397345e+05, /* 0x412883DA, 0x83A52B43 */ - 8.40501579819060512818e+05, /* 0x4129A66B, 0x28DE0B3D */ - -3.43899293537866615225e+05, /* 0xC114FD6D, 0x2C9530C5 */ -}; - -static const double qR5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ - 1.84085963594515531381e-11, /* 0x3DB43D8F, 0x29CC8CD9 */ - 7.32421766612684765896e-02, /* 0x3FB2BFFF, 0xD172B04C */ - 5.83563508962056953777e+00, /* 0x401757B0, 0xB9953DD3 */ - 1.35111577286449829671e+02, /* 0x4060E392, 0x0A8788E9 */ - 1.02724376596164097464e+03, /* 0x40900CF9, 0x9DC8C481 */ - 1.98997785864605384631e+03, /* 0x409F17E9, 0x53C6E3A6 */ -}; -static const double qS5[6] = { - 8.27766102236537761883e+01, /* 0x4054B1B3, 0xFB5E1543 */ - 2.07781416421392987104e+03, /* 0x40A03BA0, 0xDA21C0CE */ - 1.88472887785718085070e+04, /* 0x40D267D2, 0x7B591E6D */ - 5.67511122894947329769e+04, /* 0x40EBB5E3, 0x97E02372 */ - 3.59767538425114471465e+04, /* 0x40E19118, 0x1F7A54A0 */ - -5.35434275601944773371e+03, /* 0xC0B4EA57, 0xBEDBC609 */ -}; - -static const double qR3[6] = {/* for x in [4.547,2.8571]=1/[0.2199,0.35001] */ - 4.37741014089738620906e-09, /* 0x3E32CD03, 0x6ADECB82 */ - 7.32411180042911447163e-02, /* 0x3FB2BFEE, 0x0E8D0842 */ - 3.34423137516170720929e+00, /* 0x400AC0FC, 0x61149CF5 */ - 4.26218440745412650017e+01, /* 0x40454F98, 0x962DAEDD */ - 1.70808091340565596283e+02, /* 0x406559DB, 0xE25EFD1F */ - 1.66733948696651168575e+02, /* 0x4064D77C, 0x81FA21E0 */ -}; -static const double qS3[6] = { - 4.87588729724587182091e+01, /* 0x40486122, 0xBFE343A6 */ - 7.09689221056606015736e+02, /* 0x40862D83, 0x86544EB3 */ - 3.70414822620111362994e+03, /* 0x40ACF04B, 0xE44DFC63 */ - 6.46042516752568917582e+03, /* 0x40B93C6C, 0xD7C76A28 */ - 2.51633368920368957333e+03, /* 0x40A3A8AA, 0xD94FB1C0 */ - -1.49247451836156386662e+02, /* 0xC062A7EB, 0x201CF40F */ -}; - -static const double qR2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */ - 1.50444444886983272379e-07, /* 0x3E84313B, 0x54F76BDB */ - 7.32234265963079278272e-02, /* 0x3FB2BEC5, 0x3E883E34 */ - 1.99819174093815998816e+00, /* 0x3FFFF897, 0xE727779C */ - 1.44956029347885735348e+01, /* 0x402CFDBF, 0xAAF96FE5 */ - 3.16662317504781540833e+01, /* 0x403FAA8E, 0x29FBDC4A */ - 1.62527075710929267416e+01, /* 0x403040B1, 0x71814BB4 */ -}; -static const double qS2[6] = { - 3.03655848355219184498e+01, /* 0x403E5D96, 0xF7C07AED */ - 2.69348118608049844624e+02, /* 0x4070D591, 0xE4D14B40 */ - 8.44783757595320139444e+02, /* 0x408A6645, 0x22B3BF22 */ - 8.82935845112488550512e+02, /* 0x408B977C, 0x9C5CC214 */ - 2.12666388511798828631e+02, /* 0x406A9553, 0x0E001365 */ - -5.31095493882666946917e+00, /* 0xC0153E6A, 0xF8B32931 */ -}; - -static double -qzero (double x) -{ - const double *p, *q; - double s, r, z, z2, z4, z6, r1, r2, r3, s1, s2, s3; - int32_t ix; - GET_HIGH_WORD (ix, x); - ix &= 0x7fffffff; - /* ix >= 0x40000000 for all calls to this function. */ - if (ix >= 0x41b00000) - { - return -.125 / x; - } - else if (ix >= 0x40200000) - { - p = qR8; q = qS8; - } - else if (ix >= 0x40122E8B) - { - p = qR5; q = qS5; - } - else if (ix >= 0x4006DB6D) - { - p = qR3; q = qS3; - } - else - { - p = qR2; q = qS2; - } - z = one / (x * x); - r1 = p[0] + z * p[1]; z2 = z * z; - r2 = p[2] + z * p[3]; z4 = z2 * z2; - r3 = p[4] + z * p[5]; z6 = z4 * z2; - r = r1 + z2 * r2 + z4 * r3; - s1 = one + z * q[0]; - s2 = q[1] + z * q[2]; - s3 = q[3] + z * q[4]; - s = s1 + z2 * s2 + z4 * s3 + z6 * q[5]; - return (-.125 + r / s) / x; -} diff --git a/sysdeps/ieee754/dbl-64/e_j1.c b/sysdeps/ieee754/dbl-64/e_j1.c deleted file mode 100644 index eb446fd102..0000000000 --- a/sysdeps/ieee754/dbl-64/e_j1.c +++ /dev/null @@ -1,466 +0,0 @@ -/* @(#)e_j1.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ -/* Modified by Naohiko Shimizu/Tokai University, Japan 1997/08/26, - for performance improvement on pipelined processors. - */ - -/* __ieee754_j1(x), __ieee754_y1(x) - * Bessel function of the first and second kinds of order zero. - * Method -- j1(x): - * 1. For tiny x, we use j1(x) = x/2 - x^3/16 + x^5/384 - ... - * 2. Reduce x to |x| since j1(x)=-j1(-x), and - * for x in (0,2) - * j1(x) = x/2 + x*z*R0/S0, where z = x*x; - * (precision: |j1/x - 1/2 - R0/S0 |<2**-61.51 ) - * for x in (2,inf) - * j1(x) = sqrt(2/(pi*x))*(p1(x)*cos(x1)-q1(x)*sin(x1)) - * y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x1)+q1(x)*cos(x1)) - * where x1 = x-3*pi/4. It is better to compute sin(x1),cos(x1) - * as follow: - * cos(x1) = cos(x)cos(3pi/4)+sin(x)sin(3pi/4) - * = 1/sqrt(2) * (sin(x) - cos(x)) - * sin(x1) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4) - * = -1/sqrt(2) * (sin(x) + cos(x)) - * (To avoid cancellation, use - * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) - * to compute the worse one.) - * - * 3 Special cases - * j1(nan)= nan - * j1(0) = 0 - * j1(inf) = 0 - * - * Method -- y1(x): - * 1. screen out x<=0 cases: y1(0)=-inf, y1(x<0)=NaN - * 2. For x<2. - * Since - * y1(x) = 2/pi*(j1(x)*(ln(x/2)+Euler)-1/x-x/2+5/64*x^3-...) - * therefore y1(x)-2/pi*j1(x)*ln(x)-1/x is an odd function. - * We use the following function to approximate y1, - * y1(x) = x*U(z)/V(z) + (2/pi)*(j1(x)*ln(x)-1/x), z= x^2 - * where for x in [0,2] (abs err less than 2**-65.89) - * U(z) = U0[0] + U0[1]*z + ... + U0[4]*z^4 - * V(z) = 1 + v0[0]*z + ... + v0[4]*z^5 - * Note: For tiny x, 1/x dominate y1 and hence - * y1(tiny) = -2/pi/tiny, (choose tiny<2**-54) - * 3. For x>=2. - * y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x1)+q1(x)*cos(x1)) - * where x1 = x-3*pi/4. It is better to compute sin(x1),cos(x1) - * by method mentioned above. - */ - -#include -#include -#include -#include - -static double pone (double), qone (double); - -static const double - huge = 1e300, - one = 1.0, - invsqrtpi = 5.64189583547756279280e-01, /* 0x3FE20DD7, 0x50429B6D */ - tpi = 6.36619772367581382433e-01, /* 0x3FE45F30, 0x6DC9C883 */ -/* R0/S0 on [0,2] */ - R[] = { -6.25000000000000000000e-02, /* 0xBFB00000, 0x00000000 */ - 1.40705666955189706048e-03, /* 0x3F570D9F, 0x98472C61 */ - -1.59955631084035597520e-05, /* 0xBEF0C5C6, 0xBA169668 */ - 4.96727999609584448412e-08 }, /* 0x3E6AAAFA, 0x46CA0BD9 */ - S[] = { 0.0, 1.91537599538363460805e-02, /* 0x3F939D0B, 0x12637E53 */ - 1.85946785588630915560e-04, /* 0x3F285F56, 0xB9CDF664 */ - 1.17718464042623683263e-06, /* 0x3EB3BFF8, 0x333F8498 */ - 5.04636257076217042715e-09, /* 0x3E35AC88, 0xC97DFF2C */ - 1.23542274426137913908e-11 }; /* 0x3DAB2ACF, 0xCFB97ED8 */ - -static const double zero = 0.0; - -double -__ieee754_j1 (double x) -{ - double z, s, c, ss, cc, r, u, v, y, r1, r2, s1, s2, s3, z2, z4; - int32_t hx, ix; - - GET_HIGH_WORD (hx, x); - ix = hx & 0x7fffffff; - if (__glibc_unlikely (ix >= 0x7ff00000)) - return one / x; - y = fabs (x); - if (ix >= 0x40000000) /* |x| >= 2.0 */ - { - __sincos (y, &s, &c); - ss = -s - c; - cc = s - c; - if (ix < 0x7fe00000) /* make sure y+y not overflow */ - { - z = __cos (y + y); - if ((s * c) > zero) - cc = z / ss; - else - ss = z / cc; - } - /* - * j1(x) = 1/sqrt(pi) * (P(1,x)*cc - Q(1,x)*ss) / sqrt(x) - * y1(x) = 1/sqrt(pi) * (P(1,x)*ss + Q(1,x)*cc) / sqrt(x) - */ - if (ix > 0x48000000) - z = (invsqrtpi * cc) / __ieee754_sqrt (y); - else - { - u = pone (y); v = qone (y); - z = invsqrtpi * (u * cc - v * ss) / __ieee754_sqrt (y); - } - if (hx < 0) - return -z; - else - return z; - } - if (__glibc_unlikely (ix < 0x3e400000)) /* |x|<2**-27 */ - { - if (huge + x > one) /* inexact if x!=0 necessary */ - { - double ret = math_narrow_eval (0.5 * x); - math_check_force_underflow (ret); - if (ret == 0 && x != 0) - __set_errno (ERANGE); - return ret; - } - } - z = x * x; - r1 = z * R[0]; z2 = z * z; - r2 = R[1] + z * R[2]; z4 = z2 * z2; - r = r1 + z2 * r2 + z4 * R[3]; - r *= x; - s1 = one + z * S[1]; - s2 = S[2] + z * S[3]; - s3 = S[4] + z * S[5]; - s = s1 + z2 * s2 + z4 * s3; - return (x * 0.5 + r / s); -} -strong_alias (__ieee754_j1, __j1_finite) - -static const double U0[5] = { - -1.96057090646238940668e-01, /* 0xBFC91866, 0x143CBC8A */ - 5.04438716639811282616e-02, /* 0x3FA9D3C7, 0x76292CD1 */ - -1.91256895875763547298e-03, /* 0xBF5F55E5, 0x4844F50F */ - 2.35252600561610495928e-05, /* 0x3EF8AB03, 0x8FA6B88E */ - -9.19099158039878874504e-08, /* 0xBE78AC00, 0x569105B8 */ -}; -static const double V0[5] = { - 1.99167318236649903973e-02, /* 0x3F94650D, 0x3F4DA9F0 */ - 2.02552581025135171496e-04, /* 0x3F2A8C89, 0x6C257764 */ - 1.35608801097516229404e-06, /* 0x3EB6C05A, 0x894E8CA6 */ - 6.22741452364621501295e-09, /* 0x3E3ABF1D, 0x5BA69A86 */ - 1.66559246207992079114e-11, /* 0x3DB25039, 0xDACA772A */ -}; - -double -__ieee754_y1 (double x) -{ - double z, s, c, ss, cc, u, v, u1, u2, v1, v2, v3, z2, z4; - int32_t hx, ix, lx; - - EXTRACT_WORDS (hx, lx, x); - ix = 0x7fffffff & hx; - /* if Y1(NaN) is NaN, Y1(-inf) is NaN, Y1(inf) is 0 */ - if (__glibc_unlikely (ix >= 0x7ff00000)) - return one / (x + x * x); - if (__glibc_unlikely ((ix | lx) == 0)) - return -1 / zero; /* -inf and divide by zero exception. */ - /* -inf and overflow exception. */; - if (__glibc_unlikely (hx < 0)) - return zero / (zero * x); - if (ix >= 0x40000000) /* |x| >= 2.0 */ - { - __sincos (x, &s, &c); - ss = -s - c; - cc = s - c; - if (ix < 0x7fe00000) /* make sure x+x not overflow */ - { - z = __cos (x + x); - if ((s * c) > zero) - cc = z / ss; - else - ss = z / cc; - } - /* y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x0)+q1(x)*cos(x0)) - * where x0 = x-3pi/4 - * Better formula: - * cos(x0) = cos(x)cos(3pi/4)+sin(x)sin(3pi/4) - * = 1/sqrt(2) * (sin(x) - cos(x)) - * sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4) - * = -1/sqrt(2) * (cos(x) + sin(x)) - * To avoid cancellation, use - * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) - * to compute the worse one. - */ - if (ix > 0x48000000) - z = (invsqrtpi * ss) / __ieee754_sqrt (x); - else - { - u = pone (x); v = qone (x); - z = invsqrtpi * (u * ss + v * cc) / __ieee754_sqrt (x); - } - return z; - } - if (__glibc_unlikely (ix <= 0x3c900000)) /* x < 2**-54 */ - { - z = -tpi / x; - if (isinf (z)) - __set_errno (ERANGE); - return z; - } - z = x * x; - u1 = U0[0] + z * U0[1]; z2 = z * z; - u2 = U0[2] + z * U0[3]; z4 = z2 * z2; - u = u1 + z2 * u2 + z4 * U0[4]; - v1 = one + z * V0[0]; - v2 = V0[1] + z * V0[2]; - v3 = V0[3] + z * V0[4]; - v = v1 + z2 * v2 + z4 * v3; - return (x * (u / v) + tpi * (__ieee754_j1 (x) * __ieee754_log (x) - one / x)); -} -strong_alias (__ieee754_y1, __y1_finite) - -/* For x >= 8, the asymptotic expansions of pone is - * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. - * We approximate pone by - * pone(x) = 1 + (R/S) - * where R = pr0 + pr1*s^2 + pr2*s^4 + ... + pr5*s^10 - * S = 1 + ps0*s^2 + ... + ps4*s^10 - * and - * | pone(x)-1-R/S | <= 2 ** ( -60.06) - */ - -static const double pr8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ - 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */ - 1.17187499999988647970e-01, /* 0x3FBDFFFF, 0xFFFFFCCE */ - 1.32394806593073575129e+01, /* 0x402A7A9D, 0x357F7FCE */ - 4.12051854307378562225e+02, /* 0x4079C0D4, 0x652EA590 */ - 3.87474538913960532227e+03, /* 0x40AE457D, 0xA3A532CC */ - 7.91447954031891731574e+03, /* 0x40BEEA7A, 0xC32782DD */ -}; -static const double ps8[5] = { - 1.14207370375678408436e+02, /* 0x405C8D45, 0x8E656CAC */ - 3.65093083420853463394e+03, /* 0x40AC85DC, 0x964D274F */ - 3.69562060269033463555e+04, /* 0x40E20B86, 0x97C5BB7F */ - 9.76027935934950801311e+04, /* 0x40F7D42C, 0xB28F17BB */ - 3.08042720627888811578e+04, /* 0x40DE1511, 0x697A0B2D */ -}; - -static const double pr5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ - 1.31990519556243522749e-11, /* 0x3DAD0667, 0xDAE1CA7D */ - 1.17187493190614097638e-01, /* 0x3FBDFFFF, 0xE2C10043 */ - 6.80275127868432871736e+00, /* 0x401B3604, 0x6E6315E3 */ - 1.08308182990189109773e+02, /* 0x405B13B9, 0x452602ED */ - 5.17636139533199752805e+02, /* 0x40802D16, 0xD052D649 */ - 5.28715201363337541807e+02, /* 0x408085B8, 0xBB7E0CB7 */ -}; -static const double ps5[5] = { - 5.92805987221131331921e+01, /* 0x404DA3EA, 0xA8AF633D */ - 9.91401418733614377743e+02, /* 0x408EFB36, 0x1B066701 */ - 5.35326695291487976647e+03, /* 0x40B4E944, 0x5706B6FB */ - 7.84469031749551231769e+03, /* 0x40BEA4B0, 0xB8A5BB15 */ - 1.50404688810361062679e+03, /* 0x40978030, 0x036F5E51 */ -}; - -static const double pr3[6] = { - 3.02503916137373618024e-09, /* 0x3E29FC21, 0xA7AD9EDD */ - 1.17186865567253592491e-01, /* 0x3FBDFFF5, 0x5B21D17B */ - 3.93297750033315640650e+00, /* 0x400F76BC, 0xE85EAD8A */ - 3.51194035591636932736e+01, /* 0x40418F48, 0x9DA6D129 */ - 9.10550110750781271918e+01, /* 0x4056C385, 0x4D2C1837 */ - 4.85590685197364919645e+01, /* 0x4048478F, 0x8EA83EE5 */ -}; -static const double ps3[5] = { - 3.47913095001251519989e+01, /* 0x40416549, 0xA134069C */ - 3.36762458747825746741e+02, /* 0x40750C33, 0x07F1A75F */ - 1.04687139975775130551e+03, /* 0x40905B7C, 0x5037D523 */ - 8.90811346398256432622e+02, /* 0x408BD67D, 0xA32E31E9 */ - 1.03787932439639277504e+02, /* 0x4059F26D, 0x7C2EED53 */ -}; - -static const double pr2[6] = { /* for x in [2.8570,2]=1/[0.3499,0.5] */ - 1.07710830106873743082e-07, /* 0x3E7CE9D4, 0xF65544F4 */ - 1.17176219462683348094e-01, /* 0x3FBDFF42, 0xBE760D83 */ - 2.36851496667608785174e+00, /* 0x4002F2B7, 0xF98FAEC0 */ - 1.22426109148261232917e+01, /* 0x40287C37, 0x7F71A964 */ - 1.76939711271687727390e+01, /* 0x4031B1A8, 0x177F8EE2 */ - 5.07352312588818499250e+00, /* 0x40144B49, 0xA574C1FE */ -}; -static const double ps2[5] = { - 2.14364859363821409488e+01, /* 0x40356FBD, 0x8AD5ECDC */ - 1.25290227168402751090e+02, /* 0x405F5293, 0x14F92CD5 */ - 2.32276469057162813669e+02, /* 0x406D08D8, 0xD5A2DBD9 */ - 1.17679373287147100768e+02, /* 0x405D6B7A, 0xDA1884A9 */ - 8.36463893371618283368e+00, /* 0x4020BAB1, 0xF44E5192 */ -}; - -static double -pone (double x) -{ - const double *p, *q; - double z, r, s, r1, r2, r3, s1, s2, s3, z2, z4; - int32_t ix; - GET_HIGH_WORD (ix, x); - ix &= 0x7fffffff; - /* ix >= 0x40000000 for all calls to this function. */ - if (ix >= 0x41b00000) - { - return one; - } - else if (ix >= 0x40200000) - { - p = pr8; q = ps8; - } - else if (ix >= 0x40122E8B) - { - p = pr5; q = ps5; - } - else if (ix >= 0x4006DB6D) - { - p = pr3; q = ps3; - } - else - { - p = pr2; q = ps2; - } - z = one / (x * x); - r1 = p[0] + z * p[1]; z2 = z * z; - r2 = p[2] + z * p[3]; z4 = z2 * z2; - r3 = p[4] + z * p[5]; - r = r1 + z2 * r2 + z4 * r3; - s1 = one + z * q[0]; - s2 = q[1] + z * q[2]; - s3 = q[3] + z * q[4]; - s = s1 + z2 * s2 + z4 * s3; - return one + r / s; -} - - -/* For x >= 8, the asymptotic expansions of qone is - * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. - * We approximate pone by - * qone(x) = s*(0.375 + (R/S)) - * where R = qr1*s^2 + qr2*s^4 + ... + qr5*s^10 - * S = 1 + qs1*s^2 + ... + qs6*s^12 - * and - * | qone(x)/s -0.375-R/S | <= 2 ** ( -61.13) - */ - -static const double qr8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ - 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */ - -1.02539062499992714161e-01, /* 0xBFBA3FFF, 0xFFFFFDF3 */ - -1.62717534544589987888e+01, /* 0xC0304591, 0xA26779F7 */ - -7.59601722513950107896e+02, /* 0xC087BCD0, 0x53E4B576 */ - -1.18498066702429587167e+04, /* 0xC0C724E7, 0x40F87415 */ - -4.84385124285750353010e+04, /* 0xC0E7A6D0, 0x65D09C6A */ -}; -static const double qs8[6] = { - 1.61395369700722909556e+02, /* 0x40642CA6, 0xDE5BCDE5 */ - 7.82538599923348465381e+03, /* 0x40BE9162, 0xD0D88419 */ - 1.33875336287249578163e+05, /* 0x4100579A, 0xB0B75E98 */ - 7.19657723683240939863e+05, /* 0x4125F653, 0x72869C19 */ - 6.66601232617776375264e+05, /* 0x412457D2, 0x7719AD5C */ - -2.94490264303834643215e+05, /* 0xC111F969, 0x0EA5AA18 */ -}; - -static const double qr5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ - -2.08979931141764104297e-11, /* 0xBDB6FA43, 0x1AA1A098 */ - -1.02539050241375426231e-01, /* 0xBFBA3FFF, 0xCB597FEF */ - -8.05644828123936029840e+00, /* 0xC0201CE6, 0xCA03AD4B */ - -1.83669607474888380239e+02, /* 0xC066F56D, 0x6CA7B9B0 */ - -1.37319376065508163265e+03, /* 0xC09574C6, 0x6931734F */ - -2.61244440453215656817e+03, /* 0xC0A468E3, 0x88FDA79D */ -}; -static const double qs5[6] = { - 8.12765501384335777857e+01, /* 0x405451B2, 0xFF5A11B2 */ - 1.99179873460485964642e+03, /* 0x409F1F31, 0xE77BF839 */ - 1.74684851924908907677e+04, /* 0x40D10F1F, 0x0D64CE29 */ - 4.98514270910352279316e+04, /* 0x40E8576D, 0xAABAD197 */ - 2.79480751638918118260e+04, /* 0x40DB4B04, 0xCF7C364B */ - -4.71918354795128470869e+03, /* 0xC0B26F2E, 0xFCFFA004 */ -}; - -static const double qr3[6] = { - -5.07831226461766561369e-09, /* 0xBE35CFA9, 0xD38FC84F */ - -1.02537829820837089745e-01, /* 0xBFBA3FEB, 0x51AEED54 */ - -4.61011581139473403113e+00, /* 0xC01270C2, 0x3302D9FF */ - -5.78472216562783643212e+01, /* 0xC04CEC71, 0xC25D16DA */ - -2.28244540737631695038e+02, /* 0xC06C87D3, 0x4718D55F */ - -2.19210128478909325622e+02, /* 0xC06B66B9, 0x5F5C1BF6 */ -}; -static const double qs3[6] = { - 4.76651550323729509273e+01, /* 0x4047D523, 0xCCD367E4 */ - 6.73865112676699709482e+02, /* 0x40850EEB, 0xC031EE3E */ - 3.38015286679526343505e+03, /* 0x40AA684E, 0x448E7C9A */ - 5.54772909720722782367e+03, /* 0x40B5ABBA, 0xA61D54A6 */ - 1.90311919338810798763e+03, /* 0x409DBC7A, 0x0DD4DF4B */ - -1.35201191444307340817e+02, /* 0xC060E670, 0x290A311F */ -}; - -static const double qr2[6] = { /* for x in [2.8570,2]=1/[0.3499,0.5] */ - -1.78381727510958865572e-07, /* 0xBE87F126, 0x44C626D2 */ - -1.02517042607985553460e-01, /* 0xBFBA3E8E, 0x9148B010 */ - -2.75220568278187460720e+00, /* 0xC0060484, 0x69BB4EDA */ - -1.96636162643703720221e+01, /* 0xC033A9E2, 0xC168907F */ - -4.23253133372830490089e+01, /* 0xC04529A3, 0xDE104AAA */ - -2.13719211703704061733e+01, /* 0xC0355F36, 0x39CF6E52 */ -}; -static const double qs2[6] = { - 2.95333629060523854548e+01, /* 0x403D888A, 0x78AE64FF */ - 2.52981549982190529136e+02, /* 0x406F9F68, 0xDB821CBA */ - 7.57502834868645436472e+02, /* 0x4087AC05, 0xCE49A0F7 */ - 7.39393205320467245656e+02, /* 0x40871B25, 0x48D4C029 */ - 1.55949003336666123687e+02, /* 0x40637E5E, 0x3C3ED8D4 */ - -4.95949898822628210127e+00, /* 0xC013D686, 0xE71BE86B */ -}; - -static double -qone (double x) -{ - const double *p, *q; - double s, r, z, r1, r2, r3, s1, s2, s3, z2, z4, z6; - int32_t ix; - GET_HIGH_WORD (ix, x); - ix &= 0x7fffffff; - /* ix >= 0x40000000 for all calls to this function. */ - if (ix >= 0x41b00000) - { - return .375 / x; - } - else if (ix >= 0x40200000) - { - p = qr8; q = qs8; - } - else if (ix >= 0x40122E8B) - { - p = qr5; q = qs5; - } - else if (ix >= 0x4006DB6D) - { - p = qr3; q = qs3; - } - else - { - p = qr2; q = qs2; - } - z = one / (x * x); - r1 = p[0] + z * p[1]; z2 = z * z; - r2 = p[2] + z * p[3]; z4 = z2 * z2; - r3 = p[4] + z * p[5]; z6 = z4 * z2; - r = r1 + z2 * r2 + z4 * r3; - s1 = one + z * q[0]; - s2 = q[1] + z * q[2]; - s3 = q[3] + z * q[4]; - s = s1 + z2 * s2 + z4 * s3 + z6 * q[5]; - return (.375 + r / s) / x; -} diff --git a/sysdeps/ieee754/dbl-64/e_jn.c b/sysdeps/ieee754/dbl-64/e_jn.c deleted file mode 100644 index 3fecf82f10..0000000000 --- a/sysdeps/ieee754/dbl-64/e_jn.c +++ /dev/null @@ -1,347 +0,0 @@ -/* @(#)e_jn.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * __ieee754_jn(n, x), __ieee754_yn(n, x) - * floating point Bessel's function of the 1st and 2nd kind - * of order n - * - * Special cases: - * y0(0)=y1(0)=yn(n,0) = -inf with overflow signal; - * y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal. - * Note 2. About jn(n,x), yn(n,x) - * For n=0, j0(x) is called, - * for n=1, j1(x) is called, - * for nx, a continued fraction approximation to - * j(n,x)/j(n-1,x) is evaluated and then backward - * recursion is used starting from a supposed value - * for j(n,x). The resulting value of j(0,x) is - * compared with the actual value to correct the - * supposed value of j(n,x). - * - * yn(n,x) is similar in all respects, except - * that forward recursion is used for all - * values of n>1. - * - */ - -#include -#include -#include -#include - -static const double - invsqrtpi = 5.64189583547756279280e-01, /* 0x3FE20DD7, 0x50429B6D */ - two = 2.00000000000000000000e+00, /* 0x40000000, 0x00000000 */ - one = 1.00000000000000000000e+00; /* 0x3FF00000, 0x00000000 */ - -static const double zero = 0.00000000000000000000e+00; - -double -__ieee754_jn (int n, double x) -{ - int32_t i, hx, ix, lx, sgn; - double a, b, temp, di, ret; - double z, w; - - /* J(-n,x) = (-1)^n * J(n, x), J(n, -x) = (-1)^n * J(n, x) - * Thus, J(-n,x) = J(n,-x) - */ - EXTRACT_WORDS (hx, lx, x); - ix = 0x7fffffff & hx; - /* if J(n,NaN) is NaN */ - if (__glibc_unlikely ((ix | ((u_int32_t) (lx | -lx)) >> 31) > 0x7ff00000)) - return x + x; - if (n < 0) - { - n = -n; - x = -x; - hx ^= 0x80000000; - } - if (n == 0) - return (__ieee754_j0 (x)); - if (n == 1) - return (__ieee754_j1 (x)); - sgn = (n & 1) & (hx >> 31); /* even n -- 0, odd n -- sign(x) */ - x = fabs (x); - { - SET_RESTORE_ROUND (FE_TONEAREST); - if (__glibc_unlikely ((ix | lx) == 0 || ix >= 0x7ff00000)) - /* if x is 0 or inf */ - return sgn == 1 ? -zero : zero; - else if ((double) n <= x) - { - /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ - if (ix >= 0x52D00000) /* x > 2**302 */ - { /* (x >> n**2) - * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Let s=sin(x), c=cos(x), - * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then - * - * n sin(xn)*sqt2 cos(xn)*sqt2 - * ---------------------------------- - * 0 s-c c+s - * 1 -s-c -c+s - * 2 -s+c -c-s - * 3 s+c c-s - */ - double s; - double c; - __sincos (x, &s, &c); - switch (n & 3) - { - case 0: temp = c + s; break; - case 1: temp = -c + s; break; - case 2: temp = -c - s; break; - case 3: temp = c - s; break; - } - b = invsqrtpi * temp / __ieee754_sqrt (x); - } - else - { - a = __ieee754_j0 (x); - b = __ieee754_j1 (x); - for (i = 1; i < n; i++) - { - temp = b; - b = b * ((double) (i + i) / x) - a; /* avoid underflow */ - a = temp; - } - } - } - else - { - if (ix < 0x3e100000) /* x < 2**-29 */ - { /* x is tiny, return the first Taylor expansion of J(n,x) - * J(n,x) = 1/n!*(x/2)^n - ... - */ - if (n > 33) /* underflow */ - b = zero; - else - { - temp = x * 0.5; b = temp; - for (a = one, i = 2; i <= n; i++) - { - a *= (double) i; /* a = n! */ - b *= temp; /* b = (x/2)^n */ - } - b = b / a; - } - } - else - { - /* use backward recurrence */ - /* x x^2 x^2 - * J(n,x)/J(n-1,x) = ---- ------ ------ ..... - * 2n - 2(n+1) - 2(n+2) - * - * 1 1 1 - * (for large x) = ---- ------ ------ ..... - * 2n 2(n+1) 2(n+2) - * -- - ------ - ------ - - * x x x - * - * Let w = 2n/x and h=2/x, then the above quotient - * is equal to the continued fraction: - * 1 - * = ----------------------- - * 1 - * w - ----------------- - * 1 - * w+h - --------- - * w+2h - ... - * - * To determine how many terms needed, let - * Q(0) = w, Q(1) = w(w+h) - 1, - * Q(k) = (w+k*h)*Q(k-1) - Q(k-2), - * When Q(k) > 1e4 good for single - * When Q(k) > 1e9 good for double - * When Q(k) > 1e17 good for quadruple - */ - /* determine k */ - double t, v; - double q0, q1, h, tmp; int32_t k, m; - w = (n + n) / (double) x; h = 2.0 / (double) x; - q0 = w; z = w + h; q1 = w * z - 1.0; k = 1; - while (q1 < 1.0e9) - { - k += 1; z += h; - tmp = z * q1 - q0; - q0 = q1; - q1 = tmp; - } - m = n + n; - for (t = zero, i = 2 * (n + k); i >= m; i -= 2) - t = one / (i / x - t); - a = t; - b = one; - /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) - * Hence, if n*(log(2n/x)) > ... - * single 8.8722839355e+01 - * double 7.09782712893383973096e+02 - * long double 1.1356523406294143949491931077970765006170e+04 - * then recurrent value may overflow and the result is - * likely underflow to zero - */ - tmp = n; - v = two / x; - tmp = tmp * __ieee754_log (fabs (v * tmp)); - if (tmp < 7.09782712893383973096e+02) - { - for (i = n - 1, di = (double) (i + i); i > 0; i--) - { - temp = b; - b *= di; - b = b / x - a; - a = temp; - di -= two; - } - } - else - { - for (i = n - 1, di = (double) (i + i); i > 0; i--) - { - temp = b; - b *= di; - b = b / x - a; - a = temp; - di -= two; - /* scale b to avoid spurious overflow */ - if (b > 1e100) - { - a /= b; - t /= b; - b = one; - } - } - } - /* j0() and j1() suffer enormous loss of precision at and - * near zero; however, we know that their zero points never - * coincide, so just choose the one further away from zero. - */ - z = __ieee754_j0 (x); - w = __ieee754_j1 (x); - if (fabs (z) >= fabs (w)) - b = (t * z / b); - else - b = (t * w / a); - } - } - if (sgn == 1) - ret = -b; - else - ret = b; - ret = math_narrow_eval (ret); - } - if (ret == 0) - { - ret = math_narrow_eval (__copysign (DBL_MIN, ret) * DBL_MIN); - __set_errno (ERANGE); - } - else - math_check_force_underflow (ret); - return ret; -} -strong_alias (__ieee754_jn, __jn_finite) - -double -__ieee754_yn (int n, double x) -{ - int32_t i, hx, ix, lx; - int32_t sign; - double a, b, temp, ret; - - EXTRACT_WORDS (hx, lx, x); - ix = 0x7fffffff & hx; - /* if Y(n,NaN) is NaN */ - if (__glibc_unlikely ((ix | ((u_int32_t) (lx | -lx)) >> 31) > 0x7ff00000)) - return x + x; - if (__glibc_unlikely ((ix | lx) == 0)) - return -HUGE_VAL + x; - /* -inf and overflow exception. */; - if (__glibc_unlikely (hx < 0)) - return zero / (zero * x); - sign = 1; - if (n < 0) - { - n = -n; - sign = 1 - ((n & 1) << 1); - } - if (n == 0) - return (__ieee754_y0 (x)); - { - SET_RESTORE_ROUND (FE_TONEAREST); - if (n == 1) - { - ret = sign * __ieee754_y1 (x); - goto out; - } - if (__glibc_unlikely (ix == 0x7ff00000)) - return zero; - if (ix >= 0x52D00000) /* x > 2**302 */ - { /* (x >> n**2) - * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Let s=sin(x), c=cos(x), - * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then - * - * n sin(xn)*sqt2 cos(xn)*sqt2 - * ---------------------------------- - * 0 s-c c+s - * 1 -s-c -c+s - * 2 -s+c -c-s - * 3 s+c c-s - */ - double c; - double s; - __sincos (x, &s, &c); - switch (n & 3) - { - case 0: temp = s - c; break; - case 1: temp = -s - c; break; - case 2: temp = -s + c; break; - case 3: temp = s + c; break; - } - b = invsqrtpi * temp / __ieee754_sqrt (x); - } - else - { - u_int32_t high; - a = __ieee754_y0 (x); - b = __ieee754_y1 (x); - /* quit if b is -inf */ - GET_HIGH_WORD (high, b); - for (i = 1; i < n && high != 0xfff00000; i++) - { - temp = b; - b = ((double) (i + i) / x) * b - a; - GET_HIGH_WORD (high, b); - a = temp; - } - /* If B is +-Inf, set up errno accordingly. */ - if (!isfinite (b)) - __set_errno (ERANGE); - } - if (sign > 0) - ret = b; - else - ret = -b; - } - out: - if (isinf (ret)) - ret = __copysign (DBL_MAX, ret) * DBL_MAX; - return ret; -} -strong_alias (__ieee754_yn, __yn_finite) diff --git a/sysdeps/ieee754/dbl-64/e_lgamma_r.c b/sysdeps/ieee754/dbl-64/e_lgamma_r.c deleted file mode 100644 index b5860d8a24..0000000000 --- a/sysdeps/ieee754/dbl-64/e_lgamma_r.c +++ /dev/null @@ -1,310 +0,0 @@ -/* @(#)er_lgamma.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_lgamma_r(x, signgamp) - * Reentrant version of the logarithm of the Gamma function - * with user provide pointer for the sign of Gamma(x). - * - * Method: - * 1. Argument Reduction for 0 < x <= 8 - * Since gamma(1+s)=s*gamma(s), for x in [0,8], we may - * reduce x to a number in [1.5,2.5] by - * lgamma(1+s) = log(s) + lgamma(s) - * for example, - * lgamma(7.3) = log(6.3) + lgamma(6.3) - * = log(6.3*5.3) + lgamma(5.3) - * = log(6.3*5.3*4.3*3.3*2.3) + lgamma(2.3) - * 2. Polynomial approximation of lgamma around its - * minimun ymin=1.461632144968362245 to maintain monotonicity. - * On [ymin-0.23, ymin+0.27] (i.e., [1.23164,1.73163]), use - * Let z = x-ymin; - * lgamma(x) = -1.214862905358496078218 + z^2*poly(z) - * where - * poly(z) is a 14 degree polynomial. - * 2. Rational approximation in the primary interval [2,3] - * We use the following approximation: - * s = x-2.0; - * lgamma(x) = 0.5*s + s*P(s)/Q(s) - * with accuracy - * |P/Q - (lgamma(x)-0.5s)| < 2**-61.71 - * Our algorithms are based on the following observation - * - * zeta(2)-1 2 zeta(3)-1 3 - * lgamma(2+s) = s*(1-Euler) + --------- * s - --------- * s + ... - * 2 3 - * - * where Euler = 0.5771... is the Euler constant, which is very - * close to 0.5. - * - * 3. For x>=8, we have - * lgamma(x)~(x-0.5)log(x)-x+0.5*log(2pi)+1/(12x)-1/(360x**3)+.... - * (better formula: - * lgamma(x)~(x-0.5)*(log(x)-1)-.5*(log(2pi)-1) + ...) - * Let z = 1/x, then we approximation - * f(z) = lgamma(x) - (x-0.5)(log(x)-1) - * by - * 3 5 11 - * w = w0 + w1*z + w2*z + w3*z + ... + w6*z - * where - * |w - f(z)| < 2**-58.74 - * - * 4. For negative x, since (G is gamma function) - * -x*G(-x)*G(x) = pi/sin(pi*x), - * we have - * G(x) = pi/(sin(pi*x)*(-x)*G(-x)) - * since G(-x) is positive, sign(G(x)) = sign(sin(pi*x)) for x<0 - * Hence, for x<0, signgam = sign(sin(pi*x)) and - * lgamma(x) = log(|Gamma(x)|) - * = log(pi/(|x*sin(pi*x)|)) - lgamma(-x); - * Note: one should avoid compute pi*(-x) directly in the - * computation of sin(pi*(-x)). - * - * 5. Special Cases - * lgamma(2+s) ~ s*(1-Euler) for tiny s - * lgamma(1)=lgamma(2)=0 - * lgamma(x) ~ -log(x) for tiny x - * lgamma(0) = lgamma(inf) = inf - * lgamma(-integer) = +-inf - * - */ - -#include -#include -#include - -static const double -two52= 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ -half= 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */ -one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ -pi = 3.14159265358979311600e+00, /* 0x400921FB, 0x54442D18 */ -a0 = 7.72156649015328655494e-02, /* 0x3FB3C467, 0xE37DB0C8 */ -a1 = 3.22467033424113591611e-01, /* 0x3FD4A34C, 0xC4A60FAD */ -a2 = 6.73523010531292681824e-02, /* 0x3FB13E00, 0x1A5562A7 */ -a3 = 2.05808084325167332806e-02, /* 0x3F951322, 0xAC92547B */ -a4 = 7.38555086081402883957e-03, /* 0x3F7E404F, 0xB68FEFE8 */ -a5 = 2.89051383673415629091e-03, /* 0x3F67ADD8, 0xCCB7926B */ -a6 = 1.19270763183362067845e-03, /* 0x3F538A94, 0x116F3F5D */ -a7 = 5.10069792153511336608e-04, /* 0x3F40B6C6, 0x89B99C00 */ -a8 = 2.20862790713908385557e-04, /* 0x3F2CF2EC, 0xED10E54D */ -a9 = 1.08011567247583939954e-04, /* 0x3F1C5088, 0x987DFB07 */ -a10 = 2.52144565451257326939e-05, /* 0x3EFA7074, 0x428CFA52 */ -a11 = 4.48640949618915160150e-05, /* 0x3F07858E, 0x90A45837 */ -tc = 1.46163214496836224576e+00, /* 0x3FF762D8, 0x6356BE3F */ -tf = -1.21486290535849611461e-01, /* 0xBFBF19B9, 0xBCC38A42 */ -/* tt = -(tail of tf) */ -tt = -3.63867699703950536541e-18, /* 0xBC50C7CA, 0xA48A971F */ -t0 = 4.83836122723810047042e-01, /* 0x3FDEF72B, 0xC8EE38A2 */ -t1 = -1.47587722994593911752e-01, /* 0xBFC2E427, 0x8DC6C509 */ -t2 = 6.46249402391333854778e-02, /* 0x3FB08B42, 0x94D5419B */ -t3 = -3.27885410759859649565e-02, /* 0xBFA0C9A8, 0xDF35B713 */ -t4 = 1.79706750811820387126e-02, /* 0x3F9266E7, 0x970AF9EC */ -t5 = -1.03142241298341437450e-02, /* 0xBF851F9F, 0xBA91EC6A */ -t6 = 6.10053870246291332635e-03, /* 0x3F78FCE0, 0xE370E344 */ -t7 = -3.68452016781138256760e-03, /* 0xBF6E2EFF, 0xB3E914D7 */ -t8 = 2.25964780900612472250e-03, /* 0x3F6282D3, 0x2E15C915 */ -t9 = -1.40346469989232843813e-03, /* 0xBF56FE8E, 0xBF2D1AF1 */ -t10 = 8.81081882437654011382e-04, /* 0x3F4CDF0C, 0xEF61A8E9 */ -t11 = -5.38595305356740546715e-04, /* 0xBF41A610, 0x9C73E0EC */ -t12 = 3.15632070903625950361e-04, /* 0x3F34AF6D, 0x6C0EBBF7 */ -t13 = -3.12754168375120860518e-04, /* 0xBF347F24, 0xECC38C38 */ -t14 = 3.35529192635519073543e-04, /* 0x3F35FD3E, 0xE8C2D3F4 */ -u0 = -7.72156649015328655494e-02, /* 0xBFB3C467, 0xE37DB0C8 */ -u1 = 6.32827064025093366517e-01, /* 0x3FE4401E, 0x8B005DFF */ -u2 = 1.45492250137234768737e+00, /* 0x3FF7475C, 0xD119BD6F */ -u3 = 9.77717527963372745603e-01, /* 0x3FEF4976, 0x44EA8450 */ -u4 = 2.28963728064692451092e-01, /* 0x3FCD4EAE, 0xF6010924 */ -u5 = 1.33810918536787660377e-02, /* 0x3F8B678B, 0xBF2BAB09 */ -v1 = 2.45597793713041134822e+00, /* 0x4003A5D7, 0xC2BD619C */ -v2 = 2.12848976379893395361e+00, /* 0x40010725, 0xA42B18F5 */ -v3 = 7.69285150456672783825e-01, /* 0x3FE89DFB, 0xE45050AF */ -v4 = 1.04222645593369134254e-01, /* 0x3FBAAE55, 0xD6537C88 */ -v5 = 3.21709242282423911810e-03, /* 0x3F6A5ABB, 0x57D0CF61 */ -s0 = -7.72156649015328655494e-02, /* 0xBFB3C467, 0xE37DB0C8 */ -s1 = 2.14982415960608852501e-01, /* 0x3FCB848B, 0x36E20878 */ -s2 = 3.25778796408930981787e-01, /* 0x3FD4D98F, 0x4F139F59 */ -s3 = 1.46350472652464452805e-01, /* 0x3FC2BB9C, 0xBEE5F2F7 */ -s4 = 2.66422703033638609560e-02, /* 0x3F9B481C, 0x7E939961 */ -s5 = 1.84028451407337715652e-03, /* 0x3F5E26B6, 0x7368F239 */ -s6 = 3.19475326584100867617e-05, /* 0x3F00BFEC, 0xDD17E945 */ -r1 = 1.39200533467621045958e+00, /* 0x3FF645A7, 0x62C4AB74 */ -r2 = 7.21935547567138069525e-01, /* 0x3FE71A18, 0x93D3DCDC */ -r3 = 1.71933865632803078993e-01, /* 0x3FC601ED, 0xCCFBDF27 */ -r4 = 1.86459191715652901344e-02, /* 0x3F9317EA, 0x742ED475 */ -r5 = 7.77942496381893596434e-04, /* 0x3F497DDA, 0xCA41A95B */ -r6 = 7.32668430744625636189e-06, /* 0x3EDEBAF7, 0xA5B38140 */ -w0 = 4.18938533204672725052e-01, /* 0x3FDACFE3, 0x90C97D69 */ -w1 = 8.33333333333329678849e-02, /* 0x3FB55555, 0x5555553B */ -w2 = -2.77777777728775536470e-03, /* 0xBF66C16C, 0x16B02E5C */ -w3 = 7.93650558643019558500e-04, /* 0x3F4A019F, 0x98CF38B6 */ -w4 = -5.95187557450339963135e-04, /* 0xBF4380CB, 0x8C0FE741 */ -w5 = 8.36339918996282139126e-04, /* 0x3F4B67BA, 0x4CDAD5D1 */ -w6 = -1.63092934096575273989e-03; /* 0xBF5AB89D, 0x0B9E43E4 */ - -static const double zero= 0.00000000000000000000e+00; - -static double -sin_pi(double x) -{ - double y,z; - int n,ix; - - GET_HIGH_WORD(ix,x); - ix &= 0x7fffffff; - - if(ix<0x3fd00000) return __sin(pi*x); - y = -x; /* x is assume negative */ - - /* - * argument reduction, make sure inexact flag not raised if input - * is an integer - */ - z = __floor(y); - if(z!=y) { /* inexact anyway */ - y *= 0.5; - y = 2.0*(y - __floor(y)); /* y = |x| mod 2.0 */ - n = (int) (y*4.0); - } else { - if(ix>=0x43400000) { - y = zero; n = 0; /* y must be even */ - } else { - if(ix<0x43300000) z = y+two52; /* exact */ - GET_LOW_WORD(n,z); - n &= 1; - y = n; - n<<= 2; - } - } - switch (n) { - case 0: y = __sin(pi*y); break; - case 1: - case 2: y = __cos(pi*(0.5-y)); break; - case 3: - case 4: y = __sin(pi*(one-y)); break; - case 5: - case 6: y = -__cos(pi*(y-1.5)); break; - default: y = __sin(pi*(y-2.0)); break; - } - return -y; -} - - -double -__ieee754_lgamma_r(double x, int *signgamp) -{ - double t,y,z,nadj,p,p1,p2,p3,q,r,w; - int i,hx,lx,ix; - - EXTRACT_WORDS(hx,lx,x); - - /* purge off +-inf, NaN, +-0, and negative arguments */ - *signgamp = 1; - ix = hx&0x7fffffff; - if(__builtin_expect(ix>=0x7ff00000, 0)) return x*x; - if(__builtin_expect((ix|lx)==0, 0)) - { - if (hx < 0) - *signgamp = -1; - return one/fabs(x); - } - if(__builtin_expect(ix<0x3b900000, 0)) { - /* |x|<2**-70, return -log(|x|) */ - if(hx<0) { - *signgamp = -1; - return -__ieee754_log(-x); - } else return -__ieee754_log(x); - } - if(hx<0) { - if(__builtin_expect(ix>=0x43300000, 0)) - /* |x|>=2**52, must be -integer */ - return __fabs (x)/zero; - if (x < -2.0 && x > -28.0) - return __lgamma_neg (x, signgamp); - t = sin_pi(x); - if(t==zero) return one/fabsf(t); /* -integer */ - nadj = __ieee754_log(pi/fabs(t*x)); - if(t=0x3FE76944) {y = one-x; i= 0;} - else if(ix>=0x3FCDA661) {y= x-(tc-one); i=1;} - else {y = x; i=2;} - } else { - r = zero; - if(ix>=0x3FFBB4C3) {y=2.0-x;i=0;} /* [1.7316,2] */ - else if(ix>=0x3FF3B4C4) {y=x-tc;i=1;} /* [1.23,1.73] */ - else {y=x-one;i=2;} - } - switch(i) { - case 0: - z = y*y; - p1 = a0+z*(a2+z*(a4+z*(a6+z*(a8+z*a10)))); - p2 = z*(a1+z*(a3+z*(a5+z*(a7+z*(a9+z*a11))))); - p = y*p1+p2; - r += (p-0.5*y); break; - case 1: - z = y*y; - w = z*y; - p1 = t0+w*(t3+w*(t6+w*(t9 +w*t12))); /* parallel comp */ - p2 = t1+w*(t4+w*(t7+w*(t10+w*t13))); - p3 = t2+w*(t5+w*(t8+w*(t11+w*t14))); - p = z*p1-(tt-w*(p2+y*p3)); - r += (tf + p); break; - case 2: - p1 = y*(u0+y*(u1+y*(u2+y*(u3+y*(u4+y*u5))))); - p2 = one+y*(v1+y*(v2+y*(v3+y*(v4+y*v5)))); - r += (-0.5*y + p1/p2); - } - } - else if(ix<0x40200000) { /* x < 8.0 */ - i = (int)x; - t = zero; - y = x-(double)i; - p = y*(s0+y*(s1+y*(s2+y*(s3+y*(s4+y*(s5+y*s6)))))); - q = one+y*(r1+y*(r2+y*(r3+y*(r4+y*(r5+y*r6))))); - r = half*y+p/q; - z = one; /* lgamma(1+s) = log(s) + lgamma(s) */ - switch(i) { - case 7: z *= (y+6.0); /* FALLTHRU */ - case 6: z *= (y+5.0); /* FALLTHRU */ - case 5: z *= (y+4.0); /* FALLTHRU */ - case 4: z *= (y+3.0); /* FALLTHRU */ - case 3: z *= (y+2.0); /* FALLTHRU */ - r += __ieee754_log(z); break; - } - /* 8.0 <= x < 2**58 */ - } else if (ix < 0x43900000) { - t = __ieee754_log(x); - z = one/x; - y = z*z; - w = w0+z*(w1+y*(w2+y*(w3+y*(w4+y*(w5+y*w6))))); - r = (x-half)*(t-one)+w; - } else - /* 2**58 <= x <= inf */ - r = math_narrow_eval (x*(__ieee754_log(x)-one)); - /* NADJ is set for negative arguments but not otherwise, - resulting in warnings that it may be used uninitialized - although in the cases where it is used it has always been - set. */ - DIAG_PUSH_NEEDS_COMMENT; - DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wmaybe-uninitialized"); - if(hx<0) r = nadj - r; - DIAG_POP_NEEDS_COMMENT; - return r; -} -strong_alias (__ieee754_lgamma_r, __lgamma_r_finite) diff --git a/sysdeps/ieee754/dbl-64/e_log.c b/sysdeps/ieee754/dbl-64/e_log.c deleted file mode 100644 index e7cddc29c8..0000000000 --- a/sysdeps/ieee754/dbl-64/e_log.c +++ /dev/null @@ -1,262 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/*********************************************************************/ -/* */ -/* MODULE_NAME:ulog.c */ -/* */ -/* FUNCTION:ulog */ -/* */ -/* FILES NEEDED: dla.h endian.h mpa.h mydefs.h ulog.h */ -/* mpexp.c mplog.c mpa.c */ -/* ulog.tbl */ -/* */ -/* An ultimate log routine. Given an IEEE double machine number x */ -/* it computes the correctly rounded (to nearest) value of log(x). */ -/* Assumption: Machine arithmetic operations are performed in */ -/* round to nearest mode of IEEE 754 standard. */ -/* */ -/*********************************************************************/ - - -#include "endian.h" -#include -#include "mpa.h" -#include "MathLib.h" -#include -#include -#include - -#ifndef SECTION -# define SECTION -#endif - -void __mplog (mp_no *, mp_no *, int); - -/*********************************************************************/ -/* An ultimate log routine. Given an IEEE double machine number x */ -/* it computes the correctly rounded (to nearest) value of log(x). */ -/*********************************************************************/ -double -SECTION -__ieee754_log (double x) -{ -#define M 4 - static const int pr[M] = { 8, 10, 18, 32 }; - int i, j, n, ux, dx, p; - double dbl_n, u, p0, q, r0, w, nln2a, luai, lubi, lvaj, lvbj, - sij, ssij, ttij, A, B, B0, y, y1, y2, polI, polII, sa, sb, - t1, t2, t7, t8, t, ra, rb, ww, - a0, aa0, s1, s2, ss2, s3, ss3, a1, aa1, a, aa, b, bb, c; -#ifndef DLA_FMS - double t3, t4, t5, t6; -#endif - number num; - mp_no mpx, mpy, mpy1, mpy2, mperr; - -#include "ulog.tbl" -#include "ulog.h" - - /* Treating special values of x ( x<=0, x=INF, x=NaN etc.). */ - - num.d = x; - ux = num.i[HIGH_HALF]; - dx = num.i[LOW_HALF]; - n = 0; - if (__glibc_unlikely (ux < 0x00100000)) - { - if (__glibc_unlikely (((ux & 0x7fffffff) | dx) == 0)) - return MHALF / 0.0; /* return -INF */ - if (__glibc_unlikely (ux < 0)) - return (x - x) / 0.0; /* return NaN */ - n -= 54; - x *= two54.d; /* scale x */ - num.d = x; - } - if (__glibc_unlikely (ux >= 0x7ff00000)) - return x + x; /* INF or NaN */ - - /* Regular values of x */ - - w = x - 1; - if (__glibc_likely (fabs (w) > U03)) - goto case_03; - - /* log (1) is +0 in all rounding modes. */ - if (w == 0.0) - return 0.0; - - /*--- Stage I, the case abs(x-1) < 0.03 */ - - t8 = MHALF * w; - EMULV (t8, w, a, aa, t1, t2, t3, t4, t5); - EADD (w, a, b, bb); - /* Evaluate polynomial II */ - polII = b7.d + w * b8.d; - polII = b6.d + w * polII; - polII = b5.d + w * polII; - polII = b4.d + w * polII; - polII = b3.d + w * polII; - polII = b2.d + w * polII; - polII = b1.d + w * polII; - polII = b0.d + w * polII; - polII *= w * w * w; - c = (aa + bb) + polII; - - /* End stage I, case abs(x-1) < 0.03 */ - if ((y = b + (c + b * E2)) == b + (c - b * E2)) - return y; - - /*--- Stage II, the case abs(x-1) < 0.03 */ - - a = d19.d + w * d20.d; - a = d18.d + w * a; - a = d17.d + w * a; - a = d16.d + w * a; - a = d15.d + w * a; - a = d14.d + w * a; - a = d13.d + w * a; - a = d12.d + w * a; - a = d11.d + w * a; - - EMULV (w, a, s2, ss2, t1, t2, t3, t4, t5); - ADD2 (d10.d, dd10.d, s2, ss2, s3, ss3, t1, t2); - MUL2 (w, 0, s3, ss3, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (d9.d, dd9.d, s2, ss2, s3, ss3, t1, t2); - MUL2 (w, 0, s3, ss3, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (d8.d, dd8.d, s2, ss2, s3, ss3, t1, t2); - MUL2 (w, 0, s3, ss3, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (d7.d, dd7.d, s2, ss2, s3, ss3, t1, t2); - MUL2 (w, 0, s3, ss3, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (d6.d, dd6.d, s2, ss2, s3, ss3, t1, t2); - MUL2 (w, 0, s3, ss3, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (d5.d, dd5.d, s2, ss2, s3, ss3, t1, t2); - MUL2 (w, 0, s3, ss3, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (d4.d, dd4.d, s2, ss2, s3, ss3, t1, t2); - MUL2 (w, 0, s3, ss3, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (d3.d, dd3.d, s2, ss2, s3, ss3, t1, t2); - MUL2 (w, 0, s3, ss3, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (d2.d, dd2.d, s2, ss2, s3, ss3, t1, t2); - MUL2 (w, 0, s3, ss3, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (w, 0, s2, ss2, s3, ss3, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (w, 0, s3, ss3, b, bb, t1, t2); - - /* End stage II, case abs(x-1) < 0.03 */ - if ((y = b + (bb + b * E4)) == b + (bb - b * E4)) - return y; - goto stage_n; - - /*--- Stage I, the case abs(x-1) > 0.03 */ -case_03: - - /* Find n,u such that x = u*2**n, 1/sqrt(2) < u < sqrt(2) */ - n += (num.i[HIGH_HALF] >> 20) - 1023; - num.i[HIGH_HALF] = (num.i[HIGH_HALF] & 0x000fffff) | 0x3ff00000; - if (num.d > SQRT_2) - { - num.d *= HALF; - n++; - } - u = num.d; - dbl_n = (double) n; - - /* Find i such that ui=1+(i-75)/2**8 is closest to u (i= 0,1,2,...,181) */ - num.d += h1.d; - i = (num.i[HIGH_HALF] & 0x000fffff) >> 12; - - /* Find j such that vj=1+(j-180)/2**16 is closest to v=u/ui (j= 0,...,361) */ - num.d = u * Iu[i].d + h2.d; - j = (num.i[HIGH_HALF] & 0x000fffff) >> 4; - - /* Compute w=(u-ui*vj)/(ui*vj) */ - p0 = (1 + (i - 75) * DEL_U) * (1 + (j - 180) * DEL_V); - q = u - p0; - r0 = Iu[i].d * Iv[j].d; - w = q * r0; - - /* Evaluate polynomial I */ - polI = w + (a2.d + a3.d * w) * w * w; - - /* Add up everything */ - nln2a = dbl_n * LN2A; - luai = Lu[i][0].d; - lubi = Lu[i][1].d; - lvaj = Lv[j][0].d; - lvbj = Lv[j][1].d; - EADD (luai, lvaj, sij, ssij); - EADD (nln2a, sij, A, ttij); - B0 = (((lubi + lvbj) + ssij) + ttij) + dbl_n * LN2B; - B = polI + B0; - - /* End stage I, case abs(x-1) >= 0.03 */ - if ((y = A + (B + E1)) == A + (B - E1)) - return y; - - - /*--- Stage II, the case abs(x-1) > 0.03 */ - - /* Improve the accuracy of r0 */ - EMULV (p0, r0, sa, sb, t1, t2, t3, t4, t5); - t = r0 * ((1 - sa) - sb); - EADD (r0, t, ra, rb); - - /* Compute w */ - MUL2 (q, 0, ra, rb, w, ww, t1, t2, t3, t4, t5, t6, t7, t8); - - EADD (A, B0, a0, aa0); - - /* Evaluate polynomial III */ - s1 = (c3.d + (c4.d + c5.d * w) * w) * w; - EADD (c2.d, s1, s2, ss2); - MUL2 (s2, ss2, w, ww, s3, ss3, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (s3, ss3, w, ww, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (s2, ss2, w, ww, s3, ss3, t1, t2); - ADD2 (s3, ss3, a0, aa0, a1, aa1, t1, t2); - - /* End stage II, case abs(x-1) >= 0.03 */ - if ((y = a1 + (aa1 + E3)) == a1 + (aa1 - E3)) - return y; - - - /* Final stages. Use multi-precision arithmetic. */ -stage_n: - - for (i = 0; i < M; i++) - { - p = pr[i]; - __dbl_mp (x, &mpx, p); - __dbl_mp (y, &mpy, p); - __mplog (&mpx, &mpy, p); - __dbl_mp (e[i].d, &mperr, p); - __add (&mpy, &mperr, &mpy1, p); - __sub (&mpy, &mperr, &mpy2, p); - __mp_dbl (&mpy1, &y1, p); - __mp_dbl (&mpy2, &y2, p); - if (y1 == y2) - { - LIBC_PROBE (slowlog, 3, &p, &x, &y1); - return y1; - } - } - LIBC_PROBE (slowlog_inexact, 3, &p, &x, &y1); - return y1; -} - -#ifndef __ieee754_log -strong_alias (__ieee754_log, __log_finite) -#endif diff --git a/sysdeps/ieee754/dbl-64/e_log10.c b/sysdeps/ieee754/dbl-64/e_log10.c deleted file mode 100644 index bf40bca874..0000000000 --- a/sysdeps/ieee754/dbl-64/e_log10.c +++ /dev/null @@ -1,88 +0,0 @@ -/* @(#)e_log10.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_log10(x) - * Return the base 10 logarithm of x - * - * Method : - * Let log10_2hi = leading 40 bits of log10(2) and - * log10_2lo = log10(2) - log10_2hi, - * ivln10 = 1/log(10) rounded. - * Then - * n = ilogb(x), - * if(n<0) n = n+1; - * x = scalbn(x,-n); - * log10(x) := n*log10_2hi + (n*log10_2lo + ivln10*log(x)) - * - * Note 1: - * To guarantee log10(10**n)=n, where 10**n is normal, the rounding - * mode must set to Round-to-Nearest. - * Note 2: - * [1/log(10)] rounded to 53 bits has error .198 ulps; - * log10 is monotonic at all binary break points. - * - * Special cases: - * log10(x) is NaN with signal if x < 0; - * log10(+INF) is +INF with no signal; log10(0) is -INF with signal; - * log10(NaN) is that NaN with no signal; - * log10(10**N) = N for N=0,1,...,22. - * - * Constants: - * The hexadecimal values are the intended ones for the following constants. - * The decimal values may be used, provided that the compiler will convert - * from decimal to binary accurately enough to produce the hexadecimal values - * shown. - */ - -#include -#include -#include - -static const double two54 = 1.80143985094819840000e+16; /* 0x43500000, 0x00000000 */ -static const double ivln10 = 4.34294481903251816668e-01; /* 0x3FDBCB7B, 0x1526E50E */ -static const double log10_2hi = 3.01029995663611771306e-01; /* 0x3FD34413, 0x509F6000 */ -static const double log10_2lo = 3.69423907715893078616e-13; /* 0x3D59FEF3, 0x11F12B36 */ - -double -__ieee754_log10 (double x) -{ - double y, z; - int32_t i, k, hx; - u_int32_t lx; - - EXTRACT_WORDS (hx, lx, x); - - k = 0; - if (hx < 0x00100000) - { /* x < 2**-1022 */ - if (__glibc_unlikely (((hx & 0x7fffffff) | lx) == 0)) - return -two54 / __fabs (x); /* log(+-0)=-inf */ - if (__glibc_unlikely (hx < 0)) - return (x - x) / (x - x); /* log(-#) = NaN */ - k -= 54; - x *= two54; /* subnormal number, scale up x */ - GET_HIGH_WORD (hx, x); - } - if (__glibc_unlikely (hx >= 0x7ff00000)) - return x + x; - k += (hx >> 20) - 1023; - i = ((u_int32_t) k & 0x80000000) >> 31; - hx = (hx & 0x000fffff) | ((0x3ff - i) << 20); - y = (double) (k + i); - if (FIX_INT_FP_CONVERT_ZERO && y == 0.0) - y = 0.0; - SET_HIGH_WORD (x, hx); - z = y * log10_2lo + ivln10 * __ieee754_log (x); - return z + y * log10_2hi; -} - -strong_alias (__ieee754_log10, __log10_finite) diff --git a/sysdeps/ieee754/dbl-64/e_log2.c b/sysdeps/ieee754/dbl-64/e_log2.c deleted file mode 100644 index 5af68d8ecc..0000000000 --- a/sysdeps/ieee754/dbl-64/e_log2.c +++ /dev/null @@ -1,133 +0,0 @@ -/* Adapted for log2 by Ulrich Drepper . */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_log2(x) - * Return the logarithm to base 2 of x - * - * Method : - * 1. Argument Reduction: find k and f such that - * x = 2^k * (1+f), - * where sqrt(2)/2 < 1+f < sqrt(2) . - * - * 2. Approximation of log(1+f). - * Let s = f/(2+f) ; based on log(1+f) = log(1+s) - log(1-s) - * = 2s + 2/3 s**3 + 2/5 s**5 + ....., - * = 2s + s*R - * We use a special Reme algorithm on [0,0.1716] to generate - * a polynomial of degree 14 to approximate R The maximum error - * of this polynomial approximation is bounded by 2**-58.45. In - * other words, - * 2 4 6 8 10 12 14 - * R(z) ~ Lg1*s +Lg2*s +Lg3*s +Lg4*s +Lg5*s +Lg6*s +Lg7*s - * (the values of Lg1 to Lg7 are listed in the program) - * and - * | 2 14 | -58.45 - * | Lg1*s +...+Lg7*s - R(z) | <= 2 - * | | - * Note that 2s = f - s*f = f - hfsq + s*hfsq, where hfsq = f*f/2. - * In order to guarantee error in log below 1ulp, we compute log - * by - * log(1+f) = f - s*(f - R) (if f is not too large) - * log(1+f) = f - (hfsq - s*(hfsq+R)). (better accuracy) - * - * 3. Finally, log(x) = k + log(1+f). - * = k+(f-(hfsq-(s*(hfsq+R)))) - * - * Special cases: - * log2(x) is NaN with signal if x < 0 (including -INF) ; - * log2(+INF) is +INF; log(0) is -INF with signal; - * log2(NaN) is that NaN with no signal. - * - * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough - * to produce the hexadecimal values shown. - */ - -#include -#include -#include - -static const double ln2 = 0.69314718055994530942; -static const double two54 = 1.80143985094819840000e+16; /* 43500000 00000000 */ -static const double Lg1 = 6.666666666666735130e-01; /* 3FE55555 55555593 */ -static const double Lg2 = 3.999999999940941908e-01; /* 3FD99999 9997FA04 */ -static const double Lg3 = 2.857142874366239149e-01; /* 3FD24924 94229359 */ -static const double Lg4 = 2.222219843214978396e-01; /* 3FCC71C5 1D8E78AF */ -static const double Lg5 = 1.818357216161805012e-01; /* 3FC74664 96CB03DE */ -static const double Lg6 = 1.531383769920937332e-01; /* 3FC39A09 D078C69F */ -static const double Lg7 = 1.479819860511658591e-01; /* 3FC2F112 DF3E5244 */ - -static const double zero = 0.0; - -double -__ieee754_log2 (double x) -{ - double hfsq, f, s, z, R, w, t1, t2, dk; - int32_t k, hx, i, j; - u_int32_t lx; - - EXTRACT_WORDS (hx, lx, x); - - k = 0; - if (hx < 0x00100000) - { /* x < 2**-1022 */ - if (__glibc_unlikely (((hx & 0x7fffffff) | lx) == 0)) - return -two54 / __fabs (x); /* log(+-0)=-inf */ - if (__glibc_unlikely (hx < 0)) - return (x - x) / (x - x); /* log(-#) = NaN */ - k -= 54; - x *= two54; /* subnormal number, scale up x */ - GET_HIGH_WORD (hx, x); - } - if (__glibc_unlikely (hx >= 0x7ff00000)) - return x + x; - k += (hx >> 20) - 1023; - hx &= 0x000fffff; - i = (hx + 0x95f64) & 0x100000; - SET_HIGH_WORD (x, hx | (i ^ 0x3ff00000)); /* normalize x or x/2 */ - k += (i >> 20); - dk = (double) k; - f = x - 1.0; - if ((0x000fffff & (2 + hx)) < 3) - { /* |f| < 2**-20 */ - if (f == zero) - { - if (FIX_INT_FP_CONVERT_ZERO && dk == 0.0) - dk = 0.0; - return dk; - } - R = f * f * (0.5 - 0.33333333333333333 * f); - return dk - (R - f) / ln2; - } - s = f / (2.0 + f); - z = s * s; - i = hx - 0x6147a; - w = z * z; - j = 0x6b851 - hx; - t1 = w * (Lg2 + w * (Lg4 + w * Lg6)); - t2 = z * (Lg1 + w * (Lg3 + w * (Lg5 + w * Lg7))); - i |= j; - R = t2 + t1; - if (i > 0) - { - hfsq = 0.5 * f * f; - return dk - ((hfsq - (s * (hfsq + R))) - f) / ln2; - } - else - { - return dk - ((s * (f - R)) - f) / ln2; - } -} - -strong_alias (__ieee754_log2, __log2_finite) diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c deleted file mode 100644 index 9f6439ee42..0000000000 --- a/sysdeps/ieee754/dbl-64/e_pow.c +++ /dev/null @@ -1,481 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/***************************************************************************/ -/* MODULE_NAME: upow.c */ -/* */ -/* FUNCTIONS: upow */ -/* power1 */ -/* my_log2 */ -/* log1 */ -/* checkint */ -/* FILES NEEDED: dla.h endian.h mpa.h mydefs.h */ -/* halfulp.c mpexp.c mplog.c slowexp.c slowpow.c mpa.c */ -/* uexp.c upow.c */ -/* root.tbl uexp.tbl upow.tbl */ -/* An ultimate power routine. Given two IEEE double machine numbers y,x */ -/* it computes the correctly rounded (to nearest) value of x^y. */ -/* Assumption: Machine arithmetic operations are performed in */ -/* round to nearest mode of IEEE 754 standard. */ -/* */ -/***************************************************************************/ -#include -#include "endian.h" -#include "upow.h" -#include -#include "mydefs.h" -#include "MathLib.h" -#include "upow.tbl" -#include -#include - -#ifndef SECTION -# define SECTION -#endif - -static const double huge = 1.0e300, tiny = 1.0e-300; - -double __exp1 (double x, double xx, double error); -static double log1 (double x, double *delta, double *error); -static double my_log2 (double x, double *delta, double *error); -double __slowpow (double x, double y, double z); -static double power1 (double x, double y); -static int checkint (double x); - -/* An ultimate power routine. Given two IEEE double machine numbers y, x it - computes the correctly rounded (to nearest) value of X^y. */ -double -SECTION -__ieee754_pow (double x, double y) -{ - double z, a, aa, error, t, a1, a2, y1, y2; - mynumber u, v; - int k; - int4 qx, qy; - v.x = y; - u.x = x; - if (v.i[LOW_HALF] == 0) - { /* of y */ - qx = u.i[HIGH_HALF] & 0x7fffffff; - /* Is x a NaN? */ - if ((((qx == 0x7ff00000) && (u.i[LOW_HALF] != 0)) || (qx > 0x7ff00000)) - && (y != 0 || issignaling (x))) - return x + x; - if (y == 1.0) - return x; - if (y == 2.0) - return x * x; - if (y == -1.0) - return 1.0 / x; - if (y == 0) - return 1.0; - } - /* else */ - if (((u.i[HIGH_HALF] > 0 && u.i[HIGH_HALF] < 0x7ff00000) || /* x>0 and not x->0 */ - (u.i[HIGH_HALF] == 0 && u.i[LOW_HALF] != 0)) && - /* 2^-1023< x<= 2^-1023 * 0x1.0000ffffffff */ - (v.i[HIGH_HALF] & 0x7fffffff) < 0x4ff00000) - { /* if y<-1 or y>1 */ - double retval; - - { - SET_RESTORE_ROUND (FE_TONEAREST); - - /* Avoid internal underflow for tiny y. The exact value of y does - not matter if |y| <= 2**-64. */ - if (fabs (y) < 0x1p-64) - y = y < 0 ? -0x1p-64 : 0x1p-64; - z = log1 (x, &aa, &error); /* x^y =e^(y log (X)) */ - t = y * CN; - y1 = t - (t - y); - y2 = y - y1; - t = z * CN; - a1 = t - (t - z); - a2 = (z - a1) + aa; - a = y1 * a1; - aa = y2 * a1 + y * a2; - a1 = a + aa; - a2 = (a - a1) + aa; - error = error * fabs (y); - t = __exp1 (a1, a2, 1.9e16 * error); /* return -10 or 0 if wasn't computed exactly */ - retval = (t > 0) ? t : power1 (x, y); - } - - if (isinf (retval)) - retval = huge * huge; - else if (retval == 0) - retval = tiny * tiny; - else - math_check_force_underflow_nonneg (retval); - return retval; - } - - if (x == 0) - { - if (((v.i[HIGH_HALF] & 0x7fffffff) == 0x7ff00000 && v.i[LOW_HALF] != 0) - || (v.i[HIGH_HALF] & 0x7fffffff) > 0x7ff00000) /* NaN */ - return y + y; - if (fabs (y) > 1.0e20) - return (y > 0) ? 0 : 1.0 / 0.0; - k = checkint (y); - if (k == -1) - return y < 0 ? 1.0 / x : x; - else - return y < 0 ? 1.0 / 0.0 : 0.0; /* return 0 */ - } - - qx = u.i[HIGH_HALF] & 0x7fffffff; /* no sign */ - qy = v.i[HIGH_HALF] & 0x7fffffff; /* no sign */ - - if (qx >= 0x7ff00000 && (qx > 0x7ff00000 || u.i[LOW_HALF] != 0)) /* NaN */ - return x + y; - if (qy >= 0x7ff00000 && (qy > 0x7ff00000 || v.i[LOW_HALF] != 0)) /* NaN */ - return x == 1.0 && !issignaling (y) ? 1.0 : y + y; - - /* if x<0 */ - if (u.i[HIGH_HALF] < 0) - { - k = checkint (y); - if (k == 0) - { - if (qy == 0x7ff00000) - { - if (x == -1.0) - return 1.0; - else if (x > -1.0) - return v.i[HIGH_HALF] < 0 ? INF.x : 0.0; - else - return v.i[HIGH_HALF] < 0 ? 0.0 : INF.x; - } - else if (qx == 0x7ff00000) - return y < 0 ? 0.0 : INF.x; - return (x - x) / (x - x); /* y not integer and x<0 */ - } - else if (qx == 0x7ff00000) - { - if (k < 0) - return y < 0 ? nZERO.x : nINF.x; - else - return y < 0 ? 0.0 : INF.x; - } - /* if y even or odd */ - if (k == 1) - return __ieee754_pow (-x, y); - else - { - double retval; - { - SET_RESTORE_ROUND (FE_TONEAREST); - retval = -__ieee754_pow (-x, y); - } - if (isinf (retval)) - retval = -huge * huge; - else if (retval == 0) - retval = -tiny * tiny; - return retval; - } - } - /* x>0 */ - - if (qx == 0x7ff00000) /* x= 2^-0x3ff */ - return y > 0 ? x : 0; - - if (qy > 0x45f00000 && qy < 0x7ff00000) - { - if (x == 1.0) - return 1.0; - if (y > 0) - return (x > 1.0) ? huge * huge : tiny * tiny; - if (y < 0) - return (x < 1.0) ? huge * huge : tiny * tiny; - } - - if (x == 1.0) - return 1.0; - if (y > 0) - return (x > 1.0) ? INF.x : 0; - if (y < 0) - return (x < 1.0) ? INF.x : 0; - return 0; /* unreachable, to make the compiler happy */ -} - -#ifndef __ieee754_pow -strong_alias (__ieee754_pow, __pow_finite) -#endif - -/* Compute x^y using more accurate but more slow log routine. */ -static double -SECTION -power1 (double x, double y) -{ - double z, a, aa, error, t, a1, a2, y1, y2; - z = my_log2 (x, &aa, &error); - t = y * CN; - y1 = t - (t - y); - y2 = y - y1; - t = z * CN; - a1 = t - (t - z); - a2 = z - a1; - a = y * z; - aa = ((y1 * a1 - a) + y1 * a2 + y2 * a1) + y2 * a2 + aa * y; - a1 = a + aa; - a2 = (a - a1) + aa; - error = error * fabs (y); - t = __exp1 (a1, a2, 1.9e16 * error); - return (t >= 0) ? t : __slowpow (x, y, z); -} - -/* Compute log(x) (x is left argument). The result is the returned double + the - parameter DELTA. The result is bounded by ERROR. */ -static double -SECTION -log1 (double x, double *delta, double *error) -{ - unsigned int i, j; - int m; - double uu, vv, eps, nx, e, e1, e2, t, t1, t2, res, add = 0; - mynumber u, v; -#ifdef BIG_ENDI - mynumber /**/ two52 = {{0x43300000, 0x00000000}}; /* 2**52 */ -#else -# ifdef LITTLE_ENDI - mynumber /**/ two52 = {{0x00000000, 0x43300000}}; /* 2**52 */ -# endif -#endif - - u.x = x; - m = u.i[HIGH_HALF]; - *error = 0; - *delta = 0; - if (m < 0x00100000) /* 1> 20); - } - else - { - u.i[HIGH_HALF] = (m & 0x000fffff) | 0x3fe00000; - two52.i[LOW_HALF] = (m >> 20) + 1; - } - - v.x = u.x + bigu.x; - uu = v.x - bigu.x; - i = (v.i[LOW_HALF] & 0x000003ff) << 2; - if (two52.i[LOW_HALF] == 1023) /* nx = 0 */ - { - if (i > 1192 && i < 1208) /* |x-1| < 1.5*2**-10 */ - { - t = x - 1.0; - t1 = (t + 5.0e6) - 5.0e6; - t2 = t - t1; - e1 = t - 0.5 * t1 * t1; - e2 = (t * t * t * (r3 + t * (r4 + t * (r5 + t * (r6 + t - * (r7 + t * r8))))) - - 0.5 * t2 * (t + t1)); - res = e1 + e2; - *error = 1.0e-21 * fabs (t); - *delta = (e1 - res) + e2; - return res; - } /* |x-1| < 1.5*2**-10 */ - else - { - v.x = u.x * (ui.x[i] + ui.x[i + 1]) + bigv.x; - vv = v.x - bigv.x; - j = v.i[LOW_HALF] & 0x0007ffff; - j = j + j + j; - eps = u.x - uu * vv; - e1 = eps * ui.x[i]; - e2 = eps * (ui.x[i + 1] + vj.x[j] * (ui.x[i] + ui.x[i + 1])); - e = e1 + e2; - e2 = ((e1 - e) + e2); - t = ui.x[i + 2] + vj.x[j + 1]; - t1 = t + e; - t2 = ((((t - t1) + e) + (ui.x[i + 3] + vj.x[j + 2])) + e2 + e * e - * (p2 + e * (p3 + e * p4))); - res = t1 + t2; - *error = 1.0e-24; - *delta = (t1 - res) + t2; - return res; - } - } /* nx = 0 */ - else /* nx != 0 */ - { - eps = u.x - uu; - nx = (two52.x - two52e.x) + add; - e1 = eps * ui.x[i]; - e2 = eps * ui.x[i + 1]; - e = e1 + e2; - e2 = (e1 - e) + e2; - t = nx * ln2a.x + ui.x[i + 2]; - t1 = t + e; - t2 = ((((t - t1) + e) + nx * ln2b.x + ui.x[i + 3] + e2) + e * e - * (q2 + e * (q3 + e * (q4 + e * (q5 + e * q6))))); - res = t1 + t2; - *error = 1.0e-21; - *delta = (t1 - res) + t2; - return res; - } /* nx != 0 */ -} - -/* Slower but more accurate routine of log. The returned result is double + - DELTA. The result is bounded by ERROR. */ -static double -SECTION -my_log2 (double x, double *delta, double *error) -{ - unsigned int i, j; - int m; - double uu, vv, eps, nx, e, e1, e2, t, t1, t2, res, add = 0; - double ou1, ou2, lu1, lu2, ov, lv1, lv2, a, a1, a2; - double y, yy, z, zz, j1, j2, j7, j8; -#ifndef DLA_FMS - double j3, j4, j5, j6; -#endif - mynumber u, v; -#ifdef BIG_ENDI - mynumber /**/ two52 = {{0x43300000, 0x00000000}}; /* 2**52 */ -#else -# ifdef LITTLE_ENDI - mynumber /**/ two52 = {{0x00000000, 0x43300000}}; /* 2**52 */ -# endif -#endif - - u.x = x; - m = u.i[HIGH_HALF]; - *error = 0; - *delta = 0; - add = 0; - if (m < 0x00100000) - { /* x < 2^-1022 */ - x = x * t52.x; - add = -52.0; - u.x = x; - m = u.i[HIGH_HALF]; - } - - if ((m & 0x000fffff) < 0x0006a09e) - { - u.i[HIGH_HALF] = (m & 0x000fffff) | 0x3ff00000; - two52.i[LOW_HALF] = (m >> 20); - } - else - { - u.i[HIGH_HALF] = (m & 0x000fffff) | 0x3fe00000; - two52.i[LOW_HALF] = (m >> 20) + 1; - } - - v.x = u.x + bigu.x; - uu = v.x - bigu.x; - i = (v.i[LOW_HALF] & 0x000003ff) << 2; - /*------------------------------------- |x-1| < 2**-11------------------------------- */ - if ((two52.i[LOW_HALF] == 1023) && (i == 1200)) - { - t = x - 1.0; - EMULV (t, s3, y, yy, j1, j2, j3, j4, j5); - ADD2 (-0.5, 0, y, yy, z, zz, j1, j2); - MUL2 (t, 0, z, zz, y, yy, j1, j2, j3, j4, j5, j6, j7, j8); - MUL2 (t, 0, y, yy, z, zz, j1, j2, j3, j4, j5, j6, j7, j8); - - e1 = t + z; - e2 = ((((t - e1) + z) + zz) + t * t * t - * (ss3 + t * (s4 + t * (s5 + t * (s6 + t * (s7 + t * s8)))))); - res = e1 + e2; - *error = 1.0e-25 * fabs (t); - *delta = (e1 - res) + e2; - return res; - } - /*----------------------------- |x-1| > 2**-11 -------------------------- */ - else - { /*Computing log(x) according to log table */ - nx = (two52.x - two52e.x) + add; - ou1 = ui.x[i]; - ou2 = ui.x[i + 1]; - lu1 = ui.x[i + 2]; - lu2 = ui.x[i + 3]; - v.x = u.x * (ou1 + ou2) + bigv.x; - vv = v.x - bigv.x; - j = v.i[LOW_HALF] & 0x0007ffff; - j = j + j + j; - eps = u.x - uu * vv; - ov = vj.x[j]; - lv1 = vj.x[j + 1]; - lv2 = vj.x[j + 2]; - a = (ou1 + ou2) * (1.0 + ov); - a1 = (a + 1.0e10) - 1.0e10; - a2 = a * (1.0 - a1 * uu * vv); - e1 = eps * a1; - e2 = eps * a2; - e = e1 + e2; - e2 = (e1 - e) + e2; - t = nx * ln2a.x + lu1 + lv1; - t1 = t + e; - t2 = ((((t - t1) + e) + (lu2 + lv2 + nx * ln2b.x + e2)) + e * e - * (p2 + e * (p3 + e * p4))); - res = t1 + t2; - *error = 1.0e-27; - *delta = (t1 - res) + t2; - return res; - } -} - -/* This function receives a double x and checks if it is an integer. If not, - it returns 0, else it returns 1 if even or -1 if odd. */ -static int -SECTION -checkint (double x) -{ - union - { - int4 i[2]; - double x; - } u; - int k, m, n; - u.x = x; - m = u.i[HIGH_HALF] & 0x7fffffff; /* no sign */ - if (m >= 0x7ff00000) - return 0; /* x is +/-inf or NaN */ - if (m >= 0x43400000) - return 1; /* |x| >= 2**53 */ - if (m < 0x40000000) - return 0; /* |x| < 2, can not be 0 or 1 */ - n = u.i[LOW_HALF]; - k = (m >> 20) - 1023; /* 1 <= k <= 52 */ - if (k == 52) - return (n & 1) ? -1 : 1; /* odd or even */ - if (k > 20) - { - if (n << (k - 20) != 0) - return 0; /* if not integer */ - return (n << (k - 21) != 0) ? -1 : 1; - } - if (n) - return 0; /*if not integer */ - if (k == 20) - return (m & 1) ? -1 : 1; - if (m << (k + 12) != 0) - return 0; - return (m << (k + 11) != 0) ? -1 : 1; -} diff --git a/sysdeps/ieee754/dbl-64/e_rem_pio2.c b/sysdeps/ieee754/dbl-64/e_rem_pio2.c deleted file mode 100644 index 2f55ca294b..0000000000 --- a/sysdeps/ieee754/dbl-64/e_rem_pio2.c +++ /dev/null @@ -1,193 +0,0 @@ -#ifdef NOT_NEEDED_ANYMORE - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_rem_pio2(x,y) - * - * return the remainder of x rem pi/2 in y[0]+y[1] - * use __kernel_rem_pio2() - */ - -#include -#include - -/* - * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi - */ -static const int32_t two_over_pi[] = { -0xA2F983, 0x6E4E44, 0x1529FC, 0x2757D1, 0xF534DD, 0xC0DB62, -0x95993C, 0x439041, 0xFE5163, 0xABDEBB, 0xC561B7, 0x246E3A, -0x424DD2, 0xE00649, 0x2EEA09, 0xD1921C, 0xFE1DEB, 0x1CB129, -0xA73EE8, 0x8235F5, 0x2EBB44, 0x84E99C, 0x7026B4, 0x5F7E41, -0x3991D6, 0x398353, 0x39F49C, 0x845F8B, 0xBDF928, 0x3B1FF8, -0x97FFDE, 0x05980F, 0xEF2F11, 0x8B5A0A, 0x6D1F6D, 0x367ECF, -0x27CB09, 0xB74F46, 0x3F669E, 0x5FEA2D, 0x7527BA, 0xC7EBE5, -0xF17B3D, 0x0739F7, 0x8A5292, 0xEA6BFB, 0x5FB11F, 0x8D5D08, -0x560330, 0x46FC7B, 0x6BABF0, 0xCFBC20, 0x9AF436, 0x1DA9E3, -0x91615E, 0xE61B08, 0x659985, 0x5F14A0, 0x68408D, 0xFFD880, -0x4D7327, 0x310606, 0x1556CA, 0x73A8C9, 0x60E27B, 0xC08C6B, -}; - -static const int32_t npio2_hw[] = { -0x3FF921FB, 0x400921FB, 0x4012D97C, 0x401921FB, 0x401F6A7A, 0x4022D97C, -0x4025FDBB, 0x402921FB, 0x402C463A, 0x402F6A7A, 0x4031475C, 0x4032D97C, -0x40346B9C, 0x4035FDBB, 0x40378FDB, 0x403921FB, 0x403AB41B, 0x403C463A, -0x403DD85A, 0x403F6A7A, 0x40407E4C, 0x4041475C, 0x4042106C, 0x4042D97C, -0x4043A28C, 0x40446B9C, 0x404534AC, 0x4045FDBB, 0x4046C6CB, 0x40478FDB, -0x404858EB, 0x404921FB, -}; - -/* - * invpio2: 53 bits of 2/pi - * pio2_1: first 33 bit of pi/2 - * pio2_1t: pi/2 - pio2_1 - * pio2_2: second 33 bit of pi/2 - * pio2_2t: pi/2 - (pio2_1+pio2_2) - * pio2_3: third 33 bit of pi/2 - * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) - */ - -static const double - zero = 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */ - half = 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */ - two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */ - invpio2 = 6.36619772367581382433e-01, /* 0x3FE45F30, 0x6DC9C883 */ - pio2_1 = 1.57079632673412561417e+00, /* 0x3FF921FB, 0x54400000 */ - pio2_1t = 6.07710050650619224932e-11, /* 0x3DD0B461, 0x1A626331 */ - pio2_2 = 6.07710050630396597660e-11, /* 0x3DD0B461, 0x1A600000 */ - pio2_2t = 2.02226624879595063154e-21, /* 0x3BA3198A, 0x2E037073 */ - pio2_3 = 2.02226624871116645580e-21, /* 0x3BA3198A, 0x2E000000 */ - pio2_3t = 8.47842766036889956997e-32; /* 0x397B839A, 0x252049C1 */ - -int32_t -__ieee754_rem_pio2 (double x, double *y) -{ - double z, w, t, r, fn; - double tx[3]; - int32_t e0, i, j, nx, n, ix, hx; - u_int32_t low; - - GET_HIGH_WORD (hx, x); /* high word of x */ - ix = hx & 0x7fffffff; - if (ix <= 0x3fe921fb) /* |x| ~<= pi/4 , no need for reduction */ - { - y[0] = x; y[1] = 0; return 0; - } - if (ix < 0x4002d97c) /* |x| < 3pi/4, special case with n=+-1 */ - { - if (hx > 0) - { - z = x - pio2_1; - if (ix != 0x3ff921fb) /* 33+53 bit pi is good enough */ - { - y[0] = z - pio2_1t; - y[1] = (z - y[0]) - pio2_1t; - } - else /* near pi/2, use 33+33+53 bit pi */ - { - z -= pio2_2; - y[0] = z - pio2_2t; - y[1] = (z - y[0]) - pio2_2t; - } - return 1; - } - else /* negative x */ - { - z = x + pio2_1; - if (ix != 0x3ff921fb) /* 33+53 bit pi is good enough */ - { - y[0] = z + pio2_1t; - y[1] = (z - y[0]) + pio2_1t; - } - else /* near pi/2, use 33+33+53 bit pi */ - { - z += pio2_2; - y[0] = z + pio2_2t; - y[1] = (z - y[0]) + pio2_2t; - } - return -1; - } - } - if (ix <= 0x413921fb) /* |x| ~<= 2^19*(pi/2), medium size */ - { - t = fabs (x); - n = (int32_t) (t * invpio2 + half); - fn = (double) n; - r = t - fn * pio2_1; - w = fn * pio2_1t; /* 1st round good to 85 bit */ - if (n < 32 && ix != npio2_hw[n - 1]) - { - y[0] = r - w; /* quick check no cancellation */ - } - else - { - u_int32_t high; - j = ix >> 20; - y[0] = r - w; - GET_HIGH_WORD (high, y[0]); - i = j - ((high >> 20) & 0x7ff); - if (i > 16) /* 2nd iteration needed, good to 118 */ - { - t = r; - w = fn * pio2_2; - r = t - w; - w = fn * pio2_2t - ((t - r) - w); - y[0] = r - w; - GET_HIGH_WORD (high, y[0]); - i = j - ((high >> 20) & 0x7ff); - if (i > 49) /* 3rd iteration need, 151 bits acc */ - { - t = r; /* will cover all possible cases */ - w = fn * pio2_3; - r = t - w; - w = fn * pio2_3t - ((t - r) - w); - y[0] = r - w; - } - } - } - y[1] = (r - y[0]) - w; - if (hx < 0) - { - y[0] = -y[0]; y[1] = -y[1]; return -n; - } - else - return n; - } - /* - * all other (large) arguments - */ - if (ix >= 0x7ff00000) /* x is inf or NaN */ - { - y[0] = y[1] = x - x; return 0; - } - /* set z = scalbn(|x|,ilogb(x)-23) */ - GET_LOW_WORD (low, x); - SET_LOW_WORD (z, low); - e0 = (ix >> 20) - 1046; /* e0 = ilogb(z)-23; */ - SET_HIGH_WORD (z, ix - ((int32_t) (e0 << 20))); - for (i = 0; i < 2; i++) - { - tx[i] = (double) ((int32_t) (z)); - z = (z - tx[i]) * two24; - } - tx[2] = z; - nx = 3; - while (tx[nx - 1] == zero) - nx--; /* skip zero term */ - n = __kernel_rem_pio2 (tx, y, e0, nx, 2, two_over_pi); - if (hx < 0) - { - y[0] = -y[0]; y[1] = -y[1]; return -n; - } - return n; -} -#endif diff --git a/sysdeps/ieee754/dbl-64/e_remainder.c b/sysdeps/ieee754/dbl-64/e_remainder.c deleted file mode 100644 index 1a2eeed2e1..0000000000 --- a/sysdeps/ieee754/dbl-64/e_remainder.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/**************************************************************************/ -/* MODULE_NAME urem.c */ -/* */ -/* FUNCTION: uremainder */ -/* */ -/* An ultimate remainder routine. Given two IEEE double machine numbers x */ -/* ,y it computes the correctly rounded (to nearest) value of remainder */ -/* of dividing x by y. */ -/* Assumption: Machine arithmetic operations are performed in */ -/* round to nearest mode of IEEE 754 standard. */ -/* */ -/* ************************************************************************/ - -#include "endian.h" -#include "mydefs.h" -#include "urem.h" -#include "MathLib.h" -#include -#include - -/**************************************************************************/ -/* An ultimate remainder routine. Given two IEEE double machine numbers x */ -/* ,y it computes the correctly rounded (to nearest) value of remainder */ -/**************************************************************************/ -double -__ieee754_remainder (double x, double y) -{ - double z, d, xx; - int4 kx, ky, n, nn, n1, m1, l; - mynumber u, t, w = { { 0, 0 } }, v = { { 0, 0 } }, ww = { { 0, 0 } }, r; - u.x = x; - t.x = y; - kx = u.i[HIGH_HALF] & 0x7fffffff; /* no sign for x*/ - t.i[HIGH_HALF] &= 0x7fffffff; /*no sign for y */ - ky = t.i[HIGH_HALF]; - /*------ |x| < 2^1023 and 2^-970 < |y| < 2^1024 ------------------*/ - if (kx < 0x7fe00000 && ky < 0x7ff00000 && ky >= 0x03500000) - { - SET_RESTORE_ROUND_NOEX (FE_TONEAREST); - if (kx + 0x00100000 < ky) - return x; - if ((kx - 0x01500000) < ky) - { - z = x / t.x; - v.i[HIGH_HALF] = t.i[HIGH_HALF]; - d = (z + big.x) - big.x; - xx = (x - d * v.x) - d * (t.x - v.x); - if (d - z != 0.5 && d - z != -0.5) - return (xx != 0) ? xx : ((x > 0) ? ZERO.x : nZERO.x); - else - { - if (fabs (xx) > 0.5 * t.x) - return (z > d) ? xx - t.x : xx + t.x; - else - return xx; - } - } /* (kx<(ky+0x01500000)) */ - else - { - r.x = 1.0 / t.x; - n = t.i[HIGH_HALF]; - nn = (n & 0x7ff00000) + 0x01400000; - w.i[HIGH_HALF] = n; - ww.x = t.x - w.x; - l = (kx - nn) & 0xfff00000; - n1 = ww.i[HIGH_HALF]; - m1 = r.i[HIGH_HALF]; - while (l > 0) - { - r.i[HIGH_HALF] = m1 - l; - z = u.x * r.x; - w.i[HIGH_HALF] = n + l; - ww.i[HIGH_HALF] = (n1) ? n1 + l : n1; - d = (z + big.x) - big.x; - u.x = (u.x - d * w.x) - d * ww.x; - l = (u.i[HIGH_HALF] & 0x7ff00000) - nn; - } - r.i[HIGH_HALF] = m1; - w.i[HIGH_HALF] = n; - ww.i[HIGH_HALF] = n1; - z = u.x * r.x; - d = (z + big.x) - big.x; - u.x = (u.x - d * w.x) - d * ww.x; - if (fabs (u.x) < 0.5 * t.x) - return (u.x != 0) ? u.x : ((x > 0) ? ZERO.x : nZERO.x); - else - if (fabs (u.x) > 0.5 * t.x) - return (d > z) ? u.x + t.x : u.x - t.x; - else - { - z = u.x / t.x; d = (z + big.x) - big.x; - return ((u.x - d * w.x) - d * ww.x); - } - } - } /* (kx<0x7fe00000&&ky<0x7ff00000&&ky>=0x03500000) */ - else - { - if (kx < 0x7fe00000 && ky < 0x7ff00000 && (ky > 0 || t.i[LOW_HALF] != 0)) - { - y = fabs (y) * t128.x; - z = __ieee754_remainder (x, y) * t128.x; - z = __ieee754_remainder (z, y) * tm128.x; - return z; - } - else - { - if ((kx & 0x7ff00000) == 0x7fe00000 && ky < 0x7ff00000 && - (ky > 0 || t.i[LOW_HALF] != 0)) - { - y = fabs (y); - z = 2.0 * __ieee754_remainder (0.5 * x, y); - d = fabs (z); - if (d <= fabs (d - y)) - return z; - else if (d == y) - return 0.0 * x; - else - return (z > 0) ? z - y : z + y; - } - else /* if x is too big */ - { - if (ky == 0 && t.i[LOW_HALF] == 0) /* y = 0 */ - return (x * y) / (x * y); - else if (kx >= 0x7ff00000 /* x not finite */ - || (ky > 0x7ff00000 /* y is NaN */ - || (ky == 0x7ff00000 && t.i[LOW_HALF] != 0))) - return (x * y) / (x * y); - else - return x; - } - } - } -} -strong_alias (__ieee754_remainder, __remainder_finite) diff --git a/sysdeps/ieee754/dbl-64/e_sinh.c b/sysdeps/ieee754/dbl-64/e_sinh.c deleted file mode 100644 index 8479bdd9b8..0000000000 --- a/sysdeps/ieee754/dbl-64/e_sinh.c +++ /dev/null @@ -1,90 +0,0 @@ -/* @(#)e_sinh.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: e_sinh.c,v 1.7 1995/05/10 20:46:13 jtc Exp $"; -#endif - -/* __ieee754_sinh(x) - * Method : - * mathematically sinh(x) if defined to be (exp(x)-exp(-x))/2 - * 1. Replace x by |x| (sinh(-x) = -sinh(x)). - * 2. - * E + E/(E+1) - * 0 <= x <= 22 : sinh(x) := --------------, E=expm1(x) - * 2 - * - * 22 <= x <= lnovft : sinh(x) := exp(x)/2 - * lnovft <= x <= ln2ovft: sinh(x) := exp(x/2)/2 * exp(x/2) - * ln2ovft < x : sinh(x) := x*shuge (overflow) - * - * Special cases: - * sinh(x) is |x| if x is +INF, -INF, or NaN. - * only sinh(0)=0 is exact for finite x. - */ - -#include -#include -#include - -static const double one = 1.0, shuge = 1.0e307; - -double -__ieee754_sinh (double x) -{ - double t, w, h; - int32_t ix, jx; - u_int32_t lx; - - /* High word of |x|. */ - GET_HIGH_WORD (jx, x); - ix = jx & 0x7fffffff; - - /* x is INF or NaN */ - if (__glibc_unlikely (ix >= 0x7ff00000)) - return x + x; - - h = 0.5; - if (jx < 0) - h = -h; - /* |x| in [0,22], return sign(x)*0.5*(E+E/(E+1))) */ - if (ix < 0x40360000) /* |x|<22 */ - { - if (__glibc_unlikely (ix < 0x3e300000)) { /* |x|<2**-28 */ - math_check_force_underflow (x); - if (shuge + x > one) - return x; - /* sinh(tiny) = tiny with inexact */ - } - t = __expm1 (fabs (x)); - if (ix < 0x3ff00000) - return h * (2.0 * t - t * t / (t + one)); - return h * (t + t / (t + one)); - } - - /* |x| in [22, log(maxdouble)] return 0.5*exp(|x|) */ - if (ix < 0x40862e42) - return h * __ieee754_exp (fabs (x)); - - /* |x| in [log(maxdouble), overflowthresold] */ - GET_LOW_WORD (lx, x); - if (ix < 0x408633ce || ((ix == 0x408633ce) && (lx <= (u_int32_t) 0x8fb9f87d))) - { - w = __ieee754_exp (0.5 * fabs (x)); - t = h * w; - return t * w; - } - - /* |x| > overflowthresold, sinh(x) overflow */ - return math_narrow_eval (x * shuge); -} -strong_alias (__ieee754_sinh, __sinh_finite) diff --git a/sysdeps/ieee754/dbl-64/e_sqrt.c b/sysdeps/ieee754/dbl-64/e_sqrt.c deleted file mode 100644 index 017d30416c..0000000000 --- a/sysdeps/ieee754/dbl-64/e_sqrt.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/*********************************************************************/ -/* MODULE_NAME: uroot.c */ -/* */ -/* FUNCTION: usqrt */ -/* */ -/* FILES NEEDED: dla.h endian.h mydefs.h */ -/* uroot.tbl */ -/* */ -/* An ultimate sqrt routine. Given an IEEE double machine number x */ -/* it computes the correctly rounded (to nearest) value of square */ -/* root of x. */ -/* Assumption: Machine arithmetic operations are performed in */ -/* round to nearest mode of IEEE 754 standard. */ -/* */ -/*********************************************************************/ - -#include "endian.h" -#include "mydefs.h" -#include -#include "MathLib.h" -#include "root.tbl" -#include - -/*********************************************************************/ -/* An ultimate sqrt routine. Given an IEEE double machine number x */ -/* it computes the correctly rounded (to nearest) value of square */ -/* root of x. */ -/*********************************************************************/ -double -__ieee754_sqrt (double x) -{ - static const double - rt0 = 9.99999999859990725855365213134618E-01, - rt1 = 4.99999999495955425917856814202739E-01, - rt2 = 3.75017500867345182581453026130850E-01, - rt3 = 3.12523626554518656309172508769531E-01; - static const double big = 134217728.0; - double y, t, del, res, res1, hy, z, zz, p, hx, tx, ty, s; - mynumber a, c = { { 0, 0 } }; - int4 k; - - a.x = x; - k = a.i[HIGH_HALF]; - a.i[HIGH_HALF] = (k & 0x001fffff) | 0x3fe00000; - t = inroot[(k & 0x001fffff) >> 14]; - s = a.x; - /*----------------- 2^-1022 <= | x |< 2^1024 -----------------*/ - if (k > 0x000fffff && k < 0x7ff00000) - { - int rm = __fegetround (); - fenv_t env; - libc_feholdexcept_setround (&env, FE_TONEAREST); - double ret; - y = 1.0 - t * (t * s); - t = t * (rt0 + y * (rt1 + y * (rt2 + y * rt3))); - c.i[HIGH_HALF] = 0x20000000 + ((k & 0x7fe00000) >> 1); - y = t * s; - hy = (y + big) - big; - del = 0.5 * t * ((s - hy * hy) - (y - hy) * (y + hy)); - res = y + del; - if (res == (res + 1.002 * ((y - res) + del))) - ret = res * c.x; - else - { - res1 = res + 1.5 * ((y - res) + del); - EMULV (res, res1, z, zz, p, hx, tx, hy, ty); /* (z+zz)=res*res1 */ - res = ((((z - s) + zz) < 0) ? max (res, res1) : - min (res, res1)); - ret = res * c.x; - } - math_force_eval (ret); - libc_fesetenv (&env); - double dret = x / ret; - if (dret != ret) - { - double force_inexact = 1.0 / 3.0; - math_force_eval (force_inexact); - /* The square root is inexact, ret is the round-to-nearest - value which may need adjusting for other rounding - modes. */ - switch (rm) - { -#ifdef FE_UPWARD - case FE_UPWARD: - if (dret > ret) - ret = (res + 0x1p-1022) * c.x; - break; -#endif - -#ifdef FE_DOWNWARD - case FE_DOWNWARD: -#endif -#ifdef FE_TOWARDZERO - case FE_TOWARDZERO: -#endif -#if defined FE_DOWNWARD || defined FE_TOWARDZERO - if (dret < ret) - ret = (res - 0x1p-1022) * c.x; - break; -#endif - - default: - break; - } - } - /* Otherwise (x / ret == ret), either the square root was exact or - the division was inexact. */ - return ret; - } - else - { - if ((k & 0x7ff00000) == 0x7ff00000) - return x * x + x; /* sqrt(NaN)=NaN, sqrt(+inf)=+inf, sqrt(-inf)=sNaN */ - if (x == 0) - return x; /* sqrt(+0)=+0, sqrt(-0)=-0 */ - if (k < 0) - return (x - x) / (x - x); /* sqrt(-ve)=sNaN */ - return 0x1p-256 * __ieee754_sqrt (x * 0x1p512); - } -} -strong_alias (__ieee754_sqrt, __sqrt_finite) diff --git a/sysdeps/ieee754/dbl-64/gamma_product.c b/sysdeps/ieee754/dbl-64/gamma_product.c deleted file mode 100644 index d946b3c845..0000000000 --- a/sysdeps/ieee754/dbl-64/gamma_product.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Compute a product of X, X+1, ..., with an error estimate. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Compute the product of X + X_EPS, X + X_EPS + 1, ..., X + X_EPS + N - - 1, in the form R * (1 + *EPS) where the return value R is an - approximation to the product and *EPS is set to indicate the - approximate error in the return value. X is such that all the - values X + 1, ..., X + N - 1 are exactly representable, and X_EPS / - X is small enough that factors quadratic in it can be - neglected. */ - -double -__gamma_product (double x, double x_eps, int n, double *eps) -{ - SET_RESTORE_ROUND (FE_TONEAREST); - double ret = x; - *eps = x_eps / x; - for (int i = 1; i < n; i++) - { - *eps += x_eps / (x + i); - double lo; - mul_split (&ret, &lo, ret, x + i); - *eps += lo / ret; - } - return ret; -} diff --git a/sysdeps/ieee754/dbl-64/gamma_productf.c b/sysdeps/ieee754/dbl-64/gamma_productf.c deleted file mode 100644 index 49c15b14b4..0000000000 --- a/sysdeps/ieee754/dbl-64/gamma_productf.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Compute a product of X, X+1, ..., with an error estimate. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Compute the product of X + X_EPS, X + X_EPS + 1, ..., X + X_EPS + N - - 1, in the form R * (1 + *EPS) where the return value R is an - approximation to the product and *EPS is set to indicate the - approximate error in the return value. X is such that all the - values X + 1, ..., X + N - 1 are exactly representable, and X_EPS / - X is small enough that factors quadratic in it can be - neglected. */ - -float -__gamma_productf (float x, float x_eps, int n, float *eps) -{ - double x_full = (double) x + (double) x_eps; - double ret = x_full; - for (int i = 1; i < n; i++) - ret *= x_full + i; - - float fret = math_narrow_eval ((float) ret); - *eps = (ret - fret) / fret; - - return fret; -} diff --git a/sysdeps/ieee754/dbl-64/halfulp.c b/sysdeps/ieee754/dbl-64/halfulp.c deleted file mode 100644 index d5f8a010e2..0000000000 --- a/sysdeps/ieee754/dbl-64/halfulp.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/************************************************************************/ -/* */ -/* MODULE_NAME:halfulp.c */ -/* */ -/* FUNCTIONS:halfulp */ -/* FILES NEEDED: mydefs.h dla.h endian.h */ -/* uroot.c */ -/* */ -/*Routine halfulp(double x, double y) computes x^y where result does */ -/*not need rounding. If the result is closer to 0 than can be */ -/*represented it returns 0. */ -/* In the following cases the function does not compute anything */ -/*and returns a negative number: */ -/*1. if the result needs rounding, */ -/*2. if y is outside the interval [0, 2^20-1], */ -/*3. if x can be represented by x=2**n for some integer n. */ -/************************************************************************/ - -#include "endian.h" -#include "mydefs.h" -#include -#include - -#ifndef SECTION -# define SECTION -#endif - -static const int4 tab54[32] = { - 262143, 11585, 1782, 511, 210, 107, 63, 42, - 30, 22, 17, 14, 12, 10, 9, 7, - 7, 6, 5, 5, 5, 4, 4, 4, - 3, 3, 3, 3, 3, 3, 3, 3 -}; - - -double -SECTION -__halfulp (double x, double y) -{ - mynumber v; - double z, u, uu; -#ifndef DLA_FMS - double j1, j2, j3, j4, j5; -#endif - int4 k, l, m, n; - if (y <= 0) /*if power is negative or zero */ - { - v.x = y; - if (v.i[LOW_HALF] != 0) - return -10.0; - v.x = x; - if (v.i[LOW_HALF] != 0) - return -10.0; - if ((v.i[HIGH_HALF] & 0x000fffff) != 0) - return -10; /* if x =2 ^ n */ - k = ((v.i[HIGH_HALF] & 0x7fffffff) >> 20) - 1023; /* find this n */ - z = (double) k; - return (z * y == -1075.0) ? 0 : -10.0; - } - /* if y > 0 */ - v.x = y; - if (v.i[LOW_HALF] != 0) - return -10.0; - - v.x = x; - /* case where x = 2**n for some integer n */ - if (((v.i[HIGH_HALF] & 0x000fffff) | v.i[LOW_HALF]) == 0) - { - k = (v.i[HIGH_HALF] >> 20) - 1023; - return (((double) k) * y == -1075.0) ? 0 : -10.0; - } - - v.x = y; - k = v.i[HIGH_HALF]; - m = k << 12; - l = 0; - while (m) - { - m = m << 1; l++; - } - n = (k & 0x000fffff) | 0x00100000; - n = n >> (20 - l); /* n is the odd integer of y */ - k = ((k >> 20) - 1023) - l; /* y = n*2**k */ - if (k > 5) - return -10.0; - if (k > 0) - for (; k > 0; k--) - n *= 2; - if (n > 34) - return -10.0; - k = -k; - if (k > 5) - return -10.0; - - /* now treat x */ - while (k > 0) - { - z = __ieee754_sqrt (x); - EMULV (z, z, u, uu, j1, j2, j3, j4, j5); - if (((u - x) + uu) != 0) - break; - x = z; - k--; - } - if (k) - return -10.0; - - /* it is impossible that n == 2, so the mantissa of x must be short */ - - v.x = x; - if (v.i[LOW_HALF]) - return -10.0; - k = v.i[HIGH_HALF]; - m = k << 12; - l = 0; - while (m) - { - m = m << 1; l++; - } - m = (k & 0x000fffff) | 0x00100000; - m = m >> (20 - l); /* m is the odd integer of x */ - - /* now check whether the length of m**n is at most 54 bits */ - - if (m > tab54[n - 3]) - return -10.0; - - /* yes, it is - now compute x**n by simple multiplications */ - - u = x; - for (k = 1; k < n; k++) - u = u * x; - return u; -} diff --git a/sysdeps/ieee754/dbl-64/k_cos.c b/sysdeps/ieee754/dbl-64/k_cos.c deleted file mode 100644 index cc5c205a5f..0000000000 --- a/sysdeps/ieee754/dbl-64/k_cos.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed anymore. */ diff --git a/sysdeps/ieee754/dbl-64/k_rem_pio2.c b/sysdeps/ieee754/dbl-64/k_rem_pio2.c deleted file mode 100644 index 2b5add6976..0000000000 --- a/sysdeps/ieee754/dbl-64/k_rem_pio2.c +++ /dev/null @@ -1,362 +0,0 @@ -/* @(#)k_rem_pio2.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: k_rem_pio2.c,v 1.7 1995/05/10 20:46:25 jtc Exp $"; -#endif - -/* - * __kernel_rem_pio2(x,y,e0,nx,prec,ipio2) - * double x[],y[]; int e0,nx,prec; int ipio2[]; - * - * __kernel_rem_pio2 return the last three digits of N with - * y = x - N*pi/2 - * so that |y| < pi/2. - * - * The method is to compute the integer (mod 8) and fraction parts of - * (2/pi)*x without doing the full multiplication. In general we - * skip the part of the product that are known to be a huge integer ( - * more accurately, = 0 mod 8 ). Thus the number of operations are - * independent of the exponent of the input. - * - * (2/pi) is represented by an array of 24-bit integers in ipio2[]. - * - * Input parameters: - * x[] The input value (must be positive) is broken into nx - * pieces of 24-bit integers in double precision format. - * x[i] will be the i-th 24 bit of x. The scaled exponent - * of x[0] is given in input parameter e0 (i.e., x[0]*2^e0 - * match x's up to 24 bits. - * - * Example of breaking a double positive z into x[0]+x[1]+x[2]: - * e0 = ilogb(z)-23 - * z = scalbn(z,-e0) - * for i = 0,1,2 - * x[i] = floor(z) - * z = (z-x[i])*2**24 - * - * - * y[] ouput result in an array of double precision numbers. - * The dimension of y[] is: - * 24-bit precision 1 - * 53-bit precision 2 - * 64-bit precision 2 - * 113-bit precision 3 - * The actual value is the sum of them. Thus for 113-bit - * precision, one may have to do something like: - * - * long double t,w,r_head, r_tail; - * t = (long double)y[2] + (long double)y[1]; - * w = (long double)y[0]; - * r_head = t+w; - * r_tail = w - (r_head - t); - * - * e0 The exponent of x[0] - * - * nx dimension of x[] - * - * prec an integer indicating the precision: - * 0 24 bits (single) - * 1 53 bits (double) - * 2 64 bits (extended) - * 3 113 bits (quad) - * - * ipio2[] - * integer array, contains the (24*i)-th to (24*i+23)-th - * bit of 2/pi after binary point. The corresponding - * floating value is - * - * ipio2[i] * 2^(-24(i+1)). - * - * External function: - * double scalbn(), floor(); - * - * - * Here is the description of some local variables: - * - * jk jk+1 is the initial number of terms of ipio2[] needed - * in the computation. The recommended value is 2,3,4, - * 6 for single, double, extended,and quad. - * - * jz local integer variable indicating the number of - * terms of ipio2[] used. - * - * jx nx - 1 - * - * jv index for pointing to the suitable ipio2[] for the - * computation. In general, we want - * ( 2^e0*x[0] * ipio2[jv-1]*2^(-24jv) )/8 - * is an integer. Thus - * e0-3-24*jv >= 0 or (e0-3)/24 >= jv - * Hence jv = max(0,(e0-3)/24). - * - * jp jp+1 is the number of terms in PIo2[] needed, jp = jk. - * - * q[] double array with integral value, representing the - * 24-bits chunk of the product of x and 2/pi. - * - * q0 the corresponding exponent of q[0]. Note that the - * exponent for q[i] would be q0-24*i. - * - * PIo2[] double precision array, obtained by cutting pi/2 - * into 24 bits chunks. - * - * f[] ipio2[] in floating point - * - * iq[] integer array by breaking up q[] in 24-bits chunk. - * - * fq[] final product of x*(2/pi) in fq[0],..,fq[jk] - * - * ih integer. If >0 it indicates q[] is >= 0.5, hence - * it also indicates the *sign* of the result. - * - */ - - -/* - * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough - * to produce the hexadecimal values shown. - */ - -#include -#include -#include - -static const int init_jk[] = {2,3,4,6}; /* initial value for jk */ - -static const double PIo2[] = { - 1.57079625129699707031e+00, /* 0x3FF921FB, 0x40000000 */ - 7.54978941586159635335e-08, /* 0x3E74442D, 0x00000000 */ - 5.39030252995776476554e-15, /* 0x3CF84698, 0x80000000 */ - 3.28200341580791294123e-22, /* 0x3B78CC51, 0x60000000 */ - 1.27065575308067607349e-29, /* 0x39F01B83, 0x80000000 */ - 1.22933308981111328932e-36, /* 0x387A2520, 0x40000000 */ - 2.73370053816464559624e-44, /* 0x36E38222, 0x80000000 */ - 2.16741683877804819444e-51, /* 0x3569F31D, 0x00000000 */ -}; - -static const double - zero = 0.0, - one = 1.0, - two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */ - twon24 = 5.96046447753906250000e-08; /* 0x3E700000, 0x00000000 */ - -int -__kernel_rem_pio2 (double *x, double *y, int e0, int nx, int prec, - const int32_t *ipio2) -{ - int32_t jz, jx, jv, jp, jk, carry, n, iq[20], i, j, k, m, q0, ih; - double z, fw, f[20], fq[20], q[20]; - - /* initialize jk*/ - jk = init_jk[prec]; - jp = jk; - - /* determine jx,jv,q0, note that 3>q0 */ - jx = nx - 1; - jv = (e0 - 3) / 24; if (jv < 0) - jv = 0; - q0 = e0 - 24 * (jv + 1); - - /* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */ - j = jv - jx; m = jx + jk; - for (i = 0; i <= m; i++, j++) - f[i] = (j < 0) ? zero : (double) ipio2[j]; - - /* compute q[0],q[1],...q[jk] */ - for (i = 0; i <= jk; i++) - { - for (j = 0, fw = 0.0; j <= jx; j++) - fw += x[j] * f[jx + i - j]; - q[i] = fw; - } - - jz = jk; -recompute: - /* distill q[] into iq[] reversingly */ - for (i = 0, j = jz, z = q[jz]; j > 0; i++, j--) - { - fw = (double) ((int32_t) (twon24 * z)); - iq[i] = (int32_t) (z - two24 * fw); - z = q[j - 1] + fw; - } - - /* compute n */ - z = __scalbn (z, q0); /* actual value of z */ - z -= 8.0 * __floor (z * 0.125); /* trim off integer >= 8 */ - n = (int32_t) z; - z -= (double) n; - ih = 0; - if (q0 > 0) /* need iq[jz-1] to determine n */ - { - i = (iq[jz - 1] >> (24 - q0)); n += i; - iq[jz - 1] -= i << (24 - q0); - ih = iq[jz - 1] >> (23 - q0); - } - else if (q0 == 0) - ih = iq[jz - 1] >> 23; - else if (z >= 0.5) - ih = 2; - - if (ih > 0) /* q > 0.5 */ - { - n += 1; carry = 0; - for (i = 0; i < jz; i++) /* compute 1-q */ - { - j = iq[i]; - if (carry == 0) - { - if (j != 0) - { - carry = 1; iq[i] = 0x1000000 - j; - } - } - else - iq[i] = 0xffffff - j; - } - if (q0 > 0) /* rare case: chance is 1 in 12 */ - { - switch (q0) - { - case 1: - iq[jz - 1] &= 0x7fffff; break; - case 2: - iq[jz - 1] &= 0x3fffff; break; - } - } - if (ih == 2) - { - z = one - z; - if (carry != 0) - z -= __scalbn (one, q0); - } - } - - /* check if recomputation is needed */ - if (z == zero) - { - j = 0; - for (i = jz - 1; i >= jk; i--) - j |= iq[i]; - if (j == 0) /* need recomputation */ - { - /* On s390x gcc 6.1 -O3 produces the warning "array subscript is below - array bounds [-Werror=array-bounds]". Only __ieee754_rem_pio2l - calls __kernel_rem_pio2 for normal numbers and |x| > pi/4 in case - of ldbl-96 and |x| > 3pi/4 in case of ldbl-128[ibm]. - Thus x can't be zero and ipio2 is not zero, too. Thus not all iq[] - values can't be zero. */ - DIAG_PUSH_NEEDS_COMMENT; - DIAG_IGNORE_NEEDS_COMMENT (6.1, "-Warray-bounds"); - for (k = 1; iq[jk - k] == 0; k++) - ; /* k = no. of terms needed */ - DIAG_POP_NEEDS_COMMENT; - - for (i = jz + 1; i <= jz + k; i++) /* add q[jz+1] to q[jz+k] */ - { - f[jx + i] = (double) ipio2[jv + i]; - for (j = 0, fw = 0.0; j <= jx; j++) - fw += x[j] * f[jx + i - j]; - q[i] = fw; - } - jz += k; - goto recompute; - } - } - - /* chop off zero terms */ - if (z == 0.0) - { - jz -= 1; q0 -= 24; - while (iq[jz] == 0) - { - jz--; q0 -= 24; - } - } - else /* break z into 24-bit if necessary */ - { - z = __scalbn (z, -q0); - if (z >= two24) - { - fw = (double) ((int32_t) (twon24 * z)); - iq[jz] = (int32_t) (z - two24 * fw); - jz += 1; q0 += 24; - iq[jz] = (int32_t) fw; - } - else - iq[jz] = (int32_t) z; - } - - /* convert integer "bit" chunk to floating-point value */ - fw = __scalbn (one, q0); - for (i = jz; i >= 0; i--) - { - q[i] = fw * (double) iq[i]; fw *= twon24; - } - - /* compute PIo2[0,...,jp]*q[jz,...,0] */ - for (i = jz; i >= 0; i--) - { - for (fw = 0.0, k = 0; k <= jp && k <= jz - i; k++) - fw += PIo2[k] * q[i + k]; - fq[jz - i] = fw; - } - - /* compress fq[] into y[] */ - switch (prec) - { - case 0: - fw = 0.0; - for (i = jz; i >= 0; i--) - fw += fq[i]; - y[0] = (ih == 0) ? fw : -fw; - break; - case 1: - case 2:; - double fv = 0.0; - for (i = jz; i >= 0; i--) - fv = math_narrow_eval (fv + fq[i]); - y[0] = (ih == 0) ? fv : -fv; - fv = math_narrow_eval (fq[0] - fv); - for (i = 1; i <= jz; i++) - fv = math_narrow_eval (fv + fq[i]); - y[1] = (ih == 0) ? fv : -fv; - break; - case 3: /* painful */ - for (i = jz; i > 0; i--) - { - double fv = math_narrow_eval (fq[i - 1] + fq[i]); - fq[i] += fq[i - 1] - fv; - fq[i - 1] = fv; - } - for (i = jz; i > 1; i--) - { - double fv = math_narrow_eval (fq[i - 1] + fq[i]); - fq[i] += fq[i - 1] - fv; - fq[i - 1] = fv; - } - for (fw = 0.0, i = jz; i >= 2; i--) - fw += fq[i]; - if (ih == 0) - { - y[0] = fq[0]; y[1] = fq[1]; y[2] = fw; - } - else - { - y[0] = -fq[0]; y[1] = -fq[1]; y[2] = -fw; - } - } - return n & 7; -} diff --git a/sysdeps/ieee754/dbl-64/k_sin.c b/sysdeps/ieee754/dbl-64/k_sin.c deleted file mode 100644 index cc5c205a5f..0000000000 --- a/sysdeps/ieee754/dbl-64/k_sin.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed anymore. */ diff --git a/sysdeps/ieee754/dbl-64/k_tan.c b/sysdeps/ieee754/dbl-64/k_tan.c deleted file mode 100644 index cc5c205a5f..0000000000 --- a/sysdeps/ieee754/dbl-64/k_tan.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed anymore. */ diff --git a/sysdeps/ieee754/dbl-64/lgamma_neg.c b/sysdeps/ieee754/dbl-64/lgamma_neg.c deleted file mode 100644 index ccde9a1fe5..0000000000 --- a/sysdeps/ieee754/dbl-64/lgamma_neg.c +++ /dev/null @@ -1,383 +0,0 @@ -/* lgamma expanding around zeros. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const double lgamma_zeros[][2] = - { - { -0x2.74ff92c01f0d8p+0, -0x2.abec9f315f1ap-56 }, - { -0x2.bf6821437b202p+0, 0x6.866a5b4b9be14p-56 }, - { -0x3.24c1b793cb35ep+0, -0xf.b8be699ad3d98p-56 }, - { -0x3.f48e2a8f85fcap+0, -0x1.70d4561291237p-56 }, - { -0x4.0a139e1665604p+0, 0xf.3c60f4f21e7fp-56 }, - { -0x4.fdd5de9bbabf4p+0, 0xa.ef2f55bf89678p-56 }, - { -0x5.021a95fc2db64p+0, -0x3.2a4c56e595394p-56 }, - { -0x5.ffa4bd647d034p+0, -0x1.7dd4ed62cbd32p-52 }, - { -0x6.005ac9625f234p+0, 0x4.9f83d2692e9c8p-56 }, - { -0x6.fff2fddae1bcp+0, 0xc.29d949a3dc03p-60 }, - { -0x7.000cff7b7f87cp+0, 0x1.20bb7d2324678p-52 }, - { -0x7.fffe5fe05673cp+0, -0x3.ca9e82b522b0cp-56 }, - { -0x8.0001a01459fc8p+0, -0x1.f60cb3cec1cedp-52 }, - { -0x8.ffffd1c425e8p+0, -0xf.fc864e9574928p-56 }, - { -0x9.00002e3bb47d8p+0, -0x6.d6d843fedc35p-56 }, - { -0x9.fffffb606bep+0, 0x2.32f9d51885afap-52 }, - { -0xa.0000049f93bb8p+0, -0x1.927b45d95e154p-52 }, - { -0xa.ffffff9466eap+0, 0xe.4c92532d5243p-56 }, - { -0xb.0000006b9915p+0, -0x3.15d965a6ffea4p-52 }, - { -0xb.fffffff708938p+0, -0x7.387de41acc3d4p-56 }, - { -0xc.00000008f76c8p+0, 0x8.cea983f0fdafp-56 }, - { -0xc.ffffffff4f6ep+0, 0x3.09e80685a0038p-52 }, - { -0xd.00000000b092p+0, -0x3.09c06683dd1bap-52 }, - { -0xd.fffffffff3638p+0, 0x3.a5461e7b5c1f6p-52 }, - { -0xe.000000000c9c8p+0, -0x3.a545e94e75ec6p-52 }, - { -0xe.ffffffffff29p+0, 0x3.f9f399fb10cfcp-52 }, - { -0xf.0000000000d7p+0, -0x3.f9f399bd0e42p-52 }, - { -0xf.fffffffffff28p+0, -0xc.060c6621f513p-56 }, - { -0x1.000000000000dp+4, -0x7.3f9f399da1424p-52 }, - { -0x1.0ffffffffffffp+4, -0x3.569c47e7a93e2p-52 }, - { -0x1.1000000000001p+4, 0x3.569c47e7a9778p-52 }, - { -0x1.2p+4, 0xb.413c31dcbecdp-56 }, - { -0x1.2p+4, -0xb.413c31dcbeca8p-56 }, - { -0x1.3p+4, 0x9.7a4da340a0ab8p-60 }, - { -0x1.3p+4, -0x9.7a4da340a0ab8p-60 }, - { -0x1.4p+4, 0x7.950ae90080894p-64 }, - { -0x1.4p+4, -0x7.950ae90080894p-64 }, - { -0x1.5p+4, 0x5.c6e3bdb73d5c8p-68 }, - { -0x1.5p+4, -0x5.c6e3bdb73d5c8p-68 }, - { -0x1.6p+4, 0x4.338e5b6dfe14cp-72 }, - { -0x1.6p+4, -0x4.338e5b6dfe14cp-72 }, - { -0x1.7p+4, 0x2.ec368262c7034p-76 }, - { -0x1.7p+4, -0x2.ec368262c7034p-76 }, - { -0x1.8p+4, 0x1.f2cf01972f578p-80 }, - { -0x1.8p+4, -0x1.f2cf01972f578p-80 }, - { -0x1.9p+4, 0x1.3f3ccdd165fa9p-84 }, - { -0x1.9p+4, -0x1.3f3ccdd165fa9p-84 }, - { -0x1.ap+4, 0xc.4742fe35272dp-92 }, - { -0x1.ap+4, -0xc.4742fe35272dp-92 }, - { -0x1.bp+4, 0x7.46ac70b733a8cp-96 }, - { -0x1.bp+4, -0x7.46ac70b733a8cp-96 }, - { -0x1.cp+4, 0x4.2862898d42174p-100 }, - }; - -static const double e_hi = 0x2.b7e151628aed2p+0, e_lo = 0xa.6abf7158809dp-56; - -/* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) in Stirling's - approximation to lgamma function. */ - -static const double lgamma_coeff[] = - { - 0x1.5555555555555p-4, - -0xb.60b60b60b60b8p-12, - 0x3.4034034034034p-12, - -0x2.7027027027028p-12, - 0x3.72a3c5631fe46p-12, - -0x7.daac36664f1f4p-12, - 0x1.a41a41a41a41ap-8, - -0x7.90a1b2c3d4e6p-8, - 0x2.dfd2c703c0dp-4, - -0x1.6476701181f3ap+0, - 0xd.672219167003p+0, - -0x9.cd9292e6660d8p+4, - }; - -#define NCOEFF (sizeof (lgamma_coeff) / sizeof (lgamma_coeff[0])) - -/* Polynomial approximations to (|gamma(x)|-1)(x-n)/(x-x0), where n is - the integer end-point of the half-integer interval containing x and - x0 is the zero of lgamma in that half-integer interval. Each - polynomial is expressed in terms of x-xm, where xm is the midpoint - of the interval for which the polynomial applies. */ - -static const double poly_coeff[] = - { - /* Interval [-2.125, -2] (polynomial degree 10). */ - -0x1.0b71c5c54d42fp+0, - -0xc.73a1dc05f3758p-4, - -0x1.ec84140851911p-4, - -0xe.37c9da23847e8p-4, - -0x1.03cd87cdc0ac6p-4, - -0xe.ae9aedce12eep-4, - 0x9.b11a1780cfd48p-8, - -0xe.f25fc460bdebp-4, - 0x2.6e984c61ca912p-4, - -0xf.83fea1c6d35p-4, - 0x4.760c8c8909758p-4, - /* Interval [-2.25, -2.125] (polynomial degree 11). */ - -0xf.2930890d7d678p-4, - -0xc.a5cfde054eaa8p-4, - 0x3.9c9e0fdebd99cp-4, - -0x1.02a5ad35619d9p+0, - 0x9.6e9b1167c164p-4, - -0x1.4d8332eba090ap+0, - 0x1.1c0c94b1b2b6p+0, - -0x1.c9a70d138c74ep+0, - 0x1.d7d9cf1d4c196p+0, - -0x2.91fbf4cd6abacp+0, - 0x2.f6751f74b8ff8p+0, - -0x3.e1bb7b09e3e76p+0, - /* Interval [-2.375, -2.25] (polynomial degree 12). */ - -0xd.7d28d505d618p-4, - -0xe.69649a3040958p-4, - 0xb.0d74a2827cd6p-4, - -0x1.924b09228a86ep+0, - 0x1.d49b12bcf6175p+0, - -0x3.0898bb530d314p+0, - 0x4.207a6be8fda4cp+0, - -0x6.39eef56d4e9p+0, - 0x8.e2e42acbccec8p+0, - -0xd.0d91c1e596a68p+0, - 0x1.2e20d7099c585p+4, - -0x1.c4eb6691b4ca9p+4, - 0x2.96a1a11fd85fep+4, - /* Interval [-2.5, -2.375] (polynomial degree 13). */ - -0xb.74ea1bcfff948p-4, - -0x1.2a82bd590c376p+0, - 0x1.88020f828b81p+0, - -0x3.32279f040d7aep+0, - 0x5.57ac8252ce868p+0, - -0x9.c2aedd093125p+0, - 0x1.12c132716e94cp+4, - -0x1.ea94dfa5c0a6dp+4, - 0x3.66b61abfe858cp+4, - -0x6.0cfceb62a26e4p+4, - 0xa.beeba09403bd8p+4, - -0x1.3188d9b1b288cp+8, - 0x2.37f774dd14c44p+8, - -0x3.fdf0a64cd7136p+8, - /* Interval [-2.625, -2.5] (polynomial degree 13). */ - -0x3.d10108c27ebbp-4, - 0x1.cd557caff7d2fp+0, - 0x3.819b4856d36cep+0, - 0x6.8505cbacfc42p+0, - 0xb.c1b2e6567a4dp+0, - 0x1.50a53a3ce6c73p+4, - 0x2.57adffbb1ec0cp+4, - 0x4.2b15549cf400cp+4, - 0x7.698cfd82b3e18p+4, - 0xd.2decde217755p+4, - 0x1.7699a624d07b9p+8, - 0x2.98ecf617abbfcp+8, - 0x4.d5244d44d60b4p+8, - 0x8.e962bf7395988p+8, - /* Interval [-2.75, -2.625] (polynomial degree 12). */ - -0x6.b5d252a56e8a8p-4, - 0x1.28d60383da3a6p+0, - 0x1.db6513ada89bep+0, - 0x2.e217118fa8c02p+0, - 0x4.450112c651348p+0, - 0x6.4af990f589b8cp+0, - 0x9.2db5963d7a238p+0, - 0xd.62c03647da19p+0, - 0x1.379f81f6416afp+4, - 0x1.c5618b4fdb96p+4, - 0x2.9342d0af2ac4ep+4, - 0x3.d9cdf56d2b186p+4, - 0x5.ab9f91d5a27a4p+4, - /* Interval [-2.875, -2.75] (polynomial degree 11). */ - -0x8.a41b1e4f36ff8p-4, - 0xc.da87d3b69dbe8p-4, - 0x1.1474ad5c36709p+0, - 0x1.761ecb90c8c5cp+0, - 0x1.d279bff588826p+0, - 0x2.4e5d003fb36a8p+0, - 0x2.d575575566842p+0, - 0x3.85152b0d17756p+0, - 0x4.5213d921ca13p+0, - 0x5.55da7dfcf69c4p+0, - 0x6.acef729b9404p+0, - 0x8.483cc21dd0668p+0, - /* Interval [-3, -2.875] (polynomial degree 11). */ - -0xa.046d667e468f8p-4, - 0x9.70b88dcc006cp-4, - 0xa.a8a39421c94dp-4, - 0xd.2f4d1363f98ep-4, - 0xd.ca9aa19975b7p-4, - 0xf.cf09c2f54404p-4, - 0x1.04b1365a9adfcp+0, - 0x1.22b54ef213798p+0, - 0x1.2c52c25206bf5p+0, - 0x1.4aa3d798aace4p+0, - 0x1.5c3f278b504e3p+0, - 0x1.7e08292cc347bp+0, - }; - -static const size_t poly_deg[] = - { - 10, - 11, - 12, - 13, - 13, - 12, - 11, - 11, - }; - -static const size_t poly_end[] = - { - 10, - 22, - 35, - 49, - 63, - 76, - 88, - 100, - }; - -/* Compute sin (pi * X) for -0.25 <= X <= 0.5. */ - -static double -lg_sinpi (double x) -{ - if (x <= 0.25) - return __sin (M_PI * x); - else - return __cos (M_PI * (0.5 - x)); -} - -/* Compute cos (pi * X) for -0.25 <= X <= 0.5. */ - -static double -lg_cospi (double x) -{ - if (x <= 0.25) - return __cos (M_PI * x); - else - return __sin (M_PI * (0.5 - x)); -} - -/* Compute cot (pi * X) for -0.25 <= X <= 0.5. */ - -static double -lg_cotpi (double x) -{ - return lg_cospi (x) / lg_sinpi (x); -} - -/* Compute lgamma of a negative argument -28 < X < -2, setting - *SIGNGAMP accordingly. */ - -double -__lgamma_neg (double x, int *signgamp) -{ - /* Determine the half-integer region X lies in, handle exact - integers and determine the sign of the result. */ - int i = __floor (-2 * x); - if ((i & 1) == 0 && i == -2 * x) - return 1.0 / 0.0; - double xn = ((i & 1) == 0 ? -i / 2 : (-i - 1) / 2); - i -= 4; - *signgamp = ((i & 2) == 0 ? -1 : 1); - - SET_RESTORE_ROUND (FE_TONEAREST); - - /* Expand around the zero X0 = X0_HI + X0_LO. */ - double x0_hi = lgamma_zeros[i][0], x0_lo = lgamma_zeros[i][1]; - double xdiff = x - x0_hi - x0_lo; - - /* For arguments in the range -3 to -2, use polynomial - approximations to an adjusted version of the gamma function. */ - if (i < 2) - { - int j = __floor (-8 * x) - 16; - double xm = (-33 - 2 * j) * 0.0625; - double x_adj = x - xm; - size_t deg = poly_deg[j]; - size_t end = poly_end[j]; - double g = poly_coeff[end]; - for (size_t j = 1; j <= deg; j++) - g = g * x_adj + poly_coeff[end - j]; - return __log1p (g * xdiff / (x - xn)); - } - - /* The result we want is log (sinpi (X0) / sinpi (X)) - + log (gamma (1 - X0) / gamma (1 - X)). */ - double x_idiff = fabs (xn - x), x0_idiff = fabs (xn - x0_hi - x0_lo); - double log_sinpi_ratio; - if (x0_idiff < x_idiff * 0.5) - /* Use log not log1p to avoid inaccuracy from log1p of arguments - close to -1. */ - log_sinpi_ratio = __ieee754_log (lg_sinpi (x0_idiff) - / lg_sinpi (x_idiff)); - else - { - /* Use log1p not log to avoid inaccuracy from log of arguments - close to 1. X0DIFF2 has positive sign if X0 is further from - XN than X is from XN, negative sign otherwise. */ - double x0diff2 = ((i & 1) == 0 ? xdiff : -xdiff) * 0.5; - double sx0d2 = lg_sinpi (x0diff2); - double cx0d2 = lg_cospi (x0diff2); - log_sinpi_ratio = __log1p (2 * sx0d2 - * (-sx0d2 + cx0d2 * lg_cotpi (x_idiff))); - } - - double log_gamma_ratio; - double y0 = math_narrow_eval (1 - x0_hi); - double y0_eps = -x0_hi + (1 - y0) - x0_lo; - double y = math_narrow_eval (1 - x); - double y_eps = -x + (1 - y); - /* We now wish to compute LOG_GAMMA_RATIO - = log (gamma (Y0 + Y0_EPS) / gamma (Y + Y_EPS)). XDIFF - accurately approximates the difference Y0 + Y0_EPS - Y - - Y_EPS. Use Stirling's approximation. First, we may need to - adjust into the range where Stirling's approximation is - sufficiently accurate. */ - double log_gamma_adj = 0; - if (i < 6) - { - int n_up = (7 - i) / 2; - double ny0, ny0_eps, ny, ny_eps; - ny0 = math_narrow_eval (y0 + n_up); - ny0_eps = y0 - (ny0 - n_up) + y0_eps; - y0 = ny0; - y0_eps = ny0_eps; - ny = math_narrow_eval (y + n_up); - ny_eps = y - (ny - n_up) + y_eps; - y = ny; - y_eps = ny_eps; - double prodm1 = __lgamma_product (xdiff, y - n_up, y_eps, n_up); - log_gamma_adj = -__log1p (prodm1); - } - double log_gamma_high - = (xdiff * __log1p ((y0 - e_hi - e_lo + y0_eps) / e_hi) - + (y - 0.5 + y_eps) * __log1p (xdiff / y) + log_gamma_adj); - /* Compute the sum of (B_2k / 2k(2k-1))(Y0^-(2k-1) - Y^-(2k-1)). */ - double y0r = 1 / y0, yr = 1 / y; - double y0r2 = y0r * y0r, yr2 = yr * yr; - double rdiff = -xdiff / (y * y0); - double bterm[NCOEFF]; - double dlast = rdiff, elast = rdiff * yr * (yr + y0r); - bterm[0] = dlast * lgamma_coeff[0]; - for (size_t j = 1; j < NCOEFF; j++) - { - double dnext = dlast * y0r2 + elast; - double enext = elast * yr2; - bterm[j] = dnext * lgamma_coeff[j]; - dlast = dnext; - elast = enext; - } - double log_gamma_low = 0; - for (size_t j = 0; j < NCOEFF; j++) - log_gamma_low += bterm[NCOEFF - 1 - j]; - log_gamma_ratio = log_gamma_high + log_gamma_low; - - return log_sinpi_ratio + log_gamma_ratio; -} diff --git a/sysdeps/ieee754/dbl-64/lgamma_product.c b/sysdeps/ieee754/dbl-64/lgamma_product.c deleted file mode 100644 index a894f488b0..0000000000 --- a/sysdeps/ieee754/dbl-64/lgamma_product.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Compute a product of 1 + (T/X), 1 + (T/(X+1)), .... - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Compute the product of 1 + (T / (X + X_EPS)), 1 + (T / (X + X_EPS + - 1)), ..., 1 + (T / (X + X_EPS + N - 1)), minus 1. X is such that - all the values X + 1, ..., X + N - 1 are exactly representable, and - X_EPS / X is small enough that factors quadratic in it can be - neglected. */ - -double -__lgamma_product (double t, double x, double x_eps, int n) -{ - double ret = 0, ret_eps = 0; - for (int i = 0; i < n; i++) - { - double xi = x + i; - double quot = t / xi; - double mhi, mlo; - mul_split (&mhi, &mlo, quot, xi); - double quot_lo = (t - mhi - mlo) / xi - t * x_eps / (xi * xi); - /* We want (1 + RET + RET_EPS) * (1 + QUOT + QUOT_LO) - 1. */ - double rhi, rlo; - mul_split (&rhi, &rlo, ret, quot); - double rpq = ret + quot; - double rpq_eps = (ret - rpq) + quot; - double nret = rpq + rhi; - double nret_eps = (rpq - nret) + rhi; - ret_eps += (rpq_eps + nret_eps + rlo + ret_eps * quot - + quot_lo + quot_lo * (ret + ret_eps)); - ret = nret; - } - return ret + ret_eps; -} diff --git a/sysdeps/ieee754/dbl-64/mpa-arch.h b/sysdeps/ieee754/dbl-64/mpa-arch.h deleted file mode 100644 index 4428ac1301..0000000000 --- a/sysdeps/ieee754/dbl-64/mpa-arch.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Overridable constants and operations. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#include - -typedef long mantissa_t; -typedef int64_t mantissa_store_t; - -#define TWOPOW(i) (1L << i) - -#define RADIX_EXP 24 -#define RADIX TWOPOW (RADIX_EXP) /* 2^24 */ - -/* Divide D by RADIX and put the remainder in R. D must be a non-negative - integral value. */ -#define DIV_RADIX(d, r) \ - ({ \ - r = d & (RADIX - 1); \ - d >>= RADIX_EXP; \ - }) - -/* Put the integer component of a double X in R and retain the fraction in - X. This is used in extracting mantissa digits for MP_NO by using the - integer portion of the current value of the number as the current mantissa - digit and then scaling by RADIX to get the next mantissa digit in the same - manner. */ -#define INTEGER_OF(x, i) \ - ({ \ - i = (mantissa_t) x; \ - x -= i; \ - }) - -/* Align IN down to F. The code assumes that F is a power of two. */ -#define ALIGN_DOWN_TO(in, f) ((in) & - (f)) diff --git a/sysdeps/ieee754/dbl-64/mpa.c b/sysdeps/ieee754/dbl-64/mpa.c deleted file mode 100644 index 3820335172..0000000000 --- a/sysdeps/ieee754/dbl-64/mpa.c +++ /dev/null @@ -1,906 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/************************************************************************/ -/* MODULE_NAME: mpa.c */ -/* */ -/* FUNCTIONS: */ -/* mcr */ -/* acr */ -/* cpy */ -/* norm */ -/* denorm */ -/* mp_dbl */ -/* dbl_mp */ -/* add_magnitudes */ -/* sub_magnitudes */ -/* add */ -/* sub */ -/* mul */ -/* inv */ -/* dvd */ -/* */ -/* Arithmetic functions for multiple precision numbers. */ -/* Relative errors are bounded */ -/************************************************************************/ - - -#include "endian.h" -#include "mpa.h" -#include -#include - -#ifndef SECTION -# define SECTION -#endif - -#ifndef NO__CONST -const mp_no __mpone = { 1, { 1.0, 1.0 } }; -const mp_no __mptwo = { 1, { 1.0, 2.0 } }; -#endif - -#ifndef NO___ACR -/* Compare mantissa of two multiple precision numbers regardless of the sign - and exponent of the numbers. */ -static int -mcr (const mp_no *x, const mp_no *y, int p) -{ - long i; - long p2 = p; - for (i = 1; i <= p2; i++) - { - if (X[i] == Y[i]) - continue; - else if (X[i] > Y[i]) - return 1; - else - return -1; - } - return 0; -} - -/* Compare the absolute values of two multiple precision numbers. */ -int -__acr (const mp_no *x, const mp_no *y, int p) -{ - long i; - - if (X[0] == 0) - { - if (Y[0] == 0) - i = 0; - else - i = -1; - } - else if (Y[0] == 0) - i = 1; - else - { - if (EX > EY) - i = 1; - else if (EX < EY) - i = -1; - else - i = mcr (x, y, p); - } - - return i; -} -#endif - -#ifndef NO___CPY -/* Copy multiple precision number X into Y. They could be the same - number. */ -void -__cpy (const mp_no *x, mp_no *y, int p) -{ - long i; - - EY = EX; - for (i = 0; i <= p; i++) - Y[i] = X[i]; -} -#endif - -#ifndef NO___MP_DBL -/* Convert a multiple precision number *X into a double precision - number *Y, normalized case (|x| >= 2**(-1022))). X has precision - P, which is positive. */ -static void -norm (const mp_no *x, double *y, int p) -{ -# define R RADIXI - long i; - double c; - mantissa_t a, u, v, z[5]; - if (p < 5) - { - if (p == 1) - c = X[1]; - else if (p == 2) - c = X[1] + R * X[2]; - else if (p == 3) - c = X[1] + R * (X[2] + R * X[3]); - else /* p == 4. */ - c = (X[1] + R * X[2]) + R * R * (X[3] + R * X[4]); - } - else - { - for (a = 1, z[1] = X[1]; z[1] < TWO23; ) - { - a *= 2; - z[1] *= 2; - } - - for (i = 2; i < 5; i++) - { - mantissa_store_t d, r; - d = X[i] * (mantissa_store_t) a; - DIV_RADIX (d, r); - z[i] = r; - z[i - 1] += d; - } - - u = ALIGN_DOWN_TO (z[3], TWO19); - v = z[3] - u; - - if (v == TWO18) - { - if (z[4] == 0) - { - for (i = 5; i <= p; i++) - { - if (X[i] == 0) - continue; - else - { - z[3] += 1; - break; - } - } - } - else - z[3] += 1; - } - - c = (z[1] + R * (z[2] + R * z[3])) / a; - } - - c *= X[0]; - - for (i = 1; i < EX; i++) - c *= RADIX; - for (i = 1; i > EX; i--) - c *= RADIXI; - - *y = c; -# undef R -} - -/* Convert a multiple precision number *X into a double precision - number *Y, Denormal case (|x| < 2**(-1022))). */ -static void -denorm (const mp_no *x, double *y, int p) -{ - long i, k; - long p2 = p; - double c; - mantissa_t u, z[5]; - -# define R RADIXI - if (EX < -44 || (EX == -44 && X[1] < TWO5)) - { - *y = 0; - return; - } - - if (p2 == 1) - { - if (EX == -42) - { - z[1] = X[1] + TWO10; - z[2] = 0; - z[3] = 0; - k = 3; - } - else if (EX == -43) - { - z[1] = TWO10; - z[2] = X[1]; - z[3] = 0; - k = 2; - } - else - { - z[1] = TWO10; - z[2] = 0; - z[3] = X[1]; - k = 1; - } - } - else if (p2 == 2) - { - if (EX == -42) - { - z[1] = X[1] + TWO10; - z[2] = X[2]; - z[3] = 0; - k = 3; - } - else if (EX == -43) - { - z[1] = TWO10; - z[2] = X[1]; - z[3] = X[2]; - k = 2; - } - else - { - z[1] = TWO10; - z[2] = 0; - z[3] = X[1]; - k = 1; - } - } - else - { - if (EX == -42) - { - z[1] = X[1] + TWO10; - z[2] = X[2]; - k = 3; - } - else if (EX == -43) - { - z[1] = TWO10; - z[2] = X[1]; - k = 2; - } - else - { - z[1] = TWO10; - z[2] = 0; - k = 1; - } - z[3] = X[k]; - } - - u = ALIGN_DOWN_TO (z[3], TWO5); - - if (u == z[3]) - { - for (i = k + 1; i <= p2; i++) - { - if (X[i] == 0) - continue; - else - { - z[3] += 1; - break; - } - } - } - - c = X[0] * ((z[1] + R * (z[2] + R * z[3])) - TWO10); - - *y = c * TWOM1032; -# undef R -} - -/* Convert multiple precision number *X into double precision number *Y. The - result is correctly rounded to the nearest/even. */ -void -__mp_dbl (const mp_no *x, double *y, int p) -{ - if (X[0] == 0) - { - *y = 0; - return; - } - - if (__glibc_likely (EX > -42 || (EX == -42 && X[1] >= TWO10))) - norm (x, y, p); - else - denorm (x, y, p); -} -#endif - -/* Get the multiple precision equivalent of X into *Y. If the precision is too - small, the result is truncated. */ -void -SECTION -__dbl_mp (double x, mp_no *y, int p) -{ - long i, n; - long p2 = p; - - /* Sign. */ - if (x == 0) - { - Y[0] = 0; - return; - } - else if (x > 0) - Y[0] = 1; - else - { - Y[0] = -1; - x = -x; - } - - /* Exponent. */ - for (EY = 1; x >= RADIX; EY += 1) - x *= RADIXI; - for (; x < 1; EY -= 1) - x *= RADIX; - - /* Digits. */ - n = MIN (p2, 4); - for (i = 1; i <= n; i++) - { - INTEGER_OF (x, Y[i]); - x *= RADIX; - } - for (; i <= p2; i++) - Y[i] = 0; -} - -/* Add magnitudes of *X and *Y assuming that abs (*X) >= abs (*Y) > 0. The - sign of the sum *Z is not changed. X and Y may overlap but not X and Z or - Y and Z. No guard digit is used. The result equals the exact sum, - truncated. */ -static void -SECTION -add_magnitudes (const mp_no *x, const mp_no *y, mp_no *z, int p) -{ - long i, j, k; - long p2 = p; - mantissa_t zk; - - EZ = EX; - - i = p2; - j = p2 + EY - EX; - k = p2 + 1; - - if (__glibc_unlikely (j < 1)) - { - __cpy (x, z, p); - return; - } - - zk = 0; - - for (; j > 0; i--, j--) - { - zk += X[i] + Y[j]; - if (zk >= RADIX) - { - Z[k--] = zk - RADIX; - zk = 1; - } - else - { - Z[k--] = zk; - zk = 0; - } - } - - for (; i > 0; i--) - { - zk += X[i]; - if (zk >= RADIX) - { - Z[k--] = zk - RADIX; - zk = 1; - } - else - { - Z[k--] = zk; - zk = 0; - } - } - - if (zk == 0) - { - for (i = 1; i <= p2; i++) - Z[i] = Z[i + 1]; - } - else - { - Z[1] = zk; - EZ += 1; - } -} - -/* Subtract the magnitudes of *X and *Y assuming that abs (*x) > abs (*y) > 0. - The sign of the difference *Z is not changed. X and Y may overlap but not X - and Z or Y and Z. One guard digit is used. The error is less than one - ULP. */ -static void -SECTION -sub_magnitudes (const mp_no *x, const mp_no *y, mp_no *z, int p) -{ - long i, j, k; - long p2 = p; - mantissa_t zk; - - EZ = EX; - i = p2; - j = p2 + EY - EX; - k = p2; - - /* Y is too small compared to X, copy X over to the result. */ - if (__glibc_unlikely (j < 1)) - { - __cpy (x, z, p); - return; - } - - /* The relevant least significant digit in Y is non-zero, so we factor it in - to enhance accuracy. */ - if (j < p2 && Y[j + 1] > 0) - { - Z[k + 1] = RADIX - Y[j + 1]; - zk = -1; - } - else - zk = Z[k + 1] = 0; - - /* Subtract and borrow. */ - for (; j > 0; i--, j--) - { - zk += (X[i] - Y[j]); - if (zk < 0) - { - Z[k--] = zk + RADIX; - zk = -1; - } - else - { - Z[k--] = zk; - zk = 0; - } - } - - /* We're done with digits from Y, so it's just digits in X. */ - for (; i > 0; i--) - { - zk += X[i]; - if (zk < 0) - { - Z[k--] = zk + RADIX; - zk = -1; - } - else - { - Z[k--] = zk; - zk = 0; - } - } - - /* Normalize. */ - for (i = 1; Z[i] == 0; i++) - ; - EZ = EZ - i + 1; - for (k = 1; i <= p2 + 1; ) - Z[k++] = Z[i++]; - for (; k <= p2; ) - Z[k++] = 0; -} - -/* Add *X and *Y and store the result in *Z. X and Y may overlap, but not X - and Z or Y and Z. One guard digit is used. The error is less than one - ULP. */ -void -SECTION -__add (const mp_no *x, const mp_no *y, mp_no *z, int p) -{ - int n; - - if (X[0] == 0) - { - __cpy (y, z, p); - return; - } - else if (Y[0] == 0) - { - __cpy (x, z, p); - return; - } - - if (X[0] == Y[0]) - { - if (__acr (x, y, p) > 0) - { - add_magnitudes (x, y, z, p); - Z[0] = X[0]; - } - else - { - add_magnitudes (y, x, z, p); - Z[0] = Y[0]; - } - } - else - { - if ((n = __acr (x, y, p)) == 1) - { - sub_magnitudes (x, y, z, p); - Z[0] = X[0]; - } - else if (n == -1) - { - sub_magnitudes (y, x, z, p); - Z[0] = Y[0]; - } - else - Z[0] = 0; - } -} - -/* Subtract *Y from *X and return the result in *Z. X and Y may overlap but - not X and Z or Y and Z. One guard digit is used. The error is less than - one ULP. */ -void -SECTION -__sub (const mp_no *x, const mp_no *y, mp_no *z, int p) -{ - int n; - - if (X[0] == 0) - { - __cpy (y, z, p); - Z[0] = -Z[0]; - return; - } - else if (Y[0] == 0) - { - __cpy (x, z, p); - return; - } - - if (X[0] != Y[0]) - { - if (__acr (x, y, p) > 0) - { - add_magnitudes (x, y, z, p); - Z[0] = X[0]; - } - else - { - add_magnitudes (y, x, z, p); - Z[0] = -Y[0]; - } - } - else - { - if ((n = __acr (x, y, p)) == 1) - { - sub_magnitudes (x, y, z, p); - Z[0] = X[0]; - } - else if (n == -1) - { - sub_magnitudes (y, x, z, p); - Z[0] = -Y[0]; - } - else - Z[0] = 0; - } -} - -#ifndef NO__MUL -/* Multiply *X and *Y and store result in *Z. X and Y may overlap but not X - and Z or Y and Z. For P in [1, 2, 3], the exact result is truncated to P - digits. In case P > 3 the error is bounded by 1.001 ULP. */ -void -SECTION -__mul (const mp_no *x, const mp_no *y, mp_no *z, int p) -{ - long i, j, k, ip, ip2; - long p2 = p; - mantissa_store_t zk; - const mp_no *a; - mantissa_store_t *diag; - - /* Is z=0? */ - if (__glibc_unlikely (X[0] * Y[0] == 0)) - { - Z[0] = 0; - return; - } - - /* We need not iterate through all X's and Y's since it's pointless to - multiply zeroes. Here, both are zero... */ - for (ip2 = p2; ip2 > 0; ip2--) - if (X[ip2] != 0 || Y[ip2] != 0) - break; - - a = X[ip2] != 0 ? y : x; - - /* ... and here, at least one of them is still zero. */ - for (ip = ip2; ip > 0; ip--) - if (a->d[ip] != 0) - break; - - /* The product looks like this for p = 3 (as an example): - - - a1 a2 a3 - x b1 b2 b3 - ----------------------------- - a1*b3 a2*b3 a3*b3 - a1*b2 a2*b2 a3*b2 - a1*b1 a2*b1 a3*b1 - - So our K needs to ideally be P*2, but we're limiting ourselves to P + 3 - for P >= 3. We compute the above digits in two parts; the last P-1 - digits and then the first P digits. The last P-1 digits are a sum of - products of the input digits from P to P-k where K is 0 for the least - significant digit and increases as we go towards the left. The product - term is of the form X[k]*X[P-k] as can be seen in the above example. - - The first P digits are also a sum of products with the same product term, - except that the sum is from 1 to k. This is also evident from the above - example. - - Another thing that becomes evident is that only the most significant - ip+ip2 digits of the result are non-zero, where ip and ip2 are the - 'internal precision' of the input numbers, i.e. digits after ip and ip2 - are all 0. */ - - k = (__glibc_unlikely (p2 < 3)) ? p2 + p2 : p2 + 3; - - while (k > ip + ip2 + 1) - Z[k--] = 0; - - zk = 0; - - /* Precompute sums of diagonal elements so that we can directly use them - later. See the next comment to know we why need them. */ - diag = alloca (k * sizeof (mantissa_store_t)); - mantissa_store_t d = 0; - for (i = 1; i <= ip; i++) - { - d += X[i] * (mantissa_store_t) Y[i]; - diag[i] = d; - } - while (i < k) - diag[i++] = d; - - while (k > p2) - { - long lim = k / 2; - - if (k % 2 == 0) - /* We want to add this only once, but since we subtract it in the sum - of products above, we add twice. */ - zk += 2 * X[lim] * (mantissa_store_t) Y[lim]; - - for (i = k - p2, j = p2; i < j; i++, j--) - zk += (X[i] + X[j]) * (mantissa_store_t) (Y[i] + Y[j]); - - zk -= diag[k - 1]; - - DIV_RADIX (zk, Z[k]); - k--; - } - - /* The real deal. Mantissa digit Z[k] is the sum of all X[i] * Y[j] where i - goes from 1 -> k - 1 and j goes the same range in reverse. To reduce the - number of multiplications, we halve the range and if k is an even number, - add the diagonal element X[k/2]Y[k/2]. Through the half range, we compute - X[i] * Y[j] as (X[i] + X[j]) * (Y[i] + Y[j]) - X[i] * Y[i] - X[j] * Y[j]. - - This reduction tells us that we're summing two things, the first term - through the half range and the negative of the sum of the product of all - terms of X and Y in the full range. i.e. - - SUM(X[i] * Y[i]) for k terms. This is precalculated above for each k in - a single loop so that it completes in O(n) time and can hence be directly - used in the loop below. */ - while (k > 1) - { - long lim = k / 2; - - if (k % 2 == 0) - /* We want to add this only once, but since we subtract it in the sum - of products above, we add twice. */ - zk += 2 * X[lim] * (mantissa_store_t) Y[lim]; - - for (i = 1, j = k - 1; i < j; i++, j--) - zk += (X[i] + X[j]) * (mantissa_store_t) (Y[i] + Y[j]); - - zk -= diag[k - 1]; - - DIV_RADIX (zk, Z[k]); - k--; - } - Z[k] = zk; - - /* Get the exponent sum into an intermediate variable. This is a subtle - optimization, where given enough registers, all operations on the exponent - happen in registers and the result is written out only once into EZ. */ - int e = EX + EY; - - /* Is there a carry beyond the most significant digit? */ - if (__glibc_unlikely (Z[1] == 0)) - { - for (i = 1; i <= p2; i++) - Z[i] = Z[i + 1]; - e--; - } - - EZ = e; - Z[0] = X[0] * Y[0]; -} -#endif - -#ifndef NO__SQR -/* Square *X and store result in *Y. X and Y may not overlap. For P in - [1, 2, 3], the exact result is truncated to P digits. In case P > 3 the - error is bounded by 1.001 ULP. This is a faster special case of - multiplication. */ -void -SECTION -__sqr (const mp_no *x, mp_no *y, int p) -{ - long i, j, k, ip; - mantissa_store_t yk; - - /* Is z=0? */ - if (__glibc_unlikely (X[0] == 0)) - { - Y[0] = 0; - return; - } - - /* We need not iterate through all X's since it's pointless to - multiply zeroes. */ - for (ip = p; ip > 0; ip--) - if (X[ip] != 0) - break; - - k = (__glibc_unlikely (p < 3)) ? p + p : p + 3; - - while (k > 2 * ip + 1) - Y[k--] = 0; - - yk = 0; - - while (k > p) - { - mantissa_store_t yk2 = 0; - long lim = k / 2; - - if (k % 2 == 0) - yk += X[lim] * (mantissa_store_t) X[lim]; - - /* In __mul, this loop (and the one within the next while loop) run - between a range to calculate the mantissa as follows: - - Z[k] = X[k] * Y[n] + X[k+1] * Y[n-1] ... + X[n-1] * Y[k+1] - + X[n] * Y[k] - - For X == Y, we can get away with summing halfway and doubling the - result. For cases where the range size is even, the mid-point needs - to be added separately (above). */ - for (i = k - p, j = p; i < j; i++, j--) - yk2 += X[i] * (mantissa_store_t) X[j]; - - yk += 2 * yk2; - - DIV_RADIX (yk, Y[k]); - k--; - } - - while (k > 1) - { - mantissa_store_t yk2 = 0; - long lim = k / 2; - - if (k % 2 == 0) - yk += X[lim] * (mantissa_store_t) X[lim]; - - /* Likewise for this loop. */ - for (i = 1, j = k - 1; i < j; i++, j--) - yk2 += X[i] * (mantissa_store_t) X[j]; - - yk += 2 * yk2; - - DIV_RADIX (yk, Y[k]); - k--; - } - Y[k] = yk; - - /* Squares are always positive. */ - Y[0] = 1; - - /* Get the exponent sum into an intermediate variable. This is a subtle - optimization, where given enough registers, all operations on the exponent - happen in registers and the result is written out only once into EZ. */ - int e = EX * 2; - - /* Is there a carry beyond the most significant digit? */ - if (__glibc_unlikely (Y[1] == 0)) - { - for (i = 1; i <= p; i++) - Y[i] = Y[i + 1]; - e--; - } - - EY = e; -} -#endif - -/* Invert *X and store in *Y. Relative error bound: - - For P = 2: 1.001 * R ^ (1 - P) - - For P = 3: 1.063 * R ^ (1 - P) - - For P > 3: 2.001 * R ^ (1 - P) - - *X = 0 is not permissible. */ -static void -SECTION -__inv (const mp_no *x, mp_no *y, int p) -{ - long i; - double t; - mp_no z, w; - static const int np1[] = - { 0, 0, 0, 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 - }; - - __cpy (x, &z, p); - z.e = 0; - __mp_dbl (&z, &t, p); - t = 1 / t; - __dbl_mp (t, y, p); - EY -= EX; - - for (i = 0; i < np1[p]; i++) - { - __cpy (y, &w, p); - __mul (x, &w, y, p); - __sub (&__mptwo, y, &z, p); - __mul (&w, &z, y, p); - } -} - -/* Divide *X by *Y and store result in *Z. X and Y may overlap but not X and Z - or Y and Z. Relative error bound: - - For P = 2: 2.001 * R ^ (1 - P) - - For P = 3: 2.063 * R ^ (1 - P) - - For P > 3: 3.001 * R ^ (1 - P) - - *X = 0 is not permissible. */ -void -SECTION -__dvd (const mp_no *x, const mp_no *y, mp_no *z, int p) -{ - mp_no w; - - if (X[0] == 0) - Z[0] = 0; - else - { - __inv (y, &w, p); - __mul (x, &w, z, p); - } -} diff --git a/sysdeps/ieee754/dbl-64/mpa.h b/sysdeps/ieee754/dbl-64/mpa.h deleted file mode 100644 index a665e6b8f7..0000000000 --- a/sysdeps/ieee754/dbl-64/mpa.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/************************************************************************/ -/* MODULE_NAME: mpa.h */ -/* */ -/* FUNCTIONS: */ -/* mcr */ -/* acr */ -/* cpy */ -/* mp_dbl */ -/* dbl_mp */ -/* add */ -/* sub */ -/* mul */ -/* dvd */ -/* */ -/* Arithmetic functions for multiple precision numbers. */ -/* Common types and definition */ -/************************************************************************/ - -#include - -/* The mp_no structure holds the details of a multi-precision floating point - number. - - - The radix of the number (R) is 2 ^ 24. - - - E: The exponent of the number. - - - D[0]: The sign (-1, 1) or 0 if the value is 0. In the latter case, the - values of the remaining members of the structure are ignored. - - - D[1] - D[p]: The mantissa of the number where: - - 0 <= D[i] < R and - P is the precision of the number and 1 <= p <= 32 - - D[p+1] ... D[39] have no significance. - - - The value of the number is: - - D[1] * R ^ (E - 1) + D[2] * R ^ (E - 2) ... D[p] * R ^ (E - p) - - */ -typedef struct -{ - int e; - mantissa_t d[40]; -} mp_no; - -typedef union -{ - int i[2]; - double d; -} number; - -extern const mp_no __mpone; -extern const mp_no __mptwo; - -#define X x->d -#define Y y->d -#define Z z->d -#define EX x->e -#define EY y->e -#define EZ z->e - -#ifndef RADIXI -# define RADIXI 0x1.0p-24 /* 2^-24 */ -#endif - -#ifndef TWO52 -# define TWO52 0x1.0p52 /* 2^52 */ -#endif - -#define TWO5 TWOPOW (5) /* 2^5 */ -#define TWO8 TWOPOW (8) /* 2^52 */ -#define TWO10 TWOPOW (10) /* 2^10 */ -#define TWO18 TWOPOW (18) /* 2^18 */ -#define TWO19 TWOPOW (19) /* 2^19 */ -#define TWO23 TWOPOW (23) /* 2^23 */ - -#define HALFRAD TWO23 - -#define TWO57 0x1.0p57 /* 2^57 */ -#define TWO71 0x1.0p71 /* 2^71 */ -#define TWOM1032 0x1.0p-1032 /* 2^-1032 */ -#define TWOM1022 0x1.0p-1022 /* 2^-1022 */ - -#define HALF 0x1.0p-1 /* 1/2 */ -#define MHALF -0x1.0p-1 /* -1/2 */ - -int __acr (const mp_no *, const mp_no *, int); -void __cpy (const mp_no *, mp_no *, int); -void __mp_dbl (const mp_no *, double *, int); -void __dbl_mp (double, mp_no *, int); -void __add (const mp_no *, const mp_no *, mp_no *, int); -void __sub (const mp_no *, const mp_no *, mp_no *, int); -void __mul (const mp_no *, const mp_no *, mp_no *, int); -void __sqr (const mp_no *, mp_no *, int); -void __dvd (const mp_no *, const mp_no *, mp_no *, int); - -extern void __mpatan (mp_no *, mp_no *, int); -extern void __mpatan2 (mp_no *, mp_no *, mp_no *, int); -extern void __mpsqrt (mp_no *, mp_no *, int); -extern void __mpexp (mp_no *, mp_no *, int); -extern void __c32 (mp_no *, mp_no *, mp_no *, int); -extern int __mpranred (double, mp_no *, int); - -/* Given a power POW, build a multiprecision number 2^POW. */ -static inline void -__pow_mp (int pow, mp_no *y, int p) -{ - int i, rem; - - /* The exponent is E such that E is a factor of 2^24. The remainder (of the - form 2^x) goes entirely into the first digit of the mantissa as it is - always less than 2^24. */ - EY = pow / 24; - rem = pow - EY * 24; - EY++; - - /* If the remainder is negative, it means that POW was negative since - |EY * 24| <= |pow|. Adjust so that REM is positive and still less than - 24 because of which, the mantissa digit is less than 2^24. */ - if (rem < 0) - { - EY--; - rem += 24; - } - /* The sign of any 2^x is always positive. */ - Y[0] = 1; - Y[1] = 1 << rem; - - /* Everything else is 0. */ - for (i = 2; i <= p; i++) - Y[i] = 0; -} diff --git a/sysdeps/ieee754/dbl-64/mpatan.c b/sysdeps/ieee754/dbl-64/mpatan.c deleted file mode 100644 index b84fbc5e41..0000000000 --- a/sysdeps/ieee754/dbl-64/mpatan.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/******************************************************************/ -/* */ -/* MODULE_NAME:mpatan.c */ -/* */ -/* FUNCTIONS:mpatan */ -/* */ -/* FILES NEEDED: mpa.h endian.h mpatan.h */ -/* mpa.c */ -/* */ -/* Multi-Precision Atan function subroutine, for precision p >= 4.*/ -/* The relative error of the result is bounded by 34.32*r**(1-p), */ -/* where r=2**24. */ -/******************************************************************/ - -#include "endian.h" -#include "mpa.h" -#include - -#ifndef SECTION -# define SECTION -#endif - -#include "mpatan.h" - -void -SECTION -__mpatan (mp_no *x, mp_no *y, int p) -{ - int i, m, n; - double dx; - mp_no mptwoim1 = - { - 0, - { - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 - } - }; - - mp_no mps, mpsm, mpt, mpt1, mpt2, mpt3; - - /* Choose m and initiate mptwoim1. */ - if (EX > 0) - m = 7; - else if (EX < 0) - m = 0; - else - { - __mp_dbl (x, &dx, p); - dx = fabs (dx); - for (m = 6; m > 0; m--) - { - if (dx > __atan_xm[m].d) - break; - } - } - mptwoim1.e = 1; - mptwoim1.d[0] = 1; - - /* Reduce x m times. */ - __sqr (x, &mpsm, p); - if (m == 0) - __cpy (x, &mps, p); - else - { - for (i = 0; i < m; i++) - { - __add (&__mpone, &mpsm, &mpt1, p); - __mpsqrt (&mpt1, &mpt2, p); - __add (&mpt2, &mpt2, &mpt1, p); - __add (&__mptwo, &mpsm, &mpt2, p); - __add (&mpt1, &mpt2, &mpt3, p); - __dvd (&mpsm, &mpt3, &mpt1, p); - __cpy (&mpt1, &mpsm, p); - } - __mpsqrt (&mpsm, &mps, p); - mps.d[0] = X[0]; - } - - /* Evaluate a truncated power series for Atan(s). */ - n = __atan_np[p]; - mptwoim1.d[1] = __atan_twonm1[p].d; - __dvd (&mpsm, &mptwoim1, &mpt, p); - for (i = n - 1; i > 1; i--) - { - mptwoim1.d[1] -= 2; - __dvd (&mpsm, &mptwoim1, &mpt1, p); - __mul (&mpsm, &mpt, &mpt2, p); - __sub (&mpt1, &mpt2, &mpt, p); - } - __mul (&mps, &mpt, &mpt1, p); - __sub (&mps, &mpt1, &mpt, p); - - /* Compute Atan(x). */ - mptwoim1.d[1] = 1 << m; - __mul (&mptwoim1, &mpt, y, p); -} diff --git a/sysdeps/ieee754/dbl-64/mpatan.h b/sysdeps/ieee754/dbl-64/mpatan.h deleted file mode 100644 index 65c856be17..0000000000 --- a/sysdeps/ieee754/dbl-64/mpatan.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/******************************************************************/ -/* */ -/* MODULE_NAME:mpatan.h */ -/* */ -/* common data and variables prototype and definition */ -/******************************************************************/ - -#ifndef MPATAN_H -#define MPATAN_H - -extern const number __atan_xm[8] attribute_hidden; -extern const number __atan_twonm1[33] attribute_hidden; -extern const number __atan_twom[8] attribute_hidden; -extern const int __atan_np[33] attribute_hidden; - - -#ifndef AVOID_MPATAN_H -#ifdef BIG_ENDI - const number - __atan_xm[8] = { /* x[m] */ -/**/ {{0x00000000, 0x00000000} }, /* 0.0 */ -/**/ {{0x3f8930be, 0x00000000} }, /* 0.0123 */ -/**/ {{0x3f991687, 0x00000000} }, /* 0.0245 */ -/**/ {{0x3fa923a2, 0x00000000} }, /* 0.0491 */ -/**/ {{0x3fb930be, 0x00000000} }, /* 0.0984 */ -/**/ {{0x3fc95810, 0x00000000} }, /* 0.198 */ -/**/ {{0x3fda7ef9, 0x00000000} }, /* 0.414 */ -/**/ {{0x3ff00000, 0x00000000} }, /* 1.0 */ - }; - const number - __atan_twonm1[33] = { /* 2n-1 */ -/**/ {{0x00000000, 0x00000000} }, /* 0 */ -/**/ {{0x00000000, 0x00000000} }, /* 0 */ -/**/ {{0x00000000, 0x00000000} }, /* 0 */ -/**/ {{0x00000000, 0x00000000} }, /* 0 */ -/**/ {{0x40260000, 0x00000000} }, /* 11 */ -/**/ {{0x402e0000, 0x00000000} }, /* 15 */ -/**/ {{0x40330000, 0x00000000} }, /* 19 */ -/**/ {{0x40350000, 0x00000000} }, /* 21 */ -/**/ {{0x40390000, 0x00000000} }, /* 25 */ -/**/ {{0x403d0000, 0x00000000} }, /* 29 */ -/**/ {{0x40408000, 0x00000000} }, /* 33 */ -/**/ {{0x40428000, 0x00000000} }, /* 37 */ -/**/ {{0x40448000, 0x00000000} }, /* 41 */ -/**/ {{0x40468000, 0x00000000} }, /* 45 */ -/**/ {{0x40488000, 0x00000000} }, /* 49 */ -/**/ {{0x404a8000, 0x00000000} }, /* 53 */ -/**/ {{0x404b8000, 0x00000000} }, /* 55 */ -/**/ {{0x404d8000, 0x00000000} }, /* 59 */ -/**/ {{0x404f8000, 0x00000000} }, /* 63 */ -/**/ {{0x4050c000, 0x00000000} }, /* 67 */ -/**/ {{0x4051c000, 0x00000000} }, /* 71 */ -/**/ {{0x4052c000, 0x00000000} }, /* 75 */ -/**/ {{0x4053c000, 0x00000000} }, /* 79 */ -/**/ {{0x4054c000, 0x00000000} }, /* 83 */ -/**/ {{0x40554000, 0x00000000} }, /* 85 */ -/**/ {{0x40564000, 0x00000000} }, /* 89 */ -/**/ {{0x40574000, 0x00000000} }, /* 93 */ -/**/ {{0x40584000, 0x00000000} }, /* 97 */ -/**/ {{0x40594000, 0x00000000} }, /* 101 */ -/**/ {{0x405a4000, 0x00000000} }, /* 105 */ -/**/ {{0x405b4000, 0x00000000} }, /* 109 */ -/**/ {{0x405c4000, 0x00000000} }, /* 113 */ -/**/ {{0x405d4000, 0x00000000} }, /* 117 */ - }; - -#else -#ifdef LITTLE_ENDI - - const number - __atan_xm[8] = { /* x[m] */ -/**/ {{0x00000000, 0x00000000} }, /* 0.0 */ -/**/ {{0x00000000, 0x3f8930be} }, /* 0.0123 */ -/**/ {{0x00000000, 0x3f991687} }, /* 0.0245 */ -/**/ {{0x00000000, 0x3fa923a2} }, /* 0.0491 */ -/**/ {{0x00000000, 0x3fb930be} }, /* 0.0984 */ -/**/ {{0x00000000, 0x3fc95810} }, /* 0.198 */ -/**/ {{0x00000000, 0x3fda7ef9} }, /* 0.414 */ -/**/ {{0x00000000, 0x3ff00000} }, /* 1.0 */ - }; - const number -__atan_twonm1[33] = { /* 2n-1 */ -/**/ {{0x00000000, 0x00000000} }, /* 0 */ -/**/ {{0x00000000, 0x00000000} }, /* 0 */ -/**/ {{0x00000000, 0x00000000} }, /* 0 */ -/**/ {{0x00000000, 0x00000000} }, /* 0 */ -/**/ {{0x00000000, 0x40260000} }, /* 11 */ -/**/ {{0x00000000, 0x402e0000} }, /* 15 */ -/**/ {{0x00000000, 0x40330000} }, /* 19 */ -/**/ {{0x00000000, 0x40350000} }, /* 21 */ -/**/ {{0x00000000, 0x40390000} }, /* 25 */ -/**/ {{0x00000000, 0x403d0000} }, /* 29 */ -/**/ {{0x00000000, 0x40408000} }, /* 33 */ -/**/ {{0x00000000, 0x40428000} }, /* 37 */ -/**/ {{0x00000000, 0x40448000} }, /* 41 */ -/**/ {{0x00000000, 0x40468000} }, /* 45 */ -/**/ {{0x00000000, 0x40488000} }, /* 49 */ -/**/ {{0x00000000, 0x404a8000} }, /* 53 */ -/**/ {{0x00000000, 0x404b8000} }, /* 55 */ -/**/ {{0x00000000, 0x404d8000} }, /* 59 */ -/**/ {{0x00000000, 0x404f8000} }, /* 63 */ -/**/ {{0x00000000, 0x4050c000} }, /* 67 */ -/**/ {{0x00000000, 0x4051c000} }, /* 71 */ -/**/ {{0x00000000, 0x4052c000} }, /* 75 */ -/**/ {{0x00000000, 0x4053c000} }, /* 79 */ -/**/ {{0x00000000, 0x4054c000} }, /* 83 */ -/**/ {{0x00000000, 0x40554000} }, /* 85 */ -/**/ {{0x00000000, 0x40564000} }, /* 89 */ -/**/ {{0x00000000, 0x40574000} }, /* 93 */ -/**/ {{0x00000000, 0x40584000} }, /* 97 */ -/**/ {{0x00000000, 0x40594000} }, /* 101 */ -/**/ {{0x00000000, 0x405a4000} }, /* 105 */ -/**/ {{0x00000000, 0x405b4000} }, /* 109 */ -/**/ {{0x00000000, 0x405c4000} }, /* 113 */ -/**/ {{0x00000000, 0x405d4000} }, /* 117 */ - }; - -#endif -#endif - - const int - __atan_np[33] = { 0, 0, 0, 0, 6, 8,10,11,13,15,17,19,21,23,25,27,28, - 30,32,34,36,38,40,42,43,45,47,49,51,53,55,57,59}; - -#endif -#endif diff --git a/sysdeps/ieee754/dbl-64/mpatan2.c b/sysdeps/ieee754/dbl-64/mpatan2.c deleted file mode 100644 index 94e4a66148..0000000000 --- a/sysdeps/ieee754/dbl-64/mpatan2.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/******************************************************************/ -/* MODULE_NAME: mpatan2.c */ -/* */ -/* FUNCTIONS:mpatan2 */ -/* */ -/* FILES NEEDED: mpa.h */ -/* mpa.c mpatan.c mpsqrt.c */ -/* */ -/* Multi-Precision Atan2(y,x) function subroutine, */ -/* for precision p >= 4. */ -/* y=0 is not permitted if x<=0. No error messages are given. */ -/* The relative error of the result is bounded by 44.84*r**(1-p) */ -/* if x <= 0, y != 0 and by 37.33*r**(1-p) if x>0. here r=2**24. */ -/* */ -/******************************************************************/ - -#include "mpa.h" - -#ifndef SECTION -# define SECTION -#endif - -/* Multi-Precision Atan2 (y, x) function subroutine, for p >= 4. - y = 0 is not permitted if x <= 0. No error messages are given. */ -void -SECTION -__mpatan2 (mp_no *y, mp_no *x, mp_no *z, int p) -{ - mp_no mpt1, mpt2, mpt3; - - if (X[0] <= 0) - { - __dvd (x, y, &mpt1, p); - __mul (&mpt1, &mpt1, &mpt2, p); - if (mpt1.d[0] != 0) - mpt1.d[0] = 1; - __add (&mpt2, &__mpone, &mpt3, p); - __mpsqrt (&mpt3, &mpt2, p); - __add (&mpt1, &mpt2, &mpt3, p); - mpt3.d[0] = Y[0]; - __mpatan (&mpt3, &mpt1, p); - __add (&mpt1, &mpt1, z, p); - } - else - { - __dvd (y, x, &mpt1, p); - __mpatan (&mpt1, z, p); - } -} diff --git a/sysdeps/ieee754/dbl-64/mpexp.c b/sysdeps/ieee754/dbl-64/mpexp.c deleted file mode 100644 index e08f424133..0000000000 --- a/sysdeps/ieee754/dbl-64/mpexp.c +++ /dev/null @@ -1,163 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/*************************************************************************/ -/* MODULE_NAME:mpexp.c */ -/* */ -/* FUNCTIONS: mpexp */ -/* */ -/* FILES NEEDED: mpa.h endian.h mpexp.h */ -/* mpa.c */ -/* */ -/* Multi-Precision exponential function subroutine */ -/* ( for p >= 4, 2**(-55) <= abs(x) <= 1024 ). */ -/*************************************************************************/ - -#include "endian.h" -#include "mpa.h" -#include - -#ifndef SECTION -# define SECTION -#endif - -/* Multi-Precision exponential function subroutine (for p >= 4, - 2**(-55) <= abs(x) <= 1024). */ -void -SECTION -__mpexp (mp_no *x, mp_no *y, int p) -{ - int i, j, k, m, m1, m2, n; - mantissa_t b; - static const int np[33] = - { - 0, 0, 0, 0, 3, 3, 4, 4, 5, 4, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8 - }; - - static const int m1p[33] = - { - 0, 0, 0, 0, - 17, 23, 23, 28, - 27, 38, 42, 39, - 43, 47, 43, 47, - 50, 54, 57, 60, - 64, 67, 71, 74, - 68, 71, 74, 77, - 70, 73, 76, 78, - 81 - }; - static const int m1np[7][18] = - { - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 36, 48, 60, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 24, 32, 40, 48, 56, 64, 72, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 17, 23, 29, 35, 41, 47, 53, 59, 65, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 23, 28, 33, 38, 42, 47, 52, 57, 62, 66, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 39, 43, 47, 51, 55, 59, 63}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 47, 50, 54} - }; - mp_no mps, mpk, mpt1, mpt2; - - /* Choose m,n and compute a=2**(-m). */ - n = np[p]; - m1 = m1p[p]; - b = X[1]; - m2 = 24 * EX; - for (; b < HALFRAD; m2--) - b *= 2; - if (b == HALFRAD) - { - for (i = 2; i <= p; i++) - { - if (X[i] != 0) - break; - } - if (i == p + 1) - m2--; - } - - m = m1 + m2; - if (__glibc_unlikely (m <= 0)) - { - /* The m1np array which is used to determine if we can reduce the - polynomial expansion iterations, has only 18 elements. Besides, - numbers smaller than those required by p >= 18 should not come here - at all since the fast phase of exp returns 1.0 for anything less - than 2^-55. */ - assert (p < 18); - m = 0; - for (i = n - 1; i > 0; i--, n--) - if (m1np[i][p] + m2 > 0) - break; - } - - /* Compute s=x*2**(-m). Put result in mps. This is the range-reduced input - that we will use to compute e^s. For the final result, simply raise it - to 2^m. */ - __pow_mp (-m, &mpt1, p); - __mul (x, &mpt1, &mps, p); - - /* Compute the Taylor series for e^s: - - 1 + x/1! + x^2/2! + x^3/3! ... - - for N iterations. We compute this as: - - e^x = 1 + (x * n!/1! + x^2 * n!/2! + x^3 * n!/3!) / n! - = 1 + (x * (n!/1! + x * (n!/2! + x * (n!/3! + x ...)))) / n! - - k! is computed on the fly as KF and at the end of the polynomial loop, KF - is n!, which can be used directly. */ - __cpy (&mps, &mpt2, p); - - double kf = 1.0; - - /* Evaluate the rest. The result will be in mpt2. */ - for (k = n - 1; k > 0; k--) - { - /* n! / k! = n * (n - 1) ... * (n - k + 1) */ - kf *= k + 1; - - __dbl_mp (kf, &mpk, p); - __add (&mpt2, &mpk, &mpt1, p); - __mul (&mps, &mpt1, &mpt2, p); - } - __dbl_mp (kf, &mpk, p); - __dvd (&mpt2, &mpk, &mpt1, p); - __add (&__mpone, &mpt1, &mpt2, p); - - /* Raise polynomial value to the power of 2**m. Put result in y. */ - for (k = 0, j = 0; k < m;) - { - __sqr (&mpt2, &mpt1, p); - k++; - if (k == m) - { - j = 1; - break; - } - __sqr (&mpt1, &mpt2, p); - k++; - } - if (j) - __cpy (&mpt1, y, p); - else - __cpy (&mpt2, y, p); - return; -} diff --git a/sysdeps/ieee754/dbl-64/mplog.c b/sysdeps/ieee754/dbl-64/mplog.c deleted file mode 100644 index 5b03117d07..0000000000 --- a/sysdeps/ieee754/dbl-64/mplog.c +++ /dev/null @@ -1,65 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/************************************************************************/ -/* */ -/* MODULE_NAME:mplog.c */ -/* */ -/* FUNCTIONS: mplog */ -/* */ -/* FILES NEEDED: endian.h mpa.h mplog.h */ -/* mpexp.c */ -/* */ -/* Multi-Precision logarithm function subroutine (for precision p >= 4, */ -/* 2**(-1024) < x < 2**1024) and x is outside of the interval */ -/* [1-2**(-54),1+2**(-54)]. Upon entry, x should be set to the */ -/* multi-precision value of the input and y should be set into a multi- */ -/* precision value of an approximation of log(x) with relative error */ -/* bound of at most 2**(-52). The routine improves the accuracy of y. */ -/* */ -/************************************************************************/ -#include "endian.h" -#include "mpa.h" - -void -__mplog (mp_no *x, mp_no *y, int p) -{ - int i, m; - static const int mp[33] = - { - 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 - }; - mp_no mpt1, mpt2; - - /* Choose m. */ - m = mp[p]; - - /* Perform m newton iterations to solve for y: exp(y) - x = 0. The - iterations formula is: y(n + 1) = y(n) + (x * exp(-y(n)) - 1). */ - __cpy (y, &mpt1, p); - for (i = 0; i < m; i++) - { - mpt1.d[0] = -mpt1.d[0]; - __mpexp (&mpt1, &mpt2, p); - __mul (x, &mpt2, &mpt1, p); - __sub (&mpt1, &__mpone, &mpt2, p); - __add (y, &mpt2, &mpt1, p); - __cpy (&mpt1, y, p); - } -} diff --git a/sysdeps/ieee754/dbl-64/mpn2dbl.c b/sysdeps/ieee754/dbl-64/mpn2dbl.c deleted file mode 100644 index 1fec0ce920..0000000000 --- a/sysdeps/ieee754/dbl-64/mpn2dbl.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "gmp.h" -#include "gmp-impl.h" -#include -#include - -/* Convert a multi-precision integer of the needed number of bits (53 for - double) and an integral power of two to a `double' in IEEE754 double- - precision format. */ - -double -__mpn_construct_double (mp_srcptr frac_ptr, int expt, int negative) -{ - union ieee754_double u; - - u.ieee.negative = negative; - u.ieee.exponent = expt + IEEE754_DOUBLE_BIAS; -#if BITS_PER_MP_LIMB == 32 - u.ieee.mantissa1 = frac_ptr[0]; - u.ieee.mantissa0 = frac_ptr[1] & (((mp_limb_t) 1 - << (DBL_MANT_DIG - 32)) - 1); -#elif BITS_PER_MP_LIMB == 64 - u.ieee.mantissa1 = frac_ptr[0] & (((mp_limb_t) 1 << 32) - 1); - u.ieee.mantissa0 = (frac_ptr[0] >> 32) & (((mp_limb_t) 1 - << (DBL_MANT_DIG - 32)) - 1); -#else - # error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" -#endif - - return u.d; -} diff --git a/sysdeps/ieee754/dbl-64/mpsqrt.c b/sysdeps/ieee754/dbl-64/mpsqrt.c deleted file mode 100644 index be6d01eeef..0000000000 --- a/sysdeps/ieee754/dbl-64/mpsqrt.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/****************************************************************************/ -/* MODULE_NAME:mpsqrt.c */ -/* */ -/* FUNCTION:mpsqrt */ -/* fastiroot */ -/* */ -/* FILES NEEDED:endian.h mpa.h mpsqrt.h */ -/* mpa.c */ -/* Multi-Precision square root function subroutine for precision p >= 4. */ -/* The relative error is bounded by 3.501*r**(1-p), where r=2**24. */ -/* */ -/****************************************************************************/ -#include "endian.h" -#include "mpa.h" - -#ifndef SECTION -# define SECTION -#endif - -#include "mpsqrt.h" - -/****************************************************************************/ -/* Multi-Precision square root function subroutine for precision p >= 4. */ -/* The relative error is bounded by 3.501*r**(1-p), where r=2**24. */ -/* Routine receives two pointers to Multi Precision numbers: */ -/* x (left argument) and y (next argument). Routine also receives precision */ -/* p as integer. Routine computes sqrt(*x) and stores result in *y */ -/****************************************************************************/ - -static double fastiroot (double); - -void -SECTION -__mpsqrt (mp_no *x, mp_no *y, int p) -{ - int i, m, ey; - double dx, dy; - static const mp_no mphalf = {0, {1.0, HALFRAD}}; - static const mp_no mp3halfs = {1, {1.0, 1.0, HALFRAD}}; - mp_no mpxn, mpz, mpu, mpt1, mpt2; - - ey = EX / 2; - __cpy (x, &mpxn, p); - mpxn.e -= (ey + ey); - __mp_dbl (&mpxn, &dx, p); - dy = fastiroot (dx); - __dbl_mp (dy, &mpu, p); - __mul (&mpxn, &mphalf, &mpz, p); - - m = __mpsqrt_mp[p]; - for (i = 0; i < m; i++) - { - __sqr (&mpu, &mpt1, p); - __mul (&mpt1, &mpz, &mpt2, p); - __sub (&mp3halfs, &mpt2, &mpt1, p); - __mul (&mpu, &mpt1, &mpt2, p); - __cpy (&mpt2, &mpu, p); - } - __mul (&mpxn, &mpu, y, p); - EY += ey; -} - -/***********************************************************/ -/* Compute a double precision approximation for 1/sqrt(x) */ -/* with the relative error bounded by 2**-51. */ -/***********************************************************/ -static double -SECTION -fastiroot (double x) -{ - union - { - int i[2]; - double d; - } p, q; - double y, z, t; - int n; - static const double c0 = 0.99674, c1 = -0.53380; - static const double c2 = 0.45472, c3 = -0.21553; - - p.d = x; - p.i[HIGH_HALF] = (p.i[HIGH_HALF] & 0x3FFFFFFF) | 0x3FE00000; - q.d = x; - y = p.d; - z = y - 1.0; - n = (q.i[HIGH_HALF] - p.i[HIGH_HALF]) >> 1; - z = ((c3 * z + c2) * z + c1) * z + c0; /* 2**-7 */ - z = z * (1.5 - 0.5 * y * z * z); /* 2**-14 */ - p.d = z * (1.5 - 0.5 * y * z * z); /* 2**-28 */ - p.i[HIGH_HALF] -= n; - t = x * p.d; - return p.d * (1.5 - 0.5 * p.d * t); -} diff --git a/sysdeps/ieee754/dbl-64/mpsqrt.h b/sysdeps/ieee754/dbl-64/mpsqrt.h deleted file mode 100644 index 66c3dc684f..0000000000 --- a/sysdeps/ieee754/dbl-64/mpsqrt.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/******************************************************************/ -/* */ -/* MODULE_NAME:mpatan.h */ -/* */ -/* common data and variables prototype and definition */ -/******************************************************************/ - -#ifndef MPSQRT_H -#define MPSQRT_H - -extern const int __mpsqrt_mp[33] attribute_hidden; - - -#ifndef AVOID_MPSQRT_H - const int __mpsqrt_mp[33] = {0,0,0,0,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4, - 4,4,4,4,4,4,4,4,4}; -#endif - -#endif diff --git a/sysdeps/ieee754/dbl-64/mptan.c b/sysdeps/ieee754/dbl-64/mptan.c deleted file mode 100644 index 6976028f8f..0000000000 --- a/sysdeps/ieee754/dbl-64/mptan.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/**********************************************************************/ -/* MODULE_NAME:mptan.c */ -/* */ -/* FUNCTION: mptan */ -/* */ -/* FILES NEEDED: endian.h mpa.h */ -/* mpa.c sincos32.c branred.c */ -/* */ -/* Multi-Precision tan() function subroutine, for p=32. It is based */ -/* on the routines mpranred() and c32(). mpranred() performs range */ -/* reduction of a double number x into a multiple precision number */ -/* y, such that y=x-n*pi/2, abs(y)d[0] *= -1; - } - /* tan is negative in this area. */ - else - __dvd (&mps, &mpc, mpy, p); -} diff --git a/sysdeps/ieee754/dbl-64/mydefs.h b/sysdeps/ieee754/dbl-64/mydefs.h deleted file mode 100644 index 027398e861..0000000000 --- a/sysdeps/ieee754/dbl-64/mydefs.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/******************************************************************/ -/* */ -/* MODULE_NAME:mydefs.h */ -/* */ -/* common data and definition */ -/******************************************************************/ - -#ifndef MY_H -#define MY_H - -typedef int int4; -typedef union { int4 i[2]; double x; } mynumber; - -#define max(x, y) (((y) > (x)) ? (y) : (x)) -#define min(x, y) (((y) < (x)) ? (y) : (x)) -#endif diff --git a/sysdeps/ieee754/dbl-64/powtwo.tbl b/sysdeps/ieee754/dbl-64/powtwo.tbl deleted file mode 100644 index 7d5ae52174..0000000000 --- a/sysdeps/ieee754/dbl-64/powtwo.tbl +++ /dev/null @@ -1,31 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/****************************************************************/ -/* TABLES FOR THE upow() FUNCTION */ -/****************************************************************/ - - - -static const double powtwo[] = { 1.0, 2.0, 4.0, - 8.0, 16.0, 32.0, 64.0, 128.0, - 256.0, 512.0, 1024.0, 2048.0, 4096.0, - 8192.0, 16384.0, 32768.0, 65536.0, 131072.0, - 262144.0, 524288.0, 1048576.0, 2097152.0, 4194304.0, - 8388608.0, 16777216.0, 33554432.0, 67108864.0, 134217728.0 }; diff --git a/sysdeps/ieee754/dbl-64/root.tbl b/sysdeps/ieee754/dbl-64/root.tbl deleted file mode 100644 index 6d2760aa1f..0000000000 --- a/sysdeps/ieee754/dbl-64/root.tbl +++ /dev/null @@ -1,57 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/****************************************************************/ -/* TABLES FOR THE usqrt() FUNCTION */ -/****************************************************************/ - - -static const double inroot[128] = { - 1.40872145012100, 1.39792649065766, 1.38737595123859, 1.37706074531819, - 1.36697225234682, 1.35710228748795, 1.34744307370643, 1.33798721601135, - 1.32872767765984, 1.31965775814772, 1.31077107283046, 1.30206153403386, - 1.29352333352711, 1.28515092624400, 1.27693901514820, 1.26888253714903, - 1.26097664998256, 1.25321671998073, 1.24559831065844, 1.23811717205462, - 1.23076923076923, 1.22355058064300, 1.21645747403153, 1.20948631362953, - 1.20263364480453, 1.19589614840310, 1.18927063399547, 1.18275403352732, - 1.17634339535009, 1.17003587860341, 1.16382874792529, 1.15771936846787, - 1.15170520119791, 1.14578379846309, 1.13995279980655, 1.13420992801334, - 1.12855298537376, 1.12297985014975, 1.11748847323133, 1.11207687497107, - 1.10674314218572, 1.10148542531442, 1.09630193572405, 1.09119094315276, - 1.08615077328341, 1.08117980543918, 1.07627647039410, 1.07143924829188, - 1.06666666666667, 1.06195729855996, 1.05730976072814, 1.05272271193563, - 1.04819485132867, 1.04372491688551, 1.03931168393861, 1.03495396376504, - 1.03065060224133, 1.02640047855933, 1.02220250399990, 1.01805562076124, - 1.01395880083916, 1.00991104495649, 1.00591138153909, 1.00195886573624, - 0.99611649018350, 0.98848330114434, 0.98102294317595, 0.97372899112030, - 0.96659534932828, 0.95961623024651, 0.95278613468066, 0.94609983358253, - 0.93955235122353, 0.93313894963169, 0.92685511418159, 0.92069654023750, - 0.91465912076005, 0.90873893479530, 0.90293223677296, 0.89723544654727, - 0.89164514012056, 0.88615804099474, 0.88077101210109, 0.87548104826333, - 0.87028526915267, 0.86518091269740, 0.86016532891275, 0.85523597411976, - 0.85039040552437, 0.84562627613070, 0.84094132996422, 0.83633339758291, - 0.83180039185606, 0.82734030399203, 0.82295119979782, 0.81863121615464, - 0.81437855769486, 0.81019149366693, 0.80606835497581, 0.80200753138734, - 0.79800746888611, 0.79406666717674, 0.79018367731967, 0.78635709949278, - 0.78258558087123, 0.77886781361798, 0.77520253297841, 0.77158851547266, - 0.76802457717971, 0.76450957210799, 0.76104239064719, 0.75762195809661, - 0.75424723326565, 0.75091720714229, 0.74763090162560, 0.74438736831878, - 0.74118568737933, 0.73802496642311, 0.73490433947940, 0.73182296599416, - 0.72878002987884, 0.72577473860242, 0.72280632232420, 0.71987403306536, - 0.71697714391715, 0.71411494828392, 0.71128675915902, 0.70849190843208 }; diff --git a/sysdeps/ieee754/dbl-64/s_asinh.c b/sysdeps/ieee754/dbl-64/s_asinh.c deleted file mode 100644 index 9193301b5e..0000000000 --- a/sysdeps/ieee754/dbl-64/s_asinh.c +++ /dev/null @@ -1,72 +0,0 @@ -/* @(#)s_asinh.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* asinh(x) - * Method : - * Based on - * asinh(x) = sign(x) * log [ |x| + sqrt(x*x+1) ] - * we have - * asinh(x) := x if 1+x*x=1, - * := sign(x)*(log(x)+ln2)) for large |x|, else - * := sign(x)*log(2|x|+1/(|x|+sqrt(x*x+1))) if|x|>2, else - * := sign(x)*log1p(|x| + x^2/(1 + sqrt(1+x^2))) - */ - -#include -#include -#include - -static const double - one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ - ln2 = 6.93147180559945286227e-01, /* 0x3FE62E42, 0xFEFA39EF */ - huge = 1.00000000000000000000e+300; - -double -__asinh (double x) -{ - double w; - int32_t hx, ix; - GET_HIGH_WORD (hx, x); - ix = hx & 0x7fffffff; - if (__glibc_unlikely (ix < 0x3e300000)) /* |x|<2**-28 */ - { - math_check_force_underflow (x); - if (huge + x > one) - return x; /* return x inexact except 0 */ - } - if (__glibc_unlikely (ix > 0x41b00000)) /* |x| > 2**28 */ - { - if (ix >= 0x7ff00000) - return x + x; /* x is inf or NaN */ - w = __ieee754_log (fabs (x)) + ln2; - } - else - { - double xa = fabs (x); - if (ix > 0x40000000) /* 2**28 > |x| > 2.0 */ - { - w = __ieee754_log (2.0 * xa + one / (__ieee754_sqrt (xa * xa + one) + - xa)); - } - else /* 2.0 > |x| > 2**-28 */ - { - double t = xa * xa; - w = __log1p (xa + t / (one + __ieee754_sqrt (one + t))); - } - } - return __copysign (w, x); -} -weak_alias (__asinh, asinh) -#ifdef NO_LONG_DOUBLE -strong_alias (__asinh, __asinhl) -weak_alias (__asinh, asinhl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_atan.c b/sysdeps/ieee754/dbl-64/s_atan.c deleted file mode 100644 index 3641a35ce1..0000000000 --- a/sysdeps/ieee754/dbl-64/s_atan.c +++ /dev/null @@ -1,328 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/************************************************************************/ -/* MODULE_NAME: atnat.c */ -/* */ -/* FUNCTIONS: uatan */ -/* atanMp */ -/* signArctan */ -/* */ -/* */ -/* FILES NEEDED: dla.h endian.h mpa.h mydefs.h atnat.h */ -/* mpatan.c mpatan2.c mpsqrt.c */ -/* uatan.tbl */ -/* */ -/* An ultimate atan() routine. Given an IEEE double machine number x */ -/* it computes the correctly rounded (to nearest) value of atan(x). */ -/* */ -/* Assumption: Machine arithmetic operations are performed in */ -/* round to nearest mode of IEEE 754 standard. */ -/* */ -/************************************************************************/ - -#include -#include "mpa.h" -#include "MathLib.h" -#include "uatan.tbl" -#include "atnat.h" -#include -#include -#include -#include -#include - -void __mpatan (mp_no *, mp_no *, int); /* see definition in mpatan.c */ -static double atanMp (double, const int[]); - - /* Fix the sign of y and return */ -static double -__signArctan (double x, double y) -{ - return __copysign (y, x); -} - - -/* An ultimate atan() routine. Given an IEEE double machine number x, */ -/* routine computes the correctly rounded (to nearest) value of atan(x). */ -double -atan (double x) -{ - double cor, s1, ss1, s2, ss2, t1, t2, t3, t7, t8, t9, t10, u, u2, u3, - v, vv, w, ww, y, yy, z, zz; -#ifndef DLA_FMS - double t4, t5, t6; -#endif - int i, ux, dx; - static const int pr[M] = { 6, 8, 10, 32 }; - number num; - - num.d = x; - ux = num.i[HIGH_HALF]; - dx = num.i[LOW_HALF]; - - /* x=NaN */ - if (((ux & 0x7ff00000) == 0x7ff00000) - && (((ux & 0x000fffff) | dx) != 0x00000000)) - return x + x; - - /* Regular values of x, including denormals +-0 and +-INF */ - SET_RESTORE_ROUND (FE_TONEAREST); - u = (x < 0) ? -x : x; - if (u < C) - { - if (u < B) - { - if (u < A) - { - math_check_force_underflow_nonneg (u); - return x; - } - else - { /* A <= u < B */ - v = x * x; - yy = d11.d + v * d13.d; - yy = d9.d + v * yy; - yy = d7.d + v * yy; - yy = d5.d + v * yy; - yy = d3.d + v * yy; - yy *= x * v; - - if ((y = x + (yy - U1 * x)) == x + (yy + U1 * x)) - return y; - - EMULV (x, x, v, vv, t1, t2, t3, t4, t5); /* v+vv=x^2 */ - - s1 = f17.d + v * f19.d; - s1 = f15.d + v * s1; - s1 = f13.d + v * s1; - s1 = f11.d + v * s1; - s1 *= v; - - ADD2 (f9.d, ff9.d, s1, 0, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f7.d, ff7.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f5.d, ff5.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f3.d, ff3.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (x, 0, s1, ss1, s2, ss2, t1, t2, t3, t4, t5, t6, t7, - t8); - ADD2 (x, 0, s2, ss2, s1, ss1, t1, t2); - if ((y = s1 + (ss1 - U5 * s1)) == s1 + (ss1 + U5 * s1)) - return y; - - return atanMp (x, pr); - } - } - else - { /* B <= u < C */ - i = (TWO52 + TWO8 * u) - TWO52; - i -= 16; - z = u - cij[i][0].d; - yy = cij[i][5].d + z * cij[i][6].d; - yy = cij[i][4].d + z * yy; - yy = cij[i][3].d + z * yy; - yy = cij[i][2].d + z * yy; - yy *= z; - - t1 = cij[i][1].d; - if (i < 112) - { - if (i < 48) - u2 = U21; /* u < 1/4 */ - else - u2 = U22; - } /* 1/4 <= u < 1/2 */ - else - { - if (i < 176) - u2 = U23; /* 1/2 <= u < 3/4 */ - else - u2 = U24; - } /* 3/4 <= u <= 1 */ - if ((y = t1 + (yy - u2 * t1)) == t1 + (yy + u2 * t1)) - return __signArctan (x, y); - - z = u - hij[i][0].d; - - s1 = hij[i][14].d + z * hij[i][15].d; - s1 = hij[i][13].d + z * s1; - s1 = hij[i][12].d + z * s1; - s1 = hij[i][11].d + z * s1; - s1 *= z; - - ADD2 (hij[i][9].d, hij[i][10].d, s1, 0, s2, ss2, t1, t2); - MUL2 (z, 0, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][7].d, hij[i][8].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (z, 0, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][5].d, hij[i][6].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (z, 0, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][3].d, hij[i][4].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (z, 0, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][1].d, hij[i][2].d, s1, ss1, s2, ss2, t1, t2); - if ((y = s2 + (ss2 - U6 * s2)) == s2 + (ss2 + U6 * s2)) - return __signArctan (x, y); - - return atanMp (x, pr); - } - } - else - { - if (u < D) - { /* C <= u < D */ - w = 1 / u; - EMULV (w, u, t1, t2, t3, t4, t5, t6, t7); - ww = w * ((1 - t1) - t2); - i = (TWO52 + TWO8 * w) - TWO52; - i -= 16; - z = (w - cij[i][0].d) + ww; - - yy = cij[i][5].d + z * cij[i][6].d; - yy = cij[i][4].d + z * yy; - yy = cij[i][3].d + z * yy; - yy = cij[i][2].d + z * yy; - yy = HPI1 - z * yy; - - t1 = HPI - cij[i][1].d; - if (i < 112) - u3 = U31; /* w < 1/2 */ - else - u3 = U32; /* w >= 1/2 */ - if ((y = t1 + (yy - u3)) == t1 + (yy + u3)) - return __signArctan (x, y); - - DIV2 (1, 0, u, 0, w, ww, t1, t2, t3, t4, t5, t6, t7, t8, t9, - t10); - t1 = w - hij[i][0].d; - EADD (t1, ww, z, zz); - - s1 = hij[i][14].d + z * hij[i][15].d; - s1 = hij[i][13].d + z * s1; - s1 = hij[i][12].d + z * s1; - s1 = hij[i][11].d + z * s1; - s1 *= z; - - ADD2 (hij[i][9].d, hij[i][10].d, s1, 0, s2, ss2, t1, t2); - MUL2 (z, zz, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][7].d, hij[i][8].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (z, zz, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][5].d, hij[i][6].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (z, zz, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][3].d, hij[i][4].d, s1, ss1, s2, ss2, t1, t2); - MUL2 (z, zz, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (hij[i][1].d, hij[i][2].d, s1, ss1, s2, ss2, t1, t2); - SUB2 (HPI, HPI1, s2, ss2, s1, ss1, t1, t2); - if ((y = s1 + (ss1 - U7)) == s1 + (ss1 + U7)) - return __signArctan (x, y); - - return atanMp (x, pr); - } - else - { - if (u < E) - { /* D <= u < E */ - w = 1 / u; - v = w * w; - EMULV (w, u, t1, t2, t3, t4, t5, t6, t7); - - yy = d11.d + v * d13.d; - yy = d9.d + v * yy; - yy = d7.d + v * yy; - yy = d5.d + v * yy; - yy = d3.d + v * yy; - yy *= w * v; - - ww = w * ((1 - t1) - t2); - ESUB (HPI, w, t3, cor); - yy = ((HPI1 + cor) - ww) - yy; - if ((y = t3 + (yy - U4)) == t3 + (yy + U4)) - return __signArctan (x, y); - - DIV2 (1, 0, u, 0, w, ww, t1, t2, t3, t4, t5, t6, t7, t8, - t9, t10); - MUL2 (w, ww, w, ww, v, vv, t1, t2, t3, t4, t5, t6, t7, t8); - - s1 = f17.d + v * f19.d; - s1 = f15.d + v * s1; - s1 = f13.d + v * s1; - s1 = f11.d + v * s1; - s1 *= v; - - ADD2 (f9.d, ff9.d, s1, 0, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f7.d, ff7.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f5.d, ff5.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (f3.d, ff3.d, s1, ss1, s2, ss2, t1, t2); - MUL2 (v, vv, s2, ss2, s1, ss1, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (w, ww, s1, ss1, s2, ss2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (w, ww, s2, ss2, s1, ss1, t1, t2); - SUB2 (HPI, HPI1, s1, ss1, s2, ss2, t1, t2); - - if ((y = s2 + (ss2 - U8)) == s2 + (ss2 + U8)) - return __signArctan (x, y); - - return atanMp (x, pr); - } - else - { - /* u >= E */ - if (x > 0) - return HPI; - else - return MHPI; - } - } - } -} - - /* Final stages. Compute atan(x) by multiple precision arithmetic */ -static double -atanMp (double x, const int pr[]) -{ - mp_no mpx, mpy, mpy2, mperr, mpt1, mpy1; - double y1, y2; - int i, p; - - for (i = 0; i < M; i++) - { - p = pr[i]; - __dbl_mp (x, &mpx, p); - __mpatan (&mpx, &mpy, p); - __dbl_mp (u9[i].d, &mpt1, p); - __mul (&mpy, &mpt1, &mperr, p); - __add (&mpy, &mperr, &mpy1, p); - __sub (&mpy, &mperr, &mpy2, p); - __mp_dbl (&mpy1, &y1, p); - __mp_dbl (&mpy2, &y2, p); - if (y1 == y2) - { - LIBC_PROBE (slowatan, 3, &p, &x, &y1); - return y1; - } - } - LIBC_PROBE (slowatan_inexact, 3, &p, &x, &y1); - return y1; /*if impossible to do exact computing */ -} - -#ifdef NO_LONG_DOUBLE -weak_alias (atan, atanl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_cbrt.c b/sysdeps/ieee754/dbl-64/s_cbrt.c deleted file mode 100644 index 689abc89ec..0000000000 --- a/sysdeps/ieee754/dbl-64/s_cbrt.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Compute cubic root of double value. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Dirk Alboth and - Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -#define CBRT2 1.2599210498948731648 /* 2^(1/3) */ -#define SQR_CBRT2 1.5874010519681994748 /* 2^(2/3) */ - -static const double factor[5] = -{ - 1.0 / SQR_CBRT2, - 1.0 / CBRT2, - 1.0, - CBRT2, - SQR_CBRT2 -}; - - -double -__cbrt (double x) -{ - double xm, ym, u, t2; - int xe; - - /* Reduce X. XM now is an range 1.0 to 0.5. */ - xm = __frexp (fabs (x), &xe); - - /* If X is not finite or is null return it (with raising exceptions - if necessary. - Note: *Our* version of `frexp' sets XE to zero if the argument is - Inf or NaN. This is not portable but faster. */ - if (xe == 0 && fpclassify (x) <= FP_ZERO) - return x + x; - - u = (0.354895765043919860 - + ((1.50819193781584896 - + ((-2.11499494167371287 - + ((2.44693122563534430 - + ((-1.83469277483613086 - + (0.784932344976639262 - 0.145263899385486377 * xm) - * xm) - * xm)) - * xm)) - * xm)) - * xm)); - - t2 = u * u * u; - - ym = u * (t2 + 2.0 * xm) / (2.0 * t2 + xm) * factor[2 + xe % 3]; - - return __ldexp (x > 0.0 ? ym : -ym, xe / 3); -} -weak_alias (__cbrt, cbrt) -#ifdef NO_LONG_DOUBLE -strong_alias (__cbrt, __cbrtl) -weak_alias (__cbrt, cbrtl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_ceil.c b/sysdeps/ieee754/dbl-64/s_ceil.c deleted file mode 100644 index c291c26f57..0000000000 --- a/sysdeps/ieee754/dbl-64/s_ceil.c +++ /dev/null @@ -1,89 +0,0 @@ -/* @(#)s_ceil.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * ceil(x) - * Return x rounded toward -inf to integral value - * Method: - * Bit twiddling. - */ - -#include -#include - -double -__ceil (double x) -{ - int32_t i0, i1, j0; - u_int32_t i, j; - EXTRACT_WORDS (i0, i1, x); - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - if (j0 < 20) - { - if (j0 < 0) - { - /* return 0*sign(x) if |x|<1 */ - if (i0 < 0) - { - i0 = 0x80000000; i1 = 0; - } - else if ((i0 | i1) != 0) - { - i0 = 0x3ff00000; i1 = 0; - } - } - else - { - i = (0x000fffff) >> j0; - if (((i0 & i) | i1) == 0) - return x; /* x is integral */ - if (i0 > 0) - i0 += (0x00100000) >> j0; - i0 &= (~i); i1 = 0; - } - } - else if (j0 > 51) - { - if (j0 == 0x400) - return x + x; /* inf or NaN */ - else - return x; /* x is integral */ - } - else - { - i = ((u_int32_t) (0xffffffff)) >> (j0 - 20); - if ((i1 & i) == 0) - return x; /* x is integral */ - if (i0 > 0) - { - if (j0 == 20) - i0 += 1; - else - { - j = i1 + (1 << (52 - j0)); - if (j < i1) - i0 += 1; /* got a carry */ - i1 = j; - } - } - i1 &= (~i); - } - INSERT_WORDS (x, i0, i1); - return x; -} -#ifndef __ceil -weak_alias (__ceil, ceil) -# ifdef NO_LONG_DOUBLE -strong_alias (__ceil, __ceill) -weak_alias (__ceil, ceill) -# endif -#endif diff --git a/sysdeps/ieee754/dbl-64/s_copysign.c b/sysdeps/ieee754/dbl-64/s_copysign.c deleted file mode 100644 index 9caf24e8f2..0000000000 --- a/sysdeps/ieee754/dbl-64/s_copysign.c +++ /dev/null @@ -1,39 +0,0 @@ -/* @(#)s_copysign.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_copysign.c,v 1.8 1995/05/10 20:46:57 jtc Exp $"; -#endif - -/* - * copysign(double x, double y) - * copysign(x,y) returns a value with the magnitude of x and - * with the sign bit of y. - */ - -#include -#include - -double -__copysign (double x, double y) -{ - u_int32_t hx, hy; - GET_HIGH_WORD (hx, x); - GET_HIGH_WORD (hy, y); - SET_HIGH_WORD (x, (hx & 0x7fffffff) | (hy & 0x80000000)); - return x; -} -weak_alias (__copysign, copysign) -#ifdef NO_LONG_DOUBLE -strong_alias (__copysign, __copysignl) -weak_alias (__copysign, copysignl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_cos.c b/sysdeps/ieee754/dbl-64/s_cos.c deleted file mode 100644 index 4be1276ccb..0000000000 --- a/sysdeps/ieee754/dbl-64/s_cos.c +++ /dev/null @@ -1 +0,0 @@ -/* In s_sin.c. */ diff --git a/sysdeps/ieee754/dbl-64/s_erf.c b/sysdeps/ieee754/dbl-64/s_erf.c deleted file mode 100644 index b4975a8af8..0000000000 --- a/sysdeps/ieee754/dbl-64/s_erf.c +++ /dev/null @@ -1,428 +0,0 @@ -/* @(#)s_erf.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ -/* Modified by Naohiko Shimizu/Tokai University, Japan 1997/08/25, - for performance improvement on pipelined processors. -*/ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_erf.c,v 1.8 1995/05/10 20:47:05 jtc Exp $"; -#endif - -/* double erf(double x) - * double erfc(double x) - * x - * 2 |\ - * erf(x) = --------- | exp(-t*t)dt - * sqrt(pi) \| - * 0 - * - * erfc(x) = 1-erf(x) - * Note that - * erf(-x) = -erf(x) - * erfc(-x) = 2 - erfc(x) - * - * Method: - * 1. For |x| in [0, 0.84375] - * erf(x) = x + x*R(x^2) - * erfc(x) = 1 - erf(x) if x in [-.84375,0.25] - * = 0.5 + ((0.5-x)-x*R) if x in [0.25,0.84375] - * where R = P/Q where P is an odd poly of degree 8 and - * Q is an odd poly of degree 10. - * -57.90 - * | R - (erf(x)-x)/x | <= 2 - * - * - * Remark. The formula is derived by noting - * erf(x) = (2/sqrt(pi))*(x - x^3/3 + x^5/10 - x^7/42 + ....) - * and that - * 2/sqrt(pi) = 1.128379167095512573896158903121545171688 - * is close to one. The interval is chosen because the fix - * point of erf(x) is near 0.6174 (i.e., erf(x)=x when x is - * near 0.6174), and by some experiment, 0.84375 is chosen to - * guarantee the error is less than one ulp for erf. - * - * 2. For |x| in [0.84375,1.25], let s = |x| - 1, and - * c = 0.84506291151 rounded to single (24 bits) - * erf(x) = sign(x) * (c + P1(s)/Q1(s)) - * erfc(x) = (1-c) - P1(s)/Q1(s) if x > 0 - * 1+(c+P1(s)/Q1(s)) if x < 0 - * |P1/Q1 - (erf(|x|)-c)| <= 2**-59.06 - * Remark: here we use the taylor series expansion at x=1. - * erf(1+s) = erf(1) + s*Poly(s) - * = 0.845.. + P1(s)/Q1(s) - * That is, we use rational approximation to approximate - * erf(1+s) - (c = (single)0.84506291151) - * Note that |P1/Q1|< 0.078 for x in [0.84375,1.25] - * where - * P1(s) = degree 6 poly in s - * Q1(s) = degree 6 poly in s - * - * 3. For x in [1.25,1/0.35(~2.857143)], - * erfc(x) = (1/x)*exp(-x*x-0.5625+R1/S1) - * erf(x) = 1 - erfc(x) - * where - * R1(z) = degree 7 poly in z, (z=1/x^2) - * S1(z) = degree 8 poly in z - * - * 4. For x in [1/0.35,28] - * erfc(x) = (1/x)*exp(-x*x-0.5625+R2/S2) if x > 0 - * = 2.0 - (1/x)*exp(-x*x-0.5625+R2/S2) if -6 x >= 28 - * erf(x) = sign(x) *(1 - tiny) (raise inexact) - * erfc(x) = tiny*tiny (raise underflow) if x > 0 - * = 2 - tiny if x<0 - * - * 7. Special case: - * erf(0) = 0, erf(inf) = 1, erf(-inf) = -1, - * erfc(0) = 1, erfc(inf) = 0, erfc(-inf) = 2, - * erfc/erf(NaN) is NaN - */ - - -#include -#include -#include -#include -#include - -static const double - tiny = 1e-300, - half = 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */ - one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ - two = 2.00000000000000000000e+00, /* 0x40000000, 0x00000000 */ -/* c = (float)0.84506291151 */ - erx = 8.45062911510467529297e-01, /* 0x3FEB0AC1, 0x60000000 */ -/* - * Coefficients for approximation to erf on [0,0.84375] - */ - efx = 1.28379167095512586316e-01, /* 0x3FC06EBA, 0x8214DB69 */ - pp[] = { 1.28379167095512558561e-01, /* 0x3FC06EBA, 0x8214DB68 */ - -3.25042107247001499370e-01, /* 0xBFD4CD7D, 0x691CB913 */ - -2.84817495755985104766e-02, /* 0xBF9D2A51, 0xDBD7194F */ - -5.77027029648944159157e-03, /* 0xBF77A291, 0x236668E4 */ - -2.37630166566501626084e-05 }, /* 0xBEF8EAD6, 0x120016AC */ - qq[] = { 0.0, 3.97917223959155352819e-01, /* 0x3FD97779, 0xCDDADC09 */ - 6.50222499887672944485e-02, /* 0x3FB0A54C, 0x5536CEBA */ - 5.08130628187576562776e-03, /* 0x3F74D022, 0xC4D36B0F */ - 1.32494738004321644526e-04, /* 0x3F215DC9, 0x221C1A10 */ - -3.96022827877536812320e-06 }, /* 0xBED09C43, 0x42A26120 */ -/* - * Coefficients for approximation to erf in [0.84375,1.25] - */ - pa[] = { -2.36211856075265944077e-03, /* 0xBF6359B8, 0xBEF77538 */ - 4.14856118683748331666e-01, /* 0x3FDA8D00, 0xAD92B34D */ - -3.72207876035701323847e-01, /* 0xBFD7D240, 0xFBB8C3F1 */ - 3.18346619901161753674e-01, /* 0x3FD45FCA, 0x805120E4 */ - -1.10894694282396677476e-01, /* 0xBFBC6398, 0x3D3E28EC */ - 3.54783043256182359371e-02, /* 0x3FA22A36, 0x599795EB */ - -2.16637559486879084300e-03 }, /* 0xBF61BF38, 0x0A96073F */ - qa[] = { 0.0, 1.06420880400844228286e-01, /* 0x3FBB3E66, 0x18EEE323 */ - 5.40397917702171048937e-01, /* 0x3FE14AF0, 0x92EB6F33 */ - 7.18286544141962662868e-02, /* 0x3FB2635C, 0xD99FE9A7 */ - 1.26171219808761642112e-01, /* 0x3FC02660, 0xE763351F */ - 1.36370839120290507362e-02, /* 0x3F8BEDC2, 0x6B51DD1C */ - 1.19844998467991074170e-02 }, /* 0x3F888B54, 0x5735151D */ -/* - * Coefficients for approximation to erfc in [1.25,1/0.35] - */ - ra[] = { -9.86494403484714822705e-03, /* 0xBF843412, 0x600D6435 */ - -6.93858572707181764372e-01, /* 0xBFE63416, 0xE4BA7360 */ - -1.05586262253232909814e+01, /* 0xC0251E04, 0x41B0E726 */ - -6.23753324503260060396e+01, /* 0xC04F300A, 0xE4CBA38D */ - -1.62396669462573470355e+02, /* 0xC0644CB1, 0x84282266 */ - -1.84605092906711035994e+02, /* 0xC067135C, 0xEBCCABB2 */ - -8.12874355063065934246e+01, /* 0xC0545265, 0x57E4D2F2 */ - -9.81432934416914548592e+00 }, /* 0xC023A0EF, 0xC69AC25C */ - sa[] = { 0.0, 1.96512716674392571292e+01, /* 0x4033A6B9, 0xBD707687 */ - 1.37657754143519042600e+02, /* 0x4061350C, 0x526AE721 */ - 4.34565877475229228821e+02, /* 0x407B290D, 0xD58A1A71 */ - 6.45387271733267880336e+02, /* 0x40842B19, 0x21EC2868 */ - 4.29008140027567833386e+02, /* 0x407AD021, 0x57700314 */ - 1.08635005541779435134e+02, /* 0x405B28A3, 0xEE48AE2C */ - 6.57024977031928170135e+00, /* 0x401A47EF, 0x8E484A93 */ - -6.04244152148580987438e-02 }, /* 0xBFAEEFF2, 0xEE749A62 */ -/* - * Coefficients for approximation to erfc in [1/.35,28] - */ - rb[] = { -9.86494292470009928597e-03, /* 0xBF843412, 0x39E86F4A */ - -7.99283237680523006574e-01, /* 0xBFE993BA, 0x70C285DE */ - -1.77579549177547519889e+01, /* 0xC031C209, 0x555F995A */ - -1.60636384855821916062e+02, /* 0xC064145D, 0x43C5ED98 */ - -6.37566443368389627722e+02, /* 0xC083EC88, 0x1375F228 */ - -1.02509513161107724954e+03, /* 0xC0900461, 0x6A2E5992 */ - -4.83519191608651397019e+02 }, /* 0xC07E384E, 0x9BDC383F */ - sb[] = { 0.0, 3.03380607434824582924e+01, /* 0x403E568B, 0x261D5190 */ - 3.25792512996573918826e+02, /* 0x40745CAE, 0x221B9F0A */ - 1.53672958608443695994e+03, /* 0x409802EB, 0x189D5118 */ - 3.19985821950859553908e+03, /* 0x40A8FFB7, 0x688C246A */ - 2.55305040643316442583e+03, /* 0x40A3F219, 0xCEDF3BE6 */ - 4.74528541206955367215e+02, /* 0x407DA874, 0xE79FE763 */ - -2.24409524465858183362e+01 }; /* 0xC03670E2, 0x42712D62 */ - -double -__erf (double x) -{ - int32_t hx, ix, i; - double R, S, P, Q, s, y, z, r; - GET_HIGH_WORD (hx, x); - ix = hx & 0x7fffffff; - if (ix >= 0x7ff00000) /* erf(nan)=nan */ - { - i = ((u_int32_t) hx >> 31) << 1; - return (double) (1 - i) + one / x; /* erf(+-inf)=+-1 */ - } - - if (ix < 0x3feb0000) /* |x|<0.84375 */ - { - double r1, r2, s1, s2, s3, z2, z4; - if (ix < 0x3e300000) /* |x|<2**-28 */ - { - if (ix < 0x00800000) - { - /* Avoid spurious underflow. */ - double ret = 0.0625 * (16.0 * x + (16.0 * efx) * x); - math_check_force_underflow (ret); - return ret; - } - return x + efx * x; - } - z = x * x; - r1 = pp[0] + z * pp[1]; z2 = z * z; - r2 = pp[2] + z * pp[3]; z4 = z2 * z2; - s1 = one + z * qq[1]; - s2 = qq[2] + z * qq[3]; - s3 = qq[4] + z * qq[5]; - r = r1 + z2 * r2 + z4 * pp[4]; - s = s1 + z2 * s2 + z4 * s3; - y = r / s; - return x + x * y; - } - if (ix < 0x3ff40000) /* 0.84375 <= |x| < 1.25 */ - { - double s2, s4, s6, P1, P2, P3, P4, Q1, Q2, Q3, Q4; - s = fabs (x) - one; - P1 = pa[0] + s * pa[1]; s2 = s * s; - Q1 = one + s * qa[1]; s4 = s2 * s2; - P2 = pa[2] + s * pa[3]; s6 = s4 * s2; - Q2 = qa[2] + s * qa[3]; - P3 = pa[4] + s * pa[5]; - Q3 = qa[4] + s * qa[5]; - P4 = pa[6]; - Q4 = qa[6]; - P = P1 + s2 * P2 + s4 * P3 + s6 * P4; - Q = Q1 + s2 * Q2 + s4 * Q3 + s6 * Q4; - if (hx >= 0) - return erx + P / Q; - else - return -erx - P / Q; - } - if (ix >= 0x40180000) /* inf>|x|>=6 */ - { - if (hx >= 0) - return one - tiny; - else - return tiny - one; - } - x = fabs (x); - s = one / (x * x); - if (ix < 0x4006DB6E) /* |x| < 1/0.35 */ - { - double R1, R2, R3, R4, S1, S2, S3, S4, s2, s4, s6, s8; - R1 = ra[0] + s * ra[1]; s2 = s * s; - S1 = one + s * sa[1]; s4 = s2 * s2; - R2 = ra[2] + s * ra[3]; s6 = s4 * s2; - S2 = sa[2] + s * sa[3]; s8 = s4 * s4; - R3 = ra[4] + s * ra[5]; - S3 = sa[4] + s * sa[5]; - R4 = ra[6] + s * ra[7]; - S4 = sa[6] + s * sa[7]; - R = R1 + s2 * R2 + s4 * R3 + s6 * R4; - S = S1 + s2 * S2 + s4 * S3 + s6 * S4 + s8 * sa[8]; - } - else /* |x| >= 1/0.35 */ - { - double R1, R2, R3, S1, S2, S3, S4, s2, s4, s6; - R1 = rb[0] + s * rb[1]; s2 = s * s; - S1 = one + s * sb[1]; s4 = s2 * s2; - R2 = rb[2] + s * rb[3]; s6 = s4 * s2; - S2 = sb[2] + s * sb[3]; - R3 = rb[4] + s * rb[5]; - S3 = sb[4] + s * sb[5]; - S4 = sb[6] + s * sb[7]; - R = R1 + s2 * R2 + s4 * R3 + s6 * rb[6]; - S = S1 + s2 * S2 + s4 * S3 + s6 * S4; - } - z = x; - SET_LOW_WORD (z, 0); - r = __ieee754_exp (-z * z - 0.5625) * - __ieee754_exp ((z - x) * (z + x) + R / S); - if (hx >= 0) - return one - r / x; - else - return r / x - one; -} -weak_alias (__erf, erf) -#ifdef NO_LONG_DOUBLE -strong_alias (__erf, __erfl) -weak_alias (__erf, erfl) -#endif - -double -__erfc (double x) -{ - int32_t hx, ix; - double R, S, P, Q, s, y, z, r; - GET_HIGH_WORD (hx, x); - ix = hx & 0x7fffffff; - if (ix >= 0x7ff00000) /* erfc(nan)=nan */ - { /* erfc(+-inf)=0,2 */ - double ret = (double) (((u_int32_t) hx >> 31) << 1) + one / x; - if (FIX_INT_FP_CONVERT_ZERO && ret == 0.0) - return 0.0; - return ret; - } - - if (ix < 0x3feb0000) /* |x|<0.84375 */ - { - double r1, r2, s1, s2, s3, z2, z4; - if (ix < 0x3c700000) /* |x|<2**-56 */ - return one - x; - z = x * x; - r1 = pp[0] + z * pp[1]; z2 = z * z; - r2 = pp[2] + z * pp[3]; z4 = z2 * z2; - s1 = one + z * qq[1]; - s2 = qq[2] + z * qq[3]; - s3 = qq[4] + z * qq[5]; - r = r1 + z2 * r2 + z4 * pp[4]; - s = s1 + z2 * s2 + z4 * s3; - y = r / s; - if (hx < 0x3fd00000) /* x<1/4 */ - { - return one - (x + x * y); - } - else - { - r = x * y; - r += (x - half); - return half - r; - } - } - if (ix < 0x3ff40000) /* 0.84375 <= |x| < 1.25 */ - { - double s2, s4, s6, P1, P2, P3, P4, Q1, Q2, Q3, Q4; - s = fabs (x) - one; - P1 = pa[0] + s * pa[1]; s2 = s * s; - Q1 = one + s * qa[1]; s4 = s2 * s2; - P2 = pa[2] + s * pa[3]; s6 = s4 * s2; - Q2 = qa[2] + s * qa[3]; - P3 = pa[4] + s * pa[5]; - Q3 = qa[4] + s * qa[5]; - P4 = pa[6]; - Q4 = qa[6]; - P = P1 + s2 * P2 + s4 * P3 + s6 * P4; - Q = Q1 + s2 * Q2 + s4 * Q3 + s6 * Q4; - if (hx >= 0) - { - z = one - erx; return z - P / Q; - } - else - { - z = erx + P / Q; return one + z; - } - } - if (ix < 0x403c0000) /* |x|<28 */ - { - x = fabs (x); - s = one / (x * x); - if (ix < 0x4006DB6D) /* |x| < 1/.35 ~ 2.857143*/ - { - double R1, R2, R3, R4, S1, S2, S3, S4, s2, s4, s6, s8; - R1 = ra[0] + s * ra[1]; s2 = s * s; - S1 = one + s * sa[1]; s4 = s2 * s2; - R2 = ra[2] + s * ra[3]; s6 = s4 * s2; - S2 = sa[2] + s * sa[3]; s8 = s4 * s4; - R3 = ra[4] + s * ra[5]; - S3 = sa[4] + s * sa[5]; - R4 = ra[6] + s * ra[7]; - S4 = sa[6] + s * sa[7]; - R = R1 + s2 * R2 + s4 * R3 + s6 * R4; - S = S1 + s2 * S2 + s4 * S3 + s6 * S4 + s8 * sa[8]; - } - else /* |x| >= 1/.35 ~ 2.857143 */ - { - double R1, R2, R3, S1, S2, S3, S4, s2, s4, s6; - if (hx < 0 && ix >= 0x40180000) - return two - tiny; /* x < -6 */ - R1 = rb[0] + s * rb[1]; s2 = s * s; - S1 = one + s * sb[1]; s4 = s2 * s2; - R2 = rb[2] + s * rb[3]; s6 = s4 * s2; - S2 = sb[2] + s * sb[3]; - R3 = rb[4] + s * rb[5]; - S3 = sb[4] + s * sb[5]; - S4 = sb[6] + s * sb[7]; - R = R1 + s2 * R2 + s4 * R3 + s6 * rb[6]; - S = S1 + s2 * S2 + s4 * S3 + s6 * S4; - } - z = x; - SET_LOW_WORD (z, 0); - r = __ieee754_exp (-z * z - 0.5625) * - __ieee754_exp ((z - x) * (z + x) + R / S); - if (hx > 0) - { - double ret = math_narrow_eval (r / x); - if (ret == 0) - __set_errno (ERANGE); - return ret; - } - else - return two - r / x; - } - else - { - if (hx > 0) - { - __set_errno (ERANGE); - return tiny * tiny; - } - else - return two - tiny; - } -} -weak_alias (__erfc, erfc) -#ifdef NO_LONG_DOUBLE -strong_alias (__erfc, __erfcl) -weak_alias (__erfc, erfcl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_expm1.c b/sysdeps/ieee754/dbl-64/s_expm1.c deleted file mode 100644 index 54d771007a..0000000000 --- a/sysdeps/ieee754/dbl-64/s_expm1.c +++ /dev/null @@ -1,262 +0,0 @@ -/* @(#)s_expm1.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ -/* Modified by Naohiko Shimizu/Tokai University, Japan 1997/08/25, - for performance improvement on pipelined processors. - */ - -/* expm1(x) - * Returns exp(x)-1, the exponential of x minus 1. - * - * Method - * 1. Argument reduction: - * Given x, find r and integer k such that - * - * x = k*ln2 + r, |r| <= 0.5*ln2 ~ 0.34658 - * - * Here a correction term c will be computed to compensate - * the error in r when rounded to a floating-point number. - * - * 2. Approximating expm1(r) by a special rational function on - * the interval [0,0.34658]: - * Since - * r*(exp(r)+1)/(exp(r)-1) = 2+ r^2/6 - r^4/360 + ... - * we define R1(r*r) by - * r*(exp(r)+1)/(exp(r)-1) = 2+ r^2/6 * R1(r*r) - * That is, - * R1(r**2) = 6/r *((exp(r)+1)/(exp(r)-1) - 2/r) - * = 6/r * ( 1 + 2.0*(1/(exp(r)-1) - 1/r)) - * = 1 - r^2/60 + r^4/2520 - r^6/100800 + ... - * We use a special Reme algorithm on [0,0.347] to generate - * a polynomial of degree 5 in r*r to approximate R1. The - * maximum error of this polynomial approximation is bounded - * by 2**-61. In other words, - * R1(z) ~ 1.0 + Q1*z + Q2*z**2 + Q3*z**3 + Q4*z**4 + Q5*z**5 - * where Q1 = -1.6666666666666567384E-2, - * Q2 = 3.9682539681370365873E-4, - * Q3 = -9.9206344733435987357E-6, - * Q4 = 2.5051361420808517002E-7, - * Q5 = -6.2843505682382617102E-9; - * (where z=r*r, and the values of Q1 to Q5 are listed below) - * with error bounded by - * | 5 | -61 - * | 1.0+Q1*z+...+Q5*z - R1(z) | <= 2 - * | | - * - * expm1(r) = exp(r)-1 is then computed by the following - * specific way which minimize the accumulation rounding error: - * 2 3 - * r r [ 3 - (R1 + R1*r/2) ] - * expm1(r) = r + --- + --- * [--------------------] - * 2 2 [ 6 - r*(3 - R1*r/2) ] - * - * To compensate the error in the argument reduction, we use - * expm1(r+c) = expm1(r) + c + expm1(r)*c - * ~ expm1(r) + c + r*c - * Thus c+r*c will be added in as the correction terms for - * expm1(r+c). Now rearrange the term to avoid optimization - * screw up: - * ( 2 2 ) - * ({ ( r [ R1 - (3 - R1*r/2) ] ) } r ) - * expm1(r+c)~r - ({r*(--- * [--------------------]-c)-c} - --- ) - * ({ ( 2 [ 6 - r*(3 - R1*r/2) ] ) } 2 ) - * ( ) - * - * = r - E - * 3. Scale back to obtain expm1(x): - * From step 1, we have - * expm1(x) = either 2^k*[expm1(r)+1] - 1 - * = or 2^k*[expm1(r) + (1-2^-k)] - * 4. Implementation notes: - * (A). To save one multiplication, we scale the coefficient Qi - * to Qi*2^i, and replace z by (x^2)/2. - * (B). To achieve maximum accuracy, we compute expm1(x) by - * (i) if x < -56*ln2, return -1.0, (raise inexact if x!=inf) - * (ii) if k=0, return r-E - * (iii) if k=-1, return 0.5*(r-E)-0.5 - * (iv) if k=1 if r < -0.25, return 2*((r+0.5)- E) - * else return 1.0+2.0*(r-E); - * (v) if (k<-2||k>56) return 2^k(1-(E-r)) - 1 (or exp(x)-1) - * (vi) if k <= 20, return 2^k((1-2^-k)-(E-r)), else - * (vii) return 2^k(1-((E+2^-k)-r)) - * - * Special cases: - * expm1(INF) is INF, expm1(NaN) is NaN; - * expm1(-INF) is -1, and - * for finite argument, only expm1(0)=0 is exact. - * - * Accuracy: - * according to an error analysis, the error is always less than - * 1 ulp (unit in the last place). - * - * Misc. info. - * For IEEE double - * if x > 7.09782712893383973096e+02 then expm1(x) overflow - * - * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough - * to produce the hexadecimal values shown. - */ - -#include -#include -#include -#include -#define one Q[0] -static const double - huge = 1.0e+300, - tiny = 1.0e-300, - o_threshold = 7.09782712893383973096e+02, /* 0x40862E42, 0xFEFA39EF */ - ln2_hi = 6.93147180369123816490e-01, /* 0x3fe62e42, 0xfee00000 */ - ln2_lo = 1.90821492927058770002e-10, /* 0x3dea39ef, 0x35793c76 */ - invln2 = 1.44269504088896338700e+00, /* 0x3ff71547, 0x652b82fe */ -/* scaled coefficients related to expm1 */ - Q[] = { 1.0, -3.33333333333331316428e-02, /* BFA11111 111110F4 */ - 1.58730158725481460165e-03, /* 3F5A01A0 19FE5585 */ - -7.93650757867487942473e-05, /* BF14CE19 9EAADBB7 */ - 4.00821782732936239552e-06, /* 3ED0CFCA 86E65239 */ - -2.01099218183624371326e-07 }; /* BE8AFDB7 6E09C32D */ - -double -__expm1 (double x) -{ - double y, hi, lo, c, t, e, hxs, hfx, r1, h2, h4, R1, R2, R3; - int32_t k, xsb; - u_int32_t hx; - - GET_HIGH_WORD (hx, x); - xsb = hx & 0x80000000; /* sign bit of x */ - if (xsb == 0) - y = x; - else - y = -x; /* y = |x| */ - hx &= 0x7fffffff; /* high word of |x| */ - - /* filter out huge and non-finite argument */ - if (hx >= 0x4043687A) /* if |x|>=56*ln2 */ - { - if (hx >= 0x40862E42) /* if |x|>=709.78... */ - { - if (hx >= 0x7ff00000) - { - u_int32_t low; - GET_LOW_WORD (low, x); - if (((hx & 0xfffff) | low) != 0) - return x + x; /* NaN */ - else - return (xsb == 0) ? x : -1.0; /* exp(+-inf)={inf,-1} */ - } - if (x > o_threshold) - { - __set_errno (ERANGE); - return huge * huge; /* overflow */ - } - } - if (xsb != 0) /* x < -56*ln2, return -1.0 with inexact */ - { - math_force_eval (x + tiny); /* raise inexact */ - return tiny - one; /* return -1 */ - } - } - - /* argument reduction */ - if (hx > 0x3fd62e42) /* if |x| > 0.5 ln2 */ - { - if (hx < 0x3FF0A2B2) /* and |x| < 1.5 ln2 */ - { - if (xsb == 0) - { - hi = x - ln2_hi; lo = ln2_lo; k = 1; - } - else - { - hi = x + ln2_hi; lo = -ln2_lo; k = -1; - } - } - else - { - k = invln2 * x + ((xsb == 0) ? 0.5 : -0.5); - t = k; - hi = x - t * ln2_hi; /* t*ln2_hi is exact here */ - lo = t * ln2_lo; - } - x = hi - lo; - c = (hi - x) - lo; - } - else if (hx < 0x3c900000) /* when |x|<2**-54, return x */ - { - math_check_force_underflow (x); - t = huge + x; /* return x with inexact flags when x!=0 */ - return x - (t - (huge + x)); - } - else - k = 0; - - /* x is now in primary range */ - hfx = 0.5 * x; - hxs = x * hfx; - R1 = one + hxs * Q[1]; h2 = hxs * hxs; - R2 = Q[2] + hxs * Q[3]; h4 = h2 * h2; - R3 = Q[4] + hxs * Q[5]; - r1 = R1 + h2 * R2 + h4 * R3; - t = 3.0 - r1 * hfx; - e = hxs * ((r1 - t) / (6.0 - x * t)); - if (k == 0) - return x - (x * e - hxs); /* c is 0 */ - else - { - e = (x * (e - c) - c); - e -= hxs; - if (k == -1) - return 0.5 * (x - e) - 0.5; - if (k == 1) - { - if (x < -0.25) - return -2.0 * (e - (x + 0.5)); - else - return one + 2.0 * (x - e); - } - if (k <= -2 || k > 56) /* suffice to return exp(x)-1 */ - { - u_int32_t high; - y = one - (e - x); - GET_HIGH_WORD (high, y); - SET_HIGH_WORD (y, high + (k << 20)); /* add k to y's exponent */ - return y - one; - } - t = one; - if (k < 20) - { - u_int32_t high; - SET_HIGH_WORD (t, 0x3ff00000 - (0x200000 >> k)); /* t=1-2^-k */ - y = t - (e - x); - GET_HIGH_WORD (high, y); - SET_HIGH_WORD (y, high + (k << 20)); /* add k to y's exponent */ - } - else - { - u_int32_t high; - SET_HIGH_WORD (t, ((0x3ff - k) << 20)); /* 2^-k */ - y = x - (e + t); - y += one; - GET_HIGH_WORD (high, y); - SET_HIGH_WORD (y, high + (k << 20)); /* add k to y's exponent */ - } - } - return y; -} -weak_alias (__expm1, expm1) -#ifdef NO_LONG_DOUBLE -strong_alias (__expm1, __expm1l) -weak_alias (__expm1, expm1l) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_fabs.c b/sysdeps/ieee754/dbl-64/s_fabs.c deleted file mode 100644 index 73c09a269e..0000000000 --- a/sysdeps/ieee754/dbl-64/s_fabs.c +++ /dev/null @@ -1,32 +0,0 @@ -/* @(#)s_fabs.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_fabs.c,v 1.7 1995/05/10 20:47:13 jtc Exp $"; -#endif - -/* - * fabs(x) returns the absolute value of x. - */ - -#include - -double -__fabs (double x) -{ - return __builtin_fabs (x); -} -weak_alias (__fabs, fabs) -#ifdef NO_LONG_DOUBLE -strong_alias (__fabs, __fabsl) -weak_alias (__fabs, fabsl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_finite.c b/sysdeps/ieee754/dbl-64/s_finite.c deleted file mode 100644 index 69141db75d..0000000000 --- a/sysdeps/ieee754/dbl-64/s_finite.c +++ /dev/null @@ -1,50 +0,0 @@ -/* @(#)s_finite.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_finite.c,v 1.8 1995/05/10 20:47:17 jtc Exp $"; -#endif - -/* - * finite(x) returns 1 is x is finite, else 0; - * no branching! - */ - -#include -#include -#include - -#undef __finite - -#ifndef FINITE -# define FINITE __finite -#endif - -int FINITE(double x) -{ - int32_t hx; - GET_HIGH_WORD (hx, x); - return (int) ((u_int32_t) ((hx & 0x7ff00000) - 0x7ff00000) >> 31); -} -hidden_def (__finite) -weak_alias (__finite, finite) -#ifdef NO_LONG_DOUBLE -# ifdef LDBL_CLASSIFY_COMPAT -# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23) -compat_symbol (libc, __finite, __finitel, GLIBC_2_0); -# endif -# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_23) -compat_symbol (libm, __finite, __finitel, GLIBC_2_1); -# endif -# endif -weak_alias (__finite, finitel) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_floor.c b/sysdeps/ieee754/dbl-64/s_floor.c deleted file mode 100644 index 8f86aa31ee..0000000000 --- a/sysdeps/ieee754/dbl-64/s_floor.c +++ /dev/null @@ -1,89 +0,0 @@ -/* @(#)s_floor.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * floor(x) - * Return x rounded toward -inf to integral value - * Method: - * Bit twiddling. - */ - -#include -#include - -double -__floor (double x) -{ - int32_t i0, i1, j0; - u_int32_t i, j; - EXTRACT_WORDS (i0, i1, x); - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - if (j0 < 20) - { - if (j0 < 0) - { - /* return 0*sign(x) if |x|<1 */ - if (i0 >= 0) - { - i0 = i1 = 0; - } - else if (((i0 & 0x7fffffff) | i1) != 0) - { - i0 = 0xbff00000; i1 = 0; - } - } - else - { - i = (0x000fffff) >> j0; - if (((i0 & i) | i1) == 0) - return x; /* x is integral */ - if (i0 < 0) - i0 += (0x00100000) >> j0; - i0 &= (~i); i1 = 0; - } - } - else if (j0 > 51) - { - if (j0 == 0x400) - return x + x; /* inf or NaN */ - else - return x; /* x is integral */ - } - else - { - i = ((u_int32_t) (0xffffffff)) >> (j0 - 20); - if ((i1 & i) == 0) - return x; /* x is integral */ - if (i0 < 0) - { - if (j0 == 20) - i0 += 1; - else - { - j = i1 + (1 << (52 - j0)); - if (j < i1) - i0 += 1; /* got a carry */ - i1 = j; - } - } - i1 &= (~i); - } - INSERT_WORDS (x, i0, i1); - return x; -} -#ifndef __floor -weak_alias (__floor, floor) -# ifdef NO_LONG_DOUBLE -strong_alias (__floor, __floorl) -weak_alias (__floor, floorl) -# endif -#endif diff --git a/sysdeps/ieee754/dbl-64/s_fma.c b/sysdeps/ieee754/dbl-64/s_fma.c deleted file mode 100644 index 68c8515fb1..0000000000 --- a/sysdeps/ieee754/dbl-64/s_fma.c +++ /dev/null @@ -1,301 +0,0 @@ -/* Compute x * y + z as ternary operation. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* This implementation uses rounding to odd to avoid problems with - double rounding. See a paper by Boldo and Melquiond: - http://www.lri.fr/~melquion/doc/08-tc.pdf */ - -double -__fma (double x, double y, double z) -{ - union ieee754_double u, v, w; - int adjust = 0; - u.d = x; - v.d = y; - w.d = z; - if (__builtin_expect (u.ieee.exponent + v.ieee.exponent - >= 0x7ff + IEEE754_DOUBLE_BIAS - DBL_MANT_DIG, 0) - || __builtin_expect (u.ieee.exponent >= 0x7ff - DBL_MANT_DIG, 0) - || __builtin_expect (v.ieee.exponent >= 0x7ff - DBL_MANT_DIG, 0) - || __builtin_expect (w.ieee.exponent >= 0x7ff - DBL_MANT_DIG, 0) - || __builtin_expect (u.ieee.exponent + v.ieee.exponent - <= IEEE754_DOUBLE_BIAS + DBL_MANT_DIG, 0)) - { - /* If z is Inf, but x and y are finite, the result should be - z rather than NaN. */ - if (w.ieee.exponent == 0x7ff - && u.ieee.exponent != 0x7ff - && v.ieee.exponent != 0x7ff) - return (z + x) + y; - /* If z is zero and x are y are nonzero, compute the result - as x * y to avoid the wrong sign of a zero result if x * y - underflows to 0. */ - if (z == 0 && x != 0 && y != 0) - return x * y; - /* If x or y or z is Inf/NaN, or if x * y is zero, compute as - x * y + z. */ - if (u.ieee.exponent == 0x7ff - || v.ieee.exponent == 0x7ff - || w.ieee.exponent == 0x7ff - || x == 0 - || y == 0) - return x * y + z; - /* If fma will certainly overflow, compute as x * y. */ - if (u.ieee.exponent + v.ieee.exponent > 0x7ff + IEEE754_DOUBLE_BIAS) - return x * y; - /* If x * y is less than 1/4 of DBL_TRUE_MIN, neither the - result nor whether there is underflow depends on its exact - value, only on its sign. */ - if (u.ieee.exponent + v.ieee.exponent - < IEEE754_DOUBLE_BIAS - DBL_MANT_DIG - 2) - { - int neg = u.ieee.negative ^ v.ieee.negative; - double tiny = neg ? -0x1p-1074 : 0x1p-1074; - if (w.ieee.exponent >= 3) - return tiny + z; - /* Scaling up, adding TINY and scaling down produces the - correct result, because in round-to-nearest mode adding - TINY has no effect and in other modes double rounding is - harmless. But it may not produce required underflow - exceptions. */ - v.d = z * 0x1p54 + tiny; - if (TININESS_AFTER_ROUNDING - ? v.ieee.exponent < 55 - : (w.ieee.exponent == 0 - || (w.ieee.exponent == 1 - && w.ieee.negative != neg - && w.ieee.mantissa1 == 0 - && w.ieee.mantissa0 == 0))) - { - double force_underflow = x * y; - math_force_eval (force_underflow); - } - return v.d * 0x1p-54; - } - if (u.ieee.exponent + v.ieee.exponent - >= 0x7ff + IEEE754_DOUBLE_BIAS - DBL_MANT_DIG) - { - /* Compute 1p-53 times smaller result and multiply - at the end. */ - if (u.ieee.exponent > v.ieee.exponent) - u.ieee.exponent -= DBL_MANT_DIG; - else - v.ieee.exponent -= DBL_MANT_DIG; - /* If x + y exponent is very large and z exponent is very small, - it doesn't matter if we don't adjust it. */ - if (w.ieee.exponent > DBL_MANT_DIG) - w.ieee.exponent -= DBL_MANT_DIG; - adjust = 1; - } - else if (w.ieee.exponent >= 0x7ff - DBL_MANT_DIG) - { - /* Similarly. - If z exponent is very large and x and y exponents are - very small, adjust them up to avoid spurious underflows, - rather than down. */ - if (u.ieee.exponent + v.ieee.exponent - <= IEEE754_DOUBLE_BIAS + 2 * DBL_MANT_DIG) - { - if (u.ieee.exponent > v.ieee.exponent) - u.ieee.exponent += 2 * DBL_MANT_DIG + 2; - else - v.ieee.exponent += 2 * DBL_MANT_DIG + 2; - } - else if (u.ieee.exponent > v.ieee.exponent) - { - if (u.ieee.exponent > DBL_MANT_DIG) - u.ieee.exponent -= DBL_MANT_DIG; - } - else if (v.ieee.exponent > DBL_MANT_DIG) - v.ieee.exponent -= DBL_MANT_DIG; - w.ieee.exponent -= DBL_MANT_DIG; - adjust = 1; - } - else if (u.ieee.exponent >= 0x7ff - DBL_MANT_DIG) - { - u.ieee.exponent -= DBL_MANT_DIG; - if (v.ieee.exponent) - v.ieee.exponent += DBL_MANT_DIG; - else - v.d *= 0x1p53; - } - else if (v.ieee.exponent >= 0x7ff - DBL_MANT_DIG) - { - v.ieee.exponent -= DBL_MANT_DIG; - if (u.ieee.exponent) - u.ieee.exponent += DBL_MANT_DIG; - else - u.d *= 0x1p53; - } - else /* if (u.ieee.exponent + v.ieee.exponent - <= IEEE754_DOUBLE_BIAS + DBL_MANT_DIG) */ - { - if (u.ieee.exponent > v.ieee.exponent) - u.ieee.exponent += 2 * DBL_MANT_DIG + 2; - else - v.ieee.exponent += 2 * DBL_MANT_DIG + 2; - if (w.ieee.exponent <= 4 * DBL_MANT_DIG + 6) - { - if (w.ieee.exponent) - w.ieee.exponent += 2 * DBL_MANT_DIG + 2; - else - w.d *= 0x1p108; - adjust = -1; - } - /* Otherwise x * y should just affect inexact - and nothing else. */ - } - x = u.d; - y = v.d; - z = w.d; - } - - /* Ensure correct sign of exact 0 + 0. */ - if (__glibc_unlikely ((x == 0 || y == 0) && z == 0)) - { - x = math_opt_barrier (x); - return x * y + z; - } - - fenv_t env; - libc_feholdexcept_setround (&env, FE_TONEAREST); - - /* Multiplication m1 + m2 = x * y using Dekker's algorithm. */ -#define C ((1 << (DBL_MANT_DIG + 1) / 2) + 1) - double x1 = x * C; - double y1 = y * C; - double m1 = x * y; - x1 = (x - x1) + x1; - y1 = (y - y1) + y1; - double x2 = x - x1; - double y2 = y - y1; - double m2 = (((x1 * y1 - m1) + x1 * y2) + x2 * y1) + x2 * y2; - - /* Addition a1 + a2 = z + m1 using Knuth's algorithm. */ - double a1 = z + m1; - double t1 = a1 - z; - double t2 = a1 - t1; - t1 = m1 - t1; - t2 = z - t2; - double a2 = t1 + t2; - /* Ensure the arithmetic is not scheduled after feclearexcept call. */ - math_force_eval (m2); - math_force_eval (a2); - feclearexcept (FE_INEXACT); - - /* If the result is an exact zero, ensure it has the correct sign. */ - if (a1 == 0 && m2 == 0) - { - libc_feupdateenv (&env); - /* Ensure that round-to-nearest value of z + m1 is not reused. */ - z = math_opt_barrier (z); - return z + m1; - } - - libc_fesetround (FE_TOWARDZERO); - - /* Perform m2 + a2 addition with round to odd. */ - u.d = a2 + m2; - - if (__glibc_unlikely (adjust < 0)) - { - if ((u.ieee.mantissa1 & 1) == 0) - u.ieee.mantissa1 |= libc_fetestexcept (FE_INEXACT) != 0; - v.d = a1 + u.d; - /* Ensure the addition is not scheduled after fetestexcept call. */ - math_force_eval (v.d); - } - - /* Reset rounding mode and test for inexact simultaneously. */ - int j = libc_feupdateenv_test (&env, FE_INEXACT) != 0; - - if (__glibc_likely (adjust == 0)) - { - if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7ff) - u.ieee.mantissa1 |= j; - /* Result is a1 + u.d. */ - return a1 + u.d; - } - else if (__glibc_likely (adjust > 0)) - { - if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7ff) - u.ieee.mantissa1 |= j; - /* Result is a1 + u.d, scaled up. */ - return (a1 + u.d) * 0x1p53; - } - else - { - /* If a1 + u.d is exact, the only rounding happens during - scaling down. */ - if (j == 0) - return v.d * 0x1p-108; - /* If result rounded to zero is not subnormal, no double - rounding will occur. */ - if (v.ieee.exponent > 108) - return (a1 + u.d) * 0x1p-108; - /* If v.d * 0x1p-108 with round to zero is a subnormal above - or equal to DBL_MIN / 2, then v.d * 0x1p-108 shifts mantissa - down just by 1 bit, which means v.ieee.mantissa1 |= j would - change the round bit, not sticky or guard bit. - v.d * 0x1p-108 never normalizes by shifting up, - so round bit plus sticky bit should be already enough - for proper rounding. */ - if (v.ieee.exponent == 108) - { - /* If the exponent would be in the normal range when - rounding to normal precision with unbounded exponent - range, the exact result is known and spurious underflows - must be avoided on systems detecting tininess after - rounding. */ - if (TININESS_AFTER_ROUNDING) - { - w.d = a1 + u.d; - if (w.ieee.exponent == 109) - return w.d * 0x1p-108; - } - /* v.ieee.mantissa1 & 2 is LSB bit of the result before rounding, - v.ieee.mantissa1 & 1 is the round bit and j is our sticky - bit. */ - w.d = 0.0; - w.ieee.mantissa1 = ((v.ieee.mantissa1 & 3) << 1) | j; - w.ieee.negative = v.ieee.negative; - v.ieee.mantissa1 &= ~3U; - v.d *= 0x1p-108; - w.d *= 0x1p-2; - return v.d + w.d; - } - v.ieee.mantissa1 |= j; - return v.d * 0x1p-108; - } -} -#ifndef __fma -weak_alias (__fma, fma) -#endif - -#ifdef NO_LONG_DOUBLE -strong_alias (__fma, __fmal) -weak_alias (__fmal, fmal) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_fmaf.c b/sysdeps/ieee754/dbl-64/s_fmaf.c deleted file mode 100644 index e6c0fed64d..0000000000 --- a/sysdeps/ieee754/dbl-64/s_fmaf.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Compute x * y + z as ternary operation. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* This implementation relies on double being more than twice as - precise as float and uses rounding to odd in order to avoid problems - with double rounding. - See a paper by Boldo and Melquiond: - http://www.lri.fr/~melquion/doc/08-tc.pdf */ - -float -__fmaf (float x, float y, float z) -{ - fenv_t env; - - /* Multiplication is always exact. */ - double temp = (double) x * (double) y; - - /* Ensure correct sign of an exact zero result by performing the - addition in the original rounding mode in that case. */ - if (temp == -z) - return (float) temp + z; - - union ieee754_double u; - - libc_feholdexcept_setround (&env, FE_TOWARDZERO); - - /* Perform addition with round to odd. */ - u.d = temp + (double) z; - /* Ensure the addition is not scheduled after fetestexcept call. */ - math_force_eval (u.d); - - /* Reset rounding mode and test for inexact simultaneously. */ - int j = libc_feupdateenv_test (&env, FE_INEXACT) != 0; - - if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7ff) - u.ieee.mantissa1 |= j; - - /* And finally truncation with round to nearest. */ - return (float) u.d; -} -#ifndef __fmaf -weak_alias (__fmaf, fmaf) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_fpclassify.c b/sysdeps/ieee754/dbl-64/s_fpclassify.c deleted file mode 100644 index 3fa9117ff0..0000000000 --- a/sysdeps/ieee754/dbl-64/s_fpclassify.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Return classification value corresponding to argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -int -__fpclassify (double x) -{ - u_int32_t hx, lx; - int retval = FP_NORMAL; - - EXTRACT_WORDS (hx, lx, x); - lx |= hx & 0xfffff; - hx &= 0x7ff00000; - if ((hx | lx) == 0) - retval = FP_ZERO; - else if (hx == 0) - retval = FP_SUBNORMAL; - else if (hx == 0x7ff00000) - retval = lx != 0 ? FP_NAN : FP_INFINITE; - - return retval; -} -libm_hidden_def (__fpclassify) diff --git a/sysdeps/ieee754/dbl-64/s_frexp.c b/sysdeps/ieee754/dbl-64/s_frexp.c deleted file mode 100644 index 874214ec7c..0000000000 --- a/sysdeps/ieee754/dbl-64/s_frexp.c +++ /dev/null @@ -1,58 +0,0 @@ -/* @(#)s_frexp.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_frexp.c,v 1.9 1995/05/10 20:47:24 jtc Exp $"; -#endif - -/* - * for non-zero x - * x = frexp(arg,&exp); - * return a double fp quantity x such that 0.5 <= |x| <1.0 - * and the corresponding binary exponent "exp". That is - * arg = x*2^exp. - * If arg is inf, 0.0, or NaN, then frexp(arg,&exp) returns arg - * with *exp=0. - */ - -#include -#include - -static const double - two54 = 1.80143985094819840000e+16; /* 0x43500000, 0x00000000 */ - -double -__frexp (double x, int *eptr) -{ - int32_t hx, ix, lx; - EXTRACT_WORDS (hx, lx, x); - ix = 0x7fffffff & hx; - *eptr = 0; - if (ix >= 0x7ff00000 || ((ix | lx) == 0)) - return x + x; /* 0,inf,nan */ - if (ix < 0x00100000) /* subnormal */ - { - x *= two54; - GET_HIGH_WORD (hx, x); - ix = hx & 0x7fffffff; - *eptr = -54; - } - *eptr += (ix >> 20) - 1022; - hx = (hx & 0x800fffff) | 0x3fe00000; - SET_HIGH_WORD (x, hx); - return x; -} -weak_alias (__frexp, frexp) -#ifdef NO_LONG_DOUBLE -strong_alias (__frexp, __frexpl) -weak_alias (__frexp, frexpl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_fromfp.c b/sysdeps/ieee754/dbl-64/s_fromfp.c deleted file mode 100644 index 92fbe0c162..0000000000 --- a/sysdeps/ieee754/dbl-64/s_fromfp.c +++ /dev/null @@ -1,7 +0,0 @@ -#define UNSIGNED 0 -#define INEXACT 0 -#define FUNC fromfp -#include -#ifdef NO_LONG_DOUBLE -weak_alias (fromfp, fromfpl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_fromfp_main.c b/sysdeps/ieee754/dbl-64/s_fromfp_main.c deleted file mode 100644 index ca0aa82092..0000000000 --- a/sysdeps/ieee754/dbl-64/s_fromfp_main.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Round to integer type. dbl-64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#define BIAS 0x3ff -#define MANT_DIG 53 - -#if UNSIGNED -# define RET_TYPE uintmax_t -#else -# define RET_TYPE intmax_t -#endif - -#include - -RET_TYPE -FUNC (double x, int round, unsigned int width) -{ - if (width > INTMAX_WIDTH) - width = INTMAX_WIDTH; - uint64_t ix; - EXTRACT_WORDS64 (ix, x); - bool negative = (ix & 0x8000000000000000ULL) != 0; - if (width == 0) - return fromfp_domain_error (negative, width); - ix &= 0x7fffffffffffffffULL; - if (ix == 0) - return 0; - int exponent = ix >> (MANT_DIG - 1); - exponent -= BIAS; - int max_exponent = fromfp_max_exponent (negative, width); - if (exponent > max_exponent) - return fromfp_domain_error (negative, width); - - ix &= ((1ULL << (MANT_DIG - 1)) - 1); - ix |= 1ULL << (MANT_DIG - 1); - uintmax_t uret; - bool half_bit, more_bits; - if (exponent >= MANT_DIG - 1) - { - uret = ix; - uret <<= exponent - (MANT_DIG - 1); - half_bit = false; - more_bits = false; - } - else if (exponent >= -1) - { - uint64_t h = 1ULL << (MANT_DIG - 2 - exponent); - half_bit = (ix & h) != 0; - more_bits = (ix & (h - 1)) != 0; - uret = ix >> (MANT_DIG - 1 - exponent); - } - else - { - uret = 0; - half_bit = false; - more_bits = true; - } - return fromfp_round_and_return (negative, uret, half_bit, more_bits, round, - exponent, max_exponent, width); -} diff --git a/sysdeps/ieee754/dbl-64/s_fromfpx.c b/sysdeps/ieee754/dbl-64/s_fromfpx.c deleted file mode 100644 index bbfb969813..0000000000 --- a/sysdeps/ieee754/dbl-64/s_fromfpx.c +++ /dev/null @@ -1,7 +0,0 @@ -#define UNSIGNED 0 -#define INEXACT 1 -#define FUNC fromfpx -#include -#ifdef NO_LONG_DOUBLE -weak_alias (fromfpx, fromfpxl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_getpayload.c b/sysdeps/ieee754/dbl-64/s_getpayload.c deleted file mode 100644 index 63288e0f45..0000000000 --- a/sysdeps/ieee754/dbl-64/s_getpayload.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Get NaN payload. dbl-64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -double -getpayload (const double *x) -{ - uint32_t hx, lx; - EXTRACT_WORDS (hx, lx, *x); - hx &= 0x7ffff; - uint64_t ix = ((uint64_t) hx << 32) | lx; - if (FIX_INT_FP_CONVERT_ZERO && ix == 0) - return 0.0f; - return (double) ix; -} -#ifdef NO_LONG_DOUBLE -weak_alias (getpayload, getpayloadl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_isinf.c b/sysdeps/ieee754/dbl-64/s_isinf.c deleted file mode 100644 index c0ad54538a..0000000000 --- a/sysdeps/ieee754/dbl-64/s_isinf.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changed to return -1 for -Inf by Ulrich Drepper . - * Public domain. - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_isinf.c,v 1.3 1995/05/11 23:20:14 jtc Exp $"; -#endif - -/* - * isinf(x) returns 1 is x is inf, -1 if x is -inf, else 0; - * no branching! - */ - -#include -#include -#include - -int -__isinf (double x) -{ - int32_t hx, lx; - EXTRACT_WORDS (hx, lx, x); - lx |= (hx & 0x7fffffff) ^ 0x7ff00000; - lx |= -lx; - return ~(lx >> 31) & (hx >> 30); -} -hidden_def (__isinf) -weak_alias (__isinf, isinf) -#ifdef NO_LONG_DOUBLE -# if defined LDBL_CLASSIFY_COMPAT && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23) -compat_symbol (libc, __isinf, __isinfl, GLIBC_2_0); -# endif -weak_alias (__isinf, isinfl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_isnan.c b/sysdeps/ieee754/dbl-64/s_isnan.c deleted file mode 100644 index 2174d988d8..0000000000 --- a/sysdeps/ieee754/dbl-64/s_isnan.c +++ /dev/null @@ -1,44 +0,0 @@ -/* @(#)s_isnan.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_isnan.c,v 1.8 1995/05/10 20:47:36 jtc Exp $"; -#endif - -/* - * isnan(x) returns 1 is x is nan, else 0; - * no branching! - */ - -#include -#include -#include - -#undef __isnan -int -__isnan (double x) -{ - int32_t hx, lx; - EXTRACT_WORDS (hx, lx, x); - hx &= 0x7fffffff; - hx |= (u_int32_t) (lx | (-lx)) >> 31; - hx = 0x7ff00000 - hx; - return (int) (((u_int32_t) hx) >> 31); -} -hidden_def (__isnan) -weak_alias (__isnan, isnan) -#ifdef NO_LONG_DOUBLE -# if defined LDBL_CLASSIFY_COMPAT && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -# endif -weak_alias (__isnan, isnanl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_issignaling.c b/sysdeps/ieee754/dbl-64/s_issignaling.c deleted file mode 100644 index 09e12f9a6a..0000000000 --- a/sysdeps/ieee754/dbl-64/s_issignaling.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Test for signaling NaN. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__issignaling (double x) -{ -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - u_int32_t hxi; - GET_HIGH_WORD (hxi, x); - /* We only have to care about the high-order bit of x's significand, because - having it set (sNaN) already makes the significand different from that - used to designate infinity. */ - return (hxi & 0x7ff80000) == 0x7ff80000; -#else - u_int32_t hxi, lxi; - EXTRACT_WORDS (hxi, lxi, x); - /* To keep the following comparison simple, toggle the quiet/signaling bit, - so that it is set for sNaNs. This is inverse to IEEE 754-2008 (as well as - common practice for IEEE 754-1985). */ - hxi ^= 0x00080000; - /* If lxi != 0, then set any suitable bit of the significand in hxi. */ - hxi |= (lxi | -lxi) >> 31; - /* We have to compare for greater (instead of greater or equal), because x's - significand being all-zero designates infinity not NaN. */ - return (hxi & 0x7fffffff) > 0x7ff80000; -#endif -} -libm_hidden_def (__issignaling) diff --git a/sysdeps/ieee754/dbl-64/s_llrint.c b/sysdeps/ieee754/dbl-64/s_llrint.c deleted file mode 100644 index 08781c3acd..0000000000 --- a/sysdeps/ieee754/dbl-64/s_llrint.c +++ /dev/null @@ -1,103 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -static const double two52[2] = -{ - 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ - -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ -}; - - -long long int -__llrint (double x) -{ - int32_t j0; - u_int32_t i1, i0; - long long int result; - double w; - double t; - int sx; - - EXTRACT_WORDS (i0, i1, x); - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - sx = i0 >> 31; - i0 &= 0xfffff; - i0 |= 0x100000; - - if (j0 < 20) - { - w = math_narrow_eval (two52[sx] + x); - t = w - two52[sx]; - EXTRACT_WORDS (i0, i1, t); - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - i0 &= 0xfffff; - i0 |= 0x100000; - - result = (j0 < 0 ? 0 : i0 >> (20 - j0)); - } - else if (j0 < (int32_t) (8 * sizeof (long long int)) - 1) - { - if (j0 >= 52) - result = (((long long int) i0 << 32) | i1) << (j0 - 52); - else - { - w = math_narrow_eval (two52[sx] + x); - t = w - two52[sx]; - EXTRACT_WORDS (i0, i1, t); - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - i0 &= 0xfffff; - i0 |= 0x100000; - - if (j0 == 20) - result = (long long int) i0; - else - result = ((long long int) i0 << (j0 - 20)) | (i1 >> (52 - j0)); - } - } - else - { -#ifdef FE_INVALID - /* The number is too large. Unless it rounds to LLONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ - if (FIX_DBL_LLONG_CONVERT_OVERFLOW && x != (double) LLONG_MIN) - { - feraiseexcept (FE_INVALID); - return sx == 0 ? LLONG_MAX : LLONG_MIN; - } -#endif - return (long long int) x; - } - - return sx ? -result : result; -} - -weak_alias (__llrint, llrint) -#ifdef NO_LONG_DOUBLE -strong_alias (__llrint, __llrintl) -weak_alias (__llrint, llrintl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_llround.c b/sysdeps/ieee754/dbl-64/s_llround.c deleted file mode 100644 index 8790e9df57..0000000000 --- a/sysdeps/ieee754/dbl-64/s_llround.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Round double value to long long int. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - - -long long int -__llround (double x) -{ - int32_t j0; - u_int32_t i1, i0; - long long int result; - int sign; - - EXTRACT_WORDS (i0, i1, x); - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - sign = (i0 & 0x80000000) != 0 ? -1 : 1; - i0 &= 0xfffff; - i0 |= 0x100000; - - if (j0 < 20) - { - if (j0 < 0) - return j0 < -1 ? 0 : sign; - else - { - i0 += 0x80000 >> j0; - - result = i0 >> (20 - j0); - } - } - else if (j0 < (int32_t) (8 * sizeof (long long int)) - 1) - { - if (j0 >= 52) - result = (((long long int) i0 << 32) | i1) << (j0 - 52); - else - { - u_int32_t j = i1 + (0x80000000 >> (j0 - 20)); - if (j < i1) - ++i0; - - if (j0 == 20) - result = (long long int) i0; - else - result = ((long long int) i0 << (j0 - 20)) | (j >> (52 - j0)); - } - } - else - { -#ifdef FE_INVALID - /* The number is too large. Unless it rounds to LLONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ - if (FIX_DBL_LLONG_CONVERT_OVERFLOW && x != (double) LLONG_MIN) - { - feraiseexcept (FE_INVALID); - return sign == 1 ? LLONG_MAX : LLONG_MIN; - } -#endif - return (long long int) x; - } - - return sign * result; -} - -weak_alias (__llround, llround) -#ifdef NO_LONG_DOUBLE -strong_alias (__llround, __llroundl) -weak_alias (__llround, llroundl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_log1p.c b/sysdeps/ieee754/dbl-64/s_log1p.c deleted file mode 100644 index 340f6377f7..0000000000 --- a/sysdeps/ieee754/dbl-64/s_log1p.c +++ /dev/null @@ -1,195 +0,0 @@ -/* @(#)s_log1p.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ -/* Modified by Naohiko Shimizu/Tokai University, Japan 1997/08/25, - for performance improvement on pipelined processors. - */ - -/* double log1p(double x) - * - * Method : - * 1. Argument Reduction: find k and f such that - * 1+x = 2^k * (1+f), - * where sqrt(2)/2 < 1+f < sqrt(2) . - * - * Note. If k=0, then f=x is exact. However, if k!=0, then f - * may not be representable exactly. In that case, a correction - * term is need. Let u=1+x rounded. Let c = (1+x)-u, then - * log(1+x) - log(u) ~ c/u. Thus, we proceed to compute log(u), - * and add back the correction term c/u. - * (Note: when x > 2**53, one can simply return log(x)) - * - * 2. Approximation of log1p(f). - * Let s = f/(2+f) ; based on log(1+f) = log(1+s) - log(1-s) - * = 2s + 2/3 s**3 + 2/5 s**5 + ....., - * = 2s + s*R - * We use a special Reme algorithm on [0,0.1716] to generate - * a polynomial of degree 14 to approximate R The maximum error - * of this polynomial approximation is bounded by 2**-58.45. In - * other words, - * 2 4 6 8 10 12 14 - * R(z) ~ Lp1*s +Lp2*s +Lp3*s +Lp4*s +Lp5*s +Lp6*s +Lp7*s - * (the values of Lp1 to Lp7 are listed in the program) - * and - * | 2 14 | -58.45 - * | Lp1*s +...+Lp7*s - R(z) | <= 2 - * | | - * Note that 2s = f - s*f = f - hfsq + s*hfsq, where hfsq = f*f/2. - * In order to guarantee error in log below 1ulp, we compute log - * by - * log1p(f) = f - (hfsq - s*(hfsq+R)). - * - * 3. Finally, log1p(x) = k*ln2 + log1p(f). - * = k*ln2_hi+(f-(hfsq-(s*(hfsq+R)+k*ln2_lo))) - * Here ln2 is split into two floating point number: - * ln2_hi + ln2_lo, - * where n*ln2_hi is always exact for |n| < 2000. - * - * Special cases: - * log1p(x) is NaN with signal if x < -1 (including -INF) ; - * log1p(+INF) is +INF; log1p(-1) is -INF with signal; - * log1p(NaN) is that NaN with no signal. - * - * Accuracy: - * according to an error analysis, the error is always less than - * 1 ulp (unit in the last place). - * - * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough - * to produce the hexadecimal values shown. - * - * Note: Assuming log() return accurate answer, the following - * algorithm can be used to compute log1p(x) to within a few ULP: - * - * u = 1+x; - * if(u==1.0) return x ; else - * return log(u)*(x/(u-1.0)); - * - * See HP-15C Advanced Functions Handbook, p.193. - */ - -#include -#include -#include - -static const double - ln2_hi = 6.93147180369123816490e-01, /* 3fe62e42 fee00000 */ - ln2_lo = 1.90821492927058770002e-10, /* 3dea39ef 35793c76 */ - two54 = 1.80143985094819840000e+16, /* 43500000 00000000 */ - Lp[] = { 0.0, 6.666666666666735130e-01, /* 3FE55555 55555593 */ - 3.999999999940941908e-01, /* 3FD99999 9997FA04 */ - 2.857142874366239149e-01, /* 3FD24924 94229359 */ - 2.222219843214978396e-01, /* 3FCC71C5 1D8E78AF */ - 1.818357216161805012e-01, /* 3FC74664 96CB03DE */ - 1.531383769920937332e-01, /* 3FC39A09 D078C69F */ - 1.479819860511658591e-01 }; /* 3FC2F112 DF3E5244 */ - -static const double zero = 0.0; - -double -__log1p (double x) -{ - double hfsq, f, c, s, z, R, u, z2, z4, z6, R1, R2, R3, R4; - int32_t k, hx, hu, ax; - - GET_HIGH_WORD (hx, x); - ax = hx & 0x7fffffff; - - k = 1; - if (hx < 0x3FDA827A) /* x < 0.41422 */ - { - if (__glibc_unlikely (ax >= 0x3ff00000)) /* x <= -1.0 */ - { - if (x == -1.0) - return -two54 / zero; /* log1p(-1)=-inf */ - else - return (x - x) / (x - x); /* log1p(x<-1)=NaN */ - } - if (__glibc_unlikely (ax < 0x3e200000)) /* |x| < 2**-29 */ - { - math_force_eval (two54 + x); /* raise inexact */ - if (ax < 0x3c900000) /* |x| < 2**-54 */ - { - math_check_force_underflow (x); - return x; - } - else - return x - x * x * 0.5; - } - if (hx > 0 || hx <= ((int32_t) 0xbfd2bec3)) - { - k = 0; f = x; hu = 1; - } /* -0.2929= 0x7ff00000)) - return x + x; - if (k != 0) - { - if (hx < 0x43400000) - { - u = 1.0 + x; - GET_HIGH_WORD (hu, u); - k = (hu >> 20) - 1023; - c = (k > 0) ? 1.0 - (u - x) : x - (u - 1.0); /* correction term */ - c /= u; - } - else - { - u = x; - GET_HIGH_WORD (hu, u); - k = (hu >> 20) - 1023; - c = 0; - } - hu &= 0x000fffff; - if (hu < 0x6a09e) - { - SET_HIGH_WORD (u, hu | 0x3ff00000); /* normalize u */ - } - else - { - k += 1; - SET_HIGH_WORD (u, hu | 0x3fe00000); /* normalize u/2 */ - hu = (0x00100000 - hu) >> 2; - } - f = u - 1.0; - } - hfsq = 0.5 * f * f; - if (hu == 0) /* |f| < 2**-20 */ - { - if (f == zero) - { - if (k == 0) - return zero; - else - { - c += k * ln2_lo; return k * ln2_hi + c; - } - } - R = hfsq * (1.0 - 0.66666666666666666 * f); - if (k == 0) - return f - R; - else - return k * ln2_hi - ((R - (k * ln2_lo + c)) - f); - } - s = f / (2.0 + f); - z = s * s; - R1 = z * Lp[1]; z2 = z * z; - R2 = Lp[2] + z * Lp[3]; z4 = z2 * z2; - R3 = Lp[4] + z * Lp[5]; z6 = z4 * z2; - R4 = Lp[6] + z * Lp[7]; - R = R1 + z2 * R2 + z4 * R3 + z6 * R4; - if (k == 0) - return f - (hfsq - s * (hfsq + R)); - else - return k * ln2_hi - ((hfsq - (s * (hfsq + R) + (k * ln2_lo + c))) - f); -} diff --git a/sysdeps/ieee754/dbl-64/s_logb.c b/sysdeps/ieee754/dbl-64/s_logb.c deleted file mode 100644 index 3a26b18f78..0000000000 --- a/sysdeps/ieee754/dbl-64/s_logb.c +++ /dev/null @@ -1,52 +0,0 @@ -/* @(#)s_logb.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * double logb(x) - * IEEE 754 logb. Included to pass IEEE test suite. Not recommend. - * Use ilogb instead. - */ - -#include -#include -#include - -double -__logb (double x) -{ - int32_t lx, ix, rix; - - EXTRACT_WORDS (ix, lx, x); - ix &= 0x7fffffff; /* high |x| */ - if ((ix | lx) == 0) - return -1.0 / fabs (x); - if (ix >= 0x7ff00000) - return x * x; - if (__glibc_unlikely ((rix = ix >> 20) == 0)) - { - /* POSIX specifies that denormal number is treated as - though it were normalized. */ - int ma; - if (ix == 0) - ma = __builtin_clz (lx) + 32; - else - ma = __builtin_clz (ix); - rix -= ma - 12; - } - if (FIX_INT_FP_CONVERT_ZERO && rix == 1023) - return 0.0; - return (double) (rix - 1023); -} -weak_alias (__logb, logb) -#ifdef NO_LONG_DOUBLE -strong_alias (__logb, __logbl) weak_alias (__logb, logbl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_lrint.c b/sysdeps/ieee754/dbl-64/s_lrint.c deleted file mode 100644 index ac610bfbd0..0000000000 --- a/sysdeps/ieee754/dbl-64/s_lrint.c +++ /dev/null @@ -1,127 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -static const double two52[2] = -{ - 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ - -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ -}; - - -long int -__lrint (double x) -{ - int32_t j0; - u_int32_t i0, i1; - double w; - double t; - long int result; - int sx; - - EXTRACT_WORDS (i0, i1, x); - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - sx = i0 >> 31; - i0 &= 0xfffff; - i0 |= 0x100000; - - if (j0 < 20) - { - w = math_narrow_eval (two52[sx] + x); - t = w - two52[sx]; - EXTRACT_WORDS (i0, i1, t); - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - i0 &= 0xfffff; - i0 |= 0x100000; - - result = (j0 < 0 ? 0 : i0 >> (20 - j0)); - } - else if (j0 < (int32_t) (8 * sizeof (long int)) - 1) - { - if (j0 >= 52) - result = ((long int) i0 << (j0 - 20)) | ((long int) i1 << (j0 - 52)); - else - { -#if defined FE_INVALID || defined FE_INEXACT - /* X < LONG_MAX + 1 implied by J0 < 31. */ - if (sizeof (long int) == 4 - && x > (double) LONG_MAX) - { - /* In the event of overflow we must raise the "invalid" - exception, but not "inexact". */ - t = __nearbyint (x); - feraiseexcept (t == LONG_MAX ? FE_INEXACT : FE_INVALID); - } - else -#endif - { - w = math_narrow_eval (two52[sx] + x); - t = w - two52[sx]; - } - EXTRACT_WORDS (i0, i1, t); - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - i0 &= 0xfffff; - i0 |= 0x100000; - - if (j0 == 20) - result = (long int) i0; - else - result = ((long int) i0 << (j0 - 20)) | (i1 >> (52 - j0)); - } - } - else - { - /* The number is too large. Unless it rounds to LONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ -#if defined FE_INVALID || defined FE_INEXACT - if (sizeof (long int) == 4 - && x < (double) LONG_MIN - && x > (double) LONG_MIN - 1.0) - { - /* If truncation produces LONG_MIN, the cast will not raise - the exception, but may raise "inexact". */ - t = __nearbyint (x); - feraiseexcept (t == LONG_MIN ? FE_INEXACT : FE_INVALID); - return LONG_MIN; - } - else if (FIX_DBL_LONG_CONVERT_OVERFLOW && x != (double) LONG_MIN) - { - feraiseexcept (FE_INVALID); - return sx == 0 ? LONG_MAX : LONG_MIN; - } -#endif - return (long int) x; - } - - return sx ? -result : result; -} - -weak_alias (__lrint, lrint) -#ifdef NO_LONG_DOUBLE -strong_alias (__lrint, __lrintl) -weak_alias (__lrint, lrintl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_lround.c b/sysdeps/ieee754/dbl-64/s_lround.c deleted file mode 100644 index df4775e344..0000000000 --- a/sysdeps/ieee754/dbl-64/s_lround.c +++ /dev/null @@ -1,113 +0,0 @@ -/* Round double value to long int. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - - -long int -__lround (double x) -{ - int32_t j0; - u_int32_t i1, i0; - long int result; - int sign; - - EXTRACT_WORDS (i0, i1, x); - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - sign = (i0 & 0x80000000) != 0 ? -1 : 1; - i0 &= 0xfffff; - i0 |= 0x100000; - - if (j0 < 20) - { - if (j0 < 0) - return j0 < -1 ? 0 : sign; - else - { - i0 += 0x80000 >> j0; - - result = i0 >> (20 - j0); - } - } - else if (j0 < (int32_t) (8 * sizeof (long int)) - 1) - { - if (j0 >= 52) - result = ((long int) i0 << (j0 - 20)) | ((long int) i1 << (j0 - 52)); - else - { - u_int32_t j = i1 + (0x80000000 >> (j0 - 20)); - if (j < i1) - ++i0; - - if (j0 == 20) - result = (long int) i0; - else - { - result = ((long int) i0 << (j0 - 20)) | (j >> (52 - j0)); -#ifdef FE_INVALID - if (sizeof (long int) == 4 - && sign == 1 - && result == LONG_MIN) - /* Rounding brought the value out of range. */ - feraiseexcept (FE_INVALID); -#endif - } - } - } - else - { - /* The number is too large. Unless it rounds to LONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ -#ifdef FE_INVALID - if (FIX_DBL_LONG_CONVERT_OVERFLOW - && !(sign == -1 - && (sizeof (long int) == 4 - ? x > (double) LONG_MIN - 0.5 - : x >= (double) LONG_MIN))) - { - feraiseexcept (FE_INVALID); - return sign == 1 ? LONG_MAX : LONG_MIN; - } - else if (!FIX_DBL_LONG_CONVERT_OVERFLOW - && sizeof (long int) == 4 - && x <= (double) LONG_MIN - 0.5) - { - /* If truncation produces LONG_MIN, the cast will not raise - the exception, but may raise "inexact". */ - feraiseexcept (FE_INVALID); - return LONG_MIN; - } -#endif - return (long int) x; - } - - return sign * result; -} - -weak_alias (__lround, lround) -#ifdef NO_LONG_DOUBLE -strong_alias (__lround, __lroundl) -weak_alias (__lround, lroundl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_modf.c b/sysdeps/ieee754/dbl-64/s_modf.c deleted file mode 100644 index 0a1e13008f..0000000000 --- a/sysdeps/ieee754/dbl-64/s_modf.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * modf(double x, double *iptr) - * return fraction part of x, and return x's integral part in *iptr. - * Method: - * Bit twiddling. - * - * Exception: - * No exception. - */ - -#include -#include - -static const double one = 1.0; - -double -__modf (double x, double *iptr) -{ - int32_t i0, i1, j0; - u_int32_t i; - EXTRACT_WORDS (i0, i1, x); - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; /* exponent of x */ - if (j0 < 20) /* integer part in high x */ - { - if (j0 < 0) /* |x|<1 */ - { - INSERT_WORDS (*iptr, i0 & 0x80000000, 0); /* *iptr = +-0 */ - return x; - } - else - { - i = (0x000fffff) >> j0; - if (((i0 & i) | i1) == 0) /* x is integral */ - { - *iptr = x; - INSERT_WORDS (x, i0 & 0x80000000, 0); /* return +-0 */ - return x; - } - else - { - INSERT_WORDS (*iptr, i0 & (~i), 0); - return x - *iptr; - } - } - } - else if (__glibc_unlikely (j0 > 51)) /* no fraction part */ - { - *iptr = x * one; - /* We must handle NaNs separately. */ - if (j0 == 0x400 && ((i0 & 0xfffff) | i1)) - return x * one; - INSERT_WORDS (x, i0 & 0x80000000, 0); /* return +-0 */ - return x; - } - else /* fraction part in low x */ - { - i = ((u_int32_t) (0xffffffff)) >> (j0 - 20); - if ((i1 & i) == 0) /* x is integral */ - { - *iptr = x; - INSERT_WORDS (x, i0 & 0x80000000, 0); /* return +-0 */ - return x; - } - else - { - INSERT_WORDS (*iptr, i0, i1 & (~i)); - return x - *iptr; - } - } -} -weak_alias (__modf, modf) -#ifdef NO_LONG_DOUBLE -strong_alias (__modf, __modfl) -weak_alias (__modf, modfl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_nearbyint.c b/sysdeps/ieee754/dbl-64/s_nearbyint.c deleted file mode 100644 index dec0c5d6ee..0000000000 --- a/sysdeps/ieee754/dbl-64/s_nearbyint.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Adapted for use as nearbyint by Ulrich Drepper . */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_rint.c,v 1.8 1995/05/10 20:48:04 jtc Exp $"; -#endif - -/* - * rint(x) - * Return x rounded to integral value according to the prevailing - * rounding mode. - * Method: - * Using floating addition. - * Exception: - * Inexact flag raised if x not equal to rint(x). - */ - -#include -#include -#include - -static const double - TWO52[2] = { - 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ - -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ -}; - -double -__nearbyint (double x) -{ - fenv_t env; - int32_t i0, j0, sx; - double w, t; - GET_HIGH_WORD (i0, x); - sx = (i0 >> 31) & 1; - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - if (j0 < 52) - { - if (j0 < 0) - { - libc_feholdexcept (&env); - w = TWO52[sx] + x; - t = w - TWO52[sx]; - math_force_eval (t); - libc_fesetenv (&env); - GET_HIGH_WORD (i0, t); - SET_HIGH_WORD (t, (i0 & 0x7fffffff) | (sx << 31)); - return t; - } - } - else - { - if (j0 == 0x400) - return x + x; /* inf or NaN */ - else - return x; /* x is integral */ - } - libc_feholdexcept (&env); - w = TWO52[sx] + x; - t = w - TWO52[sx]; - math_force_eval (t); - libc_fesetenv (&env); - return t; -} -weak_alias (__nearbyint, nearbyint) -#ifdef NO_LONG_DOUBLE -strong_alias (__nearbyint, __nearbyintl) -weak_alias (__nearbyint, nearbyintl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_nexttoward.c b/sysdeps/ieee754/dbl-64/s_nexttoward.c deleted file mode 100644 index c68ba98cb3..0000000000 --- a/sysdeps/ieee754/dbl-64/s_nexttoward.c +++ /dev/null @@ -1 +0,0 @@ -/* This function is the same as nextafter so we use an alias there. */ diff --git a/sysdeps/ieee754/dbl-64/s_nextup.c b/sysdeps/ieee754/dbl-64/s_nextup.c deleted file mode 100644 index 983bd662b7..0000000000 --- a/sysdeps/ieee754/dbl-64/s_nextup.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Return the least floating-point number greater than X. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Return the least floating-point number greater than X. */ -double -__nextup (double x) -{ - int32_t hx, ix; - u_int32_t lx; - - EXTRACT_WORDS (hx, lx, x); - ix = hx & 0x7fffffff; - - if (((ix >= 0x7ff00000) && ((ix - 0x7ff00000) | lx) != 0)) /* x is nan. */ - return x + x; - if ((ix | lx) == 0) - return DBL_TRUE_MIN; - if (hx >= 0) - { /* x > 0. */ - if (isinf (x)) - return x; - lx += 1; - if (lx == 0) - hx += 1; - } - else - { /* x < 0. */ - if (lx == 0) - hx -= 1; - lx -= 1; - } - INSERT_WORDS (x, hx, lx); - return x; -} - -weak_alias (__nextup, nextup) -#ifdef NO_LONG_DOUBLE -strong_alias (__nextup, __nextupl) -weak_alias (__nextup, nextupl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_remquo.c b/sysdeps/ieee754/dbl-64/s_remquo.c deleted file mode 100644 index 2693c0e62c..0000000000 --- a/sysdeps/ieee754/dbl-64/s_remquo.c +++ /dev/null @@ -1,115 +0,0 @@ -/* Compute remainder and a congruent to the quotient. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -static const double zero = 0.0; - - -double -__remquo (double x, double y, int *quo) -{ - int32_t hx, hy; - u_int32_t sx, lx, ly; - int cquo, qs; - - EXTRACT_WORDS (hx, lx, x); - EXTRACT_WORDS (hy, ly, y); - sx = hx & 0x80000000; - qs = sx ^ (hy & 0x80000000); - hy &= 0x7fffffff; - hx &= 0x7fffffff; - - /* Purge off exception values. */ - if ((hy | ly) == 0) - return (x * y) / (x * y); /* y = 0 */ - if ((hx >= 0x7ff00000) /* x not finite */ - || ((hy >= 0x7ff00000) /* p is NaN */ - && (((hy - 0x7ff00000) | ly) != 0))) - return (x * y) / (x * y); - - if (hy <= 0x7fbfffff) - x = __ieee754_fmod (x, 8 * y); /* now x < 8y */ - - if (((hx - hy) | (lx - ly)) == 0) - { - *quo = qs ? -1 : 1; - return zero * x; - } - - x = fabs (x); - y = fabs (y); - cquo = 0; - - if (hy <= 0x7fcfffff && x >= 4 * y) - { - x -= 4 * y; - cquo += 4; - } - if (hy <= 0x7fdfffff && x >= 2 * y) - { - x -= 2 * y; - cquo += 2; - } - - if (hy < 0x00200000) - { - if (x + x > y) - { - x -= y; - ++cquo; - if (x + x >= y) - { - x -= y; - ++cquo; - } - } - } - else - { - double y_half = 0.5 * y; - if (x > y_half) - { - x -= y; - ++cquo; - if (x >= y_half) - { - x -= y; - ++cquo; - } - } - } - - *quo = qs ? -cquo : cquo; - - /* Ensure correct sign of zero result in round-downward mode. */ - if (x == 0.0) - x = 0.0; - if (sx) - x = -x; - return x; -} -weak_alias (__remquo, remquo) -#ifdef NO_LONG_DOUBLE -strong_alias (__remquo, __remquol) -weak_alias (__remquo, remquol) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_rint.c b/sysdeps/ieee754/dbl-64/s_rint.c deleted file mode 100644 index a9c0d27842..0000000000 --- a/sysdeps/ieee754/dbl-64/s_rint.c +++ /dev/null @@ -1,67 +0,0 @@ -/* @(#)s_rint.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * rint(x) - * Return x rounded to integral value according to the prevailing - * rounding mode. - * Method: - * Using floating addition. - * Exception: - * Inexact flag raised if x not equal to rint(x). - */ - -#include -#include - -static const double - TWO52[2] = { - 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ - -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ -}; - -double -__rint (double x) -{ - int32_t i0, j0, sx; - double w, t; - GET_HIGH_WORD (i0, x); - sx = (i0 >> 31) & 1; - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - if (j0 < 52) - { - if (j0 < 0) - { - w = TWO52[sx] + x; - t = w - TWO52[sx]; - GET_HIGH_WORD (i0, t); - SET_HIGH_WORD (t, (i0 & 0x7fffffff) | (sx << 31)); - return t; - } - } - else - { - if (j0 == 0x400) - return x + x; /* inf or NaN */ - else - return x; /* x is integral */ - } - w = TWO52[sx] + x; - return w - TWO52[sx]; -} -#ifndef __rint -weak_alias (__rint, rint) -# ifdef NO_LONG_DOUBLE -strong_alias (__rint, __rintl) -weak_alias (__rint, rintl) -# endif -#endif diff --git a/sysdeps/ieee754/dbl-64/s_round.c b/sysdeps/ieee754/dbl-64/s_round.c deleted file mode 100644 index 390e3f7180..0000000000 --- a/sysdeps/ieee754/dbl-64/s_round.c +++ /dev/null @@ -1,83 +0,0 @@ -/* Round double to integer away from zero. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -double -__round (double x) -{ - int32_t i0, j0; - u_int32_t i1; - - EXTRACT_WORDS (i0, i1, x); - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - if (j0 < 20) - { - if (j0 < 0) - { - i0 &= 0x80000000; - if (j0 == -1) - i0 |= 0x3ff00000; - i1 = 0; - } - else - { - u_int32_t i = 0x000fffff >> j0; - if (((i0 & i) | i1) == 0) - /* X is integral. */ - return x; - - i0 += 0x00080000 >> j0; - i0 &= ~i; - i1 = 0; - } - } - else if (j0 > 51) - { - if (j0 == 0x400) - /* Inf or NaN. */ - return x + x; - else - return x; - } - else - { - u_int32_t i = 0xffffffff >> (j0 - 20); - if ((i1 & i) == 0) - /* X is integral. */ - return x; - - u_int32_t j = i1 + (1 << (51 - j0)); - if (j < i1) - i0 += 1; - i1 = j; - i1 &= ~i; - } - - INSERT_WORDS (x, i0, i1); - return x; -} -weak_alias (__round, round) -#ifdef NO_LONG_DOUBLE -strong_alias (__round, __roundl) -weak_alias (__round, roundl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_roundeven.c b/sysdeps/ieee754/dbl-64/s_roundeven.c deleted file mode 100644 index 78d81a070c..0000000000 --- a/sysdeps/ieee754/dbl-64/s_roundeven.c +++ /dev/null @@ -1,106 +0,0 @@ -/* Round to nearest integer value, rounding halfway cases to even. - dbl-64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define BIAS 0x3ff -#define MANT_DIG 53 -#define MAX_EXP (2 * BIAS + 1) - -double -roundeven (double x) -{ - uint32_t hx, lx, uhx; - EXTRACT_WORDS (hx, lx, x); - uhx = hx & 0x7fffffff; - int exponent = uhx >> (MANT_DIG - 1 - 32); - if (exponent >= BIAS + MANT_DIG - 1) - { - /* Integer, infinity or NaN. */ - if (exponent == MAX_EXP) - /* Infinity or NaN; quiet signaling NaNs. */ - return x + x; - else - return x; - } - else if (exponent >= BIAS + MANT_DIG - 32) - { - /* Not necessarily an integer; integer bit is in low word. - Locate the bits with exponents 0 and -1. */ - int int_pos = (BIAS + MANT_DIG - 1) - exponent; - int half_pos = int_pos - 1; - uint32_t half_bit = 1U << half_pos; - uint32_t int_bit = 1U << int_pos; - if ((lx & (int_bit | (half_bit - 1))) != 0) - { - /* Carry into the exponent works correctly. No need to test - whether HALF_BIT is set. */ - lx += half_bit; - hx += lx < half_bit; - } - lx &= ~(int_bit - 1); - } - else if (exponent == BIAS + MANT_DIG - 33) - { - /* Not necessarily an integer; integer bit is bottom of high - word, half bit is top of low word. */ - if (((hx & 1) | (lx & 0x7fffffff)) != 0) - { - lx += 0x80000000; - hx += lx < 0x80000000; - } - lx = 0; - } - else if (exponent >= BIAS) - { - /* At least 1; not necessarily an integer, integer bit and half - bit are in the high word. Locate the bits with exponents 0 - and -1 (when the unbiased exponent is 0, the bit with - exponent 0 is implicit, but as the bias is odd it is OK to - take it from the low bit of the exponent). */ - int int_pos = (BIAS + MANT_DIG - 33) - exponent; - int half_pos = int_pos - 1; - uint32_t half_bit = 1U << half_pos; - uint32_t int_bit = 1U << int_pos; - if (((hx & (int_bit | (half_bit - 1))) | lx) != 0) - hx += half_bit; - hx &= ~(int_bit - 1); - lx = 0; - } - else if (exponent == BIAS - 1 && (uhx > 0x3fe00000 || lx != 0)) - { - /* Interval (0.5, 1). */ - hx = (hx & 0x80000000) | 0x3ff00000; - lx = 0; - } - else - { - /* Rounds to 0. */ - hx &= 0x80000000; - lx = 0; - } - INSERT_WORDS (x, hx, lx); - return x; -} -hidden_def (roundeven) -#ifdef NO_LONG_DOUBLE -weak_alias (roundeven, roundevenl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_scalbln.c b/sysdeps/ieee754/dbl-64/s_scalbln.c deleted file mode 100644 index 32cd12e3b0..0000000000 --- a/sysdeps/ieee754/dbl-64/s_scalbln.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * scalbn (double x, int n) - * scalbn(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include -#include - -static const double - two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */ - twom54 = 5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */ - huge = 1.0e+300, - tiny = 1.0e-300; - -double -__scalbln (double x, long int n) -{ - int32_t k, hx, lx; - EXTRACT_WORDS (hx, lx, x); - k = (hx & 0x7ff00000) >> 20; /* extract exponent */ - if (__glibc_unlikely (k == 0)) /* 0 or subnormal x */ - { - if ((lx | (hx & 0x7fffffff)) == 0) - return x; /* +-0 */ - x *= two54; - GET_HIGH_WORD (hx, x); - k = ((hx & 0x7ff00000) >> 20) - 54; - } - if (__glibc_unlikely (k == 0x7ff)) - return x + x; /* NaN or Inf */ - if (__glibc_unlikely (n < -50000)) - return tiny * __copysign (tiny, x); /*underflow*/ - if (__glibc_unlikely (n > 50000 || k + n > 0x7fe)) - return huge * __copysign (huge, x); /* overflow */ - /* Now k and n are bounded we know that k = k+n does not - overflow. */ - k = k + n; - if (__glibc_likely (k > 0)) /* normal result */ - { - SET_HIGH_WORD (x, (hx & 0x800fffff) | (k << 20)); return x; - } - if (k <= -54) - return tiny * __copysign (tiny, x); /*underflow*/ - k += 54; /* subnormal result */ - SET_HIGH_WORD (x, (hx & 0x800fffff) | (k << 20)); - return x * twom54; -} -#ifdef NO_LONG_DOUBLE -strong_alias (__scalbln, __scalblnl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_scalbn.c b/sysdeps/ieee754/dbl-64/s_scalbn.c deleted file mode 100644 index 58c7e1b33a..0000000000 --- a/sysdeps/ieee754/dbl-64/s_scalbn.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * scalbn (double x, int n) - * scalbn(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include -#include - -static const double - two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */ - twom54 = 5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */ - huge = 1.0e+300, - tiny = 1.0e-300; - -double -__scalbn (double x, int n) -{ - int32_t k, hx, lx; - EXTRACT_WORDS (hx, lx, x); - k = (hx & 0x7ff00000) >> 20; /* extract exponent */ - if (__glibc_unlikely (k == 0)) /* 0 or subnormal x */ - { - if ((lx | (hx & 0x7fffffff)) == 0) - return x; /* +-0 */ - x *= two54; - GET_HIGH_WORD (hx, x); - k = ((hx & 0x7ff00000) >> 20) - 54; - } - if (__glibc_unlikely (k == 0x7ff)) - return x + x; /* NaN or Inf */ - if (__glibc_unlikely (n < -50000)) - return tiny * __copysign (tiny, x); /*underflow*/ - if (__glibc_unlikely (n > 50000 || k + n > 0x7fe)) - return huge * __copysign (huge, x); /* overflow */ - /* Now k and n are bounded we know that k = k+n does not - overflow. */ - k = k + n; - if (__glibc_likely (k > 0)) /* normal result */ - { - SET_HIGH_WORD (x, (hx & 0x800fffff) | (k << 20)); return x; - } - if (k <= -54) - return tiny * __copysign (tiny, x); /*underflow*/ - k += 54; /* subnormal result */ - SET_HIGH_WORD (x, (hx & 0x800fffff) | (k << 20)); - return x * twom54; -} -#ifdef NO_LONG_DOUBLE -strong_alias (__scalbn, __scalbnl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_setpayload.c b/sysdeps/ieee754/dbl-64/s_setpayload.c deleted file mode 100644 index 5ab70dee73..0000000000 --- a/sysdeps/ieee754/dbl-64/s_setpayload.c +++ /dev/null @@ -1,6 +0,0 @@ -#define SIG 0 -#define FUNC setpayload -#include -#ifdef NO_LONG_DOUBLE -weak_alias (setpayload, setpayloadl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_setpayload_main.c b/sysdeps/ieee754/dbl-64/s_setpayload_main.c deleted file mode 100644 index c6128c7fe4..0000000000 --- a/sysdeps/ieee754/dbl-64/s_setpayload_main.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Set NaN payload. dbl-64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#define SET_HIGH_BIT (HIGH_ORDER_BIT_IS_SET_FOR_SNAN ? SIG : !SIG) -#define BIAS 0x3ff -#define PAYLOAD_DIG 51 -#define EXPLICIT_MANT_DIG 52 - -int -FUNC (double *x, double payload) -{ - uint32_t hx, lx; - EXTRACT_WORDS (hx, lx, payload); - int exponent = hx >> (EXPLICIT_MANT_DIG - 32); - /* Test if argument is (a) negative or too large; (b) too small, - except for 0 when allowed; (c) not an integer. */ - if (exponent >= BIAS + PAYLOAD_DIG - || (exponent < BIAS && !(SET_HIGH_BIT && hx == 0 && lx == 0))) - { - INSERT_WORDS (*x, 0, 0); - return 1; - } - int shift = BIAS + EXPLICIT_MANT_DIG - exponent; - if (shift < 32 - ? (lx & ((1U << shift) - 1)) != 0 - : (lx != 0 || (hx & ((1U << (shift - 32)) - 1)) != 0)) - { - INSERT_WORDS (*x, 0, 0); - return 1; - } - if (exponent != 0) - { - hx &= (1U << (EXPLICIT_MANT_DIG - 32)) - 1; - hx |= 1U << (EXPLICIT_MANT_DIG - 32); - if (shift >= 32) - { - lx = hx >> (shift - 32); - hx = 0; - } - else if (shift != 0) - { - lx = (lx >> shift) | (hx << (32 - shift)); - hx >>= shift; - } - } - hx |= 0x7ff00000 | (SET_HIGH_BIT ? 0x80000 : 0); - INSERT_WORDS (*x, hx, lx); - return 0; -} diff --git a/sysdeps/ieee754/dbl-64/s_setpayloadsig.c b/sysdeps/ieee754/dbl-64/s_setpayloadsig.c deleted file mode 100644 index c3d1ba1e6e..0000000000 --- a/sysdeps/ieee754/dbl-64/s_setpayloadsig.c +++ /dev/null @@ -1,6 +0,0 @@ -#define SIG 1 -#define FUNC setpayloadsig -#include -#ifdef NO_LONG_DOUBLE -weak_alias (setpayloadsig, setpayloadsigl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_signbit.c b/sysdeps/ieee754/dbl-64/s_signbit.c deleted file mode 100644 index 1beab1025c..0000000000 --- a/sysdeps/ieee754/dbl-64/s_signbit.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Return nonzero value if number is negative. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__signbit (double x) -{ - return __builtin_signbit (x); -} diff --git a/sysdeps/ieee754/dbl-64/s_sin.c b/sysdeps/ieee754/dbl-64/s_sin.c deleted file mode 100644 index c258d39e49..0000000000 --- a/sysdeps/ieee754/dbl-64/s_sin.c +++ /dev/null @@ -1,927 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/****************************************************************************/ -/* */ -/* MODULE_NAME:usncs.c */ -/* */ -/* FUNCTIONS: usin */ -/* ucos */ -/* slow */ -/* slow1 */ -/* slow2 */ -/* sloww */ -/* sloww1 */ -/* sloww2 */ -/* bsloww */ -/* bsloww1 */ -/* bsloww2 */ -/* cslow2 */ -/* FILES NEEDED: dla.h endian.h mpa.h mydefs.h usncs.h */ -/* branred.c sincos32.c dosincos.c mpa.c */ -/* sincos.tbl */ -/* */ -/* An ultimate sin and routine. Given an IEEE double machine number x */ -/* it computes the correctly rounded (to nearest) value of sin(x) or cos(x) */ -/* Assumption: Machine arithmetic operations are performed in */ -/* round to nearest mode of IEEE 754 standard. */ -/* */ -/****************************************************************************/ - - -#include -#include -#include "endian.h" -#include "mydefs.h" -#include "usncs.h" -#include "MathLib.h" -#include -#include -#include - -/* Helper macros to compute sin of the input values. */ -#define POLYNOMIAL2(xx) ((((s5 * (xx) + s4) * (xx) + s3) * (xx) + s2) * (xx)) - -#define POLYNOMIAL(xx) (POLYNOMIAL2 (xx) + s1) - -/* The computed polynomial is a variation of the Taylor series expansion for - sin(a): - - a - a^3/3! + a^5/5! - a^7/7! + a^9/9! + (1 - a^2) * da / 2 - - The constants s1, s2, s3, etc. are pre-computed values of 1/3!, 1/5! and so - on. The result is returned to LHS and correction in COR. */ -#define TAYLOR_SIN(xx, a, da, cor) \ -({ \ - double t = ((POLYNOMIAL (xx) * (a) - 0.5 * (da)) * (xx) + (da)); \ - double res = (a) + t; \ - (cor) = ((a) - res) + t; \ - res; \ -}) - -/* This is again a variation of the Taylor series expansion with the term - x^3/3! expanded into the following for better accuracy: - - bb * x ^ 3 + 3 * aa * x * x1 * x2 + aa * x1 ^ 3 + aa * x2 ^ 3 - - The correction term is dx and bb + aa = -1/3! - */ -#define TAYLOR_SLOW(x0, dx, cor) \ -({ \ - static const double th2_36 = 206158430208.0; /* 1.5*2**37 */ \ - double xx = (x0) * (x0); \ - double x1 = ((x0) + th2_36) - th2_36; \ - double y = aa * x1 * x1 * x1; \ - double r = (x0) + y; \ - double x2 = ((x0) - x1) + (dx); \ - double t = (((POLYNOMIAL2 (xx) + bb) * xx + 3.0 * aa * x1 * x2) \ - * (x0) + aa * x2 * x2 * x2 + (dx)); \ - t = (((x0) - r) + y) + t; \ - double res = r + t; \ - (cor) = (r - res) + t; \ - res; \ -}) - -#define SINCOS_TABLE_LOOKUP(u, sn, ssn, cs, ccs) \ -({ \ - int4 k = u.i[LOW_HALF] << 2; \ - sn = __sincostab.x[k]; \ - ssn = __sincostab.x[k + 1]; \ - cs = __sincostab.x[k + 2]; \ - ccs = __sincostab.x[k + 3]; \ -}) - -#ifndef SECTION -# define SECTION -#endif - -extern const union -{ - int4 i[880]; - double x[440]; -} __sincostab attribute_hidden; - -static const double - sn3 = -1.66666666666664880952546298448555E-01, - sn5 = 8.33333214285722277379541354343671E-03, - cs2 = 4.99999999999999999999950396842453E-01, - cs4 = -4.16666666666664434524222570944589E-02, - cs6 = 1.38888874007937613028114285595617E-03; - -static const double t22 = 0x1.8p22; - -void __dubsin (double x, double dx, double w[]); -void __docos (double x, double dx, double w[]); -double __mpsin (double x, double dx, bool reduce_range); -double __mpcos (double x, double dx, bool reduce_range); -static double slow (double x); -static double slow1 (double x); -static double slow2 (double x); -static double sloww (double x, double dx, double orig, bool shift_quadrant); -static double sloww1 (double x, double dx, double orig, bool shift_quadrant); -static double sloww2 (double x, double dx, double orig, int n); -static double bsloww (double x, double dx, double orig, int n); -static double bsloww1 (double x, double dx, double orig, int n); -static double bsloww2 (double x, double dx, double orig, int n); -int __branred (double x, double *a, double *aa); -static double cslow2 (double x); - -/* Given a number partitioned into X and DX, this function computes the cosine - of the number by combining the sin and cos of X (as computed by a variation - of the Taylor series) with the values looked up from the sin/cos table to - get the result in RES and a correction value in COR. */ -static inline double -__always_inline -do_cos (double x, double dx, double *corp) -{ - mynumber u; - - if (x < 0) - dx = -dx; - - u.x = big + fabs (x); - x = fabs (x) - (u.x - big) + dx; - - double xx, s, sn, ssn, c, cs, ccs, res, cor; - xx = x * x; - s = x + x * xx * (sn3 + xx * sn5); - c = xx * (cs2 + xx * (cs4 + xx * cs6)); - SINCOS_TABLE_LOOKUP (u, sn, ssn, cs, ccs); - cor = (ccs - s * ssn - cs * c) - sn * s; - res = cs + cor; - cor = (cs - res) + cor; - *corp = cor; - return res; -} - -/* A more precise variant of DO_COS. EPS is the adjustment to the correction - COR. */ -static inline double -__always_inline -do_cos_slow (double x, double dx, double eps, double *corp) -{ - mynumber u; - - if (x <= 0) - dx = -dx; - - u.x = big + fabs (x); - x = fabs (x) - (u.x - big); - - double xx, y, x1, x2, e1, e2, res, cor; - double s, sn, ssn, c, cs, ccs; - xx = x * x; - s = x * xx * (sn3 + xx * sn5); - c = x * dx + xx * (cs2 + xx * (cs4 + xx * cs6)); - SINCOS_TABLE_LOOKUP (u, sn, ssn, cs, ccs); - x1 = (x + t22) - t22; - x2 = (x - x1) + dx; - e1 = (sn + t22) - t22; - e2 = (sn - e1) + ssn; - cor = (ccs - cs * c - e1 * x2 - e2 * x) - sn * s; - y = cs - e1 * x1; - cor = cor + ((cs - y) - e1 * x1); - res = y + cor; - cor = (y - res) + cor; - cor = 1.0005 * cor + __copysign (eps, cor); - *corp = cor; - return res; -} - -/* Given a number partitioned into X and DX, this function computes the sine of - the number by combining the sin and cos of X (as computed by a variation of - the Taylor series) with the values looked up from the sin/cos table to get - the result in RES and a correction value in COR. */ -static inline double -__always_inline -do_sin (double x, double dx, double *corp) -{ - mynumber u; - - if (x <= 0) - dx = -dx; - u.x = big + fabs (x); - x = fabs (x) - (u.x - big); - - double xx, s, sn, ssn, c, cs, ccs, cor, res; - xx = x * x; - s = x + (dx + x * xx * (sn3 + xx * sn5)); - c = x * dx + xx * (cs2 + xx * (cs4 + xx * cs6)); - SINCOS_TABLE_LOOKUP (u, sn, ssn, cs, ccs); - cor = (ssn + s * ccs - sn * c) + cs * s; - res = sn + cor; - cor = (sn - res) + cor; - *corp = cor; - return res; -} - -/* A more precise variant of DO_SIN. EPS is the adjustment to the correction - COR. */ -static inline double -__always_inline -do_sin_slow (double x, double dx, double eps, double *corp) -{ - mynumber u; - - if (x <= 0) - dx = -dx; - u.x = big + fabs (x); - x = fabs (x) - (u.x - big); - - double xx, y, x1, x2, c1, c2, res, cor; - double s, sn, ssn, c, cs, ccs; - xx = x * x; - s = x * xx * (sn3 + xx * sn5); - c = xx * (cs2 + xx * (cs4 + xx * cs6)); - SINCOS_TABLE_LOOKUP (u, sn, ssn, cs, ccs); - x1 = (x + t22) - t22; - x2 = (x - x1) + dx; - c1 = (cs + t22) - t22; - c2 = (cs - c1) + ccs; - cor = (ssn + s * ccs + cs * s + c2 * x + c1 * x2 - sn * x * dx) - sn * c; - y = sn + c1 * x1; - cor = cor + ((sn - y) + c1 * x1); - res = y + cor; - cor = (y - res) + cor; - cor = 1.0005 * cor + __copysign (eps, cor); - *corp = cor; - return res; -} - -/* Reduce range of X and compute sin of a + da. When SHIFT_QUADRANT is true, - the routine returns the cosine of a + da by rotating the quadrant once and - computing the sine of the result. */ -static inline double -__always_inline -reduce_and_compute (double x, bool shift_quadrant) -{ - double retval = 0, a, da; - unsigned int n = __branred (x, &a, &da); - int4 k = (n + shift_quadrant) % 4; - switch (k) - { - case 2: - a = -a; - da = -da; - /* Fall through. */ - case 0: - if (a * a < 0.01588) - retval = bsloww (a, da, x, n); - else - retval = bsloww1 (a, da, x, n); - break; - - case 1: - case 3: - retval = bsloww2 (a, da, x, n); - break; - } - return retval; -} - -static inline int4 -__always_inline -reduce_sincos_1 (double x, double *a, double *da) -{ - mynumber v; - - double t = (x * hpinv + toint); - double xn = t - toint; - v.x = t; - double y = (x - xn * mp1) - xn * mp2; - int4 n = v.i[LOW_HALF] & 3; - double db = xn * mp3; - double b = y - db; - db = (y - b) - db; - - *a = b; - *da = db; - - return n; -} - -/* Compute sin (A + DA). cos can be computed by passing SHIFT_QUADRANT as - true, which results in shifting the quadrant N clockwise. */ -static double -__always_inline -do_sincos_1 (double a, double da, double x, int4 n, bool shift_quadrant) -{ - double xx, retval, res, cor; - double eps = fabs (x) * 1.2e-30; - - int k1 = (n + shift_quadrant) & 3; - switch (k1) - { /* quarter of unit circle */ - case 2: - a = -a; - da = -da; - /* Fall through. */ - case 0: - xx = a * a; - if (xx < 0.01588) - { - /* Taylor series. */ - res = TAYLOR_SIN (xx, a, da, cor); - cor = 1.02 * cor + __copysign (eps, cor); - retval = (res == res + cor) ? res : sloww (a, da, x, shift_quadrant); - } - else - { - res = do_sin (a, da, &cor); - cor = 1.035 * cor + __copysign (eps, cor); - retval = ((res == res + cor) ? __copysign (res, a) - : sloww1 (a, da, x, shift_quadrant)); - } - break; - - case 1: - case 3: - res = do_cos (a, da, &cor); - cor = 1.025 * cor + __copysign (eps, cor); - retval = ((res == res + cor) ? ((n & 2) ? -res : res) - : sloww2 (a, da, x, n)); - break; - } - - return retval; -} - -static inline int4 -__always_inline -reduce_sincos_2 (double x, double *a, double *da) -{ - mynumber v; - - double t = (x * hpinv + toint); - double xn = t - toint; - v.x = t; - double xn1 = (xn + 8.0e22) - 8.0e22; - double xn2 = xn - xn1; - double y = ((((x - xn1 * mp1) - xn1 * mp2) - xn2 * mp1) - xn2 * mp2); - int4 n = v.i[LOW_HALF] & 3; - double db = xn1 * pp3; - t = y - db; - db = (y - t) - db; - db = (db - xn2 * pp3) - xn * pp4; - double b = t + db; - db = (t - b) + db; - - *a = b; - *da = db; - - return n; -} - -/* Compute sin (A + DA). cos can be computed by passing SHIFT_QUADRANT as - true, which results in shifting the quadrant N clockwise. */ -static double -__always_inline -do_sincos_2 (double a, double da, double x, int4 n, bool shift_quadrant) -{ - double res, retval, cor, xx; - - double eps = 1.0e-24; - - int4 k = (n + shift_quadrant) & 3; - - switch (k) - { - case 2: - a = -a; - da = -da; - /* Fall through. */ - case 0: - xx = a * a; - if (xx < 0.01588) - { - /* Taylor series. */ - res = TAYLOR_SIN (xx, a, da, cor); - cor = 1.02 * cor + __copysign (eps, cor); - retval = (res == res + cor) ? res : bsloww (a, da, x, n); - } - else - { - res = do_sin (a, da, &cor); - cor = 1.035 * cor + __copysign (eps, cor); - retval = ((res == res + cor) ? __copysign (res, a) - : bsloww1 (a, da, x, n)); - } - break; - - case 1: - case 3: - res = do_cos (a, da, &cor); - cor = 1.025 * cor + __copysign (eps, cor); - retval = ((res == res + cor) ? ((n & 2) ? -res : res) - : bsloww2 (a, da, x, n)); - break; - } - - return retval; -} - -/*******************************************************************/ -/* An ultimate sin routine. Given an IEEE double machine number x */ -/* it computes the correctly rounded (to nearest) value of sin(x) */ -/*******************************************************************/ -#ifdef IN_SINCOS -static double -#else -double -SECTION -#endif -__sin (double x) -{ - double xx, res, t, cor; - mynumber u; - int4 k, m; - double retval = 0; - -#ifndef IN_SINCOS - SET_RESTORE_ROUND_53BIT (FE_TONEAREST); -#endif - - u.x = x; - m = u.i[HIGH_HALF]; - k = 0x7fffffff & m; /* no sign */ - if (k < 0x3e500000) /* if x->0 =>sin(x)=x */ - { - math_check_force_underflow (x); - retval = x; - } - /*---------------------------- 2^-26 < |x|< 0.25 ----------------------*/ - else if (k < 0x3fd00000) - { - xx = x * x; - /* Taylor series. */ - t = POLYNOMIAL (xx) * (xx * x); - res = x + t; - cor = (x - res) + t; - retval = (res == res + 1.07 * cor) ? res : slow (x); - } /* else if (k < 0x3fd00000) */ -/*---------------------------- 0.25<|x|< 0.855469---------------------- */ - else if (k < 0x3feb6000) - { - res = do_sin (x, 0, &cor); - retval = (res == res + 1.096 * cor) ? res : slow1 (x); - retval = __copysign (retval, x); - } /* else if (k < 0x3feb6000) */ - -/*----------------------- 0.855469 <|x|<2.426265 ----------------------*/ - else if (k < 0x400368fd) - { - - t = hp0 - fabs (x); - res = do_cos (t, hp1, &cor); - retval = (res == res + 1.020 * cor) ? res : slow2 (x); - retval = __copysign (retval, x); - } /* else if (k < 0x400368fd) */ - -#ifndef IN_SINCOS -/*-------------------------- 2.426265<|x|< 105414350 ----------------------*/ - else if (k < 0x419921FB) - { - double a, da; - int4 n = reduce_sincos_1 (x, &a, &da); - retval = do_sincos_1 (a, da, x, n, false); - } /* else if (k < 0x419921FB ) */ - -/*---------------------105414350 <|x|< 281474976710656 --------------------*/ - else if (k < 0x42F00000) - { - double a, da; - - int4 n = reduce_sincos_2 (x, &a, &da); - retval = do_sincos_2 (a, da, x, n, false); - } /* else if (k < 0x42F00000 ) */ - -/* -----------------281474976710656 <|x| <2^1024----------------------------*/ - else if (k < 0x7ff00000) - retval = reduce_and_compute (x, false); - -/*--------------------- |x| > 2^1024 ----------------------------------*/ - else - { - if (k == 0x7ff00000 && u.i[LOW_HALF] == 0) - __set_errno (EDOM); - retval = x / x; - } -#endif - - return retval; -} - - -/*******************************************************************/ -/* An ultimate cos routine. Given an IEEE double machine number x */ -/* it computes the correctly rounded (to nearest) value of cos(x) */ -/*******************************************************************/ - -#ifdef IN_SINCOS -static double -#else -double -SECTION -#endif -__cos (double x) -{ - double y, xx, res, cor, a, da; - mynumber u; - int4 k, m; - - double retval = 0; - -#ifndef IN_SINCOS - SET_RESTORE_ROUND_53BIT (FE_TONEAREST); -#endif - - u.x = x; - m = u.i[HIGH_HALF]; - k = 0x7fffffff & m; - - /* |x|<2^-27 => cos(x)=1 */ - if (k < 0x3e400000) - retval = 1.0; - - else if (k < 0x3feb6000) - { /* 2^-27 < |x| < 0.855469 */ - res = do_cos (x, 0, &cor); - retval = (res == res + 1.020 * cor) ? res : cslow2 (x); - } /* else if (k < 0x3feb6000) */ - - else if (k < 0x400368fd) - { /* 0.855469 <|x|<2.426265 */ ; - y = hp0 - fabs (x); - a = y + hp1; - da = (y - a) + hp1; - xx = a * a; - if (xx < 0.01588) - { - res = TAYLOR_SIN (xx, a, da, cor); - cor = 1.02 * cor + __copysign (1.0e-31, cor); - retval = (res == res + cor) ? res : sloww (a, da, x, true); - } - else - { - res = do_sin (a, da, &cor); - cor = 1.035 * cor + __copysign (1.0e-31, cor); - retval = ((res == res + cor) ? __copysign (res, a) - : sloww1 (a, da, x, true)); - } - - } /* else if (k < 0x400368fd) */ - - -#ifndef IN_SINCOS - else if (k < 0x419921FB) - { /* 2.426265<|x|< 105414350 */ - double a, da; - int4 n = reduce_sincos_1 (x, &a, &da); - retval = do_sincos_1 (a, da, x, n, true); - } /* else if (k < 0x419921FB ) */ - - else if (k < 0x42F00000) - { - double a, da; - - int4 n = reduce_sincos_2 (x, &a, &da); - retval = do_sincos_2 (a, da, x, n, true); - } /* else if (k < 0x42F00000 ) */ - - /* 281474976710656 <|x| <2^1024 */ - else if (k < 0x7ff00000) - retval = reduce_and_compute (x, true); - - else - { - if (k == 0x7ff00000 && u.i[LOW_HALF] == 0) - __set_errno (EDOM); - retval = x / x; /* |x| > 2^1024 */ - } -#endif - - return retval; -} - -/************************************************************************/ -/* Routine compute sin(x) for 2^-26 < |x|< 0.25 by Taylor with more */ -/* precision and if still doesn't accurate enough by mpsin or dubsin */ -/************************************************************************/ - -static inline double -__always_inline -slow (double x) -{ - double res, cor, w[2]; - res = TAYLOR_SLOW (x, 0, cor); - if (res == res + 1.0007 * cor) - return res; - - __dubsin (fabs (x), 0, w); - if (w[0] == w[0] + 1.000000001 * w[1]) - return __copysign (w[0], x); - - return __copysign (__mpsin (fabs (x), 0, false), x); -} - -/*******************************************************************************/ -/* Routine compute sin(x) for 0.25<|x|< 0.855469 by __sincostab.tbl and Taylor */ -/* and if result still doesn't accurate enough by mpsin or dubsin */ -/*******************************************************************************/ - -static inline double -__always_inline -slow1 (double x) -{ - double w[2], cor, res; - - res = do_sin_slow (x, 0, 0, &cor); - if (res == res + cor) - return res; - - __dubsin (fabs (x), 0, w); - if (w[0] == w[0] + 1.000000005 * w[1]) - return w[0]; - - return __mpsin (fabs (x), 0, false); -} - -/**************************************************************************/ -/* Routine compute sin(x) for 0.855469 <|x|<2.426265 by __sincostab.tbl */ -/* and if result still doesn't accurate enough by mpsin or dubsin */ -/**************************************************************************/ -static inline double -__always_inline -slow2 (double x) -{ - double w[2], y, y1, y2, cor, res; - - double t = hp0 - fabs (x); - res = do_cos_slow (t, hp1, 0, &cor); - if (res == res + cor) - return res; - - y = fabs (x) - hp0; - y1 = y - hp1; - y2 = (y - y1) - hp1; - __docos (y1, y2, w); - if (w[0] == w[0] + 1.000000005 * w[1]) - return w[0]; - - return __mpsin (fabs (x), 0, false); -} - -/* Compute sin(x + dx) where X is small enough to use Taylor series around zero - and (x + dx) in the first or third quarter of the unit circle. ORIG is the - original value of X for computing error of the result. If the result is not - accurate enough, the routine calls mpsin or dubsin. SHIFT_QUADRANT rotates - the unit circle by 1 to compute the cosine instead of sine. */ -static inline double -__always_inline -sloww (double x, double dx, double orig, bool shift_quadrant) -{ - double y, t, res, cor, w[2], a, da, xn; - mynumber v; - int4 n; - res = TAYLOR_SLOW (x, dx, cor); - - double eps = fabs (orig) * 3.1e-30; - - cor = 1.0005 * cor + __copysign (eps, cor); - - if (res == res + cor) - return res; - - a = fabs (x); - da = (x > 0) ? dx : -dx; - __dubsin (a, da, w); - eps = fabs (orig) * 1.1e-30; - cor = 1.000000001 * w[1] + __copysign (eps, w[1]); - - if (w[0] == w[0] + cor) - return __copysign (w[0], x); - - t = (orig * hpinv + toint); - xn = t - toint; - v.x = t; - y = (orig - xn * mp1) - xn * mp2; - n = (v.i[LOW_HALF] + shift_quadrant) & 3; - da = xn * pp3; - t = y - da; - da = (y - t) - da; - y = xn * pp4; - a = t - y; - da = ((t - a) - y) + da; - - if (n & 2) - { - a = -a; - da = -da; - } - x = fabs (a); - dx = (a > 0) ? da : -da; - __dubsin (x, dx, w); - eps = fabs (orig) * 1.1e-40; - cor = 1.000000001 * w[1] + __copysign (eps, w[1]); - - if (w[0] == w[0] + cor) - return __copysign (w[0], a); - - return shift_quadrant ? __mpcos (orig, 0, true) : __mpsin (orig, 0, true); -} - -/* Compute sin(x + dx) where X is in the first or third quarter of the unit - circle. ORIG is the original value of X for computing error of the result. - If the result is not accurate enough, the routine calls mpsin or dubsin. - SHIFT_QUADRANT rotates the unit circle by 1 to compute the cosine instead of - sine. */ -static inline double -__always_inline -sloww1 (double x, double dx, double orig, bool shift_quadrant) -{ - double w[2], cor, res; - - res = do_sin_slow (x, dx, 3.1e-30 * fabs (orig), &cor); - - if (res == res + cor) - return __copysign (res, x); - - dx = (x > 0 ? dx : -dx); - __dubsin (fabs (x), dx, w); - - double eps = 1.1e-30 * fabs (orig); - cor = 1.000000005 * w[1] + __copysign (eps, w[1]); - - if (w[0] == w[0] + cor) - return __copysign (w[0], x); - - return shift_quadrant ? __mpcos (orig, 0, true) : __mpsin (orig, 0, true); -} - -/***************************************************************************/ -/* Routine compute sin(x+dx) (Double-Length number) where x in second or */ -/* fourth quarter of unit circle.Routine receive also the original value */ -/* and quarter(n= 1or 3)of x for computing error of result.And if result not*/ -/* accurate enough routine calls mpsin1 or dubsin */ -/***************************************************************************/ - -static inline double -__always_inline -sloww2 (double x, double dx, double orig, int n) -{ - double w[2], cor, res; - - res = do_cos_slow (x, dx, 3.1e-30 * fabs (orig), &cor); - - if (res == res + cor) - return (n & 2) ? -res : res; - - dx = x > 0 ? dx : -dx; - __docos (fabs (x), dx, w); - - double eps = 1.1e-30 * fabs (orig); - cor = 1.000000005 * w[1] + __copysign (eps, w[1]); - - if (w[0] == w[0] + cor) - return (n & 2) ? -w[0] : w[0]; - - return (n & 1) ? __mpsin (orig, 0, true) : __mpcos (orig, 0, true); -} - -/***************************************************************************/ -/* Routine compute sin(x+dx) or cos(x+dx) (Double-Length number) where x */ -/* is small enough to use Taylor series around zero and (x+dx) */ -/* in first or third quarter of unit circle.Routine receive also */ -/* (right argument) the original value of x for computing error of */ -/* result.And if result not accurate enough routine calls other routines */ -/***************************************************************************/ - -static inline double -__always_inline -bsloww (double x, double dx, double orig, int n) -{ - double res, cor, w[2], a, da; - - res = TAYLOR_SLOW (x, dx, cor); - cor = 1.0005 * cor + __copysign (1.1e-24, cor); - if (res == res + cor) - return res; - - a = fabs (x); - da = (x > 0) ? dx : -dx; - __dubsin (a, da, w); - cor = 1.000000001 * w[1] + __copysign (1.1e-24, w[1]); - - if (w[0] == w[0] + cor) - return __copysign (w[0], x); - - return (n & 1) ? __mpcos (orig, 0, true) : __mpsin (orig, 0, true); -} - -/***************************************************************************/ -/* Routine compute sin(x+dx) or cos(x+dx) (Double-Length number) where x */ -/* in first or third quarter of unit circle.Routine receive also */ -/* (right argument) the original value of x for computing error of result.*/ -/* And if result not accurate enough routine calls other routines */ -/***************************************************************************/ - -static inline double -__always_inline -bsloww1 (double x, double dx, double orig, int n) -{ - double w[2], cor, res; - - res = do_sin_slow (x, dx, 1.1e-24, &cor); - if (res == res + cor) - return (x > 0) ? res : -res; - - dx = (x > 0) ? dx : -dx; - __dubsin (fabs (x), dx, w); - - cor = 1.000000005 * w[1] + __copysign (1.1e-24, w[1]); - - if (w[0] == w[0] + cor) - return __copysign (w[0], x); - - return (n & 1) ? __mpcos (orig, 0, true) : __mpsin (orig, 0, true); -} - -/***************************************************************************/ -/* Routine compute sin(x+dx) or cos(x+dx) (Double-Length number) where x */ -/* in second or fourth quarter of unit circle.Routine receive also the */ -/* original value and quarter(n= 1or 3)of x for computing error of result. */ -/* And if result not accurate enough routine calls other routines */ -/***************************************************************************/ - -static inline double -__always_inline -bsloww2 (double x, double dx, double orig, int n) -{ - double w[2], cor, res; - - res = do_cos_slow (x, dx, 1.1e-24, &cor); - if (res == res + cor) - return (n & 2) ? -res : res; - - dx = (x > 0) ? dx : -dx; - __docos (fabs (x), dx, w); - - cor = 1.000000005 * w[1] + __copysign (1.1e-24, w[1]); - - if (w[0] == w[0] + cor) - return (n & 2) ? -w[0] : w[0]; - - return (n & 1) ? __mpsin (orig, 0, true) : __mpcos (orig, 0, true); -} - -/************************************************************************/ -/* Routine compute cos(x) for 2^-27 < |x|< 0.25 by Taylor with more */ -/* precision and if still doesn't accurate enough by mpcos or docos */ -/************************************************************************/ - -static inline double -__always_inline -cslow2 (double x) -{ - double w[2], cor, res; - - res = do_cos_slow (x, 0, 0, &cor); - if (res == res + cor) - return res; - - __docos (fabs (x), 0, w); - if (w[0] == w[0] + 1.000000005 * w[1]) - return w[0]; - - return __mpcos (x, 0, false); -} - -#ifndef __cos -weak_alias (__cos, cos) -# ifdef NO_LONG_DOUBLE -strong_alias (__cos, __cosl) -weak_alias (__cos, cosl) -# endif -#endif -#ifndef __sin -weak_alias (__sin, sin) -# ifdef NO_LONG_DOUBLE -strong_alias (__sin, __sinl) -weak_alias (__sin, sinl) -# endif -#endif diff --git a/sysdeps/ieee754/dbl-64/s_sincos.c b/sysdeps/ieee754/dbl-64/s_sincos.c deleted file mode 100644 index 05cff50ce8..0000000000 --- a/sysdeps/ieee754/dbl-64/s_sincos.c +++ /dev/null @@ -1,113 +0,0 @@ -/* Compute sine and cosine of argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include - -#define __sin __sin_local -#define __cos __cos_local -#define IN_SINCOS 1 -#include "s_sin.c" - -/* Consolidated version of reduce_and_compute in s_sin.c that does range - reduction only once and computes sin and cos together. */ -static inline void -__always_inline -reduce_and_compute_sincos (double x, double *sinx, double *cosx) -{ - double a, da; - unsigned int n = __branred (x, &a, &da); - - n = n & 3; - - if (n == 1 || n == 2) - { - a = -a; - da = -da; - } - - if (n & 1) - { - double *temp = cosx; - cosx = sinx; - sinx = temp; - } - - if (a * a < 0.01588) - *sinx = bsloww (a, da, x, n); - else - *sinx = bsloww1 (a, da, x, n); - *cosx = bsloww2 (a, da, x, n); -} - -void -__sincos (double x, double *sinx, double *cosx) -{ - mynumber u; - int k; - - SET_RESTORE_ROUND_53BIT (FE_TONEAREST); - - u.x = x; - k = 0x7fffffff & u.i[HIGH_HALF]; - - if (k < 0x400368fd) - { - *sinx = __sin_local (x); - *cosx = __cos_local (x); - return; - } - if (k < 0x419921FB) - { - double a, da; - int4 n = reduce_sincos_1 (x, &a, &da); - - *sinx = do_sincos_1 (a, da, x, n, false); - *cosx = do_sincos_1 (a, da, x, n, true); - - return; - } - if (k < 0x42F00000) - { - double a, da; - int4 n = reduce_sincos_2 (x, &a, &da); - - *sinx = do_sincos_2 (a, da, x, n, false); - *cosx = do_sincos_2 (a, da, x, n, true); - - return; - } - if (k < 0x7ff00000) - { - reduce_and_compute_sincos (x, sinx, cosx); - return; - } - - if (isinf (x)) - __set_errno (EDOM); - - *sinx = *cosx = x / x; -} -weak_alias (__sincos, sincos) -#ifdef NO_LONG_DOUBLE -strong_alias (__sincos, __sincosl) -weak_alias (__sincos, sincosl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_tan.c b/sysdeps/ieee754/dbl-64/s_tan.c deleted file mode 100644 index b2a8681a6d..0000000000 --- a/sysdeps/ieee754/dbl-64/s_tan.c +++ /dev/null @@ -1,848 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/*********************************************************************/ -/* MODULE_NAME: utan.c */ -/* */ -/* FUNCTIONS: utan */ -/* tanMp */ -/* */ -/* FILES NEEDED:dla.h endian.h mpa.h mydefs.h utan.h */ -/* branred.c sincos32.c mptan.c */ -/* utan.tbl */ -/* */ -/* An ultimate tan routine. Given an IEEE double machine number x */ -/* it computes the correctly rounded (to nearest) value of tan(x). */ -/* Assumption: Machine arithmetic operations are performed in */ -/* round to nearest mode of IEEE 754 standard. */ -/* */ -/*********************************************************************/ - -#include -#include -#include "endian.h" -#include -#include "mpa.h" -#include "MathLib.h" -#include -#include -#include -#include - -#ifndef SECTION -# define SECTION -#endif - -static double tanMp (double); -void __mptan (double, mp_no *, int); - -double -SECTION -tan (double x) -{ -#include "utan.h" -#include "utan.tbl" - - int ux, i, n; - double a, da, a2, b, db, c, dc, c1, cc1, c2, cc2, c3, cc3, fi, ffi, gi, pz, - s, sy, t, t1, t2, t3, t4, t7, t8, t9, t10, w, x2, xn, xx2, y, ya, - yya, z0, z, zz, z2, zz2; -#ifndef DLA_FMS - double t5, t6; -#endif - int p; - number num, v; - mp_no mpa, mpt1, mpt2; - - double retval; - - int __branred (double, double *, double *); - int __mpranred (double, mp_no *, int); - - SET_RESTORE_ROUND_53BIT (FE_TONEAREST); - - /* x=+-INF, x=NaN */ - num.d = x; - ux = num.i[HIGH_HALF]; - if ((ux & 0x7ff00000) == 0x7ff00000) - { - if ((ux & 0x7fffffff) == 0x7ff00000) - __set_errno (EDOM); - retval = x - x; - goto ret; - } - - w = (x < 0.0) ? -x : x; - - /* (I) The case abs(x) <= 1.259e-8 */ - if (w <= g1.d) - { - math_check_force_underflow_nonneg (w); - retval = x; - goto ret; - } - - /* (II) The case 1.259e-8 < abs(x) <= 0.0608 */ - if (w <= g2.d) - { - /* First stage */ - x2 = x * x; - - t2 = d9.d + x2 * d11.d; - t2 = d7.d + x2 * t2; - t2 = d5.d + x2 * t2; - t2 = d3.d + x2 * t2; - t2 *= x * x2; - - if ((y = x + (t2 - u1.d * t2)) == x + (t2 + u1.d * t2)) - { - retval = y; - goto ret; - } - - /* Second stage */ - c1 = a25.d + x2 * a27.d; - c1 = a23.d + x2 * c1; - c1 = a21.d + x2 * c1; - c1 = a19.d + x2 * c1; - c1 = a17.d + x2 * c1; - c1 = a15.d + x2 * c1; - c1 *= x2; - - EMULV (x, x, x2, xx2, t1, t2, t3, t4, t5); - ADD2 (a13.d, aa13.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a11.d, aa11.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a9.d, aa9.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a7.d, aa7.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a5.d, aa5.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (x, 0.0, c1, cc1, c2, cc2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (x, 0.0, c2, cc2, c1, cc1, t1, t2); - if ((y = c1 + (cc1 - u2.d * c1)) == c1 + (cc1 + u2.d * c1)) - { - retval = y; - goto ret; - } - retval = tanMp (x); - goto ret; - } - - /* (III) The case 0.0608 < abs(x) <= 0.787 */ - if (w <= g3.d) - { - /* First stage */ - i = ((int) (mfftnhf.d + TWO8 * w)); - z = w - xfg[i][0].d; - z2 = z * z; - s = (x < 0.0) ? -1 : 1; - pz = z + z * z2 * (e0.d + z2 * e1.d); - fi = xfg[i][1].d; - gi = xfg[i][2].d; - t2 = pz * (gi + fi) / (gi - pz); - if ((y = fi + (t2 - fi * u3.d)) == fi + (t2 + fi * u3.d)) - { - retval = (s * y); - goto ret; - } - t3 = (t2 < 0.0) ? -t2 : t2; - t4 = fi * ua3.d + t3 * ub3.d; - if ((y = fi + (t2 - t4)) == fi + (t2 + t4)) - { - retval = (s * y); - goto ret; - } - - /* Second stage */ - ffi = xfg[i][3].d; - c1 = z2 * (a7.d + z2 * (a9.d + z2 * a11.d)); - EMULV (z, z, z2, zz2, t1, t2, t3, t4, t5); - ADD2 (a5.d, aa5.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (z, 0.0, c1, cc1, c2, cc2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (z, 0.0, c2, cc2, c1, cc1, t1, t2); - - ADD2 (fi, ffi, c1, cc1, c2, cc2, t1, t2); - MUL2 (fi, ffi, c1, cc1, c3, cc3, t1, t2, t3, t4, t5, t6, t7, t8); - SUB2 (1.0, 0.0, c3, cc3, c1, cc1, t1, t2); - DIV2 (c2, cc2, c1, cc1, c3, cc3, t1, t2, t3, t4, t5, t6, t7, t8, t9, - t10); - - if ((y = c3 + (cc3 - u4.d * c3)) == c3 + (cc3 + u4.d * c3)) - { - retval = (s * y); - goto ret; - } - retval = tanMp (x); - goto ret; - } - - /* (---) The case 0.787 < abs(x) <= 25 */ - if (w <= g4.d) - { - /* Range reduction by algorithm i */ - t = (x * hpinv.d + toint.d); - xn = t - toint.d; - v.d = t; - t1 = (x - xn * mp1.d) - xn * mp2.d; - n = v.i[LOW_HALF] & 0x00000001; - da = xn * mp3.d; - a = t1 - da; - da = (t1 - a) - da; - if (a < 0.0) - { - ya = -a; - yya = -da; - sy = -1; - } - else - { - ya = a; - yya = da; - sy = 1; - } - - /* (IV),(V) The case 0.787 < abs(x) <= 25, abs(y) <= 1e-7 */ - if (ya <= gy1.d) - { - retval = tanMp (x); - goto ret; - } - - /* (VI) The case 0.787 < abs(x) <= 25, 1e-7 < abs(y) <= 0.0608 */ - if (ya <= gy2.d) - { - a2 = a * a; - t2 = d9.d + a2 * d11.d; - t2 = d7.d + a2 * t2; - t2 = d5.d + a2 * t2; - t2 = d3.d + a2 * t2; - t2 = da + a * a2 * t2; - - if (n) - { - /* First stage -cot */ - EADD (a, t2, b, db); - DIV2 (1.0, 0.0, b, db, c, dc, t1, t2, t3, t4, t5, t6, t7, t8, - t9, t10); - if ((y = c + (dc - u6.d * c)) == c + (dc + u6.d * c)) - { - retval = (-y); - goto ret; - } - } - else - { - /* First stage tan */ - if ((y = a + (t2 - u5.d * a)) == a + (t2 + u5.d * a)) - { - retval = y; - goto ret; - } - } - /* Second stage */ - /* Range reduction by algorithm ii */ - t = (x * hpinv.d + toint.d); - xn = t - toint.d; - v.d = t; - t1 = (x - xn * mp1.d) - xn * mp2.d; - n = v.i[LOW_HALF] & 0x00000001; - da = xn * pp3.d; - t = t1 - da; - da = (t1 - t) - da; - t1 = xn * pp4.d; - a = t - t1; - da = ((t - a) - t1) + da; - - /* Second stage */ - EADD (a, da, t1, t2); - a = t1; - da = t2; - MUL2 (a, da, a, da, x2, xx2, t1, t2, t3, t4, t5, t6, t7, t8); - - c1 = a25.d + x2 * a27.d; - c1 = a23.d + x2 * c1; - c1 = a21.d + x2 * c1; - c1 = a19.d + x2 * c1; - c1 = a17.d + x2 * c1; - c1 = a15.d + x2 * c1; - c1 *= x2; - - ADD2 (a13.d, aa13.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a11.d, aa11.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a9.d, aa9.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a7.d, aa7.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a5.d, aa5.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (a, da, c1, cc1, c2, cc2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a, da, c2, cc2, c1, cc1, t1, t2); - - if (n) - { - /* Second stage -cot */ - DIV2 (1.0, 0.0, c1, cc1, c2, cc2, t1, t2, t3, t4, t5, t6, t7, - t8, t9, t10); - if ((y = c2 + (cc2 - u8.d * c2)) == c2 + (cc2 + u8.d * c2)) - { - retval = (-y); - goto ret; - } - } - else - { - /* Second stage tan */ - if ((y = c1 + (cc1 - u7.d * c1)) == c1 + (cc1 + u7.d * c1)) - { - retval = y; - goto ret; - } - } - retval = tanMp (x); - goto ret; - } - - /* (VII) The case 0.787 < abs(x) <= 25, 0.0608 < abs(y) <= 0.787 */ - - /* First stage */ - i = ((int) (mfftnhf.d + TWO8 * ya)); - z = (z0 = (ya - xfg[i][0].d)) + yya; - z2 = z * z; - pz = z + z * z2 * (e0.d + z2 * e1.d); - fi = xfg[i][1].d; - gi = xfg[i][2].d; - - if (n) - { - /* -cot */ - t2 = pz * (fi + gi) / (fi + pz); - if ((y = gi - (t2 - gi * u10.d)) == gi - (t2 + gi * u10.d)) - { - retval = (-sy * y); - goto ret; - } - t3 = (t2 < 0.0) ? -t2 : t2; - t4 = gi * ua10.d + t3 * ub10.d; - if ((y = gi - (t2 - t4)) == gi - (t2 + t4)) - { - retval = (-sy * y); - goto ret; - } - } - else - { - /* tan */ - t2 = pz * (gi + fi) / (gi - pz); - if ((y = fi + (t2 - fi * u9.d)) == fi + (t2 + fi * u9.d)) - { - retval = (sy * y); - goto ret; - } - t3 = (t2 < 0.0) ? -t2 : t2; - t4 = fi * ua9.d + t3 * ub9.d; - if ((y = fi + (t2 - t4)) == fi + (t2 + t4)) - { - retval = (sy * y); - goto ret; - } - } - - /* Second stage */ - ffi = xfg[i][3].d; - EADD (z0, yya, z, zz) - MUL2 (z, zz, z, zz, z2, zz2, t1, t2, t3, t4, t5, t6, t7, t8); - c1 = z2 * (a7.d + z2 * (a9.d + z2 * a11.d)); - ADD2 (a5.d, aa5.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (z, zz, c1, cc1, c2, cc2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (z, zz, c2, cc2, c1, cc1, t1, t2); - - ADD2 (fi, ffi, c1, cc1, c2, cc2, t1, t2); - MUL2 (fi, ffi, c1, cc1, c3, cc3, t1, t2, t3, t4, t5, t6, t7, t8); - SUB2 (1.0, 0.0, c3, cc3, c1, cc1, t1, t2); - - if (n) - { - /* -cot */ - DIV2 (c1, cc1, c2, cc2, c3, cc3, t1, t2, t3, t4, t5, t6, t7, t8, t9, - t10); - if ((y = c3 + (cc3 - u12.d * c3)) == c3 + (cc3 + u12.d * c3)) - { - retval = (-sy * y); - goto ret; - } - } - else - { - /* tan */ - DIV2 (c2, cc2, c1, cc1, c3, cc3, t1, t2, t3, t4, t5, t6, t7, t8, t9, - t10); - if ((y = c3 + (cc3 - u11.d * c3)) == c3 + (cc3 + u11.d * c3)) - { - retval = (sy * y); - goto ret; - } - } - - retval = tanMp (x); - goto ret; - } - - /* (---) The case 25 < abs(x) <= 1e8 */ - if (w <= g5.d) - { - /* Range reduction by algorithm ii */ - t = (x * hpinv.d + toint.d); - xn = t - toint.d; - v.d = t; - t1 = (x - xn * mp1.d) - xn * mp2.d; - n = v.i[LOW_HALF] & 0x00000001; - da = xn * pp3.d; - t = t1 - da; - da = (t1 - t) - da; - t1 = xn * pp4.d; - a = t - t1; - da = ((t - a) - t1) + da; - EADD (a, da, t1, t2); - a = t1; - da = t2; - if (a < 0.0) - { - ya = -a; - yya = -da; - sy = -1; - } - else - { - ya = a; - yya = da; - sy = 1; - } - - /* (+++) The case 25 < abs(x) <= 1e8, abs(y) <= 1e-7 */ - if (ya <= gy1.d) - { - retval = tanMp (x); - goto ret; - } - - /* (VIII) The case 25 < abs(x) <= 1e8, 1e-7 < abs(y) <= 0.0608 */ - if (ya <= gy2.d) - { - a2 = a * a; - t2 = d9.d + a2 * d11.d; - t2 = d7.d + a2 * t2; - t2 = d5.d + a2 * t2; - t2 = d3.d + a2 * t2; - t2 = da + a * a2 * t2; - - if (n) - { - /* First stage -cot */ - EADD (a, t2, b, db); - DIV2 (1.0, 0.0, b, db, c, dc, t1, t2, t3, t4, t5, t6, t7, t8, - t9, t10); - if ((y = c + (dc - u14.d * c)) == c + (dc + u14.d * c)) - { - retval = (-y); - goto ret; - } - } - else - { - /* First stage tan */ - if ((y = a + (t2 - u13.d * a)) == a + (t2 + u13.d * a)) - { - retval = y; - goto ret; - } - } - - /* Second stage */ - MUL2 (a, da, a, da, x2, xx2, t1, t2, t3, t4, t5, t6, t7, t8); - c1 = a25.d + x2 * a27.d; - c1 = a23.d + x2 * c1; - c1 = a21.d + x2 * c1; - c1 = a19.d + x2 * c1; - c1 = a17.d + x2 * c1; - c1 = a15.d + x2 * c1; - c1 *= x2; - - ADD2 (a13.d, aa13.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a11.d, aa11.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a9.d, aa9.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a7.d, aa7.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a5.d, aa5.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (a, da, c1, cc1, c2, cc2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a, da, c2, cc2, c1, cc1, t1, t2); - - if (n) - { - /* Second stage -cot */ - DIV2 (1.0, 0.0, c1, cc1, c2, cc2, t1, t2, t3, t4, t5, t6, t7, - t8, t9, t10); - if ((y = c2 + (cc2 - u16.d * c2)) == c2 + (cc2 + u16.d * c2)) - { - retval = (-y); - goto ret; - } - } - else - { - /* Second stage tan */ - if ((y = c1 + (cc1 - u15.d * c1)) == c1 + (cc1 + u15.d * c1)) - { - retval = (y); - goto ret; - } - } - retval = tanMp (x); - goto ret; - } - - /* (IX) The case 25 < abs(x) <= 1e8, 0.0608 < abs(y) <= 0.787 */ - /* First stage */ - i = ((int) (mfftnhf.d + TWO8 * ya)); - z = (z0 = (ya - xfg[i][0].d)) + yya; - z2 = z * z; - pz = z + z * z2 * (e0.d + z2 * e1.d); - fi = xfg[i][1].d; - gi = xfg[i][2].d; - - if (n) - { - /* -cot */ - t2 = pz * (fi + gi) / (fi + pz); - if ((y = gi - (t2 - gi * u18.d)) == gi - (t2 + gi * u18.d)) - { - retval = (-sy * y); - goto ret; - } - t3 = (t2 < 0.0) ? -t2 : t2; - t4 = gi * ua18.d + t3 * ub18.d; - if ((y = gi - (t2 - t4)) == gi - (t2 + t4)) - { - retval = (-sy * y); - goto ret; - } - } - else - { - /* tan */ - t2 = pz * (gi + fi) / (gi - pz); - if ((y = fi + (t2 - fi * u17.d)) == fi + (t2 + fi * u17.d)) - { - retval = (sy * y); - goto ret; - } - t3 = (t2 < 0.0) ? -t2 : t2; - t4 = fi * ua17.d + t3 * ub17.d; - if ((y = fi + (t2 - t4)) == fi + (t2 + t4)) - { - retval = (sy * y); - goto ret; - } - } - - /* Second stage */ - ffi = xfg[i][3].d; - EADD (z0, yya, z, zz); - MUL2 (z, zz, z, zz, z2, zz2, t1, t2, t3, t4, t5, t6, t7, t8); - c1 = z2 * (a7.d + z2 * (a9.d + z2 * a11.d)); - ADD2 (a5.d, aa5.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (z, zz, c1, cc1, c2, cc2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (z, zz, c2, cc2, c1, cc1, t1, t2); - - ADD2 (fi, ffi, c1, cc1, c2, cc2, t1, t2); - MUL2 (fi, ffi, c1, cc1, c3, cc3, t1, t2, t3, t4, t5, t6, t7, t8); - SUB2 (1.0, 0.0, c3, cc3, c1, cc1, t1, t2); - - if (n) - { - /* -cot */ - DIV2 (c1, cc1, c2, cc2, c3, cc3, t1, t2, t3, t4, t5, t6, t7, t8, t9, - t10); - if ((y = c3 + (cc3 - u20.d * c3)) == c3 + (cc3 + u20.d * c3)) - { - retval = (-sy * y); - goto ret; - } - } - else - { - /* tan */ - DIV2 (c2, cc2, c1, cc1, c3, cc3, t1, t2, t3, t4, t5, t6, t7, t8, t9, - t10); - if ((y = c3 + (cc3 - u19.d * c3)) == c3 + (cc3 + u19.d * c3)) - { - retval = (sy * y); - goto ret; - } - } - retval = tanMp (x); - goto ret; - } - - /* (---) The case 1e8 < abs(x) < 2**1024 */ - /* Range reduction by algorithm iii */ - n = (__branred (x, &a, &da)) & 0x00000001; - EADD (a, da, t1, t2); - a = t1; - da = t2; - if (a < 0.0) - { - ya = -a; - yya = -da; - sy = -1; - } - else - { - ya = a; - yya = da; - sy = 1; - } - - /* (+++) The case 1e8 < abs(x) < 2**1024, abs(y) <= 1e-7 */ - if (ya <= gy1.d) - { - retval = tanMp (x); - goto ret; - } - - /* (X) The case 1e8 < abs(x) < 2**1024, 1e-7 < abs(y) <= 0.0608 */ - if (ya <= gy2.d) - { - a2 = a * a; - t2 = d9.d + a2 * d11.d; - t2 = d7.d + a2 * t2; - t2 = d5.d + a2 * t2; - t2 = d3.d + a2 * t2; - t2 = da + a * a2 * t2; - if (n) - { - /* First stage -cot */ - EADD (a, t2, b, db); - DIV2 (1.0, 0.0, b, db, c, dc, t1, t2, t3, t4, t5, t6, t7, t8, t9, - t10); - if ((y = c + (dc - u22.d * c)) == c + (dc + u22.d * c)) - { - retval = (-y); - goto ret; - } - } - else - { - /* First stage tan */ - if ((y = a + (t2 - u21.d * a)) == a + (t2 + u21.d * a)) - { - retval = y; - goto ret; - } - } - - /* Second stage */ - /* Reduction by algorithm iv */ - p = 10; - n = (__mpranred (x, &mpa, p)) & 0x00000001; - __mp_dbl (&mpa, &a, p); - __dbl_mp (a, &mpt1, p); - __sub (&mpa, &mpt1, &mpt2, p); - __mp_dbl (&mpt2, &da, p); - - MUL2 (a, da, a, da, x2, xx2, t1, t2, t3, t4, t5, t6, t7, t8); - - c1 = a25.d + x2 * a27.d; - c1 = a23.d + x2 * c1; - c1 = a21.d + x2 * c1; - c1 = a19.d + x2 * c1; - c1 = a17.d + x2 * c1; - c1 = a15.d + x2 * c1; - c1 *= x2; - - ADD2 (a13.d, aa13.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a11.d, aa11.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a9.d, aa9.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a7.d, aa7.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a5.d, aa5.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (x2, xx2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (a, da, c1, cc1, c2, cc2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a, da, c2, cc2, c1, cc1, t1, t2); - - if (n) - { - /* Second stage -cot */ - DIV2 (1.0, 0.0, c1, cc1, c2, cc2, t1, t2, t3, t4, t5, t6, t7, t8, - t9, t10); - if ((y = c2 + (cc2 - u24.d * c2)) == c2 + (cc2 + u24.d * c2)) - { - retval = (-y); - goto ret; - } - } - else - { - /* Second stage tan */ - if ((y = c1 + (cc1 - u23.d * c1)) == c1 + (cc1 + u23.d * c1)) - { - retval = y; - goto ret; - } - } - retval = tanMp (x); - goto ret; - } - - /* (XI) The case 1e8 < abs(x) < 2**1024, 0.0608 < abs(y) <= 0.787 */ - /* First stage */ - i = ((int) (mfftnhf.d + TWO8 * ya)); - z = (z0 = (ya - xfg[i][0].d)) + yya; - z2 = z * z; - pz = z + z * z2 * (e0.d + z2 * e1.d); - fi = xfg[i][1].d; - gi = xfg[i][2].d; - - if (n) - { - /* -cot */ - t2 = pz * (fi + gi) / (fi + pz); - if ((y = gi - (t2 - gi * u26.d)) == gi - (t2 + gi * u26.d)) - { - retval = (-sy * y); - goto ret; - } - t3 = (t2 < 0.0) ? -t2 : t2; - t4 = gi * ua26.d + t3 * ub26.d; - if ((y = gi - (t2 - t4)) == gi - (t2 + t4)) - { - retval = (-sy * y); - goto ret; - } - } - else - { - /* tan */ - t2 = pz * (gi + fi) / (gi - pz); - if ((y = fi + (t2 - fi * u25.d)) == fi + (t2 + fi * u25.d)) - { - retval = (sy * y); - goto ret; - } - t3 = (t2 < 0.0) ? -t2 : t2; - t4 = fi * ua25.d + t3 * ub25.d; - if ((y = fi + (t2 - t4)) == fi + (t2 + t4)) - { - retval = (sy * y); - goto ret; - } - } - - /* Second stage */ - ffi = xfg[i][3].d; - EADD (z0, yya, z, zz); - MUL2 (z, zz, z, zz, z2, zz2, t1, t2, t3, t4, t5, t6, t7, t8); - c1 = z2 * (a7.d + z2 * (a9.d + z2 * a11.d)); - ADD2 (a5.d, aa5.d, c1, 0.0, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (a3.d, aa3.d, c1, cc1, c2, cc2, t1, t2); - MUL2 (z2, zz2, c2, cc2, c1, cc1, t1, t2, t3, t4, t5, t6, t7, t8); - MUL2 (z, zz, c1, cc1, c2, cc2, t1, t2, t3, t4, t5, t6, t7, t8); - ADD2 (z, zz, c2, cc2, c1, cc1, t1, t2); - - ADD2 (fi, ffi, c1, cc1, c2, cc2, t1, t2); - MUL2 (fi, ffi, c1, cc1, c3, cc3, t1, t2, t3, t4, t5, t6, t7, t8); - SUB2 (1.0, 0.0, c3, cc3, c1, cc1, t1, t2); - - if (n) - { - /* -cot */ - DIV2 (c1, cc1, c2, cc2, c3, cc3, t1, t2, t3, t4, t5, t6, t7, t8, t9, - t10); - if ((y = c3 + (cc3 - u28.d * c3)) == c3 + (cc3 + u28.d * c3)) - { - retval = (-sy * y); - goto ret; - } - } - else - { - /* tan */ - DIV2 (c2, cc2, c1, cc1, c3, cc3, t1, t2, t3, t4, t5, t6, t7, t8, t9, - t10); - if ((y = c3 + (cc3 - u27.d * c3)) == c3 + (cc3 + u27.d * c3)) - { - retval = (sy * y); - goto ret; - } - } - retval = tanMp (x); - goto ret; - -ret: - return retval; -} - -/* multiple precision stage */ -/* Convert x to multi precision number,compute tan(x) by mptan() routine */ -/* and converts result back to double */ -static double -SECTION -tanMp (double x) -{ - int p; - double y; - mp_no mpy; - p = 32; - __mptan (x, &mpy, p); - __mp_dbl (&mpy, &y, p); - LIBC_PROBE (slowtan, 2, &x, &y); - return y; -} - -#ifdef NO_LONG_DOUBLE -weak_alias (tan, tanl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_tanh.c b/sysdeps/ieee754/dbl-64/s_tanh.c deleted file mode 100644 index 344a2f0330..0000000000 --- a/sysdeps/ieee754/dbl-64/s_tanh.c +++ /dev/null @@ -1,98 +0,0 @@ -/* @(#)s_tanh.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_tanh.c,v 1.7 1995/05/10 20:48:22 jtc Exp $"; -#endif - -/* Tanh(x) - * Return the Hyperbolic Tangent of x - * - * Method : - * x -x - * e - e - * 0. tanh(x) is defined to be ----------- - * x -x - * e + e - * 1. reduce x to non-negative by tanh(-x) = -tanh(x). - * 2. 0 <= x <= 2**-55 : tanh(x) := x*(one+x) - * -t - * 2**-55 < x <= 1 : tanh(x) := -----; t = expm1(-2x) - * t + 2 - * 2 - * 1 <= x <= 22.0 : tanh(x) := 1- ----- ; t=expm1(2x) - * t + 2 - * 22.0 < x <= INF : tanh(x) := 1. - * - * Special cases: - * tanh(NaN) is NaN; - * only tanh(0)=0 is exact for finite argument. - */ - -#include -#include -#include - -static const double one = 1.0, two = 2.0, tiny = 1.0e-300; - -double -__tanh (double x) -{ - double t, z; - int32_t jx, ix, lx; - - /* High word of |x|. */ - EXTRACT_WORDS (jx, lx, x); - ix = jx & 0x7fffffff; - - /* x is INF or NaN */ - if (ix >= 0x7ff00000) - { - if (jx >= 0) - return one / x + one; /* tanh(+-inf)=+-1 */ - else - return one / x - one; /* tanh(NaN) = NaN */ - } - - /* |x| < 22 */ - if (ix < 0x40360000) /* |x|<22 */ - { - if ((ix | lx) == 0) - return x; /* x == +-0 */ - if (ix < 0x3c800000) /* |x|<2**-55 */ - { - math_check_force_underflow (x); - return x * (one + x); /* tanh(small) = small */ - } - if (ix >= 0x3ff00000) /* |x|>=1 */ - { - t = __expm1 (two * fabs (x)); - z = one - two / (t + two); - } - else - { - t = __expm1 (-two * fabs (x)); - z = -t / (t + two); - } - /* |x| > 22, return +-1 */ - } - else - { - z = one - tiny; /* raised inexact flag */ - } - return (jx >= 0) ? z : -z; -} -weak_alias (__tanh, tanh) -#ifdef NO_LONG_DOUBLE -strong_alias (__tanh, __tanhl) -weak_alias (__tanh, tanhl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_totalorder.c b/sysdeps/ieee754/dbl-64/s_totalorder.c deleted file mode 100644 index f229119c27..0000000000 --- a/sysdeps/ieee754/dbl-64/s_totalorder.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Total order operation. dbl-64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -totalorder (double x, double y) -{ - int32_t hx, hy; - uint32_t lx, ly; - EXTRACT_WORDS (hx, lx, x); - EXTRACT_WORDS (hy, ly, y); -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - uint32_t uhx = hx & 0x7fffffff, uhy = hy & 0x7fffffff; - /* For the preferred quiet NaN convention, this operation is a - comparison of the representations of the arguments interpreted as - sign-magnitude integers. If both arguments are NaNs, invert the - quiet/signaling bit so comparing that way works. */ - if ((uhx > 0x7ff00000 || (uhx == 0x7ff00000 && lx != 0)) - && (uhy > 0x7ff00000 || (uhy == 0x7ff00000 && ly != 0))) - { - hx ^= 0x00080000; - hy ^= 0x00080000; - } -#endif - uint32_t hx_sign = hx >> 31; - uint32_t hy_sign = hy >> 31; - hx ^= hx_sign >> 1; - lx ^= hx_sign; - hy ^= hy_sign >> 1; - ly ^= hy_sign; - return hx < hy || (hx == hy && lx <= ly); -} -#ifdef NO_LONG_DOUBLE -weak_alias (totalorder, totalorderl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_totalordermag.c b/sysdeps/ieee754/dbl-64/s_totalordermag.c deleted file mode 100644 index b1bdd833db..0000000000 --- a/sysdeps/ieee754/dbl-64/s_totalordermag.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Total order operation on absolute values. dbl-64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -totalordermag (double x, double y) -{ - uint32_t hx, hy; - uint32_t lx, ly; - EXTRACT_WORDS (hx, lx, x); - EXTRACT_WORDS (hy, ly, y); - hx &= 0x7fffffff; - hy &= 0x7fffffff; -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - /* For the preferred quiet NaN convention, this operation is a - comparison of the representations of the absolute values of the - arguments. If both arguments are NaNs, invert the - quiet/signaling bit so comparing that way works. */ - if ((hx > 0x7ff00000 || (hx == 0x7ff00000 && lx != 0)) - && (hy > 0x7ff00000 || (hy == 0x7ff00000 && ly != 0))) - { - hx ^= 0x00080000; - hy ^= 0x00080000; - } -#endif - return hx < hy || (hx == hy && lx <= ly); -} -#ifdef NO_LONG_DOUBLE -weak_alias (totalordermag, totalordermagl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_trunc.c b/sysdeps/ieee754/dbl-64/s_trunc.c deleted file mode 100644 index 730c1b377c..0000000000 --- a/sysdeps/ieee754/dbl-64/s_trunc.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Truncate argument to nearest integral value not larger than the argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -double -__trunc (double x) -{ - int32_t i0, j0; - u_int32_t i1; - int sx; - - EXTRACT_WORDS (i0, i1, x); - sx = i0 & 0x80000000; - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; - if (j0 < 20) - { - if (j0 < 0) - /* The magnitude of the number is < 1 so the result is +-0. */ - INSERT_WORDS (x, sx, 0); - else - INSERT_WORDS (x, sx | (i0 & ~(0x000fffff >> j0)), 0); - } - else if (j0 > 51) - { - if (j0 == 0x400) - /* x is inf or NaN. */ - return x + x; - } - else - { - INSERT_WORDS (x, i0, i1 & ~(0xffffffffu >> (j0 - 20))); - } - - return x; -} -#ifndef __trunc -weak_alias (__trunc, trunc) -# ifdef NO_LONG_DOUBLE -strong_alias (__trunc, __truncl) -weak_alias (__trunc, truncl) -# endif -#endif diff --git a/sysdeps/ieee754/dbl-64/s_ufromfp.c b/sysdeps/ieee754/dbl-64/s_ufromfp.c deleted file mode 100644 index c3d9047930..0000000000 --- a/sysdeps/ieee754/dbl-64/s_ufromfp.c +++ /dev/null @@ -1,7 +0,0 @@ -#define UNSIGNED 1 -#define INEXACT 0 -#define FUNC ufromfp -#include -#ifdef NO_LONG_DOUBLE -weak_alias (ufromfp, ufromfpl) -#endif diff --git a/sysdeps/ieee754/dbl-64/s_ufromfpx.c b/sysdeps/ieee754/dbl-64/s_ufromfpx.c deleted file mode 100644 index dee607f8c0..0000000000 --- a/sysdeps/ieee754/dbl-64/s_ufromfpx.c +++ /dev/null @@ -1,7 +0,0 @@ -#define UNSIGNED 1 -#define INEXACT 1 -#define FUNC ufromfpx -#include -#ifdef NO_LONG_DOUBLE -weak_alias (ufromfpx, ufromfpxl) -#endif diff --git a/sysdeps/ieee754/dbl-64/sincos32.c b/sysdeps/ieee754/dbl-64/sincos32.c deleted file mode 100644 index 9cd8e2f97f..0000000000 --- a/sysdeps/ieee754/dbl-64/sincos32.c +++ /dev/null @@ -1,369 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/****************************************************************/ -/* MODULE_NAME: sincos32.c */ -/* */ -/* FUNCTIONS: ss32 */ -/* cc32 */ -/* c32 */ -/* sin32 */ -/* cos32 */ -/* mpsin */ -/* mpcos */ -/* mpranred */ -/* mpsin1 */ -/* mpcos1 */ -/* */ -/* FILES NEEDED: endian.h mpa.h sincos32.h */ -/* mpa.c */ -/* */ -/* Multi Precision sin() and cos() function with p=32 for sin()*/ -/* cos() arcsin() and arccos() routines */ -/* In addition mpranred() routine performs range reduction of */ -/* a double number x into multi precision number y, */ -/* such that y=x-n*pi/2, abs(y) -#include -#include - -#ifndef SECTION -# define SECTION -#endif - -/* Compute Multi-Precision sin() function for given p. Receive Multi Precision - number x and result stored at y. */ -static void -SECTION -ss32 (mp_no *x, mp_no *y, int p) -{ - int i; - double a; - mp_no mpt1, x2, gor, sum, mpk = {1, {1.0}}; - for (i = 1; i <= p; i++) - mpk.d[i] = 0; - - __sqr (x, &x2, p); - __cpy (&oofac27, &gor, p); - __cpy (&gor, &sum, p); - for (a = 27.0; a > 1.0; a -= 2.0) - { - mpk.d[1] = a * (a - 1.0); - __mul (&gor, &mpk, &mpt1, p); - __cpy (&mpt1, &gor, p); - __mul (&x2, &sum, &mpt1, p); - __sub (&gor, &mpt1, &sum, p); - } - __mul (x, &sum, y, p); -} - -/* Compute Multi-Precision cos() function for given p. Receive Multi Precision - number x and result stored at y. */ -static void -SECTION -cc32 (mp_no *x, mp_no *y, int p) -{ - int i; - double a; - mp_no mpt1, x2, gor, sum, mpk = {1, {1.0}}; - for (i = 1; i <= p; i++) - mpk.d[i] = 0; - - __sqr (x, &x2, p); - mpk.d[1] = 27.0; - __mul (&oofac27, &mpk, &gor, p); - __cpy (&gor, &sum, p); - for (a = 26.0; a > 2.0; a -= 2.0) - { - mpk.d[1] = a * (a - 1.0); - __mul (&gor, &mpk, &mpt1, p); - __cpy (&mpt1, &gor, p); - __mul (&x2, &sum, &mpt1, p); - __sub (&gor, &mpt1, &sum, p); - } - __mul (&x2, &sum, y, p); -} - -/* Compute both sin(x), cos(x) as Multi precision numbers. */ -void -SECTION -__c32 (mp_no *x, mp_no *y, mp_no *z, int p) -{ - mp_no u, t, t1, t2, c, s; - int i; - __cpy (x, &u, p); - u.e = u.e - 1; - cc32 (&u, &c, p); - ss32 (&u, &s, p); - for (i = 0; i < 24; i++) - { - __mul (&c, &s, &t, p); - __sub (&s, &t, &t1, p); - __add (&t1, &t1, &s, p); - __sub (&__mptwo, &c, &t1, p); - __mul (&t1, &c, &t2, p); - __add (&t2, &t2, &c, p); - } - __sub (&__mpone, &c, y, p); - __cpy (&s, z, p); -} - -/* Receive double x and two double results of sin(x) and return result which is - more accurate, computing sin(x) with multi precision routine c32. */ -double -SECTION -__sin32 (double x, double res, double res1) -{ - int p; - mp_no a, b, c; - p = 32; - __dbl_mp (res, &a, p); - __dbl_mp (0.5 * (res1 - res), &b, p); - __add (&a, &b, &c, p); - if (x > 0.8) - { - __sub (&hp, &c, &a, p); - __c32 (&a, &b, &c, p); - } - else - __c32 (&c, &a, &b, p); /* b=sin(0.5*(res+res1)) */ - __dbl_mp (x, &c, p); /* c = x */ - __sub (&b, &c, &a, p); - /* if a > 0 return min (res, res1), otherwise return max (res, res1). */ - if ((a.d[0] > 0 && res >= res1) || (a.d[0] <= 0 && res <= res1)) - res = res1; - LIBC_PROBE (slowasin, 2, &res, &x); - return res; -} - -/* Receive double x and two double results of cos(x) and return result which is - more accurate, computing cos(x) with multi precision routine c32. */ -double -SECTION -__cos32 (double x, double res, double res1) -{ - int p; - mp_no a, b, c; - p = 32; - __dbl_mp (res, &a, p); - __dbl_mp (0.5 * (res1 - res), &b, p); - __add (&a, &b, &c, p); - if (x > 2.4) - { - __sub (&pi, &c, &a, p); - __c32 (&a, &b, &c, p); - b.d[0] = -b.d[0]; - } - else if (x > 0.8) - { - __sub (&hp, &c, &a, p); - __c32 (&a, &c, &b, p); - } - else - __c32 (&c, &b, &a, p); /* b=cos(0.5*(res+res1)) */ - __dbl_mp (x, &c, p); /* c = x */ - __sub (&b, &c, &a, p); - /* if a > 0 return max (res, res1), otherwise return min (res, res1). */ - if ((a.d[0] > 0 && res <= res1) || (a.d[0] <= 0 && res >= res1)) - res = res1; - LIBC_PROBE (slowacos, 2, &res, &x); - return res; -} - -/* Compute sin() of double-length number (X + DX) as Multi Precision number and - return result as double. If REDUCE_RANGE is true, X is assumed to be the - original input and DX is ignored. */ -double -SECTION -__mpsin (double x, double dx, bool reduce_range) -{ - double y; - mp_no a, b, c, s; - int n; - int p = 32; - - if (reduce_range) - { - n = __mpranred (x, &a, p); /* n is 0, 1, 2 or 3. */ - __c32 (&a, &c, &s, p); - } - else - { - n = -1; - __dbl_mp (x, &b, p); - __dbl_mp (dx, &c, p); - __add (&b, &c, &a, p); - if (x > 0.8) - { - __sub (&hp, &a, &b, p); - __c32 (&b, &s, &c, p); - } - else - __c32 (&a, &c, &s, p); /* b = sin(x+dx) */ - } - - /* Convert result based on which quarter of unit circle y is in. */ - switch (n) - { - case 1: - __mp_dbl (&c, &y, p); - break; - - case 3: - __mp_dbl (&c, &y, p); - y = -y; - break; - - case 2: - __mp_dbl (&s, &y, p); - y = -y; - break; - - /* Quadrant not set, so the result must be sin (X + DX), which is also in - S. */ - case 0: - default: - __mp_dbl (&s, &y, p); - } - LIBC_PROBE (slowsin, 3, &x, &dx, &y); - return y; -} - -/* Compute cos() of double-length number (X + DX) as Multi Precision number and - return result as double. If REDUCE_RANGE is true, X is assumed to be the - original input and DX is ignored. */ -double -SECTION -__mpcos (double x, double dx, bool reduce_range) -{ - double y; - mp_no a, b, c, s; - int n; - int p = 32; - - if (reduce_range) - { - n = __mpranred (x, &a, p); /* n is 0, 1, 2 or 3. */ - __c32 (&a, &c, &s, p); - } - else - { - n = -1; - __dbl_mp (x, &b, p); - __dbl_mp (dx, &c, p); - __add (&b, &c, &a, p); - if (x > 0.8) - { - __sub (&hp, &a, &b, p); - __c32 (&b, &s, &c, p); - } - else - __c32 (&a, &c, &s, p); /* a = cos(x+dx) */ - } - - /* Convert result based on which quarter of unit circle y is in. */ - switch (n) - { - case 1: - __mp_dbl (&s, &y, p); - y = -y; - break; - - case 3: - __mp_dbl (&s, &y, p); - break; - - case 2: - __mp_dbl (&c, &y, p); - y = -y; - break; - - /* Quadrant not set, so the result must be cos (X + DX), which is also - stored in C. */ - case 0: - default: - __mp_dbl (&c, &y, p); - } - LIBC_PROBE (slowcos, 3, &x, &dx, &y); - return y; -} - -/* Perform range reduction of a double number x into multi precision number y, - such that y = x - n * pi / 2, abs (y) < pi / 4, n = 0, +-1, +-2, ... - Return int which indicates in which quarter of circle x is. */ -int -SECTION -__mpranred (double x, mp_no *y, int p) -{ - number v; - double t, xn; - int i, k, n; - mp_no a, b, c; - - if (fabs (x) < 2.8e14) - { - t = (x * hpinv.d + toint.d); - xn = t - toint.d; - v.d = t; - n = v.i[LOW_HALF] & 3; - __dbl_mp (xn, &a, p); - __mul (&a, &hp, &b, p); - __dbl_mp (x, &c, p); - __sub (&c, &b, y, p); - return n; - } - else - { - /* If x is very big more precision required. */ - __dbl_mp (x, &a, p); - a.d[0] = 1.0; - k = a.e - 5; - if (k < 0) - k = 0; - b.e = -k; - b.d[0] = 1.0; - for (i = 0; i < p; i++) - b.d[i + 1] = toverp[i + k]; - __mul (&a, &b, &c, p); - t = c.d[c.e]; - for (i = 1; i <= p - c.e; i++) - c.d[i] = c.d[i + c.e]; - for (i = p + 1 - c.e; i <= p; i++) - c.d[i] = 0; - c.e = 0; - if (c.d[1] >= HALFRAD) - { - t += 1.0; - __sub (&c, &__mpone, &b, p); - __mul (&b, &hp, y, p); - } - else - __mul (&c, &hp, y, p); - n = (int) t; - if (x < 0) - { - y->d[0] = -y->d[0]; - n = -n; - } - return (n & 3); - } -} diff --git a/sysdeps/ieee754/dbl-64/sincos32.h b/sysdeps/ieee754/dbl-64/sincos32.h deleted file mode 100644 index 8265a23e77..0000000000 --- a/sysdeps/ieee754/dbl-64/sincos32.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/******************************************************************/ -/* */ -/* MODULE_NAME:sincos32.h */ -/* */ -/* common data and variables prototype and definition */ -/******************************************************************/ - -#ifndef SINCOS32_H -#define SINCCOS32_H - -#ifdef BIG_ENDI -static const number -/**/ hpinv = {{0x3FE45F30, 0x6DC9C883}}, /* 0.63661977236758138 */ -/**/ toint = {{0x43380000, 0x00000000}}; /* 6755399441055744 */ - -#else -#ifdef LITTLE_ENDI -static const number -/**/ hpinv = {{0x6DC9C883, 0x3FE45F30}}, /* 0.63661977236758138 */ -/**/ toint = {{0x00000000, 0x43380000}}; /* 6755399441055744 */ - -#endif -#endif - -static const mp_no - oofac27 = {-3,{1.0,7.0,4631664.0,12006312.0,13118056.0,6538613.0,646354.0, - 8508025.0,9131256.0,7548776.0,2529842.0,8864927.0,660489.0,15595125.0,12777885.0, - 11618489.0,13348664.0,5486686.0,514518.0,11275535.0,4727621.0,3575562.0, - 13579710.0,5829745.0,7531862.0,9507898.0,6915060.0,4079264.0,1907586.0, - 6078398.0,13789314.0,5504104.0,14136.0}}, - pi = {1,{1.0,3.0, - 2375530.0,8947107.0,578323.0,1673774.0,225395.0,4498441.0,3678761.0, - 10432976.0,536314.0,10021966.0,7113029.0,2630118.0,3723283.0,7847508.0, - 6737716.0,15273068.0,12626985.0,12044668.0,5299519.0,8705461.0,11880201.0, - 1544726.0,14014857.0,7994139.0,13709579.0,10918111.0,11906095.0,16610011.0, - 13638367.0,12040417.0,11529578.0,2522774.0}}, - hp = {1,{1.0, 1.0, - 9576373.0,4473553.0,8677769.0,9225495.0,112697.0,10637828.0, - 10227988.0,13605096.0,268157.0,5010983.0,3556514.0,9703667.0, - 1861641.0,12312362.0,3368858.0,7636534.0,6313492.0,14410942.0, - 2649759.0,12741338.0,14328708.0,9160971.0,7007428.0,12385677.0, - 15243397.0,13847663.0,14341655.0,16693613.0,15207791.0,14408816.0, - 14153397.0,1261387.0,6110792.0,2291862.0,4181138.0,5295267.0}}; - -static const double toverp[75] = { - 10680707.0, 7228996.0, 1387004.0, 2578385.0, 16069853.0, - 12639074.0, 9804092.0, 4427841.0, 16666979.0, 11263675.0, - 12935607.0, 2387514.0, 4345298.0, 14681673.0, 3074569.0, - 13734428.0, 16653803.0, 1880361.0, 10960616.0, 8533493.0, - 3062596.0, 8710556.0, 7349940.0, 6258241.0, 3772886.0, - 3769171.0, 3798172.0, 8675211.0, 12450088.0, 3874808.0, - 9961438.0, 366607.0, 15675153.0, 9132554.0, 7151469.0, - 3571407.0, 2607881.0, 12013382.0, 4155038.0, 6285869.0, - 7677882.0, 13102053.0, 15825725.0, 473591.0, 9065106.0, - 15363067.0, 6271263.0, 9264392.0, 5636912.0, 4652155.0, - 7056368.0, 13614112.0, 10155062.0, 1944035.0, 9527646.0, - 15080200.0, 6658437.0, 6231200.0, 6832269.0, 16767104.0, - 5075751.0, 3212806.0, 1398474.0, 7579849.0, 6349435.0, - 12618859.0, 4703257.0, 12806093.0, 14477321.0, 2786137.0, - 12875403.0, 9837734.0, 14528324.0, 13719321.0, 343717.0 }; - -#endif diff --git a/sysdeps/ieee754/dbl-64/sincostab.c b/sysdeps/ieee754/dbl-64/sincostab.c deleted file mode 100644 index b3e06bfebd..0000000000 --- a/sysdeps/ieee754/dbl-64/sincostab.c +++ /dev/null @@ -1,914 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -#include -#include - -/****************************************************************/ -/* TABLES FOR THE usin() and ucos() FUNCTION */ -/****************************************************************/ - - -#ifdef BIG_ENDI -const union {int4 i[880]; double x[440];}__sincostab = { .i = { -/**/ 0x00000000, 0x00000000, -/**/ 0x00000000, 0x00000000, -/**/ 0x3FF00000, 0x00000000, -/**/ 0x00000000, 0x00000000, -/**/ 0x3F7FFFEA, 0xAAAEEEEF, -/**/ 0xBC1E45E2, 0xEC67B77C, -/**/ 0x3FEFFFC0, 0x00155552, -/**/ 0x3C8F4A01, 0xA0196DAE, -/**/ 0x3F8FFFAA, 0xAAEEEED5, -/**/ 0xBC02AB63, 0x9A9F0777, -/**/ 0x3FEFFF00, 0x0155549F, -/**/ 0x3C828A28, 0xA03A5EF3, -/**/ 0x3F97FF70, 0x01033255, -/**/ 0x3BFEFE2B, 0x51527336, -/**/ 0x3FEFFDC0, 0x06BFF7E6, -/**/ 0x3C8AE6DA, 0xE86977BD, -/**/ 0x3F9FFEAA, 0xAEEEE86F, -/**/ 0xBC3CD406, 0xFB224AE2, -/**/ 0x3FEFFC00, 0x155527D3, -/**/ 0xBC83B544, 0x92D89B5B, -/**/ 0x3FA3FEB2, 0xB12D45D5, -/**/ 0x3C34EC54, 0x203D1C11, -/**/ 0x3FEFF9C0, 0x3414A7BA, -/**/ 0x3C6991F4, 0xBE6C59BF, -/**/ 0x3FA7FDC0, 0x1032FBA9, -/**/ 0xBC4599BD, 0xF46E997A, -/**/ 0x3FEFF700, 0x6BFDF99F, -/**/ 0xBC78B3B5, 0x60648D5F, -/**/ 0x3FABFC6D, 0x78586DAC, -/**/ 0x3C18E4FD, 0x03DBF236, -/**/ 0x3FEFF3C0, 0xC8103A31, -/**/ 0x3C74856D, 0xBDDC0E66, -/**/ 0x3FAFFAAA, 0xEEED4EDB, -/**/ 0xBC42D16D, 0x32684B69, -/**/ 0x3FEFF001, 0x5549F4D3, -/**/ 0x3C832838, 0x7B99426F, -/**/ 0x3FB1FC34, 0x3D808BEF, -/**/ 0xBC5F3D32, 0xE6F3BE4F, -/**/ 0x3FEFEBC2, 0x22A8EF9F, -/**/ 0x3C579349, 0x34F54C77, -/**/ 0x3FB3FACB, 0x12D1755B, -/**/ 0xBC592191, 0x5299468C, -/**/ 0x3FEFE703, 0x4129EF6F, -/**/ 0xBC6CBF43, 0x37C96F97, -/**/ 0x3FB5F911, 0xFD10B737, -/**/ 0xBC50184F, 0x02BE9102, -/**/ 0x3FEFE1C4, 0xC3C873EB, -/**/ 0xBC35A9C9, 0x057C4A02, -/**/ 0x3FB7F701, 0x032550E4, -/**/ 0x3C3AFC2D, 0x1800501A, -/**/ 0x3FEFDC06, 0xBF7E6B9B, -/**/ 0x3C831902, 0xB535F8DB, -/**/ 0x3FB9F490, 0x2D55D1F9, -/**/ 0x3C52696D, 0x7EAC1DC1, -/**/ 0x3FEFD5C9, 0x4B43E000, -/**/ 0xBC62E768, 0xCB4F92F9, -/**/ 0x3FBBF1B7, 0x8568391D, -/**/ 0x3C5E9184, 0x1DEA4CC8, -/**/ 0x3FEFCF0C, 0x800E99B1, -/**/ 0x3C6EA3D7, 0x86D186AC, -/**/ 0x3FBDEE6F, 0x16C1CCE6, -/**/ 0xBC450F8E, 0x2FB71673, -/**/ 0x3FEFC7D0, 0x78D1BC88, -/**/ 0x3C8075D2, 0x447DB685, -/**/ 0x3FBFEAAE, 0xEE86EE36, -/**/ 0xBC4AFCB2, 0xBCC6F03B, -/**/ 0x3FEFC015, 0x527D5BD3, -/**/ 0x3C8B68F3, 0x5094EFB8, -/**/ 0x3FC0F337, 0x8DDD71D1, -/**/ 0x3C6D8468, 0x724F0F9E, -/**/ 0x3FEFB7DB, 0x2BFE0695, -/**/ 0x3C821DAD, 0xF4F65AB1, -/**/ 0x3FC1F0D3, 0xD7AFCEAF, -/**/ 0xBC66EF95, 0x099769A5, -/**/ 0x3FEFAF22, 0x263C4BD3, -/**/ 0xBC552ACE, 0x133A2769, -/**/ 0x3FC2EE28, 0x5E4AB88F, -/**/ 0xBC6E4D0F, 0x05DEE058, -/**/ 0x3FEFA5EA, 0x641C36F2, -/**/ 0x3C404DA6, 0xED17CC7C, -/**/ 0x3FC3EB31, 0x2C5D66CB, -/**/ 0x3C647D66, 0x6B66CB91, -/**/ 0x3FEF9C34, 0x0A7CC428, -/**/ 0x3C8C5B6B, 0x063B7462, -/**/ 0x3FC4E7EA, 0x4DC5F27B, -/**/ 0x3C5949DB, 0x2AC072FC, -/**/ 0x3FEF91FF, 0x40374D01, -/**/ 0xBC67D03F, 0x4D3A9E4C, -/**/ 0x3FC5E44F, 0xCFA126F3, -/**/ 0xBC66F443, 0x063F89B6, -/**/ 0x3FEF874C, 0x2E1EECF6, -/**/ 0xBC8C6514, 0xE1332B16, -/**/ 0x3FC6E05D, 0xC05A4D4C, -/**/ 0xBBD32C5C, 0x8B81C940, -/**/ 0x3FEF7C1A, 0xFEFFDE24, -/**/ 0xBC78F55B, 0xC47540B1, -/**/ 0x3FC7DC10, 0x2FBAF2B5, -/**/ 0x3C45AB50, 0xE23C97C3, -/**/ 0x3FEF706B, 0xDF9ECE1C, -/**/ 0xBC8698C8, 0x0C36DCB4, -/**/ 0x3FC8D763, 0x2EFAA944, -/**/ 0xBC620FA2, 0x62CBB953, -/**/ 0x3FEF643E, 0xFEB82ACD, -/**/ 0x3C76B00A, 0xC1FE28AC, -/**/ 0x3FC9D252, 0xD0CEC312, -/**/ 0x3C59C43D, 0x80B1137D, -/**/ 0x3FEF5794, 0x8CFF6797, -/**/ 0x3C6E3A0D, 0x3E03B1D5, -/**/ 0x3FCACCDB, 0x297A0765, -/**/ 0xBC59883B, 0x57D6CDEB, -/**/ 0x3FEF4A6C, 0xBD1E3A79, -/**/ 0x3C813DF0, 0xEDAEBB57, -/**/ 0x3FCBC6F8, 0x4EDC6199, -/**/ 0x3C69C1A5, 0x6A7B0CAB, -/**/ 0x3FEF3CC7, 0xC3B3D16E, -/**/ 0xBC621A3A, 0xD28A3494, -/**/ 0x3FCCC0A6, 0x588289A3, -/**/ 0xBC6868D0, 0x9BC87C6B, -/**/ 0x3FEF2EA5, 0xD753FFED, -/**/ 0x3C8CC421, 0x5F56D583, -/**/ 0x3FCDB9E1, 0x5FB5A5D0, -/**/ 0xBC632E20, 0xD6CC6FC2, -/**/ 0x3FEF2007, 0x3086649F, -/**/ 0x3C7B9404, 0x16C1984B, -/**/ 0x3FCEB2A5, 0x7F8AE5A3, -/**/ 0xBC60BE06, 0xAF572CEB, -/**/ 0x3FEF10EC, 0x09C5873B, -/**/ 0x3C8D9072, 0x762C1283, -/**/ 0x3FCFAAEE, 0xD4F31577, -/**/ 0xBC615D88, 0x508E32B8, -/**/ 0x3FEF0154, 0x9F7DEEA1, -/**/ 0x3C8D3C1E, 0x99E5CAFD, -/**/ 0x3FD0515C, 0xBF65155C, -/**/ 0xBC79B8C2, 0x9DFD8EC8, -/**/ 0x3FEEF141, 0x300D2F26, -/**/ 0xBC82AA1B, 0x08DED372, -/**/ 0x3FD0CD00, 0xCEF36436, -/**/ 0xBC79FB0A, 0x0C93E2B5, -/**/ 0x3FEEE0B1, 0xFBC0F11C, -/**/ 0xBC4BFD23, 0x80BBC3B1, -/**/ 0x3FD14861, 0xAA94DDEB, -/**/ 0xBC6BE881, 0xB5B615A4, -/**/ 0x3FEECFA7, 0x44D5EFA1, -/**/ 0xBC556D0A, 0x4AF541D0, -/**/ 0x3FD1C37D, 0x64C6B876, -/**/ 0x3C746076, 0xFE0DCFF5, -/**/ 0x3FEEBE21, 0x4F76EFA8, -/**/ 0xBC802F9F, 0x12BA543E, -/**/ 0x3FD23E52, 0x111AAF36, -/**/ 0xBC74F080, 0x334EFF18, -/**/ 0x3FEEAC20, 0x61BBAF4F, -/**/ 0x3C62C1D5, 0x3E94658D, -/**/ 0x3FD2B8DD, 0xC43EB49F, -/**/ 0x3C615538, 0x99F2D807, -/**/ 0x3FEE99A4, 0xC3A7CD83, -/**/ 0xBC82264B, 0x1BC53CE8, -/**/ 0x3FD3331E, 0x94049F87, -/**/ 0x3C7E0CB6, 0xB40C302C, -/**/ 0x3FEE86AE, 0xBF29A9ED, -/**/ 0x3C89397A, 0xFDBB58A7, -/**/ 0x3FD3AD12, 0x9769D3D8, -/**/ 0x3C003D55, 0x04878398, -/**/ 0x3FEE733E, 0xA0193D40, -/**/ 0xBC86428B, 0x3546CE13, -/**/ 0x3FD426B7, 0xE69EE697, -/**/ 0xBC7F09C7, 0x5705C59F, -/**/ 0x3FEE5F54, 0xB436E9D0, -/**/ 0x3C87EB0F, 0xD02FC8BC, -/**/ 0x3FD4A00C, 0x9B0F3D20, -/**/ 0x3C7823BA, 0x6BB08EAD, -/**/ 0x3FEE4AF1, 0x4B2A449C, -/**/ 0xBC868CA0, 0x2E8A6833, -/**/ 0x3FD5190E, 0xCF68A77A, -/**/ 0x3C7B3571, 0x55EEF0F3, -/**/ 0x3FEE3614, 0xB680D6A5, -/**/ 0xBC727793, 0xAA015237, -/**/ 0x3FD591BC, 0x9FA2F597, -/**/ 0x3C67C74B, 0xAC3FE0CB, -/**/ 0x3FEE20BF, 0x49ACD6C1, -/**/ 0xBC5660AE, 0xC7EF636C, -/**/ 0x3FD60A14, 0x29078775, -/**/ 0x3C5B1FD8, 0x0BA89133, -/**/ 0x3FEE0AF1, 0x5A03DBCE, -/**/ 0x3C5FE8E7, 0x02771AE6, -/**/ 0x3FD68213, 0x8A38D7F7, -/**/ 0xBC7D8892, 0x02444AAD, -/**/ 0x3FEDF4AB, 0x3EBD875E, -/**/ 0xBC8E2D8A, 0x7E6736C4, -/**/ 0x3FD6F9B8, 0xE33A0255, -/**/ 0x3C742BC1, 0x4EE9DA0D, -/**/ 0x3FEDDDED, 0x50F228D6, -/**/ 0xBC6E80C8, 0xD42BA2BF, -/**/ 0x3FD77102, 0x55764214, -/**/ 0xBC66EAD7, 0x314BB6CE, -/**/ 0x3FEDC6B7, 0xEB995912, -/**/ 0x3C54B364, 0x776DCD35, -/**/ 0x3FD7E7EE, 0x03C86D4E, -/**/ 0xBC7B63BC, 0xDABF5AF2, -/**/ 0x3FEDAF0B, 0x6B888E83, -/**/ 0x3C8A249E, 0x2B5E5CEA, -/**/ 0x3FD85E7A, 0x12826949, -/**/ 0x3C78A40E, 0x9B5FACE0, -/**/ 0x3FED96E8, 0x2F71A9DC, -/**/ 0x3C8FF61B, 0xD5D2039D, -/**/ 0x3FD8D4A4, 0xA774992F, -/**/ 0x3C744A02, 0xEA766326, -/**/ 0x3FED7E4E, 0x97E17B4A, -/**/ 0xBC63B770, 0x352BED94, -/**/ 0x3FD94A6B, 0xE9F546C5, -/**/ 0xBC769CE1, 0x3E683F58, -/**/ 0x3FED653F, 0x073E4040, -/**/ 0xBC876236, 0x434BEC37, -/**/ 0x3FD9BFCE, 0x02E80510, -/**/ 0x3C709E39, 0xA320B0A4, -/**/ 0x3FED4BB9, 0xE1C619E0, -/**/ 0x3C8F34BB, 0x77858F61, -/**/ 0x3FDA34C9, 0x1CC50CCA, -/**/ 0xBC5A310E, 0x3B50CECD, -/**/ 0x3FED31BF, 0x8D8D7C06, -/**/ 0x3C7E60DD, 0x3089CBDD, -/**/ 0x3FDAA95B, 0x63A09277, -/**/ 0xBC66293E, 0xB13C0381, -/**/ 0x3FED1750, 0x727D94F0, -/**/ 0x3C80D52B, 0x1EC1A48E, -/**/ 0x3FDB1D83, 0x05321617, -/**/ 0xBC7AE242, 0xCB99F519, -/**/ 0x3FECFC6C, 0xFA52AD9F, -/**/ 0x3C88B5B5, 0x508F2A0D, -/**/ 0x3FDB913E, 0x30DBAC43, -/**/ 0xBC7E38AD, 0x2F6C3FF1, -/**/ 0x3FECE115, 0x909A82E5, -/**/ 0x3C81F139, 0xBB31109A, -/**/ 0x3FDC048B, 0x17B140A3, -/**/ 0x3C619FE6, 0x757E9FA7, -/**/ 0x3FECC54A, 0xA2B2972E, -/**/ 0x3C64EE16, 0x2BA83A98, -/**/ 0x3FDC7767, 0xEC7FD19E, -/**/ 0xBC5EB14D, 0x1A3D5826, -/**/ 0x3FECA90C, 0x9FC67D0B, -/**/ 0xBC646A81, 0x485E3462, -/**/ 0x3FDCE9D2, 0xE3D4A51F, -/**/ 0xBC62FC8A, 0x12DAE298, -/**/ 0x3FEC8C5B, 0xF8CE1A84, -/**/ 0x3C7AB3D1, 0xA1590123, -/**/ 0x3FDD5BCA, 0x34047661, -/**/ 0x3C728A44, 0xA75FC29C, -/**/ 0x3FEC6F39, 0x208BE53B, -/**/ 0xBC8741DB, 0xFBAADB42, -/**/ 0x3FDDCD4C, 0x15329C9A, -/**/ 0x3C70D4C6, 0xE171FD9A, -/**/ 0x3FEC51A4, 0x8B8B175E, -/**/ 0xBC61BBB4, 0x3B9AA880, -/**/ 0x3FDE3E56, 0xC1582A69, -/**/ 0xBC50A482, 0x1099F88F, -/**/ 0x3FEC339E, 0xB01DDD81, -/**/ 0xBC8CAAF5, 0xEE82C5C0, -/**/ 0x3FDEAEE8, 0x744B05F0, -/**/ 0xBC5789B4, 0x3C9B027D, -/**/ 0x3FEC1528, 0x065B7D50, -/**/ 0xBC889211, 0x1312E828, -/**/ 0x3FDF1EFF, 0x6BC4F97B, -/**/ 0x3C717212, 0xF8A7525C, -/**/ 0x3FEBF641, 0x081E7536, -/**/ 0x3C8B7BD7, 0x1628A9A1, -/**/ 0x3FDF8E99, 0xE76ABC97, -/**/ 0x3C59D950, 0xAF2D00A3, -/**/ 0x3FEBD6EA, 0x310294F5, -/**/ 0x3C731BBC, 0xC88C109D, -/**/ 0x3FDFFDB6, 0x28D2F57A, -/**/ 0x3C6F4A99, 0x2E905B6A, -/**/ 0x3FEBB723, 0xFE630F32, -/**/ 0x3C772BD2, 0x452D0A39, -/**/ 0x3FE03629, 0x39C69955, -/**/ 0xBC82D8CD, 0x78397B01, -/**/ 0x3FEB96EE, 0xEF58840E, -/**/ 0x3C545A3C, 0xC78FADE0, -/**/ 0x3FE06D36, 0x86946E5B, -/**/ 0x3C83F5AE, 0x4538FF1B, -/**/ 0x3FEB764B, 0x84B704C2, -/**/ 0xBC8F5848, 0xC21B389B, -/**/ 0x3FE0A402, 0x1E9E1001, -/**/ 0xBC86F643, 0xA13914F6, -/**/ 0x3FEB553A, 0x410C104E, -/**/ 0x3C58FF79, 0x47027A16, -/**/ 0x3FE0DA8B, 0x26B5672E, -/**/ 0xBC8A58DE, 0xF0BEE909, -/**/ 0x3FEB33BB, 0xA89C8948, -/**/ 0x3C8EA6A5, 0x1D1F6CA9, -/**/ 0x3FE110D0, 0xC4B69C3B, -/**/ 0x3C8D9189, 0x98809981, -/**/ 0x3FEB11D0, 0x4162A4C6, -/**/ 0x3C71DD56, 0x1EFBC0C2, -/**/ 0x3FE146D2, 0x1F8B7F82, -/**/ 0x3C7BF953, 0x5E2739A8, -/**/ 0x3FEAEF78, 0x930BD275, -/**/ 0xBC7F8362, 0x79746F94, -/**/ 0x3FE17C8E, 0x5F2EEDB0, -/**/ 0x3C635E57, 0x102E2488, -/**/ 0x3FEACCB5, 0x26F69DE5, -/**/ 0x3C88FB6A, 0x8DD6B6CC, -/**/ 0x3FE1B204, 0xACB02FDD, -/**/ 0xBC5F190C, 0x70CBB5FF, -/**/ 0x3FEAA986, 0x88308913, -/**/ 0xBC0B83D6, 0x07CD5070, -/**/ 0x3FE1E734, 0x3236574C, -/**/ 0x3C722A3F, 0xA4F41D5A, -/**/ 0x3FEA85ED, 0x4373E02D, -/**/ 0x3C69BE06, 0x385EC792, -/**/ 0x3FE21C1C, 0x1B0394CF, -/**/ 0x3C5E5B32, 0x4B23AA31, -/**/ 0x3FEA61E9, 0xE72586AF, -/**/ 0x3C858330, 0xE2FD453F, -/**/ 0x3FE250BB, 0x93788BBB, -/**/ 0x3C7EA3D0, 0x2457BCCE, -/**/ 0x3FEA3D7D, 0x0352BDCF, -/**/ 0xBC868DBA, 0xECA19669, -/**/ 0x3FE28511, 0xC917A067, -/**/ 0xBC801DF1, 0xD9A16B70, -/**/ 0x3FEA18A7, 0x29AEE445, -/**/ 0x3C395E25, 0x736C0358, -/**/ 0x3FE2B91D, 0xEA88421E, -/**/ 0xBC8FA371, 0xDB216AB0, -/**/ 0x3FE9F368, 0xED912F85, -/**/ 0xBC81D200, 0xC5791606, -/**/ 0x3FE2ECDF, 0x279A3082, -/**/ 0x3C8D3557, 0xE0E7E37E, -/**/ 0x3FE9CDC2, 0xE3F25E5C, -/**/ 0x3C83F991, 0x12993F62, -/**/ 0x3FE32054, 0xB148BC4F, -/**/ 0x3C8F6B42, 0x095A135B, -/**/ 0x3FE9A7B5, 0xA36A6514, -/**/ 0x3C8722CF, 0xCC9FA7A9, -/**/ 0x3FE3537D, 0xB9BE0367, -/**/ 0x3C6B327E, 0x7AF040F0, -/**/ 0x3FE98141, 0xC42E1310, -/**/ 0x3C8D1FF8, 0x0488F08D, -/**/ 0x3FE38659, 0x7456282B, -/**/ 0xBC710FAD, 0xA93B07A8, -/**/ 0x3FE95A67, 0xE00CB1FD, -/**/ 0xBC80BEFD, 0xA21F862D, -/**/ 0x3FE3B8E7, 0x15A2840A, -/**/ 0xBC797653, 0xA7D2F07B, -/**/ 0x3FE93328, 0x926D9E92, -/**/ 0xBC8BB770, 0x03600CDA, -/**/ 0x3FE3EB25, 0xD36CD53A, -/**/ 0xBC5BE570, 0xE1570FC0, -/**/ 0x3FE90B84, 0x784DDAF7, -/**/ 0xBC70FEB1, 0x0AB93B87, -/**/ 0x3FE41D14, 0xE4BA6790, -/**/ 0x3C84608F, 0xD287ECF5, -/**/ 0x3FE8E37C, 0x303D9AD1, -/**/ 0xBC6463A4, 0xB53D4BF8, -/**/ 0x3FE44EB3, 0x81CF386B, -/**/ 0xBC83ED6C, 0x1E6A5505, -/**/ 0x3FE8BB10, 0x5A5DC900, -/**/ 0x3C8863E0, 0x3E9474C1, -/**/ 0x3FE48000, 0xE431159F, -/**/ 0xBC8B194A, 0x7463ED10, -/**/ 0x3FE89241, 0x985D871F, -/**/ 0x3C8C48D9, 0xC413ED84, -/**/ 0x3FE4B0FC, 0x46AAB761, -/**/ 0x3C20DA05, 0x738CC59A, -/**/ 0x3FE86910, 0x8D77A6C6, -/**/ 0x3C7338FF, 0xE2BFE9DD, -/**/ 0x3FE4E1A4, 0xE54ED51B, -/**/ 0xBC8A492F, 0x89B7C76A, -/**/ 0x3FE83F7D, 0xDE701CA0, -/**/ 0xBC4152CF, 0x609BC6E8, -/**/ 0x3FE511F9, 0xFD7B351C, -/**/ 0xBC85C0E8, 0x61C48831, -/**/ 0x3FE8158A, 0x31916D5D, -/**/ 0xBC6DE8B9, 0x0B8228DE, -/**/ 0x3FE541FA, 0xCDDBB724, -/**/ 0x3C7232C2, 0x8520D391, -/**/ 0x3FE7EB36, 0x2EAA1488, -/**/ 0x3C5A1D65, 0xA4A5959F, -/**/ 0x3FE571A6, 0x966D59B3, -/**/ 0x3C5C843B, 0x4D0FB198, -/**/ 0x3FE7C082, 0x7F09E54F, -/**/ 0xBC6C73D6, 0xD72AEE68, -/**/ 0x3FE5A0FC, 0x98813A12, -/**/ 0xBC8D82E2, 0xB7D4227B, -/**/ 0x3FE7956F, 0xCD7F6543, -/**/ 0xBC8AB276, 0xE9D45AE4, -/**/ 0x3FE5CFFC, 0x16BF8F0D, -/**/ 0x3C896CB3, 0x70EB578A, -/**/ 0x3FE769FE, 0xC655211F, -/**/ 0xBC6827D5, 0xCF8C68C5, -/**/ 0x3FE5FEA4, 0x552A9E57, -/**/ 0x3C80B6CE, 0xF7EE20B7, -/**/ 0x3FE73E30, 0x174EFBA1, -/**/ 0xBC65D3AE, 0x3D94AD5F, -/**/ 0x3FE62CF4, 0x9921AC79, -/**/ 0xBC8EDD98, 0x55B6241A, -/**/ 0x3FE71204, 0x6FA77678, -/**/ 0x3C8425B0, 0xA5029C81, -/**/ 0x3FE65AEC, 0x2963E755, -/**/ 0x3C8126F9, 0x6B71053C, -/**/ 0x3FE6E57C, 0x800CF55E, -/**/ 0x3C860286, 0xDEDBD0A6, -/**/ 0x3FE6888A, 0x4E134B2F, -/**/ 0xBC86B7D3, 0x7644D5E6, -/**/ 0x3FE6B898, 0xFA9EFB5D, -/**/ 0x3C715AC7, 0x86CCF4B2, -/**/ 0x3FE6B5CE, 0x50B7821A, -/**/ 0xBC65D515, 0x8F702E0F, -/**/ 0x3FE68B5A, 0x92EB6253, -/**/ 0xBC89A91A, 0xD985F89C, -/**/ 0x3FE6E2B7, 0x7C40BDE1, -/**/ 0xBC70E729, 0x857FAD53, -/**/ 0x3FE65DC1, 0xFDEB8CBA, -/**/ 0xBC597C1B, 0x47337C77, -/**/ 0x3FE70F45, 0x1D0A8C40, -/**/ 0x3C697EDE, 0x3885770D, -/**/ 0x3FE62FCF, 0xF20191C7, -/**/ 0x3C6D9143, 0x895756EF, -/**/ 0x3FE73B76, 0x80DEA578, -/**/ 0xBC722483, 0x06DC12A2, -/**/ 0x3FE60185, 0x26F563DF, -/**/ 0x3C846CA5, 0xE0E432D0, -/**/ 0x3FE7674A, 0xF6F7B524, -/**/ 0x3C7E9D3F, 0x94AC84A8, -/**/ 0x3FE5D2E2, 0x55F1F17A, -/**/ 0x3C803141, 0x04C8892B, -/**/ 0x3FE792C1, 0xD0041D52, -/**/ 0xBC8ABF05, 0xEEB354EB, -/**/ 0x3FE5A3E8, 0x39824077, -/**/ 0x3C8428AA, 0x2759BE62, -/**/ 0x3FE7BDDA, 0x5E28B3C2, -/**/ 0x3C4AD119, 0x7CCD0393, -/**/ 0x3FE57497, 0x8D8E83F2, -/**/ 0x3C8F4714, 0xAF282D23, -/**/ 0x3FE7E893, 0xF5037959, -/**/ 0x3C80EEFB, 0xAA650C4C, -/**/ 0x3FE544F1, 0x0F592CA5, -/**/ 0xBC8E7AE8, 0xE6C7A62F, -/**/ 0x3FE812ED, 0xE9AE4BA4, -/**/ 0xBC87830A, 0xDF402DDA, -/**/ 0x3FE514F5, 0x7D7BF3DA, -/**/ 0x3C747A10, 0x8073C259 } }; -#else -#ifdef LITTLE_ENDI -const union {int4 i[880]; double x[440];} __sincostab = { .i = { -/**/ 0x00000000, 0x00000000, -/**/ 0x00000000, 0x00000000, -/**/ 0x00000000, 0x3FF00000, -/**/ 0x00000000, 0x00000000, -/**/ 0xAAAEEEEF, 0x3F7FFFEA, -/**/ 0xEC67B77C, 0xBC1E45E2, -/**/ 0x00155552, 0x3FEFFFC0, -/**/ 0xA0196DAE, 0x3C8F4A01, -/**/ 0xAAEEEED5, 0x3F8FFFAA, -/**/ 0x9A9F0777, 0xBC02AB63, -/**/ 0x0155549F, 0x3FEFFF00, -/**/ 0xA03A5EF3, 0x3C828A28, -/**/ 0x01033255, 0x3F97FF70, -/**/ 0x51527336, 0x3BFEFE2B, -/**/ 0x06BFF7E6, 0x3FEFFDC0, -/**/ 0xE86977BD, 0x3C8AE6DA, -/**/ 0xAEEEE86F, 0x3F9FFEAA, -/**/ 0xFB224AE2, 0xBC3CD406, -/**/ 0x155527D3, 0x3FEFFC00, -/**/ 0x92D89B5B, 0xBC83B544, -/**/ 0xB12D45D5, 0x3FA3FEB2, -/**/ 0x203D1C11, 0x3C34EC54, -/**/ 0x3414A7BA, 0x3FEFF9C0, -/**/ 0xBE6C59BF, 0x3C6991F4, -/**/ 0x1032FBA9, 0x3FA7FDC0, -/**/ 0xF46E997A, 0xBC4599BD, -/**/ 0x6BFDF99F, 0x3FEFF700, -/**/ 0x60648D5F, 0xBC78B3B5, -/**/ 0x78586DAC, 0x3FABFC6D, -/**/ 0x03DBF236, 0x3C18E4FD, -/**/ 0xC8103A31, 0x3FEFF3C0, -/**/ 0xBDDC0E66, 0x3C74856D, -/**/ 0xEEED4EDB, 0x3FAFFAAA, -/**/ 0x32684B69, 0xBC42D16D, -/**/ 0x5549F4D3, 0x3FEFF001, -/**/ 0x7B99426F, 0x3C832838, -/**/ 0x3D808BEF, 0x3FB1FC34, -/**/ 0xE6F3BE4F, 0xBC5F3D32, -/**/ 0x22A8EF9F, 0x3FEFEBC2, -/**/ 0x34F54C77, 0x3C579349, -/**/ 0x12D1755B, 0x3FB3FACB, -/**/ 0x5299468C, 0xBC592191, -/**/ 0x4129EF6F, 0x3FEFE703, -/**/ 0x37C96F97, 0xBC6CBF43, -/**/ 0xFD10B737, 0x3FB5F911, -/**/ 0x02BE9102, 0xBC50184F, -/**/ 0xC3C873EB, 0x3FEFE1C4, -/**/ 0x057C4A02, 0xBC35A9C9, -/**/ 0x032550E4, 0x3FB7F701, -/**/ 0x1800501A, 0x3C3AFC2D, -/**/ 0xBF7E6B9B, 0x3FEFDC06, -/**/ 0xB535F8DB, 0x3C831902, -/**/ 0x2D55D1F9, 0x3FB9F490, -/**/ 0x7EAC1DC1, 0x3C52696D, -/**/ 0x4B43E000, 0x3FEFD5C9, -/**/ 0xCB4F92F9, 0xBC62E768, -/**/ 0x8568391D, 0x3FBBF1B7, -/**/ 0x1DEA4CC8, 0x3C5E9184, -/**/ 0x800E99B1, 0x3FEFCF0C, -/**/ 0x86D186AC, 0x3C6EA3D7, -/**/ 0x16C1CCE6, 0x3FBDEE6F, -/**/ 0x2FB71673, 0xBC450F8E, -/**/ 0x78D1BC88, 0x3FEFC7D0, -/**/ 0x447DB685, 0x3C8075D2, -/**/ 0xEE86EE36, 0x3FBFEAAE, -/**/ 0xBCC6F03B, 0xBC4AFCB2, -/**/ 0x527D5BD3, 0x3FEFC015, -/**/ 0x5094EFB8, 0x3C8B68F3, -/**/ 0x8DDD71D1, 0x3FC0F337, -/**/ 0x724F0F9E, 0x3C6D8468, -/**/ 0x2BFE0695, 0x3FEFB7DB, -/**/ 0xF4F65AB1, 0x3C821DAD, -/**/ 0xD7AFCEAF, 0x3FC1F0D3, -/**/ 0x099769A5, 0xBC66EF95, -/**/ 0x263C4BD3, 0x3FEFAF22, -/**/ 0x133A2769, 0xBC552ACE, -/**/ 0x5E4AB88F, 0x3FC2EE28, -/**/ 0x05DEE058, 0xBC6E4D0F, -/**/ 0x641C36F2, 0x3FEFA5EA, -/**/ 0xED17CC7C, 0x3C404DA6, -/**/ 0x2C5D66CB, 0x3FC3EB31, -/**/ 0x6B66CB91, 0x3C647D66, -/**/ 0x0A7CC428, 0x3FEF9C34, -/**/ 0x063B7462, 0x3C8C5B6B, -/**/ 0x4DC5F27B, 0x3FC4E7EA, -/**/ 0x2AC072FC, 0x3C5949DB, -/**/ 0x40374D01, 0x3FEF91FF, -/**/ 0x4D3A9E4C, 0xBC67D03F, -/**/ 0xCFA126F3, 0x3FC5E44F, -/**/ 0x063F89B6, 0xBC66F443, -/**/ 0x2E1EECF6, 0x3FEF874C, -/**/ 0xE1332B16, 0xBC8C6514, -/**/ 0xC05A4D4C, 0x3FC6E05D, -/**/ 0x8B81C940, 0xBBD32C5C, -/**/ 0xFEFFDE24, 0x3FEF7C1A, -/**/ 0xC47540B1, 0xBC78F55B, -/**/ 0x2FBAF2B5, 0x3FC7DC10, -/**/ 0xE23C97C3, 0x3C45AB50, -/**/ 0xDF9ECE1C, 0x3FEF706B, -/**/ 0x0C36DCB4, 0xBC8698C8, -/**/ 0x2EFAA944, 0x3FC8D763, -/**/ 0x62CBB953, 0xBC620FA2, -/**/ 0xFEB82ACD, 0x3FEF643E, -/**/ 0xC1FE28AC, 0x3C76B00A, -/**/ 0xD0CEC312, 0x3FC9D252, -/**/ 0x80B1137D, 0x3C59C43D, -/**/ 0x8CFF6797, 0x3FEF5794, -/**/ 0x3E03B1D5, 0x3C6E3A0D, -/**/ 0x297A0765, 0x3FCACCDB, -/**/ 0x57D6CDEB, 0xBC59883B, -/**/ 0xBD1E3A79, 0x3FEF4A6C, -/**/ 0xEDAEBB57, 0x3C813DF0, -/**/ 0x4EDC6199, 0x3FCBC6F8, -/**/ 0x6A7B0CAB, 0x3C69C1A5, -/**/ 0xC3B3D16E, 0x3FEF3CC7, -/**/ 0xD28A3494, 0xBC621A3A, -/**/ 0x588289A3, 0x3FCCC0A6, -/**/ 0x9BC87C6B, 0xBC6868D0, -/**/ 0xD753FFED, 0x3FEF2EA5, -/**/ 0x5F56D583, 0x3C8CC421, -/**/ 0x5FB5A5D0, 0x3FCDB9E1, -/**/ 0xD6CC6FC2, 0xBC632E20, -/**/ 0x3086649F, 0x3FEF2007, -/**/ 0x16C1984B, 0x3C7B9404, -/**/ 0x7F8AE5A3, 0x3FCEB2A5, -/**/ 0xAF572CEB, 0xBC60BE06, -/**/ 0x09C5873B, 0x3FEF10EC, -/**/ 0x762C1283, 0x3C8D9072, -/**/ 0xD4F31577, 0x3FCFAAEE, -/**/ 0x508E32B8, 0xBC615D88, -/**/ 0x9F7DEEA1, 0x3FEF0154, -/**/ 0x99E5CAFD, 0x3C8D3C1E, -/**/ 0xBF65155C, 0x3FD0515C, -/**/ 0x9DFD8EC8, 0xBC79B8C2, -/**/ 0x300D2F26, 0x3FEEF141, -/**/ 0x08DED372, 0xBC82AA1B, -/**/ 0xCEF36436, 0x3FD0CD00, -/**/ 0x0C93E2B5, 0xBC79FB0A, -/**/ 0xFBC0F11C, 0x3FEEE0B1, -/**/ 0x80BBC3B1, 0xBC4BFD23, -/**/ 0xAA94DDEB, 0x3FD14861, -/**/ 0xB5B615A4, 0xBC6BE881, -/**/ 0x44D5EFA1, 0x3FEECFA7, -/**/ 0x4AF541D0, 0xBC556D0A, -/**/ 0x64C6B876, 0x3FD1C37D, -/**/ 0xFE0DCFF5, 0x3C746076, -/**/ 0x4F76EFA8, 0x3FEEBE21, -/**/ 0x12BA543E, 0xBC802F9F, -/**/ 0x111AAF36, 0x3FD23E52, -/**/ 0x334EFF18, 0xBC74F080, -/**/ 0x61BBAF4F, 0x3FEEAC20, -/**/ 0x3E94658D, 0x3C62C1D5, -/**/ 0xC43EB49F, 0x3FD2B8DD, -/**/ 0x99F2D807, 0x3C615538, -/**/ 0xC3A7CD83, 0x3FEE99A4, -/**/ 0x1BC53CE8, 0xBC82264B, -/**/ 0x94049F87, 0x3FD3331E, -/**/ 0xB40C302C, 0x3C7E0CB6, -/**/ 0xBF29A9ED, 0x3FEE86AE, -/**/ 0xFDBB58A7, 0x3C89397A, -/**/ 0x9769D3D8, 0x3FD3AD12, -/**/ 0x04878398, 0x3C003D55, -/**/ 0xA0193D40, 0x3FEE733E, -/**/ 0x3546CE13, 0xBC86428B, -/**/ 0xE69EE697, 0x3FD426B7, -/**/ 0x5705C59F, 0xBC7F09C7, -/**/ 0xB436E9D0, 0x3FEE5F54, -/**/ 0xD02FC8BC, 0x3C87EB0F, -/**/ 0x9B0F3D20, 0x3FD4A00C, -/**/ 0x6BB08EAD, 0x3C7823BA, -/**/ 0x4B2A449C, 0x3FEE4AF1, -/**/ 0x2E8A6833, 0xBC868CA0, -/**/ 0xCF68A77A, 0x3FD5190E, -/**/ 0x55EEF0F3, 0x3C7B3571, -/**/ 0xB680D6A5, 0x3FEE3614, -/**/ 0xAA015237, 0xBC727793, -/**/ 0x9FA2F597, 0x3FD591BC, -/**/ 0xAC3FE0CB, 0x3C67C74B, -/**/ 0x49ACD6C1, 0x3FEE20BF, -/**/ 0xC7EF636C, 0xBC5660AE, -/**/ 0x29078775, 0x3FD60A14, -/**/ 0x0BA89133, 0x3C5B1FD8, -/**/ 0x5A03DBCE, 0x3FEE0AF1, -/**/ 0x02771AE6, 0x3C5FE8E7, -/**/ 0x8A38D7F7, 0x3FD68213, -/**/ 0x02444AAD, 0xBC7D8892, -/**/ 0x3EBD875E, 0x3FEDF4AB, -/**/ 0x7E6736C4, 0xBC8E2D8A, -/**/ 0xE33A0255, 0x3FD6F9B8, -/**/ 0x4EE9DA0D, 0x3C742BC1, -/**/ 0x50F228D6, 0x3FEDDDED, -/**/ 0xD42BA2BF, 0xBC6E80C8, -/**/ 0x55764214, 0x3FD77102, -/**/ 0x314BB6CE, 0xBC66EAD7, -/**/ 0xEB995912, 0x3FEDC6B7, -/**/ 0x776DCD35, 0x3C54B364, -/**/ 0x03C86D4E, 0x3FD7E7EE, -/**/ 0xDABF5AF2, 0xBC7B63BC, -/**/ 0x6B888E83, 0x3FEDAF0B, -/**/ 0x2B5E5CEA, 0x3C8A249E, -/**/ 0x12826949, 0x3FD85E7A, -/**/ 0x9B5FACE0, 0x3C78A40E, -/**/ 0x2F71A9DC, 0x3FED96E8, -/**/ 0xD5D2039D, 0x3C8FF61B, -/**/ 0xA774992F, 0x3FD8D4A4, -/**/ 0xEA766326, 0x3C744A02, -/**/ 0x97E17B4A, 0x3FED7E4E, -/**/ 0x352BED94, 0xBC63B770, -/**/ 0xE9F546C5, 0x3FD94A6B, -/**/ 0x3E683F58, 0xBC769CE1, -/**/ 0x073E4040, 0x3FED653F, -/**/ 0x434BEC37, 0xBC876236, -/**/ 0x02E80510, 0x3FD9BFCE, -/**/ 0xA320B0A4, 0x3C709E39, -/**/ 0xE1C619E0, 0x3FED4BB9, -/**/ 0x77858F61, 0x3C8F34BB, -/**/ 0x1CC50CCA, 0x3FDA34C9, -/**/ 0x3B50CECD, 0xBC5A310E, -/**/ 0x8D8D7C06, 0x3FED31BF, -/**/ 0x3089CBDD, 0x3C7E60DD, -/**/ 0x63A09277, 0x3FDAA95B, -/**/ 0xB13C0381, 0xBC66293E, -/**/ 0x727D94F0, 0x3FED1750, -/**/ 0x1EC1A48E, 0x3C80D52B, -/**/ 0x05321617, 0x3FDB1D83, -/**/ 0xCB99F519, 0xBC7AE242, -/**/ 0xFA52AD9F, 0x3FECFC6C, -/**/ 0x508F2A0D, 0x3C88B5B5, -/**/ 0x30DBAC43, 0x3FDB913E, -/**/ 0x2F6C3FF1, 0xBC7E38AD, -/**/ 0x909A82E5, 0x3FECE115, -/**/ 0xBB31109A, 0x3C81F139, -/**/ 0x17B140A3, 0x3FDC048B, -/**/ 0x757E9FA7, 0x3C619FE6, -/**/ 0xA2B2972E, 0x3FECC54A, -/**/ 0x2BA83A98, 0x3C64EE16, -/**/ 0xEC7FD19E, 0x3FDC7767, -/**/ 0x1A3D5826, 0xBC5EB14D, -/**/ 0x9FC67D0B, 0x3FECA90C, -/**/ 0x485E3462, 0xBC646A81, -/**/ 0xE3D4A51F, 0x3FDCE9D2, -/**/ 0x12DAE298, 0xBC62FC8A, -/**/ 0xF8CE1A84, 0x3FEC8C5B, -/**/ 0xA1590123, 0x3C7AB3D1, -/**/ 0x34047661, 0x3FDD5BCA, -/**/ 0xA75FC29C, 0x3C728A44, -/**/ 0x208BE53B, 0x3FEC6F39, -/**/ 0xFBAADB42, 0xBC8741DB, -/**/ 0x15329C9A, 0x3FDDCD4C, -/**/ 0xE171FD9A, 0x3C70D4C6, -/**/ 0x8B8B175E, 0x3FEC51A4, -/**/ 0x3B9AA880, 0xBC61BBB4, -/**/ 0xC1582A69, 0x3FDE3E56, -/**/ 0x1099F88F, 0xBC50A482, -/**/ 0xB01DDD81, 0x3FEC339E, -/**/ 0xEE82C5C0, 0xBC8CAAF5, -/**/ 0x744B05F0, 0x3FDEAEE8, -/**/ 0x3C9B027D, 0xBC5789B4, -/**/ 0x065B7D50, 0x3FEC1528, -/**/ 0x1312E828, 0xBC889211, -/**/ 0x6BC4F97B, 0x3FDF1EFF, -/**/ 0xF8A7525C, 0x3C717212, -/**/ 0x081E7536, 0x3FEBF641, -/**/ 0x1628A9A1, 0x3C8B7BD7, -/**/ 0xE76ABC97, 0x3FDF8E99, -/**/ 0xAF2D00A3, 0x3C59D950, -/**/ 0x310294F5, 0x3FEBD6EA, -/**/ 0xC88C109D, 0x3C731BBC, -/**/ 0x28D2F57A, 0x3FDFFDB6, -/**/ 0x2E905B6A, 0x3C6F4A99, -/**/ 0xFE630F32, 0x3FEBB723, -/**/ 0x452D0A39, 0x3C772BD2, -/**/ 0x39C69955, 0x3FE03629, -/**/ 0x78397B01, 0xBC82D8CD, -/**/ 0xEF58840E, 0x3FEB96EE, -/**/ 0xC78FADE0, 0x3C545A3C, -/**/ 0x86946E5B, 0x3FE06D36, -/**/ 0x4538FF1B, 0x3C83F5AE, -/**/ 0x84B704C2, 0x3FEB764B, -/**/ 0xC21B389B, 0xBC8F5848, -/**/ 0x1E9E1001, 0x3FE0A402, -/**/ 0xA13914F6, 0xBC86F643, -/**/ 0x410C104E, 0x3FEB553A, -/**/ 0x47027A16, 0x3C58FF79, -/**/ 0x26B5672E, 0x3FE0DA8B, -/**/ 0xF0BEE909, 0xBC8A58DE, -/**/ 0xA89C8948, 0x3FEB33BB, -/**/ 0x1D1F6CA9, 0x3C8EA6A5, -/**/ 0xC4B69C3B, 0x3FE110D0, -/**/ 0x98809981, 0x3C8D9189, -/**/ 0x4162A4C6, 0x3FEB11D0, -/**/ 0x1EFBC0C2, 0x3C71DD56, -/**/ 0x1F8B7F82, 0x3FE146D2, -/**/ 0x5E2739A8, 0x3C7BF953, -/**/ 0x930BD275, 0x3FEAEF78, -/**/ 0x79746F94, 0xBC7F8362, -/**/ 0x5F2EEDB0, 0x3FE17C8E, -/**/ 0x102E2488, 0x3C635E57, -/**/ 0x26F69DE5, 0x3FEACCB5, -/**/ 0x8DD6B6CC, 0x3C88FB6A, -/**/ 0xACB02FDD, 0x3FE1B204, -/**/ 0x70CBB5FF, 0xBC5F190C, -/**/ 0x88308913, 0x3FEAA986, -/**/ 0x07CD5070, 0xBC0B83D6, -/**/ 0x3236574C, 0x3FE1E734, -/**/ 0xA4F41D5A, 0x3C722A3F, -/**/ 0x4373E02D, 0x3FEA85ED, -/**/ 0x385EC792, 0x3C69BE06, -/**/ 0x1B0394CF, 0x3FE21C1C, -/**/ 0x4B23AA31, 0x3C5E5B32, -/**/ 0xE72586AF, 0x3FEA61E9, -/**/ 0xE2FD453F, 0x3C858330, -/**/ 0x93788BBB, 0x3FE250BB, -/**/ 0x2457BCCE, 0x3C7EA3D0, -/**/ 0x0352BDCF, 0x3FEA3D7D, -/**/ 0xECA19669, 0xBC868DBA, -/**/ 0xC917A067, 0x3FE28511, -/**/ 0xD9A16B70, 0xBC801DF1, -/**/ 0x29AEE445, 0x3FEA18A7, -/**/ 0x736C0358, 0x3C395E25, -/**/ 0xEA88421E, 0x3FE2B91D, -/**/ 0xDB216AB0, 0xBC8FA371, -/**/ 0xED912F85, 0x3FE9F368, -/**/ 0xC5791606, 0xBC81D200, -/**/ 0x279A3082, 0x3FE2ECDF, -/**/ 0xE0E7E37E, 0x3C8D3557, -/**/ 0xE3F25E5C, 0x3FE9CDC2, -/**/ 0x12993F62, 0x3C83F991, -/**/ 0xB148BC4F, 0x3FE32054, -/**/ 0x095A135B, 0x3C8F6B42, -/**/ 0xA36A6514, 0x3FE9A7B5, -/**/ 0xCC9FA7A9, 0x3C8722CF, -/**/ 0xB9BE0367, 0x3FE3537D, -/**/ 0x7AF040F0, 0x3C6B327E, -/**/ 0xC42E1310, 0x3FE98141, -/**/ 0x0488F08D, 0x3C8D1FF8, -/**/ 0x7456282B, 0x3FE38659, -/**/ 0xA93B07A8, 0xBC710FAD, -/**/ 0xE00CB1FD, 0x3FE95A67, -/**/ 0xA21F862D, 0xBC80BEFD, -/**/ 0x15A2840A, 0x3FE3B8E7, -/**/ 0xA7D2F07B, 0xBC797653, -/**/ 0x926D9E92, 0x3FE93328, -/**/ 0x03600CDA, 0xBC8BB770, -/**/ 0xD36CD53A, 0x3FE3EB25, -/**/ 0xE1570FC0, 0xBC5BE570, -/**/ 0x784DDAF7, 0x3FE90B84, -/**/ 0x0AB93B87, 0xBC70FEB1, -/**/ 0xE4BA6790, 0x3FE41D14, -/**/ 0xD287ECF5, 0x3C84608F, -/**/ 0x303D9AD1, 0x3FE8E37C, -/**/ 0xB53D4BF8, 0xBC6463A4, -/**/ 0x81CF386B, 0x3FE44EB3, -/**/ 0x1E6A5505, 0xBC83ED6C, -/**/ 0x5A5DC900, 0x3FE8BB10, -/**/ 0x3E9474C1, 0x3C8863E0, -/**/ 0xE431159F, 0x3FE48000, -/**/ 0x7463ED10, 0xBC8B194A, -/**/ 0x985D871F, 0x3FE89241, -/**/ 0xC413ED84, 0x3C8C48D9, -/**/ 0x46AAB761, 0x3FE4B0FC, -/**/ 0x738CC59A, 0x3C20DA05, -/**/ 0x8D77A6C6, 0x3FE86910, -/**/ 0xE2BFE9DD, 0x3C7338FF, -/**/ 0xE54ED51B, 0x3FE4E1A4, -/**/ 0x89B7C76A, 0xBC8A492F, -/**/ 0xDE701CA0, 0x3FE83F7D, -/**/ 0x609BC6E8, 0xBC4152CF, -/**/ 0xFD7B351C, 0x3FE511F9, -/**/ 0x61C48831, 0xBC85C0E8, -/**/ 0x31916D5D, 0x3FE8158A, -/**/ 0x0B8228DE, 0xBC6DE8B9, -/**/ 0xCDDBB724, 0x3FE541FA, -/**/ 0x8520D391, 0x3C7232C2, -/**/ 0x2EAA1488, 0x3FE7EB36, -/**/ 0xA4A5959F, 0x3C5A1D65, -/**/ 0x966D59B3, 0x3FE571A6, -/**/ 0x4D0FB198, 0x3C5C843B, -/**/ 0x7F09E54F, 0x3FE7C082, -/**/ 0xD72AEE68, 0xBC6C73D6, -/**/ 0x98813A12, 0x3FE5A0FC, -/**/ 0xB7D4227B, 0xBC8D82E2, -/**/ 0xCD7F6543, 0x3FE7956F, -/**/ 0xE9D45AE4, 0xBC8AB276, -/**/ 0x16BF8F0D, 0x3FE5CFFC, -/**/ 0x70EB578A, 0x3C896CB3, -/**/ 0xC655211F, 0x3FE769FE, -/**/ 0xCF8C68C5, 0xBC6827D5, -/**/ 0x552A9E57, 0x3FE5FEA4, -/**/ 0xF7EE20B7, 0x3C80B6CE, -/**/ 0x174EFBA1, 0x3FE73E30, -/**/ 0x3D94AD5F, 0xBC65D3AE, -/**/ 0x9921AC79, 0x3FE62CF4, -/**/ 0x55B6241A, 0xBC8EDD98, -/**/ 0x6FA77678, 0x3FE71204, -/**/ 0xA5029C81, 0x3C8425B0, -/**/ 0x2963E755, 0x3FE65AEC, -/**/ 0x6B71053C, 0x3C8126F9, -/**/ 0x800CF55E, 0x3FE6E57C, -/**/ 0xDEDBD0A6, 0x3C860286, -/**/ 0x4E134B2F, 0x3FE6888A, -/**/ 0x7644D5E6, 0xBC86B7D3, -/**/ 0xFA9EFB5D, 0x3FE6B898, -/**/ 0x86CCF4B2, 0x3C715AC7, -/**/ 0x50B7821A, 0x3FE6B5CE, -/**/ 0x8F702E0F, 0xBC65D515, -/**/ 0x92EB6253, 0x3FE68B5A, -/**/ 0xD985F89C, 0xBC89A91A, -/**/ 0x7C40BDE1, 0x3FE6E2B7, -/**/ 0x857FAD53, 0xBC70E729, -/**/ 0xFDEB8CBA, 0x3FE65DC1, -/**/ 0x47337C77, 0xBC597C1B, -/**/ 0x1D0A8C40, 0x3FE70F45, -/**/ 0x3885770D, 0x3C697EDE, -/**/ 0xF20191C7, 0x3FE62FCF, -/**/ 0x895756EF, 0x3C6D9143, -/**/ 0x80DEA578, 0x3FE73B76, -/**/ 0x06DC12A2, 0xBC722483, -/**/ 0x26F563DF, 0x3FE60185, -/**/ 0xE0E432D0, 0x3C846CA5, -/**/ 0xF6F7B524, 0x3FE7674A, -/**/ 0x94AC84A8, 0x3C7E9D3F, -/**/ 0x55F1F17A, 0x3FE5D2E2, -/**/ 0x04C8892B, 0x3C803141, -/**/ 0xD0041D52, 0x3FE792C1, -/**/ 0xEEB354EB, 0xBC8ABF05, -/**/ 0x39824077, 0x3FE5A3E8, -/**/ 0x2759BE62, 0x3C8428AA, -/**/ 0x5E28B3C2, 0x3FE7BDDA, -/**/ 0x7CCD0393, 0x3C4AD119, -/**/ 0x8D8E83F2, 0x3FE57497, -/**/ 0xAF282D23, 0x3C8F4714, -/**/ 0xF5037959, 0x3FE7E893, -/**/ 0xAA650C4C, 0x3C80EEFB, -/**/ 0x0F592CA5, 0x3FE544F1, -/**/ 0xE6C7A62F, 0xBC8E7AE8, -/**/ 0xE9AE4BA4, 0x3FE812ED, -/**/ 0xDF402DDA, 0xBC87830A, -/**/ 0x7D7BF3DA, 0x3FE514F5, -/**/ 0x8073C259, 0x3C747A10 } }; -#endif -#endif diff --git a/sysdeps/ieee754/dbl-64/slowexp.c b/sysdeps/ieee754/dbl-64/slowexp.c deleted file mode 100644 index e8fa2e263b..0000000000 --- a/sysdeps/ieee754/dbl-64/slowexp.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/**************************************************************************/ -/* MODULE_NAME:slowexp.c */ -/* */ -/* FUNCTION:slowexp */ -/* */ -/* FILES NEEDED:mpa.h */ -/* mpa.c mpexp.c */ -/* */ -/*Converting from double precision to Multi-precision and calculating */ -/* e^x */ -/**************************************************************************/ -#include - -#include - -#ifndef USE_LONG_DOUBLE_FOR_MP -# include "mpa.h" -void __mpexp (mp_no *x, mp_no *y, int p); -#endif - -#ifndef SECTION -# define SECTION -#endif - -/*Converting from double precision to Multi-precision and calculating e^x */ -double -SECTION -__slowexp (double x) -{ -#ifndef USE_LONG_DOUBLE_FOR_MP - double w, z, res, eps = 3.0e-26; - int p; - mp_no mpx, mpy, mpz, mpw, mpeps, mpcor; - - /* Use the multiple precision __MPEXP function to compute the exponential - First at 144 bits and if it is not accurate enough, at 768 bits. */ - p = 6; - __dbl_mp (x, &mpx, p); - __mpexp (&mpx, &mpy, p); - __dbl_mp (eps, &mpeps, p); - __mul (&mpeps, &mpy, &mpcor, p); - __add (&mpy, &mpcor, &mpw, p); - __sub (&mpy, &mpcor, &mpz, p); - __mp_dbl (&mpw, &w, p); - __mp_dbl (&mpz, &z, p); - if (w == z) - { - /* Track how often we get to the slow exp code plus - its input/output values. */ - LIBC_PROBE (slowexp_p6, 2, &x, &w); - return w; - } - else - { - p = 32; - __dbl_mp (x, &mpx, p); - __mpexp (&mpx, &mpy, p); - __mp_dbl (&mpy, &res, p); - - /* Track how often we get to the uber-slow exp code plus - its input/output values. */ - LIBC_PROBE (slowexp_p32, 2, &x, &res); - return res; - } -#else - return (double) __ieee754_expl((long double)x); -#endif -} diff --git a/sysdeps/ieee754/dbl-64/slowpow.c b/sysdeps/ieee754/dbl-64/slowpow.c deleted file mode 100644 index 1176b2689c..0000000000 --- a/sysdeps/ieee754/dbl-64/slowpow.c +++ /dev/null @@ -1,125 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/*************************************************************************/ -/* MODULE_NAME:slowpow.c */ -/* */ -/* FUNCTION:slowpow */ -/* */ -/*FILES NEEDED:mpa.h */ -/* mpa.c mpexp.c mplog.c halfulp.c */ -/* */ -/* Given two IEEE double machine numbers y,x , routine computes the */ -/* correctly rounded (to nearest) value of x^y. Result calculated by */ -/* multiplication (in halfulp.c) or if result isn't accurate enough */ -/* then routine converts x and y into multi-precision doubles and */ -/* calls to mpexp routine */ -/*************************************************************************/ - -#include "mpa.h" -#include - -#include - -#ifndef SECTION -# define SECTION -#endif - -void __mpexp (mp_no *x, mp_no *y, int p); -void __mplog (mp_no *x, mp_no *y, int p); -double ulog (double); -double __halfulp (double x, double y); - -double -SECTION -__slowpow (double x, double y, double z) -{ - double res, res1; - mp_no mpx, mpy, mpz, mpw, mpp, mpr, mpr1; - static const mp_no eps = {-3, {1.0, 4.0}}; - int p; - - /* __HALFULP returns -10 or X^Y. */ - res = __halfulp (x, y); - - /* Return if the result was computed by __HALFULP. */ - if (res >= 0) - return res; - - /* Compute pow as long double. This is currently only used by powerpc, where - one may get 106 bits of accuracy. */ -#ifdef USE_LONG_DOUBLE_FOR_MP - long double ldw, ldz, ldpp; - static const long double ldeps = 0x4.0p-96; - - ldz = __ieee754_logl ((long double) x); - ldw = (long double) y *ldz; - ldpp = __ieee754_expl (ldw); - res = (double) (ldpp + ldeps); - res1 = (double) (ldpp - ldeps); - - /* Return the result if it is accurate enough. */ - if (res == res1) - return res; -#endif - - /* Or else, calculate using multiple precision. P = 10 implies accuracy of - 240 bits accuracy, since MP_NO has a radix of 2^24. */ - p = 10; - __dbl_mp (x, &mpx, p); - __dbl_mp (y, &mpy, p); - __dbl_mp (z, &mpz, p); - - /* z = x ^ y - log (z) = y * log (x) - z = exp (y * log (x)) */ - __mplog (&mpx, &mpz, p); - __mul (&mpy, &mpz, &mpw, p); - __mpexp (&mpw, &mpp, p); - - /* Add and subtract EPS to ensure that the result remains unchanged, i.e. we - have last bit accuracy. */ - __add (&mpp, &eps, &mpr, p); - __mp_dbl (&mpr, &res, p); - __sub (&mpp, &eps, &mpr1, p); - __mp_dbl (&mpr1, &res1, p); - if (res == res1) - { - /* Track how often we get to the slow pow code plus - its input/output values. */ - LIBC_PROBE (slowpow_p10, 4, &x, &y, &z, &res); - return res; - } - - /* If we don't, then we repeat using a higher precision. 768 bits of - precision ought to be enough for anybody. */ - p = 32; - __dbl_mp (x, &mpx, p); - __dbl_mp (y, &mpy, p); - __dbl_mp (z, &mpz, p); - __mplog (&mpx, &mpz, p); - __mul (&mpy, &mpz, &mpw, p); - __mpexp (&mpw, &mpp, p); - __mp_dbl (&mpp, &res, p); - - /* Track how often we get to the uber-slow pow code plus - its input/output values. */ - LIBC_PROBE (slowpow_p32, 4, &x, &y, &z, &res); - - return res; -} diff --git a/sysdeps/ieee754/dbl-64/t_exp.c b/sysdeps/ieee754/dbl-64/t_exp.c deleted file mode 100644 index 58866e7794..0000000000 --- a/sysdeps/ieee754/dbl-64/t_exp.c +++ /dev/null @@ -1,435 +0,0 @@ -/* Accurate tables for exp(). - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Geoffrey Keating - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This table has the property that, for all integers -177 <= i <= 177, - exp(i/512.0 + __exp_deltatable[abs(i)]) == __exp_atable[i+177] + r - for some -2^-64 < r < 2^-64 (abs(r) < 2^-65 if i <= 0); and that - __exp_deltatable[abs(i)] == t * 2^-60 - for integer t so that abs(t) <= 8847927 * 2^8. */ - -#define W52 (2.22044605e-16) -#define W55 (2.77555756e-17) -#define W58 (3.46944695e-18) -#define W59 (1.73472348e-18) -#define W60 (8.67361738e-19) -const float __exp_deltatable[178] = { - 0*W60, 16558714*W60, -10672149*W59, 1441652*W60, - -15787963*W55, 462888*W60, 7291806*W60, 1698880*W60, - -14375103*W58, -2021016*W60, 728829*W60, -3759654*W60, - 3202123*W60, -10916019*W58, -251570*W60, -1043086*W60, - 8207536*W60, -409964*W60, -5993931*W60, -475500*W60, - 2237522*W60, 324170*W60, -244117*W60, 32077*W60, - 123907*W60, -1019734*W60, -143*W60, 813077*W60, - 743345*W60, 462461*W60, 629794*W60, 2125066*W60, - -2339121*W60, -337951*W60, 9922067*W60, -648704*W60, - 149407*W60, -2687209*W60, -631608*W60, 2128280*W60, - -4882082*W60, 2001360*W60, 175074*W60, 2923216*W60, - -538947*W60, -1212193*W60, -1920926*W60, -1080577*W60, - 3690196*W60, 2643367*W60, 2911937*W60, 671455*W60, - -1128674*W60, 593282*W60, -5219347*W60, -1941490*W60, - 11007953*W60, 239609*W60, -2969658*W60, -1183650*W60, - 942998*W60, 699063*W60, 450569*W60, -329250*W60, - -7257875*W60, -312436*W60, 51626*W60, 555877*W60, - -641761*W60, 1565666*W60, 884327*W60, -10960035*W60, - -2004679*W60, -995793*W60, -2229051*W60, -146179*W60, - -510327*W60, 1453482*W60, -3778852*W60, -2238056*W60, - -4895983*W60, 3398883*W60, -252738*W60, 1230155*W60, - 346918*W60, 1109352*W60, 268941*W60, -2930483*W60, - -1036263*W60, -1159280*W60, 1328176*W60, 2937642*W60, - -9371420*W60, -6902650*W60, -1419134*W60, 1442904*W60, - -1319056*W60, -16369*W60, 696555*W60, -279987*W60, - -7919763*W60, 252741*W60, 459711*W60, -1709645*W60, - 354913*W60, 6025867*W60, -421460*W60, -853103*W60, - -338649*W60, 962151*W60, 955965*W60, 784419*W60, - -3633653*W60, 2277133*W60, -8847927*W52, 1223028*W60, - 5907079*W60, 623167*W60, 5142888*W60, 2599099*W60, - 1214280*W60, 4870359*W60, 593349*W60, -57705*W60, - 7761209*W60, -5564097*W60, 2051261*W60, 6216869*W60, - 4692163*W60, 601691*W60, -5264906*W60, 1077872*W60, - -3205949*W60, 1833082*W60, 2081746*W60, -987363*W60, - -1049535*W60, 2015244*W60, 874230*W60, 2168259*W60, - -1740124*W60, -10068269*W60, -18242*W60, -3013583*W60, - 580601*W60, -2547161*W60, -535689*W60, 2220815*W60, - 1285067*W60, 2806933*W60, -983086*W60, -1729097*W60, - -1162985*W60, -2561904*W60, 801988*W60, 244351*W60, - 1441893*W60, -7517981*W60, 271781*W60, -15021588*W60, - -2341588*W60, -919198*W60, 1642232*W60, 4771771*W60, - -1220099*W60, -3062372*W60, 628624*W60, 1278114*W60, - 13083513*W60, -10521925*W60, 3180310*W60, -1659307*W60, - 3543773*W60, 2501203*W60, 4151*W60, -340748*W60, - -2285625*W60, 2495202*W60 -}; - -const double __exp_atable[355] /* __attribute__((mode(DF))) */ = { - 0.707722561055888932371, /* 0x0.b52d4e46605c27ffd */ - 0.709106182438804188967, /* 0x0.b587fb96f75097ffb */ - 0.710492508843861281234, /* 0x0.b5e2d649899167ffd */ - 0.711881545564593931623, /* 0x0.b63dde74d36bdfffe */ - 0.713273297897442870573, /* 0x0.b699142f945f87ffc */ - 0.714667771153751463236, /* 0x0.b6f477909c4ea0001 */ - 0.716064970655995725059, /* 0x0.b75008aec758f8004 */ - 0.717464901723956938193, /* 0x0.b7abc7a0eea7e0002 */ - 0.718867569715736398602, /* 0x0.b807b47e1586c7ff8 */ - 0.720272979947266023271, /* 0x0.b863cf5d10e380003 */ - 0.721681137825144314297, /* 0x0.b8c01855195c37ffb */ - 0.723092048691992950199, /* 0x0.b91c8f7d213740004 */ - 0.724505717938892290800, /* 0x0.b97934ec5002d0007 */ - 0.725922150953176470431, /* 0x0.b9d608b9c92ea7ffc */ - 0.727341353138962865022, /* 0x0.ba330afcc29e98003 */ - 0.728763329918453162104, /* 0x0.ba903bcc8618b7ffc */ - 0.730188086709957051568, /* 0x0.baed9b40591ba0000 */ - 0.731615628948127705309, /* 0x0.bb4b296f931e30002 */ - 0.733045962086486091436, /* 0x0.bba8e671a05617ff9 */ - 0.734479091556371366251, /* 0x0.bc06d25dd49568001 */ - 0.735915022857225542529, /* 0x0.bc64ed4bce8f6fff9 */ - 0.737353761441304711410, /* 0x0.bcc33752f915d7ff9 */ - 0.738795312814142124419, /* 0x0.bd21b08af98e78005 */ - 0.740239682467211168593, /* 0x0.bd80590b65e9a8000 */ - 0.741686875913991849885, /* 0x0.bddf30ebec4a10000 */ - 0.743136898669507939299, /* 0x0.be3e38443c84e0007 */ - 0.744589756269486091620, /* 0x0.be9d6f2c1d32a0002 */ - 0.746045454254026796384, /* 0x0.befcd5bb59baf8004 */ - 0.747503998175051087583, /* 0x0.bf5c6c09ca84c0003 */ - 0.748965393601880857739, /* 0x0.bfbc322f5b18b7ff8 */ - 0.750429646104262104698, /* 0x0.c01c2843f776fffff */ - 0.751896761271877989160, /* 0x0.c07c4e5fa18b88002 */ - 0.753366744698445112140, /* 0x0.c0dca49a5fb18fffd */ - 0.754839601988627206827, /* 0x0.c13d2b0c444db0005 */ - 0.756315338768691947122, /* 0x0.c19de1cd798578006 */ - 0.757793960659406629066, /* 0x0.c1fec8f623723fffd */ - 0.759275473314173443536, /* 0x0.c25fe09e8a0f47ff8 */ - 0.760759882363831851927, /* 0x0.c2c128dedc88f8000 */ - 0.762247193485956486805, /* 0x0.c322a1cf7d6e7fffa */ - 0.763737412354726363781, /* 0x0.c3844b88cb9347ffc */ - 0.765230544649828092739, /* 0x0.c3e626232bd8f7ffc */ - 0.766726596071518051729, /* 0x0.c44831b719bf18002 */ - 0.768225572321911687194, /* 0x0.c4aa6e5d12d078001 */ - 0.769727479119219348810, /* 0x0.c50cdc2da64a37ffb */ - 0.771232322196981678892, /* 0x0.c56f7b41744490001 */ - 0.772740107296721268087, /* 0x0.c5d24bb1259e70004 */ - 0.774250840160724651565, /* 0x0.c6354d95640dd0007 */ - 0.775764526565368872643, /* 0x0.c6988106fec447fff */ - 0.777281172269557396602, /* 0x0.c6fbe61eb1bd0ffff */ - 0.778800783068235302750, /* 0x0.c75f7cf560942fffc */ - 0.780323364758801041312, /* 0x0.c7c345a3f1983fffe */ - 0.781848923151573727006, /* 0x0.c8274043594cb0002 */ - 0.783377464064598849602, /* 0x0.c88b6cec94b3b7ff9 */ - 0.784908993312207869935, /* 0x0.c8efcbb89cba27ffe */ - 0.786443516765346961618, /* 0x0.c9545cc0a88c70003 */ - 0.787981040257604625744, /* 0x0.c9b9201dc643bfffa */ - 0.789521569657452682047, /* 0x0.ca1e15e92a5410007 */ - 0.791065110849462849192, /* 0x0.ca833e3c1ae510005 */ - 0.792611669712891875319, /* 0x0.cae8992fd84667ffd */ - 0.794161252150049179450, /* 0x0.cb4e26ddbc207fff8 */ - 0.795713864077794763584, /* 0x0.cbb3e75f301b60003 */ - 0.797269511407239561694, /* 0x0.cc19dacd978cd8002 */ - 0.798828200086368567220, /* 0x0.cc8001427e55d7ffb */ - 0.800389937624300440456, /* 0x0.cce65ade24d360006 */ - 0.801954725261124767840, /* 0x0.cd4ce7a5de839fffb */ - 0.803522573691593189330, /* 0x0.cdb3a7c79a678fffd */ - 0.805093487311204114563, /* 0x0.ce1a9b563965ffffc */ - 0.806667472122675088819, /* 0x0.ce81c26b838db8000 */ - 0.808244534127439906441, /* 0x0.cee91d213f8428002 */ - 0.809824679342317166307, /* 0x0.cf50ab9144d92fff9 */ - 0.811407913793616542005, /* 0x0.cfb86dd5758c2ffff */ - 0.812994243520784198882, /* 0x0.d0206407c20e20005 */ - 0.814583674571603966162, /* 0x0.d0888e4223facfff9 */ - 0.816176213022088536960, /* 0x0.d0f0ec9eb3f7c8002 */ - 0.817771864936188586101, /* 0x0.d1597f377d6768002 */ - 0.819370636400374108252, /* 0x0.d1c24626a46eafff8 */ - 0.820972533518165570298, /* 0x0.d22b41865ff1e7ff9 */ - 0.822577562404315121269, /* 0x0.d2947170f32ec7ff9 */ - 0.824185729164559344159, /* 0x0.d2fdd60097795fff8 */ - 0.825797039949601741075, /* 0x0.d3676f4fb796d0001 */ - 0.827411500902565544264, /* 0x0.d3d13d78b5f68fffb */ - 0.829029118181348834154, /* 0x0.d43b40960546d8001 */ - 0.830649897953322891022, /* 0x0.d4a578c222a058000 */ - 0.832273846408250750368, /* 0x0.d50fe617a3ba78005 */ - 0.833900969738858188772, /* 0x0.d57a88b1218e90002 */ - 0.835531274148056613016, /* 0x0.d5e560a94048f8006 */ - 0.837164765846411529371, /* 0x0.d6506e1aac8078003 */ - 0.838801451086016225394, /* 0x0.d6bbb1204074e0001 */ - 0.840441336100884561780, /* 0x0.d72729d4c28518004 */ - 0.842084427144139224814, /* 0x0.d792d8530e12b0001 */ - 0.843730730487052604790, /* 0x0.d7febcb61273e7fff */ - 0.845380252404570153833, /* 0x0.d86ad718c308dfff9 */ - 0.847032999194574087728, /* 0x0.d8d727962c69d7fff */ - 0.848688977161248581090, /* 0x0.d943ae49621ce7ffb */ - 0.850348192619261200615, /* 0x0.d9b06b4d832ef8005 */ - 0.852010651900976245816, /* 0x0.da1d5ebdc22220005 */ - 0.853676361342631029337, /* 0x0.da8a88b555baa0006 */ - 0.855345327311054837175, /* 0x0.daf7e94f965f98004 */ - 0.857017556155879489641, /* 0x0.db6580a7c98f7fff8 */ - 0.858693054267390953857, /* 0x0.dbd34ed9617befff8 */ - 0.860371828028939855647, /* 0x0.dc4153ffc8b65fff9 */ - 0.862053883854957292436, /* 0x0.dcaf90368bfca8004 */ - 0.863739228154875360306, /* 0x0.dd1e0399328d87ffe */ - 0.865427867361348468455, /* 0x0.dd8cae435d303fff9 */ - 0.867119807911702289458, /* 0x0.ddfb9050b1cee8006 */ - 0.868815056264353846599, /* 0x0.de6aa9dced8448001 */ - 0.870513618890481399881, /* 0x0.ded9fb03db7320006 */ - 0.872215502247877139094, /* 0x0.df4983e1380657ff8 */ - 0.873920712852848668986, /* 0x0.dfb94490ffff77ffd */ - 0.875629257204025623884, /* 0x0.e0293d2f1cb01fff9 */ - 0.877341141814212965880, /* 0x0.e0996dd786fff0007 */ - 0.879056373217612985183, /* 0x0.e109d6a64f5d57ffc */ - 0.880774957955916648615, /* 0x0.e17a77b78e72a7ffe */ - 0.882496902590150900078, /* 0x0.e1eb5127722cc7ff8 */ - 0.884222213673356738383, /* 0x0.e25c63121fb0c8006 */ - 0.885950897802399772740, /* 0x0.e2cdad93ec5340003 */ - 0.887682961567391237685, /* 0x0.e33f30c925fb97ffb */ - 0.889418411575228162725, /* 0x0.e3b0ecce2d05ffff9 */ - 0.891157254447957902797, /* 0x0.e422e1bf727718006 */ - 0.892899496816652704641, /* 0x0.e4950fb9713fc7ffe */ - 0.894645145323828439008, /* 0x0.e50776d8b0e60fff8 */ - 0.896394206626591749641, /* 0x0.e57a1739c8fadfffc */ - 0.898146687421414902124, /* 0x0.e5ecf0f97c5798007 */ - 0.899902594367530173098, /* 0x0.e660043464e378005 */ - 0.901661934163603406867, /* 0x0.e6d3510747e150006 */ - 0.903424713533971135418, /* 0x0.e746d78f06cd97ffd */ - 0.905190939194458810123, /* 0x0.e7ba97e879c91fffc */ - 0.906960617885092856864, /* 0x0.e82e92309390b0007 */ - 0.908733756358986566306, /* 0x0.e8a2c6845544afffa */ - 0.910510361377119825629, /* 0x0.e9173500c8abc7ff8 */ - 0.912290439722343249336, /* 0x0.e98bddc30f98b0002 */ - 0.914073998177417412765, /* 0x0.ea00c0e84bc4c7fff */ - 0.915861043547953501680, /* 0x0.ea75de8db8094fffe */ - 0.917651582652244779397, /* 0x0.eaeb36d09d3137ffe */ - 0.919445622318405764159, /* 0x0.eb60c9ce4ed3dffff */ - 0.921243169397334638073, /* 0x0.ebd697a43995b0007 */ - 0.923044230737526172328, /* 0x0.ec4ca06fc7768fffa */ - 0.924848813220121135342, /* 0x0.ecc2e44e865b6fffb */ - 0.926656923710931002014, /* 0x0.ed39635df34e70006 */ - 0.928468569126343790092, /* 0x0.edb01dbbc2f5b7ffa */ - 0.930283756368834757725, /* 0x0.ee2713859aab57ffa */ - 0.932102492359406786818, /* 0x0.ee9e44d9342870004 */ - 0.933924784042873379360, /* 0x0.ef15b1d4635438005 */ - 0.935750638358567643520, /* 0x0.ef8d5a94f60f50007 */ - 0.937580062297704630580, /* 0x0.f0053f38f345cffff */ - 0.939413062815381727516, /* 0x0.f07d5fde3a2d98001 */ - 0.941249646905368053689, /* 0x0.f0f5bca2d481a8004 */ - 0.943089821583810716806, /* 0x0.f16e55a4e497d7ffe */ - 0.944933593864477061592, /* 0x0.f1e72b028a2827ffb */ - 0.946780970781518460559, /* 0x0.f2603cd9fb5430001 */ - 0.948631959382661205081, /* 0x0.f2d98b497d2a87ff9 */ - 0.950486566729423554277, /* 0x0.f353166f63e3dffff */ - 0.952344799896018723290, /* 0x0.f3ccde6a11ae37ffe */ - 0.954206665969085765512, /* 0x0.f446e357f66120000 */ - 0.956072172053890279009, /* 0x0.f4c12557964f0fff9 */ - 0.957941325265908139014, /* 0x0.f53ba48781046fffb */ - 0.959814132734539637840, /* 0x0.f5b66106555d07ffa */ - 0.961690601603558903308, /* 0x0.f6315af2c2027fffc */ - 0.963570739036113010927, /* 0x0.f6ac926b8aeb80004 */ - 0.965454552202857141381, /* 0x0.f728078f7c5008002 */ - 0.967342048278315158608, /* 0x0.f7a3ba7d66a908001 */ - 0.969233234469444204768, /* 0x0.f81fab543e1897ffb */ - 0.971128118008140250896, /* 0x0.f89bda33122c78007 */ - 0.973026706099345495256, /* 0x0.f9184738d4cf97ff8 */ - 0.974929006031422851235, /* 0x0.f994f284d3a5c0008 */ - 0.976835024947348973265, /* 0x0.fa11dc35bc7820002 */ - 0.978744770239899142285, /* 0x0.fa8f046b4fb7f8007 */ - 0.980658249138918636210, /* 0x0.fb0c6b449ab1cfff9 */ - 0.982575468959622777535, /* 0x0.fb8a10e1088fb7ffa */ - 0.984496437054508843888, /* 0x0.fc07f5602d79afffc */ - 0.986421160608523028820, /* 0x0.fc8618e0e55e47ffb */ - 0.988349647107594098099, /* 0x0.fd047b83571b1fffa */ - 0.990281903873210800357, /* 0x0.fd831d66f4c018002 */ - 0.992217938695037382475, /* 0x0.fe01fead3320bfff8 */ - 0.994157757657894713987, /* 0x0.fe811f703491e8006 */ - 0.996101369488558541238, /* 0x0.ff007fd5744490005 */ - 0.998048781093141101932, /* 0x0.ff801ffa9b9280007 */ - 1.000000000000000000000, /* 0x1.00000000000000000 */ - 1.001955033605393285965, /* 0x1.0080200565d29ffff */ - 1.003913889319761887310, /* 0x1.0100802aa0e80fff0 */ - 1.005876574715736104818, /* 0x1.01812090377240007 */ - 1.007843096764807100351, /* 0x1.020201541aad7fff6 */ - 1.009813464316352327214, /* 0x1.0283229c4c9820007 */ - 1.011787683565730677817, /* 0x1.030484836910a000e */ - 1.013765762469146736174, /* 0x1.0386272b9c077fffe */ - 1.015747708536026694351, /* 0x1.04080ab526304fff0 */ - 1.017733529475172815584, /* 0x1.048a2f412375ffff0 */ - 1.019723232714418781378, /* 0x1.050c94ef7ad5e000a */ - 1.021716825883923762690, /* 0x1.058f3be0f1c2d0004 */ - 1.023714316605201180057, /* 0x1.06122436442e2000e */ - 1.025715712440059545995, /* 0x1.06954e0fec63afff2 */ - 1.027721021151397406936, /* 0x1.0718b98f41c92fff6 */ - 1.029730250269221158939, /* 0x1.079c66d49bb2ffff1 */ - 1.031743407506447551857, /* 0x1.082056011a9230009 */ - 1.033760500517691527387, /* 0x1.08a487359ebd50002 */ - 1.035781537016238873464, /* 0x1.0928fa93490d4fff3 */ - 1.037806524719013578963, /* 0x1.09adb03b3e5b3000d */ - 1.039835471338248051878, /* 0x1.0a32a84e9e5760004 */ - 1.041868384612101516848, /* 0x1.0ab7e2eea5340ffff */ - 1.043905272300907460835, /* 0x1.0b3d603ca784f0009 */ - 1.045946142174331239262, /* 0x1.0bc3205a042060000 */ - 1.047991002016745332165, /* 0x1.0c4923682a086fffe */ - 1.050039859627715177527, /* 0x1.0ccf698898f3a000d */ - 1.052092722826109660856, /* 0x1.0d55f2dce5d1dfffb */ - 1.054149599440827866881, /* 0x1.0ddcbf86b09a5fff6 */ - 1.056210497317612961855, /* 0x1.0e63cfa7abc97fffd */ - 1.058275424318780855142, /* 0x1.0eeb23619c146fffb */ - 1.060344388322010722446, /* 0x1.0f72bad65714bffff */ - 1.062417397220589476718, /* 0x1.0ffa9627c38d30004 */ - 1.064494458915699715017, /* 0x1.1082b577d0eef0003 */ - 1.066575581342167566880, /* 0x1.110b18e893a90000a */ - 1.068660772440545025953, /* 0x1.1193c09c267610006 */ - 1.070750040138235936705, /* 0x1.121cacb4959befff6 */ - 1.072843392435016474095, /* 0x1.12a5dd543cf36ffff */ - 1.074940837302467588937, /* 0x1.132f529d59552000b */ - 1.077042382749654914030, /* 0x1.13b90cb250d08fff5 */ - 1.079148036789447484528, /* 0x1.14430bb58da3dfff9 */ - 1.081257807444460983297, /* 0x1.14cd4fc984c4a000e */ - 1.083371702785017154417, /* 0x1.1557d910df9c7000e */ - 1.085489730853784307038, /* 0x1.15e2a7ae292d30002 */ - 1.087611899742884524772, /* 0x1.166dbbc422d8c0004 */ - 1.089738217537583819804, /* 0x1.16f9157586772ffff */ - 1.091868692357631731528, /* 0x1.1784b4e533cacfff0 */ - 1.094003332327482702577, /* 0x1.18109a360fc23fff2 */ - 1.096142145591650907149, /* 0x1.189cc58b155a70008 */ - 1.098285140311341168136, /* 0x1.1929370751ea50002 */ - 1.100432324652149906842, /* 0x1.19b5eecdd79cefff0 */ - 1.102583706811727015711, /* 0x1.1a42ed01dbdba000e */ - 1.104739294993289488947, /* 0x1.1ad031c69a2eafff0 */ - 1.106899097422573863281, /* 0x1.1b5dbd3f66e120003 */ - 1.109063122341542140286, /* 0x1.1beb8f8fa8150000b */ - 1.111231377994659874592, /* 0x1.1c79a8dac6ad0fff4 */ - 1.113403872669181282605, /* 0x1.1d0809445a97ffffc */ - 1.115580614653132185460, /* 0x1.1d96b0effc9db000e */ - 1.117761612217810673898, /* 0x1.1e25a001332190000 */ - 1.119946873713312474002, /* 0x1.1eb4d69bdb2a9fff1 */ - 1.122136407473298902480, /* 0x1.1f4454e3bfae00006 */ - 1.124330221845670330058, /* 0x1.1fd41afcbb48bfff8 */ - 1.126528325196519908506, /* 0x1.2064290abc98c0001 */ - 1.128730725913251964394, /* 0x1.20f47f31c9aa7000f */ - 1.130937432396844410880, /* 0x1.21851d95f776dfff0 */ - 1.133148453059692917203, /* 0x1.2216045b6784efffa */ - 1.135363796355857157764, /* 0x1.22a733a6692ae0004 */ - 1.137583470716100553249, /* 0x1.2338ab9b3221a0004 */ - 1.139807484614418608939, /* 0x1.23ca6c5e27aadfff7 */ - 1.142035846532929888057, /* 0x1.245c7613b7f6c0004 */ - 1.144268564977221958089, /* 0x1.24eec8e06b035000c */ - 1.146505648458203463465, /* 0x1.258164e8cea85fff8 */ - 1.148747105501412235671, /* 0x1.26144a5180d380009 */ - 1.150992944689175123667, /* 0x1.26a7793f5de2efffa */ - 1.153243174560058870217, /* 0x1.273af1d712179000d */ - 1.155497803703682491111, /* 0x1.27ceb43d81d42fff1 */ - 1.157756840726344771440, /* 0x1.2862c097a3d29000c */ - 1.160020294239811677834, /* 0x1.28f7170a74cf4fff1 */ - 1.162288172883275239058, /* 0x1.298bb7bb0faed0004 */ - 1.164560485298402170388, /* 0x1.2a20a2ce920dffff4 */ - 1.166837240167474476460, /* 0x1.2ab5d86a4631ffff6 */ - 1.169118446164539637555, /* 0x1.2b4b58b36d5220009 */ - 1.171404112007080167155, /* 0x1.2be123cf786790002 */ - 1.173694246390975415341, /* 0x1.2c7739e3c0aac000d */ - 1.175988858069749065617, /* 0x1.2d0d9b15deb58fff6 */ - 1.178287955789017793514, /* 0x1.2da4478b627040002 */ - 1.180591548323240091978, /* 0x1.2e3b3f69fb794fffc */ - 1.182899644456603782686, /* 0x1.2ed282d76421d0004 */ - 1.185212252993012693694, /* 0x1.2f6a11f96c685fff3 */ - 1.187529382762033236513, /* 0x1.3001ecf60082ffffa */ - 1.189851042595508889847, /* 0x1.309a13f30f28a0004 */ - 1.192177241354644978669, /* 0x1.31328716a758cfff7 */ - 1.194507987909589896687, /* 0x1.31cb4686e1e85fffb */ - 1.196843291137896336843, /* 0x1.32645269dfd04000a */ - 1.199183159977805113226, /* 0x1.32fdaae604c39000f */ - 1.201527603343041317132, /* 0x1.339750219980dfff3 */ - 1.203876630171082595692, /* 0x1.3431424300e480007 */ - 1.206230249419600664189, /* 0x1.34cb8170b3fee000e */ - 1.208588470077065268869, /* 0x1.35660dd14dbd4fffc */ - 1.210951301134513435915, /* 0x1.3600e78b6bdfc0005 */ - 1.213318751604272271958, /* 0x1.369c0ec5c38ebfff2 */ - 1.215690830512196507537, /* 0x1.373783a718d29000f */ - 1.218067546930756250870, /* 0x1.37d3465662f480007 */ - 1.220448909901335365929, /* 0x1.386f56fa770fe0008 */ - 1.222834928513994334780, /* 0x1.390bb5ba5fc540004 */ - 1.225225611877684750397, /* 0x1.39a862bd3c7a8fff3 */ - 1.227620969111500981433, /* 0x1.3a455e2a37bcafffd */ - 1.230021009336254911271, /* 0x1.3ae2a8287dfbefff6 */ - 1.232425741726685064472, /* 0x1.3b8040df76f39fffa */ - 1.234835175450728295084, /* 0x1.3c1e287682e48fff1 */ - 1.237249319699482263931, /* 0x1.3cbc5f151b86bfff8 */ - 1.239668183679933477545, /* 0x1.3d5ae4e2cc0a8000f */ - 1.242091776620540377629, /* 0x1.3df9ba07373bf0006 */ - 1.244520107762172811399, /* 0x1.3e98deaa0d8cafffe */ - 1.246953186383919165383, /* 0x1.3f3852f32973efff0 */ - 1.249391019292643401078, /* 0x1.3fd816ffc72b90001 */ - 1.251833623164381181797, /* 0x1.40782b17863250005 */ - 1.254280999953110153911, /* 0x1.41188f42caf400000 */ - 1.256733161434815393410, /* 0x1.41b943b42945bfffd */ - 1.259190116985283935980, /* 0x1.425a4893e5f10000a */ - 1.261651875958665236542, /* 0x1.42fb9e0a2df4c0009 */ - 1.264118447754797758244, /* 0x1.439d443f608c4fff9 */ - 1.266589841787181258708, /* 0x1.443f3b5bebf850008 */ - 1.269066067469190262045, /* 0x1.44e183883e561fff7 */ - 1.271547134259576328224, /* 0x1.45841cecf7a7a0001 */ - 1.274033051628237434048, /* 0x1.462707b2c43020009 */ - 1.276523829025464573684, /* 0x1.46ca44023aa410007 */ - 1.279019475999373156531, /* 0x1.476dd2045d46ffff0 */ - 1.281520002043128991825, /* 0x1.4811b1e1f1f19000b */ - 1.284025416692967214122, /* 0x1.48b5e3c3edd74fff4 */ - 1.286535729509738823464, /* 0x1.495a67d3613c8fff7 */ - 1.289050950070396384145, /* 0x1.49ff3e396e19d000b */ - 1.291571087985403654081, /* 0x1.4aa4671f5b401fff1 */ - 1.294096152842774794011, /* 0x1.4b49e2ae56d19000d */ - 1.296626154297237043484, /* 0x1.4befb10fd84a3fff4 */ - 1.299161101984141142272, /* 0x1.4c95d26d41d84fff8 */ - 1.301701005575179204100, /* 0x1.4d3c46f01d9f0fff3 */ - 1.304245874766450485904, /* 0x1.4de30ec21097d0003 */ - 1.306795719266019562007, /* 0x1.4e8a2a0ccce3d0002 */ - 1.309350548792467483458, /* 0x1.4f3198fa10346fff5 */ - 1.311910373099227200545, /* 0x1.4fd95bb3be8cffffd */ - 1.314475201942565174546, /* 0x1.50817263bf0e5fffb */ - 1.317045045107389400535, /* 0x1.5129dd3418575000e */ - 1.319619912422941299109, /* 0x1.51d29c4f01c54ffff */ - 1.322199813675649204855, /* 0x1.527bafde83a310009 */ - 1.324784758729532718739, /* 0x1.5325180cfb8b3fffd */ - 1.327374757430096474625, /* 0x1.53ced504b2bd0fff4 */ - 1.329969819671041886272, /* 0x1.5478e6f02775e0001 */ - 1.332569955346704748651, /* 0x1.55234df9d8a59fff8 */ - 1.335175174370685002822, /* 0x1.55ce0a4c5a6a9fff6 */ - 1.337785486688218616860, /* 0x1.56791c1263abefff7 */ - 1.340400902247843806217, /* 0x1.57248376aef21fffa */ - 1.343021431036279800211, /* 0x1.57d040a420c0bfff3 */ - 1.345647083048053138662, /* 0x1.587c53c5a630f0002 */ - 1.348277868295411074918, /* 0x1.5928bd063fd7bfff9 */ - 1.350913796821875845231, /* 0x1.59d57c9110ad60006 */ - 1.353554878672557082439, /* 0x1.5a8292913d68cfffc */ - 1.356201123929036356254, /* 0x1.5b2fff3212db00007 */ - 1.358852542671913132777, /* 0x1.5bddc29edcc06fff3 */ - 1.361509145047255398051, /* 0x1.5c8bdd032ed16000f */ - 1.364170941142184734180, /* 0x1.5d3a4e8a5bf61fff4 */ - 1.366837941171020309735, /* 0x1.5de9176042f1effff */ - 1.369510155261156381121, /* 0x1.5e9837b062f4e0005 */ - 1.372187593620959988833, /* 0x1.5f47afa69436cfff1 */ - 1.374870266463378287715, /* 0x1.5ff77f6eb3f8cfffd */ - 1.377558184010425845733, /* 0x1.60a7a734a9742fff9 */ - 1.380251356531521533853, /* 0x1.6158272490016000c */ - 1.382949794301995272203, /* 0x1.6208ff6a8978a000f */ - 1.385653507605306700170, /* 0x1.62ba3032c0a280004 */ - 1.388362506772382154503, /* 0x1.636bb9a994784000f */ - 1.391076802081129493127, /* 0x1.641d9bfb29a7bfff6 */ - 1.393796403973427855412, /* 0x1.64cfd7545928b0002 */ - 1.396521322756352656542, /* 0x1.65826be167badfff8 */ - 1.399251568859207761660, /* 0x1.663559cf20826000c */ - 1.401987152677323100733, /* 0x1.66e8a14a29486fffc */ - 1.404728084651919228815, /* 0x1.679c427f5a4b6000b */ - 1.407474375243217723560, /* 0x1.68503d9ba0add000f */ - 1.410226034922914983815, /* 0x1.690492cbf6303fff9 */ - 1.412983074197955213304, /* 0x1.69b9423d7b548fff6 */ -}; diff --git a/sysdeps/ieee754/dbl-64/t_exp2.h b/sysdeps/ieee754/dbl-64/t_exp2.h deleted file mode 100644 index 1fd73338cf..0000000000 --- a/sysdeps/ieee754/dbl-64/t_exp2.h +++ /dev/null @@ -1,585 +0,0 @@ -/* These values are accurate to 52+12 bits when represented as - a double. */ -static const double exp2_accuratetable[512] = { -0.707106781187802013759 /* 0x0.b504f333fb3f80007 */, -0.708064712808760599040 /* 0x0.b543baa0f71b38000 */, -0.709023942160304065938 /* 0x0.b58297d3a8d518002 */, -0.709984470998547667624 /* 0x0.b5c18ad39b4ba0001 */, -0.710946301084324217006 /* 0x0.b60093a85e8d30001 */, -0.711909434180505784637 /* 0x0.b63fb25984e628005 */, -0.712873872052760648733 /* 0x0.b67ee6eea3b5f8003 */, -0.713839616467838999908 /* 0x0.b6be316f518c98001 */, -0.714806669195984345523 /* 0x0.b6fd91e328d148007 */, -0.715775032009894562898 /* 0x0.b73d0851c69e20002 */, -0.716744706683768884058 /* 0x0.b77c94c2c9b3d0003 */, -0.717715694995770148178 /* 0x0.b7bc373dd52eb0003 */, -0.718687998724665488852 /* 0x0.b7fbefca8cd530004 */, -0.719661619652575468291 /* 0x0.b83bbe70981da8001 */, -0.720636559564428180758 /* 0x0.b87ba337a194b0006 */, -0.721612820246623098989 /* 0x0.b8bb9e27556508004 */, -0.722590403488338473025 /* 0x0.b8fbaf4762c798006 */, -0.723569311081411870036 /* 0x0.b93bd69f7be1d0000 */, -0.724549544820974333906 /* 0x0.b97c1437567828007 */, -0.725531106502312561633 /* 0x0.b9bc6816a87ae8002 */, -0.726513997924421062181 /* 0x0.b9fcd2452bee00000 */, -0.727498220889519875430 /* 0x0.ba3d52ca9e6148002 */, -0.728483777200401694265 /* 0x0.ba7de9aebe05c8003 */, -0.729470668664712662563 /* 0x0.babe96f94e62a8002 */, -0.730458897090379144517 /* 0x0.baff5ab2134df0004 */, -0.731448464287988597833 /* 0x0.bb4034e0d38ab0000 */, -0.732439372072965166897 /* 0x0.bb81258d5b2d60001 */, -0.733431622260458326859 /* 0x0.bbc22cbf75fd28001 */, -0.734425216668725511232 /* 0x0.bc034a7ef32c00001 */, -0.735420157118880535324 /* 0x0.bc447ed3a50fe0005 */, -0.736416445434497690674 /* 0x0.bc85c9c560b350001 */, -0.737414083433310718618 /* 0x0.bcc72b5bf4b4e0000 */, -0.738413072966152328496 /* 0x0.bd08a39f5417a8007 */, -0.739413415848264365956 /* 0x0.bd4a32974abcd0002 */, -0.740415113911250699637 /* 0x0.bd8bd84bb68300002 */, -0.741418168994518067562 /* 0x0.bdcd94c47ddd30003 */, -0.742422582936659858376 /* 0x0.be0f6809865968006 */, -0.743428357577745613238 /* 0x0.be515222b72530003 */, -0.744435494762383687126 /* 0x0.be935317fc6ba0002 */, -0.745443996335090397492 /* 0x0.bed56af1423de8001 */, -0.746453864145572798553 /* 0x0.bf1799b67a6248007 */, -0.747465100043933849969 /* 0x0.bf59df6f970e70002 */, -0.748477705883256683178 /* 0x0.bf9c3c248dbee8001 */, -0.749491683518965001732 /* 0x0.bfdeafdd568308000 */, -0.750507034813367890373 /* 0x0.c0213aa1f0fc38004 */, -0.751523761622240105153 /* 0x0.c063dc7a559ca0003 */, -0.752541865811731880422 /* 0x0.c0a6956e883ed8000 */, -0.753561349247157341600 /* 0x0.c0e965868bd220006 */, -0.754582213796583967110 /* 0x0.c12c4cca664cb8002 */, -0.755604461332336940791 /* 0x0.c16f4b42225350006 */, -0.756628093726406381068 /* 0x0.c1b260f5ca2c48002 */, -0.757653112855631305506 /* 0x0.c1f58ded6d72d8001 */, -0.758679520599333412360 /* 0x0.c238d2311e7d08001 */, -0.759707318837184453227 /* 0x0.c27c2dc8f00368005 */, -0.760736509456435783249 /* 0x0.c2bfa0bcfd1400000 */, -0.761767094336480043995 /* 0x0.c3032b155818d0000 */, -0.762799075372231349951 /* 0x0.c346ccda248cc0001 */, -0.763832454453522768941 /* 0x0.c38a8613805488005 */, -0.764867233473625618441 /* 0x0.c3ce56c98d1ca8005 */, -0.765903414329434539816 /* 0x0.c4123f04708d80002 */, -0.766940998920452976510 /* 0x0.c4563ecc532dc0001 */, -0.767979989148100838946 /* 0x0.c49a56295f9f88006 */, -0.769020386915772125040 /* 0x0.c4de8523c2b0a0001 */, -0.770062194131770905170 /* 0x0.c522cbc3ae94e0003 */, -0.771105412703856241146 /* 0x0.c5672a1154e6b8004 */, -0.772150044545352520777 /* 0x0.c5aba014ed5f18003 */, -0.773196091570364285606 /* 0x0.c5f02dd6b09288003 */, -0.774243555696622731700 /* 0x0.c634d35edb1260003 */, -0.775292438842697939641 /* 0x0.c67990b5aa5c18004 */, -0.776342742931542928455 /* 0x0.c6be65e360bed8000 */, -0.777394469888802008854 /* 0x0.c70352f0437f50004 */, -0.778447621641124243320 /* 0x0.c74857e498fd00006 */, -0.779502200118583399303 /* 0x0.c78d74c8ab5b60000 */, -0.780558207255445668515 /* 0x0.c7d2a9a4c959f8000 */, -0.781615644985491186966 /* 0x0.c817f681412f80002 */, -0.782674515247667956808 /* 0x0.c85d5b6666c150006 */, -0.783734819983036512536 /* 0x0.c8a2d85c904760003 */, -0.784796561133562109454 /* 0x0.c8e86d6c14f850002 */, -0.785859740645942328471 /* 0x0.c92e1a9d513ec8002 */, -0.786924360469767103536 /* 0x0.c973dff8a4b390007 */, -0.787990422552312885808 /* 0x0.c9b9bd866c6440007 */, -0.789057928854407064640 /* 0x0.c9ffb34f1444b0001 */, -0.790126881326406182996 /* 0x0.ca45c15afcc570001 */, -0.791197281930050233534 /* 0x0.ca8be7b292db38000 */, -0.792269132620954885659 /* 0x0.cad2265e3cbee8000 */, -0.793342435380726906957 /* 0x0.cb187d667d3d38006 */, -0.794417192158282659010 /* 0x0.cb5eecd3b33158006 */, -0.795493404931386649540 /* 0x0.cba574ae5d2e80001 */, -0.796571075671306805268 /* 0x0.cbec14fef2a348004 */, -0.797650206352955137846 /* 0x0.cc32cdcdef0000000 */, -0.798730798954342069432 /* 0x0.cc799f23d11d18000 */, -0.799812855456121796232 /* 0x0.ccc089091abb28004 */, -0.800896377841454287795 /* 0x0.cd078b86505c18003 */, -0.801981368096190028208 /* 0x0.cd4ea6a3f97720007 */, -0.803067828208752554378 /* 0x0.cd95da6aa057b8007 */, -0.804155760170129796375 /* 0x0.cddd26e2d21b28001 */, -0.805245165974338261710 /* 0x0.ce248c151f3330001 */, -0.806336047619038653883 /* 0x0.ce6c0a0a1c1350001 */, -0.807428407102107836855 /* 0x0.ceb3a0ca5d6be0006 */, -0.808522246427078927792 /* 0x0.cefb505e7e2550007 */, -0.809617567597010201484 /* 0x0.cf4318cf18a268002 */, -0.810714372621179513182 /* 0x0.cf8afa24ce1c98004 */, -0.811812663508675536069 /* 0x0.cfd2f4683f9810005 */, -0.812912442272482604912 /* 0x0.d01b07a2126188003 */, -0.814013710929394895825 /* 0x0.d06333daeff618001 */, -0.815116471495287542325 /* 0x0.d0ab791b80d028006 */, -0.816220725993571205593 /* 0x0.d0f3d76c75b330000 */, -0.817326476447408967199 /* 0x0.d13c4ed67f1cf8000 */, -0.818433724883006474832 /* 0x0.d184df6250e3b0001 */, -0.819542473330909460055 /* 0x0.d1cd8918a3a328004 */, -0.820652723822034690935 /* 0x0.d2164c02305fa0002 */, -0.821764478391968422618 /* 0x0.d25f2827b53fb0005 */, -0.822877739077315761840 /* 0x0.d2a81d91f188b8000 */, -0.823992507918612782109 /* 0x0.d2f12c49a8d290005 */, -0.825108786960634610365 /* 0x0.d33a5457a35e40003 */, -0.826226578247117093869 /* 0x0.d38395c4a84848007 */, -0.827345883828319528258 /* 0x0.d3ccf09985d958004 */, -0.828466705754248966560 /* 0x0.d41664df0a1320005 */, -0.829589046080638992111 /* 0x0.d45ff29e094330000 */, -0.830712906863802391671 /* 0x0.d4a999df585a20005 */, -0.831838290163696481037 /* 0x0.d4f35aabd04a60006 */, -0.832965198041969556729 /* 0x0.d53d350c4be258002 */, -0.834093632565442222342 /* 0x0.d5872909aba050007 */, -0.835223595802037643865 /* 0x0.d5d136acd138e8006 */, -0.836355089820669306292 /* 0x0.d61b5dfe9f7780004 */, -0.837488116698010487424 /* 0x0.d6659f0801afa8005 */, -0.838622678508982644113 /* 0x0.d6aff9d1e147d8004 */, -0.839758777333464490056 /* 0x0.d6fa6e652d19e0000 */, -0.840896415254110962690 /* 0x0.d744fccad70d00003 */, -0.842035594355151628676 /* 0x0.d78fa50bd2c3b0000 */, -0.843176316724478125433 /* 0x0.d7da673117e730007 */, -0.844318584453106590905 /* 0x0.d8254343a19038003 */, -0.845462399634695271912 /* 0x0.d870394c6dbf30003 */, -0.846607764365415071965 /* 0x0.d8bb49547d37c0004 */, -0.847754680744707056494 /* 0x0.d9067364d45608003 */, -0.848903150873708822763 /* 0x0.d951b7867953b0006 */, -0.850053176859071113491 /* 0x0.d99d15c2787a30006 */, -0.851204760807439786431 /* 0x0.d9e88e21de11a0003 */, -0.852357904828824897169 /* 0x0.da3420adba1508003 */, -0.853512611037803181642 /* 0x0.da7fcd6f2184d8005 */, -0.854668881550406100980 /* 0x0.dacb946f2afaf8000 */, -0.855826718478671755185 /* 0x0.db1775b6e8ad48000 */, -0.856986123964844970247 /* 0x0.db63714f8e0818006 */, -0.858147100114499461478 /* 0x0.dbaf87422625b8000 */, -0.859309649060962410524 /* 0x0.dbfbb797daa460002 */, -0.860473772936213743282 /* 0x0.dc480259d3a710001 */, -0.861639473872910177676 /* 0x0.dc9467913a0f48006 */, -0.862806754008130227807 /* 0x0.dce0e7473b9b28003 */, -0.863975615481124226159 /* 0x0.dd2d8185086c20006 */, -0.865146060433749419813 /* 0x0.dd7a3653d38168005 */, -0.866318091005120138881 /* 0x0.ddc705bcccd628000 */, -0.867491709362415264210 /* 0x0.de13efc9434100004 */, -0.868666917636779056818 /* 0x0.de60f4825df9b8005 */, -0.869843717989716047624 /* 0x0.deae13f16599c0003 */, -0.871022112578215268471 /* 0x0.defb4e1f9dc388002 */, -0.872202103559697183859 /* 0x0.df48a3164a92f0001 */, -0.873383693097737778847 /* 0x0.df9612deb6e878007 */, -0.874566883362160263365 /* 0x0.dfe39d82348310001 */, -0.875751676517234511901 /* 0x0.e031430a0f0688000 */, -0.876938074732511840819 /* 0x0.e07f037f97e548001 */, -0.878126080186539592654 /* 0x0.e0ccdeec2a75e0006 */, -0.879315695055312818168 /* 0x0.e11ad5591f4078001 */, -0.880506921518618312932 /* 0x0.e168e6cfd2f880004 */, -0.881699761760385225541 /* 0x0.e1b71359a6df60003 */, -0.882894217964411143207 /* 0x0.e2055afffc1178000 */, -0.884090292325693805080 /* 0x0.e253bdcc3ffbb8001 */, -0.885287987031581180559 /* 0x0.e2a23bc7d7a1d8002 */, -0.886487304278189114386 /* 0x0.e2f0d4fc31ab80004 */, -0.887688246263368285778 /* 0x0.e33f8972bea8a8005 */, -0.888890815189881999840 /* 0x0.e38e5934f49010007 */, -0.890095013257492739835 /* 0x0.e3dd444c460bd0007 */, -0.891300842677948068626 /* 0x0.e42c4ac232f380000 */, -0.892508305659222567226 /* 0x0.e47b6ca036f8b8005 */, -0.893717404414979710310 /* 0x0.e4caa9efd40e58002 */, -0.894928141160697743242 /* 0x0.e51a02ba8e2610007 */, -0.896140518115016826430 /* 0x0.e5697709ecab90000 */, -0.897354537501434679237 /* 0x0.e5b906e77c61d0006 */, -0.898570201543732793877 /* 0x0.e608b25cca5ba8005 */, -0.899787512470129891014 /* 0x0.e6587973688ce8002 */, -0.901006472512270728537 /* 0x0.e6a85c34ecadb8000 */, -0.902227083902570559127 /* 0x0.e6f85aaaed4f20006 */, -0.903449348881299796343 /* 0x0.e74874df09a530003 */, -0.904673269686823378091 /* 0x0.e798aadadecba0007 */, -0.905898848559668845585 /* 0x0.e7e8fca80c3ee0001 */, -0.907126087750156795426 /* 0x0.e8396a503c3fe0005 */, -0.908354989505901100354 /* 0x0.e889f3dd1615b0002 */, -0.909585556079328783087 /* 0x0.e8da9958465228007 */, -0.910817789726044213523 /* 0x0.e92b5acb7d0578001 */, -0.912051692703457872481 /* 0x0.e97c38406c3c30003 */, -0.913287267274154990210 /* 0x0.e9cd31c0cbb370001 */, -0.914524515702244578108 /* 0x0.ea1e475654d540000 */, -0.915763440256158633982 /* 0x0.ea6f790ac5cc78001 */, -0.917004043205012497909 /* 0x0.eac0c6e7dd8448007 */, -0.918246326823137892807 /* 0x0.eb1230f760a428007 */, -0.919490293387826285200 /* 0x0.eb63b7431714a8007 */, -0.920735945178816406225 /* 0x0.ebb559d4cb6f30007 */, -0.921983284479243714322 /* 0x0.ec0718b64c0940002 */, -0.923232313574974705626 /* 0x0.ec58f3f16a3910002 */, -0.924483034755387955725 /* 0x0.ecaaeb8ffb3168005 */, -0.925735450311948926408 /* 0x0.ecfcff9bd67078000 */, -0.926989562542820610982 /* 0x0.ed4f301edad1a0007 */, -0.928245373740515189457 /* 0x0.eda17d22e0f9b0001 */, -0.929502886213858126045 /* 0x0.edf3e6b1d37d40001 */, -0.930762102264245716494 /* 0x0.ee466cd594c5c8005 */, -0.932023024199046146183 /* 0x0.ee990f980dcdb0005 */, -0.933285654329454095216 /* 0x0.eeebcf032bc470007 */, -0.934549994971191289044 /* 0x0.ef3eab20e0d3c0001 */, -0.935816048439005676599 /* 0x0.ef91a3fb1e1340004 */, -0.937083817055075818404 /* 0x0.efe4b99bdcc618006 */, -0.938353303143720007819 /* 0x0.f037ec0d1889b8000 */, -0.939624509028518128972 /* 0x0.f08b3b58cc2bb8006 */, -0.940897437041863904384 /* 0x0.f0dea788fc2a90000 */, -0.942172089516254085427 /* 0x0.f13230a7ad21b8003 */, -0.943448468787511540534 /* 0x0.f185d6bee754e0006 */, -0.944726577195256100890 /* 0x0.f1d999d8b73478005 */, -0.946006417082291717338 /* 0x0.f22d79ff2cb130000 */, -0.947287990793413858827 /* 0x0.f281773c59ec48007 */, -0.948571300678290207925 /* 0x0.f2d5919a566268001 */, -0.949856349088629370320 /* 0x0.f329c9233bceb0001 */, -0.951143138379053731954 /* 0x0.f37e1de1272068002 */, -0.952431670908847949364 /* 0x0.f3d28fde3a6728006 */, -0.953721949039916472305 /* 0x0.f4271f249a93f0001 */, -0.955013975135367898520 /* 0x0.f47bcbbe6deab0001 */, -0.956307751564417496418 /* 0x0.f4d095b5e16638004 */, -0.957603280698967163097 /* 0x0.f5257d1524f590006 */, -0.958900564911197350604 /* 0x0.f57a81e668d628000 */, -0.960199606581278120057 /* 0x0.f5cfa433e60e50007 */, -0.961500408088936442422 /* 0x0.f624e407d527a0007 */, -0.962802971817578789903 /* 0x0.f67a416c72b760006 */, -0.964107300155846558292 /* 0x0.f6cfbc6c011458004 */, -0.965413395493874504368 /* 0x0.f7255510c439a8002 */, -0.966721260225105960572 /* 0x0.f77b0b6503c5b8006 */, -0.968030896745834645873 /* 0x0.f7d0df730a7940005 */, -0.969342307458006424716 /* 0x0.f826d145294be8003 */, -0.970655494764855020231 /* 0x0.f87ce0e5b29fd8000 */, -0.971970461071268720958 /* 0x0.f8d30e5efaa8f0004 */, -0.973287208789983648852 /* 0x0.f92959bb5e3c08001 */, -0.974605740331924708124 /* 0x0.f97fc305383028004 */, -0.975926058115625383329 /* 0x0.f9d64a46ebb9f8004 */, -0.977248164559556209435 /* 0x0.fa2cef8adbfc68004 */, -0.978572062087848637573 /* 0x0.fa83b2db7253d0007 */, -0.979897753126343307191 /* 0x0.fada944319fda0005 */, -0.981225240104636631254 /* 0x0.fb3193cc425870002 */, -0.982554525455618277276 /* 0x0.fb88b1815e61d0003 */, -0.983885611617111077747 /* 0x0.fbdfed6ce683e0007 */, -0.985218501026348891812 /* 0x0.fc3747995282f8006 */, -0.986553196127724962867 /* 0x0.fc8ec0112202a0005 */, -0.987889699367056062238 /* 0x0.fce656ded63710002 */, -0.989228013193998778636 /* 0x0.fd3e0c0cf48d50005 */, -0.990568140061241164686 /* 0x0.fd95dfa605c7b0003 */, -0.991910082424819927754 /* 0x0.fdedd1b4965710004 */, -0.993253842749249660216 /* 0x0.fe45e2433bfea0000 */, -0.994599423484053835071 /* 0x0.fe9e115c7c05f0005 */, -0.995946827107488830167 /* 0x0.fef65f0afb4c28006 */, -0.997296056085008264529 /* 0x0.ff4ecb59509cc8001 */, -0.998647112892057764479 /* 0x0.ffa756521dbfd0007 */, -1.000000000000000000000 /* 0x1.00000000000000000 */, -1.001354719891689004659 /* 0x1.0058c86da14aa0005 */, -1.002711275050312211844 /* 0x1.00b1afa5abead0003 */, -1.004069667960743483835 /* 0x1.010ab5b2cc0660009 */, -1.005429901112333324093 /* 0x1.0163da9fb2af30008 */, -1.006791976999887428009 /* 0x1.01bd1e7716f6a0008 */, -1.008155898118476168101 /* 0x1.02168143b03890006 */, -1.009521666967782227439 /* 0x1.027003103ae320002 */, -1.010889286051850133326 /* 0x1.02c9a3e7783030002 */, -1.012258757875921233497 /* 0x1.032363d42aaa8000e */, -1.013630084952214405194 /* 0x1.037d42e11c88d0000 */, -1.015003269791313389451 /* 0x1.03d741191635a0001 */, -1.016378314911229763267 /* 0x1.04315e86e84630008 */, -1.017755222831652872635 /* 0x1.048b9b35652800002 */, -1.019133996077934645224 /* 0x1.04e5f72f65827000b */, -1.020514637175266248212 /* 0x1.0540727fc1cfa0006 */, -1.021897148653734488385 /* 0x1.059b0d3157ebb0002 */, -1.023281533050062419584 /* 0x1.05f5c74f0cfeb0002 */, -1.024667792897328677539 /* 0x1.0650a0e3c22ee0003 */, -1.026055930738840826806 /* 0x1.06ab99fa63e1b0008 */, -1.027445949118511947550 /* 0x1.0706b29ddf2700009 */, -1.028837850584049418178 /* 0x1.0761ead9253ab0009 */, -1.030231637685799839262 /* 0x1.07bd42b72a3f80008 */, -1.031627312979383592802 /* 0x1.0818ba42e824a000c */, -1.033024879021186448496 /* 0x1.0874518759b0b0008 */, -1.034424338374263729911 /* 0x1.08d0088f80ffa0006 */, -1.035825693601787333992 /* 0x1.092bdf66604e30005 */, -1.037228947273990842283 /* 0x1.0987d617019cd000a */, -1.038634101961269928846 /* 0x1.09e3ecac6f199000f */, -1.040041160239590700707 /* 0x1.0a402331b91270002 */, -1.041450124688240164200 /* 0x1.0a9c79b1f37c3000b */, -1.042860997889083929381 /* 0x1.0af8f038352160000 */, -1.044273782427270314011 /* 0x1.0b5586cf986890006 */, -1.045688480893644856116 /* 0x1.0bb23d833dfbf0006 */, -1.047105095879385272564 /* 0x1.0c0f145e46e330007 */, -1.048523629981608529302 /* 0x1.0c6c0b6bdaadc000f */, -1.049944085800634585634 /* 0x1.0cc922b72470a000f */, -1.051366465939483019223 /* 0x1.0d265a4b5238b0007 */, -1.052790773004648849929 /* 0x1.0d83b23395e510002 */, -1.054217009607077093512 /* 0x1.0de12a7b263970006 */, -1.055645178360430591625 /* 0x1.0e3ec32d3cf680000 */, -1.057075281882416506511 /* 0x1.0e9c7c55184f5000e */, -1.058507322794714378170 /* 0x1.0efa55fdfad51000a */, -1.059941303721639416236 /* 0x1.0f58503329fed0003 */, -1.061377227289284297385 /* 0x1.0fb66affed37f0000 */, -1.062815096132297298980 /* 0x1.1014a66f95540000c */, -1.064254912884593951029 /* 0x1.1073028d725850007 */, -1.065696680185205469411 /* 0x1.10d17f64d9ea2000b */, -1.067140400676658718053 /* 0x1.11301d012586a0007 */, -1.068586077004890055886 /* 0x1.118edb6db26ab0003 */, -1.070033711820396415998 /* 0x1.11edbab5e2d6e000b */, -1.071483307775789262099 /* 0x1.124cbae51b5ef0001 */, -1.072934867526001312439 /* 0x1.12abdc06c3240000c */, -1.074388393734249103080 /* 0x1.130b1e264a62e0005 */, -1.075843889063253344684 /* 0x1.136a814f20ccd0003 */, -1.077301356179926061823 /* 0x1.13ca058cbaaed000b */, -1.078760797756675327056 /* 0x1.1429aaea9260e000e */, -1.080222216468626150775 /* 0x1.148971742537c0009 */, -1.081685614993597610617 /* 0x1.14e95934f37e8000b */, -1.083150996013011013776 /* 0x1.1549623881762000d */, -1.084618362213087383633 /* 0x1.15a98c8a58a6a000b */, -1.086087716284427351384 /* 0x1.1609d8360768c0008 */, -1.087559060917626885283 /* 0x1.166a45471c13f0008 */, -1.089032398810997337465 /* 0x1.16cad3c92d7b50009 */, -1.090507732647478578212 /* 0x1.172b83c7c18b5000f */, -1.091985065182095926460 /* 0x1.178c554ead72a000c */, -1.093464399073070136880 /* 0x1.17ed48695befe000c */, -1.094945737045367906172 /* 0x1.184e5d23812500007 */, -1.096429081816546080591 /* 0x1.18af9388c90e40005 */, -1.097914436104650892651 /* 0x1.1910eba4e031a0001 */, -1.099401802629782043408 /* 0x1.19726583755720003 */, -1.100891184121537858001 /* 0x1.19d4013041b860007 */, -1.102382583308144647940 /* 0x1.1a35beb6fd0cd0007 */, -1.103876002922312915544 /* 0x1.1a979e2363fa10000 */, -1.105371445702084232160 /* 0x1.1af99f8139025000e */, -1.106868914387219016199 /* 0x1.1b5bc2dc408b9000e */, -1.108368411723785085252 /* 0x1.1bbe084045eb30002 */, -1.109869940458469095340 /* 0x1.1c206fb91524c000e */, -1.111373503344554869449 /* 0x1.1c82f952817cc0001 */, -1.112879103137133007859 /* 0x1.1ce5a51860344000f */, -1.114386742595953938610 /* 0x1.1d4873168babf000e */, -1.115896424484008608911 /* 0x1.1dab6358e1d4a000f */, -1.117408151567338414664 /* 0x1.1e0e75eb43f9c000c */, -1.118921926613465345265 /* 0x1.1e71aad995078000f */, -1.120437752409564780022 /* 0x1.1ed5022fcd8600003 */, -1.121955631720569668277 /* 0x1.1f387bf9cd88b0000 */, -1.123475567332998359439 /* 0x1.1f9c18438cdec000a */, -1.124997562033035469759 /* 0x1.1fffd71902f970002 */, -1.126521618608448571713 /* 0x1.2063b88629079000e */, -1.128047739853580200284 /* 0x1.20c7bc96ff72a0002 */, -1.129575928566289189112 /* 0x1.212be3578a81e0006 */, -1.131106187546149888259 /* 0x1.21902cd3d05f70007 */, -1.132638519598779369743 /* 0x1.21f49917ddda5000c */, -1.134172927531616359481 /* 0x1.2259282fc1c24000e */, -1.135709414157753949251 /* 0x1.22bdda27911e90007 */, -1.137247982292643566662 /* 0x1.2322af0b638e60007 */, -1.138788634756517259562 /* 0x1.2387a6e755f270000 */, -1.140331374372893558110 /* 0x1.23ecc1c788c890006 */, -1.141876203969685699176 /* 0x1.2451ffb821639000c */, -1.143423126377846266197 /* 0x1.24b760c5486dc0009 */, -1.144972144431494420774 /* 0x1.251ce4fb2a0cc0005 */, -1.146523260971646252006 /* 0x1.25828c65f9fb8000d */, -1.148076478839068270690 /* 0x1.25e85711ebaeb0000 */, -1.149631800883562204903 /* 0x1.264e450b3c8a30008 */, -1.151189229953253789786 /* 0x1.26b4565e281a20003 */, -1.152748768902654319399 /* 0x1.271a8b16f0f000002 */, -1.154310420590433317050 /* 0x1.2780e341de2fc0001 */, -1.155874187878668246681 /* 0x1.27e75eeb3abc90007 */, -1.157440073633736243899 /* 0x1.284dfe1f5633e000a */, -1.159008080725518974322 /* 0x1.28b4c0ea840d90001 */, -1.160578212048386514965 /* 0x1.291ba75932ae60000 */, -1.162150470417516290340 /* 0x1.2982b177796850008 */, -1.163724858777502646494 /* 0x1.29e9df51fdd900001 */, -1.165301379991388053320 /* 0x1.2a5130f50bf34000e */, -1.166880036952526289469 /* 0x1.2ab8a66d10fdc0008 */, -1.168460832550151540268 /* 0x1.2b203fc675b7a000a */, -1.170043769683112966389 /* 0x1.2b87fd0dad7260008 */, -1.171628851252754177681 /* 0x1.2befde4f2e3da000d */, -1.173216080163546060084 /* 0x1.2c57e397719940002 */, -1.174805459325657830448 /* 0x1.2cc00cf2f7491000c */, -1.176396991650083379037 /* 0x1.2d285a6e3ff90000b */, -1.177990680055698513602 /* 0x1.2d90cc15d4ff90005 */, -1.179586527463262646306 /* 0x1.2df961f641c57000c */, -1.181184536796979545103 /* 0x1.2e621c1c157cd000d */, -1.182784710984701836994 /* 0x1.2ecafa93e35af0004 */, -1.184387052960675701386 /* 0x1.2f33fd6a459cb0000 */, -1.185991565661414393112 /* 0x1.2f9d24abd8fd1000e */, -1.187598252026902612178 /* 0x1.300670653e083000a */, -1.189207115003001469262 /* 0x1.306fe0a31bc040008 */, -1.190818157535919796833 /* 0x1.30d9757219895000e */, -1.192431382587621380206 /* 0x1.31432edef01a1000f */, -1.194046793097208292195 /* 0x1.31ad0cf63f0630008 */, -1.195664392040319823392 /* 0x1.32170fc4ce0db000c */, -1.197284182375793593084 /* 0x1.32813757527750005 */, -1.198906167074650808198 /* 0x1.32eb83ba8eef3000f */, -1.200530349107333139048 /* 0x1.3355f4fb457e5000d */, -1.202156731453099647353 /* 0x1.33c08b2641df9000c */, -1.203785317090505513368 /* 0x1.342b46484f07b0005 */, -1.205416109005122526928 /* 0x1.3496266e3fa270005 */, -1.207049110184904572310 /* 0x1.35012ba4e8fa10000 */, -1.208684323627194912036 /* 0x1.356c55f92aabb0004 */, -1.210321752322854882437 /* 0x1.35d7a577dd33f0004 */, -1.211961399276747286580 /* 0x1.36431a2de8748000d */, -1.213603267492579629347 /* 0x1.36aeb4283309e000c */, -1.215247359985374142610 /* 0x1.371a7373b00160000 */, -1.216893679753690671322 /* 0x1.3786581d404e90000 */, -1.218542229828181611183 /* 0x1.37f26231e82e4000c */, -1.220193013225231215567 /* 0x1.385e91be9c2d20002 */, -1.221846032973555429280 /* 0x1.38cae6d05e66f0000 */, -1.223501292099485437962 /* 0x1.393761742e5830001 */, -1.225158793636904830441 /* 0x1.39a401b713cb3000e */, -1.226818540625497444577 /* 0x1.3a10c7a61ceae0007 */, -1.228480536107136034131 /* 0x1.3a7db34e5a4a50003 */, -1.230144783126481566885 /* 0x1.3aeac4bcdf8d60001 */, -1.231811284734168454619 /* 0x1.3b57fbfec6e950008 */, -1.233480043984379381835 /* 0x1.3bc559212e7a2000f */, -1.235151063936380300149 /* 0x1.3c32dc3139f2a0004 */, -1.236824347652524913647 /* 0x1.3ca0853c106ac000e */, -1.238499898199571624970 /* 0x1.3d0e544eddd240003 */, -1.240177718649636107175 /* 0x1.3d7c4976d3fcd0000 */, -1.241857812073360767273 /* 0x1.3dea64c1231f70004 */, -1.243540181554270152039 /* 0x1.3e58a63b099920005 */, -1.245224830175077013244 /* 0x1.3ec70df1c4e46000e */, -1.246911761022835740725 /* 0x1.3f359bf29741c000e */, -1.248600977188942806639 /* 0x1.3fa4504ac7b800009 */, -1.250292481770148400634 /* 0x1.40132b07a330d000a */, -1.251986277866492969263 /* 0x1.40822c367a340000b */, -1.253682368581898742876 /* 0x1.40f153e4a18e0000d */, -1.255380757024939564249 /* 0x1.4160a21f73289000d */, -1.257081446308726757662 /* 0x1.41d016f44deaa000c */, -1.258784439550028944083 /* 0x1.423fb27094c090008 */, -1.260489739869405489991 /* 0x1.42af74a1aec1c0006 */, -1.262197350394008266193 /* 0x1.431f5d950a453000c */, -1.263907274252603851764 /* 0x1.438f6d58176860004 */, -1.265619514578811388761 /* 0x1.43ffa3f84b9eb000d */, -1.267334074511444086425 /* 0x1.44700183221180008 */, -1.269050957191869555296 /* 0x1.44e0860618b930006 */, -1.270770165768063009230 /* 0x1.4551318eb4d20000e */, -1.272491703389059036805 /* 0x1.45c2042a7cc26000b */, -1.274215573211836316547 /* 0x1.4632fde6ffacd000d */, -1.275941778396075143580 /* 0x1.46a41ed1cfac40001 */, -1.277670322103555911043 /* 0x1.471566f8812ac0000 */, -1.279401207505722393185 /* 0x1.4786d668b33260005 */, -1.281134437771823675369 /* 0x1.47f86d3002637000a */, -1.282870016078732078362 /* 0x1.486a2b5c13c00000e */, -1.284607945607987078432 /* 0x1.48dc10fa916bd0004 */, -1.286348229545787758022 /* 0x1.494e1e192aaa30007 */, -1.288090871080605159846 /* 0x1.49c052c5913df000c */, -1.289835873406902644341 /* 0x1.4a32af0d7d8090002 */, -1.291583239722392528754 /* 0x1.4aa532feab5e10002 */, -1.293332973229098792374 /* 0x1.4b17dea6db8010008 */, -1.295085077135345708087 /* 0x1.4b8ab213d57d9000d */, -1.296839554650994097442 /* 0x1.4bfdad53629e10003 */, -1.298596408992440220988 /* 0x1.4c70d0735358a000d */, -1.300355643380135983739 /* 0x1.4ce41b817c99e0001 */, -1.302117261036232376282 /* 0x1.4d578e8bb52cb0003 */, -1.303881265192249561154 /* 0x1.4dcb299fde2920008 */, -1.305647659079073541490 /* 0x1.4e3eeccbd7f4c0003 */, -1.307416445934474813521 /* 0x1.4eb2d81d8a86f000b */, -1.309187629001237640529 /* 0x1.4f26eba2e35a5000e */, -1.310961211525240921493 /* 0x1.4f9b2769d35090009 */, -1.312737196755087820678 /* 0x1.500f8b804e4a30000 */, -1.314515587949291131086 /* 0x1.508417f4530d00009 */, -1.316296388365203462468 /* 0x1.50f8ccd3df1840003 */, -1.318079601265708777911 /* 0x1.516daa2cf60020002 */, -1.319865229921343141607 /* 0x1.51e2b00da3c2b0007 */, -1.321653277603506371251 /* 0x1.5257de83f5512000d */, -1.323443747588034513690 /* 0x1.52cd359dfc7d5000e */, -1.325236643161341820781 /* 0x1.5342b569d6baa000f */, -1.327031967602244177939 /* 0x1.53b85df59921b0000 */, -1.328829724206201046165 /* 0x1.542e2f4f6b17e0006 */, -1.330629916266568235675 /* 0x1.54a4298571b27000e */, -1.332432547083447937938 /* 0x1.551a4ca5d97190009 */, -1.334237619959296017340 /* 0x1.559098bed16bf0008 */, -1.336045138203900251029 /* 0x1.56070dde90c800000 */, -1.337855105129210686631 /* 0x1.567dac13510cd0009 */, -1.339667524053662184301 /* 0x1.56f4736b52e2c000c */, -1.341482398296830025383 /* 0x1.576b63f4d8333000f */, -1.343299731186792467254 /* 0x1.57e27dbe2c40e0003 */, -1.345119526053918823702 /* 0x1.5859c0d59cd37000f */, -1.346941786233264881662 /* 0x1.58d12d497cd9a0005 */, -1.348766515064854010261 /* 0x1.5948c32824b87000c */, -1.350593715891792223641 /* 0x1.59c0827ff03890007 */, -1.352423392064920459908 /* 0x1.5a386b5f43a3e0006 */, -1.354255546937278120764 /* 0x1.5ab07dd485af1000c */, -1.356090183865519494030 /* 0x1.5b28b9ee21085000f */, -1.357927306213322804534 /* 0x1.5ba11fba8816e000b */, -1.359766917346459269620 /* 0x1.5c19af482f8f2000f */, -1.361609020638567812980 /* 0x1.5c9268a594cc00004 */, -1.363453619463660171403 /* 0x1.5d0b4be135916000c */, -1.365300717204201985683 /* 0x1.5d84590998eeb0005 */, -1.367150317245710233754 /* 0x1.5dfd902d494e40001 */, -1.369002422974674892971 /* 0x1.5e76f15ad22c40008 */, -1.370857037789471544224 /* 0x1.5ef07ca0cc166000b */, -1.372714165088220639199 /* 0x1.5f6a320dcf5280006 */, -1.374573808273481745378 /* 0x1.5fe411b0790800009 */, -1.376435970755022220096 /* 0x1.605e1b976e4b1000e */, -1.378300655944092456600 /* 0x1.60d84fd155d15000e */, -1.380167867259843417228 /* 0x1.6152ae6cdf0030003 */, -1.382037608124419003675 /* 0x1.61cd3778bc879000d */, -1.383909881963391264069 /* 0x1.6247eb03a4dc40009 */, -1.385784692209972801544 /* 0x1.62c2c91c56d9b0002 */, -1.387662042298923203992 /* 0x1.633dd1d1930ec0001 */, -1.389541935670444372533 /* 0x1.63b90532200630004 */, -1.391424375772021271329 /* 0x1.6434634ccc4cc0007 */, -1.393309366052102982208 /* 0x1.64afec30677e90008 */, -1.395196909966106124701 /* 0x1.652b9febc8e0f000d */, -1.397087010973788290271 /* 0x1.65a77e8dcc7f10004 */, -1.398979672539331309267 /* 0x1.66238825534170000 */, -1.400874898129892187656 /* 0x1.669fbcc1415600008 */, -1.402772691220124823310 /* 0x1.671c1c708328e000a */, -1.404673055288671035301 /* 0x1.6798a7420988b000d */, -1.406575993818903302975 /* 0x1.68155d44ca77a000f */, -1.408481510297352468121 /* 0x1.68923e87bf70e000a */, -1.410389608216942924956 /* 0x1.690f4b19e8f74000c */, -1.412300291075172076232 /* 0x1.698c830a4c94c0008 */ -}; -#define S (1.0/4503599627370496.0) /* 2^-52 */ -static const float exp2_deltatable[512] = { - 11527*S, -963*S, 884*S, -781*S, -2363*S, -3441*S, 123*S, 526*S, - -6*S, 1254*S, -1138*S, 1519*S, 1576*S, -65*S, 1040*S, 793*S, - -1662*S, -5063*S, -387*S, 968*S, -941*S, 984*S, -2856*S, -545*S, - 495*S, -5246*S, -2109*S, 1281*S, 2075*S, 909*S, -1642*S,-78233*S, --31653*S, -265*S, 130*S, 430*S, 2482*S, -742*S, 1616*S, -2213*S, - -519*S, 20*S, -3134*S,-13981*S, 1343*S, -1740*S, 247*S, 1679*S, - -1097*S, 3131*S, 871*S, -1480*S, 1936*S, -1827*S, 17325*S, 528*S, - -322*S, 1404*S, -152*S, -1845*S, -212*S, 2639*S, -476*S, 2960*S, - -962*S, -1012*S, -1231*S, 3030*S, 1659*S, -486*S, 2154*S, 1728*S, - -2793*S, 699*S, -1560*S, -2125*S, 2156*S, 142*S, -1888*S, 4426*S, --13443*S, 1970*S, -50*S, 1771*S,-43399*S, 4979*S, -2448*S, -370*S, - 1414*S, 1075*S, 232*S, 206*S, 873*S, 2141*S, 2970*S, 1279*S, - -2331*S, 336*S, -2595*S, 753*S, -3384*S, -616*S, 89*S, -818*S, - 5755*S, -241*S, -528*S, -661*S, -3777*S, -354*S, 250*S, 3881*S, - 2632*S, -2131*S, 2565*S, -316*S, 1746*S, -2541*S, -1324*S, -50*S, - 2564*S, -782*S, 1176*S, 6452*S, -1002*S, 1288*S, 336*S, -185*S, - 3063*S, 3784*S, 2169*S, 686*S, 328*S, -400*S, 312*S, -4517*S, - -1457*S, 1046*S, -1530*S, -685*S, 1328*S,-49815*S, -895*S, 1063*S, - -2091*S, -672*S, -1710*S, -665*S, 1545*S, 1819*S,-45265*S, 3548*S, - -554*S, -568*S, 4752*S, -1907*S,-13738*S, 675*S, 9611*S, -1115*S, - -815*S, 408*S, -1281*S, -937*S,-16376*S, -4772*S, -1440*S, 992*S, - 788*S, 10364*S, -1602*S, -661*S, -1783*S, -265*S, -20*S, -3781*S, - -861*S, -345*S, -994*S, 1364*S, -5339*S, 1620*S, 9390*S, -1066*S, - -305*S, -170*S, 175*S, 2461*S, -490*S, -769*S, -1450*S, 3315*S, - 2418*S, -45*S, -852*S, -1295*S, -488*S, -96*S, 1142*S, -2639*S, - 7905*S, -9306*S, -3859*S, 760*S, 1057*S, -1570*S, 3977*S, 209*S, - -514*S, 7151*S, 1646*S, 627*S, 599*S, -774*S, -1468*S, 633*S, - -473*S, 851*S, 2406*S, 143*S, 74*S, 4260*S, 1177*S, -913*S, - 2670*S, -3298*S, -1662*S, -120*S, -3264*S, -2148*S, 410*S, 2078*S, - -2098*S, -926*S, 3580*S, -1289*S, 2450*S, -1158*S, 907*S, -590*S, - 986*S, 1801*S, 1145*S, -1677*S, 3455*S, 956*S, 710*S, 144*S, - 153*S, -255*S, -1898*S, 28102*S, 2748*S, 1194*S, -3009*S, 7076*S, - 0*S, -2720*S, 711*S, 1225*S, -3034*S, -473*S, 378*S, -1046*S, - 962*S, -2006*S, 4647*S, 3206*S, 1769*S, -2665*S, 1254*S, 2025*S, - -2430*S, 6193*S, 1224*S, -856*S, -1592*S, -325*S, -1521*S, 1827*S, - -264*S, 2403*S, -1065*S, 967*S, -681*S, -2106*S, -474*S, 1333*S, - -893*S, 2296*S, 592*S, -1220*S, -326*S, 990*S, 139*S, 206*S, - -779*S, -1683*S, 1238*S, 6098*S, 136*S, 1197*S, 790*S, -107*S, - -1004*S, -2449*S, 939*S, 5568*S, 156*S, 1812*S, 2792*S, -1094*S, - -2677*S, -251*S, 2297*S, 943*S, -1329*S, 2883*S, -853*S, -2626*S, --105929*S, -6552*S, 1095*S, -1508*S, 1003*S, 5039*S, -2600*S, -749*S, - 1790*S, 890*S, 2016*S, -1073*S, 624*S, -2084*S, -1536*S, -1330*S, - 358*S, 2444*S, -179*S,-25759*S, -243*S, -552*S, -124*S, 3766*S, - 1192*S, -1614*S, 6*S, -1227*S, 345*S, -981*S, -295*S, -1006*S, - -995*S, -1195*S, 706*S, 2512*S, -1758*S, -734*S, -6286*S, -922*S, - 1530*S, 1542*S, 1223*S, 61*S, -83*S, 522*S,116937*S, -914*S, - -418*S, -7339*S, 249*S, -520*S, -762*S, 426*S, -505*S, 2664*S, - -1093*S, -1035*S, 2130*S, 4878*S, 1982*S, 1551*S, 2304*S, 193*S, - 1532*S, -7268*S, 24357*S, 531*S, 2676*S, -1170*S, 1465*S, -1917*S, - 2143*S, 1466*S, -7*S, -7300*S, 3297*S, -1197*S, -289*S, -1548*S, - 26226*S, 4401*S, 4123*S, -1588*S, 4243*S, 4069*S, -1276*S, -2010*S, - 1407*S, 1478*S, 488*S, -2366*S, -2909*S, -2534*S, -1285*S, 7095*S, - -645*S, -2089*S, -944*S, -40*S, -1363*S, -833*S, 917*S, 1609*S, - 1286*S, 1677*S, 1613*S, -2295*S, -1248*S, 40*S, 26*S, 2038*S, - 698*S, 2675*S, -1755*S, -3522*S, -1614*S, -6111*S, 270*S, 1822*S, - -234*S, -2844*S, -1201*S, -830*S, 1193*S, 2354*S, 47*S, 1522*S, - -78*S, -640*S, 2425*S, -1596*S, 1563*S, 1169*S, -1006*S, -83*S, - 2362*S, -3521*S, -314*S, 1814*S, -1751*S, 305*S, 1715*S, -3741*S, - 7847*S, 1291*S, 1206*S, 36*S, 1397*S, -1419*S, -1194*S, -2014*S, - 1742*S, -578*S, -207*S, 875*S, 1539*S, 2826*S, -1165*S, -909*S, - 1849*S, 927*S, 2018*S, -981*S, 1637*S, -463*S, 905*S, 6618*S, - 400*S, 630*S, 2614*S, 900*S, 2323*S, -1094*S, -1858*S, -212*S, - -2069*S, 747*S, 1845*S, -1450*S, 444*S, -213*S, -438*S, 1158*S, - 4738*S, 2497*S, -370*S, -2016*S, -518*S, -1160*S, -1510*S, 123*S -}; -/* Maximum magnitude in above table: 116937 */ -#undef S diff --git a/sysdeps/ieee754/dbl-64/uasncs.h b/sysdeps/ieee754/dbl-64/uasncs.h deleted file mode 100644 index d754932558..0000000000 --- a/sysdeps/ieee754/dbl-64/uasncs.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/******************************************************************/ -/* */ -/* MODULE_NAME:uasncs.h */ -/* */ -/* common data and variables prototype and definition */ -/******************************************************************/ - -#ifndef UANSNCS_H -#define UANSNCS_H - -#ifdef BIG_ENDI - static const mynumber -/**/ a1 = {{0x3FC55580, 0x00000000 }}, /* 0.1666717529296875 */ -/**/ a2 = {{0xBED55555, 0x55552330 }}, /* -5.0862630208224597e-06 */ -/**/ hp0 = {{0x3FF921FB, 0x54442D18 }}, /* 1.5707963267948966 */ -/**/ hp1 = {{0x3C91A626, 0x33145C07 }}; /* 6.123233995736766e-17 */ - -#else -#ifdef LITTLE_ENDI - static const mynumber -/**/ a1 = {{0x00000000, 0x3FC55580 }}, /* 0.1666717529296875 */ -/**/ a2 = {{0x55552330, 0xBED55555 }}, /* -5.0862630208224597e-06 */ -/**/ hp0 = {{0x54442D18, 0x3FF921FB }}, /* 1.5707963267948966 */ -/**/ hp1 = {{0x33145C07, 0x3C91A626 }}; /* 6.123233995736766e-17 */ - -#endif -#endif - -static const double - f1 = 1.66666666666664110590506577996662E-01, - f2 = 7.50000000026122686814431784722623E-02, - f3 = 4.46428561421059750978517350006940E-02, - f4 = 3.03821268582119319911193410625235E-02, - f5 = 2.23551211026525610742786300334557E-02, - f6 = 1.81382903404565056280372531963613E-02; -static const double - c2 = 0.74999999999985410757087492918602258E-01, - c3 = 0.44642857150311968932423372477866076E-01, - c4 = 0.30381942574778615766200591683810471E-01, - c5 = 0.22372413472984868331447708777000650E-01, - c6 = 0.17333630246451830686009693735025490E-01, - c7 = 0.14710362893628210269950864741085777E-01; - -static const double big = 103079215104.0, t24 = 16777216.0, t27 = 134217728.0; -static const double - rt0 = 9.99999999859990725855365213134618E-01, - rt1 = 4.99999999495955425917856814202739E-01, - rt2 = 3.75017500867345182581453026130850E-01, - rt3 = 3.12523626554518656309172508769531E-01; -#endif diff --git a/sysdeps/ieee754/dbl-64/uatan.tbl b/sysdeps/ieee754/dbl-64/uatan.tbl deleted file mode 100644 index 06608a3edb..0000000000 --- a/sysdeps/ieee754/dbl-64/uatan.tbl +++ /dev/null @@ -1,11134 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/****************************************************************/ -/* TABLES FOR THE uatan() FUNCTION */ -/****************************************************************/ - -#include "endian.h" - -#ifdef BIG_ENDI - - static const number - cij[241][7] = { /* x0,cij for (1/16,1) */ -/**/ {{{0X3FB04006, 0X65E0244E} }, -/**/ {{0X3FB03A73, 0X7B53DD20} }, -/**/ {{0X3FEFDF1F, 0XCF5CFB72} }, -/**/ {{0XBFB01EB3, 0XCE2AE4C2} }, -/**/ {{0XBFD4D29E, 0XDD58A40D} }, -/**/ {{0X3FAFDA4A, 0XD907A18A} }, -/**/ {{0X3FC814DF, 0X4DF65B18} } }, -/**/ {{{0X3FB0FFFD, 0XB9B88CD8} }, -/**/ {{0X3FB0F99C, 0X63645300} }, -/**/ {{0X3FEFDC08, 0XA3DED30F} }, -/**/ {{0XBFB0D9DC, 0X669C1AED} }, -/**/ {{0XBFD4C669, 0XF7138DE2} }, -/**/ {{0X3FB0A12F, 0X29D085A7} }, -/**/ {{0X3FC7F0EE, 0XCFD48D20} } }, -/**/ {{{0X3FB1FFF1, 0X5A73D4F1} }, -/**/ {{0X3FB1F85F, 0X2BEE2040} }, -/**/ {{0X3FEFD7B3, 0X42B56D31} }, -/**/ {{0XBFB1D2B7, 0XB69DEA40} }, -/**/ {{0XBFD4B552, 0X3922ECC9} }, -/**/ {{0X3FB18F93, 0X522B1A04} }, -/**/ {{0X3FC7BEAD, 0X5660F061} } }, -/**/ {{{0X3FB2FFFD, 0XB2524AA2} }, -/**/ {{0X3FB2F716, 0XE71790A0} }, -/**/ {{0X3FEFD31F, 0X53B496A4} }, -/**/ {{0XBFB2CAD8, 0X4AAB7374} }, -/**/ {{0XBFD4A34B, 0X58DD2FB2} }, -/**/ {{0X3FB27C0A, 0XD0CECC18} }, -/**/ {{0X3FC789D2, 0X5D2743D7} } }, -/**/ {{{0X3FB3FFFE, 0X0573F3AC} }, -/**/ {{0X3FB3F59D, 0X1702F6A0} }, -/**/ {{0X3FEFCE4D, 0XB071ACC2} }, -/**/ {{0XBFB3C20F, 0X64DB3686} }, -/**/ {{0XBFD49059, 0XEB3BFE93} }, -/**/ {{0X3FB36659, 0XCAF74FED} }, -/**/ {{0X3FC75269, 0X1C011FB0} } }, -/**/ {{{0X3FB4FFEF, 0X894384D6} }, -/**/ {{0X3FB4F3ED, 0X0CE204C0} }, -/**/ {{0X3FEFC93E, 0XA8EA5A01} }, -/**/ {{0XBFB4B84F, 0X7B5457C9} }, -/**/ {{0XBFD47C80, 0X7401F2F9} }, -/**/ {{0X3FB44E64, 0XB4F67209} }, -/**/ {{0X3FC7187D, 0X4C540B77} } }, -/**/ {{{0X3FB5FFF8, 0XDF406528} }, -/**/ {{0X3FB5F22B, 0X3C73D820} }, -/**/ {{0X3FEFC3F1, 0XB1F60F13} }, -/**/ {{0XBFB5ADB2, 0XCB7FA73B} }, -/**/ {{0XBFD467BE, 0X2B1EB555} }, -/**/ {{0X3FB53435, 0X99EDC463} }, -/**/ {{0X3FC6DC1B, 0X238F5059} } }, -/**/ {{{0X3FB7000F, 0X8C4F0D56} }, -/**/ {{0X3FB6F04B, 0X495A2FA0} }, -/**/ {{0X3FEFBE67, 0X340DCE97} }, -/**/ {{0XBFB6A224, 0X4D98E1AD} }, -/**/ {{0XBFD45216, 0X14064DF1} }, -/**/ {{0X3FB617AA, 0X2BA78A66} }, -/**/ {{0X3FC69D4F, 0X50A3D7AC} } }, -/**/ {{{0X3FB8000F, 0XBB4057CF} }, -/**/ {{0X3FB7EE27, 0XBE2CD3A0} }, -/**/ {{0X3FEFB8A0, 0X39EC9246} }, -/**/ {{0XBFB79577, 0X31D9C773} }, -/**/ {{0XBFD43B8D, 0XB6DC7D72} }, -/**/ {{0X3FB6F88A, 0XD69547DF} }, -/**/ {{0X3FC65C26, 0XF633CE8C} } }, -/**/ {{{0X3FB8FFF2, 0X39CF2B7F} }, -/**/ {{0X3FB8EBB7, 0X9F979E80} }, -/**/ {{0X3FEFB29D, 0X435506E1} }, -/**/ {{0XBFB8879A, 0X69B9CDB5} }, -/**/ {{0XBFD42428, 0X85FEAFA9} }, -/**/ {{0X3FB7D6BA, 0XB6191A0E} }, -/**/ {{0X3FC618AF, 0XA7CB8BB5} } }, -/**/ {{{0X3FB9FFF9, 0X6E2F0772} }, -/**/ {{0X3FB9E93A, 0XD32A9480} }, -/**/ {{0X3FEFAC5D, 0X04A3EC40} }, -/**/ {{0XBFB978C2, 0X53F6EA97} }, -/**/ {{0XBFD40BE3, 0X089C36F6} }, -/**/ {{0X3FB8B25C, 0X885AEB77} }, -/**/ {{0X3FC5D2F7, 0X63CADCE1} } }, -/**/ {{{0X3FBB0002, 0X6316B097} }, -/**/ {{0X3FBAE68C, 0XCE24CC00} }, -/**/ {{0X3FEFA5E0, 0X938C5C66} }, -/**/ {{0XBFBA68C3, 0X76F14E4B} }, -/**/ {{0XBFD3F2C3, 0X1696CD7C} }, -/**/ {{0X3FB98B3B, 0X722A2CB4} }, -/**/ {{0X3FC58B0C, 0X9067AD62} } }, -/**/ {{{0X3FBC0008, 0X604F58B1} }, -/**/ {{0X3FBBE3A7, 0X05650780} }, -/**/ {{0X3FEF9F28, 0X5A7A2773} }, -/**/ {{0XBFBB578F, 0X3D5AC0A4} }, -/**/ {{0XBFD3D8CB, 0XF767119F} }, -/**/ {{0X3FBA613D, 0XC7E31B88} }, -/**/ {{0X3FC540FD, 0XF5594565} } }, -/**/ {{{0X3FBD0002, 0X6CCA4EBA} }, -/**/ {{0X3FBCE07E, 0XC1298A80} }, -/**/ {{0X3FEF9834, 0XE8D36C4A} }, -/**/ {{0XBFBC4513, 0X5BCAC5FE} }, -/**/ {{0XBFD3BE01, 0X8B5236F1} }, -/**/ {{0X3FBB3447, 0X2E991970} }, -/**/ {{0X3FC4F4DA, 0XB8ADB373} } }, -/**/ {{{0X3FBDFFF4, 0XB2B47FCA} }, -/**/ {{0X3FBDDD16, 0X4A051D80} }, -/**/ {{0X3FEF9106, 0X78DCC895} }, -/**/ {{0XBFBD3149, 0XF0966844} }, -/**/ {{0XBFD3A266, 0X744F9A5F} }, -/**/ {{0X3FBC0446, 0XEDB7F27A} }, -/**/ {{0X3FC4A6B2, 0X583F9ECA} } }, -/**/ {{{0X3FBF000A, 0XA9A05BE0} }, -/**/ {{0X3FBED996, 0XA3BDA540} }, -/**/ {{0X3FEF899C, 0X1B8BA97F} }, -/**/ {{0XBFBE1C51, 0X2287A677} }, -/**/ {{0XBFD385F8, 0XEDC130BB} }, -/**/ {{0X3FBCD14B, 0XF306FF50} }, -/**/ {{0X3FC45694, 0XA667A72B} } }, -/**/ {{{0X3FBFFFFA, 0XBA8F63DE} }, -/**/ {{0X3FBFD5B5, 0X69FE4780} }, -/**/ {{0X3FEF81F8, 0X4863DC7D} }, -/**/ {{0XBFBF05DB, 0XD1518706} }, -/**/ {{0XBFD368C4, 0X4687A69C} }, -/**/ {{0X3FBD9B08, 0X1B3868DA} }, -/**/ {{0X3FC40491, 0XC345ADFC} } }, -/**/ {{{0X3FC07FFA, 0X6ECCADA8} }, -/**/ {{0X3FC068D0, 0X0A396400} }, -/**/ {{0X3FEF7A19, 0XF1FCFC6B} }, -/**/ {{0XBFBFEE0C, 0X861DF0DF} }, -/**/ {{0XBFD34AC6, 0X5A586C0C} }, -/**/ {{0X3FBE618F, 0X189D637A} }, -/**/ {{0X3FC3B0BA, 0X195779D4} } }, -/**/ {{{0X3FC10003, 0X33432713} }, -/**/ {{0X3FC0E6B0, 0XF203D1A0} }, -/**/ {{0X3FEF7200, 0XFE0EB463} }, -/**/ {{0XBFC06A72, 0XE15CB19A} }, -/**/ {{0XBFD32C00, 0XB8DB761E} }, -/**/ {{0X3FBF24D8, 0XA11F5E3E} }, -/**/ {{0X3FC35B1E, 0X569E85DD} } }, -/**/ {{{0X3FC17FFC, 0XDA1C4811} }, -/**/ {{0X3FC16462, 0X29EBDA00} }, -/**/ {{0X3FEF69AF, 0X7D558737} }, -/**/ {{0XBFC0DD17, 0X0B33969B} }, -/**/ {{0XBFD30C7D, 0X33AC50D1} }, -/**/ {{0X3FBFE4AA, 0X9BE43F0F} }, -/**/ {{0X3FC303CF, 0X692539CB} } }, -/**/ {{{0X3FC1FFFF, 0X3CCA418D} }, -/**/ {{0X3FC1E1FA, 0X3B978EA0} }, -/**/ {{0X3FEF6124, 0X45D421A9} }, -/**/ {{0XBFC14F03, 0XACAC8AA8} }, -/**/ {{0XBFD2EC39, 0X62E675A3} }, -/**/ {{0X3FC0508C, 0X2FA6B426} }, -/**/ {{0X3FC2AADE, 0X780A6467} } }, -/**/ {{{0X3FC27FF7, 0XD9C78922} }, -/**/ {{0X3FC25F66, 0X1B91E640} }, -/**/ {{0X3FEF5860, 0XF52E192C} }, -/**/ {{0XBFC1C023, 0XE5DE2394} }, -/**/ {{0XBFD2CB3D, 0X6BEE0ABD} }, -/**/ {{0X3FC0ACFB, 0X5E075C1A} }, -/**/ {{0X3FC2505C, 0XDFFE453A} } }, -/**/ {{{0X3FC2FFF7, 0XA1FC1AAA} }, -/**/ {{0X3FC2DCB5, 0X83257C40} }, -/**/ {{0X3FEF4F64, 0XC719B6FB} }, -/**/ {{0XBFC23082, 0X61514083} }, -/**/ {{0XBFD2A988, 0X7F7B72D5} }, -/**/ {{0X3FC107A7, 0X7C887402} }, -/**/ {{0X3FC1F45C, 0X2C3CD6D1} } }, -/**/ {{{0X3FC38005, 0X9D78E15E} }, -/**/ {{0X3FC359EE, 0X6AC98EE0} }, -/**/ {{0X3FEF462F, 0X944CEC16} }, -/**/ {{0XBFC2A020, 0XD85B87A9} }, -/**/ {{0XBFD2871C, 0X2E4AB369} }, -/**/ {{0X3FC1608D, 0XC31A65D9} }, -/**/ {{0X3FC196EE, 0X130BBE50} } }, -/**/ {{{0X3FC40004, 0X9F431B1A} }, -/**/ {{0X3FC3D6F3, 0X6BD65360} }, -/**/ {{0X3FEF3CC3, 0XDD99B68A} }, -/**/ {{0XBFC30EE1, 0XB3DD00ED} }, -/**/ {{0XBFD26403, 0XF8482664} }, -/**/ {{0X3FC1B792, 0XFE136626} }, -/**/ {{0X3FC13824, 0X6EAC7440} } }, -/**/ {{{0X3FC48004, 0XE01D95A1} }, -/**/ {{0X3FC453D3, 0X86F00CC0} }, -/**/ {{0X3FEF3320, 0XE3970539} }, -/**/ {{0XBFC37CCF, 0X0A5279AA} }, -/**/ {{0XBFD2403F, 0X3B151D5D} }, -/**/ {{0X3FC20CBB, 0XE331C9E6} }, -/**/ {{0X3FC0D811, 0X39E3F097} } }, -/**/ {{{0X3FC4FFF7, 0XAA9382DD} }, -/**/ {{0X3FC4D07F, 0X8C590A80} }, -/**/ {{0X3FEF2948, 0X34DF28E0} }, -/**/ {{0XBFC3E9D8, 0X5B43915C} }, -/**/ {{0XBFD21BD5, 0XEB8845A2} }, -/**/ {{0X3FC25FF8, 0XAC6AC8AD} }, -/**/ {{0X3FC076C6, 0X88ED96CA} } }, -/**/ {{{0X3FC58006, 0X352408BE} }, -/**/ {{0X3FC54D1E, 0XC39A73E0} }, -/**/ {{0X3FEF1F37, 0X09AE009C} }, -/**/ {{0XBFC4561C, 0XB9BE8550} }, -/**/ {{0XBFD1F6C0, 0X0053F52E} }, -/**/ {{0X3FC2B15D, 0XEF783BE9} }, -/**/ {{0X3FC01456, 0X8615239B} } }, -/**/ {{{0X3FC5FFFF, 0X2B193F81} }, -/**/ {{0X3FC5C980, 0X4F73E000} }, -/**/ {{0X3FEF14F1, 0XAE110E29} }, -/**/ {{0XBFC4C16E, 0X9098B3D2} }, -/**/ {{0XBFD1D10F, 0X8F058241} }, -/**/ {{0X3FC300C6, 0XA14FA897} }, -/**/ {{0X3FBF61A6, 0XD56607C0} } }, -/**/ {{{0X3FC68008, 0X4460E6E1} }, -/**/ {{0X3FC645C8, 0X04A55E20} }, -/**/ {{0X3FEF0A75, 0X8FA36EC5} }, -/**/ {{0XBFC52BE9, 0XD62FA883} }, -/**/ {{0XBFD1AABD, 0X69A74048} }, -/**/ {{0X3FC34E45, 0X1679EB02} }, -/**/ {{0X3FBE989E, 0XF7C14C3D} } }, -/**/ {{{0X3FC6FFFB, 0X9E99A846} }, -/**/ {{0X3FC6C1D0, 0X4B35FD40} }, -/**/ {{0X3FEEFFC6, 0X3EF8EF95} }, -/**/ {{0XBFC5956B, 0X76A2FE63} }, -/**/ {{0XBFD183D8, 0XDDC78DDF} }, -/**/ {{0X3FC399BD, 0XAC606D66} }, -/**/ {{0X3FBDCDBA, 0X070D286A} } }, -/**/ {{{0X3FC78008, 0X0FFCD490} }, -/**/ {{0X3FC73DC5, 0XB55758E0} }, -/**/ {{0X3FEEF4E0, 0X457E2065} }, -/**/ {{0XBFC5FE16, 0X7D6FF9BC} }, -/**/ {{0XBFD15C57, 0X9FADD384} }, -/**/ {{0X3FC3E347, 0X73E52D32} }, -/**/ {{0X3FBD011C, 0X9A65AE4B} } }, -/**/ {{{0X3FC80006, 0X148E79C1} }, -/**/ {{0X3FC7B981, 0X2B7F8CA0} }, -/**/ {{0X3FEEE9C7, 0X701687ED} }, -/**/ {{0XBFC665C7, 0X0E1EF36D} }, -/**/ {{0XBFD13449, 0XCCBCBDAB} }, -/**/ {{0X3FC42AC7, 0X5C71B3E8} }, -/**/ {{0X3FBC32EB, 0X3E81980E} } }, -/**/ {{{0X3FC88006, 0X0F487C17} }, -/**/ {{0X3FC83511, 0XBC0E3640} }, -/**/ {{0X3FEEDE7A, 0XD2D55329} }, -/**/ {{0XBFC6CC87, 0X37E644BA} }, -/**/ {{0XBFD10BAE, 0X60597557} }, -/**/ {{0X3FC47043, 0X13E26FBE} }, -/**/ {{0X3FBB634A, 0X6FB18BF4} } }, -/**/ {{{0X3FC90004, 0XD3518D76} }, -/**/ {{0X3FC8B073, 0X8874C100} }, -/**/ {{0X3FEED2FB, 0X2ED6673B} }, -/**/ {{0XBFC73251, 0X2A6EBAC3} }, -/**/ {{0XBFD0E28A, 0X6924232F} }, -/**/ {{0X3FC4B3B5, 0X73BCC03F} }, -/**/ {{0X3FBA925E, 0X8C72507F} } }, -/**/ {{{0X3FC97FFF, 0XD2F20D5C} }, -/**/ {{0X3FC92BA3, 0X51AF5920} }, -/**/ {{0X3FEEC749, 0X3D32449F} }, -/**/ {{0XBFC7971F, 0XC308255F} }, -/**/ {{0XBFD0B8E2, 0XD572D28F} }, -/**/ {{0X3FC4F51A, 0X337448FE} }, -/**/ {{0X3FB9C04B, 0XCFCBC620} } }, -/**/ {{{0X3FCA0005, 0XBF80F060} }, -/**/ {{0X3FC9A6AE, 0X6E9E8960} }, -/**/ {{0X3FEEBB64, 0X1EF200E7} }, -/**/ {{0XBFC7FAFB, 0X6E96E5C1} }, -/**/ {{0XBFD08EB6, 0XEC6AD647} }, -/**/ {{0X3FC53475, 0XF53D0BA6} }, -/**/ {{0X3FB8ED36, 0X4433C20E} } }, -/**/ {{{0X3FCA7FF7, 0XDEECA8E4} }, -/**/ {{0X3FCA2176, 0X948578E0} }, -/**/ {{0X3FEEAF4F, 0X328FF98B} }, -/**/ {{0XBFC85DC9, 0X58149B1C} }, -/**/ {{0XBFD06414, 0XF933A1AB} }, -/**/ {{0X3FC571B7, 0X60C45A8F} }, -/**/ {{0X3FB81941, 0XBE58C308} } }, -/**/ {{{0X3FCAFFFF, 0X7DEFD553} }, -/**/ {{0X3FCA9C22, 0X9EBA6B80} }, -/**/ {{0X3FEEA307, 0X10A85E10} }, -/**/ {{0XBFC8BFA6, 0X7F9DEA61} }, -/**/ {{0XBFD038F3, 0X5A474E8F} }, -/**/ {{0X3FC5ACF0, 0X30C225D2} }, -/**/ {{0X3FB74491, 0XD062812F} } }, -/**/ {{{0X3FCB7FFE, 0X669932A5} }, -/**/ {{0X3FCB1694, 0XCFF6DFE0} }, -/**/ {{0X3FEE968F, 0X1921D387} }, -/**/ {{0XBFC92078, 0XE075D95A} }, -/**/ {{0XBFD00D60, 0X526793C4} }, -/**/ {{0X3FC5E610, 0X73842A52} }, -/**/ {{0X3FB66F49, 0XC5331D5A} } }, -/**/ {{{0X3FCBFFF9, 0XB44759F3} }, -/**/ {{0X3FCB90D1, 0X5073A2A0} }, -/**/ {{0X3FEE89E7, 0X56598313} }, -/**/ {{0XBFC98041, 0XCFB9203D} }, -/**/ {{0XBFCFC2BC, 0XBED91B37} }, -/**/ {{0X3FC61D19, 0X6D4FC2FC} }, -/**/ {{0X3FB5998C, 0X9411537E} } }, -/**/ {{{0X3FCC8007, 0X5568F3EC} }, -/**/ {{0X3FCC0AEC, 0X4A31DBE0} }, -/**/ {{0X3FEE7D0E, 0X18F270A8} }, -/**/ {{0XBFC9DF0E, 0XF522B132} }, -/**/ {{0XBFCF69D4, 0X2179C242} }, -/**/ {{0X3FC65213, 0X36646FCD} }, -/**/ {{0X3FB4C37C, 0XDC699095} } }, -/**/ {{{0X3FCCFFF8, 0X601A799F} }, -/**/ {{0X3FCC84B8, 0X49DB66A0} }, -/**/ {{0X3FEE7008, 0XA0EE780E} }, -/**/ {{0XBFCA3CBB, 0X3A403934} }, -/**/ {{0XBFCF102F, 0XD490BE32} }, -/**/ {{0X3FC684EA, 0X037D4137} }, -/**/ {{0X3FB3ED3C, 0XD9EC855A} } }, -/**/ {{{0X3FCD7FF9, 0X7BBF1497} }, -/**/ {{0X3FCCFE5F, 0X1E008CE0} }, -/**/ {{0X3FEE62D2, 0XF04615C7} }, -/**/ {{0XBFCA9965, 0X15AADE2C} }, -/**/ {{0XBFCEB5B9, 0X0B44B682} }, -/**/ {{0X3FC6B5AF, 0X92EC8D57} }, -/**/ {{0X3FB316EE, 0X60D831AE} } }, -/**/ {{{0X3FCE0008, 0X40209B20} }, -/**/ {{0X3FCD77DD, 0XB145A760} }, -/**/ {{0X3FEE556D, 0XBE1DFDF1} }, -/**/ {{0XBFCAF508, 0X2186AF0F} }, -/**/ {{0XBFCE5A79, 0X9420489D} }, -/**/ {{0X3FC6E462, 0X454FEB2C} }, -/**/ {{0X3FB240B2, 0XD2945A8C} } }, -/**/ {{{0X3FCE8000, 0XC0AE943C} }, -/**/ {{0X3FCDF111, 0X3CA10100} }, -/**/ {{0X3FEE47DD, 0X59E7308B} }, -/**/ {{0XBFCB4F88, 0X9439F69F} }, -/**/ {{0XBFCDFE93, 0X798DE600} }, -/**/ {{0X3FC710F5, 0X8F267389} }, -/**/ {{0X3FB16AAB, 0X1A8A373E} } }, -/**/ {{{0X3FCF0003, 0X6D532803} }, -/**/ {{0X3FCE6A17, 0XCB4E5C80} }, -/**/ {{0X3FEE3A1E, 0XE3D0F6C2} }, -/**/ {{0XBFCBA8FB, 0X6E31F768} }, -/**/ {{0XBFCDA1F7, 0XE6A382E3} }, -/**/ {{0X3FC73B75, 0XB36AC4C0} }, -/**/ {{0X3FB094F7, 0XA3470B0A} } }, -/**/ {{{0X3FCF7FFA, 0X48B8AFC3} }, -/**/ {{0X3FCEE2DB, 0XE1654560} }, -/**/ {{0X3FEE2C35, 0X43F2AB37} }, -/**/ {{0XBFCC014F, 0X598207D6} }, -/**/ {{0XBFCD44BF, 0X1EFE809A} }, -/**/ {{0X3FC763DC, 0X698A561E} }, -/**/ {{0X3FAF7F70, 0XA7CF78A3} } }, -/**/ {{{0X3FD00002, 0XEB334FAE} }, -/**/ {{0X3FCF5B7B, 0X77AB25E0} }, -/**/ {{0X3FEE1E1D, 0X78A5C127} }, -/**/ {{0XBFCC5898, 0XC555D571} }, -/**/ {{0XBFCCE6D9, 0XB706CF86} }, -/**/ {{0X3FC78A35, 0X0823F643} }, -/**/ {{0X3FADD619, 0X0B9118E8} } }, -/**/ {{{0X3FD03FFC, 0XA8AF86FE} }, -/**/ {{0X3FCFD3CB, 0XB53A0C00} }, -/**/ {{0X3FEE0FDC, 0XFDCBAC8B} }, -/**/ {{0XBFCCAEB7, 0X6C3246FF} }, -/**/ {{0XBFCC8870, 0XD6E19AD3} }, -/**/ {{0X3FC7AE73, 0XD2C48E91} }, -/**/ {{0X3FAC2E26, 0X0510FDB0} } }, -/**/ {{{0X3FD07FFC, 0XD38984B7} }, -/**/ {{0X3FD025F7, 0X5732D4A0} }, -/**/ {{0X3FEE0170, 0X49C17AB3} }, -/**/ {{0XBFCD03C2, 0X9AFE5028} }, -/**/ {{0XBFCC2971, 0X9A2C1833} }, -/**/ {{0X3FC7D0A5, 0X69041DCF} }, -/**/ {{0X3FAA87D3, 0XF497C653} } }, -/**/ {{{0X3FD0BFFF, 0X1ED2ADD7} }, -/**/ {{0X3FD061ED, 0XCD7F7420} }, -/**/ {{0X3FEDF2D8, 0XDA96B750} }, -/**/ {{0XBFCD57B2, 0XC777881E} }, -/**/ {{0XBFCBC9EA, 0X8692B503} }, -/**/ {{0X3FC7F0C9, 0X42ABF9E7} }, -/**/ {{0X3FA8E35E, 0X04B42BB4} } }, -/**/ {{{0X3FD10003, 0XA8515CDA} }, -/**/ {{0X3FD09DC9, 0X027416A0} }, -/**/ {{0X3FEDE417, 0X34899950} }, -/**/ {{0XBFCDAA86, 0X7983EDE4} }, -/**/ {{0XBFCB69E3, 0X999706B6} }, -/**/ {{0X3FC80EE1, 0XB0F126DB} }, -/**/ {{0X3FA740FE, 0X17EE9BAB} } }, -/**/ {{{0X3FD14001, 0XF3AF9CC5} }, -/**/ {{0X3FD0D980, 0XB6E1ABA0} }, -/**/ {{0X3FEDD52D, 0XE0412681} }, -/**/ {{0XBFCDFC31, 0X6863B28B} }, -/**/ {{0XBFCB0971, 0XC55B8D5A} }, -/**/ {{0X3FC82AED, 0XA6731AAC} }, -/**/ {{0X3FA5A0EC, 0XC73BD8F0} } }, -/**/ {{{0X3FD18003, 0XB6122509} }, -/**/ {{0X3FD1151D, 0XAA1E67A0} }, -/**/ {{0X3FEDC61B, 0X2E0C1F32} }, -/**/ {{0XBFCE4CBE, 0XB9BA6B7E} }, -/**/ {{0XBFCAA88E, 0X90C2431C} }, -/**/ {{0X3FC844F4, 0X8BCBDA5E} }, -/**/ {{0X3FA40361, 0X50E585FF} } }, -/**/ {{{0X3FD1BFFF, 0XA6A2A153} }, -/**/ {{0X3FD15096, 0XE7A18DC0} }, -/**/ {{0X3FEDB6E1, 0XE1218F3F} }, -/**/ {{0XBFCE9C21, 0X9621D6A2} }, -/**/ {{0XBFCA4750, 0X22627B04} }, -/**/ {{0X3FC85CF5, 0XFF8B908E} }, -/**/ {{0X3FA26891, 0X9833C0D6} } }, -/**/ {{{0X3FD1FFFD, 0X2D345AAF} }, -/**/ {{0X3FD18BF3, 0X053BF760} }, -/**/ {{0X3FEDA780, 0XCC3ACB29} }, -/**/ {{0XBFCEEA62, 0X2AA756AE} }, -/**/ {{0XBFC9E5B3, 0X47ED9793} }, -/**/ {{0X3FC872F8, 0X87AB542A} }, -/**/ {{0X3FA0D0B2, 0X158E9E9A} } }, -/**/ {{{0X3FD23FFC, 0XF14CF05A} }, -/**/ {{0X3FD1C732, 0X4D568460} }, -/**/ {{0X3FED97F8, 0X55F32D3D} }, -/**/ {{0XBFCF3780, 0X21D457C8} }, -/**/ {{0XBFC983BE, 0XF065B845} }, -/**/ {{0X3FC886FF, 0XFBA70CD8} }, -/**/ {{0X3F9E77EB, 0XAEB85CCC} } }, -/**/ {{{0X3FD27FFE, 0X0BAE6FC9} }, -/**/ {{0X3FD20253, 0X9A27C160} }, -/**/ {{0X3FED8849, 0X4619176E} }, -/**/ {{0XBFCF8379, 0X5C0AC9EC} }, -/**/ {{0XBFC9217C, 0X5E645195} }, -/**/ {{0X3FC8990F, 0XF4264515} }, -/**/ {{0X3F9B551C, 0XE6B92E65} } }, -/**/ {{{0X3FD2C001, 0XA297A7DE} }, -/**/ {{0X3FD23D57, 0XACB927C0} }, -/**/ {{0X3FED7873, 0XE4958FB6} }, -/**/ {{0XBFCFCE4E, 0X43572249} }, -/**/ {{0XBFC8BEF1, 0X9F3560F3} }, -/**/ {{0X3FC8A92C, 0XDF7F0E5B} }, -/**/ {{0X3F983958, 0X116F3B19} } }, -/**/ {{{0X3FD2FFFE, 0X7267616A} }, -/**/ {{0X3FD27835, 0XB2F378C0} }, -/**/ {{0X3FED687B, 0X13906586} }, -/**/ {{0XBFD00BF9, 0XAFDA1A0F} }, -/**/ {{0XBFC85C34, 0XC197AD7D} }, -/**/ {{0X3FC8B759, 0X1E99F0A7} }, -/**/ {{0X3F9524FA, 0X6525C365} } }, -/**/ {{{0X3FD33FFE, 0X48153B20} }, -/**/ {{0X3FD2B2F6, 0X6A2FDCC0} }, -/**/ {{0X3FED585C, 0XF827FBE4} }, -/**/ {{0XBFD03039, 0XB45A6918} }, -/**/ {{0XBFC7F93E, 0X5DFC3F72} }, -/**/ {{0X3FC8C39B, 0XC5210022} }, -/**/ {{0X3F92185E, 0X168FB62E} } }, -/**/ {{{0X3FD38003, 0X8122579A} }, -/**/ {{0X3FD2ED9B, 0XAF6EC1E0} }, -/**/ {{0X3FED4819, 0X872F20D3} }, -/**/ {{0XBFD053E8, 0X1F4C1031} }, -/**/ {{0XBFC79612, 0X621FFD79} }, -/**/ {{0X3FC8CDF9, 0XDB9D9DFC} }, -/**/ {{0X3F8E27B4, 0X80C6852F} } }, -/**/ {{{0X3FD3C003, 0X3EF39141} }, -/**/ {{0X3FD3281B, 0X4668C700} }, -/**/ {{0X3FED37B4, 0X18590D1A} }, -/**/ {{0XBFD076FE, 0XA3EF2560} }, -/**/ {{0XBFC732C9, 0X3033287A} }, -/**/ {{0X3FC8D676, 0XCA2E5458} }, -/**/ {{0X3F882F85, 0XD80944B1} } }, -/**/ {{{0X3FD40001, 0X63FA0E31} }, -/**/ {{0X3FD36278, 0X7B565000} }, -/**/ {{0X3FED272C, 0X47A813DA} }, -/**/ {{0XBFD0997F, 0X493B9D88} }, -/**/ {{0XBFC6CF64, 0X3DA9FE3C} }, -/**/ {{0X3FC8DD18, 0XC1CD3331} }, -/**/ {{0X3F8248D1, 0XF70F6E07} } }, -/**/ {{{0X3FD44003, 0X74071092} }, -/**/ {{0X3FD39CB8, 0X0F0A4000} }, -/**/ {{0X3FED1681, 0X3BA47A6B} }, -/**/ {{0XBFD0BB6C, 0XD8788947} }, -/**/ {{0XBFC66BE2, 0X589596A6} }, -/**/ {{0X3FC8E1E5, 0XC9B3EC1E} }, -/**/ {{0X3F78E868, 0XD20FAB86} } }, -/**/ {{{0X3FD48000, 0XC880F200} }, -/**/ {{0X3FD3D6D1, 0XDEFFB460} }, -/**/ {{0X3FED05B5, 0XCADC576C} }, -/**/ {{0XBFD0DCC2, 0XA1D352C2} }, -/**/ {{0XBFC60858, 0X3D7D2574} }, -/**/ {{0X3FC8E4E3, 0X03208BC0} }, -/**/ {{0X3F6AC909, 0X6379E732} } }, -/**/ {{{0X3FD4C000, 0X4D97D2CB} }, -/**/ {{0X3FD410CB, 0XF3A2E220} }, -/**/ {{0X3FECF4C8, 0XBB7ED511} }, -/**/ {{0XBFD0FD84, 0X37766A49} }, -/**/ {{0XBFC5A4C2, 0X5AABC13C} }, -/**/ {{0X3FC8E616, 0XC80DAC4B} }, -/**/ {{0X3F4038AA, 0XB04695C2} } }, -/**/ {{{0X3FD4FFFD, 0X9397539F} }, -/**/ {{0X3FD44AA2, 0X06A7DEC0} }, -/**/ {{0X3FECE3BB, 0XCF479DDE} }, -/**/ {{0XBFD11DAF, 0X4D122984} }, -/**/ {{0XBFC5412E, 0XB1024DF0} }, -/**/ {{0X3FC8E587, 0X1B2C560D} }, -/**/ {{0XBF625DA8, 0X951C088D} } }, -/**/ {{{0X3FD53FFF, 0XF304715F} }, -/**/ {{0X3FD4845A, 0X791F3900} }, -/**/ {{0X3FECD28D, 0XA45E0FD8} }, -/**/ {{0XBFD13D47, 0X8D61F221} }, -/**/ {{0XBFC4DD98, 0XD3E9BB99} }, -/**/ {{0X3FC8E33A, 0X0F181507} }, -/**/ {{0XBF743C33, 0XD08BD25C} } }, -/**/ {{{0X3FD58002, 0XE88EA386} }, -/**/ {{0X3FD4BDF0, 0XF575D6C0} }, -/**/ {{0X3FECC140, 0X02035609} }, -/**/ {{0XBFD15C4A, 0XB808071E} }, -/**/ {{0XBFC47A0E, 0XB2945FCF} }, -/**/ {{0X3FC8DF35, 0XFC056447} }, -/**/ {{0XBF7F2011, 0XB00A45CD} } }, -/**/ {{{0X3FD5BFFD, 0X70F4D590} }, -/**/ {{0X3FD4F75D, 0X284D7AE0} }, -/**/ {{0X3FECAFD5, 0XF2DE98B6} }, -/**/ {{0XBFD17AB4, 0XA2B42F42} }, -/**/ {{0XBFC416A5, 0X1C285A92} }, -/**/ {{0X3FC8D982, 0X511D6C5A} }, -/**/ {{0XBF84ECC1, 0X77008605} } }, -/**/ {{{0X3FD5FFFD, 0XB70D6E53} }, -/**/ {{0X3FD530AB, 0X8E2FF500} }, -/**/ {{0X3FEC9E4C, 0X32D2429D} }, -/**/ {{0XBFD1988C, 0X35190681} }, -/**/ {{0XBFC3B34C, 0XBF748319} }, -/**/ {{0X3FC8D224, 0X98D3A613} }, -/**/ {{0XBF8A33D4, 0XAA295F9F} } }, -/**/ {{{0X3FD63FFC, 0X5C7399E2} }, -/**/ {{0X3FD569D5, 0X4F022E80} }, -/**/ {{0X3FEC8CA5, 0X58DD180F} }, -/**/ {{0XBFD1B5CE, 0X1D701DE4} }, -/**/ {{0XBFC35017, 0XA7806A5A} }, -/**/ {{0X3FC8C924, 0X56C01CF9} }, -/**/ {{0XBF8F64D9, 0X942059E1} } }, -/**/ {{{0X3FD67FFD, 0X9A1AC7D2} }, -/**/ {{0X3FD5A2DD, 0XF50031E0} }, -/**/ {{0X3FEC7AE0, 0XCEFF6DEB} }, -/**/ {{0XBFD1D27C, 0X7C8C245B} }, -/**/ {{0XBFC2ED05, 0XC6AA933F} }, -/**/ {{0X3FC8BE87, 0XDDC5CF1F} }, -/**/ {{0XBF923FB6, 0XD594386F} } }, -/**/ {{{0X3FD6BFFD, 0X6F7B9353} }, -/**/ {{0X3FD5DBC1, 0XB4E066C0} }, -/**/ {{0X3FEC6900, 0X456B591A} }, -/**/ {{0XBFD1EE95, 0XC2D6D0AA} }, -/**/ {{0XBFC28A23, 0XB11086F7} }, -/**/ {{0X3FC8B256, 0XDDE22D5A} }, -/**/ {{0XBF94C19A, 0X489D85A4} } }, -/**/ {{{0X3FD6FFFB, 0XF02A83E4} }, -/**/ {{0X3FD61480, 0X6A237DC0} }, -/**/ {{0X3FEC5704, 0X4CC81773} }, -/**/ {{0XBFD20A1A, 0X4B9029CA} }, -/**/ {{0XBFC22777, 0X89F5FB1C} }, -/**/ {{0X3FC8A498, 0X9B09E911} }, -/**/ {{0XBF9737EC, 0X130D419A} } }, -/**/ {{{0X3FD73FFE, 0X128C213A} }, -/**/ {{0X3FD64D1E, 0X42499480} }, -/**/ {{0X3FEC44EC, 0X129C0D30} }, -/**/ {{0XBFD2250C, 0X83787259} }, -/**/ {{0XBFC1C4FF, 0XD55BE4FC} }, -/**/ {{0X3FC89553, 0X36B2D603} }, -/**/ {{0XBF99A284, 0X2E43DF46} } }, -/**/ {{{0X3FD77FFB, 0XEA0CDC7A} }, -/**/ {{0X3FD68594, 0X05B0E220} }, -/**/ {{0X3FEC32BA, 0X687132C0} }, -/**/ {{0XBFD23F69, 0X7273497E} }, -/**/ {{0XBFC162CE, 0XCD39B037} }, -/**/ {{0X3FC8848F, 0XFA930AAF} }, -/**/ {{0XBF9C013D, 0XA4554412} } }, -/**/ {{{0X3FD7C003, 0XF18EDAB8} }, -/**/ {{0X3FD6BDEE, 0X4127BEE0} }, -/**/ {{0X3FEC206B, 0XC01607BD} }, -/**/ {{0XBFD25937, 0X5FEE2F42} }, -/**/ {{0XBFC100D4, 0X307761E1} }, -/**/ {{0X3FC87252, 0X5DFEC556} }, -/**/ {{0XBF9E53F6, 0X7958F973} } }, -/**/ {{{0X3FD7FFFD, 0X41F35C4C} }, -/**/ {{0X3FD6F616, 0XDA6607A0} }, -/**/ {{0X3FEC0E07, 0XCDDC8437} }, -/**/ {{0XBFD2726C, 0XBFB4DAEA} }, -/**/ {{0XBFC09F3B, 0XE0DB1472} }, -/**/ {{0X3FC85EA9, 0X2A95AA1B} }, -/**/ {{0XBFA04D47, 0XD872CFA2} } }, -/**/ {{{0X3FD84003, 0X26C7C46B} }, -/**/ {{0X3FD72E25, 0X96B8BE00} }, -/**/ {{0X3FEBFB87, 0X4CDEDF38} }, -/**/ {{0XBFD28B14, 0XD09404F3} }, -/**/ {{0XBFC03DE1, 0XE7FB61F2} }, -/**/ {{0X3FC84993, 0XACB33BE9} }, -/**/ {{0XBFA16A76, 0X9B1DE607} } }, -/**/ {{{0X3FD88003, 0XCA90B179} }, -/**/ {{0X3FD7660A, 0XA104A220} }, -/**/ {{0X3FEBE8EF, 0XF236E2F6} }, -/**/ {{0XBFD2A329, 0X19A94DDF} }, -/**/ {{0XBFBFB9CE, 0X0856A081} }, -/**/ {{0X3FC8331F, 0X33F70280} }, -/**/ {{0XBFA2817A, 0XF01308CC} } }, -/**/ {{{0X3FD8C003, 0XE9692FD5} }, -/**/ {{0X3FD79DC9, 0XF0B2CB00} }, -/**/ {{0X3FEBD640, 0XF2966495} }, -/**/ {{0XBFD2BAAB, 0XFD6EC2EA} }, -/**/ {{0XBFBEF892, 0XE08E9C2D} }, -/**/ {{0X3FC81B52, 0X031873E3} }, -/**/ {{0XBFA39249, 0XAC12113D} } }, -/**/ {{{0X3FD8FFFE, 0X35BE5C5F} }, -/**/ {{0X3FD7D55E, 0XBDCCDFC0} }, -/**/ {{0X3FEBC37C, 0X6EABCF77} }, -/**/ {{0XBFD2D19C, 0X2D74F445} }, -/**/ {{0XBFBE382C, 0XE63F2CDB} }, -/**/ {{0X3FC80236, 0X0E6FE2AE} }, -/**/ {{0XBFA49CD9, 0X0E66AB41} } }, -/**/ {{{0X3FD94002, 0XAA8974CD} }, -/**/ {{0X3FD80CD6, 0XB8AFD880} }, -/**/ {{0X3FEBB09E, 0X4468CCBA} }, -/**/ {{0XBFD2E7FF, 0XEC84E686} }, -/**/ {{0XBFBD7876, 0X88C659E8} }, -/**/ {{0X3FC7E7CC, 0XC2F15460} }, -/**/ {{0XBFA5A120, 0XB410D3ED} } }, -/**/ {{{0X3FD98002, 0XE08EFDEA} }, -/**/ {{0X3FD84425, 0X34856920} }, -/**/ {{0X3FEB9DAB, 0X3F290478} }, -/**/ {{0XBFD2FDD2, 0XBB81EDEF} }, -/**/ {{0XBFBCB9A5, 0X31E68398} }, -/**/ {{0X3FC7CC23, 0XC2DBB11B} }, -/**/ {{0XBFA69F19, 0X98467E78} } }, -/**/ {{{0X3FD9C002, 0X75294B6B} }, -/**/ {{0X3FD87B4D, 0X299F6200} }, -/**/ {{0X3FEB8AA2, 0XDE96CF1F} }, -/**/ {{0XBFD31316, 0X8C4D45D2} }, -/**/ {{0XBFBBFBB7, 0XEDCE4DBA} }, -/**/ {{0X3FC7AF41, 0X8907FEC9} }, -/**/ {{0XBFA796BE, 0X07419F55} } }, -/**/ {{{0X3FDA0002, 0XF3E490EC} }, -/**/ {{0X3FD8B24F, 0XC21A4500} }, -/**/ {{0X3FEB7785, 0X3B5EF7DD} }, -/**/ {{0XBFD327CC, 0X8EAE70CD} }, -/**/ {{0XBFBB3EB3, 0XD49E40DA} }, -/**/ {{0X3FC7912D, 0X4D93F7EA} }, -/**/ {{0XBFA88809, 0X9E21606A} } }, -/**/ {{{0X3FDA3FFF, 0X458461B6} }, -/**/ {{0X3FD8E928, 0X7754D2C0} }, -/**/ {{0X3FEB6454, 0X6A0DAF0E} }, -/**/ {{0XBFD33BF3, 0XDC2A9A3F} }, -/**/ {{0XBFBA82B1, 0X4917D003} }, -/**/ {{0X3FC771F1, 0X7C7566CF} }, -/**/ {{0XBFA972F9, 0X3D700DD8} } }, -/**/ {{{0X3FDA8002, 0X87E12AAE} }, -/**/ {{0X3FD91FE0, 0XA5DFD000} }, -/**/ {{0X3FEB510D, 0XA0D82E05} }, -/**/ {{0XBFD34F90, 0XA76AD312} }, -/**/ {{0XBFB9C798, 0XDEEC35AD} }, -/**/ {{0X3FC75190, 0X8A0EF43E} }, -/**/ {{0XBFAA578B, 0X0872EFC8} } }, -/**/ {{{0X3FDAC001, 0X49A86C84} }, -/**/ {{0X3FD9566E, 0X5C4516E0} }, -/**/ {{0X3FEB3DB4, 0XDD03F6B6} }, -/**/ {{0XBFD362A0, 0X291C1F82} }, -/**/ {{0XBFB90D95, 0X03F6DF60} }, -/**/ {{0X3FC73018, 0X25091E92} }, -/**/ {{0XBFAB35BE, 0X577A022B} } }, -/**/ {{{0X3FDAFFFF, 0X2F4CC2E1} }, -/**/ {{0X3FD98CD4, 0X94226540} }, -/**/ {{0X3FEB2A49, 0X9297200A} }, -/**/ {{0XBFD37524, 0X5153FD01} }, -/**/ {{0XBFB854A3, 0XAE3DE27E} }, -/**/ {{0X3FC70D8E, 0X7EB3F331} }, -/**/ {{0XBFAC0D93, 0XB6AD570E} } }, -/**/ {{{0X3FDB4000, 0XC2F3711E} }, -/**/ {{0X3FD9C317, 0X01CDC4C0} }, -/**/ {{0X3FEB16CA, 0XEA63781B} }, -/**/ {{0XBFD3871F, 0X3665B649} }, -/**/ {{0XBFB79CC0, 0X3F70FBC6} }, -/**/ {{0X3FC6E9F9, 0X061DFC2E} }, -/**/ {{0XBFACDF0C, 0XD837F9C3} } }, -/**/ {{{0X3FDB8000, 0XA777E180} }, -/**/ {{0X3FD9F930, 0XF3748F20} }, -/**/ {{0X3FEB033B, 0X0FB0162A} }, -/**/ {{0XBFD39890, 0X25978CAB} }, -/**/ {{0XBFB6E602, 0X5C765AAB} }, -/**/ {{0X3FC6C562, 0X9C16D678} }, -/**/ {{0XBFADAA2C, 0X92A16EBF} } }, -/**/ {{{0X3FDBBFFD, 0X087E14ED} }, -/**/ {{0X3FDA2F20, 0XBF0DDB00} }, -/**/ {{0X3FEAEF9B, 0X1CCE6E94} }, -/**/ {{0XBFD3A977, 0X8B73E3C3} }, -/**/ {{0XBFB63077, 0X09EFD1CC} }, -/**/ {{0X3FC69FD4, 0X58408D3A} }, -/**/ {{0XBFAE6EF6, 0XD2E48013} } }, -/**/ {{{0X3FDC0000, 0XF0086783} }, -/**/ {{0X3FDA64EF, 0X8D448080} }, -/**/ {{0X3FEADBE8, 0X35990B5A} }, -/**/ {{0XBFD3B9D9, 0X27241B86} }, -/**/ {{0XBFB57C06, 0XC20E4001} }, -/**/ {{0X3FC6794F, 0X90E6C8AB} }, -/**/ {{0XBFAF2D70, 0X9A630A27} } }, -/**/ {{{0X3FDC4001, 0X863E58F8} }, -/**/ {{0X3FDA9A94, 0X1C3A1BA0} }, -/**/ {{0X3FEAC826, 0X35ED7DD2} }, -/**/ {{0XBFD3C9B3, 0X0C075B50} }, -/**/ {{0XBFB4C8D7, 0XA429793C} }, -/**/ {{0X3FC651E2, 0X95903C22} }, -/**/ {{0XBFAFE59F, 0XF0F8B649} } }, -/**/ {{{0X3FDC7FFC, 0X6C62C3BF} }, -/**/ {{0X3FDAD00C, 0X580A5840} }, -/**/ {{0X3FEAB456, 0X62D1D808} }, -/**/ {{0XBFD3D905, 0XACBB06EC} }, -/**/ {{0XBFB416F7, 0X421E42DC} }, -/**/ {{0X3FC62996, 0XE5608EFD} }, -/**/ {{0XBFB04BC5, 0XF14B649A} } }, -/**/ {{{0X3FDCC002, 0X34B2A209} }, -/**/ {{0X3FDB0565, 0XF68F3B40} }, -/**/ {{0X3FEAA074, 0X1E3DC946} }, -/**/ {{0XBFD3E7D5, 0XE2DB674E} }, -/**/ {{0XBFB3663E, 0XA4833FFE} }, -/**/ {{0X3FC60069, 0XC4F0392B} }, -/**/ {{0XBFB0A19E, 0X38B10201} } }, -/**/ {{{0X3FDCFFFC, 0XAAC5F9F9} }, -/**/ {{0X3FDB3A8E, 0X59C45CC0} }, -/**/ {{0X3FEA8C86, 0XD2389C24} }, -/**/ {{0XBFD3F61F, 0X8362B2CB} }, -/**/ {{0XBFB2B6F1, 0XC6C746A6} }, -/**/ {{0X3FC5D671, 0X426D2946} }, -/**/ {{0XBFB0F45D, 0X4981CE75} } }, -/**/ {{{0X3FDD4004, 0X0D800C64} }, -/**/ {{0X3FDB6F99, 0X88AF6580} }, -/**/ {{0X3FEA7887, 0X7498CED2} }, -/**/ {{0XBFD403E8, 0XEF8975C0} }, -/**/ {{0XBFB208D4, 0XBEA81E2B} }, -/**/ {{0X3FC5ABA5, 0X283FFA4E} }, -/**/ {{0XBFB14408, 0X11705130} } }, -/**/ {{{0X3FDD7FFE, 0XB0E64500} }, -/**/ {{0X3FDBA472, 0X2324E140} }, -/**/ {{0X3FEA647E, 0X8C5AD680} }, -/**/ {{0XBFD4112D, 0XA03F042D} }, -/**/ {{0XBFB15C33, 0X9580389C} }, -/**/ {{0X3FC5801E, 0X49D9889E} }, -/**/ {{0XBFB190A3, 0XEF96554F} } }, -/**/ {{{0X3FDDBFFE, 0X2DFCF4EB} }, -/**/ {{0X3FDBD926, 0X9F1D27A0} }, -/**/ {{0X3FEA5067, 0X1AC286CA} }, -/**/ {{0XBFD41DF2, 0X590A4DE1} }, -/**/ {{0XBFB0B0E4, 0X8BD1EFA5} }, -/**/ {{0X3FC553D8, 0X702506D0} }, -/**/ {{0XBFB1DA36, 0XADA415A6} } }, -/**/ {{{0X3FDDFFFD, 0X8A34BBC2} }, -/**/ {{0X3FDC0DB2, 0XC4F7A2C0} }, -/**/ {{0X3FEA3C43, 0X2EF70BB3} }, -/**/ {{0XBFD42A37, 0X16EE647C} }, -/**/ {{0XBFB006FA, 0XDB6270BB} }, -/**/ {{0X3FC526DE, 0X86F08DE6} }, -/**/ {{0XBFB220C6, 0X7E5061FB} } }, -/**/ {{{0X3FDE3FFD, 0XD26415C0} }, -/**/ {{0X3FDC4217, 0X58282940} }, -/**/ {{0X3FEA2812, 0XF391DDCB} }, -/**/ {{0XBFD435FD, 0X18EDDF0A} }, -/**/ {{0XBFAEBCF2, 0X88A589AF} }, -/**/ {{0X3FC4F937, 0X4CF96163} }, -/**/ {{0XBFB26459, 0XF6A18481} } }, -/**/ {{{0X3FDE7FFF, 0X37F72672} }, -/**/ {{0X3FDC7654, 0X67AA3DC0} }, -/**/ {{0X3FEA13D6, 0XD6CE86B3} }, -/**/ {{0XBFD44145, 0X74037E91} }, -/**/ {{0XBFAD6EC9, 0X3B2CC445} }, -/**/ {{0X3FC4CAEA, 0X0564F101} }, -/**/ {{0XBFB2A4F8, 0X0C49CD64} } }, -/**/ {{{0X3FDEBFFD, 0XA11BC00F} }, -/**/ {{0X3FDCAA66, 0X85E23660} }, -/**/ {{0X3FE9FF90, 0XA25C2396} }, -/**/ {{0XBFD44C10, 0X8A64724F} }, -/**/ {{0XBFAC2399, 0X2F871E82} }, -/**/ {{0X3FC49C01, 0X0AFBFB85} }, -/**/ {{0XBFB2E2A8, 0X0F0FF3FE} } }, -/**/ {{{0X3FDEFFFF, 0X3313756D} }, -/**/ {{0X3FDCDE52, 0X9D30CC20} }, -/**/ {{0X3FE9EB3E, 0XDFF9491F} }, -/**/ {{0XBFD45660, 0X7E6ABAAE} }, -/**/ {{0XBFAADB4C, 0X3E8AA98D} }, -/**/ {{0X3FC46C7F, 0X25D8FF7D} }, -/**/ {{0XBFB31D71, 0XA71D448D} } }, -/**/ {{{0X3FDF4001, 0X914B856E} }, -/**/ {{0X3FDD1216, 0XAAC1BB20} }, -/**/ {{0X3FE9D6E2, 0XC9BC4315} }, -/**/ {{0XBFD46036, 0X004E7E91} }, -/**/ {{0XBFA995F7, 0XFB901F89} }, -/**/ {{0X3FC43C6D, 0X3F5BE04A} }, -/**/ {{0XBFB3555C, 0XCE8ABF92} } }, -/**/ {{{0X3FDF8003, 0XCD144428} }, -/**/ {{0X3FDD45B1, 0XD93E9640} }, -/**/ {{0X3FE9C27D, 0X256FDFEB} }, -/**/ {{0XBFD46992, 0X09F7C145} }, -/**/ {{0XBFA853A9, 0XED521174} }, -/**/ {{0X3FC40BD3, 0X2B27751F} }, -/**/ {{0XBFB38A71, 0XCFA5C5F2} } }, -/**/ {{{0X3FDFC002, 0X00545BD9} }, -/**/ {{0X3FDD7920, 0XF536D960} }, -/**/ {{0X3FE9AE0F, 0XAAE99EA5} }, -/**/ {{0XBFD47275, 0X38DD66F4} }, -/**/ {{0XBFA7147D, 0XB5484F74} }, -/**/ {{0X3FC3DABA, 0XF8EFC373} }, -/**/ {{0XBFB3BCB9, 0X3EA6B864} } }, -/**/ {{{0X3FDFFFFB, 0XDA6F2AA8} }, -/**/ {{0X3FDDAC63, 0XB420FAA0} }, -/**/ {{0X3FE9999A, 0XED4D0CAB} }, -/**/ {{0XBFD47AE0, 0XBFCC6072} }, -/**/ {{0XBFA5D87C, 0X25BF7A4A} }, -/**/ {{0X3FC3A92B, 0XF5999EE5} }, -/**/ {{0XBFB3EC3B, 0XF7F09D08} } }, -/**/ {{{0X3FE01FFF, 0XA65118C8} }, -/**/ {{0X3FDDDF85, 0X2BF70C00} }, -/**/ {{0X3FE9851A, 0XECD72AE5} }, -/**/ {{0XBFD482D7, 0X8F5794C5} }, -/**/ {{0XBFA49F68, 0X2E4A020B} }, -/**/ {{0X3FC37722, 0X25A156DA} }, -/**/ {{0XBFB41903, 0X19F58064} } }, -/**/ {{{0X3FE04001, 0X9C0B0556} }, -/**/ {{0X3FDE127D, 0XFA2BA200} }, -/**/ {{0X3FE97093, 0X08C17A55} }, -/**/ {{0XBFD48A59, 0X957A7EFD} }, -/**/ {{0XBFA36976, 0X2648F2BB} }, -/**/ {{0X3FC344AB, 0X592569B1} }, -/**/ {{0XBFB44318, 0X03752DDB} } }, -/**/ {{{0X3FE05FFF, 0XC24501DB} }, -/**/ {{0X3FDE4547, 0XA495BCC0} }, -/**/ {{0X3FE95C06, 0X4F225B79} }, -/**/ {{0XBFD49167, 0X2163F5B8} }, -/**/ {{0XBFA236D3, 0X4B79B89F} }, -/**/ {{0X3FC311D4, 0XB530B7BE} }, -/**/ {{0XBFB46A84, 0X4D931476} } }, -/**/ {{{0X3FE07FFE, 0X865125FC} }, -/**/ {{0X3FDE77E9, 0X2A5FAD60} }, -/**/ {{0X3FE94772, 0X5C13B0EA} }, -/**/ {{0XBFD49802, 0X6F33ABCA} }, -/**/ {{0XBFA1075A, 0XDE947C6B} }, -/**/ {{0X3FC2DE9D, 0XD8D5E01B} }, -/**/ {{0XBFB48F51, 0XCA17CA60} } }, -/**/ {{{0X3FE0A002, 0X107EAC25} }, -/**/ {{0X3FDEAA69, 0X08243180} }, -/**/ {{0X3FE932D4, 0XF339824B} }, -/**/ {{0XBFD49E2D, 0X7145F475} }, -/**/ {{0XBF9FB5D8, 0X00571424} }, -/**/ {{0X3FC2AB06, 0X85D1CF84} }, -/**/ {{0XBFB4B18A, 0X7DBBBABE} } }, -/**/ {{{0X3FE0BFFF, 0X7376E5D4} }, -/**/ {{0X3FDEDCB5, 0XF79FF560} }, -/**/ {{0X3FE91E35, 0X8EE1B492} }, -/**/ {{0XBFD4A3E7, 0X49498453} }, -/**/ {{0XBF9D63E4, 0XBE685C6F} }, -/**/ {{0X3FC27726, 0XC4B1F032} }, -/**/ {{0XBFB4D138, 0X9E6ECC3A} } }, -/**/ {{{0X3FE0DFFE, 0X1715EE2E} }, -/**/ {{0X3FDF0EDB, 0X9BE1BB80} }, -/**/ {{0X3FE9098F, 0XD993BD60} }, -/**/ {{0XBFD4A932, 0X9B84E907} }, -/**/ {{0XBF9B185A, 0XE07DBA5E} }, -/**/ {{0X3FC242F8, 0XF2D7A804} }, -/**/ {{0XBFB4EE66, 0X8DDAA340} } }, -/**/ {{{0X3FE10001, 0X7F3D776C} }, -/**/ {{0X3FDF40DF, 0X6119E100} }, -/**/ {{0X3FE8F4E1, 0XFB44BCFB} }, -/**/ {{0XBFD4AE11, 0X16E3467E} }, -/**/ {{0XBF98D304, 0XCF368422} }, -/**/ {{0X3FC20E7D, 0X736708AE} }, -/**/ {{0XBFB5091E, 0XD7B3658D} } }, -/**/ {{{0X3FE11FFE, 0XFD8C7B65} }, -/**/ {{0X3FDF72B0, 0X8FD21560} }, -/**/ {{0X3FE8E033, 0X4770FB0A} }, -/**/ {{0XBFD4B282, 0X5C0F6783} }, -/**/ {{0XBF9694AC, 0X7FFE0364} }, -/**/ {{0X3FC1D9CB, 0XE529BF4C} }, -/**/ {{0XBFB5216C, 0X2C73E5F0} } }, -/**/ {{{0X3FE14000, 0XAFA3EE71} }, -/**/ {{0X3FDFA45E, 0XE3324D60} }, -/**/ {{0X3FE8CB7D, 0X9FF684DF} }, -/**/ {{0XBFD4B689, 0X17ADD34D} }, -/**/ {{0XBF945CA3, 0X67276E70} }, -/**/ {{0X3FC1A4D9, 0XA1FBF3B1} }, -/**/ {{0XBFB53759, 0X5FBA2374} } }, -/**/ {{{0X3FE15FFF, 0X73336187} }, -/**/ {{0X3FDFD5DF, 0X3DE48D00} }, -/**/ {{0X3FE8B6C6, 0X0CBE3546} }, -/**/ {{0XBFD4BA25, 0X9B291BCB} }, -/**/ {{0XBF922B6F, 0X5FB712CC} }, -/**/ {{0X3FC16FB8, 0X55E28B0B} }, -/**/ {{0XBFB54AF1, 0X633F423C} } }, -/**/ {{{0X3FE17FFF, 0X6C447B82} }, -/**/ {{0X3FE0039C, 0X0208ECC0} }, -/**/ {{0X3FE8A20A, 0X48F15926} }, -/**/ {{0XBFD4BD59, 0XA5808AC3} }, -/**/ {{0XBF9000CD, 0X5EEF6F2A} }, -/**/ {{0X3FC13A66, 0XEBE54AA7} }, -/**/ {{0XBFB55C3F, 0X45420CE4} } }, -/**/ {{{0X3FE19FFF, 0XAE932B61} }, -/**/ {{0X3FE01C33, 0XE0091BC0} }, -/**/ {{0X3FE88D4B, 0X55664E00} }, -/**/ {{0XBFD4C026, 0X579F5ABB} }, -/**/ {{0XBF8BB9A6, 0X8797C32A} }, -/**/ {{0X3FC104EC, 0X95D4F64E} }, -/**/ {{0XBFB56B4E, 0X2BBC325E} } }, -/**/ {{{0X3FE1BFFF, 0XBA12AE50} }, -/**/ {{0X3FE034B6, 0XD3ABA020} }, -/**/ {{0X3FE87889, 0XEBDCCF04} }, -/**/ {{0XBFD4C28C, 0XE6D463C1} }, -/**/ {{0XBF877F1C, 0XB36211FC} }, -/**/ {{0X3FC0CF4F, 0XB90B11E7} }, -/**/ {{0XBFB57829, 0X52DCBE1A} } }, -/**/ {{{0X3FE1E001, 0X4B459E41} }, -/**/ {{0X3FE04D26, 0X2DC05800} }, -/**/ {{0X3FE863C5, 0X51625B6A} }, -/**/ {{0XBFD4C48E, 0XAFFDD399} }, -/**/ {{0XBF8351CB, 0X603059CA} }, -/**/ {{0X3FC09992, 0XDE65D0D9} }, -/**/ {{0XBFB582DC, 0X087BB367} } }, -/**/ {{{0X3FE20000, 0X32306F33} }, -/**/ {{0X3FE0657E, 0XBAFB6CE0} }, -/**/ {{0X3FE84F00, 0XA1E2EEC3} }, -/**/ {{0XBFD4C62C, 0XB79EC8C6} }, -/**/ {{0XBF7E6488, 0XD95DE8D1} }, -/**/ {{0X3FC063C2, 0X661DF241} }, -/**/ {{0XBFB58B71, 0XAAA63BAD} } }, -/**/ {{{0X3FE22000, 0XD30A486C} }, -/**/ {{0X3FE07DC3, 0XD2165080} }, -/**/ {{0X3FE83A39, 0X66B3E5BF} }, -/**/ {{0XBFD4C768, 0X7DE04DEE} }, -/**/ {{0XBF763FF7, 0X800F052F} }, -/**/ {{0X3FC02DDC, 0X28F35EDD} }, -/**/ {{0XBFB591F5, 0XA351CF91} } }, -/**/ {{{0X3FE23FFE, 0X215E03FC} }, -/**/ {{0X3FE095F1, 0X9F380A00} }, -/**/ {{0X3FE82573, 0X48BE5F3F} }, -/**/ {{0XBFD4C843, 0X1B793F77} }, -/**/ {{0XBF6C6E63, 0X625993B8} }, -/**/ {{0X3FBFEFDB, 0X8C5E4B3B} }, -/**/ {{0XBFB59673, 0X66FE9CA7} } }, -/**/ {{{0X3FE26000, 0X6833D65D} }, -/**/ {{0X3FE0AE0E, 0X6496A8C0} }, -/**/ {{0X3FE810A9, 0X45B44AA3} }, -/**/ {{0XBFD4C8BE, 0X055B407A} }, -/**/ {{0XBF5920A7, 0XAE83F0A4} }, -/**/ {{0X3FBF83DC, 0X860A6A5E} }, -/**/ {{0XBFB598F6, 0X70D98EE7} } }, -/**/ {{{0X3FE28000, 0XE82D4D50} }, -/**/ {{0X3FE0C615, 0X095F5300} }, -/**/ {{0X3FE7FBE0, 0X1E9337B7} }, -/**/ {{0XBFD4C8DA, 0X573C6F6A} }, -/**/ {{0X3F38B6C7, 0XC50F565D} }, -/**/ {{0X3FBF17DB, 0XC9C4B6CA} }, -/**/ {{0XBFB5998A, 0X45D6DAE0} } }, -/**/ {{{0X3FE29FFF, 0X203B6A0B} }, -/**/ {{0X3FE0DE05, 0X30852720} }, -/**/ {{0X3FE7E718, 0X8520538D} }, -/**/ {{0XBFD4C899, 0X668C6963} }, -/**/ {{0X3F6286EC, 0XBECA8AB0} }, -/**/ {{0X3FBEABE4, 0X9B6AC5BD} }, -/**/ {{0XBFB5983A, 0X575A9684} } }, -/**/ {{{0X3FE2C001, 0XE91A9D93} }, -/**/ {{0X3FE0F5E3, 0XF7817A20} }, -/**/ {{0X3FE7D24E, 0X63A45D97} }, -/**/ {{0XBFD4C7FC, 0X5F83C46D} }, -/**/ {{0X3F70E199, 0X5D9C800A} }, -/**/ {{0X3FBE3FE9, 0X3721A8E0} }, -/**/ {{0XBFB59512, 0X377DA840} } }, -/**/ {{{0X3FE2DFFF, 0XC6FB4948} }, -/**/ {{0X3FE10DAA, 0X4CE36040} }, -/**/ {{0X3FE7BD88, 0X3E39011F} }, -/**/ {{0XBFD4C704, 0XB5EAE11F} }, -/**/ {{0X3F786398, 0X192C622B} }, -/**/ {{0X3FBDD412, 0XB62BA357} }, -/**/ {{0XBFB5901D, 0X5F0E020E} } }, -/**/ {{{0X3FE2FFFF, 0X39CB4EED} }, -/**/ {{0X3FE1255D, 0X0970AD60} }, -/**/ {{0X3FE7A8C2, 0X365B7A9B} }, -/**/ {{0XBFD4C5B3, 0X8925F532} }, -/**/ {{0X3F7FCB03, 0X785E3070} }, -/**/ {{0X3FBD6854, 0X0EEDF3B3} }, -/**/ {{0XBFB58967, 0X479C252A} } }, -/**/ {{{0X3FE31FFE, 0X002E31CB} }, -/**/ {{0X3FE13CFA, 0X81FD3780} }, -/**/ {{0X3FE793FE, 0X1BBE9667} }, -/**/ {{0XBFD4C40A, 0X3046F4C7} }, -/**/ {{0X3F838BAE, 0X8F5E6BF1} }, -/**/ {{0X3FBCFCBD, 0X83775C98} }, -/**/ {{0XBFB580FB, 0X62E887AB} } }, -/**/ {{{0X3FE34000, 0XEDC7BFFD} }, -/**/ {{0X3FE15486, 0X44D05200} }, -/**/ {{0X3FE77F39, 0X244A1DA5} }, -/**/ {{0XBFD4C209, 0X9FB764C1} }, -/**/ {{0X3F8724E2, 0X851B0BE5} }, -/**/ {{0X3FBC9147, 0X507C76E0} }, -/**/ {{0XBFB576E5, 0X19C7F0AB} } }, -/**/ {{{0X3FE36001, 0XCE042830} }, -/**/ {{0X3FE16BFB, 0XC1656AE0} }, -/**/ {{0X3FE76A77, 0XAD3B2B77} }, -/**/ {{0XBFD4BFB3, 0X74AAC296} }, -/**/ {{0X3F8AB070, 0X05B229C2} }, -/**/ {{0X3FBC260E, 0X87DCA54B} }, -/**/ {{0XBFB56B2F, 0XC90DF763} } }, -/**/ {{{0X3FE37FFE, 0X89B8FC54} }, -/**/ {{0X3FE18359, 0X77D0BA80} }, -/**/ {{0X3FE755BB, 0X660CAA3D} }, -/**/ {{0XBFD4BD09, 0X308BB975} }, -/**/ {{0X3F8E2E26, 0XFE0A1240} }, -/**/ {{0X3FBBBB22, 0X18790F26} }, -/**/ {{0XBFB55DE6, 0XC094F3DA} } }, -/**/ {{{0X3FE3A001, 0X9B4DA842} }, -/**/ {{0X3FE19AA7, 0X100CD140} }, -/**/ {{0X3FE740FD, 0XD801F889} }, -/**/ {{0XBFD4BA0B, 0X2C32C656} }, -/**/ {{0X3F90CF99, 0X8ECA44A2} }, -/**/ {{0X3FBB5066, 0XC9863443} }, -/**/ {{0XBFB54F15, 0X406672B5} } }, -/**/ {{{0X3FE3C000, 0XCE6B63E8} }, -/**/ {{0X3FE1B1DD, 0X1D0B0AE0} }, -/**/ {{0X3FE72C45, 0XF28670E6} }, -/**/ {{0XBFD4B6BB, 0X92422E2E} }, -/**/ {{0X3F928141, 0XA0D32146} }, -/**/ {{0X3FBAE606, 0X37452321} }, -/**/ {{0XBFB53EC6, 0X77D91F56} } }, -/**/ {{{0X3FE3DFFF, 0X114A2607} }, -/**/ {{0X3FE1C8FD, 0XC6FF6F20} }, -/**/ {{0X3FE71792, 0X206847A7} }, -/**/ {{0XBFD4B31B, 0X669BD306} }, -/**/ {{0X3F942C3A, 0X04FFD28A} }, -/**/ {{0X3FBA7BFD, 0XE7FC0825} }, -/**/ {{0XBFB52D05, 0X82F471BA} } }, -/**/ {{{0X3FE3FFFF, 0XC1DA9B7D} }, -/**/ {{0X3FE1E00B, 0X7F2E8840} }, -/**/ {{0X3FE702E0, 0X84371133} }, -/**/ {{0XBFD4AF2B, 0X8012FBE4} }, -/**/ {{0X3F95D0B4, 0XBFC47F4B} }, -/**/ {{0X3FBA1249, 0XD80AB6C5} }, -/**/ {{0XBFB519DD, 0X69A4108D} } }, -/**/ {{{0X3FE41FFE, 0XE11D9C33} }, -/**/ {{0X3FE1F703, 0X67C3EC20} }, -/**/ {{0X3FE6EE34, 0X026A76A0} }, -/**/ {{0XBFD4AAED, 0X96514B12} }, -/**/ {{0X3F976E83, 0X07BA2905} }, -/**/ {{0X3FB9A8FE, 0X261A1221} }, -/**/ {{0XBFB50559, 0X1D552BA0} } }, -/**/ {{{0X3FE43FFF, 0XFA174676} }, -/**/ {{0X3FE20DE8, 0X0FAFF860} }, -/**/ {{0X3FE6D98A, 0X9EA6D162} }, -/**/ {{0XBFD4A662, 0X6B927B3B} }, -/**/ {{0X3F9905D8, 0XF84ADBB0} }, -/**/ {{0X3FB94015, 0XDD484DB5} }, -/**/ {{0XBFB4EF83, 0X783EEF44} } }, -/**/ {{{0X3FE45FFF, 0X0D457FA4} }, -/**/ {{0X3FE224B6, 0X9F675300} }, -/**/ {{0X3FE6C4E7, 0X3A093351} }, -/**/ {{0XBFD4A18B, 0XCBF2BFF8} }, -/**/ {{0X3F9A968A, 0X84BB8C16} }, -/**/ {{0X3FB8D7A4, 0X93FBB975} }, -/**/ {{0XBFB4D867, 0X3B37E4FB} } }, -/**/ {{{0X3FE47FFE, 0X8F910E57} }, -/**/ {{0X3FE23B70, 0XDD92B840} }, -/**/ {{0X3FE6B048, 0X89B04359} }, -/**/ {{0XBFD49C6A, 0X974B07FF} }, -/**/ {{0X3F9C20BE, 0X25F20251} }, -/**/ {{0X3FB86FA8, 0X82E9673D} }, -/**/ {{0XBFB4C00F, 0X0D12F550} } }, -/**/ {{{0X3FE4A001, 0X7323FC6B} }, -/**/ {{0X3FE25218, 0XE34E3420} }, -/**/ {{0X3FE69BAC, 0XF277FE27} }, -/**/ {{0XBFD496FF, 0X7F856ABA} }, -/**/ {{0X3F9DA49E, 0X9928150C} }, -/**/ {{0X3FB8081E, 0X3EB66A26} }, -/**/ {{0XBFB4A685, 0X78AB06C5} } }, -/**/ {{{0X3FE4C000, 0XB1BF0500} }, -/**/ {{0X3FE268A9, 0XBD8B2C80} }, -/**/ {{0X3FE68719, 0X42ABBD42} }, -/**/ {{0XBFD4914C, 0XEC74E64A} }, -/**/ {{0X3F9F21DE, 0XD0C3EEEC} }, -/**/ {{0X3FB7A122, 0X5B30AA05} }, -/**/ {{0XBFB48BD4, 0XEC53EF43} } }, -/**/ {{{0X3FE4E001, 0X1D07207B} }, -/**/ {{0X3FE27F26, 0XDA64F7A0} }, -/**/ {{0X3FE6728A, 0XA7CFBEB2} }, -/**/ {{0XBFD48B53, 0X3FCBB247} }, -/**/ {{0X3FA04C60, 0XA7354A41} }, -/**/ {{0X3FB73AAA, 0XEFF6F27A} }, -/**/ {{0XBFB47007, 0XB81A6BB2} } }, -/**/ {{{0X3FE4FFFE, 0X5F36EB46} }, -/**/ {{0X3FE2958D, 0X35DDD180} }, -/**/ {{0X3FE65E04, 0X307B6AF3} }, -/**/ {{0XBFD48514, 0X828BB6E6} }, -/**/ {{0X3FA1048E, 0X48993ED9} }, -/**/ {{0X3FB6D4CB, 0X468D7C59} }, -/**/ {{0XBFB45328, 0X0D484989} } }, -/**/ {{{0X3FE52001, 0X2AFDF759} }, -/**/ {{0X3FE2ABE2, 0XEB1C3280} }, -/**/ {{0X3FE64980, 0X8DC5DAAD} }, -/**/ {{0XBFD47E90, 0X2C11E3B7} }, -/**/ {{0X3FA1B9AE, 0X88E1B343} }, -/**/ {{0X3FB66F6C, 0XFF4501BF} }, -/**/ {{0XBFB4353F, 0XFCD6B8DE} } }, -/**/ {{{0X3FE54001, 0XDFDB2423} }, -/**/ {{0X3FE2C222, 0XAB0402C0} }, -/**/ {{0X3FE63504, 0XE7E657FB} }, -/**/ {{0XBFD477C8, 0XEEE53FA9} }, -/**/ {{0X3FA26B9A, 0X696CD845} }, -/**/ {{0X3FB60AAD, 0X6A3AA6EF} }, -/**/ {{0XBFB41659, 0X7704E1F4} } }, -/**/ {{{0X3FE55FFE, 0X72D2A74F} }, -/**/ {{0X3FE2D84B, 0X16BE7240} }, -/**/ {{0X3FE62092, 0XCE54AEDE} }, -/**/ {{0XBFD470C0, 0X7B764156} }, -/**/ {{0X3FA31A4C, 0X4D9ABEE7} }, -/**/ {{0X3FB5A697, 0XA899A63D} }, -/**/ {{0XBFB3F67E, 0X49FA7FB1} } }, -/**/ {{{0X3FE58000, 0XEE716C33} }, -/**/ {{0X3FE2EE63, 0X284F3FE0} }, -/**/ {{0X3FE60C24, 0X181C5720} }, -/**/ {{0XBFD46975, 0XC383B0C1} }, -/**/ {{0X3FA3C5FF, 0XC40A1A5A} }, -/**/ {{0X3FB54311, 0X0B7B3B72} }, -/**/ {{0XBFB3D5B8, 0X21700401} } }, -/**/ {{{0X3FE59FFF, 0X9825CD2A} }, -/**/ {{0X3FE30464, 0X2DEFCF40} }, -/**/ {{0X3FE5F7BF, 0X3C14A317} }, -/**/ {{0XBFD461EC, 0X227A4CDE} }, -/**/ {{0X3FA46E85, 0X6DA8D837} }, -/**/ {{0X3FB4E03C, 0X6162F4C8} }, -/**/ {{0XBFB3B410, 0X857F5976} } }, -/**/ {{{0X3FE5BFFD, 0XFE2A42CD} }, -/**/ {{0X3FE31A50, 0XA5110DC0} }, -/**/ {{0X3FE5E362, 0X33CF1268} }, -/**/ {{0XBFD45A23, 0XF68B7DBC} }, -/**/ {{0X3FA513F5, 0XDE40F0E9} }, -/**/ {{0X3FB47E12, 0XDE05901E} }, -/**/ {{0XBFB39190, 0XDA5CABB5} } }, -/**/ {{{0X3FE5E000, 0X57330799} }, -/**/ {{0X3FE3302B, 0X75253480} }, -/**/ {{0X3FE5CF0A, 0X901DA45A} }, -/**/ {{0XBFD4521D, 0X552754CF} }, -/**/ {{0X3FA5B66B, 0XBBF000BB} }, -/**/ {{0X3FB41C8B, 0XD2BAF7B2} }, -/**/ {{0XBFB36E42, 0X5F53241A} } }, -/**/ {{{0X3FE60001, 0X4D6055DA} }, -/**/ {{0X3FE345F0, 0XFF2EDA60} }, -/**/ {{0X3FE5BABB, 0XF2EA5900} }, -/**/ {{0XBFD449DA, 0XB2008754} }, -/**/ {{0X3FA655D1, 0X18F56FBB} }, -/**/ {{0X3FB3BBBB, 0X89A0C1B2} }, -/**/ {{0XBFB34A2E, 0X2E8D60FC} } }, -/**/ {{{0X3FE62001, 0X2C3809CB} }, -/**/ {{0X3FE35BA1, 0X812D5040} }, -/**/ {{0X3FE5A676, 0X671E49E9} }, -/**/ {{0XBFD4415D, 0X230E6216} }, -/**/ {{0X3FA6F22D, 0X6B05C7F7} }, -/**/ {{0X3FB35BA4, 0XCFE6B72B} }, -/**/ {{0XBFB3255D, 0X3C3BFA3B} } }, -/**/ {{{0X3FE64000, 0X87B47ECC} }, -/**/ {{0X3FE3713D, 0X69715580} }, -/**/ {{0X3FE59239, 0XC8FB0E69} }, -/**/ {{0XBFD438A5, 0XA5BD1F6E} }, -/**/ {{0X3FA78B89, 0X7F9B13CF} }, -/**/ {{0X3FB2FC49, 0X74F57C8F} }, -/**/ {{0XBFB2FFD8, 0X566CAACA} } }, -/**/ {{{0X3FE66000, 0XA746397F} }, -/**/ {{0X3FE386C5, 0X9D968940} }, -/**/ {{0X3FE57E05, 0X83073C58} }, -/**/ {{0XBFD42FB4, 0XFE3D0083} }, -/**/ {{0X3FA821F1, 0X4B9E1EEB} }, -/**/ {{0X3FB29DA9, 0X1952EE82} }, -/**/ {{0XBFB2D9A8, 0X245866A8} } }, -/**/ {{{0X3FE68000, 0XE4E3094B} }, -/**/ {{0X3FE39C39, 0XB5FE3900} }, -/**/ {{0X3FE569DA, 0X36DD131E} }, -/**/ {{0XBFD4268C, 0X74778FE0} }, -/**/ {{0X3FA8B567, 0X9AB0310F} }, -/**/ {{0X3FB23FC8, 0XF2E43205} }, -/**/ {{0XBFB2B2D5, 0X26483573} } }, -/**/ {{{0X3FE6A001, 0XE2E37787} }, -/**/ {{0X3FE3B19A, 0X27D52620} }, -/**/ {{0X3FE555B7, 0XB5D865CD} }, -/**/ {{0XBFD41D2C, 0XF1600CD3} }, -/**/ {{0X3FA945F5, 0X4B79E859} }, -/**/ {{0X3FB1E2AA, 0X46A0B02D} }, -/**/ {{0XBFB28B67, 0XB508A35B} } }, -/**/ {{{0X3FE6BFFE, 0X0DF4BBFB} }, -/**/ {{0X3FE3C6E3, 0X46F2B6E0} }, -/**/ {{0X3FE541A1, 0XB658AFBE} }, -/**/ {{0XBFD41399, 0X388DA137} }, -/**/ {{0X3FA9D387, 0XE5B3C2BA} }, -/**/ {{0X3FB18660, 0X173397F9} }, -/**/ {{0XBFB26368, 0X01DB4945} } }, -/**/ {{{0X3FE6DFFF, 0XEA406CEA} }, -/**/ {{0X3FE3DC1C, 0X1BB3D400} }, -/**/ {{0X3FE52D91, 0XD33FFE8E} }, -/**/ {{0XBFD409CF, 0X36BCFFE9} }, -/**/ {{0X3FAA5E54, 0X174405AF} }, -/**/ {{0X3FB12ACE, 0XDC041806} }, -/**/ {{0XBFB23ADE, 0X160D6557} } }, -/**/ {{{0X3FE70000, 0XED01EA65} }, -/**/ {{0X3FE3F140, 0X54E51400} }, -/**/ {{0X3FE5198C, 0X5C8B9119} }, -/**/ {{0XBFD3FFD1, 0XF2EA4FF7} }, -/**/ {{0X3FAAE643, 0X308C81CD} }, -/**/ {{0X3FB0D00C, 0X1960AAF7} }, -/**/ {{0XBFB211D1, 0XD2F50D25} } }, -/**/ {{{0X3FE72002, 0X00D515EB} }, -/**/ {{0X3FE40650, 0X983BB3E0} }, -/**/ {{0X3FE50590, 0XF2175C71} }, -/**/ {{0XBFD3F5A2, 0X361BB15C} }, -/**/ {{0X3FAB6B5F, 0X9B536AFC} }, -/**/ {{0X3FB07617, 0XA731624D} }, -/**/ {{0XBFB1E84A, 0XF1A8C054} } }, -/**/ {{{0X3FE74001, 0X1323DE6D} }, -/**/ {{0X3FE41B4B, 0X9483E720} }, -/**/ {{0X3FE4F1A1, 0X1027BA01} }, -/**/ {{0XBFD3EB41, 0XBB978C8F} }, -/**/ {{0X3FABEDA7, 0X7765626A} }, -/**/ {{0X3FB01CF9, 0X97F58C8A} }, -/**/ {{0XBFB1BE51, 0X03074348} } }, -/**/ {{{0X3FE75FFF, 0X25CAB4CA} }, -/**/ {{0X3FE43032, 0X0001D5C0} }, -/**/ {{0X3FE4DDBC, 0X4573FB6C} }, -/**/ {{0XBFD3E0B1, 0X41F21D2A} }, -/**/ {{0X3FAC6D25, 0XD1BDA00F} }, -/**/ {{0X3FAF8962, 0X5935EE68} }, -/**/ {{0XBFB193EB, 0X6F8E0689} } }, -/**/ {{{0X3FE77FFE, 0X90921F76} }, -/**/ {{0X3FE44505, 0X6CC6AF00} }, -/**/ {{0X3FE4C9E1, 0X4CFFBDAE} }, -/**/ {{0XBFD3D5F1, 0X0B247EC4} }, -/**/ {{0X3FACE9EA, 0X943F4516} }, -/**/ {{0X3FAEDA73, 0XF24A8AF1} }, -/**/ {{0XBFB16921, 0X776AAC42} } }, -/**/ {{{0X3FE79FFE, 0X47B2F83B} }, -/**/ {{0X3FE459C5, 0X35C19F20} }, -/**/ {{0X3FE4B610, 0XFC8F20BD} }, -/**/ {{0XBFD3CB02, 0X73DF2A0D} }, -/**/ {{0X3FAD63F8, 0X23C5D6DE} }, -/**/ {{0X3FAE2D31, 0X9C5116AB} }, -/**/ {{0XBFB13DFA, 0X326E2972} } }, -/**/ {{{0X3FE7BFFF, 0X2F1E79A9} }, -/**/ {{0X3FE46E71, 0XF84DF5C0} }, -/**/ {{0X3FE4A24A, 0XF586B1BD} }, -/**/ {{0XBFD3BFE6, 0X2EF81E5B} }, -/**/ {{0X3FADDB58, 0X738896F0} }, -/**/ {{0X3FAD819A, 0X2515DE78} }, -/**/ {{0XBFB1127C, 0X9026FDD0} } }, -/**/ {{{0X3FE7E001, 0X973C8D05} }, -/**/ {{0X3FE4830B, 0XF0FB9580} }, -/**/ {{0X3FE48E8F, 0X3466B08E} }, -/**/ {{0XBFD3B49D, 0X1C53A01A} }, -/**/ {{0X3FAE5013, 0X25103EED} }, -/**/ {{0X3FACD7AF, 0X5290F4AF} }, -/**/ {{0XBFB0E6AF, 0X57EF003B} } }, -/**/ {{{0X3FE7FFFF, 0X69EFC092} }, -/**/ {{0X3FE4978F, 0X431C3800} }, -/**/ {{0X3FE47AE1, 0XA3E1064A} }, -/**/ {{0XBFD3A92A, 0X666C50C4} }, -/**/ {{0X3FAEC219, 0X4098A4BE} }, -/**/ {{0X3FAC2F94, 0X2EEE57E0} }, -/**/ {{0XBFB0BA99, 0X290D5730} } }, -/**/ {{{0X3FE82001, 0XC52B5232} }, -/**/ {{0X3FE4AC01, 0XD2B83340} }, -/**/ {{0X3FE4673C, 0XD31B7CF5} }, -/**/ {{0XBFD39D8B, 0XC67D05F0} }, -/**/ {{0X3FAF3192, 0X2A81B5D5} }, -/**/ {{0X3FAB891B, 0X8AA20E90} }, -/**/ {{0XBFB08E40, 0X7ADCEFD6} } }, -/**/ {{{0X3FE84000, 0XBD4D4E3F} }, -/**/ {{0X3FE4C05E, 0X9B1DBC60} }, -/**/ {{0X3FE453A5, 0XC8D629F7} }, -/**/ {{0XBFD391C5, 0X13E9EF47} }, -/**/ {{0X3FAF9E69, 0X17383D6B} }, -/**/ {{0X3FAAE471, 0X278E21B9} }, -/**/ {{0XBFB061AB, 0X9CF54D10} } }, -/**/ {{{0X3FE86001, 0X8C869CBD} }, -/**/ {{0X3FE4D4A8, 0XFD2285A0} }, -/**/ {{0X3FE44019, 0X79B82471} }, -/**/ {{0XBFD385D5, 0X5C3E2929} }, -/**/ {{0X3FB0045B, 0X7B2C8FF2} }, -/**/ {{0X3FAA417C, 0X39D7CA4F} }, -/**/ {{0XBFB034E0, 0XB767B7D4} } }, -/**/ {{{0X3FE87FFE, 0XB5DB3710} }, -/**/ {{0X3FE4E8DD, 0X8B93BCA0} }, -/**/ {{0X3FE42C9B, 0X66C6E6BF} }, -/**/ {{0XBFD379BF, 0XA32EE2A1} }, -/**/ {{0X3FB03838, 0X6187FE0F} }, -/**/ {{0X3FA9A05A, 0X8B3A0B33} }, -/**/ {{0XBFB007E5, 0XCAEE03A9} } }, -/**/ {{{0X3FE8A000, 0X863C77E3} }, -/**/ {{0X3FE4FD01, 0X8FCD1E80} }, -/**/ {{0X3FE41926, 0XA8A8093F} }, -/**/ {{0XBFD36D81, 0XB5EE344D} }, -/**/ {{0X3FB06ADC, 0X2841F292} }, -/**/ {{0X3FA900E4, 0X2484560B} }, -/**/ {{0XBFAFB581, 0X62792F0A} } }, -/**/ {{{0X3FE8BFFF, 0X0ED982AF} }, -/**/ {{0X3FE51110, 0X16E28AC0} }, -/**/ {{0X3FE405C0, 0X389112EE} }, -/**/ {{0XBFD3611F, 0X89D38DC7} }, -/**/ {{0X3FB09C3D, 0XB450B9F7} }, -/**/ {{0X3FA86342, 0X312D0C4A} }, -/**/ {{0XBFAF5AEE, 0X3A6CA012} } }, -/**/ {{{0X3FE8E000, 0X02C3AEAE} }, -/**/ {{0X3FE5250C, 0XC0AB0A40} }, -/**/ {{0X3FE3F264, 0XC65593C5} }, -/**/ {{0XBFD35497, 0XD82BE900} }, -/**/ {{0X3FB0CC69, 0X68546D39} }, -/**/ {{0X3FA7C759, 0XDB8499FD} }, -/**/ {{0XBFAF001D, 0X36A32337} } }, -/**/ {{{0X3FE90000, 0XECBFA97B} }, -/**/ {{0X3FE538F6, 0X0E8D4EE0} }, -/**/ {{0X3FE3DF15, 0XF4119333} }, -/**/ {{0XBFD347EC, 0X7D2149F4} }, -/**/ {{0X3FB0FB5E, 0XFA921D3C} }, -/**/ {{0X3FA72D38, 0X69693E89} }, -/**/ {{0XBFAEA519, 0X23A0F5F3} } }, -/**/ {{{0X3FE91FFF, 0XD251C01C} }, -/**/ {{0X3FE54CCA, 0XD3F3BD20} }, -/**/ {{0X3FE3CBD5, 0X1554DD15} }, -/**/ {{0XBFD33B1F, 0X2BC94245} }, -/**/ {{0X3FB1291F, 0X2FC4C3F6} }, -/**/ {{0X3FA694E8, 0X1B7A765C} }, -/**/ {{0XBFAE49EC, 0X826E86F6} } }, -/**/ {{{0X3FE94001, 0XD90AF4E6} }, -/**/ {{0X3FE5608E, 0X4D4EC640} }, -/**/ {{0X3FE3B89F, 0X3445EF72} }, -/**/ {{0XBFD32E2E, 0XB7BBD79A} }, -/**/ {{0X3FB155B4, 0XE401D071} }, -/**/ {{0X3FA5FE51, 0X3A256F1C} }, -/**/ {{0XBFADEEA1, 0X890FF662} } }, -/**/ {{{0X3FE96001, 0X04FD6C17} }, -/**/ {{0X3FE5743C, 0XD5673C20} }, -/**/ {{0X3FE3A578, 0X09EBC6E2} }, -/**/ {{0XBFD3211E, 0X6DA5039C} }, -/**/ {{0X3FB1811B, 0X4E62286B} }, -/**/ {{0X3FA56990, 0X71BECE9D} }, -/**/ {{0XBFAD9342, 0X23911641} } }, -/**/ {{{0X3FE98000, 0X2D214B82} }, -/**/ {{0X3FE587D8, 0X3B0D6120} }, -/**/ {{0X3FE3925E, 0X01EAAC3E} }, -/**/ {{0XBFD313EE, 0X08425504} }, -/**/ {{0X3FB1AB5A, 0X02BDB571} }, -/**/ {{0X3FA4D698, 0X9EBD70B8} }, -/**/ {{0XBFAD37D7, 0XF482965A} } }, -/**/ {{{0X3FE99FFD, 0XEB980651} }, -/**/ {{0X3FE59B5F, 0XB16BA7A0} }, -/**/ {{0X3FE37F52, 0X10B1AB7A} }, -/**/ {{0XBFD3069E, 0XF993D676} }, -/**/ {{0X3FB1D472, 0XCDED25A8} }, -/**/ {{0X3FA44570, 0X2D0ABD9A} }, -/**/ {{0XBFACDC6C, 0X56221AA1} } }, -/**/ {{{0X3FE9BFFF, 0XE5504053} }, -/**/ {{0X3FE5AED6, 0XB55DE6A0} }, -/**/ {{0X3FE36C50, 0XFA91C51E} }, -/**/ {{0XBFD2F92F, 0XBE311E56} }, -/**/ {{0X3FB1FC70, 0X5BE3AF05} }, -/**/ {{0X3FA3B5FD, 0XACD5CDC7} }, -/**/ {{0XBFAC8108, 0X5ADBB9B8} } }, -/**/ {{{0X3FE9E001, 0X6E60A234} }, -/**/ {{0X3FE5C23A, 0X79ACD480} }, -/**/ {{0X3FE3595D, 0XA5FAB2EA} }, -/**/ {{0XBFD2EBA3, 0X1DDECEEA} }, -/**/ {{0X3FB22350, 0X35736518} }, -/**/ {{0X3FA32856, 0X22F9FD28} }, -/**/ {{0XBFAC25B4, 0XCE8B2259} } }, -/**/ {{{0X3FE9FFFF, 0XB685741B} }, -/**/ {{0X3FE5D589, 0X5AD40460} }, -/**/ {{0X3FE34679, 0XD832B8D3} }, -/**/ {{0XBFD2DDFB, 0X230EDA41} }, -/**/ {{0X3FB24912, 0XB23C0BA2} }, -/**/ {{0X3FA29C85, 0X4C4E86DA} }, -/**/ {{0XBFABCA7A, 0X37002A55} } }, -/**/ {{{0X3FEA2001, 0X9D59B943} }, -/**/ {{0X3FE5E8C7, 0X8C187EA0} }, -/**/ {{0X3FE333A1, 0X9EDE2183} }, -/**/ {{0XBFD2D035, 0XB0043779} }, -/**/ {{0X3FB26DC3, 0X7AB9110C} }, -/**/ {{0X3FA2126C, 0X959CFC0E} }, -/**/ {{0XBFAB6F60, 0XD556233E} } }, -/**/ {{{0X3FEA3FFF, 0XBE9E153F} }, -/**/ {{0X3FE5FBF0, 0XA9C08AE0} }, -/**/ {{0X3FE320D9, 0X6F7861AA} }, -/**/ {{0XBFD2C256, 0XC2200F18} }, -/**/ {{0X3FB2915D, 0XA6795293} }, -/**/ {{0X3FA18A2B, 0X256A8FDE} }, -/**/ {{0XBFAB1470, 0XA67A4E89} } }, -/**/ {{{0X3FEA5FFE, 0X7A23A1CE} }, -/**/ {{0X3FE60F07, 0X63200600} }, -/**/ {{0X3FE30E1E, 0XD13D395E} }, -/**/ {{0XBFD2B45D, 0X44403932} }, -/**/ {{0X3FB2B3E9, 0XC967F013} }, -/**/ {{0X3FA103AD, 0X35D002B8} }, -/**/ {{0XBFAAB9B1, 0X6496A8F1} } }, -/**/ {{{0X3FEA8001, 0X57F250B8} }, -/**/ {{0X3FE6220D, 0XDD6453A0} }, -/**/ {{0X3FE2FB6F, 0XCFFFCC1E} }, -/**/ {{0XBFD2A648, 0X6F8D8291} }, -/**/ {{0X3FB2D56F, 0X03654CC3} }, -/**/ {{0X3FA07EE3, 0X4BB6E7A6} }, -/**/ {{0XBFAA5F2A, 0X87992F03} } }, -/**/ {{{0X3FEAA000, 0XDD839D49} }, -/**/ {{0X3FE634FF, 0XB412C9A0} }, -/**/ {{0X3FE2E8D0, 0XE2D59E01} }, -/**/ {{0XBFD2981C, 0X5467CFDD} }, -/**/ {{0X3FB2F5E8, 0XFF1FADB5} }, -/**/ {{0X3F9FF7D6, 0XA3BA803C} }, -/**/ {{0XBFAA04E3, 0X46AF8DB7} } }, -/**/ {{{0X3FEAC000, 0X770DF220} }, -/**/ {{0X3FE647DE, 0XFEF70020} }, -/**/ {{0X3FE2D640, 0X220AFF7F} }, -/**/ {{0XBFD289D8, 0X36F9E74F} }, -/**/ {{0X3FB3155E, 0XE509140A} }, -/**/ {{0X3F9EF56B, 0X61AB0B7F} }, -/**/ {{0XBFA9AAE2, 0X98CE391F} } }, -/**/ {{{0X3FEAE001, 0X125BBE48} }, -/**/ {{0X3FE65AAC, 0X57A24D20} }, -/**/ {{0X3FE2C3BD, 0X1BFB3559} }, -/**/ {{0XBFD27B7C, 0X6DDE55DD} }, -/**/ {{0X3FB333D5, 0X15C4C270} }, -/**/ {{0X3F9DF67A, 0X9BAC4ECF} }, -/**/ {{0XBFA9512F, 0X363A972B} } }, -/**/ {{{0X3FEAFFFE, 0X7C321839} }, -/**/ {{0X3FE66D65, 0X569B83C0} }, -/**/ {{0X3FE2B14A, 0X53FBF8D9} }, -/**/ {{0XBFD26D0B, 0X9CFA03CE} }, -/**/ {{0X3FB3514B, 0X2CAA2E0C} }, -/**/ {{0X3F9CFB22, 0X4597BE9A} }, -/**/ {{0XBFA8F7CF, 0X99110022} } }, -/**/ {{{0X3FEB1FFE, 0X75486924} }, -/**/ {{0X3FE6800D, 0X68CEFB40} }, -/**/ {{0X3FE29EE4, 0X8E6AA814} }, -/**/ {{0XBFD25E83, 0XE8AFA7EB} }, -/**/ {{0X3FB36DC9, 0XFB0E8AC8} }, -/**/ {{0X3F9C0331, 0XAD5D66CA} }, -/**/ {{0XBFA89EC9, 0XFEDB1E8B} } }, -/**/ {{{0X3FEB4001, 0X5FB8DEB8} }, -/**/ {{0X3FE692A4, 0XD137C500} }, -/**/ {{0X3FE28C8B, 0XABFF668E} }, -/**/ {{0XBFD24FE5, 0XD8E71E0A} }, -/**/ {{0X3FB38955, 0X1297317A} }, -/**/ {{0X3F9B0EA3, 0X1D844655} }, -/**/ {{0XBFA84624, 0X6914067D} } }, -/**/ {{{0X3FEB6000, 0X386C27B9} }, -/**/ {{0X3FE6A527, 0X8CDF6FC0} }, -/**/ {{0X3FE27A43, 0XC5758DB8} }, -/**/ {{0XBFD24135, 0X59CADCE0} }, -/**/ {{0X3FB3A3E9, 0XEE34AE91} }, -/**/ {{0X3F9A1DA8, 0X1C5FFF05} }, -/**/ {{0XBFA7EDE4, 0X9EC8AAC6} } }, -/**/ {{{0X3FEB8000, 0XD1EFDDB3} }, -/**/ {{0X3FE6B799, 0X0ACCB660} }, -/**/ {{0X3FE26809, 0X9983AAB2} }, -/**/ {{0XBFD23270, 0X76047E08} }, -/**/ {{0X3FB3BD90, 0XF132139B} }, -/**/ {{0X3F993010, 0X58DEB3E1} }, -/**/ {{0XBFA79610, 0X2D194CE9} } }, -/**/ {{{0X3FEB9FFE, 0X42CC4047} }, -/**/ {{0X3FE6C9F6, 0X86445E60} }, -/**/ {{0X3FE255E0, 0X069F871F} }, -/**/ {{0XBFD2239A, 0X25461639} }, -/**/ {{0X3FB3D649, 0XA926C127} }, -/**/ {{0X3F9845FB, 0XC5A21F70} }, -/**/ {{0XBFA73EAC, 0X68E20BE6} } }, -/**/ {{{0X3FEBC001, 0X951AEAAD} }, -/**/ {{0X3FE6DC45, 0X3C4E45A0} }, -/**/ {{0X3FE243C1, 0XFF6573B0} }, -/**/ {{0XBFD214AE, 0XE38FA7E7} }, -/**/ {{0X3FB3EE1E, 0X5EA1330F} }, -/**/ {{0X3F975F24, 0X2BCCE6DF} }, -/**/ {{0XBFA6E7BE, 0X6F3902C5} } }, -/**/ {{{0X3FEBDFFE, 0X6616FE11} }, -/**/ {{0X3FE6EE7E, 0X27106FE0} }, -/**/ {{0X3FE231B6, 0X97B587F0} }, -/**/ {{0XBFD205B5, 0X240FEF32} }, -/**/ {{0X3FB40509, 0X44EB818C} }, -/**/ {{0X3F967BDE, 0X108160F9} }, -/**/ {{0XBFA6914B, 0X271D18AD} } }, -/**/ {{{0X3FEBFFFF, 0X54511C72} }, -/**/ {{0X3FE700A7, 0X643BBB40} }, -/**/ {{0X3FE21FB7, 0XE1823C8B} }, -/**/ {{0XBFD1F6A8, 0X9A854F7A} }, -/**/ {{0X3FB41B15, 0X71F04837} }, -/**/ {{0X3F959BD8, 0XBBD10F7C} }, -/**/ {{0XBFA63B57, 0X41F03711} } }, -/**/ {{{0X3FEC2000, 0XC537593E} }, -/**/ {{0X3FE712BE, 0XF36D6400} }, -/**/ {{0X3FE20DC7, 0XF754B2D5} }, -/**/ {{0XBFD1E78B, 0X9D24DBED} }, -/**/ {{0X3FB43043, 0X94F485E0} }, -/**/ {{0X3F94BF29, 0X122A6884} }, -/**/ {{0XBFA5E5E7, 0X3D2AA4E9} } }, -/**/ {{{0X3FEC4000, 0XDDD35719} }, -/**/ {{0X3FE724C3, 0XD7FA3000} }, -/**/ {{0X3FE1FBE7, 0XF2A8B1BF} }, -/**/ {{0XBFD1D85F, 0XB25DDDF6} }, -/**/ {{0X3FB44495, 0XD2E3B20F} }, -/**/ {{0X3F93E5D6, 0X7FCC1B30} }, -/**/ {{0XBFA590FF, 0X62D0D00F} } }, -/**/ {{{0X3FEC6000, 0X402375B6} }, -/**/ {{0X3FE736B6, 0X7DFF3720} }, -/**/ {{0X3FE1EA17, 0X86C92387} }, -/**/ {{0XBFD1C925, 0X31DDFC58} }, -/**/ {{0X3FB4580F, 0XF8B6CBC2} }, -/**/ {{0X3F930FD7, 0X00CE998E} }, -/**/ {{0XBFA53CA3, 0XCB299E5F} } }, -/**/ {{{0X3FEC7FFF, 0X19904FE4} }, -/**/ {{0X3FE74897, 0X0F395860} }, -/**/ {{0X3FE1D856, 0XA825BA33} }, -/**/ {{0XBFD1B9DC, 0XA75E0FC5} }, -/**/ {{0X3FB46AB5, 0X79F8FD7D} }, -/**/ {{0X3F923D23, 0XA5A90AFE} }, -/**/ {{0XBFA4E8D8, 0X5D2F574B} } }, -/**/ {{{0X3FEC9FFE, 0XF9E2409D} }, -/**/ {{0X3FE75A66, 0X79E7F1C0} }, -/**/ {{0X3FE1C6A4, 0X8740D2E9} }, -/**/ {{0XBFD1AA85, 0XF198392C} }, -/**/ {{0X3FB47C8A, 0X808C583A} }, -/**/ {{0X3F916DAC, 0X857F2526} }, -/**/ {{0XBFA495A0, 0XD0477576} } }, -/**/ {{{0X3FECC001, 0XE038EF72} }, -/**/ {{0X3FE76C25, 0XE6815140} }, -/**/ {{0X3FE1B500, 0X19BDADF8} }, -/**/ {{0XBFD19B20, 0XB4A469AE} }, -/**/ {{0X3FB48D93, 0X42387EA2} }, -/**/ {{0X3F90A15F, 0X7305BAF5} }, -/**/ {{0XBFA44300, 0XACAE4E17} } }, -/**/ {{{0X3FECDFFE, 0XEB72037F} }, -/**/ {{0X3FE77DD0, 0X7A7A4AA0} }, -/**/ {{0X3FE1A36E, 0X4F1F6702} }, -/**/ {{0XBFD18BB1, 0XD0992CF8} }, -/**/ {{0X3FB49DCE, 0X5AA4990D} }, -/**/ {{0X3F8FB0DD, 0X63759665} }, -/**/ {{0XBFA3F0FB, 0X4D2F0C0F} } }, -/**/ {{{0X3FECFFFF, 0XEA4839ED} }, -/**/ {{0X3FE78F6B, 0XB17088C0} }, -/**/ {{0X3FE191E9, 0XCF32122F} }, -/**/ {{0XBFD17C35, 0X220400AC} }, -/**/ {{0X3FB4AD44, 0X0A159641} }, -/**/ {{0X3F8E252C, 0X80894CA9} }, -/**/ {{0XBFA39F93, 0XDF89C265} } }, -/**/ {{{0X3FED1FFD, 0XEC3EC8B2} }, -/**/ {{0X3FE7A0F3, 0XC8C6C880} }, -/**/ {{0X3FE18076, 0X729F01D6} }, -/**/ {{0XBFD16CAE, 0X98515540} }, -/**/ {{0X3FB4BBF4, 0X1B0933FF} }, -/**/ {{0X3F8C9FF5, 0XE09A60CD} }, -/**/ {{0XBFA34ECD, 0X662A5704} } }, -/**/ {{{0X3FED3FFF, 0X7084EDD4} }, -/**/ {{0X3FE7B26C, 0X5F02F220} }, -/**/ {{0X3FE16F10, 0XB9973206} }, -/**/ {{0XBFD15D1B, 0X9E1E0A54} }, -/**/ {{0X3FB4C9E4, 0XAC2C9A30} }, -/**/ {{0X3F8B20DD, 0XEFCE76CC} }, -/**/ {{0XBFA2FEAA, 0XB888BC37} } }, -/**/ {{{0X3FED5FFE, 0X8D728E7C} }, -/**/ {{0X3FE7C3D2, 0X488D7E80} }, -/**/ {{0X3FE15DBB, 0XE622A5A7} }, -/**/ {{0XBFD14D7F, 0XA305CEB2} }, -/**/ {{0X3FB4D716, 0X417BF1C7} }, -/**/ {{0X3F89A81E, 0XE19FE239} }, -/**/ {{0XBFA2AF2E, 0X84DDAD07} } }, -/**/ {{{0X3FED7FFF, 0X70AA3B03} }, -/**/ {{0X3FE7D527, 0XDB239580} }, -/**/ {{0X3FE14C75, 0XBE4FEA01} }, -/**/ {{0XBFD13DD9, 0X2AD706AA} }, -/**/ {{0X3FB4E38D, 0XB49D32AA} }, -/**/ {{0X3F88357A, 0X37DF2B6D} }, -/**/ {{0XBFA2605B, 0X507CD77B} } }, -/**/ {{{0X3FED9FFF, 0X1434FBA3} }, -/**/ {{0X3FE7E66B, 0X82C8A720} }, -/**/ {{0X3FE13B3F, 0XED9B7FED} }, -/**/ {{0XBFD12E2A, 0X3AC9D646} }, -/**/ {{0X3FB4EF4C, 0XE7B01CF5} }, -/**/ {{0X3F86C905, 0XD25FD52D} }, -/**/ {{0XBFA21233, 0X798666EF} } }, -/**/ {{{0X3FEDBFFE, 0XA8C8DE8C} }, -/**/ {{0X3FE7F79D, 0XF4A0A520} }, -/**/ {{0X3FE12A19, 0XD7FC2119} }, -/**/ {{0XBFD11E72, 0XC6BE19DF} }, -/**/ {{0X3FB4FA57, 0X634E1B91} }, -/**/ {{0X3F8562A6, 0X47F96DF5} }, -/**/ {{0XBFA1C4B9, 0X373AF599} } }, -/**/ {{{0X3FEDE000, 0X26573DF5} }, -/**/ {{0X3FE808C0, 0X4DBCB960} }, -/**/ {{0X3FE11902, 0X7903E4B9} }, -/**/ {{0XBFD10EB2, 0X5CDFED06} }, -/**/ {{0X3FB504B0, 0XCCA681FA} }, -/**/ {{0X3F840238, 0X6F3CDE09} }, -/**/ {{0XBFA177EE, 0X9BA8FA6A} } }, -/**/ {{{0X3FEDFFFE, 0X35009B66} }, -/**/ {{0X3FE819CF, 0XC2CB5340} }, -/**/ {{0X3FE107FC, 0XB1C942B5} }, -/**/ {{0XBFD0FEEC, 0X230D7D92} }, -/**/ {{0X3FB50E5A, 0X75C5B4F1} }, -/**/ {{0X3F82A7E8, 0XE3C139D8} }, -/**/ {{0XBFA12BD5, 0X93FA642B} } }, -/**/ {{{0X3FEE2000, 0X492D4C68} }, -/**/ {{0X3FE82AD0, 0X5CCB8680} }, -/**/ {{0X3FE0F704, 0X928E55DF} }, -/**/ {{0XBFD0EF1C, 0XEE0B0721} }, -/**/ {{0X3FB51759, 0X937BFB74} }, -/**/ {{0X3F815359, 0X2BC9FDDB} }, -/**/ {{0XBFA0E06F, 0XEA1D1824} } }, -/**/ {{{0X3FEE4000, 0X9412BB65} }, -/**/ {{0X3FE83BBF, 0X14001A60} }, -/**/ {{0X3FE0E61D, 0X37F485DA} }, -/**/ {{0XBFD0DF48, 0X1B2BD37D} }, -/**/ {{0X3FB51FAF, 0X64024D14} }, -/**/ {{0X3F8004B9, 0X9B849698} }, -/**/ {{0XBFA095BF, 0X450A2434} } }, -/**/ {{{0X3FEE5FFF, 0X4758EF2F} }, -/**/ {{0X3FE84C9C, 0X1531C180} }, -/**/ {{0X3FE0D546, 0X8B7FECE7} }, -/**/ {{0XBFD0CF6E, 0X105BFE1E} }, -/**/ {{0X3FB5275E, 0XF9C5E03A} }, -/**/ {{0X3F7D77F2, 0X17AA1137} }, -/**/ {{0XBFA04BC5, 0X2A6891E1} } }, -/**/ {{{0X3FEE8000, 0X380F819F} }, -/**/ {{0X3FE85D69, 0X74CCC060} }, -/**/ {{0X3FE0C47E, 0X8F1DA5B5} }, -/**/ {{0XBFD0BF8D, 0X62AD700F} }, -/**/ {{0X3FB52E6C, 0X1F3FBC2B} }, -/**/ {{0X3F7AF1C3, 0XEE24AD7D} }, -/**/ {{0XBFA00282, 0XFECE26C9} } }, -/**/ {{{0X3FEEA000, 0XA6D8CB7B} }, -/**/ {{0X3FE86E25, 0XD00E3A60} }, -/**/ {{0X3FE0B3C6, 0XBA314D62} }, -/**/ {{0XBFD0AFA7, 0XE7CB2D84} }, -/**/ {{0X3FB534D9, 0X08E9071F} }, -/**/ {{0X3F787704, 0X4CE5E5C9} }, -/**/ {{0XBF9F73F4, 0X0EB7C9D5} } }, -/**/ {{{0X3FEEC000, 0X5A13BA60} }, -/**/ {{0X3FE87ED1, 0X19B163E0} }, -/**/ {{0X3FE0A31F, 0X2EBB7AD7} }, -/**/ {{0XBFD09FBE, 0X33A3FCE1} }, -/**/ {{0X3FB53AA8, 0X89D9AF5D} }, -/**/ {{0X3F760799, 0XF7F7040B} }, -/**/ {{0XBF9EE456, 0XD3F0B3FB} } }, -/**/ {{{0X3FEEDFFF, 0X58F8DD18} }, -/**/ {{0X3FE88F6B, 0X6681CA80} }, -/**/ {{0X3FE09287, 0XEC4360B3} }, -/**/ {{0XBFD08FD0, 0XB7CE07E5} }, -/**/ {{0X3FB53FDD, 0X7BDEDD3F} }, -/**/ {{0X3F73A366, 0X70C52E66} }, -/**/ {{0XBF9E5630, 0X5DCA7315} } }, -/**/ {{{0X3FEEFFFF, 0XBE033400} }, -/**/ {{0X3FE89FF5, 0XDD4D7960} }, -/**/ {{0X3FE081FF, 0XDFFE15BD} }, -/**/ {{0XBFD07FDE, 0XDAE56C0F} }, -/**/ {{0X3FB5447A, 0XF84D6F5D} }, -/**/ {{0X3F714A24, 0X7982941E} }, -/**/ {{0XBF9DC982, 0X81E68835} } }, -/**/ {{{0X3FEF2001, 0XE6B5125D} }, -/**/ {{0X3FE8B070, 0XBBE88160} }, -/**/ {{0X3FE07186, 0XDF7122E2} }, -/**/ {{0XBFD06FE8, 0XDE905325} }, -/**/ {{0X3FB54883, 0XB5DEEC7A} }, -/**/ {{0X3F6DF762, 0XB4A186D5} }, -/**/ {{0XBF9D3E4E, 0XDE20F495} } }, -/**/ {{{0X3FEF3FFD, 0XF770E0DB} }, -/**/ {{0X3FE8C0D8, 0X09E96380} }, -/**/ {{0X3FE06120, 0XF5A576A9} }, -/**/ {{0XBFD05FF3, 0X1D2912FF} }, -/**/ {{0X3FB54BF9, 0X8CD1001F} }, -/**/ {{0X3F6970FC, 0X6E90DC16} }, -/**/ {{0XBF9CB496, 0XD8EB587E} } }, -/**/ {{{0X3FEF5FFE, 0X4E16DA33} }, -/**/ {{0X3FE8D131, 0X29BCCDC0} }, -/**/ {{0X3FE050C8, 0XD33BA4E9} }, -/**/ {{0XBFD04FF8, 0XD74C83D2} }, -/**/ {{0X3FB54EE0, 0X592BB252} }, -/**/ {{0X3F64FF61, 0X7193EEB5} }, -/**/ {{0XBF9C2C5B, 0XA459AC86} } }, -/**/ {{{0X3FEF8000, 0X4576FF2E} }, -/**/ {{0X3FE8E17A, 0XCCE443A0} }, -/**/ {{0X3FE0407F, 0XD8A97B6C} }, -/**/ {{0XBFD03FFB, 0XC91B3E55} }, -/**/ {{0X3FB5513A, 0X5F3357F7} }, -/**/ {{0X3F60A2BA, 0X14C92B53} }, -/**/ {{0XBF9BA59E, 0X3E70DF71} } }, -/**/ {{{0X3FEF9FFF, 0X39B6A330} }, -/**/ {{0X3FE8F1B2, 0XA7F515A0} }, -/**/ {{0X3FE03048, 0X63064158} }, -/**/ {{0XBFD02FFE, 0XACBAADA8} }, -/**/ {{0X3FB55309, 0XF27448C0} }, -/**/ {{0X3F58B6D6, 0X4850006B} }, -/**/ {{0XBF9B205F, 0X742323DF} } }, -/**/ {{{0X3FEFC001, 0XAA76C0B9} }, -/**/ {{0X3FE901DC, 0X15D66D80} }, -/**/ {{0X3FE0201F, 0X28D9B4AA} }, -/**/ {{0XBFD01FFE, 0XA98D4C38} }, -/**/ {{0X3FB55452, 0X089780F8} }, -/**/ {{0X3F5050B5, 0X7F35C5BB} }, -/**/ {{0XBF9A9C9F, 0XE19247AF} } }, -/**/ {{{0X3FEFDFFE, 0X39A592CA} }, -/**/ {{0X3FE911F2, 0X6D88A780} }, -/**/ {{0X3FE01008, 0XE40C6538} }, -/**/ {{0XBFD01000, 0XD31688DE} }, -/**/ {{0X3FB55514, 0XE32F1816} }, -/**/ {{0X3F402A15, 0X4E1628D2} }, -/**/ {{0XBF9A1A5F, 0XF4FAF5A0} } }, -/**/ {{{0X3FEFF801, 0X8E92D1B0} }, -/**/ {{0X3FE91DFB, 0X9BB4BF00} }, -/**/ {{0X3FE003FF, 0XB884C5A9} }, -/**/ {{0XBFD003FF, 0X3876A954} }, -/**/ {{0X3FB55551, 0X5539DDFB} }, -/**/ {{0X3F2007E7, 0X7B95E6C2} }, -/**/ {{0XBF99B9A7, 0X18A3BA58} } }, - }; - - static const number - hij[241][16] = { /* x0,hij for (1/16,1) */ -/**/ {{{0x3fb04000, 0x00000000} }, -/**/ {{0x3fb03a6d, 0x1c06693d} }, -/**/ {{0xbc428a02, 0xd4e7f128} }, -/**/ {{0x3fefdf1f, 0xe92592ae} }, -/**/ {{0x3c88bfc0, 0xb5490162} }, -/**/ {{0xbfb01ead, 0x8f7e4151} }, -/**/ {{0xbc5395e8, 0x0b64d205} }, -/**/ {{0xbfd4d29f, 0x433dd49b} }, -/**/ {{0xbc75b19d, 0x4aa42633} }, -/**/ {{0x3fafda41, 0xce35961d} }, -/**/ {{0x3c4e6a5f, 0x425d7696} }, -/**/ {{0x3fc814dd, 0x6c1bb5e2} }, -/**/ {{0xbfaf4cb7, 0x2b33739f} }, -/**/ {{0xbfc048b2, 0xc267d8ec} }, -/**/ {{0x3fae9649, 0xe8ababc6} }, -/**/ {{0x3fb78293, 0xfe802692} } }, -/**/ {{{0x3fb10000, 0x00000000} }, -/**/ {{0x3fb0f99e, 0xa71d52a7} }, -/**/ {{0xbc22069f, 0xeec3624f} }, -/**/ {{0x3fefdc08, 0x9a49d2a9} }, -/**/ {{0x3c7780f7, 0x68b2ce25} }, -/**/ {{0xbfb0d9de, 0x9da73e1d} }, -/**/ {{0x3c4ebf46, 0xa1a487bf} }, -/**/ {{0xbfd4c669, 0xd13ea108} }, -/**/ {{0x3c7354bc, 0xebb4528c} }, -/**/ {{0x3fb0a137, 0x789374c1} }, -/**/ {{0xbc56c223, 0xc3f2c5c2} }, -/**/ {{0x3fc7f0e7, 0x79c60cda} }, -/**/ {{0xbfb05062, 0xcdcc7b81} }, -/**/ {{0xbfc019e4, 0xc5266783} }, -/**/ {{0x3fafd0b2, 0xf2540289} }, -/**/ {{0x3fb71107, 0xf6d3cd8a} } }, -/**/ {{{0x3fb20000, 0x00000000} }, -/**/ {{0x3fb1f86d, 0xbf082d59} }, -/**/ {{0xbc4095dc, 0x7732ef81} }, -/**/ {{0x3fefd7b3, 0x01722b81} }, -/**/ {{0xbc5e618c, 0x8a212e02} }, -/**/ {{0xbfb1d2c5, 0xee4e9cfa} }, -/**/ {{0x3c426273, 0x29abece0} }, -/**/ {{0xbfd4b551, 0x37eb7f46} }, -/**/ {{0x3c73b360, 0x01d8bf12} }, -/**/ {{0x3fb18fa7, 0x6adb6a7c} }, -/**/ {{0xbc5c00d8, 0x398999ad} }, -/**/ {{0x3fc7bea5, 0xf4a7cff3} }, -/**/ {{0xbfb13008, 0x61f84829} }, -/**/ {{0xbfbfb14f, 0xa8e135a1} }, -/**/ {{0x3fb0b532, 0x4324f177} }, -/**/ {{0x3fb6734a, 0x3498dd9d} } }, -/**/ {{{0x3fb30000, 0x00000000} }, -/**/ {{0x3fb2f719, 0x318a4a9a} }, -/**/ {{0x3c03fd17, 0x79b9801f} }, -/**/ {{0x3fefd31f, 0x48e238fe} }, -/**/ {{0xbc876a7a, 0xd8c45327} }, -/**/ {{0xbfb2cada, 0x852096e2} }, -/**/ {{0x3c460860, 0x11efd787} }, -/**/ {{0xbfd4a34b, 0x2e476a39} }, -/**/ {{0x3c7254f2, 0xeb11ee51} }, -/**/ {{0x3fb27c13, 0xc54ae225} }, -/**/ {{0x3c513096, 0x4ae66f0c} }, -/**/ {{0x3fc789ca, 0xef0d59d0} }, -/**/ {{0xbfb20c06, 0x6d9aaa8c} }, -/**/ {{0xbfbf2885, 0x846ba912} }, -/**/ {{0x3fb17c5f, 0xc697ef5e} }, -/**/ {{0x3fb5ce93, 0xcad31e6e} } }, -/**/ {{{0x3fb40000, 0x00000000} }, -/**/ {{0x3fb3f59f, 0x0e7c559d} }, -/**/ {{0x3c5ac4ce, 0x285df847} }, -/**/ {{0x3fefce4d, 0xa6ab93e9} }, -/**/ {{0xbc6be46b, 0x18a97736} }, -/**/ {{0xbfb3c211, 0x4d22b635} }, -/**/ {{0x3c42033c, 0x6950679f} }, -/**/ {{0xbfd49059, 0xc4d74033} }, -/**/ {{0x3c57dd7c, 0xd7e376aa} }, -/**/ {{0x3fb36662, 0xc0896a7c} }, -/**/ {{0xbc36cf6a, 0xd79232cf} }, -/**/ {{0x3fc75261, 0xa13a97a2} }, -/**/ {{0xbfb2e431, 0x5fdd1509} }, -/**/ {{0xbfbe9999, 0x6e52db32} }, -/**/ {{0x3fb23da4, 0xb0a71e9f} }, -/**/ {{0x3fb52335, 0xe3bc8178} } }, -/**/ {{{0x3fb50000, 0x00000000} }, -/**/ {{0x3fb4f3fd, 0x677292fb} }, -/**/ {{0x3c4008d3, 0x6264979e} }, -/**/ {{0x3fefc93e, 0x53a1ee0d} }, -/**/ {{0xbc64421a, 0x20fd2bdf} }, -/**/ {{0xbfb4b85f, 0x4aba88e3} }, -/**/ {{0x3c54f184, 0x3c9d1e89} }, -/**/ {{0xbfd47c7f, 0x25ae4668} }, -/**/ {{0xbc7d7581, 0x816630d1} }, -/**/ {{0x3fb44e7b, 0x07f85056} }, -/**/ {{0x3c56d63c, 0x910bdf4f} }, -/**/ {{0x3fc71875, 0xc439029c} }, -/**/ {{0xbfb3b85e, 0xf2bcfa10} }, -/**/ {{0xbfbe04bb, 0x9707b205} }, -/**/ {{0x3fb2f8c6, 0x95e3e0cc} }, -/**/ {{0x3fb47184, 0x8093431b} } }, -/**/ {{{0x3fb60000, 0x00000000} }, -/**/ {{0x3fb5f232, 0x4fd2d7b2} }, -/**/ {{0x3c58a8da, 0x4401318e} }, -/**/ {{0x3fefc3f1, 0x8b549418} }, -/**/ {{0x3c34d896, 0x836f8130} }, -/**/ {{0xbfb5adb9, 0x9cdd92e7} }, -/**/ {{0x3c4d4161, 0xeb397cc3} }, -/**/ {{0xbfd467bd, 0x93f8f1dc} }, -/**/ {{0xbc609d7b, 0xffc760ad} }, -/**/ {{0x3fb53443, 0xbea6b2fe} }, -/**/ {{0x3c5eb03c, 0x4b24f5db} }, -/**/ {{0x3fc6dc13, 0x8de3d005} }, -/**/ {{0xbfb48866, 0x37d2d99d} }, -/**/ {{0xbfbd6a1d, 0xf6663fcb} }, -/**/ {{0x3fb3ad8e, 0x0adff464} }, -/**/ {{0x3fb3b9d6, 0x4159c223} } }, -/**/ {{{0x3fb70000, 0x00000000} }, -/**/ {{0x3fb6f03b, 0xdcea4b0d} }, -/**/ {{0xbc33f00e, 0x512fa17d} }, -/**/ {{0x3fefbe67, 0x8c07a436} }, -/**/ {{0xbc84baaa, 0x46250d6f} }, -/**/ {{0xbfb6a215, 0x7e3ba4c7} }, -/**/ {{0xbc3504e7, 0x54503f8d} }, -/**/ {{0xbfd45217, 0x6b82d03a} }, -/**/ {{0x3c7d1f0d, 0xbebdd1db} }, -/**/ {{0x3fb617a4, 0x841d5604} }, -/**/ {{0xbc47168b, 0x6681c436} }, -/**/ {{0x3fc69d47, 0xaccec6ce} }, -/**/ {{0xbfb5541f, 0xa4715800} }, -/**/ {{0xbfbcc9f4, 0x335a1c1b} }, -/**/ {{0x3fb45bc6, 0xbac0061f} }, -/**/ {{0x3fb2fc84, 0x2b3853b6} } }, -/**/ {{{0x3fb80000, 0x00000000} }, -/**/ {{0x3fb7ee18, 0x2602f10f} }, -/**/ {{0xbc5cfb65, 0x4c0c3d98} }, -/**/ {{0x3fefb8a0, 0x96acfacc} }, -/**/ {{0xbc82962e, 0x18495af3} }, -/**/ {{0xbfb79568, 0x46635c89} }, -/**/ {{0x3c5ac468, 0xa6bfd498} }, -/**/ {{0xbfd43b8f, 0x2037b997} }, -/**/ {{0xbc72ad53, 0xe2f12373} }, -/**/ {{0x3fb6f885, 0x7900c4ee} }, -/**/ {{0x3c53145d, 0x0aef1f9d} }, -/**/ {{0x3fc65c1f, 0x4409ba0e} }, -/**/ {{0xbfb61b65, 0x1d176e0c} }, -/**/ {{0xbfbc2473, 0x8ad65152} }, -/**/ {{0x3fb5033f, 0x7bc246c1} }, -/**/ {{0x3fb239e9, 0x6db30b46} } }, -/**/ {{{0x3fb90000, 0x00000000} }, -/**/ {{0x3fb8ebc5, 0x4478fb28} }, -/**/ {{0x3c473288, 0x0cad24cc} }, -/**/ {{0x3fefb29c, 0xeedcd6d7} }, -/**/ {{0x3c8efa9e, 0x23ea50f0} }, -/**/ {{0xbfb887a7, 0x6ae09982} }, -/**/ {{0x3c5b2275, 0x53801511} }, -/**/ {{0xbfd42427, 0x3da0757c} }, -/**/ {{0xbc7199e5, 0x311c7ac8} }, -/**/ {{0x3fb7d6cf, 0x4388717b} }, -/**/ {{0xbc5c4eb2, 0x3dd070b4} }, -/**/ {{0x3fc618a7, 0xe6c2b5f3} }, -/**/ {{0xbfb6de12, 0x00313569} }, -/**/ {{0xbfbb79d2, 0xb6316619} }, -/**/ {{0x3fb5a3ca, 0x61af5c21} }, -/**/ {{0x3fb17263, 0x26e60289} } }, -/**/ {{{0x3fba0000, 0x00000000} }, -/**/ {{0x3fb9e941, 0x53cfdcf1} }, -/**/ {{0x3c5a332e, 0x1d69c47e} }, -/**/ {{0x3fefac5c, 0xdace3776} }, -/**/ {{0xbc8c9a78, 0x1ad91ab5} }, -/**/ {{0xbfb978c8, 0x8054ad75} }, -/**/ {{0xbc5e35b8, 0x8ed66c17} }, -/**/ {{0xbfd40be2, 0x665afed1} }, -/**/ {{0x3c62eeef, 0x08ef10fb} }, -/**/ {{0x3fb8b26b, 0x13c989d2} }, -/**/ {{0x3c329f11, 0xbfeab3ba} }, -/**/ {{0x3fc5d2ef, 0x93c8f97c} }, -/**/ {{0xbfb79c03, 0x30234881} }, -/**/ {{0xbfbaca49, 0xd0f650c8} }, -/**/ {{0x3fb63d3c, 0xce2dcccc} }, -/**/ {{0x3fb0a650, 0x26fb0af2} } }, -/**/ {{{0x3fbb0000, 0x00000000} }, -/**/ {{0x3fbae68a, 0x71c722b8} }, -/**/ {{0x3c4c014e, 0x6910b9db} }, -/**/ {{0x3fefa5e0, 0xa34ef42b} }, -/**/ {{0xbc836583, 0xeb56d5b9} }, -/**/ {{0xbfba68c1, 0x3b881779} }, -/**/ {{0xbc473a0d, 0x13a09314} }, -/**/ {{0xbfd3f2c3, 0x538e939c} }, -/**/ {{0xbc68ed49, 0xee53e648} }, -/**/ {{0x3fb98b42, 0xa7d45973} }, -/**/ {{0xbc523943, 0x461ca7c4} }, -/**/ {{0x3fc58b04, 0xb0f2e2bb} }, -/**/ {{0xbfb85517, 0x1c9d23dc} }, -/**/ {{0xbfba1612, 0x3e3b5a66} }, -/**/ {{0x3fb6cf6f, 0x7ef1d0b9} }, -/**/ {{0x3fafac21, 0x6617b315} } }, -/**/ {{{0x3fbc0000, 0x00000000} }, -/**/ {{0x3fbbe39e, 0xbe6f07c3} }, -/**/ {{0x3c5f7b8f, 0x29a05987} }, -/**/ {{0x3fef9f28, 0x93bb9192} }, -/**/ {{0x3c78260b, 0x7cd1bdab} }, -/**/ {{0xbfbb5787, 0x72759741} }, -/**/ {{0x3c52f93f, 0xa6767247} }, -/**/ {{0xbfd3d8cc, 0xd45bbe91} }, -/**/ {{0x3c664839, 0x2edc0762} }, -/**/ {{0x3fba6140, 0x4fa31d26} }, -/**/ {{0x3c400647, 0x97891510} }, -/**/ {{0x3fc540f6, 0x0668fd66} }, -/**/ {{0xbfb9092d, 0xcb2f6e8f} }, -/**/ {{0xbfb95d66, 0x8d902073} }, -/**/ {{0x3fb75a3e, 0x99c53d16} }, -/**/ {{0x3fae040c, 0x8f475e61} } }, -/**/ {{{0x3fbd0000, 0x00000000} }, -/**/ {{0x3fbce07c, 0x5c3cca32} }, -/**/ {{0x3c4138e6, 0x425918a7} }, -/**/ {{0x3fef9834, 0xf9f6d421} }, -/**/ {{0x3c6f3089, 0x8c22a239} }, -/**/ {{0xbfbc4511, 0x1d4e69a5} }, -/**/ {{0x3c254c0f, 0xd2083ce8} }, -/**/ {{0xbfd3be01, 0xcd488978} }, -/**/ {{0x3c5612db, 0x6362ec0f} }, -/**/ {{0x3fbb344e, 0xf0d94873} }, -/**/ {{0xbc182beb, 0xfdf7db72} }, -/**/ {{0x3fc4f4d2, 0xb9d86c04} }, -/**/ {{0xbfb9b828, 0xdf238807} }, -/**/ {{0xbfb8a082, 0x5f93ffd6} }, -/**/ {{0x3fb7dd89, 0xb6650b0c} }, -/**/ {{0x3fac5526, 0xb62676ef} } }, -/**/ {{{0x3fbe0000, 0x00000000} }, -/**/ {{0x3fbddd21, 0x701eba6e} }, -/**/ {{0x3c594eff, 0xcd76fe58} }, -/**/ {{0x3fef9106, 0x266112ba} }, -/**/ {{0x3c74c302, 0x6b7e18b1} }, -/**/ {{0xbfbd3154, 0x5777816c} }, -/**/ {{0x3c5dc7e4, 0x1f9dbddd} }, -/**/ {{0xbfd3a265, 0x37a90881} }, -/**/ {{0xbc75bd61, 0xeb7ba840} }, -/**/ {{0x3fbc045a, 0x0a52514b} }, -/**/ {{0xbc35ca88, 0xcff49a99} }, -/**/ {{0x3fc4a6aa, 0x498eeb56} }, -/**/ {{0xbfba61eb, 0xa09232cf} }, -/**/ {{0xbfb7dfa2, 0x4a464027} }, -/**/ {{0x3fb85933, 0xe633c053} }, -/**/ {{0x3faaa036, 0x3f920107} } }, -/**/ {{{0x3fbf0000, 0x00000000} }, -/**/ {{0x3fbed98c, 0x2190043b} }, -/**/ {{0xbc23a598, 0x592c7b13} }, -/**/ {{0x3fef899c, 0x6bcf4ad8} }, -/**/ {{0x3c55fd73, 0x912c09b0} }, -/**/ {{0xbfbe1c47, 0x607f91a0} }, -/**/ {{0x3c576677, 0x5b5db022} }, -/**/ {{0xbfd385fa, 0x21046f5f} }, -/**/ {{0x3c7f01c3, 0x4487f4b8} }, -/**/ {{0x3fbcd14d, 0xb77f2d51} }, -/**/ {{0x3c57a86d, 0x30a2ccfe} }, -/**/ {{0x3fc4568c, 0x8782b530} }, -/**/ {{0xbfbb065b, 0x02b7ad2d} }, -/**/ {{0xbfb71b03, 0xbd215555} }, -/**/ {{0x3fb8cd23, 0xb9c1c1de} }, -/**/ {{0x3fa8e602, 0x8dbfa69b} } }, -/**/ {{{0x3fc00000, 0x00000000} }, -/**/ {{0x3fbfd5ba, 0x9aac2f6e} }, -/**/ {{0xbc4cd376, 0x86760c17} }, -/**/ {{0x3fef81f8, 0x1f81f820} }, -/**/ {{0xbc8f81f8, 0x1f81f820} }, -/**/ {{0xbfbf05e0, 0x9d0dc11b} }, -/**/ {{0xbc35a199, 0x1d821725} }, -/**/ {{0xbfd368c3, 0xaa76e1d7} }, -/**/ {{0xbc672d4c, 0xc796f8cd} }, -/**/ {{0x3fbd9b16, 0xb391c2e3} }, -/**/ {{0x3c58051b, 0x8086c51d} }, -/**/ {{0x3fc40489, 0x94488c86} }, -/**/ {{0xbfbba55d, 0xa98401c8} }, -/**/ {{0xbfb652e4, 0xe5127e64} }, -/**/ {{0x3fb93943, 0x442e53ae} }, -/**/ {{0x3fa72753, 0x86286f75} } }, -/**/ {{{0x3fc08000, 0x00000000} }, -/**/ {{0x3fc068d5, 0x84212b3e} }, -/**/ {{0xbc69e2d2, 0x83019bfd} }, -/**/ {{0x3fef7a19, 0x991bb133} }, -/**/ {{0x3c7a956a, 0x66627723} }, -/**/ {{0xbfbfee16, 0x97c8e137} }, -/**/ {{0x3c4d9399, 0x66dbe7af} }, -/**/ {{0xbfd34ac5, 0x0810323a} }, -/**/ {{0x3c6a1a57, 0x6bc6c512} }, -/**/ {{0x3fbe61a2, 0x5c75a6f9} }, -/**/ {{0xbc492b99, 0xd75c8f85} }, -/**/ {{0x3fc3b0b1, 0xd9fa3f20} }, -/**/ {{0xbfbc3edb, 0xee66d309} }, -/**/ {{0xbfb58784, 0x905eeb33} }, -/**/ {{0x3fb99d80, 0x1c65bb14} }, -/**/ {{0x3fa564f1, 0x18a09884} } }, -/**/ {{{0x3fc10000, 0x00000000} }, -/**/ {{0x3fc0e6ad, 0xccf40882} }, -/**/ {{0xbc6d71a3, 0x1bb98d0d} }, -/**/ {{0x3fef7201, 0x32978bad} }, -/**/ {{0x3c816476, 0x599381e9} }, -/**/ {{0xbfc06a70, 0x011b81fd} }, -/**/ {{0xbc422f5d, 0x9ba697ca} }, -/**/ {{0xbfd32c01, 0x802fc0a5} }, -/**/ {{0x3c7d8e47, 0x08a20868} }, -/**/ {{0x3fbf24de, 0xb59597fe} }, -/**/ {{0xbc43288f, 0x410d31eb} }, -/**/ {{0x3fc35b16, 0x070feb24} }, -/**/ {{0xbfbcd2bf, 0xe4565b78} }, -/**/ {{0xbfb4b922, 0x128768c6} }, -/**/ {{0x3fb9f9cb, 0x5c42a097} }, -/**/ {{0x3fa39fa2, 0xc7f97f2e} } }, -/**/ {{{0x3fc18000, 0x00000000} }, -/**/ {{0x3fc16465, 0x41060850} }, -/**/ {{0x3c66bcee, 0x8ae7ea92} }, -/**/ {{0x3fef69af, 0x483f492b} }, -/**/ {{0xbc6e3280, 0x57db963e} }, -/**/ {{0xbfc0dd19, 0xdacaa844} }, -/**/ {{0xbc6133c7, 0xad7fc21e} }, -/**/ {{0xbfd30c7c, 0x6addaea8} }, -/**/ {{0xbc71443d, 0x89161c76} }, -/**/ {{0x3fbfe4ba, 0x6a6d3cd2} }, -/**/ {{0x3c50d4b8, 0x423ee67a} }, -/**/ {{0x3fc303c7, 0x092e569a} }, -/**/ {{0xbfbd60f5, 0x5b11d3b6} }, -/**/ {{0xbfb3e7fd, 0x283b5c55} }, -/**/ {{0x3fba4e19, 0x9d9a6ab7} }, -/**/ {{0x3fa1d82f, 0x3487cc29} } }, -/**/ {{{0x3fc20000, 0x00000000} }, -/**/ {{0x3fc1e1fa, 0xfb043727} }, -/**/ {{0xbc4b4859, 0x14dacf8c} }, -/**/ {{0x3fef6124, 0x38a14f5e} }, -/**/ {{0x3c798e9e, 0x001f6124} }, -/**/ {{0xbfc14f04, 0x59d3fb7c} }, -/**/ {{0x3c531efa, 0x4cc99cb2} }, -/**/ {{0xbfd2ec39, 0x31219b34} }, -/**/ {{0xbc618697, 0x6e004611} }, -/**/ {{0x3fc05092, 0x68736312} }, -/**/ {{0x3c67aad4, 0x8a06e4b5} }, -/**/ {{0x3fc2aad6, 0x07eca5ec} }, -/**/ {{0xbfbde969, 0xe19fe31c} }, -/**/ {{0xbfb31455, 0xdb6b9127} }, -/**/ {{0x3fba9a62, 0xf53dd9ee} }, -/**/ {{0x3fa00f5b, 0xa8e4ede0} } }, -/**/ {{{0x3fc28000, 0x00000000} }, -/**/ {{0x3fc25f6e, 0x171a535c} }, -/**/ {{0x3c67c6d7, 0xbde1a310} }, -/**/ {{0x3fef5860, 0x64866d22} }, -/**/ {{0x3c88c6ff, 0xd1f6326c} }, -/**/ {{0xbfc1c02b, 0x13c11396} }, -/**/ {{0xbc51b469, 0xffeb1a0f} }, -/**/ {{0xbfd2cb3b, 0x4c571b0f} }, -/**/ {{0x3c6e4f76, 0x2fb0b163} }, -/**/ {{0x3fc0ad06, 0xf5c213ab} }, -/**/ {{0x3c625bf2, 0xabea9e66} }, -/**/ {{0x3fc25054, 0x5f93bbb2} }, -/**/ {{0xbfbe6c0c, 0xc80a32c8} }, -/**/ {{0xbfb23e6c, 0x678d0d1e} }, -/**/ {{0x3fbadea2, 0xebf8ae4b} }, -/**/ {{0x3f9c8bd7, 0x527f133b} } }, -/**/ {{{0x3fc30000, 0x00000000} }, -/**/ {{0x3fc2dcbd, 0xb2fba1ff} }, -/**/ {{0x3c58f287, 0x05561534} }, -/**/ {{0x3fef4f64, 0x2ee76e94} }, -/**/ {{0x3c80ec89, 0xc6da5865} }, -/**/ {{0xbfc23089, 0xb322f867} }, -/**/ {{0x3c4c2b54, 0x5fcd0d6f} }, -/**/ {{0xbfd2a986, 0x45802261} }, -/**/ {{0xbc79a132, 0x5ae78b8a} }, -/**/ {{0x3fc107b3, 0x35a9d974} }, -/**/ {{0x3c5ef22d, 0xb725e335} }, -/**/ {{0x3fc1f453, 0x9bd98832} }, -/**/ {{0xbfbee8cf, 0x2057aad4} }, -/**/ {{0xbfb16681, 0x1e1bc3a1} }, -/**/ {{0x3fbb1ad8, 0x759c8f58} }, -/**/ {{0x3f98f941, 0x0b15b4aa} } }, -/**/ {{{0x3fc38000, 0x00000000} }, -/**/ {{0x3fc359e8, 0xedeb99a4} }, -/**/ {{0xbc6a5fd7, 0x4e4604c6} }, -/**/ {{0x3fef462f, 0xfce28238} }, -/**/ {{0x3c83dc01, 0xd90595d1} }, -/**/ {{0xbfc2a01b, 0xf7edfa6d} }, -/**/ {{0xbc6b11fb, 0x4a3b5c9a} }, -/**/ {{0xbfd2871d, 0xb4959402} }, -/**/ {{0xbc4a3702, 0x2fcf7ea3} }, -/**/ {{0x3fc1608f, 0xd8d7fe8c} }, -/**/ {{0x3c61ac60, 0xf8f1d41c} }, -/**/ {{0x3fc196e5, 0x729a89ca} }, -/**/ {{0xbfbf5fa3, 0xbec74f31} }, -/**/ {{0xbfb08cd4, 0x4b6c9767} }, -/**/ {{0x3fbb4f05, 0xe624ce15} }, -/**/ {{0x3f956871, 0xddb2020c} } }, -/**/ {{{0x3fc40000, 0x00000000} }, -/**/ {{0x3fc3d6ee, 0xe8c6626c} }, -/**/ {{0x3c661a3b, 0x0ce9281b} }, -/**/ {{0x3fef3cc4, 0x35b0713c} }, -/**/ {{0x3c81d0a7, 0xe69ea094} }, -/**/ {{0xbfc30edd, 0xb7d169f0} }, -/**/ {{0x3c6b3394, 0xae999b97} }, -/**/ {{0xbfd26405, 0x3fd62b3c} }, -/**/ {{0x3c73e339, 0xc0736df9} }, -/**/ {{0x3fc1b795, 0xe8e57ee3} }, -/**/ {{0xbc6130dc, 0x0a42c7f6} }, -/**/ {{0x3fc1381b, 0xbe93b8e5} }, -/**/ {{0xbfbfd07f, 0x394e1bf7} }, -/**/ {{0xbfaf634c, 0x37bb5315} }, -/**/ {{0x3fbb7b30, 0xe501e57b} }, -/**/ {{0x3f91dae1, 0x20503792} } }, -/**/ {{{0x3fc48000, 0x00000000} }, -/**/ {{0x3fc453ce, 0xc6092a9e} }, -/**/ {{0x3c61f653, 0xb3a5a78b} }, -/**/ {{0x3fef3321, 0x4299ace8} }, -/**/ {{0xbc87414c, 0x3a742b30} }, -/**/ {{0xbfc37cca, 0xde8b2323} }, -/**/ {{0x3c649378, 0x7b50aedf} }, -/**/ {{0xbfd24040, 0x9b13f4d0} }, -/**/ {{0x3c7e271f, 0xb7dc85c0} }, -/**/ {{0x3fc20cbe, 0xc9024068} }, -/**/ {{0x3c50921f, 0x88ef3da7} }, -/**/ {{0x3fc0d808, 0x7a1f1270} }, -/**/ {{0xbfc01dab, 0xf32d5436} }, -/**/ {{0xbfadaa6d, 0x02e6f09c} }, -/**/ {{0x3fbb9f62, 0x5e9cd766} }, -/**/ {{0x3f8ca3fe, 0xab964c04} } }, -/**/ {{{0x3fc50000, 0x00000000} }, -/**/ {{0x3fc4d087, 0xa9da4f17} }, -/**/ {{0x3c61f323, 0xf1adf158} }, -/**/ {{0x3fef2947, 0x8eeb3352} }, -/**/ {{0x3c871eb0, 0x8799a164} }, -/**/ {{0xbfc3e9df, 0x6e36e75c} }, -/**/ {{0x3c541555, 0x4e37666f} }, -/**/ {{0xbfd21bd3, 0x87008bd0} }, -/**/ {{0xbc609e14, 0xc24ff75f} }, -/**/ {{0x3fc26004, 0x36860504} }, -/**/ {{0xbc58f8ca, 0x1ebc8c40} }, -/**/ {{0x3fc076bd, 0xb9f4ead3} }, -/**/ {{0xbfc05012, 0xed70ddd5} }, -/**/ {{0xbfabef8a, 0x33e194b1} }, -/**/ {{0x3fbbbba6, 0x7423a91f} }, -/**/ {{0x3f859e6a, 0xdd99da12} } }, -/**/ {{{0x3fc58000, 0x00000000} }, -/**/ {{0x3fc54d18, 0xba11570a} }, -/**/ {{0x3c618282, 0xf2884073} }, -/**/ {{0x3fef1f37, 0x87eb4d7d} }, -/**/ {{0x3c8476f0, 0xedda13e6} }, -/**/ {{0xbfc45617, 0x7f997c7c} }, -/**/ {{0xbc46bf5b, 0x6423ceda} }, -/**/ {{0xbfd1f6c1, 0xd0784ec7} }, -/**/ {{0xbc74ec12, 0xd106a8e0} }, -/**/ {{0x3fc2b160, 0x4967338d} }, -/**/ {{0x3c5309c0, 0x61339c25} }, -/**/ {{0x3fc0144d, 0xa7f42962} }, -/**/ {{0xbfc07f71, 0x73dbaeec} }, -/**/ {{0xbfaa3322, 0x2aeda9a4} }, -/**/ {{0x3fbbd00c, 0x69b152b3} }, -/**/ {{0x3f7d4f90, 0x4c782821} } }, -/**/ {{{0x3fc60000, 0x00000000} }, -/**/ {{0x3fc5c981, 0x1e3ec26a} }, -/**/ {{0xbc5054ab, 0x2c010f3d} }, -/**/ {{0x3fef14f1, 0x9cce28eb} }, -/**/ {{0xbc8b7c25, 0x2708cd6e} }, -/**/ {{0xbfc4c16f, 0x42678d07} }, -/**/ {{0x3c5f55ba, 0xc1560017} }, -/**/ {{0xbfd1d10f, 0x4fccc153} }, -/**/ {{0x3c529588, 0x1bcc361d} }, -/**/ {{0x3fc300cd, 0x74979f8c} }, -/**/ {{0xbc6b1da5, 0x0bc1e891} }, -/**/ {{0x3fbf6194, 0xfbe70208} }, -/**/ {{0xbfc0abc5, 0x4b1c266f} }, -/**/ {{0xbfa875b2, 0x3b74e858} }, -/**/ {{0x3fbbdca6, 0x92e46f11} }, -/**/ {{0x3f6f0b17, 0x9de94aef} } }, -/**/ {{{0x3fc68000, 0x00000000} }, -/**/ {{0x3fc645bf, 0xffb3aa74} }, -/**/ {{0xbc3f536b, 0x677c2cb4} }, -/**/ {{0x3fef0a76, 0x3eaa4ed6} }, -/**/ {{0x3c888c52, 0x0b06c761} }, -/**/ {{0xbfc52be2, 0xfd884489} }, -/**/ {{0x3c67ec59, 0xbe5c728a} }, -/**/ {{0xbfd1aabf, 0xe80e4e0a} }, -/**/ {{0xbc71320e, 0xe90c909e} }, -/**/ {{0x3fc34e46, 0x864781ca} }, -/**/ {{0x3c42fcb3, 0x126138ee} }, -/**/ {{0x3fbe988d, 0x013b5d4f} }, -/**/ {{0xbfc0d50d, 0x122409a2} }, -/**/ {{0xbfa6b7b6, 0x7bb562c1} }, -/**/ {{0x3fbbe18a, 0x3df8dee8} }, -/**/ {{0x3f3e4009, 0x8809e1ef} } }, -/**/ {{{0x3fc70000, 0x00000000} }, -/**/ {{0x3fc6c1d4, 0x898933d9} }, -/**/ {{0xbc52954a, 0x7603c427} }, -/**/ {{0x3feeffc5, 0xe06cfb34} }, -/**/ {{0xbc85c037, 0x379877c2} }, -/**/ {{0xbfc5956f, 0x0f53a52c} }, -/**/ {{0x3c4d46a2, 0xe566376c} }, -/**/ {{0xbfd183d7, 0x86559c11} }, -/**/ {{0x3c7d2520, 0x64734c7f} }, -/**/ {{0x3fc399c6, 0xa80eddd5} }, -/**/ {{0x3c616c26, 0x40fbef6f} }, -/**/ {{0x3fbdcda7, 0xf4b571a7} }, -/**/ {{0xbfc0fb48, 0x3fd42996} }, -/**/ {{0xbfa4f9a9, 0x95c85118} }, -/**/ {{0x3fbbdecf, 0x9d795df4} }, -/**/ {{0xbf672003, 0xb85bf719} } }, -/**/ {{{0x3fc78000, 0x00000000} }, -/**/ {{0x3fc73dbd, 0xe8a7d202} }, -/**/ {{0xbc55ad0f, 0x6d4a665d} }, -/**/ {{0x3feef4e0, 0xf6ce5590} }, -/**/ {{0xbc833df6, 0x556900ef} }, -/**/ {{0xbfc5fe0f, 0xedcc9488} }, -/**/ {{0x3c5078de, 0xd2b9e35c} }, -/**/ {{0xbfd15c5a, 0x210cab36} }, -/**/ {{0x3c67fa93, 0xf55e532a} }, -/**/ {{0x3fc3e349, 0x5efd9a41} }, -/**/ {{0xbc6cf709, 0xc8573a12} }, -/**/ {{0x3fbd010a, 0x6c903aef} }, -/**/ {{0xbfc11e77, 0x20571328} }, -/**/ {{0xbfa33c04, 0x9a1875dd} }, -/**/ {{0x3fbbd491, 0xb09ec0ce} }, -/**/ {{0xbf78d197, 0x35537a65} } }, -/**/ {{{0x3fc80000, 0x00000000} }, -/**/ {{0x3fc7b97b, 0x4bce5b02} }, -/**/ {{0x3c5347b0, 0xb4f881ca} }, -/**/ {{0x3feee9c7, 0xf8458e02} }, -/**/ {{0xbc616380, 0x7ba71fe1} }, -/**/ {{0xbfc665c2, 0x26d69eeb} }, -/**/ {{0xbc572a33, 0xfdb5eea8} }, -/**/ {{0xbfd1344b, 0xb737e8f3} }, -/**/ {{0xbc757b70, 0x62badf41} }, -/**/ {{0x3fc42aca, 0x8b929b0b} }, -/**/ {{0x3c43cdb5, 0x7a8b7d91} }, -/**/ {{0x3fbc32d8, 0xf683981c} }, -/**/ {{0xbfc13e9a, 0xd22d5ecc} }, -/**/ {{0xbfa17f3e, 0xd35c8c33} }, -/**/ {{0x3fbbc2ee, 0x2a73307e} }, -/**/ {{0xbf82ee04, 0x2bddc834} } }, -/**/ {{{0x3fc88000, 0x00000000} }, -/**/ {{0x3fc8350b, 0xe398ebc8} }, -/**/ {{0xbc55a913, 0x32b9c90d} }, -/**/ {{0x3feede7b, 0x5cfce04c} }, -/**/ {{0x3c8507c2, 0x3b51a72f} }, -/**/ {{0xbfc6cc82, 0x6067718b} }, -/**/ {{0x3c6d00ca, 0xdbfc430f} }, -/**/ {{0xbfd10bb0, 0x4fbf6fe8} }, -/**/ {{0x3c321748, 0x53749c72} }, -/**/ {{0x3fc47046, 0x699a36ad} }, -/**/ {{0xbc63924c, 0x3994d40c} }, -/**/ {{0x3fbb6338, 0x0dfb7483} }, -/**/ {{0xbfc15bb5, 0x42ee5820} }, -/**/ {{0xbf9f879b, 0x385194fc} }, -/**/ {{0x3fbbaa05, 0x57d040e9} }, -/**/ {{0xbf895566, 0xada71ca0} } }, -/**/ {{{0x3fc90000, 0x00000000} }, -/**/ {{0x3fc8b06e, 0xe2879c29} }, -/**/ {{0xbc6118cd, 0x30308c4f} }, -/**/ {{0x3feed2fb, 0x9ec57f51} }, -/**/ {{0xbc83fdc5, 0xc0d106ba} }, -/**/ {{0xbfc7324d, 0x58b40d27} }, -/**/ {{0x3c68e240, 0xfc062163} }, -/**/ {{0xbfd0e28b, 0xf8b8a2bf} }, -/**/ {{0xbc7b8d8a, 0x64c55b39} }, -/**/ {{0x3fc4b3b9, 0x8ff46730} }, -/**/ {{0xbc5af146, 0x988563da} }, -/**/ {{0x3fba924c, 0x1277a10d} }, -/**/ {{0xbfc175c9, 0x2bbfd54d} }, -/**/ {{0xbf9c1448, 0x6c522340} }, -/**/ {{0x3fbb89fa, 0x044f2f6b} }, -/**/ {{0xbf8f9cc7, 0xaaecc742} } }, -/**/ {{{0x3fc98000, 0x00000000} }, -/**/ {{0x3fc92ba3, 0x7d050272} }, -/**/ {{0xbc60d3de, 0xd0ff4764} }, -/**/ {{0x3feec749, 0x390b6afe} }, -/**/ {{0xbc5c3d17, 0x4e3659ca} }, -/**/ {{0xbfc7971f, 0xe659b3de} }, -/**/ {{0x3c4cab11, 0x373f554d} }, -/**/ {{0xbfd0b8e2, 0xc6b052a4} }, -/**/ {{0x3c7da014, 0x6f3b74bc} }, -/**/ {{0x3fc4f520, 0xf0432146} }, -/**/ {{0xbc6769ad, 0xa8027290} }, -/**/ {{0x3fb9c039, 0x3e17b570} }, -/**/ {{0xbfc18cda, 0x0d8833a4} }, -/**/ {{0xbf98a567, 0x4627d340} }, -/**/ {{0x3fbb62f1, 0x5e42eff7} }, -/**/ {{0xbf92e10a, 0x7ee3bed3} } }, -/**/ {{{0x3fca0000, 0x00000000} }, -/**/ {{0x3fc9a6a8, 0xe96c8626} }, -/**/ {{0x3c4cf601, 0xe7b4348e} }, -/**/ {{0x3feebb64, 0xa8c932d7} }, -/**/ {{0x3c20538d, 0x79aae302} }, -/**/ {{0xbfc7faf6, 0xf88295fe} }, -/**/ {{0xbc687a81, 0x932909e9} }, -/**/ {{0xbfd08eb8, 0xd3f5a07b} }, -/**/ {{0xbc620a05, 0xfb7d6aaa} }, -/**/ {{0x3fc53479, 0xd6814372} }, -/**/ {{0xbc53c682, 0x0a0c6620} }, -/**/ {{0x3fb8ed23, 0x9c562d77} }, -/**/ {{0xbfc1a0ec, 0x2cdd89fd} }, -/**/ {{0xbf953bd4, 0xfec9df82} }, -/**/ {{0x3fbb3512, 0xd9d3f0f6} }, -/**/ {{0xbf95e1ab, 0x4534ccf5} } }, -/**/ {{{0x3fca8000, 0x00000000} }, -/**/ {{0x3fca217e, 0x601081a6} }, -/**/ {{0xbc60def8, 0xa60af374} }, -/**/ {{0x3feeaf4e, 0x6c7ba732} }, -/**/ {{0x3c89fa72, 0xe91fffe1} }, -/**/ {{0xbfc85dcf, 0x970642c3} }, -/**/ {{0xbc5732c2, 0x5b7f0ad0} }, -/**/ {{0xbfd06412, 0x3fe5c74d} }, -/**/ {{0xbc7d0053, 0x4a82f9b1} }, -/**/ {{0x3fc571c1, 0xe882973d} }, -/**/ {{0x3c59d9a3, 0x9090f12c} }, -/**/ {{0x3fb8192f, 0x00f5d0e0} }, -/**/ {{0xbfc1b204, 0x8db53983} }, -/**/ {{0xbf91d869, 0xbdd7b47e} }, -/**/ {{0x3fbb0088, 0x1355a903} }, -/**/ {{0xbf98cf57, 0x724a2ad9} } }, -/**/ {{{0x3fcb0000, 0x00000000} }, -/**/ {{0x3fca9c23, 0x1b403279} }, -/**/ {{0x3c60e8bb, 0xe89cca85} }, -/**/ {{0x3feea307, 0x04157b4f} }, -/**/ {{0x3c8ad743, 0xfd8bf1f0} }, -/**/ {{0xbfc8bfa6, 0xe285e2fd} }, -/**/ {{0xbc6ce765, 0x9c834c8f} }, -/**/ {{0xbfd038f3, 0x2e38fd26} }, -/**/ {{0x3c6a42ec, 0xef212a80} }, -/**/ {{0x3fc5acf7, 0x255d65d5} }, -/**/ {{0xbc619fba, 0xbe486771} }, -/**/ {{0x3fb7447e, 0xff244e15} }, -/**/ {{0xbfc1c028, 0xeed71b69} }, -/**/ {{0xbf8cf7f0, 0xaceecf68} }, -/**/ {{0x3fbac57c, 0xb0ee161b} }, -/**/ {{0xbf9ba92d, 0xefc8f53e} } }, -/**/ {{{0x3fcb8000, 0x00000000} }, -/**/ {{0x3fcb1696, 0x574d780c} }, -/**/ {{0xbc585ab8, 0xfc15a673} }, -/**/ {{0x3fee968e, 0xf0f2da5a} }, -/**/ {{0xbc6fffe1, 0x69710f0d} }, -/**/ {{0xbfc9207a, 0x148444b5} }, -/**/ {{0xbc66661a, 0x1802fa91} }, -/**/ {{0xbfd00d5f, 0xc65096ca} }, -/**/ {{0x3c7f2a2e, 0x8920e744} }, -/**/ {{0x3fc5e617, 0xe4be288d} }, -/**/ {{0x3c67fa48, 0x99be934f} }, -/**/ {{0x3fb66f36, 0xe0d4c87a} }, -/**/ {{0xbfc1cb5f, 0xc5179ce8} }, -/**/ {{0xbf864e9c, 0x1011bb6c} }, -/**/ {{0x3fba841e, 0x43a75476} }, -/**/ {{0xbf9e6e5b, 0x845fc859} } }, -/**/ {{{0x3fcc0000, 0x00000000} }, -/**/ {{0x3fcb90d7, 0x529260a2} }, -/**/ {{0x3c217b10, 0xd2e0e5ab} }, -/**/ {{0x3fee89e6, 0xb5ccf172} }, -/**/ {{0x3c820357, 0x153be26a} }, -/**/ {{0xbfc98046, 0x7f79bfd6} }, -/**/ {{0xbc0799ee, 0xf5d60955} }, -/**/ {{0xbfcfc2b8, 0x650d32f4} }, -/**/ {{0xbc6b59de, 0x4d01b49e} }, -/**/ {{0x3fc61d22, 0xd625e475} }, -/**/ {{0xbc68013f, 0xe23c6105} }, -/**/ {{0x3fb59979, 0x9e54f300} }, -/**/ {{0xbfc1d3b0, 0x365c2b85} }, -/**/ {{0xbf7f6cc9, 0x0afb6b97} }, -/**/ {{0x3fba3c9c, 0x28035c12} }, -/**/ {{0xbfa08f0d, 0x8331488a} } }, -/**/ {{{0x3fcc8000, 0x00000000} }, -/**/ {{0x3fcc0ae5, 0x4d768467} }, -/**/ {{0xbc604cdb, 0xf55f26dc} }, -/**/ {{0x3fee7d0e, 0xd6ad70cb} }, -/**/ {{0x3c8e6761, 0xee20d17d} }, -/**/ {{0xbfc9df09, 0x8ee3fcf8} }, -/**/ {{0x3c62daa3, 0xed723e81} }, -/**/ {{0xbfcf69d9, 0x3efdc9b4} }, -/**/ {{0x3c6c7b6f, 0x85a20110} }, -/**/ {{0x3fc65217, 0x0013c661} }, -/**/ {{0xbc678a0c, 0xab1387be} }, -/**/ {{0x3fb4c369, 0xd61f268e} }, -/**/ {{0xbfc1d922, 0x146d6110} }, -/**/ {{0xbf726199, 0xc0b0ed0a} }, -/**/ {{0x3fb9ef27, 0x6629c856} }, -/**/ {{0xbfa1dbda, 0xc1ea955d} } }, -/**/ {{{0x3fcd0000, 0x00000000} }, -/**/ {{0x3fcc84bf, 0x8a742e6e} }, -/**/ {{0xbc595bdd, 0x0682ea26} }, -/**/ {{0x3fee7007, 0xd8e205ea} }, -/**/ {{0x3c816199, 0x7b2991c1} }, -/**/ {{0xbfca3cc0, 0xc751a854} }, -/**/ {{0xbc66a2fd, 0x4efbc78c} }, -/**/ {{0xbfcf102a, 0x76f43baa} }, -/**/ {{0x3c6cfc38, 0x38d996b1} }, -/**/ {{0x3fc684f3, 0xbf1a9ad6} }, -/**/ {{0x3c52eaf7, 0x7c3b6690} }, -/**/ {{0x3fb3ed29, 0xc4ebba84} }, -/**/ {{0xbfc1dbbd, 0xd79a6a53} }, -/**/ {{0xbf55fa5b, 0xfd09510e} }, -/**/ {{0x3fb99bf2, 0x91c74d50} }, -/**/ {{0xbfa31d41, 0x3002c38b} } }, -/**/ {{{0x3fcd8000, 0x00000000} }, -/**/ {{0x3fccfe65, 0x4e1d5395} }, -/**/ {{0x3c647b9a, 0x3f71eafb} }, -/**/ {{0x3fee62d2, 0x42efd10e} }, -/**/ {{0x3c850a65, 0xa021973e} }, -/**/ {{0xbfca9969, 0xc66a1be4} }, -/**/ {{0x3c326164, 0x3753f036} }, -/**/ {{0xbfceb5b4, 0x6b550477} }, -/**/ {{0xbc64cacb, 0xa3ef610f} }, -/**/ {{0x3fc6b5b8, 0xc4e2c295} }, -/**/ {{0x3c66b228, 0x98b2ac7f} }, -/**/ {{0x3fb316db, 0x3e03bb80} }, -/**/ {{0xbfc1db8c, 0x99312ba1} }, -/**/ {{0x3f5ce5b0, 0x8536556f} }, -/**/ {{0x3fb94331, 0xa9b62abf} }, -/**/ {{0xbfa452f3, 0xb36f42fc} } }, -/**/ {{{0x3fce0000, 0x00000000} }, -/**/ {{0x3fcd77d5, 0xdf205736} }, -/**/ {{0x3c6c648d, 0x1534597e} }, -/**/ {{0x3fee556e, 0x9c86d7c6} }, -/**/ {{0xbc830c25, 0x34c9abfd} }, -/**/ {{0xbfcaf502, 0x42f10c89} }, -/**/ {{0xbc411261, 0xf8576d95} }, -/**/ {{0xbfce5a7f, 0x7b1596d9} }, -/**/ {{0x3c574baa, 0x78f7ae18} }, -/**/ {{0x3fc6e466, 0x171949b1} }, -/**/ {{0xbc6ff86b, 0x52f9c399} }, -/**/ {{0x3fb2409f, 0xa3d6f244} }, -/**/ {{0xbfc1d898, 0x0dceacbf} }, -/**/ {{0x3f73c3b6, 0xdc715080} }, -/**/ {{0x3fb8e519, 0xf78687ab} }, -/**/ {{0xbfa57cac, 0x6b1251ec} } }, -/**/ {{{0x3fce8000, 0x00000000} }, -/**/ {{0x3fcdf110, 0x864c9d9e} }, -/**/ {{0xbc35818b, 0x53bf4781} }, -/**/ {{0x3fee47dd, 0x6e7576a6} }, -/**/ {{0x3c89d322, 0x24b84595} }, -/**/ {{0xbfcb4f88, 0x0cc64717} }, -/**/ {{0xbc624035, 0x44bb97a3} }, -/**/ {{0xbfcdfe94, 0x046e8a3b} }, -/**/ {{0xbc6078ee, 0xd278da00} }, -/**/ {{0x3fc710fc, 0x0e4ccbb7} }, -/**/ {{0xbc58c89c, 0x1da51f71} }, -/**/ {{0x3fb16a97, 0xe0d7022a} }, -/**/ {{0xbfc1d2ea, 0x7f8b58f8} }, -/**/ {{0x3f800ed5, 0xaf259d18} }, -/**/ {{0x3fb881e1, 0xeefd29c7} }, -/**/ {{0xbfa69a2c, 0xae6aa0c1} } }, -/**/ {{{0x3fcf0000, 0x00000000} }, -/**/ {{0x3fce6a14, 0x8e96ec4d} }, -/**/ {{0x3c6866b2, 0x2029f765} }, -/**/ {{0x3fee3a1f, 0x429bd423} }, -/**/ {{0xbc86174a, 0x48961291} }, -/**/ {{0xbfcba8f9, 0x0ce18ad9} }, -/**/ {{0x3c62e3e9, 0xb50eb15d} }, -/**/ {{0xbfcda1fa, 0x63927806} }, -/**/ {{0xbbed7b15, 0x8073bacf} }, -/**/ {{0x3fc73b7b, 0x54b8d3bb} }, -/**/ {{0x3c602afb, 0x74869c1c} }, -/**/ {{0x3fb094e4, 0x60993bd6} }, -/**/ {{0xbfc1ca8e, 0xc806a157} }, -/**/ {{0x3f862263, 0xa854d278} }, -/**/ {{0x3fb819c1, 0x0d9e7452} }, -/**/ {{0xbfa7ab3d, 0x08743869} } }, -/**/ {{{0x3fcf8000, 0x00000000} }, -/**/ {{0x3fcee2e1, 0x451d980d} }, -/**/ {{0xbc59a770, 0x8c46ba91} }, -/**/ {{0x3fee2c34, 0xa3df5666} }, -/**/ {{0xbc8ef949, 0x19a92865} }, -/**/ {{0xbfcc0153, 0x454a9009} }, -/**/ {{0x3c5572bf, 0xda1123ca} }, -/**/ {{0xbfcd44ba, 0xf169cd42} }, -/**/ {{0xbc6db0f2, 0xf1052e0a} }, -/**/ {{0x3fc763e4, 0xe5006ad1} }, -/**/ {{0x3c66e21a, 0x3e902796} }, -/**/ {{0x3faf7f4a, 0x12812c7d} }, -/**/ {{0xbfc1bf90, 0x4a558d9d} }, -/**/ {{0x3f8c1b52, 0x2be7fbfd} }, -/**/ {{0x3fb7acef, 0xba5b0263} }, -/**/ {{0xbfa8afad, 0x2dddf4e5} } }, -/**/ {{{0x3fd00000, 0x00000000} }, -/**/ {{0x3fcf5b75, 0xf92c80dd} }, -/**/ {{0x3c68ab6e, 0x3cf7afbd} }, -/**/ {{0x3fee1e1e, 0x1e1e1e1e} }, -/**/ {{0x3c6e1e1e, 0x1e1e1e1e} }, -/**/ {{0xbfcc5894, 0xd10d4986} }, -/**/ {{0x3c5f00e2, 0xc4a6886a} }, -/**/ {{0xbfcce6de, 0x0253d27e} }, -/**/ {{0xbc65d764, 0x3c5fce89} }, -/**/ {{0x3fc78a3a, 0x08d88b02} }, -/**/ {{0x3c4fc5d6, 0x32bd57e4} }, -/**/ {{0x3fadd5f2, 0x6a622b44} }, -/**/ {{0xbfc1b1fa, 0xecd7c4e0} }, -/**/ {{0x3f90fc3e, 0x1fc8b549} }, -/**/ {{0x3fb73ba7, 0x25728acf} }, -/**/ {{0xbfa9a753, 0xeeba051f} } }, -/**/ {{{0x3fd04000, 0x00000000} }, -/**/ {{0x3fcfd3d1, 0xfc40dbe4} }, -/**/ {{0x3c437146, 0xf3a1c5ea} }, -/**/ {{0x3fee0fdc, 0x3e228818} }, -/**/ {{0xbc62e075, 0x8c042ef5} }, -/**/ {{0xbfccaebb, 0xe42a71b9} }, -/**/ {{0xbc69fa0a, 0x8025fd1d} }, -/**/ {{0xbfcc886b, 0xe4ed28e5} }, -/**/ {{0xbc59ccc3, 0x7604b95a} }, -/**/ {{0x3fc7ae7c, 0x57a32fb9} }, -/**/ {{0x3c67393b, 0xe36848c2} }, -/**/ {{0x3fac2dff, 0x5a1b7b6f} }, -/**/ {{0xbfc1a1db, 0x12f690d4} }, -/**/ {{0x3f93dc65, 0xa575dc1d} }, -/**/ {{0x3fb6c621, 0x28a107f6} }, -/**/ {{0xbfaa920f, 0x23d2c35f} } }, -/**/ {{{0x3fd08000, 0x00000000} }, -/**/ {{0x3fd025fa, 0x510665b6} }, -/**/ {{0xbc7672df, 0x6832fa48} }, -/**/ {{0x3fee016f, 0x9196b776} }, -/**/ {{0x3c81da3a, 0xb14efc08} }, -/**/ {{0xbfcd03c6, 0xcb847375} }, -/**/ {{0xbc6819f2, 0xfc4c6f52} }, -/**/ {{0xbfcc296c, 0xe0dbf8a5} }, -/**/ {{0xbc55cc84, 0x27fb1c17} }, -/**/ {{0x3fc7d0ad, 0xb4fbbf40} }, -/**/ {{0x3c6378b3, 0x41b71641} }, -/**/ {{0x3faa87ad, 0x440404cd} }, -/**/ {{0xbfc18f3d, 0x96d156a8} }, -/**/ {{0x3f96ad9b, 0x9ef40490} }, -/**/ {{0x3fb64c98, 0x27a95e14} }, -/**/ {{0xbfab6fc3, 0x97cfdce0} } }, -/**/ {{{0x3fd0c000, 0x00000000} }, -/**/ {{0x3fd061ee, 0xa03d6291} }, -/**/ {{0xbc45f760, 0xdb154301} }, -/**/ {{0x3fedf2d8, 0xa6f82a61} }, -/**/ {{0xbc6cedbb, 0x560866af} }, -/**/ {{0xbfcd57b3, 0xecc8c02c} }, -/**/ {{0x3c641512, 0x85b9541c} }, -/**/ {{0xbfcbc9e9, 0x35a209c0} }, -/**/ {{0x3c65bfd8, 0x4914a5d1} }, -/**/ {{0x3fc7f0d0, 0x4f358b07} }, -/**/ {{0xbc60dc70, 0x3f47a5cc} }, -/**/ {{0x3fa8e337, 0x50af01c1} }, -/**/ {{0xbfc17a2f, 0xc2daf61b} }, -/**/ {{0x3f996f63, 0x57b649f0} }, -/**/ {{0x3fb5cf46, 0xf14fef28} }, -/**/ {{0xbfac405c, 0xec5a22c2} } }, -/**/ {{{0x3fd10000, 0x00000000} }, -/**/ {{0x3fd09dc5, 0x97d86362} }, -/**/ {{0x3c762e47, 0x390cb865} }, -/**/ {{0x3fede418, 0x0d8b5ae6} }, -/**/ {{0x3c719298, 0x23f66cf0} }, -/**/ {{0xbfcdaa81, 0xc655a596} }, -/**/ {{0x3c666d0d, 0x6a90480b} }, -/**/ {{0xbfcb69e9, 0x1974fd6c} }, -/**/ {{0xbc68e199, 0xec28723f} }, -/**/ {{0x3fc80ee6, 0x9dcd2641} }, -/**/ {{0x3c37ccfe, 0x45b4bb82} }, -/**/ {{0x3fa740d7, 0x64b143be} }, -/**/ {{0xbfc162bf, 0x4b6b7330} }, -/**/ {{0x3f9c2147, 0x7a20d203} }, -/**/ {{0x3fb54e68, 0xa0d6b625} }, -/**/ {{0xbfad03cd, 0x7b6e81ad} } }, -/**/ {{{0x3fd14000, 0x00000000} }, -/**/ {{0x3fd0d97e, 0xe509acb3} }, -/**/ {{0x3c747c31, 0x7bd5a3eb} }, -/**/ {{0x3fedd52e, 0x554f6dcf} }, -/**/ {{0xbc75c686, 0xddcd060b} }, -/**/ {{0xbfcdfc2e, 0xef1cb578} }, -/**/ {{0xbc46ae20, 0xd1677d50} }, -/**/ {{0xbfcb0974, 0xb81cdb34} }, -/**/ {{0x3c36ed8e, 0xda61c86c} }, -/**/ {{0x3fc82af3, 0x5fcd53c1} }, -/**/ {{0xbc424fe5, 0x57b559e7} }, -/**/ {{0x3fa5a0c6, 0x17013aef} }, -/**/ {{0xbfc148fa, 0x484940dd} }, -/**/ {{0x3f9ec2da, 0x1737ca6d} }, -/**/ {{0x3fb4ca38, 0x800ba495} }, -/**/ {{0xbfadba0e, 0x35128042} } }, -/**/ {{{0x3fd18000, 0x00000000} }, -/**/ {{0x3fd1151a, 0x362431ca} }, -/**/ {{0xbc74dc8d, 0xc9077b9f} }, -/**/ {{0x3fedc61c, 0x0ef1f116} }, -/**/ {{0xbc8fe39f, 0x2d41c166} }, -/**/ {{0xbfce4cba, 0x1681d2c9} }, -/**/ {{0x3c340fb4, 0x369a3c18} }, -/**/ {{0xbfcaa894, 0x31d921e2} }, -/**/ {{0x3c6bf59e, 0x64c48da4} }, -/**/ {{0x3fc844f9, 0x9a284cea} }, -/**/ {{0xbc563be0, 0x629cfeb8} }, -/**/ {{0x3fa4033a, 0xa7f26285} }, -/**/ {{0xbfc12cef, 0x2e2d72ea} }, -/**/ {{0x3fa0a9da, 0x554d151d} }, -/**/ {{0x3fb442f1, 0xe9f9174f} }, -/**/ {{0xbfae631e, 0x799e467c} } }, -/**/ {{{0x3fd1c000, 0x00000000} }, -/**/ {{0x3fd15097, 0x3a9ce547} }, -/**/ {{0xbc7796ba, 0x7f9ca328} }, -/**/ {{0x3fedb6e1, 0xcbc2abaa} }, -/**/ {{0xbc823b7a, 0xc39a4e7c} }, -/**/ {{0xbfce9c22, 0x0436f806} }, -/**/ {{0xbc64a5ec, 0x885803cb} }, -/**/ {{0xbfca474f, 0x9a4c8963} }, -/**/ {{0x3c671cf3, 0x6793b663} }, -/**/ {{0x3fc85cfc, 0x9606243b} }, -/**/ {{0x3c5fd2b2, 0x1dcd45ed} }, -/**/ {{0x3fa2686a, 0xf8cc655f} }, -/**/ {{0xbfc10eac, 0xc8460b94} }, -/**/ {{0x3fa1e9bc, 0x0d6eb5ba} }, -/**/ {{0x3fb3b8d0, 0x2e4749c2} }, -/**/ {{0xbfaeff03, 0xf0d19201} } }, -/**/ {{{0x3fd20000, 0x00000000} }, -/**/ {{0x3fd18bf5, 0xa30bf178} }, -/**/ {{0x3c630ca4, 0x748b1bf9} }, -/**/ {{0x3feda780, 0x1da7801e} }, -/**/ {{0xbc861ff8, 0x961ff896} }, -/**/ {{0xbfceea65, 0x9814cb11} }, -/**/ {{0xbc5f9845, 0x34cb01ca} }, -/**/ {{0xbfc9e5ae, 0xf76f9fa1} }, -/**/ {{0x3c688b7a, 0xa3ee6a86} }, -/**/ {{0x3fc872ff, 0xdf090624} }, -/**/ {{0x3c31016f, 0x6fbad4bb} }, -/**/ {{0x3fa0d08b, 0x83fe02bc} }, -/**/ {{0xbfc0ee42, 0x31b98637} }, -/**/ {{0x3fa320e6, 0x5b309f28} }, -/**/ {{0x3fb32c0e, 0x755cbc43} }, -/**/ {{0xbfaf8dca, 0x5dea1ddb} } }, -/**/ {{{0x3fd24000, 0x00000000} }, -/**/ {{0x3fd1c735, 0x212dd884} }, -/**/ {{0xbc67d9ac, 0x78cb2f2e} }, -/**/ {{0x3fed97f7, 0x971063d2} }, -/**/ {{0x3c67a20b, 0xc8b326b7} }, -/**/ {{0xbfcf3783, 0xc9f01359} }, -/**/ {{0x3c4a8b96, 0xd0a651ad} }, -/**/ {{0xbfc983ba, 0x408a6757} }, -/**/ {{0x3c6dfff9, 0xe6424f06} }, -/**/ {{0x3fc88707, 0x41881aad} }, -/**/ {{0xbc63baf9, 0x2204fd29} }, -/**/ {{0x3f9e779e, 0xabd6e10d} }, -/**/ {{0xbfc0cbbe, 0xcf2eab41} }, -/**/ {{0x3fa44f31, 0x1659f377} }, -/**/ {{0x3fb29ce7, 0xa54a8a94} }, -/**/ {{0xbfb007c1, 0xb87973d7} } }, -/**/ {{{0x3fd28000, 0x00000000} }, -/**/ {{0x3fd20255, 0x67e47c96} }, -/**/ {{0xbc618323, 0x28f4290e} }, -/**/ {{0x3fed8848, 0xcaeb6c2a} }, -/**/ {{0x3c81e70d, 0xa08296a2} }, -/**/ {{0xbfcf837b, 0xa96c2792} }, -/**/ {{0xbc6ab5ce, 0xc6884369} }, -/**/ {{0xbfc92179, 0x5d351cdb} }, -/**/ {{0x3c617000, 0x68719d81} }, -/**/ {{0x3fc89916, 0xc8c1ca07} }, -/**/ {{0xbc6a3339, 0x18b0f81b} }, -/**/ {{0x3f9b54d0, 0x0caf6121} }, -/**/ {{0xbfc0a732, 0x485ba392} }, -/**/ {{0x3fa57477, 0xc250c31e} }, -/**/ {{0x3fb20b96, 0x4790b4a8} }, -/**/ {{0xbfb04223, 0x4ac23178} } }, -/**/ {{{0x3fd2c000, 0x00000000} }, -/**/ {{0x3fd23d56, 0x2b381042} }, -/**/ {{0xbc5c5317, 0x16200088} }, -/**/ {{0x3fed7874, 0x4c98f347} }, -/**/ {{0xbc8a7dac, 0x9a72647e} }, -/**/ {{0xbfcfce4c, 0x5dca68a2} }, -/**/ {{0x3c6433de, 0x8fb9ffdd} }, -/**/ {{0xbfc8bef4, 0x246041ce} }, -/**/ {{0xbc66c620, 0x1fb39160} }, -/**/ {{0x3fc8a932, 0xbd062535} }, -/**/ {{0xbc6e24c7, 0xfbc3a86c} }, -/**/ {{0x3f98390b, 0x64d0109d} }, -/**/ {{0xbfc080ac, 0x819f2998} }, -/**/ {{0x3fa69099, 0x8784ffb8} }, -/**/ {{0x3fb17854, 0x6fc55e9b} }, -/**/ {{0xbfb07618, 0x5f970a81} } }, -/**/ {{{0x3fd30000, 0x00000000} }, -/**/ {{0x3fd27837, 0x2057ef46} }, -/**/ {{0xbc7077cd, 0xd36dfc81} }, -/**/ {{0x3fed687a, 0xafdfd5ba} }, -/**/ {{0xbc782e68, 0xe19d8d3d} }, -/**/ {{0xbfd00bfa, 0x92db6fdb} }, -/**/ {{0x3c7854cd, 0xc0af523f} }, -/**/ {{0xbfc85c32, 0x5b640da2} }, -/**/ {{0x3c5d5bdd, 0x5e6f23d6} }, -/**/ {{0x3fc8b75f, 0xa1da32d2} }, -/**/ {{0x3c2788df, 0x29860bfe} }, -/**/ {{0x3f9524ad, 0xee810d60} }, -/**/ {{0xbfc0583d, 0x95a69dea} }, -/**/ {{0x3fa7a379, 0x2b4d3dec} }, -/**/ {{0x3fb0e35b, 0xa3290dfe} }, -/**/ {{0xbfb0a3b2, 0x19e12287} } }, -/**/ {{{0x3fd34000, 0x00000000} }, -/**/ {{0x3fd2b2f7, 0xfd9b5fe2} }, -/**/ {{0x3c2423cf, 0xc1c2d443} }, -/**/ {{0x3fed585c, 0x88e1caa2} }, -/**/ {{0xbc2c8af2, 0x01239e18} }, -/**/ {{0xbfd0303a, 0xab890af7} }, -/**/ {{0x3c7d42bf, 0x726290e6} }, -/**/ {{0xbfc7f93b, 0xb5175de0} }, -/**/ {{0x3c5d5d4b, 0xe0ddc367} }, -/**/ {{0x3fc8c3a2, 0x3414de7c} }, -/**/ {{0x3c5ade9b, 0xba92bfce} }, -/**/ {{0x3f921811, 0xda70853d} }, -/**/ {{0xbfc02df5, 0xcf23aaf0} }, -/**/ {{0x3fa8acfd, 0x06445ff8} }, -/**/ {{0x3fb04ce4, 0xc130eba4} }, -/**/ {{0xbfb0cb04, 0x29de3135} } }, -/**/ {{{0x3fd38000, 0x00000000} }, -/**/ {{0x3fd2ed98, 0x7a823cfe} }, -/**/ {{0x3c6b9125, 0x8ea012ca} }, -/**/ {{0x3fed481a, 0x6c0fd782} }, -/**/ {{0x3c82dda4, 0x85ff74ea} }, -/**/ {{0xbfd053e6, 0x2f5c1e18} }, -/**/ {{0xbc679cf2, 0x8ec637b8} }, -/**/ {{0xbfc79617, 0xd0ee3e3b} }, -/**/ {{0xbc4e91e0, 0x732049a6} }, -/**/ {{0x3fc8cdff, 0x67f6478d} }, -/**/ {{0xbc5cb659, 0xf5079e63} }, -/**/ {{0x3f8e271c, 0x8e8ef686} }, -/**/ {{0xbfc001e5, 0xa2940881} }, -/**/ {{0x3fa9ad0e, 0xf937caae} }, -/**/ {{0x3faf6a4f, 0xda1e257f} }, -/**/ {{0xbfb0ec24, 0xb07d42be} } }, -/**/ {{{0x3fd3c000, 0x00000000} }, -/**/ {{0x3fd32818, 0x4fb58952} }, -/**/ {{0xbc7a95f0, 0xa9939f2f} }, -/**/ {{0x3fed37b4, 0xee1ee130} }, -/**/ {{0x3c747541, 0x6fbb1f2d} }, -/**/ {{0xbfd076fc, 0xe022dd0d} }, -/**/ {{0x3c6d8659, 0x5534523a} }, -/**/ {{0xbfc732ce, 0x3a201d6b} }, -/**/ {{0xbc56a551, 0xc98a3a62} }, -/**/ {{0x3fc8d67c, 0x673a29b8} }, -/**/ {{0xbc54ae9d, 0xff95efe6} }, -/**/ {{0x3f882eee, 0x74ce6814} }, -/**/ {{0xbfbfa83b, 0x503ba8f4} }, -/**/ {{0x3faaa39c, 0x60b63f75} }, -/**/ {{0x3fae38b8, 0xf07ff274} }, -/**/ {{0xbfb1072c, 0x2200fe4d} } }, -/**/ {{{0x3fd40000, 0x00000000} }, -/**/ {{0x3fd36277, 0x3707ebcc} }, -/**/ {{0xbc6963a5, 0x44b672d8} }, -/**/ {{0x3fed272c, 0xa3fc5b1a} }, -/**/ {{0x3c8ae01d, 0x272ca3fc} }, -/**/ {{0xbfd0997e, 0x8aec9d8e} }, -/**/ {{0x3c74aeda, 0x72595f36} }, -/**/ {{0xbfc6cf66, 0x66d5c0ff} }, -/**/ {{0x3c410e2a, 0x3ca66cc1} }, -/**/ {{0x3fc8dd1e, 0x8f2617b5} }, -/**/ {{0xbc6d173e, 0x4facfb67} }, -/**/ {{0x3f82483b, 0x33966883} }, -/**/ {{0xbfbf495d, 0x2b05b16b} }, -/**/ {{0x3fab9096, 0x074fdeaf} }, -/**/ {{0x3fad0571, 0x9c4605c9} }, -/**/ {{0xbfb11c35, 0x280318fd} } }, -/**/ {{{0x3fd44000, 0x00000000} }, -/**/ {{0x3fd39cb4, 0xeb76157c} }, -/**/ {{0xbc72f4da, 0x5a214713} }, -/**/ {{0x3fed1682, 0x22c31625} }, -/**/ {{0x3c8ac111, 0xd5e51b41} }, -/**/ {{0xbfd0bb6b, 0x07e9a89a} }, -/**/ {{0x3c76fb53, 0x7faa1dda} }, -/**/ {{0xbfc66be7, 0xb75f0772} }, -/**/ {{0xbc69a77d, 0xee6d618b} }, -/**/ {{0x3fc8e1eb, 0x6e943d69} }, -/**/ {{0xbc6982c4, 0xc5ec9ebe} }, -/**/ {{0x3f78e73c, 0x9c2d3c0c} }, -/**/ {{0xbfbee752, 0x7059f387} }, -/**/ {{0x3fac73f0, 0x16982f58} }, -/**/ {{0x3fabd0e4, 0xc146b407} }, -/**/ {{0xbfb12b5c, 0x82f43254} } }, -/**/ {{{0x3fd48000, 0x00000000} }, -/**/ {{0x3fd3d6d1, 0x29271134} }, -/**/ {{0x3c7137ca, 0x41cc958a} }, -/**/ {{0x3fed05b5, 0xffb0304c} }, -/**/ {{0xbc8fc921, 0x33e896e5} }, -/**/ {{0xbfd0dcc2, 0x3a49e254} }, -/**/ {{0x3c704578, 0x925cb599} }, -/**/ {{0xbfc60859, 0x75708502} }, -/**/ {{0xbc5f88bc, 0x9feebe6c} }, -/**/ {{0x3fc8e4e8, 0xc3fb5c1c} }, -/**/ {{0x3c6de114, 0xd6b77a05} }, -/**/ {{0x3f6ac6b3, 0xdbc6c857} }, -/**/ {{0xbfbe823c, 0xdeabd793} }, -/**/ {{0x3fad4da2, 0x06fb52a7} }, -/**/ {{0x3faa9b7b, 0x2bea698c} }, -/**/ {{0xbfb134c0, 0xeb32d745} } }, -/**/ {{{0x3fd4c000, 0x00000000} }, -/**/ {{0x3fd410cb, 0xad6c7d33} }, -/**/ {{0xbc7b0c8b, 0xae13b512} }, -/**/ {{0x3fecf4c8, 0xd0182625} }, -/**/ {{0x3c8e6308, 0xf4103798} }, -/**/ {{0xbfd0fd84, 0x101a5438} }, -/**/ {{0x3c425fcd, 0x7d2e3e34} }, -/**/ {{0xbfc5a4c2, 0xd36904f6} }, -/**/ {{0x3c5d3583, 0x54f27bb6} }, -/**/ {{0x3fc8e61c, 0x7b74b00c} }, -/**/ {{0x3c32f7ad, 0xefe568b6} }, -/**/ {{0x3f402f60, 0xaa3667f2} }, -/**/ {{0xbfbe1a3e, 0x4c9859c0} }, -/**/ {{0x3fae1da6, 0x8e77c589} }, -/**/ {{0x3fa9659b, 0x6ed5823e} }, -/**/ {{0xbfb13882, 0xf1d3d420} } }, -/**/ {{{0x3fd50000, 0x00000000} }, -/**/ {{0x3fd44aa4, 0x36c2af0a} }, -/**/ {{0xbc75d5e4, 0x3c55b3ba} }, -/**/ {{0x3fece3bb, 0x295c0773} }, -/**/ {{0xbc826fd5, 0x91851b41} }, -/**/ {{0xbfd11db0, 0x8221a582} }, -/**/ {{0x3c7e9654, 0xa9f31d11} }, -/**/ {{0xbfc5412a, 0xeb9ef661} }, -/**/ {{0x3c573faf, 0x5e60433c} }, -/**/ {{0x3fc8e58c, 0xacc06b3a} }, -/**/ {{0xbc5dba9a, 0x64dd81ed} }, -/**/ {{0xbf625ff7, 0xcfe3f01e} }, -/**/ {{0xbfbdaf78, 0x9dae4b1c} }, -/**/ {{0x3faee3fb, 0x8e4e3e16} }, -/**/ {{0x3fa82fa9, 0xc2c60fed} }, -/**/ {{0xbfb136c4, 0xe13555d9} } }, -/**/ {{{0x3fd54000, 0x00000000} }, -/**/ {{0x3fd4845a, 0x84d0c21b} }, -/**/ {{0x3c71e28a, 0x7563c6a6} }, -/**/ {{0x3fecd28d, 0xa0decfad} }, -/**/ {{0xbc72b2c8, 0x49610c12} }, -/**/ {{0xbfd13d47, 0x93bb8da8} }, -/**/ {{0x3c5df07a, 0x1b48d912} }, -/**/ {{0xbfc4dd98, 0xbfb5c8b7} }, -/**/ {{0x3c58a9ff, 0x39a108d7} }, -/**/ {{0x3fc8e33f, 0x99496dc4} }, -/**/ {{0x3c380d8b, 0x19d3995c} }, -/**/ {{0xbf743d59, 0xba1bc2d2} }, -/**/ {{0xbfbd420d, 0xb77862a1} }, -/**/ {{0x3fafa0a1, 0xffb9511c} }, -/**/ {{0x3fa6fa07, 0xe8a86cad} }, -/**/ {{0xbfb12faa, 0x9d75a109} } }, -/**/ {{{0x3fd58000, 0x00000000} }, -/**/ {{0x3fd4bdee, 0x586890e7} }, -/**/ {{0xbc6e4dc7, 0x7c22a757} }, -/**/ {{0x3fecc140, 0xcbfae3a7} }, -/**/ {{0xbc41045d, 0xd8b6f9b9} }, -/**/ {{0xbfd15c49, 0x52b34cdc} }, -/**/ {{0x3c729992, 0x2daa60ac} }, -/**/ {{0xbfc47a13, 0x37fb39ef} }, -/**/ {{0x3c5cb3b2, 0x3482d371} }, -/**/ {{0x3fc8df3b, 0xaa28e022} }, -/**/ {{0xbc61a8ab, 0x969a5447} }, -/**/ {{0xbf7f2135, 0xc651ecb4} }, -/**/ {{0xbfbcd21f, 0x76cc63f7} }, -/**/ {{0x3fb029ce, 0xefdf4de1} }, -/**/ {{0x3fa5c515, 0x0de3bf96} }, -/**/ {{0xbfb12359, 0x84e55ab4} } }, -/**/ {{{0x3fd5c000, 0x00000000} }, -/**/ {{0x3fd4f75f, 0x73869979} }, -/**/ {{0xbc595a1c, 0xf7ff1108} }, -/**/ {{0x3fecafd5, 0x3ff7b52c} }, -/**/ {{0x3c86e099, 0x684b6314} }, -/**/ {{0xbfd17ab5, 0xd71d366e} }, -/**/ {{0x3c602f2c, 0xae2f7b71} }, -/**/ {{0xbfc416a1, 0x22cc956f} }, -/**/ {{0x3c61d29e, 0xe98c24c1} }, -/**/ {{0x3fc8d987, 0x6e2a4f9f} }, -/**/ {{0xbc60de73, 0x4a6a7880} }, -/**/ {{0xbf84ed52, 0x909e42ec} }, -/**/ {{0xbfbc5fcf, 0xa56263a8} }, -/**/ {{0x3fb07e7b, 0x0d159803} }, -/**/ {{0x3fa4912d, 0xb2ddf20b} }, -/**/ {{0xbfb111f8, 0x508c8585} } }, -/**/ {{{0x3fd60000, 0x00000000} }, -/**/ {{0x3fd530ad, 0x9951cd4a} }, -/**/ {{0xbc625664, 0x80884082} }, -/**/ {{0x3fec9e4b, 0x91ff8d87} }, -/**/ {{0xbc7723ff, 0x1b0da370} }, -/**/ {{0xbfd1988d, 0x432f5908} }, -/**/ {{0x3c7d065e, 0xf8714cda} }, -/**/ {{0xbfc3b349, 0x3403e07c} }, -/**/ {{0x3c6b571d, 0x2717fbb0} }, -/**/ {{0x3fc8d229, 0x97d0e938} }, -/**/ {{0x3c66b228, 0xb08a0625} }, -/**/ {{0xbf8a3464, 0xc2fe9cde} }, -/**/ {{0xbfbbeb3f, 0xefb6f244} }, -/**/ {{0x3fb0ce5a, 0x39e67c0b} }, -/**/ {{0x3fa35eab, 0x93b4fb73} }, -/**/ {{0xbfb0fbae, 0xf4d86f78} } }, -/**/ {{{0x3fd64000, 0x00000000} }, -/**/ {{0x3fd569d8, 0x8e1b4cd8} }, -/**/ {{0xbc6fec61, 0xe713cfe2} }, -/**/ {{0x3fec8ca4, 0x57157fc9} }, -/**/ {{0x3c70da14, 0x515734ba} }, -/**/ {{0xbfd1b5cf, 0xc3195094} }, -/**/ {{0x3c740cce, 0xa9537e45} }, -/**/ {{0xbfc35012, 0x046cee83} }, -/**/ {{0xbc651b6c, 0xe446fd10} }, -/**/ {{0x3fc8c928, 0xfb5e6a95} }, -/**/ {{0x3c656cd2, 0x82469bf3} }, -/**/ {{0xbf8f6568, 0xa4afbb1b} }, -/**/ {{0xbfbb7491, 0xdb3aba50} }, -/**/ {{0x3fb11972, 0xb9fd56ec} }, -/**/ {{0x3fa22de5, 0x9329e15e} }, -/**/ {{0xbfb0e0a6, 0x8287d93d} } }, -/**/ {{{0x3fd68000, 0x00000000} }, -/**/ {{0x3fd5a2e0, 0x175e0f4e} }, -/**/ {{0x3c713b7a, 0x8f82e457} }, -/**/ {{0x3fec7ae0, 0x240b83ae} }, -/**/ {{0xbc885b56, 0x10d398ed} }, -/**/ {{0xbfd1d27d, 0x8cdb4db0} }, -/**/ {{0x3c11d95f, 0x2db0447f} }, -/**/ {{0xbfc2ed02, 0x11425541} }, -/**/ {{0xbc11d124, 0x6b2cbaa3} }, -/**/ {{0x3fc8be8c, 0x8cdc5c4d} }, -/**/ {{0xbc542511, 0x794444b0} }, -/**/ {{0xbf923ffd, 0xd25a5415} }, -/**/ {{0xbfbafbe6, 0xbcd1df44} }, -/**/ {{0x3fb15fcc, 0x26bdf05c} }, -/**/ {{0x3fa0ff2f, 0xa7b853e6} }, -/**/ {{0xbfb0c109, 0x07e9a35f} } }, -/**/ {{{0x3fd6c000, 0x00000000} }, -/**/ {{0x3fd5dbc3, 0xfbbe768d} }, -/**/ {{0x3c6ea0ec, 0x1b76f7da} }, -/**/ {{0x3fec68ff, 0x8d78b9ce} }, -/**/ {{0xbc83ab41, 0x4cb5a0c3} }, -/**/ {{0xbfd1ee96, 0xe01c5e6e} }, -/**/ {{0x3c73922c, 0xfb76d8dd} }, -/**/ {{0xbfc28a1f, 0xbbb23677} }, -/**/ {{0x3c6e592a, 0x288601f2} }, -/**/ {{0x3fc8b25b, 0x5e282403} }, -/**/ {{0xbbef7d58, 0x707e09fa} }, -/**/ {{0xbf94c1e0, 0xb65add31} }, -/**/ {{0xbfba815f, 0xafa52f1b} }, -/**/ {{0x3fb1a16f, 0x63712acc} }, -/**/ {{0x3f9fa5b5, 0x95a8d3ad} }, -/**/ {{0xbfb09d01, 0x72814750} } }, -/**/ {{{0x3fd70000, 0x00000000} }, -/**/ {{0x3fd61484, 0x0309cfe2} }, -/**/ {{0xbc7a7257, 0x15711f00} }, -/**/ {{0x3fec5703, 0x27afd9eb} }, -/**/ {{0x3c63c2ab, 0xb32c1d72} }, -/**/ {{0xbfd20a1c, 0x06000419} }, -/**/ {{0xbc7b5fe7, 0xf51a3a28} }, -/**/ {{0xbfc22771, 0x486ad2c8} }, -/**/ {{0xbc499ab5, 0xf84a7eae} }, -/**/ {{0x3fc8a49c, 0x9d027817} }, -/**/ {{0xbc53fcab, 0x2e376ecc} }, -/**/ {{0xbf973831, 0xeaabcb23} }, -/**/ {{0xbfba051d, 0x8c46fbce} }, -/**/ {{0x3fb1de66, 0x9132e9cc} }, -/**/ {{0x3f9d5269, 0xd48d5d65} }, -/**/ {{0xbfb074bb, 0x712354a4} } }, -/**/ {{{0x3fd74000, 0x00000000} }, -/**/ {{0x3fd64d1f, 0xf635c1c6} }, -/**/ {{0xbc7fa403, 0xe7c0fdbe} }, -/**/ {{0x3fec44eb, 0x86b5cbf8} }, -/**/ {{0xbc6a4101, 0xbc5b562d} }, -/**/ {{0xbfd2250d, 0x50fb21ad} }, -/**/ {{0xbc750066, 0xa39bdc1a} }, -/**/ {{0xbfc1c4fc, 0xdf2ed728} }, -/**/ {{0x3c6a87bb, 0x006772e9} }, -/**/ {{0x3fc89557, 0x9122b9b7} }, -/**/ {{0xbc05454e, 0x45b04f75} }, -/**/ {{0xbf99a2c9, 0x6c7888f1} }, -/**/ {{0xbfb98740, 0xe02d36ad} }, -/**/ {{0x3fb216bd, 0x02a99665} }, -/**/ {{0x3f9b0511, 0xb73aeccb} }, -/**/ {{0xbfb04863, 0x569b1738} } }, -/**/ {{{0x3fd78000, 0x00000000} }, -/**/ {{0x3fd68597, 0x9f5fa6fe} }, -/**/ {{0xbc425781, 0x4d1ada9c} }, -/**/ {{0x3fec32b9, 0x3e386c7f} }, -/**/ {{0x3c756033, 0x8cbaa5bf} }, -/**/ {{0xbfd23f6b, 0x1ca84e79} }, -/**/ {{0x3c604cc0, 0xf123d574} }, -/**/ {{0xbfc162c8, 0x8a715435} }, -/**/ {{0x3c5cf6db, 0x454fb8fd} }, -/**/ {{0x3fc88493, 0x9a4eb534} }, -/**/ {{0xbc668a5c, 0x42b959b0} }, -/**/ {{0xbf9c0182, 0x42580bb5} }, -/**/ {{0xbfb907e9, 0xe5822d56} }, -/**/ {{0x3fb24a7f, 0x2f8f8273} }, -/**/ {{0x3f98be3c, 0xa3527f46} }, -/**/ {{0xbfb01825, 0xfce97270} } }, -/**/ {{{0x3fd7c000, 0x00000000} }, -/**/ {{0x3fd6bdea, 0xc9cbd76d} }, -/**/ {{0xbc5a5c56, 0x3e6de828} }, -/**/ {{0x3fec206c, 0xe1857d04} }, -/**/ {{0xbc80439f, 0xf5c83872} }, -/**/ {{0xbfd25935, 0xcd9b9870} }, -/**/ {{0x3c6aaf98, 0xf1ec7306} }, -/**/ {{0xbfc100da, 0x36f94d02} }, -/**/ {{0xbc6e72ca, 0xd96d84ff} }, -/**/ {{0x3fc87258, 0x2e774351} }, -/**/ {{0x3c6c50a2, 0xb8860ef0} }, -/**/ {{0xbf9e543a, 0x741ef0ec} }, -/**/ {{0xbfb88738, 0x7b4d0ec2} }, -/**/ {{0x3fb279ba, 0xa8164103} }, -/**/ {{0x3f967e73, 0xa7f1ae35} }, -/**/ {{0xbfafc861, 0x5257c3de} } }, -/**/ {{{0x3fd80000, 0x00000000} }, -/**/ {{0x3fd6f619, 0x41e4def1} }, -/**/ {{0xbc7c63aa, 0xe6f6e918} }, -/**/ {{0x3fec0e07, 0x0381c0e0} }, -/**/ {{0x3c8c0e07, 0x0381c0e0} }, -/**/ {{0xbfd2726d, 0xd135c174} }, -/**/ {{0xbc2d352d, 0xe0951cf8} }, -/**/ {{0xbfc09f37, 0xb38cc8cf} }, -/**/ {{0xbc69db81, 0xae75327f} }, -/**/ {{0x3fc85eac, 0xd7da413c} }, -/**/ {{0x3c5b1a89, 0x6ebae2bc} }, -/**/ {{0xbfa04d69, 0x80fcc815} }, -/**/ {{0xbfb8054c, 0x1df326f9} }, -/**/ {{0x3fb2a47e, 0x082bda60} }, -/**/ {{0x3f944639, 0x7091d5a4} }, -/**/ {{0xbfaf5961, 0xe072e48c} } }, -/**/ {{{0x3fd84000, 0x00000000} }, -/**/ {{0x3fd72e22, 0xd53aa2aa} }, -/**/ {{0xbc7d9c93, 0x4e79f27c} }, -/**/ {{0x3febfb88, 0x36a04729} }, -/**/ {{0xbc872745, 0x9ac2ea21} }, -/**/ {{0xbfd28b13, 0x9d7702cf} }, -/**/ {{0x3c7819b9, 0x4be8bff6} }, -/**/ {{0xbfc03de6, 0xb0a35176} }, -/**/ {{0x3c5dbfb0, 0xc83347af} }, -/**/ {{0x3fc84999, 0x332a4f86} }, -/**/ {{0x3c5d304e, 0x0a22d12d} }, -/**/ {{0xbfa16a97, 0xed6b2d30} }, -/**/ {{0xbfb78243, 0xe0128950} }, -/**/ {{0x3fb2cad8, 0xeaa98f57} }, -/**/ {{0x3f92160a, 0x3bb39c5b} }, -/**/ {{0xbfaee3a9, 0x3804caa3} } }, -/**/ {{{0x3fd88000, 0x00000000} }, -/**/ {{0x3fd76607, 0x52817502} }, -/**/ {{0xbc4dd117, 0x91cc7600} }, -/**/ {{0x3febe8f1, 0x0cd9e1fe} }, -/**/ {{0xbc7a9688, 0xa21e102a} }, -/**/ {{0xbfd2a327, 0xb0d161e9} }, -/**/ {{0xbc60a2a9, 0x14b44140} }, -/**/ {{0xbfbfb9d9, 0x803f8d3b} }, -/**/ {{0x3c5e5779, 0x2a5c4097} }, -/**/ {{0x3fc83324, 0xedbcc363} }, -/**/ {{0x3c651fbc, 0xa0442744} }, -/**/ {{0xbfa2819b, 0xe91477c3} }, -/**/ {{0xbfb6fe3e, 0x63b6abf0} }, -/**/ {{0x3fb2ecdb, 0xdc73a89a} }, -/**/ {{0x3f8fdcb7, 0xaa755298} }, -/**/ {{0xbfae6793, 0x237c2f3d} } }, -/**/ {{{0x3fd8c000, 0x00000000} }, -/**/ {{0x3fd79dc6, 0x899118d1} }, -/**/ {{0x3c2b7413, 0xa0ef606d} }, -/**/ {{0x3febd642, 0x17a4cbc3} }, -/**/ {{0xbc55ee5d, 0x3200a548} }, -/**/ {{0xbfd2baaa, 0x91faa133} }, -/**/ {{0xbc6bd391, 0xfaf41548} }, -/**/ {{0xbfbef89e, 0xaa22d832} }, -/**/ {{0x3c413b3b, 0xc874fdb9} }, -/**/ {{0x3fc81b57, 0xc3be300a} }, -/**/ {{0x3c6baf9b, 0xc01a615f} }, -/**/ {{0xbfa3926a, 0x4a872ec7} }, -/**/ {{0xbfb67959, 0xd3e743cd} }, -/**/ {{0x3fb30a98, 0x4f919505} }, -/**/ {{0x3f8b9f3b, 0x28b78b08} }, -/**/ {{0xbfade57b, 0x71e33e9d} } }, -/**/ {{{0x3fd90000, 0x00000000} }, -/**/ {{0x3fd7d560, 0x4b63b3f7} }, -/**/ {{0x3c769c88, 0x5c2b249a} }, -/**/ {{0x3febc37b, 0xe7ec7a8d} }, -/**/ {{0xbc6f1246, 0x2b0e2727} }, -/**/ {{0xbfd2d19c, 0xcfbdd7fa} }, -/**/ {{0x3c7d0b11, 0x5e00c582} }, -/**/ {{0xbfbe3827, 0x86f8309b} }, -/**/ {{0x3c5d64e9, 0xfa6c56a7} }, -/**/ {{0x3fc80239, 0x7e6de8de} }, -/**/ {{0x3c68d62f, 0x7776e849} }, -/**/ {{0xbfa49cf9, 0x4f6d8017} }, -/**/ {{0xbfb5f3b3, 0xde917e27} }, -/**/ {{0x3fb32420, 0x8e455cc2} }, -/**/ {{0x3f877470, 0xb9fc88fe} }, -/**/ {{0xbfad5dbd, 0xc6b10536} } }, -/**/ {{{0x3fd94000, 0x00000000} }, -/**/ {{0x3fd80cd4, 0x6a14b1d1} }, -/**/ {{0xbc7e79f9, 0x9684fa19} }, -/**/ {{0x3febb09f, 0x0e09a222} }, -/**/ {{0x3c85748e, 0x7e047edd} }, -/**/ {{0xbfd2e7ff, 0x00ccbbc8} }, -/**/ {{0xbc78eb0a, 0x96875561} }, -/**/ {{0xbfbd787e, 0x804ecc06} }, -/**/ {{0xbc27263b, 0x2e4351f8} }, -/**/ {{0x3fc7e7d1, 0xf260d7b4} }, -/**/ {{0xbc430525, 0x8ed258e3} }, -/**/ {{0xbfa5a140, 0x968d3d02} }, -/**/ {{0xbfb56d69, 0xaecb845e} }, -/**/ {{0x3fb33987, 0xae292f95} }, -/**/ {{0x3f835d1d, 0x48e09ecd} }, -/**/ {{0xbfacd0b5, 0x6b6f9aca} } }, -/**/ {{{0x3fd98000, 0x00000000} }, -/**/ {{0x3fd84422, 0xb8df95d7} }, -/**/ {{0x3c7d76a0, 0x299b41b6} }, -/**/ {{0x3feb9dac, 0x19ba64d6} }, -/**/ {{0xbc4f643a, 0xa13ee09f} }, -/**/ {{0xbfd2fdd1, 0xc390a5c9} }, -/**/ {{0x3c575152, 0xaa856fcc} }, -/**/ {{0xbfbcb9ad, 0xc0e99751} }, -/**/ {{0x3c4e2d44, 0x1347a357} }, -/**/ {{0x3fc7cc28, 0xfdcbfd40} }, -/**/ {{0x3c60dc32, 0xe516db08} }, -/**/ {{0xbfa69f39, 0x19851d86} }, -/**/ {{0xbfb4e697, 0xe772087d} }, -/**/ {{0x3fb34ae1, 0x835992de} }, -/**/ {{0x3f7eb3f1, 0xe5326389} }, -/**/ {{0xbfac3ebd, 0x234575e8} } }, -/**/ {{{0x3fd9c000, 0x00000000} }, -/**/ {{0x3fd87b4b, 0x0c1ebedc} }, -/**/ {{0xbc76dcfa, 0xa2fa470f} }, -/**/ {{0x3feb8aa3, 0x9a1ab378} }, -/**/ {{0x3c8efdb0, 0xb797ab93} }, -/**/ {{0xbfd31315, 0xbdfb5e5a} }, -/**/ {{0x3c5813a8, 0x862f0c0d} }, -/**/ {{0xbfbbfbbf, 0x3478f169} }, -/**/ {{0xbc51e810, 0xd9e52582} }, -/**/ {{0x3fc7af46, 0x86d6ec76} }, -/**/ {{0xbc6336de, 0x3c13b159} }, -/**/ {{0xbfa796dd, 0x264b8050} }, -/**/ {{0xbfb45f5a, 0x9e1f6bef} }, -/**/ {{0x3fb35842, 0x93b26fc1} }, -/**/ {{0x3f76d75e, 0x39bc3abf} }, -/**/ {{0xbfaba82f, 0x006e38b2} } }, -/**/ {{{0x3fda0000, 0x00000000} }, -/**/ {{0x3fd8b24d, 0x394a1b25} }, -/**/ {{0x3c7b6d0b, 0xa3748fa8} }, -/**/ {{0x3feb7786, 0x1d9cdc98} }, -/**/ {{0xbc62e22c, 0x345bd7a8} }, -/**/ {{0xbfd327cb, 0x9d57b8f5} }, -/**/ {{0xbc135343, 0x753cc4f1} }, -/**/ {{0xbfbb3ebc, 0x8761b154} }, -/**/ {{0x3c5abeec, 0x8c168fdd} }, -/**/ {{0x3fc79132, 0x79f68c54} }, -/**/ {{0xbc658ab9, 0xd8d15eda} }, -/**/ {{0xbfa88828, 0x5872d73c} }, -/**/ {{0xbfb3d7cd, 0x567be750} }, -/**/ {{0x3fb361c0, 0x0a24fc71} }, -/**/ {{0x3f6e4b7a, 0x46aa98b6} }, -/**/ {{0xbfab0d64, 0x3bad3a76} } }, -/**/ {{{0x3fda4000, 0x00000000} }, -/**/ {{0x3fd8e929, 0x16f5cde8} }, -/**/ {{0x3c74c0a7, 0xe12bfafb} }, -/**/ {{0x3feb6454, 0x32024b37} }, -/**/ {{0xbc7987f7, 0x69cc9b53} }, -/**/ {{0xbfd33bf4, 0x161a0a40} }, -/**/ {{0x3c7a2321, 0x83ff46db} }, -/**/ {{0xbfba82af, 0x26913418} }, -/**/ {{0x3c3c4c62, 0x10a559fe} }, -/**/ {{0x3fc771f4, 0xc8506679} }, -/**/ {{0xbc54aaed, 0x63c7ccc3} }, -/**/ {{0xbfa97317, 0x9237e7ff} }, -/**/ {{0xbfb3500a, 0xfde5f112} }, -/**/ {{0x3fb3676f, 0xaa2c3459} }, -/**/ {{0x3f5e80cd, 0x04721907} }, -/**/ {{0xbfaa6eb5, 0x0dc212a5} } }, -/**/ {{{0x3fda8000, 0x00000000} }, -/**/ {{0x3fd91fde, 0x7cd0c662} }, -/**/ {{0x3c710741, 0x88054b53} }, -/**/ {{0x3feb510e, 0x6454751c} }, -/**/ {{0xbc199bfd, 0x7e0f2dca} }, -/**/ {{0xbfd34f8f, 0xe3b081f4} }, -/**/ {{0x3c7d7209, 0x3e2c0515} }, -/**/ {{0xbfb9c7a0, 0x3f5e2d2f} }, -/**/ {{0xbc20b02e, 0xea3bd312} }, -/**/ {{0x3fc75195, 0x6626c39a} }, -/**/ {{0x3c6f30d2, 0xb4219a8a} }, -/**/ {{0xbfaa57a8, 0xf55dfea5} }, -/**/ {{0xbfb2c82d, 0xe771fa17} }, -/**/ {{0x3fb36967, 0xc3654ab4} }, -/**/ {{0x3f11f322, 0xa23eb6eb} }, -/**/ {{0xbfa9cc78, 0x8ae579b1} } }, -/**/ {{{0x3fdac000, 0x00000000} }, -/**/ {{0x3fd9566d, 0x43a34907} }, -/**/ {{0x3c69b015, 0x37e0af2b} }, -/**/ {{0x3feb3db5, 0x40ddf8d3} }, -/**/ {{0xbc616f46, 0x793c10b8} }, -/**/ {{0xbfd3629f, 0xc8537217} }, -/**/ {{0x3c505738, 0x38143614} }, -/**/ {{0xbfb90d98, 0xbf75f20a} }, -/**/ {{0x3c4dc715, 0x6b842647} }, -/**/ {{0x3fc7301c, 0x494dd1e6} }, -/**/ {{0x3c5ec3d6, 0xf49f85b4} }, -/**/ {{0xbfab35db, 0xdbdd23b1} }, -/**/ {{0xbfb2404f, 0xc8407216} }, -/**/ {{0x3fb367bf, 0x255139f9} }, -/**/ {{0xbf5b8a0d, 0x65acd6da} }, -/**/ {{0xbfa92704, 0x8052f51d} } }, -/**/ {{{0x3fdb0000, 0x00000000} }, -/**/ {{0x3fd98cd5, 0x454d6b18} }, -/**/ {{0x3c79e6c9, 0x88fd0a77} }, -/**/ {{0x3feb2a49, 0x5323eb6a} }, -/**/ {{0xbc572202, 0x70cc9678} }, -/**/ {{0xbfd37524, 0x8cd58cc4} }, -/**/ {{0x3c6978a3, 0xda42aa4e} }, -/**/ {{0xbfb854a1, 0x54d5f784} }, -/**/ {{0xbc5e9a15, 0xb33b3d0d} }, -/**/ {{0x3fc70d91, 0x67aa0c46} }, -/**/ {{0xbc6aa72f, 0xa4ac9df8} }, -/**/ {{0xbfac0db0, 0xd0665a46} }, -/**/ {{0xbfb1b889, 0xb428e30d} }, -/**/ {{0x3fb3628d, 0x134448b0} }, -/**/ {{0xbf6bbbc1, 0x67619c9c} }, -/**/ {{0xbfa87ead, 0x53e1f653} } }, -/**/ {{{0x3fdb4000, 0x00000000} }, -/**/ {{0x3fd9c316, 0x5cc58107} }, -/**/ {{0x3c4b6696, 0x02250cfb} }, -/**/ {{0x3feb16cb, 0x25df55f4} }, -/**/ {{0xbc653abc, 0xf48e26bc} }, -/**/ {{0xbfd3871f, 0x00742189} }, -/**/ {{0xbc725ae2, 0xc05df451} }, -/**/ {{0xbfb79cc2, 0x6dd13675} }, -/**/ {{0x3be1d4e0, 0x991905e4} }, -/**/ {{0x3fc6e9fc, 0xb5b8147e} }, -/**/ {{0x3c46463b, 0xa57d4eca} }, -/**/ {{0xbfacdf29, 0x86c1db89} }, -/**/ {{0xbfb130f4, 0x1ab8d1c4} }, -/**/ {{0x3fb359e9, 0x38881228} }, -/**/ {{0xbf74a987, 0x53bec2ff} }, -/**/ {{0xbfa7d3c5, 0xe5af58b6} } }, -/**/ {{{0x3fdb8000, 0x00000000} }, -/**/ {{0x3fd9f930, 0x66168002} }, -/**/ {{0xbc7c8270, 0x47c9439a} }, -/**/ {{0x3feb033b, 0x42f6e2c9} }, -/**/ {{0xbc6eb80c, 0xc48702a7} }, -/**/ {{0xbfd3988f, 0xf8a76337} }, -/**/ {{0xbc636968, 0x5b1bb38a} }, -/**/ {{0xbfb6e604, 0x39212b04} }, -/**/ {{0xbc3c2e20, 0xba255e71} }, -/**/ {{0x3fc6c566, 0x251e2d41} }, -/**/ {{0x3c230ab3, 0x47236369} }, -/**/ {{0xbfadaa48, 0xd40b3417} }, -/**/ {{0xbfb0a9a6, 0xc484f2cc} }, -/**/ {{0x3fb34deb, 0x9cb4573e} }, -/**/ {{0xbf7b44ca, 0x1def6f17} }, -/**/ {{0xbfa7269f, 0x73d683b8} } }, -/**/ {{{0x3fdbc000, 0x00000000} }, -/**/ {{0x3fda2f23, 0x3e5e530b} }, -/**/ {{0x3c5814d5, 0xf797086b} }, -/**/ {{0x3feaef9a, 0x3378ba79} }, -/**/ {{0x3c7da16a, 0x4476e241} }, -/**/ {{0xbfd3a978, 0x50f2beab} }, -/**/ {{0x3c7b7e7f, 0xad5a31ea} }, -/**/ {{0xbfb6306e, 0xa602212f} }, -/**/ {{0xbc31ec15, 0x9ec38d55} }, -/**/ {{0x3fc69fd5, 0xa3477c6a} }, -/**/ {{0x3c571f2f, 0xb2996038} }, -/**/ {{0xbfae6f12, 0xa6cf162d} }, -/**/ {{0xbfb022b8, 0xd0cb2655} }, -/**/ {{0x3fb33eac, 0x9842912f} }, -/**/ {{0xbf80d789, 0x4919e78d} }, -/**/ {{0xbfa67789, 0x8037e242} } }, -/**/ {{{0x3fdc0000, 0x00000000} }, -/**/ {{0x3fda64ee, 0xc3cc23fd} }, -/**/ {{0xbc724dec, 0x1b50b7ff} }, -/**/ {{0x3feadbe8, 0x7f94905e} }, -/**/ {{0x3c2adbe8, 0x7f94905e} }, -/**/ {{0xbfd3b9d8, 0xeab54af9} }, -/**/ {{0x3c75b97d, 0x54fd0941} }, -/**/ {{0xbfb57c09, 0x645a7f9e} }, -/**/ {{0xbc5e79f6, 0x09320811} }, -/**/ {{0x3fc67953, 0x180938f2} }, -/**/ {{0x3c6246f2, 0xe7aee726} }, -/**/ {{0xbfaf2d8b, 0xff0ea012} }, -/**/ {{0xbfaf3881, 0x66c7250c} }, -/**/ {{0x3fb32c44, 0xc95ff694} }, -/**/ {{0xbf83f3f0, 0x25d7ff49} }, -/**/ {{0xbfa5c6d1, 0xb848e1d1} } }, -/**/ {{{0x3fdc4000, 0x00000000} }, -/**/ {{0x3fda9a92, 0xd59e98cf} }, -/**/ {{0x3c42e42d, 0xff75d817} }, -/**/ {{0x3feac826, 0xae95dea9} }, -/**/ {{0xbc534eec, 0x633dec57} }, -/**/ {{0xbfd3c9b2, 0xacfa5b18} }, -/**/ {{0x3c7a7e0c, 0x6c4d8d27} }, -/**/ {{0xbfb4c8db, 0xe4ecc0f6} }, -/**/ {{0xbc534990, 0xc0c32772} }, -/**/ {{0x3fc651e6, 0x6451e377} }, -/**/ {{0xbc6ea814, 0x2a9bb1f1} }, -/**/ {{0xbfafe5ba, 0xe62bc1b2} }, -/**/ {{0xbfae2ca8, 0x65fe3642} }, -/**/ {{0x3fb316cd, 0x09015968} }, -/**/ {{0xbf86f764, 0x3ce97a26} }, -/**/ {{0xbfa514c3, 0xdee8421b} } }, -/**/ {{{0x3fdc8000, 0x00000000} }, -/**/ {{0x3fdad00f, 0x5422058b} }, -/**/ {{0x3c7fc4c3, 0x3891d2e8} }, -/**/ {{0x3feab455, 0x46de51cf} }, -/**/ {{0xbc5b834a, 0xdbc38cc9} }, -/**/ {{0xbfd3d906, 0x844a38eb} }, -/**/ {{0x3c6198e5, 0xbc44eee8} }, -/**/ {{0xbfb416ed, 0x5993cade} }, -/**/ {{0xbc235ccb, 0xfa289b6c} }, -/**/ {{0x3fc62997, 0x60e2a3af} }, -/**/ {{0xbc69a660, 0xcf7bda0e} }, -/**/ {{0xbfb04bd3, 0x33612b72} }, -/**/ {{0xbfad2210, 0xcf62bcd9} }, -/**/ {{0x3fb2fe5e, 0x603bfc37} }, -/**/ {{0xbf89e1ba, 0xa9bce7ec} }, -/**/ {{0xbfa461a9, 0xb83029d5} } }, -/**/ {{{0x3fdcc000, 0x00000000} }, -/**/ {{0x3fdb0564, 0x20ae9344} }, -/**/ {{0xbc793139, 0x46363455} }, -/**/ {{0x3feaa074, 0xcde0631f} }, -/**/ {{0x3c84b49a, 0x143fe6d4} }, -/**/ {{0xbfd3e7d5, 0x627b115b} }, -/**/ {{0x3c77a502, 0x332989c0} }, -/**/ {{0xbfb36644, 0xb589513f} }, -/**/ {{0x3c3abdc9, 0x105eec96} }, -/**/ {{0x3fc6006d, 0xdd12e0be} }, -/**/ {{0xbc4f0281, 0x5d67cb35} }, -/**/ {{0xbfb0a1ab, 0x4238ba83} }, -/**/ {{0xbfac18e3, 0x73889526} }, -/**/ {{0x3fb2e311, 0xfde6351a} }, -/**/ {{0xbf8cb2d2, 0xc256833f} }, -/**/ {{0xbfa3adca, 0xf73e36f0} } }, -/**/ {{{0x3fdd0000, 0x00000000} }, -/**/ {{0x3fdb3a91, 0x1da65c6c} }, -/**/ {{0x3c7ae187, 0xb1ca5040} }, -/**/ {{0x3fea8c85, 0xc81a2254} }, -/**/ {{0xbc83c191, 0x8d67728b} }, -/**/ {{0xbfd3f620, 0x3e8218e0} }, -/**/ {{0xbc72bf32, 0x52bd43ef} }, -/**/ {{0xbfb2b6e8, 0xadb5f398} }, -/**/ {{0x3c340287, 0x6b74d451} }, -/**/ {{0x3fc5d671, 0x9d9e25fc} }, -/**/ {{0x3c639669, 0x518d7a71} }, -/**/ {{0xbfb0f46a, 0x19cc29a0} }, -/**/ {{0xbfab1147, 0xc1a69750} }, -/**/ {{0x3fb2c501, 0x2c826e6b} }, -/**/ {{0xbf8f6a95, 0xcbc1b186} }, -/**/ {{0xbfa2f96d, 0x2de89811} } }, -/**/ {{{0x3fdd4000, 0x00000000} }, -/**/ {{0x3fdb6f96, 0x2e737efc} }, -/**/ {{0xbc5ca534, 0x64981e71} }, -/**/ {{0x3fea7888, 0xb9102ddc} }, -/**/ {{0xbc7791b2, 0x3c46d7d5} }, -/**/ {{0xbfd403e8, 0x1444efb5} }, -/**/ {{0xbc6047c5, 0x4f3d22a6} }, -/**/ {{0xbfb208df, 0xb90ac1cc} }, -/**/ {{0x3c4078b1, 0x2d2115d8} }, -/**/ {{0x3fc5abaa, 0x5b7c61a2} }, -/**/ {{0x3c3eef6a, 0x2bd2d19a} }, -/**/ {{0xbfb14414, 0xa8850e1a} }, -/**/ {{0xbfaa0b63, 0xc6580343} }, -/**/ {{0x3fb2a445, 0x4876cfdf} }, -/**/ {{0xbf91047b, 0x562d0829} }, -/**/ {{0xbfa244d3, 0xbe562a83} } }, -/**/ {{{0x3fdd8000, 0x00000000} }, -/**/ {{0x3fdba473, 0x378624a5} }, -/**/ {{0x3c7519a1, 0xb46e4aff} }, -/**/ {{0x3fea647e, 0x2348d9a3} }, -/**/ {{0xbc84f6c2, 0x9156e59f} }, -/**/ {{0xbfd4112d, 0xe46b4c91} }, -/**/ {{0xbc78c11d, 0x110fe0b7} }, -/**/ {{0xbfb15c30, 0x10e3d572} }, -/**/ {{0x3c53b45b, 0x4427c00b} }, -/**/ {{0x3fc5801f, 0xc2c486ae} }, -/**/ {{0xbc49bb5e, 0xc20ced8b} }, -/**/ {{0xbfb190b0, 0x4cddef65} }, -/**/ {{0xbfa9075c, 0x2ae4bcd0} }, -/**/ {{0x3fb280f7, 0xb69396b9} }, -/**/ {{0xbf9246f8, 0xce179ccb} }, -/**/ {{0xbfa1903f, 0xce6e9b2b} } }, -/**/ {{{0x3fddc000, 0x00000000} }, -/**/ {{0x3fdbd928, 0x1e528192} }, -/**/ {{0xbc74b154, 0x39af6b66} }, -/**/ {{0x3fea5066, 0x88478403} }, -/**/ {{0xbc85c7e8, 0xbe71620f} }, -/**/ {{0xbfd41df2, 0xb430f4ac} }, -/**/ {{0xbc55db82, 0xe79c7595} }, -/**/ {{0xbfb0b0df, 0xb173ac76} }, -/**/ {{0x3c57f440, 0xe4738d25} }, -/**/ {{0x3fc553d9, 0x7199976b} }, -/**/ {{0x3c54990c, 0x2a872a12} }, -/**/ {{0xbfb1da42, 0xd137dd01} }, -/**/ {{0xbfa80554, 0x350bfdb5} }, -/**/ {{0x3fb25b31, 0xdae9e17f} }, -/**/ {{0xbf937cc5, 0xe9e265b4} }, -/**/ {{0xbfa0dbf0, 0x3d16a202} } }, -/**/ {{{0x3fde0000, 0x00000000} }, -/**/ {{0x3fdc0db4, 0xc94ec9f0} }, -/**/ {{0xbc7cc1ce, 0x70934c34} }, -/**/ {{0x3fea3c42, 0x68881898} }, -/**/ {{0x3c8f907f, 0xe5c3bd97} }, -/**/ {{0xbfd42a37, 0x8d38076d} }, -/**/ {{0xbc6b8354, 0x7e19d62d} }, -/**/ {{0xbfb006f4, 0x5a36f1bd} }, -/**/ {{0xbc41701e, 0xca398c09} }, -/**/ {{0x3fc526de, 0xf7221a2a} }, -/**/ {{0xbc211868, 0x8041247e} }, -/**/ {{0xbfb220d2, 0x67b0229a} }, -/**/ {{0xbfa7056d, 0xc74d0c66} }, -/**/ {{0x3fb2330d, 0x0ff472e2} }, -/**/ {{0xbf94a5e9, 0x9cb74216} }, -/**/ {{0xbfa02821, 0x992b9e1f} } }, -/**/ {{{0x3fde4000, 0x00000000} }, -/**/ {{0x3fdc4219, 0x1ff11eb7} }, -/**/ {{0xbc7b17df, 0x434b3eee} }, -/**/ {{0x3fea2812, 0x437ac09e} }, -/**/ {{0xbc540368, 0xf9618c21} }, -/**/ {{0xbfd435fd, 0x7d5ba406} }, -/**/ {{0x3c75605b, 0x5e0a732a} }, -/**/ {{0xbfaebce7, 0x1ce0c104} }, -/**/ {{0xbc446d02, 0xd4eb3297} }, -/**/ {{0x3fc4f937, 0xd289f60b} }, -/**/ {{0x3c5b88b7, 0xe736fa8b} }, -/**/ {{0xbfb26465, 0xa5f78db4} }, -/**/ {{0xbfa607c9, 0x61a972db} }, -/**/ {{0x3fb208a2, 0x9e13b088} }, -/**/ {{0xbf95c26f, 0x06c33653} }, -/**/ {{0xbf9eea1c, 0x346237b1} } }, -/**/ {{{0x3fde8000, 0x00000000} }, -/**/ {{0x3fdc7655, 0x0aad71f9} }, -/**/ {{0xbc774b8b, 0xff7043e4} }, -/**/ {{0x3fea13d6, 0x977fc070} }, -/**/ {{0xbc86c451, 0xd9440881} }, -/**/ {{0xbfd44145, 0x9682eee2} }, -/**/ {{0x3c74156f, 0xb13901b4} }, -/**/ {{0xbfad6ec5, 0x2b58de73} }, -/**/ {{0x3c2ced26, 0xdf653988} }, -/**/ {{0x3fc4caeb, 0x720eb232} }, -/**/ {{0x3c614246, 0x92f3f809} }, -/**/ {{0xbfb2a503, 0x812caa81} }, -/**/ {{0xbfa50c86, 0x22dc20a7} }, -/**/ {{0x3fb1dc0b, 0xb35de59d} }, -/**/ {{0xbf96d265, 0x4adc8c38} }, -/**/ {{0xbf9d85db, 0x35444e0c} } }, -/**/ {{{0x3fdec000, 0x00000000} }, -/**/ {{0x3fdcaa68, 0x72f3631b} }, -/**/ {{0x3c295067, 0x81636f48} }, -/**/ {{0x3fe9ff8f, 0xe1e381db} }, -/**/ {{0xbc6fffe6, 0x00701e1c} }, -/**/ {{0xbfd44c10, 0xee747cac} }, -/**/ {{0xbc7a7f22, 0xced401ad} }, -/**/ {{0xbfac238c, 0xf898de26} }, -/**/ {{0x3c1eb191, 0xdaa7d32f} }, -/**/ {{0x3fc49c01, 0x32160e42} }, -/**/ {{0x3c649f02, 0x03d0023c} }, -/**/ {{0xbfb2e2b3, 0x49ba4fb7} }, -/**/ {{0xbfa413c1, 0xca00d6c7} }, -/**/ {{0x3fb1ad61, 0x5bc495cf} }, -/**/ {{0xbf97d5df, 0x63d0ff69} }, -/**/ {{0xbf9c23eb, 0x27af7010} } }, -/**/ {{{0x3fdf0000, 0x00000000} }, -/**/ {{0x3fdcde53, 0x432c1351} }, -/**/ {{0xbc7a2cfa, 0x4418f1ad} }, -/**/ {{0x3fe9eb3e, 0x9edacacc} }, -/**/ {{0xbc8942c5, 0x87d23ca5} }, -/**/ {{0xbfd45660, 0x9eaa285d} }, -/**/ {{0x3c4fe8e6, 0x52cf85b4} }, -/**/ {{0xbfaadb48, 0x28319af3} }, -/**/ {{0xbc207b46, 0x31b456b0} }, -/**/ {{0x3fc46c80, 0x5c4ee7c2} }, -/**/ {{0x3c4bdfc1, 0xb4443c76} }, -/**/ {{0xbfb31d7c, 0xa73bc33f} }, -/**/ {{0xbfa31d98, 0xb8a731f5} }, -/**/ {{0x3fb17cbc, 0x798f7481} }, -/**/ {{0xbf98ccf3, 0xf977e9ca} }, -/**/ {{0xbf9ac4b2, 0x36ea1578} } }, -/**/ {{{0x3fdf4000, 0x00000000} }, -/**/ {{0x3fdd1215, 0x66b7f2ad} }, -/**/ {{0x3c7be678, 0x35886c30} }, -/**/ {{0x3fe9d6e3, 0x497f1fed} }, -/**/ {{0xbc8ec056, 0x9a35c454} }, -/**/ {{0xbfd46035, 0xc4255988} }, -/**/ {{0x3c7ddb7b, 0x7144427c} }, -/**/ {{0xbfa995ff, 0xe9b44acd} }, -/**/ {{0x3c3c9d56, 0xb529cf65} }, -/**/ {{0x3fc43c70, 0x26dc5cda} }, -/**/ {{0x3c6d6ee6, 0xfde6cd82} }, -/**/ {{0xbfb35567, 0x9467b39a} }, -/**/ {{0xbfa22a25, 0xf54ca1ba} }, -/**/ {{0x3fb14a35, 0xbe2d5d2d} }, -/**/ {{0xbf99b7bd, 0x35a34e74} }, -/**/ {{0xbf996891, 0xc4948489} } }, -/**/ {{{0x3fdf8000, 0x00000000} }, -/**/ {{0x3fdd45ae, 0xc9ec862b} }, -/**/ {{0x3c689421, 0x163ef92d} }, -/**/ {{0x3fe9c27e, 0x5bcb52c7} }, -/**/ {{0xbc892d91, 0xf148a350} }, -/**/ {{0xbfd46991, 0x7f43bff0} }, -/**/ {{0xbc738b23, 0x8da13c27} }, -/**/ {{0xbfa853bc, 0xf9f19dcd} }, -/**/ {{0x3c2ea7a9, 0x2433c5cf} }, -/**/ {{0x3fc40bd7, 0xb38b19e0} }, -/**/ {{0xbc5d466e, 0x1c2a2863} }, -/**/ {{0xbfb38a7c, 0x5b0333a7} }, -/**/ {{0xbfa13983, 0x2e3896d7} }, -/**/ {{0x3fb115e5, 0xa35b7545} }, -/**/ {{0xbf9a9658, 0x99098556} }, -/**/ {{0xbf980fe6, 0x693ac59e} } }, -/**/ {{{0x3fdfc000, 0x00000000} }, -/**/ {{0x3fdd791f, 0x5a1226f5} }, -/**/ {{0xbc64017e, 0xa5b64a76} }, -/**/ {{0x3fe9ae10, 0x4e983ae9} }, -/**/ {{0xbc8d45ed, 0x52b783d7} }, -/**/ {{0xbfd47274, 0xf394891f} }, -/**/ {{0xbc7cd478, 0x22e08713} }, -/**/ {{0xbfa71487, 0xa445379d} }, -/**/ {{0x3c1569aa, 0x831d87b7} }, -/**/ {{0x3fc3dabe, 0x0f10bc36} }, -/**/ {{0x3bd8df2b, 0x1cb9bbe6} }, -/**/ {{0xbfb3bcc3, 0x8fddd862} }, -/**/ {{0xbfa04bc8, 0xbcb632d9} }, -/**/ {{0x3fb0dfe4, 0x64a26d77} }, -/**/ {{0xbf9b68e6, 0xd04027d1} }, -/**/ {{0xbf96bb07, 0xf792c5d9} } }, -/**/ {{{0x3fe00000, 0x00000000} }, -/**/ {{0x3fddac67, 0x0561bb4f} }, -/**/ {{0x3c7a2b7f, 0x222f65e2} }, -/**/ {{0x3fe99999, 0x9999999a} }, -/**/ {{0xbc899999, 0x9999999a} }, -/**/ {{0xbfd47ae1, 0x47ae147b} }, -/**/ {{0x3c5eb851, 0xeb851eb8} }, -/**/ {{0xbfa5d867, 0xc3ece2a5} }, -/**/ {{0xbc3a485c, 0xd7b900af} }, -/**/ {{0x3fc3a92a, 0x30553261} }, -/**/ {{0x3c6f06f6, 0x94467382} }, -/**/ {{0xbfb3ec46, 0x0ed80a18} }, -/**/ {{0xbf9ec21b, 0x514d88d8} }, -/**/ {{0x3fb0a849, 0xf929a833} }, -/**/ {{0xbf9c2f8b, 0x88dfb80c} }, -/**/ {{0xbf956a49, 0x8245bf09} } }, -/**/ {{{0x3fe02000, 0x00000000} }, -/**/ {{0x3fdddf85, 0xbb026974} }, -/**/ {{0x3c643bbb, 0x0c0a1226} }, -/**/ {{0x3fe9851a, 0xb35b2797} }, -/**/ {{0x3c89cd14, 0x18a8fead} }, -/**/ {{0xbfd482d7, 0xa5042a2d} }, -/**/ {{0x3c0dbc04, 0xa8224d16} }, -/**/ {{0xbfa49f64, 0xc56ade02} }, -/**/ {{0x3c451e52, 0x47da7eea} }, -/**/ {{0x3fc37722, 0xf7c5fe7d} }, -/**/ {{0xbc5165be, 0xd22c4b5c} }, -/**/ {{0xbfb4190c, 0xf6f48c5d} }, -/**/ {{0xbf9cf2cf, 0x58d0c132} }, -/**/ {{0x3fb06f2e, 0x0ddfdd74} }, -/**/ {{0xbf9cea6d, 0x46e65336} }, -/**/ {{0xbf941df9, 0x6423af3b} } }, -/**/ {{{0x3fe04000, 0x00000000} }, -/**/ {{0x3fde127b, 0x6b0744b0} }, -/**/ {{0xbc52b098, 0x6398d4ab} }, -/**/ {{0x3fe97094, 0x113dcc5a} }, -/**/ {{0xbc842780, 0x4de8c575} }, -/**/ {{0xbfd48a59, 0x37beb8e5} }, -/**/ {{0xbc601dd2, 0x9dc7541e} }, -/**/ {{0xbfa36985, 0xa7f2a8fe} }, -/**/ {{0xbc45e414, 0x7437d42d} }, -/**/ {{0x3fc344af, 0x2eb33dd6} }, -/**/ {{0xbc6d66e9, 0xe3a3193c} }, -/**/ {{0xbfb44321, 0xa6763232} }, -/**/ {{0xbf9b29d6, 0x7217dfc9} }, -/**/ {{0x3fb034a7, 0xfff8a866} }, -/**/ {{0xbf9d99b5, 0x3a6e931d} }, -/**/ {{0xbf92d661, 0x4a9f7e19} } }, -/**/ {{{0x3fe06000, 0x00000000} }, -/**/ {{0x3fde4548, 0x066cf51a} }, -/**/ {{0x3c43a3aa, 0x12ce98f2} }, -/**/ {{0x3fe95c06, 0x2774fe53} }, -/**/ {{0x3c810dfd, 0x3b851412} }, -/**/ {{0xbfd49167, 0x2e911e43} }, -/**/ {{0xbc7f6506, 0x09466fcd} }, -/**/ {{0xbfa236d0, 0xfedfb0c1} }, -/**/ {{0xbc3f6870, 0x79cb63a9} }, -/**/ {{0x3fc311d5, 0x86b6561c} }, -/**/ {{0x3c561982, 0x9543fc9a} }, -/**/ {{0xbfb46a8d, 0xb70aa5a7} }, -/**/ {{0xbf996756, 0xf5ac1efc} }, -/**/ {{0x3faff19d, 0xaf7c84b3} }, -/**/ {{0xbf9e3d8f, 0x15ce96b8} }, -/**/ {{0xbf9193c6, 0x42726021} } }, -/**/ {{{0x3fe08000, 0x00000000} }, -/**/ {{0x3fde77eb, 0x7f175a34} }, -/**/ {{0x3c70e53d, 0xc1bf3435} }, -/**/ {{0x3fe94771, 0x69044ba4} }, -/**/ {{0xbc7d53e2, 0x92d5fbc1} }, -/**/ {{0xbfd49802, 0xba91fd89} }, -/**/ {{0x3c71963e, 0xc3c8c4f3} }, -/**/ {{0xbfa1074c, 0xf33546d5} }, -/**/ {{0x3c4bc296, 0xc71ad288} }, -/**/ {{0x3fc2de9c, 0x99222665} }, -/**/ {{0x3c6e4a10, 0x28dadb64} }, -/**/ {{0xbfb48f5a, 0xfa031cb1} }, -/**/ {{0xbf97ab74, 0xbc0c6420} }, -/**/ {{0x3faf7772, 0x876d0f75} }, -/**/ {{0xbf9ed628, 0xe431fc96} }, -/**/ {{0xbf905668, 0xc64515ec} } }, -/**/ {{{0x3fe0a000, 0x00000000} }, -/**/ {{0x3fdeaa65, 0xc7cf28c4} }, -/**/ {{0x3c62fb2c, 0xeca3bf05} }, -/**/ {{0x3fe932d6, 0x47bd0aaa} }, -/**/ {{0x3c6bdfec, 0x697b6e3c} }, -/**/ {{0xbfd49e2d, 0x0f13a7e8} }, -/**/ {{0x3c6198c5, 0x20412940} }, -/**/ {{0xbf9fb5fe, 0x8a4e92df} }, -/**/ {{0xbc3cbb58, 0x6309a51a} }, -/**/ {{0x3fc2ab0a, 0xe67c9829} }, -/**/ {{0xbc647643, 0x06a4c4ef} }, -/**/ {{0xbfb4b193, 0x749bc711} }, -/**/ {{0xbf95f651, 0x27bef265} }, -/**/ {{0x3faefafb, 0x28347ebf} }, -/**/ {{0xbf9f63b2, 0xe0c06e2f} }, -/**/ {{0xbf8e3d09, 0x9e7b9dd7} } }, -/**/ {{{0x3fe0c000, 0x00000000} }, -/**/ {{0x3fdedcb6, 0xd43f8435} }, -/**/ {{0xbc5fc976, 0x330884e4} }, -/**/ {{0x3fe91e35, 0x343c31e5} }, -/**/ {{0xbc8fd46f, 0x9bb96799} }, -/**/ {{0xbfd4a3e7, 0x617d19a1} }, -/**/ {{0xbc7d7303, 0xea58b250} }, -/**/ {{0xbf9d63da, 0x9b55d156} }, -/**/ {{0xbc14bf72, 0xd5b4cc6c} }, -/**/ {{0x3fc27726, 0xd6016a7c} }, -/**/ {{0x3c4eba22, 0x435ec4b4} }, -/**/ {{0xbfb4d141, 0x5c52b3c6} }, -/**/ {{0xbf94480b, 0x2fdd9fbd} }, -/**/ {{0x3fae7c63, 0x6d3af4b6} }, -/**/ {{0xbf9fe65f, 0x4e61315b} }, -/**/ {{0xbf8bd8a3, 0xcea37283} } }, -/**/ {{{0x3fe0e000, 0x00000000} }, -/**/ {{0x3fdf0ede, 0x98f393d0} }, -/**/ {{0xbc72f40a, 0x87cb1894} }, -/**/ {{0x3fe9098e, 0x9de85688} }, -/**/ {{0xbc7c2de1, 0xa3791e64} }, -/**/ {{0xbfd4a932, 0xe9238ed7} }, -/**/ {{0xbc67a1bb, 0x28864386} }, -/**/ {{0xbf9b1838, 0x001dec68} }, -/**/ {{0xbc33ee0e, 0x8f0ffbdd} }, -/**/ {{0x3fc242f6, 0xb52e1005} }, -/**/ {{0xbc5476eb, 0x371fd2c1} }, -/**/ {{0xbfb4ee6f, 0x134edf2d} }, -/**/ {{0xbf92a0bf, 0x6b13becc} }, -/**/ {{0x3fadfbd6, 0x650f859c} }, -/**/ {{0xbfa02f31, 0x281586f4} }, -/**/ {{0xbf898006, 0x7a73449e} } }, -/**/ {{{0x3fe10000, 0x00000000} }, -/**/ {{0x3fdf40dd, 0x0b541418} }, -/**/ {{0xbc6a3992, 0xdc382a23} }, -/**/ {{0x3fe8f4e2, 0xf2efd135} }, -/**/ {{0xbc74c3c0, 0xd4218911} }, -/**/ {{0xbfd4ae10, 0xdf24b2d1} }, -/**/ {{0x3c713b12, 0x79d0ac37} }, -/**/ {{0xbf98d31f, 0xd7365f3f} }, -/**/ {{0xbc18bf3b, 0x62531dc5} }, -/**/ {{0x3fc20e80, 0xb7567664} }, -/**/ {{0xbc54a699, 0xd450197f} }, -/**/ {{0xbfb50927, 0x24d80ddd} }, -/**/ {{0xbf910088, 0x1b0516ab} }, -/**/ {{0x3fad797e, 0x4a356567} }, -/**/ {{0xbfa065f8, 0xe14758ed} }, -/**/ {{0xbf87338f, 0x73d2f6bb} } }, -/**/ {{{0x3fe12000, 0x00000000} }, -/**/ {{0x3fdf72b2, 0x21a4e495} }, -/**/ {{0x3c5489c2, 0x0f7eb740} }, -/**/ {{0x3fe8e032, 0xa0470831} }, -/**/ {{0xbc8c154a, 0xe75570cd} }, -/**/ {{0xbfd4b282, 0x7e416c35} }, -/**/ {{0xbc7f1837, 0x60646afd} }, -/**/ {{0xbf96949a, 0x7a6bec27} }, -/**/ {{0x3c38238f, 0xe6b77ba9} }, -/**/ {{0x3fc1d9ca, 0xf5428c61} }, -/**/ {{0x3c6a968d, 0xcd7881aa} }, -/**/ {{0xbfb52174, 0x41e00b6e} }, -/**/ {{0xbf8ecefa, 0x702ad3de} }, -/**/ {{0x3facf584, 0x7c8ae0dc} }, -/**/ {{0xbfa097a2, 0x8aa44fa8} }, -/**/ {{0xbf84f394, 0x2ed63408} } }, -/**/ {{{0x3fe14000, 0x00000000} }, -/**/ {{0x3fdfa45d, 0xd3029259} }, -/**/ {{0xbc7ca563, 0xdc28d8b5} }, -/**/ {{0x3fe8cb7e, 0x11a6de80} }, -/**/ {{0x3c610be6, 0xac22b8f8} }, -/**/ {{0xbfd4b689, 0x02b9488a} }, -/**/ {{0x3c5ea0bd, 0xaf91d442} }, -/**/ {{0xbf945caf, 0x821fd17e} }, -/**/ {{0x3c38e464, 0x0e51a049} }, -/**/ {{0x3fc1a4db, 0x6cd45aad} }, -/**/ {{0x3c2288e0, 0xf4200d5e} }, -/**/ {{0xbfb53761, 0x3d9dd7c4} }, -/**/ {{0xbf8bab68, 0xfb107457} }, -/**/ {{0x3fac7011, 0x7b46ebd1} }, -/**/ {{0xbfa0c44a, 0x93134a8f} }, -/**/ {{0xbf82c061, 0xf1fa4589} } }, -/**/ {{{0x3fe16000, 0x00000000} }, -/**/ {{0x3fdfd5e0, 0x175fdf83} }, -/**/ {{0x3c63a87b, 0x1ec49b15} }, -/**/ {{0x3fe8b6c5, 0xb18b4749} }, -/**/ {{0xbc5fabb8, 0xb7d58c0a} }, -/**/ {{0xbfd4ba25, 0xaa26890c} }, -/**/ {{0x3c50e395, 0x0ef9b688} }, -/**/ {{0xbf922b65, 0xc8a9b4c0} }, -/**/ {{0x3c2835ee, 0xd319146f} }, -/**/ {{0x3fc16fb8, 0x00b681bd} }, -/**/ {{0x3c1df633, 0x279133b0} }, -/**/ {{0xbfb54af9, 0x0a3b410c} }, -/**/ {{0xbf889682, 0xebe14682} }, -/**/ {{0x3fabe94c, 0xdf89e086} }, -/**/ {{0xbfa0ec0e, 0x0e55a6f8} }, -/**/ {{0xbf809a3e, 0x08af68f3} } }, -/**/ {{{0x3fe18000, 0x00000000} }, -/**/ {{0x3fe0039c, 0x73c1a40c} }, -/**/ {{0xbc8b32c9, 0x49c9d593} }, -/**/ {{0x3fe8a209, 0xe931fcd3} }, -/**/ {{0x3c6cb8f0, 0x8e68c94c} }, -/**/ {{0xbfd4bd59, 0xb35ad2d8} }, -/**/ {{0xbc61ac1a, 0xcaa606b4} }, -/**/ {{0xbf9000c3, 0x6dc339ef} }, -/**/ {{0x3c2c62e2, 0xaeaeaa73} }, -/**/ {{0x3fc13a66, 0x7812ee2d} }, -/**/ {{0x3c6a8cc2, 0x948ffe5b} }, -/**/ {{0xbfb55c46, 0xb5955c9c} }, -/**/ {{0xbf85906b, 0x0fd2b503} }, -/**/ {{0x3fab615d, 0x577de2da} }, -/**/ {{0xbfa10f0a, 0xa34d31ec} }, -/**/ {{0xbf7d02cb, 0xefe48ad0} } }, -/**/ {{{0x3fe1a000, 0x00000000} }, -/**/ {{0x3fe01c34, 0x1e82422d} }, -/**/ {{0x3c83db44, 0xfcca90ee} }, -/**/ {{0x3fe88d4b, 0x20995a88} }, -/**/ {{0x3c802777, 0x1e42e681} }, -/**/ {{0xbfd4c026, 0x5e3c840f} }, -/**/ {{0x3c7d7c65, 0x3800420d} }, -/**/ {{0xbf8bb99b, 0xb3f88703} }, -/**/ {{0x3c1f62ec, 0x4bf63e82} }, -/**/ {{0x3fc104ec, 0x7e5193ee} }, -/**/ {{0xbc27771e, 0xbae4e07d} }, -/**/ {{0xbfb56b55, 0x66104515} }, -/**/ {{0xbf829940, 0x061a20d1} }, -/**/ {{0x3faad868, 0xa20334d9} }, -/**/ {{0xbfa12d5e, 0x7aba8ee6} }, -/**/ {{0xbf78ec1f, 0x69774b8d} } }, -/**/ {{{0x3fe1c000, 0x00000000} }, -/**/ {{0x3fe034b7, 0x09250488} }, -/**/ {{0x3c78f9b3, 0x8d855410} }, -/**/ {{0x3fe87889, 0xbe7f594b} }, -/**/ {{0xbc7530e1, 0xc826e7a3} }, -/**/ {{0xbfd4c28c, 0xeba4af80} }, -/**/ {{0x3c7104a9, 0xe6a95faa} }, -/**/ {{0xbf877f13, 0x846dba10} }, -/**/ {{0x3c2bc924, 0x4abd0010} }, -/**/ {{0x3fc0cf4f, 0xa2deff9f} }, -/**/ {{0xbc67d17e, 0xa013c015} }, -/**/ {{0xbfb57830, 0x577e7899} }, -/**/ {{0xbf7f6238, 0xb49ea16d} }, -/**/ {{0x3faa4e93, 0x8ae4a926} }, -/**/ {{0xbfa14728, 0x2e77f633} }, -/**/ {{0xbf74f0d3, 0xb81c893e} } }, -/**/ {{{0x3fe1e000, 0x00000000} }, -/**/ {{0x3fe04d25, 0x314342e6} }, -/**/ {{0xbc81c863, 0x6442c767} }, -/**/ {{0x3fe863c6, 0x2860ad7e} }, -/**/ {{0xbc81dcb2, 0x137a2d8f} }, -/**/ {{0xbfd4c48e, 0x9d3dc03a} }, -/**/ {{0xbc7d92af, 0x197b1db9} }, -/**/ {{0xbf8351f6, 0x5653b1a7} }, -/**/ {{0xbbe368b4, 0x2127dea7} }, -/**/ {{0x3fc09995, 0x58fa8ca4} }, -/**/ {{0xbc446391, 0x530429e5} }, -/**/ {{0xbfb582e2, 0xd81c26eb} }, -/**/ {{0xbf79b02d, 0x3e63c109} }, -/**/ {{0x3fa9c401, 0xe7904294} }, -/**/ {{0xbfa15c86, 0xb933b0f3} }, -/**/ {{0xbf711137, 0xd8d860e1} } }, -/**/ {{{0x3fe20000, 0x00000000} }, -/**/ {{0x3fe0657e, 0x94db30d0} }, -/**/ {{0xbc7d5b49, 0x5f6349e6} }, -/**/ {{0x3fe84f00, 0xc2780614} }, -/**/ {{0xbc7fe7b0, 0xff3d87fa} }, -/**/ {{0xbfd4c62c, 0xb562c625} }, -/**/ {{0x3c77b2c3, 0xa78e848c} }, -/**/ {{0xbf7e6495, 0xb3a4bcb7} }, -/**/ {{0x3c14eb89, 0xe3f2b0a5} }, -/**/ {{0x3fc063c2, 0xf78c0dc4} }, -/**/ {{0xbc6badf0, 0x7539dc13} }, -/**/ {{0xbfb58b78, 0x459eb443} }, -/**/ {{0xbf741c83, 0x1386e6b4} }, -/**/ {{0x3fa938d6, 0x944ff706} }, -/**/ {{0xbfa16d99, 0x66ad4037} }, -/**/ {{0xbf6a9b1a, 0x01fc736a} } }, -/**/ {{{0x3fe22000, 0x00000000} }, -/**/ {{0x3fe07dc3, 0x324e9b38} }, -/**/ {{0x3c7b70c9, 0xe04450ac} }, -/**/ {{0x3fe83a39, 0xefbd6bfe} }, -/**/ {{0xbc7b2885, 0x21f5de26} }, -/**/ {{0xbfd4c768, 0x76ff6c9e} }, -/**/ {{0x3c56a2c0, 0xdebc1603} }, -/**/ {{0xbf76402c, 0xd9cccfd7} }, -/**/ {{0xbc1b39c0, 0x4e9786c1} }, -/**/ {{0x3fc02ddd, 0xb900b57a} }, -/**/ {{0x3c45d916, 0xea88a215} }, -/**/ {{0xbfb591fc, 0x0a58ab40} }, -/**/ {{0xbf6d4eb0, 0x32a37ac9} }, -/**/ {{0x3fa8ad33, 0x71fe75f8} }, -/**/ {{0xbfa17a7f, 0xc477a855} }, -/**/ {{0xbf634c0e, 0x2b035011} } }, -/**/ {{{0x3fe24000, 0x00000000} }, -/**/ {{0x3fe095f3, 0x0861a590} }, -/**/ {{0xbc7121b2, 0x0a15a9f3} }, -/**/ {{0x3fe82572, 0x11e5c14d} }, -/**/ {{0xbc7df9fc, 0xacd80b09} }, -/**/ {{0xbfd4c843, 0x25709bff} }, -/**/ {{0x3c7a9ef6, 0x1790f484} }, -/**/ {{0xbf6c6d74, 0x8a0def34} }, -/**/ {{0xbc051e57, 0x2a8142d7} }, -/**/ {{0x3fbfefd5, 0x765e156b} }, -/**/ {{0xbc3e6048, 0xf0e29c9e} }, -/**/ {{0xbfb59679, 0x9a724e28} }, -/**/ {{0xbf62a185, 0xcf13e192} }, -/**/ {{0x3fa82139, 0x6433c13f} }, -/**/ {{0xbfa18359, 0x9342e95d} }, -/**/ {{0xbf586b34, 0x8f974107} } }, -/**/ {{{0x3fe26000, 0x00000000} }, -/**/ {{0x3fe0ae0e, 0x1639866c} }, -/**/ {{0x3c7075ab, 0xf2de445a} }, -/**/ {{0x3fe810a9, 0x89625f5d} }, -/**/ {{0xbc8e4bea, 0x0fcf7262} }, -/**/ {{0xbfd4c8be, 0x0465c69b} }, -/**/ {{0x3c462ef4, 0xd7f7f89c} }, -/**/ {{0xbf59210e, 0x4de612d5} }, -/**/ {{0xbbf43659, 0xba53898d} }, -/**/ {{0x3fbf83dd, 0xfe836c69} }, -/**/ {{0xbc36cb56, 0x27f5499a} }, -/**/ {{0xbfb598fc, 0x7136edda} }, -/**/ {{0xbf50634c, 0x00013fb7} }, -/**/ {{0x3fa79508, 0x4fe557c2} }, -/**/ {{0xbfa18846, 0xb8ae41dc} }, -/**/ {{0xbf455fce, 0xe36bd239} } }, -/**/ {{{0x3fe28000, 0x00000000} }, -/**/ {{0x3fe0c614, 0x5b5b43da} }, -/**/ {{0x3c5974fa, 0x13b5404f} }, -/**/ {{0x3fe7fbe0, 0xb560d35c} }, -/**/ {{0xbc84f066, 0xae5a0887} }, -/**/ {{0xbfd4c8da, 0x57c2e1cb} }, -/**/ {{0x3c73de0e, 0xe0a3774c} }, -/**/ {{0x3f38b341, 0x61c69f3c} }, -/**/ {{0x3bd7b2e2, 0x7b200371} }, -/**/ {{0x3fbf17de, 0xd351e8ed} }, -/**/ {{0x3c5bce38, 0x650c5a9c} }, -/**/ {{0xbfb59990, 0x0e77234c} }, -/**/ {{0x3f3006ef, 0x99f594ee} }, -/**/ {{0x3fa708bf, 0x1a75a6cc} }, -/**/ {{0xbfa18967, 0x31a471d5} }, -/**/ {{0x3f24cc7e, 0x59bf0521} } }, -/**/ {{{0x3fe2a000, 0x00000000} }, -/**/ {{0x3fe0de05, 0xd7aa6f7d} }, -/**/ {{0xbc783684, 0xb1c529ab} }, -/**/ {{0x3fe7e717, 0xf3cab884} }, -/**/ {{0x3c7e1b21, 0x3b1fa4c7} }, -/**/ {{0xbfd4c899, 0x63830b4b} }, -/**/ {{0xbc7b6e32, 0xae3ffeff} }, -/**/ {{0x3f628757, 0xfc06cc4f} }, -/**/ {{0xbbb4c155, 0x56f01f66} }, -/**/ {{0x3fbeabe1, 0x8424efd8} }, -/**/ {{0x3bdf5129, 0x6e5604ea} }, -/**/ {{0xbfb5983f, 0xf3ffff64} }, -/**/ {{0x3f57ec04, 0x1f564189} }, -/**/ {{0x3fa67c7b, 0xa92e6e68} }, -/**/ {{0xbfa186db, 0x0542d0ff} }, -/**/ {{0x3f4ee247, 0x11a37bde} } }, -/**/ {{{0x3fe2c000, 0x00000000} }, -/**/ {{0x3fe0f5e2, 0x8b67e295} }, -/**/ {{0x3be311b1, 0x7ec990d0} }, -/**/ {{0x3fe7d24f, 0xa145af59} }, -/**/ {{0xbc83c6d1, 0xabdb623b} }, -/**/ {{0xbfd4c7fc, 0x6b9bdb30} }, -/**/ {{0x3c7c2fae, 0xd3bbb84b} }, -/**/ {{0x3f70e125, 0xc729b366} }, -/**/ {{0x3c1291fb, 0x7a19993c} }, -/**/ {{0x3fbe3fef, 0x66cf0dd8} }, -/**/ {{0xbc5428b7, 0xcd5e7640} }, -/**/ {{0xbfb59517, 0xa3273c21} }, -/**/ {{0x3f65adcf, 0x36891acb} }, -/**/ {{0x3fa5f05a, 0xe121c017} }, -/**/ {{0xbfa180c2, 0x384bad65} }, -/**/ {{0x3f5bd6f1, 0xd31e02a7} } }, -/**/ {{{0x3fe2e000, 0x00000000} }, -/**/ {{0x3fe10daa, 0x77307a0d} }, -/**/ {{0x3c869c33, 0xd44c7b05} }, -/**/ {{0x3fe7bd88, 0x19337139} }, -/**/ {{0xbc7fd248, 0x00e777ef} }, -/**/ {{0xbfd4c704, 0xb3e16264} }, -/**/ {{0xbc7ed720, 0xd46ed4e3} }, -/**/ {{0x3f7863a5, 0x62c1daf7} }, -/**/ {{0x3c155e73, 0x30cc82d1} }, -/**/ {{0x3fbdd411, 0x97a241da} }, -/**/ {{0x3c27a15a, 0x9ac44edd} }, -/**/ {{0xbfb59022, 0x9a6c71a6} }, -/**/ {{0x3f6f285a, 0xb5534ebe} }, -/**/ {{0x3fa56478, 0xa76d3cf7} }, -/**/ {{0xbfa1773c, 0xc1240db6} }, -/**/ {{0x3f63e5a1, 0x3891a70c} } }, -/**/ {{{0x3fe30000, 0x00000000} }, -/**/ {{0x3fe1255d, 0x9bfbd2a9} }, -/**/ {{0xbc52bdae, 0xe1c0ee35} }, -/**/ {{0x3fe7a8c1, 0xb5b1ffa1} }, -/**/ {{0x3c873e4a, 0x4e005ea3} }, -/**/ {{0xbfd4c5b3, 0x7fead5b8} }, -/**/ {{0x3c77958e, 0x55abc25a} }, -/**/ {{0x3f7fcb31, 0x01e4c970} }, -/**/ {{0xbc1ad968, 0xc5337fda} }, -/**/ {{0x3fbd6850, 0xf983ecf1} }, -/**/ {{0xbc3e45e6, 0x02ed6910} }, -/**/ {{0xbfb5896c, 0x532f49b6} }, -/**/ {{0x3f7432e2, 0xeaefcf7f} }, -/**/ {{0x3fa4d8ef, 0xe1db38f0} }, -/**/ {{0xbfa16a6a, 0x7c5c9def} }, -/**/ {{0x3f69a742, 0x7b6fe5d0} } }, -/**/ {{{0x3fe32000, 0x00000000} }, -/**/ {{0x3fe13cfb, 0xfb1b056e} }, -/**/ {{0x3c83110e, 0x6fc3ed38} }, -/**/ {{0x3fe793fc, 0xcf9bee6c} }, -/**/ {{0xbc8dc7d2, 0xd8d91b6c} }, -/**/ {{0xbfd4c40a, 0x12f7e51f} }, -/**/ {{0x3c7d1e10, 0x0d5d686d} }, -/**/ {{0x3f838be8, 0x839d28fa} }, -/**/ {{0x3c13427a, 0x52131640} }, -/**/ {{0x3fbcfcb6, 0x360bfed5} }, -/**/ {{0xbc5e3cb4, 0xa36f599f} }, -/**/ {{0xbfb58100, 0x3f7aa463} }, -/**/ {{0x3f78b31e, 0xb76f2bc0} }, -/**/ {{0x3fa44dda, 0x77dd6b80} }, -/**/ {{0xbfa15a6b, 0x21c53ca9} }, -/**/ {{0x3f6f30a7, 0x6cd99ed4} } }, -/**/ {{{0x3fe34000, 0x00000000} }, -/**/ {{0x3fe15485, 0x9637646a} }, -/**/ {{0xbc84ba7c, 0x548bf3c3} }, -/**/ {{0x3fe77f39, 0xbe88c85e} }, -/**/ {{0xbc6a983f, 0x9b6750c8} }, -/**/ {{0xbfd4c209, 0xafd6bee5} }, -/**/ {{0x3c7d21ef, 0x5e73e93a} }, -/**/ {{0x3f8724c7, 0xfc556ca7} }, -/**/ {{0xbc23cef2, 0x42e5673e} }, -/**/ {{0x3fbc9149, 0xbdaef67d} }, -/**/ {{0xbc1e549c, 0x3f04fcdc} }, -/**/ {{0xbfb576e9, 0xc7e4996a} }, -/**/ {{0x3f7d14fc, 0xba6ceedb} }, -/**/ {{0x3fa3c351, 0x53dcdc4a} }, -/**/ {{0xbfa1475e, 0x3a0a53a1} }, -/**/ {{0x3f724116, 0x62102619} } }, -/**/ {{{0x3fe36000, 0x00000000} }, -/**/ {{0x3fe16bfa, 0x6f5137e1} }, -/**/ {{0x3c79606f, 0xe141bd35} }, -/**/ {{0x3fe76a78, 0xd8cd8d65} }, -/**/ {{0x3c854a99, 0xddf1f71f} }, -/**/ {{0xbfd4bfb3, 0x98cabe40} }, -/**/ {{0xbc61e24d, 0x9ef99598} }, -/**/ {{0x3f8ab03d, 0x388e6864} }, -/**/ {{0x3c210541, 0xc340d113} }, -/**/ {{0x3fbc2613, 0xc7f24ec4} }, -/**/ {{0x3c54042a, 0x0a59af31} }, -/**/ {{0xbfb56b34, 0x49833ac1} }, -/**/ {{0x3f80ac4f, 0x22f6cd28} }, -/**/ {{0x3fa3396c, 0x64dac153} }, -/**/ {{0xbfa13163, 0x14dadf32} }, -/**/ {{0x3f74ce20, 0x21aeee27} } }, -/**/ {{{0x3fe38000, 0x00000000} }, -/**/ {{0x3fe1835a, 0x88be7c13} }, -/**/ {{0x3c8c621c, 0xec00c301} }, -/**/ {{0x3fe755ba, 0x737d49ca} }, -/**/ {{0xbc8abaf3, 0xd4cb44c6} }, -/**/ {{0xbfd4bd09, 0x0f73c4b3} }, -/**/ {{0x3c3e9ebf, 0xa9936e0b} }, -/**/ {{0x3f8e2e4f, 0x8920477f} }, -/**/ {{0xbc0889e3, 0x0360e009} }, -/**/ {{0x3fbbbb1c, 0x53aaefa0} }, -/**/ {{0xbc5edb26, 0xa1007b7f} }, -/**/ {{0xbfb55deb, 0x13f5f619} }, -/**/ {{0x3f82bf14, 0xe675741e} }, -/**/ {{0x3fa2b042, 0xa05e0ebf} }, -/**/ {{0xbfa11898, 0xbf95c5c1} }, -/**/ {{0x3f773faf, 0xe421ee51} } }, -/**/ {{{0x3fe3a000, 0x00000000} }, -/**/ {{0x3fe19aa5, 0xe5299f9a} }, -/**/ {{0xbc8a606c, 0x2c58f835} }, -/**/ {{0x3fe740fe, 0xe269c5b3} }, -/**/ {{0x3c873eff, 0x4c82509c} }, -/**/ {{0xbfd4ba0b, 0x54b63d79} }, -/**/ {{0xbc51d68a, 0x75bceeff} }, -/**/ {{0x3f90cf83, 0x9d9b3eb0} }, -/**/ {{0xbc107399, 0x68a7ca2f} }, -/**/ {{0x3fbb506b, 0x27453d35} }, -/**/ {{0x3c326b36, 0x00bdfedd} }, -/**/ {{0xbfb54f19, 0x67836cef} }, -/**/ {{0x3f84c2e5, 0x567ed6e8} }, -/**/ {{0x3fa227ea, 0x04a983e8} }, -/**/ {{0xbfa0fd1d, 0xfc7ce22f} }, -/**/ {{0x3f79960c, 0x2ffea71d} } }, -/**/ {{{0x3fe3c000, 0x00000000} }, -/**/ {{0x3fe1b1dc, 0x87904285} }, -/**/ {{0xbc621e8c, 0x8aef8f29} }, -/**/ {{0x3fe72c46, 0x78244c5a} }, -/**/ {{0x3c888c36, 0xe664f3a2} }, -/**/ {{0xbfd4b6bb, 0xa8a3ca2f} }, -/**/ {{0xbc778793, 0x1e1f3e19} }, -/**/ {{0x3f928136, 0xc8a3d8bb} }, -/**/ {{0x3c3dc4d8, 0x140daf1c} }, -/**/ {{0x3fbae607, 0xd1165ef3} }, -/**/ {{0xbc5fbfaa, 0x6305876c} }, -/**/ {{0xbfb53eca, 0x734b94bd} }, -/**/ {{0x3f86b7d8, 0x7c458eb1} }, -/**/ {{0x3fa1a077, 0x9b360f57} }, -/**/ {{0xbfa0df11, 0x3a6beabd} }, -/**/ {{0x3f7bd182, 0xaf42dc87} } }, -/**/ {{{0x3fe3e000, 0x00000000} }, -/**/ {{0x3fe1c8fe, 0x7341f64f} }, -/**/ {{0x3c728bbc, 0x9d5e792a} }, -/**/ {{0x3fe71791, 0x85fe8a32} }, -/**/ {{0x3c8f15bd, 0xe8bbb0d0} }, -/**/ {{0xbfd4b31b, 0x4a6497be} }, -/**/ {{0x3c737223, 0x782968f7} }, -/**/ {{0x3f942c46, 0x5e0c3122} }, -/**/ {{0xbc33e26a, 0x86422b13} }, -/**/ {{0x3fba7bf9, 0xa7b659b8} }, -/**/ {{0xbc3cdf63, 0x25381986} }, -/**/ {{0xbfb52d09, 0x538deb45} }, -/**/ {{0x3f889e08, 0xa0c1f425} }, -/**/ {{0x3fa119ff, 0x7b6d72e6} }, -/**/ {{0xbfa0be90, 0x8d11287b} }, -/**/ {{0x3f7df267, 0xbce83ad4} } }, -/**/ {{{0x3fe40000, 0x00000000} }, -/**/ {{0x3fe1e00b, 0xabdefeb4} }, -/**/ {{0xbc5928df, 0x287a668f} }, -/**/ {{0x3fe702e0, 0x5c0b8170} }, -/**/ {{0x3c7702e0, 0x5c0b8170} }, -/**/ {{0xbfd4af2b, 0x78215a76} }, -/**/ {{0xbc581c2e, 0xab3a13d8} }, -/**/ {{0x3f95d0b7, 0xe9e4a9d0} }, -/**/ {{0xbc3aa02a, 0xebf91fc7} }, -/**/ {{0x3fba1247, 0xca629942} }, -/**/ {{0xbc46961a, 0xc245db83} }, -/**/ {{0xbfb519e1, 0x100385b4} }, -/**/ {{0x3f8a7592, 0x32616ed8} }, -/**/ {{0x3fa09494, 0xcda1223a} }, -/**/ {{0xbfa09bb9, 0xa5a5c251} }, -/**/ {{0x3f7ff915, 0xf489d8ba} } }, -/**/ {{{0x3fe42000, 0x00000000} }, -/**/ {{0x3fe1f704, 0x3557138a} }, -/**/ {{0x3c76c659, 0xf6d7dd47} }, -/**/ {{0x3fe6ee33, 0x4920943e} }, -/**/ {{0xbc62723e, 0x61a3a541} }, -/**/ {{0xbfd4aaed, 0x6eedf042} }, -/**/ {{0x3c5b337a, 0xe7561ed4} }, -/**/ {{0x3f976e91, 0x68796803} }, -/**/ {{0xbc0e806f, 0x44d1db93} }, -/**/ {{0x3fb9a8f9, 0x21688625} }, -/**/ {{0x3c540185, 0xb1ec0554} }, -/**/ {{0xbfb5055c, 0x9a4cbc61} }, -/**/ {{0x3f8c3e93, 0xab0be204} }, -/**/ {{0x3fa01049, 0xce3968a1} }, -/**/ {{0xbfa076a9, 0xcc2331ba} }, -/**/ {{0x3f80f2f6, 0xe220db7e} } }, -/**/ {{{0x3fe44000, 0x00000000} }, -/**/ {{0x3fe20de8, 0x13e823b2} }, -/**/ {{0xbc8791d7, 0x53ebb744} }, -/**/ {{0x3fe6d98a, 0x9ad6a3fd} }, -/**/ {{0xbc808110, 0xc4e69862} }, -/**/ {{0xbfd4a662, 0x6ab4a79d} }, -/**/ {{0x3c52ed25, 0x9fc1cc2b} }, -/**/ {{0x3f9905d9, 0x42e6dc28} }, -/**/ {{0xbc228c79, 0xe39b7707} }, -/**/ {{0x3fb94014, 0x5e97c6f4} }, -/**/ {{0xbc52b822, 0xf8779202} }, -/**/ {{0xbfb4ef86, 0xcc723054} }, -/**/ {{0x3f8df92d, 0x76852811} }, -/**/ {{0x3f9f1a5f, 0xa231ee3f} }, -/**/ {{0xbfa04f7d, 0xd8f34e77} }, -/**/ {{0x3f81dcaa, 0x80706a34} } }, -/**/ {{{0x3fe46000, 0x00000000} }, -/**/ {{0x3fe224b7, 0x4c1d192a} }, -/**/ {{0x3c8d6d3d, 0xf88a60c4} }, -/**/ {{0x3fe6c4e6, 0x9d8b44ec} }, -/**/ {{0xbc589d5c, 0x4ed04ec2} }, -/**/ {{0xbfd4a18b, 0xa6222a08} }, -/**/ {{0xbc66c919, 0xd3867dbd} }, -/**/ {{0x3f9a9696, 0x4bb5a8a0} }, -/**/ {{0x3c36698e, 0x927bb5bd} }, -/**/ {{0x3fb8d79f, 0xfdbbcc76} }, -/**/ {{0x3c2578bd, 0x4efb71a1} }, -/**/ {{0xbfb4d86a, 0x6778e363} }, -/**/ {{0x3f8fa581, 0xd930230d} }, -/**/ {{0x3f9e16ae, 0x8a6221aa} }, -/**/ {{0xbfa02652, 0x2f183972} }, -/**/ {{0x3f82b9db, 0x3e507f4f} } }, -/**/ {{{0x3fe48000, 0x00000000} }, -/**/ {{0x3fe23b71, 0xe2cc9e6a} }, -/**/ {{0x3c6c421c, 0x9f38224e} }, -/**/ {{0x3fe6b047, 0x9c620595} }, -/**/ {{0x3c8867df, 0x07d7f0c2} }, -/**/ {{0xbfd49c6a, 0x5a920887} }, -/**/ {{0xbc764547, 0x37bcc433} }, -/**/ {{0x3f9c20cf, 0xbb7e5931} }, -/**/ {{0xbc3d86f5, 0x4db6bef2} }, -/**/ {{0x3fb86fa2, 0x451c4a5d} }, -/**/ {{0xbc475142, 0x15afb52c} }, -/**/ {{0xbfb4c012, 0x120917da} }, -/**/ {{0x3f90a1da, 0x6b9c3fad} }, -/**/ {{0x3f9d159f, 0x708543e5} }, -/**/ {{0xbf9ff685, 0x6d929bce} }, -/**/ {{0x3f838ac0, 0xd0361a66} } }, -/**/ {{{0x3fe4a000, 0x00000000} }, -/**/ {{0x3fe25217, 0xdd17e501} }, -/**/ {{0x3c856aa8, 0x8c1b679c} }, -/**/ {{0x3fe69bad, 0xe145c95d} }, -/**/ {{0xbc873257, 0x5605046d} }, -/**/ {{0xbfd496ff, 0xbffbe8a8} }, -/**/ {{0x3c36a5c5, 0xc7b45e6f} }, -/**/ {{0x3f9da48d, 0x2d9556eb} }, -/**/ {{0x3c3ff0e8, 0x1871a19d} }, -/**/ {{0x3fb80821, 0x46043f42} }, -/**/ {{0x3c550eec, 0xe660cfa1} }, -/**/ {{0xbfb4a688, 0x5727a8cb} }, -/**/ {{0x3f9169f6, 0x0e13efbc} }, -/**/ {{0x3f9c174f, 0xb59149dd} }, -/**/ {{0xbf9f9cd5, 0xb10444dd} }, -/**/ {{0x3f844f95, 0x03e91dd9} } }, -/**/ {{{0x3fe4c000, 0x00000000} }, -/**/ {{0x3fe268a9, 0x40696da6} }, -/**/ {{0x3c5d1348, 0xa04c73cc} }, -/**/ {{0x3fe68719, 0xb4ea3592} }, -/**/ {{0xbc7ecf86, 0x088ed284} }, -/**/ {{0xbfd4914d, 0x0ce1507d} }, -/**/ {{0xbc6410ef, 0x4dff2946} }, -/**/ {{0x3f9f21d6, 0x9cbf7eb7} }, -/**/ {{0x3c39bc22, 0xeaaad7e2} }, -/**/ {{0x3fb7a122, 0xdd4f3070} }, -/**/ {{0x3c50d950, 0x1cfe44af} }, -/**/ {{0xbfb48bd7, 0xa50188df} }, -/**/ {{0x3f922b27, 0x71756204} }, -/**/ {{0x3f9b1bdb, 0x0810a33a} }, -/**/ {{0xbf9f3fca, 0xf1011313} }, -/**/ {{0x3f850893, 0x8fe0f49b} } }, -/**/ {{{0x3fe4e000, 0x00000000} }, -/**/ {{0x3fe27f26, 0x1273d1b3} }, -/**/ {{0x3c843bf3, 0x6151dd9f} }, -/**/ {{0x3fe6728b, 0x5ecd3069} }, -/**/ {{0x3c67417b, 0x539f23ff} }, -/**/ {{0xbfd48b53, 0x763c0fe8} }, -/**/ {{0xbc677a1a, 0x6027975c} }, -/**/ {{0x3fa04c5a, 0x2ff7dd6a} }, -/**/ {{0xbc40808e, 0x496202e8} }, -/**/ {{0x3fb73aac, 0xb3fc3f7c} }, -/**/ {{0x3c4b58cb, 0x86b114ff} }, -/**/ {{0xbfb4700a, 0x4bc91249} }, -/**/ {{0x3f92e582, 0xef2490f8} }, -/**/ {{0x3f9a235b, 0x6c875580} }, -/**/ {{0xbf9edf99, 0xe55cd596} }, -/**/ {{0x3f85b5f9, 0xe40c5a18} } }, -/**/ {{{0x3fe50000, 0x00000000} }, -/**/ {{0x3fe2958e, 0x59308e31} }, -/**/ {{0xbc709e73, 0xb0c6c087} }, -/**/ {{0x3fe65e03, 0x2538713c} }, -/**/ {{0xbc601392, 0x42c09163} }, -/**/ {{0xbfd48514, 0x2f6d4575} }, -/**/ {{0xbc356341, 0x4568af3f} }, -/**/ {{0x3fa10497, 0x9386fd1d} }, -/**/ {{0xbc4a756a, 0x230a452f} }, -/**/ {{0x3fb6d4c4, 0x3fc6c180} }, -/**/ {{0x3c5ab2b9, 0xdb3fe137} }, -/**/ {{0xbfb4532a, 0x7ca4cfd0} }, -/**/ {{0x3f93991d, 0x90eb1d30} }, -/**/ {{0x3f992de9, 0x46163051} }, -/**/ {{0xbf9e7c76, 0x2de874ff} }, -/**/ {{0x3f865806, 0xfc0c1cb2} } }, -/**/ {{{0x3fe52000, 0x00000000} }, -/**/ {{0x3fe2abe2, 0x1aded073} }, -/**/ {{0x3c8c28c0, 0x01ad022e} }, -/**/ {{0x3fe64981, 0x4d432177} }, -/**/ {{0x3c83f41b, 0x055e240c} }, -/**/ {{0xbfd47e90, 0x6a2cfd01} }, -/**/ {{0x3c628585, 0xf152d080} }, -/**/ {{0x3fa1b9a7, 0xfbe3ed9e} }, -/**/ {{0xbc18a085, 0xf259fe04} }, -/**/ {{0x3fb66f6e, 0xc3c40175} }, -/**/ {{0x3c41d80a, 0xb0fda762} }, -/**/ {{0xbfb43542, 0x48af643a} }, -/**/ {{0x3f94460d, 0x05ad7652} }, -/**/ {{0x3f983b9b, 0x5f55ab26} }, -/**/ {{0xbf9e1692, 0x4be18b23} }, -/**/ {{0x3f86eefb, 0x32e755a3} } }, -/**/ {{{0x3fe54000, 0x00000000} }, -/**/ {{0x3fe2c221, 0x5e024466} }, -/**/ {{0xbc44b810, 0xda3a4be1} }, -/**/ {{0x3fe63506, 0x1ad38da0} }, -/**/ {{0xbc67f12a, 0x94ec14b0} }, -/**/ {{0xbfd477c9, 0x567a6652} }, -/**/ {{0x3c7be71c, 0xbbb9df88} }, -/**/ {{0x3fa26b90, 0x1535acb9} }, -/**/ {{0xbc30ff6c, 0xff041454} }, -/**/ {{0x3fb60ab1, 0x5105d8fa} }, -/**/ {{0x3c535a89, 0x3f2d6492} }, -/**/ {{0xbfb4165b, 0xa0083319} }, -/**/ {{0x3f94ec67, 0x965eb0a7} }, -/**/ {{0x3f974c86, 0xf36231e5} }, -/**/ {{0xbf9dae1f, 0x9c25f4a4} }, -/**/ {{0x3f877b18, 0x183e42dc} } }, -/**/ {{{0x3fe56000, 0x00000000} }, -/**/ {{0x3fe2d84c, 0x2961e48c} }, -/**/ {{0xbc7f2542, 0x0a36e506} }, -/**/ {{0x3fe62091, 0xd0a0e5d4} }, -/**/ {{0x3c82a27d, 0xcccb008e} }, -/**/ {{0xbfd470c0, 0x228ca1b6} }, -/**/ {{0xbc788e9b, 0x32884415} }, -/**/ {{0x3fa31a54, 0xb365e4d9} }, -/**/ {{0x3c3e6e70, 0xda0f99ae} }, -/**/ {{0x3fb5a690, 0xc741ccb7} }, -/**/ {{0xbc383905, 0x6508ffe1} }, -/**/ {{0xbfb3f680, 0x50f46c17} }, -/**/ {{0x3f958c44, 0x1b344c30} }, -/**/ {{0x3f9660bf, 0xb713db8a} }, -/**/ {{0xbf9d434e, 0x5224992a} }, -/**/ {{0x3f87fca0, 0x46ffb16e} } }, -/**/ {{{0x3fe58000, 0x00000000} }, -/**/ {{0x3fe2ee62, 0x8406cbca} }, -/**/ {{0x3c8c5d5e, 0x9ff0cf8d} }, -/**/ {{0x3fe60c24, 0xb0350d38} }, -/**/ {{0x3c81ffe9, 0xf3db4fcb} }, -/**/ {{0xbfd46975, 0xfac420bd} }, -/**/ {{0x3c7e6994, 0x850528a0} }, -/**/ {{0x3fa3c5fa, 0xd098b4ee} }, -/**/ {{0x3c353c41, 0xaa6a6874} }, -/**/ {{0x3fb54311, 0xd57c5b53} }, -/**/ {{0x3c50d02e, 0x72d146e0} }, -/**/ {{0xbfb3d5ba, 0x071017e0} }, -/**/ {{0x3f9625b9, 0xf11b08a7} }, -/**/ {{0x3f957857, 0xe25bbc6f} }, -/**/ {{0xbf9cd64d, 0x7384981f} }, -/**/ {{0x3f8873d7, 0x3da3b8d5} } }, -/**/ {{{0x3fe5a000, 0x00000000} }, -/**/ {{0x3fe30464, 0x753b090b} }, -/**/ {{0xbc73e712, 0x61da18f3} }, -/**/ {{0x3fe5f7be, 0xf9ee77b6} }, -/**/ {{0x3c8949f7, 0x854f9928} }, -/**/ {{0xbfd461ec, 0x099c98f6} }, -/**/ {{0x3c5da491, 0x3eafe889} }, -/**/ {{0x3fa46e87, 0x8ba9e286} }, -/**/ {{0x3c42573a, 0x5377a1a9} }, -/**/ {{0x3fb4e038, 0xfab82ffb} }, -/**/ {{0xbc414e45, 0x402ef939} }, -/**/ {{0xbfb3b412, 0x4a8ec478} }, -/**/ {{0x3f96b8e0, 0xef6dba07} }, -/**/ {{0x3f949360, 0x39c13c6e} }, -/**/ {{0xbf9c674a, 0xd47bfddb} }, -/**/ {{0x3f88e101, 0x37ed6935} } }, -/**/ {{{0x3fe5c000, 0x00000000} }, -/**/ {{0x3fe31a52, 0x048874be} }, -/**/ {{0x3c840cab, 0x87a7ac24} }, -/**/ {{0x3fe5e360, 0xed021586} }, -/**/ {{0x3c86a444, 0xb32ab7e4} }, -/**/ {{0xbfd45a23, 0x779f86c4} }, -/**/ {{0xbc75b9dc, 0x6b782501} }, -/**/ {{0x3fa51400, 0x26af940c} }, -/**/ {{0x3c4f700e, 0xf9ce64e2} }, -/**/ {{0x3fb47e0a, 0x86a8eb42} }, -/**/ {{0xbc5a4df9, 0x36377584} }, -/**/ {{0xbfb39192, 0x7f8b6d42} }, -/**/ {{0x3f9745d1, 0x5deeeabc} }, -/**/ {{0x3f93b1e8, 0x17fa1033} }, -/**/ {{0xbf9bf673, 0x14cf2061} }, -/**/ {{0x3f894463, 0x0a340016} } }, -/**/ {{{0x3fe5e000, 0x00000000} }, -/**/ {{0x3fe3302b, 0x39b78856} }, -/**/ {{0x3c85dd2e, 0xd87ba82b} }, -/**/ {{0x3fe5cf0a, 0xc77d4bea} }, -/**/ {{0xbc8684ab, 0x0d42ab66} }, -/**/ {{0xbfd4521d, 0x6b573e11} }, -/**/ {{0xbc7601b9, 0xb90c9c27} }, -/**/ {{0x3fa5b66a, 0x0582aeaa} }, -/**/ {{0x3c281575, 0x8cc985ad} }, -/**/ {{0x3fb41c8a, 0x9a69373d} }, -/**/ {{0xbc33df07, 0x25ea8f67} }, -/**/ {{0xbfb36e43, 0xe5673a18} }, -/**/ {{0x3f97cca3, 0xeb05f3bc} }, -/**/ {{0x3f92d3fd, 0x7797abe9} }, -/**/ {{0xbf9b83f1, 0x9d71c254} }, -/**/ {{0x3f899e41, 0xfe333861} } }, -/**/ {{{0x3fe60000, 0x00000000} }, -/**/ {{0x3fe345f0, 0x1cce37bb} }, -/**/ {{0x3c810211, 0x37c71102} }, -/**/ {{0x3fe5babc, 0xc647fa91} }, -/**/ {{0x3c84339b, 0x8056eaf3} }, -/**/ {{0xbfd449db, 0x094286d0} }, -/**/ {{0x3c75e178, 0x512b1c7b} }, -/**/ {{0x3fa655ca, 0xac4cf102} }, -/**/ {{0xbc27a1e4, 0x61e8206a} }, -/**/ {{0x3fb3bbbd, 0x2933dd9c} }, -/**/ {{0xbc517633, 0xbd42c006} }, -/**/ {{0xbfb34a2f, 0x9636afc9} }, -/**/ {{0x3f984d71, 0xa2400f6f} }, -/**/ {{0x3f91f9ac, 0xfcc53cab} }, -/**/ {{0xbf9b0ff0, 0x9ec31ef1} }, -/**/ {{0x3f89eee3, 0xb1615b05} } }, -/**/ {{{0x3fe62000, 0x00000000} }, -/**/ {{0x3fe35ba0, 0xb60eccce} }, -/**/ {{0x3c8e3ba1, 0x9b9368b9} }, -/**/ {{0x3fe5a677, 0x25268d22} }, -/**/ {{0x3c7bc76e, 0xaf72cee6} }, -/**/ {{0xbfd4415d, 0x73c8c31c} }, -/**/ {{0xbc3e5b3c, 0xe00e5645} }, -/**/ {{0x3fa6f227, 0xbe1ce1b6} }, -/**/ {{0xbc04a922, 0xe699fcac} }, -/**/ {{0x3fb35ba5, 0xf91f9885} }, -/**/ {{0xbc43f8be, 0x418827b3} }, -/**/ {{0xbfb3255e, 0x863cebc9} }, -/**/ {{0x3f98c853, 0xe315ca66} }, -/**/ {{0x3f912301, 0xff116cac} }, -/**/ {{0xbf9a9a99, 0x0f5e09c2} }, -/**/ {{0x3f8a368d, 0xf4c8d587} } }, -/**/ {{{0x3fe64000, 0x00000000} }, -/**/ {{0x3fe3713d, 0x0df6c504} }, -/**/ {{0xbc54f789, 0xe031606d} }, -/**/ {{0x3fe5923a, 0x1ebc184f} }, -/**/ {{0x3c829fe8, 0xbe5956dd} }, -/**/ {{0xbfd438a5, 0xcb2e9cc9} }, -/**/ {{0xbc7c1839, 0x7d6ce3eb} }, -/**/ {{0x3fa78b86, 0xfb7fa678} }, -/**/ {{0x3befb53e, 0xd082025e} }, -/**/ {{0x3fb2fc48, 0xa3dd5905} }, -/**/ {{0x3c5fd567, 0x06b78682} }, -/**/ {{0xbfb2ffd9, 0x8374843c} }, -/**/ {{0x3f993d64, 0x57f51471} }, -/**/ {{0x3f905006, 0x933f6cc5} }, -/**/ {{0xbf9a2412, 0xab7658df} }, -/**/ {{0x3f8a7586, 0xae624ab4} } }, -/**/ {{{0x3fe66000, 0x00000000} }, -/**/ {{0x3fe386c5, 0x2d3db11f} }, -/**/ {{0xbc8b78e1, 0xcbebe6a0} }, -/**/ {{0x3fe57e05, 0xec8c8203} }, -/**/ {{0x3c8ea585, 0x5e7f92dc} }, -/**/ {{0xbfd42fb5, 0x2d8b381e} }, -/**/ {{0xbc63afe6, 0x5cff451e} }, -/**/ {{0x3fa821ee, 0x4120d643} }, -/**/ {{0xbc3e664f, 0xcbc4d2dc} }, -/**/ {{0x3fb29da8, 0x9778bfdb} }, -/**/ {{0x3c3760dd, 0x7c2057a5} }, -/**/ {{0xbfb2d9a9, 0x3525a55a} }, -/**/ {{0x3f99acbc, 0xed9015c8} }, -/**/ {{0x3f8f0187, 0x2a35e7d2} }, -/**/ {{0xbf99ac83, 0xf4bcdfc7} }, -/**/ {{0x3f8aac13, 0xbbeb4f11} } }, -/**/ {{{0x3fe68000, 0x00000000} }, -/**/ {{0x3fe39c39, 0x1cd4171a} }, -/**/ {{0xbc823043, 0x31d8bf46} }, -/**/ {{0x3fe569da, 0xc6feb417} }, -/**/ {{0x3c803ce5, 0x0625e450} }, -/**/ {{0xbfd4268c, 0xb6bde980} }, -/**/ {{0xbc6e8f76, 0xe8258561} }, -/**/ {{0x3fa8b563, 0x86705749} }, -/**/ {{0x3c418e14, 0xe6172281} }, -/**/ {{0x3fb23fc9, 0x171a8768} }, -/**/ {{0xbc562184, 0x3225d825} }, -/**/ {{0xbfb2b2d6, 0x1b8904fd} }, -/**/ {{0x3f9a1677, 0xca70ce88} }, -/**/ {{0x3f8d6a81, 0x62963581} }, -/**/ {{0xbf993412, 0x32c353bb} }, -/**/ {{0x3f8ada7a, 0xd7354ec0} } }, -/**/ {{{0x3fe6a000, 0x00000000} }, -/**/ {{0x3fe3b198, 0xe5e2564b} }, -/**/ {{0xbc72f922, 0x1f0752ac} }, -/**/ {{0x3fe555b8, 0xe55ed910} }, -/**/ {{0xbc5615bc, 0x656f2eb2} }, -/**/ {{0xbfd41d2d, 0x80646bca} }, -/**/ {{0xbc75d1d6, 0x1ff3506f} }, -/**/ {{0x3fa945ec, 0xdc4e5727} }, -/**/ {{0x3c213c8e, 0x18968922} }, -/**/ {{0x3fb1e2ad, 0x3bcc9fa4} }, -/**/ {{0x3c2b899c, 0x0a43c591} }, -/**/ {{0xbfb28b68, 0x8f774533} }, -/**/ {{0x3f9a7aaf, 0x46d16acc} }, -/**/ {{0x3f8bdb08, 0xde405cc6} }, -/**/ {{0xbf98bae1, 0x73d9884b} }, -/**/ {{0x3f8b0101, 0x7be7742a} } }, -/**/ {{{0x3fe6c000, 0x00000000} }, -/**/ {{0x3fe3c6e4, 0x91c78dc5} }, -/**/ {{0xbc8e1450, 0x94fd0ba7} }, -/**/ {{0x3fe541a0, 0x7de0a269} }, -/**/ {{0x3c8b9072, 0x163b639c} }, -/**/ {{0xbfd41398, 0xa1d194fc} }, -/**/ {{0xbc7ef191, 0x8629402d} }, -/**/ {{0x3fa9d390, 0x6bbd69eb} }, -/**/ {{0x3c488aec, 0xd2c4a6a5} }, -/**/ {{0x3fb18657, 0xf53fbee6} }, -/**/ {{0x3c54e6aa, 0x0104d1dd} }, -/**/ {{0xbfb26368, 0xc2245ee6} }, -/**/ {{0x3f9ad97d, 0xe4b91b16} }, -/**/ {{0x3f8a5328, 0x74b192c7} }, -/**/ {{0xbf984114, 0x8e5d8b31} }, -/**/ {{0x3f8b1fec, 0xceadce82} } }, -/**/ {{{0x3fe6e000, 0x00000000} }, -/**/ {{0x3fe3dc1c, 0x2a188504} }, -/**/ {{0x3c82ce63, 0x70f4e971} }, -/**/ {{0x3fe52d91, 0xc5a197ed} }, -/**/ {{0xbc804b92, 0x1baab820} }, -/**/ {{0xbfd409cf, 0x300486f8} }, -/**/ {{0xbc6d3bb8, 0xae804189} }, -/**/ {{0x3faa5e54, 0x749adab8} }, -/**/ {{0x3c20b0d5, 0xc631cfd3} }, -/**/ {{0x3fb12acc, 0x0a922c54} }, -/**/ {{0x3c521a06, 0x7cbc4417} }, -/**/ {{0xbfb23ade, 0xbce6ae05} }, -/**/ {{0x3f9b32fe, 0x485d279b} }, -/**/ {{0x3f88d2e8, 0xd9b56b96} }, -/**/ {{0xbf97c6cd, 0x227841f4} }, -/**/ {{0x3f8b3781, 0x85cf6ba0} } }, -/**/ {{{0x3fe70000, 0x00000000} }, -/**/ {{0x3fe3f13f, 0xb89e96f4} }, -/**/ {{0x3c7ecf8b, 0x492644f0} }, -/**/ {{0x3fe5198c, 0xf0ab6f99} }, -/**/ {{0x3c71b875, 0x5e1ffaba} }, -/**/ {{0xbfd3ffd2, 0x3da059f4} }, -/**/ {{0x3c5bba8e, 0x77eee53d} }, -/**/ {{0x3faae63f, 0x4c5d36dc} }, -/**/ {{0xbc4e6e4e, 0x2a3994d6} }, -/**/ {{0x3fb0d00c, 0x1b178ada} }, -/**/ {{0x3c4b94c3, 0xb3e710cc} }, -/**/ {{0xbfb211d2, 0x61093929} }, -/**/ {{0x3f9b874b, 0x30c5dd59} }, -/**/ {{0x3f875a50, 0xb0b899ed} }, -/**/ {{0xbf974c2b, 0x9c404912} }, -/**/ {{0x3f8b4803, 0xd3249a4d} } }, -/**/ {{{0x3fe72000, 0x00000000} }, -/**/ {{0x3fe4064f, 0x47569f49} }, -/**/ {{0xbc8aad88, 0xf91bf2b2} }, -/**/ {{0x3fe50592, 0x31f66da7} }, -/**/ {{0xbc8837f1, 0x134b7507} }, -/**/ {{0xbfd3f5a2, 0xdae43e4d} }, -/**/ {{0xbc7f29b0, 0xdc59e382} }, -/**/ {{0x3fab6b57, 0x5cd91a8c} }, -/**/ {{0xbc225bf7, 0xd6ab0dfc} }, -/**/ {{0x3fb0761a, 0x9f216d7a} }, -/**/ {{0x3c577818, 0xe546203e} }, -/**/ {{0xbfb1e84b, 0x67a8cf31} }, -/**/ {{0x3f9bd67f, 0x70b6dd6f} }, -/**/ {{0x3f85e964, 0x9ff677e5} }, -/**/ {{0xbf96d14f, 0x363cf426} }, -/**/ {{0x3f8b51b7, 0x4f6617de} } }, -/**/ {{{0x3fe74000, 0x00000000} }, -/**/ {{0x3fe41b4a, 0xe06fea41} }, -/**/ {{0x3c63d60a, 0x53277652} }, -/**/ {{0x3fe4f1a1, 0xbb6bcc2c} }, -/**/ {{0x3c5c8d69, 0x7c81f558} }, -/**/ {{0xbfd3eb42, 0x15a41364} }, -/**/ {{0x3c728a9c, 0x617c316a} }, -/**/ {{0x3fabeda3, 0x230c44b8} }, -/**/ {{0x3c41fa15, 0x50d9e9da} }, -/**/ {{0x3fb01cf9, 0xe8c87fc3} }, -/**/ {{0x3c410990, 0xa175df34} }, -/**/ {{0xbfb1be51, 0x619b963c} }, -/**/ {{0x3f9c20b5, 0xe7da421c} }, -/**/ {{0x3f848027, 0x637b86b0} }, -/**/ {{0xbf965655, 0xfc436ff1} }, -/**/ {{0x3f8b54de, 0xe6cd859f} } }, -/**/ {{{0x3fe76000, 0x00000000} }, -/**/ {{0x3fe43032, 0x8e4b26d6} }, -/**/ {{0xbc813159, 0x1070b99f} }, -/**/ {{0x3fe4ddbb, 0xbde829f5} }, -/**/ {{0xbc735ff2, 0xb6d17615} }, -/**/ {{0xbfd3e0b0, 0xf941711a} }, -/**/ {{0x3c7d3454, 0xe9027227} }, -/**/ {{0x3fac6d29, 0x2deef5c2} }, -/**/ {{0x3c476533, 0x0ba13bb6} }, -/**/ {{0x3faf8958, 0x496c1e5e} }, -/**/ {{0x3c49ebf2, 0xe1abdf2f} }, -/**/ {{0xbfb193eb, 0xb762a82c} }, -/**/ {{0x3f9c6609, 0x7c2df93f} }, -/**/ {{0x3f831e99, 0xdff7724a} }, -/**/ {{0xbf95db5c, 0xcea82a5a} }, -/**/ {{0x3f8b51bc, 0xc6ff27bb} } }, -/**/ {{{0x3fe78000, 0x00000000} }, -/**/ {{0x3fe44506, 0x5b795b56} }, -/**/ {{0xbc7f76d0, 0x163f79c8} }, -/**/ {{0x3fe4c9e0, 0x693e0015} }, -/**/ {{0xbc7b0fcb, 0x60fff59b} }, -/**/ {{0xbfd3d5f0, 0x8ea521a8} }, -/**/ {{0x3c561573, 0xb5bcc402} }, -/**/ {{0x3face9f0, 0x1d4b9b62} }, -/**/ {{0x3c481226, 0xf2c93cfb} }, -/**/ {{0x3faeda66, 0xb5db8847} }, -/**/ {{0xbc44ec99, 0x3a386670} }, -/**/ {{0xbfb16921, 0xa92559e3} }, -/**/ {{0x3f9ca695, 0x13b2a17d} }, -/**/ {{0x3f81c4bb, 0x355982b3} }, -/**/ {{0xbf95607f, 0x65bec936} }, -/**/ {{0x3f8b4892, 0x4e349f67} } }, -/**/ {{{0x3fe7a000, 0x00000000} }, -/**/ {{0x3fe459c6, 0x52badc7f} }, -/**/ {{0x3c819969, 0x8e8e135c} }, -/**/ {{0x3fe4b60f, 0xec381dcb} }, -/**/ {{0xbc6b9874, 0x4724e4f2} }, -/**/ {{0xbfd3cb01, 0xdc390960} }, -/**/ {{0xbc7243b1, 0x7ba1320c} }, -/**/ {{0x3fad63fe, 0xa09cca72} }, -/**/ {{0x3c48308c, 0xe5ab8d04} }, -/**/ {{0x3fae2d22, 0xdf2eb652} }, -/**/ {{0xbc4988a3, 0x4eb29ad3} }, -/**/ {{0xbfb13dfa, 0x4eb5cb96} }, -/**/ {{0x3f9ce273, 0x8e5b2657} }, -/**/ {{0x3f807288, 0xd132be74} }, -/**/ {{0xbf94e5d8, 0x55a31e9e} }, -/**/ {{0x3f8b399f, 0xfba00cb2} } }, -/**/ {{{0x3fe7c000, 0x00000000} }, -/**/ {{0x3fe46e72, 0x7efe4716} }, -/**/ {{0xbc639b9b, 0x1b844cc9} }, -/**/ {{0x3fe4a24a, 0x749c2a47} }, -/**/ {{0xbc8f9d05, 0x82d8a2e5} }, -/**/ {{0xbfd3bfe5, 0xe5e27a03} }, -/**/ {{0xbc5047da, 0xb30f6d58} }, -/**/ {{0x3faddb5b, 0x75f185ec} }, -/**/ {{0x3c43b680, 0x23d5084a} }, -/**/ {{0x3fad8190, 0x479061d2} }, -/**/ {{0xbbf4565c, 0x602d3547} }, -/**/ {{0xbfb1127c, 0x979e619e} }, -/**/ {{0x3f9d19bf, 0xc03c4720} }, -/**/ {{0x3f7e4ffd, 0x01b2b45f} }, -/**/ {{0xbf946b81, 0x1245b0bb} }, -/**/ {{0x3f8b2525, 0x60fec8ec} } }, -/**/ {{{0x3fe7e000, 0x00000000} }, -/**/ {{0x3fe4830a, 0xeb5f7bfe} }, -/**/ {{0xbc5a2656, 0x66764a73} }, -/**/ {{0x3fe48e90, 0x2f2d2be4} }, -/**/ {{0x3c810a8e, 0x969bba3b} }, -/**/ {{0xbfd3b49d, 0xacfcef4d} }, -/**/ {{0xbc6a4f98, 0xb7a61548} }, -/**/ {{0x3fae500d, 0x68d7d101} }, -/**/ {{0xbc305c3e, 0x04860c21} }, -/**/ {{0x3facd7b2, 0x2c98ea9c} }, -/**/ {{0x3c48692b, 0xd46adca0} }, -/**/ {{0xbfb0e6af, 0x4b37c6a5} }, -/**/ {{0x3f9d4c94, 0x6bfb2662} }, -/**/ {{0x3f7bca2d, 0x0692cc75} }, -/**/ {{0xbf93f191, 0xf3b69312} }, -/**/ {{0x3f8b0b61, 0x1552b8ee} } }, -/**/ {{{0x3fe80000, 0x00000000} }, -/**/ {{0x3fe4978f, 0xa3269ee1} }, -/**/ {{0x3c72419a, 0x87f2a458} }, -/**/ {{0x3fe47ae1, 0x47ae147b} }, -/**/ {{0xbc6eb851, 0xeb851eb8} }, -/**/ {{0xbfd3a92a, 0x30553261} }, -/**/ {{0xbc7f06f6, 0x94467382} }, -/**/ {{0x3faec21b, 0x514d88d8} }, -/**/ {{0x3c3cd061, 0xf45873a6} }, -/**/ {{0x3fac2f8b, 0x88dfb80c} }, -/**/ {{0xbc14fcbc, 0x53add20b} }, -/**/ {{0xbfb0ba99, 0x08c71945} }, -/**/ {{0x3f9d7b0c, 0x3d79f13f} }, -/**/ {{0x3f795393, 0x357dfc67} }, -/**/ {{0xbf937822, 0x3aa97829} }, -/**/ {{0x3f8aec90, 0xa8b90db0} } }, -/**/ {{{0x3fe82000, 0x00000000} }, -/**/ {{0x3fe4ac00, 0xb1c71762} }, -/**/ {{0x3c8b20e7, 0x2382b900} }, -/**/ {{0x3fe4673d, 0xe8e45252} }, -/**/ {{0x3c57d208, 0x67458f9c} }, -/**/ {{0xbfd39d8c, 0x6c24e1b3} }, -/**/ {{0xbc7830c5, 0x973c6d15} }, -/**/ {{0x3faf318c, 0x12b78147} }, -/**/ {{0xbc4fa440, 0xd318184c} }, -/**/ {{0x3fab891f, 0x158b44e7} }, -/**/ {{0x3c4d5f9f, 0x45d7f1f3} }, -/**/ {{0xbfb08e40, 0x47a3e8ba} }, -/**/ {{0x3f9da541, 0xc4c1a21a} }, -/**/ {{0x3f76ec1e, 0x3c0d1d71} }, -/**/ {{0xbf92ff48, 0x152e0bfc} }, -/**/ {{0x3f8ac8f0, 0x9955298f} } }, -/**/ {{{0x3fe84000, 0x00000000} }, -/**/ {{0x3fe4c05e, 0x22de94e5} }, -/**/ {{0xbc8c0ac1, 0xf09f2edf} }, -/**/ {{0x3fe453a6, 0x3c9a6560} }, -/**/ {{0x3c77a95f, 0x828bba02} }, -/**/ {{0xbfd391c5, 0x5a0e5b1c} }, -/**/ {{0x3c7d553d, 0xcd3f76d2} }, -/**/ {{0x3faf9e66, 0x9adede86} }, -/**/ {{0xbc225e54, 0xd6d2bac0} }, -/**/ {{0x3faae46f, 0x4bdf89d7} }, -/**/ {{0x3c39c98c, 0x2b25b8d9} }, -/**/ {{0xbfb061ab, 0x5765a5c1} }, -/**/ {{0x3f9dcb4f, 0x7127d649} }, -/**/ {{0x3f7493ba, 0x13002646} }, -/**/ {{0xbf928718, 0xa397d1a6} }, -/**/ {{0x3f8aa0bc, 0x494648b5} } }, -/**/ {{{0x3fe86000, 0x00000000} }, -/**/ {{0x3fe4d4a8, 0x023414e8} }, -/**/ {{0x3c6e3a89, 0x1daa88b0} }, -/**/ {{0x3fe4401a, 0x6ba2786e} }, -/**/ {{0xbc4b8213, 0xe3b5f317} }, -/**/ {{0xbfd385d5, 0xf11905c0} }, -/**/ {{0xbc72a1e9, 0xa2f42dd1} }, -/**/ {{0x3fb00458, 0xf07a526f} }, -/**/ {{0xbc14f965, 0xac5fd817} }, -/**/ {{0x3faa417e, 0x66ca7da2} }, -/**/ {{0x3c4b1e1a, 0xa050b433} }, -/**/ {{0xbfb034e0, 0x60182e4f} }, -/**/ {{0x3f9ded4f, 0x8cafa41b} }, -/**/ {{0x3f724a50, 0x1fa4f037} }, -/**/ {{0xbf920fa7, 0xfd90e915} }, -/**/ {{0x3f8a742d, 0xf59e7acf} } }, -/**/ {{{0x3fe88000, 0x00000000} }, -/**/ {{0x3fe4e8de, 0x5bb6ec04} }, -/**/ {{0x3c84a33d, 0xbeb3796c} }, -/**/ {{0x3fe42c9a, 0x9dd8fdc1} }, -/**/ {{0x3c5192da, 0xaf80050b} }, -/**/ {{0xbfd379bf, 0x25adf97f} }, -/**/ {{0xbc774019, 0x20cd3651} }, -/**/ {{0x3fb0383a, 0x724dbb01} }, -/**/ {{0x3c5c4e67, 0xeb93e538} }, -/**/ {{0x3fa9a04e, 0x646e65df} }, -/**/ {{0x3c21a7cb, 0x894a6b77} }, -/**/ {{0xbfb007e5, 0x62771c79} }, -/**/ {{0x3f9e0b5c, 0x37a45544} }, -/**/ {{0x3f700fc7, 0x54993092} }, -/**/ {{0xbf919909, 0x37534c25} }, -/**/ {{0x3f8a437e, 0xae51732a} } }, -/**/ {{{0x3fe8a000, 0x00000000} }, -/**/ {{0x3fe4fd01, 0x3b7dd17e} }, -/**/ {{0x3c7d513f, 0x3e7c24b5} }, -/**/ {{0x3fe41926, 0xfa274ef1} }, -/**/ {{0x3c8ad830, 0x4d72ecb3} }, -/**/ {{0xbfd36d81, 0xe995018a} }, -/**/ {{0x3c7e7ec5, 0x6fd6094d} }, -/**/ {{0x3fb06adb, 0x567bb975} }, -/**/ {{0x3c5212c1, 0xf0d7364f} }, -/**/ {{0x3fa900e1, 0x07a9b624} }, -/**/ {{0xbc4e5b5b, 0xc16bcc85} }, -/**/ {{0xbfafb580, 0x705f052b} }, -/**/ {{0x3f9e258f, 0x646ce12e} }, -/**/ {{0x3f6bc808, 0xa3c63841} }, -/**/ {{0xbf91234e, 0x67043d41} }, -/**/ {{0x3f8a0ee6, 0x4f11b221} } }, -/**/ {{{0x3fe8c000, 0x00000000} }, -/**/ {{0x3fe51110, 0xadc5ed81} }, -/**/ {{0x3c723dcd, 0x6832a63e} }, -/**/ {{0x3fe405bf, 0xa6864f90} }, -/**/ {{0xbc7419c5, 0x662cd5df} }, -/**/ {{0xbfd3611f, 0x2bf1f7e4} }, -/**/ {{0xbc6e94dd, 0x65483b78} }, -/**/ {{0x3fb09c3f, 0x23e21be9} }, -/**/ {{0x3c22db63, 0xcaca858d} }, -/**/ {{0x3fa86337, 0xd99c3f1d} }, -/**/ {{0x3c034382, 0xdc0a6dfc} }, -/**/ {{0xbfaf5aed, 0x284f8093} }, -/**/ {{0x3f9e3c02, 0xd396fb43} }, -/**/ {{0x3f678dd3, 0x08b96150} }, -/**/ {{0xbf90ae88, 0xaa2dcc3a} }, -/**/ {{0x3f89d69b, 0x79128ee7} } }, -/**/ {{{0x3fe8e000, 0x00000000} }, -/**/ {{0x3fe5250c, 0xbef1e9fb} }, -/**/ {{0xbc5539b7, 0xa3228870} }, -/**/ {{0x3fe3f264, 0xc8011245} }, -/**/ {{0xbc6641f1, 0x44cc720b} }, -/**/ {{0xbfd35497, 0xd942778a} }, -/**/ {{0x3c750a5a, 0x9bd7dbd6} }, -/**/ {{0x3fb0cc69, 0x6438739e} }, -/**/ {{0x3bf5d933, 0x435f798d} }, -/**/ {{0x3fa7c754, 0x2b29722f} }, -/**/ {{0xbbe736fe, 0x5b3af27b} }, -/**/ {{0xbfaf001c, 0x059a3c24} }, -/**/ {{0x3f9e4ed0, 0x101882b0} }, -/**/ {{0x3f6370ae, 0x88dc4269} }, -/**/ {{0xbf903ac8, 0x2b5280b6} }, -/**/ {{0x3f899ad3, 0x8da5b2ad} } }, -/**/ {{{0x3fe90000, 0x00000000} }, -/**/ {{0x3fe538f5, 0x7b89061f} }, -/**/ {{0xbc81bb74, 0xabda520c} }, -/**/ {{0x3fe3df16, 0x82b78014} }, -/**/ {{0xbc7074be, 0xa43ff610} }, -/**/ {{0xbfd347ec, 0xdb5be2e4} }, -/**/ {{0x3c7848c8, 0x8a0e9303} }, -/**/ {{0x3fb0fb5d, 0xa3a11be4} }, -/**/ {{0x3c3d68f2, 0x09dd0d69} }, -/**/ {{0x3fa72d37, 0x16778170} }, -/**/ {{0xbc4ea85d, 0x2200d1d4} }, -/**/ {{0xbfaea517, 0xd4cdbd49} }, -/**/ {{0x3f9e5e10, 0x6bc61b6f} }, -/**/ {{0x3f5ee0af, 0xd0517524} }, -/**/ {{0xbf8f9038, 0x4f2ec799} }, -/**/ {{0x3f895bc2, 0xa9aaa5bb} } }, -/**/ {{{0x3fe92000, 0x00000000} }, -/**/ {{0x3fe54cca, 0xf0362c8f} }, -/**/ {{0x3c88a324, 0x7f8f43c1} }, -/**/ {{0x3fe3cbd4, 0xf9e1016e} }, -/**/ {{0xbc88dea6, 0x431b67e7} }, -/**/ {{0xbfd33b1f, 0x1969bc63} }, -/**/ {{0x3c6ef16e, 0x5f3d8fd8} }, -/**/ {{0x3fb1291f, 0x703d3bf6} }, -/**/ {{0xbc566e82, 0xb04e0672} }, -/**/ {{0x3fa694e1, 0x806b26f2} }, -/**/ {{0x3c302819, 0xafcee740} }, -/**/ {{0xbfae49eb, 0x16dcee96} }, -/**/ {{0x3f9e69dc, 0xfbfdb35f} }, -/**/ {{0x3f571910, 0x70c48510} }, -/**/ {{0xbf8ead25, 0xe90198c8} }, -/**/ {{0x3f89199b, 0xa1c723cb} } }, -/**/ {{{0x3fe94000, 0x00000000} }, -/**/ {{0x3fe5608d, 0x29c70c34} }, -/**/ {{0x3c89939c, 0xf0de8088} }, -/**/ {{0x3fe3b8a0, 0x4fcf28c3} }, -/**/ {{0xbc469c2b, 0xcb80013c} }, -/**/ {{0xbfd32e2f, 0x77ec4ef9} }, -/**/ {{0x3c7f9d06, 0xc61f7341} }, -/**/ {{0x3fb155b2, 0x59c3bcdf} }, -/**/ {{0xbc2d692e, 0x3583c01b} }, -/**/ {{0x3fa5fe54, 0x1a1fe15d} }, -/**/ {{0x3c430dc5, 0x5d9bad81} }, -/**/ {{0xbfadeea0, 0x01d944a8} }, -/**/ {{0x3f9e724e, 0x9683b244} }, -/**/ {{0x3f4f13d4, 0x491379ef} }, -/**/ {{0xbf8dcc74, 0x0b7cf74b} }, -/**/ {{0x3f88d48f, 0xff5f0625} } }, -/**/ {{{0x3fe96000, 0x00000000} }, -/**/ {{0x3fe5743c, 0x352b33ba} }, -/**/ {{0xbc8ea00d, 0x34c87ea6} }, -/**/ {{0x3fe3a578, 0xa5f05e48} }, -/**/ {{0xbc8ba1ec, 0x00e4639b} }, -/**/ {{0xbfd3211e, 0xd8b7a43f} }, -/**/ {{0xbc6d4b54, 0x676e23a8} }, -/**/ {{0x3fb18119, 0xf11b2c2d} }, -/**/ {{0x3c34855b, 0x3a3bf5fa} }, -/**/ {{0x3fa5698f, 0x625c76bf} }, -/**/ {{0xbc2f758a, 0xbedb0264} }, -/**/ {{0xbfad9340, 0x81b60103} }, -/**/ {{0x3f9e777d, 0xce91900f} }, -/**/ {{0x3f406543, 0x34fddb2f} }, -/**/ {{0xbf8cee3b, 0xe6077f81} }, -/**/ {{0x3f888ccf, 0xfe42afde} } }, -/**/ {{{0x3fe98000, 0x00000000} }, -/**/ {{0x3fe587d8, 0x1f732fbb} }, -/**/ {{0xbc75e5c9, 0xd8c5a950} }, -/**/ {{0x3fe3925e, 0x1cd28c98} }, -/**/ {{0x3c8c8443, 0x1ffec6da} }, -/**/ {{0xbfd313ee, 0x1af2c622} }, -/**/ {{0x3c0a0e9b, 0xbc3f7ac8} }, -/**/ {{0x3fb1ab59, 0xc7f683c3} }, -/**/ {{0x3c5eaf17, 0x12c04500} }, -/**/ {{0x3fa4d693, 0xa7039179} }, -/**/ {{0xbc4c8d74, 0xa4ce58a2} }, -/**/ {{0xbfad37d6, 0x391400b3} }, -/**/ {{0x3f9e7982, 0xf2148a36} }, -/**/ {{0x3f112956, 0xb6df63ca} }, -/**/ {{0xbf8c1294, 0xfbd0f7ee} }, -/**/ {{0x3f88428a, 0x8b0b0a0e} } }, -/**/ {{{0x3fe9a000, 0x00000000} }, -/**/ {{0x3fe59b60, 0xf5cfab9e} }, -/**/ {{0xbc81b04c, 0x41026bc5} }, -/**/ {{0x3fe37f50, 0xd425cdfc} }, -/**/ {{0x3c865633, 0x518aef64} }, -/**/ {{0xbfd3069e, 0x1b1749db} }, -/**/ {{0xbc311c20, 0xa119d9bc} }, -/**/ {{0x3fb1d475, 0x7074cee3} }, -/**/ {{0xbc5102e0, 0x4ff61e2c} }, -/**/ {{0x3fa44561, 0x06804def} }, -/**/ {{0x3c4e829f, 0xc3865804} }, -/**/ {{0xbfacdc6a, 0x82158836} }, -/**/ {{0x3f9e7876, 0x071b2eec} }, -/**/ {{0xbf375b85, 0xf17c4beb} }, -/**/ {{0xbf8b3995, 0x2fa03971} }, -/**/ {{0x3f87f5ed, 0x421a433b} } }, -/**/ {{{0x3fe9c000, 0x00000000} }, -/**/ {{0x3fe5aed6, 0xc5909517} }, -/**/ {{0x3c87312f, 0x714a9436} }, -/**/ {{0x3fe36c50, 0xeabf19f5} }, -/**/ {{0x3c70d1dc, 0x52485cca} }, -/**/ {{0xbfd2f92f, 0xb2f12226} }, -/**/ {{0x3c5400ba, 0x3e5d3d61} }, -/**/ {{0x3fb1fc70, 0x7cc3a41b} }, -/**/ {{0x3c4b58e7, 0x8819ff5b} }, -/**/ {{0x3fa3b5f7, 0x712e9269} }, -/**/ {{0xbc4e436a, 0x7879d8ab} }, -/**/ {{0xbfac8106, 0x6f398221} }, -/**/ {{0x3f9e746e, 0xc97073c7} }, -/**/ {{0xbf4914de, 0xecfc2d6a} }, -/**/ {{0xbf8a6350, 0xcfa74bd5} }, -/**/ {{0x3f87a724, 0x6f38ad9e} } }, -/**/ {{{0x3fe9e000, 0x00000000} }, -/**/ {{0x3fe5c239, 0x9c244261} }, -/**/ {{0xbc831bd4, 0xe9e56b35} }, -/**/ {{0x3fe3595e, 0x7e9af2dc} }, -/**/ {{0x3c81ef2d, 0x9dc90e6a} }, -/**/ {{0xbfd2eba3, 0xb99eb689} }, -/**/ {{0xbc7b12ef, 0x6a2f2701} }, -/**/ {{0x3fb2234e, 0x7ec46b9b} }, -/**/ {{0x3c59f30c, 0x8d415d66} }, -/**/ {{0x3fa32856, 0xaabf0d26} }, -/**/ {{0xbc122571, 0x3f33d7ea} }, -/**/ {{0xbfac25b2, 0xcc3da9ce} }, -/**/ {{0x3f9e6d84, 0xa8630cad} }, -/**/ {{0xbf5308c5, 0xbeba707a} }, -/**/ {{0xbf898fda, 0xa1585fd1} }, -/**/ {{0x3f87565b, 0x0dc54356} } }, -/**/ {{{0x3fea0000, 0x00000000} }, -/**/ {{0x3fe5d589, 0x87169b18} }, -/**/ {{0x3c60028e, 0x4bc5e7ca} }, -/**/ {{0x3fe34679, 0xace01346} }, -/**/ {{0x3c8e6b38, 0x04d19e6b} }, -/**/ {{0xbfd2ddfb, 0x03913da2} }, -/**/ {{0xbc763ec8, 0x9a19adbd} }, -/**/ {{0x3fb24913, 0x07b46905} }, -/**/ {{0xbc4e7be8, 0xd6f0307f} }, -/**/ {{0x3fa29c7e, 0x4b96b773} }, -/**/ {{0xbc24c2cd, 0x9182d783} }, -/**/ {{0xbfabca78, 0x1f071f44} }, -/**/ {{0x3f9e63ce, 0xc4b7b7c4} }, -/**/ {{0xbf59529a, 0x125f35b0} }, -/**/ {{0xbf88bf43, 0xed369b2b} }, -/**/ {{0x3f8703ba, 0xc97185cd} } }, -/**/ {{{0x3fea2000, 0x00000000} }, -/**/ {{0x3fe5e8c6, 0x941043d0} }, -/**/ {{0xbc70bf75, 0xbe451e70} }, -/**/ {{0x3fe333a2, 0x91e21aec} }, -/**/ {{0x3c7ae035, 0x7acfc84f} }, -/**/ {{0xbfd2d036, 0x628d5861} }, -/**/ {{0x3c67c5fb, 0xe463d006} }, -/**/ {{0x3fb26dc1, 0xa7d77fb2} }, -/**/ {{0xbc5432bd, 0xc47ba861} }, -/**/ {{0x3fa2126d, 0xc229bece} }, -/**/ {{0xbc4be1bf, 0x1da8ed9e} }, -/**/ {{0xbfab6f5e, 0xa890e568} }, -/**/ {{0x3f9e5763, 0xeec5339a} }, -/**/ {{0xbf5f68a6, 0x5274aa52} }, -/**/ {{0xbf87f19c, 0x8a9df558} }, -/**/ {{0x3f86af6b, 0xff809dc5} } }, -/**/ {{{0x3fea4000, 0x00000000} }, -/**/ {{0x3fe5fbf0, 0xd0d5cc4a} }, -/**/ {{0xbc5b4cfd, 0x000b7158} }, -/**/ {{0x3fe320d9, 0x49243ad8} }, -/**/ {{0xbc8ce5e0, 0x433f7be5} }, -/**/ {{0xbfd2c256, 0xa5abec2f} }, -/**/ {{0xbc68785b, 0x04494dc1} }, -/**/ {{0x3fb2915d, 0xee25a81c} }, -/**/ {{0x3c3e7045, 0x68b37e8b} }, -/**/ {{0x3fa18a24, 0x5451b7d2} }, -/**/ {{0xbc3b2d29, 0x79d21dd5} }, -/**/ {{0xbfab146e, 0x65dfcf66} }, -/**/ {{0x3f9e485a, 0xa4b895b9} }, -/**/ {{0xbf62a5d4, 0x14770b65} }, -/**/ {{0xbf8726f2, 0xeb7dab0f} }, -/**/ {{0x3f865995, 0xc081d40d} } }, -/**/ {{{0x3fea6000, 0x00000000} }, -/**/ {{0x3fe60f08, 0x4b46e05f} }, -/**/ {{0xbc8dbb86, 0x99945193} }, -/**/ {{0x3fe30e1d, 0xed5be099} }, -/**/ {{0x3c6c6e78, 0x373fae45} }, -/**/ {{0xbfd2b45c, 0x995b3a02} }, -/**/ {{0x3c7cb97b, 0xe7cea2ad} }, -/**/ {{0x3fb2b3eb, 0x67fb0cde} }, -/**/ {{0xbc402927, 0x4920d50b} }, -/**/ {{0x3fa103a1, 0x209f00e4} }, -/**/ {{0xbc36fb57, 0xecac275a} }, -/**/ {{0xbfaab9af, 0x10fb6629} }, -/**/ {{0x3f9e36c9, 0x1100b94a} }, -/**/ {{0xbf657e30, 0x58620e6c} }, -/**/ {{0xbf865f54, 0x2801158e} }, -/**/ {{0x3f86025d, 0xd27eaf07} } }, -/**/ {{{0x3fea8000, 0x00000000} }, -/**/ {{0x3fe6220d, 0x115d7b8e} }, -/**/ {{0xbc62b785, 0x350ee8c1} }, -/**/ {{0x3fe2fb70, 0x98736048} }, -/**/ {{0x3c87a751, 0x4df7c4fa} }, -/**/ {{0xbfd2a649, 0x07603054} }, -/**/ {{0x3c7c41eb, 0xf564247c} }, -/**/ {{0x3fb2d56d, 0xa0cac592} }, -/**/ {{0x3c333138, 0x4e757ddf} }, -/**/ {{0x3fa07ee3, 0x1fa53ce5} }, -/**/ {{0xbc41bd0c, 0x28113a76} }, -/**/ {{0xbfaa5f28, 0x21eb5271} }, -/**/ {{0x3f9e22c5, 0x08df7f4f} }, -/**/ {{0xbf683dca, 0x107b528f} }, -/**/ {{0xbf859acc, 0x0a22f693} }, -/**/ {{0x3f85a9e8, 0xb39536ba} } }, -/**/ {{{0x3feaa000, 0x00000000} }, -/**/ {{0x3fe634ff, 0x312d1f3b} }, -/**/ {{0x3c89d2f3, 0x15f2b598} }, -/**/ {{0x3fe2e8d1, 0x638c9d15} }, -/**/ {{0x3c831ae5, 0xfe1a437d} }, -/**/ {{0xbfd2981c, 0xb6d7f622} }, -/**/ {{0xbc53da87, 0x86e9fe4d} }, -/**/ {{0x3fb2f5e8, 0x21d425b2} }, -/**/ {{0xbc186482, 0xae2616cb} }, -/**/ {{0x3f9ff7d2, 0x4a85a0e4} }, -/**/ {{0xbc294288, 0xe2d9205b} }, -/**/ {{0xbfaa04e0, 0xcfb8dc09} }, -/**/ {{0x3f9e0c64, 0x0b1f9c73} }, -/**/ {{0xbf6ae504, 0xbd3845d8} }, -/**/ {{0xbf84d965, 0x19278cae} }, -/**/ {{0x3f855059, 0x9cf7183b} } }, -/**/ {{{0x3feac000, 0x00000000} }, -/**/ {{0x3fe647de, 0xb8e20b90} }, -/**/ {{0xbc5eca04, 0x023a51cf} }, -/**/ {{0x3fe2d640, 0x6703b033} }, -/**/ {{0x3c870ae6, 0x38039b02} }, -/**/ {{0xbfd289d8, 0x6c39acf5} }, -/**/ {{0xbc71f038, 0x0238a7ee} }, -/**/ {{0x3fb3155e, 0x71da955f} }, -/**/ {{0xbc5faa02, 0xd41f84df} }, -/**/ {{0x3f9ef563, 0xc3c69caa} }, -/**/ {{0x3c331d29, 0x75403dbd} }, -/**/ {{0xbfa9aae0, 0x1174124f} }, -/**/ {{0x3f9df3bb, 0x3eedb30b} }, -/**/ {{0xbf6d7445, 0x1c632765} }, -/**/ {{0xbf841b28, 0xa4fa03e7} }, -/**/ {{0x3f84f5d2, 0x8646990d} } }, -/**/ {{{0x3feae000, 0x00000000} }, -/**/ {{0x3fe65aab, 0xb6c07b03} }, -/**/ {{0xbc67939b, 0x3af32729} }, -/**/ {{0x3fe2c3bd, 0xba718de8} }, -/**/ {{0xbc82d2fc, 0xc4990a2b} }, -/**/ {{0xbfd27b7c, 0xe9586818} }, -/**/ {{0x3c780d5e, 0x880839ca} }, -/**/ {{0x3fb333d4, 0x14dfe9e3} }, -/**/ {{0x3c536469, 0xbce74cae} }, -/**/ {{0x3f9df677, 0xc77983b8} }, -/**/ {{0x3c373272, 0xb42f53aa} }, -/**/ {{0xbfa9512c, 0x9f3c360e} }, -/**/ {{0x3f9dd8df, 0x72d37b24} }, -/**/ {{0xbf6febf1, 0x02e417f5} }, -/**/ {{0xbf83601e, 0xd16a1579} }, -/**/ {{0x3f849a74, 0x294a83e4} } }, -/**/ {{{0x3feb0000, 0x00000000} }, -/**/ {{0x3fe66d66, 0x3923e087} }, -/**/ {{0xbc76ea6f, 0xebe8bbba} }, -/**/ {{0x3fe2b149, 0x74aea886} }, -/**/ {{0x3c868ffd, 0xa9d6d16a} }, -/**/ {{0xbfd26d0a, 0xed65571e} }, -/**/ {{0x3c6cf972, 0x476fb5f2} }, -/**/ {{0x3fb3514c, 0x8be1339f} }, -/**/ {{0x3c5c8c0f, 0x3f722216} }, -/**/ {{0x3f9cfb0b, 0x300f8f9b} }, -/**/ {{0xbc0edd81, 0x38d1c932} }, -/**/ {{0xbfa8f7cc, 0xf34b004f} }, -/**/ {{0x3f9dbbe5, 0x1bd3bde0} }, -/**/ {{0xbf712637, 0x9bf7dceb} }, -/**/ {{0xbf82a84e, 0xa146e5b2} }, -/**/ {{0x3f843e5e, 0x05f2718e} } }, -/**/ {{{0x3feb2000, 0x00000000} }, -/**/ {{0x3fe6800e, 0x4e7e2858} }, -/**/ {{0xbc58ea6a, 0x1b3e90f0} }, -/**/ {{0x3fe29ee3, 0xabd5912c} }, -/**/ {{0xbc61b3cd, 0xb17c28e3} }, -/**/ {{0xbfd25e83, 0x34f221eb} }, -/**/ {{0xbc74c483, 0xfa300585} }, -/**/ {{0x3fb36dcb, 0x5495f6e3} }, -/**/ {{0x3c59b55b, 0x311973fe} }, -/**/ {{0x3f9c031a, 0x9864d139} }, -/**/ {{0x3c28fdf3, 0xbd00e171} }, -/**/ {{0xbfa89ec7, 0x4b026585} }, -/**/ {{0x3f9d9ce0, 0x54a5ed3d} }, -/**/ {{0xbf724b13, 0xa8cb6dfc} }, -/**/ {{0xbf81f3be, 0x015469a9} }, -/**/ {{0x3f83e1ae, 0x66a50a89} } }, -/**/ {{{0x3feb4000, 0x00000000} }, -/**/ {{0x3fe692a4, 0x0556fb6a} }, -/**/ {{0x3c8d94b9, 0x5a8ea2cc} }, -/**/ {{0x3fe28c8c, 0x75459603} }, -/**/ {{0x3c8b1c3b, 0x2945fc08} }, -/**/ {{0xbfd24fe6, 0x79f37468} }, -/**/ {{0xbc4e3751, 0x0ec1ef94} }, -/**/ {{0x3fb38953, 0xe931c53b} }, -/**/ {{0xbc3b108d, 0x16d80688} }, -/**/ {{0x3f9b0ea2, 0x5e1b50b5} }, -/**/ {{0x3c0074c0, 0x63fd1067} }, -/**/ {{0xbfa84621, 0xa7fc7800} }, -/**/ {{0x3f9d7be4, 0xdd10256e} }, -/**/ {{0xbf7364c0, 0xc9592c5e} }, -/**/ {{0xbf814271, 0xd318d707} }, -/**/ {{0x3f838482, 0x64d217b8} } }, -/**/ {{{0x3feb6000, 0x00000000} }, -/**/ {{0x3fe6a527, 0x6c4b0576} }, -/**/ {{0xbc8f6b65, 0x9c46a69e} }, -/**/ {{0x3fe27a43, 0xe5a55de9} }, -/**/ {{0x3c66846e, 0xedc25d49} }, -/**/ {{0xbfd24135, 0x73c3b821} }, -/**/ {{0xbc79202a, 0x56ab5808} }, -/**/ {{0x3fb3a3e9, 0xc0282c84} }, -/**/ {{0x3c4057ca, 0x03d25dab} }, -/**/ {{0x3f9a1d9e, 0xa3eb854d} }, -/**/ {{0xbc3775ed, 0xf03e2fb1} }, -/**/ {{0xbfa7ede1, 0xd11d1043} }, -/**/ {{0x3f9d5906, 0x195e6961} }, -/**/ {{0xbf747373, 0x65130256} }, -/**/ {{0xbf80946d, 0xf77fd664} }, -/**/ {{0x3f8326f5, 0xedc272c2} } }, -/**/ {{{0x3feb8000, 0x00000000} }, -/**/ {{0x3fe6b798, 0x920b3d99} }, -/**/ {{0xbc8a8038, 0x6188c50e} }, -/**/ {{0x3fe2680a, 0x10e5813e} }, -/**/ {{0xbc8f5497, 0x2242a6bc} }, -/**/ {{0xbfd23270, 0xd725fa1c} }, -/**/ {{0x3c757282, 0x5c781b14} }, -/**/ {{0x3fb3bd90, 0x4bf2f124} }, -/**/ {{0x3c31ae9c, 0x6a14ed74} }, -/**/ {{0x3f99300b, 0x53ea1533} }, -/**/ {{0x3c2a8d88, 0x68f98d7e} }, -/**/ {{0xbfa7960d, 0x53a4e537} }, -/**/ {{0x3f9d3457, 0x11f5f086} }, -/**/ {{0xbf757760, 0x19baa1da} }, -/**/ {{0xbf7fd36a, 0xb2a2ca7e} }, -/**/ {{0x3f82c923, 0xc7a02081} } }, -/**/ {{{0x3feba000, 0x00000000} }, -/**/ {{0x3fe6c9f7, 0x855c3198} }, -/**/ {{0x3c7c09de, 0x29bd280d} }, -/**/ {{0x3fe255df, 0x0a431fbd} }, -/**/ {{0x3c8d9866, 0xf09a745d} }, -/**/ {{0xbfd22399, 0x5648fb1f} }, -/**/ {{0x3c412100, 0xb4df0b3e} }, -/**/ {{0x3fb3d64a, 0xfada8899} }, -/**/ {{0x3c3dd891, 0x659c4346} }, -/**/ {{0x3f9845e4, 0x21c2d0a1} }, -/**/ {{0x3c28c6b1, 0xf397827c} }, -/**/ {{0xbfa73ea9, 0x8445c1cc} }, -/**/ {{0x3f9d0dea, 0x730360f8} }, -/**/ {{0xbf7670bb, 0xac51ce30} }, -/**/ {{0xbf7e8493, 0xeef50deb} }, -/**/ {{0x3f826b25, 0x96b119a9} } }, -/**/ {{{0x3febc000, 0x00000000} }, -/**/ {{0x3fe6dc44, 0x551553af} }, -/**/ {{0xbc5bf886, 0x3573828e} }, -/**/ {{0x3fe243c2, 0xe44a7335} }, -/**/ {{0xbc667287, 0x65d1ffd7} }, -/**/ {{0xbfd214af, 0xa0ca68d3} }, -/**/ {{0xbc71296c, 0x88820895} }, -/**/ {{0x3fb3ee1d, 0x36c0c9a2} }, -/**/ {{0x3c540bf6, 0x831dfabe} }, -/**/ {{0x3f975f24, 0x8ce8de84} }, -/**/ {{0xbc125368, 0x43eb5853} }, -/**/ {{0xbfa6e7bb, 0x803788f8} }, -/**/ {{0x3f9ce5d2, 0x8c42d5f9} }, -/**/ {{0xbf775fba, 0xfaadb3ab} }, -/**/ {{0xbf7d3c59, 0xde4c28da} }, -/**/ {{0x3f820d13, 0xe2bf7ef5} } }, -/**/ {{{0x3febe000, 0x00000000} }, -/**/ {{0x3fe6ee7f, 0x10204aef} }, -/**/ {{0x3c8692ee, 0xa3066272} }, -/**/ {{0x3fe231b5, 0xb0d95ee5} }, -/**/ {{0x3c7aae7e, 0x1eb505b6} }, -/**/ {{0xbfd205b4, 0x63ba3e08} }, -/**/ {{0x3c71c6d1, 0xb975517d} }, -/**/ {{0x3fb4050a, 0x64edc729} }, -/**/ {{0x3c4960ed, 0x715db809} }, -/**/ {{0x3f967bc7, 0xe2bc143b} }, -/**/ {{0xbc2cbf17, 0xf0823143} }, -/**/ {{0xbfa69148, 0x2e4dbc47} }, -/**/ {{0x3f9cbc21, 0x50e0982e} }, -/**/ {{0xbf784492, 0xedaa432a} }, -/**/ {{0xbf7bfabd, 0x0b4850f3} }, -/**/ {{0x3f81af06, 0x1caa2f2c} } }, -/**/ {{{0x3fec0000, 0x00000000} }, -/**/ {{0x3fe700a7, 0xc5784634} }, -/**/ {{0xbc78c34d, 0x25aadef6} }, -/**/ {{0x3fe21fb7, 0x8121fb78} }, -/**/ {{0x3c621fb7, 0x8121fb78} }, -/**/ {{0xbfd1f6a8, 0x499e4889} }, -/**/ {{0xbc60e934, 0x6d4e0249} }, -/**/ {{0x3fb41b15, 0xe5decb17} }, -/**/ {{0x3c5194f4, 0xab3541e6} }, -/**/ {{0x3f959bc9, 0x40a374b5} }, -/**/ {{0xbc39dc6e, 0x54be0e10} }, -/**/ {{0xbfa63b54, 0x400d3c9a} }, -/**/ {{0x3f9c90e8, 0x57717232} }, -/**/ {{0xbf791f78, 0x6bfa704e} }, -/**/ {{0xbf7abfbc, 0x643da6dd} }, -/**/ {{0x3f815112, 0xa418ed31} } }, -/**/ {{{0x3fec2000, 0x00000000} }, -/**/ {{0x3fe712be, 0x84295198} }, -/**/ {{0x3c85cd90, 0x337d8881} }, -/**/ {{0x3fe20dc8, 0x65ad1f5b} }, -/**/ {{0xbc88102a, 0xd7b50d48} }, -/**/ {{0xbfd1e78b, 0xfa75d2f4} }, -/**/ {{0x3c723734, 0x619624d2} }, -/**/ {{0x3fb43043, 0x1517663e} }, -/**/ {{0xbc4af8a4, 0xe5e1ddf1} }, -/**/ {{0x3f94bf23, 0x961cd605} }, -/**/ {{0xbc26e86e, 0x5ca14507} }, -/**/ {{0xbfa5e5e4, 0x32c1ffd7} }, -/**/ {{0x3f9c6438, 0xda0191cd} }, -/**/ {{0xbf79f0a0, 0x4d921d2b} }, -/**/ {{0xbf798b55, 0x4e35d54e} }, -/**/ {{0x3f80f34e, 0xcd4f7bfd} } }, -/**/ {{{0x3fec4000, 0x00000000} }, -/**/ {{0x3fe724c3, 0x5b4fae7b} }, -/**/ {{0x3c5948b3, 0x2db3499b} }, -/**/ {{0x3fe1fbe8, 0x6e5ce35d} }, -/**/ {{0x3c8101d1, 0x561e27a3} }, -/**/ {{0xbfd1d860, 0x1bbd70f4} }, -/**/ {{0xbc7b4c97, 0xfa32c4d1} }, -/**/ {{0x3fb44495, 0x48f48a77} }, -/**/ {{0xbc2ccfed, 0xb47fdf89} }, -/**/ {{0x3f93e5d1, 0xa6c1af2c} }, -/**/ {{0xbc14af58, 0xc3b5a19b} }, -/**/ {{0xbfa590fc, 0x5094795f} }, -/**/ {{0x3f9c3623, 0xb638ebc2} }, -/**/ {{0xbf7ab83f, 0x4fa66d0e} }, -/**/ {{0xbf785d83, 0xb787e297} }, -/**/ {{0x3f8095ce, 0xe71b4cea} } }, -/**/ {{{0x3fec6000, 0x00000000} }, -/**/ {{0x3fe736b6, 0x5a172dff} }, -/**/ {{0x3c7775fd, 0x06a892d1} }, -/**/ {{0x3fe1ea17, 0xaa6f2377} }, -/**/ {{0xbc8395a8, 0xcb44ec07} }, -/**/ {{0xbfd1c925, 0x5072ec76} }, -/**/ {{0xbc6e11b3, 0xf650d5de} }, -/**/ {{0x3fb4580f, 0xd281a42b} }, -/**/ {{0xbc55bbce, 0xf63226cb} }, -/**/ {{0x3f930fce, 0x0c411254} }, -/**/ {{0x3c3a4412, 0xc9852726} }, -/**/ {{0xbfa53ca0, 0xb19e766e} }, -/**/ {{0x3f9c06b9, 0x6d941dd5} }, -/**/ {{0xbf7b768a, 0x094128b2} }, -/**/ {{0xbf773642, 0x2a047c42} }, -/**/ {{0x3f8038a6, 0x40d7925f} } }, -/**/ {{{0x3fec8000, 0x00000000} }, -/**/ {{0x3fe74897, 0x8fba8e0f} }, -/**/ {{0x3c47b2a6, 0x165884a1} }, -/**/ {{0x3fe1d856, 0x287ffb8a} }, -/**/ {{0xbc658a1f, 0xfee27a9d} }, -/**/ {{0xbfd1b9dc, 0x39195240} }, -/**/ {{0x3c604646, 0x551dc6bf} }, -/**/ {{0x3fb46ab5, 0xfd4fa866} }, -/**/ {{0x3c5f62a7, 0xc2febe43} }, -/**/ {{0x3f923d13, 0x384eda2c} }, -/**/ {{0x3c3b9a7c, 0x1dfd9f34} }, -/**/ {{0xbfa4e8d5, 0x3cff324c} }, -/**/ {{0x3f9bd60a, 0x25b0d0ad} }, -/**/ {{0xbf7c2bb4, 0xe063d1e6} }, -/**/ {{0xbf761589, 0xdcb54dd5} }, -/**/ {{0x3f7fb7ce, 0x61077b85} } }, -/**/ {{{0x3feca000, 0x00000000} }, -/**/ {{0x3fe75a67, 0x0b82d8d8} }, -/**/ {{0x3c8ee4ac, 0x4c729087} }, -/**/ {{0x3fe1c6a3, 0xf68c4011} }, -/**/ {{0xbc8e54e4, 0x32671c29} }, -/**/ {{0xbfd1aa85, 0x73bd1c8f} }, -/**/ {{0x3c7525ad, 0x41d7bd80} }, -/**/ {{0x3fb47c8b, 0x0f4e0cc0} }, -/**/ {{0x3c2efdd1, 0xd854875c} }, -/**/ {{0x3f916d9b, 0x7688134d} }, -/**/ {{0xbc1abef6, 0x42a6f922} }, -/**/ {{0xbfa4959d, 0xa9ee694e} }, -/**/ {{0x3f9ba425, 0xa8aca118} }, -/**/ {{0xbf7cd7f3, 0xffb6fa1f} }, -/**/ {{0xbf74fb52, 0xc52e395a} }, -/**/ {{0x3f7eff46, 0x31d14661} } }, -/**/ {{{0x3fecc000, 0x00000000} }, -/**/ {{0x3fe76c24, 0xdcc6c6c0} }, -/**/ {{0x3c819525, 0x51adc83d} }, -/**/ {{0x3fe1b501, 0x21f3f28c} }, -/**/ {{0xbc45712f, 0x5f1d67b6} }, -/**/ {{0xbfd19b21, 0x9bf87a43} }, -/**/ {{0xbc64520a, 0xb2071e48} }, -/**/ {{0x3fb48d92, 0x48a59e43} }, -/**/ {{0x3c5f8e56, 0x42014b8b} }, -/**/ {{0x3f90a160, 0xee4caccb} }, -/**/ {{0x3c2bd92b, 0x7b6daa67} }, -/**/ {{0xbfa442fd, 0x80ce3489} }, -/**/ {{0x3f9b711b, 0x65959e45} }, -/**/ {{0xbf7d7b7b, 0x4cc2673a} }, -/**/ {{0xbf73e793, 0xa86f8a8e} }, -/**/ {{0x3f7e47d4, 0xdf91602d} } }, -/**/ {{{0x3fece000, 0x00000000} }, -/**/ {{0x3fe77dd1, 0x12ea22c7} }, -/**/ {{0x3c873260, 0x8fc10d3d} }, -/**/ {{0x3fe1a36d, 0xb77cb1a2} }, -/**/ {{0xbc42c20d, 0x6e625be9} }, -/**/ {{0xbfd18bb1, 0x4af7b13c} }, -/**/ {{0xbc68446b, 0xbc063e5a} }, -/**/ {{0x3fb49dce, 0xe3952cbb} }, -/**/ {{0x3c588e60, 0x58cf9123} }, -/**/ {{0x3f8fb0bb, 0x491cfa44} }, -/**/ {{0x3c1534fc, 0x0e3f2a43} }, -/**/ {{0xbfa3f0f8, 0x1c3b7aca} }, -/**/ {{0x3f9b3cfa, 0x70eb708a} }, -/**/ {{0xbf7e167e, 0x5eaa8b7f} }, -/**/ {{0xbf72da42, 0x2b587c04} }, -/**/ {{0x3f7d9199, 0x882fa65b} } }, -/**/ {{{0x3fed0000, 0x00000000} }, -/**/ {{0x3fe78f6b, 0xbd5d315e} }, -/**/ {{0x3c8406a0, 0x89803740} }, -/**/ {{0x3fe191e9, 0xc35424ca} }, -/**/ {{0xbc8fa3c1, 0xf4be863f} }, -/**/ {{0xbfd17c35, 0x177d9a85} }, -/**/ {{0xbc717b81, 0x6a99d546} }, -/**/ {{0x3fb4ad44, 0x144fffae} }, -/**/ {{0x3c3538b3, 0xdccca2a3} }, -/**/ {{0x3f8e2516, 0xfb2b5523} }, -/**/ {{0x3c0f7c11, 0x60181bd9} }, -/**/ {{0xbfa39f90, 0xaa1cc641} }, -/**/ {{0x3f9b07d1, 0x85304289} }, -/**/ {{0xbf7ea930, 0x756fd193} }, -/**/ {{0xbf71d352, 0xe2a9a0de} }, -/**/ {{0x3f7cdcb1, 0x886fc912} } }, -/**/ {{{0x3fed2000, 0x00000000} }, -/**/ {{0x3fe7a0f4, 0xeb9c19a2} }, -/**/ {{0x3c613c67, 0xcd815f57} }, -/**/ {{0x3fe18075, 0x5112636f} }, -/**/ {{0x3c80a172, 0x7a335b20} }, -/**/ {{0xbfd16cad, 0x95e83705} }, -/**/ {{0x3c62a94b, 0x7b21d5e1} }, -/**/ {{0x3fb4bbf5, 0x08de0a7c} }, -/**/ {{0x3c3570d0, 0x057457a0} }, -/**/ {{0x3f8c9fc8, 0x7d750fdf} }, -/**/ {{0x3c2900a7, 0xfe4cff3c} }, -/**/ {{0xbfa34eca, 0x2caf50ea} }, -/**/ {{0x3f9ad1af, 0x03888c77} }, -/**/ {{0xbf7f33c4, 0x71ac3a86} }, -/**/ {{0xbf70d2b9, 0x6296fd58} }, -/**/ {{0x3f7c2938, 0x886d16b8} } }, -/**/ {{{0x3fed4000, 0x00000000} }, -/**/ {{0x3fe7b26c, 0xad2e50fe} }, -/**/ {{0xbc8ce80d, 0xf30411fb} }, -/**/ {{0x3fe16f10, 0x6bbc577a} }, -/**/ {{0xbc7d0db6, 0xbd8abf47} }, -/**/ {{0xbfd15d1b, 0x58355b5f} }, -/**/ {{0xbc5b5457, 0xbcc70038} }, -/**/ {{0x3fb4c9e4, 0xe8fdd51d} }, -/**/ {{0x3c462959, 0x28ac9383} }, -/**/ {{0x3f8b20c3, 0x2029f143} }, -/**/ {{0xbc2f8a44, 0x2b420400} }, -/**/ {{0xbfa2fea7, 0x7b921c49} }, -/**/ {{0x3f9a9aa0, 0xf468e79e} }, -/**/ {{0xbf7fb66c, 0xcccbcb4f} }, -/**/ {{0xbf6fb0d0, 0x9bd39a5f} }, -/**/ {{0x3f7b7748, 0x8813998f} } }, -/**/ {{{0x3fed6000, 0x00000000} }, -/**/ {{0x3fe7c3d3, 0x11a6092b} }, -/**/ {{0x3c8bb3cb, 0x2d303288} }, -/**/ {{0x3fe15dbb, 0x1dc61b17} }, -/**/ {{0xbc8f0487, 0xbb77dc56} }, -/**/ {{0xbfd14d7e, 0xee0771ca} }, -/**/ {{0x3c72d38b, 0xdc2fcbd0} }, -/**/ {{0x3fb4d716, 0xd6080f0e} }, -/**/ {{0xbc5cb5bc, 0xa9fbc2c3} }, -/**/ {{0x3f89a7f9, 0xfc42e02f} }, -/**/ {{0xbc201eec, 0x857be8a4} }, -/**/ {{0xbfa2af2b, 0x44ceebb3} }, -/**/ {{0x3f9a62b5, 0x08511639} }, -/**/ {{0xbf8018ad, 0xc8de23de} }, -/**/ {{0xbf6dc8a2, 0xc964501a} }, -/**/ {{0x3f7ac6f9, 0xeb913697} } }, -/**/ {{{0x3fed8000, 0x00000000} }, -/**/ {{0x3fe7d528, 0x289fa093} }, -/**/ {{0x3c856082, 0x1e2f3aa9} }, -/**/ {{0x3fe14c75, 0x711551bb} }, -/**/ {{0xbc80c88e, 0x71970f2c} }, -/**/ {{0xbfd13dd8, 0xe4aa5095} }, -/**/ {{0x3c66dd31, 0xb4b7ae12} }, -/**/ {{0x3fb4e38d, 0xead4c211} }, -/**/ {{0x3c513fb0, 0xe392a31e} }, -/**/ {{0x3f88355f, 0xf6b74576} }, -/**/ {{0x3ba8cb44, 0xf3561ab7} }, -/**/ {{0xbfa26058, 0x0de0faaa} }, -/**/ {{0x3f9a29f8, 0x989371f0} }, -/**/ {{0xbf805261, 0x2b085d9a} }, -/**/ {{0xbf6beccb, 0x2511c555} }, -/**/ {{0x3f7a1863, 0x87b9d333} } }, -/**/ {{{0x3feda000, 0x00000000} }, -/**/ {{0x3fe7e66c, 0x01c114fe} }, -/**/ {{0xbc8c82b8, 0x8b760b8d} }, -/**/ {{0x3fe13b3f, 0x6f037c44} }, -/**/ {{0xbc635393, 0x8562c8c0} }, -/**/ {{0xbfd12e29, 0xc7182435} }, -/**/ {{0xbc73da80, 0x0d0fda95} }, -/**/ {{0x3fb4ef4d, 0x3ba21a8b} }, -/**/ {{0xbc17c450, 0x9aa41146} }, -/**/ {{0x3f86c8e7, 0xc39dff46} }, -/**/ {{0x3c1ddd70, 0x800ba9ae} }, -/**/ {{0xbfa21230, 0x34b94b56} }, -/**/ {{0x3f99f078, 0xa827f95a} }, -/**/ {{0xbf808869, 0x19caa997} }, -/**/ {{0xbf6a1d29, 0xf8c46d26} }, -/**/ {{0x3f796b9a, 0xae59da17} } }, -/**/ {{{0x3fedc000, 0x00000000} }, -/**/ {{0x3fe7f79e, 0xacb97898} }, -/**/ {{0x3c8fd5ca, 0x80ead221} }, -/**/ {{0x3fe12a19, 0x20604825} }, -/**/ {{0xbc5cc7d6, 0xa18970f8} }, -/**/ {{0xbfd11e72, 0x1dfe6ba4} }, -/**/ {{0x3c706717, 0x9d653d1c} }, -/**/ {{0x3fb4fa57, 0xd5fcbb3b} }, -/**/ {{0x3c1922c8, 0x5f50bc06} }, -/**/ {{0x3f856283, 0xe93a179f} }, -/**/ {{0xbc01c2ec, 0x5ea7135a} }, -/**/ {{0xbfa1c4b5, 0xf0c06b4f} }, -/**/ {{0x3f99b641, 0xe48a3b04} }, -/**/ {{0xbf80badd, 0xe1280a21} }, -/**/ {{0xbf68599e, 0x1be3c5dd} }, -/**/ {{0x3f78c0b3, 0x3a72c8e6} } }, -/**/ {{{0x3fede000, 0x00000000} }, -/**/ {{0x3fe808c0, 0x3940694b} }, -/**/ {{0xbc800f32, 0x7715f6a5} }, -/**/ {{0x3fe11902, 0x8d73d98e} }, -/**/ {{0x3c71d158, 0x30f8e290} }, -/**/ {{0xbfd10eb2, 0x6fc305eb} }, -/**/ {{0xbc7fd2e3, 0x3858c4b7} }, -/**/ {{0x3fb504b0, 0xc0a99255} }, -/**/ {{0x3c55c054, 0x142e134f} }, -/**/ {{0x3f840226, 0xc2f371cf} }, -/**/ {{0xbbfc85b0, 0xfc7d6225} }, -/**/ {{0xbfa177eb, 0x53d58f53} }, -/**/ {{0x3f997b60, 0xa6a1627d} }, -/**/ {{0xbf80e9d7, 0x89757c78} }, -/**/ {{0xbf66a205, 0x0d433cd6} }, -/**/ {{0x3f7817bf, 0x9c5dbd9f} } }, -/**/ {{{0x3fee0000, 0x00000000} }, -/**/ {{0x3fe819d0, 0xb7158a4d} }, -/**/ {{0xbc7bf762, 0x29d3b917} }, -/**/ {{0x3fe107fb, 0xbe011080} }, -/**/ {{0xbc8107fb, 0xbe011080} }, -/**/ {{0xbfd0feeb, 0x40894fcd} }, -/**/ {{0x3c76fbb9, 0xc155af9a} }, -/**/ {{0x3fb50e5a, 0xfb9125f7} }, -/**/ {{0x3c357762, 0x2f3313b0} }, -/**/ {{0x3f82a7c2, 0x843ba55a} }, -/**/ {{0x3c1f4994, 0x3fc197b7} }, -/**/ {{0xbfa12bd2, 0x4b4ae875} }, -/**/ {{0x3f993fe0, 0xf3b1b1ee} }, -/**/ {{0xbf81156d, 0xd4c2083b} }, -/**/ {{0xbf64f63b, 0x0c35aa9c} }, -/**/ {{0x3f7770d0, 0xe5d0462f} } }, -/**/ {{{0x3fee2000, 0x00000000} }, -/**/ {{0x3fe82ad0, 0x36000005} }, -/**/ {{0x3c74592f, 0xce924d24} }, -/**/ {{0x3fe0f704, 0xb947c8b7} }, -/**/ {{0x3c436cd7, 0x48a651b3} }, -/**/ {{0xbfd0ef1d, 0x1237505b} }, -/**/ {{0x3c69239b, 0x1b86b9d1} }, -/**/ {{0x3fb51759, 0x7fac4e21} }, -/**/ {{0xbc42a8cc, 0xbfce0e36} }, -/**/ {{0x3f815349, 0x3b5f3edd} }, -/**/ {{0xbc25e1f1, 0x88c702d9} }, -/**/ {{0xbfa0e06c, 0xa0df17a9} }, -/**/ {{0x3f9903ce, 0x7e56b8b1} }, -/**/ {{0xbf813db8, 0x3c701e30} }, -/**/ {{0xbf63561b, 0x30c99e47} }, -/**/ {{0x3f76cbf6, 0xd5bffce0} } }, -/**/ {{{0x3fee4000, 0x00000000} }, -/**/ {{0x3fe83bbe, 0xc5cdee22} }, -/**/ {{0x3c631071, 0x04ffc6c3} }, -/**/ {{0x3fe0e61d, 0x86071468} }, -/**/ {{0xbc70ccc4, 0x59be09c9} }, -/**/ {{0xbfd0df48, 0x647af38b} }, -/**/ {{0x3c7dd47c, 0x427c295b} }, -/**/ {{0x3fb51faf, 0x3ef25277} }, -/**/ {{0x3bdf056a, 0xa81026a7} }, -/**/ {{0x3f8004ac, 0xd443a18b} }, -/**/ {{0x3c027610, 0x8178f329} }, -/**/ {{0xbfa095bb, 0xfbb3a658} }, -/**/ {{0x3f98c734, 0xa7859d46} }, -/**/ {{0xbf8162cd, 0xeefe9a81} }, -/**/ {{0xbf61c17f, 0x8330eac0} }, -/**/ {{0x3f76293f, 0xe421c20a} } }, -/**/ {{{0x3fee6000, 0x00000000} }, -/**/ {{0x3fe84c9c, 0x7653f7eb} }, -/**/ {{0xbc383611, 0xfe0a3e8f} }, -/**/ {{0x3fe0d546, 0x2a7f71b5} }, -/**/ {{0x3c757061, 0x596848c6} }, -/**/ {{0xbfd0cf6d, 0xb4cf51a6} }, -/**/ {{0x3c4c99ab, 0x5b18bb8c} }, -/**/ {{0x3fb5275f, 0x24486227} }, -/**/ {{0x3c5b4a59, 0xbb1f4f56} }, -/**/ {{0x3f7d77be, 0x36238bb2} }, -/**/ {{0x3c1ddbd1, 0xcaec6ba2} }, -/**/ {{0xbfa04bc1, 0xe1406cd0} }, -/**/ {{0x3f988a1e, 0x7f96d6ca} }, -/**/ {{0xbf8184c5, 0xcdffc380} }, -/**/ {{0xbf603841, 0x12561f8b} }, -/**/ {{0x3f7588b9, 0x4d81a668} } }, -/**/ {{{0x3fee8000, 0x00000000} }, -/**/ {{0x3fe85d69, 0x576cc2c5} }, -/**/ {{0x3c66b66e, 0x7fc8b8c3} }, -/**/ {{0x3fe0c47e, 0xac74fadc} }, -/**/ {{0xbc8035f8, 0x77bb1887} }, -/**/ {{0xbfd0bf8d, 0x7e8202a9} }, -/**/ {{0x3c798048, 0x1f4d2357} }, -/**/ {{0x3fb52e6c, 0x13725c73} }, -/**/ {{0xbc34c3af, 0xf5b19ded} }, -/**/ {{0x3f7af1a3, 0x7d9c2711} }, -/**/ {{0x3bea7ec7, 0x1af1098d} }, -/**/ {{0xbfa0027f, 0xb643d11f} }, -/**/ {{0x3f984c96, 0xc756b7d7} }, -/**/ {{0xbf81a3b6, 0x6c3ca3ae} }, -/**/ {{0xbf5d7470, 0x13459246} }, -/**/ {{0x3f74ea6f, 0x1e70d9a4} } }, -/**/ {{{0x3feea000, 0x00000000} }, -/**/ {{0x3fe86e25, 0x78f87ae5} }, -/**/ {{0x3c8022b1, 0x375cfe34} }, -/**/ {{0x3fe0b3c7, 0x11319104} }, -/**/ {{0x3c8ac394, 0x25152519} }, -/**/ {{0xbfd0afa8, 0x3ab87c8a} }, -/**/ {{0x3c724f26, 0x27b31384} }, -/**/ {{0x3fb534d8, 0xe904e078} }, -/**/ {{0xbc55bfde, 0xf8948323} }, -/**/ {{0x3f7876ec, 0xa7bb2dfb} }, -/**/ {{0xbc197116, 0x8a87be50} }, -/**/ {{0xbf9f73ed, 0x7f5f95b4} }, -/**/ {{0x3f980ea7, 0xf11c3266} }, -/**/ {{0xbf81bfb6, 0x0c032389} }, -/**/ {{0xbf5a8e77, 0x8bf305a1} }, -/**/ {{0x3f744e6c, 0x3ec72e6d} } }, -/**/ {{{0x3feec000, 0x00000000} }, -/**/ {{0x3fe87ed0, 0xeadc5a2a} }, -/**/ {{0x3c70af5a, 0xd957f4bc} }, -/**/ {{0x3fe0a31f, 0x5d8701b3} }, -/**/ {{0xbc869b25, 0x263ce937} }, -/**/ {{0xbfd09fbe, 0x60757b83} }, -/**/ {{0x3c767aff, 0xa96db9ef} }, -/**/ {{0x3fb53aa8, 0x7a589afb} }, -/**/ {{0xbc4b7e8e, 0x0844ff86} }, -/**/ {{0x3f76077c, 0xacf1a65c} }, -/**/ {{0xbc19a3b2, 0xb13331a9} }, -/**/ {{0xbf9ee450, 0x472733eb} }, -/**/ {{0x3f97d05c, 0x21e541d7} }, -/**/ {{0xbf81d8da, 0x9d9d4dfc} }, -/**/ {{0xbf57be45, 0xd3ce1b4a} }, -/**/ {{0x3f73b4ba, 0x7cb60047} } }, -/**/ {{{0x3feee000, 0x00000000} }, -/**/ {{0x3fe88f6b, 0xbd023119} }, -/**/ {{0xbc532d1d, 0x25aba660} }, -/**/ {{0x3fe09287, 0x95d126c6} }, -/**/ {{0x3c85aad3, 0xeccc37a6} }, -/**/ {{0xbfd08fd0, 0x649e7367} }, -/**/ {{0x3c71e96c, 0xed21a127} }, -/**/ {{0x3fb53fdd, 0x957ec910} }, -/**/ {{0xbc339c23, 0xaf97a601} }, -/**/ {{0x3f73a336, 0x5a18e5a2} }, -/**/ {{0xbc1f7225, 0x477571de} }, -/**/ {{0xbf9e5629, 0xd4044135} }, -/**/ {{0x3f9791bd, 0x32786dc4} }, -/**/ {{0xbf81ef39, 0xbdf030c4} }, -/**/ {{0xbf550386, 0xe21b8bcb} }, -/**/ {{0x3f731d62, 0x97aa7fb2} } }, -/**/ {{{0x3fef0000, 0x00000000} }, -/**/ {{0x3fe89ff5, 0xff57f1f8} }, -/**/ {{0xbc855b9a, 0x5e177a1b} }, -/**/ {{0x3fe081ff, 0xbdf80108} }, -/**/ {{0x3c6ffbdf, 0x80108200} }, -/**/ {{0xbfd07fde, 0xba010928} }, -/**/ {{0x3c38d37f, 0x7bae0295} }, -/**/ {{0x3fb5447b, 0x0136e69f} }, -/**/ {{0x3c50316a, 0x0dda278d} }, -/**/ {{0x3f7149fc, 0x55103947} }, -/**/ {{0x3c176e96, 0x849e505f} }, -/**/ {{0xbf9dc97b, 0xfbe9a2ee} }, -/**/ {{0x3f9752d4, 0xb08adda9} }, -/**/ {{0xbf8202e8, 0xb540d106} }, -/**/ {{0xbf525de5, 0x859de3e9} }, -/**/ {{0x3f72886c, 0x4afd9f21} } }, -/**/ {{{0x3fef2000, 0x00000000} }, -/**/ {{0x3fe8b06f, 0xc1cf3dff} }, -/**/ {{0xbc80fb31, 0x2656db6d} }, -/**/ {{0x3fe07187, 0xd971cd38} }, -/**/ {{0x3c89baa4, 0x202c20ac} }, -/**/ {{0xbfd06fe9, 0xd15893ab} }, -/**/ {{0xbc7a864b, 0xdc0cb586} }, -/**/ {{0x3fb54883, 0x7ce57fed} }, -/**/ {{0xbc49498e, 0x294f4b18} }, -/**/ {{0x3f6df762, 0x426ebecc} }, -/**/ {{0xbc022f08, 0xf28644c0} }, -/**/ {{0xbf9d3e48, 0x5c564b44} }, -/**/ {{0x3f9713ab, 0xdfea7acf} }, -/**/ {{0xbf8213fc, 0x761db35c} }, -/**/ {{0xbf4f9a17, 0x10d60f49} }, -/**/ {{0x3f71f5de, 0x58700e9b} } }, -/**/ {{{0x3fef4000, 0x00000000} }, -/**/ {{0x3fe8c0d9, 0x145cf49d} }, -/**/ {{0x3c8bea40, 0x76dc4333} }, -/**/ {{0x3fe0611f, 0xeb45139a} }, -/**/ {{0x3c7e4998, 0x65aadb1f} }, -/**/ {{0xbfd05ff2, 0x1953a316} }, -/**/ {{0x3c759922, 0xa1b67b0f} }, -/**/ {{0x3fb54bf9, 0xc08c1d66} }, -/**/ {{0x3c5b9353, 0xd220330c} }, -/**/ {{0x3f69706e, 0x478cb604} }, -/**/ {{0xbbfdb6d3, 0xa22fd45a} }, -/**/ {{0xbf9cb490, 0x5c0d1d38} }, -/**/ {{0x3f96d44b, 0xbbaba2f2} }, -/**/ {{0xbf822289, 0x9c6b7de1} }, -/**/ {{0xbf4aa143, 0xa49803b6} }, -/**/ {{0x3f7165be, 0x9270e49e} } }, -/**/ {{{0x3fef6000, 0x00000000} }, -/**/ {{0x3fe8d132, 0x06f8c4cb} }, -/**/ {{0xbc7b018c, 0xbaa89a8b} }, -/**/ {{0x3fe050c7, 0xf60ab1f4} }, -/**/ {{0x3c63f8e2, 0xc6cf5796} }, -/**/ {{0xbfd04ff7, 0xfe998dc0} }, -/**/ {{0x3c77873c, 0x7dc56419} }, -/**/ {{0x3fb54ee0, 0x7cc24121} }, -/**/ {{0x3c313117, 0x8e5c84c5} }, -/**/ {{0x3f64fee1, 0x50066301} }, -/**/ {{0x3c043698, 0x017261a1} }, -/**/ {{0xbf9c2c55, 0x2cc5b4f1} }, -/**/ {{0x3f9694bc, 0xf759f369} }, -/**/ {{0xbf822ea4, 0x6c93426a} }, -/**/ {{0xbf45d0a1, 0x135d6c51} }, -/**/ {{0x3f70d811, 0xe62dc18f} } }, -/**/ {{{0x3fef8000, 0x00000000} }, -/**/ {{0x3fe8e17a, 0xa99cc05e} }, -/**/ {{0xbc7ec182, 0xab042f61} }, -/**/ {{0x3fe0407f, 0xfbefe001} }, -/**/ {{0x3c401ffe, 0xfbf80041} }, -/**/ {{0xbfd03ffb, 0xebd00209} }, -/**/ {{0xbc53ff3c, 0xb9004112} }, -/**/ {{0x3fb5513a, 0x5aaf6d91} }, -/**/ {{0x3c54a20d, 0xc0516ddb} }, -/**/ {{0x3f60a27f, 0xc6ac4038} }, -/**/ {{0x3bf06bee, 0x2a340912} }, -/**/ {{0xbf9ba597, 0xccd6032a} }, -/**/ {{0x3f965508, 0x002bb974} }, -/**/ {{0xbf823860, 0xd2d1068b} }, -/**/ {{0xbf41277e, 0x666265bc} }, -/**/ {{0x3f704cdc, 0x656b66ea} } }, -/**/ {{{0x3fefa000, 0x00000000} }, -/**/ {{0x3fe8f1b3, 0x0c44f167} }, -/**/ {{0x3c6dd1ca, 0xb93933fd} }, -/**/ {{0x3fe03047, 0xfeb82e4e} }, -/**/ {{0x3c69ee56, 0x5272e5ac} }, -/**/ {{0xbfd02ffe, 0x49a09c45} }, -/**/ {{0xbc700a59, 0xb26267bb} }, -/**/ {{0x3fb55309, 0xfc062d2f} }, -/**/ {{0x3c5dba48, 0xb11938e0} }, -/**/ {{0x3f58b61b, 0xe4f365be} }, -/**/ {{0x3bf8b585, 0xa79ad31a} }, -/**/ {{0xbf9b2059, 0x08d4ad17} }, -/**/ {{0x3f961534, 0xfe379940} }, -/**/ {{0xbf823fd2, 0x62a1270e} }, -/**/ {{0xbf394a53, 0x3f3a0aec} }, -/**/ {{0x3f6f8842, 0xa04bcae2} } }, -/**/ {{{0x3fefc000, 0x00000000} }, -/**/ {{0x3fe901db, 0x3eeef187} }, -/**/ {{0x3c868665, 0xe5603c8f} }, -/**/ {{0x3fe0201f, 0xffbf7f80} }, -/**/ {{0x3c20201f, 0xffbf7f80} }, -/**/ {{0xbfd01fff, 0x7ebe8004} }, -/**/ {{0xbc4213ff, 0xcf979001} }, -/**/ {{0x3fb55451, 0xfb0012db} }, -/**/ {{0xbc395606, 0xf73aa59f} }, -/**/ {{0x3f50509f, 0xfc757100} }, -/**/ {{0x3bebc7da, 0xfee554d0} }, -/**/ {{0xbf9a9c99, 0x7d3424d0} }, -/**/ {{0x3f95d54b, 0xd5ac0217} }, -/**/ {{0xbf82450c, 0x564b3c49} }, -/**/ {{0xbf3091df, 0xe6d3e986} }, -/**/ {{0x3f6e7bc6, 0x3bef5a22} } }, -/**/ {{{0x3fefe000, 0x00000000} }, -/**/ {{0x3fe911f3, 0x5199833b} }, -/**/ {{0x3c63ae8a, 0x0edbf522} }, -/**/ {{0x3fe01007, 0xfffbfbfe} }, -/**/ {{0x3ba01007, 0xfffbfbfe} }, -/**/ {{0xbfd00fff, 0xefebf400} }, -/**/ {{0xbc401209, 0xfff9f97d} }, -/**/ {{0x3fb55514, 0xea5aaaf6} }, -/**/ {{0xbc529baa, 0xb5b7b240} }, -/**/ {{0x3f402827, 0xffc7abc4} }, -/**/ {{0x3b5ba3d6, 0xbfee6ab3} }, -/**/ {{0xbf9a1a59, 0x97d67093} }, -/**/ {{0x3f959554, 0x28080aaf} }, -/**/ {{0xbf824821, 0x8e892ce2} }, -/**/ {{0xbf204877, 0xfe70a2a6} }, -/**/ {{0x3f6d7447, 0x0e8ddd67} } }, -/**/ {{{0x3feff800, 0x00000000} }, -/**/ {{0x3fe91dfa, 0xd439826e} }, -/**/ {{0xbc786a19, 0x6df48d55} }, -/**/ {{0x3fe00400, 0x7ffffbff} }, -/**/ {{0xbbeffffe, 0xffbff800} }, -/**/ {{0xbfd003ff, 0xffbfebfd} }, -/**/ {{0xbb600480, 0x9ffff9fe} }, -/**/ {{0x3fb55551, 0x53aa5aab} }, -/**/ {{0xbc542a4a, 0x9baaab5b} }, -/**/ {{0x3f200a02, 0x7fffc7eb} }, -/**/ {{0xbb7dfffe, 0x4770e940} }, -/**/ {{0xbf99b9a5, 0x9997d8d0} }, -/**/ {{0x3f956555, 0x50a80a03} }, -/**/ {{0xbf824914, 0x86456493} }, -/**/ {{0xbf001207, 0x7ffe7329} }, -/**/ {{0x3f6cb1ef, 0x1c63fe2a} } }, - }; - -#else -#ifdef LITTLE_ENDI - - static const number - cij[241][7] = { /* x0,cij for (1/16,1) */ -/**/ {{{0X65E0244E, 0X3FB04006} }, -/**/ {{0X7B53DD20, 0X3FB03A73} }, -/**/ {{0XCF5CFB72, 0X3FEFDF1F} }, -/**/ {{0XCE2AE4C2, 0XBFB01EB3} }, -/**/ {{0XDD58A40D, 0XBFD4D29E} }, -/**/ {{0XD907A18A, 0X3FAFDA4A} }, -/**/ {{0X4DF65B18, 0X3FC814DF} } }, -/**/ {{{0XB9B88CD8, 0X3FB0FFFD} }, -/**/ {{0X63645300, 0X3FB0F99C} }, -/**/ {{0XA3DED30F, 0X3FEFDC08} }, -/**/ {{0X669C1AED, 0XBFB0D9DC} }, -/**/ {{0XF7138DE2, 0XBFD4C669} }, -/**/ {{0X29D085A7, 0X3FB0A12F} }, -/**/ {{0XCFD48D20, 0X3FC7F0EE} } }, -/**/ {{{0X5A73D4F1, 0X3FB1FFF1} }, -/**/ {{0X2BEE2040, 0X3FB1F85F} }, -/**/ {{0X42B56D31, 0X3FEFD7B3} }, -/**/ {{0XB69DEA40, 0XBFB1D2B7} }, -/**/ {{0X3922ECC9, 0XBFD4B552} }, -/**/ {{0X522B1A04, 0X3FB18F93} }, -/**/ {{0X5660F061, 0X3FC7BEAD} } }, -/**/ {{{0XB2524AA2, 0X3FB2FFFD} }, -/**/ {{0XE71790A0, 0X3FB2F716} }, -/**/ {{0X53B496A4, 0X3FEFD31F} }, -/**/ {{0X4AAB7374, 0XBFB2CAD8} }, -/**/ {{0X58DD2FB2, 0XBFD4A34B} }, -/**/ {{0XD0CECC18, 0X3FB27C0A} }, -/**/ {{0X5D2743D7, 0X3FC789D2} } }, -/**/ {{{0X0573F3AC, 0X3FB3FFFE} }, -/**/ {{0X1702F6A0, 0X3FB3F59D} }, -/**/ {{0XB071ACC2, 0X3FEFCE4D} }, -/**/ {{0X64DB3686, 0XBFB3C20F} }, -/**/ {{0XEB3BFE93, 0XBFD49059} }, -/**/ {{0XCAF74FED, 0X3FB36659} }, -/**/ {{0X1C011FB0, 0X3FC75269} } }, -/**/ {{{0X894384D6, 0X3FB4FFEF} }, -/**/ {{0X0CE204C0, 0X3FB4F3ED} }, -/**/ {{0XA8EA5A01, 0X3FEFC93E} }, -/**/ {{0X7B5457C9, 0XBFB4B84F} }, -/**/ {{0X7401F2F9, 0XBFD47C80} }, -/**/ {{0XB4F67209, 0X3FB44E64} }, -/**/ {{0X4C540B77, 0X3FC7187D} } }, -/**/ {{{0XDF406528, 0X3FB5FFF8} }, -/**/ {{0X3C73D820, 0X3FB5F22B} }, -/**/ {{0XB1F60F13, 0X3FEFC3F1} }, -/**/ {{0XCB7FA73B, 0XBFB5ADB2} }, -/**/ {{0X2B1EB555, 0XBFD467BE} }, -/**/ {{0X99EDC463, 0X3FB53435} }, -/**/ {{0X238F5059, 0X3FC6DC1B} } }, -/**/ {{{0X8C4F0D56, 0X3FB7000F} }, -/**/ {{0X495A2FA0, 0X3FB6F04B} }, -/**/ {{0X340DCE97, 0X3FEFBE67} }, -/**/ {{0X4D98E1AD, 0XBFB6A224} }, -/**/ {{0X14064DF1, 0XBFD45216} }, -/**/ {{0X2BA78A66, 0X3FB617AA} }, -/**/ {{0X50A3D7AC, 0X3FC69D4F} } }, -/**/ {{{0XBB4057CF, 0X3FB8000F} }, -/**/ {{0XBE2CD3A0, 0X3FB7EE27} }, -/**/ {{0X39EC9246, 0X3FEFB8A0} }, -/**/ {{0X31D9C773, 0XBFB79577} }, -/**/ {{0XB6DC7D72, 0XBFD43B8D} }, -/**/ {{0XD69547DF, 0X3FB6F88A} }, -/**/ {{0XF633CE8C, 0X3FC65C26} } }, -/**/ {{{0X39CF2B7F, 0X3FB8FFF2} }, -/**/ {{0X9F979E80, 0X3FB8EBB7} }, -/**/ {{0X435506E1, 0X3FEFB29D} }, -/**/ {{0X69B9CDB5, 0XBFB8879A} }, -/**/ {{0X85FEAFA9, 0XBFD42428} }, -/**/ {{0XB6191A0E, 0X3FB7D6BA} }, -/**/ {{0XA7CB8BB5, 0X3FC618AF} } }, -/**/ {{{0X6E2F0772, 0X3FB9FFF9} }, -/**/ {{0XD32A9480, 0X3FB9E93A} }, -/**/ {{0X04A3EC40, 0X3FEFAC5D} }, -/**/ {{0X53F6EA97, 0XBFB978C2} }, -/**/ {{0X089C36F6, 0XBFD40BE3} }, -/**/ {{0X885AEB77, 0X3FB8B25C} }, -/**/ {{0X63CADCE1, 0X3FC5D2F7} } }, -/**/ {{{0X6316B097, 0X3FBB0002} }, -/**/ {{0XCE24CC00, 0X3FBAE68C} }, -/**/ {{0X938C5C66, 0X3FEFA5E0} }, -/**/ {{0X76F14E4B, 0XBFBA68C3} }, -/**/ {{0X1696CD7C, 0XBFD3F2C3} }, -/**/ {{0X722A2CB4, 0X3FB98B3B} }, -/**/ {{0X9067AD62, 0X3FC58B0C} } }, -/**/ {{{0X604F58B1, 0X3FBC0008} }, -/**/ {{0X05650780, 0X3FBBE3A7} }, -/**/ {{0X5A7A2773, 0X3FEF9F28} }, -/**/ {{0X3D5AC0A4, 0XBFBB578F} }, -/**/ {{0XF767119F, 0XBFD3D8CB} }, -/**/ {{0XC7E31B88, 0X3FBA613D} }, -/**/ {{0XF5594565, 0X3FC540FD} } }, -/**/ {{{0X6CCA4EBA, 0X3FBD0002} }, -/**/ {{0XC1298A80, 0X3FBCE07E} }, -/**/ {{0XE8D36C4A, 0X3FEF9834} }, -/**/ {{0X5BCAC5FE, 0XBFBC4513} }, -/**/ {{0X8B5236F1, 0XBFD3BE01} }, -/**/ {{0X2E991970, 0X3FBB3447} }, -/**/ {{0XB8ADB373, 0X3FC4F4DA} } }, -/**/ {{{0XB2B47FCA, 0X3FBDFFF4} }, -/**/ {{0X4A051D80, 0X3FBDDD16} }, -/**/ {{0X78DCC895, 0X3FEF9106} }, -/**/ {{0XF0966844, 0XBFBD3149} }, -/**/ {{0X744F9A5F, 0XBFD3A266} }, -/**/ {{0XEDB7F27A, 0X3FBC0446} }, -/**/ {{0X583F9ECA, 0X3FC4A6B2} } }, -/**/ {{{0XA9A05BE0, 0X3FBF000A} }, -/**/ {{0XA3BDA540, 0X3FBED996} }, -/**/ {{0X1B8BA97F, 0X3FEF899C} }, -/**/ {{0X2287A677, 0XBFBE1C51} }, -/**/ {{0XEDC130BB, 0XBFD385F8} }, -/**/ {{0XF306FF50, 0X3FBCD14B} }, -/**/ {{0XA667A72B, 0X3FC45694} } }, -/**/ {{{0XBA8F63DE, 0X3FBFFFFA} }, -/**/ {{0X69FE4780, 0X3FBFD5B5} }, -/**/ {{0X4863DC7D, 0X3FEF81F8} }, -/**/ {{0XD1518706, 0XBFBF05DB} }, -/**/ {{0X4687A69C, 0XBFD368C4} }, -/**/ {{0X1B3868DA, 0X3FBD9B08} }, -/**/ {{0XC345ADFC, 0X3FC40491} } }, -/**/ {{{0X6ECCADA8, 0X3FC07FFA} }, -/**/ {{0X0A396400, 0X3FC068D0} }, -/**/ {{0XF1FCFC6B, 0X3FEF7A19} }, -/**/ {{0X861DF0DF, 0XBFBFEE0C} }, -/**/ {{0X5A586C0C, 0XBFD34AC6} }, -/**/ {{0X189D637A, 0X3FBE618F} }, -/**/ {{0X195779D4, 0X3FC3B0BA} } }, -/**/ {{{0X33432713, 0X3FC10003} }, -/**/ {{0XF203D1A0, 0X3FC0E6B0} }, -/**/ {{0XFE0EB463, 0X3FEF7200} }, -/**/ {{0XE15CB19A, 0XBFC06A72} }, -/**/ {{0XB8DB761E, 0XBFD32C00} }, -/**/ {{0XA11F5E3E, 0X3FBF24D8} }, -/**/ {{0X569E85DD, 0X3FC35B1E} } }, -/**/ {{{0XDA1C4811, 0X3FC17FFC} }, -/**/ {{0X29EBDA00, 0X3FC16462} }, -/**/ {{0X7D558737, 0X3FEF69AF} }, -/**/ {{0X0B33969B, 0XBFC0DD17} }, -/**/ {{0X33AC50D1, 0XBFD30C7D} }, -/**/ {{0X9BE43F0F, 0X3FBFE4AA} }, -/**/ {{0X692539CB, 0X3FC303CF} } }, -/**/ {{{0X3CCA418D, 0X3FC1FFFF} }, -/**/ {{0X3B978EA0, 0X3FC1E1FA} }, -/**/ {{0X45D421A9, 0X3FEF6124} }, -/**/ {{0XACAC8AA8, 0XBFC14F03} }, -/**/ {{0X62E675A3, 0XBFD2EC39} }, -/**/ {{0X2FA6B426, 0X3FC0508C} }, -/**/ {{0X780A6467, 0X3FC2AADE} } }, -/**/ {{{0XD9C78922, 0X3FC27FF7} }, -/**/ {{0X1B91E640, 0X3FC25F66} }, -/**/ {{0XF52E192C, 0X3FEF5860} }, -/**/ {{0XE5DE2394, 0XBFC1C023} }, -/**/ {{0X6BEE0ABD, 0XBFD2CB3D} }, -/**/ {{0X5E075C1A, 0X3FC0ACFB} }, -/**/ {{0XDFFE453A, 0X3FC2505C} } }, -/**/ {{{0XA1FC1AAA, 0X3FC2FFF7} }, -/**/ {{0X83257C40, 0X3FC2DCB5} }, -/**/ {{0XC719B6FB, 0X3FEF4F64} }, -/**/ {{0X61514083, 0XBFC23082} }, -/**/ {{0X7F7B72D5, 0XBFD2A988} }, -/**/ {{0X7C887402, 0X3FC107A7} }, -/**/ {{0X2C3CD6D1, 0X3FC1F45C} } }, -/**/ {{{0X9D78E15E, 0X3FC38005} }, -/**/ {{0X6AC98EE0, 0X3FC359EE} }, -/**/ {{0X944CEC16, 0X3FEF462F} }, -/**/ {{0XD85B87A9, 0XBFC2A020} }, -/**/ {{0X2E4AB369, 0XBFD2871C} }, -/**/ {{0XC31A65D9, 0X3FC1608D} }, -/**/ {{0X130BBE50, 0X3FC196EE} } }, -/**/ {{{0X9F431B1A, 0X3FC40004} }, -/**/ {{0X6BD65360, 0X3FC3D6F3} }, -/**/ {{0XDD99B68A, 0X3FEF3CC3} }, -/**/ {{0XB3DD00ED, 0XBFC30EE1} }, -/**/ {{0XF8482664, 0XBFD26403} }, -/**/ {{0XFE136626, 0X3FC1B792} }, -/**/ {{0X6EAC7440, 0X3FC13824} } }, -/**/ {{{0XE01D95A1, 0X3FC48004} }, -/**/ {{0X86F00CC0, 0X3FC453D3} }, -/**/ {{0XE3970539, 0X3FEF3320} }, -/**/ {{0X0A5279AA, 0XBFC37CCF} }, -/**/ {{0X3B151D5D, 0XBFD2403F} }, -/**/ {{0XE331C9E6, 0X3FC20CBB} }, -/**/ {{0X39E3F097, 0X3FC0D811} } }, -/**/ {{{0XAA9382DD, 0X3FC4FFF7} }, -/**/ {{0X8C590A80, 0X3FC4D07F} }, -/**/ {{0X34DF28E0, 0X3FEF2948} }, -/**/ {{0X5B43915C, 0XBFC3E9D8} }, -/**/ {{0XEB8845A2, 0XBFD21BD5} }, -/**/ {{0XAC6AC8AD, 0X3FC25FF8} }, -/**/ {{0X88ED96CA, 0X3FC076C6} } }, -/**/ {{{0X352408BE, 0X3FC58006} }, -/**/ {{0XC39A73E0, 0X3FC54D1E} }, -/**/ {{0X09AE009C, 0X3FEF1F37} }, -/**/ {{0XB9BE8550, 0XBFC4561C} }, -/**/ {{0X0053F52E, 0XBFD1F6C0} }, -/**/ {{0XEF783BE9, 0X3FC2B15D} }, -/**/ {{0X8615239B, 0X3FC01456} } }, -/**/ {{{0X2B193F81, 0X3FC5FFFF} }, -/**/ {{0X4F73E000, 0X3FC5C980} }, -/**/ {{0XAE110E29, 0X3FEF14F1} }, -/**/ {{0X9098B3D2, 0XBFC4C16E} }, -/**/ {{0X8F058241, 0XBFD1D10F} }, -/**/ {{0XA14FA897, 0X3FC300C6} }, -/**/ {{0XD56607C0, 0X3FBF61A6} } }, -/**/ {{{0X4460E6E1, 0X3FC68008} }, -/**/ {{0X04A55E20, 0X3FC645C8} }, -/**/ {{0X8FA36EC5, 0X3FEF0A75} }, -/**/ {{0XD62FA883, 0XBFC52BE9} }, -/**/ {{0X69A74048, 0XBFD1AABD} }, -/**/ {{0X1679EB02, 0X3FC34E45} }, -/**/ {{0XF7C14C3D, 0X3FBE989E} } }, -/**/ {{{0X9E99A846, 0X3FC6FFFB} }, -/**/ {{0X4B35FD40, 0X3FC6C1D0} }, -/**/ {{0X3EF8EF95, 0X3FEEFFC6} }, -/**/ {{0X76A2FE63, 0XBFC5956B} }, -/**/ {{0XDDC78DDF, 0XBFD183D8} }, -/**/ {{0XAC606D66, 0X3FC399BD} }, -/**/ {{0X070D286A, 0X3FBDCDBA} } }, -/**/ {{{0X0FFCD490, 0X3FC78008} }, -/**/ {{0XB55758E0, 0X3FC73DC5} }, -/**/ {{0X457E2065, 0X3FEEF4E0} }, -/**/ {{0X7D6FF9BC, 0XBFC5FE16} }, -/**/ {{0X9FADD384, 0XBFD15C57} }, -/**/ {{0X73E52D32, 0X3FC3E347} }, -/**/ {{0X9A65AE4B, 0X3FBD011C} } }, -/**/ {{{0X148E79C1, 0X3FC80006} }, -/**/ {{0X2B7F8CA0, 0X3FC7B981} }, -/**/ {{0X701687ED, 0X3FEEE9C7} }, -/**/ {{0X0E1EF36D, 0XBFC665C7} }, -/**/ {{0XCCBCBDAB, 0XBFD13449} }, -/**/ {{0X5C71B3E8, 0X3FC42AC7} }, -/**/ {{0X3E81980E, 0X3FBC32EB} } }, -/**/ {{{0X0F487C17, 0X3FC88006} }, -/**/ {{0XBC0E3640, 0X3FC83511} }, -/**/ {{0XD2D55329, 0X3FEEDE7A} }, -/**/ {{0X37E644BA, 0XBFC6CC87} }, -/**/ {{0X60597557, 0XBFD10BAE} }, -/**/ {{0X13E26FBE, 0X3FC47043} }, -/**/ {{0X6FB18BF4, 0X3FBB634A} } }, -/**/ {{{0XD3518D76, 0X3FC90004} }, -/**/ {{0X8874C100, 0X3FC8B073} }, -/**/ {{0X2ED6673B, 0X3FEED2FB} }, -/**/ {{0X2A6EBAC3, 0XBFC73251} }, -/**/ {{0X6924232F, 0XBFD0E28A} }, -/**/ {{0X73BCC03F, 0X3FC4B3B5} }, -/**/ {{0X8C72507F, 0X3FBA925E} } }, -/**/ {{{0XD2F20D5C, 0X3FC97FFF} }, -/**/ {{0X51AF5920, 0X3FC92BA3} }, -/**/ {{0X3D32449F, 0X3FEEC749} }, -/**/ {{0XC308255F, 0XBFC7971F} }, -/**/ {{0XD572D28F, 0XBFD0B8E2} }, -/**/ {{0X337448FE, 0X3FC4F51A} }, -/**/ {{0XCFCBC620, 0X3FB9C04B} } }, -/**/ {{{0XBF80F060, 0X3FCA0005} }, -/**/ {{0X6E9E8960, 0X3FC9A6AE} }, -/**/ {{0X1EF200E7, 0X3FEEBB64} }, -/**/ {{0X6E96E5C1, 0XBFC7FAFB} }, -/**/ {{0XEC6AD647, 0XBFD08EB6} }, -/**/ {{0XF53D0BA6, 0X3FC53475} }, -/**/ {{0X4433C20E, 0X3FB8ED36} } }, -/**/ {{{0XDEECA8E4, 0X3FCA7FF7} }, -/**/ {{0X948578E0, 0X3FCA2176} }, -/**/ {{0X328FF98B, 0X3FEEAF4F} }, -/**/ {{0X58149B1C, 0XBFC85DC9} }, -/**/ {{0XF933A1AB, 0XBFD06414} }, -/**/ {{0X60C45A8F, 0X3FC571B7} }, -/**/ {{0XBE58C308, 0X3FB81941} } }, -/**/ {{{0X7DEFD553, 0X3FCAFFFF} }, -/**/ {{0X9EBA6B80, 0X3FCA9C22} }, -/**/ {{0X10A85E10, 0X3FEEA307} }, -/**/ {{0X7F9DEA61, 0XBFC8BFA6} }, -/**/ {{0X5A474E8F, 0XBFD038F3} }, -/**/ {{0X30C225D2, 0X3FC5ACF0} }, -/**/ {{0XD062812F, 0X3FB74491} } }, -/**/ {{{0X669932A5, 0X3FCB7FFE} }, -/**/ {{0XCFF6DFE0, 0X3FCB1694} }, -/**/ {{0X1921D387, 0X3FEE968F} }, -/**/ {{0XE075D95A, 0XBFC92078} }, -/**/ {{0X526793C4, 0XBFD00D60} }, -/**/ {{0X73842A52, 0X3FC5E610} }, -/**/ {{0XC5331D5A, 0X3FB66F49} } }, -/**/ {{{0XB44759F3, 0X3FCBFFF9} }, -/**/ {{0X5073A2A0, 0X3FCB90D1} }, -/**/ {{0X56598313, 0X3FEE89E7} }, -/**/ {{0XCFB9203D, 0XBFC98041} }, -/**/ {{0XBED91B37, 0XBFCFC2BC} }, -/**/ {{0X6D4FC2FC, 0X3FC61D19} }, -/**/ {{0X9411537E, 0X3FB5998C} } }, -/**/ {{{0X5568F3EC, 0X3FCC8007} }, -/**/ {{0X4A31DBE0, 0X3FCC0AEC} }, -/**/ {{0X18F270A8, 0X3FEE7D0E} }, -/**/ {{0XF522B132, 0XBFC9DF0E} }, -/**/ {{0X2179C242, 0XBFCF69D4} }, -/**/ {{0X36646FCD, 0X3FC65213} }, -/**/ {{0XDC699095, 0X3FB4C37C} } }, -/**/ {{{0X601A799F, 0X3FCCFFF8} }, -/**/ {{0X49DB66A0, 0X3FCC84B8} }, -/**/ {{0XA0EE780E, 0X3FEE7008} }, -/**/ {{0X3A403934, 0XBFCA3CBB} }, -/**/ {{0XD490BE32, 0XBFCF102F} }, -/**/ {{0X037D4137, 0X3FC684EA} }, -/**/ {{0XD9EC855A, 0X3FB3ED3C} } }, -/**/ {{{0X7BBF1497, 0X3FCD7FF9} }, -/**/ {{0X1E008CE0, 0X3FCCFE5F} }, -/**/ {{0XF04615C7, 0X3FEE62D2} }, -/**/ {{0X15AADE2C, 0XBFCA9965} }, -/**/ {{0X0B44B682, 0XBFCEB5B9} }, -/**/ {{0X92EC8D57, 0X3FC6B5AF} }, -/**/ {{0X60D831AE, 0X3FB316EE} } }, -/**/ {{{0X40209B20, 0X3FCE0008} }, -/**/ {{0XB145A760, 0X3FCD77DD} }, -/**/ {{0XBE1DFDF1, 0X3FEE556D} }, -/**/ {{0X2186AF0F, 0XBFCAF508} }, -/**/ {{0X9420489D, 0XBFCE5A79} }, -/**/ {{0X454FEB2C, 0X3FC6E462} }, -/**/ {{0XD2945A8C, 0X3FB240B2} } }, -/**/ {{{0XC0AE943C, 0X3FCE8000} }, -/**/ {{0X3CA10100, 0X3FCDF111} }, -/**/ {{0X59E7308B, 0X3FEE47DD} }, -/**/ {{0X9439F69F, 0XBFCB4F88} }, -/**/ {{0X798DE600, 0XBFCDFE93} }, -/**/ {{0X8F267389, 0X3FC710F5} }, -/**/ {{0X1A8A373E, 0X3FB16AAB} } }, -/**/ {{{0X6D532803, 0X3FCF0003} }, -/**/ {{0XCB4E5C80, 0X3FCE6A17} }, -/**/ {{0XE3D0F6C2, 0X3FEE3A1E} }, -/**/ {{0X6E31F768, 0XBFCBA8FB} }, -/**/ {{0XE6A382E3, 0XBFCDA1F7} }, -/**/ {{0XB36AC4C0, 0X3FC73B75} }, -/**/ {{0XA3470B0A, 0X3FB094F7} } }, -/**/ {{{0X48B8AFC3, 0X3FCF7FFA} }, -/**/ {{0XE1654560, 0X3FCEE2DB} }, -/**/ {{0X43F2AB37, 0X3FEE2C35} }, -/**/ {{0X598207D6, 0XBFCC014F} }, -/**/ {{0X1EFE809A, 0XBFCD44BF} }, -/**/ {{0X698A561E, 0X3FC763DC} }, -/**/ {{0XA7CF78A3, 0X3FAF7F70} } }, -/**/ {{{0XEB334FAE, 0X3FD00002} }, -/**/ {{0X77AB25E0, 0X3FCF5B7B} }, -/**/ {{0X78A5C127, 0X3FEE1E1D} }, -/**/ {{0XC555D571, 0XBFCC5898} }, -/**/ {{0XB706CF86, 0XBFCCE6D9} }, -/**/ {{0X0823F643, 0X3FC78A35} }, -/**/ {{0X0B9118E8, 0X3FADD619} } }, -/**/ {{{0XA8AF86FE, 0X3FD03FFC} }, -/**/ {{0XB53A0C00, 0X3FCFD3CB} }, -/**/ {{0XFDCBAC8B, 0X3FEE0FDC} }, -/**/ {{0X6C3246FF, 0XBFCCAEB7} }, -/**/ {{0XD6E19AD3, 0XBFCC8870} }, -/**/ {{0XD2C48E91, 0X3FC7AE73} }, -/**/ {{0X0510FDB0, 0X3FAC2E26} } }, -/**/ {{{0XD38984B7, 0X3FD07FFC} }, -/**/ {{0X5732D4A0, 0X3FD025F7} }, -/**/ {{0X49C17AB3, 0X3FEE0170} }, -/**/ {{0X9AFE5028, 0XBFCD03C2} }, -/**/ {{0X9A2C1833, 0XBFCC2971} }, -/**/ {{0X69041DCF, 0X3FC7D0A5} }, -/**/ {{0XF497C653, 0X3FAA87D3} } }, -/**/ {{{0X1ED2ADD7, 0X3FD0BFFF} }, -/**/ {{0XCD7F7420, 0X3FD061ED} }, -/**/ {{0XDA96B750, 0X3FEDF2D8} }, -/**/ {{0XC777881E, 0XBFCD57B2} }, -/**/ {{0X8692B503, 0XBFCBC9EA} }, -/**/ {{0X42ABF9E7, 0X3FC7F0C9} }, -/**/ {{0X04B42BB4, 0X3FA8E35E} } }, -/**/ {{{0XA8515CDA, 0X3FD10003} }, -/**/ {{0X027416A0, 0X3FD09DC9} }, -/**/ {{0X34899950, 0X3FEDE417} }, -/**/ {{0X7983EDE4, 0XBFCDAA86} }, -/**/ {{0X999706B6, 0XBFCB69E3} }, -/**/ {{0XB0F126DB, 0X3FC80EE1} }, -/**/ {{0X17EE9BAB, 0X3FA740FE} } }, -/**/ {{{0XF3AF9CC5, 0X3FD14001} }, -/**/ {{0XB6E1ABA0, 0X3FD0D980} }, -/**/ {{0XE0412681, 0X3FEDD52D} }, -/**/ {{0X6863B28B, 0XBFCDFC31} }, -/**/ {{0XC55B8D5A, 0XBFCB0971} }, -/**/ {{0XA6731AAC, 0X3FC82AED} }, -/**/ {{0XC73BD8F0, 0X3FA5A0EC} } }, -/**/ {{{0XB6122509, 0X3FD18003} }, -/**/ {{0XAA1E67A0, 0X3FD1151D} }, -/**/ {{0X2E0C1F32, 0X3FEDC61B} }, -/**/ {{0XB9BA6B7E, 0XBFCE4CBE} }, -/**/ {{0X90C2431C, 0XBFCAA88E} }, -/**/ {{0X8BCBDA5E, 0X3FC844F4} }, -/**/ {{0X50E585FF, 0X3FA40361} } }, -/**/ {{{0XA6A2A153, 0X3FD1BFFF} }, -/**/ {{0XE7A18DC0, 0X3FD15096} }, -/**/ {{0XE1218F3F, 0X3FEDB6E1} }, -/**/ {{0X9621D6A2, 0XBFCE9C21} }, -/**/ {{0X22627B04, 0XBFCA4750} }, -/**/ {{0XFF8B908E, 0X3FC85CF5} }, -/**/ {{0X9833C0D6, 0X3FA26891} } }, -/**/ {{{0X2D345AAF, 0X3FD1FFFD} }, -/**/ {{0X053BF760, 0X3FD18BF3} }, -/**/ {{0XCC3ACB29, 0X3FEDA780} }, -/**/ {{0X2AA756AE, 0XBFCEEA62} }, -/**/ {{0X47ED9793, 0XBFC9E5B3} }, -/**/ {{0X87AB542A, 0X3FC872F8} }, -/**/ {{0X158E9E9A, 0X3FA0D0B2} } }, -/**/ {{{0XF14CF05A, 0X3FD23FFC} }, -/**/ {{0X4D568460, 0X3FD1C732} }, -/**/ {{0X55F32D3D, 0X3FED97F8} }, -/**/ {{0X21D457C8, 0XBFCF3780} }, -/**/ {{0XF065B845, 0XBFC983BE} }, -/**/ {{0XFBA70CD8, 0X3FC886FF} }, -/**/ {{0XAEB85CCC, 0X3F9E77EB} } }, -/**/ {{{0X0BAE6FC9, 0X3FD27FFE} }, -/**/ {{0X9A27C160, 0X3FD20253} }, -/**/ {{0X4619176E, 0X3FED8849} }, -/**/ {{0X5C0AC9EC, 0XBFCF8379} }, -/**/ {{0X5E645195, 0XBFC9217C} }, -/**/ {{0XF4264515, 0X3FC8990F} }, -/**/ {{0XE6B92E65, 0X3F9B551C} } }, -/**/ {{{0XA297A7DE, 0X3FD2C001} }, -/**/ {{0XACB927C0, 0X3FD23D57} }, -/**/ {{0XE4958FB6, 0X3FED7873} }, -/**/ {{0X43572249, 0XBFCFCE4E} }, -/**/ {{0X9F3560F3, 0XBFC8BEF1} }, -/**/ {{0XDF7F0E5B, 0X3FC8A92C} }, -/**/ {{0X116F3B19, 0X3F983958} } }, -/**/ {{{0X7267616A, 0X3FD2FFFE} }, -/**/ {{0XB2F378C0, 0X3FD27835} }, -/**/ {{0X13906586, 0X3FED687B} }, -/**/ {{0XAFDA1A0F, 0XBFD00BF9} }, -/**/ {{0XC197AD7D, 0XBFC85C34} }, -/**/ {{0X1E99F0A7, 0X3FC8B759} }, -/**/ {{0X6525C365, 0X3F9524FA} } }, -/**/ {{{0X48153B20, 0X3FD33FFE} }, -/**/ {{0X6A2FDCC0, 0X3FD2B2F6} }, -/**/ {{0XF827FBE4, 0X3FED585C} }, -/**/ {{0XB45A6918, 0XBFD03039} }, -/**/ {{0X5DFC3F72, 0XBFC7F93E} }, -/**/ {{0XC5210022, 0X3FC8C39B} }, -/**/ {{0X168FB62E, 0X3F92185E} } }, -/**/ {{{0X8122579A, 0X3FD38003} }, -/**/ {{0XAF6EC1E0, 0X3FD2ED9B} }, -/**/ {{0X872F20D3, 0X3FED4819} }, -/**/ {{0X1F4C1031, 0XBFD053E8} }, -/**/ {{0X621FFD79, 0XBFC79612} }, -/**/ {{0XDB9D9DFC, 0X3FC8CDF9} }, -/**/ {{0X80C6852F, 0X3F8E27B4} } }, -/**/ {{{0X3EF39141, 0X3FD3C003} }, -/**/ {{0X4668C700, 0X3FD3281B} }, -/**/ {{0X18590D1A, 0X3FED37B4} }, -/**/ {{0XA3EF2560, 0XBFD076FE} }, -/**/ {{0X3033287A, 0XBFC732C9} }, -/**/ {{0XCA2E5458, 0X3FC8D676} }, -/**/ {{0XD80944B1, 0X3F882F85} } }, -/**/ {{{0X63FA0E31, 0X3FD40001} }, -/**/ {{0X7B565000, 0X3FD36278} }, -/**/ {{0X47A813DA, 0X3FED272C} }, -/**/ {{0X493B9D88, 0XBFD0997F} }, -/**/ {{0X3DA9FE3C, 0XBFC6CF64} }, -/**/ {{0XC1CD3331, 0X3FC8DD18} }, -/**/ {{0XF70F6E07, 0X3F8248D1} } }, -/**/ {{{0X74071092, 0X3FD44003} }, -/**/ {{0X0F0A4000, 0X3FD39CB8} }, -/**/ {{0X3BA47A6B, 0X3FED1681} }, -/**/ {{0XD8788947, 0XBFD0BB6C} }, -/**/ {{0X589596A6, 0XBFC66BE2} }, -/**/ {{0XC9B3EC1E, 0X3FC8E1E5} }, -/**/ {{0XD20FAB86, 0X3F78E868} } }, -/**/ {{{0XC880F200, 0X3FD48000} }, -/**/ {{0XDEFFB460, 0X3FD3D6D1} }, -/**/ {{0XCADC576C, 0X3FED05B5} }, -/**/ {{0XA1D352C2, 0XBFD0DCC2} }, -/**/ {{0X3D7D2574, 0XBFC60858} }, -/**/ {{0X03208BC0, 0X3FC8E4E3} }, -/**/ {{0X6379E732, 0X3F6AC909} } }, -/**/ {{{0X4D97D2CB, 0X3FD4C000} }, -/**/ {{0XF3A2E220, 0X3FD410CB} }, -/**/ {{0XBB7ED511, 0X3FECF4C8} }, -/**/ {{0X37766A49, 0XBFD0FD84} }, -/**/ {{0X5AABC13C, 0XBFC5A4C2} }, -/**/ {{0XC80DAC4B, 0X3FC8E616} }, -/**/ {{0XB04695C2, 0X3F4038AA} } }, -/**/ {{{0X9397539F, 0X3FD4FFFD} }, -/**/ {{0X06A7DEC0, 0X3FD44AA2} }, -/**/ {{0XCF479DDE, 0X3FECE3BB} }, -/**/ {{0X4D122984, 0XBFD11DAF} }, -/**/ {{0XB1024DF0, 0XBFC5412E} }, -/**/ {{0X1B2C560D, 0X3FC8E587} }, -/**/ {{0X951C088D, 0XBF625DA8} } }, -/**/ {{{0XF304715F, 0X3FD53FFF} }, -/**/ {{0X791F3900, 0X3FD4845A} }, -/**/ {{0XA45E0FD8, 0X3FECD28D} }, -/**/ {{0X8D61F221, 0XBFD13D47} }, -/**/ {{0XD3E9BB99, 0XBFC4DD98} }, -/**/ {{0X0F181507, 0X3FC8E33A} }, -/**/ {{0XD08BD25C, 0XBF743C33} } }, -/**/ {{{0XE88EA386, 0X3FD58002} }, -/**/ {{0XF575D6C0, 0X3FD4BDF0} }, -/**/ {{0X02035609, 0X3FECC140} }, -/**/ {{0XB808071E, 0XBFD15C4A} }, -/**/ {{0XB2945FCF, 0XBFC47A0E} }, -/**/ {{0XFC056447, 0X3FC8DF35} }, -/**/ {{0XB00A45CD, 0XBF7F2011} } }, -/**/ {{{0X70F4D590, 0X3FD5BFFD} }, -/**/ {{0X284D7AE0, 0X3FD4F75D} }, -/**/ {{0XF2DE98B6, 0X3FECAFD5} }, -/**/ {{0XA2B42F42, 0XBFD17AB4} }, -/**/ {{0X1C285A92, 0XBFC416A5} }, -/**/ {{0X511D6C5A, 0X3FC8D982} }, -/**/ {{0X77008605, 0XBF84ECC1} } }, -/**/ {{{0XB70D6E53, 0X3FD5FFFD} }, -/**/ {{0X8E2FF500, 0X3FD530AB} }, -/**/ {{0X32D2429D, 0X3FEC9E4C} }, -/**/ {{0X35190681, 0XBFD1988C} }, -/**/ {{0XBF748319, 0XBFC3B34C} }, -/**/ {{0X98D3A613, 0X3FC8D224} }, -/**/ {{0XAA295F9F, 0XBF8A33D4} } }, -/**/ {{{0X5C7399E2, 0X3FD63FFC} }, -/**/ {{0X4F022E80, 0X3FD569D5} }, -/**/ {{0X58DD180F, 0X3FEC8CA5} }, -/**/ {{0X1D701DE4, 0XBFD1B5CE} }, -/**/ {{0XA7806A5A, 0XBFC35017} }, -/**/ {{0X56C01CF9, 0X3FC8C924} }, -/**/ {{0X942059E1, 0XBF8F64D9} } }, -/**/ {{{0X9A1AC7D2, 0X3FD67FFD} }, -/**/ {{0XF50031E0, 0X3FD5A2DD} }, -/**/ {{0XCEFF6DEB, 0X3FEC7AE0} }, -/**/ {{0X7C8C245B, 0XBFD1D27C} }, -/**/ {{0XC6AA933F, 0XBFC2ED05} }, -/**/ {{0XDDC5CF1F, 0X3FC8BE87} }, -/**/ {{0XD594386F, 0XBF923FB6} } }, -/**/ {{{0X6F7B9353, 0X3FD6BFFD} }, -/**/ {{0XB4E066C0, 0X3FD5DBC1} }, -/**/ {{0X456B591A, 0X3FEC6900} }, -/**/ {{0XC2D6D0AA, 0XBFD1EE95} }, -/**/ {{0XB11086F7, 0XBFC28A23} }, -/**/ {{0XDDE22D5A, 0X3FC8B256} }, -/**/ {{0X489D85A4, 0XBF94C19A} } }, -/**/ {{{0XF02A83E4, 0X3FD6FFFB} }, -/**/ {{0X6A237DC0, 0X3FD61480} }, -/**/ {{0X4CC81773, 0X3FEC5704} }, -/**/ {{0X4B9029CA, 0XBFD20A1A} }, -/**/ {{0X89F5FB1C, 0XBFC22777} }, -/**/ {{0X9B09E911, 0X3FC8A498} }, -/**/ {{0X130D419A, 0XBF9737EC} } }, -/**/ {{{0X128C213A, 0X3FD73FFE} }, -/**/ {{0X42499480, 0X3FD64D1E} }, -/**/ {{0X129C0D30, 0X3FEC44EC} }, -/**/ {{0X83787259, 0XBFD2250C} }, -/**/ {{0XD55BE4FC, 0XBFC1C4FF} }, -/**/ {{0X36B2D603, 0X3FC89553} }, -/**/ {{0X2E43DF46, 0XBF99A284} } }, -/**/ {{{0XEA0CDC7A, 0X3FD77FFB} }, -/**/ {{0X05B0E220, 0X3FD68594} }, -/**/ {{0X687132C0, 0X3FEC32BA} }, -/**/ {{0X7273497E, 0XBFD23F69} }, -/**/ {{0XCD39B037, 0XBFC162CE} }, -/**/ {{0XFA930AAF, 0X3FC8848F} }, -/**/ {{0XA4554412, 0XBF9C013D} } }, -/**/ {{{0XF18EDAB8, 0X3FD7C003} }, -/**/ {{0X4127BEE0, 0X3FD6BDEE} }, -/**/ {{0XC01607BD, 0X3FEC206B} }, -/**/ {{0X5FEE2F42, 0XBFD25937} }, -/**/ {{0X307761E1, 0XBFC100D4} }, -/**/ {{0X5DFEC556, 0X3FC87252} }, -/**/ {{0X7958F973, 0XBF9E53F6} } }, -/**/ {{{0X41F35C4C, 0X3FD7FFFD} }, -/**/ {{0XDA6607A0, 0X3FD6F616} }, -/**/ {{0XCDDC8437, 0X3FEC0E07} }, -/**/ {{0XBFB4DAEA, 0XBFD2726C} }, -/**/ {{0XE0DB1472, 0XBFC09F3B} }, -/**/ {{0X2A95AA1B, 0X3FC85EA9} }, -/**/ {{0XD872CFA2, 0XBFA04D47} } }, -/**/ {{{0X26C7C46B, 0X3FD84003} }, -/**/ {{0X96B8BE00, 0X3FD72E25} }, -/**/ {{0X4CDEDF38, 0X3FEBFB87} }, -/**/ {{0XD09404F3, 0XBFD28B14} }, -/**/ {{0XE7FB61F2, 0XBFC03DE1} }, -/**/ {{0XACB33BE9, 0X3FC84993} }, -/**/ {{0X9B1DE607, 0XBFA16A76} } }, -/**/ {{{0XCA90B179, 0X3FD88003} }, -/**/ {{0XA104A220, 0X3FD7660A} }, -/**/ {{0XF236E2F6, 0X3FEBE8EF} }, -/**/ {{0X19A94DDF, 0XBFD2A329} }, -/**/ {{0X0856A081, 0XBFBFB9CE} }, -/**/ {{0X33F70280, 0X3FC8331F} }, -/**/ {{0XF01308CC, 0XBFA2817A} } }, -/**/ {{{0XE9692FD5, 0X3FD8C003} }, -/**/ {{0XF0B2CB00, 0X3FD79DC9} }, -/**/ {{0XF2966495, 0X3FEBD640} }, -/**/ {{0XFD6EC2EA, 0XBFD2BAAB} }, -/**/ {{0XE08E9C2D, 0XBFBEF892} }, -/**/ {{0X031873E3, 0X3FC81B52} }, -/**/ {{0XAC12113D, 0XBFA39249} } }, -/**/ {{{0X35BE5C5F, 0X3FD8FFFE} }, -/**/ {{0XBDCCDFC0, 0X3FD7D55E} }, -/**/ {{0X6EABCF77, 0X3FEBC37C} }, -/**/ {{0X2D74F445, 0XBFD2D19C} }, -/**/ {{0XE63F2CDB, 0XBFBE382C} }, -/**/ {{0X0E6FE2AE, 0X3FC80236} }, -/**/ {{0X0E66AB41, 0XBFA49CD9} } }, -/**/ {{{0XAA8974CD, 0X3FD94002} }, -/**/ {{0XB8AFD880, 0X3FD80CD6} }, -/**/ {{0X4468CCBA, 0X3FEBB09E} }, -/**/ {{0XEC84E686, 0XBFD2E7FF} }, -/**/ {{0X88C659E8, 0XBFBD7876} }, -/**/ {{0XC2F15460, 0X3FC7E7CC} }, -/**/ {{0XB410D3ED, 0XBFA5A120} } }, -/**/ {{{0XE08EFDEA, 0X3FD98002} }, -/**/ {{0X34856920, 0X3FD84425} }, -/**/ {{0X3F290478, 0X3FEB9DAB} }, -/**/ {{0XBB81EDEF, 0XBFD2FDD2} }, -/**/ {{0X31E68398, 0XBFBCB9A5} }, -/**/ {{0XC2DBB11B, 0X3FC7CC23} }, -/**/ {{0X98467E78, 0XBFA69F19} } }, -/**/ {{{0X75294B6B, 0X3FD9C002} }, -/**/ {{0X299F6200, 0X3FD87B4D} }, -/**/ {{0XDE96CF1F, 0X3FEB8AA2} }, -/**/ {{0X8C4D45D2, 0XBFD31316} }, -/**/ {{0XEDCE4DBA, 0XBFBBFBB7} }, -/**/ {{0X8907FEC9, 0X3FC7AF41} }, -/**/ {{0X07419F55, 0XBFA796BE} } }, -/**/ {{{0XF3E490EC, 0X3FDA0002} }, -/**/ {{0XC21A4500, 0X3FD8B24F} }, -/**/ {{0X3B5EF7DD, 0X3FEB7785} }, -/**/ {{0X8EAE70CD, 0XBFD327CC} }, -/**/ {{0XD49E40DA, 0XBFBB3EB3} }, -/**/ {{0X4D93F7EA, 0X3FC7912D} }, -/**/ {{0X9E21606A, 0XBFA88809} } }, -/**/ {{{0X458461B6, 0X3FDA3FFF} }, -/**/ {{0X7754D2C0, 0X3FD8E928} }, -/**/ {{0X6A0DAF0E, 0X3FEB6454} }, -/**/ {{0XDC2A9A3F, 0XBFD33BF3} }, -/**/ {{0X4917D003, 0XBFBA82B1} }, -/**/ {{0X7C7566CF, 0X3FC771F1} }, -/**/ {{0X3D700DD8, 0XBFA972F9} } }, -/**/ {{{0X87E12AAE, 0X3FDA8002} }, -/**/ {{0XA5DFD000, 0X3FD91FE0} }, -/**/ {{0XA0D82E05, 0X3FEB510D} }, -/**/ {{0XA76AD312, 0XBFD34F90} }, -/**/ {{0XDEEC35AD, 0XBFB9C798} }, -/**/ {{0X8A0EF43E, 0X3FC75190} }, -/**/ {{0X0872EFC8, 0XBFAA578B} } }, -/**/ {{{0X49A86C84, 0X3FDAC001} }, -/**/ {{0X5C4516E0, 0X3FD9566E} }, -/**/ {{0XDD03F6B6, 0X3FEB3DB4} }, -/**/ {{0X291C1F82, 0XBFD362A0} }, -/**/ {{0X03F6DF60, 0XBFB90D95} }, -/**/ {{0X25091E92, 0X3FC73018} }, -/**/ {{0X577A022B, 0XBFAB35BE} } }, -/**/ {{{0X2F4CC2E1, 0X3FDAFFFF} }, -/**/ {{0X94226540, 0X3FD98CD4} }, -/**/ {{0X9297200A, 0X3FEB2A49} }, -/**/ {{0X5153FD01, 0XBFD37524} }, -/**/ {{0XAE3DE27E, 0XBFB854A3} }, -/**/ {{0X7EB3F331, 0X3FC70D8E} }, -/**/ {{0XB6AD570E, 0XBFAC0D93} } }, -/**/ {{{0XC2F3711E, 0X3FDB4000} }, -/**/ {{0X01CDC4C0, 0X3FD9C317} }, -/**/ {{0XEA63781B, 0X3FEB16CA} }, -/**/ {{0X3665B649, 0XBFD3871F} }, -/**/ {{0X3F70FBC6, 0XBFB79CC0} }, -/**/ {{0X061DFC2E, 0X3FC6E9F9} }, -/**/ {{0XD837F9C3, 0XBFACDF0C} } }, -/**/ {{{0XA777E180, 0X3FDB8000} }, -/**/ {{0XF3748F20, 0X3FD9F930} }, -/**/ {{0X0FB0162A, 0X3FEB033B} }, -/**/ {{0X25978CAB, 0XBFD39890} }, -/**/ {{0X5C765AAB, 0XBFB6E602} }, -/**/ {{0X9C16D678, 0X3FC6C562} }, -/**/ {{0X92A16EBF, 0XBFADAA2C} } }, -/**/ {{{0X087E14ED, 0X3FDBBFFD} }, -/**/ {{0XBF0DDB00, 0X3FDA2F20} }, -/**/ {{0X1CCE6E94, 0X3FEAEF9B} }, -/**/ {{0X8B73E3C3, 0XBFD3A977} }, -/**/ {{0X09EFD1CC, 0XBFB63077} }, -/**/ {{0X58408D3A, 0X3FC69FD4} }, -/**/ {{0XD2E48013, 0XBFAE6EF6} } }, -/**/ {{{0XF0086783, 0X3FDC0000} }, -/**/ {{0X8D448080, 0X3FDA64EF} }, -/**/ {{0X35990B5A, 0X3FEADBE8} }, -/**/ {{0X27241B86, 0XBFD3B9D9} }, -/**/ {{0XC20E4001, 0XBFB57C06} }, -/**/ {{0X90E6C8AB, 0X3FC6794F} }, -/**/ {{0X9A630A27, 0XBFAF2D70} } }, -/**/ {{{0X863E58F8, 0X3FDC4001} }, -/**/ {{0X1C3A1BA0, 0X3FDA9A94} }, -/**/ {{0X35ED7DD2, 0X3FEAC826} }, -/**/ {{0X0C075B50, 0XBFD3C9B3} }, -/**/ {{0XA429793C, 0XBFB4C8D7} }, -/**/ {{0X95903C22, 0X3FC651E2} }, -/**/ {{0XF0F8B649, 0XBFAFE59F} } }, -/**/ {{{0X6C62C3BF, 0X3FDC7FFC} }, -/**/ {{0X580A5840, 0X3FDAD00C} }, -/**/ {{0X62D1D808, 0X3FEAB456} }, -/**/ {{0XACBB06EC, 0XBFD3D905} }, -/**/ {{0X421E42DC, 0XBFB416F7} }, -/**/ {{0XE5608EFD, 0X3FC62996} }, -/**/ {{0XF14B649A, 0XBFB04BC5} } }, -/**/ {{{0X34B2A209, 0X3FDCC002} }, -/**/ {{0XF68F3B40, 0X3FDB0565} }, -/**/ {{0X1E3DC946, 0X3FEAA074} }, -/**/ {{0XE2DB674E, 0XBFD3E7D5} }, -/**/ {{0XA4833FFE, 0XBFB3663E} }, -/**/ {{0XC4F0392B, 0X3FC60069} }, -/**/ {{0X38B10201, 0XBFB0A19E} } }, -/**/ {{{0XAAC5F9F9, 0X3FDCFFFC} }, -/**/ {{0X59C45CC0, 0X3FDB3A8E} }, -/**/ {{0XD2389C24, 0X3FEA8C86} }, -/**/ {{0X8362B2CB, 0XBFD3F61F} }, -/**/ {{0XC6C746A6, 0XBFB2B6F1} }, -/**/ {{0X426D2946, 0X3FC5D671} }, -/**/ {{0X4981CE75, 0XBFB0F45D} } }, -/**/ {{{0X0D800C64, 0X3FDD4004} }, -/**/ {{0X88AF6580, 0X3FDB6F99} }, -/**/ {{0X7498CED2, 0X3FEA7887} }, -/**/ {{0XEF8975C0, 0XBFD403E8} }, -/**/ {{0XBEA81E2B, 0XBFB208D4} }, -/**/ {{0X283FFA4E, 0X3FC5ABA5} }, -/**/ {{0X11705130, 0XBFB14408} } }, -/**/ {{{0XB0E64500, 0X3FDD7FFE} }, -/**/ {{0X2324E140, 0X3FDBA472} }, -/**/ {{0X8C5AD680, 0X3FEA647E} }, -/**/ {{0XA03F042D, 0XBFD4112D} }, -/**/ {{0X9580389C, 0XBFB15C33} }, -/**/ {{0X49D9889E, 0X3FC5801E} }, -/**/ {{0XEF96554F, 0XBFB190A3} } }, -/**/ {{{0X2DFCF4EB, 0X3FDDBFFE} }, -/**/ {{0X9F1D27A0, 0X3FDBD926} }, -/**/ {{0X1AC286CA, 0X3FEA5067} }, -/**/ {{0X590A4DE1, 0XBFD41DF2} }, -/**/ {{0X8BD1EFA5, 0XBFB0B0E4} }, -/**/ {{0X702506D0, 0X3FC553D8} }, -/**/ {{0XADA415A6, 0XBFB1DA36} } }, -/**/ {{{0X8A34BBC2, 0X3FDDFFFD} }, -/**/ {{0XC4F7A2C0, 0X3FDC0DB2} }, -/**/ {{0X2EF70BB3, 0X3FEA3C43} }, -/**/ {{0X16EE647C, 0XBFD42A37} }, -/**/ {{0XDB6270BB, 0XBFB006FA} }, -/**/ {{0X86F08DE6, 0X3FC526DE} }, -/**/ {{0X7E5061FB, 0XBFB220C6} } }, -/**/ {{{0XD26415C0, 0X3FDE3FFD} }, -/**/ {{0X58282940, 0X3FDC4217} }, -/**/ {{0XF391DDCB, 0X3FEA2812} }, -/**/ {{0X18EDDF0A, 0XBFD435FD} }, -/**/ {{0X88A589AF, 0XBFAEBCF2} }, -/**/ {{0X4CF96163, 0X3FC4F937} }, -/**/ {{0XF6A18481, 0XBFB26459} } }, -/**/ {{{0X37F72672, 0X3FDE7FFF} }, -/**/ {{0X67AA3DC0, 0X3FDC7654} }, -/**/ {{0XD6CE86B3, 0X3FEA13D6} }, -/**/ {{0X74037E91, 0XBFD44145} }, -/**/ {{0X3B2CC445, 0XBFAD6EC9} }, -/**/ {{0X0564F101, 0X3FC4CAEA} }, -/**/ {{0X0C49CD64, 0XBFB2A4F8} } }, -/**/ {{{0XA11BC00F, 0X3FDEBFFD} }, -/**/ {{0X85E23660, 0X3FDCAA66} }, -/**/ {{0XA25C2396, 0X3FE9FF90} }, -/**/ {{0X8A64724F, 0XBFD44C10} }, -/**/ {{0X2F871E82, 0XBFAC2399} }, -/**/ {{0X0AFBFB85, 0X3FC49C01} }, -/**/ {{0X0F0FF3FE, 0XBFB2E2A8} } }, -/**/ {{{0X3313756D, 0X3FDEFFFF} }, -/**/ {{0X9D30CC20, 0X3FDCDE52} }, -/**/ {{0XDFF9491F, 0X3FE9EB3E} }, -/**/ {{0X7E6ABAAE, 0XBFD45660} }, -/**/ {{0X3E8AA98D, 0XBFAADB4C} }, -/**/ {{0X25D8FF7D, 0X3FC46C7F} }, -/**/ {{0XA71D448D, 0XBFB31D71} } }, -/**/ {{{0X914B856E, 0X3FDF4001} }, -/**/ {{0XAAC1BB20, 0X3FDD1216} }, -/**/ {{0XC9BC4315, 0X3FE9D6E2} }, -/**/ {{0X004E7E91, 0XBFD46036} }, -/**/ {{0XFB901F89, 0XBFA995F7} }, -/**/ {{0X3F5BE04A, 0X3FC43C6D} }, -/**/ {{0XCE8ABF92, 0XBFB3555C} } }, -/**/ {{{0XCD144428, 0X3FDF8003} }, -/**/ {{0XD93E9640, 0X3FDD45B1} }, -/**/ {{0X256FDFEB, 0X3FE9C27D} }, -/**/ {{0X09F7C145, 0XBFD46992} }, -/**/ {{0XED521174, 0XBFA853A9} }, -/**/ {{0X2B27751F, 0X3FC40BD3} }, -/**/ {{0XCFA5C5F2, 0XBFB38A71} } }, -/**/ {{{0X00545BD9, 0X3FDFC002} }, -/**/ {{0XF536D960, 0X3FDD7920} }, -/**/ {{0XAAE99EA5, 0X3FE9AE0F} }, -/**/ {{0X38DD66F4, 0XBFD47275} }, -/**/ {{0XB5484F74, 0XBFA7147D} }, -/**/ {{0XF8EFC373, 0X3FC3DABA} }, -/**/ {{0X3EA6B864, 0XBFB3BCB9} } }, -/**/ {{{0XDA6F2AA8, 0X3FDFFFFB} }, -/**/ {{0XB420FAA0, 0X3FDDAC63} }, -/**/ {{0XED4D0CAB, 0X3FE9999A} }, -/**/ {{0XBFCC6072, 0XBFD47AE0} }, -/**/ {{0X25BF7A4A, 0XBFA5D87C} }, -/**/ {{0XF5999EE5, 0X3FC3A92B} }, -/**/ {{0XF7F09D08, 0XBFB3EC3B} } }, -/**/ {{{0XA65118C8, 0X3FE01FFF} }, -/**/ {{0X2BF70C00, 0X3FDDDF85} }, -/**/ {{0XECD72AE5, 0X3FE9851A} }, -/**/ {{0X8F5794C5, 0XBFD482D7} }, -/**/ {{0X2E4A020B, 0XBFA49F68} }, -/**/ {{0X25A156DA, 0X3FC37722} }, -/**/ {{0X19F58064, 0XBFB41903} } }, -/**/ {{{0X9C0B0556, 0X3FE04001} }, -/**/ {{0XFA2BA200, 0X3FDE127D} }, -/**/ {{0X08C17A55, 0X3FE97093} }, -/**/ {{0X957A7EFD, 0XBFD48A59} }, -/**/ {{0X2648F2BB, 0XBFA36976} }, -/**/ {{0X592569B1, 0X3FC344AB} }, -/**/ {{0X03752DDB, 0XBFB44318} } }, -/**/ {{{0XC24501DB, 0X3FE05FFF} }, -/**/ {{0XA495BCC0, 0X3FDE4547} }, -/**/ {{0X4F225B79, 0X3FE95C06} }, -/**/ {{0X2163F5B8, 0XBFD49167} }, -/**/ {{0X4B79B89F, 0XBFA236D3} }, -/**/ {{0XB530B7BE, 0X3FC311D4} }, -/**/ {{0X4D931476, 0XBFB46A84} } }, -/**/ {{{0X865125FC, 0X3FE07FFE} }, -/**/ {{0X2A5FAD60, 0X3FDE77E9} }, -/**/ {{0X5C13B0EA, 0X3FE94772} }, -/**/ {{0X6F33ABCA, 0XBFD49802} }, -/**/ {{0XDE947C6B, 0XBFA1075A} }, -/**/ {{0XD8D5E01B, 0X3FC2DE9D} }, -/**/ {{0XCA17CA60, 0XBFB48F51} } }, -/**/ {{{0X107EAC25, 0X3FE0A002} }, -/**/ {{0X08243180, 0X3FDEAA69} }, -/**/ {{0XF339824B, 0X3FE932D4} }, -/**/ {{0X7145F475, 0XBFD49E2D} }, -/**/ {{0X00571424, 0XBF9FB5D8} }, -/**/ {{0X85D1CF84, 0X3FC2AB06} }, -/**/ {{0X7DBBBABE, 0XBFB4B18A} } }, -/**/ {{{0X7376E5D4, 0X3FE0BFFF} }, -/**/ {{0XF79FF560, 0X3FDEDCB5} }, -/**/ {{0X8EE1B492, 0X3FE91E35} }, -/**/ {{0X49498453, 0XBFD4A3E7} }, -/**/ {{0XBE685C6F, 0XBF9D63E4} }, -/**/ {{0XC4B1F032, 0X3FC27726} }, -/**/ {{0X9E6ECC3A, 0XBFB4D138} } }, -/**/ {{{0X1715EE2E, 0X3FE0DFFE} }, -/**/ {{0X9BE1BB80, 0X3FDF0EDB} }, -/**/ {{0XD993BD60, 0X3FE9098F} }, -/**/ {{0X9B84E907, 0XBFD4A932} }, -/**/ {{0XE07DBA5E, 0XBF9B185A} }, -/**/ {{0XF2D7A804, 0X3FC242F8} }, -/**/ {{0X8DDAA340, 0XBFB4EE66} } }, -/**/ {{{0X7F3D776C, 0X3FE10001} }, -/**/ {{0X6119E100, 0X3FDF40DF} }, -/**/ {{0XFB44BCFB, 0X3FE8F4E1} }, -/**/ {{0X16E3467E, 0XBFD4AE11} }, -/**/ {{0XCF368422, 0XBF98D304} }, -/**/ {{0X736708AE, 0X3FC20E7D} }, -/**/ {{0XD7B3658D, 0XBFB5091E} } }, -/**/ {{{0XFD8C7B65, 0X3FE11FFE} }, -/**/ {{0X8FD21560, 0X3FDF72B0} }, -/**/ {{0X4770FB0A, 0X3FE8E033} }, -/**/ {{0X5C0F6783, 0XBFD4B282} }, -/**/ {{0X7FFE0364, 0XBF9694AC} }, -/**/ {{0XE529BF4C, 0X3FC1D9CB} }, -/**/ {{0X2C73E5F0, 0XBFB5216C} } }, -/**/ {{{0XAFA3EE71, 0X3FE14000} }, -/**/ {{0XE3324D60, 0X3FDFA45E} }, -/**/ {{0X9FF684DF, 0X3FE8CB7D} }, -/**/ {{0X17ADD34D, 0XBFD4B689} }, -/**/ {{0X67276E70, 0XBF945CA3} }, -/**/ {{0XA1FBF3B1, 0X3FC1A4D9} }, -/**/ {{0X5FBA2374, 0XBFB53759} } }, -/**/ {{{0X73336187, 0X3FE15FFF} }, -/**/ {{0X3DE48D00, 0X3FDFD5DF} }, -/**/ {{0X0CBE3546, 0X3FE8B6C6} }, -/**/ {{0X9B291BCB, 0XBFD4BA25} }, -/**/ {{0X5FB712CC, 0XBF922B6F} }, -/**/ {{0X55E28B0B, 0X3FC16FB8} }, -/**/ {{0X633F423C, 0XBFB54AF1} } }, -/**/ {{{0X6C447B82, 0X3FE17FFF} }, -/**/ {{0X0208ECC0, 0X3FE0039C} }, -/**/ {{0X48F15926, 0X3FE8A20A} }, -/**/ {{0XA5808AC3, 0XBFD4BD59} }, -/**/ {{0X5EEF6F2A, 0XBF9000CD} }, -/**/ {{0XEBE54AA7, 0X3FC13A66} }, -/**/ {{0X45420CE4, 0XBFB55C3F} } }, -/**/ {{{0XAE932B61, 0X3FE19FFF} }, -/**/ {{0XE0091BC0, 0X3FE01C33} }, -/**/ {{0X55664E00, 0X3FE88D4B} }, -/**/ {{0X579F5ABB, 0XBFD4C026} }, -/**/ {{0X8797C32A, 0XBF8BB9A6} }, -/**/ {{0X95D4F64E, 0X3FC104EC} }, -/**/ {{0X2BBC325E, 0XBFB56B4E} } }, -/**/ {{{0XBA12AE50, 0X3FE1BFFF} }, -/**/ {{0XD3ABA020, 0X3FE034B6} }, -/**/ {{0XEBDCCF04, 0X3FE87889} }, -/**/ {{0XE6D463C1, 0XBFD4C28C} }, -/**/ {{0XB36211FC, 0XBF877F1C} }, -/**/ {{0XB90B11E7, 0X3FC0CF4F} }, -/**/ {{0X52DCBE1A, 0XBFB57829} } }, -/**/ {{{0X4B459E41, 0X3FE1E001} }, -/**/ {{0X2DC05800, 0X3FE04D26} }, -/**/ {{0X51625B6A, 0X3FE863C5} }, -/**/ {{0XAFFDD399, 0XBFD4C48E} }, -/**/ {{0X603059CA, 0XBF8351CB} }, -/**/ {{0XDE65D0D9, 0X3FC09992} }, -/**/ {{0X087BB367, 0XBFB582DC} } }, -/**/ {{{0X32306F33, 0X3FE20000} }, -/**/ {{0XBAFB6CE0, 0X3FE0657E} }, -/**/ {{0XA1E2EEC3, 0X3FE84F00} }, -/**/ {{0XB79EC8C6, 0XBFD4C62C} }, -/**/ {{0XD95DE8D1, 0XBF7E6488} }, -/**/ {{0X661DF241, 0X3FC063C2} }, -/**/ {{0XAAA63BAD, 0XBFB58B71} } }, -/**/ {{{0XD30A486C, 0X3FE22000} }, -/**/ {{0XD2165080, 0X3FE07DC3} }, -/**/ {{0X66B3E5BF, 0X3FE83A39} }, -/**/ {{0X7DE04DEE, 0XBFD4C768} }, -/**/ {{0X800F052F, 0XBF763FF7} }, -/**/ {{0X28F35EDD, 0X3FC02DDC} }, -/**/ {{0XA351CF91, 0XBFB591F5} } }, -/**/ {{{0X215E03FC, 0X3FE23FFE} }, -/**/ {{0X9F380A00, 0X3FE095F1} }, -/**/ {{0X48BE5F3F, 0X3FE82573} }, -/**/ {{0X1B793F77, 0XBFD4C843} }, -/**/ {{0X625993B8, 0XBF6C6E63} }, -/**/ {{0X8C5E4B3B, 0X3FBFEFDB} }, -/**/ {{0X66FE9CA7, 0XBFB59673} } }, -/**/ {{{0X6833D65D, 0X3FE26000} }, -/**/ {{0X6496A8C0, 0X3FE0AE0E} }, -/**/ {{0X45B44AA3, 0X3FE810A9} }, -/**/ {{0X055B407A, 0XBFD4C8BE} }, -/**/ {{0XAE83F0A4, 0XBF5920A7} }, -/**/ {{0X860A6A5E, 0X3FBF83DC} }, -/**/ {{0X70D98EE7, 0XBFB598F6} } }, -/**/ {{{0XE82D4D50, 0X3FE28000} }, -/**/ {{0X095F5300, 0X3FE0C615} }, -/**/ {{0X1E9337B7, 0X3FE7FBE0} }, -/**/ {{0X573C6F6A, 0XBFD4C8DA} }, -/**/ {{0XC50F565D, 0X3F38B6C7} }, -/**/ {{0XC9C4B6CA, 0X3FBF17DB} }, -/**/ {{0X45D6DAE0, 0XBFB5998A} } }, -/**/ {{{0X203B6A0B, 0X3FE29FFF} }, -/**/ {{0X30852720, 0X3FE0DE05} }, -/**/ {{0X8520538D, 0X3FE7E718} }, -/**/ {{0X668C6963, 0XBFD4C899} }, -/**/ {{0XBECA8AB0, 0X3F6286EC} }, -/**/ {{0X9B6AC5BD, 0X3FBEABE4} }, -/**/ {{0X575A9684, 0XBFB5983A} } }, -/**/ {{{0XE91A9D93, 0X3FE2C001} }, -/**/ {{0XF7817A20, 0X3FE0F5E3} }, -/**/ {{0X63A45D97, 0X3FE7D24E} }, -/**/ {{0X5F83C46D, 0XBFD4C7FC} }, -/**/ {{0X5D9C800A, 0X3F70E199} }, -/**/ {{0X3721A8E0, 0X3FBE3FE9} }, -/**/ {{0X377DA840, 0XBFB59512} } }, -/**/ {{{0XC6FB4948, 0X3FE2DFFF} }, -/**/ {{0X4CE36040, 0X3FE10DAA} }, -/**/ {{0X3E39011F, 0X3FE7BD88} }, -/**/ {{0XB5EAE11F, 0XBFD4C704} }, -/**/ {{0X192C622B, 0X3F786398} }, -/**/ {{0XB62BA357, 0X3FBDD412} }, -/**/ {{0X5F0E020E, 0XBFB5901D} } }, -/**/ {{{0X39CB4EED, 0X3FE2FFFF} }, -/**/ {{0X0970AD60, 0X3FE1255D} }, -/**/ {{0X365B7A9B, 0X3FE7A8C2} }, -/**/ {{0X8925F532, 0XBFD4C5B3} }, -/**/ {{0X785E3070, 0X3F7FCB03} }, -/**/ {{0X0EEDF3B3, 0X3FBD6854} }, -/**/ {{0X479C252A, 0XBFB58967} } }, -/**/ {{{0X002E31CB, 0X3FE31FFE} }, -/**/ {{0X81FD3780, 0X3FE13CFA} }, -/**/ {{0X1BBE9667, 0X3FE793FE} }, -/**/ {{0X3046F4C7, 0XBFD4C40A} }, -/**/ {{0X8F5E6BF1, 0X3F838BAE} }, -/**/ {{0X83775C98, 0X3FBCFCBD} }, -/**/ {{0X62E887AB, 0XBFB580FB} } }, -/**/ {{{0XEDC7BFFD, 0X3FE34000} }, -/**/ {{0X44D05200, 0X3FE15486} }, -/**/ {{0X244A1DA5, 0X3FE77F39} }, -/**/ {{0X9FB764C1, 0XBFD4C209} }, -/**/ {{0X851B0BE5, 0X3F8724E2} }, -/**/ {{0X507C76E0, 0X3FBC9147} }, -/**/ {{0X19C7F0AB, 0XBFB576E5} } }, -/**/ {{{0XCE042830, 0X3FE36001} }, -/**/ {{0XC1656AE0, 0X3FE16BFB} }, -/**/ {{0XAD3B2B77, 0X3FE76A77} }, -/**/ {{0X74AAC296, 0XBFD4BFB3} }, -/**/ {{0X05B229C2, 0X3F8AB070} }, -/**/ {{0X87DCA54B, 0X3FBC260E} }, -/**/ {{0XC90DF763, 0XBFB56B2F} } }, -/**/ {{{0X89B8FC54, 0X3FE37FFE} }, -/**/ {{0X77D0BA80, 0X3FE18359} }, -/**/ {{0X660CAA3D, 0X3FE755BB} }, -/**/ {{0X308BB975, 0XBFD4BD09} }, -/**/ {{0XFE0A1240, 0X3F8E2E26} }, -/**/ {{0X18790F26, 0X3FBBBB22} }, -/**/ {{0XC094F3DA, 0XBFB55DE6} } }, -/**/ {{{0X9B4DA842, 0X3FE3A001} }, -/**/ {{0X100CD140, 0X3FE19AA7} }, -/**/ {{0XD801F889, 0X3FE740FD} }, -/**/ {{0X2C32C656, 0XBFD4BA0B} }, -/**/ {{0X8ECA44A2, 0X3F90CF99} }, -/**/ {{0XC9863443, 0X3FBB5066} }, -/**/ {{0X406672B5, 0XBFB54F15} } }, -/**/ {{{0XCE6B63E8, 0X3FE3C000} }, -/**/ {{0X1D0B0AE0, 0X3FE1B1DD} }, -/**/ {{0XF28670E6, 0X3FE72C45} }, -/**/ {{0X92422E2E, 0XBFD4B6BB} }, -/**/ {{0XA0D32146, 0X3F928141} }, -/**/ {{0X37452321, 0X3FBAE606} }, -/**/ {{0X77D91F56, 0XBFB53EC6} } }, -/**/ {{{0X114A2607, 0X3FE3DFFF} }, -/**/ {{0XC6FF6F20, 0X3FE1C8FD} }, -/**/ {{0X206847A7, 0X3FE71792} }, -/**/ {{0X669BD306, 0XBFD4B31B} }, -/**/ {{0X04FFD28A, 0X3F942C3A} }, -/**/ {{0XE7FC0825, 0X3FBA7BFD} }, -/**/ {{0X82F471BA, 0XBFB52D05} } }, -/**/ {{{0XC1DA9B7D, 0X3FE3FFFF} }, -/**/ {{0X7F2E8840, 0X3FE1E00B} }, -/**/ {{0X84371133, 0X3FE702E0} }, -/**/ {{0X8012FBE4, 0XBFD4AF2B} }, -/**/ {{0XBFC47F4B, 0X3F95D0B4} }, -/**/ {{0XD80AB6C5, 0X3FBA1249} }, -/**/ {{0X69A4108D, 0XBFB519DD} } }, -/**/ {{{0XE11D9C33, 0X3FE41FFE} }, -/**/ {{0X67C3EC20, 0X3FE1F703} }, -/**/ {{0X026A76A0, 0X3FE6EE34} }, -/**/ {{0X96514B12, 0XBFD4AAED} }, -/**/ {{0X07BA2905, 0X3F976E83} }, -/**/ {{0X261A1221, 0X3FB9A8FE} }, -/**/ {{0X1D552BA0, 0XBFB50559} } }, -/**/ {{{0XFA174676, 0X3FE43FFF} }, -/**/ {{0X0FAFF860, 0X3FE20DE8} }, -/**/ {{0X9EA6D162, 0X3FE6D98A} }, -/**/ {{0X6B927B3B, 0XBFD4A662} }, -/**/ {{0XF84ADBB0, 0X3F9905D8} }, -/**/ {{0XDD484DB5, 0X3FB94015} }, -/**/ {{0X783EEF44, 0XBFB4EF83} } }, -/**/ {{{0X0D457FA4, 0X3FE45FFF} }, -/**/ {{0X9F675300, 0X3FE224B6} }, -/**/ {{0X3A093351, 0X3FE6C4E7} }, -/**/ {{0XCBF2BFF8, 0XBFD4A18B} }, -/**/ {{0X84BB8C16, 0X3F9A968A} }, -/**/ {{0X93FBB975, 0X3FB8D7A4} }, -/**/ {{0X3B37E4FB, 0XBFB4D867} } }, -/**/ {{{0X8F910E57, 0X3FE47FFE} }, -/**/ {{0XDD92B840, 0X3FE23B70} }, -/**/ {{0X89B04359, 0X3FE6B048} }, -/**/ {{0X974B07FF, 0XBFD49C6A} }, -/**/ {{0X25F20251, 0X3F9C20BE} }, -/**/ {{0X82E9673D, 0X3FB86FA8} }, -/**/ {{0X0D12F550, 0XBFB4C00F} } }, -/**/ {{{0X7323FC6B, 0X3FE4A001} }, -/**/ {{0XE34E3420, 0X3FE25218} }, -/**/ {{0XF277FE27, 0X3FE69BAC} }, -/**/ {{0X7F856ABA, 0XBFD496FF} }, -/**/ {{0X9928150C, 0X3F9DA49E} }, -/**/ {{0X3EB66A26, 0X3FB8081E} }, -/**/ {{0X78AB06C5, 0XBFB4A685} } }, -/**/ {{{0XB1BF0500, 0X3FE4C000} }, -/**/ {{0XBD8B2C80, 0X3FE268A9} }, -/**/ {{0X42ABBD42, 0X3FE68719} }, -/**/ {{0XEC74E64A, 0XBFD4914C} }, -/**/ {{0XD0C3EEEC, 0X3F9F21DE} }, -/**/ {{0X5B30AA05, 0X3FB7A122} }, -/**/ {{0XEC53EF43, 0XBFB48BD4} } }, -/**/ {{{0X1D07207B, 0X3FE4E001} }, -/**/ {{0XDA64F7A0, 0X3FE27F26} }, -/**/ {{0XA7CFBEB2, 0X3FE6728A} }, -/**/ {{0X3FCBB247, 0XBFD48B53} }, -/**/ {{0XA7354A41, 0X3FA04C60} }, -/**/ {{0XEFF6F27A, 0X3FB73AAA} }, -/**/ {{0XB81A6BB2, 0XBFB47007} } }, -/**/ {{{0X5F36EB46, 0X3FE4FFFE} }, -/**/ {{0X35DDD180, 0X3FE2958D} }, -/**/ {{0X307B6AF3, 0X3FE65E04} }, -/**/ {{0X828BB6E6, 0XBFD48514} }, -/**/ {{0X48993ED9, 0X3FA1048E} }, -/**/ {{0X468D7C59, 0X3FB6D4CB} }, -/**/ {{0X0D484989, 0XBFB45328} } }, -/**/ {{{0X2AFDF759, 0X3FE52001} }, -/**/ {{0XEB1C3280, 0X3FE2ABE2} }, -/**/ {{0X8DC5DAAD, 0X3FE64980} }, -/**/ {{0X2C11E3B7, 0XBFD47E90} }, -/**/ {{0X88E1B343, 0X3FA1B9AE} }, -/**/ {{0XFF4501BF, 0X3FB66F6C} }, -/**/ {{0XFCD6B8DE, 0XBFB4353F} } }, -/**/ {{{0XDFDB2423, 0X3FE54001} }, -/**/ {{0XAB0402C0, 0X3FE2C222} }, -/**/ {{0XE7E657FB, 0X3FE63504} }, -/**/ {{0XEEE53FA9, 0XBFD477C8} }, -/**/ {{0X696CD845, 0X3FA26B9A} }, -/**/ {{0X6A3AA6EF, 0X3FB60AAD} }, -/**/ {{0X7704E1F4, 0XBFB41659} } }, -/**/ {{{0X72D2A74F, 0X3FE55FFE} }, -/**/ {{0X16BE7240, 0X3FE2D84B} }, -/**/ {{0XCE54AEDE, 0X3FE62092} }, -/**/ {{0X7B764156, 0XBFD470C0} }, -/**/ {{0X4D9ABEE7, 0X3FA31A4C} }, -/**/ {{0XA899A63D, 0X3FB5A697} }, -/**/ {{0X49FA7FB1, 0XBFB3F67E} } }, -/**/ {{{0XEE716C33, 0X3FE58000} }, -/**/ {{0X284F3FE0, 0X3FE2EE63} }, -/**/ {{0X181C5720, 0X3FE60C24} }, -/**/ {{0XC383B0C1, 0XBFD46975} }, -/**/ {{0XC40A1A5A, 0X3FA3C5FF} }, -/**/ {{0X0B7B3B72, 0X3FB54311} }, -/**/ {{0X21700401, 0XBFB3D5B8} } }, -/**/ {{{0X9825CD2A, 0X3FE59FFF} }, -/**/ {{0X2DEFCF40, 0X3FE30464} }, -/**/ {{0X3C14A317, 0X3FE5F7BF} }, -/**/ {{0X227A4CDE, 0XBFD461EC} }, -/**/ {{0X6DA8D837, 0X3FA46E85} }, -/**/ {{0X6162F4C8, 0X3FB4E03C} }, -/**/ {{0X857F5976, 0XBFB3B410} } }, -/**/ {{{0XFE2A42CD, 0X3FE5BFFD} }, -/**/ {{0XA5110DC0, 0X3FE31A50} }, -/**/ {{0X33CF1268, 0X3FE5E362} }, -/**/ {{0XF68B7DBC, 0XBFD45A23} }, -/**/ {{0XDE40F0E9, 0X3FA513F5} }, -/**/ {{0XDE05901E, 0X3FB47E12} }, -/**/ {{0XDA5CABB5, 0XBFB39190} } }, -/**/ {{{0X57330799, 0X3FE5E000} }, -/**/ {{0X75253480, 0X3FE3302B} }, -/**/ {{0X901DA45A, 0X3FE5CF0A} }, -/**/ {{0X552754CF, 0XBFD4521D} }, -/**/ {{0XBBF000BB, 0X3FA5B66B} }, -/**/ {{0XD2BAF7B2, 0X3FB41C8B} }, -/**/ {{0X5F53241A, 0XBFB36E42} } }, -/**/ {{{0X4D6055DA, 0X3FE60001} }, -/**/ {{0XFF2EDA60, 0X3FE345F0} }, -/**/ {{0XF2EA5900, 0X3FE5BABB} }, -/**/ {{0XB2008754, 0XBFD449DA} }, -/**/ {{0X18F56FBB, 0X3FA655D1} }, -/**/ {{0X89A0C1B2, 0X3FB3BBBB} }, -/**/ {{0X2E8D60FC, 0XBFB34A2E} } }, -/**/ {{{0X2C3809CB, 0X3FE62001} }, -/**/ {{0X812D5040, 0X3FE35BA1} }, -/**/ {{0X671E49E9, 0X3FE5A676} }, -/**/ {{0X230E6216, 0XBFD4415D} }, -/**/ {{0X6B05C7F7, 0X3FA6F22D} }, -/**/ {{0XCFE6B72B, 0X3FB35BA4} }, -/**/ {{0X3C3BFA3B, 0XBFB3255D} } }, -/**/ {{{0X87B47ECC, 0X3FE64000} }, -/**/ {{0X69715580, 0X3FE3713D} }, -/**/ {{0XC8FB0E69, 0X3FE59239} }, -/**/ {{0XA5BD1F6E, 0XBFD438A5} }, -/**/ {{0X7F9B13CF, 0X3FA78B89} }, -/**/ {{0X74F57C8F, 0X3FB2FC49} }, -/**/ {{0X566CAACA, 0XBFB2FFD8} } }, -/**/ {{{0XA746397F, 0X3FE66000} }, -/**/ {{0X9D968940, 0X3FE386C5} }, -/**/ {{0X83073C58, 0X3FE57E05} }, -/**/ {{0XFE3D0083, 0XBFD42FB4} }, -/**/ {{0X4B9E1EEB, 0X3FA821F1} }, -/**/ {{0X1952EE82, 0X3FB29DA9} }, -/**/ {{0X245866A8, 0XBFB2D9A8} } }, -/**/ {{{0XE4E3094B, 0X3FE68000} }, -/**/ {{0XB5FE3900, 0X3FE39C39} }, -/**/ {{0X36DD131E, 0X3FE569DA} }, -/**/ {{0X74778FE0, 0XBFD4268C} }, -/**/ {{0X9AB0310F, 0X3FA8B567} }, -/**/ {{0XF2E43205, 0X3FB23FC8} }, -/**/ {{0X26483573, 0XBFB2B2D5} } }, -/**/ {{{0XE2E37787, 0X3FE6A001} }, -/**/ {{0X27D52620, 0X3FE3B19A} }, -/**/ {{0XB5D865CD, 0X3FE555B7} }, -/**/ {{0XF1600CD3, 0XBFD41D2C} }, -/**/ {{0X4B79E859, 0X3FA945F5} }, -/**/ {{0X46A0B02D, 0X3FB1E2AA} }, -/**/ {{0XB508A35B, 0XBFB28B67} } }, -/**/ {{{0X0DF4BBFB, 0X3FE6BFFE} }, -/**/ {{0X46F2B6E0, 0X3FE3C6E3} }, -/**/ {{0XB658AFBE, 0X3FE541A1} }, -/**/ {{0X388DA137, 0XBFD41399} }, -/**/ {{0XE5B3C2BA, 0X3FA9D387} }, -/**/ {{0X173397F9, 0X3FB18660} }, -/**/ {{0X01DB4945, 0XBFB26368} } }, -/**/ {{{0XEA406CEA, 0X3FE6DFFF} }, -/**/ {{0X1BB3D400, 0X3FE3DC1C} }, -/**/ {{0XD33FFE8E, 0X3FE52D91} }, -/**/ {{0X36BCFFE9, 0XBFD409CF} }, -/**/ {{0X174405AF, 0X3FAA5E54} }, -/**/ {{0XDC041806, 0X3FB12ACE} }, -/**/ {{0X160D6557, 0XBFB23ADE} } }, -/**/ {{{0XED01EA65, 0X3FE70000} }, -/**/ {{0X54E51400, 0X3FE3F140} }, -/**/ {{0X5C8B9119, 0X3FE5198C} }, -/**/ {{0XF2EA4FF7, 0XBFD3FFD1} }, -/**/ {{0X308C81CD, 0X3FAAE643} }, -/**/ {{0X1960AAF7, 0X3FB0D00C} }, -/**/ {{0XD2F50D25, 0XBFB211D1} } }, -/**/ {{{0X00D515EB, 0X3FE72002} }, -/**/ {{0X983BB3E0, 0X3FE40650} }, -/**/ {{0XF2175C71, 0X3FE50590} }, -/**/ {{0X361BB15C, 0XBFD3F5A2} }, -/**/ {{0X9B536AFC, 0X3FAB6B5F} }, -/**/ {{0XA731624D, 0X3FB07617} }, -/**/ {{0XF1A8C054, 0XBFB1E84A} } }, -/**/ {{{0X1323DE6D, 0X3FE74001} }, -/**/ {{0X9483E720, 0X3FE41B4B} }, -/**/ {{0X1027BA01, 0X3FE4F1A1} }, -/**/ {{0XBB978C8F, 0XBFD3EB41} }, -/**/ {{0X7765626A, 0X3FABEDA7} }, -/**/ {{0X97F58C8A, 0X3FB01CF9} }, -/**/ {{0X03074348, 0XBFB1BE51} } }, -/**/ {{{0X25CAB4CA, 0X3FE75FFF} }, -/**/ {{0X0001D5C0, 0X3FE43032} }, -/**/ {{0X4573FB6C, 0X3FE4DDBC} }, -/**/ {{0X41F21D2A, 0XBFD3E0B1} }, -/**/ {{0XD1BDA00F, 0X3FAC6D25} }, -/**/ {{0X5935EE68, 0X3FAF8962} }, -/**/ {{0X6F8E0689, 0XBFB193EB} } }, -/**/ {{{0X90921F76, 0X3FE77FFE} }, -/**/ {{0X6CC6AF00, 0X3FE44505} }, -/**/ {{0X4CFFBDAE, 0X3FE4C9E1} }, -/**/ {{0X0B247EC4, 0XBFD3D5F1} }, -/**/ {{0X943F4516, 0X3FACE9EA} }, -/**/ {{0XF24A8AF1, 0X3FAEDA73} }, -/**/ {{0X776AAC42, 0XBFB16921} } }, -/**/ {{{0X47B2F83B, 0X3FE79FFE} }, -/**/ {{0X35C19F20, 0X3FE459C5} }, -/**/ {{0XFC8F20BD, 0X3FE4B610} }, -/**/ {{0X73DF2A0D, 0XBFD3CB02} }, -/**/ {{0X23C5D6DE, 0X3FAD63F8} }, -/**/ {{0X9C5116AB, 0X3FAE2D31} }, -/**/ {{0X326E2972, 0XBFB13DFA} } }, -/**/ {{{0X2F1E79A9, 0X3FE7BFFF} }, -/**/ {{0XF84DF5C0, 0X3FE46E71} }, -/**/ {{0XF586B1BD, 0X3FE4A24A} }, -/**/ {{0X2EF81E5B, 0XBFD3BFE6} }, -/**/ {{0X738896F0, 0X3FADDB58} }, -/**/ {{0X2515DE78, 0X3FAD819A} }, -/**/ {{0X9026FDD0, 0XBFB1127C} } }, -/**/ {{{0X973C8D05, 0X3FE7E001} }, -/**/ {{0XF0FB9580, 0X3FE4830B} }, -/**/ {{0X3466B08E, 0X3FE48E8F} }, -/**/ {{0X1C53A01A, 0XBFD3B49D} }, -/**/ {{0X25103EED, 0X3FAE5013} }, -/**/ {{0X5290F4AF, 0X3FACD7AF} }, -/**/ {{0X57EF003B, 0XBFB0E6AF} } }, -/**/ {{{0X69EFC092, 0X3FE7FFFF} }, -/**/ {{0X431C3800, 0X3FE4978F} }, -/**/ {{0XA3E1064A, 0X3FE47AE1} }, -/**/ {{0X666C50C4, 0XBFD3A92A} }, -/**/ {{0X4098A4BE, 0X3FAEC219} }, -/**/ {{0X2EEE57E0, 0X3FAC2F94} }, -/**/ {{0X290D5730, 0XBFB0BA99} } }, -/**/ {{{0XC52B5232, 0X3FE82001} }, -/**/ {{0XD2B83340, 0X3FE4AC01} }, -/**/ {{0XD31B7CF5, 0X3FE4673C} }, -/**/ {{0XC67D05F0, 0XBFD39D8B} }, -/**/ {{0X2A81B5D5, 0X3FAF3192} }, -/**/ {{0X8AA20E90, 0X3FAB891B} }, -/**/ {{0X7ADCEFD6, 0XBFB08E40} } }, -/**/ {{{0XBD4D4E3F, 0X3FE84000} }, -/**/ {{0X9B1DBC60, 0X3FE4C05E} }, -/**/ {{0XC8D629F7, 0X3FE453A5} }, -/**/ {{0X13E9EF47, 0XBFD391C5} }, -/**/ {{0X17383D6B, 0X3FAF9E69} }, -/**/ {{0X278E21B9, 0X3FAAE471} }, -/**/ {{0X9CF54D10, 0XBFB061AB} } }, -/**/ {{{0X8C869CBD, 0X3FE86001} }, -/**/ {{0XFD2285A0, 0X3FE4D4A8} }, -/**/ {{0X79B82471, 0X3FE44019} }, -/**/ {{0X5C3E2929, 0XBFD385D5} }, -/**/ {{0X7B2C8FF2, 0X3FB0045B} }, -/**/ {{0X39D7CA4F, 0X3FAA417C} }, -/**/ {{0XB767B7D4, 0XBFB034E0} } }, -/**/ {{{0XB5DB3710, 0X3FE87FFE} }, -/**/ {{0X8B93BCA0, 0X3FE4E8DD} }, -/**/ {{0X66C6E6BF, 0X3FE42C9B} }, -/**/ {{0XA32EE2A1, 0XBFD379BF} }, -/**/ {{0X6187FE0F, 0X3FB03838} }, -/**/ {{0X8B3A0B33, 0X3FA9A05A} }, -/**/ {{0XCAEE03A9, 0XBFB007E5} } }, -/**/ {{{0X863C77E3, 0X3FE8A000} }, -/**/ {{0X8FCD1E80, 0X3FE4FD01} }, -/**/ {{0XA8A8093F, 0X3FE41926} }, -/**/ {{0XB5EE344D, 0XBFD36D81} }, -/**/ {{0X2841F292, 0X3FB06ADC} }, -/**/ {{0X2484560B, 0X3FA900E4} }, -/**/ {{0X62792F0A, 0XBFAFB581} } }, -/**/ {{{0X0ED982AF, 0X3FE8BFFF} }, -/**/ {{0X16E28AC0, 0X3FE51110} }, -/**/ {{0X389112EE, 0X3FE405C0} }, -/**/ {{0X89D38DC7, 0XBFD3611F} }, -/**/ {{0XB450B9F7, 0X3FB09C3D} }, -/**/ {{0X312D0C4A, 0X3FA86342} }, -/**/ {{0X3A6CA012, 0XBFAF5AEE} } }, -/**/ {{{0X02C3AEAE, 0X3FE8E000} }, -/**/ {{0XC0AB0A40, 0X3FE5250C} }, -/**/ {{0XC65593C5, 0X3FE3F264} }, -/**/ {{0XD82BE900, 0XBFD35497} }, -/**/ {{0X68546D39, 0X3FB0CC69} }, -/**/ {{0XDB8499FD, 0X3FA7C759} }, -/**/ {{0X36A32337, 0XBFAF001D} } }, -/**/ {{{0XECBFA97B, 0X3FE90000} }, -/**/ {{0X0E8D4EE0, 0X3FE538F6} }, -/**/ {{0XF4119333, 0X3FE3DF15} }, -/**/ {{0X7D2149F4, 0XBFD347EC} }, -/**/ {{0XFA921D3C, 0X3FB0FB5E} }, -/**/ {{0X69693E89, 0X3FA72D38} }, -/**/ {{0X23A0F5F3, 0XBFAEA519} } }, -/**/ {{{0XD251C01C, 0X3FE91FFF} }, -/**/ {{0XD3F3BD20, 0X3FE54CCA} }, -/**/ {{0X1554DD15, 0X3FE3CBD5} }, -/**/ {{0X2BC94245, 0XBFD33B1F} }, -/**/ {{0X2FC4C3F6, 0X3FB1291F} }, -/**/ {{0X1B7A765C, 0X3FA694E8} }, -/**/ {{0X826E86F6, 0XBFAE49EC} } }, -/**/ {{{0XD90AF4E6, 0X3FE94001} }, -/**/ {{0X4D4EC640, 0X3FE5608E} }, -/**/ {{0X3445EF72, 0X3FE3B89F} }, -/**/ {{0XB7BBD79A, 0XBFD32E2E} }, -/**/ {{0XE401D071, 0X3FB155B4} }, -/**/ {{0X3A256F1C, 0X3FA5FE51} }, -/**/ {{0X890FF662, 0XBFADEEA1} } }, -/**/ {{{0X04FD6C17, 0X3FE96001} }, -/**/ {{0XD5673C20, 0X3FE5743C} }, -/**/ {{0X09EBC6E2, 0X3FE3A578} }, -/**/ {{0X6DA5039C, 0XBFD3211E} }, -/**/ {{0X4E62286B, 0X3FB1811B} }, -/**/ {{0X71BECE9D, 0X3FA56990} }, -/**/ {{0X23911641, 0XBFAD9342} } }, -/**/ {{{0X2D214B82, 0X3FE98000} }, -/**/ {{0X3B0D6120, 0X3FE587D8} }, -/**/ {{0X01EAAC3E, 0X3FE3925E} }, -/**/ {{0X08425504, 0XBFD313EE} }, -/**/ {{0X02BDB571, 0X3FB1AB5A} }, -/**/ {{0X9EBD70B8, 0X3FA4D698} }, -/**/ {{0XF482965A, 0XBFAD37D7} } }, -/**/ {{{0XEB980651, 0X3FE99FFD} }, -/**/ {{0XB16BA7A0, 0X3FE59B5F} }, -/**/ {{0X10B1AB7A, 0X3FE37F52} }, -/**/ {{0XF993D676, 0XBFD3069E} }, -/**/ {{0XCDED25A8, 0X3FB1D472} }, -/**/ {{0X2D0ABD9A, 0X3FA44570} }, -/**/ {{0X56221AA1, 0XBFACDC6C} } }, -/**/ {{{0XE5504053, 0X3FE9BFFF} }, -/**/ {{0XB55DE6A0, 0X3FE5AED6} }, -/**/ {{0XFA91C51E, 0X3FE36C50} }, -/**/ {{0XBE311E56, 0XBFD2F92F} }, -/**/ {{0X5BE3AF05, 0X3FB1FC70} }, -/**/ {{0XACD5CDC7, 0X3FA3B5FD} }, -/**/ {{0X5ADBB9B8, 0XBFAC8108} } }, -/**/ {{{0X6E60A234, 0X3FE9E001} }, -/**/ {{0X79ACD480, 0X3FE5C23A} }, -/**/ {{0XA5FAB2EA, 0X3FE3595D} }, -/**/ {{0X1DDECEEA, 0XBFD2EBA3} }, -/**/ {{0X35736518, 0X3FB22350} }, -/**/ {{0X22F9FD28, 0X3FA32856} }, -/**/ {{0XCE8B2259, 0XBFAC25B4} } }, -/**/ {{{0XB685741B, 0X3FE9FFFF} }, -/**/ {{0X5AD40460, 0X3FE5D589} }, -/**/ {{0XD832B8D3, 0X3FE34679} }, -/**/ {{0X230EDA41, 0XBFD2DDFB} }, -/**/ {{0XB23C0BA2, 0X3FB24912} }, -/**/ {{0X4C4E86DA, 0X3FA29C85} }, -/**/ {{0X37002A55, 0XBFABCA7A} } }, -/**/ {{{0X9D59B943, 0X3FEA2001} }, -/**/ {{0X8C187EA0, 0X3FE5E8C7} }, -/**/ {{0X9EDE2183, 0X3FE333A1} }, -/**/ {{0XB0043779, 0XBFD2D035} }, -/**/ {{0X7AB9110C, 0X3FB26DC3} }, -/**/ {{0X959CFC0E, 0X3FA2126C} }, -/**/ {{0XD556233E, 0XBFAB6F60} } }, -/**/ {{{0XBE9E153F, 0X3FEA3FFF} }, -/**/ {{0XA9C08AE0, 0X3FE5FBF0} }, -/**/ {{0X6F7861AA, 0X3FE320D9} }, -/**/ {{0XC2200F18, 0XBFD2C256} }, -/**/ {{0XA6795293, 0X3FB2915D} }, -/**/ {{0X256A8FDE, 0X3FA18A2B} }, -/**/ {{0XA67A4E89, 0XBFAB1470} } }, -/**/ {{{0X7A23A1CE, 0X3FEA5FFE} }, -/**/ {{0X63200600, 0X3FE60F07} }, -/**/ {{0XD13D395E, 0X3FE30E1E} }, -/**/ {{0X44403932, 0XBFD2B45D} }, -/**/ {{0XC967F013, 0X3FB2B3E9} }, -/**/ {{0X35D002B8, 0X3FA103AD} }, -/**/ {{0X6496A8F1, 0XBFAAB9B1} } }, -/**/ {{{0X57F250B8, 0X3FEA8001} }, -/**/ {{0XDD6453A0, 0X3FE6220D} }, -/**/ {{0XCFFFCC1E, 0X3FE2FB6F} }, -/**/ {{0X6F8D8291, 0XBFD2A648} }, -/**/ {{0X03654CC3, 0X3FB2D56F} }, -/**/ {{0X4BB6E7A6, 0X3FA07EE3} }, -/**/ {{0X87992F03, 0XBFAA5F2A} } }, -/**/ {{{0XDD839D49, 0X3FEAA000} }, -/**/ {{0XB412C9A0, 0X3FE634FF} }, -/**/ {{0XE2D59E01, 0X3FE2E8D0} }, -/**/ {{0X5467CFDD, 0XBFD2981C} }, -/**/ {{0XFF1FADB5, 0X3FB2F5E8} }, -/**/ {{0XA3BA803C, 0X3F9FF7D6} }, -/**/ {{0X46AF8DB7, 0XBFAA04E3} } }, -/**/ {{{0X770DF220, 0X3FEAC000} }, -/**/ {{0XFEF70020, 0X3FE647DE} }, -/**/ {{0X220AFF7F, 0X3FE2D640} }, -/**/ {{0X36F9E74F, 0XBFD289D8} }, -/**/ {{0XE509140A, 0X3FB3155E} }, -/**/ {{0X61AB0B7F, 0X3F9EF56B} }, -/**/ {{0X98CE391F, 0XBFA9AAE2} } }, -/**/ {{{0X125BBE48, 0X3FEAE001} }, -/**/ {{0X57A24D20, 0X3FE65AAC} }, -/**/ {{0X1BFB3559, 0X3FE2C3BD} }, -/**/ {{0X6DDE55DD, 0XBFD27B7C} }, -/**/ {{0X15C4C270, 0X3FB333D5} }, -/**/ {{0X9BAC4ECF, 0X3F9DF67A} }, -/**/ {{0X363A972B, 0XBFA9512F} } }, -/**/ {{{0X7C321839, 0X3FEAFFFE} }, -/**/ {{0X569B83C0, 0X3FE66D65} }, -/**/ {{0X53FBF8D9, 0X3FE2B14A} }, -/**/ {{0X9CFA03CE, 0XBFD26D0B} }, -/**/ {{0X2CAA2E0C, 0X3FB3514B} }, -/**/ {{0X4597BE9A, 0X3F9CFB22} }, -/**/ {{0X99110022, 0XBFA8F7CF} } }, -/**/ {{{0X75486924, 0X3FEB1FFE} }, -/**/ {{0X68CEFB40, 0X3FE6800D} }, -/**/ {{0X8E6AA814, 0X3FE29EE4} }, -/**/ {{0XE8AFA7EB, 0XBFD25E83} }, -/**/ {{0XFB0E8AC8, 0X3FB36DC9} }, -/**/ {{0XAD5D66CA, 0X3F9C0331} }, -/**/ {{0XFEDB1E8B, 0XBFA89EC9} } }, -/**/ {{{0X5FB8DEB8, 0X3FEB4001} }, -/**/ {{0XD137C500, 0X3FE692A4} }, -/**/ {{0XABFF668E, 0X3FE28C8B} }, -/**/ {{0XD8E71E0A, 0XBFD24FE5} }, -/**/ {{0X1297317A, 0X3FB38955} }, -/**/ {{0X1D844655, 0X3F9B0EA3} }, -/**/ {{0X6914067D, 0XBFA84624} } }, -/**/ {{{0X386C27B9, 0X3FEB6000} }, -/**/ {{0X8CDF6FC0, 0X3FE6A527} }, -/**/ {{0XC5758DB8, 0X3FE27A43} }, -/**/ {{0X59CADCE0, 0XBFD24135} }, -/**/ {{0XEE34AE91, 0X3FB3A3E9} }, -/**/ {{0X1C5FFF05, 0X3F9A1DA8} }, -/**/ {{0X9EC8AAC6, 0XBFA7EDE4} } }, -/**/ {{{0XD1EFDDB3, 0X3FEB8000} }, -/**/ {{0X0ACCB660, 0X3FE6B799} }, -/**/ {{0X9983AAB2, 0X3FE26809} }, -/**/ {{0X76047E08, 0XBFD23270} }, -/**/ {{0XF132139B, 0X3FB3BD90} }, -/**/ {{0X58DEB3E1, 0X3F993010} }, -/**/ {{0X2D194CE9, 0XBFA79610} } }, -/**/ {{{0X42CC4047, 0X3FEB9FFE} }, -/**/ {{0X86445E60, 0X3FE6C9F6} }, -/**/ {{0X069F871F, 0X3FE255E0} }, -/**/ {{0X25461639, 0XBFD2239A} }, -/**/ {{0XA926C127, 0X3FB3D649} }, -/**/ {{0XC5A21F70, 0X3F9845FB} }, -/**/ {{0X68E20BE6, 0XBFA73EAC} } }, -/**/ {{{0X951AEAAD, 0X3FEBC001} }, -/**/ {{0X3C4E45A0, 0X3FE6DC45} }, -/**/ {{0XFF6573B0, 0X3FE243C1} }, -/**/ {{0XE38FA7E7, 0XBFD214AE} }, -/**/ {{0X5EA1330F, 0X3FB3EE1E} }, -/**/ {{0X2BCCE6DF, 0X3F975F24} }, -/**/ {{0X6F3902C5, 0XBFA6E7BE} } }, -/**/ {{{0X6616FE11, 0X3FEBDFFE} }, -/**/ {{0X27106FE0, 0X3FE6EE7E} }, -/**/ {{0X97B587F0, 0X3FE231B6} }, -/**/ {{0X240FEF32, 0XBFD205B5} }, -/**/ {{0X44EB818C, 0X3FB40509} }, -/**/ {{0X108160F9, 0X3F967BDE} }, -/**/ {{0X271D18AD, 0XBFA6914B} } }, -/**/ {{{0X54511C72, 0X3FEBFFFF} }, -/**/ {{0X643BBB40, 0X3FE700A7} }, -/**/ {{0XE1823C8B, 0X3FE21FB7} }, -/**/ {{0X9A854F7A, 0XBFD1F6A8} }, -/**/ {{0X71F04837, 0X3FB41B15} }, -/**/ {{0XBBD10F7C, 0X3F959BD8} }, -/**/ {{0X41F03711, 0XBFA63B57} } }, -/**/ {{{0XC537593E, 0X3FEC2000} }, -/**/ {{0XF36D6400, 0X3FE712BE} }, -/**/ {{0XF754B2D5, 0X3FE20DC7} }, -/**/ {{0X9D24DBED, 0XBFD1E78B} }, -/**/ {{0X94F485E0, 0X3FB43043} }, -/**/ {{0X122A6884, 0X3F94BF29} }, -/**/ {{0X3D2AA4E9, 0XBFA5E5E7} } }, -/**/ {{{0XDDD35719, 0X3FEC4000} }, -/**/ {{0XD7FA3000, 0X3FE724C3} }, -/**/ {{0XF2A8B1BF, 0X3FE1FBE7} }, -/**/ {{0XB25DDDF6, 0XBFD1D85F} }, -/**/ {{0XD2E3B20F, 0X3FB44495} }, -/**/ {{0X7FCC1B30, 0X3F93E5D6} }, -/**/ {{0X62D0D00F, 0XBFA590FF} } }, -/**/ {{{0X402375B6, 0X3FEC6000} }, -/**/ {{0X7DFF3720, 0X3FE736B6} }, -/**/ {{0X86C92387, 0X3FE1EA17} }, -/**/ {{0X31DDFC58, 0XBFD1C925} }, -/**/ {{0XF8B6CBC2, 0X3FB4580F} }, -/**/ {{0X00CE998E, 0X3F930FD7} }, -/**/ {{0XCB299E5F, 0XBFA53CA3} } }, -/**/ {{{0X19904FE4, 0X3FEC7FFF} }, -/**/ {{0X0F395860, 0X3FE74897} }, -/**/ {{0XA825BA33, 0X3FE1D856} }, -/**/ {{0XA75E0FC5, 0XBFD1B9DC} }, -/**/ {{0X79F8FD7D, 0X3FB46AB5} }, -/**/ {{0XA5A90AFE, 0X3F923D23} }, -/**/ {{0X5D2F574B, 0XBFA4E8D8} } }, -/**/ {{{0XF9E2409D, 0X3FEC9FFE} }, -/**/ {{0X79E7F1C0, 0X3FE75A66} }, -/**/ {{0X8740D2E9, 0X3FE1C6A4} }, -/**/ {{0XF198392C, 0XBFD1AA85} }, -/**/ {{0X808C583A, 0X3FB47C8A} }, -/**/ {{0X857F2526, 0X3F916DAC} }, -/**/ {{0XD0477576, 0XBFA495A0} } }, -/**/ {{{0XE038EF72, 0X3FECC001} }, -/**/ {{0XE6815140, 0X3FE76C25} }, -/**/ {{0X19BDADF8, 0X3FE1B500} }, -/**/ {{0XB4A469AE, 0XBFD19B20} }, -/**/ {{0X42387EA2, 0X3FB48D93} }, -/**/ {{0X7305BAF5, 0X3F90A15F} }, -/**/ {{0XACAE4E17, 0XBFA44300} } }, -/**/ {{{0XEB72037F, 0X3FECDFFE} }, -/**/ {{0X7A7A4AA0, 0X3FE77DD0} }, -/**/ {{0X4F1F6702, 0X3FE1A36E} }, -/**/ {{0XD0992CF8, 0XBFD18BB1} }, -/**/ {{0X5AA4990D, 0X3FB49DCE} }, -/**/ {{0X63759665, 0X3F8FB0DD} }, -/**/ {{0X4D2F0C0F, 0XBFA3F0FB} } }, -/**/ {{{0XEA4839ED, 0X3FECFFFF} }, -/**/ {{0XB17088C0, 0X3FE78F6B} }, -/**/ {{0XCF32122F, 0X3FE191E9} }, -/**/ {{0X220400AC, 0XBFD17C35} }, -/**/ {{0X0A159641, 0X3FB4AD44} }, -/**/ {{0X80894CA9, 0X3F8E252C} }, -/**/ {{0XDF89C265, 0XBFA39F93} } }, -/**/ {{{0XEC3EC8B2, 0X3FED1FFD} }, -/**/ {{0XC8C6C880, 0X3FE7A0F3} }, -/**/ {{0X729F01D6, 0X3FE18076} }, -/**/ {{0X98515540, 0XBFD16CAE} }, -/**/ {{0X1B0933FF, 0X3FB4BBF4} }, -/**/ {{0XE09A60CD, 0X3F8C9FF5} }, -/**/ {{0X662A5704, 0XBFA34ECD} } }, -/**/ {{{0X7084EDD4, 0X3FED3FFF} }, -/**/ {{0X5F02F220, 0X3FE7B26C} }, -/**/ {{0XB9973206, 0X3FE16F10} }, -/**/ {{0X9E1E0A54, 0XBFD15D1B} }, -/**/ {{0XAC2C9A30, 0X3FB4C9E4} }, -/**/ {{0XEFCE76CC, 0X3F8B20DD} }, -/**/ {{0XB888BC37, 0XBFA2FEAA} } }, -/**/ {{{0X8D728E7C, 0X3FED5FFE} }, -/**/ {{0X488D7E80, 0X3FE7C3D2} }, -/**/ {{0XE622A5A7, 0X3FE15DBB} }, -/**/ {{0XA305CEB2, 0XBFD14D7F} }, -/**/ {{0X417BF1C7, 0X3FB4D716} }, -/**/ {{0XE19FE239, 0X3F89A81E} }, -/**/ {{0X84DDAD07, 0XBFA2AF2E} } }, -/**/ {{{0X70AA3B03, 0X3FED7FFF} }, -/**/ {{0XDB239580, 0X3FE7D527} }, -/**/ {{0XBE4FEA01, 0X3FE14C75} }, -/**/ {{0X2AD706AA, 0XBFD13DD9} }, -/**/ {{0XB49D32AA, 0X3FB4E38D} }, -/**/ {{0X37DF2B6D, 0X3F88357A} }, -/**/ {{0X507CD77B, 0XBFA2605B} } }, -/**/ {{{0X1434FBA3, 0X3FED9FFF} }, -/**/ {{0X82C8A720, 0X3FE7E66B} }, -/**/ {{0XED9B7FED, 0X3FE13B3F} }, -/**/ {{0X3AC9D646, 0XBFD12E2A} }, -/**/ {{0XE7B01CF5, 0X3FB4EF4C} }, -/**/ {{0XD25FD52D, 0X3F86C905} }, -/**/ {{0X798666EF, 0XBFA21233} } }, -/**/ {{{0XA8C8DE8C, 0X3FEDBFFE} }, -/**/ {{0XF4A0A520, 0X3FE7F79D} }, -/**/ {{0XD7FC2119, 0X3FE12A19} }, -/**/ {{0XC6BE19DF, 0XBFD11E72} }, -/**/ {{0X634E1B91, 0X3FB4FA57} }, -/**/ {{0X47F96DF5, 0X3F8562A6} }, -/**/ {{0X373AF599, 0XBFA1C4B9} } }, -/**/ {{{0X26573DF5, 0X3FEDE000} }, -/**/ {{0X4DBCB960, 0X3FE808C0} }, -/**/ {{0X7903E4B9, 0X3FE11902} }, -/**/ {{0X5CDFED06, 0XBFD10EB2} }, -/**/ {{0XCCA681FA, 0X3FB504B0} }, -/**/ {{0X6F3CDE09, 0X3F840238} }, -/**/ {{0X9BA8FA6A, 0XBFA177EE} } }, -/**/ {{{0X35009B66, 0X3FEDFFFE} }, -/**/ {{0XC2CB5340, 0X3FE819CF} }, -/**/ {{0XB1C942B5, 0X3FE107FC} }, -/**/ {{0X230D7D92, 0XBFD0FEEC} }, -/**/ {{0X75C5B4F1, 0X3FB50E5A} }, -/**/ {{0XE3C139D8, 0X3F82A7E8} }, -/**/ {{0X93FA642B, 0XBFA12BD5} } }, -/**/ {{{0X492D4C68, 0X3FEE2000} }, -/**/ {{0X5CCB8680, 0X3FE82AD0} }, -/**/ {{0X928E55DF, 0X3FE0F704} }, -/**/ {{0XEE0B0721, 0XBFD0EF1C} }, -/**/ {{0X937BFB74, 0X3FB51759} }, -/**/ {{0X2BC9FDDB, 0X3F815359} }, -/**/ {{0XEA1D1824, 0XBFA0E06F} } }, -/**/ {{{0X9412BB65, 0X3FEE4000} }, -/**/ {{0X14001A60, 0X3FE83BBF} }, -/**/ {{0X37F485DA, 0X3FE0E61D} }, -/**/ {{0X1B2BD37D, 0XBFD0DF48} }, -/**/ {{0X64024D14, 0X3FB51FAF} }, -/**/ {{0X9B849698, 0X3F8004B9} }, -/**/ {{0X450A2434, 0XBFA095BF} } }, -/**/ {{{0X4758EF2F, 0X3FEE5FFF} }, -/**/ {{0X1531C180, 0X3FE84C9C} }, -/**/ {{0X8B7FECE7, 0X3FE0D546} }, -/**/ {{0X105BFE1E, 0XBFD0CF6E} }, -/**/ {{0XF9C5E03A, 0X3FB5275E} }, -/**/ {{0X17AA1137, 0X3F7D77F2} }, -/**/ {{0X2A6891E1, 0XBFA04BC5} } }, -/**/ {{{0X380F819F, 0X3FEE8000} }, -/**/ {{0X74CCC060, 0X3FE85D69} }, -/**/ {{0X8F1DA5B5, 0X3FE0C47E} }, -/**/ {{0X62AD700F, 0XBFD0BF8D} }, -/**/ {{0X1F3FBC2B, 0X3FB52E6C} }, -/**/ {{0XEE24AD7D, 0X3F7AF1C3} }, -/**/ {{0XFECE26C9, 0XBFA00282} } }, -/**/ {{{0XA6D8CB7B, 0X3FEEA000} }, -/**/ {{0XD00E3A60, 0X3FE86E25} }, -/**/ {{0XBA314D62, 0X3FE0B3C6} }, -/**/ {{0XE7CB2D84, 0XBFD0AFA7} }, -/**/ {{0X08E9071F, 0X3FB534D9} }, -/**/ {{0X4CE5E5C9, 0X3F787704} }, -/**/ {{0X0EB7C9D5, 0XBF9F73F4} } }, -/**/ {{{0X5A13BA60, 0X3FEEC000} }, -/**/ {{0X19B163E0, 0X3FE87ED1} }, -/**/ {{0X2EBB7AD7, 0X3FE0A31F} }, -/**/ {{0X33A3FCE1, 0XBFD09FBE} }, -/**/ {{0X89D9AF5D, 0X3FB53AA8} }, -/**/ {{0XF7F7040B, 0X3F760799} }, -/**/ {{0XD3F0B3FB, 0XBF9EE456} } }, -/**/ {{{0X58F8DD18, 0X3FEEDFFF} }, -/**/ {{0X6681CA80, 0X3FE88F6B} }, -/**/ {{0XEC4360B3, 0X3FE09287} }, -/**/ {{0XB7CE07E5, 0XBFD08FD0} }, -/**/ {{0X7BDEDD3F, 0X3FB53FDD} }, -/**/ {{0X70C52E66, 0X3F73A366} }, -/**/ {{0X5DCA7315, 0XBF9E5630} } }, -/**/ {{{0XBE033400, 0X3FEEFFFF} }, -/**/ {{0XDD4D7960, 0X3FE89FF5} }, -/**/ {{0XDFFE15BD, 0X3FE081FF} }, -/**/ {{0XDAE56C0F, 0XBFD07FDE} }, -/**/ {{0XF84D6F5D, 0X3FB5447A} }, -/**/ {{0X7982941E, 0X3F714A24} }, -/**/ {{0X81E68835, 0XBF9DC982} } }, -/**/ {{{0XE6B5125D, 0X3FEF2001} }, -/**/ {{0XBBE88160, 0X3FE8B070} }, -/**/ {{0XDF7122E2, 0X3FE07186} }, -/**/ {{0XDE905325, 0XBFD06FE8} }, -/**/ {{0XB5DEEC7A, 0X3FB54883} }, -/**/ {{0XB4A186D5, 0X3F6DF762} }, -/**/ {{0XDE20F495, 0XBF9D3E4E} } }, -/**/ {{{0XF770E0DB, 0X3FEF3FFD} }, -/**/ {{0X09E96380, 0X3FE8C0D8} }, -/**/ {{0XF5A576A9, 0X3FE06120} }, -/**/ {{0X1D2912FF, 0XBFD05FF3} }, -/**/ {{0X8CD1001F, 0X3FB54BF9} }, -/**/ {{0X6E90DC16, 0X3F6970FC} }, -/**/ {{0XD8EB587E, 0XBF9CB496} } }, -/**/ {{{0X4E16DA33, 0X3FEF5FFE} }, -/**/ {{0X29BCCDC0, 0X3FE8D131} }, -/**/ {{0XD33BA4E9, 0X3FE050C8} }, -/**/ {{0XD74C83D2, 0XBFD04FF8} }, -/**/ {{0X592BB252, 0X3FB54EE0} }, -/**/ {{0X7193EEB5, 0X3F64FF61} }, -/**/ {{0XA459AC86, 0XBF9C2C5B} } }, -/**/ {{{0X4576FF2E, 0X3FEF8000} }, -/**/ {{0XCCE443A0, 0X3FE8E17A} }, -/**/ {{0XD8A97B6C, 0X3FE0407F} }, -/**/ {{0XC91B3E55, 0XBFD03FFB} }, -/**/ {{0X5F3357F7, 0X3FB5513A} }, -/**/ {{0X14C92B53, 0X3F60A2BA} }, -/**/ {{0X3E70DF71, 0XBF9BA59E} } }, -/**/ {{{0X39B6A330, 0X3FEF9FFF} }, -/**/ {{0XA7F515A0, 0X3FE8F1B2} }, -/**/ {{0X63064158, 0X3FE03048} }, -/**/ {{0XACBAADA8, 0XBFD02FFE} }, -/**/ {{0XF27448C0, 0X3FB55309} }, -/**/ {{0X4850006B, 0X3F58B6D6} }, -/**/ {{0X742323DF, 0XBF9B205F} } }, -/**/ {{{0XAA76C0B9, 0X3FEFC001} }, -/**/ {{0X15D66D80, 0X3FE901DC} }, -/**/ {{0X28D9B4AA, 0X3FE0201F} }, -/**/ {{0XA98D4C38, 0XBFD01FFE} }, -/**/ {{0X089780F8, 0X3FB55452} }, -/**/ {{0X7F35C5BB, 0X3F5050B5} }, -/**/ {{0XE19247AF, 0XBF9A9C9F} } }, -/**/ {{{0X39A592CA, 0X3FEFDFFE} }, -/**/ {{0X6D88A780, 0X3FE911F2} }, -/**/ {{0XE40C6538, 0X3FE01008} }, -/**/ {{0XD31688DE, 0XBFD01000} }, -/**/ {{0XE32F1816, 0X3FB55514} }, -/**/ {{0X4E1628D2, 0X3F402A15} }, -/**/ {{0XF4FAF5A0, 0XBF9A1A5F} } }, -/**/ {{{0X8E92D1B0, 0X3FEFF801} }, -/**/ {{0X9BB4BF00, 0X3FE91DFB} }, -/**/ {{0XB884C5A9, 0X3FE003FF} }, -/**/ {{0X3876A954, 0XBFD003FF} }, -/**/ {{0X5539DDFB, 0X3FB55551} }, -/**/ {{0X7B95E6C2, 0X3F2007E7} }, -/**/ {{0X18A3BA58, 0XBF99B9A7} } }, - }; - - static const number - hij[241][16] = { /* x0,hij for (1/16,1) */ -/**/ {{{0x00000000, 0x3fb04000} }, -/**/ {{0x1c06693d, 0x3fb03a6d} }, -/**/ {{0xd4e7f128, 0xbc428a02} }, -/**/ {{0xe92592ae, 0x3fefdf1f} }, -/**/ {{0xb5490162, 0x3c88bfc0} }, -/**/ {{0x8f7e4151, 0xbfb01ead} }, -/**/ {{0x0b64d205, 0xbc5395e8} }, -/**/ {{0x433dd49b, 0xbfd4d29f} }, -/**/ {{0x4aa42633, 0xbc75b19d} }, -/**/ {{0xce35961d, 0x3fafda41} }, -/**/ {{0x425d7696, 0x3c4e6a5f} }, -/**/ {{0x6c1bb5e2, 0x3fc814dd} }, -/**/ {{0x2b33739f, 0xbfaf4cb7} }, -/**/ {{0xc267d8ec, 0xbfc048b2} }, -/**/ {{0xe8ababc6, 0x3fae9649} }, -/**/ {{0xfe802692, 0x3fb78293} } }, -/**/ {{{0x00000000, 0x3fb10000} }, -/**/ {{0xa71d52a7, 0x3fb0f99e} }, -/**/ {{0xeec3624f, 0xbc22069f} }, -/**/ {{0x9a49d2a9, 0x3fefdc08} }, -/**/ {{0x68b2ce25, 0x3c7780f7} }, -/**/ {{0x9da73e1d, 0xbfb0d9de} }, -/**/ {{0xa1a487bf, 0x3c4ebf46} }, -/**/ {{0xd13ea108, 0xbfd4c669} }, -/**/ {{0xebb4528c, 0x3c7354bc} }, -/**/ {{0x789374c1, 0x3fb0a137} }, -/**/ {{0xc3f2c5c2, 0xbc56c223} }, -/**/ {{0x79c60cda, 0x3fc7f0e7} }, -/**/ {{0xcdcc7b81, 0xbfb05062} }, -/**/ {{0xc5266783, 0xbfc019e4} }, -/**/ {{0xf2540289, 0x3fafd0b2} }, -/**/ {{0xf6d3cd8a, 0x3fb71107} } }, -/**/ {{{0x00000000, 0x3fb20000} }, -/**/ {{0xbf082d59, 0x3fb1f86d} }, -/**/ {{0x7732ef81, 0xbc4095dc} }, -/**/ {{0x01722b81, 0x3fefd7b3} }, -/**/ {{0x8a212e02, 0xbc5e618c} }, -/**/ {{0xee4e9cfa, 0xbfb1d2c5} }, -/**/ {{0x29abece0, 0x3c426273} }, -/**/ {{0x37eb7f46, 0xbfd4b551} }, -/**/ {{0x01d8bf12, 0x3c73b360} }, -/**/ {{0x6adb6a7c, 0x3fb18fa7} }, -/**/ {{0x398999ad, 0xbc5c00d8} }, -/**/ {{0xf4a7cff3, 0x3fc7bea5} }, -/**/ {{0x61f84829, 0xbfb13008} }, -/**/ {{0xa8e135a1, 0xbfbfb14f} }, -/**/ {{0x4324f177, 0x3fb0b532} }, -/**/ {{0x3498dd9d, 0x3fb6734a} } }, -/**/ {{{0x00000000, 0x3fb30000} }, -/**/ {{0x318a4a9a, 0x3fb2f719} }, -/**/ {{0x79b9801f, 0x3c03fd17} }, -/**/ {{0x48e238fe, 0x3fefd31f} }, -/**/ {{0xd8c45327, 0xbc876a7a} }, -/**/ {{0x852096e2, 0xbfb2cada} }, -/**/ {{0x11efd787, 0x3c460860} }, -/**/ {{0x2e476a39, 0xbfd4a34b} }, -/**/ {{0xeb11ee51, 0x3c7254f2} }, -/**/ {{0xc54ae225, 0x3fb27c13} }, -/**/ {{0x4ae66f0c, 0x3c513096} }, -/**/ {{0xef0d59d0, 0x3fc789ca} }, -/**/ {{0x6d9aaa8c, 0xbfb20c06} }, -/**/ {{0x846ba912, 0xbfbf2885} }, -/**/ {{0xc697ef5e, 0x3fb17c5f} }, -/**/ {{0xcad31e6e, 0x3fb5ce93} } }, -/**/ {{{0x00000000, 0x3fb40000} }, -/**/ {{0x0e7c559d, 0x3fb3f59f} }, -/**/ {{0x285df847, 0x3c5ac4ce} }, -/**/ {{0xa6ab93e9, 0x3fefce4d} }, -/**/ {{0x18a97736, 0xbc6be46b} }, -/**/ {{0x4d22b635, 0xbfb3c211} }, -/**/ {{0x6950679f, 0x3c42033c} }, -/**/ {{0xc4d74033, 0xbfd49059} }, -/**/ {{0xd7e376aa, 0x3c57dd7c} }, -/**/ {{0xc0896a7c, 0x3fb36662} }, -/**/ {{0xd79232cf, 0xbc36cf6a} }, -/**/ {{0xa13a97a2, 0x3fc75261} }, -/**/ {{0x5fdd1509, 0xbfb2e431} }, -/**/ {{0x6e52db32, 0xbfbe9999} }, -/**/ {{0xb0a71e9f, 0x3fb23da4} }, -/**/ {{0xe3bc8178, 0x3fb52335} } }, -/**/ {{{0x00000000, 0x3fb50000} }, -/**/ {{0x677292fb, 0x3fb4f3fd} }, -/**/ {{0x6264979e, 0x3c4008d3} }, -/**/ {{0x53a1ee0d, 0x3fefc93e} }, -/**/ {{0x20fd2bdf, 0xbc64421a} }, -/**/ {{0x4aba88e3, 0xbfb4b85f} }, -/**/ {{0x3c9d1e89, 0x3c54f184} }, -/**/ {{0x25ae4668, 0xbfd47c7f} }, -/**/ {{0x816630d1, 0xbc7d7581} }, -/**/ {{0x07f85056, 0x3fb44e7b} }, -/**/ {{0x910bdf4f, 0x3c56d63c} }, -/**/ {{0xc439029c, 0x3fc71875} }, -/**/ {{0xf2bcfa10, 0xbfb3b85e} }, -/**/ {{0x9707b205, 0xbfbe04bb} }, -/**/ {{0x95e3e0cc, 0x3fb2f8c6} }, -/**/ {{0x8093431b, 0x3fb47184} } }, -/**/ {{{0x00000000, 0x3fb60000} }, -/**/ {{0x4fd2d7b2, 0x3fb5f232} }, -/**/ {{0x4401318e, 0x3c58a8da} }, -/**/ {{0x8b549418, 0x3fefc3f1} }, -/**/ {{0x836f8130, 0x3c34d896} }, -/**/ {{0x9cdd92e7, 0xbfb5adb9} }, -/**/ {{0xeb397cc3, 0x3c4d4161} }, -/**/ {{0x93f8f1dc, 0xbfd467bd} }, -/**/ {{0xffc760ad, 0xbc609d7b} }, -/**/ {{0xbea6b2fe, 0x3fb53443} }, -/**/ {{0x4b24f5db, 0x3c5eb03c} }, -/**/ {{0x8de3d005, 0x3fc6dc13} }, -/**/ {{0x37d2d99d, 0xbfb48866} }, -/**/ {{0xf6663fcb, 0xbfbd6a1d} }, -/**/ {{0x0adff464, 0x3fb3ad8e} }, -/**/ {{0x4159c223, 0x3fb3b9d6} } }, -/**/ {{{0x00000000, 0x3fb70000} }, -/**/ {{0xdcea4b0d, 0x3fb6f03b} }, -/**/ {{0x512fa17d, 0xbc33f00e} }, -/**/ {{0x8c07a436, 0x3fefbe67} }, -/**/ {{0x46250d6f, 0xbc84baaa} }, -/**/ {{0x7e3ba4c7, 0xbfb6a215} }, -/**/ {{0x54503f8d, 0xbc3504e7} }, -/**/ {{0x6b82d03a, 0xbfd45217} }, -/**/ {{0xbebdd1db, 0x3c7d1f0d} }, -/**/ {{0x841d5604, 0x3fb617a4} }, -/**/ {{0x6681c436, 0xbc47168b} }, -/**/ {{0xaccec6ce, 0x3fc69d47} }, -/**/ {{0xa4715800, 0xbfb5541f} }, -/**/ {{0x335a1c1b, 0xbfbcc9f4} }, -/**/ {{0xbac0061f, 0x3fb45bc6} }, -/**/ {{0x2b3853b6, 0x3fb2fc84} } }, -/**/ {{{0x00000000, 0x3fb80000} }, -/**/ {{0x2602f10f, 0x3fb7ee18} }, -/**/ {{0x4c0c3d98, 0xbc5cfb65} }, -/**/ {{0x96acfacc, 0x3fefb8a0} }, -/**/ {{0x18495af3, 0xbc82962e} }, -/**/ {{0x46635c89, 0xbfb79568} }, -/**/ {{0xa6bfd498, 0x3c5ac468} }, -/**/ {{0x2037b997, 0xbfd43b8f} }, -/**/ {{0xe2f12373, 0xbc72ad53} }, -/**/ {{0x7900c4ee, 0x3fb6f885} }, -/**/ {{0x0aef1f9d, 0x3c53145d} }, -/**/ {{0x4409ba0e, 0x3fc65c1f} }, -/**/ {{0x1d176e0c, 0xbfb61b65} }, -/**/ {{0x8ad65152, 0xbfbc2473} }, -/**/ {{0x7bc246c1, 0x3fb5033f} }, -/**/ {{0x6db30b46, 0x3fb239e9} } }, -/**/ {{{0x00000000, 0x3fb90000} }, -/**/ {{0x4478fb28, 0x3fb8ebc5} }, -/**/ {{0x0cad24cc, 0x3c473288} }, -/**/ {{0xeedcd6d7, 0x3fefb29c} }, -/**/ {{0x23ea50f0, 0x3c8efa9e} }, -/**/ {{0x6ae09982, 0xbfb887a7} }, -/**/ {{0x53801511, 0x3c5b2275} }, -/**/ {{0x3da0757c, 0xbfd42427} }, -/**/ {{0x311c7ac8, 0xbc7199e5} }, -/**/ {{0x4388717b, 0x3fb7d6cf} }, -/**/ {{0x3dd070b4, 0xbc5c4eb2} }, -/**/ {{0xe6c2b5f3, 0x3fc618a7} }, -/**/ {{0x00313569, 0xbfb6de12} }, -/**/ {{0xb6316619, 0xbfbb79d2} }, -/**/ {{0x61af5c21, 0x3fb5a3ca} }, -/**/ {{0x26e60289, 0x3fb17263} } }, -/**/ {{{0x00000000, 0x3fba0000} }, -/**/ {{0x53cfdcf1, 0x3fb9e941} }, -/**/ {{0x1d69c47e, 0x3c5a332e} }, -/**/ {{0xdace3776, 0x3fefac5c} }, -/**/ {{0x1ad91ab5, 0xbc8c9a78} }, -/**/ {{0x8054ad75, 0xbfb978c8} }, -/**/ {{0x8ed66c17, 0xbc5e35b8} }, -/**/ {{0x665afed1, 0xbfd40be2} }, -/**/ {{0x08ef10fb, 0x3c62eeef} }, -/**/ {{0x13c989d2, 0x3fb8b26b} }, -/**/ {{0xbfeab3ba, 0x3c329f11} }, -/**/ {{0x93c8f97c, 0x3fc5d2ef} }, -/**/ {{0x30234881, 0xbfb79c03} }, -/**/ {{0xd0f650c8, 0xbfbaca49} }, -/**/ {{0xce2dcccc, 0x3fb63d3c} }, -/**/ {{0x26fb0af2, 0x3fb0a650} } }, -/**/ {{{0x00000000, 0x3fbb0000} }, -/**/ {{0x71c722b8, 0x3fbae68a} }, -/**/ {{0x6910b9db, 0x3c4c014e} }, -/**/ {{0xa34ef42b, 0x3fefa5e0} }, -/**/ {{0xeb56d5b9, 0xbc836583} }, -/**/ {{0x3b881779, 0xbfba68c1} }, -/**/ {{0x13a09314, 0xbc473a0d} }, -/**/ {{0x538e939c, 0xbfd3f2c3} }, -/**/ {{0xee53e648, 0xbc68ed49} }, -/**/ {{0xa7d45973, 0x3fb98b42} }, -/**/ {{0x461ca7c4, 0xbc523943} }, -/**/ {{0xb0f2e2bb, 0x3fc58b04} }, -/**/ {{0x1c9d23dc, 0xbfb85517} }, -/**/ {{0x3e3b5a66, 0xbfba1612} }, -/**/ {{0x7ef1d0b9, 0x3fb6cf6f} }, -/**/ {{0x6617b315, 0x3fafac21} } }, -/**/ {{{0x00000000, 0x3fbc0000} }, -/**/ {{0xbe6f07c3, 0x3fbbe39e} }, -/**/ {{0x29a05987, 0x3c5f7b8f} }, -/**/ {{0x93bb9192, 0x3fef9f28} }, -/**/ {{0x7cd1bdab, 0x3c78260b} }, -/**/ {{0x72759741, 0xbfbb5787} }, -/**/ {{0xa6767247, 0x3c52f93f} }, -/**/ {{0xd45bbe91, 0xbfd3d8cc} }, -/**/ {{0x2edc0762, 0x3c664839} }, -/**/ {{0x4fa31d26, 0x3fba6140} }, -/**/ {{0x97891510, 0x3c400647} }, -/**/ {{0x0668fd66, 0x3fc540f6} }, -/**/ {{0xcb2f6e8f, 0xbfb9092d} }, -/**/ {{0x8d902073, 0xbfb95d66} }, -/**/ {{0x99c53d16, 0x3fb75a3e} }, -/**/ {{0x8f475e61, 0x3fae040c} } }, -/**/ {{{0x00000000, 0x3fbd0000} }, -/**/ {{0x5c3cca32, 0x3fbce07c} }, -/**/ {{0x425918a7, 0x3c4138e6} }, -/**/ {{0xf9f6d421, 0x3fef9834} }, -/**/ {{0x8c22a239, 0x3c6f3089} }, -/**/ {{0x1d4e69a5, 0xbfbc4511} }, -/**/ {{0xd2083ce8, 0x3c254c0f} }, -/**/ {{0xcd488978, 0xbfd3be01} }, -/**/ {{0x6362ec0f, 0x3c5612db} }, -/**/ {{0xf0d94873, 0x3fbb344e} }, -/**/ {{0xfdf7db72, 0xbc182beb} }, -/**/ {{0xb9d86c04, 0x3fc4f4d2} }, -/**/ {{0xdf238807, 0xbfb9b828} }, -/**/ {{0x5f93ffd6, 0xbfb8a082} }, -/**/ {{0xb6650b0c, 0x3fb7dd89} }, -/**/ {{0xb62676ef, 0x3fac5526} } }, -/**/ {{{0x00000000, 0x3fbe0000} }, -/**/ {{0x701eba6e, 0x3fbddd21} }, -/**/ {{0xcd76fe58, 0x3c594eff} }, -/**/ {{0x266112ba, 0x3fef9106} }, -/**/ {{0x6b7e18b1, 0x3c74c302} }, -/**/ {{0x5777816c, 0xbfbd3154} }, -/**/ {{0x1f9dbddd, 0x3c5dc7e4} }, -/**/ {{0x37a90881, 0xbfd3a265} }, -/**/ {{0xeb7ba840, 0xbc75bd61} }, -/**/ {{0x0a52514b, 0x3fbc045a} }, -/**/ {{0xcff49a99, 0xbc35ca88} }, -/**/ {{0x498eeb56, 0x3fc4a6aa} }, -/**/ {{0xa09232cf, 0xbfba61eb} }, -/**/ {{0x4a464027, 0xbfb7dfa2} }, -/**/ {{0xe633c053, 0x3fb85933} }, -/**/ {{0x3f920107, 0x3faaa036} } }, -/**/ {{{0x00000000, 0x3fbf0000} }, -/**/ {{0x2190043b, 0x3fbed98c} }, -/**/ {{0x592c7b13, 0xbc23a598} }, -/**/ {{0x6bcf4ad8, 0x3fef899c} }, -/**/ {{0x912c09b0, 0x3c55fd73} }, -/**/ {{0x607f91a0, 0xbfbe1c47} }, -/**/ {{0x5b5db022, 0x3c576677} }, -/**/ {{0x21046f5f, 0xbfd385fa} }, -/**/ {{0x4487f4b8, 0x3c7f01c3} }, -/**/ {{0xb77f2d51, 0x3fbcd14d} }, -/**/ {{0x30a2ccfe, 0x3c57a86d} }, -/**/ {{0x8782b530, 0x3fc4568c} }, -/**/ {{0x02b7ad2d, 0xbfbb065b} }, -/**/ {{0xbd215555, 0xbfb71b03} }, -/**/ {{0xb9c1c1de, 0x3fb8cd23} }, -/**/ {{0x8dbfa69b, 0x3fa8e602} } }, -/**/ {{{0x00000000, 0x3fc00000} }, -/**/ {{0x9aac2f6e, 0x3fbfd5ba} }, -/**/ {{0x86760c17, 0xbc4cd376} }, -/**/ {{0x1f81f820, 0x3fef81f8} }, -/**/ {{0x1f81f820, 0xbc8f81f8} }, -/**/ {{0x9d0dc11b, 0xbfbf05e0} }, -/**/ {{0x1d821725, 0xbc35a199} }, -/**/ {{0xaa76e1d7, 0xbfd368c3} }, -/**/ {{0xc796f8cd, 0xbc672d4c} }, -/**/ {{0xb391c2e3, 0x3fbd9b16} }, -/**/ {{0x8086c51d, 0x3c58051b} }, -/**/ {{0x94488c86, 0x3fc40489} }, -/**/ {{0xa98401c8, 0xbfbba55d} }, -/**/ {{0xe5127e64, 0xbfb652e4} }, -/**/ {{0x442e53ae, 0x3fb93943} }, -/**/ {{0x86286f75, 0x3fa72753} } }, -/**/ {{{0x00000000, 0x3fc08000} }, -/**/ {{0x84212b3e, 0x3fc068d5} }, -/**/ {{0x83019bfd, 0xbc69e2d2} }, -/**/ {{0x991bb133, 0x3fef7a19} }, -/**/ {{0x66627723, 0x3c7a956a} }, -/**/ {{0x97c8e137, 0xbfbfee16} }, -/**/ {{0x66dbe7af, 0x3c4d9399} }, -/**/ {{0x0810323a, 0xbfd34ac5} }, -/**/ {{0x6bc6c512, 0x3c6a1a57} }, -/**/ {{0x5c75a6f9, 0x3fbe61a2} }, -/**/ {{0xd75c8f85, 0xbc492b99} }, -/**/ {{0xd9fa3f20, 0x3fc3b0b1} }, -/**/ {{0xee66d309, 0xbfbc3edb} }, -/**/ {{0x905eeb33, 0xbfb58784} }, -/**/ {{0x1c65bb14, 0x3fb99d80} }, -/**/ {{0x18a09884, 0x3fa564f1} } }, -/**/ {{{0x00000000, 0x3fc10000} }, -/**/ {{0xccf40882, 0x3fc0e6ad} }, -/**/ {{0x1bb98d0d, 0xbc6d71a3} }, -/**/ {{0x32978bad, 0x3fef7201} }, -/**/ {{0x599381e9, 0x3c816476} }, -/**/ {{0x011b81fd, 0xbfc06a70} }, -/**/ {{0x9ba697ca, 0xbc422f5d} }, -/**/ {{0x802fc0a5, 0xbfd32c01} }, -/**/ {{0x08a20868, 0x3c7d8e47} }, -/**/ {{0xb59597fe, 0x3fbf24de} }, -/**/ {{0x410d31eb, 0xbc43288f} }, -/**/ {{0x070feb24, 0x3fc35b16} }, -/**/ {{0xe4565b78, 0xbfbcd2bf} }, -/**/ {{0x128768c6, 0xbfb4b922} }, -/**/ {{0x5c42a097, 0x3fb9f9cb} }, -/**/ {{0xc7f97f2e, 0x3fa39fa2} } }, -/**/ {{{0x00000000, 0x3fc18000} }, -/**/ {{0x41060850, 0x3fc16465} }, -/**/ {{0x8ae7ea92, 0x3c66bcee} }, -/**/ {{0x483f492b, 0x3fef69af} }, -/**/ {{0x57db963e, 0xbc6e3280} }, -/**/ {{0xdacaa844, 0xbfc0dd19} }, -/**/ {{0xad7fc21e, 0xbc6133c7} }, -/**/ {{0x6addaea8, 0xbfd30c7c} }, -/**/ {{0x89161c76, 0xbc71443d} }, -/**/ {{0x6a6d3cd2, 0x3fbfe4ba} }, -/**/ {{0x423ee67a, 0x3c50d4b8} }, -/**/ {{0x092e569a, 0x3fc303c7} }, -/**/ {{0x5b11d3b6, 0xbfbd60f5} }, -/**/ {{0x283b5c55, 0xbfb3e7fd} }, -/**/ {{0x9d9a6ab7, 0x3fba4e19} }, -/**/ {{0x3487cc29, 0x3fa1d82f} } }, -/**/ {{{0x00000000, 0x3fc20000} }, -/**/ {{0xfb043727, 0x3fc1e1fa} }, -/**/ {{0x14dacf8c, 0xbc4b4859} }, -/**/ {{0x38a14f5e, 0x3fef6124} }, -/**/ {{0x001f6124, 0x3c798e9e} }, -/**/ {{0x59d3fb7c, 0xbfc14f04} }, -/**/ {{0x4cc99cb2, 0x3c531efa} }, -/**/ {{0x31219b34, 0xbfd2ec39} }, -/**/ {{0x6e004611, 0xbc618697} }, -/**/ {{0x68736312, 0x3fc05092} }, -/**/ {{0x8a06e4b5, 0x3c67aad4} }, -/**/ {{0x07eca5ec, 0x3fc2aad6} }, -/**/ {{0xe19fe31c, 0xbfbde969} }, -/**/ {{0xdb6b9127, 0xbfb31455} }, -/**/ {{0xf53dd9ee, 0x3fba9a62} }, -/**/ {{0xa8e4ede0, 0x3fa00f5b} } }, -/**/ {{{0x00000000, 0x3fc28000} }, -/**/ {{0x171a535c, 0x3fc25f6e} }, -/**/ {{0xbde1a310, 0x3c67c6d7} }, -/**/ {{0x64866d22, 0x3fef5860} }, -/**/ {{0xd1f6326c, 0x3c88c6ff} }, -/**/ {{0x13c11396, 0xbfc1c02b} }, -/**/ {{0xffeb1a0f, 0xbc51b469} }, -/**/ {{0x4c571b0f, 0xbfd2cb3b} }, -/**/ {{0x2fb0b163, 0x3c6e4f76} }, -/**/ {{0xf5c213ab, 0x3fc0ad06} }, -/**/ {{0xabea9e66, 0x3c625bf2} }, -/**/ {{0x5f93bbb2, 0x3fc25054} }, -/**/ {{0xc80a32c8, 0xbfbe6c0c} }, -/**/ {{0x678d0d1e, 0xbfb23e6c} }, -/**/ {{0xebf8ae4b, 0x3fbadea2} }, -/**/ {{0x527f133b, 0x3f9c8bd7} } }, -/**/ {{{0x00000000, 0x3fc30000} }, -/**/ {{0xb2fba1ff, 0x3fc2dcbd} }, -/**/ {{0x05561534, 0x3c58f287} }, -/**/ {{0x2ee76e94, 0x3fef4f64} }, -/**/ {{0xc6da5865, 0x3c80ec89} }, -/**/ {{0xb322f867, 0xbfc23089} }, -/**/ {{0x5fcd0d6f, 0x3c4c2b54} }, -/**/ {{0x45802261, 0xbfd2a986} }, -/**/ {{0x5ae78b8a, 0xbc79a132} }, -/**/ {{0x35a9d974, 0x3fc107b3} }, -/**/ {{0xb725e335, 0x3c5ef22d} }, -/**/ {{0x9bd98832, 0x3fc1f453} }, -/**/ {{0x2057aad4, 0xbfbee8cf} }, -/**/ {{0x1e1bc3a1, 0xbfb16681} }, -/**/ {{0x759c8f58, 0x3fbb1ad8} }, -/**/ {{0x0b15b4aa, 0x3f98f941} } }, -/**/ {{{0x00000000, 0x3fc38000} }, -/**/ {{0xedeb99a4, 0x3fc359e8} }, -/**/ {{0x4e4604c6, 0xbc6a5fd7} }, -/**/ {{0xfce28238, 0x3fef462f} }, -/**/ {{0xd90595d1, 0x3c83dc01} }, -/**/ {{0xf7edfa6d, 0xbfc2a01b} }, -/**/ {{0x4a3b5c9a, 0xbc6b11fb} }, -/**/ {{0xb4959402, 0xbfd2871d} }, -/**/ {{0x2fcf7ea3, 0xbc4a3702} }, -/**/ {{0xd8d7fe8c, 0x3fc1608f} }, -/**/ {{0xf8f1d41c, 0x3c61ac60} }, -/**/ {{0x729a89ca, 0x3fc196e5} }, -/**/ {{0xbec74f31, 0xbfbf5fa3} }, -/**/ {{0x4b6c9767, 0xbfb08cd4} }, -/**/ {{0xe624ce15, 0x3fbb4f05} }, -/**/ {{0xddb2020c, 0x3f956871} } }, -/**/ {{{0x00000000, 0x3fc40000} }, -/**/ {{0xe8c6626c, 0x3fc3d6ee} }, -/**/ {{0x0ce9281b, 0x3c661a3b} }, -/**/ {{0x35b0713c, 0x3fef3cc4} }, -/**/ {{0xe69ea094, 0x3c81d0a7} }, -/**/ {{0xb7d169f0, 0xbfc30edd} }, -/**/ {{0xae999b97, 0x3c6b3394} }, -/**/ {{0x3fd62b3c, 0xbfd26405} }, -/**/ {{0xc0736df9, 0x3c73e339} }, -/**/ {{0xe8e57ee3, 0x3fc1b795} }, -/**/ {{0x0a42c7f6, 0xbc6130dc} }, -/**/ {{0xbe93b8e5, 0x3fc1381b} }, -/**/ {{0x394e1bf7, 0xbfbfd07f} }, -/**/ {{0x37bb5315, 0xbfaf634c} }, -/**/ {{0xe501e57b, 0x3fbb7b30} }, -/**/ {{0x20503792, 0x3f91dae1} } }, -/**/ {{{0x00000000, 0x3fc48000} }, -/**/ {{0xc6092a9e, 0x3fc453ce} }, -/**/ {{0xb3a5a78b, 0x3c61f653} }, -/**/ {{0x4299ace8, 0x3fef3321} }, -/**/ {{0x3a742b30, 0xbc87414c} }, -/**/ {{0xde8b2323, 0xbfc37cca} }, -/**/ {{0x7b50aedf, 0x3c649378} }, -/**/ {{0x9b13f4d0, 0xbfd24040} }, -/**/ {{0xb7dc85c0, 0x3c7e271f} }, -/**/ {{0xc9024068, 0x3fc20cbe} }, -/**/ {{0x88ef3da7, 0x3c50921f} }, -/**/ {{0x7a1f1270, 0x3fc0d808} }, -/**/ {{0xf32d5436, 0xbfc01dab} }, -/**/ {{0x02e6f09c, 0xbfadaa6d} }, -/**/ {{0x5e9cd766, 0x3fbb9f62} }, -/**/ {{0xab964c04, 0x3f8ca3fe} } }, -/**/ {{{0x00000000, 0x3fc50000} }, -/**/ {{0xa9da4f17, 0x3fc4d087} }, -/**/ {{0xf1adf158, 0x3c61f323} }, -/**/ {{0x8eeb3352, 0x3fef2947} }, -/**/ {{0x8799a164, 0x3c871eb0} }, -/**/ {{0x6e36e75c, 0xbfc3e9df} }, -/**/ {{0x4e37666f, 0x3c541555} }, -/**/ {{0x87008bd0, 0xbfd21bd3} }, -/**/ {{0xc24ff75f, 0xbc609e14} }, -/**/ {{0x36860504, 0x3fc26004} }, -/**/ {{0x1ebc8c40, 0xbc58f8ca} }, -/**/ {{0xb9f4ead3, 0x3fc076bd} }, -/**/ {{0xed70ddd5, 0xbfc05012} }, -/**/ {{0x33e194b1, 0xbfabef8a} }, -/**/ {{0x7423a91f, 0x3fbbbba6} }, -/**/ {{0xdd99da12, 0x3f859e6a} } }, -/**/ {{{0x00000000, 0x3fc58000} }, -/**/ {{0xba11570a, 0x3fc54d18} }, -/**/ {{0xf2884073, 0x3c618282} }, -/**/ {{0x87eb4d7d, 0x3fef1f37} }, -/**/ {{0xedda13e6, 0x3c8476f0} }, -/**/ {{0x7f997c7c, 0xbfc45617} }, -/**/ {{0x6423ceda, 0xbc46bf5b} }, -/**/ {{0xd0784ec7, 0xbfd1f6c1} }, -/**/ {{0xd106a8e0, 0xbc74ec12} }, -/**/ {{0x4967338d, 0x3fc2b160} }, -/**/ {{0x61339c25, 0x3c5309c0} }, -/**/ {{0xa7f42962, 0x3fc0144d} }, -/**/ {{0x73dbaeec, 0xbfc07f71} }, -/**/ {{0x2aeda9a4, 0xbfaa3322} }, -/**/ {{0x69b152b3, 0x3fbbd00c} }, -/**/ {{0x4c782821, 0x3f7d4f90} } }, -/**/ {{{0x00000000, 0x3fc60000} }, -/**/ {{0x1e3ec26a, 0x3fc5c981} }, -/**/ {{0x2c010f3d, 0xbc5054ab} }, -/**/ {{0x9cce28eb, 0x3fef14f1} }, -/**/ {{0x2708cd6e, 0xbc8b7c25} }, -/**/ {{0x42678d07, 0xbfc4c16f} }, -/**/ {{0xc1560017, 0x3c5f55ba} }, -/**/ {{0x4fccc153, 0xbfd1d10f} }, -/**/ {{0x1bcc361d, 0x3c529588} }, -/**/ {{0x74979f8c, 0x3fc300cd} }, -/**/ {{0x0bc1e891, 0xbc6b1da5} }, -/**/ {{0xfbe70208, 0x3fbf6194} }, -/**/ {{0x4b1c266f, 0xbfc0abc5} }, -/**/ {{0x3b74e858, 0xbfa875b2} }, -/**/ {{0x92e46f11, 0x3fbbdca6} }, -/**/ {{0x9de94aef, 0x3f6f0b17} } }, -/**/ {{{0x00000000, 0x3fc68000} }, -/**/ {{0xffb3aa74, 0x3fc645bf} }, -/**/ {{0x677c2cb4, 0xbc3f536b} }, -/**/ {{0x3eaa4ed6, 0x3fef0a76} }, -/**/ {{0x0b06c761, 0x3c888c52} }, -/**/ {{0xfd884489, 0xbfc52be2} }, -/**/ {{0xbe5c728a, 0x3c67ec59} }, -/**/ {{0xe80e4e0a, 0xbfd1aabf} }, -/**/ {{0xe90c909e, 0xbc71320e} }, -/**/ {{0x864781ca, 0x3fc34e46} }, -/**/ {{0x126138ee, 0x3c42fcb3} }, -/**/ {{0x013b5d4f, 0x3fbe988d} }, -/**/ {{0x122409a2, 0xbfc0d50d} }, -/**/ {{0x7bb562c1, 0xbfa6b7b6} }, -/**/ {{0x3df8dee8, 0x3fbbe18a} }, -/**/ {{0x8809e1ef, 0x3f3e4009} } }, -/**/ {{{0x00000000, 0x3fc70000} }, -/**/ {{0x898933d9, 0x3fc6c1d4} }, -/**/ {{0x7603c427, 0xbc52954a} }, -/**/ {{0xe06cfb34, 0x3feeffc5} }, -/**/ {{0x379877c2, 0xbc85c037} }, -/**/ {{0x0f53a52c, 0xbfc5956f} }, -/**/ {{0xe566376c, 0x3c4d46a2} }, -/**/ {{0x86559c11, 0xbfd183d7} }, -/**/ {{0x64734c7f, 0x3c7d2520} }, -/**/ {{0xa80eddd5, 0x3fc399c6} }, -/**/ {{0x40fbef6f, 0x3c616c26} }, -/**/ {{0xf4b571a7, 0x3fbdcda7} }, -/**/ {{0x3fd42996, 0xbfc0fb48} }, -/**/ {{0x95c85118, 0xbfa4f9a9} }, -/**/ {{0x9d795df4, 0x3fbbdecf} }, -/**/ {{0xb85bf719, 0xbf672003} } }, -/**/ {{{0x00000000, 0x3fc78000} }, -/**/ {{0xe8a7d202, 0x3fc73dbd} }, -/**/ {{0x6d4a665d, 0xbc55ad0f} }, -/**/ {{0xf6ce5590, 0x3feef4e0} }, -/**/ {{0x556900ef, 0xbc833df6} }, -/**/ {{0xedcc9488, 0xbfc5fe0f} }, -/**/ {{0xd2b9e35c, 0x3c5078de} }, -/**/ {{0x210cab36, 0xbfd15c5a} }, -/**/ {{0xf55e532a, 0x3c67fa93} }, -/**/ {{0x5efd9a41, 0x3fc3e349} }, -/**/ {{0xc8573a12, 0xbc6cf709} }, -/**/ {{0x6c903aef, 0x3fbd010a} }, -/**/ {{0x20571328, 0xbfc11e77} }, -/**/ {{0x9a1875dd, 0xbfa33c04} }, -/**/ {{0xb09ec0ce, 0x3fbbd491} }, -/**/ {{0x35537a65, 0xbf78d197} } }, -/**/ {{{0x00000000, 0x3fc80000} }, -/**/ {{0x4bce5b02, 0x3fc7b97b} }, -/**/ {{0xb4f881ca, 0x3c5347b0} }, -/**/ {{0xf8458e02, 0x3feee9c7} }, -/**/ {{0x7ba71fe1, 0xbc616380} }, -/**/ {{0x26d69eeb, 0xbfc665c2} }, -/**/ {{0xfdb5eea8, 0xbc572a33} }, -/**/ {{0xb737e8f3, 0xbfd1344b} }, -/**/ {{0x62badf41, 0xbc757b70} }, -/**/ {{0x8b929b0b, 0x3fc42aca} }, -/**/ {{0x7a8b7d91, 0x3c43cdb5} }, -/**/ {{0xf683981c, 0x3fbc32d8} }, -/**/ {{0xd22d5ecc, 0xbfc13e9a} }, -/**/ {{0xd35c8c33, 0xbfa17f3e} }, -/**/ {{0x2a73307e, 0x3fbbc2ee} }, -/**/ {{0x2bddc834, 0xbf82ee04} } }, -/**/ {{{0x00000000, 0x3fc88000} }, -/**/ {{0xe398ebc8, 0x3fc8350b} }, -/**/ {{0x32b9c90d, 0xbc55a913} }, -/**/ {{0x5cfce04c, 0x3feede7b} }, -/**/ {{0x3b51a72f, 0x3c8507c2} }, -/**/ {{0x6067718b, 0xbfc6cc82} }, -/**/ {{0xdbfc430f, 0x3c6d00ca} }, -/**/ {{0x4fbf6fe8, 0xbfd10bb0} }, -/**/ {{0x53749c72, 0x3c321748} }, -/**/ {{0x699a36ad, 0x3fc47046} }, -/**/ {{0x3994d40c, 0xbc63924c} }, -/**/ {{0x0dfb7483, 0x3fbb6338} }, -/**/ {{0x42ee5820, 0xbfc15bb5} }, -/**/ {{0x385194fc, 0xbf9f879b} }, -/**/ {{0x57d040e9, 0x3fbbaa05} }, -/**/ {{0xada71ca0, 0xbf895566} } }, -/**/ {{{0x00000000, 0x3fc90000} }, -/**/ {{0xe2879c29, 0x3fc8b06e} }, -/**/ {{0x30308c4f, 0xbc6118cd} }, -/**/ {{0x9ec57f51, 0x3feed2fb} }, -/**/ {{0xc0d106ba, 0xbc83fdc5} }, -/**/ {{0x58b40d27, 0xbfc7324d} }, -/**/ {{0xfc062163, 0x3c68e240} }, -/**/ {{0xf8b8a2bf, 0xbfd0e28b} }, -/**/ {{0x64c55b39, 0xbc7b8d8a} }, -/**/ {{0x8ff46730, 0x3fc4b3b9} }, -/**/ {{0x988563da, 0xbc5af146} }, -/**/ {{0x1277a10d, 0x3fba924c} }, -/**/ {{0x2bbfd54d, 0xbfc175c9} }, -/**/ {{0x6c522340, 0xbf9c1448} }, -/**/ {{0x044f2f6b, 0x3fbb89fa} }, -/**/ {{0xaaecc742, 0xbf8f9cc7} } }, -/**/ {{{0x00000000, 0x3fc98000} }, -/**/ {{0x7d050272, 0x3fc92ba3} }, -/**/ {{0xd0ff4764, 0xbc60d3de} }, -/**/ {{0x390b6afe, 0x3feec749} }, -/**/ {{0x4e3659ca, 0xbc5c3d17} }, -/**/ {{0xe659b3de, 0xbfc7971f} }, -/**/ {{0x373f554d, 0x3c4cab11} }, -/**/ {{0xc6b052a4, 0xbfd0b8e2} }, -/**/ {{0x6f3b74bc, 0x3c7da014} }, -/**/ {{0xf0432146, 0x3fc4f520} }, -/**/ {{0xa8027290, 0xbc6769ad} }, -/**/ {{0x3e17b570, 0x3fb9c039} }, -/**/ {{0x0d8833a4, 0xbfc18cda} }, -/**/ {{0x4627d340, 0xbf98a567} }, -/**/ {{0x5e42eff7, 0x3fbb62f1} }, -/**/ {{0x7ee3bed3, 0xbf92e10a} } }, -/**/ {{{0x00000000, 0x3fca0000} }, -/**/ {{0xe96c8626, 0x3fc9a6a8} }, -/**/ {{0xe7b4348e, 0x3c4cf601} }, -/**/ {{0xa8c932d7, 0x3feebb64} }, -/**/ {{0x79aae302, 0x3c20538d} }, -/**/ {{0xf88295fe, 0xbfc7faf6} }, -/**/ {{0x932909e9, 0xbc687a81} }, -/**/ {{0xd3f5a07b, 0xbfd08eb8} }, -/**/ {{0xfb7d6aaa, 0xbc620a05} }, -/**/ {{0xd6814372, 0x3fc53479} }, -/**/ {{0x0a0c6620, 0xbc53c682} }, -/**/ {{0x9c562d77, 0x3fb8ed23} }, -/**/ {{0x2cdd89fd, 0xbfc1a0ec} }, -/**/ {{0xfec9df82, 0xbf953bd4} }, -/**/ {{0xd9d3f0f6, 0x3fbb3512} }, -/**/ {{0x4534ccf5, 0xbf95e1ab} } }, -/**/ {{{0x00000000, 0x3fca8000} }, -/**/ {{0x601081a6, 0x3fca217e} }, -/**/ {{0xa60af374, 0xbc60def8} }, -/**/ {{0x6c7ba732, 0x3feeaf4e} }, -/**/ {{0xe91fffe1, 0x3c89fa72} }, -/**/ {{0x970642c3, 0xbfc85dcf} }, -/**/ {{0x5b7f0ad0, 0xbc5732c2} }, -/**/ {{0x3fe5c74d, 0xbfd06412} }, -/**/ {{0x4a82f9b1, 0xbc7d0053} }, -/**/ {{0xe882973d, 0x3fc571c1} }, -/**/ {{0x9090f12c, 0x3c59d9a3} }, -/**/ {{0x00f5d0e0, 0x3fb8192f} }, -/**/ {{0x8db53983, 0xbfc1b204} }, -/**/ {{0xbdd7b47e, 0xbf91d869} }, -/**/ {{0x1355a903, 0x3fbb0088} }, -/**/ {{0x724a2ad9, 0xbf98cf57} } }, -/**/ {{{0x00000000, 0x3fcb0000} }, -/**/ {{0x1b403279, 0x3fca9c23} }, -/**/ {{0xe89cca85, 0x3c60e8bb} }, -/**/ {{0x04157b4f, 0x3feea307} }, -/**/ {{0xfd8bf1f0, 0x3c8ad743} }, -/**/ {{0xe285e2fd, 0xbfc8bfa6} }, -/**/ {{0x9c834c8f, 0xbc6ce765} }, -/**/ {{0x2e38fd26, 0xbfd038f3} }, -/**/ {{0xef212a80, 0x3c6a42ec} }, -/**/ {{0x255d65d5, 0x3fc5acf7} }, -/**/ {{0xbe486771, 0xbc619fba} }, -/**/ {{0xff244e15, 0x3fb7447e} }, -/**/ {{0xeed71b69, 0xbfc1c028} }, -/**/ {{0xaceecf68, 0xbf8cf7f0} }, -/**/ {{0xb0ee161b, 0x3fbac57c} }, -/**/ {{0xefc8f53e, 0xbf9ba92d} } }, -/**/ {{{0x00000000, 0x3fcb8000} }, -/**/ {{0x574d780c, 0x3fcb1696} }, -/**/ {{0xfc15a673, 0xbc585ab8} }, -/**/ {{0xf0f2da5a, 0x3fee968e} }, -/**/ {{0x69710f0d, 0xbc6fffe1} }, -/**/ {{0x148444b5, 0xbfc9207a} }, -/**/ {{0x1802fa91, 0xbc66661a} }, -/**/ {{0xc65096ca, 0xbfd00d5f} }, -/**/ {{0x8920e744, 0x3c7f2a2e} }, -/**/ {{0xe4be288d, 0x3fc5e617} }, -/**/ {{0x99be934f, 0x3c67fa48} }, -/**/ {{0xe0d4c87a, 0x3fb66f36} }, -/**/ {{0xc5179ce8, 0xbfc1cb5f} }, -/**/ {{0x1011bb6c, 0xbf864e9c} }, -/**/ {{0x43a75476, 0x3fba841e} }, -/**/ {{0x845fc859, 0xbf9e6e5b} } }, -/**/ {{{0x00000000, 0x3fcc0000} }, -/**/ {{0x529260a2, 0x3fcb90d7} }, -/**/ {{0xd2e0e5ab, 0x3c217b10} }, -/**/ {{0xb5ccf172, 0x3fee89e6} }, -/**/ {{0x153be26a, 0x3c820357} }, -/**/ {{0x7f79bfd6, 0xbfc98046} }, -/**/ {{0xf5d60955, 0xbc0799ee} }, -/**/ {{0x650d32f4, 0xbfcfc2b8} }, -/**/ {{0x4d01b49e, 0xbc6b59de} }, -/**/ {{0xd625e475, 0x3fc61d22} }, -/**/ {{0xe23c6105, 0xbc68013f} }, -/**/ {{0x9e54f300, 0x3fb59979} }, -/**/ {{0x365c2b85, 0xbfc1d3b0} }, -/**/ {{0x0afb6b97, 0xbf7f6cc9} }, -/**/ {{0x28035c12, 0x3fba3c9c} }, -/**/ {{0x8331488a, 0xbfa08f0d} } }, -/**/ {{{0x00000000, 0x3fcc8000} }, -/**/ {{0x4d768467, 0x3fcc0ae5} }, -/**/ {{0xf55f26dc, 0xbc604cdb} }, -/**/ {{0xd6ad70cb, 0x3fee7d0e} }, -/**/ {{0xee20d17d, 0x3c8e6761} }, -/**/ {{0x8ee3fcf8, 0xbfc9df09} }, -/**/ {{0xed723e81, 0x3c62daa3} }, -/**/ {{0x3efdc9b4, 0xbfcf69d9} }, -/**/ {{0x85a20110, 0x3c6c7b6f} }, -/**/ {{0x0013c661, 0x3fc65217} }, -/**/ {{0xab1387be, 0xbc678a0c} }, -/**/ {{0xd61f268e, 0x3fb4c369} }, -/**/ {{0x146d6110, 0xbfc1d922} }, -/**/ {{0xc0b0ed0a, 0xbf726199} }, -/**/ {{0x6629c856, 0x3fb9ef27} }, -/**/ {{0xc1ea955d, 0xbfa1dbda} } }, -/**/ {{{0x00000000, 0x3fcd0000} }, -/**/ {{0x8a742e6e, 0x3fcc84bf} }, -/**/ {{0x0682ea26, 0xbc595bdd} }, -/**/ {{0xd8e205ea, 0x3fee7007} }, -/**/ {{0x7b2991c1, 0x3c816199} }, -/**/ {{0xc751a854, 0xbfca3cc0} }, -/**/ {{0x4efbc78c, 0xbc66a2fd} }, -/**/ {{0x76f43baa, 0xbfcf102a} }, -/**/ {{0x38d996b1, 0x3c6cfc38} }, -/**/ {{0xbf1a9ad6, 0x3fc684f3} }, -/**/ {{0x7c3b6690, 0x3c52eaf7} }, -/**/ {{0xc4ebba84, 0x3fb3ed29} }, -/**/ {{0xd79a6a53, 0xbfc1dbbd} }, -/**/ {{0xfd09510e, 0xbf55fa5b} }, -/**/ {{0x91c74d50, 0x3fb99bf2} }, -/**/ {{0x3002c38b, 0xbfa31d41} } }, -/**/ {{{0x00000000, 0x3fcd8000} }, -/**/ {{0x4e1d5395, 0x3fccfe65} }, -/**/ {{0x3f71eafb, 0x3c647b9a} }, -/**/ {{0x42efd10e, 0x3fee62d2} }, -/**/ {{0xa021973e, 0x3c850a65} }, -/**/ {{0xc66a1be4, 0xbfca9969} }, -/**/ {{0x3753f036, 0x3c326164} }, -/**/ {{0x6b550477, 0xbfceb5b4} }, -/**/ {{0xa3ef610f, 0xbc64cacb} }, -/**/ {{0xc4e2c295, 0x3fc6b5b8} }, -/**/ {{0x98b2ac7f, 0x3c66b228} }, -/**/ {{0x3e03bb80, 0x3fb316db} }, -/**/ {{0x99312ba1, 0xbfc1db8c} }, -/**/ {{0x8536556f, 0x3f5ce5b0} }, -/**/ {{0xa9b62abf, 0x3fb94331} }, -/**/ {{0xb36f42fc, 0xbfa452f3} } }, -/**/ {{{0x00000000, 0x3fce0000} }, -/**/ {{0xdf205736, 0x3fcd77d5} }, -/**/ {{0x1534597e, 0x3c6c648d} }, -/**/ {{0x9c86d7c6, 0x3fee556e} }, -/**/ {{0x34c9abfd, 0xbc830c25} }, -/**/ {{0x42f10c89, 0xbfcaf502} }, -/**/ {{0xf8576d95, 0xbc411261} }, -/**/ {{0x7b1596d9, 0xbfce5a7f} }, -/**/ {{0x78f7ae18, 0x3c574baa} }, -/**/ {{0x171949b1, 0x3fc6e466} }, -/**/ {{0x52f9c399, 0xbc6ff86b} }, -/**/ {{0xa3d6f244, 0x3fb2409f} }, -/**/ {{0x0dceacbf, 0xbfc1d898} }, -/**/ {{0xdc715080, 0x3f73c3b6} }, -/**/ {{0xf78687ab, 0x3fb8e519} }, -/**/ {{0x6b1251ec, 0xbfa57cac} } }, -/**/ {{{0x00000000, 0x3fce8000} }, -/**/ {{0x864c9d9e, 0x3fcdf110} }, -/**/ {{0x53bf4781, 0xbc35818b} }, -/**/ {{0x6e7576a6, 0x3fee47dd} }, -/**/ {{0x24b84595, 0x3c89d322} }, -/**/ {{0x0cc64717, 0xbfcb4f88} }, -/**/ {{0x44bb97a3, 0xbc624035} }, -/**/ {{0x046e8a3b, 0xbfcdfe94} }, -/**/ {{0xd278da00, 0xbc6078ee} }, -/**/ {{0x0e4ccbb7, 0x3fc710fc} }, -/**/ {{0x1da51f71, 0xbc58c89c} }, -/**/ {{0xe0d7022a, 0x3fb16a97} }, -/**/ {{0x7f8b58f8, 0xbfc1d2ea} }, -/**/ {{0xaf259d18, 0x3f800ed5} }, -/**/ {{0xeefd29c7, 0x3fb881e1} }, -/**/ {{0xae6aa0c1, 0xbfa69a2c} } }, -/**/ {{{0x00000000, 0x3fcf0000} }, -/**/ {{0x8e96ec4d, 0x3fce6a14} }, -/**/ {{0x2029f765, 0x3c6866b2} }, -/**/ {{0x429bd423, 0x3fee3a1f} }, -/**/ {{0x48961291, 0xbc86174a} }, -/**/ {{0x0ce18ad9, 0xbfcba8f9} }, -/**/ {{0xb50eb15d, 0x3c62e3e9} }, -/**/ {{0x63927806, 0xbfcda1fa} }, -/**/ {{0x8073bacf, 0xbbed7b15} }, -/**/ {{0x54b8d3bb, 0x3fc73b7b} }, -/**/ {{0x74869c1c, 0x3c602afb} }, -/**/ {{0x60993bd6, 0x3fb094e4} }, -/**/ {{0xc806a157, 0xbfc1ca8e} }, -/**/ {{0xa854d278, 0x3f862263} }, -/**/ {{0x0d9e7452, 0x3fb819c1} }, -/**/ {{0x08743869, 0xbfa7ab3d} } }, -/**/ {{{0x00000000, 0x3fcf8000} }, -/**/ {{0x451d980d, 0x3fcee2e1} }, -/**/ {{0x8c46ba91, 0xbc59a770} }, -/**/ {{0xa3df5666, 0x3fee2c34} }, -/**/ {{0x19a92865, 0xbc8ef949} }, -/**/ {{0x454a9009, 0xbfcc0153} }, -/**/ {{0xda1123ca, 0x3c5572bf} }, -/**/ {{0xf169cd42, 0xbfcd44ba} }, -/**/ {{0xf1052e0a, 0xbc6db0f2} }, -/**/ {{0xe5006ad1, 0x3fc763e4} }, -/**/ {{0x3e902796, 0x3c66e21a} }, -/**/ {{0x12812c7d, 0x3faf7f4a} }, -/**/ {{0x4a558d9d, 0xbfc1bf90} }, -/**/ {{0x2be7fbfd, 0x3f8c1b52} }, -/**/ {{0xba5b0263, 0x3fb7acef} }, -/**/ {{0x2dddf4e5, 0xbfa8afad} } }, -/**/ {{{0x00000000, 0x3fd00000} }, -/**/ {{0xf92c80dd, 0x3fcf5b75} }, -/**/ {{0x3cf7afbd, 0x3c68ab6e} }, -/**/ {{0x1e1e1e1e, 0x3fee1e1e} }, -/**/ {{0x1e1e1e1e, 0x3c6e1e1e} }, -/**/ {{0xd10d4986, 0xbfcc5894} }, -/**/ {{0xc4a6886a, 0x3c5f00e2} }, -/**/ {{0x0253d27e, 0xbfcce6de} }, -/**/ {{0x3c5fce89, 0xbc65d764} }, -/**/ {{0x08d88b02, 0x3fc78a3a} }, -/**/ {{0x32bd57e4, 0x3c4fc5d6} }, -/**/ {{0x6a622b44, 0x3fadd5f2} }, -/**/ {{0xecd7c4e0, 0xbfc1b1fa} }, -/**/ {{0x1fc8b549, 0x3f90fc3e} }, -/**/ {{0x25728acf, 0x3fb73ba7} }, -/**/ {{0xeeba051f, 0xbfa9a753} } }, -/**/ {{{0x00000000, 0x3fd04000} }, -/**/ {{0xfc40dbe4, 0x3fcfd3d1} }, -/**/ {{0xf3a1c5ea, 0x3c437146} }, -/**/ {{0x3e228818, 0x3fee0fdc} }, -/**/ {{0x8c042ef5, 0xbc62e075} }, -/**/ {{0xe42a71b9, 0xbfccaebb} }, -/**/ {{0x8025fd1d, 0xbc69fa0a} }, -/**/ {{0xe4ed28e5, 0xbfcc886b} }, -/**/ {{0x7604b95a, 0xbc59ccc3} }, -/**/ {{0x57a32fb9, 0x3fc7ae7c} }, -/**/ {{0xe36848c2, 0x3c67393b} }, -/**/ {{0x5a1b7b6f, 0x3fac2dff} }, -/**/ {{0x12f690d4, 0xbfc1a1db} }, -/**/ {{0xa575dc1d, 0x3f93dc65} }, -/**/ {{0x28a107f6, 0x3fb6c621} }, -/**/ {{0x23d2c35f, 0xbfaa920f} } }, -/**/ {{{0x00000000, 0x3fd08000} }, -/**/ {{0x510665b6, 0x3fd025fa} }, -/**/ {{0x6832fa48, 0xbc7672df} }, -/**/ {{0x9196b776, 0x3fee016f} }, -/**/ {{0xb14efc08, 0x3c81da3a} }, -/**/ {{0xcb847375, 0xbfcd03c6} }, -/**/ {{0xfc4c6f52, 0xbc6819f2} }, -/**/ {{0xe0dbf8a5, 0xbfcc296c} }, -/**/ {{0x27fb1c17, 0xbc55cc84} }, -/**/ {{0xb4fbbf40, 0x3fc7d0ad} }, -/**/ {{0x41b71641, 0x3c6378b3} }, -/**/ {{0x440404cd, 0x3faa87ad} }, -/**/ {{0x96d156a8, 0xbfc18f3d} }, -/**/ {{0x9ef40490, 0x3f96ad9b} }, -/**/ {{0x27a95e14, 0x3fb64c98} }, -/**/ {{0x97cfdce0, 0xbfab6fc3} } }, -/**/ {{{0x00000000, 0x3fd0c000} }, -/**/ {{0xa03d6291, 0x3fd061ee} }, -/**/ {{0xdb154301, 0xbc45f760} }, -/**/ {{0xa6f82a61, 0x3fedf2d8} }, -/**/ {{0x560866af, 0xbc6cedbb} }, -/**/ {{0xecc8c02c, 0xbfcd57b3} }, -/**/ {{0x85b9541c, 0x3c641512} }, -/**/ {{0x35a209c0, 0xbfcbc9e9} }, -/**/ {{0x4914a5d1, 0x3c65bfd8} }, -/**/ {{0x4f358b07, 0x3fc7f0d0} }, -/**/ {{0x3f47a5cc, 0xbc60dc70} }, -/**/ {{0x50af01c1, 0x3fa8e337} }, -/**/ {{0xc2daf61b, 0xbfc17a2f} }, -/**/ {{0x57b649f0, 0x3f996f63} }, -/**/ {{0xf14fef28, 0x3fb5cf46} }, -/**/ {{0xec5a22c2, 0xbfac405c} } }, -/**/ {{{0x00000000, 0x3fd10000} }, -/**/ {{0x97d86362, 0x3fd09dc5} }, -/**/ {{0x390cb865, 0x3c762e47} }, -/**/ {{0x0d8b5ae6, 0x3fede418} }, -/**/ {{0x23f66cf0, 0x3c719298} }, -/**/ {{0xc655a596, 0xbfcdaa81} }, -/**/ {{0x6a90480b, 0x3c666d0d} }, -/**/ {{0x1974fd6c, 0xbfcb69e9} }, -/**/ {{0xec28723f, 0xbc68e199} }, -/**/ {{0x9dcd2641, 0x3fc80ee6} }, -/**/ {{0x45b4bb82, 0x3c37ccfe} }, -/**/ {{0x64b143be, 0x3fa740d7} }, -/**/ {{0x4b6b7330, 0xbfc162bf} }, -/**/ {{0x7a20d203, 0x3f9c2147} }, -/**/ {{0xa0d6b625, 0x3fb54e68} }, -/**/ {{0x7b6e81ad, 0xbfad03cd} } }, -/**/ {{{0x00000000, 0x3fd14000} }, -/**/ {{0xe509acb3, 0x3fd0d97e} }, -/**/ {{0x7bd5a3eb, 0x3c747c31} }, -/**/ {{0x554f6dcf, 0x3fedd52e} }, -/**/ {{0xddcd060b, 0xbc75c686} }, -/**/ {{0xef1cb578, 0xbfcdfc2e} }, -/**/ {{0xd1677d50, 0xbc46ae20} }, -/**/ {{0xb81cdb34, 0xbfcb0974} }, -/**/ {{0xda61c86c, 0x3c36ed8e} }, -/**/ {{0x5fcd53c1, 0x3fc82af3} }, -/**/ {{0x57b559e7, 0xbc424fe5} }, -/**/ {{0x17013aef, 0x3fa5a0c6} }, -/**/ {{0x484940dd, 0xbfc148fa} }, -/**/ {{0x1737ca6d, 0x3f9ec2da} }, -/**/ {{0x800ba495, 0x3fb4ca38} }, -/**/ {{0x35128042, 0xbfadba0e} } }, -/**/ {{{0x00000000, 0x3fd18000} }, -/**/ {{0x362431ca, 0x3fd1151a} }, -/**/ {{0xc9077b9f, 0xbc74dc8d} }, -/**/ {{0x0ef1f116, 0x3fedc61c} }, -/**/ {{0x2d41c166, 0xbc8fe39f} }, -/**/ {{0x1681d2c9, 0xbfce4cba} }, -/**/ {{0x369a3c18, 0x3c340fb4} }, -/**/ {{0x31d921e2, 0xbfcaa894} }, -/**/ {{0x64c48da4, 0x3c6bf59e} }, -/**/ {{0x9a284cea, 0x3fc844f9} }, -/**/ {{0x629cfeb8, 0xbc563be0} }, -/**/ {{0xa7f26285, 0x3fa4033a} }, -/**/ {{0x2e2d72ea, 0xbfc12cef} }, -/**/ {{0x554d151d, 0x3fa0a9da} }, -/**/ {{0xe9f9174f, 0x3fb442f1} }, -/**/ {{0x799e467c, 0xbfae631e} } }, -/**/ {{{0x00000000, 0x3fd1c000} }, -/**/ {{0x3a9ce547, 0x3fd15097} }, -/**/ {{0x7f9ca328, 0xbc7796ba} }, -/**/ {{0xcbc2abaa, 0x3fedb6e1} }, -/**/ {{0xc39a4e7c, 0xbc823b7a} }, -/**/ {{0x0436f806, 0xbfce9c22} }, -/**/ {{0x885803cb, 0xbc64a5ec} }, -/**/ {{0x9a4c8963, 0xbfca474f} }, -/**/ {{0x6793b663, 0x3c671cf3} }, -/**/ {{0x9606243b, 0x3fc85cfc} }, -/**/ {{0x1dcd45ed, 0x3c5fd2b2} }, -/**/ {{0xf8cc655f, 0x3fa2686a} }, -/**/ {{0xc8460b94, 0xbfc10eac} }, -/**/ {{0x0d6eb5ba, 0x3fa1e9bc} }, -/**/ {{0x2e4749c2, 0x3fb3b8d0} }, -/**/ {{0xf0d19201, 0xbfaeff03} } }, -/**/ {{{0x00000000, 0x3fd20000} }, -/**/ {{0xa30bf178, 0x3fd18bf5} }, -/**/ {{0x748b1bf9, 0x3c630ca4} }, -/**/ {{0x1da7801e, 0x3feda780} }, -/**/ {{0x961ff896, 0xbc861ff8} }, -/**/ {{0x9814cb11, 0xbfceea65} }, -/**/ {{0x34cb01ca, 0xbc5f9845} }, -/**/ {{0xf76f9fa1, 0xbfc9e5ae} }, -/**/ {{0xa3ee6a86, 0x3c688b7a} }, -/**/ {{0xdf090624, 0x3fc872ff} }, -/**/ {{0x6fbad4bb, 0x3c31016f} }, -/**/ {{0x83fe02bc, 0x3fa0d08b} }, -/**/ {{0x31b98637, 0xbfc0ee42} }, -/**/ {{0x5b309f28, 0x3fa320e6} }, -/**/ {{0x755cbc43, 0x3fb32c0e} }, -/**/ {{0x5dea1ddb, 0xbfaf8dca} } }, -/**/ {{{0x00000000, 0x3fd24000} }, -/**/ {{0x212dd884, 0x3fd1c735} }, -/**/ {{0x78cb2f2e, 0xbc67d9ac} }, -/**/ {{0x971063d2, 0x3fed97f7} }, -/**/ {{0xc8b326b7, 0x3c67a20b} }, -/**/ {{0xc9f01359, 0xbfcf3783} }, -/**/ {{0xd0a651ad, 0x3c4a8b96} }, -/**/ {{0x408a6757, 0xbfc983ba} }, -/**/ {{0xe6424f06, 0x3c6dfff9} }, -/**/ {{0x41881aad, 0x3fc88707} }, -/**/ {{0x2204fd29, 0xbc63baf9} }, -/**/ {{0xabd6e10d, 0x3f9e779e} }, -/**/ {{0xcf2eab41, 0xbfc0cbbe} }, -/**/ {{0x1659f377, 0x3fa44f31} }, -/**/ {{0xa54a8a94, 0x3fb29ce7} }, -/**/ {{0xb87973d7, 0xbfb007c1} } }, -/**/ {{{0x00000000, 0x3fd28000} }, -/**/ {{0x67e47c96, 0x3fd20255} }, -/**/ {{0x28f4290e, 0xbc618323} }, -/**/ {{0xcaeb6c2a, 0x3fed8848} }, -/**/ {{0xa08296a2, 0x3c81e70d} }, -/**/ {{0xa96c2792, 0xbfcf837b} }, -/**/ {{0xc6884369, 0xbc6ab5ce} }, -/**/ {{0x5d351cdb, 0xbfc92179} }, -/**/ {{0x68719d81, 0x3c617000} }, -/**/ {{0xc8c1ca07, 0x3fc89916} }, -/**/ {{0x18b0f81b, 0xbc6a3339} }, -/**/ {{0x0caf6121, 0x3f9b54d0} }, -/**/ {{0x485ba392, 0xbfc0a732} }, -/**/ {{0xc250c31e, 0x3fa57477} }, -/**/ {{0x4790b4a8, 0x3fb20b96} }, -/**/ {{0x4ac23178, 0xbfb04223} } }, -/**/ {{{0x00000000, 0x3fd2c000} }, -/**/ {{0x2b381042, 0x3fd23d56} }, -/**/ {{0x16200088, 0xbc5c5317} }, -/**/ {{0x4c98f347, 0x3fed7874} }, -/**/ {{0x9a72647e, 0xbc8a7dac} }, -/**/ {{0x5dca68a2, 0xbfcfce4c} }, -/**/ {{0x8fb9ffdd, 0x3c6433de} }, -/**/ {{0x246041ce, 0xbfc8bef4} }, -/**/ {{0x1fb39160, 0xbc66c620} }, -/**/ {{0xbd062535, 0x3fc8a932} }, -/**/ {{0xfbc3a86c, 0xbc6e24c7} }, -/**/ {{0x64d0109d, 0x3f98390b} }, -/**/ {{0x819f2998, 0xbfc080ac} }, -/**/ {{0x8784ffb8, 0x3fa69099} }, -/**/ {{0x6fc55e9b, 0x3fb17854} }, -/**/ {{0x5f970a81, 0xbfb07618} } }, -/**/ {{{0x00000000, 0x3fd30000} }, -/**/ {{0x2057ef46, 0x3fd27837} }, -/**/ {{0xd36dfc81, 0xbc7077cd} }, -/**/ {{0xafdfd5ba, 0x3fed687a} }, -/**/ {{0xe19d8d3d, 0xbc782e68} }, -/**/ {{0x92db6fdb, 0xbfd00bfa} }, -/**/ {{0xc0af523f, 0x3c7854cd} }, -/**/ {{0x5b640da2, 0xbfc85c32} }, -/**/ {{0x5e6f23d6, 0x3c5d5bdd} }, -/**/ {{0xa1da32d2, 0x3fc8b75f} }, -/**/ {{0x29860bfe, 0x3c2788df} }, -/**/ {{0xee810d60, 0x3f9524ad} }, -/**/ {{0x95a69dea, 0xbfc0583d} }, -/**/ {{0x2b4d3dec, 0x3fa7a379} }, -/**/ {{0xa3290dfe, 0x3fb0e35b} }, -/**/ {{0x19e12287, 0xbfb0a3b2} } }, -/**/ {{{0x00000000, 0x3fd34000} }, -/**/ {{0xfd9b5fe2, 0x3fd2b2f7} }, -/**/ {{0xc1c2d443, 0x3c2423cf} }, -/**/ {{0x88e1caa2, 0x3fed585c} }, -/**/ {{0x01239e18, 0xbc2c8af2} }, -/**/ {{0xab890af7, 0xbfd0303a} }, -/**/ {{0x726290e6, 0x3c7d42bf} }, -/**/ {{0xb5175de0, 0xbfc7f93b} }, -/**/ {{0xe0ddc367, 0x3c5d5d4b} }, -/**/ {{0x3414de7c, 0x3fc8c3a2} }, -/**/ {{0xba92bfce, 0x3c5ade9b} }, -/**/ {{0xda70853d, 0x3f921811} }, -/**/ {{0xcf23aaf0, 0xbfc02df5} }, -/**/ {{0x06445ff8, 0x3fa8acfd} }, -/**/ {{0xc130eba4, 0x3fb04ce4} }, -/**/ {{0x29de3135, 0xbfb0cb04} } }, -/**/ {{{0x00000000, 0x3fd38000} }, -/**/ {{0x7a823cfe, 0x3fd2ed98} }, -/**/ {{0x8ea012ca, 0x3c6b9125} }, -/**/ {{0x6c0fd782, 0x3fed481a} }, -/**/ {{0x85ff74ea, 0x3c82dda4} }, -/**/ {{0x2f5c1e18, 0xbfd053e6} }, -/**/ {{0x8ec637b8, 0xbc679cf2} }, -/**/ {{0xd0ee3e3b, 0xbfc79617} }, -/**/ {{0x732049a6, 0xbc4e91e0} }, -/**/ {{0x67f6478d, 0x3fc8cdff} }, -/**/ {{0xf5079e63, 0xbc5cb659} }, -/**/ {{0x8e8ef686, 0x3f8e271c} }, -/**/ {{0xa2940881, 0xbfc001e5} }, -/**/ {{0xf937caae, 0x3fa9ad0e} }, -/**/ {{0xda1e257f, 0x3faf6a4f} }, -/**/ {{0xb07d42be, 0xbfb0ec24} } }, -/**/ {{{0x00000000, 0x3fd3c000} }, -/**/ {{0x4fb58952, 0x3fd32818} }, -/**/ {{0xa9939f2f, 0xbc7a95f0} }, -/**/ {{0xee1ee130, 0x3fed37b4} }, -/**/ {{0x6fbb1f2d, 0x3c747541} }, -/**/ {{0xe022dd0d, 0xbfd076fc} }, -/**/ {{0x5534523a, 0x3c6d8659} }, -/**/ {{0x3a201d6b, 0xbfc732ce} }, -/**/ {{0xc98a3a62, 0xbc56a551} }, -/**/ {{0x673a29b8, 0x3fc8d67c} }, -/**/ {{0xff95efe6, 0xbc54ae9d} }, -/**/ {{0x74ce6814, 0x3f882eee} }, -/**/ {{0x503ba8f4, 0xbfbfa83b} }, -/**/ {{0x60b63f75, 0x3faaa39c} }, -/**/ {{0xf07ff274, 0x3fae38b8} }, -/**/ {{0x2200fe4d, 0xbfb1072c} } }, -/**/ {{{0x00000000, 0x3fd40000} }, -/**/ {{0x3707ebcc, 0x3fd36277} }, -/**/ {{0x44b672d8, 0xbc6963a5} }, -/**/ {{0xa3fc5b1a, 0x3fed272c} }, -/**/ {{0x272ca3fc, 0x3c8ae01d} }, -/**/ {{0x8aec9d8e, 0xbfd0997e} }, -/**/ {{0x72595f36, 0x3c74aeda} }, -/**/ {{0x66d5c0ff, 0xbfc6cf66} }, -/**/ {{0x3ca66cc1, 0x3c410e2a} }, -/**/ {{0x8f2617b5, 0x3fc8dd1e} }, -/**/ {{0x4facfb67, 0xbc6d173e} }, -/**/ {{0x33966883, 0x3f82483b} }, -/**/ {{0x2b05b16b, 0xbfbf495d} }, -/**/ {{0x074fdeaf, 0x3fab9096} }, -/**/ {{0x9c4605c9, 0x3fad0571} }, -/**/ {{0x280318fd, 0xbfb11c35} } }, -/**/ {{{0x00000000, 0x3fd44000} }, -/**/ {{0xeb76157c, 0x3fd39cb4} }, -/**/ {{0x5a214713, 0xbc72f4da} }, -/**/ {{0x22c31625, 0x3fed1682} }, -/**/ {{0xd5e51b41, 0x3c8ac111} }, -/**/ {{0x07e9a89a, 0xbfd0bb6b} }, -/**/ {{0x7faa1dda, 0x3c76fb53} }, -/**/ {{0xb75f0772, 0xbfc66be7} }, -/**/ {{0xee6d618b, 0xbc69a77d} }, -/**/ {{0x6e943d69, 0x3fc8e1eb} }, -/**/ {{0xc5ec9ebe, 0xbc6982c4} }, -/**/ {{0x9c2d3c0c, 0x3f78e73c} }, -/**/ {{0x7059f387, 0xbfbee752} }, -/**/ {{0x16982f58, 0x3fac73f0} }, -/**/ {{0xc146b407, 0x3fabd0e4} }, -/**/ {{0x82f43254, 0xbfb12b5c} } }, -/**/ {{{0x00000000, 0x3fd48000} }, -/**/ {{0x29271134, 0x3fd3d6d1} }, -/**/ {{0x41cc958a, 0x3c7137ca} }, -/**/ {{0xffb0304c, 0x3fed05b5} }, -/**/ {{0x33e896e5, 0xbc8fc921} }, -/**/ {{0x3a49e254, 0xbfd0dcc2} }, -/**/ {{0x925cb599, 0x3c704578} }, -/**/ {{0x75708502, 0xbfc60859} }, -/**/ {{0x9feebe6c, 0xbc5f88bc} }, -/**/ {{0xc3fb5c1c, 0x3fc8e4e8} }, -/**/ {{0xd6b77a05, 0x3c6de114} }, -/**/ {{0xdbc6c857, 0x3f6ac6b3} }, -/**/ {{0xdeabd793, 0xbfbe823c} }, -/**/ {{0x06fb52a7, 0x3fad4da2} }, -/**/ {{0x2bea698c, 0x3faa9b7b} }, -/**/ {{0xeb32d745, 0xbfb134c0} } }, -/**/ {{{0x00000000, 0x3fd4c000} }, -/**/ {{0xad6c7d33, 0x3fd410cb} }, -/**/ {{0xae13b512, 0xbc7b0c8b} }, -/**/ {{0xd0182625, 0x3fecf4c8} }, -/**/ {{0xf4103798, 0x3c8e6308} }, -/**/ {{0x101a5438, 0xbfd0fd84} }, -/**/ {{0x7d2e3e34, 0x3c425fcd} }, -/**/ {{0xd36904f6, 0xbfc5a4c2} }, -/**/ {{0x54f27bb6, 0x3c5d3583} }, -/**/ {{0x7b74b00c, 0x3fc8e61c} }, -/**/ {{0xefe568b6, 0x3c32f7ad} }, -/**/ {{0xaa3667f2, 0x3f402f60} }, -/**/ {{0x4c9859c0, 0xbfbe1a3e} }, -/**/ {{0x8e77c589, 0x3fae1da6} }, -/**/ {{0x6ed5823e, 0x3fa9659b} }, -/**/ {{0xf1d3d420, 0xbfb13882} } }, -/**/ {{{0x00000000, 0x3fd50000} }, -/**/ {{0x36c2af0a, 0x3fd44aa4} }, -/**/ {{0x3c55b3ba, 0xbc75d5e4} }, -/**/ {{0x295c0773, 0x3fece3bb} }, -/**/ {{0x91851b41, 0xbc826fd5} }, -/**/ {{0x8221a582, 0xbfd11db0} }, -/**/ {{0xa9f31d11, 0x3c7e9654} }, -/**/ {{0xeb9ef661, 0xbfc5412a} }, -/**/ {{0x5e60433c, 0x3c573faf} }, -/**/ {{0xacc06b3a, 0x3fc8e58c} }, -/**/ {{0x64dd81ed, 0xbc5dba9a} }, -/**/ {{0xcfe3f01e, 0xbf625ff7} }, -/**/ {{0x9dae4b1c, 0xbfbdaf78} }, -/**/ {{0x8e4e3e16, 0x3faee3fb} }, -/**/ {{0xc2c60fed, 0x3fa82fa9} }, -/**/ {{0xe13555d9, 0xbfb136c4} } }, -/**/ {{{0x00000000, 0x3fd54000} }, -/**/ {{0x84d0c21b, 0x3fd4845a} }, -/**/ {{0x7563c6a6, 0x3c71e28a} }, -/**/ {{0xa0decfad, 0x3fecd28d} }, -/**/ {{0x49610c12, 0xbc72b2c8} }, -/**/ {{0x93bb8da8, 0xbfd13d47} }, -/**/ {{0x1b48d912, 0x3c5df07a} }, -/**/ {{0xbfb5c8b7, 0xbfc4dd98} }, -/**/ {{0x39a108d7, 0x3c58a9ff} }, -/**/ {{0x99496dc4, 0x3fc8e33f} }, -/**/ {{0x19d3995c, 0x3c380d8b} }, -/**/ {{0xba1bc2d2, 0xbf743d59} }, -/**/ {{0xb77862a1, 0xbfbd420d} }, -/**/ {{0xffb9511c, 0x3fafa0a1} }, -/**/ {{0xe8a86cad, 0x3fa6fa07} }, -/**/ {{0x9d75a109, 0xbfb12faa} } }, -/**/ {{{0x00000000, 0x3fd58000} }, -/**/ {{0x586890e7, 0x3fd4bdee} }, -/**/ {{0x7c22a757, 0xbc6e4dc7} }, -/**/ {{0xcbfae3a7, 0x3fecc140} }, -/**/ {{0xd8b6f9b9, 0xbc41045d} }, -/**/ {{0x52b34cdc, 0xbfd15c49} }, -/**/ {{0x2daa60ac, 0x3c729992} }, -/**/ {{0x37fb39ef, 0xbfc47a13} }, -/**/ {{0x3482d371, 0x3c5cb3b2} }, -/**/ {{0xaa28e022, 0x3fc8df3b} }, -/**/ {{0x969a5447, 0xbc61a8ab} }, -/**/ {{0xc651ecb4, 0xbf7f2135} }, -/**/ {{0x76cc63f7, 0xbfbcd21f} }, -/**/ {{0xefdf4de1, 0x3fb029ce} }, -/**/ {{0x0de3bf96, 0x3fa5c515} }, -/**/ {{0x84e55ab4, 0xbfb12359} } }, -/**/ {{{0x00000000, 0x3fd5c000} }, -/**/ {{0x73869979, 0x3fd4f75f} }, -/**/ {{0xf7ff1108, 0xbc595a1c} }, -/**/ {{0x3ff7b52c, 0x3fecafd5} }, -/**/ {{0x684b6314, 0x3c86e099} }, -/**/ {{0xd71d366e, 0xbfd17ab5} }, -/**/ {{0xae2f7b71, 0x3c602f2c} }, -/**/ {{0x22cc956f, 0xbfc416a1} }, -/**/ {{0xe98c24c1, 0x3c61d29e} }, -/**/ {{0x6e2a4f9f, 0x3fc8d987} }, -/**/ {{0x4a6a7880, 0xbc60de73} }, -/**/ {{0x909e42ec, 0xbf84ed52} }, -/**/ {{0xa56263a8, 0xbfbc5fcf} }, -/**/ {{0x0d159803, 0x3fb07e7b} }, -/**/ {{0xb2ddf20b, 0x3fa4912d} }, -/**/ {{0x508c8585, 0xbfb111f8} } }, -/**/ {{{0x00000000, 0x3fd60000} }, -/**/ {{0x9951cd4a, 0x3fd530ad} }, -/**/ {{0x80884082, 0xbc625664} }, -/**/ {{0x91ff8d87, 0x3fec9e4b} }, -/**/ {{0x1b0da370, 0xbc7723ff} }, -/**/ {{0x432f5908, 0xbfd1988d} }, -/**/ {{0xf8714cda, 0x3c7d065e} }, -/**/ {{0x3403e07c, 0xbfc3b349} }, -/**/ {{0x2717fbb0, 0x3c6b571d} }, -/**/ {{0x97d0e938, 0x3fc8d229} }, -/**/ {{0xb08a0625, 0x3c66b228} }, -/**/ {{0xc2fe9cde, 0xbf8a3464} }, -/**/ {{0xefb6f244, 0xbfbbeb3f} }, -/**/ {{0x39e67c0b, 0x3fb0ce5a} }, -/**/ {{0x93b4fb73, 0x3fa35eab} }, -/**/ {{0xf4d86f78, 0xbfb0fbae} } }, -/**/ {{{0x00000000, 0x3fd64000} }, -/**/ {{0x8e1b4cd8, 0x3fd569d8} }, -/**/ {{0xe713cfe2, 0xbc6fec61} }, -/**/ {{0x57157fc9, 0x3fec8ca4} }, -/**/ {{0x515734ba, 0x3c70da14} }, -/**/ {{0xc3195094, 0xbfd1b5cf} }, -/**/ {{0xa9537e45, 0x3c740cce} }, -/**/ {{0x046cee83, 0xbfc35012} }, -/**/ {{0xe446fd10, 0xbc651b6c} }, -/**/ {{0xfb5e6a95, 0x3fc8c928} }, -/**/ {{0x82469bf3, 0x3c656cd2} }, -/**/ {{0xa4afbb1b, 0xbf8f6568} }, -/**/ {{0xdb3aba50, 0xbfbb7491} }, -/**/ {{0xb9fd56ec, 0x3fb11972} }, -/**/ {{0x9329e15e, 0x3fa22de5} }, -/**/ {{0x8287d93d, 0xbfb0e0a6} } }, -/**/ {{{0x00000000, 0x3fd68000} }, -/**/ {{0x175e0f4e, 0x3fd5a2e0} }, -/**/ {{0x8f82e457, 0x3c713b7a} }, -/**/ {{0x240b83ae, 0x3fec7ae0} }, -/**/ {{0x10d398ed, 0xbc885b56} }, -/**/ {{0x8cdb4db0, 0xbfd1d27d} }, -/**/ {{0x2db0447f, 0x3c11d95f} }, -/**/ {{0x11425541, 0xbfc2ed02} }, -/**/ {{0x6b2cbaa3, 0xbc11d124} }, -/**/ {{0x8cdc5c4d, 0x3fc8be8c} }, -/**/ {{0x794444b0, 0xbc542511} }, -/**/ {{0xd25a5415, 0xbf923ffd} }, -/**/ {{0xbcd1df44, 0xbfbafbe6} }, -/**/ {{0x26bdf05c, 0x3fb15fcc} }, -/**/ {{0xa7b853e6, 0x3fa0ff2f} }, -/**/ {{0x07e9a35f, 0xbfb0c109} } }, -/**/ {{{0x00000000, 0x3fd6c000} }, -/**/ {{0xfbbe768d, 0x3fd5dbc3} }, -/**/ {{0x1b76f7da, 0x3c6ea0ec} }, -/**/ {{0x8d78b9ce, 0x3fec68ff} }, -/**/ {{0x4cb5a0c3, 0xbc83ab41} }, -/**/ {{0xe01c5e6e, 0xbfd1ee96} }, -/**/ {{0xfb76d8dd, 0x3c73922c} }, -/**/ {{0xbbb23677, 0xbfc28a1f} }, -/**/ {{0x288601f2, 0x3c6e592a} }, -/**/ {{0x5e282403, 0x3fc8b25b} }, -/**/ {{0x707e09fa, 0xbbef7d58} }, -/**/ {{0xb65add31, 0xbf94c1e0} }, -/**/ {{0xafa52f1b, 0xbfba815f} }, -/**/ {{0x63712acc, 0x3fb1a16f} }, -/**/ {{0x95a8d3ad, 0x3f9fa5b5} }, -/**/ {{0x72814750, 0xbfb09d01} } }, -/**/ {{{0x00000000, 0x3fd70000} }, -/**/ {{0x0309cfe2, 0x3fd61484} }, -/**/ {{0x15711f00, 0xbc7a7257} }, -/**/ {{0x27afd9eb, 0x3fec5703} }, -/**/ {{0xb32c1d72, 0x3c63c2ab} }, -/**/ {{0x06000419, 0xbfd20a1c} }, -/**/ {{0xf51a3a28, 0xbc7b5fe7} }, -/**/ {{0x486ad2c8, 0xbfc22771} }, -/**/ {{0xf84a7eae, 0xbc499ab5} }, -/**/ {{0x9d027817, 0x3fc8a49c} }, -/**/ {{0x2e376ecc, 0xbc53fcab} }, -/**/ {{0xeaabcb23, 0xbf973831} }, -/**/ {{0x8c46fbce, 0xbfba051d} }, -/**/ {{0x9132e9cc, 0x3fb1de66} }, -/**/ {{0xd48d5d65, 0x3f9d5269} }, -/**/ {{0x712354a4, 0xbfb074bb} } }, -/**/ {{{0x00000000, 0x3fd74000} }, -/**/ {{0xf635c1c6, 0x3fd64d1f} }, -/**/ {{0xe7c0fdbe, 0xbc7fa403} }, -/**/ {{0x86b5cbf8, 0x3fec44eb} }, -/**/ {{0xbc5b562d, 0xbc6a4101} }, -/**/ {{0x50fb21ad, 0xbfd2250d} }, -/**/ {{0xa39bdc1a, 0xbc750066} }, -/**/ {{0xdf2ed728, 0xbfc1c4fc} }, -/**/ {{0x006772e9, 0x3c6a87bb} }, -/**/ {{0x9122b9b7, 0x3fc89557} }, -/**/ {{0x45b04f75, 0xbc05454e} }, -/**/ {{0x6c7888f1, 0xbf99a2c9} }, -/**/ {{0xe02d36ad, 0xbfb98740} }, -/**/ {{0x02a99665, 0x3fb216bd} }, -/**/ {{0xb73aeccb, 0x3f9b0511} }, -/**/ {{0x569b1738, 0xbfb04863} } }, -/**/ {{{0x00000000, 0x3fd78000} }, -/**/ {{0x9f5fa6fe, 0x3fd68597} }, -/**/ {{0x4d1ada9c, 0xbc425781} }, -/**/ {{0x3e386c7f, 0x3fec32b9} }, -/**/ {{0x8cbaa5bf, 0x3c756033} }, -/**/ {{0x1ca84e79, 0xbfd23f6b} }, -/**/ {{0xf123d574, 0x3c604cc0} }, -/**/ {{0x8a715435, 0xbfc162c8} }, -/**/ {{0x454fb8fd, 0x3c5cf6db} }, -/**/ {{0x9a4eb534, 0x3fc88493} }, -/**/ {{0x42b959b0, 0xbc668a5c} }, -/**/ {{0x42580bb5, 0xbf9c0182} }, -/**/ {{0xe5822d56, 0xbfb907e9} }, -/**/ {{0x2f8f8273, 0x3fb24a7f} }, -/**/ {{0xa3527f46, 0x3f98be3c} }, -/**/ {{0xfce97270, 0xbfb01825} } }, -/**/ {{{0x00000000, 0x3fd7c000} }, -/**/ {{0xc9cbd76d, 0x3fd6bdea} }, -/**/ {{0x3e6de828, 0xbc5a5c56} }, -/**/ {{0xe1857d04, 0x3fec206c} }, -/**/ {{0xf5c83872, 0xbc80439f} }, -/**/ {{0xcd9b9870, 0xbfd25935} }, -/**/ {{0xf1ec7306, 0x3c6aaf98} }, -/**/ {{0x36f94d02, 0xbfc100da} }, -/**/ {{0xd96d84ff, 0xbc6e72ca} }, -/**/ {{0x2e774351, 0x3fc87258} }, -/**/ {{0xb8860ef0, 0x3c6c50a2} }, -/**/ {{0x741ef0ec, 0xbf9e543a} }, -/**/ {{0x7b4d0ec2, 0xbfb88738} }, -/**/ {{0xa8164103, 0x3fb279ba} }, -/**/ {{0xa7f1ae35, 0x3f967e73} }, -/**/ {{0x5257c3de, 0xbfafc861} } }, -/**/ {{{0x00000000, 0x3fd80000} }, -/**/ {{0x41e4def1, 0x3fd6f619} }, -/**/ {{0xe6f6e918, 0xbc7c63aa} }, -/**/ {{0x0381c0e0, 0x3fec0e07} }, -/**/ {{0x0381c0e0, 0x3c8c0e07} }, -/**/ {{0xd135c174, 0xbfd2726d} }, -/**/ {{0xe0951cf8, 0xbc2d352d} }, -/**/ {{0xb38cc8cf, 0xbfc09f37} }, -/**/ {{0xae75327f, 0xbc69db81} }, -/**/ {{0xd7da413c, 0x3fc85eac} }, -/**/ {{0x6ebae2bc, 0x3c5b1a89} }, -/**/ {{0x80fcc815, 0xbfa04d69} }, -/**/ {{0x1df326f9, 0xbfb8054c} }, -/**/ {{0x082bda60, 0x3fb2a47e} }, -/**/ {{0x7091d5a4, 0x3f944639} }, -/**/ {{0xe072e48c, 0xbfaf5961} } }, -/**/ {{{0x00000000, 0x3fd84000} }, -/**/ {{0xd53aa2aa, 0x3fd72e22} }, -/**/ {{0x4e79f27c, 0xbc7d9c93} }, -/**/ {{0x36a04729, 0x3febfb88} }, -/**/ {{0x9ac2ea21, 0xbc872745} }, -/**/ {{0x9d7702cf, 0xbfd28b13} }, -/**/ {{0x4be8bff6, 0x3c7819b9} }, -/**/ {{0xb0a35176, 0xbfc03de6} }, -/**/ {{0xc83347af, 0x3c5dbfb0} }, -/**/ {{0x332a4f86, 0x3fc84999} }, -/**/ {{0x0a22d12d, 0x3c5d304e} }, -/**/ {{0xed6b2d30, 0xbfa16a97} }, -/**/ {{0xe0128950, 0xbfb78243} }, -/**/ {{0xeaa98f57, 0x3fb2cad8} }, -/**/ {{0x3bb39c5b, 0x3f92160a} }, -/**/ {{0x3804caa3, 0xbfaee3a9} } }, -/**/ {{{0x00000000, 0x3fd88000} }, -/**/ {{0x52817502, 0x3fd76607} }, -/**/ {{0x91cc7600, 0xbc4dd117} }, -/**/ {{0x0cd9e1fe, 0x3febe8f1} }, -/**/ {{0xa21e102a, 0xbc7a9688} }, -/**/ {{0xb0d161e9, 0xbfd2a327} }, -/**/ {{0x14b44140, 0xbc60a2a9} }, -/**/ {{0x803f8d3b, 0xbfbfb9d9} }, -/**/ {{0x2a5c4097, 0x3c5e5779} }, -/**/ {{0xedbcc363, 0x3fc83324} }, -/**/ {{0xa0442744, 0x3c651fbc} }, -/**/ {{0xe91477c3, 0xbfa2819b} }, -/**/ {{0x63b6abf0, 0xbfb6fe3e} }, -/**/ {{0xdc73a89a, 0x3fb2ecdb} }, -/**/ {{0xaa755298, 0x3f8fdcb7} }, -/**/ {{0x237c2f3d, 0xbfae6793} } }, -/**/ {{{0x00000000, 0x3fd8c000} }, -/**/ {{0x899118d1, 0x3fd79dc6} }, -/**/ {{0xa0ef606d, 0x3c2b7413} }, -/**/ {{0x17a4cbc3, 0x3febd642} }, -/**/ {{0x3200a548, 0xbc55ee5d} }, -/**/ {{0x91faa133, 0xbfd2baaa} }, -/**/ {{0xfaf41548, 0xbc6bd391} }, -/**/ {{0xaa22d832, 0xbfbef89e} }, -/**/ {{0xc874fdb9, 0x3c413b3b} }, -/**/ {{0xc3be300a, 0x3fc81b57} }, -/**/ {{0xc01a615f, 0x3c6baf9b} }, -/**/ {{0x4a872ec7, 0xbfa3926a} }, -/**/ {{0xd3e743cd, 0xbfb67959} }, -/**/ {{0x4f919505, 0x3fb30a98} }, -/**/ {{0x28b78b08, 0x3f8b9f3b} }, -/**/ {{0x71e33e9d, 0xbfade57b} } }, -/**/ {{{0x00000000, 0x3fd90000} }, -/**/ {{0x4b63b3f7, 0x3fd7d560} }, -/**/ {{0x5c2b249a, 0x3c769c88} }, -/**/ {{0xe7ec7a8d, 0x3febc37b} }, -/**/ {{0x2b0e2727, 0xbc6f1246} }, -/**/ {{0xcfbdd7fa, 0xbfd2d19c} }, -/**/ {{0x5e00c582, 0x3c7d0b11} }, -/**/ {{0x86f8309b, 0xbfbe3827} }, -/**/ {{0xfa6c56a7, 0x3c5d64e9} }, -/**/ {{0x7e6de8de, 0x3fc80239} }, -/**/ {{0x7776e849, 0x3c68d62f} }, -/**/ {{0x4f6d8017, 0xbfa49cf9} }, -/**/ {{0xde917e27, 0xbfb5f3b3} }, -/**/ {{0x8e455cc2, 0x3fb32420} }, -/**/ {{0xb9fc88fe, 0x3f877470} }, -/**/ {{0xc6b10536, 0xbfad5dbd} } }, -/**/ {{{0x00000000, 0x3fd94000} }, -/**/ {{0x6a14b1d1, 0x3fd80cd4} }, -/**/ {{0x9684fa19, 0xbc7e79f9} }, -/**/ {{0x0e09a222, 0x3febb09f} }, -/**/ {{0x7e047edd, 0x3c85748e} }, -/**/ {{0x00ccbbc8, 0xbfd2e7ff} }, -/**/ {{0x96875561, 0xbc78eb0a} }, -/**/ {{0x804ecc06, 0xbfbd787e} }, -/**/ {{0x2e4351f8, 0xbc27263b} }, -/**/ {{0xf260d7b4, 0x3fc7e7d1} }, -/**/ {{0x8ed258e3, 0xbc430525} }, -/**/ {{0x968d3d02, 0xbfa5a140} }, -/**/ {{0xaecb845e, 0xbfb56d69} }, -/**/ {{0xae292f95, 0x3fb33987} }, -/**/ {{0x48e09ecd, 0x3f835d1d} }, -/**/ {{0x6b6f9aca, 0xbfacd0b5} } }, -/**/ {{{0x00000000, 0x3fd98000} }, -/**/ {{0xb8df95d7, 0x3fd84422} }, -/**/ {{0x299b41b6, 0x3c7d76a0} }, -/**/ {{0x19ba64d6, 0x3feb9dac} }, -/**/ {{0xa13ee09f, 0xbc4f643a} }, -/**/ {{0xc390a5c9, 0xbfd2fdd1} }, -/**/ {{0xaa856fcc, 0x3c575152} }, -/**/ {{0xc0e99751, 0xbfbcb9ad} }, -/**/ {{0x1347a357, 0x3c4e2d44} }, -/**/ {{0xfdcbfd40, 0x3fc7cc28} }, -/**/ {{0xe516db08, 0x3c60dc32} }, -/**/ {{0x19851d86, 0xbfa69f39} }, -/**/ {{0xe772087d, 0xbfb4e697} }, -/**/ {{0x835992de, 0x3fb34ae1} }, -/**/ {{0xe5326389, 0x3f7eb3f1} }, -/**/ {{0x234575e8, 0xbfac3ebd} } }, -/**/ {{{0x00000000, 0x3fd9c000} }, -/**/ {{0x0c1ebedc, 0x3fd87b4b} }, -/**/ {{0xa2fa470f, 0xbc76dcfa} }, -/**/ {{0x9a1ab378, 0x3feb8aa3} }, -/**/ {{0xb797ab93, 0x3c8efdb0} }, -/**/ {{0xbdfb5e5a, 0xbfd31315} }, -/**/ {{0x862f0c0d, 0x3c5813a8} }, -/**/ {{0x3478f169, 0xbfbbfbbf} }, -/**/ {{0xd9e52582, 0xbc51e810} }, -/**/ {{0x86d6ec76, 0x3fc7af46} }, -/**/ {{0x3c13b159, 0xbc6336de} }, -/**/ {{0x264b8050, 0xbfa796dd} }, -/**/ {{0x9e1f6bef, 0xbfb45f5a} }, -/**/ {{0x93b26fc1, 0x3fb35842} }, -/**/ {{0x39bc3abf, 0x3f76d75e} }, -/**/ {{0x006e38b2, 0xbfaba82f} } }, -/**/ {{{0x00000000, 0x3fda0000} }, -/**/ {{0x394a1b25, 0x3fd8b24d} }, -/**/ {{0xa3748fa8, 0x3c7b6d0b} }, -/**/ {{0x1d9cdc98, 0x3feb7786} }, -/**/ {{0x345bd7a8, 0xbc62e22c} }, -/**/ {{0x9d57b8f5, 0xbfd327cb} }, -/**/ {{0x753cc4f1, 0xbc135343} }, -/**/ {{0x8761b154, 0xbfbb3ebc} }, -/**/ {{0x8c168fdd, 0x3c5abeec} }, -/**/ {{0x79f68c54, 0x3fc79132} }, -/**/ {{0xd8d15eda, 0xbc658ab9} }, -/**/ {{0x5872d73c, 0xbfa88828} }, -/**/ {{0x567be750, 0xbfb3d7cd} }, -/**/ {{0x0a24fc71, 0x3fb361c0} }, -/**/ {{0x46aa98b6, 0x3f6e4b7a} }, -/**/ {{0x3bad3a76, 0xbfab0d64} } }, -/**/ {{{0x00000000, 0x3fda4000} }, -/**/ {{0x16f5cde8, 0x3fd8e929} }, -/**/ {{0xe12bfafb, 0x3c74c0a7} }, -/**/ {{0x32024b37, 0x3feb6454} }, -/**/ {{0x69cc9b53, 0xbc7987f7} }, -/**/ {{0x161a0a40, 0xbfd33bf4} }, -/**/ {{0x83ff46db, 0x3c7a2321} }, -/**/ {{0x26913418, 0xbfba82af} }, -/**/ {{0x10a559fe, 0x3c3c4c62} }, -/**/ {{0xc8506679, 0x3fc771f4} }, -/**/ {{0x63c7ccc3, 0xbc54aaed} }, -/**/ {{0x9237e7ff, 0xbfa97317} }, -/**/ {{0xfde5f112, 0xbfb3500a} }, -/**/ {{0xaa2c3459, 0x3fb3676f} }, -/**/ {{0x04721907, 0x3f5e80cd} }, -/**/ {{0x0dc212a5, 0xbfaa6eb5} } }, -/**/ {{{0x00000000, 0x3fda8000} }, -/**/ {{0x7cd0c662, 0x3fd91fde} }, -/**/ {{0x88054b53, 0x3c710741} }, -/**/ {{0x6454751c, 0x3feb510e} }, -/**/ {{0x7e0f2dca, 0xbc199bfd} }, -/**/ {{0xe3b081f4, 0xbfd34f8f} }, -/**/ {{0x3e2c0515, 0x3c7d7209} }, -/**/ {{0x3f5e2d2f, 0xbfb9c7a0} }, -/**/ {{0xea3bd312, 0xbc20b02e} }, -/**/ {{0x6626c39a, 0x3fc75195} }, -/**/ {{0xb4219a8a, 0x3c6f30d2} }, -/**/ {{0xf55dfea5, 0xbfaa57a8} }, -/**/ {{0xe771fa17, 0xbfb2c82d} }, -/**/ {{0xc3654ab4, 0x3fb36967} }, -/**/ {{0xa23eb6eb, 0x3f11f322} }, -/**/ {{0x8ae579b1, 0xbfa9cc78} } }, -/**/ {{{0x00000000, 0x3fdac000} }, -/**/ {{0x43a34907, 0x3fd9566d} }, -/**/ {{0x37e0af2b, 0x3c69b015} }, -/**/ {{0x40ddf8d3, 0x3feb3db5} }, -/**/ {{0x793c10b8, 0xbc616f46} }, -/**/ {{0xc8537217, 0xbfd3629f} }, -/**/ {{0x38143614, 0x3c505738} }, -/**/ {{0xbf75f20a, 0xbfb90d98} }, -/**/ {{0x6b842647, 0x3c4dc715} }, -/**/ {{0x494dd1e6, 0x3fc7301c} }, -/**/ {{0xf49f85b4, 0x3c5ec3d6} }, -/**/ {{0xdbdd23b1, 0xbfab35db} }, -/**/ {{0xc8407216, 0xbfb2404f} }, -/**/ {{0x255139f9, 0x3fb367bf} }, -/**/ {{0x65acd6da, 0xbf5b8a0d} }, -/**/ {{0x8052f51d, 0xbfa92704} } }, -/**/ {{{0x00000000, 0x3fdb0000} }, -/**/ {{0x454d6b18, 0x3fd98cd5} }, -/**/ {{0x88fd0a77, 0x3c79e6c9} }, -/**/ {{0x5323eb6a, 0x3feb2a49} }, -/**/ {{0x70cc9678, 0xbc572202} }, -/**/ {{0x8cd58cc4, 0xbfd37524} }, -/**/ {{0xda42aa4e, 0x3c6978a3} }, -/**/ {{0x54d5f784, 0xbfb854a1} }, -/**/ {{0xb33b3d0d, 0xbc5e9a15} }, -/**/ {{0x67aa0c46, 0x3fc70d91} }, -/**/ {{0xa4ac9df8, 0xbc6aa72f} }, -/**/ {{0xd0665a46, 0xbfac0db0} }, -/**/ {{0xb428e30d, 0xbfb1b889} }, -/**/ {{0x134448b0, 0x3fb3628d} }, -/**/ {{0x67619c9c, 0xbf6bbbc1} }, -/**/ {{0x53e1f653, 0xbfa87ead} } }, -/**/ {{{0x00000000, 0x3fdb4000} }, -/**/ {{0x5cc58107, 0x3fd9c316} }, -/**/ {{0x02250cfb, 0x3c4b6696} }, -/**/ {{0x25df55f4, 0x3feb16cb} }, -/**/ {{0xf48e26bc, 0xbc653abc} }, -/**/ {{0x00742189, 0xbfd3871f} }, -/**/ {{0xc05df451, 0xbc725ae2} }, -/**/ {{0x6dd13675, 0xbfb79cc2} }, -/**/ {{0x991905e4, 0x3be1d4e0} }, -/**/ {{0xb5b8147e, 0x3fc6e9fc} }, -/**/ {{0xa57d4eca, 0x3c46463b} }, -/**/ {{0x86c1db89, 0xbfacdf29} }, -/**/ {{0x1ab8d1c4, 0xbfb130f4} }, -/**/ {{0x38881228, 0x3fb359e9} }, -/**/ {{0x53bec2ff, 0xbf74a987} }, -/**/ {{0xe5af58b6, 0xbfa7d3c5} } }, -/**/ {{{0x00000000, 0x3fdb8000} }, -/**/ {{0x66168002, 0x3fd9f930} }, -/**/ {{0x47c9439a, 0xbc7c8270} }, -/**/ {{0x42f6e2c9, 0x3feb033b} }, -/**/ {{0xc48702a7, 0xbc6eb80c} }, -/**/ {{0xf8a76337, 0xbfd3988f} }, -/**/ {{0x5b1bb38a, 0xbc636968} }, -/**/ {{0x39212b04, 0xbfb6e604} }, -/**/ {{0xba255e71, 0xbc3c2e20} }, -/**/ {{0x251e2d41, 0x3fc6c566} }, -/**/ {{0x47236369, 0x3c230ab3} }, -/**/ {{0xd40b3417, 0xbfadaa48} }, -/**/ {{0xc484f2cc, 0xbfb0a9a6} }, -/**/ {{0x9cb4573e, 0x3fb34deb} }, -/**/ {{0x1def6f17, 0xbf7b44ca} }, -/**/ {{0x73d683b8, 0xbfa7269f} } }, -/**/ {{{0x00000000, 0x3fdbc000} }, -/**/ {{0x3e5e530b, 0x3fda2f23} }, -/**/ {{0xf797086b, 0x3c5814d5} }, -/**/ {{0x3378ba79, 0x3feaef9a} }, -/**/ {{0x4476e241, 0x3c7da16a} }, -/**/ {{0x50f2beab, 0xbfd3a978} }, -/**/ {{0xad5a31ea, 0x3c7b7e7f} }, -/**/ {{0xa602212f, 0xbfb6306e} }, -/**/ {{0x9ec38d55, 0xbc31ec15} }, -/**/ {{0xa3477c6a, 0x3fc69fd5} }, -/**/ {{0xb2996038, 0x3c571f2f} }, -/**/ {{0xa6cf162d, 0xbfae6f12} }, -/**/ {{0xd0cb2655, 0xbfb022b8} }, -/**/ {{0x9842912f, 0x3fb33eac} }, -/**/ {{0x4919e78d, 0xbf80d789} }, -/**/ {{0x8037e242, 0xbfa67789} } }, -/**/ {{{0x00000000, 0x3fdc0000} }, -/**/ {{0xc3cc23fd, 0x3fda64ee} }, -/**/ {{0x1b50b7ff, 0xbc724dec} }, -/**/ {{0x7f94905e, 0x3feadbe8} }, -/**/ {{0x7f94905e, 0x3c2adbe8} }, -/**/ {{0xeab54af9, 0xbfd3b9d8} }, -/**/ {{0x54fd0941, 0x3c75b97d} }, -/**/ {{0x645a7f9e, 0xbfb57c09} }, -/**/ {{0x09320811, 0xbc5e79f6} }, -/**/ {{0x180938f2, 0x3fc67953} }, -/**/ {{0xe7aee726, 0x3c6246f2} }, -/**/ {{0xff0ea012, 0xbfaf2d8b} }, -/**/ {{0x66c7250c, 0xbfaf3881} }, -/**/ {{0xc95ff694, 0x3fb32c44} }, -/**/ {{0x25d7ff49, 0xbf83f3f0} }, -/**/ {{0xb848e1d1, 0xbfa5c6d1} } }, -/**/ {{{0x00000000, 0x3fdc4000} }, -/**/ {{0xd59e98cf, 0x3fda9a92} }, -/**/ {{0xff75d817, 0x3c42e42d} }, -/**/ {{0xae95dea9, 0x3feac826} }, -/**/ {{0x633dec57, 0xbc534eec} }, -/**/ {{0xacfa5b18, 0xbfd3c9b2} }, -/**/ {{0x6c4d8d27, 0x3c7a7e0c} }, -/**/ {{0xe4ecc0f6, 0xbfb4c8db} }, -/**/ {{0xc0c32772, 0xbc534990} }, -/**/ {{0x6451e377, 0x3fc651e6} }, -/**/ {{0x2a9bb1f1, 0xbc6ea814} }, -/**/ {{0xe62bc1b2, 0xbfafe5ba} }, -/**/ {{0x65fe3642, 0xbfae2ca8} }, -/**/ {{0x09015968, 0x3fb316cd} }, -/**/ {{0x3ce97a26, 0xbf86f764} }, -/**/ {{0xdee8421b, 0xbfa514c3} } }, -/**/ {{{0x00000000, 0x3fdc8000} }, -/**/ {{0x5422058b, 0x3fdad00f} }, -/**/ {{0x3891d2e8, 0x3c7fc4c3} }, -/**/ {{0x46de51cf, 0x3feab455} }, -/**/ {{0xdbc38cc9, 0xbc5b834a} }, -/**/ {{0x844a38eb, 0xbfd3d906} }, -/**/ {{0xbc44eee8, 0x3c6198e5} }, -/**/ {{0x5993cade, 0xbfb416ed} }, -/**/ {{0xfa289b6c, 0xbc235ccb} }, -/**/ {{0x60e2a3af, 0x3fc62997} }, -/**/ {{0xcf7bda0e, 0xbc69a660} }, -/**/ {{0x33612b72, 0xbfb04bd3} }, -/**/ {{0xcf62bcd9, 0xbfad2210} }, -/**/ {{0x603bfc37, 0x3fb2fe5e} }, -/**/ {{0xa9bce7ec, 0xbf89e1ba} }, -/**/ {{0xb83029d5, 0xbfa461a9} } }, -/**/ {{{0x00000000, 0x3fdcc000} }, -/**/ {{0x20ae9344, 0x3fdb0564} }, -/**/ {{0x46363455, 0xbc793139} }, -/**/ {{0xcde0631f, 0x3feaa074} }, -/**/ {{0x143fe6d4, 0x3c84b49a} }, -/**/ {{0x627b115b, 0xbfd3e7d5} }, -/**/ {{0x332989c0, 0x3c77a502} }, -/**/ {{0xb589513f, 0xbfb36644} }, -/**/ {{0x105eec96, 0x3c3abdc9} }, -/**/ {{0xdd12e0be, 0x3fc6006d} }, -/**/ {{0x5d67cb35, 0xbc4f0281} }, -/**/ {{0x4238ba83, 0xbfb0a1ab} }, -/**/ {{0x73889526, 0xbfac18e3} }, -/**/ {{0xfde6351a, 0x3fb2e311} }, -/**/ {{0xc256833f, 0xbf8cb2d2} }, -/**/ {{0xf73e36f0, 0xbfa3adca} } }, -/**/ {{{0x00000000, 0x3fdd0000} }, -/**/ {{0x1da65c6c, 0x3fdb3a91} }, -/**/ {{0xb1ca5040, 0x3c7ae187} }, -/**/ {{0xc81a2254, 0x3fea8c85} }, -/**/ {{0x8d67728b, 0xbc83c191} }, -/**/ {{0x3e8218e0, 0xbfd3f620} }, -/**/ {{0x52bd43ef, 0xbc72bf32} }, -/**/ {{0xadb5f398, 0xbfb2b6e8} }, -/**/ {{0x6b74d451, 0x3c340287} }, -/**/ {{0x9d9e25fc, 0x3fc5d671} }, -/**/ {{0x518d7a71, 0x3c639669} }, -/**/ {{0x19cc29a0, 0xbfb0f46a} }, -/**/ {{0xc1a69750, 0xbfab1147} }, -/**/ {{0x2c826e6b, 0x3fb2c501} }, -/**/ {{0xcbc1b186, 0xbf8f6a95} }, -/**/ {{0x2de89811, 0xbfa2f96d} } }, -/**/ {{{0x00000000, 0x3fdd4000} }, -/**/ {{0x2e737efc, 0x3fdb6f96} }, -/**/ {{0x64981e71, 0xbc5ca534} }, -/**/ {{0xb9102ddc, 0x3fea7888} }, -/**/ {{0x3c46d7d5, 0xbc7791b2} }, -/**/ {{0x1444efb5, 0xbfd403e8} }, -/**/ {{0x4f3d22a6, 0xbc6047c5} }, -/**/ {{0xb90ac1cc, 0xbfb208df} }, -/**/ {{0x2d2115d8, 0x3c4078b1} }, -/**/ {{0x5b7c61a2, 0x3fc5abaa} }, -/**/ {{0x2bd2d19a, 0x3c3eef6a} }, -/**/ {{0xa8850e1a, 0xbfb14414} }, -/**/ {{0xc6580343, 0xbfaa0b63} }, -/**/ {{0x4876cfdf, 0x3fb2a445} }, -/**/ {{0x562d0829, 0xbf91047b} }, -/**/ {{0xbe562a83, 0xbfa244d3} } }, -/**/ {{{0x00000000, 0x3fdd8000} }, -/**/ {{0x378624a5, 0x3fdba473} }, -/**/ {{0xb46e4aff, 0x3c7519a1} }, -/**/ {{0x2348d9a3, 0x3fea647e} }, -/**/ {{0x9156e59f, 0xbc84f6c2} }, -/**/ {{0xe46b4c91, 0xbfd4112d} }, -/**/ {{0x110fe0b7, 0xbc78c11d} }, -/**/ {{0x10e3d572, 0xbfb15c30} }, -/**/ {{0x4427c00b, 0x3c53b45b} }, -/**/ {{0xc2c486ae, 0x3fc5801f} }, -/**/ {{0xc20ced8b, 0xbc49bb5e} }, -/**/ {{0x4cddef65, 0xbfb190b0} }, -/**/ {{0x2ae4bcd0, 0xbfa9075c} }, -/**/ {{0xb69396b9, 0x3fb280f7} }, -/**/ {{0xce179ccb, 0xbf9246f8} }, -/**/ {{0xce6e9b2b, 0xbfa1903f} } }, -/**/ {{{0x00000000, 0x3fddc000} }, -/**/ {{0x1e528192, 0x3fdbd928} }, -/**/ {{0x39af6b66, 0xbc74b154} }, -/**/ {{0x88478403, 0x3fea5066} }, -/**/ {{0xbe71620f, 0xbc85c7e8} }, -/**/ {{0xb430f4ac, 0xbfd41df2} }, -/**/ {{0xe79c7595, 0xbc55db82} }, -/**/ {{0xb173ac76, 0xbfb0b0df} }, -/**/ {{0xe4738d25, 0x3c57f440} }, -/**/ {{0x7199976b, 0x3fc553d9} }, -/**/ {{0x2a872a12, 0x3c54990c} }, -/**/ {{0xd137dd01, 0xbfb1da42} }, -/**/ {{0x350bfdb5, 0xbfa80554} }, -/**/ {{0xdae9e17f, 0x3fb25b31} }, -/**/ {{0xe9e265b4, 0xbf937cc5} }, -/**/ {{0x3d16a202, 0xbfa0dbf0} } }, -/**/ {{{0x00000000, 0x3fde0000} }, -/**/ {{0xc94ec9f0, 0x3fdc0db4} }, -/**/ {{0x70934c34, 0xbc7cc1ce} }, -/**/ {{0x68881898, 0x3fea3c42} }, -/**/ {{0xe5c3bd97, 0x3c8f907f} }, -/**/ {{0x8d38076d, 0xbfd42a37} }, -/**/ {{0x7e19d62d, 0xbc6b8354} }, -/**/ {{0x5a36f1bd, 0xbfb006f4} }, -/**/ {{0xca398c09, 0xbc41701e} }, -/**/ {{0xf7221a2a, 0x3fc526de} }, -/**/ {{0x8041247e, 0xbc211868} }, -/**/ {{0x67b0229a, 0xbfb220d2} }, -/**/ {{0xc74d0c66, 0xbfa7056d} }, -/**/ {{0x0ff472e2, 0x3fb2330d} }, -/**/ {{0x9cb74216, 0xbf94a5e9} }, -/**/ {{0x992b9e1f, 0xbfa02821} } }, -/**/ {{{0x00000000, 0x3fde4000} }, -/**/ {{0x1ff11eb7, 0x3fdc4219} }, -/**/ {{0x434b3eee, 0xbc7b17df} }, -/**/ {{0x437ac09e, 0x3fea2812} }, -/**/ {{0xf9618c21, 0xbc540368} }, -/**/ {{0x7d5ba406, 0xbfd435fd} }, -/**/ {{0x5e0a732a, 0x3c75605b} }, -/**/ {{0x1ce0c104, 0xbfaebce7} }, -/**/ {{0xd4eb3297, 0xbc446d02} }, -/**/ {{0xd289f60b, 0x3fc4f937} }, -/**/ {{0xe736fa8b, 0x3c5b88b7} }, -/**/ {{0xa5f78db4, 0xbfb26465} }, -/**/ {{0x61a972db, 0xbfa607c9} }, -/**/ {{0x9e13b088, 0x3fb208a2} }, -/**/ {{0x06c33653, 0xbf95c26f} }, -/**/ {{0x346237b1, 0xbf9eea1c} } }, -/**/ {{{0x00000000, 0x3fde8000} }, -/**/ {{0x0aad71f9, 0x3fdc7655} }, -/**/ {{0xff7043e4, 0xbc774b8b} }, -/**/ {{0x977fc070, 0x3fea13d6} }, -/**/ {{0xd9440881, 0xbc86c451} }, -/**/ {{0x9682eee2, 0xbfd44145} }, -/**/ {{0xb13901b4, 0x3c74156f} }, -/**/ {{0x2b58de73, 0xbfad6ec5} }, -/**/ {{0xdf653988, 0x3c2ced26} }, -/**/ {{0x720eb232, 0x3fc4caeb} }, -/**/ {{0x92f3f809, 0x3c614246} }, -/**/ {{0x812caa81, 0xbfb2a503} }, -/**/ {{0x22dc20a7, 0xbfa50c86} }, -/**/ {{0xb35de59d, 0x3fb1dc0b} }, -/**/ {{0x4adc8c38, 0xbf96d265} }, -/**/ {{0x35444e0c, 0xbf9d85db} } }, -/**/ {{{0x00000000, 0x3fdec000} }, -/**/ {{0x72f3631b, 0x3fdcaa68} }, -/**/ {{0x81636f48, 0x3c295067} }, -/**/ {{0xe1e381db, 0x3fe9ff8f} }, -/**/ {{0x00701e1c, 0xbc6fffe6} }, -/**/ {{0xee747cac, 0xbfd44c10} }, -/**/ {{0xced401ad, 0xbc7a7f22} }, -/**/ {{0xf898de26, 0xbfac238c} }, -/**/ {{0xdaa7d32f, 0x3c1eb191} }, -/**/ {{0x32160e42, 0x3fc49c01} }, -/**/ {{0x03d0023c, 0x3c649f02} }, -/**/ {{0x49ba4fb7, 0xbfb2e2b3} }, -/**/ {{0xca00d6c7, 0xbfa413c1} }, -/**/ {{0x5bc495cf, 0x3fb1ad61} }, -/**/ {{0x63d0ff69, 0xbf97d5df} }, -/**/ {{0x27af7010, 0xbf9c23eb} } }, -/**/ {{{0x00000000, 0x3fdf0000} }, -/**/ {{0x432c1351, 0x3fdcde53} }, -/**/ {{0x4418f1ad, 0xbc7a2cfa} }, -/**/ {{0x9edacacc, 0x3fe9eb3e} }, -/**/ {{0x87d23ca5, 0xbc8942c5} }, -/**/ {{0x9eaa285d, 0xbfd45660} }, -/**/ {{0x52cf85b4, 0x3c4fe8e6} }, -/**/ {{0x28319af3, 0xbfaadb48} }, -/**/ {{0x31b456b0, 0xbc207b46} }, -/**/ {{0x5c4ee7c2, 0x3fc46c80} }, -/**/ {{0xb4443c76, 0x3c4bdfc1} }, -/**/ {{0xa73bc33f, 0xbfb31d7c} }, -/**/ {{0xb8a731f5, 0xbfa31d98} }, -/**/ {{0x798f7481, 0x3fb17cbc} }, -/**/ {{0xf977e9ca, 0xbf98ccf3} }, -/**/ {{0x36ea1578, 0xbf9ac4b2} } }, -/**/ {{{0x00000000, 0x3fdf4000} }, -/**/ {{0x66b7f2ad, 0x3fdd1215} }, -/**/ {{0x35886c30, 0x3c7be678} }, -/**/ {{0x497f1fed, 0x3fe9d6e3} }, -/**/ {{0x9a35c454, 0xbc8ec056} }, -/**/ {{0xc4255988, 0xbfd46035} }, -/**/ {{0x7144427c, 0x3c7ddb7b} }, -/**/ {{0xe9b44acd, 0xbfa995ff} }, -/**/ {{0xb529cf65, 0x3c3c9d56} }, -/**/ {{0x26dc5cda, 0x3fc43c70} }, -/**/ {{0xfde6cd82, 0x3c6d6ee6} }, -/**/ {{0x9467b39a, 0xbfb35567} }, -/**/ {{0xf54ca1ba, 0xbfa22a25} }, -/**/ {{0xbe2d5d2d, 0x3fb14a35} }, -/**/ {{0x35a34e74, 0xbf99b7bd} }, -/**/ {{0xc4948489, 0xbf996891} } }, -/**/ {{{0x00000000, 0x3fdf8000} }, -/**/ {{0xc9ec862b, 0x3fdd45ae} }, -/**/ {{0x163ef92d, 0x3c689421} }, -/**/ {{0x5bcb52c7, 0x3fe9c27e} }, -/**/ {{0xf148a350, 0xbc892d91} }, -/**/ {{0x7f43bff0, 0xbfd46991} }, -/**/ {{0x8da13c27, 0xbc738b23} }, -/**/ {{0xf9f19dcd, 0xbfa853bc} }, -/**/ {{0x2433c5cf, 0x3c2ea7a9} }, -/**/ {{0xb38b19e0, 0x3fc40bd7} }, -/**/ {{0x1c2a2863, 0xbc5d466e} }, -/**/ {{0x5b0333a7, 0xbfb38a7c} }, -/**/ {{0x2e3896d7, 0xbfa13983} }, -/**/ {{0xa35b7545, 0x3fb115e5} }, -/**/ {{0x99098556, 0xbf9a9658} }, -/**/ {{0x693ac59e, 0xbf980fe6} } }, -/**/ {{{0x00000000, 0x3fdfc000} }, -/**/ {{0x5a1226f5, 0x3fdd791f} }, -/**/ {{0xa5b64a76, 0xbc64017e} }, -/**/ {{0x4e983ae9, 0x3fe9ae10} }, -/**/ {{0x52b783d7, 0xbc8d45ed} }, -/**/ {{0xf394891f, 0xbfd47274} }, -/**/ {{0x22e08713, 0xbc7cd478} }, -/**/ {{0xa445379d, 0xbfa71487} }, -/**/ {{0x831d87b7, 0x3c1569aa} }, -/**/ {{0x0f10bc36, 0x3fc3dabe} }, -/**/ {{0x1cb9bbe6, 0x3bd8df2b} }, -/**/ {{0x8fddd862, 0xbfb3bcc3} }, -/**/ {{0xbcb632d9, 0xbfa04bc8} }, -/**/ {{0x64a26d77, 0x3fb0dfe4} }, -/**/ {{0xd04027d1, 0xbf9b68e6} }, -/**/ {{0xf792c5d9, 0xbf96bb07} } }, -/**/ {{{0x00000000, 0x3fe00000} }, -/**/ {{0x0561bb4f, 0x3fddac67} }, -/**/ {{0x222f65e2, 0x3c7a2b7f} }, -/**/ {{0x9999999a, 0x3fe99999} }, -/**/ {{0x9999999a, 0xbc899999} }, -/**/ {{0x47ae147b, 0xbfd47ae1} }, -/**/ {{0xeb851eb8, 0x3c5eb851} }, -/**/ {{0xc3ece2a5, 0xbfa5d867} }, -/**/ {{0xd7b900af, 0xbc3a485c} }, -/**/ {{0x30553261, 0x3fc3a92a} }, -/**/ {{0x94467382, 0x3c6f06f6} }, -/**/ {{0x0ed80a18, 0xbfb3ec46} }, -/**/ {{0x514d88d8, 0xbf9ec21b} }, -/**/ {{0xf929a833, 0x3fb0a849} }, -/**/ {{0x88dfb80c, 0xbf9c2f8b} }, -/**/ {{0x8245bf09, 0xbf956a49} } }, -/**/ {{{0x00000000, 0x3fe02000} }, -/**/ {{0xbb026974, 0x3fdddf85} }, -/**/ {{0x0c0a1226, 0x3c643bbb} }, -/**/ {{0xb35b2797, 0x3fe9851a} }, -/**/ {{0x18a8fead, 0x3c89cd14} }, -/**/ {{0xa5042a2d, 0xbfd482d7} }, -/**/ {{0xa8224d16, 0x3c0dbc04} }, -/**/ {{0xc56ade02, 0xbfa49f64} }, -/**/ {{0x47da7eea, 0x3c451e52} }, -/**/ {{0xf7c5fe7d, 0x3fc37722} }, -/**/ {{0xd22c4b5c, 0xbc5165be} }, -/**/ {{0xf6f48c5d, 0xbfb4190c} }, -/**/ {{0x58d0c132, 0xbf9cf2cf} }, -/**/ {{0x0ddfdd74, 0x3fb06f2e} }, -/**/ {{0x46e65336, 0xbf9cea6d} }, -/**/ {{0x6423af3b, 0xbf941df9} } }, -/**/ {{{0x00000000, 0x3fe04000} }, -/**/ {{0x6b0744b0, 0x3fde127b} }, -/**/ {{0x6398d4ab, 0xbc52b098} }, -/**/ {{0x113dcc5a, 0x3fe97094} }, -/**/ {{0x4de8c575, 0xbc842780} }, -/**/ {{0x37beb8e5, 0xbfd48a59} }, -/**/ {{0x9dc7541e, 0xbc601dd2} }, -/**/ {{0xa7f2a8fe, 0xbfa36985} }, -/**/ {{0x7437d42d, 0xbc45e414} }, -/**/ {{0x2eb33dd6, 0x3fc344af} }, -/**/ {{0xe3a3193c, 0xbc6d66e9} }, -/**/ {{0xa6763232, 0xbfb44321} }, -/**/ {{0x7217dfc9, 0xbf9b29d6} }, -/**/ {{0xfff8a866, 0x3fb034a7} }, -/**/ {{0x3a6e931d, 0xbf9d99b5} }, -/**/ {{0x4a9f7e19, 0xbf92d661} } }, -/**/ {{{0x00000000, 0x3fe06000} }, -/**/ {{0x066cf51a, 0x3fde4548} }, -/**/ {{0x12ce98f2, 0x3c43a3aa} }, -/**/ {{0x2774fe53, 0x3fe95c06} }, -/**/ {{0x3b851412, 0x3c810dfd} }, -/**/ {{0x2e911e43, 0xbfd49167} }, -/**/ {{0x09466fcd, 0xbc7f6506} }, -/**/ {{0xfedfb0c1, 0xbfa236d0} }, -/**/ {{0x79cb63a9, 0xbc3f6870} }, -/**/ {{0x86b6561c, 0x3fc311d5} }, -/**/ {{0x9543fc9a, 0x3c561982} }, -/**/ {{0xb70aa5a7, 0xbfb46a8d} }, -/**/ {{0xf5ac1efc, 0xbf996756} }, -/**/ {{0xaf7c84b3, 0x3faff19d} }, -/**/ {{0x15ce96b8, 0xbf9e3d8f} }, -/**/ {{0x42726021, 0xbf9193c6} } }, -/**/ {{{0x00000000, 0x3fe08000} }, -/**/ {{0x7f175a34, 0x3fde77eb} }, -/**/ {{0xc1bf3435, 0x3c70e53d} }, -/**/ {{0x69044ba4, 0x3fe94771} }, -/**/ {{0x92d5fbc1, 0xbc7d53e2} }, -/**/ {{0xba91fd89, 0xbfd49802} }, -/**/ {{0xc3c8c4f3, 0x3c71963e} }, -/**/ {{0xf33546d5, 0xbfa1074c} }, -/**/ {{0xc71ad288, 0x3c4bc296} }, -/**/ {{0x99222665, 0x3fc2de9c} }, -/**/ {{0x28dadb64, 0x3c6e4a10} }, -/**/ {{0xfa031cb1, 0xbfb48f5a} }, -/**/ {{0xbc0c6420, 0xbf97ab74} }, -/**/ {{0x876d0f75, 0x3faf7772} }, -/**/ {{0xe431fc96, 0xbf9ed628} }, -/**/ {{0xc64515ec, 0xbf905668} } }, -/**/ {{{0x00000000, 0x3fe0a000} }, -/**/ {{0xc7cf28c4, 0x3fdeaa65} }, -/**/ {{0xeca3bf05, 0x3c62fb2c} }, -/**/ {{0x47bd0aaa, 0x3fe932d6} }, -/**/ {{0x697b6e3c, 0x3c6bdfec} }, -/**/ {{0x0f13a7e8, 0xbfd49e2d} }, -/**/ {{0x20412940, 0x3c6198c5} }, -/**/ {{0x8a4e92df, 0xbf9fb5fe} }, -/**/ {{0x6309a51a, 0xbc3cbb58} }, -/**/ {{0xe67c9829, 0x3fc2ab0a} }, -/**/ {{0x06a4c4ef, 0xbc647643} }, -/**/ {{0x749bc711, 0xbfb4b193} }, -/**/ {{0x27bef265, 0xbf95f651} }, -/**/ {{0x28347ebf, 0x3faefafb} }, -/**/ {{0xe0c06e2f, 0xbf9f63b2} }, -/**/ {{0x9e7b9dd7, 0xbf8e3d09} } }, -/**/ {{{0x00000000, 0x3fe0c000} }, -/**/ {{0xd43f8435, 0x3fdedcb6} }, -/**/ {{0x330884e4, 0xbc5fc976} }, -/**/ {{0x343c31e5, 0x3fe91e35} }, -/**/ {{0x9bb96799, 0xbc8fd46f} }, -/**/ {{0x617d19a1, 0xbfd4a3e7} }, -/**/ {{0xea58b250, 0xbc7d7303} }, -/**/ {{0x9b55d156, 0xbf9d63da} }, -/**/ {{0xd5b4cc6c, 0xbc14bf72} }, -/**/ {{0xd6016a7c, 0x3fc27726} }, -/**/ {{0x435ec4b4, 0x3c4eba22} }, -/**/ {{0x5c52b3c6, 0xbfb4d141} }, -/**/ {{0x2fdd9fbd, 0xbf94480b} }, -/**/ {{0x6d3af4b6, 0x3fae7c63} }, -/**/ {{0x4e61315b, 0xbf9fe65f} }, -/**/ {{0xcea37283, 0xbf8bd8a3} } }, -/**/ {{{0x00000000, 0x3fe0e000} }, -/**/ {{0x98f393d0, 0x3fdf0ede} }, -/**/ {{0x87cb1894, 0xbc72f40a} }, -/**/ {{0x9de85688, 0x3fe9098e} }, -/**/ {{0xa3791e64, 0xbc7c2de1} }, -/**/ {{0xe9238ed7, 0xbfd4a932} }, -/**/ {{0x28864386, 0xbc67a1bb} }, -/**/ {{0x001dec68, 0xbf9b1838} }, -/**/ {{0x8f0ffbdd, 0xbc33ee0e} }, -/**/ {{0xb52e1005, 0x3fc242f6} }, -/**/ {{0x371fd2c1, 0xbc5476eb} }, -/**/ {{0x134edf2d, 0xbfb4ee6f} }, -/**/ {{0x6b13becc, 0xbf92a0bf} }, -/**/ {{0x650f859c, 0x3fadfbd6} }, -/**/ {{0x281586f4, 0xbfa02f31} }, -/**/ {{0x7a73449e, 0xbf898006} } }, -/**/ {{{0x00000000, 0x3fe10000} }, -/**/ {{0x0b541418, 0x3fdf40dd} }, -/**/ {{0xdc382a23, 0xbc6a3992} }, -/**/ {{0xf2efd135, 0x3fe8f4e2} }, -/**/ {{0xd4218911, 0xbc74c3c0} }, -/**/ {{0xdf24b2d1, 0xbfd4ae10} }, -/**/ {{0x79d0ac37, 0x3c713b12} }, -/**/ {{0xd7365f3f, 0xbf98d31f} }, -/**/ {{0x62531dc5, 0xbc18bf3b} }, -/**/ {{0xb7567664, 0x3fc20e80} }, -/**/ {{0xd450197f, 0xbc54a699} }, -/**/ {{0x24d80ddd, 0xbfb50927} }, -/**/ {{0x1b0516ab, 0xbf910088} }, -/**/ {{0x4a356567, 0x3fad797e} }, -/**/ {{0xe14758ed, 0xbfa065f8} }, -/**/ {{0x73d2f6bb, 0xbf87338f} } }, -/**/ {{{0x00000000, 0x3fe12000} }, -/**/ {{0x21a4e495, 0x3fdf72b2} }, -/**/ {{0x0f7eb740, 0x3c5489c2} }, -/**/ {{0xa0470831, 0x3fe8e032} }, -/**/ {{0xe75570cd, 0xbc8c154a} }, -/**/ {{0x7e416c35, 0xbfd4b282} }, -/**/ {{0x60646afd, 0xbc7f1837} }, -/**/ {{0x7a6bec27, 0xbf96949a} }, -/**/ {{0xe6b77ba9, 0x3c38238f} }, -/**/ {{0xf5428c61, 0x3fc1d9ca} }, -/**/ {{0xcd7881aa, 0x3c6a968d} }, -/**/ {{0x41e00b6e, 0xbfb52174} }, -/**/ {{0x702ad3de, 0xbf8ecefa} }, -/**/ {{0x7c8ae0dc, 0x3facf584} }, -/**/ {{0x8aa44fa8, 0xbfa097a2} }, -/**/ {{0x2ed63408, 0xbf84f394} } }, -/**/ {{{0x00000000, 0x3fe14000} }, -/**/ {{0xd3029259, 0x3fdfa45d} }, -/**/ {{0xdc28d8b5, 0xbc7ca563} }, -/**/ {{0x11a6de80, 0x3fe8cb7e} }, -/**/ {{0xac22b8f8, 0x3c610be6} }, -/**/ {{0x02b9488a, 0xbfd4b689} }, -/**/ {{0xaf91d442, 0x3c5ea0bd} }, -/**/ {{0x821fd17e, 0xbf945caf} }, -/**/ {{0x0e51a049, 0x3c38e464} }, -/**/ {{0x6cd45aad, 0x3fc1a4db} }, -/**/ {{0xf4200d5e, 0x3c2288e0} }, -/**/ {{0x3d9dd7c4, 0xbfb53761} }, -/**/ {{0xfb107457, 0xbf8bab68} }, -/**/ {{0x7b46ebd1, 0x3fac7011} }, -/**/ {{0x93134a8f, 0xbfa0c44a} }, -/**/ {{0xf1fa4589, 0xbf82c061} } }, -/**/ {{{0x00000000, 0x3fe16000} }, -/**/ {{0x175fdf83, 0x3fdfd5e0} }, -/**/ {{0x1ec49b15, 0x3c63a87b} }, -/**/ {{0xb18b4749, 0x3fe8b6c5} }, -/**/ {{0xb7d58c0a, 0xbc5fabb8} }, -/**/ {{0xaa26890c, 0xbfd4ba25} }, -/**/ {{0x0ef9b688, 0x3c50e395} }, -/**/ {{0xc8a9b4c0, 0xbf922b65} }, -/**/ {{0xd319146f, 0x3c2835ee} }, -/**/ {{0x00b681bd, 0x3fc16fb8} }, -/**/ {{0x279133b0, 0x3c1df633} }, -/**/ {{0x0a3b410c, 0xbfb54af9} }, -/**/ {{0xebe14682, 0xbf889682} }, -/**/ {{0xdf89e086, 0x3fabe94c} }, -/**/ {{0x0e55a6f8, 0xbfa0ec0e} }, -/**/ {{0x08af68f3, 0xbf809a3e} } }, -/**/ {{{0x00000000, 0x3fe18000} }, -/**/ {{0x73c1a40c, 0x3fe0039c} }, -/**/ {{0x49c9d593, 0xbc8b32c9} }, -/**/ {{0xe931fcd3, 0x3fe8a209} }, -/**/ {{0x8e68c94c, 0x3c6cb8f0} }, -/**/ {{0xb35ad2d8, 0xbfd4bd59} }, -/**/ {{0xcaa606b4, 0xbc61ac1a} }, -/**/ {{0x6dc339ef, 0xbf9000c3} }, -/**/ {{0xaeaeaa73, 0x3c2c62e2} }, -/**/ {{0x7812ee2d, 0x3fc13a66} }, -/**/ {{0x948ffe5b, 0x3c6a8cc2} }, -/**/ {{0xb5955c9c, 0xbfb55c46} }, -/**/ {{0x0fd2b503, 0xbf85906b} }, -/**/ {{0x577de2da, 0x3fab615d} }, -/**/ {{0xa34d31ec, 0xbfa10f0a} }, -/**/ {{0xefe48ad0, 0xbf7d02cb} } }, -/**/ {{{0x00000000, 0x3fe1a000} }, -/**/ {{0x1e82422d, 0x3fe01c34} }, -/**/ {{0xfcca90ee, 0x3c83db44} }, -/**/ {{0x20995a88, 0x3fe88d4b} }, -/**/ {{0x1e42e681, 0x3c802777} }, -/**/ {{0x5e3c840f, 0xbfd4c026} }, -/**/ {{0x3800420d, 0x3c7d7c65} }, -/**/ {{0xb3f88703, 0xbf8bb99b} }, -/**/ {{0x4bf63e82, 0x3c1f62ec} }, -/**/ {{0x7e5193ee, 0x3fc104ec} }, -/**/ {{0xbae4e07d, 0xbc27771e} }, -/**/ {{0x66104515, 0xbfb56b55} }, -/**/ {{0x061a20d1, 0xbf829940} }, -/**/ {{0xa20334d9, 0x3faad868} }, -/**/ {{0x7aba8ee6, 0xbfa12d5e} }, -/**/ {{0x69774b8d, 0xbf78ec1f} } }, -/**/ {{{0x00000000, 0x3fe1c000} }, -/**/ {{0x09250488, 0x3fe034b7} }, -/**/ {{0x8d855410, 0x3c78f9b3} }, -/**/ {{0xbe7f594b, 0x3fe87889} }, -/**/ {{0xc826e7a3, 0xbc7530e1} }, -/**/ {{0xeba4af80, 0xbfd4c28c} }, -/**/ {{0xe6a95faa, 0x3c7104a9} }, -/**/ {{0x846dba10, 0xbf877f13} }, -/**/ {{0x4abd0010, 0x3c2bc924} }, -/**/ {{0xa2deff9f, 0x3fc0cf4f} }, -/**/ {{0xa013c015, 0xbc67d17e} }, -/**/ {{0x577e7899, 0xbfb57830} }, -/**/ {{0xb49ea16d, 0xbf7f6238} }, -/**/ {{0x8ae4a926, 0x3faa4e93} }, -/**/ {{0x2e77f633, 0xbfa14728} }, -/**/ {{0xb81c893e, 0xbf74f0d3} } }, -/**/ {{{0x00000000, 0x3fe1e000} }, -/**/ {{0x314342e6, 0x3fe04d25} }, -/**/ {{0x6442c767, 0xbc81c863} }, -/**/ {{0x2860ad7e, 0x3fe863c6} }, -/**/ {{0x137a2d8f, 0xbc81dcb2} }, -/**/ {{0x9d3dc03a, 0xbfd4c48e} }, -/**/ {{0x197b1db9, 0xbc7d92af} }, -/**/ {{0x5653b1a7, 0xbf8351f6} }, -/**/ {{0x2127dea7, 0xbbe368b4} }, -/**/ {{0x58fa8ca4, 0x3fc09995} }, -/**/ {{0x530429e5, 0xbc446391} }, -/**/ {{0xd81c26eb, 0xbfb582e2} }, -/**/ {{0x3e63c109, 0xbf79b02d} }, -/**/ {{0xe7904294, 0x3fa9c401} }, -/**/ {{0xb933b0f3, 0xbfa15c86} }, -/**/ {{0xd8d860e1, 0xbf711137} } }, -/**/ {{{0x00000000, 0x3fe20000} }, -/**/ {{0x94db30d0, 0x3fe0657e} }, -/**/ {{0x5f6349e6, 0xbc7d5b49} }, -/**/ {{0xc2780614, 0x3fe84f00} }, -/**/ {{0xff3d87fa, 0xbc7fe7b0} }, -/**/ {{0xb562c625, 0xbfd4c62c} }, -/**/ {{0xa78e848c, 0x3c77b2c3} }, -/**/ {{0xb3a4bcb7, 0xbf7e6495} }, -/**/ {{0xe3f2b0a5, 0x3c14eb89} }, -/**/ {{0xf78c0dc4, 0x3fc063c2} }, -/**/ {{0x7539dc13, 0xbc6badf0} }, -/**/ {{0x459eb443, 0xbfb58b78} }, -/**/ {{0x1386e6b4, 0xbf741c83} }, -/**/ {{0x944ff706, 0x3fa938d6} }, -/**/ {{0x66ad4037, 0xbfa16d99} }, -/**/ {{0x01fc736a, 0xbf6a9b1a} } }, -/**/ {{{0x00000000, 0x3fe22000} }, -/**/ {{0x324e9b38, 0x3fe07dc3} }, -/**/ {{0xe04450ac, 0x3c7b70c9} }, -/**/ {{0xefbd6bfe, 0x3fe83a39} }, -/**/ {{0x21f5de26, 0xbc7b2885} }, -/**/ {{0x76ff6c9e, 0xbfd4c768} }, -/**/ {{0xdebc1603, 0x3c56a2c0} }, -/**/ {{0xd9cccfd7, 0xbf76402c} }, -/**/ {{0x4e9786c1, 0xbc1b39c0} }, -/**/ {{0xb900b57a, 0x3fc02ddd} }, -/**/ {{0xea88a215, 0x3c45d916} }, -/**/ {{0x0a58ab40, 0xbfb591fc} }, -/**/ {{0x32a37ac9, 0xbf6d4eb0} }, -/**/ {{0x71fe75f8, 0x3fa8ad33} }, -/**/ {{0xc477a855, 0xbfa17a7f} }, -/**/ {{0x2b035011, 0xbf634c0e} } }, -/**/ {{{0x00000000, 0x3fe24000} }, -/**/ {{0x0861a590, 0x3fe095f3} }, -/**/ {{0x0a15a9f3, 0xbc7121b2} }, -/**/ {{0x11e5c14d, 0x3fe82572} }, -/**/ {{0xacd80b09, 0xbc7df9fc} }, -/**/ {{0x25709bff, 0xbfd4c843} }, -/**/ {{0x1790f484, 0x3c7a9ef6} }, -/**/ {{0x8a0def34, 0xbf6c6d74} }, -/**/ {{0x2a8142d7, 0xbc051e57} }, -/**/ {{0x765e156b, 0x3fbfefd5} }, -/**/ {{0xf0e29c9e, 0xbc3e6048} }, -/**/ {{0x9a724e28, 0xbfb59679} }, -/**/ {{0xcf13e192, 0xbf62a185} }, -/**/ {{0x6433c13f, 0x3fa82139} }, -/**/ {{0x9342e95d, 0xbfa18359} }, -/**/ {{0x8f974107, 0xbf586b34} } }, -/**/ {{{0x00000000, 0x3fe26000} }, -/**/ {{0x1639866c, 0x3fe0ae0e} }, -/**/ {{0xf2de445a, 0x3c7075ab} }, -/**/ {{0x89625f5d, 0x3fe810a9} }, -/**/ {{0x0fcf7262, 0xbc8e4bea} }, -/**/ {{0x0465c69b, 0xbfd4c8be} }, -/**/ {{0xd7f7f89c, 0x3c462ef4} }, -/**/ {{0x4de612d5, 0xbf59210e} }, -/**/ {{0xba53898d, 0xbbf43659} }, -/**/ {{0xfe836c69, 0x3fbf83dd} }, -/**/ {{0x27f5499a, 0xbc36cb56} }, -/**/ {{0x7136edda, 0xbfb598fc} }, -/**/ {{0x00013fb7, 0xbf50634c} }, -/**/ {{0x4fe557c2, 0x3fa79508} }, -/**/ {{0xb8ae41dc, 0xbfa18846} }, -/**/ {{0xe36bd239, 0xbf455fce} } }, -/**/ {{{0x00000000, 0x3fe28000} }, -/**/ {{0x5b5b43da, 0x3fe0c614} }, -/**/ {{0x13b5404f, 0x3c5974fa} }, -/**/ {{0xb560d35c, 0x3fe7fbe0} }, -/**/ {{0xae5a0887, 0xbc84f066} }, -/**/ {{0x57c2e1cb, 0xbfd4c8da} }, -/**/ {{0xe0a3774c, 0x3c73de0e} }, -/**/ {{0x61c69f3c, 0x3f38b341} }, -/**/ {{0x7b200371, 0x3bd7b2e2} }, -/**/ {{0xd351e8ed, 0x3fbf17de} }, -/**/ {{0x650c5a9c, 0x3c5bce38} }, -/**/ {{0x0e77234c, 0xbfb59990} }, -/**/ {{0x99f594ee, 0x3f3006ef} }, -/**/ {{0x1a75a6cc, 0x3fa708bf} }, -/**/ {{0x31a471d5, 0xbfa18967} }, -/**/ {{0x59bf0521, 0x3f24cc7e} } }, -/**/ {{{0x00000000, 0x3fe2a000} }, -/**/ {{0xd7aa6f7d, 0x3fe0de05} }, -/**/ {{0xb1c529ab, 0xbc783684} }, -/**/ {{0xf3cab884, 0x3fe7e717} }, -/**/ {{0x3b1fa4c7, 0x3c7e1b21} }, -/**/ {{0x63830b4b, 0xbfd4c899} }, -/**/ {{0xae3ffeff, 0xbc7b6e32} }, -/**/ {{0xfc06cc4f, 0x3f628757} }, -/**/ {{0x56f01f66, 0xbbb4c155} }, -/**/ {{0x8424efd8, 0x3fbeabe1} }, -/**/ {{0x6e5604ea, 0x3bdf5129} }, -/**/ {{0xf3ffff64, 0xbfb5983f} }, -/**/ {{0x1f564189, 0x3f57ec04} }, -/**/ {{0xa92e6e68, 0x3fa67c7b} }, -/**/ {{0x0542d0ff, 0xbfa186db} }, -/**/ {{0x11a37bde, 0x3f4ee247} } }, -/**/ {{{0x00000000, 0x3fe2c000} }, -/**/ {{0x8b67e295, 0x3fe0f5e2} }, -/**/ {{0x7ec990d0, 0x3be311b1} }, -/**/ {{0xa145af59, 0x3fe7d24f} }, -/**/ {{0xabdb623b, 0xbc83c6d1} }, -/**/ {{0x6b9bdb30, 0xbfd4c7fc} }, -/**/ {{0xd3bbb84b, 0x3c7c2fae} }, -/**/ {{0xc729b366, 0x3f70e125} }, -/**/ {{0x7a19993c, 0x3c1291fb} }, -/**/ {{0x66cf0dd8, 0x3fbe3fef} }, -/**/ {{0xcd5e7640, 0xbc5428b7} }, -/**/ {{0xa3273c21, 0xbfb59517} }, -/**/ {{0x36891acb, 0x3f65adcf} }, -/**/ {{0xe121c017, 0x3fa5f05a} }, -/**/ {{0x384bad65, 0xbfa180c2} }, -/**/ {{0xd31e02a7, 0x3f5bd6f1} } }, -/**/ {{{0x00000000, 0x3fe2e000} }, -/**/ {{0x77307a0d, 0x3fe10daa} }, -/**/ {{0xd44c7b05, 0x3c869c33} }, -/**/ {{0x19337139, 0x3fe7bd88} }, -/**/ {{0x00e777ef, 0xbc7fd248} }, -/**/ {{0xb3e16264, 0xbfd4c704} }, -/**/ {{0xd46ed4e3, 0xbc7ed720} }, -/**/ {{0x62c1daf7, 0x3f7863a5} }, -/**/ {{0x30cc82d1, 0x3c155e73} }, -/**/ {{0x97a241da, 0x3fbdd411} }, -/**/ {{0x9ac44edd, 0x3c27a15a} }, -/**/ {{0x9a6c71a6, 0xbfb59022} }, -/**/ {{0xb5534ebe, 0x3f6f285a} }, -/**/ {{0xa76d3cf7, 0x3fa56478} }, -/**/ {{0xc1240db6, 0xbfa1773c} }, -/**/ {{0x3891a70c, 0x3f63e5a1} } }, -/**/ {{{0x00000000, 0x3fe30000} }, -/**/ {{0x9bfbd2a9, 0x3fe1255d} }, -/**/ {{0xe1c0ee35, 0xbc52bdae} }, -/**/ {{0xb5b1ffa1, 0x3fe7a8c1} }, -/**/ {{0x4e005ea3, 0x3c873e4a} }, -/**/ {{0x7fead5b8, 0xbfd4c5b3} }, -/**/ {{0x55abc25a, 0x3c77958e} }, -/**/ {{0x01e4c970, 0x3f7fcb31} }, -/**/ {{0xc5337fda, 0xbc1ad968} }, -/**/ {{0xf983ecf1, 0x3fbd6850} }, -/**/ {{0x02ed6910, 0xbc3e45e6} }, -/**/ {{0x532f49b6, 0xbfb5896c} }, -/**/ {{0xeaefcf7f, 0x3f7432e2} }, -/**/ {{0xe1db38f0, 0x3fa4d8ef} }, -/**/ {{0x7c5c9def, 0xbfa16a6a} }, -/**/ {{0x7b6fe5d0, 0x3f69a742} } }, -/**/ {{{0x00000000, 0x3fe32000} }, -/**/ {{0xfb1b056e, 0x3fe13cfb} }, -/**/ {{0x6fc3ed38, 0x3c83110e} }, -/**/ {{0xcf9bee6c, 0x3fe793fc} }, -/**/ {{0xd8d91b6c, 0xbc8dc7d2} }, -/**/ {{0x12f7e51f, 0xbfd4c40a} }, -/**/ {{0x0d5d686d, 0x3c7d1e10} }, -/**/ {{0x839d28fa, 0x3f838be8} }, -/**/ {{0x52131640, 0x3c13427a} }, -/**/ {{0x360bfed5, 0x3fbcfcb6} }, -/**/ {{0xa36f599f, 0xbc5e3cb4} }, -/**/ {{0x3f7aa463, 0xbfb58100} }, -/**/ {{0xb76f2bc0, 0x3f78b31e} }, -/**/ {{0x77dd6b80, 0x3fa44dda} }, -/**/ {{0x21c53ca9, 0xbfa15a6b} }, -/**/ {{0x6cd99ed4, 0x3f6f30a7} } }, -/**/ {{{0x00000000, 0x3fe34000} }, -/**/ {{0x9637646a, 0x3fe15485} }, -/**/ {{0x548bf3c3, 0xbc84ba7c} }, -/**/ {{0xbe88c85e, 0x3fe77f39} }, -/**/ {{0x9b6750c8, 0xbc6a983f} }, -/**/ {{0xafd6bee5, 0xbfd4c209} }, -/**/ {{0x5e73e93a, 0x3c7d21ef} }, -/**/ {{0xfc556ca7, 0x3f8724c7} }, -/**/ {{0x42e5673e, 0xbc23cef2} }, -/**/ {{0xbdaef67d, 0x3fbc9149} }, -/**/ {{0x3f04fcdc, 0xbc1e549c} }, -/**/ {{0xc7e4996a, 0xbfb576e9} }, -/**/ {{0xba6ceedb, 0x3f7d14fc} }, -/**/ {{0x53dcdc4a, 0x3fa3c351} }, -/**/ {{0x3a0a53a1, 0xbfa1475e} }, -/**/ {{0x62102619, 0x3f724116} } }, -/**/ {{{0x00000000, 0x3fe36000} }, -/**/ {{0x6f5137e1, 0x3fe16bfa} }, -/**/ {{0xe141bd35, 0x3c79606f} }, -/**/ {{0xd8cd8d65, 0x3fe76a78} }, -/**/ {{0xddf1f71f, 0x3c854a99} }, -/**/ {{0x98cabe40, 0xbfd4bfb3} }, -/**/ {{0x9ef99598, 0xbc61e24d} }, -/**/ {{0x388e6864, 0x3f8ab03d} }, -/**/ {{0xc340d113, 0x3c210541} }, -/**/ {{0xc7f24ec4, 0x3fbc2613} }, -/**/ {{0x0a59af31, 0x3c54042a} }, -/**/ {{0x49833ac1, 0xbfb56b34} }, -/**/ {{0x22f6cd28, 0x3f80ac4f} }, -/**/ {{0x64dac153, 0x3fa3396c} }, -/**/ {{0x14dadf32, 0xbfa13163} }, -/**/ {{0x21aeee27, 0x3f74ce20} } }, -/**/ {{{0x00000000, 0x3fe38000} }, -/**/ {{0x88be7c13, 0x3fe1835a} }, -/**/ {{0xec00c301, 0x3c8c621c} }, -/**/ {{0x737d49ca, 0x3fe755ba} }, -/**/ {{0xd4cb44c6, 0xbc8abaf3} }, -/**/ {{0x0f73c4b3, 0xbfd4bd09} }, -/**/ {{0xa9936e0b, 0x3c3e9ebf} }, -/**/ {{0x8920477f, 0x3f8e2e4f} }, -/**/ {{0x0360e009, 0xbc0889e3} }, -/**/ {{0x53aaefa0, 0x3fbbbb1c} }, -/**/ {{0xa1007b7f, 0xbc5edb26} }, -/**/ {{0x13f5f619, 0xbfb55deb} }, -/**/ {{0xe675741e, 0x3f82bf14} }, -/**/ {{0xa05e0ebf, 0x3fa2b042} }, -/**/ {{0xbf95c5c1, 0xbfa11898} }, -/**/ {{0xe421ee51, 0x3f773faf} } }, -/**/ {{{0x00000000, 0x3fe3a000} }, -/**/ {{0xe5299f9a, 0x3fe19aa5} }, -/**/ {{0x2c58f835, 0xbc8a606c} }, -/**/ {{0xe269c5b3, 0x3fe740fe} }, -/**/ {{0x4c82509c, 0x3c873eff} }, -/**/ {{0x54b63d79, 0xbfd4ba0b} }, -/**/ {{0x75bceeff, 0xbc51d68a} }, -/**/ {{0x9d9b3eb0, 0x3f90cf83} }, -/**/ {{0x68a7ca2f, 0xbc107399} }, -/**/ {{0x27453d35, 0x3fbb506b} }, -/**/ {{0x00bdfedd, 0x3c326b36} }, -/**/ {{0x67836cef, 0xbfb54f19} }, -/**/ {{0x567ed6e8, 0x3f84c2e5} }, -/**/ {{0x04a983e8, 0x3fa227ea} }, -/**/ {{0xfc7ce22f, 0xbfa0fd1d} }, -/**/ {{0x2ffea71d, 0x3f79960c} } }, -/**/ {{{0x00000000, 0x3fe3c000} }, -/**/ {{0x87904285, 0x3fe1b1dc} }, -/**/ {{0x8aef8f29, 0xbc621e8c} }, -/**/ {{0x78244c5a, 0x3fe72c46} }, -/**/ {{0xe664f3a2, 0x3c888c36} }, -/**/ {{0xa8a3ca2f, 0xbfd4b6bb} }, -/**/ {{0x1e1f3e19, 0xbc778793} }, -/**/ {{0xc8a3d8bb, 0x3f928136} }, -/**/ {{0x140daf1c, 0x3c3dc4d8} }, -/**/ {{0xd1165ef3, 0x3fbae607} }, -/**/ {{0x6305876c, 0xbc5fbfaa} }, -/**/ {{0x734b94bd, 0xbfb53eca} }, -/**/ {{0x7c458eb1, 0x3f86b7d8} }, -/**/ {{0x9b360f57, 0x3fa1a077} }, -/**/ {{0x3a6beabd, 0xbfa0df11} }, -/**/ {{0xaf42dc87, 0x3f7bd182} } }, -/**/ {{{0x00000000, 0x3fe3e000} }, -/**/ {{0x7341f64f, 0x3fe1c8fe} }, -/**/ {{0x9d5e792a, 0x3c728bbc} }, -/**/ {{0x85fe8a32, 0x3fe71791} }, -/**/ {{0xe8bbb0d0, 0x3c8f15bd} }, -/**/ {{0x4a6497be, 0xbfd4b31b} }, -/**/ {{0x782968f7, 0x3c737223} }, -/**/ {{0x5e0c3122, 0x3f942c46} }, -/**/ {{0x86422b13, 0xbc33e26a} }, -/**/ {{0xa7b659b8, 0x3fba7bf9} }, -/**/ {{0x25381986, 0xbc3cdf63} }, -/**/ {{0x538deb45, 0xbfb52d09} }, -/**/ {{0xa0c1f425, 0x3f889e08} }, -/**/ {{0x7b6d72e6, 0x3fa119ff} }, -/**/ {{0x8d11287b, 0xbfa0be90} }, -/**/ {{0xbce83ad4, 0x3f7df267} } }, -/**/ {{{0x00000000, 0x3fe40000} }, -/**/ {{0xabdefeb4, 0x3fe1e00b} }, -/**/ {{0x287a668f, 0xbc5928df} }, -/**/ {{0x5c0b8170, 0x3fe702e0} }, -/**/ {{0x5c0b8170, 0x3c7702e0} }, -/**/ {{0x78215a76, 0xbfd4af2b} }, -/**/ {{0xab3a13d8, 0xbc581c2e} }, -/**/ {{0xe9e4a9d0, 0x3f95d0b7} }, -/**/ {{0xebf91fc7, 0xbc3aa02a} }, -/**/ {{0xca629942, 0x3fba1247} }, -/**/ {{0xc245db83, 0xbc46961a} }, -/**/ {{0x100385b4, 0xbfb519e1} }, -/**/ {{0x32616ed8, 0x3f8a7592} }, -/**/ {{0xcda1223a, 0x3fa09494} }, -/**/ {{0xa5a5c251, 0xbfa09bb9} }, -/**/ {{0xf489d8ba, 0x3f7ff915} } }, -/**/ {{{0x00000000, 0x3fe42000} }, -/**/ {{0x3557138a, 0x3fe1f704} }, -/**/ {{0xf6d7dd47, 0x3c76c659} }, -/**/ {{0x4920943e, 0x3fe6ee33} }, -/**/ {{0x61a3a541, 0xbc62723e} }, -/**/ {{0x6eedf042, 0xbfd4aaed} }, -/**/ {{0xe7561ed4, 0x3c5b337a} }, -/**/ {{0x68796803, 0x3f976e91} }, -/**/ {{0x44d1db93, 0xbc0e806f} }, -/**/ {{0x21688625, 0x3fb9a8f9} }, -/**/ {{0xb1ec0554, 0x3c540185} }, -/**/ {{0x9a4cbc61, 0xbfb5055c} }, -/**/ {{0xab0be204, 0x3f8c3e93} }, -/**/ {{0xce3968a1, 0x3fa01049} }, -/**/ {{0xcc2331ba, 0xbfa076a9} }, -/**/ {{0xe220db7e, 0x3f80f2f6} } }, -/**/ {{{0x00000000, 0x3fe44000} }, -/**/ {{0x13e823b2, 0x3fe20de8} }, -/**/ {{0x53ebb744, 0xbc8791d7} }, -/**/ {{0x9ad6a3fd, 0x3fe6d98a} }, -/**/ {{0xc4e69862, 0xbc808110} }, -/**/ {{0x6ab4a79d, 0xbfd4a662} }, -/**/ {{0x9fc1cc2b, 0x3c52ed25} }, -/**/ {{0x42e6dc28, 0x3f9905d9} }, -/**/ {{0xe39b7707, 0xbc228c79} }, -/**/ {{0x5e97c6f4, 0x3fb94014} }, -/**/ {{0xf8779202, 0xbc52b822} }, -/**/ {{0xcc723054, 0xbfb4ef86} }, -/**/ {{0x76852811, 0x3f8df92d} }, -/**/ {{0xa231ee3f, 0x3f9f1a5f} }, -/**/ {{0xd8f34e77, 0xbfa04f7d} }, -/**/ {{0x80706a34, 0x3f81dcaa} } }, -/**/ {{{0x00000000, 0x3fe46000} }, -/**/ {{0x4c1d192a, 0x3fe224b7} }, -/**/ {{0xf88a60c4, 0x3c8d6d3d} }, -/**/ {{0x9d8b44ec, 0x3fe6c4e6} }, -/**/ {{0x4ed04ec2, 0xbc589d5c} }, -/**/ {{0xa6222a08, 0xbfd4a18b} }, -/**/ {{0xd3867dbd, 0xbc66c919} }, -/**/ {{0x4bb5a8a0, 0x3f9a9696} }, -/**/ {{0x927bb5bd, 0x3c36698e} }, -/**/ {{0xfdbbcc76, 0x3fb8d79f} }, -/**/ {{0x4efb71a1, 0x3c2578bd} }, -/**/ {{0x6778e363, 0xbfb4d86a} }, -/**/ {{0xd930230d, 0x3f8fa581} }, -/**/ {{0x8a6221aa, 0x3f9e16ae} }, -/**/ {{0x2f183972, 0xbfa02652} }, -/**/ {{0x3e507f4f, 0x3f82b9db} } }, -/**/ {{{0x00000000, 0x3fe48000} }, -/**/ {{0xe2cc9e6a, 0x3fe23b71} }, -/**/ {{0x9f38224e, 0x3c6c421c} }, -/**/ {{0x9c620595, 0x3fe6b047} }, -/**/ {{0x07d7f0c2, 0x3c8867df} }, -/**/ {{0x5a920887, 0xbfd49c6a} }, -/**/ {{0x37bcc433, 0xbc764547} }, -/**/ {{0xbb7e5931, 0x3f9c20cf} }, -/**/ {{0x4db6bef2, 0xbc3d86f5} }, -/**/ {{0x451c4a5d, 0x3fb86fa2} }, -/**/ {{0x15afb52c, 0xbc475142} }, -/**/ {{0x120917da, 0xbfb4c012} }, -/**/ {{0x6b9c3fad, 0x3f90a1da} }, -/**/ {{0x708543e5, 0x3f9d159f} }, -/**/ {{0x6d929bce, 0xbf9ff685} }, -/**/ {{0xd0361a66, 0x3f838ac0} } }, -/**/ {{{0x00000000, 0x3fe4a000} }, -/**/ {{0xdd17e501, 0x3fe25217} }, -/**/ {{0x8c1b679c, 0x3c856aa8} }, -/**/ {{0xe145c95d, 0x3fe69bad} }, -/**/ {{0x5605046d, 0xbc873257} }, -/**/ {{0xbffbe8a8, 0xbfd496ff} }, -/**/ {{0xc7b45e6f, 0x3c36a5c5} }, -/**/ {{0x2d9556eb, 0x3f9da48d} }, -/**/ {{0x1871a19d, 0x3c3ff0e8} }, -/**/ {{0x46043f42, 0x3fb80821} }, -/**/ {{0xe660cfa1, 0x3c550eec} }, -/**/ {{0x5727a8cb, 0xbfb4a688} }, -/**/ {{0x0e13efbc, 0x3f9169f6} }, -/**/ {{0xb59149dd, 0x3f9c174f} }, -/**/ {{0xb10444dd, 0xbf9f9cd5} }, -/**/ {{0x03e91dd9, 0x3f844f95} } }, -/**/ {{{0x00000000, 0x3fe4c000} }, -/**/ {{0x40696da6, 0x3fe268a9} }, -/**/ {{0xa04c73cc, 0x3c5d1348} }, -/**/ {{0xb4ea3592, 0x3fe68719} }, -/**/ {{0x088ed284, 0xbc7ecf86} }, -/**/ {{0x0ce1507d, 0xbfd4914d} }, -/**/ {{0x4dff2946, 0xbc6410ef} }, -/**/ {{0x9cbf7eb7, 0x3f9f21d6} }, -/**/ {{0xeaaad7e2, 0x3c39bc22} }, -/**/ {{0xdd4f3070, 0x3fb7a122} }, -/**/ {{0x1cfe44af, 0x3c50d950} }, -/**/ {{0xa50188df, 0xbfb48bd7} }, -/**/ {{0x71756204, 0x3f922b27} }, -/**/ {{0x0810a33a, 0x3f9b1bdb} }, -/**/ {{0xf1011313, 0xbf9f3fca} }, -/**/ {{0x8fe0f49b, 0x3f850893} } }, -/**/ {{{0x00000000, 0x3fe4e000} }, -/**/ {{0x1273d1b3, 0x3fe27f26} }, -/**/ {{0x6151dd9f, 0x3c843bf3} }, -/**/ {{0x5ecd3069, 0x3fe6728b} }, -/**/ {{0x539f23ff, 0x3c67417b} }, -/**/ {{0x763c0fe8, 0xbfd48b53} }, -/**/ {{0x6027975c, 0xbc677a1a} }, -/**/ {{0x2ff7dd6a, 0x3fa04c5a} }, -/**/ {{0x496202e8, 0xbc40808e} }, -/**/ {{0xb3fc3f7c, 0x3fb73aac} }, -/**/ {{0x86b114ff, 0x3c4b58cb} }, -/**/ {{0x4bc91249, 0xbfb4700a} }, -/**/ {{0xef2490f8, 0x3f92e582} }, -/**/ {{0x6c875580, 0x3f9a235b} }, -/**/ {{0xe55cd596, 0xbf9edf99} }, -/**/ {{0xe40c5a18, 0x3f85b5f9} } }, -/**/ {{{0x00000000, 0x3fe50000} }, -/**/ {{0x59308e31, 0x3fe2958e} }, -/**/ {{0xb0c6c087, 0xbc709e73} }, -/**/ {{0x2538713c, 0x3fe65e03} }, -/**/ {{0x42c09163, 0xbc601392} }, -/**/ {{0x2f6d4575, 0xbfd48514} }, -/**/ {{0x4568af3f, 0xbc356341} }, -/**/ {{0x9386fd1d, 0x3fa10497} }, -/**/ {{0x230a452f, 0xbc4a756a} }, -/**/ {{0x3fc6c180, 0x3fb6d4c4} }, -/**/ {{0xdb3fe137, 0x3c5ab2b9} }, -/**/ {{0x7ca4cfd0, 0xbfb4532a} }, -/**/ {{0x90eb1d30, 0x3f93991d} }, -/**/ {{0x46163051, 0x3f992de9} }, -/**/ {{0x2de874ff, 0xbf9e7c76} }, -/**/ {{0xfc0c1cb2, 0x3f865806} } }, -/**/ {{{0x00000000, 0x3fe52000} }, -/**/ {{0x1aded073, 0x3fe2abe2} }, -/**/ {{0x01ad022e, 0x3c8c28c0} }, -/**/ {{0x4d432177, 0x3fe64981} }, -/**/ {{0x055e240c, 0x3c83f41b} }, -/**/ {{0x6a2cfd01, 0xbfd47e90} }, -/**/ {{0xf152d080, 0x3c628585} }, -/**/ {{0xfbe3ed9e, 0x3fa1b9a7} }, -/**/ {{0xf259fe04, 0xbc18a085} }, -/**/ {{0xc3c40175, 0x3fb66f6e} }, -/**/ {{0xb0fda762, 0x3c41d80a} }, -/**/ {{0x48af643a, 0xbfb43542} }, -/**/ {{0x05ad7652, 0x3f94460d} }, -/**/ {{0x5f55ab26, 0x3f983b9b} }, -/**/ {{0x4be18b23, 0xbf9e1692} }, -/**/ {{0x32e755a3, 0x3f86eefb} } }, -/**/ {{{0x00000000, 0x3fe54000} }, -/**/ {{0x5e024466, 0x3fe2c221} }, -/**/ {{0xda3a4be1, 0xbc44b810} }, -/**/ {{0x1ad38da0, 0x3fe63506} }, -/**/ {{0x94ec14b0, 0xbc67f12a} }, -/**/ {{0x567a6652, 0xbfd477c9} }, -/**/ {{0xbbb9df88, 0x3c7be71c} }, -/**/ {{0x1535acb9, 0x3fa26b90} }, -/**/ {{0xff041454, 0xbc30ff6c} }, -/**/ {{0x5105d8fa, 0x3fb60ab1} }, -/**/ {{0x3f2d6492, 0x3c535a89} }, -/**/ {{0xa0083319, 0xbfb4165b} }, -/**/ {{0x965eb0a7, 0x3f94ec67} }, -/**/ {{0xf36231e5, 0x3f974c86} }, -/**/ {{0x9c25f4a4, 0xbf9dae1f} }, -/**/ {{0x183e42dc, 0x3f877b18} } }, -/**/ {{{0x00000000, 0x3fe56000} }, -/**/ {{0x2961e48c, 0x3fe2d84c} }, -/**/ {{0x0a36e506, 0xbc7f2542} }, -/**/ {{0xd0a0e5d4, 0x3fe62091} }, -/**/ {{0xcccb008e, 0x3c82a27d} }, -/**/ {{0x228ca1b6, 0xbfd470c0} }, -/**/ {{0x32884415, 0xbc788e9b} }, -/**/ {{0xb365e4d9, 0x3fa31a54} }, -/**/ {{0xda0f99ae, 0x3c3e6e70} }, -/**/ {{0xc741ccb7, 0x3fb5a690} }, -/**/ {{0x6508ffe1, 0xbc383905} }, -/**/ {{0x50f46c17, 0xbfb3f680} }, -/**/ {{0x1b344c30, 0x3f958c44} }, -/**/ {{0xb713db8a, 0x3f9660bf} }, -/**/ {{0x5224992a, 0xbf9d434e} }, -/**/ {{0x46ffb16e, 0x3f87fca0} } }, -/**/ {{{0x00000000, 0x3fe58000} }, -/**/ {{0x8406cbca, 0x3fe2ee62} }, -/**/ {{0x9ff0cf8d, 0x3c8c5d5e} }, -/**/ {{0xb0350d38, 0x3fe60c24} }, -/**/ {{0xf3db4fcb, 0x3c81ffe9} }, -/**/ {{0xfac420bd, 0xbfd46975} }, -/**/ {{0x850528a0, 0x3c7e6994} }, -/**/ {{0xd098b4ee, 0x3fa3c5fa} }, -/**/ {{0xaa6a6874, 0x3c353c41} }, -/**/ {{0xd57c5b53, 0x3fb54311} }, -/**/ {{0x72d146e0, 0x3c50d02e} }, -/**/ {{0x071017e0, 0xbfb3d5ba} }, -/**/ {{0xf11b08a7, 0x3f9625b9} }, -/**/ {{0xe25bbc6f, 0x3f957857} }, -/**/ {{0x7384981f, 0xbf9cd64d} }, -/**/ {{0x3da3b8d5, 0x3f8873d7} } }, -/**/ {{{0x00000000, 0x3fe5a000} }, -/**/ {{0x753b090b, 0x3fe30464} }, -/**/ {{0x61da18f3, 0xbc73e712} }, -/**/ {{0xf9ee77b6, 0x3fe5f7be} }, -/**/ {{0x854f9928, 0x3c8949f7} }, -/**/ {{0x099c98f6, 0xbfd461ec} }, -/**/ {{0x3eafe889, 0x3c5da491} }, -/**/ {{0x8ba9e286, 0x3fa46e87} }, -/**/ {{0x5377a1a9, 0x3c42573a} }, -/**/ {{0xfab82ffb, 0x3fb4e038} }, -/**/ {{0x402ef939, 0xbc414e45} }, -/**/ {{0x4a8ec478, 0xbfb3b412} }, -/**/ {{0xef6dba07, 0x3f96b8e0} }, -/**/ {{0x39c13c6e, 0x3f949360} }, -/**/ {{0xd47bfddb, 0xbf9c674a} }, -/**/ {{0x37ed6935, 0x3f88e101} } }, -/**/ {{{0x00000000, 0x3fe5c000} }, -/**/ {{0x048874be, 0x3fe31a52} }, -/**/ {{0x87a7ac24, 0x3c840cab} }, -/**/ {{0xed021586, 0x3fe5e360} }, -/**/ {{0xb32ab7e4, 0x3c86a444} }, -/**/ {{0x779f86c4, 0xbfd45a23} }, -/**/ {{0x6b782501, 0xbc75b9dc} }, -/**/ {{0x26af940c, 0x3fa51400} }, -/**/ {{0xf9ce64e2, 0x3c4f700e} }, -/**/ {{0x86a8eb42, 0x3fb47e0a} }, -/**/ {{0x36377584, 0xbc5a4df9} }, -/**/ {{0x7f8b6d42, 0xbfb39192} }, -/**/ {{0x5deeeabc, 0x3f9745d1} }, -/**/ {{0x17fa1033, 0x3f93b1e8} }, -/**/ {{0x14cf2061, 0xbf9bf673} }, -/**/ {{0x0a340016, 0x3f894463} } }, -/**/ {{{0x00000000, 0x3fe5e000} }, -/**/ {{0x39b78856, 0x3fe3302b} }, -/**/ {{0xd87ba82b, 0x3c85dd2e} }, -/**/ {{0xc77d4bea, 0x3fe5cf0a} }, -/**/ {{0x0d42ab66, 0xbc8684ab} }, -/**/ {{0x6b573e11, 0xbfd4521d} }, -/**/ {{0xb90c9c27, 0xbc7601b9} }, -/**/ {{0x0582aeaa, 0x3fa5b66a} }, -/**/ {{0x8cc985ad, 0x3c281575} }, -/**/ {{0x9a69373d, 0x3fb41c8a} }, -/**/ {{0x25ea8f67, 0xbc33df07} }, -/**/ {{0xe5673a18, 0xbfb36e43} }, -/**/ {{0xeb05f3bc, 0x3f97cca3} }, -/**/ {{0x7797abe9, 0x3f92d3fd} }, -/**/ {{0x9d71c254, 0xbf9b83f1} }, -/**/ {{0xfe333861, 0x3f899e41} } }, -/**/ {{{0x00000000, 0x3fe60000} }, -/**/ {{0x1cce37bb, 0x3fe345f0} }, -/**/ {{0x37c71102, 0x3c810211} }, -/**/ {{0xc647fa91, 0x3fe5babc} }, -/**/ {{0x8056eaf3, 0x3c84339b} }, -/**/ {{0x094286d0, 0xbfd449db} }, -/**/ {{0x512b1c7b, 0x3c75e178} }, -/**/ {{0xac4cf102, 0x3fa655ca} }, -/**/ {{0x61e8206a, 0xbc27a1e4} }, -/**/ {{0x2933dd9c, 0x3fb3bbbd} }, -/**/ {{0xbd42c006, 0xbc517633} }, -/**/ {{0x9636afc9, 0xbfb34a2f} }, -/**/ {{0xa2400f6f, 0x3f984d71} }, -/**/ {{0xfcc53cab, 0x3f91f9ac} }, -/**/ {{0x9ec31ef1, 0xbf9b0ff0} }, -/**/ {{0xb1615b05, 0x3f89eee3} } }, -/**/ {{{0x00000000, 0x3fe62000} }, -/**/ {{0xb60eccce, 0x3fe35ba0} }, -/**/ {{0x9b9368b9, 0x3c8e3ba1} }, -/**/ {{0x25268d22, 0x3fe5a677} }, -/**/ {{0xaf72cee6, 0x3c7bc76e} }, -/**/ {{0x73c8c31c, 0xbfd4415d} }, -/**/ {{0xe00e5645, 0xbc3e5b3c} }, -/**/ {{0xbe1ce1b6, 0x3fa6f227} }, -/**/ {{0xe699fcac, 0xbc04a922} }, -/**/ {{0xf91f9885, 0x3fb35ba5} }, -/**/ {{0x418827b3, 0xbc43f8be} }, -/**/ {{0x863cebc9, 0xbfb3255e} }, -/**/ {{0xe315ca66, 0x3f98c853} }, -/**/ {{0xff116cac, 0x3f912301} }, -/**/ {{0x0f5e09c2, 0xbf9a9a99} }, -/**/ {{0xf4c8d587, 0x3f8a368d} } }, -/**/ {{{0x00000000, 0x3fe64000} }, -/**/ {{0x0df6c504, 0x3fe3713d} }, -/**/ {{0xe031606d, 0xbc54f789} }, -/**/ {{0x1ebc184f, 0x3fe5923a} }, -/**/ {{0xbe5956dd, 0x3c829fe8} }, -/**/ {{0xcb2e9cc9, 0xbfd438a5} }, -/**/ {{0x7d6ce3eb, 0xbc7c1839} }, -/**/ {{0xfb7fa678, 0x3fa78b86} }, -/**/ {{0xd082025e, 0x3befb53e} }, -/**/ {{0xa3dd5905, 0x3fb2fc48} }, -/**/ {{0x06b78682, 0x3c5fd567} }, -/**/ {{0x8374843c, 0xbfb2ffd9} }, -/**/ {{0x57f51471, 0x3f993d64} }, -/**/ {{0x933f6cc5, 0x3f905006} }, -/**/ {{0xab7658df, 0xbf9a2412} }, -/**/ {{0xae624ab4, 0x3f8a7586} } }, -/**/ {{{0x00000000, 0x3fe66000} }, -/**/ {{0x2d3db11f, 0x3fe386c5} }, -/**/ {{0xcbebe6a0, 0xbc8b78e1} }, -/**/ {{0xec8c8203, 0x3fe57e05} }, -/**/ {{0x5e7f92dc, 0x3c8ea585} }, -/**/ {{0x2d8b381e, 0xbfd42fb5} }, -/**/ {{0x5cff451e, 0xbc63afe6} }, -/**/ {{0x4120d643, 0x3fa821ee} }, -/**/ {{0xcbc4d2dc, 0xbc3e664f} }, -/**/ {{0x9778bfdb, 0x3fb29da8} }, -/**/ {{0x7c2057a5, 0x3c3760dd} }, -/**/ {{0x3525a55a, 0xbfb2d9a9} }, -/**/ {{0xed9015c8, 0x3f99acbc} }, -/**/ {{0x2a35e7d2, 0x3f8f0187} }, -/**/ {{0xf4bcdfc7, 0xbf99ac83} }, -/**/ {{0xbbeb4f11, 0x3f8aac13} } }, -/**/ {{{0x00000000, 0x3fe68000} }, -/**/ {{0x1cd4171a, 0x3fe39c39} }, -/**/ {{0x31d8bf46, 0xbc823043} }, -/**/ {{0xc6feb417, 0x3fe569da} }, -/**/ {{0x0625e450, 0x3c803ce5} }, -/**/ {{0xb6bde980, 0xbfd4268c} }, -/**/ {{0xe8258561, 0xbc6e8f76} }, -/**/ {{0x86705749, 0x3fa8b563} }, -/**/ {{0xe6172281, 0x3c418e14} }, -/**/ {{0x171a8768, 0x3fb23fc9} }, -/**/ {{0x3225d825, 0xbc562184} }, -/**/ {{0x1b8904fd, 0xbfb2b2d6} }, -/**/ {{0xca70ce88, 0x3f9a1677} }, -/**/ {{0x62963581, 0x3f8d6a81} }, -/**/ {{0x32c353bb, 0xbf993412} }, -/**/ {{0xd7354ec0, 0x3f8ada7a} } }, -/**/ {{{0x00000000, 0x3fe6a000} }, -/**/ {{0xe5e2564b, 0x3fe3b198} }, -/**/ {{0x1f0752ac, 0xbc72f922} }, -/**/ {{0xe55ed910, 0x3fe555b8} }, -/**/ {{0x656f2eb2, 0xbc5615bc} }, -/**/ {{0x80646bca, 0xbfd41d2d} }, -/**/ {{0x1ff3506f, 0xbc75d1d6} }, -/**/ {{0xdc4e5727, 0x3fa945ec} }, -/**/ {{0x18968922, 0x3c213c8e} }, -/**/ {{0x3bcc9fa4, 0x3fb1e2ad} }, -/**/ {{0x0a43c591, 0x3c2b899c} }, -/**/ {{0x8f774533, 0xbfb28b68} }, -/**/ {{0x46d16acc, 0x3f9a7aaf} }, -/**/ {{0xde405cc6, 0x3f8bdb08} }, -/**/ {{0x73d9884b, 0xbf98bae1} }, -/**/ {{0x7be7742a, 0x3f8b0101} } }, -/**/ {{{0x00000000, 0x3fe6c000} }, -/**/ {{0x91c78dc5, 0x3fe3c6e4} }, -/**/ {{0x94fd0ba7, 0xbc8e1450} }, -/**/ {{0x7de0a269, 0x3fe541a0} }, -/**/ {{0x163b639c, 0x3c8b9072} }, -/**/ {{0xa1d194fc, 0xbfd41398} }, -/**/ {{0x8629402d, 0xbc7ef191} }, -/**/ {{0x6bbd69eb, 0x3fa9d390} }, -/**/ {{0xd2c4a6a5, 0x3c488aec} }, -/**/ {{0xf53fbee6, 0x3fb18657} }, -/**/ {{0x0104d1dd, 0x3c54e6aa} }, -/**/ {{0xc2245ee6, 0xbfb26368} }, -/**/ {{0xe4b91b16, 0x3f9ad97d} }, -/**/ {{0x74b192c7, 0x3f8a5328} }, -/**/ {{0x8e5d8b31, 0xbf984114} }, -/**/ {{0xceadce82, 0x3f8b1fec} } }, -/**/ {{{0x00000000, 0x3fe6e000} }, -/**/ {{0x2a188504, 0x3fe3dc1c} }, -/**/ {{0x70f4e971, 0x3c82ce63} }, -/**/ {{0xc5a197ed, 0x3fe52d91} }, -/**/ {{0x1baab820, 0xbc804b92} }, -/**/ {{0x300486f8, 0xbfd409cf} }, -/**/ {{0xae804189, 0xbc6d3bb8} }, -/**/ {{0x749adab8, 0x3faa5e54} }, -/**/ {{0xc631cfd3, 0x3c20b0d5} }, -/**/ {{0x0a922c54, 0x3fb12acc} }, -/**/ {{0x7cbc4417, 0x3c521a06} }, -/**/ {{0xbce6ae05, 0xbfb23ade} }, -/**/ {{0x485d279b, 0x3f9b32fe} }, -/**/ {{0xd9b56b96, 0x3f88d2e8} }, -/**/ {{0x227841f4, 0xbf97c6cd} }, -/**/ {{0x85cf6ba0, 0x3f8b3781} } }, -/**/ {{{0x00000000, 0x3fe70000} }, -/**/ {{0xb89e96f4, 0x3fe3f13f} }, -/**/ {{0x492644f0, 0x3c7ecf8b} }, -/**/ {{0xf0ab6f99, 0x3fe5198c} }, -/**/ {{0x5e1ffaba, 0x3c71b875} }, -/**/ {{0x3da059f4, 0xbfd3ffd2} }, -/**/ {{0x77eee53d, 0x3c5bba8e} }, -/**/ {{0x4c5d36dc, 0x3faae63f} }, -/**/ {{0x2a3994d6, 0xbc4e6e4e} }, -/**/ {{0x1b178ada, 0x3fb0d00c} }, -/**/ {{0xb3e710cc, 0x3c4b94c3} }, -/**/ {{0x61093929, 0xbfb211d2} }, -/**/ {{0x30c5dd59, 0x3f9b874b} }, -/**/ {{0xb0b899ed, 0x3f875a50} }, -/**/ {{0x9c404912, 0xbf974c2b} }, -/**/ {{0xd3249a4d, 0x3f8b4803} } }, -/**/ {{{0x00000000, 0x3fe72000} }, -/**/ {{0x47569f49, 0x3fe4064f} }, -/**/ {{0xf91bf2b2, 0xbc8aad88} }, -/**/ {{0x31f66da7, 0x3fe50592} }, -/**/ {{0x134b7507, 0xbc8837f1} }, -/**/ {{0xdae43e4d, 0xbfd3f5a2} }, -/**/ {{0xdc59e382, 0xbc7f29b0} }, -/**/ {{0x5cd91a8c, 0x3fab6b57} }, -/**/ {{0xd6ab0dfc, 0xbc225bf7} }, -/**/ {{0x9f216d7a, 0x3fb0761a} }, -/**/ {{0xe546203e, 0x3c577818} }, -/**/ {{0x67a8cf31, 0xbfb1e84b} }, -/**/ {{0x70b6dd6f, 0x3f9bd67f} }, -/**/ {{0x9ff677e5, 0x3f85e964} }, -/**/ {{0x363cf426, 0xbf96d14f} }, -/**/ {{0x4f6617de, 0x3f8b51b7} } }, -/**/ {{{0x00000000, 0x3fe74000} }, -/**/ {{0xe06fea41, 0x3fe41b4a} }, -/**/ {{0x53277652, 0x3c63d60a} }, -/**/ {{0xbb6bcc2c, 0x3fe4f1a1} }, -/**/ {{0x7c81f558, 0x3c5c8d69} }, -/**/ {{0x15a41364, 0xbfd3eb42} }, -/**/ {{0x617c316a, 0x3c728a9c} }, -/**/ {{0x230c44b8, 0x3fabeda3} }, -/**/ {{0x50d9e9da, 0x3c41fa15} }, -/**/ {{0xe8c87fc3, 0x3fb01cf9} }, -/**/ {{0xa175df34, 0x3c410990} }, -/**/ {{0x619b963c, 0xbfb1be51} }, -/**/ {{0xe7da421c, 0x3f9c20b5} }, -/**/ {{0x637b86b0, 0x3f848027} }, -/**/ {{0xfc436ff1, 0xbf965655} }, -/**/ {{0xe6cd859f, 0x3f8b54de} } }, -/**/ {{{0x00000000, 0x3fe76000} }, -/**/ {{0x8e4b26d6, 0x3fe43032} }, -/**/ {{0x1070b99f, 0xbc813159} }, -/**/ {{0xbde829f5, 0x3fe4ddbb} }, -/**/ {{0xb6d17615, 0xbc735ff2} }, -/**/ {{0xf941711a, 0xbfd3e0b0} }, -/**/ {{0xe9027227, 0x3c7d3454} }, -/**/ {{0x2deef5c2, 0x3fac6d29} }, -/**/ {{0x0ba13bb6, 0x3c476533} }, -/**/ {{0x496c1e5e, 0x3faf8958} }, -/**/ {{0xe1abdf2f, 0x3c49ebf2} }, -/**/ {{0xb762a82c, 0xbfb193eb} }, -/**/ {{0x7c2df93f, 0x3f9c6609} }, -/**/ {{0xdff7724a, 0x3f831e99} }, -/**/ {{0xcea82a5a, 0xbf95db5c} }, -/**/ {{0xc6ff27bb, 0x3f8b51bc} } }, -/**/ {{{0x00000000, 0x3fe78000} }, -/**/ {{0x5b795b56, 0x3fe44506} }, -/**/ {{0x163f79c8, 0xbc7f76d0} }, -/**/ {{0x693e0015, 0x3fe4c9e0} }, -/**/ {{0x60fff59b, 0xbc7b0fcb} }, -/**/ {{0x8ea521a8, 0xbfd3d5f0} }, -/**/ {{0xb5bcc402, 0x3c561573} }, -/**/ {{0x1d4b9b62, 0x3face9f0} }, -/**/ {{0xf2c93cfb, 0x3c481226} }, -/**/ {{0xb5db8847, 0x3faeda66} }, -/**/ {{0x3a386670, 0xbc44ec99} }, -/**/ {{0xa92559e3, 0xbfb16921} }, -/**/ {{0x13b2a17d, 0x3f9ca695} }, -/**/ {{0x355982b3, 0x3f81c4bb} }, -/**/ {{0x65bec936, 0xbf95607f} }, -/**/ {{0x4e349f67, 0x3f8b4892} } }, -/**/ {{{0x00000000, 0x3fe7a000} }, -/**/ {{0x52badc7f, 0x3fe459c6} }, -/**/ {{0x8e8e135c, 0x3c819969} }, -/**/ {{0xec381dcb, 0x3fe4b60f} }, -/**/ {{0x4724e4f2, 0xbc6b9874} }, -/**/ {{0xdc390960, 0xbfd3cb01} }, -/**/ {{0x7ba1320c, 0xbc7243b1} }, -/**/ {{0xa09cca72, 0x3fad63fe} }, -/**/ {{0xe5ab8d04, 0x3c48308c} }, -/**/ {{0xdf2eb652, 0x3fae2d22} }, -/**/ {{0x4eb29ad3, 0xbc4988a3} }, -/**/ {{0x4eb5cb96, 0xbfb13dfa} }, -/**/ {{0x8e5b2657, 0x3f9ce273} }, -/**/ {{0xd132be74, 0x3f807288} }, -/**/ {{0x55a31e9e, 0xbf94e5d8} }, -/**/ {{0xfba00cb2, 0x3f8b399f} } }, -/**/ {{{0x00000000, 0x3fe7c000} }, -/**/ {{0x7efe4716, 0x3fe46e72} }, -/**/ {{0x1b844cc9, 0xbc639b9b} }, -/**/ {{0x749c2a47, 0x3fe4a24a} }, -/**/ {{0x82d8a2e5, 0xbc8f9d05} }, -/**/ {{0xe5e27a03, 0xbfd3bfe5} }, -/**/ {{0xb30f6d58, 0xbc5047da} }, -/**/ {{0x75f185ec, 0x3faddb5b} }, -/**/ {{0x23d5084a, 0x3c43b680} }, -/**/ {{0x479061d2, 0x3fad8190} }, -/**/ {{0x602d3547, 0xbbf4565c} }, -/**/ {{0x979e619e, 0xbfb1127c} }, -/**/ {{0xc03c4720, 0x3f9d19bf} }, -/**/ {{0x01b2b45f, 0x3f7e4ffd} }, -/**/ {{0x1245b0bb, 0xbf946b81} }, -/**/ {{0x60fec8ec, 0x3f8b2525} } }, -/**/ {{{0x00000000, 0x3fe7e000} }, -/**/ {{0xeb5f7bfe, 0x3fe4830a} }, -/**/ {{0x66764a73, 0xbc5a2656} }, -/**/ {{0x2f2d2be4, 0x3fe48e90} }, -/**/ {{0x969bba3b, 0x3c810a8e} }, -/**/ {{0xacfcef4d, 0xbfd3b49d} }, -/**/ {{0xb7a61548, 0xbc6a4f98} }, -/**/ {{0x68d7d101, 0x3fae500d} }, -/**/ {{0x04860c21, 0xbc305c3e} }, -/**/ {{0x2c98ea9c, 0x3facd7b2} }, -/**/ {{0xd46adca0, 0x3c48692b} }, -/**/ {{0x4b37c6a5, 0xbfb0e6af} }, -/**/ {{0x6bfb2662, 0x3f9d4c94} }, -/**/ {{0x0692cc75, 0x3f7bca2d} }, -/**/ {{0xf3b69312, 0xbf93f191} }, -/**/ {{0x1552b8ee, 0x3f8b0b61} } }, -/**/ {{{0x00000000, 0x3fe80000} }, -/**/ {{0xa3269ee1, 0x3fe4978f} }, -/**/ {{0x87f2a458, 0x3c72419a} }, -/**/ {{0x47ae147b, 0x3fe47ae1} }, -/**/ {{0xeb851eb8, 0xbc6eb851} }, -/**/ {{0x30553261, 0xbfd3a92a} }, -/**/ {{0x94467382, 0xbc7f06f6} }, -/**/ {{0x514d88d8, 0x3faec21b} }, -/**/ {{0xf45873a6, 0x3c3cd061} }, -/**/ {{0x88dfb80c, 0x3fac2f8b} }, -/**/ {{0x53add20b, 0xbc14fcbc} }, -/**/ {{0x08c71945, 0xbfb0ba99} }, -/**/ {{0x3d79f13f, 0x3f9d7b0c} }, -/**/ {{0x357dfc67, 0x3f795393} }, -/**/ {{0x3aa97829, 0xbf937822} }, -/**/ {{0xa8b90db0, 0x3f8aec90} } }, -/**/ {{{0x00000000, 0x3fe82000} }, -/**/ {{0xb1c71762, 0x3fe4ac00} }, -/**/ {{0x2382b900, 0x3c8b20e7} }, -/**/ {{0xe8e45252, 0x3fe4673d} }, -/**/ {{0x67458f9c, 0x3c57d208} }, -/**/ {{0x6c24e1b3, 0xbfd39d8c} }, -/**/ {{0x973c6d15, 0xbc7830c5} }, -/**/ {{0x12b78147, 0x3faf318c} }, -/**/ {{0xd318184c, 0xbc4fa440} }, -/**/ {{0x158b44e7, 0x3fab891f} }, -/**/ {{0x45d7f1f3, 0x3c4d5f9f} }, -/**/ {{0x47a3e8ba, 0xbfb08e40} }, -/**/ {{0xc4c1a21a, 0x3f9da541} }, -/**/ {{0x3c0d1d71, 0x3f76ec1e} }, -/**/ {{0x152e0bfc, 0xbf92ff48} }, -/**/ {{0x9955298f, 0x3f8ac8f0} } }, -/**/ {{{0x00000000, 0x3fe84000} }, -/**/ {{0x22de94e5, 0x3fe4c05e} }, -/**/ {{0xf09f2edf, 0xbc8c0ac1} }, -/**/ {{0x3c9a6560, 0x3fe453a6} }, -/**/ {{0x828bba02, 0x3c77a95f} }, -/**/ {{0x5a0e5b1c, 0xbfd391c5} }, -/**/ {{0xcd3f76d2, 0x3c7d553d} }, -/**/ {{0x9adede86, 0x3faf9e66} }, -/**/ {{0xd6d2bac0, 0xbc225e54} }, -/**/ {{0x4bdf89d7, 0x3faae46f} }, -/**/ {{0x2b25b8d9, 0x3c39c98c} }, -/**/ {{0x5765a5c1, 0xbfb061ab} }, -/**/ {{0x7127d649, 0x3f9dcb4f} }, -/**/ {{0x13002646, 0x3f7493ba} }, -/**/ {{0xa397d1a6, 0xbf928718} }, -/**/ {{0x494648b5, 0x3f8aa0bc} } }, -/**/ {{{0x00000000, 0x3fe86000} }, -/**/ {{0x023414e8, 0x3fe4d4a8} }, -/**/ {{0x1daa88b0, 0x3c6e3a89} }, -/**/ {{0x6ba2786e, 0x3fe4401a} }, -/**/ {{0xe3b5f317, 0xbc4b8213} }, -/**/ {{0xf11905c0, 0xbfd385d5} }, -/**/ {{0xa2f42dd1, 0xbc72a1e9} }, -/**/ {{0xf07a526f, 0x3fb00458} }, -/**/ {{0xac5fd817, 0xbc14f965} }, -/**/ {{0x66ca7da2, 0x3faa417e} }, -/**/ {{0xa050b433, 0x3c4b1e1a} }, -/**/ {{0x60182e4f, 0xbfb034e0} }, -/**/ {{0x8cafa41b, 0x3f9ded4f} }, -/**/ {{0x1fa4f037, 0x3f724a50} }, -/**/ {{0xfd90e915, 0xbf920fa7} }, -/**/ {{0xf59e7acf, 0x3f8a742d} } }, -/**/ {{{0x00000000, 0x3fe88000} }, -/**/ {{0x5bb6ec04, 0x3fe4e8de} }, -/**/ {{0xbeb3796c, 0x3c84a33d} }, -/**/ {{0x9dd8fdc1, 0x3fe42c9a} }, -/**/ {{0xaf80050b, 0x3c5192da} }, -/**/ {{0x25adf97f, 0xbfd379bf} }, -/**/ {{0x20cd3651, 0xbc774019} }, -/**/ {{0x724dbb01, 0x3fb0383a} }, -/**/ {{0xeb93e538, 0x3c5c4e67} }, -/**/ {{0x646e65df, 0x3fa9a04e} }, -/**/ {{0x894a6b77, 0x3c21a7cb} }, -/**/ {{0x62771c79, 0xbfb007e5} }, -/**/ {{0x37a45544, 0x3f9e0b5c} }, -/**/ {{0x54993092, 0x3f700fc7} }, -/**/ {{0x37534c25, 0xbf919909} }, -/**/ {{0xae51732a, 0x3f8a437e} } }, -/**/ {{{0x00000000, 0x3fe8a000} }, -/**/ {{0x3b7dd17e, 0x3fe4fd01} }, -/**/ {{0x3e7c24b5, 0x3c7d513f} }, -/**/ {{0xfa274ef1, 0x3fe41926} }, -/**/ {{0x4d72ecb3, 0x3c8ad830} }, -/**/ {{0xe995018a, 0xbfd36d81} }, -/**/ {{0x6fd6094d, 0x3c7e7ec5} }, -/**/ {{0x567bb975, 0x3fb06adb} }, -/**/ {{0xf0d7364f, 0x3c5212c1} }, -/**/ {{0x07a9b624, 0x3fa900e1} }, -/**/ {{0xc16bcc85, 0xbc4e5b5b} }, -/**/ {{0x705f052b, 0xbfafb580} }, -/**/ {{0x646ce12e, 0x3f9e258f} }, -/**/ {{0xa3c63841, 0x3f6bc808} }, -/**/ {{0x67043d41, 0xbf91234e} }, -/**/ {{0x4f11b221, 0x3f8a0ee6} } }, -/**/ {{{0x00000000, 0x3fe8c000} }, -/**/ {{0xadc5ed81, 0x3fe51110} }, -/**/ {{0x6832a63e, 0x3c723dcd} }, -/**/ {{0xa6864f90, 0x3fe405bf} }, -/**/ {{0x662cd5df, 0xbc7419c5} }, -/**/ {{0x2bf1f7e4, 0xbfd3611f} }, -/**/ {{0x65483b78, 0xbc6e94dd} }, -/**/ {{0x23e21be9, 0x3fb09c3f} }, -/**/ {{0xcaca858d, 0x3c22db63} }, -/**/ {{0xd99c3f1d, 0x3fa86337} }, -/**/ {{0xdc0a6dfc, 0x3c034382} }, -/**/ {{0x284f8093, 0xbfaf5aed} }, -/**/ {{0xd396fb43, 0x3f9e3c02} }, -/**/ {{0x08b96150, 0x3f678dd3} }, -/**/ {{0xaa2dcc3a, 0xbf90ae88} }, -/**/ {{0x79128ee7, 0x3f89d69b} } }, -/**/ {{{0x00000000, 0x3fe8e000} }, -/**/ {{0xbef1e9fb, 0x3fe5250c} }, -/**/ {{0xa3228870, 0xbc5539b7} }, -/**/ {{0xc8011245, 0x3fe3f264} }, -/**/ {{0x44cc720b, 0xbc6641f1} }, -/**/ {{0xd942778a, 0xbfd35497} }, -/**/ {{0x9bd7dbd6, 0x3c750a5a} }, -/**/ {{0x6438739e, 0x3fb0cc69} }, -/**/ {{0x435f798d, 0x3bf5d933} }, -/**/ {{0x2b29722f, 0x3fa7c754} }, -/**/ {{0x5b3af27b, 0xbbe736fe} }, -/**/ {{0x059a3c24, 0xbfaf001c} }, -/**/ {{0x101882b0, 0x3f9e4ed0} }, -/**/ {{0x88dc4269, 0x3f6370ae} }, -/**/ {{0x2b5280b6, 0xbf903ac8} }, -/**/ {{0x8da5b2ad, 0x3f899ad3} } }, -/**/ {{{0x00000000, 0x3fe90000} }, -/**/ {{0x7b89061f, 0x3fe538f5} }, -/**/ {{0xabda520c, 0xbc81bb74} }, -/**/ {{0x82b78014, 0x3fe3df16} }, -/**/ {{0xa43ff610, 0xbc7074be} }, -/**/ {{0xdb5be2e4, 0xbfd347ec} }, -/**/ {{0x8a0e9303, 0x3c7848c8} }, -/**/ {{0xa3a11be4, 0x3fb0fb5d} }, -/**/ {{0x09dd0d69, 0x3c3d68f2} }, -/**/ {{0x16778170, 0x3fa72d37} }, -/**/ {{0x2200d1d4, 0xbc4ea85d} }, -/**/ {{0xd4cdbd49, 0xbfaea517} }, -/**/ {{0x6bc61b6f, 0x3f9e5e10} }, -/**/ {{0xd0517524, 0x3f5ee0af} }, -/**/ {{0x4f2ec799, 0xbf8f9038} }, -/**/ {{0xa9aaa5bb, 0x3f895bc2} } }, -/**/ {{{0x00000000, 0x3fe92000} }, -/**/ {{0xf0362c8f, 0x3fe54cca} }, -/**/ {{0x7f8f43c1, 0x3c88a324} }, -/**/ {{0xf9e1016e, 0x3fe3cbd4} }, -/**/ {{0x431b67e7, 0xbc88dea6} }, -/**/ {{0x1969bc63, 0xbfd33b1f} }, -/**/ {{0x5f3d8fd8, 0x3c6ef16e} }, -/**/ {{0x703d3bf6, 0x3fb1291f} }, -/**/ {{0xb04e0672, 0xbc566e82} }, -/**/ {{0x806b26f2, 0x3fa694e1} }, -/**/ {{0xafcee740, 0x3c302819} }, -/**/ {{0x16dcee96, 0xbfae49eb} }, -/**/ {{0xfbfdb35f, 0x3f9e69dc} }, -/**/ {{0x70c48510, 0x3f571910} }, -/**/ {{0xe90198c8, 0xbf8ead25} }, -/**/ {{0xa1c723cb, 0x3f89199b} } }, -/**/ {{{0x00000000, 0x3fe94000} }, -/**/ {{0x29c70c34, 0x3fe5608d} }, -/**/ {{0xf0de8088, 0x3c89939c} }, -/**/ {{0x4fcf28c3, 0x3fe3b8a0} }, -/**/ {{0xcb80013c, 0xbc469c2b} }, -/**/ {{0x77ec4ef9, 0xbfd32e2f} }, -/**/ {{0xc61f7341, 0x3c7f9d06} }, -/**/ {{0x59c3bcdf, 0x3fb155b2} }, -/**/ {{0x3583c01b, 0xbc2d692e} }, -/**/ {{0x1a1fe15d, 0x3fa5fe54} }, -/**/ {{0x5d9bad81, 0x3c430dc5} }, -/**/ {{0x01d944a8, 0xbfadeea0} }, -/**/ {{0x9683b244, 0x3f9e724e} }, -/**/ {{0x491379ef, 0x3f4f13d4} }, -/**/ {{0x0b7cf74b, 0xbf8dcc74} }, -/**/ {{0xff5f0625, 0x3f88d48f} } }, -/**/ {{{0x00000000, 0x3fe96000} }, -/**/ {{0x352b33ba, 0x3fe5743c} }, -/**/ {{0x34c87ea6, 0xbc8ea00d} }, -/**/ {{0xa5f05e48, 0x3fe3a578} }, -/**/ {{0x00e4639b, 0xbc8ba1ec} }, -/**/ {{0xd8b7a43f, 0xbfd3211e} }, -/**/ {{0x676e23a8, 0xbc6d4b54} }, -/**/ {{0xf11b2c2d, 0x3fb18119} }, -/**/ {{0x3a3bf5fa, 0x3c34855b} }, -/**/ {{0x625c76bf, 0x3fa5698f} }, -/**/ {{0xbedb0264, 0xbc2f758a} }, -/**/ {{0x81b60103, 0xbfad9340} }, -/**/ {{0xce91900f, 0x3f9e777d} }, -/**/ {{0x34fddb2f, 0x3f406543} }, -/**/ {{0xe6077f81, 0xbf8cee3b} }, -/**/ {{0xfe42afde, 0x3f888ccf} } }, -/**/ {{{0x00000000, 0x3fe98000} }, -/**/ {{0x1f732fbb, 0x3fe587d8} }, -/**/ {{0xd8c5a950, 0xbc75e5c9} }, -/**/ {{0x1cd28c98, 0x3fe3925e} }, -/**/ {{0x1ffec6da, 0x3c8c8443} }, -/**/ {{0x1af2c622, 0xbfd313ee} }, -/**/ {{0xbc3f7ac8, 0x3c0a0e9b} }, -/**/ {{0xc7f683c3, 0x3fb1ab59} }, -/**/ {{0x12c04500, 0x3c5eaf17} }, -/**/ {{0xa7039179, 0x3fa4d693} }, -/**/ {{0xa4ce58a2, 0xbc4c8d74} }, -/**/ {{0x391400b3, 0xbfad37d6} }, -/**/ {{0xf2148a36, 0x3f9e7982} }, -/**/ {{0xb6df63ca, 0x3f112956} }, -/**/ {{0xfbd0f7ee, 0xbf8c1294} }, -/**/ {{0x8b0b0a0e, 0x3f88428a} } }, -/**/ {{{0x00000000, 0x3fe9a000} }, -/**/ {{0xf5cfab9e, 0x3fe59b60} }, -/**/ {{0x41026bc5, 0xbc81b04c} }, -/**/ {{0xd425cdfc, 0x3fe37f50} }, -/**/ {{0x518aef64, 0x3c865633} }, -/**/ {{0x1b1749db, 0xbfd3069e} }, -/**/ {{0xa119d9bc, 0xbc311c20} }, -/**/ {{0x7074cee3, 0x3fb1d475} }, -/**/ {{0x4ff61e2c, 0xbc5102e0} }, -/**/ {{0x06804def, 0x3fa44561} }, -/**/ {{0xc3865804, 0x3c4e829f} }, -/**/ {{0x82158836, 0xbfacdc6a} }, -/**/ {{0x071b2eec, 0x3f9e7876} }, -/**/ {{0xf17c4beb, 0xbf375b85} }, -/**/ {{0x2fa03971, 0xbf8b3995} }, -/**/ {{0x421a433b, 0x3f87f5ed} } }, -/**/ {{{0x00000000, 0x3fe9c000} }, -/**/ {{0xc5909517, 0x3fe5aed6} }, -/**/ {{0x714a9436, 0x3c87312f} }, -/**/ {{0xeabf19f5, 0x3fe36c50} }, -/**/ {{0x52485cca, 0x3c70d1dc} }, -/**/ {{0xb2f12226, 0xbfd2f92f} }, -/**/ {{0x3e5d3d61, 0x3c5400ba} }, -/**/ {{0x7cc3a41b, 0x3fb1fc70} }, -/**/ {{0x8819ff5b, 0x3c4b58e7} }, -/**/ {{0x712e9269, 0x3fa3b5f7} }, -/**/ {{0x7879d8ab, 0xbc4e436a} }, -/**/ {{0x6f398221, 0xbfac8106} }, -/**/ {{0xc97073c7, 0x3f9e746e} }, -/**/ {{0xecfc2d6a, 0xbf4914de} }, -/**/ {{0xcfa74bd5, 0xbf8a6350} }, -/**/ {{0x6f38ad9e, 0x3f87a724} } }, -/**/ {{{0x00000000, 0x3fe9e000} }, -/**/ {{0x9c244261, 0x3fe5c239} }, -/**/ {{0xe9e56b35, 0xbc831bd4} }, -/**/ {{0x7e9af2dc, 0x3fe3595e} }, -/**/ {{0x9dc90e6a, 0x3c81ef2d} }, -/**/ {{0xb99eb689, 0xbfd2eba3} }, -/**/ {{0x6a2f2701, 0xbc7b12ef} }, -/**/ {{0x7ec46b9b, 0x3fb2234e} }, -/**/ {{0x8d415d66, 0x3c59f30c} }, -/**/ {{0xaabf0d26, 0x3fa32856} }, -/**/ {{0x3f33d7ea, 0xbc122571} }, -/**/ {{0xcc3da9ce, 0xbfac25b2} }, -/**/ {{0xa8630cad, 0x3f9e6d84} }, -/**/ {{0xbeba707a, 0xbf5308c5} }, -/**/ {{0xa1585fd1, 0xbf898fda} }, -/**/ {{0x0dc54356, 0x3f87565b} } }, -/**/ {{{0x00000000, 0x3fea0000} }, -/**/ {{0x87169b18, 0x3fe5d589} }, -/**/ {{0x4bc5e7ca, 0x3c60028e} }, -/**/ {{0xace01346, 0x3fe34679} }, -/**/ {{0x04d19e6b, 0x3c8e6b38} }, -/**/ {{0x03913da2, 0xbfd2ddfb} }, -/**/ {{0x9a19adbd, 0xbc763ec8} }, -/**/ {{0x07b46905, 0x3fb24913} }, -/**/ {{0xd6f0307f, 0xbc4e7be8} }, -/**/ {{0x4b96b773, 0x3fa29c7e} }, -/**/ {{0x9182d783, 0xbc24c2cd} }, -/**/ {{0x1f071f44, 0xbfabca78} }, -/**/ {{0xc4b7b7c4, 0x3f9e63ce} }, -/**/ {{0x125f35b0, 0xbf59529a} }, -/**/ {{0xed369b2b, 0xbf88bf43} }, -/**/ {{0xc97185cd, 0x3f8703ba} } }, -/**/ {{{0x00000000, 0x3fea2000} }, -/**/ {{0x941043d0, 0x3fe5e8c6} }, -/**/ {{0xbe451e70, 0xbc70bf75} }, -/**/ {{0x91e21aec, 0x3fe333a2} }, -/**/ {{0x7acfc84f, 0x3c7ae035} }, -/**/ {{0x628d5861, 0xbfd2d036} }, -/**/ {{0xe463d006, 0x3c67c5fb} }, -/**/ {{0xa7d77fb2, 0x3fb26dc1} }, -/**/ {{0xc47ba861, 0xbc5432bd} }, -/**/ {{0xc229bece, 0x3fa2126d} }, -/**/ {{0x1da8ed9e, 0xbc4be1bf} }, -/**/ {{0xa890e568, 0xbfab6f5e} }, -/**/ {{0xeec5339a, 0x3f9e5763} }, -/**/ {{0x5274aa52, 0xbf5f68a6} }, -/**/ {{0x8a9df558, 0xbf87f19c} }, -/**/ {{0xff809dc5, 0x3f86af6b} } }, -/**/ {{{0x00000000, 0x3fea4000} }, -/**/ {{0xd0d5cc4a, 0x3fe5fbf0} }, -/**/ {{0x000b7158, 0xbc5b4cfd} }, -/**/ {{0x49243ad8, 0x3fe320d9} }, -/**/ {{0x433f7be5, 0xbc8ce5e0} }, -/**/ {{0xa5abec2f, 0xbfd2c256} }, -/**/ {{0x04494dc1, 0xbc68785b} }, -/**/ {{0xee25a81c, 0x3fb2915d} }, -/**/ {{0x68b37e8b, 0x3c3e7045} }, -/**/ {{0x5451b7d2, 0x3fa18a24} }, -/**/ {{0x79d21dd5, 0xbc3b2d29} }, -/**/ {{0x65dfcf66, 0xbfab146e} }, -/**/ {{0xa4b895b9, 0x3f9e485a} }, -/**/ {{0x14770b65, 0xbf62a5d4} }, -/**/ {{0xeb7dab0f, 0xbf8726f2} }, -/**/ {{0xc081d40d, 0x3f865995} } }, -/**/ {{{0x00000000, 0x3fea6000} }, -/**/ {{0x4b46e05f, 0x3fe60f08} }, -/**/ {{0x99945193, 0xbc8dbb86} }, -/**/ {{0xed5be099, 0x3fe30e1d} }, -/**/ {{0x373fae45, 0x3c6c6e78} }, -/**/ {{0x995b3a02, 0xbfd2b45c} }, -/**/ {{0xe7cea2ad, 0x3c7cb97b} }, -/**/ {{0x67fb0cde, 0x3fb2b3eb} }, -/**/ {{0x4920d50b, 0xbc402927} }, -/**/ {{0x209f00e4, 0x3fa103a1} }, -/**/ {{0xecac275a, 0xbc36fb57} }, -/**/ {{0x10fb6629, 0xbfaab9af} }, -/**/ {{0x1100b94a, 0x3f9e36c9} }, -/**/ {{0x58620e6c, 0xbf657e30} }, -/**/ {{0x2801158e, 0xbf865f54} }, -/**/ {{0xd27eaf07, 0x3f86025d} } }, -/**/ {{{0x00000000, 0x3fea8000} }, -/**/ {{0x115d7b8e, 0x3fe6220d} }, -/**/ {{0x350ee8c1, 0xbc62b785} }, -/**/ {{0x98736048, 0x3fe2fb70} }, -/**/ {{0x4df7c4fa, 0x3c87a751} }, -/**/ {{0x07603054, 0xbfd2a649} }, -/**/ {{0xf564247c, 0x3c7c41eb} }, -/**/ {{0xa0cac592, 0x3fb2d56d} }, -/**/ {{0x4e757ddf, 0x3c333138} }, -/**/ {{0x1fa53ce5, 0x3fa07ee3} }, -/**/ {{0x28113a76, 0xbc41bd0c} }, -/**/ {{0x21eb5271, 0xbfaa5f28} }, -/**/ {{0x08df7f4f, 0x3f9e22c5} }, -/**/ {{0x107b528f, 0xbf683dca} }, -/**/ {{0x0a22f693, 0xbf859acc} }, -/**/ {{0xb39536ba, 0x3f85a9e8} } }, -/**/ {{{0x00000000, 0x3feaa000} }, -/**/ {{0x312d1f3b, 0x3fe634ff} }, -/**/ {{0x15f2b598, 0x3c89d2f3} }, -/**/ {{0x638c9d15, 0x3fe2e8d1} }, -/**/ {{0xfe1a437d, 0x3c831ae5} }, -/**/ {{0xb6d7f622, 0xbfd2981c} }, -/**/ {{0x86e9fe4d, 0xbc53da87} }, -/**/ {{0x21d425b2, 0x3fb2f5e8} }, -/**/ {{0xae2616cb, 0xbc186482} }, -/**/ {{0x4a85a0e4, 0x3f9ff7d2} }, -/**/ {{0xe2d9205b, 0xbc294288} }, -/**/ {{0xcfb8dc09, 0xbfaa04e0} }, -/**/ {{0x0b1f9c73, 0x3f9e0c64} }, -/**/ {{0xbd3845d8, 0xbf6ae504} }, -/**/ {{0x19278cae, 0xbf84d965} }, -/**/ {{0x9cf7183b, 0x3f855059} } }, -/**/ {{{0x00000000, 0x3feac000} }, -/**/ {{0xb8e20b90, 0x3fe647de} }, -/**/ {{0x023a51cf, 0xbc5eca04} }, -/**/ {{0x6703b033, 0x3fe2d640} }, -/**/ {{0x38039b02, 0x3c870ae6} }, -/**/ {{0x6c39acf5, 0xbfd289d8} }, -/**/ {{0x0238a7ee, 0xbc71f038} }, -/**/ {{0x71da955f, 0x3fb3155e} }, -/**/ {{0xd41f84df, 0xbc5faa02} }, -/**/ {{0xc3c69caa, 0x3f9ef563} }, -/**/ {{0x75403dbd, 0x3c331d29} }, -/**/ {{0x1174124f, 0xbfa9aae0} }, -/**/ {{0x3eedb30b, 0x3f9df3bb} }, -/**/ {{0x1c632765, 0xbf6d7445} }, -/**/ {{0xa4fa03e7, 0xbf841b28} }, -/**/ {{0x8646990d, 0x3f84f5d2} } }, -/**/ {{{0x00000000, 0x3feae000} }, -/**/ {{0xb6c07b03, 0x3fe65aab} }, -/**/ {{0x3af32729, 0xbc67939b} }, -/**/ {{0xba718de8, 0x3fe2c3bd} }, -/**/ {{0xc4990a2b, 0xbc82d2fc} }, -/**/ {{0xe9586818, 0xbfd27b7c} }, -/**/ {{0x880839ca, 0x3c780d5e} }, -/**/ {{0x14dfe9e3, 0x3fb333d4} }, -/**/ {{0xbce74cae, 0x3c536469} }, -/**/ {{0xc77983b8, 0x3f9df677} }, -/**/ {{0xb42f53aa, 0x3c373272} }, -/**/ {{0x9f3c360e, 0xbfa9512c} }, -/**/ {{0x72d37b24, 0x3f9dd8df} }, -/**/ {{0x02e417f5, 0xbf6febf1} }, -/**/ {{0xd16a1579, 0xbf83601e} }, -/**/ {{0x294a83e4, 0x3f849a74} } }, -/**/ {{{0x00000000, 0x3feb0000} }, -/**/ {{0x3923e087, 0x3fe66d66} }, -/**/ {{0xebe8bbba, 0xbc76ea6f} }, -/**/ {{0x74aea886, 0x3fe2b149} }, -/**/ {{0xa9d6d16a, 0x3c868ffd} }, -/**/ {{0xed65571e, 0xbfd26d0a} }, -/**/ {{0x476fb5f2, 0x3c6cf972} }, -/**/ {{0x8be1339f, 0x3fb3514c} }, -/**/ {{0x3f722216, 0x3c5c8c0f} }, -/**/ {{0x300f8f9b, 0x3f9cfb0b} }, -/**/ {{0x38d1c932, 0xbc0edd81} }, -/**/ {{0xf34b004f, 0xbfa8f7cc} }, -/**/ {{0x1bd3bde0, 0x3f9dbbe5} }, -/**/ {{0x9bf7dceb, 0xbf712637} }, -/**/ {{0xa146e5b2, 0xbf82a84e} }, -/**/ {{0x05f2718e, 0x3f843e5e} } }, -/**/ {{{0x00000000, 0x3feb2000} }, -/**/ {{0x4e7e2858, 0x3fe6800e} }, -/**/ {{0x1b3e90f0, 0xbc58ea6a} }, -/**/ {{0xabd5912c, 0x3fe29ee3} }, -/**/ {{0xb17c28e3, 0xbc61b3cd} }, -/**/ {{0x34f221eb, 0xbfd25e83} }, -/**/ {{0xfa300585, 0xbc74c483} }, -/**/ {{0x5495f6e3, 0x3fb36dcb} }, -/**/ {{0x311973fe, 0x3c59b55b} }, -/**/ {{0x9864d139, 0x3f9c031a} }, -/**/ {{0xbd00e171, 0x3c28fdf3} }, -/**/ {{0x4b026585, 0xbfa89ec7} }, -/**/ {{0x54a5ed3d, 0x3f9d9ce0} }, -/**/ {{0xa8cb6dfc, 0xbf724b13} }, -/**/ {{0x015469a9, 0xbf81f3be} }, -/**/ {{0x66a50a89, 0x3f83e1ae} } }, -/**/ {{{0x00000000, 0x3feb4000} }, -/**/ {{0x0556fb6a, 0x3fe692a4} }, -/**/ {{0x5a8ea2cc, 0x3c8d94b9} }, -/**/ {{0x75459603, 0x3fe28c8c} }, -/**/ {{0x2945fc08, 0x3c8b1c3b} }, -/**/ {{0x79f37468, 0xbfd24fe6} }, -/**/ {{0x0ec1ef94, 0xbc4e3751} }, -/**/ {{0xe931c53b, 0x3fb38953} }, -/**/ {{0x16d80688, 0xbc3b108d} }, -/**/ {{0x5e1b50b5, 0x3f9b0ea2} }, -/**/ {{0x63fd1067, 0x3c0074c0} }, -/**/ {{0xa7fc7800, 0xbfa84621} }, -/**/ {{0xdd10256e, 0x3f9d7be4} }, -/**/ {{0xc9592c5e, 0xbf7364c0} }, -/**/ {{0xd318d707, 0xbf814271} }, -/**/ {{0x64d217b8, 0x3f838482} } }, -/**/ {{{0x00000000, 0x3feb6000} }, -/**/ {{0x6c4b0576, 0x3fe6a527} }, -/**/ {{0x9c46a69e, 0xbc8f6b65} }, -/**/ {{0xe5a55de9, 0x3fe27a43} }, -/**/ {{0xedc25d49, 0x3c66846e} }, -/**/ {{0x73c3b821, 0xbfd24135} }, -/**/ {{0x56ab5808, 0xbc79202a} }, -/**/ {{0xc0282c84, 0x3fb3a3e9} }, -/**/ {{0x03d25dab, 0x3c4057ca} }, -/**/ {{0xa3eb854d, 0x3f9a1d9e} }, -/**/ {{0xf03e2fb1, 0xbc3775ed} }, -/**/ {{0xd11d1043, 0xbfa7ede1} }, -/**/ {{0x195e6961, 0x3f9d5906} }, -/**/ {{0x65130256, 0xbf747373} }, -/**/ {{0xf77fd664, 0xbf80946d} }, -/**/ {{0xedc272c2, 0x3f8326f5} } }, -/**/ {{{0x00000000, 0x3feb8000} }, -/**/ {{0x920b3d99, 0x3fe6b798} }, -/**/ {{0x6188c50e, 0xbc8a8038} }, -/**/ {{0x10e5813e, 0x3fe2680a} }, -/**/ {{0x2242a6bc, 0xbc8f5497} }, -/**/ {{0xd725fa1c, 0xbfd23270} }, -/**/ {{0x5c781b14, 0x3c757282} }, -/**/ {{0x4bf2f124, 0x3fb3bd90} }, -/**/ {{0x6a14ed74, 0x3c31ae9c} }, -/**/ {{0x53ea1533, 0x3f99300b} }, -/**/ {{0x68f98d7e, 0x3c2a8d88} }, -/**/ {{0x53a4e537, 0xbfa7960d} }, -/**/ {{0x11f5f086, 0x3f9d3457} }, -/**/ {{0x19baa1da, 0xbf757760} }, -/**/ {{0xb2a2ca7e, 0xbf7fd36a} }, -/**/ {{0xc7a02081, 0x3f82c923} } }, -/**/ {{{0x00000000, 0x3feba000} }, -/**/ {{0x855c3198, 0x3fe6c9f7} }, -/**/ {{0x29bd280d, 0x3c7c09de} }, -/**/ {{0x0a431fbd, 0x3fe255df} }, -/**/ {{0xf09a745d, 0x3c8d9866} }, -/**/ {{0x5648fb1f, 0xbfd22399} }, -/**/ {{0xb4df0b3e, 0x3c412100} }, -/**/ {{0xfada8899, 0x3fb3d64a} }, -/**/ {{0x659c4346, 0x3c3dd891} }, -/**/ {{0x21c2d0a1, 0x3f9845e4} }, -/**/ {{0xf397827c, 0x3c28c6b1} }, -/**/ {{0x8445c1cc, 0xbfa73ea9} }, -/**/ {{0x730360f8, 0x3f9d0dea} }, -/**/ {{0xac51ce30, 0xbf7670bb} }, -/**/ {{0xeef50deb, 0xbf7e8493} }, -/**/ {{0x96b119a9, 0x3f826b25} } }, -/**/ {{{0x00000000, 0x3febc000} }, -/**/ {{0x551553af, 0x3fe6dc44} }, -/**/ {{0x3573828e, 0xbc5bf886} }, -/**/ {{0xe44a7335, 0x3fe243c2} }, -/**/ {{0x65d1ffd7, 0xbc667287} }, -/**/ {{0xa0ca68d3, 0xbfd214af} }, -/**/ {{0x88820895, 0xbc71296c} }, -/**/ {{0x36c0c9a2, 0x3fb3ee1d} }, -/**/ {{0x831dfabe, 0x3c540bf6} }, -/**/ {{0x8ce8de84, 0x3f975f24} }, -/**/ {{0x43eb5853, 0xbc125368} }, -/**/ {{0x803788f8, 0xbfa6e7bb} }, -/**/ {{0x8c42d5f9, 0x3f9ce5d2} }, -/**/ {{0xfaadb3ab, 0xbf775fba} }, -/**/ {{0xde4c28da, 0xbf7d3c59} }, -/**/ {{0xe2bf7ef5, 0x3f820d13} } }, -/**/ {{{0x00000000, 0x3febe000} }, -/**/ {{0x10204aef, 0x3fe6ee7f} }, -/**/ {{0xa3066272, 0x3c8692ee} }, -/**/ {{0xb0d95ee5, 0x3fe231b5} }, -/**/ {{0x1eb505b6, 0x3c7aae7e} }, -/**/ {{0x63ba3e08, 0xbfd205b4} }, -/**/ {{0xb975517d, 0x3c71c6d1} }, -/**/ {{0x64edc729, 0x3fb4050a} }, -/**/ {{0x715db809, 0x3c4960ed} }, -/**/ {{0xe2bc143b, 0x3f967bc7} }, -/**/ {{0xf0823143, 0xbc2cbf17} }, -/**/ {{0x2e4dbc47, 0xbfa69148} }, -/**/ {{0x50e0982e, 0x3f9cbc21} }, -/**/ {{0xedaa432a, 0xbf784492} }, -/**/ {{0x0b4850f3, 0xbf7bfabd} }, -/**/ {{0x1caa2f2c, 0x3f81af06} } }, -/**/ {{{0x00000000, 0x3fec0000} }, -/**/ {{0xc5784634, 0x3fe700a7} }, -/**/ {{0x25aadef6, 0xbc78c34d} }, -/**/ {{0x8121fb78, 0x3fe21fb7} }, -/**/ {{0x8121fb78, 0x3c621fb7} }, -/**/ {{0x499e4889, 0xbfd1f6a8} }, -/**/ {{0x6d4e0249, 0xbc60e934} }, -/**/ {{0xe5decb17, 0x3fb41b15} }, -/**/ {{0xab3541e6, 0x3c5194f4} }, -/**/ {{0x40a374b5, 0x3f959bc9} }, -/**/ {{0x54be0e10, 0xbc39dc6e} }, -/**/ {{0x400d3c9a, 0xbfa63b54} }, -/**/ {{0x57717232, 0x3f9c90e8} }, -/**/ {{0x6bfa704e, 0xbf791f78} }, -/**/ {{0x643da6dd, 0xbf7abfbc} }, -/**/ {{0xa418ed31, 0x3f815112} } }, -/**/ {{{0x00000000, 0x3fec2000} }, -/**/ {{0x84295198, 0x3fe712be} }, -/**/ {{0x337d8881, 0x3c85cd90} }, -/**/ {{0x65ad1f5b, 0x3fe20dc8} }, -/**/ {{0xd7b50d48, 0xbc88102a} }, -/**/ {{0xfa75d2f4, 0xbfd1e78b} }, -/**/ {{0x619624d2, 0x3c723734} }, -/**/ {{0x1517663e, 0x3fb43043} }, -/**/ {{0xe5e1ddf1, 0xbc4af8a4} }, -/**/ {{0x961cd605, 0x3f94bf23} }, -/**/ {{0x5ca14507, 0xbc26e86e} }, -/**/ {{0x32c1ffd7, 0xbfa5e5e4} }, -/**/ {{0xda0191cd, 0x3f9c6438} }, -/**/ {{0x4d921d2b, 0xbf79f0a0} }, -/**/ {{0x4e35d54e, 0xbf798b55} }, -/**/ {{0xcd4f7bfd, 0x3f80f34e} } }, -/**/ {{{0x00000000, 0x3fec4000} }, -/**/ {{0x5b4fae7b, 0x3fe724c3} }, -/**/ {{0x2db3499b, 0x3c5948b3} }, -/**/ {{0x6e5ce35d, 0x3fe1fbe8} }, -/**/ {{0x561e27a3, 0x3c8101d1} }, -/**/ {{0x1bbd70f4, 0xbfd1d860} }, -/**/ {{0xfa32c4d1, 0xbc7b4c97} }, -/**/ {{0x48f48a77, 0x3fb44495} }, -/**/ {{0xb47fdf89, 0xbc2ccfed} }, -/**/ {{0xa6c1af2c, 0x3f93e5d1} }, -/**/ {{0xc3b5a19b, 0xbc14af58} }, -/**/ {{0x5094795f, 0xbfa590fc} }, -/**/ {{0xb638ebc2, 0x3f9c3623} }, -/**/ {{0x4fa66d0e, 0xbf7ab83f} }, -/**/ {{0xb787e297, 0xbf785d83} }, -/**/ {{0xe71b4cea, 0x3f8095ce} } }, -/**/ {{{0x00000000, 0x3fec6000} }, -/**/ {{0x5a172dff, 0x3fe736b6} }, -/**/ {{0x06a892d1, 0x3c7775fd} }, -/**/ {{0xaa6f2377, 0x3fe1ea17} }, -/**/ {{0xcb44ec07, 0xbc8395a8} }, -/**/ {{0x5072ec76, 0xbfd1c925} }, -/**/ {{0xf650d5de, 0xbc6e11b3} }, -/**/ {{0xd281a42b, 0x3fb4580f} }, -/**/ {{0xf63226cb, 0xbc55bbce} }, -/**/ {{0x0c411254, 0x3f930fce} }, -/**/ {{0xc9852726, 0x3c3a4412} }, -/**/ {{0xb19e766e, 0xbfa53ca0} }, -/**/ {{0x6d941dd5, 0x3f9c06b9} }, -/**/ {{0x094128b2, 0xbf7b768a} }, -/**/ {{0x2a047c42, 0xbf773642} }, -/**/ {{0x40d7925f, 0x3f8038a6} } }, -/**/ {{{0x00000000, 0x3fec8000} }, -/**/ {{0x8fba8e0f, 0x3fe74897} }, -/**/ {{0x165884a1, 0x3c47b2a6} }, -/**/ {{0x287ffb8a, 0x3fe1d856} }, -/**/ {{0xfee27a9d, 0xbc658a1f} }, -/**/ {{0x39195240, 0xbfd1b9dc} }, -/**/ {{0x551dc6bf, 0x3c604646} }, -/**/ {{0xfd4fa866, 0x3fb46ab5} }, -/**/ {{0xc2febe43, 0x3c5f62a7} }, -/**/ {{0x384eda2c, 0x3f923d13} }, -/**/ {{0x1dfd9f34, 0x3c3b9a7c} }, -/**/ {{0x3cff324c, 0xbfa4e8d5} }, -/**/ {{0x25b0d0ad, 0x3f9bd60a} }, -/**/ {{0xe063d1e6, 0xbf7c2bb4} }, -/**/ {{0xdcb54dd5, 0xbf761589} }, -/**/ {{0x61077b85, 0x3f7fb7ce} } }, -/**/ {{{0x00000000, 0x3feca000} }, -/**/ {{0x0b82d8d8, 0x3fe75a67} }, -/**/ {{0x4c729087, 0x3c8ee4ac} }, -/**/ {{0xf68c4011, 0x3fe1c6a3} }, -/**/ {{0x32671c29, 0xbc8e54e4} }, -/**/ {{0x73bd1c8f, 0xbfd1aa85} }, -/**/ {{0x41d7bd80, 0x3c7525ad} }, -/**/ {{0x0f4e0cc0, 0x3fb47c8b} }, -/**/ {{0xd854875c, 0x3c2efdd1} }, -/**/ {{0x7688134d, 0x3f916d9b} }, -/**/ {{0x42a6f922, 0xbc1abef6} }, -/**/ {{0xa9ee694e, 0xbfa4959d} }, -/**/ {{0xa8aca118, 0x3f9ba425} }, -/**/ {{0xffb6fa1f, 0xbf7cd7f3} }, -/**/ {{0xc52e395a, 0xbf74fb52} }, -/**/ {{0x31d14661, 0x3f7eff46} } }, -/**/ {{{0x00000000, 0x3fecc000} }, -/**/ {{0xdcc6c6c0, 0x3fe76c24} }, -/**/ {{0x51adc83d, 0x3c819525} }, -/**/ {{0x21f3f28c, 0x3fe1b501} }, -/**/ {{0x5f1d67b6, 0xbc45712f} }, -/**/ {{0x9bf87a43, 0xbfd19b21} }, -/**/ {{0xb2071e48, 0xbc64520a} }, -/**/ {{0x48a59e43, 0x3fb48d92} }, -/**/ {{0x42014b8b, 0x3c5f8e56} }, -/**/ {{0xee4caccb, 0x3f90a160} }, -/**/ {{0x7b6daa67, 0x3c2bd92b} }, -/**/ {{0x80ce3489, 0xbfa442fd} }, -/**/ {{0x65959e45, 0x3f9b711b} }, -/**/ {{0x4cc2673a, 0xbf7d7b7b} }, -/**/ {{0xa86f8a8e, 0xbf73e793} }, -/**/ {{0xdf91602d, 0x3f7e47d4} } }, -/**/ {{{0x00000000, 0x3fece000} }, -/**/ {{0x12ea22c7, 0x3fe77dd1} }, -/**/ {{0x8fc10d3d, 0x3c873260} }, -/**/ {{0xb77cb1a2, 0x3fe1a36d} }, -/**/ {{0x6e625be9, 0xbc42c20d} }, -/**/ {{0x4af7b13c, 0xbfd18bb1} }, -/**/ {{0xbc063e5a, 0xbc68446b} }, -/**/ {{0xe3952cbb, 0x3fb49dce} }, -/**/ {{0x58cf9123, 0x3c588e60} }, -/**/ {{0x491cfa44, 0x3f8fb0bb} }, -/**/ {{0x0e3f2a43, 0x3c1534fc} }, -/**/ {{0x1c3b7aca, 0xbfa3f0f8} }, -/**/ {{0x70eb708a, 0x3f9b3cfa} }, -/**/ {{0x5eaa8b7f, 0xbf7e167e} }, -/**/ {{0x2b587c04, 0xbf72da42} }, -/**/ {{0x882fa65b, 0x3f7d9199} } }, -/**/ {{{0x00000000, 0x3fed0000} }, -/**/ {{0xbd5d315e, 0x3fe78f6b} }, -/**/ {{0x89803740, 0x3c8406a0} }, -/**/ {{0xc35424ca, 0x3fe191e9} }, -/**/ {{0xf4be863f, 0xbc8fa3c1} }, -/**/ {{0x177d9a85, 0xbfd17c35} }, -/**/ {{0x6a99d546, 0xbc717b81} }, -/**/ {{0x144fffae, 0x3fb4ad44} }, -/**/ {{0xdccca2a3, 0x3c3538b3} }, -/**/ {{0xfb2b5523, 0x3f8e2516} }, -/**/ {{0x60181bd9, 0x3c0f7c11} }, -/**/ {{0xaa1cc641, 0xbfa39f90} }, -/**/ {{0x85304289, 0x3f9b07d1} }, -/**/ {{0x756fd193, 0xbf7ea930} }, -/**/ {{0xe2a9a0de, 0xbf71d352} }, -/**/ {{0x886fc912, 0x3f7cdcb1} } }, -/**/ {{{0x00000000, 0x3fed2000} }, -/**/ {{0xeb9c19a2, 0x3fe7a0f4} }, -/**/ {{0xcd815f57, 0x3c613c67} }, -/**/ {{0x5112636f, 0x3fe18075} }, -/**/ {{0x7a335b20, 0x3c80a172} }, -/**/ {{0x95e83705, 0xbfd16cad} }, -/**/ {{0x7b21d5e1, 0x3c62a94b} }, -/**/ {{0x08de0a7c, 0x3fb4bbf5} }, -/**/ {{0x057457a0, 0x3c3570d0} }, -/**/ {{0x7d750fdf, 0x3f8c9fc8} }, -/**/ {{0xfe4cff3c, 0x3c2900a7} }, -/**/ {{0x2caf50ea, 0xbfa34eca} }, -/**/ {{0x03888c77, 0x3f9ad1af} }, -/**/ {{0x71ac3a86, 0xbf7f33c4} }, -/**/ {{0x6296fd58, 0xbf70d2b9} }, -/**/ {{0x886d16b8, 0x3f7c2938} } }, -/**/ {{{0x00000000, 0x3fed4000} }, -/**/ {{0xad2e50fe, 0x3fe7b26c} }, -/**/ {{0xf30411fb, 0xbc8ce80d} }, -/**/ {{0x6bbc577a, 0x3fe16f10} }, -/**/ {{0xbd8abf47, 0xbc7d0db6} }, -/**/ {{0x58355b5f, 0xbfd15d1b} }, -/**/ {{0xbcc70038, 0xbc5b5457} }, -/**/ {{0xe8fdd51d, 0x3fb4c9e4} }, -/**/ {{0x28ac9383, 0x3c462959} }, -/**/ {{0x2029f143, 0x3f8b20c3} }, -/**/ {{0x2b420400, 0xbc2f8a44} }, -/**/ {{0x7b921c49, 0xbfa2fea7} }, -/**/ {{0xf468e79e, 0x3f9a9aa0} }, -/**/ {{0xcccbcb4f, 0xbf7fb66c} }, -/**/ {{0x9bd39a5f, 0xbf6fb0d0} }, -/**/ {{0x8813998f, 0x3f7b7748} } }, -/**/ {{{0x00000000, 0x3fed6000} }, -/**/ {{0x11a6092b, 0x3fe7c3d3} }, -/**/ {{0x2d303288, 0x3c8bb3cb} }, -/**/ {{0x1dc61b17, 0x3fe15dbb} }, -/**/ {{0xbb77dc56, 0xbc8f0487} }, -/**/ {{0xee0771ca, 0xbfd14d7e} }, -/**/ {{0xdc2fcbd0, 0x3c72d38b} }, -/**/ {{0xd6080f0e, 0x3fb4d716} }, -/**/ {{0xa9fbc2c3, 0xbc5cb5bc} }, -/**/ {{0xfc42e02f, 0x3f89a7f9} }, -/**/ {{0x857be8a4, 0xbc201eec} }, -/**/ {{0x44ceebb3, 0xbfa2af2b} }, -/**/ {{0x08511639, 0x3f9a62b5} }, -/**/ {{0xc8de23de, 0xbf8018ad} }, -/**/ {{0xc964501a, 0xbf6dc8a2} }, -/**/ {{0xeb913697, 0x3f7ac6f9} } }, -/**/ {{{0x00000000, 0x3fed8000} }, -/**/ {{0x289fa093, 0x3fe7d528} }, -/**/ {{0x1e2f3aa9, 0x3c856082} }, -/**/ {{0x711551bb, 0x3fe14c75} }, -/**/ {{0x71970f2c, 0xbc80c88e} }, -/**/ {{0xe4aa5095, 0xbfd13dd8} }, -/**/ {{0xb4b7ae12, 0x3c66dd31} }, -/**/ {{0xead4c211, 0x3fb4e38d} }, -/**/ {{0xe392a31e, 0x3c513fb0} }, -/**/ {{0xf6b74576, 0x3f88355f} }, -/**/ {{0xf3561ab7, 0x3ba8cb44} }, -/**/ {{0x0de0faaa, 0xbfa26058} }, -/**/ {{0x989371f0, 0x3f9a29f8} }, -/**/ {{0x2b085d9a, 0xbf805261} }, -/**/ {{0x2511c555, 0xbf6beccb} }, -/**/ {{0x87b9d333, 0x3f7a1863} } }, -/**/ {{{0x00000000, 0x3feda000} }, -/**/ {{0x01c114fe, 0x3fe7e66c} }, -/**/ {{0x8b760b8d, 0xbc8c82b8} }, -/**/ {{0x6f037c44, 0x3fe13b3f} }, -/**/ {{0x8562c8c0, 0xbc635393} }, -/**/ {{0xc7182435, 0xbfd12e29} }, -/**/ {{0x0d0fda95, 0xbc73da80} }, -/**/ {{0x3ba21a8b, 0x3fb4ef4d} }, -/**/ {{0x9aa41146, 0xbc17c450} }, -/**/ {{0xc39dff46, 0x3f86c8e7} }, -/**/ {{0x800ba9ae, 0x3c1ddd70} }, -/**/ {{0x34b94b56, 0xbfa21230} }, -/**/ {{0xa827f95a, 0x3f99f078} }, -/**/ {{0x19caa997, 0xbf808869} }, -/**/ {{0xf8c46d26, 0xbf6a1d29} }, -/**/ {{0xae59da17, 0x3f796b9a} } }, -/**/ {{{0x00000000, 0x3fedc000} }, -/**/ {{0xacb97898, 0x3fe7f79e} }, -/**/ {{0x80ead221, 0x3c8fd5ca} }, -/**/ {{0x20604825, 0x3fe12a19} }, -/**/ {{0xa18970f8, 0xbc5cc7d6} }, -/**/ {{0x1dfe6ba4, 0xbfd11e72} }, -/**/ {{0x9d653d1c, 0x3c706717} }, -/**/ {{0xd5fcbb3b, 0x3fb4fa57} }, -/**/ {{0x5f50bc06, 0x3c1922c8} }, -/**/ {{0xe93a179f, 0x3f856283} }, -/**/ {{0x5ea7135a, 0xbc01c2ec} }, -/**/ {{0xf0c06b4f, 0xbfa1c4b5} }, -/**/ {{0xe48a3b04, 0x3f99b641} }, -/**/ {{0xe1280a21, 0xbf80badd} }, -/**/ {{0x1be3c5dd, 0xbf68599e} }, -/**/ {{0x3a72c8e6, 0x3f78c0b3} } }, -/**/ {{{0x00000000, 0x3fede000} }, -/**/ {{0x3940694b, 0x3fe808c0} }, -/**/ {{0x7715f6a5, 0xbc800f32} }, -/**/ {{0x8d73d98e, 0x3fe11902} }, -/**/ {{0x30f8e290, 0x3c71d158} }, -/**/ {{0x6fc305eb, 0xbfd10eb2} }, -/**/ {{0x3858c4b7, 0xbc7fd2e3} }, -/**/ {{0xc0a99255, 0x3fb504b0} }, -/**/ {{0x142e134f, 0x3c55c054} }, -/**/ {{0xc2f371cf, 0x3f840226} }, -/**/ {{0xfc7d6225, 0xbbfc85b0} }, -/**/ {{0x53d58f53, 0xbfa177eb} }, -/**/ {{0xa6a1627d, 0x3f997b60} }, -/**/ {{0x89757c78, 0xbf80e9d7} }, -/**/ {{0x0d433cd6, 0xbf66a205} }, -/**/ {{0x9c5dbd9f, 0x3f7817bf} } }, -/**/ {{{0x00000000, 0x3fee0000} }, -/**/ {{0xb7158a4d, 0x3fe819d0} }, -/**/ {{0x29d3b917, 0xbc7bf762} }, -/**/ {{0xbe011080, 0x3fe107fb} }, -/**/ {{0xbe011080, 0xbc8107fb} }, -/**/ {{0x40894fcd, 0xbfd0feeb} }, -/**/ {{0xc155af9a, 0x3c76fbb9} }, -/**/ {{0xfb9125f7, 0x3fb50e5a} }, -/**/ {{0x2f3313b0, 0x3c357762} }, -/**/ {{0x843ba55a, 0x3f82a7c2} }, -/**/ {{0x3fc197b7, 0x3c1f4994} }, -/**/ {{0x4b4ae875, 0xbfa12bd2} }, -/**/ {{0xf3b1b1ee, 0x3f993fe0} }, -/**/ {{0xd4c2083b, 0xbf81156d} }, -/**/ {{0x0c35aa9c, 0xbf64f63b} }, -/**/ {{0xe5d0462f, 0x3f7770d0} } }, -/**/ {{{0x00000000, 0x3fee2000} }, -/**/ {{0x36000005, 0x3fe82ad0} }, -/**/ {{0xce924d24, 0x3c74592f} }, -/**/ {{0xb947c8b7, 0x3fe0f704} }, -/**/ {{0x48a651b3, 0x3c436cd7} }, -/**/ {{0x1237505b, 0xbfd0ef1d} }, -/**/ {{0x1b86b9d1, 0x3c69239b} }, -/**/ {{0x7fac4e21, 0x3fb51759} }, -/**/ {{0xbfce0e36, 0xbc42a8cc} }, -/**/ {{0x3b5f3edd, 0x3f815349} }, -/**/ {{0x88c702d9, 0xbc25e1f1} }, -/**/ {{0xa0df17a9, 0xbfa0e06c} }, -/**/ {{0x7e56b8b1, 0x3f9903ce} }, -/**/ {{0x3c701e30, 0xbf813db8} }, -/**/ {{0x30c99e47, 0xbf63561b} }, -/**/ {{0xd5bffce0, 0x3f76cbf6} } }, -/**/ {{{0x00000000, 0x3fee4000} }, -/**/ {{0xc5cdee22, 0x3fe83bbe} }, -/**/ {{0x04ffc6c3, 0x3c631071} }, -/**/ {{0x86071468, 0x3fe0e61d} }, -/**/ {{0x59be09c9, 0xbc70ccc4} }, -/**/ {{0x647af38b, 0xbfd0df48} }, -/**/ {{0x427c295b, 0x3c7dd47c} }, -/**/ {{0x3ef25277, 0x3fb51faf} }, -/**/ {{0xa81026a7, 0x3bdf056a} }, -/**/ {{0xd443a18b, 0x3f8004ac} }, -/**/ {{0x8178f329, 0x3c027610} }, -/**/ {{0xfbb3a658, 0xbfa095bb} }, -/**/ {{0xa7859d46, 0x3f98c734} }, -/**/ {{0xeefe9a81, 0xbf8162cd} }, -/**/ {{0x8330eac0, 0xbf61c17f} }, -/**/ {{0xe421c20a, 0x3f76293f} } }, -/**/ {{{0x00000000, 0x3fee6000} }, -/**/ {{0x7653f7eb, 0x3fe84c9c} }, -/**/ {{0xfe0a3e8f, 0xbc383611} }, -/**/ {{0x2a7f71b5, 0x3fe0d546} }, -/**/ {{0x596848c6, 0x3c757061} }, -/**/ {{0xb4cf51a6, 0xbfd0cf6d} }, -/**/ {{0x5b18bb8c, 0x3c4c99ab} }, -/**/ {{0x24486227, 0x3fb5275f} }, -/**/ {{0xbb1f4f56, 0x3c5b4a59} }, -/**/ {{0x36238bb2, 0x3f7d77be} }, -/**/ {{0xcaec6ba2, 0x3c1ddbd1} }, -/**/ {{0xe1406cd0, 0xbfa04bc1} }, -/**/ {{0x7f96d6ca, 0x3f988a1e} }, -/**/ {{0xcdffc380, 0xbf8184c5} }, -/**/ {{0x12561f8b, 0xbf603841} }, -/**/ {{0x4d81a668, 0x3f7588b9} } }, -/**/ {{{0x00000000, 0x3fee8000} }, -/**/ {{0x576cc2c5, 0x3fe85d69} }, -/**/ {{0x7fc8b8c3, 0x3c66b66e} }, -/**/ {{0xac74fadc, 0x3fe0c47e} }, -/**/ {{0x77bb1887, 0xbc8035f8} }, -/**/ {{0x7e8202a9, 0xbfd0bf8d} }, -/**/ {{0x1f4d2357, 0x3c798048} }, -/**/ {{0x13725c73, 0x3fb52e6c} }, -/**/ {{0xf5b19ded, 0xbc34c3af} }, -/**/ {{0x7d9c2711, 0x3f7af1a3} }, -/**/ {{0x1af1098d, 0x3bea7ec7} }, -/**/ {{0xb643d11f, 0xbfa0027f} }, -/**/ {{0xc756b7d7, 0x3f984c96} }, -/**/ {{0x6c3ca3ae, 0xbf81a3b6} }, -/**/ {{0x13459246, 0xbf5d7470} }, -/**/ {{0x1e70d9a4, 0x3f74ea6f} } }, -/**/ {{{0x00000000, 0x3feea000} }, -/**/ {{0x78f87ae5, 0x3fe86e25} }, -/**/ {{0x375cfe34, 0x3c8022b1} }, -/**/ {{0x11319104, 0x3fe0b3c7} }, -/**/ {{0x25152519, 0x3c8ac394} }, -/**/ {{0x3ab87c8a, 0xbfd0afa8} }, -/**/ {{0x27b31384, 0x3c724f26} }, -/**/ {{0xe904e078, 0x3fb534d8} }, -/**/ {{0xf8948323, 0xbc55bfde} }, -/**/ {{0xa7bb2dfb, 0x3f7876ec} }, -/**/ {{0x8a87be50, 0xbc197116} }, -/**/ {{0x7f5f95b4, 0xbf9f73ed} }, -/**/ {{0xf11c3266, 0x3f980ea7} }, -/**/ {{0x0c032389, 0xbf81bfb6} }, -/**/ {{0x8bf305a1, 0xbf5a8e77} }, -/**/ {{0x3ec72e6d, 0x3f744e6c} } }, -/**/ {{{0x00000000, 0x3feec000} }, -/**/ {{0xeadc5a2a, 0x3fe87ed0} }, -/**/ {{0xd957f4bc, 0x3c70af5a} }, -/**/ {{0x5d8701b3, 0x3fe0a31f} }, -/**/ {{0x263ce937, 0xbc869b25} }, -/**/ {{0x60757b83, 0xbfd09fbe} }, -/**/ {{0xa96db9ef, 0x3c767aff} }, -/**/ {{0x7a589afb, 0x3fb53aa8} }, -/**/ {{0x0844ff86, 0xbc4b7e8e} }, -/**/ {{0xacf1a65c, 0x3f76077c} }, -/**/ {{0xb13331a9, 0xbc19a3b2} }, -/**/ {{0x472733eb, 0xbf9ee450} }, -/**/ {{0x21e541d7, 0x3f97d05c} }, -/**/ {{0x9d9d4dfc, 0xbf81d8da} }, -/**/ {{0xd3ce1b4a, 0xbf57be45} }, -/**/ {{0x7cb60047, 0x3f73b4ba} } }, -/**/ {{{0x00000000, 0x3feee000} }, -/**/ {{0xbd023119, 0x3fe88f6b} }, -/**/ {{0x25aba660, 0xbc532d1d} }, -/**/ {{0x95d126c6, 0x3fe09287} }, -/**/ {{0xeccc37a6, 0x3c85aad3} }, -/**/ {{0x649e7367, 0xbfd08fd0} }, -/**/ {{0xed21a127, 0x3c71e96c} }, -/**/ {{0x957ec910, 0x3fb53fdd} }, -/**/ {{0xaf97a601, 0xbc339c23} }, -/**/ {{0x5a18e5a2, 0x3f73a336} }, -/**/ {{0x477571de, 0xbc1f7225} }, -/**/ {{0xd4044135, 0xbf9e5629} }, -/**/ {{0x32786dc4, 0x3f9791bd} }, -/**/ {{0xbdf030c4, 0xbf81ef39} }, -/**/ {{0xe21b8bcb, 0xbf550386} }, -/**/ {{0x97aa7fb2, 0x3f731d62} } }, -/**/ {{{0x00000000, 0x3fef0000} }, -/**/ {{0xff57f1f8, 0x3fe89ff5} }, -/**/ {{0x5e177a1b, 0xbc855b9a} }, -/**/ {{0xbdf80108, 0x3fe081ff} }, -/**/ {{0x80108200, 0x3c6ffbdf} }, -/**/ {{0xba010928, 0xbfd07fde} }, -/**/ {{0x7bae0295, 0x3c38d37f} }, -/**/ {{0x0136e69f, 0x3fb5447b} }, -/**/ {{0x0dda278d, 0x3c50316a} }, -/**/ {{0x55103947, 0x3f7149fc} }, -/**/ {{0x849e505f, 0x3c176e96} }, -/**/ {{0xfbe9a2ee, 0xbf9dc97b} }, -/**/ {{0xb08adda9, 0x3f9752d4} }, -/**/ {{0xb540d106, 0xbf8202e8} }, -/**/ {{0x859de3e9, 0xbf525de5} }, -/**/ {{0x4afd9f21, 0x3f72886c} } }, -/**/ {{{0x00000000, 0x3fef2000} }, -/**/ {{0xc1cf3dff, 0x3fe8b06f} }, -/**/ {{0x2656db6d, 0xbc80fb31} }, -/**/ {{0xd971cd38, 0x3fe07187} }, -/**/ {{0x202c20ac, 0x3c89baa4} }, -/**/ {{0xd15893ab, 0xbfd06fe9} }, -/**/ {{0xdc0cb586, 0xbc7a864b} }, -/**/ {{0x7ce57fed, 0x3fb54883} }, -/**/ {{0x294f4b18, 0xbc49498e} }, -/**/ {{0x426ebecc, 0x3f6df762} }, -/**/ {{0xf28644c0, 0xbc022f08} }, -/**/ {{0x5c564b44, 0xbf9d3e48} }, -/**/ {{0xdfea7acf, 0x3f9713ab} }, -/**/ {{0x761db35c, 0xbf8213fc} }, -/**/ {{0x10d60f49, 0xbf4f9a17} }, -/**/ {{0x58700e9b, 0x3f71f5de} } }, -/**/ {{{0x00000000, 0x3fef4000} }, -/**/ {{0x145cf49d, 0x3fe8c0d9} }, -/**/ {{0x76dc4333, 0x3c8bea40} }, -/**/ {{0xeb45139a, 0x3fe0611f} }, -/**/ {{0x65aadb1f, 0x3c7e4998} }, -/**/ {{0x1953a316, 0xbfd05ff2} }, -/**/ {{0xa1b67b0f, 0x3c759922} }, -/**/ {{0xc08c1d66, 0x3fb54bf9} }, -/**/ {{0xd220330c, 0x3c5b9353} }, -/**/ {{0x478cb604, 0x3f69706e} }, -/**/ {{0xa22fd45a, 0xbbfdb6d3} }, -/**/ {{0x5c0d1d38, 0xbf9cb490} }, -/**/ {{0xbbaba2f2, 0x3f96d44b} }, -/**/ {{0x9c6b7de1, 0xbf822289} }, -/**/ {{0xa49803b6, 0xbf4aa143} }, -/**/ {{0x9270e49e, 0x3f7165be} } }, -/**/ {{{0x00000000, 0x3fef6000} }, -/**/ {{0x06f8c4cb, 0x3fe8d132} }, -/**/ {{0xbaa89a8b, 0xbc7b018c} }, -/**/ {{0xf60ab1f4, 0x3fe050c7} }, -/**/ {{0xc6cf5796, 0x3c63f8e2} }, -/**/ {{0xfe998dc0, 0xbfd04ff7} }, -/**/ {{0x7dc56419, 0x3c77873c} }, -/**/ {{0x7cc24121, 0x3fb54ee0} }, -/**/ {{0x8e5c84c5, 0x3c313117} }, -/**/ {{0x50066301, 0x3f64fee1} }, -/**/ {{0x017261a1, 0x3c043698} }, -/**/ {{0x2cc5b4f1, 0xbf9c2c55} }, -/**/ {{0xf759f369, 0x3f9694bc} }, -/**/ {{0x6c93426a, 0xbf822ea4} }, -/**/ {{0x135d6c51, 0xbf45d0a1} }, -/**/ {{0xe62dc18f, 0x3f70d811} } }, -/**/ {{{0x00000000, 0x3fef8000} }, -/**/ {{0xa99cc05e, 0x3fe8e17a} }, -/**/ {{0xab042f61, 0xbc7ec182} }, -/**/ {{0xfbefe001, 0x3fe0407f} }, -/**/ {{0xfbf80041, 0x3c401ffe} }, -/**/ {{0xebd00209, 0xbfd03ffb} }, -/**/ {{0xb9004112, 0xbc53ff3c} }, -/**/ {{0x5aaf6d91, 0x3fb5513a} }, -/**/ {{0xc0516ddb, 0x3c54a20d} }, -/**/ {{0xc6ac4038, 0x3f60a27f} }, -/**/ {{0x2a340912, 0x3bf06bee} }, -/**/ {{0xccd6032a, 0xbf9ba597} }, -/**/ {{0x002bb974, 0x3f965508} }, -/**/ {{0xd2d1068b, 0xbf823860} }, -/**/ {{0x666265bc, 0xbf41277e} }, -/**/ {{0x656b66ea, 0x3f704cdc} } }, -/**/ {{{0x00000000, 0x3fefa000} }, -/**/ {{0x0c44f167, 0x3fe8f1b3} }, -/**/ {{0xb93933fd, 0x3c6dd1ca} }, -/**/ {{0xfeb82e4e, 0x3fe03047} }, -/**/ {{0x5272e5ac, 0x3c69ee56} }, -/**/ {{0x49a09c45, 0xbfd02ffe} }, -/**/ {{0xb26267bb, 0xbc700a59} }, -/**/ {{0xfc062d2f, 0x3fb55309} }, -/**/ {{0xb11938e0, 0x3c5dba48} }, -/**/ {{0xe4f365be, 0x3f58b61b} }, -/**/ {{0xa79ad31a, 0x3bf8b585} }, -/**/ {{0x08d4ad17, 0xbf9b2059} }, -/**/ {{0xfe379940, 0x3f961534} }, -/**/ {{0x62a1270e, 0xbf823fd2} }, -/**/ {{0x3f3a0aec, 0xbf394a53} }, -/**/ {{0xa04bcae2, 0x3f6f8842} } }, -/**/ {{{0x00000000, 0x3fefc000} }, -/**/ {{0x3eeef187, 0x3fe901db} }, -/**/ {{0xe5603c8f, 0x3c868665} }, -/**/ {{0xffbf7f80, 0x3fe0201f} }, -/**/ {{0xffbf7f80, 0x3c20201f} }, -/**/ {{0x7ebe8004, 0xbfd01fff} }, -/**/ {{0xcf979001, 0xbc4213ff} }, -/**/ {{0xfb0012db, 0x3fb55451} }, -/**/ {{0xf73aa59f, 0xbc395606} }, -/**/ {{0xfc757100, 0x3f50509f} }, -/**/ {{0xfee554d0, 0x3bebc7da} }, -/**/ {{0x7d3424d0, 0xbf9a9c99} }, -/**/ {{0xd5ac0217, 0x3f95d54b} }, -/**/ {{0x564b3c49, 0xbf82450c} }, -/**/ {{0xe6d3e986, 0xbf3091df} }, -/**/ {{0x3bef5a22, 0x3f6e7bc6} } }, -/**/ {{{0x00000000, 0x3fefe000} }, -/**/ {{0x5199833b, 0x3fe911f3} }, -/**/ {{0x0edbf522, 0x3c63ae8a} }, -/**/ {{0xfffbfbfe, 0x3fe01007} }, -/**/ {{0xfffbfbfe, 0x3ba01007} }, -/**/ {{0xefebf400, 0xbfd00fff} }, -/**/ {{0xfff9f97d, 0xbc401209} }, -/**/ {{0xea5aaaf6, 0x3fb55514} }, -/**/ {{0xb5b7b240, 0xbc529baa} }, -/**/ {{0xffc7abc4, 0x3f402827} }, -/**/ {{0xbfee6ab3, 0x3b5ba3d6} }, -/**/ {{0x97d67093, 0xbf9a1a59} }, -/**/ {{0x28080aaf, 0x3f959554} }, -/**/ {{0x8e892ce2, 0xbf824821} }, -/**/ {{0xfe70a2a6, 0xbf204877} }, -/**/ {{0x0e8ddd67, 0x3f6d7447} } }, -/**/ {{{0x00000000, 0x3feff800} }, -/**/ {{0xd439826e, 0x3fe91dfa} }, -/**/ {{0x6df48d55, 0xbc786a19} }, -/**/ {{0x7ffffbff, 0x3fe00400} }, -/**/ {{0xffbff800, 0xbbeffffe} }, -/**/ {{0xffbfebfd, 0xbfd003ff} }, -/**/ {{0x9ffff9fe, 0xbb600480} }, -/**/ {{0x53aa5aab, 0x3fb55551} }, -/**/ {{0x9baaab5b, 0xbc542a4a} }, -/**/ {{0x7fffc7eb, 0x3f200a02} }, -/**/ {{0x4770e940, 0xbb7dfffe} }, -/**/ {{0x9997d8d0, 0xbf99b9a5} }, -/**/ {{0x50a80a03, 0x3f956555} }, -/**/ {{0x86456493, 0xbf824914} }, -/**/ {{0x7ffe7329, 0xbf001207} }, -/**/ {{0x1c63fe2a, 0x3f6cb1ef} } }, - }; - -#endif -#endif diff --git a/sysdeps/ieee754/dbl-64/uexp.h b/sysdeps/ieee754/dbl-64/uexp.h deleted file mode 100644 index 83f9b618f6..0000000000 --- a/sysdeps/ieee754/dbl-64/uexp.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/******************************************************************/ -/* */ -/* MODULE_NAME:uexp.h */ -/* */ -/* common data and variables prototype and definition */ -/******************************************************************/ - -#ifndef UEXP_H -#define UEXP_H - -#include "mydefs.h" - -const static double zero = 0.0, hhuge = 1.0e300, tiny = 1.0e-300, -err_0 = 1.000014, err_1 = 0.000016; -const static int4 bigint = 0x40862002, - badint = 0x40876000,smallint = 0x3C8fffff; -const static int4 hugeint = 0x7FFFFFFF, infint = 0x7ff00000; - -#ifdef BIG_ENDI -const static mynumber inf = {{0x7FF00000, 0}}; /* inf */ -const static mynumber t256 = {{0x4ff00000, 0}}; /* 2^256 */ - -const static mynumber ln_two1 = {{0x3FE62E42, 0xFEFA3800}};/*0.69314718055989033 */ -const static mynumber ln_two2 = {{0x3D2EF357, 0x93C76730}};/*5.4979230187083712e-14*/ -const static mynumber log2e = {{0x3FF71547, 0x652B82FE}};/* 1.4426950408889634 */ - -const static mynumber p2 = {{0x3FE00000, 0x000004DC}};/* 0.50000000000013811 */ -const static mynumber p3 = {{0x3FC55555, 0x55555A0F}};/* 0.16666666666670024 */ - -const static mynumber three33 = {{0x42180000, 0}}; /* 25769803776 */ -const static mynumber three51 = {{0x43380000, 0}}; /* 6755399441055744 */ - -#else -#ifdef LITTLE_ENDI - const static mynumber inf = {{0, 0x7FF00000}}; /* inf */ - const static mynumber t256 = {{0, 0x4ff00000}}; /* 2^256 */ - - const static mynumber ln_two1 = {{0xFEFA3800, 0x3FE62E42}};/*0.69314718055989033 */ - const static mynumber ln_two2 = {{0x93C76730, 0x3D2EF357}};/*5.4979230187083712e-14*/ - const static mynumber log2e = {{0x652B82FE, 0x3FF71547}};/* 1.4426950408889634 */ - - const static mynumber p2 = {{0x000004DC, 0x3FE00000}};/* 0.50000000000013811 */ - const static mynumber p3 = {{0x55555A0F, 0x3FC55555}};/* 0.16666666666670024 */ - - const static mynumber three33 = {{0, 0x42180000}}; /* 25769803776 */ - const static mynumber three51 = {{0, 0x43380000}}; /* 6755399441055744 */ - -#endif -#endif -#endif diff --git a/sysdeps/ieee754/dbl-64/uexp.tbl b/sysdeps/ieee754/dbl-64/uexp.tbl deleted file mode 100644 index 3e5fdc5783..0000000000 --- a/sysdeps/ieee754/dbl-64/uexp.tbl +++ /dev/null @@ -1,1786 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/****************************************************************/ -/* TABLES FOR THE ulog() FUNCTION */ -/****************************************************************/ - -#ifdef BIG_ENDI - -static const union { - int i[1424]; - double x[712]; -} coar = { .i = { - 0x3FE69A59, 0xC8000000, 0x3DF22D4D, 0x6079C9F7, - 0x3FE6A5A9, 0xC8000000, 0x3E19882D, 0x25AF6823, - 0x3FE6B0FF, 0x74000000, 0xBE221476, 0x31DABF59, - 0x3FE6BC5A, 0xC8000000, 0x3E2312AC, 0x99A2DC0A, - 0x3FE6C7BB, 0xD0000000, 0xBE265926, 0xCE9F9355, - 0x3FE6D322, 0x84000000, 0x3E2F2C26, 0x2D298DED, - 0x3FE6DE8E, 0xF4000000, 0xBE2EC28E, 0x1E748D2F, - 0x3FE6EA01, 0x14000000, 0x3E2D8C6D, 0xC68CB7E5, - 0x3FE6F578, 0xF4000000, 0x3DEE1A9E, 0x419FE2F0, - 0x3FE700F6, 0x90000000, 0xBDFF1AFD, 0xDEAEAE34, - 0x3FE70C79, 0xEC000000, 0xBE0730FE, 0x558B7122, - 0x3FE71803, 0x0C000000, 0xBE25CB85, 0x2D280C3B, - 0x3FE72391, 0xF0000000, 0xBE06F2CE, 0x337B7B54, - 0x3FE72F26, 0x9C000000, 0x3E289BCA, 0x45C02B72, - 0x3FE73AC1, 0x18000000, 0xBE18DEA6, 0x5039F1CA, - 0x3FE74661, 0x60000000, 0xBE09D090, 0x86CE0538, - 0x3FE75207, 0x78000000, 0x3E290E79, 0xCFCE5DDB, - 0x3FE75DB3, 0x68000000, 0x3DD61DF0, 0xB249A17C, - 0x3FE76965, 0x2C000000, 0x3E2F22F7, 0xE13445F7, - 0x3FE7751C, 0xD0000000, 0xBE2CD454, 0x874E75CE, - 0x3FE780DA, 0x4C000000, 0xBE0159CE, 0xDF43E3BC, - 0x3FE78C9D, 0xA8000000, 0x3E279291, 0x699A1332, - 0x3FE79866, 0xEC000000, 0xBE2A0BCD, 0x2DD98C6C, - 0x3FE7A436, 0x10000000, 0x3E25F375, 0x15AC979E, - 0x3FE7B00B, 0x20000000, 0x3E26CCF5, 0x2FEAFCF6, - 0x3FE7BBE6, 0x1C000000, 0x3E27D4F4, 0x53ADAD67, - 0x3FE7C7C7, 0x08000000, 0x3E10EEC7, 0x7FBD9566, - 0x3FE7D3AD, 0xE4000000, 0x3E2837F0, 0x9A831D86, - 0x3FE7DF9A, 0xB8000000, 0xBE129BE0, 0x5CB4C35B, - 0x3FE7EB8D, 0x80000000, 0x3E23990A, 0x0234F04D, - 0x3FE7F786, 0x44000000, 0x3E2EB807, 0x64D5C842, - 0x3FE80385, 0x08000000, 0x3E0FC86F, 0x02B4E9E8, - 0x3FE80F89, 0xCC000000, 0xBDD7B5B3, 0x7B4274BF, - 0x3FE81B94, 0x94000000, 0xBE16888B, 0xB899B00F, - 0x3FE827A5, 0x60000000, 0x3E288971, 0x5E94D155, - 0x3FE833BC, 0x38000000, 0x3E2AEEB2, 0x099F3E5E, - 0x3FE83FD9, 0x20000000, 0xBE23B922, 0x3FF60B7C, - 0x3FE84BFC, 0x14000000, 0xBDF7D3B1, 0x2DBD8012, - 0x3FE85825, 0x1C000000, 0xBDF24BA3, 0xA8872BEB, - 0x3FE86454, 0x38000000, 0x3E2EFE04, 0x01AA18A7, - 0x3FE87089, 0x70000000, 0x3E21986C, 0x944496A2, - 0x3FE87CC4, 0xC4000000, 0x3E096A8B, 0xB71FFAFF, - 0x3FE88906, 0x38000000, 0xBE21CE0A, 0xBC4C7AC5, - 0x3FE8954D, 0xCC000000, 0xBE076F45, 0xBAC02491, - 0x3FE8A19B, 0x84000000, 0x3E2B4FA2, 0xD922B925, - 0x3FE8ADEF, 0x68000000, 0x3DF759DB, 0x641863AF, - 0x3FE8BA49, 0x78000000, 0xBE2DB97C, 0xC6AB5E04, - 0x3FE8C6A9, 0xB4000000, 0xBE25364C, 0xE2156713, - 0x3FE8D310, 0x20000000, 0x3E1BEB7C, 0x862BEFF7, - 0x3FE8DF7C, 0xC4000000, 0xBDF4DD0C, 0x1CEA33A5, - 0x3FE8EBEF, 0xA0000000, 0xBE2537DF, 0x51797D47, - 0x3FE8F868, 0xB4000000, 0x3E0FB1C4, 0xF0107B28, - 0x3FE904E8, 0x08000000, 0x3E0AD6A1, 0xE01B68BD, - 0x3FE9116D, 0x9C000000, 0x3E292117, 0x1F78D9D9, - 0x3FE91DF9, 0x78000000, 0xBE1D75DA, 0x4F50E5CF, - 0x3FE92A8B, 0x98000000, 0x3DE5102B, 0x74959E58, - 0x3FE93724, 0x04000000, 0xBE01CA50, 0xD2216C35, - 0x3FE943C2, 0xBC000000, 0x3E225BFD, 0xB0B05884, - 0x3FE95067, 0xC8000000, 0xBE0F2183, 0x60B7C5C1, - 0x3FE95D13, 0x24000000, 0x3E2FB47A, 0xB5860441, - 0x3FE969C4, 0xDC000000, 0xBE01FFD2, 0xE2D4059E, - 0x3FE9767C, 0xEC000000, 0xBDE9ED72, 0x12BB6A8D, - 0x3FE9833B, 0x58000000, 0x3E2B3815, 0x43BFFB24, - 0x3FE99000, 0x28000000, 0x3E03FA22, 0xEE9EAD1E, - 0x3FE99CCB, 0x5C000000, 0xBE213841, 0x377138F7, - 0x3FE9A99C, 0xF4000000, 0x3E178105, 0xDB636C94, - 0x3FE9B674, 0xF8000000, 0x3E1E5E7A, 0xF5720122, - 0x3FE9C353, 0x6C000000, 0xBE238BFF, 0xA2AC5AAE, - 0x3FE9D038, 0x4C000000, 0x3E270893, 0xF93BDBD8, - 0x3FE9DD23, 0xA4000000, 0x3DF40420, 0x354B86CF, - 0x3FE9EA15, 0x74000000, 0xBE2D76D3, 0x88CB06B7, - 0x3FE9F70D, 0xBC000000, 0xBE251639, 0x9ED0EC60, - 0x3FEA040C, 0x80000000, 0x3E1F06E9, 0xE2DDE506, - 0x3FEA1111, 0xC8000000, 0x3E014549, 0x8E6DB477, - 0x3FEA1E1D, 0x94000000, 0xBDF4BC17, 0xF8716509, - 0x3FEA2B2F, 0xE8000000, 0xBE2107DB, 0xDA723A49, - 0x3FEA3848, 0xC4000000, 0x3E1A932A, 0x986AA369, - 0x3FEA4568, 0x30000000, 0x3E198092, 0x41592CDB, - 0x3FEA528E, 0x30000000, 0xBE2E260F, 0x676BCAB8, - 0x3FEA5FBA, 0xC0000000, 0x3DE2E821, 0x2D5D5610, - 0x3FEA6CED, 0xE8000000, 0x3E2F7046, 0x7DA20167, - 0x3FEA7A27, 0xB0000000, 0xBE1D2832, 0xF9FAAD30, - 0x3FEA8768, 0x14000000, 0xBE23F788, 0x43FA6C45, - 0x3FEA94AF, 0x18000000, 0x3E011E27, 0xAA082732, - 0x3FEAA1FC, 0xC4000000, 0xBE20BACB, 0xC682F0BF, - 0x3FEAAF51, 0x18000000, 0xBE2DC7DD, 0x7BD08C78, - 0x3FEABCAC, 0x14000000, 0x3E2271A2, 0xA3B10F9A, - 0x3FEACA0D, 0xC4000000, 0xBE15449C, 0x7966F94C, - 0x3FEAD776, 0x24000000, 0x3DD06137, 0x6FD8F3EE, - 0x3FEAE4E5, 0x3C000000, 0xBE267CD1, 0x8C5A144A, - 0x3FEAF25B, 0x0C000000, 0xBE29E584, 0xB59DA94B, - 0x3FEAFFD7, 0x98000000, 0xBE23DFCF, 0x7B52192F, - 0x3FEB0D5A, 0xE4000000, 0xBE1CF2FE, 0x78A76B45, - 0x3FEB1AE4, 0xF4000000, 0xBE23A561, 0x7EC80FF6, - 0x3FEB2875, 0xC8000000, 0x3E22C4C9, 0x932EED68, - 0x3FEB360D, 0x68000000, 0x3E2B085C, 0xB5833C97, - 0x3FEB43AB, 0xD8000000, 0xBE01F093, 0x93B9319A, - 0x3FEB5151, 0x18000000, 0xBE254F01, 0xFABCE670, - 0x3FEB5EFD, 0x28000000, 0x3E2F24C2, 0x627ABFB0, - 0x3FEB6CB0, 0x14000000, 0x3E1F1EEC, 0xE6AC0B48, - 0x3FEB7A69, 0xDC000000, 0xBE1A8671, 0x127F9ABC, - 0x3FEB882A, 0x80000000, 0xBDCB0C28, 0xC87C73B3, - 0x3FEB95F2, 0x08000000, 0xBE22E8DD, 0x7F2B5A97, - 0x3FEBA3C0, 0x74000000, 0xBE1B3645, 0x2D22A9D5, - 0x3FEBB195, 0xC8000000, 0x3E0ADACA, 0x428F8B88, - 0x3FEBBF72, 0x0C000000, 0xBE2E9E07, 0xCDF9F681, - 0x3FEBCD55, 0x3C000000, 0xBE08A127, 0x7FA54ACF, - 0x3FEBDB3F, 0x60000000, 0x3E0E92CE, 0x8225B385, - 0x3FEBE930, 0x7C000000, 0x3DF38C2A, 0x7BB09485, - 0x3FEBF728, 0x94000000, 0xBE2DFD64, 0xF681FA5F, - 0x3FEC0527, 0xA4000000, 0x3E2E384D, 0xDCE88BD2, - 0x3FEC132D, 0xBC000000, 0xBE20F111, 0xFE46A893, - 0x3FEC213A, 0xD4000000, 0x3E193DA1, 0xB189BFDA, - 0x3FEC2F4E, 0xF8000000, 0xBE20E3A1, 0x0E39FB00, - 0x3FEC3D6A, 0x24000000, 0x3E1DB044, 0x30F0FAC5, - 0x3FEC4B8C, 0x64000000, 0xBE2BC12C, 0x97446B17, - 0x3FEC59B5, 0xB4000000, 0xBE282696, 0x963F4150, - 0x3FEC67E6, 0x18000000, 0x3E224D26, 0x3049824B, - 0x3FEC761D, 0x98000000, 0x3E2C5BA5, 0x87F84C7D, - 0x3FEC845C, 0x38000000, 0xBDE1D14D, 0xC4852339, - 0x3FEC92A1, 0xF8000000, 0xBE1A451E, 0x5588D9E1, - 0x3FECA0EE, 0xDC000000, 0xBE1D3B96, 0x68BFF457, - 0x3FECAF42, 0xE8000000, 0xBE18B670, 0x4DADF774, - 0x3FECBD9E, 0x20000000, 0xBE1A1548, 0x7FB1FC01, - 0x3FECCC00, 0x88000000, 0xBE273F2E, 0x78FC5AF0, - 0x3FECDA6A, 0x20000000, 0x3E1D218F, 0xA6F4A841, - 0x3FECE8DA, 0xF0000000, 0x3E2E0BA9, 0x4D002CA0, - 0x3FECF752, 0xFC000000, 0x3E20F4BB, 0x065EF979, - 0x3FED05D2, 0x48000000, 0xBE2ED3D5, 0x11793B33, - 0x3FED1458, 0xD0000000, 0x3E115E3C, 0x913341B3, - 0x3FED22E6, 0xA0000000, 0x3DE97C02, 0xB3546109, - 0x3FED317B, 0xB8000000, 0x3E087540, 0x1BF898EF, - 0x3FED4018, 0x1C000000, 0x3E209430, 0x346F9641, - 0x3FED4EBB, 0xD0000000, 0x3E2B6DF4, 0x88F4B20B, - 0x3FED5D66, 0xDC000000, 0xBE2EC68F, 0x0CB26035, - 0x3FED6C19, 0x38000000, 0x3E2CA2C8, 0x1F44D9C3, - 0x3FED7AD2, 0xF4000000, 0x3E10E6F4, 0x41704EE0, - 0x3FED8994, 0x0C000000, 0x3E2F9273, 0x25F8F0E2, - 0x3FED985C, 0x88000000, 0x3E2D041A, 0x318798DE, - 0x3FEDA72C, 0x6C000000, 0xBE005680, 0x9349CF58, - 0x3FEDB603, 0xB8000000, 0xBE10F665, 0xCF0C934D, - 0x3FEDC4E2, 0x70000000, 0x3E166124, 0x19461C64, - 0x3FEDD3C8, 0x9C000000, 0xBE1B2ED6, 0x405624C8, - 0x3FEDE2B6, 0x3C000000, 0xBE273A7F, 0x62171501, - 0x3FEDF1AB, 0x54000000, 0xBE26022B, 0xE36E1450, - 0x3FEE00A7, 0xE8000000, 0xBE1C341E, 0x2E07AE15, - 0x3FEE0FAB, 0xFC000000, 0xBDFC7EAE, 0x18D0E701, - 0x3FEE1EB7, 0x94000000, 0x3E06B34F, 0xECD1FF8B, - 0x3FEE2DCA, 0xB4000000, 0x3E1394A3, 0x6813A649, - 0x3FEE3CE5, 0x60000000, 0x3E045496, 0xC1754D14, - 0x3FEE4C07, 0x9C000000, 0xBE180FFF, 0xF5C6087C, - 0x3FEE5B31, 0x68000000, 0x3E22FBCD, 0xADD9A300, - 0x3FEE6A62, 0xCC000000, 0x3E2EC7C7, 0xAF0289E5, - 0x3FEE799B, 0xCC000000, 0x3E242182, 0x3FB3EDD4, - 0x3FEE88DC, 0x6C000000, 0xBE201304, 0x04E39885, - 0x3FEE9824, 0xAC000000, 0xBE20D352, 0xE6831D31, - 0x3FEEA774, 0x90000000, 0x3E1E032D, 0x618DFCEB, - 0x3FEEB6CC, 0x20000000, 0x3E1956A3, 0xF9BB457E, - 0x3FEEC62B, 0x60000000, 0xBE2A77E0, 0x50845DB2, - 0x3FEED592, 0x4C000000, 0x3E2714F7, 0x47C43858, - 0x3FEEE500, 0xF0000000, 0x3E2EED96, 0x71813A66, - 0x3FEEF477, 0x50000000, 0xBE04CDBE, 0x4FB4AA34, - 0x3FEF03F5, 0x6C000000, 0xBE2774A2, 0x86EB4FF5, - 0x3FEF137B, 0x48000000, 0xBE29DD95, 0xAD43B2D2, - 0x3FEF2308, 0xE8000000, 0xBE1CADB0, 0xAC16E506, - 0x3FEF329E, 0x50000000, 0x3E12AC33, 0x58745C7B, - 0x3FEF423B, 0x88000000, 0xBE248118, 0x6EC2D854, - 0x3FEF51E0, 0x8C000000, 0x3E26986B, 0x304ACE08, - 0x3FEF618D, 0x68000000, 0x3E126D81, 0x3B09354E, - 0x3FEF7142, 0x1C000000, 0x3DF06AAE, 0x773C23B3, - 0x3FEF80FE, 0xAC000000, 0xBDA105B6, 0xD82EF423, - 0x3FEF90C3, 0x1C000000, 0x3DECDEED, 0x465499B8, - 0x3FEFA08F, 0x70000000, 0x3E0AEFD4, 0xE2EF03AE, - 0x3FEFB063, 0xAC000000, 0x3E1BD4C0, 0x0567B2E7, - 0x3FEFC03F, 0xD4000000, 0x3E26AA22, 0x4F97FCBF, - 0x3FEFD023, 0xF0000000, 0xBE2F9420, 0x5E4E88D1, - 0x3FEFE00F, 0xFC000000, 0xBE254004, 0x438E52E2, - 0x3FEFF004, 0x00000000, 0xBE1552AA, 0xEEE93EFC, - 0x3FF00000, 0x00000000, 0x00000000, 0x00000000, - 0x3FF00802, 0x00000000, 0x3E155800, 0x4449F507, - 0x3FF01008, 0x04000000, 0xBE354AA8, 0x882D75D6, - 0x3FF01812, 0x08000000, 0x3E303610, 0x3740DE56, - 0x3FF02020, 0x14000000, 0x3E360044, 0x5B0C3264, - 0x3FF02832, 0x28000000, 0x3E3C4C26, 0x0197EDC3, - 0x3FF03048, 0x48000000, 0x3E0B103B, 0x5046CA09, - 0x3FF03862, 0x74000000, 0xBE34659C, 0xF9A62624, - 0x3FF04080, 0xAC000000, 0xBE254438, 0xDD0A8F37, - 0x3FF048A2, 0xF4000000, 0x3DF256C2, 0x97AFB6E2, - 0x3FF050C9, 0x50000000, 0xBE3085DF, 0x923D25E1, - 0x3FF058F3, 0xC0000000, 0xBE3F0A93, 0x5EA3B091, - 0x3FF06122, 0x44000000, 0xBE237DE4, 0x5D63534C, - 0x3FF06954, 0xE0000000, 0x3E301719, 0xFF0C58B7, - 0x3FF0718B, 0x98000000, 0x3E2E8410, 0x9DF7B665, - 0x3FF079C6, 0x6C000000, 0x3E349CB9, 0x3B127222, - 0x3FF08205, 0x60000000, 0x3DF127EC, 0x98E0BD08, - 0x3FF08A48, 0x74000000, 0xBE24C1B6, 0x706CC41F, - 0x3FF0928F, 0xA8000000, 0x3E334EF9, 0x093044EF, - 0x3FF09ADB, 0x04000000, 0xBE1304B1, 0x56BC6C83, - 0x3FF0A32A, 0x84000000, 0x3E2D383E, 0xB028B984, - 0x3FF0AB7E, 0x30000000, 0xBE315B1E, 0x64E7A202, - 0x3FF0B3D6, 0x04000000, 0xBE0AC1E6, 0xC678291E, - 0x3FF0BC32, 0x04000000, 0x3E3A0418, 0x2F12FFE2, - 0x3FF0C492, 0x38000000, 0xBE37D617, 0x43D6D302, - 0x3FF0CCF6, 0x98000000, 0x3E2133F2, 0x152CC8FA, - 0x3FF0D55F, 0x2C000000, 0x3E3CE5D1, 0xE966E6B7, - 0x3FF0DDCB, 0xF8000000, 0x3E1ABF24, 0x7BCACA64, - 0x3FF0E63C, 0xFC000000, 0xBE3854F6, 0x2E8CDBED, - 0x3FF0EEB2, 0x38000000, 0xBE3E6463, 0x0C32156B, - 0x3FF0F72B, 0xAC000000, 0x3E365671, 0xB69772CC, - 0x3FF0FFA9, 0x64000000, 0xBE383E9A, 0x02B1201A, - 0x3FF1082B, 0x58000000, 0xBE205962, 0x50549CC0, - 0x3FF110B1, 0x90000000, 0xBE376BFE, 0xFFDACA72, - 0x3FF1193C, 0x08000000, 0x3E3C1C59, 0x5C43E2F3, - 0x3FF121CA, 0xCC000000, 0xBE26D374, 0xF7067C8B, - 0x3FF12A5D, 0xD4000000, 0x3E343CCC, 0x4DDAFE1D, - 0x3FF132F5, 0x28000000, 0x3E3D5C16, 0x58EBCB7F, - 0x3FF13B90, 0xCC000000, 0xBE2B5D12, 0xB66E8B53, - 0x3FF14430, 0xBC000000, 0xBE24E919, 0xB326B482, - 0x3FF14CD4, 0xFC000000, 0x3E23139A, 0xC8AABD43, - 0x3FF1557D, 0x90000000, 0x3E30DD8B, 0x16743B55, - 0x3FF15E2A, 0x7C000000, 0xBE31D701, 0x35904C50, - 0x3FF166DB, 0xBC000000, 0x3E107F42, 0x30E0CA83, - 0x3FF16F91, 0x58000000, 0xBE24F1F2, 0xDA1B7123, - 0x3FF1784B, 0x50000000, 0xBE3ACAF2, 0x0DC79E23, - 0x3FF18109, 0xA4000000, 0xBE23DC79, 0x609374EE, - 0x3FF189CC, 0x58000000, 0x3E262CF7, 0x3A40C3B7, - 0x3FF19293, 0x70000000, 0x3E1D3833, 0x5A24F463, - 0x3FF19B5E, 0xEC000000, 0x3E2BA9AD, 0x8A2E4440, - 0x3FF1A42E, 0xD0000000, 0x3DFD8CBC, 0x61C41828, - 0x3FF1AD03, 0x1C000000, 0x3E1A65E6, 0x5A4DDF0D, - 0x3FF1B5DB, 0xD4000000, 0xBDE2FDBB, 0x9F828DB5, - 0x3FF1BEB8, 0xF8000000, 0x3E2F4EE8, 0xB79B700F, - 0x3FF1C79A, 0x8C000000, 0x3E3ACC35, 0x0DE1D7E8, - 0x3FF1D080, 0x94000000, 0x3E11729E, 0xFF9E20A0, - 0x3FF1D96B, 0x10000000, 0xBE300F18, 0x6C2EA70B, - 0x3FF1E25A, 0x00000000, 0x3DF32E02, 0xCE425A35, - 0x3FF1EB4D, 0x68000000, 0x3E3BDE56, 0x9A322D12, - 0x3FF1F445, 0x50000000, 0xBE3C3F0D, 0xBA737AEF, - 0x3FF1FD41, 0xB0000000, 0xBE0A2DD0, 0xC896DB7A, - 0x3FF20642, 0x90000000, 0x3E2577B0, 0xF8B782F6, - 0x3FF20F47, 0xF4000000, 0xBE2C6DA3, 0x73607FC8, - 0x3FF21851, 0xD8000000, 0x3E35F7D1, 0xC8917348, - 0x3FF22160, 0x44000000, 0x3E3B6F5C, 0xCF9CED69, - 0x3FF22A73, 0x3C000000, 0xBE39967E, 0x85775C2E, - 0x3FF2338A, 0xB8000000, 0x3E3B3213, 0x497226D4, - 0x3FF23CA6, 0xC4000000, 0x3E3E2710, 0x30733227, - 0x3FF245C7, 0x60000000, 0x3E33B8A9, 0xAF215A72, - 0x3FF24EEC, 0x90000000, 0xBE3F96B2, 0x1365623F, - 0x3FF25816, 0x50000000, 0xBE37324F, 0x27DEE202, - 0x3FF26144, 0xA4000000, 0x3E318CD5, 0x4E484D87, - 0x3FF26A77, 0x94000000, 0xBDE3FD37, 0xA94519E8, - 0x3FF273AF, 0x1C000000, 0x3E37132F, 0xEE788C29, - 0x3FF27CEB, 0x44000000, 0xBE03DDB7, 0xE842E5C0, - 0x3FF2862C, 0x08000000, 0x3E37A3FB, 0xE17C9693, - 0x3FF28F71, 0x70000000, 0x3E24EABF, 0xAEB3D9A0, - 0x3FF298BB, 0x7C000000, 0xBE13C7B6, 0x853B0733, - 0x3FF2A20A, 0x2C000000, 0x3E2D2C80, 0xC7B588B5, - 0x3FF2AB5D, 0x88000000, 0xBE35B750, 0x708F3912, - 0x3FF2B4B5, 0x8C000000, 0xBE291A70, 0xD5FD9130, - 0x3FF2BE12, 0x3C000000, 0x3E2EE937, 0x0CCF9F73, - 0x3FF2C773, 0xA0000000, 0xBE3C3F0C, 0xD42CF76C, - 0x3FF2D0D9, 0xB0000000, 0x3E35DD54, 0x60763D61, - 0x3FF2DA44, 0x78000000, 0x3E26C418, 0xE7D6AA3B, - 0x3FF2E3B3, 0xF8000000, 0xBE3605C6, 0x6FB9B7A8, - 0x3FF2ED28, 0x2C000000, 0x3E3763D4, 0x24DCDDF5, - 0x3FF2F6A1, 0x20000000, 0xBE1A411E, 0xA8EC1AA8, - 0x3FF3001E, 0xD0000000, 0xBE23FCA1, 0x1FE8546F, - 0x3FF309A1, 0x40000000, 0xBE29DF0D, 0x3AAEE75E, - 0x3FF31328, 0x70000000, 0x3E36A5D6, 0x3C2C4206, - 0x3FF31CB4, 0x68000000, 0x3E1B7A3E, 0xB4C979B0, - 0x3FF32645, 0x28000000, 0xBE36157D, 0x706CD593, - 0x3FF32FDA, 0xB0000000, 0xBE39F357, 0x8DA4C646, - 0x3FF33975, 0x04000000, 0xBE3E64DE, 0xD575FE6F, - 0x3FF34314, 0x24000000, 0x3E07F9E3, 0x44D008E0, - 0x3FF34CB8, 0x18000000, 0xBE2E94F9, 0x5A563E77, - 0x3FF35660, 0xDC000000, 0x3E314DC2, 0x2475EF19, - 0x3FF3600E, 0x78000000, 0x3E26D623, 0xA33AC606, - 0x3FF369C0, 0xEC000000, 0x3E170F86, 0xC05B3160, - 0x3FF37378, 0x3C000000, 0xBE38DDFE, 0xDB0AE31A, - 0x3FF37D34, 0x64000000, 0x3E3662A9, 0x5706B570, - 0x3FF386F5, 0x70000000, 0xBE1625E4, 0x6770731E, - 0x3FF390BB, 0x5C000000, 0xBE1678F1, 0x62971091, - 0x3FF39A86, 0x2C000000, 0xBE061F7C, 0xD045CB0C, - 0x3FF3A455, 0xE4000000, 0xBE35CF51, 0x568B1CA2, - 0x3FF3AE2A, 0x84000000, 0xBE378185, 0x7FB61F58, - 0x3FF3B804, 0x0C000000, 0x3E3F77F4, 0x4FA133AF, - 0x3FF3C1E2, 0x88000000, 0xBE22F96A, 0xB00B73FE, - 0x3FF3CBC5, 0xF0000000, 0x3E351A64, 0x1EB4CE2F, - 0x3FF3D5AE, 0x50000000, 0xBE3D3516, 0xD3755639, - 0x3FF3DF9B, 0xA0000000, 0x3E1CD938, 0x43E8C10E, - 0x3FF3E98D, 0xEC000000, 0xBE35EE23, 0x455C8842, - 0x3FF3F385, 0x30000000, 0xBE29B282, 0x96C9F4ED, - 0x3FF3FD81, 0x70000000, 0x3E24A40E, 0x3168CC0B, - 0x3FF40782, 0xB0000000, 0x3E3784BC, 0x86C72839, - 0x3FF41188, 0xF4000000, 0x3E061F19, 0x0785D847, - 0x3FF41B94, 0x3C000000, 0xBE27AEF2, 0xE654A9C9, - 0x3FF425A4, 0x88000000, 0x3E33DFC3, 0xF9E4C1BA, - 0x3FF42FB9, 0xE0000000, 0x3E2455A8, 0x593D0C75, - 0x3FF439D4, 0x44000000, 0xBDE41D4E, 0x238B65D1, - 0x3FF443F3, 0xB4000000, 0x3E3BE616, 0x454CBECB, - 0x3FF44E18, 0x38000000, 0x3E207B3C, 0x931C5332, - 0x3FF45841, 0xD0000000, 0xBE330846, 0x7615DCC9, - 0x3FF46270, 0x7C000000, 0xBE2A8A7B, 0xE497F84E, - 0x3FF46CA4, 0x40000000, 0x3E020B50, 0xF737AF78, - 0x3FF476DD, 0x20000000, 0x3E116B19, 0xE34AFBD3, - 0x3FF4811B, 0x20000000, 0xBE3E15A7, 0x841EDB52, - 0x3FF48B5E, 0x3C000000, 0x3E0F40C3, 0x33B3DE1E, - 0x3FF495A6, 0x7C000000, 0x3E33607F, 0x92EFEE02, - 0x3FF49FF3, 0xE4000000, 0xBE1A2DB5, 0x14F7E168, - 0x3FF4AA46, 0x70000000, 0x3E3F59EC, 0x3EBA1C94, - 0x3FF4B49E, 0x2C000000, 0xBE31A539, 0x8B9AE885, - 0x3FF4BEFB, 0x10000000, 0x3E2FAC0B, 0xF13C8C95, - 0x3FF4C95D, 0x28000000, 0xBE32C0BB, 0xF8B74775, - 0x3FF4D3C4, 0x70000000, 0xBE2FC24E, 0x4F9474BB, - 0x3FF4DE30, 0xEC000000, 0x3E008F30, 0x09DA911F, - 0x3FF4E8A2, 0xA0000000, 0x3E2994C1, 0xBAF8D98B, - 0x3FF4F319, 0x90000000, 0xBE17C38C, 0x18648D0A, - 0x3FF4FD95, 0xBC000000, 0xBE288852, 0xF22F8698, - 0x3FF50817, 0x28000000, 0xBE3C3EC3, 0x30A2C153, - 0x3FF5129D, 0xD4000000, 0xBE27B606, 0x968492AA, - 0x3FF51D29, 0xC4000000, 0x3E2E0396, 0x61101629, - 0x3FF527BA, 0xFC000000, 0x3E3E876F, 0xDAEEAB38, - 0x3FF53251, 0x80000000, 0x3E29F59E, 0xED945B30, - 0x3FF53CED, 0x50000000, 0x3E12D7DA, 0x0B4AE3F1, - 0x3FF5478E, 0x70000000, 0xBE2FAFB8, 0x5FB946D0, - 0x3FF55234, 0xE0000000, 0xBE18A8B3, 0x87D80C66, - 0x3FF55CE0, 0xA4000000, 0x3E28B18F, 0x764CF85C, - 0x3FF56791, 0xC0000000, 0x3E326017, 0x2BDBC6F4, - 0x3FF57248, 0x38000000, 0xBE229F98, 0x53D523FE, - 0x3FF57D04, 0x0C000000, 0xBE3BDD08, 0x4D9B8720, - 0x3FF587C5, 0x3C000000, 0x3E169EBC, 0x09D8749E, - 0x3FF5928B, 0xD0000000, 0x3E190C8C, 0x339C2080, - 0x3FF59D57, 0xC8000000, 0x3E310FA4, 0xDE75E9CA, - 0x3FF5A829, 0x28000000, 0x3E313D18, 0x1097F186, - 0x3FF5B2FF, 0xF4000000, 0xBE2BDE04, 0xD51C23F6, - 0x3FF5BDDC, 0x28000000, 0x3E3EE67E, 0x8938C386, - 0x3FF5C8BD, 0xD0000000, 0x3E0973B8, 0x47DF6575, - 0x3FF5D3A4, 0xE8000000, 0x3E24DF02, 0x1DB97781, - 0x3FF5DE91, 0x78000000, 0xBE3FBA00, 0xAC4AECDC, - 0x3FF5E983, 0x7C000000, 0xBE2F37AF, 0x939F646A, - 0x3FF5F47A, 0xFC000000, 0xBE396DEF, 0x58A6EEE9, - 0x3FF5FF77, 0xF8000000, 0xBE315248, 0xE3613C7B, - 0x3FF60A7A, 0x74000000, 0xBE26A9E2, 0xF1553706, - 0x3FF61582, 0x74000000, 0xBE3B6BF6, 0xAE4D7CB6, - 0x3FF6208F, 0xF8000000, 0xBE35775B, 0x9EB5EBA5, - 0x3FF62BA3, 0x04000000, 0xBE2A821B, 0xC1E43506, - 0x3FF636BB, 0x9C000000, 0xBE367CDA, 0x7B2D8CF4, - 0x3FF641D9, 0xC0000000, 0xBE13218B, 0x3E907A1D, - 0x3FF64CFD, 0x74000000, 0x3E3454EE, 0x7BF5DFE4, - 0x3FF65826, 0xC0000000, 0xBE3E960F, 0x6366C5FD, - 0x3FF66355, 0x9C000000, 0x3E2E378F, 0x8B43C17E, - 0x3FF66E8A, 0x14000000, 0x3E244BE0, 0xA4306535, - 0x3FF679C4, 0x28000000, 0xBDE4B6C1, 0x8DF63D6E, - 0x3FF68503, 0xD8000000, 0x3E3BA122, 0xE6A239CF, - 0x3FF69049, 0x2C000000, 0x3E27F286, 0x59FB5F30, - 0x3FF69B94, 0x24000000, 0xBE044041, 0x971D3970 } }; - -static const union { - int4 i[2048]; - double x[1024]; -} fine = { .i = { - 0x3FF00000, 0x00000000, 0x00000000, 0x00000000, - 0x3FF00004, 0x00000000, 0x3DA00001, 0x55556AAB, - 0x3FF00008, 0x00000000, 0x3DC00002, 0xAAAB0000, - 0x3FF0000C, 0x00000000, 0x3DD20004, 0x8000D800, - 0x3FF00010, 0x00000000, 0x3DE00005, 0x5556AAAB, - 0x3FF00014, 0x00000000, 0x3DE9000A, 0x6AADEC01, - 0x3FF00018, 0x00000000, 0x3DF20009, 0x00036001, - 0x3FF0001C, 0x00000000, 0x3DF8800E, 0x4AB0EB58, - 0x3FF00020, 0x00000000, 0x3E00000A, 0xAAB00002, - 0x3FF00024, 0x00000000, 0x3E04400F, 0x30088B04, - 0x3FF00028, 0x00000000, 0x3E090014, 0xD5625AB1, - 0x3FF0002C, 0x00000000, 0x3E0E401B, 0xBABDBB0A, - 0x3FF00030, 0x00000000, 0x3E120012, 0x000D8008, - 0x3FF00034, 0x00000000, 0x3E152016, 0xE2BD42E1, - 0x3FF00038, 0x00000000, 0x3E18801C, 0x956E5812, - 0x3FF0003C, 0x00000000, 0x3E1C2023, 0x2820F599, - 0x3FF00040, 0x00000000, 0x3E200015, 0x556AAABC, - 0x3FF00044, 0x00000000, 0x3E221019, 0x96C5DAD7, - 0x3FF00048, 0x00000000, 0x3E24401E, 0x60222C1F, - 0x3FF0004C, 0x00000000, 0x3E269023, 0xB97FC193, - 0x3FF00050, 0x00000000, 0x3E290029, 0xAADEC034, - 0x3FF00054, 0x00000000, 0x3E2B9030, 0x3C3F4F02, - 0x3FF00058, 0x00000000, 0x3E2E4037, 0x75A196FF, - 0x3FF0005C, 0x00000000, 0x3E30881F, 0xAF82E194, - 0x3FF00060, 0x00000000, 0x3E320024, 0x00360041, - 0x3FF00064, 0x00000000, 0x3E338828, 0xB0EA3F05, - 0x3FF00068, 0x00000000, 0x3E35202D, 0xC59FB661, - 0x3FF0006C, 0x00000000, 0x3E36C833, 0x42567FD5, - 0x3FF00070, 0x00000000, 0x3E388039, 0x2B0EB5E1, - 0x3FF00074, 0x00000000, 0x3E3A483F, 0x83C87407, - 0x3FF00078, 0x00000000, 0x3E3C2046, 0x5083D6C6, - 0x3FF0007C, 0x00000000, 0x3E3E084D, 0x9540FB9E, - 0x3FF00080, 0x04000000, 0xBE3FFFAA, 0xA9FFFEEF, - 0x3FF00084, 0x04000000, 0xBE3DF7A2, 0x693EF962, - 0x3FF00088, 0x04000000, 0xBE3BDF99, 0xA47BD339, - 0x3FF0008C, 0x04000000, 0xBE39B790, 0x57B66AF5, - 0x3FF00090, 0x04000000, 0xBE377F86, 0x7EEE9E14, - 0x3FF00094, 0x04000000, 0xBE35377C, 0x16244916, - 0x3FF00098, 0x04000000, 0xBE32DF71, 0x1957477B, - 0x3FF0009C, 0x04000000, 0xBE307765, 0x848773C2, - 0x3FF000A0, 0x04000000, 0xBE2BFEB2, 0xA7694ED3, - 0x3FF000A4, 0x04000000, 0xBE26EE99, 0x05BD75E2, - 0x3FF000A8, 0x04000000, 0xBE21BE7E, 0x1C0B0BB1, - 0x3FF000AC, 0x04000000, 0xBE18DCC3, 0xC4A37A79, - 0x3FF000B0, 0x04000000, 0xBE0BF911, 0x4244D60F, - 0x3FF000B4, 0x04000000, 0xBDE6E255, 0xEC91D848, - 0x3FF000B8, 0x04000000, 0x3E0107EB, 0xEC1B8F0C, - 0x3FF000BC, 0x04000000, 0x3E142439, 0x89BE52AA, - 0x3FF000C0, 0x04000000, 0x3E200240, 0x06C01033, - 0x3FF000C4, 0x04000000, 0x3E261264, 0xC8A9F760, - 0x3FF000C8, 0x04000000, 0x3E2C428B, 0x129D3FDE, - 0x3FF000CC, 0x04000000, 0x3E314959, 0x764D2658, - 0x3FF000D0, 0x04000000, 0x3E34816E, 0x2F50C16C, - 0x3FF000D4, 0x04000000, 0x3E37C983, 0xB859A4AB, - 0x3FF000D8, 0x04000000, 0x3E3B219A, 0x15680499, - 0x3FF000DC, 0x04000000, 0x3E3E89B1, 0x4A7C16B5, - 0x3FF000E0, 0x08000000, 0xBE3DFE36, 0xA469EE7E, - 0x3FF000E4, 0x08000000, 0xBE3A761D, 0xB349D37F, - 0x3FF000E8, 0x08000000, 0xBE36DE03, 0xDE235FCD, - 0x3FF000EC, 0x08000000, 0xBE3335E9, 0x20F659E6, - 0x3FF000F0, 0x08000000, 0xBE2EFB9A, 0xEF850E8F, - 0x3FF000F4, 0x08000000, 0xBE276B61, 0xBD0F58E2, - 0x3FF000F8, 0x08000000, 0xBE1F764D, 0x45163381, - 0x3FF000FC, 0x08000000, 0xBE0FABA6, 0x5FDF589A, - 0x3FF00100, 0x08000000, 0x3D8555AA, 0xABBBBE94, - 0x3FF00104, 0x08000000, 0x3E102B2C, 0xDABB690B, - 0x3FF00108, 0x08000000, 0x3E2045D9, 0x7820FBA0, - 0x3FF0010C, 0x08000000, 0x3E28961E, 0x92F54742, - 0x3FF00110, 0x08000000, 0x3E308332, 0xE2ED8E39, - 0x3FF00114, 0x08000000, 0x3E34CB57, 0x8C698119, - 0x3FF00118, 0x08000000, 0x3E39237D, 0x49EEC0C4, - 0x3FF0011C, 0x08000000, 0x3E3D8BA4, 0x1F7D92BC, - 0x3FF00120, 0x0C000000, 0xBE3DFC33, 0xEEE9C27D, - 0x3FF00124, 0x0C000000, 0xBE39740A, 0xDD46F763, - 0x3FF00128, 0x0C000000, 0xBE34DBE0, 0xA799C375, - 0x3FF0012C, 0x0C000000, 0xBE3033B5, 0x49E1DD2F, - 0x3FF00130, 0x0C000000, 0xBE26F711, 0x803DF41F, - 0x3FF00134, 0x0C000000, 0xBE1ACD6C, 0x19433A4C, - 0x3FF00138, 0x0C000000, 0xBDFDB2C1, 0x8770E36F, - 0x3FF0013C, 0x0C000000, 0x3E086820, 0x6B74A43E, - 0x3FF00140, 0x0C000000, 0x3E200A6A, 0xDEC0D058, - 0x3FF00144, 0x0C000000, 0x3E2A1AD0, 0x22BD7872, - 0x3FF00148, 0x0C000000, 0x3E32259B, 0xF769E132, - 0x3FF0014C, 0x0C000000, 0x3E374DD1, 0x2582289A, - 0x3FF00150, 0x0C000000, 0x3E3C8607, 0x9FA7E4F4, - 0x3FF00154, 0x10000000, 0xBE3E31C0, 0x9624963C, - 0x3FF00158, 0x10000000, 0xBE38D987, 0x77E2F472, - 0x3FF0015C, 0x10000000, 0xBE33714D, 0x0192E02C, - 0x3FF00160, 0x10000000, 0xBE2BF222, 0x5E6805CB, - 0x3FF00164, 0x10000000, 0xBE20E1A7, 0xF98C0A34, - 0x3FF00168, 0x10000000, 0xBE06C4AB, 0x32447238, - 0x3FF0016C, 0x10000000, 0x3E067D54, 0xC225D8C1, - 0x3FF00170, 0x10000000, 0x3E210FD8, 0x05C4630F, - 0x3FF00174, 0x10000000, 0x3E2CA05D, 0xBB206115, - 0x3FF00178, 0x10000000, 0x3E342873, 0x2C4F14A6, - 0x3FF0017C, 0x10000000, 0x3E3A10B8, 0xF31F3B5E, - 0x3FF00180, 0x14000000, 0xBE3FF6FF, 0xC9FEFCC9, - 0x3FF00184, 0x14000000, 0xBE39EEB7, 0x070B344A, - 0x3FF00188, 0x14000000, 0xBE33D66C, 0xC0050AA2, - 0x3FF0018C, 0x14000000, 0xBE2B5C41, 0xE1D83C97, - 0x3FF00190, 0x14000000, 0xBE1DD74E, 0x57003305, - 0x3FF00194, 0x14000000, 0xBDF2D84A, 0xA80727F1, - 0x3FF00198, 0x14000000, 0x3E14AB2F, 0x534C5401, - 0x3FF0019C, 0x14000000, 0x3E27263B, 0xD875DE83, - 0x3FF001A0, 0x14000000, 0x3E320B71, 0x9FB782CA, - 0x3FF001A4, 0x14000000, 0x3E3893C6, 0xF349371F, - 0x3FF001A8, 0x14000000, 0x3E3F2C1D, 0xEAF074C6, - 0x3FF001AC, 0x18000000, 0xBE3A2B89, 0x75525ABC, - 0x3FF001B0, 0x18000000, 0xBE33732F, 0x297ECCE2, - 0x3FF001B4, 0x18000000, 0xBE2955A6, 0x5B28EC49, - 0x3FF001B8, 0x18000000, 0xBE1749D5, 0xF64BA7FD, - 0x3FF001BC, 0x18000000, 0x3DF15E9E, 0xA8645141, - 0x3FF001C0, 0x18000000, 0x3E201C96, 0x1D6F0B37, - 0x3FF001C4, 0x18000000, 0x3E2E2D5B, 0xE6028E39, - 0x3FF001C8, 0x18000000, 0x3E362F12, 0x9B63FA1E, - 0x3FF001CC, 0x18000000, 0x3E3D5779, 0x0BE01026, - 0x3FF001D0, 0x1C000000, 0xBE3B701E, 0xB78A0445, - 0x3FF001D4, 0x1C000000, 0xBE3427B4, 0xAAD9CF9D, - 0x3FF001D8, 0x1C000000, 0xBE299E91, 0x941DBAB5, - 0x3FF001DC, 0x1C000000, 0xBE159B6C, 0x44A2DFDD, - 0x3FF001E0, 0x1C000000, 0x3E008CA4, 0x1EC8B89C, - 0x3FF001E4, 0x1C000000, 0x3E23340B, 0xF1EE0E9A, - 0x3FF001E8, 0x1C000000, 0x3E313279, 0x5231913C, - 0x3FF001EC, 0x1C000000, 0x3E38DAEE, 0x93892E68, - 0x3FF001F0, 0x20000000, 0xBE3F6C9A, 0x3F01A6A8, - 0x3FF001F4, 0x20000000, 0xBE37A421, 0x216E726C, - 0x3FF001F8, 0x20000000, 0xBE2F974C, 0x1F7970B9, - 0x3FF001FC, 0x20000000, 0xBE1F8CA4, 0x17AFEBC8, - 0x3FF00200, 0x20000000, 0x3DB55600, 0x04445B06, - 0x3FF00204, 0x20000000, 0x3E203BAE, 0x0C290A26, - 0x3FF00208, 0x20000000, 0x3E30365A, 0x104547BD, - 0x3FF0020C, 0x20000000, 0x3E385EDF, 0x22970DE3, - 0x3FF00210, 0x24000000, 0xBE3F6899, 0xBEF5A5F4, - 0x3FF00214, 0x24000000, 0xBE372010, 0x90605040, - 0x3FF00218, 0x24000000, 0xBE2D8F0A, 0x9B50D8EE, - 0x3FF0021C, 0x24000000, 0xBE197BDF, 0xCB35D444, - 0x3FF00220, 0x24000000, 0x3E00CCBC, 0x2188E3D5, - 0x3FF00224, 0x24000000, 0x3E254452, 0x36A79F6A, - 0x3FF00228, 0x24000000, 0x3E333ABC, 0xD69B2D28, - 0x3FF0022C, 0x24000000, 0x3E3BE352, 0xBA07BE5B, - 0x3FF00230, 0x28000000, 0xBE3B6415, 0x3665F227, - 0x3FF00234, 0x28000000, 0xBE329B7A, 0xF6AD58D5, - 0x3FF00238, 0x28000000, 0xBE2385BD, 0x059BD24A, - 0x3FF0023C, 0x28000000, 0xBDEB47FA, 0xD8E2B1B4, - 0x3FF00240, 0x28000000, 0x3E203CC2, 0x22CF60F6, - 0x3FF00244, 0x28000000, 0x3E312704, 0x39BEF87F, - 0x3FF00248, 0x28000000, 0x3E3A3FA9, 0xA63F5309, - 0x3FF0024C, 0x2C000000, 0xBE3C97AE, 0xA516AE5E, - 0x3FF00250, 0x2C000000, 0xBE335F04, 0xA442792A, - 0x3FF00254, 0x2C000000, 0xBE242CB0, 0xA686F3A2, - 0x3FF00258, 0x2C000000, 0xBDE7B535, 0xC3237903, - 0x3FF0025C, 0x2C000000, 0x3E21560E, 0x9E7A6CF7, - 0x3FF00260, 0x2C000000, 0x3E3223BA, 0xA8C01385, - 0x3FF00264, 0x2C000000, 0x3E3BAC70, 0x627012DF, - 0x3FF00268, 0x30000000, 0xBE3ABAD7, 0x7FB232EA, - 0x3FF0026C, 0x30000000, 0xBE31121C, 0xF9A6244B, - 0x3FF00270, 0x30000000, 0xBE1D6580, 0x1DAC9AE4, - 0x3FF00274, 0x30000000, 0x3E037AFA, 0xD7FB0AC3, - 0x3FF00278, 0x30000000, 0x3E289042, 0x633420EB, - 0x3FF0027C, 0x30000000, 0x3E3630E5, 0x8065842A, - 0x3FF00280, 0x34000000, 0xBE3FD653, 0xB49DA4FF, - 0x3FF00284, 0x34000000, 0xBE35CD8A, 0x696ECB76, - 0x3FF00288, 0x34000000, 0xBE27697D, 0x341A9D63, - 0x3FF0028C, 0x34000000, 0xBDF8BF04, 0x2788D238, - 0x3FF00290, 0x34000000, 0x3E2159C1, 0x42A03782, - 0x3FF00294, 0x34000000, 0x3E32F5B4, 0x154D4F89, - 0x3FF00298, 0x34000000, 0x3E3D4E8A, 0x1D7FB2C1, - 0x3FF0029C, 0x38000000, 0xBE38489D, 0x42181508, - 0x3FF002A0, 0x38000000, 0xBE2B9F84, 0x0AF2C28C, - 0x3FF002A4, 0x38000000, 0xBE0A3721, 0x451C5357, - 0x3FF002A8, 0x38000000, 0x3E1D47F1, 0x61A8605E, - 0x3FF002AC, 0x38000000, 0x3E31FADF, 0x81B02FCF, - 0x3FF002B0, 0x38000000, 0x3E3CB3C5, 0x572F674A, - 0x3FF002B4, 0x3C000000, 0xBE388352, 0x231795EA, - 0x3FF002B8, 0x3C000000, 0xBE2B54CD, 0xD248367A, - 0x3FF002BC, 0x3C000000, 0xBE060BC7, 0xB7ABD90D, - 0x3FF002C0, 0x3C000000, 0x3E206EEF, 0x6EE9F1EF, - 0x3FF002C4, 0x3C000000, 0x3E33406B, 0x261BF09E, - 0x3FF002C8, 0x3C000000, 0x3E3E5961, 0x59001C60, - 0x3FF002CC, 0x40000000, 0xBE367DA5, 0xABDDD232, - 0x3FF002D0, 0x40000000, 0xBE268953, 0xC8FA5113, - 0x3FF002D4, 0x40000000, 0x3D9152CC, 0x8B33A701, - 0x3FF002D8, 0x40000000, 0x3E26BAAC, 0x3E058570, - 0x3FF002DC, 0x40000000, 0x3E36C65A, 0x63236E71, - 0x3FF002E0, 0x44000000, 0xBE3DC09E, 0x7C7A795C, - 0x3FF002E4, 0x44000000, 0xBE323794, 0x7BD63D1D, - 0x3FF002E8, 0x44000000, 0xBE1A7A1E, 0x5BBC9105, - 0x3FF002EC, 0x44000000, 0x3E142A20, 0xD8EE2B1B, - 0x3FF002F0, 0x44000000, 0x3E30C39A, 0xEFAA8A8D, - 0x3FF002F4, 0x44000000, 0x3E3C8CB0, 0x995E96A2, - 0x3FF002F8, 0x48000000, 0xBE379A36, 0xC8A79469, - 0x3FF002FC, 0x48000000, 0xBE276236, 0x64CE7203, - 0x3FF00300, 0x48000000, 0x3DD200D8, 0x0819DA68, - 0x3FF00304, 0x48000000, 0x3E28A249, 0xE5E018D4, - 0x3FF00308, 0x48000000, 0x3E386A49, 0x8A087692, - 0x3FF0030C, 0x4C000000, 0xBE3B6C8E, 0xD695988B, - 0x3FF00310, 0x4C000000, 0xBE2E66C8, 0x55D2BCBA, - 0x3FF00314, 0x4C000000, 0xBE0751B3, 0x7790BA7A, - 0x3FF00318, 0x4C000000, 0x3E22DDF4, 0xC2A20261, - 0x3FF0031C, 0x4C000000, 0x3E35D82E, 0x49E0B0B5, - 0x3FF00320, 0x50000000, 0xBE3DAE9A, 0xB142422E, - 0x3FF00324, 0x50000000, 0xBE312560, 0x8C170FE6, - 0x3FF00328, 0x50000000, 0xBE12308D, 0x0A73BF77, - 0x3FF0032C, 0x50000000, 0x3E203A3A, 0x5E59CEFA, - 0x3FF00330, 0x50000000, 0x3E34D660, 0xCD4740BF, - 0x3FF00334, 0x54000000, 0xBE3E6058, 0x644D1883, - 0x3FF00338, 0x54000000, 0xBE31870E, 0x618F57B6, - 0x3FF0033C, 0x54000000, 0xBE127704, 0x99FABD0F, - 0x3FF00340, 0x54000000, 0x3E20B71E, 0xA1CB5ECF, - 0x3FF00344, 0x54000000, 0x3E3564E3, 0x089E93E1, - 0x3FF00348, 0x58000000, 0xBE3D81C5, 0xFB533142, - 0x3FF0034C, 0x58000000, 0xBE30586B, 0xB6EECE6C, - 0x3FF00350, 0x58000000, 0xBE08F871, 0x319B883E, - 0x3FF00354, 0x58000000, 0x3E2454A5, 0x75BF7503, - 0x3FF00358, 0x58000000, 0x3E3783B6, 0xF04B88C5, - 0x3FF0035C, 0x5C000000, 0xBE3B12E1, 0x81EF30A7, - 0x3FF00360, 0x5C000000, 0xBE2B32ED, 0x2F9F3657, - 0x3FF00364, 0x5C000000, 0xBDB0084D, 0x54DF31BC, - 0x3FF00368, 0x5C000000, 0x3E2B12D2, 0xC303B7B9, - 0x3FF0036C, 0x5C000000, 0x3E3B32DE, 0x78B56F97, - 0x3FF00370, 0x60000000, 0xBE3713A9, 0x03B9496C, - 0x3FF00374, 0x60000000, 0xBE22945A, 0x1F92E726, - 0x3FF00378, 0x60000000, 0x3E123D49, 0x621736DF, - 0x3FF0037C, 0x60000000, 0x3E3278D5, 0x3935580D, - 0x3FF00380, 0x64000000, 0xBE3F8DA4, 0x69B9F5FB, - 0x3FF00384, 0x64000000, 0xBE31841A, 0x8C473CC8, - 0x3FF00388, 0x64000000, 0xBE0B5469, 0x538CDE07, - 0x3FF0038C, 0x64000000, 0x3E257E07, 0x7F8F9D65, - 0x3FF00390, 0x64000000, 0x3E38F898, 0x3665E52B, - 0x3FF00394, 0x68000000, 0xBE38BDCF, 0xC29674BD, - 0x3FF00398, 0x68000000, 0xBE24C868, 0x4E58B4D9, - 0x3FF0039C, 0x68000000, 0x3E1015AC, 0x329466D7, - 0x3FF003A0, 0x68000000, 0x3E327F0D, 0xDCDECE44, - 0x3FF003A4, 0x6C000000, 0xBE3EF74B, 0xB27E5528, - 0x3FF003A8, 0x6C000000, 0xBE305DA1, 0x9D7167F2, - 0x3FF003AC, 0x6C000000, 0xBDFB3F3D, 0xFF980820, - 0x3FF003B0, 0x6C000000, 0x3E2A0B7B, 0x13D49789, - 0x3FF003B4, 0x6C000000, 0x3E3BCF72, 0xA43AE87C, - 0x3FF003B8, 0x70000000, 0xBE3556D4, 0x8D06BDC0, - 0x3FF003BC, 0x70000000, 0xBE19B460, 0x1766E54D, - 0x3FF003C0, 0x70000000, 0x3E211950, 0x7B85C8BA, - 0x3FF003C4, 0x70000000, 0x3E37966C, 0x41D00AED, - 0x3FF003C8, 0x74000000, 0xBE394FCB, 0xF5B15507, - 0x3FF003CC, 0x74000000, 0xBE244C00, 0xC98093C4, - 0x3FF003D0, 0x74000000, 0x3E144F3B, 0xE2907BDF, - 0x3FF003D4, 0x74000000, 0x3E345DA2, 0x267CD924, - 0x3FF003D8, 0x78000000, 0xBE3C4886, 0xD73526C0, - 0x3FF003DC, 0x78000000, 0xBE29BD57, 0xF8E1D62E, - 0x3FF003E0, 0x78000000, 0x3E04D995, 0xD65415E1, - 0x3FF003E4, 0x78000000, 0x3E322515, 0x527E1A58, - 0x3FF003E8, 0x7C000000, 0xBE3E4104, 0x31552BA5, - 0x3FF003EC, 0x7C000000, 0xBE2D2E33, 0x995CAB3B, - 0x3FF003F0, 0x7C000000, 0x3DF22D48, 0x473970DC, - 0x3FF003F4, 0x7C000000, 0x3E30ECC6, 0xC61195FC, - 0x3FF003F8, 0x80000000, 0xBE3F3943, 0x03D35C34, - 0x3FF003FC, 0x80000000, 0xBE2E9E91, 0xAA7483C7, - 0x3FF00400, 0x80000000, 0x3DE556AA, 0xBBBC71CE, - 0x3FF00404, 0x80000000, 0x3E30B4B7, 0x817613C1, - 0x3FF00408, 0x84000000, 0xBE3F3142, 0x4E70B0AC, - 0x3FF0040C, 0x84000000, 0xBE2E0E70, 0x2BAAD02F, - 0x3FF00410, 0x84000000, 0x3DF32D62, 0xF48F01F2, - 0x3FF00414, 0x84000000, 0x3E317CE8, 0x84EB5B98, - 0x3FF00418, 0x88000000, 0xBE3E2901, 0x10ED210B, - 0x3FF0041C, 0x88000000, 0xBE2B7DCD, 0x1C7F0051, - 0x3FF00420, 0x88000000, 0x3E05D9C0, 0x87AA2706, - 0x3FF00424, 0x88000000, 0x3E33455A, 0xD0B235B3, - 0x3FF00428, 0x8C000000, 0xBE3C207E, 0x4B07A510, - 0x3FF0042C, 0x8C000000, 0xBE26ECA6, 0x7C6E838B, - 0x3FF00430, 0x8C000000, 0x3E150F6F, 0xEC91A8D5, - 0x3FF00434, 0x8C000000, 0x3E360E0F, 0x650C6A83, - 0x3FF00438, 0x90000000, 0xBE3917B8, 0xFC7E3439, - 0x3FF0043C, 0x90000000, 0xBE205AFA, 0x4AF4C8B6, - 0x3FF00440, 0x90000000, 0x3E219985, 0xDC31D181, - 0x3FF00444, 0x90000000, 0x3E39D707, 0x423CC2BE, - 0x3FF00448, 0x94000000, 0xBE350EB0, 0x250DC5BF, - 0x3FF0044C, 0x94000000, 0xBE0F231A, 0x1E2CF893, - 0x3FF00450, 0x94000000, 0x3E2AABDB, 0xD42C92D4, - 0x3FF00454, 0x94000000, 0x3E3EA043, 0x6887075B, - 0x3FF00458, 0x98000000, 0xBE300562, 0xC472509B, - 0x3FF0045C, 0x98000000, 0x3DF64FB6, 0x72B572E0, - 0x3FF00460, 0x98000000, 0x3E32DF5D, 0xEF61155C, - 0x3FF00464, 0x9C000000, 0xBE3B963B, 0x27CFFE6A, - 0x3FF00468, 0x9C000000, 0xBE23F79F, 0xB4CD96FE, - 0x3FF0046C, 0x9C000000, 0x3E1EBA7F, 0x6E771F13, - 0x3FF00470, 0x9C000000, 0x3E396913, 0xFE3ED608, - 0x3FF00474, 0xA0000000, 0xBE34CC73, 0x6E82850F, - 0x3FF00478, 0xA0000000, 0xBE078FB3, 0x352966B7, - 0x3FF0047C, 0xA0000000, 0x3E2DF116, 0x33AFF8AE, - 0x3FF00480, 0xA4000000, 0xBE3F0CEE, 0xE909EADD, - 0x3FF00484, 0xA4000000, 0xBE2A04C8, 0xD6938597, - 0x3FF00488, 0xA4000000, 0x3E1460AA, 0x5C6654D8, - 0x3FF0048C, 0xA4000000, 0x3E3742BE, 0x22213ECF, - 0x3FF00490, 0xA8000000, 0xBE3682A9, 0xC631A356, - 0x3FF00494, 0xA8000000, 0xBE10E034, 0x7777B644, - 0x3FF00498, 0xA8000000, 0x3E2C4528, 0x3E3B0991, - 0x3FF0049C, 0xAC000000, 0xBE3F72C6, 0x0B3E269F, - 0x3FF004A0, 0xAC000000, 0xBE29F037, 0x31DF923B, - 0x3FF004A4, 0xAC000000, 0x3E164A4D, 0xE82713DE, - 0x3FF004A8, 0xAC000000, 0x3E382D47, 0x31AFAC4B, - 0x3FF004AC, 0xB0000000, 0xBE352800, 0x6DFCE978, - 0x3FF004B0, 0xB0000000, 0xBE036A1B, 0x07D68D27, - 0x3FF004B4, 0xB0000000, 0x3E305D7E, 0x5CB71F6F, - 0x3FF004B8, 0xB4000000, 0xBE3CC7BB, 0x30E5E990, - 0x3FF004BC, 0xB4000000, 0xBE23B9E0, 0x0BA17DEA, - 0x3FF004C0, 0xB4000000, 0x3E223BBF, 0xC3EF9BD8, - 0x3FF004C4, 0xB4000000, 0x3E3C28B4, 0x8A74ECC0, - 0x3FF004C8, 0xB8000000, 0xBE30BC72, 0x085831CA, - 0x3FF004CC, 0xB8000000, 0x3E037361, 0x6C8D1FC8, - 0x3FF004D0, 0xB8000000, 0x3E35A94F, 0x3033A0B8, - 0x3FF004D4, 0xBC000000, 0xBE370BC8, 0xFC7107DE, - 0x3FF004D8, 0xBC000000, 0xBE0D86E2, 0xA2D908DA, - 0x3FF004DC, 0xBC000000, 0x3E2F742A, 0x58ED155E, - 0x3FF004E0, 0xC0000000, 0xBE3CCAF4, 0x75FACDD0, - 0x3FF004E4, 0xC0000000, 0xBE227FF2, 0x6F5BE5D3, - 0x3FF004E8, 0xC0000000, 0x3E24B60D, 0xD6BCA827, - 0x3FF004EC, 0xC0000000, 0x3E3E060B, 0xF72B40D6, - 0x3FF004F0, 0xC4000000, 0xBE2C7DD4, 0x208BE3E3, - 0x3FF004F4, 0xC4000000, 0x3E163093, 0x642FDDB8, - 0x3FF004F8, 0xC4000000, 0x3E396738, 0xB72239A5, - 0x3FF004FC, 0xC8000000, 0xBE32ADAE, 0x7201ED9B, - 0x3FF00500, 0xC8000000, 0x3DF4D6F6, 0x1A0C05F3, - 0x3FF00504, 0xC8000000, 0x3E355892, 0x360B8346, - 0x3FF00508, 0xCC000000, 0xBE368C45, 0xF0C06435, - 0x3FF0050C, 0xCC000000, 0xBE0308C8, 0x760DA2F6, - 0x3FF00510, 0xCC000000, 0x3E31DA18, 0xE008D57B, - 0x3FF00514, 0xD0000000, 0xBE39DAB0, 0x205F82F4, - 0x3FF00518, 0xD0000000, 0xBE15FDD0, 0x2FE5E3E3, - 0x3FF0051C, 0xD0000000, 0x3E2DD79A, 0x42787241, - 0x3FF00520, 0xD4000000, 0xBE3C98EC, 0x94BD25F4, - 0x3FF00524, 0xD4000000, 0xBE201B42, 0x53C89D03, - 0x3FF00528, 0xD4000000, 0x3E291B5E, 0xCB901057, - 0x3FF0052C, 0xD8000000, 0xBE3EC6FA, 0xE1B6D837, - 0x3FF00530, 0xD8000000, 0xBE24173F, 0xF8BF49E7, - 0x3FF00534, 0xD8000000, 0x3E257F80, 0x339DDB57, - 0x3FF00538, 0xD8000000, 0x3E3F9B25, 0x64D62C5C, - 0x3FF0053C, 0xDC000000, 0xBE26F2E0, 0x2E913659, - 0x3FF00540, 0xDC000000, 0x3E2303FF, 0x52E7CB93, - 0x3FF00544, 0xDC000000, 0x3E3E8D74, 0xAB0CFEF5, - 0x3FF00548, 0xE0000000, 0xBE28AE22, 0x1CF7FDE6, - 0x3FF0054C, 0xE0000000, 0x3E21A8DD, 0x01B47B93, - 0x3FF00550, 0xE0000000, 0x3E3E0FF3, 0x5D1107E2, - 0x3FF00554, 0xE4000000, 0xBE294904, 0xEBAC99E1, - 0x3FF00558, 0xE4000000, 0x3E216E1A, 0x184B2814, - 0x3FF0055C, 0xE4000000, 0x3E3E22A1, 0xE706008B, - 0x3FF00560, 0xE8000000, 0xBE28C387, 0xC267616A, - 0x3FF00564, 0xE8000000, 0x3E2253B7, 0x6EF3B008, - 0x3FF00568, 0xE8000000, 0x3E3EC580, 0xB50FF371, - 0x3FF0056C, 0xEC000000, 0xBE271DA9, 0xC8E0096B, - 0x3FF00570, 0xEC000000, 0x3E2459B5, 0xDDF69498, - 0x3FF00574, 0xEC000000, 0x3E3FF890, 0x33533C31, - 0x3FF00578, 0xF0000000, 0xBE24576A, 0x26CDA497, - 0x3FF0057C, 0xF0000000, 0x3E278016, 0x3D9CF923, - 0x3FF00580, 0xF4000000, 0xBE3E442F, 0x320B787B, - 0x3FF00584, 0xF4000000, 0xBE2070C8, 0x03E6A36B, - 0x3FF00588, 0xF4000000, 0x3E2BC6D9, 0x6630A33F, - 0x3FF0058C, 0xF8000000, 0xBE3BF0BD, 0x0EE72CBF, - 0x3FF00590, 0xF8000000, 0xBE16D385, 0x0FC1A853, - 0x3FF00594, 0xF8000000, 0x3E309700, 0x17FDFD5D, - 0x3FF00598, 0xFC000000, 0xBE390D18, 0xF71A91AC, - 0x3FF0059C, 0xFC000000, 0xBE050963, 0x69C58B86, - 0x3FF005A0, 0xFC000000, 0x3E33DAC5, 0xB9A504CD, - 0x3FF005A5, 0x00000000, 0xBE359942, 0x7E800734, - 0x3FF005A9, 0x00000000, 0x3DF02BAE, 0xE59934CD, - 0x3FF005AD, 0x00000000, 0x3E37AEBE, 0x04333E0E, - 0x3FF005B1, 0x04000000, 0xBE319539, 0x38F19C2F, - 0x3FF005B5, 0x04000000, 0x3E14DB54, 0xEBB1C157, - 0x3FF005B9, 0x04000000, 0x3E3C12E9, 0x63CED05D, - 0x3FF005BD, 0x08000000, 0xBE2A01F9, 0x74921CAF, - 0x3FF005C1, 0x08000000, 0x3E23F645, 0xC94C85F2, - 0x3FF005C5, 0x0C000000, 0xBE3EF8B7, 0xBB61CBEE, - 0x3FF005C9, 0x0C000000, 0xBE1F7232, 0x597F2931, - 0x3FF005CD, 0x0C000000, 0x3E2E9F48, 0xAF5B7345, - 0x3FF005D1, 0x10000000, 0xBE397424, 0xED37CD5F, - 0x3FF005D5, 0x10000000, 0xBE013F43, 0x08775C6B, - 0x3FF005D9, 0x10000000, 0x3E35345A, 0x0029D3DB, - 0x3FF005DD, 0x14000000, 0xBE335F5D, 0xC58C1962, - 0x3FF005E1, 0x14000000, 0x3E1073C1, 0x47430E04, - 0x3FF005E5, 0x14000000, 0x3E3BA944, 0x4A41E248, - 0x3FF005E9, 0x18000000, 0xBE2974C3, 0xB06E888E, - 0x3FF005ED, 0x18000000, 0x3E25E3FB, 0xDCCD9333, - 0x3FF005F1, 0x1C000000, 0xBE3D519C, 0x5DE27951, - 0x3FF005F5, 0x1C000000, 0xBE1614C2, 0xE4464502, - 0x3FF005F9, 0x1C000000, 0x3E325740, 0xE0DAFE93, - 0x3FF005FD, 0x20000000, 0xBE35BC47, 0x8C1B4C10, - 0x3FF00601, 0x20000000, 0x3E0201B0, 0x20686CE9, - 0x3FF00605, 0x20000000, 0x3E3A4CB9, 0x95558B63, - 0x3FF00609, 0x24000000, 0xBE2B2D79, 0xA880A3EB, - 0x3FF0060D, 0x24000000, 0x3E252BA5, 0x9699EEB7, - 0x3FF00611, 0x28000000, 0xBE3D2D97, 0x880115E1, - 0x3FF00615, 0x28000000, 0xBE1383EF, 0x28A3D788, - 0x3FF00619, 0x28000000, 0x3E337BA6, 0x08D6DC23, - 0x3FF0061D, 0x2C000000, 0xBE3417B2, 0x0B001A08, - 0x3FF00621, 0x2C000000, 0x3E1193EF, 0xF94EB99A, - 0x3FF00625, 0x2C000000, 0x3E3CF1B0, 0x28D3BD3B, - 0x3FF00629, 0x30000000, 0xBE24E32B, 0x0EFCC982, - 0x3FF0062D, 0x30000000, 0x3E2C7655, 0xE2BDA47F, - 0x3FF00631, 0x34000000, 0xBE39080E, 0x689312F8, - 0x3FF00635, 0x34000000, 0xBDCDA0C8, 0xA9444DB4, - 0x3FF00639, 0x34000000, 0x3E38A191, 0x7B21FE23, - 0x3FF0063D, 0x38000000, 0xBE2CE32A, 0x7E67E1E1, - 0x3FF00641, 0x38000000, 0x3E251694, 0x875A71F0, - 0x3FF00645, 0x3C000000, 0xBE3C67CF, 0xF838F455, - 0x3FF00649, 0x3C000000, 0xBE0A571F, 0x77274052, - 0x3FF0064D, 0x3C000000, 0x3E35E20E, 0x63AAEFA8, - 0x3FF00651, 0x40000000, 0xBE30E0F8, 0xFC87DA70, - 0x3FF00655, 0x40000000, 0x3E20D80B, 0xE9089AFD, - 0x3FF00659, 0x44000000, 0xBE3E36F4, 0xC52F03BD, - 0x3FF0065D, 0x44000000, 0xBE1327A4, 0x9680E14E, - 0x3FF00661, 0x44000000, 0x3E34B328, 0xD732468D, - 0x3FF00665, 0x48000000, 0xBE31BFBE, 0xCAB5EF4A, - 0x3FF00669, 0x48000000, 0x3E1F757F, 0xE2A2FBE1, - 0x3FF0066D, 0x4C000000, 0xBE3E757A, 0xDAB014DA, - 0x3FF00671, 0x4C000000, 0xBE12E13D, 0x02FB3FBB, - 0x3FF00675, 0x4C000000, 0x3E3514E2, 0xCA7E298D, - 0x3FF00679, 0x50000000, 0xBE310DE4, 0xB4F78B94, - 0x3FF0067D, 0x50000000, 0x3E21BEB4, 0x89C35D05, - 0x3FF00681, 0x54000000, 0xBE3D2360, 0x43F4895C, - 0x3FF00685, 0x54000000, 0xBE08B0A2, 0x5BC49ADF, - 0x3FF00689, 0x54000000, 0x3E37073E, 0x32573159, - 0x3FF0068D, 0x58000000, 0xBE2D96D1, 0x8D0732D2, - 0x3FF00691, 0x58000000, 0x3E26E3ED, 0x9BF15E67, - 0x3FF00695, 0x5C000000, 0xBE3A40A3, 0x0C3250FB, - 0x3FF00699, 0x5C000000, 0x3DBCC9AE, 0xFD0AE214, - 0x3FF0069D, 0x5C000000, 0x3E3A8A3D, 0x038868A1, - 0x3FF006A1, 0x60000000, 0xBE25F092, 0x151D21CE, - 0x3FF006A5, 0x60000000, 0x3E2F2A6F, 0x11738C43, - 0x3FF006A9, 0x64000000, 0xBE35CD41, 0x3E9CE96D, - 0x3FF006AD, 0x64000000, 0x3E138132, 0x8DBC2918, - 0x3FF006B1, 0x64000000, 0x3E3F9DE1, 0x32DF4C13, - 0x3FF006B5, 0x68000000, 0xBE16520E, 0x3129E0B2, - 0x3FF006B9, 0x68000000, 0x3E35491E, 0x69F36A61, - 0x3FF006BD, 0x6C000000, 0xBE2F9271, 0xCCCABCD4, - 0x3FF006C1, 0x6C000000, 0x3E2668ED, 0x0D59B899, - 0x3FF006C5, 0x70000000, 0xBE39BDD3, 0x4AD435A0, - 0x3FF006C9, 0x70000000, 0x3DF5FE9A, 0x9191CABB, - 0x3FF006CD, 0x70000000, 0x3E3C8DAD, 0x6676850B, - 0x3FF006D1, 0x74000000, 0xBE206910, 0x1D74934A, - 0x3FF006D5, 0x74000000, 0x3E331949, 0x4D886478, - 0x3FF006D9, 0x78000000, 0xBE3188DE, 0x80BFBBC2, - 0x3FF006DD, 0x78000000, 0x3E23CA01, 0x14DE1719, - 0x3FF006E1, 0x7C000000, 0xBE3A9D19, 0x8CE98EC0, - 0x3FF006E5, 0x7C000000, 0x3DEE1A67, 0xA705A6E7, - 0x3FF006E9, 0x7C000000, 0x3E3C8EC6, 0xECD5F851, - 0x3FF006ED, 0x80000000, 0xBE1F0CF9, 0xE839CE4D, - 0x3FF006F1, 0x80000000, 0x3E33FAC3, 0x0C8CA46A, - 0x3FF006F5, 0x84000000, 0xBE303734, 0x7B5703D8, - 0x3FF006F9, 0x84000000, 0x3E274DB5, 0xE490A112, - 0x3FF006FD, 0x88000000, 0xBE386B0E, 0xA693A093, - 0x3FF00701, 0x88000000, 0x3E0C9875, 0xF0B73DAA, - 0x3FF00705, 0x88000000, 0x3E3FA133, 0x2449A944, - 0x3FF00709, 0x8C000000, 0xBE110285, 0xBFE66C14, - 0x3FF0070D, 0x8C000000, 0x3E37ED91, 0x054EDCBD, - 0x3FF00711, 0x90000000, 0xBE27A86A, 0xEFB65924, - 0x3FF00715, 0x90000000, 0x3E307A0B, 0x1C8A0CF1, - 0x3FF00719, 0x94000000, 0xBE3327AD, 0x397FB1D6, - 0x3FF0071D, 0x94000000, 0x3E228D43, 0x1412B9FB, - 0x3FF00721, 0x98000000, 0xBE3A3B08, 0x94D8FFB0, - 0x3FF00725, 0x98000000, 0x3E029AA3, 0x6ED80040, - 0x3FF00729, 0x98000000, 0x3E3EF1B8, 0x9627250A, - 0x3FF0072D, 0x9C000000, 0xBE117F70, 0x5FCB1B09, - 0x3FF00731, 0x9C000000, 0x3E385E96, 0x678F0789, - 0x3FF00735, 0xA0000000, 0xBE25A5DF, 0xCEA3485B, - 0x3FF00739, 0xA0000000, 0x3E320B90, 0xFF6D0303, - 0x3FF0073D, 0xA4000000, 0xBE3105E6, 0xE03334FF, - 0x3FF00741, 0xA4000000, 0x3E27F150, 0xFB9F056D, - 0x3FF00745, 0xA8000000, 0xBE36F8C0, 0xE28905F4, - 0x3FF00749, 0xA8000000, 0x3E189774, 0x0B1407AA, - 0x3FF0074D, 0xAC000000, 0xBE3CAB7D, 0xCE4493C4, - 0x3FF00751, 0xAC000000, 0x3DE265D5, 0xCB817D78, - 0x3FF00755, 0xAC000000, 0x3E3DE1E2, 0x7CA8B4E3, - 0x3FF00759, 0xB0000000, 0xBE12FD89, 0x7D730FC6, - 0x3FF0075D, 0xB0000000, 0x3E38AF60, 0x1E4D7759, - 0x3FF00761, 0xB4000000, 0xBE23A3AC, 0x0CAD84A2, - 0x3FF00765, 0xB4000000, 0x3E33BCFB, 0x36B866FD, - 0x3FF00769, 0xB8000000, 0xBE2D4858, 0x4D0667A1, - 0x3FF0076D, 0xB8000000, 0x3E2E1567, 0xCBF08E6A, - 0x3FF00771, 0xBC000000, 0xBE333664, 0x9FD34D05, - 0x3FF00775, 0xBC000000, 0x3E253114, 0x9837D6E0, - 0x3FF00779, 0xC0000000, 0xBE37887F, 0x5238327D, - 0x3FF0077D, 0xC0000000, 0x3E1999FA, 0x24C8DC90, - 0x3FF00781, 0xC4000000, 0xBE3B9A7C, 0x1DA2F8BE, - 0x3FF00785, 0xC4000000, 0x3E03A485, 0xEA50EE6A, - 0x3FF00789, 0xC8000000, 0xBE3F6C5A, 0xE204A449, - 0x3FF0078D, 0xC8000000, 0xBDF3D3EF, 0x78D5D0F3, - 0x3FF00791, 0xC8000000, 0x3E3D01E4, 0x80B1D66C, - 0x3FF00795, 0xCC000000, 0xBE12BBC1, 0xD5149796, - 0x3FF00799, 0xCC000000, 0x3E39B042, 0x2A8F92F0, - 0x3FF0079D, 0xD0000000, 0xBE1F820E, 0x6F386487, - 0x3FF007A1, 0xD0000000, 0x3E369EBE, 0x3BA3BCDA, - 0x3FF007A5, 0xD4000000, 0xBE25A3F0, 0x96320652, - 0x3FF007A9, 0xD4000000, 0x3E33CD58, 0xD3FD8FCA, - 0x3FF007AD, 0xD8000000, 0xBE2B069C, 0xC62D40B1, - 0x3FF007B1, 0xD8000000, 0x3E313C12, 0x13AC5766, - 0x3FF007B5, 0xDC000000, 0xBE2FE90B, 0x876F3A0B, - 0x3FF007B9, 0xDC000000, 0x3E2DD5D4, 0x357EDEB8, - 0x3FF007BD, 0xE0000000, 0xBE32259E, 0x4CEC957E, - 0x3FF007C1, 0xE0000000, 0x3E29B3C2, 0x128C86C6, - 0x3FF007C5, 0xE4000000, 0xBE341697, 0xDEA61608, - 0x3FF007C9, 0xE4000000, 0x3E2611ED, 0xFEA09E70, - 0x3FF007CD, 0xE8000000, 0xBE35C772, 0x58D49AE3, - 0x3FF007D1, 0xE8000000, 0x3E22F058, 0x39DA3D42, - 0x3FF007D5, 0xEC000000, 0xBE37382D, 0x9B689043, - 0x3FF007D9, 0xEC000000, 0x3E204F01, 0x04589AD6, - 0x3FF007DD, 0xF0000000, 0xBE3868C9, 0x86525259, - 0x3FF007E1, 0xF0000000, 0x3E1C5BD1, 0x3C761DAC, - 0x3FF007E5, 0xF4000000, 0xBE395945, 0xF9822D4C, - 0x3FF007E9, 0xF4000000, 0x3E191A1E, 0x8F4221F9, - 0x3FF007ED, 0xF8000000, 0xBE3A09A2, 0xD4E85D3A, - 0x3FF007F1, 0xF8000000, 0x3E16D8EA, 0x81547225, - 0x3FF007F5, 0xFC000000, 0xBE3A79DF, 0xF8750E3B, - 0x3FF007F9, 0xFC000000, 0x3E159835, 0x92EC7DE3, - 0x3FF007FE, 0x00000000, 0xBE3AA9FD, 0x44185C5D } }; - -#else -#ifdef LITTLE_ENDI - -static const union { - int i[1424]; - double x[712]; -} coar = { .i = { - 0xC8000000, 0x3FE69A59, 0x6079C9F7, 0x3DF22D4D, - 0xC8000000, 0x3FE6A5A9, 0x25AF6823, 0x3E19882D, - 0x74000000, 0x3FE6B0FF, 0x31DABF59, 0xBE221476, - 0xC8000000, 0x3FE6BC5A, 0x99A2DC0A, 0x3E2312AC, - 0xD0000000, 0x3FE6C7BB, 0xCE9F9355, 0xBE265926, - 0x84000000, 0x3FE6D322, 0x2D298DED, 0x3E2F2C26, - 0xF4000000, 0x3FE6DE8E, 0x1E748D2F, 0xBE2EC28E, - 0x14000000, 0x3FE6EA01, 0xC68CB7E5, 0x3E2D8C6D, - 0xF4000000, 0x3FE6F578, 0x419FE2F0, 0x3DEE1A9E, - 0x90000000, 0x3FE700F6, 0xDEAEAE34, 0xBDFF1AFD, - 0xEC000000, 0x3FE70C79, 0x558B7122, 0xBE0730FE, - 0x0C000000, 0x3FE71803, 0x2D280C3B, 0xBE25CB85, - 0xF0000000, 0x3FE72391, 0x337B7B54, 0xBE06F2CE, - 0x9C000000, 0x3FE72F26, 0x45C02B72, 0x3E289BCA, - 0x18000000, 0x3FE73AC1, 0x5039F1CA, 0xBE18DEA6, - 0x60000000, 0x3FE74661, 0x86CE0538, 0xBE09D090, - 0x78000000, 0x3FE75207, 0xCFCE5DDB, 0x3E290E79, - 0x68000000, 0x3FE75DB3, 0xB249A17C, 0x3DD61DF0, - 0x2C000000, 0x3FE76965, 0xE13445F7, 0x3E2F22F7, - 0xD0000000, 0x3FE7751C, 0x874E75CE, 0xBE2CD454, - 0x4C000000, 0x3FE780DA, 0xDF43E3BC, 0xBE0159CE, - 0xA8000000, 0x3FE78C9D, 0x699A1332, 0x3E279291, - 0xEC000000, 0x3FE79866, 0x2DD98C6C, 0xBE2A0BCD, - 0x10000000, 0x3FE7A436, 0x15AC979E, 0x3E25F375, - 0x20000000, 0x3FE7B00B, 0x2FEAFCF6, 0x3E26CCF5, - 0x1C000000, 0x3FE7BBE6, 0x53ADAD67, 0x3E27D4F4, - 0x08000000, 0x3FE7C7C7, 0x7FBD9566, 0x3E10EEC7, - 0xE4000000, 0x3FE7D3AD, 0x9A831D86, 0x3E2837F0, - 0xB8000000, 0x3FE7DF9A, 0x5CB4C35B, 0xBE129BE0, - 0x80000000, 0x3FE7EB8D, 0x0234F04D, 0x3E23990A, - 0x44000000, 0x3FE7F786, 0x64D5C842, 0x3E2EB807, - 0x08000000, 0x3FE80385, 0x02B4E9E8, 0x3E0FC86F, - 0xCC000000, 0x3FE80F89, 0x7B4274BF, 0xBDD7B5B3, - 0x94000000, 0x3FE81B94, 0xB899B00F, 0xBE16888B, - 0x60000000, 0x3FE827A5, 0x5E94D155, 0x3E288971, - 0x38000000, 0x3FE833BC, 0x099F3E5E, 0x3E2AEEB2, - 0x20000000, 0x3FE83FD9, 0x3FF60B7C, 0xBE23B922, - 0x14000000, 0x3FE84BFC, 0x2DBD8012, 0xBDF7D3B1, - 0x1C000000, 0x3FE85825, 0xA8872BEB, 0xBDF24BA3, - 0x38000000, 0x3FE86454, 0x01AA18A7, 0x3E2EFE04, - 0x70000000, 0x3FE87089, 0x944496A2, 0x3E21986C, - 0xC4000000, 0x3FE87CC4, 0xB71FFAFF, 0x3E096A8B, - 0x38000000, 0x3FE88906, 0xBC4C7AC5, 0xBE21CE0A, - 0xCC000000, 0x3FE8954D, 0xBAC02491, 0xBE076F45, - 0x84000000, 0x3FE8A19B, 0xD922B925, 0x3E2B4FA2, - 0x68000000, 0x3FE8ADEF, 0x641863AF, 0x3DF759DB, - 0x78000000, 0x3FE8BA49, 0xC6AB5E04, 0xBE2DB97C, - 0xB4000000, 0x3FE8C6A9, 0xE2156713, 0xBE25364C, - 0x20000000, 0x3FE8D310, 0x862BEFF7, 0x3E1BEB7C, - 0xC4000000, 0x3FE8DF7C, 0x1CEA33A5, 0xBDF4DD0C, - 0xA0000000, 0x3FE8EBEF, 0x51797D47, 0xBE2537DF, - 0xB4000000, 0x3FE8F868, 0xF0107B28, 0x3E0FB1C4, - 0x08000000, 0x3FE904E8, 0xE01B68BD, 0x3E0AD6A1, - 0x9C000000, 0x3FE9116D, 0x1F78D9D9, 0x3E292117, - 0x78000000, 0x3FE91DF9, 0x4F50E5CF, 0xBE1D75DA, - 0x98000000, 0x3FE92A8B, 0x74959E58, 0x3DE5102B, - 0x04000000, 0x3FE93724, 0xD2216C35, 0xBE01CA50, - 0xBC000000, 0x3FE943C2, 0xB0B05884, 0x3E225BFD, - 0xC8000000, 0x3FE95067, 0x60B7C5C1, 0xBE0F2183, - 0x24000000, 0x3FE95D13, 0xB5860441, 0x3E2FB47A, - 0xDC000000, 0x3FE969C4, 0xE2D4059E, 0xBE01FFD2, - 0xEC000000, 0x3FE9767C, 0x12BB6A8D, 0xBDE9ED72, - 0x58000000, 0x3FE9833B, 0x43BFFB24, 0x3E2B3815, - 0x28000000, 0x3FE99000, 0xEE9EAD1E, 0x3E03FA22, - 0x5C000000, 0x3FE99CCB, 0x377138F7, 0xBE213841, - 0xF4000000, 0x3FE9A99C, 0xDB636C94, 0x3E178105, - 0xF8000000, 0x3FE9B674, 0xF5720122, 0x3E1E5E7A, - 0x6C000000, 0x3FE9C353, 0xA2AC5AAE, 0xBE238BFF, - 0x4C000000, 0x3FE9D038, 0xF93BDBD8, 0x3E270893, - 0xA4000000, 0x3FE9DD23, 0x354B86CF, 0x3DF40420, - 0x74000000, 0x3FE9EA15, 0x88CB06B7, 0xBE2D76D3, - 0xBC000000, 0x3FE9F70D, 0x9ED0EC60, 0xBE251639, - 0x80000000, 0x3FEA040C, 0xE2DDE506, 0x3E1F06E9, - 0xC8000000, 0x3FEA1111, 0x8E6DB477, 0x3E014549, - 0x94000000, 0x3FEA1E1D, 0xF8716509, 0xBDF4BC17, - 0xE8000000, 0x3FEA2B2F, 0xDA723A49, 0xBE2107DB, - 0xC4000000, 0x3FEA3848, 0x986AA369, 0x3E1A932A, - 0x30000000, 0x3FEA4568, 0x41592CDB, 0x3E198092, - 0x30000000, 0x3FEA528E, 0x676BCAB8, 0xBE2E260F, - 0xC0000000, 0x3FEA5FBA, 0x2D5D5610, 0x3DE2E821, - 0xE8000000, 0x3FEA6CED, 0x7DA20167, 0x3E2F7046, - 0xB0000000, 0x3FEA7A27, 0xF9FAAD30, 0xBE1D2832, - 0x14000000, 0x3FEA8768, 0x43FA6C45, 0xBE23F788, - 0x18000000, 0x3FEA94AF, 0xAA082732, 0x3E011E27, - 0xC4000000, 0x3FEAA1FC, 0xC682F0BF, 0xBE20BACB, - 0x18000000, 0x3FEAAF51, 0x7BD08C78, 0xBE2DC7DD, - 0x14000000, 0x3FEABCAC, 0xA3B10F9A, 0x3E2271A2, - 0xC4000000, 0x3FEACA0D, 0x7966F94C, 0xBE15449C, - 0x24000000, 0x3FEAD776, 0x6FD8F3EE, 0x3DD06137, - 0x3C000000, 0x3FEAE4E5, 0x8C5A144A, 0xBE267CD1, - 0x0C000000, 0x3FEAF25B, 0xB59DA94B, 0xBE29E584, - 0x98000000, 0x3FEAFFD7, 0x7B52192F, 0xBE23DFCF, - 0xE4000000, 0x3FEB0D5A, 0x78A76B45, 0xBE1CF2FE, - 0xF4000000, 0x3FEB1AE4, 0x7EC80FF6, 0xBE23A561, - 0xC8000000, 0x3FEB2875, 0x932EED68, 0x3E22C4C9, - 0x68000000, 0x3FEB360D, 0xB5833C97, 0x3E2B085C, - 0xD8000000, 0x3FEB43AB, 0x93B9319A, 0xBE01F093, - 0x18000000, 0x3FEB5151, 0xFABCE670, 0xBE254F01, - 0x28000000, 0x3FEB5EFD, 0x627ABFB0, 0x3E2F24C2, - 0x14000000, 0x3FEB6CB0, 0xE6AC0B48, 0x3E1F1EEC, - 0xDC000000, 0x3FEB7A69, 0x127F9ABC, 0xBE1A8671, - 0x80000000, 0x3FEB882A, 0xC87C73B3, 0xBDCB0C28, - 0x08000000, 0x3FEB95F2, 0x7F2B5A97, 0xBE22E8DD, - 0x74000000, 0x3FEBA3C0, 0x2D22A9D5, 0xBE1B3645, - 0xC8000000, 0x3FEBB195, 0x428F8B88, 0x3E0ADACA, - 0x0C000000, 0x3FEBBF72, 0xCDF9F681, 0xBE2E9E07, - 0x3C000000, 0x3FEBCD55, 0x7FA54ACF, 0xBE08A127, - 0x60000000, 0x3FEBDB3F, 0x8225B385, 0x3E0E92CE, - 0x7C000000, 0x3FEBE930, 0x7BB09485, 0x3DF38C2A, - 0x94000000, 0x3FEBF728, 0xF681FA5F, 0xBE2DFD64, - 0xA4000000, 0x3FEC0527, 0xDCE88BD2, 0x3E2E384D, - 0xBC000000, 0x3FEC132D, 0xFE46A893, 0xBE20F111, - 0xD4000000, 0x3FEC213A, 0xB189BFDA, 0x3E193DA1, - 0xF8000000, 0x3FEC2F4E, 0x0E39FB00, 0xBE20E3A1, - 0x24000000, 0x3FEC3D6A, 0x30F0FAC5, 0x3E1DB044, - 0x64000000, 0x3FEC4B8C, 0x97446B17, 0xBE2BC12C, - 0xB4000000, 0x3FEC59B5, 0x963F4150, 0xBE282696, - 0x18000000, 0x3FEC67E6, 0x3049824B, 0x3E224D26, - 0x98000000, 0x3FEC761D, 0x87F84C7D, 0x3E2C5BA5, - 0x38000000, 0x3FEC845C, 0xC4852339, 0xBDE1D14D, - 0xF8000000, 0x3FEC92A1, 0x5588D9E1, 0xBE1A451E, - 0xDC000000, 0x3FECA0EE, 0x68BFF457, 0xBE1D3B96, - 0xE8000000, 0x3FECAF42, 0x4DADF774, 0xBE18B670, - 0x20000000, 0x3FECBD9E, 0x7FB1FC01, 0xBE1A1548, - 0x88000000, 0x3FECCC00, 0x78FC5AF0, 0xBE273F2E, - 0x20000000, 0x3FECDA6A, 0xA6F4A841, 0x3E1D218F, - 0xF0000000, 0x3FECE8DA, 0x4D002CA0, 0x3E2E0BA9, - 0xFC000000, 0x3FECF752, 0x065EF979, 0x3E20F4BB, - 0x48000000, 0x3FED05D2, 0x11793B33, 0xBE2ED3D5, - 0xD0000000, 0x3FED1458, 0x913341B3, 0x3E115E3C, - 0xA0000000, 0x3FED22E6, 0xB3546109, 0x3DE97C02, - 0xB8000000, 0x3FED317B, 0x1BF898EF, 0x3E087540, - 0x1C000000, 0x3FED4018, 0x346F9641, 0x3E209430, - 0xD0000000, 0x3FED4EBB, 0x88F4B20B, 0x3E2B6DF4, - 0xDC000000, 0x3FED5D66, 0x0CB26035, 0xBE2EC68F, - 0x38000000, 0x3FED6C19, 0x1F44D9C3, 0x3E2CA2C8, - 0xF4000000, 0x3FED7AD2, 0x41704EE0, 0x3E10E6F4, - 0x0C000000, 0x3FED8994, 0x25F8F0E2, 0x3E2F9273, - 0x88000000, 0x3FED985C, 0x318798DE, 0x3E2D041A, - 0x6C000000, 0x3FEDA72C, 0x9349CF58, 0xBE005680, - 0xB8000000, 0x3FEDB603, 0xCF0C934D, 0xBE10F665, - 0x70000000, 0x3FEDC4E2, 0x19461C64, 0x3E166124, - 0x9C000000, 0x3FEDD3C8, 0x405624C8, 0xBE1B2ED6, - 0x3C000000, 0x3FEDE2B6, 0x62171501, 0xBE273A7F, - 0x54000000, 0x3FEDF1AB, 0xE36E1450, 0xBE26022B, - 0xE8000000, 0x3FEE00A7, 0x2E07AE15, 0xBE1C341E, - 0xFC000000, 0x3FEE0FAB, 0x18D0E701, 0xBDFC7EAE, - 0x94000000, 0x3FEE1EB7, 0xECD1FF8B, 0x3E06B34F, - 0xB4000000, 0x3FEE2DCA, 0x6813A649, 0x3E1394A3, - 0x60000000, 0x3FEE3CE5, 0xC1754D14, 0x3E045496, - 0x9C000000, 0x3FEE4C07, 0xF5C6087C, 0xBE180FFF, - 0x68000000, 0x3FEE5B31, 0xADD9A300, 0x3E22FBCD, - 0xCC000000, 0x3FEE6A62, 0xAF0289E5, 0x3E2EC7C7, - 0xCC000000, 0x3FEE799B, 0x3FB3EDD4, 0x3E242182, - 0x6C000000, 0x3FEE88DC, 0x04E39885, 0xBE201304, - 0xAC000000, 0x3FEE9824, 0xE6831D31, 0xBE20D352, - 0x90000000, 0x3FEEA774, 0x618DFCEB, 0x3E1E032D, - 0x20000000, 0x3FEEB6CC, 0xF9BB457E, 0x3E1956A3, - 0x60000000, 0x3FEEC62B, 0x50845DB2, 0xBE2A77E0, - 0x4C000000, 0x3FEED592, 0x47C43858, 0x3E2714F7, - 0xF0000000, 0x3FEEE500, 0x71813A66, 0x3E2EED96, - 0x50000000, 0x3FEEF477, 0x4FB4AA34, 0xBE04CDBE, - 0x6C000000, 0x3FEF03F5, 0x86EB4FF5, 0xBE2774A2, - 0x48000000, 0x3FEF137B, 0xAD43B2D2, 0xBE29DD95, - 0xE8000000, 0x3FEF2308, 0xAC16E506, 0xBE1CADB0, - 0x50000000, 0x3FEF329E, 0x58745C7B, 0x3E12AC33, - 0x88000000, 0x3FEF423B, 0x6EC2D854, 0xBE248118, - 0x8C000000, 0x3FEF51E0, 0x304ACE08, 0x3E26986B, - 0x68000000, 0x3FEF618D, 0x3B09354E, 0x3E126D81, - 0x1C000000, 0x3FEF7142, 0x773C23B3, 0x3DF06AAE, - 0xAC000000, 0x3FEF80FE, 0xD82EF423, 0xBDA105B6, - 0x1C000000, 0x3FEF90C3, 0x465499B8, 0x3DECDEED, - 0x70000000, 0x3FEFA08F, 0xE2EF03AE, 0x3E0AEFD4, - 0xAC000000, 0x3FEFB063, 0x0567B2E7, 0x3E1BD4C0, - 0xD4000000, 0x3FEFC03F, 0x4F97FCBF, 0x3E26AA22, - 0xF0000000, 0x3FEFD023, 0x5E4E88D1, 0xBE2F9420, - 0xFC000000, 0x3FEFE00F, 0x438E52E2, 0xBE254004, - 0x00000000, 0x3FEFF004, 0xEEE93EFC, 0xBE1552AA, - 0x00000000, 0x3FF00000, 0x00000000, 0x00000000, - 0x00000000, 0x3FF00802, 0x4449F507, 0x3E155800, - 0x04000000, 0x3FF01008, 0x882D75D6, 0xBE354AA8, - 0x08000000, 0x3FF01812, 0x3740DE56, 0x3E303610, - 0x14000000, 0x3FF02020, 0x5B0C3264, 0x3E360044, - 0x28000000, 0x3FF02832, 0x0197EDC3, 0x3E3C4C26, - 0x48000000, 0x3FF03048, 0x5046CA09, 0x3E0B103B, - 0x74000000, 0x3FF03862, 0xF9A62624, 0xBE34659C, - 0xAC000000, 0x3FF04080, 0xDD0A8F37, 0xBE254438, - 0xF4000000, 0x3FF048A2, 0x97AFB6E2, 0x3DF256C2, - 0x50000000, 0x3FF050C9, 0x923D25E1, 0xBE3085DF, - 0xC0000000, 0x3FF058F3, 0x5EA3B091, 0xBE3F0A93, - 0x44000000, 0x3FF06122, 0x5D63534C, 0xBE237DE4, - 0xE0000000, 0x3FF06954, 0xFF0C58B7, 0x3E301719, - 0x98000000, 0x3FF0718B, 0x9DF7B665, 0x3E2E8410, - 0x6C000000, 0x3FF079C6, 0x3B127222, 0x3E349CB9, - 0x60000000, 0x3FF08205, 0x98E0BD08, 0x3DF127EC, - 0x74000000, 0x3FF08A48, 0x706CC41F, 0xBE24C1B6, - 0xA8000000, 0x3FF0928F, 0x093044EF, 0x3E334EF9, - 0x04000000, 0x3FF09ADB, 0x56BC6C83, 0xBE1304B1, - 0x84000000, 0x3FF0A32A, 0xB028B984, 0x3E2D383E, - 0x30000000, 0x3FF0AB7E, 0x64E7A202, 0xBE315B1E, - 0x04000000, 0x3FF0B3D6, 0xC678291E, 0xBE0AC1E6, - 0x04000000, 0x3FF0BC32, 0x2F12FFE2, 0x3E3A0418, - 0x38000000, 0x3FF0C492, 0x43D6D302, 0xBE37D617, - 0x98000000, 0x3FF0CCF6, 0x152CC8FA, 0x3E2133F2, - 0x2C000000, 0x3FF0D55F, 0xE966E6B7, 0x3E3CE5D1, - 0xF8000000, 0x3FF0DDCB, 0x7BCACA64, 0x3E1ABF24, - 0xFC000000, 0x3FF0E63C, 0x2E8CDBED, 0xBE3854F6, - 0x38000000, 0x3FF0EEB2, 0x0C32156B, 0xBE3E6463, - 0xAC000000, 0x3FF0F72B, 0xB69772CC, 0x3E365671, - 0x64000000, 0x3FF0FFA9, 0x02B1201A, 0xBE383E9A, - 0x58000000, 0x3FF1082B, 0x50549CC0, 0xBE205962, - 0x90000000, 0x3FF110B1, 0xFFDACA72, 0xBE376BFE, - 0x08000000, 0x3FF1193C, 0x5C43E2F3, 0x3E3C1C59, - 0xCC000000, 0x3FF121CA, 0xF7067C8B, 0xBE26D374, - 0xD4000000, 0x3FF12A5D, 0x4DDAFE1D, 0x3E343CCC, - 0x28000000, 0x3FF132F5, 0x58EBCB7F, 0x3E3D5C16, - 0xCC000000, 0x3FF13B90, 0xB66E8B53, 0xBE2B5D12, - 0xBC000000, 0x3FF14430, 0xB326B482, 0xBE24E919, - 0xFC000000, 0x3FF14CD4, 0xC8AABD43, 0x3E23139A, - 0x90000000, 0x3FF1557D, 0x16743B55, 0x3E30DD8B, - 0x7C000000, 0x3FF15E2A, 0x35904C50, 0xBE31D701, - 0xBC000000, 0x3FF166DB, 0x30E0CA83, 0x3E107F42, - 0x58000000, 0x3FF16F91, 0xDA1B7123, 0xBE24F1F2, - 0x50000000, 0x3FF1784B, 0x0DC79E23, 0xBE3ACAF2, - 0xA4000000, 0x3FF18109, 0x609374EE, 0xBE23DC79, - 0x58000000, 0x3FF189CC, 0x3A40C3B7, 0x3E262CF7, - 0x70000000, 0x3FF19293, 0x5A24F463, 0x3E1D3833, - 0xEC000000, 0x3FF19B5E, 0x8A2E4440, 0x3E2BA9AD, - 0xD0000000, 0x3FF1A42E, 0x61C41828, 0x3DFD8CBC, - 0x1C000000, 0x3FF1AD03, 0x5A4DDF0D, 0x3E1A65E6, - 0xD4000000, 0x3FF1B5DB, 0x9F828DB5, 0xBDE2FDBB, - 0xF8000000, 0x3FF1BEB8, 0xB79B700F, 0x3E2F4EE8, - 0x8C000000, 0x3FF1C79A, 0x0DE1D7E8, 0x3E3ACC35, - 0x94000000, 0x3FF1D080, 0xFF9E20A0, 0x3E11729E, - 0x10000000, 0x3FF1D96B, 0x6C2EA70B, 0xBE300F18, - 0x00000000, 0x3FF1E25A, 0xCE425A35, 0x3DF32E02, - 0x68000000, 0x3FF1EB4D, 0x9A322D12, 0x3E3BDE56, - 0x50000000, 0x3FF1F445, 0xBA737AEF, 0xBE3C3F0D, - 0xB0000000, 0x3FF1FD41, 0xC896DB7A, 0xBE0A2DD0, - 0x90000000, 0x3FF20642, 0xF8B782F6, 0x3E2577B0, - 0xF4000000, 0x3FF20F47, 0x73607FC8, 0xBE2C6DA3, - 0xD8000000, 0x3FF21851, 0xC8917348, 0x3E35F7D1, - 0x44000000, 0x3FF22160, 0xCF9CED69, 0x3E3B6F5C, - 0x3C000000, 0x3FF22A73, 0x85775C2E, 0xBE39967E, - 0xB8000000, 0x3FF2338A, 0x497226D4, 0x3E3B3213, - 0xC4000000, 0x3FF23CA6, 0x30733227, 0x3E3E2710, - 0x60000000, 0x3FF245C7, 0xAF215A72, 0x3E33B8A9, - 0x90000000, 0x3FF24EEC, 0x1365623F, 0xBE3F96B2, - 0x50000000, 0x3FF25816, 0x27DEE202, 0xBE37324F, - 0xA4000000, 0x3FF26144, 0x4E484D87, 0x3E318CD5, - 0x94000000, 0x3FF26A77, 0xA94519E8, 0xBDE3FD37, - 0x1C000000, 0x3FF273AF, 0xEE788C29, 0x3E37132F, - 0x44000000, 0x3FF27CEB, 0xE842E5C0, 0xBE03DDB7, - 0x08000000, 0x3FF2862C, 0xE17C9693, 0x3E37A3FB, - 0x70000000, 0x3FF28F71, 0xAEB3D9A0, 0x3E24EABF, - 0x7C000000, 0x3FF298BB, 0x853B0733, 0xBE13C7B6, - 0x2C000000, 0x3FF2A20A, 0xC7B588B5, 0x3E2D2C80, - 0x88000000, 0x3FF2AB5D, 0x708F3912, 0xBE35B750, - 0x8C000000, 0x3FF2B4B5, 0xD5FD9130, 0xBE291A70, - 0x3C000000, 0x3FF2BE12, 0x0CCF9F73, 0x3E2EE937, - 0xA0000000, 0x3FF2C773, 0xD42CF76C, 0xBE3C3F0C, - 0xB0000000, 0x3FF2D0D9, 0x60763D61, 0x3E35DD54, - 0x78000000, 0x3FF2DA44, 0xE7D6AA3B, 0x3E26C418, - 0xF8000000, 0x3FF2E3B3, 0x6FB9B7A8, 0xBE3605C6, - 0x2C000000, 0x3FF2ED28, 0x24DCDDF5, 0x3E3763D4, - 0x20000000, 0x3FF2F6A1, 0xA8EC1AA8, 0xBE1A411E, - 0xD0000000, 0x3FF3001E, 0x1FE8546F, 0xBE23FCA1, - 0x40000000, 0x3FF309A1, 0x3AAEE75E, 0xBE29DF0D, - 0x70000000, 0x3FF31328, 0x3C2C4206, 0x3E36A5D6, - 0x68000000, 0x3FF31CB4, 0xB4C979B0, 0x3E1B7A3E, - 0x28000000, 0x3FF32645, 0x706CD593, 0xBE36157D, - 0xB0000000, 0x3FF32FDA, 0x8DA4C646, 0xBE39F357, - 0x04000000, 0x3FF33975, 0xD575FE6F, 0xBE3E64DE, - 0x24000000, 0x3FF34314, 0x44D008E0, 0x3E07F9E3, - 0x18000000, 0x3FF34CB8, 0x5A563E77, 0xBE2E94F9, - 0xDC000000, 0x3FF35660, 0x2475EF19, 0x3E314DC2, - 0x78000000, 0x3FF3600E, 0xA33AC606, 0x3E26D623, - 0xEC000000, 0x3FF369C0, 0xC05B3160, 0x3E170F86, - 0x3C000000, 0x3FF37378, 0xDB0AE31A, 0xBE38DDFE, - 0x64000000, 0x3FF37D34, 0x5706B570, 0x3E3662A9, - 0x70000000, 0x3FF386F5, 0x6770731E, 0xBE1625E4, - 0x5C000000, 0x3FF390BB, 0x62971091, 0xBE1678F1, - 0x2C000000, 0x3FF39A86, 0xD045CB0C, 0xBE061F7C, - 0xE4000000, 0x3FF3A455, 0x568B1CA2, 0xBE35CF51, - 0x84000000, 0x3FF3AE2A, 0x7FB61F58, 0xBE378185, - 0x0C000000, 0x3FF3B804, 0x4FA133AF, 0x3E3F77F4, - 0x88000000, 0x3FF3C1E2, 0xB00B73FE, 0xBE22F96A, - 0xF0000000, 0x3FF3CBC5, 0x1EB4CE2F, 0x3E351A64, - 0x50000000, 0x3FF3D5AE, 0xD3755639, 0xBE3D3516, - 0xA0000000, 0x3FF3DF9B, 0x43E8C10E, 0x3E1CD938, - 0xEC000000, 0x3FF3E98D, 0x455C8842, 0xBE35EE23, - 0x30000000, 0x3FF3F385, 0x96C9F4ED, 0xBE29B282, - 0x70000000, 0x3FF3FD81, 0x3168CC0B, 0x3E24A40E, - 0xB0000000, 0x3FF40782, 0x86C72839, 0x3E3784BC, - 0xF4000000, 0x3FF41188, 0x0785D847, 0x3E061F19, - 0x3C000000, 0x3FF41B94, 0xE654A9C9, 0xBE27AEF2, - 0x88000000, 0x3FF425A4, 0xF9E4C1BA, 0x3E33DFC3, - 0xE0000000, 0x3FF42FB9, 0x593D0C75, 0x3E2455A8, - 0x44000000, 0x3FF439D4, 0x238B65D1, 0xBDE41D4E, - 0xB4000000, 0x3FF443F3, 0x454CBECB, 0x3E3BE616, - 0x38000000, 0x3FF44E18, 0x931C5332, 0x3E207B3C, - 0xD0000000, 0x3FF45841, 0x7615DCC9, 0xBE330846, - 0x7C000000, 0x3FF46270, 0xE497F84E, 0xBE2A8A7B, - 0x40000000, 0x3FF46CA4, 0xF737AF78, 0x3E020B50, - 0x20000000, 0x3FF476DD, 0xE34AFBD3, 0x3E116B19, - 0x20000000, 0x3FF4811B, 0x841EDB52, 0xBE3E15A7, - 0x3C000000, 0x3FF48B5E, 0x33B3DE1E, 0x3E0F40C3, - 0x7C000000, 0x3FF495A6, 0x92EFEE02, 0x3E33607F, - 0xE4000000, 0x3FF49FF3, 0x14F7E168, 0xBE1A2DB5, - 0x70000000, 0x3FF4AA46, 0x3EBA1C94, 0x3E3F59EC, - 0x2C000000, 0x3FF4B49E, 0x8B9AE885, 0xBE31A539, - 0x10000000, 0x3FF4BEFB, 0xF13C8C95, 0x3E2FAC0B, - 0x28000000, 0x3FF4C95D, 0xF8B74775, 0xBE32C0BB, - 0x70000000, 0x3FF4D3C4, 0x4F9474BB, 0xBE2FC24E, - 0xEC000000, 0x3FF4DE30, 0x09DA911F, 0x3E008F30, - 0xA0000000, 0x3FF4E8A2, 0xBAF8D98B, 0x3E2994C1, - 0x90000000, 0x3FF4F319, 0x18648D0A, 0xBE17C38C, - 0xBC000000, 0x3FF4FD95, 0xF22F8698, 0xBE288852, - 0x28000000, 0x3FF50817, 0x30A2C153, 0xBE3C3EC3, - 0xD4000000, 0x3FF5129D, 0x968492AA, 0xBE27B606, - 0xC4000000, 0x3FF51D29, 0x61101629, 0x3E2E0396, - 0xFC000000, 0x3FF527BA, 0xDAEEAB38, 0x3E3E876F, - 0x80000000, 0x3FF53251, 0xED945B30, 0x3E29F59E, - 0x50000000, 0x3FF53CED, 0x0B4AE3F1, 0x3E12D7DA, - 0x70000000, 0x3FF5478E, 0x5FB946D0, 0xBE2FAFB8, - 0xE0000000, 0x3FF55234, 0x87D80C66, 0xBE18A8B3, - 0xA4000000, 0x3FF55CE0, 0x764CF85C, 0x3E28B18F, - 0xC0000000, 0x3FF56791, 0x2BDBC6F4, 0x3E326017, - 0x38000000, 0x3FF57248, 0x53D523FE, 0xBE229F98, - 0x0C000000, 0x3FF57D04, 0x4D9B8720, 0xBE3BDD08, - 0x3C000000, 0x3FF587C5, 0x09D8749E, 0x3E169EBC, - 0xD0000000, 0x3FF5928B, 0x339C2080, 0x3E190C8C, - 0xC8000000, 0x3FF59D57, 0xDE75E9CA, 0x3E310FA4, - 0x28000000, 0x3FF5A829, 0x1097F186, 0x3E313D18, - 0xF4000000, 0x3FF5B2FF, 0xD51C23F6, 0xBE2BDE04, - 0x28000000, 0x3FF5BDDC, 0x8938C386, 0x3E3EE67E, - 0xD0000000, 0x3FF5C8BD, 0x47DF6575, 0x3E0973B8, - 0xE8000000, 0x3FF5D3A4, 0x1DB97781, 0x3E24DF02, - 0x78000000, 0x3FF5DE91, 0xAC4AECDC, 0xBE3FBA00, - 0x7C000000, 0x3FF5E983, 0x939F646A, 0xBE2F37AF, - 0xFC000000, 0x3FF5F47A, 0x58A6EEE9, 0xBE396DEF, - 0xF8000000, 0x3FF5FF77, 0xE3613C7B, 0xBE315248, - 0x74000000, 0x3FF60A7A, 0xF1553706, 0xBE26A9E2, - 0x74000000, 0x3FF61582, 0xAE4D7CB6, 0xBE3B6BF6, - 0xF8000000, 0x3FF6208F, 0x9EB5EBA5, 0xBE35775B, - 0x04000000, 0x3FF62BA3, 0xC1E43506, 0xBE2A821B, - 0x9C000000, 0x3FF636BB, 0x7B2D8CF4, 0xBE367CDA, - 0xC0000000, 0x3FF641D9, 0x3E907A1D, 0xBE13218B, - 0x74000000, 0x3FF64CFD, 0x7BF5DFE4, 0x3E3454EE, - 0xC0000000, 0x3FF65826, 0x6366C5FD, 0xBE3E960F, - 0x9C000000, 0x3FF66355, 0x8B43C17E, 0x3E2E378F, - 0x14000000, 0x3FF66E8A, 0xA4306535, 0x3E244BE0, - 0x28000000, 0x3FF679C4, 0x8DF63D6E, 0xBDE4B6C1, - 0xD8000000, 0x3FF68503, 0xE6A239CF, 0x3E3BA122, - 0x2C000000, 0x3FF69049, 0x59FB5F30, 0x3E27F286, - 0x24000000, 0x3FF69B94, 0x971D3970, 0xBE044041 } }; - -static const union { - int4 i[2048]; - double x[1024]; -} fine = { .i = { - 0x00000000, 0x3FF00000, 0x00000000, 0x00000000, - 0x00000000, 0x3FF00004, 0x55556AAB, 0x3DA00001, - 0x00000000, 0x3FF00008, 0xAAAB0000, 0x3DC00002, - 0x00000000, 0x3FF0000C, 0x8000D800, 0x3DD20004, - 0x00000000, 0x3FF00010, 0x5556AAAB, 0x3DE00005, - 0x00000000, 0x3FF00014, 0x6AADEC01, 0x3DE9000A, - 0x00000000, 0x3FF00018, 0x00036001, 0x3DF20009, - 0x00000000, 0x3FF0001C, 0x4AB0EB58, 0x3DF8800E, - 0x00000000, 0x3FF00020, 0xAAB00002, 0x3E00000A, - 0x00000000, 0x3FF00024, 0x30088B04, 0x3E04400F, - 0x00000000, 0x3FF00028, 0xD5625AB1, 0x3E090014, - 0x00000000, 0x3FF0002C, 0xBABDBB0A, 0x3E0E401B, - 0x00000000, 0x3FF00030, 0x000D8008, 0x3E120012, - 0x00000000, 0x3FF00034, 0xE2BD42E1, 0x3E152016, - 0x00000000, 0x3FF00038, 0x956E5812, 0x3E18801C, - 0x00000000, 0x3FF0003C, 0x2820F599, 0x3E1C2023, - 0x00000000, 0x3FF00040, 0x556AAABC, 0x3E200015, - 0x00000000, 0x3FF00044, 0x96C5DAD7, 0x3E221019, - 0x00000000, 0x3FF00048, 0x60222C1F, 0x3E24401E, - 0x00000000, 0x3FF0004C, 0xB97FC193, 0x3E269023, - 0x00000000, 0x3FF00050, 0xAADEC034, 0x3E290029, - 0x00000000, 0x3FF00054, 0x3C3F4F02, 0x3E2B9030, - 0x00000000, 0x3FF00058, 0x75A196FF, 0x3E2E4037, - 0x00000000, 0x3FF0005C, 0xAF82E194, 0x3E30881F, - 0x00000000, 0x3FF00060, 0x00360041, 0x3E320024, - 0x00000000, 0x3FF00064, 0xB0EA3F05, 0x3E338828, - 0x00000000, 0x3FF00068, 0xC59FB661, 0x3E35202D, - 0x00000000, 0x3FF0006C, 0x42567FD5, 0x3E36C833, - 0x00000000, 0x3FF00070, 0x2B0EB5E1, 0x3E388039, - 0x00000000, 0x3FF00074, 0x83C87407, 0x3E3A483F, - 0x00000000, 0x3FF00078, 0x5083D6C6, 0x3E3C2046, - 0x00000000, 0x3FF0007C, 0x9540FB9E, 0x3E3E084D, - 0x04000000, 0x3FF00080, 0xA9FFFEEF, 0xBE3FFFAA, - 0x04000000, 0x3FF00084, 0x693EF962, 0xBE3DF7A2, - 0x04000000, 0x3FF00088, 0xA47BD339, 0xBE3BDF99, - 0x04000000, 0x3FF0008C, 0x57B66AF5, 0xBE39B790, - 0x04000000, 0x3FF00090, 0x7EEE9E14, 0xBE377F86, - 0x04000000, 0x3FF00094, 0x16244916, 0xBE35377C, - 0x04000000, 0x3FF00098, 0x1957477B, 0xBE32DF71, - 0x04000000, 0x3FF0009C, 0x848773C2, 0xBE307765, - 0x04000000, 0x3FF000A0, 0xA7694ED3, 0xBE2BFEB2, - 0x04000000, 0x3FF000A4, 0x05BD75E2, 0xBE26EE99, - 0x04000000, 0x3FF000A8, 0x1C0B0BB1, 0xBE21BE7E, - 0x04000000, 0x3FF000AC, 0xC4A37A79, 0xBE18DCC3, - 0x04000000, 0x3FF000B0, 0x4244D60F, 0xBE0BF911, - 0x04000000, 0x3FF000B4, 0xEC91D848, 0xBDE6E255, - 0x04000000, 0x3FF000B8, 0xEC1B8F0C, 0x3E0107EB, - 0x04000000, 0x3FF000BC, 0x89BE52AA, 0x3E142439, - 0x04000000, 0x3FF000C0, 0x06C01033, 0x3E200240, - 0x04000000, 0x3FF000C4, 0xC8A9F760, 0x3E261264, - 0x04000000, 0x3FF000C8, 0x129D3FDE, 0x3E2C428B, - 0x04000000, 0x3FF000CC, 0x764D2658, 0x3E314959, - 0x04000000, 0x3FF000D0, 0x2F50C16C, 0x3E34816E, - 0x04000000, 0x3FF000D4, 0xB859A4AB, 0x3E37C983, - 0x04000000, 0x3FF000D8, 0x15680499, 0x3E3B219A, - 0x04000000, 0x3FF000DC, 0x4A7C16B5, 0x3E3E89B1, - 0x08000000, 0x3FF000E0, 0xA469EE7E, 0xBE3DFE36, - 0x08000000, 0x3FF000E4, 0xB349D37F, 0xBE3A761D, - 0x08000000, 0x3FF000E8, 0xDE235FCD, 0xBE36DE03, - 0x08000000, 0x3FF000EC, 0x20F659E6, 0xBE3335E9, - 0x08000000, 0x3FF000F0, 0xEF850E8F, 0xBE2EFB9A, - 0x08000000, 0x3FF000F4, 0xBD0F58E2, 0xBE276B61, - 0x08000000, 0x3FF000F8, 0x45163381, 0xBE1F764D, - 0x08000000, 0x3FF000FC, 0x5FDF589A, 0xBE0FABA6, - 0x08000000, 0x3FF00100, 0xABBBBE94, 0x3D8555AA, - 0x08000000, 0x3FF00104, 0xDABB690B, 0x3E102B2C, - 0x08000000, 0x3FF00108, 0x7820FBA0, 0x3E2045D9, - 0x08000000, 0x3FF0010C, 0x92F54742, 0x3E28961E, - 0x08000000, 0x3FF00110, 0xE2ED8E39, 0x3E308332, - 0x08000000, 0x3FF00114, 0x8C698119, 0x3E34CB57, - 0x08000000, 0x3FF00118, 0x49EEC0C4, 0x3E39237D, - 0x08000000, 0x3FF0011C, 0x1F7D92BC, 0x3E3D8BA4, - 0x0C000000, 0x3FF00120, 0xEEE9C27D, 0xBE3DFC33, - 0x0C000000, 0x3FF00124, 0xDD46F763, 0xBE39740A, - 0x0C000000, 0x3FF00128, 0xA799C375, 0xBE34DBE0, - 0x0C000000, 0x3FF0012C, 0x49E1DD2F, 0xBE3033B5, - 0x0C000000, 0x3FF00130, 0x803DF41F, 0xBE26F711, - 0x0C000000, 0x3FF00134, 0x19433A4C, 0xBE1ACD6C, - 0x0C000000, 0x3FF00138, 0x8770E36F, 0xBDFDB2C1, - 0x0C000000, 0x3FF0013C, 0x6B74A43E, 0x3E086820, - 0x0C000000, 0x3FF00140, 0xDEC0D058, 0x3E200A6A, - 0x0C000000, 0x3FF00144, 0x22BD7872, 0x3E2A1AD0, - 0x0C000000, 0x3FF00148, 0xF769E132, 0x3E32259B, - 0x0C000000, 0x3FF0014C, 0x2582289A, 0x3E374DD1, - 0x0C000000, 0x3FF00150, 0x9FA7E4F4, 0x3E3C8607, - 0x10000000, 0x3FF00154, 0x9624963C, 0xBE3E31C0, - 0x10000000, 0x3FF00158, 0x77E2F472, 0xBE38D987, - 0x10000000, 0x3FF0015C, 0x0192E02C, 0xBE33714D, - 0x10000000, 0x3FF00160, 0x5E6805CB, 0xBE2BF222, - 0x10000000, 0x3FF00164, 0xF98C0A34, 0xBE20E1A7, - 0x10000000, 0x3FF00168, 0x32447238, 0xBE06C4AB, - 0x10000000, 0x3FF0016C, 0xC225D8C1, 0x3E067D54, - 0x10000000, 0x3FF00170, 0x05C4630F, 0x3E210FD8, - 0x10000000, 0x3FF00174, 0xBB206115, 0x3E2CA05D, - 0x10000000, 0x3FF00178, 0x2C4F14A6, 0x3E342873, - 0x10000000, 0x3FF0017C, 0xF31F3B5E, 0x3E3A10B8, - 0x14000000, 0x3FF00180, 0xC9FEFCC9, 0xBE3FF6FF, - 0x14000000, 0x3FF00184, 0x070B344A, 0xBE39EEB7, - 0x14000000, 0x3FF00188, 0xC0050AA2, 0xBE33D66C, - 0x14000000, 0x3FF0018C, 0xE1D83C97, 0xBE2B5C41, - 0x14000000, 0x3FF00190, 0x57003305, 0xBE1DD74E, - 0x14000000, 0x3FF00194, 0xA80727F1, 0xBDF2D84A, - 0x14000000, 0x3FF00198, 0x534C5401, 0x3E14AB2F, - 0x14000000, 0x3FF0019C, 0xD875DE83, 0x3E27263B, - 0x14000000, 0x3FF001A0, 0x9FB782CA, 0x3E320B71, - 0x14000000, 0x3FF001A4, 0xF349371F, 0x3E3893C6, - 0x14000000, 0x3FF001A8, 0xEAF074C6, 0x3E3F2C1D, - 0x18000000, 0x3FF001AC, 0x75525ABC, 0xBE3A2B89, - 0x18000000, 0x3FF001B0, 0x297ECCE2, 0xBE33732F, - 0x18000000, 0x3FF001B4, 0x5B28EC49, 0xBE2955A6, - 0x18000000, 0x3FF001B8, 0xF64BA7FD, 0xBE1749D5, - 0x18000000, 0x3FF001BC, 0xA8645141, 0x3DF15E9E, - 0x18000000, 0x3FF001C0, 0x1D6F0B37, 0x3E201C96, - 0x18000000, 0x3FF001C4, 0xE6028E39, 0x3E2E2D5B, - 0x18000000, 0x3FF001C8, 0x9B63FA1E, 0x3E362F12, - 0x18000000, 0x3FF001CC, 0x0BE01026, 0x3E3D5779, - 0x1C000000, 0x3FF001D0, 0xB78A0445, 0xBE3B701E, - 0x1C000000, 0x3FF001D4, 0xAAD9CF9D, 0xBE3427B4, - 0x1C000000, 0x3FF001D8, 0x941DBAB5, 0xBE299E91, - 0x1C000000, 0x3FF001DC, 0x44A2DFDD, 0xBE159B6C, - 0x1C000000, 0x3FF001E0, 0x1EC8B89C, 0x3E008CA4, - 0x1C000000, 0x3FF001E4, 0xF1EE0E9A, 0x3E23340B, - 0x1C000000, 0x3FF001E8, 0x5231913C, 0x3E313279, - 0x1C000000, 0x3FF001EC, 0x93892E68, 0x3E38DAEE, - 0x20000000, 0x3FF001F0, 0x3F01A6A8, 0xBE3F6C9A, - 0x20000000, 0x3FF001F4, 0x216E726C, 0xBE37A421, - 0x20000000, 0x3FF001F8, 0x1F7970B9, 0xBE2F974C, - 0x20000000, 0x3FF001FC, 0x17AFEBC8, 0xBE1F8CA4, - 0x20000000, 0x3FF00200, 0x04445B06, 0x3DB55600, - 0x20000000, 0x3FF00204, 0x0C290A26, 0x3E203BAE, - 0x20000000, 0x3FF00208, 0x104547BD, 0x3E30365A, - 0x20000000, 0x3FF0020C, 0x22970DE3, 0x3E385EDF, - 0x24000000, 0x3FF00210, 0xBEF5A5F4, 0xBE3F6899, - 0x24000000, 0x3FF00214, 0x90605040, 0xBE372010, - 0x24000000, 0x3FF00218, 0x9B50D8EE, 0xBE2D8F0A, - 0x24000000, 0x3FF0021C, 0xCB35D444, 0xBE197BDF, - 0x24000000, 0x3FF00220, 0x2188E3D5, 0x3E00CCBC, - 0x24000000, 0x3FF00224, 0x36A79F6A, 0x3E254452, - 0x24000000, 0x3FF00228, 0xD69B2D28, 0x3E333ABC, - 0x24000000, 0x3FF0022C, 0xBA07BE5B, 0x3E3BE352, - 0x28000000, 0x3FF00230, 0x3665F227, 0xBE3B6415, - 0x28000000, 0x3FF00234, 0xF6AD58D5, 0xBE329B7A, - 0x28000000, 0x3FF00238, 0x059BD24A, 0xBE2385BD, - 0x28000000, 0x3FF0023C, 0xD8E2B1B4, 0xBDEB47FA, - 0x28000000, 0x3FF00240, 0x22CF60F6, 0x3E203CC2, - 0x28000000, 0x3FF00244, 0x39BEF87F, 0x3E312704, - 0x28000000, 0x3FF00248, 0xA63F5309, 0x3E3A3FA9, - 0x2C000000, 0x3FF0024C, 0xA516AE5E, 0xBE3C97AE, - 0x2C000000, 0x3FF00250, 0xA442792A, 0xBE335F04, - 0x2C000000, 0x3FF00254, 0xA686F3A2, 0xBE242CB0, - 0x2C000000, 0x3FF00258, 0xC3237903, 0xBDE7B535, - 0x2C000000, 0x3FF0025C, 0x9E7A6CF7, 0x3E21560E, - 0x2C000000, 0x3FF00260, 0xA8C01385, 0x3E3223BA, - 0x2C000000, 0x3FF00264, 0x627012DF, 0x3E3BAC70, - 0x30000000, 0x3FF00268, 0x7FB232EA, 0xBE3ABAD7, - 0x30000000, 0x3FF0026C, 0xF9A6244B, 0xBE31121C, - 0x30000000, 0x3FF00270, 0x1DAC9AE4, 0xBE1D6580, - 0x30000000, 0x3FF00274, 0xD7FB0AC3, 0x3E037AFA, - 0x30000000, 0x3FF00278, 0x633420EB, 0x3E289042, - 0x30000000, 0x3FF0027C, 0x8065842A, 0x3E3630E5, - 0x34000000, 0x3FF00280, 0xB49DA4FF, 0xBE3FD653, - 0x34000000, 0x3FF00284, 0x696ECB76, 0xBE35CD8A, - 0x34000000, 0x3FF00288, 0x341A9D63, 0xBE27697D, - 0x34000000, 0x3FF0028C, 0x2788D238, 0xBDF8BF04, - 0x34000000, 0x3FF00290, 0x42A03782, 0x3E2159C1, - 0x34000000, 0x3FF00294, 0x154D4F89, 0x3E32F5B4, - 0x34000000, 0x3FF00298, 0x1D7FB2C1, 0x3E3D4E8A, - 0x38000000, 0x3FF0029C, 0x42181508, 0xBE38489D, - 0x38000000, 0x3FF002A0, 0x0AF2C28C, 0xBE2B9F84, - 0x38000000, 0x3FF002A4, 0x451C5357, 0xBE0A3721, - 0x38000000, 0x3FF002A8, 0x61A8605E, 0x3E1D47F1, - 0x38000000, 0x3FF002AC, 0x81B02FCF, 0x3E31FADF, - 0x38000000, 0x3FF002B0, 0x572F674A, 0x3E3CB3C5, - 0x3C000000, 0x3FF002B4, 0x231795EA, 0xBE388352, - 0x3C000000, 0x3FF002B8, 0xD248367A, 0xBE2B54CD, - 0x3C000000, 0x3FF002BC, 0xB7ABD90D, 0xBE060BC7, - 0x3C000000, 0x3FF002C0, 0x6EE9F1EF, 0x3E206EEF, - 0x3C000000, 0x3FF002C4, 0x261BF09E, 0x3E33406B, - 0x3C000000, 0x3FF002C8, 0x59001C60, 0x3E3E5961, - 0x40000000, 0x3FF002CC, 0xABDDD232, 0xBE367DA5, - 0x40000000, 0x3FF002D0, 0xC8FA5113, 0xBE268953, - 0x40000000, 0x3FF002D4, 0x8B33A701, 0x3D9152CC, - 0x40000000, 0x3FF002D8, 0x3E058570, 0x3E26BAAC, - 0x40000000, 0x3FF002DC, 0x63236E71, 0x3E36C65A, - 0x44000000, 0x3FF002E0, 0x7C7A795C, 0xBE3DC09E, - 0x44000000, 0x3FF002E4, 0x7BD63D1D, 0xBE323794, - 0x44000000, 0x3FF002E8, 0x5BBC9105, 0xBE1A7A1E, - 0x44000000, 0x3FF002EC, 0xD8EE2B1B, 0x3E142A20, - 0x44000000, 0x3FF002F0, 0xEFAA8A8D, 0x3E30C39A, - 0x44000000, 0x3FF002F4, 0x995E96A2, 0x3E3C8CB0, - 0x48000000, 0x3FF002F8, 0xC8A79469, 0xBE379A36, - 0x48000000, 0x3FF002FC, 0x64CE7203, 0xBE276236, - 0x48000000, 0x3FF00300, 0x0819DA68, 0x3DD200D8, - 0x48000000, 0x3FF00304, 0xE5E018D4, 0x3E28A249, - 0x48000000, 0x3FF00308, 0x8A087692, 0x3E386A49, - 0x4C000000, 0x3FF0030C, 0xD695988B, 0xBE3B6C8E, - 0x4C000000, 0x3FF00310, 0x55D2BCBA, 0xBE2E66C8, - 0x4C000000, 0x3FF00314, 0x7790BA7A, 0xBE0751B3, - 0x4C000000, 0x3FF00318, 0xC2A20261, 0x3E22DDF4, - 0x4C000000, 0x3FF0031C, 0x49E0B0B5, 0x3E35D82E, - 0x50000000, 0x3FF00320, 0xB142422E, 0xBE3DAE9A, - 0x50000000, 0x3FF00324, 0x8C170FE6, 0xBE312560, - 0x50000000, 0x3FF00328, 0x0A73BF77, 0xBE12308D, - 0x50000000, 0x3FF0032C, 0x5E59CEFA, 0x3E203A3A, - 0x50000000, 0x3FF00330, 0xCD4740BF, 0x3E34D660, - 0x54000000, 0x3FF00334, 0x644D1883, 0xBE3E6058, - 0x54000000, 0x3FF00338, 0x618F57B6, 0xBE31870E, - 0x54000000, 0x3FF0033C, 0x99FABD0F, 0xBE127704, - 0x54000000, 0x3FF00340, 0xA1CB5ECF, 0x3E20B71E, - 0x54000000, 0x3FF00344, 0x089E93E1, 0x3E3564E3, - 0x58000000, 0x3FF00348, 0xFB533142, 0xBE3D81C5, - 0x58000000, 0x3FF0034C, 0xB6EECE6C, 0xBE30586B, - 0x58000000, 0x3FF00350, 0x319B883E, 0xBE08F871, - 0x58000000, 0x3FF00354, 0x75BF7503, 0x3E2454A5, - 0x58000000, 0x3FF00358, 0xF04B88C5, 0x3E3783B6, - 0x5C000000, 0x3FF0035C, 0x81EF30A7, 0xBE3B12E1, - 0x5C000000, 0x3FF00360, 0x2F9F3657, 0xBE2B32ED, - 0x5C000000, 0x3FF00364, 0x54DF31BC, 0xBDB0084D, - 0x5C000000, 0x3FF00368, 0xC303B7B9, 0x3E2B12D2, - 0x5C000000, 0x3FF0036C, 0x78B56F97, 0x3E3B32DE, - 0x60000000, 0x3FF00370, 0x03B9496C, 0xBE3713A9, - 0x60000000, 0x3FF00374, 0x1F92E726, 0xBE22945A, - 0x60000000, 0x3FF00378, 0x621736DF, 0x3E123D49, - 0x60000000, 0x3FF0037C, 0x3935580D, 0x3E3278D5, - 0x64000000, 0x3FF00380, 0x69B9F5FB, 0xBE3F8DA4, - 0x64000000, 0x3FF00384, 0x8C473CC8, 0xBE31841A, - 0x64000000, 0x3FF00388, 0x538CDE07, 0xBE0B5469, - 0x64000000, 0x3FF0038C, 0x7F8F9D65, 0x3E257E07, - 0x64000000, 0x3FF00390, 0x3665E52B, 0x3E38F898, - 0x68000000, 0x3FF00394, 0xC29674BD, 0xBE38BDCF, - 0x68000000, 0x3FF00398, 0x4E58B4D9, 0xBE24C868, - 0x68000000, 0x3FF0039C, 0x329466D7, 0x3E1015AC, - 0x68000000, 0x3FF003A0, 0xDCDECE44, 0x3E327F0D, - 0x6C000000, 0x3FF003A4, 0xB27E5528, 0xBE3EF74B, - 0x6C000000, 0x3FF003A8, 0x9D7167F2, 0xBE305DA1, - 0x6C000000, 0x3FF003AC, 0xFF980820, 0xBDFB3F3D, - 0x6C000000, 0x3FF003B0, 0x13D49789, 0x3E2A0B7B, - 0x6C000000, 0x3FF003B4, 0xA43AE87C, 0x3E3BCF72, - 0x70000000, 0x3FF003B8, 0x8D06BDC0, 0xBE3556D4, - 0x70000000, 0x3FF003BC, 0x1766E54D, 0xBE19B460, - 0x70000000, 0x3FF003C0, 0x7B85C8BA, 0x3E211950, - 0x70000000, 0x3FF003C4, 0x41D00AED, 0x3E37966C, - 0x74000000, 0x3FF003C8, 0xF5B15507, 0xBE394FCB, - 0x74000000, 0x3FF003CC, 0xC98093C4, 0xBE244C00, - 0x74000000, 0x3FF003D0, 0xE2907BDF, 0x3E144F3B, - 0x74000000, 0x3FF003D4, 0x267CD924, 0x3E345DA2, - 0x78000000, 0x3FF003D8, 0xD73526C0, 0xBE3C4886, - 0x78000000, 0x3FF003DC, 0xF8E1D62E, 0xBE29BD57, - 0x78000000, 0x3FF003E0, 0xD65415E1, 0x3E04D995, - 0x78000000, 0x3FF003E4, 0x527E1A58, 0x3E322515, - 0x7C000000, 0x3FF003E8, 0x31552BA5, 0xBE3E4104, - 0x7C000000, 0x3FF003EC, 0x995CAB3B, 0xBE2D2E33, - 0x7C000000, 0x3FF003F0, 0x473970DC, 0x3DF22D48, - 0x7C000000, 0x3FF003F4, 0xC61195FC, 0x3E30ECC6, - 0x80000000, 0x3FF003F8, 0x03D35C34, 0xBE3F3943, - 0x80000000, 0x3FF003FC, 0xAA7483C7, 0xBE2E9E91, - 0x80000000, 0x3FF00400, 0xBBBC71CE, 0x3DE556AA, - 0x80000000, 0x3FF00404, 0x817613C1, 0x3E30B4B7, - 0x84000000, 0x3FF00408, 0x4E70B0AC, 0xBE3F3142, - 0x84000000, 0x3FF0040C, 0x2BAAD02F, 0xBE2E0E70, - 0x84000000, 0x3FF00410, 0xF48F01F2, 0x3DF32D62, - 0x84000000, 0x3FF00414, 0x84EB5B98, 0x3E317CE8, - 0x88000000, 0x3FF00418, 0x10ED210B, 0xBE3E2901, - 0x88000000, 0x3FF0041C, 0x1C7F0051, 0xBE2B7DCD, - 0x88000000, 0x3FF00420, 0x87AA2706, 0x3E05D9C0, - 0x88000000, 0x3FF00424, 0xD0B235B3, 0x3E33455A, - 0x8C000000, 0x3FF00428, 0x4B07A510, 0xBE3C207E, - 0x8C000000, 0x3FF0042C, 0x7C6E838B, 0xBE26ECA6, - 0x8C000000, 0x3FF00430, 0xEC91A8D5, 0x3E150F6F, - 0x8C000000, 0x3FF00434, 0x650C6A83, 0x3E360E0F, - 0x90000000, 0x3FF00438, 0xFC7E3439, 0xBE3917B8, - 0x90000000, 0x3FF0043C, 0x4AF4C8B6, 0xBE205AFA, - 0x90000000, 0x3FF00440, 0xDC31D181, 0x3E219985, - 0x90000000, 0x3FF00444, 0x423CC2BE, 0x3E39D707, - 0x94000000, 0x3FF00448, 0x250DC5BF, 0xBE350EB0, - 0x94000000, 0x3FF0044C, 0x1E2CF893, 0xBE0F231A, - 0x94000000, 0x3FF00450, 0xD42C92D4, 0x3E2AABDB, - 0x94000000, 0x3FF00454, 0x6887075B, 0x3E3EA043, - 0x98000000, 0x3FF00458, 0xC472509B, 0xBE300562, - 0x98000000, 0x3FF0045C, 0x72B572E0, 0x3DF64FB6, - 0x98000000, 0x3FF00460, 0xEF61155C, 0x3E32DF5D, - 0x9C000000, 0x3FF00464, 0x27CFFE6A, 0xBE3B963B, - 0x9C000000, 0x3FF00468, 0xB4CD96FE, 0xBE23F79F, - 0x9C000000, 0x3FF0046C, 0x6E771F13, 0x3E1EBA7F, - 0x9C000000, 0x3FF00470, 0xFE3ED608, 0x3E396913, - 0xA0000000, 0x3FF00474, 0x6E82850F, 0xBE34CC73, - 0xA0000000, 0x3FF00478, 0x352966B7, 0xBE078FB3, - 0xA0000000, 0x3FF0047C, 0x33AFF8AE, 0x3E2DF116, - 0xA4000000, 0x3FF00480, 0xE909EADD, 0xBE3F0CEE, - 0xA4000000, 0x3FF00484, 0xD6938597, 0xBE2A04C8, - 0xA4000000, 0x3FF00488, 0x5C6654D8, 0x3E1460AA, - 0xA4000000, 0x3FF0048C, 0x22213ECF, 0x3E3742BE, - 0xA8000000, 0x3FF00490, 0xC631A356, 0xBE3682A9, - 0xA8000000, 0x3FF00494, 0x7777B644, 0xBE10E034, - 0xA8000000, 0x3FF00498, 0x3E3B0991, 0x3E2C4528, - 0xAC000000, 0x3FF0049C, 0x0B3E269F, 0xBE3F72C6, - 0xAC000000, 0x3FF004A0, 0x31DF923B, 0xBE29F037, - 0xAC000000, 0x3FF004A4, 0xE82713DE, 0x3E164A4D, - 0xAC000000, 0x3FF004A8, 0x31AFAC4B, 0x3E382D47, - 0xB0000000, 0x3FF004AC, 0x6DFCE978, 0xBE352800, - 0xB0000000, 0x3FF004B0, 0x07D68D27, 0xBE036A1B, - 0xB0000000, 0x3FF004B4, 0x5CB71F6F, 0x3E305D7E, - 0xB4000000, 0x3FF004B8, 0x30E5E990, 0xBE3CC7BB, - 0xB4000000, 0x3FF004BC, 0x0BA17DEA, 0xBE23B9E0, - 0xB4000000, 0x3FF004C0, 0xC3EF9BD8, 0x3E223BBF, - 0xB4000000, 0x3FF004C4, 0x8A74ECC0, 0x3E3C28B4, - 0xB8000000, 0x3FF004C8, 0x085831CA, 0xBE30BC72, - 0xB8000000, 0x3FF004CC, 0x6C8D1FC8, 0x3E037361, - 0xB8000000, 0x3FF004D0, 0x3033A0B8, 0x3E35A94F, - 0xBC000000, 0x3FF004D4, 0xFC7107DE, 0xBE370BC8, - 0xBC000000, 0x3FF004D8, 0xA2D908DA, 0xBE0D86E2, - 0xBC000000, 0x3FF004DC, 0x58ED155E, 0x3E2F742A, - 0xC0000000, 0x3FF004E0, 0x75FACDD0, 0xBE3CCAF4, - 0xC0000000, 0x3FF004E4, 0x6F5BE5D3, 0xBE227FF2, - 0xC0000000, 0x3FF004E8, 0xD6BCA827, 0x3E24B60D, - 0xC0000000, 0x3FF004EC, 0xF72B40D6, 0x3E3E060B, - 0xC4000000, 0x3FF004F0, 0x208BE3E3, 0xBE2C7DD4, - 0xC4000000, 0x3FF004F4, 0x642FDDB8, 0x3E163093, - 0xC4000000, 0x3FF004F8, 0xB72239A5, 0x3E396738, - 0xC8000000, 0x3FF004FC, 0x7201ED9B, 0xBE32ADAE, - 0xC8000000, 0x3FF00500, 0x1A0C05F3, 0x3DF4D6F6, - 0xC8000000, 0x3FF00504, 0x360B8346, 0x3E355892, - 0xCC000000, 0x3FF00508, 0xF0C06435, 0xBE368C45, - 0xCC000000, 0x3FF0050C, 0x760DA2F6, 0xBE0308C8, - 0xCC000000, 0x3FF00510, 0xE008D57B, 0x3E31DA18, - 0xD0000000, 0x3FF00514, 0x205F82F4, 0xBE39DAB0, - 0xD0000000, 0x3FF00518, 0x2FE5E3E3, 0xBE15FDD0, - 0xD0000000, 0x3FF0051C, 0x42787241, 0x3E2DD79A, - 0xD4000000, 0x3FF00520, 0x94BD25F4, 0xBE3C98EC, - 0xD4000000, 0x3FF00524, 0x53C89D03, 0xBE201B42, - 0xD4000000, 0x3FF00528, 0xCB901057, 0x3E291B5E, - 0xD8000000, 0x3FF0052C, 0xE1B6D837, 0xBE3EC6FA, - 0xD8000000, 0x3FF00530, 0xF8BF49E7, 0xBE24173F, - 0xD8000000, 0x3FF00534, 0x339DDB57, 0x3E257F80, - 0xD8000000, 0x3FF00538, 0x64D62C5C, 0x3E3F9B25, - 0xDC000000, 0x3FF0053C, 0x2E913659, 0xBE26F2E0, - 0xDC000000, 0x3FF00540, 0x52E7CB93, 0x3E2303FF, - 0xDC000000, 0x3FF00544, 0xAB0CFEF5, 0x3E3E8D74, - 0xE0000000, 0x3FF00548, 0x1CF7FDE6, 0xBE28AE22, - 0xE0000000, 0x3FF0054C, 0x01B47B93, 0x3E21A8DD, - 0xE0000000, 0x3FF00550, 0x5D1107E2, 0x3E3E0FF3, - 0xE4000000, 0x3FF00554, 0xEBAC99E1, 0xBE294904, - 0xE4000000, 0x3FF00558, 0x184B2814, 0x3E216E1A, - 0xE4000000, 0x3FF0055C, 0xE706008B, 0x3E3E22A1, - 0xE8000000, 0x3FF00560, 0xC267616A, 0xBE28C387, - 0xE8000000, 0x3FF00564, 0x6EF3B008, 0x3E2253B7, - 0xE8000000, 0x3FF00568, 0xB50FF371, 0x3E3EC580, - 0xEC000000, 0x3FF0056C, 0xC8E0096B, 0xBE271DA9, - 0xEC000000, 0x3FF00570, 0xDDF69498, 0x3E2459B5, - 0xEC000000, 0x3FF00574, 0x33533C31, 0x3E3FF890, - 0xF0000000, 0x3FF00578, 0x26CDA497, 0xBE24576A, - 0xF0000000, 0x3FF0057C, 0x3D9CF923, 0x3E278016, - 0xF4000000, 0x3FF00580, 0x320B787B, 0xBE3E442F, - 0xF4000000, 0x3FF00584, 0x03E6A36B, 0xBE2070C8, - 0xF4000000, 0x3FF00588, 0x6630A33F, 0x3E2BC6D9, - 0xF8000000, 0x3FF0058C, 0x0EE72CBF, 0xBE3BF0BD, - 0xF8000000, 0x3FF00590, 0x0FC1A853, 0xBE16D385, - 0xF8000000, 0x3FF00594, 0x17FDFD5D, 0x3E309700, - 0xFC000000, 0x3FF00598, 0xF71A91AC, 0xBE390D18, - 0xFC000000, 0x3FF0059C, 0x69C58B86, 0xBE050963, - 0xFC000000, 0x3FF005A0, 0xB9A504CD, 0x3E33DAC5, - 0x00000000, 0x3FF005A5, 0x7E800734, 0xBE359942, - 0x00000000, 0x3FF005A9, 0xE59934CD, 0x3DF02BAE, - 0x00000000, 0x3FF005AD, 0x04333E0E, 0x3E37AEBE, - 0x04000000, 0x3FF005B1, 0x38F19C2F, 0xBE319539, - 0x04000000, 0x3FF005B5, 0xEBB1C157, 0x3E14DB54, - 0x04000000, 0x3FF005B9, 0x63CED05D, 0x3E3C12E9, - 0x08000000, 0x3FF005BD, 0x74921CAF, 0xBE2A01F9, - 0x08000000, 0x3FF005C1, 0xC94C85F2, 0x3E23F645, - 0x0C000000, 0x3FF005C5, 0xBB61CBEE, 0xBE3EF8B7, - 0x0C000000, 0x3FF005C9, 0x597F2931, 0xBE1F7232, - 0x0C000000, 0x3FF005CD, 0xAF5B7345, 0x3E2E9F48, - 0x10000000, 0x3FF005D1, 0xED37CD5F, 0xBE397424, - 0x10000000, 0x3FF005D5, 0x08775C6B, 0xBE013F43, - 0x10000000, 0x3FF005D9, 0x0029D3DB, 0x3E35345A, - 0x14000000, 0x3FF005DD, 0xC58C1962, 0xBE335F5D, - 0x14000000, 0x3FF005E1, 0x47430E04, 0x3E1073C1, - 0x14000000, 0x3FF005E5, 0x4A41E248, 0x3E3BA944, - 0x18000000, 0x3FF005E9, 0xB06E888E, 0xBE2974C3, - 0x18000000, 0x3FF005ED, 0xDCCD9333, 0x3E25E3FB, - 0x1C000000, 0x3FF005F1, 0x5DE27951, 0xBE3D519C, - 0x1C000000, 0x3FF005F5, 0xE4464502, 0xBE1614C2, - 0x1C000000, 0x3FF005F9, 0xE0DAFE93, 0x3E325740, - 0x20000000, 0x3FF005FD, 0x8C1B4C10, 0xBE35BC47, - 0x20000000, 0x3FF00601, 0x20686CE9, 0x3E0201B0, - 0x20000000, 0x3FF00605, 0x95558B63, 0x3E3A4CB9, - 0x24000000, 0x3FF00609, 0xA880A3EB, 0xBE2B2D79, - 0x24000000, 0x3FF0060D, 0x9699EEB7, 0x3E252BA5, - 0x28000000, 0x3FF00611, 0x880115E1, 0xBE3D2D97, - 0x28000000, 0x3FF00615, 0x28A3D788, 0xBE1383EF, - 0x28000000, 0x3FF00619, 0x08D6DC23, 0x3E337BA6, - 0x2C000000, 0x3FF0061D, 0x0B001A08, 0xBE3417B2, - 0x2C000000, 0x3FF00621, 0xF94EB99A, 0x3E1193EF, - 0x2C000000, 0x3FF00625, 0x28D3BD3B, 0x3E3CF1B0, - 0x30000000, 0x3FF00629, 0x0EFCC982, 0xBE24E32B, - 0x30000000, 0x3FF0062D, 0xE2BDA47F, 0x3E2C7655, - 0x34000000, 0x3FF00631, 0x689312F8, 0xBE39080E, - 0x34000000, 0x3FF00635, 0xA9444DB4, 0xBDCDA0C8, - 0x34000000, 0x3FF00639, 0x7B21FE23, 0x3E38A191, - 0x38000000, 0x3FF0063D, 0x7E67E1E1, 0xBE2CE32A, - 0x38000000, 0x3FF00641, 0x875A71F0, 0x3E251694, - 0x3C000000, 0x3FF00645, 0xF838F455, 0xBE3C67CF, - 0x3C000000, 0x3FF00649, 0x77274052, 0xBE0A571F, - 0x3C000000, 0x3FF0064D, 0x63AAEFA8, 0x3E35E20E, - 0x40000000, 0x3FF00651, 0xFC87DA70, 0xBE30E0F8, - 0x40000000, 0x3FF00655, 0xE9089AFD, 0x3E20D80B, - 0x44000000, 0x3FF00659, 0xC52F03BD, 0xBE3E36F4, - 0x44000000, 0x3FF0065D, 0x9680E14E, 0xBE1327A4, - 0x44000000, 0x3FF00661, 0xD732468D, 0x3E34B328, - 0x48000000, 0x3FF00665, 0xCAB5EF4A, 0xBE31BFBE, - 0x48000000, 0x3FF00669, 0xE2A2FBE1, 0x3E1F757F, - 0x4C000000, 0x3FF0066D, 0xDAB014DA, 0xBE3E757A, - 0x4C000000, 0x3FF00671, 0x02FB3FBB, 0xBE12E13D, - 0x4C000000, 0x3FF00675, 0xCA7E298D, 0x3E3514E2, - 0x50000000, 0x3FF00679, 0xB4F78B94, 0xBE310DE4, - 0x50000000, 0x3FF0067D, 0x89C35D05, 0x3E21BEB4, - 0x54000000, 0x3FF00681, 0x43F4895C, 0xBE3D2360, - 0x54000000, 0x3FF00685, 0x5BC49ADF, 0xBE08B0A2, - 0x54000000, 0x3FF00689, 0x32573159, 0x3E37073E, - 0x58000000, 0x3FF0068D, 0x8D0732D2, 0xBE2D96D1, - 0x58000000, 0x3FF00691, 0x9BF15E67, 0x3E26E3ED, - 0x5C000000, 0x3FF00695, 0x0C3250FB, 0xBE3A40A3, - 0x5C000000, 0x3FF00699, 0xFD0AE214, 0x3DBCC9AE, - 0x5C000000, 0x3FF0069D, 0x038868A1, 0x3E3A8A3D, - 0x60000000, 0x3FF006A1, 0x151D21CE, 0xBE25F092, - 0x60000000, 0x3FF006A5, 0x11738C43, 0x3E2F2A6F, - 0x64000000, 0x3FF006A9, 0x3E9CE96D, 0xBE35CD41, - 0x64000000, 0x3FF006AD, 0x8DBC2918, 0x3E138132, - 0x64000000, 0x3FF006B1, 0x32DF4C13, 0x3E3F9DE1, - 0x68000000, 0x3FF006B5, 0x3129E0B2, 0xBE16520E, - 0x68000000, 0x3FF006B9, 0x69F36A61, 0x3E35491E, - 0x6C000000, 0x3FF006BD, 0xCCCABCD4, 0xBE2F9271, - 0x6C000000, 0x3FF006C1, 0x0D59B899, 0x3E2668ED, - 0x70000000, 0x3FF006C5, 0x4AD435A0, 0xBE39BDD3, - 0x70000000, 0x3FF006C9, 0x9191CABB, 0x3DF5FE9A, - 0x70000000, 0x3FF006CD, 0x6676850B, 0x3E3C8DAD, - 0x74000000, 0x3FF006D1, 0x1D74934A, 0xBE206910, - 0x74000000, 0x3FF006D5, 0x4D886478, 0x3E331949, - 0x78000000, 0x3FF006D9, 0x80BFBBC2, 0xBE3188DE, - 0x78000000, 0x3FF006DD, 0x14DE1719, 0x3E23CA01, - 0x7C000000, 0x3FF006E1, 0x8CE98EC0, 0xBE3A9D19, - 0x7C000000, 0x3FF006E5, 0xA705A6E7, 0x3DEE1A67, - 0x7C000000, 0x3FF006E9, 0xECD5F851, 0x3E3C8EC6, - 0x80000000, 0x3FF006ED, 0xE839CE4D, 0xBE1F0CF9, - 0x80000000, 0x3FF006F1, 0x0C8CA46A, 0x3E33FAC3, - 0x84000000, 0x3FF006F5, 0x7B5703D8, 0xBE303734, - 0x84000000, 0x3FF006F9, 0xE490A112, 0x3E274DB5, - 0x88000000, 0x3FF006FD, 0xA693A093, 0xBE386B0E, - 0x88000000, 0x3FF00701, 0xF0B73DAA, 0x3E0C9875, - 0x88000000, 0x3FF00705, 0x2449A944, 0x3E3FA133, - 0x8C000000, 0x3FF00709, 0xBFE66C14, 0xBE110285, - 0x8C000000, 0x3FF0070D, 0x054EDCBD, 0x3E37ED91, - 0x90000000, 0x3FF00711, 0xEFB65924, 0xBE27A86A, - 0x90000000, 0x3FF00715, 0x1C8A0CF1, 0x3E307A0B, - 0x94000000, 0x3FF00719, 0x397FB1D6, 0xBE3327AD, - 0x94000000, 0x3FF0071D, 0x1412B9FB, 0x3E228D43, - 0x98000000, 0x3FF00721, 0x94D8FFB0, 0xBE3A3B08, - 0x98000000, 0x3FF00725, 0x6ED80040, 0x3E029AA3, - 0x98000000, 0x3FF00729, 0x9627250A, 0x3E3EF1B8, - 0x9C000000, 0x3FF0072D, 0x5FCB1B09, 0xBE117F70, - 0x9C000000, 0x3FF00731, 0x678F0789, 0x3E385E96, - 0xA0000000, 0x3FF00735, 0xCEA3485B, 0xBE25A5DF, - 0xA0000000, 0x3FF00739, 0xFF6D0303, 0x3E320B90, - 0xA4000000, 0x3FF0073D, 0xE03334FF, 0xBE3105E6, - 0xA4000000, 0x3FF00741, 0xFB9F056D, 0x3E27F150, - 0xA8000000, 0x3FF00745, 0xE28905F4, 0xBE36F8C0, - 0xA8000000, 0x3FF00749, 0x0B1407AA, 0x3E189774, - 0xAC000000, 0x3FF0074D, 0xCE4493C4, 0xBE3CAB7D, - 0xAC000000, 0x3FF00751, 0xCB817D78, 0x3DE265D5, - 0xAC000000, 0x3FF00755, 0x7CA8B4E3, 0x3E3DE1E2, - 0xB0000000, 0x3FF00759, 0x7D730FC6, 0xBE12FD89, - 0xB0000000, 0x3FF0075D, 0x1E4D7759, 0x3E38AF60, - 0xB4000000, 0x3FF00761, 0x0CAD84A2, 0xBE23A3AC, - 0xB4000000, 0x3FF00765, 0x36B866FD, 0x3E33BCFB, - 0xB8000000, 0x3FF00769, 0x4D0667A1, 0xBE2D4858, - 0xB8000000, 0x3FF0076D, 0xCBF08E6A, 0x3E2E1567, - 0xBC000000, 0x3FF00771, 0x9FD34D05, 0xBE333664, - 0xBC000000, 0x3FF00775, 0x9837D6E0, 0x3E253114, - 0xC0000000, 0x3FF00779, 0x5238327D, 0xBE37887F, - 0xC0000000, 0x3FF0077D, 0x24C8DC90, 0x3E1999FA, - 0xC4000000, 0x3FF00781, 0x1DA2F8BE, 0xBE3B9A7C, - 0xC4000000, 0x3FF00785, 0xEA50EE6A, 0x3E03A485, - 0xC8000000, 0x3FF00789, 0xE204A449, 0xBE3F6C5A, - 0xC8000000, 0x3FF0078D, 0x78D5D0F3, 0xBDF3D3EF, - 0xC8000000, 0x3FF00791, 0x80B1D66C, 0x3E3D01E4, - 0xCC000000, 0x3FF00795, 0xD5149796, 0xBE12BBC1, - 0xCC000000, 0x3FF00799, 0x2A8F92F0, 0x3E39B042, - 0xD0000000, 0x3FF0079D, 0x6F386487, 0xBE1F820E, - 0xD0000000, 0x3FF007A1, 0x3BA3BCDA, 0x3E369EBE, - 0xD4000000, 0x3FF007A5, 0x96320652, 0xBE25A3F0, - 0xD4000000, 0x3FF007A9, 0xD3FD8FCA, 0x3E33CD58, - 0xD8000000, 0x3FF007AD, 0xC62D40B1, 0xBE2B069C, - 0xD8000000, 0x3FF007B1, 0x13AC5766, 0x3E313C12, - 0xDC000000, 0x3FF007B5, 0x876F3A0B, 0xBE2FE90B, - 0xDC000000, 0x3FF007B9, 0x357EDEB8, 0x3E2DD5D4, - 0xE0000000, 0x3FF007BD, 0x4CEC957E, 0xBE32259E, - 0xE0000000, 0x3FF007C1, 0x128C86C6, 0x3E29B3C2, - 0xE4000000, 0x3FF007C5, 0xDEA61608, 0xBE341697, - 0xE4000000, 0x3FF007C9, 0xFEA09E70, 0x3E2611ED, - 0xE8000000, 0x3FF007CD, 0x58D49AE3, 0xBE35C772, - 0xE8000000, 0x3FF007D1, 0x39DA3D42, 0x3E22F058, - 0xEC000000, 0x3FF007D5, 0x9B689043, 0xBE37382D, - 0xEC000000, 0x3FF007D9, 0x04589AD6, 0x3E204F01, - 0xF0000000, 0x3FF007DD, 0x86525259, 0xBE3868C9, - 0xF0000000, 0x3FF007E1, 0x3C761DAC, 0x3E1C5BD1, - 0xF4000000, 0x3FF007E5, 0xF9822D4C, 0xBE395945, - 0xF4000000, 0x3FF007E9, 0x8F4221F9, 0x3E191A1E, - 0xF8000000, 0x3FF007ED, 0xD4E85D3A, 0xBE3A09A2, - 0xF8000000, 0x3FF007F1, 0x81547225, 0x3E16D8EA, - 0xFC000000, 0x3FF007F5, 0xF8750E3B, 0xBE3A79DF, - 0xFC000000, 0x3FF007F9, 0x92EC7DE3, 0x3E159835, - 0x00000000, 0x3FF007FE, 0x44185C5D, 0xBE3AA9FD } }; - -#endif -#endif diff --git a/sysdeps/ieee754/dbl-64/ulog.h b/sysdeps/ieee754/dbl-64/ulog.h deleted file mode 100644 index e5fbad044e..0000000000 --- a/sysdeps/ieee754/dbl-64/ulog.h +++ /dev/null @@ -1,187 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/******************************************************************/ -/* */ -/* MODULE_NAME:ulog.h */ -/* */ -/* common data and variables prototype and definition */ -/******************************************************************/ - -#ifndef ULOG_H -#define ULOG_H - -#ifdef BIG_ENDI - static const number - /* polynomial I */ -/**/ a2 = {{0xbfe00000, 0x0001aa8f} }, /* -0.500... */ -/**/ a3 = {{0x3fd55555, 0x55588d2e} }, /* 0.333... */ - /* polynomial II */ -/**/ b0 = {{0x3fd55555, 0x55555555} }, /* 0.333... */ -/**/ b1 = {{0xbfcfffff, 0xffffffbb} }, /* -0.249... */ -/**/ b2 = {{0x3fc99999, 0x9999992f} }, /* 0.199... */ -/**/ b3 = {{0xbfc55555, 0x556503fd} }, /* -0.166... */ -/**/ b4 = {{0x3fc24924, 0x925b3d62} }, /* 0.142... */ -/**/ b5 = {{0xbfbffffe, 0x160472fc} }, /* -0.124... */ -/**/ b6 = {{0x3fbc71c5, 0x25db58ac} }, /* 0.111... */ -/**/ b7 = {{0xbfb9a4ac, 0x11a2a61c} }, /* -0.100... */ -/**/ b8 = {{0x3fb75077, 0x0df2b591} }, /* 0.091... */ - /* polynomial III */ -#if 0 -/**/ c1 = {{0x3ff00000, 0x00000000} }, /* 1 */ -#endif -/**/ c2 = {{0xbfe00000, 0x00000000} }, /* -1/2 */ -/**/ c3 = {{0x3fd55555, 0x55555555} }, /* 1/3 */ -/**/ c4 = {{0xbfd00000, 0x00000000} }, /* -1/4 */ -/**/ c5 = {{0x3fc99999, 0x9999999a} }, /* 1/5 */ - /* polynomial IV */ -/**/ d2 = {{0xbfe00000, 0x00000000} }, /* -1/2 */ -/**/ dd2 = {{0x00000000, 0x00000000} }, /* -1/2-d2 */ -/**/ d3 = {{0x3fd55555, 0x55555555} }, /* 1/3 */ -/**/ dd3 = {{0x3c755555, 0x55555555} }, /* 1/3-d3 */ -/**/ d4 = {{0xbfd00000, 0x00000000} }, /* -1/4 */ -/**/ dd4 = {{0x00000000, 0x00000000} }, /* -1/4-d4 */ -/**/ d5 = {{0x3fc99999, 0x9999999a} }, /* 1/5 */ -/**/ dd5 = {{0xbc699999, 0x9999999a} }, /* 1/5-d5 */ -/**/ d6 = {{0xbfc55555, 0x55555555} }, /* -1/6 */ -/**/ dd6 = {{0xbc655555, 0x55555555} }, /* -1/6-d6 */ -/**/ d7 = {{0x3fc24924, 0x92492492} }, /* 1/7 */ -/**/ dd7 = {{0x3c624924, 0x92492492} }, /* 1/7-d7 */ -/**/ d8 = {{0xbfc00000, 0x00000000} }, /* -1/8 */ -/**/ dd8 = {{0x00000000, 0x00000000} }, /* -1/8-d8 */ -/**/ d9 = {{0x3fbc71c7, 0x1c71c71c} }, /* 1/9 */ -/**/ dd9 = {{0x3c5c71c7, 0x1c71c71c} }, /* 1/9-d9 */ -/**/ d10 = {{0xbfb99999, 0x9999999a} }, /* -1/10 */ -/**/ dd10 = {{0x3c599999, 0x9999999a} }, /* -1/10-d10 */ -/**/ d11 = {{0x3fb745d1, 0x745d1746} }, /* 1/11 */ -/**/ d12 = {{0xbfb55555, 0x55555555} }, /* -1/12 */ -/**/ d13 = {{0x3fb3b13b, 0x13b13b14} }, /* 1/13 */ -/**/ d14 = {{0xbfb24924, 0x92492492} }, /* -1/14 */ -/**/ d15 = {{0x3fb11111, 0x11111111} }, /* 1/15 */ -/**/ d16 = {{0xbfb00000, 0x00000000} }, /* -1/16 */ -/**/ d17 = {{0x3fae1e1e, 0x1e1e1e1e} }, /* 1/17 */ -/**/ d18 = {{0xbfac71c7, 0x1c71c71c} }, /* -1/18 */ -/**/ d19 = {{0x3faaf286, 0xbca1af28} }, /* 1/19 */ -/**/ d20 = {{0xbfa99999, 0x9999999a} }, /* -1/20 */ - /* constants */ -/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc} }, /* sqrt(2) */ -/**/ h1 = {{0x3fd2e000, 0x00000000} }, /* 151/2**9 */ -/**/ h2 = {{0x3f669000, 0x00000000} }, /* 361/2**17 */ -/**/ delu = {{0x3f700000, 0x00000000} }, /* 1/2**8 */ -/**/ delv = {{0x3ef00000, 0x00000000} }, /* 1/2**16 */ -/**/ ln2a = {{0x3fe62e42, 0xfefa3800} }, /* ln(2) 43 bits */ -/**/ ln2b = {{0x3d2ef357, 0x93c76730} }, /* ln(2)-ln2a */ -/**/ e1 = {{0x3bbcc868, 0x00000000} }, /* 6.095e-21 */ -/**/ e2 = {{0x3c1138ce, 0x00000000} }, /* 2.334e-19 */ -/**/ e3 = {{0x3aa1565d, 0x00000000} }, /* 2.801e-26 */ -/**/ e4 = {{0x39809d88, 0x00000000} }, /* 1.024e-31 */ -/**/ e[M] ={{{0x37da223a, 0x00000000} }, /* 1.2e-39 */ -/**/ {{0x35c851c4, 0x00000000} }, /* 1.3e-49 */ -/**/ {{0x2ab85e51, 0x00000000} }, /* 6.8e-103 */ -/**/ {{0x17383827, 0x00000000} }},/* 8.1e-197 */ -/**/ two54 = {{0x43500000, 0x00000000} }, /* 2**54 */ -/**/ u03 = {{0x3f9eb851, 0xeb851eb8} }; /* 0.03 */ - -#else -#ifdef LITTLE_ENDI - static const number - /* polynomial I */ -/**/ a2 = {{0x0001aa8f, 0xbfe00000} }, /* -0.500... */ -/**/ a3 = {{0x55588d2e, 0x3fd55555} }, /* 0.333... */ - /* polynomial II */ -/**/ b0 = {{0x55555555, 0x3fd55555} }, /* 0.333... */ -/**/ b1 = {{0xffffffbb, 0xbfcfffff} }, /* -0.249... */ -/**/ b2 = {{0x9999992f, 0x3fc99999} }, /* 0.199... */ -/**/ b3 = {{0x556503fd, 0xbfc55555} }, /* -0.166... */ -/**/ b4 = {{0x925b3d62, 0x3fc24924} }, /* 0.142... */ -/**/ b5 = {{0x160472fc, 0xbfbffffe} }, /* -0.124... */ -/**/ b6 = {{0x25db58ac, 0x3fbc71c5} }, /* 0.111... */ -/**/ b7 = {{0x11a2a61c, 0xbfb9a4ac} }, /* -0.100... */ -/**/ b8 = {{0x0df2b591, 0x3fb75077} }, /* 0.091... */ - /* polynomial III */ -#if 0 -/**/ c1 = {{0x00000000, 0x3ff00000} }, /* 1 */ -#endif -/**/ c2 = {{0x00000000, 0xbfe00000} }, /* -1/2 */ -/**/ c3 = {{0x55555555, 0x3fd55555} }, /* 1/3 */ -/**/ c4 = {{0x00000000, 0xbfd00000} }, /* -1/4 */ -/**/ c5 = {{0x9999999a, 0x3fc99999} }, /* 1/5 */ - /* polynomial IV */ -/**/ d2 = {{0x00000000, 0xbfe00000} }, /* -1/2 */ -/**/ dd2 = {{0x00000000, 0x00000000} }, /* -1/2-d2 */ -/**/ d3 = {{0x55555555, 0x3fd55555} }, /* 1/3 */ -/**/ dd3 = {{0x55555555, 0x3c755555} }, /* 1/3-d3 */ -/**/ d4 = {{0x00000000, 0xbfd00000} }, /* -1/4 */ -/**/ dd4 = {{0x00000000, 0x00000000} }, /* -1/4-d4 */ -/**/ d5 = {{0x9999999a, 0x3fc99999} }, /* 1/5 */ -/**/ dd5 = {{0x9999999a, 0xbc699999} }, /* 1/5-d5 */ -/**/ d6 = {{0x55555555, 0xbfc55555} }, /* -1/6 */ -/**/ dd6 = {{0x55555555, 0xbc655555} }, /* -1/6-d6 */ -/**/ d7 = {{0x92492492, 0x3fc24924} }, /* 1/7 */ -/**/ dd7 = {{0x92492492, 0x3c624924} }, /* 1/7-d7 */ -/**/ d8 = {{0x00000000, 0xbfc00000} }, /* -1/8 */ -/**/ dd8 = {{0x00000000, 0x00000000} }, /* -1/8-d8 */ -/**/ d9 = {{0x1c71c71c, 0x3fbc71c7} }, /* 1/9 */ -/**/ dd9 = {{0x1c71c71c, 0x3c5c71c7} }, /* 1/9-d9 */ -/**/ d10 = {{0x9999999a, 0xbfb99999} }, /* -1/10 */ -/**/ dd10 = {{0x9999999a, 0x3c599999} }, /* -1/10-d10 */ -/**/ d11 = {{0x745d1746, 0x3fb745d1} }, /* 1/11 */ -/**/ d12 = {{0x55555555, 0xbfb55555} }, /* -1/12 */ -/**/ d13 = {{0x13b13b14, 0x3fb3b13b} }, /* 1/13 */ -/**/ d14 = {{0x92492492, 0xbfb24924} }, /* -1/14 */ -/**/ d15 = {{0x11111111, 0x3fb11111} }, /* 1/15 */ -/**/ d16 = {{0x00000000, 0xbfb00000} }, /* -1/16 */ -/**/ d17 = {{0x1e1e1e1e, 0x3fae1e1e} }, /* 1/17 */ -/**/ d18 = {{0x1c71c71c, 0xbfac71c7} }, /* -1/18 */ -/**/ d19 = {{0xbca1af28, 0x3faaf286} }, /* 1/19 */ -/**/ d20 = {{0x9999999a, 0xbfa99999} }, /* -1/20 */ - /* constants */ -/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e} }, /* sqrt(2) */ -/**/ h1 = {{0x00000000, 0x3fd2e000} }, /* 151/2**9 */ -/**/ h2 = {{0x00000000, 0x3f669000} }, /* 361/2**17 */ -/**/ delu = {{0x00000000, 0x3f700000} }, /* 1/2**8 */ -/**/ delv = {{0x00000000, 0x3ef00000} }, /* 1/2**16 */ -/**/ ln2a = {{0xfefa3800, 0x3fe62e42} }, /* ln(2) 43 bits */ -/**/ ln2b = {{0x93c76730, 0x3d2ef357} }, /* ln(2)-ln2a */ -/**/ e1 = {{0x00000000, 0x3bbcc868} }, /* 6.095e-21 */ -/**/ e2 = {{0x00000000, 0x3c1138ce} }, /* 2.334e-19 */ -/**/ e3 = {{0x00000000, 0x3aa1565d} }, /* 2.801e-26 */ -/**/ e4 = {{0x00000000, 0x39809d88} }, /* 1.024e-31 */ -/**/ e[M] ={{{0x00000000, 0x37da223a} }, /* 1.2e-39 */ -/**/ {{0x00000000, 0x35c851c4} }, /* 1.3e-49 */ -/**/ {{0x00000000, 0x2ab85e51} }, /* 6.8e-103 */ -/**/ {{0x00000000, 0x17383827} }},/* 8.1e-197 */ -/**/ two54 = {{0x00000000, 0x43500000} }, /* 2**54 */ -/**/ u03 = {{0xeb851eb8, 0x3f9eb851} }; /* 0.03 */ - -#endif -#endif - -#define SQRT_2 sqrt_2.d -#define DEL_U delu.d -#define DEL_V delv.d -#define LN2A ln2a.d -#define LN2B ln2b.d -#define E1 e1.d -#define E2 e2.d -#define E3 e3.d -#define E4 e4.d -#define U03 u03.d - -#endif diff --git a/sysdeps/ieee754/dbl-64/ulog.tbl b/sysdeps/ieee754/dbl-64/ulog.tbl deleted file mode 100644 index 8714ea3a6a..0000000000 --- a/sysdeps/ieee754/dbl-64/ulog.tbl +++ /dev/null @@ -1,3326 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/****************************************************************/ -/* TABLES FOR THE ulog() FUNCTION */ -/****************************************************************/ - -#ifdef BIG_ENDI - static const number - Iu[182] = { /* 1/ui */ -/**/ {{0x3ff6a13c, 0xd1537290} }, -/**/ {{0x3ff68168, 0x16816817} }, -/**/ {{0x3ff661ec, 0x6a5122f9} }, -/**/ {{0x3ff642c8, 0x590b2164} }, -/**/ {{0x3ff623fa, 0x77016240} }, -/**/ {{0x3ff60581, 0x60581606} }, -/**/ {{0x3ff5e75b, 0xb8d015e7} }, -/**/ {{0x3ff5c988, 0x2b931057} }, -/**/ {{0x3ff5ac05, 0x6b015ac0} }, -/**/ {{0x3ff58ed2, 0x308158ed} }, -/**/ {{0x3ff571ed, 0x3c506b3a} }, -/**/ {{0x3ff55555, 0x55555555} }, -/**/ {{0x3ff53909, 0x48f40feb} }, -/**/ {{0x3ff51d07, 0xeae2f815} }, -/**/ {{0x3ff50150, 0x15015015} }, -/**/ {{0x3ff4e5e0, 0xa72f0539} }, -/**/ {{0x3ff4cab8, 0x8725af6e} }, -/**/ {{0x3ff4afd6, 0xa052bf5b} }, -/**/ {{0x3ff49539, 0xe3b2d067} }, -/**/ {{0x3ff47ae1, 0x47ae147b} }, -/**/ {{0x3ff460cb, 0xc7f5cf9a} }, -/**/ {{0x3ff446f8, 0x6562d9fb} }, -/**/ {{0x3ff42d66, 0x25d51f87} }, -/**/ {{0x3ff41414, 0x14141414} }, -/**/ {{0x3ff3fb01, 0x3fb013fb} }, -/**/ {{0x3ff3e22c, 0xbce4a902} }, -/**/ {{0x3ff3c995, 0xa47babe7} }, -/**/ {{0x3ff3b13b, 0x13b13b14} }, -/**/ {{0x3ff3991c, 0x2c187f63} }, -/**/ {{0x3ff38138, 0x13813814} }, -/**/ {{0x3ff3698d, 0xf3de0748} }, -/**/ {{0x3ff3521c, 0xfb2b78c1} }, -/**/ {{0x3ff33ae4, 0x5b57bcb2} }, -/**/ {{0x3ff323e3, 0x4a2b10bf} }, -/**/ {{0x3ff30d19, 0x0130d190} }, -/**/ {{0x3ff2f684, 0xbda12f68} }, -/**/ {{0x3ff2e025, 0xc04b8097} }, -/**/ {{0x3ff2c9fb, 0x4d812ca0} }, -/**/ {{0x3ff2b404, 0xad012b40} }, -/**/ {{0x3ff29e41, 0x29e4129e} }, -/**/ {{0x3ff288b0, 0x1288b013} }, -/**/ {{0x3ff27350, 0xb8812735} }, -/**/ {{0x3ff25e22, 0x708092f1} }, -/**/ {{0x3ff24924, 0x92492492} }, -/**/ {{0x3ff23456, 0x789abcdf} }, -/**/ {{0x3ff21fb7, 0x8121fb78} }, -/**/ {{0x3ff20b47, 0x0c67c0d9} }, -/**/ {{0x3ff1f704, 0x7dc11f70} }, -/**/ {{0x3ff1e2ef, 0x3b3fb874} }, -/**/ {{0x3ff1cf06, 0xada2811d} }, -/**/ {{0x3ff1bb4a, 0x4046ed29} }, -/**/ {{0x3ff1a7b9, 0x611a7b96} }, -/**/ {{0x3ff19453, 0x808ca29c} }, -/**/ {{0x3ff18118, 0x11811812} }, -/**/ {{0x3ff16e06, 0x89427379} }, -/**/ {{0x3ff15b1e, 0x5f75270d} }, -/**/ {{0x3ff1485f, 0x0e0acd3b} }, -/**/ {{0x3ff135c8, 0x1135c811} }, -/**/ {{0x3ff12358, 0xe75d3033} }, -/**/ {{0x3ff11111, 0x11111111} }, -/**/ {{0x3ff0fef0, 0x10fef011} }, -/**/ {{0x3ff0ecf5, 0x6be69c90} }, -/**/ {{0x3ff0db20, 0xa88f4696} }, -/**/ {{0x3ff0c971, 0x4fbcda3b} }, -/**/ {{0x3ff0b7e6, 0xec259dc8} }, -/**/ {{0x3ff0a681, 0x0a6810a7} }, -/**/ {{0x3ff0953f, 0x39010954} }, -/**/ {{0x3ff08421, 0x08421084} }, -/**/ {{0x3ff07326, 0x0a47f7c6} }, -/**/ {{0x3ff0624d, 0xd2f1a9fc} }, -/**/ {{0x3ff05197, 0xf7d73404} }, -/**/ {{0x3ff04104, 0x10410410} }, -/**/ {{0x3ff03091, 0xb51f5e1a} }, -/**/ {{0x3ff02040, 0x81020408} }, -/**/ {{0x3ff01010, 0x10101010} }, -/**/ {{0x3ff00000, 0x00000000} }, -/**/ {{0x3fefe01f, 0xe01fe020} }, -/**/ {{0x3fefc07f, 0x01fc07f0} }, -/**/ {{0x3fefa11c, 0xaa01fa12} }, -/**/ {{0x3fef81f8, 0x1f81f820} }, -/**/ {{0x3fef6310, 0xaca0dbb5} }, -/**/ {{0x3fef4465, 0x9e4a4271} }, -/**/ {{0x3fef25f6, 0x44230ab5} }, -/**/ {{0x3fef07c1, 0xf07c1f08} }, -/**/ {{0x3feee9c7, 0xf8458e02} }, -/**/ {{0x3feecc07, 0xb301ecc0} }, -/**/ {{0x3feeae80, 0x7aba01eb} }, -/**/ {{0x3fee9131, 0xabf0b767} }, -/**/ {{0x3fee741a, 0xa59750e4} }, -/**/ {{0x3fee573a, 0xc901e574} }, -/**/ {{0x3fee3a91, 0x79dc1a73} }, -/**/ {{0x3fee1e1e, 0x1e1e1e1e} }, -/**/ {{0x3fee01e0, 0x1e01e01e} }, -/**/ {{0x3fede5d6, 0xe3f8868a} }, -/**/ {{0x3fedca01, 0xdca01dca} }, -/**/ {{0x3fedae60, 0x76b981db} }, -/**/ {{0x3fed92f2, 0x231e7f8a} }, -/**/ {{0x3fed77b6, 0x54b82c34} }, -/**/ {{0x3fed5cac, 0x807572b2} }, -/**/ {{0x3fed41d4, 0x1d41d41d} }, -/**/ {{0x3fed272c, 0xa3fc5b1a} }, -/**/ {{0x3fed0cb5, 0x8f6ec074} }, -/**/ {{0x3fecf26e, 0x5c44bfc6} }, -/**/ {{0x3fecd856, 0x89039b0b} }, -/**/ {{0x3fecbe6d, 0x9601cbe7} }, -/**/ {{0x3feca4b3, 0x055ee191} }, -/**/ {{0x3fec8b26, 0x5afb8a42} }, -/**/ {{0x3fec71c7, 0x1c71c71c} }, -/**/ {{0x3fec5894, 0xd10d4986} }, -/**/ {{0x3fec3f8f, 0x01c3f8f0} }, -/**/ {{0x3fec26b5, 0x392ea01c} }, -/**/ {{0x3fec0e07, 0x0381c0e0} }, -/**/ {{0x3febf583, 0xee868d8b} }, -/**/ {{0x3febdd2b, 0x899406f7} }, -/**/ {{0x3febc4fd, 0x65883e7b} }, -/**/ {{0x3febacf9, 0x14c1bad0} }, -/**/ {{0x3feb951e, 0x2b18ff23} }, -/**/ {{0x3feb7d6c, 0x3dda338b} }, -/**/ {{0x3feb65e2, 0xe3beee05} }, -/**/ {{0x3feb4e81, 0xb4e81b4f} }, -/**/ {{0x3feb3748, 0x4ad806ce} }, -/**/ {{0x3feb2036, 0x406c80d9} }, -/**/ {{0x3feb094b, 0x31d922a4} }, -/**/ {{0x3feaf286, 0xbca1af28} }, -/**/ {{0x3feadbe8, 0x7f94905e} }, -/**/ {{0x3feac570, 0x1ac5701b} }, -/**/ {{0x3feaaf1d, 0x2f87ebfd} }, -/**/ {{0x3fea98ef, 0x606a63be} }, -/**/ {{0x3fea82e6, 0x5130e159} }, -/**/ {{0x3fea6d01, 0xa6d01a6d} }, -/**/ {{0x3fea5741, 0x07688a4a} }, -/**/ {{0x3fea41a4, 0x1a41a41a} }, -/**/ {{0x3fea2c2a, 0x87c51ca0} }, -/**/ {{0x3fea16d3, 0xf97a4b02} }, -/**/ {{0x3fea01a0, 0x1a01a01a} }, -/**/ {{0x3fe9ec8e, 0x951033d9} }, -/**/ {{0x3fe9d79f, 0x176b682d} }, -/**/ {{0x3fe9c2d1, 0x4ee4a102} }, -/**/ {{0x3fe9ae24, 0xea5510da} }, -/**/ {{0x3fe99999, 0x9999999a} }, -/**/ {{0x3fe9852f, 0x0d8ec0ff} }, -/**/ {{0x3fe970e4, 0xf80cb872} }, -/**/ {{0x3fe95cbb, 0x0be377ae} }, -/**/ {{0x3fe948b0, 0xfcd6e9e0} }, -/**/ {{0x3fe934c6, 0x7f9b2ce6} }, -/**/ {{0x3fe920fb, 0x49d0e229} }, -/**/ {{0x3fe90d4f, 0x120190d5} }, -/**/ {{0x3fe8f9c1, 0x8f9c18fa} }, -/**/ {{0x3fe8e652, 0x7af1373f} }, -/**/ {{0x3fe8d301, 0x8d3018d3} }, -/**/ {{0x3fe8bfce, 0x8062ff3a} }, -/**/ {{0x3fe8acb9, 0x0f6bf3aa} }, -/**/ {{0x3fe899c0, 0xf601899c} }, -/**/ {{0x3fe886e5, 0xf0abb04a} }, -/**/ {{0x3fe87427, 0xbcc092b9} }, -/**/ {{0x3fe86186, 0x18618618} }, -/**/ {{0x3fe84f00, 0xc2780614} }, -/**/ {{0x3fe83c97, 0x7ab2bedd} }, -/**/ {{0x3fe82a4a, 0x0182a4a0} }, -/**/ {{0x3fe81818, 0x18181818} }, -/**/ {{0x3fe80601, 0x80601806} }, -/**/ {{0x3fe7f405, 0xfd017f40} }, -/**/ {{0x3fe7e225, 0x515a4f1d} }, -/**/ {{0x3fe7d05f, 0x417d05f4} }, -/**/ {{0x3fe7beb3, 0x922e017c} }, -/**/ {{0x3fe7ad22, 0x08e0ecc3} }, -/**/ {{0x3fe79baa, 0x6bb6398b} }, -/**/ {{0x3fe78a4c, 0x8178a4c8} }, -/**/ {{0x3fe77908, 0x119ac60d} }, -/**/ {{0x3fe767dc, 0xe434a9b1} }, -/**/ {{0x3fe756ca, 0xc201756d} }, -/**/ {{0x3fe745d1, 0x745d1746} }, -/**/ {{0x3fe734f0, 0xc541fe8d} }, -/**/ {{0x3fe72428, 0x7f46debc} }, -/**/ {{0x3fe71378, 0x6d9c7c09} }, -/**/ {{0x3fe702e0, 0x5c0b8170} }, -/**/ {{0x3fe6f260, 0x16f26017} }, -/**/ {{0x3fe6e1f7, 0x6b4337c7} }, -/**/ {{0x3fe6d1a6, 0x2681c861} }, -/**/ {{0x3fe6c16c, 0x16c16c17} }, -/**/ {{0x3fe6b149, 0x0aa31a3d} }, -/**/ {{0x3fe6a13c, 0xd1537290} }, - }; - - static const number - Iv[362] = { /* 1/vj */ -/**/ {{0x3ff00b47, 0xee93bfe3} }, -/**/ {{0x3ff00b37, 0xd80c106f} }, -/**/ {{0x3ff00b27, 0xc1a4a47a} }, -/**/ {{0x3ff00b17, 0xab5d7ba2} }, -/**/ {{0x3ff00b07, 0x95369587} }, -/**/ {{0x3ff00af7, 0x7f2ff1c6} }, -/**/ {{0x3ff00ae7, 0x69499000} }, -/**/ {{0x3ff00ad7, 0x53836fd3} }, -/**/ {{0x3ff00ac7, 0x3ddd90dd} }, -/**/ {{0x3ff00ab7, 0x2857f2bf} }, -/**/ {{0x3ff00aa7, 0x12f29517} }, -/**/ {{0x3ff00a96, 0xfdad7784} }, -/**/ {{0x3ff00a86, 0xe88899a5} }, -/**/ {{0x3ff00a76, 0xd383fb19} }, -/**/ {{0x3ff00a66, 0xbe9f9b7f} }, -/**/ {{0x3ff00a56, 0xa9db7a76} }, -/**/ {{0x3ff00a46, 0x9537979d} }, -/**/ {{0x3ff00a36, 0x80b3f293} }, -/**/ {{0x3ff00a26, 0x6c508af8} }, -/**/ {{0x3ff00a16, 0x580d606a} }, -/**/ {{0x3ff00a06, 0x43ea7288} }, -/**/ {{0x3ff009f6, 0x2fe7c0f1} }, -/**/ {{0x3ff009e6, 0x1c054b44} }, -/**/ {{0x3ff009d6, 0x08431122} }, -/**/ {{0x3ff009c5, 0xf4a11227} }, -/**/ {{0x3ff009b5, 0xe11f4df4} }, -/**/ {{0x3ff009a5, 0xcdbdc428} }, -/**/ {{0x3ff00995, 0xba7c7462} }, -/**/ {{0x3ff00985, 0xa75b5e40} }, -/**/ {{0x3ff00975, 0x945a8162} }, -/**/ {{0x3ff00965, 0x8179dd68} }, -/**/ {{0x3ff00955, 0x6eb971ef} }, -/**/ {{0x3ff00945, 0x5c193e98} }, -/**/ {{0x3ff00935, 0x49994301} }, -/**/ {{0x3ff00925, 0x37397eca} }, -/**/ {{0x3ff00915, 0x24f9f192} }, -/**/ {{0x3ff00905, 0x12da9af7} }, -/**/ {{0x3ff008f5, 0x00db7a99} }, -/**/ {{0x3ff008e4, 0xeefc9018} }, -/**/ {{0x3ff008d4, 0xdd3ddb12} }, -/**/ {{0x3ff008c4, 0xcb9f5b26} }, -/**/ {{0x3ff008b4, 0xba210ff4} }, -/**/ {{0x3ff008a4, 0xa8c2f91a} }, -/**/ {{0x3ff00894, 0x97851639} }, -/**/ {{0x3ff00884, 0x866766ef} }, -/**/ {{0x3ff00874, 0x7569eadb} }, -/**/ {{0x3ff00864, 0x648ca19d} }, -/**/ {{0x3ff00854, 0x53cf8ad3} }, -/**/ {{0x3ff00844, 0x4332a61e} }, -/**/ {{0x3ff00834, 0x32b5f31b} }, -/**/ {{0x3ff00824, 0x2259716c} }, -/**/ {{0x3ff00814, 0x121d20ad} }, -/**/ {{0x3ff00804, 0x02010080} }, -/**/ {{0x3ff007f3, 0xf2051083} }, -/**/ {{0x3ff007e3, 0xe2295056} }, -/**/ {{0x3ff007d3, 0xd26dbf97} }, -/**/ {{0x3ff007c3, 0xc2d25de5} }, -/**/ {{0x3ff007b3, 0xb3572ae2} }, -/**/ {{0x3ff007a3, 0xa3fc262a} }, -/**/ {{0x3ff00793, 0x94c14f5f} }, -/**/ {{0x3ff00783, 0x85a6a61e} }, -/**/ {{0x3ff00773, 0x76ac2a08} }, -/**/ {{0x3ff00763, 0x67d1dabb} }, -/**/ {{0x3ff00753, 0x5917b7d7} }, -/**/ {{0x3ff00743, 0x4a7dc0fb} }, -/**/ {{0x3ff00733, 0x3c03f5c7} }, -/**/ {{0x3ff00723, 0x2daa55da} }, -/**/ {{0x3ff00713, 0x1f70e0d3} }, -/**/ {{0x3ff00703, 0x11579652} }, -/**/ {{0x3ff006f3, 0x035e75f5} }, -/**/ {{0x3ff006e2, 0xf5857f5d} }, -/**/ {{0x3ff006d2, 0xe7ccb228} }, -/**/ {{0x3ff006c2, 0xda340df6} }, -/**/ {{0x3ff006b2, 0xccbb9266} }, -/**/ {{0x3ff006a2, 0xbf633f18} }, -/**/ {{0x3ff00692, 0xb22b13ab} }, -/**/ {{0x3ff00682, 0xa5130fbe} }, -/**/ {{0x3ff00672, 0x981b32f1} }, -/**/ {{0x3ff00662, 0x8b437ce4} }, -/**/ {{0x3ff00652, 0x7e8bed35} }, -/**/ {{0x3ff00642, 0x71f48383} }, -/**/ {{0x3ff00632, 0x657d3f70} }, -/**/ {{0x3ff00622, 0x59262098} }, -/**/ {{0x3ff00612, 0x4cef269e} }, -/**/ {{0x3ff00602, 0x40d8511e} }, -/**/ {{0x3ff005f2, 0x34e19fba} }, -/**/ {{0x3ff005e2, 0x290b1211} }, -/**/ {{0x3ff005d2, 0x1d54a7c1} }, -/**/ {{0x3ff005c2, 0x11be606b} }, -/**/ {{0x3ff005b2, 0x06483bad} }, -/**/ {{0x3ff005a1, 0xfaf23928} }, -/**/ {{0x3ff00591, 0xefbc587b} }, -/**/ {{0x3ff00581, 0xe4a69945} }, -/**/ {{0x3ff00571, 0xd9b0fb25} }, -/**/ {{0x3ff00561, 0xcedb7dbc} }, -/**/ {{0x3ff00551, 0xc42620a9} }, -/**/ {{0x3ff00541, 0xb990e38b} }, -/**/ {{0x3ff00531, 0xaf1bc601} }, -/**/ {{0x3ff00521, 0xa4c6c7ac} }, -/**/ {{0x3ff00511, 0x9a91e82a} }, -/**/ {{0x3ff00501, 0x907d271c} }, -/**/ {{0x3ff004f1, 0x86888421} }, -/**/ {{0x3ff004e1, 0x7cb3fed8} }, -/**/ {{0x3ff004d1, 0x72ff96e0} }, -/**/ {{0x3ff004c1, 0x696b4bdb} }, -/**/ {{0x3ff004b1, 0x5ff71d66} }, -/**/ {{0x3ff004a1, 0x56a30b21} }, -/**/ {{0x3ff00491, 0x4d6f14ad} }, -/**/ {{0x3ff00481, 0x445b39a8} }, -/**/ {{0x3ff00471, 0x3b6779b3} }, -/**/ {{0x3ff00461, 0x3293d46c} }, -/**/ {{0x3ff00451, 0x29e04974} }, -/**/ {{0x3ff00441, 0x214cd869} }, -/**/ {{0x3ff00431, 0x18d980ed} }, -/**/ {{0x3ff00421, 0x1086429d} }, -/**/ {{0x3ff00411, 0x08531d1a} }, -/**/ {{0x3ff00401, 0x00401004} }, -/**/ {{0x3ff003f0, 0xf84d1afa} }, -/**/ {{0x3ff003e0, 0xf07a3d9b} }, -/**/ {{0x3ff003d0, 0xe8c77787} }, -/**/ {{0x3ff003c0, 0xe134c85f} }, -/**/ {{0x3ff003b0, 0xd9c22fc1} }, -/**/ {{0x3ff003a0, 0xd26fad4d} }, -/**/ {{0x3ff00390, 0xcb3d40a3} }, -/**/ {{0x3ff00380, 0xc42ae963} }, -/**/ {{0x3ff00370, 0xbd38a72c} }, -/**/ {{0x3ff00360, 0xb666799e} }, -/**/ {{0x3ff00350, 0xafb46058} }, -/**/ {{0x3ff00340, 0xa9225afa} }, -/**/ {{0x3ff00330, 0xa2b06925} }, -/**/ {{0x3ff00320, 0x9c5e8a77} }, -/**/ {{0x3ff00310, 0x962cbe90} }, -/**/ {{0x3ff00300, 0x901b0511} }, -/**/ {{0x3ff002f0, 0x8a295d98} }, -/**/ {{0x3ff002e0, 0x8457c7c6} }, -/**/ {{0x3ff002d0, 0x7ea6433a} }, -/**/ {{0x3ff002c0, 0x7914cf94} }, -/**/ {{0x3ff002b0, 0x73a36c73} }, -/**/ {{0x3ff002a0, 0x6e521978} }, -/**/ {{0x3ff00290, 0x6920d642} }, -/**/ {{0x3ff00280, 0x640fa271} }, -/**/ {{0x3ff00270, 0x5f1e7da5} }, -/**/ {{0x3ff00260, 0x5a4d677d} }, -/**/ {{0x3ff00250, 0x559c5f9a} }, -/**/ {{0x3ff00240, 0x510b659a} }, -/**/ {{0x3ff00230, 0x4c9a791f} }, -/**/ {{0x3ff00220, 0x484999c6} }, -/**/ {{0x3ff00210, 0x4418c732} }, -/**/ {{0x3ff00200, 0x40080100} }, -/**/ {{0x3ff001f0, 0x3c1746d2} }, -/**/ {{0x3ff001e0, 0x38469846} }, -/**/ {{0x3ff001d0, 0x3495f4fd} }, -/**/ {{0x3ff001c0, 0x31055c96} }, -/**/ {{0x3ff001b0, 0x2d94ceb2} }, -/**/ {{0x3ff001a0, 0x2a444af0} }, -/**/ {{0x3ff00190, 0x2713d0ef} }, -/**/ {{0x3ff00180, 0x24036051} }, -/**/ {{0x3ff00170, 0x2112f8b4} }, -/**/ {{0x3ff00160, 0x1e4299b9} }, -/**/ {{0x3ff00150, 0x1b9242ff} }, -/**/ {{0x3ff00140, 0x1901f427} }, -/**/ {{0x3ff00130, 0x1691acd0} }, -/**/ {{0x3ff00120, 0x14416c9a} }, -/**/ {{0x3ff00110, 0x12113324} }, -/**/ {{0x3ff00100, 0x10010010} }, -/**/ {{0x3ff000f0, 0x0e10d2fc} }, -/**/ {{0x3ff000e0, 0x0c40ab89} }, -/**/ {{0x3ff000d0, 0x0a908957} }, -/**/ {{0x3ff000c0, 0x09006c05} }, -/**/ {{0x3ff000b0, 0x07905334} }, -/**/ {{0x3ff000a0, 0x06403e82} }, -/**/ {{0x3ff00090, 0x05102d92} }, -/**/ {{0x3ff00080, 0x04002001} }, -/**/ {{0x3ff00070, 0x03101571} }, -/**/ {{0x3ff00060, 0x02400d80} }, -/**/ {{0x3ff00050, 0x019007d0} }, -/**/ {{0x3ff00040, 0x01000400} }, -/**/ {{0x3ff00030, 0x009001b0} }, -/**/ {{0x3ff00020, 0x00400080} }, -/**/ {{0x3ff00010, 0x00100010} }, -/**/ {{0x3ff00000, 0x00000000} }, -/**/ {{0x3fefffe0, 0x001fffe0} }, -/**/ {{0x3fefffc0, 0x007fff00} }, -/**/ {{0x3fefffa0, 0x011ffca0} }, -/**/ {{0x3fefff80, 0x01fff800} }, -/**/ {{0x3fefff60, 0x031ff060} }, -/**/ {{0x3fefff40, 0x047fe501} }, -/**/ {{0x3fefff20, 0x061fd521} }, -/**/ {{0x3fefff00, 0x07ffc002} }, -/**/ {{0x3feffee0, 0x0a1fa4e3} }, -/**/ {{0x3feffec0, 0x0c7f8305} }, -/**/ {{0x3feffea0, 0x0f1f59a7} }, -/**/ {{0x3feffe80, 0x11ff280a} }, -/**/ {{0x3feffe60, 0x151eed6e} }, -/**/ {{0x3feffe40, 0x187ea913} }, -/**/ {{0x3feffe20, 0x1c1e5a39} }, -/**/ {{0x3feffe00, 0x1ffe0020} }, -/**/ {{0x3feffde0, 0x241d9a09} }, -/**/ {{0x3feffdc0, 0x287d2733} }, -/**/ {{0x3feffda0, 0x2d1ca6e0} }, -/**/ {{0x3feffd80, 0x31fc184e} }, -/**/ {{0x3feffd60, 0x371b7abf} }, -/**/ {{0x3feffd40, 0x3c7acd72} }, -/**/ {{0x3feffd20, 0x421a0fa9} }, -/**/ {{0x3feffd00, 0x47f940a2} }, -/**/ {{0x3feffce0, 0x4e185f9f} }, -/**/ {{0x3feffcc0, 0x54776bdf} }, -/**/ {{0x3feffca0, 0x5b1664a3} }, -/**/ {{0x3feffc80, 0x61f5492c} }, -/**/ {{0x3feffc60, 0x691418b9} }, -/**/ {{0x3feffc40, 0x7072d28b} }, -/**/ {{0x3feffc20, 0x781175e3} }, -/**/ {{0x3feffc00, 0x7ff00200} }, -/**/ {{0x3feffbe0, 0x880e7623} }, -/**/ {{0x3feffbc0, 0x906cd18c} }, -/**/ {{0x3feffba0, 0x990b137c} }, -/**/ {{0x3feffb80, 0xa1e93b34} }, -/**/ {{0x3feffb60, 0xab0747f3} }, -/**/ {{0x3feffb40, 0xb46538fa} }, -/**/ {{0x3feffb20, 0xbe030d89} }, -/**/ {{0x3feffb00, 0xc7e0c4e1} }, -/**/ {{0x3feffae0, 0xd1fe5e43} }, -/**/ {{0x3feffac0, 0xdc5bd8ee} }, -/**/ {{0x3feffaa0, 0xe6f93424} }, -/**/ {{0x3feffa80, 0xf1d66f25} }, -/**/ {{0x3feffa60, 0xfcf38931} }, -/**/ {{0x3feffa41, 0x08508189} }, -/**/ {{0x3feffa21, 0x13ed576d} }, -/**/ {{0x3feffa01, 0x1fca0a1e} }, -/**/ {{0x3feff9e1, 0x2be698dd} }, -/**/ {{0x3feff9c1, 0x384302e9} }, -/**/ {{0x3feff9a1, 0x44df4785} }, -/**/ {{0x3feff981, 0x51bb65ef} }, -/**/ {{0x3feff961, 0x5ed75d6a} }, -/**/ {{0x3feff941, 0x6c332d34} }, -/**/ {{0x3feff921, 0x79ced490} }, -/**/ {{0x3feff901, 0x87aa52be} }, -/**/ {{0x3feff8e1, 0x95c5a6fe} }, -/**/ {{0x3feff8c1, 0xa420d091} }, -/**/ {{0x3feff8a1, 0xb2bbceb7} }, -/**/ {{0x3feff881, 0xc196a0b2} }, -/**/ {{0x3feff861, 0xd0b145c2} }, -/**/ {{0x3feff841, 0xe00bbd28} }, -/**/ {{0x3feff821, 0xefa60624} }, -/**/ {{0x3feff801, 0xff801ff8} }, -/**/ {{0x3feff7e2, 0x0f9a09e3} }, -/**/ {{0x3feff7c2, 0x1ff3c328} }, -/**/ {{0x3feff7a2, 0x308d4b05} }, -/**/ {{0x3feff782, 0x4166a0bd} }, -/**/ {{0x3feff762, 0x527fc390} }, -/**/ {{0x3feff742, 0x63d8b2bf} }, -/**/ {{0x3feff722, 0x75716d8b} }, -/**/ {{0x3feff702, 0x8749f334} }, -/**/ {{0x3feff6e2, 0x996242fb} }, -/**/ {{0x3feff6c2, 0xabba5c21} }, -/**/ {{0x3feff6a2, 0xbe523de8} }, -/**/ {{0x3feff682, 0xd129e78f} }, -/**/ {{0x3feff662, 0xe4415858} }, -/**/ {{0x3feff642, 0xf7988f84} }, -/**/ {{0x3feff623, 0x0b2f8c54} }, -/**/ {{0x3feff603, 0x1f064e08} }, -/**/ {{0x3feff5e3, 0x331cd3e1} }, -/**/ {{0x3feff5c3, 0x47731d21} }, -/**/ {{0x3feff5a3, 0x5c092908} }, -/**/ {{0x3feff583, 0x70def6d7} }, -/**/ {{0x3feff563, 0x85f485d0} }, -/**/ {{0x3feff543, 0x9b49d532} }, -/**/ {{0x3feff523, 0xb0dee440} }, -/**/ {{0x3feff503, 0xc6b3b23b} }, -/**/ {{0x3feff4e3, 0xdcc83e62} }, -/**/ {{0x3feff4c3, 0xf31c87f8} }, -/**/ {{0x3feff4a4, 0x09b08e3d} }, -/**/ {{0x3feff484, 0x20845073} }, -/**/ {{0x3feff464, 0x3797cdda} }, -/**/ {{0x3feff444, 0x4eeb05b4} }, -/**/ {{0x3feff424, 0x667df741} }, -/**/ {{0x3feff404, 0x7e50a1c3} }, -/**/ {{0x3feff3e4, 0x9663047b} }, -/**/ {{0x3feff3c4, 0xaeb51eaa} }, -/**/ {{0x3feff3a4, 0xc746ef91} }, -/**/ {{0x3feff384, 0xe0187672} }, -/**/ {{0x3feff364, 0xf929b28d} }, -/**/ {{0x3feff345, 0x127aa323} }, -/**/ {{0x3feff325, 0x2c0b4776} }, -/**/ {{0x3feff305, 0x45db9ec7} }, -/**/ {{0x3feff2e5, 0x5feba858} }, -/**/ {{0x3feff2c5, 0x7a3b6369} }, -/**/ {{0x3feff2a5, 0x94cacf3b} }, -/**/ {{0x3feff285, 0xaf99eb11} }, -/**/ {{0x3feff265, 0xcaa8b62a} }, -/**/ {{0x3feff245, 0xe5f72fc9} }, -/**/ {{0x3feff226, 0x0185572f} }, -/**/ {{0x3feff206, 0x1d532b9d} }, -/**/ {{0x3feff1e6, 0x3960ac54} }, -/**/ {{0x3feff1c6, 0x55add896} }, -/**/ {{0x3feff1a6, 0x723aafa3} }, -/**/ {{0x3feff186, 0x8f0730be} }, -/**/ {{0x3feff166, 0xac135b27} }, -/**/ {{0x3feff146, 0xc95f2e21} }, -/**/ {{0x3feff126, 0xe6eaa8eb} }, -/**/ {{0x3feff107, 0x04b5cac9} }, -/**/ {{0x3feff0e7, 0x22c092fb} }, -/**/ {{0x3feff0c7, 0x410b00c2} }, -/**/ {{0x3feff0a7, 0x5f951360} }, -/**/ {{0x3feff087, 0x7e5eca16} }, -/**/ {{0x3feff067, 0x9d682426} }, -/**/ {{0x3feff047, 0xbcb120d2} }, -/**/ {{0x3feff027, 0xdc39bf5a} }, -/**/ {{0x3feff007, 0xfc01ff00} }, -/**/ {{0x3fefefe8, 0x1c09df07} }, -/**/ {{0x3fefefc8, 0x3c515eae} }, -/**/ {{0x3fefefa8, 0x5cd87d38} }, -/**/ {{0x3fefef88, 0x7d9f39e6} }, -/**/ {{0x3fefef68, 0x9ea593fa} }, -/**/ {{0x3fefef48, 0xbfeb8ab5} }, -/**/ {{0x3fefef28, 0xe1711d5a} }, -/**/ {{0x3fefef09, 0x03364b28} }, -/**/ {{0x3fefeee9, 0x253b1363} }, -/**/ {{0x3fefeec9, 0x477f754b} }, -/**/ {{0x3fefeea9, 0x6a037022} }, -/**/ {{0x3fefee89, 0x8cc7032a} }, -/**/ {{0x3fefee69, 0xafca2da5} }, -/**/ {{0x3fefee49, 0xd30ceed4} }, -/**/ {{0x3fefee29, 0xf68f45f8} }, -/**/ {{0x3fefee0a, 0x1a513254} }, -/**/ {{0x3fefedea, 0x3e52b329} }, -/**/ {{0x3fefedca, 0x6293c7b8} }, -/**/ {{0x3fefedaa, 0x87146f44} }, -/**/ {{0x3fefed8a, 0xabd4a90e} }, -/**/ {{0x3fefed6a, 0xd0d47458} }, -/**/ {{0x3fefed4a, 0xf613d064} }, -/**/ {{0x3fefed2b, 0x1b92bc73} }, -/**/ {{0x3fefed0b, 0x415137c7} }, -/**/ {{0x3fefeceb, 0x674f41a2} }, -/**/ {{0x3fefeccb, 0x8d8cd945} }, -/**/ {{0x3fefecab, 0xb409fdf3} }, -/**/ {{0x3fefec8b, 0xdac6aeed} }, -/**/ {{0x3fefec6c, 0x01c2eb76} }, -/**/ {{0x3fefec4c, 0x28feb2ce} }, -/**/ {{0x3fefec2c, 0x507a0437} }, -/**/ {{0x3fefec0c, 0x7834def5} }, -/**/ {{0x3fefebec, 0xa02f4247} }, -/**/ {{0x3fefebcc, 0xc8692d71} }, -/**/ {{0x3fefebac, 0xf0e29fb4} }, -/**/ {{0x3fefeb8d, 0x199b9852} }, -/**/ {{0x3fefeb6d, 0x4294168d} }, -/**/ {{0x3fefeb4d, 0x6bcc19a7} }, -/**/ {{0x3fefeb2d, 0x9543a0e2} }, -/**/ {{0x3fefeb0d, 0xbefaab7f} }, -/**/ {{0x3fefeaed, 0xe8f138c2} }, -/**/ {{0x3fefeace, 0x132747ea} }, -/**/ {{0x3fefeaae, 0x3d9cd83c} }, -/**/ {{0x3fefea8e, 0x6851e8f7} }, -/**/ {{0x3fefea6e, 0x93467960} }, -/**/ {{0x3fefea4e, 0xbe7a88b7} }, -/**/ {{0x3fefea2e, 0xe9ee163f} }, -/**/ {{0x3fefea0f, 0x15a12139} }, -/**/ {{0x3fefe9ef, 0x4193a8e8} }, -/**/ {{0x3fefe9cf, 0x6dc5ac8e} }, -/**/ {{0x3fefe9af, 0x9a372b6d} }, -/**/ {{0x3fefe98f, 0xc6e824c6} }, -/**/ {{0x3fefe96f, 0xf3d897dd} }, - }; - - static const number - Lu[182][2] = { /* log(ui) */ -/**/ {{{0xbfd63003, 0x0b3aac49} }, -/**/ {{0xbc6dc18c, 0xe51fff99} },}, -/**/ {{{0xbfd5d5bd, 0xdf595f30} }, -/**/ {{0x3c765411, 0x48cbb8a2} },}, -/**/ {{{0xbfd57bf7, 0x53c8d1fb} }, -/**/ {{0x3c60908d, 0x15f88b63} },}, -/**/ {{{0xbfd522ae, 0x0738a3d8} }, -/**/ {{0x3c68f7e9, 0xb38a6979} },}, -/**/ {{{0xbfd4c9e0, 0x9e172c3c} }, -/**/ {{0x3c512361, 0x5b147a5d} },}, -/**/ {{{0xbfd4718d, 0xc271c41b} }, -/**/ {{0xbc38fb4c, 0x14c56eef} },}, -/**/ {{{0xbfd419b4, 0x23d5e8c7} }, -/**/ {{0xbc60dbb2, 0x43827392} },}, -/**/ {{{0xbfd3c252, 0x77333184} }, -/**/ {{0x3c72ad27, 0xe50a8ec6} },}, -/**/ {{{0xbfd36b67, 0x76be1117} }, -/**/ {{0x3c5324f0, 0xe883858e} },}, -/**/ {{{0xbfd314f1, 0xe1d35ce4} }, -/**/ {{0x3c73d699, 0x09e5c3dc} },}, -/**/ {{{0xbfd2bef0, 0x7cdc9354} }, -/**/ {{0x3c782dad, 0x7fd86088} },}, -/**/ {{{0xbfd26962, 0x1134db92} }, -/**/ {{0xbc7e0efa, 0xdd9db02b} },}, -/**/ {{{0xbfd21445, 0x6d0eb8d4} }, -/**/ {{0xbc6f7ae9, 0x1aeba60a} },}, -/**/ {{{0xbfd1bf99, 0x635a6b95} }, -/**/ {{0x3c612aeb, 0x84249223} },}, -/**/ {{{0xbfd16b5c, 0xcbacfb73} }, -/**/ {{0xbc766fbd, 0x28b40935} },}, -/**/ {{{0xbfd1178e, 0x8227e47c} }, -/**/ {{0x3c60e63a, 0x5f01c691} },}, -/**/ {{{0xbfd0c42d, 0x676162e3} }, -/**/ {{0xbc5162c7, 0x9d5d11ee} },}, -/**/ {{{0xbfd07138, 0x604d5862} }, -/**/ {{0xbc7cdb16, 0xed4e9138} },}, -/**/ {{{0xbfd01eae, 0x5626c691} }, -/**/ {{0x3c418290, 0xbd2932e2} },}, -/**/ {{{0xbfcf991c, 0x6cb3b379} }, -/**/ {{0xbc6f6650, 0x66f980a2} },}, -/**/ {{{0xbfcef5ad, 0xe4dcffe6} }, -/**/ {{0x3c508ab2, 0xddc708a0} },}, -/**/ {{{0xbfce530e, 0xffe71012} }, -/**/ {{0xbc422760, 0x41f43042} },}, -/**/ {{{0xbfcdb13d, 0xb0d48940} }, -/**/ {{0xbc5aa11d, 0x49f96cb9} },}, -/**/ {{{0xbfcd1037, 0xf2655e7b} }, -/**/ {{0xbc660629, 0x242471a2} },}, -/**/ {{{0xbfcc6ffb, 0xc6f00f71} }, -/**/ {{0x3c68e58b, 0x2c57a4a5} },}, -/**/ {{{0xbfcbd087, 0x383bd8ad} }, -/**/ {{0xbc3dd355, 0xf6a516d7} },}, -/**/ {{{0xbfcb31d8, 0x575bce3d} }, -/**/ {{0x3c66353a, 0xb386a94d} },}, -/**/ {{{0xbfca93ed, 0x3c8ad9e3} }, -/**/ {{0xbc6bcafa, 0x9de97203} },}, -/**/ {{{0xbfc9f6c4, 0x07089664} }, -/**/ {{0xbc435a19, 0x605e67ef} },}, -/**/ {{{0xbfc95a5a, 0xdcf7017f} }, -/**/ {{0xbc5142c5, 0x07fb7a3d} },}, -/**/ {{{0xbfc8beaf, 0xeb38fe8c} }, -/**/ {{0xbc555aa8, 0xb6997a40} },}, -/**/ {{{0xbfc823c1, 0x6551a3c2} }, -/**/ {{0x3c61232c, 0xe70be781} },}, -/**/ {{{0xbfc7898d, 0x85444c73} }, -/**/ {{0xbc5ef8f6, 0xebcfb201} },}, -/**/ {{{0xbfc6f012, 0x8b756abc} }, -/**/ {{0x3c68de59, 0xc21e166c} },}, -/**/ {{{0xbfc6574e, 0xbe8c133a} }, -/**/ {{0x3c3d34f0, 0xf4621bed} },}, -/**/ {{{0xbfc5bf40, 0x6b543db2} }, -/**/ {{0x3c21f5b4, 0x4c0df7e7} },}, -/**/ {{{0xbfc527e5, 0xe4a1b58d} }, -/**/ {{0x3c271a96, 0x82395bfd} },}, -/**/ {{{0xbfc4913d, 0x8333b561} }, -/**/ {{0x3c50d560, 0x4930f135} },}, -/**/ {{{0xbfc3fb45, 0xa59928cc} }, -/**/ {{0x3c6d87e6, 0xa354d056} },}, -/**/ {{{0xbfc365fc, 0xb0159016} }, -/**/ {{0xbc57d411, 0xa5b944ad} },}, -/**/ {{{0xbfc2d161, 0x0c86813a} }, -/**/ {{0x3c5499a3, 0xf25af95f} },}, -/**/ {{{0xbfc23d71, 0x2a49c202} }, -/**/ {{0x3c66e381, 0x61051d69} },}, -/**/ {{{0xbfc1aa2b, 0x7e23f72a} }, -/**/ {{0x3c4c6ef1, 0xd9b2ef7e} },}, -/**/ {{{0xbfc1178e, 0x8227e47c} }, -/**/ {{0x3c50e63a, 0x5f01c691} },}, -/**/ {{{0xbfc08598, 0xb59e3a07} }, -/**/ {{0x3c6dd700, 0x9902bf32} },}, -/**/ {{{0xbfbfe891, 0x39dbd566} }, -/**/ {{0x3c5ac9f4, 0x215f9393} },}, -/**/ {{{0xbfbec739, 0x830a1120} }, -/**/ {{0x3c4a2bf9, 0x91780d3f} },}, -/**/ {{{0xbfbda727, 0x638446a2} }, -/**/ {{0xbc5401fa, 0x71733019} },}, -/**/ {{{0xbfbc8858, 0x01bc4b23} }, -/**/ {{0xbc5a38cb, 0x559a6706} },}, -/**/ {{{0xbfbb6ac8, 0x8dad5b1c} }, -/**/ {{0x3c40057e, 0xed1ca59f} },}, -/**/ {{{0xbfba4e76, 0x40b1bc38} }, -/**/ {{0x3c55b5ca, 0x203e4259} },}, -/**/ {{{0xbfb9335e, 0x5d594989} }, -/**/ {{0x3c5478a8, 0x5704ccb7} },}, -/**/ {{{0xbfb8197e, 0x2f40e3f0} }, -/**/ {{0xbc3b9f2d, 0xffbeed43} },}, -/**/ {{{0xbfb700d3, 0x0aeac0e1} }, -/**/ {{0x3c272566, 0x212cdd05} },}, -/**/ {{{0xbfb5e95a, 0x4d9791cb} }, -/**/ {{0xbc5f3874, 0x5c5c450a} },}, -/**/ {{{0xbfb4d311, 0x5d207eac} }, -/**/ {{0xbc5769f4, 0x2c7842cc} },}, -/**/ {{{0xbfb3bdf5, 0xa7d1ee64} }, -/**/ {{0xbc47a976, 0xd3b5b45f} },}, -/**/ {{{0xbfb2aa04, 0xa44717a5} }, -/**/ {{0x3c5d15d3, 0x8d2fa3f7} },}, -/**/ {{{0xbfb1973b, 0xd1465567} }, -/**/ {{0x3c475583, 0x67a6acf6} },}, -/**/ {{{0xbfb08598, 0xb59e3a07} }, -/**/ {{0x3c5dd700, 0x9902bf32} },}, -/**/ {{{0xbfaeea31, 0xc006b87c} }, -/**/ {{0x3c43e4fc, 0x93b7b66c} },}, -/**/ {{{0xbfaccb73, 0xcdddb2cc} }, -/**/ {{0x3c4e48fb, 0x0500efd4} },}, -/**/ {{{0xbfaaaef2, 0xd0fb10fc} }, -/**/ {{0xbc2a353b, 0xb42e0add} },}, -/**/ {{{0xbfa894aa, 0x149fb343} }, -/**/ {{0xbc3a8be9, 0x7660a23d} },}, -/**/ {{{0xbfa67c94, 0xf2d4bb58} }, -/**/ {{0xbc40413e, 0x6505e603} },}, -/**/ {{{0xbfa466ae, 0xd42de3ea} }, -/**/ {{0x3c4cdd6f, 0x7f4a137e} },}, -/**/ {{{0xbfa252f3, 0x2f8d183f} }, -/**/ {{0x3c4947f7, 0x92615916} },}, -/**/ {{{0xbfa0415d, 0x89e74444} }, -/**/ {{0xbc4c05cf, 0x1d753622} },}, -/**/ {{{0xbf9c63d2, 0xec14aaf2} }, -/**/ {{0x3c3ce030, 0xa686bd86} },}, -/**/ {{{0xbf984925, 0x28c8cabf} }, -/**/ {{0x3c3d192d, 0x0619fa67} },}, -/**/ {{{0xbf9432a9, 0x25980cc1} }, -/**/ {{0x3c38cdaf, 0x39004192} },}, -/**/ {{{0xbf902056, 0x58935847} }, -/**/ {{0xbc327c8e, 0x8416e71f} },}, -/**/ {{{0xbf882448, 0xa388a2aa} }, -/**/ {{0xbc104b16, 0x137f09a0} },}, -/**/ {{{0xbf801015, 0x7588de71} }, -/**/ {{0xbc146662, 0xd417ced0} },}, -/**/ {{{0xbf700805, 0x59588b35} }, -/**/ {{0xbc1f9663, 0x8cf63677} },}, -/**/ {{{0x00000000, 0x00000000} }, -/**/ {{0x00000000, 0x00000000} },}, -/**/ {{{0x3f6ff00a, 0xa2b10bc0} }, -/**/ {{0x3c02821a, 0xd5a6d353} },}, -/**/ {{{0x3f7fe02a, 0x6b106789} }, -/**/ {{0xbbce44b7, 0xe3711ebf} },}, -/**/ {{{0x3f87dc47, 0x5f810a77} }, -/**/ {{0xbc116d76, 0x87d3df21} },}, -/**/ {{{0x3f8fc0a8, 0xb0fc03e4} }, -/**/ {{0xbc183092, 0xc59642a1} },}, -/**/ {{{0x3f93cea4, 0x4346a575} }, -/**/ {{0xbc10cb5a, 0x902b3a1c} },}, -/**/ {{{0x3f97b91b, 0x07d5b11b} }, -/**/ {{0xbc35b602, 0xace3a510} },}, -/**/ {{{0x3f9b9fc0, 0x27af9198} }, -/**/ {{0xbbf0ae69, 0x229dc868} },}, -/**/ {{{0x3f9f829b, 0x0e783300} }, -/**/ {{0x3c333e3f, 0x04f1ef23} },}, -/**/ {{{0x3fa1b0d9, 0x8923d980} }, -/**/ {{0xbc3e9ae8, 0x89bac481} },}, -/**/ {{{0x3fa39e87, 0xb9febd60} }, -/**/ {{0xbc45bfa9, 0x37f551bb} },}, -/**/ {{{0x3fa58a5b, 0xafc8e4d5} }, -/**/ {{0xbc4ce55c, 0x2b4e2b72} },}, -/**/ {{{0x3fa77458, 0xf632dcfc} }, -/**/ {{0x3c418d3c, 0xa87b9296} },}, -/**/ {{{0x3fa95c83, 0x0ec8e3eb} }, -/**/ {{0x3c4f5a0e, 0x80520bf2} },}, -/**/ {{{0x3fab42dd, 0x711971bf} }, -/**/ {{0xbc3eb975, 0x9c130499} },}, -/**/ {{{0x3fad276b, 0x8adb0b52} }, -/**/ {{0x3c21e3c5, 0x3257fd47} },}, -/**/ {{{0x3faf0a30, 0xc01162a6} }, -/**/ {{0x3c485f32, 0x5c5bbacd} },}, -/**/ {{{0x3fb07598, 0x3598e471} }, -/**/ {{0x3c480da5, 0x333c45b8} },}, -/**/ {{{0x3fb16536, 0xeea37ae1} }, -/**/ {{0xbc379da3, 0xe8c22cda} },}, -/**/ {{{0x3fb253f6, 0x2f0a1417} }, -/**/ {{0xbc1c1259, 0x63fc4cfd} },}, -/**/ {{{0x3fb341d7, 0x961bd1d1} }, -/**/ {{0xbc5b599f, 0x227becbb} },}, -/**/ {{{0x3fb42edc, 0xbea646f0} }, -/**/ {{0x3c4ddd4f, 0x935996c9} },}, -/**/ {{{0x3fb51b07, 0x3f06183f} }, -/**/ {{0x3c5a49e3, 0x9a1a8be4} },}, -/**/ {{{0x3fb60658, 0xa93750c4} }, -/**/ {{0xbc538845, 0x8ec21b6a} },}, -/**/ {{{0x3fb6f0d2, 0x8ae56b4c} }, -/**/ {{0xbc5906d9, 0x9184b992} },}, -/**/ {{{0x3fb7da76, 0x6d7b12cd} }, -/**/ {{0xbc5eeedf, 0xcdd94131} },}, -/**/ {{{0x3fb8c345, 0xd6319b21} }, -/**/ {{0xbc24a697, 0xab3424a9} },}, -/**/ {{{0x3fb9ab42, 0x462033ad} }, -/**/ {{0xbc42099e, 0x1c184e8e} },}, -/**/ {{{0x3fba926d, 0x3a4ad563} }, -/**/ {{0x3c5942f4, 0x8aa70ea9} },}, -/**/ {{{0x3fbb78c8, 0x2bb0eda1} }, -/**/ {{0x3c20878c, 0xf0327e21} },}, -/**/ {{{0x3fbc5e54, 0x8f5bc743} }, -/**/ {{0x3c35d617, 0xef8161b1} },}, -/**/ {{{0x3fbd4313, 0xd66cb35d} }, -/**/ {{0x3c5790dd, 0x951d90fa} },}, -/**/ {{{0x3fbe2707, 0x6e2af2e6} }, -/**/ {{0xbc361578, 0x001e0162} },}, -/**/ {{{0x3fbf0a30, 0xc01162a6} }, -/**/ {{0x3c585f32, 0x5c5bbacd} },}, -/**/ {{{0x3fbfec91, 0x31dbeabb} }, -/**/ {{0xbc55746b, 0x9981b36c} },}, -/**/ {{{0x3fc06715, 0x12ca596e} }, -/**/ {{0x3c550c64, 0x7eb86499} },}, -/**/ {{{0x3fc0d77e, 0x7cd08e59} }, -/**/ {{0x3c69a5dc, 0x5e9030ac} },}, -/**/ {{{0x3fc14785, 0x846742ac} }, -/**/ {{0x3c6a2881, 0x3e3a7f07} },}, -/**/ {{{0x3fc1b72a, 0xd52f67a0} }, -/**/ {{0x3c548302, 0x3472cd74} },}, -/**/ {{{0x3fc2266f, 0x190a5acb} }, -/**/ {{0x3c6f547b, 0xf1809e88} },}, -/**/ {{{0x3fc29552, 0xf81ff523} }, -/**/ {{0x3c630177, 0x1c407dbf} },}, -/**/ {{{0x3fc303d7, 0x18e47fd3} }, -/**/ {{0xbc06b9c7, 0xd96091fa} },}, -/**/ {{{0x3fc371fc, 0x201e8f74} }, -/**/ {{0x3c5de6cb, 0x62af18a0} },}, -/**/ {{{0x3fc3dfc2, 0xb0ecc62a} }, -/**/ {{0xbc5ab3a8, 0xe7d81017} },}, -/**/ {{{0x3fc44d2b, 0x6ccb7d1e} }, -/**/ {{0x3c69f4f6, 0x543e1f88} },}, -/**/ {{{0x3fc4ba36, 0xf39a55e5} }, -/**/ {{0x3c668981, 0xbcc36756} },}, -/**/ {{{0x3fc526e5, 0xe3a1b438} }, -/**/ {{0xbc6746ff, 0x8a470d3a} },}, -/**/ {{{0x3fc59338, 0xd9982086} }, -/**/ {{0xbc565d22, 0xaa8ad7cf} },}, -/**/ {{{0x3fc5ff30, 0x70a793d4} }, -/**/ {{0xbc5bc60e, 0xfafc6f6e} },}, -/**/ {{{0x3fc66acd, 0x4272ad51} }, -/**/ {{0xbc50900e, 0x4e1ea8b2} },}, -/**/ {{{0x3fc6d60f, 0xe719d21d} }, -/**/ {{0xbc6caae2, 0x68ecd179} },}, -/**/ {{{0x3fc740f8, 0xf54037a5} }, -/**/ {{0xbc5b2640, 0x62a84cdb} },}, -/**/ {{{0x3fc7ab89, 0x0210d909} }, -/**/ {{0x3c4be36b, 0x2d6a0608} },}, -/**/ {{{0x3fc815c0, 0xa14357eb} }, -/**/ {{0xbc54be48, 0x073a0564} },}, -/**/ {{{0x3fc87fa0, 0x6520c911} }, -/**/ {{0xbc6bf7fd, 0xbfa08d9a} },}, -/**/ {{{0x3fc8e928, 0xde886d41} }, -/**/ {{0xbc6569d8, 0x51a56770} },}, -/**/ {{{0x3fc9525a, 0x9cf456b4} }, -/**/ {{0x3c6d904c, 0x1d4e2e26} },}, -/**/ {{{0x3fc9bb36, 0x2e7dfb83} }, -/**/ {{0x3c6575e3, 0x1f003e0c} },}, -/**/ {{{0x3fca23bc, 0x1fe2b563} }, -/**/ {{0x3c493711, 0xb07a998c} },}, -/**/ {{{0x3fca8bec, 0xfc882f19} }, -/**/ {{0xbc5e8c37, 0x918c39eb} },}, -/**/ {{{0x3fcaf3c9, 0x4e80bff3} }, -/**/ {{0xbc5398cf, 0xf3641985} },}, -/**/ {{{0x3fcb5b51, 0x9e8fb5a4} }, -/**/ {{0x3c6ba27f, 0xdc19e1a0} },}, -/**/ {{{0x3fcbc286, 0x742d8cd6} }, -/**/ {{0x3c54fce7, 0x44870f55} },}, -/**/ {{{0x3fcc2968, 0x558c18c1} }, -/**/ {{0xbc673dee, 0x38a3fb6b} },}, -/**/ {{{0x3fcc8ff7, 0xc79a9a22} }, -/**/ {{0xbc64f689, 0xf8434012} },}, -/**/ {{{0x3fccf635, 0x4e09c5dc} }, -/**/ {{0x3c6239a0, 0x7d55b695} },}, -/**/ {{{0x3fcd5c21, 0x6b4fbb91} }, -/**/ {{0x3c66e443, 0x597e4d40} },}, -/**/ {{{0x3fcdc1bc, 0xa0abec7d} }, -/**/ {{0x3c6834c5, 0x1998b6fc} },}, -/**/ {{{0x3fce2707, 0x6e2af2e6} }, -/**/ {{0xbc461578, 0x001e0162} },}, -/**/ {{{0x3fce8c02, 0x52aa5a60} }, -/**/ {{0xbc46e03a, 0x39bfc89b} },}, -/**/ {{{0x3fcef0ad, 0xcbdc5936} }, -/**/ {{0x3c648637, 0x950dc20d} },}, -/**/ {{{0x3fcf550a, 0x564b7b37} }, -/**/ {{0x3c2c5f6d, 0xfd018c37} },}, -/**/ {{{0x3fcfb918, 0x6d5e3e2b} }, -/**/ {{0xbc6caaae, 0x64f21acb} },}, -/**/ {{{0x3fd00e6c, 0x45ad501d} }, -/**/ {{0xbc6cb956, 0x8ff6fead} },}, -/**/ {{{0x3fd04025, 0x94b4d041} }, -/**/ {{0xbc628ec2, 0x17a5022d} },}, -/**/ {{{0x3fd071b8, 0x5fcd590d} }, -/**/ {{0x3c5d1707, 0xf97bde80} },}, -/**/ {{{0x3fd0a324, 0xe27390e3} }, -/**/ {{0x3c77dcfd, 0xe8061c03} },}, -/**/ {{{0x3fd0d46b, 0x579ab74b} }, -/**/ {{0x3c603ec8, 0x1c3cbd92} },}, -/**/ {{{0x3fd1058b, 0xf9ae4ad5} }, -/**/ {{0x3c589fa0, 0xab4cb31d} },}, -/**/ {{{0x3fd13687, 0x0293a8b0} }, -/**/ {{0x3c77b662, 0x98edd24a} },}, -/**/ {{{0x3fd1675c, 0xababa60e} }, -/**/ {{0x3c2ce63e, 0xab883717} },}, -/**/ {{{0x3fd1980d, 0x2dd4236f} }, -/**/ {{0x3c79d3d1, 0xb0e4d147} },}, -/**/ {{{0x3fd1c898, 0xc16999fb} }, -/**/ {{0xbc30e5c6, 0x2aff1c44} },}, -/**/ {{{0x3fd1f8ff, 0x9e48a2f3} }, -/**/ {{0xbc7c9fdf, 0x9a0c4b07} },}, -/**/ {{{0x3fd22941, 0xfbcf7966} }, -/**/ {{0xbc776f5e, 0xb09628af} },}, -/**/ {{{0x3fd25960, 0x10df763a} }, -/**/ {{0xbc50f76c, 0x57075e9e} },}, -/**/ {{{0x3fd2895a, 0x13de86a3} }, -/**/ {{0x3c77ad24, 0xc13f040e} },}, -/**/ {{{0x3fd2b930, 0x3ab89d25} }, -/**/ {{0xbc7896b5, 0xfd852ad4} },}, -/**/ {{{0x3fd2e8e2, 0xbae11d31} }, -/**/ {{0xbc78f4cd, 0xb95ebdf9} },}, -/**/ {{{0x3fd31871, 0xc9544185} }, -/**/ {{0xbc351acc, 0x4c09b379} },}, -/**/ {{{0x3fd347dd, 0x9a987d55} }, -/**/ {{0xbc64dd4c, 0x580919f8} },}, -/**/ {{{0x3fd37726, 0x62bfd85b} }, -/**/ {{0xbc4b5629, 0xd8117de7} },}, -/**/ {{{0x3fd3a64c, 0x556945ea} }, -/**/ {{0xbc6c6865, 0x1945f97c} },}, -/**/ {{{0x3fd3d54f, 0xa5c1f710} }, -/**/ {{0xbc7e3265, 0xc6a1c98d} },}, -/**/ {{{0x3fd40430, 0x8686a7e4} }, -/**/ {{0xbc70bcfb, 0x6082ce6d} },}, -/**/ {{{0x3fd432ef, 0x2a04e814} }, -/**/ {{0xbc729931, 0x715ac903} },}, -/**/ {{{0x3fd4618b, 0xc21c5ec2} }, -/**/ {{0x3c7f42de, 0xcdeccf1d} },}, -/**/ {{{0x3fd49006, 0x804009d1} }, -/**/ {{0xbc69ffc3, 0x41f177dc} },}, -/**/ {{{0x3fd4be5f, 0x957778a1} }, -/**/ {{0xbc6259b3, 0x5b04813d} },}, -/**/ {{{0x3fd4ec97, 0x3260026a} }, -/**/ {{0xbc742a87, 0xd977dc5e} },}, -/**/ {{{0x3fd51aad, 0x872df82d} }, -/**/ {{0x3c43927a, 0xc19f55e3} },}, -/**/ {{{0x3fd548a2, 0xc3add263} }, -/**/ {{0xbc6819cf, 0x7e308ddb} },}, -/**/ {{{0x3fd57677, 0x17455a6c} }, -/**/ {{0x3c7526ad, 0xb283660c} },}, -/**/ {{{0x3fd5a42a, 0xb0f4cfe2} }, -/**/ {{0xbc78ebcb, 0x7dee9a3d} },}, -/**/ {{{0x3fd5d1bd, 0xbf5809ca} }, -/**/ {{0x3c742363, 0x83dc7fe1} },}, -/**/ {{{0x3fd5ff30, 0x70a793d4} }, -/**/ {{0xbc6bc60e, 0xfafc6f6e} },}, -/**/ {{{0x3fd62c82, 0xf2b9c795} }, -/**/ {{0x3c67b7af, 0x915300e5} },}, - }; - - static const number - Lv[362][2] = { /* log(vj) */ - -/**/ {{{0xbf6687ec, 0xb72daabf} }, -/**/ {{0x3c052c69, 0x0f13318f} },}, -/**/ {{{0xbf6667d6, 0x3767104f} }, -/**/ {{0x3bd3efa3, 0xd27a7bac} },}, -/**/ {{{0xbf6647bf, 0xd7cd64fb} }, -/**/ {{0x3c09b725, 0x55a89c36} },}, -/**/ {{{0xbf6627a9, 0x9860683b} }, -/**/ {{0x3bcbae22, 0xfebc844a} },}, -/**/ {{{0xbf660793, 0x791fd98a} }, -/**/ {{0xbbfe34af, 0x78fa1cb5} },}, -/**/ {{{0xbf65e77d, 0x7a0b7863} }, -/**/ {{0xbc02f1b1, 0xea78fdd0} },}, -/**/ {{{0xbf65c767, 0x9b230442} }, -/**/ {{0x3bf70d8c, 0x2202b2ca} },}, -/**/ {{{0xbf65a751, 0xdc663ca2} }, -/**/ {{0xbbfdc63d, 0xc3444e64} },}, -/**/ {{{0xbf65873c, 0x3dd4e102} }, -/**/ {{0x3c021b11, 0x370d69c3} },}, -/**/ {{{0xbf656726, 0xbf6eb0de} }, -/**/ {{0xbbfb6da8, 0x154dd8d8} },}, -/**/ {{{0xbf654711, 0x61336bb6} }, -/**/ {{0xbc0b12d2, 0xdf9a4709} },}, -/**/ {{{0xbf6526fc, 0x2322d10a} }, -/**/ {{0x3bf997f2, 0x68d1274f} },}, -/**/ {{{0xbf6506e7, 0x053ca059} }, -/**/ {{0x3c0c2a1f, 0xe70c852a} },}, -/**/ {{{0xbf64e6d2, 0x07809924} }, -/**/ {{0x3c04cc9e, 0xa808538f} },}, -/**/ {{{0xbf64c6bd, 0x29ee7aed} }, -/**/ {{0x3befe68c, 0x7797a4bd} },}, -/**/ {{{0xbf64a6a8, 0x6c860537} }, -/**/ {{0x3c06794d, 0x9efaae3d} },}, -/**/ {{{0xbf648693, 0xcf46f784} }, -/**/ {{0xbbfed318, 0xb2ddd9d1} },}, -/**/ {{{0xbf64667f, 0x5231115a} }, -/**/ {{0x3c061f62, 0x4643624b} },}, -/**/ {{{0xbf64466a, 0xf544123c} }, -/**/ {{0x3c0666a0, 0x9387f11e} },}, -/**/ {{{0xbf642656, 0xb87fb9b0} }, -/**/ {{0x3c0043b2, 0x116ec598} },}, -/**/ {{{0xbf640642, 0x9be3c73c} }, -/**/ {{0xbbfbd84d, 0xd2de6e3e} },}, -/**/ {{{0xbf63e62e, 0x9f6ffa68} }, -/**/ {{0xbbe9149b, 0x433d8c65} },}, -/**/ {{{0xbf63c61a, 0xc32412bb} }, -/**/ {{0xbbf6b88d, 0x08e5a7bb} },}, -/**/ {{{0xbf63a607, 0x06ffcfbe} }, -/**/ {{0xbb9f3c7a, 0xccfac9e2} },}, -/**/ {{{0xbf6385f3, 0x6b02f0fa} }, -/**/ {{0x3bee405c, 0xbec6f6e4} },}, -/**/ {{{0xbf6365df, 0xef2d35f9} }, -/**/ {{0x3bf02993, 0xaf0c0b4c} },}, -/**/ {{{0xbf6345cc, 0x937e5e46} }, -/**/ {{0x3bf9be97, 0xaa64716f} },}, -/**/ {{{0xbf6325b9, 0x57f6296c} }, -/**/ {{0xbbfdeb4d, 0xa2e863ae} },}, -/**/ {{{0xbf6305a6, 0x3c9456f9} }, -/**/ {{0x3c0f3c7f, 0x636d2b2c} },}, -/**/ {{{0xbf62e593, 0x4158a678} }, -/**/ {{0x3c01a8df, 0xb166ca7f} },}, -/**/ {{{0xbf62c580, 0x6642d778} }, -/**/ {{0x3c020ff1, 0x53a2d534} },}, -/**/ {{{0xbf62a56d, 0xab52a987} }, -/**/ {{0xbbe8fef1, 0x0412f1e7} },}, -/**/ {{{0xbf62855b, 0x1087dc35} }, -/**/ {{0xbbfcd17e, 0x4b7ac6c6} },}, -/**/ {{{0xbf626548, 0x95e22f12} }, -/**/ {{0xbbfbfc21, 0x9a8127bf} },}, -/**/ {{{0xbf624536, 0x3b6161af} }, -/**/ {{0x3bd7eda1, 0x66d42390} },}, -/**/ {{{0xbf622524, 0x0105339d} }, -/**/ {{0xbbdf374e, 0x77fedcad} },}, -/**/ {{{0xbf620511, 0xe6cd646f} }, -/**/ {{0x3be1d1fb, 0x52d05dea} },}, -/**/ {{{0xbf61e4ff, 0xecb9b3b8} }, -/**/ {{0x3c02c2fc, 0xffd8e706} },}, -/**/ {{{0xbf61c4ee, 0x12c9e10b} }, -/**/ {{0xbc02b4f8, 0xf1d5cc2c} },}, -/**/ {{{0xbf61a4dc, 0x58fdabfe} }, -/**/ {{0xbc0618c3, 0x1315b191} },}, -/**/ {{{0xbf6184ca, 0xbf54d426} }, -/**/ {{0xbc01f8d5, 0xcb3cdab0} },}, -/**/ {{{0xbf6164b9, 0x45cf1919} }, -/**/ {{0xbc014ff7, 0xc025605a} },}, -/**/ {{{0xbf6144a7, 0xec6c3a6e} }, -/**/ {{0xbbff04ff, 0x87cb08cd} },}, -/**/ {{{0xbf612496, 0xb32bf7bd} }, -/**/ {{0x3bee89b4, 0xe6af1b84} },}, -/**/ {{{0xbf610485, 0x9a0e109e} }, -/**/ {{0x3c07e99e, 0x35a60879} },}, -/**/ {{{0xbf60e474, 0xa11244aa} }, -/**/ {{0x3c04b698, 0x20f2325a} },}, -/**/ {{{0xbf60c463, 0xc838537b} }, -/**/ {{0x3bc0657e, 0x3617200d} },}, -/**/ {{{0xbf60a453, 0x0f7ffcac} }, -/**/ {{0xbc008feb, 0xa5080961} },}, -/**/ {{{0xbf608442, 0x76e8ffd9} }, -/**/ {{0x3bd13002, 0xbb5e1df7} },}, -/**/ {{{0xbf606431, 0xfe731c9d} }, -/**/ {{0xbc0509f3, 0x6e2858c0} },}, -/**/ {{{0xbf604421, 0xa61e1296} }, -/**/ {{0xbc04b556, 0x5f5d9695} },}, -/**/ {{{0xbf602411, 0x6de9a162} }, -/**/ {{0x3c042b89, 0xe79a4e00} },}, -/**/ {{{0xbf600401, 0x55d5889e} }, -/**/ {{0x3be8f98e, 0x1113f403} },}, -/**/ {{{0xbf5fc7e2, 0xbbc30fd4} }, -/**/ {{0xbbfc709b, 0x93382bc9} },}, -/**/ {{{0xbf5f87c3, 0x0c1abdcd} }, -/**/ {{0xbbf2a90d, 0x76a55d1c} },}, -/**/ {{{0xbf5f47a3, 0x9cb19a68} }, -/**/ {{0x3be1b815, 0x76e7826b} },}, -/**/ {{{0xbf5f0784, 0x6d8724e7} }, -/**/ {{0xbbe72d46, 0x2b63756d} },}, -/**/ {{{0xbf5ec765, 0x7e9adc90} }, -/**/ {{0x3beb1a66, 0x73bb17c5} },}, -/**/ {{{0xbf5e8746, 0xcfec40a8} }, -/**/ {{0x3bf11af5, 0xb5e5a553} },}, -/**/ {{{0xbf5e4728, 0x617ad077} }, -/**/ {{0x3bfb2cad, 0xf57dd14f} },}, -/**/ {{{0xbf5e070a, 0x33460b45} }, -/**/ {{0xbbf8db75, 0x4902c8d5} },}, -/**/ {{{0xbf5dc6ec, 0x454d705f} }, -/**/ {{0x3bef5cc6, 0xe8a41057} },}, -/**/ {{{0xbf5d86ce, 0x97907f0f} }, -/**/ {{0x3bed8277, 0xdf8672ef} },}, -/**/ {{{0xbf5d46b1, 0x2a0eb6a3} }, -/**/ {{0xbbc2f9c2, 0x3717e5ee} },}, -/**/ {{{0xbf5d0693, 0xfcc7966b} }, -/**/ {{0x3bf4deed, 0xab4852c6} },}, -/**/ {{{0xbf5cc677, 0x0fba9db6} }, -/**/ {{0xbbf3a2b4, 0x9db2a368} },}, -/**/ {{{0xbf5c865a, 0x62e74bd8} }, -/**/ {{0xbbd2c51d, 0x58fa0c24} },}, -/**/ {{{0xbf5c463d, 0xf64d2024} }, -/**/ {{0x3bf838ca, 0xe3a09391} },}, -/**/ {{{0xbf5c0621, 0xc9eb99ee} }, -/**/ {{0xbbdc2a9e, 0x61b7de71} },}, -/**/ {{{0xbf5bc605, 0xddc2388e} }, -/**/ {{0xbbea9808, 0x4accb195} },}, -/**/ {{{0xbf5b85ea, 0x31d07b5c} }, -/**/ {{0xbbd811a2, 0x032e030b} },}, -/**/ {{{0xbf5b45ce, 0xc615e1b1} }, -/**/ {{0xbbfd5427, 0x821e0b81} },}, -/**/ {{{0xbf5b05b3, 0x9a91eaea} }, -/**/ {{0x3bfffeba, 0x2619306b} },}, -/**/ {{{0xbf5ac598, 0xaf441661} }, -/**/ {{0x3bd22824, 0x9eac7d15} },}, -/**/ {{{0xbf5a857e, 0x042be376} }, -/**/ {{0x3bc20736, 0x24893f0e} },}, -/**/ {{{0xbf5a4563, 0x9948d188} }, -/**/ {{0xbbf58ab4, 0x04d734cd} },}, -/**/ {{{0xbf5a0549, 0x6e9a5ff9} }, -/**/ {{0xbbf22673, 0x5723a6c3} },}, -/**/ {{{0xbf59c52f, 0x84200e2c} }, -/**/ {{0x3bfc81da, 0xa538e8e1} },}, -/**/ {{{0xbf598515, 0xd9d95b83} }, -/**/ {{0xbbfa1a37, 0x2a8e3feb} },}, -/**/ {{{0xbf5944fc, 0x6fc5c767} }, -/**/ {{0x3bf8e1ce, 0x385159f9} },}, -/**/ {{{0xbf5904e3, 0x45e4d13c} }, -/**/ {{0xbbfc4737, 0x1567c7a7} },}, -/**/ {{{0xbf58c4ca, 0x5c35f86e} }, -/**/ {{0x3bf41581, 0x23c9ae0c} },}, -/**/ {{{0xbf5884b1, 0xb2b8bc65} }, -/**/ {{0x3bf70c2c, 0x2b66cfb6} },}, -/**/ {{{0xbf584499, 0x496c9c8d} }, -/**/ {{0xbbdb9042, 0xe5a11e3e} },}, -/**/ {{{0xbf580481, 0x20511854} }, -/**/ {{0xbbf9cf9d, 0x61bcb040} },}, -/**/ {{{0xbf57c469, 0x3765af29} }, -/**/ {{0xbbf65ceb, 0xe26a419b} },}, -/**/ {{{0xbf578451, 0x8ea9e07c} }, -/**/ {{0xbbf1c2f5, 0xb70a4088} },}, -/**/ {{{0xbf57443a, 0x261d2bbf} }, -/**/ {{0xbbbc7b8f, 0x29704ba7} },}, -/**/ {{{0xbf570422, 0xfdbf1065} }, -/**/ {{0x3bca0a54, 0x433ccb3b} },}, -/**/ {{{0xbf56c40c, 0x158f0de3} }, -/**/ {{0x3bd9e257, 0x207cde2d} },}, -/**/ {{{0xbf5683f5, 0x6d8ca3af} }, -/**/ {{0xbbef17a4, 0xf7b51b49} },}, -/**/ {{{0xbf5643df, 0x05b75142} }, -/**/ {{0x3be28239, 0x9d345bf8} },}, -/**/ {{{0xbf5603c8, 0xde0e9614} }, -/**/ {{0xbbde6c21, 0x0918d1bf} },}, -/**/ {{{0xbf55c3b2, 0xf691f1a1} }, -/**/ {{0x3bd37d78, 0x377de4c8} },}, -/**/ {{{0xbf55839d, 0x4f40e365} }, -/**/ {{0x3bf52b7d, 0xbbf7c9d1} },}, -/**/ {{{0xbf554387, 0xe81aeadd} }, -/**/ {{0xbbf0be6a, 0x679c3d9a} },}, -/**/ {{{0xbf550372, 0xc11f878a} }, -/**/ {{0xbbdd9e20, 0xb6cdd88e} },}, -/**/ {{{0xbf54c35d, 0xda4e38ec} }, -/**/ {{0xbbe3b1e7, 0x09302da0} },}, -/**/ {{{0xbf548349, 0x33a67e86} }, -/**/ {{0x3be8cba8, 0x085b922d} },}, -/**/ {{{0xbf544334, 0xcd27d7db} }, -/**/ {{0xbba5f2c9, 0xf024ab43} },}, -/**/ {{{0xbf540320, 0xa6d1c471} }, -/**/ {{0xbbeb31f3, 0xf686cf3d} },}, -/**/ {{{0xbf53c30c, 0xc0a3c3cf} }, -/**/ {{0xbbf74ffe, 0xd4ad32f6} },}, -/**/ {{{0xbf5382f9, 0x1a9d557e} }, -/**/ {{0x3bd2e555, 0x4acb368f} },}, -/**/ {{{0xbf5342e5, 0xb4bdf907} }, -/**/ {{0x3be13442, 0x07812806} },}, -/**/ {{{0xbf5302d2, 0x8f052df6} }, -/**/ {{0x3bf5f429, 0x70b1e756} },}, -/**/ {{{0xbf52c2bf, 0xa97273d7} }, -/**/ {{0xbbf20aa3, 0x43a03fff} },}, -/**/ {{{0xbf5282ad, 0x04054a3a} }, -/**/ {{0xbbed4d57, 0x8bebd7ad} },}, -/**/ {{{0xbf52429a, 0x9ebd30ae} }, -/**/ {{0xbbff9529, 0x5a71c5a4} },}, -/**/ {{{0xbf520288, 0x7999a6c6} }, -/**/ {{0x3bfb055a, 0x54100f9e} },}, -/**/ {{{0xbf51c276, 0x949a2c12} }, -/**/ {{0xbbff6978, 0xa2e9f1b4} },}, -/**/ {{{0xbf518264, 0xefbe402a} }, -/**/ {{0x3bf01fb9, 0xbc188323} },}, -/**/ {{{0xbf514253, 0x8b0562a1} }, -/**/ {{0xbbf7c87c, 0x957bf23a} },}, -/**/ {{{0xbf510242, 0x666f1311} }, -/**/ {{0x3bdc2cb9, 0xc8be6880} },}, -/**/ {{{0xbf50c231, 0x81fad111} }, -/**/ {{0xbbf59fc1, 0x07ba000d} },}, -/**/ {{{0xbf508220, 0xdda81c3d} }, -/**/ {{0xbbf06a0a, 0xbf5c8a0b} },}, -/**/ {{{0xbf504210, 0x79767431} }, -/**/ {{0x3bf3a6cf, 0xa9a705bc} },}, -/**/ {{{0xbf500200, 0x55655889} }, -/**/ {{0xbbe9abe6, 0xbf0fa436} },}, -/**/ {{{0xbf4f83e0, 0xe2e891cc} }, -/**/ {{0x3be4aa59, 0x1b81bf62} },}, -/**/ {{{0xbf4f03c1, 0x9b4589ce} }, -/**/ {{0xbbe60518, 0x8a47f50a} },}, -/**/ {{{0xbf4e83a2, 0xd3e0985f} }, -/**/ {{0x3bed32d8, 0x5ef17e96} },}, -/**/ {{{0xbf4e0384, 0x8cb8bcc3} }, -/**/ {{0xbbeb7b30, 0xf09afa4d} },}, -/**/ {{{0xbf4d8366, 0xc5ccf647} }, -/**/ {{0xbbd527fc, 0xf586cec2} },}, -/**/ {{{0xbf4d0349, 0x7f1c4437} }, -/**/ {{0x3bc2bcf0, 0x4a686886} },}, -/**/ {{{0xbf4c832c, 0xb8a5a5e3} }, -/**/ {{0x3bc98f93, 0x721c2ebe} },}, -/**/ {{{0xbf4c0310, 0x72681a9e} }, -/**/ {{0xbbe20f00, 0xb5308d22} },}, -/**/ {{{0xbf4b82f4, 0xac62a1bf} }, -/**/ {{0xbbe1edd0, 0x9737b561} },}, -/**/ {{{0xbf4b02d9, 0x66943a9f} }, -/**/ {{0xbbcc950b, 0x23f894a1} },}, -/**/ {{{0xbf4a82be, 0xa0fbe49a} }, -/**/ {{0xbb81da04, 0x866bc982} },}, -/**/ {{{0xbf4a02a4, 0x5b989f0f} }, -/**/ {{0xbbd9114d, 0x9d76196e} },}, -/**/ {{{0xbf49828a, 0x96696961} }, -/**/ {{0x3bc10d20, 0xd3292fd6} },}, -/**/ {{{0xbf490271, 0x516d42f4} }, -/**/ {{0xbbee53a3, 0x2e9a5dd5} },}, -/**/ {{{0xbf488258, 0x8ca32b32} }, -/**/ {{0xbbc55af5, 0xd18f8004} },}, -/**/ {{{0xbf480240, 0x480a2185} }, -/**/ {{0xbbb32d23, 0xa9b0178a} },}, -/**/ {{{0xbf478228, 0x83a1255c} }, -/**/ {{0x3be84cc3, 0x8152093a} },}, -/**/ {{{0xbf470211, 0x3f673627} }, -/**/ {{0xbbd0055a, 0xf4881c71} },}, -/**/ {{{0xbf4681fa, 0x7b5b535c} }, -/**/ {{0x3bd2b73f, 0xb98336ea} },}, -/**/ {{{0xbf4601e4, 0x377c7c71} }, -/**/ {{0xbbcdcbed, 0x2ed05089} },}, -/**/ {{{0xbf4581ce, 0x73c9b0e1} }, -/**/ {{0xbbdda0c2, 0x61414697} },}, -/**/ {{{0xbf4501b9, 0x3041f02a} }, -/**/ {{0x3bee5d53, 0x22f8b33c} },}, -/**/ {{{0xbf4481a4, 0x6ce439ca} }, -/**/ {{0xbbe5512f, 0x9c25c999} },}, -/**/ {{{0xbf440190, 0x29af8d47} }, -/**/ {{0x3b7f48c2, 0xa4df0dfd} },}, -/**/ {{{0xbf43817c, 0x66a2ea26} }, -/**/ {{0x3bd157c0, 0x517febd8} },}, -/**/ {{{0xbf430169, 0x23bd4ff0} }, -/**/ {{0xbbe2e229, 0x0176d244} },}, -/**/ {{{0xbf428156, 0x60fdbe33} }, -/**/ {{0x3be64664, 0x175812b3} },}, -/**/ {{{0xbf420144, 0x1e63347c} }, -/**/ {{0xbbe39ab4, 0xd9355524} },}, -/**/ {{{0xbf418132, 0x5becb260} }, -/**/ {{0x3be74b27, 0xb6e1edc9} },}, -/**/ {{{0xbf410121, 0x19993772} }, -/**/ {{0xbbaa390b, 0x393ab56a} },}, -/**/ {{{0xbf408110, 0x5767c34c} }, -/**/ {{0x3bd128e6, 0xf8c7783b} },}, -/**/ {{{0xbf400100, 0x15575589} }, -/**/ {{0x3bec8863, 0xf23ef222} },}, -/**/ {{{0xbf3f01e0, 0xa6cddb8d} }, -/**/ {{0x3b8a9419, 0xcdd29c3f} },}, -/**/ {{{0xbf3e01c2, 0x232b174e} }, -/**/ {{0xbbc7cf55, 0xd5f5b191} },}, -/**/ {{{0xbf3d01a4, 0x9fc45d9e} }, -/**/ {{0x3bddc58f, 0xb5038e7e} },}, -/**/ {{{0xbf3c0188, 0x1c97adca} }, -/**/ {{0x3bc0238d, 0xbb933e41} },}, -/**/ {{{0xbf3b016c, 0x99a30728} }, -/**/ {{0xbbabde04, 0xc3c43664} },}, -/**/ {{{0xbf3a0152, 0x16e46913} }, -/**/ {{0x3bafe081, 0x5adc3673} },}, -/**/ {{{0xbf390138, 0x9459d2eb} }, -/**/ {{0xbbd949da, 0xc2a33d26} },}, -/**/ {{{0xbf380120, 0x12014418} }, -/**/ {{0xbbd3acbc, 0xf76e0326} },}, -/**/ {{{0xbf370108, 0x8fd8bc07} }, -/**/ {{0x3bdbde09, 0x4cd6ce34} },}, -/**/ {{{0xbf3600f2, 0x0dde3a29} }, -/**/ {{0xbbb0bc28, 0x05442a35} },}, -/**/ {{{0xbf3500dc, 0x8c0fbdf9} }, -/**/ {{0x3bd21c68, 0x0908cbf7} },}, -/**/ {{{0xbf3400c8, 0x0a6b46f4} }, -/**/ {{0xbbdbd35e, 0x0f107564} },}, -/**/ {{{0xbf3300b4, 0x88eed4a1} }, -/**/ {{0xbbc22067, 0x49a3dcb8} },}, -/**/ {{{0xbf3200a2, 0x0798668a} }, -/**/ {{0x3bcdb7f0, 0xe7c5d0e5} },}, -/**/ {{{0xbf310090, 0x8665fc3f} }, -/**/ {{0xbbd00add, 0xc7f9d69c} },}, -/**/ {{{0xbf300080, 0x05559559} }, -/**/ {{0x3bddd332, 0xa0e20e2f} },}, -/**/ {{{0xbf2e00e1, 0x08ca62e5} }, -/**/ {{0xbbb15ff9, 0x3a04bb77} },}, -/**/ {{{0xbf2c00c4, 0x0725a061} }, -/**/ {{0x3bc88ab0, 0xcc052f3e} },}, -/**/ {{{0xbf2a00a9, 0x05b8e275} }, -/**/ {{0xbbcbba1a, 0xf5f3cbcf} },}, -/**/ {{{0xbf280090, 0x04802882} }, -/**/ {{0x3bcec900, 0xa5bd7bd0} },}, -/**/ {{{0xbf260079, 0x037771ef} }, -/**/ {{0x3bb77ea0, 0x9b7b54fa} },}, -/**/ {{{0xbf240064, 0x029abe33} }, -/**/ {{0xbbc1bbf0, 0x3ae68d18} },}, -/**/ {{{0xbf220051, 0x01e60cd1} }, -/**/ {{0x3bb1dcd9, 0x2b45cfcd} },}, -/**/ {{{0xbf200040, 0x01555d56} }, -/**/ {{0x3bcddd88, 0x863f53f6} },}, -/**/ {{{0xbf1c0062, 0x01c95eb7} }, -/**/ {{0x3bbd88f7, 0xaa4dfd9a} },}, -/**/ {{{0xbf180048, 0x01200510} }, -/**/ {{0xbb984d46, 0x4f3db50b} },}, -/**/ {{{0xbf140032, 0x00a6ad1c} }, -/**/ {{0x3bb2e44b, 0x28ff1135} },}, -/**/ {{{0xbf100020, 0x00555655} }, -/**/ {{0xbbb62224, 0xccd5f17f} },}, -/**/ {{{0xbf080024, 0x004800a2} }, -/**/ {{0xbb484d09, 0x8d690542} },}, -/**/ {{{0xbf000010, 0x00155575} }, -/**/ {{0xbba56222, 0x37779c0a} },}, -/**/ {{{0xbef00008, 0x00055559} }, -/**/ {{0xbb955622, 0x22cccd5f} },}, -/**/ {{{0x00000000, 0x00000000} }, -/**/ {{0x00000000, 0x00000000} },}, -/**/ {{{0x3eeffff0, 0x000aaaa3} }, -/**/ {{0xbb8553bb, 0xbd110fec} },}, -/**/ {{{0x3effffe0, 0x002aaa6b} }, -/**/ {{0xbb953bbb, 0xe6661d42} },}, -/**/ {{{0x3f07ffdc, 0x0047ff5e} }, -/**/ {{0x3b484c90, 0x0d69020e} },}, -/**/ {{{0x3f0fffc0, 0x00aaa8ab} }, -/**/ {{0xbba3bbc1, 0x10fec82c} },}, -/**/ {{{0x3f13ffce, 0x00a6a83a} }, -/**/ {{0xbbb2e45f, 0x81546808} },}, -/**/ {{{0x3f17ffb8, 0x011ffaf0} }, -/**/ {{0x3b984c53, 0x4f3d9b6a} },}, -/**/ {{{0x3f1bff9e, 0x01c94bf5} }, -/**/ {{0xbbbd8990, 0xdaa368ee} },}, -/**/ {{{0x3f1fff80, 0x02aa9aab} }, -/**/ {{0x3b910e66, 0x78af0afc} },}, -/**/ {{{0x3f21ffaf, 0x01e5f330} }, -/**/ {{0xbbb1df8d, 0x26467402} },}, -/**/ {{{0x3f23ff9c, 0x029a9723} }, -/**/ {{0x3bc1b965, 0x303b23b1} },}, -/**/ {{{0x3f25ff87, 0x037738be} }, -/**/ {{0xbbb787a3, 0x53d3dc06} },}, -/**/ {{{0x3f27ff70, 0x047fd782} }, -/**/ {{0xbbced098, 0xa5c0aff0} },}, -/**/ {{{0x3f29ff57, 0x05b872e4} }, -/**/ {{0x3bcbadd4, 0x81c30d42} },}, -/**/ {{{0x3f2bff3c, 0x07250a51} }, -/**/ {{0xbbc89dd6, 0xd6bad8c1} },}, -/**/ {{{0x3f2dff1f, 0x08c99d24} }, -/**/ {{0x3bb12609, 0xaede8ad0} },}, -/**/ {{{0x3f2fff00, 0x0aaa2ab1} }, -/**/ {{0x3ba0bbc0, 0x4dc4e3dc} },}, -/**/ {{{0x3f30ff6f, 0x8665591f} }, -/**/ {{0xbbd013d3, 0x80357b54} },}, -/**/ {{{0x3f31ff5e, 0x07979982} }, -/**/ {{0xbbce0e70, 0x4817ebcd} },}, -/**/ {{{0x3f32ff4b, 0x88edd619} }, -/**/ {{0xbbd72b9e, 0xc582abc3} },}, -/**/ {{{0x3f33ff38, 0x0a6a0e74} }, -/**/ {{0x3bdb81fc, 0xb95bc1fe} },}, -/**/ {{{0x3f34ff23, 0x8c0e4220} }, -/**/ {{0x3bcaed12, 0x9b549aae} },}, -/**/ {{{0x3f35ff0e, 0x0ddc70a1} }, -/**/ {{0x3bacf6f3, 0xd97a3c05} },}, -/**/ {{{0x3f36fef7, 0x8fd69976} }, -/**/ {{0x3bab2dcf, 0x6f810a3c} },}, -/**/ {{{0x3f37fee0, 0x11febc18} }, -/**/ {{0x3bd2b9bc, 0xf5d3f323} },}, -/**/ {{{0x3f38fec7, 0x9456d7fb} }, -/**/ {{0xbbbfb258, 0x6eaa1d6a} },}, -/**/ {{{0x3f39feae, 0x16e0ec8b} }, -/**/ {{0xbbb6137a, 0xceeb34b1} },}, -/**/ {{{0x3f3afe93, 0x999ef930} }, -/**/ {{0xbbde70e0, 0xdc639b08} },}, -/**/ {{{0x3f3bfe78, 0x1c92fd4a} }, -/**/ {{0xbbc4ed10, 0x713cc126} },}, -/**/ {{{0x3f3cfe5b, 0x9fbef835} }, -/**/ {{0xbb873d63, 0xcc0e81bd} },}, -/**/ {{{0x3f3dfe3e, 0x2324e946} }, -/**/ {{0x3bc09164, 0x62dd5deb} },}, -/**/ {{{0x3f3efe1f, 0xa6c6cfcc} }, -/**/ {{0x3bdac2da, 0x3512d15c} },}, -/**/ {{{0x3f3ffe00, 0x2aa6ab11} }, -/**/ {{0x3b999e2b, 0x62cc632d} },}, -/**/ {{{0x3f407eef, 0xd7633d2c} }, -/**/ {{0xbbebc98b, 0x63ff6024} },}, -/**/ {{{0x3f40fedf, 0x19941e6e} }, -/**/ {{0xbbb194c2, 0xe0aa6338} },}, -/**/ {{{0x3f417ecd, 0xdbe6f8eb} }, -/**/ {{0x3be4241b, 0x57b0f571} },}, -/**/ {{{0x3f41febc, 0x1e5ccc3c} }, -/**/ {{0x3bdc657d, 0x895d3592} },}, -/**/ {{{0x3f427ea9, 0xe0f697f6} }, -/**/ {{0x3be35a5d, 0x1c0ec17c} },}, -/**/ {{{0x3f42fe97, 0x23b55bac} }, -/**/ {{0x3bd6cfb7, 0x3e538464} },}, -/**/ {{{0x3f437e83, 0xe69a16ed} }, -/**/ {{0x3bee96f7, 0x7cef2478} },}, -/**/ {{{0x3f43fe70, 0x29a5c947} }, -/**/ {{0xbbd4d578, 0xbf46e36a} },}, -/**/ {{{0x3f447e5b, 0xecd97242} }, -/**/ {{0xbbc9eb66, 0x3ff7dd44} },}, -/**/ {{{0x3f44fe47, 0x30361165} }, -/**/ {{0x3be400d7, 0x7e93f2fd} },}, -/**/ {{{0x3f457e31, 0xf3bca635} }, -/**/ {{0xbbe0e2a2, 0xd375017f} },}, -/**/ {{{0x3f45fe1c, 0x376e3031} }, -/**/ {{0xbbd524eb, 0x8a5ae7f6} },}, -/**/ {{{0x3f467e05, 0xfb4baed7} }, -/**/ {{0x3be204fb, 0x4e85c4e9} },}, -/**/ {{{0x3f46fdef, 0x3f5621a3} }, -/**/ {{0xbbdf09d7, 0x34886d52} },}, -/**/ {{{0x3f477dd8, 0x038e880b} }, -/**/ {{0xbbb8900e, 0x14e596a3} },}, -/**/ {{{0x3f47fdc0, 0x47f5e185} }, -/**/ {{0xbbebfa5c, 0x57d202d3} },}, -/**/ {{{0x3f487da8, 0x0c8d2d81} }, -/**/ {{0x3be2f6ae, 0xd68c0614} },}, -/**/ {{{0x3f48fd8f, 0x51556b70} }, -/**/ {{0xbbd0f4f2, 0xe08fd201} },}, -/**/ {{{0x3f497d76, 0x164f9abc} }, -/**/ {{0x3b5296b7, 0xa871af60} },}, -/**/ {{{0x3f49fd5c, 0x5b7cbace} }, -/**/ {{0x3beb6ed4, 0x9f17d42d} },}, -/**/ {{{0x3f4a7d42, 0x20ddcb0d} }, -/**/ {{0xbbcb1149, 0x67c30397} },}, -/**/ {{{0x3f4afd27, 0x6673cada} }, -/**/ {{0x3bd32225, 0x45da594f} },}, -/**/ {{{0x3f4b7d0c, 0x2c3fb996} }, -/**/ {{0xbbb68893, 0x208d4630} },}, -/**/ {{{0x3f4bfcf0, 0x7242969d} }, -/**/ {{0x3bc5db4d, 0x2b3efe1c} },}, -/**/ {{{0x3f4c7cd4, 0x387d6149} }, -/**/ {{0x3be46eff, 0xed57d98a} },}, -/**/ {{{0x3f4cfcb7, 0x7ef118f1} }, -/**/ {{0x3becc554, 0x06f300fb} },}, -/**/ {{{0x3f4d7c9a, 0x459ebce9} }, -/**/ {{0x3be1d251, 0x13638eb6} },}, -/**/ {{{0x3f4dfc7c, 0x8c874c82} }, -/**/ {{0xbbe863e9, 0xd57a176f} },}, -/**/ {{{0x3f4e7c5e, 0x53abc708} }, -/**/ {{0x3be2d95c, 0x9528e50d} },}, -/**/ {{{0x3f4efc3f, 0x9b0d2bc8} }, -/**/ {{0x3bd1e8e8, 0xa5f5b8b7} },}, -/**/ {{{0x3f4f7c20, 0x62ac7a09} }, -/**/ {{0x3b5c8123, 0x17802a46} },}, -/**/ {{{0x3f4ffc00, 0xaa8ab110} }, -/**/ {{0xbbe0fecb, 0xeb9b6cdb} },}, -/**/ {{{0x3f503df0, 0x3954680f} }, -/**/ {{0x3bdac89b, 0x1c693678} },}, -/**/ {{{0x3f507ddf, 0xdd83eb3a} }, -/**/ {{0xbbf638f6, 0x0a75ad5f} },}, -/**/ {{{0x3f50bdcf, 0x41d461a5} }, -/**/ {{0x3bfd4bc9, 0x45f05b10} },}, -/**/ {{{0x3f50fdbe, 0x66464aef} }, -/**/ {{0xbbbd0554, 0x6abbf59c} },}, -/**/ {{{0x3f513dad, 0x4ada26b1} }, -/**/ {{0x3be38c65, 0x6036fe6f} },}, -/**/ {{{0x3f517d9b, 0xef907485} }, -/**/ {{0x3bfdc8a1, 0xf158bbc3} },}, -/**/ {{{0x3f51bd8a, 0x5469b404} }, -/**/ {{0xbbdea231, 0x55632e3f} },}, -/**/ {{{0x3f51fd78, 0x796664c3} }, -/**/ {{0xbbe00849, 0x2edb73c2} },}, -/**/ {{{0x3f523d66, 0x5e870657} }, -/**/ {{0x3bfba943, 0x0789343e} },}, -/**/ {{{0x3f527d54, 0x03cc1855} }, -/**/ {{0x3bc5f644, 0xeafafc52} },}, -/**/ {{{0x3f52bd41, 0x69361a4e} }, -/**/ {{0xbbf2f743, 0xa4a6e79f} },}, -/**/ {{{0x3f52fd2e, 0x8ec58bd2} }, -/**/ {{0xbbd4f786, 0x5ceb1abf} },}, -/**/ {{{0x3f533d1b, 0x747aec71} }, -/**/ {{0xbbf369e3, 0x49dc497d} },}, -/**/ {{{0x3f537d08, 0x1a56bbb8} }, -/**/ {{0xbbfc5e6f, 0x3726b14a} },}, -/**/ {{{0x3f53bcf4, 0x80597933} }, -/**/ {{0xbbfe8b82, 0x808f75a7} },}, -/**/ {{{0x3f53fce0, 0xa683a46c} }, -/**/ {{0x3be02719, 0x9cd06ae6} },}, -/**/ {{{0x3f543ccc, 0x8cd5bced} }, -/**/ {{0x3bf9f98d, 0x758f80f8} },}, -/**/ {{{0x3f547cb8, 0x3350423e} }, -/**/ {{0xbbd79c3d, 0x48401f45} },}, -/**/ {{{0x3f54bca3, 0x99f3b3e4} }, -/**/ {{0xbbf422b8, 0x2fba8948} },}, -/**/ {{{0x3f54fc8e, 0xc0c09163} }, -/**/ {{0x3bf32cc1, 0xf4044be8} },}, -/**/ {{{0x3f553c79, 0xa7b75a40} }, -/**/ {{0xbbe72cac, 0xf2249008} },}, -/**/ {{{0x3f557c64, 0x4ed88dfb} }, -/**/ {{0xbbe7183c, 0x459a204f} },}, -/**/ {{{0x3f55bc4e, 0xb624ac14} }, -/**/ {{0x3bf8aa64, 0xba26d3d7} },}, -/**/ {{{0x3f55fc38, 0xdd9c340b} }, -/**/ {{0x3bdbb2ff, 0x45fa193c} },}, -/**/ {{{0x3f563c22, 0xc53fa55c} }, -/**/ {{0x3bd67249, 0x0484397b} },}, -/**/ {{{0x3f567c0c, 0x6d0f7f83} }, -/**/ {{0xbbd183d7, 0xf1e73188} },}, -/**/ {{{0x3f56bbf5, 0xd50c41fa} }, -/**/ {{0xbbef433d, 0x4ab68187} },}, -/**/ {{{0x3f56fbde, 0xfd366c39} }, -/**/ {{0x3be796b8, 0x66e09e58} },}, -/**/ {{{0x3f573bc7, 0xe58e7db8} }, -/**/ {{0x3bf65ec5, 0x81e6e7e6} },}, -/**/ {{{0x3f577bb0, 0x8e14f5ed} }, -/**/ {{0xbbdb944d, 0xa9463a9c} },}, -/**/ {{{0x3f57bb98, 0xf6ca544b} }, -/**/ {{0xbbc396ec, 0xc5eda344} },}, -/**/ {{{0x3f57fb81, 0x1faf1845} }, -/**/ {{0x3beb9e6d, 0xbb624f97} },}, -/**/ {{{0x3f583b69, 0x08c3c14d} }, -/**/ {{0xbbe6ee13, 0xe6295bf2} },}, -/**/ {{{0x3f587b50, 0xb208ced1} }, -/**/ {{0x3bfcf1a5, 0x6ca19875} },}, -/**/ {{{0x3f58bb38, 0x1b7ec041} }, -/**/ {{0x3bf2d181, 0x07b4fc7e} },}, -/**/ {{{0x3f58fb1f, 0x45261509} }, -/**/ {{0x3bc419c5, 0x21bad336} },}, -/**/ {{{0x3f593b06, 0x2eff4c94} }, -/**/ {{0xbbdc2a4c, 0x700b305b} },}, -/**/ {{{0x3f597aec, 0xd90ae64c} }, -/**/ {{0xbbfc53d3, 0xa23f359c} },}, -/**/ {{{0x3f59bad3, 0x43496198} }, -/**/ {{0x3bf0c270, 0xaed6b50f} },}, -/**/ {{{0x3f59fab9, 0x6dbb3de1} }, -/**/ {{0xbbf11464, 0x7a8be031} },}, -/**/ {{{0x3f5a3a9f, 0x5860fa8a} }, -/**/ {{0x3beae9e7, 0x470dbe32} },}, -/**/ {{{0x3f5a7a85, 0x033b16f8} }, -/**/ {{0x3bfc4721, 0xda1f8579} },}, -/**/ {{{0x3f5aba6a, 0x6e4a128e} }, -/**/ {{0xbbf41852, 0x029258ce} },}, -/**/ {{{0x3f5afa4f, 0x998e6cab} }, -/**/ {{0xbbf28584, 0x2eb18782} },}, -/**/ {{{0x3f5b3a34, 0x8508a4af} }, -/**/ {{0xbbea7970, 0x23241a2c} },}, -/**/ {{{0x3f5b7a19, 0x30b939f8} }, -/**/ {{0xbbf1d8db, 0x600551b6} },}, -/**/ {{{0x3f5bb9fd, 0x9ca0abe2} }, -/**/ {{0xbbeaa412, 0x8c26cc71} },}, -/**/ {{{0x3f5bf9e1, 0xc8bf79c8} }, -/**/ {{0xbbe7f81b, 0x30427cfc} },}, -/**/ {{{0x3f5c39c5, 0xb5162303} }, -/**/ {{0x3bd9ec5f, 0xd1f134e1} },}, -/**/ {{{0x3f5c79a9, 0x61a526eb} }, -/**/ {{0x3bff0cb0, 0x8980e47d} },}, -/**/ {{{0x3f5cb98c, 0xce6d04d7} }, -/**/ {{0x3bf35aca, 0xe84ca4e2} },}, -/**/ {{{0x3f5cf96f, 0xfb6e3c1b} }, -/**/ {{0x3bf9b1b8, 0x1b0bd69f} },}, -/**/ {{{0x3f5d3952, 0xe8a94c0b} }, -/**/ {{0x3be21310, 0x3ce51832} },}, -/**/ {{{0x3f5d7935, 0x961eb3f8} }, -/**/ {{0x3bf90786, 0x840c58ce} },}, -/**/ {{{0x3f5db918, 0x03cef334} }, -/**/ {{0xbbfe0048, 0xf2dfb3f4} },}, -/**/ {{{0x3f5df8fa, 0x31ba890b} }, -/**/ {{0x3bfcf652, 0x3e295bec} },}, -/**/ {{{0x3f5e38dc, 0x1fe1f4ce} }, -/**/ {{0xbbfc5ebe, 0x151c9300} },}, -/**/ {{{0x3f5e78bd, 0xce45b5c6} }, -/**/ {{0xbbef2cc4, 0x8a25b9c7} },}, -/**/ {{{0x3f5eb89f, 0x3ce64b3e} }, -/**/ {{0x3bfe6d27, 0xa6fea7bd} },}, -/**/ {{{0x3f5ef880, 0x6bc43481} }, -/**/ {{0xbbf68037, 0x914a6dab} },}, -/**/ {{{0x3f5f3861, 0x5adff0d4} }, -/**/ {{0xbbf1d2f3, 0xf909e0e6} },}, -/**/ {{{0x3f5f7842, 0x0a39ff7e} }, -/**/ {{0xbbf64661, 0xff1e1f71} },}, -/**/ {{{0x3f5fb822, 0x79d2dfc3} }, -/**/ {{0xbbd76ce8, 0x5a6f9e9a} },}, -/**/ {{{0x3f5ff802, 0xa9ab10e6} }, -/**/ {{0x3bfe29e3, 0xa153e3b2} },}, -/**/ {{{0x3f601bf1, 0x4ce18915} }, -/**/ {{0xbbe57c28, 0xa3a73044} },}, -/**/ {{{0x3f603be1, 0x250db166} }, -/**/ {{0x3c0fd271, 0xc1ad9590} },}, -/**/ {{{0x3f605bd0, 0xdd5a4107} }, -/**/ {{0x3bfe4b5d, 0xc424c676} },}, -/**/ {{{0x3f607bc0, 0x75c77796} }, -/**/ {{0xbc068804, 0xc0eff1ba} },}, -/**/ {{{0x3f609baf, 0xee5594b0} }, -/**/ {{0xbc0ff798, 0x51dbded5} },}, -/**/ {{{0x3f60bb9f, 0x4704d7f2} }, -/**/ {{0xbbf70ef4, 0x2d5aba70} },}, -/**/ {{{0x3f60db8e, 0x7fd580f9} }, -/**/ {{0xbbeccb65, 0x7ae804b5} },}, -/**/ {{{0x3f60fb7d, 0x98c7cf60} }, -/**/ {{0x3bfede2f, 0x1775134d} },}, -/**/ {{{0x3f611b6c, 0x91dc02c3} }, -/**/ {{0xbc04d41e, 0x91ca4a67} },}, -/**/ {{{0x3f613b5b, 0x6b125aba} }, -/**/ {{0x3bfe6d0c, 0x4a12201d} },}, -/**/ {{{0x3f615b4a, 0x246b16e0} }, -/**/ {{0x3bfe507d, 0x4d4238d3} },}, -/**/ {{{0x3f617b38, 0xbde676cd} }, -/**/ {{0x3bfe0272, 0x0640462a} },}, -/**/ {{{0x3f619b27, 0x3784ba19} }, -/**/ {{0x3bd94ab3, 0x02285659} },}, -/**/ {{{0x3f61bb15, 0x9146205b} }, -/**/ {{0xbbff1e2e, 0x1cc35b7b} },}, -/**/ {{{0x3f61db03, 0xcb2ae929} }, -/**/ {{0xbc03ee8e, 0x12f6bf8d} },}, -/**/ {{{0x3f61faf1, 0xe5335418} }, -/**/ {{0x3c0bae5f, 0x7b7d619b} },}, -/**/ {{{0x3f621adf, 0xdf5fa0bf} }, -/**/ {{0xbbf5546a, 0xb3b731b0} },}, -/**/ {{{0x3f623acd, 0xb9b00eb0} }, -/**/ {{0xbbafb2b0, 0x105fd253} },}, -/**/ {{{0x3f625abb, 0x7424dd7f} }, -/**/ {{0x3c011647, 0xca53444b} },}, -/**/ {{{0x3f627aa9, 0x0ebe4cbf} }, -/**/ {{0x3c01678f, 0x592f3be8} },}, -/**/ {{{0x3f629a96, 0x897c9c02} }, -/**/ {{0xbbef2b12, 0x4347451d} },}, -/**/ {{{0x3f62ba83, 0xe4600ad8} }, -/**/ {{0x3bfb5bb7, 0xb2a477bc} },}, -/**/ {{{0x3f62da71, 0x1f68d8d3} }, -/**/ {{0xbc0590e1, 0x7a5822e4} },}, -/**/ {{{0x3f62fa5e, 0x3a974581} }, -/**/ {{0xbbf0f2e5, 0x53123101} },}, -/**/ {{{0x3f631a4b, 0x35eb9072} }, -/**/ {{0xbc018db4, 0x0e3f5fde} },}, -/**/ {{{0x3f633a38, 0x1165f933} }, -/**/ {{0x3c0921d5, 0x8d0afb38} },}, -/**/ {{{0x3f635a24, 0xcd06bf53} }, -/**/ {{0x3c01f6ba, 0xb5791b80} },}, -/**/ {{{0x3f637a11, 0x68ce225e} }, -/**/ {{0x3bde2af8, 0xa1894236} },}, -/**/ {{{0x3f6399fd, 0xe4bc61e0} }, -/**/ {{0xbc062a48, 0xd0f06ff3} },}, -/**/ {{{0x3f63b9ea, 0x40d1bd63} }, -/**/ {{0x3bffc80c, 0x4b4f9c11} },}, -/**/ {{{0x3f63d9d6, 0x7d0e7473} }, -/**/ {{0x3c02219b, 0x6a92c891} },}, -/**/ {{{0x3f63f9c2, 0x9972c699} }, -/**/ {{0x3c0d3590, 0x790ade9e} },}, -/**/ {{{0x3f6419ae, 0x95fef35f} }, -/**/ {{0xbc01c279, 0x792a458c} },}, -/**/ {{{0x3f64399a, 0x72b33a4b} }, -/**/ {{0x3c02ce64, 0x327bffae} },}, -/**/ {{{0x3f645986, 0x2f8fdae7} }, -/**/ {{0xbc070aec, 0xd231155c} },}, -/**/ {{{0x3f647971, 0xcc9514b7} }, -/**/ {{0x3c0f373d, 0xe4bbf776} },}, -/**/ {{{0x3f64995d, 0x49c32744} }, -/**/ {{0xbbf6d7e5, 0xbf22b2a7} },}, -/**/ {{{0x3f64b948, 0xa71a5211} }, -/**/ {{0xbbedec69, 0x64fe2936} },}, -/**/ {{{0x3f64d933, 0xe49ad4a3} }, -/**/ {{0x3bf5fc4b, 0xabee4257} },}, -/**/ {{{0x3f64f91f, 0x0244ee7e} }, -/**/ {{0x3c0c6fe3, 0x3cd1474f} },}, -/**/ {{{0x3f65190a, 0x0018df26} }, -/**/ {{0xbc023957, 0xd11e7fa5} },}, -/**/ {{{0x3f6538f4, 0xde16e61b} }, -/**/ {{0x3c006c31, 0x55380346} },}, -/**/ {{{0x3f6558df, 0x9c3f42e1} }, -/**/ {{0xbc09b7d4, 0xc4a5134c} },}, -/**/ {{{0x3f6578ca, 0x3a9234f7} }, -/**/ {{0xbc0e3f10, 0x2772c19c} },}, -/**/ {{{0x3f6598b4, 0xb90ffbdd} }, -/**/ {{0x3be6f110, 0x5592b468} },}, -/**/ {{{0x3f65b89f, 0x17b8d714} }, -/**/ {{0xbc0a5fea, 0xb251ace2} },}, -/**/ {{{0x3f65d889, 0x568d0619} }, -/**/ {{0xbc0aacc9, 0x315da285} },}, -/**/ {{{0x3f65f873, 0x758cc86a} }, -/**/ {{0xbbeb0782, 0xba64d81a} },}, -/**/ {{{0x3f66185d, 0x74b85d85} }, -/**/ {{0xbc09b459, 0x8e1eb3fa} },}, -/**/ {{{0x3f663847, 0x541004e5} }, -/**/ {{0x3bce9c22, 0x1d86e863} },}, -/**/ {{{0x3f665831, 0x1393fe07} }, -/**/ {{0xbbfbeb77, 0xcf37ee90} },}, -/**/ {{{0x3f66781a, 0xb3448865} }, -/**/ {{0xbc02dc68, 0xc252e3c9} },}, -/**/ {{{0x3f669804, 0x3321e379} }, -/**/ {{0xbbe73a0b, 0xb40b3741} },}, - }; - -#else -#ifdef LITTLE_ENDI - static const number - Iu[182] = { /* 1/ui */ -/**/ {{0xd1537290, 0x3ff6a13c} }, -/**/ {{0x16816817, 0x3ff68168} }, -/**/ {{0x6a5122f9, 0x3ff661ec} }, -/**/ {{0x590b2164, 0x3ff642c8} }, -/**/ {{0x77016240, 0x3ff623fa} }, -/**/ {{0x60581606, 0x3ff60581} }, -/**/ {{0xb8d015e7, 0x3ff5e75b} }, -/**/ {{0x2b931057, 0x3ff5c988} }, -/**/ {{0x6b015ac0, 0x3ff5ac05} }, -/**/ {{0x308158ed, 0x3ff58ed2} }, -/**/ {{0x3c506b3a, 0x3ff571ed} }, -/**/ {{0x55555555, 0x3ff55555} }, -/**/ {{0x48f40feb, 0x3ff53909} }, -/**/ {{0xeae2f815, 0x3ff51d07} }, -/**/ {{0x15015015, 0x3ff50150} }, -/**/ {{0xa72f0539, 0x3ff4e5e0} }, -/**/ {{0x8725af6e, 0x3ff4cab8} }, -/**/ {{0xa052bf5b, 0x3ff4afd6} }, -/**/ {{0xe3b2d067, 0x3ff49539} }, -/**/ {{0x47ae147b, 0x3ff47ae1} }, -/**/ {{0xc7f5cf9a, 0x3ff460cb} }, -/**/ {{0x6562d9fb, 0x3ff446f8} }, -/**/ {{0x25d51f87, 0x3ff42d66} }, -/**/ {{0x14141414, 0x3ff41414} }, -/**/ {{0x3fb013fb, 0x3ff3fb01} }, -/**/ {{0xbce4a902, 0x3ff3e22c} }, -/**/ {{0xa47babe7, 0x3ff3c995} }, -/**/ {{0x13b13b14, 0x3ff3b13b} }, -/**/ {{0x2c187f63, 0x3ff3991c} }, -/**/ {{0x13813814, 0x3ff38138} }, -/**/ {{0xf3de0748, 0x3ff3698d} }, -/**/ {{0xfb2b78c1, 0x3ff3521c} }, -/**/ {{0x5b57bcb2, 0x3ff33ae4} }, -/**/ {{0x4a2b10bf, 0x3ff323e3} }, -/**/ {{0x0130d190, 0x3ff30d19} }, -/**/ {{0xbda12f68, 0x3ff2f684} }, -/**/ {{0xc04b8097, 0x3ff2e025} }, -/**/ {{0x4d812ca0, 0x3ff2c9fb} }, -/**/ {{0xad012b40, 0x3ff2b404} }, -/**/ {{0x29e4129e, 0x3ff29e41} }, -/**/ {{0x1288b013, 0x3ff288b0} }, -/**/ {{0xb8812735, 0x3ff27350} }, -/**/ {{0x708092f1, 0x3ff25e22} }, -/**/ {{0x92492492, 0x3ff24924} }, -/**/ {{0x789abcdf, 0x3ff23456} }, -/**/ {{0x8121fb78, 0x3ff21fb7} }, -/**/ {{0x0c67c0d9, 0x3ff20b47} }, -/**/ {{0x7dc11f70, 0x3ff1f704} }, -/**/ {{0x3b3fb874, 0x3ff1e2ef} }, -/**/ {{0xada2811d, 0x3ff1cf06} }, -/**/ {{0x4046ed29, 0x3ff1bb4a} }, -/**/ {{0x611a7b96, 0x3ff1a7b9} }, -/**/ {{0x808ca29c, 0x3ff19453} }, -/**/ {{0x11811812, 0x3ff18118} }, -/**/ {{0x89427379, 0x3ff16e06} }, -/**/ {{0x5f75270d, 0x3ff15b1e} }, -/**/ {{0x0e0acd3b, 0x3ff1485f} }, -/**/ {{0x1135c811, 0x3ff135c8} }, -/**/ {{0xe75d3033, 0x3ff12358} }, -/**/ {{0x11111111, 0x3ff11111} }, -/**/ {{0x10fef011, 0x3ff0fef0} }, -/**/ {{0x6be69c90, 0x3ff0ecf5} }, -/**/ {{0xa88f4696, 0x3ff0db20} }, -/**/ {{0x4fbcda3b, 0x3ff0c971} }, -/**/ {{0xec259dc8, 0x3ff0b7e6} }, -/**/ {{0x0a6810a7, 0x3ff0a681} }, -/**/ {{0x39010954, 0x3ff0953f} }, -/**/ {{0x08421084, 0x3ff08421} }, -/**/ {{0x0a47f7c6, 0x3ff07326} }, -/**/ {{0xd2f1a9fc, 0x3ff0624d} }, -/**/ {{0xf7d73404, 0x3ff05197} }, -/**/ {{0x10410410, 0x3ff04104} }, -/**/ {{0xb51f5e1a, 0x3ff03091} }, -/**/ {{0x81020408, 0x3ff02040} }, -/**/ {{0x10101010, 0x3ff01010} }, -/**/ {{0x00000000, 0x3ff00000} }, -/**/ {{0xe01fe020, 0x3fefe01f} }, -/**/ {{0x01fc07f0, 0x3fefc07f} }, -/**/ {{0xaa01fa12, 0x3fefa11c} }, -/**/ {{0x1f81f820, 0x3fef81f8} }, -/**/ {{0xaca0dbb5, 0x3fef6310} }, -/**/ {{0x9e4a4271, 0x3fef4465} }, -/**/ {{0x44230ab5, 0x3fef25f6} }, -/**/ {{0xf07c1f08, 0x3fef07c1} }, -/**/ {{0xf8458e02, 0x3feee9c7} }, -/**/ {{0xb301ecc0, 0x3feecc07} }, -/**/ {{0x7aba01eb, 0x3feeae80} }, -/**/ {{0xabf0b767, 0x3fee9131} }, -/**/ {{0xa59750e4, 0x3fee741a} }, -/**/ {{0xc901e574, 0x3fee573a} }, -/**/ {{0x79dc1a73, 0x3fee3a91} }, -/**/ {{0x1e1e1e1e, 0x3fee1e1e} }, -/**/ {{0x1e01e01e, 0x3fee01e0} }, -/**/ {{0xe3f8868a, 0x3fede5d6} }, -/**/ {{0xdca01dca, 0x3fedca01} }, -/**/ {{0x76b981db, 0x3fedae60} }, -/**/ {{0x231e7f8a, 0x3fed92f2} }, -/**/ {{0x54b82c34, 0x3fed77b6} }, -/**/ {{0x807572b2, 0x3fed5cac} }, -/**/ {{0x1d41d41d, 0x3fed41d4} }, -/**/ {{0xa3fc5b1a, 0x3fed272c} }, -/**/ {{0x8f6ec074, 0x3fed0cb5} }, -/**/ {{0x5c44bfc6, 0x3fecf26e} }, -/**/ {{0x89039b0b, 0x3fecd856} }, -/**/ {{0x9601cbe7, 0x3fecbe6d} }, -/**/ {{0x055ee191, 0x3feca4b3} }, -/**/ {{0x5afb8a42, 0x3fec8b26} }, -/**/ {{0x1c71c71c, 0x3fec71c7} }, -/**/ {{0xd10d4986, 0x3fec5894} }, -/**/ {{0x01c3f8f0, 0x3fec3f8f} }, -/**/ {{0x392ea01c, 0x3fec26b5} }, -/**/ {{0x0381c0e0, 0x3fec0e07} }, -/**/ {{0xee868d8b, 0x3febf583} }, -/**/ {{0x899406f7, 0x3febdd2b} }, -/**/ {{0x65883e7b, 0x3febc4fd} }, -/**/ {{0x14c1bad0, 0x3febacf9} }, -/**/ {{0x2b18ff23, 0x3feb951e} }, -/**/ {{0x3dda338b, 0x3feb7d6c} }, -/**/ {{0xe3beee05, 0x3feb65e2} }, -/**/ {{0xb4e81b4f, 0x3feb4e81} }, -/**/ {{0x4ad806ce, 0x3feb3748} }, -/**/ {{0x406c80d9, 0x3feb2036} }, -/**/ {{0x31d922a4, 0x3feb094b} }, -/**/ {{0xbca1af28, 0x3feaf286} }, -/**/ {{0x7f94905e, 0x3feadbe8} }, -/**/ {{0x1ac5701b, 0x3feac570} }, -/**/ {{0x2f87ebfd, 0x3feaaf1d} }, -/**/ {{0x606a63be, 0x3fea98ef} }, -/**/ {{0x5130e159, 0x3fea82e6} }, -/**/ {{0xa6d01a6d, 0x3fea6d01} }, -/**/ {{0x07688a4a, 0x3fea5741} }, -/**/ {{0x1a41a41a, 0x3fea41a4} }, -/**/ {{0x87c51ca0, 0x3fea2c2a} }, -/**/ {{0xf97a4b02, 0x3fea16d3} }, -/**/ {{0x1a01a01a, 0x3fea01a0} }, -/**/ {{0x951033d9, 0x3fe9ec8e} }, -/**/ {{0x176b682d, 0x3fe9d79f} }, -/**/ {{0x4ee4a102, 0x3fe9c2d1} }, -/**/ {{0xea5510da, 0x3fe9ae24} }, -/**/ {{0x9999999a, 0x3fe99999} }, -/**/ {{0x0d8ec0ff, 0x3fe9852f} }, -/**/ {{0xf80cb872, 0x3fe970e4} }, -/**/ {{0x0be377ae, 0x3fe95cbb} }, -/**/ {{0xfcd6e9e0, 0x3fe948b0} }, -/**/ {{0x7f9b2ce6, 0x3fe934c6} }, -/**/ {{0x49d0e229, 0x3fe920fb} }, -/**/ {{0x120190d5, 0x3fe90d4f} }, -/**/ {{0x8f9c18fa, 0x3fe8f9c1} }, -/**/ {{0x7af1373f, 0x3fe8e652} }, -/**/ {{0x8d3018d3, 0x3fe8d301} }, -/**/ {{0x8062ff3a, 0x3fe8bfce} }, -/**/ {{0x0f6bf3aa, 0x3fe8acb9} }, -/**/ {{0xf601899c, 0x3fe899c0} }, -/**/ {{0xf0abb04a, 0x3fe886e5} }, -/**/ {{0xbcc092b9, 0x3fe87427} }, -/**/ {{0x18618618, 0x3fe86186} }, -/**/ {{0xc2780614, 0x3fe84f00} }, -/**/ {{0x7ab2bedd, 0x3fe83c97} }, -/**/ {{0x0182a4a0, 0x3fe82a4a} }, -/**/ {{0x18181818, 0x3fe81818} }, -/**/ {{0x80601806, 0x3fe80601} }, -/**/ {{0xfd017f40, 0x3fe7f405} }, -/**/ {{0x515a4f1d, 0x3fe7e225} }, -/**/ {{0x417d05f4, 0x3fe7d05f} }, -/**/ {{0x922e017c, 0x3fe7beb3} }, -/**/ {{0x08e0ecc3, 0x3fe7ad22} }, -/**/ {{0x6bb6398b, 0x3fe79baa} }, -/**/ {{0x8178a4c8, 0x3fe78a4c} }, -/**/ {{0x119ac60d, 0x3fe77908} }, -/**/ {{0xe434a9b1, 0x3fe767dc} }, -/**/ {{0xc201756d, 0x3fe756ca} }, -/**/ {{0x745d1746, 0x3fe745d1} }, -/**/ {{0xc541fe8d, 0x3fe734f0} }, -/**/ {{0x7f46debc, 0x3fe72428} }, -/**/ {{0x6d9c7c09, 0x3fe71378} }, -/**/ {{0x5c0b8170, 0x3fe702e0} }, -/**/ {{0x16f26017, 0x3fe6f260} }, -/**/ {{0x6b4337c7, 0x3fe6e1f7} }, -/**/ {{0x2681c861, 0x3fe6d1a6} }, -/**/ {{0x16c16c17, 0x3fe6c16c} }, -/**/ {{0x0aa31a3d, 0x3fe6b149} }, -/**/ {{0xd1537290, 0x3fe6a13c} }, - }; - - static const number - Iv[362] = { /* 1/vj */ -/**/ {{0xee93bfe3, 0x3ff00b47} }, -/**/ {{0xd80c106f, 0x3ff00b37} }, -/**/ {{0xc1a4a47a, 0x3ff00b27} }, -/**/ {{0xab5d7ba2, 0x3ff00b17} }, -/**/ {{0x95369587, 0x3ff00b07} }, -/**/ {{0x7f2ff1c6, 0x3ff00af7} }, -/**/ {{0x69499000, 0x3ff00ae7} }, -/**/ {{0x53836fd3, 0x3ff00ad7} }, -/**/ {{0x3ddd90dd, 0x3ff00ac7} }, -/**/ {{0x2857f2bf, 0x3ff00ab7} }, -/**/ {{0x12f29517, 0x3ff00aa7} }, -/**/ {{0xfdad7784, 0x3ff00a96} }, -/**/ {{0xe88899a5, 0x3ff00a86} }, -/**/ {{0xd383fb19, 0x3ff00a76} }, -/**/ {{0xbe9f9b7f, 0x3ff00a66} }, -/**/ {{0xa9db7a76, 0x3ff00a56} }, -/**/ {{0x9537979d, 0x3ff00a46} }, -/**/ {{0x80b3f293, 0x3ff00a36} }, -/**/ {{0x6c508af8, 0x3ff00a26} }, -/**/ {{0x580d606a, 0x3ff00a16} }, -/**/ {{0x43ea7288, 0x3ff00a06} }, -/**/ {{0x2fe7c0f1, 0x3ff009f6} }, -/**/ {{0x1c054b44, 0x3ff009e6} }, -/**/ {{0x08431122, 0x3ff009d6} }, -/**/ {{0xf4a11227, 0x3ff009c5} }, -/**/ {{0xe11f4df4, 0x3ff009b5} }, -/**/ {{0xcdbdc428, 0x3ff009a5} }, -/**/ {{0xba7c7462, 0x3ff00995} }, -/**/ {{0xa75b5e40, 0x3ff00985} }, -/**/ {{0x945a8162, 0x3ff00975} }, -/**/ {{0x8179dd68, 0x3ff00965} }, -/**/ {{0x6eb971ef, 0x3ff00955} }, -/**/ {{0x5c193e98, 0x3ff00945} }, -/**/ {{0x49994301, 0x3ff00935} }, -/**/ {{0x37397eca, 0x3ff00925} }, -/**/ {{0x24f9f192, 0x3ff00915} }, -/**/ {{0x12da9af7, 0x3ff00905} }, -/**/ {{0x00db7a99, 0x3ff008f5} }, -/**/ {{0xeefc9018, 0x3ff008e4} }, -/**/ {{0xdd3ddb12, 0x3ff008d4} }, -/**/ {{0xcb9f5b26, 0x3ff008c4} }, -/**/ {{0xba210ff4, 0x3ff008b4} }, -/**/ {{0xa8c2f91a, 0x3ff008a4} }, -/**/ {{0x97851639, 0x3ff00894} }, -/**/ {{0x866766ef, 0x3ff00884} }, -/**/ {{0x7569eadb, 0x3ff00874} }, -/**/ {{0x648ca19d, 0x3ff00864} }, -/**/ {{0x53cf8ad3, 0x3ff00854} }, -/**/ {{0x4332a61e, 0x3ff00844} }, -/**/ {{0x32b5f31b, 0x3ff00834} }, -/**/ {{0x2259716c, 0x3ff00824} }, -/**/ {{0x121d20ad, 0x3ff00814} }, -/**/ {{0x02010080, 0x3ff00804} }, -/**/ {{0xf2051083, 0x3ff007f3} }, -/**/ {{0xe2295056, 0x3ff007e3} }, -/**/ {{0xd26dbf97, 0x3ff007d3} }, -/**/ {{0xc2d25de5, 0x3ff007c3} }, -/**/ {{0xb3572ae2, 0x3ff007b3} }, -/**/ {{0xa3fc262a, 0x3ff007a3} }, -/**/ {{0x94c14f5f, 0x3ff00793} }, -/**/ {{0x85a6a61e, 0x3ff00783} }, -/**/ {{0x76ac2a08, 0x3ff00773} }, -/**/ {{0x67d1dabb, 0x3ff00763} }, -/**/ {{0x5917b7d7, 0x3ff00753} }, -/**/ {{0x4a7dc0fb, 0x3ff00743} }, -/**/ {{0x3c03f5c7, 0x3ff00733} }, -/**/ {{0x2daa55da, 0x3ff00723} }, -/**/ {{0x1f70e0d3, 0x3ff00713} }, -/**/ {{0x11579652, 0x3ff00703} }, -/**/ {{0x035e75f5, 0x3ff006f3} }, -/**/ {{0xf5857f5d, 0x3ff006e2} }, -/**/ {{0xe7ccb228, 0x3ff006d2} }, -/**/ {{0xda340df6, 0x3ff006c2} }, -/**/ {{0xccbb9266, 0x3ff006b2} }, -/**/ {{0xbf633f18, 0x3ff006a2} }, -/**/ {{0xb22b13ab, 0x3ff00692} }, -/**/ {{0xa5130fbe, 0x3ff00682} }, -/**/ {{0x981b32f1, 0x3ff00672} }, -/**/ {{0x8b437ce4, 0x3ff00662} }, -/**/ {{0x7e8bed35, 0x3ff00652} }, -/**/ {{0x71f48383, 0x3ff00642} }, -/**/ {{0x657d3f70, 0x3ff00632} }, -/**/ {{0x59262098, 0x3ff00622} }, -/**/ {{0x4cef269e, 0x3ff00612} }, -/**/ {{0x40d8511e, 0x3ff00602} }, -/**/ {{0x34e19fba, 0x3ff005f2} }, -/**/ {{0x290b1211, 0x3ff005e2} }, -/**/ {{0x1d54a7c1, 0x3ff005d2} }, -/**/ {{0x11be606b, 0x3ff005c2} }, -/**/ {{0x06483bad, 0x3ff005b2} }, -/**/ {{0xfaf23928, 0x3ff005a1} }, -/**/ {{0xefbc587b, 0x3ff00591} }, -/**/ {{0xe4a69945, 0x3ff00581} }, -/**/ {{0xd9b0fb25, 0x3ff00571} }, -/**/ {{0xcedb7dbc, 0x3ff00561} }, -/**/ {{0xc42620a9, 0x3ff00551} }, -/**/ {{0xb990e38b, 0x3ff00541} }, -/**/ {{0xaf1bc601, 0x3ff00531} }, -/**/ {{0xa4c6c7ac, 0x3ff00521} }, -/**/ {{0x9a91e82a, 0x3ff00511} }, -/**/ {{0x907d271c, 0x3ff00501} }, -/**/ {{0x86888421, 0x3ff004f1} }, -/**/ {{0x7cb3fed8, 0x3ff004e1} }, -/**/ {{0x72ff96e0, 0x3ff004d1} }, -/**/ {{0x696b4bdb, 0x3ff004c1} }, -/**/ {{0x5ff71d66, 0x3ff004b1} }, -/**/ {{0x56a30b21, 0x3ff004a1} }, -/**/ {{0x4d6f14ad, 0x3ff00491} }, -/**/ {{0x445b39a8, 0x3ff00481} }, -/**/ {{0x3b6779b3, 0x3ff00471} }, -/**/ {{0x3293d46c, 0x3ff00461} }, -/**/ {{0x29e04974, 0x3ff00451} }, -/**/ {{0x214cd869, 0x3ff00441} }, -/**/ {{0x18d980ed, 0x3ff00431} }, -/**/ {{0x1086429d, 0x3ff00421} }, -/**/ {{0x08531d1a, 0x3ff00411} }, -/**/ {{0x00401004, 0x3ff00401} }, -/**/ {{0xf84d1afa, 0x3ff003f0} }, -/**/ {{0xf07a3d9b, 0x3ff003e0} }, -/**/ {{0xe8c77787, 0x3ff003d0} }, -/**/ {{0xe134c85f, 0x3ff003c0} }, -/**/ {{0xd9c22fc1, 0x3ff003b0} }, -/**/ {{0xd26fad4d, 0x3ff003a0} }, -/**/ {{0xcb3d40a3, 0x3ff00390} }, -/**/ {{0xc42ae963, 0x3ff00380} }, -/**/ {{0xbd38a72c, 0x3ff00370} }, -/**/ {{0xb666799e, 0x3ff00360} }, -/**/ {{0xafb46058, 0x3ff00350} }, -/**/ {{0xa9225afa, 0x3ff00340} }, -/**/ {{0xa2b06925, 0x3ff00330} }, -/**/ {{0x9c5e8a77, 0x3ff00320} }, -/**/ {{0x962cbe90, 0x3ff00310} }, -/**/ {{0x901b0511, 0x3ff00300} }, -/**/ {{0x8a295d98, 0x3ff002f0} }, -/**/ {{0x8457c7c6, 0x3ff002e0} }, -/**/ {{0x7ea6433a, 0x3ff002d0} }, -/**/ {{0x7914cf94, 0x3ff002c0} }, -/**/ {{0x73a36c73, 0x3ff002b0} }, -/**/ {{0x6e521978, 0x3ff002a0} }, -/**/ {{0x6920d642, 0x3ff00290} }, -/**/ {{0x640fa271, 0x3ff00280} }, -/**/ {{0x5f1e7da5, 0x3ff00270} }, -/**/ {{0x5a4d677d, 0x3ff00260} }, -/**/ {{0x559c5f9a, 0x3ff00250} }, -/**/ {{0x510b659a, 0x3ff00240} }, -/**/ {{0x4c9a791f, 0x3ff00230} }, -/**/ {{0x484999c6, 0x3ff00220} }, -/**/ {{0x4418c732, 0x3ff00210} }, -/**/ {{0x40080100, 0x3ff00200} }, -/**/ {{0x3c1746d2, 0x3ff001f0} }, -/**/ {{0x38469846, 0x3ff001e0} }, -/**/ {{0x3495f4fd, 0x3ff001d0} }, -/**/ {{0x31055c96, 0x3ff001c0} }, -/**/ {{0x2d94ceb2, 0x3ff001b0} }, -/**/ {{0x2a444af0, 0x3ff001a0} }, -/**/ {{0x2713d0ef, 0x3ff00190} }, -/**/ {{0x24036051, 0x3ff00180} }, -/**/ {{0x2112f8b4, 0x3ff00170} }, -/**/ {{0x1e4299b9, 0x3ff00160} }, -/**/ {{0x1b9242ff, 0x3ff00150} }, -/**/ {{0x1901f427, 0x3ff00140} }, -/**/ {{0x1691acd0, 0x3ff00130} }, -/**/ {{0x14416c9a, 0x3ff00120} }, -/**/ {{0x12113324, 0x3ff00110} }, -/**/ {{0x10010010, 0x3ff00100} }, -/**/ {{0x0e10d2fc, 0x3ff000f0} }, -/**/ {{0x0c40ab89, 0x3ff000e0} }, -/**/ {{0x0a908957, 0x3ff000d0} }, -/**/ {{0x09006c05, 0x3ff000c0} }, -/**/ {{0x07905334, 0x3ff000b0} }, -/**/ {{0x06403e82, 0x3ff000a0} }, -/**/ {{0x05102d92, 0x3ff00090} }, -/**/ {{0x04002001, 0x3ff00080} }, -/**/ {{0x03101571, 0x3ff00070} }, -/**/ {{0x02400d80, 0x3ff00060} }, -/**/ {{0x019007d0, 0x3ff00050} }, -/**/ {{0x01000400, 0x3ff00040} }, -/**/ {{0x009001b0, 0x3ff00030} }, -/**/ {{0x00400080, 0x3ff00020} }, -/**/ {{0x00100010, 0x3ff00010} }, -/**/ {{0x00000000, 0x3ff00000} }, -/**/ {{0x001fffe0, 0x3fefffe0} }, -/**/ {{0x007fff00, 0x3fefffc0} }, -/**/ {{0x011ffca0, 0x3fefffa0} }, -/**/ {{0x01fff800, 0x3fefff80} }, -/**/ {{0x031ff060, 0x3fefff60} }, -/**/ {{0x047fe501, 0x3fefff40} }, -/**/ {{0x061fd521, 0x3fefff20} }, -/**/ {{0x07ffc002, 0x3fefff00} }, -/**/ {{0x0a1fa4e3, 0x3feffee0} }, -/**/ {{0x0c7f8305, 0x3feffec0} }, -/**/ {{0x0f1f59a7, 0x3feffea0} }, -/**/ {{0x11ff280a, 0x3feffe80} }, -/**/ {{0x151eed6e, 0x3feffe60} }, -/**/ {{0x187ea913, 0x3feffe40} }, -/**/ {{0x1c1e5a39, 0x3feffe20} }, -/**/ {{0x1ffe0020, 0x3feffe00} }, -/**/ {{0x241d9a09, 0x3feffde0} }, -/**/ {{0x287d2733, 0x3feffdc0} }, -/**/ {{0x2d1ca6e0, 0x3feffda0} }, -/**/ {{0x31fc184e, 0x3feffd80} }, -/**/ {{0x371b7abf, 0x3feffd60} }, -/**/ {{0x3c7acd72, 0x3feffd40} }, -/**/ {{0x421a0fa9, 0x3feffd20} }, -/**/ {{0x47f940a2, 0x3feffd00} }, -/**/ {{0x4e185f9f, 0x3feffce0} }, -/**/ {{0x54776bdf, 0x3feffcc0} }, -/**/ {{0x5b1664a3, 0x3feffca0} }, -/**/ {{0x61f5492c, 0x3feffc80} }, -/**/ {{0x691418b9, 0x3feffc60} }, -/**/ {{0x7072d28b, 0x3feffc40} }, -/**/ {{0x781175e3, 0x3feffc20} }, -/**/ {{0x7ff00200, 0x3feffc00} }, -/**/ {{0x880e7623, 0x3feffbe0} }, -/**/ {{0x906cd18c, 0x3feffbc0} }, -/**/ {{0x990b137c, 0x3feffba0} }, -/**/ {{0xa1e93b34, 0x3feffb80} }, -/**/ {{0xab0747f3, 0x3feffb60} }, -/**/ {{0xb46538fa, 0x3feffb40} }, -/**/ {{0xbe030d89, 0x3feffb20} }, -/**/ {{0xc7e0c4e1, 0x3feffb00} }, -/**/ {{0xd1fe5e43, 0x3feffae0} }, -/**/ {{0xdc5bd8ee, 0x3feffac0} }, -/**/ {{0xe6f93424, 0x3feffaa0} }, -/**/ {{0xf1d66f25, 0x3feffa80} }, -/**/ {{0xfcf38931, 0x3feffa60} }, -/**/ {{0x08508189, 0x3feffa41} }, -/**/ {{0x13ed576d, 0x3feffa21} }, -/**/ {{0x1fca0a1e, 0x3feffa01} }, -/**/ {{0x2be698dd, 0x3feff9e1} }, -/**/ {{0x384302e9, 0x3feff9c1} }, -/**/ {{0x44df4785, 0x3feff9a1} }, -/**/ {{0x51bb65ef, 0x3feff981} }, -/**/ {{0x5ed75d6a, 0x3feff961} }, -/**/ {{0x6c332d34, 0x3feff941} }, -/**/ {{0x79ced490, 0x3feff921} }, -/**/ {{0x87aa52be, 0x3feff901} }, -/**/ {{0x95c5a6fe, 0x3feff8e1} }, -/**/ {{0xa420d091, 0x3feff8c1} }, -/**/ {{0xb2bbceb7, 0x3feff8a1} }, -/**/ {{0xc196a0b2, 0x3feff881} }, -/**/ {{0xd0b145c2, 0x3feff861} }, -/**/ {{0xe00bbd28, 0x3feff841} }, -/**/ {{0xefa60624, 0x3feff821} }, -/**/ {{0xff801ff8, 0x3feff801} }, -/**/ {{0x0f9a09e3, 0x3feff7e2} }, -/**/ {{0x1ff3c328, 0x3feff7c2} }, -/**/ {{0x308d4b05, 0x3feff7a2} }, -/**/ {{0x4166a0bd, 0x3feff782} }, -/**/ {{0x527fc390, 0x3feff762} }, -/**/ {{0x63d8b2bf, 0x3feff742} }, -/**/ {{0x75716d8b, 0x3feff722} }, -/**/ {{0x8749f334, 0x3feff702} }, -/**/ {{0x996242fb, 0x3feff6e2} }, -/**/ {{0xabba5c21, 0x3feff6c2} }, -/**/ {{0xbe523de8, 0x3feff6a2} }, -/**/ {{0xd129e78f, 0x3feff682} }, -/**/ {{0xe4415858, 0x3feff662} }, -/**/ {{0xf7988f84, 0x3feff642} }, -/**/ {{0x0b2f8c54, 0x3feff623} }, -/**/ {{0x1f064e08, 0x3feff603} }, -/**/ {{0x331cd3e1, 0x3feff5e3} }, -/**/ {{0x47731d21, 0x3feff5c3} }, -/**/ {{0x5c092908, 0x3feff5a3} }, -/**/ {{0x70def6d7, 0x3feff583} }, -/**/ {{0x85f485d0, 0x3feff563} }, -/**/ {{0x9b49d532, 0x3feff543} }, -/**/ {{0xb0dee440, 0x3feff523} }, -/**/ {{0xc6b3b23b, 0x3feff503} }, -/**/ {{0xdcc83e62, 0x3feff4e3} }, -/**/ {{0xf31c87f8, 0x3feff4c3} }, -/**/ {{0x09b08e3d, 0x3feff4a4} }, -/**/ {{0x20845073, 0x3feff484} }, -/**/ {{0x3797cdda, 0x3feff464} }, -/**/ {{0x4eeb05b4, 0x3feff444} }, -/**/ {{0x667df741, 0x3feff424} }, -/**/ {{0x7e50a1c3, 0x3feff404} }, -/**/ {{0x9663047b, 0x3feff3e4} }, -/**/ {{0xaeb51eaa, 0x3feff3c4} }, -/**/ {{0xc746ef91, 0x3feff3a4} }, -/**/ {{0xe0187672, 0x3feff384} }, -/**/ {{0xf929b28d, 0x3feff364} }, -/**/ {{0x127aa323, 0x3feff345} }, -/**/ {{0x2c0b4776, 0x3feff325} }, -/**/ {{0x45db9ec7, 0x3feff305} }, -/**/ {{0x5feba858, 0x3feff2e5} }, -/**/ {{0x7a3b6369, 0x3feff2c5} }, -/**/ {{0x94cacf3b, 0x3feff2a5} }, -/**/ {{0xaf99eb11, 0x3feff285} }, -/**/ {{0xcaa8b62a, 0x3feff265} }, -/**/ {{0xe5f72fc9, 0x3feff245} }, -/**/ {{0x0185572f, 0x3feff226} }, -/**/ {{0x1d532b9d, 0x3feff206} }, -/**/ {{0x3960ac54, 0x3feff1e6} }, -/**/ {{0x55add896, 0x3feff1c6} }, -/**/ {{0x723aafa3, 0x3feff1a6} }, -/**/ {{0x8f0730be, 0x3feff186} }, -/**/ {{0xac135b27, 0x3feff166} }, -/**/ {{0xc95f2e21, 0x3feff146} }, -/**/ {{0xe6eaa8eb, 0x3feff126} }, -/**/ {{0x04b5cac9, 0x3feff107} }, -/**/ {{0x22c092fb, 0x3feff0e7} }, -/**/ {{0x410b00c2, 0x3feff0c7} }, -/**/ {{0x5f951360, 0x3feff0a7} }, -/**/ {{0x7e5eca16, 0x3feff087} }, -/**/ {{0x9d682426, 0x3feff067} }, -/**/ {{0xbcb120d2, 0x3feff047} }, -/**/ {{0xdc39bf5a, 0x3feff027} }, -/**/ {{0xfc01ff00, 0x3feff007} }, -/**/ {{0x1c09df07, 0x3fefefe8} }, -/**/ {{0x3c515eae, 0x3fefefc8} }, -/**/ {{0x5cd87d38, 0x3fefefa8} }, -/**/ {{0x7d9f39e6, 0x3fefef88} }, -/**/ {{0x9ea593fa, 0x3fefef68} }, -/**/ {{0xbfeb8ab5, 0x3fefef48} }, -/**/ {{0xe1711d5a, 0x3fefef28} }, -/**/ {{0x03364b28, 0x3fefef09} }, -/**/ {{0x253b1363, 0x3fefeee9} }, -/**/ {{0x477f754b, 0x3fefeec9} }, -/**/ {{0x6a037022, 0x3fefeea9} }, -/**/ {{0x8cc7032a, 0x3fefee89} }, -/**/ {{0xafca2da5, 0x3fefee69} }, -/**/ {{0xd30ceed4, 0x3fefee49} }, -/**/ {{0xf68f45f8, 0x3fefee29} }, -/**/ {{0x1a513254, 0x3fefee0a} }, -/**/ {{0x3e52b329, 0x3fefedea} }, -/**/ {{0x6293c7b8, 0x3fefedca} }, -/**/ {{0x87146f44, 0x3fefedaa} }, -/**/ {{0xabd4a90e, 0x3fefed8a} }, -/**/ {{0xd0d47458, 0x3fefed6a} }, -/**/ {{0xf613d064, 0x3fefed4a} }, -/**/ {{0x1b92bc73, 0x3fefed2b} }, -/**/ {{0x415137c7, 0x3fefed0b} }, -/**/ {{0x674f41a2, 0x3fefeceb} }, -/**/ {{0x8d8cd945, 0x3fefeccb} }, -/**/ {{0xb409fdf3, 0x3fefecab} }, -/**/ {{0xdac6aeed, 0x3fefec8b} }, -/**/ {{0x01c2eb76, 0x3fefec6c} }, -/**/ {{0x28feb2ce, 0x3fefec4c} }, -/**/ {{0x507a0437, 0x3fefec2c} }, -/**/ {{0x7834def5, 0x3fefec0c} }, -/**/ {{0xa02f4247, 0x3fefebec} }, -/**/ {{0xc8692d71, 0x3fefebcc} }, -/**/ {{0xf0e29fb4, 0x3fefebac} }, -/**/ {{0x199b9852, 0x3fefeb8d} }, -/**/ {{0x4294168d, 0x3fefeb6d} }, -/**/ {{0x6bcc19a7, 0x3fefeb4d} }, -/**/ {{0x9543a0e2, 0x3fefeb2d} }, -/**/ {{0xbefaab7f, 0x3fefeb0d} }, -/**/ {{0xe8f138c2, 0x3fefeaed} }, -/**/ {{0x132747ea, 0x3fefeace} }, -/**/ {{0x3d9cd83c, 0x3fefeaae} }, -/**/ {{0x6851e8f7, 0x3fefea8e} }, -/**/ {{0x93467960, 0x3fefea6e} }, -/**/ {{0xbe7a88b7, 0x3fefea4e} }, -/**/ {{0xe9ee163f, 0x3fefea2e} }, -/**/ {{0x15a12139, 0x3fefea0f} }, -/**/ {{0x4193a8e8, 0x3fefe9ef} }, -/**/ {{0x6dc5ac8e, 0x3fefe9cf} }, -/**/ {{0x9a372b6d, 0x3fefe9af} }, -/**/ {{0xc6e824c6, 0x3fefe98f} }, -/**/ {{0xf3d897dd, 0x3fefe96f} }, - }; - - static const number - Lu[182][2] = { /* log(ui) */ -/**/ {{{0x0b3aac49, 0xbfd63003} }, -/**/ {{0xe51fff99, 0xbc6dc18c} },}, -/**/ {{{0xdf595f30, 0xbfd5d5bd} }, -/**/ {{0x48cbb8a2, 0x3c765411} },}, -/**/ {{{0x53c8d1fb, 0xbfd57bf7} }, -/**/ {{0x15f88b63, 0x3c60908d} },}, -/**/ {{{0x0738a3d8, 0xbfd522ae} }, -/**/ {{0xb38a6979, 0x3c68f7e9} },}, -/**/ {{{0x9e172c3c, 0xbfd4c9e0} }, -/**/ {{0x5b147a5d, 0x3c512361} },}, -/**/ {{{0xc271c41b, 0xbfd4718d} }, -/**/ {{0x14c56eef, 0xbc38fb4c} },}, -/**/ {{{0x23d5e8c7, 0xbfd419b4} }, -/**/ {{0x43827392, 0xbc60dbb2} },}, -/**/ {{{0x77333184, 0xbfd3c252} }, -/**/ {{0xe50a8ec6, 0x3c72ad27} },}, -/**/ {{{0x76be1117, 0xbfd36b67} }, -/**/ {{0xe883858e, 0x3c5324f0} },}, -/**/ {{{0xe1d35ce4, 0xbfd314f1} }, -/**/ {{0x09e5c3dc, 0x3c73d699} },}, -/**/ {{{0x7cdc9354, 0xbfd2bef0} }, -/**/ {{0x7fd86088, 0x3c782dad} },}, -/**/ {{{0x1134db92, 0xbfd26962} }, -/**/ {{0xdd9db02b, 0xbc7e0efa} },}, -/**/ {{{0x6d0eb8d4, 0xbfd21445} }, -/**/ {{0x1aeba60a, 0xbc6f7ae9} },}, -/**/ {{{0x635a6b95, 0xbfd1bf99} }, -/**/ {{0x84249223, 0x3c612aeb} },}, -/**/ {{{0xcbacfb73, 0xbfd16b5c} }, -/**/ {{0x28b40935, 0xbc766fbd} },}, -/**/ {{{0x8227e47c, 0xbfd1178e} }, -/**/ {{0x5f01c691, 0x3c60e63a} },}, -/**/ {{{0x676162e3, 0xbfd0c42d} }, -/**/ {{0x9d5d11ee, 0xbc5162c7} },}, -/**/ {{{0x604d5862, 0xbfd07138} }, -/**/ {{0xed4e9138, 0xbc7cdb16} },}, -/**/ {{{0x5626c691, 0xbfd01eae} }, -/**/ {{0xbd2932e2, 0x3c418290} },}, -/**/ {{{0x6cb3b379, 0xbfcf991c} }, -/**/ {{0x66f980a2, 0xbc6f6650} },}, -/**/ {{{0xe4dcffe6, 0xbfcef5ad} }, -/**/ {{0xddc708a0, 0x3c508ab2} },}, -/**/ {{{0xffe71012, 0xbfce530e} }, -/**/ {{0x41f43042, 0xbc422760} },}, -/**/ {{{0xb0d48940, 0xbfcdb13d} }, -/**/ {{0x49f96cb9, 0xbc5aa11d} },}, -/**/ {{{0xf2655e7b, 0xbfcd1037} }, -/**/ {{0x242471a2, 0xbc660629} },}, -/**/ {{{0xc6f00f71, 0xbfcc6ffb} }, -/**/ {{0x2c57a4a5, 0x3c68e58b} },}, -/**/ {{{0x383bd8ad, 0xbfcbd087} }, -/**/ {{0xf6a516d7, 0xbc3dd355} },}, -/**/ {{{0x575bce3d, 0xbfcb31d8} }, -/**/ {{0xb386a94d, 0x3c66353a} },}, -/**/ {{{0x3c8ad9e3, 0xbfca93ed} }, -/**/ {{0x9de97203, 0xbc6bcafa} },}, -/**/ {{{0x07089664, 0xbfc9f6c4} }, -/**/ {{0x605e67ef, 0xbc435a19} },}, -/**/ {{{0xdcf7017f, 0xbfc95a5a} }, -/**/ {{0x07fb7a3d, 0xbc5142c5} },}, -/**/ {{{0xeb38fe8c, 0xbfc8beaf} }, -/**/ {{0xb6997a40, 0xbc555aa8} },}, -/**/ {{{0x6551a3c2, 0xbfc823c1} }, -/**/ {{0xe70be781, 0x3c61232c} },}, -/**/ {{{0x85444c73, 0xbfc7898d} }, -/**/ {{0xebcfb201, 0xbc5ef8f6} },}, -/**/ {{{0x8b756abc, 0xbfc6f012} }, -/**/ {{0xc21e166c, 0x3c68de59} },}, -/**/ {{{0xbe8c133a, 0xbfc6574e} }, -/**/ {{0xf4621bed, 0x3c3d34f0} },}, -/**/ {{{0x6b543db2, 0xbfc5bf40} }, -/**/ {{0x4c0df7e7, 0x3c21f5b4} },}, -/**/ {{{0xe4a1b58d, 0xbfc527e5} }, -/**/ {{0x82395bfd, 0x3c271a96} },}, -/**/ {{{0x8333b561, 0xbfc4913d} }, -/**/ {{0x4930f135, 0x3c50d560} },}, -/**/ {{{0xa59928cc, 0xbfc3fb45} }, -/**/ {{0xa354d056, 0x3c6d87e6} },}, -/**/ {{{0xb0159016, 0xbfc365fc} }, -/**/ {{0xa5b944ad, 0xbc57d411} },}, -/**/ {{{0x0c86813a, 0xbfc2d161} }, -/**/ {{0xf25af95f, 0x3c5499a3} },}, -/**/ {{{0x2a49c202, 0xbfc23d71} }, -/**/ {{0x61051d69, 0x3c66e381} },}, -/**/ {{{0x7e23f72a, 0xbfc1aa2b} }, -/**/ {{0xd9b2ef7e, 0x3c4c6ef1} },}, -/**/ {{{0x8227e47c, 0xbfc1178e} }, -/**/ {{0x5f01c691, 0x3c50e63a} },}, -/**/ {{{0xb59e3a07, 0xbfc08598} }, -/**/ {{0x9902bf32, 0x3c6dd700} },}, -/**/ {{{0x39dbd566, 0xbfbfe891} }, -/**/ {{0x215f9393, 0x3c5ac9f4} },}, -/**/ {{{0x830a1120, 0xbfbec739} }, -/**/ {{0x91780d3f, 0x3c4a2bf9} },}, -/**/ {{{0x638446a2, 0xbfbda727} }, -/**/ {{0x71733019, 0xbc5401fa} },}, -/**/ {{{0x01bc4b23, 0xbfbc8858} }, -/**/ {{0x559a6706, 0xbc5a38cb} },}, -/**/ {{{0x8dad5b1c, 0xbfbb6ac8} }, -/**/ {{0xed1ca59f, 0x3c40057e} },}, -/**/ {{{0x40b1bc38, 0xbfba4e76} }, -/**/ {{0x203e4259, 0x3c55b5ca} },}, -/**/ {{{0x5d594989, 0xbfb9335e} }, -/**/ {{0x5704ccb7, 0x3c5478a8} },}, -/**/ {{{0x2f40e3f0, 0xbfb8197e} }, -/**/ {{0xffbeed43, 0xbc3b9f2d} },}, -/**/ {{{0x0aeac0e1, 0xbfb700d3} }, -/**/ {{0x212cdd05, 0x3c272566} },}, -/**/ {{{0x4d9791cb, 0xbfb5e95a} }, -/**/ {{0x5c5c450a, 0xbc5f3874} },}, -/**/ {{{0x5d207eac, 0xbfb4d311} }, -/**/ {{0x2c7842cc, 0xbc5769f4} },}, -/**/ {{{0xa7d1ee64, 0xbfb3bdf5} }, -/**/ {{0xd3b5b45f, 0xbc47a976} },}, -/**/ {{{0xa44717a5, 0xbfb2aa04} }, -/**/ {{0x8d2fa3f7, 0x3c5d15d3} },}, -/**/ {{{0xd1465567, 0xbfb1973b} }, -/**/ {{0x67a6acf6, 0x3c475583} },}, -/**/ {{{0xb59e3a07, 0xbfb08598} }, -/**/ {{0x9902bf32, 0x3c5dd700} },}, -/**/ {{{0xc006b87c, 0xbfaeea31} }, -/**/ {{0x93b7b66c, 0x3c43e4fc} },}, -/**/ {{{0xcdddb2cc, 0xbfaccb73} }, -/**/ {{0x0500efd4, 0x3c4e48fb} },}, -/**/ {{{0xd0fb10fc, 0xbfaaaef2} }, -/**/ {{0xb42e0add, 0xbc2a353b} },}, -/**/ {{{0x149fb343, 0xbfa894aa} }, -/**/ {{0x7660a23d, 0xbc3a8be9} },}, -/**/ {{{0xf2d4bb58, 0xbfa67c94} }, -/**/ {{0x6505e603, 0xbc40413e} },}, -/**/ {{{0xd42de3ea, 0xbfa466ae} }, -/**/ {{0x7f4a137e, 0x3c4cdd6f} },}, -/**/ {{{0x2f8d183f, 0xbfa252f3} }, -/**/ {{0x92615916, 0x3c4947f7} },}, -/**/ {{{0x89e74444, 0xbfa0415d} }, -/**/ {{0x1d753622, 0xbc4c05cf} },}, -/**/ {{{0xec14aaf2, 0xbf9c63d2} }, -/**/ {{0xa686bd86, 0x3c3ce030} },}, -/**/ {{{0x28c8cabf, 0xbf984925} }, -/**/ {{0x0619fa67, 0x3c3d192d} },}, -/**/ {{{0x25980cc1, 0xbf9432a9} }, -/**/ {{0x39004192, 0x3c38cdaf} },}, -/**/ {{{0x58935847, 0xbf902056} }, -/**/ {{0x8416e71f, 0xbc327c8e} },}, -/**/ {{{0xa388a2aa, 0xbf882448} }, -/**/ {{0x137f09a0, 0xbc104b16} },}, -/**/ {{{0x7588de71, 0xbf801015} }, -/**/ {{0xd417ced0, 0xbc146662} },}, -/**/ {{{0x59588b35, 0xbf700805} }, -/**/ {{0x8cf63677, 0xbc1f9663} },}, -/**/ {{{0x00000000, 0x00000000} }, -/**/ {{0x00000000, 0x00000000} },}, -/**/ {{{0xa2b10bc0, 0x3f6ff00a} }, -/**/ {{0xd5a6d353, 0x3c02821a} },}, -/**/ {{{0x6b106789, 0x3f7fe02a} }, -/**/ {{0xe3711ebf, 0xbbce44b7} },}, -/**/ {{{0x5f810a77, 0x3f87dc47} }, -/**/ {{0x87d3df21, 0xbc116d76} },}, -/**/ {{{0xb0fc03e4, 0x3f8fc0a8} }, -/**/ {{0xc59642a1, 0xbc183092} },}, -/**/ {{{0x4346a575, 0x3f93cea4} }, -/**/ {{0x902b3a1c, 0xbc10cb5a} },}, -/**/ {{{0x07d5b11b, 0x3f97b91b} }, -/**/ {{0xace3a510, 0xbc35b602} },}, -/**/ {{{0x27af9198, 0x3f9b9fc0} }, -/**/ {{0x229dc868, 0xbbf0ae69} },}, -/**/ {{{0x0e783300, 0x3f9f829b} }, -/**/ {{0x04f1ef23, 0x3c333e3f} },}, -/**/ {{{0x8923d980, 0x3fa1b0d9} }, -/**/ {{0x89bac481, 0xbc3e9ae8} },}, -/**/ {{{0xb9febd60, 0x3fa39e87} }, -/**/ {{0x37f551bb, 0xbc45bfa9} },}, -/**/ {{{0xafc8e4d5, 0x3fa58a5b} }, -/**/ {{0x2b4e2b72, 0xbc4ce55c} },}, -/**/ {{{0xf632dcfc, 0x3fa77458} }, -/**/ {{0xa87b9296, 0x3c418d3c} },}, -/**/ {{{0x0ec8e3eb, 0x3fa95c83} }, -/**/ {{0x80520bf2, 0x3c4f5a0e} },}, -/**/ {{{0x711971bf, 0x3fab42dd} }, -/**/ {{0x9c130499, 0xbc3eb975} },}, -/**/ {{{0x8adb0b52, 0x3fad276b} }, -/**/ {{0x3257fd47, 0x3c21e3c5} },}, -/**/ {{{0xc01162a6, 0x3faf0a30} }, -/**/ {{0x5c5bbacd, 0x3c485f32} },}, -/**/ {{{0x3598e471, 0x3fb07598} }, -/**/ {{0x333c45b8, 0x3c480da5} },}, -/**/ {{{0xeea37ae1, 0x3fb16536} }, -/**/ {{0xe8c22cda, 0xbc379da3} },}, -/**/ {{{0x2f0a1417, 0x3fb253f6} }, -/**/ {{0x63fc4cfd, 0xbc1c1259} },}, -/**/ {{{0x961bd1d1, 0x3fb341d7} }, -/**/ {{0x227becbb, 0xbc5b599f} },}, -/**/ {{{0xbea646f0, 0x3fb42edc} }, -/**/ {{0x935996c9, 0x3c4ddd4f} },}, -/**/ {{{0x3f06183f, 0x3fb51b07} }, -/**/ {{0x9a1a8be4, 0x3c5a49e3} },}, -/**/ {{{0xa93750c4, 0x3fb60658} }, -/**/ {{0x8ec21b6a, 0xbc538845} },}, -/**/ {{{0x8ae56b4c, 0x3fb6f0d2} }, -/**/ {{0x9184b992, 0xbc5906d9} },}, -/**/ {{{0x6d7b12cd, 0x3fb7da76} }, -/**/ {{0xcdd94131, 0xbc5eeedf} },}, -/**/ {{{0xd6319b21, 0x3fb8c345} }, -/**/ {{0xab3424a9, 0xbc24a697} },}, -/**/ {{{0x462033ad, 0x3fb9ab42} }, -/**/ {{0x1c184e8e, 0xbc42099e} },}, -/**/ {{{0x3a4ad563, 0x3fba926d} }, -/**/ {{0x8aa70ea9, 0x3c5942f4} },}, -/**/ {{{0x2bb0eda1, 0x3fbb78c8} }, -/**/ {{0xf0327e21, 0x3c20878c} },}, -/**/ {{{0x8f5bc743, 0x3fbc5e54} }, -/**/ {{0xef8161b1, 0x3c35d617} },}, -/**/ {{{0xd66cb35d, 0x3fbd4313} }, -/**/ {{0x951d90fa, 0x3c5790dd} },}, -/**/ {{{0x6e2af2e6, 0x3fbe2707} }, -/**/ {{0x001e0162, 0xbc361578} },}, -/**/ {{{0xc01162a6, 0x3fbf0a30} }, -/**/ {{0x5c5bbacd, 0x3c585f32} },}, -/**/ {{{0x31dbeabb, 0x3fbfec91} }, -/**/ {{0x9981b36c, 0xbc55746b} },}, -/**/ {{{0x12ca596e, 0x3fc06715} }, -/**/ {{0x7eb86499, 0x3c550c64} },}, -/**/ {{{0x7cd08e59, 0x3fc0d77e} }, -/**/ {{0x5e9030ac, 0x3c69a5dc} },}, -/**/ {{{0x846742ac, 0x3fc14785} }, -/**/ {{0x3e3a7f07, 0x3c6a2881} },}, -/**/ {{{0xd52f67a0, 0x3fc1b72a} }, -/**/ {{0x3472cd74, 0x3c548302} },}, -/**/ {{{0x190a5acb, 0x3fc2266f} }, -/**/ {{0xf1809e88, 0x3c6f547b} },}, -/**/ {{{0xf81ff523, 0x3fc29552} }, -/**/ {{0x1c407dbf, 0x3c630177} },}, -/**/ {{{0x18e47fd3, 0x3fc303d7} }, -/**/ {{0xd96091fa, 0xbc06b9c7} },}, -/**/ {{{0x201e8f74, 0x3fc371fc} }, -/**/ {{0x62af18a0, 0x3c5de6cb} },}, -/**/ {{{0xb0ecc62a, 0x3fc3dfc2} }, -/**/ {{0xe7d81017, 0xbc5ab3a8} },}, -/**/ {{{0x6ccb7d1e, 0x3fc44d2b} }, -/**/ {{0x543e1f88, 0x3c69f4f6} },}, -/**/ {{{0xf39a55e5, 0x3fc4ba36} }, -/**/ {{0xbcc36756, 0x3c668981} },}, -/**/ {{{0xe3a1b438, 0x3fc526e5} }, -/**/ {{0x8a470d3a, 0xbc6746ff} },}, -/**/ {{{0xd9982086, 0x3fc59338} }, -/**/ {{0xaa8ad7cf, 0xbc565d22} },}, -/**/ {{{0x70a793d4, 0x3fc5ff30} }, -/**/ {{0xfafc6f6e, 0xbc5bc60e} },}, -/**/ {{{0x4272ad51, 0x3fc66acd} }, -/**/ {{0x4e1ea8b2, 0xbc50900e} },}, -/**/ {{{0xe719d21d, 0x3fc6d60f} }, -/**/ {{0x68ecd179, 0xbc6caae2} },}, -/**/ {{{0xf54037a5, 0x3fc740f8} }, -/**/ {{0x62a84cdb, 0xbc5b2640} },}, -/**/ {{{0x0210d909, 0x3fc7ab89} }, -/**/ {{0x2d6a0608, 0x3c4be36b} },}, -/**/ {{{0xa14357eb, 0x3fc815c0} }, -/**/ {{0x073a0564, 0xbc54be48} },}, -/**/ {{{0x6520c911, 0x3fc87fa0} }, -/**/ {{0xbfa08d9a, 0xbc6bf7fd} },}, -/**/ {{{0xde886d41, 0x3fc8e928} }, -/**/ {{0x51a56770, 0xbc6569d8} },}, -/**/ {{{0x9cf456b4, 0x3fc9525a} }, -/**/ {{0x1d4e2e26, 0x3c6d904c} },}, -/**/ {{{0x2e7dfb83, 0x3fc9bb36} }, -/**/ {{0x1f003e0c, 0x3c6575e3} },}, -/**/ {{{0x1fe2b563, 0x3fca23bc} }, -/**/ {{0xb07a998c, 0x3c493711} },}, -/**/ {{{0xfc882f19, 0x3fca8bec} }, -/**/ {{0x918c39eb, 0xbc5e8c37} },}, -/**/ {{{0x4e80bff3, 0x3fcaf3c9} }, -/**/ {{0xf3641985, 0xbc5398cf} },}, -/**/ {{{0x9e8fb5a4, 0x3fcb5b51} }, -/**/ {{0xdc19e1a0, 0x3c6ba27f} },}, -/**/ {{{0x742d8cd6, 0x3fcbc286} }, -/**/ {{0x44870f55, 0x3c54fce7} },}, -/**/ {{{0x558c18c1, 0x3fcc2968} }, -/**/ {{0x38a3fb6b, 0xbc673dee} },}, -/**/ {{{0xc79a9a22, 0x3fcc8ff7} }, -/**/ {{0xf8434012, 0xbc64f689} },}, -/**/ {{{0x4e09c5dc, 0x3fccf635} }, -/**/ {{0x7d55b695, 0x3c6239a0} },}, -/**/ {{{0x6b4fbb91, 0x3fcd5c21} }, -/**/ {{0x597e4d40, 0x3c66e443} },}, -/**/ {{{0xa0abec7d, 0x3fcdc1bc} }, -/**/ {{0x1998b6fc, 0x3c6834c5} },}, -/**/ {{{0x6e2af2e6, 0x3fce2707} }, -/**/ {{0x001e0162, 0xbc461578} },}, -/**/ {{{0x52aa5a60, 0x3fce8c02} }, -/**/ {{0x39bfc89b, 0xbc46e03a} },}, -/**/ {{{0xcbdc5936, 0x3fcef0ad} }, -/**/ {{0x950dc20d, 0x3c648637} },}, -/**/ {{{0x564b7b37, 0x3fcf550a} }, -/**/ {{0xfd018c37, 0x3c2c5f6d} },}, -/**/ {{{0x6d5e3e2b, 0x3fcfb918} }, -/**/ {{0x64f21acb, 0xbc6caaae} },}, -/**/ {{{0x45ad501d, 0x3fd00e6c} }, -/**/ {{0x8ff6fead, 0xbc6cb956} },}, -/**/ {{{0x94b4d041, 0x3fd04025} }, -/**/ {{0x17a5022d, 0xbc628ec2} },}, -/**/ {{{0x5fcd590d, 0x3fd071b8} }, -/**/ {{0xf97bde80, 0x3c5d1707} },}, -/**/ {{{0xe27390e3, 0x3fd0a324} }, -/**/ {{0xe8061c03, 0x3c77dcfd} },}, -/**/ {{{0x579ab74b, 0x3fd0d46b} }, -/**/ {{0x1c3cbd92, 0x3c603ec8} },}, -/**/ {{{0xf9ae4ad5, 0x3fd1058b} }, -/**/ {{0xab4cb31d, 0x3c589fa0} },}, -/**/ {{{0x0293a8b0, 0x3fd13687} }, -/**/ {{0x98edd24a, 0x3c77b662} },}, -/**/ {{{0xababa60e, 0x3fd1675c} }, -/**/ {{0xab883717, 0x3c2ce63e} },}, -/**/ {{{0x2dd4236f, 0x3fd1980d} }, -/**/ {{0xb0e4d147, 0x3c79d3d1} },}, -/**/ {{{0xc16999fb, 0x3fd1c898} }, -/**/ {{0x2aff1c44, 0xbc30e5c6} },}, -/**/ {{{0x9e48a2f3, 0x3fd1f8ff} }, -/**/ {{0x9a0c4b07, 0xbc7c9fdf} },}, -/**/ {{{0xfbcf7966, 0x3fd22941} }, -/**/ {{0xb09628af, 0xbc776f5e} },}, -/**/ {{{0x10df763a, 0x3fd25960} }, -/**/ {{0x57075e9e, 0xbc50f76c} },}, -/**/ {{{0x13de86a3, 0x3fd2895a} }, -/**/ {{0xc13f040e, 0x3c77ad24} },}, -/**/ {{{0x3ab89d25, 0x3fd2b930} }, -/**/ {{0xfd852ad4, 0xbc7896b5} },}, -/**/ {{{0xbae11d31, 0x3fd2e8e2} }, -/**/ {{0xb95ebdf9, 0xbc78f4cd} },}, -/**/ {{{0xc9544185, 0x3fd31871} }, -/**/ {{0x4c09b379, 0xbc351acc} },}, -/**/ {{{0x9a987d55, 0x3fd347dd} }, -/**/ {{0x580919f8, 0xbc64dd4c} },}, -/**/ {{{0x62bfd85b, 0x3fd37726} }, -/**/ {{0xd8117de7, 0xbc4b5629} },}, -/**/ {{{0x556945ea, 0x3fd3a64c} }, -/**/ {{0x1945f97c, 0xbc6c6865} },}, -/**/ {{{0xa5c1f710, 0x3fd3d54f} }, -/**/ {{0xc6a1c98d, 0xbc7e3265} },}, -/**/ {{{0x8686a7e4, 0x3fd40430} }, -/**/ {{0x6082ce6d, 0xbc70bcfb} },}, -/**/ {{{0x2a04e814, 0x3fd432ef} }, -/**/ {{0x715ac903, 0xbc729931} },}, -/**/ {{{0xc21c5ec2, 0x3fd4618b} }, -/**/ {{0xcdeccf1d, 0x3c7f42de} },}, -/**/ {{{0x804009d1, 0x3fd49006} }, -/**/ {{0x41f177dc, 0xbc69ffc3} },}, -/**/ {{{0x957778a1, 0x3fd4be5f} }, -/**/ {{0x5b04813d, 0xbc6259b3} },}, -/**/ {{{0x3260026a, 0x3fd4ec97} }, -/**/ {{0xd977dc5e, 0xbc742a87} },}, -/**/ {{{0x872df82d, 0x3fd51aad} }, -/**/ {{0xc19f55e3, 0x3c43927a} },}, -/**/ {{{0xc3add263, 0x3fd548a2} }, -/**/ {{0x7e308ddb, 0xbc6819cf} },}, -/**/ {{{0x17455a6c, 0x3fd57677} }, -/**/ {{0xb283660c, 0x3c7526ad} },}, -/**/ {{{0xb0f4cfe2, 0x3fd5a42a} }, -/**/ {{0x7dee9a3d, 0xbc78ebcb} },}, -/**/ {{{0xbf5809ca, 0x3fd5d1bd} }, -/**/ {{0x83dc7fe1, 0x3c742363} },}, -/**/ {{{0x70a793d4, 0x3fd5ff30} }, -/**/ {{0xfafc6f6e, 0xbc6bc60e} },}, -/**/ {{{0xf2b9c795, 0x3fd62c82} }, -/**/ {{0x915300e5, 0x3c67b7af} },}, - }; - - static const number - Lv[362][2] = { /* log(vj) */ - -/**/ {{{0xb72daabf, 0xbf6687ec} }, -/**/ {{0x0f13318f, 0x3c052c69} },}, -/**/ {{{0x3767104f, 0xbf6667d6} }, -/**/ {{0xd27a7bac, 0x3bd3efa3} },}, -/**/ {{{0xd7cd64fb, 0xbf6647bf} }, -/**/ {{0x55a89c36, 0x3c09b725} },}, -/**/ {{{0x9860683b, 0xbf6627a9} }, -/**/ {{0xfebc844a, 0x3bcbae22} },}, -/**/ {{{0x791fd98a, 0xbf660793} }, -/**/ {{0x78fa1cb5, 0xbbfe34af} },}, -/**/ {{{0x7a0b7863, 0xbf65e77d} }, -/**/ {{0xea78fdd0, 0xbc02f1b1} },}, -/**/ {{{0x9b230442, 0xbf65c767} }, -/**/ {{0x2202b2ca, 0x3bf70d8c} },}, -/**/ {{{0xdc663ca2, 0xbf65a751} }, -/**/ {{0xc3444e64, 0xbbfdc63d} },}, -/**/ {{{0x3dd4e102, 0xbf65873c} }, -/**/ {{0x370d69c3, 0x3c021b11} },}, -/**/ {{{0xbf6eb0de, 0xbf656726} }, -/**/ {{0x154dd8d8, 0xbbfb6da8} },}, -/**/ {{{0x61336bb6, 0xbf654711} }, -/**/ {{0xdf9a4709, 0xbc0b12d2} },}, -/**/ {{{0x2322d10a, 0xbf6526fc} }, -/**/ {{0x68d1274f, 0x3bf997f2} },}, -/**/ {{{0x053ca059, 0xbf6506e7} }, -/**/ {{0xe70c852a, 0x3c0c2a1f} },}, -/**/ {{{0x07809924, 0xbf64e6d2} }, -/**/ {{0xa808538f, 0x3c04cc9e} },}, -/**/ {{{0x29ee7aed, 0xbf64c6bd} }, -/**/ {{0x7797a4bd, 0x3befe68c} },}, -/**/ {{{0x6c860537, 0xbf64a6a8} }, -/**/ {{0x9efaae3d, 0x3c06794d} },}, -/**/ {{{0xcf46f784, 0xbf648693} }, -/**/ {{0xb2ddd9d1, 0xbbfed318} },}, -/**/ {{{0x5231115a, 0xbf64667f} }, -/**/ {{0x4643624b, 0x3c061f62} },}, -/**/ {{{0xf544123c, 0xbf64466a} }, -/**/ {{0x9387f11e, 0x3c0666a0} },}, -/**/ {{{0xb87fb9b0, 0xbf642656} }, -/**/ {{0x116ec598, 0x3c0043b2} },}, -/**/ {{{0x9be3c73c, 0xbf640642} }, -/**/ {{0xd2de6e3e, 0xbbfbd84d} },}, -/**/ {{{0x9f6ffa68, 0xbf63e62e} }, -/**/ {{0x433d8c65, 0xbbe9149b} },}, -/**/ {{{0xc32412bb, 0xbf63c61a} }, -/**/ {{0x08e5a7bb, 0xbbf6b88d} },}, -/**/ {{{0x06ffcfbe, 0xbf63a607} }, -/**/ {{0xccfac9e2, 0xbb9f3c7a} },}, -/**/ {{{0x6b02f0fa, 0xbf6385f3} }, -/**/ {{0xbec6f6e4, 0x3bee405c} },}, -/**/ {{{0xef2d35f9, 0xbf6365df} }, -/**/ {{0xaf0c0b4c, 0x3bf02993} },}, -/**/ {{{0x937e5e46, 0xbf6345cc} }, -/**/ {{0xaa64716f, 0x3bf9be97} },}, -/**/ {{{0x57f6296c, 0xbf6325b9} }, -/**/ {{0xa2e863ae, 0xbbfdeb4d} },}, -/**/ {{{0x3c9456f9, 0xbf6305a6} }, -/**/ {{0x636d2b2c, 0x3c0f3c7f} },}, -/**/ {{{0x4158a678, 0xbf62e593} }, -/**/ {{0xb166ca7f, 0x3c01a8df} },}, -/**/ {{{0x6642d778, 0xbf62c580} }, -/**/ {{0x53a2d534, 0x3c020ff1} },}, -/**/ {{{0xab52a987, 0xbf62a56d} }, -/**/ {{0x0412f1e7, 0xbbe8fef1} },}, -/**/ {{{0x1087dc35, 0xbf62855b} }, -/**/ {{0x4b7ac6c6, 0xbbfcd17e} },}, -/**/ {{{0x95e22f12, 0xbf626548} }, -/**/ {{0x9a8127bf, 0xbbfbfc21} },}, -/**/ {{{0x3b6161af, 0xbf624536} }, -/**/ {{0x66d42390, 0x3bd7eda1} },}, -/**/ {{{0x0105339d, 0xbf622524} }, -/**/ {{0x77fedcad, 0xbbdf374e} },}, -/**/ {{{0xe6cd646f, 0xbf620511} }, -/**/ {{0x52d05dea, 0x3be1d1fb} },}, -/**/ {{{0xecb9b3b8, 0xbf61e4ff} }, -/**/ {{0xffd8e706, 0x3c02c2fc} },}, -/**/ {{{0x12c9e10b, 0xbf61c4ee} }, -/**/ {{0xf1d5cc2c, 0xbc02b4f8} },}, -/**/ {{{0x58fdabfe, 0xbf61a4dc} }, -/**/ {{0x1315b191, 0xbc0618c3} },}, -/**/ {{{0xbf54d426, 0xbf6184ca} }, -/**/ {{0xcb3cdab0, 0xbc01f8d5} },}, -/**/ {{{0x45cf1919, 0xbf6164b9} }, -/**/ {{0xc025605a, 0xbc014ff7} },}, -/**/ {{{0xec6c3a6e, 0xbf6144a7} }, -/**/ {{0x87cb08cd, 0xbbff04ff} },}, -/**/ {{{0xb32bf7bd, 0xbf612496} }, -/**/ {{0xe6af1b84, 0x3bee89b4} },}, -/**/ {{{0x9a0e109e, 0xbf610485} }, -/**/ {{0x35a60879, 0x3c07e99e} },}, -/**/ {{{0xa11244aa, 0xbf60e474} }, -/**/ {{0x20f2325a, 0x3c04b698} },}, -/**/ {{{0xc838537b, 0xbf60c463} }, -/**/ {{0x3617200d, 0x3bc0657e} },}, -/**/ {{{0x0f7ffcac, 0xbf60a453} }, -/**/ {{0xa5080961, 0xbc008feb} },}, -/**/ {{{0x76e8ffd9, 0xbf608442} }, -/**/ {{0xbb5e1df7, 0x3bd13002} },}, -/**/ {{{0xfe731c9d, 0xbf606431} }, -/**/ {{0x6e2858c0, 0xbc0509f3} },}, -/**/ {{{0xa61e1296, 0xbf604421} }, -/**/ {{0x5f5d9695, 0xbc04b556} },}, -/**/ {{{0x6de9a162, 0xbf602411} }, -/**/ {{0xe79a4e00, 0x3c042b89} },}, -/**/ {{{0x55d5889e, 0xbf600401} }, -/**/ {{0x1113f403, 0x3be8f98e} },}, -/**/ {{{0xbbc30fd4, 0xbf5fc7e2} }, -/**/ {{0x93382bc9, 0xbbfc709b} },}, -/**/ {{{0x0c1abdcd, 0xbf5f87c3} }, -/**/ {{0x76a55d1c, 0xbbf2a90d} },}, -/**/ {{{0x9cb19a68, 0xbf5f47a3} }, -/**/ {{0x76e7826b, 0x3be1b815} },}, -/**/ {{{0x6d8724e7, 0xbf5f0784} }, -/**/ {{0x2b63756d, 0xbbe72d46} },}, -/**/ {{{0x7e9adc90, 0xbf5ec765} }, -/**/ {{0x73bb17c5, 0x3beb1a66} },}, -/**/ {{{0xcfec40a8, 0xbf5e8746} }, -/**/ {{0xb5e5a553, 0x3bf11af5} },}, -/**/ {{{0x617ad077, 0xbf5e4728} }, -/**/ {{0xf57dd14f, 0x3bfb2cad} },}, -/**/ {{{0x33460b45, 0xbf5e070a} }, -/**/ {{0x4902c8d5, 0xbbf8db75} },}, -/**/ {{{0x454d705f, 0xbf5dc6ec} }, -/**/ {{0xe8a41057, 0x3bef5cc6} },}, -/**/ {{{0x97907f0f, 0xbf5d86ce} }, -/**/ {{0xdf8672ef, 0x3bed8277} },}, -/**/ {{{0x2a0eb6a3, 0xbf5d46b1} }, -/**/ {{0x3717e5ee, 0xbbc2f9c2} },}, -/**/ {{{0xfcc7966b, 0xbf5d0693} }, -/**/ {{0xab4852c6, 0x3bf4deed} },}, -/**/ {{{0x0fba9db6, 0xbf5cc677} }, -/**/ {{0x9db2a368, 0xbbf3a2b4} },}, -/**/ {{{0x62e74bd8, 0xbf5c865a} }, -/**/ {{0x58fa0c24, 0xbbd2c51d} },}, -/**/ {{{0xf64d2024, 0xbf5c463d} }, -/**/ {{0xe3a09391, 0x3bf838ca} },}, -/**/ {{{0xc9eb99ee, 0xbf5c0621} }, -/**/ {{0x61b7de71, 0xbbdc2a9e} },}, -/**/ {{{0xddc2388e, 0xbf5bc605} }, -/**/ {{0x4accb195, 0xbbea9808} },}, -/**/ {{{0x31d07b5c, 0xbf5b85ea} }, -/**/ {{0x032e030b, 0xbbd811a2} },}, -/**/ {{{0xc615e1b1, 0xbf5b45ce} }, -/**/ {{0x821e0b81, 0xbbfd5427} },}, -/**/ {{{0x9a91eaea, 0xbf5b05b3} }, -/**/ {{0x2619306b, 0x3bfffeba} },}, -/**/ {{{0xaf441661, 0xbf5ac598} }, -/**/ {{0x9eac7d15, 0x3bd22824} },}, -/**/ {{{0x042be376, 0xbf5a857e} }, -/**/ {{0x24893f0e, 0x3bc20736} },}, -/**/ {{{0x9948d188, 0xbf5a4563} }, -/**/ {{0x04d734cd, 0xbbf58ab4} },}, -/**/ {{{0x6e9a5ff9, 0xbf5a0549} }, -/**/ {{0x5723a6c3, 0xbbf22673} },}, -/**/ {{{0x84200e2c, 0xbf59c52f} }, -/**/ {{0xa538e8e1, 0x3bfc81da} },}, -/**/ {{{0xd9d95b83, 0xbf598515} }, -/**/ {{0x2a8e3feb, 0xbbfa1a37} },}, -/**/ {{{0x6fc5c767, 0xbf5944fc} }, -/**/ {{0x385159f9, 0x3bf8e1ce} },}, -/**/ {{{0x45e4d13c, 0xbf5904e3} }, -/**/ {{0x1567c7a7, 0xbbfc4737} },}, -/**/ {{{0x5c35f86e, 0xbf58c4ca} }, -/**/ {{0x23c9ae0c, 0x3bf41581} },}, -/**/ {{{0xb2b8bc65, 0xbf5884b1} }, -/**/ {{0x2b66cfb6, 0x3bf70c2c} },}, -/**/ {{{0x496c9c8d, 0xbf584499} }, -/**/ {{0xe5a11e3e, 0xbbdb9042} },}, -/**/ {{{0x20511854, 0xbf580481} }, -/**/ {{0x61bcb040, 0xbbf9cf9d} },}, -/**/ {{{0x3765af29, 0xbf57c469} }, -/**/ {{0xe26a419b, 0xbbf65ceb} },}, -/**/ {{{0x8ea9e07c, 0xbf578451} }, -/**/ {{0xb70a4088, 0xbbf1c2f5} },}, -/**/ {{{0x261d2bbf, 0xbf57443a} }, -/**/ {{0x29704ba7, 0xbbbc7b8f} },}, -/**/ {{{0xfdbf1065, 0xbf570422} }, -/**/ {{0x433ccb3b, 0x3bca0a54} },}, -/**/ {{{0x158f0de3, 0xbf56c40c} }, -/**/ {{0x207cde2d, 0x3bd9e257} },}, -/**/ {{{0x6d8ca3af, 0xbf5683f5} }, -/**/ {{0xf7b51b49, 0xbbef17a4} },}, -/**/ {{{0x05b75142, 0xbf5643df} }, -/**/ {{0x9d345bf8, 0x3be28239} },}, -/**/ {{{0xde0e9614, 0xbf5603c8} }, -/**/ {{0x0918d1bf, 0xbbde6c21} },}, -/**/ {{{0xf691f1a1, 0xbf55c3b2} }, -/**/ {{0x377de4c8, 0x3bd37d78} },}, -/**/ {{{0x4f40e365, 0xbf55839d} }, -/**/ {{0xbbf7c9d1, 0x3bf52b7d} },}, -/**/ {{{0xe81aeadd, 0xbf554387} }, -/**/ {{0x679c3d9a, 0xbbf0be6a} },}, -/**/ {{{0xc11f878a, 0xbf550372} }, -/**/ {{0xb6cdd88e, 0xbbdd9e20} },}, -/**/ {{{0xda4e38ec, 0xbf54c35d} }, -/**/ {{0x09302da0, 0xbbe3b1e7} },}, -/**/ {{{0x33a67e86, 0xbf548349} }, -/**/ {{0x085b922d, 0x3be8cba8} },}, -/**/ {{{0xcd27d7db, 0xbf544334} }, -/**/ {{0xf024ab43, 0xbba5f2c9} },}, -/**/ {{{0xa6d1c471, 0xbf540320} }, -/**/ {{0xf686cf3d, 0xbbeb31f3} },}, -/**/ {{{0xc0a3c3cf, 0xbf53c30c} }, -/**/ {{0xd4ad32f6, 0xbbf74ffe} },}, -/**/ {{{0x1a9d557e, 0xbf5382f9} }, -/**/ {{0x4acb368f, 0x3bd2e555} },}, -/**/ {{{0xb4bdf907, 0xbf5342e5} }, -/**/ {{0x07812806, 0x3be13442} },}, -/**/ {{{0x8f052df6, 0xbf5302d2} }, -/**/ {{0x70b1e756, 0x3bf5f429} },}, -/**/ {{{0xa97273d7, 0xbf52c2bf} }, -/**/ {{0x43a03fff, 0xbbf20aa3} },}, -/**/ {{{0x04054a3a, 0xbf5282ad} }, -/**/ {{0x8bebd7ad, 0xbbed4d57} },}, -/**/ {{{0x9ebd30ae, 0xbf52429a} }, -/**/ {{0x5a71c5a4, 0xbbff9529} },}, -/**/ {{{0x7999a6c6, 0xbf520288} }, -/**/ {{0x54100f9e, 0x3bfb055a} },}, -/**/ {{{0x949a2c12, 0xbf51c276} }, -/**/ {{0xa2e9f1b4, 0xbbff6978} },}, -/**/ {{{0xefbe402a, 0xbf518264} }, -/**/ {{0xbc188323, 0x3bf01fb9} },}, -/**/ {{{0x8b0562a1, 0xbf514253} }, -/**/ {{0x957bf23a, 0xbbf7c87c} },}, -/**/ {{{0x666f1311, 0xbf510242} }, -/**/ {{0xc8be6880, 0x3bdc2cb9} },}, -/**/ {{{0x81fad111, 0xbf50c231} }, -/**/ {{0x07ba000d, 0xbbf59fc1} },}, -/**/ {{{0xdda81c3d, 0xbf508220} }, -/**/ {{0xbf5c8a0b, 0xbbf06a0a} },}, -/**/ {{{0x79767431, 0xbf504210} }, -/**/ {{0xa9a705bc, 0x3bf3a6cf} },}, -/**/ {{{0x55655889, 0xbf500200} }, -/**/ {{0xbf0fa436, 0xbbe9abe6} },}, -/**/ {{{0xe2e891cc, 0xbf4f83e0} }, -/**/ {{0x1b81bf62, 0x3be4aa59} },}, -/**/ {{{0x9b4589ce, 0xbf4f03c1} }, -/**/ {{0x8a47f50a, 0xbbe60518} },}, -/**/ {{{0xd3e0985f, 0xbf4e83a2} }, -/**/ {{0x5ef17e96, 0x3bed32d8} },}, -/**/ {{{0x8cb8bcc3, 0xbf4e0384} }, -/**/ {{0xf09afa4d, 0xbbeb7b30} },}, -/**/ {{{0xc5ccf647, 0xbf4d8366} }, -/**/ {{0xf586cec2, 0xbbd527fc} },}, -/**/ {{{0x7f1c4437, 0xbf4d0349} }, -/**/ {{0x4a686886, 0x3bc2bcf0} },}, -/**/ {{{0xb8a5a5e3, 0xbf4c832c} }, -/**/ {{0x721c2ebe, 0x3bc98f93} },}, -/**/ {{{0x72681a9e, 0xbf4c0310} }, -/**/ {{0xb5308d22, 0xbbe20f00} },}, -/**/ {{{0xac62a1bf, 0xbf4b82f4} }, -/**/ {{0x9737b561, 0xbbe1edd0} },}, -/**/ {{{0x66943a9f, 0xbf4b02d9} }, -/**/ {{0x23f894a1, 0xbbcc950b} },}, -/**/ {{{0xa0fbe49a, 0xbf4a82be} }, -/**/ {{0x866bc982, 0xbb81da04} },}, -/**/ {{{0x5b989f0f, 0xbf4a02a4} }, -/**/ {{0x9d76196e, 0xbbd9114d} },}, -/**/ {{{0x96696961, 0xbf49828a} }, -/**/ {{0xd3292fd6, 0x3bc10d20} },}, -/**/ {{{0x516d42f4, 0xbf490271} }, -/**/ {{0x2e9a5dd5, 0xbbee53a3} },}, -/**/ {{{0x8ca32b32, 0xbf488258} }, -/**/ {{0xd18f8004, 0xbbc55af5} },}, -/**/ {{{0x480a2185, 0xbf480240} }, -/**/ {{0xa9b0178a, 0xbbb32d23} },}, -/**/ {{{0x83a1255c, 0xbf478228} }, -/**/ {{0x8152093a, 0x3be84cc3} },}, -/**/ {{{0x3f673627, 0xbf470211} }, -/**/ {{0xf4881c71, 0xbbd0055a} },}, -/**/ {{{0x7b5b535c, 0xbf4681fa} }, -/**/ {{0xb98336ea, 0x3bd2b73f} },}, -/**/ {{{0x377c7c71, 0xbf4601e4} }, -/**/ {{0x2ed05089, 0xbbcdcbed} },}, -/**/ {{{0x73c9b0e1, 0xbf4581ce} }, -/**/ {{0x61414697, 0xbbdda0c2} },}, -/**/ {{{0x3041f02a, 0xbf4501b9} }, -/**/ {{0x22f8b33c, 0x3bee5d53} },}, -/**/ {{{0x6ce439ca, 0xbf4481a4} }, -/**/ {{0x9c25c999, 0xbbe5512f} },}, -/**/ {{{0x29af8d47, 0xbf440190} }, -/**/ {{0xa4df0dfd, 0x3b7f48c2} },}, -/**/ {{{0x66a2ea26, 0xbf43817c} }, -/**/ {{0x517febd8, 0x3bd157c0} },}, -/**/ {{{0x23bd4ff0, 0xbf430169} }, -/**/ {{0x0176d244, 0xbbe2e229} },}, -/**/ {{{0x60fdbe33, 0xbf428156} }, -/**/ {{0x175812b3, 0x3be64664} },}, -/**/ {{{0x1e63347c, 0xbf420144} }, -/**/ {{0xd9355524, 0xbbe39ab4} },}, -/**/ {{{0x5becb260, 0xbf418132} }, -/**/ {{0xb6e1edc9, 0x3be74b27} },}, -/**/ {{{0x19993772, 0xbf410121} }, -/**/ {{0x393ab56a, 0xbbaa390b} },}, -/**/ {{{0x5767c34c, 0xbf408110} }, -/**/ {{0xf8c7783b, 0x3bd128e6} },}, -/**/ {{{0x15575589, 0xbf400100} }, -/**/ {{0xf23ef222, 0x3bec8863} },}, -/**/ {{{0xa6cddb8d, 0xbf3f01e0} }, -/**/ {{0xcdd29c3f, 0x3b8a9419} },}, -/**/ {{{0x232b174e, 0xbf3e01c2} }, -/**/ {{0xd5f5b191, 0xbbc7cf55} },}, -/**/ {{{0x9fc45d9e, 0xbf3d01a4} }, -/**/ {{0xb5038e7e, 0x3bddc58f} },}, -/**/ {{{0x1c97adca, 0xbf3c0188} }, -/**/ {{0xbb933e41, 0x3bc0238d} },}, -/**/ {{{0x99a30728, 0xbf3b016c} }, -/**/ {{0xc3c43664, 0xbbabde04} },}, -/**/ {{{0x16e46913, 0xbf3a0152} }, -/**/ {{0x5adc3673, 0x3bafe081} },}, -/**/ {{{0x9459d2eb, 0xbf390138} }, -/**/ {{0xc2a33d26, 0xbbd949da} },}, -/**/ {{{0x12014418, 0xbf380120} }, -/**/ {{0xf76e0326, 0xbbd3acbc} },}, -/**/ {{{0x8fd8bc07, 0xbf370108} }, -/**/ {{0x4cd6ce34, 0x3bdbde09} },}, -/**/ {{{0x0dde3a29, 0xbf3600f2} }, -/**/ {{0x05442a35, 0xbbb0bc28} },}, -/**/ {{{0x8c0fbdf9, 0xbf3500dc} }, -/**/ {{0x0908cbf7, 0x3bd21c68} },}, -/**/ {{{0x0a6b46f4, 0xbf3400c8} }, -/**/ {{0x0f107564, 0xbbdbd35e} },}, -/**/ {{{0x88eed4a1, 0xbf3300b4} }, -/**/ {{0x49a3dcb8, 0xbbc22067} },}, -/**/ {{{0x0798668a, 0xbf3200a2} }, -/**/ {{0xe7c5d0e5, 0x3bcdb7f0} },}, -/**/ {{{0x8665fc3f, 0xbf310090} }, -/**/ {{0xc7f9d69c, 0xbbd00add} },}, -/**/ {{{0x05559559, 0xbf300080} }, -/**/ {{0xa0e20e2f, 0x3bddd332} },}, -/**/ {{{0x08ca62e5, 0xbf2e00e1} }, -/**/ {{0x3a04bb77, 0xbbb15ff9} },}, -/**/ {{{0x0725a061, 0xbf2c00c4} }, -/**/ {{0xcc052f3e, 0x3bc88ab0} },}, -/**/ {{{0x05b8e275, 0xbf2a00a9} }, -/**/ {{0xf5f3cbcf, 0xbbcbba1a} },}, -/**/ {{{0x04802882, 0xbf280090} }, -/**/ {{0xa5bd7bd0, 0x3bcec900} },}, -/**/ {{{0x037771ef, 0xbf260079} }, -/**/ {{0x9b7b54fa, 0x3bb77ea0} },}, -/**/ {{{0x029abe33, 0xbf240064} }, -/**/ {{0x3ae68d18, 0xbbc1bbf0} },}, -/**/ {{{0x01e60cd1, 0xbf220051} }, -/**/ {{0x2b45cfcd, 0x3bb1dcd9} },}, -/**/ {{{0x01555d56, 0xbf200040} }, -/**/ {{0x863f53f6, 0x3bcddd88} },}, -/**/ {{{0x01c95eb7, 0xbf1c0062} }, -/**/ {{0xaa4dfd9a, 0x3bbd88f7} },}, -/**/ {{{0x01200510, 0xbf180048} }, -/**/ {{0x4f3db50b, 0xbb984d46} },}, -/**/ {{{0x00a6ad1c, 0xbf140032} }, -/**/ {{0x28ff1135, 0x3bb2e44b} },}, -/**/ {{{0x00555655, 0xbf100020} }, -/**/ {{0xccd5f17f, 0xbbb62224} },}, -/**/ {{{0x004800a2, 0xbf080024} }, -/**/ {{0x8d690542, 0xbb484d09} },}, -/**/ {{{0x00155575, 0xbf000010} }, -/**/ {{0x37779c0a, 0xbba56222} },}, -/**/ {{{0x00055559, 0xbef00008} }, -/**/ {{0x22cccd5f, 0xbb955622} },}, -/**/ {{{0x00000000, 0x00000000} }, -/**/ {{0x00000000, 0x00000000} },}, -/**/ {{{0x000aaaa3, 0x3eeffff0} }, -/**/ {{0xbd110fec, 0xbb8553bb} },}, -/**/ {{{0x002aaa6b, 0x3effffe0} }, -/**/ {{0xe6661d42, 0xbb953bbb} },}, -/**/ {{{0x0047ff5e, 0x3f07ffdc} }, -/**/ {{0x0d69020e, 0x3b484c90} },}, -/**/ {{{0x00aaa8ab, 0x3f0fffc0} }, -/**/ {{0x10fec82c, 0xbba3bbc1} },}, -/**/ {{{0x00a6a83a, 0x3f13ffce} }, -/**/ {{0x81546808, 0xbbb2e45f} },}, -/**/ {{{0x011ffaf0, 0x3f17ffb8} }, -/**/ {{0x4f3d9b6a, 0x3b984c53} },}, -/**/ {{{0x01c94bf5, 0x3f1bff9e} }, -/**/ {{0xdaa368ee, 0xbbbd8990} },}, -/**/ {{{0x02aa9aab, 0x3f1fff80} }, -/**/ {{0x78af0afc, 0x3b910e66} },}, -/**/ {{{0x01e5f330, 0x3f21ffaf} }, -/**/ {{0x26467402, 0xbbb1df8d} },}, -/**/ {{{0x029a9723, 0x3f23ff9c} }, -/**/ {{0x303b23b1, 0x3bc1b965} },}, -/**/ {{{0x037738be, 0x3f25ff87} }, -/**/ {{0x53d3dc06, 0xbbb787a3} },}, -/**/ {{{0x047fd782, 0x3f27ff70} }, -/**/ {{0xa5c0aff0, 0xbbced098} },}, -/**/ {{{0x05b872e4, 0x3f29ff57} }, -/**/ {{0x81c30d42, 0x3bcbadd4} },}, -/**/ {{{0x07250a51, 0x3f2bff3c} }, -/**/ {{0xd6bad8c1, 0xbbc89dd6} },}, -/**/ {{{0x08c99d24, 0x3f2dff1f} }, -/**/ {{0xaede8ad0, 0x3bb12609} },}, -/**/ {{{0x0aaa2ab1, 0x3f2fff00} }, -/**/ {{0x4dc4e3dc, 0x3ba0bbc0} },}, -/**/ {{{0x8665591f, 0x3f30ff6f} }, -/**/ {{0x80357b54, 0xbbd013d3} },}, -/**/ {{{0x07979982, 0x3f31ff5e} }, -/**/ {{0x4817ebcd, 0xbbce0e70} },}, -/**/ {{{0x88edd619, 0x3f32ff4b} }, -/**/ {{0xc582abc3, 0xbbd72b9e} },}, -/**/ {{{0x0a6a0e74, 0x3f33ff38} }, -/**/ {{0xb95bc1fe, 0x3bdb81fc} },}, -/**/ {{{0x8c0e4220, 0x3f34ff23} }, -/**/ {{0x9b549aae, 0x3bcaed12} },}, -/**/ {{{0x0ddc70a1, 0x3f35ff0e} }, -/**/ {{0xd97a3c05, 0x3bacf6f3} },}, -/**/ {{{0x8fd69976, 0x3f36fef7} }, -/**/ {{0x6f810a3c, 0x3bab2dcf} },}, -/**/ {{{0x11febc18, 0x3f37fee0} }, -/**/ {{0xf5d3f323, 0x3bd2b9bc} },}, -/**/ {{{0x9456d7fb, 0x3f38fec7} }, -/**/ {{0x6eaa1d6a, 0xbbbfb258} },}, -/**/ {{{0x16e0ec8b, 0x3f39feae} }, -/**/ {{0xceeb34b1, 0xbbb6137a} },}, -/**/ {{{0x999ef930, 0x3f3afe93} }, -/**/ {{0xdc639b08, 0xbbde70e0} },}, -/**/ {{{0x1c92fd4a, 0x3f3bfe78} }, -/**/ {{0x713cc126, 0xbbc4ed10} },}, -/**/ {{{0x9fbef835, 0x3f3cfe5b} }, -/**/ {{0xcc0e81bd, 0xbb873d63} },}, -/**/ {{{0x2324e946, 0x3f3dfe3e} }, -/**/ {{0x62dd5deb, 0x3bc09164} },}, -/**/ {{{0xa6c6cfcc, 0x3f3efe1f} }, -/**/ {{0x3512d15c, 0x3bdac2da} },}, -/**/ {{{0x2aa6ab11, 0x3f3ffe00} }, -/**/ {{0x62cc632d, 0x3b999e2b} },}, -/**/ {{{0xd7633d2c, 0x3f407eef} }, -/**/ {{0x63ff6024, 0xbbebc98b} },}, -/**/ {{{0x19941e6e, 0x3f40fedf} }, -/**/ {{0xe0aa6338, 0xbbb194c2} },}, -/**/ {{{0xdbe6f8eb, 0x3f417ecd} }, -/**/ {{0x57b0f571, 0x3be4241b} },}, -/**/ {{{0x1e5ccc3c, 0x3f41febc} }, -/**/ {{0x895d3592, 0x3bdc657d} },}, -/**/ {{{0xe0f697f6, 0x3f427ea9} }, -/**/ {{0x1c0ec17c, 0x3be35a5d} },}, -/**/ {{{0x23b55bac, 0x3f42fe97} }, -/**/ {{0x3e538464, 0x3bd6cfb7} },}, -/**/ {{{0xe69a16ed, 0x3f437e83} }, -/**/ {{0x7cef2478, 0x3bee96f7} },}, -/**/ {{{0x29a5c947, 0x3f43fe70} }, -/**/ {{0xbf46e36a, 0xbbd4d578} },}, -/**/ {{{0xecd97242, 0x3f447e5b} }, -/**/ {{0x3ff7dd44, 0xbbc9eb66} },}, -/**/ {{{0x30361165, 0x3f44fe47} }, -/**/ {{0x7e93f2fd, 0x3be400d7} },}, -/**/ {{{0xf3bca635, 0x3f457e31} }, -/**/ {{0xd375017f, 0xbbe0e2a2} },}, -/**/ {{{0x376e3031, 0x3f45fe1c} }, -/**/ {{0x8a5ae7f6, 0xbbd524eb} },}, -/**/ {{{0xfb4baed7, 0x3f467e05} }, -/**/ {{0x4e85c4e9, 0x3be204fb} },}, -/**/ {{{0x3f5621a3, 0x3f46fdef} }, -/**/ {{0x34886d52, 0xbbdf09d7} },}, -/**/ {{{0x038e880b, 0x3f477dd8} }, -/**/ {{0x14e596a3, 0xbbb8900e} },}, -/**/ {{{0x47f5e185, 0x3f47fdc0} }, -/**/ {{0x57d202d3, 0xbbebfa5c} },}, -/**/ {{{0x0c8d2d81, 0x3f487da8} }, -/**/ {{0xd68c0614, 0x3be2f6ae} },}, -/**/ {{{0x51556b70, 0x3f48fd8f} }, -/**/ {{0xe08fd201, 0xbbd0f4f2} },}, -/**/ {{{0x164f9abc, 0x3f497d76} }, -/**/ {{0xa871af60, 0x3b5296b7} },}, -/**/ {{{0x5b7cbace, 0x3f49fd5c} }, -/**/ {{0x9f17d42d, 0x3beb6ed4} },}, -/**/ {{{0x20ddcb0d, 0x3f4a7d42} }, -/**/ {{0x67c30397, 0xbbcb1149} },}, -/**/ {{{0x6673cada, 0x3f4afd27} }, -/**/ {{0x45da594f, 0x3bd32225} },}, -/**/ {{{0x2c3fb996, 0x3f4b7d0c} }, -/**/ {{0x208d4630, 0xbbb68893} },}, -/**/ {{{0x7242969d, 0x3f4bfcf0} }, -/**/ {{0x2b3efe1c, 0x3bc5db4d} },}, -/**/ {{{0x387d6149, 0x3f4c7cd4} }, -/**/ {{0xed57d98a, 0x3be46eff} },}, -/**/ {{{0x7ef118f1, 0x3f4cfcb7} }, -/**/ {{0x06f300fb, 0x3becc554} },}, -/**/ {{{0x459ebce9, 0x3f4d7c9a} }, -/**/ {{0x13638eb6, 0x3be1d251} },}, -/**/ {{{0x8c874c82, 0x3f4dfc7c} }, -/**/ {{0xd57a176f, 0xbbe863e9} },}, -/**/ {{{0x53abc708, 0x3f4e7c5e} }, -/**/ {{0x9528e50d, 0x3be2d95c} },}, -/**/ {{{0x9b0d2bc8, 0x3f4efc3f} }, -/**/ {{0xa5f5b8b7, 0x3bd1e8e8} },}, -/**/ {{{0x62ac7a09, 0x3f4f7c20} }, -/**/ {{0x17802a46, 0x3b5c8123} },}, -/**/ {{{0xaa8ab110, 0x3f4ffc00} }, -/**/ {{0xeb9b6cdb, 0xbbe0fecb} },}, -/**/ {{{0x3954680f, 0x3f503df0} }, -/**/ {{0x1c693678, 0x3bdac89b} },}, -/**/ {{{0xdd83eb3a, 0x3f507ddf} }, -/**/ {{0x0a75ad5f, 0xbbf638f6} },}, -/**/ {{{0x41d461a5, 0x3f50bdcf} }, -/**/ {{0x45f05b10, 0x3bfd4bc9} },}, -/**/ {{{0x66464aef, 0x3f50fdbe} }, -/**/ {{0x6abbf59c, 0xbbbd0554} },}, -/**/ {{{0x4ada26b1, 0x3f513dad} }, -/**/ {{0x6036fe6f, 0x3be38c65} },}, -/**/ {{{0xef907485, 0x3f517d9b} }, -/**/ {{0xf158bbc3, 0x3bfdc8a1} },}, -/**/ {{{0x5469b404, 0x3f51bd8a} }, -/**/ {{0x55632e3f, 0xbbdea231} },}, -/**/ {{{0x796664c3, 0x3f51fd78} }, -/**/ {{0x2edb73c2, 0xbbe00849} },}, -/**/ {{{0x5e870657, 0x3f523d66} }, -/**/ {{0x0789343e, 0x3bfba943} },}, -/**/ {{{0x03cc1855, 0x3f527d54} }, -/**/ {{0xeafafc52, 0x3bc5f644} },}, -/**/ {{{0x69361a4e, 0x3f52bd41} }, -/**/ {{0xa4a6e79f, 0xbbf2f743} },}, -/**/ {{{0x8ec58bd2, 0x3f52fd2e} }, -/**/ {{0x5ceb1abf, 0xbbd4f786} },}, -/**/ {{{0x747aec71, 0x3f533d1b} }, -/**/ {{0x49dc497d, 0xbbf369e3} },}, -/**/ {{{0x1a56bbb8, 0x3f537d08} }, -/**/ {{0x3726b14a, 0xbbfc5e6f} },}, -/**/ {{{0x80597933, 0x3f53bcf4} }, -/**/ {{0x808f75a7, 0xbbfe8b82} },}, -/**/ {{{0xa683a46c, 0x3f53fce0} }, -/**/ {{0x9cd06ae6, 0x3be02719} },}, -/**/ {{{0x8cd5bced, 0x3f543ccc} }, -/**/ {{0x758f80f8, 0x3bf9f98d} },}, -/**/ {{{0x3350423e, 0x3f547cb8} }, -/**/ {{0x48401f45, 0xbbd79c3d} },}, -/**/ {{{0x99f3b3e4, 0x3f54bca3} }, -/**/ {{0x2fba8948, 0xbbf422b8} },}, -/**/ {{{0xc0c09163, 0x3f54fc8e} }, -/**/ {{0xf4044be8, 0x3bf32cc1} },}, -/**/ {{{0xa7b75a40, 0x3f553c79} }, -/**/ {{0xf2249008, 0xbbe72cac} },}, -/**/ {{{0x4ed88dfb, 0x3f557c64} }, -/**/ {{0x459a204f, 0xbbe7183c} },}, -/**/ {{{0xb624ac14, 0x3f55bc4e} }, -/**/ {{0xba26d3d7, 0x3bf8aa64} },}, -/**/ {{{0xdd9c340b, 0x3f55fc38} }, -/**/ {{0x45fa193c, 0x3bdbb2ff} },}, -/**/ {{{0xc53fa55c, 0x3f563c22} }, -/**/ {{0x0484397b, 0x3bd67249} },}, -/**/ {{{0x6d0f7f83, 0x3f567c0c} }, -/**/ {{0xf1e73188, 0xbbd183d7} },}, -/**/ {{{0xd50c41fa, 0x3f56bbf5} }, -/**/ {{0x4ab68187, 0xbbef433d} },}, -/**/ {{{0xfd366c39, 0x3f56fbde} }, -/**/ {{0x66e09e58, 0x3be796b8} },}, -/**/ {{{0xe58e7db8, 0x3f573bc7} }, -/**/ {{0x81e6e7e6, 0x3bf65ec5} },}, -/**/ {{{0x8e14f5ed, 0x3f577bb0} }, -/**/ {{0xa9463a9c, 0xbbdb944d} },}, -/**/ {{{0xf6ca544b, 0x3f57bb98} }, -/**/ {{0xc5eda344, 0xbbc396ec} },}, -/**/ {{{0x1faf1845, 0x3f57fb81} }, -/**/ {{0xbb624f97, 0x3beb9e6d} },}, -/**/ {{{0x08c3c14d, 0x3f583b69} }, -/**/ {{0xe6295bf2, 0xbbe6ee13} },}, -/**/ {{{0xb208ced1, 0x3f587b50} }, -/**/ {{0x6ca19875, 0x3bfcf1a5} },}, -/**/ {{{0x1b7ec041, 0x3f58bb38} }, -/**/ {{0x07b4fc7e, 0x3bf2d181} },}, -/**/ {{{0x45261509, 0x3f58fb1f} }, -/**/ {{0x21bad336, 0x3bc419c5} },}, -/**/ {{{0x2eff4c94, 0x3f593b06} }, -/**/ {{0x700b305b, 0xbbdc2a4c} },}, -/**/ {{{0xd90ae64c, 0x3f597aec} }, -/**/ {{0xa23f359c, 0xbbfc53d3} },}, -/**/ {{{0x43496198, 0x3f59bad3} }, -/**/ {{0xaed6b50f, 0x3bf0c270} },}, -/**/ {{{0x6dbb3de1, 0x3f59fab9} }, -/**/ {{0x7a8be031, 0xbbf11464} },}, -/**/ {{{0x5860fa8a, 0x3f5a3a9f} }, -/**/ {{0x470dbe32, 0x3beae9e7} },}, -/**/ {{{0x033b16f8, 0x3f5a7a85} }, -/**/ {{0xda1f8579, 0x3bfc4721} },}, -/**/ {{{0x6e4a128e, 0x3f5aba6a} }, -/**/ {{0x029258ce, 0xbbf41852} },}, -/**/ {{{0x998e6cab, 0x3f5afa4f} }, -/**/ {{0x2eb18782, 0xbbf28584} },}, -/**/ {{{0x8508a4af, 0x3f5b3a34} }, -/**/ {{0x23241a2c, 0xbbea7970} },}, -/**/ {{{0x30b939f8, 0x3f5b7a19} }, -/**/ {{0x600551b6, 0xbbf1d8db} },}, -/**/ {{{0x9ca0abe2, 0x3f5bb9fd} }, -/**/ {{0x8c26cc71, 0xbbeaa412} },}, -/**/ {{{0xc8bf79c8, 0x3f5bf9e1} }, -/**/ {{0x30427cfc, 0xbbe7f81b} },}, -/**/ {{{0xb5162303, 0x3f5c39c5} }, -/**/ {{0xd1f134e1, 0x3bd9ec5f} },}, -/**/ {{{0x61a526eb, 0x3f5c79a9} }, -/**/ {{0x8980e47d, 0x3bff0cb0} },}, -/**/ {{{0xce6d04d7, 0x3f5cb98c} }, -/**/ {{0xe84ca4e2, 0x3bf35aca} },}, -/**/ {{{0xfb6e3c1b, 0x3f5cf96f} }, -/**/ {{0x1b0bd69f, 0x3bf9b1b8} },}, -/**/ {{{0xe8a94c0b, 0x3f5d3952} }, -/**/ {{0x3ce51832, 0x3be21310} },}, -/**/ {{{0x961eb3f8, 0x3f5d7935} }, -/**/ {{0x840c58ce, 0x3bf90786} },}, -/**/ {{{0x03cef334, 0x3f5db918} }, -/**/ {{0xf2dfb3f4, 0xbbfe0048} },}, -/**/ {{{0x31ba890b, 0x3f5df8fa} }, -/**/ {{0x3e295bec, 0x3bfcf652} },}, -/**/ {{{0x1fe1f4ce, 0x3f5e38dc} }, -/**/ {{0x151c9300, 0xbbfc5ebe} },}, -/**/ {{{0xce45b5c6, 0x3f5e78bd} }, -/**/ {{0x8a25b9c7, 0xbbef2cc4} },}, -/**/ {{{0x3ce64b3e, 0x3f5eb89f} }, -/**/ {{0xa6fea7bd, 0x3bfe6d27} },}, -/**/ {{{0x6bc43481, 0x3f5ef880} }, -/**/ {{0x914a6dab, 0xbbf68037} },}, -/**/ {{{0x5adff0d4, 0x3f5f3861} }, -/**/ {{0xf909e0e6, 0xbbf1d2f3} },}, -/**/ {{{0x0a39ff7e, 0x3f5f7842} }, -/**/ {{0xff1e1f71, 0xbbf64661} },}, -/**/ {{{0x79d2dfc3, 0x3f5fb822} }, -/**/ {{0x5a6f9e9a, 0xbbd76ce8} },}, -/**/ {{{0xa9ab10e6, 0x3f5ff802} }, -/**/ {{0xa153e3b2, 0x3bfe29e3} },}, -/**/ {{{0x4ce18915, 0x3f601bf1} }, -/**/ {{0xa3a73044, 0xbbe57c28} },}, -/**/ {{{0x250db166, 0x3f603be1} }, -/**/ {{0xc1ad9590, 0x3c0fd271} },}, -/**/ {{{0xdd5a4107, 0x3f605bd0} }, -/**/ {{0xc424c676, 0x3bfe4b5d} },}, -/**/ {{{0x75c77796, 0x3f607bc0} }, -/**/ {{0xc0eff1ba, 0xbc068804} },}, -/**/ {{{0xee5594b0, 0x3f609baf} }, -/**/ {{0x51dbded5, 0xbc0ff798} },}, -/**/ {{{0x4704d7f2, 0x3f60bb9f} }, -/**/ {{0x2d5aba70, 0xbbf70ef4} },}, -/**/ {{{0x7fd580f9, 0x3f60db8e} }, -/**/ {{0x7ae804b5, 0xbbeccb65} },}, -/**/ {{{0x98c7cf60, 0x3f60fb7d} }, -/**/ {{0x1775134d, 0x3bfede2f} },}, -/**/ {{{0x91dc02c3, 0x3f611b6c} }, -/**/ {{0x91ca4a67, 0xbc04d41e} },}, -/**/ {{{0x6b125aba, 0x3f613b5b} }, -/**/ {{0x4a12201d, 0x3bfe6d0c} },}, -/**/ {{{0x246b16e0, 0x3f615b4a} }, -/**/ {{0x4d4238d3, 0x3bfe507d} },}, -/**/ {{{0xbde676cd, 0x3f617b38} }, -/**/ {{0x0640462a, 0x3bfe0272} },}, -/**/ {{{0x3784ba19, 0x3f619b27} }, -/**/ {{0x02285659, 0x3bd94ab3} },}, -/**/ {{{0x9146205b, 0x3f61bb15} }, -/**/ {{0x1cc35b7b, 0xbbff1e2e} },}, -/**/ {{{0xcb2ae929, 0x3f61db03} }, -/**/ {{0x12f6bf8d, 0xbc03ee8e} },}, -/**/ {{{0xe5335418, 0x3f61faf1} }, -/**/ {{0x7b7d619b, 0x3c0bae5f} },}, -/**/ {{{0xdf5fa0bf, 0x3f621adf} }, -/**/ {{0xb3b731b0, 0xbbf5546a} },}, -/**/ {{{0xb9b00eb0, 0x3f623acd} }, -/**/ {{0x105fd253, 0xbbafb2b0} },}, -/**/ {{{0x7424dd7f, 0x3f625abb} }, -/**/ {{0xca53444b, 0x3c011647} },}, -/**/ {{{0x0ebe4cbf, 0x3f627aa9} }, -/**/ {{0x592f3be8, 0x3c01678f} },}, -/**/ {{{0x897c9c02, 0x3f629a96} }, -/**/ {{0x4347451d, 0xbbef2b12} },}, -/**/ {{{0xe4600ad8, 0x3f62ba83} }, -/**/ {{0xb2a477bc, 0x3bfb5bb7} },}, -/**/ {{{0x1f68d8d3, 0x3f62da71} }, -/**/ {{0x7a5822e4, 0xbc0590e1} },}, -/**/ {{{0x3a974581, 0x3f62fa5e} }, -/**/ {{0x53123101, 0xbbf0f2e5} },}, -/**/ {{{0x35eb9072, 0x3f631a4b} }, -/**/ {{0x0e3f5fde, 0xbc018db4} },}, -/**/ {{{0x1165f933, 0x3f633a38} }, -/**/ {{0x8d0afb38, 0x3c0921d5} },}, -/**/ {{{0xcd06bf53, 0x3f635a24} }, -/**/ {{0xb5791b80, 0x3c01f6ba} },}, -/**/ {{{0x68ce225e, 0x3f637a11} }, -/**/ {{0xa1894236, 0x3bde2af8} },}, -/**/ {{{0xe4bc61e0, 0x3f6399fd} }, -/**/ {{0xd0f06ff3, 0xbc062a48} },}, -/**/ {{{0x40d1bd63, 0x3f63b9ea} }, -/**/ {{0x4b4f9c11, 0x3bffc80c} },}, -/**/ {{{0x7d0e7473, 0x3f63d9d6} }, -/**/ {{0x6a92c891, 0x3c02219b} },}, -/**/ {{{0x9972c699, 0x3f63f9c2} }, -/**/ {{0x790ade9e, 0x3c0d3590} },}, -/**/ {{{0x95fef35f, 0x3f6419ae} }, -/**/ {{0x792a458c, 0xbc01c279} },}, -/**/ {{{0x72b33a4b, 0x3f64399a} }, -/**/ {{0x327bffae, 0x3c02ce64} },}, -/**/ {{{0x2f8fdae7, 0x3f645986} }, -/**/ {{0xd231155c, 0xbc070aec} },}, -/**/ {{{0xcc9514b7, 0x3f647971} }, -/**/ {{0xe4bbf776, 0x3c0f373d} },}, -/**/ {{{0x49c32744, 0x3f64995d} }, -/**/ {{0xbf22b2a7, 0xbbf6d7e5} },}, -/**/ {{{0xa71a5211, 0x3f64b948} }, -/**/ {{0x64fe2936, 0xbbedec69} },}, -/**/ {{{0xe49ad4a3, 0x3f64d933} }, -/**/ {{0xabee4257, 0x3bf5fc4b} },}, -/**/ {{{0x0244ee7e, 0x3f64f91f} }, -/**/ {{0x3cd1474f, 0x3c0c6fe3} },}, -/**/ {{{0x0018df26, 0x3f65190a} }, -/**/ {{0xd11e7fa5, 0xbc023957} },}, -/**/ {{{0xde16e61b, 0x3f6538f4} }, -/**/ {{0x55380346, 0x3c006c31} },}, -/**/ {{{0x9c3f42e1, 0x3f6558df} }, -/**/ {{0xc4a5134c, 0xbc09b7d4} },}, -/**/ {{{0x3a9234f7, 0x3f6578ca} }, -/**/ {{0x2772c19c, 0xbc0e3f10} },}, -/**/ {{{0xb90ffbdd, 0x3f6598b4} }, -/**/ {{0x5592b468, 0x3be6f110} },}, -/**/ {{{0x17b8d714, 0x3f65b89f} }, -/**/ {{0xb251ace2, 0xbc0a5fea} },}, -/**/ {{{0x568d0619, 0x3f65d889} }, -/**/ {{0x315da285, 0xbc0aacc9} },}, -/**/ {{{0x758cc86a, 0x3f65f873} }, -/**/ {{0xba64d81a, 0xbbeb0782} },}, -/**/ {{{0x74b85d85, 0x3f66185d} }, -/**/ {{0x8e1eb3fa, 0xbc09b459} },}, -/**/ {{{0x541004e5, 0x3f663847} }, -/**/ {{0x1d86e863, 0x3bce9c22} },}, -/**/ {{{0x1393fe07, 0x3f665831} }, -/**/ {{0xcf37ee90, 0xbbfbeb77} },}, -/**/ {{{0xb3448865, 0x3f66781a} }, -/**/ {{0xc252e3c9, 0xbc02dc68} },}, -/**/ {{{0x3321e379, 0x3f669804} }, -/**/ {{0xb40b3741, 0xbbe73a0b} },}, - }; - -#endif -#endif diff --git a/sysdeps/ieee754/dbl-64/upow.h b/sysdeps/ieee754/dbl-64/upow.h deleted file mode 100644 index 9dcbd3eb2b..0000000000 --- a/sysdeps/ieee754/dbl-64/upow.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/******************************************************************/ -/* */ -/* MODULE_NAME:upow.h */ -/* */ -/* common data and variables prototype and definition */ -/******************************************************************/ - -#ifndef UPOW_H -#define UPOW_H - -#include "mydefs.h" - -#ifdef BIG_ENDI - const static mynumber -/**/ nZERO = {{0x80000000, 0}}, /* -0.0 */ -/**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */ -/**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */ -/**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */ -/**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */ -/**/ bigu = {{0x4297ffff, 0xfffffd2c}}, /* 1.5*2**42 -724*2**-10 */ -/**/ bigv = {{0x4207ffff, 0xfff8016a}}, /* 1.5*2**33-1+362*2**-19 */ -/**/ t52 = {{0x43300000, 0x00000000}}, /* 2**52 */ -/**/ two52e = {{0x43300000, 0x000003ff}}; /* 2**52' */ - -#else -#ifdef LITTLE_ENDI - const static mynumber -/**/ nZERO = {{0, 0x80000000}}, /* -0.0 */ -/**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */ -/**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */ -/**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */ -/**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */ -/**/ bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */ -/**/ bigv = {{0xfff8016a, 0x4207ffff}}, /* 1.5*2**33-1+362*2**-19 */ -/**/ t52 = {{0x00000000, 0x43300000}}, /* 2**52 */ -/**/ two52e = {{0x000003ff, 0x43300000}}; /* 2**52' */ - -#endif -#endif - -const static double p2=-0.5, p3 = 3.3333333333333333333e-1, p4 = -0.25, - q2 = -0.5, q3 = 3.3333333333331404e-01, q4 = -2.4999999999996436e-01, - q5 = 2.0000010500004459e-01, q6 = -1.6666678916688004e-01, - r3 = 3.33333333333333333372884096563030E-01, - r4 = -2.50000000000000000213574153875908E-01, - r5 = 1.99999999999683593814072199830603E-01, - r6 = -1.66666666666065494878165510225378E-01, - r7 = 1.42857517857114380606360005067609E-01, - r8 = -1.25000449999974370683775964001702E-01, - s3 = 0.333251953125000000e0, - ss3 = 8.138020833333333333e-05, - s4 = -2.500000000000000000e-01, - s5 = 1.999999999999960937e-01, - s6 = -1.666666666666592447e-01, - s7 = 1.428571845238194705e-01, - s8 = -1.250000500000149097e-01; -#endif diff --git a/sysdeps/ieee754/dbl-64/upow.tbl b/sysdeps/ieee754/dbl-64/upow.tbl deleted file mode 100644 index f92c69c521..0000000000 --- a/sysdeps/ieee754/dbl-64/upow.tbl +++ /dev/null @@ -1,10188 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/****************************************************************/ -/* TABLES FOR THE upow() FUNCTION */ -/****************************************************************/ - - - -#ifdef BIG_ENDI -static const union {int4 i[5800]; double x[2900];} ui = { .i = { -/**/ 0x3FF6A000, 0x00000000, -/**/ 0x3F33CD15, 0x3729043E, -/**/ 0xBFD63003, 0x0B3AB000, -/**/ 0x3D2DB623, 0xE731AE00, -/**/ 0x3FF69800, 0x00000000, -/**/ 0x3F33F349, 0xCC7267D0, -/**/ 0xBFD61965, 0xCDB03000, -/**/ 0x3D2F08AD, 0x603C488E, -/**/ 0x3FF69000, 0x00000000, -/**/ 0x3F3473A8, 0x8D0BFD2E, -/**/ 0xBFD602D0, 0x8AF09000, -/**/ 0xBD1EBE91, 0x76DF3F65, -/**/ 0x3FF68800, 0x00000000, -/**/ 0x3F354DD2, 0x390B9ED0, -/**/ 0xBFD5EC43, 0x3D5C3000, -/**/ 0xBD36B71A, 0x1229D17F, -/**/ 0x3FF68000, 0x00000000, -/**/ 0x3F368168, 0x16816817, -/**/ 0xBFD5D5BD, 0xDF596000, -/**/ 0x3D0A0B2A, 0x08A465DC, -/**/ 0x3FF67800, 0x00000000, -/**/ 0x3F380E0B, 0xF08C7765, -/**/ 0xBFD5BF40, 0x6B544000, -/**/ 0x3D227023, 0xEB68981C, -/**/ 0x3FF67000, 0x00000000, -/**/ 0x3F39F360, 0x16719F36, -/**/ 0xBFD5A8CA, 0xDBBEE000, -/**/ 0x3CF7C79B, 0x0AF7ECF8, -/**/ 0x3FF66800, 0x00000000, -/**/ 0x3F3C3107, 0x5AB40167, -/**/ 0xBFD5925D, 0x2B113000, -/**/ 0x3D369BF5, 0xA7A56F34, -/**/ 0x3FF66000, 0x00000000, -/**/ 0x3F3EC6A5, 0x122F9016, -/**/ 0xBFD57BF7, 0x53C8D000, -/**/ 0xBD1FADED, 0xEE5D40EF, -/**/ 0x3FF65C00, 0x00000000, -/**/ 0xBF3E4C22, 0xECCA9097, -/**/ 0xBFD56599, 0x50695000, -/**/ 0xBD14C5FD, 0x2BADC774, -/**/ 0x3FF65400, 0x00000000, -/**/ 0xBF3B07AC, 0x4B55CC62, -/**/ 0xBFD54F43, 0x1B7BE000, -/**/ 0xBD1A8954, 0xC0910952, -/**/ 0x3FF64C00, 0x00000000, -/**/ 0xBF376C52, 0x32DA090E, -/**/ 0xBFD538F4, 0xAF8F7000, -/**/ 0xBD27EC02, 0xE45547CE, -/**/ 0x3FF64400, 0x00000000, -/**/ 0xBF337A6F, 0x4DE9BD38, -/**/ 0xBFD522AE, 0x0738A000, -/**/ 0xBD2EBE70, 0x8164C759, -/**/ 0x3FF63C00, 0x00000000, -/**/ 0xBF2E64BB, 0x923C708B, -/**/ 0xBFD50C6F, 0x1D11C000, -/**/ 0x3D3A0E6B, 0x7E827C2C, -/**/ 0x3FF63400, 0x00000000, -/**/ 0xBF2528EE, 0xA7E43FD4, -/**/ 0xBFD4F637, 0xEBBAA000, -/**/ 0x3D3FC158, 0xCB3124B9, -/**/ 0x3FF62C00, 0x00000000, -/**/ 0xBF168454, 0x86689DF7, -/**/ 0xBFD4E008, 0x6DD8C000, -/**/ 0x3D34D692, 0xA1E44788, -/**/ 0x3FF62400, 0x00000000, -/**/ 0xBED623FA, 0x77016240, -/**/ 0xBFD4C9E0, 0x9E173000, -/**/ 0x3D2E2089, 0x1B0AD8A4, -/**/ 0x3FF61C00, 0x00000000, -/**/ 0x3F151300, 0x58715130, -/**/ 0xBFD4B3C0, 0x77268000, -/**/ 0x3D165B46, 0x81052B9F, -/**/ 0x3FF61400, 0x00000000, -/**/ 0x3F266D06, 0x35D2754E, -/**/ 0xBFD49DA7, 0xF3BCC000, -/**/ 0xBD307B33, 0x4DAF4B9A, -/**/ 0x3FF60C00, 0x00000000, -/**/ 0x3F317C61, 0xDA197F23, -/**/ 0xBFD48797, 0x0E958000, -/**/ 0xBD3DC1B8, 0x465CF25F, -/**/ 0x3FF60400, 0x00000000, -/**/ 0x3F381605, 0x81605816, -/**/ 0xBFD4718D, 0xC271C000, -/**/ 0xBD306C18, 0xFB4C14C5, -/**/ 0x3FF5FC00, 0x00000000, -/**/ 0x3F3F0317, 0xB5C6F559, -/**/ 0xBFD45B8C, 0x0A17E000, -/**/ 0x3D0D9120, 0xE7D0A853, -/**/ 0x3FF5F800, 0x00000000, -/**/ 0xBF39BCBD, 0x6D2041E3, -/**/ 0xBFD44591, 0xE053A000, -/**/ 0x3D06E958, 0x92923D88, -/**/ 0x3FF5F000, 0x00000000, -/**/ 0xBF3229CF, 0x5604CC40, -/**/ 0xBFD42F9F, 0x3FF62000, -/**/ 0xBD390644, 0x0F7D3354, -/**/ 0x3FF5E800, 0x00000000, -/**/ 0xBF2488E5, 0xFD431489, -/**/ 0xBFD419B4, 0x23D5F000, -/**/ 0x3D3CE379, 0x226DE3EC, -/**/ 0x3FF5E000, 0x00000000, -/**/ 0xBF0067E7, 0x6424E9C9, -/**/ 0xBFD403D0, 0x86CEA000, -/**/ 0xBD3E6EF5, 0x74487308, -/**/ 0x3FF5D800, 0x00000000, -/**/ 0x3F19F0FB, 0x38A94D24, -/**/ 0xBFD3EDF4, 0x63C17000, -/**/ 0x3D3F067C, 0x297F2C3F, -/**/ 0x3FF5D000, 0x00000000, -/**/ 0x3F2EADD9, 0x23CAD2AA, -/**/ 0xBFD3D81F, 0xB5947000, -/**/ 0x3D222C7C, 0x2A9D37A4, -/**/ 0x3FF5C800, 0x00000000, -/**/ 0x3F3882B9, 0x31057262, -/**/ 0xBFD3C252, 0x77333000, -/**/ 0xBD183B54, 0xB606BD5C, -/**/ 0x3FF5C400, 0x00000000, -/**/ 0xBF3E00AE, 0x10FFA8F8, -/**/ 0xBFD3AC8C, 0xA38E6000, -/**/ 0x3D2D0BEF, 0xBC02BE4A, -/**/ 0x3FF5BC00, 0x00000000, -/**/ 0xBF34339B, 0x8056EAF3, -/**/ 0xBFD396CE, 0x359BC000, -/**/ 0x3D05839C, 0x5663663D, -/**/ 0x3FF5B400, 0x00000000, -/**/ 0xBF242CC1, 0xF31D7FD5, -/**/ 0xBFD38117, 0x28565000, -/**/ 0x3D2A71E4, 0x93A0702B, -/**/ 0x3FF5AC00, 0x00000000, -/**/ 0x3ED5AC05, 0x6B015AC0, -/**/ 0xBFD36B67, 0x76BE1000, -/**/ 0xBD116ECD, 0xB0F177C8, -/**/ 0x3FF5A400, 0x00000000, -/**/ 0x3F26268D, 0x5BA55E5A, -/**/ 0xBFD355BF, 0x1BD83000, -/**/ 0x3D2BA99B, 0x8964F0E8, -/**/ 0x3FF59C00, 0x00000000, -/**/ 0x3F361F12, 0x3CCAA376, -/**/ 0xBFD3401E, 0x12AED000, -/**/ 0x3D317C73, 0x556E291D, -/**/ 0x3FF59800, 0x00000000, -/**/ 0xBF3E863D, 0x62D32417, -/**/ 0xBFD32A84, 0x56512000, -/**/ 0xBD04F928, 0x139AF5D6, -/**/ 0x3FF59000, 0x00000000, -/**/ 0xBF32DCF7, 0xEA712DCF, -/**/ 0xBFD314F1, 0xE1D36000, -/**/ 0x3D28E27A, 0xD3213CB8, -/**/ 0x3FF58800, 0x00000000, -/**/ 0xBF1B95B2, 0xA0CC87E8, -/**/ 0xBFD2FF66, 0xB04EB000, -/**/ 0x3D38AED2, 0x541E6E2E, -/**/ 0x3FF58000, 0x00000000, -/**/ 0x3F158056, 0x01580560, -/**/ 0xBFD2E9E2, 0xBCE12000, -/**/ 0xBD24300C, 0x128D1DC2, -/**/ 0x3FF57800, 0x00000000, -/**/ 0x3F31F340, 0x15791F34, -/**/ 0xBFD2D466, 0x02ADD000, -/**/ 0x3D288D0D, 0xDCD54196, -/**/ 0x3FF57000, 0x00000000, -/**/ 0x3F3ED3C5, 0x06B39A23, -/**/ 0xBFD2BEF0, 0x7CDC9000, -/**/ 0xBD2A9CFA, 0x4A5004F4, -/**/ 0x3FF56C00, 0x00000000, -/**/ 0xBF33FEA9, 0x53FEA954, -/**/ 0xBFD2A982, 0x269A4000, -/**/ 0x3D22058E, 0x557285CF, -/**/ 0x3FF56400, 0x00000000, -/**/ 0xBF1A1160, 0xEB478503, -/**/ 0xBFD2941A, 0xFB187000, -/**/ 0x3D3210C2, 0xB730E28B, -/**/ 0x3FF55C00, 0x00000000, -/**/ 0x3F1D09AD, 0xE4A18B2E, -/**/ 0xBFD27EBA, 0xF58D9000, -/**/ 0x3D2B1988, 0x00B4BDA7, -/**/ 0x3FF55400, 0x00000000, -/**/ 0x3F355555, 0x55555555, -/**/ 0xBFD26962, 0x1134E000, -/**/ 0x3D31B61F, 0x10522625, -/**/ 0x3FF55000, 0x00000000, -/**/ 0xBF3C4BE6, 0xB319A21F, -/**/ 0xBFD25410, 0x494E5000, -/**/ 0xBD3B1D7A, 0xC0EF77F2, -/**/ 0x3FF54800, 0x00000000, -/**/ 0xBF2B4328, 0x8FA03FD5, -/**/ 0xBFD23EC5, 0x991EC000, -/**/ 0x3D36DBE4, 0x48A2E522, -/**/ 0x3FF54000, 0x00000000, -/**/ 0x3EF54015, 0x40154015, -/**/ 0xBFD22981, 0xFBEF8000, -/**/ 0x3D3A1421, 0x609580DA, -/**/ 0x3FF53800, 0x00000000, -/**/ 0x3F30948F, 0x40FEAC6F, -/**/ 0xBFD21445, 0x6D0EC000, -/**/ 0x3D3CAF04, 0x28B728A3, -/**/ 0x3FF53400, 0x00000000, -/**/ 0xBF3FE034, 0xFD04F7B8, -/**/ 0xBFD1FF0F, 0xE7CF4000, -/**/ 0xBD3E9D5B, 0x513FF0C1, -/**/ 0x3FF52C00, 0x00000000, -/**/ 0xBF300A95, 0x7FAB5403, -/**/ 0xBFD1E9E1, 0x6788A000, -/**/ 0x3D382EAE, 0xD3C8B65E, -/**/ 0x3FF52400, 0x00000000, -/**/ 0x3EB52401, 0x52401524, -/**/ 0xBFD1D4B9, 0xE796C000, -/**/ 0xBD222A66, 0x7C42E56D, -/**/ 0x3FF51C00, 0x00000000, -/**/ 0x3F307EAE, 0x2F8151D0, -/**/ 0xBFD1BF99, 0x635A7000, -/**/ 0x3D31AC89, 0x575C2125, -/**/ 0x3FF51800, 0x00000000, -/**/ 0xBF3ECE3F, 0xEAE9ECE4, -/**/ 0xBFD1AA7F, 0xD638D000, -/**/ 0xBD29F60A, 0x9616F7A0, -/**/ 0x3FF51000, 0x00000000, -/**/ 0xBF2BA3DD, 0xC7675243, -/**/ 0xBFD1956D, 0x3B9BC000, -/**/ 0xBD27D2F7, 0x3AD1AA14, -/**/ 0x3FF50800, 0x00000000, -/**/ 0x3F0B9AC8, 0x764E368D, -/**/ 0xBFD18061, 0x8EF19000, -/**/ 0x3D3482FF, 0xC86D38E5, -/**/ 0x3FF50000, 0x00000000, -/**/ 0x3F350150, 0x15015015, -/**/ 0xBFD16B5C, 0xCBAD0000, -/**/ 0x3D323299, 0x042D74BF, -/**/ 0x3FF4FC00, 0x00000000, -/**/ 0xBF392851, 0x4A683C50, -/**/ 0xBFD1565E, 0xED456000, -/**/ 0x3CEE75AD, 0xFB6ABA25, -/**/ 0x3FF4F400, 0x00000000, -/**/ 0xBF1C2748, 0xACD95EF0, -/**/ 0xBFD14167, 0xEF367000, -/**/ 0xBD3E0C07, 0x824DAAF5, -/**/ 0x3FF4EC00, 0x00000000, -/**/ 0x3F26B90D, 0x67A47465, -/**/ 0xBFD12C77, 0xCD007000, -/**/ 0xBD13B294, 0x8A11F797, -/**/ 0x3FF4E400, 0x00000000, -/**/ 0x3F3E0A72, 0xF0539783, -/**/ 0xBFD1178E, 0x8227E000, -/**/ 0xBD31EF78, 0xCE2D07F2, -/**/ 0x3FF4E000, 0x00000000, -/**/ 0xBF2E00A6, 0xF87FD642, -/**/ 0xBFD102AC, 0x0A35D000, -/**/ 0x3D2F1FBD, 0xDFDFD686, -/**/ 0x3FF4D800, 0x00000000, -/**/ 0x3F10EFB7, 0x0B12E3FD, -/**/ 0xBFD0EDD0, 0x60B78000, -/**/ 0xBD0019B5, 0x2D8435F5, -/**/ 0x3FF4D000, 0x00000000, -/**/ 0x3F37BEF1, 0x5CB4DBE5, -/**/ 0xBFD0D8FB, 0x813EB000, -/**/ 0xBD1EE8C8, 0x8753FA35, -/**/ 0x3FF4CC00, 0x00000000, -/**/ 0xBF34778D, 0xA50918B1, -/**/ 0xBFD0C42D, 0x67616000, -/**/ 0xBD27188B, 0x163CEAE9, -/**/ 0x3FF4C400, 0x00000000, -/**/ 0xBED9F4F7, 0xE37288EC, -/**/ 0xBFD0AF66, 0x0EB9E000, -/**/ 0xBD23C7C3, 0xF528D80A, -/**/ 0x3FF4BC00, 0x00000000, -/**/ 0x3F33EDDA, 0x68FE0E42, -/**/ 0xBFD09AA5, 0x72E6C000, -/**/ 0xBD3B50A1, 0xE1734342, -/**/ 0x3FF4B800, 0x00000000, -/**/ 0xBF3776C6, 0xB72E47D9, -/**/ 0xBFD085EB, 0x8F8AE000, -/**/ 0xBD3E5D51, 0x3F45FE7B, -/**/ 0x3FF4B000, 0x00000000, -/**/ 0xBF04AFD6, 0xA052BF5B, -/**/ 0xBFD07138, 0x604D6000, -/**/ 0x3D3E7632, 0x4E912B17, -/**/ 0x3FF4A800, 0x00000000, -/**/ 0x3F328FFA, 0xD5B5C015, -/**/ 0xBFD05C8B, 0xE0D96000, -/**/ 0xBD2AD0F1, 0xC77CCB58, -/**/ 0x3FF4A400, 0x00000000, -/**/ 0xBF380528, 0x9FEB5D80, -/**/ 0xBFD047E6, 0x0CDE8000, -/**/ 0xBD2DBDF1, 0x0D397F3C, -/**/ 0x3FF49C00, 0x00000000, -/**/ 0xBF02AD3E, 0x25FF5B21, -/**/ 0xBFD03346, 0xE0106000, -/**/ 0xBCF89FF8, 0xA966395C, -/**/ 0x3FF49400, 0x00000000, -/**/ 0x3F339E3B, 0x2D066EA2, -/**/ 0xBFD01EAE, 0x5626C000, -/**/ 0xBD3A43DC, 0xFADE85AE, -/**/ 0x3FF49000, 0x00000000, -/**/ 0xBF3629C1, 0xAFB2E932, -/**/ 0xBFD00A1C, 0x6ADDA000, -/**/ 0xBD31CD8D, 0x688B9E18, -/**/ 0x3FF48800, 0x00000000, -/**/ 0x3ED48805, 0x22014880, -/**/ 0xBFCFEB22, 0x33EA0000, -/**/ 0xBD2F3418, 0xDE00938B, -/**/ 0x3FF48000, 0x00000000, -/**/ 0x3F37119F, 0x3D324D89, -/**/ 0xBFCFC218, 0xBE620000, -/**/ 0xBD34BBA4, 0x6F1CF6A0, -/**/ 0x3FF47C00, 0x00000000, -/**/ 0xBF31EB85, 0x1EB851EC, -/**/ 0xBFCF991C, 0x6CB3C000, -/**/ 0x3D390D04, 0xCD7CC834, -/**/ 0x3FF47400, 0x00000000, -/**/ 0x3F1569C9, 0xAAFC7C01, -/**/ 0xBFCF702D, 0x36778000, -/**/ 0x3D108195, 0x16673E23, -/**/ 0x3FF46C00, 0x00000000, -/**/ 0x3F3CE345, 0x96066250, -/**/ 0xBFCF474B, 0x134E0000, -/**/ 0x3D3BAE49, 0xF1DF7B5E, -/**/ 0x3FF46800, 0x00000000, -/**/ 0xBF26A297, 0x1D02DE87, -/**/ 0xBFCF1E75, 0xFADFA000, -/**/ 0x3D20862B, 0x25D83F6D, -/**/ 0x3FF46000, 0x00000000, -/**/ 0x3F2978FE, 0xB9F34381, -/**/ 0xBFCEF5AD, 0xE4DD0000, -/**/ 0x3CCA2115, 0x65BB8E11, -/**/ 0x3FF45C00, 0x00000000, -/**/ 0xBF3AF398, 0xF6C71366, -/**/ 0xBFCECCF2, 0xC8FEA000, -/**/ 0x3D3BEC63, 0xA3E75640, -/**/ 0x3FF45400, 0x00000000, -/**/ 0xBF030E9C, 0x449AFF5D, -/**/ 0xBFCEA444, 0x9F04A000, -/**/ 0xBD35E916, 0x63732A36, -/**/ 0x3FF44C00, 0x00000000, -/**/ 0x3F367190, 0xF8B42EF3, -/**/ 0xBFCE7BA3, 0x5EB78000, -/**/ 0x3D0D5EEE, 0x23793649, -/**/ 0x3FF44800, 0x00000000, -/**/ 0xBF3079A9, 0xD260511C, -/**/ 0xBFCE530E, 0xFFE72000, -/**/ 0x3D3FDBDB, 0xB13F7C18, -/**/ 0x3FF44000, 0x00000000, -/**/ 0x3F21B87C, 0x0B644FBE, -/**/ 0xBFCE2A87, 0x7A6B2000, -/**/ 0xBD382381, 0x7787081A, -/**/ 0x3FF43C00, 0x00000000, -/**/ 0xBF3D8CF5, 0x411B2E25, -/**/ 0xBFCE020C, 0xC6236000, -/**/ 0x3D252B00, 0xADB91424, -/**/ 0x3FF43400, 0x00000000, -/**/ 0xBF0DAC08, 0xD6A60978, -/**/ 0xBFCDD99E, 0xDAF6E000, -/**/ 0x3D302EC6, 0x69C756EB, -/**/ 0x3FF42C00, 0x00000000, -/**/ 0x3F36625D, 0x51F86EFA, -/**/ 0xBFCDB13D, 0xB0D48000, -/**/ 0xBD32806A, 0x847527E6, -/**/ 0x3FF42800, 0x00000000, -/**/ 0xBF2E8B2D, 0xA8766564, -/**/ 0xBFCD88E9, 0x3FB30000, -/**/ 0x3D375F28, 0x0234BF51, -/**/ 0x3FF42000, 0x00000000, -/**/ 0x3F26A4CB, 0xCB2A247B, -/**/ 0xBFCD60A1, 0x7F904000, -/**/ 0x3D35D6E0, 0x6FC20D39, -/**/ 0x3FF41C00, 0x00000000, -/**/ 0xBF39D5E8, 0xC17DF552, -/**/ 0xBFCD3866, 0x68720000, -/**/ 0x3D373650, 0xB38932BC, -/**/ 0x3FF41400, 0x00000000, -/**/ 0x3EF41414, 0x14141414, -/**/ 0xBFCD1037, 0xF2656000, -/**/ 0x3D084A7E, 0x75B6F6E4, -/**/ 0x3FF40C00, 0x00000000, -/**/ 0x3F3C97A8, 0x43AE87FD, -/**/ 0xBFCCE816, 0x157F2000, -/**/ 0x3D29E0AB, 0xA2099515, -/**/ 0x3FF40800, 0x00000000, -/**/ 0xBF1F4BBC, 0x66A67E6F, -/**/ 0xBFCCC000, 0xC9DB4000, -/**/ 0x3D1D6D58, 0x5D57AFF9, -/**/ 0x3FF40000, 0x00000000, -/**/ 0x3F340140, 0x14014014, -/**/ 0xBFCC97F8, 0x079D4000, -/**/ 0xBD23B161, 0xA8C6E6C5, -/**/ 0x3FF3FC00, 0x00000000, -/**/ 0xBF2FD809, 0xFD809FD8, -/**/ 0xBFCC6FFB, 0xC6F00000, -/**/ 0xBD3EE138, 0xD3A69D43, -/**/ 0x3FF3F400, 0x00000000, -/**/ 0x3F28CA0E, 0x57EE89D2, -/**/ 0xBFCC480C, 0x0005C000, -/**/ 0xBD39A294, 0xD5E44E76, -/**/ 0x3FF3F000, 0x00000000, -/**/ 0xBF370BD5, 0xA50F9260, -/**/ 0xBFCC2028, 0xAB180000, -/**/ 0x3D292E0E, 0xE55C7AC6, -/**/ 0x3FF3E800, 0x00000000, -/**/ 0x3F1704AA, 0x75945FCE, -/**/ 0xBFCBF851, 0xC0676000, -/**/ 0x3D35420E, 0x4C0854AD, -/**/ 0x3FF3E400, 0x00000000, -/**/ 0xBF3D3431, 0xB56FD83C, -/**/ 0xBFCBD087, 0x383BE000, -/**/ 0x3D2D4BC4, 0x595412B6, -/**/ 0x3FF3DC00, 0x00000000, -/**/ 0x3EB3DC01, 0x3DC013DC, -/**/ 0xBFCBA8C9, 0x0AE4A000, -/**/ 0xBD3A32E7, 0xF44432DA, -/**/ 0x3FF3D400, 0x00000000, -/**/ 0x3F3D991A, 0xA75C5BBD, -/**/ 0xBFCB8117, 0x30B82000, -/**/ 0xBD1E9068, 0x3B9CD768, -/**/ 0x3FF3D000, 0x00000000, -/**/ 0xBF1292BA, 0x59C52F5D, -/**/ 0xBFCB5971, 0xA213A000, -/**/ 0xBD39B50E, 0x83AA91DF, -/**/ 0x3FF3C800, 0x00000000, -/**/ 0x3F395A47, 0xBABE7440, -/**/ 0xBFCB31D8, 0x575BC000, -/**/ 0xBD3C794E, 0x562A63CB, -/**/ 0x3FF3C400, 0x00000000, -/**/ 0xBF20D475, 0x58A0943A, -/**/ 0xBFCB0A4B, 0x48FC2000, -/**/ 0x3D22E72D, 0x5C3998ED, -/**/ 0x3FF3BC00, 0x00000000, -/**/ 0x3F360D92, 0x3295482C, -/**/ 0xBFCAE2CA, 0x6F672000, -/**/ 0xBD37A8D5, 0xAE54F550, -/**/ 0x3FF3B800, 0x00000000, -/**/ 0xBF267D12, 0xCAB48651, -/**/ 0xBFCABB55, 0xC316A000, -/**/ 0x3D38A65A, 0xCAF14CD8, -/**/ 0x3FF3B000, 0x00000000, -/**/ 0x3F33B13B, 0x13B13B14, -/**/ 0xBFCA93ED, 0x3C8AE000, -/**/ 0x3D287243, 0x50562169, -/**/ 0x3FF3AC00, 0x00000000, -/**/ 0xBF2A46AF, 0x2C8FD3BF, -/**/ 0xBFCA6C90, 0xD44B8000, -/**/ 0x3D3F63B7, 0xF037B0C6, -/**/ 0x3FF3A400, 0x00000000, -/**/ 0x3F324387, 0xAC822610, -/**/ 0xBFCA4540, 0x82E6A000, -/**/ 0xBD360A77, 0xC81F7171, -/**/ 0x3FF3A000, 0x00000000, -/**/ 0xBF2C34BB, 0xA1923DEE, -/**/ 0xBFCA1DFC, 0x40F1C000, -/**/ 0x3D301E0F, 0x004F3781, -/**/ 0x3FF39800, 0x00000000, -/**/ 0x3F31C2C1, 0x87F63372, -/**/ 0xBFC9F6C4, 0x0708A000, -/**/ 0x3D3337D9, 0x4BCD3F43, -/**/ 0x3FF39400, 0x00000000, -/**/ 0xBF2C4AA0, 0xE11BD52E, -/**/ 0xBFC9CF97, 0xCDCE0000, -/**/ 0xBD3D862F, 0x10C414E3, -/**/ 0x3FF38C00, 0x00000000, -/**/ 0x3F322D36, 0x6088DBF4, -/**/ 0xBFC9A877, 0x8DEBA000, -/**/ 0xBD3470FA, 0x3EFEC390, -/**/ 0x3FF38800, 0x00000000, -/**/ 0xBF2A8BBF, 0x503F774E, -/**/ 0xBFC98163, 0x4011A000, -/**/ 0xBD34EADD, 0x9E9045E2, -/**/ 0x3FF38000, 0x00000000, -/**/ 0x3F338138, 0x13813814, -/**/ 0xBFC95A5A, 0xDCF70000, -/**/ 0xBD07F228, 0x58A0FF6F, -/**/ 0x3FF37C00, 0x00000000, -/**/ 0xBF26FB6F, 0x1B177053, -/**/ 0xBFC9335E, 0x5D594000, -/**/ 0xBD33115C, 0x3ABD47DA, -/**/ 0x3FF37400, 0x00000000, -/**/ 0x3F35BD1C, 0x945EDC20, -/**/ 0xBFC90C6D, 0xB9FCC000, -/**/ 0x3D1935F5, 0x7718D7CA, -/**/ 0x3FF37000, 0x00000000, -/**/ 0xBF219D00, 0x4DBDCC60, -/**/ 0xBFC8E588, 0xEBAC2000, -/**/ 0xBD3B7D5C, 0xAB2D1140, -/**/ 0x3FF36800, 0x00000000, -/**/ 0x3F38DF3D, 0xE0747954, -/**/ 0xBFC8BEAF, 0xEB390000, -/**/ 0x3D073D54, 0xAAE92CD1, -/**/ 0x3FF36400, 0x00000000, -/**/ 0xBF14E775, 0xD9D3C49F, -/**/ 0xBFC897E2, 0xB17B2000, -/**/ 0x3D296B37, 0x380CBE9E, -/**/ 0x3FF35C00, 0x00000000, -/**/ 0x3F3CE5F9, 0xF2AF821E, -/**/ 0xBFC87121, 0x3750E000, -/**/ 0xBD3328EB, 0x42F9AF75, -/**/ 0x3FF35800, 0x00000000, -/**/ 0xBEE82DF0, 0xE34971F2, -/**/ 0xBFC84A6B, 0x759F6000, -/**/ 0x3D3DA280, 0x2ADF8609, -/**/ 0x3FF35400, 0x00000000, -/**/ 0xBF3E304D, 0x4873ECAE, -/**/ 0xBFC823C1, 0x6551A000, -/**/ 0xBD1E0DDB, 0x9A631E83, -/**/ 0x3FF34C00, 0x00000000, -/**/ 0x3F1264B6, 0x1FF659DB, -/**/ 0xBFC7FD22, 0xFF59A000, -/**/ 0x3D158BEB, 0xF457B7D2, -/**/ 0x3FF34800, 0x00000000, -/**/ 0xBF386531, 0xFECB9865, -/**/ 0xBFC7D690, 0x3CAF6000, -/**/ 0x3D24C06B, 0x17C301D7, -/**/ 0x3FF34000, 0x00000000, -/**/ 0x3F25A8C2, 0xEEDA65AE, -/**/ 0xBFC7B009, 0x16516000, -/**/ 0x3D3AE75F, 0xCB067E57, -/**/ 0x3FF33C00, 0x00000000, -/**/ 0xBF31BA4A, 0x8434E1F4, -/**/ 0xBFC7898D, 0x85444000, -/**/ 0xBD38E67B, 0xE3DBAF3F, -/**/ 0x3FF33400, 0x00000000, -/**/ 0x3F31EE97, 0xDBFC660A, -/**/ 0xBFC7631D, 0x82936000, -/**/ 0x3D25E77D, 0xC7C5F3E1, -/**/ 0x3FF33000, 0x00000000, -/**/ 0xBF246252, 0xBC40BFDA, -/**/ 0xBFC73CB9, 0x074FE000, -/**/ 0x3D3D66A9, 0x0D0005A6, -/**/ 0x3FF32800, 0x00000000, -/**/ 0x3F39E640, 0x13299E64, -/**/ 0xBFC71660, 0x0C914000, -/**/ 0xBCE51B15, 0x7CEC3838, -/**/ 0x3FF32400, 0x00000000, -/**/ 0xBEFCB5D4, 0xEF40991F, -/**/ 0xBFC6F012, 0x8B756000, -/**/ 0xBD357739, 0x0D31EF0F, -/**/ 0x3FF32000, 0x00000000, -/**/ 0xBF3D4632, 0xC823D892, -/**/ 0xBFC6C9D0, 0x7D204000, -/**/ 0x3CDC73FA, 0xFD9B2DCA, -/**/ 0x3FF31800, 0x00000000, -/**/ 0x3F1DD63A, 0x7AED804C, -/**/ 0xBFC6A399, 0xDABBE000, -/**/ 0x3D38F934, 0xE66A15A6, -/**/ 0x3FF31400, 0x00000000, -/**/ 0xBF339849, 0xE8C11E1A, -/**/ 0xBFC67D6E, 0x9D786000, -/**/ 0x3D311E88, 0x30A706D3, -/**/ 0x3FF30C00, 0x00000000, -/**/ 0x3F319013, 0x0D190131, -/**/ 0xBFC6574E, 0xBE8C2000, -/**/ 0x3D398C1D, 0x34F0F462, -/**/ 0x3FF30800, 0x00000000, -/**/ 0xBF222315, 0xB47A7FDA, -/**/ 0xBFC6313A, 0x37336000, -/**/ 0x3D144DF5, 0x4F21EA6D, -/**/ 0x3FF30000, 0x00000000, -/**/ 0x3F3C82AC, 0x40260390, -/**/ 0xBFC60B31, 0x00B0A000, -/**/ 0x3D371456, 0xC988F814, -/**/ 0x3FF2FC00, 0x00000000, -/**/ 0x3F026443, 0xA2430A62, -/**/ 0xBFC5E533, 0x144C2000, -/**/ 0x3D31CE0B, 0xF3B290EA, -/**/ 0x3FF2F800, 0x00000000, -/**/ 0xBF37B425, 0xED097B42, -/**/ 0xBFC5BF40, 0x6B544000, -/**/ 0x3D127023, 0xEB68981C, -/**/ 0x3FF2F000, 0x00000000, -/**/ 0x3F2D00E3, 0x4AE0553C, -/**/ 0xBFC59958, 0xFF1D6000, -/**/ 0x3D3A1D05, 0x9769CA05, -/**/ 0x3FF2EC00, 0x00000000, -/**/ 0xBF262BC0, 0x25D69D44, -/**/ 0xBFC5737C, 0xC9018000, -/**/ 0xBD39BAA7, 0xA6B887F6, -/**/ 0x3FF2E400, 0x00000000, -/**/ 0x3F3B88B5, 0xE3103D6B, -/**/ 0xBFC54DAB, 0xC2610000, -/**/ 0xBD2746FE, 0xE5C8D0D8, -/**/ 0x3FF2E000, 0x00000000, -/**/ 0x3F02E025, 0xC04B8097, -/**/ 0xBFC527E5, 0xE4A1C000, -/**/ 0x3D34E60B, 0x8D4B411D, -/**/ 0x3FF2DC00, 0x00000000, -/**/ 0xBF369C22, 0x2C305021, -/**/ 0xBFC5022B, 0x292F6000, -/**/ 0xBD348A05, 0xFF36A25B, -/**/ 0x3FF2D400, 0x00000000, -/**/ 0x3F30A012, 0xD50A012D, -/**/ 0xBFC4DC7B, 0x897BC000, -/**/ 0xBD0C79B6, 0x0AE1FF0F, -/**/ 0x3FF2D000, 0x00000000, -/**/ 0xBF1FBE29, 0xBC66484E, -/**/ 0xBFC4B6D6, 0xFEFE2000, -/**/ 0xBD1522EC, 0xF56E7952, -/**/ 0x3FF2C800, 0x00000000, -/**/ 0x3F3FB4D8, 0x12C9FB4E, -/**/ 0xBFC4913D, 0x8333C000, -/**/ 0x3D353E43, 0x558124C4, -/**/ 0x3FF2C400, 0x00000000, -/**/ 0x3F1E3432, 0x7004B11E, -/**/ 0xBFC46BAF, 0x0F9F6000, -/**/ 0x3D1249CD, 0x0790841A, -/**/ 0x3FF2C000, 0x00000000, -/**/ 0xBF30671A, 0x5C8EF02F, -/**/ 0xBFC4462B, 0x9DC9C000, -/**/ 0x3D384858, 0xA711B062, -/**/ 0x3FF2B800, 0x00000000, -/**/ 0x3F37D835, 0xD548D9AC, -/**/ 0xBFC420B3, 0x27410000, -/**/ 0x3D116282, 0xC85A0884, -/**/ 0x3FF2B400, 0x00000000, -/**/ 0x3ED2B404, 0xAD012B40, -/**/ 0xBFC3FB45, 0xA5992000, -/**/ 0xBD319713, 0xC0CAE559, -/**/ 0x3FF2B000, 0x00000000, -/**/ 0xBF370F78, 0x8E7302A1, -/**/ 0xBFC3D5E3, 0x126BC000, -/**/ 0xBD13FB2F, 0x85096C4B, -/**/ 0x3FF2A800, 0x00000000, -/**/ 0x3F31C92F, 0x3C1053F9, -/**/ 0xBFC3B08B, 0x67580000, -/**/ 0x3D3AADE8, 0xF29320FB, -/**/ 0x3FF2A400, 0x00000000, -/**/ 0xBF14AD94, 0x3DBE2E04, -/**/ 0xBFC38B3E, 0x9E028000, -/**/ 0x3D370EF0, 0x545C17F9, -/**/ 0x3FF2A000, 0x00000000, -/**/ 0xBF3BED61, 0xBED61BED, -/**/ 0xBFC365FC, 0xB015A000, -/**/ 0x3D3FD3A0, 0xAFB9691B, -/**/ 0x3FF29800, 0x00000000, -/**/ 0x3F2B061A, 0x26F004A6, -/**/ 0xBFC340C5, 0x97412000, -/**/ 0x3D37A3DC, 0xF7D9D386, -/**/ 0x3FF29400, 0x00000000, -/**/ 0xBF21B488, 0xFF6B646D, -/**/ 0xBFC31B99, 0x4D3A4000, -/**/ 0xBD3F098E, 0xE3A50810, -/**/ 0x3FF29000, 0x00000000, -/**/ 0xBF3F0582, 0x2CA5D5AC, -/**/ 0xBFC2F677, 0xCBBC0000, -/**/ 0xBD352B30, 0x2160F40D, -/**/ 0x3FF28800, 0x00000000, -/**/ 0x3F260251, 0x16025116, -/**/ 0xBFC2D161, 0x0C868000, -/**/ 0xBD039D6C, 0xCB81B4A1, -/**/ 0x3FF28400, 0x00000000, -/**/ 0xBF258CDF, 0x502065D2, -/**/ 0xBFC2AC55, 0x095F6000, -/**/ 0x3D1D3466, 0xD0C6C8A8, -/**/ 0x3FF27C00, 0x00000000, -/**/ 0x3F3FA38A, 0x1CE4D6F8, -/**/ 0xBFC28753, 0xBC11A000, -/**/ 0xBD37494E, 0x359302E6, -/**/ 0x3FF27800, 0x00000000, -/**/ 0x3F247DD5, 0xDCCA0781, -/**/ 0xBFC2625D, 0x1E6DE000, -/**/ 0x3CF52962, 0xF09E3D82, -/**/ 0x3FF27400, 0x00000000, -/**/ 0xBF25E8EF, 0xDB195E8F, -/**/ 0xBFC23D71, 0x2A49C000, -/**/ 0xBD100D23, 0x8FD3DF5C, -/**/ 0x3FF27000, 0x00000000, -/**/ 0xBF3FF6C8, 0xFFB647FE, -/**/ 0xBFC2188F, 0xD9808000, -/**/ 0x3D3B3A1E, 0x7F50C701, -/**/ 0x3FF26800, 0x00000000, -/**/ 0x3F266F9A, 0xC024D167, -/**/ 0xBFC1F3B9, 0x25F26000, -/**/ 0x3D15F74E, 0x9B083633, -/**/ 0x3FF26400, 0x00000000, -/**/ 0xBF22D1BD, 0xEABD0E14, -/**/ 0xBFC1CEED, 0x09854000, -/**/ 0x3D315C1C, 0x39192AF9, -/**/ 0x3FF26000, 0x00000000, -/**/ 0xBF3DD8F7, 0xF6D0EEC8, -/**/ 0xBFC1AA2B, 0x7E240000, -/**/ 0x3D31AC38, 0xDDE3B366, -/**/ 0x3FF25800, 0x00000000, -/**/ 0x3F2BCEB1, 0x2A241EF6, -/**/ 0xBFC18574, 0x7DBEC000, -/**/ 0xBD3E6744, 0x45BD9B49, -/**/ 0x3FF25400, 0x00000000, -/**/ 0xBF18A05B, 0xA21378D7, -/**/ 0xBFC160C8, 0x024B2000, -/**/ 0xBD2EC2D2, 0xA9009E3D, -/**/ 0x3FF25000, 0x00000000, -/**/ 0xBF3A076F, 0xD6CFA90C, -/**/ 0xBFC13C26, 0x05C3A000, -/**/ 0x3D2CF5FD, 0xD94F6509, -/**/ 0x3FF24800, 0x00000000, -/**/ 0x3F324924, 0x92492492, -/**/ 0xBFC1178E, 0x8227E000, -/**/ 0xBD21EF78, 0xCE2D07F2, -/**/ 0x3FF24400, 0x00000000, -/**/ 0xBEF3682B, 0x6151E899, -/**/ 0xBFC0F301, 0x717D0000, -/**/ 0x3D3E09B4, 0x41AE86C5, -/**/ 0x3FF24000, 0x00000000, -/**/ 0xBF34868E, 0x89FA4C67, -/**/ 0xBFC0CE7E, 0xCDCCC000, -/**/ 0xBD14652D, 0xABFF5447, -/**/ 0x3FF23800, 0x00000000, -/**/ 0x3F3858D8, 0x6B11F09F, -/**/ 0xBFC0AA06, 0x91268000, -/**/ 0x3D345519, 0xD7032129, -/**/ 0x3FF23400, 0x00000000, -/**/ 0x3F159E26, 0xAF37C049, -/**/ 0xBFC08598, 0xB59E4000, -/**/ 0x3D27E5DD, 0x7009902C, -/**/ 0x3FF23000, 0x00000000, -/**/ 0xBF2AB546, 0x2E076329, -/**/ 0xBFC06135, 0x354D4000, -/**/ 0xBD363046, 0x28340EE9, -/**/ 0x3FF22C00, 0x00000000, -/**/ 0xBF3FEDD5, 0xFEDD5FEE, -/**/ 0xBFC03CDC, 0x0A51E000, -/**/ 0xBD381A9C, 0xF169FC5C, -/**/ 0x3FF22400, 0x00000000, -/**/ 0x3F2B5B92, 0x009126D7, -/**/ 0xBFC0188D, 0x2ECF6000, -/**/ 0xBD03F965, 0x1CFF9DFE, -/**/ 0x3FF22000, 0x00000000, -/**/ 0xBF121FB7, 0x8121FB78, -/**/ 0xBFBFE891, 0x39DBC000, -/**/ 0xBD356594, 0xD82F7A82, -/**/ 0x3FF21C00, 0x00000000, -/**/ 0xBF368F22, 0x3A459635, -/**/ 0xBFBFA01C, 0x9DB58000, -/**/ 0x3D08F351, 0xFA48A730, -/**/ 0x3FF21400, 0x00000000, -/**/ 0x3F379804, 0x855E6012, -/**/ 0xBFBF57BC, 0x7D900000, -/**/ 0xBD176A6C, 0x9EA8B04E, -/**/ 0x3FF21000, 0x00000000, -/**/ 0x3F17B57C, 0x78CD7A37, -/**/ 0xBFBF0F70, 0xCDD98000, -/**/ 0xBD32E31F, 0x6C272C1E, -/**/ 0x3FF20C00, 0x00000000, -/**/ 0xBF271E73, 0x07E4EF15, -/**/ 0xBFBEC739, 0x830A0000, -/**/ 0xBD311FCB, 0xA80CDD10, -/**/ 0x3FF20800, 0x00000000, -/**/ 0xBF3CDDEC, 0x49392BA7, -/**/ 0xBFBE7F16, 0x91A34000, -/**/ 0x3D32C1C5, 0x9BC77BFA, -/**/ 0x3FF20000, 0x00000000, -/**/ 0x3F320120, 0x12012012, -/**/ 0xBFBE3707, 0xEE304000, -/**/ 0xBD20F684, 0xE6766ABD, -/**/ 0x3FF1FC00, 0x00000000, -/**/ 0x3EF0DC4F, 0xCE8AD1A2, -/**/ 0xBFBDEF0D, 0x8D468000, -/**/ 0x3D324750, 0x412E9A74, -/**/ 0x3FF1F800, 0x00000000, -/**/ 0xBF2F7047, 0xDC11F704, -/**/ 0xBFBDA727, 0x63844000, -/**/ 0xBD1A8940, 0x1FA71733, -/**/ 0x3FF1F000, 0x00000000, -/**/ 0x3F3FAF3F, 0x16B6419D, -/**/ 0xBFBD5F55, 0x65920000, -/**/ 0xBD30E239, 0xCC185469, -/**/ 0x3FF1EC00, 0x00000000, -/**/ 0x3F2E878F, 0xF70985E2, -/**/ 0xBFBD1797, 0x88218000, -/**/ 0xBD336433, 0xB5EFBEED, -/**/ 0x3FF1E800, 0x00000000, -/**/ 0xBEEF55E4, 0x94D7FDC3, -/**/ 0xBFBCCFED, 0xBFEE0000, -/**/ 0xBD33A823, 0x2FE71256, -/**/ 0x3FF1E400, 0x00000000, -/**/ 0xBF310C4C, 0x0478BBCF, -/**/ 0xBFBC8858, 0x01BC4000, -/**/ 0xBD2646D1, 0xC65AACD3, -/**/ 0x3FF1DC00, 0x00000000, -/**/ 0x3F3F0ECB, 0xCB840C49, -/**/ 0xBFBC40D6, 0x425A4000, -/**/ 0xBD3CB112, 0x1D1930DD, -/**/ 0x3FF1D800, 0x00000000, -/**/ 0x3F2EACE5, 0xC9579074, -/**/ 0xBFBBF968, 0x769FC000, -/**/ 0xBD24218C, 0x8D824283, -/**/ 0x3FF1D400, 0x00000000, -/**/ 0xBECABDFA, 0xFC60F0AE, -/**/ 0xBFBBB20E, 0x936D8000, -/**/ 0x3D368BA8, 0x35459B8E, -/**/ 0x3FF1D000, 0x00000000, -/**/ 0xBF2F2A4B, 0xAFDC61F3, -/**/ 0xBFBB6AC8, 0x8DAD4000, -/**/ 0xBD3B1BDF, 0xF50225C7, -/**/ 0x3FF1CC00, 0x00000000, -/**/ 0xBF3EC8AF, 0xAB802394, -/**/ 0xBFBB2396, 0x5A530000, -/**/ 0x3CEFF64E, 0xEA137079, -/**/ 0x3FF1C400, 0x00000000, -/**/ 0x3F322FC1, 0xCE058D9B, -/**/ 0xBFBADC77, 0xEE5B0000, -/**/ 0x3D3573B2, 0x09C31904, -/**/ 0x3FF1C000, 0x00000000, -/**/ 0x3F0AA04F, 0xE0EFA2CF, -/**/ 0xBFBA956D, 0x3ECAC000, -/**/ 0xBD3E6379, 0x4C02C4AF, -/**/ 0x3FF1BC00, 0x00000000, -/**/ 0xBF26B7F7, 0x225ADFDD, -/**/ 0xBFBA4E76, 0x40B1C000, -/**/ 0x3D0E42B6, 0xB94407C8, -/**/ 0x3FF1B800, 0x00000000, -/**/ 0xBF39E073, 0x217CD13A, -/**/ 0xBFBA0792, 0xE9278000, -/**/ 0x3D0A9CE6, 0xC9AD51BF, -/**/ 0x3FF1B000, 0x00000000, -/**/ 0x3F37C67F, 0x2BAE2B21, -/**/ 0xBFB9C0C3, 0x2D4D4000, -/**/ 0x3D3AB7C0, 0x9E838668, -/**/ 0x3FF1AC00, 0x00000000, -/**/ 0x3F23316E, 0xBD720DCF, -/**/ 0xBFB97A07, 0x024CC000, -/**/ 0x3CF8BCC1, 0x732093CE, -/**/ 0x3FF1A800, 0x00000000, -/**/ 0xBF11A7B9, 0x611A7B96, -/**/ 0xBFB9335E, 0x5D594000, -/**/ 0xBD23115C, 0x3ABD47DA, -/**/ 0x3FF1A400, 0x00000000, -/**/ 0xBF324195, 0xA1C1B8E7, -/**/ 0xBFB8ECC9, 0x33AEC000, -/**/ 0x3D222F39, 0xBE67F7AA, -/**/ 0x3FF1A000, 0x00000000, -/**/ 0xBF3FEE61, 0xFEE61FEE, -/**/ 0xBFB8A647, 0x7A91C000, -/**/ 0xBD3C28C0, 0xAF9BD6DF, -/**/ 0x3FF19800, 0x00000000, -/**/ 0x3F328F89, 0x362B721D, -/**/ 0xBFB85FD9, 0x27508000, -/**/ 0x3D35B818, 0x19970C1C, -/**/ 0x3FF19400, 0x00000000, -/**/ 0x3F14E023, 0x28A70119, -/**/ 0xBFB8197E, 0x2F410000, -/**/ 0x3D3C0FE4, 0x60D20041, -/**/ 0x3FF19000, 0x00000000, -/**/ 0xBF1FD419, 0x3E48FC6F, -/**/ 0xBFB7D336, 0x87C28000, -/**/ 0xBD33C88C, 0x3E706706, -/**/ 0x3FF18C00, 0x00000000, -/**/ 0xBF34F7C6, 0xFD42546B, -/**/ 0xBFB78D02, 0x263D8000, -/**/ 0xBD069B57, 0x94B69FB7, -/**/ 0x3FF18400, 0x00000000, -/**/ 0x3F3E2FA4, 0x01185E30, -/**/ 0xBFB746E1, 0x00228000, -/**/ 0x3D3126D1, 0x6E1E21D2, -/**/ 0x3FF18000, 0x00000000, -/**/ 0x3F318118, 0x11811812, -/**/ 0xBFB700D3, 0x0AEAC000, -/**/ 0xBCEC1E8D, 0xA99DED32, -/**/ 0x3FF17C00, 0x00000000, -/**/ 0x3F13F1CA, 0xFF2E2C43, -/**/ 0xBFB6BAD8, 0x3C188000, -/**/ 0xBD0DAF3C, 0xC08926AE, -/**/ 0x3FF17800, 0x00000000, -/**/ 0xBF1D79B9, 0x0A5EF9FF, -/**/ 0xBFB674F0, 0x89364000, -/**/ 0xBD3A7999, 0x4C9D3302, -/**/ 0x3FF17400, 0x00000000, -/**/ 0xBF338FAD, 0x1ECEA765, -/**/ 0xBFB62F1B, 0xE7D78000, -/**/ 0x3D217995, 0x7ED63C4E, -/**/ 0x3FF17000, 0x00000000, -/**/ 0xBF3F976B, 0xD8C8714B, -/**/ 0xBFB5E95A, 0x4D978000, -/**/ 0xBD31CB7C, 0xE1D17171, -/**/ 0x3FF16800, 0x00000000, -/**/ 0x3F348A33, 0xB08FA497, -/**/ 0xBFB5A3AB, 0xB01AC000, -/**/ 0xBD3E2574, 0x9E6AFA18, -/**/ 0x3FF16400, 0x00000000, -/**/ 0x3F21AA1F, 0x864022C9, -/**/ 0xBFB55E10, 0x050E0000, -/**/ 0xBD0C1D74, 0x0C53C72E, -/**/ 0x3FF16000, 0x00000000, -/**/ 0xBF05B7C9, 0xB487BCAD, -/**/ 0xBFB51887, 0x42260000, -/**/ 0xBD330A1D, 0x96258B3E, -/**/ 0x3FF15C00, 0x00000000, -/**/ 0xBF2C3411, 0x5B1E5F75, -/**/ 0xBFB4D311, 0x5D208000, -/**/ 0x3CF53A25, 0x82F4E1EF, -/**/ 0x3FF15800, 0x00000000, -/**/ 0xBF39543F, 0xEEA99544, -/**/ 0xBFB48DAE, 0x4BC30000, -/**/ 0xBD30185B, 0x208C200C, -/**/ 0x3FF15000, 0x00000000, -/**/ 0x3F3B9A3F, 0xDD5C8CB8, -/**/ 0xBFB4485E, 0x03DBC000, -/**/ 0xBD3FAD46, 0xE8D26AB7, -/**/ 0x3FF14C00, 0x00000000, -/**/ 0x3F30B155, 0xB19AE5C7, -/**/ 0xBFB40320, 0x7B414000, -/**/ 0xBD26FD84, 0xAA8157C0, -/**/ 0x3FF14800, 0x00000000, -/**/ 0x3F17C382, 0xB34EDA32, -/**/ 0xBFB3BDF5, 0xA7D20000, -/**/ 0x3D319BD0, 0xAD125895, -/**/ 0x3FF14400, 0x00000000, -/**/ 0xBF129CFF, 0xBAF129D0, -/**/ 0xBFB378DD, 0x7F748000, -/**/ 0xBD371411, 0x28F1FACA, -/**/ 0x3FF14000, 0x00000000, -/**/ 0xBF2E2E59, 0x771B7C7F, -/**/ 0xBFB333D7, 0xF8184000, -/**/ 0x3CE692B6, 0xA81B8848, -/**/ 0x3FF13C00, 0x00000000, -/**/ 0xBF395F06, 0x30FE1D9C, -/**/ 0xBFB2EEE5, 0x07B40000, -/**/ 0xBD08081E, 0xDD77C860, -/**/ 0x3FF13400, 0x00000000, -/**/ 0x3F3C8113, 0x5C81135D, -/**/ 0xBFB2AA04, 0xA4470000, -/**/ 0xBD37A48B, 0xA8B1CB41, -/**/ 0x3FF13000, 0x00000000, -/**/ 0x3F3288FF, 0xBB3B5DC0, -/**/ 0xBFB26536, 0xC3D8C000, -/**/ 0xBD0B4BAC, 0x097C5BA3, -/**/ 0x3FF12C00, 0x00000000, -/**/ 0x3F21713D, 0xB81577AE, -/**/ 0xBFB2207B, 0x5C784000, -/**/ 0xBD349D8C, 0xFC10C7BF, -/**/ 0x3FF12800, 0x00000000, -/**/ 0xBEEE05E5, 0xBAD6FC84, -/**/ 0xBFB1DBD2, 0x643D0000, -/**/ 0xBD390B24, 0xD977C494, -/**/ 0x3FF12400, 0x00000000, -/**/ 0xBF24E314, 0x59F992BF, -/**/ 0xBFB1973B, 0xD1464000, -/**/ 0xBD3566D1, 0x54F930B3, -/**/ 0x3FF12000, 0x00000000, -/**/ 0xBF33CB91, 0xC9F6E7A8, -/**/ 0xBFB152B7, 0x99BB4000, -/**/ 0x3D09BB29, 0x07030829, -/**/ 0x3FF11C00, 0x00000000, -/**/ 0xBF3CFE65, 0x8B7D9851, -/**/ 0xBFB10E45, 0xB3CB0000, -/**/ 0x3D37CF69, 0x284A3465, -/**/ 0x3FF11400, 0x00000000, -/**/ 0x3F39F5DB, 0x29605DF7, -/**/ 0xBFB0C9E6, 0x15AC4000, -/**/ 0xBD2C2DA8, 0x0974D976, -/**/ 0x3FF11000, 0x00000000, -/**/ 0x3F311111, 0x11111111, -/**/ 0xBFB08598, 0xB59E4000, -/**/ 0x3D17E5DD, 0x7009902C, -/**/ 0x3FF10C00, 0x00000000, -/**/ 0x3F20A63A, 0x12A5B1AE, -/**/ 0xBFB0415D, 0x89E74000, -/**/ 0xBD1111C0, 0x5CF1D753, -/**/ 0x3FF10800, 0x00000000, -/**/ 0xBED107FB, 0xBE011080, -/**/ 0xBFAFFA69, 0x11AB8000, -/**/ 0xBD23008C, 0x98381A8F, -/**/ 0x3FF10400, 0x00000000, -/**/ 0xBF216989, 0x6FEABBAE, -/**/ 0xBFAF723B, 0x51800000, -/**/ 0x3D3D6EB0, 0xDD5610D3, -/**/ 0x3FF10000, 0x00000000, -/**/ 0xBF30FEF0, 0x10FEF011, -/**/ 0xBFAEEA31, 0xC0068000, -/**/ 0xBD3C3DD8, 0x3606D891, -/**/ 0x3FF0FC00, 0x00000000, -/**/ 0xBF3922C0, 0x98CDDC74, -/**/ 0xBFAE624C, 0x4A0B8000, -/**/ 0x3D30F25C, 0x74676689, -/**/ 0x3FF0F400, 0x00000000, -/**/ 0x3F3EDFAB, 0x325A1A80, -/**/ 0xBFADDA8A, 0xDC680000, -/**/ 0x3D21B1AC, 0x64D9E42F, -/**/ 0x3FF0F000, 0x00000000, -/**/ 0x3F370834, 0xF27F9A57, -/**/ 0xBFAD52ED, 0x64060000, -/**/ 0x3D33C85D, 0x2A29BBD6, -/**/ 0x3FF0EC00, 0x00000000, -/**/ 0x3F2EAD7C, 0xD391FBC5, -/**/ 0xBFACCB73, 0xCDDD8000, -/**/ 0xBD3965C3, 0x6E09F5FE, -/**/ 0x3FF0E800, 0x00000000, -/**/ 0x3F1F2CA5, 0xE9479870, -/**/ 0xBFAC441E, 0x06F70000, -/**/ 0xBD354F1F, 0x49850D15, -/**/ 0x3FF0E400, 0x00000000, -/**/ 0x3ED95609, 0x80439019, -/**/ 0xBFABBCEB, 0xFC690000, -/**/ 0x3D17BF86, 0x8C317C2A, -/**/ 0x3FF0E000, 0x00000000, -/**/ 0xBF1B6B4D, 0xC6867596, -/**/ 0xBFAB35DD, 0x9B588000, -/**/ 0xBD3D5674, 0xD6CF558E, -/**/ 0x3FF0DC00, 0x00000000, -/**/ 0xBF2BEAEE, 0x172D4CE8, -/**/ 0xBFAAAEF2, 0xD0FB0000, -/**/ 0xBD20FC1A, 0x353BB42E, -/**/ 0x3FF0D800, 0x00000000, -/**/ 0xBF34EAB0, 0x479071A9, -/**/ 0xBFAA282B, 0x8A938000, -/**/ 0x3D2E8F59, 0x80EFC8E3, -/**/ 0x3FF0D400, 0x00000000, -/**/ 0xBF3BBA9C, 0xA61C62D3, -/**/ 0xBFA9A187, 0xB5740000, -/**/ 0x3D30C22E, 0x4EC4D90D, -/**/ 0x3FF0CC00, 0x00000000, -/**/ 0x3F3D9AA6, 0x77344011, -/**/ 0xBFA91B07, 0x3EFD8000, -/**/ 0x3D19D7C5, 0x3F76CA96, -/**/ 0x3FF0C800, 0x00000000, -/**/ 0x3F3714FB, 0xCDA3AC11, -/**/ 0xBFA894AA, 0x149F8000, -/**/ 0xBD39A19A, 0x8BE97661, -/**/ 0x3FF0C400, 0x00000000, -/**/ 0x3F30B446, 0x391F2E61, -/**/ 0xBFA80E70, 0x23D90000, -/**/ 0x3D399DC1, 0x6F28BF45, -/**/ 0x3FF0C000, 0x00000000, -/**/ 0x3F24F0D1, 0x682E11CD, -/**/ 0xBFA78859, 0x5A358000, -/**/ 0x3D108B0D, 0x083B3A4C, -/**/ 0x3FF0BC00, 0x00000000, -/**/ 0x3F118519, 0x5D5A36EA, -/**/ 0xBFA70265, 0xA5510000, -/**/ 0x3D2888DF, 0x11FD5CE7, -/**/ 0x3FF0B800, 0x00000000, -/**/ 0xBEF913DA, 0x62386CAB, -/**/ 0xBFA67C94, 0xF2D48000, -/**/ 0xBD3DAC20, 0x827CCA0C, -/**/ 0x3FF0B400, 0x00000000, -/**/ 0xBF1D7CFF, 0xBD31D7D0, -/**/ 0xBFA5F6E7, 0x30790000, -/**/ 0x3D20485A, 0x8012494C, -/**/ 0x3FF0B000, 0x00000000, -/**/ 0xBF2A11BA, 0x226951DC, -/**/ 0xBFA5715C, 0x4C040000, -/**/ 0x3D38888D, 0xDFC47628, -/**/ 0x3FF0AC00, 0x00000000, -/**/ 0xBF328E31, 0x7B2E9DD2, -/**/ 0xBFA4EBF4, 0x334A0000, -/**/ 0x3D2D9150, 0xF73BE773, -/**/ 0x3FF0A800, 0x00000000, -/**/ 0xBF37EF59, 0x7EF597EF, -/**/ 0xBFA466AE, 0xD42E0000, -/**/ 0x3D2C1673, 0x75BDFD28, -/**/ 0x3FF0A400, 0x00000000, -/**/ 0xBF3D2C71, 0x50D413C1, -/**/ 0xBFA3E18C, 0x1CA08000, -/**/ 0xBD3748ED, 0x3F6E378E, -/**/ 0x3FF09C00, 0x00000000, -/**/ 0x3F3DBA6A, 0xF836010A, -/**/ 0xBFA35C8B, 0xFAA10000, -/**/ 0xBD38357D, 0x5EF9EB35, -/**/ 0x3FF09800, 0x00000000, -/**/ 0x3F38C51F, 0x624D4AF5, -/**/ 0xBFA2D7AE, 0x5C3C8000, -/**/ 0x3D322939, 0x459DA66D, -/**/ 0x3FF09400, 0x00000000, -/**/ 0x3F33F390, 0x10953F39, -/**/ 0xBFA252F3, 0x2F8D0000, -/**/ 0xBD283E9A, 0xE021B67B, -/**/ 0x3FF09000, 0x00000000, -/**/ 0x3F2E8B42, 0x861539B9, -/**/ 0xBFA1CE5A, 0x62BC0000, -/**/ 0xBD3A9CC7, 0x8D8DF999, -/**/ 0x3FF08C00, 0x00000000, -/**/ 0x3F25766E, 0xACBC4021, -/**/ 0xBFA149E3, 0xE4008000, -/**/ 0x3D32B98A, 0x9A4168FD, -/**/ 0x3FF08800, 0x00000000, -/**/ 0x3F1950DB, 0x0F3DBD5A, -/**/ 0xBFA0C58F, 0xA19E0000, -/**/ 0x3D0559D1, 0x58B17913, -/**/ 0x3FF08400, 0x00000000, -/**/ 0x3F008421, 0x08421084, -/**/ 0xBFA0415D, 0x89E78000, -/**/ 0x3D3DDDC7, 0xF461C516, -/**/ 0x3FF08000, 0x00000000, -/**/ 0xBF007FDF, 0x0041FF7C, -/**/ 0xBF9F7A9B, 0x16780000, -/**/ 0xBD242AD9, 0x271BE7D7, -/**/ 0x3FF07C00, 0x00000000, -/**/ 0xBF183591, 0xC54798FB, -/**/ 0xBF9E72BF, 0x28140000, -/**/ 0x3D28D751, 0x49774D47, -/**/ 0x3FF07800, 0x00000000, -/**/ 0xBF23CFA1, 0x518F4EFD, -/**/ 0xBF9D6B27, 0x25980000, -/**/ 0x3D39FF7B, 0x50D1B838, -/**/ 0x3FF07400, 0x00000000, -/**/ 0xBF2B3EB7, 0x01073261, -/**/ 0xBF9C63D2, 0xEC150000, -/**/ 0x3D35439C, 0xE030A687, -/**/ 0x3FF07000, 0x00000000, -/**/ 0xBF31341F, 0xD6EAB025, -/**/ 0xBF9B5CC2, 0x58B70000, -/**/ 0xBD18E611, 0xB8AFBFE8, -/**/ 0x3FF06C00, 0x00000000, -/**/ 0xBF34A638, 0x6ED049E0, -/**/ 0xBF9A55F5, 0x48C60000, -/**/ 0x3D2DE070, 0x9F2D03C9, -/**/ 0x3FF06800, 0x00000000, -/**/ 0xBF37F5BF, 0xEF997F5C, -/**/ 0xBF994F6B, 0x99A20000, -/**/ 0xBD311D5E, 0xF96CF7F5, -/**/ 0x3FF06400, 0x00000000, -/**/ 0xBF3B22D0, 0xE5604189, -/**/ 0xBF984925, 0x28C90000, -/**/ 0x3D2AA0BA, 0x325A0C34, -/**/ 0x3FF06000, 0x00000000, -/**/ 0xBF3E2D85, 0xC1163FF0, -/**/ 0xBF974321, 0xD3D00000, -/**/ 0xBCFB4A69, 0x0FE94778, -/**/ 0x3FF05800, 0x00000000, -/**/ 0x3F3EEA07, 0x27586632, -/**/ 0xBF963D61, 0x78690000, -/**/ 0xBD07ABF3, 0x89596542, -/**/ 0x3FF05400, 0x00000000, -/**/ 0x3F3C23BB, 0x98E2A5E7, -/**/ 0xBF9537E3, 0xF45F0000, -/**/ 0xBD2AB259, 0xD2D7F253, -/**/ 0x3FF05000, 0x00000000, -/**/ 0x3F397F7D, 0x73404146, -/**/ 0xBF9432A9, 0x25980000, -/**/ 0xBD098139, 0x928637FE, -/**/ 0x3FF04C00, 0x00000000, -/**/ 0x3F36FD32, 0xB0C7B49A, -/**/ 0xBF932DB0, 0xEA130000, -/**/ 0xBD2710CB, 0x130895FC, -/**/ 0x3FF04800, 0x00000000, -/**/ 0x3F349CC1, 0x664C578A, -/**/ 0xBF9228FB, 0x1FEA0000, -/**/ 0xBD2713E3, 0x284991FE, -/**/ 0x3FF04400, 0x00000000, -/**/ 0x3F325E0F, 0xC2FCB1F4, -/**/ 0xBF912487, 0xA5500000, -/**/ 0xBD3FDBE5, 0xFED4B393, -/**/ 0x3FF04000, 0x00000000, -/**/ 0x3F304104, 0x10410410, -/**/ 0xBF902056, 0x58930000, -/**/ 0xBD3611D2, 0x7C8E8417, -/**/ 0x3FF03C00, 0x00000000, -/**/ 0x3F2C8B09, 0x6334030B, -/**/ 0xBF8E38CE, 0x30340000, -/**/ 0x3D39DE88, 0xA3DA281A, -/**/ 0x3FF03800, 0x00000000, -/**/ 0x3F28D6F0, 0x48FF7E3A, -/**/ 0xBF8C3173, 0x84C80000, -/**/ 0x3D341F33, 0xFCEFB9FE, -/**/ 0x3FF03400, 0x00000000, -/**/ 0x3F25658A, 0x0081A559, -/**/ 0xBF8A2A9C, 0x6C180000, -/**/ 0x3D3F73BC, 0x4D6D3472, -/**/ 0x3FF03000, 0x00000000, -/**/ 0x3F2236A3, 0xEBC349DE, -/**/ 0xBF882448, 0xA3880000, -/**/ 0xBD345544, 0x12C584E0, -/**/ 0x3FF02C00, 0x00000000, -/**/ 0x3F1E9417, 0x3FEFD386, -/**/ 0xBF861E77, 0xE8B60000, -/**/ 0x3D38073E, 0xEAF8EAF3, -/**/ 0x3FF02800, 0x00000000, -/**/ 0x3F193F1D, 0xCA7A317C, -/**/ 0xBF841929, 0xF9680000, -/**/ 0xBD1977C7, 0x55D01368, -/**/ 0x3FF02400, 0x00000000, -/**/ 0x3F146DF7, 0x6CB49652, -/**/ 0xBF82145E, 0x939E0000, -/**/ 0xBD3E3D12, 0x38C4EA00, -/**/ 0x3FF02000, 0x00000000, -/**/ 0x3F102040, 0x81020408, -/**/ 0xBF801015, 0x75880000, -/**/ 0xBD3BCE25, 0x1998B506, -/**/ 0x3FF01C00, 0x00000000, -/**/ 0x3F08AB2B, 0x8C355D63, -/**/ 0xBF7C189C, 0xBB100000, -/**/ 0x3D3D8055, 0x12588560, -/**/ 0x3FF01800, 0x00000000, -/**/ 0x3F021B28, 0xBD1BA97E, -/**/ 0xBF781212, 0x14580000, -/**/ 0xBD1AD503, 0x82973F27, -/**/ 0x3FF01400, 0x00000000, -/**/ 0x3EF91F67, 0x411155AB, -/**/ 0xBF740C8A, 0x74780000, -/**/ 0xBD1E3871, 0xDF070002, -/**/ 0x3FF01000, 0x00000000, -/**/ 0x3EF01010, 0x10101010, -/**/ 0xBF700805, 0x59580000, -/**/ 0xBD2166AF, 0xCB31C67B, -/**/ 0x3FF00C00, 0x00000000, -/**/ 0x3EE20D8A, 0x279DB649, -/**/ 0xBF680904, 0x82880000, -/**/ 0xBD285C06, 0x96A70C0C, -/**/ 0x3FF00800, 0x00000000, -/**/ 0x3ED00804, 0x02010080, -/**/ 0xBF600401, 0x55D80000, -/**/ 0x3D33BB10, 0xC7CC7089, -/**/ 0x3FF00400, 0x00000000, -/**/ 0x3EB00401, 0x00401004, -/**/ 0xBF500200, 0x55600000, -/**/ 0xBD356224, 0xCD5F35F8, -/**/ 0x3FF00000, 0x00000000, -/**/ 0x00000000, 0x00000000, -/**/ 0x00000000, 0x00000000, -/**/ 0x00000000, 0x00000000, -/**/ 0x3FEFF800, 0x00000000, -/**/ 0x3EAFF801, 0xFF801FF8, -/**/ 0x3F4FFC00, 0xAA800000, -/**/ 0x3D35621F, 0x7809A0A3, -/**/ 0x3FEFF000, 0x00000000, -/**/ 0x3ECFF007, 0xFC01FF00, -/**/ 0x3F5FF802, 0xA9B00000, -/**/ 0xBD33BC66, 0x1D61C5EB, -/**/ 0x3FEFE800, 0x00000000, -/**/ 0x3EE1F28A, 0x186DADBE, -/**/ 0x3F67F704, 0x7D780000, -/**/ 0x3D283DA6, 0x89D68648, -/**/ 0x3FEFE000, 0x00000000, -/**/ 0x3EEFE01F, 0xE01FE020, -/**/ 0x3F6FF00A, 0xA2B00000, -/**/ 0x3D20BC04, 0xA086B56A, -/**/ 0x3FEFD800, 0x00000000, -/**/ 0x3EF8E0E6, 0xDF68BD14, -/**/ 0x3F73F38A, 0x60F00000, -/**/ 0x3D192256, 0x93C93749, -/**/ 0x3FEFD000, 0x00000000, -/**/ 0x3F01E528, 0x439A981C, -/**/ 0x3F77EE11, 0xEBD80000, -/**/ 0x3D0749D3, 0xC2D23A07, -/**/ 0x3FEFC800, 0x00000000, -/**/ 0x3F08556A, 0x8596391C, -/**/ 0x3F7BE79C, 0x70040000, -/**/ 0x3D38EC8F, 0x9A6C0404, -/**/ 0x3FEFC000, 0x00000000, -/**/ 0x3F0FC07F, 0x01FC07F0, -/**/ 0x3F7FE02A, 0x6B100000, -/**/ 0x3D19E23F, 0x0DDA40E4, -/**/ 0x3FEFB800, 0x00000000, -/**/ 0x3F1412D5, 0x9F5976B5, -/**/ 0x3F81EBDE, 0x2D1A0000, -/**/ 0xBD2A0683, 0xFF48DC36, -/**/ 0x3FEFB000, 0x00000000, -/**/ 0x3F18C21A, 0xBD271E34, -/**/ 0x3F83E729, 0x5D260000, -/**/ 0xBD2609C1, 0xFF29A114, -/**/ 0x3FEFA800, 0x00000000, -/**/ 0x3F1DEDB2, 0x5594A734, -/**/ 0x3F85E1F7, 0x03EC0000, -/**/ 0x3D37CA09, 0xF585DA1B, -/**/ 0x3FEFA000, 0x00000000, -/**/ 0x3F21CAA0, 0x1FA11CAA, -/**/ 0x3F87DC47, 0x5F820000, -/**/ 0xBD3EB124, 0x5B5DA1F5, -/**/ 0x3FEF9800, 0x00000000, -/**/ 0x3F24DC34, 0x55E8CB6B, -/**/ 0x3F89D61A, 0xADC60000, -/**/ 0x3D37B196, 0x327B4257, -/**/ 0x3FEF9000, 0x00000000, -/**/ 0x3F282B68, 0x13BAF1B2, -/**/ 0x3F8BCF71, 0x2C740000, -/**/ 0x3D1C25E0, 0x97BD9771, -/**/ 0x3FEF8800, 0x00000000, -/**/ 0x3F2BB80D, 0xCC420861, -/**/ 0x3F8DC84B, 0x19120000, -/**/ 0x3D1C0A54, 0x1E3A5B30, -/**/ 0x3FEF8000, 0x00000000, -/**/ 0x3F2F81F8, 0x1F81F820, -/**/ 0x3F8FC0A8, 0xB0FC0000, -/**/ 0x3CDF1E7C, 0xF6D3A69C, -/**/ 0x3FEF7800, 0x00000000, -/**/ 0x3F31C47C, 0xED1079FA, -/**/ 0x3F90DC45, 0x18B00000, -/**/ 0xBD29BC2F, 0x380313FC, -/**/ 0x3FEF7000, 0x00000000, -/**/ 0x3F33E672, 0xFA98528D, -/**/ 0x3F91D7F7, 0xEB9F0000, -/**/ 0xBD14193A, 0x83FCC7A6, -/**/ 0x3FEF6800, 0x00000000, -/**/ 0x3F3626C7, 0xCAFBD3D2, -/**/ 0x3F92D36C, 0xEFB50000, -/**/ 0x3D35F0BB, 0x341706C3, -/**/ 0x3FEF6000, 0x00000000, -/**/ 0x3F388565, 0x06DDABA6, -/**/ 0x3F93CEA4, 0x43470000, -/**/ 0xBD36A2C4, 0x32D6A40B, -/**/ 0x3FEF5800, 0x00000000, -/**/ 0x3F3B0234, 0x6CC4F5F5, -/**/ 0x3F94C99E, 0x04900000, -/**/ 0x3D1DECC6, 0x5DF5F4A5, -/**/ 0x3FEF5000, 0x00000000, -/**/ 0x3F3D9D1F, 0xD102728A, -/**/ 0x3F95C45A, 0x51B90000, -/**/ 0xBD263BB6, 0x216D87D8, -/**/ 0x3FEF5000, 0x00000000, -/**/ 0xBF3FA9EE, 0xE26A1DD4, -/**/ 0x3F96BED9, 0x48D20000, -/**/ 0xBD320BC4, 0x160A43F8, -/**/ 0x3FEF4800, 0x00000000, -/**/ 0xBF3CD30D, 0xADEC7540, -/**/ 0x3F97B91B, 0x07D60000, -/**/ 0xBD33B955, 0xB602ACE4, -/**/ 0x3FEF4000, 0x00000000, -/**/ 0xBF39DE52, 0x7C761DC6, -/**/ 0x3F98B31F, 0xACAA0000, -/**/ 0xBD33FC78, 0xA96E4964, -/**/ 0x3FEF3800, 0x00000000, -/**/ 0xBF36CBD3, 0x23989FF0, -/**/ 0x3F99ACE7, 0x551D0000, -/**/ 0xBD2D75D9, 0x7EC7C410, -/**/ 0x3FEF3000, 0x00000000, -/**/ 0xBF339BA5, 0x639F8B15, -/**/ 0x3F9AA672, 0x1EE80000, -/**/ 0x3D2AD4EB, 0x5C5AF494, -/**/ 0x3FEF2800, 0x00000000, -/**/ 0xBF304DDE, 0xE7AA579B, -/**/ 0x3F9B9FC0, 0x27B00000, -/**/ 0xBD3B9A01, 0x0AE6922A, -/**/ 0x3FEF2000, 0x00000000, -/**/ 0xBF29C52A, 0x8B8C46FD, -/**/ 0x3F9C98D1, 0x8D010000, -/**/ 0xBD2BF615, 0x0589DF0F, -/**/ 0x3FEF1800, 0x00000000, -/**/ 0xBF22B3BB, 0xFE0E92B4, -/**/ 0x3F9D91A6, 0x6C540000, -/**/ 0x3D2E61F1, 0x658CFB9A, -/**/ 0x3FEF1000, 0x00000000, -/**/ 0xBF16CF39, 0xFE8B488E, -/**/ 0x3F9E8A3E, 0xE30D0000, -/**/ 0xBD21A9FA, 0x3DE53900, -/**/ 0x3FEF0800, 0x00000000, -/**/ 0xBEFF07C1, 0xF07C1F08, -/**/ 0x3F9F829B, 0x0E780000, -/**/ 0x3D298026, 0x7C7E09E4, -/**/ 0x3FEF0000, 0x00000000, -/**/ 0x3EFF003E, 0x007C00F8, -/**/ 0x3FA03D5D, 0x85E70000, -/**/ 0x3D3F7789, 0x60ED29CF, -/**/ 0x3FEEF800, 0x00000000, -/**/ 0x3F17B671, 0x3D759870, -/**/ 0x3FA0B94F, 0x7C198000, -/**/ 0xBD2E8989, 0x6F022783, -/**/ 0x3FEEF000, 0x00000000, -/**/ 0x3F241070, 0x2A8BB96A, -/**/ 0x3FA13523, 0x78598000, -/**/ 0xBD1C1AC3, 0xB71FA59B, -/**/ 0x3FEEE800, 0x00000000, -/**/ 0x3F2C7F84, 0x58E01EEA, -/**/ 0x3FA1B0D9, 0x89240000, -/**/ 0xBD33401E, 0x9AE889BB, -/**/ 0x3FEEE000, 0x00000000, -/**/ 0x3F329425, 0xA3D491BC, -/**/ 0x3FA22C71, 0xBCEA8000, -/**/ 0x3CFD2818, 0xF87F888F, -/**/ 0x3FEED800, 0x00000000, -/**/ 0x3F37054D, 0x9E9D2AE8, -/**/ 0x3FA2A7EC, 0x22150000, -/**/ 0xBD278CE7, 0x7A9163FE, -/**/ 0x3FEED000, 0x00000000, -/**/ 0x3F3B9325, 0x540C85E6, -/**/ 0x3FA32348, 0xC7000000, -/**/ 0x3D2696DB, 0x90B1E49F, -/**/ 0x3FEED000, 0x00000000, -/**/ 0xBF3FC267, 0xF099FC26, -/**/ 0x3FA39E87, 0xB9FE8000, -/**/ 0x3D3EAFD4, 0x80AD9015, -/**/ 0x3FEEC800, 0x00000000, -/**/ 0xBF3AFB6E, 0xD02A4E5D, -/**/ 0x3FA419A9, 0x09590000, -/**/ 0x3D3B5CDC, 0x67D48EA7, -/**/ 0x3FEEC000, 0x00000000, -/**/ 0xBF361803, 0xD7A79FF1, -/**/ 0x3FA494AC, 0xC34D8000, -/**/ 0x3D211C78, 0xA56FD247, -/**/ 0x3FEEB800, 0x00000000, -/**/ 0xBF31183B, 0x805C2197, -/**/ 0x3FA50F92, 0xF60F8000, -/**/ 0x3D296CFB, 0x0A91FFE3, -/**/ 0x3FEEB000, 0x00000000, -/**/ 0xBF27F854, 0x5FE15180, -/**/ 0x3FA58A5B, 0xAFC90000, -/**/ 0xBD2B2B73, 0x9570AD39, -/**/ 0x3FEEA800, 0x00000000, -/**/ 0xBF1B0F90, 0xE210C36A, -/**/ 0x3FA60506, 0xFE990000, -/**/ 0xBD32BA40, 0x8194E036, -/**/ 0x3FEEA000, 0x00000000, -/**/ 0xBEF6F7DD, 0x8C33ADB2, -/**/ 0x3FA67F94, 0xF0948000, -/**/ 0x3D3ECC1F, 0x3E7E4ED7, -/**/ 0x3FEE9800, 0x00000000, -/**/ 0x3F1003D3, 0x1003D310, -/**/ 0x3FA6FA05, 0x93C78000, -/**/ 0x3D3B415E, 0x41D634A1, -/**/ 0x3FEE9000, 0x00000000, -/**/ 0x3F231ABF, 0x0B7672A0, -/**/ 0x3FA77458, 0xF6330000, -/**/ 0xBD3181DC, 0xE586AF09, -/**/ 0x3FEE8800, 0x00000000, -/**/ 0x3F2E6B5C, 0xCF172481, -/**/ 0x3FA7EE8F, 0x25CD8000, -/**/ 0xBD3F4216, 0x11A5C1E9, -/**/ 0x3FEE8000, 0x00000000, -/**/ 0x3F34F9CD, 0x77A84876, -/**/ 0x3FA868A8, 0x30840000, -/**/ 0xBD12623A, 0x134AC693, -/**/ 0x3FEE7800, 0x00000000, -/**/ 0x3F3AD9A8, 0xD7473427, -/**/ 0x3FA8E2A4, 0x243A0000, -/**/ 0x3D2B9EEB, 0x01426490, -/**/ 0x3FEE7800, 0x00000000, -/**/ 0xBF3F2AD3, 0x4578DCCA, -/**/ 0x3FA95C83, 0x0EC90000, -/**/ 0xBD2C1482, 0x97C5FEB8, -/**/ 0x3FEE7000, 0x00000000, -/**/ 0xBF3913BA, 0x97A6A035, -/**/ 0x3FA9D644, 0xFDFF8000, -/**/ 0x3D313C90, 0x539A473B, -/**/ 0x3FEE6800, 0x00000000, -/**/ 0xBF32E120, 0xC594A915, -/**/ 0x3FAA4FE9, 0xFFA40000, -/**/ 0xBD36E584, 0xA0402925, -/**/ 0x3FEE6000, 0x00000000, -/**/ 0xBF292632, 0xC5DF4232, -/**/ 0x3FAAC972, 0x21710000, -/**/ 0x3D2F8D3E, 0xF013222C, -/**/ 0x3FEE5800, 0x00000000, -/**/ 0xBF18A6DF, 0xC3518A6E, -/**/ 0x3FAB42DD, 0x71198000, -/**/ 0xBD1C827A, 0xE5D6704C, -/**/ 0x3FEE5000, 0x00000000, -/**/ 0x3ED6BC08, 0x86833271, -/**/ 0x3FABBC2B, 0xFC450000, -/**/ 0xBD17D186, 0x91417DAF, -/**/ 0x3FEE4800, 0x00000000, -/**/ 0x3F1BEB2D, 0xE672838D, -/**/ 0x3FAC355D, 0xD0920000, -/**/ 0x3D2F2CCC, 0x9ABF8388, -/**/ 0x3FEE4000, 0x00000000, -/**/ 0x3F2B6B8D, 0x9785150A, -/**/ 0x3FACAE72, 0xFB960000, -/**/ 0xBD3EFABF, 0x2025B1BE, -/**/ 0x3FEE3800, 0x00000000, -/**/ 0x3F348BCE, 0xE0D399FA, -/**/ 0x3FAD276B, 0x8ADB0000, -/**/ 0x3D16A423, 0xC78A64B0, -/**/ 0x3FEE3000, 0x00000000, -/**/ 0x3F3B7CD0, 0x933AC00F, -/**/ 0x3FADA047, 0x8BE38000, -/**/ 0x3D2252C7, 0xB1F6FE05, -/**/ 0x3FEE3000, 0x00000000, -/**/ 0xBF3D7747, 0x308F5281, -/**/ 0x3FAE1907, 0x0C278000, -/**/ 0xBD2FEA46, 0x64629E86, -/**/ 0x3FEE2800, 0x00000000, -/**/ 0xBF36508B, 0x6C196F66, -/**/ 0x3FAE91AA, 0x19150000, -/**/ 0xBD0E82A0, 0x1DCC6A76, -/**/ 0x3FEE2000, 0x00000000, -/**/ 0xBF2E1E1E, 0x1E1E1E1E, -/**/ 0x3FAF0A30, 0xC0118000, -/**/ 0xBD2D599E, 0x83368E91, -/**/ 0x3FEE1800, 0x00000000, -/**/ 0xBF1ECB93, 0xDD355CDB, -/**/ 0x3FAF829B, 0x0E780000, -/**/ 0x3D398026, 0x7C7E09E4, -/**/ 0x3FEE1000, 0x00000000, -/**/ 0xBECE0FF8, 0x7C01E100, -/**/ 0x3FAFFAE9, 0x119B8000, -/**/ 0x3D230337, 0x4262C554, -/**/ 0x3FEE0800, 0x00000000, -/**/ 0x3F1D54B5, 0x25C73724, -/**/ 0x3FB0398D, 0x6B624000, -/**/ 0xBD3AB14D, 0xFCBFCD00, -/**/ 0x3FEE0000, 0x00000000, -/**/ 0x3F2E01E0, 0x1E01E01E, -/**/ 0x3FB07598, 0x35990000, -/**/ 0xBD3B8ECF, 0xE4B59987, -/**/ 0x3FEDF800, 0x00000000, -/**/ 0x3F36C715, 0xC84194BA, -/**/ 0x3FB0B194, 0xEE0D0000, -/**/ 0x3D3666EA, 0x4F69EDCC, -/**/ 0x3FEDF000, 0x00000000, -/**/ 0x3F3EA78B, 0xEF26D838, -/**/ 0x3FB0ED83, 0x9B554000, -/**/ 0xBD3901F4, 0x6D48ABB4, -/**/ 0x3FEDF000, 0x00000000, -/**/ 0xBF395DBF, 0xF10995DC, -/**/ 0x3FB12964, 0x44030000, -/**/ 0xBD3D53BB, 0x751AA773, -/**/ 0x3FEDE800, 0x00000000, -/**/ 0xBF3148E0, 0x3BCBADC8, -/**/ 0x3FB16536, 0xEEA38000, -/**/ 0xBD147C5E, 0x768FA309, -/**/ 0x3FEDE000, 0x00000000, -/**/ 0xBF2233CE, 0x86E25CE1, -/**/ 0x3FB1A0FB, 0xA1BF8000, -/**/ 0x3D24A3FC, 0xC319D6DC, -/**/ 0x3FEDD800, 0x00000000, -/**/ 0xBEEA1CE9, 0x26B3FE23, -/**/ 0x3FB1DCB2, 0x63DB0000, -/**/ 0x3D39444F, 0x5E9E8981, -/**/ 0x3FEDD000, 0x00000000, -/**/ 0x3F1E4836, 0x0AB71710, -/**/ 0x3FB2185B, 0x3B75C000, -/**/ 0xBD3E3189, 0xF8F32304, -/**/ 0x3FEDC800, 0x00000000, -/**/ 0x3F300EE5, 0x00EE500F, -/**/ 0x3FB253F6, 0x2F0A0000, -/**/ 0x3D3416F8, 0xFB69A701, -/**/ 0x3FEDC000, 0x00000000, -/**/ 0x3F38A58D, 0x231C226A, -/**/ 0x3FB28F83, 0x450EC000, -/**/ 0x3D3A8D75, 0xAA119769, -/**/ 0x3FEDC000, 0x00000000, -/**/ 0xBF3EAA0C, 0x14715D63, -/**/ 0x3FB2CB02, 0x83F5C000, -/**/ 0x3D3E1EE2, 0xCA657021, -/**/ 0x3FEDB800, 0x00000000, -/**/ 0xBF35DFF8, 0x92AEFFC5, -/**/ 0x3FB30673, 0xF22C8000, -/**/ 0x3D24C9E2, 0x9DCF0BA5, -/**/ 0x3FEDB000, 0x00000000, -/**/ 0xBF29F894, 0x67E251A0, -/**/ 0x3FB341D7, 0x961BC000, -/**/ 0x3D31D092, 0x99837610, -/**/ 0x3FEDA800, 0x00000000, -/**/ 0xBF0FF896, 0x1FF89620, -/**/ 0x3FB37D2D, 0x76284000, -/**/ 0xBD2C60AA, 0x9B7FF15C, -/**/ 0x3FEDA000, 0x00000000, -/**/ 0x3F145E70, 0x076828BD, -/**/ 0x3FB3B875, 0x98B1C000, -/**/ 0xBD222415, 0x94ACA313, -/**/ 0x3FED9800, 0x00000000, -/**/ 0x3F2C8F60, 0xE567D573, -/**/ 0x3FB3F3B0, 0x04140000, -/**/ 0x3CEE2474, 0xACDFCEC5, -/**/ 0x3FED9000, 0x00000000, -/**/ 0x3F379118, 0xF3FC4DA2, -/**/ 0x3FB42EDC, 0xBEA64000, -/**/ 0x3D1BC0EE, 0xEA7C9ACD, -/**/ 0x3FED9000, 0x00000000, -/**/ 0xBF3F0C3C, 0x049DE4C3, -/**/ 0x3FB469FB, 0xCEBB4000, -/**/ 0x3D3B663C, 0x4F257194, -/**/ 0x3FED8800, 0x00000000, -/**/ 0xBF35905F, 0xF13D5906, -/**/ 0x3FB4A50D, 0x3AA1C000, -/**/ 0xBD2F7FE1, 0x308973E2, -/**/ 0x3FED8000, 0x00000000, -/**/ 0xBF27F6C8, 0x77D1EA57, -/**/ 0x3FB4E011, 0x08A34000, -/**/ 0x3D3AE5CF, 0xDF2C5AE5, -/**/ 0x3FED7800, 0x00000000, -/**/ 0xBF026AD1, 0xF4F31BA0, -/**/ 0x3FB51B07, 0x3F060000, -/**/ 0x3D383F69, 0x278E686A, -/**/ 0x3FED7000, 0x00000000, -/**/ 0x3F1DE6B2, 0xF26DF1BD, -/**/ 0x3FB555EF, 0xE40B4000, -/**/ 0x3D30B497, 0x8C868E23, -/**/ 0x3FED6800, 0x00000000, -/**/ 0x3F31599F, 0x7BA23D96, -/**/ 0x3FB590CA, 0xFDF00000, -/**/ 0x3D3C284F, 0x5722ABAA, -/**/ 0x3FED6000, 0x00000000, -/**/ 0x3F3B526C, 0xD425A760, -/**/ 0x3FB5CB98, 0x92ED4000, -/**/ 0x3D17BE44, 0xA64FC52F, -/**/ 0x3FED6000, 0x00000000, -/**/ 0xBF3A9BFC, 0x546A6FF1, -/**/ 0x3FB60658, 0xA9374000, -/**/ 0x3D30C3B1, 0xDEE9C4F8, -/**/ 0x3FED5800, 0x00000000, -/**/ 0xBF3071AD, 0x08F02FAC, -/**/ 0x3FB6410B, 0x46FE8000, -/**/ 0xBD153F8F, 0x3CBD8D14, -/**/ 0x3FED5000, 0x00000000, -/**/ 0xBF18BAD9, 0x12C6C142, -/**/ 0x3FB67BB0, 0x726EC000, -/**/ 0x3CEF724B, 0x69EF5912, -/**/ 0x3FED4800, 0x00000000, -/**/ 0x3F10B35C, 0x3254A5A2, -/**/ 0x3FB6B648, 0x31B00000, -/**/ 0xBD3BF30A, 0x1377DE92, -/**/ 0x3FED4000, 0x00000000, -/**/ 0x3F2D41D4, 0x1D41D41D, -/**/ 0x3FB6F0D2, 0x8AE58000, -/**/ 0xBD34B464, 0x1B664613, -/**/ 0x3FED3800, 0x00000000, -/**/ 0x3F392D71, 0xF494E548, -/**/ 0x3FB72B4F, 0x842EC000, -/**/ 0xBD3704CC, 0xC00C9DD3, -/**/ 0x3FED3800, 0x00000000, -/**/ 0xBF3C2DA1, 0xFF165C2E, -/**/ 0x3FB765BF, 0x23A6C000, -/**/ 0xBCFECBC0, 0x35C4256A, -/**/ 0x3FED3000, 0x00000000, -/**/ 0xBF317062, 0x7AA49674, -/**/ 0x3FB7A021, 0x6F648000, -/**/ 0x3D3E124C, 0xA18418FF, -/**/ 0x3FED2800, 0x00000000, -/**/ 0xBF1A6B80, 0x749CB290, -/**/ 0x3FB7DA76, 0x6D7B0000, -/**/ 0x3D32CC84, 0x4480C89B, -/**/ 0x3FED2000, 0x00000000, -/**/ 0x3F114B52, 0x25C6336D, -/**/ 0x3FB814BE, 0x23F8C000, -/**/ 0x3CCB2381, 0xDA82FDFD, -/**/ 0x3FED1800, 0x00000000, -/**/ 0x3F2EB155, 0xF08A3B1D, -/**/ 0x3FB84EF8, 0x98E84000, -/**/ 0xBD37D5CD, 0x246977C9, -/**/ 0x3FED1000, 0x00000000, -/**/ 0x3F3A7692, 0xBD71CD93, -/**/ 0x3FB88925, 0xD24FC000, -/**/ 0xBD31D505, 0x44FBB806, -/**/ 0x3FED1000, 0x00000000, -/**/ 0xBF3A5384, 0x89FC5E69, -/**/ 0x3FB8C345, 0xD6318000, -/**/ 0x3D3B20F5, 0xACB42A66, -/**/ 0x3FED0800, 0x00000000, -/**/ 0xBF2E0B56, 0x6439240E, -/**/ 0x3FB8FD58, 0xAA8C4000, -/**/ 0xBD3EEC90, 0x1BCB725B, -/**/ 0x3FED0000, 0x00000000, -/**/ 0xBF0CFF8C, 0x01CFF8C0, -/**/ 0x3FB9375E, 0x55594000, -/**/ 0x3D3EDDC3, 0x7380C364, -/**/ 0x3FECF800, 0x00000000, -/**/ 0x3F1F7661, 0x546D8D78, -/**/ 0x3FB97156, 0xDC8F8000, -/**/ 0xBD3C1FC1, 0x9AFDB97B, -/**/ 0x3FECF000, 0x00000000, -/**/ 0x3F3372E2, 0x25FE30D9, -/**/ 0x3FB9AB42, 0x46204000, -/**/ 0xBD28A648, 0x26787061, -/**/ 0x3FECE800, 0x00000000, -/**/ 0x3F3F1FDB, 0xD92305A6, -/**/ 0x3FB9E520, 0x97F9C000, -/**/ 0x3D235FAC, 0xB52DD050, -/**/ 0x3FECE800, 0x00000000, -/**/ 0xBF351B8A, 0x9C37FC63, -/**/ 0x3FBA1EF1, 0xD8060000, -/**/ 0x3D3CD417, 0x6DF97BCB, -/**/ 0x3FECE000, 0x00000000, -/**/ 0xBF227EC2, 0x6CB725AB, -/**/ 0x3FBA58B6, 0x0C2B4000, -/**/ 0xBD3CDC73, 0x5C5C9F2A, -/**/ 0x3FECD800, 0x00000000, -/**/ 0x3F05A240, 0xE6C2B448, -/**/ 0x3FBA926D, 0x3A4AC000, -/**/ 0x3D356365, 0x0BD22A9C, -/**/ 0x3FECD000, 0x00000000, -/**/ 0x3F2D7EC2, 0xFBB8D9F3, -/**/ 0x3FBACC17, 0x68434000, -/**/ 0xBD2AA783, 0xA0B7FA4C, -/**/ 0x3FECC800, 0x00000000, -/**/ 0x3F3AE1DB, 0x1B71D3E9, -/**/ 0x3FBB05B4, 0x9BEE4000, -/**/ 0x3D0FF22C, 0x18F84A5E, -/**/ 0x3FECC800, 0x00000000, -/**/ 0xBF38E45A, 0xCD6DE82D, -/**/ 0x3FBB3F44, 0xDB220000, -/**/ 0x3D3FD153, 0xD8DE09AF, -/**/ 0x3FECC000, 0x00000000, -/**/ 0xBF29269F, 0xE341926A, -/**/ 0x3FBB78C8, 0x2BB10000, -/**/ 0xBD325EF7, 0xBC3987E7, -/**/ 0x3FECB800, 0x00000000, -/**/ 0xBEC589FB, 0xF620C1DA, -/**/ 0x3FBBB23E, 0x93690000, -/**/ 0xBD368B18, 0x3559DB8B, -/**/ 0x3FECB000, 0x00000000, -/**/ 0x3F28A893, 0x0DE5FF1A, -/**/ 0x3FBBEBA8, 0x18148000, -/**/ 0xBD389B78, 0xB6DF1F57, -/**/ 0x3FECA800, 0x00000000, -/**/ 0x3F38EAB9, 0x0039563B, -/**/ 0x3FBC2504, 0xBF79C000, -/**/ 0x3D3717C4, 0xD0EF4ADC, -/**/ 0x3FECA800, 0x00000000, -/**/ 0xBF3A67D5, 0x08F377F2, -/**/ 0x3FBC5E54, 0x8F5BC000, -/**/ 0x3D1D0C57, 0x585FBE06, -/**/ 0x3FECA000, 0x00000000, -/**/ 0xBF2B46E0, 0x072792E4, -/**/ 0x3FBC9797, 0x8D790000, -/**/ 0xBD36E010, 0x977D1884, -/**/ 0x3FEC9800, 0x00000000, -/**/ 0xBEE904EA, 0x1BB327C3, -/**/ 0x3FBCD0CD, 0xBF8C0000, -/**/ 0x3D33E14D, 0xB50DD743, -/**/ 0x3FEC9000, 0x00000000, -/**/ 0x3F2853EB, 0x77683AEC, -/**/ 0x3FBD09F7, 0x2B4C4000, -/**/ 0x3D2048C0, 0x00354E33, -/**/ 0x3FEC8800, 0x00000000, -/**/ 0x3F3932D7, 0xDC52100E, -/**/ 0x3FBD4313, 0xD66CC000, -/**/ 0xBD294543, 0x79135713, -/**/ 0x3FEC8800, 0x00000000, -/**/ 0xBF39AD90, 0x2736962B, -/**/ 0x3FBD7C23, 0xC69CC000, -/**/ 0xBD297EE4, 0xDD328771, -/**/ 0x3FEC8000, 0x00000000, -/**/ 0xBF28EEA2, 0xF316B4C2, -/**/ 0x3FBDB527, 0x0187C000, -/**/ 0x3D392778, 0x56AE181F, -/**/ 0x3FEC7800, 0x00000000, -/**/ 0x3EEAB099, 0x058F7536, -/**/ 0x3FBDEE1D, 0x8CD60000, -/**/ 0xBD328DA0, 0x729EFF89, -/**/ 0x3FEC7000, 0x00000000, -/**/ 0x3F2C71C7, 0x1C71C71C, -/**/ 0x3FBE2707, 0x6E2B0000, -/**/ 0xBD2A342C, 0x2AF0003C, -/**/ 0x3FEC6800, 0x00000000, -/**/ 0x3F3BB2BB, 0xD6422A30, -/**/ 0x3FBE5FE4, 0xAB274000, -/**/ 0xBD35FAE9, 0xF74FFE4D, -/**/ 0x3FEC6800, 0x00000000, -/**/ 0xBF36BD01, 0x54BDE47E, -/**/ 0x3FBE98B5, 0x49670000, -/**/ 0x3D346774, 0x89C50E97, -/**/ 0x3FEC6000, 0x00000000, -/**/ 0xBF222CC5, 0xB5157FE4, -/**/ 0x3FBED179, 0x4E838000, -/**/ 0xBD1FD143, 0x749D0484, -/**/ 0x3FEC5800, 0x00000000, -/**/ 0x3F129A21, 0xA930B840, -/**/ 0x3FBF0A30, 0xC0118000, -/**/ 0xBD3D599E, 0x83368E91, -/**/ 0x3FEC5000, 0x00000000, -/**/ 0x3F3279B1, 0xAC5CEE14, -/**/ 0x3FBF42DB, 0xA3A24000, -/**/ 0xBD3312B7, 0x32DF6C0D, -/**/ 0x3FEC5000, 0x00000000, -/**/ 0xBF3F9CF5, 0xD4AB8D0B, -/**/ 0x3FBF7B79, 0xFEC38000, -/**/ 0xBD010987, 0xE897ED01, -/**/ 0x3FEC4800, 0x00000000, -/**/ 0xBF319D7C, 0xCC17DAE4, -/**/ 0x3FBFB40B, 0xD6FF4000, -/**/ 0x3D2C0BEC, 0xB7B53B5B, -/**/ 0x3FEC4000, 0x00000000, -/**/ 0xBF0C3F8F, 0x01C3F8F0, -/**/ 0x3FBFEC91, 0x31DC0000, -/**/ 0xBD354555, 0xD1AE6607, -/**/ 0x3FEC3800, 0x00000000, -/**/ 0x3F254738, 0xAB1B8FFC, -/**/ 0x3FC01285, 0x0A6E0000, -/**/ 0xBD1A8619, 0x4805BF94, -/**/ 0x3FEC3000, 0x00000000, -/**/ 0x3F38E51F, 0x48B3C5D7, -/**/ 0x3FC02EBB, 0x42BF4000, -/**/ 0xBD15A8FA, 0x5CE00E5D, -/**/ 0x3FEC3000, 0x00000000, -/**/ 0xBF38C377, 0x867E595E, -/**/ 0x3FC04AEB, 0x449F6000, -/**/ 0x3D2AFA90, 0x65CCD35C, -/**/ 0x3FEC2800, 0x00000000, -/**/ 0xBF24AC6D, 0x15FE3D95, -/**/ 0x3FC06715, 0x12CA6000, -/**/ 0xBD2A4757, 0x9CDC0A3D, -/**/ 0x3FEC2000, 0x00000000, -/**/ 0x3F10B34F, 0x53B8CDAE, -/**/ 0x3FC08338, 0xAFFA2000, -/**/ 0x3D30533C, 0xAC823E27, -/**/ 0x3FEC1800, 0x00000000, -/**/ 0x3F32C599, 0x3FABB0F6, -/**/ 0x3FC09F56, 0x1EE72000, -/**/ 0xBD28F305, 0x7157D1A8, -/**/ 0x3FEC1800, 0x00000000, -/**/ 0xBF3E8BF4, 0x97CD1B6C, -/**/ 0x3FC0BB6D, 0x6247A000, -/**/ 0x3D35464F, 0x3CCD04B3, -/**/ 0x3FEC1000, 0x00000000, -/**/ 0xBF2F8FC7, 0xE3F1F8FC, -/**/ 0x3FC0D77E, 0x7CD08000, -/**/ 0x3D3CB2CD, 0x2EE2F482, -/**/ 0x3FEC0800, 0x00000000, -/**/ 0xBEEDC860, 0x5B199F35, -/**/ 0x3FC0F389, 0x7134C000, -/**/ 0xBD3DA359, 0xE893D6C6, -/**/ 0x3FEC0000, 0x00000000, -/**/ 0x3F2C01C0, 0x1C01C01C, -/**/ 0x3FC10F8E, 0x42254000, -/**/ 0xBD293B38, 0x43396307, -/**/ 0x3FEBF800, 0x00000000, -/**/ 0x3F3D0577, 0x256228AA, -/**/ 0x3FC12B8C, 0xF2518000, -/**/ 0x3D348A4A, 0x13C0A0FC, -/**/ 0x3FEBF800, 0x00000000, -/**/ 0xBF33E08B, 0xCB93A8A1, -/**/ 0x3FC14785, 0x84674000, -/**/ 0x3D156345, 0x1027C750, -/**/ 0x3FEBF000, 0x00000000, -/**/ 0xBF12C4DB, 0x1DE63F4A, -/**/ 0x3FC16377, 0xFB124000, -/**/ 0x3D091E1A, 0xBF41763E, -/**/ 0x3FEBE800, 0x00000000, -/**/ 0x3F2526D0, 0x769F9E4F, -/**/ 0x3FC17F64, 0x58FCA000, -/**/ 0x3D2843FA, 0xD093C8DC, -/**/ 0x3FEBE000, 0x00000000, -/**/ 0x3F39ED43, 0x5292D891, -/**/ 0x3FC19B4A, 0xA0CEE000, -/**/ 0xBD3D8824, 0x9621338B, -/**/ 0x3FEBE000, 0x00000000, -/**/ 0xBF36A3B3, 0x5FC845A9, -/**/ 0x3FC1B72A, 0xD52F6000, -/**/ 0x3D2E80A4, 0x1811A396, -/**/ 0x3FEBD800, 0x00000000, -/**/ 0xBF1C7E26, 0xB7230491, -/**/ 0x3FC1D304, 0xF8C36000, -/**/ 0xBD3A6D44, 0xDF451042, -/**/ 0x3FEBD000, 0x00000000, -/**/ 0x3F20F365, 0x451B61CB, -/**/ 0x3FC1EED9, 0x0E2DC000, -/**/ 0x3D161563, 0x7097648F, -/**/ 0x3FEBC800, 0x00000000, -/**/ 0x3F3827F3, 0xD72DD0AA, -/**/ 0x3FC20AA7, 0x18102000, -/**/ 0x3D3F2C94, 0x348552FE, -/**/ 0x3FEBC800, 0x00000000, -/**/ 0xBF3814D3, 0xBE0C262F, -/**/ 0x3FC2266F, 0x190A6000, -/**/ 0xBD24D20A, 0xB840E7F6, -/**/ 0x3FEBC000, 0x00000000, -/**/ 0xBF207963, 0x7ECECB53, -/**/ 0x3FC24231, 0x13BA6000, -/**/ 0xBD3E3A00, 0x78EE9D9C, -/**/ 0x3FEBB800, 0x00000000, -/**/ 0x3F1EC130, 0xF29268D3, -/**/ 0x3FC25DED, 0x0ABC6000, -/**/ 0x3D35A385, 0x4F176449, -/**/ 0x3FEBB000, 0x00000000, -/**/ 0x3F37B218, 0xAB6353BF, -/**/ 0x3FC279A3, 0x00AB4000, -/**/ 0x3D3EF432, 0xB3235108, -/**/ 0x3FEBB000, 0x00000000, -/**/ 0xBF383759, 0xF2298376, -/**/ 0x3FC29552, 0xF8200000, -/**/ 0xBD35B967, 0xF4471DFC, -/**/ 0x3FEBA800, 0x00000000, -/**/ 0xBF201832, 0x1EAD4253, -/**/ 0x3FC2B0FC, 0xF3B1A000, -/**/ 0x3D177CA3, 0xE30A59EA, -/**/ 0x3FEBA000, 0x00000000, -/**/ 0x3F20679B, 0xD84886B1, -/**/ 0x3FC2CCA0, 0xF5F60000, -/**/ 0xBD3B5EF1, 0x91AFF120, -/**/ 0x3FEB9800, 0x00000000, -/**/ 0x3F38884D, 0xA41FEB4C, -/**/ 0x3FC2E83F, 0x0180E000, -/**/ 0xBD3F0C2A, 0xC284E1CE, -/**/ 0x3FEB9800, 0x00000000, -/**/ 0xBF370EA7, 0x3806E548, -/**/ 0x3FC303D7, 0x18E48000, -/**/ 0xBCD680B5, 0xCE3ECB05, -/**/ 0x3FEB9000, 0x00000000, -/**/ 0xBF1A4477, 0xB5EF34C0, -/**/ 0x3FC31F69, 0x3EB1A000, -/**/ 0xBD2A6726, 0xE5A396FB, -/**/ 0x3FEB8800, 0x00000000, -/**/ 0x3F2401B8, 0x9401B894, -/**/ 0x3FC33AF5, 0x75770000, -/**/ 0x3D3C9ECC, 0xA2FE72A5, -/**/ 0x3FEB8000, 0x00000000, -/**/ 0x3F3AA73A, 0x400DC1AA, -/**/ 0x3FC3567B, 0xBFC22000, -/**/ 0x3D3250D2, 0x53991A1F, -/**/ 0x3FEB8000, 0x00000000, -/**/ 0xBF349E11, 0x2E63A6A8, -/**/ 0x3FC371FC, 0x201E8000, -/**/ 0x3D3EE877, 0x9B2D8ABC, -/**/ 0x3FEB7800, 0x00000000, -/**/ 0xBF0E7898, 0xC8DA04B9, -/**/ 0x3FC38D76, 0x99164000, -/**/ 0x3D1844A5, 0x9E39BB70, -/**/ 0x3FEB7000, 0x00000000, -/**/ 0x3F2A284E, 0xE6B33E2D, -/**/ 0x3FC3A8EB, 0x2D31A000, -/**/ 0x3D1BAFB7, 0x7D5D503E, -/**/ 0x3FEB6800, 0x00000000, -/**/ 0x3F3E0B91, 0x759C2BB4, -/**/ 0x3FC3C459, 0xDEF76000, -/**/ 0x3D3EDC86, 0xF6B70D33, -/**/ 0x3FEB6800, 0x00000000, -/**/ 0xBF30E8E2, 0x088FD6E7, -/**/ 0x3FC3DFC2, 0xB0ECC000, -/**/ 0x3D28A72A, 0x62B8C13F, -/**/ 0x3FEB6000, 0x00000000, -/**/ 0x3ECB6006, 0xD801B600, -/**/ 0x3FC3FB25, 0xA5952000, -/**/ 0x3D3195BE, 0x6B358FF7, -/**/ 0x3FEB5800, 0x00000000, -/**/ 0x3F316A6A, 0xD840F62C, -/**/ 0x3FC41682, 0xBF728000, -/**/ 0xBD210047, 0x081F849D, -/**/ 0x3FEB5800, 0x00000000, -/**/ 0xBF3D4DEE, 0x7DF8BD99, -/**/ 0x3FC431DA, 0x01050000, -/**/ 0x3D304837, 0x836E0391, -/**/ 0x3FEB5000, 0x00000000, -/**/ 0xBF27E4B1, 0x7E4B17E5, -/**/ 0x3FC44D2B, 0x6CCB8000, -/**/ 0xBD170CC1, 0x6135783C, -/**/ 0x3FEB4800, 0x00000000, -/**/ 0x3F15F47D, 0x55E6D8FE, -/**/ 0x3FC46877, 0x05430000, -/**/ 0xBD3D8145, 0xF8D5087E, -/**/ 0x3FEB4000, 0x00000000, -/**/ 0x3F37006D, 0x0B803686, -/**/ 0x3FC483BC, 0xCCE6E000, -/**/ 0x3D1EEA52, 0x723F6369, -/**/ 0x3FEB4000, 0x00000000, -/**/ 0xBF37687C, 0x46A66920, -/**/ 0x3FC49EFC, 0xC6314000, -/**/ 0xBD090F59, 0x9F55572B, -/**/ 0x3FEB3800, 0x00000000, -/**/ 0xBF16F6A4, 0xFF2645BE, -/**/ 0x3FC4BA36, 0xF39A6000, -/**/ 0xBD34354B, 0xB3F219E5, -/**/ 0x3FEB3000, 0x00000000, -/**/ 0x3F2801B3, 0x1801B318, -/**/ 0x3FC4D56B, 0x5798E000, -/**/ 0x3D380580, 0x15A96555, -/**/ 0x3FEB2800, 0x00000000, -/**/ 0x3F3DD2FF, 0x93511680, -/**/ 0x3FC4F099, 0xF4A24000, -/**/ 0xBD3E9BF2, 0xFAFEAF27, -/**/ 0x3FEB2800, 0x00000000, -/**/ 0xBF304743, 0xA89DCCAC, -/**/ 0x3FC50BC2, 0xCD29C000, -/**/ 0x3D1ADA57, 0x28DB8D4F, -/**/ 0x3FEB2000, 0x00000000, -/**/ 0x3EFB2036, 0x406C80D9, -/**/ 0x3FC526E5, 0xE3A1C000, -/**/ 0xBD3790BA, 0x37FC5238, -/**/ 0x3FEB1800, 0x00000000, -/**/ 0x3F33BEC8, 0x4F9DC00E, -/**/ 0x3FC54203, 0x3A7A8000, -/**/ 0x3D268D68, 0xED855F0E, -/**/ 0x3FEB1800, 0x00000000, -/**/ 0xBF3A2101, 0x44F8CE7E, -/**/ 0x3FC55D1A, 0xD4232000, -/**/ 0x3D3ADD94, 0xDDA647E8, -/**/ 0x3FEB1000, 0x00000000, -/**/ 0xBF1FB596, 0xB99AF3F3, -/**/ 0x3FC5782C, 0xB3092000, -/**/ 0xBD33A463, 0x51794442, -/**/ 0x3FEB0800, 0x00000000, -/**/ 0x3F24B31D, 0x922A3E85, -/**/ 0x3FC59338, 0xD9982000, -/**/ 0x3CF0BA68, 0xB7555D4A, -/**/ 0x3FEB0000, 0x00000000, -/**/ 0x3F3CB3CF, 0xE19BF6B7, -/**/ 0x3FC5AE3F, 0x4A3AA000, -/**/ 0x3D21EA25, 0xF012A8B9, -/**/ 0x3FEB0000, 0x00000000, -/**/ 0xBF30DEAE, 0x9A5BF0D1, -/**/ 0x3FC5C940, 0x07598000, -/**/ 0xBD3A8D94, 0x8CD23322, -/**/ 0x3FEAF800, 0x00000000, -/**/ 0x3EFA2072, 0x9EDE13CE, -/**/ 0x3FC5E43B, 0x135BE000, -/**/ 0xBD343AB4, 0xCEED9C31, -/**/ 0x3FEAF000, 0x00000000, -/**/ 0x3F3435E5, 0x0D79435E, -/**/ 0x3FC5FF30, 0x70A7A000, -/**/ 0xBD38586F, 0x183BEBF2, -/**/ 0x3FEAF000, 0x00000000, -/**/ 0xBF392321, 0x06855D30, -/**/ 0x3FC61A20, 0x21A0E000, -/**/ 0x3D3DD9DD, 0x1BDF3CDD, -/**/ 0x3FEAE800, 0x00000000, -/**/ 0xBF19A45C, 0x7ABED811, -/**/ 0x3FC6350A, 0x28AAA000, -/**/ 0x3D2D5EC0, 0xAB8163AF, -/**/ 0x3FEAE000, 0x00000000, -/**/ 0x3F28C7ED, 0x84EF68CB, -/**/ 0x3FC64FEE, 0x88260000, -/**/ 0xBD1DA40D, 0x759DDED6, -/**/ 0x3FEAD800, 0x00000000, -/**/ 0x3F3F43FC, 0xA482F00D, -/**/ 0x3FC66ACD, 0x4272A000, -/**/ 0x3D3AA1BD, 0xBFC6C785, -/**/ 0x3FEAD800, 0x00000000, -/**/ 0xBF2B9222, 0xCDE3E7AE, -/**/ 0x3FC685A6, 0x59EF0000, -/**/ 0xBD21F2A9, 0x6C103214, -/**/ 0x3FEAD000, 0x00000000, -/**/ 0x3F14F302, 0xEED254A3, -/**/ 0x3FC6A079, 0xD0F7A000, -/**/ 0x3D35A3F8, 0x448D14F5, -/**/ 0x3FEAC800, 0x00000000, -/**/ 0x3F385567, 0x32071DEF, -/**/ 0x3FC6BB47, 0xA9E80000, -/**/ 0x3D19F64D, 0x23EA3296, -/**/ 0x3FEAC800, 0x00000000, -/**/ 0xBF347F29, 0xD47F29D4, -/**/ 0x3FC6D60F, 0xE719E000, -/**/ 0xBD3BC6E5, 0x57134767, -/**/ 0x3FEAC000, 0x00000000, -/**/ 0xBEF40FE1, 0xE82D23BC, -/**/ 0x3FC6F0D2, 0x8AE56000, -/**/ 0x3D369737, 0xC93373DA, -/**/ 0x3FEAB800, 0x00000000, -/**/ 0x3F320FDE, 0x972D8538, -/**/ 0x3FC70B8F, 0x97A1A000, -/**/ 0x3D34EA64, 0xF6A95BEF, -/**/ 0x3FEAB800, 0x00000000, -/**/ 0xBF3A8C9F, 0x66711513, -/**/ 0x3FC72647, 0x0FA40000, -/**/ 0xBD3774DF, 0x0E743A45, -/**/ 0x3FEAB000, 0x00000000, -/**/ 0xBF1C5A0F, 0x02806ABC, -/**/ 0x3FC740F8, 0xF5404000, -/**/ 0xBD30B66C, 0x99018AA1, -/**/ 0x3FEAA800, 0x00000000, -/**/ 0x3F28E44B, 0xD22C937A, -/**/ 0x3FC75BA5, 0x4AC8E000, -/**/ 0x3D3DDCA5, 0x8BC4A7C0, -/**/ 0x3FEAA800, 0x00000000, -/**/ 0xBF3FF2AD, 0xFF2ADFF3, -/**/ 0x3FC7764C, 0x128F2000, -/**/ 0x3D027490, 0x3479E3D1, -/**/ 0x3FEAA000, 0x00000000, -/**/ 0xBF288A16, 0x0B3ADA5C, -/**/ 0x3FC790ED, 0x4EE26000, -/**/ 0x3D199BBD, 0x4E7746F6, -/**/ 0x3FEA9800, 0x00000000, -/**/ 0x3F1DEC0D, 0x4C77B035, -/**/ 0x3FC7AB89, 0x0210E000, -/**/ 0xBD2BDB90, 0x72534A58, -/**/ 0x3FEA9000, 0x00000000, -/**/ 0x3F3B4D71, 0x91F59E6B, -/**/ 0x3FC7C61F, 0x2E674000, -/**/ 0xBD32392D, 0xB31BE8E0, -/**/ 0x3FEA9000, 0x00000000, -/**/ 0xBF30CDCB, 0xB8A2A522, -/**/ 0x3FC7E0AF, 0xD630C000, -/**/ 0x3D139E7C, 0x1D8F1034, -/**/ 0x3FEA8800, 0x00000000, -/**/ 0x3F094A00, 0x6A2194A0, -/**/ 0x3FC7FB3A, 0xFBB76000, -/**/ 0xBD37DBF5, 0x24609D57, -/**/ 0x3FEA8000, 0x00000000, -/**/ 0x3F373289, 0x870AC52E, -/**/ 0x3FC815C0, 0xA1436000, -/**/ 0xBD302A52, 0xF9201CE8, -/**/ 0x3FEA8000, 0x00000000, -/**/ 0xBF34B1FA, 0x9E8684DD, -/**/ 0x3FC83040, 0xC91BC000, -/**/ 0x3D3E5B71, 0xC6E66F32, -/**/ 0x3FEA7800, 0x00000000, -/**/ 0xBEE08AF5, 0xA9267648, -/**/ 0x3FC84ABB, 0x75866000, -/**/ 0xBD3D8DAA, 0xDF4E2BD2, -/**/ 0x3FEA7000, 0x00000000, -/**/ 0x3F33BB67, 0x1A3D927E, -/**/ 0x3FC86530, 0xA8C70000, -/**/ 0x3D398BB0, 0xCB4EA3E3, -/**/ 0x3FEA7000, 0x00000000, -/**/ 0xBF37F2C9, 0x7F2C97F3, -/**/ 0x3FC87FA0, 0x6520C000, -/**/ 0x3D322120, 0x401202FC, -/**/ 0x3FEA6800, 0x00000000, -/**/ 0xBF0C77A5, 0x3C076D20, -/**/ 0x3FC89A0A, 0xACD4E000, -/**/ 0x3D2C0BFB, 0xDA8F5A72, -/**/ 0x3FEA6000, 0x00000000, -/**/ 0x3F30E6DA, 0x7C7EF82B, -/**/ 0x3FC8B46F, 0x82236000, -/**/ 0x3D12D9F2, 0x102DD7C9, -/**/ 0x3FEA6000, 0x00000000, -/**/ 0xBF3A9167, 0x2EC05C44, -/**/ 0x3FC8CECE, 0xE74AE000, -/**/ 0xBD3A5BA0, 0xAA429BB5, -/**/ 0x3FEA5800, 0x00000000, -/**/ 0xBF17DF12, 0xEEB6BD53, -/**/ 0x3FC8E928, 0xDE886000, -/**/ 0x3D3A8154, 0xB13D72D5, -/**/ 0x3FEA5000, 0x00000000, -/**/ 0x3F2D676D, 0x98C70AE6, -/**/ 0x3FC9037D, 0x6A180000, -/**/ 0x3D230DEA, 0x57C1C8D9, -/**/ 0x3FEA5000, 0x00000000, -/**/ 0xBF3C8EFF, 0x96CE4780, -/**/ 0x3FC91DCC, 0x8C340000, -/**/ 0x3D37BC6A, 0xBDDEFF46, -/**/ 0x3FEA4800, 0x00000000, -/**/ 0xBF1EFFCB, 0x71EFFCB7, -/**/ 0x3FC93816, 0x4715A000, -/**/ 0xBD34C63D, 0x6A3A39D9, -/**/ 0x3FEA4000, 0x00000000, -/**/ 0x3F2A41A4, 0x1A41A41A, -/**/ 0x3FC9525A, 0x9CF46000, -/**/ 0xBD329713, 0x7D9F158F, -/**/ 0x3FEA4000, 0x00000000, -/**/ 0xBF3DECBB, 0xBF3B3C0E, -/**/ 0x3FC96C99, 0x9006A000, -/**/ 0x3D2A88D5, 0x9CBB452C, -/**/ 0x3FEA3800, 0x00000000, -/**/ 0xBF21D14E, 0x3BCD35A8, -/**/ 0x3FC986D3, 0x22818000, -/**/ 0x3CF93B56, 0x4DD44000, -/**/ 0x3FEA3000, 0x00000000, -/**/ 0x3F285A0A, 0x3B5832C0, -/**/ 0x3FC9A107, 0x56988000, -/**/ 0x3D264AA6, 0x242CD098, -/**/ 0x3FEA3000, 0x00000000, -/**/ 0xBF3EABC1, 0xD71AFD8C, -/**/ 0x3FC9BB36, 0x2E7E0000, -/**/ 0xBD21F2A8, 0xA1CE0FFC, -/**/ 0x3FEA2800, 0x00000000, -/**/ 0xBF22E60D, 0x7C041611, -/**/ 0x3FC9D55F, 0xAC62E000, -/**/ 0xBD3F4669, 0xFC3B5BC3, -/**/ 0x3FEA2000, 0x00000000, -/**/ 0x3F27AE57, 0x5FF2EF43, -/**/ 0x3FC9EF83, 0xD276A000, -/**/ 0xBD2730B7, 0xB3F9CE00, -/**/ 0x3FEA2000, 0x00000000, -/**/ 0xBF3ECD35, 0x3D66322E, -/**/ 0x3FCA09A2, 0xA2E7A000, -/**/ 0xBD2DD99D, 0xCD411233, -/**/ 0x3FEA1800, 0x00000000, -/**/ 0xBF22C068, 0x5B4FE5E9, -/**/ 0x3FCA23BC, 0x1FE2C000, -/**/ 0xBD3539CD, 0x91DC9F0B, -/**/ 0x3FEA1000, 0x00000000, -/**/ 0x3F283C48, 0x80B67A9A, -/**/ 0x3FCA3DD0, 0x4B938000, -/**/ 0x3D297DA1, 0x366E2C5A, -/**/ 0x3FEA1000, 0x00000000, -/**/ 0xBF3E5236, 0x89907BBA, -/**/ 0x3FCA57DF, 0x28244000, -/**/ 0x3D3B99C8, 0xCA1D9ABB, -/**/ 0x3FEA0800, 0x00000000, -/**/ 0xBF21629E, 0x32054967, -/**/ 0x3FCA71E8, 0xB7BE0000, -/**/ 0xBD210ACA, 0x6EF05323, -/**/ 0x3FEA0000, 0x00000000, -/**/ 0x3F2A01A0, 0x1A01A01A, -/**/ 0x3FCA8BEC, 0xFC882000, -/**/ 0x3D3E3185, 0xCF21B9CF, -/**/ 0x3FEA0000, 0x00000000, -/**/ 0xBF3D3BE3, 0x93FF301D, -/**/ 0x3FCAA5EB, 0xF8A94000, -/**/ 0xBD32A0A9, 0x36951A8F, -/**/ 0x3FE9F800, 0x00000000, -/**/ 0xBF1D9DD1, 0xBFE608ED, -/**/ 0x3FCABFE5, 0xAE462000, -/**/ 0xBD3B68F5, 0x395F139D, -/**/ 0x3FE9F000, 0x00000000, -/**/ 0x3F2CFC26, 0x1B29257F, -/**/ 0x3FCAD9DA, 0x1F828000, -/**/ 0xBD3882B7, 0xC803F050, -/**/ 0x3FE9F000, 0x00000000, -/**/ 0xBF3B8B57, 0x7E613717, -/**/ 0x3FCAF3C9, 0x4E80C000, -/**/ 0xBCBA4E63, 0x3FCD9066, -/**/ 0x3FE9E800, 0x00000000, -/**/ 0xBF160EF9, 0xB9FABD04, -/**/ 0x3FCB0DB3, 0x3D620000, -/**/ 0x3D3FEE14, 0x38EAB906, -/**/ 0x3FE9E000, 0x00000000, -/**/ 0x3F3094D3, 0xEAF850E2, -/**/ 0x3FCB2797, 0xEE464000, -/**/ 0xBD3BE88A, 0x906D00A9, -/**/ 0x3FE9E000, 0x00000000, -/**/ 0xBF3941AA, 0xBBE88FDC, -/**/ 0x3FCB4177, 0x634BA000, -/**/ 0x3D355D01, 0x5666069F, -/**/ 0x3FE9D800, 0x00000000, -/**/ 0xBF083A25, 0x25F4B1AA, -/**/ 0x3FCB5B51, 0x9E8FC000, -/**/ 0xBD34B722, 0xEC011F31, -/**/ 0x3FE9D000, 0x00000000, -/**/ 0x3F3343FB, 0xF71FAC14, -/**/ 0x3FCB7526, 0xA22E4000, -/**/ 0x3D2C0DBF, 0x2E785490, -/**/ 0x3FE9D000, 0x00000000, -/**/ 0xBF365FF3, 0x1965FF32, -/**/ 0x3FCB8EF6, 0x70420000, -/**/ 0x3D387533, 0x321788E0, -/**/ 0x3FE9C800, 0x00000000, -/**/ 0x3EA9C801, 0x9C8019C8, -/**/ 0x3FCBA8C1, 0x0AE46000, -/**/ 0x3D3A32E2, 0x9EEE9D85, -/**/ 0x3FE9C000, 0x00000000, -/**/ 0x3F368A77, 0x25080CE1, -/**/ 0x3FCBC286, 0x742D8000, -/**/ 0x3D39AC53, 0xF39D121C, -/**/ 0x3FE9C000, 0x00000000, -/**/ 0xBF32E743, 0xC54763F2, -/**/ 0x3FCBDC46, 0xAE344000, -/**/ 0x3D3625B4, 0x023D6505, -/**/ 0x3FE9B800, 0x00000000, -/**/ 0x3F0DBD49, 0x8B7424F9, -/**/ 0x3FCBF601, 0xBB0E4000, -/**/ 0x3D2386A9, 0x47C378B5, -/**/ 0x3FE9B000, 0x00000000, -/**/ 0x3F3A6734, 0x00CD9A67, -/**/ 0x3FCC0FB7, 0x9CCFE000, -/**/ 0xBD346FFF, 0x99E8A558, -/**/ 0x3FE9B000, 0x00000000, -/**/ 0xBF2DB15A, 0xAEF25B7C, -/**/ 0x3FCC2968, 0x558C2000, -/**/ 0xBD2CFD73, 0xDEE38A40, -/**/ 0x3FE9A800, 0x00000000, -/**/ 0x3F1FDFEC, 0xC140C073, -/**/ 0x3FCC4313, 0xE754E000, -/**/ 0x3D3279BE, 0x74CAD7D6, -/**/ 0x3FE9A000, 0x00000000, -/**/ 0x3F3ED923, 0xA7DCBEB3, -/**/ 0x3FCC5CBA, 0x543AE000, -/**/ 0x3D20929D, 0xECB454FC, -/**/ 0x3FE9A000, 0x00000000, -/**/ 0xBF246A7B, 0xB256DE2C, -/**/ 0x3FCC765B, 0x9E4D6000, -/**/ 0x3D31AB6B, 0x36976F6C, -/**/ 0x3FE99800, 0x00000000, -/**/ 0x3F299999, 0x9999999A, -/**/ 0x3FCC8FF7, 0xC79AA000, -/**/ 0xBD27794F, 0x689F8434, -/**/ 0x3FE99800, 0x00000000, -/**/ 0xBF3C20C6, 0x3EC03FF3, -/**/ 0x3FCCA98E, 0xD22F6000, -/**/ 0xBCF698C1, 0x8CA209C8, -/**/ 0x3FE99000, 0x00000000, -/**/ 0xBF13F803, 0x31EC07FD, -/**/ 0x3FCCC320, 0xC0176000, -/**/ 0x3D240903, 0x9A653794, -/**/ 0x3FE98800, 0x00000000, -/**/ 0x3F323513, 0x5AC98715, -/**/ 0x3FCCDCAD, 0x935D2000, -/**/ 0xBD0A0FF0, 0x34C9A447, -/**/ 0x3FE98800, 0x00000000, -/**/ 0xBF368793, 0x89F80661, -/**/ 0x3FCCF635, 0x4E09C000, -/**/ 0x3D277123, 0x9A07D55B, -/**/ 0x3FE98000, 0x00000000, -/**/ 0x3EE98019, 0x8019801A, -/**/ 0x3FCD0FB7, 0xF2256000, -/**/ 0xBD0AF52B, 0x20633B29, -/**/ 0x3FE97800, 0x00000000, -/**/ 0x3F382FC6, 0xAB329020, -/**/ 0x3FCD2935, 0x81B6C000, -/**/ 0xBD383270, 0x128AAA5F, -/**/ 0x3FE97800, 0x00000000, -/**/ 0xBF305C4B, 0x962DBFF3, -/**/ 0x3FCD42AD, 0xFEC36000, -/**/ 0xBD175C00, 0xFD804272, -/**/ 0x3FE97000, 0x00000000, -/**/ 0x3F1C9F01, 0x970E4F81, -/**/ 0x3FCD5C21, 0x6B4FC000, -/**/ 0xBD21BA91, 0xBBCA681B, -/**/ 0x3FE96800, 0x00000000, -/**/ 0x3F3EBBE1, 0x049160B8, -/**/ 0x3FCD758F, 0xC95F0000, -/**/ 0xBD15A10A, 0x8B4162AA, -/**/ 0x3FE96800, 0x00000000, -/**/ 0xBF233FE6, 0x9933FE6A, -/**/ 0x3FCD8EF9, 0x1AF32000, -/**/ 0xBD15105F, 0xC364C784, -/**/ 0x3FE96000, 0x00000000, -/**/ 0x3F2C2873, 0xCE078906, -/**/ 0x3FCDA85D, 0x620CE000, -/**/ 0x3D240194, 0xC16CC7EC, -/**/ 0x3FE96000, 0x00000000, -/**/ 0xBF3A27A0, 0xE442936B, -/**/ 0x3FCDC1BC, 0xA0ABE000, -/**/ 0x3D38FAC1, 0xA628CCC6, -/**/ 0x3FE95800, 0x00000000, -/**/ 0xBF029C69, 0x548A97A9, -/**/ 0x3FCDDB16, 0xD8CEA000, -/**/ 0xBD1EEF79, 0x7104B8BC, -/**/ 0x3FE95000, 0x00000000, -/**/ 0x3F35906B, 0x9F74B92D, -/**/ 0x3FCDF46C, 0x0C722000, -/**/ 0x3D3A5E82, 0xB0B79039, -/**/ 0x3FE95000, 0x00000000, -/**/ 0xBF327BBF, 0xF35927BC, -/**/ 0x3FCE0DBC, 0x3D92A000, -/**/ 0x3D359233, 0xF0529BF1, -/**/ 0x3FE94800, 0x00000000, -/**/ 0x3F161F9A, 0xDD3C0CA4, -/**/ 0x3FCE2707, 0x6E2B0000, -/**/ 0xBD3A342C, 0x2AF0003C, -/**/ 0x3FE94000, 0x00000000, -/**/ 0x3F3D9B56, 0x41228A8F, -/**/ 0x3FCE404D, 0xA034C000, -/**/ 0xBD3187EE, 0xE09A2799, -/**/ 0x3FE94000, 0x00000000, -/**/ 0xBF2482F5, 0x598A73F8, -/**/ 0x3FCE598E, 0xD5A88000, -/**/ 0xBD0D134B, 0xCF1E98A1, -/**/ 0x3FE93800, 0x00000000, -/**/ 0x3F2BE2D5, 0x3C1B9728, -/**/ 0x3FCE72CB, 0x107DA000, -/**/ 0x3D1DD48C, 0xCDF5471C, -/**/ 0x3FE93800, 0x00000000, -/**/ 0xBF39CC03, 0x2698CFF3, -/**/ 0x3FCE8C02, 0x52AA6000, -/**/ 0xBD26805B, 0x80E8E6FF, -/**/ 0x3FE93000, 0x00000000, -/**/ 0xBEF79CD3, 0xB9F30358, -/**/ 0x3FCEA534, 0x9E23A000, -/**/ 0x3D381B93, 0x4C73CCB5, -/**/ 0x3FE92800, 0x00000000, -/**/ 0x3F36E803, 0x255BA00D, -/**/ 0x3FCEBE61, 0xF4DD8000, -/**/ 0xBD23D453, 0x30FDCA4D, -/**/ 0x3FE92800, 0x00000000, -/**/ 0xBF30A69B, 0x36077742, -/**/ 0x3FCED78A, 0x58CA8000, -/**/ 0x3D16F1B5, 0x3793387E, -/**/ 0x3FE92000, 0x00000000, -/**/ 0x3F1F693A, 0x1C451AB3, -/**/ 0x3FCEF0AD, 0xCBDC6000, -/**/ 0xBD2B26B7, 0x9C86AF24, -/**/ 0x3FE92000, 0x00000000, -/**/ 0xBF3F9548, 0xC74EA9E2, -/**/ 0x3FCF09CC, 0x50036000, -/**/ 0x3D3DA094, 0x18D999DB, -/**/ 0x3FE91800, 0x00000000, -/**/ 0xBF1BD5A8, 0xF7C46911, -/**/ 0x3FCF22E5, 0xE72F2000, -/**/ 0xBD3F454F, 0x1417E41F, -/**/ 0x3FE91000, 0x00000000, -/**/ 0x3F31B9E1, 0x0D83D1C6, -/**/ 0x3FCF3BFA, 0x934D6000, -/**/ 0x3D2D9F2A, 0x937B903B, -/**/ 0x3FE91000, 0x00000000, -/**/ 0xBF35876F, 0xF3795877, -/**/ 0x3FCF550A, 0x564B8000, -/**/ 0xBD2323E3, 0xA09202FE, -/**/ 0x3FE90800, 0x00000000, -/**/ 0x3F0A34CD, 0xBD1D87EC, -/**/ 0x3FCF6E15, 0x32154000, -/**/ 0xBD3C9A97, 0x7AC4EC74, -/**/ 0x3FE90000, 0x00000000, -/**/ 0x3F3C23F5, 0x0E760899, -/**/ 0x3FCF871B, 0x28956000, -/**/ 0xBD3F75FD, 0x6A526EFE, -/**/ 0x3FE90000, 0x00000000, -/**/ 0xBF25DECD, 0xD0BE9594, -/**/ 0x3FCFA01C, 0x3BB58000, -/**/ 0xBD1A1F71, 0xFAE1D786, -/**/ 0x3FE8F800, 0x00000000, -/**/ 0x3F2C18F9, 0xC18F9C19, -/**/ 0x3FCFB918, 0x6D5E4000, -/**/ 0xBD0D572A, 0xAB993C87, -/**/ 0x3FE8F800, 0x00000000, -/**/ 0xBF38E868, 0x8176594C, -/**/ 0x3FCFD20F, 0xBF770000, -/**/ 0xBD11C55B, 0x72C6FE70, -/**/ 0x3FE8F000, 0x00000000, -/**/ 0x3EC8F006, 0x3C018F00, -/**/ 0x3FCFEB02, 0x33E60000, -/**/ 0x3D2F316E, 0x32D5E8C7, -/**/ 0x3FE8E800, 0x00000000, -/**/ 0x3F395B4D, 0xAD115384, -/**/ 0x3FD001F7, 0xE6484000, -/**/ 0x3D38A957, 0x40C9ABBC, -/**/ 0x3FE8E800, 0x00000000, -/**/ 0xBF2AD850, 0xEC8C0F90, -/**/ 0x3FD00E6C, 0x45AD5000, -/**/ 0x3CDCC68D, 0x52E01203, -/**/ 0x3FE8E000, 0x00000000, -/**/ 0x3F27B6E9, 0xA56B1AA1, -/**/ 0x3FD01ADE, 0x3913A000, -/**/ 0xBD108930, 0xCCDC1521, -/**/ 0x3FE8E000, 0x00000000, -/**/ 0xBF3ACDE3, 0x40DFC1D8, -/**/ 0x3FD0274D, 0xC16C2000, -/**/ 0x3D2979E8, 0x9CF835C2, -/**/ 0x3FE8D800, 0x00000000, -/**/ 0xBEF68397, 0x317DF64C, -/**/ 0x3FD033BA, 0xDFA74000, -/**/ 0x3D0C30BC, 0x1485BDFF, -/**/ 0x3FE8D000, 0x00000000, -/**/ 0x3F380C69, 0x80C6980C, -/**/ 0x3FD04025, 0x94B4D000, -/**/ 0x3CF036B8, 0x9EF42D7F, -/**/ 0x3FE8D000, 0x00000000, -/**/ 0xBF2CE006, 0x338C7FE7, -/**/ 0x3FD04C8D, 0xE1842000, -/**/ 0xBD1FE6BA, 0x512CEB86, -/**/ 0x3FE8C800, 0x00000000, -/**/ 0x3F2644F0, 0x1EFBBD63, -/**/ 0x3FD058F3, 0xC703F000, -/**/ 0xBD30E866, 0xBCD236AD, -/**/ 0x3FE8C800, 0x00000000, -/**/ 0xBF3B3C2D, 0xAA79217A, -/**/ 0x3FD06557, 0x46227000, -/**/ 0x3D0131DF, 0xB4868D6A, -/**/ 0x3FE8C000, 0x00000000, -/**/ 0xBEF8BFCE, 0x8062FF3A, -/**/ 0x3FD071B8, 0x5FCD6000, -/**/ 0xBD3BCB8B, 0xA3E01A11, -/**/ 0x3FE8B800, 0x00000000, -/**/ 0x3F383301, 0xBD2672C4, -/**/ 0x3FD07E17, 0x14F1D000, -/**/ 0xBD3EFCC6, 0x4F384BD5, -/**/ 0x3FE8B800, 0x00000000, -/**/ 0xBF2BFE74, 0x9BFE749C, -/**/ 0x3FD08A73, 0x667C5000, -/**/ 0x3D3EBC1D, 0x40C5A329, -/**/ 0x3FE8B000, 0x00000000, -/**/ 0x3F27BA8C, 0xD4353EB3, -/**/ 0x3FD096CD, 0x55591000, -/**/ 0x3D3F998D, 0x20550A31, -/**/ 0x3FE8B000, 0x00000000, -/**/ 0xBF3A3784, 0xA062B2E4, -/**/ 0x3FD0A324, 0xE2739000, -/**/ 0x3D0C6BEE, 0x7EF4030E, -/**/ 0x3FE8A800, 0x00000000, -/**/ 0xBECED1F6, 0x5E630281, -/**/ 0x3FD0AF7A, 0x0EB6C000, -/**/ 0x3D23CCF9, 0x4945ADAD, -/**/ 0x3FE8A000, 0x00000000, -/**/ 0x3F39CAE0, 0x0C519CAE, -/**/ 0x3FD0BBCC, 0xDB0D2000, -/**/ 0x3D32F32C, 0xCC5DCDFB, -/**/ 0x3FE8A000, 0x00000000, -/**/ 0xBF283C02, 0x4EDBA5FD, -/**/ 0x3FD0C81D, 0x4860B000, -/**/ 0xBD3E5BCF, 0x401D1731, -/**/ 0x3FE89800, 0x00000000, -/**/ 0x3F2C0F60, 0x1899C0F6, -/**/ 0x3FD0D46B, 0x579AB000, -/**/ 0x3D3D2C81, 0xF640E1E6, -/**/ 0x3FE89800, 0x00000000, -/**/ 0xBF37C414, 0xBDBE51D0, -/**/ 0x3FD0E0B7, 0x09A43000, -/**/ 0x3D32A038, 0xA7862F2A, -/**/ 0x3FE89000, 0x00000000, -/**/ 0x3F03F540, 0xDD12CE7D, -/**/ 0x3FD0ED00, 0x5F658000, -/**/ 0xBD22DC75, 0x285AA803, -/**/ 0x3FE88800, 0x00000000, -/**/ 0x3F3CCFDE, 0x400C45CD, -/**/ 0x3FD0F947, 0x59C67000, -/**/ 0xBD395261, 0x7F0818B6, -/**/ 0x3FE88800, 0x00000000, -/**/ 0xBF21A0F5, 0x44FB66B5, -/**/ 0x3FD1058B, 0xF9AE5000, -/**/ 0xBD34AB9D, 0x817D52CD, -/**/ 0x3FE88000, 0x00000000, -/**/ 0x3F319D95, 0x2866A138, -/**/ 0x3FD111CE, 0x4003F000, -/**/ 0xBD1B3237, 0x096B4B6B, -/**/ 0x3FE88000, 0x00000000, -/**/ 0xBF33E5FA, 0xA48B49DA, -/**/ 0x3FD11E0E, 0x2DADA000, -/**/ 0xBD2A47F8, 0x8FCCE5BA, -/**/ 0x3FE87800, 0x00000000, -/**/ 0x3F1A9336, 0xDEECB0A8, -/**/ 0x3FD12A4B, 0xC3912000, -/**/ 0xBD35A750, 0x61473259, -/**/ 0x3FE87800, 0x00000000, -/**/ 0xBF3EC219, 0xFB6A388D, -/**/ 0x3FD13687, 0x0293B000, -/**/ 0xBD3D3E84, 0x99D67123, -/**/ 0x3FE87000, 0x00000000, -/**/ 0xBF106AE7, 0xC1625090, -/**/ 0x3FD142BF, 0xEB9A0000, -/**/ 0x3D31CE61, 0x85B58A9E, -/**/ 0x3FE86800, 0x00000000, -/**/ 0x3F369AE5, 0xACD4200C, -/**/ 0x3FD14EF6, 0x7F887000, -/**/ 0xBD3E97A6, 0x5DFC9794, -/**/ 0x3FE86800, 0x00000000, -/**/ 0xBF2D4286, 0x9389D11C, -/**/ 0x3FD15B2A, 0xBF429000, -/**/ 0xBD2D8E3B, 0x49B629B2, -/**/ 0x3FE86000, 0x00000000, -/**/ 0x3F286186, 0x18618618, -/**/ 0x3FD1675C, 0xABABA000, -/**/ 0x3D38380E, 0x731F55C4, -/**/ 0x3FE86000, 0x00000000, -/**/ 0xBF38EF0F, 0x6AC71708, -/**/ 0x3FD1738C, 0x45A67000, -/**/ 0xBD39C6E9, 0x0032C176, -/**/ 0x3FE85800, 0x00000000, -/**/ 0x3EFFF3D3, 0xE00C2C20, -/**/ 0x3FD17FB9, 0x8E151000, -/**/ 0xBD3A8A8B, 0xA74A2684, -/**/ 0x3FE85000, 0x00000000, -/**/ 0x3F3CFBA0, 0xF9592266, -/**/ 0x3FD18BE4, 0x85D93000, -/**/ 0x3D3C167F, 0x6F3604AB, -/**/ 0x3FE85000, 0x00000000, -/**/ 0xBF1FE7B0, 0xFF3D87FA, -/**/ 0x3FD1980D, 0x2DD42000, -/**/ 0x3D2B7B3A, 0x7A361C9A, -/**/ 0x3FE84800, 0x00000000, -/**/ 0x3F331E8D, 0x918DC223, -/**/ 0x3FD1A433, 0x86E68000, -/**/ 0xBD07A850, 0x634E0AAC, -/**/ 0x3FE84800, 0x00000000, -/**/ 0xBF31BAF9, 0x8D76B549, -/**/ 0x3FD1B057, 0x91F08000, -/**/ 0xBD32DD46, 0x6DC55E2D, -/**/ 0x3FE84000, 0x00000000, -/**/ 0x3F22F2EC, 0xDC90C512, -/**/ 0x3FD1BC79, 0x4FD1D000, -/**/ 0xBD3CCF0C, 0x747BA7BE, -/**/ 0x3FE84000, 0x00000000, -/**/ 0xBF3B442A, 0x6A0916B9, -/**/ 0x3FD1C898, 0xC169A000, -/**/ 0xBD381410, 0xE5C62AFF, -/**/ 0x3FE83800, 0x00000000, -/**/ 0x3EA83801, 0x83801838, -/**/ 0x3FD1D4B5, 0xE796A000, -/**/ 0x3D222A5B, 0xD197BAC2, -/**/ 0x3FE83000, 0x00000000, -/**/ 0x3F3B6A41, 0xCBD11C5C, -/**/ 0x3FD1E0D0, 0xC3371000, -/**/ 0x3D3AF8F2, 0xA9B0D4A0, -/**/ 0x3FE83000, 0x00000000, -/**/ 0xBF225381, 0xCB7A3CD6, -/**/ 0x3FD1ECE9, 0x5528B000, -/**/ 0xBD184E7B, 0x09B4A3B8, -/**/ 0x3FE82800, 0x00000000, -/**/ 0x3F32500C, 0x152500C1, -/**/ 0x3FD1F8FF, 0x9E48A000, -/**/ 0x3D27946C, 0x040CBE77, -/**/ 0x3FE82800, 0x00000000, -/**/ 0xBF32285F, 0x14902134, -/**/ 0x3FD20513, 0x9F73B000, -/**/ 0x3CF6E15E, 0x1609E0A4, -/**/ 0x3FE82000, 0x00000000, -/**/ 0x3F22D9EB, 0xA4018213, -/**/ 0x3FD21125, 0x59861000, -/**/ 0x3D382E78, 0xBA2950C4, -/**/ 0x3FE82000, 0x00000000, -/**/ 0xBF3AEFFC, 0xFC6BBFF4, -/**/ 0x3FD21D34, 0xCD5B9000, -/**/ 0x3D3B552F, 0xB28BADAA, -/**/ 0x3FE81800, 0x00000000, -/**/ 0x3EE81818, 0x18181818, -/**/ 0x3FD22941, 0xFBCF8000, -/**/ 0xBD3A6976, 0xF5EB0963, -/**/ 0x3FE81000, 0x00000000, -/**/ 0x3F3C7F27, 0x4FF0F3C6, -/**/ 0x3FD2354C, 0xE5BC9000, -/**/ 0xBD3D78ED, 0x0602A663, -/**/ 0x3FE81000, 0x00000000, -/**/ 0xBF1ED344, 0x0A86941D, -/**/ 0x3FD24155, 0x8BFD1000, -/**/ 0x3D300FFF, 0x3228FCAD, -/**/ 0x3FE80800, 0x00000000, -/**/ 0x3F3424D0, 0x1B0BD52D, -/**/ 0x3FD24D5B, 0xEF6AF000, -/**/ 0xBCBDD780, 0xFC9FABDD, -/**/ 0x3FE80800, 0x00000000, -/**/ 0xBF2FE7F9, 0xFE7F9FE8, -/**/ 0x3FD25960, 0x10DF7000, -/**/ 0x3D38E7BC, 0x224EA3E3, -/**/ 0x3FE80000, 0x00000000, -/**/ 0x3F280180, 0x18018018, -/**/ 0x3FD26561, 0xF1338000, -/**/ 0x3D38B488, 0x66FAA45F, -/**/ 0x3FE80000, 0x00000000, -/**/ 0xBF37FD00, 0x5FF40180, -/**/ 0x3FD27161, 0x913F8000, -/**/ 0x3D34F4F1, 0xF61564B4, -/**/ 0x3FE7F800, 0x00000000, -/**/ 0x3F104AE8, 0x9750B6C7, -/**/ 0x3FD27D5E, 0xF1DB6000, -/**/ 0xBD092374, 0x78CAC9F4, -/**/ 0x3FE7F800, 0x00000000, -/**/ 0xBF3FD017, 0xF405FD01, -/**/ 0x3FD2895A, 0x13DE8000, -/**/ 0x3D3A8D7A, 0xD24C13F0, -/**/ 0x3FE7F000, 0x00000000, -/**/ 0xBF0D2BF1, 0xC9C5485E, -/**/ 0x3FD29552, 0xF81FF000, -/**/ 0x3D348D30, 0x1771C408, -/**/ 0x3FE7E800, 0x00000000, -/**/ 0x3F38927F, 0xD029DB60, -/**/ 0x3FD2A149, 0x9F763000, -/**/ 0xBD30DBBF, 0x51F3AADC, -/**/ 0x3FE7E800, 0x00000000, -/**/ 0xBF26504A, 0xB0A45169, -/**/ 0x3FD2AD3E, 0x0AB73000, -/**/ 0x3D2B972E, 0x488C359F, -/**/ 0x3FE7E000, 0x00000000, -/**/ 0x3F312A8A, 0xD278E8DD, -/**/ 0x3FD2B930, 0x3AB8A000, -/**/ 0xBD26DB12, 0xD6BFB0A5, -/**/ 0x3FE7E000, 0x00000000, -/**/ 0xBF327577, 0x24BB32E7, -/**/ 0x3FD2C520, 0x304F8000, -/**/ 0x3D230852, 0x8C342F39, -/**/ 0x3FE7D800, 0x00000000, -/**/ 0x3F23EF9A, 0xA4B45AEC, -/**/ 0x3FD2D10D, 0xEC508000, -/**/ 0x3D360C61, 0xF7088353, -/**/ 0x3FE7D800, 0x00000000, -/**/ 0xBF398DAF, 0x32748CC1, -/**/ 0x3FD2DCF9, 0x6F8FD000, -/**/ 0x3D20B4A2, 0x8E33C9CE, -/**/ 0x3FE7D000, 0x00000000, -/**/ 0x3F07D05F, 0x417D05F4, -/**/ 0x3FD2E8E2, 0xBAE12000, -/**/ 0xBD267B1E, 0x99B72BD8, -/**/ 0x3FE7C800, 0x00000000, -/**/ 0x3F3F8EF7, 0x431D3027, -/**/ 0x3FD2F4C9, 0xCF17A000, -/**/ 0x3D371F04, 0x9374B87B, -/**/ 0x3FE7C800, 0x00000000, -/**/ 0xBF0E77A3, 0xDAD83E6C, -/**/ 0x3FD300AE, 0xAD063000, -/**/ 0x3D342F56, 0x8B75FCAC, -/**/ 0x3FE7C000, 0x00000000, -/**/ 0x3F38E041, 0x588D1676, -/**/ 0x3FD30C91, 0x557F2000, -/**/ 0xBD142958, 0xA1451755, -/**/ 0x3FE7C000, 0x00000000, -/**/ 0xBF24C6DD, 0x1FE8414C, -/**/ 0x3FD31871, 0xC9544000, -/**/ 0x3D184FAB, 0x94CECFD9, -/**/ 0x3FE7B800, 0x00000000, -/**/ 0x3F3265F4, 0x81C2D3B2, -/**/ 0x3FD32450, 0x09570000, -/**/ 0x3D3D271B, 0x9BDAE59D, -/**/ 0x3FE7B800, 0x00000000, -/**/ 0xBF30C39C, 0xB6466407, -/**/ 0x3FD3302C, 0x16586000, -/**/ 0x3D36217D, 0xC2A3E08B, -/**/ 0x3FE7B000, 0x00000000, -/**/ 0x3F283FAD, 0x12B21224, -/**/ 0x3FD33C05, 0xF128E000, -/**/ 0xBD22B906, 0x380E1A7D, -/**/ 0x3FE7B000, 0x00000000, -/**/ 0xBF36EFB8, 0xF899E55D, -/**/ 0x3FD347DD, 0x9A988000, -/**/ 0xBD25594D, 0xD4C58092, -/**/ 0x3FE7A800, 0x00000000, -/**/ 0x3F1836B6, 0x3FF42B9F, -/**/ 0x3FD353B3, 0x1376E000, -/**/ 0xBD1331AF, 0xE6C26D9B, -/**/ 0x3FE7A800, 0x00000000, -/**/ 0xBF3CE7FD, 0x0B739FF4, -/**/ 0x3FD35F86, 0x5C933000, -/**/ 0xBD3B07DE, 0x4EA1A54A, -/**/ 0x3FE7A000, 0x00000000, -/**/ 0x3EC7A005, 0xE8017A00, -/**/ 0x3FD36B57, 0x76BC1000, -/**/ 0x3D116978, 0x5A9C223F, -/**/ 0x3FE79800, 0x00000000, -/**/ 0x3F3D535D, 0xB1CC5B7B, -/**/ 0x3FD37726, 0x62BFE000, -/**/ 0xBD3E9436, 0xAC53B023, -/**/ 0x3FE79800, 0x00000000, -/**/ 0xBF15EEAC, 0xE0DA37A9, -/**/ 0x3FD382F3, 0x216C5000, -/**/ 0xBD1061D2, 0x1D1A7F6D, -/**/ 0x3FE79000, 0x00000000, -/**/ 0x3F37C21E, 0x344E16D6, -/**/ 0x3FD38EBD, 0xB38ED000, -/**/ 0x3D290582, 0xE67D4CA0, -/**/ 0x3FE79000, 0x00000000, -/**/ 0xBF25E69A, 0x39C9E465, -/**/ 0x3FD39A86, 0x19F45000, -/**/ 0x3D18EE51, 0x937354F5, -/**/ 0x3FE78800, 0x00000000, -/**/ 0x3F32640B, 0xC52640BC, -/**/ 0x3FD3A64C, 0x55694000, -/**/ 0x3D37A71C, 0xBCD735D0, -/**/ 0x3FE78800, 0x00000000, -/**/ 0xBF3037DE, 0x2F6A09ED, -/**/ 0x3FD3B210, 0x66B9C000, -/**/ 0xBD33C1ED, 0x9811560E, -/**/ 0x3FE78000, 0x00000000, -/**/ 0x3F2A71DC, 0x01781A72, -/**/ 0x3FD3BDD2, 0x4EB15000, -/**/ 0xBD3257B4, 0x970E6ED9, -/**/ 0x3FE78000, 0x00000000, -/**/ 0xBF354996, 0xA9EEBFF4, -/**/ 0x3FD3C992, 0x0E1B2000, -/**/ 0x3D141C28, 0xAA680B76, -/**/ 0x3FE77800, 0x00000000, -/**/ 0x3F208119, 0xAC60D341, -/**/ 0x3FD3D54F, 0xA5C1F000, -/**/ 0x3D3C3E1C, 0xD9A395E3, -/**/ 0x3FE77800, 0x00000000, -/**/ 0xBF3A28AE, 0x742E2DD0, -/**/ 0x3FD3E10B, 0x16701000, -/**/ 0x3D3F3BCF, 0x145429C7, -/**/ 0x3FE77000, 0x00000000, -/**/ 0x3F0BD584, 0x36340177, -/**/ 0x3FD3ECC4, 0x60EF6000, -/**/ 0xBD060286, 0x27C1300F, -/**/ 0x3FE77000, 0x00000000, -/**/ 0xBF3ED55D, 0x240C7174, -/**/ 0x3FD3F87B, 0x86094000, -/**/ 0xBD35DFD7, 0x54589889, -/**/ 0x3FE76800, 0x00000000, -/**/ 0xBEF18DE5, 0xAB277F45, -/**/ 0x3FD40430, 0x8686A000, -/**/ 0x3D3F8EF4, 0x3049F7D3, -/**/ 0x3FE76000, 0x00000000, -/**/ 0x3F3CB026, 0x01D3C7B8, -/**/ 0x3FD40FE3, 0x63303000, -/**/ 0x3D3E5C5F, 0xE79F05C6, -/**/ 0x3FE76000, 0x00000000, -/**/ 0xBF15E95B, 0xA9D08664, -/**/ 0x3FD41B94, 0x1CCE1000, -/**/ 0xBD304690, 0x13E43FC9, -/**/ 0x3FE75800, 0x00000000, -/**/ 0x3F3867A4, 0x097CFD43, -/**/ 0x3FD42742, 0xB427E000, -/**/ 0xBD398727, 0x02B82675, -/**/ 0x3FE75800, 0x00000000, -/**/ 0xBF2353DF, 0xE8A9353E, -/**/ 0x3FD432EF, 0x2A04F000, -/**/ 0xBD3FB129, 0x931715AD, -/**/ 0x3FE75000, 0x00000000, -/**/ 0x3F3450E6, 0x4F13DC4A, -/**/ 0x3FD43E99, 0x7F2C1000, -/**/ 0x3D1C3F72, 0x40C41A04, -/**/ 0x3FE75000, 0x00000000, -/**/ 0xBF2B4FBF, 0xE8B1B4FC, -/**/ 0x3FD44A41, 0xB463C000, -/**/ 0x3D31EE28, 0xF37CF612, -/**/ 0x3FE74800, 0x00000000, -/**/ 0x3F306BB6, 0x7E458100, -/**/ 0x3FD455E7, 0xCA720000, -/**/ 0x3D1AD8C6, 0x36629AED, -/**/ 0x3FE74800, 0x00000000, -/**/ 0xBF31745D, 0x1745D174, -/**/ 0x3FD4618B, 0xC21C6000, -/**/ 0xBD13D82F, 0x484C84CC, -/**/ 0x3FE74000, 0x00000000, -/**/ 0x3F296FBD, 0x236DEC04, -/**/ 0x3FD46D2D, 0x9C280000, -/**/ 0x3D359B27, 0x5F67F75A, -/**/ 0x3FE74000, 0x00000000, -/**/ 0xBF350F9D, 0x3B304B87, -/**/ 0x3FD478CD, 0x5959B000, -/**/ 0x3D2EC89B, 0xF0C8D098, -/**/ 0x3FE73800, 0x00000000, -/**/ 0x3F226A51, 0xA4EBDC70, -/**/ 0x3FD4846A, 0xFA75C000, -/**/ 0xBD263EA2, 0xE3798DCE, -/**/ 0x3FE73800, 0x00000000, -/**/ 0xBF3879D5, 0xF00B9A78, -/**/ 0x3FD49006, 0x80401000, -/**/ 0xBD38BCCF, 0xFE1A0F8C, -/**/ 0x3FE73000, 0x00000000, -/**/ 0x3F178D7F, 0x5DAAD90C, -/**/ 0x3FD49B9F, 0xEB7C1000, -/**/ 0x3D3DAC1C, 0x58AB60D7, -/**/ 0x3FE73000, 0x00000000, -/**/ 0xBF3BB33C, 0x783709C7, -/**/ 0x3FD4A737, 0x3CED0000, -/**/ 0xBD39A234, 0xEBF35449, -/**/ 0x3FE72800, 0x00000000, -/**/ 0x3F061274, 0x265AD23A, -/**/ 0x3FD4B2CC, 0x75556000, -/**/ 0xBD380FCB, 0xC78BFA4B, -/**/ 0x3FE72800, 0x00000000, -/**/ 0xBF3EBC05, 0xC90A1FD2, -/**/ 0x3FD4BE5F, 0x95778000, -/**/ 0xBD3D7C92, 0xCD9AD824, -/**/ 0x3FE72000, 0x00000000, -/**/ 0xBEC71FFA, 0x38017200, -/**/ 0x3FD4C9F0, 0x9E153000, -/**/ 0xBD2E1DDE, 0x70E02DE0, -/**/ 0x3FE71800, 0x00000000, -/**/ 0x3F3E6B99, 0x74A050E1, -/**/ 0x3FD4D57F, 0x8FEFE000, -/**/ 0x3D23F926, 0x7FD06868, -/**/ 0x3FE71800, 0x00000000, -/**/ 0xBF077400, 0xB8BD1180, -/**/ 0x3FD4E10C, 0x6BC8A000, -/**/ 0x3CF8283F, 0x1636F061, -/**/ 0x3FE71000, 0x00000000, -/**/ 0x3F3BC36C, 0xE3E0453A, -/**/ 0x3FD4EC97, 0x32600000, -/**/ 0x3D234D7A, 0xAF04D104, -/**/ 0x3FE71000, 0x00000000, -/**/ 0xBF15FA98, 0x6935DDC5, -/**/ 0x3FD4F81F, 0xE4764000, -/**/ 0xBD27FCF6, 0x434FF08D, -/**/ 0x3FE70800, 0x00000000, -/**/ 0x3F394B40, 0x7337CF08, -/**/ 0x3FD503A6, 0x82CB2000, -/**/ 0xBD2A68C8, 0xF16F9B5D, -/**/ 0x3FE70800, 0x00000000, -/**/ 0xBF1F7B97, 0xA835403A, -/**/ 0x3FD50F2B, 0x0E1E0000, -/**/ 0x3D3A0940, 0x8C47B8D8, -/**/ 0x3FE70000, 0x00000000, -/**/ 0x3F3702E0, 0x5C0B8170, -/**/ 0x3FD51AAD, 0x872E0000, -/**/ 0xBD3F4BD8, 0xDB0A7CC1, -/**/ 0x3FE70000, 0x00000000, -/**/ 0xBF241EE6, 0x4F67A855, -/**/ 0x3FD5262D, 0xEEB99000, -/**/ 0xBD3E1B9F, 0x70894A01, -/**/ 0x3FE6F800, 0x00000000, -/**/ 0x3F34EA19, 0x221C0170, -/**/ 0x3FD531AC, 0x457EE000, -/**/ 0x3D3DF83B, 0x7D931501, -/**/ 0x3FE6F800, 0x00000000, -/**/ 0xBF282102, 0x5508CA5C, -/**/ 0x3FD53D28, 0x8C3BE000, -/**/ 0xBD111397, 0xEB6DFAC5, -/**/ 0x3FE6F000, 0x00000000, -/**/ 0x3F3300B7, 0x9300B793, -/**/ 0x3FD548A2, 0xC3ADD000, -/**/ 0x3D23167E, 0x63081CF7, -/**/ 0x3FE6F000, 0x00000000, -/**/ 0xBF2BC486, 0x005BB90F, -/**/ 0x3FD5541A, 0xEC91C000, -/**/ 0xBCF816AA, 0xDC72EEBA, -/**/ 0x3FE6E800, 0x00000000, -/**/ 0x3F314688, 0xC5A3A00B, -/**/ 0x3FD55F91, 0x07A44000, -/**/ 0xBD11E647, 0x78DF4A62, -/**/ 0x3FE6E800, 0x00000000, -/**/ 0xBF2F09D6, 0xDA9C5AE1, -/**/ 0x3FD56B05, 0x15A18000, -/**/ 0x3D29247B, 0xBC4A23FC, -/**/ 0x3FE6E000, 0x00000000, -/**/ 0x3F2F76B4, 0x337C6CB1, -/**/ 0x3FD57677, 0x17456000, -/**/ 0xBD364EAD, 0x9524D7CA, -/**/ 0x3FE6E000, 0x00000000, -/**/ 0xBF30F8AC, 0xEDF4EC87, -/**/ 0x3FD581E7, 0x0D4B3000, -/**/ 0xBD1F31E1, 0xB12D8F1D, -/**/ 0x3FE6D800, 0x00000000, -/**/ 0x3F2CBDF2, 0x6EAEF381, -/**/ 0x3FD58D54, 0xF86E0000, -/**/ 0x3D2791F3, 0x0A795215, -/**/ 0x3FE6D800, 0x00000000, -/**/ 0xBF323DB9, 0xB624BFF5, -/**/ 0x3FD598C0, 0xD9688000, -/**/ 0xBD385F49, 0x70D96DA4, -/**/ 0x3FE6D000, 0x00000000, -/**/ 0x3F2A6268, 0x1C860FB0, -/**/ 0x3FD5A42A, 0xB0F4D000, -/**/ 0xBCDE63AF, 0x2DF7BA69, -/**/ 0x3FE6D000, 0x00000000, -/**/ 0xBF335443, 0xB253BAE1, -/**/ 0x3FD5AF92, 0x7FCCE000, -/**/ 0xBD1C032F, 0xF5FFC77A, -/**/ 0x3FE6C800, 0x00000000, -/**/ 0x3F2863B1, 0xAB4294D4, -/**/ 0x3FD5BAF8, 0x46AA2000, -/**/ 0xBD339AE8, 0xF873FA41, -/**/ 0x3FE6C800, 0x00000000, -/**/ 0xBF343C7C, 0x87EAA6DF, -/**/ 0x3FD5C65C, 0x0645A000, -/**/ 0xBD39FE06, 0x0180EE65, -/**/ 0x3FE6C000, 0x00000000, -/**/ 0x3F26C16C, 0x16C16C17, -/**/ 0x3FD5D1BD, 0xBF581000, -/**/ 0xBD38D6BD, 0xC9C7C238, -/**/ 0x3FE6C000, 0x00000000, -/**/ 0xBF34F695, 0x95C33E00, -/**/ 0x3FD5DD1D, 0x7299C000, -/**/ 0xBD38AF61, 0x8815CE17, -/**/ 0x3FE6B800, 0x00000000, -/**/ 0x3F257B34, 0xE7802D73, -/**/ 0x3FD5E87B, 0x20C29000, -/**/ 0x3D3527D1, 0x8F7738FA, -/**/ 0x3FE6B800, 0x00000000, -/**/ 0xBF3582BF, 0xF4A5582C, -/**/ 0x3FD5F3D6, 0xCA8A2000, -/**/ 0x3D37AF84, 0x8E19CC75, -/**/ 0x3FE6B000, 0x00000000, -/**/ 0x3F2490AA, 0x31A3CFC7, -/**/ 0x3FD5FF30, 0x70A79000, -/**/ 0x3D2E9E43, 0x9F105039, -/**/ 0x3FE6B000, 0x00000000, -/**/ 0xBF35E12C, 0x77C30E5A, -/**/ 0x3FD60A88, 0x13D1A000, -/**/ 0x3D36E9B9, 0xC879AF55, -/**/ 0x3FE6A800, 0x00000000, -/**/ 0x3F24016A, 0x94016A94, -/**/ 0x3FD615DD, 0xB4BEC000, -/**/ 0x3D13C7CA, 0x90BC04B2, -/**/ 0x3FE6A800, 0x00000000, -/**/ 0xBF36120B, 0xAD33D63F, -/**/ 0x3FD62131, 0x5424F000, -/**/ 0xBD3382FC, 0x4AA68669, -/**/ 0x3FE6A000, 0x00000000, -/**/ 0x3F23CD15, 0x3729043E, -/**/ 0x3FD62C82, 0xF2B9C000, -/**/ 0x3D3E54BD, 0xBD7C8A98 } }; - -static const union {int4 i[4350]; double x[2175]; } vj = { .i = { -/**/ 0x3F46A400, 0x7D161C28, -/**/ 0xBF46A200, 0x20600000, -/**/ 0x3D27DC4E, 0xAA7623D9, -/**/ 0x3F4693FA, 0xD596E639, -/**/ 0xBF4691FD, 0x4CE00000, -/**/ 0x3D26B0CF, 0x29C3F0AD, -/**/ 0x3F4683F5, 0x3219CE89, -/**/ 0xBF4681FA, 0x7B600000, -/**/ 0x3D22B290, 0x95B9FDCC, -/**/ 0x3F4673EF, 0x929ED397, -/**/ 0xBF4671F7, 0xABE00000, -/**/ 0x3D17C727, 0xFA2F2D87, -/**/ 0x3F4663E9, 0xF725F3E2, -/**/ 0xBF4661F4, 0xDE600000, -/**/ 0x3CF22ED3, 0x6EDBFF1C, -/**/ 0x3F4653E4, 0x5FAF2DE9, -/**/ 0xBF4651F2, 0x12E00000, -/**/ 0xBD144936, 0x157812BB, -/**/ 0x3F4643DE, 0xCC3A802B, -/**/ 0xBF4641EF, 0x49600000, -/**/ 0xBD2959CB, 0x60314E05, -/**/ 0x3F4633D9, 0x3CC7E927, -/**/ 0xBF4631EC, 0x81E00000, -/**/ 0xBD35ABDA, 0xC3638E99, -/**/ 0x3F4623D3, 0xB157675C, -/**/ 0xBF4621E9, 0xBC800000, -/**/ 0x3D3FF1D3, 0xC63F9A21, -/**/ 0x3F4613CE, 0x29E8F948, -/**/ 0xBF4611E6, 0xF9000000, -/**/ 0x3D342D26, 0x71EEE611, -/**/ 0x3F4603C8, 0xA67C9D6B, -/**/ 0xBF4601E4, 0x37800000, -/**/ 0x3D1C1C77, 0x11A09689, -/**/ 0x3F45F3C3, 0x27125244, -/**/ 0xBF45F1E1, 0x78000000, -/**/ 0xBD1DFD16, 0xF7DC643C, -/**/ 0x3F45E3BD, 0xABAA1651, -/**/ 0xBF45E1DE, 0xBA800000, -/**/ 0xBD376503, 0x91318A02, -/**/ 0x3F45D3B8, 0x3443E812, -/**/ 0xBF45D1DB, 0xFF200000, -/**/ 0x3D3756E4, 0xCE55DCDD, -/**/ 0x3F45C3B2, 0xC0DFC606, -/**/ 0xBF45C1D9, 0x45A00000, -/**/ 0x3D12D5CF, 0x8F6F8FA0, -/**/ 0x3F45B3AD, 0x517DAEAB, -/**/ 0xBF45B1D6, 0x8E200000, -/**/ 0xBD2E90AB, 0x9B85DC2C, -/**/ 0x3F45A3A7, 0xE61DA081, -/**/ 0xBF45A1D3, 0xD8C00000, -/**/ 0x3D3B5E88, 0x3BF5AC54, -/**/ 0x3F4593A2, 0x7EBF9A07, -/**/ 0xBF4591D1, 0x25400000, -/**/ 0x3D12AC3A, 0x0C86DDB1, -/**/ 0x3F45839D, 0x1B6399BB, -/**/ 0xBF4581CE, 0x73C00000, -/**/ 0xBD3361C2, 0x76830985, -/**/ 0x3F457397, 0xBC099E1C, -/**/ 0xBF4571CB, 0xC4600000, -/**/ 0x3D333915, 0xD062EBFF, -/**/ 0x3F456392, 0x60B1A5AA, -/**/ 0xBF4561C9, 0x16E00000, -/**/ 0xBD1E0DA0, 0x9CC4988F, -/**/ 0x3F45538D, 0x095BAEE4, -/**/ 0xBF4551C6, 0x6B800000, -/**/ 0x3D3C69C4, 0x235BC18A, -/**/ 0x3F454387, 0xB607B848, -/**/ 0xBF4541C3, 0xC2000000, -/**/ 0xBCEFCC99, 0xF7737723, -/**/ 0x3F453382, 0x66B5C056, -/**/ 0xBF4531C1, 0x1A800000, -/**/ 0xBD3FBAE2, 0x809CBCBB, -/**/ 0x3F45237D, 0x1B65C58C, -/**/ 0xBF4521BE, 0x75200000, -/**/ 0x3CCAA5C8, 0x194FEE63, -/**/ 0x3F451377, 0xD417C66A, -/**/ 0xBF4511BB, 0xD1C00000, -/**/ 0x3D3ED325, 0xE1CC7BBC, -/**/ 0x3F450372, 0x90CBC16E, -/**/ 0xBF4501B9, 0x30400000, -/**/ 0xBD0F0298, 0x68AB3742, -/**/ 0x3F44F36D, 0x5181B517, -/**/ 0xBF44F1B6, 0x90E00000, -/**/ 0x3D381BE1, 0x41E67AD9, -/**/ 0x3F44E368, 0x16399FE6, -/**/ 0xBF44E1B3, 0xF3600000, -/**/ 0xBD2A6E79, 0x668D3662, -/**/ 0x3F44D362, 0xDEF38058, -/**/ 0xBF44D1B1, 0x58000000, -/**/ 0x3D284EA7, 0x21F8B7C2, -/**/ 0x3F44C35D, 0xABAF54EC, -/**/ 0xBF44C1AE, 0xBE800000, -/**/ 0xBD3BC76D, 0x7417D9C5, -/**/ 0x3F44B358, 0x7C6D1C22, -/**/ 0xBF44B1AC, 0x27200000, -/**/ 0xBD1409FD, 0x16AAD1FC, -/**/ 0x3F44A353, 0x512CD479, -/**/ 0xBF44A1A9, 0x91C00000, -/**/ 0x3D30771E, 0x98BC14FD, -/**/ 0x3F44934E, 0x29EE7C70, -/**/ 0xBF4491A6, 0xFE400000, -/**/ 0xBD3B5993, 0x5CCB7232, -/**/ 0x3F448349, 0x06B21285, -/**/ 0xBF4481A4, 0x6CE00000, -/**/ 0xBD20E729, 0x5512F9C2, -/**/ 0x3F447343, 0xE7779538, -/**/ 0xBF4471A1, 0xDD800000, -/**/ 0x3D225436, 0x55B30899, -/**/ 0x3F44633E, 0xCC3F0308, -/**/ 0xBF44619F, 0x50200000, -/**/ 0x3D39807C, 0x9E54E31F, -/**/ 0x3F445339, 0xB5085A73, -/**/ 0xBF44519C, 0xC4A00000, -/**/ 0xBD376F6F, 0xD5804C0E, -/**/ 0x3F444334, 0xA1D399FA, -/**/ 0xBF44419A, 0x3B400000, -/**/ 0xBD234953, 0x6CDE6425, -/**/ 0x3F44332F, 0x92A0C01A, -/**/ 0xBF443197, 0xB3E00000, -/**/ 0x3D070E7B, 0xAAF6596F, -/**/ 0x3F44232A, 0x876FCB54, -/**/ 0xBF442195, 0x2E800000, -/**/ 0x3D2C49F8, 0x4EC011F1, -/**/ 0x3F441325, 0x8040BA25, -/**/ 0xBF441192, 0xAB200000, -/**/ 0x3D3825DC, 0xD8AAA7EB, -/**/ 0x3F440320, 0x7D138B0E, -/**/ 0xBF440190, 0x29A00000, -/**/ 0xBD3F1A8D, 0xFE0B73D6, -/**/ 0x3F43F31B, 0x7DE83C8C, -/**/ 0xBF43F18D, 0xAA400000, -/**/ 0xBD379B43, 0xE46CA26B, -/**/ 0x3F43E316, 0x82BECD20, -/**/ 0xBF43E18B, 0x2CE00000, -/**/ 0xBD315B44, 0x6283780D, -/**/ 0x3F43D311, 0x8B973B49, -/**/ 0xBF43D188, 0xB1800000, -/**/ 0xBD28B31E, 0x017589BE, -/**/ 0x3F43C30C, 0x98718584, -/**/ 0xBF43C186, 0x38200000, -/**/ 0xBD212A46, 0x8FBB296E, -/**/ 0x3F43B307, 0xA94DAA52, -/**/ 0xBF43B183, 0xC0C00000, -/**/ 0xBD183403, 0x045CBBD2, -/**/ 0x3F43A302, 0xBE2BA832, -/**/ 0xBF43A181, 0x4B600000, -/**/ 0xBD13009B, 0xD7CC5936, -/**/ 0x3F4392FD, 0xD70B7DA2, -/**/ 0xBF43917E, 0xD8000000, -/**/ 0xBD12B655, 0xC1742279, -/**/ 0x3F4382F8, 0xF3ED2921, -/**/ 0xBF43817C, 0x66A00000, -/**/ 0xBD17512E, 0xEA83FAE8, -/**/ 0x3F4372F4, 0x14D0A930, -/**/ 0xBF437179, 0xF7400000, -/**/ 0xBD206692, 0xBED65875, -/**/ 0x3F4362EF, 0x39B5FC4C, -/**/ 0xBF436177, 0x89E00000, -/**/ 0xBD27931B, 0xD38FFE9E, -/**/ 0x3F4352EA, 0x629D20F5, -/**/ 0xBF435175, 0x1E800000, -/**/ 0xBD309618, 0xE524208F, -/**/ 0x3F4342E5, 0x8F8615AA, -/**/ 0xBF434172, 0xB5200000, -/**/ 0xBD3697E9, 0xDD4C72C5, -/**/ 0x3F4332E0, 0xC070D8EB, -/**/ 0xBF433170, 0x4DC00000, -/**/ 0xBD3DCE00, 0x5E6E12C3, -/**/ 0x3F4322DB, 0xF55D6935, -/**/ 0xBF43216D, 0xE8800000, -/**/ 0x3D39C8A4, 0x0AE9A8CE, -/**/ 0x3F4312D7, 0x2E4BC509, -/**/ 0xBF43116B, 0x85200000, -/**/ 0x3D302D03, 0xD1CD2FA1, -/**/ 0x3F4302D2, 0x6B3BEAE5, -/**/ 0xBF430169, 0x23C00000, -/**/ 0x3D15807D, 0xA3BADFD1, -/**/ 0x3F42F2CD, 0xAC2DD949, -/**/ 0xBF42F166, 0xC4600000, -/**/ 0xBD1A7422, 0xF57F0504, -/**/ 0x3F42E2C8, 0xF1218EB3, -/**/ 0xBF42E164, 0x67000000, -/**/ 0xBD33C974, 0x2F2C781C, -/**/ 0x3F42D2C4, 0x3A1709A3, -/**/ 0xBF42D162, 0x0BC00000, -/**/ 0x3D3DDBDD, 0x851A1E61, -/**/ 0x3F42C2BF, 0x870E4898, -/**/ 0xBF42C15F, 0xB2600000, -/**/ 0x3D2CA7D9, 0xA14AA8FD, -/**/ 0x3F42B2BA, 0xD8074A10, -/**/ 0xBF42B15D, 0x5B000000, -/**/ 0xBD03022E, 0xDDCDDFF5, -/**/ 0x3F42A2B6, 0x2D020C8C, -/**/ 0xBF42A15B, 0x05A00000, -/**/ 0xBD343FBA, 0x0F9231A8, -/**/ 0x3F4292B1, 0x85FE8E8A, -/**/ 0xBF429158, 0xB2600000, -/**/ 0x3D38B690, 0xA52C9CCF, -/**/ 0x3F4282AC, 0xE2FCCE8A, -/**/ 0xBF428156, 0x61000000, -/**/ 0x3D120E6A, 0xC8CC82EB, -/**/ 0x3F4272A8, 0x43FCCB0A, -/**/ 0xBF427154, 0x11A00000, -/**/ 0xBD30D79B, 0x792E6C51, -/**/ 0x3F4262A3, 0xA8FE8289, -/**/ 0xBF426151, 0xC4600000, -/**/ 0x3D38A5EE, 0x91F7F7AA, -/**/ 0x3F42529F, 0x1201F387, -/**/ 0xBF42514F, 0x79000000, -/**/ 0x3CEFA728, 0x46C2E8BA, -/**/ 0x3F42429A, 0x7F071C84, -/**/ 0xBF42414D, 0x2FA00000, -/**/ 0xBD37D0BA, 0xFA447A17, -/**/ 0x3F423295, 0xF00DFBFD, -/**/ 0xBF42314A, 0xE8600000, -/**/ 0x3D2C7A24, 0x94AF3FED, -/**/ 0x3F422291, 0x65169072, -/**/ 0xBF422148, 0xA3000000, -/**/ 0xBD29B0BD, 0x050CEA04, -/**/ 0x3F42128C, 0xDE20D863, -/**/ 0xBF421146, 0x5FC00000, -/**/ 0x3D36EFF3, 0x0C3035EB, -/**/ 0x3F420288, 0x5B2CD24E, -/**/ 0xBF420144, 0x1E600000, -/**/ 0xBD19A3E2, 0x73569B27, -/**/ 0x3F41F283, 0xDC3A7CB2, -/**/ 0xBF41F141, 0xDF200000, -/**/ 0x3D3B1DDE, 0xEEB67715, -/**/ 0x3F41E27F, 0x6149D610, -/**/ 0xBF41E13F, 0xA1C00000, -/**/ 0xBD11EA17, 0x94F49154, -/**/ 0x3F41D27A, 0xEA5ADCE5, -/**/ 0xBF41D13D, 0x66800000, -/**/ 0x3D3ACED9, 0x52DD9D37, -/**/ 0x3F41C276, 0x776D8FB1, -/**/ 0xBF41C13B, 0x2D200000, -/**/ 0xBD1C140B, 0xF72D8EEB, -/**/ 0x3F41B272, 0x0881ECF4, -/**/ 0xBF41B138, 0xF5E00000, -/**/ 0x3D360AE5, 0x939583E1, -/**/ 0x3F41A26D, 0x9D97F32C, -/**/ 0xBF41A136, 0xC0800000, -/**/ 0xBD2C00D9, 0x1D246C7C, -/**/ 0x3F419269, 0x36AFA0D9, -/**/ 0xBF419134, 0x8D400000, -/**/ 0x3D29B40E, 0x0B955CFB, -/**/ 0x3F418264, 0xD3C8F479, -/**/ 0xBF418132, 0x5BE00000, -/**/ 0xBD3964BF, 0x45A6C249, -/**/ 0x3F417260, 0x74E3EC8D, -/**/ 0xBF417130, 0x2CA00000, -/**/ 0xBCE777E0, 0xF3363612, -/**/ 0x3F41625C, 0x1A008792, -/**/ 0xBF41612D, 0xFF600000, -/**/ 0x3D36D608, 0x28DE8296, -/**/ 0x3F415257, 0xC31EC409, -/**/ 0xBF41512B, 0xD4000000, -/**/ 0xBD32AE69, 0x4BB1B788, -/**/ 0x3F414253, 0x703EA071, -/**/ 0xBF414129, 0xAAC00000, -/**/ 0x3D05BF68, 0x170ECD8C, -/**/ 0x3F41324F, 0x21601B48, -/**/ 0xBF413127, 0x83800000, -/**/ 0x3D370A0B, 0x7C653BFC, -/**/ 0x3F41224A, 0xD683330E, -/**/ 0xBF412125, 0x5E200000, -/**/ 0xBD35B70D, 0x77BBBEBF, -/**/ 0x3F411246, 0x8FA7E642, -/**/ 0xBF411123, 0x3AE00000, -/**/ 0xBD0C52EB, 0x93ABC1CD, -/**/ 0x3F410242, 0x4CCE3363, -/**/ 0xBF410121, 0x19A00000, -/**/ 0x3D2B2237, 0xE5C6F4C7, -/**/ 0x3F40F23E, 0x0DF618F1, -/**/ 0xBF40F11E, 0xFA600000, -/**/ 0x3D3D9C5F, 0x1E9A50AD, -/**/ 0x3F40E239, 0xD31F956A, -/**/ 0xBF40E11C, 0xDD000000, -/**/ 0xBD336793, 0x8965F0DA, -/**/ 0x3F40D235, 0x9C4AA74E, -/**/ 0xBF40D11A, 0xC1C00000, -/**/ 0xBD15E6EE, 0x7E49E231, -/**/ 0x3F40C231, 0x69774D1D, -/**/ 0xBF40C118, 0xA8800000, -/**/ 0x3D1D9B9D, 0x04FD621C, -/**/ 0x3F40B22D, 0x3AA58554, -/**/ 0xBF40B116, 0x91400000, -/**/ 0x3D333B55, 0x7DD9EED3, -/**/ 0x3F40A229, 0x0FD54E74, -/**/ 0xBF40A114, 0x7C000000, -/**/ 0x3D3E048F, 0x7AA78478, -/**/ 0x3F409224, 0xE906A6FC, -/**/ 0xBF409112, 0x68A00000, -/**/ 0xBD383C6A, 0x644DDE88, -/**/ 0x3F408220, 0xC6398D6B, -/**/ 0xBF408110, 0x57600000, -/**/ 0xBD2F0D2F, 0x76B8C83A, -/**/ 0x3F40721C, 0xA76E0040, -/**/ 0xBF40710E, 0x48200000, -/**/ 0xBD1F63E0, 0x9CE99FD3, -/**/ 0x3F406218, 0x8CA3FDFB, -/**/ 0xBF40610C, 0x3AE00000, -/**/ 0xBCF328B4, 0x4FE774F2, -/**/ 0x3F405214, 0x75DB851A, -/**/ 0xBF40510A, 0x2FA00000, -/**/ 0x3D11B6BD, 0x3782BCD4, -/**/ 0x3F404210, 0x6314941D, -/**/ 0xBF404108, 0x26600000, -/**/ 0x3D22116F, 0xE7183792, -/**/ 0x3F40320C, 0x544F2983, -/**/ 0xBF403106, 0x1F200000, -/**/ 0x3D293F1E, 0x1B995B3D, -/**/ 0x3F402208, 0x498B43CB, -/**/ 0xBF402104, 0x19E00000, -/**/ 0x3D2E6669, 0xFC162630, -/**/ 0x3F401204, 0x42C8E175, -/**/ 0xBF401102, 0x16A00000, -/**/ 0x3D30C4AA, 0x254FC9F8, -/**/ 0x3F400200, 0x40080100, -/**/ 0xBF400100, 0x15600000, -/**/ 0x3D3154EE, 0xE4431F92, -/**/ 0x3F3FE3F8, 0x829141D6, -/**/ 0xBF3FE1FC, 0x2C400000, -/**/ 0x3D30E503, 0x9B2D30FB, -/**/ 0x3F3FC3F0, 0x8D157F6B, -/**/ 0xBF3FC1F8, 0x31C00000, -/**/ 0x3D2EEBD1, 0x53EBD670, -/**/ 0x3F3FA3E8, 0x9F9CB7BC, -/**/ 0xBF3FA1F4, 0x3B400000, -/**/ 0x3D2A113C, 0xE04A16E0, -/**/ 0x3F3F83E0, 0xBA26E7CA, -/**/ 0xBF3F81F0, 0x48C00000, -/**/ 0x3D233C4A, 0x99C43E34, -/**/ 0x3F3F63D8, 0xDCB40C91, -/**/ 0xBF3F61EC, 0x5A400000, -/**/ 0x3D14DDF6, 0x7BD210C1, -/**/ 0x3F3F43D1, 0x07442311, -/**/ 0xBF3F41E8, 0x6FC00000, -/**/ 0xBCC52C1D, 0x9E4B51C8, -/**/ 0x3F3F23C9, 0x39D72849, -/**/ 0xBF3F21E4, 0x89400000, -/**/ 0xBD1A196F, 0x8EA8C754, -/**/ 0x3F3F03C1, 0x746D1936, -/**/ 0xBF3F01E0, 0xA6C00000, -/**/ 0xBD2BB719, 0xF95AF98D, -/**/ 0x3F3EE3B9, 0xB705F2D8, -/**/ 0xBF3EE1DC, 0xC8400000, -/**/ 0xBD3628EB, 0x28FFD598, -/**/ 0x3F3EC3B2, 0x01A1B22C, -/**/ 0xBF3EC1D8, 0xEDC00000, -/**/ 0xBD3F6D76, 0x0BBAC8F8, -/**/ 0x3F3EA3AA, 0x54405432, -/**/ 0xBF3EA1D5, 0x17800000, -/**/ 0x3D3657D2, 0xB7A7EE0D, -/**/ 0x3F3E83A2, 0xAEE1D5E8, -/**/ 0xBF3E81D1, 0x45000000, -/**/ 0x3D264FDE, 0xFA9CCC78, -/**/ 0x3F3E639B, 0x1186344C, -/**/ 0xBF3E61CD, 0x76800000, -/**/ 0xBCEF83EB, 0xE02EF455, -/**/ 0x3F3E4393, 0x7C2D6C5E, -/**/ 0xBF3E41C9, 0xAC000000, -/**/ 0xBD2C26B3, 0x03C3E129, -/**/ 0x3F3E238B, 0xEED77B1B, -/**/ 0xBF3E21C5, 0xE5800000, -/**/ 0xBD3C1CBE, 0x904D773D, -/**/ 0x3F3E0384, 0x69845D83, -/**/ 0xBF3E01C2, 0x23400000, -/**/ 0x3D34E8B1, 0xD0615454, -/**/ 0x3F3DE37C, 0xEC341093, -/**/ 0xBF3DE1BE, 0x64C00000, -/**/ 0x3D13F7DF, 0xE9BE933E, -/**/ 0x3F3DC375, 0x76E6914B, -/**/ 0xBF3DC1BA, 0xAA400000, -/**/ 0xBD27B7D7, 0x707B004A, -/**/ 0x3F3DA36E, 0x099BDCA9, -/**/ 0xBF3DA1B6, 0xF3C00000, -/**/ 0xBD3DA3F8, 0xEE2141C3, -/**/ 0x3F3D8366, 0xA453EFAC, -/**/ 0xBF3D81B3, 0x41800000, -/**/ 0x3D2F4DA1, 0x63D21825, -/**/ 0x3F3D635F, 0x470EC752, -/**/ 0xBF3D61AF, 0x93000000, -/**/ 0xBD0FD473, 0xFAD0B844, -/**/ 0x3F3D4357, 0xF1CC609A, -/**/ 0xBF3D41AB, 0xE8800000, -/**/ 0xBD388716, 0x298657C2, -/**/ 0x3F3D2350, 0xA48CB882, -/**/ 0xBF3D21A8, 0x42400000, -/**/ 0x3D32023A, 0x0B68711A, -/**/ 0x3F3D0349, 0x5F4FCC0A, -/**/ 0xBF3D01A4, 0x9FC00000, -/**/ 0xBD117676, 0x23A704B0, -/**/ 0x3F3CE342, 0x22159830, -/**/ 0xBF3CE1A1, 0x01400000, -/**/ 0xBD3BA59C, 0x8F391F09, -/**/ 0x3F3CC33A, 0xECDE19F1, -/**/ 0xBF3CC19D, 0x67000000, -/**/ 0x3D28567A, 0x9EBBF706, -/**/ 0x3F3CA333, 0xBFA94E4E, -/**/ 0xBF3CA199, 0xD0800000, -/**/ 0xBD29D41F, 0x2D41F1CC, -/**/ 0x3F3C832C, 0x9A773245, -/**/ 0xBF3C8196, 0x3E400000, -/**/ 0x3D391B7D, 0x14ED5134, -/**/ 0x3F3C6325, 0x7D47C2D4, -/**/ 0xBF3C6192, 0xAFC00000, -/**/ 0xBCFC31C5, 0x83403B5B, -/**/ 0x3F3C431E, 0x681AFCFA, -/**/ 0xBF3C418F, 0x25400000, -/**/ 0xBD3D84DB, 0x88A1FFF3, -/**/ 0x3F3C2317, 0x5AF0DDB6, -/**/ 0xBF3C218B, 0x9F000000, -/**/ 0x3D175CFF, 0x6298A63B, -/**/ 0x3F3C0310, 0x55C96207, -/**/ 0xBF3C0188, 0x1C800000, -/**/ 0xBD37ADC9, 0xDFB8E489, -/**/ 0x3F3BE309, 0x58A486EA, -/**/ 0xBF3BE184, 0x9E400000, -/**/ 0x3D23DA0F, 0x45069C64, -/**/ 0x3F3BC302, 0x6382495F, -/**/ 0xBF3BC181, 0x23C00000, -/**/ 0xBD35574B, 0x4CC2EFE0, -/**/ 0x3F3BA2FB, 0x7662A665, -/**/ 0xBF3BA17D, 0xAD800000, -/**/ 0x3D250C7B, 0x4BED0B89, -/**/ 0x3F3B82F4, 0x91459AFA, -/**/ 0xBF3B817A, 0x3B000000, -/**/ 0xBD36795D, 0x322E5605, -/**/ 0x3F3B62ED, 0xB42B241D, -/**/ 0xBF3B6176, 0xCCC00000, -/**/ 0x3D1EAB91, 0xF6413886, -/**/ 0x3F3B42E6, 0xDF133ECC, -/**/ 0xBF3B4173, 0x62400000, -/**/ 0xBD3B0BFC, 0xF86BE5B5, -/**/ 0x3F3B22E0, 0x11FDE807, -/**/ 0xBF3B216F, 0xFC000000, -/**/ 0x3CF62FEB, 0xDDE8D701, -/**/ 0x3F3B02D9, 0x4CEB1CCC, -/**/ 0xBF3B016C, 0x99C00000, -/**/ 0x3D3CF8D7, 0xF210FD9E, -/**/ 0x3F3AE2D2, 0x8FDADA1A, -/**/ 0xBF3AE169, 0x3B400000, -/**/ 0xBD2092E2, 0x1526CFB0, -/**/ 0x3F3AC2CB, 0xDACD1CEF, -/**/ 0xBF3AC165, 0xE1000000, -/**/ 0x3D319D24, 0x18D261D5, -/**/ 0x3F3AA2C5, 0x2DC1E24A, -/**/ 0xBF3AA162, 0x8A800000, -/**/ 0xBD355268, 0x533CC8EC, -/**/ 0x3F3A82BE, 0x88B9272B, -/**/ 0xBF3A815F, 0x38400000, -/**/ 0x3D074750, 0x0AFE6139, -/**/ 0x3F3A62B7, 0xEBB2E88F, -/**/ 0xBF3A615B, 0xEA000000, -/**/ 0x3D3A501B, 0x6668AD57, -/**/ 0x3F3A42B1, 0x56AF2375, -/**/ 0xBF3A4158, 0x9F800000, -/**/ 0xBD2E37A7, 0xA98381BD, -/**/ 0x3F3A22AA, 0xC9ADD4DD, -/**/ 0xBF3A2155, 0x59400000, -/**/ 0x3D1A9872, 0x7B82F9AC, -/**/ 0x3F3A02A4, 0x44AEF9C5, -/**/ 0xBF3A0152, 0x17000000, -/**/ 0x3D3B96ED, 0x0FF040AD, -/**/ 0x3F39E29D, 0xC7B28F2C, -/**/ 0xBF39E14E, 0xD8800000, -/**/ 0xBD304862, 0x33534BD7, -/**/ 0x3F39C297, 0x52B89211, -/**/ 0xBF39C14B, 0x9E400000, -/**/ 0x3D084979, 0x17AF009B, -/**/ 0x3F39A290, 0xE5C0FF72, -/**/ 0xBF39A148, 0x68000000, -/**/ 0x3D358CA1, 0x604B64C9, -/**/ 0x3F39828A, 0x80CBD44E, -/**/ 0xBF398145, 0x35800000, -/**/ 0xBD38BD0B, 0x2E334404, -/**/ 0x3F396284, 0x23D90DA4, -/**/ 0xBF396142, 0x07400000, -/**/ 0xBD1F4B58, 0xEF1B1C68, -/**/ 0x3F39427D, 0xCEE8A873, -/**/ 0xBF39413E, 0xDD000000, -/**/ 0x3D209881, 0x07E010EC, -/**/ 0x3F392277, 0x81FAA1B9, -/**/ 0xBF39213B, 0xB6C00000, -/**/ 0x3D37A139, 0x5CF03181, -/**/ 0x3F390271, 0x3D0EF676, -/**/ 0xBF390138, 0x94400000, -/**/ 0xBD39D2EB, 0x65276B0B, -/**/ 0x3F38E26B, 0x0025A3A8, -/**/ 0xBF38E135, 0x76000000, -/**/ 0xBD281E5A, 0xEE3023F6, -/**/ 0x3F38C264, 0xCB3EA64F, -/**/ 0xBF38C132, 0x5BC00000, -/**/ 0x3CEDAE6E, 0x3F9A4B53, -/**/ 0x3F38A25E, 0x9E59FB68, -/**/ 0xBF38A12F, 0x45800000, -/**/ 0x3D2A47EF, 0x412B648E, -/**/ 0x3F388258, 0x79779FF3, -/**/ 0xBF38812C, 0x33400000, -/**/ 0x3D38955F, 0x5ED0D8F2, -/**/ 0x3F386252, 0x5C9790EE, -/**/ 0xBF386129, 0x24C00000, -/**/ 0xBD3CBD55, 0x09939374, -/**/ 0x3F38424C, 0x47B9CB5A, -/**/ 0xBF384126, 0x1A800000, -/**/ 0xBD32D325, 0x4F399186, -/**/ 0x3F382246, 0x3ADE4C33, -/**/ 0xBF382123, 0x14400000, -/**/ 0xBD235622, 0x524688EB, -/**/ 0x3F380240, 0x3605107A, -/**/ 0xBF380120, 0x12000000, -/**/ 0xBCF44184, 0xEB2F3DDC, -/**/ 0x3F37E23A, 0x392E152C, -/**/ 0xBF37E11D, 0x13C00000, -/**/ 0x3D198B16, 0x2153D1B8, -/**/ 0x3F37C234, 0x4459574A, -/**/ 0xBF37C11A, 0x19800000, -/**/ 0x3D2A9511, 0x47A3C923, -/**/ 0x3F37A22E, 0x5786D3D1, -/**/ 0xBF37A117, 0x23400000, -/**/ 0x3D337431, 0x4B4128D9, -/**/ 0x3F378228, 0x72B687C1, -/**/ 0xBF378114, 0x31000000, -/**/ 0x3D38E0BF, 0xC5BFE9E8, -/**/ 0x3F376222, 0x95E87019, -/**/ 0xBF376111, 0x42C00000, -/**/ 0x3D3D9134, 0x5A0B2CE9, -/**/ 0x3F37421C, 0xC11C89D8, -/**/ 0xBF37410E, 0x58400000, -/**/ 0xBD3E7970, 0xB1802C40, -/**/ 0x3F372216, 0xF452D1FB, -/**/ 0xBF37210B, 0x72000000, -/**/ 0xBD3B3E2F, 0x16E562C9, -/**/ 0x3F370211, 0x2F8B4583, -/**/ 0xBF370108, 0x8FC00000, -/**/ 0xBD38BC06, 0x9087DACD, -/**/ 0x3F36E20B, 0x72C5E16F, -/**/ 0xBF36E105, 0xB1800000, -/**/ 0xBD36F1F6, 0xD92B1B21, -/**/ 0x3F36C205, 0xBE02A2BC, -/**/ 0xBF36C102, 0xD7400000, -/**/ 0xBD35DEFF, 0xABF2CD23, -/**/ 0x3F36A200, 0x1141866B, -/**/ 0xBF36A100, 0x01000000, -/**/ 0xBD358220, 0xC462BC85, -/**/ 0x3F3681FA, 0x6C828979, -/**/ 0xBF3680FD, 0x2EC00000, -/**/ 0xBD35DA59, 0xDE5ED723, -/**/ 0x3F3661F4, 0xCFC5A8E7, -/**/ 0xBF3660FA, 0x60800000, -/**/ 0xBD36E6AA, 0xB62B2CD1, -/**/ 0x3F3641EF, 0x3B0AE1B2, -/**/ 0xBF3640F7, 0x96400000, -/**/ 0xBD38A613, 0x086BEF29, -/**/ 0x3F3621E9, 0xAE5230DA, -/**/ 0xBF3620F4, 0xD0000000, -/**/ 0xBD3B1792, 0x9225715D, -/**/ 0x3F3601E4, 0x299B935F, -/**/ 0xBF3600F2, 0x0DC00000, -/**/ 0xBD3E3A29, 0x10BC2805, -/**/ 0x3F35E1DE, 0xACE7063E, -/**/ 0xBF35E0EF, 0x4FC00000, -/**/ 0x3D3DF329, 0xBE0B570D, -/**/ 0x3F35C1D9, 0x38348676, -/**/ 0xBF35C0EC, 0x95800000, -/**/ 0x3D397166, 0x1C0C5502, -/**/ 0x3F35A1D3, 0xCB841108, -/**/ 0xBF35A0E9, 0xDF400000, -/**/ 0x3D34418C, 0x4AC1FA2D, -/**/ 0x3F3581CE, 0x66D5A2F1, -/**/ 0xBF3580E7, 0x2D000000, -/**/ 0x3D2CC939, 0x168E9C6E, -/**/ 0x3F3561C9, 0x0A293931, -/**/ 0xBF3560E4, 0x7EC00000, -/**/ 0x3D1F6E5C, 0x795CE154, -/**/ 0x3F3541C3, 0xB57ED0C7, -/**/ 0xBF3540E1, 0xD4800000, -/**/ 0x3CE4EF88, 0x898FEE67, -/**/ 0x3F3521BE, 0x68D666B1, -/**/ 0xBF3520DF, 0x2E400000, -/**/ 0xBD1CDACF, 0x0B78D65E, -/**/ 0x3F3501B9, 0x242FF7EF, -/**/ 0xBF3500DC, 0x8C000000, -/**/ 0xBD2F7BF1, 0x6F1CBFB8, -/**/ 0x3F34E1B3, 0xE78B8180, -/**/ 0xBF34E0D9, 0xEDC00000, -/**/ 0xBD38ED52, 0x5A899820, -/**/ 0x3F34C1AE, 0xB2E90063, -/**/ 0xBF34C0D7, 0x53C00000, -/**/ 0x3D3D3C3F, 0x930A694E, -/**/ 0x3F34A1A9, 0x86487196, -/**/ 0xBF34A0D4, 0xBD800000, -/**/ 0x3D32BFBD, 0x4FA7CCCB, -/**/ 0x3F3481A4, 0x61A9D219, -/**/ 0xBF3480D2, 0x2B400000, -/**/ 0x3D1E789C, 0x65A26E32, -/**/ 0x3F34619F, 0x450D1EEB, -/**/ 0xBF3460CF, 0x9D000000, -/**/ 0xBD109E0B, 0x47E500B5, -/**/ 0x3F34419A, 0x3072550B, -/**/ 0xBF3440CD, 0x12C00000, -/**/ 0xBD309040, 0x3523FAE9, -/**/ 0x3F342195, 0x23D97178, -/**/ 0xBF3420CA, 0x8C800000, -/**/ 0xBD3D9B10, 0xD31DE7C2, -/**/ 0x3F340190, 0x1F427131, -/**/ 0xBF3400C8, 0x0A800000, -/**/ 0x3D34B90B, 0x90B287C4, -/**/ 0x3F33E18B, 0x22AD5135, -/**/ 0xBF33E0C5, 0x8C400000, -/**/ 0x3D19B454, 0xCA1B0FC2, -/**/ 0x3F33C186, 0x2E1A0E83, -/**/ 0xBF33C0C3, 0x12000000, -/**/ 0xBD20FBE7, 0x638FC1F4, -/**/ 0x3F33A181, 0x4188A61A, -/**/ 0xBF33A0C0, 0x9BC00000, -/**/ 0xBD38070E, 0xE0C03290, -/**/ 0x3F33817C, 0x5CF914F9, -/**/ 0xBF3380BE, 0x29C00000, -/**/ 0x3D37D2C3, 0xE0B6E5F5, -/**/ 0x3F336177, 0x806B5820, -/**/ 0xBF3360BB, 0xBB800000, -/**/ 0x3D1C4213, 0x35598794, -/**/ 0x3F334172, 0xABDF6C8D, -/**/ 0xBF3340B9, 0x51400000, -/**/ 0xBD249997, 0xC111C569, -/**/ 0x3F33216D, 0xDF554F40, -/**/ 0xBF3320B6, 0xEB000000, -/**/ 0xBD3C442D, 0xEEEE28E2, -/**/ 0x3F330169, 0x1ACCFD37, -/**/ 0xBF3300B4, 0x89000000, -/**/ 0x3D312B5E, 0xDBBF316D, -/**/ 0x3F32E164, 0x5E467372, -/**/ 0xBF32E0B2, 0x2AC00000, -/**/ 0xBCFFD254, 0x7484E6E1, -/**/ 0x3F32C15F, 0xA9C1AEF0, -/**/ 0xBF32C0AF, 0xD0800000, -/**/ 0xBD35BCBA, 0x1F2C3F9D, -/**/ 0x3F32A15A, 0xFD3EACAF, -/**/ 0xBF32A0AD, 0x7A800000, -/**/ 0x3D35EDA0, 0x8C8BAA61, -/**/ 0x3F328156, 0x58BD69B0, -/**/ 0xBF3280AB, 0x28400000, -/**/ 0x3CF02EAF, 0x3F79FE5E, -/**/ 0x3F326151, 0xBC3DE2F1, -/**/ 0xBF3260A8, 0xDA000000, -/**/ 0xBD347BDA, 0xB1304AA8, -/**/ 0x3F32414D, 0x27C01572, -/**/ 0xBF3240A6, 0x90000000, -/**/ 0x3D35724F, 0xD46BE359, -/**/ 0x3F322148, 0x9B43FE30, -/**/ 0xBF3220A4, 0x49C00000, -/**/ 0xBCF31954, 0x43BF90C9, -/**/ 0x3F320144, 0x16C99A2D, -/**/ 0xBF3200A2, 0x07800000, -/**/ 0xBD386689, 0xC4901E30, -/**/ 0x3F31E13F, 0x9A50E666, -/**/ 0xBF31E09F, 0xC9800000, -/**/ 0x3D2FA8E5, 0x134E34BF, -/**/ 0x3F31C13B, 0x25D9DFDB, -/**/ 0xBF31C09D, 0x8F400000, -/**/ 0xBD20FF40, 0x477D87DF, -/**/ 0x3F31A136, 0xB964838C, -/**/ 0xBF31A09B, 0x59400000, -/**/ 0x3D3E9E3E, 0x68B5B77B, -/**/ 0x3F318132, 0x54F0CE76, -/**/ 0xBF318099, 0x27000000, -/**/ 0x3D14BC39, 0x906F8A53, -/**/ 0x3F31612D, 0xF87EBD9A, -/**/ 0xBF316096, 0xF8C00000, -/**/ 0xBD34CC2F, 0xFCD50724, -/**/ 0x3F314129, 0xA40E4DF7, -/**/ 0xBF314094, 0xCEC00000, -/**/ 0x3D30AD83, 0x7A3A1B8D, -/**/ 0x3F312125, 0x579F7C8B, -/**/ 0xBF312092, 0xA8800000, -/**/ 0xBD24C5AE, 0x057F5C66, -/**/ 0x3F310121, 0x13324657, -/**/ 0xBF310090, 0x86800000, -/**/ 0x3D3A03C0, 0xBFD488E0, -/**/ 0x3F30E11C, 0xD6C6A858, -/**/ 0xBF30E08E, 0x68400000, -/**/ 0xBD00EDA8, 0x56935D63, -/**/ 0x3F30C118, 0xA25C9F8F, -/**/ 0xBF30C08C, 0x4E000000, -/**/ 0xBD3EC638, 0x2FDDD1CE, -/**/ 0x3F30A114, 0x75F428FB, -/**/ 0xBF30A08A, 0x38000000, -/**/ 0x3D102CDE, 0x0CA3DCBE, -/**/ 0x3F308110, 0x518D419B, -/**/ 0xBF308088, 0x25C00000, -/**/ 0xBD39A865, 0xBFA78921, -/**/ 0x3F30610C, 0x3527E66D, -/**/ 0xBF306086, 0x17C00000, -/**/ 0x3D203FE0, 0x72CE37BD, -/**/ 0x3F304108, 0x20C41472, -/**/ 0xBF304084, 0x0D800000, -/**/ 0xBD369AC6, 0x6054C3FA, -/**/ 0x3F302104, 0x1461C8A9, -/**/ 0xBF302082, 0x07800000, -/**/ 0x3D2450ED, 0x4836293A, -/**/ 0x3F300100, 0x10010010, -/**/ 0xBF300080, 0x05400000, -/**/ 0xBD359558, 0x88B3357C, -/**/ 0x3F2FC1F8, 0x27436F4F, -/**/ 0xBF2FC0FC, 0x0E800000, -/**/ 0x3D245998, 0x92ECD4D1, -/**/ 0x3F2F81F0, 0x3E87D8DC, -/**/ 0xBF2F80F8, 0x1A000000, -/**/ 0xBD36901A, 0xB592170A, -/**/ 0x3F2F41E8, 0x65CF36C6, -/**/ 0xBF2F40F4, 0x2E000000, -/**/ 0x3D2069E5, 0x53524603, -/**/ 0x3F2F01E0, 0x9D19830B, -/**/ 0xBF2F00F0, 0x49800000, -/**/ 0xBD39830B, 0x69C22240, -/**/ 0x3F2EC1D8, 0xE466B7AB, -/**/ 0xBF2EC0EC, 0x6D800000, -/**/ 0x3D1123AC, 0xFB871BBA, -/**/ 0x3F2E81D1, 0x3BB6CEA4, -/**/ 0xBF2E80E8, 0x99000000, -/**/ 0xBD3E6629, 0x2E158AF6, -/**/ 0x3F2E41C9, 0xA309C1F4, -/**/ 0xBF2E40E4, 0xCD000000, -/**/ 0xBCF8F488, 0x2B29884E, -/**/ 0x3F2E01C2, 0x1A5F8B99, -/**/ 0xBF2E00E1, 0x09000000, -/**/ 0x3D3ACE8D, 0x6EA006C6, -/**/ 0x3F2DC1BA, 0xA1B82593, -/**/ 0xBF2DC0DD, 0x4C800000, -/**/ 0xBD22974E, 0x59D0B687, -/**/ 0x3F2D81B3, 0x391389E0, -/**/ 0xBF2D80D9, 0x98800000, -/**/ 0x3D322319, 0xD7897CAD, -/**/ 0x3F2D41AB, 0xE071B27F, -/**/ 0xBF2D40D5, 0xEC000000, -/**/ 0xBD32E42F, 0x57954C6E, -/**/ 0x3F2D01A4, 0x97D2996E, -/**/ 0xBF2D00D2, 0x48000000, -/**/ 0x3D1E7DF5, 0xC741610E, -/**/ 0x3F2CC19D, 0x5F3638AB, -/**/ 0xBF2CC0CE, 0xAB800000, -/**/ 0xBD3E50DF, 0xA0909C5A, -/**/ 0x3F2C8196, 0x369C8A37, -/**/ 0xBF2C80CB, 0x17800000, -/**/ 0xBD12D119, 0x8D8D1C8F, -/**/ 0x3F2C418F, 0x1E05880E, -/**/ 0xBF2C40C7, 0x8B800000, -/**/ 0x3D347649, 0x544D2574, -/**/ 0x3F2C0188, 0x15712C30, -/**/ 0xBF2C00C4, 0x07000000, -/**/ 0xBD32D030, 0x4EEA9E68, -/**/ 0x3F2BC181, 0x1CDF709C, -/**/ 0xBF2BC0C0, 0x8B000000, -/**/ 0x3D15E533, 0x74A84109, -/**/ 0x3F2B817A, 0x34504F50, -/**/ 0xBF2B80BD, 0x17000000, -/**/ 0x3D3D53C1, 0x025FBF68, -/**/ 0x3F2B4173, 0x5BC3C24B, -/**/ 0xBF2B40B9, 0xAA800000, -/**/ 0xBD267FA7, 0x6BAA2FA8, -/**/ 0x3F2B016C, 0x9339C38C, -/**/ 0xBF2B00B6, 0x46800000, -/**/ 0x3D277F1D, 0xBB3FDE1E, -/**/ 0x3F2AC165, 0xDAB24D11, -/**/ 0xBF2AC0B2, 0xEA000000, -/**/ 0xBD3DAD17, 0x1A8CDBE2, -/**/ 0x3F2A815F, 0x322D58D9, -/**/ 0xBF2A80AF, 0x96000000, -/**/ 0xBD1E1315, 0xD81CF36E, -/**/ 0x3F2A4158, 0x99AAE0E3, -/**/ 0xBF2A40AC, 0x4A000000, -/**/ 0x3D2C7307, 0xE649E7B4, -/**/ 0x3F2A0152, 0x112ADF2D, -/**/ 0xBF2A00A9, 0x05800000, -/**/ 0xBD3C713A, 0xB77435EC, -/**/ 0x3F29C14B, 0x98AD4DB7, -/**/ 0xBF29C0A5, 0xC9800000, -/**/ 0xBD1E1005, 0x3A7AE827, -/**/ 0x3F298145, 0x3032267F, -/**/ 0xBF2980A2, 0x95800000, -/**/ 0x3D2A0460, 0xA8F2A842, -/**/ 0x3F29413E, 0xD7B96385, -/**/ 0xBF29409F, 0x69000000, -/**/ 0xBD3EDDA5, 0xA7B8321E, -/**/ 0x3F290138, 0x8F42FEC5, -/**/ 0xBF29009C, 0x45000000, -/**/ 0xBD264506, 0x3A3F0D33, -/**/ 0x3F28C132, 0x56CEF241, -/**/ 0xBF28C099, 0x29000000, -/**/ 0x3D206930, 0x33EE13CD, -/**/ 0x3F28812C, 0x2E5D37F6, -/**/ 0xBF288096, 0x15000000, -/**/ 0x3D3B28AC, 0x22DF1FDA, -/**/ 0x3F284126, 0x15EDC9E3, -/**/ 0xBF284093, 0x08800000, -/**/ 0xBD324546, 0xDD73B6DB, -/**/ 0x3F280120, 0x0D80A208, -/**/ 0xBF280090, 0x04800000, -/**/ 0xBCB440C2, 0x6DFEB485, -/**/ 0x3F27C11A, 0x1515BA62, -/**/ 0xBF27C08D, 0x08800000, -/**/ 0x3D31BCBE, 0x9823B19D, -/**/ 0x3F278114, 0x2CAD0CF1, -/**/ 0xBF27808A, 0x14000000, -/**/ 0xBD3CD148, 0xA9EB4E97, -/**/ 0x3F27410E, 0x544693B4, -/**/ 0xBF274087, 0x28000000, -/**/ 0xBD277AAC, 0xCA4F73AA, -/**/ 0x3F270108, 0x8BE248AA, -/**/ 0xBF270084, 0x44000000, -/**/ 0x3D13E656, 0x26068EF7, -/**/ 0x3F26C102, 0xD38025D2, -/**/ 0xBF26C081, 0x68000000, -/**/ 0x3D35547B, 0x44C3EC8A, -/**/ 0x3F2680FD, 0x2B20252A, -/**/ 0xBF26807E, 0x93800000, -/**/ 0xBD3AABA5, 0x110DCE4B, -/**/ 0x3F2640F7, 0x92C240B1, -/**/ 0xBF26407B, 0xC7800000, -/**/ 0xBD260B96, 0xAC011956, -/**/ 0x3F2600F2, 0x0A667267, -/**/ 0xBF260079, 0x03800000, -/**/ 0x3D111C22, 0x5DFA826E, -/**/ 0x3F25C0EC, 0x920CB44A, -/**/ 0xBF25C076, 0x47800000, -/**/ 0x3D333BD6, 0xD8A2980A, -/**/ 0x3F2580E7, 0x29B5005A, -/**/ 0xBF258073, 0x93000000, -/**/ 0xBD3E2660, 0x71C1D861, -/**/ 0x3F2540E1, 0xD15F5095, -/**/ 0xBF254070, 0xE7000000, -/**/ 0xBD2FBD3A, 0x4E77E5EE, -/**/ 0x3F2500DC, 0x890B9EFA, -/**/ 0xBF25006E, 0x43000000, -/**/ 0xBCFEBDF2, 0x7B90A2D9, -/**/ 0x3F24C0D7, 0x50B9E589, -/**/ 0xBF24C06B, 0xA7000000, -/**/ 0x3D2765B3, 0x58F2FF2C, -/**/ 0x3F2480D2, 0x286A1E40, -/**/ 0xBF248069, 0x13000000, -/**/ 0x3D38FE8D, 0x74AE382C, -/**/ 0x3F2440CD, 0x101C431E, -/**/ 0xBF244066, 0x86800000, -/**/ 0xBD3A07C3, 0xB0286224, -/**/ 0x3F2400C8, 0x07D04E23, -/**/ 0xBF240064, 0x02800000, -/**/ 0xBD2ABE33, 0x46EFC0EC, -/**/ 0x3F23C0C3, 0x0F86394D, -/**/ 0xBF23C061, 0x86800000, -/**/ 0xBCF06744, 0x70DE3151, -/**/ 0x3F2380BE, 0x273DFE9C, -/**/ 0xBF23805F, 0x12800000, -/**/ 0x3D260659, 0x05CFCD61, -/**/ 0x3F2340B9, 0x4EF7980F, -/**/ 0xBF23405C, 0xA6800000, -/**/ 0x3D36BEC8, 0xD7DBBEBC, -/**/ 0x3F2300B4, 0x86B2FFA4, -/**/ 0xBF23005A, 0x42000000, -/**/ 0xBD3DD29F, 0x2B2027B4, -/**/ 0x3F22C0AF, 0xCE702F5C, -/**/ 0xBF22C057, 0xE6000000, -/**/ 0xBD32B00B, 0x6959A7D0, -/**/ 0x3F2280AB, 0x262F2134, -/**/ 0xBF228055, 0x92000000, -/**/ 0xBD1F61EF, 0x19FAAC2D, -/**/ 0x3F2240A6, 0x8DEFCF2C, -/**/ 0xBF224053, 0x46000000, -/**/ 0x3D05A87E, 0xCB16B8A8, -/**/ 0x3F2200A2, 0x05B23344, -/**/ 0xBF220051, 0x02000000, -/**/ 0x3D29F32F, 0x23B9B257, -/**/ 0x3F21C09D, 0x8D76477A, -/**/ 0xBF21C04E, 0xC6000000, -/**/ 0x3D36F61B, 0x7E214821, -/**/ 0x3F218099, 0x253C05CD, -/**/ 0xBF21804C, 0x91800000, -/**/ 0xBD3F5464, 0x46FDFCA2, -/**/ 0x3F214094, 0xCD03683D, -/**/ 0xBF21404A, 0x65800000, -/**/ 0xBD35E4E7, 0xA30F2308, -/**/ 0x3F210090, 0x84CC68C9, -/**/ 0xBF210048, 0x41800000, -/**/ 0xBD2974DC, 0xF800CC34, -/**/ 0x3F20C08C, 0x4C970171, -/**/ 0xBF20C046, 0x25800000, -/**/ 0xBD0E9FC5, 0xC1006E9D, -/**/ 0x3F208088, 0x24632C32, -/**/ 0xBF208044, 0x11800000, -/**/ 0x3D133DE7, 0x078E4438, -/**/ 0x3F204084, 0x0C30E30D, -/**/ 0xBF204042, 0x05800000, -/**/ 0x3D2A61D2, 0x15F82A7B, -/**/ 0x3F200080, 0x04002001, -/**/ 0xBF200040, 0x01800000, -/**/ 0x3D355155, 0x3BBB110C, -/**/ 0x3F1F80F8, 0x17A1BA1A, -/**/ 0xBF1F807C, 0x0B000000, -/**/ 0x3D3D31BE, 0x6C520A9B, -/**/ 0x3F1F00F0, 0x47462860, -/**/ 0xBF1F0078, 0x22000000, -/**/ 0xBD3B2CDB, 0x4B6D83F6, -/**/ 0x3F1E80E8, 0x96ED7ED3, -/**/ 0xBF1E8074, 0x4A000000, -/**/ 0xBD33C977, 0xD4122C5A, -/**/ 0x3F1E00E1, 0x0697B172, -/**/ 0xBF1E0070, 0x82000000, -/**/ 0xBD29462E, 0x2D1517C4, -/**/ 0x3F1D80D9, 0x9644B43B, -/**/ 0xBF1D806C, 0xCA000000, -/**/ 0xBD16E2E3, 0xF0952D45, -/**/ 0x3F1D00D2, 0x45F47B2C, -/**/ 0xBF1D0069, 0x22000000, -/**/ 0x3CEED452, 0x2DDC2A8D, -/**/ 0x3F1C80CB, 0x15A6FA46, -/**/ 0xBF1C8065, 0x8A000000, -/**/ 0x3D1DAFEE, 0xA08CEBE8, -/**/ 0x3F1C00C4, 0x055C2585, -/**/ 0xBF1C0062, 0x02000000, -/**/ 0x3D2B50A4, 0xBB11EF55, -/**/ 0x3F1B80BD, 0x1513F0E9, -/**/ 0xBF1B805E, 0x8A000000, -/**/ 0x3D33ACA6, 0xC6D142BF, -/**/ 0x3F1B00B6, 0x44CE5071, -/**/ 0xBF1B005B, 0x22000000, -/**/ 0x3D3979F8, 0xF8CD3D11, -/**/ 0x3F1A80AF, 0x948B381A, -/**/ 0xBF1A8057, 0xCA000000, -/**/ 0x3D3F1149, 0x07EDFD29, -/**/ 0x3F1A00A9, 0x044A9BE5, -/**/ 0xBF1A0054, 0x81000000, -/**/ 0xBD3B8C68, 0xF7BB7092, -/**/ 0x3F1980A2, 0x940C6FCF, -/**/ 0xBF198051, 0x49000000, -/**/ 0xBD365E1C, 0xF27E09A9, -/**/ 0x3F19009C, 0x43D0A7D8, -/**/ 0xBF19004E, 0x21000000, -/**/ 0xBD3162D2, 0xD508D564, -/**/ 0x3F188096, 0x139737FE, -/**/ 0xBF18804B, 0x09000000, -/**/ 0xBD293315, 0x18D5C93E, -/**/ 0x3F180090, 0x03601440, -/**/ 0xBF180048, 0x01000000, -/**/ 0xBD200288, 0x0C26A328, -/**/ 0x3F17808A, 0x132B309E, -/**/ 0xBF178045, 0x09000000, -/**/ 0xBD0CC7F9, 0x7E89FD6F, -/**/ 0x3F170084, 0x42F88115, -/**/ 0xBF170042, 0x21000000, -/**/ 0x3CE40881, 0x058494DC, -/**/ 0x3F16807E, 0x92C7F9A5, -/**/ 0xBF16803F, 0x49000000, -/**/ 0x3D12AE16, 0xCD5698B9, -/**/ 0x3F160079, 0x02998E4D, -/**/ 0xBF16003C, 0x81000000, -/**/ 0x3D21138B, 0xC5780E17, -/**/ 0x3F158073, 0x926D330B, -/**/ 0xBF158039, 0xC9000000, -/**/ 0x3D287809, 0x4E2001E2, -/**/ 0x3F15006E, 0x4242DBDF, -/**/ 0xBF150037, 0x21000000, -/**/ 0x3D2F8684, 0x21448AA2, -/**/ 0x3F148069, 0x121A7CC8, -/**/ 0xBF148034, 0x89000000, -/**/ 0x3D33207E, 0x2F637D8E, -/**/ 0x3F140064, 0x01F409C4, -/**/ 0xBF140032, 0x01000000, -/**/ 0x3D3654B9, 0x12E44B29, -/**/ 0x3F13805F, 0x11CF76D3, -/**/ 0xBF13802F, 0x89000000, -/**/ 0x3D3960F2, 0xCA5547F3, -/**/ 0x3F13005A, 0x41ACB7F4, -/**/ 0xBF13002D, 0x21000000, -/**/ 0x3D3C462B, 0x6487063D, -/**/ 0x3F128055, 0x918BC126, -/**/ 0xBF12802A, 0xC9000000, -/**/ 0x3D3F0562, 0xEFEA1107, -/**/ 0x3F120051, 0x016C8668, -/**/ 0xBF120028, 0x80000000, -/**/ 0xBD3E6066, 0x857113CE, -/**/ 0x3F11804C, 0x914EFBBA, -/**/ 0xBF118026, 0x48000000, -/**/ 0xBD3BEA30, 0xEDD9EB54, -/**/ 0x3F110048, 0x41331519, -/**/ 0xBF110024, 0x20000000, -/**/ 0xBD3996FC, 0x3BFFFF5A, -/**/ 0x3F108044, 0x1118C686, -/**/ 0xBF108022, 0x08000000, -/**/ 0xBD3765C8, 0x62F2E042, -/**/ 0x3F100040, 0x01000400, -/**/ 0xBF100020, 0x00000000, -/**/ 0xBD355595, 0x562224CD, -/**/ 0x3F0F0078, 0x21D1830C, -/**/ 0xBF0F003C, 0x10000000, -/**/ 0xBD336563, 0x095D69EB, -/**/ 0x3F0E0070, 0x81A5E62E, -/**/ 0xBF0E0038, 0x40000000, -/**/ 0xBD319431, 0x70D45290, -/**/ 0x3F0D0069, 0x217D1965, -/**/ 0xBF0D0034, 0x90000000, -/**/ 0xBD2FC201, 0x022D0EF6, -/**/ 0x3F0C0062, 0x015704B1, -/**/ 0xBF0C0031, 0x00000000, -/**/ 0xBD2C95A0, 0x5E276E21, -/**/ 0x3F0B005B, 0x2133900E, -/**/ 0xBF0B002D, 0x90000000, -/**/ 0xBD29A140, 0xE0372A42, -/**/ 0x3F0A0054, 0x8112A37D, -/**/ 0xBF0A002A, 0x40000000, -/**/ 0xBD26E2E2, 0x73BBB580, -/**/ 0x3F09004E, 0x20F426FB, -/**/ 0xBF090027, 0x10000000, -/**/ 0xBD245885, 0x04D48C20, -/**/ 0x3F080048, 0x00D80288, -/**/ 0xBF080024, 0x00000000, -/**/ 0xBD220028, 0x80613426, -/**/ 0x3F070042, 0x20BE1E23, -/**/ 0xBF070021, 0x10000000, -/**/ 0xBD1FAF99, 0xA80279F3, -/**/ 0x3F06003C, 0x80A661CA, -/**/ 0xBF06001E, 0x40000000, -/**/ 0xBD1BBAE3, 0xDC287DFE, -/**/ 0x3F050037, 0x2090B57C, -/**/ 0xBF05001B, 0x90000000, -/**/ 0xBD181E2F, 0x7B73B67C, -/**/ 0x3F040032, 0x007D0139, -/**/ 0xBF040019, 0x00000000, -/**/ 0xBD14D57C, 0x65A375F8, -/**/ 0x3F03002D, 0x206B2CFF, -/**/ 0xBF030016, 0x90000000, -/**/ 0xBD11DCCA, 0x7BF71EC1, -/**/ 0x3F020028, 0x805B20CD, -/**/ 0xBF020014, 0x40000000, -/**/ 0xBD0E6033, 0x425C4447, -/**/ 0x3F010024, 0x204CC4A3, -/**/ 0xBF010012, 0x10000000, -/**/ 0xBD0996D3, 0x730FFF5C, -/**/ 0x3F000020, 0x00400080, -/**/ 0xBF000010, 0x00000000, -/**/ 0xBD055575, 0x558888DE, -/**/ 0x3EFE0038, 0x406978C6, -/**/ 0xBEFE001C, 0x20000000, -/**/ 0xBD019418, 0xB845146A, -/**/ 0x3EFC0031, 0x0055C096, -/**/ 0xBEFC0018, 0x80000000, -/**/ 0xBCFC957A, 0xD989DB3C, -/**/ 0x3EFA002A, 0x4044A870, -/**/ 0xBEFA0015, 0x20000000, -/**/ 0xBCF6E2C6, 0x8F0EED2F, -/**/ 0x3EF80024, 0x00360051, -/**/ 0xBEF80012, 0x00000000, -/**/ 0xBCF20014, 0x40184CEB, -/**/ 0x3EF6001E, 0x40299839, -/**/ 0xBEF6000F, 0x20000000, -/**/ 0xBCEBBAC7, 0x434A1F5C, -/**/ 0x3EF40019, 0x001F4027, -/**/ 0xBEF4000C, 0x80000000, -/**/ 0xBCE4D568, 0xDD68DD6A, -/**/ 0x3EF20014, 0x4016C81A, -/**/ 0xBEF2000A, 0x20000000, -/**/ 0xBCDE6019, 0xA11710FC, -/**/ 0x3EF00010, 0x00100010, -/**/ 0xBEF00008, 0x00000000, -/**/ 0xBCD55565, 0x5562222D, -/**/ 0x3EEC0018, 0x80157013, -/**/ 0xBEEC000C, 0x40000000, -/**/ 0xBCCC9568, 0x176276C5, -/**/ 0x3EE80012, 0x000D800A, -/**/ 0xBEE80009, 0x00000000, -/**/ 0xBCC2000A, 0x20061337, -/**/ 0x3EE4000C, 0x8007D005, -/**/ 0xBEE40006, 0x40000000, -/**/ 0xBCB4D55F, 0x195A3758, -/**/ 0x3EE00008, 0x00040002, -/**/ 0xBEE00004, 0x00000000, -/**/ 0xBCA5555D, 0x5558888A, -/**/ 0x3ED80009, 0x00036001, -/**/ 0xBED80004, 0x80000000, -/**/ 0xBC920005, 0x100184CD, -/**/ 0x3ED00004, 0x00010000, -/**/ 0xBED00002, 0x00000000, -/**/ 0xBC755559, 0x55562222, -/**/ 0x3EC00002, 0x00004000, -/**/ 0xBEC00001, 0x00000000, -/**/ 0xBC455557, 0x55558889, -/**/ 0x00000000, 0x00000000, -/**/ 0x00000000, 0x00000000, -/**/ 0x00000000, 0x00000000, -/**/ 0xBEBFFFFC, 0x00008000, -/**/ 0x3EBFFFFE, 0x00000000, -/**/ 0x3C455553, 0x55558889, -/**/ 0xBECFFFF8, 0x00020000, -/**/ 0x3ECFFFFC, 0x00000000, -/**/ 0x3C755551, 0x55562222, -/**/ 0xBED7FFF7, 0x00035FFF, -/**/ 0x3ED7FFFB, 0x80000000, -/**/ 0x3C91FFFA, 0xF00184CC, -/**/ 0xBEDFFFF0, 0x0007FFFC, -/**/ 0x3EDFFFF8, 0x00000000, -/**/ 0x3CA5554D, 0x55588887, -/**/ 0xBEE3FFF3, 0x8007CFFB, -/**/ 0x3EE3FFF9, 0xC0000000, -/**/ 0x3CB4D54B, 0x915A3753, -/**/ 0xBEE7FFEE, 0x000D7FF6, -/**/ 0x3EE7FFF7, 0x00000000, -/**/ 0x3CC1FFF5, 0xE006132F, -/**/ 0xBEEBFFE7, 0x80156FED, -/**/ 0x3EEBFFF3, 0xC0000000, -/**/ 0x3CCC9542, 0x936276B2, -/**/ 0xBEEFFFE0, 0x001FFFE0, -/**/ 0x3EEFFFF0, 0x00000000, -/**/ 0x3CD55545, 0x55622217, -/**/ 0xBEF1FFEB, 0xC016C7E6, -/**/ 0x3EF1FFF5, 0xE0000000, -/**/ 0x3CDE5FE6, 0x5F1710D1, -/**/ 0xBEF3FFE7, 0x001F3FD9, -/**/ 0x3EF3FFF3, 0x80000000, -/**/ 0x3CE4D541, 0xCD68DD41, -/**/ 0xBEF5FFE1, 0xC02997C7, -/**/ 0x3EF5FFF0, 0xE0000000, -/**/ 0x3CEBBA8E, 0x124A1F13, -/**/ 0xBEF7FFDC, 0x0035FFAF, -/**/ 0x3EF7FFEE, 0x00000000, -/**/ 0x3CF1FFEB, 0xC0184CAE, -/**/ 0xBEF9FFD5, 0xC044A790, -/**/ 0x3EF9FFEA, 0xE0000000, -/**/ 0x3CF6E28E, 0xC68EECCD, -/**/ 0xBEFBFFCF, 0x0055BF6A, -/**/ 0x3EFBFFE7, 0x80000000, -/**/ 0x3CFC952F, 0xD189DAA2, -/**/ 0xBEFDFFC7, 0xC069773A, -/**/ 0x3EFDFFE3, 0xE0000000, -/**/ 0x3D0193E7, 0x480513F6, -/**/ 0xBEFFFFC0, 0x007FFF00, -/**/ 0x3EFFFFE0, 0x00000000, -/**/ 0x3D055535, 0x55888833, -/**/ 0xBF00FFDB, 0xE04CC35D, -/**/ 0x3F00FFED, 0xF0000000, -/**/ 0x3D099681, 0xE2CFFE66, -/**/ 0xBF01FFD7, 0x805B1F33, -/**/ 0x3F01FFEB, 0xC0000000, -/**/ 0x3D0E5FCC, 0xBE5C42ED, -/**/ 0xBF02FFD2, 0xE06B2B01, -/**/ 0x3F02FFE9, 0x70000000, -/**/ 0x3D11DC8A, 0xD9D71DD1, -/**/ 0xBF03FFCE, 0x007CFEC8, -/**/ 0x3F03FFE7, 0x00000000, -/**/ 0x3D14D52E, 0x45A374B3, -/**/ 0xBF04FFC8, 0xE090B284, -/**/ 0x3F04FFE4, 0x70000000, -/**/ 0x3D181DD0, 0x8553B4C7, -/**/ 0xBF05FFC3, 0x80A65E36, -/**/ 0x3F05FFE1, 0xC0000000, -/**/ 0x3D1BBA71, 0x7A287BBE, -/**/ 0xBF06FFBD, 0xE0BE19DD, -/**/ 0x3F06FFDE, 0xF0000000, -/**/ 0x3D1FAF11, 0x03E27702, -/**/ 0xBF07FFB8, 0x00D7FD78, -/**/ 0x3F07FFDC, 0x00000000, -/**/ 0x3D21FFD7, 0x80613240, -/**/ 0xBF08FFB1, 0xE0F42105, -/**/ 0x3F08FFD8, 0xF0000000, -/**/ 0x3D245825, 0xA6C489B3, -/**/ 0xBF09FFAB, 0x81129C84, -/**/ 0x3F09FFD5, 0xC0000000, -/**/ 0x3D26E272, 0xE2BBB26F, -/**/ 0xBF0AFFA4, 0xE13387F2, -/**/ 0x3F0AFFD2, 0x70000000, -/**/ 0x3D29A0BF, 0x21272669, -/**/ 0xBF0BFF9E, 0x0156FB50, -/**/ 0x3F0BFFCF, 0x00000000, -/**/ 0x3D2C950A, 0x4E276957, -/**/ 0xBF0CFF96, 0xE17D0E9B, -/**/ 0x3F0CFFCB, 0x70000000, -/**/ 0x3D2FC154, 0x551D090E, -/**/ 0xBF0DFF8F, 0x81A5D9D2, -/**/ 0x3F0DFFC7, 0xC0000000, -/**/ 0x3D3193CE, 0x90544EF1, -/**/ 0xBF0EFF87, 0xE1D174F4, -/**/ 0x3F0EFFC3, 0xF0000000, -/**/ 0x3D3364F2, 0x4D556583, -/**/ 0xBF0FFF80, 0x01FFF800, -/**/ 0x3F0FFFC0, 0x00000000, -/**/ 0x3D355515, 0x56221F78, -/**/ 0xBF107FBB, 0xF118BD7A, -/**/ 0x3F107FDD, 0xF8000000, -/**/ 0x3D376537, 0x9EEAD9D8, -/**/ 0xBF10FFB7, 0xC1330AE7, -/**/ 0x3F10FFDB, 0xE0000000, -/**/ 0x3D399659, 0x1B7FF7AE, -/**/ 0xBF117FB3, 0x714EF047, -/**/ 0x3F117FD9, 0xB8000000, -/**/ 0x3D3BE979, 0xBF51E233, -/**/ 0xBF11FFAF, 0x016C7998, -/**/ 0x3F11FFD7, 0x80000000, -/**/ 0x3D3E5F99, 0x7D7108FF, -/**/ 0xBF127FAA, 0x718BB2DA, -/**/ 0x3F127FD5, 0x39000000, -/**/ 0xBD3F0647, 0xB7721DC6, -/**/ 0xBF12FFA5, 0xC1ACA80C, -/**/ 0x3F12FFD2, 0xE1000000, -/**/ 0xBD3C4729, 0xED071532, -/**/ 0xBF137FA0, 0xF1CF652D, -/**/ 0x3F137FD0, 0x79000000, -/**/ 0xBD39620D, 0x315D596D, -/**/ 0xBF13FF9C, 0x01F3F63C, -/**/ 0x3F13FFCE, 0x01000000, -/**/ 0xBD3655F1, 0x92E45F81, -/**/ 0xBF147F96, 0xF21A6739, -/**/ 0x3F147FCB, 0x79000000, -/**/ 0xBD3321D7, 0x206B9526, -/**/ 0xBF14FF91, 0xC242C421, -/**/ 0x3F14FFC8, 0xE1000000, -/**/ 0xBD2F897B, 0xD244C12A, -/**/ 0xBF157F8C, 0x726D18F6, -/**/ 0x3F157FC6, 0x39000000, -/**/ 0xBD287B4B, 0xF93040AE, -/**/ 0xBF15FF87, 0x029971B4, -/**/ 0x3F15FFC3, 0x81000000, -/**/ 0xBD21171E, 0xD578562C, -/**/ 0xBF167F81, 0x72C7DA5C, -/**/ 0x3F167FC0, 0xB9000000, -/**/ 0xBD12B5E9, 0x0F773DB4, -/**/ 0xBF16FF7B, 0xC2F85EEC, -/**/ 0x3F16FFBD, 0xE1000000, -/**/ 0xBCE44CD3, 0x158A76C2, -/**/ 0xBF177F75, 0xF32B0B63, -/**/ 0x3F177FBA, 0xF9000000, -/**/ 0x3D0CB55C, 0x2E48511B, -/**/ 0xBF17FF70, 0x035FEBC0, -/**/ 0x3F17FFB8, 0x01000000, -/**/ 0x3D1FFAF0, 0x184C534F, -/**/ 0xBF187F69, 0xF3970C03, -/**/ 0x3F187FB4, 0xF9000000, -/**/ 0x3D292D95, 0xACC53FBE, -/**/ 0xBF18FF63, 0xC3D07829, -/**/ 0x3F18FFB1, 0xE1000000, -/**/ 0x3D315FD7, 0xE48887C8, -/**/ 0xBF197F5D, 0x740C3C32, -/**/ 0x3F197FAE, 0xB9000000, -/**/ 0x3D365AE3, 0x1DF5B242, -/**/ 0xBF19FF57, 0x044A641C, -/**/ 0x3F19FFAB, 0x81000000, -/**/ 0x3D3B88EC, 0x6FBB0E5F, -/**/ 0xBF1A7F50, 0x748AFBE7, -/**/ 0x3F1A7FA8, 0x3A000000, -/**/ 0xBD3F150C, 0x39766B40, -/**/ 0xBF1AFF49, 0xC4CE0F91, -/**/ 0x3F1AFFA4, 0xE2000000, -/**/ 0xBD397E06, 0xF14DB839, -/**/ 0xBF1B7F42, 0xF513AB19, -/**/ 0x3F1B7FA1, 0x7A000000, -/**/ 0xBD33B103, 0xCBD9CC3D, -/**/ 0xBF1BFF3C, 0x055BDA7D, -/**/ 0x3F1BFF9E, 0x02000000, -/**/ 0xBD2B5A05, 0xBB1321B5, -/**/ 0xBF1C7F34, 0xF5A6A9BD, -/**/ 0x3F1C7F9A, 0x7A000000, -/**/ 0xBD1DC410, 0xECAF9551, -/**/ 0xBF1CFF2D, 0xC5F424D6, -/**/ 0x3F1CFF96, 0xE2000000, -/**/ 0xBCEF80FF, 0x3DF3CD68, -/**/ 0xBF1D7F26, 0x764457C8, -/**/ 0x3F1D7F93, 0x3A000000, -/**/ 0x3D16CBC7, 0x4271E737, -/**/ 0xBF1DFF1F, 0x06974E91, -/**/ 0x3F1DFF8F, 0x82000000, -/**/ 0x3D2939D2, 0x1D134848, -/**/ 0xBF1E7F17, 0x76ED1530, -/**/ 0x3F1E7F8B, 0xBA000000, -/**/ 0x3D33C2DD, 0xA9892C73, -/**/ 0xBF1EFF0F, 0xC745B7A4, -/**/ 0x3F1EFF87, 0xE2000000, -/**/ 0x3D3B25CF, 0x8AEC69D5, -/**/ 0xBF1F7F07, 0xF7A141EA, -/**/ 0x3F1F7F83, 0xFB000000, -/**/ 0xBD3D3941, 0x645B412A, -/**/ 0xBF1FFF00, 0x07FFC002, -/**/ 0x3F1FFF80, 0x03000000, -/**/ 0xBD355955, 0x3BBC6662, -/**/ 0xBF203F7B, 0xFC309EF5, -/**/ 0x3F203FBD, 0xFD800000, -/**/ 0xBD2A72D8, 0x260B17B3, -/**/ 0xBF207F77, 0xE462E3D0, -/**/ 0x3F207FBB, 0xF1800000, -/**/ 0xBD136218, 0x0994AE68, -/**/ 0xBF20BF73, 0xBC96B492, -/**/ 0x3F20BFB9, 0xDD800000, -/**/ 0x3D0E52E6, 0xECB2641F, -/**/ 0xBF20FF6F, 0x84CC1739, -/**/ 0x3F20FFB7, 0xC1800000, -/**/ 0x3D296078, 0xE7FCF60B, -/**/ 0xBF213F6B, 0x3D0311C6, -/**/ 0x3F213FB5, 0x9D800000, -/**/ 0x3D35DA18, 0xA7850AFF, -/**/ 0xBF217F66, 0xE53BAA36, -/**/ 0x3F217FB3, 0x71800000, -/**/ 0x3D3F48F1, 0x5E7BB444, -/**/ 0xBF21BF62, 0x7D75E68A, -/**/ 0x3F21BFB1, 0x3E000000, -/**/ 0xBD370239, 0x812BC469, -/**/ 0xBF21FF5E, 0x05B1CCC0, -/**/ 0x3F21FFAF, 0x02000000, -/**/ 0xBD2A0CD0, 0x23BF1A4D, -/**/ 0xBF223F59, 0x7DEF62D8, -/**/ 0x3F223FAC, 0xBE000000, -/**/ 0xBD0614D3, 0x736E3623, -/**/ 0xBF227F54, 0xE62EAED0, -/**/ 0x3F227FAA, 0x72000000, -/**/ 0x3D1F28BD, 0x37EDEDB0, -/**/ 0xBF22BF50, 0x3E6FB6A9, -/**/ 0x3F22BFA8, 0x1E000000, -/**/ 0x3D32A0F5, 0x07CE33C8, -/**/ 0xBF22FF4B, 0x86B28060, -/**/ 0x3F22FFA5, 0xC2000000, -/**/ 0x3D3DC2B6, 0xA31C6A8D, -/**/ 0xBF233F46, 0xBEF711F6, -/**/ 0x3F233FA3, 0x5E800000, -/**/ 0xBD36CF8B, 0xFC67C9FB, -/**/ 0xBF237F41, 0xE73D7169, -/**/ 0x3F237FA0, 0xF2800000, -/**/ 0xBD2629A5, 0xE6D88A89, -/**/ 0xBF23BF3C, 0xFF85A4B8, -/**/ 0x3F23BF9E, 0x7E800000, -/**/ 0x3CEE7C34, 0x202574EC, -/**/ 0xBF23FF38, 0x07CFB1E3, -/**/ 0x3F23FF9C, 0x02800000, -/**/ 0x3D2A9723, 0x46E594C1, -/**/ 0xBF243F33, 0x001B9EE8, -/**/ 0x3F243F99, 0x7E800000, -/**/ 0x3D39F33C, 0xF61AE74C, -/**/ 0xBF247F2D, 0xE86971C7, -/**/ 0x3F247F96, 0xF3000000, -/**/ 0xBD39141C, 0x85341E31, -/**/ 0xBF24BF28, 0xC0B9307F, -/**/ 0x3F24BF94, 0x5F000000, -/**/ 0xBD2792F5, 0xDA0FAF09, -/**/ 0xBF24FF23, 0x890AE10E, -/**/ 0x3F24FF91, 0xC3000000, -/**/ 0x3CFD4219, 0xFB239430, -/**/ 0xBF253F1E, 0x415E8974, -/**/ 0x3F253F8F, 0x1F000000, -/**/ 0x3D2F8B72, 0x0359434A, -/**/ 0xBF257F18, 0xE9B42FAF, -/**/ 0x3F257F8C, 0x73000000, -/**/ 0x3D3E0C4B, 0x1939FEDF, -/**/ 0xBF25BF13, 0x820BD9BF, -/**/ 0x3F25BF89, 0xBF800000, -/**/ 0xBD335728, 0x39B301E2, -/**/ 0xBF25FF0E, 0x0A658DA3, -/**/ 0x3F25FF87, 0x03800000, -/**/ 0xBD118E84, 0x5E1E8D4F, -/**/ 0xBF263F08, 0x82C15159, -/**/ 0x3F263F84, 0x3F800000, -/**/ 0x3D25CFC0, 0xBDDDD045, -/**/ 0xBF267F02, 0xEB1F2AE1, -/**/ 0x3F267F81, 0x73800000, -/**/ 0x3D3A8C5C, 0x08837E99, -/**/ 0xBF26BEFD, 0x437F203A, -/**/ 0x3F26BF7E, 0xA0000000, -/**/ 0xBD35752E, 0x3C56F12D, -/**/ 0xBF26FEF7, 0x8BE13762, -/**/ 0x3F26FF7B, 0xC4000000, -/**/ 0xBD146EFA, 0x46359E28, -/**/ 0xBF273EF1, 0xC4457659, -/**/ 0x3F273F78, 0xE0000000, -/**/ 0x3D273355, 0xCD265865, -/**/ 0xBF277EEB, 0xECABE31C, -/**/ 0x3F277F75, 0xF4000000, -/**/ 0x3D3CAC0E, 0x095DEBF8, -/**/ 0xBF27BEE6, 0x051483AC, -/**/ 0x3F27BF73, 0x00800000, -/**/ 0xBD31E395, 0x4C39F4DB, -/**/ 0xBF27FEE0, 0x0D7F5E08, -/**/ 0x3F27FF70, 0x04800000, -/**/ 0xBCB43F3D, 0xA1314B81, -/**/ 0xBF283EDA, 0x05EC782D, -/**/ 0x3F283F6D, 0x00800000, -/**/ 0x3D321B10, 0x115B8D70, -/**/ 0xBF287ED3, 0xEE5BD81B, -/**/ 0x3F287F69, 0xF5000000, -/**/ 0xBD3B54A7, 0x83704FE1, -/**/ 0xBF28BECD, 0xC6CD83D1, -/**/ 0x3F28BF66, 0xE1000000, -/**/ 0xBD20C4CC, 0x41229C91, -/**/ 0xBF28FEC7, 0x8F41814D, -/**/ 0x3F28FF63, 0xC5000000, -/**/ 0x3D25E5A8, 0x2A183F17, -/**/ 0xBF293EC1, 0x47B7D68F, -/**/ 0x3F293F60, 0xA1000000, -/**/ 0x3D3EAC06, 0xF81B997D, -/**/ 0xBF297EBA, 0xF0308995, -/**/ 0x3F297F5D, 0x75800000, -/**/ 0xBD2A6B9B, 0x3A1E5BAD, -/**/ 0xBF29BEB4, 0x88ABA05E, -/**/ 0x3F29BF5A, 0x41800000, -/**/ 0x3D1D3958, 0xBDFE3C77, -/**/ 0xBF29FEAE, 0x112920E9, -/**/ 0x3F29FF57, 0x05800000, -/**/ 0x3D3C3972, 0x375BA904, -/**/ 0xBF2A3EA7, 0x89A91135, -/**/ 0x3F2A3F53, 0xC2000000, -/**/ 0xBD2CE6F3, 0x588DE85B, -/**/ 0xBF2A7EA0, 0xF22B7740, -/**/ 0x3F2A7F50, 0x76000000, -/**/ 0x3D1D2249, 0x75AEDBFD, -/**/ 0xBF2ABE9A, 0x4AB05909, -/**/ 0x3F2ABF4D, 0x22000000, -/**/ 0x3D3D6E96, 0x2CE7BDAC, -/**/ 0xBF2AFE93, 0x9337BC90, -/**/ 0x3F2AFF49, 0xC6800000, -/**/ 0xBD2800DC, 0xCB7D724C, -/**/ 0xBF2B3E8C, 0xCBC1A7D1, -/**/ 0x3F2B3F46, 0x62800000, -/**/ 0x3D25F908, 0xFA591B29, -/**/ 0xBF2B7E85, 0xF44E20CE, -/**/ 0x3F2B7F42, 0xF7000000, -/**/ 0xBD3D9991, 0x53021ED8, -/**/ 0xBF2BBE7F, 0x0CDD2D83, -/**/ 0x3F2BBF3F, 0x83000000, -/**/ 0xBD1706BF, 0xFD596AD6, -/**/ 0xBF2BFE78, 0x156ED3F0, -/**/ 0x3F2BFF3C, 0x07000000, -/**/ 0x3D328528, 0x4EC45253, -/**/ 0xBF2C3E71, 0x0E031A14, -/**/ 0x3F2C3F38, 0x83800000, -/**/ 0xBD34C408, 0x927D8A9E, -/**/ 0xBF2C7E69, 0xF69A05ED, -/**/ 0x3F2C7F34, 0xF7800000, -/**/ 0x3D118EF4, 0xCAE2C25F, -/**/ 0xBF2CBE62, 0xCF339D7A, -/**/ 0x3F2CBF31, 0x63800000, -/**/ 0x3D3DFD79, 0x73DBBB41, -/**/ 0xBF2CFE5B, 0x97CFE6B9, -/**/ 0x3F2CFF2D, 0xC8000000, -/**/ 0xBD1FD74F, 0xE7FE77E6, -/**/ 0xBF2D3E54, 0x506EE7AA, -/**/ 0x3F2D3F2A, 0x24000000, -/**/ 0x3D328AD4, 0xBDDB871F, -/**/ 0xBF2D7E4C, 0xF910A64A, -/**/ 0x3F2D7F26, 0x78800000, -/**/ 0xBD327F8C, 0x903DDD81, -/**/ 0xBF2DBE45, 0x91B52899, -/**/ 0x3F2DBF22, 0xC4800000, -/**/ 0x3D21D80F, 0xDF52840A, -/**/ 0xBF2DFE3E, 0x1A5C7495, -/**/ 0x3F2DFF1F, 0x09000000, -/**/ 0xBD3B316D, 0xEED9F651, -/**/ 0xBF2E3E36, 0x9306903D, -/**/ 0x3F2E3F1B, 0x45000000, -/**/ 0x3CF2911A, 0x76DB3C6B, -/**/ 0xBF2E7E2E, 0xFBB3818F, -/**/ 0x3F2E7F17, 0x79000000, -/**/ 0x3D3DFC86, 0x85559113, -/**/ 0xBF2EBE27, 0x54634E89, -/**/ 0x3F2EBF13, 0xA5800000, -/**/ 0xBD12D83E, 0x0AB3DBE7, -/**/ 0xBF2EFE1F, 0x9D15FD2B, -/**/ 0x3F2EFF0F, 0xC9800000, -/**/ 0x3D39124F, 0x617B99F1, -/**/ 0xBF2F3E17, 0xD5CB9373, -/**/ 0x3F2F3F0B, 0xE6000000, -/**/ 0xBD2152B9, 0xF8F64DA1, -/**/ 0xBF2F7E0F, 0xFE841760, -/**/ 0x3F2F7F07, 0xFA000000, -/**/ 0x3D3617EB, 0x34C4735B, -/**/ 0xBF2FBE08, 0x173F8EEF, -/**/ 0x3F2FBF04, 0x06800000, -/**/ 0xBD2551B0, 0x739FA712, -/**/ 0xBF2FFE00, 0x1FFE0020, -/**/ 0x3F2FFF00, 0x0A800000, -/**/ 0x3D351558, 0x885DE027, -/**/ 0xBF301EFC, 0x0C5FB879, -/**/ 0x3F301F7E, 0x03800000, -/**/ 0xBD255905, 0x68F8FC50, -/**/ 0xBF303EF8, 0x00C1F3B0, -/**/ 0x3F303F7B, 0xFD800000, -/**/ 0x3D361295, 0xDF771CF4, -/**/ 0xBF305EF3, 0xED25B4B7, -/**/ 0x3F305F79, 0xF3C00000, -/**/ 0xBD2158BB, 0xD8A255DB, -/**/ 0xBF307EEF, 0xD18AFE8B, -/**/ 0x3F307F77, 0xE5C00000, -/**/ 0x3D3917A1, 0xB740E625, -/**/ 0xBF309EEB, 0xADF1D42C, -/**/ 0x3F309F75, 0xD4000000, -/**/ 0xBD1281AD, 0x9C716D59, -/**/ 0xBF30BEE7, 0x825A3899, -/**/ 0x3F30BF73, 0xBE000000, -/**/ 0x3D3E2C7A, 0x86ED7DDC, -/**/ 0xBF30DEE3, 0x4EC42ED1, -/**/ 0x3F30DF71, 0xA4400000, -/**/ 0x3CF7F534, 0xF54F7E28, -/**/ 0xBF30FEDF, 0x132FB9D5, -/**/ 0x3F30FF6F, 0x86800000, -/**/ 0xBD3AA6E1, 0x404F4E01, -/**/ 0xBF311EDA, 0xCF9CDCA2, -/**/ 0x3F311F6D, 0x64800000, -/**/ 0x3D2375B9, 0x4A6EC981, -/**/ 0xBF313ED6, 0x840B9A38, -/**/ 0x3F313F6B, 0x3EC00000, -/**/ 0xBD315A73, 0x33401DD0, -/**/ 0xBF315ED2, 0x307BF596, -/**/ 0x3F315F69, 0x14C00000, -/**/ 0x3D341A2F, 0x02C11605, -/**/ 0xBF317ECD, 0xD4EDF1BC, -/**/ 0x3F317F66, 0xE7000000, -/**/ 0xBD1798F3, 0xB2B7E8C5, -/**/ 0xBF319EC9, 0x716191A8, -/**/ 0x3F319F64, 0xB5400000, -/**/ 0xBD3F5AB7, 0x35D62ED5, -/**/ 0xBF31BEC5, 0x05D6D85A, -/**/ 0x3F31BF62, 0x7F400000, -/**/ 0x3D1EF6FF, 0xCA7EC7CD, -/**/ 0xBF31DEC0, 0x924DC8D2, -/**/ 0x3F31DF60, 0x45800000, -/**/ 0xBD309BD7, 0xA8550396, -/**/ 0xBF31FEBC, 0x16C6660D, -/**/ 0x3F31FF5E, 0x07800000, -/**/ 0x3D379981, 0xC3E31F70, -/**/ 0xBF321EB7, 0x9340B30B, -/**/ 0x3F321F5B, 0xC5C00000, -/**/ 0x3CD7B300, 0x5FE92B94, -/**/ 0xBF323EB3, 0x07BCB2CC, -/**/ 0x3F323F59, 0x80000000, -/**/ 0xBD364AF9, 0x25A7CF34, -/**/ 0xBF325EAE, 0x743A684F, -/**/ 0x3F325F57, 0x36000000, -/**/ 0x3D339D32, 0x17E48399, -/**/ 0xBF327EA9, 0xD8B9D692, -/**/ 0x3F327F54, 0xE8400000, -/**/ 0xBCFE7B27, 0xCC387BD1, -/**/ 0xBF329EA5, 0x353B0095, -/**/ 0x3F329F52, 0x96800000, -/**/ 0xBD36D8A7, 0x1AE7FA80, -/**/ 0xBF32BEA0, 0x89BDE957, -/**/ 0x3F32BF50, 0x40800000, -/**/ 0x3D34CB54, 0x05CF3DC3, -/**/ 0xBF32DE9B, 0xD64293D7, -/**/ 0x3F32DF4D, 0xE6C00000, -/**/ 0x3CF053EA, 0xD5A4F691, -/**/ 0xBF32FE97, 0x1AC90315, -/**/ 0x3F32FF4B, 0x89000000, -/**/ 0xBD3229E7, 0x5CAE7B16, -/**/ 0xBF331E92, 0x57513A0F, -/**/ 0x3F331F49, 0x27000000, -/**/ 0x3D3B3EE1, 0xAEED4509, -/**/ 0xBF333E8D, 0x8BDB3BC4, -/**/ 0x3F333F46, 0xC1400000, -/**/ 0x3D228133, 0x2E0C2605, -/**/ 0xBF335E88, 0xB8670B34, -/**/ 0x3F335F44, 0x57800000, -/**/ 0xBD20477F, 0xBBD6E280, -/**/ 0xBF337E83, 0xDCF4AB5D, -/**/ 0x3F337F41, 0xE9C00000, -/**/ 0xBD38ED2A, 0xE9CE8AFC, -/**/ 0xBF339E7E, 0xF9841F3F, -/**/ 0x3F339F3F, 0x77C00000, -/**/ 0x3D36E558, 0x39159F9B, -/**/ 0xBF33BE7A, 0x0E1569D9, -/**/ 0x3F33BF3D, 0x02000000, -/**/ 0x3D1D5325, 0x40681634, -/**/ 0xBF33DE75, 0x1AA88E2A, -/**/ 0x3F33DF3A, 0x88400000, -/**/ 0xBD1E775F, 0x7F2112CE, -/**/ 0xBF33FE70, 0x1F3D8F31, -/**/ 0x3F33FF38, 0x0A800000, -/**/ 0xBD35F18B, 0x91F80D1B, -/**/ 0xBF341E6B, 0x1BD46FED, -/**/ 0x3F341F35, 0x88800000, -/**/ 0x3D3C5AAD, 0xFDC3FC2F, -/**/ 0xBF343E66, 0x106D335D, -/**/ 0x3F343F33, 0x02C00000, -/**/ 0x3D2E8FA9, 0x268A89F1, -/**/ 0xBF345E60, 0xFD07DC80, -/**/ 0x3F345F30, 0x79000000, -/**/ 0x3D06B73F, 0x902AC9EE, -/**/ 0xBF347E5B, 0xE1A46E55, -/**/ 0x3F347F2D, 0xEB400000, -/**/ 0xBD21EE30, 0x45C43959, -/**/ 0xBF349E56, 0xBE42EBDC, -/**/ 0x3F349F2B, 0x59800000, -/**/ 0xBD34212B, 0xE8B753E8, -/**/ 0xBF34BE51, 0x92E35813, -/**/ 0x3F34BF28, 0xC3C00000, -/**/ 0xBD3EA653, 0x9D2064DB, -/**/ 0xBF34DE4C, 0x5F85B5F9, -/**/ 0x3F34DF26, 0x29C00000, -/**/ 0x3D377A70, 0x81DCB6FB, -/**/ 0xBF34FE47, 0x242A088D, -/**/ 0x3F34FF23, 0x8C000000, -/**/ 0x3D2C8440, 0x6BB44A6D, -/**/ 0xBF351E41, 0xE0D052CF, -/**/ 0x3F351F20, 0xEA400000, -/**/ 0x3D16C6ED, 0x0048AAF8, -/**/ 0xBF353E3C, 0x957897BD, -/**/ 0x3F353F1E, 0x44800000, -/**/ 0xBD01ADF4, 0xF506A07E, -/**/ 0xBF355E37, 0x4222DA57, -/**/ 0x3F355F1B, 0x9AC00000, -/**/ 0xBD22E69B, 0x4B88A655, -/**/ 0xBF357E31, 0xE6CF1D9B, -/**/ 0x3F357F18, 0xED000000, -/**/ 0xBD3005F2, 0x153DAEB0, -/**/ 0xBF359E2C, 0x837D6488, -/**/ 0x3F359F16, 0x3B400000, -/**/ 0xBD35ECAC, 0x2D5222B4, -/**/ 0xBF35BE27, 0x182DB21E, -/**/ 0x3F35BF13, 0x85800000, -/**/ 0xBD3B267C, 0x2EA6CB14, -/**/ 0xBF35DE21, 0xA4E0095B, -/**/ 0x3F35DF10, 0xCBC00000, -/**/ 0xBD3FB262, 0x5A40A340, -/**/ 0xBF35FE1C, 0x29946D3F, -/**/ 0x3F35FF0E, 0x0DC00000, -/**/ 0x3D3C70A1, 0x0E7B79ED, -/**/ 0xBF361E16, 0xA64AE0C7, -/**/ 0x3F361F0B, 0x4C000000, -/**/ 0x3D39438D, 0xC9C8D263, -/**/ 0xBF363E11, 0x1B0366F4, -/**/ 0x3F363F08, 0x86400000, -/**/ 0x3D36C763, 0x9582CD0C, -/**/ 0xBF365E0B, 0x87BE02C5, -/**/ 0x3F365F05, 0xBC800000, -/**/ 0x3D34FD22, 0x2F24F1F9, -/**/ 0xBF367E05, 0xEC7AB737, -/**/ 0x3F367F02, 0xEEC00000, -/**/ 0x3D33E5C9, 0x53CAEA94, -/**/ 0xBF369E00, 0x4939874A, -/**/ 0x3F369F00, 0x1D000000, -/**/ 0x3D338258, 0xC03081D0, -/**/ 0xBF36BDFA, 0x9DFA75FE, -/**/ 0x3F36BEFD, 0x47400000, -/**/ 0x3D33D3D0, 0x30B1A458, -/**/ 0xBF36DDF4, 0xEABD8651, -/**/ 0x3F36DEFA, 0x6D800000, -/**/ 0x3D34DB2F, 0x614A60C1, -/**/ 0xBF36FDEF, 0x2F82BB41, -/**/ 0x3F36FEF7, 0x8FC00000, -/**/ 0x3D369976, 0x0D96E7B8, -/**/ 0xBF371DE9, 0x6C4A17CF, -/**/ 0x3F371EF4, 0xAE000000, -/**/ 0x3D390FA3, 0xF0D38C30, -/**/ 0xBF373DE3, 0xA1139EF8, -/**/ 0x3F373EF1, 0xC8400000, -/**/ 0x3D3C3EB8, 0xC5DCC397, -/**/ 0xBF375DDD, 0xCDDF53BC, -/**/ 0x3F375EEE, 0xDEC00000, -/**/ 0xBD3FD84B, 0xB8D0D9FD, -/**/ 0xBF377DD7, 0xF2AD3919, -/**/ 0x3F377EEB, 0xF1000000, -/**/ 0xBD3B3469, 0xD11891A0, -/**/ 0xBF379DD2, 0x0F7D520F, -/**/ 0x3F379EE8, 0xFF400000, -/**/ 0xBD35D4A1, 0xC93D855B, -/**/ 0xBF37BDCC, 0x244FA19D, -/**/ 0x3F37BEE6, 0x09800000, -/**/ 0xBD2F6FE7, 0xCFC56806, -/**/ 0xBF37DDC6, 0x31242AC1, -/**/ 0x3F37DEE3, 0x0FC00000, -/**/ 0xBD21BAC0, 0xE815F202, -/**/ 0xBF37FDC0, 0x35FAF079, -/**/ 0x3F37FEE0, 0x12000000, -/**/ 0xBCF43E7B, 0x5190C28B, -/**/ 0xBF381DBA, 0x32D3F5C6, -/**/ 0x3F381EDD, 0x10400000, -/**/ 0x3D1C55D8, 0x34C1F9E9, -/**/ 0xBF383DB4, 0x27AF3DA6, -/**/ 0x3F383EDA, 0x0A800000, -/**/ 0x3D302FB8, 0x8AAF36D4, -/**/ 0xBF385DAE, 0x148CCB18, -/**/ 0x3F385ED7, 0x00C00000, -/**/ 0x3D3A0BDF, 0x7AE0D0F8, -/**/ 0xBF387DA7, 0xF96CA11B, -/**/ 0x3F387ED3, 0xF3400000, -/**/ 0xBD3B5515, 0x6B1CDAAF, -/**/ 0xBF389DA1, 0xD64EC2AD, -/**/ 0x3F389ED0, 0xE1800000, -/**/ 0xBD2FE44C, 0xE1179E5E, -/**/ 0xBF38BD9B, 0xAB3332CD, -/**/ 0x3F38BECD, 0xCBC00000, -/**/ 0xBD0E529E, 0xF86F56EC, -/**/ 0xBF38DD95, 0x7819F47A, -/**/ 0x3F38DECA, 0xB2000000, -/**/ 0x3D2246C3, 0xFEB631AB, -/**/ 0xBF38FD8F, 0x3D030AB4, -/**/ 0x3F38FEC7, 0x94400000, -/**/ 0x3D36D7FA, 0xE04DA791, -/**/ 0xBF391D88, 0xF9EE7878, -/**/ 0x3F391EC4, 0x72C00000, -/**/ 0xBD3AAB89, 0x86F7ADBB, -/**/ 0xBF393D82, 0xAEDC40C7, -/**/ 0x3F393EC1, 0x4D000000, -/**/ 0xBD26CC57, 0x032C6155, -/**/ 0xBF395D7C, 0x5BCC669D, -/**/ 0x3F395EBE, 0x23400000, -/**/ 0x3D12A452, 0x93C3EB3D, -/**/ 0xBF397D76, 0x00BEECFB, -/**/ 0x3F397EBA, 0xF5800000, -/**/ 0x3D358336, 0xA0BCD695, -/**/ 0xBF399D6F, 0x9DB3D6E0, -/**/ 0x3F399EB7, 0xC4000000, -/**/ 0xBD38D6C5, 0xDA737570, -/**/ 0xBF39BD69, 0x32AB2749, -/**/ 0x3F39BEB4, 0x8E400000, -/**/ 0xBD198F84, 0x65026C7D, -/**/ 0xBF39DD62, 0xBFA4E136, -/**/ 0x3F39DEB1, 0x54800000, -/**/ 0x3D29B9C9, 0x2EA9B41A, -/**/ 0xBF39FD5C, 0x44A107A5, -/**/ 0x3F39FEAE, 0x17000000, -/**/ 0xBD3F1375, 0x16137ACF, -/**/ 0xBF3A1D55, 0xC19F9D96, -/**/ 0x3F3A1EAA, 0xD5400000, -/**/ 0xBD2467DC, 0xDE73AFA0, -/**/ 0xBF3A3D4F, 0x36A0A607, -/**/ 0x3F3A3EA7, 0x8F800000, -/**/ 0x3D26F8F0, 0x7B8357C6, -/**/ 0xBF3A5D48, 0xA3A423F7, -/**/ 0x3F3A5EA4, 0x46000000, -/**/ 0xBD3E0141, 0x5DA0DFB7, -/**/ 0xBF3A7D42, 0x08AA1A64, -/**/ 0x3F3A7EA0, 0xF8400000, -/**/ 0xBD1AB06E, 0x41050D29, -/**/ 0xBF3A9D3B, 0x65B28C4E, -/**/ 0x3F3A9E9D, 0xA6800000, -/**/ 0x3D317CE9, 0x56A0E005, -/**/ 0xBF3ABD34, 0xBABD7CB3, -/**/ 0x3F3ABE9A, 0x51000000, -/**/ 0xBD358532, 0xF899EF39, -/**/ 0xBF3ADD2E, 0x07CAEE92, -/**/ 0x3F3ADE96, 0xF7400000, -/**/ 0x3D113A3C, 0xC83BF5C2, -/**/ 0xBF3AFD27, 0x4CDAE4EA, -/**/ 0x3F3AFE93, 0x99800000, -/**/ 0x3D3EF92F, 0x863C7C8E, -/**/ 0xBF3B1D20, 0x89ED62B9, -/**/ 0x3F3B1E90, 0x38000000, -/**/ 0xBD161149, 0x3341CC3C, -/**/ 0xBF3B3D19, 0xBF026AFE, -/**/ 0x3F3B3E8C, 0xD2400000, -/**/ 0x3D36D709, 0x67C955DF, -/**/ 0xBF3B5D12, 0xEC1A00B8, -/**/ 0x3F3B5E89, 0x68C00000, -/**/ 0xBD27E77B, 0x5AE9B17A, -/**/ 0xBF3B7D0C, 0x113426E6, -/**/ 0x3F3B7E85, 0xFB000000, -/**/ 0x3D321C58, 0x219679DE, -/**/ 0xBF3B9D05, 0x2E50E086, -/**/ 0x3F3B9E82, 0x89800000, -/**/ 0xBD2DEF6A, 0xFAA62113, -/**/ 0xBF3BBCFE, 0x43703097, -/**/ 0x3F3BBE7F, 0x13C00000, -/**/ 0x3D30D119, 0x23305306, -/**/ 0xBF3BDCF7, 0x50921A17, -/**/ 0x3F3BDE7B, 0x9A400000, -/**/ 0xBD2D1078, 0x9FBACE27, -/**/ 0xBF3BFCF0, 0x55B6A006, -/**/ 0x3F3BFE78, 0x1C800000, -/**/ 0x3D32FD49, 0xD625DF1E, -/**/ 0xBF3C1CE9, 0x52DDC563, -/**/ 0x3F3C1E74, 0x9B000000, -/**/ 0xBD253AA9, 0x7D07255B, -/**/ 0xBF3C3CE2, 0x48078D2B, -/**/ 0x3F3C3E71, 0x15400000, -/**/ 0x3D38A8E7, 0x9E08B538, -/**/ 0xBF3C5CDB, 0x3533FA5D, -/**/ 0x3F3C5E6D, 0x8BC00000, -/**/ 0xBD09780B, 0x45956AFC, -/**/ 0xBF3C7CD4, 0x1A630FF9, -/**/ 0x3F3C7E69, 0xFE400000, -/**/ 0xBD3E2410, 0x2792F44E, -/**/ 0xBF3C9CCC, 0xF794D0FC, -/**/ 0x3F3C9E66, 0x6C800000, -/**/ 0x3D1F2AEC, 0x30AB4456, -/**/ 0xBF3CBCC5, 0xCCC94066, -/**/ 0x3F3CBE62, 0xD7000000, -/**/ 0xBD3161A0, 0x231641D5, -/**/ 0xBF3CDCBE, 0x9A006135, -/**/ 0x3F3CDE5F, 0x3D400000, -/**/ 0x3D3657DD, 0xF4AD1934, -/**/ 0xBF3CFCB7, 0x5F3A3668, -/**/ 0x3F3CFE5B, 0x9FC00000, -/**/ 0xBCF07CB0, 0x2E7AC798, -/**/ 0xBF3D1CB0, 0x1C76C2FD, -/**/ 0x3F3D1E57, 0xFE400000, -/**/ 0xBD377F9B, 0x6090F643, -/**/ 0xBF3D3CA8, 0xD1B609F3, -/**/ 0x3F3D3E54, 0x58800000, -/**/ 0x3D32F16C, 0x849503E6, -/**/ 0xBF3D5CA1, 0x7EF80E49, -/**/ 0x3F3D5E50, 0xAF000000, -/**/ 0xBCFB3B3A, 0xAF1CA4EA, -/**/ 0xBF3D7C9A, 0x243CD2FE, -/**/ 0x3F3D7E4D, 0x01800000, -/**/ 0xBD356DFC, 0x4701415B, -/**/ 0xBF3D9C92, 0xC1845B0F, -/**/ 0x3F3D9E49, 0x4FC00000, -/**/ 0x3D37C392, 0x582AEA48, -/**/ 0xBF3DBC8B, 0x56CEA97C, -/**/ 0x3F3DBE45, 0x9A400000, -/**/ 0x3D1787DF, 0x67DCC15E, -/**/ 0xBF3DDC83, 0xE41BC143, -/**/ 0x3F3DDE41, 0xE0C00000, -/**/ 0xBD262398, 0x352F961F, -/**/ 0xBF3DFC7C, 0x696BA563, -/**/ 0x3F3DFE3E, 0x23400000, -/**/ 0xBD3B16B9, 0xDEDD373A, -/**/ 0xBF3E1C74, 0xE6BE58DA, -/**/ 0x3F3E1E3A, 0x61800000, -/**/ 0x3D35D42E, 0x336BE94B, -/**/ 0xBF3E3C6D, 0x5C13DEA7, -/**/ 0x3F3E3E36, 0x9C000000, -/**/ 0x3D1EBFAF, 0x08A303A2, -/**/ 0xBF3E5C65, 0xC96C39C9, -/**/ 0x3F3E5E32, 0xD2800000, -/**/ 0xBD160A06, 0x34856362, -/**/ 0xBF3E7C5E, 0x2EC76D3D, -/**/ 0x3F3E7E2F, 0x05000000, -/**/ 0xBD31C21A, 0x154CDF1A, -/**/ 0xBF3E9C56, 0x8C257C04, -/**/ 0x3F3E9E2B, 0x33800000, -/**/ 0xBD3D0DDE, 0x31941F7F, -/**/ 0xBF3EBC4E, 0xE186691B, -/**/ 0x3F3EBE27, 0x5DC00000, -/**/ 0x3D389B31, 0xC26EC60D, -/**/ 0xBF3EDC47, 0x2EEA3781, -/**/ 0x3F3EDE23, 0x84400000, -/**/ 0x3D2E742A, 0xD583BEF8, -/**/ 0xBF3EFC3F, 0x7450EA34, -/**/ 0x3F3EFE1F, 0xA6C00000, -/**/ 0x3D1B3F31, 0xAC2DA351, -/**/ 0xBF3F1C37, 0xB1BA8433, -/**/ 0x3F3F1E1B, 0xC5400000, -/**/ 0xBCE45533, 0x2DC67430, -/**/ 0xBF3F3C2F, 0xE727087C, -/**/ 0x3F3F3E17, 0xDFC00000, -/**/ 0xBD1C7133, 0xFF1174AE, -/**/ 0xBF3F5C28, 0x14967A0F, -/**/ 0x3F3F5E13, 0xF6400000, -/**/ 0xBD29383C, 0x4AE098DC, -/**/ 0xBF3F7C20, 0x3A08DBE9, -/**/ 0x3F3F7E10, 0x08C00000, -/**/ 0xBD31211D, 0x684B0B3B, -/**/ 0xBF3F9C18, 0x577E3109, -/**/ 0x3F3F9E0C, 0x17400000, -/**/ 0xBD34AA4B, 0x268D7464, -/**/ 0xBF3FBC10, 0x6CF67C6E, -/**/ 0x3F3FBE08, 0x21C00000, -/**/ 0xBD3736A7, 0xBED03388, -/**/ 0xBF3FDC08, 0x7A71C116, -/**/ 0x3F3FDE04, 0x28400000, -/**/ 0xBD38C533, 0x900BC4E5, -/**/ 0xBF3FFC00, 0x7FF00200, -/**/ 0x3F3FFE00, 0x2AC00000, -/**/ 0xBD3954EE, 0xF9987527, -/**/ 0xBF400DFC, 0x3EB8A115, -/**/ 0x3F400EFE, 0x14A00000, -/**/ 0xBD38E4DA, 0x5B2E613B, -/**/ 0xBF401DF8, 0x397AC249, -/**/ 0x3F401EFC, 0x11E00000, -/**/ 0xBD3773F6, 0x14E5761B, -/**/ 0xBF402DF4, 0x303E661C, -/**/ 0x3F402EFA, 0x0D200000, -/**/ 0xBD350142, 0x873570A0, -/**/ 0xBF403DF0, 0x23038E0C, -/**/ 0x3F403EF8, 0x06600000, -/**/ 0xBD318BC0, 0x12F5DD53, -/**/ 0xBF404DEC, 0x11CA3B9A, -/**/ 0x3F404EF5, 0xFDA00000, -/**/ 0xBD2A24DE, 0x32BC307C, -/**/ 0xBF405DE7, 0xFC927044, -/**/ 0x3F405EF3, 0xF2E00000, -/**/ 0xBD1E513F, 0xF01532DA, -/**/ 0xBF406DE3, 0xE35C2D8A, -/**/ 0x3F406EF1, 0xE6200000, -/**/ 0xBCF10631, 0xCE27534E, -/**/ 0xBF407DDF, 0xC62774EA, -/**/ 0x3F407EEF, 0xD7600000, -/**/ 0x3D19E95C, 0x86CE9380, -/**/ 0xBF408DDB, 0xA4F447E4, -/**/ 0x3F408EED, 0xC6A00000, -/**/ 0x3D2E19BC, 0xBA0CD2C3, -/**/ 0xBF409DD7, 0x7FC2A7F8, -/**/ 0x3F409EEB, 0xB3E00000, -/**/ 0x3D38A832, 0x31FF7199, -/**/ 0xBF40ADD3, 0x569296A4, -/**/ 0x3F40AEE9, 0x9F400000, -/**/ 0xBD3CB2AD, 0xC2D77791, -/**/ 0xBF40BDCF, 0x29641567, -/**/ 0x3F40BEE7, 0x88800000, -/**/ 0xBD3102C1, 0xE5545563, -/**/ 0xBF40CDCA, 0xF83725C2, -/**/ 0x3F40CEE5, 0x6FC00000, -/**/ 0xBD111C2A, 0x66B3E48D, -/**/ 0xBF40DDC6, 0xC30BC932, -/**/ 0x3F40DEE3, 0x55000000, -/**/ 0x3D2302EF, 0x7711FC2A, -/**/ 0xBF40EDC2, 0x89E20138, -/**/ 0x3F40EEE1, 0x38400000, -/**/ 0x3D3857C4, 0xB558238E, -/**/ 0xBF40FDBE, 0x4CB9CF52, -/**/ 0x3F40FEDF, 0x19A00000, -/**/ 0xBD37C324, 0x1194C2E1, -/**/ 0xBF410DBA, 0x0B933501, -/**/ 0x3F410EDC, 0xF8E00000, -/**/ 0xBD1B390B, 0xFBCAF285, -/**/ 0xBF411DB5, 0xC66E33C2, -/**/ 0x3F411EDA, 0xD6200000, -/**/ 0x3D266ECF, 0x0E52C3A4, -/**/ 0xBF412DB1, 0x7D4ACD15, -/**/ 0x3F412ED8, 0xB1600000, -/**/ 0x3D3E4EDB, 0x1A4AF71D, -/**/ 0xBF413DAD, 0x30290279, -/**/ 0x3F413ED6, 0x8AC00000, -/**/ 0xBD2B0DD1, 0x58C4D599, -/**/ 0xBF414DA8, 0xDF08D56E, -/**/ 0x3F414ED4, 0x62000000, -/**/ 0x3D1EDC6F, 0x2FB4061D, -/**/ 0xBF415DA4, 0x89EA4773, -/**/ 0x3F415ED2, 0x37400000, -/**/ 0x3D3E09E8, 0x1BA53538, -/**/ 0xBF416DA0, 0x30CD5A06, -/**/ 0x3F416ED0, 0x0AA00000, -/**/ 0xBD251B08, 0x4A5B4574, -/**/ 0xBF417D9B, 0xD3B20EA8, -/**/ 0x3F417ECD, 0xDBE00000, -/**/ 0x3D2BE3AD, 0x4241B57B, -/**/ 0xBF418D97, 0x729866D7, -/**/ 0x3F418ECB, 0xAB400000, -/**/ 0xBD387707, 0xFA22BD16, -/**/ 0xBF419D93, 0x0D806412, -/**/ 0x3F419EC9, 0x78800000, -/**/ 0x3D01C6FC, 0xFFA2FC2F, -/**/ 0xBF41AD8E, 0xA46A07D9, -/**/ 0x3F41AEC7, 0x43C00000, -/**/ 0x3D3E028D, 0x05F32EE8, -/**/ 0xBF41BD8A, 0x375553AB, -/**/ 0x3F41BEC5, 0x0D200000, -/**/ 0xBD146400, 0xC7E46F2B, -/**/ 0xBF41CD85, 0xC6424907, -/**/ 0x3F41CEC2, 0xD4600000, -/**/ 0x3D38E737, 0x8DFCE791, -/**/ 0xBF41DD81, 0x5130E96B, -/**/ 0x3F41DEC0, 0x99C00000, -/**/ 0xBD1FEF30, 0x92F4A6CE, -/**/ 0xBF41ED7C, 0xD8213659, -/**/ 0x3F41EEBE, 0x5D000000, -/**/ 0x3D383EF4, 0x4AE68315, -/**/ 0xBF41FD78, 0x5B13314D, -/**/ 0x3F41FEBC, 0x1E600000, -/**/ 0xBD199E1E, 0x39A8276A, -/**/ 0xBF420D73, 0xDA06DBC8, -/**/ 0x3F420EB9, 0xDDA00000, -/**/ 0x3D3C11BF, 0xE39F6D77, -/**/ 0xBF421D6F, 0x54FC3749, -/**/ 0x3F421EB7, 0x9B000000, -/**/ 0xBCD50D72, 0xC3A8C440, -/**/ 0xBF422D6A, 0xCBF3454F, -/**/ 0x3F422EB5, 0x56600000, -/**/ 0xBD3B9869, 0x06E59170, -/**/ 0xBF423D66, 0x3EEC0759, -/**/ 0x3F423EB3, 0x0FA00000, -/**/ 0x3D248C4B, 0x86930551, -/**/ 0xBF424D61, 0xADE67EE6, -/**/ 0x3F424EB0, 0xC7000000, -/**/ 0xBD2D6F13, 0xB3649FF7, -/**/ 0xBF425D5D, 0x18E2AD76, -/**/ 0x3F425EAE, 0x7C400000, -/**/ 0x3D396F87, 0xB496441D, -/**/ 0xBF426D58, 0x7FE09487, -/**/ 0x3F426EAC, 0x2FA00000, -/**/ 0x3D05E2D0, 0x01961A2F, -/**/ 0xBF427D53, 0xE2E03598, -/**/ 0x3F427EA9, 0xE1000000, -/**/ 0xBD32D013, 0x652D1720, -/**/ 0xBF428D4F, 0x41E1922A, -/**/ 0x3F428EA7, 0x90400000, -/**/ 0x3D38CB3F, 0x15C6A78A, -/**/ 0xBF429D4A, 0x9CE4ABBA, -/**/ 0x3F429EA5, 0x3DA00000, -/**/ 0x3D163D44, 0x07F8A52A, -/**/ 0xBF42AD45, 0xF3E983C8, -/**/ 0x3F42AEA2, 0xE9000000, -/**/ 0xBD2905BC, 0x1FEC6070, -/**/ 0xBF42BD41, 0x46F01BD4, -/**/ 0x3F42BEA0, 0x92600000, -/**/ 0xBD3D6A4E, 0x8FE5CB8E, -/**/ 0xBF42CD3C, 0x95F8755C, -/**/ 0x3F42CE9E, 0x39A00000, -/**/ 0x3D32D9FF, 0x120028B6, -/**/ 0xBF42DD37, 0xE10291DF, -/**/ 0x3F42DE9B, 0xDF000000, -/**/ 0x3D112C29, 0x94B2D8A6, -/**/ 0xBF42ED33, 0x280E72DD, -/**/ 0x3F42EE99, 0x82600000, -/**/ 0xBD222C5A, 0x0E9DC27F, -/**/ 0xBF42FD2E, 0x6B1C19D4, -/**/ 0x3F42FE97, 0x23C00000, -/**/ 0xBD3548A7, 0xA4C12307, -/**/ 0xBF430D29, 0xAA2B8844, -/**/ 0x3F430E94, 0xC3000000, -/**/ 0x3D3FB49A, 0x1B27A40C, -/**/ 0xBF431D24, 0xE53CBFAC, -/**/ 0x3F431E92, 0x60600000, -/**/ 0x3D35E297, 0xC65D601D, -/**/ 0xBF432D20, 0x1C4FC18B, -/**/ 0x3F432E8F, 0xFBC00000, -/**/ 0x3D2A84A1, 0xD4E46CD5, -/**/ 0xBF433D1B, 0x4F648F60, -/**/ 0x3F433E8D, 0x95200000, -/**/ 0x3D175314, 0x526215F8, -/**/ 0xBF434D16, 0x7E7B2AAB, -/**/ 0x3F434E8B, 0x2C800000, -/**/ 0xBCD9430B, 0x9746A94C, -/**/ 0xBF435D11, 0xA99394E9, -/**/ 0x3F435E88, 0xC1E00000, -/**/ 0xBD15A88D, 0x47EF6144, -/**/ 0xBF436D0C, 0xD0ADCF9B, -/**/ 0x3F436E86, 0x55400000, -/**/ 0xBD227301, 0x94614FFB, -/**/ 0xBF437D07, 0xF3C9DC3F, -/**/ 0x3F437E83, 0xE6A00000, -/**/ 0xBD27A44A, 0x16908831, -/**/ 0xBF438D03, 0x12E7BC55, -/**/ 0x3F438E81, 0x76000000, -/**/ 0xBD2A6621, 0x13DE59AC, -/**/ 0xBF439CFE, 0x2E07715C, -/**/ 0x3F439E7F, 0x03600000, -/**/ 0xBD2AB687, 0x76635000, -/**/ 0xBF43ACF9, 0x4528FCD2, -/**/ 0x3F43AE7C, 0x8EC00000, -/**/ 0xBD28937E, 0x28F7818F, -/**/ 0xBF43BCF4, 0x584C6037, -/**/ 0x3F43BE7A, 0x18200000, -/**/ 0xBD23FB06, 0x17328F27, -/**/ 0xBF43CCEF, 0x67719D0A, -/**/ 0x3F43CE77, 0x9F800000, -/**/ 0xBD19D640, 0x5AD74747, -/**/ 0xBF43DCEA, 0x7298B4CA, -/**/ 0x3F43DE75, 0x24E00000, -/**/ 0xBCFB0E6A, 0xC5CB9C74, -/**/ 0xBF43ECE5, 0x79C1A8F6, -/**/ 0x3F43EE72, 0xA8400000, -/**/ 0x3D1145E2, 0xF21B8682, -/**/ 0xBF43FCE0, 0x7CEC7B0D, -/**/ 0x3F43FE70, 0x29A00000, -/**/ 0x3D27251B, 0x59543A06, -/**/ 0xBF440CDB, 0x7C192C8E, -/**/ 0x3F440E6D, 0xA9000000, -/**/ 0x3D341357, 0xAC6250B6, -/**/ 0xBF441CD6, 0x7747BEF8, -/**/ 0x3F441E6B, 0x26600000, -/**/ 0x3D3DD4D6, 0x43A510F7, -/**/ 0xBF442CD1, 0x6E7833CB, -/**/ 0x3F442E68, 0xA1E00000, -/**/ 0xBD3727F7, 0x05F7D1E1, -/**/ 0xBF443CCC, 0x61AA8C85, -/**/ 0x3F443E66, 0x1B400000, -/**/ 0xBD25C421, 0x527C9668, -/**/ 0xBF444CC7, 0x50DECAA5, -/**/ 0x3F444E63, 0x92A00000, -/**/ 0x3D053C47, 0x053F70AC, -/**/ 0xBF445CC2, 0x3C14EFAB, -/**/ 0x3F445E61, 0x08000000, -/**/ 0x3D3175D5, 0x1E315FBB, -/**/ 0xBF446CBD, 0x234CFD15, -/**/ 0x3F446E5E, 0x7B800000, -/**/ 0xBD3E762C, 0x6A8B33AC, -/**/ 0xBF447CB8, 0x0686F463, -/**/ 0x3F447E5B, 0xECE00000, -/**/ 0xBD2A36F8, 0x67AD9900, -/**/ 0xBF448CB2, 0xE5C2D713, -/**/ 0x3F448E59, 0x5C400000, -/**/ 0x3D161B95, 0x1E974853, -/**/ 0xBF449CAD, 0xC100A6A5, -/**/ 0x3F449E56, 0xC9A00000, -/**/ 0x3D3971F7, 0x8CE22250, -/**/ 0xBF44ACA8, 0x98406498, -/**/ 0x3F44AE54, 0x35200000, -/**/ 0xBD315945, 0xDF8A23F8, -/**/ 0xBF44BCA3, 0x6B82126A, -/**/ 0x3F44BE51, 0x9E800000, -/**/ 0x3D1498B2, 0x1A63D360, -/**/ 0xBF44CC9E, 0x3AC5B19B, -/**/ 0x3F44CE4F, 0x05E00000, -/**/ 0x3D3CF14E, 0x4323A054, -/**/ 0xBF44DC99, 0x060B43AA, -/**/ 0x3F44DE4C, 0x6B600000, -/**/ 0xBD23EDC2, 0x4CE35F94, -/**/ 0xBF44EC93, 0xCD52CA15, -/**/ 0x3F44EE49, 0xCEC00000, -/**/ 0x3D306E9D, 0xCCF1B48E, -/**/ 0xBF44FC8E, 0x909C465C, -/**/ 0x3F44FE47, 0x30400000, -/**/ 0xBD33DD35, 0x5FF9440B, -/**/ 0xBF450C89, 0x4FE7B9FF, -/**/ 0x3F450E44, 0x8FA00000, -/**/ 0x3D224D49, 0xAA4D276D, -/**/ 0xBF451C84, 0x0B35267A, -/**/ 0x3F451E41, 0xED200000, -/**/ 0xBD3884D4, 0x11B557F9, -/**/ 0xBF452C7E, 0xC2848D4F, -/**/ 0x3F452E3F, 0x48800000, -/**/ 0x3D1C857D, 0xB43290C4, -/**/ 0xBF453C79, 0x75D5EFFC, -/**/ 0x3F453E3C, 0xA2000000, -/**/ 0xBD37E5C1, 0x2D598D3C, -/**/ 0xBF454C74, 0x25294FFF, -/**/ 0x3F454E39, 0xF9600000, -/**/ 0x3D24CD93, 0x3FE47B89, -/**/ 0xBF455C6E, 0xD07EAED8, -/**/ 0x3F455E37, 0x4EE00000, -/**/ 0xBD31F800, 0xAA959122, -/**/ 0xBF456C69, 0x77D60E06, -/**/ 0x3F456E34, 0xA2400000, -/**/ 0x3D32FEDF, 0x7329AF92, -/**/ 0xBF457C64, 0x1B2F6F08, -/**/ 0x3F457E31, 0xF3C00000, -/**/ 0xBD1ACE5A, 0x1C545A6F, -/**/ 0xBF458C5E, 0xBA8AD35D, -/**/ 0x3F458E2F, 0x43400000, -/**/ 0xBD3F0E63, 0x19F6B9EF, -/**/ 0xBF459C59, 0x55E83C84, -/**/ 0x3F459E2C, 0x90A00000, -/**/ 0x3D23DEF2, 0x73005F6F, -/**/ 0xBF45AC53, 0xED47ABFB, -/**/ 0x3F45AE29, 0xDC200000, -/**/ 0xBD277204, 0x1C295DE7, -/**/ 0xBF45BC4E, 0x80A92343, -/**/ 0x3F45BE27, 0x25800000, -/**/ 0x3D3FF92A, 0x8D869589, -/**/ 0xBF45CC49, 0x100CA3D9, -/**/ 0x3F45CE24, 0x6D000000, -/**/ 0x3D2A0DFD, 0x145C5335, -/**/ 0xBF45DC43, 0x9B722F3C, -/**/ 0x3F45DE21, 0xB2800000, -/**/ 0xBD123A1A, 0x6A8614B3, -/**/ 0xBF45EC3E, 0x22D9C6ED, -/**/ 0x3F45EE1E, 0xF6000000, -/**/ 0xBD34C665, 0x63CBC7E7, -/**/ 0xBF45FC38, 0xA6436C69, -/**/ 0x3F45FE1C, 0x37600000, -/**/ 0x3D3C6061, 0xAB6C51D7, -/**/ 0xBF460C33, 0x25AF2130, -/**/ 0x3F460E19, 0x76E00000, -/**/ 0x3D2DCD9C, 0x1EC7F453, -/**/ 0xBF461C2D, 0xA11CE6C1, -/**/ 0x3F461E16, 0xB4600000, -/**/ 0x3D066EFA, 0x20C52899, -/**/ 0xBF462C28, 0x188CBE9A, -/**/ 0x3F462E13, 0xEFE00000, -/**/ 0xBD1FA5AC, 0xEB5FDD5C, -/**/ 0xBF463C22, 0x8BFEAA3B, -/**/ 0x3F463E11, 0x29600000, -/**/ 0xBD313E11, 0xF22FE2BC, -/**/ 0xBF464C1C, 0xFB72AB23, -/**/ 0x3F464E0E, 0x60E00000, -/**/ 0xBD392F15, 0x6710E251, -/**/ 0xBF465C17, 0x66E8C2D0, -/**/ 0x3F465E0B, 0x96600000, -/**/ 0xBD3FBB76, 0x1EFC78A7, -/**/ 0xBF466C11, 0xCE60F2C1, -/**/ 0x3F466E08, 0xC9C00000, -/**/ 0x3D3B1DCB, 0x602C1A84, -/**/ 0xBF467C0C, 0x31DB3C76, -/**/ 0x3F467E05, 0xFB400000, -/**/ 0x3D375DAE, 0x9027DA74, -/**/ 0xBF468C06, 0x9157A16E, -/**/ 0x3F468E03, 0x2AC00000, -/**/ 0x3D350532, 0xEA560DA0, -/**/ 0xBF469C00, 0xECD62326, -/**/ 0x3F469E00, 0x58400000, -/**/ 0x3D341557, 0xE7B63DE2 } }; - -#else -#ifdef LITTLE_ENDI -static const union {int4 i[5800]; double x[2900];} ui = { .i = { -/**/ 0x00000000, 0x3FF6A000, -/**/ 0x3729043E, 0x3F33CD15, -/**/ 0x0B3AB000, 0xBFD63003, -/**/ 0xE731AE00, 0x3D2DB623, -/**/ 0x00000000, 0x3FF69800, -/**/ 0xCC7267D0, 0x3F33F349, -/**/ 0xCDB03000, 0xBFD61965, -/**/ 0x603C488E, 0x3D2F08AD, -/**/ 0x00000000, 0x3FF69000, -/**/ 0x8D0BFD2E, 0x3F3473A8, -/**/ 0x8AF09000, 0xBFD602D0, -/**/ 0x76DF3F65, 0xBD1EBE91, -/**/ 0x00000000, 0x3FF68800, -/**/ 0x390B9ED0, 0x3F354DD2, -/**/ 0x3D5C3000, 0xBFD5EC43, -/**/ 0x1229D17F, 0xBD36B71A, -/**/ 0x00000000, 0x3FF68000, -/**/ 0x16816817, 0x3F368168, -/**/ 0xDF596000, 0xBFD5D5BD, -/**/ 0x08A465DC, 0x3D0A0B2A, -/**/ 0x00000000, 0x3FF67800, -/**/ 0xF08C7765, 0x3F380E0B, -/**/ 0x6B544000, 0xBFD5BF40, -/**/ 0xEB68981C, 0x3D227023, -/**/ 0x00000000, 0x3FF67000, -/**/ 0x16719F36, 0x3F39F360, -/**/ 0xDBBEE000, 0xBFD5A8CA, -/**/ 0x0AF7ECF8, 0x3CF7C79B, -/**/ 0x00000000, 0x3FF66800, -/**/ 0x5AB40167, 0x3F3C3107, -/**/ 0x2B113000, 0xBFD5925D, -/**/ 0xA7A56F34, 0x3D369BF5, -/**/ 0x00000000, 0x3FF66000, -/**/ 0x122F9016, 0x3F3EC6A5, -/**/ 0x53C8D000, 0xBFD57BF7, -/**/ 0xEE5D40EF, 0xBD1FADED, -/**/ 0x00000000, 0x3FF65C00, -/**/ 0xECCA9097, 0xBF3E4C22, -/**/ 0x50695000, 0xBFD56599, -/**/ 0x2BADC774, 0xBD14C5FD, -/**/ 0x00000000, 0x3FF65400, -/**/ 0x4B55CC62, 0xBF3B07AC, -/**/ 0x1B7BE000, 0xBFD54F43, -/**/ 0xC0910952, 0xBD1A8954, -/**/ 0x00000000, 0x3FF64C00, -/**/ 0x32DA090E, 0xBF376C52, -/**/ 0xAF8F7000, 0xBFD538F4, -/**/ 0xE45547CE, 0xBD27EC02, -/**/ 0x00000000, 0x3FF64400, -/**/ 0x4DE9BD38, 0xBF337A6F, -/**/ 0x0738A000, 0xBFD522AE, -/**/ 0x8164C759, 0xBD2EBE70, -/**/ 0x00000000, 0x3FF63C00, -/**/ 0x923C708B, 0xBF2E64BB, -/**/ 0x1D11C000, 0xBFD50C6F, -/**/ 0x7E827C2C, 0x3D3A0E6B, -/**/ 0x00000000, 0x3FF63400, -/**/ 0xA7E43FD4, 0xBF2528EE, -/**/ 0xEBBAA000, 0xBFD4F637, -/**/ 0xCB3124B9, 0x3D3FC158, -/**/ 0x00000000, 0x3FF62C00, -/**/ 0x86689DF7, 0xBF168454, -/**/ 0x6DD8C000, 0xBFD4E008, -/**/ 0xA1E44788, 0x3D34D692, -/**/ 0x00000000, 0x3FF62400, -/**/ 0x77016240, 0xBED623FA, -/**/ 0x9E173000, 0xBFD4C9E0, -/**/ 0x1B0AD8A4, 0x3D2E2089, -/**/ 0x00000000, 0x3FF61C00, -/**/ 0x58715130, 0x3F151300, -/**/ 0x77268000, 0xBFD4B3C0, -/**/ 0x81052B9F, 0x3D165B46, -/**/ 0x00000000, 0x3FF61400, -/**/ 0x35D2754E, 0x3F266D06, -/**/ 0xF3BCC000, 0xBFD49DA7, -/**/ 0x4DAF4B9A, 0xBD307B33, -/**/ 0x00000000, 0x3FF60C00, -/**/ 0xDA197F23, 0x3F317C61, -/**/ 0x0E958000, 0xBFD48797, -/**/ 0x465CF25F, 0xBD3DC1B8, -/**/ 0x00000000, 0x3FF60400, -/**/ 0x81605816, 0x3F381605, -/**/ 0xC271C000, 0xBFD4718D, -/**/ 0xFB4C14C5, 0xBD306C18, -/**/ 0x00000000, 0x3FF5FC00, -/**/ 0xB5C6F559, 0x3F3F0317, -/**/ 0x0A17E000, 0xBFD45B8C, -/**/ 0xE7D0A853, 0x3D0D9120, -/**/ 0x00000000, 0x3FF5F800, -/**/ 0x6D2041E3, 0xBF39BCBD, -/**/ 0xE053A000, 0xBFD44591, -/**/ 0x92923D88, 0x3D06E958, -/**/ 0x00000000, 0x3FF5F000, -/**/ 0x5604CC40, 0xBF3229CF, -/**/ 0x3FF62000, 0xBFD42F9F, -/**/ 0x0F7D3354, 0xBD390644, -/**/ 0x00000000, 0x3FF5E800, -/**/ 0xFD431489, 0xBF2488E5, -/**/ 0x23D5F000, 0xBFD419B4, -/**/ 0x226DE3EC, 0x3D3CE379, -/**/ 0x00000000, 0x3FF5E000, -/**/ 0x6424E9C9, 0xBF0067E7, -/**/ 0x86CEA000, 0xBFD403D0, -/**/ 0x74487308, 0xBD3E6EF5, -/**/ 0x00000000, 0x3FF5D800, -/**/ 0x38A94D24, 0x3F19F0FB, -/**/ 0x63C17000, 0xBFD3EDF4, -/**/ 0x297F2C3F, 0x3D3F067C, -/**/ 0x00000000, 0x3FF5D000, -/**/ 0x23CAD2AA, 0x3F2EADD9, -/**/ 0xB5947000, 0xBFD3D81F, -/**/ 0x2A9D37A4, 0x3D222C7C, -/**/ 0x00000000, 0x3FF5C800, -/**/ 0x31057262, 0x3F3882B9, -/**/ 0x77333000, 0xBFD3C252, -/**/ 0xB606BD5C, 0xBD183B54, -/**/ 0x00000000, 0x3FF5C400, -/**/ 0x10FFA8F8, 0xBF3E00AE, -/**/ 0xA38E6000, 0xBFD3AC8C, -/**/ 0xBC02BE4A, 0x3D2D0BEF, -/**/ 0x00000000, 0x3FF5BC00, -/**/ 0x8056EAF3, 0xBF34339B, -/**/ 0x359BC000, 0xBFD396CE, -/**/ 0x5663663D, 0x3D05839C, -/**/ 0x00000000, 0x3FF5B400, -/**/ 0xF31D7FD5, 0xBF242CC1, -/**/ 0x28565000, 0xBFD38117, -/**/ 0x93A0702B, 0x3D2A71E4, -/**/ 0x00000000, 0x3FF5AC00, -/**/ 0x6B015AC0, 0x3ED5AC05, -/**/ 0x76BE1000, 0xBFD36B67, -/**/ 0xB0F177C8, 0xBD116ECD, -/**/ 0x00000000, 0x3FF5A400, -/**/ 0x5BA55E5A, 0x3F26268D, -/**/ 0x1BD83000, 0xBFD355BF, -/**/ 0x8964F0E8, 0x3D2BA99B, -/**/ 0x00000000, 0x3FF59C00, -/**/ 0x3CCAA376, 0x3F361F12, -/**/ 0x12AED000, 0xBFD3401E, -/**/ 0x556E291D, 0x3D317C73, -/**/ 0x00000000, 0x3FF59800, -/**/ 0x62D32417, 0xBF3E863D, -/**/ 0x56512000, 0xBFD32A84, -/**/ 0x139AF5D6, 0xBD04F928, -/**/ 0x00000000, 0x3FF59000, -/**/ 0xEA712DCF, 0xBF32DCF7, -/**/ 0xE1D36000, 0xBFD314F1, -/**/ 0xD3213CB8, 0x3D28E27A, -/**/ 0x00000000, 0x3FF58800, -/**/ 0xA0CC87E8, 0xBF1B95B2, -/**/ 0xB04EB000, 0xBFD2FF66, -/**/ 0x541E6E2E, 0x3D38AED2, -/**/ 0x00000000, 0x3FF58000, -/**/ 0x01580560, 0x3F158056, -/**/ 0xBCE12000, 0xBFD2E9E2, -/**/ 0x128D1DC2, 0xBD24300C, -/**/ 0x00000000, 0x3FF57800, -/**/ 0x15791F34, 0x3F31F340, -/**/ 0x02ADD000, 0xBFD2D466, -/**/ 0xDCD54196, 0x3D288D0D, -/**/ 0x00000000, 0x3FF57000, -/**/ 0x06B39A23, 0x3F3ED3C5, -/**/ 0x7CDC9000, 0xBFD2BEF0, -/**/ 0x4A5004F4, 0xBD2A9CFA, -/**/ 0x00000000, 0x3FF56C00, -/**/ 0x53FEA954, 0xBF33FEA9, -/**/ 0x269A4000, 0xBFD2A982, -/**/ 0x557285CF, 0x3D22058E, -/**/ 0x00000000, 0x3FF56400, -/**/ 0xEB478503, 0xBF1A1160, -/**/ 0xFB187000, 0xBFD2941A, -/**/ 0xB730E28B, 0x3D3210C2, -/**/ 0x00000000, 0x3FF55C00, -/**/ 0xE4A18B2E, 0x3F1D09AD, -/**/ 0xF58D9000, 0xBFD27EBA, -/**/ 0x00B4BDA7, 0x3D2B1988, -/**/ 0x00000000, 0x3FF55400, -/**/ 0x55555555, 0x3F355555, -/**/ 0x1134E000, 0xBFD26962, -/**/ 0x10522625, 0x3D31B61F, -/**/ 0x00000000, 0x3FF55000, -/**/ 0xB319A21F, 0xBF3C4BE6, -/**/ 0x494E5000, 0xBFD25410, -/**/ 0xC0EF77F2, 0xBD3B1D7A, -/**/ 0x00000000, 0x3FF54800, -/**/ 0x8FA03FD5, 0xBF2B4328, -/**/ 0x991EC000, 0xBFD23EC5, -/**/ 0x48A2E522, 0x3D36DBE4, -/**/ 0x00000000, 0x3FF54000, -/**/ 0x40154015, 0x3EF54015, -/**/ 0xFBEF8000, 0xBFD22981, -/**/ 0x609580DA, 0x3D3A1421, -/**/ 0x00000000, 0x3FF53800, -/**/ 0x40FEAC6F, 0x3F30948F, -/**/ 0x6D0EC000, 0xBFD21445, -/**/ 0x28B728A3, 0x3D3CAF04, -/**/ 0x00000000, 0x3FF53400, -/**/ 0xFD04F7B8, 0xBF3FE034, -/**/ 0xE7CF4000, 0xBFD1FF0F, -/**/ 0x513FF0C1, 0xBD3E9D5B, -/**/ 0x00000000, 0x3FF52C00, -/**/ 0x7FAB5403, 0xBF300A95, -/**/ 0x6788A000, 0xBFD1E9E1, -/**/ 0xD3C8B65E, 0x3D382EAE, -/**/ 0x00000000, 0x3FF52400, -/**/ 0x52401524, 0x3EB52401, -/**/ 0xE796C000, 0xBFD1D4B9, -/**/ 0x7C42E56D, 0xBD222A66, -/**/ 0x00000000, 0x3FF51C00, -/**/ 0x2F8151D0, 0x3F307EAE, -/**/ 0x635A7000, 0xBFD1BF99, -/**/ 0x575C2125, 0x3D31AC89, -/**/ 0x00000000, 0x3FF51800, -/**/ 0xEAE9ECE4, 0xBF3ECE3F, -/**/ 0xD638D000, 0xBFD1AA7F, -/**/ 0x9616F7A0, 0xBD29F60A, -/**/ 0x00000000, 0x3FF51000, -/**/ 0xC7675243, 0xBF2BA3DD, -/**/ 0x3B9BC000, 0xBFD1956D, -/**/ 0x3AD1AA14, 0xBD27D2F7, -/**/ 0x00000000, 0x3FF50800, -/**/ 0x764E368D, 0x3F0B9AC8, -/**/ 0x8EF19000, 0xBFD18061, -/**/ 0xC86D38E5, 0x3D3482FF, -/**/ 0x00000000, 0x3FF50000, -/**/ 0x15015015, 0x3F350150, -/**/ 0xCBAD0000, 0xBFD16B5C, -/**/ 0x042D74BF, 0x3D323299, -/**/ 0x00000000, 0x3FF4FC00, -/**/ 0x4A683C50, 0xBF392851, -/**/ 0xED456000, 0xBFD1565E, -/**/ 0xFB6ABA25, 0x3CEE75AD, -/**/ 0x00000000, 0x3FF4F400, -/**/ 0xACD95EF0, 0xBF1C2748, -/**/ 0xEF367000, 0xBFD14167, -/**/ 0x824DAAF5, 0xBD3E0C07, -/**/ 0x00000000, 0x3FF4EC00, -/**/ 0x67A47465, 0x3F26B90D, -/**/ 0xCD007000, 0xBFD12C77, -/**/ 0x8A11F797, 0xBD13B294, -/**/ 0x00000000, 0x3FF4E400, -/**/ 0xF0539783, 0x3F3E0A72, -/**/ 0x8227E000, 0xBFD1178E, -/**/ 0xCE2D07F2, 0xBD31EF78, -/**/ 0x00000000, 0x3FF4E000, -/**/ 0xF87FD642, 0xBF2E00A6, -/**/ 0x0A35D000, 0xBFD102AC, -/**/ 0xDFDFD686, 0x3D2F1FBD, -/**/ 0x00000000, 0x3FF4D800, -/**/ 0x0B12E3FD, 0x3F10EFB7, -/**/ 0x60B78000, 0xBFD0EDD0, -/**/ 0x2D8435F5, 0xBD0019B5, -/**/ 0x00000000, 0x3FF4D000, -/**/ 0x5CB4DBE5, 0x3F37BEF1, -/**/ 0x813EB000, 0xBFD0D8FB, -/**/ 0x8753FA35, 0xBD1EE8C8, -/**/ 0x00000000, 0x3FF4CC00, -/**/ 0xA50918B1, 0xBF34778D, -/**/ 0x67616000, 0xBFD0C42D, -/**/ 0x163CEAE9, 0xBD27188B, -/**/ 0x00000000, 0x3FF4C400, -/**/ 0xE37288EC, 0xBED9F4F7, -/**/ 0x0EB9E000, 0xBFD0AF66, -/**/ 0xF528D80A, 0xBD23C7C3, -/**/ 0x00000000, 0x3FF4BC00, -/**/ 0x68FE0E42, 0x3F33EDDA, -/**/ 0x72E6C000, 0xBFD09AA5, -/**/ 0xE1734342, 0xBD3B50A1, -/**/ 0x00000000, 0x3FF4B800, -/**/ 0xB72E47D9, 0xBF3776C6, -/**/ 0x8F8AE000, 0xBFD085EB, -/**/ 0x3F45FE7B, 0xBD3E5D51, -/**/ 0x00000000, 0x3FF4B000, -/**/ 0xA052BF5B, 0xBF04AFD6, -/**/ 0x604D6000, 0xBFD07138, -/**/ 0x4E912B17, 0x3D3E7632, -/**/ 0x00000000, 0x3FF4A800, -/**/ 0xD5B5C015, 0x3F328FFA, -/**/ 0xE0D96000, 0xBFD05C8B, -/**/ 0xC77CCB58, 0xBD2AD0F1, -/**/ 0x00000000, 0x3FF4A400, -/**/ 0x9FEB5D80, 0xBF380528, -/**/ 0x0CDE8000, 0xBFD047E6, -/**/ 0x0D397F3C, 0xBD2DBDF1, -/**/ 0x00000000, 0x3FF49C00, -/**/ 0x25FF5B21, 0xBF02AD3E, -/**/ 0xE0106000, 0xBFD03346, -/**/ 0xA966395C, 0xBCF89FF8, -/**/ 0x00000000, 0x3FF49400, -/**/ 0x2D066EA2, 0x3F339E3B, -/**/ 0x5626C000, 0xBFD01EAE, -/**/ 0xFADE85AE, 0xBD3A43DC, -/**/ 0x00000000, 0x3FF49000, -/**/ 0xAFB2E932, 0xBF3629C1, -/**/ 0x6ADDA000, 0xBFD00A1C, -/**/ 0x688B9E18, 0xBD31CD8D, -/**/ 0x00000000, 0x3FF48800, -/**/ 0x22014880, 0x3ED48805, -/**/ 0x33EA0000, 0xBFCFEB22, -/**/ 0xDE00938B, 0xBD2F3418, -/**/ 0x00000000, 0x3FF48000, -/**/ 0x3D324D89, 0x3F37119F, -/**/ 0xBE620000, 0xBFCFC218, -/**/ 0x6F1CF6A0, 0xBD34BBA4, -/**/ 0x00000000, 0x3FF47C00, -/**/ 0x1EB851EC, 0xBF31EB85, -/**/ 0x6CB3C000, 0xBFCF991C, -/**/ 0xCD7CC834, 0x3D390D04, -/**/ 0x00000000, 0x3FF47400, -/**/ 0xAAFC7C01, 0x3F1569C9, -/**/ 0x36778000, 0xBFCF702D, -/**/ 0x16673E23, 0x3D108195, -/**/ 0x00000000, 0x3FF46C00, -/**/ 0x96066250, 0x3F3CE345, -/**/ 0x134E0000, 0xBFCF474B, -/**/ 0xF1DF7B5E, 0x3D3BAE49, -/**/ 0x00000000, 0x3FF46800, -/**/ 0x1D02DE87, 0xBF26A297, -/**/ 0xFADFA000, 0xBFCF1E75, -/**/ 0x25D83F6D, 0x3D20862B, -/**/ 0x00000000, 0x3FF46000, -/**/ 0xB9F34381, 0x3F2978FE, -/**/ 0xE4DD0000, 0xBFCEF5AD, -/**/ 0x65BB8E11, 0x3CCA2115, -/**/ 0x00000000, 0x3FF45C00, -/**/ 0xF6C71366, 0xBF3AF398, -/**/ 0xC8FEA000, 0xBFCECCF2, -/**/ 0xA3E75640, 0x3D3BEC63, -/**/ 0x00000000, 0x3FF45400, -/**/ 0x449AFF5D, 0xBF030E9C, -/**/ 0x9F04A000, 0xBFCEA444, -/**/ 0x63732A36, 0xBD35E916, -/**/ 0x00000000, 0x3FF44C00, -/**/ 0xF8B42EF3, 0x3F367190, -/**/ 0x5EB78000, 0xBFCE7BA3, -/**/ 0x23793649, 0x3D0D5EEE, -/**/ 0x00000000, 0x3FF44800, -/**/ 0xD260511C, 0xBF3079A9, -/**/ 0xFFE72000, 0xBFCE530E, -/**/ 0xB13F7C18, 0x3D3FDBDB, -/**/ 0x00000000, 0x3FF44000, -/**/ 0x0B644FBE, 0x3F21B87C, -/**/ 0x7A6B2000, 0xBFCE2A87, -/**/ 0x7787081A, 0xBD382381, -/**/ 0x00000000, 0x3FF43C00, -/**/ 0x411B2E25, 0xBF3D8CF5, -/**/ 0xC6236000, 0xBFCE020C, -/**/ 0xADB91424, 0x3D252B00, -/**/ 0x00000000, 0x3FF43400, -/**/ 0xD6A60978, 0xBF0DAC08, -/**/ 0xDAF6E000, 0xBFCDD99E, -/**/ 0x69C756EB, 0x3D302EC6, -/**/ 0x00000000, 0x3FF42C00, -/**/ 0x51F86EFA, 0x3F36625D, -/**/ 0xB0D48000, 0xBFCDB13D, -/**/ 0x847527E6, 0xBD32806A, -/**/ 0x00000000, 0x3FF42800, -/**/ 0xA8766564, 0xBF2E8B2D, -/**/ 0x3FB30000, 0xBFCD88E9, -/**/ 0x0234BF51, 0x3D375F28, -/**/ 0x00000000, 0x3FF42000, -/**/ 0xCB2A247B, 0x3F26A4CB, -/**/ 0x7F904000, 0xBFCD60A1, -/**/ 0x6FC20D39, 0x3D35D6E0, -/**/ 0x00000000, 0x3FF41C00, -/**/ 0xC17DF552, 0xBF39D5E8, -/**/ 0x68720000, 0xBFCD3866, -/**/ 0xB38932BC, 0x3D373650, -/**/ 0x00000000, 0x3FF41400, -/**/ 0x14141414, 0x3EF41414, -/**/ 0xF2656000, 0xBFCD1037, -/**/ 0x75B6F6E4, 0x3D084A7E, -/**/ 0x00000000, 0x3FF40C00, -/**/ 0x43AE87FD, 0x3F3C97A8, -/**/ 0x157F2000, 0xBFCCE816, -/**/ 0xA2099515, 0x3D29E0AB, -/**/ 0x00000000, 0x3FF40800, -/**/ 0x66A67E6F, 0xBF1F4BBC, -/**/ 0xC9DB4000, 0xBFCCC000, -/**/ 0x5D57AFF9, 0x3D1D6D58, -/**/ 0x00000000, 0x3FF40000, -/**/ 0x14014014, 0x3F340140, -/**/ 0x079D4000, 0xBFCC97F8, -/**/ 0xA8C6E6C5, 0xBD23B161, -/**/ 0x00000000, 0x3FF3FC00, -/**/ 0xFD809FD8, 0xBF2FD809, -/**/ 0xC6F00000, 0xBFCC6FFB, -/**/ 0xD3A69D43, 0xBD3EE138, -/**/ 0x00000000, 0x3FF3F400, -/**/ 0x57EE89D2, 0x3F28CA0E, -/**/ 0x0005C000, 0xBFCC480C, -/**/ 0xD5E44E76, 0xBD39A294, -/**/ 0x00000000, 0x3FF3F000, -/**/ 0xA50F9260, 0xBF370BD5, -/**/ 0xAB180000, 0xBFCC2028, -/**/ 0xE55C7AC6, 0x3D292E0E, -/**/ 0x00000000, 0x3FF3E800, -/**/ 0x75945FCE, 0x3F1704AA, -/**/ 0xC0676000, 0xBFCBF851, -/**/ 0x4C0854AD, 0x3D35420E, -/**/ 0x00000000, 0x3FF3E400, -/**/ 0xB56FD83C, 0xBF3D3431, -/**/ 0x383BE000, 0xBFCBD087, -/**/ 0x595412B6, 0x3D2D4BC4, -/**/ 0x00000000, 0x3FF3DC00, -/**/ 0x3DC013DC, 0x3EB3DC01, -/**/ 0x0AE4A000, 0xBFCBA8C9, -/**/ 0xF44432DA, 0xBD3A32E7, -/**/ 0x00000000, 0x3FF3D400, -/**/ 0xA75C5BBD, 0x3F3D991A, -/**/ 0x30B82000, 0xBFCB8117, -/**/ 0x3B9CD768, 0xBD1E9068, -/**/ 0x00000000, 0x3FF3D000, -/**/ 0x59C52F5D, 0xBF1292BA, -/**/ 0xA213A000, 0xBFCB5971, -/**/ 0x83AA91DF, 0xBD39B50E, -/**/ 0x00000000, 0x3FF3C800, -/**/ 0xBABE7440, 0x3F395A47, -/**/ 0x575BC000, 0xBFCB31D8, -/**/ 0x562A63CB, 0xBD3C794E, -/**/ 0x00000000, 0x3FF3C400, -/**/ 0x58A0943A, 0xBF20D475, -/**/ 0x48FC2000, 0xBFCB0A4B, -/**/ 0x5C3998ED, 0x3D22E72D, -/**/ 0x00000000, 0x3FF3BC00, -/**/ 0x3295482C, 0x3F360D92, -/**/ 0x6F672000, 0xBFCAE2CA, -/**/ 0xAE54F550, 0xBD37A8D5, -/**/ 0x00000000, 0x3FF3B800, -/**/ 0xCAB48651, 0xBF267D12, -/**/ 0xC316A000, 0xBFCABB55, -/**/ 0xCAF14CD8, 0x3D38A65A, -/**/ 0x00000000, 0x3FF3B000, -/**/ 0x13B13B14, 0x3F33B13B, -/**/ 0x3C8AE000, 0xBFCA93ED, -/**/ 0x50562169, 0x3D287243, -/**/ 0x00000000, 0x3FF3AC00, -/**/ 0x2C8FD3BF, 0xBF2A46AF, -/**/ 0xD44B8000, 0xBFCA6C90, -/**/ 0xF037B0C6, 0x3D3F63B7, -/**/ 0x00000000, 0x3FF3A400, -/**/ 0xAC822610, 0x3F324387, -/**/ 0x82E6A000, 0xBFCA4540, -/**/ 0xC81F7171, 0xBD360A77, -/**/ 0x00000000, 0x3FF3A000, -/**/ 0xA1923DEE, 0xBF2C34BB, -/**/ 0x40F1C000, 0xBFCA1DFC, -/**/ 0x004F3781, 0x3D301E0F, -/**/ 0x00000000, 0x3FF39800, -/**/ 0x87F63372, 0x3F31C2C1, -/**/ 0x0708A000, 0xBFC9F6C4, -/**/ 0x4BCD3F43, 0x3D3337D9, -/**/ 0x00000000, 0x3FF39400, -/**/ 0xE11BD52E, 0xBF2C4AA0, -/**/ 0xCDCE0000, 0xBFC9CF97, -/**/ 0x10C414E3, 0xBD3D862F, -/**/ 0x00000000, 0x3FF38C00, -/**/ 0x6088DBF4, 0x3F322D36, -/**/ 0x8DEBA000, 0xBFC9A877, -/**/ 0x3EFEC390, 0xBD3470FA, -/**/ 0x00000000, 0x3FF38800, -/**/ 0x503F774E, 0xBF2A8BBF, -/**/ 0x4011A000, 0xBFC98163, -/**/ 0x9E9045E2, 0xBD34EADD, -/**/ 0x00000000, 0x3FF38000, -/**/ 0x13813814, 0x3F338138, -/**/ 0xDCF70000, 0xBFC95A5A, -/**/ 0x58A0FF6F, 0xBD07F228, -/**/ 0x00000000, 0x3FF37C00, -/**/ 0x1B177053, 0xBF26FB6F, -/**/ 0x5D594000, 0xBFC9335E, -/**/ 0x3ABD47DA, 0xBD33115C, -/**/ 0x00000000, 0x3FF37400, -/**/ 0x945EDC20, 0x3F35BD1C, -/**/ 0xB9FCC000, 0xBFC90C6D, -/**/ 0x7718D7CA, 0x3D1935F5, -/**/ 0x00000000, 0x3FF37000, -/**/ 0x4DBDCC60, 0xBF219D00, -/**/ 0xEBAC2000, 0xBFC8E588, -/**/ 0xAB2D1140, 0xBD3B7D5C, -/**/ 0x00000000, 0x3FF36800, -/**/ 0xE0747954, 0x3F38DF3D, -/**/ 0xEB390000, 0xBFC8BEAF, -/**/ 0xAAE92CD1, 0x3D073D54, -/**/ 0x00000000, 0x3FF36400, -/**/ 0xD9D3C49F, 0xBF14E775, -/**/ 0xB17B2000, 0xBFC897E2, -/**/ 0x380CBE9E, 0x3D296B37, -/**/ 0x00000000, 0x3FF35C00, -/**/ 0xF2AF821E, 0x3F3CE5F9, -/**/ 0x3750E000, 0xBFC87121, -/**/ 0x42F9AF75, 0xBD3328EB, -/**/ 0x00000000, 0x3FF35800, -/**/ 0xE34971F2, 0xBEE82DF0, -/**/ 0x759F6000, 0xBFC84A6B, -/**/ 0x2ADF8609, 0x3D3DA280, -/**/ 0x00000000, 0x3FF35400, -/**/ 0x4873ECAE, 0xBF3E304D, -/**/ 0x6551A000, 0xBFC823C1, -/**/ 0x9A631E83, 0xBD1E0DDB, -/**/ 0x00000000, 0x3FF34C00, -/**/ 0x1FF659DB, 0x3F1264B6, -/**/ 0xFF59A000, 0xBFC7FD22, -/**/ 0xF457B7D2, 0x3D158BEB, -/**/ 0x00000000, 0x3FF34800, -/**/ 0xFECB9865, 0xBF386531, -/**/ 0x3CAF6000, 0xBFC7D690, -/**/ 0x17C301D7, 0x3D24C06B, -/**/ 0x00000000, 0x3FF34000, -/**/ 0xEEDA65AE, 0x3F25A8C2, -/**/ 0x16516000, 0xBFC7B009, -/**/ 0xCB067E57, 0x3D3AE75F, -/**/ 0x00000000, 0x3FF33C00, -/**/ 0x8434E1F4, 0xBF31BA4A, -/**/ 0x85444000, 0xBFC7898D, -/**/ 0xE3DBAF3F, 0xBD38E67B, -/**/ 0x00000000, 0x3FF33400, -/**/ 0xDBFC660A, 0x3F31EE97, -/**/ 0x82936000, 0xBFC7631D, -/**/ 0xC7C5F3E1, 0x3D25E77D, -/**/ 0x00000000, 0x3FF33000, -/**/ 0xBC40BFDA, 0xBF246252, -/**/ 0x074FE000, 0xBFC73CB9, -/**/ 0x0D0005A6, 0x3D3D66A9, -/**/ 0x00000000, 0x3FF32800, -/**/ 0x13299E64, 0x3F39E640, -/**/ 0x0C914000, 0xBFC71660, -/**/ 0x7CEC3838, 0xBCE51B15, -/**/ 0x00000000, 0x3FF32400, -/**/ 0xEF40991F, 0xBEFCB5D4, -/**/ 0x8B756000, 0xBFC6F012, -/**/ 0x0D31EF0F, 0xBD357739, -/**/ 0x00000000, 0x3FF32000, -/**/ 0xC823D892, 0xBF3D4632, -/**/ 0x7D204000, 0xBFC6C9D0, -/**/ 0xFD9B2DCA, 0x3CDC73FA, -/**/ 0x00000000, 0x3FF31800, -/**/ 0x7AED804C, 0x3F1DD63A, -/**/ 0xDABBE000, 0xBFC6A399, -/**/ 0xE66A15A6, 0x3D38F934, -/**/ 0x00000000, 0x3FF31400, -/**/ 0xE8C11E1A, 0xBF339849, -/**/ 0x9D786000, 0xBFC67D6E, -/**/ 0x30A706D3, 0x3D311E88, -/**/ 0x00000000, 0x3FF30C00, -/**/ 0x0D190131, 0x3F319013, -/**/ 0xBE8C2000, 0xBFC6574E, -/**/ 0x34F0F462, 0x3D398C1D, -/**/ 0x00000000, 0x3FF30800, -/**/ 0xB47A7FDA, 0xBF222315, -/**/ 0x37336000, 0xBFC6313A, -/**/ 0x4F21EA6D, 0x3D144DF5, -/**/ 0x00000000, 0x3FF30000, -/**/ 0x40260390, 0x3F3C82AC, -/**/ 0x00B0A000, 0xBFC60B31, -/**/ 0xC988F814, 0x3D371456, -/**/ 0x00000000, 0x3FF2FC00, -/**/ 0xA2430A62, 0x3F026443, -/**/ 0x144C2000, 0xBFC5E533, -/**/ 0xF3B290EA, 0x3D31CE0B, -/**/ 0x00000000, 0x3FF2F800, -/**/ 0xED097B42, 0xBF37B425, -/**/ 0x6B544000, 0xBFC5BF40, -/**/ 0xEB68981C, 0x3D127023, -/**/ 0x00000000, 0x3FF2F000, -/**/ 0x4AE0553C, 0x3F2D00E3, -/**/ 0xFF1D6000, 0xBFC59958, -/**/ 0x9769CA05, 0x3D3A1D05, -/**/ 0x00000000, 0x3FF2EC00, -/**/ 0x25D69D44, 0xBF262BC0, -/**/ 0xC9018000, 0xBFC5737C, -/**/ 0xA6B887F6, 0xBD39BAA7, -/**/ 0x00000000, 0x3FF2E400, -/**/ 0xE3103D6B, 0x3F3B88B5, -/**/ 0xC2610000, 0xBFC54DAB, -/**/ 0xE5C8D0D8, 0xBD2746FE, -/**/ 0x00000000, 0x3FF2E000, -/**/ 0xC04B8097, 0x3F02E025, -/**/ 0xE4A1C000, 0xBFC527E5, -/**/ 0x8D4B411D, 0x3D34E60B, -/**/ 0x00000000, 0x3FF2DC00, -/**/ 0x2C305021, 0xBF369C22, -/**/ 0x292F6000, 0xBFC5022B, -/**/ 0xFF36A25B, 0xBD348A05, -/**/ 0x00000000, 0x3FF2D400, -/**/ 0xD50A012D, 0x3F30A012, -/**/ 0x897BC000, 0xBFC4DC7B, -/**/ 0x0AE1FF0F, 0xBD0C79B6, -/**/ 0x00000000, 0x3FF2D000, -/**/ 0xBC66484E, 0xBF1FBE29, -/**/ 0xFEFE2000, 0xBFC4B6D6, -/**/ 0xF56E7952, 0xBD1522EC, -/**/ 0x00000000, 0x3FF2C800, -/**/ 0x12C9FB4E, 0x3F3FB4D8, -/**/ 0x8333C000, 0xBFC4913D, -/**/ 0x558124C4, 0x3D353E43, -/**/ 0x00000000, 0x3FF2C400, -/**/ 0x7004B11E, 0x3F1E3432, -/**/ 0x0F9F6000, 0xBFC46BAF, -/**/ 0x0790841A, 0x3D1249CD, -/**/ 0x00000000, 0x3FF2C000, -/**/ 0x5C8EF02F, 0xBF30671A, -/**/ 0x9DC9C000, 0xBFC4462B, -/**/ 0xA711B062, 0x3D384858, -/**/ 0x00000000, 0x3FF2B800, -/**/ 0xD548D9AC, 0x3F37D835, -/**/ 0x27410000, 0xBFC420B3, -/**/ 0xC85A0884, 0x3D116282, -/**/ 0x00000000, 0x3FF2B400, -/**/ 0xAD012B40, 0x3ED2B404, -/**/ 0xA5992000, 0xBFC3FB45, -/**/ 0xC0CAE559, 0xBD319713, -/**/ 0x00000000, 0x3FF2B000, -/**/ 0x8E7302A1, 0xBF370F78, -/**/ 0x126BC000, 0xBFC3D5E3, -/**/ 0x85096C4B, 0xBD13FB2F, -/**/ 0x00000000, 0x3FF2A800, -/**/ 0x3C1053F9, 0x3F31C92F, -/**/ 0x67580000, 0xBFC3B08B, -/**/ 0xF29320FB, 0x3D3AADE8, -/**/ 0x00000000, 0x3FF2A400, -/**/ 0x3DBE2E04, 0xBF14AD94, -/**/ 0x9E028000, 0xBFC38B3E, -/**/ 0x545C17F9, 0x3D370EF0, -/**/ 0x00000000, 0x3FF2A000, -/**/ 0xBED61BED, 0xBF3BED61, -/**/ 0xB015A000, 0xBFC365FC, -/**/ 0xAFB9691B, 0x3D3FD3A0, -/**/ 0x00000000, 0x3FF29800, -/**/ 0x26F004A6, 0x3F2B061A, -/**/ 0x97412000, 0xBFC340C5, -/**/ 0xF7D9D386, 0x3D37A3DC, -/**/ 0x00000000, 0x3FF29400, -/**/ 0xFF6B646D, 0xBF21B488, -/**/ 0x4D3A4000, 0xBFC31B99, -/**/ 0xE3A50810, 0xBD3F098E, -/**/ 0x00000000, 0x3FF29000, -/**/ 0x2CA5D5AC, 0xBF3F0582, -/**/ 0xCBBC0000, 0xBFC2F677, -/**/ 0x2160F40D, 0xBD352B30, -/**/ 0x00000000, 0x3FF28800, -/**/ 0x16025116, 0x3F260251, -/**/ 0x0C868000, 0xBFC2D161, -/**/ 0xCB81B4A1, 0xBD039D6C, -/**/ 0x00000000, 0x3FF28400, -/**/ 0x502065D2, 0xBF258CDF, -/**/ 0x095F6000, 0xBFC2AC55, -/**/ 0xD0C6C8A8, 0x3D1D3466, -/**/ 0x00000000, 0x3FF27C00, -/**/ 0x1CE4D6F8, 0x3F3FA38A, -/**/ 0xBC11A000, 0xBFC28753, -/**/ 0x359302E6, 0xBD37494E, -/**/ 0x00000000, 0x3FF27800, -/**/ 0xDCCA0781, 0x3F247DD5, -/**/ 0x1E6DE000, 0xBFC2625D, -/**/ 0xF09E3D82, 0x3CF52962, -/**/ 0x00000000, 0x3FF27400, -/**/ 0xDB195E8F, 0xBF25E8EF, -/**/ 0x2A49C000, 0xBFC23D71, -/**/ 0x8FD3DF5C, 0xBD100D23, -/**/ 0x00000000, 0x3FF27000, -/**/ 0xFFB647FE, 0xBF3FF6C8, -/**/ 0xD9808000, 0xBFC2188F, -/**/ 0x7F50C701, 0x3D3B3A1E, -/**/ 0x00000000, 0x3FF26800, -/**/ 0xC024D167, 0x3F266F9A, -/**/ 0x25F26000, 0xBFC1F3B9, -/**/ 0x9B083633, 0x3D15F74E, -/**/ 0x00000000, 0x3FF26400, -/**/ 0xEABD0E14, 0xBF22D1BD, -/**/ 0x09854000, 0xBFC1CEED, -/**/ 0x39192AF9, 0x3D315C1C, -/**/ 0x00000000, 0x3FF26000, -/**/ 0xF6D0EEC8, 0xBF3DD8F7, -/**/ 0x7E240000, 0xBFC1AA2B, -/**/ 0xDDE3B366, 0x3D31AC38, -/**/ 0x00000000, 0x3FF25800, -/**/ 0x2A241EF6, 0x3F2BCEB1, -/**/ 0x7DBEC000, 0xBFC18574, -/**/ 0x45BD9B49, 0xBD3E6744, -/**/ 0x00000000, 0x3FF25400, -/**/ 0xA21378D7, 0xBF18A05B, -/**/ 0x024B2000, 0xBFC160C8, -/**/ 0xA9009E3D, 0xBD2EC2D2, -/**/ 0x00000000, 0x3FF25000, -/**/ 0xD6CFA90C, 0xBF3A076F, -/**/ 0x05C3A000, 0xBFC13C26, -/**/ 0xD94F6509, 0x3D2CF5FD, -/**/ 0x00000000, 0x3FF24800, -/**/ 0x92492492, 0x3F324924, -/**/ 0x8227E000, 0xBFC1178E, -/**/ 0xCE2D07F2, 0xBD21EF78, -/**/ 0x00000000, 0x3FF24400, -/**/ 0x6151E899, 0xBEF3682B, -/**/ 0x717D0000, 0xBFC0F301, -/**/ 0x41AE86C5, 0x3D3E09B4, -/**/ 0x00000000, 0x3FF24000, -/**/ 0x89FA4C67, 0xBF34868E, -/**/ 0xCDCCC000, 0xBFC0CE7E, -/**/ 0xABFF5447, 0xBD14652D, -/**/ 0x00000000, 0x3FF23800, -/**/ 0x6B11F09F, 0x3F3858D8, -/**/ 0x91268000, 0xBFC0AA06, -/**/ 0xD7032129, 0x3D345519, -/**/ 0x00000000, 0x3FF23400, -/**/ 0xAF37C049, 0x3F159E26, -/**/ 0xB59E4000, 0xBFC08598, -/**/ 0x7009902C, 0x3D27E5DD, -/**/ 0x00000000, 0x3FF23000, -/**/ 0x2E076329, 0xBF2AB546, -/**/ 0x354D4000, 0xBFC06135, -/**/ 0x28340EE9, 0xBD363046, -/**/ 0x00000000, 0x3FF22C00, -/**/ 0xFEDD5FEE, 0xBF3FEDD5, -/**/ 0x0A51E000, 0xBFC03CDC, -/**/ 0xF169FC5C, 0xBD381A9C, -/**/ 0x00000000, 0x3FF22400, -/**/ 0x009126D7, 0x3F2B5B92, -/**/ 0x2ECF6000, 0xBFC0188D, -/**/ 0x1CFF9DFE, 0xBD03F965, -/**/ 0x00000000, 0x3FF22000, -/**/ 0x8121FB78, 0xBF121FB7, -/**/ 0x39DBC000, 0xBFBFE891, -/**/ 0xD82F7A82, 0xBD356594, -/**/ 0x00000000, 0x3FF21C00, -/**/ 0x3A459635, 0xBF368F22, -/**/ 0x9DB58000, 0xBFBFA01C, -/**/ 0xFA48A730, 0x3D08F351, -/**/ 0x00000000, 0x3FF21400, -/**/ 0x855E6012, 0x3F379804, -/**/ 0x7D900000, 0xBFBF57BC, -/**/ 0x9EA8B04E, 0xBD176A6C, -/**/ 0x00000000, 0x3FF21000, -/**/ 0x78CD7A37, 0x3F17B57C, -/**/ 0xCDD98000, 0xBFBF0F70, -/**/ 0x6C272C1E, 0xBD32E31F, -/**/ 0x00000000, 0x3FF20C00, -/**/ 0x07E4EF15, 0xBF271E73, -/**/ 0x830A0000, 0xBFBEC739, -/**/ 0xA80CDD10, 0xBD311FCB, -/**/ 0x00000000, 0x3FF20800, -/**/ 0x49392BA7, 0xBF3CDDEC, -/**/ 0x91A34000, 0xBFBE7F16, -/**/ 0x9BC77BFA, 0x3D32C1C5, -/**/ 0x00000000, 0x3FF20000, -/**/ 0x12012012, 0x3F320120, -/**/ 0xEE304000, 0xBFBE3707, -/**/ 0xE6766ABD, 0xBD20F684, -/**/ 0x00000000, 0x3FF1FC00, -/**/ 0xCE8AD1A2, 0x3EF0DC4F, -/**/ 0x8D468000, 0xBFBDEF0D, -/**/ 0x412E9A74, 0x3D324750, -/**/ 0x00000000, 0x3FF1F800, -/**/ 0xDC11F704, 0xBF2F7047, -/**/ 0x63844000, 0xBFBDA727, -/**/ 0x1FA71733, 0xBD1A8940, -/**/ 0x00000000, 0x3FF1F000, -/**/ 0x16B6419D, 0x3F3FAF3F, -/**/ 0x65920000, 0xBFBD5F55, -/**/ 0xCC185469, 0xBD30E239, -/**/ 0x00000000, 0x3FF1EC00, -/**/ 0xF70985E2, 0x3F2E878F, -/**/ 0x88218000, 0xBFBD1797, -/**/ 0xB5EFBEED, 0xBD336433, -/**/ 0x00000000, 0x3FF1E800, -/**/ 0x94D7FDC3, 0xBEEF55E4, -/**/ 0xBFEE0000, 0xBFBCCFED, -/**/ 0x2FE71256, 0xBD33A823, -/**/ 0x00000000, 0x3FF1E400, -/**/ 0x0478BBCF, 0xBF310C4C, -/**/ 0x01BC4000, 0xBFBC8858, -/**/ 0xC65AACD3, 0xBD2646D1, -/**/ 0x00000000, 0x3FF1DC00, -/**/ 0xCB840C49, 0x3F3F0ECB, -/**/ 0x425A4000, 0xBFBC40D6, -/**/ 0x1D1930DD, 0xBD3CB112, -/**/ 0x00000000, 0x3FF1D800, -/**/ 0xC9579074, 0x3F2EACE5, -/**/ 0x769FC000, 0xBFBBF968, -/**/ 0x8D824283, 0xBD24218C, -/**/ 0x00000000, 0x3FF1D400, -/**/ 0xFC60F0AE, 0xBECABDFA, -/**/ 0x936D8000, 0xBFBBB20E, -/**/ 0x35459B8E, 0x3D368BA8, -/**/ 0x00000000, 0x3FF1D000, -/**/ 0xAFDC61F3, 0xBF2F2A4B, -/**/ 0x8DAD4000, 0xBFBB6AC8, -/**/ 0xF50225C7, 0xBD3B1BDF, -/**/ 0x00000000, 0x3FF1CC00, -/**/ 0xAB802394, 0xBF3EC8AF, -/**/ 0x5A530000, 0xBFBB2396, -/**/ 0xEA137079, 0x3CEFF64E, -/**/ 0x00000000, 0x3FF1C400, -/**/ 0xCE058D9B, 0x3F322FC1, -/**/ 0xEE5B0000, 0xBFBADC77, -/**/ 0x09C31904, 0x3D3573B2, -/**/ 0x00000000, 0x3FF1C000, -/**/ 0xE0EFA2CF, 0x3F0AA04F, -/**/ 0x3ECAC000, 0xBFBA956D, -/**/ 0x4C02C4AF, 0xBD3E6379, -/**/ 0x00000000, 0x3FF1BC00, -/**/ 0x225ADFDD, 0xBF26B7F7, -/**/ 0x40B1C000, 0xBFBA4E76, -/**/ 0xB94407C8, 0x3D0E42B6, -/**/ 0x00000000, 0x3FF1B800, -/**/ 0x217CD13A, 0xBF39E073, -/**/ 0xE9278000, 0xBFBA0792, -/**/ 0xC9AD51BF, 0x3D0A9CE6, -/**/ 0x00000000, 0x3FF1B000, -/**/ 0x2BAE2B21, 0x3F37C67F, -/**/ 0x2D4D4000, 0xBFB9C0C3, -/**/ 0x9E838668, 0x3D3AB7C0, -/**/ 0x00000000, 0x3FF1AC00, -/**/ 0xBD720DCF, 0x3F23316E, -/**/ 0x024CC000, 0xBFB97A07, -/**/ 0x732093CE, 0x3CF8BCC1, -/**/ 0x00000000, 0x3FF1A800, -/**/ 0x611A7B96, 0xBF11A7B9, -/**/ 0x5D594000, 0xBFB9335E, -/**/ 0x3ABD47DA, 0xBD23115C, -/**/ 0x00000000, 0x3FF1A400, -/**/ 0xA1C1B8E7, 0xBF324195, -/**/ 0x33AEC000, 0xBFB8ECC9, -/**/ 0xBE67F7AA, 0x3D222F39, -/**/ 0x00000000, 0x3FF1A000, -/**/ 0xFEE61FEE, 0xBF3FEE61, -/**/ 0x7A91C000, 0xBFB8A647, -/**/ 0xAF9BD6DF, 0xBD3C28C0, -/**/ 0x00000000, 0x3FF19800, -/**/ 0x362B721D, 0x3F328F89, -/**/ 0x27508000, 0xBFB85FD9, -/**/ 0x19970C1C, 0x3D35B818, -/**/ 0x00000000, 0x3FF19400, -/**/ 0x28A70119, 0x3F14E023, -/**/ 0x2F410000, 0xBFB8197E, -/**/ 0x60D20041, 0x3D3C0FE4, -/**/ 0x00000000, 0x3FF19000, -/**/ 0x3E48FC6F, 0xBF1FD419, -/**/ 0x87C28000, 0xBFB7D336, -/**/ 0x3E706706, 0xBD33C88C, -/**/ 0x00000000, 0x3FF18C00, -/**/ 0xFD42546B, 0xBF34F7C6, -/**/ 0x263D8000, 0xBFB78D02, -/**/ 0x94B69FB7, 0xBD069B57, -/**/ 0x00000000, 0x3FF18400, -/**/ 0x01185E30, 0x3F3E2FA4, -/**/ 0x00228000, 0xBFB746E1, -/**/ 0x6E1E21D2, 0x3D3126D1, -/**/ 0x00000000, 0x3FF18000, -/**/ 0x11811812, 0x3F318118, -/**/ 0x0AEAC000, 0xBFB700D3, -/**/ 0xA99DED32, 0xBCEC1E8D, -/**/ 0x00000000, 0x3FF17C00, -/**/ 0xFF2E2C43, 0x3F13F1CA, -/**/ 0x3C188000, 0xBFB6BAD8, -/**/ 0xC08926AE, 0xBD0DAF3C, -/**/ 0x00000000, 0x3FF17800, -/**/ 0x0A5EF9FF, 0xBF1D79B9, -/**/ 0x89364000, 0xBFB674F0, -/**/ 0x4C9D3302, 0xBD3A7999, -/**/ 0x00000000, 0x3FF17400, -/**/ 0x1ECEA765, 0xBF338FAD, -/**/ 0xE7D78000, 0xBFB62F1B, -/**/ 0x7ED63C4E, 0x3D217995, -/**/ 0x00000000, 0x3FF17000, -/**/ 0xD8C8714B, 0xBF3F976B, -/**/ 0x4D978000, 0xBFB5E95A, -/**/ 0xE1D17171, 0xBD31CB7C, -/**/ 0x00000000, 0x3FF16800, -/**/ 0xB08FA497, 0x3F348A33, -/**/ 0xB01AC000, 0xBFB5A3AB, -/**/ 0x9E6AFA18, 0xBD3E2574, -/**/ 0x00000000, 0x3FF16400, -/**/ 0x864022C9, 0x3F21AA1F, -/**/ 0x050E0000, 0xBFB55E10, -/**/ 0x0C53C72E, 0xBD0C1D74, -/**/ 0x00000000, 0x3FF16000, -/**/ 0xB487BCAD, 0xBF05B7C9, -/**/ 0x42260000, 0xBFB51887, -/**/ 0x96258B3E, 0xBD330A1D, -/**/ 0x00000000, 0x3FF15C00, -/**/ 0x5B1E5F75, 0xBF2C3411, -/**/ 0x5D208000, 0xBFB4D311, -/**/ 0x82F4E1EF, 0x3CF53A25, -/**/ 0x00000000, 0x3FF15800, -/**/ 0xEEA99544, 0xBF39543F, -/**/ 0x4BC30000, 0xBFB48DAE, -/**/ 0x208C200C, 0xBD30185B, -/**/ 0x00000000, 0x3FF15000, -/**/ 0xDD5C8CB8, 0x3F3B9A3F, -/**/ 0x03DBC000, 0xBFB4485E, -/**/ 0xE8D26AB7, 0xBD3FAD46, -/**/ 0x00000000, 0x3FF14C00, -/**/ 0xB19AE5C7, 0x3F30B155, -/**/ 0x7B414000, 0xBFB40320, -/**/ 0xAA8157C0, 0xBD26FD84, -/**/ 0x00000000, 0x3FF14800, -/**/ 0xB34EDA32, 0x3F17C382, -/**/ 0xA7D20000, 0xBFB3BDF5, -/**/ 0xAD125895, 0x3D319BD0, -/**/ 0x00000000, 0x3FF14400, -/**/ 0xBAF129D0, 0xBF129CFF, -/**/ 0x7F748000, 0xBFB378DD, -/**/ 0x28F1FACA, 0xBD371411, -/**/ 0x00000000, 0x3FF14000, -/**/ 0x771B7C7F, 0xBF2E2E59, -/**/ 0xF8184000, 0xBFB333D7, -/**/ 0xA81B8848, 0x3CE692B6, -/**/ 0x00000000, 0x3FF13C00, -/**/ 0x30FE1D9C, 0xBF395F06, -/**/ 0x07B40000, 0xBFB2EEE5, -/**/ 0xDD77C860, 0xBD08081E, -/**/ 0x00000000, 0x3FF13400, -/**/ 0x5C81135D, 0x3F3C8113, -/**/ 0xA4470000, 0xBFB2AA04, -/**/ 0xA8B1CB41, 0xBD37A48B, -/**/ 0x00000000, 0x3FF13000, -/**/ 0xBB3B5DC0, 0x3F3288FF, -/**/ 0xC3D8C000, 0xBFB26536, -/**/ 0x097C5BA3, 0xBD0B4BAC, -/**/ 0x00000000, 0x3FF12C00, -/**/ 0xB81577AE, 0x3F21713D, -/**/ 0x5C784000, 0xBFB2207B, -/**/ 0xFC10C7BF, 0xBD349D8C, -/**/ 0x00000000, 0x3FF12800, -/**/ 0xBAD6FC84, 0xBEEE05E5, -/**/ 0x643D0000, 0xBFB1DBD2, -/**/ 0xD977C494, 0xBD390B24, -/**/ 0x00000000, 0x3FF12400, -/**/ 0x59F992BF, 0xBF24E314, -/**/ 0xD1464000, 0xBFB1973B, -/**/ 0x54F930B3, 0xBD3566D1, -/**/ 0x00000000, 0x3FF12000, -/**/ 0xC9F6E7A8, 0xBF33CB91, -/**/ 0x99BB4000, 0xBFB152B7, -/**/ 0x07030829, 0x3D09BB29, -/**/ 0x00000000, 0x3FF11C00, -/**/ 0x8B7D9851, 0xBF3CFE65, -/**/ 0xB3CB0000, 0xBFB10E45, -/**/ 0x284A3465, 0x3D37CF69, -/**/ 0x00000000, 0x3FF11400, -/**/ 0x29605DF7, 0x3F39F5DB, -/**/ 0x15AC4000, 0xBFB0C9E6, -/**/ 0x0974D976, 0xBD2C2DA8, -/**/ 0x00000000, 0x3FF11000, -/**/ 0x11111111, 0x3F311111, -/**/ 0xB59E4000, 0xBFB08598, -/**/ 0x7009902C, 0x3D17E5DD, -/**/ 0x00000000, 0x3FF10C00, -/**/ 0x12A5B1AE, 0x3F20A63A, -/**/ 0x89E74000, 0xBFB0415D, -/**/ 0x5CF1D753, 0xBD1111C0, -/**/ 0x00000000, 0x3FF10800, -/**/ 0xBE011080, 0xBED107FB, -/**/ 0x11AB8000, 0xBFAFFA69, -/**/ 0x98381A8F, 0xBD23008C, -/**/ 0x00000000, 0x3FF10400, -/**/ 0x6FEABBAE, 0xBF216989, -/**/ 0x51800000, 0xBFAF723B, -/**/ 0xDD5610D3, 0x3D3D6EB0, -/**/ 0x00000000, 0x3FF10000, -/**/ 0x10FEF011, 0xBF30FEF0, -/**/ 0xC0068000, 0xBFAEEA31, -/**/ 0x3606D891, 0xBD3C3DD8, -/**/ 0x00000000, 0x3FF0FC00, -/**/ 0x98CDDC74, 0xBF3922C0, -/**/ 0x4A0B8000, 0xBFAE624C, -/**/ 0x74676689, 0x3D30F25C, -/**/ 0x00000000, 0x3FF0F400, -/**/ 0x325A1A80, 0x3F3EDFAB, -/**/ 0xDC680000, 0xBFADDA8A, -/**/ 0x64D9E42F, 0x3D21B1AC, -/**/ 0x00000000, 0x3FF0F000, -/**/ 0xF27F9A57, 0x3F370834, -/**/ 0x64060000, 0xBFAD52ED, -/**/ 0x2A29BBD6, 0x3D33C85D, -/**/ 0x00000000, 0x3FF0EC00, -/**/ 0xD391FBC5, 0x3F2EAD7C, -/**/ 0xCDDD8000, 0xBFACCB73, -/**/ 0x6E09F5FE, 0xBD3965C3, -/**/ 0x00000000, 0x3FF0E800, -/**/ 0xE9479870, 0x3F1F2CA5, -/**/ 0x06F70000, 0xBFAC441E, -/**/ 0x49850D15, 0xBD354F1F, -/**/ 0x00000000, 0x3FF0E400, -/**/ 0x80439019, 0x3ED95609, -/**/ 0xFC690000, 0xBFABBCEB, -/**/ 0x8C317C2A, 0x3D17BF86, -/**/ 0x00000000, 0x3FF0E000, -/**/ 0xC6867596, 0xBF1B6B4D, -/**/ 0x9B588000, 0xBFAB35DD, -/**/ 0xD6CF558E, 0xBD3D5674, -/**/ 0x00000000, 0x3FF0DC00, -/**/ 0x172D4CE8, 0xBF2BEAEE, -/**/ 0xD0FB0000, 0xBFAAAEF2, -/**/ 0x353BB42E, 0xBD20FC1A, -/**/ 0x00000000, 0x3FF0D800, -/**/ 0x479071A9, 0xBF34EAB0, -/**/ 0x8A938000, 0xBFAA282B, -/**/ 0x80EFC8E3, 0x3D2E8F59, -/**/ 0x00000000, 0x3FF0D400, -/**/ 0xA61C62D3, 0xBF3BBA9C, -/**/ 0xB5740000, 0xBFA9A187, -/**/ 0x4EC4D90D, 0x3D30C22E, -/**/ 0x00000000, 0x3FF0CC00, -/**/ 0x77344011, 0x3F3D9AA6, -/**/ 0x3EFD8000, 0xBFA91B07, -/**/ 0x3F76CA96, 0x3D19D7C5, -/**/ 0x00000000, 0x3FF0C800, -/**/ 0xCDA3AC11, 0x3F3714FB, -/**/ 0x149F8000, 0xBFA894AA, -/**/ 0x8BE97661, 0xBD39A19A, -/**/ 0x00000000, 0x3FF0C400, -/**/ 0x391F2E61, 0x3F30B446, -/**/ 0x23D90000, 0xBFA80E70, -/**/ 0x6F28BF45, 0x3D399DC1, -/**/ 0x00000000, 0x3FF0C000, -/**/ 0x682E11CD, 0x3F24F0D1, -/**/ 0x5A358000, 0xBFA78859, -/**/ 0x083B3A4C, 0x3D108B0D, -/**/ 0x00000000, 0x3FF0BC00, -/**/ 0x5D5A36EA, 0x3F118519, -/**/ 0xA5510000, 0xBFA70265, -/**/ 0x11FD5CE7, 0x3D2888DF, -/**/ 0x00000000, 0x3FF0B800, -/**/ 0x62386CAB, 0xBEF913DA, -/**/ 0xF2D48000, 0xBFA67C94, -/**/ 0x827CCA0C, 0xBD3DAC20, -/**/ 0x00000000, 0x3FF0B400, -/**/ 0xBD31D7D0, 0xBF1D7CFF, -/**/ 0x30790000, 0xBFA5F6E7, -/**/ 0x8012494C, 0x3D20485A, -/**/ 0x00000000, 0x3FF0B000, -/**/ 0x226951DC, 0xBF2A11BA, -/**/ 0x4C040000, 0xBFA5715C, -/**/ 0xDFC47628, 0x3D38888D, -/**/ 0x00000000, 0x3FF0AC00, -/**/ 0x7B2E9DD2, 0xBF328E31, -/**/ 0x334A0000, 0xBFA4EBF4, -/**/ 0xF73BE773, 0x3D2D9150, -/**/ 0x00000000, 0x3FF0A800, -/**/ 0x7EF597EF, 0xBF37EF59, -/**/ 0xD42E0000, 0xBFA466AE, -/**/ 0x75BDFD28, 0x3D2C1673, -/**/ 0x00000000, 0x3FF0A400, -/**/ 0x50D413C1, 0xBF3D2C71, -/**/ 0x1CA08000, 0xBFA3E18C, -/**/ 0x3F6E378E, 0xBD3748ED, -/**/ 0x00000000, 0x3FF09C00, -/**/ 0xF836010A, 0x3F3DBA6A, -/**/ 0xFAA10000, 0xBFA35C8B, -/**/ 0x5EF9EB35, 0xBD38357D, -/**/ 0x00000000, 0x3FF09800, -/**/ 0x624D4AF5, 0x3F38C51F, -/**/ 0x5C3C8000, 0xBFA2D7AE, -/**/ 0x459DA66D, 0x3D322939, -/**/ 0x00000000, 0x3FF09400, -/**/ 0x10953F39, 0x3F33F390, -/**/ 0x2F8D0000, 0xBFA252F3, -/**/ 0xE021B67B, 0xBD283E9A, -/**/ 0x00000000, 0x3FF09000, -/**/ 0x861539B9, 0x3F2E8B42, -/**/ 0x62BC0000, 0xBFA1CE5A, -/**/ 0x8D8DF999, 0xBD3A9CC7, -/**/ 0x00000000, 0x3FF08C00, -/**/ 0xACBC4021, 0x3F25766E, -/**/ 0xE4008000, 0xBFA149E3, -/**/ 0x9A4168FD, 0x3D32B98A, -/**/ 0x00000000, 0x3FF08800, -/**/ 0x0F3DBD5A, 0x3F1950DB, -/**/ 0xA19E0000, 0xBFA0C58F, -/**/ 0x58B17913, 0x3D0559D1, -/**/ 0x00000000, 0x3FF08400, -/**/ 0x08421084, 0x3F008421, -/**/ 0x89E78000, 0xBFA0415D, -/**/ 0xF461C516, 0x3D3DDDC7, -/**/ 0x00000000, 0x3FF08000, -/**/ 0x0041FF7C, 0xBF007FDF, -/**/ 0x16780000, 0xBF9F7A9B, -/**/ 0x271BE7D7, 0xBD242AD9, -/**/ 0x00000000, 0x3FF07C00, -/**/ 0xC54798FB, 0xBF183591, -/**/ 0x28140000, 0xBF9E72BF, -/**/ 0x49774D47, 0x3D28D751, -/**/ 0x00000000, 0x3FF07800, -/**/ 0x518F4EFD, 0xBF23CFA1, -/**/ 0x25980000, 0xBF9D6B27, -/**/ 0x50D1B838, 0x3D39FF7B, -/**/ 0x00000000, 0x3FF07400, -/**/ 0x01073261, 0xBF2B3EB7, -/**/ 0xEC150000, 0xBF9C63D2, -/**/ 0xE030A687, 0x3D35439C, -/**/ 0x00000000, 0x3FF07000, -/**/ 0xD6EAB025, 0xBF31341F, -/**/ 0x58B70000, 0xBF9B5CC2, -/**/ 0xB8AFBFE8, 0xBD18E611, -/**/ 0x00000000, 0x3FF06C00, -/**/ 0x6ED049E0, 0xBF34A638, -/**/ 0x48C60000, 0xBF9A55F5, -/**/ 0x9F2D03C9, 0x3D2DE070, -/**/ 0x00000000, 0x3FF06800, -/**/ 0xEF997F5C, 0xBF37F5BF, -/**/ 0x99A20000, 0xBF994F6B, -/**/ 0xF96CF7F5, 0xBD311D5E, -/**/ 0x00000000, 0x3FF06400, -/**/ 0xE5604189, 0xBF3B22D0, -/**/ 0x28C90000, 0xBF984925, -/**/ 0x325A0C34, 0x3D2AA0BA, -/**/ 0x00000000, 0x3FF06000, -/**/ 0xC1163FF0, 0xBF3E2D85, -/**/ 0xD3D00000, 0xBF974321, -/**/ 0x0FE94778, 0xBCFB4A69, -/**/ 0x00000000, 0x3FF05800, -/**/ 0x27586632, 0x3F3EEA07, -/**/ 0x78690000, 0xBF963D61, -/**/ 0x89596542, 0xBD07ABF3, -/**/ 0x00000000, 0x3FF05400, -/**/ 0x98E2A5E7, 0x3F3C23BB, -/**/ 0xF45F0000, 0xBF9537E3, -/**/ 0xD2D7F253, 0xBD2AB259, -/**/ 0x00000000, 0x3FF05000, -/**/ 0x73404146, 0x3F397F7D, -/**/ 0x25980000, 0xBF9432A9, -/**/ 0x928637FE, 0xBD098139, -/**/ 0x00000000, 0x3FF04C00, -/**/ 0xB0C7B49A, 0x3F36FD32, -/**/ 0xEA130000, 0xBF932DB0, -/**/ 0x130895FC, 0xBD2710CB, -/**/ 0x00000000, 0x3FF04800, -/**/ 0x664C578A, 0x3F349CC1, -/**/ 0x1FEA0000, 0xBF9228FB, -/**/ 0x284991FE, 0xBD2713E3, -/**/ 0x00000000, 0x3FF04400, -/**/ 0xC2FCB1F4, 0x3F325E0F, -/**/ 0xA5500000, 0xBF912487, -/**/ 0xFED4B393, 0xBD3FDBE5, -/**/ 0x00000000, 0x3FF04000, -/**/ 0x10410410, 0x3F304104, -/**/ 0x58930000, 0xBF902056, -/**/ 0x7C8E8417, 0xBD3611D2, -/**/ 0x00000000, 0x3FF03C00, -/**/ 0x6334030B, 0x3F2C8B09, -/**/ 0x30340000, 0xBF8E38CE, -/**/ 0xA3DA281A, 0x3D39DE88, -/**/ 0x00000000, 0x3FF03800, -/**/ 0x48FF7E3A, 0x3F28D6F0, -/**/ 0x84C80000, 0xBF8C3173, -/**/ 0xFCEFB9FE, 0x3D341F33, -/**/ 0x00000000, 0x3FF03400, -/**/ 0x0081A559, 0x3F25658A, -/**/ 0x6C180000, 0xBF8A2A9C, -/**/ 0x4D6D3472, 0x3D3F73BC, -/**/ 0x00000000, 0x3FF03000, -/**/ 0xEBC349DE, 0x3F2236A3, -/**/ 0xA3880000, 0xBF882448, -/**/ 0x12C584E0, 0xBD345544, -/**/ 0x00000000, 0x3FF02C00, -/**/ 0x3FEFD386, 0x3F1E9417, -/**/ 0xE8B60000, 0xBF861E77, -/**/ 0xEAF8EAF3, 0x3D38073E, -/**/ 0x00000000, 0x3FF02800, -/**/ 0xCA7A317C, 0x3F193F1D, -/**/ 0xF9680000, 0xBF841929, -/**/ 0x55D01368, 0xBD1977C7, -/**/ 0x00000000, 0x3FF02400, -/**/ 0x6CB49652, 0x3F146DF7, -/**/ 0x939E0000, 0xBF82145E, -/**/ 0x38C4EA00, 0xBD3E3D12, -/**/ 0x00000000, 0x3FF02000, -/**/ 0x81020408, 0x3F102040, -/**/ 0x75880000, 0xBF801015, -/**/ 0x1998B506, 0xBD3BCE25, -/**/ 0x00000000, 0x3FF01C00, -/**/ 0x8C355D63, 0x3F08AB2B, -/**/ 0xBB100000, 0xBF7C189C, -/**/ 0x12588560, 0x3D3D8055, -/**/ 0x00000000, 0x3FF01800, -/**/ 0xBD1BA97E, 0x3F021B28, -/**/ 0x14580000, 0xBF781212, -/**/ 0x82973F27, 0xBD1AD503, -/**/ 0x00000000, 0x3FF01400, -/**/ 0x411155AB, 0x3EF91F67, -/**/ 0x74780000, 0xBF740C8A, -/**/ 0xDF070002, 0xBD1E3871, -/**/ 0x00000000, 0x3FF01000, -/**/ 0x10101010, 0x3EF01010, -/**/ 0x59580000, 0xBF700805, -/**/ 0xCB31C67B, 0xBD2166AF, -/**/ 0x00000000, 0x3FF00C00, -/**/ 0x279DB649, 0x3EE20D8A, -/**/ 0x82880000, 0xBF680904, -/**/ 0x96A70C0C, 0xBD285C06, -/**/ 0x00000000, 0x3FF00800, -/**/ 0x02010080, 0x3ED00804, -/**/ 0x55D80000, 0xBF600401, -/**/ 0xC7CC7089, 0x3D33BB10, -/**/ 0x00000000, 0x3FF00400, -/**/ 0x00401004, 0x3EB00401, -/**/ 0x55600000, 0xBF500200, -/**/ 0xCD5F35F8, 0xBD356224, -/**/ 0x00000000, 0x3FF00000, -/**/ 0x00000000, 0x00000000, -/**/ 0x00000000, 0x00000000, -/**/ 0x00000000, 0x00000000, -/**/ 0x00000000, 0x3FEFF800, -/**/ 0xFF801FF8, 0x3EAFF801, -/**/ 0xAA800000, 0x3F4FFC00, -/**/ 0x7809A0A3, 0x3D35621F, -/**/ 0x00000000, 0x3FEFF000, -/**/ 0xFC01FF00, 0x3ECFF007, -/**/ 0xA9B00000, 0x3F5FF802, -/**/ 0x1D61C5EB, 0xBD33BC66, -/**/ 0x00000000, 0x3FEFE800, -/**/ 0x186DADBE, 0x3EE1F28A, -/**/ 0x7D780000, 0x3F67F704, -/**/ 0x89D68648, 0x3D283DA6, -/**/ 0x00000000, 0x3FEFE000, -/**/ 0xE01FE020, 0x3EEFE01F, -/**/ 0xA2B00000, 0x3F6FF00A, -/**/ 0xA086B56A, 0x3D20BC04, -/**/ 0x00000000, 0x3FEFD800, -/**/ 0xDF68BD14, 0x3EF8E0E6, -/**/ 0x60F00000, 0x3F73F38A, -/**/ 0x93C93749, 0x3D192256, -/**/ 0x00000000, 0x3FEFD000, -/**/ 0x439A981C, 0x3F01E528, -/**/ 0xEBD80000, 0x3F77EE11, -/**/ 0xC2D23A07, 0x3D0749D3, -/**/ 0x00000000, 0x3FEFC800, -/**/ 0x8596391C, 0x3F08556A, -/**/ 0x70040000, 0x3F7BE79C, -/**/ 0x9A6C0404, 0x3D38EC8F, -/**/ 0x00000000, 0x3FEFC000, -/**/ 0x01FC07F0, 0x3F0FC07F, -/**/ 0x6B100000, 0x3F7FE02A, -/**/ 0x0DDA40E4, 0x3D19E23F, -/**/ 0x00000000, 0x3FEFB800, -/**/ 0x9F5976B5, 0x3F1412D5, -/**/ 0x2D1A0000, 0x3F81EBDE, -/**/ 0xFF48DC36, 0xBD2A0683, -/**/ 0x00000000, 0x3FEFB000, -/**/ 0xBD271E34, 0x3F18C21A, -/**/ 0x5D260000, 0x3F83E729, -/**/ 0xFF29A114, 0xBD2609C1, -/**/ 0x00000000, 0x3FEFA800, -/**/ 0x5594A734, 0x3F1DEDB2, -/**/ 0x03EC0000, 0x3F85E1F7, -/**/ 0xF585DA1B, 0x3D37CA09, -/**/ 0x00000000, 0x3FEFA000, -/**/ 0x1FA11CAA, 0x3F21CAA0, -/**/ 0x5F820000, 0x3F87DC47, -/**/ 0x5B5DA1F5, 0xBD3EB124, -/**/ 0x00000000, 0x3FEF9800, -/**/ 0x55E8CB6B, 0x3F24DC34, -/**/ 0xADC60000, 0x3F89D61A, -/**/ 0x327B4257, 0x3D37B196, -/**/ 0x00000000, 0x3FEF9000, -/**/ 0x13BAF1B2, 0x3F282B68, -/**/ 0x2C740000, 0x3F8BCF71, -/**/ 0x97BD9771, 0x3D1C25E0, -/**/ 0x00000000, 0x3FEF8800, -/**/ 0xCC420861, 0x3F2BB80D, -/**/ 0x19120000, 0x3F8DC84B, -/**/ 0x1E3A5B30, 0x3D1C0A54, -/**/ 0x00000000, 0x3FEF8000, -/**/ 0x1F81F820, 0x3F2F81F8, -/**/ 0xB0FC0000, 0x3F8FC0A8, -/**/ 0xF6D3A69C, 0x3CDF1E7C, -/**/ 0x00000000, 0x3FEF7800, -/**/ 0xED1079FA, 0x3F31C47C, -/**/ 0x18B00000, 0x3F90DC45, -/**/ 0x380313FC, 0xBD29BC2F, -/**/ 0x00000000, 0x3FEF7000, -/**/ 0xFA98528D, 0x3F33E672, -/**/ 0xEB9F0000, 0x3F91D7F7, -/**/ 0x83FCC7A6, 0xBD14193A, -/**/ 0x00000000, 0x3FEF6800, -/**/ 0xCAFBD3D2, 0x3F3626C7, -/**/ 0xEFB50000, 0x3F92D36C, -/**/ 0x341706C3, 0x3D35F0BB, -/**/ 0x00000000, 0x3FEF6000, -/**/ 0x06DDABA6, 0x3F388565, -/**/ 0x43470000, 0x3F93CEA4, -/**/ 0x32D6A40B, 0xBD36A2C4, -/**/ 0x00000000, 0x3FEF5800, -/**/ 0x6CC4F5F5, 0x3F3B0234, -/**/ 0x04900000, 0x3F94C99E, -/**/ 0x5DF5F4A5, 0x3D1DECC6, -/**/ 0x00000000, 0x3FEF5000, -/**/ 0xD102728A, 0x3F3D9D1F, -/**/ 0x51B90000, 0x3F95C45A, -/**/ 0x216D87D8, 0xBD263BB6, -/**/ 0x00000000, 0x3FEF5000, -/**/ 0xE26A1DD4, 0xBF3FA9EE, -/**/ 0x48D20000, 0x3F96BED9, -/**/ 0x160A43F8, 0xBD320BC4, -/**/ 0x00000000, 0x3FEF4800, -/**/ 0xADEC7540, 0xBF3CD30D, -/**/ 0x07D60000, 0x3F97B91B, -/**/ 0xB602ACE4, 0xBD33B955, -/**/ 0x00000000, 0x3FEF4000, -/**/ 0x7C761DC6, 0xBF39DE52, -/**/ 0xACAA0000, 0x3F98B31F, -/**/ 0xA96E4964, 0xBD33FC78, -/**/ 0x00000000, 0x3FEF3800, -/**/ 0x23989FF0, 0xBF36CBD3, -/**/ 0x551D0000, 0x3F99ACE7, -/**/ 0x7EC7C410, 0xBD2D75D9, -/**/ 0x00000000, 0x3FEF3000, -/**/ 0x639F8B15, 0xBF339BA5, -/**/ 0x1EE80000, 0x3F9AA672, -/**/ 0x5C5AF494, 0x3D2AD4EB, -/**/ 0x00000000, 0x3FEF2800, -/**/ 0xE7AA579B, 0xBF304DDE, -/**/ 0x27B00000, 0x3F9B9FC0, -/**/ 0x0AE6922A, 0xBD3B9A01, -/**/ 0x00000000, 0x3FEF2000, -/**/ 0x8B8C46FD, 0xBF29C52A, -/**/ 0x8D010000, 0x3F9C98D1, -/**/ 0x0589DF0F, 0xBD2BF615, -/**/ 0x00000000, 0x3FEF1800, -/**/ 0xFE0E92B4, 0xBF22B3BB, -/**/ 0x6C540000, 0x3F9D91A6, -/**/ 0x658CFB9A, 0x3D2E61F1, -/**/ 0x00000000, 0x3FEF1000, -/**/ 0xFE8B488E, 0xBF16CF39, -/**/ 0xE30D0000, 0x3F9E8A3E, -/**/ 0x3DE53900, 0xBD21A9FA, -/**/ 0x00000000, 0x3FEF0800, -/**/ 0xF07C1F08, 0xBEFF07C1, -/**/ 0x0E780000, 0x3F9F829B, -/**/ 0x7C7E09E4, 0x3D298026, -/**/ 0x00000000, 0x3FEF0000, -/**/ 0x007C00F8, 0x3EFF003E, -/**/ 0x85E70000, 0x3FA03D5D, -/**/ 0x60ED29CF, 0x3D3F7789, -/**/ 0x00000000, 0x3FEEF800, -/**/ 0x3D759870, 0x3F17B671, -/**/ 0x7C198000, 0x3FA0B94F, -/**/ 0x6F022783, 0xBD2E8989, -/**/ 0x00000000, 0x3FEEF000, -/**/ 0x2A8BB96A, 0x3F241070, -/**/ 0x78598000, 0x3FA13523, -/**/ 0xB71FA59B, 0xBD1C1AC3, -/**/ 0x00000000, 0x3FEEE800, -/**/ 0x58E01EEA, 0x3F2C7F84, -/**/ 0x89240000, 0x3FA1B0D9, -/**/ 0x9AE889BB, 0xBD33401E, -/**/ 0x00000000, 0x3FEEE000, -/**/ 0xA3D491BC, 0x3F329425, -/**/ 0xBCEA8000, 0x3FA22C71, -/**/ 0xF87F888F, 0x3CFD2818, -/**/ 0x00000000, 0x3FEED800, -/**/ 0x9E9D2AE8, 0x3F37054D, -/**/ 0x22150000, 0x3FA2A7EC, -/**/ 0x7A9163FE, 0xBD278CE7, -/**/ 0x00000000, 0x3FEED000, -/**/ 0x540C85E6, 0x3F3B9325, -/**/ 0xC7000000, 0x3FA32348, -/**/ 0x90B1E49F, 0x3D2696DB, -/**/ 0x00000000, 0x3FEED000, -/**/ 0xF099FC26, 0xBF3FC267, -/**/ 0xB9FE8000, 0x3FA39E87, -/**/ 0x80AD9015, 0x3D3EAFD4, -/**/ 0x00000000, 0x3FEEC800, -/**/ 0xD02A4E5D, 0xBF3AFB6E, -/**/ 0x09590000, 0x3FA419A9, -/**/ 0x67D48EA7, 0x3D3B5CDC, -/**/ 0x00000000, 0x3FEEC000, -/**/ 0xD7A79FF1, 0xBF361803, -/**/ 0xC34D8000, 0x3FA494AC, -/**/ 0xA56FD247, 0x3D211C78, -/**/ 0x00000000, 0x3FEEB800, -/**/ 0x805C2197, 0xBF31183B, -/**/ 0xF60F8000, 0x3FA50F92, -/**/ 0x0A91FFE3, 0x3D296CFB, -/**/ 0x00000000, 0x3FEEB000, -/**/ 0x5FE15180, 0xBF27F854, -/**/ 0xAFC90000, 0x3FA58A5B, -/**/ 0x9570AD39, 0xBD2B2B73, -/**/ 0x00000000, 0x3FEEA800, -/**/ 0xE210C36A, 0xBF1B0F90, -/**/ 0xFE990000, 0x3FA60506, -/**/ 0x8194E036, 0xBD32BA40, -/**/ 0x00000000, 0x3FEEA000, -/**/ 0x8C33ADB2, 0xBEF6F7DD, -/**/ 0xF0948000, 0x3FA67F94, -/**/ 0x3E7E4ED7, 0x3D3ECC1F, -/**/ 0x00000000, 0x3FEE9800, -/**/ 0x1003D310, 0x3F1003D3, -/**/ 0x93C78000, 0x3FA6FA05, -/**/ 0x41D634A1, 0x3D3B415E, -/**/ 0x00000000, 0x3FEE9000, -/**/ 0x0B7672A0, 0x3F231ABF, -/**/ 0xF6330000, 0x3FA77458, -/**/ 0xE586AF09, 0xBD3181DC, -/**/ 0x00000000, 0x3FEE8800, -/**/ 0xCF172481, 0x3F2E6B5C, -/**/ 0x25CD8000, 0x3FA7EE8F, -/**/ 0x11A5C1E9, 0xBD3F4216, -/**/ 0x00000000, 0x3FEE8000, -/**/ 0x77A84876, 0x3F34F9CD, -/**/ 0x30840000, 0x3FA868A8, -/**/ 0x134AC693, 0xBD12623A, -/**/ 0x00000000, 0x3FEE7800, -/**/ 0xD7473427, 0x3F3AD9A8, -/**/ 0x243A0000, 0x3FA8E2A4, -/**/ 0x01426490, 0x3D2B9EEB, -/**/ 0x00000000, 0x3FEE7800, -/**/ 0x4578DCCA, 0xBF3F2AD3, -/**/ 0x0EC90000, 0x3FA95C83, -/**/ 0x97C5FEB8, 0xBD2C1482, -/**/ 0x00000000, 0x3FEE7000, -/**/ 0x97A6A035, 0xBF3913BA, -/**/ 0xFDFF8000, 0x3FA9D644, -/**/ 0x539A473B, 0x3D313C90, -/**/ 0x00000000, 0x3FEE6800, -/**/ 0xC594A915, 0xBF32E120, -/**/ 0xFFA40000, 0x3FAA4FE9, -/**/ 0xA0402925, 0xBD36E584, -/**/ 0x00000000, 0x3FEE6000, -/**/ 0xC5DF4232, 0xBF292632, -/**/ 0x21710000, 0x3FAAC972, -/**/ 0xF013222C, 0x3D2F8D3E, -/**/ 0x00000000, 0x3FEE5800, -/**/ 0xC3518A6E, 0xBF18A6DF, -/**/ 0x71198000, 0x3FAB42DD, -/**/ 0xE5D6704C, 0xBD1C827A, -/**/ 0x00000000, 0x3FEE5000, -/**/ 0x86833271, 0x3ED6BC08, -/**/ 0xFC450000, 0x3FABBC2B, -/**/ 0x91417DAF, 0xBD17D186, -/**/ 0x00000000, 0x3FEE4800, -/**/ 0xE672838D, 0x3F1BEB2D, -/**/ 0xD0920000, 0x3FAC355D, -/**/ 0x9ABF8388, 0x3D2F2CCC, -/**/ 0x00000000, 0x3FEE4000, -/**/ 0x9785150A, 0x3F2B6B8D, -/**/ 0xFB960000, 0x3FACAE72, -/**/ 0x2025B1BE, 0xBD3EFABF, -/**/ 0x00000000, 0x3FEE3800, -/**/ 0xE0D399FA, 0x3F348BCE, -/**/ 0x8ADB0000, 0x3FAD276B, -/**/ 0xC78A64B0, 0x3D16A423, -/**/ 0x00000000, 0x3FEE3000, -/**/ 0x933AC00F, 0x3F3B7CD0, -/**/ 0x8BE38000, 0x3FADA047, -/**/ 0xB1F6FE05, 0x3D2252C7, -/**/ 0x00000000, 0x3FEE3000, -/**/ 0x308F5281, 0xBF3D7747, -/**/ 0x0C278000, 0x3FAE1907, -/**/ 0x64629E86, 0xBD2FEA46, -/**/ 0x00000000, 0x3FEE2800, -/**/ 0x6C196F66, 0xBF36508B, -/**/ 0x19150000, 0x3FAE91AA, -/**/ 0x1DCC6A76, 0xBD0E82A0, -/**/ 0x00000000, 0x3FEE2000, -/**/ 0x1E1E1E1E, 0xBF2E1E1E, -/**/ 0xC0118000, 0x3FAF0A30, -/**/ 0x83368E91, 0xBD2D599E, -/**/ 0x00000000, 0x3FEE1800, -/**/ 0xDD355CDB, 0xBF1ECB93, -/**/ 0x0E780000, 0x3FAF829B, -/**/ 0x7C7E09E4, 0x3D398026, -/**/ 0x00000000, 0x3FEE1000, -/**/ 0x7C01E100, 0xBECE0FF8, -/**/ 0x119B8000, 0x3FAFFAE9, -/**/ 0x4262C554, 0x3D230337, -/**/ 0x00000000, 0x3FEE0800, -/**/ 0x25C73724, 0x3F1D54B5, -/**/ 0x6B624000, 0x3FB0398D, -/**/ 0xFCBFCD00, 0xBD3AB14D, -/**/ 0x00000000, 0x3FEE0000, -/**/ 0x1E01E01E, 0x3F2E01E0, -/**/ 0x35990000, 0x3FB07598, -/**/ 0xE4B59987, 0xBD3B8ECF, -/**/ 0x00000000, 0x3FEDF800, -/**/ 0xC84194BA, 0x3F36C715, -/**/ 0xEE0D0000, 0x3FB0B194, -/**/ 0x4F69EDCC, 0x3D3666EA, -/**/ 0x00000000, 0x3FEDF000, -/**/ 0xEF26D838, 0x3F3EA78B, -/**/ 0x9B554000, 0x3FB0ED83, -/**/ 0x6D48ABB4, 0xBD3901F4, -/**/ 0x00000000, 0x3FEDF000, -/**/ 0xF10995DC, 0xBF395DBF, -/**/ 0x44030000, 0x3FB12964, -/**/ 0x751AA773, 0xBD3D53BB, -/**/ 0x00000000, 0x3FEDE800, -/**/ 0x3BCBADC8, 0xBF3148E0, -/**/ 0xEEA38000, 0x3FB16536, -/**/ 0x768FA309, 0xBD147C5E, -/**/ 0x00000000, 0x3FEDE000, -/**/ 0x86E25CE1, 0xBF2233CE, -/**/ 0xA1BF8000, 0x3FB1A0FB, -/**/ 0xC319D6DC, 0x3D24A3FC, -/**/ 0x00000000, 0x3FEDD800, -/**/ 0x26B3FE23, 0xBEEA1CE9, -/**/ 0x63DB0000, 0x3FB1DCB2, -/**/ 0x5E9E8981, 0x3D39444F, -/**/ 0x00000000, 0x3FEDD000, -/**/ 0x0AB71710, 0x3F1E4836, -/**/ 0x3B75C000, 0x3FB2185B, -/**/ 0xF8F32304, 0xBD3E3189, -/**/ 0x00000000, 0x3FEDC800, -/**/ 0x00EE500F, 0x3F300EE5, -/**/ 0x2F0A0000, 0x3FB253F6, -/**/ 0xFB69A701, 0x3D3416F8, -/**/ 0x00000000, 0x3FEDC000, -/**/ 0x231C226A, 0x3F38A58D, -/**/ 0x450EC000, 0x3FB28F83, -/**/ 0xAA119769, 0x3D3A8D75, -/**/ 0x00000000, 0x3FEDC000, -/**/ 0x14715D63, 0xBF3EAA0C, -/**/ 0x83F5C000, 0x3FB2CB02, -/**/ 0xCA657021, 0x3D3E1EE2, -/**/ 0x00000000, 0x3FEDB800, -/**/ 0x92AEFFC5, 0xBF35DFF8, -/**/ 0xF22C8000, 0x3FB30673, -/**/ 0x9DCF0BA5, 0x3D24C9E2, -/**/ 0x00000000, 0x3FEDB000, -/**/ 0x67E251A0, 0xBF29F894, -/**/ 0x961BC000, 0x3FB341D7, -/**/ 0x99837610, 0x3D31D092, -/**/ 0x00000000, 0x3FEDA800, -/**/ 0x1FF89620, 0xBF0FF896, -/**/ 0x76284000, 0x3FB37D2D, -/**/ 0x9B7FF15C, 0xBD2C60AA, -/**/ 0x00000000, 0x3FEDA000, -/**/ 0x076828BD, 0x3F145E70, -/**/ 0x98B1C000, 0x3FB3B875, -/**/ 0x94ACA313, 0xBD222415, -/**/ 0x00000000, 0x3FED9800, -/**/ 0xE567D573, 0x3F2C8F60, -/**/ 0x04140000, 0x3FB3F3B0, -/**/ 0xACDFCEC5, 0x3CEE2474, -/**/ 0x00000000, 0x3FED9000, -/**/ 0xF3FC4DA2, 0x3F379118, -/**/ 0xBEA64000, 0x3FB42EDC, -/**/ 0xEA7C9ACD, 0x3D1BC0EE, -/**/ 0x00000000, 0x3FED9000, -/**/ 0x049DE4C3, 0xBF3F0C3C, -/**/ 0xCEBB4000, 0x3FB469FB, -/**/ 0x4F257194, 0x3D3B663C, -/**/ 0x00000000, 0x3FED8800, -/**/ 0xF13D5906, 0xBF35905F, -/**/ 0x3AA1C000, 0x3FB4A50D, -/**/ 0x308973E2, 0xBD2F7FE1, -/**/ 0x00000000, 0x3FED8000, -/**/ 0x77D1EA57, 0xBF27F6C8, -/**/ 0x08A34000, 0x3FB4E011, -/**/ 0xDF2C5AE5, 0x3D3AE5CF, -/**/ 0x00000000, 0x3FED7800, -/**/ 0xF4F31BA0, 0xBF026AD1, -/**/ 0x3F060000, 0x3FB51B07, -/**/ 0x278E686A, 0x3D383F69, -/**/ 0x00000000, 0x3FED7000, -/**/ 0xF26DF1BD, 0x3F1DE6B2, -/**/ 0xE40B4000, 0x3FB555EF, -/**/ 0x8C868E23, 0x3D30B497, -/**/ 0x00000000, 0x3FED6800, -/**/ 0x7BA23D96, 0x3F31599F, -/**/ 0xFDF00000, 0x3FB590CA, -/**/ 0x5722ABAA, 0x3D3C284F, -/**/ 0x00000000, 0x3FED6000, -/**/ 0xD425A760, 0x3F3B526C, -/**/ 0x92ED4000, 0x3FB5CB98, -/**/ 0xA64FC52F, 0x3D17BE44, -/**/ 0x00000000, 0x3FED6000, -/**/ 0x546A6FF1, 0xBF3A9BFC, -/**/ 0xA9374000, 0x3FB60658, -/**/ 0xDEE9C4F8, 0x3D30C3B1, -/**/ 0x00000000, 0x3FED5800, -/**/ 0x08F02FAC, 0xBF3071AD, -/**/ 0x46FE8000, 0x3FB6410B, -/**/ 0x3CBD8D14, 0xBD153F8F, -/**/ 0x00000000, 0x3FED5000, -/**/ 0x12C6C142, 0xBF18BAD9, -/**/ 0x726EC000, 0x3FB67BB0, -/**/ 0x69EF5912, 0x3CEF724B, -/**/ 0x00000000, 0x3FED4800, -/**/ 0x3254A5A2, 0x3F10B35C, -/**/ 0x31B00000, 0x3FB6B648, -/**/ 0x1377DE92, 0xBD3BF30A, -/**/ 0x00000000, 0x3FED4000, -/**/ 0x1D41D41D, 0x3F2D41D4, -/**/ 0x8AE58000, 0x3FB6F0D2, -/**/ 0x1B664613, 0xBD34B464, -/**/ 0x00000000, 0x3FED3800, -/**/ 0xF494E548, 0x3F392D71, -/**/ 0x842EC000, 0x3FB72B4F, -/**/ 0xC00C9DD3, 0xBD3704CC, -/**/ 0x00000000, 0x3FED3800, -/**/ 0xFF165C2E, 0xBF3C2DA1, -/**/ 0x23A6C000, 0x3FB765BF, -/**/ 0x35C4256A, 0xBCFECBC0, -/**/ 0x00000000, 0x3FED3000, -/**/ 0x7AA49674, 0xBF317062, -/**/ 0x6F648000, 0x3FB7A021, -/**/ 0xA18418FF, 0x3D3E124C, -/**/ 0x00000000, 0x3FED2800, -/**/ 0x749CB290, 0xBF1A6B80, -/**/ 0x6D7B0000, 0x3FB7DA76, -/**/ 0x4480C89B, 0x3D32CC84, -/**/ 0x00000000, 0x3FED2000, -/**/ 0x25C6336D, 0x3F114B52, -/**/ 0x23F8C000, 0x3FB814BE, -/**/ 0xDA82FDFD, 0x3CCB2381, -/**/ 0x00000000, 0x3FED1800, -/**/ 0xF08A3B1D, 0x3F2EB155, -/**/ 0x98E84000, 0x3FB84EF8, -/**/ 0x246977C9, 0xBD37D5CD, -/**/ 0x00000000, 0x3FED1000, -/**/ 0xBD71CD93, 0x3F3A7692, -/**/ 0xD24FC000, 0x3FB88925, -/**/ 0x44FBB806, 0xBD31D505, -/**/ 0x00000000, 0x3FED1000, -/**/ 0x89FC5E69, 0xBF3A5384, -/**/ 0xD6318000, 0x3FB8C345, -/**/ 0xACB42A66, 0x3D3B20F5, -/**/ 0x00000000, 0x3FED0800, -/**/ 0x6439240E, 0xBF2E0B56, -/**/ 0xAA8C4000, 0x3FB8FD58, -/**/ 0x1BCB725B, 0xBD3EEC90, -/**/ 0x00000000, 0x3FED0000, -/**/ 0x01CFF8C0, 0xBF0CFF8C, -/**/ 0x55594000, 0x3FB9375E, -/**/ 0x7380C364, 0x3D3EDDC3, -/**/ 0x00000000, 0x3FECF800, -/**/ 0x546D8D78, 0x3F1F7661, -/**/ 0xDC8F8000, 0x3FB97156, -/**/ 0x9AFDB97B, 0xBD3C1FC1, -/**/ 0x00000000, 0x3FECF000, -/**/ 0x25FE30D9, 0x3F3372E2, -/**/ 0x46204000, 0x3FB9AB42, -/**/ 0x26787061, 0xBD28A648, -/**/ 0x00000000, 0x3FECE800, -/**/ 0xD92305A6, 0x3F3F1FDB, -/**/ 0x97F9C000, 0x3FB9E520, -/**/ 0xB52DD050, 0x3D235FAC, -/**/ 0x00000000, 0x3FECE800, -/**/ 0x9C37FC63, 0xBF351B8A, -/**/ 0xD8060000, 0x3FBA1EF1, -/**/ 0x6DF97BCB, 0x3D3CD417, -/**/ 0x00000000, 0x3FECE000, -/**/ 0x6CB725AB, 0xBF227EC2, -/**/ 0x0C2B4000, 0x3FBA58B6, -/**/ 0x5C5C9F2A, 0xBD3CDC73, -/**/ 0x00000000, 0x3FECD800, -/**/ 0xE6C2B448, 0x3F05A240, -/**/ 0x3A4AC000, 0x3FBA926D, -/**/ 0x0BD22A9C, 0x3D356365, -/**/ 0x00000000, 0x3FECD000, -/**/ 0xFBB8D9F3, 0x3F2D7EC2, -/**/ 0x68434000, 0x3FBACC17, -/**/ 0xA0B7FA4C, 0xBD2AA783, -/**/ 0x00000000, 0x3FECC800, -/**/ 0x1B71D3E9, 0x3F3AE1DB, -/**/ 0x9BEE4000, 0x3FBB05B4, -/**/ 0x18F84A5E, 0x3D0FF22C, -/**/ 0x00000000, 0x3FECC800, -/**/ 0xCD6DE82D, 0xBF38E45A, -/**/ 0xDB220000, 0x3FBB3F44, -/**/ 0xD8DE09AF, 0x3D3FD153, -/**/ 0x00000000, 0x3FECC000, -/**/ 0xE341926A, 0xBF29269F, -/**/ 0x2BB10000, 0x3FBB78C8, -/**/ 0xBC3987E7, 0xBD325EF7, -/**/ 0x00000000, 0x3FECB800, -/**/ 0xF620C1DA, 0xBEC589FB, -/**/ 0x93690000, 0x3FBBB23E, -/**/ 0x3559DB8B, 0xBD368B18, -/**/ 0x00000000, 0x3FECB000, -/**/ 0x0DE5FF1A, 0x3F28A893, -/**/ 0x18148000, 0x3FBBEBA8, -/**/ 0xB6DF1F57, 0xBD389B78, -/**/ 0x00000000, 0x3FECA800, -/**/ 0x0039563B, 0x3F38EAB9, -/**/ 0xBF79C000, 0x3FBC2504, -/**/ 0xD0EF4ADC, 0x3D3717C4, -/**/ 0x00000000, 0x3FECA800, -/**/ 0x08F377F2, 0xBF3A67D5, -/**/ 0x8F5BC000, 0x3FBC5E54, -/**/ 0x585FBE06, 0x3D1D0C57, -/**/ 0x00000000, 0x3FECA000, -/**/ 0x072792E4, 0xBF2B46E0, -/**/ 0x8D790000, 0x3FBC9797, -/**/ 0x977D1884, 0xBD36E010, -/**/ 0x00000000, 0x3FEC9800, -/**/ 0x1BB327C3, 0xBEE904EA, -/**/ 0xBF8C0000, 0x3FBCD0CD, -/**/ 0xB50DD743, 0x3D33E14D, -/**/ 0x00000000, 0x3FEC9000, -/**/ 0x77683AEC, 0x3F2853EB, -/**/ 0x2B4C4000, 0x3FBD09F7, -/**/ 0x00354E33, 0x3D2048C0, -/**/ 0x00000000, 0x3FEC8800, -/**/ 0xDC52100E, 0x3F3932D7, -/**/ 0xD66CC000, 0x3FBD4313, -/**/ 0x79135713, 0xBD294543, -/**/ 0x00000000, 0x3FEC8800, -/**/ 0x2736962B, 0xBF39AD90, -/**/ 0xC69CC000, 0x3FBD7C23, -/**/ 0xDD328771, 0xBD297EE4, -/**/ 0x00000000, 0x3FEC8000, -/**/ 0xF316B4C2, 0xBF28EEA2, -/**/ 0x0187C000, 0x3FBDB527, -/**/ 0x56AE181F, 0x3D392778, -/**/ 0x00000000, 0x3FEC7800, -/**/ 0x058F7536, 0x3EEAB099, -/**/ 0x8CD60000, 0x3FBDEE1D, -/**/ 0x729EFF89, 0xBD328DA0, -/**/ 0x00000000, 0x3FEC7000, -/**/ 0x1C71C71C, 0x3F2C71C7, -/**/ 0x6E2B0000, 0x3FBE2707, -/**/ 0x2AF0003C, 0xBD2A342C, -/**/ 0x00000000, 0x3FEC6800, -/**/ 0xD6422A30, 0x3F3BB2BB, -/**/ 0xAB274000, 0x3FBE5FE4, -/**/ 0xF74FFE4D, 0xBD35FAE9, -/**/ 0x00000000, 0x3FEC6800, -/**/ 0x54BDE47E, 0xBF36BD01, -/**/ 0x49670000, 0x3FBE98B5, -/**/ 0x89C50E97, 0x3D346774, -/**/ 0x00000000, 0x3FEC6000, -/**/ 0xB5157FE4, 0xBF222CC5, -/**/ 0x4E838000, 0x3FBED179, -/**/ 0x749D0484, 0xBD1FD143, -/**/ 0x00000000, 0x3FEC5800, -/**/ 0xA930B840, 0x3F129A21, -/**/ 0xC0118000, 0x3FBF0A30, -/**/ 0x83368E91, 0xBD3D599E, -/**/ 0x00000000, 0x3FEC5000, -/**/ 0xAC5CEE14, 0x3F3279B1, -/**/ 0xA3A24000, 0x3FBF42DB, -/**/ 0x32DF6C0D, 0xBD3312B7, -/**/ 0x00000000, 0x3FEC5000, -/**/ 0xD4AB8D0B, 0xBF3F9CF5, -/**/ 0xFEC38000, 0x3FBF7B79, -/**/ 0xE897ED01, 0xBD010987, -/**/ 0x00000000, 0x3FEC4800, -/**/ 0xCC17DAE4, 0xBF319D7C, -/**/ 0xD6FF4000, 0x3FBFB40B, -/**/ 0xB7B53B5B, 0x3D2C0BEC, -/**/ 0x00000000, 0x3FEC4000, -/**/ 0x01C3F8F0, 0xBF0C3F8F, -/**/ 0x31DC0000, 0x3FBFEC91, -/**/ 0xD1AE6607, 0xBD354555, -/**/ 0x00000000, 0x3FEC3800, -/**/ 0xAB1B8FFC, 0x3F254738, -/**/ 0x0A6E0000, 0x3FC01285, -/**/ 0x4805BF94, 0xBD1A8619, -/**/ 0x00000000, 0x3FEC3000, -/**/ 0x48B3C5D7, 0x3F38E51F, -/**/ 0x42BF4000, 0x3FC02EBB, -/**/ 0x5CE00E5D, 0xBD15A8FA, -/**/ 0x00000000, 0x3FEC3000, -/**/ 0x867E595E, 0xBF38C377, -/**/ 0x449F6000, 0x3FC04AEB, -/**/ 0x65CCD35C, 0x3D2AFA90, -/**/ 0x00000000, 0x3FEC2800, -/**/ 0x15FE3D95, 0xBF24AC6D, -/**/ 0x12CA6000, 0x3FC06715, -/**/ 0x9CDC0A3D, 0xBD2A4757, -/**/ 0x00000000, 0x3FEC2000, -/**/ 0x53B8CDAE, 0x3F10B34F, -/**/ 0xAFFA2000, 0x3FC08338, -/**/ 0xAC823E27, 0x3D30533C, -/**/ 0x00000000, 0x3FEC1800, -/**/ 0x3FABB0F6, 0x3F32C599, -/**/ 0x1EE72000, 0x3FC09F56, -/**/ 0x7157D1A8, 0xBD28F305, -/**/ 0x00000000, 0x3FEC1800, -/**/ 0x97CD1B6C, 0xBF3E8BF4, -/**/ 0x6247A000, 0x3FC0BB6D, -/**/ 0x3CCD04B3, 0x3D35464F, -/**/ 0x00000000, 0x3FEC1000, -/**/ 0xE3F1F8FC, 0xBF2F8FC7, -/**/ 0x7CD08000, 0x3FC0D77E, -/**/ 0x2EE2F482, 0x3D3CB2CD, -/**/ 0x00000000, 0x3FEC0800, -/**/ 0x5B199F35, 0xBEEDC860, -/**/ 0x7134C000, 0x3FC0F389, -/**/ 0xE893D6C6, 0xBD3DA359, -/**/ 0x00000000, 0x3FEC0000, -/**/ 0x1C01C01C, 0x3F2C01C0, -/**/ 0x42254000, 0x3FC10F8E, -/**/ 0x43396307, 0xBD293B38, -/**/ 0x00000000, 0x3FEBF800, -/**/ 0x256228AA, 0x3F3D0577, -/**/ 0xF2518000, 0x3FC12B8C, -/**/ 0x13C0A0FC, 0x3D348A4A, -/**/ 0x00000000, 0x3FEBF800, -/**/ 0xCB93A8A1, 0xBF33E08B, -/**/ 0x84674000, 0x3FC14785, -/**/ 0x1027C750, 0x3D156345, -/**/ 0x00000000, 0x3FEBF000, -/**/ 0x1DE63F4A, 0xBF12C4DB, -/**/ 0xFB124000, 0x3FC16377, -/**/ 0xBF41763E, 0x3D091E1A, -/**/ 0x00000000, 0x3FEBE800, -/**/ 0x769F9E4F, 0x3F2526D0, -/**/ 0x58FCA000, 0x3FC17F64, -/**/ 0xD093C8DC, 0x3D2843FA, -/**/ 0x00000000, 0x3FEBE000, -/**/ 0x5292D891, 0x3F39ED43, -/**/ 0xA0CEE000, 0x3FC19B4A, -/**/ 0x9621338B, 0xBD3D8824, -/**/ 0x00000000, 0x3FEBE000, -/**/ 0x5FC845A9, 0xBF36A3B3, -/**/ 0xD52F6000, 0x3FC1B72A, -/**/ 0x1811A396, 0x3D2E80A4, -/**/ 0x00000000, 0x3FEBD800, -/**/ 0xB7230491, 0xBF1C7E26, -/**/ 0xF8C36000, 0x3FC1D304, -/**/ 0xDF451042, 0xBD3A6D44, -/**/ 0x00000000, 0x3FEBD000, -/**/ 0x451B61CB, 0x3F20F365, -/**/ 0x0E2DC000, 0x3FC1EED9, -/**/ 0x7097648F, 0x3D161563, -/**/ 0x00000000, 0x3FEBC800, -/**/ 0xD72DD0AA, 0x3F3827F3, -/**/ 0x18102000, 0x3FC20AA7, -/**/ 0x348552FE, 0x3D3F2C94, -/**/ 0x00000000, 0x3FEBC800, -/**/ 0xBE0C262F, 0xBF3814D3, -/**/ 0x190A6000, 0x3FC2266F, -/**/ 0xB840E7F6, 0xBD24D20A, -/**/ 0x00000000, 0x3FEBC000, -/**/ 0x7ECECB53, 0xBF207963, -/**/ 0x13BA6000, 0x3FC24231, -/**/ 0x78EE9D9C, 0xBD3E3A00, -/**/ 0x00000000, 0x3FEBB800, -/**/ 0xF29268D3, 0x3F1EC130, -/**/ 0x0ABC6000, 0x3FC25DED, -/**/ 0x4F176449, 0x3D35A385, -/**/ 0x00000000, 0x3FEBB000, -/**/ 0xAB6353BF, 0x3F37B218, -/**/ 0x00AB4000, 0x3FC279A3, -/**/ 0xB3235108, 0x3D3EF432, -/**/ 0x00000000, 0x3FEBB000, -/**/ 0xF2298376, 0xBF383759, -/**/ 0xF8200000, 0x3FC29552, -/**/ 0xF4471DFC, 0xBD35B967, -/**/ 0x00000000, 0x3FEBA800, -/**/ 0x1EAD4253, 0xBF201832, -/**/ 0xF3B1A000, 0x3FC2B0FC, -/**/ 0xE30A59EA, 0x3D177CA3, -/**/ 0x00000000, 0x3FEBA000, -/**/ 0xD84886B1, 0x3F20679B, -/**/ 0xF5F60000, 0x3FC2CCA0, -/**/ 0x91AFF120, 0xBD3B5EF1, -/**/ 0x00000000, 0x3FEB9800, -/**/ 0xA41FEB4C, 0x3F38884D, -/**/ 0x0180E000, 0x3FC2E83F, -/**/ 0xC284E1CE, 0xBD3F0C2A, -/**/ 0x00000000, 0x3FEB9800, -/**/ 0x3806E548, 0xBF370EA7, -/**/ 0x18E48000, 0x3FC303D7, -/**/ 0xCE3ECB05, 0xBCD680B5, -/**/ 0x00000000, 0x3FEB9000, -/**/ 0xB5EF34C0, 0xBF1A4477, -/**/ 0x3EB1A000, 0x3FC31F69, -/**/ 0xE5A396FB, 0xBD2A6726, -/**/ 0x00000000, 0x3FEB8800, -/**/ 0x9401B894, 0x3F2401B8, -/**/ 0x75770000, 0x3FC33AF5, -/**/ 0xA2FE72A5, 0x3D3C9ECC, -/**/ 0x00000000, 0x3FEB8000, -/**/ 0x400DC1AA, 0x3F3AA73A, -/**/ 0xBFC22000, 0x3FC3567B, -/**/ 0x53991A1F, 0x3D3250D2, -/**/ 0x00000000, 0x3FEB8000, -/**/ 0x2E63A6A8, 0xBF349E11, -/**/ 0x201E8000, 0x3FC371FC, -/**/ 0x9B2D8ABC, 0x3D3EE877, -/**/ 0x00000000, 0x3FEB7800, -/**/ 0xC8DA04B9, 0xBF0E7898, -/**/ 0x99164000, 0x3FC38D76, -/**/ 0x9E39BB70, 0x3D1844A5, -/**/ 0x00000000, 0x3FEB7000, -/**/ 0xE6B33E2D, 0x3F2A284E, -/**/ 0x2D31A000, 0x3FC3A8EB, -/**/ 0x7D5D503E, 0x3D1BAFB7, -/**/ 0x00000000, 0x3FEB6800, -/**/ 0x759C2BB4, 0x3F3E0B91, -/**/ 0xDEF76000, 0x3FC3C459, -/**/ 0xF6B70D33, 0x3D3EDC86, -/**/ 0x00000000, 0x3FEB6800, -/**/ 0x088FD6E7, 0xBF30E8E2, -/**/ 0xB0ECC000, 0x3FC3DFC2, -/**/ 0x62B8C13F, 0x3D28A72A, -/**/ 0x00000000, 0x3FEB6000, -/**/ 0xD801B600, 0x3ECB6006, -/**/ 0xA5952000, 0x3FC3FB25, -/**/ 0x6B358FF7, 0x3D3195BE, -/**/ 0x00000000, 0x3FEB5800, -/**/ 0xD840F62C, 0x3F316A6A, -/**/ 0xBF728000, 0x3FC41682, -/**/ 0x081F849D, 0xBD210047, -/**/ 0x00000000, 0x3FEB5800, -/**/ 0x7DF8BD99, 0xBF3D4DEE, -/**/ 0x01050000, 0x3FC431DA, -/**/ 0x836E0391, 0x3D304837, -/**/ 0x00000000, 0x3FEB5000, -/**/ 0x7E4B17E5, 0xBF27E4B1, -/**/ 0x6CCB8000, 0x3FC44D2B, -/**/ 0x6135783C, 0xBD170CC1, -/**/ 0x00000000, 0x3FEB4800, -/**/ 0x55E6D8FE, 0x3F15F47D, -/**/ 0x05430000, 0x3FC46877, -/**/ 0xF8D5087E, 0xBD3D8145, -/**/ 0x00000000, 0x3FEB4000, -/**/ 0x0B803686, 0x3F37006D, -/**/ 0xCCE6E000, 0x3FC483BC, -/**/ 0x723F6369, 0x3D1EEA52, -/**/ 0x00000000, 0x3FEB4000, -/**/ 0x46A66920, 0xBF37687C, -/**/ 0xC6314000, 0x3FC49EFC, -/**/ 0x9F55572B, 0xBD090F59, -/**/ 0x00000000, 0x3FEB3800, -/**/ 0xFF2645BE, 0xBF16F6A4, -/**/ 0xF39A6000, 0x3FC4BA36, -/**/ 0xB3F219E5, 0xBD34354B, -/**/ 0x00000000, 0x3FEB3000, -/**/ 0x1801B318, 0x3F2801B3, -/**/ 0x5798E000, 0x3FC4D56B, -/**/ 0x15A96555, 0x3D380580, -/**/ 0x00000000, 0x3FEB2800, -/**/ 0x93511680, 0x3F3DD2FF, -/**/ 0xF4A24000, 0x3FC4F099, -/**/ 0xFAFEAF27, 0xBD3E9BF2, -/**/ 0x00000000, 0x3FEB2800, -/**/ 0xA89DCCAC, 0xBF304743, -/**/ 0xCD29C000, 0x3FC50BC2, -/**/ 0x28DB8D4F, 0x3D1ADA57, -/**/ 0x00000000, 0x3FEB2000, -/**/ 0x406C80D9, 0x3EFB2036, -/**/ 0xE3A1C000, 0x3FC526E5, -/**/ 0x37FC5238, 0xBD3790BA, -/**/ 0x00000000, 0x3FEB1800, -/**/ 0x4F9DC00E, 0x3F33BEC8, -/**/ 0x3A7A8000, 0x3FC54203, -/**/ 0xED855F0E, 0x3D268D68, -/**/ 0x00000000, 0x3FEB1800, -/**/ 0x44F8CE7E, 0xBF3A2101, -/**/ 0xD4232000, 0x3FC55D1A, -/**/ 0xDDA647E8, 0x3D3ADD94, -/**/ 0x00000000, 0x3FEB1000, -/**/ 0xB99AF3F3, 0xBF1FB596, -/**/ 0xB3092000, 0x3FC5782C, -/**/ 0x51794442, 0xBD33A463, -/**/ 0x00000000, 0x3FEB0800, -/**/ 0x922A3E85, 0x3F24B31D, -/**/ 0xD9982000, 0x3FC59338, -/**/ 0xB7555D4A, 0x3CF0BA68, -/**/ 0x00000000, 0x3FEB0000, -/**/ 0xE19BF6B7, 0x3F3CB3CF, -/**/ 0x4A3AA000, 0x3FC5AE3F, -/**/ 0xF012A8B9, 0x3D21EA25, -/**/ 0x00000000, 0x3FEB0000, -/**/ 0x9A5BF0D1, 0xBF30DEAE, -/**/ 0x07598000, 0x3FC5C940, -/**/ 0x8CD23322, 0xBD3A8D94, -/**/ 0x00000000, 0x3FEAF800, -/**/ 0x9EDE13CE, 0x3EFA2072, -/**/ 0x135BE000, 0x3FC5E43B, -/**/ 0xCEED9C31, 0xBD343AB4, -/**/ 0x00000000, 0x3FEAF000, -/**/ 0x0D79435E, 0x3F3435E5, -/**/ 0x70A7A000, 0x3FC5FF30, -/**/ 0x183BEBF2, 0xBD38586F, -/**/ 0x00000000, 0x3FEAF000, -/**/ 0x06855D30, 0xBF392321, -/**/ 0x21A0E000, 0x3FC61A20, -/**/ 0x1BDF3CDD, 0x3D3DD9DD, -/**/ 0x00000000, 0x3FEAE800, -/**/ 0x7ABED811, 0xBF19A45C, -/**/ 0x28AAA000, 0x3FC6350A, -/**/ 0xAB8163AF, 0x3D2D5EC0, -/**/ 0x00000000, 0x3FEAE000, -/**/ 0x84EF68CB, 0x3F28C7ED, -/**/ 0x88260000, 0x3FC64FEE, -/**/ 0x759DDED6, 0xBD1DA40D, -/**/ 0x00000000, 0x3FEAD800, -/**/ 0xA482F00D, 0x3F3F43FC, -/**/ 0x4272A000, 0x3FC66ACD, -/**/ 0xBFC6C785, 0x3D3AA1BD, -/**/ 0x00000000, 0x3FEAD800, -/**/ 0xCDE3E7AE, 0xBF2B9222, -/**/ 0x59EF0000, 0x3FC685A6, -/**/ 0x6C103214, 0xBD21F2A9, -/**/ 0x00000000, 0x3FEAD000, -/**/ 0xEED254A3, 0x3F14F302, -/**/ 0xD0F7A000, 0x3FC6A079, -/**/ 0x448D14F5, 0x3D35A3F8, -/**/ 0x00000000, 0x3FEAC800, -/**/ 0x32071DEF, 0x3F385567, -/**/ 0xA9E80000, 0x3FC6BB47, -/**/ 0x23EA3296, 0x3D19F64D, -/**/ 0x00000000, 0x3FEAC800, -/**/ 0xD47F29D4, 0xBF347F29, -/**/ 0xE719E000, 0x3FC6D60F, -/**/ 0x57134767, 0xBD3BC6E5, -/**/ 0x00000000, 0x3FEAC000, -/**/ 0xE82D23BC, 0xBEF40FE1, -/**/ 0x8AE56000, 0x3FC6F0D2, -/**/ 0xC93373DA, 0x3D369737, -/**/ 0x00000000, 0x3FEAB800, -/**/ 0x972D8538, 0x3F320FDE, -/**/ 0x97A1A000, 0x3FC70B8F, -/**/ 0xF6A95BEF, 0x3D34EA64, -/**/ 0x00000000, 0x3FEAB800, -/**/ 0x66711513, 0xBF3A8C9F, -/**/ 0x0FA40000, 0x3FC72647, -/**/ 0x0E743A45, 0xBD3774DF, -/**/ 0x00000000, 0x3FEAB000, -/**/ 0x02806ABC, 0xBF1C5A0F, -/**/ 0xF5404000, 0x3FC740F8, -/**/ 0x99018AA1, 0xBD30B66C, -/**/ 0x00000000, 0x3FEAA800, -/**/ 0xD22C937A, 0x3F28E44B, -/**/ 0x4AC8E000, 0x3FC75BA5, -/**/ 0x8BC4A7C0, 0x3D3DDCA5, -/**/ 0x00000000, 0x3FEAA800, -/**/ 0xFF2ADFF3, 0xBF3FF2AD, -/**/ 0x128F2000, 0x3FC7764C, -/**/ 0x3479E3D1, 0x3D027490, -/**/ 0x00000000, 0x3FEAA000, -/**/ 0x0B3ADA5C, 0xBF288A16, -/**/ 0x4EE26000, 0x3FC790ED, -/**/ 0x4E7746F6, 0x3D199BBD, -/**/ 0x00000000, 0x3FEA9800, -/**/ 0x4C77B035, 0x3F1DEC0D, -/**/ 0x0210E000, 0x3FC7AB89, -/**/ 0x72534A58, 0xBD2BDB90, -/**/ 0x00000000, 0x3FEA9000, -/**/ 0x91F59E6B, 0x3F3B4D71, -/**/ 0x2E674000, 0x3FC7C61F, -/**/ 0xB31BE8E0, 0xBD32392D, -/**/ 0x00000000, 0x3FEA9000, -/**/ 0xB8A2A522, 0xBF30CDCB, -/**/ 0xD630C000, 0x3FC7E0AF, -/**/ 0x1D8F1034, 0x3D139E7C, -/**/ 0x00000000, 0x3FEA8800, -/**/ 0x6A2194A0, 0x3F094A00, -/**/ 0xFBB76000, 0x3FC7FB3A, -/**/ 0x24609D57, 0xBD37DBF5, -/**/ 0x00000000, 0x3FEA8000, -/**/ 0x870AC52E, 0x3F373289, -/**/ 0xA1436000, 0x3FC815C0, -/**/ 0xF9201CE8, 0xBD302A52, -/**/ 0x00000000, 0x3FEA8000, -/**/ 0x9E8684DD, 0xBF34B1FA, -/**/ 0xC91BC000, 0x3FC83040, -/**/ 0xC6E66F32, 0x3D3E5B71, -/**/ 0x00000000, 0x3FEA7800, -/**/ 0xA9267648, 0xBEE08AF5, -/**/ 0x75866000, 0x3FC84ABB, -/**/ 0xDF4E2BD2, 0xBD3D8DAA, -/**/ 0x00000000, 0x3FEA7000, -/**/ 0x1A3D927E, 0x3F33BB67, -/**/ 0xA8C70000, 0x3FC86530, -/**/ 0xCB4EA3E3, 0x3D398BB0, -/**/ 0x00000000, 0x3FEA7000, -/**/ 0x7F2C97F3, 0xBF37F2C9, -/**/ 0x6520C000, 0x3FC87FA0, -/**/ 0x401202FC, 0x3D322120, -/**/ 0x00000000, 0x3FEA6800, -/**/ 0x3C076D20, 0xBF0C77A5, -/**/ 0xACD4E000, 0x3FC89A0A, -/**/ 0xDA8F5A72, 0x3D2C0BFB, -/**/ 0x00000000, 0x3FEA6000, -/**/ 0x7C7EF82B, 0x3F30E6DA, -/**/ 0x82236000, 0x3FC8B46F, -/**/ 0x102DD7C9, 0x3D12D9F2, -/**/ 0x00000000, 0x3FEA6000, -/**/ 0x2EC05C44, 0xBF3A9167, -/**/ 0xE74AE000, 0x3FC8CECE, -/**/ 0xAA429BB5, 0xBD3A5BA0, -/**/ 0x00000000, 0x3FEA5800, -/**/ 0xEEB6BD53, 0xBF17DF12, -/**/ 0xDE886000, 0x3FC8E928, -/**/ 0xB13D72D5, 0x3D3A8154, -/**/ 0x00000000, 0x3FEA5000, -/**/ 0x98C70AE6, 0x3F2D676D, -/**/ 0x6A180000, 0x3FC9037D, -/**/ 0x57C1C8D9, 0x3D230DEA, -/**/ 0x00000000, 0x3FEA5000, -/**/ 0x96CE4780, 0xBF3C8EFF, -/**/ 0x8C340000, 0x3FC91DCC, -/**/ 0xBDDEFF46, 0x3D37BC6A, -/**/ 0x00000000, 0x3FEA4800, -/**/ 0x71EFFCB7, 0xBF1EFFCB, -/**/ 0x4715A000, 0x3FC93816, -/**/ 0x6A3A39D9, 0xBD34C63D, -/**/ 0x00000000, 0x3FEA4000, -/**/ 0x1A41A41A, 0x3F2A41A4, -/**/ 0x9CF46000, 0x3FC9525A, -/**/ 0x7D9F158F, 0xBD329713, -/**/ 0x00000000, 0x3FEA4000, -/**/ 0xBF3B3C0E, 0xBF3DECBB, -/**/ 0x9006A000, 0x3FC96C99, -/**/ 0x9CBB452C, 0x3D2A88D5, -/**/ 0x00000000, 0x3FEA3800, -/**/ 0x3BCD35A8, 0xBF21D14E, -/**/ 0x22818000, 0x3FC986D3, -/**/ 0x4DD44000, 0x3CF93B56, -/**/ 0x00000000, 0x3FEA3000, -/**/ 0x3B5832C0, 0x3F285A0A, -/**/ 0x56988000, 0x3FC9A107, -/**/ 0x242CD098, 0x3D264AA6, -/**/ 0x00000000, 0x3FEA3000, -/**/ 0xD71AFD8C, 0xBF3EABC1, -/**/ 0x2E7E0000, 0x3FC9BB36, -/**/ 0xA1CE0FFC, 0xBD21F2A8, -/**/ 0x00000000, 0x3FEA2800, -/**/ 0x7C041611, 0xBF22E60D, -/**/ 0xAC62E000, 0x3FC9D55F, -/**/ 0xFC3B5BC3, 0xBD3F4669, -/**/ 0x00000000, 0x3FEA2000, -/**/ 0x5FF2EF43, 0x3F27AE57, -/**/ 0xD276A000, 0x3FC9EF83, -/**/ 0xB3F9CE00, 0xBD2730B7, -/**/ 0x00000000, 0x3FEA2000, -/**/ 0x3D66322E, 0xBF3ECD35, -/**/ 0xA2E7A000, 0x3FCA09A2, -/**/ 0xCD411233, 0xBD2DD99D, -/**/ 0x00000000, 0x3FEA1800, -/**/ 0x5B4FE5E9, 0xBF22C068, -/**/ 0x1FE2C000, 0x3FCA23BC, -/**/ 0x91DC9F0B, 0xBD3539CD, -/**/ 0x00000000, 0x3FEA1000, -/**/ 0x80B67A9A, 0x3F283C48, -/**/ 0x4B938000, 0x3FCA3DD0, -/**/ 0x366E2C5A, 0x3D297DA1, -/**/ 0x00000000, 0x3FEA1000, -/**/ 0x89907BBA, 0xBF3E5236, -/**/ 0x28244000, 0x3FCA57DF, -/**/ 0xCA1D9ABB, 0x3D3B99C8, -/**/ 0x00000000, 0x3FEA0800, -/**/ 0x32054967, 0xBF21629E, -/**/ 0xB7BE0000, 0x3FCA71E8, -/**/ 0x6EF05323, 0xBD210ACA, -/**/ 0x00000000, 0x3FEA0000, -/**/ 0x1A01A01A, 0x3F2A01A0, -/**/ 0xFC882000, 0x3FCA8BEC, -/**/ 0xCF21B9CF, 0x3D3E3185, -/**/ 0x00000000, 0x3FEA0000, -/**/ 0x93FF301D, 0xBF3D3BE3, -/**/ 0xF8A94000, 0x3FCAA5EB, -/**/ 0x36951A8F, 0xBD32A0A9, -/**/ 0x00000000, 0x3FE9F800, -/**/ 0xBFE608ED, 0xBF1D9DD1, -/**/ 0xAE462000, 0x3FCABFE5, -/**/ 0x395F139D, 0xBD3B68F5, -/**/ 0x00000000, 0x3FE9F000, -/**/ 0x1B29257F, 0x3F2CFC26, -/**/ 0x1F828000, 0x3FCAD9DA, -/**/ 0xC803F050, 0xBD3882B7, -/**/ 0x00000000, 0x3FE9F000, -/**/ 0x7E613717, 0xBF3B8B57, -/**/ 0x4E80C000, 0x3FCAF3C9, -/**/ 0x3FCD9066, 0xBCBA4E63, -/**/ 0x00000000, 0x3FE9E800, -/**/ 0xB9FABD04, 0xBF160EF9, -/**/ 0x3D620000, 0x3FCB0DB3, -/**/ 0x38EAB906, 0x3D3FEE14, -/**/ 0x00000000, 0x3FE9E000, -/**/ 0xEAF850E2, 0x3F3094D3, -/**/ 0xEE464000, 0x3FCB2797, -/**/ 0x906D00A9, 0xBD3BE88A, -/**/ 0x00000000, 0x3FE9E000, -/**/ 0xBBE88FDC, 0xBF3941AA, -/**/ 0x634BA000, 0x3FCB4177, -/**/ 0x5666069F, 0x3D355D01, -/**/ 0x00000000, 0x3FE9D800, -/**/ 0x25F4B1AA, 0xBF083A25, -/**/ 0x9E8FC000, 0x3FCB5B51, -/**/ 0xEC011F31, 0xBD34B722, -/**/ 0x00000000, 0x3FE9D000, -/**/ 0xF71FAC14, 0x3F3343FB, -/**/ 0xA22E4000, 0x3FCB7526, -/**/ 0x2E785490, 0x3D2C0DBF, -/**/ 0x00000000, 0x3FE9D000, -/**/ 0x1965FF32, 0xBF365FF3, -/**/ 0x70420000, 0x3FCB8EF6, -/**/ 0x321788E0, 0x3D387533, -/**/ 0x00000000, 0x3FE9C800, -/**/ 0x9C8019C8, 0x3EA9C801, -/**/ 0x0AE46000, 0x3FCBA8C1, -/**/ 0x9EEE9D85, 0x3D3A32E2, -/**/ 0x00000000, 0x3FE9C000, -/**/ 0x25080CE1, 0x3F368A77, -/**/ 0x742D8000, 0x3FCBC286, -/**/ 0xF39D121C, 0x3D39AC53, -/**/ 0x00000000, 0x3FE9C000, -/**/ 0xC54763F2, 0xBF32E743, -/**/ 0xAE344000, 0x3FCBDC46, -/**/ 0x023D6505, 0x3D3625B4, -/**/ 0x00000000, 0x3FE9B800, -/**/ 0x8B7424F9, 0x3F0DBD49, -/**/ 0xBB0E4000, 0x3FCBF601, -/**/ 0x47C378B5, 0x3D2386A9, -/**/ 0x00000000, 0x3FE9B000, -/**/ 0x00CD9A67, 0x3F3A6734, -/**/ 0x9CCFE000, 0x3FCC0FB7, -/**/ 0x99E8A558, 0xBD346FFF, -/**/ 0x00000000, 0x3FE9B000, -/**/ 0xAEF25B7C, 0xBF2DB15A, -/**/ 0x558C2000, 0x3FCC2968, -/**/ 0xDEE38A40, 0xBD2CFD73, -/**/ 0x00000000, 0x3FE9A800, -/**/ 0xC140C073, 0x3F1FDFEC, -/**/ 0xE754E000, 0x3FCC4313, -/**/ 0x74CAD7D6, 0x3D3279BE, -/**/ 0x00000000, 0x3FE9A000, -/**/ 0xA7DCBEB3, 0x3F3ED923, -/**/ 0x543AE000, 0x3FCC5CBA, -/**/ 0xECB454FC, 0x3D20929D, -/**/ 0x00000000, 0x3FE9A000, -/**/ 0xB256DE2C, 0xBF246A7B, -/**/ 0x9E4D6000, 0x3FCC765B, -/**/ 0x36976F6C, 0x3D31AB6B, -/**/ 0x00000000, 0x3FE99800, -/**/ 0x9999999A, 0x3F299999, -/**/ 0xC79AA000, 0x3FCC8FF7, -/**/ 0x689F8434, 0xBD27794F, -/**/ 0x00000000, 0x3FE99800, -/**/ 0x3EC03FF3, 0xBF3C20C6, -/**/ 0xD22F6000, 0x3FCCA98E, -/**/ 0x8CA209C8, 0xBCF698C1, -/**/ 0x00000000, 0x3FE99000, -/**/ 0x31EC07FD, 0xBF13F803, -/**/ 0xC0176000, 0x3FCCC320, -/**/ 0x9A653794, 0x3D240903, -/**/ 0x00000000, 0x3FE98800, -/**/ 0x5AC98715, 0x3F323513, -/**/ 0x935D2000, 0x3FCCDCAD, -/**/ 0x34C9A447, 0xBD0A0FF0, -/**/ 0x00000000, 0x3FE98800, -/**/ 0x89F80661, 0xBF368793, -/**/ 0x4E09C000, 0x3FCCF635, -/**/ 0x9A07D55B, 0x3D277123, -/**/ 0x00000000, 0x3FE98000, -/**/ 0x8019801A, 0x3EE98019, -/**/ 0xF2256000, 0x3FCD0FB7, -/**/ 0x20633B29, 0xBD0AF52B, -/**/ 0x00000000, 0x3FE97800, -/**/ 0xAB329020, 0x3F382FC6, -/**/ 0x81B6C000, 0x3FCD2935, -/**/ 0x128AAA5F, 0xBD383270, -/**/ 0x00000000, 0x3FE97800, -/**/ 0x962DBFF3, 0xBF305C4B, -/**/ 0xFEC36000, 0x3FCD42AD, -/**/ 0xFD804272, 0xBD175C00, -/**/ 0x00000000, 0x3FE97000, -/**/ 0x970E4F81, 0x3F1C9F01, -/**/ 0x6B4FC000, 0x3FCD5C21, -/**/ 0xBBCA681B, 0xBD21BA91, -/**/ 0x00000000, 0x3FE96800, -/**/ 0x049160B8, 0x3F3EBBE1, -/**/ 0xC95F0000, 0x3FCD758F, -/**/ 0x8B4162AA, 0xBD15A10A, -/**/ 0x00000000, 0x3FE96800, -/**/ 0x9933FE6A, 0xBF233FE6, -/**/ 0x1AF32000, 0x3FCD8EF9, -/**/ 0xC364C784, 0xBD15105F, -/**/ 0x00000000, 0x3FE96000, -/**/ 0xCE078906, 0x3F2C2873, -/**/ 0x620CE000, 0x3FCDA85D, -/**/ 0xC16CC7EC, 0x3D240194, -/**/ 0x00000000, 0x3FE96000, -/**/ 0xE442936B, 0xBF3A27A0, -/**/ 0xA0ABE000, 0x3FCDC1BC, -/**/ 0xA628CCC6, 0x3D38FAC1, -/**/ 0x00000000, 0x3FE95800, -/**/ 0x548A97A9, 0xBF029C69, -/**/ 0xD8CEA000, 0x3FCDDB16, -/**/ 0x7104B8BC, 0xBD1EEF79, -/**/ 0x00000000, 0x3FE95000, -/**/ 0x9F74B92D, 0x3F35906B, -/**/ 0x0C722000, 0x3FCDF46C, -/**/ 0xB0B79039, 0x3D3A5E82, -/**/ 0x00000000, 0x3FE95000, -/**/ 0xF35927BC, 0xBF327BBF, -/**/ 0x3D92A000, 0x3FCE0DBC, -/**/ 0xF0529BF1, 0x3D359233, -/**/ 0x00000000, 0x3FE94800, -/**/ 0xDD3C0CA4, 0x3F161F9A, -/**/ 0x6E2B0000, 0x3FCE2707, -/**/ 0x2AF0003C, 0xBD3A342C, -/**/ 0x00000000, 0x3FE94000, -/**/ 0x41228A8F, 0x3F3D9B56, -/**/ 0xA034C000, 0x3FCE404D, -/**/ 0xE09A2799, 0xBD3187EE, -/**/ 0x00000000, 0x3FE94000, -/**/ 0x598A73F8, 0xBF2482F5, -/**/ 0xD5A88000, 0x3FCE598E, -/**/ 0xCF1E98A1, 0xBD0D134B, -/**/ 0x00000000, 0x3FE93800, -/**/ 0x3C1B9728, 0x3F2BE2D5, -/**/ 0x107DA000, 0x3FCE72CB, -/**/ 0xCDF5471C, 0x3D1DD48C, -/**/ 0x00000000, 0x3FE93800, -/**/ 0x2698CFF3, 0xBF39CC03, -/**/ 0x52AA6000, 0x3FCE8C02, -/**/ 0x80E8E6FF, 0xBD26805B, -/**/ 0x00000000, 0x3FE93000, -/**/ 0xB9F30358, 0xBEF79CD3, -/**/ 0x9E23A000, 0x3FCEA534, -/**/ 0x4C73CCB5, 0x3D381B93, -/**/ 0x00000000, 0x3FE92800, -/**/ 0x255BA00D, 0x3F36E803, -/**/ 0xF4DD8000, 0x3FCEBE61, -/**/ 0x30FDCA4D, 0xBD23D453, -/**/ 0x00000000, 0x3FE92800, -/**/ 0x36077742, 0xBF30A69B, -/**/ 0x58CA8000, 0x3FCED78A, -/**/ 0x3793387E, 0x3D16F1B5, -/**/ 0x00000000, 0x3FE92000, -/**/ 0x1C451AB3, 0x3F1F693A, -/**/ 0xCBDC6000, 0x3FCEF0AD, -/**/ 0x9C86AF24, 0xBD2B26B7, -/**/ 0x00000000, 0x3FE92000, -/**/ 0xC74EA9E2, 0xBF3F9548, -/**/ 0x50036000, 0x3FCF09CC, -/**/ 0x18D999DB, 0x3D3DA094, -/**/ 0x00000000, 0x3FE91800, -/**/ 0xF7C46911, 0xBF1BD5A8, -/**/ 0xE72F2000, 0x3FCF22E5, -/**/ 0x1417E41F, 0xBD3F454F, -/**/ 0x00000000, 0x3FE91000, -/**/ 0x0D83D1C6, 0x3F31B9E1, -/**/ 0x934D6000, 0x3FCF3BFA, -/**/ 0x937B903B, 0x3D2D9F2A, -/**/ 0x00000000, 0x3FE91000, -/**/ 0xF3795877, 0xBF35876F, -/**/ 0x564B8000, 0x3FCF550A, -/**/ 0xA09202FE, 0xBD2323E3, -/**/ 0x00000000, 0x3FE90800, -/**/ 0xBD1D87EC, 0x3F0A34CD, -/**/ 0x32154000, 0x3FCF6E15, -/**/ 0x7AC4EC74, 0xBD3C9A97, -/**/ 0x00000000, 0x3FE90000, -/**/ 0x0E760899, 0x3F3C23F5, -/**/ 0x28956000, 0x3FCF871B, -/**/ 0x6A526EFE, 0xBD3F75FD, -/**/ 0x00000000, 0x3FE90000, -/**/ 0xD0BE9594, 0xBF25DECD, -/**/ 0x3BB58000, 0x3FCFA01C, -/**/ 0xFAE1D786, 0xBD1A1F71, -/**/ 0x00000000, 0x3FE8F800, -/**/ 0xC18F9C19, 0x3F2C18F9, -/**/ 0x6D5E4000, 0x3FCFB918, -/**/ 0xAB993C87, 0xBD0D572A, -/**/ 0x00000000, 0x3FE8F800, -/**/ 0x8176594C, 0xBF38E868, -/**/ 0xBF770000, 0x3FCFD20F, -/**/ 0x72C6FE70, 0xBD11C55B, -/**/ 0x00000000, 0x3FE8F000, -/**/ 0x3C018F00, 0x3EC8F006, -/**/ 0x33E60000, 0x3FCFEB02, -/**/ 0x32D5E8C7, 0x3D2F316E, -/**/ 0x00000000, 0x3FE8E800, -/**/ 0xAD115384, 0x3F395B4D, -/**/ 0xE6484000, 0x3FD001F7, -/**/ 0x40C9ABBC, 0x3D38A957, -/**/ 0x00000000, 0x3FE8E800, -/**/ 0xEC8C0F90, 0xBF2AD850, -/**/ 0x45AD5000, 0x3FD00E6C, -/**/ 0x52E01203, 0x3CDCC68D, -/**/ 0x00000000, 0x3FE8E000, -/**/ 0xA56B1AA1, 0x3F27B6E9, -/**/ 0x3913A000, 0x3FD01ADE, -/**/ 0xCCDC1521, 0xBD108930, -/**/ 0x00000000, 0x3FE8E000, -/**/ 0x40DFC1D8, 0xBF3ACDE3, -/**/ 0xC16C2000, 0x3FD0274D, -/**/ 0x9CF835C2, 0x3D2979E8, -/**/ 0x00000000, 0x3FE8D800, -/**/ 0x317DF64C, 0xBEF68397, -/**/ 0xDFA74000, 0x3FD033BA, -/**/ 0x1485BDFF, 0x3D0C30BC, -/**/ 0x00000000, 0x3FE8D000, -/**/ 0x80C6980C, 0x3F380C69, -/**/ 0x94B4D000, 0x3FD04025, -/**/ 0x9EF42D7F, 0x3CF036B8, -/**/ 0x00000000, 0x3FE8D000, -/**/ 0x338C7FE7, 0xBF2CE006, -/**/ 0xE1842000, 0x3FD04C8D, -/**/ 0x512CEB86, 0xBD1FE6BA, -/**/ 0x00000000, 0x3FE8C800, -/**/ 0x1EFBBD63, 0x3F2644F0, -/**/ 0xC703F000, 0x3FD058F3, -/**/ 0xBCD236AD, 0xBD30E866, -/**/ 0x00000000, 0x3FE8C800, -/**/ 0xAA79217A, 0xBF3B3C2D, -/**/ 0x46227000, 0x3FD06557, -/**/ 0xB4868D6A, 0x3D0131DF, -/**/ 0x00000000, 0x3FE8C000, -/**/ 0x8062FF3A, 0xBEF8BFCE, -/**/ 0x5FCD6000, 0x3FD071B8, -/**/ 0xA3E01A11, 0xBD3BCB8B, -/**/ 0x00000000, 0x3FE8B800, -/**/ 0xBD2672C4, 0x3F383301, -/**/ 0x14F1D000, 0x3FD07E17, -/**/ 0x4F384BD5, 0xBD3EFCC6, -/**/ 0x00000000, 0x3FE8B800, -/**/ 0x9BFE749C, 0xBF2BFE74, -/**/ 0x667C5000, 0x3FD08A73, -/**/ 0x40C5A329, 0x3D3EBC1D, -/**/ 0x00000000, 0x3FE8B000, -/**/ 0xD4353EB3, 0x3F27BA8C, -/**/ 0x55591000, 0x3FD096CD, -/**/ 0x20550A31, 0x3D3F998D, -/**/ 0x00000000, 0x3FE8B000, -/**/ 0xA062B2E4, 0xBF3A3784, -/**/ 0xE2739000, 0x3FD0A324, -/**/ 0x7EF4030E, 0x3D0C6BEE, -/**/ 0x00000000, 0x3FE8A800, -/**/ 0x5E630281, 0xBECED1F6, -/**/ 0x0EB6C000, 0x3FD0AF7A, -/**/ 0x4945ADAD, 0x3D23CCF9, -/**/ 0x00000000, 0x3FE8A000, -/**/ 0x0C519CAE, 0x3F39CAE0, -/**/ 0xDB0D2000, 0x3FD0BBCC, -/**/ 0xCC5DCDFB, 0x3D32F32C, -/**/ 0x00000000, 0x3FE8A000, -/**/ 0x4EDBA5FD, 0xBF283C02, -/**/ 0x4860B000, 0x3FD0C81D, -/**/ 0x401D1731, 0xBD3E5BCF, -/**/ 0x00000000, 0x3FE89800, -/**/ 0x1899C0F6, 0x3F2C0F60, -/**/ 0x579AB000, 0x3FD0D46B, -/**/ 0xF640E1E6, 0x3D3D2C81, -/**/ 0x00000000, 0x3FE89800, -/**/ 0xBDBE51D0, 0xBF37C414, -/**/ 0x09A43000, 0x3FD0E0B7, -/**/ 0xA7862F2A, 0x3D32A038, -/**/ 0x00000000, 0x3FE89000, -/**/ 0xDD12CE7D, 0x3F03F540, -/**/ 0x5F658000, 0x3FD0ED00, -/**/ 0x285AA803, 0xBD22DC75, -/**/ 0x00000000, 0x3FE88800, -/**/ 0x400C45CD, 0x3F3CCFDE, -/**/ 0x59C67000, 0x3FD0F947, -/**/ 0x7F0818B6, 0xBD395261, -/**/ 0x00000000, 0x3FE88800, -/**/ 0x44FB66B5, 0xBF21A0F5, -/**/ 0xF9AE5000, 0x3FD1058B, -/**/ 0x817D52CD, 0xBD34AB9D, -/**/ 0x00000000, 0x3FE88000, -/**/ 0x2866A138, 0x3F319D95, -/**/ 0x4003F000, 0x3FD111CE, -/**/ 0x096B4B6B, 0xBD1B3237, -/**/ 0x00000000, 0x3FE88000, -/**/ 0xA48B49DA, 0xBF33E5FA, -/**/ 0x2DADA000, 0x3FD11E0E, -/**/ 0x8FCCE5BA, 0xBD2A47F8, -/**/ 0x00000000, 0x3FE87800, -/**/ 0xDEECB0A8, 0x3F1A9336, -/**/ 0xC3912000, 0x3FD12A4B, -/**/ 0x61473259, 0xBD35A750, -/**/ 0x00000000, 0x3FE87800, -/**/ 0xFB6A388D, 0xBF3EC219, -/**/ 0x0293B000, 0x3FD13687, -/**/ 0x99D67123, 0xBD3D3E84, -/**/ 0x00000000, 0x3FE87000, -/**/ 0xC1625090, 0xBF106AE7, -/**/ 0xEB9A0000, 0x3FD142BF, -/**/ 0x85B58A9E, 0x3D31CE61, -/**/ 0x00000000, 0x3FE86800, -/**/ 0xACD4200C, 0x3F369AE5, -/**/ 0x7F887000, 0x3FD14EF6, -/**/ 0x5DFC9794, 0xBD3E97A6, -/**/ 0x00000000, 0x3FE86800, -/**/ 0x9389D11C, 0xBF2D4286, -/**/ 0xBF429000, 0x3FD15B2A, -/**/ 0x49B629B2, 0xBD2D8E3B, -/**/ 0x00000000, 0x3FE86000, -/**/ 0x18618618, 0x3F286186, -/**/ 0xABABA000, 0x3FD1675C, -/**/ 0x731F55C4, 0x3D38380E, -/**/ 0x00000000, 0x3FE86000, -/**/ 0x6AC71708, 0xBF38EF0F, -/**/ 0x45A67000, 0x3FD1738C, -/**/ 0x0032C176, 0xBD39C6E9, -/**/ 0x00000000, 0x3FE85800, -/**/ 0xE00C2C20, 0x3EFFF3D3, -/**/ 0x8E151000, 0x3FD17FB9, -/**/ 0xA74A2684, 0xBD3A8A8B, -/**/ 0x00000000, 0x3FE85000, -/**/ 0xF9592266, 0x3F3CFBA0, -/**/ 0x85D93000, 0x3FD18BE4, -/**/ 0x6F3604AB, 0x3D3C167F, -/**/ 0x00000000, 0x3FE85000, -/**/ 0xFF3D87FA, 0xBF1FE7B0, -/**/ 0x2DD42000, 0x3FD1980D, -/**/ 0x7A361C9A, 0x3D2B7B3A, -/**/ 0x00000000, 0x3FE84800, -/**/ 0x918DC223, 0x3F331E8D, -/**/ 0x86E68000, 0x3FD1A433, -/**/ 0x634E0AAC, 0xBD07A850, -/**/ 0x00000000, 0x3FE84800, -/**/ 0x8D76B549, 0xBF31BAF9, -/**/ 0x91F08000, 0x3FD1B057, -/**/ 0x6DC55E2D, 0xBD32DD46, -/**/ 0x00000000, 0x3FE84000, -/**/ 0xDC90C512, 0x3F22F2EC, -/**/ 0x4FD1D000, 0x3FD1BC79, -/**/ 0x747BA7BE, 0xBD3CCF0C, -/**/ 0x00000000, 0x3FE84000, -/**/ 0x6A0916B9, 0xBF3B442A, -/**/ 0xC169A000, 0x3FD1C898, -/**/ 0xE5C62AFF, 0xBD381410, -/**/ 0x00000000, 0x3FE83800, -/**/ 0x83801838, 0x3EA83801, -/**/ 0xE796A000, 0x3FD1D4B5, -/**/ 0xD197BAC2, 0x3D222A5B, -/**/ 0x00000000, 0x3FE83000, -/**/ 0xCBD11C5C, 0x3F3B6A41, -/**/ 0xC3371000, 0x3FD1E0D0, -/**/ 0xA9B0D4A0, 0x3D3AF8F2, -/**/ 0x00000000, 0x3FE83000, -/**/ 0xCB7A3CD6, 0xBF225381, -/**/ 0x5528B000, 0x3FD1ECE9, -/**/ 0x09B4A3B8, 0xBD184E7B, -/**/ 0x00000000, 0x3FE82800, -/**/ 0x152500C1, 0x3F32500C, -/**/ 0x9E48A000, 0x3FD1F8FF, -/**/ 0x040CBE77, 0x3D27946C, -/**/ 0x00000000, 0x3FE82800, -/**/ 0x14902134, 0xBF32285F, -/**/ 0x9F73B000, 0x3FD20513, -/**/ 0x1609E0A4, 0x3CF6E15E, -/**/ 0x00000000, 0x3FE82000, -/**/ 0xA4018213, 0x3F22D9EB, -/**/ 0x59861000, 0x3FD21125, -/**/ 0xBA2950C4, 0x3D382E78, -/**/ 0x00000000, 0x3FE82000, -/**/ 0xFC6BBFF4, 0xBF3AEFFC, -/**/ 0xCD5B9000, 0x3FD21D34, -/**/ 0xB28BADAA, 0x3D3B552F, -/**/ 0x00000000, 0x3FE81800, -/**/ 0x18181818, 0x3EE81818, -/**/ 0xFBCF8000, 0x3FD22941, -/**/ 0xF5EB0963, 0xBD3A6976, -/**/ 0x00000000, 0x3FE81000, -/**/ 0x4FF0F3C6, 0x3F3C7F27, -/**/ 0xE5BC9000, 0x3FD2354C, -/**/ 0x0602A663, 0xBD3D78ED, -/**/ 0x00000000, 0x3FE81000, -/**/ 0x0A86941D, 0xBF1ED344, -/**/ 0x8BFD1000, 0x3FD24155, -/**/ 0x3228FCAD, 0x3D300FFF, -/**/ 0x00000000, 0x3FE80800, -/**/ 0x1B0BD52D, 0x3F3424D0, -/**/ 0xEF6AF000, 0x3FD24D5B, -/**/ 0xFC9FABDD, 0xBCBDD780, -/**/ 0x00000000, 0x3FE80800, -/**/ 0xFE7F9FE8, 0xBF2FE7F9, -/**/ 0x10DF7000, 0x3FD25960, -/**/ 0x224EA3E3, 0x3D38E7BC, -/**/ 0x00000000, 0x3FE80000, -/**/ 0x18018018, 0x3F280180, -/**/ 0xF1338000, 0x3FD26561, -/**/ 0x66FAA45F, 0x3D38B488, -/**/ 0x00000000, 0x3FE80000, -/**/ 0x5FF40180, 0xBF37FD00, -/**/ 0x913F8000, 0x3FD27161, -/**/ 0xF61564B4, 0x3D34F4F1, -/**/ 0x00000000, 0x3FE7F800, -/**/ 0x9750B6C7, 0x3F104AE8, -/**/ 0xF1DB6000, 0x3FD27D5E, -/**/ 0x78CAC9F4, 0xBD092374, -/**/ 0x00000000, 0x3FE7F800, -/**/ 0xF405FD01, 0xBF3FD017, -/**/ 0x13DE8000, 0x3FD2895A, -/**/ 0xD24C13F0, 0x3D3A8D7A, -/**/ 0x00000000, 0x3FE7F000, -/**/ 0xC9C5485E, 0xBF0D2BF1, -/**/ 0xF81FF000, 0x3FD29552, -/**/ 0x1771C408, 0x3D348D30, -/**/ 0x00000000, 0x3FE7E800, -/**/ 0xD029DB60, 0x3F38927F, -/**/ 0x9F763000, 0x3FD2A149, -/**/ 0x51F3AADC, 0xBD30DBBF, -/**/ 0x00000000, 0x3FE7E800, -/**/ 0xB0A45169, 0xBF26504A, -/**/ 0x0AB73000, 0x3FD2AD3E, -/**/ 0x488C359F, 0x3D2B972E, -/**/ 0x00000000, 0x3FE7E000, -/**/ 0xD278E8DD, 0x3F312A8A, -/**/ 0x3AB8A000, 0x3FD2B930, -/**/ 0xD6BFB0A5, 0xBD26DB12, -/**/ 0x00000000, 0x3FE7E000, -/**/ 0x24BB32E7, 0xBF327577, -/**/ 0x304F8000, 0x3FD2C520, -/**/ 0x8C342F39, 0x3D230852, -/**/ 0x00000000, 0x3FE7D800, -/**/ 0xA4B45AEC, 0x3F23EF9A, -/**/ 0xEC508000, 0x3FD2D10D, -/**/ 0xF7088353, 0x3D360C61, -/**/ 0x00000000, 0x3FE7D800, -/**/ 0x32748CC1, 0xBF398DAF, -/**/ 0x6F8FD000, 0x3FD2DCF9, -/**/ 0x8E33C9CE, 0x3D20B4A2, -/**/ 0x00000000, 0x3FE7D000, -/**/ 0x417D05F4, 0x3F07D05F, -/**/ 0xBAE12000, 0x3FD2E8E2, -/**/ 0x99B72BD8, 0xBD267B1E, -/**/ 0x00000000, 0x3FE7C800, -/**/ 0x431D3027, 0x3F3F8EF7, -/**/ 0xCF17A000, 0x3FD2F4C9, -/**/ 0x9374B87B, 0x3D371F04, -/**/ 0x00000000, 0x3FE7C800, -/**/ 0xDAD83E6C, 0xBF0E77A3, -/**/ 0xAD063000, 0x3FD300AE, -/**/ 0x8B75FCAC, 0x3D342F56, -/**/ 0x00000000, 0x3FE7C000, -/**/ 0x588D1676, 0x3F38E041, -/**/ 0x557F2000, 0x3FD30C91, -/**/ 0xA1451755, 0xBD142958, -/**/ 0x00000000, 0x3FE7C000, -/**/ 0x1FE8414C, 0xBF24C6DD, -/**/ 0xC9544000, 0x3FD31871, -/**/ 0x94CECFD9, 0x3D184FAB, -/**/ 0x00000000, 0x3FE7B800, -/**/ 0x81C2D3B2, 0x3F3265F4, -/**/ 0x09570000, 0x3FD32450, -/**/ 0x9BDAE59D, 0x3D3D271B, -/**/ 0x00000000, 0x3FE7B800, -/**/ 0xB6466407, 0xBF30C39C, -/**/ 0x16586000, 0x3FD3302C, -/**/ 0xC2A3E08B, 0x3D36217D, -/**/ 0x00000000, 0x3FE7B000, -/**/ 0x12B21224, 0x3F283FAD, -/**/ 0xF128E000, 0x3FD33C05, -/**/ 0x380E1A7D, 0xBD22B906, -/**/ 0x00000000, 0x3FE7B000, -/**/ 0xF899E55D, 0xBF36EFB8, -/**/ 0x9A988000, 0x3FD347DD, -/**/ 0xD4C58092, 0xBD25594D, -/**/ 0x00000000, 0x3FE7A800, -/**/ 0x3FF42B9F, 0x3F1836B6, -/**/ 0x1376E000, 0x3FD353B3, -/**/ 0xE6C26D9B, 0xBD1331AF, -/**/ 0x00000000, 0x3FE7A800, -/**/ 0x0B739FF4, 0xBF3CE7FD, -/**/ 0x5C933000, 0x3FD35F86, -/**/ 0x4EA1A54A, 0xBD3B07DE, -/**/ 0x00000000, 0x3FE7A000, -/**/ 0xE8017A00, 0x3EC7A005, -/**/ 0x76BC1000, 0x3FD36B57, -/**/ 0x5A9C223F, 0x3D116978, -/**/ 0x00000000, 0x3FE79800, -/**/ 0xB1CC5B7B, 0x3F3D535D, -/**/ 0x62BFE000, 0x3FD37726, -/**/ 0xAC53B023, 0xBD3E9436, -/**/ 0x00000000, 0x3FE79800, -/**/ 0xE0DA37A9, 0xBF15EEAC, -/**/ 0x216C5000, 0x3FD382F3, -/**/ 0x1D1A7F6D, 0xBD1061D2, -/**/ 0x00000000, 0x3FE79000, -/**/ 0x344E16D6, 0x3F37C21E, -/**/ 0xB38ED000, 0x3FD38EBD, -/**/ 0xE67D4CA0, 0x3D290582, -/**/ 0x00000000, 0x3FE79000, -/**/ 0x39C9E465, 0xBF25E69A, -/**/ 0x19F45000, 0x3FD39A86, -/**/ 0x937354F5, 0x3D18EE51, -/**/ 0x00000000, 0x3FE78800, -/**/ 0xC52640BC, 0x3F32640B, -/**/ 0x55694000, 0x3FD3A64C, -/**/ 0xBCD735D0, 0x3D37A71C, -/**/ 0x00000000, 0x3FE78800, -/**/ 0x2F6A09ED, 0xBF3037DE, -/**/ 0x66B9C000, 0x3FD3B210, -/**/ 0x9811560E, 0xBD33C1ED, -/**/ 0x00000000, 0x3FE78000, -/**/ 0x01781A72, 0x3F2A71DC, -/**/ 0x4EB15000, 0x3FD3BDD2, -/**/ 0x970E6ED9, 0xBD3257B4, -/**/ 0x00000000, 0x3FE78000, -/**/ 0xA9EEBFF4, 0xBF354996, -/**/ 0x0E1B2000, 0x3FD3C992, -/**/ 0xAA680B76, 0x3D141C28, -/**/ 0x00000000, 0x3FE77800, -/**/ 0xAC60D341, 0x3F208119, -/**/ 0xA5C1F000, 0x3FD3D54F, -/**/ 0xD9A395E3, 0x3D3C3E1C, -/**/ 0x00000000, 0x3FE77800, -/**/ 0x742E2DD0, 0xBF3A28AE, -/**/ 0x16701000, 0x3FD3E10B, -/**/ 0x145429C7, 0x3D3F3BCF, -/**/ 0x00000000, 0x3FE77000, -/**/ 0x36340177, 0x3F0BD584, -/**/ 0x60EF6000, 0x3FD3ECC4, -/**/ 0x27C1300F, 0xBD060286, -/**/ 0x00000000, 0x3FE77000, -/**/ 0x240C7174, 0xBF3ED55D, -/**/ 0x86094000, 0x3FD3F87B, -/**/ 0x54589889, 0xBD35DFD7, -/**/ 0x00000000, 0x3FE76800, -/**/ 0xAB277F45, 0xBEF18DE5, -/**/ 0x8686A000, 0x3FD40430, -/**/ 0x3049F7D3, 0x3D3F8EF4, -/**/ 0x00000000, 0x3FE76000, -/**/ 0x01D3C7B8, 0x3F3CB026, -/**/ 0x63303000, 0x3FD40FE3, -/**/ 0xE79F05C6, 0x3D3E5C5F, -/**/ 0x00000000, 0x3FE76000, -/**/ 0xA9D08664, 0xBF15E95B, -/**/ 0x1CCE1000, 0x3FD41B94, -/**/ 0x13E43FC9, 0xBD304690, -/**/ 0x00000000, 0x3FE75800, -/**/ 0x097CFD43, 0x3F3867A4, -/**/ 0xB427E000, 0x3FD42742, -/**/ 0x02B82675, 0xBD398727, -/**/ 0x00000000, 0x3FE75800, -/**/ 0xE8A9353E, 0xBF2353DF, -/**/ 0x2A04F000, 0x3FD432EF, -/**/ 0x931715AD, 0xBD3FB129, -/**/ 0x00000000, 0x3FE75000, -/**/ 0x4F13DC4A, 0x3F3450E6, -/**/ 0x7F2C1000, 0x3FD43E99, -/**/ 0x40C41A04, 0x3D1C3F72, -/**/ 0x00000000, 0x3FE75000, -/**/ 0xE8B1B4FC, 0xBF2B4FBF, -/**/ 0xB463C000, 0x3FD44A41, -/**/ 0xF37CF612, 0x3D31EE28, -/**/ 0x00000000, 0x3FE74800, -/**/ 0x7E458100, 0x3F306BB6, -/**/ 0xCA720000, 0x3FD455E7, -/**/ 0x36629AED, 0x3D1AD8C6, -/**/ 0x00000000, 0x3FE74800, -/**/ 0x1745D174, 0xBF31745D, -/**/ 0xC21C6000, 0x3FD4618B, -/**/ 0x484C84CC, 0xBD13D82F, -/**/ 0x00000000, 0x3FE74000, -/**/ 0x236DEC04, 0x3F296FBD, -/**/ 0x9C280000, 0x3FD46D2D, -/**/ 0x5F67F75A, 0x3D359B27, -/**/ 0x00000000, 0x3FE74000, -/**/ 0x3B304B87, 0xBF350F9D, -/**/ 0x5959B000, 0x3FD478CD, -/**/ 0xF0C8D098, 0x3D2EC89B, -/**/ 0x00000000, 0x3FE73800, -/**/ 0xA4EBDC70, 0x3F226A51, -/**/ 0xFA75C000, 0x3FD4846A, -/**/ 0xE3798DCE, 0xBD263EA2, -/**/ 0x00000000, 0x3FE73800, -/**/ 0xF00B9A78, 0xBF3879D5, -/**/ 0x80401000, 0x3FD49006, -/**/ 0xFE1A0F8C, 0xBD38BCCF, -/**/ 0x00000000, 0x3FE73000, -/**/ 0x5DAAD90C, 0x3F178D7F, -/**/ 0xEB7C1000, 0x3FD49B9F, -/**/ 0x58AB60D7, 0x3D3DAC1C, -/**/ 0x00000000, 0x3FE73000, -/**/ 0x783709C7, 0xBF3BB33C, -/**/ 0x3CED0000, 0x3FD4A737, -/**/ 0xEBF35449, 0xBD39A234, -/**/ 0x00000000, 0x3FE72800, -/**/ 0x265AD23A, 0x3F061274, -/**/ 0x75556000, 0x3FD4B2CC, -/**/ 0xC78BFA4B, 0xBD380FCB, -/**/ 0x00000000, 0x3FE72800, -/**/ 0xC90A1FD2, 0xBF3EBC05, -/**/ 0x95778000, 0x3FD4BE5F, -/**/ 0xCD9AD824, 0xBD3D7C92, -/**/ 0x00000000, 0x3FE72000, -/**/ 0x38017200, 0xBEC71FFA, -/**/ 0x9E153000, 0x3FD4C9F0, -/**/ 0x70E02DE0, 0xBD2E1DDE, -/**/ 0x00000000, 0x3FE71800, -/**/ 0x74A050E1, 0x3F3E6B99, -/**/ 0x8FEFE000, 0x3FD4D57F, -/**/ 0x7FD06868, 0x3D23F926, -/**/ 0x00000000, 0x3FE71800, -/**/ 0xB8BD1180, 0xBF077400, -/**/ 0x6BC8A000, 0x3FD4E10C, -/**/ 0x1636F061, 0x3CF8283F, -/**/ 0x00000000, 0x3FE71000, -/**/ 0xE3E0453A, 0x3F3BC36C, -/**/ 0x32600000, 0x3FD4EC97, -/**/ 0xAF04D104, 0x3D234D7A, -/**/ 0x00000000, 0x3FE71000, -/**/ 0x6935DDC5, 0xBF15FA98, -/**/ 0xE4764000, 0x3FD4F81F, -/**/ 0x434FF08D, 0xBD27FCF6, -/**/ 0x00000000, 0x3FE70800, -/**/ 0x7337CF08, 0x3F394B40, -/**/ 0x82CB2000, 0x3FD503A6, -/**/ 0xF16F9B5D, 0xBD2A68C8, -/**/ 0x00000000, 0x3FE70800, -/**/ 0xA835403A, 0xBF1F7B97, -/**/ 0x0E1E0000, 0x3FD50F2B, -/**/ 0x8C47B8D8, 0x3D3A0940, -/**/ 0x00000000, 0x3FE70000, -/**/ 0x5C0B8170, 0x3F3702E0, -/**/ 0x872E0000, 0x3FD51AAD, -/**/ 0xDB0A7CC1, 0xBD3F4BD8, -/**/ 0x00000000, 0x3FE70000, -/**/ 0x4F67A855, 0xBF241EE6, -/**/ 0xEEB99000, 0x3FD5262D, -/**/ 0x70894A01, 0xBD3E1B9F, -/**/ 0x00000000, 0x3FE6F800, -/**/ 0x221C0170, 0x3F34EA19, -/**/ 0x457EE000, 0x3FD531AC, -/**/ 0x7D931501, 0x3D3DF83B, -/**/ 0x00000000, 0x3FE6F800, -/**/ 0x5508CA5C, 0xBF282102, -/**/ 0x8C3BE000, 0x3FD53D28, -/**/ 0xEB6DFAC5, 0xBD111397, -/**/ 0x00000000, 0x3FE6F000, -/**/ 0x9300B793, 0x3F3300B7, -/**/ 0xC3ADD000, 0x3FD548A2, -/**/ 0x63081CF7, 0x3D23167E, -/**/ 0x00000000, 0x3FE6F000, -/**/ 0x005BB90F, 0xBF2BC486, -/**/ 0xEC91C000, 0x3FD5541A, -/**/ 0xDC72EEBA, 0xBCF816AA, -/**/ 0x00000000, 0x3FE6E800, -/**/ 0xC5A3A00B, 0x3F314688, -/**/ 0x07A44000, 0x3FD55F91, -/**/ 0x78DF4A62, 0xBD11E647, -/**/ 0x00000000, 0x3FE6E800, -/**/ 0xDA9C5AE1, 0xBF2F09D6, -/**/ 0x15A18000, 0x3FD56B05, -/**/ 0xBC4A23FC, 0x3D29247B, -/**/ 0x00000000, 0x3FE6E000, -/**/ 0x337C6CB1, 0x3F2F76B4, -/**/ 0x17456000, 0x3FD57677, -/**/ 0x9524D7CA, 0xBD364EAD, -/**/ 0x00000000, 0x3FE6E000, -/**/ 0xEDF4EC87, 0xBF30F8AC, -/**/ 0x0D4B3000, 0x3FD581E7, -/**/ 0xB12D8F1D, 0xBD1F31E1, -/**/ 0x00000000, 0x3FE6D800, -/**/ 0x6EAEF381, 0x3F2CBDF2, -/**/ 0xF86E0000, 0x3FD58D54, -/**/ 0x0A795215, 0x3D2791F3, -/**/ 0x00000000, 0x3FE6D800, -/**/ 0xB624BFF5, 0xBF323DB9, -/**/ 0xD9688000, 0x3FD598C0, -/**/ 0x70D96DA4, 0xBD385F49, -/**/ 0x00000000, 0x3FE6D000, -/**/ 0x1C860FB0, 0x3F2A6268, -/**/ 0xB0F4D000, 0x3FD5A42A, -/**/ 0x2DF7BA69, 0xBCDE63AF, -/**/ 0x00000000, 0x3FE6D000, -/**/ 0xB253BAE1, 0xBF335443, -/**/ 0x7FCCE000, 0x3FD5AF92, -/**/ 0xF5FFC77A, 0xBD1C032F, -/**/ 0x00000000, 0x3FE6C800, -/**/ 0xAB4294D4, 0x3F2863B1, -/**/ 0x46AA2000, 0x3FD5BAF8, -/**/ 0xF873FA41, 0xBD339AE8, -/**/ 0x00000000, 0x3FE6C800, -/**/ 0x87EAA6DF, 0xBF343C7C, -/**/ 0x0645A000, 0x3FD5C65C, -/**/ 0x0180EE65, 0xBD39FE06, -/**/ 0x00000000, 0x3FE6C000, -/**/ 0x16C16C17, 0x3F26C16C, -/**/ 0xBF581000, 0x3FD5D1BD, -/**/ 0xC9C7C238, 0xBD38D6BD, -/**/ 0x00000000, 0x3FE6C000, -/**/ 0x95C33E00, 0xBF34F695, -/**/ 0x7299C000, 0x3FD5DD1D, -/**/ 0x8815CE17, 0xBD38AF61, -/**/ 0x00000000, 0x3FE6B800, -/**/ 0xE7802D73, 0x3F257B34, -/**/ 0x20C29000, 0x3FD5E87B, -/**/ 0x8F7738FA, 0x3D3527D1, -/**/ 0x00000000, 0x3FE6B800, -/**/ 0xF4A5582C, 0xBF3582BF, -/**/ 0xCA8A2000, 0x3FD5F3D6, -/**/ 0x8E19CC75, 0x3D37AF84, -/**/ 0x00000000, 0x3FE6B000, -/**/ 0x31A3CFC7, 0x3F2490AA, -/**/ 0x70A79000, 0x3FD5FF30, -/**/ 0x9F105039, 0x3D2E9E43, -/**/ 0x00000000, 0x3FE6B000, -/**/ 0x77C30E5A, 0xBF35E12C, -/**/ 0x13D1A000, 0x3FD60A88, -/**/ 0xC879AF55, 0x3D36E9B9, -/**/ 0x00000000, 0x3FE6A800, -/**/ 0x94016A94, 0x3F24016A, -/**/ 0xB4BEC000, 0x3FD615DD, -/**/ 0x90BC04B2, 0x3D13C7CA, -/**/ 0x00000000, 0x3FE6A800, -/**/ 0xAD33D63F, 0xBF36120B, -/**/ 0x5424F000, 0x3FD62131, -/**/ 0x4AA68669, 0xBD3382FC, -/**/ 0x00000000, 0x3FE6A000, -/**/ 0x3729043E, 0x3F23CD15, -/**/ 0xF2B9C000, 0x3FD62C82, -/**/ 0xBD7C8A98, 0x3D3E54BD } }; - -static const union {int4 i[4350]; double x[2175]; } vj = { .i = { -/**/ 0x7D161C28, 0x3F46A400, -/**/ 0x20600000, 0xBF46A200, -/**/ 0xAA7623D9, 0x3D27DC4E, -/**/ 0xD596E639, 0x3F4693FA, -/**/ 0x4CE00000, 0xBF4691FD, -/**/ 0x29C3F0AD, 0x3D26B0CF, -/**/ 0x3219CE89, 0x3F4683F5, -/**/ 0x7B600000, 0xBF4681FA, -/**/ 0x95B9FDCC, 0x3D22B290, -/**/ 0x929ED397, 0x3F4673EF, -/**/ 0xABE00000, 0xBF4671F7, -/**/ 0xFA2F2D87, 0x3D17C727, -/**/ 0xF725F3E2, 0x3F4663E9, -/**/ 0xDE600000, 0xBF4661F4, -/**/ 0x6EDBFF1C, 0x3CF22ED3, -/**/ 0x5FAF2DE9, 0x3F4653E4, -/**/ 0x12E00000, 0xBF4651F2, -/**/ 0x157812BB, 0xBD144936, -/**/ 0xCC3A802B, 0x3F4643DE, -/**/ 0x49600000, 0xBF4641EF, -/**/ 0x60314E05, 0xBD2959CB, -/**/ 0x3CC7E927, 0x3F4633D9, -/**/ 0x81E00000, 0xBF4631EC, -/**/ 0xC3638E99, 0xBD35ABDA, -/**/ 0xB157675C, 0x3F4623D3, -/**/ 0xBC800000, 0xBF4621E9, -/**/ 0xC63F9A21, 0x3D3FF1D3, -/**/ 0x29E8F948, 0x3F4613CE, -/**/ 0xF9000000, 0xBF4611E6, -/**/ 0x71EEE611, 0x3D342D26, -/**/ 0xA67C9D6B, 0x3F4603C8, -/**/ 0x37800000, 0xBF4601E4, -/**/ 0x11A09689, 0x3D1C1C77, -/**/ 0x27125244, 0x3F45F3C3, -/**/ 0x78000000, 0xBF45F1E1, -/**/ 0xF7DC643C, 0xBD1DFD16, -/**/ 0xABAA1651, 0x3F45E3BD, -/**/ 0xBA800000, 0xBF45E1DE, -/**/ 0x91318A02, 0xBD376503, -/**/ 0x3443E812, 0x3F45D3B8, -/**/ 0xFF200000, 0xBF45D1DB, -/**/ 0xCE55DCDD, 0x3D3756E4, -/**/ 0xC0DFC606, 0x3F45C3B2, -/**/ 0x45A00000, 0xBF45C1D9, -/**/ 0x8F6F8FA0, 0x3D12D5CF, -/**/ 0x517DAEAB, 0x3F45B3AD, -/**/ 0x8E200000, 0xBF45B1D6, -/**/ 0x9B85DC2C, 0xBD2E90AB, -/**/ 0xE61DA081, 0x3F45A3A7, -/**/ 0xD8C00000, 0xBF45A1D3, -/**/ 0x3BF5AC54, 0x3D3B5E88, -/**/ 0x7EBF9A07, 0x3F4593A2, -/**/ 0x25400000, 0xBF4591D1, -/**/ 0x0C86DDB1, 0x3D12AC3A, -/**/ 0x1B6399BB, 0x3F45839D, -/**/ 0x73C00000, 0xBF4581CE, -/**/ 0x76830985, 0xBD3361C2, -/**/ 0xBC099E1C, 0x3F457397, -/**/ 0xC4600000, 0xBF4571CB, -/**/ 0xD062EBFF, 0x3D333915, -/**/ 0x60B1A5AA, 0x3F456392, -/**/ 0x16E00000, 0xBF4561C9, -/**/ 0x9CC4988F, 0xBD1E0DA0, -/**/ 0x095BAEE4, 0x3F45538D, -/**/ 0x6B800000, 0xBF4551C6, -/**/ 0x235BC18A, 0x3D3C69C4, -/**/ 0xB607B848, 0x3F454387, -/**/ 0xC2000000, 0xBF4541C3, -/**/ 0xF7737723, 0xBCEFCC99, -/**/ 0x66B5C056, 0x3F453382, -/**/ 0x1A800000, 0xBF4531C1, -/**/ 0x809CBCBB, 0xBD3FBAE2, -/**/ 0x1B65C58C, 0x3F45237D, -/**/ 0x75200000, 0xBF4521BE, -/**/ 0x194FEE63, 0x3CCAA5C8, -/**/ 0xD417C66A, 0x3F451377, -/**/ 0xD1C00000, 0xBF4511BB, -/**/ 0xE1CC7BBC, 0x3D3ED325, -/**/ 0x90CBC16E, 0x3F450372, -/**/ 0x30400000, 0xBF4501B9, -/**/ 0x68AB3742, 0xBD0F0298, -/**/ 0x5181B517, 0x3F44F36D, -/**/ 0x90E00000, 0xBF44F1B6, -/**/ 0x41E67AD9, 0x3D381BE1, -/**/ 0x16399FE6, 0x3F44E368, -/**/ 0xF3600000, 0xBF44E1B3, -/**/ 0x668D3662, 0xBD2A6E79, -/**/ 0xDEF38058, 0x3F44D362, -/**/ 0x58000000, 0xBF44D1B1, -/**/ 0x21F8B7C2, 0x3D284EA7, -/**/ 0xABAF54EC, 0x3F44C35D, -/**/ 0xBE800000, 0xBF44C1AE, -/**/ 0x7417D9C5, 0xBD3BC76D, -/**/ 0x7C6D1C22, 0x3F44B358, -/**/ 0x27200000, 0xBF44B1AC, -/**/ 0x16AAD1FC, 0xBD1409FD, -/**/ 0x512CD479, 0x3F44A353, -/**/ 0x91C00000, 0xBF44A1A9, -/**/ 0x98BC14FD, 0x3D30771E, -/**/ 0x29EE7C70, 0x3F44934E, -/**/ 0xFE400000, 0xBF4491A6, -/**/ 0x5CCB7232, 0xBD3B5993, -/**/ 0x06B21285, 0x3F448349, -/**/ 0x6CE00000, 0xBF4481A4, -/**/ 0x5512F9C2, 0xBD20E729, -/**/ 0xE7779538, 0x3F447343, -/**/ 0xDD800000, 0xBF4471A1, -/**/ 0x55B30899, 0x3D225436, -/**/ 0xCC3F0308, 0x3F44633E, -/**/ 0x50200000, 0xBF44619F, -/**/ 0x9E54E31F, 0x3D39807C, -/**/ 0xB5085A73, 0x3F445339, -/**/ 0xC4A00000, 0xBF44519C, -/**/ 0xD5804C0E, 0xBD376F6F, -/**/ 0xA1D399FA, 0x3F444334, -/**/ 0x3B400000, 0xBF44419A, -/**/ 0x6CDE6425, 0xBD234953, -/**/ 0x92A0C01A, 0x3F44332F, -/**/ 0xB3E00000, 0xBF443197, -/**/ 0xAAF6596F, 0x3D070E7B, -/**/ 0x876FCB54, 0x3F44232A, -/**/ 0x2E800000, 0xBF442195, -/**/ 0x4EC011F1, 0x3D2C49F8, -/**/ 0x8040BA25, 0x3F441325, -/**/ 0xAB200000, 0xBF441192, -/**/ 0xD8AAA7EB, 0x3D3825DC, -/**/ 0x7D138B0E, 0x3F440320, -/**/ 0x29A00000, 0xBF440190, -/**/ 0xFE0B73D6, 0xBD3F1A8D, -/**/ 0x7DE83C8C, 0x3F43F31B, -/**/ 0xAA400000, 0xBF43F18D, -/**/ 0xE46CA26B, 0xBD379B43, -/**/ 0x82BECD20, 0x3F43E316, -/**/ 0x2CE00000, 0xBF43E18B, -/**/ 0x6283780D, 0xBD315B44, -/**/ 0x8B973B49, 0x3F43D311, -/**/ 0xB1800000, 0xBF43D188, -/**/ 0x017589BE, 0xBD28B31E, -/**/ 0x98718584, 0x3F43C30C, -/**/ 0x38200000, 0xBF43C186, -/**/ 0x8FBB296E, 0xBD212A46, -/**/ 0xA94DAA52, 0x3F43B307, -/**/ 0xC0C00000, 0xBF43B183, -/**/ 0x045CBBD2, 0xBD183403, -/**/ 0xBE2BA832, 0x3F43A302, -/**/ 0x4B600000, 0xBF43A181, -/**/ 0xD7CC5936, 0xBD13009B, -/**/ 0xD70B7DA2, 0x3F4392FD, -/**/ 0xD8000000, 0xBF43917E, -/**/ 0xC1742279, 0xBD12B655, -/**/ 0xF3ED2921, 0x3F4382F8, -/**/ 0x66A00000, 0xBF43817C, -/**/ 0xEA83FAE8, 0xBD17512E, -/**/ 0x14D0A930, 0x3F4372F4, -/**/ 0xF7400000, 0xBF437179, -/**/ 0xBED65875, 0xBD206692, -/**/ 0x39B5FC4C, 0x3F4362EF, -/**/ 0x89E00000, 0xBF436177, -/**/ 0xD38FFE9E, 0xBD27931B, -/**/ 0x629D20F5, 0x3F4352EA, -/**/ 0x1E800000, 0xBF435175, -/**/ 0xE524208F, 0xBD309618, -/**/ 0x8F8615AA, 0x3F4342E5, -/**/ 0xB5200000, 0xBF434172, -/**/ 0xDD4C72C5, 0xBD3697E9, -/**/ 0xC070D8EB, 0x3F4332E0, -/**/ 0x4DC00000, 0xBF433170, -/**/ 0x5E6E12C3, 0xBD3DCE00, -/**/ 0xF55D6935, 0x3F4322DB, -/**/ 0xE8800000, 0xBF43216D, -/**/ 0x0AE9A8CE, 0x3D39C8A4, -/**/ 0x2E4BC509, 0x3F4312D7, -/**/ 0x85200000, 0xBF43116B, -/**/ 0xD1CD2FA1, 0x3D302D03, -/**/ 0x6B3BEAE5, 0x3F4302D2, -/**/ 0x23C00000, 0xBF430169, -/**/ 0xA3BADFD1, 0x3D15807D, -/**/ 0xAC2DD949, 0x3F42F2CD, -/**/ 0xC4600000, 0xBF42F166, -/**/ 0xF57F0504, 0xBD1A7422, -/**/ 0xF1218EB3, 0x3F42E2C8, -/**/ 0x67000000, 0xBF42E164, -/**/ 0x2F2C781C, 0xBD33C974, -/**/ 0x3A1709A3, 0x3F42D2C4, -/**/ 0x0BC00000, 0xBF42D162, -/**/ 0x851A1E61, 0x3D3DDBDD, -/**/ 0x870E4898, 0x3F42C2BF, -/**/ 0xB2600000, 0xBF42C15F, -/**/ 0xA14AA8FD, 0x3D2CA7D9, -/**/ 0xD8074A10, 0x3F42B2BA, -/**/ 0x5B000000, 0xBF42B15D, -/**/ 0xDDCDDFF5, 0xBD03022E, -/**/ 0x2D020C8C, 0x3F42A2B6, -/**/ 0x05A00000, 0xBF42A15B, -/**/ 0x0F9231A8, 0xBD343FBA, -/**/ 0x85FE8E8A, 0x3F4292B1, -/**/ 0xB2600000, 0xBF429158, -/**/ 0xA52C9CCF, 0x3D38B690, -/**/ 0xE2FCCE8A, 0x3F4282AC, -/**/ 0x61000000, 0xBF428156, -/**/ 0xC8CC82EB, 0x3D120E6A, -/**/ 0x43FCCB0A, 0x3F4272A8, -/**/ 0x11A00000, 0xBF427154, -/**/ 0x792E6C51, 0xBD30D79B, -/**/ 0xA8FE8289, 0x3F4262A3, -/**/ 0xC4600000, 0xBF426151, -/**/ 0x91F7F7AA, 0x3D38A5EE, -/**/ 0x1201F387, 0x3F42529F, -/**/ 0x79000000, 0xBF42514F, -/**/ 0x46C2E8BA, 0x3CEFA728, -/**/ 0x7F071C84, 0x3F42429A, -/**/ 0x2FA00000, 0xBF42414D, -/**/ 0xFA447A17, 0xBD37D0BA, -/**/ 0xF00DFBFD, 0x3F423295, -/**/ 0xE8600000, 0xBF42314A, -/**/ 0x94AF3FED, 0x3D2C7A24, -/**/ 0x65169072, 0x3F422291, -/**/ 0xA3000000, 0xBF422148, -/**/ 0x050CEA04, 0xBD29B0BD, -/**/ 0xDE20D863, 0x3F42128C, -/**/ 0x5FC00000, 0xBF421146, -/**/ 0x0C3035EB, 0x3D36EFF3, -/**/ 0x5B2CD24E, 0x3F420288, -/**/ 0x1E600000, 0xBF420144, -/**/ 0x73569B27, 0xBD19A3E2, -/**/ 0xDC3A7CB2, 0x3F41F283, -/**/ 0xDF200000, 0xBF41F141, -/**/ 0xEEB67715, 0x3D3B1DDE, -/**/ 0x6149D610, 0x3F41E27F, -/**/ 0xA1C00000, 0xBF41E13F, -/**/ 0x94F49154, 0xBD11EA17, -/**/ 0xEA5ADCE5, 0x3F41D27A, -/**/ 0x66800000, 0xBF41D13D, -/**/ 0x52DD9D37, 0x3D3ACED9, -/**/ 0x776D8FB1, 0x3F41C276, -/**/ 0x2D200000, 0xBF41C13B, -/**/ 0xF72D8EEB, 0xBD1C140B, -/**/ 0x0881ECF4, 0x3F41B272, -/**/ 0xF5E00000, 0xBF41B138, -/**/ 0x939583E1, 0x3D360AE5, -/**/ 0x9D97F32C, 0x3F41A26D, -/**/ 0xC0800000, 0xBF41A136, -/**/ 0x1D246C7C, 0xBD2C00D9, -/**/ 0x36AFA0D9, 0x3F419269, -/**/ 0x8D400000, 0xBF419134, -/**/ 0x0B955CFB, 0x3D29B40E, -/**/ 0xD3C8F479, 0x3F418264, -/**/ 0x5BE00000, 0xBF418132, -/**/ 0x45A6C249, 0xBD3964BF, -/**/ 0x74E3EC8D, 0x3F417260, -/**/ 0x2CA00000, 0xBF417130, -/**/ 0xF3363612, 0xBCE777E0, -/**/ 0x1A008792, 0x3F41625C, -/**/ 0xFF600000, 0xBF41612D, -/**/ 0x28DE8296, 0x3D36D608, -/**/ 0xC31EC409, 0x3F415257, -/**/ 0xD4000000, 0xBF41512B, -/**/ 0x4BB1B788, 0xBD32AE69, -/**/ 0x703EA071, 0x3F414253, -/**/ 0xAAC00000, 0xBF414129, -/**/ 0x170ECD8C, 0x3D05BF68, -/**/ 0x21601B48, 0x3F41324F, -/**/ 0x83800000, 0xBF413127, -/**/ 0x7C653BFC, 0x3D370A0B, -/**/ 0xD683330E, 0x3F41224A, -/**/ 0x5E200000, 0xBF412125, -/**/ 0x77BBBEBF, 0xBD35B70D, -/**/ 0x8FA7E642, 0x3F411246, -/**/ 0x3AE00000, 0xBF411123, -/**/ 0x93ABC1CD, 0xBD0C52EB, -/**/ 0x4CCE3363, 0x3F410242, -/**/ 0x19A00000, 0xBF410121, -/**/ 0xE5C6F4C7, 0x3D2B2237, -/**/ 0x0DF618F1, 0x3F40F23E, -/**/ 0xFA600000, 0xBF40F11E, -/**/ 0x1E9A50AD, 0x3D3D9C5F, -/**/ 0xD31F956A, 0x3F40E239, -/**/ 0xDD000000, 0xBF40E11C, -/**/ 0x8965F0DA, 0xBD336793, -/**/ 0x9C4AA74E, 0x3F40D235, -/**/ 0xC1C00000, 0xBF40D11A, -/**/ 0x7E49E231, 0xBD15E6EE, -/**/ 0x69774D1D, 0x3F40C231, -/**/ 0xA8800000, 0xBF40C118, -/**/ 0x04FD621C, 0x3D1D9B9D, -/**/ 0x3AA58554, 0x3F40B22D, -/**/ 0x91400000, 0xBF40B116, -/**/ 0x7DD9EED3, 0x3D333B55, -/**/ 0x0FD54E74, 0x3F40A229, -/**/ 0x7C000000, 0xBF40A114, -/**/ 0x7AA78478, 0x3D3E048F, -/**/ 0xE906A6FC, 0x3F409224, -/**/ 0x68A00000, 0xBF409112, -/**/ 0x644DDE88, 0xBD383C6A, -/**/ 0xC6398D6B, 0x3F408220, -/**/ 0x57600000, 0xBF408110, -/**/ 0x76B8C83A, 0xBD2F0D2F, -/**/ 0xA76E0040, 0x3F40721C, -/**/ 0x48200000, 0xBF40710E, -/**/ 0x9CE99FD3, 0xBD1F63E0, -/**/ 0x8CA3FDFB, 0x3F406218, -/**/ 0x3AE00000, 0xBF40610C, -/**/ 0x4FE774F2, 0xBCF328B4, -/**/ 0x75DB851A, 0x3F405214, -/**/ 0x2FA00000, 0xBF40510A, -/**/ 0x3782BCD4, 0x3D11B6BD, -/**/ 0x6314941D, 0x3F404210, -/**/ 0x26600000, 0xBF404108, -/**/ 0xE7183792, 0x3D22116F, -/**/ 0x544F2983, 0x3F40320C, -/**/ 0x1F200000, 0xBF403106, -/**/ 0x1B995B3D, 0x3D293F1E, -/**/ 0x498B43CB, 0x3F402208, -/**/ 0x19E00000, 0xBF402104, -/**/ 0xFC162630, 0x3D2E6669, -/**/ 0x42C8E175, 0x3F401204, -/**/ 0x16A00000, 0xBF401102, -/**/ 0x254FC9F8, 0x3D30C4AA, -/**/ 0x40080100, 0x3F400200, -/**/ 0x15600000, 0xBF400100, -/**/ 0xE4431F92, 0x3D3154EE, -/**/ 0x829141D6, 0x3F3FE3F8, -/**/ 0x2C400000, 0xBF3FE1FC, -/**/ 0x9B2D30FB, 0x3D30E503, -/**/ 0x8D157F6B, 0x3F3FC3F0, -/**/ 0x31C00000, 0xBF3FC1F8, -/**/ 0x53EBD670, 0x3D2EEBD1, -/**/ 0x9F9CB7BC, 0x3F3FA3E8, -/**/ 0x3B400000, 0xBF3FA1F4, -/**/ 0xE04A16E0, 0x3D2A113C, -/**/ 0xBA26E7CA, 0x3F3F83E0, -/**/ 0x48C00000, 0xBF3F81F0, -/**/ 0x99C43E34, 0x3D233C4A, -/**/ 0xDCB40C91, 0x3F3F63D8, -/**/ 0x5A400000, 0xBF3F61EC, -/**/ 0x7BD210C1, 0x3D14DDF6, -/**/ 0x07442311, 0x3F3F43D1, -/**/ 0x6FC00000, 0xBF3F41E8, -/**/ 0x9E4B51C8, 0xBCC52C1D, -/**/ 0x39D72849, 0x3F3F23C9, -/**/ 0x89400000, 0xBF3F21E4, -/**/ 0x8EA8C754, 0xBD1A196F, -/**/ 0x746D1936, 0x3F3F03C1, -/**/ 0xA6C00000, 0xBF3F01E0, -/**/ 0xF95AF98D, 0xBD2BB719, -/**/ 0xB705F2D8, 0x3F3EE3B9, -/**/ 0xC8400000, 0xBF3EE1DC, -/**/ 0x28FFD598, 0xBD3628EB, -/**/ 0x01A1B22C, 0x3F3EC3B2, -/**/ 0xEDC00000, 0xBF3EC1D8, -/**/ 0x0BBAC8F8, 0xBD3F6D76, -/**/ 0x54405432, 0x3F3EA3AA, -/**/ 0x17800000, 0xBF3EA1D5, -/**/ 0xB7A7EE0D, 0x3D3657D2, -/**/ 0xAEE1D5E8, 0x3F3E83A2, -/**/ 0x45000000, 0xBF3E81D1, -/**/ 0xFA9CCC78, 0x3D264FDE, -/**/ 0x1186344C, 0x3F3E639B, -/**/ 0x76800000, 0xBF3E61CD, -/**/ 0xE02EF455, 0xBCEF83EB, -/**/ 0x7C2D6C5E, 0x3F3E4393, -/**/ 0xAC000000, 0xBF3E41C9, -/**/ 0x03C3E129, 0xBD2C26B3, -/**/ 0xEED77B1B, 0x3F3E238B, -/**/ 0xE5800000, 0xBF3E21C5, -/**/ 0x904D773D, 0xBD3C1CBE, -/**/ 0x69845D83, 0x3F3E0384, -/**/ 0x23400000, 0xBF3E01C2, -/**/ 0xD0615454, 0x3D34E8B1, -/**/ 0xEC341093, 0x3F3DE37C, -/**/ 0x64C00000, 0xBF3DE1BE, -/**/ 0xE9BE933E, 0x3D13F7DF, -/**/ 0x76E6914B, 0x3F3DC375, -/**/ 0xAA400000, 0xBF3DC1BA, -/**/ 0x707B004A, 0xBD27B7D7, -/**/ 0x099BDCA9, 0x3F3DA36E, -/**/ 0xF3C00000, 0xBF3DA1B6, -/**/ 0xEE2141C3, 0xBD3DA3F8, -/**/ 0xA453EFAC, 0x3F3D8366, -/**/ 0x41800000, 0xBF3D81B3, -/**/ 0x63D21825, 0x3D2F4DA1, -/**/ 0x470EC752, 0x3F3D635F, -/**/ 0x93000000, 0xBF3D61AF, -/**/ 0xFAD0B844, 0xBD0FD473, -/**/ 0xF1CC609A, 0x3F3D4357, -/**/ 0xE8800000, 0xBF3D41AB, -/**/ 0x298657C2, 0xBD388716, -/**/ 0xA48CB882, 0x3F3D2350, -/**/ 0x42400000, 0xBF3D21A8, -/**/ 0x0B68711A, 0x3D32023A, -/**/ 0x5F4FCC0A, 0x3F3D0349, -/**/ 0x9FC00000, 0xBF3D01A4, -/**/ 0x23A704B0, 0xBD117676, -/**/ 0x22159830, 0x3F3CE342, -/**/ 0x01400000, 0xBF3CE1A1, -/**/ 0x8F391F09, 0xBD3BA59C, -/**/ 0xECDE19F1, 0x3F3CC33A, -/**/ 0x67000000, 0xBF3CC19D, -/**/ 0x9EBBF706, 0x3D28567A, -/**/ 0xBFA94E4E, 0x3F3CA333, -/**/ 0xD0800000, 0xBF3CA199, -/**/ 0x2D41F1CC, 0xBD29D41F, -/**/ 0x9A773245, 0x3F3C832C, -/**/ 0x3E400000, 0xBF3C8196, -/**/ 0x14ED5134, 0x3D391B7D, -/**/ 0x7D47C2D4, 0x3F3C6325, -/**/ 0xAFC00000, 0xBF3C6192, -/**/ 0x83403B5B, 0xBCFC31C5, -/**/ 0x681AFCFA, 0x3F3C431E, -/**/ 0x25400000, 0xBF3C418F, -/**/ 0x88A1FFF3, 0xBD3D84DB, -/**/ 0x5AF0DDB6, 0x3F3C2317, -/**/ 0x9F000000, 0xBF3C218B, -/**/ 0x6298A63B, 0x3D175CFF, -/**/ 0x55C96207, 0x3F3C0310, -/**/ 0x1C800000, 0xBF3C0188, -/**/ 0xDFB8E489, 0xBD37ADC9, -/**/ 0x58A486EA, 0x3F3BE309, -/**/ 0x9E400000, 0xBF3BE184, -/**/ 0x45069C64, 0x3D23DA0F, -/**/ 0x6382495F, 0x3F3BC302, -/**/ 0x23C00000, 0xBF3BC181, -/**/ 0x4CC2EFE0, 0xBD35574B, -/**/ 0x7662A665, 0x3F3BA2FB, -/**/ 0xAD800000, 0xBF3BA17D, -/**/ 0x4BED0B89, 0x3D250C7B, -/**/ 0x91459AFA, 0x3F3B82F4, -/**/ 0x3B000000, 0xBF3B817A, -/**/ 0x322E5605, 0xBD36795D, -/**/ 0xB42B241D, 0x3F3B62ED, -/**/ 0xCCC00000, 0xBF3B6176, -/**/ 0xF6413886, 0x3D1EAB91, -/**/ 0xDF133ECC, 0x3F3B42E6, -/**/ 0x62400000, 0xBF3B4173, -/**/ 0xF86BE5B5, 0xBD3B0BFC, -/**/ 0x11FDE807, 0x3F3B22E0, -/**/ 0xFC000000, 0xBF3B216F, -/**/ 0xDDE8D701, 0x3CF62FEB, -/**/ 0x4CEB1CCC, 0x3F3B02D9, -/**/ 0x99C00000, 0xBF3B016C, -/**/ 0xF210FD9E, 0x3D3CF8D7, -/**/ 0x8FDADA1A, 0x3F3AE2D2, -/**/ 0x3B400000, 0xBF3AE169, -/**/ 0x1526CFB0, 0xBD2092E2, -/**/ 0xDACD1CEF, 0x3F3AC2CB, -/**/ 0xE1000000, 0xBF3AC165, -/**/ 0x18D261D5, 0x3D319D24, -/**/ 0x2DC1E24A, 0x3F3AA2C5, -/**/ 0x8A800000, 0xBF3AA162, -/**/ 0x533CC8EC, 0xBD355268, -/**/ 0x88B9272B, 0x3F3A82BE, -/**/ 0x38400000, 0xBF3A815F, -/**/ 0x0AFE6139, 0x3D074750, -/**/ 0xEBB2E88F, 0x3F3A62B7, -/**/ 0xEA000000, 0xBF3A615B, -/**/ 0x6668AD57, 0x3D3A501B, -/**/ 0x56AF2375, 0x3F3A42B1, -/**/ 0x9F800000, 0xBF3A4158, -/**/ 0xA98381BD, 0xBD2E37A7, -/**/ 0xC9ADD4DD, 0x3F3A22AA, -/**/ 0x59400000, 0xBF3A2155, -/**/ 0x7B82F9AC, 0x3D1A9872, -/**/ 0x44AEF9C5, 0x3F3A02A4, -/**/ 0x17000000, 0xBF3A0152, -/**/ 0x0FF040AD, 0x3D3B96ED, -/**/ 0xC7B28F2C, 0x3F39E29D, -/**/ 0xD8800000, 0xBF39E14E, -/**/ 0x33534BD7, 0xBD304862, -/**/ 0x52B89211, 0x3F39C297, -/**/ 0x9E400000, 0xBF39C14B, -/**/ 0x17AF009B, 0x3D084979, -/**/ 0xE5C0FF72, 0x3F39A290, -/**/ 0x68000000, 0xBF39A148, -/**/ 0x604B64C9, 0x3D358CA1, -/**/ 0x80CBD44E, 0x3F39828A, -/**/ 0x35800000, 0xBF398145, -/**/ 0x2E334404, 0xBD38BD0B, -/**/ 0x23D90DA4, 0x3F396284, -/**/ 0x07400000, 0xBF396142, -/**/ 0xEF1B1C68, 0xBD1F4B58, -/**/ 0xCEE8A873, 0x3F39427D, -/**/ 0xDD000000, 0xBF39413E, -/**/ 0x07E010EC, 0x3D209881, -/**/ 0x81FAA1B9, 0x3F392277, -/**/ 0xB6C00000, 0xBF39213B, -/**/ 0x5CF03181, 0x3D37A139, -/**/ 0x3D0EF676, 0x3F390271, -/**/ 0x94400000, 0xBF390138, -/**/ 0x65276B0B, 0xBD39D2EB, -/**/ 0x0025A3A8, 0x3F38E26B, -/**/ 0x76000000, 0xBF38E135, -/**/ 0xEE3023F6, 0xBD281E5A, -/**/ 0xCB3EA64F, 0x3F38C264, -/**/ 0x5BC00000, 0xBF38C132, -/**/ 0x3F9A4B53, 0x3CEDAE6E, -/**/ 0x9E59FB68, 0x3F38A25E, -/**/ 0x45800000, 0xBF38A12F, -/**/ 0x412B648E, 0x3D2A47EF, -/**/ 0x79779FF3, 0x3F388258, -/**/ 0x33400000, 0xBF38812C, -/**/ 0x5ED0D8F2, 0x3D38955F, -/**/ 0x5C9790EE, 0x3F386252, -/**/ 0x24C00000, 0xBF386129, -/**/ 0x09939374, 0xBD3CBD55, -/**/ 0x47B9CB5A, 0x3F38424C, -/**/ 0x1A800000, 0xBF384126, -/**/ 0x4F399186, 0xBD32D325, -/**/ 0x3ADE4C33, 0x3F382246, -/**/ 0x14400000, 0xBF382123, -/**/ 0x524688EB, 0xBD235622, -/**/ 0x3605107A, 0x3F380240, -/**/ 0x12000000, 0xBF380120, -/**/ 0xEB2F3DDC, 0xBCF44184, -/**/ 0x392E152C, 0x3F37E23A, -/**/ 0x13C00000, 0xBF37E11D, -/**/ 0x2153D1B8, 0x3D198B16, -/**/ 0x4459574A, 0x3F37C234, -/**/ 0x19800000, 0xBF37C11A, -/**/ 0x47A3C923, 0x3D2A9511, -/**/ 0x5786D3D1, 0x3F37A22E, -/**/ 0x23400000, 0xBF37A117, -/**/ 0x4B4128D9, 0x3D337431, -/**/ 0x72B687C1, 0x3F378228, -/**/ 0x31000000, 0xBF378114, -/**/ 0xC5BFE9E8, 0x3D38E0BF, -/**/ 0x95E87019, 0x3F376222, -/**/ 0x42C00000, 0xBF376111, -/**/ 0x5A0B2CE9, 0x3D3D9134, -/**/ 0xC11C89D8, 0x3F37421C, -/**/ 0x58400000, 0xBF37410E, -/**/ 0xB1802C40, 0xBD3E7970, -/**/ 0xF452D1FB, 0x3F372216, -/**/ 0x72000000, 0xBF37210B, -/**/ 0x16E562C9, 0xBD3B3E2F, -/**/ 0x2F8B4583, 0x3F370211, -/**/ 0x8FC00000, 0xBF370108, -/**/ 0x9087DACD, 0xBD38BC06, -/**/ 0x72C5E16F, 0x3F36E20B, -/**/ 0xB1800000, 0xBF36E105, -/**/ 0xD92B1B21, 0xBD36F1F6, -/**/ 0xBE02A2BC, 0x3F36C205, -/**/ 0xD7400000, 0xBF36C102, -/**/ 0xABF2CD23, 0xBD35DEFF, -/**/ 0x1141866B, 0x3F36A200, -/**/ 0x01000000, 0xBF36A100, -/**/ 0xC462BC85, 0xBD358220, -/**/ 0x6C828979, 0x3F3681FA, -/**/ 0x2EC00000, 0xBF3680FD, -/**/ 0xDE5ED723, 0xBD35DA59, -/**/ 0xCFC5A8E7, 0x3F3661F4, -/**/ 0x60800000, 0xBF3660FA, -/**/ 0xB62B2CD1, 0xBD36E6AA, -/**/ 0x3B0AE1B2, 0x3F3641EF, -/**/ 0x96400000, 0xBF3640F7, -/**/ 0x086BEF29, 0xBD38A613, -/**/ 0xAE5230DA, 0x3F3621E9, -/**/ 0xD0000000, 0xBF3620F4, -/**/ 0x9225715D, 0xBD3B1792, -/**/ 0x299B935F, 0x3F3601E4, -/**/ 0x0DC00000, 0xBF3600F2, -/**/ 0x10BC2805, 0xBD3E3A29, -/**/ 0xACE7063E, 0x3F35E1DE, -/**/ 0x4FC00000, 0xBF35E0EF, -/**/ 0xBE0B570D, 0x3D3DF329, -/**/ 0x38348676, 0x3F35C1D9, -/**/ 0x95800000, 0xBF35C0EC, -/**/ 0x1C0C5502, 0x3D397166, -/**/ 0xCB841108, 0x3F35A1D3, -/**/ 0xDF400000, 0xBF35A0E9, -/**/ 0x4AC1FA2D, 0x3D34418C, -/**/ 0x66D5A2F1, 0x3F3581CE, -/**/ 0x2D000000, 0xBF3580E7, -/**/ 0x168E9C6E, 0x3D2CC939, -/**/ 0x0A293931, 0x3F3561C9, -/**/ 0x7EC00000, 0xBF3560E4, -/**/ 0x795CE154, 0x3D1F6E5C, -/**/ 0xB57ED0C7, 0x3F3541C3, -/**/ 0xD4800000, 0xBF3540E1, -/**/ 0x898FEE67, 0x3CE4EF88, -/**/ 0x68D666B1, 0x3F3521BE, -/**/ 0x2E400000, 0xBF3520DF, -/**/ 0x0B78D65E, 0xBD1CDACF, -/**/ 0x242FF7EF, 0x3F3501B9, -/**/ 0x8C000000, 0xBF3500DC, -/**/ 0x6F1CBFB8, 0xBD2F7BF1, -/**/ 0xE78B8180, 0x3F34E1B3, -/**/ 0xEDC00000, 0xBF34E0D9, -/**/ 0x5A899820, 0xBD38ED52, -/**/ 0xB2E90063, 0x3F34C1AE, -/**/ 0x53C00000, 0xBF34C0D7, -/**/ 0x930A694E, 0x3D3D3C3F, -/**/ 0x86487196, 0x3F34A1A9, -/**/ 0xBD800000, 0xBF34A0D4, -/**/ 0x4FA7CCCB, 0x3D32BFBD, -/**/ 0x61A9D219, 0x3F3481A4, -/**/ 0x2B400000, 0xBF3480D2, -/**/ 0x65A26E32, 0x3D1E789C, -/**/ 0x450D1EEB, 0x3F34619F, -/**/ 0x9D000000, 0xBF3460CF, -/**/ 0x47E500B5, 0xBD109E0B, -/**/ 0x3072550B, 0x3F34419A, -/**/ 0x12C00000, 0xBF3440CD, -/**/ 0x3523FAE9, 0xBD309040, -/**/ 0x23D97178, 0x3F342195, -/**/ 0x8C800000, 0xBF3420CA, -/**/ 0xD31DE7C2, 0xBD3D9B10, -/**/ 0x1F427131, 0x3F340190, -/**/ 0x0A800000, 0xBF3400C8, -/**/ 0x90B287C4, 0x3D34B90B, -/**/ 0x22AD5135, 0x3F33E18B, -/**/ 0x8C400000, 0xBF33E0C5, -/**/ 0xCA1B0FC2, 0x3D19B454, -/**/ 0x2E1A0E83, 0x3F33C186, -/**/ 0x12000000, 0xBF33C0C3, -/**/ 0x638FC1F4, 0xBD20FBE7, -/**/ 0x4188A61A, 0x3F33A181, -/**/ 0x9BC00000, 0xBF33A0C0, -/**/ 0xE0C03290, 0xBD38070E, -/**/ 0x5CF914F9, 0x3F33817C, -/**/ 0x29C00000, 0xBF3380BE, -/**/ 0xE0B6E5F5, 0x3D37D2C3, -/**/ 0x806B5820, 0x3F336177, -/**/ 0xBB800000, 0xBF3360BB, -/**/ 0x35598794, 0x3D1C4213, -/**/ 0xABDF6C8D, 0x3F334172, -/**/ 0x51400000, 0xBF3340B9, -/**/ 0xC111C569, 0xBD249997, -/**/ 0xDF554F40, 0x3F33216D, -/**/ 0xEB000000, 0xBF3320B6, -/**/ 0xEEEE28E2, 0xBD3C442D, -/**/ 0x1ACCFD37, 0x3F330169, -/**/ 0x89000000, 0xBF3300B4, -/**/ 0xDBBF316D, 0x3D312B5E, -/**/ 0x5E467372, 0x3F32E164, -/**/ 0x2AC00000, 0xBF32E0B2, -/**/ 0x7484E6E1, 0xBCFFD254, -/**/ 0xA9C1AEF0, 0x3F32C15F, -/**/ 0xD0800000, 0xBF32C0AF, -/**/ 0x1F2C3F9D, 0xBD35BCBA, -/**/ 0xFD3EACAF, 0x3F32A15A, -/**/ 0x7A800000, 0xBF32A0AD, -/**/ 0x8C8BAA61, 0x3D35EDA0, -/**/ 0x58BD69B0, 0x3F328156, -/**/ 0x28400000, 0xBF3280AB, -/**/ 0x3F79FE5E, 0x3CF02EAF, -/**/ 0xBC3DE2F1, 0x3F326151, -/**/ 0xDA000000, 0xBF3260A8, -/**/ 0xB1304AA8, 0xBD347BDA, -/**/ 0x27C01572, 0x3F32414D, -/**/ 0x90000000, 0xBF3240A6, -/**/ 0xD46BE359, 0x3D35724F, -/**/ 0x9B43FE30, 0x3F322148, -/**/ 0x49C00000, 0xBF3220A4, -/**/ 0x43BF90C9, 0xBCF31954, -/**/ 0x16C99A2D, 0x3F320144, -/**/ 0x07800000, 0xBF3200A2, -/**/ 0xC4901E30, 0xBD386689, -/**/ 0x9A50E666, 0x3F31E13F, -/**/ 0xC9800000, 0xBF31E09F, -/**/ 0x134E34BF, 0x3D2FA8E5, -/**/ 0x25D9DFDB, 0x3F31C13B, -/**/ 0x8F400000, 0xBF31C09D, -/**/ 0x477D87DF, 0xBD20FF40, -/**/ 0xB964838C, 0x3F31A136, -/**/ 0x59400000, 0xBF31A09B, -/**/ 0x68B5B77B, 0x3D3E9E3E, -/**/ 0x54F0CE76, 0x3F318132, -/**/ 0x27000000, 0xBF318099, -/**/ 0x906F8A53, 0x3D14BC39, -/**/ 0xF87EBD9A, 0x3F31612D, -/**/ 0xF8C00000, 0xBF316096, -/**/ 0xFCD50724, 0xBD34CC2F, -/**/ 0xA40E4DF7, 0x3F314129, -/**/ 0xCEC00000, 0xBF314094, -/**/ 0x7A3A1B8D, 0x3D30AD83, -/**/ 0x579F7C8B, 0x3F312125, -/**/ 0xA8800000, 0xBF312092, -/**/ 0x057F5C66, 0xBD24C5AE, -/**/ 0x13324657, 0x3F310121, -/**/ 0x86800000, 0xBF310090, -/**/ 0xBFD488E0, 0x3D3A03C0, -/**/ 0xD6C6A858, 0x3F30E11C, -/**/ 0x68400000, 0xBF30E08E, -/**/ 0x56935D63, 0xBD00EDA8, -/**/ 0xA25C9F8F, 0x3F30C118, -/**/ 0x4E000000, 0xBF30C08C, -/**/ 0x2FDDD1CE, 0xBD3EC638, -/**/ 0x75F428FB, 0x3F30A114, -/**/ 0x38000000, 0xBF30A08A, -/**/ 0x0CA3DCBE, 0x3D102CDE, -/**/ 0x518D419B, 0x3F308110, -/**/ 0x25C00000, 0xBF308088, -/**/ 0xBFA78921, 0xBD39A865, -/**/ 0x3527E66D, 0x3F30610C, -/**/ 0x17C00000, 0xBF306086, -/**/ 0x72CE37BD, 0x3D203FE0, -/**/ 0x20C41472, 0x3F304108, -/**/ 0x0D800000, 0xBF304084, -/**/ 0x6054C3FA, 0xBD369AC6, -/**/ 0x1461C8A9, 0x3F302104, -/**/ 0x07800000, 0xBF302082, -/**/ 0x4836293A, 0x3D2450ED, -/**/ 0x10010010, 0x3F300100, -/**/ 0x05400000, 0xBF300080, -/**/ 0x88B3357C, 0xBD359558, -/**/ 0x27436F4F, 0x3F2FC1F8, -/**/ 0x0E800000, 0xBF2FC0FC, -/**/ 0x92ECD4D1, 0x3D245998, -/**/ 0x3E87D8DC, 0x3F2F81F0, -/**/ 0x1A000000, 0xBF2F80F8, -/**/ 0xB592170A, 0xBD36901A, -/**/ 0x65CF36C6, 0x3F2F41E8, -/**/ 0x2E000000, 0xBF2F40F4, -/**/ 0x53524603, 0x3D2069E5, -/**/ 0x9D19830B, 0x3F2F01E0, -/**/ 0x49800000, 0xBF2F00F0, -/**/ 0x69C22240, 0xBD39830B, -/**/ 0xE466B7AB, 0x3F2EC1D8, -/**/ 0x6D800000, 0xBF2EC0EC, -/**/ 0xFB871BBA, 0x3D1123AC, -/**/ 0x3BB6CEA4, 0x3F2E81D1, -/**/ 0x99000000, 0xBF2E80E8, -/**/ 0x2E158AF6, 0xBD3E6629, -/**/ 0xA309C1F4, 0x3F2E41C9, -/**/ 0xCD000000, 0xBF2E40E4, -/**/ 0x2B29884E, 0xBCF8F488, -/**/ 0x1A5F8B99, 0x3F2E01C2, -/**/ 0x09000000, 0xBF2E00E1, -/**/ 0x6EA006C6, 0x3D3ACE8D, -/**/ 0xA1B82593, 0x3F2DC1BA, -/**/ 0x4C800000, 0xBF2DC0DD, -/**/ 0x59D0B687, 0xBD22974E, -/**/ 0x391389E0, 0x3F2D81B3, -/**/ 0x98800000, 0xBF2D80D9, -/**/ 0xD7897CAD, 0x3D322319, -/**/ 0xE071B27F, 0x3F2D41AB, -/**/ 0xEC000000, 0xBF2D40D5, -/**/ 0x57954C6E, 0xBD32E42F, -/**/ 0x97D2996E, 0x3F2D01A4, -/**/ 0x48000000, 0xBF2D00D2, -/**/ 0xC741610E, 0x3D1E7DF5, -/**/ 0x5F3638AB, 0x3F2CC19D, -/**/ 0xAB800000, 0xBF2CC0CE, -/**/ 0xA0909C5A, 0xBD3E50DF, -/**/ 0x369C8A37, 0x3F2C8196, -/**/ 0x17800000, 0xBF2C80CB, -/**/ 0x8D8D1C8F, 0xBD12D119, -/**/ 0x1E05880E, 0x3F2C418F, -/**/ 0x8B800000, 0xBF2C40C7, -/**/ 0x544D2574, 0x3D347649, -/**/ 0x15712C30, 0x3F2C0188, -/**/ 0x07000000, 0xBF2C00C4, -/**/ 0x4EEA9E68, 0xBD32D030, -/**/ 0x1CDF709C, 0x3F2BC181, -/**/ 0x8B000000, 0xBF2BC0C0, -/**/ 0x74A84109, 0x3D15E533, -/**/ 0x34504F50, 0x3F2B817A, -/**/ 0x17000000, 0xBF2B80BD, -/**/ 0x025FBF68, 0x3D3D53C1, -/**/ 0x5BC3C24B, 0x3F2B4173, -/**/ 0xAA800000, 0xBF2B40B9, -/**/ 0x6BAA2FA8, 0xBD267FA7, -/**/ 0x9339C38C, 0x3F2B016C, -/**/ 0x46800000, 0xBF2B00B6, -/**/ 0xBB3FDE1E, 0x3D277F1D, -/**/ 0xDAB24D11, 0x3F2AC165, -/**/ 0xEA000000, 0xBF2AC0B2, -/**/ 0x1A8CDBE2, 0xBD3DAD17, -/**/ 0x322D58D9, 0x3F2A815F, -/**/ 0x96000000, 0xBF2A80AF, -/**/ 0xD81CF36E, 0xBD1E1315, -/**/ 0x99AAE0E3, 0x3F2A4158, -/**/ 0x4A000000, 0xBF2A40AC, -/**/ 0xE649E7B4, 0x3D2C7307, -/**/ 0x112ADF2D, 0x3F2A0152, -/**/ 0x05800000, 0xBF2A00A9, -/**/ 0xB77435EC, 0xBD3C713A, -/**/ 0x98AD4DB7, 0x3F29C14B, -/**/ 0xC9800000, 0xBF29C0A5, -/**/ 0x3A7AE827, 0xBD1E1005, -/**/ 0x3032267F, 0x3F298145, -/**/ 0x95800000, 0xBF2980A2, -/**/ 0xA8F2A842, 0x3D2A0460, -/**/ 0xD7B96385, 0x3F29413E, -/**/ 0x69000000, 0xBF29409F, -/**/ 0xA7B8321E, 0xBD3EDDA5, -/**/ 0x8F42FEC5, 0x3F290138, -/**/ 0x45000000, 0xBF29009C, -/**/ 0x3A3F0D33, 0xBD264506, -/**/ 0x56CEF241, 0x3F28C132, -/**/ 0x29000000, 0xBF28C099, -/**/ 0x33EE13CD, 0x3D206930, -/**/ 0x2E5D37F6, 0x3F28812C, -/**/ 0x15000000, 0xBF288096, -/**/ 0x22DF1FDA, 0x3D3B28AC, -/**/ 0x15EDC9E3, 0x3F284126, -/**/ 0x08800000, 0xBF284093, -/**/ 0xDD73B6DB, 0xBD324546, -/**/ 0x0D80A208, 0x3F280120, -/**/ 0x04800000, 0xBF280090, -/**/ 0x6DFEB485, 0xBCB440C2, -/**/ 0x1515BA62, 0x3F27C11A, -/**/ 0x08800000, 0xBF27C08D, -/**/ 0x9823B19D, 0x3D31BCBE, -/**/ 0x2CAD0CF1, 0x3F278114, -/**/ 0x14000000, 0xBF27808A, -/**/ 0xA9EB4E97, 0xBD3CD148, -/**/ 0x544693B4, 0x3F27410E, -/**/ 0x28000000, 0xBF274087, -/**/ 0xCA4F73AA, 0xBD277AAC, -/**/ 0x8BE248AA, 0x3F270108, -/**/ 0x44000000, 0xBF270084, -/**/ 0x26068EF7, 0x3D13E656, -/**/ 0xD38025D2, 0x3F26C102, -/**/ 0x68000000, 0xBF26C081, -/**/ 0x44C3EC8A, 0x3D35547B, -/**/ 0x2B20252A, 0x3F2680FD, -/**/ 0x93800000, 0xBF26807E, -/**/ 0x110DCE4B, 0xBD3AABA5, -/**/ 0x92C240B1, 0x3F2640F7, -/**/ 0xC7800000, 0xBF26407B, -/**/ 0xAC011956, 0xBD260B96, -/**/ 0x0A667267, 0x3F2600F2, -/**/ 0x03800000, 0xBF260079, -/**/ 0x5DFA826E, 0x3D111C22, -/**/ 0x920CB44A, 0x3F25C0EC, -/**/ 0x47800000, 0xBF25C076, -/**/ 0xD8A2980A, 0x3D333BD6, -/**/ 0x29B5005A, 0x3F2580E7, -/**/ 0x93000000, 0xBF258073, -/**/ 0x71C1D861, 0xBD3E2660, -/**/ 0xD15F5095, 0x3F2540E1, -/**/ 0xE7000000, 0xBF254070, -/**/ 0x4E77E5EE, 0xBD2FBD3A, -/**/ 0x890B9EFA, 0x3F2500DC, -/**/ 0x43000000, 0xBF25006E, -/**/ 0x7B90A2D9, 0xBCFEBDF2, -/**/ 0x50B9E589, 0x3F24C0D7, -/**/ 0xA7000000, 0xBF24C06B, -/**/ 0x58F2FF2C, 0x3D2765B3, -/**/ 0x286A1E40, 0x3F2480D2, -/**/ 0x13000000, 0xBF248069, -/**/ 0x74AE382C, 0x3D38FE8D, -/**/ 0x101C431E, 0x3F2440CD, -/**/ 0x86800000, 0xBF244066, -/**/ 0xB0286224, 0xBD3A07C3, -/**/ 0x07D04E23, 0x3F2400C8, -/**/ 0x02800000, 0xBF240064, -/**/ 0x46EFC0EC, 0xBD2ABE33, -/**/ 0x0F86394D, 0x3F23C0C3, -/**/ 0x86800000, 0xBF23C061, -/**/ 0x70DE3151, 0xBCF06744, -/**/ 0x273DFE9C, 0x3F2380BE, -/**/ 0x12800000, 0xBF23805F, -/**/ 0x05CFCD61, 0x3D260659, -/**/ 0x4EF7980F, 0x3F2340B9, -/**/ 0xA6800000, 0xBF23405C, -/**/ 0xD7DBBEBC, 0x3D36BEC8, -/**/ 0x86B2FFA4, 0x3F2300B4, -/**/ 0x42000000, 0xBF23005A, -/**/ 0x2B2027B4, 0xBD3DD29F, -/**/ 0xCE702F5C, 0x3F22C0AF, -/**/ 0xE6000000, 0xBF22C057, -/**/ 0x6959A7D0, 0xBD32B00B, -/**/ 0x262F2134, 0x3F2280AB, -/**/ 0x92000000, 0xBF228055, -/**/ 0x19FAAC2D, 0xBD1F61EF, -/**/ 0x8DEFCF2C, 0x3F2240A6, -/**/ 0x46000000, 0xBF224053, -/**/ 0xCB16B8A8, 0x3D05A87E, -/**/ 0x05B23344, 0x3F2200A2, -/**/ 0x02000000, 0xBF220051, -/**/ 0x23B9B257, 0x3D29F32F, -/**/ 0x8D76477A, 0x3F21C09D, -/**/ 0xC6000000, 0xBF21C04E, -/**/ 0x7E214821, 0x3D36F61B, -/**/ 0x253C05CD, 0x3F218099, -/**/ 0x91800000, 0xBF21804C, -/**/ 0x46FDFCA2, 0xBD3F5464, -/**/ 0xCD03683D, 0x3F214094, -/**/ 0x65800000, 0xBF21404A, -/**/ 0xA30F2308, 0xBD35E4E7, -/**/ 0x84CC68C9, 0x3F210090, -/**/ 0x41800000, 0xBF210048, -/**/ 0xF800CC34, 0xBD2974DC, -/**/ 0x4C970171, 0x3F20C08C, -/**/ 0x25800000, 0xBF20C046, -/**/ 0xC1006E9D, 0xBD0E9FC5, -/**/ 0x24632C32, 0x3F208088, -/**/ 0x11800000, 0xBF208044, -/**/ 0x078E4438, 0x3D133DE7, -/**/ 0x0C30E30D, 0x3F204084, -/**/ 0x05800000, 0xBF204042, -/**/ 0x15F82A7B, 0x3D2A61D2, -/**/ 0x04002001, 0x3F200080, -/**/ 0x01800000, 0xBF200040, -/**/ 0x3BBB110C, 0x3D355155, -/**/ 0x17A1BA1A, 0x3F1F80F8, -/**/ 0x0B000000, 0xBF1F807C, -/**/ 0x6C520A9B, 0x3D3D31BE, -/**/ 0x47462860, 0x3F1F00F0, -/**/ 0x22000000, 0xBF1F0078, -/**/ 0x4B6D83F6, 0xBD3B2CDB, -/**/ 0x96ED7ED3, 0x3F1E80E8, -/**/ 0x4A000000, 0xBF1E8074, -/**/ 0xD4122C5A, 0xBD33C977, -/**/ 0x0697B172, 0x3F1E00E1, -/**/ 0x82000000, 0xBF1E0070, -/**/ 0x2D1517C4, 0xBD29462E, -/**/ 0x9644B43B, 0x3F1D80D9, -/**/ 0xCA000000, 0xBF1D806C, -/**/ 0xF0952D45, 0xBD16E2E3, -/**/ 0x45F47B2C, 0x3F1D00D2, -/**/ 0x22000000, 0xBF1D0069, -/**/ 0x2DDC2A8D, 0x3CEED452, -/**/ 0x15A6FA46, 0x3F1C80CB, -/**/ 0x8A000000, 0xBF1C8065, -/**/ 0xA08CEBE8, 0x3D1DAFEE, -/**/ 0x055C2585, 0x3F1C00C4, -/**/ 0x02000000, 0xBF1C0062, -/**/ 0xBB11EF55, 0x3D2B50A4, -/**/ 0x1513F0E9, 0x3F1B80BD, -/**/ 0x8A000000, 0xBF1B805E, -/**/ 0xC6D142BF, 0x3D33ACA6, -/**/ 0x44CE5071, 0x3F1B00B6, -/**/ 0x22000000, 0xBF1B005B, -/**/ 0xF8CD3D11, 0x3D3979F8, -/**/ 0x948B381A, 0x3F1A80AF, -/**/ 0xCA000000, 0xBF1A8057, -/**/ 0x07EDFD29, 0x3D3F1149, -/**/ 0x044A9BE5, 0x3F1A00A9, -/**/ 0x81000000, 0xBF1A0054, -/**/ 0xF7BB7092, 0xBD3B8C68, -/**/ 0x940C6FCF, 0x3F1980A2, -/**/ 0x49000000, 0xBF198051, -/**/ 0xF27E09A9, 0xBD365E1C, -/**/ 0x43D0A7D8, 0x3F19009C, -/**/ 0x21000000, 0xBF19004E, -/**/ 0xD508D564, 0xBD3162D2, -/**/ 0x139737FE, 0x3F188096, -/**/ 0x09000000, 0xBF18804B, -/**/ 0x18D5C93E, 0xBD293315, -/**/ 0x03601440, 0x3F180090, -/**/ 0x01000000, 0xBF180048, -/**/ 0x0C26A328, 0xBD200288, -/**/ 0x132B309E, 0x3F17808A, -/**/ 0x09000000, 0xBF178045, -/**/ 0x7E89FD6F, 0xBD0CC7F9, -/**/ 0x42F88115, 0x3F170084, -/**/ 0x21000000, 0xBF170042, -/**/ 0x058494DC, 0x3CE40881, -/**/ 0x92C7F9A5, 0x3F16807E, -/**/ 0x49000000, 0xBF16803F, -/**/ 0xCD5698B9, 0x3D12AE16, -/**/ 0x02998E4D, 0x3F160079, -/**/ 0x81000000, 0xBF16003C, -/**/ 0xC5780E17, 0x3D21138B, -/**/ 0x926D330B, 0x3F158073, -/**/ 0xC9000000, 0xBF158039, -/**/ 0x4E2001E2, 0x3D287809, -/**/ 0x4242DBDF, 0x3F15006E, -/**/ 0x21000000, 0xBF150037, -/**/ 0x21448AA2, 0x3D2F8684, -/**/ 0x121A7CC8, 0x3F148069, -/**/ 0x89000000, 0xBF148034, -/**/ 0x2F637D8E, 0x3D33207E, -/**/ 0x01F409C4, 0x3F140064, -/**/ 0x01000000, 0xBF140032, -/**/ 0x12E44B29, 0x3D3654B9, -/**/ 0x11CF76D3, 0x3F13805F, -/**/ 0x89000000, 0xBF13802F, -/**/ 0xCA5547F3, 0x3D3960F2, -/**/ 0x41ACB7F4, 0x3F13005A, -/**/ 0x21000000, 0xBF13002D, -/**/ 0x6487063D, 0x3D3C462B, -/**/ 0x918BC126, 0x3F128055, -/**/ 0xC9000000, 0xBF12802A, -/**/ 0xEFEA1107, 0x3D3F0562, -/**/ 0x016C8668, 0x3F120051, -/**/ 0x80000000, 0xBF120028, -/**/ 0x857113CE, 0xBD3E6066, -/**/ 0x914EFBBA, 0x3F11804C, -/**/ 0x48000000, 0xBF118026, -/**/ 0xEDD9EB54, 0xBD3BEA30, -/**/ 0x41331519, 0x3F110048, -/**/ 0x20000000, 0xBF110024, -/**/ 0x3BFFFF5A, 0xBD3996FC, -/**/ 0x1118C686, 0x3F108044, -/**/ 0x08000000, 0xBF108022, -/**/ 0x62F2E042, 0xBD3765C8, -/**/ 0x01000400, 0x3F100040, -/**/ 0x00000000, 0xBF100020, -/**/ 0x562224CD, 0xBD355595, -/**/ 0x21D1830C, 0x3F0F0078, -/**/ 0x10000000, 0xBF0F003C, -/**/ 0x095D69EB, 0xBD336563, -/**/ 0x81A5E62E, 0x3F0E0070, -/**/ 0x40000000, 0xBF0E0038, -/**/ 0x70D45290, 0xBD319431, -/**/ 0x217D1965, 0x3F0D0069, -/**/ 0x90000000, 0xBF0D0034, -/**/ 0x022D0EF6, 0xBD2FC201, -/**/ 0x015704B1, 0x3F0C0062, -/**/ 0x00000000, 0xBF0C0031, -/**/ 0x5E276E21, 0xBD2C95A0, -/**/ 0x2133900E, 0x3F0B005B, -/**/ 0x90000000, 0xBF0B002D, -/**/ 0xE0372A42, 0xBD29A140, -/**/ 0x8112A37D, 0x3F0A0054, -/**/ 0x40000000, 0xBF0A002A, -/**/ 0x73BBB580, 0xBD26E2E2, -/**/ 0x20F426FB, 0x3F09004E, -/**/ 0x10000000, 0xBF090027, -/**/ 0x04D48C20, 0xBD245885, -/**/ 0x00D80288, 0x3F080048, -/**/ 0x00000000, 0xBF080024, -/**/ 0x80613426, 0xBD220028, -/**/ 0x20BE1E23, 0x3F070042, -/**/ 0x10000000, 0xBF070021, -/**/ 0xA80279F3, 0xBD1FAF99, -/**/ 0x80A661CA, 0x3F06003C, -/**/ 0x40000000, 0xBF06001E, -/**/ 0xDC287DFE, 0xBD1BBAE3, -/**/ 0x2090B57C, 0x3F050037, -/**/ 0x90000000, 0xBF05001B, -/**/ 0x7B73B67C, 0xBD181E2F, -/**/ 0x007D0139, 0x3F040032, -/**/ 0x00000000, 0xBF040019, -/**/ 0x65A375F8, 0xBD14D57C, -/**/ 0x206B2CFF, 0x3F03002D, -/**/ 0x90000000, 0xBF030016, -/**/ 0x7BF71EC1, 0xBD11DCCA, -/**/ 0x805B20CD, 0x3F020028, -/**/ 0x40000000, 0xBF020014, -/**/ 0x425C4447, 0xBD0E6033, -/**/ 0x204CC4A3, 0x3F010024, -/**/ 0x10000000, 0xBF010012, -/**/ 0x730FFF5C, 0xBD0996D3, -/**/ 0x00400080, 0x3F000020, -/**/ 0x00000000, 0xBF000010, -/**/ 0x558888DE, 0xBD055575, -/**/ 0x406978C6, 0x3EFE0038, -/**/ 0x20000000, 0xBEFE001C, -/**/ 0xB845146A, 0xBD019418, -/**/ 0x0055C096, 0x3EFC0031, -/**/ 0x80000000, 0xBEFC0018, -/**/ 0xD989DB3C, 0xBCFC957A, -/**/ 0x4044A870, 0x3EFA002A, -/**/ 0x20000000, 0xBEFA0015, -/**/ 0x8F0EED2F, 0xBCF6E2C6, -/**/ 0x00360051, 0x3EF80024, -/**/ 0x00000000, 0xBEF80012, -/**/ 0x40184CEB, 0xBCF20014, -/**/ 0x40299839, 0x3EF6001E, -/**/ 0x20000000, 0xBEF6000F, -/**/ 0x434A1F5C, 0xBCEBBAC7, -/**/ 0x001F4027, 0x3EF40019, -/**/ 0x80000000, 0xBEF4000C, -/**/ 0xDD68DD6A, 0xBCE4D568, -/**/ 0x4016C81A, 0x3EF20014, -/**/ 0x20000000, 0xBEF2000A, -/**/ 0xA11710FC, 0xBCDE6019, -/**/ 0x00100010, 0x3EF00010, -/**/ 0x00000000, 0xBEF00008, -/**/ 0x5562222D, 0xBCD55565, -/**/ 0x80157013, 0x3EEC0018, -/**/ 0x40000000, 0xBEEC000C, -/**/ 0x176276C5, 0xBCCC9568, -/**/ 0x000D800A, 0x3EE80012, -/**/ 0x00000000, 0xBEE80009, -/**/ 0x20061337, 0xBCC2000A, -/**/ 0x8007D005, 0x3EE4000C, -/**/ 0x40000000, 0xBEE40006, -/**/ 0x195A3758, 0xBCB4D55F, -/**/ 0x00040002, 0x3EE00008, -/**/ 0x00000000, 0xBEE00004, -/**/ 0x5558888A, 0xBCA5555D, -/**/ 0x00036001, 0x3ED80009, -/**/ 0x80000000, 0xBED80004, -/**/ 0x100184CD, 0xBC920005, -/**/ 0x00010000, 0x3ED00004, -/**/ 0x00000000, 0xBED00002, -/**/ 0x55562222, 0xBC755559, -/**/ 0x00004000, 0x3EC00002, -/**/ 0x00000000, 0xBEC00001, -/**/ 0x55558889, 0xBC455557, -/**/ 0x00000000, 0x00000000, -/**/ 0x00000000, 0x00000000, -/**/ 0x00000000, 0x00000000, -/**/ 0x00008000, 0xBEBFFFFC, -/**/ 0x00000000, 0x3EBFFFFE, -/**/ 0x55558889, 0x3C455553, -/**/ 0x00020000, 0xBECFFFF8, -/**/ 0x00000000, 0x3ECFFFFC, -/**/ 0x55562222, 0x3C755551, -/**/ 0x00035FFF, 0xBED7FFF7, -/**/ 0x80000000, 0x3ED7FFFB, -/**/ 0xF00184CC, 0x3C91FFFA, -/**/ 0x0007FFFC, 0xBEDFFFF0, -/**/ 0x00000000, 0x3EDFFFF8, -/**/ 0x55588887, 0x3CA5554D, -/**/ 0x8007CFFB, 0xBEE3FFF3, -/**/ 0xC0000000, 0x3EE3FFF9, -/**/ 0x915A3753, 0x3CB4D54B, -/**/ 0x000D7FF6, 0xBEE7FFEE, -/**/ 0x00000000, 0x3EE7FFF7, -/**/ 0xE006132F, 0x3CC1FFF5, -/**/ 0x80156FED, 0xBEEBFFE7, -/**/ 0xC0000000, 0x3EEBFFF3, -/**/ 0x936276B2, 0x3CCC9542, -/**/ 0x001FFFE0, 0xBEEFFFE0, -/**/ 0x00000000, 0x3EEFFFF0, -/**/ 0x55622217, 0x3CD55545, -/**/ 0xC016C7E6, 0xBEF1FFEB, -/**/ 0xE0000000, 0x3EF1FFF5, -/**/ 0x5F1710D1, 0x3CDE5FE6, -/**/ 0x001F3FD9, 0xBEF3FFE7, -/**/ 0x80000000, 0x3EF3FFF3, -/**/ 0xCD68DD41, 0x3CE4D541, -/**/ 0xC02997C7, 0xBEF5FFE1, -/**/ 0xE0000000, 0x3EF5FFF0, -/**/ 0x124A1F13, 0x3CEBBA8E, -/**/ 0x0035FFAF, 0xBEF7FFDC, -/**/ 0x00000000, 0x3EF7FFEE, -/**/ 0xC0184CAE, 0x3CF1FFEB, -/**/ 0xC044A790, 0xBEF9FFD5, -/**/ 0xE0000000, 0x3EF9FFEA, -/**/ 0xC68EECCD, 0x3CF6E28E, -/**/ 0x0055BF6A, 0xBEFBFFCF, -/**/ 0x80000000, 0x3EFBFFE7, -/**/ 0xD189DAA2, 0x3CFC952F, -/**/ 0xC069773A, 0xBEFDFFC7, -/**/ 0xE0000000, 0x3EFDFFE3, -/**/ 0x480513F6, 0x3D0193E7, -/**/ 0x007FFF00, 0xBEFFFFC0, -/**/ 0x00000000, 0x3EFFFFE0, -/**/ 0x55888833, 0x3D055535, -/**/ 0xE04CC35D, 0xBF00FFDB, -/**/ 0xF0000000, 0x3F00FFED, -/**/ 0xE2CFFE66, 0x3D099681, -/**/ 0x805B1F33, 0xBF01FFD7, -/**/ 0xC0000000, 0x3F01FFEB, -/**/ 0xBE5C42ED, 0x3D0E5FCC, -/**/ 0xE06B2B01, 0xBF02FFD2, -/**/ 0x70000000, 0x3F02FFE9, -/**/ 0xD9D71DD1, 0x3D11DC8A, -/**/ 0x007CFEC8, 0xBF03FFCE, -/**/ 0x00000000, 0x3F03FFE7, -/**/ 0x45A374B3, 0x3D14D52E, -/**/ 0xE090B284, 0xBF04FFC8, -/**/ 0x70000000, 0x3F04FFE4, -/**/ 0x8553B4C7, 0x3D181DD0, -/**/ 0x80A65E36, 0xBF05FFC3, -/**/ 0xC0000000, 0x3F05FFE1, -/**/ 0x7A287BBE, 0x3D1BBA71, -/**/ 0xE0BE19DD, 0xBF06FFBD, -/**/ 0xF0000000, 0x3F06FFDE, -/**/ 0x03E27702, 0x3D1FAF11, -/**/ 0x00D7FD78, 0xBF07FFB8, -/**/ 0x00000000, 0x3F07FFDC, -/**/ 0x80613240, 0x3D21FFD7, -/**/ 0xE0F42105, 0xBF08FFB1, -/**/ 0xF0000000, 0x3F08FFD8, -/**/ 0xA6C489B3, 0x3D245825, -/**/ 0x81129C84, 0xBF09FFAB, -/**/ 0xC0000000, 0x3F09FFD5, -/**/ 0xE2BBB26F, 0x3D26E272, -/**/ 0xE13387F2, 0xBF0AFFA4, -/**/ 0x70000000, 0x3F0AFFD2, -/**/ 0x21272669, 0x3D29A0BF, -/**/ 0x0156FB50, 0xBF0BFF9E, -/**/ 0x00000000, 0x3F0BFFCF, -/**/ 0x4E276957, 0x3D2C950A, -/**/ 0xE17D0E9B, 0xBF0CFF96, -/**/ 0x70000000, 0x3F0CFFCB, -/**/ 0x551D090E, 0x3D2FC154, -/**/ 0x81A5D9D2, 0xBF0DFF8F, -/**/ 0xC0000000, 0x3F0DFFC7, -/**/ 0x90544EF1, 0x3D3193CE, -/**/ 0xE1D174F4, 0xBF0EFF87, -/**/ 0xF0000000, 0x3F0EFFC3, -/**/ 0x4D556583, 0x3D3364F2, -/**/ 0x01FFF800, 0xBF0FFF80, -/**/ 0x00000000, 0x3F0FFFC0, -/**/ 0x56221F78, 0x3D355515, -/**/ 0xF118BD7A, 0xBF107FBB, -/**/ 0xF8000000, 0x3F107FDD, -/**/ 0x9EEAD9D8, 0x3D376537, -/**/ 0xC1330AE7, 0xBF10FFB7, -/**/ 0xE0000000, 0x3F10FFDB, -/**/ 0x1B7FF7AE, 0x3D399659, -/**/ 0x714EF047, 0xBF117FB3, -/**/ 0xB8000000, 0x3F117FD9, -/**/ 0xBF51E233, 0x3D3BE979, -/**/ 0x016C7998, 0xBF11FFAF, -/**/ 0x80000000, 0x3F11FFD7, -/**/ 0x7D7108FF, 0x3D3E5F99, -/**/ 0x718BB2DA, 0xBF127FAA, -/**/ 0x39000000, 0x3F127FD5, -/**/ 0xB7721DC6, 0xBD3F0647, -/**/ 0xC1ACA80C, 0xBF12FFA5, -/**/ 0xE1000000, 0x3F12FFD2, -/**/ 0xED071532, 0xBD3C4729, -/**/ 0xF1CF652D, 0xBF137FA0, -/**/ 0x79000000, 0x3F137FD0, -/**/ 0x315D596D, 0xBD39620D, -/**/ 0x01F3F63C, 0xBF13FF9C, -/**/ 0x01000000, 0x3F13FFCE, -/**/ 0x92E45F81, 0xBD3655F1, -/**/ 0xF21A6739, 0xBF147F96, -/**/ 0x79000000, 0x3F147FCB, -/**/ 0x206B9526, 0xBD3321D7, -/**/ 0xC242C421, 0xBF14FF91, -/**/ 0xE1000000, 0x3F14FFC8, -/**/ 0xD244C12A, 0xBD2F897B, -/**/ 0x726D18F6, 0xBF157F8C, -/**/ 0x39000000, 0x3F157FC6, -/**/ 0xF93040AE, 0xBD287B4B, -/**/ 0x029971B4, 0xBF15FF87, -/**/ 0x81000000, 0x3F15FFC3, -/**/ 0xD578562C, 0xBD21171E, -/**/ 0x72C7DA5C, 0xBF167F81, -/**/ 0xB9000000, 0x3F167FC0, -/**/ 0x0F773DB4, 0xBD12B5E9, -/**/ 0xC2F85EEC, 0xBF16FF7B, -/**/ 0xE1000000, 0x3F16FFBD, -/**/ 0x158A76C2, 0xBCE44CD3, -/**/ 0xF32B0B63, 0xBF177F75, -/**/ 0xF9000000, 0x3F177FBA, -/**/ 0x2E48511B, 0x3D0CB55C, -/**/ 0x035FEBC0, 0xBF17FF70, -/**/ 0x01000000, 0x3F17FFB8, -/**/ 0x184C534F, 0x3D1FFAF0, -/**/ 0xF3970C03, 0xBF187F69, -/**/ 0xF9000000, 0x3F187FB4, -/**/ 0xACC53FBE, 0x3D292D95, -/**/ 0xC3D07829, 0xBF18FF63, -/**/ 0xE1000000, 0x3F18FFB1, -/**/ 0xE48887C8, 0x3D315FD7, -/**/ 0x740C3C32, 0xBF197F5D, -/**/ 0xB9000000, 0x3F197FAE, -/**/ 0x1DF5B242, 0x3D365AE3, -/**/ 0x044A641C, 0xBF19FF57, -/**/ 0x81000000, 0x3F19FFAB, -/**/ 0x6FBB0E5F, 0x3D3B88EC, -/**/ 0x748AFBE7, 0xBF1A7F50, -/**/ 0x3A000000, 0x3F1A7FA8, -/**/ 0x39766B40, 0xBD3F150C, -/**/ 0xC4CE0F91, 0xBF1AFF49, -/**/ 0xE2000000, 0x3F1AFFA4, -/**/ 0xF14DB839, 0xBD397E06, -/**/ 0xF513AB19, 0xBF1B7F42, -/**/ 0x7A000000, 0x3F1B7FA1, -/**/ 0xCBD9CC3D, 0xBD33B103, -/**/ 0x055BDA7D, 0xBF1BFF3C, -/**/ 0x02000000, 0x3F1BFF9E, -/**/ 0xBB1321B5, 0xBD2B5A05, -/**/ 0xF5A6A9BD, 0xBF1C7F34, -/**/ 0x7A000000, 0x3F1C7F9A, -/**/ 0xECAF9551, 0xBD1DC410, -/**/ 0xC5F424D6, 0xBF1CFF2D, -/**/ 0xE2000000, 0x3F1CFF96, -/**/ 0x3DF3CD68, 0xBCEF80FF, -/**/ 0x764457C8, 0xBF1D7F26, -/**/ 0x3A000000, 0x3F1D7F93, -/**/ 0x4271E737, 0x3D16CBC7, -/**/ 0x06974E91, 0xBF1DFF1F, -/**/ 0x82000000, 0x3F1DFF8F, -/**/ 0x1D134848, 0x3D2939D2, -/**/ 0x76ED1530, 0xBF1E7F17, -/**/ 0xBA000000, 0x3F1E7F8B, -/**/ 0xA9892C73, 0x3D33C2DD, -/**/ 0xC745B7A4, 0xBF1EFF0F, -/**/ 0xE2000000, 0x3F1EFF87, -/**/ 0x8AEC69D5, 0x3D3B25CF, -/**/ 0xF7A141EA, 0xBF1F7F07, -/**/ 0xFB000000, 0x3F1F7F83, -/**/ 0x645B412A, 0xBD3D3941, -/**/ 0x07FFC002, 0xBF1FFF00, -/**/ 0x03000000, 0x3F1FFF80, -/**/ 0x3BBC6662, 0xBD355955, -/**/ 0xFC309EF5, 0xBF203F7B, -/**/ 0xFD800000, 0x3F203FBD, -/**/ 0x260B17B3, 0xBD2A72D8, -/**/ 0xE462E3D0, 0xBF207F77, -/**/ 0xF1800000, 0x3F207FBB, -/**/ 0x0994AE68, 0xBD136218, -/**/ 0xBC96B492, 0xBF20BF73, -/**/ 0xDD800000, 0x3F20BFB9, -/**/ 0xECB2641F, 0x3D0E52E6, -/**/ 0x84CC1739, 0xBF20FF6F, -/**/ 0xC1800000, 0x3F20FFB7, -/**/ 0xE7FCF60B, 0x3D296078, -/**/ 0x3D0311C6, 0xBF213F6B, -/**/ 0x9D800000, 0x3F213FB5, -/**/ 0xA7850AFF, 0x3D35DA18, -/**/ 0xE53BAA36, 0xBF217F66, -/**/ 0x71800000, 0x3F217FB3, -/**/ 0x5E7BB444, 0x3D3F48F1, -/**/ 0x7D75E68A, 0xBF21BF62, -/**/ 0x3E000000, 0x3F21BFB1, -/**/ 0x812BC469, 0xBD370239, -/**/ 0x05B1CCC0, 0xBF21FF5E, -/**/ 0x02000000, 0x3F21FFAF, -/**/ 0x23BF1A4D, 0xBD2A0CD0, -/**/ 0x7DEF62D8, 0xBF223F59, -/**/ 0xBE000000, 0x3F223FAC, -/**/ 0x736E3623, 0xBD0614D3, -/**/ 0xE62EAED0, 0xBF227F54, -/**/ 0x72000000, 0x3F227FAA, -/**/ 0x37EDEDB0, 0x3D1F28BD, -/**/ 0x3E6FB6A9, 0xBF22BF50, -/**/ 0x1E000000, 0x3F22BFA8, -/**/ 0x07CE33C8, 0x3D32A0F5, -/**/ 0x86B28060, 0xBF22FF4B, -/**/ 0xC2000000, 0x3F22FFA5, -/**/ 0xA31C6A8D, 0x3D3DC2B6, -/**/ 0xBEF711F6, 0xBF233F46, -/**/ 0x5E800000, 0x3F233FA3, -/**/ 0xFC67C9FB, 0xBD36CF8B, -/**/ 0xE73D7169, 0xBF237F41, -/**/ 0xF2800000, 0x3F237FA0, -/**/ 0xE6D88A89, 0xBD2629A5, -/**/ 0xFF85A4B8, 0xBF23BF3C, -/**/ 0x7E800000, 0x3F23BF9E, -/**/ 0x202574EC, 0x3CEE7C34, -/**/ 0x07CFB1E3, 0xBF23FF38, -/**/ 0x02800000, 0x3F23FF9C, -/**/ 0x46E594C1, 0x3D2A9723, -/**/ 0x001B9EE8, 0xBF243F33, -/**/ 0x7E800000, 0x3F243F99, -/**/ 0xF61AE74C, 0x3D39F33C, -/**/ 0xE86971C7, 0xBF247F2D, -/**/ 0xF3000000, 0x3F247F96, -/**/ 0x85341E31, 0xBD39141C, -/**/ 0xC0B9307F, 0xBF24BF28, -/**/ 0x5F000000, 0x3F24BF94, -/**/ 0xDA0FAF09, 0xBD2792F5, -/**/ 0x890AE10E, 0xBF24FF23, -/**/ 0xC3000000, 0x3F24FF91, -/**/ 0xFB239430, 0x3CFD4219, -/**/ 0x415E8974, 0xBF253F1E, -/**/ 0x1F000000, 0x3F253F8F, -/**/ 0x0359434A, 0x3D2F8B72, -/**/ 0xE9B42FAF, 0xBF257F18, -/**/ 0x73000000, 0x3F257F8C, -/**/ 0x1939FEDF, 0x3D3E0C4B, -/**/ 0x820BD9BF, 0xBF25BF13, -/**/ 0xBF800000, 0x3F25BF89, -/**/ 0x39B301E2, 0xBD335728, -/**/ 0x0A658DA3, 0xBF25FF0E, -/**/ 0x03800000, 0x3F25FF87, -/**/ 0x5E1E8D4F, 0xBD118E84, -/**/ 0x82C15159, 0xBF263F08, -/**/ 0x3F800000, 0x3F263F84, -/**/ 0xBDDDD045, 0x3D25CFC0, -/**/ 0xEB1F2AE1, 0xBF267F02, -/**/ 0x73800000, 0x3F267F81, -/**/ 0x08837E99, 0x3D3A8C5C, -/**/ 0x437F203A, 0xBF26BEFD, -/**/ 0xA0000000, 0x3F26BF7E, -/**/ 0x3C56F12D, 0xBD35752E, -/**/ 0x8BE13762, 0xBF26FEF7, -/**/ 0xC4000000, 0x3F26FF7B, -/**/ 0x46359E28, 0xBD146EFA, -/**/ 0xC4457659, 0xBF273EF1, -/**/ 0xE0000000, 0x3F273F78, -/**/ 0xCD265865, 0x3D273355, -/**/ 0xECABE31C, 0xBF277EEB, -/**/ 0xF4000000, 0x3F277F75, -/**/ 0x095DEBF8, 0x3D3CAC0E, -/**/ 0x051483AC, 0xBF27BEE6, -/**/ 0x00800000, 0x3F27BF73, -/**/ 0x4C39F4DB, 0xBD31E395, -/**/ 0x0D7F5E08, 0xBF27FEE0, -/**/ 0x04800000, 0x3F27FF70, -/**/ 0xA1314B81, 0xBCB43F3D, -/**/ 0x05EC782D, 0xBF283EDA, -/**/ 0x00800000, 0x3F283F6D, -/**/ 0x115B8D70, 0x3D321B10, -/**/ 0xEE5BD81B, 0xBF287ED3, -/**/ 0xF5000000, 0x3F287F69, -/**/ 0x83704FE1, 0xBD3B54A7, -/**/ 0xC6CD83D1, 0xBF28BECD, -/**/ 0xE1000000, 0x3F28BF66, -/**/ 0x41229C91, 0xBD20C4CC, -/**/ 0x8F41814D, 0xBF28FEC7, -/**/ 0xC5000000, 0x3F28FF63, -/**/ 0x2A183F17, 0x3D25E5A8, -/**/ 0x47B7D68F, 0xBF293EC1, -/**/ 0xA1000000, 0x3F293F60, -/**/ 0xF81B997D, 0x3D3EAC06, -/**/ 0xF0308995, 0xBF297EBA, -/**/ 0x75800000, 0x3F297F5D, -/**/ 0x3A1E5BAD, 0xBD2A6B9B, -/**/ 0x88ABA05E, 0xBF29BEB4, -/**/ 0x41800000, 0x3F29BF5A, -/**/ 0xBDFE3C77, 0x3D1D3958, -/**/ 0x112920E9, 0xBF29FEAE, -/**/ 0x05800000, 0x3F29FF57, -/**/ 0x375BA904, 0x3D3C3972, -/**/ 0x89A91135, 0xBF2A3EA7, -/**/ 0xC2000000, 0x3F2A3F53, -/**/ 0x588DE85B, 0xBD2CE6F3, -/**/ 0xF22B7740, 0xBF2A7EA0, -/**/ 0x76000000, 0x3F2A7F50, -/**/ 0x75AEDBFD, 0x3D1D2249, -/**/ 0x4AB05909, 0xBF2ABE9A, -/**/ 0x22000000, 0x3F2ABF4D, -/**/ 0x2CE7BDAC, 0x3D3D6E96, -/**/ 0x9337BC90, 0xBF2AFE93, -/**/ 0xC6800000, 0x3F2AFF49, -/**/ 0xCB7D724C, 0xBD2800DC, -/**/ 0xCBC1A7D1, 0xBF2B3E8C, -/**/ 0x62800000, 0x3F2B3F46, -/**/ 0xFA591B29, 0x3D25F908, -/**/ 0xF44E20CE, 0xBF2B7E85, -/**/ 0xF7000000, 0x3F2B7F42, -/**/ 0x53021ED8, 0xBD3D9991, -/**/ 0x0CDD2D83, 0xBF2BBE7F, -/**/ 0x83000000, 0x3F2BBF3F, -/**/ 0xFD596AD6, 0xBD1706BF, -/**/ 0x156ED3F0, 0xBF2BFE78, -/**/ 0x07000000, 0x3F2BFF3C, -/**/ 0x4EC45253, 0x3D328528, -/**/ 0x0E031A14, 0xBF2C3E71, -/**/ 0x83800000, 0x3F2C3F38, -/**/ 0x927D8A9E, 0xBD34C408, -/**/ 0xF69A05ED, 0xBF2C7E69, -/**/ 0xF7800000, 0x3F2C7F34, -/**/ 0xCAE2C25F, 0x3D118EF4, -/**/ 0xCF339D7A, 0xBF2CBE62, -/**/ 0x63800000, 0x3F2CBF31, -/**/ 0x73DBBB41, 0x3D3DFD79, -/**/ 0x97CFE6B9, 0xBF2CFE5B, -/**/ 0xC8000000, 0x3F2CFF2D, -/**/ 0xE7FE77E6, 0xBD1FD74F, -/**/ 0x506EE7AA, 0xBF2D3E54, -/**/ 0x24000000, 0x3F2D3F2A, -/**/ 0xBDDB871F, 0x3D328AD4, -/**/ 0xF910A64A, 0xBF2D7E4C, -/**/ 0x78800000, 0x3F2D7F26, -/**/ 0x903DDD81, 0xBD327F8C, -/**/ 0x91B52899, 0xBF2DBE45, -/**/ 0xC4800000, 0x3F2DBF22, -/**/ 0xDF52840A, 0x3D21D80F, -/**/ 0x1A5C7495, 0xBF2DFE3E, -/**/ 0x09000000, 0x3F2DFF1F, -/**/ 0xEED9F651, 0xBD3B316D, -/**/ 0x9306903D, 0xBF2E3E36, -/**/ 0x45000000, 0x3F2E3F1B, -/**/ 0x76DB3C6B, 0x3CF2911A, -/**/ 0xFBB3818F, 0xBF2E7E2E, -/**/ 0x79000000, 0x3F2E7F17, -/**/ 0x85559113, 0x3D3DFC86, -/**/ 0x54634E89, 0xBF2EBE27, -/**/ 0xA5800000, 0x3F2EBF13, -/**/ 0x0AB3DBE7, 0xBD12D83E, -/**/ 0x9D15FD2B, 0xBF2EFE1F, -/**/ 0xC9800000, 0x3F2EFF0F, -/**/ 0x617B99F1, 0x3D39124F, -/**/ 0xD5CB9373, 0xBF2F3E17, -/**/ 0xE6000000, 0x3F2F3F0B, -/**/ 0xF8F64DA1, 0xBD2152B9, -/**/ 0xFE841760, 0xBF2F7E0F, -/**/ 0xFA000000, 0x3F2F7F07, -/**/ 0x34C4735B, 0x3D3617EB, -/**/ 0x173F8EEF, 0xBF2FBE08, -/**/ 0x06800000, 0x3F2FBF04, -/**/ 0x739FA712, 0xBD2551B0, -/**/ 0x1FFE0020, 0xBF2FFE00, -/**/ 0x0A800000, 0x3F2FFF00, -/**/ 0x885DE027, 0x3D351558, -/**/ 0x0C5FB879, 0xBF301EFC, -/**/ 0x03800000, 0x3F301F7E, -/**/ 0x68F8FC50, 0xBD255905, -/**/ 0x00C1F3B0, 0xBF303EF8, -/**/ 0xFD800000, 0x3F303F7B, -/**/ 0xDF771CF4, 0x3D361295, -/**/ 0xED25B4B7, 0xBF305EF3, -/**/ 0xF3C00000, 0x3F305F79, -/**/ 0xD8A255DB, 0xBD2158BB, -/**/ 0xD18AFE8B, 0xBF307EEF, -/**/ 0xE5C00000, 0x3F307F77, -/**/ 0xB740E625, 0x3D3917A1, -/**/ 0xADF1D42C, 0xBF309EEB, -/**/ 0xD4000000, 0x3F309F75, -/**/ 0x9C716D59, 0xBD1281AD, -/**/ 0x825A3899, 0xBF30BEE7, -/**/ 0xBE000000, 0x3F30BF73, -/**/ 0x86ED7DDC, 0x3D3E2C7A, -/**/ 0x4EC42ED1, 0xBF30DEE3, -/**/ 0xA4400000, 0x3F30DF71, -/**/ 0xF54F7E28, 0x3CF7F534, -/**/ 0x132FB9D5, 0xBF30FEDF, -/**/ 0x86800000, 0x3F30FF6F, -/**/ 0x404F4E01, 0xBD3AA6E1, -/**/ 0xCF9CDCA2, 0xBF311EDA, -/**/ 0x64800000, 0x3F311F6D, -/**/ 0x4A6EC981, 0x3D2375B9, -/**/ 0x840B9A38, 0xBF313ED6, -/**/ 0x3EC00000, 0x3F313F6B, -/**/ 0x33401DD0, 0xBD315A73, -/**/ 0x307BF596, 0xBF315ED2, -/**/ 0x14C00000, 0x3F315F69, -/**/ 0x02C11605, 0x3D341A2F, -/**/ 0xD4EDF1BC, 0xBF317ECD, -/**/ 0xE7000000, 0x3F317F66, -/**/ 0xB2B7E8C5, 0xBD1798F3, -/**/ 0x716191A8, 0xBF319EC9, -/**/ 0xB5400000, 0x3F319F64, -/**/ 0x35D62ED5, 0xBD3F5AB7, -/**/ 0x05D6D85A, 0xBF31BEC5, -/**/ 0x7F400000, 0x3F31BF62, -/**/ 0xCA7EC7CD, 0x3D1EF6FF, -/**/ 0x924DC8D2, 0xBF31DEC0, -/**/ 0x45800000, 0x3F31DF60, -/**/ 0xA8550396, 0xBD309BD7, -/**/ 0x16C6660D, 0xBF31FEBC, -/**/ 0x07800000, 0x3F31FF5E, -/**/ 0xC3E31F70, 0x3D379981, -/**/ 0x9340B30B, 0xBF321EB7, -/**/ 0xC5C00000, 0x3F321F5B, -/**/ 0x5FE92B94, 0x3CD7B300, -/**/ 0x07BCB2CC, 0xBF323EB3, -/**/ 0x80000000, 0x3F323F59, -/**/ 0x25A7CF34, 0xBD364AF9, -/**/ 0x743A684F, 0xBF325EAE, -/**/ 0x36000000, 0x3F325F57, -/**/ 0x17E48399, 0x3D339D32, -/**/ 0xD8B9D692, 0xBF327EA9, -/**/ 0xE8400000, 0x3F327F54, -/**/ 0xCC387BD1, 0xBCFE7B27, -/**/ 0x353B0095, 0xBF329EA5, -/**/ 0x96800000, 0x3F329F52, -/**/ 0x1AE7FA80, 0xBD36D8A7, -/**/ 0x89BDE957, 0xBF32BEA0, -/**/ 0x40800000, 0x3F32BF50, -/**/ 0x05CF3DC3, 0x3D34CB54, -/**/ 0xD64293D7, 0xBF32DE9B, -/**/ 0xE6C00000, 0x3F32DF4D, -/**/ 0xD5A4F691, 0x3CF053EA, -/**/ 0x1AC90315, 0xBF32FE97, -/**/ 0x89000000, 0x3F32FF4B, -/**/ 0x5CAE7B16, 0xBD3229E7, -/**/ 0x57513A0F, 0xBF331E92, -/**/ 0x27000000, 0x3F331F49, -/**/ 0xAEED4509, 0x3D3B3EE1, -/**/ 0x8BDB3BC4, 0xBF333E8D, -/**/ 0xC1400000, 0x3F333F46, -/**/ 0x2E0C2605, 0x3D228133, -/**/ 0xB8670B34, 0xBF335E88, -/**/ 0x57800000, 0x3F335F44, -/**/ 0xBBD6E280, 0xBD20477F, -/**/ 0xDCF4AB5D, 0xBF337E83, -/**/ 0xE9C00000, 0x3F337F41, -/**/ 0xE9CE8AFC, 0xBD38ED2A, -/**/ 0xF9841F3F, 0xBF339E7E, -/**/ 0x77C00000, 0x3F339F3F, -/**/ 0x39159F9B, 0x3D36E558, -/**/ 0x0E1569D9, 0xBF33BE7A, -/**/ 0x02000000, 0x3F33BF3D, -/**/ 0x40681634, 0x3D1D5325, -/**/ 0x1AA88E2A, 0xBF33DE75, -/**/ 0x88400000, 0x3F33DF3A, -/**/ 0x7F2112CE, 0xBD1E775F, -/**/ 0x1F3D8F31, 0xBF33FE70, -/**/ 0x0A800000, 0x3F33FF38, -/**/ 0x91F80D1B, 0xBD35F18B, -/**/ 0x1BD46FED, 0xBF341E6B, -/**/ 0x88800000, 0x3F341F35, -/**/ 0xFDC3FC2F, 0x3D3C5AAD, -/**/ 0x106D335D, 0xBF343E66, -/**/ 0x02C00000, 0x3F343F33, -/**/ 0x268A89F1, 0x3D2E8FA9, -/**/ 0xFD07DC80, 0xBF345E60, -/**/ 0x79000000, 0x3F345F30, -/**/ 0x902AC9EE, 0x3D06B73F, -/**/ 0xE1A46E55, 0xBF347E5B, -/**/ 0xEB400000, 0x3F347F2D, -/**/ 0x45C43959, 0xBD21EE30, -/**/ 0xBE42EBDC, 0xBF349E56, -/**/ 0x59800000, 0x3F349F2B, -/**/ 0xE8B753E8, 0xBD34212B, -/**/ 0x92E35813, 0xBF34BE51, -/**/ 0xC3C00000, 0x3F34BF28, -/**/ 0x9D2064DB, 0xBD3EA653, -/**/ 0x5F85B5F9, 0xBF34DE4C, -/**/ 0x29C00000, 0x3F34DF26, -/**/ 0x81DCB6FB, 0x3D377A70, -/**/ 0x242A088D, 0xBF34FE47, -/**/ 0x8C000000, 0x3F34FF23, -/**/ 0x6BB44A6D, 0x3D2C8440, -/**/ 0xE0D052CF, 0xBF351E41, -/**/ 0xEA400000, 0x3F351F20, -/**/ 0x0048AAF8, 0x3D16C6ED, -/**/ 0x957897BD, 0xBF353E3C, -/**/ 0x44800000, 0x3F353F1E, -/**/ 0xF506A07E, 0xBD01ADF4, -/**/ 0x4222DA57, 0xBF355E37, -/**/ 0x9AC00000, 0x3F355F1B, -/**/ 0x4B88A655, 0xBD22E69B, -/**/ 0xE6CF1D9B, 0xBF357E31, -/**/ 0xED000000, 0x3F357F18, -/**/ 0x153DAEB0, 0xBD3005F2, -/**/ 0x837D6488, 0xBF359E2C, -/**/ 0x3B400000, 0x3F359F16, -/**/ 0x2D5222B4, 0xBD35ECAC, -/**/ 0x182DB21E, 0xBF35BE27, -/**/ 0x85800000, 0x3F35BF13, -/**/ 0x2EA6CB14, 0xBD3B267C, -/**/ 0xA4E0095B, 0xBF35DE21, -/**/ 0xCBC00000, 0x3F35DF10, -/**/ 0x5A40A340, 0xBD3FB262, -/**/ 0x29946D3F, 0xBF35FE1C, -/**/ 0x0DC00000, 0x3F35FF0E, -/**/ 0x0E7B79ED, 0x3D3C70A1, -/**/ 0xA64AE0C7, 0xBF361E16, -/**/ 0x4C000000, 0x3F361F0B, -/**/ 0xC9C8D263, 0x3D39438D, -/**/ 0x1B0366F4, 0xBF363E11, -/**/ 0x86400000, 0x3F363F08, -/**/ 0x9582CD0C, 0x3D36C763, -/**/ 0x87BE02C5, 0xBF365E0B, -/**/ 0xBC800000, 0x3F365F05, -/**/ 0x2F24F1F9, 0x3D34FD22, -/**/ 0xEC7AB737, 0xBF367E05, -/**/ 0xEEC00000, 0x3F367F02, -/**/ 0x53CAEA94, 0x3D33E5C9, -/**/ 0x4939874A, 0xBF369E00, -/**/ 0x1D000000, 0x3F369F00, -/**/ 0xC03081D0, 0x3D338258, -/**/ 0x9DFA75FE, 0xBF36BDFA, -/**/ 0x47400000, 0x3F36BEFD, -/**/ 0x30B1A458, 0x3D33D3D0, -/**/ 0xEABD8651, 0xBF36DDF4, -/**/ 0x6D800000, 0x3F36DEFA, -/**/ 0x614A60C1, 0x3D34DB2F, -/**/ 0x2F82BB41, 0xBF36FDEF, -/**/ 0x8FC00000, 0x3F36FEF7, -/**/ 0x0D96E7B8, 0x3D369976, -/**/ 0x6C4A17CF, 0xBF371DE9, -/**/ 0xAE000000, 0x3F371EF4, -/**/ 0xF0D38C30, 0x3D390FA3, -/**/ 0xA1139EF8, 0xBF373DE3, -/**/ 0xC8400000, 0x3F373EF1, -/**/ 0xC5DCC397, 0x3D3C3EB8, -/**/ 0xCDDF53BC, 0xBF375DDD, -/**/ 0xDEC00000, 0x3F375EEE, -/**/ 0xB8D0D9FD, 0xBD3FD84B, -/**/ 0xF2AD3919, 0xBF377DD7, -/**/ 0xF1000000, 0x3F377EEB, -/**/ 0xD11891A0, 0xBD3B3469, -/**/ 0x0F7D520F, 0xBF379DD2, -/**/ 0xFF400000, 0x3F379EE8, -/**/ 0xC93D855B, 0xBD35D4A1, -/**/ 0x244FA19D, 0xBF37BDCC, -/**/ 0x09800000, 0x3F37BEE6, -/**/ 0xCFC56806, 0xBD2F6FE7, -/**/ 0x31242AC1, 0xBF37DDC6, -/**/ 0x0FC00000, 0x3F37DEE3, -/**/ 0xE815F202, 0xBD21BAC0, -/**/ 0x35FAF079, 0xBF37FDC0, -/**/ 0x12000000, 0x3F37FEE0, -/**/ 0x5190C28B, 0xBCF43E7B, -/**/ 0x32D3F5C6, 0xBF381DBA, -/**/ 0x10400000, 0x3F381EDD, -/**/ 0x34C1F9E9, 0x3D1C55D8, -/**/ 0x27AF3DA6, 0xBF383DB4, -/**/ 0x0A800000, 0x3F383EDA, -/**/ 0x8AAF36D4, 0x3D302FB8, -/**/ 0x148CCB18, 0xBF385DAE, -/**/ 0x00C00000, 0x3F385ED7, -/**/ 0x7AE0D0F8, 0x3D3A0BDF, -/**/ 0xF96CA11B, 0xBF387DA7, -/**/ 0xF3400000, 0x3F387ED3, -/**/ 0x6B1CDAAF, 0xBD3B5515, -/**/ 0xD64EC2AD, 0xBF389DA1, -/**/ 0xE1800000, 0x3F389ED0, -/**/ 0xE1179E5E, 0xBD2FE44C, -/**/ 0xAB3332CD, 0xBF38BD9B, -/**/ 0xCBC00000, 0x3F38BECD, -/**/ 0xF86F56EC, 0xBD0E529E, -/**/ 0x7819F47A, 0xBF38DD95, -/**/ 0xB2000000, 0x3F38DECA, -/**/ 0xFEB631AB, 0x3D2246C3, -/**/ 0x3D030AB4, 0xBF38FD8F, -/**/ 0x94400000, 0x3F38FEC7, -/**/ 0xE04DA791, 0x3D36D7FA, -/**/ 0xF9EE7878, 0xBF391D88, -/**/ 0x72C00000, 0x3F391EC4, -/**/ 0x86F7ADBB, 0xBD3AAB89, -/**/ 0xAEDC40C7, 0xBF393D82, -/**/ 0x4D000000, 0x3F393EC1, -/**/ 0x032C6155, 0xBD26CC57, -/**/ 0x5BCC669D, 0xBF395D7C, -/**/ 0x23400000, 0x3F395EBE, -/**/ 0x93C3EB3D, 0x3D12A452, -/**/ 0x00BEECFB, 0xBF397D76, -/**/ 0xF5800000, 0x3F397EBA, -/**/ 0xA0BCD695, 0x3D358336, -/**/ 0x9DB3D6E0, 0xBF399D6F, -/**/ 0xC4000000, 0x3F399EB7, -/**/ 0xDA737570, 0xBD38D6C5, -/**/ 0x32AB2749, 0xBF39BD69, -/**/ 0x8E400000, 0x3F39BEB4, -/**/ 0x65026C7D, 0xBD198F84, -/**/ 0xBFA4E136, 0xBF39DD62, -/**/ 0x54800000, 0x3F39DEB1, -/**/ 0x2EA9B41A, 0x3D29B9C9, -/**/ 0x44A107A5, 0xBF39FD5C, -/**/ 0x17000000, 0x3F39FEAE, -/**/ 0x16137ACF, 0xBD3F1375, -/**/ 0xC19F9D96, 0xBF3A1D55, -/**/ 0xD5400000, 0x3F3A1EAA, -/**/ 0xDE73AFA0, 0xBD2467DC, -/**/ 0x36A0A607, 0xBF3A3D4F, -/**/ 0x8F800000, 0x3F3A3EA7, -/**/ 0x7B8357C6, 0x3D26F8F0, -/**/ 0xA3A423F7, 0xBF3A5D48, -/**/ 0x46000000, 0x3F3A5EA4, -/**/ 0x5DA0DFB7, 0xBD3E0141, -/**/ 0x08AA1A64, 0xBF3A7D42, -/**/ 0xF8400000, 0x3F3A7EA0, -/**/ 0x41050D29, 0xBD1AB06E, -/**/ 0x65B28C4E, 0xBF3A9D3B, -/**/ 0xA6800000, 0x3F3A9E9D, -/**/ 0x56A0E005, 0x3D317CE9, -/**/ 0xBABD7CB3, 0xBF3ABD34, -/**/ 0x51000000, 0x3F3ABE9A, -/**/ 0xF899EF39, 0xBD358532, -/**/ 0x07CAEE92, 0xBF3ADD2E, -/**/ 0xF7400000, 0x3F3ADE96, -/**/ 0xC83BF5C2, 0x3D113A3C, -/**/ 0x4CDAE4EA, 0xBF3AFD27, -/**/ 0x99800000, 0x3F3AFE93, -/**/ 0x863C7C8E, 0x3D3EF92F, -/**/ 0x89ED62B9, 0xBF3B1D20, -/**/ 0x38000000, 0x3F3B1E90, -/**/ 0x3341CC3C, 0xBD161149, -/**/ 0xBF026AFE, 0xBF3B3D19, -/**/ 0xD2400000, 0x3F3B3E8C, -/**/ 0x67C955DF, 0x3D36D709, -/**/ 0xEC1A00B8, 0xBF3B5D12, -/**/ 0x68C00000, 0x3F3B5E89, -/**/ 0x5AE9B17A, 0xBD27E77B, -/**/ 0x113426E6, 0xBF3B7D0C, -/**/ 0xFB000000, 0x3F3B7E85, -/**/ 0x219679DE, 0x3D321C58, -/**/ 0x2E50E086, 0xBF3B9D05, -/**/ 0x89800000, 0x3F3B9E82, -/**/ 0xFAA62113, 0xBD2DEF6A, -/**/ 0x43703097, 0xBF3BBCFE, -/**/ 0x13C00000, 0x3F3BBE7F, -/**/ 0x23305306, 0x3D30D119, -/**/ 0x50921A17, 0xBF3BDCF7, -/**/ 0x9A400000, 0x3F3BDE7B, -/**/ 0x9FBACE27, 0xBD2D1078, -/**/ 0x55B6A006, 0xBF3BFCF0, -/**/ 0x1C800000, 0x3F3BFE78, -/**/ 0xD625DF1E, 0x3D32FD49, -/**/ 0x52DDC563, 0xBF3C1CE9, -/**/ 0x9B000000, 0x3F3C1E74, -/**/ 0x7D07255B, 0xBD253AA9, -/**/ 0x48078D2B, 0xBF3C3CE2, -/**/ 0x15400000, 0x3F3C3E71, -/**/ 0x9E08B538, 0x3D38A8E7, -/**/ 0x3533FA5D, 0xBF3C5CDB, -/**/ 0x8BC00000, 0x3F3C5E6D, -/**/ 0x45956AFC, 0xBD09780B, -/**/ 0x1A630FF9, 0xBF3C7CD4, -/**/ 0xFE400000, 0x3F3C7E69, -/**/ 0x2792F44E, 0xBD3E2410, -/**/ 0xF794D0FC, 0xBF3C9CCC, -/**/ 0x6C800000, 0x3F3C9E66, -/**/ 0x30AB4456, 0x3D1F2AEC, -/**/ 0xCCC94066, 0xBF3CBCC5, -/**/ 0xD7000000, 0x3F3CBE62, -/**/ 0x231641D5, 0xBD3161A0, -/**/ 0x9A006135, 0xBF3CDCBE, -/**/ 0x3D400000, 0x3F3CDE5F, -/**/ 0xF4AD1934, 0x3D3657DD, -/**/ 0x5F3A3668, 0xBF3CFCB7, -/**/ 0x9FC00000, 0x3F3CFE5B, -/**/ 0x2E7AC798, 0xBCF07CB0, -/**/ 0x1C76C2FD, 0xBF3D1CB0, -/**/ 0xFE400000, 0x3F3D1E57, -/**/ 0x6090F643, 0xBD377F9B, -/**/ 0xD1B609F3, 0xBF3D3CA8, -/**/ 0x58800000, 0x3F3D3E54, -/**/ 0x849503E6, 0x3D32F16C, -/**/ 0x7EF80E49, 0xBF3D5CA1, -/**/ 0xAF000000, 0x3F3D5E50, -/**/ 0xAF1CA4EA, 0xBCFB3B3A, -/**/ 0x243CD2FE, 0xBF3D7C9A, -/**/ 0x01800000, 0x3F3D7E4D, -/**/ 0x4701415B, 0xBD356DFC, -/**/ 0xC1845B0F, 0xBF3D9C92, -/**/ 0x4FC00000, 0x3F3D9E49, -/**/ 0x582AEA48, 0x3D37C392, -/**/ 0x56CEA97C, 0xBF3DBC8B, -/**/ 0x9A400000, 0x3F3DBE45, -/**/ 0x67DCC15E, 0x3D1787DF, -/**/ 0xE41BC143, 0xBF3DDC83, -/**/ 0xE0C00000, 0x3F3DDE41, -/**/ 0x352F961F, 0xBD262398, -/**/ 0x696BA563, 0xBF3DFC7C, -/**/ 0x23400000, 0x3F3DFE3E, -/**/ 0xDEDD373A, 0xBD3B16B9, -/**/ 0xE6BE58DA, 0xBF3E1C74, -/**/ 0x61800000, 0x3F3E1E3A, -/**/ 0x336BE94B, 0x3D35D42E, -/**/ 0x5C13DEA7, 0xBF3E3C6D, -/**/ 0x9C000000, 0x3F3E3E36, -/**/ 0x08A303A2, 0x3D1EBFAF, -/**/ 0xC96C39C9, 0xBF3E5C65, -/**/ 0xD2800000, 0x3F3E5E32, -/**/ 0x34856362, 0xBD160A06, -/**/ 0x2EC76D3D, 0xBF3E7C5E, -/**/ 0x05000000, 0x3F3E7E2F, -/**/ 0x154CDF1A, 0xBD31C21A, -/**/ 0x8C257C04, 0xBF3E9C56, -/**/ 0x33800000, 0x3F3E9E2B, -/**/ 0x31941F7F, 0xBD3D0DDE, -/**/ 0xE186691B, 0xBF3EBC4E, -/**/ 0x5DC00000, 0x3F3EBE27, -/**/ 0xC26EC60D, 0x3D389B31, -/**/ 0x2EEA3781, 0xBF3EDC47, -/**/ 0x84400000, 0x3F3EDE23, -/**/ 0xD583BEF8, 0x3D2E742A, -/**/ 0x7450EA34, 0xBF3EFC3F, -/**/ 0xA6C00000, 0x3F3EFE1F, -/**/ 0xAC2DA351, 0x3D1B3F31, -/**/ 0xB1BA8433, 0xBF3F1C37, -/**/ 0xC5400000, 0x3F3F1E1B, -/**/ 0x2DC67430, 0xBCE45533, -/**/ 0xE727087C, 0xBF3F3C2F, -/**/ 0xDFC00000, 0x3F3F3E17, -/**/ 0xFF1174AE, 0xBD1C7133, -/**/ 0x14967A0F, 0xBF3F5C28, -/**/ 0xF6400000, 0x3F3F5E13, -/**/ 0x4AE098DC, 0xBD29383C, -/**/ 0x3A08DBE9, 0xBF3F7C20, -/**/ 0x08C00000, 0x3F3F7E10, -/**/ 0x684B0B3B, 0xBD31211D, -/**/ 0x577E3109, 0xBF3F9C18, -/**/ 0x17400000, 0x3F3F9E0C, -/**/ 0x268D7464, 0xBD34AA4B, -/**/ 0x6CF67C6E, 0xBF3FBC10, -/**/ 0x21C00000, 0x3F3FBE08, -/**/ 0xBED03388, 0xBD3736A7, -/**/ 0x7A71C116, 0xBF3FDC08, -/**/ 0x28400000, 0x3F3FDE04, -/**/ 0x900BC4E5, 0xBD38C533, -/**/ 0x7FF00200, 0xBF3FFC00, -/**/ 0x2AC00000, 0x3F3FFE00, -/**/ 0xF9987527, 0xBD3954EE, -/**/ 0x3EB8A115, 0xBF400DFC, -/**/ 0x14A00000, 0x3F400EFE, -/**/ 0x5B2E613B, 0xBD38E4DA, -/**/ 0x397AC249, 0xBF401DF8, -/**/ 0x11E00000, 0x3F401EFC, -/**/ 0x14E5761B, 0xBD3773F6, -/**/ 0x303E661C, 0xBF402DF4, -/**/ 0x0D200000, 0x3F402EFA, -/**/ 0x873570A0, 0xBD350142, -/**/ 0x23038E0C, 0xBF403DF0, -/**/ 0x06600000, 0x3F403EF8, -/**/ 0x12F5DD53, 0xBD318BC0, -/**/ 0x11CA3B9A, 0xBF404DEC, -/**/ 0xFDA00000, 0x3F404EF5, -/**/ 0x32BC307C, 0xBD2A24DE, -/**/ 0xFC927044, 0xBF405DE7, -/**/ 0xF2E00000, 0x3F405EF3, -/**/ 0xF01532DA, 0xBD1E513F, -/**/ 0xE35C2D8A, 0xBF406DE3, -/**/ 0xE6200000, 0x3F406EF1, -/**/ 0xCE27534E, 0xBCF10631, -/**/ 0xC62774EA, 0xBF407DDF, -/**/ 0xD7600000, 0x3F407EEF, -/**/ 0x86CE9380, 0x3D19E95C, -/**/ 0xA4F447E4, 0xBF408DDB, -/**/ 0xC6A00000, 0x3F408EED, -/**/ 0xBA0CD2C3, 0x3D2E19BC, -/**/ 0x7FC2A7F8, 0xBF409DD7, -/**/ 0xB3E00000, 0x3F409EEB, -/**/ 0x31FF7199, 0x3D38A832, -/**/ 0x569296A4, 0xBF40ADD3, -/**/ 0x9F400000, 0x3F40AEE9, -/**/ 0xC2D77791, 0xBD3CB2AD, -/**/ 0x29641567, 0xBF40BDCF, -/**/ 0x88800000, 0x3F40BEE7, -/**/ 0xE5545563, 0xBD3102C1, -/**/ 0xF83725C2, 0xBF40CDCA, -/**/ 0x6FC00000, 0x3F40CEE5, -/**/ 0x66B3E48D, 0xBD111C2A, -/**/ 0xC30BC932, 0xBF40DDC6, -/**/ 0x55000000, 0x3F40DEE3, -/**/ 0x7711FC2A, 0x3D2302EF, -/**/ 0x89E20138, 0xBF40EDC2, -/**/ 0x38400000, 0x3F40EEE1, -/**/ 0xB558238E, 0x3D3857C4, -/**/ 0x4CB9CF52, 0xBF40FDBE, -/**/ 0x19A00000, 0x3F40FEDF, -/**/ 0x1194C2E1, 0xBD37C324, -/**/ 0x0B933501, 0xBF410DBA, -/**/ 0xF8E00000, 0x3F410EDC, -/**/ 0xFBCAF285, 0xBD1B390B, -/**/ 0xC66E33C2, 0xBF411DB5, -/**/ 0xD6200000, 0x3F411EDA, -/**/ 0x0E52C3A4, 0x3D266ECF, -/**/ 0x7D4ACD15, 0xBF412DB1, -/**/ 0xB1600000, 0x3F412ED8, -/**/ 0x1A4AF71D, 0x3D3E4EDB, -/**/ 0x30290279, 0xBF413DAD, -/**/ 0x8AC00000, 0x3F413ED6, -/**/ 0x58C4D599, 0xBD2B0DD1, -/**/ 0xDF08D56E, 0xBF414DA8, -/**/ 0x62000000, 0x3F414ED4, -/**/ 0x2FB4061D, 0x3D1EDC6F, -/**/ 0x89EA4773, 0xBF415DA4, -/**/ 0x37400000, 0x3F415ED2, -/**/ 0x1BA53538, 0x3D3E09E8, -/**/ 0x30CD5A06, 0xBF416DA0, -/**/ 0x0AA00000, 0x3F416ED0, -/**/ 0x4A5B4574, 0xBD251B08, -/**/ 0xD3B20EA8, 0xBF417D9B, -/**/ 0xDBE00000, 0x3F417ECD, -/**/ 0x4241B57B, 0x3D2BE3AD, -/**/ 0x729866D7, 0xBF418D97, -/**/ 0xAB400000, 0x3F418ECB, -/**/ 0xFA22BD16, 0xBD387707, -/**/ 0x0D806412, 0xBF419D93, -/**/ 0x78800000, 0x3F419EC9, -/**/ 0xFFA2FC2F, 0x3D01C6FC, -/**/ 0xA46A07D9, 0xBF41AD8E, -/**/ 0x43C00000, 0x3F41AEC7, -/**/ 0x05F32EE8, 0x3D3E028D, -/**/ 0x375553AB, 0xBF41BD8A, -/**/ 0x0D200000, 0x3F41BEC5, -/**/ 0xC7E46F2B, 0xBD146400, -/**/ 0xC6424907, 0xBF41CD85, -/**/ 0xD4600000, 0x3F41CEC2, -/**/ 0x8DFCE791, 0x3D38E737, -/**/ 0x5130E96B, 0xBF41DD81, -/**/ 0x99C00000, 0x3F41DEC0, -/**/ 0x92F4A6CE, 0xBD1FEF30, -/**/ 0xD8213659, 0xBF41ED7C, -/**/ 0x5D000000, 0x3F41EEBE, -/**/ 0x4AE68315, 0x3D383EF4, -/**/ 0x5B13314D, 0xBF41FD78, -/**/ 0x1E600000, 0x3F41FEBC, -/**/ 0x39A8276A, 0xBD199E1E, -/**/ 0xDA06DBC8, 0xBF420D73, -/**/ 0xDDA00000, 0x3F420EB9, -/**/ 0xE39F6D77, 0x3D3C11BF, -/**/ 0x54FC3749, 0xBF421D6F, -/**/ 0x9B000000, 0x3F421EB7, -/**/ 0xC3A8C440, 0xBCD50D72, -/**/ 0xCBF3454F, 0xBF422D6A, -/**/ 0x56600000, 0x3F422EB5, -/**/ 0x06E59170, 0xBD3B9869, -/**/ 0x3EEC0759, 0xBF423D66, -/**/ 0x0FA00000, 0x3F423EB3, -/**/ 0x86930551, 0x3D248C4B, -/**/ 0xADE67EE6, 0xBF424D61, -/**/ 0xC7000000, 0x3F424EB0, -/**/ 0xB3649FF7, 0xBD2D6F13, -/**/ 0x18E2AD76, 0xBF425D5D, -/**/ 0x7C400000, 0x3F425EAE, -/**/ 0xB496441D, 0x3D396F87, -/**/ 0x7FE09487, 0xBF426D58, -/**/ 0x2FA00000, 0x3F426EAC, -/**/ 0x01961A2F, 0x3D05E2D0, -/**/ 0xE2E03598, 0xBF427D53, -/**/ 0xE1000000, 0x3F427EA9, -/**/ 0x652D1720, 0xBD32D013, -/**/ 0x41E1922A, 0xBF428D4F, -/**/ 0x90400000, 0x3F428EA7, -/**/ 0x15C6A78A, 0x3D38CB3F, -/**/ 0x9CE4ABBA, 0xBF429D4A, -/**/ 0x3DA00000, 0x3F429EA5, -/**/ 0x07F8A52A, 0x3D163D44, -/**/ 0xF3E983C8, 0xBF42AD45, -/**/ 0xE9000000, 0x3F42AEA2, -/**/ 0x1FEC6070, 0xBD2905BC, -/**/ 0x46F01BD4, 0xBF42BD41, -/**/ 0x92600000, 0x3F42BEA0, -/**/ 0x8FE5CB8E, 0xBD3D6A4E, -/**/ 0x95F8755C, 0xBF42CD3C, -/**/ 0x39A00000, 0x3F42CE9E, -/**/ 0x120028B6, 0x3D32D9FF, -/**/ 0xE10291DF, 0xBF42DD37, -/**/ 0xDF000000, 0x3F42DE9B, -/**/ 0x94B2D8A6, 0x3D112C29, -/**/ 0x280E72DD, 0xBF42ED33, -/**/ 0x82600000, 0x3F42EE99, -/**/ 0x0E9DC27F, 0xBD222C5A, -/**/ 0x6B1C19D4, 0xBF42FD2E, -/**/ 0x23C00000, 0x3F42FE97, -/**/ 0xA4C12307, 0xBD3548A7, -/**/ 0xAA2B8844, 0xBF430D29, -/**/ 0xC3000000, 0x3F430E94, -/**/ 0x1B27A40C, 0x3D3FB49A, -/**/ 0xE53CBFAC, 0xBF431D24, -/**/ 0x60600000, 0x3F431E92, -/**/ 0xC65D601D, 0x3D35E297, -/**/ 0x1C4FC18B, 0xBF432D20, -/**/ 0xFBC00000, 0x3F432E8F, -/**/ 0xD4E46CD5, 0x3D2A84A1, -/**/ 0x4F648F60, 0xBF433D1B, -/**/ 0x95200000, 0x3F433E8D, -/**/ 0x526215F8, 0x3D175314, -/**/ 0x7E7B2AAB, 0xBF434D16, -/**/ 0x2C800000, 0x3F434E8B, -/**/ 0x9746A94C, 0xBCD9430B, -/**/ 0xA99394E9, 0xBF435D11, -/**/ 0xC1E00000, 0x3F435E88, -/**/ 0x47EF6144, 0xBD15A88D, -/**/ 0xD0ADCF9B, 0xBF436D0C, -/**/ 0x55400000, 0x3F436E86, -/**/ 0x94614FFB, 0xBD227301, -/**/ 0xF3C9DC3F, 0xBF437D07, -/**/ 0xE6A00000, 0x3F437E83, -/**/ 0x16908831, 0xBD27A44A, -/**/ 0x12E7BC55, 0xBF438D03, -/**/ 0x76000000, 0x3F438E81, -/**/ 0x13DE59AC, 0xBD2A6621, -/**/ 0x2E07715C, 0xBF439CFE, -/**/ 0x03600000, 0x3F439E7F, -/**/ 0x76635000, 0xBD2AB687, -/**/ 0x4528FCD2, 0xBF43ACF9, -/**/ 0x8EC00000, 0x3F43AE7C, -/**/ 0x28F7818F, 0xBD28937E, -/**/ 0x584C6037, 0xBF43BCF4, -/**/ 0x18200000, 0x3F43BE7A, -/**/ 0x17328F27, 0xBD23FB06, -/**/ 0x67719D0A, 0xBF43CCEF, -/**/ 0x9F800000, 0x3F43CE77, -/**/ 0x5AD74747, 0xBD19D640, -/**/ 0x7298B4CA, 0xBF43DCEA, -/**/ 0x24E00000, 0x3F43DE75, -/**/ 0xC5CB9C74, 0xBCFB0E6A, -/**/ 0x79C1A8F6, 0xBF43ECE5, -/**/ 0xA8400000, 0x3F43EE72, -/**/ 0xF21B8682, 0x3D1145E2, -/**/ 0x7CEC7B0D, 0xBF43FCE0, -/**/ 0x29A00000, 0x3F43FE70, -/**/ 0x59543A06, 0x3D27251B, -/**/ 0x7C192C8E, 0xBF440CDB, -/**/ 0xA9000000, 0x3F440E6D, -/**/ 0xAC6250B6, 0x3D341357, -/**/ 0x7747BEF8, 0xBF441CD6, -/**/ 0x26600000, 0x3F441E6B, -/**/ 0x43A510F7, 0x3D3DD4D6, -/**/ 0x6E7833CB, 0xBF442CD1, -/**/ 0xA1E00000, 0x3F442E68, -/**/ 0x05F7D1E1, 0xBD3727F7, -/**/ 0x61AA8C85, 0xBF443CCC, -/**/ 0x1B400000, 0x3F443E66, -/**/ 0x527C9668, 0xBD25C421, -/**/ 0x50DECAA5, 0xBF444CC7, -/**/ 0x92A00000, 0x3F444E63, -/**/ 0x053F70AC, 0x3D053C47, -/**/ 0x3C14EFAB, 0xBF445CC2, -/**/ 0x08000000, 0x3F445E61, -/**/ 0x1E315FBB, 0x3D3175D5, -/**/ 0x234CFD15, 0xBF446CBD, -/**/ 0x7B800000, 0x3F446E5E, -/**/ 0x6A8B33AC, 0xBD3E762C, -/**/ 0x0686F463, 0xBF447CB8, -/**/ 0xECE00000, 0x3F447E5B, -/**/ 0x67AD9900, 0xBD2A36F8, -/**/ 0xE5C2D713, 0xBF448CB2, -/**/ 0x5C400000, 0x3F448E59, -/**/ 0x1E974853, 0x3D161B95, -/**/ 0xC100A6A5, 0xBF449CAD, -/**/ 0xC9A00000, 0x3F449E56, -/**/ 0x8CE22250, 0x3D3971F7, -/**/ 0x98406498, 0xBF44ACA8, -/**/ 0x35200000, 0x3F44AE54, -/**/ 0xDF8A23F8, 0xBD315945, -/**/ 0x6B82126A, 0xBF44BCA3, -/**/ 0x9E800000, 0x3F44BE51, -/**/ 0x1A63D360, 0x3D1498B2, -/**/ 0x3AC5B19B, 0xBF44CC9E, -/**/ 0x05E00000, 0x3F44CE4F, -/**/ 0x4323A054, 0x3D3CF14E, -/**/ 0x060B43AA, 0xBF44DC99, -/**/ 0x6B600000, 0x3F44DE4C, -/**/ 0x4CE35F94, 0xBD23EDC2, -/**/ 0xCD52CA15, 0xBF44EC93, -/**/ 0xCEC00000, 0x3F44EE49, -/**/ 0xCCF1B48E, 0x3D306E9D, -/**/ 0x909C465C, 0xBF44FC8E, -/**/ 0x30400000, 0x3F44FE47, -/**/ 0x5FF9440B, 0xBD33DD35, -/**/ 0x4FE7B9FF, 0xBF450C89, -/**/ 0x8FA00000, 0x3F450E44, -/**/ 0xAA4D276D, 0x3D224D49, -/**/ 0x0B35267A, 0xBF451C84, -/**/ 0xED200000, 0x3F451E41, -/**/ 0x11B557F9, 0xBD3884D4, -/**/ 0xC2848D4F, 0xBF452C7E, -/**/ 0x48800000, 0x3F452E3F, -/**/ 0xB43290C4, 0x3D1C857D, -/**/ 0x75D5EFFC, 0xBF453C79, -/**/ 0xA2000000, 0x3F453E3C, -/**/ 0x2D598D3C, 0xBD37E5C1, -/**/ 0x25294FFF, 0xBF454C74, -/**/ 0xF9600000, 0x3F454E39, -/**/ 0x3FE47B89, 0x3D24CD93, -/**/ 0xD07EAED8, 0xBF455C6E, -/**/ 0x4EE00000, 0x3F455E37, -/**/ 0xAA959122, 0xBD31F800, -/**/ 0x77D60E06, 0xBF456C69, -/**/ 0xA2400000, 0x3F456E34, -/**/ 0x7329AF92, 0x3D32FEDF, -/**/ 0x1B2F6F08, 0xBF457C64, -/**/ 0xF3C00000, 0x3F457E31, -/**/ 0x1C545A6F, 0xBD1ACE5A, -/**/ 0xBA8AD35D, 0xBF458C5E, -/**/ 0x43400000, 0x3F458E2F, -/**/ 0x19F6B9EF, 0xBD3F0E63, -/**/ 0x55E83C84, 0xBF459C59, -/**/ 0x90A00000, 0x3F459E2C, -/**/ 0x73005F6F, 0x3D23DEF2, -/**/ 0xED47ABFB, 0xBF45AC53, -/**/ 0xDC200000, 0x3F45AE29, -/**/ 0x1C295DE7, 0xBD277204, -/**/ 0x80A92343, 0xBF45BC4E, -/**/ 0x25800000, 0x3F45BE27, -/**/ 0x8D869589, 0x3D3FF92A, -/**/ 0x100CA3D9, 0xBF45CC49, -/**/ 0x6D000000, 0x3F45CE24, -/**/ 0x145C5335, 0x3D2A0DFD, -/**/ 0x9B722F3C, 0xBF45DC43, -/**/ 0xB2800000, 0x3F45DE21, -/**/ 0x6A8614B3, 0xBD123A1A, -/**/ 0x22D9C6ED, 0xBF45EC3E, -/**/ 0xF6000000, 0x3F45EE1E, -/**/ 0x63CBC7E7, 0xBD34C665, -/**/ 0xA6436C69, 0xBF45FC38, -/**/ 0x37600000, 0x3F45FE1C, -/**/ 0xAB6C51D7, 0x3D3C6061, -/**/ 0x25AF2130, 0xBF460C33, -/**/ 0x76E00000, 0x3F460E19, -/**/ 0x1EC7F453, 0x3D2DCD9C, -/**/ 0xA11CE6C1, 0xBF461C2D, -/**/ 0xB4600000, 0x3F461E16, -/**/ 0x20C52899, 0x3D066EFA, -/**/ 0x188CBE9A, 0xBF462C28, -/**/ 0xEFE00000, 0x3F462E13, -/**/ 0xEB5FDD5C, 0xBD1FA5AC, -/**/ 0x8BFEAA3B, 0xBF463C22, -/**/ 0x29600000, 0x3F463E11, -/**/ 0xF22FE2BC, 0xBD313E11, -/**/ 0xFB72AB23, 0xBF464C1C, -/**/ 0x60E00000, 0x3F464E0E, -/**/ 0x6710E251, 0xBD392F15, -/**/ 0x66E8C2D0, 0xBF465C17, -/**/ 0x96600000, 0x3F465E0B, -/**/ 0x1EFC78A7, 0xBD3FBB76, -/**/ 0xCE60F2C1, 0xBF466C11, -/**/ 0xC9C00000, 0x3F466E08, -/**/ 0x602C1A84, 0x3D3B1DCB, -/**/ 0x31DB3C76, 0xBF467C0C, -/**/ 0xFB400000, 0x3F467E05, -/**/ 0x9027DA74, 0x3D375DAE, -/**/ 0x9157A16E, 0xBF468C06, -/**/ 0x2AC00000, 0x3F468E03, -/**/ 0xEA560DA0, 0x3D350532, -/**/ 0xECD62326, 0xBF469C00, -/**/ 0x58400000, 0x3F469E00, -/**/ 0xE7B63DE2, 0x3D341557 } }; - -#endif -#endif diff --git a/sysdeps/ieee754/dbl-64/urem.h b/sysdeps/ieee754/dbl-64/urem.h deleted file mode 100644 index d9e5696fdd..0000000000 --- a/sysdeps/ieee754/dbl-64/urem.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/************************************************************************/ -/* MODULE_NAME: urem.h */ -/* */ -/* */ -/* common data and variables definition for BIG or LITTLE ENDIAN */ -/************************************************************************/ - -#ifndef UREM_H -#define UREM_H - -#ifdef BIG_ENDI -static const mynumber big = {{0x43380000, 0}}, /* 6755399441055744 */ - t128 = {{0x47f00000, 0}}, /* 2^ 128 */ - tm128 = {{0x37f00000, 0}}, /* 2^-128 */ - ZERO = {{0, 0}}, /* 0.0 */ - nZERO = {{0x80000000, 0}}; /* -0.0 */ -#else -#ifdef LITTLE_ENDI -static const mynumber big = {{0, 0x43380000}}, /* 6755399441055744 */ - t128 = {{0, 0x47f00000}}, /* 2^ 128 */ - tm128 = {{0, 0x37f00000}}, /* 2^-128 */ - ZERO = {{0, 0}}, /* 0.0 */ - nZERO = {{0, 0x80000000}}; /* -0.0 */ -#endif -#endif - -#endif diff --git a/sysdeps/ieee754/dbl-64/usncs.h b/sysdeps/ieee754/dbl-64/usncs.h deleted file mode 100644 index 09f76ae8ea..0000000000 --- a/sysdeps/ieee754/dbl-64/usncs.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/************************************************************************/ -/* MODULE_NAME: dosincos.h */ -/* */ -/* */ -/* common data and variables definition for BIG or LITTLE ENDIAN */ -/************************************************************************/ - -#ifndef USNCS_H -#define USNCS_H - -static const double s1 = -0x1.5555555555555p-3; /* -0.16666666666666666 */ -static const double s2 = 0x1.1111111110ECEp-7; /* 0.0083333333333323288 */ -static const double s3 = -0x1.A01A019DB08B8p-13; /* -0.00019841269834414642 */ -static const double s4 = 0x1.71DE27B9A7ED9p-19; /* 2.755729806860771e-06 */ -static const double s5 = -0x1.ADDFFC2FCDF59p-26; /* -2.5022014848318398e-08 */ -static const double aa = -0x1.5558000000000p-3; /* -0.1666717529296875 */ -static const double bb = 0x1.5555555556E24p-18; /* 5.0862630208387126e-06 */ -static const double big = 0x1.8000000000000p45; /* 52776558133248 */ -static const double hp0 = 0x1.921FB54442D18p0; /* 1.5707963267948966 */ -static const double hp1 = 0x1.1A62633145C07p-54; /* 6.123233995736766e-17 */ -static const double mp1 = 0x1.921FB58000000p0; /* 1.5707963407039642 */ -static const double mp2 = -0x1.DDE973C000000p-27; /* -1.3909067564377153e-08 */ -static const double mp3 = -0x1.CB3B399D747F2p-55; /* -4.9789962505147994e-17 */ -static const double pp3 = -0x1.CB3B398000000p-55; /* -4.9789962314799099e-17 */ -static const double pp4 = -0x1.d747f23e32ed7p-83; /* -1.9034889620193266e-25 */ -static const double hpinv = 0x1.45F306DC9C883p-1; /* 0.63661977236758138 */ -static const double toint = 0x1.8000000000000p52; /* 6755399441055744 */ - -#endif diff --git a/sysdeps/ieee754/dbl-64/utan.h b/sysdeps/ieee754/dbl-64/utan.h deleted file mode 100644 index b34e52f1fb..0000000000 --- a/sysdeps/ieee754/dbl-64/utan.h +++ /dev/null @@ -1,265 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/******************************************************************/ -/* */ -/* MODULE_NAME:utan.h */ -/* */ -/* common data and variables prototype and definition */ -/******************************************************************/ - -#ifndef UTAN_H -#define UTAN_H - -#ifdef BIG_ENDI - static const number - /* polynomial I */ -/**/ d3 = {{0x3FD55555, 0x55555555} }, /* 0.333... */ -/**/ d5 = {{0x3FC11111, 0x111107C6} }, /* 0.133... */ -/**/ d7 = {{0x3FABA1BA, 0x1CDB8745} }, /* . */ -/**/ d9 = {{0x3F9664ED, 0x49CFC666} }, /* . */ -/**/ d11 = {{0x3F82385A, 0x3CF2E4EA} }, /* . */ - /* polynomial II */ -/**/ a3 = {{0x3fd55555, 0x55555555} }, /* 1/3 */ -/**/ aa3 = {{0x3c755555, 0x55555555} }, /* 1/3-a3 */ -/**/ a5 = {{0x3fc11111, 0x11111111} }, /* 2/15 */ -/**/ aa5 = {{0x3c411111, 0x11111111} }, /* 2/15-a5 */ -/**/ a7 = {{0x3faba1ba, 0x1ba1ba1c} }, /* 17/315 */ -/**/ aa7 = {{0xbc479179, 0x17917918} }, /* ()-a7 */ -/**/ a9 = {{0x3f9664f4, 0x882c10fa} }, /* 62/2835 */ -/**/ aa9 = {{0xbc09a528, 0x8b6c44fd} }, /* ()-a9 */ -/**/ a11 = {{0x3f8226e3, 0x55e6c23d} }, /* . */ -/**/ aa11 = {{0xbc2c292b, 0x8f1a2c13} }, /* . */ -/**/ a13 = {{0x3f6d6d3d, 0x0e157de0} }, /* . */ -/**/ aa13 = {{0xbc0280cf, 0xc968d971} }, /* . */ -/**/ a15 = {{0x3f57da36, 0x452b75e3} }, /* . */ -#if 0 -/**/ aa15 = {{0xbbf25789, 0xb285d2ed} }, /* . */ -#endif -/**/ a17 = {{0x3f435582, 0x48036744} }, /* . */ -#if 0 -/**/ aa17 = {{0x3be488d9, 0x563f1f23} }, /* . */ -#endif -/**/ a19 = {{0x3f2f57d7, 0x734d1664} }, /* . */ -#if 0 -/**/ aa19 = {{0x3bb0d55a, 0x913ccb50} }, /* . */ -#endif -/**/ a21 = {{0x3f1967e1, 0x8afcafad} }, /* . */ -#if 0 -/**/ aa21 = {{0xbbbd7614, 0xa42d44e6} }, /* . */ -#endif -/**/ a23 = {{0x3f0497d8, 0xeea25259} }, /* . */ -#if 0 -/**/ aa23 = {{0x3b99f2d0, 0x2e4d2863} }, /* . */ -#endif -/**/ a25 = {{0x3ef0b132, 0xd39a6050} }, /* . */ -#if 0 -/**/ aa25 = {{0x3b93b274, 0xc2c19614} }, /* . */ -#endif -/**/ a27 = {{0x3edb0f72, 0xd3ee24e9} }, /* . */ -#if 0 -/**/ aa27 = {{0x3b61688d, 0xdd595609} }, /* . */ -#endif - /* polynomial III */ -/**/ e0 = {{0x3FD55555, 0x55554DBD} }, /* . */ -/**/ e1 = {{0x3FC11112, 0xE0A6B45F} }, /* . */ - - /* constants */ -/**/ mfftnhf = {{0xc02f0000, 0x00000000} }, /*-15.5 */ - -/**/ g1 = {{0x3e4b096c, 0x00000000} }, /* 1.259e-8 */ -/**/ g2 = {{0x3faf212d, 0x00000000} }, /* 0.0608 */ -/**/ g3 = {{0x3fe92f1a, 0x00000000} }, /* 0.787 */ -/**/ g4 = {{0x40390000, 0x00000000} }, /* 25.0 */ -/**/ g5 = {{0x4197d784, 0x00000000} }, /* 1e8 */ -/**/ gy1 = {{0x3e7ad7f2, 0x9abcaf48} }, /* 1e-7 */ -/**/ gy2 = {{0x3faf212d, 0x00000000} }, /* 0.0608 */ - -/**/ u1 = {{0x3cc8c33a, 0x00000000} }, /* 6.873e-16 */ -/**/ u2 = {{0x3983dc4d, 0x00000000} }, /* 1.224e-31 */ -/**/ u3 = {{0x3c78e14b, 0x00000000} }, /* 2.158e-17 */ -/**/ ua3 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ -/**/ ub3 = {{0x3cc81898, 0x00000000} }, /* 6.688e-16 */ -/**/ u4 = {{0x399856c2, 0x00000000} }, /* 3e-31 */ -/**/ u5 = {{0x3c39d80a, 0x00000000} }, /* 1.401e-18 */ -/**/ u6 = {{0x3c374c5a, 0x00000000} }, /* 1.263e-18 */ -/**/ u7 = {{0x39903beb, 0x00000000} }, /* 2.001e-31 */ -/**/ u8 = {{0x399c56ae, 0x00000000} }, /* 3.493e-31 */ -/**/ u9 = {{0x3c7d0ac7, 0x00000000} }, /* 2.519e-17 */ -/**/ ua9 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ -/**/ ub9 = {{0x3ccc2375, 0x00000000} }, /* 7.810e-16 */ -/**/ u10 = {{0x3c7e40af, 0x00000000} }, /* 2.624e-17 */ -/**/ ua10 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ -/**/ ub10 = {{0x3ccc6405, 0x00000000} }, /* 7.880e-16 */ -/**/ u11 = {{0x39e509b6, 0x00000000} }, /* 8.298e-30 */ -/**/ u12 = {{0x39e509b6, 0x00000000} }, /* 8.298e-30 */ -/**/ u13 = {{0x3c39d80a, 0x00000000} }, /* 1.401e-18 */ -/**/ u14 = {{0x3c374c5a, 0x00000000} }, /* 1.263e-18 */ -/**/ u15 = {{0x3ab5767a, 0x00000000} }, /* 6.935e-26 */ -/**/ u16 = {{0x3ab57744, 0x00000000} }, /* 6.936e-26 */ -/**/ u17 = {{0x3c7d0ac7, 0x00000000} }, /* 2.519e-17 */ -/**/ ua17 = {{0x3bfdb11f, 0x00000000} }, /* 1.006e-19 */ -/**/ ub17 = {{0x3ccc2375, 0x00000000} }, /* 7.810e-16 */ -/**/ u18 = {{0x3c7e40af, 0x00000000} }, /* 2.624e-17 */ -/**/ ua18 = {{0x3bfdb11f, 0x00000000} }, /* 1.006e-19 */ -/**/ ub18 = {{0x3ccc6405, 0x00000000} }, /* 7.880e-16 */ -/**/ u19 = {{0x39a13b61, 0x00000000} }, /* 4.248e-31 */ -/**/ u20 = {{0x39a13b61, 0x00000000} }, /* 4.248e-31 */ -/**/ u21 = {{0x3c3bb9b8, 0x00000000} }, /* 1.503e-18 */ -/**/ u22 = {{0x3c392e08, 0x00000000} }, /* 1.365e-18 */ -/**/ u23 = {{0x3a0ce706, 0x00000000} }, /* 4.560e-29 */ -/**/ u24 = {{0x3a0cff5d, 0x00000000} }, /* 4.575e-29 */ -/**/ u25 = {{0x3c7d0ac7, 0x00000000} }, /* 2.519e-17 */ -/**/ ua25 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ -/**/ ub25 = {{0x3ccc2375, 0x00000000} }, /* 7.810e-16 */ -/**/ u26 = {{0x3c7e40af, 0x00000000} }, /* 2.624e-17 */ -/**/ ua26 = {{0x3bfd8b58, 0x00000000} }, /* 1.001e-19 */ -/**/ ub26 = {{0x3ccc6405, 0x00000000} }, /* 7.880e-16 */ -/**/ u27 = {{0x3ad421cb, 0x00000000} }, /* 2.602e-25 */ -/**/ u28 = {{0x3ad421cb, 0x00000000} }, /* 2.602e-25 */ - -/**/ mp1 = {{0x3FF921FB, 0x58000000} }, -/**/ mp2 = {{0xBE4DDE97, 0x3C000000} }, -/**/ mp3 = {{0xBC8CB3B3, 0x99D747F2} }, -/**/ pp3 = {{0xBC8CB3B3, 0x98000000} }, -/**/ pp4 = {{0xbacd747f, 0x23e32ed7} }, -/**/ hpinv = {{0x3FE45F30, 0x6DC9C883} }, -/**/ toint = {{0x43380000, 0x00000000} }; - -#else -#ifdef LITTLE_ENDI - - static const number - /* polynomial I */ -/**/ d3 = {{0x55555555, 0x3FD55555} }, /* 0.333... */ -/**/ d5 = {{0x111107C6, 0x3FC11111} }, /* 0.133... */ -/**/ d7 = {{0x1CDB8745, 0x3FABA1BA} }, /* . */ -/**/ d9 = {{0x49CFC666, 0x3F9664ED} }, /* . */ -/**/ d11 = {{0x3CF2E4EA, 0x3F82385A} }, /* . */ - /* polynomial II */ -/**/ a3 = {{0x55555555, 0x3fd55555} }, /* 1/3 */ -/**/ aa3 = {{0x55555555, 0x3c755555} }, /* 1/3-a3 */ -/**/ a5 = {{0x11111111, 0x3fc11111} }, /* 2/15 */ -/**/ aa5 = {{0x11111111, 0x3c411111} }, /* 2/15-a5 */ -/**/ a7 = {{0x1ba1ba1c, 0x3faba1ba} }, /* 17/315 */ -/**/ aa7 = {{0x17917918, 0xbc479179} }, /* ()-a7 */ -/**/ a9 = {{0x882c10fa, 0x3f9664f4} }, /* 62/2835 */ -/**/ aa9 = {{0x8b6c44fd, 0xbc09a528} }, /* ()-a9 */ -/**/ a11 = {{0x55e6c23d, 0x3f8226e3} }, /* . */ -/**/ aa11 = {{0x8f1a2c13, 0xbc2c292b} }, /* . */ -/**/ a13 = {{0x0e157de0, 0x3f6d6d3d} }, /* . */ -/**/ aa13 = {{0xc968d971, 0xbc0280cf} }, /* . */ -/**/ a15 = {{0x452b75e3, 0x3f57da36} }, /* . */ -#if 0 -/**/ aa15 = {{0xb285d2ed, 0xbbf25789} }, /* . */ -#endif -/**/ a17 = {{0x48036744, 0x3f435582} }, /* . */ -#if 0 -/**/ aa17 = {{0x563f1f23, 0x3be488d9} }, /* . */ -#endif -/**/ a19 = {{0x734d1664, 0x3f2f57d7} }, /* . */ -#if 0 -/**/ aa19 = {{0x913ccb50, 0x3bb0d55a} }, /* . */ -#endif -/**/ a21 = {{0x8afcafad, 0x3f1967e1} }, /* . */ -#if 0 -/**/ aa21 = {{0xa42d44e6, 0xbbbd7614} }, /* . */ -#endif -/**/ a23 = {{0xeea25259, 0x3f0497d8} }, /* . */ -#if 0 -/**/ aa23 = {{0x2e4d2863, 0x3b99f2d0} }, /* . */ -#endif -/**/ a25 = {{0xd39a6050, 0x3ef0b132} }, /* . */ -#if 0 -/**/ aa25 = {{0xc2c19614, 0x3b93b274} }, /* . */ -#endif -/**/ a27 = {{0xd3ee24e9, 0x3edb0f72} }, /* . */ -#if 0 -/**/ aa27 = {{0xdd595609, 0x3b61688d} }, /* . */ -#endif - /* polynomial III */ -/**/ e0 = {{0x55554DBD, 0x3FD55555} }, /* . */ -/**/ e1 = {{0xE0A6B45F, 0x3FC11112} }, /* . */ - - /* constants */ -/**/ mfftnhf = {{0x00000000, 0xc02f0000} }, /*-15.5 */ - -/**/ g1 = {{0x00000000, 0x3e4b096c} }, /* 1.259e-8 */ -/**/ g2 = {{0x00000000, 0x3faf212d} }, /* 0.0608 */ -/**/ g3 = {{0x00000000, 0x3fe92f1a} }, /* 0.787 */ -/**/ g4 = {{0x00000000, 0x40390000} }, /* 25.0 */ -/**/ g5 = {{0x00000000, 0x4197d784} }, /* 1e8 */ -/**/ gy1 = {{0x9abcaf48, 0x3e7ad7f2} }, /* 1e-7 */ -/**/ gy2 = {{0x00000000, 0x3faf212d} }, /* 0.0608 */ - -/**/ u1 = {{0x00000000, 0x3cc8c33a} }, /* 6.873e-16 */ -/**/ u2 = {{0x00000000, 0x3983dc4d} }, /* 1.224e-31 */ -/**/ u3 = {{0x00000000, 0x3c78e14b} }, /* 2.158e-17 */ -/**/ ua3 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ -/**/ ub3 = {{0x00000000, 0x3cc81898} }, /* 6.688e-16 */ -/**/ u4 = {{0x00000000, 0x399856c2} }, /* 3e-31 */ -/**/ u5 = {{0x00000000, 0x3c39d80a} }, /* 1.401e-18 */ -/**/ u6 = {{0x00000000, 0x3c374c5a} }, /* 1.263e-18 */ -/**/ u7 = {{0x00000000, 0x39903beb} }, /* 2.001e-31 */ -/**/ u8 = {{0x00000000, 0x399c56ae} }, /* 3.493e-31 */ -/**/ u9 = {{0x00000000, 0x3c7d0ac7} }, /* 2.519e-17 */ -/**/ ua9 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ -/**/ ub9 = {{0x00000000, 0x3ccc2375} }, /* 7.810e-16 */ -/**/ u10 = {{0x00000000, 0x3c7e40af} }, /* 2.624e-17 */ -/**/ ua10 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ -/**/ ub10 = {{0x00000000, 0x3ccc6405} }, /* 7.880e-16 */ -/**/ u11 = {{0x00000000, 0x39e509b6} }, /* 8.298e-30 */ -/**/ u12 = {{0x00000000, 0x39e509b6} }, /* 8.298e-30 */ -/**/ u13 = {{0x00000000, 0x3c39d80a} }, /* 1.401e-18 */ -/**/ u14 = {{0x00000000, 0x3c374c5a} }, /* 1.263e-18 */ -/**/ u15 = {{0x00000000, 0x3ab5767a} }, /* 6.935e-26 */ -/**/ u16 = {{0x00000000, 0x3ab57744} }, /* 6.936e-26 */ -/**/ u17 = {{0x00000000, 0x3c7d0ac7} }, /* 2.519e-17 */ -/**/ ua17 = {{0x00000000, 0x3bfdb11f} }, /* 1.006e-19 */ -/**/ ub17 = {{0x00000000, 0x3ccc2375} }, /* 7.810e-16 */ -/**/ u18 = {{0x00000000, 0x3c7e40af} }, /* 2.624e-17 */ -/**/ ua18 = {{0x00000000, 0x3bfdb11f} }, /* 1.006e-19 */ -/**/ ub18 = {{0x00000000, 0x3ccc6405} }, /* 7.880e-16 */ -/**/ u19 = {{0x00000000, 0x39a13b61} }, /* 4.248e-31 */ -/**/ u20 = {{0x00000000, 0x39a13b61} }, /* 4.248e-31 */ -/**/ u21 = {{0x00000000, 0x3c3bb9b8} }, /* 1.503e-18 */ -/**/ u22 = {{0x00000000, 0x3c392e08} }, /* 1.365e-18 */ -/**/ u23 = {{0x00000000, 0x3a0ce706} }, /* 4.560e-29 */ -/**/ u24 = {{0x00000000, 0x3a0cff5d} }, /* 4.575e-29 */ -/**/ u25 = {{0x00000000, 0x3c7d0ac7} }, /* 2.519e-17 */ -/**/ ua25 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ -/**/ ub25 = {{0x00000000, 0x3ccc2375} }, /* 7.810e-16 */ -/**/ u26 = {{0x00000000, 0x3c7e40af} }, /* 2.624e-17 */ -/**/ ua26 = {{0x00000000, 0x3bfd8b58} }, /* 1.001e-19 */ -/**/ ub26 = {{0x00000000, 0x3ccc6405} }, /* 7.880e-16 */ -/**/ u27 = {{0x00000000, 0x3ad421cb} }, /* 2.602e-25 */ -/**/ u28 = {{0x00000000, 0x3ad421cb} }, /* 2.602e-25 */ - -/**/ mp1 = {{0x58000000, 0x3FF921FB} }, -/**/ mp2 = {{0x3C000000, 0xBE4DDE97} }, -/**/ mp3 = {{0x99D747F2, 0xBC8CB3B3} }, -/**/ pp3 = {{0x98000000, 0xBC8CB3B3} }, -/**/ pp4 = {{0x23e32ed7, 0xbacd747f} }, -/**/ hpinv = {{0x6DC9C883, 0x3FE45F30} }, -/**/ toint = {{0x00000000, 0x43380000} }; - -#endif -#endif - -#endif diff --git a/sysdeps/ieee754/dbl-64/utan.tbl b/sysdeps/ieee754/dbl-64/utan.tbl deleted file mode 100644 index 8b536e9235..0000000000 --- a/sysdeps/ieee754/dbl-64/utan.tbl +++ /dev/null @@ -1,1525 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * Written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/****************************************************************/ -/* TABLES FOR THE utan() FUNCTION */ -/****************************************************************/ - - -#ifdef BIG_ENDI -static const number - xfg[186][4] = { /* xi,Fi,Gi,FFi, i=16..201 */ -/**/ {{{0x3fb00000, 0x1e519d60} }, -/**/ {{0x3fb00557, 0x96c4e240} }, -/**/ {{0x402ff554, 0x628127b7} }, -/**/ {{0xbb9a1dee, 0x9e355b06} },}, -/**/ {{{0x3fb10000, 0x1b1a7010} }, -/**/ {{0x3fb10668, 0xaab892b7} }, -/**/ {{0x402e12c7, 0xbe3fdf74} }, -/**/ {{0x3ba89234, 0x037da741} },}, -/**/ {{{0x3fb20000, 0x2505e350} }, -/**/ {{0x3fb2079b, 0xff547824} }, -/**/ {{0x402c65c5, 0xde853633} }, -/**/ {{0x3bb7486e, 0xe9614250} },}, -/**/ {{{0x3fb2ffff, 0xfcdc4252} }, -/**/ {{0x3fb308f3, 0x5eb16c68} }, -/**/ {{0x402ae5da, 0xe56be74f} }, -/**/ {{0xbb82c726, 0x91a23034} },}, -/**/ {{{0x3fb3ffff, 0xe3ff849f} }, -/**/ {{0x3fb40a71, 0x154999cc} }, -/**/ {{0x40298c43, 0x046b7352} }, -/**/ {{0x3b9aceaf, 0x3843738f} },}, -/**/ {{{0x3fb4ffff, 0xedc9590f} }, -/**/ {{0x3fb50c17, 0x429bdd80} }, -/**/ {{0x40285384, 0x91b5d674} }, -/**/ {{0xbbc1d02d, 0xb4403d22} },}, -/**/ {{{0x3fb60000, 0x00ee83f7} }, -/**/ {{0x3fb60de7, 0xda80cc21} }, -/**/ {{0x40273724, 0xef21a2a7} }, -/**/ {{0xbb95e53c, 0x72523ffd} },}, -/**/ {{{0x3fb6ffff, 0xeb05ea41} }, -/**/ {{0x3fb70fe4, 0xb8c51bea} }, -/**/ {{0x40263370, 0xfae562ff} }, -/**/ {{0xbb99ad0e, 0x8ffe0626} },}, -/**/ {{{0x3fb7ffff, 0xdc0515f7} }, -/**/ {{0x3fb81210, 0x1db54498} }, -/**/ {{0x40254553, 0x0e7eab5c} }, -/**/ {{0xbb914c87, 0xd62ed686} },}, -/**/ {{{0x3fb8ffff, 0xe384d7ab} }, -/**/ {{0x3fb9146c, 0x2a8d3727} }, -/**/ {{0x40246a33, 0xfd57f3fd} }, -/**/ {{0xbbbbda8d, 0x5381e06d} },}, -/**/ {{{0x3fb9ffff, 0xe4832347} }, -/**/ {{0x3fba16fa, 0xd50e1050} }, -/**/ {{0x40239fe2, 0xc5537a96} }, -/**/ {{0x3bc7f695, 0xc111eabb} },}, -/**/ {{{0x3fbb0000, 0x274540e3} }, -/**/ {{0x3fbb19be, 0x7ae68517} }, -/**/ {{0x4022e481, 0x3637e946} }, -/**/ {{0x3bc307f8, 0x8dbd9d93} },}, -/**/ {{{0x3fbbffff, 0xfebf2e9b} }, -/**/ {{0x3fbc1cb8, 0x8369cd19} }, -/**/ {{0x40223676, 0x17aef223} }, -/**/ {{0x3bc50038, 0x424a9cf3} },}, -/**/ {{{0x3fbd0000, 0x23529045} }, -/**/ {{0x3fbd1feb, 0xc11d7ef7} }, -/**/ {{0x4021945f, 0xb8e43d4e} }, -/**/ {{0x3b812007, 0x52a6f224} },}, -/**/ {{{0x3fbdffff, 0xd872a829} }, -/**/ {{0x3fbe2359, 0x8ee4d6b7} }, -/**/ {{0x4020fd0c, 0x76195d5f} }, -/**/ {{0xbbb4d9ab, 0x85fdca85} },}, -/**/ {{{0x3fbeffff, 0xff323b84} }, -/**/ {{0x3fbf2704, 0xec9073e5} }, -/**/ {{0x40206f71, 0x3020200f} }, -/**/ {{0x3bb77aa2, 0x12836992} },}, -/**/ {{{0x3fc00000, 0x0ce79195} }, -/**/ {{0x3fc01577, 0xbc30cc61} }, -/**/ {{0x401fd549, 0xd6564a88} }, -/**/ {{0xbbc8926f, 0x965c0ad0} },}, -/**/ {{{0x3fc07fff, 0xee40e918} }, -/**/ {{0x3fc0978d, 0x8279ac01} }, -/**/ {{0x401edbb5, 0x9294bc03} }, -/**/ {{0xbb80a533, 0x4aae45d6} },}, -/**/ {{{0x3fc10000, 0x0cc091fd} }, -/**/ {{0x3fc119c5, 0x44dfb2f7} }, -/**/ {{0x401df0bb, 0x067d8e18} }, -/**/ {{0xbbcc2c18, 0x4ff642a4} },}, -/**/ {{{0x3fc18000, 0x0d9936a1} }, -/**/ {{0x3fc19c1f, 0xb9085a4b} }, -/**/ {{0x401d131a, 0x71ce3629} }, -/**/ {{0xbbc36553, 0x0669355b} },}, -/**/ {{{0x3fc1ffff, 0xed5f3188} }, -/**/ {{0x3fc21e9d, 0xee74bf2d} }, -/**/ {{0x401c41b6, 0xff0cd655} }, -/**/ {{0x3b8867f5, 0x478ecfc5} },}, -/**/ {{{0x3fc28000, 0x05f06a51} }, -/**/ {{0x3fc2a141, 0x550b313f} }, -/**/ {{0x401b7b92, 0x1702e6d2} }, -/**/ {{0xbbadab51, 0x380131fe} },}, -/**/ {{{0x3fc2ffff, 0xfe3d339e} }, -/**/ {{0x3fc3240a, 0xa75f76df} }, -/**/ {{0x401abfc8, 0xfcb6409d} }, -/**/ {{0x3bc60bcf, 0x0d291d83} },}, -/**/ {{{0x3fc37fff, 0xed888d6f} }, -/**/ {{0x3fc3a6fb, 0x13cc5db7} }, -/**/ {{0x401a0d8f, 0x8ed5320d} }, -/**/ {{0x3bb8a48e, 0x4eef03ab} },}, -/**/ {{{0x3fc40000, 0x02ca050d} }, -/**/ {{0x3fc42a13, 0xe25776bb} }, -/**/ {{0x4019642d, 0xfa84c2bc} }, -/**/ {{0xbbd0bd5d, 0xcc56516f} },}, -/**/ {{{0x3fc47fff, 0xf2531f5c} }, -/**/ {{0x3fc4ad55, 0xdeb73404} }, -/**/ {{0x4018c2fe, 0xf86e9035} }, -/**/ {{0x3b9cffe7, 0x5aa287c8} },}, -/**/ {{{0x3fc50000, 0x13774992} }, -/**/ {{0x3fc530c2, 0x7d0ee307} }, -/**/ {{0x4018296c, 0x370caf35} }, -/**/ {{0xbbcf75d1, 0xf91d6532} },}, -/**/ {{{0x3fc57fff, 0xedddcb2d} }, -/**/ {{0x3fc5b45a, 0x5db4347d} }, -/**/ {{0x401796ee, 0x52190c0e} }, -/**/ {{0x3b88a25f, 0x17d5d076} },}, -/**/ {{{0x3fc5ffff, 0xf41949a0} }, -/**/ {{0x3fc6381f, 0x13bf986a} }, -/**/ {{0x40170b09, 0x2d2255fd} }, -/**/ {{0xbb9bfb23, 0xb1bcd5e7} },}, -/**/ {{{0x3fc67fff, 0xf834d3a1} }, -/**/ {{0x3fc6bc11, 0x8ec85952} }, -/**/ {{0x4016854c, 0x62cf2268} }, -/**/ {{0x3b9ee53b, 0x82e39e04} },}, -/**/ {{{0x3fc6ffff, 0xfd9106ea} }, -/**/ {{0x3fc74032, 0xf298f6f7} }, -/**/ {{0x40160551, 0x1f4f84a9} }, -/**/ {{0xbbb59c4a, 0x112634b8} },}, -/**/ {{{0x3fc78000, 0x0f649a4f} }, -/**/ {{0x3fc7c484, 0x6ca53abc} }, -/**/ {{0x40158ab9, 0x4809d175} }, -/**/ {{0x3bc91c75, 0x73d3cd2e} },}, -/**/ {{{0x3fc7ffff, 0xef06bbd8} }, -/**/ {{0x3fc84906, 0xdf7d76ad} }, -/**/ {{0x4015152e, 0xdd2b30a6} }, -/**/ {{0xbbbfa2da, 0x084c3eef} },}, -/**/ {{{0x3fc88000, 0x021c6334} }, -/**/ {{0x3fc8cdbb, 0xd965f986} }, -/**/ {{0x4014a462, 0x51b74296} }, -/**/ {{0xbb9ec02e, 0x74dcfe0b} },}, -/**/ {{{0x3fc8ffff, 0xf38d0756} }, -/**/ {{0x3fc952a4, 0x28e173c7} }, -/**/ {{0x4014380b, 0x17b59ebd} }, -/**/ {{0xbbcd0f1c, 0xb77589f0} },}, -/**/ {{{0x3fc98000, 0x104efca1} }, -/**/ {{0x3fc9d7c1, 0x4644d23c} }, -/**/ {{0x4013cfe5, 0xcb1eabd5} }, -/**/ {{0xbbd5d6f7, 0xea188d9e} },}, -/**/ {{{0x3fca0000, 0x09417b30} }, -/**/ {{0x3fca5d14, 0x096d76aa} }, -/**/ {{0x40136bb4, 0xb3723db0} }, -/**/ {{0x3bbe3e0d, 0xfbf3979c} },}, -/**/ {{{0x3fca7fff, 0xeb1c23ec} }, -/**/ {{0x3fcae29d, 0xab60288d} }, -/**/ {{0x40130b3e, 0x783071d7} }, -/**/ {{0xbbc7dd82, 0x3d5384bf} },}, -/**/ {{{0x3fcaffff, 0xfb171c13} }, -/**/ {{0x3fcb685f, 0xa221a96b} }, -/**/ {{0x4012ae4d, 0xd8c0747d} }, -/**/ {{0x3bd4644b, 0xd5554972} },}, -/**/ {{{0x3fcb8000, 0x0aba44be} }, -/**/ {{0x3fcbee5a, 0xecdf241f} }, -/**/ {{0x401254b1, 0xc6fad63b} }, -/**/ {{0x3ba41916, 0xd092b85a} },}, -/**/ {{{0x3fcc0000, 0x113d2a3e} }, -/**/ {{0x3fcc7490, 0xb3e92543} }, -/**/ {{0x4011fe3c, 0x9a62c035} }, -/**/ {{0xbba3cc39, 0x41a03739} },}, -/**/ {{{0x3fcc7fff, 0xf49e00ce} }, -/**/ {{0x3fccfb02, 0x0f59eab0} }, -/**/ {{0x4011aac3, 0xe956a631} }, -/**/ {{0xbbb7a383, 0xbfa8cb5b} },}, -/**/ {{{0x3fcd0000, 0x05f611ab} }, -/**/ {{0x3fcd81b0, 0x89e6844e} }, -/**/ {{0x40115a1f, 0xf391268d} }, -/**/ {{0x3bd39b5c, 0xb2dc91f3} },}, -/**/ {{{0x3fcd8000, 0x14764ceb} }, -/**/ {{0x3fce089d, 0x27debf0d} }, -/**/ {{0x40110c2b, 0xfbc84740} }, -/**/ {{0x3bc14d4d, 0x84712510} },}, -/**/ {{{0x3fce0000, 0x14bcea76} }, -/**/ {{0x3fce8fc9, 0x16dbc820} }, -/**/ {{0x4010c0c5, 0xa00ca48e} }, -/**/ {{0xbbd33788, 0x640f1b9e} },}, -/**/ {{{0x3fce7fff, 0xfd7995bd} }, -/**/ {{0x3fcf1735, 0x88b50424} }, -/**/ {{0x401077cc, 0xbe02169a} }, -/**/ {{0xbbb61fee, 0x221fdf77} },}, -/**/ {{{0x3fcf0000, 0x0cc35436} }, -/**/ {{0x3fcf9ee3, 0xfd21a40b} }, -/**/ {{0x40103123, 0x1ee7ffe8} }, -/**/ {{0x3bd427e3, 0xc79ff5c1} },}, -/**/ {{{0x3fcf8000, 0x01d1da33} }, -/**/ {{0x3fd0136a, 0xb7dbe15c} }, -/**/ {{0x400fd959, 0x77d559e5} }, -/**/ {{0x3bb0c6a1, 0xd67948d7} },}, -/**/ {{{0x3fd00000, 0x060c13b2} }, -/**/ {{0x3fd05785, 0xaaad4f18} }, -/**/ {{0x400f549e, 0x2675d182} }, -/**/ {{0xbbc15208, 0x18f0dd10} },}, -/**/ {{{0x3fd04000, 0x03885492} }, -/**/ {{0x3fd09bc3, 0x660542d7} }, -/**/ {{0x400ed3e2, 0xdf3f5fec} }, -/**/ {{0xbbd95657, 0xb883ae62} },}, -/**/ {{{0x3fd08000, 0x052f5a13} }, -/**/ {{0x3fd0e024, 0x9a195045} }, -/**/ {{0x400e56f8, 0xfa68f2c8} }, -/**/ {{0x3bded7ba, 0x5a543e8e} },}, -/**/ {{{0x3fd0c000, 0x02ba1af5} }, -/**/ {{0x3fd124a9, 0xe2e7f24b} }, -/**/ {{0x400dddb4, 0xbffe633f} }, -/**/ {{0xbbdcba86, 0x0c60278f} },}, -/**/ {{{0x3fd0ffff, 0xf76642c1} }, -/**/ {{0x3fd16953, 0xe162ffe6} }, -/**/ {{0x400d67ed, 0x0311d5d5} }, -/**/ {{0x3b7b1f4a, 0xe40c5f9e} },}, -/**/ {{{0x3fd14000, 0x033602f0} }, -/**/ {{0x3fd1ae23, 0x5f49508e} }, -/**/ {{0x400cf57a, 0xb8708266} }, -/**/ {{0xbbd6a6c2, 0x8620f301} },}, -/**/ {{{0x3fd17fff, 0xfefd1a13} }, -/**/ {{0x3fd1f318, 0xdb2a9ba1} }, -/**/ {{0x400c8639, 0x8d11009e} }, -/**/ {{0x3bd3a9c6, 0x69b21d3b} },}, -/**/ {{{0x3fd1bfff, 0xf718365d} }, -/**/ {{0x3fd23835, 0x0c41e3ac} }, -/**/ {{0x400c1a06, 0xe02be47c} }, -/**/ {{0x3bdb961a, 0x129e8cd1} },}, -/**/ {{{0x3fd1ffff, 0xff001e00} }, -/**/ {{0x3fd27d78, 0xb2f6395e} }, -/**/ {{0x400bb0c1, 0xf2fe9a85} }, -/**/ {{0x3be074a9, 0xe68fd7d8} },}, -/**/ {{{0x3fd23fff, 0xfe425a6a} }, -/**/ {{0x3fd2c2e4, 0x618faabe} }, -/**/ {{0x400b4a4c, 0x190b18df} }, -/**/ {{0xbbdf0d1f, 0xf615aad1} },}, -/**/ {{{0x3fd28000, 0x059ec1db} }, -/**/ {{0x3fd30878, 0xd8583884} }, -/**/ {{0x400ae688, 0x0cd82bc2} }, -/**/ {{0xbbd563c3, 0x141c1f8d} },}, -/**/ {{{0x3fd2c000, 0x000dd081} }, -/**/ {{0x3fd34e36, 0xaffdb6d8} }, -/**/ {{0x400a855a, 0x5270fc15} }, -/**/ {{0xbbc6d88d, 0x9f2cdafd} },}, -/**/ {{{0x3fd2ffff, 0xfc1dcd2b} }, -/**/ {{0x3fd3941e, 0xa95875bc} }, -/**/ {{0x400a26a8, 0xaa9502b6} }, -/**/ {{0xbbe13cad, 0x8389b15c} },}, -/**/ {{{0x3fd33fff, 0xf6c0d4a0} }, -/**/ {{0x3fd3da31, 0x739845f5} }, -/**/ {{0x4009ca5a, 0x4d2573a0} }, -/**/ {{0xbbc71636, 0xacaee379} },}, -/**/ {{{0x3fd38000, 0x06b16793} }, -/**/ {{0x3fd4206f, 0xdbc088f0} }, -/**/ {{0x40097057, 0x9344e33a} }, -/**/ {{0xbbc2c052, 0x1d7a4f81} },}, -/**/ {{{0x3fd3c000, 0x07358fa3} }, -/**/ {{0x3fd466da, 0x6f23311d} }, -/**/ {{0x4009188a, 0x5aa612ea} }, -/**/ {{0x3b8653a5, 0x685e8edc} },}, -/**/ {{{0x3fd3ffff, 0xfc3b18cf} }, -/**/ {{0x3fd4ad71, 0xe9282e6b} }, -/**/ {{0x4008c2dd, 0x641e643d} }, -/**/ {{0x3b95f0ef, 0x3f567c64} },}, -/**/ {{{0x3fd44000, 0x000dd2a8} }, -/**/ {{0x3fd4f437, 0x1fa3f2d1} }, -/**/ {{0x40086f3c, 0x6072f821} }, -/**/ {{0x3bb68efa, 0x95ff68b5} },}, -/**/ {{{0x3fd47fff, 0xfbb43713} }, -/**/ {{0x3fd53b2a, 0xb3ac333c} }, -/**/ {{0x40081d94, 0x3da56692} }, -/**/ {{0xbbbf4d7f, 0x2985fd3f} },}, -/**/ {{{0x3fd4bfff, 0xfb113bf4} }, -/**/ {{0x3fd5824d, 0x6e8ed9c2} }, -/**/ {{0x4007cdd2, 0xa8add00f} }, -/**/ {{0x3bcf478a, 0x1c9b3657} },}, -/**/ {{{0x3fd4ffff, 0xf7f087c9} }, -/**/ {{0x3fd5c9a0, 0x07446496} }, -/**/ {{0x40077fe6, 0x444588eb} }, -/**/ {{0xbbc177dc, 0xa4eabb0c} },}, -/**/ {{{0x3fd54000, 0x088b3814} }, -/**/ {{0x3fd61123, 0x564125f9} }, -/**/ {{0x400733be, 0x6281a765} }, -/**/ {{0xbbc2c52c, 0xf57051c4} },}, -/**/ {{{0x3fd57fff, 0xf7d55966} }, -/**/ {{0x3fd658d7, 0xe194a5d5} }, -/**/ {{0x4006e94b, 0x73b47d1f} }, -/**/ {{0x3bda2fcf, 0xf9996dc6} },}, -/**/ {{{0x3fd5c000, 0x08bf2490} }, -/**/ {{0x3fd6a0be, 0xb775b28d} }, -/**/ {{0x4006a07e, 0x15b6ec28} }, -/**/ {{0xbbe0ca90, 0xaa5285b8} },}, -/**/ {{{0x3fd60000, 0x09fa853f} }, -/**/ {{0x3fd6e8d8, 0x65a66cfd} }, -/**/ {{0x40065948, 0x1c701269} }, -/**/ {{0x3bd9ea95, 0x8591e13a} },}, -/**/ {{{0x3fd64000, 0x07595fca} }, -/**/ {{0x3fd73125, 0xc0556a7c} }, -/**/ {{0x4006139b, 0xbaae9d02} }, -/**/ {{0x3bd88aff, 0x40152b83} },}, -/**/ {{{0x3fd68000, 0x031687da} }, -/**/ {{0x3fd779a7, 0x92e2cfd0} }, -/**/ {{0x4005cf6b, 0xcae0882b} }, -/**/ {{0xbbd8a4a2, 0x9f439451} },}, -/**/ {{{0x3fd6bfff, 0xf5c8cfe2} }, -/**/ {{0x3fd7c25e, 0x9fb452ed} }, -/**/ {{0x40058cab, 0xc561f1cd} }, -/**/ {{0xbbe371a6, 0xf6a37d74} },}, -/**/ {{{0x3fd6ffff, 0xf81df231} }, -/**/ {{0x3fd80b4b, 0xcfb4dab5} }, -/**/ {{0x40054b4f, 0x8d3ca5d3} }, -/**/ {{0x3bcb4686, 0x679dc99f} },}, -/**/ {{{0x3fd73fff, 0xfa71385e} }, -/**/ {{0x3fd8546f, 0xe007a9b6} }, -/**/ {{0x40050b4b, 0xb3b22176} }, -/**/ {{0xbbcd1540, 0xa5c73477} },}, -/**/ {{{0x3fd78000, 0x024a9c2b} }, -/**/ {{0x3fd89dcb, 0xa7fcf5cf} }, -/**/ {{0x4004cc95, 0x3159cbe1} }, -/**/ {{0xbbdc25ea, 0xd58a6ad0} },}, -/**/ {{{0x3fd7c000, 0x02eb62b8} }, -/**/ {{0x3fd8e75f, 0xec0ba5cf} }, -/**/ {{0x40048f21, 0x8731eeea} }, -/**/ {{0xbbc1cb73, 0xcc1adafb} },}, -/**/ {{{0x3fd80000, 0x054a52d1} }, -/**/ {{0x3fd9312d, 0x8bb822e9} }, -/**/ {{0x400452e6, 0x9170a729} }, -/**/ {{0xbbd8bb17, 0xeac002ee} },}, -/**/ {{{0x3fd83fff, 0xf93a00a3} }, -/**/ {{0x3fd97b35, 0x4bb9ad2a} }, -/**/ {{0x400417da, 0xae924e7f} }, -/**/ {{0x3bd4b800, 0x9a378cc7} },}, -/**/ {{{0x3fd87fff, 0xfbdc91c1} }, -/**/ {{0x3fd9c578, 0x2771b601} }, -/**/ {{0x4003ddf4, 0x78855799} }, -/**/ {{0x3bd9077d, 0xa00445d9} },}, -/**/ {{{0x3fd8bfff, 0xf6d215e6} }, -/**/ {{0x3fda0ff6, 0xe0ea4a0b} }, -/**/ {{0x4003a52b, 0x189a0989} }, -/**/ {{0xbbda6831, 0x89c0613d} },}, -/**/ {{{0x3fd90000, 0x02f734ef} }, -/**/ {{0x3fda5ab2, 0x736bf579} }, -/**/ {{0x40036d75, 0xe9244ca6} }, -/**/ {{0x3be3a6d8, 0x4b722377} },}, -/**/ {{{0x3fd94000, 0x04eef8b4} }, -/**/ {{0x3fdaa5ab, 0x9fb6e3d0} }, -/**/ {{0x400336cc, 0xc9089cb7} }, -/**/ {{0x3b9f6963, 0x22cc00bb} },}, -/**/ {{{0x3fd98000, 0x041ec76a} }, -/**/ {{0x3fdaf0e3, 0x5176c7e4} }, -/**/ {{0x40030127, 0xcb0b9506} }, -/**/ {{0x3bb1ffdb, 0x5385a849} },}, -/**/ {{{0x3fd9c000, 0x08044e47} }, -/**/ {{0x3fdb3c5a, 0x77071224} }, -/**/ {{0x4002cc7f, 0x50d75ec7} }, -/**/ {{0xbbb0fade, 0x78effc8a} },}, -/**/ {{{0x3fda0000, 0x01f8235b} }, -/**/ {{0x3fdb8811, 0xe725782e} }, -/**/ {{0x400298cc, 0x18fbfb37} }, -/**/ {{0xbbe55ed3, 0x3b50e71b} },}, -/**/ {{{0x3fda3fff, 0xfb8c6f08} }, -/**/ {{0x3fdbd40a, 0x97b086f3} }, -/**/ {{0x40026607, 0x154de04b} }, -/**/ {{0xbbdec65e, 0x455faae3} },}, -/**/ {{{0x3fda7fff, 0xfb3d63e1} }, -/**/ {{0x3fdc2045, 0x7d9a3b8a} }, -/**/ {{0x40023429, 0x7e60bfbb} }, -/**/ {{0x3be3001c, 0x154ebd33} },}, -/**/ {{{0x3fdabfff, 0xf5f45c48} }, -/**/ {{0x3fdc6cc3, 0x7b8d45e6} }, -/**/ {{0x4002032c, 0xdb1ace69} }, -/**/ {{0xbbe5ebf8, 0x3ed33616} },}, -/**/ {{{0x3fdb0000, 0x0508b34c} }, -/**/ {{0x3fdcb985, 0xa27e8d37} }, -/**/ {{0x4001d30a, 0xd4459a2b} }, -/**/ {{0xbbd01432, 0xae61e2d1} },}, -/**/ {{{0x3fdb4000, 0x0a84710c} }, -/**/ {{0x3fdd068c, 0xc3e50155} }, -/**/ {{0x4001a3bd, 0x775034dd} }, -/**/ {{0xbbe80b1e, 0x58e0e228} },}, -/**/ {{{0x3fdb7fff, 0xf692e9d8} }, -/**/ {{0x3fdd53d9, 0xc49d6627} }, -/**/ {{0x4001753e, 0xfe18066a} }, -/**/ {{0xbbb004c8, 0xf760d33e} },}, -/**/ {{{0x3fdbc000, 0x0280f14d} }, -/**/ {{0x3fdda16d, 0xe4e81013} }, -/**/ {{0x40014789, 0xa38ea052} }, -/**/ {{0x3be848bc, 0x27c9c4ea} },}, -/**/ {{{0x3fdc0000, 0x001121d1} }, -/**/ {{0x3fddef49, 0xeac018f0} }, -/**/ {{0x40011a98, 0x20b8be0c} }, -/**/ {{0xbbe1527e, 0xd0d6010e} },}, -/**/ {{{0x3fdc3fff, 0xfef662aa} }, -/**/ {{0x3fde3d6e, 0xea0c7070} }, -/**/ {{0x4000ee65, 0x32f46ccd} }, -/**/ {{0x3be8d241, 0x189a000d} },}, -/**/ {{{0x3fdc8000, 0x09845818} }, -/**/ {{0x3fde8bdd, 0xf36a8b1b} }, -/**/ {{0x4000c2eb, 0xcac73476} }, -/**/ {{0x3bd221f7, 0x12bed284} },}, -/**/ {{{0x3fdcbfff, 0xfb0493bf} }, -/**/ {{0x3fdeda97, 0xe0c60d10} }, -/**/ {{0x40009827, 0x251c7836} }, -/**/ {{0xbbe0bd54, 0x6eec41b7} },}, -/**/ {{{0x3fdcffff, 0xfd52961f} }, -/**/ {{0x3fdf299d, 0xefb3e44b} }, -/**/ {{0x40006e12, 0x74e459f5} }, -/**/ {{0xbbd93f77, 0xe969c82f} },}, -/**/ {{{0x3fdd3fff, 0xfe2319a4} }, -/**/ {{0x3fdf78f1, 0x17139490} }, -/**/ {{0x400044a9, 0x3e737e94} }, -/**/ {{0xbb91e7cc, 0x49594b7a} },}, -/**/ {{{0x3fdd7fff, 0xfa4de596} }, -/**/ {{0x3fdfc892, 0x638f49e8} }, -/**/ {{0x40001be7, 0x231057a5} }, -/**/ {{0x3bd482b0, 0xf5af9f5f} },}, -/**/ {{{0x3fddbfff, 0xfe729a69} }, -/**/ {{0x3fe00c41, 0x7c6ab019} }, -/**/ {{0x3fffe78f, 0xbf612660} }, -/**/ {{0x3bea5cda, 0x00da681e} },}, -/**/ {{{0x3fde0000, 0x09d66802} }, -/**/ {{0x3fe03461, 0xf6b883cf} }, -/**/ {{0x3fff988e, 0xbc05a87c} }, -/**/ {{0xbbe06c33, 0xf2372669} },}, -/**/ {{{0x3fde3fff, 0xfb211657} }, -/**/ {{0x3fe05cab, 0x191db8e8} }, -/**/ {{0x3fff4ac3, 0x7bcfe6be} }, -/**/ {{0xbbd5d51f, 0x5ed8d35b} },}, -/**/ {{{0x3fde8000, 0x0a3f068a} }, -/**/ {{0x3fe0851d, 0x95fb54f0} }, -/**/ {{0x3ffefe26, 0x144ca408} }, -/**/ {{0xbbc7c894, 0xa2c169c5} },}, -/**/ {{{0x3fdec000, 0x01adb060} }, -/**/ {{0x3fe0adb9, 0xdc7b54f9} }, -/**/ {{0x3ffeb2af, 0x5ebe52a7} }, -/**/ {{0x3bd4e740, 0x312c5ffd} },}, -/**/ {{{0x3fdeffff, 0xff5c0d01} }, -/**/ {{0x3fe0d680, 0x92550a8d} }, -/**/ {{0x3ffe6858, 0x0d71fdf0} }, -/**/ {{0x3bddd8a6, 0x96b35499} },}, -/**/ {{{0x3fdf3fff, 0xf93d5fcc} }, -/**/ {{0x3fe0ff72, 0x45cb4374} }, -/**/ {{0x3ffe1f19, 0x3cce5040} }, -/**/ {{0xbbc9f0ec, 0x7c1efab4} },}, -/**/ {{{0x3fdf7fff, 0xfa0dd18f} }, -/**/ {{0x3fe1288f, 0x944dd508} }, -/**/ {{0x3ffdd6ec, 0x298b874d} }, -/**/ {{0x3bea6ebd, 0x9642a0a6} },}, -/**/ {{{0x3fdfbfff, 0xfd3a9f1a} }, -/**/ {{0x3fe151d9, 0x13750f3e} }, -/**/ {{0x3ffd8fca, 0x5806a27e} }, -/**/ {{0x3bda2a03, 0xfc65ac7a} },}, -/**/ {{{0x3fdfffff, 0xfc481400} }, -/**/ {{0x3fe17b4f, 0x598944ca} }, -/**/ {{0x3ffd49ad, 0x82532170} }, -/**/ {{0x3bc4412e, 0x3d236dc3} },}, -/**/ {{{0x3fe01fff, 0xff53786c} }, -/**/ {{0x3fe1a4f3, 0x07d83d47} }, -/**/ {{0x3ffd048f, 0x851bffeb} }, -/**/ {{0x3bd1589d, 0x29f81b14} },}, -/**/ {{{0x3fe03fff, 0xfee301b7} }, -/**/ {{0x3fe1cec4, 0xb8a6a382} }, -/**/ {{0x3ffcc06a, 0x7c519db6} }, -/**/ {{0x3bd370e6, 0x5b24d6b2} },}, -/**/ {{{0x3fe06000, 0x006e36bf} }, -/**/ {{0x3fe1f8c5, 0x114eb8be} }, -/**/ {{0x3ffc7d38, 0xa34d6786} }, -/**/ {{0xbbea92de, 0x4b98c1d4} },}, -/**/ {{{0x3fe07fff, 0xfd60aa43} }, -/**/ {{0x3fe222f4, 0xabeccecb} }, -/**/ {{0x3ffc3af4, 0x77342ac4} }, -/**/ {{0xbbdd47f6, 0x03a5c2c2} },}, -/**/ {{{0x3fe0a000, 0x037762e8} }, -/**/ {{0x3fe24d54, 0x3f99efe8} }, -/**/ {{0x3ffbf998, 0x75f54fab} }, -/**/ {{0x3bedf7f4, 0x15771a46} },}, -/**/ {{{0x3fe0bfff, 0xff1c6921} }, -/**/ {{0x3fe277e4, 0x598e35d0} }, -/**/ {{0x3ffbb91f, 0x8addd186} }, -/**/ {{0x3be0f16c, 0x5e0e5a73} },}, -/**/ {{{0x3fe0dfff, 0xff07154b} }, -/**/ {{0x3fe2a2a5, 0xb6bc3986} }, -/**/ {{0x3ffb7984, 0x8301646d} }, -/**/ {{0xbbf02dd0, 0xbbaa5310} },}, -/**/ {{{0x3fe10000, 0x02fcdda4} }, -/**/ {{0x3fe2cd99, 0x02a59f1e} }, -/**/ {{0x3ffb3ac2, 0x705219bf} }, -/**/ {{0xbbe59357, 0x112fa616} },}, -/**/ {{{0x3fe12000, 0x01ce1140} }, -/**/ {{0x3fe2f8be, 0xdf0a67c2} }, -/**/ {{0x3ffafcd4, 0x9ab8ae2a} }, -/**/ {{0x3be2c542, 0x9303f346} },}, -/**/ {{{0x3fe14000, 0x04d0f355} }, -/**/ {{0x3fe32418, 0x08fcc7bf} }, -/**/ {{0x3ffabfb6, 0x497b9a36} }, -/**/ {{0x3bebc044, 0xb5a59234} },}, -/**/ {{{0x3fe16000, 0x00fb0c8a} }, -/**/ {{0x3fe34fa5, 0x2471618b} }, -/**/ {{0x3ffa8363, 0x0d26d117} }, -/**/ {{0xbbdbfbb2, 0x3f7bb7c9} },}, -/**/ {{{0x3fe18000, 0x026f10b3} }, -/**/ {{0x3fe37b66, 0xf7579056} }, -/**/ {{0x3ffa47d6, 0x6b4cf4b1} }, -/**/ {{0x3bf0f6b4, 0xaf0b5de9} },}, -/**/ {{{0x3fe19fff, 0xfd0978f8} }, -/**/ {{0x3fe3a75e, 0x290cc78c} }, -/**/ {{0x3ffa0d0c, 0x36c21315} }, -/**/ {{0x3beb2129, 0xa296b262} },}, -/**/ {{{0x3fe1bfff, 0xfd94840b} }, -/**/ {{0x3fe3d38b, 0x85b4e4a4} }, -/**/ {{0x3ff9d300, 0x32f2ecef} }, -/**/ {{0xbbdbab1a, 0xb9bb7d74} },}, -/**/ {{{0x3fe1dfff, 0xfbda1ea1} }, -/**/ {{0x3fe3ffef, 0xbf3cee2f} }, -/**/ {{0x3ff999ae, 0x6770fed8} }, -/**/ {{0x3bda0bdc, 0xb4ace9a4} },}, -/**/ {{{0x3fe1ffff, 0xfc989533} }, -/**/ {{0x3fe42c8b, 0x9c27900c} }, -/**/ {{0x3ff96112, 0xe0d9f1ac} }, -/**/ {{0xbbee19eb, 0x2fa2d81a} },}, -/**/ {{{0x3fe22000, 0x012b8d26} }, -/**/ {{0x3fe4595f, 0xe11975ca} }, -/**/ {{0x3ff92929, 0xcdaa4e80} }, -/**/ {{0x3bf23382, 0xacc82d4b} },}, -/**/ {{{0x3fe24000, 0x04f4d6af} }, -/**/ {{0x3fe4866d, 0x4d224131} }, -/**/ {{0x3ff8f1ef, 0x815c34e8} }, -/**/ {{0xbbd0c6ff, 0x3b740a99} },}, -/**/ {{{0x3fe25fff, 0xfcc07bda} }, -/**/ {{0x3fe4b3b4, 0x98b7d010} }, -/**/ {{0x3ff8bb60, 0x73e7ffa1} }, -/**/ {{0x3bebc31b, 0x1ad7a9c2} },}, -/**/ {{{0x3fe28000, 0x042d9639} }, -/**/ {{0x3fe4e136, 0xb64540d1} }, -/**/ {{0x3ff88578, 0xf4374938} }, -/**/ {{0x3be36de9, 0x1b85e901} },}, -/**/ {{{0x3fe2a000, 0x03be29a0} }, -/**/ {{0x3fe50ef4, 0x52bffd96} }, -/**/ {{0x3ff85035, 0xc0042c06} }, -/**/ {{0x3be15d01, 0x76f5efbd} },}, -/**/ {{{0x3fe2bfff, 0xfaa91f12} }, -/**/ {{0x3fe53cee, 0x3e2f4e0d} }, -/**/ {{0x3ff81b93, 0x8542df07} }, -/**/ {{0x3be555cd, 0x17662a2b} },}, -/**/ {{{0x3fe2dfff, 0xfe884891} }, -/**/ {{0x3fe56b25, 0x6c1a2470} }, -/**/ {{0x3ff7e78e, 0xe422ea70} }, -/**/ {{0x3bf03504, 0xbd030c11} },}, -/**/ {{{0x3fe2ffff, 0xfe87152b} }, -/**/ {{0x3fe5999a, 0x9beaaaa1} }, -/**/ {{0x3ff7b424, 0xd18fe9b3} }, -/**/ {{0xbb649a5f, 0x773e0e64} },}, -/**/ {{{0x3fe31fff, 0xffc1a721} }, -/**/ {{0x3fe5c84e, 0xafe0e564} }, -/**/ {{0x3ff78152, 0x338db8d4} }, -/**/ {{0x3beaf428, 0x5da8e935} },}, -/**/ {{{0x3fe33fff, 0xff70a372} }, -/**/ {{0x3fe5f742, 0x82191d64} }, -/**/ {{0x3ff74f14, 0x1122bcae} }, -/**/ {{0x3bdb1c4b, 0xdee4bfaf} },}, -/**/ {{{0x3fe36000, 0x0436e836} }, -/**/ {{0x3fe62676, 0xfde6ccff} }, -/**/ {{0x3ff71d67, 0x7644252c} }, -/**/ {{0xbbec3d10, 0xe08c3afb} },}, -/**/ {{{0x3fe37fff, 0xfcbe9641} }, -/**/ {{0x3fe655ec, 0xee9ffdaf} }, -/**/ {{0x3ff6ec49, 0xa6fc0515} }, -/**/ {{0x3bdda453, 0x2ed29567} },}, -/**/ {{{0x3fe39fff, 0xffb6d6ca} }, -/**/ {{0x3fe685a5, 0x5e67a1e1} }, -/**/ {{0x3ff6bbb7, 0xbc2ae969} }, -/**/ {{0x3becbf7b, 0x2ef43882} },}, -/**/ {{{0x3fe3c000, 0x04934fec} }, -/**/ {{0x3fe6b5a1, 0x2cc07d75} }, -/**/ {{0x3ff68baf, 0x10b02ef8} }, -/**/ {{0xbbe7c8fb, 0xfeb7cabd} },}, -/**/ {{{0x3fe3e000, 0x03f5cf7f} }, -/**/ {{0x3fe6e5e1, 0x3e59def6} }, -/**/ {{0x3ff65c2d, 0x0e61500f} }, -/**/ {{0xbbe30ba4, 0x035f7845} },}, -/**/ {{{0x3fe40000, 0x05280ad9} }, -/**/ {{0x3fe71666, 0x91ab4c3e} }, -/**/ {{0x3ff62d2f, 0x19f01c90} }, -/**/ {{0xbbf1e9f5, 0xffe95f6a} },}, -/**/ {{{0x3fe42000, 0x049efb65} }, -/**/ {{0x3fe74732, 0x18af3b9d} }, -/**/ {{0x3ff5feb2, 0xb86465e4} }, -/**/ {{0x3bc4cad7, 0x280d591e} },}, -/**/ {{{0x3fe44000, 0x0035ccb6} }, -/**/ {{0x3fe77844, 0xcb4ff1e5} }, -/**/ {{0x3ff5d0b5, 0x7c455428} }, -/**/ {{0x3bed8c18, 0x7ba5617c} },}, -/**/ {{{0x3fe46000, 0x03346717} }, -/**/ {{0x3fe7a99f, 0xba258778} }, -/**/ {{0x3ff5a334, 0xf4392254} }, -/**/ {{0xbbefd14a, 0xfc84a570} },}, -/**/ {{{0x3fe48000, 0x03002575} }, -/**/ {{0x3fe7db43, 0xd836768f} }, -/**/ {{0x3ff5762e, 0xdcf97e0c} }, -/**/ {{0xbbdd7eba, 0x5f5df49e} },}, -/**/ {{{0x3fe4a000, 0x055bf381} }, -/**/ {{0x3fe80d32, 0x35edeefa} }, -/**/ {{0x3ff549a0, 0xea46e31f} }, -/**/ {{0xbbdba522, 0x76823eac} },}, -/**/ {{{0x3fe4c000, 0x04ce10e3} }, -/**/ {{0x3fe83f6b, 0xd67dc1a8} }, -/**/ {{0x3ff51d88, 0xed82bcc4} }, -/**/ {{0xbbeae92d, 0x077d29ea} },}, -/**/ {{{0x3fe4e000, 0x016c60e1} }, -/**/ {{0x3fe871f1, 0xca0aaf31} }, -/**/ {{0x3ff4f1e4, 0xbdacbf16} }, -/**/ {{0x3be82958, 0x46ee425e} },}, -/**/ {{{0x3fe4ffff, 0xff966f0a} }, -/**/ {{0x3fe8a4c5, 0x2bff2dae} }, -/**/ {{0x3ff4c6b2, 0x3917657e} }, -/**/ {{0xbbf127c2, 0x5c86c705} },}, -/**/ {{{0x3fe52000, 0x0076e6eb} }, -/**/ {{0x3fe8d7e7, 0x175651e8} }, -/**/ {{0x3ff49bef, 0x4f459b05} }, -/**/ {{0xbbb1e9d1, 0x4181bbfc} },}, -/**/ {{{0x3fe54000, 0x03d12d3b} }, -/**/ {{0x3fe90b58, 0xa976ed56} }, -/**/ {{0x3ff47199, 0xfdf24af4} }, -/**/ {{0x3be38c17, 0xc30decaf} },}, -/**/ {{{0x3fe55fff, 0xfce7fa8d} }, -/**/ {{0x3fe93f1a, 0xf03a3a09} }, -/**/ {{0x3ff447b0, 0x5f13234b} }, -/**/ {{0x3bf1b8b2, 0x70df7e20} },}, -/**/ {{{0x3fe58000, 0x0331b46a} }, -/**/ {{0x3fe9732f, 0x38e83134} }, -/**/ {{0x3ff41e30, 0x68d8b41b} }, -/**/ {{0xbbee24d8, 0xb90bc28b} },}, -/**/ {{{0x3fe59fff, 0xfc14848e} }, -/**/ {{0x3fe9a796, 0x8471b489} }, -/**/ {{0x3ff3f518, 0x5de3aa73} }, -/**/ {{0xbbecacd9, 0xe0761536} },}, -/**/ {{{0x3fe5bfff, 0xfb7cd395} }, -/**/ {{0x3fe9dc52, 0x24a8b955} }, -/**/ {{0x3ff3cc66, 0x4f8fff15} }, -/**/ {{0xbbf67c97, 0x82045611} },}, -/**/ {{{0x3fe5e000, 0x000dcc40} }, -/**/ {{0x3fea1163, 0x4df5b93e} }, -/**/ {{0x3ff3a418, 0x75853228} }, -/**/ {{0xbbf585da, 0xd481f350} },}, -/**/ {{{0x3fe60000, 0x02efd2fc} }, -/**/ {{0x3fea46cb, 0x30d16323} }, -/**/ {{0x3ff37c2d, 0x187962ae} }, -/**/ {{0x3bf004c3, 0xa5f77bb0} },}, -/**/ {{{0x3fe61fff, 0xfeb8088a} }, -/**/ {{0x3fea7c8b, 0x053920c0} }, -/**/ {{0x3ff354a2, 0x891769a9} }, -/**/ {{0x3bbc6b30, 0x3fee3029} },}, -/**/ {{{0x3fe64000, 0x00f3ca06} }, -/**/ {{0x3feab2a4, 0x28a1911a} }, -/**/ {{0x3ff32d77, 0x0a6f0a4a} }, -/**/ {{0x3bf2a6f8, 0xfac5081a} },}, -/**/ {{{0x3fe65fff, 0xfe9ec2f4} }, -/**/ {{0x3feae917, 0xd4ce7239} }, -/**/ {{0x3ff306a9, 0x0751a948} }, -/**/ {{0xbbe950b5, 0x51ab9dbd} },}, -/**/ {{{0x3fe68000, 0x03d43966} }, -/**/ {{0x3feb1fe7, 0x708b998a} }, -/**/ {{0x3ff2e036, 0xd7a153c7} }, -/**/ {{0x3bdd36e2, 0xa1e4a14e} },}, -/**/ {{{0x3fe69fff, 0xfab67783} }, -/**/ {{0x3feb5714, 0x2e575464} }, -/**/ {{0x3ff2ba1f, 0x05006cb6} }, -/**/ {{0x3bea9a4a, 0x473c2e31} },}, -/**/ {{{0x3fe6bfff, 0xfcb65f89} }, -/**/ {{0x3feb8e9f, 0x981efd2f} }, -/**/ {{0x3ff2945f, 0xe948d9f7} }, -/**/ {{0xbbca5294, 0xe802df72} },}, -/**/ {{{0x3fe6dfff, 0xfc5609a9} }, -/**/ {{0x3febc68a, 0xfaed6ff1} }, -/**/ {{0x3ff26ef8, 0x1533411e} }, -/**/ {{0xbbf89153, 0xf51bc566} },}, -/**/ {{{0x3fe6ffff, 0xfc4eef86} }, -/**/ {{0x3febfed7, 0xc62205fe} }, -/**/ {{0x3ff249e6, 0x0e70978c} }, -/**/ {{0x3bc39021, 0xa2b9ff56} },}, -/**/ {{{0x3fe72000, 0x004d98b3} }, -/**/ {{0x3fec3787, 0x716968ad} }, -/**/ {{0x3ff22528, 0x61be7751} }, -/**/ {{0x3befc9c5, 0x74ee2211} },}, -/**/ {{{0x3fe73fff, 0xfc155075} }, -/**/ {{0x3fec709b, 0x5ec6fd4e} }, -/**/ {{0x3ff200bd, 0xb5d53311} }, -/**/ {{0x3be28a4d, 0xa269ae63} },}, -/**/ {{{0x3fe76000, 0x0498c203} }, -/**/ {{0x3fecaa15, 0x323d08c1} }, -/**/ {{0x3ff1dca4, 0x93433f65} }, -/**/ {{0x3bf8cae4, 0x14a28fb7} },}, -/**/ {{{0x3fe77fff, 0xff1e5636} }, -/**/ {{0x3fece3f6, 0x4147c12c} }, -/**/ {{0x3ff1b8db, 0xbfe294a8} }, -/**/ {{0xbbe7e19c, 0x4b56a744} },}, -/**/ {{{0x3fe7a000, 0x0226d45a} }, -/**/ {{0x3fed1e40, 0x4120eb7f} }, -/**/ {{0x3ff19561, 0xd15f8278} }, -/**/ {{0x3be64b28, 0x032c5d4c} },}, -/**/ {{{0x3fe7c000, 0x0250a5aa} }, -/**/ {{0x3fed58f4, 0xb112a1e1} }, -/**/ {{0x3ff17235, 0x8a59d565} }, -/**/ {{0xbbe716de, 0xb8dc7867} },}, -/**/ {{{0x3fe7e000, 0x0482f82e} }, -/**/ {{0x3fed9415, 0x3576bdf0} }, -/**/ {{0x3ff14f55, 0xa22a1c5b} }, -/**/ {{0x3bf207e1, 0xe1305604} },}, -/**/ {{{0x3fe80000, 0x0205003e} }, -/**/ {{0x3fedcfa3, 0x64d69ff7} }, -/**/ {{0x3ff12cc0, 0xe37eb26f} }, -/**/ {{0xbbd52ec6, 0xe32395f8} },}, -/**/ {{{0x3fe81fff, 0xfbf99411} }, -/**/ {{0x3fee0ba0, 0xebf98f51} }, -/**/ {{0x3ff10a76, 0x16ddd5d6} }, -/**/ {{0xbbece0d6, 0x59866045} },}, -/**/ {{{0x3fe84000, 0x0248e3a3} }, -/**/ {{0x3fee480f, 0x9bb7f565} }, -/**/ {{0x3ff0e873, 0xfb84e05c} }, -/**/ {{0x3bf4e5e8, 0x1595df92} },}, -/**/ {{{0x3fe86000, 0x0145c157} }, -/**/ {{0x3fee84f1, 0x0a10b3ab} }, -/**/ {{0x3ff0c6b9, 0x7cbd7b1e} }, -/**/ {{0xbbe19de6, 0xd5f121d0} },}, -/**/ {{{0x3fe88000, 0x022631b9} }, -/**/ {{0x3feec247, 0x0be1f047} }, -/**/ {{0x3ff0a545, 0x6d0b3ee6} }, -/**/ {{0xbbc272b1, 0xa3ba2c6f} },}, -/**/ {{{0x3fe8a000, 0x045f7828} }, -/**/ {{0x3fef0013, 0x6c45ba1c} }, -/**/ {{0x3ff08416, 0xaf2a0f09} }, -/**/ {{0x3be82b56, 0x5b63c799} },}, -/**/ {{{0x3fe8bfff, 0xffc686cf} }, -/**/ {{0x3fef3e57, 0xf03c824b} }, -/**/ {{0x3ff0632c, 0x33502220} }, -/**/ {{0xbbd039ad, 0x2dbeeb25} },}, -/**/ {{{0x3fe8dfff, 0xfd8644c6} }, -/**/ {{0x3fef7d16, 0x8774261d} }, -/**/ {{0x3ff04284, 0xdd5b3019} }, -/**/ {{0x3bd79f33, 0xe1eba933} },}, -/**/ {{{0x3fe8ffff, 0xfe4e7937} }, -/**/ {{0x3fefbc51, 0x1a99a641} }, -/**/ {{0x3ff0221f, 0x9f69840b} }, -/**/ {{0xbbea9e84, 0x7beee018} },}, -/**/ {{{0x3fe92000, 0x0435251f} }, -/**/ {{0x3feffc09, 0x9eb22390} }, -/**/ {{0x3ff001fb, 0x6f7c51e8} }, -/**/ {{0xbb5a12e7, 0x31032e0a} },}, - }; - -#else -#ifdef LITTLE_ENDI -static const number - xfg[186][4] = { /* xi,Fi,Gi,FFi, i=16..201 */ -/**/ {{{0x1e519d60, 0x3fb00000} }, -/**/ {{0x96c4e240, 0x3fb00557} }, -/**/ {{0x628127b7, 0x402ff554} }, -/**/ {{0x9e355b06, 0xbb9a1dee} },}, -/**/ {{{0x1b1a7010, 0x3fb10000} }, -/**/ {{0xaab892b7, 0x3fb10668} }, -/**/ {{0xbe3fdf74, 0x402e12c7} }, -/**/ {{0x037da741, 0x3ba89234} },}, -/**/ {{{0x2505e350, 0x3fb20000} }, -/**/ {{0xff547824, 0x3fb2079b} }, -/**/ {{0xde853633, 0x402c65c5} }, -/**/ {{0xe9614250, 0x3bb7486e} },}, -/**/ {{{0xfcdc4252, 0x3fb2ffff} }, -/**/ {{0x5eb16c68, 0x3fb308f3} }, -/**/ {{0xe56be74f, 0x402ae5da} }, -/**/ {{0x91a23034, 0xbb82c726} },}, -/**/ {{{0xe3ff849f, 0x3fb3ffff} }, -/**/ {{0x154999cc, 0x3fb40a71} }, -/**/ {{0x046b7352, 0x40298c43} }, -/**/ {{0x3843738f, 0x3b9aceaf} },}, -/**/ {{{0xedc9590f, 0x3fb4ffff} }, -/**/ {{0x429bdd80, 0x3fb50c17} }, -/**/ {{0x91b5d674, 0x40285384} }, -/**/ {{0xb4403d22, 0xbbc1d02d} },}, -/**/ {{{0x00ee83f7, 0x3fb60000} }, -/**/ {{0xda80cc21, 0x3fb60de7} }, -/**/ {{0xef21a2a7, 0x40273724} }, -/**/ {{0x72523ffd, 0xbb95e53c} },}, -/**/ {{{0xeb05ea41, 0x3fb6ffff} }, -/**/ {{0xb8c51bea, 0x3fb70fe4} }, -/**/ {{0xfae562ff, 0x40263370} }, -/**/ {{0x8ffe0626, 0xbb99ad0e} },}, -/**/ {{{0xdc0515f7, 0x3fb7ffff} }, -/**/ {{0x1db54498, 0x3fb81210} }, -/**/ {{0x0e7eab5c, 0x40254553} }, -/**/ {{0xd62ed686, 0xbb914c87} },}, -/**/ {{{0xe384d7ab, 0x3fb8ffff} }, -/**/ {{0x2a8d3727, 0x3fb9146c} }, -/**/ {{0xfd57f3fd, 0x40246a33} }, -/**/ {{0x5381e06d, 0xbbbbda8d} },}, -/**/ {{{0xe4832347, 0x3fb9ffff} }, -/**/ {{0xd50e1050, 0x3fba16fa} }, -/**/ {{0xc5537a96, 0x40239fe2} }, -/**/ {{0xc111eabb, 0x3bc7f695} },}, -/**/ {{{0x274540e3, 0x3fbb0000} }, -/**/ {{0x7ae68517, 0x3fbb19be} }, -/**/ {{0x3637e946, 0x4022e481} }, -/**/ {{0x8dbd9d93, 0x3bc307f8} },}, -/**/ {{{0xfebf2e9b, 0x3fbbffff} }, -/**/ {{0x8369cd19, 0x3fbc1cb8} }, -/**/ {{0x17aef223, 0x40223676} }, -/**/ {{0x424a9cf3, 0x3bc50038} },}, -/**/ {{{0x23529045, 0x3fbd0000} }, -/**/ {{0xc11d7ef7, 0x3fbd1feb} }, -/**/ {{0xb8e43d4e, 0x4021945f} }, -/**/ {{0x52a6f224, 0x3b812007} },}, -/**/ {{{0xd872a829, 0x3fbdffff} }, -/**/ {{0x8ee4d6b7, 0x3fbe2359} }, -/**/ {{0x76195d5f, 0x4020fd0c} }, -/**/ {{0x85fdca85, 0xbbb4d9ab} },}, -/**/ {{{0xff323b84, 0x3fbeffff} }, -/**/ {{0xec9073e5, 0x3fbf2704} }, -/**/ {{0x3020200f, 0x40206f71} }, -/**/ {{0x12836992, 0x3bb77aa2} },}, -/**/ {{{0x0ce79195, 0x3fc00000} }, -/**/ {{0xbc30cc61, 0x3fc01577} }, -/**/ {{0xd6564a88, 0x401fd549} }, -/**/ {{0x965c0ad0, 0xbbc8926f} },}, -/**/ {{{0xee40e918, 0x3fc07fff} }, -/**/ {{0x8279ac01, 0x3fc0978d} }, -/**/ {{0x9294bc03, 0x401edbb5} }, -/**/ {{0x4aae45d6, 0xbb80a533} },}, -/**/ {{{0x0cc091fd, 0x3fc10000} }, -/**/ {{0x44dfb2f7, 0x3fc119c5} }, -/**/ {{0x067d8e18, 0x401df0bb} }, -/**/ {{0x4ff642a4, 0xbbcc2c18} },}, -/**/ {{{0x0d9936a1, 0x3fc18000} }, -/**/ {{0xb9085a4b, 0x3fc19c1f} }, -/**/ {{0x71ce3629, 0x401d131a} }, -/**/ {{0x0669355b, 0xbbc36553} },}, -/**/ {{{0xed5f3188, 0x3fc1ffff} }, -/**/ {{0xee74bf2d, 0x3fc21e9d} }, -/**/ {{0xff0cd655, 0x401c41b6} }, -/**/ {{0x478ecfc5, 0x3b8867f5} },}, -/**/ {{{0x05f06a51, 0x3fc28000} }, -/**/ {{0x550b313f, 0x3fc2a141} }, -/**/ {{0x1702e6d2, 0x401b7b92} }, -/**/ {{0x380131fe, 0xbbadab51} },}, -/**/ {{{0xfe3d339e, 0x3fc2ffff} }, -/**/ {{0xa75f76df, 0x3fc3240a} }, -/**/ {{0xfcb6409d, 0x401abfc8} }, -/**/ {{0x0d291d83, 0x3bc60bcf} },}, -/**/ {{{0xed888d6f, 0x3fc37fff} }, -/**/ {{0x13cc5db7, 0x3fc3a6fb} }, -/**/ {{0x8ed5320d, 0x401a0d8f} }, -/**/ {{0x4eef03ab, 0x3bb8a48e} },}, -/**/ {{{0x02ca050d, 0x3fc40000} }, -/**/ {{0xe25776bb, 0x3fc42a13} }, -/**/ {{0xfa84c2bc, 0x4019642d} }, -/**/ {{0xcc56516f, 0xbbd0bd5d} },}, -/**/ {{{0xf2531f5c, 0x3fc47fff} }, -/**/ {{0xdeb73404, 0x3fc4ad55} }, -/**/ {{0xf86e9035, 0x4018c2fe} }, -/**/ {{0x5aa287c8, 0x3b9cffe7} },}, -/**/ {{{0x13774992, 0x3fc50000} }, -/**/ {{0x7d0ee307, 0x3fc530c2} }, -/**/ {{0x370caf35, 0x4018296c} }, -/**/ {{0xf91d6532, 0xbbcf75d1} },}, -/**/ {{{0xedddcb2d, 0x3fc57fff} }, -/**/ {{0x5db4347d, 0x3fc5b45a} }, -/**/ {{0x52190c0e, 0x401796ee} }, -/**/ {{0x17d5d076, 0x3b88a25f} },}, -/**/ {{{0xf41949a0, 0x3fc5ffff} }, -/**/ {{0x13bf986a, 0x3fc6381f} }, -/**/ {{0x2d2255fd, 0x40170b09} }, -/**/ {{0xb1bcd5e7, 0xbb9bfb23} },}, -/**/ {{{0xf834d3a1, 0x3fc67fff} }, -/**/ {{0x8ec85952, 0x3fc6bc11} }, -/**/ {{0x62cf2268, 0x4016854c} }, -/**/ {{0x82e39e04, 0x3b9ee53b} },}, -/**/ {{{0xfd9106ea, 0x3fc6ffff} }, -/**/ {{0xf298f6f7, 0x3fc74032} }, -/**/ {{0x1f4f84a9, 0x40160551} }, -/**/ {{0x112634b8, 0xbbb59c4a} },}, -/**/ {{{0x0f649a4f, 0x3fc78000} }, -/**/ {{0x6ca53abc, 0x3fc7c484} }, -/**/ {{0x4809d175, 0x40158ab9} }, -/**/ {{0x73d3cd2e, 0x3bc91c75} },}, -/**/ {{{0xef06bbd8, 0x3fc7ffff} }, -/**/ {{0xdf7d76ad, 0x3fc84906} }, -/**/ {{0xdd2b30a6, 0x4015152e} }, -/**/ {{0x084c3eef, 0xbbbfa2da} },}, -/**/ {{{0x021c6334, 0x3fc88000} }, -/**/ {{0xd965f986, 0x3fc8cdbb} }, -/**/ {{0x51b74296, 0x4014a462} }, -/**/ {{0x74dcfe0b, 0xbb9ec02e} },}, -/**/ {{{0xf38d0756, 0x3fc8ffff} }, -/**/ {{0x28e173c7, 0x3fc952a4} }, -/**/ {{0x17b59ebd, 0x4014380b} }, -/**/ {{0xb77589f0, 0xbbcd0f1c} },}, -/**/ {{{0x104efca1, 0x3fc98000} }, -/**/ {{0x4644d23c, 0x3fc9d7c1} }, -/**/ {{0xcb1eabd5, 0x4013cfe5} }, -/**/ {{0xea188d9e, 0xbbd5d6f7} },}, -/**/ {{{0x09417b30, 0x3fca0000} }, -/**/ {{0x096d76aa, 0x3fca5d14} }, -/**/ {{0xb3723db0, 0x40136bb4} }, -/**/ {{0xfbf3979c, 0x3bbe3e0d} },}, -/**/ {{{0xeb1c23ec, 0x3fca7fff} }, -/**/ {{0xab60288d, 0x3fcae29d} }, -/**/ {{0x783071d7, 0x40130b3e} }, -/**/ {{0x3d5384bf, 0xbbc7dd82} },}, -/**/ {{{0xfb171c13, 0x3fcaffff} }, -/**/ {{0xa221a96b, 0x3fcb685f} }, -/**/ {{0xd8c0747d, 0x4012ae4d} }, -/**/ {{0xd5554972, 0x3bd4644b} },}, -/**/ {{{0x0aba44be, 0x3fcb8000} }, -/**/ {{0xecdf241f, 0x3fcbee5a} }, -/**/ {{0xc6fad63b, 0x401254b1} }, -/**/ {{0xd092b85a, 0x3ba41916} },}, -/**/ {{{0x113d2a3e, 0x3fcc0000} }, -/**/ {{0xb3e92543, 0x3fcc7490} }, -/**/ {{0x9a62c035, 0x4011fe3c} }, -/**/ {{0x41a03739, 0xbba3cc39} },}, -/**/ {{{0xf49e00ce, 0x3fcc7fff} }, -/**/ {{0x0f59eab0, 0x3fccfb02} }, -/**/ {{0xe956a631, 0x4011aac3} }, -/**/ {{0xbfa8cb5b, 0xbbb7a383} },}, -/**/ {{{0x05f611ab, 0x3fcd0000} }, -/**/ {{0x89e6844e, 0x3fcd81b0} }, -/**/ {{0xf391268d, 0x40115a1f} }, -/**/ {{0xb2dc91f3, 0x3bd39b5c} },}, -/**/ {{{0x14764ceb, 0x3fcd8000} }, -/**/ {{0x27debf0d, 0x3fce089d} }, -/**/ {{0xfbc84740, 0x40110c2b} }, -/**/ {{0x84712510, 0x3bc14d4d} },}, -/**/ {{{0x14bcea76, 0x3fce0000} }, -/**/ {{0x16dbc820, 0x3fce8fc9} }, -/**/ {{0xa00ca48e, 0x4010c0c5} }, -/**/ {{0x640f1b9e, 0xbbd33788} },}, -/**/ {{{0xfd7995bd, 0x3fce7fff} }, -/**/ {{0x88b50424, 0x3fcf1735} }, -/**/ {{0xbe02169a, 0x401077cc} }, -/**/ {{0x221fdf77, 0xbbb61fee} },}, -/**/ {{{0x0cc35436, 0x3fcf0000} }, -/**/ {{0xfd21a40b, 0x3fcf9ee3} }, -/**/ {{0x1ee7ffe8, 0x40103123} }, -/**/ {{0xc79ff5c1, 0x3bd427e3} },}, -/**/ {{{0x01d1da33, 0x3fcf8000} }, -/**/ {{0xb7dbe15c, 0x3fd0136a} }, -/**/ {{0x77d559e5, 0x400fd959} }, -/**/ {{0xd67948d7, 0x3bb0c6a1} },}, -/**/ {{{0x060c13b2, 0x3fd00000} }, -/**/ {{0xaaad4f18, 0x3fd05785} }, -/**/ {{0x2675d182, 0x400f549e} }, -/**/ {{0x18f0dd10, 0xbbc15208} },}, -/**/ {{{0x03885492, 0x3fd04000} }, -/**/ {{0x660542d7, 0x3fd09bc3} }, -/**/ {{0xdf3f5fec, 0x400ed3e2} }, -/**/ {{0xb883ae62, 0xbbd95657} },}, -/**/ {{{0x052f5a13, 0x3fd08000} }, -/**/ {{0x9a195045, 0x3fd0e024} }, -/**/ {{0xfa68f2c8, 0x400e56f8} }, -/**/ {{0x5a543e8e, 0x3bded7ba} },}, -/**/ {{{0x02ba1af5, 0x3fd0c000} }, -/**/ {{0xe2e7f24b, 0x3fd124a9} }, -/**/ {{0xbffe633f, 0x400dddb4} }, -/**/ {{0x0c60278f, 0xbbdcba86} },}, -/**/ {{{0xf76642c1, 0x3fd0ffff} }, -/**/ {{0xe162ffe6, 0x3fd16953} }, -/**/ {{0x0311d5d5, 0x400d67ed} }, -/**/ {{0xe40c5f9e, 0x3b7b1f4a} },}, -/**/ {{{0x033602f0, 0x3fd14000} }, -/**/ {{0x5f49508e, 0x3fd1ae23} }, -/**/ {{0xb8708266, 0x400cf57a} }, -/**/ {{0x8620f301, 0xbbd6a6c2} },}, -/**/ {{{0xfefd1a13, 0x3fd17fff} }, -/**/ {{0xdb2a9ba1, 0x3fd1f318} }, -/**/ {{0x8d11009e, 0x400c8639} }, -/**/ {{0x69b21d3b, 0x3bd3a9c6} },}, -/**/ {{{0xf718365d, 0x3fd1bfff} }, -/**/ {{0x0c41e3ac, 0x3fd23835} }, -/**/ {{0xe02be47c, 0x400c1a06} }, -/**/ {{0x129e8cd1, 0x3bdb961a} },}, -/**/ {{{0xff001e00, 0x3fd1ffff} }, -/**/ {{0xb2f6395e, 0x3fd27d78} }, -/**/ {{0xf2fe9a85, 0x400bb0c1} }, -/**/ {{0xe68fd7d8, 0x3be074a9} },}, -/**/ {{{0xfe425a6a, 0x3fd23fff} }, -/**/ {{0x618faabe, 0x3fd2c2e4} }, -/**/ {{0x190b18df, 0x400b4a4c} }, -/**/ {{0xf615aad1, 0xbbdf0d1f} },}, -/**/ {{{0x059ec1db, 0x3fd28000} }, -/**/ {{0xd8583884, 0x3fd30878} }, -/**/ {{0x0cd82bc2, 0x400ae688} }, -/**/ {{0x141c1f8d, 0xbbd563c3} },}, -/**/ {{{0x000dd081, 0x3fd2c000} }, -/**/ {{0xaffdb6d8, 0x3fd34e36} }, -/**/ {{0x5270fc15, 0x400a855a} }, -/**/ {{0x9f2cdafd, 0xbbc6d88d} },}, -/**/ {{{0xfc1dcd2b, 0x3fd2ffff} }, -/**/ {{0xa95875bc, 0x3fd3941e} }, -/**/ {{0xaa9502b6, 0x400a26a8} }, -/**/ {{0x8389b15c, 0xbbe13cad} },}, -/**/ {{{0xf6c0d4a0, 0x3fd33fff} }, -/**/ {{0x739845f5, 0x3fd3da31} }, -/**/ {{0x4d2573a0, 0x4009ca5a} }, -/**/ {{0xacaee379, 0xbbc71636} },}, -/**/ {{{0x06b16793, 0x3fd38000} }, -/**/ {{0xdbc088f0, 0x3fd4206f} }, -/**/ {{0x9344e33a, 0x40097057} }, -/**/ {{0x1d7a4f81, 0xbbc2c052} },}, -/**/ {{{0x07358fa3, 0x3fd3c000} }, -/**/ {{0x6f23311d, 0x3fd466da} }, -/**/ {{0x5aa612ea, 0x4009188a} }, -/**/ {{0x685e8edc, 0x3b8653a5} },}, -/**/ {{{0xfc3b18cf, 0x3fd3ffff} }, -/**/ {{0xe9282e6b, 0x3fd4ad71} }, -/**/ {{0x641e643d, 0x4008c2dd} }, -/**/ {{0x3f567c64, 0x3b95f0ef} },}, -/**/ {{{0x000dd2a8, 0x3fd44000} }, -/**/ {{0x1fa3f2d1, 0x3fd4f437} }, -/**/ {{0x6072f821, 0x40086f3c} }, -/**/ {{0x95ff68b5, 0x3bb68efa} },}, -/**/ {{{0xfbb43713, 0x3fd47fff} }, -/**/ {{0xb3ac333c, 0x3fd53b2a} }, -/**/ {{0x3da56692, 0x40081d94} }, -/**/ {{0x2985fd3f, 0xbbbf4d7f} },}, -/**/ {{{0xfb113bf4, 0x3fd4bfff} }, -/**/ {{0x6e8ed9c2, 0x3fd5824d} }, -/**/ {{0xa8add00f, 0x4007cdd2} }, -/**/ {{0x1c9b3657, 0x3bcf478a} },}, -/**/ {{{0xf7f087c9, 0x3fd4ffff} }, -/**/ {{0x07446496, 0x3fd5c9a0} }, -/**/ {{0x444588eb, 0x40077fe6} }, -/**/ {{0xa4eabb0c, 0xbbc177dc} },}, -/**/ {{{0x088b3814, 0x3fd54000} }, -/**/ {{0x564125f9, 0x3fd61123} }, -/**/ {{0x6281a765, 0x400733be} }, -/**/ {{0xf57051c4, 0xbbc2c52c} },}, -/**/ {{{0xf7d55966, 0x3fd57fff} }, -/**/ {{0xe194a5d5, 0x3fd658d7} }, -/**/ {{0x73b47d1f, 0x4006e94b} }, -/**/ {{0xf9996dc6, 0x3bda2fcf} },}, -/**/ {{{0x08bf2490, 0x3fd5c000} }, -/**/ {{0xb775b28d, 0x3fd6a0be} }, -/**/ {{0x15b6ec28, 0x4006a07e} }, -/**/ {{0xaa5285b8, 0xbbe0ca90} },}, -/**/ {{{0x09fa853f, 0x3fd60000} }, -/**/ {{0x65a66cfd, 0x3fd6e8d8} }, -/**/ {{0x1c701269, 0x40065948} }, -/**/ {{0x8591e13a, 0x3bd9ea95} },}, -/**/ {{{0x07595fca, 0x3fd64000} }, -/**/ {{0xc0556a7c, 0x3fd73125} }, -/**/ {{0xbaae9d02, 0x4006139b} }, -/**/ {{0x40152b83, 0x3bd88aff} },}, -/**/ {{{0x031687da, 0x3fd68000} }, -/**/ {{0x92e2cfd0, 0x3fd779a7} }, -/**/ {{0xcae0882b, 0x4005cf6b} }, -/**/ {{0x9f439451, 0xbbd8a4a2} },}, -/**/ {{{0xf5c8cfe2, 0x3fd6bfff} }, -/**/ {{0x9fb452ed, 0x3fd7c25e} }, -/**/ {{0xc561f1cd, 0x40058cab} }, -/**/ {{0xf6a37d74, 0xbbe371a6} },}, -/**/ {{{0xf81df231, 0x3fd6ffff} }, -/**/ {{0xcfb4dab5, 0x3fd80b4b} }, -/**/ {{0x8d3ca5d3, 0x40054b4f} }, -/**/ {{0x679dc99f, 0x3bcb4686} },}, -/**/ {{{0xfa71385e, 0x3fd73fff} }, -/**/ {{0xe007a9b6, 0x3fd8546f} }, -/**/ {{0xb3b22176, 0x40050b4b} }, -/**/ {{0xa5c73477, 0xbbcd1540} },}, -/**/ {{{0x024a9c2b, 0x3fd78000} }, -/**/ {{0xa7fcf5cf, 0x3fd89dcb} }, -/**/ {{0x3159cbe1, 0x4004cc95} }, -/**/ {{0xd58a6ad0, 0xbbdc25ea} },}, -/**/ {{{0x02eb62b8, 0x3fd7c000} }, -/**/ {{0xec0ba5cf, 0x3fd8e75f} }, -/**/ {{0x8731eeea, 0x40048f21} }, -/**/ {{0xcc1adafb, 0xbbc1cb73} },}, -/**/ {{{0x054a52d1, 0x3fd80000} }, -/**/ {{0x8bb822e9, 0x3fd9312d} }, -/**/ {{0x9170a729, 0x400452e6} }, -/**/ {{0xeac002ee, 0xbbd8bb17} },}, -/**/ {{{0xf93a00a3, 0x3fd83fff} }, -/**/ {{0x4bb9ad2a, 0x3fd97b35} }, -/**/ {{0xae924e7f, 0x400417da} }, -/**/ {{0x9a378cc7, 0x3bd4b800} },}, -/**/ {{{0xfbdc91c1, 0x3fd87fff} }, -/**/ {{0x2771b601, 0x3fd9c578} }, -/**/ {{0x78855799, 0x4003ddf4} }, -/**/ {{0xa00445d9, 0x3bd9077d} },}, -/**/ {{{0xf6d215e6, 0x3fd8bfff} }, -/**/ {{0xe0ea4a0b, 0x3fda0ff6} }, -/**/ {{0x189a0989, 0x4003a52b} }, -/**/ {{0x89c0613d, 0xbbda6831} },}, -/**/ {{{0x02f734ef, 0x3fd90000} }, -/**/ {{0x736bf579, 0x3fda5ab2} }, -/**/ {{0xe9244ca6, 0x40036d75} }, -/**/ {{0x4b722377, 0x3be3a6d8} },}, -/**/ {{{0x04eef8b4, 0x3fd94000} }, -/**/ {{0x9fb6e3d0, 0x3fdaa5ab} }, -/**/ {{0xc9089cb7, 0x400336cc} }, -/**/ {{0x22cc00bb, 0x3b9f6963} },}, -/**/ {{{0x041ec76a, 0x3fd98000} }, -/**/ {{0x5176c7e4, 0x3fdaf0e3} }, -/**/ {{0xcb0b9506, 0x40030127} }, -/**/ {{0x5385a849, 0x3bb1ffdb} },}, -/**/ {{{0x08044e47, 0x3fd9c000} }, -/**/ {{0x77071224, 0x3fdb3c5a} }, -/**/ {{0x50d75ec7, 0x4002cc7f} }, -/**/ {{0x78effc8a, 0xbbb0fade} },}, -/**/ {{{0x01f8235b, 0x3fda0000} }, -/**/ {{0xe725782e, 0x3fdb8811} }, -/**/ {{0x18fbfb37, 0x400298cc} }, -/**/ {{0x3b50e71b, 0xbbe55ed3} },}, -/**/ {{{0xfb8c6f08, 0x3fda3fff} }, -/**/ {{0x97b086f3, 0x3fdbd40a} }, -/**/ {{0x154de04b, 0x40026607} }, -/**/ {{0x455faae3, 0xbbdec65e} },}, -/**/ {{{0xfb3d63e1, 0x3fda7fff} }, -/**/ {{0x7d9a3b8a, 0x3fdc2045} }, -/**/ {{0x7e60bfbb, 0x40023429} }, -/**/ {{0x154ebd33, 0x3be3001c} },}, -/**/ {{{0xf5f45c48, 0x3fdabfff} }, -/**/ {{0x7b8d45e6, 0x3fdc6cc3} }, -/**/ {{0xdb1ace69, 0x4002032c} }, -/**/ {{0x3ed33616, 0xbbe5ebf8} },}, -/**/ {{{0x0508b34c, 0x3fdb0000} }, -/**/ {{0xa27e8d37, 0x3fdcb985} }, -/**/ {{0xd4459a2b, 0x4001d30a} }, -/**/ {{0xae61e2d1, 0xbbd01432} },}, -/**/ {{{0x0a84710c, 0x3fdb4000} }, -/**/ {{0xc3e50155, 0x3fdd068c} }, -/**/ {{0x775034dd, 0x4001a3bd} }, -/**/ {{0x58e0e228, 0xbbe80b1e} },}, -/**/ {{{0xf692e9d8, 0x3fdb7fff} }, -/**/ {{0xc49d6627, 0x3fdd53d9} }, -/**/ {{0xfe18066a, 0x4001753e} }, -/**/ {{0xf760d33e, 0xbbb004c8} },}, -/**/ {{{0x0280f14d, 0x3fdbc000} }, -/**/ {{0xe4e81013, 0x3fdda16d} }, -/**/ {{0xa38ea052, 0x40014789} }, -/**/ {{0x27c9c4ea, 0x3be848bc} },}, -/**/ {{{0x001121d1, 0x3fdc0000} }, -/**/ {{0xeac018f0, 0x3fddef49} }, -/**/ {{0x20b8be0c, 0x40011a98} }, -/**/ {{0xd0d6010e, 0xbbe1527e} },}, -/**/ {{{0xfef662aa, 0x3fdc3fff} }, -/**/ {{0xea0c7070, 0x3fde3d6e} }, -/**/ {{0x32f46ccd, 0x4000ee65} }, -/**/ {{0x189a000d, 0x3be8d241} },}, -/**/ {{{0x09845818, 0x3fdc8000} }, -/**/ {{0xf36a8b1b, 0x3fde8bdd} }, -/**/ {{0xcac73476, 0x4000c2eb} }, -/**/ {{0x12bed284, 0x3bd221f7} },}, -/**/ {{{0xfb0493bf, 0x3fdcbfff} }, -/**/ {{0xe0c60d10, 0x3fdeda97} }, -/**/ {{0x251c7836, 0x40009827} }, -/**/ {{0x6eec41b7, 0xbbe0bd54} },}, -/**/ {{{0xfd52961f, 0x3fdcffff} }, -/**/ {{0xefb3e44b, 0x3fdf299d} }, -/**/ {{0x74e459f5, 0x40006e12} }, -/**/ {{0xe969c82f, 0xbbd93f77} },}, -/**/ {{{0xfe2319a4, 0x3fdd3fff} }, -/**/ {{0x17139490, 0x3fdf78f1} }, -/**/ {{0x3e737e94, 0x400044a9} }, -/**/ {{0x49594b7a, 0xbb91e7cc} },}, -/**/ {{{0xfa4de596, 0x3fdd7fff} }, -/**/ {{0x638f49e8, 0x3fdfc892} }, -/**/ {{0x231057a5, 0x40001be7} }, -/**/ {{0xf5af9f5f, 0x3bd482b0} },}, -/**/ {{{0xfe729a69, 0x3fddbfff} }, -/**/ {{0x7c6ab019, 0x3fe00c41} }, -/**/ {{0xbf612660, 0x3fffe78f} }, -/**/ {{0x00da681e, 0x3bea5cda} },}, -/**/ {{{0x09d66802, 0x3fde0000} }, -/**/ {{0xf6b883cf, 0x3fe03461} }, -/**/ {{0xbc05a87c, 0x3fff988e} }, -/**/ {{0xf2372669, 0xbbe06c33} },}, -/**/ {{{0xfb211657, 0x3fde3fff} }, -/**/ {{0x191db8e8, 0x3fe05cab} }, -/**/ {{0x7bcfe6be, 0x3fff4ac3} }, -/**/ {{0x5ed8d35b, 0xbbd5d51f} },}, -/**/ {{{0x0a3f068a, 0x3fde8000} }, -/**/ {{0x95fb54f0, 0x3fe0851d} }, -/**/ {{0x144ca408, 0x3ffefe26} }, -/**/ {{0xa2c169c5, 0xbbc7c894} },}, -/**/ {{{0x01adb060, 0x3fdec000} }, -/**/ {{0xdc7b54f9, 0x3fe0adb9} }, -/**/ {{0x5ebe52a7, 0x3ffeb2af} }, -/**/ {{0x312c5ffd, 0x3bd4e740} },}, -/**/ {{{0xff5c0d01, 0x3fdeffff} }, -/**/ {{0x92550a8d, 0x3fe0d680} }, -/**/ {{0x0d71fdf0, 0x3ffe6858} }, -/**/ {{0x96b35499, 0x3bddd8a6} },}, -/**/ {{{0xf93d5fcc, 0x3fdf3fff} }, -/**/ {{0x45cb4374, 0x3fe0ff72} }, -/**/ {{0x3cce5040, 0x3ffe1f19} }, -/**/ {{0x7c1efab4, 0xbbc9f0ec} },}, -/**/ {{{0xfa0dd18f, 0x3fdf7fff} }, -/**/ {{0x944dd508, 0x3fe1288f} }, -/**/ {{0x298b874d, 0x3ffdd6ec} }, -/**/ {{0x9642a0a6, 0x3bea6ebd} },}, -/**/ {{{0xfd3a9f1a, 0x3fdfbfff} }, -/**/ {{0x13750f3e, 0x3fe151d9} }, -/**/ {{0x5806a27e, 0x3ffd8fca} }, -/**/ {{0xfc65ac7a, 0x3bda2a03} },}, -/**/ {{{0xfc481400, 0x3fdfffff} }, -/**/ {{0x598944ca, 0x3fe17b4f} }, -/**/ {{0x82532170, 0x3ffd49ad} }, -/**/ {{0x3d236dc3, 0x3bc4412e} },}, -/**/ {{{0xff53786c, 0x3fe01fff} }, -/**/ {{0x07d83d47, 0x3fe1a4f3} }, -/**/ {{0x851bffeb, 0x3ffd048f} }, -/**/ {{0x29f81b14, 0x3bd1589d} },}, -/**/ {{{0xfee301b7, 0x3fe03fff} }, -/**/ {{0xb8a6a382, 0x3fe1cec4} }, -/**/ {{0x7c519db6, 0x3ffcc06a} }, -/**/ {{0x5b24d6b2, 0x3bd370e6} },}, -/**/ {{{0x006e36bf, 0x3fe06000} }, -/**/ {{0x114eb8be, 0x3fe1f8c5} }, -/**/ {{0xa34d6786, 0x3ffc7d38} }, -/**/ {{0x4b98c1d4, 0xbbea92de} },}, -/**/ {{{0xfd60aa43, 0x3fe07fff} }, -/**/ {{0xabeccecb, 0x3fe222f4} }, -/**/ {{0x77342ac4, 0x3ffc3af4} }, -/**/ {{0x03a5c2c2, 0xbbdd47f6} },}, -/**/ {{{0x037762e8, 0x3fe0a000} }, -/**/ {{0x3f99efe8, 0x3fe24d54} }, -/**/ {{0x75f54fab, 0x3ffbf998} }, -/**/ {{0x15771a46, 0x3bedf7f4} },}, -/**/ {{{0xff1c6921, 0x3fe0bfff} }, -/**/ {{0x598e35d0, 0x3fe277e4} }, -/**/ {{0x8addd186, 0x3ffbb91f} }, -/**/ {{0x5e0e5a73, 0x3be0f16c} },}, -/**/ {{{0xff07154b, 0x3fe0dfff} }, -/**/ {{0xb6bc3986, 0x3fe2a2a5} }, -/**/ {{0x8301646d, 0x3ffb7984} }, -/**/ {{0xbbaa5310, 0xbbf02dd0} },}, -/**/ {{{0x02fcdda4, 0x3fe10000} }, -/**/ {{0x02a59f1e, 0x3fe2cd99} }, -/**/ {{0x705219bf, 0x3ffb3ac2} }, -/**/ {{0x112fa616, 0xbbe59357} },}, -/**/ {{{0x01ce1140, 0x3fe12000} }, -/**/ {{0xdf0a67c2, 0x3fe2f8be} }, -/**/ {{0x9ab8ae2a, 0x3ffafcd4} }, -/**/ {{0x9303f346, 0x3be2c542} },}, -/**/ {{{0x04d0f355, 0x3fe14000} }, -/**/ {{0x08fcc7bf, 0x3fe32418} }, -/**/ {{0x497b9a36, 0x3ffabfb6} }, -/**/ {{0xb5a59234, 0x3bebc044} },}, -/**/ {{{0x00fb0c8a, 0x3fe16000} }, -/**/ {{0x2471618b, 0x3fe34fa5} }, -/**/ {{0x0d26d117, 0x3ffa8363} }, -/**/ {{0x3f7bb7c9, 0xbbdbfbb2} },}, -/**/ {{{0x026f10b3, 0x3fe18000} }, -/**/ {{0xf7579056, 0x3fe37b66} }, -/**/ {{0x6b4cf4b1, 0x3ffa47d6} }, -/**/ {{0xaf0b5de9, 0x3bf0f6b4} },}, -/**/ {{{0xfd0978f8, 0x3fe19fff} }, -/**/ {{0x290cc78c, 0x3fe3a75e} }, -/**/ {{0x36c21315, 0x3ffa0d0c} }, -/**/ {{0xa296b262, 0x3beb2129} },}, -/**/ {{{0xfd94840b, 0x3fe1bfff} }, -/**/ {{0x85b4e4a4, 0x3fe3d38b} }, -/**/ {{0x32f2ecef, 0x3ff9d300} }, -/**/ {{0xb9bb7d74, 0xbbdbab1a} },}, -/**/ {{{0xfbda1ea1, 0x3fe1dfff} }, -/**/ {{0xbf3cee2f, 0x3fe3ffef} }, -/**/ {{0x6770fed8, 0x3ff999ae} }, -/**/ {{0xb4ace9a4, 0x3bda0bdc} },}, -/**/ {{{0xfc989533, 0x3fe1ffff} }, -/**/ {{0x9c27900c, 0x3fe42c8b} }, -/**/ {{0xe0d9f1ac, 0x3ff96112} }, -/**/ {{0x2fa2d81a, 0xbbee19eb} },}, -/**/ {{{0x012b8d26, 0x3fe22000} }, -/**/ {{0xe11975ca, 0x3fe4595f} }, -/**/ {{0xcdaa4e80, 0x3ff92929} }, -/**/ {{0xacc82d4b, 0x3bf23382} },}, -/**/ {{{0x04f4d6af, 0x3fe24000} }, -/**/ {{0x4d224131, 0x3fe4866d} }, -/**/ {{0x815c34e8, 0x3ff8f1ef} }, -/**/ {{0x3b740a99, 0xbbd0c6ff} },}, -/**/ {{{0xfcc07bda, 0x3fe25fff} }, -/**/ {{0x98b7d010, 0x3fe4b3b4} }, -/**/ {{0x73e7ffa1, 0x3ff8bb60} }, -/**/ {{0x1ad7a9c2, 0x3bebc31b} },}, -/**/ {{{0x042d9639, 0x3fe28000} }, -/**/ {{0xb64540d1, 0x3fe4e136} }, -/**/ {{0xf4374938, 0x3ff88578} }, -/**/ {{0x1b85e901, 0x3be36de9} },}, -/**/ {{{0x03be29a0, 0x3fe2a000} }, -/**/ {{0x52bffd96, 0x3fe50ef4} }, -/**/ {{0xc0042c06, 0x3ff85035} }, -/**/ {{0x76f5efbd, 0x3be15d01} },}, -/**/ {{{0xfaa91f12, 0x3fe2bfff} }, -/**/ {{0x3e2f4e0d, 0x3fe53cee} }, -/**/ {{0x8542df07, 0x3ff81b93} }, -/**/ {{0x17662a2b, 0x3be555cd} },}, -/**/ {{{0xfe884891, 0x3fe2dfff} }, -/**/ {{0x6c1a2470, 0x3fe56b25} }, -/**/ {{0xe422ea70, 0x3ff7e78e} }, -/**/ {{0xbd030c11, 0x3bf03504} },}, -/**/ {{{0xfe87152b, 0x3fe2ffff} }, -/**/ {{0x9beaaaa1, 0x3fe5999a} }, -/**/ {{0xd18fe9b3, 0x3ff7b424} }, -/**/ {{0x773e0e64, 0xbb649a5f} },}, -/**/ {{{0xffc1a721, 0x3fe31fff} }, -/**/ {{0xafe0e564, 0x3fe5c84e} }, -/**/ {{0x338db8d4, 0x3ff78152} }, -/**/ {{0x5da8e935, 0x3beaf428} },}, -/**/ {{{0xff70a372, 0x3fe33fff} }, -/**/ {{0x82191d64, 0x3fe5f742} }, -/**/ {{0x1122bcae, 0x3ff74f14} }, -/**/ {{0xdee4bfaf, 0x3bdb1c4b} },}, -/**/ {{{0x0436e836, 0x3fe36000} }, -/**/ {{0xfde6ccff, 0x3fe62676} }, -/**/ {{0x7644252c, 0x3ff71d67} }, -/**/ {{0xe08c3afb, 0xbbec3d10} },}, -/**/ {{{0xfcbe9641, 0x3fe37fff} }, -/**/ {{0xee9ffdaf, 0x3fe655ec} }, -/**/ {{0xa6fc0515, 0x3ff6ec49} }, -/**/ {{0x2ed29567, 0x3bdda453} },}, -/**/ {{{0xffb6d6ca, 0x3fe39fff} }, -/**/ {{0x5e67a1e1, 0x3fe685a5} }, -/**/ {{0xbc2ae969, 0x3ff6bbb7} }, -/**/ {{0x2ef43882, 0x3becbf7b} },}, -/**/ {{{0x04934fec, 0x3fe3c000} }, -/**/ {{0x2cc07d75, 0x3fe6b5a1} }, -/**/ {{0x10b02ef8, 0x3ff68baf} }, -/**/ {{0xfeb7cabd, 0xbbe7c8fb} },}, -/**/ {{{0x03f5cf7f, 0x3fe3e000} }, -/**/ {{0x3e59def6, 0x3fe6e5e1} }, -/**/ {{0x0e61500f, 0x3ff65c2d} }, -/**/ {{0x035f7845, 0xbbe30ba4} },}, -/**/ {{{0x05280ad9, 0x3fe40000} }, -/**/ {{0x91ab4c3e, 0x3fe71666} }, -/**/ {{0x19f01c90, 0x3ff62d2f} }, -/**/ {{0xffe95f6a, 0xbbf1e9f5} },}, -/**/ {{{0x049efb65, 0x3fe42000} }, -/**/ {{0x18af3b9d, 0x3fe74732} }, -/**/ {{0xb86465e4, 0x3ff5feb2} }, -/**/ {{0x280d591e, 0x3bc4cad7} },}, -/**/ {{{0x0035ccb6, 0x3fe44000} }, -/**/ {{0xcb4ff1e5, 0x3fe77844} }, -/**/ {{0x7c455428, 0x3ff5d0b5} }, -/**/ {{0x7ba5617c, 0x3bed8c18} },}, -/**/ {{{0x03346717, 0x3fe46000} }, -/**/ {{0xba258778, 0x3fe7a99f} }, -/**/ {{0xf4392254, 0x3ff5a334} }, -/**/ {{0xfc84a570, 0xbbefd14a} },}, -/**/ {{{0x03002575, 0x3fe48000} }, -/**/ {{0xd836768f, 0x3fe7db43} }, -/**/ {{0xdcf97e0c, 0x3ff5762e} }, -/**/ {{0x5f5df49e, 0xbbdd7eba} },}, -/**/ {{{0x055bf381, 0x3fe4a000} }, -/**/ {{0x35edeefa, 0x3fe80d32} }, -/**/ {{0xea46e31f, 0x3ff549a0} }, -/**/ {{0x76823eac, 0xbbdba522} },}, -/**/ {{{0x04ce10e3, 0x3fe4c000} }, -/**/ {{0xd67dc1a8, 0x3fe83f6b} }, -/**/ {{0xed82bcc4, 0x3ff51d88} }, -/**/ {{0x077d29ea, 0xbbeae92d} },}, -/**/ {{{0x016c60e1, 0x3fe4e000} }, -/**/ {{0xca0aaf31, 0x3fe871f1} }, -/**/ {{0xbdacbf16, 0x3ff4f1e4} }, -/**/ {{0x46ee425e, 0x3be82958} },}, -/**/ {{{0xff966f0a, 0x3fe4ffff} }, -/**/ {{0x2bff2dae, 0x3fe8a4c5} }, -/**/ {{0x3917657e, 0x3ff4c6b2} }, -/**/ {{0x5c86c705, 0xbbf127c2} },}, -/**/ {{{0x0076e6eb, 0x3fe52000} }, -/**/ {{0x175651e8, 0x3fe8d7e7} }, -/**/ {{0x4f459b05, 0x3ff49bef} }, -/**/ {{0x4181bbfc, 0xbbb1e9d1} },}, -/**/ {{{0x03d12d3b, 0x3fe54000} }, -/**/ {{0xa976ed56, 0x3fe90b58} }, -/**/ {{0xfdf24af4, 0x3ff47199} }, -/**/ {{0xc30decaf, 0x3be38c17} },}, -/**/ {{{0xfce7fa8d, 0x3fe55fff} }, -/**/ {{0xf03a3a09, 0x3fe93f1a} }, -/**/ {{0x5f13234b, 0x3ff447b0} }, -/**/ {{0x70df7e20, 0x3bf1b8b2} },}, -/**/ {{{0x0331b46a, 0x3fe58000} }, -/**/ {{0x38e83134, 0x3fe9732f} }, -/**/ {{0x68d8b41b, 0x3ff41e30} }, -/**/ {{0xb90bc28b, 0xbbee24d8} },}, -/**/ {{{0xfc14848e, 0x3fe59fff} }, -/**/ {{0x8471b489, 0x3fe9a796} }, -/**/ {{0x5de3aa73, 0x3ff3f518} }, -/**/ {{0xe0761536, 0xbbecacd9} },}, -/**/ {{{0xfb7cd395, 0x3fe5bfff} }, -/**/ {{0x24a8b955, 0x3fe9dc52} }, -/**/ {{0x4f8fff15, 0x3ff3cc66} }, -/**/ {{0x82045611, 0xbbf67c97} },}, -/**/ {{{0x000dcc40, 0x3fe5e000} }, -/**/ {{0x4df5b93e, 0x3fea1163} }, -/**/ {{0x75853228, 0x3ff3a418} }, -/**/ {{0xd481f350, 0xbbf585da} },}, -/**/ {{{0x02efd2fc, 0x3fe60000} }, -/**/ {{0x30d16323, 0x3fea46cb} }, -/**/ {{0x187962ae, 0x3ff37c2d} }, -/**/ {{0xa5f77bb0, 0x3bf004c3} },}, -/**/ {{{0xfeb8088a, 0x3fe61fff} }, -/**/ {{0x053920c0, 0x3fea7c8b} }, -/**/ {{0x891769a9, 0x3ff354a2} }, -/**/ {{0x3fee3029, 0x3bbc6b30} },}, -/**/ {{{0x00f3ca06, 0x3fe64000} }, -/**/ {{0x28a1911a, 0x3feab2a4} }, -/**/ {{0x0a6f0a4a, 0x3ff32d77} }, -/**/ {{0xfac5081a, 0x3bf2a6f8} },}, -/**/ {{{0xfe9ec2f4, 0x3fe65fff} }, -/**/ {{0xd4ce7239, 0x3feae917} }, -/**/ {{0x0751a948, 0x3ff306a9} }, -/**/ {{0x51ab9dbd, 0xbbe950b5} },}, -/**/ {{{0x03d43966, 0x3fe68000} }, -/**/ {{0x708b998a, 0x3feb1fe7} }, -/**/ {{0xd7a153c7, 0x3ff2e036} }, -/**/ {{0xa1e4a14e, 0x3bdd36e2} },}, -/**/ {{{0xfab67783, 0x3fe69fff} }, -/**/ {{0x2e575464, 0x3feb5714} }, -/**/ {{0x05006cb6, 0x3ff2ba1f} }, -/**/ {{0x473c2e31, 0x3bea9a4a} },}, -/**/ {{{0xfcb65f89, 0x3fe6bfff} }, -/**/ {{0x981efd2f, 0x3feb8e9f} }, -/**/ {{0xe948d9f7, 0x3ff2945f} }, -/**/ {{0xe802df72, 0xbbca5294} },}, -/**/ {{{0xfc5609a9, 0x3fe6dfff} }, -/**/ {{0xfaed6ff1, 0x3febc68a} }, -/**/ {{0x1533411e, 0x3ff26ef8} }, -/**/ {{0xf51bc566, 0xbbf89153} },}, -/**/ {{{0xfc4eef86, 0x3fe6ffff} }, -/**/ {{0xc62205fe, 0x3febfed7} }, -/**/ {{0x0e70978c, 0x3ff249e6} }, -/**/ {{0xa2b9ff56, 0x3bc39021} },}, -/**/ {{{0x004d98b3, 0x3fe72000} }, -/**/ {{0x716968ad, 0x3fec3787} }, -/**/ {{0x61be7751, 0x3ff22528} }, -/**/ {{0x74ee2211, 0x3befc9c5} },}, -/**/ {{{0xfc155075, 0x3fe73fff} }, -/**/ {{0x5ec6fd4e, 0x3fec709b} }, -/**/ {{0xb5d53311, 0x3ff200bd} }, -/**/ {{0xa269ae63, 0x3be28a4d} },}, -/**/ {{{0x0498c203, 0x3fe76000} }, -/**/ {{0x323d08c1, 0x3fecaa15} }, -/**/ {{0x93433f65, 0x3ff1dca4} }, -/**/ {{0x14a28fb7, 0x3bf8cae4} },}, -/**/ {{{0xff1e5636, 0x3fe77fff} }, -/**/ {{0x4147c12c, 0x3fece3f6} }, -/**/ {{0xbfe294a8, 0x3ff1b8db} }, -/**/ {{0x4b56a744, 0xbbe7e19c} },}, -/**/ {{{0x0226d45a, 0x3fe7a000} }, -/**/ {{0x4120eb7f, 0x3fed1e40} }, -/**/ {{0xd15f8278, 0x3ff19561} }, -/**/ {{0x032c5d4c, 0x3be64b28} },}, -/**/ {{{0x0250a5aa, 0x3fe7c000} }, -/**/ {{0xb112a1e1, 0x3fed58f4} }, -/**/ {{0x8a59d565, 0x3ff17235} }, -/**/ {{0xb8dc7867, 0xbbe716de} },}, -/**/ {{{0x0482f82e, 0x3fe7e000} }, -/**/ {{0x3576bdf0, 0x3fed9415} }, -/**/ {{0xa22a1c5b, 0x3ff14f55} }, -/**/ {{0xe1305604, 0x3bf207e1} },}, -/**/ {{{0x0205003e, 0x3fe80000} }, -/**/ {{0x64d69ff7, 0x3fedcfa3} }, -/**/ {{0xe37eb26f, 0x3ff12cc0} }, -/**/ {{0xe32395f8, 0xbbd52ec6} },}, -/**/ {{{0xfbf99411, 0x3fe81fff} }, -/**/ {{0xebf98f51, 0x3fee0ba0} }, -/**/ {{0x16ddd5d6, 0x3ff10a76} }, -/**/ {{0x59866045, 0xbbece0d6} },}, -/**/ {{{0x0248e3a3, 0x3fe84000} }, -/**/ {{0x9bb7f565, 0x3fee480f} }, -/**/ {{0xfb84e05c, 0x3ff0e873} }, -/**/ {{0x1595df92, 0x3bf4e5e8} },}, -/**/ {{{0x0145c157, 0x3fe86000} }, -/**/ {{0x0a10b3ab, 0x3fee84f1} }, -/**/ {{0x7cbd7b1e, 0x3ff0c6b9} }, -/**/ {{0xd5f121d0, 0xbbe19de6} },}, -/**/ {{{0x022631b9, 0x3fe88000} }, -/**/ {{0x0be1f047, 0x3feec247} }, -/**/ {{0x6d0b3ee6, 0x3ff0a545} }, -/**/ {{0xa3ba2c6f, 0xbbc272b1} },}, -/**/ {{{0x045f7828, 0x3fe8a000} }, -/**/ {{0x6c45ba1c, 0x3fef0013} }, -/**/ {{0xaf2a0f09, 0x3ff08416} }, -/**/ {{0x5b63c799, 0x3be82b56} },}, -/**/ {{{0xffc686cf, 0x3fe8bfff} }, -/**/ {{0xf03c824b, 0x3fef3e57} }, -/**/ {{0x33502220, 0x3ff0632c} }, -/**/ {{0x2dbeeb25, 0xbbd039ad} },}, -/**/ {{{0xfd8644c6, 0x3fe8dfff} }, -/**/ {{0x8774261d, 0x3fef7d16} }, -/**/ {{0xdd5b3019, 0x3ff04284} }, -/**/ {{0xe1eba933, 0x3bd79f33} },}, -/**/ {{{0xfe4e7937, 0x3fe8ffff} }, -/**/ {{0x1a99a641, 0x3fefbc51} }, -/**/ {{0x9f69840b, 0x3ff0221f} }, -/**/ {{0x7beee018, 0xbbea9e84} },}, -/**/ {{{0x0435251f, 0x3fe92000} }, -/**/ {{0x9eb22390, 0x3feffc09} }, -/**/ {{0x6f7c51e8, 0x3ff001fb} }, -/**/ {{0x31032e0a, 0xbb5a12e7} },}, - }; - -#endif -#endif diff --git a/sysdeps/ieee754/dbl-64/w_exp_compat.c b/sysdeps/ieee754/dbl-64/w_exp_compat.c deleted file mode 100644 index e61e03b335..0000000000 --- a/sysdeps/ieee754/dbl-64/w_exp_compat.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* wrapper exp */ -double -__exp (double x) -{ - double z = __ieee754_exp (x); - if (__builtin_expect (!isfinite (z) || z == 0, 0) - && isfinite (x) && _LIB_VERSION != _IEEE_) - return __kernel_standard (x, x, 6 + !!signbit (x)); - - return z; -} -hidden_def (__exp) -weak_alias (__exp, exp) -#ifdef NO_LONG_DOUBLE -strong_alias (__exp, __expl) -weak_alias (__exp, expl) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c b/sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c deleted file mode 100644 index ccccdaf106..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Optimized for 64-bit by Ulrich Drepper , 2012 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_acosh(x) - * Method : - * Based on - * acosh(x) = log [ x + sqrt(x*x-1) ] - * we have - * acosh(x) := log(x)+ln2, if x is large; else - * acosh(x) := log(2x-1/(sqrt(x*x-1)+x)) if x>2; else - * acosh(x) := log1p(t+sqrt(2.0*t+t*t)); where t=x-1. - * - * Special cases: - * acosh(x) is NaN with signal if x<1. - * acosh(NaN) is NaN without signal. - */ - -#include -#include - -static const double -one = 1.0, -ln2 = 6.93147180559945286227e-01; /* 0x3FE62E42, 0xFEFA39EF */ - -double -__ieee754_acosh (double x) -{ - int64_t hx; - EXTRACT_WORDS64 (hx, x); - - if (hx > INT64_C (0x4000000000000000)) - { - if (__glibc_unlikely (hx >= INT64_C (0x41b0000000000000))) - { - /* x > 2**28 */ - if (hx >= INT64_C (0x7ff0000000000000)) - /* x is inf of NaN */ - return x + x; - else - return __ieee754_log (x) + ln2;/* acosh(huge)=log(2x) */ - } - - /* 2**28 > x > 2 */ - double t = x * x; - return __ieee754_log (2.0 * x - one / (x + __ieee754_sqrt (t - one))); - } - else if (__glibc_likely (hx > INT64_C (0x3ff0000000000000))) - { - /* 1, 2011 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_cosh(x) - * Method : - * mathematically cosh(x) if defined to be (exp(x)+exp(-x))/2 - * 1. Replace x by |x| (cosh(x) = cosh(-x)). - * 2. - * [ exp(x) - 1 ]^2 - * 0 <= x <= ln2/2 : cosh(x) := 1 + ------------------- - * 2*exp(x) - * - * exp(x) + 1/exp(x) - * ln2/2 <= x <= 22 : cosh(x) := ------------------- - * 2 - * 22 <= x <= lnovft : cosh(x) := exp(x)/2 - * lnovft <= x <= ln2ovft: cosh(x) := exp(x/2)/2 * exp(x/2) - * ln2ovft < x : cosh(x) := huge*huge (overflow) - * - * Special cases: - * cosh(x) is |x| if x is +INF, -INF, or NaN. - * only cosh(0)=1 is exact for finite x. - */ - -#include -#include - -static const double one = 1.0, half=0.5, huge = 1.0e300; - -double -__ieee754_cosh (double x) -{ - double t,w; - int32_t ix; - - /* High word of |x|. */ - GET_HIGH_WORD(ix,x); - ix &= 0x7fffffff; - - /* |x| in [0,22] */ - if (ix < 0x40360000) { - /* |x| in [0,0.5*ln2], return 1+expm1(|x|)^2/(2*exp(|x|)) */ - if(ix<0x3fd62e43) { - if (ix<0x3c800000) /* cosh(tiny) = 1 */ - return one; - t = __expm1(fabs(x)); - w = one+t; - return one+(t*t)/(w+w); - } - - /* |x| in [0.5*ln2,22], return (exp(|x|)+1/exp(|x|)/2; */ - t = __ieee754_exp(fabs(x)); - return half*t+half/t; - } - - /* |x| in [22, log(maxdouble)] return half*exp(|x|) */ - if (ix < 0x40862e42) return half*__ieee754_exp(fabs(x)); - - /* |x| in [log(maxdouble), overflowthresold] */ - int64_t fix; - EXTRACT_WORDS64(fix, x); - fix &= UINT64_C(0x7fffffffffffffff); - if (fix <= UINT64_C(0x408633ce8fb9f87d)) { - w = __ieee754_exp(half*fabs(x)); - t = half*w; - return t*w; - } - - /* x is INF or NaN */ - if(ix>=0x7ff00000) return x*x; - - /* |x| > overflowthresold, cosh(x) overflow */ - return huge*huge; -} -strong_alias (__ieee754_cosh, __cosh_finite) diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c b/sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c deleted file mode 100644 index f686bb6706..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/e_fmod.c +++ /dev/null @@ -1,105 +0,0 @@ -/* Rewritten for 64-bit machines by Ulrich Drepper . */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * __ieee754_fmod(x,y) - * Return x mod y in exact arithmetic - * Method: shift and subtract - */ - -#include -#include -#include - -static const double one = 1.0, Zero[] = {0.0, -0.0,}; - -double -__ieee754_fmod (double x, double y) -{ - int32_t n,ix,iy; - int64_t hx,hy,hz,sx,i; - - EXTRACT_WORDS64(hx,x); - EXTRACT_WORDS64(hy,y); - sx = hx&UINT64_C(0x8000000000000000); /* sign of x */ - hx ^=sx; /* |x| */ - hy &= UINT64_C(0x7fffffffffffffff); /* |y| */ - - /* purge off exception values */ - if(__builtin_expect(hy==0 - || hx >= UINT64_C(0x7ff0000000000000) - || hy > UINT64_C(0x7ff0000000000000), 0)) - /* y=0,or x not finite or y is NaN */ - return (x*y)/(x*y); - if(__builtin_expect(hx<=hy, 0)) { - if(hx>63]; /* |x|=|y| return x*0*/ - } - - /* determine ix = ilogb(x) */ - if(__builtin_expect(hx0; i<<=1) ix -=1; - } else ix = (hx>>52)-1023; - - /* determine iy = ilogb(y) */ - if(__builtin_expect(hy0; i<<=1) iy -=1; - } else iy = (hy>>52)-1023; - - /* set up hx, hy and align y to x */ - if(__builtin_expect(ix >= -1022, 1)) - hx = UINT64_C(0x0010000000000000)|(UINT64_C(0x000fffffffffffff)&hx); - else { /* subnormal x, shift x to normal */ - n = -1022-ix; - hx<<=n; - } - if(__builtin_expect(iy >= -1022, 1)) - hy = UINT64_C(0x0010000000000000)|(UINT64_C(0x000fffffffffffff)&hy); - else { /* subnormal y, shift y to normal */ - n = -1022-iy; - hy<<=n; - } - - /* fix point fmod */ - n = ix - iy; - while(n--) { - hz=hx-hy; - if(hz<0){hx = hx+hx;} - else { - if(hz==0) /* return sign(x)*0 */ - return Zero[(uint64_t)sx>>63]; - hx = hz+hz; - } - } - hz=hx-hy; - if(hz>=0) {hx=hz;} - - /* convert back to floating value and restore the sign */ - if(hx==0) /* return sign(x)*0 */ - return Zero[(uint64_t)sx>>63]; - while(hx= -1022, 1)) { /* normalize output */ - hx = ((hx-UINT64_C(0x0010000000000000))|((uint64_t)(iy+1023)<<52)); - INSERT_WORDS64(x,hx|sx); - } else { /* subnormal output */ - n = -1022 - iy; - hx>>=n; - INSERT_WORDS64(x,hx|sx); - x *= one; /* create necessary signal */ - } - return x; /* exact output */ -} -strong_alias (__ieee754_fmod, __fmod_finite) diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/e_log10.c b/sysdeps/ieee754/dbl-64/wordsize-64/e_log10.c deleted file mode 100644 index 4f5a81669e..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/e_log10.c +++ /dev/null @@ -1,87 +0,0 @@ -/* @(#)e_log10.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_log10(x) - * Return the base 10 logarithm of x - * - * Method : - * Let log10_2hi = leading 40 bits of log10(2) and - * log10_2lo = log10(2) - log10_2hi, - * ivln10 = 1/log(10) rounded. - * Then - * n = ilogb(x), - * if(n<0) n = n+1; - * x = scalbn(x,-n); - * log10(x) := n*log10_2hi + (n*log10_2lo + ivln10*log(x)) - * - * Note 1: - * To guarantee log10(10**n)=n, where 10**n is normal, the rounding - * mode must set to Round-to-Nearest. - * Note 2: - * [1/log(10)] rounded to 53 bits has error .198 ulps; - * log10 is monotonic at all binary break points. - * - * Special cases: - * log10(x) is NaN with signal if x < 0; - * log10(+INF) is +INF with no signal; log10(0) is -INF with signal; - * log10(NaN) is that NaN with no signal; - * log10(10**N) = N for N=0,1,...,22. - * - * Constants: - * The hexadecimal values are the intended ones for the following constants. - * The decimal values may be used, provided that the compiler will convert - * from decimal to binary accurately enough to produce the hexadecimal values - * shown. - */ - -#include -#include -#include - -static const double two54 = 1.80143985094819840000e+16; /* 0x4350000000000000 */ -static const double ivln10 = 4.34294481903251816668e-01; /* 0x3FDBCB7B1526E50E */ -static const double log10_2hi = 3.01029995663611771306e-01; /* 0x3FD34413509F6000 */ -static const double log10_2lo = 3.69423907715893078616e-13; /* 0x3D59FEF311F12B36 */ - -double -__ieee754_log10 (double x) -{ - double y, z; - int64_t i, hx; - int32_t k; - - EXTRACT_WORDS64 (hx, x); - - k = 0; - if (hx < INT64_C(0x0010000000000000)) - { /* x < 2**-1022 */ - if (__glibc_unlikely ((hx & UINT64_C(0x7fffffffffffffff)) == 0)) - return -two54 / (x - x); /* log(+-0)=-inf */ - if (__glibc_unlikely (hx < 0)) - return (x - x) / (x - x); /* log(-#) = NaN */ - k -= 54; - x *= two54; /* subnormal number, scale up x */ - EXTRACT_WORDS64 (hx, x); - } - /* scale up resulted in a NaN number */ - if (__glibc_unlikely (hx >= UINT64_C(0x7ff0000000000000))) - return x + x; - k += (hx >> 52) - 1023; - i = ((uint64_t) k & UINT64_C(0x8000000000000000)) >> 63; - hx = (hx & UINT64_C(0x000fffffffffffff)) | ((0x3ff - i) << 52); - y = (double) (k + i); - INSERT_WORDS64 (x, hx); - z = y * log10_2lo + ivln10 * __ieee754_log (x); - return z + y * log10_2hi; -} - -strong_alias (__ieee754_log10, __log10_finite) diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/e_log2.c b/sysdeps/ieee754/dbl-64/wordsize-64/e_log2.c deleted file mode 100644 index 5ccb78cf03..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/e_log2.c +++ /dev/null @@ -1,128 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_log2(x) - * Return the logarithm to base 2 of x - * - * Method : - * 1. Argument Reduction: find k and f such that - * x = 2^k * (1+f), - * where sqrt(2)/2 < 1+f < sqrt(2) . - * - * 2. Approximation of log(1+f). - * Let s = f/(2+f) ; based on log(1+f) = log(1+s) - log(1-s) - * = 2s + 2/3 s**3 + 2/5 s**5 + ....., - * = 2s + s*R - * We use a special Reme algorithm on [0,0.1716] to generate - * a polynomial of degree 14 to approximate R The maximum error - * of this polynomial approximation is bounded by 2**-58.45. In - * other words, - * 2 4 6 8 10 12 14 - * R(z) ~ Lg1*s +Lg2*s +Lg3*s +Lg4*s +Lg5*s +Lg6*s +Lg7*s - * (the values of Lg1 to Lg7 are listed in the program) - * and - * | 2 14 | -58.45 - * | Lg1*s +...+Lg7*s - R(z) | <= 2 - * | | - * Note that 2s = f - s*f = f - hfsq + s*hfsq, where hfsq = f*f/2. - * In order to guarantee error in log below 1ulp, we compute log - * by - * log(1+f) = f - s*(f - R) (if f is not too large) - * log(1+f) = f - (hfsq - s*(hfsq+R)). (better accuracy) - * - * 3. Finally, log(x) = k + log(1+f). - * = k+(f-(hfsq-(s*(hfsq+R)))) - * - * Special cases: - * log2(x) is NaN with signal if x < 0 (including -INF) ; - * log2(+INF) is +INF; log(0) is -INF with signal; - * log2(NaN) is that NaN with no signal. - * - * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough - * to produce the hexadecimal values shown. - */ - -#include -#include - -static const double ln2 = 0.69314718055994530942; -static const double two54 = 1.80143985094819840000e+16; /* 4350000000000000 */ -static const double Lg1 = 6.666666666666735130e-01; /* 3FE5555555555593 */ -static const double Lg2 = 3.999999999940941908e-01; /* 3FD999999997FA04 */ -static const double Lg3 = 2.857142874366239149e-01; /* 3FD2492494229359 */ -static const double Lg4 = 2.222219843214978396e-01; /* 3FCC71C51D8E78AF */ -static const double Lg5 = 1.818357216161805012e-01; /* 3FC7466496CB03DE */ -static const double Lg6 = 1.531383769920937332e-01; /* 3FC39A09D078C69F */ -static const double Lg7 = 1.479819860511658591e-01; /* 3FC2F112DF3E5244 */ - -static const double zero = 0.0; - -double -__ieee754_log2 (double x) -{ - double hfsq, f, s, z, R, w, t1, t2, dk; - int64_t hx, i, j; - int32_t k; - - EXTRACT_WORDS64 (hx, x); - - k = 0; - if (hx < INT64_C(0x0010000000000000)) - { /* x < 2**-1022 */ - if (__glibc_unlikely ((hx & UINT64_C(0x7fffffffffffffff)) == 0)) - return -two54 / (x - x); /* log(+-0)=-inf */ - if (__glibc_unlikely (hx < 0)) - return (x - x) / (x - x); /* log(-#) = NaN */ - k -= 54; - x *= two54; /* subnormal number, scale up x */ - EXTRACT_WORDS64 (hx, x); - } - if (__glibc_unlikely (hx >= UINT64_C(0x7ff0000000000000))) - return x + x; - k += (hx >> 52) - 1023; - hx &= UINT64_C(0x000fffffffffffff); - i = (hx + UINT64_C(0x95f6400000000)) & UINT64_C(0x10000000000000); - /* normalize x or x/2 */ - INSERT_WORDS64 (x, hx | (i ^ UINT64_C(0x3ff0000000000000))); - k += (i >> 52); - dk = (double) k; - f = x - 1.0; - if ((UINT64_C(0x000fffffffffffff) & (2 + hx)) < 3) - { /* |f| < 2**-20 */ - if (f == zero) - return dk; - R = f * f * (0.5 - 0.33333333333333333 * f); - return dk - (R - f) / ln2; - } - s = f / (2.0 + f); - z = s * s; - i = hx - UINT64_C(0x6147a00000000); - w = z * z; - j = UINT64_C(0x6b85100000000) - hx; - t1 = w * (Lg2 + w * (Lg4 + w * Lg6)); - t2 = z * (Lg1 + w * (Lg3 + w * (Lg5 + w * Lg7))); - i |= j; - R = t2 + t1; - if (i > 0) - { - hfsq = 0.5 * f * f; - return dk - ((hfsq - (s * (hfsq + R))) - f) / ln2; - } - else - { - return dk - ((s * (f - R)) - f) / ln2; - } -} - -strong_alias (__ieee754_log2, __log2_finite) diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c deleted file mode 100644 index faaaf90208..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c +++ /dev/null @@ -1,54 +0,0 @@ -/* @(#)s_ceil.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * ceil(x) - * Return x rounded toward -inf to integral value - * Method: - * Bit twiddling. - */ - -#include -#include - -double -__ceil(double x) -{ - int64_t i0,i; - int32_t j0; - EXTRACT_WORDS64(i0,x); - j0 = ((i0>>52)&0x7ff)-0x3ff; - if(j0<=51) { - if(j0<0) { - /* return 0*sign(x) if |x|<1 */ - if(i0<0) {i0=INT64_C(0x8000000000000000);} - else if(i0!=0) { i0=INT64_C(0x3ff0000000000000);} - } else { - i = INT64_C(0x000fffffffffffff)>>j0; - if((i0&i)==0) return x; /* x is integral */ - if(i0>0) i0 += UINT64_C(0x0010000000000000)>>j0; - i0 &= (~i); - } - } else { - if(j0==0x400) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } - INSERT_WORDS64(x,i0); - return x; -} -#ifndef __ceil -weak_alias (__ceil, ceil) -# ifdef NO_LONG_DOUBLE -strong_alias (__ceil, __ceill) -weak_alias (__ceil, ceill) -# endif -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c deleted file mode 100644 index ef51608f6e..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * finite(x) returns 1 is x is finite, else 0; - * no branching! - */ - -#include -#include -#include -#include - -#undef __finite -int -__finite(double x) -{ - int64_t lx; - EXTRACT_WORDS64(lx,x); - return (int)((uint64_t)((lx&INT64_C(0x7ff0000000000000))-INT64_C(0x7ff0000000000000))>>63); -} -hidden_def (__finite) -weak_alias (__finite, finite) -#ifdef NO_LONG_DOUBLE -# ifdef LDBL_CLASSIFY_COMPAT -# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23) -compat_symbol (libc, __finite, __finitel, GLIBC_2_0); -# endif -# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_23) -compat_symbol (libm, __finite, __finitel, GLIBC_2_1); -# endif -# endif -weak_alias (__finite, finitel) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c deleted file mode 100644 index 1b99fffc30..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Round double to integer away from zero. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Based on a version which carries the following copyright: */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include -#include - -/* - * floor(x) - * Return x rounded toward -inf to integral value - * Method: - * Bit twiddling. - */ - - -double -__floor (double x) -{ - int64_t i0; - EXTRACT_WORDS64(i0,x); - int32_t j0 = ((i0>>52)&0x7ff)-0x3ff; - if(__builtin_expect(j0<52, 1)) { - if(j0<0) { - /* return 0*sign(x) if |x|<1 */ - if(i0>=0) {i0=0;} - else if((i0&0x7fffffffffffffffl)!=0) - { i0=0xbff0000000000000l;} - } else { - uint64_t i = (0x000fffffffffffffl)>>j0; - if((i0&i)==0) return x; /* x is integral */ - if(i0<0) i0 += (0x0010000000000000l)>>j0; - i0 &= (~i); - } - INSERT_WORDS64(x,i0); - } else if (j0==0x400) - return x+x; /* inf or NaN */ - return x; -} -#ifndef __floor -weak_alias (__floor, floor) -# ifdef NO_LONG_DOUBLE -strong_alias (__floor, __floorl) -weak_alias (__floor, floorl) -# endif -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_frexp.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_frexp.c deleted file mode 100644 index 5e8bc64711..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_frexp.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* - * for non-zero, finite x - * x = frexp(arg,&exp); - * return a double fp quantity x such that 0.5 <= |x| <1.0 - * and the corresponding binary exponent "exp". That is - * arg = x*2^exp. - * If arg is inf, 0.0, or NaN, then frexp(arg,&exp) returns arg - * with *exp=0. - */ - - -double -__frexp (double x, int *eptr) -{ - int64_t ix; - EXTRACT_WORDS64 (ix, x); - int32_t ex = 0x7ff & (ix >> 52); - int e = 0; - - if (__glibc_likely (ex != 0x7ff && x != 0.0)) - { - /* Not zero and finite. */ - e = ex - 1022; - if (__glibc_unlikely (ex == 0)) - { - /* Subnormal. */ - x *= 0x1p54; - EXTRACT_WORDS64 (ix, x); - ex = 0x7ff & (ix >> 52); - e = ex - 1022 - 54; - } - - ix = (ix & INT64_C (0x800fffffffffffff)) | INT64_C (0x3fe0000000000000); - INSERT_WORDS64 (x, ix); - } - else - /* Quiet signaling NaNs. */ - x += x; - - *eptr = e; - return x; -} -weak_alias (__frexp, frexp) -#ifdef NO_LONG_DOUBLE -strong_alias (__frexp, __frexpl) -weak_alias (__frexp, frexpl) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_getpayload.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_getpayload.c deleted file mode 100644 index fbcd75b8bd..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_getpayload.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Get NaN payload. dbl-64/wordsize-64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -double -getpayload (const double *x) -{ - uint64_t ix; - EXTRACT_WORDS64 (ix, *x); - ix &= 0x7ffffffffffffULL; - return (double) ix; -} -#ifdef NO_LONG_DOUBLE -weak_alias (getpayload, getpayloadl) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c deleted file mode 100644 index 951fb73239..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changed to return -1 for -Inf by Ulrich Drepper . - * Public domain. - */ - -/* - * isinf(x) returns 1 is x is inf, -1 if x is -inf, else 0; - * no branching! - */ - -#include -#include -#include - -int -__isinf (double x) -{ - int64_t ix; - EXTRACT_WORDS64(ix,x); - int64_t t = ix & UINT64_C(0x7fffffffffffffff); - t ^= UINT64_C(0x7ff0000000000000); - t |= -t; - return ~(t >> 63) & (ix >> 62); -} -hidden_def (__isinf) -weak_alias (__isinf, isinf) -#ifdef NO_LONG_DOUBLE -# if defined LDBL_CLASSIFY_COMPAT && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23) -compat_symbol (libc, __isinf, __isinfl, GLIBC_2_0); -# endif -weak_alias (__isinf, isinfl) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c deleted file mode 100644 index bcff9e3b67..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c +++ /dev/null @@ -1,39 +0,0 @@ -/* @(#)s_isnan.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * isnan(x) returns 1 is x is nan, else 0; - * no branching! - */ - -#include -#include -#include -#include - -#undef __isnan -int __isnan(double x) -{ - int64_t hx; - EXTRACT_WORDS64(hx,x); - hx &= UINT64_C(0x7fffffffffffffff); - hx = UINT64_C(0x7ff0000000000000) - hx; - return (int)(((uint64_t)hx)>>63); -} -hidden_def (__isnan) -weak_alias (__isnan, isnan) -#ifdef NO_LONG_DOUBLE -# if defined LDBL_CLASSIFY_COMPAT && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -# endif -weak_alias (__isnan, isnanl) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_issignaling.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_issignaling.c deleted file mode 100644 index 117f64bede..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_issignaling.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Test for signaling NaN. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__issignaling (double x) -{ - u_int64_t xi; - EXTRACT_WORDS64 (xi, x); -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - /* We only have to care about the high-order bit of x's significand, because - having it set (sNaN) already makes the significand different from that - used to designate infinity. */ - return (xi & UINT64_C (0x7ff8000000000000)) == UINT64_C (0x7ff8000000000000); -#else - /* To keep the following comparison simple, toggle the quiet/signaling bit, - so that it is set for sNaNs. This is inverse to IEEE 754-2008 (as well as - common practice for IEEE 754-1985). */ - xi ^= UINT64_C (0x0008000000000000); - /* We have to compare for greater (instead of greater or equal), because x's - significand being all-zero designates infinity not NaN. */ - return (xi & UINT64_C (0x7fffffffffffffff)) > UINT64_C (0x7ff8000000000000); -#endif -} -libm_hidden_def (__issignaling) diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_llround.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_llround.c deleted file mode 100644 index 86a791111e..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_llround.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Round double value to long long int. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define lround __hidden_lround -#define __lround __hidden___lround - -#include -#include - -#include - - -long long int -__llround (double x) -{ - int32_t j0; - int64_t i0; - long long int result; - int sign; - - EXTRACT_WORDS64 (i0, x); - j0 = ((i0 >> 52) & 0x7ff) - 0x3ff; - sign = i0 < 0 ? -1 : 1; - i0 &= UINT64_C(0xfffffffffffff); - i0 |= UINT64_C(0x10000000000000); - - if (j0 < (int32_t) (8 * sizeof (long long int)) - 1) - { - if (j0 < 0) - return j0 < -1 ? 0 : sign; - else if (j0 >= 52) - result = i0 << (j0 - 52); - else - { - i0 += UINT64_C(0x8000000000000) >> j0; - - result = i0 >> (52 - j0); - } - } - else - { - /* The number is too large. It is left implementation defined - what happens. */ - return (long long int) x; - } - - return sign * result; -} - -weak_alias (__llround, llround) -#ifdef NO_LONG_DOUBLE -strong_alias (__llround, __llroundl) -weak_alias (__llround, llroundl) -#endif - -/* long has the same width as long long on LP64 machines, so use an alias. */ -#undef lround -#undef __lround -#ifdef _LP64 -strong_alias (__llround, __lround) -weak_alias (__llround, lround) -# ifdef NO_LONG_DOUBLE -strong_alias (__llround, __lroundl) -weak_alias (__llround, lroundl) -# endif -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c deleted file mode 100644 index c65cd52208..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Compute radix independent exponent. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -double -__logb (double x) -{ - int64_t ix, ex; - - EXTRACT_WORDS64 (ix, x); - ix &= UINT64_C(0x7fffffffffffffff); - if (ix == 0) - return -1.0 / fabs (x); - ex = ix >> 52; - if (ex == 0x7ff) - return x * x; - if (__glibc_unlikely (ex == 0)) - { - int m = __builtin_clzll (ix); - ex -= m - 12; - } - return (double) (ex - 1023); -} -weak_alias (__logb, logb) -#ifdef NO_LONG_DOUBLE -strong_alias (__logb, __logbl) -weak_alias (__logb, logbl) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_lround.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_lround.c deleted file mode 100644 index 02b01aa00d..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_lround.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Round double value to long int. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include - -/* For LP64, lround is an alias for llround. */ -#ifndef _LP64 - -long int -__lround (double x) -{ - int32_t j0; - int64_t i0; - long int result; - int sign; - - EXTRACT_WORDS64 (i0, x); - j0 = ((i0 >> 52) & 0x7ff) - 0x3ff; - sign = i0 < 0 ? -1 : 1; - i0 &= UINT64_C(0xfffffffffffff); - i0 |= UINT64_C(0x10000000000000); - - if (j0 < (int32_t) (8 * sizeof (long int)) - 1) - { - if (j0 < 0) - return j0 < -1 ? 0 : sign; - else if (j0 >= 52) - result = i0 << (j0 - 52); - else - { - i0 += UINT64_C(0x8000000000000) >> j0; - - result = i0 >> (52 - j0); -#ifdef FE_INVALID - if (sizeof (long int) == 4 - && sign == 1 - && result == LONG_MIN) - /* Rounding brought the value out of range. */ - feraiseexcept (FE_INVALID); -#endif - } - } - else - { - /* The number is too large. Unless it rounds to LONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ -#ifdef FE_INVALID - if (sizeof (long int) == 4 - && x <= (double) LONG_MIN - 0.5) - { - /* If truncation produces LONG_MIN, the cast will not raise - the exception, but may raise "inexact". */ - feraiseexcept (FE_INVALID); - return LONG_MIN; - } -#endif - return (long int) x; - } - - return sign * result; -} - -weak_alias (__lround, lround) -# ifdef NO_LONG_DOUBLE -strong_alias (__lround, __lroundl) -weak_alias (__lround, lroundl) -# endif - -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_modf.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_modf.c deleted file mode 100644 index c309e56272..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_modf.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Rewritten for 64-bit machines by Ulrich Drepper . */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * modf(double x, double *iptr) - * return fraction part of x, and return x's integral part in *iptr. - * Method: - * Bit twiddling. - * - * Exception: - * No exception. - */ - -#include -#include -#include - -static const double one = 1.0; - -double -__modf(double x, double *iptr) -{ - int64_t i0; - int32_t j0; - EXTRACT_WORDS64(i0,x); - j0 = ((i0>>52)&0x7ff)-0x3ff; /* exponent of x */ - if(j0<52) { /* integer part in x */ - if(j0<0) { /* |x|<1 */ - /* *iptr = +-0 */ - INSERT_WORDS64(*iptr,i0&UINT64_C(0x8000000000000000)); - return x; - } else { - uint64_t i = UINT64_C(0x000fffffffffffff)>>j0; - if((i0&i)==0) { /* x is integral */ - *iptr = x; - /* return +-0 */ - INSERT_WORDS64(x,i0&UINT64_C(0x8000000000000000)); - return x; - } else { - INSERT_WORDS64(*iptr,i0&(~i)); - return x - *iptr; - } - } - } else { /* no fraction part */ - *iptr = x*one; - /* We must handle NaNs separately. */ - if (j0 == 0x400 && (i0 & UINT64_C(0xfffffffffffff))) - return x*one; - INSERT_WORDS64(x,i0&UINT64_C(0x8000000000000000)); /* return +-0 */ - return x; - } -} -weak_alias (__modf, modf) -#ifdef NO_LONG_DOUBLE -strong_alias (__modf, __modfl) -weak_alias (__modf, modfl) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c deleted file mode 100644 index 8293819981..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Adapted for use as nearbyint by Ulrich Drepper . */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * rint(x) - * Return x rounded to integral value according to the prevailing - * rounding mode. - * Method: - * Using floating addition. - * Exception: - * Inexact flag raised if x not equal to rint(x). - */ - -#include -#include -#include - -static const double -TWO52[2]={ - 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ - -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ -}; - -double -__nearbyint(double x) -{ - fenv_t env; - int64_t i0,sx; - int32_t j0; - EXTRACT_WORDS64(i0,x); - sx = (i0>>63)&1; - j0 = ((i0>>52)&0x7ff)-0x3ff; - if(__builtin_expect(j0<52, 1)) { - if(j0<0) { - libc_feholdexcept (&env); - double w = TWO52[sx]+x; - double t = w-TWO52[sx]; - math_opt_barrier(t); - libc_fesetenv (&env); - return __copysign (t, x); - } - } else { - if(j0==0x400) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } - libc_feholdexcept (&env); - double w = TWO52[sx]+x; - double t = w-TWO52[sx]; - math_opt_barrier (t); - libc_fesetenv (&env); - return t; -} -weak_alias (__nearbyint, nearbyint) -#ifdef NO_LONG_DOUBLE -strong_alias (__nearbyint, __nearbyintl) -weak_alias (__nearbyint, nearbyintl) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c deleted file mode 100644 index 37a823c075..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_remquo.c +++ /dev/null @@ -1,114 +0,0 @@ -/* Compute remainder and a congruent to the quotient. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include -#include - -static const double zero = 0.0; - - -double -__remquo (double x, double y, int *quo) -{ - int64_t hx, hy; - uint64_t sx, qs; - int cquo; - - EXTRACT_WORDS64 (hx, x); - EXTRACT_WORDS64 (hy, y); - sx = hx & UINT64_C(0x8000000000000000); - qs = sx ^ (hy & UINT64_C(0x8000000000000000)); - hy &= UINT64_C(0x7fffffffffffffff); - hx &= UINT64_C(0x7fffffffffffffff); - - /* Purge off exception values. */ - if (__glibc_unlikely (hy == 0)) - return (x * y) / (x * y); /* y = 0 */ - if (__builtin_expect (hx >= UINT64_C(0x7ff0000000000000) /* x not finite */ - || hy > UINT64_C(0x7ff0000000000000), 0))/* y is NaN */ - return (x * y) / (x * y); - - if (hy <= UINT64_C(0x7fbfffffffffffff)) - x = __ieee754_fmod (x, 8 * y); /* now x < 8y */ - - if (__glibc_unlikely (hx == hy)) - { - *quo = qs ? -1 : 1; - return zero * x; - } - - x = fabs (x); - INSERT_WORDS64 (y, hy); - cquo = 0; - - if (hy <= UINT64_C(0x7fcfffffffffffff) && x >= 4 * y) - { - x -= 4 * y; - cquo += 4; - } - if (hy <= UINT64_C(0x7fdfffffffffffff) && x >= 2 * y) - { - x -= 2 * y; - cquo += 2; - } - - if (hy < UINT64_C(0x0020000000000000)) - { - if (x + x > y) - { - x -= y; - ++cquo; - if (x + x >= y) - { - x -= y; - ++cquo; - } - } - } - else - { - double y_half = 0.5 * y; - if (x > y_half) - { - x -= y; - ++cquo; - if (x >= y_half) - { - x -= y; - ++cquo; - } - } - } - - *quo = qs ? -cquo : cquo; - - /* Ensure correct sign of zero result in round-downward mode. */ - if (x == 0.0) - x = 0.0; - if (sx) - x = -x; - return x; -} -weak_alias (__remquo, remquo) -#ifdef NO_LONG_DOUBLE -strong_alias (__remquo, __remquol) -weak_alias (__remquo, remquol) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c deleted file mode 100644 index 87b2339d43..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * rint(x) - * Return x rounded to integral value according to the prevailing - * rounding mode. - * Method: - * Using floating addition. - * Exception: - * Inexact flag raised if x not equal to rint(x). - */ - -#include -#include - -static const double -TWO52[2]={ - 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ - -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ -}; - -double -__rint(double x) -{ - int64_t i0,sx; - int32_t j0; - EXTRACT_WORDS64(i0,x); - sx = (i0>>63)&1; - j0 = ((i0>>52)&0x7ff)-0x3ff; - if(j0<52) { - if(j0<0) { - double w = TWO52[sx]+x; - double t = w-TWO52[sx]; - EXTRACT_WORDS64(i0,t); - INSERT_WORDS64(t,(i0&UINT64_C(0x7fffffffffffffff))|(sx<<63)); - return t; - } - } else { - if(j0==0x400) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } - double w = TWO52[sx]+x; - return w-TWO52[sx]; -} -#ifndef __rint -weak_alias (__rint, rint) -# ifdef NO_LONG_DOUBLE -strong_alias (__rint, __rintl) -weak_alias (__rint, rintl) -# endif -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_round.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_round.c deleted file mode 100644 index 0e3738b6ef..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_round.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Round double to integer away from zero. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include -#include - - -double -__round (double x) -{ - int64_t i0, j0; - - EXTRACT_WORDS64 (i0, x); - j0 = ((i0 >> 52) & 0x7ff) - 0x3ff; - if (__glibc_likely (j0 < 52)) - { - if (j0 < 0) - { - i0 &= UINT64_C(0x8000000000000000); - if (j0 == -1) - i0 |= UINT64_C(0x3ff0000000000000); - } - else - { - uint64_t i = UINT64_C(0x000fffffffffffff) >> j0; - if ((i0 & i) == 0) - /* X is integral. */ - return x; - - i0 += UINT64_C(0x0008000000000000) >> j0; - i0 &= ~i; - } - } - else - { - if (j0 == 0x400) - /* Inf or NaN. */ - return x + x; - else - return x; - } - - INSERT_WORDS64 (x, i0); - return x; -} -weak_alias (__round, round) -#ifdef NO_LONG_DOUBLE -strong_alias (__round, __roundl) -weak_alias (__round, roundl) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_roundeven.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_roundeven.c deleted file mode 100644 index d13ee25cea..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_roundeven.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Round to nearest integer value, rounding halfway cases to even. - dbl-64/wordsize-64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define BIAS 0x3ff -#define MANT_DIG 53 -#define MAX_EXP (2 * BIAS + 1) - -double -roundeven (double x) -{ - uint64_t ix, ux; - EXTRACT_WORDS64 (ix, x); - ux = ix & 0x7fffffffffffffffULL; - int exponent = ux >> (MANT_DIG - 1); - if (exponent >= BIAS + MANT_DIG - 1) - { - /* Integer, infinity or NaN. */ - if (exponent == MAX_EXP) - /* Infinity or NaN; quiet signaling NaNs. */ - return x + x; - else - return x; - } - else if (exponent >= BIAS) - { - /* At least 1; not necessarily an integer. Locate the bits with - exponents 0 and -1 (when the unbiased exponent is 0, the bit - with exponent 0 is implicit, but as the bias is odd it is OK - to take it from the low bit of the exponent). */ - int int_pos = (BIAS + MANT_DIG - 1) - exponent; - int half_pos = int_pos - 1; - uint64_t half_bit = 1ULL << half_pos; - uint64_t int_bit = 1ULL << int_pos; - if ((ix & (int_bit | (half_bit - 1))) != 0) - /* Carry into the exponent works correctly. No need to test - whether HALF_BIT is set. */ - ix += half_bit; - ix &= ~(int_bit - 1); - } - else if (exponent == BIAS - 1 && ux > 0x3fe0000000000000ULL) - /* Interval (0.5, 1). */ - ix = (ix & 0x8000000000000000ULL) | 0x3ff0000000000000ULL; - else - /* Rounds to 0. */ - ix &= 0x8000000000000000ULL; - INSERT_WORDS64 (x, ix); - return x; -} -hidden_def (roundeven) -#ifdef NO_LONG_DOUBLE -weak_alias (roundeven, roundevenl) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c deleted file mode 100644 index 8dce51e928..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbln.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * scalbn (double x, int n) - * scalbn(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include -#include - -static const double -two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */ -twom54 = 5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */ -huge = 1.0e+300, -tiny = 1.0e-300; - -double -__scalbln (double x, long int n) -{ - int64_t ix; - int64_t k; - EXTRACT_WORDS64(ix,x); - k = (ix >> 52) & 0x7ff; /* extract exponent */ - if (__builtin_expect(k==0, 0)) { /* 0 or subnormal x */ - if ((ix & UINT64_C(0xfffffffffffff))==0) return x; /* +-0 */ - x *= two54; - EXTRACT_WORDS64(ix,x); - k = ((ix >> 52) & 0x7ff) - 54; - } - if (__builtin_expect(k==0x7ff, 0)) return x+x; /* NaN or Inf */ - if (__builtin_expect(n< -50000, 0)) - return tiny*__copysign(tiny,x); /*underflow*/ - if (__builtin_expect(n> 50000 || k+n > 0x7fe, 0)) - return huge*__copysign(huge,x); /* overflow */ - /* Now k and n are bounded we know that k = k+n does not - overflow. */ - k = k+n; - if (__builtin_expect(k > 0, 1)) /* normal result */ - {INSERT_WORDS64(x,(ix&UINT64_C(0x800fffffffffffff))|(k<<52)); - return x;} - if (k <= -54) - return tiny*__copysign(tiny,x); /*underflow*/ - k += 54; /* subnormal result */ - INSERT_WORDS64(x,(ix&INT64_C(0x800fffffffffffff))|(k<<52)); - return x*twom54; -} -#ifdef NO_LONG_DOUBLE -strong_alias (__scalbln, __scalblnl) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c deleted file mode 100644 index d517a919c8..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * scalbn (double x, int n) - * scalbn(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include -#include - -static const double -two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */ -twom54 = 5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */ -huge = 1.0e+300, -tiny = 1.0e-300; - -double -__scalbn (double x, int n) -{ - int64_t ix; - int64_t k; - EXTRACT_WORDS64(ix,x); - k = (ix >> 52) & 0x7ff; /* extract exponent */ - if (__builtin_expect(k==0, 0)) { /* 0 or subnormal x */ - if ((ix & UINT64_C(0xfffffffffffff))==0) return x; /* +-0 */ - x *= two54; - EXTRACT_WORDS64(ix,x); - k = ((ix >> 52) & 0x7ff) - 54; - } - if (__builtin_expect(k==0x7ff, 0)) return x+x; /* NaN or Inf */ - if (__builtin_expect(n< -50000, 0)) - return tiny*__copysign(tiny,x); /*underflow*/ - if (__builtin_expect(n> 50000 || k+n > 0x7fe, 0)) - return huge*__copysign(huge,x); /* overflow */ - /* Now k and n are bounded we know that k = k+n does not - overflow. */ - k = k+n; - if (__builtin_expect(k > 0, 1)) /* normal result */ - {INSERT_WORDS64(x,(ix&UINT64_C(0x800fffffffffffff))|(k<<52)); - return x;} - if (k <= -54) - return tiny*__copysign(tiny,x); /*underflow*/ - k += 54; /* subnormal result */ - INSERT_WORDS64(x,(ix&INT64_C(0x800fffffffffffff))|(k<<52)); - return x*twom54; -} -#ifdef NO_LONG_DOUBLE -strong_alias (__scalbn, __scalbnl) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_setpayload_main.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_setpayload_main.c deleted file mode 100644 index d4f6d55432..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_setpayload_main.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Set NaN payload. dbl-64/wordsize-64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#define SET_HIGH_BIT (HIGH_ORDER_BIT_IS_SET_FOR_SNAN ? SIG : !SIG) -#define BIAS 0x3ff -#define PAYLOAD_DIG 51 -#define EXPLICIT_MANT_DIG 52 - -int -FUNC (double *x, double payload) -{ - uint64_t ix; - EXTRACT_WORDS64 (ix, payload); - int exponent = ix >> EXPLICIT_MANT_DIG; - /* Test if argument is (a) negative or too large; (b) too small, - except for 0 when allowed; (c) not an integer. */ - if (exponent >= BIAS + PAYLOAD_DIG - || (exponent < BIAS && !(SET_HIGH_BIT && ix == 0)) - || (ix & ((1ULL << (BIAS + EXPLICIT_MANT_DIG - exponent)) - 1)) != 0) - { - INSERT_WORDS64 (*x, 0); - return 1; - } - if (ix != 0) - { - ix &= (1ULL << EXPLICIT_MANT_DIG) - 1; - ix |= 1ULL << EXPLICIT_MANT_DIG; - ix >>= BIAS + EXPLICIT_MANT_DIG - exponent; - } - ix |= 0x7ff0000000000000ULL | (SET_HIGH_BIT ? 0x8000000000000ULL : 0); - INSERT_WORDS64 (*x, ix); - return 0; -} diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_totalorder.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_totalorder.c deleted file mode 100644 index 1e8d57f32b..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_totalorder.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Total order operation. dbl-64/wordsize-64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -totalorder (double x, double y) -{ - int64_t ix, iy; - EXTRACT_WORDS64 (ix, x); - EXTRACT_WORDS64 (iy, y); -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - /* For the preferred quiet NaN convention, this operation is a - comparison of the representations of the arguments interpreted as - sign-magnitude integers. If both arguments are NaNs, invert the - quiet/signaling bit so comparing that way works. */ - if ((ix & 0x7fffffffffffffffULL) > 0x7ff0000000000000ULL - && (iy & 0x7fffffffffffffffULL) > 0x7ff0000000000000ULL) - { - ix ^= 0x0008000000000000ULL; - iy ^= 0x0008000000000000ULL; - } -#endif - uint64_t ix_sign = ix >> 63; - uint64_t iy_sign = iy >> 63; - ix ^= ix_sign >> 1; - iy ^= iy_sign >> 1; - return ix <= iy; -} -#ifdef NO_LONG_DOUBLE -weak_alias (totalorder, totalorderl) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_totalordermag.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_totalordermag.c deleted file mode 100644 index 47a077f18b..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_totalordermag.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Total order operation on absolute values. dbl-64/wordsize-64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -totalordermag (double x, double y) -{ - uint64_t ix, iy; - EXTRACT_WORDS64 (ix, x); - EXTRACT_WORDS64 (iy, y); - ix &= 0x7fffffffffffffffULL; - iy &= 0x7fffffffffffffffULL; -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - /* For the preferred quiet NaN convention, this operation is a - comparison of the representations of the absolute values of the - arguments. If both arguments are NaNs, invert the - quiet/signaling bit so comparing that way works. */ - if (ix > 0x7ff0000000000000ULL && iy > 0x7ff0000000000000ULL) - { - ix ^= 0x0008000000000000ULL; - iy ^= 0x0008000000000000ULL; - } -#endif - return ix <= iy; -} -#ifdef NO_LONG_DOUBLE -weak_alias (totalordermag, totalordermagl) -#endif diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_trunc.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_trunc.c deleted file mode 100644 index 050ec0016a..0000000000 --- a/sysdeps/ieee754/dbl-64/wordsize-64/s_trunc.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Truncate argument to nearest integral value not larger than the argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -double -__trunc (double x) -{ - int64_t i0, j0; - int64_t sx; - - EXTRACT_WORDS64 (i0, x); - sx = i0 & UINT64_C(0x8000000000000000); - j0 = ((i0 >> 52) & 0x7ff) - 0x3ff; - if (j0 < 52) - { - if (j0 < 0) - /* The magnitude of the number is < 1 so the result is +-0. */ - INSERT_WORDS64 (x, sx); - else - INSERT_WORDS64 (x, sx | (i0 & ~(UINT64_C(0x000fffffffffffff) >> j0))); - } - else - { - if (j0 == 0x400) - /* x is inf or NaN. */ - return x + x; - } - - return x; -} -#ifndef __trunc -weak_alias (__trunc, trunc) -# ifdef NO_LONG_DOUBLE -strong_alias (__trunc, __truncl) -weak_alias (__trunc, truncl) -# endif -#endif diff --git a/sysdeps/ieee754/dbl-64/x2y2m1.c b/sysdeps/ieee754/dbl-64/x2y2m1.c deleted file mode 100644 index 70d33de74c..0000000000 --- a/sysdeps/ieee754/dbl-64/x2y2m1.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Compute x^2 + y^2 - 1, without large cancellation error. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Calculate X + Y exactly and store the result in *HI + *LO. It is - given that |X| >= |Y| and the values are small enough that no - overflow occurs. */ - -static inline void -add_split (double *hi, double *lo, double x, double y) -{ - /* Apply Dekker's algorithm. */ - *hi = x + y; - *lo = (x - *hi) + y; -} - -/* Compare absolute values of floating-point values pointed to by P - and Q for qsort. */ - -static int -compare (const void *p, const void *q) -{ - double pd = fabs (*(const double *) p); - double qd = fabs (*(const double *) q); - if (pd < qd) - return -1; - else if (pd == qd) - return 0; - else - return 1; -} - -/* Return X^2 + Y^2 - 1, computed without large cancellation error. - It is given that 1 > X >= Y >= epsilon / 2, and that X^2 + Y^2 >= - 0.5. */ - -double -__x2y2m1 (double x, double y) -{ - double vals[5]; - SET_RESTORE_ROUND (FE_TONEAREST); - mul_split (&vals[1], &vals[0], x, x); - mul_split (&vals[3], &vals[2], y, y); - vals[4] = -1.0; - qsort (vals, 5, sizeof (double), compare); - /* Add up the values so that each element of VALS has absolute value - at most equal to the last set bit of the next nonzero - element. */ - for (size_t i = 0; i <= 3; i++) - { - add_split (&vals[i + 1], &vals[i], vals[i + 1], vals[i]); - qsort (vals + i + 1, 4 - i, sizeof (double), compare); - } - /* Now any error from this addition will be small. */ - return vals[4] + vals[3] + vals[2] + vals[1] + vals[0]; -} diff --git a/sysdeps/ieee754/dbl-64/x2y2m1f.c b/sysdeps/ieee754/dbl-64/x2y2m1f.c deleted file mode 100644 index 17bc435a62..0000000000 --- a/sysdeps/ieee754/dbl-64/x2y2m1f.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Compute x^2 + y^2 - 1, without large cancellation error. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Return X^2 + Y^2 - 1, computed without large cancellation error. - It is given that 1 > X >= Y >= epsilon / 2, and that X^2 + Y^2 >= - 0.5. */ - -float -__x2y2m1f (float x, float y) -{ - double dx = x, dy = y; - return (float) ((dx - 1) * (dx + 1) + dy * dy); -} diff --git a/sysdeps/ieee754/float128/Makeconfig b/sysdeps/ieee754/float128/Makeconfig deleted file mode 100644 index 6c385d2df2..0000000000 --- a/sysdeps/ieee754/float128/Makeconfig +++ /dev/null @@ -1,3 +0,0 @@ -# Include this earlier so it can be used earlier in Makefiles, -# and sysdep/ makefiles. -float128-fcts = yes diff --git a/sysdeps/ieee754/float128/Makefile b/sysdeps/ieee754/float128/Makefile deleted file mode 100644 index c07586c1b6..0000000000 --- a/sysdeps/ieee754/float128/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),stdlib) -routines += float1282mpn strfromf128 -endif diff --git a/sysdeps/ieee754/float128/Versions b/sysdeps/ieee754/float128/Versions deleted file mode 100644 index caf206475c..0000000000 --- a/sysdeps/ieee754/float128/Versions +++ /dev/null @@ -1,150 +0,0 @@ -%include -%ifndef FLOAT128_VERSION -% error "float128-abi.h must define FLOAT128_VERSION" -%endif -libc { - FLOAT128_VERSION { - strfromf128; - } -} -libm { - FLOAT128_VERSION { - __acosf128_finite; - __acoshf128_finite; - __asinf128_finite; - __atan2f128_finite; - __atanhf128_finite; - __coshf128_finite; - __exp10f128_finite; - __exp2f128_finite; - __expf128_finite; - __finitef128; - __fmodf128_finite; - __fpclassifyf128; - __gammaf128_r_finite; - __hypotf128_finite; - __iseqsigf128; - __isinff128; - __isnanf128; - __issignalingf128; - __j0f128_finite; - __j1f128_finite; - __jnf128_finite; - __lgammaf128_r_finite; - __log10f128_finite; - __log2f128_finite; - __logf128_finite; - __powf128_finite; - __remainderf128_finite; - __signbitf128; - __sinhf128_finite; - __sqrtf128_finite; - __y0f128_finite; - __y1f128_finite; - __ynf128_finite; - acosf128; - acoshf128; - asinf128; - asinhf128; - atan2f128; - atanf128; - atanhf128; - cabsf128; - cacosf128; - cacoshf128; - canonicalizef128; - cargf128; - casinf128; - casinhf128; - catanf128; - catanhf128; - cbrtf128; - ccosf128; - ccoshf128; - ceilf128; - cexpf128; - cimagf128; - clog10f128; - clogf128; - conjf128; - copysignf128; - cosf128; - coshf128; - cpowf128; - cprojf128; - crealf128; - csinf128; - csinhf128; - csqrtf128; - ctanf128; - ctanhf128; - erfcf128; - erff128; - exp10f128; - exp2f128; - expf128; - expm1f128; - fabsf128; - fdimf128; - floorf128; - fmaf128; - fmaxf128; - fmaxmagf128; - fminf128; - fminmagf128; - fmodf128; - frexpf128; - fromfpf128; - fromfpxf128; - getpayloadf128; - hypotf128; - ilogbf128; - j0f128; - j1f128; - jnf128; - ldexpf128; - lgammaf128; - lgammaf128_r; - llogbf128; - llrintf128; - llroundf128; - log10f128; - log1pf128; - log2f128; - logbf128; - logf128; - lrintf128; - lroundf128; - modff128; - nanf128; - nearbyintf128; - nextafterf128; - nextdownf128; - nextupf128; - powf128; - remainderf128; - remquof128; - rintf128; - roundevenf128; - roundf128; - scalblnf128; - scalbnf128; - setpayloadf128; - setpayloadsigf128; - sincosf128; - sinf128; - sinhf128; - sqrtf128; - tanf128; - tanhf128; - tgammaf128; - totalorderf128; - totalordermagf128; - truncf128; - ufromfpf128; - ufromfpxf128; - y0f128; - y1f128; - ynf128; - } -} diff --git a/sysdeps/ieee754/float128/e_acosf128.c b/sysdeps/ieee754/float128/e_acosf128.c deleted file mode 100644 index 7ddf7dcdf1..0000000000 --- a/sysdeps/ieee754/float128/e_acosf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_acosl.c" diff --git a/sysdeps/ieee754/float128/e_acoshf128.c b/sysdeps/ieee754/float128/e_acoshf128.c deleted file mode 100644 index f6dd40cd88..0000000000 --- a/sysdeps/ieee754/float128/e_acoshf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_acoshl.c" diff --git a/sysdeps/ieee754/float128/e_asinf128.c b/sysdeps/ieee754/float128/e_asinf128.c deleted file mode 100644 index 133ab8d875..0000000000 --- a/sysdeps/ieee754/float128/e_asinf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_asinl.c" diff --git a/sysdeps/ieee754/float128/e_atan2f128.c b/sysdeps/ieee754/float128/e_atan2f128.c deleted file mode 100644 index 9aa740f770..0000000000 --- a/sysdeps/ieee754/float128/e_atan2f128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_atan2l.c" diff --git a/sysdeps/ieee754/float128/e_atanhf128.c b/sysdeps/ieee754/float128/e_atanhf128.c deleted file mode 100644 index f26c8d54d2..0000000000 --- a/sysdeps/ieee754/float128/e_atanhf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_atanhl.c" diff --git a/sysdeps/ieee754/float128/e_coshf128.c b/sysdeps/ieee754/float128/e_coshf128.c deleted file mode 100644 index 2abf067f64..0000000000 --- a/sysdeps/ieee754/float128/e_coshf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_coshl.c" diff --git a/sysdeps/ieee754/float128/e_exp10f128.c b/sysdeps/ieee754/float128/e_exp10f128.c deleted file mode 100644 index b3468d256b..0000000000 --- a/sysdeps/ieee754/float128/e_exp10f128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_exp10l.c" diff --git a/sysdeps/ieee754/float128/e_expf128.c b/sysdeps/ieee754/float128/e_expf128.c deleted file mode 100644 index b727b17cc9..0000000000 --- a/sysdeps/ieee754/float128/e_expf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_expl.c" diff --git a/sysdeps/ieee754/float128/e_fmodf128.c b/sysdeps/ieee754/float128/e_fmodf128.c deleted file mode 100644 index ed8a7491ed..0000000000 --- a/sysdeps/ieee754/float128/e_fmodf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_fmodl.c" diff --git a/sysdeps/ieee754/float128/e_gammaf128_r.c b/sysdeps/ieee754/float128/e_gammaf128_r.c deleted file mode 100644 index 895ac6374d..0000000000 --- a/sysdeps/ieee754/float128/e_gammaf128_r.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_gammal_r.c" diff --git a/sysdeps/ieee754/float128/e_hypotf128.c b/sysdeps/ieee754/float128/e_hypotf128.c deleted file mode 100644 index 1f06555505..0000000000 --- a/sysdeps/ieee754/float128/e_hypotf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_hypotl.c" diff --git a/sysdeps/ieee754/float128/e_ilogbf128.c b/sysdeps/ieee754/float128/e_ilogbf128.c deleted file mode 100644 index 2861801854..0000000000 --- a/sysdeps/ieee754/float128/e_ilogbf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_ilogbl.c" diff --git a/sysdeps/ieee754/float128/e_j0f128.c b/sysdeps/ieee754/float128/e_j0f128.c deleted file mode 100644 index b624b5c596..0000000000 --- a/sysdeps/ieee754/float128/e_j0f128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_j0l.c" diff --git a/sysdeps/ieee754/float128/e_j1f128.c b/sysdeps/ieee754/float128/e_j1f128.c deleted file mode 100644 index 445428e742..0000000000 --- a/sysdeps/ieee754/float128/e_j1f128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_j1l.c" diff --git a/sysdeps/ieee754/float128/e_jnf128.c b/sysdeps/ieee754/float128/e_jnf128.c deleted file mode 100644 index 7854e11a1a..0000000000 --- a/sysdeps/ieee754/float128/e_jnf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_jnl.c" diff --git a/sysdeps/ieee754/float128/e_lgammaf128_r.c b/sysdeps/ieee754/float128/e_lgammaf128_r.c deleted file mode 100644 index 3517ac32af..0000000000 --- a/sysdeps/ieee754/float128/e_lgammaf128_r.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_lgammal_r.c" diff --git a/sysdeps/ieee754/float128/e_log10f128.c b/sysdeps/ieee754/float128/e_log10f128.c deleted file mode 100644 index 1c3341e412..0000000000 --- a/sysdeps/ieee754/float128/e_log10f128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_log10l.c" diff --git a/sysdeps/ieee754/float128/e_log2f128.c b/sysdeps/ieee754/float128/e_log2f128.c deleted file mode 100644 index 36becaadc4..0000000000 --- a/sysdeps/ieee754/float128/e_log2f128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_log2l.c" diff --git a/sysdeps/ieee754/float128/e_logf128.c b/sysdeps/ieee754/float128/e_logf128.c deleted file mode 100644 index b0c9975caf..0000000000 --- a/sysdeps/ieee754/float128/e_logf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_logl.c" diff --git a/sysdeps/ieee754/float128/e_powf128.c b/sysdeps/ieee754/float128/e_powf128.c deleted file mode 100644 index 3afaf7f6a6..0000000000 --- a/sysdeps/ieee754/float128/e_powf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_powl.c" diff --git a/sysdeps/ieee754/float128/e_rem_pio2f128.c b/sysdeps/ieee754/float128/e_rem_pio2f128.c deleted file mode 100644 index 86c2ca1024..0000000000 --- a/sysdeps/ieee754/float128/e_rem_pio2f128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_rem_pio2l.c" diff --git a/sysdeps/ieee754/float128/e_remainderf128.c b/sysdeps/ieee754/float128/e_remainderf128.c deleted file mode 100644 index 90c18f8493..0000000000 --- a/sysdeps/ieee754/float128/e_remainderf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_remainderl.c" diff --git a/sysdeps/ieee754/float128/e_scalbf128.c b/sysdeps/ieee754/float128/e_scalbf128.c deleted file mode 100644 index 067b724164..0000000000 --- a/sysdeps/ieee754/float128/e_scalbf128.c +++ /dev/null @@ -1 +0,0 @@ -/* Not defined for _FloatN types. */ diff --git a/sysdeps/ieee754/float128/e_sinhf128.c b/sysdeps/ieee754/float128/e_sinhf128.c deleted file mode 100644 index 42a54e0015..0000000000 --- a/sysdeps/ieee754/float128/e_sinhf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/e_sinhl.c" diff --git a/sysdeps/ieee754/float128/float1282mpn.c b/sysdeps/ieee754/float128/float1282mpn.c deleted file mode 100644 index f012ccf0a6..0000000000 --- a/sysdeps/ieee754/float128/float1282mpn.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Convert a _Float128 type to multiprecision. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "../ldbl-128/ldbl2mpn.c" diff --git a/sysdeps/ieee754/float128/float128_private.h b/sysdeps/ieee754/float128/float128_private.h deleted file mode 100644 index 1e00853c83..0000000000 --- a/sysdeps/ieee754/float128/float128_private.h +++ /dev/null @@ -1,326 +0,0 @@ -/* _Float128 overrides for building ldbl-128 as _Float128. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This must be included before the function renames below. */ -#include -#include -#undef HUGE_VALL -#define HUGE_VALL HUGE_VAL_F128 -#include - -/* Renames derived from math_private.h. */ -#include -#include -#define ieee854_long_double_shape_type ieee854_float128_shape_type -#define ieee854_long_double ieee854_float128 - -#undef GET_LDOUBLE_LSW64 -#undef GET_LDOUBLE_MSW64 -#undef GET_LDOUBLE_WORDS64 -#undef SET_LDOUBLE_LSW64 -#undef SET_LDOUBLE_MSW64 -#undef SET_LDOUBLE_WORDS64 -#define GET_LDOUBLE_LSW64(x,y) GET_FLOAT128_LSW64 (x, y) -#define GET_LDOUBLE_MSW64(x,y) GET_FLOAT128_MSW64 (x, y) -#define GET_LDOUBLE_WORDS64(x,y,z) GET_FLOAT128_WORDS64 (x, y, z) -#define SET_LDOUBLE_LSW64(x,y) SET_FLOAT128_LSW64 (x, y) -#define SET_LDOUBLE_MSW64(x,y) SET_FLOAT128_MSW64 (x, y) -#define SET_LDOUBLE_WORDS64(x,y,z) SET_FLOAT128_WORDS64 (x, y, z) - -#undef IEEE854_LONG_DOUBLE_BIAS -#define IEEE854_LONG_DOUBLE_BIAS IEEE854_FLOAT128_BIAS - -#ifdef SET_RESTORE_ROUNDF128 -# undef SET_RESTORE_ROUNDL -# define SET_RESTORE_ROUNDL() SET_RESTORE_ROUNDF128() -#endif - - -/* misc macros from the header below. */ -#include -#undef FIX_LDBL_LONG_CONVERT_OVERFLOW -#undef FIX_LDBL_LLONG_CONVERT_OVERFLOW -#define FIX_LDBL_LONG_CONVERT_OVERFLOW FIX_FLT128_LONG_CONVERT_OVERFLOW -#define FIX_LDBL_LLONG_CONVERT_OVERFLOW FIX_FLT128_LLONG_CONVERT_OVERFLOW - - -/* float.h constants. */ -#include -#undef LDBL_DIG -#undef LDBL_EPSILON -#undef LDBL_MANT_DIG -#undef LDBL_MAX -#undef LDBL_MAX_10_EXP -#undef LDBL_MAX_EXP -#undef LDBL_MIN -#undef LDBL_MIN_10_EXP -#undef LDBL_MIN_EXP -#undef LDBL_TRUE_MIN -#define LDBL_DIG FLT128_DIG -#define LDBL_EPSILON FLT128_EPSILON -#define LDBL_MANT_DIG FLT128_MANT_DIG -#define LDBL_MAX FLT128_MAX -#define LDBL_MAX_10_EXP FLT128_MAX_10_EXP -#define LDBL_MAX_EXP FLT128_MAX_EXP -#define LDBL_MIN FLT128_MIN -#define LDBL_MIN_10_EXP FLT128_MIN_10_EXP -#define LDBL_MIN_EXP FLT128_MIN_EXP -#define LDBL_TRUE_MIN FLT128_TRUE_MIN - - -/* math.h GNU constants. */ -#undef M_El -#undef M_LOG2El -#undef M_LOG10El -#undef M_LN2l -#undef M_LN10l -#undef M_PIl -#undef M_PI_2l -#undef M_PI_4l -#undef M_1_PIl -#undef M_2_PIl -#undef M_2_SQRTPIl -#undef M_SQRT2l -#undef M_SQRT1_2l -#define M_El M_Ef128 -#define M_LOG2El M_LOG2Ef128 -#define M_LOG10El M_LOG10Ef128 -#define M_LN2l M_LN2f128 -#define M_LN10l M_LN10f128 -#define M_PIl M_PIf128 -#define M_PI_2l M_PI_2f128 -#define M_PI_4l M_PI_4f128 -#define M_1_PIl M_1_PIf128 -#define M_2_PIl M_2_PIf128 -#define M_2_SQRTPIl M_2_SQRTPIf128 -#define M_SQRT2l M_SQRT2f128 -#define M_SQRT1_2l M_SQRT1_2f128 - - -/* IEEE function renames. */ -#define __ieee754_acoshl __ieee754_acoshf128 -#define __ieee754_acosl __ieee754_acosf128 -#define __ieee754_asinhl __ieee754_asinhf128 -#define __ieee754_asinl __ieee754_asinf128 -#define __ieee754_atan2l __ieee754_atan2f128 -#define __ieee754_atanhl __ieee754_atanhf128 -#define __ieee754_coshl __ieee754_coshf128 -#define __ieee754_cosl __ieee754_cosf128 -#define __ieee754_exp10l __ieee754_exp10f128 -#define __ieee754_exp2l __ieee754_exp2f128 -#define __ieee754_expl __ieee754_expf128 -#define __ieee754_fmodl __ieee754_fmodf128 -#define __ieee754_gammal_r __ieee754_gammaf128_r -#define __ieee754_hypotl __ieee754_hypotf128 -#define __ieee754_ilogbl __ieee754_ilogbf128 -#define __ieee754_j0l __ieee754_j0f128 -#define __ieee754_j1l __ieee754_j1f128 -#define __ieee754_jnl __ieee754_jnf128 -#define __ieee754_lgammal_r __ieee754_lgammaf128_r -#define __ieee754_log10l __ieee754_log10f128 -#define __ieee754_log2l __ieee754_log2f128 -#define __ieee754_logl __ieee754_logf128 -#define __ieee754_powl __ieee754_powf128 -#define __ieee754_rem_pio2l __ieee754_rem_pio2f128 -#define __ieee754_remainderl __ieee754_remainderf128 -#define __ieee754_sinhl __ieee754_sinhf128 -#define __ieee754_sqrtl __ieee754_sqrtf128 -#define __ieee754_y0l __ieee754_y0f128 -#define __ieee754_y1l __ieee754_y1f128 -#define __ieee754_ynl __ieee754_ynf128 - - -/* finite math entry points. */ -#define __acoshl_finite __acoshf128_finite -#define __acosl_finite __acosf128_finite -#define __asinl_finite __asinf128_finite -#define __atan2l_finite __atan2f128_finite -#define __atanhl_finite __atanhf128_finite -#define __coshl_finite __coshf128_finite -#define __cosl_finite __cosf128_finite -#define __exp10l_finite __exp10f128_finite -#define __exp2l_finite __exp2f128_finite -#define __expl_finite __expf128_finite -#define __fmodl_finite __fmodf128_finite -#define __hypotl_finite __hypotf128_finite -#define __ilogbl_finite __ilogbf128_finite -#define __j0l_finite __j0f128_finite -#define __j1l_finite __j1f128_finite -#define __jnl_finite __jnf128_finite -#define __lgammal_r_finite __lgammaf128_r_finite -#define __log10l_finite __log10f128_finite -#define __log2l_finite __log2f128_finite -#define __logl_finite __logf128_finite -#define __powl_finite __powf128_finite -#define __remainderl_finite __remainderf128_finite -#define __sinhl_finite __sinhf128_finite -#define __y0l_finite __y0f128_finite -#define __y1l_finite __y1f128_finite -#define __ynl_finite __ynf128_finite - - -/* internal function names. */ -#define __asinhl __asinhf128 -#define __atanl __atanf128 -#define __cbrtl __cbrtf128 -#define __ceill __ceilf128 -#define __copysignl __copysignf128 -#define __cosl __cosf128 -#define __erfcl __erfcf128 -#define __erfl __erff128 -#define __expl __expf128 -#define __expm1l __expm1f128 -#define __fabsl __fabsf128 -#define __fdiml __fdimf128 -#define __finitel __finitef128 -#define __floorl __floorf128 -#define __fmal __fmaf128 -#define __fmaxl __fmaxf128 -#define __fminl __fminf128 -#define __fpclassifyl __fpclassifyf128 -#define __frexpl __frexpf128 -#define __gammal_r_finite __gammaf128_r_finite -#define __isinfl __isinff128 -#define __isnanl __isnanf128 -#define __issignalingl __issignalingf128 -#define __ldexpl __ldexpf128 -#define __llrintl __llrintf128 -#define __llroundl __llroundf128 -#define __log1pl __log1pf128 -#define __logbl __logbf128 -#define __logl __logf128 -#define __lrintl __lrintf128 -#define __lroundl __lroundf128 -#define __modfl __modff128 -#define __nearbyintl __nearbyintf128 -#define __nextafterl __nextafterf128 -#define __nextdownl __nextdownf128 -#define __nextupl __nextupf128 -#define __remquol __remquof128 -#define __rintl __rintf128 -#define __roundl __roundf128 -#define __scalblnl __scalblnf128 -#define __scalbnl __scalbnf128 -#define __signbitl __signbitf128 -#define __sincosl __sincosf128 -#define __sinl __sinf128 -#define __sqrtl __sqrtf128 -#define __tanhl __tanhf128 -#define __tanl __tanf128 -#define __truncl __truncf128 -#define __x2y2m1l __x2y2m1f128 - -/* __nexttowardf128 is not _Float128 API. */ -#define __nexttowardl __nexttowardf128_do_not_use -#define nexttowardl nexttowardf128_do_not_use - - -/* public entry points. */ -#define asinhl asinhf128 -#define atanl atanf128 -#define cbrtl cbrtf128 -#define ceill ceilf128 -#define copysignl copysignf128 -#define cosl cosf128 -#define erfcl erfcf128 -#define erfl erff128 -#define expl expf128 -#define expm1l expm1f128 -#define fabsl fabsf128 -#define fdiml fdimf128 -#define finitel finitef128_do_not_use -#define floorl floorf128 -#define fmal fmaf128 -#define fmaxl fmaxf128 -#define fminl fminf128 -#define frexpl frexpf128 -#define getpayloadl getpayloadf128 -#define isinfl isinff128_do_not_use -#define isnanl isnanf128_do_not_use -#define ldexpl ldexpf128 -#define llrintl llrintf128 -#define llroundl llroundf128 -#define log1pl log1pf128 -#define logbl logbf128 -#define logl logf128 -#define lrintl lrintf128 -#define lroundl lroundf128 -#define modfl modff128 -#define nanl nanf128 -#define nearbyintl nearbyintf128 -#define nextafterl nextafterf128 -#define nextdownl nextdownf128 -#define nextupl nextupf128 -#define remquol remquof128 -#define rintl rintf128 -#define roundevenl roundevenf128 -#define roundl roundf128 -#define scalbnl scalbnf128 -#define sincosl sincosf128 -#define sinl sinf128 -#define sqrtl sqrtf128 -#define tanhl tanhf128 -#define tanl tanf128 -#define totalorderl totalorderf128 -#define totalordermagl totalordermagf128 -#define truncl truncf128 - - -/* misc internal renames. */ -#define __builtin_fmal __builtin_fmaf128 -#define __expl_table __expf128_table -#define __gamma_productl __gamma_productf128 -#define __kernel_cosl __kernel_cosf128 -#define __kernel_rem_pio2l __kernel_rem_pio2f128 -#define __kernel_sincosl __kernel_sincosf128 -#define __kernel_sinl __kernel_sinf128 -#define __kernel_tanl __kernel_tanf128 -#define __lgamma_negl __lgamma_negf128 -#define __lgamma_productl __lgamma_productf128 -#define __mpn_extract_long_double __mpn_extract_float128 -#define __sincosl_table __sincosf128_table -#define mul_splitl mul_splitf128 - -/* Builtin renames. */ -#define __builtin_copysignl __builtin_copysignf128 -#define __builtin_signbitl __builtin_signbit - -/* Get the constant suffix from bits/floatn-compat.h. */ -#define L(x) __f128 (x) - -static inline void -mul_splitf128 (_Float128 *hi, _Float128 *lo, _Float128 x, _Float128 y) -{ -#ifdef __FP_FAST_FMAF128 - /* Fast built-in fused multiply-add. */ - *hi = x * y; - *lo = __builtin_fmal (x, y, -*hi); -#else - /* Apply Dekker's algorithm. */ - *hi = x * y; -# define C ((1LL << (FLT128_MANT_DIG + 1) / 2) + 1) - _Float128 x1 = x * C; - _Float128 y1 = y * C; -# undef C - x1 = (x - x1) + x1; - y1 = (y - y1) + y1; - _Float128 x2 = x - x1; - _Float128 y2 = y - y1; - *lo = (((x1 * y1 - *hi) + x1 * y2) + x2 * y1) + x2 * y2; -#endif -} diff --git a/sysdeps/ieee754/float128/gamma_productf128.c b/sysdeps/ieee754/float128/gamma_productf128.c deleted file mode 100644 index be2271f12f..0000000000 --- a/sysdeps/ieee754/float128/gamma_productf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/gamma_productl.c" diff --git a/sysdeps/ieee754/float128/ieee754_float128.h b/sysdeps/ieee754/float128/ieee754_float128.h deleted file mode 100644 index e8e7211d88..0000000000 --- a/sysdeps/ieee754/float128/ieee754_float128.h +++ /dev/null @@ -1,140 +0,0 @@ -/* _Float128 IEEE like macros. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ -#ifndef _IEEE754_FLOAT128_H -#define _IEEE754_FLOAT128_H - -#include -#include - -# if __FLOAT_WORD_ORDER == BIG_ENDIAN -# define __FLT_EORDER2(t, a, b) t a; t b; -# define __FLT_EORDER4(t, a, b, c, d) \ - t a; t b; t c; t d; -# define __FLT_EORDER6(t, a, b, c, d, e, f) \ - t a; t b; t c; t d; t e; t f; -# define __FLT_EORDER7(t, a, b, c, d, e, f, g) \ - t a; t b; t c; t d; t e; t f; t g; -# else -# define __FLT_EORDER2(t, a, b) \ - t b; t a; -# define __FLT_EORDER4(t, a, b, c, d) \ - t d; t c; t b; t a; -# define __FLT_EORDER6(t, a, b, c, d, e, f) \ - t f; t e; t d; t c; t b; t a; -# define __FLT_EORDER7(t, a, b, c, d, e, f, g) \ - t g; t f; t e; t d; t c; t b; t a; -# endif - -/* A union which permits us to convert between _Float128 and - four 32 bit ints or two 64 bit ints. */ - -typedef union -{ - _Float128 value; - struct - { - __FLT_EORDER2 (uint64_t, msw, lsw); - } parts64; - struct - { - __FLT_EORDER4 (uint32_t, w0, w1, w2, w3); - } parts32; -} ieee854_float128_shape_type; - -/* Get two 64 bit ints from a _Float128. */ - -# define GET_FLOAT128_WORDS64(ix0,ix1,d) \ -do { \ - ieee854_float128_shape_type qw_u; \ - qw_u.value = (d); \ - (ix0) = qw_u.parts64.msw; \ - (ix1) = qw_u.parts64.lsw; \ -} while (0) - -/* Set a _Float128 from two 64 bit ints. */ - -# define SET_FLOAT128_WORDS64(d,ix0,ix1) \ -do { \ - ieee854_float128_shape_type qw_u; \ - qw_u.parts64.msw = (ix0); \ - qw_u.parts64.lsw = (ix1); \ - (d) = qw_u.value; \ -} while (0) - -/* Get the more significant 64 bits of a _Float128 mantissa. */ - -# define GET_FLOAT128_MSW64(v,d) \ -do { \ - ieee854_float128_shape_type sh_u; \ - sh_u.value = (d); \ - (v) = sh_u.parts64.msw; \ -} while (0) - -/* Set the more significant 64 bits of a _Float128 mantissa from an int. */ - -# define SET_FLOAT128_MSW64(d,v) \ -do { \ - ieee854_float128_shape_type sh_u; \ - sh_u.value = (d); \ - sh_u.parts64.msw = (v); \ - (d) = sh_u.value; \ -} while (0) - -/* Get the least significant 64 bits of a _Float128 mantissa. */ - -# define GET_FLOAT128_LSW64(v,d) \ -do { \ - ieee854_float128_shape_type sh_u; \ - sh_u.value = (d); \ - (v) = sh_u.parts64.lsw; \ -} while (0) - -/* Likewise, some helper macros which are exposed via ieee754.h for - C99 real types, but not _Float128. */ - -union ieee854_float128 - { - _Float128 d; - - /* This is the IEEE 854 quad-precision format. */ - struct - { - __FLT_EORDER6 (unsigned int, negative:1, - exponent:15, - mantissa0:16, - mantissa1:32, - mantissa2:32, - mantissa3:32) - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { - __FLT_EORDER7 (unsigned int, negative:1, - exponent:15, - quiet_nan:1, - mantissa0:15, - mantissa1:32, - mantissa2:32, - mantissa3:32) - } ieee_nan; - }; - -#define IEEE854_FLOAT128_BIAS 0x3fff /* Added to exponent. */ - -#endif diff --git a/sysdeps/ieee754/float128/k_cosf128.c b/sysdeps/ieee754/float128/k_cosf128.c deleted file mode 100644 index 9db0906e9a..0000000000 --- a/sysdeps/ieee754/float128/k_cosf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/k_cosl.c" diff --git a/sysdeps/ieee754/float128/k_sincosf128.c b/sysdeps/ieee754/float128/k_sincosf128.c deleted file mode 100644 index 14c0f1eccf..0000000000 --- a/sysdeps/ieee754/float128/k_sincosf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/k_sincosl.c" diff --git a/sysdeps/ieee754/float128/k_sinf128.c b/sysdeps/ieee754/float128/k_sinf128.c deleted file mode 100644 index f3acf1cfe1..0000000000 --- a/sysdeps/ieee754/float128/k_sinf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/k_sinl.c" diff --git a/sysdeps/ieee754/float128/k_tanf128.c b/sysdeps/ieee754/float128/k_tanf128.c deleted file mode 100644 index ca6be539f7..0000000000 --- a/sysdeps/ieee754/float128/k_tanf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/k_tanl.c" diff --git a/sysdeps/ieee754/float128/lgamma_negf128.c b/sysdeps/ieee754/float128/lgamma_negf128.c deleted file mode 100644 index 9c16f93025..0000000000 --- a/sysdeps/ieee754/float128/lgamma_negf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/lgamma_negl.c" diff --git a/sysdeps/ieee754/float128/lgamma_productf128.c b/sysdeps/ieee754/float128/lgamma_productf128.c deleted file mode 100644 index 5efe5dd576..0000000000 --- a/sysdeps/ieee754/float128/lgamma_productf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/lgamma_productl.c" diff --git a/sysdeps/ieee754/float128/s_asinhf128.c b/sysdeps/ieee754/float128/s_asinhf128.c deleted file mode 100644 index 7b93d8cf3a..0000000000 --- a/sysdeps/ieee754/float128/s_asinhf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_asinhl.c" diff --git a/sysdeps/ieee754/float128/s_atanf128.c b/sysdeps/ieee754/float128/s_atanf128.c deleted file mode 100644 index 9b4d7ecec3..0000000000 --- a/sysdeps/ieee754/float128/s_atanf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_atanl.c" diff --git a/sysdeps/ieee754/float128/s_cbrtf128.c b/sysdeps/ieee754/float128/s_cbrtf128.c deleted file mode 100644 index 3bd5797373..0000000000 --- a/sysdeps/ieee754/float128/s_cbrtf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_cbrtl.c" diff --git a/sysdeps/ieee754/float128/s_ceilf128.c b/sysdeps/ieee754/float128/s_ceilf128.c deleted file mode 100644 index 0af15f5f03..0000000000 --- a/sysdeps/ieee754/float128/s_ceilf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_ceill.c" diff --git a/sysdeps/ieee754/float128/s_copysignf128.c b/sysdeps/ieee754/float128/s_copysignf128.c deleted file mode 100644 index 808f7abbc0..0000000000 --- a/sysdeps/ieee754/float128/s_copysignf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_copysignl.c" diff --git a/sysdeps/ieee754/float128/s_cosf128.c b/sysdeps/ieee754/float128/s_cosf128.c deleted file mode 100644 index 8ba552695c..0000000000 --- a/sysdeps/ieee754/float128/s_cosf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_cosl.c" diff --git a/sysdeps/ieee754/float128/s_erff128.c b/sysdeps/ieee754/float128/s_erff128.c deleted file mode 100644 index ac16ad6665..0000000000 --- a/sysdeps/ieee754/float128/s_erff128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_erfl.c" diff --git a/sysdeps/ieee754/float128/s_expm1f128.c b/sysdeps/ieee754/float128/s_expm1f128.c deleted file mode 100644 index ea28d89db4..0000000000 --- a/sysdeps/ieee754/float128/s_expm1f128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_expm1l.c" diff --git a/sysdeps/ieee754/float128/s_fabsf128.c b/sysdeps/ieee754/float128/s_fabsf128.c deleted file mode 100644 index 79ba47c3fd..0000000000 --- a/sysdeps/ieee754/float128/s_fabsf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_fabsl.c" diff --git a/sysdeps/ieee754/float128/s_finitef128.c b/sysdeps/ieee754/float128/s_finitef128.c deleted file mode 100644 index 801de88e32..0000000000 --- a/sysdeps/ieee754/float128/s_finitef128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_finitel.c" diff --git a/sysdeps/ieee754/float128/s_floorf128.c b/sysdeps/ieee754/float128/s_floorf128.c deleted file mode 100644 index 18298436a1..0000000000 --- a/sysdeps/ieee754/float128/s_floorf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_floorl.c" diff --git a/sysdeps/ieee754/float128/s_fmaf128.c b/sysdeps/ieee754/float128/s_fmaf128.c deleted file mode 100644 index 6497895c8d..0000000000 --- a/sysdeps/ieee754/float128/s_fmaf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_fmal.c" diff --git a/sysdeps/ieee754/float128/s_fpclassifyf128.c b/sysdeps/ieee754/float128/s_fpclassifyf128.c deleted file mode 100644 index 15131dc4a2..0000000000 --- a/sysdeps/ieee754/float128/s_fpclassifyf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_fpclassifyl.c" diff --git a/sysdeps/ieee754/float128/s_frexpf128.c b/sysdeps/ieee754/float128/s_frexpf128.c deleted file mode 100644 index 7b040b3e33..0000000000 --- a/sysdeps/ieee754/float128/s_frexpf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_frexpl.c" diff --git a/sysdeps/ieee754/float128/s_fromfpf128.c b/sysdeps/ieee754/float128/s_fromfpf128.c deleted file mode 100644 index 891de3d448..0000000000 --- a/sysdeps/ieee754/float128/s_fromfpf128.c +++ /dev/null @@ -1,5 +0,0 @@ -#define UNSIGNED 0 -#define INEXACT 0 -#define FUNC fromfpf128 -#include -#include "../ldbl-128/s_fromfpl_main.c" diff --git a/sysdeps/ieee754/float128/s_fromfpxf128.c b/sysdeps/ieee754/float128/s_fromfpxf128.c deleted file mode 100644 index 21676fab03..0000000000 --- a/sysdeps/ieee754/float128/s_fromfpxf128.c +++ /dev/null @@ -1,5 +0,0 @@ -#define UNSIGNED 0 -#define INEXACT 1 -#define FUNC fromfpxf128 -#include -#include "../ldbl-128/s_fromfpl_main.c" diff --git a/sysdeps/ieee754/float128/s_getpayloadf128.c b/sysdeps/ieee754/float128/s_getpayloadf128.c deleted file mode 100644 index 2e2607a81b..0000000000 --- a/sysdeps/ieee754/float128/s_getpayloadf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_getpayloadl.c" diff --git a/sysdeps/ieee754/float128/s_isinff128.c b/sysdeps/ieee754/float128/s_isinff128.c deleted file mode 100644 index 62cc424b16..0000000000 --- a/sysdeps/ieee754/float128/s_isinff128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_isinfl.c" diff --git a/sysdeps/ieee754/float128/s_isnanf128.c b/sysdeps/ieee754/float128/s_isnanf128.c deleted file mode 100644 index efba24059a..0000000000 --- a/sysdeps/ieee754/float128/s_isnanf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_isnanl.c" diff --git a/sysdeps/ieee754/float128/s_issignalingf128.c b/sysdeps/ieee754/float128/s_issignalingf128.c deleted file mode 100644 index 1d4599544f..0000000000 --- a/sysdeps/ieee754/float128/s_issignalingf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_issignalingl.c" diff --git a/sysdeps/ieee754/float128/s_llrintf128.c b/sysdeps/ieee754/float128/s_llrintf128.c deleted file mode 100644 index bb9ca580cd..0000000000 --- a/sysdeps/ieee754/float128/s_llrintf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_llrintl.c" diff --git a/sysdeps/ieee754/float128/s_llroundf128.c b/sysdeps/ieee754/float128/s_llroundf128.c deleted file mode 100644 index be54a90608..0000000000 --- a/sysdeps/ieee754/float128/s_llroundf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_llroundl.c" diff --git a/sysdeps/ieee754/float128/s_log1pf128.c b/sysdeps/ieee754/float128/s_log1pf128.c deleted file mode 100644 index 48bb84f987..0000000000 --- a/sysdeps/ieee754/float128/s_log1pf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_log1pl.c" diff --git a/sysdeps/ieee754/float128/s_logbf128.c b/sysdeps/ieee754/float128/s_logbf128.c deleted file mode 100644 index 167384a8d4..0000000000 --- a/sysdeps/ieee754/float128/s_logbf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_logbl.c" diff --git a/sysdeps/ieee754/float128/s_lrintf128.c b/sysdeps/ieee754/float128/s_lrintf128.c deleted file mode 100644 index 1cfa9d7ca4..0000000000 --- a/sysdeps/ieee754/float128/s_lrintf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_lrintl.c" diff --git a/sysdeps/ieee754/float128/s_lroundf128.c b/sysdeps/ieee754/float128/s_lroundf128.c deleted file mode 100644 index 13ba9f220d..0000000000 --- a/sysdeps/ieee754/float128/s_lroundf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_lroundl.c" diff --git a/sysdeps/ieee754/float128/s_modff128.c b/sysdeps/ieee754/float128/s_modff128.c deleted file mode 100644 index 4618c6c380..0000000000 --- a/sysdeps/ieee754/float128/s_modff128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_modfl.c" diff --git a/sysdeps/ieee754/float128/s_nearbyintf128.c b/sysdeps/ieee754/float128/s_nearbyintf128.c deleted file mode 100644 index e61a3b3bfb..0000000000 --- a/sysdeps/ieee754/float128/s_nearbyintf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_nearbyintl.c" diff --git a/sysdeps/ieee754/float128/s_nextafterf128.c b/sysdeps/ieee754/float128/s_nextafterf128.c deleted file mode 100644 index 2c43a00384..0000000000 --- a/sysdeps/ieee754/float128/s_nextafterf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_nextafterl.c" diff --git a/sysdeps/ieee754/float128/s_nexttowardf128.c b/sysdeps/ieee754/float128/s_nexttowardf128.c deleted file mode 100644 index 006e4c98b1..0000000000 --- a/sysdeps/ieee754/float128/s_nexttowardf128.c +++ /dev/null @@ -1 +0,0 @@ -/* This function does not exist for _FloatN types. */ diff --git a/sysdeps/ieee754/float128/s_nextupf128.c b/sysdeps/ieee754/float128/s_nextupf128.c deleted file mode 100644 index 7d5d0b8c72..0000000000 --- a/sysdeps/ieee754/float128/s_nextupf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_nextupl.c" diff --git a/sysdeps/ieee754/float128/s_remquof128.c b/sysdeps/ieee754/float128/s_remquof128.c deleted file mode 100644 index 1cef61ab1b..0000000000 --- a/sysdeps/ieee754/float128/s_remquof128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_remquol.c" diff --git a/sysdeps/ieee754/float128/s_rintf128.c b/sysdeps/ieee754/float128/s_rintf128.c deleted file mode 100644 index 2adb95f360..0000000000 --- a/sysdeps/ieee754/float128/s_rintf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_rintl.c" diff --git a/sysdeps/ieee754/float128/s_roundevenf128.c b/sysdeps/ieee754/float128/s_roundevenf128.c deleted file mode 100644 index 5a9b3f395f..0000000000 --- a/sysdeps/ieee754/float128/s_roundevenf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_roundevenl.c" diff --git a/sysdeps/ieee754/float128/s_roundf128.c b/sysdeps/ieee754/float128/s_roundf128.c deleted file mode 100644 index 1eb36f2a5e..0000000000 --- a/sysdeps/ieee754/float128/s_roundf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_roundl.c" diff --git a/sysdeps/ieee754/float128/s_scalblnf128.c b/sysdeps/ieee754/float128/s_scalblnf128.c deleted file mode 100644 index 999223c517..0000000000 --- a/sysdeps/ieee754/float128/s_scalblnf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_scalblnl.c" diff --git a/sysdeps/ieee754/float128/s_scalbnf128.c b/sysdeps/ieee754/float128/s_scalbnf128.c deleted file mode 100644 index 0e7ab2663b..0000000000 --- a/sysdeps/ieee754/float128/s_scalbnf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_scalbnl.c" diff --git a/sysdeps/ieee754/float128/s_setpayloadf128.c b/sysdeps/ieee754/float128/s_setpayloadf128.c deleted file mode 100644 index 63e046a269..0000000000 --- a/sysdeps/ieee754/float128/s_setpayloadf128.c +++ /dev/null @@ -1,4 +0,0 @@ -#include -#define SIG 0 -#define FUNC setpayloadf128 -#include "../ldbl-128/s_setpayloadl_main.c" diff --git a/sysdeps/ieee754/float128/s_setpayloadsigf128.c b/sysdeps/ieee754/float128/s_setpayloadsigf128.c deleted file mode 100644 index 85b2c4a1a8..0000000000 --- a/sysdeps/ieee754/float128/s_setpayloadsigf128.c +++ /dev/null @@ -1,4 +0,0 @@ -#include -#define SIG 1 -#define FUNC setpayloadsigf128 -#include "../ldbl-128/s_setpayloadl_main.c" diff --git a/sysdeps/ieee754/float128/s_signbitf128.c b/sysdeps/ieee754/float128/s_signbitf128.c deleted file mode 100644 index 71c1ca3a34..0000000000 --- a/sysdeps/ieee754/float128/s_signbitf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_signbitl.c" diff --git a/sysdeps/ieee754/float128/s_significandf128.c b/sysdeps/ieee754/float128/s_significandf128.c deleted file mode 100644 index 067b724164..0000000000 --- a/sysdeps/ieee754/float128/s_significandf128.c +++ /dev/null @@ -1 +0,0 @@ -/* Not defined for _FloatN types. */ diff --git a/sysdeps/ieee754/float128/s_sincosf128.c b/sysdeps/ieee754/float128/s_sincosf128.c deleted file mode 100644 index 472adde17f..0000000000 --- a/sysdeps/ieee754/float128/s_sincosf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_sincosl.c" diff --git a/sysdeps/ieee754/float128/s_sinf128.c b/sysdeps/ieee754/float128/s_sinf128.c deleted file mode 100644 index d79a1163a5..0000000000 --- a/sysdeps/ieee754/float128/s_sinf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_sinl.c" diff --git a/sysdeps/ieee754/float128/s_tanf128.c b/sysdeps/ieee754/float128/s_tanf128.c deleted file mode 100644 index 382961aada..0000000000 --- a/sysdeps/ieee754/float128/s_tanf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_tanl.c" diff --git a/sysdeps/ieee754/float128/s_tanhf128.c b/sysdeps/ieee754/float128/s_tanhf128.c deleted file mode 100644 index e02c9a6005..0000000000 --- a/sysdeps/ieee754/float128/s_tanhf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_tanhl.c" diff --git a/sysdeps/ieee754/float128/s_totalorderf128.c b/sysdeps/ieee754/float128/s_totalorderf128.c deleted file mode 100644 index 1b115d8307..0000000000 --- a/sysdeps/ieee754/float128/s_totalorderf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_totalorderl.c" diff --git a/sysdeps/ieee754/float128/s_totalordermagf128.c b/sysdeps/ieee754/float128/s_totalordermagf128.c deleted file mode 100644 index e44c657275..0000000000 --- a/sysdeps/ieee754/float128/s_totalordermagf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_totalordermagl.c" diff --git a/sysdeps/ieee754/float128/s_truncf128.c b/sysdeps/ieee754/float128/s_truncf128.c deleted file mode 100644 index 474d9dc77e..0000000000 --- a/sysdeps/ieee754/float128/s_truncf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/s_truncl.c" diff --git a/sysdeps/ieee754/float128/s_ufromfpf128.c b/sysdeps/ieee754/float128/s_ufromfpf128.c deleted file mode 100644 index 0cd2281035..0000000000 --- a/sysdeps/ieee754/float128/s_ufromfpf128.c +++ /dev/null @@ -1,5 +0,0 @@ -#define UNSIGNED 1 -#define INEXACT 0 -#define FUNC ufromfpf128 -#include -#include "../ldbl-128/s_fromfpl_main.c" diff --git a/sysdeps/ieee754/float128/s_ufromfpxf128.c b/sysdeps/ieee754/float128/s_ufromfpxf128.c deleted file mode 100644 index c0cd7e3bc8..0000000000 --- a/sysdeps/ieee754/float128/s_ufromfpxf128.c +++ /dev/null @@ -1,5 +0,0 @@ -#define UNSIGNED 1 -#define INEXACT 1 -#define FUNC ufromfpxf128 -#include -#include "../ldbl-128/s_fromfpl_main.c" diff --git a/sysdeps/ieee754/float128/strfromf128.c b/sysdeps/ieee754/float128/strfromf128.c deleted file mode 100644 index 597c7e62f9..0000000000 --- a/sysdeps/ieee754/float128/strfromf128.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Definitions for strfromf128. Implementation in stdlib/strfrom-skeleton.c. - - Copyright (C) 2017 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FLOAT _Float128 -#define STRFROM strfromf128 - -#include -#include - -#include diff --git a/sysdeps/ieee754/float128/t_sincosf128.c b/sysdeps/ieee754/float128/t_sincosf128.c deleted file mode 100644 index 7e699d3c8e..0000000000 --- a/sysdeps/ieee754/float128/t_sincosf128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/t_sincosl.c" diff --git a/sysdeps/ieee754/float128/x2y2m1f128.c b/sysdeps/ieee754/float128/x2y2m1f128.c deleted file mode 100644 index 68880792e6..0000000000 --- a/sysdeps/ieee754/float128/x2y2m1f128.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include "../ldbl-128/x2y2m1l.c" diff --git a/sysdeps/ieee754/flt-32/e_acosf.c b/sysdeps/ieee754/flt-32/e_acosf.c deleted file mode 100644 index 6f792f6604..0000000000 --- a/sysdeps/ieee754/flt-32/e_acosf.c +++ /dev/null @@ -1,78 +0,0 @@ -/* e_acosf.c -- float version of e_acos.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include - -static const float -one = 1.0000000000e+00, /* 0x3F800000 */ -pi = 3.1415925026e+00, /* 0x40490fda */ -pio2_hi = 1.5707962513e+00, /* 0x3fc90fda */ -pio2_lo = 7.5497894159e-08, /* 0x33a22168 */ -pS0 = 1.6666667163e-01, /* 0x3e2aaaab */ -pS1 = -3.2556581497e-01, /* 0xbea6b090 */ -pS2 = 2.0121252537e-01, /* 0x3e4e0aa8 */ -pS3 = -4.0055535734e-02, /* 0xbd241146 */ -pS4 = 7.9153501429e-04, /* 0x3a4f7f04 */ -pS5 = 3.4793309169e-05, /* 0x3811ef08 */ -qS1 = -2.4033949375e+00, /* 0xc019d139 */ -qS2 = 2.0209457874e+00, /* 0x4001572d */ -qS3 = -6.8828397989e-01, /* 0xbf303361 */ -qS4 = 7.7038154006e-02; /* 0x3d9dc62e */ - -float -__ieee754_acosf(float x) -{ - float z,p,q,r,w,s,c,df; - int32_t hx,ix; - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix==0x3f800000) { /* |x|==1 */ - if(hx>0) return 0.0; /* acos(1) = 0 */ - else return pi+(float)2.0*pio2_lo; /* acos(-1)= pi */ - } else if(ix>0x3f800000) { /* |x| >= 1 */ - return (x-x)/(x-x); /* acos(|x|>1) is NaN */ - } - if(ix<0x3f000000) { /* |x| < 0.5 */ - if(ix<=0x32800000) return pio2_hi+pio2_lo;/*if|x|<=2**-26*/ - z = x*x; - p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5))))); - q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4))); - r = p/q; - return pio2_hi - (x - (pio2_lo-x*r)); - } else if (hx<0) { /* x < -0.5 */ - z = (one+x)*(float)0.5; - p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5))))); - q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4))); - s = __ieee754_sqrtf(z); - r = p/q; - w = r*s-pio2_lo; - return pi - (float)2.0*(s+w); - } else { /* x > 0.5 */ - int32_t idf; - z = (one-x)*(float)0.5; - s = __ieee754_sqrtf(z); - df = s; - GET_FLOAT_WORD(idf,df); - SET_FLOAT_WORD(df,idf&0xfffff000); - c = (z-df*df)/(s+df); - p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5))))); - q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4))); - r = p/q; - w = r*s+c; - return (float)2.0*(df+w); - } -} -strong_alias (__ieee754_acosf, __acosf_finite) diff --git a/sysdeps/ieee754/flt-32/e_acoshf.c b/sysdeps/ieee754/flt-32/e_acoshf.c deleted file mode 100644 index aabfb85df7..0000000000 --- a/sysdeps/ieee754/flt-32/e_acoshf.c +++ /dev/null @@ -1,49 +0,0 @@ -/* e_acoshf.c -- float version of e_acosh.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: e_acoshf.c,v 1.5 1995/05/12 04:57:20 jtc Exp $"; -#endif - -#include -#include - -static const float -one = 1.0, -ln2 = 6.9314718246e-01; /* 0x3f317218 */ - -float __ieee754_acoshf(float x) -{ - float t; - int32_t hx; - GET_FLOAT_WORD(hx,x); - if(hx<0x3f800000) { /* x < 1 */ - return (x-x)/(x-x); - } else if(hx >=0x4d800000) { /* x > 2**28 */ - if(hx >=0x7f800000) { /* x is inf of NaN */ - return x+x; - } else - return __ieee754_logf(x)+ln2; /* acosh(huge)=log(2x) */ - } else if (hx==0x3f800000) { - return 0.0; /* acosh(1) = 0 */ - } else if (hx > 0x40000000) { /* 2**28 > x > 2 */ - t=x*x; - return __ieee754_logf((float)2.0*x-one/(x+__ieee754_sqrtf(t-one))); - } else { /* 1 - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: e_asinf.c,v 1.5 1995/05/12 04:57:25 jtc Exp $"; -#endif - -#include -#include -#include - -static const float -one = 1.0000000000e+00, /* 0x3F800000 */ -huge = 1.000e+30, - -pio2_hi = 1.57079637050628662109375f, -pio2_lo = -4.37113900018624283e-8f, -pio4_hi = 0.785398185253143310546875f, - -/* asin x = x + x^3 p(x^2) - -0.5 <= x <= 0.5; - Peak relative error 4.8e-9 */ -p0 = 1.666675248e-1f, -p1 = 7.495297643e-2f, -p2 = 4.547037598e-2f, -p3 = 2.417951451e-2f, -p4 = 4.216630880e-2f; - -float __ieee754_asinf(float x) -{ - float t,w,p,q,c,r,s; - int32_t hx,ix; - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix==0x3f800000) { - /* asin(1)=+-pi/2 with inexact */ - return x*pio2_hi+x*pio2_lo; - } else if(ix> 0x3f800000) { /* |x|>= 1 */ - return (x-x)/(x-x); /* asin(|x|>1) is NaN */ - } else if (ix<0x3f000000) { /* |x|<0.5 */ - if(ix<0x32000000) { /* if |x| < 2**-27 */ - math_check_force_underflow (x); - if(huge+x>one) return x;/* return x with inexact if x!=0*/ - } else { - t = x*x; - w = t * (p0 + t * (p1 + t * (p2 + t * (p3 + t * p4)))); - return x+x*w; - } - } - /* 1> |x|>= 0.5 */ - w = one-fabsf(x); - t = w*0.5f; - p = t * (p0 + t * (p1 + t * (p2 + t * (p3 + t * p4)))); - s = __ieee754_sqrtf(t); - if(ix>=0x3F79999A) { /* if |x| > 0.975 */ - t = pio2_hi-(2.0f*(s+s*p)-pio2_lo); - } else { - int32_t iw; - w = s; - GET_FLOAT_WORD(iw,w); - SET_FLOAT_WORD(w,iw&0xfffff000); - c = (t-w*w)/(s+w); - r = p; - p = 2.0f*s*r-(pio2_lo-2.0f*c); - q = pio4_hi-2.0f*w; - t = pio4_hi-(p-q); - } - if(hx>0) return t; else return -t; -} -strong_alias (__ieee754_asinf, __asinf_finite) diff --git a/sysdeps/ieee754/flt-32/e_atan2f.c b/sysdeps/ieee754/flt-32/e_atan2f.c deleted file mode 100644 index 29eefc0dd6..0000000000 --- a/sysdeps/ieee754/flt-32/e_atan2f.c +++ /dev/null @@ -1,94 +0,0 @@ -/* e_atan2f.c -- float version of e_atan2.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include - -static const float -tiny = 1.0e-30, -zero = 0.0, -pi_o_4 = 7.8539818525e-01, /* 0x3f490fdb */ -pi_o_2 = 1.5707963705e+00, /* 0x3fc90fdb */ -pi = 3.1415927410e+00, /* 0x40490fdb */ -pi_lo = -8.7422776573e-08; /* 0xb3bbbd2e */ - -float -__ieee754_atan2f (float y, float x) -{ - float z; - int32_t k,m,hx,hy,ix,iy; - - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - GET_FLOAT_WORD(hy,y); - iy = hy&0x7fffffff; - if((ix>0x7f800000)|| - (iy>0x7f800000)) /* x or y is NaN */ - return x+y; - if(hx==0x3f800000) return __atanf(y); /* x=1.0 */ - m = ((hy>>31)&1)|((hx>>30)&2); /* 2*sign(x)+sign(y) */ - - /* when y = 0 */ - if(iy==0) { - switch(m) { - case 0: - case 1: return y; /* atan(+-0,+anything)=+-0 */ - case 2: return pi+tiny;/* atan(+0,-anything) = pi */ - case 3: return -pi-tiny;/* atan(-0,-anything) =-pi */ - } - } - /* when x = 0 */ - if(ix==0) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny; - - /* when x is INF */ - if(ix==0x7f800000) { - if(iy==0x7f800000) { - switch(m) { - case 0: return pi_o_4+tiny;/* atan(+INF,+INF) */ - case 1: return -pi_o_4-tiny;/* atan(-INF,+INF) */ - case 2: return (float)3.0*pi_o_4+tiny;/*atan(+INF,-INF)*/ - case 3: return (float)-3.0*pi_o_4-tiny;/*atan(-INF,-INF)*/ - } - } else { - switch(m) { - case 0: return zero ; /* atan(+...,+INF) */ - case 1: return -zero ; /* atan(-...,+INF) */ - case 2: return pi+tiny ; /* atan(+...,-INF) */ - case 3: return -pi-tiny ; /* atan(-...,-INF) */ - } - } - } - /* when y is INF */ - if(iy==0x7f800000) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny; - - /* compute y/x */ - k = (iy-ix)>>23; - if(k > 60) z=pi_o_2+(float)0.5*pi_lo; /* |y/x| > 2**60 */ - else if(hx<0&&k<-60) z=0.0; /* |y|/x < -2**60 */ - else z=__atanf(fabsf(y/x)); /* safe to do y/x */ - switch (m) { - case 0: return z ; /* atan(+,+) */ - case 1: { - u_int32_t zh; - GET_FLOAT_WORD(zh,z); - SET_FLOAT_WORD(z,zh ^ 0x80000000); - } - return z ; /* atan(-,+) */ - case 2: return pi-(z-pi_lo);/* atan(+,-) */ - default: /* case 3 */ - return (z-pi_lo)-pi;/* atan(-,-) */ - } -} -strong_alias (__ieee754_atan2f, __atan2f_finite) diff --git a/sysdeps/ieee754/flt-32/e_atanhf.c b/sysdeps/ieee754/flt-32/e_atanhf.c deleted file mode 100644 index feb6beeec7..0000000000 --- a/sysdeps/ieee754/flt-32/e_atanhf.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* __ieee754_atanh(x) - Method : - 1.Reduced x to positive by atanh(-x) = -atanh(x) - 2.For x>=0.5 - 1 2x x - atanh(x) = --- * log(1 + -------) = 0.5 * log1p(2 * --------) - 2 1 - x 1 - x - - For x<0.5 - atanh(x) = 0.5*log1p(2x+2x*x/(1-x)) - - Special cases: - atanh(x) is NaN if |x| > 1 with signal; - atanh(NaN) is that NaN with no signal; - atanh(+-1) is +-INF with signal. - - */ - -#include -#include -#include -#include - -static const float huge = 1e30; - -float -__ieee754_atanhf (float x) -{ - float xa = fabsf (x); - float t; - if (isless (xa, 0.5f)) - { - if (__glibc_unlikely (xa < 0x1.0p-28f)) - { - math_force_eval (huge + x); - math_check_force_underflow (x); - return x; - } - - t = xa + xa; - t = 0.5f * __log1pf (t + t * xa / (1.0f - xa)); - } - else if (__glibc_likely (isless (xa, 1.0f))) - t = 0.5f * __log1pf ((xa + xa) / (1.0f - xa)); - else - { - if (isgreater (xa, 1.0f)) - return (x - x) / (x - x); - - return x / 0.0f; - } - - return __copysignf (t, x); -} -strong_alias (__ieee754_atanhf, __atanhf_finite) diff --git a/sysdeps/ieee754/flt-32/e_coshf.c b/sysdeps/ieee754/flt-32/e_coshf.c deleted file mode 100644 index 7b223758e1..0000000000 --- a/sysdeps/ieee754/flt-32/e_coshf.c +++ /dev/null @@ -1,63 +0,0 @@ -/* e_coshf.c -- float version of e_cosh.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - * Optimizations by Ulrich Drepper , 2011 - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include - -static const float huge = 1.0e30; -static const float one = 1.0, half=0.5; - -float -__ieee754_coshf (float x) -{ - float t,w; - int32_t ix; - - GET_FLOAT_WORD(ix,x); - ix &= 0x7fffffff; - - /* |x| in [0,22] */ - if (ix < 0x41b00000) { - /* |x| in [0,0.5*ln2], return 1+expm1(|x|)^2/(2*exp(|x|)) */ - if(ix<0x3eb17218) { - if (ix<0x24000000) return one; /* cosh(tiny) = 1 */ - t = __expm1f(fabsf(x)); - w = one+t; - return one+(t*t)/(w+w); - } - - /* |x| in [0.5*ln2,22], return (exp(|x|)+1/exp(|x|)/2; */ - t = __ieee754_expf(fabsf(x)); - return half*t+half/t; - } - - /* |x| in [22, log(maxdouble)] return half*exp(|x|) */ - if (ix < 0x42b17180) return half*__ieee754_expf(fabsf(x)); - - /* |x| in [log(maxdouble), overflowthresold] */ - if (ix<=0x42b2d4fc) { - w = __ieee754_expf(half*fabsf(x)); - t = half*w; - return t*w; - } - - /* x is INF or NaN */ - if(ix>=0x7f800000) return x*x; - - /* |x| > overflowthresold, cosh(x) overflow */ - return math_narrow_eval (huge*huge); -} -strong_alias (__ieee754_coshf, __coshf_finite) diff --git a/sysdeps/ieee754/flt-32/e_exp2f.c b/sysdeps/ieee754/flt-32/e_exp2f.c deleted file mode 100644 index 567d3ff6d0..0000000000 --- a/sysdeps/ieee754/flt-32/e_exp2f.c +++ /dev/null @@ -1,132 +0,0 @@ -/* Single-precision floating point 2^x. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Geoffrey Keating - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The basic design here is from - Shmuel Gal and Boris Bachelis, "An Accurate Elementary Mathematical - Library for the IEEE Floating Point Standard", ACM Trans. Math. Soft., - 17 (1), March 1991, pp. 26-45. - It has been slightly modified to compute 2^x instead of e^x, and for - single-precision. - */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE -#endif -#include -#include -#include -#include -#include -#include -#include - -#include "t_exp2f.h" - -static const float TWOM100 = 7.88860905e-31; -static const float TWO127 = 1.7014118346e+38; - -float -__ieee754_exp2f (float x) -{ - static const float himark = (float) FLT_MAX_EXP; - static const float lomark = (float) (FLT_MIN_EXP - FLT_MANT_DIG - 1); - - /* Check for usual case. */ - if (isless (x, himark) && isgreaterequal (x, lomark)) - { - static const float THREEp14 = 49152.0; - int tval, unsafe; - float rx, x22, result; - union ieee754_float ex2_u, scale_u; - - if (fabsf (x) < FLT_EPSILON / 4.0f) - return 1.0f + x; - - { - SET_RESTORE_ROUND_NOEXF (FE_TONEAREST); - - /* 1. Argument reduction. - Choose integers ex, -128 <= t < 128, and some real - -1/512 <= x1 <= 1/512 so that - x = ex + t/512 + x1. - - First, calculate rx = ex + t/256. */ - rx = x + THREEp14; - rx -= THREEp14; - x -= rx; /* Compute x=x1. */ - /* Compute tval = (ex*256 + t)+128. - Now, t = (tval mod 256)-128 and ex=tval/256 [that's mod, NOT %; - and /-round-to-nearest not the usual c integer /]. */ - tval = (int) (rx * 256.0f + 128.0f); - - /* 2. Adjust for accurate table entry. - Find e so that - x = ex + t/256 + e + x2 - where -7e-4 < e < 7e-4, and - (float)(2^(t/256+e)) - is accurate to one part in 2^-64. */ - - /* 'tval & 255' is the same as 'tval%256' except that it's always - positive. - Compute x = x2. */ - x -= __exp2f_deltatable[tval & 255]; - - /* 3. Compute ex2 = 2^(t/255+e+ex). */ - ex2_u.f = __exp2f_atable[tval & 255]; - tval >>= 8; - /* x2 is an integer multiple of 2^-30; avoid intermediate - underflow from the calculation of x22 * x. */ - unsafe = abs(tval) >= -FLT_MIN_EXP - 32; - ex2_u.ieee.exponent += tval >> unsafe; - scale_u.f = 1.0; - scale_u.ieee.exponent += tval - (tval >> unsafe); - - /* 4. Approximate 2^x2 - 1, using a second-degree polynomial, - with maximum error in [-2^-9 - 2^-14, 2^-9 + 2^-14] - less than 1.3e-10. */ - - x22 = (.24022656679f * x + .69314736128f) * ex2_u.f; - } - - /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */ - result = x22 * x + ex2_u.f; - - if (!unsafe) - return result; - else - { - result *= scale_u.f; - math_check_force_underflow_nonneg (result); - return result; - } - } - /* Exceptional cases: */ - else if (isless (x, himark)) - { - if (isinf (x)) - /* e^-inf == 0, with no error. */ - return 0; - else - /* Underflow */ - return TWOM100 * TWOM100; - } - else - /* Return x, if x is a NaN or Inf; or overflow, otherwise. */ - return TWO127*x; -} -strong_alias (__ieee754_exp2f, __exp2f_finite) diff --git a/sysdeps/ieee754/flt-32/e_expf.c b/sysdeps/ieee754/flt-32/e_expf.c deleted file mode 100644 index 782072f213..0000000000 --- a/sysdeps/ieee754/flt-32/e_expf.c +++ /dev/null @@ -1,133 +0,0 @@ -/* Single-precision floating point e^x. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Geoffrey Keating - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* How this works: - - The input value, x, is written as - - x = n * ln(2) + t/512 + delta[t] + x; - - where: - - n is an integer, 127 >= n >= -150; - - t is an integer, 177 >= t >= -177 - - delta is based on a table entry, delta[t] < 2^-28 - - x is whatever is left, |x| < 2^-10 - - Then e^x is approximated as - - e^x = 2^n ( e^(t/512 + delta[t]) - + ( e^(t/512 + delta[t]) - * ( p(x + delta[t] + n * ln(2)) - delta ) ) ) - - where - - p(x) is a polynomial approximating e(x)-1; - - e^(t/512 + delta[t]) is obtained from a table. - - The table used is the same one as for the double precision version; - since we have the table, we might as well use it. - - It turns out to be faster to do calculations in double precision than - to perform an 'accurate table method' expf, because of the range reduction - overhead (compare exp2f). - */ -#include -#include -#include -#include -#include -#include - -extern const float __exp_deltatable[178]; -extern const double __exp_atable[355] /* __attribute__((mode(DF))) */; - -static const float TWOM100 = 7.88860905e-31; -static const float TWO127 = 1.7014118346e+38; - -float -__ieee754_expf (float x) -{ - static const float himark = 88.72283935546875; - static const float lomark = -103.972084045410; - /* Check for usual case. */ - if (isless (x, himark) && isgreater (x, lomark)) - { - static const float THREEp42 = 13194139533312.0; - static const float THREEp22 = 12582912.0; - /* 1/ln(2). */ -#undef M_1_LN2 - static const float M_1_LN2 = 1.44269502163f; - /* ln(2) */ -#undef M_LN2 - static const double M_LN2 = .6931471805599452862; - - int tval; - double x22, t, result, dx; - float n, delta; - union ieee754_double ex2_u; - - { - SET_RESTORE_ROUND_NOEXF (FE_TONEAREST); - - /* Calculate n. */ - n = x * M_1_LN2 + THREEp22; - n -= THREEp22; - dx = x - n*M_LN2; - - /* Calculate t/512. */ - t = dx + THREEp42; - t -= THREEp42; - dx -= t; - - /* Compute tval = t. */ - tval = (int) (t * 512.0); - - if (t >= 0) - delta = - __exp_deltatable[tval]; - else - delta = __exp_deltatable[-tval]; - - /* Compute ex2 = 2^n e^(t/512+delta[t]). */ - ex2_u.d = __exp_atable[tval+177]; - ex2_u.ieee.exponent += (int) n; - - /* Approximate e^(dx+delta) - 1, using a second-degree polynomial, - with maximum error in [-2^-10-2^-28,2^-10+2^-28] - less than 5e-11. */ - x22 = (0.5000000496709180453 * dx + 1.0000001192102037084) * dx + delta; - } - - /* Return result. */ - result = x22 * ex2_u.d + ex2_u.d; - return (float) result; - } - /* Exceptional cases: */ - else if (isless (x, himark)) - { - if (isinf (x)) - /* e^-inf == 0, with no error. */ - return 0; - else - /* Underflow */ - return TWOM100 * TWOM100; - } - else - /* Return x, if x is a NaN or Inf; or overflow, otherwise. */ - return TWO127*x; -} -strong_alias (__ieee754_expf, __expf_finite) diff --git a/sysdeps/ieee754/flt-32/e_fmodf.c b/sysdeps/ieee754/flt-32/e_fmodf.c deleted file mode 100644 index 8d8fad4eb5..0000000000 --- a/sysdeps/ieee754/flt-32/e_fmodf.c +++ /dev/null @@ -1,102 +0,0 @@ -/* e_fmodf.c -- float version of e_fmod.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * __ieee754_fmodf(x,y) - * Return x mod y in exact arithmetic - * Method: shift and subtract - */ - -#include -#include - -static const float one = 1.0, Zero[] = {0.0, -0.0,}; - -float -__ieee754_fmodf (float x, float y) -{ - int32_t n,hx,hy,hz,ix,iy,sx,i; - - GET_FLOAT_WORD(hx,x); - GET_FLOAT_WORD(hy,y); - sx = hx&0x80000000; /* sign of x */ - hx ^=sx; /* |x| */ - hy &= 0x7fffffff; /* |y| */ - - /* purge off exception values */ - if(hy==0||(hx>=0x7f800000)|| /* y=0,or x not finite */ - (hy>0x7f800000)) /* or y is NaN */ - return (x*y)/(x*y); - if(hx>31]; /* |x|=|y| return x*0*/ - - /* determine ix = ilogb(x) */ - if(hx<0x00800000) { /* subnormal x */ - for (ix = -126,i=(hx<<8); i>0; i<<=1) ix -=1; - } else ix = (hx>>23)-127; - - /* determine iy = ilogb(y) */ - if(hy<0x00800000) { /* subnormal y */ - for (iy = -126,i=(hy<<8); i>=0; i<<=1) iy -=1; - } else iy = (hy>>23)-127; - - /* set up {hx,lx}, {hy,ly} and align y to x */ - if(ix >= -126) - hx = 0x00800000|(0x007fffff&hx); - else { /* subnormal x, shift x to normal */ - n = -126-ix; - hx = hx<= -126) - hy = 0x00800000|(0x007fffff&hy); - else { /* subnormal y, shift y to normal */ - n = -126-iy; - hy = hy<>31]; - hx = hz+hz; - } - } - hz=hx-hy; - if(hz>=0) {hx=hz;} - - /* convert back to floating value and restore the sign */ - if(hx==0) /* return sign(x)*0 */ - return Zero[(u_int32_t)sx>>31]; - while(hx<0x00800000) { /* normalize x */ - hx = hx+hx; - iy -= 1; - } - if(iy>= -126) { /* normalize output */ - hx = ((hx-0x00800000)|((iy+127)<<23)); - SET_FLOAT_WORD(x,hx|sx); - } else { /* subnormal output */ - n = -126 - iy; - hx >>= n; - SET_FLOAT_WORD(x,hx|sx); - x *= one; /* create necessary signal */ - } - return x; /* exact output */ -} -strong_alias (__ieee754_fmodf, __fmodf_finite) diff --git a/sysdeps/ieee754/flt-32/e_gammaf_r.c b/sysdeps/ieee754/flt-32/e_gammaf_r.c deleted file mode 100644 index 1157dec2fe..0000000000 --- a/sysdeps/ieee754/flt-32/e_gammaf_r.c +++ /dev/null @@ -1,212 +0,0 @@ -/* Implementation of gamma function according to ISO C. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) inside exp in Stirling's - approximation to gamma function. */ - -static const float gamma_coeff[] = - { - 0x1.555556p-4f, - -0xb.60b61p-12f, - 0x3.403404p-12f, - }; - -#define NCOEFF (sizeof (gamma_coeff) / sizeof (gamma_coeff[0])) - -/* Return gamma (X), for positive X less than 42, in the form R * - 2^(*EXP2_ADJ), where R is the return value and *EXP2_ADJ is set to - avoid overflow or underflow in intermediate calculations. */ - -static float -gammaf_positive (float x, int *exp2_adj) -{ - int local_signgam; - if (x < 0.5f) - { - *exp2_adj = 0; - return __ieee754_expf (__ieee754_lgammaf_r (x + 1, &local_signgam)) / x; - } - else if (x <= 1.5f) - { - *exp2_adj = 0; - return __ieee754_expf (__ieee754_lgammaf_r (x, &local_signgam)); - } - else if (x < 2.5f) - { - *exp2_adj = 0; - float x_adj = x - 1; - return (__ieee754_expf (__ieee754_lgammaf_r (x_adj, &local_signgam)) - * x_adj); - } - else - { - float eps = 0; - float x_eps = 0; - float x_adj = x; - float prod = 1; - if (x < 4.0f) - { - /* Adjust into the range for applying Stirling's - approximation. */ - float n = __ceilf (4.0f - x); - x_adj = math_narrow_eval (x + n); - x_eps = (x - (x_adj - n)); - prod = __gamma_productf (x_adj - n, x_eps, n, &eps); - } - /* The result is now gamma (X_ADJ + X_EPS) / (PROD * (1 + EPS)). - Compute gamma (X_ADJ + X_EPS) using Stirling's approximation, - starting by computing pow (X_ADJ, X_ADJ) with a power of 2 - factored out. */ - float exp_adj = -eps; - float x_adj_int = __roundf (x_adj); - float x_adj_frac = x_adj - x_adj_int; - int x_adj_log2; - float x_adj_mant = __frexpf (x_adj, &x_adj_log2); - if (x_adj_mant < (float) M_SQRT1_2) - { - x_adj_log2--; - x_adj_mant *= 2.0f; - } - *exp2_adj = x_adj_log2 * (int) x_adj_int; - float ret = (__ieee754_powf (x_adj_mant, x_adj) - * __ieee754_exp2f (x_adj_log2 * x_adj_frac) - * __ieee754_expf (-x_adj) - * __ieee754_sqrtf (2 * (float) M_PI / x_adj) - / prod); - exp_adj += x_eps * __ieee754_logf (x_adj); - float bsum = gamma_coeff[NCOEFF - 1]; - float x_adj2 = x_adj * x_adj; - for (size_t i = 1; i <= NCOEFF - 1; i++) - bsum = bsum / x_adj2 + gamma_coeff[NCOEFF - 1 - i]; - exp_adj += bsum / x_adj; - return ret + ret * __expm1f (exp_adj); - } -} - -float -__ieee754_gammaf_r (float x, int *signgamp) -{ - int32_t hx; - float ret; - - GET_FLOAT_WORD (hx, x); - - if (__glibc_unlikely ((hx & 0x7fffffff) == 0)) - { - /* Return value for x == 0 is Inf with divide by zero exception. */ - *signgamp = 0; - return 1.0 / x; - } - if (__builtin_expect (hx < 0, 0) - && (u_int32_t) hx < 0xff800000 && __rintf (x) == x) - { - /* Return value for integer x < 0 is NaN with invalid exception. */ - *signgamp = 0; - return (x - x) / (x - x); - } - if (__glibc_unlikely (hx == 0xff800000)) - { - /* x == -Inf. According to ISO this is NaN. */ - *signgamp = 0; - return x - x; - } - if (__glibc_unlikely ((hx & 0x7f800000) == 0x7f800000)) - { - /* Positive infinity (return positive infinity) or NaN (return - NaN). */ - *signgamp = 0; - return x + x; - } - - if (x >= 36.0f) - { - /* Overflow. */ - *signgamp = 0; - ret = math_narrow_eval (FLT_MAX * FLT_MAX); - return ret; - } - else - { - SET_RESTORE_ROUNDF (FE_TONEAREST); - if (x > 0.0f) - { - *signgamp = 0; - int exp2_adj; - float tret = gammaf_positive (x, &exp2_adj); - ret = __scalbnf (tret, exp2_adj); - } - else if (x >= -FLT_EPSILON / 4.0f) - { - *signgamp = 0; - ret = 1.0f / x; - } - else - { - float tx = __truncf (x); - *signgamp = (tx == 2.0f * __truncf (tx / 2.0f)) ? -1 : 1; - if (x <= -42.0f) - /* Underflow. */ - ret = FLT_MIN * FLT_MIN; - else - { - float frac = tx - x; - if (frac > 0.5f) - frac = 1.0f - frac; - float sinpix = (frac <= 0.25f - ? __sinf ((float) M_PI * frac) - : __cosf ((float) M_PI * (0.5f - frac))); - int exp2_adj; - float tret = (float) M_PI / (-x * sinpix - * gammaf_positive (-x, &exp2_adj)); - ret = __scalbnf (tret, -exp2_adj); - math_check_force_underflow_nonneg (ret); - } - } - ret = math_narrow_eval (ret); - } - if (isinf (ret) && x != 0) - { - if (*signgamp < 0) - { - ret = math_narrow_eval (-__copysignf (FLT_MAX, ret) * FLT_MAX); - ret = -ret; - } - else - ret = math_narrow_eval (__copysignf (FLT_MAX, ret) * FLT_MAX); - return ret; - } - else if (ret == 0) - { - if (*signgamp < 0) - { - ret = math_narrow_eval (-__copysignf (FLT_MIN, ret) * FLT_MIN); - ret = -ret; - } - else - ret = math_narrow_eval (__copysignf (FLT_MIN, ret) * FLT_MIN); - return ret; - } - else - return ret; -} -strong_alias (__ieee754_gammaf_r, __gammaf_r_finite) diff --git a/sysdeps/ieee754/flt-32/e_hypotf.c b/sysdeps/ieee754/flt-32/e_hypotf.c deleted file mode 100644 index fda2651a84..0000000000 --- a/sysdeps/ieee754/flt-32/e_hypotf.c +++ /dev/null @@ -1,45 +0,0 @@ -/* e_hypotf.c -- float version of e_hypot.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include - -float -__ieee754_hypotf(float x, float y) -{ - double d_x, d_y; - int32_t ha, hb; - - GET_FLOAT_WORD(ha,x); - ha &= 0x7fffffff; - GET_FLOAT_WORD(hb,y); - hb &= 0x7fffffff; - if (ha == 0x7f800000 && !issignaling (y)) - return fabsf(x); - else if (hb == 0x7f800000 && !issignaling (x)) - return fabsf(y); - else if (ha > 0x7f800000 || hb > 0x7f800000) - return fabsf(x) * fabsf(y); - else if (ha == 0) - return fabsf(y); - else if (hb == 0) - return fabsf(x); - - d_x = (double) x; - d_y = (double) y; - - return (float) __ieee754_sqrt(d_x * d_x + d_y * d_y); -} -strong_alias (__ieee754_hypotf, __hypotf_finite) diff --git a/sysdeps/ieee754/flt-32/e_ilogbf.c b/sysdeps/ieee754/flt-32/e_ilogbf.c deleted file mode 100644 index 1ae344ea39..0000000000 --- a/sysdeps/ieee754/flt-32/e_ilogbf.c +++ /dev/null @@ -1,44 +0,0 @@ -/* s_ilogbf.c -- float version of s_ilogb.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_ilogbf.c,v 1.4 1995/05/10 20:47:31 jtc Exp $"; -#endif - -#include -#include -#include - -int __ieee754_ilogbf(float x) -{ - int32_t hx,ix; - - GET_FLOAT_WORD(hx,x); - hx &= 0x7fffffff; - if(hx<0x00800000) { - if(hx==0) - return FP_ILOGB0; /* ilogb(0) = FP_ILOGB0 */ - else /* subnormal x */ - for (ix = -126,hx<<=8; hx>0; hx<<=1) ix -=1; - return ix; - } - else if (hx<0x7f800000) return (hx>>23)-127; - else if (FP_ILOGBNAN != INT_MAX) { - /* ISO C99 requires ilogbf(+-Inf) == INT_MAX. */ - if (hx==0x7f800000) - return INT_MAX; - } - return FP_ILOGBNAN; -} diff --git a/sysdeps/ieee754/flt-32/e_j0f.c b/sysdeps/ieee754/flt-32/e_j0f.c deleted file mode 100644 index b783dd069d..0000000000 --- a/sysdeps/ieee754/flt-32/e_j0f.c +++ /dev/null @@ -1,337 +0,0 @@ -/* e_j0f.c -- float version of e_j0.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include - -static float pzerof(float), qzerof(float); - -static const float -huge = 1e30, -one = 1.0, -invsqrtpi= 5.6418961287e-01, /* 0x3f106ebb */ -tpi = 6.3661974669e-01, /* 0x3f22f983 */ - /* R0/S0 on [0, 2.00] */ -R02 = 1.5625000000e-02, /* 0x3c800000 */ -R03 = -1.8997929874e-04, /* 0xb947352e */ -R04 = 1.8295404516e-06, /* 0x35f58e88 */ -R05 = -4.6183270541e-09, /* 0xb19eaf3c */ -S01 = 1.5619102865e-02, /* 0x3c7fe744 */ -S02 = 1.1692678527e-04, /* 0x38f53697 */ -S03 = 5.1354652442e-07, /* 0x3509daa6 */ -S04 = 1.1661400734e-09; /* 0x30a045e8 */ - -static const float zero = 0.0; - -float -__ieee754_j0f(float x) -{ - float z, s,c,ss,cc,r,u,v; - int32_t hx,ix; - - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix>=0x7f800000) return one/(x*x); - x = fabsf(x); - if(ix >= 0x40000000) { /* |x| >= 2.0 */ - __sincosf (x, &s, &c); - ss = s-c; - cc = s+c; - if(ix<0x7f000000) { /* make sure x+x not overflow */ - z = -__cosf(x+x); - if ((s*c)0x48000000) z = (invsqrtpi*cc)/__ieee754_sqrtf(x); - else { - u = pzerof(x); v = qzerof(x); - z = invsqrtpi*(u*cc-v*ss)/__ieee754_sqrtf(x); - } - return z; - } - if(ix<0x39000000) { /* |x| < 2**-13 */ - math_force_eval(huge+x); /* raise inexact if x != 0 */ - if(ix<0x32000000) return one; /* |x|<2**-27 */ - else return one - (float)0.25*x*x; - } - z = x*x; - r = z*(R02+z*(R03+z*(R04+z*R05))); - s = one+z*(S01+z*(S02+z*(S03+z*S04))); - if(ix < 0x3F800000) { /* |x| < 1.00 */ - return one + z*((float)-0.25+(r/s)); - } else { - u = (float)0.5*x; - return((one+u)*(one-u)+z*(r/s)); - } -} -strong_alias (__ieee754_j0f, __j0f_finite) - -static const float -u00 = -7.3804296553e-02, /* 0xbd9726b5 */ -u01 = 1.7666645348e-01, /* 0x3e34e80d */ -u02 = -1.3818567619e-02, /* 0xbc626746 */ -u03 = 3.4745343146e-04, /* 0x39b62a69 */ -u04 = -3.8140706238e-06, /* 0xb67ff53c */ -u05 = 1.9559013964e-08, /* 0x32a802ba */ -u06 = -3.9820518410e-11, /* 0xae2f21eb */ -v01 = 1.2730483897e-02, /* 0x3c509385 */ -v02 = 7.6006865129e-05, /* 0x389f65e0 */ -v03 = 2.5915085189e-07, /* 0x348b216c */ -v04 = 4.4111031494e-10; /* 0x2ff280c2 */ - -float -__ieee754_y0f(float x) -{ - float z, s,c,ss,cc,u,v; - int32_t hx,ix; - - GET_FLOAT_WORD(hx,x); - ix = 0x7fffffff&hx; - /* Y0(NaN) is NaN, y0(-inf) is Nan, y0(inf) is 0, y0(0) is -inf. */ - if(ix>=0x7f800000) return one/(x+x*x); - if(ix==0) return -1/zero; /* -inf and divide by zero exception. */ - if(hx<0) return zero/(zero*x); - if(ix >= 0x40000000) { /* |x| >= 2.0 */ - /* y0(x) = sqrt(2/(pi*x))*(p0(x)*sin(x0)+q0(x)*cos(x0)) - * where x0 = x-pi/4 - * Better formula: - * cos(x0) = cos(x)cos(pi/4)+sin(x)sin(pi/4) - * = 1/sqrt(2) * (sin(x) + cos(x)) - * sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4) - * = 1/sqrt(2) * (sin(x) - cos(x)) - * To avoid cancellation, use - * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) - * to compute the worse one. - */ - __sincosf (x, &s, &c); - ss = s-c; - cc = s+c; - /* - * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x) - * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x) - */ - if(ix<0x7f000000) { /* make sure x+x not overflow */ - z = -__cosf(x+x); - if ((s*c)0x48000000) z = (invsqrtpi*ss)/__ieee754_sqrtf(x); - else { - u = pzerof(x); v = qzerof(x); - z = invsqrtpi*(u*ss+v*cc)/__ieee754_sqrtf(x); - } - return z; - } - if(ix<=0x39800000) { /* x < 2**-13 */ - return(u00 + tpi*__ieee754_logf(x)); - } - z = x*x; - u = u00+z*(u01+z*(u02+z*(u03+z*(u04+z*(u05+z*u06))))); - v = one+z*(v01+z*(v02+z*(v03+z*v04))); - return(u/v + tpi*(__ieee754_j0f(x)*__ieee754_logf(x))); -} -strong_alias (__ieee754_y0f, __y0f_finite) - -/* The asymptotic expansions of pzero is - * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x. - * For x >= 2, We approximate pzero by - * pzero(x) = 1 + (R/S) - * where R = pR0 + pR1*s^2 + pR2*s^4 + ... + pR5*s^10 - * S = 1 + pS0*s^2 + ... + pS4*s^10 - * and - * | pzero(x)-1-R/S | <= 2 ** ( -60.26) - */ -static const float pR8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ - 0.0000000000e+00, /* 0x00000000 */ - -7.0312500000e-02, /* 0xbd900000 */ - -8.0816707611e+00, /* 0xc1014e86 */ - -2.5706311035e+02, /* 0xc3808814 */ - -2.4852163086e+03, /* 0xc51b5376 */ - -5.2530439453e+03, /* 0xc5a4285a */ -}; -static const float pS8[5] = { - 1.1653436279e+02, /* 0x42e91198 */ - 3.8337448730e+03, /* 0x456f9beb */ - 4.0597855469e+04, /* 0x471e95db */ - 1.1675296875e+05, /* 0x47e4087c */ - 4.7627726562e+04, /* 0x473a0bba */ -}; -static const float pR5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ - -1.1412546255e-11, /* 0xad48c58a */ - -7.0312492549e-02, /* 0xbd8fffff */ - -4.1596107483e+00, /* 0xc0851b88 */ - -6.7674766541e+01, /* 0xc287597b */ - -3.3123129272e+02, /* 0xc3a59d9b */ - -3.4643338013e+02, /* 0xc3ad3779 */ -}; -static const float pS5[5] = { - 6.0753936768e+01, /* 0x42730408 */ - 1.0512523193e+03, /* 0x44836813 */ - 5.9789707031e+03, /* 0x45bad7c4 */ - 9.6254453125e+03, /* 0x461665c8 */ - 2.4060581055e+03, /* 0x451660ee */ -}; - -static const float pR3[6] = {/* for x in [4.547,2.8571]=1/[0.2199,0.35001] */ - -2.5470459075e-09, /* 0xb12f081b */ - -7.0311963558e-02, /* 0xbd8fffb8 */ - -2.4090321064e+00, /* 0xc01a2d95 */ - -2.1965976715e+01, /* 0xc1afba52 */ - -5.8079170227e+01, /* 0xc2685112 */ - -3.1447946548e+01, /* 0xc1fb9565 */ -}; -static const float pS3[5] = { - 3.5856033325e+01, /* 0x420f6c94 */ - 3.6151397705e+02, /* 0x43b4c1ca */ - 1.1936077881e+03, /* 0x44953373 */ - 1.1279968262e+03, /* 0x448cffe6 */ - 1.7358093262e+02, /* 0x432d94b8 */ -}; - -static const float pR2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */ - -8.8753431271e-08, /* 0xb3be98b7 */ - -7.0303097367e-02, /* 0xbd8ffb12 */ - -1.4507384300e+00, /* 0xbfb9b1cc */ - -7.6356959343e+00, /* 0xc0f4579f */ - -1.1193166733e+01, /* 0xc1331736 */ - -3.2336456776e+00, /* 0xc04ef40d */ -}; -static const float pS2[5] = { - 2.2220300674e+01, /* 0x41b1c32d */ - 1.3620678711e+02, /* 0x430834f0 */ - 2.7047027588e+02, /* 0x43873c32 */ - 1.5387539673e+02, /* 0x4319e01a */ - 1.4657617569e+01, /* 0x416a859a */ -}; - -static float -pzerof(float x) -{ - const float *p,*q; - float z,r,s; - int32_t ix; - GET_FLOAT_WORD(ix,x); - ix &= 0x7fffffff; - /* ix >= 0x40000000 for all calls to this function. */ - if(ix>=0x41000000) {p = pR8; q= pS8;} - else if(ix>=0x40f71c58){p = pR5; q= pS5;} - else if(ix>=0x4036db68){p = pR3; q= pS3;} - else {p = pR2; q= pS2;} - z = one/(x*x); - r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5])))); - s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*q[4])))); - return one+ r/s; -} - - -/* For x >= 8, the asymptotic expansions of qzero is - * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. - * We approximate pzero by - * qzero(x) = s*(-1.25 + (R/S)) - * where R = qR0 + qR1*s^2 + qR2*s^4 + ... + qR5*s^10 - * S = 1 + qS0*s^2 + ... + qS5*s^12 - * and - * | qzero(x)/s +1.25-R/S | <= 2 ** ( -61.22) - */ -static const float qR8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ - 0.0000000000e+00, /* 0x00000000 */ - 7.3242187500e-02, /* 0x3d960000 */ - 1.1768206596e+01, /* 0x413c4a93 */ - 5.5767340088e+02, /* 0x440b6b19 */ - 8.8591972656e+03, /* 0x460a6cca */ - 3.7014625000e+04, /* 0x471096a0 */ -}; -static const float qS8[6] = { - 1.6377603149e+02, /* 0x4323c6aa */ - 8.0983447266e+03, /* 0x45fd12c2 */ - 1.4253829688e+05, /* 0x480b3293 */ - 8.0330925000e+05, /* 0x49441ed4 */ - 8.4050156250e+05, /* 0x494d3359 */ - -3.4389928125e+05, /* 0xc8a7eb69 */ -}; - -static const float qR5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ - 1.8408595828e-11, /* 0x2da1ec79 */ - 7.3242180049e-02, /* 0x3d95ffff */ - 5.8356351852e+00, /* 0x40babd86 */ - 1.3511157227e+02, /* 0x43071c90 */ - 1.0272437744e+03, /* 0x448067cd */ - 1.9899779053e+03, /* 0x44f8bf4b */ -}; -static const float qS5[6] = { - 8.2776611328e+01, /* 0x42a58da0 */ - 2.0778142090e+03, /* 0x4501dd07 */ - 1.8847289062e+04, /* 0x46933e94 */ - 5.6751113281e+04, /* 0x475daf1d */ - 3.5976753906e+04, /* 0x470c88c1 */ - -5.3543427734e+03, /* 0xc5a752be */ -}; - -static const float qR3[6] = {/* for x in [4.547,2.8571]=1/[0.2199,0.35001] */ - 4.3774099900e-09, /* 0x3196681b */ - 7.3241114616e-02, /* 0x3d95ff70 */ - 3.3442313671e+00, /* 0x405607e3 */ - 4.2621845245e+01, /* 0x422a7cc5 */ - 1.7080809021e+02, /* 0x432acedf */ - 1.6673394775e+02, /* 0x4326bbe4 */ -}; -static const float qS3[6] = { - 4.8758872986e+01, /* 0x42430916 */ - 7.0968920898e+02, /* 0x44316c1c */ - 3.7041481934e+03, /* 0x4567825f */ - 6.4604252930e+03, /* 0x45c9e367 */ - 2.5163337402e+03, /* 0x451d4557 */ - -1.4924745178e+02, /* 0xc3153f59 */ -}; - -static const float qR2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */ - 1.5044444979e-07, /* 0x342189db */ - 7.3223426938e-02, /* 0x3d95f62a */ - 1.9981917143e+00, /* 0x3fffc4bf */ - 1.4495602608e+01, /* 0x4167edfd */ - 3.1666231155e+01, /* 0x41fd5471 */ - 1.6252708435e+01, /* 0x4182058c */ -}; -static const float qS2[6] = { - 3.0365585327e+01, /* 0x41f2ecb8 */ - 2.6934811401e+02, /* 0x4386ac8f */ - 8.4478375244e+02, /* 0x44533229 */ - 8.8293585205e+02, /* 0x445cbbe5 */ - 2.1266638184e+02, /* 0x4354aa98 */ - -5.3109550476e+00, /* 0xc0a9f358 */ -}; - -static float -qzerof(float x) -{ - const float *p,*q; - float s,r,z; - int32_t ix; - GET_FLOAT_WORD(ix,x); - ix &= 0x7fffffff; - /* ix >= 0x40000000 for all calls to this function. */ - if(ix>=0x41000000) {p = qR8; q= qS8;} - else if(ix>=0x40f71c58){p = qR5; q= qS5;} - else if(ix>=0x4036db68){p = qR3; q= qS3;} - else {p = qR2; q= qS2;} - z = one/(x*x); - r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5])))); - s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*(q[4]+z*q[5]))))); - return (-(float).125 + r/s)/x; -} diff --git a/sysdeps/ieee754/flt-32/e_j1f.c b/sysdeps/ieee754/flt-32/e_j1f.c deleted file mode 100644 index 805a87d85b..0000000000 --- a/sysdeps/ieee754/flt-32/e_j1f.c +++ /dev/null @@ -1,347 +0,0 @@ -/* e_j1f.c -- float version of e_j1.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include -#include -#include - -static float ponef(float), qonef(float); - -static const float -huge = 1e30, -one = 1.0, -invsqrtpi= 5.6418961287e-01, /* 0x3f106ebb */ -tpi = 6.3661974669e-01, /* 0x3f22f983 */ - /* R0/S0 on [0,2] */ -r00 = -6.2500000000e-02, /* 0xbd800000 */ -r01 = 1.4070566976e-03, /* 0x3ab86cfd */ -r02 = -1.5995563444e-05, /* 0xb7862e36 */ -r03 = 4.9672799207e-08, /* 0x335557d2 */ -s01 = 1.9153760746e-02, /* 0x3c9ce859 */ -s02 = 1.8594678841e-04, /* 0x3942fab6 */ -s03 = 1.1771846857e-06, /* 0x359dffc2 */ -s04 = 5.0463624390e-09, /* 0x31ad6446 */ -s05 = 1.2354227016e-11; /* 0x2d59567e */ - -static const float zero = 0.0; - -float -__ieee754_j1f(float x) -{ - float z, s,c,ss,cc,r,u,v,y; - int32_t hx,ix; - - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - if(__builtin_expect(ix>=0x7f800000, 0)) return one/x; - y = fabsf(x); - if(ix >= 0x40000000) { /* |x| >= 2.0 */ - __sincosf (y, &s, &c); - ss = -s-c; - cc = s-c; - if(ix<0x7f000000) { /* make sure y+y not overflow */ - z = __cosf(y+y); - if ((s*c)>zero) cc = z/ss; - else ss = z/cc; - } - /* - * j1(x) = 1/sqrt(pi) * (P(1,x)*cc - Q(1,x)*ss) / sqrt(x) - * y1(x) = 1/sqrt(pi) * (P(1,x)*ss + Q(1,x)*cc) / sqrt(x) - */ - if(ix>0x48000000) z = (invsqrtpi*cc)/__ieee754_sqrtf(y); - else { - u = ponef(y); v = qonef(y); - z = invsqrtpi*(u*cc-v*ss)/__ieee754_sqrtf(y); - } - if(hx<0) return -z; - else return z; - } - if(__builtin_expect(ix<0x32000000, 0)) { /* |x|<2**-27 */ - if(huge+x>one) { /* inexact if x!=0 necessary */ - float ret = math_narrow_eval ((float) 0.5 * x); - math_check_force_underflow (ret); - if (ret == 0 && x != 0) - __set_errno (ERANGE); - return ret; - } - } - z = x*x; - r = z*(r00+z*(r01+z*(r02+z*r03))); - s = one+z*(s01+z*(s02+z*(s03+z*(s04+z*s05)))); - r *= x; - return(x*(float)0.5+r/s); -} -strong_alias (__ieee754_j1f, __j1f_finite) - -static const float U0[5] = { - -1.9605709612e-01, /* 0xbe48c331 */ - 5.0443872809e-02, /* 0x3d4e9e3c */ - -1.9125689287e-03, /* 0xbafaaf2a */ - 2.3525259166e-05, /* 0x37c5581c */ - -9.1909917899e-08, /* 0xb3c56003 */ -}; -static const float V0[5] = { - 1.9916731864e-02, /* 0x3ca3286a */ - 2.0255257550e-04, /* 0x3954644b */ - 1.3560879779e-06, /* 0x35b602d4 */ - 6.2274145840e-09, /* 0x31d5f8eb */ - 1.6655924903e-11, /* 0x2d9281cf */ -}; - -float -__ieee754_y1f(float x) -{ - float z, s,c,ss,cc,u,v; - int32_t hx,ix; - - GET_FLOAT_WORD(hx,x); - ix = 0x7fffffff&hx; - /* if Y1(NaN) is NaN, Y1(-inf) is NaN, Y1(inf) is 0 */ - if(__builtin_expect(ix>=0x7f800000, 0)) return one/(x+x*x); - if(__builtin_expect(ix==0, 0)) - return -1/zero; /* -inf and divide by zero exception. */ - if(__builtin_expect(hx<0, 0)) return zero/(zero*x); - if(ix >= 0x40000000) { /* |x| >= 2.0 */ - SET_RESTORE_ROUNDF (FE_TONEAREST); - __sincosf (x, &s, &c); - ss = -s-c; - cc = s-c; - if(ix<0x7f000000) { /* make sure x+x not overflow */ - z = __cosf(x+x); - if ((s*c)>zero) cc = z/ss; - else ss = z/cc; - } - /* y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x0)+q1(x)*cos(x0)) - * where x0 = x-3pi/4 - * Better formula: - * cos(x0) = cos(x)cos(3pi/4)+sin(x)sin(3pi/4) - * = 1/sqrt(2) * (sin(x) - cos(x)) - * sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4) - * = -1/sqrt(2) * (cos(x) + sin(x)) - * To avoid cancellation, use - * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) - * to compute the worse one. - */ - if(ix>0x48000000) z = (invsqrtpi*ss)/__ieee754_sqrtf(x); - else { - u = ponef(x); v = qonef(x); - z = invsqrtpi*(u*ss+v*cc)/__ieee754_sqrtf(x); - } - return z; - } - if(__builtin_expect(ix<=0x33000000, 0)) { /* x < 2**-25 */ - z = -tpi / x; - if (isinf (z)) - __set_errno (ERANGE); - return z; - } - z = x*x; - u = U0[0]+z*(U0[1]+z*(U0[2]+z*(U0[3]+z*U0[4]))); - v = one+z*(V0[0]+z*(V0[1]+z*(V0[2]+z*(V0[3]+z*V0[4])))); - return(x*(u/v) + tpi*(__ieee754_j1f(x)*__ieee754_logf(x)-one/x)); -} -strong_alias (__ieee754_y1f, __y1f_finite) - -/* For x >= 8, the asymptotic expansions of pone is - * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. - * We approximate pone by - * pone(x) = 1 + (R/S) - * where R = pr0 + pr1*s^2 + pr2*s^4 + ... + pr5*s^10 - * S = 1 + ps0*s^2 + ... + ps4*s^10 - * and - * | pone(x)-1-R/S | <= 2 ** ( -60.06) - */ - -static const float pr8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ - 0.0000000000e+00, /* 0x00000000 */ - 1.1718750000e-01, /* 0x3df00000 */ - 1.3239480972e+01, /* 0x4153d4ea */ - 4.1205184937e+02, /* 0x43ce06a3 */ - 3.8747453613e+03, /* 0x45722bed */ - 7.9144794922e+03, /* 0x45f753d6 */ -}; -static const float ps8[5] = { - 1.1420736694e+02, /* 0x42e46a2c */ - 3.6509309082e+03, /* 0x45642ee5 */ - 3.6956207031e+04, /* 0x47105c35 */ - 9.7602796875e+04, /* 0x47bea166 */ - 3.0804271484e+04, /* 0x46f0a88b */ -}; - -static const float pr5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ - 1.3199052094e-11, /* 0x2d68333f */ - 1.1718749255e-01, /* 0x3defffff */ - 6.8027510643e+00, /* 0x40d9b023 */ - 1.0830818176e+02, /* 0x42d89dca */ - 5.1763616943e+02, /* 0x440168b7 */ - 5.2871520996e+02, /* 0x44042dc6 */ -}; -static const float ps5[5] = { - 5.9280597687e+01, /* 0x426d1f55 */ - 9.9140142822e+02, /* 0x4477d9b1 */ - 5.3532670898e+03, /* 0x45a74a23 */ - 7.8446904297e+03, /* 0x45f52586 */ - 1.5040468750e+03, /* 0x44bc0180 */ -}; - -static const float pr3[6] = { - 3.0250391081e-09, /* 0x314fe10d */ - 1.1718686670e-01, /* 0x3defffab */ - 3.9329774380e+00, /* 0x407bb5e7 */ - 3.5119403839e+01, /* 0x420c7a45 */ - 9.1055007935e+01, /* 0x42b61c2a */ - 4.8559066772e+01, /* 0x42423c7c */ -}; -static const float ps3[5] = { - 3.4791309357e+01, /* 0x420b2a4d */ - 3.3676245117e+02, /* 0x43a86198 */ - 1.0468714600e+03, /* 0x4482dbe3 */ - 8.9081134033e+02, /* 0x445eb3ed */ - 1.0378793335e+02, /* 0x42cf936c */ -}; - -static const float pr2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */ - 1.0771083225e-07, /* 0x33e74ea8 */ - 1.1717621982e-01, /* 0x3deffa16 */ - 2.3685150146e+00, /* 0x401795c0 */ - 1.2242610931e+01, /* 0x4143e1bc */ - 1.7693971634e+01, /* 0x418d8d41 */ - 5.0735230446e+00, /* 0x40a25a4d */ -}; -static const float ps2[5] = { - 2.1436485291e+01, /* 0x41ab7dec */ - 1.2529022980e+02, /* 0x42fa9499 */ - 2.3227647400e+02, /* 0x436846c7 */ - 1.1767937469e+02, /* 0x42eb5bd7 */ - 8.3646392822e+00, /* 0x4105d590 */ -}; - -static float -ponef(float x) -{ - const float *p,*q; - float z,r,s; - int32_t ix; - GET_FLOAT_WORD(ix,x); - ix &= 0x7fffffff; - /* ix >= 0x40000000 for all calls to this function. */ - if(ix>=0x41000000) {p = pr8; q= ps8;} - else if(ix>=0x40f71c58){p = pr5; q= ps5;} - else if(ix>=0x4036db68){p = pr3; q= ps3;} - else {p = pr2; q= ps2;} - z = one/(x*x); - r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5])))); - s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*q[4])))); - return one+ r/s; -} - - -/* For x >= 8, the asymptotic expansions of qone is - * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. - * We approximate pone by - * qone(x) = s*(0.375 + (R/S)) - * where R = qr1*s^2 + qr2*s^4 + ... + qr5*s^10 - * S = 1 + qs1*s^2 + ... + qs6*s^12 - * and - * | qone(x)/s -0.375-R/S | <= 2 ** ( -61.13) - */ - -static const float qr8[6] = { /* for x in [inf, 8]=1/[0,0.125] */ - 0.0000000000e+00, /* 0x00000000 */ - -1.0253906250e-01, /* 0xbdd20000 */ - -1.6271753311e+01, /* 0xc1822c8d */ - -7.5960174561e+02, /* 0xc43de683 */ - -1.1849806641e+04, /* 0xc639273a */ - -4.8438511719e+04, /* 0xc73d3683 */ -}; -static const float qs8[6] = { - 1.6139537048e+02, /* 0x43216537 */ - 7.8253862305e+03, /* 0x45f48b17 */ - 1.3387534375e+05, /* 0x4802bcd6 */ - 7.1965775000e+05, /* 0x492fb29c */ - 6.6660125000e+05, /* 0x4922be94 */ - -2.9449025000e+05, /* 0xc88fcb48 */ -}; - -static const float qr5[6] = { /* for x in [8,4.5454]=1/[0.125,0.22001] */ - -2.0897993405e-11, /* 0xadb7d219 */ - -1.0253904760e-01, /* 0xbdd1fffe */ - -8.0564479828e+00, /* 0xc100e736 */ - -1.8366960144e+02, /* 0xc337ab6b */ - -1.3731937256e+03, /* 0xc4aba633 */ - -2.6124443359e+03, /* 0xc523471c */ -}; -static const float qs5[6] = { - 8.1276550293e+01, /* 0x42a28d98 */ - 1.9917987061e+03, /* 0x44f8f98f */ - 1.7468484375e+04, /* 0x468878f8 */ - 4.9851425781e+04, /* 0x4742bb6d */ - 2.7948074219e+04, /* 0x46da5826 */ - -4.7191835938e+03, /* 0xc5937978 */ -}; - -static const float qr3[6] = { - -5.0783124372e-09, /* 0xb1ae7d4f */ - -1.0253783315e-01, /* 0xbdd1ff5b */ - -4.6101160049e+00, /* 0xc0938612 */ - -5.7847221375e+01, /* 0xc267638e */ - -2.2824453735e+02, /* 0xc3643e9a */ - -2.1921012878e+02, /* 0xc35b35cb */ -}; -static const float qs3[6] = { - 4.7665153503e+01, /* 0x423ea91e */ - 6.7386511230e+02, /* 0x4428775e */ - 3.3801528320e+03, /* 0x45534272 */ - 5.5477290039e+03, /* 0x45ad5dd5 */ - 1.9031191406e+03, /* 0x44ede3d0 */ - -1.3520118713e+02, /* 0xc3073381 */ -}; - -static const float qr2[6] = {/* for x in [2.8570,2]=1/[0.3499,0.5] */ - -1.7838172539e-07, /* 0xb43f8932 */ - -1.0251704603e-01, /* 0xbdd1f475 */ - -2.7522056103e+00, /* 0xc0302423 */ - -1.9663616180e+01, /* 0xc19d4f16 */ - -4.2325313568e+01, /* 0xc2294d1f */ - -2.1371921539e+01, /* 0xc1aaf9b2 */ -}; -static const float qs2[6] = { - 2.9533363342e+01, /* 0x41ec4454 */ - 2.5298155212e+02, /* 0x437cfb47 */ - 7.5750280762e+02, /* 0x443d602e */ - 7.3939318848e+02, /* 0x4438d92a */ - 1.5594900513e+02, /* 0x431bf2f2 */ - -4.9594988823e+00, /* 0xc09eb437 */ -}; - -static float -qonef(float x) -{ - const float *p,*q; - float s,r,z; - int32_t ix; - GET_FLOAT_WORD(ix,x); - ix &= 0x7fffffff; - /* ix >= 0x40000000 for all calls to this function. */ - if(ix>=0x40200000) {p = qr8; q= qs8;} - else if(ix>=0x40f71c58){p = qr5; q= qs5;} - else if(ix>=0x4036db68){p = qr3; q= qs3;} - else {p = qr2; q= qs2;} - z = one/(x*x); - r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5])))); - s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*(q[4]+z*q[5]))))); - return ((float).375 + r/s)/x; -} diff --git a/sysdeps/ieee754/flt-32/e_jnf.c b/sysdeps/ieee754/flt-32/e_jnf.c deleted file mode 100644 index 4e634778d3..0000000000 --- a/sysdeps/ieee754/flt-32/e_jnf.c +++ /dev/null @@ -1,233 +0,0 @@ -/* e_jnf.c -- float version of e_jn.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include -#include -#include - -static const float -two = 2.0000000000e+00, /* 0x40000000 */ -one = 1.0000000000e+00; /* 0x3F800000 */ - -static const float zero = 0.0000000000e+00; - -float -__ieee754_jnf(int n, float x) -{ - float ret; - { - int32_t i,hx,ix, sgn; - float a, b, temp, di; - float z, w; - - /* J(-n,x) = (-1)^n * J(n, x), J(n, -x) = (-1)^n * J(n, x) - * Thus, J(-n,x) = J(n,-x) - */ - GET_FLOAT_WORD(hx,x); - ix = 0x7fffffff&hx; - /* if J(n,NaN) is NaN */ - if(__builtin_expect(ix>0x7f800000, 0)) return x+x; - if(n<0){ - n = -n; - x = -x; - hx ^= 0x80000000; - } - if(n==0) return(__ieee754_j0f(x)); - if(n==1) return(__ieee754_j1f(x)); - sgn = (n&1)&(hx>>31); /* even n -- 0, odd n -- sign(x) */ - x = fabsf(x); - SET_RESTORE_ROUNDF (FE_TONEAREST); - if(__builtin_expect(ix==0||ix>=0x7f800000, 0)) /* if x is 0 or inf */ - return sgn == 1 ? -zero : zero; - else if((float)n<=x) { - /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ - a = __ieee754_j0f(x); - b = __ieee754_j1f(x); - for(i=1;i33) /* underflow */ - b = zero; - else { - temp = x*(float)0.5; b = temp; - for (a=one,i=2;i<=n;i++) { - a *= (float)i; /* a = n! */ - b *= temp; /* b = (x/2)^n */ - } - b = b/a; - } - } else { - /* use backward recurrence */ - /* x x^2 x^2 - * J(n,x)/J(n-1,x) = ---- ------ ------ ..... - * 2n - 2(n+1) - 2(n+2) - * - * 1 1 1 - * (for large x) = ---- ------ ------ ..... - * 2n 2(n+1) 2(n+2) - * -- - ------ - ------ - - * x x x - * - * Let w = 2n/x and h=2/x, then the above quotient - * is equal to the continued fraction: - * 1 - * = ----------------------- - * 1 - * w - ----------------- - * 1 - * w+h - --------- - * w+2h - ... - * - * To determine how many terms needed, let - * Q(0) = w, Q(1) = w(w+h) - 1, - * Q(k) = (w+k*h)*Q(k-1) - Q(k-2), - * When Q(k) > 1e4 good for single - * When Q(k) > 1e9 good for double - * When Q(k) > 1e17 good for quadruple - */ - /* determine k */ - float t,v; - float q0,q1,h,tmp; int32_t k,m; - w = (n+n)/(float)x; h = (float)2.0/(float)x; - q0 = w; z = w+h; q1 = w*z - (float)1.0; k=1; - while(q1<(float)1.0e9) { - k += 1; z += h; - tmp = z*q1 - q0; - q0 = q1; - q1 = tmp; - } - m = n+n; - for(t=zero, i = 2*(n+k); i>=m; i -= 2) t = one/(i/x-t); - a = t; - b = one; - /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) - * Hence, if n*(log(2n/x)) > ... - * single 8.8722839355e+01 - * double 7.09782712893383973096e+02 - * long double 1.1356523406294143949491931077970765006170e+04 - * then recurrent value may overflow and the result is - * likely underflow to zero - */ - tmp = n; - v = two/x; - tmp = tmp*__ieee754_logf(fabsf(v*tmp)); - if(tmp<(float)8.8721679688e+01) { - for(i=n-1,di=(float)(i+i);i>0;i--){ - temp = b; - b *= di; - b = b/x - a; - a = temp; - di -= two; - } - } else { - for(i=n-1,di=(float)(i+i);i>0;i--){ - temp = b; - b *= di; - b = b/x - a; - a = temp; - di -= two; - /* scale b to avoid spurious overflow */ - if(b>(float)1e10) { - a /= b; - t /= b; - b = one; - } - } - } - /* j0() and j1() suffer enormous loss of precision at and - * near zero; however, we know that their zero points never - * coincide, so just choose the one further away from zero. - */ - z = __ieee754_j0f (x); - w = __ieee754_j1f (x); - if (fabsf (z) >= fabsf (w)) - b = (t * z / b); - else - b = (t * w / a); - } - } - if(sgn==1) ret = -b; else ret = b; - ret = math_narrow_eval (ret); - } - if (ret == 0) - { - ret = math_narrow_eval (__copysignf (FLT_MIN, ret) * FLT_MIN); - __set_errno (ERANGE); - } - else - math_check_force_underflow (ret); - return ret; -} -strong_alias (__ieee754_jnf, __jnf_finite) - -float -__ieee754_ynf(int n, float x) -{ - float ret; - { - int32_t i,hx,ix; - u_int32_t ib; - int32_t sign; - float a, b, temp; - - GET_FLOAT_WORD(hx,x); - ix = 0x7fffffff&hx; - /* if Y(n,NaN) is NaN */ - if(__builtin_expect(ix>0x7f800000, 0)) return x+x; - if(__builtin_expect(ix==0, 0)) - return -HUGE_VALF+x; /* -inf and overflow exception. */ - if(__builtin_expect(hx<0, 0)) return zero/(zero*x); - sign = 1; - if(n<0){ - n = -n; - sign = 1 - ((n&1)<<1); - } - if(n==0) return(__ieee754_y0f(x)); - SET_RESTORE_ROUNDF (FE_TONEAREST); - if(n==1) { - ret = sign*__ieee754_y1f(x); - goto out; - } - if(__builtin_expect(ix==0x7f800000, 0)) return zero; - - a = __ieee754_y0f(x); - b = __ieee754_y1f(x); - /* quit if b is -inf */ - GET_FLOAT_WORD(ib,b); - for(i=1;i0) ret = b; else ret = -b; - } - out: - if (isinf (ret)) - ret = __copysignf (FLT_MAX, ret) * FLT_MAX; - return ret; -} -strong_alias (__ieee754_ynf, __ynf_finite) diff --git a/sysdeps/ieee754/flt-32/e_lgammaf_r.c b/sysdeps/ieee754/flt-32/e_lgammaf_r.c deleted file mode 100644 index 1b30dcd84d..0000000000 --- a/sysdeps/ieee754/flt-32/e_lgammaf_r.c +++ /dev/null @@ -1,246 +0,0 @@ -/* e_lgammaf_r.c -- float version of e_lgamma_r.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include -#include - -static const float -two23= 8.3886080000e+06, /* 0x4b000000 */ -half= 5.0000000000e-01, /* 0x3f000000 */ -one = 1.0000000000e+00, /* 0x3f800000 */ -pi = 3.1415927410e+00, /* 0x40490fdb */ -a0 = 7.7215664089e-02, /* 0x3d9e233f */ -a1 = 3.2246702909e-01, /* 0x3ea51a66 */ -a2 = 6.7352302372e-02, /* 0x3d89f001 */ -a3 = 2.0580807701e-02, /* 0x3ca89915 */ -a4 = 7.3855509982e-03, /* 0x3bf2027e */ -a5 = 2.8905137442e-03, /* 0x3b3d6ec6 */ -a6 = 1.1927076848e-03, /* 0x3a9c54a1 */ -a7 = 5.1006977446e-04, /* 0x3a05b634 */ -a8 = 2.2086278477e-04, /* 0x39679767 */ -a9 = 1.0801156895e-04, /* 0x38e28445 */ -a10 = 2.5214456400e-05, /* 0x37d383a2 */ -a11 = 4.4864096708e-05, /* 0x383c2c75 */ -tc = 1.4616321325e+00, /* 0x3fbb16c3 */ -tf = -1.2148628384e-01, /* 0xbdf8cdcd */ -/* tt = -(tail of tf) */ -tt = 6.6971006518e-09, /* 0x31e61c52 */ -t0 = 4.8383611441e-01, /* 0x3ef7b95e */ -t1 = -1.4758771658e-01, /* 0xbe17213c */ -t2 = 6.4624942839e-02, /* 0x3d845a15 */ -t3 = -3.2788541168e-02, /* 0xbd064d47 */ -t4 = 1.7970675603e-02, /* 0x3c93373d */ -t5 = -1.0314224288e-02, /* 0xbc28fcfe */ -t6 = 6.1005386524e-03, /* 0x3bc7e707 */ -t7 = -3.6845202558e-03, /* 0xbb7177fe */ -t8 = 2.2596477065e-03, /* 0x3b141699 */ -t9 = -1.4034647029e-03, /* 0xbab7f476 */ -t10 = 8.8108185446e-04, /* 0x3a66f867 */ -t11 = -5.3859531181e-04, /* 0xba0d3085 */ -t12 = 3.1563205994e-04, /* 0x39a57b6b */ -t13 = -3.1275415677e-04, /* 0xb9a3f927 */ -t14 = 3.3552918467e-04, /* 0x39afe9f7 */ -u0 = -7.7215664089e-02, /* 0xbd9e233f */ -u1 = 6.3282704353e-01, /* 0x3f2200f4 */ -u2 = 1.4549225569e+00, /* 0x3fba3ae7 */ -u3 = 9.7771751881e-01, /* 0x3f7a4bb2 */ -u4 = 2.2896373272e-01, /* 0x3e6a7578 */ -u5 = 1.3381091878e-02, /* 0x3c5b3c5e */ -v1 = 2.4559779167e+00, /* 0x401d2ebe */ -v2 = 2.1284897327e+00, /* 0x4008392d */ -v3 = 7.6928514242e-01, /* 0x3f44efdf */ -v4 = 1.0422264785e-01, /* 0x3dd572af */ -v5 = 3.2170924824e-03, /* 0x3b52d5db */ -s0 = -7.7215664089e-02, /* 0xbd9e233f */ -s1 = 2.1498242021e-01, /* 0x3e5c245a */ -s2 = 3.2577878237e-01, /* 0x3ea6cc7a */ -s3 = 1.4635047317e-01, /* 0x3e15dce6 */ -s4 = 2.6642270386e-02, /* 0x3cda40e4 */ -s5 = 1.8402845599e-03, /* 0x3af135b4 */ -s6 = 3.1947532989e-05, /* 0x3805ff67 */ -r1 = 1.3920053244e+00, /* 0x3fb22d3b */ -r2 = 7.2193557024e-01, /* 0x3f38d0c5 */ -r3 = 1.7193385959e-01, /* 0x3e300f6e */ -r4 = 1.8645919859e-02, /* 0x3c98bf54 */ -r5 = 7.7794247773e-04, /* 0x3a4beed6 */ -r6 = 7.3266842264e-06, /* 0x36f5d7bd */ -w0 = 4.1893854737e-01, /* 0x3ed67f1d */ -w1 = 8.3333335817e-02, /* 0x3daaaaab */ -w2 = -2.7777778450e-03, /* 0xbb360b61 */ -w3 = 7.9365057172e-04, /* 0x3a500cfd */ -w4 = -5.9518753551e-04, /* 0xba1c065c */ -w5 = 8.3633989561e-04, /* 0x3a5b3dd2 */ -w6 = -1.6309292987e-03; /* 0xbad5c4e8 */ - -static const float zero= 0.0000000000e+00; - -static float -sin_pif(float x) -{ - float y,z; - int n,ix; - - GET_FLOAT_WORD(ix,x); - ix &= 0x7fffffff; - - if(ix<0x3e800000) return __kernel_sinf(pi*x,zero,0); - y = -x; /* x is assume negative */ - - /* - * argument reduction, make sure inexact flag not raised if input - * is an integer - */ - z = __floorf(y); - if(z!=y) { /* inexact anyway */ - y *= (float)0.5; - y = (float)2.0*(y - __floorf(y)); /* y = |x| mod 2.0 */ - n = (int) (y*(float)4.0); - } else { - if(ix>=0x4b800000) { - y = zero; n = 0; /* y must be even */ - } else { - if(ix<0x4b000000) z = y+two23; /* exact */ - GET_FLOAT_WORD(n,z); - n &= 1; - y = n; - n<<= 2; - } - } - switch (n) { - case 0: y = __kernel_sinf(pi*y,zero,0); break; - case 1: - case 2: y = __kernel_cosf(pi*((float)0.5-y),zero); break; - case 3: - case 4: y = __kernel_sinf(pi*(one-y),zero,0); break; - case 5: - case 6: y = -__kernel_cosf(pi*(y-(float)1.5),zero); break; - default: y = __kernel_sinf(pi*(y-(float)2.0),zero,0); break; - } - return -y; -} - - -float -__ieee754_lgammaf_r(float x, int *signgamp) -{ - float t,y,z,nadj,p,p1,p2,p3,q,r,w; - int i,hx,ix; - - GET_FLOAT_WORD(hx,x); - - /* purge off +-inf, NaN, +-0, and negative arguments */ - *signgamp = 1; - ix = hx&0x7fffffff; - if(__builtin_expect(ix>=0x7f800000, 0)) return x*x; - if(__builtin_expect(ix==0, 0)) - { - if (hx < 0) - *signgamp = -1; - return one/fabsf(x); - } - if(__builtin_expect(ix<0x30800000, 0)) { - /* |x|<2**-30, return -log(|x|) */ - if(hx<0) { - *signgamp = -1; - return -__ieee754_logf(-x); - } else return -__ieee754_logf(x); - } - if(hx<0) { - if(ix>=0x4b000000) /* |x|>=2**23, must be -integer */ - return __fabsf (x)/zero; - if (ix > 0x40000000 /* X < 2.0f. */ - && ix < 0x41700000 /* X > -15.0f. */) - return __lgamma_negf (x, signgamp); - t = sin_pif(x); - if(t==zero) return one/fabsf(t); /* -integer */ - nadj = __ieee754_logf(pi/fabsf(t*x)); - if(t=0x3f3b4a20) {y = one-x; i= 0;} - else if(ix>=0x3e6d3308) {y= x-(tc-one); i=1;} - else {y = x; i=2;} - } else { - r = zero; - if(ix>=0x3fdda618) {y=(float)2.0-x;i=0;} /* [1.7316,2] */ - else if(ix>=0x3F9da620) {y=x-tc;i=1;} /* [1.23,1.73] */ - else {y=x-one;i=2;} - } - switch(i) { - case 0: - z = y*y; - p1 = a0+z*(a2+z*(a4+z*(a6+z*(a8+z*a10)))); - p2 = z*(a1+z*(a3+z*(a5+z*(a7+z*(a9+z*a11))))); - p = y*p1+p2; - r += (p-(float)0.5*y); break; - case 1: - z = y*y; - w = z*y; - p1 = t0+w*(t3+w*(t6+w*(t9 +w*t12))); /* parallel comp */ - p2 = t1+w*(t4+w*(t7+w*(t10+w*t13))); - p3 = t2+w*(t5+w*(t8+w*(t11+w*t14))); - p = z*p1-(tt-w*(p2+y*p3)); - r += (tf + p); break; - case 2: - p1 = y*(u0+y*(u1+y*(u2+y*(u3+y*(u4+y*u5))))); - p2 = one+y*(v1+y*(v2+y*(v3+y*(v4+y*v5)))); - r += (-(float)0.5*y + p1/p2); - } - } - else if(ix<0x41000000) { /* x < 8.0 */ - i = (int)x; - t = zero; - y = x-(float)i; - p = y*(s0+y*(s1+y*(s2+y*(s3+y*(s4+y*(s5+y*s6)))))); - q = one+y*(r1+y*(r2+y*(r3+y*(r4+y*(r5+y*r6))))); - r = half*y+p/q; - z = one; /* lgamma(1+s) = log(s) + lgamma(s) */ - switch(i) { - case 7: z *= (y+(float)6.0); /* FALLTHRU */ - case 6: z *= (y+(float)5.0); /* FALLTHRU */ - case 5: z *= (y+(float)4.0); /* FALLTHRU */ - case 4: z *= (y+(float)3.0); /* FALLTHRU */ - case 3: z *= (y+(float)2.0); /* FALLTHRU */ - r += __ieee754_logf(z); break; - } - /* 8.0 <= x < 2**26 */ - } else if (ix < 0x4c800000) { - t = __ieee754_logf(x); - z = one/x; - y = z*z; - w = w0+z*(w1+y*(w2+y*(w3+y*(w4+y*(w5+y*w6))))); - r = (x-half)*(t-one)+w; - } else - /* 2**26 <= x <= inf */ - r = math_narrow_eval (x*(__ieee754_logf(x)-one)); - /* NADJ is set for negative arguments but not otherwise, - resulting in warnings that it may be used uninitialized - although in the cases where it is used it has always been - set. */ - DIAG_PUSH_NEEDS_COMMENT; - DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wmaybe-uninitialized"); - if(hx<0) r = nadj - r; - DIAG_POP_NEEDS_COMMENT; - return r; -} -strong_alias (__ieee754_lgammaf_r, __lgammaf_r_finite) diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c deleted file mode 100644 index aa21bbc9c5..0000000000 --- a/sysdeps/ieee754/flt-32/e_log10f.c +++ /dev/null @@ -1,54 +0,0 @@ -/* e_log10f.c -- float version of e_log10.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include -#include - -static const float -two25 = 3.3554432000e+07, /* 0x4c000000 */ -ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */ -log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */ -log10_2lo = 7.9034151668e-07; /* 0x355427db */ - -float -__ieee754_log10f(float x) -{ - float y,z; - int32_t i,k,hx; - - GET_FLOAT_WORD(hx,x); - - k=0; - if (hx < 0x00800000) { /* x < 2**-126 */ - if (__builtin_expect((hx&0x7fffffff)==0, 0)) - return -two25/__fabsf (x); /* log(+-0)=-inf */ - if (__builtin_expect(hx<0, 0)) - return (x-x)/(x-x); /* log(-#) = NaN */ - k -= 25; x *= two25; /* subnormal number, scale up x */ - GET_FLOAT_WORD(hx,x); - } - if (__builtin_expect(hx >= 0x7f800000, 0)) return x+x; - k += (hx>>23)-127; - i = ((u_int32_t)k&0x80000000)>>31; - hx = (hx&0x007fffff)|((0x7f-i)<<23); - y = (float)(k+i); - if (FIX_INT_FP_CONVERT_ZERO && y == 0.0f) - y = 0.0f; - SET_FLOAT_WORD(x,hx); - z = y*log10_2lo + ivln10*__ieee754_logf(x); - return z+y*log10_2hi; -} -strong_alias (__ieee754_log10f, __log10f_finite) diff --git a/sysdeps/ieee754/flt-32/e_log2f.c b/sysdeps/ieee754/flt-32/e_log2f.c deleted file mode 100644 index 782d901094..0000000000 --- a/sysdeps/ieee754/flt-32/e_log2f.c +++ /dev/null @@ -1,86 +0,0 @@ -/* e_logf.c -- float version of e_log.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - * adapted for log2 by Ulrich Drepper - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - - -#include -#include -#include - -static const float -ln2 = 0.69314718055994530942, -two25 = 3.355443200e+07, /* 0x4c000000 */ -Lg1 = 6.6666668653e-01, /* 3F2AAAAB */ -Lg2 = 4.0000000596e-01, /* 3ECCCCCD */ -Lg3 = 2.8571429849e-01, /* 3E924925 */ -Lg4 = 2.2222198546e-01, /* 3E638E29 */ -Lg5 = 1.8183572590e-01, /* 3E3A3325 */ -Lg6 = 1.5313838422e-01, /* 3E1CD04F */ -Lg7 = 1.4798198640e-01; /* 3E178897 */ - -static const float zero = 0.0; - -float -__ieee754_log2f(float x) -{ - float hfsq,f,s,z,R,w,t1,t2,dk; - int32_t k,ix,i,j; - - GET_FLOAT_WORD(ix,x); - - k=0; - if (ix < 0x00800000) { /* x < 2**-126 */ - if (__builtin_expect((ix&0x7fffffff)==0, 0)) - return -two25/__fabsf (x); /* log(+-0)=-inf */ - if (__builtin_expect(ix<0, 0)) - return (x-x)/(x-x); /* log(-#) = NaN */ - k -= 25; x *= two25; /* subnormal number, scale up x */ - GET_FLOAT_WORD(ix,x); - } - if (__builtin_expect(ix >= 0x7f800000, 0)) return x+x; - k += (ix>>23)-127; - ix &= 0x007fffff; - i = (ix+(0x95f64<<3))&0x800000; - SET_FLOAT_WORD(x,ix|(i^0x3f800000)); /* normalize x or x/2 */ - k += (i>>23); - dk = (float)k; - f = x-(float)1.0; - if((0x007fffff&(15+ix))<16) { /* |f| < 2**-20 */ - if(f==zero) - { - if (FIX_INT_FP_CONVERT_ZERO && dk == 0.0f) - dk = 0.0f; - return dk; - } - R = f*f*((float)0.5-(float)0.33333333333333333*f); - return dk-(R-f)/ln2; - } - s = f/((float)2.0+f); - z = s*s; - i = ix-(0x6147a<<3); - w = z*z; - j = (0x6b851<<3)-ix; - t1= w*(Lg2+w*(Lg4+w*Lg6)); - t2= z*(Lg1+w*(Lg3+w*(Lg5+w*Lg7))); - i |= j; - R = t2+t1; - if(i>0) { - hfsq=(float)0.5*f*f; - return dk-((hfsq-(s*(hfsq+R)))-f)/ln2; - } else { - return dk-((s*(f-R))-f)/ln2; - } -} -strong_alias (__ieee754_log2f, __log2f_finite) diff --git a/sysdeps/ieee754/flt-32/e_logf.c b/sysdeps/ieee754/flt-32/e_logf.c deleted file mode 100644 index cf75e11781..0000000000 --- a/sysdeps/ieee754/flt-32/e_logf.c +++ /dev/null @@ -1,85 +0,0 @@ -/* e_logf.c -- float version of e_log.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include - -static const float -ln2_hi = 6.9313812256e-01, /* 0x3f317180 */ -ln2_lo = 9.0580006145e-06, /* 0x3717f7d1 */ -two25 = 3.355443200e+07, /* 0x4c000000 */ -Lg1 = 6.6666668653e-01, /* 3F2AAAAB */ -Lg2 = 4.0000000596e-01, /* 3ECCCCCD */ -Lg3 = 2.8571429849e-01, /* 3E924925 */ -Lg4 = 2.2222198546e-01, /* 3E638E29 */ -Lg5 = 1.8183572590e-01, /* 3E3A3325 */ -Lg6 = 1.5313838422e-01, /* 3E1CD04F */ -Lg7 = 1.4798198640e-01; /* 3E178897 */ - -static const float zero = 0.0; - -float -__ieee754_logf(float x) -{ - float hfsq,f,s,z,R,w,t1,t2,dk; - int32_t k,ix,i,j; - - GET_FLOAT_WORD(ix,x); - - k=0; - if (ix < 0x00800000) { /* x < 2**-126 */ - if (__builtin_expect((ix&0x7fffffff)==0, 0)) - return -two25/zero; /* log(+-0)=-inf */ - if (__builtin_expect(ix<0, 0)) - return (x-x)/(x-x); /* log(-#) = NaN */ - k -= 25; x *= two25; /* subnormal number, scale up x */ - GET_FLOAT_WORD(ix,x); - } - if (__builtin_expect(ix >= 0x7f800000, 0)) return x+x; - k += (ix>>23)-127; - ix &= 0x007fffff; - i = (ix+(0x95f64<<3))&0x800000; - SET_FLOAT_WORD(x,ix|(i^0x3f800000)); /* normalize x or x/2 */ - k += (i>>23); - f = x-(float)1.0; - if((0x007fffff&(15+ix))<16) { /* |f| < 2**-20 */ - if(f==zero) { - if(k==0) return zero; else {dk=(float)k; - return dk*ln2_hi+dk*ln2_lo;} - } - R = f*f*((float)0.5-(float)0.33333333333333333*f); - if(k==0) return f-R; else {dk=(float)k; - return dk*ln2_hi-((R-dk*ln2_lo)-f);} - } - s = f/((float)2.0+f); - dk = (float)k; - z = s*s; - i = ix-(0x6147a<<3); - w = z*z; - j = (0x6b851<<3)-ix; - t1= w*(Lg2+w*(Lg4+w*Lg6)); - t2= z*(Lg1+w*(Lg3+w*(Lg5+w*Lg7))); - i |= j; - R = t2+t1; - if(i>0) { - hfsq=(float)0.5*f*f; - if(k==0) return f-(hfsq-s*(hfsq+R)); else - return dk*ln2_hi-((hfsq-(s*(hfsq+R)+dk*ln2_lo))-f); - } else { - if(k==0) return f-s*(f-R); else - return dk*ln2_hi-((s*(f-R)-dk*ln2_lo)-f); - } -} -strong_alias (__ieee754_logf, __logf_finite) diff --git a/sysdeps/ieee754/flt-32/e_powf.c b/sysdeps/ieee754/flt-32/e_powf.c deleted file mode 100644 index 13b49def8e..0000000000 --- a/sysdeps/ieee754/flt-32/e_powf.c +++ /dev/null @@ -1,258 +0,0 @@ -/* e_powf.c -- float version of e_pow.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include - -static const float huge = 1.0e+30, tiny = 1.0e-30; - -static const float -bp[] = {1.0, 1.5,}, -dp_h[] = { 0.0, 5.84960938e-01,}, /* 0x3f15c000 */ -dp_l[] = { 0.0, 1.56322085e-06,}, /* 0x35d1cfdc */ -zero = 0.0, -one = 1.0, -two = 2.0, -two24 = 16777216.0, /* 0x4b800000 */ - /* poly coefs for (3/2)*(log(x)-2s-2/3*s**3 */ -L1 = 6.0000002384e-01, /* 0x3f19999a */ -L2 = 4.2857143283e-01, /* 0x3edb6db7 */ -L3 = 3.3333334327e-01, /* 0x3eaaaaab */ -L4 = 2.7272811532e-01, /* 0x3e8ba305 */ -L5 = 2.3066075146e-01, /* 0x3e6c3255 */ -L6 = 2.0697501302e-01, /* 0x3e53f142 */ -P1 = 1.6666667163e-01, /* 0x3e2aaaab */ -P2 = -2.7777778450e-03, /* 0xbb360b61 */ -P3 = 6.6137559770e-05, /* 0x388ab355 */ -P4 = -1.6533901999e-06, /* 0xb5ddea0e */ -P5 = 4.1381369442e-08, /* 0x3331bb4c */ -lg2 = 6.9314718246e-01, /* 0x3f317218 */ -lg2_h = 6.93145752e-01, /* 0x3f317200 */ -lg2_l = 1.42860654e-06, /* 0x35bfbe8c */ -ovt = 4.2995665694e-08, /* -(128-log2(ovfl+.5ulp)) */ -cp = 9.6179670095e-01, /* 0x3f76384f =2/(3ln2) */ -cp_h = 0xf.64p-4, /* cp high 12 bits. */ -cp_l = -0x7.b11e3p-16, /* 2/(3ln2) - cp_h. */ -ivln2 = 1.4426950216e+00, /* 0x3fb8aa3b =1/ln2 */ -ivln2_h = 1.4426879883e+00, /* 0x3fb8aa00 =16b 1/ln2*/ -ivln2_l = 7.0526075433e-06; /* 0x36eca570 =1/ln2 tail*/ - -float -__ieee754_powf(float x, float y) -{ - float z,ax,z_h,z_l,p_h,p_l; - float y1,t1,t2,r,s,t,u,v,w; - int32_t i,j,k,yisint,n; - int32_t hx,hy,ix,iy,is; - - GET_FLOAT_WORD(hx,x); - GET_FLOAT_WORD(hy,y); - ix = hx&0x7fffffff; iy = hy&0x7fffffff; - - /* y==zero: x**0 = 1 */ - if(iy==0 && !issignaling (x)) return one; - - /* x==+-1 */ - if(x == 1.0 && !issignaling (y)) return one; - if(x == -1.0 && isinf(y)) return one; - - /* +-NaN return x+y */ - if(__builtin_expect(ix > 0x7f800000 || - iy > 0x7f800000, 0)) - return x+y; - - /* determine if y is an odd int when x < 0 - * yisint = 0 ... y is not an integer - * yisint = 1 ... y is an odd int - * yisint = 2 ... y is an even int - */ - yisint = 0; - if(hx<0) { - if(iy>=0x4b800000) yisint = 2; /* even integer y */ - else if(iy>=0x3f800000) { - k = (iy>>23)-0x7f; /* exponent */ - j = iy>>(23-k); - if((j<<(23-k))==iy) yisint = 2-(j&1); - } - } - - /* special value of y */ - if (__builtin_expect(iy==0x7f800000, 0)) { /* y is +-inf */ - if (ix==0x3f800000) - return y - y; /* inf**+-1 is NaN */ - else if (ix > 0x3f800000)/* (|x|>1)**+-inf = inf,0 */ - return (hy>=0)? y: zero; - else /* (|x|<1)**-,+inf = inf,0 */ - return (hy<0)?-y: zero; - } - if(iy==0x3f800000) { /* y is +-1 */ - if(hy<0) return one/x; else return x; - } - if(hy==0x40000000) return x*x; /* y is 2 */ - if(hy==0x3f000000) { /* y is 0.5 */ - if(__builtin_expect(hx>=0, 1)) /* x >= +0 */ - return __ieee754_sqrtf(x); - } - - ax = fabsf(x); - /* special value of x */ - if(__builtin_expect(ix==0x7f800000||ix==0||ix==0x3f800000, 0)){ - z = ax; /*x is +-0,+-inf,+-1*/ - if(hy<0) z = one/z; /* z = (1/|x|) */ - if(hx<0) { - if(((ix-0x3f800000)|yisint)==0) { - z = (z-z)/(z-z); /* (-1)**non-int is NaN */ - } else if(yisint==1) - z = -z; /* (x<0)**odd = -(|x|**odd) */ - } - return z; - } - - /* (x<0)**(non-int) is NaN */ - if(__builtin_expect(((((u_int32_t)hx>>31)-1)|yisint)==0, 0)) - return (x-x)/(x-x); - - /* |y| is huge */ - if(__builtin_expect(iy>0x4d000000, 0)) { /* if |y| > 2**27 */ - /* over/underflow if x is not close to one */ - if(ix<0x3f7ffff8) return (hy<0)? huge*huge:tiny*tiny; - if(ix>0x3f800007) return (hy>0)? huge*huge:tiny*tiny; - /* now |1-x| is tiny <= 2**-20, suffice to compute - log(x) by x-x^2/2+x^3/3-x^4/4 */ - t = ax-1; /* t has 20 trailing zeros */ - w = (t*t)*((float)0.5-t*((float)0.333333333333-t*(float)0.25)); - u = ivln2_h*t; /* ivln2_h has 16 sig. bits */ - v = t*ivln2_l-w*ivln2; - t1 = u+v; - GET_FLOAT_WORD(is,t1); - SET_FLOAT_WORD(t1,is&0xfffff000); - t2 = v-(t1-u); - } else { - float s2,s_h,s_l,t_h,t_l; - /* Avoid internal underflow for tiny y. The exact value - of y does not matter if |y| <= 2**-32. */ - if (iy < 0x2f800000) - SET_FLOAT_WORD (y, (hy & 0x80000000) | 0x2f800000); - n = 0; - /* take care subnormal number */ - if(ix<0x00800000) - {ax *= two24; n -= 24; GET_FLOAT_WORD(ix,ax); } - n += ((ix)>>23)-0x7f; - j = ix&0x007fffff; - /* determine interval */ - ix = j|0x3f800000; /* normalize ix */ - if(j<=0x1cc471) k=0; /* |x|>1)|0x20000000)+0x00400000+(k<<21)) - & 0xfffff000)); - t_l = ax - (t_h-bp[k]); - s_l = v*((u-s_h*t_h)-s_h*t_l); - /* compute log(ax) */ - s2 = s*s; - r = s2*s2*(L1+s2*(L2+s2*(L3+s2*(L4+s2*(L5+s2*L6))))); - r += s_l*(s_h+s); - s2 = s_h*s_h; - t_h = (float)3.0+s2+r; - GET_FLOAT_WORD(is,t_h); - SET_FLOAT_WORD(t_h,is&0xfffff000); - t_l = r-((t_h-(float)3.0)-s2); - /* u+v = s*(1+...) */ - u = s_h*t_h; - v = s_l*t_h+t_l*s; - /* 2/(3log2)*(s+...) */ - p_h = u+v; - GET_FLOAT_WORD(is,p_h); - SET_FLOAT_WORD(p_h,is&0xfffff000); - p_l = v-(p_h-u); - z_h = cp_h*p_h; /* cp_h+cp_l = 2/(3*log2) */ - z_l = cp_l*p_h+p_l*cp+dp_l[k]; - /* log2(ax) = (s+..)*2/(3*log2) = n + dp_h + z_h + z_l */ - t = (float)n; - t1 = (((z_h+z_l)+dp_h[k])+t); - GET_FLOAT_WORD(is,t1); - SET_FLOAT_WORD(t1,is&0xfffff000); - t2 = z_l-(((t1-t)-dp_h[k])-z_h); - } - - s = one; /* s (sign of result -ve**odd) = -1 else = 1 */ - if(((((u_int32_t)hx>>31)-1)|(yisint-1))==0) - s = -one; /* (-ve)**(odd int) */ - - /* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */ - GET_FLOAT_WORD(is,y); - SET_FLOAT_WORD(y1,is&0xfffff000); - p_l = (y-y1)*t1+y*t2; - p_h = y1*t1; - z = p_l+p_h; - GET_FLOAT_WORD(j,z); - if (__builtin_expect(j>0x43000000, 0)) /* if z > 128 */ - return s*huge*huge; /* overflow */ - else if (__builtin_expect(j==0x43000000, 0)) { /* if z == 128 */ - if(p_l+ovt>z-p_h) return s*huge*huge; /* overflow */ - } - else if (__builtin_expect((j&0x7fffffff)>0x43160000, 0))/* z <= -150 */ - return s*tiny*tiny; /* underflow */ - else if (__builtin_expect((u_int32_t) j==0xc3160000, 0)){/* z == -150*/ - if(p_l<=z-p_h) return s*tiny*tiny; /* underflow */ - } - /* - * compute 2**(p_h+p_l) - */ - i = j&0x7fffffff; - k = (i>>23)-0x7f; - n = 0; - if(i>0x3f000000) { /* if |z| > 0.5, set n = [z+0.5] */ - n = j+(0x00800000>>(k+1)); - k = ((n&0x7fffffff)>>23)-0x7f; /* new k for n */ - SET_FLOAT_WORD(t,n&~(0x007fffff>>k)); - n = ((n&0x007fffff)|0x00800000)>>(23-k); - if(j<0) n = -n; - p_h -= t; - } - t = p_l+p_h; - GET_FLOAT_WORD(is,t); - SET_FLOAT_WORD(t,is&0xfffff000); - u = t*lg2_h; - v = (p_l-(t-p_h))*lg2+t*lg2_l; - z = u+v; - w = v-(z-u); - t = z*z; - t1 = z - t*(P1+t*(P2+t*(P3+t*(P4+t*P5)))); - r = (z*t1)/(t1-two)-(w+z*w); - z = one-(r-z); - GET_FLOAT_WORD(j,z); - j += (n<<23); - if((j>>23)<=0) /* subnormal output */ - { - z = __scalbnf (z, n); - float force_underflow = z * z; - math_force_eval (force_underflow); - } - else SET_FLOAT_WORD(z,j); - return s*z; -} -strong_alias (__ieee754_powf, __powf_finite) diff --git a/sysdeps/ieee754/flt-32/e_rem_pio2f.c b/sysdeps/ieee754/flt-32/e_rem_pio2f.c deleted file mode 100644 index c4d28c8657..0000000000 --- a/sysdeps/ieee754/flt-32/e_rem_pio2f.c +++ /dev/null @@ -1,179 +0,0 @@ -/* e_rem_pio2f.c -- float version of e_rem_pio2.c - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: e_rem_pio2f.c,v 1.5 1995/05/10 20:46:03 jtc Exp $"; -#endif - -/* __ieee754_rem_pio2f(x,y) - * - * return the remainder of x rem pi/2 in y[0]+y[1] - * use __kernel_rem_pio2f() - */ - -#include -#include - -/* - * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi - */ -static const int32_t two_over_pi[] = { -0xA2, 0xF9, 0x83, 0x6E, 0x4E, 0x44, 0x15, 0x29, 0xFC, -0x27, 0x57, 0xD1, 0xF5, 0x34, 0xDD, 0xC0, 0xDB, 0x62, -0x95, 0x99, 0x3C, 0x43, 0x90, 0x41, 0xFE, 0x51, 0x63, -0xAB, 0xDE, 0xBB, 0xC5, 0x61, 0xB7, 0x24, 0x6E, 0x3A, -0x42, 0x4D, 0xD2, 0xE0, 0x06, 0x49, 0x2E, 0xEA, 0x09, -0xD1, 0x92, 0x1C, 0xFE, 0x1D, 0xEB, 0x1C, 0xB1, 0x29, -0xA7, 0x3E, 0xE8, 0x82, 0x35, 0xF5, 0x2E, 0xBB, 0x44, -0x84, 0xE9, 0x9C, 0x70, 0x26, 0xB4, 0x5F, 0x7E, 0x41, -0x39, 0x91, 0xD6, 0x39, 0x83, 0x53, 0x39, 0xF4, 0x9C, -0x84, 0x5F, 0x8B, 0xBD, 0xF9, 0x28, 0x3B, 0x1F, 0xF8, -0x97, 0xFF, 0xDE, 0x05, 0x98, 0x0F, 0xEF, 0x2F, 0x11, -0x8B, 0x5A, 0x0A, 0x6D, 0x1F, 0x6D, 0x36, 0x7E, 0xCF, -0x27, 0xCB, 0x09, 0xB7, 0x4F, 0x46, 0x3F, 0x66, 0x9E, -0x5F, 0xEA, 0x2D, 0x75, 0x27, 0xBA, 0xC7, 0xEB, 0xE5, -0xF1, 0x7B, 0x3D, 0x07, 0x39, 0xF7, 0x8A, 0x52, 0x92, -0xEA, 0x6B, 0xFB, 0x5F, 0xB1, 0x1F, 0x8D, 0x5D, 0x08, -0x56, 0x03, 0x30, 0x46, 0xFC, 0x7B, 0x6B, 0xAB, 0xF0, -0xCF, 0xBC, 0x20, 0x9A, 0xF4, 0x36, 0x1D, 0xA9, 0xE3, -0x91, 0x61, 0x5E, 0xE6, 0x1B, 0x08, 0x65, 0x99, 0x85, -0x5F, 0x14, 0xA0, 0x68, 0x40, 0x8D, 0xFF, 0xD8, 0x80, -0x4D, 0x73, 0x27, 0x31, 0x06, 0x06, 0x15, 0x56, 0xCA, -0x73, 0xA8, 0xC9, 0x60, 0xE2, 0x7B, 0xC0, 0x8C, 0x6B, -}; - -/* This array is like the one in e_rem_pio2.c, but the numbers are - single precision and the last 8 bits are forced to 0. */ -static const int32_t npio2_hw[] = { -0x3fc90f00, 0x40490f00, 0x4096cb00, 0x40c90f00, 0x40fb5300, 0x4116cb00, -0x412fed00, 0x41490f00, 0x41623100, 0x417b5300, 0x418a3a00, 0x4196cb00, -0x41a35c00, 0x41afed00, 0x41bc7e00, 0x41c90f00, 0x41d5a000, 0x41e23100, -0x41eec200, 0x41fb5300, 0x4203f200, 0x420a3a00, 0x42108300, 0x4216cb00, -0x421d1400, 0x42235c00, 0x4229a500, 0x422fed00, 0x42363600, 0x423c7e00, -0x4242c700, 0x42490f00 -}; - -/* - * invpio2: 24 bits of 2/pi - * pio2_1: first 17 bit of pi/2 - * pio2_1t: pi/2 - pio2_1 - * pio2_2: second 17 bit of pi/2 - * pio2_2t: pi/2 - (pio2_1+pio2_2) - * pio2_3: third 17 bit of pi/2 - * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) - */ - -static const float -zero = 0.0000000000e+00, /* 0x00000000 */ -half = 5.0000000000e-01, /* 0x3f000000 */ -two8 = 2.5600000000e+02, /* 0x43800000 */ -invpio2 = 6.3661980629e-01, /* 0x3f22f984 */ -pio2_1 = 1.5707855225e+00, /* 0x3fc90f80 */ -pio2_1t = 1.0804334124e-05, /* 0x37354443 */ -pio2_2 = 1.0804273188e-05, /* 0x37354400 */ -pio2_2t = 6.0770999344e-11, /* 0x2e85a308 */ -pio2_3 = 6.0770943833e-11, /* 0x2e85a300 */ -pio2_3t = 6.1232342629e-17; /* 0x248d3132 */ - -int32_t __ieee754_rem_pio2f(float x, float *y) -{ - float z,w,t,r,fn; - float tx[3]; - int32_t e0,i,j,nx,n,ix,hx; - - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix<=0x3f490fd8) /* |x| ~<= pi/4 , no need for reduction */ - {y[0] = x; y[1] = 0; return 0;} - if(ix<0x4016cbe4) { /* |x| < 3pi/4, special case with n=+-1 */ - if(hx>0) { - z = x - pio2_1; - if((ix&0xffffffc0)!=0x3fc90fc0) { /* 24+24 bit pi OK */ - y[0] = z - pio2_1t; - y[1] = (z-y[0])-pio2_1t; - } else { /* near pi/2, use 24+24+24 bit pi */ - z -= pio2_2; - y[0] = z - pio2_2t; - y[1] = (z-y[0])-pio2_2t; - } - return 1; - } else { /* negative x */ - z = x + pio2_1; - if((ix&0xffffffc0)!=0x3fc90fc0) { /* 24+24 bit pi OK */ - y[0] = z + pio2_1t; - y[1] = (z-y[0])+pio2_1t; - } else { /* near pi/2, use 24+24+24 bit pi */ - z += pio2_2; - y[0] = z + pio2_2t; - y[1] = (z-y[0])+pio2_2t; - } - return -1; - } - } - if(ix<=0x43490f80) { /* |x| ~<= 2^7*(pi/2), medium size */ - t = fabsf(x); - n = (int32_t) (t*invpio2+half); - fn = (float)n; - r = t-fn*pio2_1; - w = fn*pio2_1t; /* 1st round good to 40 bit */ - if(n<32&&(int32_t)(ix&0xffffff00)!=npio2_hw[n-1]) { - y[0] = r-w; /* quick check no cancellation */ - } else { - u_int32_t high; - j = ix>>23; - y[0] = r-w; - GET_FLOAT_WORD(high,y[0]); - i = j-((high>>23)&0xff); - if(i>8) { /* 2nd iteration needed, good to 57 */ - t = r; - w = fn*pio2_2; - r = t-w; - w = fn*pio2_2t-((t-r)-w); - y[0] = r-w; - GET_FLOAT_WORD(high,y[0]); - i = j-((high>>23)&0xff); - if(i>25) { /* 3rd iteration need, 74 bits acc */ - t = r; /* will cover all possible cases */ - w = fn*pio2_3; - r = t-w; - w = fn*pio2_3t-((t-r)-w); - y[0] = r-w; - } - } - } - y[1] = (r-y[0])-w; - if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;} - else return n; - } - /* - * all other (large) arguments - */ - if(ix>=0x7f800000) { /* x is inf or NaN */ - y[0]=y[1]=x-x; return 0; - } - /* set z = scalbn(|x|,ilogb(x)-7) */ - e0 = (ix>>23)-134; /* e0 = ilogb(z)-7; */ - SET_FLOAT_WORD(z, ix - ((int32_t)(e0<<23))); - for(i=0;i<2;i++) { - tx[i] = (float)((int32_t)(z)); - z = (z-tx[i])*two8; - } - tx[2] = z; - nx = 3; - while(tx[nx-1]==zero) nx--; /* skip zero term */ - n = __kernel_rem_pio2f(tx,y,e0,nx,2,two_over_pi); - if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;} - return n; -} diff --git a/sysdeps/ieee754/flt-32/e_remainderf.c b/sysdeps/ieee754/flt-32/e_remainderf.c deleted file mode 100644 index cc0167862e..0000000000 --- a/sysdeps/ieee754/flt-32/e_remainderf.c +++ /dev/null @@ -1,62 +0,0 @@ -/* e_remainderf.c -- float version of e_remainder.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include - -static const float zero = 0.0; - - -float -__ieee754_remainderf(float x, float p) -{ - int32_t hx,hp; - u_int32_t sx; - float p_half; - - GET_FLOAT_WORD(hx,x); - GET_FLOAT_WORD(hp,p); - sx = hx&0x80000000; - hp &= 0x7fffffff; - hx &= 0x7fffffff; - - /* purge off exception values */ - if(hp==0) return (x*p)/(x*p); /* p = 0 */ - if((hx>=0x7f800000)|| /* x not finite */ - ((hp>0x7f800000))) /* p is NaN */ - return (x*p)/(x*p); - - - if (hp<=0x7effffff) x = __ieee754_fmodf(x,p+p); /* now x < 2p */ - if ((hx-hp)==0) return zero*x; - x = fabsf(x); - p = fabsf(p); - if (hp<0x01000000) { - if(x+x>p) { - x-=p; - if(x+x>=p) x -= p; - } - } else { - p_half = (float)0.5*p; - if(x>p_half) { - x-=p; - if(x>=p_half) x -= p; - } - } - GET_FLOAT_WORD(hx,x); - SET_FLOAT_WORD(x,hx^sx); - return x; -} -strong_alias (__ieee754_remainderf, __remainderf_finite) diff --git a/sysdeps/ieee754/flt-32/e_sinhf.c b/sysdeps/ieee754/flt-32/e_sinhf.c deleted file mode 100644 index 6100d95c55..0000000000 --- a/sysdeps/ieee754/flt-32/e_sinhf.c +++ /dev/null @@ -1,60 +0,0 @@ -/* e_sinhf.c -- float version of e_sinh.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include -#include - -static const float one = 1.0, shuge = 1.0e37; - -float -__ieee754_sinhf(float x) -{ - float t,w,h; - int32_t ix,jx; - - GET_FLOAT_WORD(jx,x); - ix = jx&0x7fffffff; - - /* x is INF or NaN */ - if(__builtin_expect(ix>=0x7f800000, 0)) return x+x; - - h = 0.5; - if (jx<0) h = -h; - /* |x| in [0,22], return sign(x)*0.5*(E+E/(E+1))) */ - if (ix < 0x41b00000) { /* |x|<22 */ - if (__builtin_expect(ix<0x31800000, 0)) { /* |x|<2**-28 */ - math_check_force_underflow (x); - if(shuge+x>one) return x;/* sinh(tiny) = tiny with inexact */ - } - t = __expm1f(fabsf(x)); - if(ix<0x3f800000) return h*((float)2.0*t-t*t/(t+one)); - return h*(t+t/(t+one)); - } - - /* |x| in [22, log(maxdouble)] return 0.5*exp(|x|) */ - if (ix < 0x42b17180) return h*__ieee754_expf(fabsf(x)); - - /* |x| in [log(maxdouble), overflowthresold] */ - if (ix<=0x42b2d4fc) { - w = __ieee754_expf((float)0.5*fabsf(x)); - t = h*w; - return t*w; - } - - /* |x| > overflowthresold, sinh(x) overflow */ - return math_narrow_eval (x*shuge); -} -strong_alias (__ieee754_sinhf, __sinhf_finite) diff --git a/sysdeps/ieee754/flt-32/e_sqrtf.c b/sysdeps/ieee754/flt-32/e_sqrtf.c deleted file mode 100644 index c02206ac01..0000000000 --- a/sysdeps/ieee754/flt-32/e_sqrtf.c +++ /dev/null @@ -1,86 +0,0 @@ -/* e_sqrtf.c -- float version of e_sqrt.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include - -static const float one = 1.0, tiny=1.0e-30; - -float -__ieee754_sqrtf(float x) -{ - float z; - int32_t sign = (int)0x80000000; - int32_t ix,s,q,m,t,i; - u_int32_t r; - - GET_FLOAT_WORD(ix,x); - - /* take care of Inf and NaN */ - if((ix&0x7f800000)==0x7f800000) { - return x*x+x; /* sqrt(NaN)=NaN, sqrt(+inf)=+inf - sqrt(-inf)=sNaN */ - } - /* take care of zero */ - if(ix<=0) { - if((ix&(~sign))==0) return x;/* sqrt(+-0) = +-0 */ - else if(ix<0) - return (x-x)/(x-x); /* sqrt(-ve) = sNaN */ - } - /* normalize x */ - m = (ix>>23); - if(m==0) { /* subnormal x */ - for(i=0;(ix&0x00800000)==0;i++) ix<<=1; - m -= i-1; - } - m -= 127; /* unbias exponent */ - ix = (ix&0x007fffff)|0x00800000; - if(m&1) /* odd m, double x to make it even */ - ix += ix; - m >>= 1; /* m = [m/2] */ - - /* generate sqrt(x) bit by bit */ - ix += ix; - q = s = 0; /* q = sqrt(x) */ - r = 0x01000000; /* r = moving bit from right to left */ - - while(r!=0) { - t = s+r; - if(t<=ix) { - s = t+r; - ix -= t; - q += r; - } - ix += ix; - r>>=1; - } - - /* use floating add to find out rounding direction */ - if(ix!=0) { - z = one-tiny; /* trigger inexact flag */ - if (z>=one) { - z = one+tiny; - if (z>one) - q += 2; - else - q += (q&1); - } - } - ix = (q>>1)+0x3f000000; - ix += (m <<23); - SET_FLOAT_WORD(z,ix); - return z; -} -strong_alias (__ieee754_sqrtf, __sqrtf_finite) diff --git a/sysdeps/ieee754/flt-32/k_cosf.c b/sysdeps/ieee754/flt-32/k_cosf.c deleted file mode 100644 index 63ca822f8c..0000000000 --- a/sysdeps/ieee754/flt-32/k_cosf.c +++ /dev/null @@ -1,55 +0,0 @@ -/* k_cosf.c -- float version of k_cos.c - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: k_cosf.c,v 1.4 1995/05/10 20:46:23 jtc Exp $"; -#endif - -#include -#include - -static const float -one = 1.0000000000e+00, /* 0x3f800000 */ -C1 = 4.1666667908e-02, /* 0x3d2aaaab */ -C2 = -1.3888889225e-03, /* 0xbab60b61 */ -C3 = 2.4801587642e-05, /* 0x37d00d01 */ -C4 = -2.7557314297e-07, /* 0xb493f27c */ -C5 = 2.0875723372e-09, /* 0x310f74f6 */ -C6 = -1.1359647598e-11; /* 0xad47d74e */ - -float __kernel_cosf(float x, float y) -{ - float a,hz,z,r,qx; - int32_t ix; - GET_FLOAT_WORD(ix,x); - ix &= 0x7fffffff; /* ix = |x|'s high word*/ - if(ix<0x32000000) { /* if x < 2**27 */ - if(((int)x)==0) return one; /* generate inexact */ - } - z = x*x; - r = z*(C1+z*(C2+z*(C3+z*(C4+z*(C5+z*C6))))); - if(ix < 0x3e99999a) /* if |x| < 0.3 */ - return one - ((float)0.5*z - (z*r - x*y)); - else { - if(ix > 0x3f480000) { /* x > 0.78125 */ - qx = (float)0.28125; - } else { - SET_FLOAT_WORD(qx,ix-0x01000000); /* x/4 */ - } - hz = (float)0.5*z-qx; - a = one-qx; - return a - (hz - (z*r-x*y)); - } -} diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c deleted file mode 100644 index a8d5b216e6..0000000000 --- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c +++ /dev/null @@ -1,208 +0,0 @@ -/* k_rem_pio2f.c -- float version of k_rem_pio2.c - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: k_rem_pio2f.c,v 1.4 1995/05/10 20:46:28 jtc Exp $"; -#endif - -#include -#include -#include - -/* In the float version, the input parameter x contains 8 bit - integers, not 24 bit integers. 113 bit precision is not supported. */ - -static const int init_jk[] = {4,7,9}; /* initial value for jk */ - -static const float PIo2[] = { - 1.5703125000e+00, /* 0x3fc90000 */ - 4.5776367188e-04, /* 0x39f00000 */ - 2.5987625122e-05, /* 0x37da0000 */ - 7.5437128544e-08, /* 0x33a20000 */ - 6.0026650317e-11, /* 0x2e840000 */ - 7.3896444519e-13, /* 0x2b500000 */ - 5.3845816694e-15, /* 0x27c20000 */ - 5.6378512969e-18, /* 0x22d00000 */ - 8.3009228831e-20, /* 0x1fc40000 */ - 3.2756352257e-22, /* 0x1bc60000 */ - 6.3331015649e-25, /* 0x17440000 */ -}; - -static const float -zero = 0.0, -one = 1.0, -two8 = 2.5600000000e+02, /* 0x43800000 */ -twon8 = 3.9062500000e-03; /* 0x3b800000 */ - -int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32_t *ipio2) -{ - int32_t jz,jx,jv,jp,jk,carry,n,iq[20],i,j,k,m,q0,ih; - float z,fw,f[20],fq[20],q[20]; - - /* initialize jk*/ - jk = init_jk[prec]; - jp = jk; - - /* determine jx,jv,q0, note that 3>q0 */ - jx = nx-1; - jv = (e0-3)/8; if(jv<0) jv=0; - q0 = e0-8*(jv+1); - - /* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */ - j = jv-jx; m = jx+jk; - for(i=0;i<=m;i++,j++) f[i] = (j<0)? zero : (float) ipio2[j]; - - /* compute q[0],q[1],...q[jk] */ - for (i=0;i<=jk;i++) { - for(j=0,fw=0.0;j<=jx;j++) - fw += x[j]*f[jx+i-j]; - q[i] = fw; - } - - jz = jk; -recompute: - /* distill q[] into iq[] reversingly */ - for(i=0,j=jz,z=q[jz];j>0;i++,j--) { - fw = (float)((int32_t)(twon8* z)); - iq[i] = (int32_t)(z-two8*fw); - z = q[j-1]+fw; - } - - /* compute n */ - z = __scalbnf(z,q0); /* actual value of z */ - z -= (float)8.0*__floorf(z*(float)0.125); /* trim off integer >= 8 */ - n = (int32_t) z; - z -= (float)n; - ih = 0; - if(q0>0) { /* need iq[jz-1] to determine n */ - i = (iq[jz-1]>>(8-q0)); n += i; - iq[jz-1] -= i<<(8-q0); - ih = iq[jz-1]>>(7-q0); - } - else if(q0==0) ih = iq[jz-1]>>7; - else if(z>=(float)0.5) ih=2; - - if(ih>0) { /* q > 0.5 */ - n += 1; carry = 0; - for(i=0;i0) { /* rare case: chance is 1 in 12 */ - switch(q0) { - case 1: - iq[jz-1] &= 0x7f; break; - case 2: - iq[jz-1] &= 0x3f; break; - } - } - if(ih==2) { - z = one - z; - if(carry!=0) z -= __scalbnf(one,q0); - } - } - - /* check if recomputation is needed */ - if(z==zero) { - j = 0; - for (i=jz-1;i>=jk;i--) j |= iq[i]; - if(j==0) { /* need recomputation */ - /* On s390x gcc 6.1 -O3 produces the warning "array subscript is - below array bounds [-Werror=array-bounds]". Only - __ieee754_rem_pio2f calls __kernel_rem_pio2f for normal - numbers and |x| ~> 2^7*(pi/2). Thus x can't be zero and - ipio2 is not zero, too. Thus not all iq[] values can't be - zero. */ - DIAG_PUSH_NEEDS_COMMENT; - DIAG_IGNORE_NEEDS_COMMENT (6.1, "-Warray-bounds"); - for(k=1;iq[jk-k]==0;k++); /* k = no. of terms needed */ - DIAG_POP_NEEDS_COMMENT; - - for(i=jz+1;i<=jz+k;i++) { /* add q[jz+1] to q[jz+k] */ - f[jx+i] = (float) ipio2[jv+i]; - for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; - q[i] = fw; - } - jz += k; - goto recompute; - } - } - - /* chop off zero terms */ - if(z==(float)0.0) { - jz -= 1; q0 -= 8; - while(iq[jz]==0) { jz--; q0-=8;} - } else { /* break z into 8-bit if necessary */ - z = __scalbnf(z,-q0); - if(z>=two8) { - fw = (float)((int32_t)(twon8*z)); - iq[jz] = (int32_t)(z-two8*fw); - jz += 1; q0 += 8; - iq[jz] = (int32_t) fw; - } else iq[jz] = (int32_t) z ; - } - - /* convert integer "bit" chunk to floating-point value */ - fw = __scalbnf(one,q0); - for(i=jz;i>=0;i--) { - q[i] = fw*(float)iq[i]; fw*=twon8; - } - - /* compute PIo2[0,...,jp]*q[jz,...,0] */ - for(i=jz;i>=0;i--) { - for(fw=0.0,k=0;k<=jp&&k<=jz-i;k++) fw += PIo2[k]*q[i+k]; - fq[jz-i] = fw; - } - - /* compress fq[] into y[] */ - switch(prec) { - case 0: - fw = 0.0; - for (i=jz;i>=0;i--) fw += fq[i]; - y[0] = (ih==0)? fw: -fw; - break; - case 1: - case 2:; - float fv = 0.0; - for (i=jz;i>=0;i--) fv = math_narrow_eval (fv + fq[i]); - y[0] = (ih==0)? fv: -fv; - fv = math_narrow_eval (fq[0]-fv); - for (i=1;i<=jz;i++) fv = math_narrow_eval (fv + fq[i]); - y[1] = (ih==0)? fv: -fv; - break; - case 3: /* painful */ - for (i=jz;i>0;i--) { - float fv = math_narrow_eval (fq[i-1]+fq[i]); - fq[i] += fq[i-1]-fv; - fq[i-1] = fv; - } - for (i=jz;i>1;i--) { - float fv = math_narrow_eval (fq[i-1]+fq[i]); - fq[i] += fq[i-1]-fv; - fq[i-1] = fv; - } - for (fw=0.0,i=jz;i>=2;i--) fw += fq[i]; - if(ih==0) { - y[0] = fq[0]; y[1] = fq[1]; y[2] = fw; - } else { - y[0] = -fq[0]; y[1] = -fq[1]; y[2] = -fw; - } - } - return n&7; -} diff --git a/sysdeps/ieee754/flt-32/k_sinf.c b/sysdeps/ieee754/flt-32/k_sinf.c deleted file mode 100644 index a195d59466..0000000000 --- a/sysdeps/ieee754/flt-32/k_sinf.c +++ /dev/null @@ -1,50 +0,0 @@ -/* k_sinf.c -- float version of k_sin.c - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: k_sinf.c,v 1.4 1995/05/10 20:46:33 jtc Exp $"; -#endif - -#include -#include -#include - -static const float -half = 5.0000000000e-01,/* 0x3f000000 */ -S1 = -1.6666667163e-01, /* 0xbe2aaaab */ -S2 = 8.3333337680e-03, /* 0x3c088889 */ -S3 = -1.9841270114e-04, /* 0xb9500d01 */ -S4 = 2.7557314297e-06, /* 0x3638ef1b */ -S5 = -2.5050759689e-08, /* 0xb2d72f34 */ -S6 = 1.5896910177e-10; /* 0x2f2ec9d3 */ - -float __kernel_sinf(float x, float y, int iy) -{ - float z,r,v; - int32_t ix; - GET_FLOAT_WORD(ix,x); - ix &= 0x7fffffff; /* high word of x */ - if(ix<0x32000000) /* |x| < 2**-27 */ - { - math_check_force_underflow (x); - if ((int) x == 0) - return x; /* generate inexact */ - } - z = x*x; - v = z*x; - r = S2+z*(S3+z*(S4+z*(S5+z*S6))); - if(iy==0) return x+v*(S1+z*r); - else return x-((z*(half*y-v*r)-y)-v*S1); -} diff --git a/sysdeps/ieee754/flt-32/k_tanf.c b/sysdeps/ieee754/flt-32/k_tanf.c deleted file mode 100644 index 9f0e55860f..0000000000 --- a/sysdeps/ieee754/flt-32/k_tanf.c +++ /dev/null @@ -1,101 +0,0 @@ -/* k_tanf.c -- float version of k_tan.c - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: k_tanf.c,v 1.4 1995/05/10 20:46:39 jtc Exp $"; -#endif - -#include -#include -#include -static const float -one = 1.0000000000e+00, /* 0x3f800000 */ -pio4 = 7.8539812565e-01, /* 0x3f490fda */ -pio4lo= 3.7748947079e-08, /* 0x33222168 */ -T[] = { - 3.3333334327e-01, /* 0x3eaaaaab */ - 1.3333334029e-01, /* 0x3e088889 */ - 5.3968254477e-02, /* 0x3d5d0dd1 */ - 2.1869488060e-02, /* 0x3cb327a4 */ - 8.8632395491e-03, /* 0x3c11371f */ - 3.5920790397e-03, /* 0x3b6b6916 */ - 1.4562094584e-03, /* 0x3abede48 */ - 5.8804126456e-04, /* 0x3a1a26c8 */ - 2.4646313977e-04, /* 0x398137b9 */ - 7.8179444245e-05, /* 0x38a3f445 */ - 7.1407252108e-05, /* 0x3895c07a */ - -1.8558637748e-05, /* 0xb79bae5f */ - 2.5907305826e-05, /* 0x37d95384 */ -}; - -float __kernel_tanf(float x, float y, int iy) -{ - float z,r,v,w,s; - int32_t ix,hx; - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; /* high word of |x| */ - if(ix<0x39000000) /* x < 2**-13 */ - {if((int)x==0) { /* generate inexact */ - if((ix|(iy+1))==0) return one/fabsf(x); - else if (iy == 1) - { - math_check_force_underflow (x); - return x; - } - else - return -one / x; - } - } - if(ix>=0x3f2ca140) { /* |x|>=0.6744 */ - if(hx<0) {x = -x; y = -y;} - z = pio4-x; - w = pio4lo-y; - x = z+w; y = 0.0; - if (fabsf (x) < 0x1p-13f) - return (1 - ((hx >> 30) & 2)) * iy * (1.0f - 2 * iy * x); - } - z = x*x; - w = z*z; - /* Break x^5*(T[1]+x^2*T[2]+...) into - * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) + - * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12])) - */ - r = T[1]+w*(T[3]+w*(T[5]+w*(T[7]+w*(T[9]+w*T[11])))); - v = z*(T[2]+w*(T[4]+w*(T[6]+w*(T[8]+w*(T[10]+w*T[12]))))); - s = z*x; - r = y + z*(s*(r+v)+y); - r += T[0]*s; - w = x+r; - if(ix>=0x3f2ca140) { - v = (float)iy; - return (float)(1-((hx>>30)&2))*(v-(float)2.0*(x-(w*w/(w+v)-r))); - } - if(iy==1) return w; - else { /* if allow error up to 2 ulp, - simply return -1.0/(x+r) here */ - /* compute -1.0/(x+r) accurately */ - float a,t; - int32_t i; - z = w; - GET_FLOAT_WORD(i,z); - SET_FLOAT_WORD(z,i&0xfffff000); - v = r-(z - x); /* z+v = r+x */ - t = a = -(float)1.0/w; /* a = -1.0/w */ - GET_FLOAT_WORD(i,t); - SET_FLOAT_WORD(t,i&0xfffff000); - s = (float)1.0+t*z; - return t+a*(s+t*v); - } -} diff --git a/sysdeps/ieee754/flt-32/lgamma_negf.c b/sysdeps/ieee754/flt-32/lgamma_negf.c deleted file mode 100644 index 71bcbb0f9d..0000000000 --- a/sysdeps/ieee754/flt-32/lgamma_negf.c +++ /dev/null @@ -1,280 +0,0 @@ -/* lgammaf expanding around zeros. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const float lgamma_zeros[][2] = - { - { -0x2.74ff94p+0f, 0x1.3fe0f2p-24f }, - { -0x2.bf682p+0f, -0x1.437b2p-24f }, - { -0x3.24c1b8p+0f, 0x6.c34cap-28f }, - { -0x3.f48e2cp+0f, 0x1.707a04p-24f }, - { -0x4.0a13ap+0f, 0x1.e99aap-24f }, - { -0x4.fdd5ep+0f, 0x1.64454p-24f }, - { -0x5.021a98p+0f, 0x2.03d248p-24f }, - { -0x5.ffa4cp+0f, 0x2.9b82fcp-24f }, - { -0x6.005ac8p+0f, -0x1.625f24p-24f }, - { -0x6.fff3p+0f, 0x2.251e44p-24f }, - { -0x7.000dp+0f, 0x8.48078p-28f }, - { -0x7.fffe6p+0f, 0x1.fa98c4p-28f }, - { -0x8.0001ap+0f, -0x1.459fcap-28f }, - { -0x8.ffffdp+0f, -0x1.c425e8p-24f }, - { -0x9.00003p+0f, 0x1.c44b82p-24f }, - { -0xap+0f, 0x4.9f942p-24f }, - { -0xap+0f, -0x4.9f93b8p-24f }, - { -0xbp+0f, 0x6.b9916p-28f }, - { -0xbp+0f, -0x6.b9915p-28f }, - { -0xcp+0f, 0x8.f76c8p-32f }, - { -0xcp+0f, -0x8.f76c7p-32f }, - { -0xdp+0f, 0xb.09231p-36f }, - { -0xdp+0f, -0xb.09231p-36f }, - { -0xep+0f, 0xc.9cba5p-40f }, - { -0xep+0f, -0xc.9cba5p-40f }, - { -0xfp+0f, 0xd.73f9fp-44f }, - }; - -static const float e_hi = 0x2.b7e15p+0f, e_lo = 0x1.628aeep-24f; - -/* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) in Stirling's - approximation to lgamma function. */ - -static const float lgamma_coeff[] = - { - 0x1.555556p-4f, - -0xb.60b61p-12f, - 0x3.403404p-12f, - }; - -#define NCOEFF (sizeof (lgamma_coeff) / sizeof (lgamma_coeff[0])) - -/* Polynomial approximations to (|gamma(x)|-1)(x-n)/(x-x0), where n is - the integer end-point of the half-integer interval containing x and - x0 is the zero of lgamma in that half-integer interval. Each - polynomial is expressed in terms of x-xm, where xm is the midpoint - of the interval for which the polynomial applies. */ - -static const float poly_coeff[] = - { - /* Interval [-2.125, -2] (polynomial degree 5). */ - -0x1.0b71c6p+0f, - -0xc.73a1ep-4f, - -0x1.ec8462p-4f, - -0xe.37b93p-4f, - -0x1.02ed36p-4f, - -0xe.cbe26p-4f, - /* Interval [-2.25, -2.125] (polynomial degree 5). */ - -0xf.29309p-4f, - -0xc.a5cfep-4f, - 0x3.9c93fcp-4f, - -0x1.02a2fp+0f, - 0x9.896bep-4f, - -0x1.519704p+0f, - /* Interval [-2.375, -2.25] (polynomial degree 5). */ - -0xd.7d28dp-4f, - -0xe.6964cp-4f, - 0xb.0d4f1p-4f, - -0x1.9240aep+0f, - 0x1.dadabap+0f, - -0x3.1778c4p+0f, - /* Interval [-2.5, -2.375] (polynomial degree 6). */ - -0xb.74ea2p-4f, - -0x1.2a82cp+0f, - 0x1.880234p+0f, - -0x3.320c4p+0f, - 0x5.572a38p+0f, - -0x9.f92bap+0f, - 0x1.1c347ep+4f, - /* Interval [-2.625, -2.5] (polynomial degree 6). */ - -0x3.d10108p-4f, - 0x1.cd5584p+0f, - 0x3.819c24p+0f, - 0x6.84cbb8p+0f, - 0xb.bf269p+0f, - 0x1.57fb12p+4f, - 0x2.7b9854p+4f, - /* Interval [-2.75, -2.625] (polynomial degree 6). */ - -0x6.b5d25p-4f, - 0x1.28d604p+0f, - 0x1.db6526p+0f, - 0x2.e20b38p+0f, - 0x4.44c378p+0f, - 0x6.62a08p+0f, - 0x9.6db3ap+0f, - /* Interval [-2.875, -2.75] (polynomial degree 5). */ - -0x8.a41b2p-4f, - 0xc.da87fp-4f, - 0x1.147312p+0f, - 0x1.7617dap+0f, - 0x1.d6c13p+0f, - 0x2.57a358p+0f, - /* Interval [-3, -2.875] (polynomial degree 5). */ - -0xa.046d6p-4f, - 0x9.70b89p-4f, - 0xa.a89a6p-4f, - 0xd.2f2d8p-4f, - 0xd.e32b4p-4f, - 0xf.fb741p-4f, - }; - -static const size_t poly_deg[] = - { - 5, - 5, - 5, - 6, - 6, - 6, - 5, - 5, - }; - -static const size_t poly_end[] = - { - 5, - 11, - 17, - 24, - 31, - 38, - 44, - 50, - }; - -/* Compute sin (pi * X) for -0.25 <= X <= 0.5. */ - -static float -lg_sinpi (float x) -{ - if (x <= 0.25f) - return __sinf ((float) M_PI * x); - else - return __cosf ((float) M_PI * (0.5f - x)); -} - -/* Compute cos (pi * X) for -0.25 <= X <= 0.5. */ - -static float -lg_cospi (float x) -{ - if (x <= 0.25f) - return __cosf ((float) M_PI * x); - else - return __sinf ((float) M_PI * (0.5f - x)); -} - -/* Compute cot (pi * X) for -0.25 <= X <= 0.5. */ - -static float -lg_cotpi (float x) -{ - return lg_cospi (x) / lg_sinpi (x); -} - -/* Compute lgamma of a negative argument -15 < X < -2, setting - *SIGNGAMP accordingly. */ - -float -__lgamma_negf (float x, int *signgamp) -{ - /* Determine the half-integer region X lies in, handle exact - integers and determine the sign of the result. */ - int i = __floorf (-2 * x); - if ((i & 1) == 0 && i == -2 * x) - return 1.0f / 0.0f; - float xn = ((i & 1) == 0 ? -i / 2 : (-i - 1) / 2); - i -= 4; - *signgamp = ((i & 2) == 0 ? -1 : 1); - - SET_RESTORE_ROUNDF (FE_TONEAREST); - - /* Expand around the zero X0 = X0_HI + X0_LO. */ - float x0_hi = lgamma_zeros[i][0], x0_lo = lgamma_zeros[i][1]; - float xdiff = x - x0_hi - x0_lo; - - /* For arguments in the range -3 to -2, use polynomial - approximations to an adjusted version of the gamma function. */ - if (i < 2) - { - int j = __floorf (-8 * x) - 16; - float xm = (-33 - 2 * j) * 0.0625f; - float x_adj = x - xm; - size_t deg = poly_deg[j]; - size_t end = poly_end[j]; - float g = poly_coeff[end]; - for (size_t j = 1; j <= deg; j++) - g = g * x_adj + poly_coeff[end - j]; - return __log1pf (g * xdiff / (x - xn)); - } - - /* The result we want is log (sinpi (X0) / sinpi (X)) - + log (gamma (1 - X0) / gamma (1 - X)). */ - float x_idiff = fabsf (xn - x), x0_idiff = fabsf (xn - x0_hi - x0_lo); - float log_sinpi_ratio; - if (x0_idiff < x_idiff * 0.5f) - /* Use log not log1p to avoid inaccuracy from log1p of arguments - close to -1. */ - log_sinpi_ratio = __ieee754_logf (lg_sinpi (x0_idiff) - / lg_sinpi (x_idiff)); - else - { - /* Use log1p not log to avoid inaccuracy from log of arguments - close to 1. X0DIFF2 has positive sign if X0 is further from - XN than X is from XN, negative sign otherwise. */ - float x0diff2 = ((i & 1) == 0 ? xdiff : -xdiff) * 0.5f; - float sx0d2 = lg_sinpi (x0diff2); - float cx0d2 = lg_cospi (x0diff2); - log_sinpi_ratio = __log1pf (2 * sx0d2 - * (-sx0d2 + cx0d2 * lg_cotpi (x_idiff))); - } - - float log_gamma_ratio; - float y0 = math_narrow_eval (1 - x0_hi); - float y0_eps = -x0_hi + (1 - y0) - x0_lo; - float y = math_narrow_eval (1 - x); - float y_eps = -x + (1 - y); - /* We now wish to compute LOG_GAMMA_RATIO - = log (gamma (Y0 + Y0_EPS) / gamma (Y + Y_EPS)). XDIFF - accurately approximates the difference Y0 + Y0_EPS - Y - - Y_EPS. Use Stirling's approximation. */ - float log_gamma_high - = (xdiff * __log1pf ((y0 - e_hi - e_lo + y0_eps) / e_hi) - + (y - 0.5f + y_eps) * __log1pf (xdiff / y)); - /* Compute the sum of (B_2k / 2k(2k-1))(Y0^-(2k-1) - Y^-(2k-1)). */ - float y0r = 1 / y0, yr = 1 / y; - float y0r2 = y0r * y0r, yr2 = yr * yr; - float rdiff = -xdiff / (y * y0); - float bterm[NCOEFF]; - float dlast = rdiff, elast = rdiff * yr * (yr + y0r); - bterm[0] = dlast * lgamma_coeff[0]; - for (size_t j = 1; j < NCOEFF; j++) - { - float dnext = dlast * y0r2 + elast; - float enext = elast * yr2; - bterm[j] = dnext * lgamma_coeff[j]; - dlast = dnext; - elast = enext; - } - float log_gamma_low = 0; - for (size_t j = 0; j < NCOEFF; j++) - log_gamma_low += bterm[NCOEFF - 1 - j]; - log_gamma_ratio = log_gamma_high + log_gamma_low; - - return log_sinpi_ratio + log_gamma_ratio; -} diff --git a/sysdeps/ieee754/flt-32/lgamma_productf.c b/sysdeps/ieee754/flt-32/lgamma_productf.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/ieee754/flt-32/lgamma_productf.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/ieee754/flt-32/mpn2flt.c b/sysdeps/ieee754/flt-32/mpn2flt.c deleted file mode 100644 index abf6510f4e..0000000000 --- a/sysdeps/ieee754/flt-32/mpn2flt.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "gmp.h" -#include "gmp-impl.h" -#include -#include - -/* Convert a multi-precision integer of the needed number of bits (24 for - float) and an integral power of two to a `float' in IEEE754 single- - precision format. */ - -float -__mpn_construct_float (mp_srcptr frac_ptr, int expt, int sign) -{ - union ieee754_float u; - - u.ieee.negative = sign; - u.ieee.exponent = expt + IEEE754_FLOAT_BIAS; -#if BITS_PER_MP_LIMB > FLT_MANT_DIG - u.ieee.mantissa = frac_ptr[0] & (((mp_limb_t) 1 << FLT_MANT_DIG) - 1); -#else - #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" -#endif - - return u.f; -} diff --git a/sysdeps/ieee754/flt-32/s_asinhf.c b/sysdeps/ieee754/flt-32/s_asinhf.c deleted file mode 100644 index da9cafb600..0000000000 --- a/sysdeps/ieee754/flt-32/s_asinhf.c +++ /dev/null @@ -1,50 +0,0 @@ -/* s_asinhf.c -- float version of s_asinh.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include -#include - -static const float -one = 1.0000000000e+00, /* 0x3F800000 */ -ln2 = 6.9314718246e-01, /* 0x3f317218 */ -huge= 1.0000000000e+30; - -float -__asinhf(float x) -{ - float w; - int32_t hx,ix; - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - if(__builtin_expect(ix< 0x38000000, 0)) { /* |x|<2**-14 */ - math_check_force_underflow (x); - if(huge+x>one) return x; /* return x inexact except 0 */ - } - if(__builtin_expect(ix>0x47000000, 0)) { /* |x| > 2**14 */ - if(ix>=0x7f800000) return x+x; /* x is inf or NaN */ - w = __ieee754_logf(fabsf(x))+ln2; - } else { - float xa = fabsf(x); - if (ix>0x40000000) { /* 2**14 > |x| > 2.0 */ - w = __ieee754_logf(2.0f*xa+one/(__ieee754_sqrtf(xa*xa+one)+xa)); - } else { /* 2.0 > |x| > 2**-14 */ - float t = xa*xa; - w =__log1pf(xa+t/(one+__ieee754_sqrtf(one+t))); - } - } - return __copysignf(w, x); -} -weak_alias (__asinhf, asinhf) diff --git a/sysdeps/ieee754/flt-32/s_atanf.c b/sysdeps/ieee754/flt-32/s_atanf.c deleted file mode 100644 index e322a1d41f..0000000000 --- a/sysdeps/ieee754/flt-32/s_atanf.c +++ /dev/null @@ -1,101 +0,0 @@ -/* s_atanf.c -- float version of s_atan.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_atanf.c,v 1.4 1995/05/10 20:46:47 jtc Exp $"; -#endif - -#include -#include -#include - -static const float atanhi[] = { - 4.6364760399e-01, /* atan(0.5)hi 0x3eed6338 */ - 7.8539812565e-01, /* atan(1.0)hi 0x3f490fda */ - 9.8279368877e-01, /* atan(1.5)hi 0x3f7b985e */ - 1.5707962513e+00, /* atan(inf)hi 0x3fc90fda */ -}; - -static const float atanlo[] = { - 5.0121582440e-09, /* atan(0.5)lo 0x31ac3769 */ - 3.7748947079e-08, /* atan(1.0)lo 0x33222168 */ - 3.4473217170e-08, /* atan(1.5)lo 0x33140fb4 */ - 7.5497894159e-08, /* atan(inf)lo 0x33a22168 */ -}; - -static const float aT[] = { - 3.3333334327e-01, /* 0x3eaaaaaa */ - -2.0000000298e-01, /* 0xbe4ccccd */ - 1.4285714924e-01, /* 0x3e124925 */ - -1.1111110449e-01, /* 0xbde38e38 */ - 9.0908870101e-02, /* 0x3dba2e6e */ - -7.6918758452e-02, /* 0xbd9d8795 */ - 6.6610731184e-02, /* 0x3d886b35 */ - -5.8335702866e-02, /* 0xbd6ef16b */ - 4.9768779427e-02, /* 0x3d4bda59 */ - -3.6531571299e-02, /* 0xbd15a221 */ - 1.6285819933e-02, /* 0x3c8569d7 */ -}; - -static const float -one = 1.0, -huge = 1.0e30; - -float __atanf(float x) -{ - float w,s1,s2,z; - int32_t ix,hx,id; - - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix>=0x4c000000) { /* if |x| >= 2^25 */ - if(ix>0x7f800000) - return x+x; /* NaN */ - if(hx>0) return atanhi[3]+atanlo[3]; - else return -atanhi[3]-atanlo[3]; - } if (ix < 0x3ee00000) { /* |x| < 0.4375 */ - if (ix < 0x31000000) { /* |x| < 2^-29 */ - math_check_force_underflow (x); - if(huge+x>one) return x; /* raise inexact */ - } - id = -1; - } else { - x = fabsf(x); - if (ix < 0x3f980000) { /* |x| < 1.1875 */ - if (ix < 0x3f300000) { /* 7/16 <=|x|<11/16 */ - id = 0; x = ((float)2.0*x-one)/((float)2.0+x); - } else { /* 11/16<=|x|< 19/16 */ - id = 1; x = (x-one)/(x+one); - } - } else { - if (ix < 0x401c0000) { /* |x| < 2.4375 */ - id = 2; x = (x-(float)1.5)/(one+(float)1.5*x); - } else { /* 2.4375 <= |x| < 2^66 */ - id = 3; x = -(float)1.0/x; - } - }} - /* end of argument reduction */ - z = x*x; - w = z*z; - /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */ - s1 = z*(aT[0]+w*(aT[2]+w*(aT[4]+w*(aT[6]+w*(aT[8]+w*aT[10]))))); - s2 = w*(aT[1]+w*(aT[3]+w*(aT[5]+w*(aT[7]+w*aT[9])))); - if (id<0) return x - x*(s1+s2); - else { - z = atanhi[id] - ((x*(s1+s2) - atanlo[id]) - x); - return (hx<0)? -z:z; - } -} -weak_alias (__atanf, atanf) diff --git a/sysdeps/ieee754/flt-32/s_cbrtf.c b/sysdeps/ieee754/flt-32/s_cbrtf.c deleted file mode 100644 index 1ac294c189..0000000000 --- a/sysdeps/ieee754/flt-32/s_cbrtf.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Compute cubic root of float value. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Dirk Alboth and - Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -#define CBRT2 1.2599210498948731648 /* 2^(1/3) */ -#define SQR_CBRT2 1.5874010519681994748 /* 2^(2/3) */ - -static const double factor[5] = -{ - 1.0 / SQR_CBRT2, - 1.0 / CBRT2, - 1.0, - CBRT2, - SQR_CBRT2 -}; - - -float -__cbrtf (float x) -{ - float xm, ym, u, t2; - int xe; - - /* Reduce X. XM now is an range 1.0 to 0.5. */ - xm = __frexpf (fabsf (x), &xe); - - /* If X is not finite or is null return it (with raising exceptions - if necessary. - Note: *Our* version of `frexp' sets XE to zero if the argument is - Inf or NaN. This is not portable but faster. */ - if (xe == 0 && fpclassify (x) <= FP_ZERO) - return x + x; - - u = (0.492659620528969547 + (0.697570460207922770 - - 0.191502161678719066 * xm) * xm); - - t2 = u * u * u; - - ym = u * (t2 + 2.0 * xm) / (2.0 * t2 + xm) * factor[2 + xe % 3]; - - return __ldexpf (x > 0.0 ? ym : -ym, xe / 3); -} -weak_alias (__cbrtf, cbrtf) diff --git a/sysdeps/ieee754/flt-32/s_ceilf.c b/sysdeps/ieee754/flt-32/s_ceilf.c deleted file mode 100644 index bff26c33cb..0000000000 --- a/sysdeps/ieee754/flt-32/s_ceilf.c +++ /dev/null @@ -1,48 +0,0 @@ -/* s_ceilf.c -- float version of s_ceil.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include - - -float -__ceilf(float x) -{ - int32_t i0,j0; - u_int32_t i; - - GET_FLOAT_WORD(i0,x); - j0 = ((i0>>23)&0xff)-0x7f; - if(j0<23) { - if(j0<0) { - /* return 0*sign(x) if |x|<1 */ - if(i0<0) {i0=0x80000000;} - else if(i0!=0) { i0=0x3f800000;} - } else { - i = (0x007fffff)>>j0; - if((i0&i)==0) return x; /* x is integral */ - if(i0>0) i0 += (0x00800000)>>j0; - i0 &= (~i); - } - } else { - if(__builtin_expect(j0==0x80, 0)) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } - SET_FLOAT_WORD(x,i0); - return x; -} -#ifndef __ceilf -weak_alias (__ceilf, ceilf) -#endif diff --git a/sysdeps/ieee754/flt-32/s_copysignf.c b/sysdeps/ieee754/flt-32/s_copysignf.c deleted file mode 100644 index 1621836065..0000000000 --- a/sysdeps/ieee754/flt-32/s_copysignf.c +++ /dev/null @@ -1,37 +0,0 @@ -/* s_copysignf.c -- float version of s_copysign.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_copysignf.c,v 1.4 1995/05/10 20:46:59 jtc Exp $"; -#endif - -/* - * copysignf(float x, float y) - * copysignf(x,y) returns a value with the magnitude of x and - * with the sign bit of y. - */ - -#include -#include - -float __copysignf(float x, float y) -{ - u_int32_t ix,iy; - GET_FLOAT_WORD(ix,x); - GET_FLOAT_WORD(iy,y); - SET_FLOAT_WORD(x,(ix&0x7fffffff)|(iy&0x80000000)); - return x; -} -weak_alias (__copysignf, copysignf) diff --git a/sysdeps/ieee754/flt-32/s_cosf.c b/sysdeps/ieee754/flt-32/s_cosf.c deleted file mode 100644 index 0affd406bb..0000000000 --- a/sysdeps/ieee754/flt-32/s_cosf.c +++ /dev/null @@ -1,63 +0,0 @@ -/* s_cosf.c -- float version of s_cos.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_cosf.c,v 1.4 1995/05/10 20:47:03 jtc Exp $"; -#endif - -#include -#include -#include - -#ifndef COSF -# define COSF_FUNC __cosf -#else -# define COSF_FUNC COSF -#endif - -float COSF_FUNC(float x) -{ - float y[2],z=0.0; - int32_t n,ix; - - GET_FLOAT_WORD(ix,x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffff; - if(ix <= 0x3f490fd8) return __kernel_cosf(x,z); - - /* cos(Inf or NaN) is NaN */ - else if (ix>=0x7f800000) { - if (ix == 0x7f800000) - __set_errno (EDOM); - return x-x; - } - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2f(x,y); - switch(n&3) { - case 0: return __kernel_cosf(y[0],y[1]); - case 1: return -__kernel_sinf(y[0],y[1],1); - case 2: return -__kernel_cosf(y[0],y[1]); - default: - return __kernel_sinf(y[0],y[1],1); - } - } -} - -#ifndef COSF -weak_alias (__cosf, cosf) -#endif diff --git a/sysdeps/ieee754/flt-32/s_erff.c b/sysdeps/ieee754/flt-32/s_erff.c deleted file mode 100644 index c8b6287503..0000000000 --- a/sysdeps/ieee754/flt-32/s_erff.c +++ /dev/null @@ -1,230 +0,0 @@ -/* s_erff.c -- float version of s_erf.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_erff.c,v 1.4 1995/05/10 20:47:07 jtc Exp $"; -#endif - -#include -#include -#include -#include -#include - -static const float -tiny = 1e-30, -half= 5.0000000000e-01, /* 0x3F000000 */ -one = 1.0000000000e+00, /* 0x3F800000 */ -two = 2.0000000000e+00, /* 0x40000000 */ - /* c = (subfloat)0.84506291151 */ -erx = 8.4506291151e-01, /* 0x3f58560b */ -/* - * Coefficients for approximation to erf on [0,0.84375] - */ -efx = 1.2837916613e-01, /* 0x3e0375d4 */ -pp0 = 1.2837916613e-01, /* 0x3e0375d4 */ -pp1 = -3.2504209876e-01, /* 0xbea66beb */ -pp2 = -2.8481749818e-02, /* 0xbce9528f */ -pp3 = -5.7702702470e-03, /* 0xbbbd1489 */ -pp4 = -2.3763017452e-05, /* 0xb7c756b1 */ -qq1 = 3.9791721106e-01, /* 0x3ecbbbce */ -qq2 = 6.5022252500e-02, /* 0x3d852a63 */ -qq3 = 5.0813062117e-03, /* 0x3ba68116 */ -qq4 = 1.3249473704e-04, /* 0x390aee49 */ -qq5 = -3.9602282413e-06, /* 0xb684e21a */ -/* - * Coefficients for approximation to erf in [0.84375,1.25] - */ -pa0 = -2.3621185683e-03, /* 0xbb1acdc6 */ -pa1 = 4.1485610604e-01, /* 0x3ed46805 */ -pa2 = -3.7220788002e-01, /* 0xbebe9208 */ -pa3 = 3.1834661961e-01, /* 0x3ea2fe54 */ -pa4 = -1.1089469492e-01, /* 0xbde31cc2 */ -pa5 = 3.5478305072e-02, /* 0x3d1151b3 */ -pa6 = -2.1663755178e-03, /* 0xbb0df9c0 */ -qa1 = 1.0642088205e-01, /* 0x3dd9f331 */ -qa2 = 5.4039794207e-01, /* 0x3f0a5785 */ -qa3 = 7.1828655899e-02, /* 0x3d931ae7 */ -qa4 = 1.2617121637e-01, /* 0x3e013307 */ -qa5 = 1.3637083583e-02, /* 0x3c5f6e13 */ -qa6 = 1.1984500103e-02, /* 0x3c445aa3 */ -/* - * Coefficients for approximation to erfc in [1.25,1/0.35] - */ -ra0 = -9.8649440333e-03, /* 0xbc21a093 */ -ra1 = -6.9385856390e-01, /* 0xbf31a0b7 */ -ra2 = -1.0558626175e+01, /* 0xc128f022 */ -ra3 = -6.2375331879e+01, /* 0xc2798057 */ -ra4 = -1.6239666748e+02, /* 0xc322658c */ -ra5 = -1.8460508728e+02, /* 0xc3389ae7 */ -ra6 = -8.1287437439e+01, /* 0xc2a2932b */ -ra7 = -9.8143291473e+00, /* 0xc11d077e */ -sa1 = 1.9651271820e+01, /* 0x419d35ce */ -sa2 = 1.3765776062e+02, /* 0x4309a863 */ -sa3 = 4.3456588745e+02, /* 0x43d9486f */ -sa4 = 6.4538726807e+02, /* 0x442158c9 */ -sa5 = 4.2900814819e+02, /* 0x43d6810b */ -sa6 = 1.0863500214e+02, /* 0x42d9451f */ -sa7 = 6.5702495575e+00, /* 0x40d23f7c */ -sa8 = -6.0424413532e-02, /* 0xbd777f97 */ -/* - * Coefficients for approximation to erfc in [1/.35,28] - */ -rb0 = -9.8649431020e-03, /* 0xbc21a092 */ -rb1 = -7.9928326607e-01, /* 0xbf4c9dd4 */ -rb2 = -1.7757955551e+01, /* 0xc18e104b */ -rb3 = -1.6063638306e+02, /* 0xc320a2ea */ -rb4 = -6.3756646729e+02, /* 0xc41f6441 */ -rb5 = -1.0250950928e+03, /* 0xc480230b */ -rb6 = -4.8351919556e+02, /* 0xc3f1c275 */ -sb1 = 3.0338060379e+01, /* 0x41f2b459 */ -sb2 = 3.2579251099e+02, /* 0x43a2e571 */ -sb3 = 1.5367296143e+03, /* 0x44c01759 */ -sb4 = 3.1998581543e+03, /* 0x4547fdbb */ -sb5 = 2.5530502930e+03, /* 0x451f90ce */ -sb6 = 4.7452853394e+02, /* 0x43ed43a7 */ -sb7 = -2.2440952301e+01; /* 0xc1b38712 */ - -float __erff(float x) -{ - int32_t hx,ix,i; - float R,S,P,Q,s,y,z,r; - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix>=0x7f800000) { /* erf(nan)=nan */ - i = ((u_int32_t)hx>>31)<<1; - return (float)(1-i)+one/x; /* erf(+-inf)=+-1 */ - } - - if(ix < 0x3f580000) { /* |x|<0.84375 */ - if(ix < 0x31800000) { /* |x|<2**-28 */ - if (ix < 0x04000000) - { - /* Avoid spurious underflow. */ - float ret = 0.0625f * (16.0f * x + (16.0f * efx) * x); - math_check_force_underflow (ret); - return ret; - } - return x + efx*x; - } - z = x*x; - r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4))); - s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5)))); - y = r/s; - return x + x*y; - } - if(ix < 0x3fa00000) { /* 0.84375 <= |x| < 1.25 */ - s = fabsf(x)-one; - P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6))))); - Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6))))); - if(hx>=0) return erx + P/Q; else return -erx - P/Q; - } - if (ix >= 0x40c00000) { /* inf>|x|>=6 */ - if(hx>=0) return one-tiny; else return tiny-one; - } - x = fabsf(x); - s = one/(x*x); - if(ix< 0x4036DB6E) { /* |x| < 1/0.35 */ - R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*( - ra5+s*(ra6+s*ra7)))))); - S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*( - sa5+s*(sa6+s*(sa7+s*sa8))))))); - } else { /* |x| >= 1/0.35 */ - R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*( - rb5+s*rb6))))); - S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*( - sb5+s*(sb6+s*sb7)))))); - } - GET_FLOAT_WORD(ix,x); - SET_FLOAT_WORD(z,ix&0xfffff000); - r = __ieee754_expf(-z*z-(float)0.5625)*__ieee754_expf((z-x)*(z+x)+R/S); - if(hx>=0) return one-r/x; else return r/x-one; -} -weak_alias (__erff, erff) - -float __erfcf(float x) -{ - int32_t hx,ix; - float R,S,P,Q,s,y,z,r; - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - if(ix>=0x7f800000) { /* erfc(nan)=nan */ - /* erfc(+-inf)=0,2 */ - float ret = (float)(((u_int32_t)hx>>31)<<1)+one/x; - if (FIX_INT_FP_CONVERT_ZERO && ret == 0.0f) - return 0.0f; - return ret; - } - - if(ix < 0x3f580000) { /* |x|<0.84375 */ - if(ix < 0x32800000) /* |x|<2**-26 */ - return one-x; - z = x*x; - r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4))); - s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5)))); - y = r/s; - if(hx < 0x3e800000) { /* x<1/4 */ - return one-(x+x*y); - } else { - r = x*y; - r += (x-half); - return half - r ; - } - } - if(ix < 0x3fa00000) { /* 0.84375 <= |x| < 1.25 */ - s = fabsf(x)-one; - P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6))))); - Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6))))); - if(hx>=0) { - z = one-erx; return z - P/Q; - } else { - z = erx+P/Q; return one+z; - } - } - if (ix < 0x41e00000) { /* |x|<28 */ - x = fabsf(x); - s = one/(x*x); - if(ix< 0x4036DB6D) { /* |x| < 1/.35 ~ 2.857143*/ - R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*( - ra5+s*(ra6+s*ra7)))))); - S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*( - sa5+s*(sa6+s*(sa7+s*sa8))))))); - } else { /* |x| >= 1/.35 ~ 2.857143 */ - if(hx<0&&ix>=0x40c00000) return two-tiny;/* x < -6 */ - R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*( - rb5+s*rb6))))); - S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*( - sb5+s*(sb6+s*sb7)))))); - } - GET_FLOAT_WORD(ix,x); - SET_FLOAT_WORD(z,ix&0xffffe000); - r = __ieee754_expf(-z*z-(float)0.5625)* - __ieee754_expf((z-x)*(z+x)+R/S); - if(hx>0) { - float ret = math_narrow_eval (r/x); - if (ret == 0) - __set_errno (ERANGE); - return ret; - } else - return two-r/x; - } else { - if(hx>0) { - __set_errno (ERANGE); - return tiny*tiny; - } else - return two-tiny; - } -} -weak_alias (__erfcf, erfcf) diff --git a/sysdeps/ieee754/flt-32/s_expm1f.c b/sysdeps/ieee754/flt-32/s_expm1f.c deleted file mode 100644 index c515d25e28..0000000000 --- a/sysdeps/ieee754/flt-32/s_expm1f.c +++ /dev/null @@ -1,130 +0,0 @@ -/* s_expm1f.c -- float version of s_expm1.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include -#include -#include - -static const float huge = 1.0e+30; -static const float tiny = 1.0e-30; - -static const float -one = 1.0, -o_threshold = 8.8721679688e+01,/* 0x42b17180 */ -ln2_hi = 6.9313812256e-01,/* 0x3f317180 */ -ln2_lo = 9.0580006145e-06,/* 0x3717f7d1 */ -invln2 = 1.4426950216e+00,/* 0x3fb8aa3b */ - /* scaled coefficients related to expm1 */ -Q1 = -3.3333335072e-02, /* 0xbd088889 */ -Q2 = 1.5873016091e-03, /* 0x3ad00d01 */ -Q3 = -7.9365076090e-05, /* 0xb8a670cd */ -Q4 = 4.0082177293e-06, /* 0x36867e54 */ -Q5 = -2.0109921195e-07; /* 0xb457edbb */ - -float -__expm1f(float x) -{ - float y,hi,lo,c,t,e,hxs,hfx,r1; - int32_t k,xsb; - u_int32_t hx; - - GET_FLOAT_WORD(hx,x); - xsb = hx&0x80000000; /* sign bit of x */ - if(xsb==0) y=x; else y= -x; /* y = |x| */ - hx &= 0x7fffffff; /* high word of |x| */ - - /* filter out huge and non-finite argument */ - if(hx >= 0x4195b844) { /* if |x|>=27*ln2 */ - if(hx >= 0x42b17218) { /* if |x|>=88.721... */ - if(hx>0x7f800000) - return x+x; /* NaN */ - if(hx==0x7f800000) - return (xsb==0)? x:-1.0;/* exp(+-inf)={inf,-1} */ - if(x > o_threshold) { - __set_errno (ERANGE); - return huge*huge; /* overflow */ - } - } - if(xsb!=0) { /* x < -27*ln2, return -1.0 with inexact */ - math_force_eval(x+tiny);/* raise inexact */ - return tiny-one; /* return -1 */ - } - } - - /* argument reduction */ - if(hx > 0x3eb17218) { /* if |x| > 0.5 ln2 */ - if(hx < 0x3F851592) { /* and |x| < 1.5 ln2 */ - if(xsb==0) - {hi = x - ln2_hi; lo = ln2_lo; k = 1;} - else - {hi = x + ln2_hi; lo = -ln2_lo; k = -1;} - } else { - k = invln2*x+((xsb==0)?(float)0.5:(float)-0.5); - t = k; - hi = x - t*ln2_hi; /* t*ln2_hi is exact here */ - lo = t*ln2_lo; - } - x = hi - lo; - c = (hi-x)-lo; - } - else if(hx < 0x33000000) { /* when |x|<2**-25, return x */ - math_check_force_underflow (x); - t = huge+x; /* return x with inexact flags when x!=0 */ - return x - (t-(huge+x)); - } - else k = 0; - - /* x is now in primary range */ - hfx = (float)0.5*x; - hxs = x*hfx; - r1 = one+hxs*(Q1+hxs*(Q2+hxs*(Q3+hxs*(Q4+hxs*Q5)))); - t = (float)3.0-r1*hfx; - e = hxs*((r1-t)/((float)6.0 - x*t)); - if(k==0) return x - (x*e-hxs); /* c is 0 */ - else { - e = (x*(e-c)-c); - e -= hxs; - if(k== -1) return (float)0.5*(x-e)-(float)0.5; - if(k==1) { - if(x < (float)-0.25) return -(float)2.0*(e-(x+(float)0.5)); - else return one+(float)2.0*(x-e); - } - if (k <= -2 || k>56) { /* suffice to return exp(x)-1 */ - int32_t i; - y = one-(e-x); - GET_FLOAT_WORD(i,y); - SET_FLOAT_WORD(y,i+(k<<23)); /* add k to y's exponent */ - return y-one; - } - t = one; - if(k<23) { - int32_t i; - SET_FLOAT_WORD(t,0x3f800000 - (0x1000000>>k)); /* t=1-2^-k */ - y = t-(e-x); - GET_FLOAT_WORD(i,y); - SET_FLOAT_WORD(y,i+(k<<23)); /* add k to y's exponent */ - } else { - int32_t i; - SET_FLOAT_WORD(t,((0x7f-k)<<23)); /* 2^-k */ - y = x-(e+t); - y += one; - GET_FLOAT_WORD(i,y); - SET_FLOAT_WORD(y,i+(k<<23)); /* add k to y's exponent */ - } - } - return y; -} -weak_alias (__expm1f, expm1f) diff --git a/sysdeps/ieee754/flt-32/s_fabsf.c b/sysdeps/ieee754/flt-32/s_fabsf.c deleted file mode 100644 index 297abe64bd..0000000000 --- a/sysdeps/ieee754/flt-32/s_fabsf.c +++ /dev/null @@ -1,30 +0,0 @@ -/* s_fabsf.c -- float version of s_fabs.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_fabsf.c,v 1.4 1995/05/10 20:47:15 jtc Exp $"; -#endif - -/* - * fabsf(x) returns the absolute value of x. - */ - -#include - -float __fabsf(float x) -{ - return __builtin_fabsf (x); -} -weak_alias (__fabsf, fabsf) diff --git a/sysdeps/ieee754/flt-32/s_finitef.c b/sysdeps/ieee754/flt-32/s_finitef.c deleted file mode 100644 index 4c5b339235..0000000000 --- a/sysdeps/ieee754/flt-32/s_finitef.c +++ /dev/null @@ -1,41 +0,0 @@ -/* s_finitef.c -- float version of s_finite.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_finitef.c,v 1.4 1995/05/10 20:47:18 jtc Exp $"; -#endif - -/* - * finitef(x) returns 1 is x is finite, else 0; - * no branching! - */ - -#include -#include - -#undef __finitef - -#ifndef FINITEF -# define FINITEF __finitef -#endif - -int FINITEF(float x) -{ - int32_t ix; - GET_FLOAT_WORD(ix,x); - return (int)((u_int32_t)((ix&0x7f800000)-0x7f800000)>>31); -} -hidden_def (__finitef) -weak_alias (__finitef, finitef) diff --git a/sysdeps/ieee754/flt-32/s_floorf.c b/sysdeps/ieee754/flt-32/s_floorf.c deleted file mode 100644 index 69160e5e10..0000000000 --- a/sysdeps/ieee754/flt-32/s_floorf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* s_floorf.c -- float version of s_floor.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * floorf(x) - * Return x rounded toward -inf to integral value - * Method: - * Bit twiddling. - */ - -#include -#include - -float -__floorf(float x) -{ - int32_t i0,j0; - u_int32_t i; - GET_FLOAT_WORD(i0,x); - j0 = ((i0>>23)&0xff)-0x7f; - if(j0<23) { - if(j0<0) { - /* return 0*sign(x) if |x|<1 */ - if(i0>=0) {i0=0;} - else if((i0&0x7fffffff)!=0) - { i0=0xbf800000;} - } else { - i = (0x007fffff)>>j0; - if((i0&i)==0) return x; /* x is integral */ - if(i0<0) i0 += (0x00800000)>>j0; - i0 &= (~i); - } - } else { - if(__builtin_expect(j0==0x80, 0)) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } - SET_FLOAT_WORD(x,i0); - return x; -} -#ifndef __floorf -weak_alias (__floorf, floorf) -#endif diff --git a/sysdeps/ieee754/flt-32/s_fpclassifyf.c b/sysdeps/ieee754/flt-32/s_fpclassifyf.c deleted file mode 100644 index 8a67c6fc0e..0000000000 --- a/sysdeps/ieee754/flt-32/s_fpclassifyf.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Return classification value corresponding to argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -int -__fpclassifyf (float x) -{ - u_int32_t wx; - int retval = FP_NORMAL; - - GET_FLOAT_WORD (wx, x); - wx &= 0x7fffffff; - if (wx == 0) - retval = FP_ZERO; - else if (wx < 0x800000) - retval = FP_SUBNORMAL; - else if (wx >= 0x7f800000) - retval = wx > 0x7f800000 ? FP_NAN : FP_INFINITE; - - return retval; -} -libm_hidden_def (__fpclassifyf) diff --git a/sysdeps/ieee754/flt-32/s_frexpf.c b/sysdeps/ieee754/flt-32/s_frexpf.c deleted file mode 100644 index 005367cf58..0000000000 --- a/sysdeps/ieee754/flt-32/s_frexpf.c +++ /dev/null @@ -1,44 +0,0 @@ -/* s_frexpf.c -- float version of s_frexp.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_frexpf.c,v 1.5 1995/05/10 20:47:26 jtc Exp $"; -#endif - -#include -#include - -static const float -two25 = 3.3554432000e+07; /* 0x4c000000 */ - -float __frexpf(float x, int *eptr) -{ - int32_t hx,ix; - GET_FLOAT_WORD(hx,x); - ix = 0x7fffffff&hx; - *eptr = 0; - if(ix>=0x7f800000||(ix==0)) return x + x; /* 0,inf,nan */ - if (ix<0x00800000) { /* subnormal */ - x *= two25; - GET_FLOAT_WORD(hx,x); - ix = hx&0x7fffffff; - *eptr = -25; - } - *eptr += (ix>>23)-126; - hx = (hx&0x807fffff)|0x3f000000; - SET_FLOAT_WORD(x,hx); - return x; -} -weak_alias (__frexpf, frexpf) diff --git a/sysdeps/ieee754/flt-32/s_fromfpf.c b/sysdeps/ieee754/flt-32/s_fromfpf.c deleted file mode 100644 index 68d4c80a17..0000000000 --- a/sysdeps/ieee754/flt-32/s_fromfpf.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 0 -#define INEXACT 0 -#define FUNC fromfpf -#include diff --git a/sysdeps/ieee754/flt-32/s_fromfpf_main.c b/sysdeps/ieee754/flt-32/s_fromfpf_main.c deleted file mode 100644 index 3a4ad80e55..0000000000 --- a/sysdeps/ieee754/flt-32/s_fromfpf_main.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Round to integer type. flt-32 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#define BIAS 0x7f -#define MANT_DIG 24 - -#if UNSIGNED -# define RET_TYPE uintmax_t -#else -# define RET_TYPE intmax_t -#endif - -#include - -RET_TYPE -FUNC (float x, int round, unsigned int width) -{ - if (width > INTMAX_WIDTH) - width = INTMAX_WIDTH; - uint32_t ix; - GET_FLOAT_WORD (ix, x); - bool negative = (ix & 0x80000000) != 0; - if (width == 0) - return fromfp_domain_error (negative, width); - ix &= 0x7fffffff; - if (ix == 0) - return 0; - int exponent = ix >> (MANT_DIG - 1); - exponent -= BIAS; - int max_exponent = fromfp_max_exponent (negative, width); - if (exponent > max_exponent) - return fromfp_domain_error (negative, width); - - ix &= ((1U << (MANT_DIG - 1)) - 1); - ix |= 1U << (MANT_DIG - 1); - uintmax_t uret; - bool half_bit, more_bits; - if (exponent >= MANT_DIG - 1) - { - uret = ix; - uret <<= exponent - (MANT_DIG - 1); - half_bit = false; - more_bits = false; - } - else if (exponent >= -1) - { - uint32_t h = 1U << (MANT_DIG - 2 - exponent); - half_bit = (ix & h) != 0; - more_bits = (ix & (h - 1)) != 0; - uret = ix >> (MANT_DIG - 1 - exponent); - } - else - { - uret = 0; - half_bit = false; - more_bits = true; - } - return fromfp_round_and_return (negative, uret, half_bit, more_bits, round, - exponent, max_exponent, width); -} diff --git a/sysdeps/ieee754/flt-32/s_fromfpxf.c b/sysdeps/ieee754/flt-32/s_fromfpxf.c deleted file mode 100644 index 9d0fcbc8cc..0000000000 --- a/sysdeps/ieee754/flt-32/s_fromfpxf.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 0 -#define INEXACT 1 -#define FUNC fromfpxf -#include diff --git a/sysdeps/ieee754/flt-32/s_getpayloadf.c b/sysdeps/ieee754/flt-32/s_getpayloadf.c deleted file mode 100644 index 90cfcc53b9..0000000000 --- a/sysdeps/ieee754/flt-32/s_getpayloadf.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Get NaN payload. flt-32 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -float -getpayloadf (const float *x) -{ - uint32_t ix; - GET_FLOAT_WORD (ix, *x); - ix &= 0x3fffff; - if (FIX_INT_FP_CONVERT_ZERO && ix == 0) - return 0.0f; - return (float) ix; -} diff --git a/sysdeps/ieee754/flt-32/s_isinff.c b/sysdeps/ieee754/flt-32/s_isinff.c deleted file mode 100644 index 6eec050bb5..0000000000 --- a/sysdeps/ieee754/flt-32/s_isinff.c +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_isinff.c,v 1.3 1995/05/11 23:20:21 jtc Exp $"; -#endif - -/* - * isinff(x) returns 1 if x is inf, -1 if x is -inf, else 0; - * no branching! - */ - -#include -#include - -int -__isinff (float x) -{ - int32_t ix,t; - GET_FLOAT_WORD(ix,x); - t = ix & 0x7fffffff; - t ^= 0x7f800000; - t |= -t; - return ~(t >> 31) & (ix >> 30); -} -hidden_def (__isinff) -weak_alias (__isinff, isinff) diff --git a/sysdeps/ieee754/flt-32/s_isnanf.c b/sysdeps/ieee754/flt-32/s_isnanf.c deleted file mode 100644 index 820b31a2b4..0000000000 --- a/sysdeps/ieee754/flt-32/s_isnanf.c +++ /dev/null @@ -1,38 +0,0 @@ -/* s_isnanf.c -- float version of s_isnan.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993, 2011 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_isnanf.c,v 1.4 1995/05/10 20:47:38 jtc Exp $"; -#endif - -/* - * isnanf(x) returns 1 is x is nan, else 0; - * no branching! - */ - -#include -#include - -#undef __isnanf -int __isnanf(float x) -{ - int32_t ix; - GET_FLOAT_WORD(ix,x); - ix &= 0x7fffffff; - ix = 0x7f800000 - ix; - return (int)(((u_int32_t)(ix))>>31); -} -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) diff --git a/sysdeps/ieee754/flt-32/s_issignalingf.c b/sysdeps/ieee754/flt-32/s_issignalingf.c deleted file mode 100644 index cd9830eae2..0000000000 --- a/sysdeps/ieee754/flt-32/s_issignalingf.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Test for signaling NaN. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__issignalingf (float x) -{ - u_int32_t xi; - GET_FLOAT_WORD (xi, x); -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - /* We only have to care about the high-order bit of x's significand, because - having it set (sNaN) already makes the significand different from that - used to designate infinity. */ - return (xi & 0x7fc00000) == 0x7fc00000; -#else - /* To keep the following comparison simple, toggle the quiet/signaling bit, - so that it is set for sNaNs. This is inverse to IEEE 754-2008 (as well as - common practice for IEEE 754-1985). */ - xi ^= 0x00400000; - /* We have to compare for greater (instead of greater or equal), because x's - significand being all-zero designates infinity not NaN. */ - return (xi & 0x7fffffff) > 0x7fc00000; -#endif -} -libm_hidden_def (__issignalingf) diff --git a/sysdeps/ieee754/flt-32/s_llrintf.c b/sysdeps/ieee754/flt-32/s_llrintf.c deleted file mode 100644 index e0ffbfee82..0000000000 --- a/sysdeps/ieee754/flt-32/s_llrintf.c +++ /dev/null @@ -1,86 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -static const float two23[2] = -{ - 8.3886080000e+06, /* 0x4B000000 */ - -8.3886080000e+06, /* 0xCB000000 */ -}; - - -long long int -__llrintf (float x) -{ - int32_t j0; - u_int32_t i0; - float w; - float t; - long long int result; - int sx; - - GET_FLOAT_WORD (i0, x); - - sx = i0 >> 31; - j0 = ((i0 >> 23) & 0xff) - 0x7f; - i0 &= 0x7fffff; - i0 |= 0x800000; - - if (j0 < (int32_t) (sizeof (long long int) * 8) - 1) - { - if (j0 >= 23) - result = (long long int) i0 << (j0 - 23); - else - { - w = math_narrow_eval (two23[sx] + x); - t = w - two23[sx]; - GET_FLOAT_WORD (i0, t); - j0 = ((i0 >> 23) & 0xff) - 0x7f; - i0 &= 0x7fffff; - i0 |= 0x800000; - - result = (j0 < 0 ? 0 : i0 >> (23 - j0)); - } - } - else - { -#ifdef FE_INVALID - /* The number is too large. Unless it rounds to LLONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ - if (FIX_FLT_LLONG_CONVERT_OVERFLOW && x != (float) LLONG_MIN) - { - feraiseexcept (FE_INVALID); - return sx == 0 ? LLONG_MAX : LLONG_MIN; - } -#endif - return (long long int) x; - } - - return sx ? -result : result; -} - -weak_alias (__llrintf, llrintf) diff --git a/sysdeps/ieee754/flt-32/s_llroundf.c b/sysdeps/ieee754/flt-32/s_llroundf.c deleted file mode 100644 index faee87b879..0000000000 --- a/sysdeps/ieee754/flt-32/s_llroundf.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Round float value to long long int. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - - -long long int -__llroundf (float x) -{ - int32_t j0; - u_int32_t i; - long long int result; - int sign; - - GET_FLOAT_WORD (i, x); - j0 = ((i >> 23) & 0xff) - 0x7f; - sign = (i & 0x80000000) != 0 ? -1 : 1; - i &= 0x7fffff; - i |= 0x800000; - - if (j0 < (int32_t) (8 * sizeof (long long int)) - 1) - { - if (j0 < 0) - return j0 < -1 ? 0 : sign; - else if (j0 >= 23) - result = (long long int) i << (j0 - 23); - else - { - i += 0x400000 >> j0; - - result = i >> (23 - j0); - } - } - else - { -#ifdef FE_INVALID - /* The number is too large. Unless it rounds to LLONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ - if (FIX_FLT_LLONG_CONVERT_OVERFLOW && x != (float) LLONG_MIN) - { - feraiseexcept (FE_INVALID); - return sign == 1 ? LLONG_MAX : LLONG_MIN; - } -#endif - return (long long int) x; - } - - return sign * result; -} - -weak_alias (__llroundf, llroundf) diff --git a/sysdeps/ieee754/flt-32/s_log1pf.c b/sysdeps/ieee754/flt-32/s_log1pf.c deleted file mode 100644 index ade60a2e27..0000000000 --- a/sysdeps/ieee754/flt-32/s_log1pf.c +++ /dev/null @@ -1,102 +0,0 @@ -/* s_log1pf.c -- float version of s_log1p.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include -#include - -static const float -ln2_hi = 6.9313812256e-01, /* 0x3f317180 */ -ln2_lo = 9.0580006145e-06, /* 0x3717f7d1 */ -two25 = 3.355443200e+07, /* 0x4c000000 */ -Lp1 = 6.6666668653e-01, /* 3F2AAAAB */ -Lp2 = 4.0000000596e-01, /* 3ECCCCCD */ -Lp3 = 2.8571429849e-01, /* 3E924925 */ -Lp4 = 2.2222198546e-01, /* 3E638E29 */ -Lp5 = 1.8183572590e-01, /* 3E3A3325 */ -Lp6 = 1.5313838422e-01, /* 3E1CD04F */ -Lp7 = 1.4798198640e-01; /* 3E178897 */ - -static const float zero = 0.0; - -float -__log1pf(float x) -{ - float hfsq,f,c,s,z,R,u; - int32_t k,hx,hu,ax; - - GET_FLOAT_WORD(hx,x); - ax = hx&0x7fffffff; - - k = 1; - if (hx < 0x3ed413d7) { /* x < 0.41422 */ - if(ax>=0x3f800000) { /* x <= -1.0 */ - if(x==(float)-1.0) return -two25/zero; /* log1p(-1)=-inf */ - else return (x-x)/(x-x); /* log1p(x<-1)=NaN */ - } - if(ax<0x31000000) { /* |x| < 2**-29 */ - math_force_eval(two25+x); /* raise inexact */ - if (ax<0x24800000) /* |x| < 2**-54 */ - { - math_check_force_underflow (x); - return x; - } - else - return x - x*x*(float)0.5; - } - if(hx>0||hx<=((int32_t)0xbe95f61f)) { - k=0;f=x;hu=1;} /* -0.2929= 0x7f800000) return x+x; - if(k!=0) { - if(hx<0x5a000000) { - u = (float)1.0+x; - GET_FLOAT_WORD(hu,u); - k = (hu>>23)-127; - /* correction term */ - c = (k>0)? (float)1.0-(u-x):x-(u-(float)1.0); - c /= u; - } else { - u = x; - GET_FLOAT_WORD(hu,u); - k = (hu>>23)-127; - c = 0; - } - hu &= 0x007fffff; - if(hu<0x3504f7) { - SET_FLOAT_WORD(u,hu|0x3f800000);/* normalize u */ - } else { - k += 1; - SET_FLOAT_WORD(u,hu|0x3f000000); /* normalize u/2 */ - hu = (0x00800000-hu)>>2; - } - f = u-(float)1.0; - } - hfsq=(float)0.5*f*f; - if(hu==0) { /* |f| < 2**-20 */ - if(f==zero) { - if(k==0) return zero; - else {c += k*ln2_lo; return k*ln2_hi+c;} - } - R = hfsq*((float)1.0-(float)0.66666666666666666*f); - if(k==0) return f-R; else - return k*ln2_hi-((R-(k*ln2_lo+c))-f); - } - s = f/((float)2.0+f); - z = s*s; - R = z*(Lp1+z*(Lp2+z*(Lp3+z*(Lp4+z*(Lp5+z*(Lp6+z*Lp7)))))); - if(k==0) return f-(hfsq-s*(hfsq+R)); else - return k*ln2_hi-((hfsq-(s*(hfsq+R)+(k*ln2_lo+c)))-f); -} diff --git a/sysdeps/ieee754/flt-32/s_logbf.c b/sysdeps/ieee754/flt-32/s_logbf.c deleted file mode 100644 index 9ae20e332a..0000000000 --- a/sysdeps/ieee754/flt-32/s_logbf.c +++ /dev/null @@ -1,41 +0,0 @@ -/* s_logbf.c -- float version of s_logb.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include -#include - -float -__logbf (float x) -{ - int32_t ix, rix; - - GET_FLOAT_WORD (ix, x); - ix &= 0x7fffffff; /* high |x| */ - if (ix == 0) - return (float) -1.0 / fabsf (x); - if (ix >= 0x7f800000) - return x * x; - if (__glibc_unlikely ((rix = ix >> 23) == 0)) - { - /* POSIX specifies that denormal number is treated as - though it were normalized. */ - rix -= __builtin_clz (ix) - 9; - } - if (FIX_INT_FP_CONVERT_ZERO && rix == 127) - return 0.0f; - return (float) (rix - 127); -} -weak_alias (__logbf, logbf) diff --git a/sysdeps/ieee754/flt-32/s_lrintf.c b/sysdeps/ieee754/flt-32/s_lrintf.c deleted file mode 100644 index a1ed720c0f..0000000000 --- a/sysdeps/ieee754/flt-32/s_lrintf.c +++ /dev/null @@ -1,86 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -static const float two23[2] = -{ - 8.3886080000e+06, /* 0x4B000000 */ - -8.3886080000e+06, /* 0xCB000000 */ -}; - - -long int -__lrintf (float x) -{ - int32_t j0; - u_int32_t i0; - float w; - float t; - long int result; - int sx; - - GET_FLOAT_WORD (i0, x); - - sx = i0 >> 31; - j0 = ((i0 >> 23) & 0xff) - 0x7f; - i0 &= 0x7fffff; - i0 |= 0x800000; - - if (j0 < (int32_t) (sizeof (long int) * 8) - 1) - { - if (j0 >= 23) - result = (long int) i0 << (j0 - 23); - else - { - w = math_narrow_eval (two23[sx] + x); - t = w - two23[sx]; - GET_FLOAT_WORD (i0, t); - j0 = ((i0 >> 23) & 0xff) - 0x7f; - i0 &= 0x7fffff; - i0 |= 0x800000; - - result = (j0 < 0 ? 0 : i0 >> (23 - j0)); - } - } - else - { -#ifdef FE_INVALID - /* The number is too large. Unless it rounds to LONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ - if (FIX_FLT_LONG_CONVERT_OVERFLOW && x != (float) LONG_MIN) - { - feraiseexcept (FE_INVALID); - return sx == 0 ? LONG_MAX : LONG_MIN; - } -#endif - return (long int) x; - } - - return sx ? -result : result; -} - -weak_alias (__lrintf, lrintf) diff --git a/sysdeps/ieee754/flt-32/s_lroundf.c b/sysdeps/ieee754/flt-32/s_lroundf.c deleted file mode 100644 index 81cb7ab10f..0000000000 --- a/sysdeps/ieee754/flt-32/s_lroundf.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Round float value to long int. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - - -long int -__lroundf (float x) -{ - int32_t j0; - u_int32_t i; - long int result; - int sign; - - GET_FLOAT_WORD (i, x); - j0 = ((i >> 23) & 0xff) - 0x7f; - sign = (i & 0x80000000) != 0 ? -1 : 1; - i &= 0x7fffff; - i |= 0x800000; - - if (j0 < (int32_t) (8 * sizeof (long int)) - 1) - { - if (j0 < 0) - return j0 < -1 ? 0 : sign; - else if (j0 >= 23) - result = (long int) i << (j0 - 23); - else - { - i += 0x400000 >> j0; - - result = i >> (23 - j0); - } - } - else - { -#ifdef FE_INVALID - /* The number is too large. Unless it rounds to LONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ - if (FIX_FLT_LONG_CONVERT_OVERFLOW && x != (float) LONG_MIN) - { - feraiseexcept (FE_INVALID); - return sign == 1 ? LONG_MAX : LONG_MIN; - } -#endif - return (long int) x; - } - - return sign * result; -} - -weak_alias (__lroundf, lroundf) diff --git a/sysdeps/ieee754/flt-32/s_modff.c b/sysdeps/ieee754/flt-32/s_modff.c deleted file mode 100644 index 23f6a902b3..0000000000 --- a/sysdeps/ieee754/flt-32/s_modff.c +++ /dev/null @@ -1,54 +0,0 @@ -/* s_modff.c -- float version of s_modf.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include - -static const float one = 1.0; - -float -__modff(float x, float *iptr) -{ - int32_t i0,j0; - u_int32_t i; - GET_FLOAT_WORD(i0,x); - j0 = ((i0>>23)&0xff)-0x7f; /* exponent of x */ - if(__builtin_expect(j0<23, 1)) { /* integer part in x */ - if(j0<0) { /* |x|<1 */ - SET_FLOAT_WORD(*iptr,i0&0x80000000); /* *iptr = +-0 */ - return x; - } else { - i = (0x007fffff)>>j0; - if((i0&i)==0) { /* x is integral */ - u_int32_t ix; - *iptr = x; - GET_FLOAT_WORD(ix,x); - SET_FLOAT_WORD(x,ix&0x80000000); /* return +-0 */ - return x; - } else { - SET_FLOAT_WORD(*iptr,i0&(~i)); - return x - *iptr; - } - } - } else { /* no fraction part */ - *iptr = x*one; - /* We must handle NaNs separately. */ - if (j0 == 0x80 && (i0 & 0x7fffff)) - return x*one; - SET_FLOAT_WORD(x,i0&0x80000000); /* return +-0 */ - return x; - } -} -weak_alias (__modff, modff) diff --git a/sysdeps/ieee754/flt-32/s_nearbyintf.c b/sysdeps/ieee754/flt-32/s_nearbyintf.c deleted file mode 100644 index 5aebefafcf..0000000000 --- a/sysdeps/ieee754/flt-32/s_nearbyintf.c +++ /dev/null @@ -1,59 +0,0 @@ -/* s_rintf.c -- float version of s_rint.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ -/* Adapted for use as nearbyint by Ulrich Drepper . */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - - -#include -#include -#include - -static const float -TWO23[2]={ - 8.3886080000e+06, /* 0x4b000000 */ - -8.3886080000e+06, /* 0xcb000000 */ -}; - -float -__nearbyintf(float x) -{ - fenv_t env; - int32_t i0,j0,sx; - float w,t; - GET_FLOAT_WORD(i0,x); - sx = (i0>>31)&1; - j0 = ((i0>>23)&0xff)-0x7f; - if(j0<23) { - if(j0<0) { - libc_feholdexceptf (&env); - w = TWO23[sx]+x; - t = w-TWO23[sx]; - math_force_eval (t); - libc_fesetenvf (&env); - GET_FLOAT_WORD(i0,t); - SET_FLOAT_WORD(t,(i0&0x7fffffff)|(sx<<31)); - return t; - } - } else { - if(__builtin_expect(j0==0x80, 0)) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } - libc_feholdexceptf (&env); - w = TWO23[sx]+x; - t = w-TWO23[sx]; - math_force_eval (t); - libc_fesetenvf (&env); - return t; -} -weak_alias (__nearbyintf, nearbyintf) diff --git a/sysdeps/ieee754/flt-32/s_nextafterf.c b/sysdeps/ieee754/flt-32/s_nextafterf.c deleted file mode 100644 index 625d54b768..0000000000 --- a/sysdeps/ieee754/flt-32/s_nextafterf.c +++ /dev/null @@ -1,73 +0,0 @@ -/* s_nextafterf.c -- float version of s_nextafter.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_nextafterf.c,v 1.4 1995/05/10 20:48:01 jtc Exp $"; -#endif - -#include -#include -#include -#include - -float __nextafterf(float x, float y) -{ - int32_t hx,hy,ix,iy; - - GET_FLOAT_WORD(hx,x); - GET_FLOAT_WORD(hy,y); - ix = hx&0x7fffffff; /* |x| */ - iy = hy&0x7fffffff; /* |y| */ - - if((ix>0x7f800000) || /* x is nan */ - (iy>0x7f800000)) /* y is nan */ - return x+y; - if(x==y) return y; /* x=y, return y */ - if(ix==0) { /* x == 0 */ - float u; - SET_FLOAT_WORD(x,(hy&0x80000000)|1);/* return +-minsubnormal */ - u = math_opt_barrier (x); - u = u*u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(hx>=0) { /* x > 0 */ - if(hx>hy) { /* x > y, x -= ulp */ - hx -= 1; - } else { /* x < y, x += ulp */ - hx += 1; - } - } else { /* x < 0 */ - if(hy>=0||hx>hy){ /* x < y, x -= ulp */ - hx -= 1; - } else { /* x > y, x += ulp */ - hx += 1; - } - } - hy = hx&0x7f800000; - if(hy>=0x7f800000) { - float u = x+x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(hy<0x00800000) { - float u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - SET_FLOAT_WORD(x,hx); - return x; -} -weak_alias (__nextafterf, nextafterf) diff --git a/sysdeps/ieee754/flt-32/s_nextupf.c b/sysdeps/ieee754/flt-32/s_nextupf.c deleted file mode 100644 index bbabdf1bd6..0000000000 --- a/sysdeps/ieee754/flt-32/s_nextupf.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Return the least floating-point number greater than X. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Return the least floating-point number greater than X. */ -float -__nextupf (float x) -{ - int32_t hx, ix; - - GET_FLOAT_WORD (hx, x); - ix = hx & 0x7fffffff; - if (ix == 0) - return FLT_TRUE_MIN; - if (ix > 0x7f800000) /* x is nan. */ - return x + x; - if (hx >= 0) - { /* x > 0. */ - if (isinf (x)) - return x; - hx += 1; - } - else - hx -= 1; - SET_FLOAT_WORD (x, hx); - return x; -} - -weak_alias (__nextupf, nextupf) diff --git a/sysdeps/ieee754/flt-32/s_remquof.c b/sysdeps/ieee754/flt-32/s_remquof.c deleted file mode 100644 index 8e398dc6c5..0000000000 --- a/sysdeps/ieee754/flt-32/s_remquof.c +++ /dev/null @@ -1,110 +0,0 @@ -/* Compute remainder and a congruent to the quotient. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -static const float zero = 0.0; - - -float -__remquof (float x, float y, int *quo) -{ - int32_t hx,hy; - u_int32_t sx; - int cquo, qs; - - GET_FLOAT_WORD (hx, x); - GET_FLOAT_WORD (hy, y); - sx = hx & 0x80000000; - qs = sx ^ (hy & 0x80000000); - hy &= 0x7fffffff; - hx &= 0x7fffffff; - - /* Purge off exception values. */ - if (hy == 0) - return (x * y) / (x * y); /* y = 0 */ - if ((hx >= 0x7f800000) /* x not finite */ - || (hy > 0x7f800000)) /* y is NaN */ - return (x * y) / (x * y); - - if (hy <= 0x7dffffff) - x = __ieee754_fmodf (x, 8 * y); /* now x < 8y */ - - if ((hx - hy) == 0) - { - *quo = qs ? -1 : 1; - return zero * x; - } - - x = fabsf (x); - y = fabsf (y); - cquo = 0; - - if (hy <= 0x7e7fffff && x >= 4 * y) - { - x -= 4 * y; - cquo += 4; - } - if (hy <= 0x7effffff && x >= 2 * y) - { - x -= 2 * y; - cquo += 2; - } - - if (hy < 0x01000000) - { - if (x + x > y) - { - x -= y; - ++cquo; - if (x + x >= y) - { - x -= y; - ++cquo; - } - } - } - else - { - float y_half = 0.5 * y; - if (x > y_half) - { - x -= y; - ++cquo; - if (x >= y_half) - { - x -= y; - ++cquo; - } - } - } - - *quo = qs ? -cquo : cquo; - - /* Ensure correct sign of zero result in round-downward mode. */ - if (x == 0.0f) - x = 0.0f; - if (sx) - x = -x; - return x; -} -weak_alias (__remquof, remquof) diff --git a/sysdeps/ieee754/flt-32/s_rintf.c b/sysdeps/ieee754/flt-32/s_rintf.c deleted file mode 100644 index 8a907488f7..0000000000 --- a/sysdeps/ieee754/flt-32/s_rintf.c +++ /dev/null @@ -1,50 +0,0 @@ -/* s_rintf.c -- float version of s_rint.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include - -static const float -TWO23[2]={ - 8.3886080000e+06, /* 0x4b000000 */ - -8.3886080000e+06, /* 0xcb000000 */ -}; - -float -__rintf(float x) -{ - int32_t i0,j0,sx; - float w,t; - GET_FLOAT_WORD(i0,x); - sx = (i0>>31)&1; - j0 = ((i0>>23)&0xff)-0x7f; - if(j0<23) { - if(j0<0) { - w = TWO23[sx]+x; - t = w-TWO23[sx]; - GET_FLOAT_WORD(i0,t); - SET_FLOAT_WORD(t,(i0&0x7fffffff)|(sx<<31)); - return t; - } - } else { - if(j0==0x80) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } - w = TWO23[sx]+x; - return w-TWO23[sx]; -} -#ifndef __rintf -weak_alias (__rintf, rintf) -#endif diff --git a/sysdeps/ieee754/flt-32/s_roundevenf.c b/sysdeps/ieee754/flt-32/s_roundevenf.c deleted file mode 100644 index 4a8c2624bb..0000000000 --- a/sysdeps/ieee754/flt-32/s_roundevenf.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Round to nearest integer value, rounding halfway cases to even. - flt-32 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define BIAS 0x7f -#define MANT_DIG 24 -#define MAX_EXP (2 * BIAS + 1) - -float -roundevenf (float x) -{ - uint32_t ix, ux; - GET_FLOAT_WORD (ix, x); - ux = ix & 0x7fffffff; - int exponent = ux >> (MANT_DIG - 1); - if (exponent >= BIAS + MANT_DIG - 1) - { - /* Integer, infinity or NaN. */ - if (exponent == MAX_EXP) - /* Infinity or NaN; quiet signaling NaNs. */ - return x + x; - else - return x; - } - else if (exponent >= BIAS) - { - /* At least 1; not necessarily an integer. Locate the bits with - exponents 0 and -1 (when the unbiased exponent is 0, the bit - with exponent 0 is implicit, but as the bias is odd it is OK - to take it from the low bit of the exponent). */ - int int_pos = (BIAS + MANT_DIG - 1) - exponent; - int half_pos = int_pos - 1; - uint32_t half_bit = 1U << half_pos; - uint32_t int_bit = 1U << int_pos; - if ((ix & (int_bit | (half_bit - 1))) != 0) - /* Carry into the exponent works correctly. No need to test - whether HALF_BIT is set. */ - ix += half_bit; - ix &= ~(int_bit - 1); - } - else if (exponent == BIAS - 1 && ux > 0x3f000000) - /* Interval (0.5, 1). */ - ix = (ix & 0x80000000) | 0x3f800000; - else - /* Rounds to 0. */ - ix &= 0x80000000; - SET_FLOAT_WORD (x, ix); - return x; -} diff --git a/sysdeps/ieee754/flt-32/s_roundf.c b/sysdeps/ieee754/flt-32/s_roundf.c deleted file mode 100644 index 7ea0d97756..0000000000 --- a/sysdeps/ieee754/flt-32/s_roundf.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Round float to integer away from zero. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -float -__roundf (float x) -{ - int32_t i0, j0; - - GET_FLOAT_WORD (i0, x); - j0 = ((i0 >> 23) & 0xff) - 0x7f; - if (j0 < 23) - { - if (j0 < 0) - { - i0 &= 0x80000000; - if (j0 == -1) - i0 |= 0x3f800000; - } - else - { - u_int32_t i = 0x007fffff >> j0; - if ((i0 & i) == 0) - /* X is integral. */ - return x; - - i0 += 0x00400000 >> j0; - i0 &= ~i; - } - } - else - { - if (j0 == 0x80) - /* Inf or NaN. */ - return x + x; - else - return x; - } - - SET_FLOAT_WORD (x, i0); - return x; -} -weak_alias (__roundf, roundf) diff --git a/sysdeps/ieee754/flt-32/s_scalblnf.c b/sysdeps/ieee754/flt-32/s_scalblnf.c deleted file mode 100644 index ad3c586b33..0000000000 --- a/sysdeps/ieee754/flt-32/s_scalblnf.c +++ /dev/null @@ -1,52 +0,0 @@ -/* s_scalbnf.c -- float version of s_scalbn.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include - -static const float -two25 = 3.355443200e+07, /* 0x4c000000 */ -twom25 = 2.9802322388e-08, /* 0x33000000 */ -huge = 1.0e+30, -tiny = 1.0e-30; - -float -__scalblnf (float x, long int n) -{ - int32_t k,ix; - GET_FLOAT_WORD(ix,x); - k = (ix&0x7f800000)>>23; /* extract exponent */ - if (__builtin_expect(k==0, 0)) { /* 0 or subnormal x */ - if ((ix&0x7fffffff)==0) return x; /* +-0 */ - x *= two25; - GET_FLOAT_WORD(ix,x); - k = ((ix&0x7f800000)>>23) - 25; - } - if (__builtin_expect(k==0xff, 0)) return x+x; /* NaN or Inf */ - if (__builtin_expect(n< -50000, 0)) - return tiny*copysignf(tiny,x); /*underflow*/ - if (__builtin_expect(n> 50000 || k+n > 0xfe, 0)) - return huge*copysignf(huge,x); /* overflow */ - /* Now k and n are bounded we know that k = k+n does not - overflow. */ - k = k+n; - if (__builtin_expect(k > 0, 1)) /* normal result */ - {SET_FLOAT_WORD(x,(ix&0x807fffff)|(k<<23)); return x;} - if (k <= -25) - return tiny*copysignf(tiny,x); /*underflow*/ - k += 25; /* subnormal result */ - SET_FLOAT_WORD(x,(ix&0x807fffff)|(k<<23)); - return x*twom25; -} diff --git a/sysdeps/ieee754/flt-32/s_scalbnf.c b/sysdeps/ieee754/flt-32/s_scalbnf.c deleted file mode 100644 index f36ae241b2..0000000000 --- a/sysdeps/ieee754/flt-32/s_scalbnf.c +++ /dev/null @@ -1,52 +0,0 @@ -/* s_scalbnf.c -- float version of s_scalbn.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include - -static const float -two25 = 3.355443200e+07, /* 0x4c000000 */ -twom25 = 2.9802322388e-08, /* 0x33000000 */ -huge = 1.0e+30, -tiny = 1.0e-30; - -float -__scalbnf (float x, int n) -{ - int32_t k,ix; - GET_FLOAT_WORD(ix,x); - k = (ix&0x7f800000)>>23; /* extract exponent */ - if (__builtin_expect(k==0, 0)) { /* 0 or subnormal x */ - if ((ix&0x7fffffff)==0) return x; /* +-0 */ - x *= two25; - GET_FLOAT_WORD(ix,x); - k = ((ix&0x7f800000)>>23) - 25; - } - if (__builtin_expect(k==0xff, 0)) return x+x; /* NaN or Inf */ - if (__builtin_expect(n< -50000, 0)) - return tiny*__copysignf(tiny,x); /*underflow*/ - if (__builtin_expect(n> 50000 || k+n > 0xfe, 0)) - return huge*__copysignf(huge,x); /* overflow */ - /* Now k and n are bounded we know that k = k+n does not - overflow. */ - k = k+n; - if (__builtin_expect(k > 0, 1)) /* normal result */ - {SET_FLOAT_WORD(x,(ix&0x807fffff)|(k<<23)); return x;} - if (k <= -25) - return tiny*__copysignf(tiny,x); /*underflow*/ - k += 25; /* subnormal result */ - SET_FLOAT_WORD(x,(ix&0x807fffff)|(k<<23)); - return x*twom25; -} diff --git a/sysdeps/ieee754/flt-32/s_setpayloadf.c b/sysdeps/ieee754/flt-32/s_setpayloadf.c deleted file mode 100644 index 86dfda9aa6..0000000000 --- a/sysdeps/ieee754/flt-32/s_setpayloadf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SIG 0 -#define FUNC setpayloadf -#include diff --git a/sysdeps/ieee754/flt-32/s_setpayloadf_main.c b/sysdeps/ieee754/flt-32/s_setpayloadf_main.c deleted file mode 100644 index 8b046d6547..0000000000 --- a/sysdeps/ieee754/flt-32/s_setpayloadf_main.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Set NaN payload. flt-32 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#define SET_HIGH_BIT (HIGH_ORDER_BIT_IS_SET_FOR_SNAN ? SIG : !SIG) -#define BIAS 0x7f -#define PAYLOAD_DIG 22 -#define EXPLICIT_MANT_DIG 23 - -int -FUNC (float *x, float payload) -{ - uint32_t ix; - GET_FLOAT_WORD (ix, payload); - int exponent = ix >> EXPLICIT_MANT_DIG; - /* Test if argument is (a) negative or too large; (b) too small, - except for 0 when allowed; (c) not an integer. */ - if (exponent >= BIAS + PAYLOAD_DIG - || (exponent < BIAS && !(SET_HIGH_BIT && ix == 0)) - || (ix & ((1U << (BIAS + EXPLICIT_MANT_DIG - exponent)) - 1)) != 0) - { - SET_FLOAT_WORD (*x, 0); - return 1; - } - if (ix != 0) - { - ix &= (1U << EXPLICIT_MANT_DIG) - 1; - ix |= 1U << EXPLICIT_MANT_DIG; - ix >>= BIAS + EXPLICIT_MANT_DIG - exponent; - } - ix |= 0x7f800000 | (SET_HIGH_BIT ? 0x400000 : 0); - SET_FLOAT_WORD (*x, ix); - return 0; -} diff --git a/sysdeps/ieee754/flt-32/s_setpayloadsigf.c b/sysdeps/ieee754/flt-32/s_setpayloadsigf.c deleted file mode 100644 index f7b335dac7..0000000000 --- a/sysdeps/ieee754/flt-32/s_setpayloadsigf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SIG 1 -#define FUNC setpayloadsigf -#include diff --git a/sysdeps/ieee754/flt-32/s_signbitf.c b/sysdeps/ieee754/flt-32/s_signbitf.c deleted file mode 100644 index 0f7e23d7f9..0000000000 --- a/sysdeps/ieee754/flt-32/s_signbitf.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Return nonzero value if number is negative. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__signbitf (float x) -{ - return __builtin_signbitf (x); -} diff --git a/sysdeps/ieee754/flt-32/s_sincosf.c b/sysdeps/ieee754/flt-32/s_sincosf.c deleted file mode 100644 index 3ab92ee0ba..0000000000 --- a/sysdeps/ieee754/flt-32/s_sincosf.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Compute sine and cosine of argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include - -#ifndef SINCOSF -# define SINCOSF_FUNC __sincosf -#else -# define SINCOSF_FUNC SINCOSF -#endif - -void -SINCOSF_FUNC (float x, float *sinx, float *cosx) -{ - int32_t ix; - - /* High word of x. */ - GET_FLOAT_WORD (ix, x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffff; - if (ix <= 0x3f490fd8) - { - *sinx = __kernel_sinf (x, 0.0, 0); - *cosx = __kernel_cosf (x, 0.0); - } - else if (ix>=0x7f800000) - { - /* sin(Inf or NaN) is NaN */ - *sinx = *cosx = x - x; - if (ix == 0x7f800000) - __set_errno (EDOM); - } - else - { - /* Argument reduction needed. */ - float y[2]; - int n; - - n = __ieee754_rem_pio2f (x, y); - switch (n & 3) - { - case 0: - *sinx = __kernel_sinf (y[0], y[1], 1); - *cosx = __kernel_cosf (y[0], y[1]); - break; - case 1: - *sinx = __kernel_cosf (y[0], y[1]); - *cosx = -__kernel_sinf (y[0], y[1], 1); - break; - case 2: - *sinx = -__kernel_sinf (y[0], y[1], 1); - *cosx = -__kernel_cosf (y[0], y[1]); - break; - default: - *sinx = -__kernel_cosf (y[0], y[1]); - *cosx = __kernel_sinf (y[0], y[1], 1); - break; - } - } -} - -#ifndef SINCOSF -weak_alias (__sincosf, sincosf) -#endif diff --git a/sysdeps/ieee754/flt-32/s_sinf.c b/sysdeps/ieee754/flt-32/s_sinf.c deleted file mode 100644 index 916e345571..0000000000 --- a/sysdeps/ieee754/flt-32/s_sinf.c +++ /dev/null @@ -1,63 +0,0 @@ -/* s_sinf.c -- float version of s_sin.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_sinf.c,v 1.4 1995/05/10 20:48:16 jtc Exp $"; -#endif - -#include -#include -#include - -#ifndef SINF -# define SINF_FUNC __sinf -#else -# define SINF_FUNC SINF -#endif - -float SINF_FUNC(float x) -{ - float y[2],z=0.0; - int32_t n, ix; - - GET_FLOAT_WORD(ix,x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffff; - if(ix <= 0x3f490fd8) return __kernel_sinf(x,z,0); - - /* sin(Inf or NaN) is NaN */ - else if (ix>=0x7f800000) { - if (ix == 0x7f800000) - __set_errno (EDOM); - return x-x; - } - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2f(x,y); - switch(n&3) { - case 0: return __kernel_sinf(y[0],y[1],1); - case 1: return __kernel_cosf(y[0],y[1]); - case 2: return -__kernel_sinf(y[0],y[1],1); - default: - return -__kernel_cosf(y[0],y[1]); - } - } -} - -#ifndef SINF -weak_alias (__sinf, sinf) -#endif diff --git a/sysdeps/ieee754/flt-32/s_tanf.c b/sysdeps/ieee754/flt-32/s_tanf.c deleted file mode 100644 index 685df8fa35..0000000000 --- a/sysdeps/ieee754/flt-32/s_tanf.c +++ /dev/null @@ -1,49 +0,0 @@ -/* s_tanf.c -- float version of s_tan.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_tanf.c,v 1.4 1995/05/10 20:48:20 jtc Exp $"; -#endif - -#include -#include -#include - -float __tanf(float x) -{ - float y[2],z=0.0; - int32_t n, ix; - - GET_FLOAT_WORD(ix,x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffff; - if(ix <= 0x3f490fda) return __kernel_tanf(x,z,1); - - /* tan(Inf or NaN) is NaN */ - else if (ix>=0x7f800000) { - if (ix==0x7f800000) - __set_errno (EDOM); - return x-x; /* NaN */ - } - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2f(x,y); - return __kernel_tanf(y[0],y[1],1-((n&1)<<1)); /* 1 -- n even - -1 -- n odd */ - } -} -weak_alias (__tanf, tanf) diff --git a/sysdeps/ieee754/flt-32/s_tanhf.c b/sysdeps/ieee754/flt-32/s_tanhf.c deleted file mode 100644 index f70702b29c..0000000000 --- a/sysdeps/ieee754/flt-32/s_tanhf.c +++ /dev/null @@ -1,62 +0,0 @@ -/* s_tanhf.c -- float version of s_tanh.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_tanhf.c,v 1.4 1995/05/10 20:48:24 jtc Exp $"; -#endif - -#include -#include -#include - -static const float one=1.0, two=2.0, tiny = 1.0e-30; - -float __tanhf(float x) -{ - float t,z; - int32_t jx,ix; - - GET_FLOAT_WORD(jx,x); - ix = jx&0x7fffffff; - - /* x is INF or NaN */ - if(ix>=0x7f800000) { - if (jx>=0) return one/x+one; /* tanh(+-inf)=+-1 */ - else return one/x-one; /* tanh(NaN) = NaN */ - } - - /* |x| < 22 */ - if (ix < 0x41b00000) { /* |x|<22 */ - if (ix == 0) - return x; /* x == +-0 */ - if (ix<0x24000000) /* |x|<2**-55 */ - { - math_check_force_underflow (x); - return x*(one+x); /* tanh(small) = small */ - } - if (ix>=0x3f800000) { /* |x|>=1 */ - t = __expm1f(two*fabsf(x)); - z = one - two/(t+two); - } else { - t = __expm1f(-two*fabsf(x)); - z= -t/(t+two); - } - /* |x| > 22, return +-1 */ - } else { - z = one - tiny; /* raised inexact flag */ - } - return (jx>=0)? z: -z; -} -weak_alias (__tanhf, tanhf) diff --git a/sysdeps/ieee754/flt-32/s_totalorderf.c b/sysdeps/ieee754/flt-32/s_totalorderf.c deleted file mode 100644 index f592b051db..0000000000 --- a/sysdeps/ieee754/flt-32/s_totalorderf.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Total order operation. flt-32 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -totalorderf (float x, float y) -{ - int32_t ix, iy; - GET_FLOAT_WORD (ix, x); - GET_FLOAT_WORD (iy, y); -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - /* For the preferred quiet NaN convention, this operation is a - comparison of the representations of the arguments interpreted as - sign-magnitude integers. If both arguments are NaNs, invert the - quiet/signaling bit so comparing that way works. */ - if ((ix & 0x7fffffff) > 0x7f800000 && (iy & 0x7fffffff) > 0x7f800000) - { - ix ^= 0x00400000; - iy ^= 0x00400000; - } -#endif - uint32_t ix_sign = ix >> 31; - uint32_t iy_sign = iy >> 31; - ix ^= ix_sign >> 1; - iy ^= iy_sign >> 1; - return ix <= iy; -} diff --git a/sysdeps/ieee754/flt-32/s_totalordermagf.c b/sysdeps/ieee754/flt-32/s_totalordermagf.c deleted file mode 100644 index cac7601e12..0000000000 --- a/sysdeps/ieee754/flt-32/s_totalordermagf.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Total order operation on absolute values. flt-32 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -totalordermagf (float x, float y) -{ - uint32_t ix, iy; - GET_FLOAT_WORD (ix, x); - GET_FLOAT_WORD (iy, y); - ix &= 0x7fffffff; - iy &= 0x7fffffff; -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - /* For the preferred quiet NaN convention, this operation is a - comparison of the representations of the absolute values of the - arguments. If both arguments are NaNs, invert the - quiet/signaling bit so comparing that way works. */ - if (ix > 0x7f800000 && iy > 0x7f800000) - { - ix ^= 0x00400000; - iy ^= 0x00400000; - } -#endif - return ix <= iy; -} diff --git a/sysdeps/ieee754/flt-32/s_truncf.c b/sysdeps/ieee754/flt-32/s_truncf.c deleted file mode 100644 index 2edb03c16f..0000000000 --- a/sysdeps/ieee754/flt-32/s_truncf.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Truncate argument to nearest integral value not larger than the argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -float -__truncf (float x) -{ - int32_t i0, j0; - int sx; - - GET_FLOAT_WORD (i0, x); - sx = i0 & 0x80000000; - j0 = ((i0 >> 23) & 0xff) - 0x7f; - if (j0 < 23) - { - if (j0 < 0) - /* The magnitude of the number is < 1 so the result is +-0. */ - SET_FLOAT_WORD (x, sx); - else - SET_FLOAT_WORD (x, sx | (i0 & ~(0x007fffff >> j0))); - } - else - { - if (j0 == 0x80) - /* x is inf or NaN. */ - return x + x; - } - - return x; -} -#ifndef __truncf -weak_alias (__truncf, truncf) -#endif diff --git a/sysdeps/ieee754/flt-32/s_ufromfpf.c b/sysdeps/ieee754/flt-32/s_ufromfpf.c deleted file mode 100644 index e6ffdf3374..0000000000 --- a/sysdeps/ieee754/flt-32/s_ufromfpf.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 1 -#define INEXACT 0 -#define FUNC ufromfpf -#include diff --git a/sysdeps/ieee754/flt-32/s_ufromfpxf.c b/sysdeps/ieee754/flt-32/s_ufromfpxf.c deleted file mode 100644 index 97aa6890f0..0000000000 --- a/sysdeps/ieee754/flt-32/s_ufromfpxf.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 1 -#define INEXACT 1 -#define FUNC ufromfpxf -#include diff --git a/sysdeps/ieee754/flt-32/t_exp2f.h b/sysdeps/ieee754/flt-32/t_exp2f.h deleted file mode 100644 index aecabcc372..0000000000 --- a/sysdeps/ieee754/flt-32/t_exp2f.h +++ /dev/null @@ -1,351 +0,0 @@ -/* Accurate tables for exp2f(). - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Geoffrey Keating - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This table has the property that, for all integers -128 <= i <= 127, - exp(i/256.0 + __exp2f_deltatable[i-128]) == __exp2f_atable[i+128] + r - for some -2^-35 < r < 2^-35 (abs(r) < 2^-36 if i <= 0); and that - __exp2f_deltatable[i+128] == t * 2^-30 - for integer t so that abs(t) <= 43447 * 2^0. */ - -#define W30 (9.31322575e-10) -static const float __exp2f_deltatable[256] = { - -810*W30, 283*W30, -1514*W30, 1304*W30, - -1148*W30, -98*W30, -744*W30, -156*W30, - -419*W30, -155*W30, 474*W30, 167*W30, - -1984*W30, -826*W30, 692*W30, 781*W30, - -578*W30, -411*W30, -129*W30, -1500*W30, - 654*W30, -141*W30, -816*W30, -53*W30, - 148*W30, 493*W30, -2214*W30, 760*W30, - 260*W30, 750*W30, -1300*W30, 1424*W30, - -1445*W30, -339*W30, -680*W30, -349*W30, - -922*W30, 531*W30, 193*W30, -2892*W30, - 290*W30, -2145*W30, -276*W30, 485*W30, - -695*W30, 215*W30, -7093*W30, 412*W30, - -4596*W30, 367*W30, 592*W30, -615*W30, - -97*W30, -1066*W30, 972*W30, -226*W30, - -625*W30, -374*W30, -5647*W30, -180*W30, - 20349*W30, -447*W30, 111*W30, -4164*W30, - -87*W30, -21*W30, -251*W30, 66*W30, - -517*W30, 2093*W30, -263*W30, 182*W30, - -601*W30, 475*W30, -483*W30, -1251*W30, - -373*W30, 1471*W30, -92*W30, -215*W30, - -97*W30, -190*W30, 0*W30, -290*W30, - -2647*W30, 1940*W30, -582*W30, 28*W30, - 833*W30, 1493*W30, 34*W30, 321*W30, - 3327*W30, -35*W30, 177*W30, -135*W30, - -796*W30, -428*W30, 129*W30, 9332*W30, - -12*W30, -69*W30, -1743*W30, 6508*W30, - -60*W30, 359*W30, 43447*W30, 15*W30, - -23*W30, -305*W30, -375*W30, -652*W30, - 667*W30, 269*W30, -1575*W30, 185*W30, - -329*W30, 200*W30, 6002*W30, 163*W30, - -647*W30, 19*W30, -603*W30, -755*W30, - 742*W30, -438*W30, 3587*W30, 2560*W30, - 0*W30, -520*W30, -241*W30, -299*W30, - -1270*W30, -991*W30, -1138*W30, 255*W30, - -1192*W30, 1722*W30, 1023*W30, 3700*W30, - -1388*W30, -1551*W30, -2549*W30, 27*W30, - 282*W30, 673*W30, 113*W30, 1561*W30, - 72*W30, 873*W30, 87*W30, -395*W30, - -433*W30, 629*W30, 3440*W30, -284*W30, - -592*W30, -103*W30, -46*W30, -3844*W30, - 1712*W30, 303*W30, 1555*W30, -631*W30, - -1400*W30, -961*W30, -854*W30, -276*W30, - 407*W30, 833*W30, -345*W30, -1501*W30, - 121*W30, -1581*W30, 400*W30, 150*W30, - 1224*W30, -139*W30, -563*W30, 879*W30, - 933*W30, 2939*W30, 788*W30, 211*W30, - 530*W30, -192*W30, 706*W30, -13347*W30, - 1065*W30, 3*W30, 111*W30, -208*W30, - -360*W30, -532*W30, -291*W30, 483*W30, - 987*W30, -33*W30, -1373*W30, -166*W30, - -1174*W30, -3955*W30, 1601*W30, -280*W30, - 1405*W30, 600*W30, -1659*W30, -23*W30, - 390*W30, 449*W30, 570*W30, -13143*W30, - -9*W30, -1646*W30, 1201*W30, 294*W30, - 2181*W30, -1173*W30, 1388*W30, -4504*W30, - 190*W30, -2304*W30, 211*W30, 239*W30, - 48*W30, -817*W30, 1018*W30, 1828*W30, - -663*W30, 1408*W30, 408*W30, -36*W30, - 1295*W30, -230*W30, 1341*W30, 9*W30, - 40*W30, 705*W30, 186*W30, 376*W30, - 557*W30, 5866*W30, 363*W30, -1558*W30, - 718*W30, 669*W30, 1369*W30, -2972*W30, - -468*W30, -121*W30, -219*W30, 667*W30, - 29954*W30, 366*W30, 48*W30, -203*W30 -}; - -static const float __exp2f_atable[256] /* __attribute__((mode(SF))) */ = { - 0.707106411447, /* 0x0.b504ecfff */ - 0.709024071690, /* 0x0.b58299fff */ - 0.710945606239, /* 0x0.b60088000 */ - 0.712874472142, /* 0x0.b67ef1000 */ - 0.714806139464, /* 0x0.b6fd88fff */ - 0.716744661340, /* 0x0.b77c94000 */ - 0.718687653549, /* 0x0.b7fbea000 */ - 0.720636486992, /* 0x0.b87ba1fff */ - 0.722590208040, /* 0x0.b8fbabfff */ - 0.724549472323, /* 0x0.b97c12fff */ - 0.726514220228, /* 0x0.b9fcd5fff */ - 0.728483855735, /* 0x0.ba7deb000 */ - 0.730457961549, /* 0x0.baff4afff */ - 0.732438981522, /* 0x0.bb811efff */ - 0.734425544748, /* 0x0.bc0350000 */ - 0.736416816713, /* 0x0.bc85d0000 */ - 0.738412797450, /* 0x0.bd089efff */ - 0.740414917465, /* 0x0.bd8bd4fff */ - 0.742422521111, /* 0x0.be0f66fff */ - 0.744434773914, /* 0x0.be9346fff */ - 0.746454179287, /* 0x0.bf179f000 */ - 0.748477637755, /* 0x0.bf9c3afff */ - 0.750506639473, /* 0x0.c02133fff */ - 0.752541840064, /* 0x0.c0a694fff */ - 0.754582285889, /* 0x0.c12c4e000 */ - 0.756628334525, /* 0x0.c1b265000 */ - 0.758678436269, /* 0x0.c238bffff */ - 0.760736882681, /* 0x0.c2bfa6fff */ - 0.762799203401, /* 0x0.c346cf000 */ - 0.764867603790, /* 0x0.c3ce5d000 */ - 0.766940355298, /* 0x0.c45633fff */ - 0.769021093841, /* 0x0.c4de90fff */ - 0.771104693409, /* 0x0.c5671dfff */ - 0.773195922364, /* 0x0.c5f02afff */ - 0.775292098512, /* 0x0.c6798afff */ - 0.777394294745, /* 0x0.c70350000 */ - 0.779501736166, /* 0x0.c78d6d000 */ - 0.781615912910, /* 0x0.c817fafff */ - 0.783734917628, /* 0x0.c8a2d9fff */ - 0.785858273516, /* 0x0.c92e02000 */ - 0.787990570071, /* 0x0.c9b9c0000 */ - 0.790125787245, /* 0x0.ca45aefff */ - 0.792268991467, /* 0x0.cad223fff */ - 0.794417440881, /* 0x0.cb5ef0fff */ - 0.796570718287, /* 0x0.cbec0efff */ - 0.798730909811, /* 0x0.cc79a0fff */ - 0.800892710672, /* 0x0.cd074dfff */ - 0.803068041795, /* 0x0.cd95ddfff */ - 0.805242776881, /* 0x0.ce2464000 */ - 0.807428598393, /* 0x0.ceb3a3fff */ - 0.809617877002, /* 0x0.cf431dfff */ - 0.811812341211, /* 0x0.cfd2eefff */ - 0.814013659956, /* 0x0.d06333000 */ - 0.816220164311, /* 0x0.d0f3ce000 */ - 0.818434238424, /* 0x0.d184e7fff */ - 0.820652604094, /* 0x0.d21649fff */ - 0.822877407074, /* 0x0.d2a818000 */ - 0.825108587751, /* 0x0.d33a51000 */ - 0.827342867839, /* 0x0.d3ccbdfff */ - 0.829588949684, /* 0x0.d45ff1000 */ - 0.831849217401, /* 0x0.d4f411fff */ - 0.834093391880, /* 0x0.d58724fff */ - 0.836355149750, /* 0x0.d61b5f000 */ - 0.838620424257, /* 0x0.d6afd3fff */ - 0.840896368027, /* 0x0.d744fc000 */ - 0.843176305293, /* 0x0.d7da66fff */ - 0.845462262643, /* 0x0.d87037000 */ - 0.847754716864, /* 0x0.d90673fff */ - 0.850052893157, /* 0x0.d99d10fff */ - 0.852359056469, /* 0x0.da3433fff */ - 0.854668736446, /* 0x0.dacb91fff */ - 0.856986224651, /* 0x0.db6373000 */ - 0.859309315673, /* 0x0.dbfbb1fff */ - 0.861639738080, /* 0x0.dc946bfff */ - 0.863975346095, /* 0x0.dd2d7d000 */ - 0.866317391394, /* 0x0.ddc6f9fff */ - 0.868666708472, /* 0x0.de60f1000 */ - 0.871022939695, /* 0x0.defb5c000 */ - 0.873383641229, /* 0x0.df9611fff */ - 0.875751554968, /* 0x0.e03141000 */ - 0.878126025200, /* 0x0.e0ccde000 */ - 0.880506813521, /* 0x0.e168e4fff */ - 0.882894217966, /* 0x0.e2055afff */ - 0.885287821299, /* 0x0.e2a239000 */ - 0.887686729423, /* 0x0.e33f6ffff */ - 0.890096127973, /* 0x0.e3dd56fff */ - 0.892507970338, /* 0x0.e47b67000 */ - 0.894928157336, /* 0x0.e51a03000 */ - 0.897355020043, /* 0x0.e5b90efff */ - 0.899788379682, /* 0x0.e65888000 */ - 0.902227103705, /* 0x0.e6f85afff */ - 0.904673457151, /* 0x0.e798ae000 */ - 0.907128036008, /* 0x0.e8398afff */ - 0.909585535528, /* 0x0.e8da99000 */ - 0.912051796915, /* 0x0.e97c3a000 */ - 0.914524436003, /* 0x0.ea1e46000 */ - 0.917003571999, /* 0x0.eac0bf000 */ - 0.919490039339, /* 0x0.eb63b2fff */ - 0.921983361257, /* 0x0.ec071a000 */ - 0.924488604054, /* 0x0.ecab48fff */ - 0.926989555360, /* 0x0.ed4f30000 */ - 0.929502844812, /* 0x0.edf3e6000 */ - 0.932021975503, /* 0x0.ee98fdfff */ - 0.934553921208, /* 0x0.ef3eecfff */ - 0.937083780759, /* 0x0.efe4b8fff */ - 0.939624726786, /* 0x0.f08b3f000 */ - 0.942198514924, /* 0x0.f133ebfff */ - 0.944726586343, /* 0x0.f1d99a000 */ - 0.947287976728, /* 0x0.f28176fff */ - 0.949856162070, /* 0x0.f329c5fff */ - 0.952431440345, /* 0x0.f3d28bfff */ - 0.955013573175, /* 0x0.f47bc5000 */ - 0.957603693021, /* 0x0.f52584000 */ - 0.960199773321, /* 0x0.f5cfa7000 */ - 0.962801992906, /* 0x0.f67a31000 */ - 0.965413510788, /* 0x0.f72556fff */ - 0.968030691152, /* 0x0.f7d0dc000 */ - 0.970655620084, /* 0x0.f87ce2fff */ - 0.973290979849, /* 0x0.f92998fff */ - 0.975926160805, /* 0x0.f9d64bfff */ - 0.978571653370, /* 0x0.fa83ac000 */ - 0.981225252139, /* 0x0.fb3193fff */ - 0.983885228626, /* 0x0.fbdfe6fff */ - 0.986552715296, /* 0x0.fc8eb7fff */ - 0.989228487027, /* 0x0.fd3e14000 */ - 0.991909801964, /* 0x0.fdedcd000 */ - 0.994601726545, /* 0x0.fe9e38000 */ - 0.997297704209, /* 0x0.ff4ee6fff */ - 1.000000000000, /* 0x1.000000000 */ - 1.002710938457, /* 0x1.00b1aa000 */ - 1.005429744692, /* 0x1.0163d7ffe */ - 1.008155703526, /* 0x1.02167dffe */ - 1.010888457284, /* 0x1.02c995fff */ - 1.013629436498, /* 0x1.037d38000 */ - 1.016377568250, /* 0x1.043152000 */ - 1.019134163841, /* 0x1.04e5f9ffe */ - 1.021896362316, /* 0x1.059b00000 */ - 1.024668931945, /* 0x1.0650b3ffe */ - 1.027446627635, /* 0x1.0706be001 */ - 1.030234098408, /* 0x1.07bd6bffe */ - 1.033023953416, /* 0x1.087441ffe */ - 1.035824656494, /* 0x1.092bce000 */ - 1.038632392900, /* 0x1.09e3d0001 */ - 1.041450142840, /* 0x1.0a9c79ffe */ - 1.044273972530, /* 0x1.0b558a001 */ - 1.047105550795, /* 0x1.0c0f1c001 */ - 1.049944162390, /* 0x1.0cc924001 */ - 1.052791833895, /* 0x1.0d83c4001 */ - 1.055645227426, /* 0x1.0e3ec3fff */ - 1.058507919326, /* 0x1.0efa60001 */ - 1.061377286898, /* 0x1.0fb66bfff */ - 1.064254641510, /* 0x1.1072fdffe */ - 1.067140102389, /* 0x1.113018000 */ - 1.070034146304, /* 0x1.11edc1fff */ - 1.072937250162, /* 0x1.12ac04001 */ - 1.075843691823, /* 0x1.136a7dfff */ - 1.078760385496, /* 0x1.1429a3ffe */ - 1.081685543070, /* 0x1.14e958000 */ - 1.084618330005, /* 0x1.15a98c000 */ - 1.087556362176, /* 0x1.166a18001 */ - 1.090508937863, /* 0x1.172b98001 */ - 1.093464612954, /* 0x1.17ed4bfff */ - 1.096430182434, /* 0x1.18afa5ffe */ - 1.099401354802, /* 0x1.19725e000 */ - 1.102381587017, /* 0x1.1a35adfff */ - 1.105370759965, /* 0x1.1af994000 */ - 1.108367800686, /* 0x1.1bbdfdffe */ - 1.111373305331, /* 0x1.1c82f6000 */ - 1.114387035385, /* 0x1.1d4878001 */ - 1.117408752440, /* 0x1.1e0e7ffff */ - 1.120437502874, /* 0x1.1ed4fe000 */ - 1.123474478729, /* 0x1.1f9c06000 */ - 1.126521706601, /* 0x1.2063ba001 */ - 1.129574775716, /* 0x1.212bd0001 */ - 1.132638812065, /* 0x1.21f49e000 */ - 1.135709524130, /* 0x1.22bddbffe */ - 1.138789534565, /* 0x1.2387b5fff */ - 1.141876101508, /* 0x1.2451fe000 */ - 1.144971728301, /* 0x1.251cddffe */ - 1.148077130296, /* 0x1.25e861ffe */ - 1.151189923305, /* 0x1.26b462001 */ - 1.154312610610, /* 0x1.278107ffe */ - 1.157440662410, /* 0x1.284e08001 */ - 1.160578370109, /* 0x1.291baa001 */ - 1.163725256932, /* 0x1.29e9e6000 */ - 1.166879892324, /* 0x1.2ab8a3ffe */ - 1.170044302935, /* 0x1.2b8805fff */ - 1.173205971694, /* 0x1.2c5739ffe */ - 1.176397800428, /* 0x1.2d2867ffe */ - 1.179586529747, /* 0x1.2df962001 */ - 1.182784795737, /* 0x1.2ecafbffe */ - 1.185991406414, /* 0x1.2f9d21ffe */ - 1.189206838636, /* 0x1.306fdc001 */ - 1.192430973067, /* 0x1.314328000 */ - 1.195664167430, /* 0x1.32170c001 */ - 1.198906540890, /* 0x1.32eb8a001 */ - 1.202157497408, /* 0x1.33c098000 */ - 1.205416083326, /* 0x1.349625fff */ - 1.208683252332, /* 0x1.356c43fff */ - 1.211961269402, /* 0x1.364318001 */ - 1.215246438983, /* 0x1.371a64000 */ - 1.218539118740, /* 0x1.37f22dffe */ - 1.221847295770, /* 0x1.38cafc000 */ - 1.225158572187, /* 0x1.39a3fdfff */ - 1.228481650325, /* 0x1.3a7dc5ffe */ - 1.231811761846, /* 0x1.3b5803fff */ - 1.235149741144, /* 0x1.3c32c5ffe */ - 1.238499879811, /* 0x1.3d0e53ffe */ - 1.241858124726, /* 0x1.3dea69fff */ - 1.245225191102, /* 0x1.3ec713fff */ - 1.248601436624, /* 0x1.3fa458000 */ - 1.251975655584, /* 0x1.40817a001 */ - 1.255380749731, /* 0x1.4160a2001 */ - 1.258783102010, /* 0x1.423f9bffe */ - 1.262198328973, /* 0x1.431f6e000 */ - 1.265619754780, /* 0x1.43ffa7fff */ - 1.269052743928, /* 0x1.44e0a4001 */ - 1.272490739830, /* 0x1.45c1f4000 */ - 1.275942921659, /* 0x1.46a432001 */ - 1.279397487615, /* 0x1.478697ffe */ - 1.282870173427, /* 0x1.486a2dffe */ - 1.286346316319, /* 0x1.494dfdffe */ - 1.289836049094, /* 0x1.4a32b2001 */ - 1.293333172770, /* 0x1.4b17e1ffe */ - 1.296839594835, /* 0x1.4bfdadfff */ - 1.300354957560, /* 0x1.4ce40fffe */ - 1.303882122055, /* 0x1.4dcb38001 */ - 1.307417988757, /* 0x1.4eb2f1ffe */ - 1.310960650439, /* 0x1.4f9b1dfff */ - 1.314516782746, /* 0x1.50842bfff */ - 1.318079948424, /* 0x1.516daffff */ - 1.321653246888, /* 0x1.5257de000 */ - 1.325237751030, /* 0x1.5342c8001 */ - 1.328829526907, /* 0x1.542e2c000 */ - 1.332433700535, /* 0x1.551a5fffe */ - 1.336045145966, /* 0x1.56070dffe */ - 1.339667558645, /* 0x1.56f473ffe */ - 1.343300342533, /* 0x1.57e287ffe */ - 1.346941947961, /* 0x1.58d130001 */ - 1.350594043714, /* 0x1.59c087ffe */ - 1.354256033883, /* 0x1.5ab085fff */ - 1.357932448365, /* 0x1.5ba175ffe */ - 1.361609339707, /* 0x1.5c926dfff */ - 1.365299344044, /* 0x1.5d8441ffe */ - 1.369003057507, /* 0x1.5e76fc001 */ - 1.372714757920, /* 0x1.5f6a3c000 */ - 1.376437187179, /* 0x1.605e2fffe */ - 1.380165219333, /* 0x1.615282001 */ - 1.383909463864, /* 0x1.6247e3ffe */ - 1.387661933907, /* 0x1.633dd0000 */ - 1.391424179060, /* 0x1.64345fffe */ - 1.395197510706, /* 0x1.652ba9fff */ - 1.399006724329, /* 0x1.66254dffe */ - 1.402773022651, /* 0x1.671c22000 */ - 1.406576037403, /* 0x1.68155dfff */ - 1.410389423392, /* 0x1.690f48001 */ -}; diff --git a/sysdeps/ieee754/flt-32/w_expf_compat.c b/sysdeps/ieee754/flt-32/w_expf_compat.c deleted file mode 100644 index b2be6aa7e1..0000000000 --- a/sysdeps/ieee754/flt-32/w_expf_compat.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* wrapper expf */ -float -__expf (float x) -{ - float z = __ieee754_expf (x); - if (__builtin_expect (!isfinite (z) || z == 0, 0) - && isfinite (x) && _LIB_VERSION != _IEEE_) - return __kernel_standard_f (x, x, 106 + !!signbit (x)); - - return z; -} -hidden_def (__expf) -weak_alias (__expf, expf) diff --git a/sysdeps/ieee754/ieee754.h b/sysdeps/ieee754/ieee754.h deleted file mode 100644 index 5c00d6377a..0000000000 --- a/sysdeps/ieee754/ieee754.h +++ /dev/null @@ -1,198 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _IEEE754_H - -#define _IEEE754_H 1 -#include - -#include - -__BEGIN_DECLS - -union ieee754_float - { - float f; - - /* This is the IEEE 754 single-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int mantissa:23; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:23; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int quiet_nan:1; - unsigned int mantissa:22; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:22; - unsigned int quiet_nan:1; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee_nan; - }; - -#define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */ - - -union ieee754_double - { - double d; - - /* This is the IEEE 754 double-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:20; - unsigned int mantissa1:32; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN -# if __FLOAT_WORD_ORDER == __BIG_ENDIAN - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; - unsigned int mantissa1:32; -# else - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; -# endif -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - unsigned int quiet_nan:1; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:19; - unsigned int mantissa1:32; -#else -# if __FLOAT_WORD_ORDER == __BIG_ENDIAN - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; - unsigned int mantissa1:32; -# else - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; -# endif -#endif - } ieee_nan; - }; - -#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */ - - -union ieee854_long_double - { - long double d; - - /* This is the IEEE 854 double-extended-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:15; - unsigned int empty:16; - unsigned int mantissa0:32; - unsigned int mantissa1:32; -#endif -#if __BYTE_ORDER == __LITTLE_ENDIAN -# if __FLOAT_WORD_ORDER == __BIG_ENDIAN - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty:16; - unsigned int mantissa0:32; - unsigned int mantissa1:32; -# else - unsigned int mantissa1:32; - unsigned int mantissa0:32; - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty:16; -# endif -#endif - } ieee; - - /* This is for NaNs in the IEEE 854 double-extended-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:15; - unsigned int empty:16; - unsigned int one:1; - unsigned int quiet_nan:1; - unsigned int mantissa0:30; - unsigned int mantissa1:32; -#endif -#if __BYTE_ORDER == __LITTLE_ENDIAN -# if __FLOAT_WORD_ORDER == __BIG_ENDIAN - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty:16; - unsigned int mantissa0:30; - unsigned int quiet_nan:1; - unsigned int one:1; - unsigned int mantissa1:32; -# else - unsigned int mantissa1:32; - unsigned int mantissa0:30; - unsigned int quiet_nan:1; - unsigned int one:1; - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty:16; -# endif -#endif - } ieee_nan; - }; - -#define IEEE854_LONG_DOUBLE_BIAS 0x3fff - -__END_DECLS - -#endif /* ieee754.h */ diff --git a/sysdeps/ieee754/k_standard.c b/sysdeps/ieee754/k_standard.c deleted file mode 100644 index b100b3e351..0000000000 --- a/sysdeps/ieee754/k_standard.c +++ /dev/null @@ -1,943 +0,0 @@ -/* @(#)k_standard.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: k_standard.c,v 1.6 1995/05/10 20:46:35 jtc Exp $"; -#endif - -#include -#include -#include - -#include - -#ifndef _USE_WRITE -#include /* fputs(), stderr */ -#define WRITE2(u,v) fputs(u, stderr) -#else /* !defined(_USE_WRITE) */ -#include /* write */ -#define WRITE2(u,v) write(2, u, v) -#undef fflush -#endif /* !defined(_USE_WRITE) */ - -/* XXX gcc versions until now don't delay the 0.0/0.0 division until - runtime but produce NaN at compile time. This is wrong since the - exceptions are not set correctly. */ -#if 0 -static const double zero = 0.0; /* used as const */ -#else -static double zero = 0.0; /* used as const */ -#endif - -/* - * Standard conformance (non-IEEE) on exception cases. - * Mapping: - * 1 -- acos(|x|>1) - * 2 -- asin(|x|>1) - * 3 -- atan2(+-0,+-0) - * 4 -- hypot overflow - * 5 -- cosh overflow - * 6 -- exp overflow - * 7 -- exp underflow - * 8 -- y0(0) - * 9 -- y0(-ve) - * 10-- y1(0) - * 11-- y1(-ve) - * 12-- yn(0) - * 13-- yn(-ve) - * 14-- lgamma(finite) overflow - * 15-- lgamma(-integer) - * 16-- log(0) - * 17-- log(x<0) - * 18-- log10(0) - * 19-- log10(x<0) - * 21-- pow(x,y) overflow - * 22-- pow(x,y) underflow - * 23-- pow(0,negative) - * 24-- pow(neg,non-integral) - * 25-- sinh(finite) overflow - * 26-- sqrt(negative) - * 27-- fmod(x,0) - * 28-- remainder(x,0) - * 29-- acosh(x<1) - * 30-- atanh(|x|>1) - * 31-- atanh(|x|=1) - * 32-- scalb overflow - * 33-- scalb underflow - * 34-- j0(|x|>X_TLOSS) - * 35-- y0(x>X_TLOSS) - * 36-- j1(|x|>X_TLOSS) - * 37-- y1(x>X_TLOSS) - * 38-- jn(|x|>X_TLOSS, n) - * 39-- yn(x>X_TLOSS, n) - * 40-- tgamma(finite) overflow - * 41-- tgamma(-integer) - * 43-- +0**neg - * 44-- exp2 overflow - * 45-- exp2 underflow - * 46-- exp10 overflow - * 47-- exp10 underflow - * 48-- log2(0) - * 49-- log2(x<0) - * 50-- tgamma(+-0) - */ - - -double -__kernel_standard(double x, double y, int type) -{ - struct exception exc; -#ifndef HUGE_VAL /* this is the only routine that uses HUGE_VAL */ -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif - - /* The SVID struct exception uses a field "char *name;". */ -#define CSTR(func) ((char *) (type < 100 \ - ? func \ - : (type < 200 ? func "f" : func "l"))) - -#ifdef _USE_WRITE - (void) fflush(stdout); -#endif - exc.arg1 = x; - exc.arg2 = y; - switch(type) { - case 1: - case 101: - case 201: - /* acos(|x|>1) */ - exc.type = DOMAIN; - exc.name = CSTR ("acos"); - if (_LIB_VERSION == _SVID_) - exc.retval = HUGE; - else - exc.retval = NAN; - if (_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - if(_LIB_VERSION == _SVID_) { - (void) WRITE2("acos: DOMAIN error\n", 19); - } - __set_errno (EDOM); - } - break; - case 2: - case 102: - case 202: - /* asin(|x|>1) */ - exc.type = DOMAIN; - exc.name = CSTR ("asin"); - if (_LIB_VERSION == _SVID_) - exc.retval = HUGE; - else - exc.retval = NAN; - if(_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - if(_LIB_VERSION == _SVID_) { - (void) WRITE2("asin: DOMAIN error\n", 19); - } - __set_errno (EDOM); - } - break; - case 3: - case 103: - case 203: - /* atan2(+-0,+-0) */ - exc.arg1 = y; - exc.arg2 = x; - exc.type = DOMAIN; - exc.name = CSTR ("atan2"); - assert (_LIB_VERSION == _SVID_); - exc.retval = HUGE; - if(_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - if(_LIB_VERSION == _SVID_) { - (void) WRITE2("atan2: DOMAIN error\n", 20); - } - __set_errno (EDOM); - } - break; - case 4: - case 104: - case 204: - /* hypot(finite,finite) overflow */ - exc.type = OVERFLOW; - exc.name = CSTR ("hypot"); - if (_LIB_VERSION == _SVID_) - exc.retval = HUGE; - else - exc.retval = HUGE_VAL; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - __set_errno (ERANGE); - } - break; - case 5: - case 105: - case 205: - /* cosh(finite) overflow */ - exc.type = OVERFLOW; - exc.name = CSTR ("cosh"); - if (_LIB_VERSION == _SVID_) - exc.retval = HUGE; - else - exc.retval = HUGE_VAL; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - __set_errno (ERANGE); - } - break; - case 6: - case 106: - case 206: - /* exp(finite) overflow */ - exc.type = OVERFLOW; - exc.name = CSTR ("exp"); - if (_LIB_VERSION == _SVID_) - exc.retval = HUGE; - else - exc.retval = HUGE_VAL; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - __set_errno (ERANGE); - } - break; - case 7: - case 107: - case 207: - /* exp(finite) underflow */ - exc.type = UNDERFLOW; - exc.name = CSTR ("exp"); - exc.retval = zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - __set_errno (ERANGE); - } - break; - case 8: - case 108: - case 208: - /* y0(0) = -inf */ - exc.type = DOMAIN; /* should be SING for IEEE */ - exc.name = CSTR ("y0"); - if (_LIB_VERSION == _SVID_) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("y0: DOMAIN error\n", 17); - } - __set_errno (EDOM); - } - break; - case 9: - case 109: - case 209: - /* y0(x<0) = NaN */ - exc.type = DOMAIN; - exc.name = CSTR ("y0"); - if (_LIB_VERSION == _SVID_) - exc.retval = -HUGE; - else - exc.retval = NAN; - if (_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("y0: DOMAIN error\n", 17); - } - __set_errno (EDOM); - } - break; - case 10: - case 110: - case 210: - /* y1(0) = -inf */ - exc.type = DOMAIN; /* should be SING for IEEE */ - exc.name = CSTR ("y1"); - if (_LIB_VERSION == _SVID_) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("y1: DOMAIN error\n", 17); - } - __set_errno (EDOM); - } - break; - case 11: - case 111: - case 211: - /* y1(x<0) = NaN */ - exc.type = DOMAIN; - exc.name = CSTR ("y1"); - if (_LIB_VERSION == _SVID_) - exc.retval = -HUGE; - else - exc.retval = NAN; - if (_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("y1: DOMAIN error\n", 17); - } - __set_errno (EDOM); - } - break; - case 12: - case 112: - case 212: - /* yn(n,0) = -inf */ - exc.type = DOMAIN; /* should be SING for IEEE */ - exc.name = CSTR ("yn"); - if (_LIB_VERSION == _SVID_) - exc.retval = -HUGE; - else - exc.retval = ((x < 0 && ((int) x & 1) != 0) - ? HUGE_VAL - : -HUGE_VAL); - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("yn: DOMAIN error\n", 17); - } - __set_errno (EDOM); - } - break; - case 13: - case 113: - case 213: - /* yn(x<0) = NaN */ - exc.type = DOMAIN; - exc.name = CSTR ("yn"); - if (_LIB_VERSION == _SVID_) - exc.retval = -HUGE; - else - exc.retval = NAN; - if (_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("yn: DOMAIN error\n", 17); - } - __set_errno (EDOM); - } - break; - case 14: - case 114: - case 214: - /* lgamma(finite) overflow */ - exc.type = OVERFLOW; - exc.name = CSTR ("lgamma"); - if (_LIB_VERSION == _SVID_) - exc.retval = HUGE; - else - exc.retval = HUGE_VAL; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - __set_errno (ERANGE); - } - break; - case 15: - case 115: - case 215: - /* lgamma(-integer) or lgamma(0) */ - exc.type = SING; - exc.name = CSTR ("lgamma"); - if (_LIB_VERSION == _SVID_) - exc.retval = HUGE; - else - exc.retval = HUGE_VAL; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("lgamma: SING error\n", 19); - } - __set_errno (EDOM); - } - break; - case 16: - case 116: - case 216: - /* log(0) */ - exc.type = SING; - exc.name = CSTR ("log"); - if (_LIB_VERSION == _SVID_) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("log: SING error\n", 16); - } - __set_errno (EDOM); - } - break; - case 17: - case 117: - case 217: - /* log(x<0) */ - exc.type = DOMAIN; - exc.name = CSTR ("log"); - if (_LIB_VERSION == _SVID_) - exc.retval = -HUGE; - else - exc.retval = NAN; - if (_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("log: DOMAIN error\n", 18); - } - __set_errno (EDOM); - } - break; - case 18: - case 118: - case 218: - /* log10(0) */ - exc.type = SING; - exc.name = CSTR ("log10"); - if (_LIB_VERSION == _SVID_) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("log10: SING error\n", 18); - } - __set_errno (EDOM); - } - break; - case 19: - case 119: - case 219: - /* log10(x<0) */ - exc.type = DOMAIN; - exc.name = CSTR ("log10"); - if (_LIB_VERSION == _SVID_) - exc.retval = -HUGE; - else - exc.retval = NAN; - if (_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("log10: DOMAIN error\n", 20); - } - __set_errno (EDOM); - } - break; - case 21: - case 121: - case 221: - /* pow(x,y) overflow */ - exc.type = OVERFLOW; - exc.name = CSTR ("pow"); - if (_LIB_VERSION == _SVID_) { - exc.retval = HUGE; - y *= 0.5; - if(xzero) ? HUGE : -HUGE); - else - exc.retval = ( (x>zero) ? HUGE_VAL : -HUGE_VAL); - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - __set_errno (ERANGE); - } - break; - case 26: - case 126: - case 226: - /* sqrt(x<0) */ - exc.type = DOMAIN; - exc.name = CSTR ("sqrt"); - if (_LIB_VERSION == _SVID_) - exc.retval = zero; - else - exc.retval = zero/zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("sqrt: DOMAIN error\n", 19); - } - __set_errno (EDOM); - } - break; - case 27: - case 127: - case 227: - /* fmod(x,0) */ - exc.type = DOMAIN; - exc.name = CSTR ("fmod"); - if (_LIB_VERSION == _SVID_) - exc.retval = x; - else - exc.retval = zero/zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("fmod: DOMAIN error\n", 20); - } - __set_errno (EDOM); - } - break; - case 28: - case 128: - case 228: - /* remainder(x,0) */ - exc.type = DOMAIN; - exc.name = CSTR ("remainder"); - exc.retval = zero/zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("remainder: DOMAIN error\n", 24); - } - __set_errno (EDOM); - } - break; - case 29: - case 129: - case 229: - /* acosh(x<1) */ - exc.type = DOMAIN; - exc.name = CSTR ("acosh"); - exc.retval = zero/zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("acosh: DOMAIN error\n", 20); - } - __set_errno (EDOM); - } - break; - case 30: - case 130: - case 230: - /* atanh(|x|>1) */ - exc.type = DOMAIN; - exc.name = CSTR ("atanh"); - exc.retval = zero/zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("atanh: DOMAIN error\n", 20); - } - __set_errno (EDOM); - } - break; - case 31: - case 131: - case 231: - /* atanh(|x|=1) */ - exc.type = SING; - exc.name = CSTR ("atanh"); - exc.retval = x/zero; /* sign(x)*inf */ - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("atanh: SING error\n", 18); - } - __set_errno (EDOM); - } - break; - case 32: - case 132: - case 232: - /* scalb overflow; SVID also returns +-HUGE_VAL */ - exc.type = OVERFLOW; - exc.name = CSTR ("scalb"); - exc.retval = x > zero ? HUGE_VAL : -HUGE_VAL; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - __set_errno (ERANGE); - } - break; - case 33: - case 133: - case 233: - /* scalb underflow */ - exc.type = UNDERFLOW; - exc.name = CSTR ("scalb"); - exc.retval = __copysign(zero,x); - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - __set_errno (ERANGE); - } - break; - case 34: - case 134: - case 234: - /* j0(|x|>X_TLOSS) */ - exc.type = TLOSS; - exc.name = CSTR ("j0"); - exc.retval = zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2(exc.name, 2); - (void) WRITE2(": TLOSS error\n", 14); - } - __set_errno (ERANGE); - } - break; - case 35: - case 135: - case 235: - /* y0(x>X_TLOSS) */ - exc.type = TLOSS; - exc.name = CSTR ("y0"); - exc.retval = zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2(exc.name, 2); - (void) WRITE2(": TLOSS error\n", 14); - } - __set_errno (ERANGE); - } - break; - case 36: - case 136: - case 236: - /* j1(|x|>X_TLOSS) */ - exc.type = TLOSS; - exc.name = CSTR ("j1"); - exc.retval = zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2(exc.name, 2); - (void) WRITE2(": TLOSS error\n", 14); - } - __set_errno (ERANGE); - } - break; - case 37: - case 137: - case 237: - /* y1(x>X_TLOSS) */ - exc.type = TLOSS; - exc.name = CSTR ("y1"); - exc.retval = zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2(exc.name, 2); - (void) WRITE2(": TLOSS error\n", 14); - } - __set_errno (ERANGE); - } - break; - case 38: - case 138: - case 238: - /* jn(|x|>X_TLOSS) */ - exc.type = TLOSS; - exc.name = CSTR ("jn"); - exc.retval = zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2(exc.name, 2); - (void) WRITE2(": TLOSS error\n", 14); - } - __set_errno (ERANGE); - } - break; - case 39: - case 139: - case 239: - /* yn(x>X_TLOSS) */ - exc.type = TLOSS; - exc.name = CSTR ("yn"); - exc.retval = zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2(exc.name, 2); - (void) WRITE2(": TLOSS error\n", 14); - } - __set_errno (ERANGE); - } - break; - case 40: - case 140: - case 240: - /* tgamma(finite) overflow */ - exc.type = OVERFLOW; - exc.name = CSTR ("tgamma"); - exc.retval = __copysign (HUGE_VAL, x); - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - __set_errno (ERANGE); - } - break; - case 41: - case 141: - case 241: - /* tgamma(-integer) */ - exc.type = SING; - exc.name = CSTR ("tgamma"); - exc.retval = NAN; - if (_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) { - (void) WRITE2("tgamma: SING error\n", 18); - exc.retval = HUGE_VAL; - } - __set_errno (EDOM); - } - break; - - case 44: - case 144: - case 244: - /* exp(finite) overflow */ - exc.type = OVERFLOW; - exc.name = CSTR ("exp2"); - if (_LIB_VERSION == _SVID_) - exc.retval = HUGE; - else - exc.retval = HUGE_VAL; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - __set_errno (ERANGE); - } - break; - case 45: - case 145: - case 245: - /* exp(finite) underflow */ - exc.type = UNDERFLOW; - exc.name = CSTR ("exp2"); - exc.retval = zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - __set_errno (ERANGE); - } - break; - - case 46: - case 146: - case 246: - /* exp(finite) overflow */ - exc.type = OVERFLOW; - exc.name = CSTR ("exp10"); - if (_LIB_VERSION == _SVID_) - exc.retval = HUGE; - else - exc.retval = HUGE_VAL; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - __set_errno (ERANGE); - } - break; - case 47: - case 147: - case 247: - /* exp(finite) underflow */ - exc.type = UNDERFLOW; - exc.name = CSTR ("exp10"); - exc.retval = zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - __set_errno (ERANGE); - } - break; - case 48: - case 148: - case 248: - /* log2(0) */ - exc.type = SING; - exc.name = CSTR ("log2"); - if (_LIB_VERSION == _SVID_) - exc.retval = -HUGE; - else - exc.retval = -HUGE_VAL; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - __set_errno (EDOM); - } - break; - case 49: - case 149: - case 249: - /* log2(x<0) */ - exc.type = DOMAIN; - exc.name = CSTR ("log2"); - if (_LIB_VERSION == _SVID_) - exc.retval = -HUGE; - else - exc.retval = NAN; - if (_LIB_VERSION == _POSIX_) - __set_errno (EDOM); - else if (!matherr(&exc)) { - __set_errno (EDOM); - } - break; - case 50: - case 150: - case 250: - /* tgamma(+-0) */ - exc.type = SING; - exc.name = CSTR ("tgamma"); - exc.retval = __copysign (HUGE_VAL, x); - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr(&exc)) { - if (_LIB_VERSION == _SVID_) - (void) WRITE2("tgamma: SING error\n", 18); - __set_errno (ERANGE); - } - break; - - /* #### Last used is 50/150/250 ### */ - } - return exc.retval; -} diff --git a/sysdeps/ieee754/k_standardf.c b/sysdeps/ieee754/k_standardf.c deleted file mode 100644 index 678b38d91a..0000000000 --- a/sysdeps/ieee754/k_standardf.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Implement __kernel_standard_f. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -/* Handle errors for a libm function as specified by TYPE (see - comments in k_standard.c for details), with arguments X and Y, - returning the appropriate return value for that function. */ - -float -__kernel_standard_f (float x, float y, int type) -{ - return __kernel_standard (x, y, type); -} diff --git a/sysdeps/ieee754/k_standardl.c b/sysdeps/ieee754/k_standardl.c deleted file mode 100644 index 08d789f942..0000000000 --- a/sysdeps/ieee754/k_standardl.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Implement __kernel_standard_l. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . - - Parts based on k_standard.c from fdlibm: */ - -/* @(#)k_standard.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#include -#include -#include -#include -#include - - -static double zero = 0.0; - -/* Handle errors for a libm function as specified by TYPE (see - comments in k_standard.c for details), with arguments X and Y, - returning the appropriate return value for that function. */ - -long double -__kernel_standard_l (long double x, long double y, int type) -{ - double dx, dy; - struct exception exc; - fenv_t env; - - feholdexcept (&env); - dx = x; - dy = y; - math_force_eval (dx); - math_force_eval (dy); - fesetenv (&env); - - switch (type) - { - case 221: - /* powl (x, y) overflow. */ - exc.arg1 = dx; - exc.arg2 = dy; - exc.type = OVERFLOW; - exc.name = (char *) "powl"; - if (_LIB_VERSION == _SVID_) - { - exc.retval = HUGE; - y *= 0.5; - if (x < zero && __rintl (y) != y) - exc.retval = -HUGE; - } - else - { - exc.retval = HUGE_VAL; - y *= 0.5; - if (x < zero && __rintl (y) != y) - exc.retval = -HUGE_VAL; - } - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr (&exc)) - __set_errno (ERANGE); - return exc.retval; - - case 222: - /* powl (x, y) underflow. */ - exc.arg1 = dx; - exc.arg2 = dy; - exc.type = UNDERFLOW; - exc.name = (char *) "powl"; - exc.retval = zero; - y *= 0.5; - if (x < zero && __rintl (y) != y) - exc.retval = -zero; - if (_LIB_VERSION == _POSIX_) - __set_errno (ERANGE); - else if (!matherr (&exc)) - __set_errno (ERANGE); - return exc.retval; - - default: - return __kernel_standard (dx, dy, type); - } -} diff --git a/sysdeps/ieee754/ldbl-128/Makefile b/sysdeps/ieee754/ldbl-128/Makefile deleted file mode 100644 index 8fd6dad343..0000000000 --- a/sysdeps/ieee754/ldbl-128/Makefile +++ /dev/null @@ -1 +0,0 @@ -long-double-fcts = yes diff --git a/sysdeps/ieee754/ldbl-128/bits/long-double.h b/sysdeps/ieee754/ldbl-128/bits/long-double.h deleted file mode 100644 index baddb2a905..0000000000 --- a/sysdeps/ieee754/ldbl-128/bits/long-double.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Properties of long double type. ldbl-128 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* long double is distinct from double, so there is nothing to - define here. */ diff --git a/sysdeps/ieee754/ldbl-128/e_acoshl.c b/sysdeps/ieee754/ldbl-128/e_acoshl.c deleted file mode 100644 index 7c79d437a2..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_acoshl.c +++ /dev/null @@ -1,61 +0,0 @@ -/* e_acoshl.c -- long double version of e_acosh.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_acoshl(x) - * Method : - * Based on - * acoshl(x) = logl [ x + sqrtl(x*x-1) ] - * we have - * acoshl(x) := logl(x)+ln2, if x is large; else - * acoshl(x) := logl(2x-1/(sqrtl(x*x-1)+x)) if x>2; else - * acoshl(x) := log1pl(t+sqrtl(2.0*t+t*t)); where t=x-1. - * - * Special cases: - * acoshl(x) is NaN with signal if x<1. - * acoshl(NaN) is NaN without signal. - */ - -#include -#include - -static const _Float128 -one = 1.0, -ln2 = L(0.6931471805599453094172321214581766); - -_Float128 -__ieee754_acoshl(_Float128 x) -{ - _Float128 t; - u_int64_t lx; - int64_t hx; - GET_LDOUBLE_WORDS64(hx,lx,x); - if(hx<0x3fff000000000000LL) { /* x < 1 */ - return (x-x)/(x-x); - } else if(hx >=0x4035000000000000LL) { /* x > 2**54 */ - if(hx >=0x7fff000000000000LL) { /* x is inf of NaN */ - return x+x; - } else - return __ieee754_logl(x)+ln2; /* acoshl(huge)=logl(2x) */ - } else if(((hx-0x3fff000000000000LL)|lx)==0) { - return 0; /* acosh(1) = 0 */ - } else if (hx > 0x4000000000000000LL) { /* 2**28 > x > 2 */ - t=x*x; - return __ieee754_logl(2*x-one/(x+__ieee754_sqrtl(t-one))); - } else { /* 1 - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_acosl(x) - * Method : - * acos(x) = pi/2 - asin(x) - * acos(-x) = pi/2 + asin(x) - * For |x| <= 0.375 - * acos(x) = pi/2 - asin(x) - * Between .375 and .5 the approximation is - * acos(0.4375 + x) = acos(0.4375) + x P(x) / Q(x) - * Between .5 and .625 the approximation is - * acos(0.5625 + x) = acos(0.5625) + x rS(x) / sS(x) - * For x > 0.625, - * acos(x) = 2 asin(sqrt((1-x)/2)) - * computed with an extended precision square root in the leading term. - * For x < -0.625 - * acos(x) = pi - 2 asin(sqrt((1-|x|)/2)) - * - * Special cases: - * if x is NaN, return x itself; - * if |x|>1, return NaN with invalid signal. - * - * Functions needed: __ieee754_sqrtl. - */ - -#include -#include - -static const _Float128 - one = 1, - pio2_hi = L(1.5707963267948966192313216916397514420986), - pio2_lo = L(4.3359050650618905123985220130216759843812E-35), - - /* acos(0.5625 + x) = acos(0.5625) + x rS(x) / sS(x) - -0.0625 <= x <= 0.0625 - peak relative error 3.3e-35 */ - - rS0 = L(5.619049346208901520945464704848780243887E0), - rS1 = L(-4.460504162777731472539175700169871920352E1), - rS2 = L(1.317669505315409261479577040530751477488E2), - rS3 = L(-1.626532582423661989632442410808596009227E2), - rS4 = L(3.144806644195158614904369445440583873264E1), - rS5 = L(9.806674443470740708765165604769099559553E1), - rS6 = L(-5.708468492052010816555762842394927806920E1), - rS7 = L(-1.396540499232262112248553357962639431922E1), - rS8 = L(1.126243289311910363001762058295832610344E1), - rS9 = L(4.956179821329901954211277873774472383512E-1), - rS10 = L(-3.313227657082367169241333738391762525780E-1), - - sS0 = L(-4.645814742084009935700221277307007679325E0), - sS1 = L(3.879074822457694323970438316317961918430E1), - sS2 = L(-1.221986588013474694623973554726201001066E2), - sS3 = L(1.658821150347718105012079876756201905822E2), - sS4 = L(-4.804379630977558197953176474426239748977E1), - sS5 = L(-1.004296417397316948114344573811562952793E2), - sS6 = L(7.530281592861320234941101403870010111138E1), - sS7 = L(1.270735595411673647119592092304357226607E1), - sS8 = L(-1.815144839646376500705105967064792930282E1), - sS9 = L(-7.821597334910963922204235247786840828217E-2), - /* 1.000000000000000000000000000000000000000E0 */ - - acosr5625 = L(9.7338991014954640492751132535550279812151E-1), - pimacosr5625 = L(2.1682027434402468335351320579240000860757E0), - - /* acos(0.4375 + x) = acos(0.4375) + x rS(x) / sS(x) - -0.0625 <= x <= 0.0625 - peak relative error 2.1e-35 */ - - P0 = L(2.177690192235413635229046633751390484892E0), - P1 = L(-2.848698225706605746657192566166142909573E1), - P2 = L(1.040076477655245590871244795403659880304E2), - P3 = L(-1.400087608918906358323551402881238180553E2), - P4 = L(2.221047917671449176051896400503615543757E1), - P5 = L(9.643714856395587663736110523917499638702E1), - P6 = L(-5.158406639829833829027457284942389079196E1), - P7 = L(-1.578651828337585944715290382181219741813E1), - P8 = L(1.093632715903802870546857764647931045906E1), - P9 = L(5.448925479898460003048760932274085300103E-1), - P10 = L(-3.315886001095605268470690485170092986337E-1), - Q0 = L(-1.958219113487162405143608843774587557016E0), - Q1 = L(2.614577866876185080678907676023269360520E1), - Q2 = L(-9.990858606464150981009763389881793660938E1), - Q3 = L(1.443958741356995763628660823395334281596E2), - Q4 = L(-3.206441012484232867657763518369723873129E1), - Q5 = L(-1.048560885341833443564920145642588991492E2), - Q6 = L(6.745883931909770880159915641984874746358E1), - Q7 = L(1.806809656342804436118449982647641392951E1), - Q8 = L(-1.770150690652438294290020775359580915464E1), - Q9 = L(-5.659156469628629327045433069052560211164E-1), - /* 1.000000000000000000000000000000000000000E0 */ - - acosr4375 = L(1.1179797320499710475919903296900511518755E0), - pimacosr4375 = L(2.0236129215398221908706530535894517323217E0), - - /* asin(x) = x + x^3 pS(x^2) / qS(x^2) - 0 <= x <= 0.5 - peak relative error 1.9e-35 */ - pS0 = L(-8.358099012470680544198472400254596543711E2), - pS1 = L(3.674973957689619490312782828051860366493E3), - pS2 = L(-6.730729094812979665807581609853656623219E3), - pS3 = L(6.643843795209060298375552684423454077633E3), - pS4 = L(-3.817341990928606692235481812252049415993E3), - pS5 = L(1.284635388402653715636722822195716476156E3), - pS6 = L(-2.410736125231549204856567737329112037867E2), - pS7 = L(2.219191969382402856557594215833622156220E1), - pS8 = L(-7.249056260830627156600112195061001036533E-1), - pS9 = L(1.055923570937755300061509030361395604448E-3), - - qS0 = L(-5.014859407482408326519083440151745519205E3), - qS1 = L(2.430653047950480068881028451580393430537E4), - qS2 = L(-4.997904737193653607449250593976069726962E4), - qS3 = L(5.675712336110456923807959930107347511086E4), - qS4 = L(-3.881523118339661268482937768522572588022E4), - qS5 = L(1.634202194895541569749717032234510811216E4), - qS6 = L(-4.151452662440709301601820849901296953752E3), - qS7 = L(5.956050864057192019085175976175695342168E2), - qS8 = L(-4.175375777334867025769346564600396877176E1); - /* 1.000000000000000000000000000000000000000E0 */ - -_Float128 -__ieee754_acosl (_Float128 x) -{ - _Float128 z, r, w, p, q, s, t, f2; - int32_t ix, sign; - ieee854_long_double_shape_type u; - - u.value = x; - sign = u.parts32.w0; - ix = sign & 0x7fffffff; - u.parts32.w0 = ix; /* |x| */ - if (ix >= 0x3fff0000) /* |x| >= 1 */ - { - if (ix == 0x3fff0000 - && (u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) - { /* |x| == 1 */ - if ((sign & 0x80000000) == 0) - return 0.0; /* acos(1) = 0 */ - else - return (2.0 * pio2_hi) + (2.0 * pio2_lo); /* acos(-1)= pi */ - } - return (x - x) / (x - x); /* acos(|x| > 1) is NaN */ - } - else if (ix < 0x3ffe0000) /* |x| < 0.5 */ - { - if (ix < 0x3f8e0000) /* |x| < 2**-113 */ - return pio2_hi + pio2_lo; - if (ix < 0x3ffde000) /* |x| < .4375 */ - { - /* Arcsine of x. */ - z = x * x; - p = (((((((((pS9 * z - + pS8) * z - + pS7) * z - + pS6) * z - + pS5) * z - + pS4) * z - + pS3) * z - + pS2) * z - + pS1) * z - + pS0) * z; - q = (((((((( z - + qS8) * z - + qS7) * z - + qS6) * z - + qS5) * z - + qS4) * z - + qS3) * z - + qS2) * z - + qS1) * z - + qS0; - r = x + x * p / q; - z = pio2_hi - (r - pio2_lo); - return z; - } - /* .4375 <= |x| < .5 */ - t = u.value - L(0.4375); - p = ((((((((((P10 * t - + P9) * t - + P8) * t - + P7) * t - + P6) * t - + P5) * t - + P4) * t - + P3) * t - + P2) * t - + P1) * t - + P0) * t; - - q = (((((((((t - + Q9) * t - + Q8) * t - + Q7) * t - + Q6) * t - + Q5) * t - + Q4) * t - + Q3) * t - + Q2) * t - + Q1) * t - + Q0; - r = p / q; - if (sign & 0x80000000) - r = pimacosr4375 - r; - else - r = acosr4375 + r; - return r; - } - else if (ix < 0x3ffe4000) /* |x| < 0.625 */ - { - t = u.value - L(0.5625); - p = ((((((((((rS10 * t - + rS9) * t - + rS8) * t - + rS7) * t - + rS6) * t - + rS5) * t - + rS4) * t - + rS3) * t - + rS2) * t - + rS1) * t - + rS0) * t; - - q = (((((((((t - + sS9) * t - + sS8) * t - + sS7) * t - + sS6) * t - + sS5) * t - + sS4) * t - + sS3) * t - + sS2) * t - + sS1) * t - + sS0; - if (sign & 0x80000000) - r = pimacosr5625 - p / q; - else - r = acosr5625 + p / q; - return r; - } - else - { /* |x| >= .625 */ - z = (one - u.value) * 0.5; - s = __ieee754_sqrtl (z); - /* Compute an extended precision square root from - the Newton iteration s -> 0.5 * (s + z / s). - The change w from s to the improved value is - w = 0.5 * (s + z / s) - s = (s^2 + z)/2s - s = (z - s^2)/2s. - Express s = f1 + f2 where f1 * f1 is exactly representable. - w = (z - s^2)/2s = (z - f1^2 - 2 f1 f2 - f2^2)/2s . - s + w has extended precision. */ - u.value = s; - u.parts32.w2 = 0; - u.parts32.w3 = 0; - f2 = s - u.value; - w = z - u.value * u.value; - w = w - 2.0 * u.value * f2; - w = w - f2 * f2; - w = w / (2.0 * s); - /* Arcsine of s. */ - p = (((((((((pS9 * z - + pS8) * z - + pS7) * z - + pS6) * z - + pS5) * z - + pS4) * z - + pS3) * z - + pS2) * z - + pS1) * z - + pS0) * z; - q = (((((((( z - + qS8) * z - + qS7) * z - + qS6) * z - + qS5) * z - + qS4) * z - + qS3) * z - + qS2) * z - + qS1) * z - + qS0; - r = s + (w + s * p / q); - - if (sign & 0x80000000) - w = pio2_hi + (pio2_lo - r); - else - w = r; - return 2.0 * w; - } -} -strong_alias (__ieee754_acosl, __acosl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_asinl.c b/sysdeps/ieee754/ldbl-128/e_asinl.c deleted file mode 100644 index 1edf1c05a1..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_asinl.c +++ /dev/null @@ -1,258 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - Long double expansions are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under the - following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_asin(x) - * Method : - * Since asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ... - * we approximate asin(x) on [0,0.5] by - * asin(x) = x + x*x^2*R(x^2) - * Between .5 and .625 the approximation is - * asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x) - * For x in [0.625,1] - * asin(x) = pi/2-2*asin(sqrt((1-x)/2)) - * Let y = (1-x), z = y/2, s := sqrt(z), and pio2_hi+pio2_lo=pi/2; - * then for x>0.98 - * asin(x) = pi/2 - 2*(s+s*z*R(z)) - * = pio2_hi - (2*(s+s*z*R(z)) - pio2_lo) - * For x<=0.98, let pio4_hi = pio2_hi/2, then - * f = hi part of s; - * c = sqrt(z) - f = (z-f*f)/(s+f) ...f+c=sqrt(z) - * and - * asin(x) = pi/2 - 2*(s+s*z*R(z)) - * = pio4_hi+(pio4-2s)-(2s*z*R(z)-pio2_lo) - * = pio4_hi+(pio4-2f)-(2s*z*R(z)-(pio2_lo+2c)) - * - * Special cases: - * if x is NaN, return x itself; - * if |x|>1, return NaN with invalid signal. - * - */ - - -#include -#include -#include - -static const _Float128 - one = 1, - huge = L(1.0e+4932), - pio2_hi = L(1.5707963267948966192313216916397514420986), - pio2_lo = L(4.3359050650618905123985220130216759843812E-35), - pio4_hi = L(7.8539816339744830961566084581987569936977E-1), - - /* coefficient for R(x^2) */ - - /* asin(x) = x + x^3 pS(x^2) / qS(x^2) - 0 <= x <= 0.5 - peak relative error 1.9e-35 */ - pS0 = L(-8.358099012470680544198472400254596543711E2), - pS1 = L(3.674973957689619490312782828051860366493E3), - pS2 = L(-6.730729094812979665807581609853656623219E3), - pS3 = L(6.643843795209060298375552684423454077633E3), - pS4 = L(-3.817341990928606692235481812252049415993E3), - pS5 = L(1.284635388402653715636722822195716476156E3), - pS6 = L(-2.410736125231549204856567737329112037867E2), - pS7 = L(2.219191969382402856557594215833622156220E1), - pS8 = L(-7.249056260830627156600112195061001036533E-1), - pS9 = L(1.055923570937755300061509030361395604448E-3), - - qS0 = L(-5.014859407482408326519083440151745519205E3), - qS1 = L(2.430653047950480068881028451580393430537E4), - qS2 = L(-4.997904737193653607449250593976069726962E4), - qS3 = L(5.675712336110456923807959930107347511086E4), - qS4 = L(-3.881523118339661268482937768522572588022E4), - qS5 = L(1.634202194895541569749717032234510811216E4), - qS6 = L(-4.151452662440709301601820849901296953752E3), - qS7 = L(5.956050864057192019085175976175695342168E2), - qS8 = L(-4.175375777334867025769346564600396877176E1), - /* 1.000000000000000000000000000000000000000E0 */ - - /* asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x) - -0.0625 <= x <= 0.0625 - peak relative error 3.3e-35 */ - rS0 = L(-5.619049346208901520945464704848780243887E0), - rS1 = L(4.460504162777731472539175700169871920352E1), - rS2 = L(-1.317669505315409261479577040530751477488E2), - rS3 = L(1.626532582423661989632442410808596009227E2), - rS4 = L(-3.144806644195158614904369445440583873264E1), - rS5 = L(-9.806674443470740708765165604769099559553E1), - rS6 = L(5.708468492052010816555762842394927806920E1), - rS7 = L(1.396540499232262112248553357962639431922E1), - rS8 = L(-1.126243289311910363001762058295832610344E1), - rS9 = L(-4.956179821329901954211277873774472383512E-1), - rS10 = L(3.313227657082367169241333738391762525780E-1), - - sS0 = L(-4.645814742084009935700221277307007679325E0), - sS1 = L(3.879074822457694323970438316317961918430E1), - sS2 = L(-1.221986588013474694623973554726201001066E2), - sS3 = L(1.658821150347718105012079876756201905822E2), - sS4 = L(-4.804379630977558197953176474426239748977E1), - sS5 = L(-1.004296417397316948114344573811562952793E2), - sS6 = L(7.530281592861320234941101403870010111138E1), - sS7 = L(1.270735595411673647119592092304357226607E1), - sS8 = L(-1.815144839646376500705105967064792930282E1), - sS9 = L(-7.821597334910963922204235247786840828217E-2), - /* 1.000000000000000000000000000000000000000E0 */ - - asinr5625 = L(5.9740641664535021430381036628424864397707E-1); - - - -_Float128 -__ieee754_asinl (_Float128 x) -{ - _Float128 t, w, p, q, c, r, s; - int32_t ix, sign, flag; - ieee854_long_double_shape_type u; - - flag = 0; - u.value = x; - sign = u.parts32.w0; - ix = sign & 0x7fffffff; - u.parts32.w0 = ix; /* |x| */ - if (ix >= 0x3fff0000) /* |x|>= 1 */ - { - if (ix == 0x3fff0000 - && (u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) - /* asin(1)=+-pi/2 with inexact */ - return x * pio2_hi + x * pio2_lo; - return (x - x) / (x - x); /* asin(|x|>1) is NaN */ - } - else if (ix < 0x3ffe0000) /* |x| < 0.5 */ - { - if (ix < 0x3fc60000) /* |x| < 2**-57 */ - { - math_check_force_underflow (x); - _Float128 force_inexact = huge + x; - math_force_eval (force_inexact); - return x; /* return x with inexact if x!=0 */ - } - else - { - t = x * x; - /* Mark to use pS, qS later on. */ - flag = 1; - } - } - else if (ix < 0x3ffe4000) /* 0.625 */ - { - t = u.value - 0.5625; - p = ((((((((((rS10 * t - + rS9) * t - + rS8) * t - + rS7) * t - + rS6) * t - + rS5) * t - + rS4) * t - + rS3) * t - + rS2) * t - + rS1) * t - + rS0) * t; - - q = ((((((((( t - + sS9) * t - + sS8) * t - + sS7) * t - + sS6) * t - + sS5) * t - + sS4) * t - + sS3) * t - + sS2) * t - + sS1) * t - + sS0; - t = asinr5625 + p / q; - if ((sign & 0x80000000) == 0) - return t; - else - return -t; - } - else - { - /* 1 > |x| >= 0.625 */ - w = one - u.value; - t = w * 0.5; - } - - p = (((((((((pS9 * t - + pS8) * t - + pS7) * t - + pS6) * t - + pS5) * t - + pS4) * t - + pS3) * t - + pS2) * t - + pS1) * t - + pS0) * t; - - q = (((((((( t - + qS8) * t - + qS7) * t - + qS6) * t - + qS5) * t - + qS4) * t - + qS3) * t - + qS2) * t - + qS1) * t - + qS0; - - if (flag) /* 2^-57 < |x| < 0.5 */ - { - w = p / q; - return x + x * w; - } - - s = __ieee754_sqrtl (t); - if (ix >= 0x3ffef333) /* |x| > 0.975 */ - { - w = p / q; - t = pio2_hi - (2.0 * (s + s * w) - pio2_lo); - } - else - { - u.value = s; - u.parts32.w3 = 0; - u.parts32.w2 = 0; - w = u.value; - c = (t - w * w) / (s + w); - r = p / q; - p = 2.0 * s * r - (pio2_lo - 2.0 * c); - q = pio4_hi - 2.0 * w; - t = pio4_hi - (p - q); - } - - if ((sign & 0x80000000) == 0) - return t; - else - return -t; -} -strong_alias (__ieee754_asinl, __asinl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_atan2l.c b/sysdeps/ieee754/ldbl-128/e_atan2l.c deleted file mode 100644 index faecd1a63b..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_atan2l.c +++ /dev/null @@ -1,122 +0,0 @@ -/* e_atan2l.c -- long double version of e_atan2.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_atan2l(y,x) - * Method : - * 1. Reduce y to positive by atan2l(y,x)=-atan2l(-y,x). - * 2. Reduce x to positive by (if x and y are unexceptional): - * ARG (x+iy) = arctan(y/x) ... if x > 0, - * ARG (x+iy) = pi - arctan[y/(-x)] ... if x < 0, - * - * Special cases: - * - * ATAN2((anything), NaN ) is NaN; - * ATAN2(NAN , (anything) ) is NaN; - * ATAN2(+-0, +(anything but NaN)) is +-0 ; - * ATAN2(+-0, -(anything but NaN)) is +-pi ; - * ATAN2(+-(anything but 0 and NaN), 0) is +-pi/2; - * ATAN2(+-(anything but INF and NaN), +INF) is +-0 ; - * ATAN2(+-(anything but INF and NaN), -INF) is +-pi; - * ATAN2(+-INF,+INF ) is +-pi/4 ; - * ATAN2(+-INF,-INF ) is +-3pi/4; - * ATAN2(+-INF, (anything but,0,NaN, and INF)) is +-pi/2; - * - * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough - * to produce the hexadecimal values shown. - */ - -#include -#include - -static const _Float128 -tiny = L(1.0e-4900), -zero = 0.0, -pi_o_4 = L(7.85398163397448309615660845819875699e-01), /* 3ffe921fb54442d18469898cc51701b8 */ -pi_o_2 = L(1.57079632679489661923132169163975140e+00), /* 3fff921fb54442d18469898cc51701b8 */ -pi = L(3.14159265358979323846264338327950280e+00), /* 4000921fb54442d18469898cc51701b8 */ -pi_lo = L(8.67181013012378102479704402604335225e-35); /* 3f8dcd129024e088a67cc74020bbea64 */ - -_Float128 -__ieee754_atan2l(_Float128 y, _Float128 x) -{ - _Float128 z; - int64_t k,m,hx,hy,ix,iy; - u_int64_t lx,ly; - - GET_LDOUBLE_WORDS64(hx,lx,x); - ix = hx&0x7fffffffffffffffLL; - GET_LDOUBLE_WORDS64(hy,ly,y); - iy = hy&0x7fffffffffffffffLL; - if(((ix|((lx|-lx)>>63))>0x7fff000000000000LL)|| - ((iy|((ly|-ly)>>63))>0x7fff000000000000LL)) /* x or y is NaN */ - return x+y; - if(((hx-0x3fff000000000000LL)|lx)==0) return __atanl(y); /* x=1.0L */ - m = ((hy>>63)&1)|((hx>>62)&2); /* 2*sign(x)+sign(y) */ - - /* when y = 0 */ - if((iy|ly)==0) { - switch(m) { - case 0: - case 1: return y; /* atan(+-0,+anything)=+-0 */ - case 2: return pi+tiny;/* atan(+0,-anything) = pi */ - case 3: return -pi-tiny;/* atan(-0,-anything) =-pi */ - } - } - /* when x = 0 */ - if((ix|lx)==0) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny; - - /* when x is INF */ - if(ix==0x7fff000000000000LL) { - if(iy==0x7fff000000000000LL) { - switch(m) { - case 0: return pi_o_4+tiny;/* atan(+INF,+INF) */ - case 1: return -pi_o_4-tiny;/* atan(-INF,+INF) */ - case 2: return 3*pi_o_4+tiny;/*atan(+INF,-INF)*/ - case 3: return -3*pi_o_4-tiny;/*atan(-INF,-INF)*/ - } - } else { - switch(m) { - case 0: return zero ; /* atan(+...,+INF) */ - case 1: return -zero ; /* atan(-...,+INF) */ - case 2: return pi+tiny ; /* atan(+...,-INF) */ - case 3: return -pi-tiny ; /* atan(-...,-INF) */ - } - } - } - /* when y is INF */ - if(iy==0x7fff000000000000LL) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny; - - /* compute y/x */ - k = (iy-ix)>>48; - if(k > 120) z=pi_o_2+L(0.5)*pi_lo; /* |y/x| > 2**120 */ - else if(hx<0&&k<-120) z=0; /* |y|/x < -2**120 */ - else z=__atanl(fabsl(y/x)); /* safe to do y/x */ - switch (m) { - case 0: return z ; /* atan(+,+) */ - case 1: { - u_int64_t zh; - GET_LDOUBLE_MSW64(zh,z); - SET_LDOUBLE_MSW64(z,zh ^ 0x8000000000000000ULL); - } - return z ; /* atan(-,+) */ - case 2: return pi-(z-pi_lo);/* atan(+,-) */ - default: /* case 3 */ - return (z-pi_lo)-pi;/* atan(-,-) */ - } -} -strong_alias (__ieee754_atan2l, __atan2l_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_atanhl.c b/sysdeps/ieee754/ldbl-128/e_atanhl.c deleted file mode 100644 index 3905af4dfc..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_atanhl.c +++ /dev/null @@ -1,74 +0,0 @@ -/* s_atanhl.c -- long double version of s_atan.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_atanhl(x) - * Method : - * 1.Reduced x to positive by atanh(-x) = -atanh(x) - * 2.For x>=0.5 - * 1 2x x - * atanhl(x) = --- * log(1 + -------) = 0.5 * log1p(2 * --------) - * 2 1 - x 1 - x - * - * For x<0.5 - * atanhl(x) = 0.5*log1pl(2x+2x*x/(1-x)) - * - * Special cases: - * atanhl(x) is NaN if |x| > 1 with signal; - * atanhl(NaN) is that NaN with no signal; - * atanhl(+-1) is +-INF with signal. - * - */ - -#include -#include -#include - -static const _Float128 one = 1, huge = L(1e4900); - -static const _Float128 zero = 0; - -_Float128 -__ieee754_atanhl(_Float128 x) -{ - _Float128 t; - u_int32_t jx, ix; - ieee854_long_double_shape_type u; - - u.value = x; - jx = u.parts32.w0; - ix = jx & 0x7fffffff; - u.parts32.w0 = ix; - if (ix >= 0x3fff0000) /* |x| >= 1.0 or infinity or NaN */ - { - if (u.value == one) - return x/zero; - else - return (x-x)/(x-x); - } - if(ix<0x3fc60000 && (huge+x)>zero) /* x < 2^-57 */ - { - math_check_force_underflow (x); - return x; - } - - if(ix<0x3ffe0000) { /* x < 0.5 */ - t = u.value+u.value; - t = 0.5*__log1pl(t+t*u.value/(one-u.value)); - } else - t = 0.5*__log1pl((u.value+u.value)/(one-u.value)); - if(jx & 0x80000000) return -t; else return t; -} -strong_alias (__ieee754_atanhl, __atanhl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_coshl.c b/sysdeps/ieee754/ldbl-128/e_coshl.c deleted file mode 100644 index 70a2fe3e84..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_coshl.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Changes for 128-bit long double are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_coshl(x) - * Method : - * mathematically coshl(x) if defined to be (exp(x)+exp(-x))/2 - * 1. Replace x by |x| (coshl(x) = coshl(-x)). - * 2. - * [ exp(x) - 1 ]^2 - * 0 <= x <= ln2/2 : coshl(x) := 1 + ------------------- - * 2*exp(x) - * - * exp(x) + 1/exp(x) - * ln2/2 <= x <= 22 : coshl(x) := ------------------- - * 2 - * 22 <= x <= lnovft : coshl(x) := expl(x)/2 - * lnovft <= x <= ln2ovft: coshl(x) := expl(x/2)/2 * expl(x/2) - * ln2ovft < x : coshl(x) := huge*huge (overflow) - * - * Special cases: - * coshl(x) is |x| if x is +INF, -INF, or NaN. - * only coshl(0)=1 is exact for finite x. - */ - -#include -#include - -static const _Float128 one = 1.0, half = 0.5, huge = L(1.0e4900), -ovf_thresh = L(1.1357216553474703894801348310092223067821E4); - -_Float128 -__ieee754_coshl (_Float128 x) -{ - _Float128 t, w; - int32_t ex; - ieee854_long_double_shape_type u; - - u.value = x; - ex = u.parts32.w0 & 0x7fffffff; - - /* Absolute value of x. */ - u.parts32.w0 = ex; - - /* x is INF or NaN */ - if (ex >= 0x7fff0000) - return x * x; - - /* |x| in [0,0.5*ln2], return 1+expm1l(|x|)^2/(2*expl(|x|)) */ - if (ex < 0x3ffd62e4) /* 0.3465728759765625 */ - { - if (ex < 0x3fb80000) /* |x| < 2^-116 */ - return one; /* cosh(tiny) = 1 */ - t = __expm1l (u.value); - w = one + t; - - return one + (t * t) / (w + w); - } - - /* |x| in [0.5*ln2,40], return (exp(|x|)+1/exp(|x|)/2; */ - if (ex < 0x40044000) - { - t = __ieee754_expl (u.value); - return half * t + half / t; - } - - /* |x| in [22, ln(maxdouble)] return half*exp(|x|) */ - if (ex <= 0x400c62e3) /* 11356.375 */ - return half * __ieee754_expl (u.value); - - /* |x| in [log(maxdouble), overflowthresold] */ - if (u.value <= ovf_thresh) - { - w = __ieee754_expl (half * u.value); - t = half * w; - return t * w; - } - - /* |x| > overflowthresold, cosh(x) overflow */ - return huge * huge; -} -strong_alias (__ieee754_coshl, __coshl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_exp10l.c b/sysdeps/ieee754/ldbl-128/e_exp10l.c deleted file mode 100644 index 05a470fa39..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_exp10l.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const _Float128 log10_high = L(0x2.4d763776aaa2bp0); -static const _Float128 log10_low = L(0x5.ba95b58ae0b4c28a38a3fb3e7698p-60); - -_Float128 -__ieee754_exp10l (_Float128 arg) -{ - ieee854_long_double_shape_type u; - _Float128 arg_high, arg_low; - _Float128 exp_high, exp_low; - - if (!isfinite (arg)) - return __ieee754_expl (arg); - if (arg < LDBL_MIN_10_EXP - LDBL_DIG - 10) - return LDBL_MIN * LDBL_MIN; - else if (arg > LDBL_MAX_10_EXP + 1) - return LDBL_MAX * LDBL_MAX; - else if (fabsl (arg) < L(0x1p-116)) - return 1; - - u.value = arg; - u.parts64.lsw &= 0xfe00000000000000LL; - arg_high = u.value; - arg_low = arg - arg_high; - exp_high = arg_high * log10_high; - exp_low = arg_high * log10_low + arg_low * M_LN10l; - return __ieee754_expl (exp_high) * __ieee754_expl (exp_low); -} -strong_alias (__ieee754_exp10l, __exp10l_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_expl.c b/sysdeps/ieee754/ldbl-128/e_expl.c deleted file mode 100644 index 15639d1da1..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_expl.c +++ /dev/null @@ -1,253 +0,0 @@ -/* Quad-precision floating point e^x. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - Partly based on double-precision code - by Geoffrey Keating - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The basic design here is from - Abraham Ziv, "Fast Evaluation of Elementary Mathematical Functions with - Correctly Rounded Last Bit", ACM Trans. Math. Soft., 17 (3), September 1991, - pp. 410-423. - - We work with number pairs where the first number is the high part and - the second one is the low part. Arithmetic with the high part numbers must - be exact, without any roundoff errors. - - The input value, X, is written as - X = n * ln(2)_0 + arg1[t1]_0 + arg2[t2]_0 + x - - n * ln(2)_1 + arg1[t1]_1 + arg2[t2]_1 + xl - - where: - - n is an integer, 16384 >= n >= -16495; - - ln(2)_0 is the first 93 bits of ln(2), and |ln(2)_0-ln(2)-ln(2)_1| < 2^-205 - - t1 is an integer, 89 >= t1 >= -89 - - t2 is an integer, 65 >= t2 >= -65 - - |arg1[t1]-t1/256.0| < 2^-53 - - |arg2[t2]-t2/32768.0| < 2^-53 - - x + xl is whatever is left, |x + xl| < 2^-16 + 2^-53 - - Then e^x is approximated as - - e^x = 2^n_1 ( 2^n_0 e^(arg1[t1]_0 + arg1[t1]_1) e^(arg2[t2]_0 + arg2[t2]_1) - + 2^n_0 e^(arg1[t1]_0 + arg1[t1]_1) e^(arg2[t2]_0 + arg2[t2]_1) - * p (x + xl + n * ln(2)_1)) - where: - - p(x) is a polynomial approximating e(x)-1 - - e^(arg1[t1]_0 + arg1[t1]_1) is obtained from a table - - e^(arg2[t2]_0 + arg2[t2]_1) likewise - - n_1 + n_0 = n, so that |n_0| < -LDBL_MIN_EXP-1. - - If it happens that n_1 == 0 (this is the usual case), that multiplication - is omitted. - */ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif -#include -#include -#include -#include -#include -#include -#include -#include "t_expl.h" - -static const _Float128 C[] = { -/* Smallest integer x for which e^x overflows. */ -#define himark C[0] - L(11356.523406294143949491931077970765), - -/* Largest integer x for which e^x underflows. */ -#define lomark C[1] -L(-11433.4627433362978788372438434526231), - -/* 3x2^96 */ -#define THREEp96 C[2] - L(59421121885698253195157962752.0), - -/* 3x2^103 */ -#define THREEp103 C[3] - L(30423614405477505635920876929024.0), - -/* 3x2^111 */ -#define THREEp111 C[4] - L(7788445287802241442795744493830144.0), - -/* 1/ln(2) */ -#define M_1_LN2 C[5] - L(1.44269504088896340735992468100189204), - -/* first 93 bits of ln(2) */ -#define M_LN2_0 C[6] - L(0.693147180559945309417232121457981864), - -/* ln2_0 - ln(2) */ -#define M_LN2_1 C[7] -L(-1.94704509238074995158795957333327386E-31), - -/* very small number */ -#define TINY C[8] - L(1.0e-4900), - -/* 2^16383 */ -#define TWO16383 C[9] - L(5.94865747678615882542879663314003565E+4931), - -/* 256 */ -#define TWO8 C[10] - 256, - -/* 32768 */ -#define TWO15 C[11] - 32768, - -/* Chebyshev polynom coefficients for (exp(x)-1)/x */ -#define P1 C[12] -#define P2 C[13] -#define P3 C[14] -#define P4 C[15] -#define P5 C[16] -#define P6 C[17] - L(0.5), - L(1.66666666666666666666666666666666683E-01), - L(4.16666666666666666666654902320001674E-02), - L(8.33333333333333333333314659767198461E-03), - L(1.38888888889899438565058018857254025E-03), - L(1.98412698413981650382436541785404286E-04), -}; - -_Float128 -__ieee754_expl (_Float128 x) -{ - /* Check for usual case. */ - if (isless (x, himark) && isgreater (x, lomark)) - { - int tval1, tval2, unsafe, n_i; - _Float128 x22, n, t, result, xl; - union ieee854_long_double ex2_u, scale_u; - fenv_t oldenv; - - feholdexcept (&oldenv); -#ifdef FE_TONEAREST - fesetround (FE_TONEAREST); -#endif - - /* Calculate n. */ - n = x * M_1_LN2 + THREEp111; - n -= THREEp111; - x = x - n * M_LN2_0; - xl = n * M_LN2_1; - - /* Calculate t/256. */ - t = x + THREEp103; - t -= THREEp103; - - /* Compute tval1 = t. */ - tval1 = (int) (t * TWO8); - - x -= __expl_table[T_EXPL_ARG1+2*tval1]; - xl -= __expl_table[T_EXPL_ARG1+2*tval1+1]; - - /* Calculate t/32768. */ - t = x + THREEp96; - t -= THREEp96; - - /* Compute tval2 = t. */ - tval2 = (int) (t * TWO15); - - x -= __expl_table[T_EXPL_ARG2+2*tval2]; - xl -= __expl_table[T_EXPL_ARG2+2*tval2+1]; - - x = x + xl; - - /* Compute ex2 = 2^n_0 e^(argtable[tval1]) e^(argtable[tval2]). */ - ex2_u.d = __expl_table[T_EXPL_RES1 + tval1] - * __expl_table[T_EXPL_RES2 + tval2]; - n_i = (int)n; - /* 'unsafe' is 1 iff n_1 != 0. */ - unsafe = abs(n_i) >= 15000; - ex2_u.ieee.exponent += n_i >> unsafe; - - /* Compute scale = 2^n_1. */ - scale_u.d = 1; - scale_u.ieee.exponent += n_i - (n_i >> unsafe); - - /* Approximate e^x2 - 1, using a seventh-degree polynomial, - with maximum error in [-2^-16-2^-53,2^-16+2^-53] - less than 4.8e-39. */ - x22 = x + x*x*(P1+x*(P2+x*(P3+x*(P4+x*(P5+x*P6))))); - - /* Return result. */ - fesetenv (&oldenv); - - result = x22 * ex2_u.d + ex2_u.d; - - /* Now we can test whether the result is ultimate or if we are unsure. - In the later case we should probably call a mpn based routine to give - the ultimate result. - Empirically, this routine is already ultimate in about 99.9986% of - cases, the test below for the round to nearest case will be false - in ~ 99.9963% of cases. - Without proc2 routine maximum error which has been seen is - 0.5000262 ulp. - - union ieee854_long_double ex3_u; - - #ifdef FE_TONEAREST - fesetround (FE_TONEAREST); - #endif - ex3_u.d = (result - ex2_u.d) - x22 * ex2_u.d; - ex2_u.d = result; - ex3_u.ieee.exponent += LDBL_MANT_DIG + 15 + IEEE854_LONG_DOUBLE_BIAS - - ex2_u.ieee.exponent; - n_i = abs (ex3_u.d); - n_i = (n_i + 1) / 2; - fesetenv (&oldenv); - #ifdef FE_TONEAREST - if (fegetround () == FE_TONEAREST) - n_i -= 0x4000; - #endif - if (!n_i) { - return __ieee754_expl_proc2 (origx); - } - */ - if (!unsafe) - return result; - else - { - result *= scale_u.d; - math_check_force_underflow_nonneg (result); - return result; - } - } - /* Exceptional cases: */ - else if (isless (x, himark)) - { - if (isinf (x)) - /* e^-inf == 0, with no error. */ - return 0; - else - /* Underflow */ - return TINY * TINY; - } - else - /* Return x, if x is a NaN or Inf; or overflow, otherwise. */ - return TWO16383*x; -} -strong_alias (__ieee754_expl, __expl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_fmodl.c b/sysdeps/ieee754/ldbl-128/e_fmodl.c deleted file mode 100644 index f27cd4f8ff..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_fmodl.c +++ /dev/null @@ -1,131 +0,0 @@ -/* e_fmodl.c -- long double version of e_fmod.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ -/* - * ==================================================== - * Copyright (C) 1993, 2011 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * __ieee754_fmodl(x,y) - * Return x mod y in exact arithmetic - * Method: shift and subtract - */ - -#include -#include - -static const _Float128 one = 1.0, Zero[] = {0.0, -0.0,}; - -_Float128 -__ieee754_fmodl (_Float128 x, _Float128 y) -{ - int64_t n,hx,hy,hz,ix,iy,sx,i; - u_int64_t lx,ly,lz; - - GET_LDOUBLE_WORDS64(hx,lx,x); - GET_LDOUBLE_WORDS64(hy,ly,y); - sx = hx&0x8000000000000000ULL; /* sign of x */ - hx ^=sx; /* |x| */ - hy &= 0x7fffffffffffffffLL; /* |y| */ - - /* purge off exception values */ - if((hy|ly)==0||(hx>=0x7fff000000000000LL)|| /* y=0,or x not finite */ - ((hy|((ly|-ly)>>63))>0x7fff000000000000LL)) /* or y is NaN */ - return (x*y)/(x*y); - if(hx<=hy) { - if((hx>63]; /* |x|=|y| return x*0*/ - } - - /* determine ix = ilogb(x) */ - if(hx<0x0001000000000000LL) { /* subnormal x */ - if(hx==0) { - for (ix = -16431, i=lx; i>0; i<<=1) ix -=1; - } else { - for (ix = -16382, i=hx<<15; i>0; i<<=1) ix -=1; - } - } else ix = (hx>>48)-0x3fff; - - /* determine iy = ilogb(y) */ - if(hy<0x0001000000000000LL) { /* subnormal y */ - if(hy==0) { - for (iy = -16431, i=ly; i>0; i<<=1) iy -=1; - } else { - for (iy = -16382, i=hy<<15; i>0; i<<=1) iy -=1; - } - } else iy = (hy>>48)-0x3fff; - - /* set up {hx,lx}, {hy,ly} and align y to x */ - if(ix >= -16382) - hx = 0x0001000000000000LL|(0x0000ffffffffffffLL&hx); - else { /* subnormal x, shift x to normal */ - n = -16382-ix; - if(n<=63) { - hx = (hx<>(64-n)); - lx <<= n; - } else { - hx = lx<<(n-64); - lx = 0; - } - } - if(iy >= -16382) - hy = 0x0001000000000000LL|(0x0000ffffffffffffLL&hy); - else { /* subnormal y, shift y to normal */ - n = -16382-iy; - if(n<=63) { - hy = (hy<>(64-n)); - ly <<= n; - } else { - hy = ly<<(n-64); - ly = 0; - } - } - - /* fix point fmod */ - n = ix - iy; - while(n--) { - hz=hx-hy;lz=lx-ly; if(lx>63); lx = lx+lx;} - else { - if((hz|lz)==0) /* return sign(x)*0 */ - return Zero[(u_int64_t)sx>>63]; - hx = hz+hz+(lz>>63); lx = lz+lz; - } - } - hz=hx-hy;lz=lx-ly; if(lx=0) {hx=hz;lx=lz;} - - /* convert back to floating value and restore the sign */ - if((hx|lx)==0) /* return sign(x)*0 */ - return Zero[(u_int64_t)sx>>63]; - while(hx<0x0001000000000000LL) { /* normalize x */ - hx = hx+hx+(lx>>63); lx = lx+lx; - iy -= 1; - } - if(iy>= -16382) { /* normalize output */ - hx = ((hx-0x0001000000000000LL)|((iy+16383)<<48)); - SET_LDOUBLE_WORDS64(x,hx|sx,lx); - } else { /* subnormal output */ - n = -16382 - iy; - if(n<=48) { - lx = (lx>>n)|((u_int64_t)hx<<(64-n)); - hx >>= n; - } else if (n<=63) { - lx = (hx<<(64-n))|(lx>>n); hx = sx; - } else { - lx = hx>>(n-64); hx = sx; - } - SET_LDOUBLE_WORDS64(x,hx|sx,lx); - x *= one; /* create necessary signal */ - } - return x; /* exact output */ -} -strong_alias (__ieee754_fmodl, __fmodl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_gammal_r.c b/sysdeps/ieee754/ldbl-128/e_gammal_r.c deleted file mode 100644 index 3a5317ade1..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_gammal_r.c +++ /dev/null @@ -1,218 +0,0 @@ -/* Implementation of gamma function according to ISO C. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek . */ - -#include -#include -#include - -/* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) inside exp in Stirling's - approximation to gamma function. */ - -static const _Float128 gamma_coeff[] = - { - L(0x1.5555555555555555555555555555p-4), - L(-0xb.60b60b60b60b60b60b60b60b60b8p-12), - L(0x3.4034034034034034034034034034p-12), - L(-0x2.7027027027027027027027027028p-12), - L(0x3.72a3c5631fe46ae1d4e700dca8f2p-12), - L(-0x7.daac36664f1f207daac36664f1f4p-12), - L(0x1.a41a41a41a41a41a41a41a41a41ap-8), - L(-0x7.90a1b2c3d4e5f708192a3b4c5d7p-8), - L(0x2.dfd2c703c0cfff430edfd2c703cp-4), - L(-0x1.6476701181f39edbdb9ce625987dp+0), - L(0xd.672219167002d3a7a9c886459cp+0), - L(-0x9.cd9292e6660d55b3f712eb9e07c8p+4), - L(0x8.911a740da740da740da740da741p+8), - L(-0x8.d0cc570e255bf59ff6eec24b49p+12), - }; - -#define NCOEFF (sizeof (gamma_coeff) / sizeof (gamma_coeff[0])) - -/* Return gamma (X), for positive X less than 1775, in the form R * - 2^(*EXP2_ADJ), where R is the return value and *EXP2_ADJ is set to - avoid overflow or underflow in intermediate calculations. */ - -static _Float128 -gammal_positive (_Float128 x, int *exp2_adj) -{ - int local_signgam; - if (x < L(0.5)) - { - *exp2_adj = 0; - return __ieee754_expl (__ieee754_lgammal_r (x + 1, &local_signgam)) / x; - } - else if (x <= L(1.5)) - { - *exp2_adj = 0; - return __ieee754_expl (__ieee754_lgammal_r (x, &local_signgam)); - } - else if (x < L(12.5)) - { - /* Adjust into the range for using exp (lgamma). */ - *exp2_adj = 0; - _Float128 n = __ceill (x - L(1.5)); - _Float128 x_adj = x - n; - _Float128 eps; - _Float128 prod = __gamma_productl (x_adj, 0, n, &eps); - return (__ieee754_expl (__ieee754_lgammal_r (x_adj, &local_signgam)) - * prod * (1 + eps)); - } - else - { - _Float128 eps = 0; - _Float128 x_eps = 0; - _Float128 x_adj = x; - _Float128 prod = 1; - if (x < 24) - { - /* Adjust into the range for applying Stirling's - approximation. */ - _Float128 n = __ceill (24 - x); - x_adj = x + n; - x_eps = (x - (x_adj - n)); - prod = __gamma_productl (x_adj - n, x_eps, n, &eps); - } - /* The result is now gamma (X_ADJ + X_EPS) / (PROD * (1 + EPS)). - Compute gamma (X_ADJ + X_EPS) using Stirling's approximation, - starting by computing pow (X_ADJ, X_ADJ) with a power of 2 - factored out. */ - _Float128 exp_adj = -eps; - _Float128 x_adj_int = __roundl (x_adj); - _Float128 x_adj_frac = x_adj - x_adj_int; - int x_adj_log2; - _Float128 x_adj_mant = __frexpl (x_adj, &x_adj_log2); - if (x_adj_mant < M_SQRT1_2l) - { - x_adj_log2--; - x_adj_mant *= 2; - } - *exp2_adj = x_adj_log2 * (int) x_adj_int; - _Float128 ret = (__ieee754_powl (x_adj_mant, x_adj) - * __ieee754_exp2l (x_adj_log2 * x_adj_frac) - * __ieee754_expl (-x_adj) - * __ieee754_sqrtl (2 * M_PIl / x_adj) - / prod); - exp_adj += x_eps * __ieee754_logl (x_adj); - _Float128 bsum = gamma_coeff[NCOEFF - 1]; - _Float128 x_adj2 = x_adj * x_adj; - for (size_t i = 1; i <= NCOEFF - 1; i++) - bsum = bsum / x_adj2 + gamma_coeff[NCOEFF - 1 - i]; - exp_adj += bsum / x_adj; - return ret + ret * __expm1l (exp_adj); - } -} - -_Float128 -__ieee754_gammal_r (_Float128 x, int *signgamp) -{ - int64_t hx; - u_int64_t lx; - _Float128 ret; - - GET_LDOUBLE_WORDS64 (hx, lx, x); - - if (((hx & 0x7fffffffffffffffLL) | lx) == 0) - { - /* Return value for x == 0 is Inf with divide by zero exception. */ - *signgamp = 0; - return 1.0 / x; - } - if (hx < 0 && (u_int64_t) hx < 0xffff000000000000ULL && __rintl (x) == x) - { - /* Return value for integer x < 0 is NaN with invalid exception. */ - *signgamp = 0; - return (x - x) / (x - x); - } - if (hx == 0xffff000000000000ULL && lx == 0) - { - /* x == -Inf. According to ISO this is NaN. */ - *signgamp = 0; - return x - x; - } - if ((hx & 0x7fff000000000000ULL) == 0x7fff000000000000ULL) - { - /* Positive infinity (return positive infinity) or NaN (return - NaN). */ - *signgamp = 0; - return x + x; - } - - if (x >= 1756) - { - /* Overflow. */ - *signgamp = 0; - return LDBL_MAX * LDBL_MAX; - } - else - { - SET_RESTORE_ROUNDL (FE_TONEAREST); - if (x > 0) - { - *signgamp = 0; - int exp2_adj; - ret = gammal_positive (x, &exp2_adj); - ret = __scalbnl (ret, exp2_adj); - } - else if (x >= -LDBL_EPSILON / 4) - { - *signgamp = 0; - ret = 1 / x; - } - else - { - _Float128 tx = __truncl (x); - *signgamp = (tx == 2 * __truncl (tx / 2)) ? -1 : 1; - if (x <= -1775) - /* Underflow. */ - ret = LDBL_MIN * LDBL_MIN; - else - { - _Float128 frac = tx - x; - if (frac > L(0.5)) - frac = 1 - frac; - _Float128 sinpix = (frac <= L(0.25) - ? __sinl (M_PIl * frac) - : __cosl (M_PIl * (L(0.5) - frac))); - int exp2_adj; - ret = M_PIl / (-x * sinpix - * gammal_positive (-x, &exp2_adj)); - ret = __scalbnl (ret, -exp2_adj); - math_check_force_underflow_nonneg (ret); - } - } - } - if (isinf (ret) && x != 0) - { - if (*signgamp < 0) - return -(-__copysignl (LDBL_MAX, ret) * LDBL_MAX); - else - return __copysignl (LDBL_MAX, ret) * LDBL_MAX; - } - else if (ret == 0) - { - if (*signgamp < 0) - return -(-__copysignl (LDBL_MIN, ret) * LDBL_MIN); - else - return __copysignl (LDBL_MIN, ret) * LDBL_MIN; - } - else - return ret; -} -strong_alias (__ieee754_gammal_r, __gammal_r_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_hypotl.c b/sysdeps/ieee754/ldbl-128/e_hypotl.c deleted file mode 100644 index 6c4e178fbe..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_hypotl.c +++ /dev/null @@ -1,140 +0,0 @@ -/* e_hypotl.c -- long double version of e_hypot.c. - * Conversion to long double by Jakub Jelinek, jakub@redhat.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_hypotl(x,y) - * - * Method : - * If (assume round-to-nearest) z=x*x+y*y - * has error less than sqrtl(2)/2 ulp, than - * sqrtl(z) has error less than 1 ulp (exercise). - * - * So, compute sqrtl(x*x+y*y) with some care as - * follows to get the error below 1 ulp: - * - * Assume x>y>0; - * (if possible, set rounding to round-to-nearest) - * 1. if x > 2y use - * x1*x1+(y*y+(x2*(x+x1))) for x*x+y*y - * where x1 = x with lower 64 bits cleared, x2 = x-x1; else - * 2. if x <= 2y use - * t1*y1+((x-y)*(x-y)+(t1*y2+t2*y)) - * where t1 = 2x with lower 64 bits cleared, t2 = 2x-t1, - * y1= y with lower 64 bits chopped, y2 = y-y1. - * - * NOTE: scaling may be necessary if some argument is too - * large or too tiny - * - * Special cases: - * hypotl(x,y) is INF if x or y is +INF or -INF; else - * hypotl(x,y) is NAN if x or y is NAN. - * - * Accuracy: - * hypotl(x,y) returns sqrtl(x^2+y^2) with error less - * than 1 ulps (units in the last place) - */ - -#include -#include - -_Float128 -__ieee754_hypotl(_Float128 x, _Float128 y) -{ - _Float128 a,b,t1,t2,y1,y2,w; - int64_t j,k,ha,hb; - - GET_LDOUBLE_MSW64(ha,x); - ha &= 0x7fffffffffffffffLL; - GET_LDOUBLE_MSW64(hb,y); - hb &= 0x7fffffffffffffffLL; - if(hb > ha) {a=y;b=x;j=ha; ha=hb;hb=j;} else {a=x;b=y;} - SET_LDOUBLE_MSW64(a,ha); /* a <- |a| */ - SET_LDOUBLE_MSW64(b,hb); /* b <- |b| */ - if((ha-hb)>0x78000000000000LL) {return a+b;} /* x/y > 2**120 */ - k=0; - if(ha > 0x5f3f000000000000LL) { /* a>2**8000 */ - if(ha >= 0x7fff000000000000LL) { /* Inf or NaN */ - u_int64_t low; - w = a+b; /* for sNaN */ - if (issignaling (a) || issignaling (b)) - return w; - GET_LDOUBLE_LSW64(low,a); - if(((ha&0xffffffffffffLL)|low)==0) w = a; - GET_LDOUBLE_LSW64(low,b); - if(((hb^0x7fff000000000000LL)|low)==0) w = b; - return w; - } - /* scale a and b by 2**-9600 */ - ha -= 0x2580000000000000LL; - hb -= 0x2580000000000000LL; k += 9600; - SET_LDOUBLE_MSW64(a,ha); - SET_LDOUBLE_MSW64(b,hb); - } - if(hb < 0x20bf000000000000LL) { /* b < 2**-8000 */ - if(hb <= 0x0000ffffffffffffLL) { /* subnormal b or 0 */ - u_int64_t low; - GET_LDOUBLE_LSW64(low,b); - if((hb|low)==0) return a; - t1=0; - SET_LDOUBLE_MSW64(t1,0x7ffd000000000000LL); /* t1=2^16382 */ - b *= t1; - a *= t1; - k -= 16382; - GET_LDOUBLE_MSW64 (ha, a); - GET_LDOUBLE_MSW64 (hb, b); - if (hb > ha) - { - t1 = a; - a = b; - b = t1; - j = ha; - ha = hb; - hb = j; - } - } else { /* scale a and b by 2^9600 */ - ha += 0x2580000000000000LL; /* a *= 2^9600 */ - hb += 0x2580000000000000LL; /* b *= 2^9600 */ - k -= 9600; - SET_LDOUBLE_MSW64(a,ha); - SET_LDOUBLE_MSW64(b,hb); - } - } - /* medium size a and b */ - w = a-b; - if (w>b) { - t1 = 0; - SET_LDOUBLE_MSW64(t1,ha); - t2 = a-t1; - w = __ieee754_sqrtl(t1*t1-(b*(-b)-t2*(a+t1))); - } else { - a = a+a; - y1 = 0; - SET_LDOUBLE_MSW64(y1,hb); - y2 = b - y1; - t1 = 0; - SET_LDOUBLE_MSW64(t1,ha+0x0001000000000000LL); - t2 = a - t1; - w = __ieee754_sqrtl(t1*y1-(w*(-w)-(t1*y2+t2*b))); - } - if(k!=0) { - u_int64_t high; - t1 = 1; - GET_LDOUBLE_MSW64(high,t1); - SET_LDOUBLE_MSW64(t1,high+(k<<48)); - w *= t1; - math_check_force_underflow_nonneg (w); - return w; - } else return w; -} -strong_alias (__ieee754_hypotl, __hypotl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_ilogbl.c b/sysdeps/ieee754/ldbl-128/e_ilogbl.c deleted file mode 100644 index 9effe6386a..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_ilogbl.c +++ /dev/null @@ -1,56 +0,0 @@ -/* s_ilogbl.c -- long double version of s_ilogb.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* ilogbl(long double x) - * return the binary exponent of non-zero x - * ilogbl(0) = FP_ILOGB0 - * ilogbl(NaN) = FP_ILOGBNAN (no signal is raised) - * ilogbl(+-Inf) = INT_MAX (no signal is raised) - */ - -#include -#include -#include - -int __ieee754_ilogbl (_Float128 x) -{ - int64_t hx,lx; - int ix; - - GET_LDOUBLE_WORDS64(hx,lx,x); - hx &= 0x7fffffffffffffffLL; - if(hx <= 0x0001000000000000LL) { - if((hx|lx)==0) - return FP_ILOGB0; /* ilogbl(0) = FP_ILOGB0 */ - else /* subnormal x */ - if(hx==0) { - for (ix = -16431; lx>0; lx<<=1) ix -=1; - } else { - for (ix = -16382, hx<<=15; hx>0; hx<<=1) ix -=1; - } - return ix; - } - else if (hx<0x7fff000000000000LL) return (hx>>48)-0x3fff; - else if (FP_ILOGBNAN != INT_MAX) { - /* ISO C99 requires ilogbl(+-Inf) == INT_MAX. */ - if (((hx^0x7fff000000000000LL)|lx) == 0) - return INT_MAX; - } - return FP_ILOGBNAN; -} diff --git a/sysdeps/ieee754/ldbl-128/e_j0l.c b/sysdeps/ieee754/ldbl-128/e_j0l.c deleted file mode 100644 index fb8d3518ce..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_j0l.c +++ /dev/null @@ -1,937 +0,0 @@ -/* j0l.c - * - * Bessel function of order zero - * - * - * - * SYNOPSIS: - * - * long double x, y, j0l(); - * - * y = j0l( x ); - * - * - * - * DESCRIPTION: - * - * Returns Bessel function of first kind, order zero of the argument. - * - * The domain is divided into two major intervals [0, 2] and - * (2, infinity). In the first interval the rational approximation - * is J0(x) = 1 - x^2 / 4 + x^4 R(x^2) - * The second interval is further partitioned into eight equal segments - * of 1/x. - * - * J0(x) = sqrt(2/(pi x)) (P0(x) cos(X) - Q0(x) sin(X)), - * X = x - pi/4, - * - * and the auxiliary functions are given by - * - * J0(x)cos(X) + Y0(x)sin(X) = sqrt( 2/(pi x)) P0(x), - * P0(x) = 1 + 1/x^2 R(1/x^2) - * - * Y0(x)cos(X) - J0(x)sin(X) = sqrt( 2/(pi x)) Q0(x), - * Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - * - * - * - * ACCURACY: - * - * Absolute error: - * arithmetic domain # trials peak rms - * IEEE 0, 30 100000 1.7e-34 2.4e-35 - * - * - */ - -/* y0l.c - * - * Bessel function of the second kind, order zero - * - * - * - * SYNOPSIS: - * - * double x, y, y0l(); - * - * y = y0l( x ); - * - * - * - * DESCRIPTION: - * - * Returns Bessel function of the second kind, of order - * zero, of the argument. - * - * The approximation is the same as for J0(x), and - * Y0(x) = sqrt(2/(pi x)) (P0(x) sin(X) + Q0(x) cos(X)). - * - * ACCURACY: - * - * Absolute error, when y0(x) < 1; else relative error: - * - * arithmetic domain # trials peak rms - * IEEE 0, 30 100000 3.0e-34 2.7e-35 - * - */ - -/* Copyright 2001 by Stephen L. Moshier (moshier@na-net.ornl.gov). - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -#include -#include -#include - -/* 1 / sqrt(pi) */ -static const _Float128 ONEOSQPI = L(5.6418958354775628694807945156077258584405E-1); -/* 2 / pi */ -static const _Float128 TWOOPI = L(6.3661977236758134307553505349005744813784E-1); -static const _Float128 zero = 0; - -/* J0(x) = 1 - x^2/4 + x^2 x^2 R(x^2) - Peak relative error 3.4e-37 - 0 <= x <= 2 */ -#define NJ0_2N 6 -static const _Float128 J0_2N[NJ0_2N + 1] = { - L(3.133239376997663645548490085151484674892E16), - L(-5.479944965767990821079467311839107722107E14), - L(6.290828903904724265980249871997551894090E12), - L(-3.633750176832769659849028554429106299915E10), - L(1.207743757532429576399485415069244807022E8), - L(-2.107485999925074577174305650549367415465E5), - L(1.562826808020631846245296572935547005859E2), -}; -#define NJ0_2D 6 -static const _Float128 J0_2D[NJ0_2D + 1] = { - L(2.005273201278504733151033654496928968261E18), - L(2.063038558793221244373123294054149790864E16), - L(1.053350447931127971406896594022010524994E14), - L(3.496556557558702583143527876385508882310E11), - L(8.249114511878616075860654484367133976306E8), - L(1.402965782449571800199759247964242790589E6), - L(1.619910762853439600957801751815074787351E3), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2), - 0 <= 1/x <= .0625 - Peak relative error 3.3e-36 */ -#define NP16_IN 9 -static const _Float128 P16_IN[NP16_IN + 1] = { - L(-1.901689868258117463979611259731176301065E-16), - L(-1.798743043824071514483008340803573980931E-13), - L(-6.481746687115262291873324132944647438959E-11), - L(-1.150651553745409037257197798528294248012E-8), - L(-1.088408467297401082271185599507222695995E-6), - L(-5.551996725183495852661022587879817546508E-5), - L(-1.477286941214245433866838787454880214736E-3), - L(-1.882877976157714592017345347609200402472E-2), - L(-9.620983176855405325086530374317855880515E-2), - L(-1.271468546258855781530458854476627766233E-1), -}; -#define NP16_ID 9 -static const _Float128 P16_ID[NP16_ID + 1] = { - L(2.704625590411544837659891569420764475007E-15), - L(2.562526347676857624104306349421985403573E-12), - L(9.259137589952741054108665570122085036246E-10), - L(1.651044705794378365237454962653430805272E-7), - L(1.573561544138733044977714063100859136660E-5), - L(8.134482112334882274688298469629884804056E-4), - L(2.219259239404080863919375103673593571689E-2), - L(2.976990606226596289580242451096393862792E-1), - L(1.713895630454693931742734911930937246254E0), - L(3.231552290717904041465898249160757368855E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2) - 0.0625 <= 1/x <= 0.125 - Peak relative error 2.4e-35 */ -#define NP8_16N 10 -static const _Float128 P8_16N[NP8_16N + 1] = { - L(-2.335166846111159458466553806683579003632E-15), - L(-1.382763674252402720401020004169367089975E-12), - L(-3.192160804534716696058987967592784857907E-10), - L(-3.744199606283752333686144670572632116899E-8), - L(-2.439161236879511162078619292571922772224E-6), - L(-9.068436986859420951664151060267045346549E-5), - L(-1.905407090637058116299757292660002697359E-3), - L(-2.164456143936718388053842376884252978872E-2), - L(-1.212178415116411222341491717748696499966E-1), - L(-2.782433626588541494473277445959593334494E-1), - L(-1.670703190068873186016102289227646035035E-1), -}; -#define NP8_16D 10 -static const _Float128 P8_16D[NP8_16D + 1] = { - L(3.321126181135871232648331450082662856743E-14), - L(1.971894594837650840586859228510007703641E-11), - L(4.571144364787008285981633719513897281690E-9), - L(5.396419143536287457142904742849052402103E-7), - L(3.551548222385845912370226756036899901549E-5), - L(1.342353874566932014705609788054598013516E-3), - L(2.899133293006771317589357444614157734385E-2), - L(3.455374978185770197704507681491574261545E-1), - L(2.116616964297512311314454834712634820514E0), - L(5.850768316827915470087758636881584174432E0), - L(5.655273858938766830855753983631132928968E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2) - 0.125 <= 1/x <= 0.1875 - Peak relative error 2.7e-35 */ -#define NP5_8N 10 -static const _Float128 P5_8N[NP5_8N + 1] = { - L(-1.270478335089770355749591358934012019596E-12), - L(-4.007588712145412921057254992155810347245E-10), - L(-4.815187822989597568124520080486652009281E-8), - L(-2.867070063972764880024598300408284868021E-6), - L(-9.218742195161302204046454768106063638006E-5), - L(-1.635746821447052827526320629828043529997E-3), - L(-1.570376886640308408247709616497261011707E-2), - L(-7.656484795303305596941813361786219477807E-2), - L(-1.659371030767513274944805479908858628053E-1), - L(-1.185340550030955660015841796219919804915E-1), - L(-8.920026499909994671248893388013790366712E-3), -}; -#define NP5_8D 9 -static const _Float128 P5_8D[NP5_8D + 1] = { - L(1.806902521016705225778045904631543990314E-11), - L(5.728502760243502431663549179135868966031E-9), - L(6.938168504826004255287618819550667978450E-7), - L(4.183769964807453250763325026573037785902E-5), - L(1.372660678476925468014882230851637878587E-3), - L(2.516452105242920335873286419212708961771E-2), - L(2.550502712902647803796267951846557316182E-1), - L(1.365861559418983216913629123778747617072E0), - L(3.523825618308783966723472468855042541407E0), - L(3.656365803506136165615111349150536282434E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2) - Peak relative error 3.5e-35 - 0.1875 <= 1/x <= 0.25 */ -#define NP4_5N 9 -static const _Float128 P4_5N[NP4_5N + 1] = { - L(-9.791405771694098960254468859195175708252E-10), - L(-1.917193059944531970421626610188102836352E-7), - L(-1.393597539508855262243816152893982002084E-5), - L(-4.881863490846771259880606911667479860077E-4), - L(-8.946571245022470127331892085881699269853E-3), - L(-8.707474232568097513415336886103899434251E-2), - L(-4.362042697474650737898551272505525973766E-1), - L(-1.032712171267523975431451359962375617386E0), - L(-9.630502683169895107062182070514713702346E-1), - L(-2.251804386252969656586810309252357233320E-1), -}; -#define NP4_5D 9 -static const _Float128 P4_5D[NP4_5D + 1] = { - L(1.392555487577717669739688337895791213139E-8), - L(2.748886559120659027172816051276451376854E-6), - L(2.024717710644378047477189849678576659290E-4), - L(7.244868609350416002930624752604670292469E-3), - L(1.373631762292244371102989739300382152416E-1), - L(1.412298581400224267910294815260613240668E0), - L(7.742495637843445079276397723849017617210E0), - L(2.138429269198406512028307045259503811861E1), - L(2.651547684548423476506826951831712762610E1), - L(1.167499382465291931571685222882909166935E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2) - Peak relative error 2.3e-36 - 0.25 <= 1/x <= 0.3125 */ -#define NP3r2_4N 9 -static const _Float128 P3r2_4N[NP3r2_4N + 1] = { - L(-2.589155123706348361249809342508270121788E-8), - L(-3.746254369796115441118148490849195516593E-6), - L(-1.985595497390808544622893738135529701062E-4), - L(-5.008253705202932091290132760394976551426E-3), - L(-6.529469780539591572179155511840853077232E-2), - L(-4.468736064761814602927408833818990271514E-1), - L(-1.556391252586395038089729428444444823380E0), - L(-2.533135309840530224072920725976994981638E0), - L(-1.605509621731068453869408718565392869560E0), - L(-2.518966692256192789269859830255724429375E-1), -}; -#define NP3r2_4D 9 -static const _Float128 P3r2_4D[NP3r2_4D + 1] = { - L(3.682353957237979993646169732962573930237E-7), - L(5.386741661883067824698973455566332102029E-5), - L(2.906881154171822780345134853794241037053E-3), - L(7.545832595801289519475806339863492074126E-2), - L(1.029405357245594877344360389469584526654E0), - L(7.565706120589873131187989560509757626725E0), - L(2.951172890699569545357692207898667665796E1), - L(5.785723537170311456298467310529815457536E1), - L(5.095621464598267889126015412522773474467E1), - L(1.602958484169953109437547474953308401442E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2) - Peak relative error 1.0e-35 - 0.3125 <= 1/x <= 0.375 */ -#define NP2r7_3r2N 9 -static const _Float128 P2r7_3r2N[NP2r7_3r2N + 1] = { - L(-1.917322340814391131073820537027234322550E-7), - L(-1.966595744473227183846019639723259011906E-5), - L(-7.177081163619679403212623526632690465290E-4), - L(-1.206467373860974695661544653741899755695E-2), - L(-1.008656452188539812154551482286328107316E-1), - L(-4.216016116408810856620947307438823892707E-1), - L(-8.378631013025721741744285026537009814161E-1), - L(-6.973895635309960850033762745957946272579E-1), - L(-1.797864718878320770670740413285763554812E-1), - L(-4.098025357743657347681137871388402849581E-3), -}; -#define NP2r7_3r2D 8 -static const _Float128 P2r7_3r2D[NP2r7_3r2D + 1] = { - L(2.726858489303036441686496086962545034018E-6), - L(2.840430827557109238386808968234848081424E-4), - L(1.063826772041781947891481054529454088832E-2), - L(1.864775537138364773178044431045514405468E-1), - L(1.665660052857205170440952607701728254211E0), - L(7.723745889544331153080842168958348568395E0), - L(1.810726427571829798856428548102077799835E1), - L(1.986460672157794440666187503833545388527E1), - L(8.645503204552282306364296517220055815488E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2) - Peak relative error 1.3e-36 - 0.3125 <= 1/x <= 0.4375 */ -#define NP2r3_2r7N 9 -static const _Float128 P2r3_2r7N[NP2r3_2r7N + 1] = { - L(-1.594642785584856746358609622003310312622E-6), - L(-1.323238196302221554194031733595194539794E-4), - L(-3.856087818696874802689922536987100372345E-3), - L(-5.113241710697777193011470733601522047399E-2), - L(-3.334229537209911914449990372942022350558E-1), - L(-1.075703518198127096179198549659283422832E0), - L(-1.634174803414062725476343124267110981807E0), - L(-1.030133247434119595616826842367268304880E0), - L(-1.989811539080358501229347481000707289391E-1), - L(-3.246859189246653459359775001466924610236E-3), -}; -#define NP2r3_2r7D 8 -static const _Float128 P2r3_2r7D[NP2r3_2r7D + 1] = { - L(2.267936634217251403663034189684284173018E-5), - L(1.918112982168673386858072491437971732237E-3), - L(5.771704085468423159125856786653868219522E-2), - L(8.056124451167969333717642810661498890507E-1), - L(5.687897967531010276788680634413789328776E0), - L(2.072596760717695491085444438270778394421E1), - L(3.801722099819929988585197088613160496684E1), - L(3.254620235902912339534998592085115836829E1), - L(1.104847772130720331801884344645060675036E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2) - Peak relative error 1.2e-35 - 0.4375 <= 1/x <= 0.5 */ -#define NP2_2r3N 8 -static const _Float128 P2_2r3N[NP2_2r3N + 1] = { - L(-1.001042324337684297465071506097365389123E-4), - L(-6.289034524673365824853547252689991418981E-3), - L(-1.346527918018624234373664526930736205806E-1), - L(-1.268808313614288355444506172560463315102E0), - L(-5.654126123607146048354132115649177406163E0), - L(-1.186649511267312652171775803270911971693E1), - L(-1.094032424931998612551588246779200724257E1), - L(-3.728792136814520055025256353193674625267E0), - L(-3.000348318524471807839934764596331810608E-1), -}; -#define NP2_2r3D 8 -static const _Float128 P2_2r3D[NP2_2r3D + 1] = { - L(1.423705538269770974803901422532055612980E-3), - L(9.171476630091439978533535167485230575894E-2), - L(2.049776318166637248868444600215942828537E0), - L(2.068970329743769804547326701946144899583E1), - L(1.025103500560831035592731539565060347709E2), - L(2.528088049697570728252145557167066708284E2), - L(2.992160327587558573740271294804830114205E2), - L(1.540193761146551025832707739468679973036E2), - L(2.779516701986912132637672140709452502650E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 2.2e-35 - 0 <= 1/x <= .0625 */ -#define NQ16_IN 10 -static const _Float128 Q16_IN[NQ16_IN + 1] = { - L(2.343640834407975740545326632205999437469E-18), - L(2.667978112927811452221176781536278257448E-15), - L(1.178415018484555397390098879501969116536E-12), - L(2.622049767502719728905924701288614016597E-10), - L(3.196908059607618864801313380896308968673E-8), - L(2.179466154171673958770030655199434798494E-6), - L(8.139959091628545225221976413795645177291E-5), - L(1.563900725721039825236927137885747138654E-3), - L(1.355172364265825167113562519307194840307E-2), - L(3.928058355906967977269780046844768588532E-2), - L(1.107891967702173292405380993183694932208E-2), -}; -#define NQ16_ID 9 -static const _Float128 Q16_ID[NQ16_ID + 1] = { - L(3.199850952578356211091219295199301766718E-17), - L(3.652601488020654842194486058637953363918E-14), - L(1.620179741394865258354608590461839031281E-11), - L(3.629359209474609630056463248923684371426E-9), - L(4.473680923894354600193264347733477363305E-7), - L(3.106368086644715743265603656011050476736E-5), - L(1.198239259946770604954664925153424252622E-3), - L(2.446041004004283102372887804475767568272E-2), - L(2.403235525011860603014707768815113698768E-1), - L(9.491006790682158612266270665136910927149E-1), - /* 1.000000000000000000000000000000000000000E0 */ - }; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 5.1e-36 - 0.0625 <= 1/x <= 0.125 */ -#define NQ8_16N 11 -static const _Float128 Q8_16N[NQ8_16N + 1] = { - L(1.001954266485599464105669390693597125904E-17), - L(7.545499865295034556206475956620160007849E-15), - L(2.267838684785673931024792538193202559922E-12), - L(3.561909705814420373609574999542459912419E-10), - L(3.216201422768092505214730633842924944671E-8), - L(1.731194793857907454569364622452058554314E-6), - L(5.576944613034537050396518509871004586039E-5), - L(1.051787760316848982655967052985391418146E-3), - L(1.102852974036687441600678598019883746959E-2), - L(5.834647019292460494254225988766702933571E-2), - L(1.290281921604364618912425380717127576529E-1), - L(7.598886310387075708640370806458926458301E-2), -}; -#define NQ8_16D 11 -static const _Float128 Q8_16D[NQ8_16D + 1] = { - L(1.368001558508338469503329967729951830843E-16), - L(1.034454121857542147020549303317348297289E-13), - L(3.128109209247090744354764050629381674436E-11), - L(4.957795214328501986562102573522064468671E-9), - L(4.537872468606711261992676606899273588899E-7), - L(2.493639207101727713192687060517509774182E-5), - L(8.294957278145328349785532236663051405805E-4), - L(1.646471258966713577374948205279380115839E-2), - L(1.878910092770966718491814497982191447073E-1), - L(1.152641605706170353727903052525652504075E0), - L(3.383550240669773485412333679367792932235E0), - L(3.823875252882035706910024716609908473970E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 3.9e-35 - 0.125 <= 1/x <= 0.1875 */ -#define NQ5_8N 10 -static const _Float128 Q5_8N[NQ5_8N + 1] = { - L(1.750399094021293722243426623211733898747E-13), - L(6.483426211748008735242909236490115050294E-11), - L(9.279430665656575457141747875716899958373E-9), - L(6.696634968526907231258534757736576340266E-7), - L(2.666560823798895649685231292142838188061E-5), - L(6.025087697259436271271562769707550594540E-4), - L(7.652807734168613251901945778921336353485E-3), - L(5.226269002589406461622551452343519078905E-2), - L(1.748390159751117658969324896330142895079E-1), - L(2.378188719097006494782174902213083589660E-1), - L(8.383984859679804095463699702165659216831E-2), -}; -#define NQ5_8D 10 -static const _Float128 Q5_8D[NQ5_8D + 1] = { - L(2.389878229704327939008104855942987615715E-12), - L(8.926142817142546018703814194987786425099E-10), - L(1.294065862406745901206588525833274399038E-7), - L(9.524139899457666250828752185212769682191E-6), - L(3.908332488377770886091936221573123353489E-4), - L(9.250427033957236609624199884089916836748E-3), - L(1.263420066165922645975830877751588421451E-1), - L(9.692527053860420229711317379861733180654E-1), - L(3.937813834630430172221329298841520707954E0), - L(7.603126427436356534498908111445191312181E0), - L(5.670677653334105479259958485084550934305E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 3.2e-35 - 0.1875 <= 1/x <= 0.25 */ -#define NQ4_5N 10 -static const _Float128 Q4_5N[NQ4_5N + 1] = { - L(2.233870042925895644234072357400122854086E-11), - L(5.146223225761993222808463878999151699792E-9), - L(4.459114531468296461688753521109797474523E-7), - L(1.891397692931537975547242165291668056276E-5), - L(4.279519145911541776938964806470674565504E-4), - L(5.275239415656560634702073291768904783989E-3), - L(3.468698403240744801278238473898432608887E-2), - L(1.138773146337708415188856882915457888274E-1), - L(1.622717518946443013587108598334636458955E-1), - L(7.249040006390586123760992346453034628227E-2), - L(1.941595365256460232175236758506411486667E-3), -}; -#define NQ4_5D 9 -static const _Float128 Q4_5D[NQ4_5D + 1] = { - L(3.049977232266999249626430127217988047453E-10), - L(7.120883230531035857746096928889676144099E-8), - L(6.301786064753734446784637919554359588859E-6), - L(2.762010530095069598480766869426308077192E-4), - L(6.572163250572867859316828886203406361251E-3), - L(8.752566114841221958200215255461843397776E-2), - L(6.487654992874805093499285311075289932664E-1), - L(2.576550017826654579451615283022812801435E0), - L(5.056392229924022835364779562707348096036E0), - L(4.179770081068251464907531367859072157773E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 1.4e-36 - 0.25 <= 1/x <= 0.3125 */ -#define NQ3r2_4N 10 -static const _Float128 Q3r2_4N[NQ3r2_4N + 1] = { - L(6.126167301024815034423262653066023684411E-10), - L(1.043969327113173261820028225053598975128E-7), - L(6.592927270288697027757438170153763220190E-6), - L(2.009103660938497963095652951912071336730E-4), - L(3.220543385492643525985862356352195896964E-3), - L(2.774405975730545157543417650436941650990E-2), - L(1.258114008023826384487378016636555041129E-1), - L(2.811724258266902502344701449984698323860E-1), - L(2.691837665193548059322831687432415014067E-1), - L(7.949087384900985370683770525312735605034E-2), - L(1.229509543620976530030153018986910810747E-3), -}; -#define NQ3r2_4D 9 -static const _Float128 Q3r2_4D[NQ3r2_4D + 1] = { - L(8.364260446128475461539941389210166156568E-9), - L(1.451301850638956578622154585560759862764E-6), - L(9.431830010924603664244578867057141839463E-5), - L(3.004105101667433434196388593004526182741E-3), - L(5.148157397848271739710011717102773780221E-2), - L(4.901089301726939576055285374953887874895E-1), - L(2.581760991981709901216967665934142240346E0), - L(7.257105880775059281391729708630912791847E0), - L(1.006014717326362868007913423810737369312E1), - L(5.879416600465399514404064187445293212470E0), - /* 1.000000000000000000000000000000000000000E0*/ -}; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 3.8e-36 - 0.3125 <= 1/x <= 0.375 */ -#define NQ2r7_3r2N 9 -static const _Float128 Q2r7_3r2N[NQ2r7_3r2N + 1] = { - L(7.584861620402450302063691901886141875454E-8), - L(9.300939338814216296064659459966041794591E-6), - L(4.112108906197521696032158235392604947895E-4), - L(8.515168851578898791897038357239630654431E-3), - L(8.971286321017307400142720556749573229058E-2), - L(4.885856732902956303343015636331874194498E-1), - L(1.334506268733103291656253500506406045846E0), - L(1.681207956863028164179042145803851824654E0), - L(8.165042692571721959157677701625853772271E-1), - L(9.805848115375053300608712721986235900715E-2), -}; -#define NQ2r7_3r2D 9 -static const _Float128 Q2r7_3r2D[NQ2r7_3r2D + 1] = { - L(1.035586492113036586458163971239438078160E-6), - L(1.301999337731768381683593636500979713689E-4), - L(5.993695702564527062553071126719088859654E-3), - L(1.321184892887881883489141186815457808785E-1), - L(1.528766555485015021144963194165165083312E0), - L(9.561463309176490874525827051566494939295E0), - L(3.203719484883967351729513662089163356911E1), - L(5.497294687660930446641539152123568668447E1), - L(4.391158169390578768508675452986948391118E1), - L(1.347836630730048077907818943625789418378E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 2.2e-35 - 0.375 <= 1/x <= 0.4375 */ -#define NQ2r3_2r7N 9 -static const _Float128 Q2r3_2r7N[NQ2r3_2r7N + 1] = { - L(4.455027774980750211349941766420190722088E-7), - L(4.031998274578520170631601850866780366466E-5), - L(1.273987274325947007856695677491340636339E-3), - L(1.818754543377448509897226554179659122873E-2), - L(1.266748858326568264126353051352269875352E-1), - L(4.327578594728723821137731555139472880414E-1), - L(6.892532471436503074928194969154192615359E-1), - L(4.490775818438716873422163588640262036506E-1), - L(8.649615949297322440032000346117031581572E-2), - L(7.261345286655345047417257611469066147561E-4), -}; -#define NQ2r3_2r7D 8 -static const _Float128 Q2r3_2r7D[NQ2r3_2r7D + 1] = { - L(6.082600739680555266312417978064954793142E-6), - L(5.693622538165494742945717226571441747567E-4), - L(1.901625907009092204458328768129666975975E-2), - L(2.958689532697857335456896889409923371570E-1), - L(2.343124711045660081603809437993368799568E0), - L(9.665894032187458293568704885528192804376E0), - L(2.035273104990617136065743426322454881353E1), - L(2.044102010478792896815088858740075165531E1), - L(8.445937177863155827844146643468706599304E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x), - Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2)) - Peak relative error 3.1e-36 - 0.4375 <= 1/x <= 0.5 */ -#define NQ2_2r3N 9 -static const _Float128 Q2_2r3N[NQ2_2r3N + 1] = { - L(2.817566786579768804844367382809101929314E-6), - L(2.122772176396691634147024348373539744935E-4), - L(5.501378031780457828919593905395747517585E-3), - L(6.355374424341762686099147452020466524659E-2), - L(3.539652320122661637429658698954748337223E-1), - L(9.571721066119617436343740541777014319695E-1), - L(1.196258777828426399432550698612171955305E0), - L(6.069388659458926158392384709893753793967E-1), - L(9.026746127269713176512359976978248763621E-2), - L(5.317668723070450235320878117210807236375E-4), -}; -#define NQ2_2r3D 8 -static const _Float128 Q2_2r3D[NQ2_2r3D + 1] = { - L(3.846924354014260866793741072933159380158E-5), - L(3.017562820057704325510067178327449946763E-3), - L(8.356305620686867949798885808540444210935E-2), - L(1.068314930499906838814019619594424586273E0), - L(6.900279623894821067017966573640732685233E0), - L(2.307667390886377924509090271780839563141E1), - L(3.921043465412723970791036825401273528513E1), - L(3.167569478939719383241775717095729233436E1), - L(1.051023841699200920276198346301543665909E1), - /* 1.000000000000000000000000000000000000000E0*/ -}; - - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -neval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -deval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Bessel function of the first kind, order zero. */ - -_Float128 -__ieee754_j0l (_Float128 x) -{ - _Float128 xx, xinv, z, p, q, c, s, cc, ss; - - if (! isfinite (x)) - { - if (x != x) - return x + x; - else - return 0; - } - if (x == 0) - return 1; - - xx = fabsl (x); - if (xx <= 2) - { - if (xx < L(0x1p-57)) - return 1; - /* 0 <= x <= 2 */ - z = xx * xx; - p = z * z * neval (z, J0_2N, NJ0_2N) / deval (z, J0_2D, NJ0_2D); - p -= L(0.25) * z; - p += 1; - return p; - } - - /* X = x - pi/4 - cos(X) = cos(x) cos(pi/4) + sin(x) sin(pi/4) - = 1/sqrt(2) * (cos(x) + sin(x)) - sin(X) = sin(x) cos(pi/4) - cos(x) sin(pi/4) - = 1/sqrt(2) * (sin(x) - cos(x)) - sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) - cf. Fdlibm. */ - __sincosl (xx, &s, &c); - ss = s - c; - cc = s + c; - if (xx <= LDBL_MAX / 2) - { - z = -__cosl (xx + xx); - if ((s * c) < 0) - cc = z / ss; - else - ss = z / cc; - } - - if (xx > L(0x1p256)) - return ONEOSQPI * cc / __ieee754_sqrtl (xx); - - xinv = 1 / xx; - z = xinv * xinv; - if (xinv <= 0.25) - { - if (xinv <= 0.125) - { - if (xinv <= 0.0625) - { - p = neval (z, P16_IN, NP16_IN) / deval (z, P16_ID, NP16_ID); - q = neval (z, Q16_IN, NQ16_IN) / deval (z, Q16_ID, NQ16_ID); - } - else - { - p = neval (z, P8_16N, NP8_16N) / deval (z, P8_16D, NP8_16D); - q = neval (z, Q8_16N, NQ8_16N) / deval (z, Q8_16D, NQ8_16D); - } - } - else if (xinv <= 0.1875) - { - p = neval (z, P5_8N, NP5_8N) / deval (z, P5_8D, NP5_8D); - q = neval (z, Q5_8N, NQ5_8N) / deval (z, Q5_8D, NQ5_8D); - } - else - { - p = neval (z, P4_5N, NP4_5N) / deval (z, P4_5D, NP4_5D); - q = neval (z, Q4_5N, NQ4_5N) / deval (z, Q4_5D, NQ4_5D); - } - } /* .25 */ - else /* if (xinv <= 0.5) */ - { - if (xinv <= 0.375) - { - if (xinv <= 0.3125) - { - p = neval (z, P3r2_4N, NP3r2_4N) / deval (z, P3r2_4D, NP3r2_4D); - q = neval (z, Q3r2_4N, NQ3r2_4N) / deval (z, Q3r2_4D, NQ3r2_4D); - } - else - { - p = neval (z, P2r7_3r2N, NP2r7_3r2N) - / deval (z, P2r7_3r2D, NP2r7_3r2D); - q = neval (z, Q2r7_3r2N, NQ2r7_3r2N) - / deval (z, Q2r7_3r2D, NQ2r7_3r2D); - } - } - else if (xinv <= 0.4375) - { - p = neval (z, P2r3_2r7N, NP2r3_2r7N) - / deval (z, P2r3_2r7D, NP2r3_2r7D); - q = neval (z, Q2r3_2r7N, NQ2r3_2r7N) - / deval (z, Q2r3_2r7D, NQ2r3_2r7D); - } - else - { - p = neval (z, P2_2r3N, NP2_2r3N) / deval (z, P2_2r3D, NP2_2r3D); - q = neval (z, Q2_2r3N, NQ2_2r3N) / deval (z, Q2_2r3D, NQ2_2r3D); - } - } - p = 1 + z * p; - q = z * xinv * q; - q = q - L(0.125) * xinv; - z = ONEOSQPI * (p * cc - q * ss) / __ieee754_sqrtl (xx); - return z; -} -strong_alias (__ieee754_j0l, __j0l_finite) - - -/* Y0(x) = 2/pi * log(x) * J0(x) + R(x^2) - Peak absolute error 1.7e-36 (relative where Y0 > 1) - 0 <= x <= 2 */ -#define NY0_2N 7 -static _Float128 Y0_2N[NY0_2N + 1] = { - L(-1.062023609591350692692296993537002558155E19), - L(2.542000883190248639104127452714966858866E19), - L(-1.984190771278515324281415820316054696545E18), - L(4.982586044371592942465373274440222033891E16), - L(-5.529326354780295177243773419090123407550E14), - L(3.013431465522152289279088265336861140391E12), - L(-7.959436160727126750732203098982718347785E9), - L(8.230845651379566339707130644134372793322E6), -}; -#define NY0_2D 7 -static _Float128 Y0_2D[NY0_2D + 1] = { - L(1.438972634353286978700329883122253752192E20), - L(1.856409101981569254247700169486907405500E18), - L(1.219693352678218589553725579802986255614E16), - L(5.389428943282838648918475915779958097958E13), - L(1.774125762108874864433872173544743051653E11), - L(4.522104832545149534808218252434693007036E8), - L(8.872187401232943927082914504125234454930E5), - L(1.251945613186787532055610876304669413955E3), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -static const _Float128 U0 = L(-7.3804295108687225274343927948483016310862e-02); - -/* Bessel function of the second kind, order zero. */ - -_Float128 - __ieee754_y0l(_Float128 x) -{ - _Float128 xx, xinv, z, p, q, c, s, cc, ss; - - if (! isfinite (x)) - return 1 / (x + x * x); - if (x <= 0) - { - if (x < 0) - return (zero / (zero * x)); - return -1 / zero; /* -inf and divide by zero exception. */ - } - xx = fabsl (x); - if (xx <= 0x1p-57) - return U0 + TWOOPI * __ieee754_logl (x); - if (xx <= 2) - { - /* 0 <= x <= 2 */ - z = xx * xx; - p = neval (z, Y0_2N, NY0_2N) / deval (z, Y0_2D, NY0_2D); - p = TWOOPI * __ieee754_logl (x) * __ieee754_j0l (x) + p; - return p; - } - - /* X = x - pi/4 - cos(X) = cos(x) cos(pi/4) + sin(x) sin(pi/4) - = 1/sqrt(2) * (cos(x) + sin(x)) - sin(X) = sin(x) cos(pi/4) - cos(x) sin(pi/4) - = 1/sqrt(2) * (sin(x) - cos(x)) - sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) - cf. Fdlibm. */ - __sincosl (x, &s, &c); - ss = s - c; - cc = s + c; - if (xx <= LDBL_MAX / 2) - { - z = -__cosl (x + x); - if ((s * c) < 0) - cc = z / ss; - else - ss = z / cc; - } - - if (xx > L(0x1p256)) - return ONEOSQPI * ss / __ieee754_sqrtl (x); - - xinv = 1 / xx; - z = xinv * xinv; - if (xinv <= 0.25) - { - if (xinv <= 0.125) - { - if (xinv <= 0.0625) - { - p = neval (z, P16_IN, NP16_IN) / deval (z, P16_ID, NP16_ID); - q = neval (z, Q16_IN, NQ16_IN) / deval (z, Q16_ID, NQ16_ID); - } - else - { - p = neval (z, P8_16N, NP8_16N) / deval (z, P8_16D, NP8_16D); - q = neval (z, Q8_16N, NQ8_16N) / deval (z, Q8_16D, NQ8_16D); - } - } - else if (xinv <= 0.1875) - { - p = neval (z, P5_8N, NP5_8N) / deval (z, P5_8D, NP5_8D); - q = neval (z, Q5_8N, NQ5_8N) / deval (z, Q5_8D, NQ5_8D); - } - else - { - p = neval (z, P4_5N, NP4_5N) / deval (z, P4_5D, NP4_5D); - q = neval (z, Q4_5N, NQ4_5N) / deval (z, Q4_5D, NQ4_5D); - } - } /* .25 */ - else /* if (xinv <= 0.5) */ - { - if (xinv <= 0.375) - { - if (xinv <= 0.3125) - { - p = neval (z, P3r2_4N, NP3r2_4N) / deval (z, P3r2_4D, NP3r2_4D); - q = neval (z, Q3r2_4N, NQ3r2_4N) / deval (z, Q3r2_4D, NQ3r2_4D); - } - else - { - p = neval (z, P2r7_3r2N, NP2r7_3r2N) - / deval (z, P2r7_3r2D, NP2r7_3r2D); - q = neval (z, Q2r7_3r2N, NQ2r7_3r2N) - / deval (z, Q2r7_3r2D, NQ2r7_3r2D); - } - } - else if (xinv <= 0.4375) - { - p = neval (z, P2r3_2r7N, NP2r3_2r7N) - / deval (z, P2r3_2r7D, NP2r3_2r7D); - q = neval (z, Q2r3_2r7N, NQ2r3_2r7N) - / deval (z, Q2r3_2r7D, NQ2r3_2r7D); - } - else - { - p = neval (z, P2_2r3N, NP2_2r3N) / deval (z, P2_2r3D, NP2_2r3D); - q = neval (z, Q2_2r3N, NQ2_2r3N) / deval (z, Q2_2r3D, NQ2_2r3D); - } - } - p = 1 + z * p; - q = z * xinv * q; - q = q - L(0.125) * xinv; - z = ONEOSQPI * (p * ss + q * cc) / __ieee754_sqrtl (x); - return z; -} -strong_alias (__ieee754_y0l, __y0l_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_j1l.c b/sysdeps/ieee754/ldbl-128/e_j1l.c deleted file mode 100644 index 6fc69faa3c..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_j1l.c +++ /dev/null @@ -1,961 +0,0 @@ -/* j1l.c - * - * Bessel function of order one - * - * - * - * SYNOPSIS: - * - * long double x, y, j1l(); - * - * y = j1l( x ); - * - * - * - * DESCRIPTION: - * - * Returns Bessel function of first kind, order one of the argument. - * - * The domain is divided into two major intervals [0, 2] and - * (2, infinity). In the first interval the rational approximation is - * J1(x) = .5x + x x^2 R(x^2) - * - * The second interval is further partitioned into eight equal segments - * of 1/x. - * J1(x) = sqrt(2/(pi x)) (P1(x) cos(X) - Q1(x) sin(X)), - * X = x - 3 pi / 4, - * - * and the auxiliary functions are given by - * - * J1(x)cos(X) + Y1(x)sin(X) = sqrt( 2/(pi x)) P1(x), - * P1(x) = 1 + 1/x^2 R(1/x^2) - * - * Y1(x)cos(X) - J1(x)sin(X) = sqrt( 2/(pi x)) Q1(x), - * Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)). - * - * - * - * ACCURACY: - * - * Absolute error: - * arithmetic domain # trials peak rms - * IEEE 0, 30 100000 2.8e-34 2.7e-35 - * - * - */ - -/* y1l.c - * - * Bessel function of the second kind, order one - * - * - * - * SYNOPSIS: - * - * double x, y, y1l(); - * - * y = y1l( x ); - * - * - * - * DESCRIPTION: - * - * Returns Bessel function of the second kind, of order - * one, of the argument. - * - * The domain is divided into two major intervals [0, 2] and - * (2, infinity). In the first interval the rational approximation is - * Y1(x) = 2/pi * (log(x) * J1(x) - 1/x) + x R(x^2) . - * In the second interval the approximation is the same as for J1(x), and - * Y1(x) = sqrt(2/(pi x)) (P1(x) sin(X) + Q1(x) cos(X)), - * X = x - 3 pi / 4. - * - * ACCURACY: - * - * Absolute error, when y0(x) < 1; else relative error: - * - * arithmetic domain # trials peak rms - * IEEE 0, 30 100000 2.7e-34 2.9e-35 - * - */ - -/* Copyright 2001 by Stephen L. Moshier (moshier@na-net.onrl.gov). - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -#include -#include -#include -#include - -/* 1 / sqrt(pi) */ -static const _Float128 ONEOSQPI = L(5.6418958354775628694807945156077258584405E-1); -/* 2 / pi */ -static const _Float128 TWOOPI = L(6.3661977236758134307553505349005744813784E-1); -static const _Float128 zero = 0; - -/* J1(x) = .5x + x x^2 R(x^2) - Peak relative error 1.9e-35 - 0 <= x <= 2 */ -#define NJ0_2N 6 -static const _Float128 J0_2N[NJ0_2N + 1] = { - L(-5.943799577386942855938508697619735179660E16), - L(1.812087021305009192259946997014044074711E15), - L(-2.761698314264509665075127515729146460895E13), - L(2.091089497823600978949389109350658815972E11), - L(-8.546413231387036372945453565654130054307E8), - L(1.797229225249742247475464052741320612261E6), - L(-1.559552840946694171346552770008812083969E3) -}; -#define NJ0_2D 6 -static const _Float128 J0_2D[NJ0_2D + 1] = { - L(9.510079323819108569501613916191477479397E17), - L(1.063193817503280529676423936545854693915E16), - L(5.934143516050192600795972192791775226920E13), - L(2.168000911950620999091479265214368352883E11), - L(5.673775894803172808323058205986256928794E8), - L(1.080329960080981204840966206372671147224E6), - L(1.411951256636576283942477881535283304912E3), - /* 1.000000000000000000000000000000000000000E0L */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - 0 <= 1/x <= .0625 - Peak relative error 3.6e-36 */ -#define NP16_IN 9 -static const _Float128 P16_IN[NP16_IN + 1] = { - L(5.143674369359646114999545149085139822905E-16), - L(4.836645664124562546056389268546233577376E-13), - L(1.730945562285804805325011561498453013673E-10), - L(3.047976856147077889834905908605310585810E-8), - L(2.855227609107969710407464739188141162386E-6), - L(1.439362407936705484122143713643023998457E-4), - L(3.774489768532936551500999699815873422073E-3), - L(4.723962172984642566142399678920790598426E-2), - L(2.359289678988743939925017240478818248735E-1), - L(3.032580002220628812728954785118117124520E-1), -}; -#define NP16_ID 9 -static const _Float128 P16_ID[NP16_ID + 1] = { - L(4.389268795186898018132945193912677177553E-15), - L(4.132671824807454334388868363256830961655E-12), - L(1.482133328179508835835963635130894413136E-9), - L(2.618941412861122118906353737117067376236E-7), - L(2.467854246740858470815714426201888034270E-5), - L(1.257192927368839847825938545925340230490E-3), - L(3.362739031941574274949719324644120720341E-2), - L(4.384458231338934105875343439265370178858E-1), - L(2.412830809841095249170909628197264854651E0), - L(4.176078204111348059102962617368214856874E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - 0.0625 <= 1/x <= 0.125 - Peak relative error 1.9e-36 */ -#define NP8_16N 11 -static const _Float128 P8_16N[NP8_16N + 1] = { - L(2.984612480763362345647303274082071598135E-16), - L(1.923651877544126103941232173085475682334E-13), - L(4.881258879388869396043760693256024307743E-11), - L(6.368866572475045408480898921866869811889E-9), - L(4.684818344104910450523906967821090796737E-7), - L(2.005177298271593587095982211091300382796E-5), - L(4.979808067163957634120681477207147536182E-4), - L(6.946005761642579085284689047091173581127E-3), - L(5.074601112955765012750207555985299026204E-2), - L(1.698599455896180893191766195194231825379E-1), - L(1.957536905259237627737222775573623779638E-1), - L(2.991314703282528370270179989044994319374E-2), -}; -#define NP8_16D 10 -static const _Float128 P8_16D[NP8_16D + 1] = { - L(2.546869316918069202079580939942463010937E-15), - L(1.644650111942455804019788382157745229955E-12), - L(4.185430770291694079925607420808011147173E-10), - L(5.485331966975218025368698195861074143153E-8), - L(4.062884421686912042335466327098932678905E-6), - L(1.758139661060905948870523641319556816772E-4), - L(4.445143889306356207566032244985607493096E-3), - L(6.391901016293512632765621532571159071158E-2), - L(4.933040207519900471177016015718145795434E-1), - L(1.839144086168947712971630337250761842976E0), - L(2.715120873995490920415616716916149586579E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - 0.125 <= 1/x <= 0.1875 - Peak relative error 1.3e-36 */ -#define NP5_8N 10 -static const _Float128 P5_8N[NP5_8N + 1] = { - L(2.837678373978003452653763806968237227234E-12), - L(9.726641165590364928442128579282742354806E-10), - L(1.284408003604131382028112171490633956539E-7), - L(8.524624695868291291250573339272194285008E-6), - L(3.111516908953172249853673787748841282846E-4), - L(6.423175156126364104172801983096596409176E-3), - L(7.430220589989104581004416356260692450652E-2), - L(4.608315409833682489016656279567605536619E-1), - L(1.396870223510964882676225042258855977512E0), - L(1.718500293904122365894630460672081526236E0), - L(5.465927698800862172307352821870223855365E-1) -}; -#define NP5_8D 10 -static const _Float128 P5_8D[NP5_8D + 1] = { - L(2.421485545794616609951168511612060482715E-11), - L(8.329862750896452929030058039752327232310E-9), - L(1.106137992233383429630592081375289010720E-6), - L(7.405786153760681090127497796448503306939E-5), - L(2.740364785433195322492093333127633465227E-3), - L(5.781246470403095224872243564165254652198E-2), - L(6.927711353039742469918754111511109983546E-1), - L(4.558679283460430281188304515922826156690E0), - L(1.534468499844879487013168065728837900009E1), - L(2.313927430889218597919624843161569422745E1), - L(1.194506341319498844336768473218382828637E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - Peak relative error 1.4e-36 - 0.1875 <= 1/x <= 0.25 */ -#define NP4_5N 10 -static const _Float128 P4_5N[NP4_5N + 1] = { - L(1.846029078268368685834261260420933914621E-10), - L(3.916295939611376119377869680335444207768E-8), - L(3.122158792018920627984597530935323997312E-6), - L(1.218073444893078303994045653603392272450E-4), - L(2.536420827983485448140477159977981844883E-3), - L(2.883011322006690823959367922241169171315E-2), - L(1.755255190734902907438042414495469810830E-1), - L(5.379317079922628599870898285488723736599E-1), - L(7.284904050194300773890303361501726561938E-1), - L(3.270110346613085348094396323925000362813E-1), - L(1.804473805689725610052078464951722064757E-2), -}; -#define NP4_5D 9 -static const _Float128 P4_5D[NP4_5D + 1] = { - L(1.575278146806816970152174364308980863569E-9), - L(3.361289173657099516191331123405675054321E-7), - L(2.704692281550877810424745289838790693708E-5), - L(1.070854930483999749316546199273521063543E-3), - L(2.282373093495295842598097265627962125411E-2), - L(2.692025460665354148328762368240343249830E-1), - L(1.739892942593664447220951225734811133759E0), - L(5.890727576752230385342377570386657229324E0), - L(9.517442287057841500750256954117735128153E0), - L(6.100616353935338240775363403030137736013E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - Peak relative error 3.0e-36 - 0.25 <= 1/x <= 0.3125 */ -#define NP3r2_4N 9 -static const _Float128 P3r2_4N[NP3r2_4N + 1] = { - L(8.240803130988044478595580300846665863782E-8), - L(1.179418958381961224222969866406483744580E-5), - L(6.179787320956386624336959112503824397755E-4), - L(1.540270833608687596420595830747166658383E-2), - L(1.983904219491512618376375619598837355076E-1), - L(1.341465722692038870390470651608301155565E0), - L(4.617865326696612898792238245990854646057E0), - L(7.435574801812346424460233180412308000587E0), - L(4.671327027414635292514599201278557680420E0), - L(7.299530852495776936690976966995187714739E-1), -}; -#define NP3r2_4D 9 -static const _Float128 P3r2_4D[NP3r2_4D + 1] = { - L(7.032152009675729604487575753279187576521E-7), - L(1.015090352324577615777511269928856742848E-4), - L(5.394262184808448484302067955186308730620E-3), - L(1.375291438480256110455809354836988584325E-1), - L(1.836247144461106304788160919310404376670E0), - L(1.314378564254376655001094503090935880349E1), - L(4.957184590465712006934452500894672343488E1), - L(9.287394244300647738855415178790263465398E1), - L(7.652563275535900609085229286020552768399E1), - L(2.147042473003074533150718117770093209096E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - Peak relative error 1.0e-35 - 0.3125 <= 1/x <= 0.375 */ -#define NP2r7_3r2N 9 -static const _Float128 P2r7_3r2N[NP2r7_3r2N + 1] = { - L(4.599033469240421554219816935160627085991E-7), - L(4.665724440345003914596647144630893997284E-5), - L(1.684348845667764271596142716944374892756E-3), - L(2.802446446884455707845985913454440176223E-2), - L(2.321937586453963310008279956042545173930E-1), - L(9.640277413988055668692438709376437553804E-1), - L(1.911021064710270904508663334033003246028E0), - L(1.600811610164341450262992138893970224971E0), - L(4.266299218652587901171386591543457861138E-1), - L(1.316470424456061252962568223251247207325E-2), -}; -#define NP2r7_3r2D 8 -static const _Float128 P2r7_3r2D[NP2r7_3r2D + 1] = { - L(3.924508608545520758883457108453520099610E-6), - L(4.029707889408829273226495756222078039823E-4), - L(1.484629715787703260797886463307469600219E-2), - L(2.553136379967180865331706538897231588685E-1), - L(2.229457223891676394409880026887106228740E0), - L(1.005708903856384091956550845198392117318E1), - L(2.277082659664386953166629360352385889558E1), - L(2.384726835193630788249826630376533988245E1), - L(9.700989749041320895890113781610939632410E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - Peak relative error 1.7e-36 - 0.3125 <= 1/x <= 0.4375 */ -#define NP2r3_2r7N 9 -static const _Float128 P2r3_2r7N[NP2r3_2r7N + 1] = { - L(3.916766777108274628543759603786857387402E-6), - L(3.212176636756546217390661984304645137013E-4), - L(9.255768488524816445220126081207248947118E-3), - L(1.214853146369078277453080641911700735354E-1), - L(7.855163309847214136198449861311404633665E-1), - L(2.520058073282978403655488662066019816540E0), - L(3.825136484837545257209234285382183711466E0), - L(2.432569427554248006229715163865569506873E0), - L(4.877934835018231178495030117729800489743E-1), - L(1.109902737860249670981355149101343427885E-2), -}; -#define NP2r3_2r7D 8 -static const _Float128 P2r3_2r7D[NP2r3_2r7D + 1] = { - L(3.342307880794065640312646341190547184461E-5), - L(2.782182891138893201544978009012096558265E-3), - L(8.221304931614200702142049236141249929207E-2), - L(1.123728246291165812392918571987858010949E0), - L(7.740482453652715577233858317133423434590E0), - L(2.737624677567945952953322566311201919139E1), - L(4.837181477096062403118304137851260715475E1), - L(3.941098643468580791437772701093795299274E1), - L(1.245821247166544627558323920382547533630E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2), - Peak relative error 1.7e-35 - 0.4375 <= 1/x <= 0.5 */ -#define NP2_2r3N 8 -static const _Float128 P2_2r3N[NP2_2r3N + 1] = { - L(3.397930802851248553545191160608731940751E-4), - L(2.104020902735482418784312825637833698217E-2), - L(4.442291771608095963935342749477836181939E-1), - L(4.131797328716583282869183304291833754967E0), - L(1.819920169779026500146134832455189917589E1), - L(3.781779616522937565300309684282401791291E1), - L(3.459605449728864218972931220783543410347E1), - L(1.173594248397603882049066603238568316561E1), - L(9.455702270242780642835086549285560316461E-1), -}; -#define NP2_2r3D 8 -static const _Float128 P2_2r3D[NP2_2r3D + 1] = { - L(2.899568897241432883079888249845707400614E-3), - L(1.831107138190848460767699919531132426356E-1), - L(3.999350044057883839080258832758908825165E0), - L(3.929041535867957938340569419874195303712E1), - L(1.884245613422523323068802689915538908291E2), - L(4.461469948819229734353852978424629815929E2), - L(5.004998753999796821224085972610636347903E2), - L(2.386342520092608513170837883757163414100E2), - L(3.791322528149347975999851588922424189957E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 8.0e-36 - 0 <= 1/x <= .0625 */ -#define NQ16_IN 10 -static const _Float128 Q16_IN[NQ16_IN + 1] = { - L(-3.917420835712508001321875734030357393421E-18), - L(-4.440311387483014485304387406538069930457E-15), - L(-1.951635424076926487780929645954007139616E-12), - L(-4.318256438421012555040546775651612810513E-10), - L(-5.231244131926180765270446557146989238020E-8), - L(-3.540072702902043752460711989234732357653E-6), - L(-1.311017536555269966928228052917534882984E-4), - L(-2.495184669674631806622008769674827575088E-3), - L(-2.141868222987209028118086708697998506716E-2), - L(-6.184031415202148901863605871197272650090E-2), - L(-1.922298704033332356899546792898156493887E-2), -}; -#define NQ16_ID 9 -static const _Float128 Q16_ID[NQ16_ID + 1] = { - L(3.820418034066293517479619763498400162314E-17), - L(4.340702810799239909648911373329149354911E-14), - L(1.914985356383416140706179933075303538524E-11), - L(4.262333682610888819476498617261895474330E-9), - L(5.213481314722233980346462747902942182792E-7), - L(3.585741697694069399299005316809954590558E-5), - L(1.366513429642842006385029778105539457546E-3), - L(2.745282599850704662726337474371355160594E-2), - L(2.637644521611867647651200098449903330074E-1), - L(1.006953426110765984590782655598680488746E0), - /* 1.000000000000000000000000000000000000000E0 */ - }; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 1.9e-36 - 0.0625 <= 1/x <= 0.125 */ -#define NQ8_16N 11 -static const _Float128 Q8_16N[NQ8_16N + 1] = { - L(-2.028630366670228670781362543615221542291E-17), - L(-1.519634620380959966438130374006858864624E-14), - L(-4.540596528116104986388796594639405114524E-12), - L(-7.085151756671466559280490913558388648274E-10), - L(-6.351062671323970823761883833531546885452E-8), - L(-3.390817171111032905297982523519503522491E-6), - L(-1.082340897018886970282138836861233213972E-4), - L(-2.020120801187226444822977006648252379508E-3), - L(-2.093169910981725694937457070649605557555E-2), - L(-1.092176538874275712359269481414448063393E-1), - L(-2.374790947854765809203590474789108718733E-1), - L(-1.365364204556573800719985118029601401323E-1), -}; -#define NQ8_16D 11 -static const _Float128 Q8_16D[NQ8_16D + 1] = { - L(1.978397614733632533581207058069628242280E-16), - L(1.487361156806202736877009608336766720560E-13), - L(4.468041406888412086042576067133365913456E-11), - L(7.027822074821007443672290507210594648877E-9), - L(6.375740580686101224127290062867976007374E-7), - L(3.466887658320002225888644977076410421940E-5), - L(1.138625640905289601186353909213719596986E-3), - L(2.224470799470414663443449818235008486439E-2), - L(2.487052928527244907490589787691478482358E-1), - L(1.483927406564349124649083853892380899217E0), - L(4.182773513276056975777258788903489507705E0), - L(4.419665392573449746043880892524360870944E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 1.5e-35 - 0.125 <= 1/x <= 0.1875 */ -#define NQ5_8N 10 -static const _Float128 Q5_8N[NQ5_8N + 1] = { - L(-3.656082407740970534915918390488336879763E-13), - L(-1.344660308497244804752334556734121771023E-10), - L(-1.909765035234071738548629788698150760791E-8), - L(-1.366668038160120210269389551283666716453E-6), - L(-5.392327355984269366895210704976314135683E-5), - L(-1.206268245713024564674432357634540343884E-3), - L(-1.515456784370354374066417703736088291287E-2), - L(-1.022454301137286306933217746545237098518E-1), - L(-3.373438906472495080504907858424251082240E-1), - L(-4.510782522110845697262323973549178453405E-1), - L(-1.549000892545288676809660828213589804884E-1), -}; -#define NQ5_8D 10 -static const _Float128 Q5_8D[NQ5_8D + 1] = { - L(3.565550843359501079050699598913828460036E-12), - L(1.321016015556560621591847454285330528045E-9), - L(1.897542728662346479999969679234270605975E-7), - L(1.381720283068706710298734234287456219474E-5), - L(5.599248147286524662305325795203422873725E-4), - L(1.305442352653121436697064782499122164843E-2), - L(1.750234079626943298160445750078631894985E-1), - L(1.311420542073436520965439883806946678491E0), - L(5.162757689856842406744504211089724926650E0), - L(9.527760296384704425618556332087850581308E0), - L(6.604648207463236667912921642545100248584E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 1.3e-35 - 0.1875 <= 1/x <= 0.25 */ -#define NQ4_5N 10 -static const _Float128 Q4_5N[NQ4_5N + 1] = { - L(-4.079513568708891749424783046520200903755E-11), - L(-9.326548104106791766891812583019664893311E-9), - L(-8.016795121318423066292906123815687003356E-7), - L(-3.372350544043594415609295225664186750995E-5), - L(-7.566238665947967882207277686375417983917E-4), - L(-9.248861580055565402130441618521591282617E-3), - L(-6.033106131055851432267702948850231270338E-2), - L(-1.966908754799996793730369265431584303447E-1), - L(-2.791062741179964150755788226623462207560E-1), - L(-1.255478605849190549914610121863534191666E-1), - L(-4.320429862021265463213168186061696944062E-3), -}; -#define NQ4_5D 9 -static const _Float128 Q4_5D[NQ4_5D + 1] = { - L(3.978497042580921479003851216297330701056E-10), - L(9.203304163828145809278568906420772246666E-8), - L(8.059685467088175644915010485174545743798E-6), - L(3.490187375993956409171098277561669167446E-4), - L(8.189109654456872150100501732073810028829E-3), - L(1.072572867311023640958725265762483033769E-1), - L(7.790606862409960053675717185714576937994E-1), - L(3.016049768232011196434185423512777656328E0), - L(5.722963851442769787733717162314477949360E0), - L(4.510527838428473279647251350931380867663E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 2.1e-35 - 0.25 <= 1/x <= 0.3125 */ -#define NQ3r2_4N 9 -static const _Float128 Q3r2_4N[NQ3r2_4N + 1] = { - L(-1.087480809271383885936921889040388133627E-8), - L(-1.690067828697463740906962973479310170932E-6), - L(-9.608064416995105532790745641974762550982E-5), - L(-2.594198839156517191858208513873961837410E-3), - L(-3.610954144421543968160459863048062977822E-2), - L(-2.629866798251843212210482269563961685666E-1), - L(-9.709186825881775885917984975685752956660E-1), - L(-1.667521829918185121727268867619982417317E0), - L(-1.109255082925540057138766105229900943501E0), - L(-1.812932453006641348145049323713469043328E-1), -}; -#define NQ3r2_4D 9 -static const _Float128 Q3r2_4D[NQ3r2_4D + 1] = { - L(1.060552717496912381388763753841473407026E-7), - L(1.676928002024920520786883649102388708024E-5), - L(9.803481712245420839301400601140812255737E-4), - L(2.765559874262309494758505158089249012930E-2), - L(4.117921827792571791298862613287549140706E-1), - L(3.323769515244751267093378361930279161413E0), - L(1.436602494405814164724810151689705353670E1), - L(3.163087869617098638064881410646782408297E1), - L(3.198181264977021649489103980298349589419E1), - L(1.203649258862068431199471076202897823272E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 1.6e-36 - 0.3125 <= 1/x <= 0.375 */ -#define NQ2r7_3r2N 9 -static const _Float128 Q2r7_3r2N[NQ2r7_3r2N + 1] = { - L(-1.723405393982209853244278760171643219530E-7), - L(-2.090508758514655456365709712333460087442E-5), - L(-9.140104013370974823232873472192719263019E-4), - L(-1.871349499990714843332742160292474780128E-2), - L(-1.948930738119938669637865956162512983416E-1), - L(-1.048764684978978127908439526343174139788E0), - L(-2.827714929925679500237476105843643064698E0), - L(-3.508761569156476114276988181329773987314E0), - L(-1.669332202790211090973255098624488308989E0), - L(-1.930796319299022954013840684651016077770E-1), -}; -#define NQ2r7_3r2D 9 -static const _Float128 Q2r7_3r2D[NQ2r7_3r2D + 1] = { - L(1.680730662300831976234547482334347983474E-6), - L(2.084241442440551016475972218719621841120E-4), - L(9.445316642108367479043541702688736295579E-3), - L(2.044637889456631896650179477133252184672E-1), - L(2.316091982244297350829522534435350078205E0), - L(1.412031891783015085196708811890448488865E1), - L(4.583830154673223384837091077279595496149E1), - L(7.549520609270909439885998474045974122261E1), - L(5.697605832808113367197494052388203310638E1), - L(1.601496240876192444526383314589371686234E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 9.5e-36 - 0.375 <= 1/x <= 0.4375 */ -#define NQ2r3_2r7N 9 -static const _Float128 Q2r3_2r7N[NQ2r3_2r7N + 1] = { - L(-8.603042076329122085722385914954878953775E-7), - L(-7.701746260451647874214968882605186675720E-5), - L(-2.407932004380727587382493696877569654271E-3), - L(-3.403434217607634279028110636919987224188E-2), - L(-2.348707332185238159192422084985713102877E-1), - L(-7.957498841538254916147095255700637463207E-1), - L(-1.258469078442635106431098063707934348577E0), - L(-8.162415474676345812459353639449971369890E-1), - L(-1.581783890269379690141513949609572806898E-1), - L(-1.890595651683552228232308756569450822905E-3), -}; -#define NQ2r3_2r7D 8 -static const _Float128 Q2r3_2r7D[NQ2r3_2r7D + 1] = { - L(8.390017524798316921170710533381568175665E-6), - L(7.738148683730826286477254659973968763659E-4), - L(2.541480810958665794368759558791634341779E-2), - L(3.878879789711276799058486068562386244873E-1), - L(3.003783779325811292142957336802456109333E0), - L(1.206480374773322029883039064575464497400E1), - L(2.458414064785315978408974662900438351782E1), - L(2.367237826273668567199042088835448715228E1), - L(9.231451197519171090875569102116321676763E0), - /* 1.000000000000000000000000000000000000000E0 */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)), - Peak relative error 1.4e-36 - 0.4375 <= 1/x <= 0.5 */ -#define NQ2_2r3N 9 -static const _Float128 Q2_2r3N[NQ2_2r3N + 1] = { - L(-5.552507516089087822166822364590806076174E-6), - L(-4.135067659799500521040944087433752970297E-4), - L(-1.059928728869218962607068840646564457980E-2), - L(-1.212070036005832342565792241385459023801E-1), - L(-6.688350110633603958684302153362735625156E-1), - L(-1.793587878197360221340277951304429821582E0), - L(-2.225407682237197485644647380483725045326E0), - L(-1.123402135458940189438898496348239744403E0), - L(-1.679187241566347077204805190763597299805E-1), - L(-1.458550613639093752909985189067233504148E-3), -}; -#define NQ2_2r3D 8 -static const _Float128 Q2_2r3D[NQ2_2r3D + 1] = { - L(5.415024336507980465169023996403597916115E-5), - L(4.179246497380453022046357404266022870788E-3), - L(1.136306384261959483095442402929502368598E-1), - L(1.422640343719842213484515445393284072830E0), - L(8.968786703393158374728850922289204805764E0), - L(2.914542473339246127533384118781216495934E1), - L(4.781605421020380669870197378210457054685E1), - L(3.693865837171883152382820584714795072937E1), - L(1.153220502744204904763115556224395893076E1), - /* 1.000000000000000000000000000000000000000E0 */ -}; - - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -neval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -deval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Bessel function of the first kind, order one. */ - -_Float128 -__ieee754_j1l (_Float128 x) -{ - _Float128 xx, xinv, z, p, q, c, s, cc, ss; - - if (! isfinite (x)) - { - if (x != x) - return x + x; - else - return 0; - } - if (x == 0) - return x; - xx = fabsl (x); - if (xx <= L(0x1p-58)) - { - _Float128 ret = x * L(0.5); - math_check_force_underflow (ret); - if (ret == 0) - __set_errno (ERANGE); - return ret; - } - if (xx <= 2) - { - /* 0 <= x <= 2 */ - z = xx * xx; - p = xx * z * neval (z, J0_2N, NJ0_2N) / deval (z, J0_2D, NJ0_2D); - p += L(0.5) * xx; - if (x < 0) - p = -p; - return p; - } - - /* X = x - 3 pi/4 - cos(X) = cos(x) cos(3 pi/4) + sin(x) sin(3 pi/4) - = 1/sqrt(2) * (-cos(x) + sin(x)) - sin(X) = sin(x) cos(3 pi/4) - cos(x) sin(3 pi/4) - = -1/sqrt(2) * (sin(x) + cos(x)) - cf. Fdlibm. */ - __sincosl (xx, &s, &c); - ss = -s - c; - cc = s - c; - if (xx <= LDBL_MAX / 2) - { - z = __cosl (xx + xx); - if ((s * c) > 0) - cc = z / ss; - else - ss = z / cc; - } - - if (xx > L(0x1p256)) - { - z = ONEOSQPI * cc / __ieee754_sqrtl (xx); - if (x < 0) - z = -z; - return z; - } - - xinv = 1 / xx; - z = xinv * xinv; - if (xinv <= 0.25) - { - if (xinv <= 0.125) - { - if (xinv <= 0.0625) - { - p = neval (z, P16_IN, NP16_IN) / deval (z, P16_ID, NP16_ID); - q = neval (z, Q16_IN, NQ16_IN) / deval (z, Q16_ID, NQ16_ID); - } - else - { - p = neval (z, P8_16N, NP8_16N) / deval (z, P8_16D, NP8_16D); - q = neval (z, Q8_16N, NQ8_16N) / deval (z, Q8_16D, NQ8_16D); - } - } - else if (xinv <= 0.1875) - { - p = neval (z, P5_8N, NP5_8N) / deval (z, P5_8D, NP5_8D); - q = neval (z, Q5_8N, NQ5_8N) / deval (z, Q5_8D, NQ5_8D); - } - else - { - p = neval (z, P4_5N, NP4_5N) / deval (z, P4_5D, NP4_5D); - q = neval (z, Q4_5N, NQ4_5N) / deval (z, Q4_5D, NQ4_5D); - } - } /* .25 */ - else /* if (xinv <= 0.5) */ - { - if (xinv <= 0.375) - { - if (xinv <= 0.3125) - { - p = neval (z, P3r2_4N, NP3r2_4N) / deval (z, P3r2_4D, NP3r2_4D); - q = neval (z, Q3r2_4N, NQ3r2_4N) / deval (z, Q3r2_4D, NQ3r2_4D); - } - else - { - p = neval (z, P2r7_3r2N, NP2r7_3r2N) - / deval (z, P2r7_3r2D, NP2r7_3r2D); - q = neval (z, Q2r7_3r2N, NQ2r7_3r2N) - / deval (z, Q2r7_3r2D, NQ2r7_3r2D); - } - } - else if (xinv <= 0.4375) - { - p = neval (z, P2r3_2r7N, NP2r3_2r7N) - / deval (z, P2r3_2r7D, NP2r3_2r7D); - q = neval (z, Q2r3_2r7N, NQ2r3_2r7N) - / deval (z, Q2r3_2r7D, NQ2r3_2r7D); - } - else - { - p = neval (z, P2_2r3N, NP2_2r3N) / deval (z, P2_2r3D, NP2_2r3D); - q = neval (z, Q2_2r3N, NQ2_2r3N) / deval (z, Q2_2r3D, NQ2_2r3D); - } - } - p = 1 + z * p; - q = z * q; - q = q * xinv + L(0.375) * xinv; - z = ONEOSQPI * (p * cc - q * ss) / __ieee754_sqrtl (xx); - if (x < 0) - z = -z; - return z; -} -strong_alias (__ieee754_j1l, __j1l_finite) - - -/* Y1(x) = 2/pi * (log(x) * J1(x) - 1/x) + x R(x^2) - Peak relative error 6.2e-38 - 0 <= x <= 2 */ -#define NY0_2N 7 -static _Float128 Y0_2N[NY0_2N + 1] = { - L(-6.804415404830253804408698161694720833249E19), - L(1.805450517967019908027153056150465849237E19), - L(-8.065747497063694098810419456383006737312E17), - L(1.401336667383028259295830955439028236299E16), - L(-1.171654432898137585000399489686629680230E14), - L(5.061267920943853732895341125243428129150E11), - L(-1.096677850566094204586208610960870217970E9), - L(9.541172044989995856117187515882879304461E5), -}; -#define NY0_2D 7 -static _Float128 Y0_2D[NY0_2D + 1] = { - L(3.470629591820267059538637461549677594549E20), - L(4.120796439009916326855848107545425217219E18), - L(2.477653371652018249749350657387030814542E16), - L(9.954678543353888958177169349272167762797E13), - L(2.957927997613630118216218290262851197754E11), - L(6.748421382188864486018861197614025972118E8), - L(1.173453425218010888004562071020305709319E6), - L(1.450335662961034949894009554536003377187E3), - /* 1.000000000000000000000000000000000000000E0 */ -}; - - -/* Bessel function of the second kind, order one. */ - -_Float128 -__ieee754_y1l (_Float128 x) -{ - _Float128 xx, xinv, z, p, q, c, s, cc, ss; - - if (! isfinite (x)) - return 1 / (x + x * x); - if (x <= 0) - { - if (x < 0) - return (zero / (zero * x)); - return -1 / zero; /* -inf and divide by zero exception. */ - } - xx = fabsl (x); - if (xx <= 0x1p-114) - { - z = -TWOOPI / x; - if (isinf (z)) - __set_errno (ERANGE); - return z; - } - if (xx <= 2) - { - /* 0 <= x <= 2 */ - SET_RESTORE_ROUNDL (FE_TONEAREST); - z = xx * xx; - p = xx * neval (z, Y0_2N, NY0_2N) / deval (z, Y0_2D, NY0_2D); - p = -TWOOPI / xx + p; - p = TWOOPI * __ieee754_logl (x) * __ieee754_j1l (x) + p; - return p; - } - - /* X = x - 3 pi/4 - cos(X) = cos(x) cos(3 pi/4) + sin(x) sin(3 pi/4) - = 1/sqrt(2) * (-cos(x) + sin(x)) - sin(X) = sin(x) cos(3 pi/4) - cos(x) sin(3 pi/4) - = -1/sqrt(2) * (sin(x) + cos(x)) - cf. Fdlibm. */ - __sincosl (xx, &s, &c); - ss = -s - c; - cc = s - c; - if (xx <= LDBL_MAX / 2) - { - z = __cosl (xx + xx); - if ((s * c) > 0) - cc = z / ss; - else - ss = z / cc; - } - - if (xx > L(0x1p256)) - return ONEOSQPI * ss / __ieee754_sqrtl (xx); - - xinv = 1 / xx; - z = xinv * xinv; - if (xinv <= 0.25) - { - if (xinv <= 0.125) - { - if (xinv <= 0.0625) - { - p = neval (z, P16_IN, NP16_IN) / deval (z, P16_ID, NP16_ID); - q = neval (z, Q16_IN, NQ16_IN) / deval (z, Q16_ID, NQ16_ID); - } - else - { - p = neval (z, P8_16N, NP8_16N) / deval (z, P8_16D, NP8_16D); - q = neval (z, Q8_16N, NQ8_16N) / deval (z, Q8_16D, NQ8_16D); - } - } - else if (xinv <= 0.1875) - { - p = neval (z, P5_8N, NP5_8N) / deval (z, P5_8D, NP5_8D); - q = neval (z, Q5_8N, NQ5_8N) / deval (z, Q5_8D, NQ5_8D); - } - else - { - p = neval (z, P4_5N, NP4_5N) / deval (z, P4_5D, NP4_5D); - q = neval (z, Q4_5N, NQ4_5N) / deval (z, Q4_5D, NQ4_5D); - } - } /* .25 */ - else /* if (xinv <= 0.5) */ - { - if (xinv <= 0.375) - { - if (xinv <= 0.3125) - { - p = neval (z, P3r2_4N, NP3r2_4N) / deval (z, P3r2_4D, NP3r2_4D); - q = neval (z, Q3r2_4N, NQ3r2_4N) / deval (z, Q3r2_4D, NQ3r2_4D); - } - else - { - p = neval (z, P2r7_3r2N, NP2r7_3r2N) - / deval (z, P2r7_3r2D, NP2r7_3r2D); - q = neval (z, Q2r7_3r2N, NQ2r7_3r2N) - / deval (z, Q2r7_3r2D, NQ2r7_3r2D); - } - } - else if (xinv <= 0.4375) - { - p = neval (z, P2r3_2r7N, NP2r3_2r7N) - / deval (z, P2r3_2r7D, NP2r3_2r7D); - q = neval (z, Q2r3_2r7N, NQ2r3_2r7N) - / deval (z, Q2r3_2r7D, NQ2r3_2r7D); - } - else - { - p = neval (z, P2_2r3N, NP2_2r3N) / deval (z, P2_2r3D, NP2_2r3D); - q = neval (z, Q2_2r3N, NQ2_2r3N) / deval (z, Q2_2r3D, NQ2_2r3D); - } - } - p = 1 + z * p; - q = z * q; - q = q * xinv + L(0.375) * xinv; - z = ONEOSQPI * (p * ss + q * cc) / __ieee754_sqrtl (xx); - return z; -} -strong_alias (__ieee754_y1l, __y1l_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_jnl.c b/sysdeps/ieee754/ldbl-128/e_jnl.c deleted file mode 100644 index 470631e600..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_jnl.c +++ /dev/null @@ -1,419 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Modifications for 128-bit long double are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* - * __ieee754_jn(n, x), __ieee754_yn(n, x) - * floating point Bessel's function of the 1st and 2nd kind - * of order n - * - * Special cases: - * y0(0)=y1(0)=yn(n,0) = -inf with division by zero signal; - * y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal. - * Note 2. About jn(n,x), yn(n,x) - * For n=0, j0(x) is called, - * for n=1, j1(x) is called, - * for nx, a continued fraction approximation to - * j(n,x)/j(n-1,x) is evaluated and then backward - * recursion is used starting from a supposed value - * for j(n,x). The resulting value of j(0,x) is - * compared with the actual value to correct the - * supposed value of j(n,x). - * - * yn(n,x) is similar in all respects, except - * that forward recursion is used for all - * values of n>1. - * - */ - -#include -#include -#include -#include - -static const _Float128 - invsqrtpi = L(5.6418958354775628694807945156077258584405E-1), - two = 2, - one = 1, - zero = 0; - - -_Float128 -__ieee754_jnl (int n, _Float128 x) -{ - u_int32_t se; - int32_t i, ix, sgn; - _Float128 a, b, temp, di, ret; - _Float128 z, w; - ieee854_long_double_shape_type u; - - - /* J(-n,x) = (-1)^n * J(n, x), J(n, -x) = (-1)^n * J(n, x) - * Thus, J(-n,x) = J(n,-x) - */ - - u.value = x; - se = u.parts32.w0; - ix = se & 0x7fffffff; - - /* if J(n,NaN) is NaN */ - if (ix >= 0x7fff0000) - { - if ((u.parts32.w0 & 0xffff) | u.parts32.w1 | u.parts32.w2 | u.parts32.w3) - return x + x; - } - - if (n < 0) - { - n = -n; - x = -x; - se ^= 0x80000000; - } - if (n == 0) - return (__ieee754_j0l (x)); - if (n == 1) - return (__ieee754_j1l (x)); - sgn = (n & 1) & (se >> 31); /* even n -- 0, odd n -- sign(x) */ - x = fabsl (x); - - { - SET_RESTORE_ROUNDL (FE_TONEAREST); - if (x == 0 || ix >= 0x7fff0000) /* if x is 0 or inf */ - return sgn == 1 ? -zero : zero; - else if ((_Float128) n <= x) - { - /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ - if (ix >= 0x412D0000) - { /* x > 2**302 */ - - /* ??? Could use an expansion for large x here. */ - - /* (x >> n**2) - * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Let s=sin(x), c=cos(x), - * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then - * - * n sin(xn)*sqt2 cos(xn)*sqt2 - * ---------------------------------- - * 0 s-c c+s - * 1 -s-c -c+s - * 2 -s+c -c-s - * 3 s+c c-s - */ - _Float128 s; - _Float128 c; - __sincosl (x, &s, &c); - switch (n & 3) - { - case 0: - temp = c + s; - break; - case 1: - temp = -c + s; - break; - case 2: - temp = -c - s; - break; - case 3: - temp = c - s; - break; - } - b = invsqrtpi * temp / __ieee754_sqrtl (x); - } - else - { - a = __ieee754_j0l (x); - b = __ieee754_j1l (x); - for (i = 1; i < n; i++) - { - temp = b; - b = b * ((_Float128) (i + i) / x) - a; /* avoid underflow */ - a = temp; - } - } - } - else - { - if (ix < 0x3fc60000) - { /* x < 2**-57 */ - /* x is tiny, return the first Taylor expansion of J(n,x) - * J(n,x) = 1/n!*(x/2)^n - ... - */ - if (n >= 400) /* underflow, result < 10^-4952 */ - b = zero; - else - { - temp = x * 0.5; - b = temp; - for (a = one, i = 2; i <= n; i++) - { - a *= (_Float128) i; /* a = n! */ - b *= temp; /* b = (x/2)^n */ - } - b = b / a; - } - } - else - { - /* use backward recurrence */ - /* x x^2 x^2 - * J(n,x)/J(n-1,x) = ---- ------ ------ ..... - * 2n - 2(n+1) - 2(n+2) - * - * 1 1 1 - * (for large x) = ---- ------ ------ ..... - * 2n 2(n+1) 2(n+2) - * -- - ------ - ------ - - * x x x - * - * Let w = 2n/x and h=2/x, then the above quotient - * is equal to the continued fraction: - * 1 - * = ----------------------- - * 1 - * w - ----------------- - * 1 - * w+h - --------- - * w+2h - ... - * - * To determine how many terms needed, let - * Q(0) = w, Q(1) = w(w+h) - 1, - * Q(k) = (w+k*h)*Q(k-1) - Q(k-2), - * When Q(k) > 1e4 good for single - * When Q(k) > 1e9 good for double - * When Q(k) > 1e17 good for quadruple - */ - /* determine k */ - _Float128 t, v; - _Float128 q0, q1, h, tmp; - int32_t k, m; - w = (n + n) / (_Float128) x; - h = 2 / (_Float128) x; - q0 = w; - z = w + h; - q1 = w * z - 1; - k = 1; - while (q1 < L(1.0e17)) - { - k += 1; - z += h; - tmp = z * q1 - q0; - q0 = q1; - q1 = tmp; - } - m = n + n; - for (t = zero, i = 2 * (n + k); i >= m; i -= 2) - t = one / (i / x - t); - a = t; - b = one; - /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) - * Hence, if n*(log(2n/x)) > ... - * single 8.8722839355e+01 - * double 7.09782712893383973096e+02 - * long double 1.1356523406294143949491931077970765006170e+04 - * then recurrent value may overflow and the result is - * likely underflow to zero - */ - tmp = n; - v = two / x; - tmp = tmp * __ieee754_logl (fabsl (v * tmp)); - - if (tmp < L(1.1356523406294143949491931077970765006170e+04)) - { - for (i = n - 1, di = (_Float128) (i + i); i > 0; i--) - { - temp = b; - b *= di; - b = b / x - a; - a = temp; - di -= two; - } - } - else - { - for (i = n - 1, di = (_Float128) (i + i); i > 0; i--) - { - temp = b; - b *= di; - b = b / x - a; - a = temp; - di -= two; - /* scale b to avoid spurious overflow */ - if (b > L(1e100)) - { - a /= b; - t /= b; - b = one; - } - } - } - /* j0() and j1() suffer enormous loss of precision at and - * near zero; however, we know that their zero points never - * coincide, so just choose the one further away from zero. - */ - z = __ieee754_j0l (x); - w = __ieee754_j1l (x); - if (fabsl (z) >= fabsl (w)) - b = (t * z / b); - else - b = (t * w / a); - } - } - if (sgn == 1) - ret = -b; - else - ret = b; - } - if (ret == 0) - { - ret = __copysignl (LDBL_MIN, ret) * LDBL_MIN; - __set_errno (ERANGE); - } - else - math_check_force_underflow (ret); - return ret; -} -strong_alias (__ieee754_jnl, __jnl_finite) - -_Float128 -__ieee754_ynl (int n, _Float128 x) -{ - u_int32_t se; - int32_t i, ix; - int32_t sign; - _Float128 a, b, temp, ret; - ieee854_long_double_shape_type u; - - u.value = x; - se = u.parts32.w0; - ix = se & 0x7fffffff; - - /* if Y(n,NaN) is NaN */ - if (ix >= 0x7fff0000) - { - if ((u.parts32.w0 & 0xffff) | u.parts32.w1 | u.parts32.w2 | u.parts32.w3) - return x + x; - } - if (x <= 0) - { - if (x == 0) - return ((n < 0 && (n & 1) != 0) ? 1 : -1) / L(0.0); - if (se & 0x80000000) - return zero / (zero * x); - } - sign = 1; - if (n < 0) - { - n = -n; - sign = 1 - ((n & 1) << 1); - } - if (n == 0) - return (__ieee754_y0l (x)); - { - SET_RESTORE_ROUNDL (FE_TONEAREST); - if (n == 1) - { - ret = sign * __ieee754_y1l (x); - goto out; - } - if (ix >= 0x7fff0000) - return zero; - if (ix >= 0x412D0000) - { /* x > 2**302 */ - - /* ??? See comment above on the possible futility of this. */ - - /* (x >> n**2) - * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Let s=sin(x), c=cos(x), - * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then - * - * n sin(xn)*sqt2 cos(xn)*sqt2 - * ---------------------------------- - * 0 s-c c+s - * 1 -s-c -c+s - * 2 -s+c -c-s - * 3 s+c c-s - */ - _Float128 s; - _Float128 c; - __sincosl (x, &s, &c); - switch (n & 3) - { - case 0: - temp = s - c; - break; - case 1: - temp = -s - c; - break; - case 2: - temp = -s + c; - break; - case 3: - temp = s + c; - break; - } - b = invsqrtpi * temp / __ieee754_sqrtl (x); - } - else - { - a = __ieee754_y0l (x); - b = __ieee754_y1l (x); - /* quit if b is -inf */ - u.value = b; - se = u.parts32.w0 & 0xffff0000; - for (i = 1; i < n && se != 0xffff0000; i++) - { - temp = b; - b = ((_Float128) (i + i) / x) * b - a; - u.value = b; - se = u.parts32.w0 & 0xffff0000; - a = temp; - } - } - /* If B is +-Inf, set up errno accordingly. */ - if (! isfinite (b)) - __set_errno (ERANGE); - if (sign > 0) - ret = b; - else - ret = -b; - } - out: - if (isinf (ret)) - ret = __copysignl (LDBL_MAX, ret) * LDBL_MAX; - return ret; -} -strong_alias (__ieee754_ynl, __ynl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128/e_lgammal_r.c deleted file mode 100644 index bef2601bce..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_lgammal_r.c +++ /dev/null @@ -1,1046 +0,0 @@ -/* lgammal - * - * Natural logarithm of gamma function - * - * - * - * SYNOPSIS: - * - * long double x, y, lgammal(); - * extern int sgngam; - * - * y = lgammal(x); - * - * - * - * DESCRIPTION: - * - * Returns the base e (2.718...) logarithm of the absolute - * value of the gamma function of the argument. - * The sign (+1 or -1) of the gamma function is returned in a - * global (extern) variable named sgngam. - * - * The positive domain is partitioned into numerous segments for approximation. - * For x > 10, - * log gamma(x) = (x - 0.5) log(x) - x + log sqrt(2 pi) + 1/x R(1/x^2) - * Near the minimum at x = x0 = 1.46... the approximation is - * log gamma(x0 + z) = log gamma(x0) + z^2 P(z)/Q(z) - * for small z. - * Elsewhere between 0 and 10, - * log gamma(n + z) = log gamma(n) + z P(z)/Q(z) - * for various selected n and small z. - * - * The cosecant reflection formula is employed for negative arguments. - * - * - * - * ACCURACY: - * - * - * arithmetic domain # trials peak rms - * Relative error: - * IEEE 10, 30 100000 3.9e-34 9.8e-35 - * IEEE 0, 10 100000 3.8e-34 5.3e-35 - * Absolute error: - * IEEE -10, 0 100000 8.0e-34 8.0e-35 - * IEEE -30, -10 100000 4.4e-34 1.0e-34 - * IEEE -100, 100 100000 1.0e-34 - * - * The absolute error criterion is the same as relative error - * when the function magnitude is greater than one but it is absolute - * when the magnitude is less than one. - * - */ - -/* Copyright 2001 by Stephen L. Moshier - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -#include -#include -#include - -static const _Float128 PIL = L(3.1415926535897932384626433832795028841972E0); -#if LDBL_MANT_DIG == 106 -static const _Float128 MAXLGM = L(0x5.d53649e2d469dbc1f01e99fd66p+1012); -#else -static const _Float128 MAXLGM = L(1.0485738685148938358098967157129705071571E4928); -#endif -static const _Float128 one = 1; -static const _Float128 huge = LDBL_MAX; - -/* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x P(1/x^2) - 1/x <= 0.0741 (x >= 13.495...) - Peak relative error 1.5e-36 */ -static const _Float128 ls2pi = L(9.1893853320467274178032973640561763986140E-1); -#define NRASY 12 -static const _Float128 RASY[NRASY + 1] = -{ - L(8.333333333333333333333333333310437112111E-2), - L(-2.777777777777777777777774789556228296902E-3), - L(7.936507936507936507795933938448586499183E-4), - L(-5.952380952380952041799269756378148574045E-4), - L(8.417508417507928904209891117498524452523E-4), - L(-1.917526917481263997778542329739806086290E-3), - L(6.410256381217852504446848671499409919280E-3), - L(-2.955064066900961649768101034477363301626E-2), - L(1.796402955865634243663453415388336954675E-1), - L(-1.391522089007758553455753477688592767741E0), - L(1.326130089598399157988112385013829305510E1), - L(-1.420412699593782497803472576479997819149E2), - L(1.218058922427762808938869872528846787020E3) -}; - - -/* log gamma(x+13) = log gamma(13) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 12.5 <= x+13 <= 13.5 - Peak relative error 1.1e-36 */ -static const _Float128 lgam13a = L(1.9987213134765625E1); -static const _Float128 lgam13b = L(1.3608962611495173623870550785125024484248E-6); -#define NRN13 7 -static const _Float128 RN13[NRN13 + 1] = -{ - L(8.591478354823578150238226576156275285700E11), - L(2.347931159756482741018258864137297157668E11), - L(2.555408396679352028680662433943000804616E10), - L(1.408581709264464345480765758902967123937E9), - L(4.126759849752613822953004114044451046321E7), - L(6.133298899622688505854211579222889943778E5), - L(3.929248056293651597987893340755876578072E3), - L(6.850783280018706668924952057996075215223E0) -}; -#define NRD13 6 -static const _Float128 RD13[NRD13 + 1] = -{ - L(3.401225382297342302296607039352935541669E11), - L(8.756765276918037910363513243563234551784E10), - L(8.873913342866613213078554180987647243903E9), - L(4.483797255342763263361893016049310017973E8), - L(1.178186288833066430952276702931512870676E7), - L(1.519928623743264797939103740132278337476E5), - L(7.989298844938119228411117593338850892311E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+12) = log gamma(12) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 11.5 <= x+12 <= 12.5 - Peak relative error 4.1e-36 */ -static const _Float128 lgam12a = L(1.75023040771484375E1); -static const _Float128 lgam12b = L(3.7687254483392876529072161996717039575982E-6); -#define NRN12 7 -static const _Float128 RN12[NRN12 + 1] = -{ - L(4.709859662695606986110997348630997559137E11), - L(1.398713878079497115037857470168777995230E11), - L(1.654654931821564315970930093932954900867E10), - L(9.916279414876676861193649489207282144036E8), - L(3.159604070526036074112008954113411389879E7), - L(5.109099197547205212294747623977502492861E5), - L(3.563054878276102790183396740969279826988E3), - L(6.769610657004672719224614163196946862747E0) -}; -#define NRD12 6 -static const _Float128 RD12[NRD12 + 1] = -{ - L(1.928167007860968063912467318985802726613E11), - L(5.383198282277806237247492369072266389233E10), - L(5.915693215338294477444809323037871058363E9), - L(3.241438287570196713148310560147925781342E8), - L(9.236680081763754597872713592701048455890E6), - L(1.292246897881650919242713651166596478850E5), - L(7.366532445427159272584194816076600211171E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+11) = log gamma(11) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 10.5 <= x+11 <= 11.5 - Peak relative error 1.8e-35 */ -static const _Float128 lgam11a = L(1.5104400634765625E1); -static const _Float128 lgam11b = L(1.1938309890295225709329251070371882250744E-5); -#define NRN11 7 -static const _Float128 RN11[NRN11 + 1] = -{ - L(2.446960438029415837384622675816736622795E11), - L(7.955444974446413315803799763901729640350E10), - L(1.030555327949159293591618473447420338444E10), - L(6.765022131195302709153994345470493334946E8), - L(2.361892792609204855279723576041468347494E7), - L(4.186623629779479136428005806072176490125E5), - L(3.202506022088912768601325534149383594049E3), - L(6.681356101133728289358838690666225691363E0) -}; -#define NRD11 6 -static const _Float128 RD11[NRD11 + 1] = -{ - L(1.040483786179428590683912396379079477432E11), - L(3.172251138489229497223696648369823779729E10), - L(3.806961885984850433709295832245848084614E9), - L(2.278070344022934913730015420611609620171E8), - L(7.089478198662651683977290023829391596481E6), - L(1.083246385105903533237139380509590158658E5), - L(6.744420991491385145885727942219463243597E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+10) = log gamma(10) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 9.5 <= x+10 <= 10.5 - Peak relative error 5.4e-37 */ -static const _Float128 lgam10a = L(1.280181884765625E1); -static const _Float128 lgam10b = L(8.6324252196112077178745667061642811492557E-6); -#define NRN10 7 -static const _Float128 RN10[NRN10 + 1] = -{ - L(-1.239059737177249934158597996648808363783E14), - L(-4.725899566371458992365624673357356908719E13), - L(-7.283906268647083312042059082837754850808E12), - L(-5.802855515464011422171165179767478794637E11), - L(-2.532349691157548788382820303182745897298E10), - L(-5.884260178023777312587193693477072061820E8), - L(-6.437774864512125749845840472131829114906E6), - L(-2.350975266781548931856017239843273049384E4) -}; -#define NRD10 7 -static const _Float128 RD10[NRD10 + 1] = -{ - L(-5.502645997581822567468347817182347679552E13), - L(-1.970266640239849804162284805400136473801E13), - L(-2.819677689615038489384974042561531409392E12), - L(-2.056105863694742752589691183194061265094E11), - L(-8.053670086493258693186307810815819662078E9), - L(-1.632090155573373286153427982504851867131E8), - L(-1.483575879240631280658077826889223634921E6), - L(-4.002806669713232271615885826373550502510E3) - /* 1.0E0L */ -}; - - -/* log gamma(x+9) = log gamma(9) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 8.5 <= x+9 <= 9.5 - Peak relative error 3.6e-36 */ -static const _Float128 lgam9a = L(1.06045989990234375E1); -static const _Float128 lgam9b = L(3.9037218127284172274007216547549861681400E-6); -#define NRN9 7 -static const _Float128 RN9[NRN9 + 1] = -{ - L(-4.936332264202687973364500998984608306189E13), - L(-2.101372682623700967335206138517766274855E13), - L(-3.615893404644823888655732817505129444195E12), - L(-3.217104993800878891194322691860075472926E11), - L(-1.568465330337375725685439173603032921399E10), - L(-4.073317518162025744377629219101510217761E8), - L(-4.983232096406156139324846656819246974500E6), - L(-2.036280038903695980912289722995505277253E4) -}; -#define NRD9 7 -static const _Float128 RD9[NRD9 + 1] = -{ - L(-2.306006080437656357167128541231915480393E13), - L(-9.183606842453274924895648863832233799950E12), - L(-1.461857965935942962087907301194381010380E12), - L(-1.185728254682789754150068652663124298303E11), - L(-5.166285094703468567389566085480783070037E9), - L(-1.164573656694603024184768200787835094317E8), - L(-1.177343939483908678474886454113163527909E6), - L(-3.529391059783109732159524500029157638736E3) - /* 1.0E0L */ -}; - - -/* log gamma(x+8) = log gamma(8) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 7.5 <= x+8 <= 8.5 - Peak relative error 2.4e-37 */ -static const _Float128 lgam8a = L(8.525146484375E0); -static const _Float128 lgam8b = L(1.4876690414300165531036347125050759667737E-5); -#define NRN8 8 -static const _Float128 RN8[NRN8 + 1] = -{ - L(6.600775438203423546565361176829139703289E11), - L(3.406361267593790705240802723914281025800E11), - L(7.222460928505293914746983300555538432830E10), - L(8.102984106025088123058747466840656458342E9), - L(5.157620015986282905232150979772409345927E8), - L(1.851445288272645829028129389609068641517E7), - L(3.489261702223124354745894067468953756656E5), - L(2.892095396706665774434217489775617756014E3), - L(6.596977510622195827183948478627058738034E0) -}; -#define NRD8 7 -static const _Float128 RD8[NRD8 + 1] = -{ - L(3.274776546520735414638114828622673016920E11), - L(1.581811207929065544043963828487733970107E11), - L(3.108725655667825188135393076860104546416E10), - L(3.193055010502912617128480163681842165730E9), - L(1.830871482669835106357529710116211541839E8), - L(5.790862854275238129848491555068073485086E6), - L(9.305213264307921522842678835618803553589E4), - L(6.216974105861848386918949336819572333622E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+7) = log gamma(7) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 6.5 <= x+7 <= 7.5 - Peak relative error 3.2e-36 */ -static const _Float128 lgam7a = L(6.5792388916015625E0); -static const _Float128 lgam7b = L(1.2320408538495060178292903945321122583007E-5); -#define NRN7 8 -static const _Float128 RN7[NRN7 + 1] = -{ - L(2.065019306969459407636744543358209942213E11), - L(1.226919919023736909889724951708796532847E11), - L(2.996157990374348596472241776917953749106E10), - L(3.873001919306801037344727168434909521030E9), - L(2.841575255593761593270885753992732145094E8), - L(1.176342515359431913664715324652399565551E7), - L(2.558097039684188723597519300356028511547E5), - L(2.448525238332609439023786244782810774702E3), - L(6.460280377802030953041566617300902020435E0) -}; -#define NRD7 7 -static const _Float128 RD7[NRD7 + 1] = -{ - L(1.102646614598516998880874785339049304483E11), - L(6.099297512712715445879759589407189290040E10), - L(1.372898136289611312713283201112060238351E10), - L(1.615306270420293159907951633566635172343E9), - L(1.061114435798489135996614242842561967459E8), - L(3.845638971184305248268608902030718674691E6), - L(7.081730675423444975703917836972720495507E4), - L(5.423122582741398226693137276201344096370E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+6) = log gamma(6) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 5.5 <= x+6 <= 6.5 - Peak relative error 6.2e-37 */ -static const _Float128 lgam6a = L(4.7874908447265625E0); -static const _Float128 lgam6b = L(8.9805548349424770093452324304839959231517E-7); -#define NRN6 8 -static const _Float128 RN6[NRN6 + 1] = -{ - L(-3.538412754670746879119162116819571823643E13), - L(-2.613432593406849155765698121483394257148E13), - L(-8.020670732770461579558867891923784753062E12), - L(-1.322227822931250045347591780332435433420E12), - L(-1.262809382777272476572558806855377129513E11), - L(-7.015006277027660872284922325741197022467E9), - L(-2.149320689089020841076532186783055727299E8), - L(-3.167210585700002703820077565539658995316E6), - L(-1.576834867378554185210279285358586385266E4) -}; -#define NRD6 8 -static const _Float128 RD6[NRD6 + 1] = -{ - L(-2.073955870771283609792355579558899389085E13), - L(-1.421592856111673959642750863283919318175E13), - L(-4.012134994918353924219048850264207074949E12), - L(-6.013361045800992316498238470888523722431E11), - L(-5.145382510136622274784240527039643430628E10), - L(-2.510575820013409711678540476918249524123E9), - L(-6.564058379709759600836745035871373240904E7), - L(-7.861511116647120540275354855221373571536E5), - L(-2.821943442729620524365661338459579270561E3) - /* 1.0E0L */ -}; - - -/* log gamma(x+5) = log gamma(5) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 4.5 <= x+5 <= 5.5 - Peak relative error 3.4e-37 */ -static const _Float128 lgam5a = L(3.17803955078125E0); -static const _Float128 lgam5b = L(1.4279566695619646941601297055408873990961E-5); -#define NRN5 9 -static const _Float128 RN5[NRN5 + 1] = -{ - L(2.010952885441805899580403215533972172098E11), - L(1.916132681242540921354921906708215338584E11), - L(7.679102403710581712903937970163206882492E10), - L(1.680514903671382470108010973615268125169E10), - L(2.181011222911537259440775283277711588410E9), - L(1.705361119398837808244780667539728356096E8), - L(7.792391565652481864976147945997033946360E6), - L(1.910741381027985291688667214472560023819E5), - L(2.088138241893612679762260077783794329559E3), - L(6.330318119566998299106803922739066556550E0) -}; -#define NRD5 8 -static const _Float128 RD5[NRD5 + 1] = -{ - L(1.335189758138651840605141370223112376176E11), - L(1.174130445739492885895466097516530211283E11), - L(4.308006619274572338118732154886328519910E10), - L(8.547402888692578655814445003283720677468E9), - L(9.934628078575618309542580800421370730906E8), - L(6.847107420092173812998096295422311820672E7), - L(2.698552646016599923609773122139463150403E6), - L(5.526516251532464176412113632726150253215E4), - L(4.772343321713697385780533022595450486932E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+4) = log gamma(4) + x P(x)/Q(x) - -0.5 <= x <= 0.5 - 3.5 <= x+4 <= 4.5 - Peak relative error 6.7e-37 */ -static const _Float128 lgam4a = L(1.791748046875E0); -static const _Float128 lgam4b = L(1.1422353055000812477358380702272722990692E-5); -#define NRN4 9 -static const _Float128 RN4[NRN4 + 1] = -{ - L(-1.026583408246155508572442242188887829208E13), - L(-1.306476685384622809290193031208776258809E13), - L(-7.051088602207062164232806511992978915508E12), - L(-2.100849457735620004967624442027793656108E12), - L(-3.767473790774546963588549871673843260569E11), - L(-4.156387497364909963498394522336575984206E10), - L(-2.764021460668011732047778992419118757746E9), - L(-1.036617204107109779944986471142938641399E8), - L(-1.895730886640349026257780896972598305443E6), - L(-1.180509051468390914200720003907727988201E4) -}; -#define NRD4 9 -static const _Float128 RD4[NRD4 + 1] = -{ - L(-8.172669122056002077809119378047536240889E12), - L(-9.477592426087986751343695251801814226960E12), - L(-4.629448850139318158743900253637212801682E12), - L(-1.237965465892012573255370078308035272942E12), - L(-1.971624313506929845158062177061297598956E11), - L(-1.905434843346570533229942397763361493610E10), - L(-1.089409357680461419743730978512856675984E9), - L(-3.416703082301143192939774401370222822430E7), - L(-4.981791914177103793218433195857635265295E5), - L(-2.192507743896742751483055798411231453733E3) - /* 1.0E0L */ -}; - - -/* log gamma(x+3) = log gamma(3) + x P(x)/Q(x) - -0.25 <= x <= 0.5 - 2.75 <= x+3 <= 3.5 - Peak relative error 6.0e-37 */ -static const _Float128 lgam3a = L(6.93145751953125E-1); -static const _Float128 lgam3b = L(1.4286068203094172321214581765680755001344E-6); - -#define NRN3 9 -static const _Float128 RN3[NRN3 + 1] = -{ - L(-4.813901815114776281494823863935820876670E11), - L(-8.425592975288250400493910291066881992620E11), - L(-6.228685507402467503655405482985516909157E11), - L(-2.531972054436786351403749276956707260499E11), - L(-6.170200796658926701311867484296426831687E10), - L(-9.211477458528156048231908798456365081135E9), - L(-8.251806236175037114064561038908691305583E8), - L(-4.147886355917831049939930101151160447495E7), - L(-1.010851868928346082547075956946476932162E6), - L(-8.333374463411801009783402800801201603736E3) -}; -#define NRD3 9 -static const _Float128 RD3[NRD3 + 1] = -{ - L(-5.216713843111675050627304523368029262450E11), - L(-8.014292925418308759369583419234079164391E11), - L(-5.180106858220030014546267824392678611990E11), - L(-1.830406975497439003897734969120997840011E11), - L(-3.845274631904879621945745960119924118925E10), - L(-4.891033385370523863288908070309417710903E9), - L(-3.670172254411328640353855768698287474282E8), - L(-1.505316381525727713026364396635522516989E7), - L(-2.856327162923716881454613540575964890347E5), - L(-1.622140448015769906847567212766206894547E3) - /* 1.0E0L */ -}; - - -/* log gamma(x+2.5) = log gamma(2.5) + x P(x)/Q(x) - -0.125 <= x <= 0.25 - 2.375 <= x+2.5 <= 2.75 */ -static const _Float128 lgam2r5a = L(2.8466796875E-1); -static const _Float128 lgam2r5b = L(1.4901722919159632494669682701924320137696E-5); -#define NRN2r5 8 -static const _Float128 RN2r5[NRN2r5 + 1] = -{ - L(-4.676454313888335499356699817678862233205E9), - L(-9.361888347911187924389905984624216340639E9), - L(-7.695353600835685037920815799526540237703E9), - L(-3.364370100981509060441853085968900734521E9), - L(-8.449902011848163568670361316804900559863E8), - L(-1.225249050950801905108001246436783022179E8), - L(-9.732972931077110161639900388121650470926E6), - L(-3.695711763932153505623248207576425983573E5), - L(-4.717341584067827676530426007495274711306E3) -}; -#define NRD2r5 8 -static const _Float128 RD2r5[NRD2r5 + 1] = -{ - L(-6.650657966618993679456019224416926875619E9), - L(-1.099511409330635807899718829033488771623E10), - L(-7.482546968307837168164311101447116903148E9), - L(-2.702967190056506495988922973755870557217E9), - L(-5.570008176482922704972943389590409280950E8), - L(-6.536934032192792470926310043166993233231E7), - L(-4.101991193844953082400035444146067511725E6), - L(-1.174082735875715802334430481065526664020E5), - L(-9.932840389994157592102947657277692978511E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+2) = x P(x)/Q(x) - -0.125 <= x <= +0.375 - 1.875 <= x+2 <= 2.375 - Peak relative error 4.6e-36 */ -#define NRN2 9 -static const _Float128 RN2[NRN2 + 1] = -{ - L(-3.716661929737318153526921358113793421524E9), - L(-1.138816715030710406922819131397532331321E10), - L(-1.421017419363526524544402598734013569950E10), - L(-9.510432842542519665483662502132010331451E9), - L(-3.747528562099410197957514973274474767329E9), - L(-8.923565763363912474488712255317033616626E8), - L(-1.261396653700237624185350402781338231697E8), - L(-9.918402520255661797735331317081425749014E6), - L(-3.753996255897143855113273724233104768831E5), - L(-4.778761333044147141559311805999540765612E3) -}; -#define NRD2 9 -static const _Float128 RD2[NRD2 + 1] = -{ - L(-8.790916836764308497770359421351673950111E9), - L(-2.023108608053212516399197678553737477486E10), - L(-1.958067901852022239294231785363504458367E10), - L(-1.035515043621003101254252481625188704529E10), - L(-3.253884432621336737640841276619272224476E9), - L(-6.186383531162456814954947669274235815544E8), - L(-6.932557847749518463038934953605969951466E7), - L(-4.240731768287359608773351626528479703758E6), - L(-1.197343995089189188078944689846348116630E5), - L(-1.004622911670588064824904487064114090920E3) -/* 1.0E0 */ -}; - - -/* log gamma(x+1.75) = log gamma(1.75) + x P(x)/Q(x) - -0.125 <= x <= +0.125 - 1.625 <= x+1.75 <= 1.875 - Peak relative error 9.2e-37 */ -static const _Float128 lgam1r75a = L(-8.441162109375E-2); -static const _Float128 lgam1r75b = L(1.0500073264444042213965868602268256157604E-5); -#define NRN1r75 8 -static const _Float128 RN1r75[NRN1r75 + 1] = -{ - L(-5.221061693929833937710891646275798251513E7), - L(-2.052466337474314812817883030472496436993E8), - L(-2.952718275974940270675670705084125640069E8), - L(-2.132294039648116684922965964126389017840E8), - L(-8.554103077186505960591321962207519908489E7), - L(-1.940250901348870867323943119132071960050E7), - L(-2.379394147112756860769336400290402208435E6), - L(-1.384060879999526222029386539622255797389E5), - L(-2.698453601378319296159355612094598695530E3) -}; -#define NRD1r75 8 -static const _Float128 RD1r75[NRD1r75 + 1] = -{ - L(-2.109754689501705828789976311354395393605E8), - L(-5.036651829232895725959911504899241062286E8), - L(-4.954234699418689764943486770327295098084E8), - L(-2.589558042412676610775157783898195339410E8), - L(-7.731476117252958268044969614034776883031E7), - L(-1.316721702252481296030801191240867486965E7), - L(-1.201296501404876774861190604303728810836E6), - L(-5.007966406976106636109459072523610273928E4), - L(-6.155817990560743422008969155276229018209E2) - /* 1.0E0L */ -}; - - -/* log gamma(x+x0) = y0 + x^2 P(x)/Q(x) - -0.0867 <= x <= +0.1634 - 1.374932... <= x+x0 <= 1.625032... - Peak relative error 4.0e-36 */ -static const _Float128 x0a = L(1.4616241455078125); -static const _Float128 x0b = L(7.9994605498412626595423257213002588621246E-6); -static const _Float128 y0a = L(-1.21490478515625E-1); -static const _Float128 y0b = L(4.1879797753919044854428223084178486438269E-6); -#define NRN1r5 8 -static const _Float128 RN1r5[NRN1r5 + 1] = -{ - L(6.827103657233705798067415468881313128066E5), - L(1.910041815932269464714909706705242148108E6), - L(2.194344176925978377083808566251427771951E6), - L(1.332921400100891472195055269688876427962E6), - L(4.589080973377307211815655093824787123508E5), - L(8.900334161263456942727083580232613796141E4), - L(9.053840838306019753209127312097612455236E3), - L(4.053367147553353374151852319743594873771E2), - L(5.040631576303952022968949605613514584950E0) -}; -#define NRD1r5 8 -static const _Float128 RD1r5[NRD1r5 + 1] = -{ - L(1.411036368843183477558773688484699813355E6), - L(4.378121767236251950226362443134306184849E6), - L(5.682322855631723455425929877581697918168E6), - L(3.999065731556977782435009349967042222375E6), - L(1.653651390456781293163585493620758410333E6), - L(4.067774359067489605179546964969435858311E5), - L(5.741463295366557346748361781768833633256E4), - L(4.226404539738182992856094681115746692030E3), - L(1.316980975410327975566999780608618774469E2), - /* 1.0E0L */ -}; - - -/* log gamma(x+1.25) = log gamma(1.25) + x P(x)/Q(x) - -.125 <= x <= +.125 - 1.125 <= x+1.25 <= 1.375 - Peak relative error = 4.9e-36 */ -static const _Float128 lgam1r25a = L(-9.82818603515625E-2); -static const _Float128 lgam1r25b = L(1.0023929749338536146197303364159774377296E-5); -#define NRN1r25 9 -static const _Float128 RN1r25[NRN1r25 + 1] = -{ - L(-9.054787275312026472896002240379580536760E4), - L(-8.685076892989927640126560802094680794471E4), - L(2.797898965448019916967849727279076547109E5), - L(6.175520827134342734546868356396008898299E5), - L(5.179626599589134831538516906517372619641E5), - L(2.253076616239043944538380039205558242161E5), - L(5.312653119599957228630544772499197307195E4), - L(6.434329437514083776052669599834938898255E3), - L(3.385414416983114598582554037612347549220E2), - L(4.907821957946273805080625052510832015792E0) -}; -#define NRD1r25 8 -static const _Float128 RD1r25[NRD1r25 + 1] = -{ - L(3.980939377333448005389084785896660309000E5), - L(1.429634893085231519692365775184490465542E6), - L(2.145438946455476062850151428438668234336E6), - L(1.743786661358280837020848127465970357893E6), - L(8.316364251289743923178092656080441655273E5), - L(2.355732939106812496699621491135458324294E5), - L(3.822267399625696880571810137601310855419E4), - L(3.228463206479133236028576845538387620856E3), - L(1.152133170470059555646301189220117965514E2) - /* 1.0E0L */ -}; - - -/* log gamma(x + 1) = x P(x)/Q(x) - 0.0 <= x <= +0.125 - 1.0 <= x+1 <= 1.125 - Peak relative error 1.1e-35 */ -#define NRN1 8 -static const _Float128 RN1[NRN1 + 1] = -{ - L(-9.987560186094800756471055681088744738818E3), - L(-2.506039379419574361949680225279376329742E4), - L(-1.386770737662176516403363873617457652991E4), - L(1.439445846078103202928677244188837130744E4), - L(2.159612048879650471489449668295139990693E4), - L(1.047439813638144485276023138173676047079E4), - L(2.250316398054332592560412486630769139961E3), - L(1.958510425467720733041971651126443864041E2), - L(4.516830313569454663374271993200291219855E0) -}; -#define NRD1 7 -static const _Float128 RD1[NRD1 + 1] = -{ - L(1.730299573175751778863269333703788214547E4), - L(6.807080914851328611903744668028014678148E4), - L(1.090071629101496938655806063184092302439E5), - L(9.124354356415154289343303999616003884080E4), - L(4.262071638655772404431164427024003253954E4), - L(1.096981664067373953673982635805821283581E4), - L(1.431229503796575892151252708527595787588E3), - L(7.734110684303689320830401788262295992921E1) - /* 1.0E0 */ -}; - - -/* log gamma(x + 1) = x P(x)/Q(x) - -0.125 <= x <= 0 - 0.875 <= x+1 <= 1.0 - Peak relative error 7.0e-37 */ -#define NRNr9 8 -static const _Float128 RNr9[NRNr9 + 1] = -{ - L(4.441379198241760069548832023257571176884E5), - L(1.273072988367176540909122090089580368732E6), - L(9.732422305818501557502584486510048387724E5), - L(-5.040539994443998275271644292272870348684E5), - L(-1.208719055525609446357448132109723786736E6), - L(-7.434275365370936547146540554419058907156E5), - L(-2.075642969983377738209203358199008185741E5), - L(-2.565534860781128618589288075109372218042E4), - L(-1.032901669542994124131223797515913955938E3), -}; -#define NRDr9 8 -static const _Float128 RDr9[NRDr9 + 1] = -{ - L(-7.694488331323118759486182246005193998007E5), - L(-3.301918855321234414232308938454112213751E6), - L(-5.856830900232338906742924836032279404702E6), - L(-5.540672519616151584486240871424021377540E6), - L(-3.006530901041386626148342989181721176919E6), - L(-9.350378280513062139466966374330795935163E5), - L(-1.566179100031063346901755685375732739511E5), - L(-1.205016539620260779274902967231510804992E4), - L(-2.724583156305709733221564484006088794284E2) -/* 1.0E0 */ -}; - - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -neval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -deval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -_Float128 -__ieee754_lgammal_r (_Float128 x, int *signgamp) -{ - _Float128 p, q, w, z, nx; - int i, nn; - - *signgamp = 1; - - if (! isfinite (x)) - return x * x; - - if (x == 0) - { - if (signbit (x)) - *signgamp = -1; - } - - if (x < 0) - { - if (x < -2 && x > (LDBL_MANT_DIG == 106 ? -48 : -50)) - return __lgamma_negl (x, signgamp); - q = -x; - p = __floorl (q); - if (p == q) - return (one / __fabsl (p - p)); - _Float128 halfp = p * L(0.5); - if (halfp == __floorl (halfp)) - *signgamp = -1; - else - *signgamp = 1; - if (q < L(0x1p-120)) - return -__logl (q); - z = q - p; - if (z > L(0.5)) - { - p += 1; - z = p - q; - } - z = q * __sinl (PIL * z); - w = __ieee754_lgammal_r (q, &i); - z = __logl (PIL / z) - w; - return (z); - } - - if (x < L(13.5)) - { - p = 0; - nx = __floorl (x + L(0.5)); - nn = nx; - switch (nn) - { - case 0: - /* log gamma (x + 1) = log(x) + log gamma(x) */ - if (x < L(0x1p-120)) - return -__logl (x); - else if (x <= 0.125) - { - p = x * neval (x, RN1, NRN1) / deval (x, RD1, NRD1); - } - else if (x <= 0.375) - { - z = x - L(0.25); - p = z * neval (z, RN1r25, NRN1r25) / deval (z, RD1r25, NRD1r25); - p += lgam1r25b; - p += lgam1r25a; - } - else if (x <= 0.625) - { - z = x + (1 - x0a); - z = z - x0b; - p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); - p = p * z * z; - p = p + y0b; - p = p + y0a; - } - else if (x <= 0.875) - { - z = x - L(0.75); - p = z * neval (z, RN1r75, NRN1r75) / deval (z, RD1r75, NRD1r75); - p += lgam1r75b; - p += lgam1r75a; - } - else - { - z = x - 1; - p = z * neval (z, RN2, NRN2) / deval (z, RD2, NRD2); - } - p = p - __logl (x); - break; - - case 1: - if (x < L(0.875)) - { - if (x <= 0.625) - { - z = x + (1 - x0a); - z = z - x0b; - p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); - p = p * z * z; - p = p + y0b; - p = p + y0a; - } - else if (x <= 0.875) - { - z = x - L(0.75); - p = z * neval (z, RN1r75, NRN1r75) - / deval (z, RD1r75, NRD1r75); - p += lgam1r75b; - p += lgam1r75a; - } - else - { - z = x - 1; - p = z * neval (z, RN2, NRN2) / deval (z, RD2, NRD2); - } - p = p - __logl (x); - } - else if (x < 1) - { - z = x - 1; - p = z * neval (z, RNr9, NRNr9) / deval (z, RDr9, NRDr9); - } - else if (x == 1) - p = 0; - else if (x <= L(1.125)) - { - z = x - 1; - p = z * neval (z, RN1, NRN1) / deval (z, RD1, NRD1); - } - else if (x <= 1.375) - { - z = x - L(1.25); - p = z * neval (z, RN1r25, NRN1r25) / deval (z, RD1r25, NRD1r25); - p += lgam1r25b; - p += lgam1r25a; - } - else - { - /* 1.375 <= x+x0 <= 1.625 */ - z = x - x0a; - z = z - x0b; - p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); - p = p * z * z; - p = p + y0b; - p = p + y0a; - } - break; - - case 2: - if (x < L(1.625)) - { - z = x - x0a; - z = z - x0b; - p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); - p = p * z * z; - p = p + y0b; - p = p + y0a; - } - else if (x < L(1.875)) - { - z = x - L(1.75); - p = z * neval (z, RN1r75, NRN1r75) / deval (z, RD1r75, NRD1r75); - p += lgam1r75b; - p += lgam1r75a; - } - else if (x == 2) - p = 0; - else if (x < L(2.375)) - { - z = x - 2; - p = z * neval (z, RN2, NRN2) / deval (z, RD2, NRD2); - } - else - { - z = x - L(2.5); - p = z * neval (z, RN2r5, NRN2r5) / deval (z, RD2r5, NRD2r5); - p += lgam2r5b; - p += lgam2r5a; - } - break; - - case 3: - if (x < 2.75) - { - z = x - L(2.5); - p = z * neval (z, RN2r5, NRN2r5) / deval (z, RD2r5, NRD2r5); - p += lgam2r5b; - p += lgam2r5a; - } - else - { - z = x - 3; - p = z * neval (z, RN3, NRN3) / deval (z, RD3, NRD3); - p += lgam3b; - p += lgam3a; - } - break; - - case 4: - z = x - 4; - p = z * neval (z, RN4, NRN4) / deval (z, RD4, NRD4); - p += lgam4b; - p += lgam4a; - break; - - case 5: - z = x - 5; - p = z * neval (z, RN5, NRN5) / deval (z, RD5, NRD5); - p += lgam5b; - p += lgam5a; - break; - - case 6: - z = x - 6; - p = z * neval (z, RN6, NRN6) / deval (z, RD6, NRD6); - p += lgam6b; - p += lgam6a; - break; - - case 7: - z = x - 7; - p = z * neval (z, RN7, NRN7) / deval (z, RD7, NRD7); - p += lgam7b; - p += lgam7a; - break; - - case 8: - z = x - 8; - p = z * neval (z, RN8, NRN8) / deval (z, RD8, NRD8); - p += lgam8b; - p += lgam8a; - break; - - case 9: - z = x - 9; - p = z * neval (z, RN9, NRN9) / deval (z, RD9, NRD9); - p += lgam9b; - p += lgam9a; - break; - - case 10: - z = x - 10; - p = z * neval (z, RN10, NRN10) / deval (z, RD10, NRD10); - p += lgam10b; - p += lgam10a; - break; - - case 11: - z = x - 11; - p = z * neval (z, RN11, NRN11) / deval (z, RD11, NRD11); - p += lgam11b; - p += lgam11a; - break; - - case 12: - z = x - 12; - p = z * neval (z, RN12, NRN12) / deval (z, RD12, NRD12); - p += lgam12b; - p += lgam12a; - break; - - case 13: - z = x - 13; - p = z * neval (z, RN13, NRN13) / deval (z, RD13, NRD13); - p += lgam13b; - p += lgam13a; - break; - } - return p; - } - - if (x > MAXLGM) - return (*signgamp * huge * huge); - - if (x > L(0x1p120)) - return x * (__logl (x) - 1); - q = ls2pi - x; - q = (x - L(0.5)) * __logl (x) + q; - if (x > L(1.0e18)) - return (q); - - p = 1 / (x * x); - q += neval (p, RASY, NRASY) / x; - return (q); -} -strong_alias (__ieee754_lgammal_r, __lgammal_r_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_log10l.c b/sysdeps/ieee754/ldbl-128/e_log10l.c deleted file mode 100644 index c992f6e5ee..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_log10l.c +++ /dev/null @@ -1,259 +0,0 @@ -/* log10l.c - * - * Common logarithm, 128-bit long double precision - * - * - * - * SYNOPSIS: - * - * long double x, y, log10l(); - * - * y = log10l( x ); - * - * - * - * DESCRIPTION: - * - * Returns the base 10 logarithm of x. - * - * The argument is separated into its exponent and fractional - * parts. If the exponent is between -1 and +1, the logarithm - * of the fraction is approximated by - * - * log(1+x) = x - 0.5 x^2 + x^3 P(x)/Q(x). - * - * Otherwise, setting z = 2(x-1)/x+1), - * - * log(x) = z + z^3 P(z)/Q(z). - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE 0.5, 2.0 30000 2.3e-34 4.9e-35 - * IEEE exp(+-10000) 30000 1.0e-34 4.1e-35 - * - * In the tests over the interval exp(+-10000), the logarithms - * of the random arguments were uniformly distributed over - * [-10000, +10000]. - * - */ - -/* - Cephes Math Library Release 2.2: January, 1991 - Copyright 1984, 1991 by Stephen L. Moshier - Adapted for glibc November, 2001 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see . - */ - -#include -#include - -/* Coefficients for ln(1+x) = x - x**2/2 + x**3 P(x)/Q(x) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 5.3e-37, - * relative peak error spread = 2.3e-14 - */ -static const _Float128 P[13] = -{ - L(1.313572404063446165910279910527789794488E4), - L(7.771154681358524243729929227226708890930E4), - L(2.014652742082537582487669938141683759923E5), - L(3.007007295140399532324943111654767187848E5), - L(2.854829159639697837788887080758954924001E5), - L(1.797628303815655343403735250238293741397E5), - L(7.594356839258970405033155585486712125861E4), - L(2.128857716871515081352991964243375186031E4), - L(3.824952356185897735160588078446136783779E3), - L(4.114517881637811823002128927449878962058E2), - L(2.321125933898420063925789532045674660756E1), - L(4.998469661968096229986658302195402690910E-1), - L(1.538612243596254322971797716843006400388E-6) -}; -static const _Float128 Q[12] = -{ - L(3.940717212190338497730839731583397586124E4), - L(2.626900195321832660448791748036714883242E5), - L(7.777690340007566932935753241556479363645E5), - L(1.347518538384329112529391120390701166528E6), - L(1.514882452993549494932585972882995548426E6), - L(1.158019977462989115839826904108208787040E6), - L(6.132189329546557743179177159925690841200E5), - L(2.248234257620569139969141618556349415120E5), - L(5.605842085972455027590989944010492125825E4), - L(9.147150349299596453976674231612674085381E3), - L(9.104928120962988414618126155557301584078E2), - L(4.839208193348159620282142911143429644326E1) -/* 1.000000000000000000000000000000000000000E0L, */ -}; - -/* Coefficients for log(x) = z + z^3 P(z^2)/Q(z^2), - * where z = 2(x-1)/(x+1) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 1.1e-35, - * relative peak error spread 1.1e-9 - */ -static const _Float128 R[6] = -{ - L(1.418134209872192732479751274970992665513E5), - L(-8.977257995689735303686582344659576526998E4), - L(2.048819892795278657810231591630928516206E4), - L(-2.024301798136027039250415126250455056397E3), - L(8.057002716646055371965756206836056074715E1), - L(-8.828896441624934385266096344596648080902E-1) -}; -static const _Float128 S[6] = -{ - L(1.701761051846631278975701529965589676574E6), - L(-1.332535117259762928288745111081235577029E6), - L(4.001557694070773974936904547424676279307E5), - L(-5.748542087379434595104154610899551484314E4), - L(3.998526750980007367835804959888064681098E3), - L(-1.186359407982897997337150403816839480438E2) -/* 1.000000000000000000000000000000000000000E0L, */ -}; - -static const _Float128 -/* log10(2) */ -L102A = L(0.3125), -L102B = L(-1.14700043360188047862611052755069732318101185E-2), -/* log10(e) */ -L10EA = L(0.5), -L10EB = L(-6.570551809674817234887108108339491770560299E-2), -/* sqrt(2)/2 */ -SQRTH = L(7.071067811865475244008443621048490392848359E-1); - - - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -neval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -deval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - - -_Float128 -__ieee754_log10l (_Float128 x) -{ - _Float128 z; - _Float128 y; - int e; - int64_t hx, lx; - -/* Test for domain */ - GET_LDOUBLE_WORDS64 (hx, lx, x); - if (((hx & 0x7fffffffffffffffLL) | lx) == 0) - return (-1 / __fabsl (x)); /* log10l(+-0)=-inf */ - if (hx < 0) - return (x - x) / (x - x); - if (hx >= 0x7fff000000000000LL) - return (x + x); - - if (x == 1) - return 0; - -/* separate mantissa from exponent */ - -/* Note, frexp is used so that denormal numbers - * will be handled properly. - */ - x = __frexpl (x, &e); - - -/* logarithm using log(x) = z + z**3 P(z)/Q(z), - * where z = 2(x-1)/x+1) - */ - if ((e > 2) || (e < -2)) - { - if (x < SQRTH) - { /* 2( 2x-1 )/( 2x+1 ) */ - e -= 1; - z = x - L(0.5); - y = L(0.5) * z + L(0.5); - } - else - { /* 2 (x-1)/(x+1) */ - z = x - L(0.5); - z -= L(0.5); - y = L(0.5) * x + L(0.5); - } - x = z / y; - z = x * x; - y = x * (z * neval (z, R, 5) / deval (z, S, 5)); - goto done; - } - - -/* logarithm using log(1+x) = x - .5x**2 + x**3 P(x)/Q(x) */ - - if (x < SQRTH) - { - e -= 1; - x = 2.0 * x - 1; /* 2x - 1 */ - } - else - { - x = x - 1; - } - z = x * x; - y = x * (z * neval (x, P, 12) / deval (x, Q, 11)); - y = y - 0.5 * z; - -done: - - /* Multiply log of fraction by log10(e) - * and base 2 exponent by log10(2). - */ - z = y * L10EB; - z += x * L10EB; - z += e * L102B; - z += y * L10EA; - z += x * L10EA; - z += e * L102A; - return (z); -} -strong_alias (__ieee754_log10l, __log10l_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_log2l.c b/sysdeps/ieee754/ldbl-128/e_log2l.c deleted file mode 100644 index cf4a380f16..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_log2l.c +++ /dev/null @@ -1,252 +0,0 @@ -/* log2l.c - * Base 2 logarithm, 128-bit long double precision - * - * - * - * SYNOPSIS: - * - * long double x, y, log2l(); - * - * y = log2l( x ); - * - * - * - * DESCRIPTION: - * - * Returns the base 2 logarithm of x. - * - * The argument is separated into its exponent and fractional - * parts. If the exponent is between -1 and +1, the (natural) - * logarithm of the fraction is approximated by - * - * log(1+x) = x - 0.5 x^2 + x^3 P(x)/Q(x). - * - * Otherwise, setting z = 2(x-1)/x+1), - * - * log(x) = z + z^3 P(z)/Q(z). - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE 0.5, 2.0 100,000 2.6e-34 4.9e-35 - * IEEE exp(+-10000) 100,000 9.6e-35 4.0e-35 - * - * In the tests over the interval exp(+-10000), the logarithms - * of the random arguments were uniformly distributed over - * [-10000, +10000]. - * - */ - -/* - Cephes Math Library Release 2.2: January, 1991 - Copyright 1984, 1991 by Stephen L. Moshier - Adapted for glibc November, 2001 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see . - */ - -#include -#include - -/* Coefficients for ln(1+x) = x - x**2/2 + x**3 P(x)/Q(x) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 5.3e-37, - * relative peak error spread = 2.3e-14 - */ -static const _Float128 P[13] = -{ - L(1.313572404063446165910279910527789794488E4), - L(7.771154681358524243729929227226708890930E4), - L(2.014652742082537582487669938141683759923E5), - L(3.007007295140399532324943111654767187848E5), - L(2.854829159639697837788887080758954924001E5), - L(1.797628303815655343403735250238293741397E5), - L(7.594356839258970405033155585486712125861E4), - L(2.128857716871515081352991964243375186031E4), - L(3.824952356185897735160588078446136783779E3), - L(4.114517881637811823002128927449878962058E2), - L(2.321125933898420063925789532045674660756E1), - L(4.998469661968096229986658302195402690910E-1), - L(1.538612243596254322971797716843006400388E-6) -}; -static const _Float128 Q[12] = -{ - L(3.940717212190338497730839731583397586124E4), - L(2.626900195321832660448791748036714883242E5), - L(7.777690340007566932935753241556479363645E5), - L(1.347518538384329112529391120390701166528E6), - L(1.514882452993549494932585972882995548426E6), - L(1.158019977462989115839826904108208787040E6), - L(6.132189329546557743179177159925690841200E5), - L(2.248234257620569139969141618556349415120E5), - L(5.605842085972455027590989944010492125825E4), - L(9.147150349299596453976674231612674085381E3), - L(9.104928120962988414618126155557301584078E2), - L(4.839208193348159620282142911143429644326E1) -/* 1.000000000000000000000000000000000000000E0L, */ -}; - -/* Coefficients for log(x) = z + z^3 P(z^2)/Q(z^2), - * where z = 2(x-1)/(x+1) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 1.1e-35, - * relative peak error spread 1.1e-9 - */ -static const _Float128 R[6] = -{ - L(1.418134209872192732479751274970992665513E5), - L(-8.977257995689735303686582344659576526998E4), - L(2.048819892795278657810231591630928516206E4), - L(-2.024301798136027039250415126250455056397E3), - L(8.057002716646055371965756206836056074715E1), - L(-8.828896441624934385266096344596648080902E-1) -}; -static const _Float128 S[6] = -{ - L(1.701761051846631278975701529965589676574E6), - L(-1.332535117259762928288745111081235577029E6), - L(4.001557694070773974936904547424676279307E5), - L(-5.748542087379434595104154610899551484314E4), - L(3.998526750980007367835804959888064681098E3), - L(-1.186359407982897997337150403816839480438E2) -/* 1.000000000000000000000000000000000000000E0L, */ -}; - -static const _Float128 -/* log2(e) - 1 */ -LOG2EA = L(4.4269504088896340735992468100189213742664595E-1), -/* sqrt(2)/2 */ -SQRTH = L(7.071067811865475244008443621048490392848359E-1); - - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -neval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -deval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - - -_Float128 -__ieee754_log2l (_Float128 x) -{ - _Float128 z; - _Float128 y; - int e; - int64_t hx, lx; - -/* Test for domain */ - GET_LDOUBLE_WORDS64 (hx, lx, x); - if (((hx & 0x7fffffffffffffffLL) | lx) == 0) - return (-1 / __fabsl (x)); /* log2l(+-0)=-inf */ - if (hx < 0) - return (x - x) / (x - x); - if (hx >= 0x7fff000000000000LL) - return (x + x); - - if (x == 1) - return 0; - -/* separate mantissa from exponent */ - -/* Note, frexp is used so that denormal numbers - * will be handled properly. - */ - x = __frexpl (x, &e); - - -/* logarithm using log(x) = z + z**3 P(z)/Q(z), - * where z = 2(x-1)/x+1) - */ - if ((e > 2) || (e < -2)) - { - if (x < SQRTH) - { /* 2( 2x-1 )/( 2x+1 ) */ - e -= 1; - z = x - L(0.5); - y = L(0.5) * z + L(0.5); - } - else - { /* 2 (x-1)/(x+1) */ - z = x - L(0.5); - z -= L(0.5); - y = L(0.5) * x + L(0.5); - } - x = z / y; - z = x * x; - y = x * (z * neval (z, R, 5) / deval (z, S, 5)); - goto done; - } - - -/* logarithm using log(1+x) = x - .5x**2 + x**3 P(x)/Q(x) */ - - if (x < SQRTH) - { - e -= 1; - x = 2.0 * x - 1; /* 2x - 1 */ - } - else - { - x = x - 1; - } - z = x * x; - y = x * (z * neval (x, P, 12) / deval (x, Q, 11)); - y = y - 0.5 * z; - -done: - -/* Multiply log of fraction by log2(e) - * and base 2 exponent by 1 - */ - z = y * LOG2EA; - z += x * LOG2EA; - z += y; - z += x; - z += e; - return (z); -} -strong_alias (__ieee754_log2l, __log2l_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_logl.c b/sysdeps/ieee754/ldbl-128/e_logl.c deleted file mode 100644 index 8672047e43..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_logl.c +++ /dev/null @@ -1,282 +0,0 @@ -/* logll.c - * - * Natural logarithm for 128-bit long double precision. - * - * - * - * SYNOPSIS: - * - * long double x, y, logl(); - * - * y = logl( x ); - * - * - * - * DESCRIPTION: - * - * Returns the base e (2.718...) logarithm of x. - * - * The argument is separated into its exponent and fractional - * parts. Use of a lookup table increases the speed of the routine. - * The program uses logarithms tabulated at intervals of 1/128 to - * cover the domain from approximately 0.7 to 1.4. - * - * On the interval [-1/128, +1/128] the logarithm of 1+x is approximated by - * log(1+x) = x - 0.5 x^2 + x^3 P(x) . - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE 0.875, 1.125 100000 1.2e-34 4.1e-35 - * IEEE 0.125, 8 100000 1.2e-34 4.1e-35 - * - * - * WARNING: - * - * This program uses integer operations on bit fields of floating-point - * numbers. It does not work with data structures other than the - * structure assumed. - * - */ - -/* Copyright 2001 by Stephen L. Moshier - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -#include -#include - -/* log(1+x) = x - .5 x^2 + x^3 l(x) - -.0078125 <= x <= +.0078125 - peak relative error 1.2e-37 */ -static const _Float128 -l3 = L(3.333333333333333333333333333333336096926E-1), -l4 = L(-2.499999999999999999999999999486853077002E-1), -l5 = L(1.999999999999999999999999998515277861905E-1), -l6 = L(-1.666666666666666666666798448356171665678E-1), -l7 = L(1.428571428571428571428808945895490721564E-1), -l8 = L(-1.249999999999999987884655626377588149000E-1), -l9 = L(1.111111111111111093947834982832456459186E-1), -l10 = L(-1.000000000000532974938900317952530453248E-1), -l11 = L(9.090909090915566247008015301349979892689E-2), -l12 = L(-8.333333211818065121250921925397567745734E-2), -l13 = L(7.692307559897661630807048686258659316091E-2), -l14 = L(-7.144242754190814657241902218399056829264E-2), -l15 = L(6.668057591071739754844678883223432347481E-2); - -/* Lookup table of ln(t) - (t-1) - t = 0.5 + (k+26)/128) - k = 0, ..., 91 */ -static const _Float128 logtbl[92] = { -L(-5.5345593589352099112142921677820359632418E-2), -L(-5.2108257402767124761784665198737642086148E-2), -L(-4.8991686870576856279407775480686721935120E-2), -L(-4.5993270766361228596215288742353061431071E-2), -L(-4.3110481649613269682442058976885699556950E-2), -L(-4.0340872319076331310838085093194799765520E-2), -L(-3.7682072451780927439219005993827431503510E-2), -L(-3.5131785416234343803903228503274262719586E-2), -L(-3.2687785249045246292687241862699949178831E-2), -L(-3.0347913785027239068190798397055267411813E-2), -L(-2.8110077931525797884641940838507561326298E-2), -L(-2.5972247078357715036426583294246819637618E-2), -L(-2.3932450635346084858612873953407168217307E-2), -L(-2.1988775689981395152022535153795155900240E-2), -L(-2.0139364778244501615441044267387667496733E-2), -L(-1.8382413762093794819267536615342902718324E-2), -L(-1.6716169807550022358923589720001638093023E-2), -L(-1.5138929457710992616226033183958974965355E-2), -L(-1.3649036795397472900424896523305726435029E-2), -L(-1.2244881690473465543308397998034325468152E-2), -L(-1.0924898127200937840689817557742469105693E-2), -L(-9.6875626072830301572839422532631079809328E-3), -L(-8.5313926245226231463436209313499745894157E-3), -L(-7.4549452072765973384933565912143044991706E-3), -L(-6.4568155251217050991200599386801665681310E-3), -L(-5.5356355563671005131126851708522185605193E-3), -L(-4.6900728132525199028885749289712348829878E-3), -L(-3.9188291218610470766469347968659624282519E-3), -L(-3.2206394539524058873423550293617843896540E-3), -L(-2.5942708080877805657374888909297113032132E-3), -L(-2.0385211375711716729239156839929281289086E-3), -L(-1.5522183228760777967376942769773768850872E-3), -L(-1.1342191863606077520036253234446621373191E-3), -L(-7.8340854719967065861624024730268350459991E-4), -L(-4.9869831458030115699628274852562992756174E-4), -L(-2.7902661731604211834685052867305795169688E-4), -L(-1.2335696813916860754951146082826952093496E-4), -L(-3.0677461025892873184042490943581654591817E-5), -#define ZERO logtbl[38] - L(0.0000000000000000000000000000000000000000E0), -L(-3.0359557945051052537099938863236321874198E-5), -L(-1.2081346403474584914595395755316412213151E-4), -L(-2.7044071846562177120083903771008342059094E-4), -L(-4.7834133324631162897179240322783590830326E-4), -L(-7.4363569786340080624467487620270965403695E-4), -L(-1.0654639687057968333207323853366578860679E-3), -L(-1.4429854811877171341298062134712230604279E-3), -L(-1.8753781835651574193938679595797367137975E-3), -L(-2.3618380914922506054347222273705859653658E-3), -L(-2.9015787624124743013946600163375853631299E-3), -L(-3.4938307889254087318399313316921940859043E-3), -L(-4.1378413103128673800485306215154712148146E-3), -L(-4.8328735414488877044289435125365629849599E-3), -L(-5.5782063183564351739381962360253116934243E-3), -L(-6.3731336597098858051938306767880719015261E-3), -L(-7.2169643436165454612058905294782949315193E-3), -L(-8.1090214990427641365934846191367315083867E-3), -L(-9.0486422112807274112838713105168375482480E-3), -L(-1.0035177140880864314674126398350812606841E-2), -L(-1.1067990155502102718064936259435676477423E-2), -L(-1.2146457974158024928196575103115488672416E-2), -L(-1.3269969823361415906628825374158424754308E-2), -L(-1.4437927104692837124388550722759686270765E-2), -L(-1.5649743073340777659901053944852735064621E-2), -L(-1.6904842527181702880599758489058031645317E-2), -L(-1.8202661505988007336096407340750378994209E-2), -L(-1.9542647000370545390701192438691126552961E-2), -L(-2.0924256670080119637427928803038530924742E-2), -L(-2.2346958571309108496179613803760727786257E-2), -L(-2.3810230892650362330447187267648486279460E-2), -L(-2.5313561699385640380910474255652501521033E-2), -L(-2.6856448685790244233704909690165496625399E-2), -L(-2.8438398935154170008519274953860128449036E-2), -L(-3.0058928687233090922411781058956589863039E-2), -L(-3.1717563112854831855692484086486099896614E-2), -L(-3.3413836095418743219397234253475252001090E-2), -L(-3.5147290019036555862676702093393332533702E-2), -L(-3.6917475563073933027920505457688955423688E-2), -L(-3.8723951502862058660874073462456610731178E-2), -L(-4.0566284516358241168330505467000838017425E-2), -L(-4.2444048996543693813649967076598766917965E-2), -L(-4.4356826869355401653098777649745233339196E-2), -L(-4.6304207416957323121106944474331029996141E-2), -L(-4.8285787106164123613318093945035804818364E-2), -L(-5.0301169421838218987124461766244507342648E-2), -L(-5.2349964705088137924875459464622098310997E-2), -L(-5.4431789996103111613753440311680967840214E-2), -L(-5.6546268881465384189752786409400404404794E-2), -L(-5.8693031345788023909329239565012647817664E-2), -L(-6.0871713627532018185577188079210189048340E-2), -L(-6.3081958078862169742820420185833800925568E-2), -L(-6.5323413029406789694910800219643791556918E-2), -L(-6.7595732653791419081537811574227049288168E-2) -}; - -/* ln(2) = ln2a + ln2b with extended precision. */ -static const _Float128 - ln2a = L(6.93145751953125e-1), - ln2b = L(1.4286068203094172321214581765680755001344E-6); - -_Float128 -__ieee754_logl(_Float128 x) -{ - _Float128 z, y, w; - ieee854_long_double_shape_type u, t; - unsigned int m; - int k, e; - - u.value = x; - m = u.parts32.w0; - - /* Check for IEEE special cases. */ - k = m & 0x7fffffff; - /* log(0) = -infinity. */ - if ((k | u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) - { - return L(-0.5) / ZERO; - } - /* log ( x < 0 ) = NaN */ - if (m & 0x80000000) - { - return (x - x) / ZERO; - } - /* log (infinity or NaN) */ - if (k >= 0x7fff0000) - { - return x + x; - } - - /* Extract exponent and reduce domain to 0.703125 <= u < 1.40625 */ - u.value = __frexpl (x, &e); - m = u.parts32.w0 & 0xffff; - m |= 0x10000; - /* Find lookup table index k from high order bits of the significand. */ - if (m < 0x16800) - { - k = (m - 0xff00) >> 9; - /* t is the argument 0.5 + (k+26)/128 - of the nearest item to u in the lookup table. */ - t.parts32.w0 = 0x3fff0000 + (k << 9); - t.parts32.w1 = 0; - t.parts32.w2 = 0; - t.parts32.w3 = 0; - u.parts32.w0 += 0x10000; - e -= 1; - k += 64; - } - else - { - k = (m - 0xfe00) >> 10; - t.parts32.w0 = 0x3ffe0000 + (k << 10); - t.parts32.w1 = 0; - t.parts32.w2 = 0; - t.parts32.w3 = 0; - } - /* On this interval the table is not used due to cancellation error. */ - if ((x <= L(1.0078125)) && (x >= L(0.9921875))) - { - if (x == 1) - return 0; - z = x - 1; - k = 64; - t.value = 1; - e = 0; - } - else - { - /* log(u) = log( t u/t ) = log(t) + log(u/t) - log(t) is tabulated in the lookup table. - Express log(u/t) = log(1+z), where z = u/t - 1 = (u-t)/t. - cf. Cody & Waite. */ - z = (u.value - t.value) / t.value; - } - /* Series expansion of log(1+z). */ - w = z * z; - y = ((((((((((((l15 * z - + l14) * z - + l13) * z - + l12) * z - + l11) * z - + l10) * z - + l9) * z - + l8) * z - + l7) * z - + l6) * z - + l5) * z - + l4) * z - + l3) * z * w; - y -= 0.5 * w; - y += e * ln2b; /* Base 2 exponent offset times ln(2). */ - y += z; - y += logtbl[k-26]; /* log(t) - (t-1) */ - y += (t.value - 1); - y += e * ln2a; - return y; -} -strong_alias (__ieee754_logl, __logl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_powl.c b/sysdeps/ieee754/ldbl-128/e_powl.c deleted file mode 100644 index a344840090..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_powl.c +++ /dev/null @@ -1,451 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Expansions and modifications for 128-bit long double are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_powl(x,y) return x**y - * - * n - * Method: Let x = 2 * (1+f) - * 1. Compute and return log2(x) in two pieces: - * log2(x) = w1 + w2, - * where w1 has 113-53 = 60 bit trailing zeros. - * 2. Perform y*log2(x) = n+y' by simulating muti-precision - * arithmetic, where |y'|<=0.5. - * 3. Return x**y = 2**n*exp(y'*log2) - * - * Special cases: - * 1. (anything) ** 0 is 1 - * 2. (anything) ** 1 is itself - * 3. (anything) ** NAN is NAN - * 4. NAN ** (anything except 0) is NAN - * 5. +-(|x| > 1) ** +INF is +INF - * 6. +-(|x| > 1) ** -INF is +0 - * 7. +-(|x| < 1) ** +INF is +0 - * 8. +-(|x| < 1) ** -INF is +INF - * 9. +-1 ** +-INF is NAN - * 10. +0 ** (+anything except 0, NAN) is +0 - * 11. -0 ** (+anything except 0, NAN, odd integer) is +0 - * 12. +0 ** (-anything except 0, NAN) is +INF - * 13. -0 ** (-anything except 0, NAN, odd integer) is +INF - * 14. -0 ** (odd integer) = -( +0 ** (odd integer) ) - * 15. +INF ** (+anything except 0,NAN) is +INF - * 16. +INF ** (-anything except 0,NAN) is +0 - * 17. -INF ** (anything) = -0 ** (-anything) - * 18. (-anything) ** (integer) is (-1)**(integer)*(+anything**integer) - * 19. (-anything except 0 and inf) ** (non-integer) is NAN - * - */ - -#include -#include - -static const _Float128 bp[] = { - 1, - L(1.5), -}; - -/* log_2(1.5) */ -static const _Float128 dp_h[] = { - 0.0, - L(5.8496250072115607565592654282227158546448E-1) -}; - -/* Low part of log_2(1.5) */ -static const _Float128 dp_l[] = { - 0.0, - L(1.0579781240112554492329533686862998106046E-16) -}; - -static const _Float128 zero = 0, - one = 1, - two = 2, - two113 = L(1.0384593717069655257060992658440192E34), - huge = L(1.0e3000), - tiny = L(1.0e-3000); - -/* 3/2 log x = 3 z + z^3 + z^3 (z^2 R(z^2)) - z = (x-1)/(x+1) - 1 <= x <= 1.25 - Peak relative error 2.3e-37 */ -static const _Float128 LN[] = -{ - L(-3.0779177200290054398792536829702930623200E1), - L(6.5135778082209159921251824580292116201640E1), - L(-4.6312921812152436921591152809994014413540E1), - L(1.2510208195629420304615674658258363295208E1), - L(-9.9266909031921425609179910128531667336670E-1) -}; -static const _Float128 LD[] = -{ - L(-5.129862866715009066465422805058933131960E1), - L(1.452015077564081884387441590064272782044E2), - L(-1.524043275549860505277434040464085593165E2), - L(7.236063513651544224319663428634139768808E1), - L(-1.494198912340228235853027849917095580053E1) - /* 1.0E0 */ -}; - -/* exp(x) = 1 + x - x / (1 - 2 / (x - x^2 R(x^2))) - 0 <= x <= 0.5 - Peak relative error 5.7e-38 */ -static const _Float128 PN[] = -{ - L(5.081801691915377692446852383385968225675E8), - L(9.360895299872484512023336636427675327355E6), - L(4.213701282274196030811629773097579432957E4), - L(5.201006511142748908655720086041570288182E1), - L(9.088368420359444263703202925095675982530E-3), -}; -static const _Float128 PD[] = -{ - L(3.049081015149226615468111430031590411682E9), - L(1.069833887183886839966085436512368982758E8), - L(8.259257717868875207333991924545445705394E5), - L(1.872583833284143212651746812884298360922E3), - /* 1.0E0 */ -}; - -static const _Float128 - /* ln 2 */ - lg2 = L(6.9314718055994530941723212145817656807550E-1), - lg2_h = L(6.9314718055994528622676398299518041312695E-1), - lg2_l = L(2.3190468138462996154948554638754786504121E-17), - ovt = L(8.0085662595372944372e-0017), - /* 2/(3*log(2)) */ - cp = L(9.6179669392597560490661645400126142495110E-1), - cp_h = L(9.6179669392597555432899980587535537779331E-1), - cp_l = L(5.0577616648125906047157785230014751039424E-17); - -_Float128 -__ieee754_powl (_Float128 x, _Float128 y) -{ - _Float128 z, ax, z_h, z_l, p_h, p_l; - _Float128 y1, t1, t2, r, s, sgn, t, u, v, w; - _Float128 s2, s_h, s_l, t_h, t_l, ay; - int32_t i, j, k, yisint, n; - u_int32_t ix, iy; - int32_t hx, hy; - ieee854_long_double_shape_type o, p, q; - - p.value = x; - hx = p.parts32.w0; - ix = hx & 0x7fffffff; - - q.value = y; - hy = q.parts32.w0; - iy = hy & 0x7fffffff; - - - /* y==zero: x**0 = 1 */ - if ((iy | q.parts32.w1 | q.parts32.w2 | q.parts32.w3) == 0 - && !issignaling (x)) - return one; - - /* 1.0**y = 1; -1.0**+-Inf = 1 */ - if (x == one && !issignaling (y)) - return one; - if (x == -1 && iy == 0x7fff0000 - && (q.parts32.w1 | q.parts32.w2 | q.parts32.w3) == 0) - return one; - - /* +-NaN return x+y */ - if ((ix > 0x7fff0000) - || ((ix == 0x7fff0000) - && ((p.parts32.w1 | p.parts32.w2 | p.parts32.w3) != 0)) - || (iy > 0x7fff0000) - || ((iy == 0x7fff0000) - && ((q.parts32.w1 | q.parts32.w2 | q.parts32.w3) != 0))) - return x + y; - - /* determine if y is an odd int when x < 0 - * yisint = 0 ... y is not an integer - * yisint = 1 ... y is an odd int - * yisint = 2 ... y is an even int - */ - yisint = 0; - if (hx < 0) - { - if (iy >= 0x40700000) /* 2^113 */ - yisint = 2; /* even integer y */ - else if (iy >= 0x3fff0000) /* 1.0 */ - { - if (__floorl (y) == y) - { - z = 0.5 * y; - if (__floorl (z) == z) - yisint = 2; - else - yisint = 1; - } - } - } - - /* special value of y */ - if ((q.parts32.w1 | q.parts32.w2 | q.parts32.w3) == 0) - { - if (iy == 0x7fff0000) /* y is +-inf */ - { - if (((ix - 0x3fff0000) | p.parts32.w1 | p.parts32.w2 | p.parts32.w3) - == 0) - return y - y; /* +-1**inf is NaN */ - else if (ix >= 0x3fff0000) /* (|x|>1)**+-inf = inf,0 */ - return (hy >= 0) ? y : zero; - else /* (|x|<1)**-,+inf = inf,0 */ - return (hy < 0) ? -y : zero; - } - if (iy == 0x3fff0000) - { /* y is +-1 */ - if (hy < 0) - return one / x; - else - return x; - } - if (hy == 0x40000000) - return x * x; /* y is 2 */ - if (hy == 0x3ffe0000) - { /* y is 0.5 */ - if (hx >= 0) /* x >= +0 */ - return __ieee754_sqrtl (x); - } - } - - ax = fabsl (x); - /* special value of x */ - if ((p.parts32.w1 | p.parts32.w2 | p.parts32.w3) == 0) - { - if (ix == 0x7fff0000 || ix == 0 || ix == 0x3fff0000) - { - z = ax; /*x is +-0,+-inf,+-1 */ - if (hy < 0) - z = one / z; /* z = (1/|x|) */ - if (hx < 0) - { - if (((ix - 0x3fff0000) | yisint) == 0) - { - z = (z - z) / (z - z); /* (-1)**non-int is NaN */ - } - else if (yisint == 1) - z = -z; /* (x<0)**odd = -(|x|**odd) */ - } - return z; - } - } - - /* (x<0)**(non-int) is NaN */ - if (((((u_int32_t) hx >> 31) - 1) | yisint) == 0) - return (x - x) / (x - x); - - /* sgn (sign of result -ve**odd) = -1 else = 1 */ - sgn = one; - if (((((u_int32_t) hx >> 31) - 1) | (yisint - 1)) == 0) - sgn = -one; /* (-ve)**(odd int) */ - - /* |y| is huge. - 2^-16495 = 1/2 of smallest representable value. - If (1 - 1/131072)^y underflows, y > 1.4986e9 */ - if (iy > 0x401d654b) - { - /* if (1 - 2^-113)^y underflows, y > 1.1873e38 */ - if (iy > 0x407d654b) - { - if (ix <= 0x3ffeffff) - return (hy < 0) ? huge * huge : tiny * tiny; - if (ix >= 0x3fff0000) - return (hy > 0) ? huge * huge : tiny * tiny; - } - /* over/underflow if x is not close to one */ - if (ix < 0x3ffeffff) - return (hy < 0) ? sgn * huge * huge : sgn * tiny * tiny; - if (ix > 0x3fff0000) - return (hy > 0) ? sgn * huge * huge : sgn * tiny * tiny; - } - - ay = y > 0 ? y : -y; - if (ay < 0x1p-128) - y = y < 0 ? -0x1p-128 : 0x1p-128; - - n = 0; - /* take care subnormal number */ - if (ix < 0x00010000) - { - ax *= two113; - n -= 113; - o.value = ax; - ix = o.parts32.w0; - } - n += ((ix) >> 16) - 0x3fff; - j = ix & 0x0000ffff; - /* determine interval */ - ix = j | 0x3fff0000; /* normalize ix */ - if (j <= 0x3988) - k = 0; /* |x|= 0x400d0000) /* z >= 16384 */ - { - /* if z > 16384 */ - if (((j - 0x400d0000) | o.parts32.w1 | o.parts32.w2 | o.parts32.w3) != 0) - return sgn * huge * huge; /* overflow */ - else - { - if (p_l + ovt > z - p_h) - return sgn * huge * huge; /* overflow */ - } - } - else if ((j & 0x7fffffff) >= 0x400d01b9) /* z <= -16495 */ - { - /* z < -16495 */ - if (((j - 0xc00d01bc) | o.parts32.w1 | o.parts32.w2 | o.parts32.w3) - != 0) - return sgn * tiny * tiny; /* underflow */ - else - { - if (p_l <= z - p_h) - return sgn * tiny * tiny; /* underflow */ - } - } - /* compute 2**(p_h+p_l) */ - i = j & 0x7fffffff; - k = (i >> 16) - 0x3fff; - n = 0; - if (i > 0x3ffe0000) - { /* if |z| > 0.5, set n = [z+0.5] */ - n = __floorl (z + L(0.5)); - t = n; - p_h -= t; - } - t = p_l + p_h; - o.value = t; - o.parts32.w3 = 0; - o.parts32.w2 &= 0xf8000000; - t = o.value; - u = t * lg2_h; - v = (p_l - (t - p_h)) * lg2 + t * lg2_l; - z = u + v; - w = v - (z - u); - /* exp(z) */ - t = z * z; - u = PN[0] + t * (PN[1] + t * (PN[2] + t * (PN[3] + t * PN[4]))); - v = PD[0] + t * (PD[1] + t * (PD[2] + t * (PD[3] + t))); - t1 = z - t * u / v; - r = (z * t1) / (t1 - two) - (w + z * w); - z = one - (r - z); - o.value = z; - j = o.parts32.w0; - j += (n << 16); - if ((j >> 16) <= 0) - { - z = __scalbnl (z, n); /* subnormal output */ - _Float128 force_underflow = z * z; - math_force_eval (force_underflow); - } - else - { - o.parts32.w0 = j; - z = o.value; - } - return sgn * z; -} -strong_alias (__ieee754_powl, __powl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c b/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c deleted file mode 100644 index 21b440762f..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_rem_pio2l.c +++ /dev/null @@ -1,273 +0,0 @@ -/* Quad-precision floating point argument reduction. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* - * Table of constants for 2/pi, 5628 hexadecimal digits of 2/pi - */ -static const int32_t two_over_pi[] = { -0xa2f983, 0x6e4e44, 0x1529fc, 0x2757d1, 0xf534dd, 0xc0db62, -0x95993c, 0x439041, 0xfe5163, 0xabdebb, 0xc561b7, 0x246e3a, -0x424dd2, 0xe00649, 0x2eea09, 0xd1921c, 0xfe1deb, 0x1cb129, -0xa73ee8, 0x8235f5, 0x2ebb44, 0x84e99c, 0x7026b4, 0x5f7e41, -0x3991d6, 0x398353, 0x39f49c, 0x845f8b, 0xbdf928, 0x3b1ff8, -0x97ffde, 0x05980f, 0xef2f11, 0x8b5a0a, 0x6d1f6d, 0x367ecf, -0x27cb09, 0xb74f46, 0x3f669e, 0x5fea2d, 0x7527ba, 0xc7ebe5, -0xf17b3d, 0x0739f7, 0x8a5292, 0xea6bfb, 0x5fb11f, 0x8d5d08, -0x560330, 0x46fc7b, 0x6babf0, 0xcfbc20, 0x9af436, 0x1da9e3, -0x91615e, 0xe61b08, 0x659985, 0x5f14a0, 0x68408d, 0xffd880, -0x4d7327, 0x310606, 0x1556ca, 0x73a8c9, 0x60e27b, 0xc08c6b, -0x47c419, 0xc367cd, 0xdce809, 0x2a8359, 0xc4768b, 0x961ca6, -0xddaf44, 0xd15719, 0x053ea5, 0xff0705, 0x3f7e33, 0xe832c2, -0xde4f98, 0x327dbb, 0xc33d26, 0xef6b1e, 0x5ef89f, 0x3a1f35, -0xcaf27f, 0x1d87f1, 0x21907c, 0x7c246a, 0xfa6ed5, 0x772d30, -0x433b15, 0xc614b5, 0x9d19c3, 0xc2c4ad, 0x414d2c, 0x5d000c, -0x467d86, 0x2d71e3, 0x9ac69b, 0x006233, 0x7cd2b4, 0x97a7b4, -0xd55537, 0xf63ed7, 0x1810a3, 0xfc764d, 0x2a9d64, 0xabd770, -0xf87c63, 0x57b07a, 0xe71517, 0x5649c0, 0xd9d63b, 0x3884a7, -0xcb2324, 0x778ad6, 0x23545a, 0xb91f00, 0x1b0af1, 0xdfce19, -0xff319f, 0x6a1e66, 0x615799, 0x47fbac, 0xd87f7e, 0xb76522, -0x89e832, 0x60bfe6, 0xcdc4ef, 0x09366c, 0xd43f5d, 0xd7de16, -0xde3b58, 0x929bde, 0x2822d2, 0xe88628, 0x4d58e2, 0x32cac6, -0x16e308, 0xcb7de0, 0x50c017, 0xa71df3, 0x5be018, 0x34132e, -0x621283, 0x014883, 0x5b8ef5, 0x7fb0ad, 0xf2e91e, 0x434a48, -0xd36710, 0xd8ddaa, 0x425fae, 0xce616a, 0xa4280a, 0xb499d3, -0xf2a606, 0x7f775c, 0x83c2a3, 0x883c61, 0x78738a, 0x5a8caf, -0xbdd76f, 0x63a62d, 0xcbbff4, 0xef818d, 0x67c126, 0x45ca55, -0x36d9ca, 0xd2a828, 0x8d61c2, 0x77c912, 0x142604, 0x9b4612, -0xc459c4, 0x44c5c8, 0x91b24d, 0xf31700, 0xad43d4, 0xe54929, -0x10d5fd, 0xfcbe00, 0xcc941e, 0xeece70, 0xf53e13, 0x80f1ec, -0xc3e7b3, 0x28f8c7, 0x940593, 0x3e71c1, 0xb3092e, 0xf3450b, -0x9c1288, 0x7b20ab, 0x9fb52e, 0xc29247, 0x2f327b, 0x6d550c, -0x90a772, 0x1fe76b, 0x96cb31, 0x4a1679, 0xe27941, 0x89dff4, -0x9794e8, 0x84e6e2, 0x973199, 0x6bed88, 0x365f5f, 0x0efdbb, -0xb49a48, 0x6ca467, 0x427271, 0x325d8d, 0xb8159f, 0x09e5bc, -0x25318d, 0x3974f7, 0x1c0530, 0x010c0d, 0x68084b, 0x58ee2c, -0x90aa47, 0x02e774, 0x24d6bd, 0xa67df7, 0x72486e, 0xef169f, -0xa6948e, 0xf691b4, 0x5153d1, 0xf20acf, 0x339820, 0x7e4bf5, -0x6863b2, 0x5f3edd, 0x035d40, 0x7f8985, 0x295255, 0xc06437, -0x10d86d, 0x324832, 0x754c5b, 0xd4714e, 0x6e5445, 0xc1090b, -0x69f52a, 0xd56614, 0x9d0727, 0x50045d, 0xdb3bb4, 0xc576ea, -0x17f987, 0x7d6b49, 0xba271d, 0x296996, 0xacccc6, 0x5414ad, -0x6ae290, 0x89d988, 0x50722c, 0xbea404, 0x940777, 0x7030f3, -0x27fc00, 0xa871ea, 0x49c266, 0x3de064, 0x83dd97, 0x973fa3, -0xfd9443, 0x8c860d, 0xde4131, 0x9d3992, 0x8c70dd, 0xe7b717, -0x3bdf08, 0x2b3715, 0xa0805c, 0x93805a, 0x921110, 0xd8e80f, -0xaf806c, 0x4bffdb, 0x0f9038, 0x761859, 0x15a562, 0xbbcb61, -0xb989c7, 0xbd4010, 0x04f2d2, 0x277549, 0xf6b6eb, 0xbb22db, -0xaa140a, 0x2f2689, 0x768364, 0x333b09, 0x1a940e, 0xaa3a51, -0xc2a31d, 0xaeedaf, 0x12265c, 0x4dc26d, 0x9c7a2d, 0x9756c0, -0x833f03, 0xf6f009, 0x8c402b, 0x99316d, 0x07b439, 0x15200c, -0x5bc3d8, 0xc492f5, 0x4badc6, 0xa5ca4e, 0xcd37a7, 0x36a9e6, -0x9492ab, 0x6842dd, 0xde6319, 0xef8c76, 0x528b68, 0x37dbfc, -0xaba1ae, 0x3115df, 0xa1ae00, 0xdafb0c, 0x664d64, 0xb705ed, -0x306529, 0xbf5657, 0x3aff47, 0xb9f96a, 0xf3be75, 0xdf9328, -0x3080ab, 0xf68c66, 0x15cb04, 0x0622fa, 0x1de4d9, 0xa4b33d, -0x8f1b57, 0x09cd36, 0xe9424e, 0xa4be13, 0xb52333, 0x1aaaf0, -0xa8654f, 0xa5c1d2, 0x0f3f0b, 0xcd785b, 0x76f923, 0x048b7b, -0x721789, 0x53a6c6, 0xe26e6f, 0x00ebef, 0x584a9b, 0xb7dac4, -0xba66aa, 0xcfcf76, 0x1d02d1, 0x2df1b1, 0xc1998c, 0x77adc3, -0xda4886, 0xa05df7, 0xf480c6, 0x2ff0ac, 0x9aecdd, 0xbc5c3f, -0x6dded0, 0x1fc790, 0xb6db2a, 0x3a25a3, 0x9aaf00, 0x9353ad, -0x0457b6, 0xb42d29, 0x7e804b, 0xa707da, 0x0eaa76, 0xa1597b, -0x2a1216, 0x2db7dc, 0xfde5fa, 0xfedb89, 0xfdbe89, 0x6c76e4, -0xfca906, 0x70803e, 0x156e85, 0xff87fd, 0x073e28, 0x336761, -0x86182a, 0xeabd4d, 0xafe7b3, 0x6e6d8f, 0x396795, 0x5bbf31, -0x48d784, 0x16df30, 0x432dc7, 0x356125, 0xce70c9, 0xb8cb30, -0xfd6cbf, 0xa200a4, 0xe46c05, 0xa0dd5a, 0x476f21, 0xd21262, -0x845cb9, 0x496170, 0xe0566b, 0x015299, 0x375550, 0xb7d51e, -0xc4f133, 0x5f6e13, 0xe4305d, 0xa92e85, 0xc3b21d, 0x3632a1, -0xa4b708, 0xd4b1ea, 0x21f716, 0xe4698f, 0x77ff27, 0x80030c, -0x2d408d, 0xa0cd4f, 0x99a520, 0xd3a2b3, 0x0a5d2f, 0x42f9b4, -0xcbda11, 0xd0be7d, 0xc1db9b, 0xbd17ab, 0x81a2ca, 0x5c6a08, -0x17552e, 0x550027, 0xf0147f, 0x8607e1, 0x640b14, 0x8d4196, -0xdebe87, 0x2afdda, 0xb6256b, 0x34897b, 0xfef305, 0x9ebfb9, -0x4f6a68, 0xa82a4a, 0x5ac44f, 0xbcf82d, 0x985ad7, 0x95c7f4, -0x8d4d0d, 0xa63a20, 0x5f57a4, 0xb13f14, 0x953880, 0x0120cc, -0x86dd71, 0xb6dec9, 0xf560bf, 0x11654d, 0x6b0701, 0xacb08c, -0xd0c0b2, 0x485551, 0x0efb1e, 0xc37295, 0x3b06a3, 0x3540c0, -0x7bdc06, 0xcc45e0, 0xfa294e, 0xc8cad6, 0x41f3e8, 0xde647c, -0xd8649b, 0x31bed9, 0xc397a4, 0xd45877, 0xc5e369, 0x13daf0, -0x3c3aba, 0x461846, 0x5f7555, 0xf5bdd2, 0xc6926e, 0x5d2eac, -0xed440e, 0x423e1c, 0x87c461, 0xe9fd29, 0xf3d6e7, 0xca7c22, -0x35916f, 0xc5e008, 0x8dd7ff, 0xe26a6e, 0xc6fdb0, 0xc10893, -0x745d7c, 0xb2ad6b, 0x9d6ecd, 0x7b723e, 0x6a11c6, 0xa9cff7, -0xdf7329, 0xbac9b5, 0x5100b7, 0x0db2e2, 0x24ba74, 0x607de5, -0x8ad874, 0x2c150d, 0x0c1881, 0x94667e, 0x162901, 0x767a9f, -0xbefdfd, 0xef4556, 0x367ed9, 0x13d9ec, 0xb9ba8b, 0xfc97c4, -0x27a831, 0xc36ef1, 0x36c594, 0x56a8d8, 0xb5a8b4, 0x0ecccf, -0x2d8912, 0x34576f, 0x89562c, 0xe3ce99, 0xb920d6, 0xaa5e6b, -0x9c2a3e, 0xcc5f11, 0x4a0bfd, 0xfbf4e1, 0x6d3b8e, 0x2c86e2, -0x84d4e9, 0xa9b4fc, 0xd1eeef, 0xc9352e, 0x61392f, 0x442138, -0xc8d91b, 0x0afc81, 0x6a4afb, 0xd81c2f, 0x84b453, 0x8c994e, -0xcc2254, 0xdc552a, 0xd6c6c0, 0x96190b, 0xb8701a, 0x649569, -0x605a26, 0xee523f, 0x0f117f, 0x11b5f4, 0xf5cbfc, 0x2dbc34, -0xeebc34, 0xcc5de8, 0x605edd, 0x9b8e67, 0xef3392, 0xb817c9, -0x9b5861, 0xbc57e1, 0xc68351, 0x103ed8, 0x4871dd, 0xdd1c2d, -0xa118af, 0x462c21, 0xd7f359, 0x987ad9, 0xc0549e, 0xfa864f, -0xfc0656, 0xae79e5, 0x362289, 0x22ad38, 0xdc9367, 0xaae855, -0x382682, 0x9be7ca, 0xa40d51, 0xb13399, 0x0ed7a9, 0x480569, -0xf0b265, 0xa7887f, 0x974c88, 0x36d1f9, 0xb39221, 0x4a827b, -0x21cf98, 0xdc9f40, 0x5547dc, 0x3a74e1, 0x42eb67, 0xdf9dfe, -0x5fd45e, 0xa4677b, 0x7aacba, 0xa2f655, 0x23882b, 0x55ba41, -0x086e59, 0x862a21, 0x834739, 0xe6e389, 0xd49ee5, 0x40fb49, -0xe956ff, 0xca0f1c, 0x8a59c5, 0x2bfa94, 0xc5c1d3, 0xcfc50f, -0xae5adb, 0x86c547, 0x624385, 0x3b8621, 0x94792c, 0x876110, -0x7b4c2a, 0x1a2c80, 0x12bf43, 0x902688, 0x893c78, 0xe4c4a8, -0x7bdbe5, 0xc23ac4, 0xeaf426, 0x8a67f7, 0xbf920d, 0x2ba365, -0xb1933d, 0x0b7cbd, 0xdc51a4, 0x63dd27, 0xdde169, 0x19949a, -0x9529a8, 0x28ce68, 0xb4ed09, 0x209f44, 0xca984e, 0x638270, -0x237c7e, 0x32b90f, 0x8ef5a7, 0xe75614, 0x08f121, 0x2a9db5, -0x4d7e6f, 0x5119a5, 0xabf9b5, 0xd6df82, 0x61dd96, 0x023616, -0x9f3ac4, 0xa1a283, 0x6ded72, 0x7a8d39, 0xa9b882, 0x5c326b, -0x5b2746, 0xed3400, 0x7700d2, 0x55f4fc, 0x4d5901, 0x8071e0, -0xe13f89, 0xb295f3, 0x64a8f1, 0xaea74b, 0x38fc4c, 0xeab2bb, -0x47270b, 0xabc3a7, 0x34ba60, 0x52dd34, 0xf8563a, 0xeb7e8a, -0x31bb36, 0x5895b7, 0x47f7a9, 0x94c3aa, 0xd39225, 0x1e7f3e, -0xd8974e, 0xbba94f, 0xd8ae01, 0xe661b4, 0x393d8e, 0xa523aa, -0x33068e, 0x1633b5, 0x3bb188, 0x1d3a9d, 0x4013d0, 0xcc1be5, -0xf862e7, 0x3bf28f, 0x39b5bf, 0x0bc235, 0x22747e, 0xa247c0, -0xd52d1f, 0x19add3, 0x9094df, 0x9311d0, 0xb42b25, 0x496db2, -0xe264b2, 0x5ef135, 0x3bc6a4, 0x1a4ad0, 0xaac92e, 0x64e886, -0x573091, 0x982cfb, 0x311b1a, 0x08728b, 0xbdcee1, 0x60e142, -0xeb641d, 0xd0bba3, 0xe559d4, 0x597b8c, 0x2a4483, 0xf332ba, -0xf84867, 0x2c8d1b, 0x2fa9b0, 0x50f3dd, 0xf9f573, 0xdb61b4, -0xfe233e, 0x6c41a6, 0xeea318, 0x775a26, 0xbc5e5c, 0xcea708, -0x94dc57, 0xe20196, 0xf1e839, 0xbe4851, 0x5d2d2f, 0x4e9555, -0xd96ec2, 0xe7d755, 0x6304e0, 0xc02e0e, 0xfc40a0, 0xbbf9b3, -0x7125a7, 0x222dfb, 0xf619d8, 0x838c1c, 0x6619e6, 0xb20d55, -0xbb5137, 0x79e809, 0xaf9149, 0x0d73de, 0x0b0da5, 0xce7f58, -0xac1934, 0x724667, 0x7a1a13, 0x9e26bc, 0x4555e7, 0x585cb5, -0x711d14, 0x486991, 0x480d60, 0x56adab, 0xd62f64, 0x96ee0c, -0x212ff3, 0x5d6d88, 0xa67684, 0x95651e, 0xab9e0a, 0x4ddefe, -0x571010, 0x836a39, 0xf8ea31, 0x9e381d, 0xeac8b1, 0xcac96b, -0x37f21e, 0xd505e9, 0x984743, 0x9fc56c, 0x0331b7, 0x3b8bf8, -0x86e56a, 0x8dc343, 0x6230e7, 0x93cfd5, 0x6a8f2d, 0x733005, -0x1af021, 0xa09fcb, 0x7415a1, 0xd56b23, 0x6ff725, 0x2f4bc7, -0xb8a591, 0x7fac59, 0x5c55de, 0x212c38, 0xb13296, 0x5cff50, -0x366262, 0xfa7b16, 0xf4d9a6, 0x2acfe7, 0xf07403, 0xd4d604, -0x6fd916, 0x31b1bf, 0xcbb450, 0x5bd7c8, 0x0ce194, 0x6bd643, -0x4fd91c, 0xdf4543, 0x5f3453, 0xe2b5aa, 0xc9aec8, 0x131485, -0xf9d2bf, 0xbadb9e, 0x76f5b9, 0xaf15cf, 0xca3182, 0x14b56d, -0xe9fe4d, 0x50fc35, 0xf5aed5, 0xa2d0c1, 0xc96057, 0x192eb6, -0xe91d92, 0x07d144, 0xaea3c6, 0x343566, 0x26d5b4, 0x3161e2, -0x37f1a2, 0x209eff, 0x958e23, 0x493798, 0x35f4a6, 0x4bdc02, -0xc2be13, 0xbe80a0, 0x0b72a3, 0x115c5f, 0x1e1bd1, 0x0db4d3, -0x869e85, 0x96976b, 0x2ac91f, 0x8a26c2, 0x3070f0, 0x041412, -0xfc9fa5, 0xf72a38, 0x9c6878, 0xe2aa76, 0x50cfe1, 0x559274, -0x934e38, 0x0a92f7, 0x5533f0, 0xa63db4, 0x399971, 0xe2b755, -0xa98a7c, 0x008f19, 0xac54d2, 0x2ea0b4, 0xf5f3e0, 0x60c849, -0xffd269, 0xae52ce, 0x7a5fdd, 0xe9ce06, 0xfb0ae8, 0xa50cce, -0xea9d3e, 0x3766dd, 0xb834f5, 0x0da090, 0x846f88, 0x4ae3d5, -0x099a03, 0x2eae2d, 0xfcb40a, 0xfb9b33, 0xe281dd, 0x1b16ba, -0xd8c0af, 0xd96b97, 0xb52dc9, 0x9c277f, 0x5951d5, 0x21ccd6, -0xb6496b, 0x584562, 0xb3baf2, 0xa1a5c4, 0x7ca2cf, 0xa9b93d, -0x7b7b89, 0x483d38, -}; - -static const _Float128 c[] = { -/* 113 bits of pi/2 */ -#define PI_2_1 c[0] - L(0x1.921fb54442d18469898cc51701b8p+0), - -/* pi/2 - PI_2_1 */ -#define PI_2_1t c[1] - L(0x3.9a252049c1114cf98e804177d4c8p-116), -}; - -int32_t __ieee754_rem_pio2l(_Float128 x, _Float128 *y) -{ - _Float128 z, w, t; - double tx[8]; - int64_t exp, n, ix, hx; - u_int64_t lx; - - GET_LDOUBLE_WORDS64 (hx, lx, x); - ix = hx & 0x7fffffffffffffffLL; - if (ix <= 0x3ffe921fb54442d1LL) /* x in <-pi/4, pi/4> */ - { - y[0] = x; - y[1] = 0; - return 0; - } - - if (ix < 0x40002d97c7f3321dLL) /* |x| in 0) - { - /* 113 + 113 bit PI is ok */ - z = x - PI_2_1; - y[0] = z - PI_2_1t; - y[1] = (z - y[0]) - PI_2_1t; - return 1; - } - else - { - /* 113 + 113 bit PI is ok */ - z = x + PI_2_1; - y[0] = z + PI_2_1t; - y[1] = (z - y[0]) + PI_2_1t; - return -1; - } - } - - if (ix >= 0x7fff000000000000LL) /* x is +=oo or NaN */ - { - y[0] = x - x; - y[1] = y[0]; - return 0; - } - - /* Handle large arguments. - We split the 113 bits of the mantissa into 5 24bit integers - stored in a double array. */ - exp = (ix >> 48) - 16383 - 23; - - /* This is faster than doing this in floating point, because we - have to convert it to integers anyway and like this we can keep - both integer and floating point units busy. */ - tx [0] = (double)(((ix >> 25) & 0x7fffff) | 0x800000); - tx [1] = (double)((ix >> 1) & 0xffffff); - tx [2] = (double)(((ix << 23) | (lx >> 41)) & 0xffffff); - tx [3] = (double)((lx >> 17) & 0xffffff); - tx [4] = (double)((lx << 7) & 0xffffff); - - n = __kernel_rem_pio2 (tx, tx + 5, exp, ((lx << 7) & 0xffffff) ? 5 : 4, - 3, two_over_pi); - - /* The result is now stored in 3 double values, we need to convert it into - two long double values. */ - t = (_Float128) tx [6] + (_Float128) tx [7]; - w = (_Float128) tx [5]; - - if (hx >= 0) - { - y[0] = w + t; - y[1] = t - (y[0] - w); - return n; - } - else - { - y[0] = -(w + t); - y[1] = -t - (y[0] + w); - return -n; - } -} diff --git a/sysdeps/ieee754/ldbl-128/e_remainderl.c b/sysdeps/ieee754/ldbl-128/e_remainderl.c deleted file mode 100644 index c1c196ca9a..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_remainderl.c +++ /dev/null @@ -1,71 +0,0 @@ -/* e_fmodl.c -- long double version of e_fmod.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_remainderl(x,p) - * Return : - * returns x REM p = x - [x/p]*p as if in infinite - * precise arithmetic, where [x/p] is the (infinite bit) - * integer nearest x/p (in half way case choose the even one). - * Method : - * Based on fmodl() return x-[x/p]chopped*p exactlp. - */ - -#include -#include - -static const _Float128 zero = 0; - - -_Float128 -__ieee754_remainderl(_Float128 x, _Float128 p) -{ - int64_t hx,hp; - u_int64_t sx,lx,lp; - _Float128 p_half; - - GET_LDOUBLE_WORDS64(hx,lx,x); - GET_LDOUBLE_WORDS64(hp,lp,p); - sx = hx&0x8000000000000000ULL; - hp &= 0x7fffffffffffffffLL; - hx &= 0x7fffffffffffffffLL; - - /* purge off exception values */ - if((hp|lp)==0) return (x*p)/(x*p); /* p = 0 */ - if((hx>=0x7fff000000000000LL)|| /* x not finite */ - ((hp>=0x7fff000000000000LL)&& /* p is NaN */ - (((hp-0x7fff000000000000LL)|lp)!=0))) - return (x*p)/(x*p); - - - if (hp<=0x7ffdffffffffffffLL) x = __ieee754_fmodl(x,p+p); /* now x < 2p */ - if (((hx-hp)|(lx-lp))==0) return zero*x; - x = fabsl(x); - p = fabsl(p); - if (hp<0x0002000000000000LL) { - if(x+x>p) { - x-=p; - if(x+x>=p) x -= p; - } - } else { - p_half = L(0.5)*p; - if(x>p_half) { - x-=p; - if(x>=p_half) x -= p; - } - } - GET_LDOUBLE_MSW64(hx,x); - SET_LDOUBLE_MSW64(x,hx^sx); - return x; -} -strong_alias (__ieee754_remainderl, __remainderl_finite) diff --git a/sysdeps/ieee754/ldbl-128/e_sinhl.c b/sysdeps/ieee754/ldbl-128/e_sinhl.c deleted file mode 100644 index a2b30c2190..0000000000 --- a/sysdeps/ieee754/ldbl-128/e_sinhl.c +++ /dev/null @@ -1,117 +0,0 @@ -/* e_sinhl.c -- long double version of e_sinh.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Changes for 128-bit long double are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_sinhl(x) - * Method : - * mathematically sinh(x) if defined to be (exp(x)-exp(-x))/2 - * 1. Replace x by |x| (sinhl(-x) = -sinhl(x)). - * 2. - * E + E/(E+1) - * 0 <= x <= 25 : sinhl(x) := --------------, E=expm1l(x) - * 2 - * - * 25 <= x <= lnovft : sinhl(x) := expl(x)/2 - * lnovft <= x <= ln2ovft: sinhl(x) := expl(x/2)/2 * expl(x/2) - * ln2ovft < x : sinhl(x) := x*shuge (overflow) - * - * Special cases: - * sinhl(x) is |x| if x is +INF, -INF, or NaN. - * only sinhl(0)=0 is exact for finite x. - */ - -#include -#include -#include - -static const _Float128 one = 1.0, shuge = L(1.0e4931), -ovf_thresh = L(1.1357216553474703894801348310092223067821E4); - -_Float128 -__ieee754_sinhl (_Float128 x) -{ - _Float128 t, w, h; - u_int32_t jx, ix; - ieee854_long_double_shape_type u; - - /* Words of |x|. */ - u.value = x; - jx = u.parts32.w0; - ix = jx & 0x7fffffff; - - /* x is INF or NaN */ - if (ix >= 0x7fff0000) - return x + x; - - h = 0.5; - if (jx & 0x80000000) - h = -h; - - /* Absolute value of x. */ - u.parts32.w0 = ix; - - /* |x| in [0,40], return sign(x)*0.5*(E+E/(E+1))) */ - if (ix <= 0x40044000) - { - if (ix < 0x3fc60000) /* |x| < 2^-57 */ - { - math_check_force_underflow (x); - if (shuge + x > one) - return x; /* sinh(tiny) = tiny with inexact */ - } - t = __expm1l (u.value); - if (ix < 0x3fff0000) - return h * (2.0 * t - t * t / (t + one)); - return h * (t + t / (t + one)); - } - - /* |x| in [40, log(maxdouble)] return 0.5*exp(|x|) */ - if (ix <= 0x400c62e3) /* 11356.375 */ - return h * __ieee754_expl (u.value); - - /* |x| in [log(maxdouble), overflowthreshold] - Overflow threshold is log(2 * maxdouble). */ - if (u.value <= ovf_thresh) - { - w = __ieee754_expl (0.5 * u.value); - t = h * w; - return t * w; - } - - /* |x| > overflowthreshold, sinhl(x) overflow */ - return x * shuge; -} -strong_alias (__ieee754_sinhl, __sinhl_finite) diff --git a/sysdeps/ieee754/ldbl-128/gamma_productl.c b/sysdeps/ieee754/ldbl-128/gamma_productl.c deleted file mode 100644 index 319a45119e..0000000000 --- a/sysdeps/ieee754/ldbl-128/gamma_productl.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Compute a product of X, X+1, ..., with an error estimate. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Compute the product of X + X_EPS, X + X_EPS + 1, ..., X + X_EPS + N - - 1, in the form R * (1 + *EPS) where the return value R is an - approximation to the product and *EPS is set to indicate the - approximate error in the return value. X is such that all the - values X + 1, ..., X + N - 1 are exactly representable, and X_EPS / - X is small enough that factors quadratic in it can be - neglected. */ - -_Float128 -__gamma_productl (_Float128 x, _Float128 x_eps, int n, _Float128 *eps) -{ - SET_RESTORE_ROUNDL (FE_TONEAREST); - _Float128 ret = x; - *eps = x_eps / x; - for (int i = 1; i < n; i++) - { - *eps += x_eps / (x + i); - _Float128 lo; - mul_splitl (&ret, &lo, ret, x + i); - *eps += lo / ret; - } - return ret; -} diff --git a/sysdeps/ieee754/ldbl-128/ieee754.h b/sysdeps/ieee754/ldbl-128/ieee754.h deleted file mode 100644 index 94662a350f..0000000000 --- a/sysdeps/ieee754/ldbl-128/ieee754.h +++ /dev/null @@ -1,170 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _IEEE754_H - -#define _IEEE754_H 1 -#include - -#include - -__BEGIN_DECLS - -union ieee754_float - { - float f; - - /* This is the IEEE 754 single-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int mantissa:23; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:23; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int quiet_nan:1; - unsigned int mantissa:22; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:22; - unsigned int quiet_nan:1; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee_nan; - }; - -#define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */ - - -union ieee754_double - { - double d; - - /* This is the IEEE 754 double-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:20; - unsigned int mantissa1:32; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - unsigned int quiet_nan:1; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:19; - unsigned int mantissa1:32; -#else - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; -#endif - } ieee_nan; - }; - -#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */ - - -union ieee854_long_double - { - long double d; - - /* This is the IEEE 854 quad-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:15; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:16; - unsigned int mantissa1:32; - unsigned int mantissa2:32; - unsigned int mantissa3:32; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - /* Together these comprise the mantissa. */ - unsigned int mantissa3:32; - unsigned int mantissa2:32; - unsigned int mantissa1:32; - unsigned int mantissa0:16; - unsigned int exponent:15; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:15; - unsigned int quiet_nan:1; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:15; - unsigned int mantissa1:32; - unsigned int mantissa2:32; - unsigned int mantissa3:32; -#else - /* Together these comprise the mantissa. */ - unsigned int mantissa3:32; - unsigned int mantissa2:32; - unsigned int mantissa1:32; - unsigned int mantissa0:15; - unsigned int quiet_nan:1; - unsigned int exponent:15; - unsigned int negative:1; -#endif - } ieee_nan; - }; - -#define IEEE854_LONG_DOUBLE_BIAS 0x3fff /* Added to exponent. */ - -__END_DECLS - -#endif /* ieee754.h */ diff --git a/sysdeps/ieee754/ldbl-128/k_cosl.c b/sysdeps/ieee754/ldbl-128/k_cosl.c deleted file mode 100644 index b7c606379e..0000000000 --- a/sysdeps/ieee754/ldbl-128/k_cosl.c +++ /dev/null @@ -1,131 +0,0 @@ -/* Quad-precision floating point cosine on <-pi/4,pi/4>. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -static const _Float128 c[] = { -#define ONE c[0] - L(1.00000000000000000000000000000000000E+00), /* 3fff0000000000000000000000000000 */ - -/* cos x ~ ONE + x^2 ( SCOS1 + SCOS2 * x^2 + ... + SCOS4 * x^6 + SCOS5 * x^8 ) - x in <0,1/256> */ -#define SCOS1 c[1] -#define SCOS2 c[2] -#define SCOS3 c[3] -#define SCOS4 c[4] -#define SCOS5 c[5] -L(-5.00000000000000000000000000000000000E-01), /* bffe0000000000000000000000000000 */ - L(4.16666666666666666666666666556146073E-02), /* 3ffa5555555555555555555555395023 */ -L(-1.38888888888888888888309442601939728E-03), /* bff56c16c16c16c16c16a566e42c0375 */ - L(2.48015873015862382987049502531095061E-05), /* 3fefa01a01a019ee02dcf7da2d6d5444 */ -L(-2.75573112601362126593516899592158083E-07), /* bfe927e4f5dce637cb0b54908754bde0 */ - -/* cos x ~ ONE + x^2 ( COS1 + COS2 * x^2 + ... + COS7 * x^12 + COS8 * x^14 ) - x in <0,0.1484375> */ -#define COS1 c[6] -#define COS2 c[7] -#define COS3 c[8] -#define COS4 c[9] -#define COS5 c[10] -#define COS6 c[11] -#define COS7 c[12] -#define COS8 c[13] -L(-4.99999999999999999999999999999999759E-01), /* bffdfffffffffffffffffffffffffffb */ - L(4.16666666666666666666666666651287795E-02), /* 3ffa5555555555555555555555516f30 */ -L(-1.38888888888888888888888742314300284E-03), /* bff56c16c16c16c16c16c16a463dfd0d */ - L(2.48015873015873015867694002851118210E-05), /* 3fefa01a01a01a01a0195cebe6f3d3a5 */ -L(-2.75573192239858811636614709689300351E-07), /* bfe927e4fb7789f5aa8142a22044b51f */ - L(2.08767569877762248667431926878073669E-09), /* 3fe21eed8eff881d1e9262d7adff4373 */ -L(-1.14707451049343817400420280514614892E-11), /* bfda9397496922a9601ed3d4ca48944b */ - L(4.77810092804389587579843296923533297E-14), /* 3fd2ae5f8197cbcdcaf7c3fb4523414c */ - -/* sin x ~ ONE * x + x^3 ( SSIN1 + SSIN2 * x^2 + ... + SSIN4 * x^6 + SSIN5 * x^8 ) - x in <0,1/256> */ -#define SSIN1 c[14] -#define SSIN2 c[15] -#define SSIN3 c[16] -#define SSIN4 c[17] -#define SSIN5 c[18] -L(-1.66666666666666666666666666666666659E-01), /* bffc5555555555555555555555555555 */ - L(8.33333333333333333333333333146298442E-03), /* 3ff81111111111111111111110fe195d */ -L(-1.98412698412698412697726277416810661E-04), /* bff2a01a01a01a01a019e7121e080d88 */ - L(2.75573192239848624174178393552189149E-06), /* 3fec71de3a556c640c6aaa51aa02ab41 */ -L(-2.50521016467996193495359189395805639E-08), /* bfe5ae644ee90c47dc71839de75b2787 */ -}; - -#define SINCOSL_COS_HI 0 -#define SINCOSL_COS_LO 1 -#define SINCOSL_SIN_HI 2 -#define SINCOSL_SIN_LO 3 -extern const _Float128 __sincosl_table[]; - -_Float128 -__kernel_cosl(_Float128 x, _Float128 y) -{ - _Float128 h, l, z, sin_l, cos_l_m1; - int64_t ix; - u_int32_t tix, hix, index; - GET_LDOUBLE_MSW64 (ix, x); - tix = ((u_int64_t)ix) >> 32; - tix &= ~0x80000000; /* tix = |x|'s high 32 bits */ - if (tix < 0x3ffc3000) /* |x| < 0.1484375 */ - { - /* Argument is small enough to approximate it by a Chebyshev - polynomial of degree 16. */ - if (tix < 0x3fc60000) /* |x| < 2^-57 */ - if (!((int)x)) return ONE; /* generate inexact */ - z = x * x; - return ONE + (z*(COS1+z*(COS2+z*(COS3+z*(COS4+ - z*(COS5+z*(COS6+z*(COS7+z*COS8)))))))); - } - else - { - /* So that we don't have to use too large polynomial, we find - l and h such that x = l + h, where fabsl(l) <= 1.0/256 with 83 - possible values for h. We look up cosl(h) and sinl(h) in - pre-computed tables, compute cosl(l) and sinl(l) using a - Chebyshev polynomial of degree 10(11) and compute - cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l). */ - index = 0x3ffe - (tix >> 16); - hix = (tix + (0x200 << index)) & (0xfffffc00 << index); - if (signbit (x)) - { - x = -x; - y = -y; - } - switch (index) - { - case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break; - case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break; - default: - case 2: index = (hix - 0x3ffc3000) >> 10; break; - } - - SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0); - l = y - (h - x); - z = l * l; - sin_l = l*(ONE+z*(SSIN1+z*(SSIN2+z*(SSIN3+z*(SSIN4+z*SSIN5))))); - cos_l_m1 = z*(SCOS1+z*(SCOS2+z*(SCOS3+z*(SCOS4+z*SCOS5)))); - return __sincosl_table [index + SINCOSL_COS_HI] - + (__sincosl_table [index + SINCOSL_COS_LO] - - (__sincosl_table [index + SINCOSL_SIN_HI] * sin_l - - __sincosl_table [index + SINCOSL_COS_HI] * cos_l_m1)); - } -} diff --git a/sysdeps/ieee754/ldbl-128/k_sincosl.c b/sysdeps/ieee754/ldbl-128/k_sincosl.c deleted file mode 100644 index 03710f9e3a..0000000000 --- a/sysdeps/ieee754/ldbl-128/k_sincosl.c +++ /dev/null @@ -1,170 +0,0 @@ -/* Quad-precision floating point sine and cosine on <-pi/4,pi/4>. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const _Float128 c[] = { -#define ONE c[0] - L(1.00000000000000000000000000000000000E+00), /* 3fff0000000000000000000000000000 */ - -/* cos x ~ ONE + x^2 ( SCOS1 + SCOS2 * x^2 + ... + SCOS4 * x^6 + SCOS5 * x^8 ) - x in <0,1/256> */ -#define SCOS1 c[1] -#define SCOS2 c[2] -#define SCOS3 c[3] -#define SCOS4 c[4] -#define SCOS5 c[5] -L(-5.00000000000000000000000000000000000E-01), /* bffe0000000000000000000000000000 */ - L(4.16666666666666666666666666556146073E-02), /* 3ffa5555555555555555555555395023 */ -L(-1.38888888888888888888309442601939728E-03), /* bff56c16c16c16c16c16a566e42c0375 */ - L(2.48015873015862382987049502531095061E-05), /* 3fefa01a01a019ee02dcf7da2d6d5444 */ -L(-2.75573112601362126593516899592158083E-07), /* bfe927e4f5dce637cb0b54908754bde0 */ - -/* cos x ~ ONE + x^2 ( COS1 + COS2 * x^2 + ... + COS7 * x^12 + COS8 * x^14 ) - x in <0,0.1484375> */ -#define COS1 c[6] -#define COS2 c[7] -#define COS3 c[8] -#define COS4 c[9] -#define COS5 c[10] -#define COS6 c[11] -#define COS7 c[12] -#define COS8 c[13] -L(-4.99999999999999999999999999999999759E-01), /* bffdfffffffffffffffffffffffffffb */ - L(4.16666666666666666666666666651287795E-02), /* 3ffa5555555555555555555555516f30 */ -L(-1.38888888888888888888888742314300284E-03), /* bff56c16c16c16c16c16c16a463dfd0d */ - L(2.48015873015873015867694002851118210E-05), /* 3fefa01a01a01a01a0195cebe6f3d3a5 */ -L(-2.75573192239858811636614709689300351E-07), /* bfe927e4fb7789f5aa8142a22044b51f */ - L(2.08767569877762248667431926878073669E-09), /* 3fe21eed8eff881d1e9262d7adff4373 */ -L(-1.14707451049343817400420280514614892E-11), /* bfda9397496922a9601ed3d4ca48944b */ - L(4.77810092804389587579843296923533297E-14), /* 3fd2ae5f8197cbcdcaf7c3fb4523414c */ - -/* sin x ~ ONE * x + x^3 ( SSIN1 + SSIN2 * x^2 + ... + SSIN4 * x^6 + SSIN5 * x^8 ) - x in <0,1/256> */ -#define SSIN1 c[14] -#define SSIN2 c[15] -#define SSIN3 c[16] -#define SSIN4 c[17] -#define SSIN5 c[18] -L(-1.66666666666666666666666666666666659E-01), /* bffc5555555555555555555555555555 */ - L(8.33333333333333333333333333146298442E-03), /* 3ff81111111111111111111110fe195d */ -L(-1.98412698412698412697726277416810661E-04), /* bff2a01a01a01a01a019e7121e080d88 */ - L(2.75573192239848624174178393552189149E-06), /* 3fec71de3a556c640c6aaa51aa02ab41 */ -L(-2.50521016467996193495359189395805639E-08), /* bfe5ae644ee90c47dc71839de75b2787 */ - -/* sin x ~ ONE * x + x^3 ( SIN1 + SIN2 * x^2 + ... + SIN7 * x^12 + SIN8 * x^14 ) - x in <0,0.1484375> */ -#define SIN1 c[19] -#define SIN2 c[20] -#define SIN3 c[21] -#define SIN4 c[22] -#define SIN5 c[23] -#define SIN6 c[24] -#define SIN7 c[25] -#define SIN8 c[26] -L(-1.66666666666666666666666666666666538e-01), /* bffc5555555555555555555555555550 */ - L(8.33333333333333333333333333307532934e-03), /* 3ff811111111111111111111110e7340 */ -L(-1.98412698412698412698412534478712057e-04), /* bff2a01a01a01a01a01a019e7a626296 */ - L(2.75573192239858906520896496653095890e-06), /* 3fec71de3a556c7338fa38527474b8f5 */ -L(-2.50521083854417116999224301266655662e-08), /* bfe5ae64567f544e16c7de65c2ea551f */ - L(1.60590438367608957516841576404938118e-10), /* 3fde6124613a811480538a9a41957115 */ -L(-7.64716343504264506714019494041582610e-13), /* bfd6ae7f3d5aef30c7bc660b060ef365 */ - L(2.81068754939739570236322404393398135e-15), /* 3fce9510115aabf87aceb2022a9a9180 */ -}; - -#define SINCOSL_COS_HI 0 -#define SINCOSL_COS_LO 1 -#define SINCOSL_SIN_HI 2 -#define SINCOSL_SIN_LO 3 -extern const _Float128 __sincosl_table[]; - -void -__kernel_sincosl(_Float128 x, _Float128 y, _Float128 *sinx, _Float128 *cosx, int iy) -{ - _Float128 h, l, z, sin_l, cos_l_m1; - int64_t ix; - u_int32_t tix, hix, index; - GET_LDOUBLE_MSW64 (ix, x); - tix = ((u_int64_t)ix) >> 32; - tix &= ~0x80000000; /* tix = |x|'s high 32 bits */ - if (tix < 0x3ffc3000) /* |x| < 0.1484375 */ - { - /* Argument is small enough to approximate it by a Chebyshev - polynomial of degree 16(17). */ - if (tix < 0x3fc60000) /* |x| < 2^-57 */ - { - math_check_force_underflow (x); - if (!((int)x)) /* generate inexact */ - { - *sinx = x; - *cosx = ONE; - return; - } - } - z = x * x; - *sinx = x + (x * (z*(SIN1+z*(SIN2+z*(SIN3+z*(SIN4+ - z*(SIN5+z*(SIN6+z*(SIN7+z*SIN8))))))))); - *cosx = ONE + (z*(COS1+z*(COS2+z*(COS3+z*(COS4+ - z*(COS5+z*(COS6+z*(COS7+z*COS8)))))))); - } - else - { - /* So that we don't have to use too large polynomial, we find - l and h such that x = l + h, where fabsl(l) <= 1.0/256 with 83 - possible values for h. We look up cosl(h) and sinl(h) in - pre-computed tables, compute cosl(l) and sinl(l) using a - Chebyshev polynomial of degree 10(11) and compute - sinl(h+l) = sinl(h)cosl(l) + cosl(h)sinl(l) and - cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l). */ - index = 0x3ffe - (tix >> 16); - hix = (tix + (0x200 << index)) & (0xfffffc00 << index); - if (signbit (x)) - { - x = -x; - y = -y; - } - switch (index) - { - case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break; - case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break; - default: - case 2: index = (hix - 0x3ffc3000) >> 10; break; - } - - SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0); - if (iy) - l = y - (h - x); - else - l = x - h; - z = l * l; - sin_l = l*(ONE+z*(SSIN1+z*(SSIN2+z*(SSIN3+z*(SSIN4+z*SSIN5))))); - cos_l_m1 = z*(SCOS1+z*(SCOS2+z*(SCOS3+z*(SCOS4+z*SCOS5)))); - z = __sincosl_table [index + SINCOSL_SIN_HI] - + (__sincosl_table [index + SINCOSL_SIN_LO] - + (__sincosl_table [index + SINCOSL_SIN_HI] * cos_l_m1) - + (__sincosl_table [index + SINCOSL_COS_HI] * sin_l)); - *sinx = (ix < 0) ? -z : z; - *cosx = __sincosl_table [index + SINCOSL_COS_HI] - + (__sincosl_table [index + SINCOSL_COS_LO] - - (__sincosl_table [index + SINCOSL_SIN_HI] * sin_l - - __sincosl_table [index + SINCOSL_COS_HI] * cos_l_m1)); - } -} diff --git a/sysdeps/ieee754/ldbl-128/k_sinl.c b/sysdeps/ieee754/ldbl-128/k_sinl.c deleted file mode 100644 index 4107eeb9f9..0000000000 --- a/sysdeps/ieee754/ldbl-128/k_sinl.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Quad-precision floating point sine on <-pi/4,pi/4>. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const _Float128 c[] = { -#define ONE c[0] - L(1.00000000000000000000000000000000000E+00), /* 3fff0000000000000000000000000000 */ - -/* cos x ~ ONE + x^2 ( SCOS1 + SCOS2 * x^2 + ... + SCOS4 * x^6 + SCOS5 * x^8 ) - x in <0,1/256> */ -#define SCOS1 c[1] -#define SCOS2 c[2] -#define SCOS3 c[3] -#define SCOS4 c[4] -#define SCOS5 c[5] -L(-5.00000000000000000000000000000000000E-01), /* bffe0000000000000000000000000000 */ - L(4.16666666666666666666666666556146073E-02), /* 3ffa5555555555555555555555395023 */ -L(-1.38888888888888888888309442601939728E-03), /* bff56c16c16c16c16c16a566e42c0375 */ - L(2.48015873015862382987049502531095061E-05), /* 3fefa01a01a019ee02dcf7da2d6d5444 */ -L(-2.75573112601362126593516899592158083E-07), /* bfe927e4f5dce637cb0b54908754bde0 */ - -/* sin x ~ ONE * x + x^3 ( SIN1 + SIN2 * x^2 + ... + SIN7 * x^12 + SIN8 * x^14 ) - x in <0,0.1484375> */ -#define SIN1 c[6] -#define SIN2 c[7] -#define SIN3 c[8] -#define SIN4 c[9] -#define SIN5 c[10] -#define SIN6 c[11] -#define SIN7 c[12] -#define SIN8 c[13] -L(-1.66666666666666666666666666666666538e-01), /* bffc5555555555555555555555555550 */ - L(8.33333333333333333333333333307532934e-03), /* 3ff811111111111111111111110e7340 */ -L(-1.98412698412698412698412534478712057e-04), /* bff2a01a01a01a01a01a019e7a626296 */ - L(2.75573192239858906520896496653095890e-06), /* 3fec71de3a556c7338fa38527474b8f5 */ -L(-2.50521083854417116999224301266655662e-08), /* bfe5ae64567f544e16c7de65c2ea551f */ - L(1.60590438367608957516841576404938118e-10), /* 3fde6124613a811480538a9a41957115 */ -L(-7.64716343504264506714019494041582610e-13), /* bfd6ae7f3d5aef30c7bc660b060ef365 */ - L(2.81068754939739570236322404393398135e-15), /* 3fce9510115aabf87aceb2022a9a9180 */ - -/* sin x ~ ONE * x + x^3 ( SSIN1 + SSIN2 * x^2 + ... + SSIN4 * x^6 + SSIN5 * x^8 ) - x in <0,1/256> */ -#define SSIN1 c[14] -#define SSIN2 c[15] -#define SSIN3 c[16] -#define SSIN4 c[17] -#define SSIN5 c[18] -L(-1.66666666666666666666666666666666659E-01), /* bffc5555555555555555555555555555 */ - L(8.33333333333333333333333333146298442E-03), /* 3ff81111111111111111111110fe195d */ -L(-1.98412698412698412697726277416810661E-04), /* bff2a01a01a01a01a019e7121e080d88 */ - L(2.75573192239848624174178393552189149E-06), /* 3fec71de3a556c640c6aaa51aa02ab41 */ -L(-2.50521016467996193495359189395805639E-08), /* bfe5ae644ee90c47dc71839de75b2787 */ -}; - -#define SINCOSL_COS_HI 0 -#define SINCOSL_COS_LO 1 -#define SINCOSL_SIN_HI 2 -#define SINCOSL_SIN_LO 3 -extern const _Float128 __sincosl_table[]; - -_Float128 -__kernel_sinl(_Float128 x, _Float128 y, int iy) -{ - _Float128 h, l, z, sin_l, cos_l_m1; - int64_t ix; - u_int32_t tix, hix, index; - GET_LDOUBLE_MSW64 (ix, x); - tix = ((u_int64_t)ix) >> 32; - tix &= ~0x80000000; /* tix = |x|'s high 32 bits */ - if (tix < 0x3ffc3000) /* |x| < 0.1484375 */ - { - /* Argument is small enough to approximate it by a Chebyshev - polynomial of degree 17. */ - if (tix < 0x3fc60000) /* |x| < 2^-57 */ - { - math_check_force_underflow (x); - if (!((int)x)) return x; /* generate inexact */ - } - z = x * x; - return x + (x * (z*(SIN1+z*(SIN2+z*(SIN3+z*(SIN4+ - z*(SIN5+z*(SIN6+z*(SIN7+z*SIN8))))))))); - } - else - { - /* So that we don't have to use too large polynomial, we find - l and h such that x = l + h, where fabsl(l) <= 1.0/256 with 83 - possible values for h. We look up cosl(h) and sinl(h) in - pre-computed tables, compute cosl(l) and sinl(l) using a - Chebyshev polynomial of degree 10(11) and compute - sinl(h+l) = sinl(h)cosl(l) + cosl(h)sinl(l). */ - index = 0x3ffe - (tix >> 16); - hix = (tix + (0x200 << index)) & (0xfffffc00 << index); - x = fabsl (x); - switch (index) - { - case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break; - case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break; - default: - case 2: index = (hix - 0x3ffc3000) >> 10; break; - } - - SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0); - if (iy) - l = (ix < 0 ? -y : y) - (h - x); - else - l = x - h; - z = l * l; - sin_l = l*(ONE+z*(SSIN1+z*(SSIN2+z*(SSIN3+z*(SSIN4+z*SSIN5))))); - cos_l_m1 = z*(SCOS1+z*(SCOS2+z*(SCOS3+z*(SCOS4+z*SCOS5)))); - z = __sincosl_table [index + SINCOSL_SIN_HI] - + (__sincosl_table [index + SINCOSL_SIN_LO] - + (__sincosl_table [index + SINCOSL_SIN_HI] * cos_l_m1) - + (__sincosl_table [index + SINCOSL_COS_HI] * sin_l)); - return (ix < 0) ? -z : z; - } -} diff --git a/sysdeps/ieee754/ldbl-128/k_tanl.c b/sysdeps/ieee754/ldbl-128/k_tanl.c deleted file mode 100644 index e79023c69a..0000000000 --- a/sysdeps/ieee754/ldbl-128/k_tanl.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - Long double expansions are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __kernel_tanl( x, y, k ) - * kernel tan function on [-pi/4, pi/4], pi/4 ~ 0.7854 - * Input x is assumed to be bounded by ~pi/4 in magnitude. - * Input y is the tail of x. - * Input k indicates whether tan (if k=1) or - * -1/tan (if k= -1) is returned. - * - * Algorithm - * 1. Since tan(-x) = -tan(x), we need only to consider positive x. - * 2. if x < 2^-57, return x with inexact if x!=0. - * 3. tan(x) is approximated by a rational form x + x^3 / 3 + x^5 R(x^2) - * on [0,0.67433]. - * - * Note: tan(x+y) = tan(x) + tan'(x)*y - * ~ tan(x) + (1+x*x)*y - * Therefore, for better accuracy in computing tan(x+y), let - * r = x^3 * R(x^2) - * then - * tan(x+y) = x + (x^3 / 3 + (x^2 *(r+y)+y)) - * - * 4. For x in [0.67433,pi/4], let y = pi/4 - x, then - * tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y)) - * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) - */ - -#include -#include -#include -#include - -static const _Float128 - one = 1, - pio4hi = L(7.8539816339744830961566084581987569936977E-1), - pio4lo = L(2.1679525325309452561992610065108379921906E-35), - - /* tan x = x + x^3 / 3 + x^5 T(x^2)/U(x^2) - 0 <= x <= 0.6743316650390625 - Peak relative error 8.0e-36 */ - TH = L(3.333333333333333333333333333333333333333E-1), - T0 = L(-1.813014711743583437742363284336855889393E7), - T1 = L(1.320767960008972224312740075083259247618E6), - T2 = L(-2.626775478255838182468651821863299023956E4), - T3 = L(1.764573356488504935415411383687150199315E2), - T4 = L(-3.333267763822178690794678978979803526092E-1), - - U0 = L(-1.359761033807687578306772463253710042010E8), - U1 = L(6.494370630656893175666729313065113194784E7), - U2 = L(-4.180787672237927475505536849168729386782E6), - U3 = L(8.031643765106170040139966622980914621521E4), - U4 = L(-5.323131271912475695157127875560667378597E2); - /* 1.000000000000000000000000000000000000000E0 */ - - -_Float128 -__kernel_tanl (_Float128 x, _Float128 y, int iy) -{ - _Float128 z, r, v, w, s; - int32_t ix, sign; - ieee854_long_double_shape_type u, u1; - - u.value = x; - ix = u.parts32.w0 & 0x7fffffff; - if (ix < 0x3fc60000) /* x < 2**-57 */ - { - if ((int) x == 0) - { /* generate inexact */ - if ((ix | u.parts32.w1 | u.parts32.w2 | u.parts32.w3 - | (iy + 1)) == 0) - return one / fabsl (x); - else if (iy == 1) - { - math_check_force_underflow (x); - return x; - } - else - return -one / x; - } - } - if (ix >= 0x3ffe5942) /* |x| >= 0.6743316650390625 */ - { - if ((u.parts32.w0 & 0x80000000) != 0) - { - x = -x; - y = -y; - sign = -1; - } - else - sign = 1; - z = pio4hi - x; - w = pio4lo - y; - x = z + w; - y = 0.0; - } - z = x * x; - r = T0 + z * (T1 + z * (T2 + z * (T3 + z * T4))); - v = U0 + z * (U1 + z * (U2 + z * (U3 + z * (U4 + z)))); - r = r / v; - - s = z * x; - r = y + z * (s * r + y); - r += TH * s; - w = x + r; - if (ix >= 0x3ffe5942) - { - v = (_Float128) iy; - w = (v - 2.0 * (x - (w * w / (w + v) - r))); - /* SIGN is set for arguments that reach this code, but not - otherwise, resulting in warnings that it may be used - uninitialized although in the cases where it is used it has - always been set. */ - DIAG_PUSH_NEEDS_COMMENT; - DIAG_IGNORE_NEEDS_COMMENT (5, "-Wmaybe-uninitialized"); - if (sign < 0) - w = -w; - DIAG_POP_NEEDS_COMMENT; - return w; - } - if (iy == 1) - return w; - else - { /* if allow error up to 2 ulp, - simply return -1.0/(x+r) here */ - /* compute -1.0/(x+r) accurately */ - u1.value = w; - u1.parts32.w2 = 0; - u1.parts32.w3 = 0; - v = r - (u1.value - x); /* u1+v = r+x */ - z = -1.0 / w; - u.value = z; - u.parts32.w2 = 0; - u.parts32.w3 = 0; - s = 1.0 + u.value * u1.value; - return u.value + z * (s + u.value * v); - } -} diff --git a/sysdeps/ieee754/ldbl-128/ldbl2mpn.c b/sysdeps/ieee754/ldbl-128/ldbl2mpn.c deleted file mode 100644 index 1c79a5dbe5..0000000000 --- a/sysdeps/ieee754/ldbl-128/ldbl2mpn.c +++ /dev/null @@ -1,140 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" -#include -#include -#include -#include -#include - -/* Convert a `long double' in IEEE854 quad-precision format to a - multi-precision integer representing the significand scaled up by its - number of bits (113 for long double) and an integral power of two - (MPN frexpl). */ - -mp_size_t -__mpn_extract_long_double (mp_ptr res_ptr, mp_size_t size, - int *expt, int *is_neg, - _Float128 value) -{ - union ieee854_long_double u; - u.d = value; - - *is_neg = u.ieee.negative; - *expt = (int) u.ieee.exponent - IEEE854_LONG_DOUBLE_BIAS; - -#if BITS_PER_MP_LIMB == 32 - res_ptr[0] = u.ieee.mantissa3; /* Low-order 32 bits of fraction. */ - res_ptr[1] = u.ieee.mantissa2; - res_ptr[2] = u.ieee.mantissa1; - res_ptr[3] = u.ieee.mantissa0; /* High-order 32 bits. */ - #define N 4 -#elif BITS_PER_MP_LIMB == 64 - /* Hopefully the compiler will combine the two bitfield extracts - and this composition into just the original quadword extract. */ - res_ptr[0] = ((mp_limb_t) u.ieee.mantissa2 << 32) | u.ieee.mantissa3; - res_ptr[1] = ((mp_limb_t) u.ieee.mantissa0 << 32) | u.ieee.mantissa1; - #define N 2 -#else - #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" -#endif -/* The format does not fill the last limb. There are some zeros. */ -#define NUM_LEADING_ZEROS (BITS_PER_MP_LIMB \ - - (LDBL_MANT_DIG - ((N - 1) * BITS_PER_MP_LIMB))) - - if (u.ieee.exponent == 0) - { - /* A biased exponent of zero is a special case. - Either it is a zero or it is a denormal number. */ - if (res_ptr[0] == 0 && res_ptr[1] == 0 - && res_ptr[N - 2] == 0 && res_ptr[N - 1] == 0) /* Assumes N<=4. */ - /* It's zero. */ - *expt = 0; - else - { - /* It is a denormal number, meaning it has no implicit leading - one bit, and its exponent is in fact the format minimum. */ - int cnt; - -#if N == 2 - if (res_ptr[N - 1] != 0) - { - count_leading_zeros (cnt, res_ptr[N - 1]); - cnt -= NUM_LEADING_ZEROS; - res_ptr[N - 1] = res_ptr[N - 1] << cnt - | (res_ptr[0] >> (BITS_PER_MP_LIMB - cnt)); - res_ptr[0] <<= cnt; - *expt = LDBL_MIN_EXP - 1 - cnt; - } - else - { - count_leading_zeros (cnt, res_ptr[0]); - if (cnt >= NUM_LEADING_ZEROS) - { - res_ptr[N - 1] = res_ptr[0] << (cnt - NUM_LEADING_ZEROS); - res_ptr[0] = 0; - } - else - { - res_ptr[N - 1] = res_ptr[0] >> (NUM_LEADING_ZEROS - cnt); - res_ptr[0] <<= BITS_PER_MP_LIMB - (NUM_LEADING_ZEROS - cnt); - } - *expt = LDBL_MIN_EXP - 1 - - (BITS_PER_MP_LIMB - NUM_LEADING_ZEROS) - cnt; - } -#else - int j, k, l; - - for (j = N - 1; j > 0; j--) - if (res_ptr[j] != 0) - break; - - count_leading_zeros (cnt, res_ptr[j]); - cnt -= NUM_LEADING_ZEROS; - l = N - 1 - j; - if (cnt < 0) - { - cnt += BITS_PER_MP_LIMB; - l--; - } - if (!cnt) - for (k = N - 1; k >= l; k--) - res_ptr[k] = res_ptr[k-l]; - else - { - for (k = N - 1; k > l; k--) - res_ptr[k] = res_ptr[k-l] << cnt - | res_ptr[k-l-1] >> (BITS_PER_MP_LIMB - cnt); - res_ptr[k--] = res_ptr[0] << cnt; - } - - for (; k >= 0; k--) - res_ptr[k] = 0; - *expt = LDBL_MIN_EXP - 1 - l * BITS_PER_MP_LIMB - cnt; -#endif - } - } - else - /* Add the implicit leading one bit for a normalized number. */ - res_ptr[N - 1] |= (mp_limb_t) 1 << (LDBL_MANT_DIG - 1 - - ((N - 1) * BITS_PER_MP_LIMB)); - - return N; -} diff --git a/sysdeps/ieee754/ldbl-128/lgamma_negl.c b/sysdeps/ieee754/ldbl-128/lgamma_negl.c deleted file mode 100644 index 17dc4f5bfe..0000000000 --- a/sysdeps/ieee754/ldbl-128/lgamma_negl.c +++ /dev/null @@ -1,551 +0,0 @@ -/* lgammal expanding around zeros. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const _Float128 lgamma_zeros[][2] = - { - { L(-0x2.74ff92c01f0d82abec9f315f1a08p+0), L(0xe.d3ccb7fb2658634a2b9f6b2ba81p-116) }, - { L(-0x2.bf6821437b20197995a4b4641eaep+0), L(-0xb.f4b00b4829f961e428533e6ad048p-116) }, - { L(-0x3.24c1b793cb35efb8be699ad3d9bap+0), L(-0x6.5454cb7fac60e3f16d9d7840c2ep-116) }, - { L(-0x3.f48e2a8f85fca170d4561291236cp+0), L(-0xc.320a4887d1cb4c711828a75d5758p-116) }, - { L(-0x4.0a139e16656030c39f0b0de18114p+0), L(0x1.53e84029416e1242006b2b3d1cfp-112) }, - { L(-0x4.fdd5de9bbabf3510d0aa40769884p+0), L(-0x1.01d7d78125286f78d1e501f14966p-112) }, - { L(-0x5.021a95fc2db6432a4c56e595394cp+0), L(-0x1.ecc6af0430d4fe5746fa7233356fp-112) }, - { L(-0x5.ffa4bd647d0357dd4ed62cbd31ecp+0), L(-0x1.f8e3f8e5deba2d67dbd70dd96ce1p-112) }, - { L(-0x6.005ac9625f233b607c2d96d16384p+0), L(-0x1.cb86ac569340cf1e5f24df7aab7bp-112) }, - { L(-0x6.fff2fddae1bbff3d626b65c23fd4p+0), L(0x1.e0bfcff5c457ebcf4d3ad9674167p-112) }, - { L(-0x7.000cff7b7f87adf4482dcdb98784p+0), L(0x1.54d99e35a74d6407b80292df199fp-112) }, - { L(-0x7.fffe5fe05673c3ca9e82b522b0ccp+0), L(0x1.62d177c832e0eb42c2faffd1b145p-112) }, - { L(-0x8.0001a01459fc9f60cb3cec1cec88p+0), L(0x2.8998835ac7277f7bcef67c47f188p-112) }, - { L(-0x8.ffffd1c425e80ffc864e95749258p+0), L(-0x1.e7e20210e7f81cf781b44e9d2b02p-112) }, - { L(-0x9.00002e3bb47d86d6d843fedc352p+0), L(0x2.14852f613a16291751d2ab751f7ep-112) }, - { L(-0x9.fffffb606bdfdcd062ae77a50548p+0), L(0x3.962d1490cc2e8f031c7007eaa1ap-116) }, - { L(-0xa.0000049f93bb9927b45d95e1544p+0), L(-0x1.e03086db9146a9287bd4f2172d5ap-112) }, - { L(-0xa.ffffff9466e9f1b36dacd2adbd18p+0), L(-0xd.05a4e458062f3f95345a4d9c9b6p-116) }, - { L(-0xb.0000006b9915315d965a6ffea41p+0), L(0x1.b415c6fff233e7b7fdc3a094246fp-112) }, - { L(-0xb.fffffff7089387387de41acc3d4p+0), L(0x3.687427c6373bd74a10306e10a28ep-112) }, - { L(-0xc.00000008f76c7731567c0f0250fp+0), L(-0x3.87920df5675833859190eb128ef6p-112) }, - { L(-0xc.ffffffff4f6dcf617f97a5ffc758p+0), L(0x2.ab72d76f32eaee2d1a42ed515d3ap-116) }, - { L(-0xd.00000000b092309c06683dd1b9p+0), L(-0x3.e3700857a15c19ac5a611de9688ap-112) }, - { L(-0xd.fffffffff36345ab9e184a3e09dp+0), L(-0x1.176dc48e47f62d917973dd44e553p-112) }, - { L(-0xe.000000000c9cba545e94e75ec57p+0), L(-0x1.8f753e2501e757a17cf2ecbeeb89p-112) }, - { L(-0xe.ffffffffff28c060c6604ef3037p+0), L(-0x1.f89d37357c9e3dc17c6c6e63becap-112) }, - { L(-0xf.0000000000d73f9f399bd0e420f8p+0), L(-0x5.e9ee31b0b890744fc0e3fbc01048p-116) }, - { L(-0xf.fffffffffff28c060c6621f512e8p+0), L(0xd.1b2eec9d960bd9adc5be5f5fa5p-116) }, - { L(-0x1.000000000000d73f9f399da1424cp+4), L(0x6.c46e0e88305d2800f0e414c506a8p-116) }, - { L(-0x1.0ffffffffffff3569c47e7a93e1cp+4), L(-0x4.6a08a2e008a998ebabb8087efa2cp-112) }, - { L(-0x1.1000000000000ca963b818568887p+4), L(-0x6.ca5a3a64ec15db0a95caf2c9ffb4p-112) }, - { L(-0x1.1fffffffffffff4bec3ce234132dp+4), L(-0x8.b2b726187c841cb92cd5221e444p-116) }, - { L(-0x1.20000000000000b413c31dcbeca5p+4), L(0x3.c4d005344b6cd0e7231120294abcp-112) }, - { L(-0x1.2ffffffffffffff685b25cbf5f54p+4), L(-0x5.ced932e38485f7dd296b8fa41448p-112) }, - { L(-0x1.30000000000000097a4da340a0acp+4), L(0x7.e484e0e0ffe38d406ebebe112f88p-112) }, - { L(-0x1.3fffffffffffffff86af516ff7f7p+4), L(-0x6.bd67e720d57854502b7db75e1718p-112) }, - { L(-0x1.40000000000000007950ae900809p+4), L(0x6.bec33375cac025d9c073168c5d9p-112) }, - { L(-0x1.4ffffffffffffffffa391c4248c3p+4), L(0x5.c63022b62b5484ba346524db607p-112) }, - { L(-0x1.500000000000000005c6e3bdb73dp+4), L(-0x5.c62f55ed5322b2685c5e9a51e6a8p-112) }, - { L(-0x1.5fffffffffffffffffbcc71a492p+4), L(-0x1.eb5aeb96c74d7ad25e060528fb5p-112) }, - { L(-0x1.6000000000000000004338e5b6ep+4), L(0x1.eb5aec04b2f2eb663e4e3d8a018cp-112) }, - { L(-0x1.6ffffffffffffffffffd13c97d9dp+4), L(-0x3.8fcc4d08d6fe5aa56ab04307ce7ep-112) }, - { L(-0x1.70000000000000000002ec368263p+4), L(0x3.8fcc4d090cee2f5d0b69a99c353cp-112) }, - { L(-0x1.7fffffffffffffffffffe0d30fe7p+4), L(0x7.2f577cca4b4c8cb1dc14001ac5ecp-112) }, - { L(-0x1.800000000000000000001f2cf019p+4), L(-0x7.2f577cca4b3442e35f0040b3b9e8p-112) }, - { L(-0x1.8ffffffffffffffffffffec0c332p+4), L(-0x2.e9a0572b1bb5b95f346a92d67a6p-112) }, - { L(-0x1.90000000000000000000013f3ccep+4), L(0x2.e9a0572b1bb5c371ddb3561705ap-112) }, - { L(-0x1.9ffffffffffffffffffffff3b8bdp+4), L(-0x1.cad8d32e386fd783e97296d63dcbp-116) }, - { L(-0x1.a0000000000000000000000c4743p+4), L(0x1.cad8d32e386fd7c1ab8c1fe34c0ep-116) }, - { L(-0x1.afffffffffffffffffffffff8b95p+4), L(-0x3.8f48cc5737d5979c39db806c5406p-112) }, - { L(-0x1.b00000000000000000000000746bp+4), L(0x3.8f48cc5737d5979c3b3a6bda06f6p-112) }, - { L(-0x1.bffffffffffffffffffffffffbd8p+4), L(0x6.2898d42174dcf171470d8c8c6028p-112) }, - { L(-0x1.c000000000000000000000000428p+4), L(-0x6.2898d42174dcf171470d18ba412cp-112) }, - { L(-0x1.cfffffffffffffffffffffffffdbp+4), L(-0x4.c0ce9794ea50a839e311320bde94p-112) }, - { L(-0x1.d000000000000000000000000025p+4), L(0x4.c0ce9794ea50a839e311322f7cf8p-112) }, - { L(-0x1.dfffffffffffffffffffffffffffp+4), L(0x3.932c5047d60e60caded4c298a174p-112) }, - { L(-0x1.e000000000000000000000000001p+4), L(-0x3.932c5047d60e60caded4c298973ap-112) }, - { L(-0x1.fp+4), L(0xa.1a6973c1fade2170f7237d35fe3p-116) }, - { L(-0x1.fp+4), L(-0xa.1a6973c1fade2170f7237d35fe08p-116) }, - { L(-0x2p+4), L(0x5.0d34b9e0fd6f10b87b91be9aff1p-120) }, - { L(-0x2p+4), L(-0x5.0d34b9e0fd6f10b87b91be9aff0cp-120) }, - { L(-0x2.1p+4), L(0x2.73024a9ba1aa36a7059bff52e844p-124) }, - { L(-0x2.1p+4), L(-0x2.73024a9ba1aa36a7059bff52e844p-124) }, - { L(-0x2.2p+4), L(0x1.2710231c0fd7a13f8a2b4af9d6b7p-128) }, - { L(-0x2.2p+4), L(-0x1.2710231c0fd7a13f8a2b4af9d6b7p-128) }, - { L(-0x2.3p+4), L(0x8.6e2ce38b6c8f9419e3fad3f0312p-136) }, - { L(-0x2.3p+4), L(-0x8.6e2ce38b6c8f9419e3fad3f0312p-136) }, - { L(-0x2.4p+4), L(0x3.bf30652185952560d71a254e4eb8p-140) }, - { L(-0x2.4p+4), L(-0x3.bf30652185952560d71a254e4eb8p-140) }, - { L(-0x2.5p+4), L(0x1.9ec8d1c94e85af4c78b15c3d89d3p-144) }, - { L(-0x2.5p+4), L(-0x1.9ec8d1c94e85af4c78b15c3d89d3p-144) }, - { L(-0x2.6p+4), L(0xa.ea565ce061d57489e9b85276274p-152) }, - { L(-0x2.6p+4), L(-0xa.ea565ce061d57489e9b85276274p-152) }, - { L(-0x2.7p+4), L(0x4.7a6512692eb37804111dabad30ecp-156) }, - { L(-0x2.7p+4), L(-0x4.7a6512692eb37804111dabad30ecp-156) }, - { L(-0x2.8p+4), L(0x1.ca8ed42a12ae3001a07244abad2bp-160) }, - { L(-0x2.8p+4), L(-0x1.ca8ed42a12ae3001a07244abad2bp-160) }, - { L(-0x2.9p+4), L(0xb.2f30e1ce812063f12e7e8d8d96e8p-168) }, - { L(-0x2.9p+4), L(-0xb.2f30e1ce812063f12e7e8d8d96e8p-168) }, - { L(-0x2.ap+4), L(0x4.42bd49d4c37a0db136489772e428p-172) }, - { L(-0x2.ap+4), L(-0x4.42bd49d4c37a0db136489772e428p-172) }, - { L(-0x2.bp+4), L(0x1.95db45257e5122dcbae56def372p-176) }, - { L(-0x2.bp+4), L(-0x1.95db45257e5122dcbae56def372p-176) }, - { L(-0x2.cp+4), L(0x9.3958d81ff63527ecf993f3fb6f48p-184) }, - { L(-0x2.cp+4), L(-0x9.3958d81ff63527ecf993f3fb6f48p-184) }, - { L(-0x2.dp+4), L(0x3.47970e4440c8f1c058bd238c9958p-188) }, - { L(-0x2.dp+4), L(-0x3.47970e4440c8f1c058bd238c9958p-188) }, - { L(-0x2.ep+4), L(0x1.240804f65951062ca46e4f25c608p-192) }, - { L(-0x2.ep+4), L(-0x1.240804f65951062ca46e4f25c608p-192) }, - { L(-0x2.fp+4), L(0x6.36a382849fae6de2d15362d8a394p-200) }, - { L(-0x2.fp+4), L(-0x6.36a382849fae6de2d15362d8a394p-200) }, - { L(-0x3p+4), L(0x2.123680d6dfe4cf4b9b1bcb9d8bdcp-204) }, - { L(-0x3p+4), L(-0x2.123680d6dfe4cf4b9b1bcb9d8bdcp-204) }, - { L(-0x3.1p+4), L(0xa.d21786ff5842eca51fea0870919p-212) }, - { L(-0x3.1p+4), L(-0xa.d21786ff5842eca51fea0870919p-212) }, - { L(-0x3.2p+4), L(0x3.766dedc259af040be140a68a6c04p-216) }, - }; - -static const _Float128 e_hi = L(0x2.b7e151628aed2a6abf7158809cf4p+0); -static const _Float128 e_lo = L(0xf.3c762e7160f38b4da56a784d9048p-116); - - -/* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) in Stirling's - approximation to lgamma function. */ - -static const _Float128 lgamma_coeff[] = - { - L(0x1.5555555555555555555555555555p-4), - L(-0xb.60b60b60b60b60b60b60b60b60b8p-12), - L(0x3.4034034034034034034034034034p-12), - L(-0x2.7027027027027027027027027028p-12), - L(0x3.72a3c5631fe46ae1d4e700dca8f2p-12), - L(-0x7.daac36664f1f207daac36664f1f4p-12), - L(0x1.a41a41a41a41a41a41a41a41a41ap-8), - L(-0x7.90a1b2c3d4e5f708192a3b4c5d7p-8), - L(0x2.dfd2c703c0cfff430edfd2c703cp-4), - L(-0x1.6476701181f39edbdb9ce625987dp+0), - L(0xd.672219167002d3a7a9c886459cp+0), - L(-0x9.cd9292e6660d55b3f712eb9e07c8p+4), - L(0x8.911a740da740da740da740da741p+8), - L(-0x8.d0cc570e255bf59ff6eec24b49p+12), - L(0xa.8d1044d3708d1c219ee4fdc446ap+16), - L(-0xe.8844d8a169abbc406169abbc406p+20), - L(0x1.6d29a0f6433b79890cede62433b8p+28), - L(-0x2.88a233b3c8cddaba9809357125d8p+32), - L(0x5.0dde6f27500939a85c40939a85c4p+36), - L(-0xb.4005bde03d4642a243581714af68p+40), - L(0x1.bc8cd6f8f1f755c78753cdb5d5c9p+48), - L(-0x4.bbebb143bb94de5a0284fa7ec424p+52), - L(0xe.2e1337f5af0bed90b6b0a352d4fp+56), - L(-0x2.e78250162b62405ad3e4bfe61b38p+64), - L(0xa.5f7eef9e71ac7c80326ab4cc8bfp+68), - L(-0x2.83be0395e550213369924971b21ap+76), - L(0xa.8ebfe48da17dd999790760b0cep+80), - }; - -#define NCOEFF (sizeof (lgamma_coeff) / sizeof (lgamma_coeff[0])) - -/* Polynomial approximations to (|gamma(x)|-1)(x-n)/(x-x0), where n is - the integer end-point of the half-integer interval containing x and - x0 is the zero of lgamma in that half-integer interval. Each - polynomial is expressed in terms of x-xm, where xm is the midpoint - of the interval for which the polynomial applies. */ - -static const _Float128 poly_coeff[] = - { - /* Interval [-2.125, -2] (polynomial degree 23). */ - L(-0x1.0b71c5c54d42eb6c17f30b7aa8f5p+0), - L(-0xc.73a1dc05f34951602554c6d7506p-4), - L(-0x1.ec841408528b51473e6c425ee5ffp-4), - L(-0xe.37c9da26fc3c9a3c1844c8c7f1cp-4), - L(-0x1.03cd87c519305703b021fa33f827p-4), - L(-0xe.ae9ada65e09aa7f1c75216128f58p-4), - L(0x9.b11855a4864b5731cf85736015a8p-8), - L(-0xe.f28c133e697a95c28607c9701dep-4), - L(0x2.6ec14a1c586a72a7cc33ee569d6ap-4), - L(-0xf.57cab973e14464a262fc24723c38p-4), - L(0x4.5b0fc25f16e52997b2886bbae808p-4), - L(-0xf.f50e59f1a9b56e76e988dac9ccf8p-4), - L(0x6.5f5eae15e9a93369e1d85146c6fcp-4), - L(-0x1.0d2422daac459e33e0994325ed23p+0), - L(0x8.82000a0e7401fb1117a0e6606928p-4), - L(-0x1.1f492f178a3f1b19f58a2ca68e55p+0), - L(0xa.cb545f949899a04c160b19389abp-4), - L(-0x1.36165a1b155ba3db3d1b77caf498p+0), - L(0xd.44c5d5576f74302e5cf79e183eep-4), - L(-0x1.51f22e0cdd33d3d481e326c02f3ep+0), - L(0xf.f73a349c08244ac389c007779bfp-4), - L(-0x1.73317bf626156ba716747c4ca866p+0), - L(0x1.379c3c97b9bc71e1c1c4802dd657p+0), - L(-0x1.a72a351c54f902d483052000f5dfp+0), - /* Interval [-2.25, -2.125] (polynomial degree 24). */ - L(-0xf.2930890d7d675a80c36afb0fd5e8p-4), - L(-0xc.a5cfde054eab5c6770daeca577f8p-4), - L(0x3.9c9e0fdebb07cdf89c61d41c9238p-4), - L(-0x1.02a5ad35605fcf4af65a6dbacb84p+0), - L(0x9.6e9b1185bb48be9de1918e00a2e8p-4), - L(-0x1.4d8332f3cfbfa116fd611e9ce90dp+0), - L(0x1.1c0c8cb4d9f4b1d490e1a41fae4dp+0), - L(-0x1.c9a6f5ae9130cd0299e293a42714p+0), - L(0x1.d7e9307fd58a2ea997f29573a112p+0), - L(-0x2.921cb3473d96178ca2a11d2a8d46p+0), - L(0x2.e8d59113b6f3409ff8db226e9988p+0), - L(-0x3.cbab931625a1ae2b26756817f264p+0), - L(0x4.7d9f0f05d5296d18663ca003912p+0), - L(-0x5.ade9cba12a14ea485667b7135bbp+0), - L(0x6.dc983a5da74fb48e767b7fec0a3p+0), - L(-0x8.8d9ed454ae31d9e138dd8ee0d1a8p+0), - L(0xa.6fa099d4e7c202e0c0fd6ed8492p+0), - L(-0xc.ebc552a8090a0f0115e92d4ebbc8p+0), - L(0xf.d695e4772c0d829b53fba9ca5568p+0), - L(-0x1.38c32ae38e5e9eb79b2a4c5570a9p+4), - L(0x1.8035145646cfab49306d0999a51bp+4), - L(-0x1.d930adbb03dd342a4c2a8c4e1af6p+4), - L(0x2.45c2edb1b4943ddb3686cd9c6524p+4), - L(-0x2.e818ebbfafe2f916fa21abf7756p+4), - L(0x3.9804ce51d0fb9a430a711fd7307p+4), - /* Interval [-2.375, -2.25] (polynomial degree 25). */ - L(-0xd.7d28d505d6181218a25f31d5e45p-4), - L(-0xe.69649a3040985140cdf946829fap-4), - L(0xb.0d74a2827d053a8d44595012484p-4), - L(-0x1.924b0922853617cac181afbc08ddp+0), - L(0x1.d49b12bccf0a568582e2d3c410f3p+0), - L(-0x3.0898bb7d8c4093e636279c791244p+0), - L(0x4.207a6cac711cb53868e8a5057eep+0), - L(-0x6.39ee63ea4fb1dcab0c9144bf3ddcp+0), - L(0x8.e2e2556a797b649bf3f53bd26718p+0), - L(-0xd.0e83ac82552ef12af508589e7a8p+0), - L(0x1.2e4525e0ce6670563c6484a82b05p+4), - L(-0x1.b8e350d6a8f2b222fa390a57c23dp+4), - L(0x2.805cd69b919087d8a80295892c2cp+4), - L(-0x3.a42585424a1b7e64c71743ab014p+4), - L(0x5.4b4f409f98de49f7bfb03c05f984p+4), - L(-0x7.b3c5827fbe934bc820d6832fb9fcp+4), - L(0xb.33b7b90cc96c425526e0d0866e7p+4), - L(-0x1.04b77047ac4f59ee3775ca10df0dp+8), - L(0x1.7b366f5e94a34f41386eac086313p+8), - L(-0x2.2797338429385c9849ca6355bfc2p+8), - L(0x3.225273cf92a27c9aac1b35511256p+8), - L(-0x4.8f078aa48afe6cb3a4e89690f898p+8), - L(0x6.9f311d7b6654fc1d0b5195141d04p+8), - L(-0x9.a0c297b6b4621619ca9bacc48ed8p+8), - L(0xe.ce1f06b6f90d92138232a76e4cap+8), - L(-0x1.5b0e6806fa064daf011613e43b17p+12), - /* Interval [-2.5, -2.375] (polynomial degree 27). */ - L(-0xb.74ea1bcfff94b2c01afba9daa7d8p-4), - L(-0x1.2a82bd590c37538cab143308de4dp+0), - L(0x1.88020f828b966fec66b8649fd6fcp+0), - L(-0x3.32279f040eb694970e9db24863dcp+0), - L(0x5.57ac82517767e68a721005853864p+0), - L(-0x9.c2aedcfe22833de43834a0a6cc4p+0), - L(0x1.12c132f1f5577f99e1a0ed3538e1p+4), - L(-0x1.ea94e26628a3de3597f7bb55a948p+4), - L(0x3.66b4ac4fa582f58b59f96b2f7c7p+4), - L(-0x6.0cf746a9cf4cba8c39afcc73fc84p+4), - L(0xa.c102ef2c20d75a342197df7fedf8p+4), - L(-0x1.31ebff06e8f14626782df58db3b6p+8), - L(0x2.1fd6f0c0e710994e059b9dbdb1fep+8), - L(-0x3.c6d76040407f447f8b5074f07706p+8), - L(0x6.b6d18e0d8feb4c2ef5af6a40ed18p+8), - L(-0xb.efaf542c529f91e34217f24ae6a8p+8), - L(0x1.53852d873210e7070f5d9eb2296p+12), - L(-0x2.5b977c0ddc6d540717173ac29fc8p+12), - L(0x4.310d452ae05100eff1e02343a724p+12), - L(-0x7.73a5d8f20c4f986a7dd1912b2968p+12), - L(0xd.3f5ea2484f3fca15eab1f4d1a218p+12), - L(-0x1.78d18aac156d1d93a2ffe7e08d3fp+16), - L(0x2.9df49ca75e5b567f5ea3e47106cp+16), - L(-0x4.a7149af8961a08aa7c3233b5bb94p+16), - L(0x8.3db10ffa742c707c25197d989798p+16), - L(-0xe.a26d6dd023cadd02041a049ec368p+16), - L(0x1.c825d90514e7c57c7fa5316f947cp+20), - L(-0x3.34bb81e5a0952df8ca1abdc6684cp+20), - /* Interval [-2.625, -2.5] (polynomial degree 28). */ - L(-0x3.d10108c27ebafad533c20eac32bp-4), - L(0x1.cd557caff7d2b2085f41dbec5106p+0), - L(0x3.819b4856d399520dad9776ea2cacp+0), - L(0x6.8505cbad03dc34c5e42e8b12eb78p+0), - L(0xb.c1b2e653a9e38f82b399c94e7f08p+0), - L(0x1.50a53a38f148138105124df65419p+4), - L(0x2.57ae00cbe5232cbeeed34d89727ap+4), - L(0x4.2b156301b8604db85a601544bfp+4), - L(0x7.6989ed23ca3ca7579b3462592b5cp+4), - L(0xd.2dd2976557939517f831f5552cc8p+4), - L(0x1.76e1c3430eb860969bce40cd494p+8), - L(0x2.9a77bf5488742466db3a2c7c1ec6p+8), - L(0x4.a0d62ed7266e8eb36f725a8ebcep+8), - L(0x8.3a6184dd3021067df2f8b91e99c8p+8), - L(0xe.a0ade1538245bf55d39d7e436b1p+8), - L(0x1.a01359fae8617b5826dd74428e9p+12), - L(0x2.e3b0a32caae77251169acaca1ad4p+12), - L(0x5.2301257c81589f62b38fb5993ee8p+12), - L(0x9.21c9275db253d4e719b73b18cb9p+12), - L(0x1.03c104bc96141cda3f3fa4b112bcp+16), - L(0x1.cdc8ed65119196a08b0c78f1445p+16), - L(0x3.34f31d2eaacf34382cdb0073572ap+16), - L(0x5.b37628cadf12bf0000907d0ef294p+16), - L(0xa.22d8b332c0b1e6a616f425dfe5ap+16), - L(0x1.205b01444804c3ff922cd78b4c42p+20), - L(0x1.fe8f0cea9d1e0ff25be2470b4318p+20), - L(0x3.8872aebeb368399aee02b39340aep+20), - L(0x6.ebd560d351e84e26a4381f5b293cp+20), - L(0xc.c3644d094b0dae2fbcbf682cd428p+20), - /* Interval [-2.75, -2.625] (polynomial degree 26). */ - L(-0x6.b5d252a56e8a75458a27ed1c2dd4p-4), - L(0x1.28d60383da3ac721aed3c5794da9p+0), - L(0x1.db6513ada8a66ea77d87d9a8827bp+0), - L(0x2.e217118f9d348a27f7506a707e6ep+0), - L(0x4.450112c5cbf725a0fb9802396c9p+0), - L(0x6.4af99151eae7810a75df2a0303c4p+0), - L(0x9.2db598b4a97a7f69aeef32aec758p+0), - L(0xd.62bef9c22471f5ee47ea1b9c0b5p+0), - L(0x1.379f294e412bd62328326d4222f9p+4), - L(0x1.c5827349d8865f1e8825c37c31c6p+4), - L(0x2.93a7e7a75b7568cc8cbe8c016c12p+4), - L(0x3.bf9bb882afe57edb383d41879d3ap+4), - L(0x5.73c737828cee095c43a5566731c8p+4), - L(0x7.ee4653493a7f81e0442062b3823cp+4), - L(0xb.891c6b83fc8b55bd973b5d962d6p+4), - L(0x1.0c775d7de3bf9b246c0208e0207ep+8), - L(0x1.867ee43ec4bd4f4fd56abc05110ap+8), - L(0x2.37fe9ba6695821e9822d8c8af0a6p+8), - L(0x3.3a2c667e37c942f182cd3223a936p+8), - L(0x4.b1b500eb59f3f782c7ccec88754p+8), - L(0x6.d3efd3b65b3d0d8488d30b79fa4cp+8), - L(0x9.ee8224e65bed5ced8b75eaec609p+8), - L(0xe.72416e510cca77d53fc615c1f3dp+8), - L(0x1.4fb538b0a2dfe567a8904b7e0445p+12), - L(0x1.e7f56a9266cf525a5b8cf4cb76cep+12), - L(0x2.f0365c983f68c597ee49d099cce8p+12), - L(0x4.53aa229e1b9f5b5e59625265951p+12), - /* Interval [-2.875, -2.75] (polynomial degree 24). */ - L(-0x8.a41b1e4f36ff88dc820815607d68p-4), - L(0xc.da87d3b69dc0f2f9c6f368b8ca1p-4), - L(0x1.1474ad5c36158a7bea04fd2f98c6p+0), - L(0x1.761ecb90c555df6555b7dba955b6p+0), - L(0x1.d279bff9ae291caf6c4b4bcb3202p+0), - L(0x2.4e5d00559a6e2b9b5d7fe1f6689cp+0), - L(0x2.d57545a75cee8743ae2b17bc8d24p+0), - L(0x3.8514eee3aac88b89bec2307021bap+0), - L(0x4.5235e3b6e1891ffeb87fed9f8a24p+0), - L(0x5.562acdb10eef3c9a773b3e27a864p+0), - L(0x6.8ec8965c76efe03c26bff60b1194p+0), - L(0x8.15251aca144877af32658399f9b8p+0), - L(0x9.f08d56aba174d844138af782c0f8p+0), - L(0xc.3dbbeda2679e8a1346ccc3f6da88p+0), - L(0xf.0f5bfd5eacc26db308ffa0556fa8p+0), - L(0x1.28a6ccd84476fbc713d6bab49ac9p+4), - L(0x1.6d0a3ae2a3b1c8ff400641a3a21fp+4), - L(0x1.c15701b28637f87acfb6a91d33b5p+4), - L(0x2.28fbe0eccf472089b017651ca55ep+4), - L(0x2.a8a453004f6e8ffaacd1603bc3dp+4), - L(0x3.45ae4d9e1e7cd1a5dba0e4ec7f6cp+4), - L(0x4.065fbfacb7fad3e473cb577a61e8p+4), - L(0x4.f3d1473020927acac1944734a39p+4), - L(0x6.54bb091245815a36fb74e314dd18p+4), - L(0x7.d7f445129f7fb6c055e582d3f6ep+4), - /* Interval [-3, -2.875] (polynomial degree 23). */ - L(-0xa.046d667e468f3e44dcae1afcc648p-4), - L(0x9.70b88dcc006c214d8d996fdf5ccp-4), - L(0xa.a8a39421c86d3ff24931a0929fp-4), - L(0xd.2f4d1363f324da2b357c8b6ec94p-4), - L(0xd.ca9aa1a3a5c00de11bf60499a97p-4), - L(0xf.cf09c31eeb52a45dfa7ebe3778dp-4), - L(0x1.04b133a39ed8a09691205660468bp+0), - L(0x1.22b547a06edda944fcb12fd9b5ecp+0), - L(0x1.2c57fce7db86a91df09602d344b3p+0), - L(0x1.4aade4894708f84795212fe257eep+0), - L(0x1.579c8b7b67ec4afed5b28c8bf787p+0), - L(0x1.776820e7fc80ae5284239733078ap+0), - L(0x1.883ab28c7301fde4ca6b8ec26ec8p+0), - L(0x1.aa2ef6e1ae52eb42c9ee83b206e3p+0), - L(0x1.bf4ad50f0a9a9311300cf0c51ee7p+0), - L(0x1.e40206e0e96b1da463814dde0d09p+0), - L(0x1.fdcbcffef3a21b29719c2bd9feb1p+0), - L(0x2.25e2e8948939c4d42cf108fae4bep+0), - L(0x2.44ce14d2b59c1c0e6bf2cfa81018p+0), - L(0x2.70ee80bbd0387162be4861c43622p+0), - L(0x2.954b64d2c2ebf3489b949c74476p+0), - L(0x2.c616e133a811c1c9446105208656p+0), - L(0x3.05a69dfe1a9ba1079f90fcf26bd4p+0), - L(0x3.410d2ad16a0506de29736e6aafdap+0), - }; - -static const size_t poly_deg[] = - { - 23, - 24, - 25, - 27, - 28, - 26, - 24, - 23, - }; - -static const size_t poly_end[] = - { - 23, - 48, - 74, - 102, - 131, - 158, - 183, - 207, - }; - -/* Compute sin (pi * X) for -0.25 <= X <= 0.5. */ - -static _Float128 -lg_sinpi (_Float128 x) -{ - if (x <= L(0.25)) - return __sinl (M_PIl * x); - else - return __cosl (M_PIl * (L(0.5) - x)); -} - -/* Compute cos (pi * X) for -0.25 <= X <= 0.5. */ - -static _Float128 -lg_cospi (_Float128 x) -{ - if (x <= L(0.25)) - return __cosl (M_PIl * x); - else - return __sinl (M_PIl * (L(0.5) - x)); -} - -/* Compute cot (pi * X) for -0.25 <= X <= 0.5. */ - -static _Float128 -lg_cotpi (_Float128 x) -{ - return lg_cospi (x) / lg_sinpi (x); -} - -/* Compute lgamma of a negative argument -50 < X < -2, setting - *SIGNGAMP accordingly. */ - -_Float128 -__lgamma_negl (_Float128 x, int *signgamp) -{ - /* Determine the half-integer region X lies in, handle exact - integers and determine the sign of the result. */ - int i = __floorl (-2 * x); - if ((i & 1) == 0 && i == -2 * x) - return L(1.0) / L(0.0); - _Float128 xn = ((i & 1) == 0 ? -i / 2 : (-i - 1) / 2); - i -= 4; - *signgamp = ((i & 2) == 0 ? -1 : 1); - - SET_RESTORE_ROUNDL (FE_TONEAREST); - - /* Expand around the zero X0 = X0_HI + X0_LO. */ - _Float128 x0_hi = lgamma_zeros[i][0], x0_lo = lgamma_zeros[i][1]; - _Float128 xdiff = x - x0_hi - x0_lo; - - /* For arguments in the range -3 to -2, use polynomial - approximations to an adjusted version of the gamma function. */ - if (i < 2) - { - int j = __floorl (-8 * x) - 16; - _Float128 xm = (-33 - 2 * j) * L(0.0625); - _Float128 x_adj = x - xm; - size_t deg = poly_deg[j]; - size_t end = poly_end[j]; - _Float128 g = poly_coeff[end]; - for (size_t j = 1; j <= deg; j++) - g = g * x_adj + poly_coeff[end - j]; - return __log1pl (g * xdiff / (x - xn)); - } - - /* The result we want is log (sinpi (X0) / sinpi (X)) - + log (gamma (1 - X0) / gamma (1 - X)). */ - _Float128 x_idiff = fabsl (xn - x), x0_idiff = fabsl (xn - x0_hi - x0_lo); - _Float128 log_sinpi_ratio; - if (x0_idiff < x_idiff * L(0.5)) - /* Use log not log1p to avoid inaccuracy from log1p of arguments - close to -1. */ - log_sinpi_ratio = __ieee754_logl (lg_sinpi (x0_idiff) - / lg_sinpi (x_idiff)); - else - { - /* Use log1p not log to avoid inaccuracy from log of arguments - close to 1. X0DIFF2 has positive sign if X0 is further from - XN than X is from XN, negative sign otherwise. */ - _Float128 x0diff2 = ((i & 1) == 0 ? xdiff : -xdiff) * L(0.5); - _Float128 sx0d2 = lg_sinpi (x0diff2); - _Float128 cx0d2 = lg_cospi (x0diff2); - log_sinpi_ratio = __log1pl (2 * sx0d2 - * (-sx0d2 + cx0d2 * lg_cotpi (x_idiff))); - } - - _Float128 log_gamma_ratio; - _Float128 y0 = 1 - x0_hi; - _Float128 y0_eps = -x0_hi + (1 - y0) - x0_lo; - _Float128 y = 1 - x; - _Float128 y_eps = -x + (1 - y); - /* We now wish to compute LOG_GAMMA_RATIO - = log (gamma (Y0 + Y0_EPS) / gamma (Y + Y_EPS)). XDIFF - accurately approximates the difference Y0 + Y0_EPS - Y - - Y_EPS. Use Stirling's approximation. First, we may need to - adjust into the range where Stirling's approximation is - sufficiently accurate. */ - _Float128 log_gamma_adj = 0; - if (i < 20) - { - int n_up = (21 - i) / 2; - _Float128 ny0, ny0_eps, ny, ny_eps; - ny0 = y0 + n_up; - ny0_eps = y0 - (ny0 - n_up) + y0_eps; - y0 = ny0; - y0_eps = ny0_eps; - ny = y + n_up; - ny_eps = y - (ny - n_up) + y_eps; - y = ny; - y_eps = ny_eps; - _Float128 prodm1 = __lgamma_productl (xdiff, y - n_up, y_eps, n_up); - log_gamma_adj = -__log1pl (prodm1); - } - _Float128 log_gamma_high - = (xdiff * __log1pl ((y0 - e_hi - e_lo + y0_eps) / e_hi) - + (y - L(0.5) + y_eps) * __log1pl (xdiff / y) + log_gamma_adj); - /* Compute the sum of (B_2k / 2k(2k-1))(Y0^-(2k-1) - Y^-(2k-1)). */ - _Float128 y0r = 1 / y0, yr = 1 / y; - _Float128 y0r2 = y0r * y0r, yr2 = yr * yr; - _Float128 rdiff = -xdiff / (y * y0); - _Float128 bterm[NCOEFF]; - _Float128 dlast = rdiff, elast = rdiff * yr * (yr + y0r); - bterm[0] = dlast * lgamma_coeff[0]; - for (size_t j = 1; j < NCOEFF; j++) - { - _Float128 dnext = dlast * y0r2 + elast; - _Float128 enext = elast * yr2; - bterm[j] = dnext * lgamma_coeff[j]; - dlast = dnext; - elast = enext; - } - _Float128 log_gamma_low = 0; - for (size_t j = 0; j < NCOEFF; j++) - log_gamma_low += bterm[NCOEFF - 1 - j]; - log_gamma_ratio = log_gamma_high + log_gamma_low; - - return log_sinpi_ratio + log_gamma_ratio; -} diff --git a/sysdeps/ieee754/ldbl-128/lgamma_productl.c b/sysdeps/ieee754/ldbl-128/lgamma_productl.c deleted file mode 100644 index 212c26a960..0000000000 --- a/sysdeps/ieee754/ldbl-128/lgamma_productl.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Compute a product of 1 + (T/X), 1 + (T/(X+1)), .... - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Compute the product of 1 + (T / (X + X_EPS)), 1 + (T / (X + X_EPS + - 1)), ..., 1 + (T / (X + X_EPS + N - 1)), minus 1. X is such that - all the values X + 1, ..., X + N - 1 are exactly representable, and - X_EPS / X is small enough that factors quadratic in it can be - neglected. */ - -_Float128 -__lgamma_productl (_Float128 t, _Float128 x, _Float128 x_eps, int n) -{ - _Float128 ret = 0, ret_eps = 0; - for (int i = 0; i < n; i++) - { - _Float128 xi = x + i; - _Float128 quot = t / xi; - _Float128 mhi, mlo; - mul_splitl (&mhi, &mlo, quot, xi); - _Float128 quot_lo = (t - mhi - mlo) / xi - t * x_eps / (xi * xi); - /* We want (1 + RET + RET_EPS) * (1 + QUOT + QUOT_LO) - 1. */ - _Float128 rhi, rlo; - mul_splitl (&rhi, &rlo, ret, quot); - _Float128 rpq = ret + quot; - _Float128 rpq_eps = (ret - rpq) + quot; - _Float128 nret = rpq + rhi; - _Float128 nret_eps = (rpq - nret) + rhi; - ret_eps += (rpq_eps + nret_eps + rlo + ret_eps * quot - + quot_lo + quot_lo * (ret + ret_eps)); - ret = nret; - } - return ret + ret_eps; -} diff --git a/sysdeps/ieee754/ldbl-128/math_ldbl.h b/sysdeps/ieee754/ldbl-128/math_ldbl.h deleted file mode 100644 index bb5cce2a36..0000000000 --- a/sysdeps/ieee754/ldbl-128/math_ldbl.h +++ /dev/null @@ -1,120 +0,0 @@ -/* Manipulation of the bit representation of 'long double' quantities. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_LDBL_H_ -#define _MATH_LDBL_H_ 1 - -#include -#include - -/* A union which permits us to convert between a long double and - four 32 bit ints or two 64 bit ints. */ - -#if __FLOAT_WORD_ORDER == __BIG_ENDIAN - -typedef union -{ - long double value; - struct - { - uint64_t msw; - uint64_t lsw; - } parts64; - struct - { - uint32_t w0, w1, w2, w3; - } parts32; -} ieee854_long_double_shape_type; - -#endif - -#if __FLOAT_WORD_ORDER == __LITTLE_ENDIAN - -typedef union -{ - long double value; - struct - { - uint64_t lsw; - uint64_t msw; - } parts64; - struct - { - uint32_t w3, w2, w1, w0; - } parts32; -} ieee854_long_double_shape_type; - -#endif - -/* Get two 64 bit ints from a long double. */ - -#define GET_LDOUBLE_WORDS64(ix0,ix1,d) \ -do { \ - ieee854_long_double_shape_type qw_u; \ - qw_u.value = (d); \ - (ix0) = qw_u.parts64.msw; \ - (ix1) = qw_u.parts64.lsw; \ -} while (0) - -/* Set a long double from two 64 bit ints. */ - -#define SET_LDOUBLE_WORDS64(d,ix0,ix1) \ -do { \ - ieee854_long_double_shape_type qw_u; \ - qw_u.parts64.msw = (ix0); \ - qw_u.parts64.lsw = (ix1); \ - (d) = qw_u.value; \ -} while (0) - -/* Get the more significant 64 bits of a long double mantissa. */ - -#define GET_LDOUBLE_MSW64(v,d) \ -do { \ - ieee854_long_double_shape_type sh_u; \ - sh_u.value = (d); \ - (v) = sh_u.parts64.msw; \ -} while (0) - -/* Set the more significant 64 bits of a long double mantissa from an int. */ - -#define SET_LDOUBLE_MSW64(d,v) \ -do { \ - ieee854_long_double_shape_type sh_u; \ - sh_u.value = (d); \ - sh_u.parts64.msw = (v); \ - (d) = sh_u.value; \ -} while (0) - -/* Get the least significant 64 bits of a long double mantissa. */ - -#define GET_LDOUBLE_LSW64(v,d) \ -do { \ - ieee854_long_double_shape_type sh_u; \ - sh_u.value = (d); \ - (v) = sh_u.parts64.lsw; \ -} while (0) - -/* - On a platform already supporting a binary128 long double, - _Float128 will alias to long double. This transformation - makes aliasing *l functions to *f128 trivial. -*/ -#define _Float128 long double -#define L(x) x##L - -#endif /* math_ldbl.h */ diff --git a/sysdeps/ieee754/ldbl-128/mpn2ldbl.c b/sysdeps/ieee754/ldbl-128/mpn2ldbl.c deleted file mode 100644 index 625186fdc2..0000000000 --- a/sysdeps/ieee754/ldbl-128/mpn2ldbl.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "gmp.h" -#include "gmp-impl.h" -#include -#include -#include - -/* Convert a multi-precision integer of the needed number of bits (113 for - long double) and an integral power of two to a `long double' in IEEE854 - quad-precision format. */ - -long double -__mpn_construct_long_double (mp_srcptr frac_ptr, int expt, int sign) -{ - union ieee854_long_double u; - - u.ieee.negative = sign; - u.ieee.exponent = expt + IEEE854_LONG_DOUBLE_BIAS; -#if BITS_PER_MP_LIMB == 32 - u.ieee.mantissa3 = frac_ptr[0]; - u.ieee.mantissa2 = frac_ptr[1]; - u.ieee.mantissa1 = frac_ptr[2]; - u.ieee.mantissa0 = frac_ptr[3] & (((mp_limb_t) 1 - << (LDBL_MANT_DIG - 96)) - 1); -#elif BITS_PER_MP_LIMB == 64 - u.ieee.mantissa3 = frac_ptr[0] & (((mp_limb_t) 1 << 32) - 1); - u.ieee.mantissa2 = frac_ptr[0] >> 32; - u.ieee.mantissa1 = frac_ptr[1] & (((mp_limb_t) 1 << 32) - 1); - u.ieee.mantissa0 = (frac_ptr[1] >> 32) & (((mp_limb_t) 1 - << (LDBL_MANT_DIG - 96)) - 1); -#else - #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" -#endif - - return u.d; -} diff --git a/sysdeps/ieee754/ldbl-128/printf_fphex.c b/sysdeps/ieee754/ldbl-128/printf_fphex.c deleted file mode 100644 index 294464ecff..0000000000 --- a/sysdeps/ieee754/ldbl-128/printf_fphex.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Print floating point number in hexadecimal notation according to - ISO C99. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define PRINT_FPHEX_LONG_DOUBLE \ - PRINT_FPHEX (long double, fpnum.ldbl, ieee854_long_double, \ - IEEE854_LONG_DOUBLE_BIAS) - -#include diff --git a/sysdeps/ieee754/ldbl-128/printf_fphex_macros.h b/sysdeps/ieee754/ldbl-128/printf_fphex_macros.h deleted file mode 100644 index 86681c4c1e..0000000000 --- a/sysdeps/ieee754/ldbl-128/printf_fphex_macros.h +++ /dev/null @@ -1,104 +0,0 @@ -/* Macro to print floating point numbers in hexadecimal notation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define PRINT_FPHEX(FLOAT, VAR, IEEE854_UNION, IEEE854_BIAS) \ -do { \ - /* We have 112 bits of mantissa plus one implicit digit. Since \ - 112 bits are representable without rest using hexadecimal \ - digits we use only the implicit digits for the number before \ - the decimal point. */ \ - unsigned long long int num0, num1; \ - union IEEE854_UNION u; \ - u.d = VAR; \ - \ - assert (sizeof (FLOAT) == 16); \ - \ - num0 = (((unsigned long long int) u.ieee.mantissa0) << 32 \ - | u.ieee.mantissa1); \ - num1 = (((unsigned long long int) u.ieee.mantissa2) << 32 \ - | u.ieee.mantissa3); \ - \ - zero_mantissa = (num0|num1) == 0; \ - \ - if (sizeof (unsigned long int) > 6) \ - { \ - numstr = _itoa_word (num1, numbuf + sizeof numbuf, 16, \ - info->spec == 'A'); \ - wnumstr = _itowa_word (num1, \ - wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t),\ - 16, info->spec == 'A'); \ - } \ - else \ - { \ - numstr = _itoa (num1, numbuf + sizeof numbuf, 16, \ - info->spec == 'A'); \ - wnumstr = _itowa (num1, \ - wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t), \ - 16, info->spec == 'A'); \ - } \ - \ - while (numstr > numbuf + (sizeof numbuf - 64 / 4)) \ - { \ - *--numstr = '0'; \ - *--wnumstr = L'0'; \ - } \ - \ - if (sizeof (unsigned long int) > 6) \ - { \ - numstr = _itoa_word (num0, numstr, 16, info->spec == 'A'); \ - wnumstr = _itowa_word (num0, wnumstr, 16, info->spec == 'A'); \ - } \ - else \ - { \ - numstr = _itoa (num0, numstr, 16, info->spec == 'A'); \ - wnumstr = _itowa (num0, wnumstr, 16, info->spec == 'A'); \ - } \ - \ - /* Fill with zeroes. */ \ - while (numstr > numbuf + (sizeof numbuf - 112 / 4)) \ - { \ - *--numstr = '0'; \ - *--wnumstr = L'0'; \ - } \ - \ - leading = u.ieee.exponent == 0 ? '0' : '1'; \ - \ - exponent = u.ieee.exponent; \ - \ - if (exponent == 0) \ - { \ - if (zero_mantissa) \ - expnegative = 0; \ - else \ - { \ - /* This is a denormalized number. */ \ - expnegative = 1; \ - exponent = IEEE854_BIAS - 1; \ - } \ - } \ - else if (exponent >= IEEE854_BIAS) \ - { \ - expnegative = 0; \ - exponent -= IEEE854_BIAS; \ - } \ - else \ - { \ - expnegative = 1; \ - exponent = -(exponent - IEEE854_BIAS); \ - } \ -} while (0) diff --git a/sysdeps/ieee754/ldbl-128/s_asinhl.c b/sysdeps/ieee754/ldbl-128/s_asinhl.c deleted file mode 100644 index 83efb34447..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_asinhl.c +++ /dev/null @@ -1,79 +0,0 @@ -/* s_asinhl.c -- long double version of s_asinh.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* asinhl(x) - * Method : - * Based on - * asinhl(x) = signl(x) * logl [ |x| + sqrtl(x*x+1) ] - * we have - * asinhl(x) := x if 1+x*x=1, - * := signl(x)*(logl(x)+ln2)) for large |x|, else - * := signl(x)*logl(2|x|+1/(|x|+sqrtl(x*x+1))) if|x|>2, else - * := signl(x)*log1pl(|x| + x^2/(1 + sqrtl(1+x^2))) - */ - -#include -#include -#include - -static const _Float128 - one = 1, - ln2 = L(6.931471805599453094172321214581765681e-1), - huge = L(1.0e+4900); - -_Float128 -__asinhl (_Float128 x) -{ - _Float128 t, w; - int32_t ix, sign; - ieee854_long_double_shape_type u; - - u.value = x; - sign = u.parts32.w0; - ix = sign & 0x7fffffff; - if (ix == 0x7fff0000) - return x + x; /* x is inf or NaN */ - if (ix < 0x3fc70000) - { /* |x| < 2^ -56 */ - math_check_force_underflow (x); - if (huge + x > one) - return x; /* return x inexact except 0 */ - } - u.parts32.w0 = ix; - if (ix > 0x40350000) - { /* |x| > 2 ^ 54 */ - w = __ieee754_logl (u.value) + ln2; - } - else if (ix >0x40000000) - { /* 2^ 54 > |x| > 2.0 */ - t = u.value; - w = __ieee754_logl (2.0 * t + one / (__ieee754_sqrtl (x * x + one) + t)); - } - else - { /* 2.0 > |x| > 2 ^ -56 */ - t = x * x; - w = __log1pl (u.value + t / (one + __ieee754_sqrtl (one + t))); - } - if (sign & 0x80000000) - return -w; - else - return w; -} -weak_alias (__asinhl, asinhl) diff --git a/sysdeps/ieee754/ldbl-128/s_atanl.c b/sysdeps/ieee754/ldbl-128/s_atanl.c deleted file mode 100644 index 6f2cd549ec..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_atanl.c +++ /dev/null @@ -1,253 +0,0 @@ -/* s_atanl.c - * - * Inverse circular tangent for 128-bit long double precision - * (arctangent) - * - * - * - * SYNOPSIS: - * - * long double x, y, atanl(); - * - * y = atanl( x ); - * - * - * - * DESCRIPTION: - * - * Returns radian angle between -pi/2 and +pi/2 whose tangent is x. - * - * The function uses a rational approximation of the form - * t + t^3 P(t^2)/Q(t^2), optimized for |t| < 0.09375. - * - * The argument is reduced using the identity - * arctan x - arctan u = arctan ((x-u)/(1 + ux)) - * and an 83-entry lookup table for arctan u, with u = 0, 1/8, ..., 10.25. - * Use of the table improves the execution speed of the routine. - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -19, 19 4e5 1.7e-34 5.4e-35 - * - * - * WARNING: - * - * This program uses integer operations on bit fields of floating-point - * numbers. It does not work with data structures other than the - * structure assumed. - * - */ - -/* Copyright 2001 by Stephen L. Moshier - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - - -#include -#include -#include - -/* arctan(k/8), k = 0, ..., 82 */ -static const _Float128 atantbl[84] = { - L(0.0000000000000000000000000000000000000000E0), - L(1.2435499454676143503135484916387102557317E-1), /* arctan(0.125) */ - L(2.4497866312686415417208248121127581091414E-1), - L(3.5877067027057222039592006392646049977698E-1), - L(4.6364760900080611621425623146121440202854E-1), - L(5.5859931534356243597150821640166127034645E-1), - L(6.4350110879328438680280922871732263804151E-1), - L(7.1882999962162450541701415152590465395142E-1), - L(7.8539816339744830961566084581987572104929E-1), - L(8.4415398611317100251784414827164750652594E-1), - L(8.9605538457134395617480071802993782702458E-1), - L(9.4200004037946366473793717053459358607166E-1), - L(9.8279372324732906798571061101466601449688E-1), - L(1.0191413442663497346383429170230636487744E0), - L(1.0516502125483736674598673120862998296302E0), - L(1.0808390005411683108871567292171998202703E0), - L(1.1071487177940905030170654601785370400700E0), - L(1.1309537439791604464709335155363278047493E0), - L(1.1525719972156675180401498626127513797495E0), - L(1.1722738811284763866005949441337046149712E0), - L(1.1902899496825317329277337748293183376012E0), - L(1.2068173702852525303955115800565576303133E0), - L(1.2220253232109896370417417439225704908830E0), - L(1.2360594894780819419094519711090786987027E0), - L(1.2490457723982544258299170772810901230778E0), - L(1.2610933822524404193139408812473357720101E0), - L(1.2722973952087173412961937498224804940684E0), - L(1.2827408797442707473628852511364955306249E0), - L(1.2924966677897852679030914214070816845853E0), - L(1.3016288340091961438047858503666855921414E0), - L(1.3101939350475556342564376891719053122733E0), - L(1.3182420510168370498593302023271362531155E0), - L(1.3258176636680324650592392104284756311844E0), - L(1.3329603993374458675538498697331558093700E0), - L(1.3397056595989995393283037525895557411039E0), - L(1.3460851583802539310489409282517796256512E0), - L(1.3521273809209546571891479413898128509842E0), - L(1.3578579772154994751124898859640585287459E0), - L(1.3633001003596939542892985278250991189943E0), - L(1.3684746984165928776366381936948529556191E0), - L(1.3734007669450158608612719264449611486510E0), - L(1.3780955681325110444536609641291551522494E0), - L(1.3825748214901258580599674177685685125566E0), - L(1.3868528702577214543289381097042486034883E0), - L(1.3909428270024183486427686943836432060856E0), - L(1.3948567013423687823948122092044222644895E0), - L(1.3986055122719575950126700816114282335732E0), - L(1.4021993871854670105330304794336492676944E0), - L(1.4056476493802697809521934019958079881002E0), - L(1.4089588955564736949699075250792569287156E0), - L(1.4121410646084952153676136718584891599630E0), - L(1.4152014988178669079462550975833894394929E0), - L(1.4181469983996314594038603039700989523716E0), - L(1.4209838702219992566633046424614466661176E0), - L(1.4237179714064941189018190466107297503086E0), - L(1.4263547484202526397918060597281265695725E0), - L(1.4288992721907326964184700745371983590908E0), - L(1.4313562697035588982240194668401779312122E0), - L(1.4337301524847089866404719096698873648610E0), - L(1.4360250423171655234964275337155008780675E0), - L(1.4382447944982225979614042479354815855386E0), - L(1.4403930189057632173997301031392126865694E0), - L(1.4424730991091018200252920599377292525125E0), - L(1.4444882097316563655148453598508037025938E0), - L(1.4464413322481351841999668424758804165254E0), - L(1.4483352693775551917970437843145232637695E0), - L(1.4501726582147939000905940595923466567576E0), - L(1.4519559822271314199339700039142990228105E0), - L(1.4536875822280323362423034480994649820285E0), - L(1.4553696664279718992423082296859928222270E0), - L(1.4570043196511885530074841089245667532358E0), - L(1.4585935117976422128825857356750737658039E0), - L(1.4601391056210009726721818194296893361233E0), - L(1.4616428638860188872060496086383008594310E0), - L(1.4631064559620759326975975316301202111560E0), - L(1.4645314639038178118428450961503371619177E0), - L(1.4659193880646627234129855241049975398470E0), - L(1.4672716522843522691530527207287398276197E0), - L(1.4685896086876430842559640450619880951144E0), - L(1.4698745421276027686510391411132998919794E0), - L(1.4711276743037345918528755717617308518553E0), - L(1.4723501675822635384916444186631899205983E0), - L(1.4735431285433308455179928682541563973416E0), /* arctan(10.25) */ - L(1.5707963267948966192313216916397514420986E0) /* pi/2 */ -}; - - -/* arctan t = t + t^3 p(t^2) / q(t^2) - |t| <= 0.09375 - peak relative error 5.3e-37 */ - -static const _Float128 - p0 = L(-4.283708356338736809269381409828726405572E1), - p1 = L(-8.636132499244548540964557273544599863825E1), - p2 = L(-5.713554848244551350855604111031839613216E1), - p3 = L(-1.371405711877433266573835355036413750118E1), - p4 = L(-8.638214309119210906997318946650189640184E-1), - q0 = L(1.285112506901621042780814422948906537959E2), - q1 = L(3.361907253914337187957855834229672347089E2), - q2 = L(3.180448303864130128268191635189365331680E2), - q3 = L(1.307244136980865800160844625025280344686E2), - q4 = L(2.173623741810414221251136181221172551416E1); - /* q5 = 1.000000000000000000000000000000000000000E0 */ - -static const _Float128 huge = L(1.0e4930); - -_Float128 -__atanl (_Float128 x) -{ - int k, sign; - _Float128 t, u, p, q; - ieee854_long_double_shape_type s; - - s.value = x; - k = s.parts32.w0; - if (k & 0x80000000) - sign = 1; - else - sign = 0; - - /* Check for IEEE special cases. */ - k &= 0x7fffffff; - if (k >= 0x7fff0000) - { - /* NaN. */ - if ((k & 0xffff) | s.parts32.w1 | s.parts32.w2 | s.parts32.w3) - return (x + x); - - /* Infinity. */ - if (sign) - return -atantbl[83]; - else - return atantbl[83]; - } - - if (k <= 0x3fc50000) /* |x| < 2**-58 */ - { - math_check_force_underflow (x); - /* Raise inexact. */ - if (huge + x > 0.0) - return x; - } - - if (k >= 0x40720000) /* |x| > 2**115 */ - { - /* Saturate result to {-,+}pi/2 */ - if (sign) - return -atantbl[83]; - else - return atantbl[83]; - } - - if (sign) - x = -x; - - if (k >= 0x40024800) /* 10.25 */ - { - k = 83; - t = -1.0/x; - } - else - { - /* Index of nearest table element. - Roundoff to integer is asymmetrical to avoid cancellation when t < 0 - (cf. fdlibm). */ - k = 8.0 * x + 0.25; - u = L(0.125) * k; - /* Small arctan argument. */ - t = (x - u) / (1.0 + x * u); - } - - /* Arctan of small argument t. */ - u = t * t; - p = ((((p4 * u) + p3) * u + p2) * u + p1) * u + p0; - q = ((((u + q4) * u + q3) * u + q2) * u + q1) * u + q0; - u = t * u * p / q + t; - - /* arctan x = arctan u + arctan t */ - u = atantbl[k] + u; - if (sign) - return (-u); - else - return u; -} - -weak_alias (__atanl, atanl) diff --git a/sysdeps/ieee754/ldbl-128/s_cbrtl.c b/sysdeps/ieee754/ldbl-128/s_cbrtl.c deleted file mode 100644 index eb88d29fc9..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_cbrtl.c +++ /dev/null @@ -1,135 +0,0 @@ -/* cbrtl.c - * - * Cube root, long double precision - * - * - * - * SYNOPSIS: - * - * long double x, y, cbrtl(); - * - * y = cbrtl( x ); - * - * - * - * DESCRIPTION: - * - * Returns the cube root of the argument, which may be negative. - * - * Range reduction involves determining the power of 2 of - * the argument. A polynomial of degree 2 applied to the - * mantissa, and multiplication by the cube root of 1, 2, or 4 - * approximates the root to within about 0.1%. Then Newton's - * iteration is used three times to converge to an accurate - * result. - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -8,8 100000 1.3e-34 3.9e-35 - * IEEE exp(+-707) 100000 1.3e-34 4.3e-35 - * - */ - -/* -Cephes Math Library Release 2.2: January, 1991 -Copyright 1984, 1991 by Stephen L. Moshier -Adapted for glibc October, 2001. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - - -#include -#include - -static const _Float128 CBRT2 = L(1.259921049894873164767210607278228350570251); -static const _Float128 CBRT4 = L(1.587401051968199474751705639272308260391493); -static const _Float128 CBRT2I = L(0.7937005259840997373758528196361541301957467); -static const _Float128 CBRT4I = L(0.6299605249474365823836053036391141752851257); - - -_Float128 -__cbrtl (_Float128 x) -{ - int e, rem, sign; - _Float128 z; - - if (!isfinite (x)) - return x + x; - - if (x == 0) - return (x); - - if (x > 0) - sign = 1; - else - { - sign = -1; - x = -x; - } - - z = x; - /* extract power of 2, leaving mantissa between 0.5 and 1 */ - x = __frexpl (x, &e); - - /* Approximate cube root of number between .5 and 1, - peak relative error = 1.2e-6 */ - x = ((((L(1.3584464340920900529734e-1) * x - - L(6.3986917220457538402318e-1)) * x - + L(1.2875551670318751538055e0)) * x - - L(1.4897083391357284957891e0)) * x - + L(1.3304961236013647092521e0)) * x + L(3.7568280825958912391243e-1); - - /* exponent divided by 3 */ - if (e >= 0) - { - rem = e; - e /= 3; - rem -= 3 * e; - if (rem == 1) - x *= CBRT2; - else if (rem == 2) - x *= CBRT4; - } - else - { /* argument less than 1 */ - e = -e; - rem = e; - e /= 3; - rem -= 3 * e; - if (rem == 1) - x *= CBRT2I; - else if (rem == 2) - x *= CBRT4I; - e = -e; - } - - /* multiply by power of 2 */ - x = __ldexpl (x, e); - - /* Newton iteration */ - x -= (x - (z / (x * x))) * L(0.3333333333333333333333333333333333333333); - x -= (x - (z / (x * x))) * L(0.3333333333333333333333333333333333333333); - x -= (x - (z / (x * x))) * L(0.3333333333333333333333333333333333333333); - - if (sign < 0) - x = -x; - return (x); -} - -weak_alias (__cbrtl, cbrtl) diff --git a/sysdeps/ieee754/ldbl-128/s_ceill.c b/sysdeps/ieee754/ldbl-128/s_ceill.c deleted file mode 100644 index 8034795072..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_ceill.c +++ /dev/null @@ -1,66 +0,0 @@ -/* s_ceill.c -- long double version of s_ceil.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * ceill(x) - * Return x rounded toward -inf to integral value - * Method: - * Bit twiddling. - */ - -#include -#include - -_Float128 __ceill(_Float128 x) -{ - int64_t i0,i1,j0; - u_int64_t i,j; - GET_LDOUBLE_WORDS64(i0,i1,x); - j0 = ((i0>>48)&0x7fff)-0x3fff; - if(j0<48) { - if(j0<0) { - /* return 0*sign(x) if |x|<1 */ - if(i0<0) {i0=0x8000000000000000ULL;i1=0;} - else if((i0|i1)!=0) { i0=0x3fff000000000000ULL;i1=0;} - } else { - i = (0x0000ffffffffffffULL)>>j0; - if(((i0&i)|i1)==0) return x; /* x is integral */ - if(i0>0) i0 += (0x0001000000000000LL)>>j0; - i0 &= (~i); i1=0; - } - } else if (j0>111) { - if(j0==0x4000) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } else { - i = -1ULL>>(j0-48); - if((i1&i)==0) return x; /* x is integral */ - if(i0>0) { - if(j0==48) i0+=1; - else { - j = i1+(1LL<<(112-j0)); - if(j -#include - -_Float128 __copysignl(_Float128 x, _Float128 y) -{ - u_int64_t hx,hy; - GET_LDOUBLE_MSW64(hx,x); - GET_LDOUBLE_MSW64(hy,y); - SET_LDOUBLE_MSW64(x,(hx&0x7fffffffffffffffULL) - |(hy&0x8000000000000000ULL)); - return x; -} -weak_alias (__copysignl, copysignl) diff --git a/sysdeps/ieee754/ldbl-128/s_cosl.c b/sysdeps/ieee754/ldbl-128/s_cosl.c deleted file mode 100644 index ed3e77d0db..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_cosl.c +++ /dev/null @@ -1,86 +0,0 @@ -/* s_cosl.c -- long double version of s_cos.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* cosl(x) - * Return cosine function of x. - * - * kernel function: - * __kernel_sinl ... sine function on [-pi/4,pi/4] - * __kernel_cosl ... cosine function on [-pi/4,pi/4] - * __ieee754_rem_pio2l ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include -#include -#include - -_Float128 __cosl(_Float128 x) -{ - _Float128 y[2],z=0; - int64_t n, ix; - - /* High word of x. */ - GET_LDOUBLE_MSW64(ix,x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffffffffffffLL; - if(ix <= 0x3ffe921fb54442d1LL) - return __kernel_cosl(x,z); - - /* cos(Inf or NaN) is NaN */ - else if (ix>=0x7fff000000000000LL) { - if (ix == 0x7fff000000000000LL) { - GET_LDOUBLE_LSW64(n,x); - if (n == 0) - __set_errno (EDOM); - } - return x-x; - } - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2l(x,y); - switch(n&3) { - case 0: return __kernel_cosl(y[0],y[1]); - case 1: return -__kernel_sinl(y[0],y[1],1); - case 2: return -__kernel_cosl(y[0],y[1]); - default: - return __kernel_sinl(y[0],y[1],1); - } - } -} -weak_alias (__cosl, cosl) diff --git a/sysdeps/ieee754/ldbl-128/s_erfl.c b/sysdeps/ieee754/ldbl-128/s_erfl.c deleted file mode 100644 index e5dfae9636..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_erfl.c +++ /dev/null @@ -1,948 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Modifications and expansions for 128-bit long double are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* double erf(double x) - * double erfc(double x) - * x - * 2 |\ - * erf(x) = --------- | exp(-t*t)dt - * sqrt(pi) \| - * 0 - * - * erfc(x) = 1-erf(x) - * Note that - * erf(-x) = -erf(x) - * erfc(-x) = 2 - erfc(x) - * - * Method: - * 1. erf(x) = x + x*R(x^2) for |x| in [0, 7/8] - * Remark. The formula is derived by noting - * erf(x) = (2/sqrt(pi))*(x - x^3/3 + x^5/10 - x^7/42 + ....) - * and that - * 2/sqrt(pi) = 1.128379167095512573896158903121545171688 - * is close to one. - * - * 1a. erf(x) = 1 - erfc(x), for |x| > 1.0 - * erfc(x) = 1 - erf(x) if |x| < 1/4 - * - * 2. For |x| in [7/8, 1], let s = |x| - 1, and - * c = 0.84506291151 rounded to single (24 bits) - * erf(s + c) = sign(x) * (c + P1(s)/Q1(s)) - * Remark: here we use the taylor series expansion at x=1. - * erf(1+s) = erf(1) + s*Poly(s) - * = 0.845.. + P1(s)/Q1(s) - * Note that |P1/Q1|< 0.078 for x in [0.84375,1.25] - * - * 3. For x in [1/4, 5/4], - * erfc(s + const) = erfc(const) + s P1(s)/Q1(s) - * for const = 1/4, 3/8, ..., 9/8 - * and 0 <= s <= 1/8 . - * - * 4. For x in [5/4, 107], - * erfc(x) = (1/x)*exp(-x*x-0.5625 + R(z)) - * z=1/x^2 - * The interval is partitioned into several segments - * of width 1/8 in 1/x. - * - * Note1: - * To compute exp(-x*x-0.5625+R/S), let s be a single - * precision number and s := x; then - * -x*x = -s*s + (s-x)*(s+x) - * exp(-x*x-0.5626+R/S) = - * exp(-s*s-0.5625)*exp((s-x)*(s+x)+R/S); - * Note2: - * Here 4 and 5 make use of the asymptotic series - * exp(-x*x) - * erfc(x) ~ ---------- * ( 1 + Poly(1/x^2) ) - * x*sqrt(pi) - * - * 5. For inf > x >= 107 - * erf(x) = sign(x) *(1 - tiny) (raise inexact) - * erfc(x) = tiny*tiny (raise underflow) if x > 0 - * = 2 - tiny if x<0 - * - * 7. Special case: - * erf(0) = 0, erf(inf) = 1, erf(-inf) = -1, - * erfc(0) = 1, erfc(inf) = 0, erfc(-inf) = 2, - * erfc/erf(NaN) is NaN - */ - -#include -#include -#include -#include - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -neval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static _Float128 -deval (_Float128 x, const _Float128 *p, int n) -{ - _Float128 y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - - -static const _Float128 -tiny = L(1e-4931), - one = 1, - two = 2, - /* 2/sqrt(pi) - 1 */ - efx = L(1.2837916709551257389615890312154517168810E-1); - - -/* erf(x) = x + x R(x^2) - 0 <= x <= 7/8 - Peak relative error 1.8e-35 */ -#define NTN1 8 -static const _Float128 TN1[NTN1 + 1] = -{ - L(-3.858252324254637124543172907442106422373E10), - L(9.580319248590464682316366876952214879858E10), - L(1.302170519734879977595901236693040544854E10), - L(2.922956950426397417800321486727032845006E9), - L(1.764317520783319397868923218385468729799E8), - L(1.573436014601118630105796794840834145120E7), - L(4.028077380105721388745632295157816229289E5), - L(1.644056806467289066852135096352853491530E4), - L(3.390868480059991640235675479463287886081E1) -}; -#define NTD1 8 -static const _Float128 TD1[NTD1 + 1] = -{ - L(-3.005357030696532927149885530689529032152E11), - L(-1.342602283126282827411658673839982164042E11), - L(-2.777153893355340961288511024443668743399E10), - L(-3.483826391033531996955620074072768276974E9), - L(-2.906321047071299585682722511260895227921E8), - L(-1.653347985722154162439387878512427542691E7), - L(-6.245520581562848778466500301865173123136E5), - L(-1.402124304177498828590239373389110545142E4), - L(-1.209368072473510674493129989468348633579E2) -/* 1.0E0 */ -}; - - -/* erf(z+1) = erf_const + P(z)/Q(z) - -.125 <= z <= 0 - Peak relative error 7.3e-36 */ -static const _Float128 erf_const = L(0.845062911510467529296875); -#define NTN2 8 -static const _Float128 TN2[NTN2 + 1] = -{ - L(-4.088889697077485301010486931817357000235E1), - L(7.157046430681808553842307502826960051036E3), - L(-2.191561912574409865550015485451373731780E3), - L(2.180174916555316874988981177654057337219E3), - L(2.848578658049670668231333682379720943455E2), - L(1.630362490952512836762810462174798925274E2), - L(6.317712353961866974143739396865293596895E0), - L(2.450441034183492434655586496522857578066E1), - L(5.127662277706787664956025545897050896203E-1) -}; -#define NTD2 8 -static const _Float128 TD2[NTD2 + 1] = -{ - L(1.731026445926834008273768924015161048885E4), - L(1.209682239007990370796112604286048173750E4), - L(1.160950290217993641320602282462976163857E4), - L(5.394294645127126577825507169061355698157E3), - L(2.791239340533632669442158497532521776093E3), - L(8.989365571337319032943005387378993827684E2), - L(2.974016493766349409725385710897298069677E2), - L(6.148192754590376378740261072533527271947E1), - L(1.178502892490738445655468927408440847480E1) - /* 1.0E0 */ -}; - - -/* erfc(x + 0.25) = erfc(0.25) + x R(x) - 0 <= x < 0.125 - Peak relative error 1.4e-35 */ -#define NRNr13 8 -static const _Float128 RNr13[NRNr13 + 1] = -{ - L(-2.353707097641280550282633036456457014829E3), - L(3.871159656228743599994116143079870279866E2), - L(-3.888105134258266192210485617504098426679E2), - L(-2.129998539120061668038806696199343094971E1), - L(-8.125462263594034672468446317145384108734E1), - L(8.151549093983505810118308635926270319660E0), - L(-5.033362032729207310462422357772568553670E0), - L(-4.253956621135136090295893547735851168471E-2), - L(-8.098602878463854789780108161581050357814E-2) -}; -#define NRDr13 7 -static const _Float128 RDr13[NRDr13 + 1] = -{ - L(2.220448796306693503549505450626652881752E3), - L(1.899133258779578688791041599040951431383E2), - L(1.061906712284961110196427571557149268454E3), - L(7.497086072306967965180978101974566760042E1), - L(2.146796115662672795876463568170441327274E2), - L(1.120156008362573736664338015952284925592E1), - L(2.211014952075052616409845051695042741074E1), - L(6.469655675326150785692908453094054988938E-1) - /* 1.0E0 */ -}; -/* erfc(0.25) = C13a + C13b to extra precision. */ -static const _Float128 C13a = L(0.723663330078125); -static const _Float128 C13b = L(1.0279753638067014931732235184287934646022E-5); - - -/* erfc(x + 0.375) = erfc(0.375) + x R(x) - 0 <= x < 0.125 - Peak relative error 1.2e-35 */ -#define NRNr14 8 -static const _Float128 RNr14[NRNr14 + 1] = -{ - L(-2.446164016404426277577283038988918202456E3), - L(6.718753324496563913392217011618096698140E2), - L(-4.581631138049836157425391886957389240794E2), - L(-2.382844088987092233033215402335026078208E1), - L(-7.119237852400600507927038680970936336458E1), - L(1.313609646108420136332418282286454287146E1), - L(-6.188608702082264389155862490056401365834E0), - L(-2.787116601106678287277373011101132659279E-2), - L(-2.230395570574153963203348263549700967918E-2) -}; -#define NRDr14 7 -static const _Float128 RDr14[NRDr14 + 1] = -{ - L(2.495187439241869732696223349840963702875E3), - L(2.503549449872925580011284635695738412162E2), - L(1.159033560988895481698051531263861842461E3), - L(9.493751466542304491261487998684383688622E1), - L(2.276214929562354328261422263078480321204E2), - L(1.367697521219069280358984081407807931847E1), - L(2.276988395995528495055594829206582732682E1), - L(7.647745753648996559837591812375456641163E-1) - /* 1.0E0 */ -}; -/* erfc(0.375) = C14a + C14b to extra precision. */ -static const _Float128 C14a = L(0.5958709716796875); -static const _Float128 C14b = L(1.2118885490201676174914080878232469565953E-5); - -/* erfc(x + 0.5) = erfc(0.5) + x R(x) - 0 <= x < 0.125 - Peak relative error 4.7e-36 */ -#define NRNr15 8 -static const _Float128 RNr15[NRNr15 + 1] = -{ - L(-2.624212418011181487924855581955853461925E3), - L(8.473828904647825181073831556439301342756E2), - L(-5.286207458628380765099405359607331669027E2), - L(-3.895781234155315729088407259045269652318E1), - L(-6.200857908065163618041240848728398496256E1), - L(1.469324610346924001393137895116129204737E1), - L(-6.961356525370658572800674953305625578903E0), - L(5.145724386641163809595512876629030548495E-3), - L(1.990253655948179713415957791776180406812E-2) -}; -#define NRDr15 7 -static const _Float128 RDr15[NRDr15 + 1] = -{ - L(2.986190760847974943034021764693341524962E3), - L(5.288262758961073066335410218650047725985E2), - L(1.363649178071006978355113026427856008978E3), - L(1.921707975649915894241864988942255320833E2), - L(2.588651100651029023069013885900085533226E2), - L(2.628752920321455606558942309396855629459E1), - L(2.455649035885114308978333741080991380610E1), - L(1.378826653595128464383127836412100939126E0) - /* 1.0E0 */ -}; -/* erfc(0.5) = C15a + C15b to extra precision. */ -static const _Float128 C15a = L(0.4794921875); -static const _Float128 C15b = L(7.9346869534623172533461080354712635484242E-6); - -/* erfc(x + 0.625) = erfc(0.625) + x R(x) - 0 <= x < 0.125 - Peak relative error 5.1e-36 */ -#define NRNr16 8 -static const _Float128 RNr16[NRNr16 + 1] = -{ - L(-2.347887943200680563784690094002722906820E3), - L(8.008590660692105004780722726421020136482E2), - L(-5.257363310384119728760181252132311447963E2), - L(-4.471737717857801230450290232600243795637E1), - L(-4.849540386452573306708795324759300320304E1), - L(1.140885264677134679275986782978655952843E1), - L(-6.731591085460269447926746876983786152300E0), - L(1.370831653033047440345050025876085121231E-1), - L(2.022958279982138755020825717073966576670E-2), -}; -#define NRDr16 7 -static const _Float128 RDr16[NRDr16 + 1] = -{ - L(3.075166170024837215399323264868308087281E3), - L(8.730468942160798031608053127270430036627E2), - L(1.458472799166340479742581949088453244767E3), - L(3.230423687568019709453130785873540386217E2), - L(2.804009872719893612081109617983169474655E2), - L(4.465334221323222943418085830026979293091E1), - L(2.612723259683205928103787842214809134746E1), - L(2.341526751185244109722204018543276124997E0), - /* 1.0E0 */ -}; -/* erfc(0.625) = C16a + C16b to extra precision. */ -static const _Float128 C16a = L(0.3767547607421875); -static const _Float128 C16b = L(4.3570693945275513594941232097252997287766E-6); - -/* erfc(x + 0.75) = erfc(0.75) + x R(x) - 0 <= x < 0.125 - Peak relative error 1.7e-35 */ -#define NRNr17 8 -static const _Float128 RNr17[NRNr17 + 1] = -{ - L(-1.767068734220277728233364375724380366826E3), - L(6.693746645665242832426891888805363898707E2), - L(-4.746224241837275958126060307406616817753E2), - L(-2.274160637728782675145666064841883803196E1), - L(-3.541232266140939050094370552538987982637E1), - L(6.988950514747052676394491563585179503865E0), - L(-5.807687216836540830881352383529281215100E0), - L(3.631915988567346438830283503729569443642E-1), - L(-1.488945487149634820537348176770282391202E-2) -}; -#define NRDr17 7 -static const _Float128 RDr17[NRDr17 + 1] = -{ - L(2.748457523498150741964464942246913394647E3), - L(1.020213390713477686776037331757871252652E3), - L(1.388857635935432621972601695296561952738E3), - L(3.903363681143817750895999579637315491087E2), - L(2.784568344378139499217928969529219886578E2), - L(5.555800830216764702779238020065345401144E1), - L(2.646215470959050279430447295801291168941E1), - L(2.984905282103517497081766758550112011265E0), - /* 1.0E0 */ -}; -/* erfc(0.75) = C17a + C17b to extra precision. */ -static const _Float128 C17a = L(0.2888336181640625); -static const _Float128 C17b = L(1.0748182422368401062165408589222625794046E-5); - - -/* erfc(x + 0.875) = erfc(0.875) + x R(x) - 0 <= x < 0.125 - Peak relative error 2.2e-35 */ -#define NRNr18 8 -static const _Float128 RNr18[NRNr18 + 1] = -{ - L(-1.342044899087593397419622771847219619588E3), - L(6.127221294229172997509252330961641850598E2), - L(-4.519821356522291185621206350470820610727E2), - L(1.223275177825128732497510264197915160235E1), - L(-2.730789571382971355625020710543532867692E1), - L(4.045181204921538886880171727755445395862E0), - L(-4.925146477876592723401384464691452700539E0), - L(5.933878036611279244654299924101068088582E-1), - L(-5.557645435858916025452563379795159124753E-2) -}; -#define NRDr18 7 -static const _Float128 RDr18[NRDr18 + 1] = -{ - L(2.557518000661700588758505116291983092951E3), - L(1.070171433382888994954602511991940418588E3), - L(1.344842834423493081054489613250688918709E3), - L(4.161144478449381901208660598266288188426E2), - L(2.763670252219855198052378138756906980422E2), - L(5.998153487868943708236273854747564557632E1), - L(2.657695108438628847733050476209037025318E1), - L(3.252140524394421868923289114410336976512E0), - /* 1.0E0 */ -}; -/* erfc(0.875) = C18a + C18b to extra precision. */ -static const _Float128 C18a = L(0.215911865234375); -static const _Float128 C18b = L(1.3073705765341685464282101150637224028267E-5); - -/* erfc(x + 1.0) = erfc(1.0) + x R(x) - 0 <= x < 0.125 - Peak relative error 1.6e-35 */ -#define NRNr19 8 -static const _Float128 RNr19[NRNr19 + 1] = -{ - L(-1.139180936454157193495882956565663294826E3), - L(6.134903129086899737514712477207945973616E2), - L(-4.628909024715329562325555164720732868263E2), - L(4.165702387210732352564932347500364010833E1), - L(-2.286979913515229747204101330405771801610E1), - L(1.870695256449872743066783202326943667722E0), - L(-4.177486601273105752879868187237000032364E0), - L(7.533980372789646140112424811291782526263E-1), - L(-8.629945436917752003058064731308767664446E-2) -}; -#define NRDr19 7 -static const _Float128 RDr19[NRDr19 + 1] = -{ - L(2.744303447981132701432716278363418643778E3), - L(1.266396359526187065222528050591302171471E3), - L(1.466739461422073351497972255511919814273E3), - L(4.868710570759693955597496520298058147162E2), - L(2.993694301559756046478189634131722579643E2), - L(6.868976819510254139741559102693828237440E1), - L(2.801505816247677193480190483913753613630E1), - L(3.604439909194350263552750347742663954481E0), - /* 1.0E0 */ -}; -/* erfc(1.0) = C19a + C19b to extra precision. */ -static const _Float128 C19a = L(0.15728759765625); -static const _Float128 C19b = L(1.1609394035130658779364917390740703933002E-5); - -/* erfc(x + 1.125) = erfc(1.125) + x R(x) - 0 <= x < 0.125 - Peak relative error 3.6e-36 */ -#define NRNr20 8 -static const _Float128 RNr20[NRNr20 + 1] = -{ - L(-9.652706916457973956366721379612508047640E2), - L(5.577066396050932776683469951773643880634E2), - L(-4.406335508848496713572223098693575485978E2), - L(5.202893466490242733570232680736966655434E1), - L(-1.931311847665757913322495948705563937159E1), - L(-9.364318268748287664267341457164918090611E-2), - L(-3.306390351286352764891355375882586201069E0), - L(7.573806045289044647727613003096916516475E-1), - L(-9.611744011489092894027478899545635991213E-2) -}; -#define NRDr20 7 -static const _Float128 RDr20[NRDr20 + 1] = -{ - L(3.032829629520142564106649167182428189014E3), - L(1.659648470721967719961167083684972196891E3), - L(1.703545128657284619402511356932569292535E3), - L(6.393465677731598872500200253155257708763E2), - L(3.489131397281030947405287112726059221934E2), - L(8.848641738570783406484348434387611713070E1), - L(3.132269062552392974833215844236160958502E1), - L(4.430131663290563523933419966185230513168E0) - /* 1.0E0 */ -}; -/* erfc(1.125) = C20a + C20b to extra precision. */ -static const _Float128 C20a = L(0.111602783203125); -static const _Float128 C20b = L(8.9850951672359304215530728365232161564636E-6); - -/* erfc(1/x) = 1/x exp (-1/x^2 - 0.5625 + R(1/x^2)) - 7/8 <= 1/x < 1 - Peak relative error 1.4e-35 */ -#define NRNr8 9 -static const _Float128 RNr8[NRNr8 + 1] = -{ - L(3.587451489255356250759834295199296936784E1), - L(5.406249749087340431871378009874875889602E2), - L(2.931301290625250886238822286506381194157E3), - L(7.359254185241795584113047248898753470923E3), - L(9.201031849810636104112101947312492532314E3), - L(5.749697096193191467751650366613289284777E3), - L(1.710415234419860825710780802678697889231E3), - L(2.150753982543378580859546706243022719599E2), - L(8.740953582272147335100537849981160931197E0), - L(4.876422978828717219629814794707963640913E-2) -}; -#define NRDr8 8 -static const _Float128 RDr8[NRDr8 + 1] = -{ - L(6.358593134096908350929496535931630140282E1), - L(9.900253816552450073757174323424051765523E2), - L(5.642928777856801020545245437089490805186E3), - L(1.524195375199570868195152698617273739609E4), - L(2.113829644500006749947332935305800887345E4), - L(1.526438562626465706267943737310282977138E4), - L(5.561370922149241457131421914140039411782E3), - L(9.394035530179705051609070428036834496942E2), - L(6.147019596150394577984175188032707343615E1) - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp (-1/x^2 - 0.5625 + R(1/x^2)) - 0.75 <= 1/x <= 0.875 - Peak relative error 2.0e-36 */ -#define NRNr7 9 -static const _Float128 RNr7[NRNr7 + 1] = -{ - L(1.686222193385987690785945787708644476545E1), - L(1.178224543567604215602418571310612066594E3), - L(1.764550584290149466653899886088166091093E4), - L(1.073758321890334822002849369898232811561E5), - L(3.132840749205943137619839114451290324371E5), - L(4.607864939974100224615527007793867585915E5), - L(3.389781820105852303125270837910972384510E5), - L(1.174042187110565202875011358512564753399E5), - L(1.660013606011167144046604892622504338313E4), - L(6.700393957480661937695573729183733234400E2) -}; -#define NRDr7 9 -static const _Float128 RDr7[NRDr7 + 1] = -{ -L(-1.709305024718358874701575813642933561169E3), -L(-3.280033887481333199580464617020514788369E4), -L(-2.345284228022521885093072363418750835214E5), -L(-8.086758123097763971926711729242327554917E5), -L(-1.456900414510108718402423999575992450138E6), -L(-1.391654264881255068392389037292702041855E6), -L(-6.842360801869939983674527468509852583855E5), -L(-1.597430214446573566179675395199807533371E5), -L(-1.488876130609876681421645314851760773480E4), -L(-3.511762950935060301403599443436465645703E2) - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 5/8 <= 1/x < 3/4 - Peak relative error 1.9e-35 */ -#define NRNr6 9 -static const _Float128 RNr6[NRNr6 + 1] = -{ - L(1.642076876176834390623842732352935761108E0), - L(1.207150003611117689000664385596211076662E2), - L(2.119260779316389904742873816462800103939E3), - L(1.562942227734663441801452930916044224174E4), - L(5.656779189549710079988084081145693580479E4), - L(1.052166241021481691922831746350942786299E5), - L(9.949798524786000595621602790068349165758E4), - L(4.491790734080265043407035220188849562856E4), - L(8.377074098301530326270432059434791287601E3), - L(4.506934806567986810091824791963991057083E2) -}; -#define NRDr6 9 -static const _Float128 RDr6[NRDr6 + 1] = -{ -L(-1.664557643928263091879301304019826629067E2), -L(-3.800035902507656624590531122291160668452E3), -L(-3.277028191591734928360050685359277076056E4), -L(-1.381359471502885446400589109566587443987E5), -L(-3.082204287382581873532528989283748656546E5), -L(-3.691071488256738343008271448234631037095E5), -L(-2.300482443038349815750714219117566715043E5), -L(-6.873955300927636236692803579555752171530E4), -L(-8.262158817978334142081581542749986845399E3), -L(-2.517122254384430859629423488157361983661E2) - /* 1.00 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 1/2 <= 1/x < 5/8 - Peak relative error 4.6e-36 */ -#define NRNr5 10 -static const _Float128 RNr5[NRNr5 + 1] = -{ -L(-3.332258927455285458355550878136506961608E-3), -L(-2.697100758900280402659586595884478660721E-1), -L(-6.083328551139621521416618424949137195536E0), -L(-6.119863528983308012970821226810162441263E1), -L(-3.176535282475593173248810678636522589861E2), -L(-8.933395175080560925809992467187963260693E2), -L(-1.360019508488475978060917477620199499560E3), -L(-1.075075579828188621541398761300910213280E3), -L(-4.017346561586014822824459436695197089916E2), -L(-5.857581368145266249509589726077645791341E1), -L(-2.077715925587834606379119585995758954399E0) -}; -#define NRDr5 9 -static const _Float128 RDr5[NRDr5 + 1] = -{ - L(3.377879570417399341550710467744693125385E-1), - L(1.021963322742390735430008860602594456187E1), - L(1.200847646592942095192766255154827011939E2), - L(7.118915528142927104078182863387116942836E2), - L(2.318159380062066469386544552429625026238E3), - L(4.238729853534009221025582008928765281620E3), - L(4.279114907284825886266493994833515580782E3), - L(2.257277186663261531053293222591851737504E3), - L(5.570475501285054293371908382916063822957E2), - L(5.142189243856288981145786492585432443560E1) - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 3/8 <= 1/x < 1/2 - Peak relative error 2.0e-36 */ -#define NRNr4 10 -static const _Float128 RNr4[NRNr4 + 1] = -{ - L(3.258530712024527835089319075288494524465E-3), - L(2.987056016877277929720231688689431056567E-1), - L(8.738729089340199750734409156830371528862E0), - L(1.207211160148647782396337792426311125923E2), - L(8.997558632489032902250523945248208224445E2), - L(3.798025197699757225978410230530640879762E3), - L(9.113203668683080975637043118209210146846E3), - L(1.203285891339933238608683715194034900149E4), - L(8.100647057919140328536743641735339740855E3), - L(2.383888249907144945837976899822927411769E3), - L(2.127493573166454249221983582495245662319E2) -}; -#define NRDr4 10 -static const _Float128 RDr4[NRDr4 + 1] = -{ -L(-3.303141981514540274165450687270180479586E-1), -L(-1.353768629363605300707949368917687066724E1), -L(-2.206127630303621521950193783894598987033E2), -L(-1.861800338758066696514480386180875607204E3), -L(-8.889048775872605708249140016201753255599E3), -L(-2.465888106627948210478692168261494857089E4), -L(-3.934642211710774494879042116768390014289E4), -L(-3.455077258242252974937480623730228841003E4), -L(-1.524083977439690284820586063729912653196E4), -L(-2.810541887397984804237552337349093953857E3), -L(-1.343929553541159933824901621702567066156E2) - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 1/4 <= 1/x < 3/8 - Peak relative error 8.4e-37 */ -#define NRNr3 11 -static const _Float128 RNr3[NRNr3 + 1] = -{ -L(-1.952401126551202208698629992497306292987E-6), -L(-2.130881743066372952515162564941682716125E-4), -L(-8.376493958090190943737529486107282224387E-3), -L(-1.650592646560987700661598877522831234791E-1), -L(-1.839290818933317338111364667708678163199E0), -L(-1.216278715570882422410442318517814388470E1), -L(-4.818759344462360427612133632533779091386E1), -L(-1.120994661297476876804405329172164436784E2), -L(-1.452850765662319264191141091859300126931E2), -L(-9.485207851128957108648038238656777241333E1), -L(-2.563663855025796641216191848818620020073E1), -L(-1.787995944187565676837847610706317833247E0) -}; -#define NRDr3 10 -static const _Float128 RDr3[NRDr3 + 1] = -{ - L(1.979130686770349481460559711878399476903E-4), - L(1.156941716128488266238105813374635099057E-2), - L(2.752657634309886336431266395637285974292E-1), - L(3.482245457248318787349778336603569327521E0), - L(2.569347069372696358578399521203959253162E1), - L(1.142279000180457419740314694631879921561E2), - L(3.056503977190564294341422623108332700840E2), - L(4.780844020923794821656358157128719184422E2), - L(4.105972727212554277496256802312730410518E2), - L(1.724072188063746970865027817017067646246E2), - L(2.815939183464818198705278118326590370435E1) - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 1/8 <= 1/x < 1/4 - Peak relative error 1.5e-36 */ -#define NRNr2 11 -static const _Float128 RNr2[NRNr2 + 1] = -{ -L(-2.638914383420287212401687401284326363787E-8), -L(-3.479198370260633977258201271399116766619E-6), -L(-1.783985295335697686382487087502222519983E-4), -L(-4.777876933122576014266349277217559356276E-3), -L(-7.450634738987325004070761301045014986520E-2), -L(-7.068318854874733315971973707247467326619E-1), -L(-4.113919921935944795764071670806867038732E0), -L(-1.440447573226906222417767283691888875082E1), -L(-2.883484031530718428417168042141288943905E1), -L(-2.990886974328476387277797361464279931446E1), -L(-1.325283914915104866248279787536128997331E1), -L(-1.572436106228070195510230310658206154374E0) -}; -#define NRDr2 10 -static const _Float128 RDr2[NRDr2 + 1] = -{ - L(2.675042728136731923554119302571867799673E-6), - L(2.170997868451812708585443282998329996268E-4), - L(7.249969752687540289422684951196241427445E-3), - L(1.302040375859768674620410563307838448508E-1), - L(1.380202483082910888897654537144485285549E0), - L(8.926594113174165352623847870299170069350E0), - L(3.521089584782616472372909095331572607185E1), - L(8.233547427533181375185259050330809105570E1), - L(1.072971579885803033079469639073292840135E2), - L(6.943803113337964469736022094105143158033E1), - L(1.775695341031607738233608307835017282662E1) - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 1/128 <= 1/x < 1/8 - Peak relative error 2.2e-36 */ -#define NRNr1 9 -static const _Float128 RNr1[NRNr1 + 1] = -{ -L(-4.250780883202361946697751475473042685782E-8), -L(-5.375777053288612282487696975623206383019E-6), -L(-2.573645949220896816208565944117382460452E-4), -L(-6.199032928113542080263152610799113086319E-3), -L(-8.262721198693404060380104048479916247786E-2), -L(-6.242615227257324746371284637695778043982E-1), -L(-2.609874739199595400225113299437099626386E0), -L(-5.581967563336676737146358534602770006970E0), -L(-5.124398923356022609707490956634280573882E0), -L(-1.290865243944292370661544030414667556649E0) -}; -#define NRDr1 8 -static const _Float128 RDr1[NRDr1 + 1] = -{ - L(4.308976661749509034845251315983612976224E-6), - L(3.265390126432780184125233455960049294580E-4), - L(9.811328839187040701901866531796570418691E-3), - L(1.511222515036021033410078631914783519649E-1), - L(1.289264341917429958858379585970225092274E0), - L(6.147640356182230769548007536914983522270E0), - L(1.573966871337739784518246317003956180750E1), - L(1.955534123435095067199574045529218238263E1), - L(9.472613121363135472247929109615785855865E0) - /* 1.0E0 */ -}; - - -_Float128 -__erfl (_Float128 x) -{ - _Float128 a, y, z; - int32_t i, ix, sign; - ieee854_long_double_shape_type u; - - u.value = x; - sign = u.parts32.w0; - ix = sign & 0x7fffffff; - - if (ix >= 0x7fff0000) - { /* erf(nan)=nan */ - i = ((sign & 0xffff0000) >> 31) << 1; - return (_Float128) (1 - i) + one / x; /* erf(+-inf)=+-1 */ - } - - if (ix >= 0x3fff0000) /* |x| >= 1.0 */ - { - if (ix >= 0x40030000 && sign > 0) - return one; /* x >= 16, avoid spurious underflow from erfc. */ - y = __erfcl (x); - return (one - y); - /* return (one - __erfcl (x)); */ - } - u.parts32.w0 = ix; - a = u.value; - z = x * x; - if (ix < 0x3ffec000) /* a < 0.875 */ - { - if (ix < 0x3fc60000) /* |x|<2**-57 */ - { - if (ix < 0x00080000) - { - /* Avoid spurious underflow. */ - _Float128 ret = 0.0625 * (16.0 * x + (16.0 * efx) * x); - math_check_force_underflow (ret); - return ret; - } - return x + efx * x; - } - y = a + a * neval (z, TN1, NTN1) / deval (z, TD1, NTD1); - } - else - { - a = a - one; - y = erf_const + neval (a, TN2, NTN2) / deval (a, TD2, NTD2); - } - - if (sign & 0x80000000) /* x < 0 */ - y = -y; - return( y ); -} - -weak_alias (__erfl, erfl) -_Float128 -__erfcl (_Float128 x) -{ - _Float128 y, z, p, r; - int32_t i, ix, sign; - ieee854_long_double_shape_type u; - - u.value = x; - sign = u.parts32.w0; - ix = sign & 0x7fffffff; - u.parts32.w0 = ix; - - if (ix >= 0x7fff0000) - { /* erfc(nan)=nan */ - /* erfc(+-inf)=0,2 */ - return (_Float128) (((u_int32_t) sign >> 31) << 1) + one / x; - } - - if (ix < 0x3ffd0000) /* |x| <1/4 */ - { - if (ix < 0x3f8d0000) /* |x|<2**-114 */ - return one - x; - return one - __erfl (x); - } - if (ix < 0x3fff4000) /* 1.25 */ - { - x = u.value; - i = 8.0 * x; - switch (i) - { - case 2: - z = x - L(0.25); - y = C13b + z * neval (z, RNr13, NRNr13) / deval (z, RDr13, NRDr13); - y += C13a; - break; - case 3: - z = x - L(0.375); - y = C14b + z * neval (z, RNr14, NRNr14) / deval (z, RDr14, NRDr14); - y += C14a; - break; - case 4: - z = x - L(0.5); - y = C15b + z * neval (z, RNr15, NRNr15) / deval (z, RDr15, NRDr15); - y += C15a; - break; - case 5: - z = x - L(0.625); - y = C16b + z * neval (z, RNr16, NRNr16) / deval (z, RDr16, NRDr16); - y += C16a; - break; - case 6: - z = x - L(0.75); - y = C17b + z * neval (z, RNr17, NRNr17) / deval (z, RDr17, NRDr17); - y += C17a; - break; - case 7: - z = x - L(0.875); - y = C18b + z * neval (z, RNr18, NRNr18) / deval (z, RDr18, NRDr18); - y += C18a; - break; - case 8: - z = x - 1; - y = C19b + z * neval (z, RNr19, NRNr19) / deval (z, RDr19, NRDr19); - y += C19a; - break; - default: /* i == 9. */ - z = x - L(1.125); - y = C20b + z * neval (z, RNr20, NRNr20) / deval (z, RDr20, NRDr20); - y += C20a; - break; - } - if (sign & 0x80000000) - y = 2 - y; - return y; - } - /* 1.25 < |x| < 107 */ - if (ix < 0x4005ac00) - { - /* x < -9 */ - if ((ix >= 0x40022000) && (sign & 0x80000000)) - return two - tiny; - - x = fabsl (x); - z = one / (x * x); - i = 8.0 / x; - switch (i) - { - default: - case 0: - p = neval (z, RNr1, NRNr1) / deval (z, RDr1, NRDr1); - break; - case 1: - p = neval (z, RNr2, NRNr2) / deval (z, RDr2, NRDr2); - break; - case 2: - p = neval (z, RNr3, NRNr3) / deval (z, RDr3, NRDr3); - break; - case 3: - p = neval (z, RNr4, NRNr4) / deval (z, RDr4, NRDr4); - break; - case 4: - p = neval (z, RNr5, NRNr5) / deval (z, RDr5, NRDr5); - break; - case 5: - p = neval (z, RNr6, NRNr6) / deval (z, RDr6, NRDr6); - break; - case 6: - p = neval (z, RNr7, NRNr7) / deval (z, RDr7, NRDr7); - break; - case 7: - p = neval (z, RNr8, NRNr8) / deval (z, RDr8, NRDr8); - break; - } - u.value = x; - u.parts32.w3 = 0; - u.parts32.w2 &= 0xfe000000; - z = u.value; - r = __ieee754_expl (-z * z - 0.5625) * - __ieee754_expl ((z - x) * (z + x) + p); - if ((sign & 0x80000000) == 0) - { - _Float128 ret = r / x; - if (ret == 0) - __set_errno (ERANGE); - return ret; - } - else - return two - r / x; - } - else - { - if ((sign & 0x80000000) == 0) - { - __set_errno (ERANGE); - return tiny * tiny; - } - else - return two - tiny; - } -} - -weak_alias (__erfcl, erfcl) diff --git a/sysdeps/ieee754/ldbl-128/s_expm1l.c b/sysdeps/ieee754/ldbl-128/s_expm1l.c deleted file mode 100644 index 46d078b77b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_expm1l.c +++ /dev/null @@ -1,166 +0,0 @@ -/* expm1l.c - * - * Exponential function, minus 1 - * 128-bit long double precision - * - * - * - * SYNOPSIS: - * - * long double x, y, expm1l(); - * - * y = expm1l( x ); - * - * - * - * DESCRIPTION: - * - * Returns e (2.71828...) raised to the x power, minus one. - * - * Range reduction is accomplished by separating the argument - * into an integer k and fraction f such that - * - * x k f - * e = 2 e. - * - * An expansion x + .5 x^2 + x^3 R(x) approximates exp(f) - 1 - * in the basic range [-0.5 ln 2, 0.5 ln 2]. - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -79,+MAXLOG 100,000 1.7e-34 4.5e-35 - * - */ - -/* Copyright 2001 by Stephen L. Moshier - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - - - -#include -#include -#include -#include - -/* exp(x) - 1 = x + 0.5 x^2 + x^3 P(x)/Q(x) - -.5 ln 2 < x < .5 ln 2 - Theoretical peak relative error = 8.1e-36 */ - -static const _Float128 - P0 = L(2.943520915569954073888921213330863757240E8), - P1 = L(-5.722847283900608941516165725053359168840E7), - P2 = L(8.944630806357575461578107295909719817253E6), - P3 = L(-7.212432713558031519943281748462837065308E5), - P4 = L(4.578962475841642634225390068461943438441E4), - P5 = L(-1.716772506388927649032068540558788106762E3), - P6 = L(4.401308817383362136048032038528753151144E1), - P7 = L(-4.888737542888633647784737721812546636240E-1), - Q0 = L(1.766112549341972444333352727998584753865E9), - Q1 = L(-7.848989743695296475743081255027098295771E8), - Q2 = L(1.615869009634292424463780387327037251069E8), - Q3 = L(-2.019684072836541751428967854947019415698E7), - Q4 = L(1.682912729190313538934190635536631941751E6), - Q5 = L(-9.615511549171441430850103489315371768998E4), - Q6 = L(3.697714952261803935521187272204485251835E3), - Q7 = L(-8.802340681794263968892934703309274564037E1), - /* Q8 = 1.000000000000000000000000000000000000000E0 */ -/* C1 + C2 = ln 2 */ - - C1 = L(6.93145751953125E-1), - C2 = L(1.428606820309417232121458176568075500134E-6), -/* ln 2^-114 */ - minarg = L(-7.9018778583833765273564461846232128760607E1), big = L(1e4932); - - -_Float128 -__expm1l (_Float128 x) -{ - _Float128 px, qx, xx; - int32_t ix, sign; - ieee854_long_double_shape_type u; - int k; - - /* Detect infinity and NaN. */ - u.value = x; - ix = u.parts32.w0; - sign = ix & 0x80000000; - ix &= 0x7fffffff; - if (!sign && ix >= 0x40060000) - { - /* If num is positive and exp >= 6 use plain exp. */ - return __expl (x); - } - if (ix >= 0x7fff0000) - { - /* Infinity (which must be negative infinity). */ - if (((ix & 0xffff) | u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) - return -1; - /* NaN. Invalid exception if signaling. */ - return x + x; - } - - /* expm1(+- 0) = +- 0. */ - if ((ix == 0) && (u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) - return x; - - /* Minimum value. */ - if (x < minarg) - return (4.0/big - 1); - - /* Avoid internal underflow when result does not underflow, while - ensuring underflow (without returning a zero of the wrong sign) - when the result does underflow. */ - if (fabsl (x) < L(0x1p-113)) - { - math_check_force_underflow (x); - return x; - } - - /* Express x = ln 2 (k + remainder), remainder not exceeding 1/2. */ - xx = C1 + C2; /* ln 2. */ - px = __floorl (0.5 + x / xx); - k = px; - /* remainder times ln 2 */ - x -= px * C1; - x -= px * C2; - - /* Approximate exp(remainder ln 2). */ - px = (((((((P7 * x - + P6) * x - + P5) * x + P4) * x + P3) * x + P2) * x + P1) * x + P0) * x; - - qx = (((((((x - + Q7) * x - + Q6) * x + Q5) * x + Q4) * x + Q3) * x + Q2) * x + Q1) * x + Q0; - - xx = x * x; - qx = x + (0.5 * xx + xx * px / qx); - - /* exp(x) = exp(k ln 2) exp(remainder ln 2) = 2^k exp(remainder ln 2). - - We have qx = exp(remainder ln 2) - 1, so - exp(x) - 1 = 2^k (qx + 1) - 1 - = 2^k qx + 2^k - 1. */ - - px = __ldexpl (1, k); - x = px * qx + (px - 1.0); - return x; -} -libm_hidden_def (__expm1l) -weak_alias (__expm1l, expm1l) diff --git a/sysdeps/ieee754/ldbl-128/s_fabsl.c b/sysdeps/ieee754/ldbl-128/s_fabsl.c deleted file mode 100644 index 0ce6f734cf..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_fabsl.c +++ /dev/null @@ -1,34 +0,0 @@ -/* s_fabsl.c -- long double version of s_fabs.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * fabsl(x) returns the absolute value of x. - */ - -#include -#include - -_Float128 __fabsl(_Float128 x) -{ - u_int64_t hx; - GET_LDOUBLE_MSW64(hx,x); - SET_LDOUBLE_MSW64(x,hx&0x7fffffffffffffffLL); - return x; -} -weak_alias (__fabsl, fabsl) diff --git a/sysdeps/ieee754/ldbl-128/s_finitel.c b/sysdeps/ieee754/ldbl-128/s_finitel.c deleted file mode 100644 index 7c699688fe..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_finitel.c +++ /dev/null @@ -1,36 +0,0 @@ -/* s_finitel.c -- long double version of s_finite.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * finitel(x) returns 1 is x is finite, else 0; - * no branching! - */ - -#include -#include - -int __finitel(_Float128 x) -{ - int64_t hx; - GET_LDOUBLE_MSW64(hx,x); - return (int)((u_int64_t)((hx&0x7fff000000000000LL) - -0x7fff000000000000LL)>>63); -} -mathx_hidden_def (__finitel) -weak_alias (__finitel, finitel) diff --git a/sysdeps/ieee754/ldbl-128/s_floorl.c b/sysdeps/ieee754/ldbl-128/s_floorl.c deleted file mode 100644 index 13ad0848a4..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_floorl.c +++ /dev/null @@ -1,67 +0,0 @@ -/* s_floorl.c -- long double version of s_floor.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * floorl(x) - * Return x rounded toward -inf to integral value - * Method: - * Bit twiddling. - */ - -#include -#include - -_Float128 __floorl(_Float128 x) -{ - int64_t i0,i1,j0; - u_int64_t i,j; - GET_LDOUBLE_WORDS64(i0,i1,x); - j0 = ((i0>>48)&0x7fff)-0x3fff; - if(j0<48) { - if(j0<0) { - /* return 0*sign(x) if |x|<1 */ - if(i0>=0) {i0=i1=0;} - else if(((i0&0x7fffffffffffffffLL)|i1)!=0) - { i0=0xbfff000000000000ULL;i1=0;} - } else { - i = (0x0000ffffffffffffULL)>>j0; - if(((i0&i)|i1)==0) return x; /* x is integral */ - if(i0<0) i0 += (0x0001000000000000LL)>>j0; - i0 &= (~i); i1=0; - } - } else if (j0>111) { - if(j0==0x4000) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } else { - i = -1ULL>>(j0-48); - if((i1&i)==0) return x; /* x is integral */ - if(i0<0) { - if(j0==48) i0+=1; - else { - j = i1+(1LL<<(112-j0)); - if(j, 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* This implementation relies on long double being more than twice as - precise as double and uses rounding to odd in order to avoid problems - with double rounding. - See a paper by Boldo and Melquiond: - http://www.lri.fr/~melquion/doc/08-tc.pdf */ - -double -__fma (double x, double y, double z) -{ - fenv_t env; - /* Multiplication is always exact. */ - long double temp = (long double) x * (long double) y; - - /* Ensure correct sign of an exact zero result by performing the - addition in the original rounding mode in that case. */ - if (temp == -z) - return (double) temp + z; - - union ieee854_long_double u; - feholdexcept (&env); - fesetround (FE_TOWARDZERO); - /* Perform addition with round to odd. */ - u.d = temp + (long double) z; - if ((u.ieee.mantissa3 & 1) == 0 && u.ieee.exponent != 0x7fff) - u.ieee.mantissa3 |= fetestexcept (FE_INEXACT) != 0; - feupdateenv (&env); - /* And finally truncation with round to nearest. */ - return (double) u.d; -} -#ifndef __fma -weak_alias (__fma, fma) -#endif diff --git a/sysdeps/ieee754/ldbl-128/s_fmal.c b/sysdeps/ieee754/ldbl-128/s_fmal.c deleted file mode 100644 index 40c4e73d2b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_fmal.c +++ /dev/null @@ -1,298 +0,0 @@ -/* Compute x * y + z as ternary operation. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* This implementation uses rounding to odd to avoid problems with - double rounding. See a paper by Boldo and Melquiond: - http://www.lri.fr/~melquion/doc/08-tc.pdf */ - -_Float128 -__fmal (_Float128 x, _Float128 y, _Float128 z) -{ - union ieee854_long_double u, v, w; - int adjust = 0; - u.d = x; - v.d = y; - w.d = z; - if (__builtin_expect (u.ieee.exponent + v.ieee.exponent - >= 0x7fff + IEEE854_LONG_DOUBLE_BIAS - - LDBL_MANT_DIG, 0) - || __builtin_expect (u.ieee.exponent >= 0x7fff - LDBL_MANT_DIG, 0) - || __builtin_expect (v.ieee.exponent >= 0x7fff - LDBL_MANT_DIG, 0) - || __builtin_expect (w.ieee.exponent >= 0x7fff - LDBL_MANT_DIG, 0) - || __builtin_expect (u.ieee.exponent + v.ieee.exponent - <= IEEE854_LONG_DOUBLE_BIAS + LDBL_MANT_DIG, 0)) - { - /* If z is Inf, but x and y are finite, the result should be - z rather than NaN. */ - if (w.ieee.exponent == 0x7fff - && u.ieee.exponent != 0x7fff - && v.ieee.exponent != 0x7fff) - return (z + x) + y; - /* If z is zero and x are y are nonzero, compute the result - as x * y to avoid the wrong sign of a zero result if x * y - underflows to 0. */ - if (z == 0 && x != 0 && y != 0) - return x * y; - /* If x or y or z is Inf/NaN, or if x * y is zero, compute as - x * y + z. */ - if (u.ieee.exponent == 0x7fff - || v.ieee.exponent == 0x7fff - || w.ieee.exponent == 0x7fff - || x == 0 - || y == 0) - return x * y + z; - /* If fma will certainly overflow, compute as x * y. */ - if (u.ieee.exponent + v.ieee.exponent - > 0x7fff + IEEE854_LONG_DOUBLE_BIAS) - return x * y; - /* If x * y is less than 1/4 of LDBL_TRUE_MIN, neither the - result nor whether there is underflow depends on its exact - value, only on its sign. */ - if (u.ieee.exponent + v.ieee.exponent - < IEEE854_LONG_DOUBLE_BIAS - LDBL_MANT_DIG - 2) - { - int neg = u.ieee.negative ^ v.ieee.negative; - _Float128 tiny = neg ? L(-0x1p-16494) : L(0x1p-16494); - if (w.ieee.exponent >= 3) - return tiny + z; - /* Scaling up, adding TINY and scaling down produces the - correct result, because in round-to-nearest mode adding - TINY has no effect and in other modes double rounding is - harmless. But it may not produce required underflow - exceptions. */ - v.d = z * L(0x1p114) + tiny; - if (TININESS_AFTER_ROUNDING - ? v.ieee.exponent < 115 - : (w.ieee.exponent == 0 - || (w.ieee.exponent == 1 - && w.ieee.negative != neg - && w.ieee.mantissa3 == 0 - && w.ieee.mantissa2 == 0 - && w.ieee.mantissa1 == 0 - && w.ieee.mantissa0 == 0))) - { - _Float128 force_underflow = x * y; - math_force_eval (force_underflow); - } - return v.d * L(0x1p-114); - } - if (u.ieee.exponent + v.ieee.exponent - >= 0x7fff + IEEE854_LONG_DOUBLE_BIAS - LDBL_MANT_DIG) - { - /* Compute 1p-113 times smaller result and multiply - at the end. */ - if (u.ieee.exponent > v.ieee.exponent) - u.ieee.exponent -= LDBL_MANT_DIG; - else - v.ieee.exponent -= LDBL_MANT_DIG; - /* If x + y exponent is very large and z exponent is very small, - it doesn't matter if we don't adjust it. */ - if (w.ieee.exponent > LDBL_MANT_DIG) - w.ieee.exponent -= LDBL_MANT_DIG; - adjust = 1; - } - else if (w.ieee.exponent >= 0x7fff - LDBL_MANT_DIG) - { - /* Similarly. - If z exponent is very large and x and y exponents are - very small, adjust them up to avoid spurious underflows, - rather than down. */ - if (u.ieee.exponent + v.ieee.exponent - <= IEEE854_LONG_DOUBLE_BIAS + 2 * LDBL_MANT_DIG) - { - if (u.ieee.exponent > v.ieee.exponent) - u.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - else - v.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - } - else if (u.ieee.exponent > v.ieee.exponent) - { - if (u.ieee.exponent > LDBL_MANT_DIG) - u.ieee.exponent -= LDBL_MANT_DIG; - } - else if (v.ieee.exponent > LDBL_MANT_DIG) - v.ieee.exponent -= LDBL_MANT_DIG; - w.ieee.exponent -= LDBL_MANT_DIG; - adjust = 1; - } - else if (u.ieee.exponent >= 0x7fff - LDBL_MANT_DIG) - { - u.ieee.exponent -= LDBL_MANT_DIG; - if (v.ieee.exponent) - v.ieee.exponent += LDBL_MANT_DIG; - else - v.d *= L(0x1p113); - } - else if (v.ieee.exponent >= 0x7fff - LDBL_MANT_DIG) - { - v.ieee.exponent -= LDBL_MANT_DIG; - if (u.ieee.exponent) - u.ieee.exponent += LDBL_MANT_DIG; - else - u.d *= L(0x1p113); - } - else /* if (u.ieee.exponent + v.ieee.exponent - <= IEEE854_LONG_DOUBLE_BIAS + LDBL_MANT_DIG) */ - { - if (u.ieee.exponent > v.ieee.exponent) - u.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - else - v.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - if (w.ieee.exponent <= 4 * LDBL_MANT_DIG + 6) - { - if (w.ieee.exponent) - w.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - else - w.d *= L(0x1p228); - adjust = -1; - } - /* Otherwise x * y should just affect inexact - and nothing else. */ - } - x = u.d; - y = v.d; - z = w.d; - } - - /* Ensure correct sign of exact 0 + 0. */ - if (__glibc_unlikely ((x == 0 || y == 0) && z == 0)) - { - x = math_opt_barrier (x); - return x * y + z; - } - - fenv_t env; - feholdexcept (&env); - fesetround (FE_TONEAREST); - - /* Multiplication m1 + m2 = x * y using Dekker's algorithm. */ -#define C ((1LL << (LDBL_MANT_DIG + 1) / 2) + 1) - _Float128 x1 = x * C; - _Float128 y1 = y * C; - _Float128 m1 = x * y; - x1 = (x - x1) + x1; - y1 = (y - y1) + y1; - _Float128 x2 = x - x1; - _Float128 y2 = y - y1; - _Float128 m2 = (((x1 * y1 - m1) + x1 * y2) + x2 * y1) + x2 * y2; - - /* Addition a1 + a2 = z + m1 using Knuth's algorithm. */ - _Float128 a1 = z + m1; - _Float128 t1 = a1 - z; - _Float128 t2 = a1 - t1; - t1 = m1 - t1; - t2 = z - t2; - _Float128 a2 = t1 + t2; - /* Ensure the arithmetic is not scheduled after feclearexcept call. */ - math_force_eval (m2); - math_force_eval (a2); - feclearexcept (FE_INEXACT); - - /* If the result is an exact zero, ensure it has the correct sign. */ - if (a1 == 0 && m2 == 0) - { - feupdateenv (&env); - /* Ensure that round-to-nearest value of z + m1 is not reused. */ - z = math_opt_barrier (z); - return z + m1; - } - - fesetround (FE_TOWARDZERO); - /* Perform m2 + a2 addition with round to odd. */ - u.d = a2 + m2; - - if (__glibc_likely (adjust == 0)) - { - if ((u.ieee.mantissa3 & 1) == 0 && u.ieee.exponent != 0x7fff) - u.ieee.mantissa3 |= fetestexcept (FE_INEXACT) != 0; - feupdateenv (&env); - /* Result is a1 + u.d. */ - return a1 + u.d; - } - else if (__glibc_likely (adjust > 0)) - { - if ((u.ieee.mantissa3 & 1) == 0 && u.ieee.exponent != 0x7fff) - u.ieee.mantissa3 |= fetestexcept (FE_INEXACT) != 0; - feupdateenv (&env); - /* Result is a1 + u.d, scaled up. */ - return (a1 + u.d) * L(0x1p113); - } - else - { - if ((u.ieee.mantissa3 & 1) == 0) - u.ieee.mantissa3 |= fetestexcept (FE_INEXACT) != 0; - v.d = a1 + u.d; - /* Ensure the addition is not scheduled after fetestexcept call. */ - math_force_eval (v.d); - int j = fetestexcept (FE_INEXACT) != 0; - feupdateenv (&env); - /* Ensure the following computations are performed in default rounding - mode instead of just reusing the round to zero computation. */ - asm volatile ("" : "=m" (u) : "m" (u)); - /* If a1 + u.d is exact, the only rounding happens during - scaling down. */ - if (j == 0) - return v.d * L(0x1p-228); - /* If result rounded to zero is not subnormal, no double - rounding will occur. */ - if (v.ieee.exponent > 228) - return (a1 + u.d) * L(0x1p-228); - /* If v.d * 0x1p-228L with round to zero is a subnormal above - or equal to LDBL_MIN / 2, then v.d * 0x1p-228L shifts mantissa - down just by 1 bit, which means v.ieee.mantissa3 |= j would - change the round bit, not sticky or guard bit. - v.d * 0x1p-228L never normalizes by shifting up, - so round bit plus sticky bit should be already enough - for proper rounding. */ - if (v.ieee.exponent == 228) - { - /* If the exponent would be in the normal range when - rounding to normal precision with unbounded exponent - range, the exact result is known and spurious underflows - must be avoided on systems detecting tininess after - rounding. */ - if (TININESS_AFTER_ROUNDING) - { - w.d = a1 + u.d; - if (w.ieee.exponent == 229) - return w.d * L(0x1p-228); - } - /* v.ieee.mantissa3 & 2 is LSB bit of the result before rounding, - v.ieee.mantissa3 & 1 is the round bit and j is our sticky - bit. */ - w.d = 0; - w.ieee.mantissa3 = ((v.ieee.mantissa3 & 3) << 1) | j; - w.ieee.negative = v.ieee.negative; - v.ieee.mantissa3 &= ~3U; - v.d *= L(0x1p-228); - w.d *= L(0x1p-2); - return v.d + w.d; - } - v.ieee.mantissa3 |= j; - return v.d * L(0x1p-228); - } -} -weak_alias (__fmal, fmal) diff --git a/sysdeps/ieee754/ldbl-128/s_fpclassifyl.c b/sysdeps/ieee754/ldbl-128/s_fpclassifyl.c deleted file mode 100644 index daa7d79ec2..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_fpclassifyl.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Return classification value corresponding to argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -int -__fpclassifyl (_Float128 x) -{ - u_int64_t hx, lx; - int retval = FP_NORMAL; - - GET_LDOUBLE_WORDS64 (hx, lx, x); - lx |= (hx & 0x0000ffffffffffffLL); - hx &= 0x7fff000000000000LL; - if ((hx | lx) == 0) - retval = FP_ZERO; - else if (hx == 0) - retval = FP_SUBNORMAL; - else if (hx == 0x7fff000000000000LL) - retval = lx != 0 ? FP_NAN : FP_INFINITE; - - return retval; -} -libm_hidden_def (__fpclassifyl) diff --git a/sysdeps/ieee754/ldbl-128/s_frexpl.c b/sysdeps/ieee754/ldbl-128/s_frexpl.c deleted file mode 100644 index 47a171f551..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_frexpl.c +++ /dev/null @@ -1,54 +0,0 @@ -/* s_frexpl.c -- long double version of s_frexp.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * for non-zero x - * x = frexpl(arg,&exp); - * return a long double fp quantity x such that 0.5 <= |x| <1.0 - * and the corresponding binary exponent "exp". That is - * arg = x*2^exp. - * If arg is inf, 0.0, or NaN, then frexpl(arg,&exp) returns arg - * with *exp=0. - */ - -#include -#include - -static const _Float128 -two114 = L(2.0769187434139310514121985316880384E+34); /* 0x4071000000000000, 0 */ - -_Float128 __frexpl(_Float128 x, int *eptr) -{ - u_int64_t hx, lx, ix; - GET_LDOUBLE_WORDS64(hx,lx,x); - ix = 0x7fffffffffffffffULL&hx; - *eptr = 0; - if(ix>=0x7fff000000000000ULL||((ix|lx)==0)) return x + x;/* 0,inf,nan */ - if (ix<0x0001000000000000ULL) { /* subnormal */ - x *= two114; - GET_LDOUBLE_MSW64(hx,x); - ix = hx&0x7fffffffffffffffULL; - *eptr = -114; - } - *eptr += (ix>>48)-16382; - hx = (hx&0x8000ffffffffffffULL) | 0x3ffe000000000000ULL; - SET_LDOUBLE_MSW64(x,hx); - return x; -} -weak_alias (__frexpl, frexpl) diff --git a/sysdeps/ieee754/ldbl-128/s_fromfpl.c b/sysdeps/ieee754/ldbl-128/s_fromfpl.c deleted file mode 100644 index e323b4c25b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_fromfpl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 0 -#define INEXACT 0 -#define FUNC fromfpl -#include diff --git a/sysdeps/ieee754/ldbl-128/s_fromfpl_main.c b/sysdeps/ieee754/ldbl-128/s_fromfpl_main.c deleted file mode 100644 index 7dc507111b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_fromfpl_main.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Round to integer type. ldbl-128 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#define BIAS 0x3fff -#define MANT_DIG 113 - -#if UNSIGNED -# define RET_TYPE uintmax_t -#else -# define RET_TYPE intmax_t -#endif - -#include - -RET_TYPE -FUNC (_Float128 x, int round, unsigned int width) -{ - if (width > INTMAX_WIDTH) - width = INTMAX_WIDTH; - uint64_t hx, lx; - GET_LDOUBLE_WORDS64 (hx, lx, x); - bool negative = (hx & 0x8000000000000000ULL) != 0; - if (width == 0) - return fromfp_domain_error (negative, width); - hx &= 0x7fffffffffffffffULL; - if ((hx | lx) == 0) - return 0; - int exponent = hx >> (MANT_DIG - 1 - 64); - exponent -= BIAS; - int max_exponent = fromfp_max_exponent (negative, width); - if (exponent > max_exponent) - return fromfp_domain_error (negative, width); - - hx &= ((1ULL << (MANT_DIG - 1 - 64)) - 1); - hx |= 1ULL << (MANT_DIG - 1 - 64); - uintmax_t uret; - bool half_bit, more_bits; - /* The exponent is at most 63, so we are shifting right by at least - 49 bits. */ - if (exponent >= -1) - { - int shift = MANT_DIG - 1 - exponent; - if (shift <= 64) - { - uint64_t h = 1ULL << (shift - 1); - half_bit = (lx & h) != 0; - more_bits = (lx & (h - 1)) != 0; - uret = hx << (64 - shift); - if (shift != 64) - uret |= lx >> shift; - } - else - { - uint64_t h = 1ULL << (shift - 1 - 64); - half_bit = (hx & h) != 0; - more_bits = ((hx & (h - 1)) | lx) != 0; - uret = hx >> (shift - 64); - } - } - else - { - uret = 0; - half_bit = false; - more_bits = true; - } - return fromfp_round_and_return (negative, uret, half_bit, more_bits, round, - exponent, max_exponent, width); -} diff --git a/sysdeps/ieee754/ldbl-128/s_fromfpxl.c b/sysdeps/ieee754/ldbl-128/s_fromfpxl.c deleted file mode 100644 index 2f3189d7de..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_fromfpxl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 0 -#define INEXACT 1 -#define FUNC fromfpxl -#include diff --git a/sysdeps/ieee754/ldbl-128/s_getpayloadl.c b/sysdeps/ieee754/ldbl-128/s_getpayloadl.c deleted file mode 100644 index d384645532..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_getpayloadl.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Get NaN payload. ldbl-128 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -_Float128 -getpayloadl (const _Float128 *x) -{ - uint64_t hx, lx; - GET_LDOUBLE_WORDS64 (hx, lx, *x); - hx &= 0x7fffffffffffULL; - /* Construct the representation of the return value directly, since - 128-bit integers may not be available. */ - int lz; - if (hx == 0) - { - if (lx == 0) - return 0.0L; - else - lz = __builtin_clzll (lx) + 64; - } - else - lz = __builtin_clzll (hx); - int shift = lz - 15; - if (shift >= 64) - { - hx = lx << (shift - 64); - lx = 0; - } - else - { - /* 2 <= SHIFT <= 63. */ - hx = (hx << shift) | (lx >> (64 - shift)); - lx <<= shift; - } - hx = (hx & 0xffffffffffffULL) | ((0x3fffULL + 127 - lz) << 48); - _Float128 ret; - SET_LDOUBLE_WORDS64 (ret, hx, lx); - return ret; -} diff --git a/sysdeps/ieee754/ldbl-128/s_isinfl.c b/sysdeps/ieee754/ldbl-128/s_isinfl.c deleted file mode 100644 index a41e8cf44b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_isinfl.c +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Written by J.T. Conklin . - * Change for long double by Jakub Jelinek - * Public domain. - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * isinfl(x) returns 1 if x is inf, -1 if x is -inf, else 0; - * no branching! - */ - -#include -#include - -int -__isinfl (_Float128 x) -{ - int64_t hx,lx; - GET_LDOUBLE_WORDS64(hx,lx,x); - lx |= (hx & 0x7fffffffffffffffLL) ^ 0x7fff000000000000LL; - lx |= -lx; - return ~(lx >> 63) & (hx >> 62); -} -mathx_hidden_def (__isinfl) -weak_alias (__isinfl, isinfl) diff --git a/sysdeps/ieee754/ldbl-128/s_isnanl.c b/sysdeps/ieee754/ldbl-128/s_isnanl.c deleted file mode 100644 index 80f97fea4c..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_isnanl.c +++ /dev/null @@ -1,38 +0,0 @@ -/* s_isnanl.c -- long double version of s_isnan.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * isnanl(x) returns 1 is x is nan, else 0; - * no branching! - */ - -#include -#include - -int __isnanl(_Float128 x) -{ - int64_t hx,lx; - GET_LDOUBLE_WORDS64(hx,lx,x); - hx &= 0x7fffffffffffffffLL; - hx |= (u_int64_t)(lx|(-lx))>>63; - hx = 0x7fff000000000000LL - hx; - return (int)((u_int64_t)hx>>63); -} -mathx_hidden_def (__isnanl) -weak_alias (__isnanl, isnanl) diff --git a/sysdeps/ieee754/ldbl-128/s_issignalingl.c b/sysdeps/ieee754/ldbl-128/s_issignalingl.c deleted file mode 100644 index 02d6a0ae07..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_issignalingl.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Test for signaling NaN. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__issignalingl (_Float128 x) -{ - u_int64_t hxi, lxi __attribute__ ((unused)); - GET_LDOUBLE_WORDS64 (hxi, lxi, x); -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - /* We only have to care about the high-order bit of x's significand, because - having it set (sNaN) already makes the significand different from that - used to designate infinity. */ - return ((hxi & UINT64_C (0x7fff800000000000)) - == UINT64_C (0x7fff800000000000)); -#else - /* To keep the following comparison simple, toggle the quiet/signaling bit, - so that it is set for sNaNs. This is inverse to IEEE 754-2008 (as well as - common practice for IEEE 754-1985). */ - hxi ^= UINT64_C (0x0000800000000000); - /* If lxi != 0, then set any suitable bit of the significand in hxi. */ - hxi |= (lxi | -lxi) >> 63; - /* We have to compare for greater (instead of greater or equal), because x's - significand being all-zero designates infinity not NaN. */ - return (hxi & UINT64_C (0x7fffffffffffffff)) > UINT64_C (0x7fff800000000000); -#endif -} -libm_hidden_def (__issignalingl) diff --git a/sysdeps/ieee754/ldbl-128/s_llrintl.c b/sysdeps/ieee754/ldbl-128/s_llrintl.c deleted file mode 100644 index d08a90a1b3..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_llrintl.c +++ /dev/null @@ -1,108 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -static const _Float128 two112[2] = -{ - L(5.19229685853482762853049632922009600E+33), /* 0x406F000000000000, 0 */ - L(-5.19229685853482762853049632922009600E+33) /* 0xC06F000000000000, 0 */ -}; - -long long int -__llrintl (_Float128 x) -{ - int32_t j0; - u_int64_t i0,i1; - _Float128 w; - _Float128 t; - long long int result; - int sx; - - GET_LDOUBLE_WORDS64 (i0, i1, x); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - sx = i0 >> 63; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; - - if (j0 < (int32_t) (8 * sizeof (long long int)) - 1) - { -#if defined FE_INVALID || defined FE_INEXACT - /* X < LLONG_MAX + 1 implied by J0 < 63. */ - if (x > (_Float128) LLONG_MAX) - { - /* In the event of overflow we must raise the "invalid" - exception, but not "inexact". */ - t = __nearbyintl (x); - feraiseexcept (t == LLONG_MAX ? FE_INEXACT : FE_INVALID); - } - else -#endif - { - w = two112[sx] + x; - t = w - two112[sx]; - } - GET_LDOUBLE_WORDS64 (i0, i1, t); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; - - if (j0 < 0) - result = 0; - else if (j0 <= 48) - result = i0 >> (48 - j0); - else - result = ((long long int) i0 << (j0 - 48)) | (i1 >> (112 - j0)); - } - else - { - /* The number is too large. Unless it rounds to LLONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ -#if defined FE_INVALID || defined FE_INEXACT - if (x < (_Float128) LLONG_MIN - && x > (_Float128) LLONG_MIN - 1) - { - /* If truncation produces LLONG_MIN, the cast will not raise - the exception, but may raise "inexact". */ - t = __nearbyintl (x); - feraiseexcept (t == LLONG_MIN ? FE_INEXACT : FE_INVALID); - return LLONG_MIN; - } - else if (FIX_LDBL_LLONG_CONVERT_OVERFLOW && x != (_Float128) LLONG_MIN) - { - feraiseexcept (FE_INVALID); - return sx == 0 ? LLONG_MAX : LLONG_MIN; - } - -#endif - return (long long int) x; - } - - return sx ? -result : result; -} - -weak_alias (__llrintl, llrintl) diff --git a/sysdeps/ieee754/ldbl-128/s_llroundl.c b/sysdeps/ieee754/ldbl-128/s_llroundl.c deleted file mode 100644 index bb0b5bcf4b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_llroundl.c +++ /dev/null @@ -1,102 +0,0 @@ -/* Round long double value to long long int. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -long long int -__llroundl (_Float128 x) -{ - int64_t j0; - u_int64_t i1, i0; - long long int result; - int sign; - - GET_LDOUBLE_WORDS64 (i0, i1, x); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - sign = (i0 & 0x8000000000000000ULL) != 0 ? -1 : 1; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; - - if (j0 < 48) - { - if (j0 < 0) - return j0 < -1 ? 0 : sign; - else - { - i0 += 0x0000800000000000LL >> j0; - result = i0 >> (48 - j0); - } - } - else if (j0 < (int32_t) (8 * sizeof (long long int)) - 1) - { - if (j0 >= 112) - result = ((long long int) i0 << (j0 - 48)) | (i1 << (j0 - 112)); - else - { - u_int64_t j = i1 + (0x8000000000000000ULL >> (j0 - 48)); - if (j < i1) - ++i0; - - if (j0 == 48) - result = (long long int) i0; - else - { - result = ((long long int) i0 << (j0 - 48)) | (j >> (112 - j0)); -#ifdef FE_INVALID - if (sign == 1 && result == LLONG_MIN) - /* Rounding brought the value out of range. */ - feraiseexcept (FE_INVALID); -#endif - } - } - } - else - { - /* The number is too large. Unless it rounds to LLONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ -#ifdef FE_INVALID - if (FIX_LDBL_LLONG_CONVERT_OVERFLOW - && !(sign == -1 && x > (_Float128) LLONG_MIN - L(0.5))) - { - feraiseexcept (FE_INVALID); - return sign == 1 ? LLONG_MAX : LLONG_MIN; - } - else if (!FIX_LDBL_LLONG_CONVERT_OVERFLOW - && x <= (_Float128) LLONG_MIN - L(0.5)) - { - /* If truncation produces LLONG_MIN, the cast will not raise - the exception, but may raise "inexact". */ - feraiseexcept (FE_INVALID); - return LLONG_MIN; - } -#endif - return (long long int) x; - } - - return sign * result; -} - -weak_alias (__llroundl, llroundl) diff --git a/sysdeps/ieee754/ldbl-128/s_log1pl.c b/sysdeps/ieee754/ldbl-128/s_log1pl.c deleted file mode 100644 index b8b2ffeba1..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_log1pl.c +++ /dev/null @@ -1,256 +0,0 @@ -/* log1pl.c - * - * Relative error logarithm - * Natural logarithm of 1+x, 128-bit long double precision - * - * - * - * SYNOPSIS: - * - * long double x, y, log1pl(); - * - * y = log1pl( x ); - * - * - * - * DESCRIPTION: - * - * Returns the base e (2.718...) logarithm of 1+x. - * - * The argument 1+x is separated into its exponent and fractional - * parts. If the exponent is between -1 and +1, the logarithm - * of the fraction is approximated by - * - * log(1+x) = x - 0.5 x^2 + x^3 P(x)/Q(x). - * - * Otherwise, setting z = 2(w-1)/(w+1), - * - * log(w) = z + z^3 P(z)/Q(z). - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -1, 8 100000 1.9e-34 4.3e-35 - */ - -/* Copyright 2001 by Stephen L. Moshier - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - - -#include -#include -#include - -/* Coefficients for log(1+x) = x - x^2 / 2 + x^3 P(x)/Q(x) - * 1/sqrt(2) <= 1+x < sqrt(2) - * Theoretical peak relative error = 5.3e-37, - * relative peak error spread = 2.3e-14 - */ -static const _Float128 - P12 = L(1.538612243596254322971797716843006400388E-6), - P11 = L(4.998469661968096229986658302195402690910E-1), - P10 = L(2.321125933898420063925789532045674660756E1), - P9 = L(4.114517881637811823002128927449878962058E2), - P8 = L(3.824952356185897735160588078446136783779E3), - P7 = L(2.128857716871515081352991964243375186031E4), - P6 = L(7.594356839258970405033155585486712125861E4), - P5 = L(1.797628303815655343403735250238293741397E5), - P4 = L(2.854829159639697837788887080758954924001E5), - P3 = L(3.007007295140399532324943111654767187848E5), - P2 = L(2.014652742082537582487669938141683759923E5), - P1 = L(7.771154681358524243729929227226708890930E4), - P0 = L(1.313572404063446165910279910527789794488E4), - /* Q12 = 1.000000000000000000000000000000000000000E0L, */ - Q11 = L(4.839208193348159620282142911143429644326E1), - Q10 = L(9.104928120962988414618126155557301584078E2), - Q9 = L(9.147150349299596453976674231612674085381E3), - Q8 = L(5.605842085972455027590989944010492125825E4), - Q7 = L(2.248234257620569139969141618556349415120E5), - Q6 = L(6.132189329546557743179177159925690841200E5), - Q5 = L(1.158019977462989115839826904108208787040E6), - Q4 = L(1.514882452993549494932585972882995548426E6), - Q3 = L(1.347518538384329112529391120390701166528E6), - Q2 = L(7.777690340007566932935753241556479363645E5), - Q1 = L(2.626900195321832660448791748036714883242E5), - Q0 = L(3.940717212190338497730839731583397586124E4); - -/* Coefficients for log(x) = z + z^3 P(z^2)/Q(z^2), - * where z = 2(x-1)/(x+1) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 1.1e-35, - * relative peak error spread 1.1e-9 - */ -static const _Float128 - R5 = L(-8.828896441624934385266096344596648080902E-1), - R4 = L(8.057002716646055371965756206836056074715E1), - R3 = L(-2.024301798136027039250415126250455056397E3), - R2 = L(2.048819892795278657810231591630928516206E4), - R1 = L(-8.977257995689735303686582344659576526998E4), - R0 = L(1.418134209872192732479751274970992665513E5), - /* S6 = 1.000000000000000000000000000000000000000E0L, */ - S5 = L(-1.186359407982897997337150403816839480438E2), - S4 = L(3.998526750980007367835804959888064681098E3), - S3 = L(-5.748542087379434595104154610899551484314E4), - S2 = L(4.001557694070773974936904547424676279307E5), - S1 = L(-1.332535117259762928288745111081235577029E6), - S0 = L(1.701761051846631278975701529965589676574E6); - -/* C1 + C2 = ln 2 */ -static const _Float128 C1 = L(6.93145751953125E-1); -static const _Float128 C2 = L(1.428606820309417232121458176568075500134E-6); - -static const _Float128 sqrth = L(0.7071067811865475244008443621048490392848); -/* ln (2^16384 * (1 - 2^-113)) */ -static const _Float128 zero = 0; - -_Float128 -__log1pl (_Float128 xm1) -{ - _Float128 x, y, z, r, s; - ieee854_long_double_shape_type u; - int32_t hx; - int e; - - /* Test for NaN or infinity input. */ - u.value = xm1; - hx = u.parts32.w0; - if ((hx & 0x7fffffff) >= 0x7fff0000) - return xm1 + fabsl (xm1); - - /* log1p(+- 0) = +- 0. */ - if (((hx & 0x7fffffff) == 0) - && (u.parts32.w1 | u.parts32.w2 | u.parts32.w3) == 0) - return xm1; - - if ((hx & 0x7fffffff) < 0x3f8e0000) - { - math_check_force_underflow (xm1); - if ((int) xm1 == 0) - return xm1; - } - - if (xm1 >= L(0x1p113)) - x = xm1; - else - x = xm1 + 1; - - /* log1p(-1) = -inf */ - if (x <= 0) - { - if (x == 0) - return (-1 / zero); /* log1p(-1) = -inf */ - else - return (zero / (x - x)); - } - - /* Separate mantissa from exponent. */ - - /* Use frexp used so that denormal numbers will be handled properly. */ - x = __frexpl (x, &e); - - /* Logarithm using log(x) = z + z^3 P(z^2)/Q(z^2), - where z = 2(x-1)/x+1). */ - if ((e > 2) || (e < -2)) - { - if (x < sqrth) - { /* 2( 2x-1 )/( 2x+1 ) */ - e -= 1; - z = x - L(0.5); - y = L(0.5) * z + L(0.5); - } - else - { /* 2 (x-1)/(x+1) */ - z = x - L(0.5); - z -= L(0.5); - y = L(0.5) * x + L(0.5); - } - x = z / y; - z = x * x; - r = ((((R5 * z - + R4) * z - + R3) * z - + R2) * z - + R1) * z - + R0; - s = (((((z - + S5) * z - + S4) * z - + S3) * z - + S2) * z - + S1) * z - + S0; - z = x * (z * r / s); - z = z + e * C2; - z = z + x; - z = z + e * C1; - return (z); - } - - - /* Logarithm using log(1+x) = x - .5x^2 + x^3 P(x)/Q(x). */ - - if (x < sqrth) - { - e -= 1; - if (e != 0) - x = 2 * x - 1; /* 2x - 1 */ - else - x = xm1; - } - else - { - if (e != 0) - x = x - 1; - else - x = xm1; - } - z = x * x; - r = (((((((((((P12 * x - + P11) * x - + P10) * x - + P9) * x - + P8) * x - + P7) * x - + P6) * x - + P5) * x - + P4) * x - + P3) * x - + P2) * x - + P1) * x - + P0; - s = (((((((((((x - + Q11) * x - + Q10) * x - + Q9) * x - + Q8) * x - + Q7) * x - + Q6) * x - + Q5) * x - + Q4) * x - + Q3) * x - + Q2) * x - + Q1) * x - + Q0; - y = x * (z * r / s); - y = y + e * C2; - z = y - L(0.5) * z; - z = z + x; - z = z + e * C1; - return (z); -} diff --git a/sysdeps/ieee754/ldbl-128/s_logbl.c b/sysdeps/ieee754/ldbl-128/s_logbl.c deleted file mode 100644 index 24baae64fa..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_logbl.c +++ /dev/null @@ -1,54 +0,0 @@ -/* s_logbl.c -- long double version of s_logb.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * long double logbl(x) - * IEEE 754 logb. Included to pass IEEE test suite. Not recommend. - * Use ilogb instead. - */ - -#include -#include - -_Float128 -__logbl (_Float128 x) -{ - int64_t lx, hx, ex; - - GET_LDOUBLE_WORDS64 (hx, lx, x); - hx &= 0x7fffffffffffffffLL; /* high |x| */ - if ((hx | lx) == 0) - return -1.0 / fabsl (x); - if (hx >= 0x7fff000000000000LL) - return x * x; - if ((ex = hx >> 48) == 0) /* IEEE 754 logb */ - { - /* POSIX specifies that denormal number is treated as - though it were normalized. */ - int ma; - if (hx == 0) - ma = __builtin_clzll (lx) + 64; - else - ma = __builtin_clzll (hx); - ex -= ma - 16; - } - return (_Float128) (ex - 16383); -} - -weak_alias (__logbl, logbl) diff --git a/sysdeps/ieee754/ldbl-128/s_lrintl.c b/sysdeps/ieee754/ldbl-128/s_lrintl.c deleted file mode 100644 index c690ddc8b8..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_lrintl.c +++ /dev/null @@ -1,137 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -static const _Float128 two112[2] = -{ - L(5.19229685853482762853049632922009600E+33), /* 0x406F000000000000, 0 */ - L(-5.19229685853482762853049632922009600E+33) /* 0xC06F000000000000, 0 */ -}; - -long int -__lrintl (_Float128 x) -{ - int32_t j0; - u_int64_t i0,i1; - _Float128 w; - _Float128 t; - long int result; - int sx; - - GET_LDOUBLE_WORDS64 (i0, i1, x); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - sx = i0 >> 63; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; - - if (j0 < (int32_t) (8 * sizeof (long int)) - 1) - { - if (j0 < 48) - { -#if defined FE_INVALID || defined FE_INEXACT - /* X < LONG_MAX + 1 implied by J0 < 31. */ - if (sizeof (long int) == 4 - && x > (_Float128) LONG_MAX) - { - /* In the event of overflow we must raise the "invalid" - exception, but not "inexact". */ - t = __nearbyintl (x); - feraiseexcept (t == LONG_MAX ? FE_INEXACT : FE_INVALID); - } - else -#endif - { - w = two112[sx] + x; - t = w - two112[sx]; - } - GET_LDOUBLE_WORDS64 (i0, i1, t); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; - - result = (j0 < 0 ? 0 : i0 >> (48 - j0)); - } - else if (j0 >= 112) - result = ((long int) i0 << (j0 - 48)) | (i1 << (j0 - 112)); - else - { -#if defined FE_INVALID || defined FE_INEXACT - /* X < LONG_MAX + 1 implied by J0 < 63. */ - if (sizeof (long int) == 8 - && x > (_Float128) LONG_MAX) - { - /* In the event of overflow we must raise the "invalid" - exception, but not "inexact". */ - t = __nearbyintl (x); - feraiseexcept (t == LONG_MAX ? FE_INEXACT : FE_INVALID); - } - else -#endif - { - w = two112[sx] + x; - t = w - two112[sx]; - } - GET_LDOUBLE_WORDS64 (i0, i1, t); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; - - if (j0 == 48) - result = (long int) i0; - else - result = ((long int) i0 << (j0 - 48)) | (i1 >> (112 - j0)); - } - } - else - { - /* The number is too large. Unless it rounds to LONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ -#if defined FE_INVALID || defined FE_INEXACT - if (x < (_Float128) LONG_MIN - && x > (_Float128) LONG_MIN - 1) - { - /* If truncation produces LONG_MIN, the cast will not raise - the exception, but may raise "inexact". */ - t = __nearbyintl (x); - feraiseexcept (t == LONG_MIN ? FE_INEXACT : FE_INVALID); - return LONG_MIN; - } - else if (FIX_LDBL_LONG_CONVERT_OVERFLOW && x != (_Float128) LONG_MIN) - { - feraiseexcept (FE_INVALID); - return sx == 0 ? LONG_MAX : LONG_MIN; - } - -#endif - return (long int) x; - } - - return sx ? -result : result; -} - -weak_alias (__lrintl, lrintl) diff --git a/sysdeps/ieee754/ldbl-128/s_lroundl.c b/sysdeps/ieee754/ldbl-128/s_lroundl.c deleted file mode 100644 index 419112519d..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_lroundl.c +++ /dev/null @@ -1,113 +0,0 @@ -/* Round long double value to long int. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -long int -__lroundl (_Float128 x) -{ - int64_t j0; - u_int64_t i1, i0; - long int result; - int sign; - - GET_LDOUBLE_WORDS64 (i0, i1, x); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - sign = (i0 & 0x8000000000000000ULL) != 0 ? -1 : 1; - i0 &= 0x0000ffffffffffffLL; - i0 |= 0x0001000000000000LL; - - if (j0 < (int32_t) (8 * sizeof (long int)) - 1) - { - if (j0 < 48) - { - if (j0 < 0) - return j0 < -1 ? 0 : sign; - else - { - i0 += 0x0000800000000000LL >> j0; - result = i0 >> (48 - j0); -#ifdef FE_INVALID - if (sizeof (long int) == 4 - && sign == 1 - && result == LONG_MIN) - /* Rounding brought the value out of range. */ - feraiseexcept (FE_INVALID); -#endif - } - } - else if (j0 >= 112) - result = ((long int) i0 << (j0 - 48)) | (i1 << (j0 - 112)); - else - { - u_int64_t j = i1 + (0x8000000000000000ULL >> (j0 - 48)); - if (j < i1) - ++i0; - - if (j0 == 48) - result = (long int) i0; - else - { - result = ((long int) i0 << (j0 - 48)) | (j >> (112 - j0)); -#ifdef FE_INVALID - if (sizeof (long int) == 8 - && sign == 1 - && result == LONG_MIN) - /* Rounding brought the value out of range. */ - feraiseexcept (FE_INVALID); -#endif - } - } - } - else - { - /* The number is too large. Unless it rounds to LONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ -#ifdef FE_INVALID - if (FIX_LDBL_LONG_CONVERT_OVERFLOW - && !(sign == -1 && x > (_Float128) LONG_MIN - L(0.5))) - { - feraiseexcept (FE_INVALID); - return sign == 1 ? LONG_MAX : LONG_MIN; - } - else if (!FIX_LDBL_LONG_CONVERT_OVERFLOW - && x <= (_Float128) LONG_MIN - L(0.5)) - { - /* If truncation produces LONG_MIN, the cast will not raise - the exception, but may raise "inexact". */ - feraiseexcept (FE_INVALID); - return LONG_MIN; - } -#endif - /* The number is too large. It is left implementation defined - what happens. */ - return (long int) x; - } - - return sign * result; -} - -weak_alias (__lroundl, lroundl) diff --git a/sysdeps/ieee754/ldbl-128/s_modfl.c b/sysdeps/ieee754/ldbl-128/s_modfl.c deleted file mode 100644 index 01e150b24f..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_modfl.c +++ /dev/null @@ -1,79 +0,0 @@ -/* s_modfl.c -- long double version of s_modf.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * modfl(long double x, long double *iptr) - * return fraction part of x, and return x's integral part in *iptr. - * Method: - * Bit twiddling. - * - * Exception: - * No exception. - */ - -#include -#include - -static const _Float128 one = 1.0; - -_Float128 __modfl(_Float128 x, _Float128 *iptr) -{ - int64_t i0,i1,j0; - u_int64_t i; - GET_LDOUBLE_WORDS64(i0,i1,x); - j0 = ((i0>>48)&0x7fff)-0x3fff; /* exponent of x */ - if(j0<48) { /* integer part in high x */ - if(j0<0) { /* |x|<1 */ - /* *iptr = +-0 */ - SET_LDOUBLE_WORDS64(*iptr,i0&0x8000000000000000ULL,0); - return x; - } else { - i = (0x0000ffffffffffffLL)>>j0; - if(((i0&i)|i1)==0) { /* x is integral */ - *iptr = x; - /* return +-0 */ - SET_LDOUBLE_WORDS64(x,i0&0x8000000000000000ULL,0); - return x; - } else { - SET_LDOUBLE_WORDS64(*iptr,i0&(~i),0); - return x - *iptr; - } - } - } else if (j0>111) { /* no fraction part */ - *iptr = x*one; - /* We must handle NaNs separately. */ - if (j0 == 0x4000 && ((i0 & 0x0000ffffffffffffLL) | i1)) - return x*one; - /* return +-0 */ - SET_LDOUBLE_WORDS64(x,i0&0x8000000000000000ULL,0); - return x; - } else { /* fraction part in low x */ - i = -1ULL>>(j0-48); - if((i1&i)==0) { /* x is integral */ - *iptr = x; - /* return +-0 */ - SET_LDOUBLE_WORDS64(x,i0&0x8000000000000000ULL,0); - return x; - } else { - SET_LDOUBLE_WORDS64(*iptr,i0,i1&(~i)); - return x - *iptr; - } - } -} -weak_alias (__modfl, modfl) diff --git a/sysdeps/ieee754/ldbl-128/s_nearbyintl.c b/sysdeps/ieee754/ldbl-128/s_nearbyintl.c deleted file mode 100644 index 1565a8183f..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_nearbyintl.c +++ /dev/null @@ -1,67 +0,0 @@ -/* s_nearbyintl.c -- long double version of s_nearbyint.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * nearbyintl(x) - * Return x rounded to integral value according to the prevailing - * rounding mode. - * Method: - * Using floating addition. - * Exception: - * Inexact flag raised if x not equal to rintl(x). - */ - -#include -#include -#include - -static const _Float128 -TWO112[2]={ - L(5.19229685853482762853049632922009600E+33), /* 0x406F000000000000, 0 */ - L(-5.19229685853482762853049632922009600E+33) /* 0xC06F000000000000, 0 */ -}; - -_Float128 __nearbyintl(_Float128 x) -{ - fenv_t env; - int64_t i0,j0,sx; - u_int64_t i1 __attribute__ ((unused)); - _Float128 w,t; - GET_LDOUBLE_WORDS64(i0,i1,x); - sx = (((u_int64_t)i0)>>63); - j0 = ((i0>>48)&0x7fff)-0x3fff; - if(j0<112) { - if(j0<0) { - feholdexcept (&env); - w = TWO112[sx]+x; - t = w-TWO112[sx]; - math_force_eval (t); - fesetenv (&env); - GET_LDOUBLE_MSW64(i0,t); - SET_LDOUBLE_MSW64(t,(i0&0x7fffffffffffffffLL)|(sx<<63)); - return t; - } - } else { - if(j0==0x4000) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } - feholdexcept (&env); - w = TWO112[sx]+x; - t = w-TWO112[sx]; - math_force_eval (t); - fesetenv (&env); - return t; -} -weak_alias (__nearbyintl, nearbyintl) diff --git a/sysdeps/ieee754/ldbl-128/s_nextafterl.c b/sysdeps/ieee754/ldbl-128/s_nextafterl.c deleted file mode 100644 index d29f58a7e0..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_nextafterl.c +++ /dev/null @@ -1,86 +0,0 @@ -/* s_nextafterl.c -- long double version of s_nextafter.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* IEEE functions - * nextafterl(x,y) - * return the next machine floating-point number of x in the - * direction toward y. - * Special cases: - */ - -#include -#include -#include - -_Float128 __nextafterl(_Float128 x, _Float128 y) -{ - int64_t hx,hy,ix,iy; - u_int64_t lx,ly; - - GET_LDOUBLE_WORDS64(hx,lx,x); - GET_LDOUBLE_WORDS64(hy,ly,y); - ix = hx&0x7fffffffffffffffLL; /* |x| */ - iy = hy&0x7fffffffffffffffLL; /* |y| */ - - if(((ix>=0x7fff000000000000LL)&&((ix-0x7fff000000000000LL)|lx)!=0) || /* x is nan */ - ((iy>=0x7fff000000000000LL)&&((iy-0x7fff000000000000LL)|ly)!=0)) /* y is nan */ - return x+y; - if(x==y) return y; /* x=y, return y */ - if((ix|lx)==0) { /* x == 0 */ - _Float128 u; - SET_LDOUBLE_WORDS64(x,hy&0x8000000000000000ULL,1);/* return +-minsubnormal */ - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(hx>=0) { /* x > 0 */ - if(hx>hy||((hx==hy)&&(lx>ly))) { /* x > y, x -= ulp */ - if(lx==0) hx--; - lx--; - } else { /* x < y, x += ulp */ - lx++; - if(lx==0) hx++; - } - } else { /* x < 0 */ - if(hy>=0||hx>hy||((hx==hy)&&(lx>ly))){/* x < y, x -= ulp */ - if(lx==0) hx--; - lx--; - } else { /* x > y, x += ulp */ - lx++; - if(lx==0) hx++; - } - } - hy = hx&0x7fff000000000000LL; - if(hy==0x7fff000000000000LL) { - _Float128 u = x + x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(hy==0) { - _Float128 u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - SET_LDOUBLE_WORDS64(x,hx,lx); - return x; -} -weak_alias (__nextafterl, nextafterl) -strong_alias (__nextafterl, __nexttowardl) -weak_alias (__nextafterl, nexttowardl) diff --git a/sysdeps/ieee754/ldbl-128/s_nexttoward.c b/sysdeps/ieee754/ldbl-128/s_nexttoward.c deleted file mode 100644 index 4343fe83f8..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_nexttoward.c +++ /dev/null @@ -1,89 +0,0 @@ -/* s_nexttoward.c - * Conversion from s_nextafter.c by Ulrich Drepper, Cygnus Support, - * drepper@cygnus.com and Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* IEEE functions - * nexttoward(x,y) - * return the next machine floating-point number of x in the - * direction toward y. - * Special cases: - */ - -#include -#include -#include -#include - -double __nexttoward(double x, long double y) -{ - int32_t hx,ix; - int64_t hy,iy; - u_int32_t lx; - u_int64_t ly; - - EXTRACT_WORDS(hx,lx,x); - GET_LDOUBLE_WORDS64(hy,ly,y); - ix = hx&0x7fffffff; /* |x| */ - iy = hy&0x7fffffffffffffffLL; /* |y| */ - - if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || /* x is nan */ - ((iy>=0x7fff000000000000LL)&&((iy-0x7fff000000000000LL)|ly)!=0)) - /* y is nan */ - return x+y; - if((long double) x==y) return y; /* x=y, return y */ - if((ix|lx)==0) { /* x == 0 */ - double u; - INSERT_WORDS(x,(u_int32_t)((hy>>32)&0x80000000),1);/* return +-minsub */ - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(hx>=0) { /* x > 0 */ - if (x > y) { /* x -= ulp */ - if(lx==0) hx -= 1; - lx -= 1; - } else { /* x < y, x += ulp */ - lx += 1; - if(lx==0) hx += 1; - } - } else { /* x < 0 */ - if (x < y) { /* x -= ulp */ - if(lx==0) hx -= 1; - lx -= 1; - } else { /* x > y, x += ulp */ - lx += 1; - if(lx==0) hx += 1; - } - } - hy = hx&0x7ff00000; - if(hy>=0x7ff00000) { - double u = x+x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(hy<0x00100000) { - double u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - INSERT_WORDS(x,hx,lx); - return x; -} -weak_alias (__nexttoward, nexttoward) diff --git a/sysdeps/ieee754/ldbl-128/s_nexttowardf.c b/sysdeps/ieee754/ldbl-128/s_nexttowardf.c deleted file mode 100644 index 8703359d4f..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_nexttowardf.c +++ /dev/null @@ -1,76 +0,0 @@ -/* s_nexttowardf.c -- float version of s_nextafter.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com - * and Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -#include -#include -#include - -float __nexttowardf(float x, long double y) -{ - int32_t hx,ix; - int64_t hy,iy; - u_int64_t ly; - - GET_FLOAT_WORD(hx,x); - GET_LDOUBLE_WORDS64(hy,ly,y); - ix = hx&0x7fffffff; /* |x| */ - iy = hy&0x7fffffffffffffffLL; /* |y| */ - - if((ix>0x7f800000) || /* x is nan */ - ((iy>=0x7fff000000000000LL)&&((iy-0x7fff000000000000LL)|ly)!=0)) - /* y is nan */ - return x+y; - if((long double) x==y) return y; /* x=y, return y */ - if(ix==0) { /* x == 0 */ - float u; - SET_FLOAT_WORD(x,(u_int32_t)((hy>>32)&0x80000000)|1);/* return +-minsub*/ - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(hx>=0) { /* x > 0 */ - if(x > y) { /* x -= ulp */ - hx -= 1; - } else { /* x < y, x += ulp */ - hx += 1; - } - } else { /* x < 0 */ - if(x < y) { /* x < y, x -= ulp */ - hx -= 1; - } else { /* x > y, x += ulp */ - hx += 1; - } - } - hy = hx&0x7f800000; - if(hy>=0x7f800000) { - float u = x+x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(hy<0x00800000) { - float u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - SET_FLOAT_WORD(x,hx); - return x; -} -weak_alias (__nexttowardf, nexttowardf) diff --git a/sysdeps/ieee754/ldbl-128/s_nextupl.c b/sysdeps/ieee754/ldbl-128/s_nextupl.c deleted file mode 100644 index 85f43b4eb0..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_nextupl.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Return the least floating-point number greater than X. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Return the least floating-point number greater than X. */ -_Float128 -__nextupl (_Float128 x) -{ - int64_t hx, ix; - u_int64_t lx; - - GET_LDOUBLE_WORDS64 (hx, lx, x); - ix = hx & 0x7fffffffffffffffLL; - - /* x is nan. */ - if (((ix >= 0x7fff000000000000LL) - && ((ix - 0x7fff000000000000LL) | lx) != 0)) - return x + x; - if ((ix | lx) == 0) - return LDBL_TRUE_MIN; - if (hx >= 0) - { /* x > 0. */ - if (isinf (x)) - return x; - lx++; - if (lx == 0) - hx++; - } - else - { /* x < 0. */ - if (lx == 0) - hx--; - lx--; - } - SET_LDOUBLE_WORDS64 (x, hx, lx); - return x; -} - -weak_alias (__nextupl, nextupl) diff --git a/sysdeps/ieee754/ldbl-128/s_remquol.c b/sysdeps/ieee754/ldbl-128/s_remquol.c deleted file mode 100644 index d360f82dba..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_remquol.c +++ /dev/null @@ -1,112 +0,0 @@ -/* Compute remainder and a congruent to the quotient. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -static const _Float128 zero = 0.0; - - -_Float128 -__remquol (_Float128 x, _Float128 y, int *quo) -{ - int64_t hx,hy; - u_int64_t sx,lx,ly,qs; - int cquo; - - GET_LDOUBLE_WORDS64 (hx, lx, x); - GET_LDOUBLE_WORDS64 (hy, ly, y); - sx = hx & 0x8000000000000000ULL; - qs = sx ^ (hy & 0x8000000000000000ULL); - hy &= 0x7fffffffffffffffLL; - hx &= 0x7fffffffffffffffLL; - - /* Purge off exception values. */ - if ((hy | ly) == 0) - return (x * y) / (x * y); /* y = 0 */ - if ((hx >= 0x7fff000000000000LL) /* x not finite */ - || ((hy >= 0x7fff000000000000LL) /* y is NaN */ - && (((hy - 0x7fff000000000000LL) | ly) != 0))) - return (x * y) / (x * y); - - if (hy <= 0x7ffbffffffffffffLL) - x = __ieee754_fmodl (x, 8 * y); /* now x < 8y */ - - if (((hx - hy) | (lx - ly)) == 0) - { - *quo = qs ? -1 : 1; - return zero * x; - } - - x = fabsl (x); - y = fabsl (y); - cquo = 0; - - if (hy <= 0x7ffcffffffffffffLL && x >= 4 * y) - { - x -= 4 * y; - cquo += 4; - } - if (hy <= 0x7ffdffffffffffffLL && x >= 2 * y) - { - x -= 2 * y; - cquo += 2; - } - - if (hy < 0x0002000000000000LL) - { - if (x + x > y) - { - x -= y; - ++cquo; - if (x + x >= y) - { - x -= y; - ++cquo; - } - } - } - else - { - _Float128 y_half = L(0.5) * y; - if (x > y_half) - { - x -= y; - ++cquo; - if (x >= y_half) - { - x -= y; - ++cquo; - } - } - } - - *quo = qs ? -cquo : cquo; - - /* Ensure correct sign of zero result in round-downward mode. */ - if (x == 0) - x = 0; - if (sx) - x = -x; - return x; -} -weak_alias (__remquol, remquol) diff --git a/sysdeps/ieee754/ldbl-128/s_rintl.c b/sysdeps/ieee754/ldbl-128/s_rintl.c deleted file mode 100644 index 410951626b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_rintl.c +++ /dev/null @@ -1,62 +0,0 @@ -/* s_rintl.c -- long double version of s_rint.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * rintl(x) - * Return x rounded to integral value according to the prevailing - * rounding mode. - * Method: - * Using floating addition. - * Exception: - * Inexact flag raised if x not equal to rintl(x). - */ - -#include -#include - -static const _Float128 -TWO112[2]={ - 5.19229685853482762853049632922009600E+33L, /* 0x406F000000000000, 0 */ - -5.19229685853482762853049632922009600E+33L /* 0xC06F000000000000, 0 */ -}; - -_Float128 __rintl(_Float128 x) -{ - int64_t i0,j0,sx; - u_int64_t i1 __attribute__ ((unused)); - _Float128 w,t; - GET_LDOUBLE_WORDS64(i0,i1,x); - sx = (((u_int64_t)i0)>>63); - j0 = ((i0>>48)&0x7fff)-0x3fff; - if(j0<112) { - if(j0<0) { - w = TWO112[sx]+x; - t = w-TWO112[sx]; - GET_LDOUBLE_MSW64(i0,t); - SET_LDOUBLE_MSW64(t,(i0&0x7fffffffffffffffLL)|(sx<<63)); - return t; - } - } else { - if(j0==0x4000) return x+x; /* inf or NaN */ - else return x; /* x is integral */ - } - w = TWO112[sx]+x; - return w-TWO112[sx]; -} -weak_alias (__rintl, rintl) diff --git a/sysdeps/ieee754/ldbl-128/s_roundevenl.c b/sysdeps/ieee754/ldbl-128/s_roundevenl.c deleted file mode 100644 index 93b895546a..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_roundevenl.c +++ /dev/null @@ -1,102 +0,0 @@ -/* Round to nearest integer value, rounding halfway cases to even. - ldbl-128 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define BIAS 0x3fff -#define MANT_DIG 113 -#define MAX_EXP (2 * BIAS + 1) - -_Float128 -roundevenl (_Float128 x) -{ - uint64_t hx, lx, uhx; - GET_LDOUBLE_WORDS64 (hx, lx, x); - uhx = hx & 0x7fffffffffffffffULL; - int exponent = uhx >> (MANT_DIG - 1 - 64); - if (exponent >= BIAS + MANT_DIG - 1) - { - /* Integer, infinity or NaN. */ - if (exponent == MAX_EXP) - /* Infinity or NaN; quiet signaling NaNs. */ - return x + x; - else - return x; - } - else if (exponent >= BIAS + MANT_DIG - 64) - { - /* Not necessarily an integer; integer bit is in low word. - Locate the bits with exponents 0 and -1. */ - int int_pos = (BIAS + MANT_DIG - 1) - exponent; - int half_pos = int_pos - 1; - uint64_t half_bit = 1ULL << half_pos; - uint64_t int_bit = 1ULL << int_pos; - if ((lx & (int_bit | (half_bit - 1))) != 0) - { - /* Carry into the exponent works correctly. No need to test - whether HALF_BIT is set. */ - lx += half_bit; - hx += lx < half_bit; - } - lx &= ~(int_bit - 1); - } - else if (exponent == BIAS + MANT_DIG - 65) - { - /* Not necessarily an integer; integer bit is bottom of high - word, half bit is top of low word. */ - if (((hx & 1) | (lx & 0x7fffffffffffffffULL)) != 0) - { - lx += 0x8000000000000000ULL; - hx += lx < 0x8000000000000000ULL; - } - lx = 0; - } - else if (exponent >= BIAS) - { - /* At least 1; not necessarily an integer, integer bit and half - bit are in the high word. Locate the bits with exponents 0 - and -1 (when the unbiased exponent is 0, the bit with - exponent 0 is implicit, but as the bias is odd it is OK to - take it from the low bit of the exponent). */ - int int_pos = (BIAS + MANT_DIG - 65) - exponent; - int half_pos = int_pos - 1; - uint64_t half_bit = 1ULL << half_pos; - uint64_t int_bit = 1ULL << int_pos; - if (((hx & (int_bit | (half_bit - 1))) | lx) != 0) - hx += half_bit; - hx &= ~(int_bit - 1); - lx = 0; - } - else if (exponent == BIAS - 1 && (uhx > 0x3ffe000000000000ULL || lx != 0)) - { - /* Interval (0.5, 1). */ - hx = (hx & 0x8000000000000000ULL) | 0x3fff000000000000ULL; - lx = 0; - } - else - { - /* Rounds to 0. */ - hx &= 0x8000000000000000ULL; - lx = 0; - } - SET_LDOUBLE_WORDS64 (x, hx, lx); - return x; -} diff --git a/sysdeps/ieee754/ldbl-128/s_roundl.c b/sysdeps/ieee754/ldbl-128/s_roundl.c deleted file mode 100644 index 078d9b9c45..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_roundl.c +++ /dev/null @@ -1,80 +0,0 @@ -/* Round long double to integer away from zero. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -_Float128 -__roundl (_Float128 x) -{ - int32_t j0; - u_int64_t i1, i0; - - GET_LDOUBLE_WORDS64 (i0, i1, x); - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - if (j0 < 48) - { - if (j0 < 0) - { - i0 &= 0x8000000000000000ULL; - if (j0 == -1) - i0 |= 0x3fff000000000000LL; - i1 = 0; - } - else - { - u_int64_t i = 0x0000ffffffffffffLL >> j0; - if (((i0 & i) | i1) == 0) - /* X is integral. */ - return x; - - i0 += 0x0000800000000000LL >> j0; - i0 &= ~i; - i1 = 0; - } - } - else if (j0 > 111) - { - if (j0 == 0x4000) - /* Inf or NaN. */ - return x + x; - else - return x; - } - else - { - u_int64_t i = -1ULL >> (j0 - 48); - if ((i1 & i) == 0) - /* X is integral. */ - return x; - - u_int64_t j = i1 + (1LL << (111 - j0)); - if (j < i1) - i0 += 1; - i1 = j; - i1 &= ~i; - } - - SET_LDOUBLE_WORDS64 (x, i0, i1); - return x; -} -weak_alias (__roundl, roundl) diff --git a/sysdeps/ieee754/ldbl-128/s_scalblnl.c b/sysdeps/ieee754/ldbl-128/s_scalblnl.c deleted file mode 100644 index 5864eaf93c..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_scalblnl.c +++ /dev/null @@ -1,62 +0,0 @@ -/* s_scalblnl.c -- long double version of s_scalbn.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* @(#)s_scalbn.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * scalblnl (long double x, long int n) - * scalblnl(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include -#include - -static const _Float128 -two114 = L(2.0769187434139310514121985316880384E+34), /* 0x4071000000000000, 0 */ -twom114 = L(4.8148248609680896326399448564623183E-35), /* 0x3F8D000000000000, 0 */ -huge = L(1.0E+4900), -tiny = L(1.0E-4900); - -_Float128 __scalblnl (_Float128 x, long int n) -{ - int64_t k,hx,lx; - GET_LDOUBLE_WORDS64(hx,lx,x); - k = (hx>>48)&0x7fff; /* extract exponent */ - if (k==0) { /* 0 or subnormal x */ - if ((lx|(hx&0x7fffffffffffffffULL))==0) return x; /* +-0 */ - x *= two114; - GET_LDOUBLE_MSW64(hx,x); - k = ((hx>>48)&0x7fff) - 114; - } - if (k==0x7fff) return x+x; /* NaN or Inf */ - if (n< -50000) return tiny*__copysignl(tiny,x); /*underflow*/ - if (n> 50000 || k+n > 0x7ffe) - return huge*__copysignl(huge,x); /* overflow */ - /* Now k and n are bounded we know that k = k+n does not - overflow. */ - k = k+n; - if (k > 0) /* normal result */ - {SET_LDOUBLE_MSW64(x,(hx&0x8000ffffffffffffULL)|(k<<48)); return x;} - if (k <= -114) - return tiny*__copysignl(tiny,x); /*underflow*/ - k += 114; /* subnormal result */ - SET_LDOUBLE_MSW64(x,(hx&0x8000ffffffffffffULL)|(k<<48)); - return x*twom114; -} diff --git a/sysdeps/ieee754/ldbl-128/s_scalbnl.c b/sysdeps/ieee754/ldbl-128/s_scalbnl.c deleted file mode 100644 index e6fe796079..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_scalbnl.c +++ /dev/null @@ -1,62 +0,0 @@ -/* s_scalbnl.c -- long double version of s_scalbn.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* @(#)s_scalbn.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * scalbnl (long double x, int n) - * scalbnl(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include -#include - -static const _Float128 -two114 = L(2.0769187434139310514121985316880384E+34), /* 0x4071000000000000, 0 */ -twom114 = L(4.8148248609680896326399448564623183E-35), /* 0x3F8D000000000000, 0 */ -huge = L(1.0E+4900), -tiny = L(1.0E-4900); - -_Float128 __scalbnl (_Float128 x, int n) -{ - int64_t k,hx,lx; - GET_LDOUBLE_WORDS64(hx,lx,x); - k = (hx>>48)&0x7fff; /* extract exponent */ - if (k==0) { /* 0 or subnormal x */ - if ((lx|(hx&0x7fffffffffffffffULL))==0) return x; /* +-0 */ - x *= two114; - GET_LDOUBLE_MSW64(hx,x); - k = ((hx>>48)&0x7fff) - 114; - } - if (k==0x7fff) return x+x; /* NaN or Inf */ - if (n< -50000) return tiny*__copysignl(tiny,x); /*underflow*/ - if (n> 50000 || k+n > 0x7ffe) - return huge*__copysignl(huge,x); /* overflow */ - /* Now k and n are bounded we know that k = k+n does not - overflow. */ - k = k+n; - if (k > 0) /* normal result */ - {SET_LDOUBLE_MSW64(x,(hx&0x8000ffffffffffffULL)|(k<<48)); return x;} - if (k <= -114) - return tiny*__copysignl(tiny,x); /*underflow*/ - k += 114; /* subnormal result */ - SET_LDOUBLE_MSW64(x,(hx&0x8000ffffffffffffULL)|(k<<48)); - return x*twom114; -} diff --git a/sysdeps/ieee754/ldbl-128/s_setpayloadl.c b/sysdeps/ieee754/ldbl-128/s_setpayloadl.c deleted file mode 100644 index 1aba33e6e2..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_setpayloadl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SIG 0 -#define FUNC setpayloadl -#include diff --git a/sysdeps/ieee754/ldbl-128/s_setpayloadl_main.c b/sysdeps/ieee754/ldbl-128/s_setpayloadl_main.c deleted file mode 100644 index 5646634db2..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_setpayloadl_main.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Set NaN payload. ldbl-128 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#define SET_HIGH_BIT (HIGH_ORDER_BIT_IS_SET_FOR_SNAN ? SIG : !SIG) -#define BIAS 0x3fff -#define PAYLOAD_DIG 111 -#define EXPLICIT_MANT_DIG 112 - -int -FUNC (_Float128 *x, _Float128 payload) -{ - uint64_t hx, lx; - GET_LDOUBLE_WORDS64 (hx, lx, payload); - int exponent = hx >> (EXPLICIT_MANT_DIG - 64); - /* Test if argument is (a) negative or too large; (b) too small, - except for 0 when allowed; (c) not an integer. */ - if (exponent >= BIAS + PAYLOAD_DIG - || (exponent < BIAS && !(SET_HIGH_BIT && hx == 0 && lx == 0))) - { - SET_LDOUBLE_WORDS64 (*x, 0, 0); - return 1; - } - int shift = BIAS + EXPLICIT_MANT_DIG - exponent; - if (shift < 64 - ? (lx & ((1ULL << shift) - 1)) != 0 - : (lx != 0 || (hx & ((1ULL << (shift - 64)) - 1)) != 0)) - { - SET_LDOUBLE_WORDS64 (*x, 0, 0); - return 1; - } - if (exponent != 0) - { - hx &= (1ULL << (EXPLICIT_MANT_DIG - 64)) - 1; - hx |= 1ULL << (EXPLICIT_MANT_DIG - 64); - if (shift >= 64) - { - lx = hx >> (shift - 64); - hx = 0; - } - else if (shift != 0) - { - lx = (lx >> shift) | (hx << (64 - shift)); - hx >>= shift; - } - } - hx |= 0x7fff000000000000ULL | (SET_HIGH_BIT ? 0x800000000000ULL : 0); - SET_LDOUBLE_WORDS64 (*x, hx, lx); - return 0; -} diff --git a/sysdeps/ieee754/ldbl-128/s_setpayloadsigl.c b/sysdeps/ieee754/ldbl-128/s_setpayloadsigl.c deleted file mode 100644 index d97e2c8206..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_setpayloadsigl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SIG 1 -#define FUNC setpayloadsigl -#include diff --git a/sysdeps/ieee754/ldbl-128/s_signbitl.c b/sysdeps/ieee754/ldbl-128/s_signbitl.c deleted file mode 100644 index 062b47f55b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_signbitl.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Return nonzero value if number is negative. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__signbitl (_Float128 x) -{ - return __builtin_signbitl (x); -} diff --git a/sysdeps/ieee754/ldbl-128/s_sincosl.c b/sysdeps/ieee754/ldbl-128/s_sincosl.c deleted file mode 100644 index 34ca6ee03b..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_sincosl.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Compute sine and cosine of argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include - -void -__sincosl (_Float128 x, _Float128 *sinx, _Float128 *cosx) -{ - int64_t ix; - - /* High word of x. */ - GET_LDOUBLE_MSW64 (ix, x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffffffffffffLL; - if (ix <= 0x3ffe921fb54442d1LL) - __kernel_sincosl (x, 0, sinx, cosx, 0); - else if (ix >= 0x7fff000000000000LL) - { - /* sin(Inf or NaN) is NaN */ - *sinx = *cosx = x - x; - if (isinf (x)) - __set_errno (EDOM); - } - else - { - /* Argument reduction needed. */ - _Float128 y[2]; - int n; - - n = __ieee754_rem_pio2l (x, y); - switch (n & 3) - { - case 0: - __kernel_sincosl (y[0], y[1], sinx, cosx, 1); - break; - case 1: - __kernel_sincosl (y[0], y[1], cosx, sinx, 1); - *cosx = -*cosx; - break; - case 2: - __kernel_sincosl (y[0], y[1], sinx, cosx, 1); - *sinx = -*sinx; - *cosx = -*cosx; - break; - default: - __kernel_sincosl (y[0], y[1], cosx, sinx, 1); - *sinx = -*sinx; - break; - } - } -} -weak_alias (__sincosl, sincosl) diff --git a/sysdeps/ieee754/ldbl-128/s_sinl.c b/sysdeps/ieee754/ldbl-128/s_sinl.c deleted file mode 100644 index 887e45dbfa..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_sinl.c +++ /dev/null @@ -1,86 +0,0 @@ -/* s_sinl.c -- long double version of s_sin.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* sinl(x) - * Return sine function of x. - * - * kernel function: - * __kernel_sinl ... sine function on [-pi/4,pi/4] - * __kernel_cosl ... cose function on [-pi/4,pi/4] - * __ieee754_rem_pio2l ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include -#include -#include - -_Float128 __sinl(_Float128 x) -{ - _Float128 y[2],z=0; - int64_t n, ix; - - /* High word of x. */ - GET_LDOUBLE_MSW64(ix,x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffffffffffffLL; - if(ix <= 0x3ffe921fb54442d1LL) - return __kernel_sinl(x,z,0); - - /* sin(Inf or NaN) is NaN */ - else if (ix>=0x7fff000000000000LL) { - if (ix == 0x7fff000000000000LL) { - GET_LDOUBLE_LSW64(n,x); - if (n == 0) - __set_errno (EDOM); - } - return x-x; - } - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2l(x,y); - switch(n&3) { - case 0: return __kernel_sinl(y[0],y[1],1); - case 1: return __kernel_cosl(y[0],y[1]); - case 2: return -__kernel_sinl(y[0],y[1],1); - default: - return -__kernel_cosl(y[0],y[1]); - } - } -} -weak_alias (__sinl, sinl) diff --git a/sysdeps/ieee754/ldbl-128/s_tanhl.c b/sysdeps/ieee754/ldbl-128/s_tanhl.c deleted file mode 100644 index 0db8f5f775..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_tanhl.c +++ /dev/null @@ -1,100 +0,0 @@ -/* s_tanhl.c -- long double version of s_tanh.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Changes for 128-bit long double contributed by - Stephen L. Moshier */ - -/* tanhl(x) - * Return the Hyperbolic Tangent of x - * - * Method : - * x -x - * e - e - * 0. tanhl(x) is defined to be ----------- - * x -x - * e + e - * 1. reduce x to non-negative by tanhl(-x) = -tanhl(x). - * 2. 0 <= x <= 2**-57 : tanhl(x) := x*(one+x) - * -t - * 2**-57 < x <= 1 : tanhl(x) := -----; t = expm1l(-2x) - * t + 2 - * 2 - * 1 <= x <= 40.0 : tanhl(x) := 1- ----- ; t=expm1l(2x) - * t + 2 - * 40.0 < x <= INF : tanhl(x) := 1. - * - * Special cases: - * tanhl(NaN) is NaN; - * only tanhl(0)=0 is exact for finite argument. - */ - -#include -#include -#include - -static const _Float128 one = 1.0, two = 2.0, tiny = L(1.0e-4900); - -_Float128 -__tanhl (_Float128 x) -{ - _Float128 t, z; - u_int32_t jx, ix; - ieee854_long_double_shape_type u; - - /* Words of |x|. */ - u.value = x; - jx = u.parts32.w0; - ix = jx & 0x7fffffff; - /* x is INF or NaN */ - if (ix >= 0x7fff0000) - { - /* for NaN it's not important which branch: tanhl(NaN) = NaN */ - if (jx & 0x80000000) - return one / x - one; /* tanhl(-inf)= -1; */ - else - return one / x + one; /* tanhl(+inf)=+1 */ - } - - /* |x| < 40 */ - if (ix < 0x40044000) - { - if (u.value == 0) - return x; /* x == +- 0 */ - if (ix < 0x3fc60000) /* |x| < 2^-57 */ - { - math_check_force_underflow (x); - return x * (one + tiny); /* tanh(small) = small */ - } - u.parts32.w0 = ix; /* Absolute value of x. */ - if (ix >= 0x3fff0000) - { /* |x| >= 1 */ - t = __expm1l (two * u.value); - z = one - two / (t + two); - } - else - { - t = __expm1l (-two * u.value); - z = -t / (t + two); - } - /* |x| > 40, return +-1 */ - } - else - { - z = one - tiny; /* raised inexact flag */ - } - return (jx & 0x80000000) ? -z : z; -} -weak_alias (__tanhl, tanhl) diff --git a/sysdeps/ieee754/ldbl-128/s_tanl.c b/sysdeps/ieee754/ldbl-128/s_tanl.c deleted file mode 100644 index cd7b258616..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_tanl.c +++ /dev/null @@ -1,80 +0,0 @@ -/* s_tanl.c -- long double version of s_tan.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* @(#)s_tan.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* tanl(x) - * Return tangent function of x. - * - * kernel function: - * __kernel_tanl ... tangent function on [-pi/4,pi/4] - * __ieee754_rem_pio2l ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include -#include -#include - -_Float128 __tanl(_Float128 x) -{ - _Float128 y[2],z=0; - int64_t n, ix; - - /* High word of x. */ - GET_LDOUBLE_MSW64(ix,x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffffffffffffLL; - if(ix <= 0x3ffe921fb54442d1LL) return __kernel_tanl(x,z,1); - - /* tanl(Inf or NaN) is NaN */ - else if (ix>=0x7fff000000000000LL) { - if (ix == 0x7fff000000000000LL) { - GET_LDOUBLE_LSW64(n,x); - if (n == 0) - __set_errno (EDOM); - } - return x-x; /* NaN */ - } - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2l(x,y); - return __kernel_tanl(y[0],y[1],1-((n&1)<<1)); /* 1 -- n even - -1 -- n odd */ - } -} -weak_alias (__tanl, tanl) diff --git a/sysdeps/ieee754/ldbl-128/s_totalorderl.c b/sysdeps/ieee754/ldbl-128/s_totalorderl.c deleted file mode 100644 index ca7b3102e1..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_totalorderl.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Total order operation. ldbl-128 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -totalorderl (_Float128 x, _Float128 y) -{ - int64_t hx, hy; - uint64_t lx, ly; - GET_LDOUBLE_WORDS64 (hx, lx, x); - GET_LDOUBLE_WORDS64 (hy, ly, y); -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - uint64_t uhx = hx & 0x7fffffffffffffffULL; - uint64_t uhy = hy & 0x7fffffffffffffffULL; - /* For the preferred quiet NaN convention, this operation is a - comparison of the representations of the arguments interpreted as - sign-magnitude integers. If both arguments are NaNs, invert the - quiet/signaling bit so comparing that way works. */ - if ((uhx > 0x7fff000000000000ULL || (uhx == 0x7fff000000000000ULL - && lx != 0)) - && (uhy > 0x7fff000000000000ULL || (uhy == 0x7fff000000000000ULL - && ly != 0))) - { - hx ^= 0x0000800000000000ULL; - hy ^= 0x0000800000000000ULL; - } -#endif - uint64_t hx_sign = hx >> 63; - uint64_t hy_sign = hy >> 63; - hx ^= hx_sign >> 1; - lx ^= hx_sign; - hy ^= hy_sign >> 1; - ly ^= hy_sign; - return hx < hy || (hx == hy && lx <= ly); -} diff --git a/sysdeps/ieee754/ldbl-128/s_totalordermagl.c b/sysdeps/ieee754/ldbl-128/s_totalordermagl.c deleted file mode 100644 index 41b969d811..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_totalordermagl.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Total order operation on absolute values. ldbl-128 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -totalordermagl (_Float128 x, _Float128 y) -{ - uint64_t hx, hy; - uint64_t lx, ly; - GET_LDOUBLE_WORDS64 (hx, lx, x); - GET_LDOUBLE_WORDS64 (hy, ly, y); - hx &= 0x7fffffffffffffffULL; - hy &= 0x7fffffffffffffffULL; -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN - /* For the preferred quiet NaN convention, this operation is a - comparison of the representations of the absolute values of the - arguments. If both arguments are NaNs, invert the - quiet/signaling bit so comparing that way works. */ - if ((hx > 0x7fff000000000000ULL || (hx == 0x7fff000000000000ULL - && lx != 0)) - && (hy > 0x7fff000000000000ULL || (hy == 0x7fff000000000000ULL - && ly != 0))) - { - hx ^= 0x0000800000000000ULL; - hy ^= 0x0000800000000000ULL; - } -#endif - return hx < hy || (hx == hy && lx <= ly); -} diff --git a/sysdeps/ieee754/ldbl-128/s_truncl.c b/sysdeps/ieee754/ldbl-128/s_truncl.c deleted file mode 100644 index 6d1a11e7c4..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_truncl.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Truncate argument to nearest integral value not larger than the argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -_Float128 -__truncl (_Float128 x) -{ - int32_t j0; - u_int64_t i0, i1, sx; - - GET_LDOUBLE_WORDS64 (i0, i1, x); - sx = i0 & 0x8000000000000000ULL; - j0 = ((i0 >> 48) & 0x7fff) - 0x3fff; - if (j0 < 48) - { - if (j0 < 0) - /* The magnitude of the number is < 1 so the result is +-0. */ - SET_LDOUBLE_WORDS64 (x, sx, 0); - else - SET_LDOUBLE_WORDS64 (x, i0 & ~(0x0000ffffffffffffLL >> j0), 0); - } - else if (j0 > 111) - { - if (j0 == 0x4000) - /* x is inf or NaN. */ - return x + x; - } - else - { - SET_LDOUBLE_WORDS64 (x, i0, i1 & ~(0xffffffffffffffffULL >> (j0 - 48))); - } - - return x; -} -weak_alias (__truncl, truncl) diff --git a/sysdeps/ieee754/ldbl-128/s_ufromfpl.c b/sysdeps/ieee754/ldbl-128/s_ufromfpl.c deleted file mode 100644 index c686daa4a7..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_ufromfpl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 1 -#define INEXACT 0 -#define FUNC ufromfpl -#include diff --git a/sysdeps/ieee754/ldbl-128/s_ufromfpxl.c b/sysdeps/ieee754/ldbl-128/s_ufromfpxl.c deleted file mode 100644 index 906066c83c..0000000000 --- a/sysdeps/ieee754/ldbl-128/s_ufromfpxl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 1 -#define INEXACT 1 -#define FUNC ufromfpxl -#include diff --git a/sysdeps/ieee754/ldbl-128/strtod_nan_ldouble.h b/sysdeps/ieee754/ldbl-128/strtod_nan_ldouble.h deleted file mode 100644 index 142393d787..0000000000 --- a/sysdeps/ieee754/ldbl-128/strtod_nan_ldouble.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Convert string for NaN payload to corresponding NaN. For ldbl-128. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FLOAT long double -#define SET_MANTISSA(flt, mant) \ - do \ - { \ - union ieee854_long_double u; \ - u.d = (flt); \ - u.ieee_nan.mantissa0 = 0; \ - u.ieee_nan.mantissa1 = 0; \ - u.ieee_nan.mantissa2 = (mant) >> 32; \ - u.ieee_nan.mantissa3 = (mant); \ - if ((u.ieee.mantissa0 | u.ieee.mantissa1 \ - | u.ieee.mantissa2 | u.ieee.mantissa3) != 0) \ - (flt) = u.d; \ - } \ - while (0) diff --git a/sysdeps/ieee754/ldbl-128/strtold_l.c b/sysdeps/ieee754/ldbl-128/strtold_l.c deleted file mode 100644 index 4a8b14c4bb..0000000000 --- a/sysdeps/ieee754/ldbl-128/strtold_l.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* The actual implementation for all floating point sizes is in strtod.c. - These macros tell it to produce the `long double' version, `strtold'. */ - -#define FLOAT long double -#define FLT LDBL -#ifdef USE_WIDE_CHAR -# define STRTOF wcstold_l -# define __STRTOF __wcstold_l -# define STRTOF_NAN __wcstold_nan -#else -# define STRTOF strtold_l -# define __STRTOF __strtold_l -# define STRTOF_NAN __strtold_nan -#endif -#define MPN2FLOAT __mpn_construct_long_double -#define FLOAT_HUGE_VAL HUGE_VALL - -#include diff --git a/sysdeps/ieee754/ldbl-128/t_expl.h b/sysdeps/ieee754/ldbl-128/t_expl.h deleted file mode 100644 index 2b1b647db9..0000000000 --- a/sysdeps/ieee754/ldbl-128/t_expl.h +++ /dev/null @@ -1,970 +0,0 @@ -/* Accurate table for expl(). - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* __expl_table basically consists of four tables, T_EXPL_ARG{1,2} and - T_EXPL_RES{1,2}. All tables use positive and negative indexes, the 0 points - are marked by T_EXPL_* defines. - For ARG1 and RES1 tables lets B be 89 and S 256.0, for ARG2 and RES2 B is 65 - and S 32768.0. - These table have the property that, for all integers -B <= i <= B - expl(__expl_table[T_EXPL_ARGN+2*i]+__expl_table[T_EXPL_ARGN+2*i+1]+r) == - __expl_table[T_EXPL_RESN+i], __expl_table[T_EXPL_RESN+i] is some exact number - with the low 58 bits of the mantissa 0, - __expl_table[T_EXPL_ARGN+2*i] == i/S+s - where absl(s) <= 2^-54 and absl(r) <= 2^-212. */ - -static const _Float128 __expl_table [] = { - L(-3.47656250000000000584188889839535373E-01), /* bffd640000000000002b1b04213cf000 */ - L(6.90417668990715641167244540876988960E-32), /* 3f97667c3fdb588a6ae1af8748357a17 */ - L(-3.43749999999999981853132895957607418E-01), /* bffd5ffffffffffffac4ff5f4050b000 */ - L(-7.16021898043268093462818380603370350E-33), /* bf94296c8219427edc1431ac2498583e */ - L(-3.39843750000000013418643523138766329E-01), /* bffd5c000000000003de1f027a30e000 */ - L(8.16920774283317801641347327589583265E-32), /* 3f97a82b65774bdca1b4440d749ed8d3 */ - L(-3.35937500000000014998092453039303051E-01), /* bffd5800000000000452a9f4d8857000 */ - L(-6.55865578425428447938248396879359670E-32), /* bf97548b7d240f3d034b395e6eecfac8 */ - L(-3.32031250000000000981984049529998541E-01), /* bffd540000000000004875277cda5000 */ - L(6.91213046334032232108944519541512737E-32), /* 3f9766e5f925338a19045c94443b66e1 */ - L(-3.28124999999999986646017645350399708E-01), /* bffd4ffffffffffffc26a667bf44d000 */ - L(-6.16281060996110316602421505683742661E-32), /* bf973ffdcdcffb6fbffc86b2b8d42f5d */ - L(-3.24218749999999991645717430645867963E-01), /* bffd4bfffffffffffd97901063e48000 */ - L(-7.90797211087760527593856542417304137E-32), /* bf979a9afaaca1ada6a8ed1c80584d60 */ - L(-3.20312499999999998918211610690789652E-01), /* bffd47ffffffffffffb02d9856d71000 */ - L(8.64024799457616856987630373786503376E-32), /* 3f97c0a098623f95579d5d9b2b67342d */ - L(-3.16406249999999998153974811017181883E-01), /* bffd43ffffffffffff77c991f1076000 */ - L(-2.73176610180696076418536105483668404E-32), /* bf961baeccb32f9b1fcbb8e60468e95a */ - L(-3.12500000000000011420976192575972779E-01), /* bffd400000000000034ab8240483d000 */ - L(7.16573502812389453744433792609989420E-32), /* 3f977410f4c2cfc4335f28446c0fb363 */ - L(-3.08593750000000001735496343854851414E-01), /* bffd3c000000000000800e995c176000 */ - L(-1.56292999645122272621237565671593071E-32), /* bf95449b9cbdaff6ac1246adb2c826ac */ - L(-3.04687499999999982592401295899221626E-01), /* bffd37fffffffffffafb8bc1e061a000 */ - L(6.48993208584888904958594509625158417E-32), /* 3f9750f9fe8366d82d77afa0031a92e1 */ - L(-3.00781249999999999230616898937763959E-01), /* bffd33ffffffffffffc73ac39da54000 */ - L(6.57082437496961397305801409357792029E-32), /* 3f97552d3cb598ea80135cf3feb27ec4 */ - L(-2.96874999999999998788769281703245722E-01), /* bffd2fffffffffffffa6a07fa5021000 */ - L(-3.26588297198283968096426564544269170E-32), /* bf9653260fc1802f46b629aee171809b */ - L(-2.92968750000000015318089182805941695E-01), /* bffd2c0000000000046a468614bd6000 */ - L(-1.73291974845198589684358727559290718E-32), /* bf9567e9d158f52e483c8d8dcb5961dd */ - L(-2.89062500000000007736778942676309681E-01), /* bffd280000000000023adf9f4c3d3000 */ - L(-6.83629745986675744404029225571026236E-32), /* bf9762f5face6281c1daf1c6aedbdb45 */ - L(-2.85156250000000001367091555763661937E-01), /* bffd2400000000000064dfa11e3fb000 */ - L(-5.44898442619766878281110054067026237E-32), /* bf971aed6d2db9f542986a785edae072 */ - L(-2.81249999999999986958718100227029406E-01), /* bffd1ffffffffffffc3db9265ca9d000 */ - L(1.13007318374506125723591889451107046E-32), /* 3f94d569fe387f456a97902907ac3856 */ - L(-2.77343750000000000356078829380495179E-01), /* bffd1c0000000000001a462390083000 */ - L(-4.98979365468978332358409063436543102E-32), /* bf970315bbf3e0d14b5c94c900702d4c */ - L(-2.73437499999999990276993957508540484E-01), /* bffd17fffffffffffd32919bcdc94000 */ - L(-8.79390484115892344533724650295100871E-32), /* bf97c89b0b89cc19c3ab2b60da9bbbc3 */ - L(-2.69531250000000002434203866460082225E-01), /* bffd14000000000000b39ccf9e130000 */ - L(9.44060754687026590886751809927191596E-32), /* 3f97ea2f32cfecca5c64a26137a9210f */ - L(-2.65624999999999997296320716986257179E-01), /* bffd0fffffffffffff3880f13a2bc000 */ - L(2.07142664067265697791007875348396921E-32), /* 3f95ae37ee685b9122fbe377bd205ee4 */ - L(-2.61718750000000010237478733739017956E-01), /* bffd0c000000000002f3648179d40000 */ - L(-6.10552936159265665298996309192680256E-32), /* bf973d0467d31e407515a3cca0f3b4e2 */ - L(-2.57812500000000011948220522778370303E-01), /* bffd08000000000003719f81275bd000 */ - L(6.72477169058908902499239631466443836E-32), /* 3f975d2b8c475d3160cf72d227d8e6f9 */ - L(-2.53906249999999991822993360536596860E-01), /* bffd03fffffffffffda4a4b62f818000 */ - L(-2.44868296623215865054704392917190994E-32), /* bf95fc92516c6d057d29fc2528855976 */ - L(-2.49999999999999986862019457428548084E-01), /* bffcfffffffffffff86d2d20d5ff4000 */ - L(-3.85302898949105073614122724961613078E-32), /* bf96901f147cb7d643af71b6129ce929 */ - L(-2.46093750000000000237554160737318435E-01), /* bffcf8000000000000230e8ade26b000 */ - L(-1.52823675242678363494345369284988589E-32), /* bf953d6700c5f3fc303f79d0ec8c680a */ - L(-2.42187500000000003023380963205457065E-01), /* bffcf0000000000001be2c1a78bb0000 */ - L(-7.78402037952209709489481182714311699E-34), /* bf9102ab1f3998e887f0ee4cf940faa5 */ - L(-2.38281249999999995309623303145485725E-01), /* bffce7fffffffffffd4bd2940f43f000 */ - L(-3.54307216794236899443913216397197696E-32), /* bf966fef03ab69c3f289436205b21d02 */ - L(-2.34374999999999998425804947623207526E-01), /* bffcdfffffffffffff17b097a6092000 */ - L(-2.86038428948386602859761879407549696E-32), /* bf96290a0eba0131efe3a05fe188f2e3 */ - L(-2.30468749999999993822207406785200832E-01), /* bffcd7fffffffffffc70519834eae000 */ - L(-2.54339521031747516806893838749365762E-32), /* bf96081f0ad7f9107ae6cddb32c178ab */ - L(-2.26562499999999997823524030344489884E-01), /* bffccffffffffffffebecf10093df000 */ - L(4.31904611473158635644635628922959401E-32), /* 3f96c083f0b1faa7c4c686193e38d67c */ - L(-2.22656250000000004835132405125162742E-01), /* bffcc8000000000002c98a233f19f000 */ - L(2.54709791629335691650310168420597566E-33), /* 3f92a735903f5eed07a716ab931e20d9 */ - L(-2.18749999999999988969454021829236626E-01), /* bffcbffffffffffff9a42dc14ce36000 */ - L(-3.77236096429336082213752014054909454E-32), /* bf9687be8e5b2fca54d3e81157eac660 */ - L(-2.14843750000000010613256919115758495E-01), /* bffcb80000000000061e3d828ecac000 */ - L(-4.55194148712216691177097854305964738E-32), /* bf96d8b35c776aa3e1a4768271380503 */ - L(-2.10937499999999993204656148110447201E-01), /* bffcaffffffffffffc152f2aea118000 */ - L(-2.95044199165561453749332254271716417E-32), /* bf96326433b00b2439094d9bef22ddd1 */ - L(-2.07031250000000012233944895423355677E-01), /* bffca80000000000070d695ee0e94000 */ - L(1.93146788688385419095981415411012357E-32), /* 3f959126729135a5e390d4bb802a0bde */ - L(-2.03125000000000008030983633336321863E-01), /* bffca0000000000004a129fbc51af000 */ - L(2.37361904671826193563212931215900137E-32), /* 3f95ecfb3c4ba1b97ea3ad45cbb1e68a */ - L(-1.99218750000000001763815712796132779E-01), /* bffc98000000000001044b12d9950000 */ - L(-3.63171243370923753295192486732883239E-33), /* bf932db5fb3f27c38e0fa7bbcfc64f55 */ - L(-1.95312500000000004883660234506677272E-01), /* bffc90000000000002d0b3779d1f9000 */ - L(-3.19989507343607877747980892249711601E-33), /* bf9309d63de96bb3ef744c865f22f1bd */ - L(-1.91406250000000013720152363227519348E-01), /* bffc88000000000007e8bcb387121000 */ - L(-1.89295754093147174148371614722178860E-32), /* bf958926e2e67dfe812c508290add2e7 */ - L(-1.87500000000000000182342082774432620E-01), /* bffc800000000000001ae8b06a39f000 */ - L(-2.96812835183184815200854214892983927E-32), /* bf96343a62d156bbe71f55d14ca4b6e5 */ - L(-1.83593750000000012410147185883290345E-01), /* bffc78000000000007276a1adda8d000 */ - L(-2.02191931237489669058466239995304587E-32), /* bf95a3efab92d26ec2df90df036a117f */ - L(-1.79687499999999997439177363346082917E-01), /* bffc6ffffffffffffe8616db2927d000 */ - L(-9.92752326937775530007399526834009465E-33), /* bf949c5f88ed17041e1a3f1829d543cd */ - L(-1.75781249999999995824373974504785174E-01), /* bffc67fffffffffffd97c94f13ea3000 */ - L(1.44184772065335613487885714828816178E-32), /* 3f952b75c63476e7fcc2f5841c27bcce */ - L(-1.71874999999999986685050259043077809E-01), /* bffc5ffffffffffff8530f6bc531a000 */ - L(-3.49007014971241147689894940544402482E-32), /* bf966a6dfaa012aea8ffe6d90b02330f */ - L(-1.67968749999999997316058782350439701E-01), /* bffc57fffffffffffe73eb914f2aa000 */ - L(3.34025733574205019081305778794376391E-32), /* 3f965adf4572561fd5456a6c13d8babf */ - L(-1.64062499999999993322730602128318480E-01), /* bffc4ffffffffffffc269be4f68f3000 */ - L(-1.83345916769684984022099095506340635E-32), /* bf957ccb69026cb2f6024c211576d5f4 */ - L(-1.60156249999999992419000744447607979E-01), /* bffc47fffffffffffba13df21784a000 */ - L(2.73442789798110494773517431626534726E-32), /* 3f961bf58ff22c9b30f1e2b39f26d7d5 */ - L(-1.56249999999999987665010524130393080E-01), /* bffc3ffffffffffff8e3ad45e7508000 */ - L(2.02695576464836145806428118889332191E-32), /* 3f95a4fb7435a4a2f71de81eb8ae75d1 */ - L(-1.52343749999999989905291167951491803E-01), /* bffc37fffffffffffa2e48aecfc24000 */ - L(-3.61436631548815190395331054871041524E-32), /* bf967756567ebd108075ae527cc2e7f0 */ - L(-1.48437500000000006686107754967759751E-01), /* bffc30000000000003dab20261b3c000 */ - L(-2.15524270159131591469319477922198390E-32), /* bf95bfa05b82ef3a708c4f0395e9fcf6 */ - L(-1.44531250000000005132889939177166485E-01), /* bffc28000000000002f57b1969e7b000 */ - L(2.74741116529653547935086189244019604E-32), /* 3f961d4eb77c1185d34fe1b04a3f3cf5 */ - L(-1.40625000000000000707469094533647325E-01), /* bffc2000000000000068676d3d5c4000 */ - L(4.40607097220049957013547629906723266E-33), /* 3f936e0ac425daf795b42913cf0ef881 */ - L(-1.36718749999999995713752139187543306E-01), /* bffc17fffffffffffd87762255991000 */ - L(-3.73751317180116492404578048203389108E-32), /* bf9684202491e9cbb7ceb67d9ff7e0c9 */ - L(-1.32812500000000007198453630478482191E-01), /* bffc10000000000004264de3a4379000 */ - L(-3.97050085179660203884930593717220728E-32), /* bf969c52048de14be3c9c1971e50869c */ - L(-1.28906250000000006070486371645733082E-01), /* bffc080000000000037fd87db2cb0000 */ - L(3.59610068058504988294019521946586131E-32), /* 3f967570c10687cb8e9ebd0b280abf5a */ - L(-1.25000000000000003700729208608337966E-01), /* bffc00000000000002222198bbc74000 */ - L(3.23464851393124362331846965931995969E-33), /* 3f930cb95da3bfc847e593716c91d57a */ - L(-1.21093750000000013729038501177102555E-01), /* bffbf000000000000fd418d1f5fda000 */ - L(2.45242487730722066611358741283977619E-32), /* 3f95fd5945ad86a464292e26ac192a84 */ - L(-1.17187499999999999765305306880205578E-01), /* bffbdfffffffffffffbabaf869845000 */ - L(-1.14557520298960389903199646350205537E-32), /* bf94dbda735322179d9bcf392e1dd06d */ - L(-1.13281250000000009579647893740755690E-01), /* bffbd000000000000b0b69bae7ab9000 */ - L(2.37873962873837390105423621772752350E-32), /* 3f95ee0b7e0bd5ac1f6fab1e2a71abc3 */ - L(-1.09375000000000008981153004560108539E-01), /* bffbc000000000000a5ac4bc1d2c3000 */ - L(1.53152444860014076105003555837231015E-32), /* 3f953e15ce931e12ef9a152522e32bdd */ - L(-1.05468749999999992399063850363228723E-01), /* bffbaffffffffffff73c998091408000 */ - L(-8.75920903597804862471749360196688834E-33), /* bf946bd7e310a01bae5687ebdc47fcc5 */ - L(-1.01562500000000007685885179918350550E-01), /* bffba0000000000008dc7910a648c000 */ - L(-4.63820993797174451904075397785059501E-33), /* bf938153d0e54001a472da180fb5e8aa */ - L(-9.76562499999999887262211517861331814E-02), /* bffb8ffffffffffff300915aa6fd6000 */ - L(-2.63767025974952608658936466715705903E-33), /* bf92b64215bb8d520be5404620d38088 */ - L(-9.37499999999999939650246024457439795E-02), /* bffb7ffffffffffff90aca26bd0fc000 */ - L(-1.72047822349322956713582039121348377E-32), /* bf9565545015c5b9b56d02cfefca2c7d */ - L(-8.98437500000000033088896383977486369E-02), /* bffb70000000000003d09ca1e3cbe000 */ - L(3.04831994420989436248526129869697270E-33), /* 3f92fa7d30d2ed90e7ebbd6231fd08b1 */ - L(-8.59374999999999947312400115121319225E-02), /* bffb5ffffffffffff9ecefc03376e000 */ - L(1.50416954438393392150792422537312281E-32), /* 3f9538675ee99bd722fad0023c09c915 */ - L(-8.20312500000000054182280847004695514E-02), /* bffb500000000000063f2dbd40200000 */ - L(2.68399664523430004488075638997207289E-33), /* 3f92bdf49766629882c49a3da88928ed */ - L(-7.81250000000000114767533968079748798E-02), /* bffb4000000000000d3b56f81ba70000 */ - L(1.72318124201659121296305402819694281E-32), /* 3f9565e407aaabfb359e8a567d760de3 */ - L(-7.42187500000000035531829472486812869E-02), /* bffb3000000000000418b6e9b5388000 */ - L(2.09401756478514117051383998628099655E-32), /* 3f95b2e91221fcd74be0a86d8ad658d2 */ - L(-7.03124999999999987474933134860732535E-02), /* bffb1ffffffffffffe8e53453d2ac000 */ - L(2.28515798224350800271565551341211666E-32), /* 3f95da9bd6adf00894f05b5cc5530125 */ - L(-6.64062500000000042267533361089054159E-02), /* bffb10000000000004df8473dbcf2000 */ - L(1.97576478800281368377376002585430031E-32), /* 3f959a59acbddb2f53bd3096b66370e9 */ - L(-6.25000000000000066329769382774201686E-02), /* bffb00000000000007a5b5914e336000 */ - L(-1.46422615813786836245343723048221678E-33), /* bf91e69295f069fc0c4a9db181ea25a3 */ - L(-5.85937500000000002823707957982406053E-02), /* bffae0000000000000a6aeab10592000 */ - L(9.25637741701318872896718218457555829E-33), /* 3f94807eb021f1f40a37d4015b1eb76b */ - L(-5.46875000000000081586888005226044448E-02), /* bffac0000000000012d00a3171e3a000 */ - L(-4.87144542459404765480424673678105050E-33), /* bf9394b42faba6b7036fe7b36269daf3 */ - L(-5.07812499999999927720348253140567013E-02), /* bffa9fffffffffffef555cc8dd914000 */ - L(-3.01901021987395945826043649523451725E-33), /* bf92f59e7e3025691f290f8f67277faf */ - L(-4.68749999999999935349476738962633103E-02), /* bffa7ffffffffffff117b4ea2b876000 */ - L(1.21521638219189777347767475937119750E-32), /* 3f94f8c7f88c5b56674b94d984ac8ecb */ - L(-4.29687500000000056305562847814228219E-02), /* bffa6000000000000cfbb19be30c0000 */ - L(-1.18643699217679276275559592978275214E-32), /* bf94ecd39f0833a876550e83eb012b99 */ - L(-3.90624999999999962692914526031373542E-02), /* bffa3ffffffffffff765c743922f9000 */ - L(-4.91277156857520035712509544689973679E-33), /* bf939823189996193872e58ac0dececb */ - L(-3.51562500000000108152468207687602886E-02), /* bffa20000000000018f031e41177f000 */ - L(1.18599806302656253755207072755609820E-32), /* 3f94eca4f23e787fab73ce8f6b9b8d64 */ - L(-3.12500000000000077376981036742289578E-02), /* bffa00000000000011d787e0b386f000 */ - L(9.97730386477005171963635210799577079E-33), /* 3f949e70e498c46a0173ac0d46c699fc */ - L(-2.73437500000000139436129596418623235E-02), /* bff9c00000000000404db66e70a08000 */ - L(2.25755321633070123579875157841633859E-33), /* 3f927719b1a93074bdf9f3c2cb784785 */ - L(-2.34375000000000088003629211828324876E-02), /* bff98000000000002895a27d45feb000 */ - L(2.84374279216848803102126617873942975E-33), /* 3f92d87f70e749d6da6c260b68dc210b */ - L(-1.95312500000000107408831063404855424E-02), /* bff9400000000000318898ba69f71000 */ - L(2.47348089686935458989103979140011912E-33), /* 3f929afa3de45086fe909fdddb41edce */ - L(-1.56250000000000081443917555362290635E-02), /* bff9000000000000258f335e9cdd6000 */ - L(-2.43379314483517422161458863218426254E-33), /* bf9294621c8a9ccacf2b020ec19cad27 */ - L(-1.17187500000000051490597418161403184E-02), /* bff88000000000002f7ddfa26221f000 */ - L(1.83405297208145390679150568810924707E-33), /* 3f9230bbfc5d5fe1b534fbcda0465bb9 */ - L(-7.81249999999999715861805208310174953E-03), /* bff7ffffffffffffcb95f3fff157d000 */ - L(3.51548384878710915171654413641872451E-34), /* 3f8fd349b76c22966f77a39fc37ed704 */ - L(-3.90625000000000309326013918295097128E-03), /* bff7000000000000390f820c8e153000 */ - L(6.38058004651791109324060099097251911E-36), /* 3f8a0f665d3ac25a1ac94d688273dbcd */ -#define T_EXPL_ARG1 (2*89) - L(0.00000000000000000000000000000000000E+00), /* 00000000000000000000000000000000 */ - L(0.00000000000000000000000000000000000E+00), /* 00000000000000000000000000000000 */ - L(3.90625000000000245479958859972588985E-03), /* 3ff70000000000002d48769ac9874000 */ - L(-6.58439598384342854976169982902779828E-36), /* bf8a1811b923e6c626b07ef29761482a */ - L(7.81250000000001311374391093664996358E-03), /* 3ff800000000000078f3f3cd89111000 */ - L(2.60265650555493781464273319671555602E-33), /* 3f92b070c3b635b87af426735a71fc87 */ - L(1.17187500000000269581156218247101912E-02), /* 3ff8800000000000f8a50d02fe20d000 */ - L(1.00961747974945520631836275894919326E-33), /* 3f914f80c1a4f8042044fe3b757b030b */ - L(1.56249999999999797878275270751825475E-02), /* 3ff8ffffffffffff45935b69da62e000 */ - L(2.03174577741375590087897353146748580E-33), /* 3f925194e863496e0f6e91cbf6b22e26 */ - L(1.95312499999999760319884511789111533E-02), /* 3ff93fffffffffff917790ff9a8f4000 */ - L(4.62788519658803722282100289809515007E-33), /* 3f9380783ba81295feeb3e4879d7d52d */ - L(2.34374999999999822953909016349145918E-02), /* 3ff97fffffffffffae5a163bd3cd5000 */ - L(-3.19499956304699705390404384504876533E-33), /* bf93096e2037ced8194cf344c692f8d6 */ - L(2.73437500000000137220327275871555682E-02), /* 3ff9c000000000003f481dea5dd51000 */ - L(-2.25757776523031994464630107442723424E-33), /* bf92771abcf988a02b414bf2614e3734 */ - L(3.12499999999999790857640618332718621E-02), /* 3ff9ffffffffffff9f8cd40b51509000 */ - L(-4.22479470489989916319395454536511458E-33), /* bf935efb7245612f371deca17cb7b30c */ - L(3.51562499999999840753382405747597346E-02), /* 3ffa1fffffffffffdb47bd275f722000 */ - L(1.08459658374118041980976756063083500E-34), /* 3f8e2055d18b7117c9db1c318b1e889b */ - L(3.90624999999999989384433621470426757E-02), /* 3ffa3ffffffffffffd8d5e18b042e000 */ - L(-7.41674226146122000759491297811091830E-33), /* bf94341454e48029e5b0205d91baffdc */ - L(4.29687500000000107505739500500200462E-02), /* 3ffa60000000000018ca04cd9085c000 */ - L(-4.74689012756713017494437969420919847E-34), /* bf903b7c268103c6f7fbaaa24142e287 */ - L(4.68749999999999978700749928325717352E-02), /* 3ffa7ffffffffffffb16b6d5479e3000 */ - L(-1.06208165308448830117773486334902917E-32), /* bf94b92be4b3b5b5a596a0a5187cc955 */ - L(5.07812499999999815072625435955786253E-02), /* 3ffa9fffffffffffd55bd086d5cbc000 */ - L(-9.37038897148383660401929567549111394E-33), /* bf94853b111b0175b491c80d00419416 */ - L(5.46874999999999809511553152189867394E-02), /* 3ffabfffffffffffd4138bfa74a61000 */ - L(1.06642963074562437340498606682822123E-32), /* 3f94bafa3fe991b39255d563dfa05d89 */ - L(5.85937500000000184331996330905145551E-02), /* 3ffae000000000002a810a5f2f8bf000 */ - L(-1.76639977694797200820296641773791945E-34), /* bf8ed596f07ce4408f1705c8ec16864c */ - L(6.25000000000000021544696744852045001E-02), /* 3ffb000000000000027be32045e2b000 */ - L(1.68616371995798354366633034788947149E-32), /* 3f955e33d7440794d8a1b25233d086ab */ - L(6.64062499999999965563110718495802889E-02), /* 3ffb0ffffffffffffc079a38a3fed000 */ - L(-1.82463217667830160048872113565316215E-32), /* bf957af6163bcdb97cefab44a942482a */ - L(7.03124999999999759989183341261898222E-02), /* 3ffb1fffffffffffe454218acea05000 */ - L(-1.07843770101525495515646940862541503E-32), /* bf94bff72aada26d94e76e71c07e0580 */ - L(7.42187499999999898968873730710101412E-02), /* 3ffb2ffffffffffff45a166496dc1000 */ - L(1.28629441689592874462780757154138223E-32), /* 3f950b2724597b8b93ce1e9d1cf4d035 */ - L(7.81249999999999957198938523510804668E-02), /* 3ffb3ffffffffffffb10bc52adbc5000 */ - L(1.13297573459968118467100063135856856E-33), /* 3f91787eea895b3c245899cf34ad0abd */ - L(8.20312500000000199911640621145851159E-02), /* 3ffb500000000000170c59a661a89000 */ - L(-1.51161335208135146756554123073528707E-32), /* bf9539f326c5ca84e7db5401566f3775 */ - L(8.59375000000000134175373433347670743E-02), /* 3ffb6000000000000f78287547af0000 */ - L(1.09763629458404270323909815379924900E-32), /* 3f94c7f0b61b6e3e27d44b9f5bbc7e9d */ - L(8.98437500000000036533922600308306335E-02), /* 3ffb70000000000004364a83b7a14000 */ - L(3.11459653680110433194288029777718358E-33), /* 3f9302c0248136d65cebeab69488d949 */ - L(9.37500000000000184977946245216914691E-02), /* 3ffb800000000000155395d870b17000 */ - L(-4.66656154468277949130395786965043927E-33), /* bf9383aec9b993b6db492b1ede786d8a */ - L(9.76562500000000237839723100419376084E-02), /* 3ffb9000000000001b6bca237f6c4000 */ - L(-1.03028043424658760249140747856831301E-32), /* bf94abf6352e3d2bb398e47919a343fb */ - L(1.01562500000000012345545575236836572E-01), /* 3ffba000000000000e3bc30cd9a1f000 */ - L(2.15755372310795701322789783729456319E-32), /* 3f95c01b3b819edd9d07548fafd61550 */ - L(1.05468749999999976493840484471911438E-01), /* 3ffbafffffffffffe4e634cd77985000 */ - L(1.78771847038773333029677216592309083E-32), /* 3f95734b6ae650f33dd43c49a1df9fc0 */ - L(1.09375000000000002267015055992785402E-01), /* 3ffbc00000000000029d1ad08de7b000 */ - L(6.23263106693943817730045115112427717E-33), /* 3f9402e4b39ce2198a45e1d045868cd6 */ - L(1.13281250000000022354208618429577398E-01), /* 3ffbd0000000000019c5cc3f9d2b5000 */ - L(5.40514416644786448581426756221178868E-33), /* 3f93c10ab4021472c662f69435de9269 */ - L(1.17187500000000013252367133076817603E-01), /* 3ffbe000000000000f47688cc561b000 */ - L(-7.12412585457324989451327215568641325E-33), /* bf9427ecb343a8d1758990565fcfbf45 */ - L(1.21093750000000020759863992944300792E-01), /* 3ffbf0000000000017ef3af97bf04000 */ - L(6.26591408357572503875647872077266444E-33), /* 3f940446a09a2da771b45fc075514d12 */ - L(1.25000000000000004739659392396765618E-01), /* 3ffc00000000000002bb7344ecd89000 */ - L(-1.55611398459729463981000080101758830E-32), /* bf95433135febefa9e6aa4db39e263d2 */ - L(1.28906249999999982360888081057894783E-01), /* 3ffc07fffffffffff5d4ed3154361000 */ - L(-1.77531518652835570781208599686606474E-32), /* bf9570b7f225ea076f97f418d11359c1 */ - L(1.32812500000000010568583998727400436E-01), /* 3ffc1000000000000617a5d09526a000 */ - L(2.12104021624990594668286391598300893E-32), /* 3f95b885d767a1048d93055927a27adc */ - L(1.36718749999999998434125157367005292E-01), /* 3ffc17ffffffffffff18eaebc7970000 */ - L(2.50454798592543203967309921276955297E-32), /* 3f9604164e5598528a76faff26cd1c97 */ - L(1.40625000000000015550032422969330356E-01), /* 3ffc20000000000008f6c79d8928c000 */ - L(7.80972982879849783680252962992639832E-33), /* 3f9444674acf2b3225c7647e0d95edf3 */ - L(1.44531250000000012402535562111122522E-01), /* 3ffc28000000000007264a8bc1ff1000 */ - L(2.79662468716455159585514763921671876E-32), /* 3f96226b095bd78aa650faf95a221993 */ - L(1.48437500000000007761020440087419948E-01), /* 3ffc3000000000000479530ff8fe3000 */ - L(2.15518492972728435680556239996258527E-32), /* 3f95bf9d49295e73a957906a029768cb */ - L(1.52343750000000001733189947520484032E-01), /* 3ffc38000000000000ffc6109f71f000 */ - L(8.34032236093545825619420380704500188E-33), /* 3f945a71851226a1d0ce5e656693153e */ - L(1.56249999999999988073295321246958484E-01), /* 3ffc3ffffffffffff91fedd62ae0f000 */ - L(2.44119337150624789345260194989620908E-32), /* 3f95fb041a57bc1c1280680ac1620bea */ - L(1.60156250000000002076894210913572460E-01), /* 3ffc48000000000001327ed84a199000 */ - L(-7.36124501128859978061216696286151753E-33), /* bf9431c62f01e59d2c1e00f195a0037f */ - L(1.64062500000000000950861276373482172E-01), /* 3ffc500000000000008c5285fba85000 */ - L(-4.80566184447001164583855800470217373E-33), /* bf938f3d1fcafd390f22f80e6c19421f */ - L(1.67968749999999989878071706155265999E-01), /* 3ffc57fffffffffffa2a445c548c5000 */ - L(-4.42154428718618459799673088733365064E-32), /* bf96cb28cf1c1b28006d53ffe633b22a */ - L(1.71874999999999999459734108403218175E-01), /* 3ffc5fffffffffffffb04554e9dd4000 */ - L(-3.29736288190321377985697972236270628E-32), /* bf96566af0ebc852e84be12859b24a31 */ - L(1.75781249999999997987525759778901845E-01), /* 3ffc67fffffffffffed702df6ffff000 */ - L(-1.28800728638468399687523924685844352E-32), /* bf950b8236b88ca0c1b739dc91a7e3fc */ - L(1.79687500000000004929565820437175783E-01), /* 3ffc70000000000002d779bb32d2e000 */ - L(1.60624461317978482424582320675174225E-32), /* 3f954d9a9cc0c963fd081f3dc922d04e */ - L(1.83593750000000016873727045739708856E-01), /* 3ffc78000000000009ba1f6263c9a000 */ - L(-3.83390389582056606880506003118452558E-32), /* bf968e22a5d826f77f19ee788474df22 */ - L(1.87500000000000013443068740761666872E-01), /* 3ffc80000000000007bfd8c72a1bf000 */ - L(-2.74141662712926256150154726565203091E-32), /* bf961caf5ac59c7f941f928e324c2cc1 */ - L(1.91406249999999981494101786848611970E-01), /* 3ffc87fffffffffff55502eeae001000 */ - L(3.68992437075565165346469517256118001E-32), /* 3f967f2f03f9096793372a27b92ad79d */ - L(1.95312499999999989069921848800501648E-01), /* 3ffc8ffffffffffff9b3015280394000 */ - L(3.69712249337856518452988332367785220E-32), /* 3f967fee5fdb5bd501ff93516999faa0 */ - L(1.99218750000000021148042946919300804E-01), /* 3ffc9800000000000c30e67939095000 */ - L(2.50142536781142175091322844848566649E-32), /* 3f9603c34ae58e10b300b07137ee618a */ - L(2.03124999999999977732559198825437141E-01), /* 3ffc9ffffffffffff329e7df079e4000 */ - L(-2.41951877287895024779300892731537816E-32), /* bf95f683aefe6965f080df8f59dd34a1 */ - L(2.07031249999999996744030653771913124E-01), /* 3ffca7fffffffffffe1f80f4b73ca000 */ - L(-1.94346475904454000031592792989765585E-32), /* bf9593a44f87870a3d100d498501ecc7 */ - L(2.10937500000000000251399259834392298E-01), /* 3ffcb000000000000025199873310000 */ - L(-1.33528748788094249098998693871759411E-33), /* bf91bbb9b25c813668d6103d08acac35 */ - L(2.14843749999999993936323609611875097E-01), /* 3ffcb7fffffffffffc8128c866236000 */ - L(1.14839877977014974625242788556545292E-32), /* 3f94dd06b4655c9b83a1305b240e7a42 */ - L(2.18750000000000015181732784749663837E-01), /* 3ffcc0000000000008c06da5fff24000 */ - L(1.42689085313142539755499441881408391E-32), /* 3f95285a87dfa7ea7dad5b3be8c669f4 */ - L(2.22656249999999992172647770539596569E-01), /* 3ffcc7fffffffffffb7ce2fe531f6000 */ - L(-3.34421462850496887359128610229650547E-32), /* bf965b487962b5c2d9056ca6ac0c2e5c */ - L(2.26562499999999989595607223847082419E-01), /* 3ffccffffffffffffa0095277be5c000 */ - L(-3.08983588107248752517344356508205569E-32), /* bf9640dded57157f8eded311213bdbcd */ - L(2.30468749999999979130462438434567117E-01), /* 3ffcd7fffffffffff3f8332996560000 */ - L(-3.01407539802851697849105682795217019E-32), /* bf9638ffde35dbdfe1a1ffe45185de5d */ - L(2.34375000000000012194252337217891971E-01), /* 3ffce0000000000007078dd402c86000 */ - L(-8.46879710915628592284714319904522657E-33), /* bf945fc7b29a2ac6c9eff9eb258a510f */ - L(2.38281249999999982991877076137149870E-01), /* 3ffce7fffffffffff6320b486eece000 */ - L(-2.93563878880439245627127095245798544E-32), /* bf9630daaa4f40ff05caf29ace2ea7d4 */ - L(2.42187499999999981447559841442773990E-01), /* 3ffceffffffffffff54e24a09a8d5000 */ - L(-4.56766746558806021264215486909850481E-32), /* bf96da556dee11f3113e5a3467b908e6 */ - L(2.46093749999999991067720539980207318E-01), /* 3ffcf7fffffffffffad9d405dcb5d000 */ - L(2.14033004219908074003010247652128251E-32), /* 3f95bc8776e8f9ae098884aa664cc3df */ - L(2.50000000000000016613825838126835953E-01), /* 3ffd00000000000004c9e24c12bb3000 */ - L(2.57617532593749185996714235009382870E-32), /* 3f960b867cc01178c0ec68226c6cb47d */ - L(2.53906250000000013372004437827044321E-01), /* 3ffd04000000000003daae05b3168000 */ - L(7.20177123439204414298152646284640101E-32), /* 3f9775eff59ddad7e7530b83934af87f */ - L(2.57812499999999995765234725413886085E-01), /* 3ffd07fffffffffffec7878bad9d5000 */ - L(6.51253187532920882777046064603770602E-32), /* 3f975226659ca241402e71c2011583b0 */ - L(2.61718750000000007647689994011222248E-01), /* 3ffd0c000000000002344cc793a0f000 */ - L(3.02370610028725823590045201871491395E-32), /* 3f9639ffe55fa2fa011674448b4e5b96 */ - L(2.65624999999999986893899042596554269E-01), /* 3ffd0ffffffffffffc38f0c0a1e9f000 */ - L(-2.07683715950724761146070082510569258E-32), /* bf95af579a92e872fef81abfdf06bae8 */ - L(2.69531249999999979842788204900639327E-01), /* 3ffd13fffffffffffa30a908d67db000 */ - L(8.71465252506557329027658736641075706E-32), /* 3f97c47d99e19830447a42b1c0ffac61 */ - L(2.73437500000000006712165837793818271E-01), /* 3ffd18000000000001ef453a58edb000 */ - L(-6.62704045767568912140550474455810301E-32), /* bf9758187a204dcb06ece46588aeeaba */ - L(2.77343749999999994411329302988535617E-01), /* 3ffd1bfffffffffffe63a0fec9c9e000 */ - L(-4.87273466291944117406493607771338767E-32), /* bf96fa0381b0844a0be46bac2d673f0c */ - L(2.81250000000000012677892447379453135E-01), /* 3ffd20000000000003a7769e125d6000 */ - L(-8.55871796664700790726282049552906783E-32), /* bf97bc64e01332cf7616b0091b8dff2c */ - L(2.85156249999999998558643013736363981E-01), /* 3ffd23ffffffffffff95a5894bccf000 */ - L(-1.33068334720606220176455289635046875E-32), /* bf95145f43290ecf5b7adcb24697bc73 */ - L(2.89062500000000008831431235621753924E-01), /* 3ffd280000000000028ba504fac59000 */ - L(-9.34157398616814623985483776710704237E-32), /* bf97e50ad1115b941fcb5f0c88a428f7 */ - L(2.92968750000000019840235286110877063E-01), /* 3ffd2c000000000005b7f372d184f000 */ - L(4.99302093775173155906059132992249671E-33), /* 3f939ecdcfb97bad3f8dbec5df5ec67d */ - L(2.96875000000000015867911730971630513E-01), /* 3ffd3000000000000492d860c79db000 */ - L(7.86107787827057767235127454590866211E-33), /* 3f944689517ee8f16cdb97d6a6938f32 */ - L(3.00781250000000015814100002286124758E-01), /* 3ffd340000000000048edfe73a17d000 */ - L(-1.65419431293024229981937172317171504E-32), /* bf9557900e3efca16c89646b57f68dc0 */ - L(3.04687499999999985213157159965287195E-01), /* 3ffd37fffffffffffbbcec6f99b36000 */ - L(9.68753602893894024018934325652944198E-32), /* 3f97f70170e5458660c33a7e8d43d049 */ - L(3.08593749999999989969324338045156215E-01), /* 3ffd3bfffffffffffd1bdde4d0fb1000 */ - L(7.10268609610294706092252562643261106E-32), /* 3f9770cae45cdf615010401a4b37d8d4 */ - L(3.12500000000000002971606591018488854E-01), /* 3ffd40000000000000db440fbc06b000 */ - L(6.38924218802905979887732294952782964E-32), /* 3f974bbf988bb5622bd8fbaa46e8b811 */ - L(3.16406250000000006594921047402056305E-01), /* 3ffd44000000000001e69e8954814000 */ - L(3.96079878754651470094149874444850097E-32), /* 3f969b5017b9fa7a1e86975258c73d3d */ - L(3.20312500000000006713799366908329147E-01), /* 3ffd48000000000001ef64159c065000 */ - L(-1.86401314975634286055150437995880517E-32), /* bf958323f0434911794e5fb8bfe136ba */ - L(3.24218749999999987061246567584951210E-01), /* 3ffd4bfffffffffffc4549db9b928000 */ - L(-3.18643523744758601387071062700407431E-32), /* bf964ae5fa7e26c2c3981bed12e14372 */ - L(3.28124999999999991782776266707412953E-01), /* 3ffd4ffffffffffffda1ad0840ca8000 */ - L(-4.46964199751314296839915534813144652E-32), /* bf96d0277729ffd74727150df6d15547 */ - L(3.32031250000000000393816557756032682E-01), /* 3ffd540000000000001d0efc04fad000 */ - L(-9.03246333902065439930373230002688649E-33), /* bf947731a008748cc6dee948839ef7ae */ - L(3.35937499999999983810482995064392173E-01), /* 3ffd57fffffffffffb556cab8ae61000 */ - L(5.27742727066129518825981597650621794E-32), /* 3f9712050a6ddbf1cabf1b971f4b5d0b */ - L(3.39843750000000004310441349760912471E-01), /* 3ffd5c0000000000013e0def5ddc4000 */ - L(-3.85927263474732591932884416445586106E-32), /* bf9690c51088ef3db9ca000829c450c2 */ - L(3.43749999999999990248130003997484364E-01), /* 3ffd5ffffffffffffd3070624a0af000 */ - L(9.62005170171527308106468341512327487E-34), /* 3f913fae595cea84432eb01430817fca */ - L(3.47656250000000004085726414568625697E-01), /* 3ffd640000000000012d79309e291000 */ - L(-6.59664093705705297250259434519072507E-32), /* bf97568465eafb0e662e64a5dbfaf35f */ - - L(-1.98364257812501251077851763965418372E-03), /* bff6040000000001cd90f658cf0b1000 */ - L(-3.71984513103117734260309047540278737E-34), /* bf8fee73c54483194782aac4a6154d11 */ - L(-1.95312500000000378520649630233891879E-03), /* bff60000000000008ba643bb5e2e8000 */ - L(-1.12194202736719050440745599339855038E-34), /* bf8e2a436aeff7bc529873354f47a3f5 */ - L(-1.92260742187499397430259771221991482E-03), /* bff5f7fffffffffe4361cb51170da000 */ - L(-2.30068299876822157331268484824540848E-34), /* bf8f31d02f85cfe8c0cc02276ce0f437 */ - L(-1.89208984375001137424603270262074989E-03), /* bff5f0000000000347456ed490c23000 */ - L(-1.15012507244426243338260435466985403E-34), /* bf8e31c174d5677a937a34ad8d2a70b4 */ - L(-1.86157226562500172319250342061336738E-03), /* bff5e800000000007f262fa3617b4000 */ - L(-3.12438344643346437509767736937785561E-34), /* bf8f9f4d426a2457c273d34ef7d9bde9 */ - L(-1.83105468749999505256246872355430379E-03), /* bff5dffffffffffe92f18c1c2b6fa000 */ - L(-5.91130415288336591179087455220308942E-35), /* bf8d3a4c80b42dc036bae446c9807f78 */ - L(-1.80053710937499445182387245573120522E-03), /* bff5d7fffffffffe669dea82b4a4c000 */ - L(-1.92396289352411531324908916321392100E-34), /* bf8eff7a2123fb573ba9778550d669bd */ - L(-1.77001953125000387737631542516323906E-03), /* bff5d000000000011e19915c3ddb7000 */ - L(7.91101758977203355387806553469731354E-36), /* 3f8a507f5a70faaccf469e3461873dea */ - L(-1.73950195312500034854670281415554486E-03), /* bff5c8000000000019b7dc6ef97bd000 */ - L(1.55906551582436824067407021178835755E-34), /* 3f8e9e7880333e34955aebcde3cfb053 */ - L(-1.70898437499998955782591472611429852E-03), /* bff5bffffffffffcfd80e88aa6b96000 */ - L(8.22951661962611381718215899498500357E-35), /* 3f8db58e6031a779b59f6ece191de7cc */ - L(-1.67846679687500586652037711131708544E-03), /* bff5b80000000001b0df6fd21c133000 */ - L(-8.96642618848426299713145894522897419E-35), /* bf8ddcbcab46d531801bfae4121f2f8a */ - L(-1.64794921875000109499161354039904782E-03), /* bff5b0000000000050cbce8915575000 */ - L(-2.88077905394253859590587789680486639E-34), /* bf8f7eebd4dd860ef73b674d5e707959 */ - L(-1.61743164062501133830507079150388351E-03), /* bff5a80000000003449e8700c3e82000 */ - L(-3.68271725851639066312899986829350273E-34), /* bf8fe9845fe20a5fe74059e0cae185d6 */ - L(-1.58691406249999015546015764131101956E-03), /* bff59ffffffffffd2999e668cdd28000 */ - L(8.48197657099957029953716507898788812E-35), /* 3f8dc2faaebb97392e451b07b28c4b12 */ - L(-1.55639648437500317366570219290722587E-03), /* bff5980000000000ea2cd9a40d256000 */ - L(-3.45156704719737676412949957712570373E-36), /* bf8925a079505516c8e317ac1ff53255 */ - L(-1.52587890625000568759013197767046039E-03), /* bff5900000000001a3ab8a3f6b698000 */ - L(-1.01902948542497496574967177677556729E-34), /* bf8e0ee78d94d9b5ad3d63ae35c9b554 */ - L(-1.49536132812500945889014955936485340E-03), /* bff5880000000002b9f1621b57743000 */ - L(-3.32264697086631598830366079048117140E-34), /* bf8fb9a7d14c32289204fbb0c9eb20e0 */ - L(-1.46484374999999931883259902869504725E-03), /* bff57fffffffffffcdbd1c90e1b4a000 */ - L(-1.76487524793892929381101031660811433E-34), /* bf8ed52f2f724bc1ae870b18356337b4 */ - L(-1.43432617187498876325946983333888768E-03), /* bff577fffffffffcc2dff8faa5570000 */ - L(-3.54550084538495708816233114576143814E-34), /* bf8fd74724576915868c1e8ce9f430f1 */ - L(-1.40380859374999215367421282192718062E-03), /* bff56ffffffffffdbd0b18aac65ed000 */ - L(-1.90585907028351204486765167064669639E-34), /* bf8efaaa0c0e23e50c11b2120348054f */ - L(-1.37329101562499692341771212945644892E-03), /* bff567ffffffffff1cfd00f1b0577000 */ - L(-3.59631150411372589637918252836880320E-34), /* bf8fde08239ac74942a46298ea4fb715 */ - L(-1.34277343749999137467356674296739172E-03), /* bff55ffffffffffd839030b05d53d000 */ - L(-1.49571076125940368185068762485268117E-35), /* bf8b3e1a3d5c684b27a9f835b1d8d3c9 */ - L(-1.31225585937499247038404301859788734E-03), /* bff557fffffffffdd469936e691e3000 */ - L(3.10375845385355395586146533282311300E-34), /* 3f8f9c8f6d63b7a4145716ffd92491fb */ - L(-1.28173828124999024755581675764821898E-03), /* bff54ffffffffffd306589b0ab21d000 */ - L(-1.98541096105909793397376077900810019E-34), /* bf8f07e808bbb1e35106c294ffbb9687 */ - L(-1.25122070312500340204619591143332523E-03), /* bff5480000000000fb06d5f16ad2c000 */ - L(3.62884195935761446237911443317457521E-34), /* 3f8fe25b17d623178a386a6fa6c5afb2 */ - L(-1.22070312499999591578388993012071279E-03), /* bff53ffffffffffed2a356c440074000 */ - L(-2.96756662615653130862526710937493307E-35), /* bf8c3b90d8ff2a991e5bd16718fb0645 */ - L(-1.19018554687498821966212632349422735E-03), /* bff537fffffffffc9ac3b585dda89000 */ - L(1.44659971891167323357060028901142644E-34), /* 3f8e809279ab249edf1dad9fe13fb0bf */ - L(-1.15966796875000160938908064907298384E-03), /* bff530000000000076c0800db9639000 */ - L(2.50088010538742402346270685365928513E-34), /* 3f8f4c6c8a483b60201d30c1a83c3cb7 */ - L(-1.12915039062500267151512523291939657E-03), /* bff5280000000000c51f7e7315137000 */ - L(7.56402096465615210500092443924888831E-35), /* 3f8d922c1e485d99aea2668ed32b55a6 */ - L(-1.09863281249998665006360103291051571E-03), /* bff51ffffffffffc26f2d4c9ce2ba000 */ - L(1.43982174467233642713619821353592061E-34), /* 3f8e7ec530b3d92b6303bec1c81214d1 */ - L(-1.06811523437500522742248711752028025E-03), /* bff518000000000181b7380f10446000 */ - L(5.41265133745862349181293024531133174E-35), /* 3f8d1fc9313d018b30e790e06b6be723 */ - L(-1.03759765624999980942114138999770552E-03), /* bff50ffffffffffff1f01130490e1000 */ - L(1.21525139612685854366189534669623436E-34), /* 3f8e4311b96b6fcde412caf3f0d86fb9 */ - L(-1.00708007812499602697537601515759439E-03), /* bff507fffffffffedad7afcce7051000 */ - L(1.00020246351201558505328236381833392E-34), /* 3f8e09e640992512b1300744a7e984ed */ - L(-9.76562499999992592487302113340463694E-04), /* bff4fffffffffffbbad8151f8adf6000 */ - L(-1.64984406575162932060422892046851002E-34), /* bf8eb69a919986e8054b86fc34300f24 */ - L(-9.46044921874989085824996924138179594E-04), /* bff4effffffffff9b55a204fd9792000 */ - L(-9.29539174108308550334255350011347171E-35), /* bf8dee3a50ed896b4656fa577a1df3d7 */ - L(-9.15527343750013735214860599791540029E-04), /* bff4e00000000007eaf5bf103f82d000 */ - L(3.07557018309280519949818825519490586E-35), /* 3f8c470cfbef77d32c74cb8042f6ee81 */ - L(-8.85009765625012292294986105781516428E-04), /* bff4d000000000071605c65403b97000 */ - L(4.77499983783821950338363358545463558E-35), /* 3f8cfbc3dc18884c4c4f9e07d90d7bd3 */ - L(-8.54492187499986941239470706817188192E-04), /* bff4bffffffffff878ddf9cab264a000 */ - L(-1.60128240346239526958630011447901568E-34), /* bf8ea9b1a21e19e2d5bd84b0fbffcf95 */ - L(-8.23974609374996290174598690241743810E-04), /* bff4affffffffffddc86c249ebe06000 */ - L(1.61677540391961912631535763471935882E-34), /* 3f8eadd00841366b0dc2bc262c2c8c36 */ - L(-7.93457031249988696952538334288757473E-04), /* bff49ffffffffff97bf6f0aa85a5f000 */ - L(1.22318577008381887076634753347515709E-34), /* 3f8e452db5b5d250878f71040da06d14 */ - L(-7.62939453124996723316499040007097041E-04), /* bff48ffffffffffe1c7265b431108000 */ - L(-1.03845161748762410745671891558398468E-34), /* bf8e14115ad884c96d1a820c73647220 */ - L(-7.32421874999998242520117923997325794E-04), /* bff47ffffffffffefca4498b7aa8a000 */ - L(5.64005211953031009549514026639438083E-35), /* 3f8d2be06950f68f1a6d8ff829a6928e */ - L(-7.01904296874999772890934814265622012E-04), /* bff46fffffffffffde7c0fe5d8041000 */ - L(5.90245467325173644235991233229525762E-35), /* 3f8d39d40cc49002189243c194b1db0e */ - L(-6.71386718750008699269643939210658742E-04), /* bff460000000000503c91d798b60c000 */ - L(-5.20515801723324452151498579012322191E-35), /* bf8d14c0f08a6a9285b32b8bda003eb5 */ - L(-6.40869140625005499535275057463709988E-04), /* bff45000000000032b969184e9751000 */ - L(-6.69469163285461870099846471658294534E-35), /* bf8d63f36bab7b24d936c9380e3d3fa6 */ - L(-6.10351562499999293780097329596079841E-04), /* bff43fffffffffff97c7c433e35ed000 */ - L(-1.16941808547394177991845382085515086E-34), /* bf8e36e27886f10b234a7dd8fc588bf0 */ - L(-5.79833984375000068291972326409994795E-04), /* bff43000000000000a13ff6dcf2bf000 */ - L(1.17885044988246219185041488459766001E-34), /* 3f8e3964677e001a00412aab52790842 */ - L(-5.49316406249990904622170867910987793E-04), /* bff41ffffffffffac1c25739c716b000 */ - L(-3.31875702128137033065075734368960972E-35), /* bf8c60e928d8982c3c99aef4f885a121 */ - L(-5.18798828125011293653756992177727236E-04), /* bff410000000000682a62cff36775000 */ - L(-5.69971237642088463334239430962628187E-35), /* bf8d2f0c76f8757d61cd1abc7ea7d066 */ - L(-4.88281249999990512232251384917893121E-04), /* bff3fffffffffff50fb48992320df000 */ - L(1.02144616714408655325510171265051108E-35), /* 3f8ab279a3626612710b9b3ac71734ac */ - L(-4.57763671874997554564967307956493434E-04), /* bff3dffffffffffd2e3c272e3cca9000 */ - L(-8.25484058867957231164162481843653503E-35), /* bf8db6e71158e7bf93e2e683f07aa841 */ - L(-4.27246093749991203999790346349633286E-04), /* bff3bffffffffff5dbe103cba0eb2000 */ - L(-3.51191203319375193921924105905691755E-35), /* bf8c757356d0f3dd7fbefc0dd419ab50 */ - L(-3.96728515624986649402960638705483281E-04), /* bff39ffffffffff09b996882706ec000 */ - L(-5.51925962073095883016589497244931171E-36), /* bf89d586d49f22289cfc860bebb99056 */ - L(-3.66210937499999945095511981300980754E-04), /* bff37fffffffffffefcb88bfc7df6000 */ - L(-2.11696465278144529364423332249588595E-35), /* bf8bc23a84d28e5496c874ef9833be25 */ - L(-3.35693359374992480958458008559640163E-04), /* bff35ffffffffff754c548a8798f2000 */ - L(-8.58941791799705081104736787493668352E-35), /* bf8dc8b1192fb7c3662826d43acb7c68 */ - L(-3.05175781250009811036303273640122156E-04), /* bff340000000000b4fb4f1aad1c76000 */ - L(-8.61173897858769926480551302277426632E-35), /* bf8dc9e0eabb1c0b33051011b64769fa */ - L(-2.74658203124987298321920308390303850E-04), /* bff31ffffffffff15b2056ac252fd000 */ - L(3.35152809454778381053519808988046631E-37), /* 3f85c82fb59ff8d7c80d44e635420ab1 */ - L(-2.44140624999999992770514819575735516E-04), /* bff2fffffffffffffbbb82d6a7636000 */ - L(3.54445837111124472730013879165516908E-35), /* 3f8c78e955b01378be647b1c92aa9a77 */ - L(-2.13623046875012756463165168672749438E-04), /* bff2c0000000001d6a1635fea6bbf000 */ - L(1.50050816288650121729916777279129473E-35), /* 3f8b3f1f6f616a61129a58e131cbd31d */ - L(-1.83105468749991323078784464300306893E-04), /* bff27fffffffffebfe0cbd0c82399000 */ - L(-9.14919506501448661140572099029756008E-37), /* bf873754bacaa9d9513b6127e791eb47 */ - L(-1.52587890625013337032336300236461546E-04), /* bff240000000001ec0cb57f2cc995000 */ - L(2.84906084373176180870418394956384516E-35), /* 3f8c2ef6d03a7e6ab087c4f099e4de89 */ - L(-1.22070312499990746786116828458007518E-04), /* bff1ffffffffffd553bbb49f35a34000 */ - L(6.71618008964968339584520728412444537E-36), /* 3f8a1dacb99c60071fc9cd2349495bf0 */ - L(-9.15527343750029275602791047595142231E-05), /* bff180000000000d8040cd6ecde28000 */ - L(-1.95753652091078750312541716951402172E-35), /* bf8ba0526cfb24d8d59122f1c7a09a14 */ - L(-6.10351562499913258461494008080572701E-05), /* bff0ffffffffffaffebbb92d7f6a9000 */ - L(5.69868489273961111703398456218119973E-36), /* 3f89e4ca5df09ef4a4386dd5b3bf0331 */ - L(-3.05175781250092882818419203884960853E-05), /* bff0000000000055ab55de88fac1d000 */ - L(9.03341100018476837609128961872915953E-36), /* 3f8a803d229fa3a0e834a63abb06662b */ -#define T_EXPL_ARG2 (2*T_EXPL_ARG1 + 2 + 2*65) - L(0.00000000000000000000000000000000000E+00), /* 00000000000000000000000000000000 */ - L(0.00000000000000000000000000000000000E+00), /* 00000000000000000000000000000000 */ - L(3.05175781249814607084128277672749162E-05), /* 3feffffffffffeaa02abb9102f499000 */ - L(1.00271855391179733380665816525889949E-36), /* 3f8755351afa042ac3f58114824d4c10 */ - L(6.10351562500179243748093427073421439E-05), /* 3ff1000000000052a95de07a4c26d000 */ - L(1.67231624299180373502350811501181670E-36), /* 3f881c87a53691cae9d77f4e40d66616 */ - L(9.15527343749970728685313252158399200E-05), /* 3ff17ffffffffff28040cc2acde28000 */ - L(2.43665747834893104318707597514407880E-36), /* 3f889e9366c7c6c6a2ecb78dc9b0509e */ - L(1.22070312500027751961838150070880064E-04), /* 3ff200000000003ffddde6c153b53000 */ - L(-1.73322146370624186623546452226755405E-35), /* bf8b709d8d658ed5dbbe943de56ee84e */ - L(1.52587890624995916105682628143179430E-04), /* 3ff23ffffffffff6954b56e285d23000 */ - L(1.23580432650945898349135528000443828E-35), /* 3f8b06d396601dde16de7d7bc27346e6 */ - L(1.83105468750008670314358488289621794E-04), /* 3ff2800000000013fe0cdc8c823b7000 */ - L(4.30446229148833293310207915930740796E-35), /* 3f8cc9ba9bfe554a4f7f2fece291eb23 */ - L(2.13623046875005741337455947623248132E-04), /* 3ff2c0000000000d3d1662de21a3f000 */ - L(-3.96110759869520786681660669615255057E-35), /* bf8ca5379b04ff4a31aab0ceacc917e6 */ - L(2.44140624999981493573336463433440506E-04), /* 3ff2ffffffffffd553bbdf48e0534000 */ - L(-1.39617373942387888957350179316792928E-35), /* bf8b28eeedc286015802b63f96b8c5cd */ - L(2.74658203124984920706309918754626834E-04), /* 3ff31fffffffffee9d60c8439ec1d000 */ - L(-3.16168080483901830349738314447356223E-36), /* bf890cf74f81c77a611abc1243812444 */ - L(3.05175781250008648918265055410966055E-04), /* 3ff3400000000009f8b5c9a346636000 */ - L(8.54421306185008998867856704677221443E-35), /* 3f8dc649cd40922fc08adc6b6b20ead0 */ - L(3.35693359374988945462612499316774515E-04), /* 3ff35ffffffffff34146c540f15b2000 */ - L(7.96443137431639500475160850431097078E-35), /* 3f8da77638ed3148fc4d99d1c9e13446 */ - L(3.66210937500027690542093987739604535E-04), /* 3ff380000000001fecce34bea89c4000 */ - L(2.14507323877752361258862577769090367E-35), /* 3f8bc834e554d38894cf91957b0253d3 */ - L(3.96728515625003928083564943615052121E-04), /* 3ff3a00000000004875d9a4acf6ab000 */ - L(4.88358523466632050664019922448605508E-35), /* 3f8d03a7eaeef1a9f78c71a12c44dd28 */ - L(4.27246093750017799227172345607351585E-04), /* 3ff3c00000000014856794c3ee850000 */ - L(6.66520494592631402182216588784828935E-35), /* 3f8d6262118fcdb59b8f16108f5f1a6c */ - L(4.57763671875002108342364320152138181E-04), /* 3ff3e000000000026e45d855410b9000 */ - L(7.21799615960261390920033272189522298E-35), /* 3f8d7fc645cff8879462296af975c9fd */ - L(4.88281249999999768797631616370963356E-04), /* 3ff3ffffffffffffbbc2d7cc004df000 */ - L(-5.30564629906905979452258114088325361E-35), /* bf8d1a18b71929a30d67a217a27ae851 */ - L(5.18798828124997339054881383202487041E-04), /* 3ff40ffffffffffe775055eea5851000 */ - L(-4.03682911253647925867848180522846377E-35), /* bf8cad44f0f3e5199d8a589d9332acad */ - L(5.49316406249980511907933706754958501E-04), /* 3ff41ffffffffff4c410b29bb62fb000 */ - L(-2.08166843948323917121806956728438051E-35), /* bf8bbab8cf691403249fe5b699e25143 */ - L(5.79833984374989593561576568548497165E-04), /* 3ff42ffffffffffa0047df328d817000 */ - L(-1.72745033420153042445343706432627539E-34), /* bf8ecb3c2d7d3a9e6e960576be901fdf */ - L(6.10351562500008540711511259540838154E-04), /* 3ff4400000000004ec62f54f8c271000 */ - L(7.41889382604319545724663095428976499E-35), /* 3f8d8a74c002c81a47c93b8e05d15f8e */ - L(6.40869140625020444702875407535884986E-04), /* 3ff450000000000bc91b09718515d000 */ - L(-4.47321009727305792048065440180490107E-35), /* bf8cdbac5c8fe70822081d8993eb5cb6 */ - L(6.71386718750007531635964622352684074E-04), /* 3ff460000000000457792973db05c000 */ - L(5.13698959677949336513874456684462092E-35), /* 3f8d112114436949c5ef38d8049004ab */ - L(7.01904296875006634673332887754430334E-04), /* 3ff4700000000003d31adf2cb8b1d000 */ - L(-8.25665755717729437292989870760751482E-35), /* bf8db6ffcc8ef71f8e648e3a8b160f5a */ - L(7.32421874999998244664170215504673504E-04), /* 3ff47ffffffffffefcf5498bd5c8a000 */ - L(-5.64005234937832153139057628112753364E-35), /* bf8d2be06a1dfe90e7bf90fba7c12a98 */ - L(7.62939453125017456345986752604096408E-04), /* 3ff490000000000a101a1b093d4a8000 */ - L(-1.11084094120417622468550608896588329E-34), /* bf8e274feabd2d94f6694507a46accb1 */ - L(7.93457031249987558617598988993908016E-04), /* 3ff49ffffffffff8d3f9dcab74bbf000 */ - L(-1.22966480225449015129079129940978828E-34), /* bf8e46e6a65eef8fa9e42eddf3da305e */ - L(8.23974609374997378723747633335135819E-04), /* 3ff4affffffffffe7d2afbaa55b26000 */ - L(-1.62270010016794279091906973366704963E-34), /* bf8eaf633f057ebdb664a34566401c4e */ - L(8.54492187500023938282350821569920958E-04), /* 3ff4c0000000000dccaabce399e59000 */ - L(-1.39076361712838158775374263169606160E-34), /* bf8e71ba779364b3bbdba7841f2c4ca1 */ - L(8.85009765624987932362186815286691297E-04), /* 3ff4cffffffffff90b218886edc2a000 */ - L(4.07328275060905585228261577392403980E-35), /* 3f8cb1254dbb6ea4b8cfa5ed4cf28d24 */ - L(9.15527343749975579461305518559161974E-04), /* 3ff4dffffffffff1ec2a21f25df33000 */ - L(1.16855112459192484947855553716334015E-35), /* 3f8af10bf319e9f5270cf249eeffbe5c */ - L(9.46044921875016761584725882821122521E-04), /* 3ff4f00000000009a992c46c16d71000 */ - L(9.51660680007524262741115611071680436E-35), /* 3f8df9fd56e81f8edf133843910ee831 */ - L(9.76562499999974118878133088548272636E-04), /* 3ff4fffffffffff1149edc46a6df6000 */ - L(-5.65271128977550656964071208289181661E-36), /* bf89e0e12689dd721aa2314c81eb6429 */ - L(1.00708007812498671732140389760347830E-03), /* 3ff507fffffffffc2be94b90ed091000 */ - L(-1.43355074891483635310132767255371379E-34), /* bf8e7d1a688c247b16022daab1316d55 */ - L(1.03759765625002637786192745235343007E-03), /* 3ff51000000000079a57b966bc158000 */ - L(2.95905815240957629366749917020106928E-34), /* 3f8f895387fc73bb38f8a1b254c01a60 */ - L(1.06811523437500860568717813047520763E-03), /* 3ff51800000000027afcd5b35f5e6000 */ - L(-5.98328495358586628195372356742878314E-35), /* bf8d3e204130013bf6328f1b70ff8c76 */ - L(1.09863281250001439958487251556220070E-03), /* 3ff5200000000004268077c6c66bd000 */ - L(2.41371837889426603334113000868144760E-34), /* 3f8f40d6948edf864054ccf151f9815e */ - L(1.12915039062501298413451613770002366E-03), /* 3ff5280000000003be0f5dd8fe81b000 */ - L(-1.28815268997394164973472617519705703E-34), /* bf8e567321172ea089dce4bc8354ecb7 */ - L(1.15966796874997272036339054191407232E-03), /* 3ff52ffffffffff8231e3bcfff1e8000 */ - L(1.02996064554316248496839462594377804E-34), /* 3f8e11cf7d402789244f68e2d4f985b1 */ - L(1.19018554687502744121802585360546796E-03), /* 3ff5380000000007e8cdf3f8f6c20000 */ - L(-1.43453217726255628994625761307322163E-34), /* bf8e7d5d3370d85a374f5f4802fc517a */ - L(1.22070312499997743541996266398850614E-03), /* 3ff53ffffffffff97f0722561f454000 */ - L(-1.41086259180534339713692694428211646E-34), /* bf8e77125519ff76244dfec5fbd58402 */ - L(1.25122070312501024092560690174507039E-03), /* 3ff5480000000002f3a59d8820691000 */ - L(3.84102646020099293168698506729765213E-34), /* 3f8ffe8f5b86f9c3569c8f26e19b1f50 */ - L(1.28173828124997986521442660131425390E-03), /* 3ff54ffffffffffa3250a764439d9000 */ - L(1.44644589735033114377952806106652650E-34), /* 3f8e808801b80dcf38323cdbfdca2549 */ - L(1.31225585937501665804856968749058137E-03), /* 3ff5580000000004cd25a414c6d62000 */ - L(1.67474574742200577294563576414361377E-34), /* 3f8ebd394a151dbda4f81d5d83c0f1e9 */ - L(1.34277343749997290265837386401818888E-03), /* 3ff55ffffffffff83091b042cfd59000 */ - L(-1.55650565030381326742591837551559103E-34), /* bf8e9dca490d7fecfadba9625ffb91c5 */ - L(1.37329101562497720784949380297774268E-03), /* 3ff567fffffffff96e3c7312f5ccf000 */ - L(1.65279335325630026116581677369221748E-34), /* 3f8eb763496f5bd7404f2298b402074f */ - L(1.40380859374999099958354100336136647E-03), /* 3ff56ffffffffffd67e2f09f2a381000 */ - L(1.89919944388961890195706641264717076E-34), /* 3f8ef8e4d0ffdfeba982aa8829501389 */ - L(1.43432617187497484122173130998160625E-03), /* 3ff577fffffffff8bf9c1d71af8a8000 */ - L(2.57638517142061429772064578590009568E-34), /* 3f8f5675d82c1cc4ada70fd3a957b89a */ - L(1.46484374999999929342158925502052945E-03), /* 3ff57fffffffffffcbdd1c7671b46000 */ - L(1.76487201934184070490166772482073801E-34), /* 3f8ed52ef732458f6e4c5c07504f33cc */ - L(1.49536132812502318451070466256902933E-03), /* 3ff5880000000006aeb7066c8ad43000 */ - L(2.38068367275295804321313550609246656E-34), /* 3f8f3c7277ae6fc390ace5e06c0b025b */ - L(1.52587890625000448053340248672949543E-03), /* 3ff59000000000014a9ae2104b3bc000 */ - L(1.01174455568392813258454590274740959E-34), /* 3f8e0cf7c434762991bb38e12acee215 */ - L(1.55639648437501113499837053523090913E-03), /* 3ff5980000000003359e2c204355e000 */ - L(-2.82398418808099749023517211651363693E-35), /* bf8c2c4c2971d88caa95e15fb1ccb1a1 */ - L(1.58691406249999937955142588308171026E-03), /* 3ff59fffffffffffd2380ecbc87c2000 */ - L(-1.27361695572422741562701199136538047E-34), /* bf8e5295e0e206dfb0f0266c07225448 */ - L(1.61743164062498000531048954475329309E-03), /* 3ff5a7fffffffffa3ca6fe61ed94c000 */ - L(-1.22606548862580061633942923016222044E-34), /* bf8e45f1b17bb61039d21a351bb207b8 */ - L(1.64794921875001835451453858682255576E-03), /* 3ff5b000000000054a52fa20f6565000 */ - L(1.39132339594152335892305491425264583E-34), /* 3f8e71e0904c5449b414ee49b191cef2 */ - L(1.67846679687501263995029340691547953E-03), /* 3ff5b80000000003a4a9e912c910b000 */ - L(6.67245854693585315412242764786197029E-35), /* 3f8d62c4ccac1e7511a617d469468ccd */ - L(1.70898437500002646861403514115369655E-03), /* 3ff5c00000000007a109fbaa7e015000 */ - L(6.87367172354719289559624829652240928E-36), /* 3f8a245fa835eceb42bae8128d9336db */ - L(1.73950195312501174308226096992992128E-03), /* 3ff5c80000000003627c8d637a005000 */ - L(-2.20824271875474985927385878948759352E-34), /* bf8f25869b1cbefb25e735992f232f57 */ - L(1.77001953124997491747605207736194513E-03), /* 3ff5cffffffffff8c53c84b6883b8000 */ - L(3.43123048533596296514343180408963705E-34), /* 3f8fc816b91d173ddadbbf09b1287906 */ - L(1.80053710937497698911127570705069398E-03), /* 3ff5d7fffffffff95e1899f4a8430000 */ - L(3.99231237340890073475077494556136100E-35), /* 3f8ca889148f62fa854da5674df41279 */ - L(1.83105468750002267094899598630423914E-03), /* 3ff5e0000000000688d21e62ba674000 */ - L(-3.22274595655810623999007524769365273E-34), /* bf8fac605cb9ae01eb719675ced25560 */ - L(1.86157226562500499224728040579690330E-03), /* 3ff5e80000000001705ce28a6d89e000 */ - L(3.07094985075881613489605622068441083E-34), /* 3f8f98330225ec7e2c8f3c0d1c432b91 */ - L(1.89208984374998234666824993196980949E-03), /* 3ff5effffffffffae969fdc7cd8cf000 */ - L(-3.06287628722973914692165056776495733E-34), /* bf8f9720477d9cfa10e464df7f91020c */ - L(1.92260742187501225343755557292811682E-03), /* 3ff5f800000000038824e428ed49a000 */ - L(6.30049124729794620592961282769623368E-35), /* 3f8d4efdd7cd4336d88a6aa49e1e96bc */ - L(1.95312499999998514894032051116231258E-03), /* 3ff5fffffffffffbb82f6a04f1ae0000 */ - L(-6.14610057507500948543216998736262902E-35), /* bf8d46c862d39255370e7974d48daa7e */ - L(1.98364257812501222021119324146882732E-03), /* 3ff6040000000001c2d8a1aa5188d000 */ - L(3.71942298418113774118754986159801984E-34), /* 3f8fee6567d9940495519ffe62cbc9a4 */ - - L(7.06341639425619532977052017486130353E-01), /* 3ffe69a59c8245a9ac00000000000000 */ - L(7.09106182437398424589503065362805501E-01), /* 3ffe6b0ff72deb89d000000000000000 */ - L(7.11881545564596485142772053222870454E-01), /* 3ffe6c7bbce9a6d93000000000000000 */ - L(7.14667771155948150507697391731198877E-01), /* 3ffe6de8ef213d71e000000000000000 */ - L(7.17464901725936049503573599395167548E-01), /* 3ffe6f578f41e1a9e400000000000000 */ - L(7.20272979955439790478166628417966422E-01), /* 3ffe70c79eba33c06c00000000000000 */ - L(7.23092048692387218133958981525211129E-01), /* 3ffe72391efa434c7400000000000000 */ - L(7.25922150952408251622927082280511968E-01), /* 3ffe73ac117390acd800000000000000 */ - L(7.28763329919491220643124052003258839E-01), /* 3ffe752077990e79d000000000000000 */ - L(7.31615628946641782803794740175362676E-01), /* 3ffe769652df22f7e000000000000000 */ - L(7.34479091556544505525749855223693885E-01), /* 3ffe780da4bba98c4800000000000000 */ - L(7.37353761442226890432394270646909717E-01), /* 3ffe79866ea5f432d400000000000000 */ - L(7.40239682467726090031590047146892175E-01), /* 3ffe7b00b216ccf53000000000000000 */ - L(7.43136898668758316688354170764796436E-01), /* 3ffe7c7c70887763c000000000000000 */ - L(7.46045454253390638577059235103661194E-01), /* 3ffe7df9ab76b20fd000000000000000 */ - L(7.48965393602715662213498148958024103E-01), /* 3ffe7f78645eb8076400000000000000 */ - L(7.51896761271528629722027403659012634E-01), /* 3ffe80f89cbf42526400000000000000 */ - L(7.54839601989007347171423134568613023E-01), /* 3ffe827a561889716000000000000000 */ - L(7.57793960659394638668118204805068672E-01), /* 3ffe83fd91ec46ddc000000000000000 */ - L(7.60759882362683631518152083117456641E-01), /* 3ffe858251bdb68b8c00000000000000 */ - L(7.63737412355305483879774897104653064E-01), /* 3ffe87089711986c9400000000000000 */ - L(7.66726596070820082262642358728044201E-01), /* 3ffe8890636e31f54400000000000000 */ - L(7.69727479120609181517664865168626420E-01), /* 3ffe8a19b85b4fa2d800000000000000 */ - L(7.72740107294572486917871856348938309E-01), /* 3ffe8ba4976246833800000000000000 */ - L(7.75764526561826289752232810315035749E-01), /* 3ffe8d31020df5be4400000000000000 */ - L(7.78800783071404878477039801509818062E-01), /* 3ffe8ebef9eac820b000000000000000 */ - L(7.81848923152964780936002853195532225E-01), /* 3ffe904e8086b5a87800000000000000 */ - L(7.84908993317491698871180005880887620E-01), /* 3ffe91df97714512d800000000000000 */ - L(7.87981040258010162480317717381694820E-01), /* 3ffe9372403b8d6bcc00000000000000 */ - L(7.91065110850296016042904057030682452E-01), /* 3ffe95067c78379f2800000000000000 */ - L(7.94161252153591734614934694036492147E-01), /* 3ffe969c4dbb800b4800000000000000 */ - L(7.97269511411324433014513601847284008E-01), /* 3ffe9833b59b38154400000000000000 */ - L(8.00389936051826789142893403550260700E-01), /* 3ffe99ccb5aec7bec800000000000000 */ - L(8.03522573689060742863077280162542593E-01), /* 3ffe9b674f8f2f3d7c00000000000000 */ - L(8.06667472123343942680406826184480451E-01), /* 3ffe9d0384d70893f800000000000000 */ - L(8.09824679342079301047618855591281317E-01), /* 3ffe9ea15722892c7800000000000000 */ - L(8.12994243520486992160556383169023320E-01), /* 3ffea040c80f8374f000000000000000 */ - L(8.16176213022339780422953481320291758E-01), /* 3ffea1e1d93d687d0000000000000000 */ - L(8.19370636400700819157449927843117621E-01), /* 3ffea3848c4d49954c00000000000000 */ - L(8.22577562398664585696650419777142815E-01), /* 3ffea528e2e1d9f09800000000000000 */ - L(8.25797039950100647542896581398963463E-01), /* 3ffea6cede9f70467c00000000000000 */ - L(8.29029118180400342863478613253391813E-01), /* 3ffea876812c0877bc00000000000000 */ - L(8.32273846407226292054559735333896242E-01), /* 3ffeaa1fcc2f45343800000000000000 */ - L(8.35531274141265073440720811959181447E-01), /* 3ffeabcac15271a2a400000000000000 */ - L(8.38801451086982535754188461396552157E-01), /* 3ffead7762408309bc00000000000000 */ - L(8.42084427143382358016410194068157580E-01), /* 3ffeaf25b0a61a7b4c00000000000000 */ - L(8.45380252404767357221615498019673396E-01), /* 3ffeb0d5ae318680c400000000000000 */ - L(8.48688977161503960155997106085123960E-01), /* 3ffeb2875c92c4c99400000000000000 */ - L(8.52010651900789478530029441571969073E-01), /* 3ffeb43abd7b83db1c00000000000000 */ - L(8.55345327307422548246407245642330963E-01), /* 3ffeb5efd29f24c26400000000000000 */ - L(8.58693054264576483003423845730139874E-01), /* 3ffeb7a69db2bcc77800000000000000 */ - L(8.62053883854575708767242758767679334E-01), /* 3ffeb95f206d17228000000000000000 */ - L(8.65427867359675251357487013592617586E-01), /* 3ffebb195c86b6b29000000000000000 */ - L(8.68815056262843166123843730019871145E-01), /* 3ffebcd553b9d7b62000000000000000 */ - L(8.72215502248546159513864495238522068E-01), /* 3ffebe9307c271855000000000000000 */ - L(8.75629257203538208242932228131394368E-01), /* 3ffec0527a5e384ddc00000000000000 */ - L(8.79056373217652342599848225290770642E-01), /* 3ffec213ad4c9ed0d800000000000000 */ - L(8.82496902584595399599010079327854328E-01), /* 3ffec3d6a24ed8221800000000000000 */ - L(8.85950897802745995779361010136199184E-01), /* 3ffec59b5b27d9696800000000000000 */ - L(8.89418411575955636383383762222365476E-01), /* 3ffec761d99c5ba58800000000000000 */ - L(8.92899496814352794382685374330321793E-01), /* 3ffec92a1f72dd70d400000000000000 */ - L(8.96394206635150403439382671422208659E-01), /* 3ffecaf42e73a4c7d800000000000000 */ - L(8.99902594363456265202927397695020773E-01), /* 3ffeccc00868c0d18800000000000000 */ - L(9.03424713533086704009278378180169966E-01), /* 3ffece8daf1e0ba94c00000000000000 */ - L(9.06960617887383580004723171441582963E-01), /* 3ffed05d24612c2af000000000000000 */ - L(9.10510361380034133338412516422977205E-01), /* 3ffed22e6a0197c02c00000000000000 */ - L(9.14073998175894436579724811053893063E-01), /* 3ffed40181d094303400000000000000 */ - L(9.17651582651815816982221463149471674E-01), /* 3ffed5d66da13970f400000000000000 */ - L(9.21243169397474526149949269893113524E-01), /* 3ffed7ad2f48737a2000000000000000 */ - L(9.24848813216204823639543519675498828E-01), /* 3ffed985c89d041a3000000000000000 */ - L(9.28468569125835141431224428743007593E-01), /* 3ffedb603b7784cd1800000000000000 */ - L(9.32102492359527579068867453315760940E-01), /* 3ffedd3c89b26894e000000000000000 */ - L(9.35750638366620729469147477175283711E-01), /* 3ffedf1ab529fdd41c00000000000000 */ - L(9.39413062813475779888605643463961314E-01), /* 3ffee0fabfbc702a3c00000000000000 */ - L(9.43089821584325888048638830696290825E-01), /* 3ffee2dcab49ca51b400000000000000 */ - L(9.46780970782128888929563004239753354E-01), /* 3ffee4c079b3f8000400000000000000 */ - L(9.50486566729423443256052905780961737E-01), /* 3ffee6a62cdec7c7b000000000000000 */ - L(9.54206665969188322362626308859034907E-01), /* 3ffee88dc6afecfbfc00000000000000 */ - L(9.57941325265705301283958306157728657E-01), /* 3ffeea77490f0196b000000000000000 */ - L(9.61690601605425299247542625380447134E-01), /* 3ffeec62b5e5881fb000000000000000 */ - L(9.65454552197837823079851204965962097E-01), /* 3ffeee500f1eed967000000000000000 */ - L(9.69233234476344074348475032820715569E-01), /* 3ffef03f56a88b5d7800000000000000 */ - L(9.73026706099133165128733935489435680E-01), /* 3ffef2308e71a927a800000000000000 */ - L(9.76835024950062025261843245971249416E-01), /* 3ffef423b86b7ee79000000000000000 */ - L(9.80658249139538557015427500118676107E-01), /* 3ffef618d68936c09c00000000000000 */ - L(9.84496437005408397968864164795377292E-01), /* 3ffef80feabfeefa4800000000000000 */ - L(9.88349647113845042323276857132441364E-01), /* 3ffefa08f706bbf53800000000000000 */ - L(9.92217938260243514925207364285597578E-01), /* 3ffefc03fd56aa225000000000000000 */ - L(9.96101369470117486981664001177705359E-01), /* 3ffefe00ffaabffbbc00000000000000 */ -#define T_EXPL_RES1 (T_EXPL_ARG2 + 2 + 2*65 + 89) - L(1.00000000000000000000000000000000000E+00), /* 3fff0000000000000000000000000000 */ - L(1.00391388933834757590801700644078664E+00), /* 3fff0100802ab5577800000000000000 */ - L(1.00784309720644799091004983893071767E+00), /* 3fff0202015600445c00000000000000 */ - L(1.01178768355933151879000320150225889E+00), /* 3fff0304848362076c00000000000000 */ - L(1.01574770858668572692806719715008512E+00), /* 3fff04080ab55de39000000000000000 */ - L(1.01972323271377413034244341361045372E+00), /* 3fff050c94ef7a206c00000000000000 */ - L(1.02371431660235789884438872832106426E+00), /* 3fff06122436410dd000000000000000 */ - L(1.02772102115162167201845022646011785E+00), /* 3fff0718b98f42085000000000000000 */ - L(1.03174340749910264936062276319717057E+00), /* 3fff08205601127ec800000000000000 */ - L(1.03578153702162378824169763902318664E+00), /* 3fff0928fa934ef90800000000000000 */ - L(1.03983547133622999947277776300325058E+00), /* 3fff0a32a84e9c1f5800000000000000 */ - L(1.04390527230112850620713516036630608E+00), /* 3fff0b3d603ca7c32800000000000000 */ - L(1.04799100201663270004459604933799710E+00), /* 3fff0c49236829e8bc00000000000000 */ - L(1.05209272282610977189420964350574650E+00), /* 3fff0d55f2dce5d1e800000000000000 */ - L(1.05621049731693195106174698594259098E+00), /* 3fff0e63cfa7ab09d000000000000000 */ - L(1.06034438832143151909548350886325352E+00), /* 3fff0f72bad65671b800000000000000 */ - L(1.06449445891785943185681162503897212E+00), /* 3fff1082b577d34ed800000000000000 */ - L(1.06866077243134810492719566354935523E+00), /* 3fff1193c09c1c595c00000000000000 */ - L(1.07284339243487741866189821848820429E+00), /* 3fff12a5dd543ccc4c00000000000000 */ - L(1.07704238275024494209120007326419000E+00), /* 3fff13b90cb25176a400000000000000 */ - L(1.08125780744903959851299646288680378E+00), /* 3fff14cd4fc989cd6400000000000000 */ - L(1.08548973085361949442173568058933597E+00), /* 3fff15e2a7ae28fecc00000000000000 */ - L(1.08973821753809324563988525369495619E+00), /* 3fff16f9157587069400000000000000 */ - L(1.09400333232930546678574046381982043E+00), /* 3fff18109a3611c35000000000000000 */ - L(1.09828514030782586896606289883493446E+00), /* 3fff192937074e0cd800000000000000 */ - L(1.10258370680894224324930519287590869E+00), /* 3fff1a42ed01d8cbc800000000000000 */ - L(1.10689909742365749645287564817408565E+00), /* 3fff1b5dbd3f68122400000000000000 */ - L(1.11123137799969046168868658241990488E+00), /* 3fff1c79a8dacc350c00000000000000 */ - L(1.11558061464248076122274255794764031E+00), /* 3fff1d96b0eff0e79400000000000000 */ - L(1.11994687371619722204840741142106708E+00), /* 3fff1eb4d69bde569c00000000000000 */ - L(1.12433022184475073235176978414529003E+00), /* 3fff1fd41afcba45e800000000000000 */ - L(1.12873072591281087273529237791080959E+00), /* 3fff20f47f31c92e4800000000000000 */ - L(1.13314845306682632219974493636982515E+00), /* 3fff2216045b6f5cd000000000000000 */ - L(1.13758347071604959399593326452304609E+00), /* 3fff2338ab9b32134800000000000000 */ - L(1.14203584653356560174586320499656722E+00), /* 3fff245c7613b8a9b000000000000000 */ - L(1.14650564845732405583333957110880874E+00), /* 3fff258164e8cdb0d800000000000000 */ - L(1.15099294469117646722011727433709893E+00), /* 3fff26a7793f60164400000000000000 */ - L(1.15549780370591653744227755851170514E+00), /* 3fff27ceb43d84490400000000000000 */ - L(1.16002029424032515603215642840950750E+00), /* 3fff28f7170a755fd800000000000000 */ - L(1.16456048530221917269855680387991015E+00), /* 3fff2a20a2ce96406400000000000000 */ - L(1.16911844616950438835445424956560601E+00), /* 3fff2b4b58b372c79400000000000000 */ - L(1.17369424639123270948104504896036815E+00), /* 3fff2c7739e3c0f32c00000000000000 */ - L(1.17828795578866324378353169777255971E+00), /* 3fff2da4478b620c7400000000000000 */ - L(1.18289964445632783673900689791480545E+00), /* 3fff2ed282d763d42400000000000000 */ - L(1.18752938276310060494722620205720887E+00), /* 3fff3001ecf601af7000000000000000 */ - L(1.19217724135327157730657177125976887E+00), /* 3fff31328716a5d63c00000000000000 */ - L(1.19684329114762477708211463323095813E+00), /* 3fff32645269ea829000000000000000 */ - L(1.20152760334452030077656559114984702E+00), /* 3fff339750219b212c00000000000000 */ - L(1.20623024942098072687102217059873510E+00), /* 3fff34cb8170b5835400000000000000 */ - L(1.21095130113378179892436037334846333E+00), /* 3fff3600e78b6b11d000000000000000 */ - L(1.21569083052054743854242246925423387E+00), /* 3fff373783a722012400000000000000 */ - L(1.22044890990084875515009343871497549E+00), /* 3fff386f56fa7686e800000000000000 */ - L(1.22522561187730755216662714701669756E+00), /* 3fff39a862bd3c106400000000000000 */ - L(1.23002100933670455162882717559114099E+00), /* 3fff3ae2a8287e7a8000000000000000 */ - L(1.23483517545109100499445276000187732E+00), /* 3fff3c1e2876834aa800000000000000 */ - L(1.23966818367890557750499169742397498E+00), /* 3fff3d5ae4e2cae92c00000000000000 */ - L(1.24452010776609517384017067342938390E+00), /* 3fff3e98deaa11dcbc00000000000000 */ - L(1.24939102174724003813111039562500082E+00), /* 3fff3fd8170a52071800000000000000 */ - L(1.25428099994668373895478907797951251E+00), /* 3fff41188f42c3e32000000000000000 */ - L(1.25919011697966698459794088194030337E+00), /* 3fff425a4893dfc3f800000000000000 */ - L(1.26411844775346637881341393949696794E+00), /* 3fff439d443f5f159000000000000000 */ - L(1.26906606746853711786826579555054195E+00), /* 3fff44e183883d9e4800000000000000 */ - L(1.27403305161966090564007458851847332E+00), /* 3fff462707b2bac20c00000000000000 */ - L(1.27901947599709753244923149395617656E+00), /* 3fff476dd2045ac67800000000000000 */ - L(1.28402541668774150540599521264084615E+00), /* 3fff48b5e3c3e8186800000000000000 */ - L(1.28905095007628295311619126550795045E+00), /* 3fff49ff3e397492bc00000000000000 */ - L(1.29409615284637330434591717676084954E+00), /* 3fff4b49e2ae5ac67400000000000000 */ - L(1.29916110198179535206719492634874769E+00), /* 3fff4c95d26d3f440800000000000000 */ - L(1.30424587476763775839572190307080746E+00), /* 3fff4de30ec211e60000000000000000 */ - L(1.30935054879147461104338390214252286E+00), /* 3fff4f3198fa0f1cf800000000000000 */ - L(1.31447520194454914310711046709911898E+00), /* 3fff50817263c13cd000000000000000 */ - L(1.31961991242296217130558488861424848E+00), /* 3fff51d29c4f01cb3000000000000000 */ - L(1.32478475872886558573071624778094701E+00), /* 3fff5325180cfacf7800000000000000 */ - L(1.32996981967165983640200010995613411E+00), /* 3fff5478e6f02823d000000000000000 */ - L(1.33517517436919680440254865061433520E+00), /* 3fff55ce0a4c58c7bc00000000000000 */ - L(1.34040090224898678084031189428060316E+00), /* 3fff57248376b033d800000000000000 */ - L(1.34564708304941055283521222918352578E+00), /* 3fff587c53c5a7af0400000000000000 */ - L(1.35091379682093615244298234756570309E+00), /* 3fff59d57c910fa4e000000000000000 */ - L(1.35620112392734021300455538039386738E+00), /* 3fff5b2fff3210fd9400000000000000 */ - L(1.36150914504693443252136830778908916E+00), /* 3fff5c8bdd032e770800000000000000 */ - L(1.36683794117379636690046140756749082E+00), /* 3fff5de9176045ff5400000000000000 */ - L(1.37218759361900544124779344201670028E+00), /* 3fff5f47afa69210a800000000000000 */ - L(1.37755818401188367960941150158760138E+00), /* 3fff60a7a734ab0e8800000000000000 */ - L(1.38294979430124120867162673675920814E+00), /* 3fff6208ff6a88a46000000000000000 */ - L(1.38836250675662681297595213436579797E+00), /* 3fff636bb9a983258400000000000000 */ - L(1.39379640396958309755959248832368758E+00), /* 3fff64cfd75454ee7c00000000000000 */ - L(1.39925156885490681313299887733592186E+00), /* 3fff663559cf1bc7c400000000000000 */ - L(1.40472808465191417726103395580139477E+00), /* 3fff679c427f5a49f400000000000000 */ - L(1.41022603492571069194738697660795879E+00), /* 3fff690492cbf9432c00000000000000 */ - L(1.41574550356846662335641440222389065E+00), /* 3fff6a6e4c1d491e1800000000000000 */ - - L(9.98018323540573404351050612604012713E-01), /* 3ffefefc41f8d4bdb000000000000000 */ - L(9.98048781107475468932221929208026268E-01), /* 3ffeff003ff556aa8800000000000000 */ - L(9.98079239603882895082165305211674422E-01), /* 3ffeff043df9d4986000000000000000 */ - L(9.98109699029824021243584297735651489E-01), /* 3ffeff083c064e972c00000000000000 */ - L(9.98140159385327269125909310787392315E-01), /* 3ffeff0c3a1ac4b6ec00000000000000 */ - L(9.98170620670420977171843901487591211E-01), /* 3ffeff10383737079400000000000000 */ - L(9.98201082885133511579667242585856002E-01), /* 3ffeff14365ba5991c00000000000000 */ - L(9.98231546029493238547658506831794512E-01), /* 3ffeff183488107b7c00000000000000 */ - L(9.98262010103528552029672482603928074E-01), /* 3ffeff1c32bc77beb000000000000000 */ - L(9.98292475107267818223988342651864514E-01), /* 3ffeff2030f8db72b000000000000000 */ - L(9.98322941040739375573309644096298143E-01), /* 3ffeff242f3d3ba77000000000000000 */ - L(9.98353407903971645787066790944663808E-01), /* 3ffeff282d89986cf000000000000000 */ - L(9.98383875696992967307963340317655820E-01), /* 3ffeff2c2bddf1d32400000000000000 */ - L(9.98414344419831761845429696222709026E-01), /* 3ffeff302a3a47ea0c00000000000000 */ - L(9.98444814072516340086593800151604228E-01), /* 3ffeff34289e9ac19800000000000000 */ - L(9.98475284655075123740886056111776270E-01), /* 3ffeff38270aea69c800000000000000 */ - L(9.98505756167536479006585636852832977E-01), /* 3ffeff3c257f36f29400000000000000 */ - L(9.98536228609928799837547330753295682E-01), /* 3ffeff4023fb806bf800000000000000 */ - L(9.98566701982280452432050310562772211E-01), /* 3ffeff44227fc6e5ec00000000000000 */ - L(9.98597176284619802988373749030870385E-01), /* 3ffeff48210c0a706800000000000000 */ - L(9.98627651516975245460372434536111541E-01), /* 3ffeff4c1fa04b1b6800000000000000 */ - L(9.98658127679375173801901155457017012E-01), /* 3ffeff501e3c88f6e800000000000000 */ - L(9.98688604771847954211239084543194622E-01), /* 3ffeff541ce0c412e000000000000000 */ - L(9.98719082794421980642241010173165705E-01), /* 3ffeff581b8cfc7f4c00000000000000 */ - L(9.98749561747125619293186105096538085E-01), /* 3ffeff5c1a41324c2400000000000000 */ - L(9.98780041629987291873504773320746608E-01), /* 3ffeff6018fd65896800000000000000 */ - L(9.98810522443035364581476187595399097E-01), /* 3ffeff6417c196471000000000000000 */ - L(9.98841004186298203615379520670103375E-01), /* 3ffeff68168dc4951400000000000000 */ - L(9.98871486859804230684645176552294288E-01), /* 3ffeff6c1561f0837400000000000000 */ - L(9.98901970463581839743127943620493170E-01), /* 3ffeff70143e1a222c00000000000000 */ - L(9.98932454997659369233531378995394334E-01), /* 3ffeff74132241813000000000000000 */ - L(9.98962940462065268620861502313346136E-01), /* 3ffeff78120e66b08400000000000000 */ - L(9.98993426856827904103397486323956400E-01), /* 3ffeff7c110289c02000000000000000 */ - L(9.99023914181975669634994119405746460E-01), /* 3ffeff800ffeaac00000000000000000 */ - L(9.99054402437536959169506189937237650E-01), /* 3ffeff840f02c9c02000000000000000 */ - L(9.99084891623540138905212870668037795E-01), /* 3ffeff880e0ee6d07800000000000000 */ - L(9.99115381740013658307120181234495249E-01), /* 3ffeff8c0d2302010c00000000000000 */ - L(9.99145872786985911329082910015131347E-01), /* 3ffeff900c3f1b61d800000000000000 */ - L(9.99176364764485236413804614130640402E-01), /* 3ffeff940b633302d000000000000000 */ - L(9.99206857672540083026291313217370771E-01), /* 3ffeff980a8f48f3f800000000000000 */ - L(9.99237351511178817364822180024930276E-01), /* 3ffeff9c09c35d454800000000000000 */ - L(9.99267846280429861138827618560753763E-01), /* 3ffeffa008ff7006c000000000000000 */ - L(9.99298341980321608302162417203362565E-01), /* 3ffeffa4084381485c00000000000000 */ - L(9.99328838610882452808681364331278019E-01), /* 3ffeffa8078f911a1800000000000000 */ - L(9.99359336172140816367814863951934967E-01), /* 3ffeffac06e39f8bf400000000000000 */ - L(9.99389834664125092933417704443854745E-01), /* 3ffeffb0063facadec00000000000000 */ - L(9.99420334086863676459344674185558688E-01), /* 3ffeffb405a3b88ffc00000000000000 */ - L(9.99450834440384988655026177184481639E-01), /* 3ffeffb8050fc3422400000000000000 */ - L(9.99481335724717395718741386190231424E-01), /* 3ffeffbc0483ccd45c00000000000000 */ - L(9.99511837939889374871071936468069907E-01), /* 3ffeffc003ffd556ac00000000000000 */ - L(9.99542341085929264554721385138691403E-01), /* 3ffeffc40383dcd90800000000000000 */ - L(9.99572845162865514234695751838444266E-01), /* 3ffeffc8030fe36b7400000000000000 */ - L(9.99603350170726517864849824945849832E-01), /* 3ffeffcc02a3e91dec00000000000000 */ - L(9.99633856109540669399038392839429434E-01), /* 3ffeffd0023fee006c00000000000000 */ - L(9.99664362979336418302267475155531429E-01), /* 3ffeffd401e3f222f800000000000000 */ - L(9.99694870780142130772816244643763639E-01), /* 3ffeffd8018ff5958800000000000000 */ - L(9.99725379511986284031266336569387931E-01), /* 3ffeffdc0143f8682400000000000000 */ - L(9.99755889174897216520321308053098619E-01), /* 3ffeffe000fffaaac000000000000000 */ - L(9.99786399768903377704987178731244057E-01), /* 3ffeffe400c3fc6d6000000000000000 */ - L(9.99816911294033217050269968240172602E-01), /* 3ffeffe8008ffdc00800000000000000 */ - L(9.99847423750315072998873233700578567E-01), /* 3ffeffec0063feb2ac00000000000000 */ - L(9.99877937137777450526954226006637327E-01), /* 3ffefff0003fff555800000000000000 */ - L(9.99908451456448688077216502279043198E-01), /* 3ffefff40023ffb80000000000000000 */ - L(9.99938966706357262870241697783058044E-01), /* 3ffefff8000fffeaac00000000000000 */ - L(9.99969482887531541104308985268289689E-01), /* 3ffefffc0003fffd5400000000000000 */ -#define T_EXPL_RES2 (T_EXPL_RES1 + 1 + 89 + 65) - L(1.00000000000000000000000000000000000E+00), /* 3fff0000000000000000000000000000 */ - L(1.00003051804379100575559391472779680E+00), /* 3fff0002000200015400000000000000 */ - L(1.00006103701893306334724798034585547E+00), /* 3fff00040008000aac00000000000000 */ - L(1.00009155692545448346209013834595680E+00), /* 3fff0006001200240000000000000000 */ - L(1.00012207776338379883185325525118969E+00), /* 3fff0008002000555800000000000000 */ - L(1.00015259953274932014366527255333494E+00), /* 3fff000a003200a6ac00000000000000 */ - L(1.00018312223357958012925905677548144E+00), /* 3fff000c004801200400000000000000 */ - L(1.00021364586590294498691378066723701E+00), /* 3fff000e006201c95c00000000000000 */ - L(1.00024417042974783642605984823603649E+00), /* 3fff0010008002aab400000000000000 */ - L(1.00027469592514273166727889474714175E+00), /* 3fff001200a203cc1000000000000000 */ - L(1.00030522235211605242000132420798764E+00), /* 3fff001400c805357000000000000000 */ - L(1.00033574971069616488250630936818197E+00), /* 3fff001600f206eed000000000000000 */ - L(1.00036627800091160178652671675081365E+00), /* 3fff0018012009003800000000000000 */ - L(1.00039680722279067381919048784766346E+00), /* 3fff001a01520b71a000000000000000 */ - L(1.00042733737636191371223048918182030E+00), /* 3fff001c01880e4b1000000000000000 */ - L(1.00045786846165368766392589350289200E+00), /* 3fff001e01c211948400000000000000 */ - L(1.00048840047869447289485833607614040E+00), /* 3fff0020020015560000000000000000 */ - L(1.00051893342751269111445822090900037E+00), /* 3fff0022024219978400000000000000 */ - L(1.00054946730813676403215595200890675E+00), /* 3fff002402881e611000000000000000 */ - L(1.00058000212059516886853316464112140E+00), /* 3fff002602d223baa800000000000000 */ - L(1.00061053786491632733302026281307917E+00), /* 3fff0028032029ac4c00000000000000 */ - L(1.00064107454112866113504765053221490E+00), /* 3fff002a0372303dfc00000000000000 */ - L(1.00067161214926059198404573180596344E+00), /* 3fff002c03c83777b800000000000000 */ - L(1.00070215068934059710059614189958666E+00), /* 3fff002e04223f618400000000000000 */ - L(1.00073269016139709819412928482051939E+00), /* 3fff0030048048036000000000000000 */ - L(1.00076323056545857248522679583402351E+00), /* 3fff003204e251655000000000000000 */ - L(1.00079377190155338617216784768970683E+00), /* 3fff003405485b8f5000000000000000 */ - L(1.00082431416971007198668530691065826E+00), /* 3fff003605b266896800000000000000 */ - L(1.00085485736995705163820957750431262E+00), /* 3fff00380620725b9800000000000000 */ - L(1.00088540150232269132501983222027775E+00), /* 3fff003a06927f0ddc00000000000000 */ - L(1.00091594656683552377884893758164253E+00), /* 3fff003c07088ca83c00000000000000 */ - L(1.00094649256352402622027852885366883E+00), /* 3fff003e07829b32bc00000000000000 */ - L(1.00097703949241650933643654752813745E+00), /* 3fff00400800aab55400000000000000 */ - L(1.00100758735354156137020709138596430E+00), /* 3fff00420882bb381000000000000000 */ - L(1.00103813614692760403102056443458423E+00), /* 3fff00440908ccc2f000000000000000 */ - L(1.00106868587260300351715613942360505E+00), /* 3fff00460992df5df000000000000000 */ - L(1.00109923653059629256034668287611566E+00), /* 3fff00480a20f3111800000000000000 */ - L(1.00112978812093589287002259879955091E+00), /* 3fff004a0ab307e46800000000000000 */ - L(1.00116034064365022615561429120134562E+00), /* 3fff004c0b491ddfe000000000000000 */ - L(1.00119089409876788066000585786241572E+00), /* 3fff004e0be3350b8c00000000000000 */ - L(1.00122144848631711155917400901671499E+00), /* 3fff00500c814d6f6000000000000000 */ - L(1.00125200380632656260715407370298635E+00), /* 3fff00520d2367136c00000000000000 */ - L(1.00128256005882454449107399341301061E+00), /* 3fff00540dc981ffa800000000000000 */ - L(1.00131311724383964545381786592770368E+00), /* 3fff00560e739e3c2000000000000000 */ - L(1.00134367536140017618251363273884635E+00), /* 3fff00580f21bbd0cc00000000000000 */ - L(1.00137423441153472492004539162735455E+00), /* 3fff005a0fd3dac5b800000000000000 */ - L(1.00140479439427171337584354660066310E+00), /* 3fff005c1089fb22e400000000000000 */ - L(1.00143535530963956325933850166620687E+00), /* 3fff005e11441cf05000000000000000 */ - L(1.00146591715766680730226312334707472E+00), /* 3fff0060120240360400000000000000 */ - L(1.00149647993838186721404781565070152E+00), /* 3fff006212c464fc0000000000000000 */ - L(1.00152704365181316470412298258452211E+00), /* 3fff0064138a8b4a4400000000000000 */ - L(1.00155760829798923250422149067162536E+00), /* 3fff00661454b328d800000000000000 */ - L(1.00158817387693849232377374391944613E+00), /* 3fff00681522dc9fbc00000000000000 */ - L(1.00161874038868942138336137759324629E+00), /* 3fff006a15f507b6f400000000000000 */ - L(1.00164930783327055241471725821611471E+00), /* 3fff006c16cb34768800000000000000 */ - L(1.00167987621071025161612055853765924E+00), /* 3fff006e17a562e67400000000000000 */ - L(1.00171044552103705171930414508096874E+00), /* 3fff00701883930ec000000000000000 */ - L(1.00174101576427937443369842185347807E+00), /* 3fff00721965c4f76c00000000000000 */ - L(1.00177158694046569697988502412044909E+00), /* 3fff00741a4bf8a87c00000000000000 */ - L(1.00180215904962455208959681840497069E+00), /* 3fff00761b362e29f800000000000000 */ - L(1.00183273209178441698341543997230474E+00), /* 3fff00781c246583e400000000000000 */ - L(1.00186330606697365785962006157205906E+00), /* 3fff007a1d169ebe3c00000000000000 */ - L(1.00189388097522080744994354972732253E+00), /* 3fff007c1e0cd9e10800000000000000 */ - L(1.00192445681655439848611877096118405E+00), /* 3fff007e1f0716f45000000000000000 */ - L(1.00195503359100279716642489802325144E+00), /* 3fff0080200556001000000000000000 */ - L(1.00198561129859459173374602869444061E+00), /* 3fff00822107970c5400000000000000 */ -}; diff --git a/sysdeps/ieee754/ldbl-128/t_sincosl.c b/sysdeps/ieee754/ldbl-128/t_sincosl.c deleted file mode 100644 index 601662c399..0000000000 --- a/sysdeps/ieee754/ldbl-128/t_sincosl.c +++ /dev/null @@ -1,696 +0,0 @@ -/* Quad-precision floating point sine and cosine tables. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* For 0.1484375 + n/128.0, n=0..82 this table contains - first 113 bits of cosine, then at least 113 additional - bits and the same for sine. - 0.1484375+82.0/128.0 is the smallest number among above defined numbers - larger than pi/4. - Computed using gmp. - */ - -/* Include to grab typedefs and wrappers for _Float128 and such. */ -#include - -const _Float128 __sincosl_table[] = { - -/* x = 1.48437500000000000000000000000000000e-01L 3ffc3000000000000000000000000000 */ -/* cos(x) = 0.fd2f5320e1b790209b4dda2f98f79caaa7b873aff1014b0fbc5243766d03cb006bc837c4358 */ - L(9.89003367927322909016887196069562069e-01), /* 3ffefa5ea641c36f2041369bb45f31ef */ - L(2.15663692029265697782289400027743703e-35), /* 3f8bcaaa7b873aff1014b0fbc5243767 */ -/* sin(x) = 0.25dc50bc95711d0d9787d108fd438cf5959ee0bfb7a1e36e8b1a112968f356657420e9cc9ea */ - L(1.47892995873409608580026675734609314e-01), /* 3ffc2ee285e4ab88e86cbc3e8847ea1c */ - L(9.74950446464233268291647449768590886e-36), /* 3f8a9eb2b3dc17f6f43c6dd16342252d */ - -/* x = 1.56250000000000000000000000000000000e-01 3ffc4000000000000000000000000000 */ -/* cos(x) = 0.fce1a053e621438b6d60c76e8c45bf0a9dc71aa16f922acc10e95144ec796a249813c9cb649 */ - L(9.87817783816471944100503034363211317e-01), /* 3ffef9c340a7cc428716dac18edd188b */ - L(4.74271307836705897892468107620526395e-35), /* 3f8cf854ee38d50b7c915660874a8a27 */ -/* sin(x) = 0.27d66258bacd96a3eb335b365c87d59438c5142bb56a489e9b8db9d36234ffdebb6bdc22d8e */ - L(1.55614992773556041209920643203516258e-01), /* 3ffc3eb312c5d66cb51f599ad9b2e43f */ -L(-7.83989563419287980121718050629497270e-36), /* bf8a4d78e75d7a8952b6ec2c8e48c594 */ - -/* x = 1.64062500000000000000000000000000000e-01 3ffc5000000000000000000000000000 */ -/* cos(x) = 0.fc8ffa01ba6807417e05962b0d9fdf1fddb0cc4c07d22e19e08019bffa50a6c7acdb40307a3 */ - L(9.86571908399497588757337407495308409e-01), /* 3ffef91ff40374d00e82fc0b2c561b40 */ -L(-2.47327949936985362476252401212720725e-35), /* bf8c070112799d9fc16e8f30fbff3200 */ -/* sin(x) = 0.29cfd49b8be4f665276cab01cbf0426934906c3dd105473b226e410b1450f62e53ff7c6cce1 */ - L(1.63327491736612850846866172454354370e-01), /* 3ffc4e7ea4dc5f27b3293b65580e5f82 */ - L(1.81380344301155485770367902300754350e-36), /* 3f88349a48361ee882a39d913720858a */ - -/* x = 1.71875000000000000000000000000000000e-01 3ffc6000000000000000000000000000 */ -/* cos(x) = 0.fc3a6170f767ac735d63d99a9d439e1db5e59d3ef153a4265d5855850ed82b536bf361b80e3 */ - L(9.85265817718213816204294709759578994e-01), /* 3ffef874c2e1eecf58e6bac7b3353a87 */ - L(2.26568029505818066141517497778527952e-35), /* 3f8be1db5e59d3ef153a4265d5855851 */ -/* sin(x) = 0.2bc89f9f424de5485de7ce03b2514952b9faf5648c3244d4736feb95dbb9da49f3b58a9253b */ - L(1.71030022031395019281347969239834331e-01), /* 3ffc5e44fcfa126f2a42ef3e701d928a */ - L(7.01395875187487608875416030203241317e-36), /* 3f8a2a573f5eac9186489a8e6dfd72bb */ - -/* x = 1.79687500000000000000000000000000000e-01 3ffc7000000000000000000000000000 */ -/* cos(x) = 0.fbe0d7f7fef11e70aa43b8abf4f6a457cea20c8f3f676b47781f9821bbe9ce04b3c7b981c0b */ - L(9.83899591489663972178309351416487245e-01), /* 3ffef7c1afeffde23ce154877157e9ed */ - L(2.73414318948066207810486330723761265e-35), /* 3f8c22be75106479fb3b5a3bc0fcc10e */ -/* sin(x) = 0.2dc0bb80b49a97ffb34e8dd1f8db9df7af47ed2dcf58b12c8e7827e048cae929da02c04ecac */ - L(1.78722113535153659375356241864180724e-01), /* 3ffc6e05dc05a4d4bffd9a746e8fc6dd */ -L(-1.52906926517265103202547561260594148e-36), /* bf8804285c09691853a769b8c3ec0fdc */ - -/* x = 1.87500000000000000000000000000000000e-01 3ffc8000000000000000000000000000 */ -/* cos(x) = 0.fb835efcf670dd2ce6fe7924697eea13ea358867e9cdb3899b783f4f9f43aa5626e8b67b3bc */ - L(9.82473313101255257487327683243622495e-01), /* 3ffef706bdf9ece1ba59cdfcf248d2fe */ -L(-1.64924358891557584625463868014230342e-35), /* bf8b5ec15ca779816324c766487c0b06 */ -/* sin(x) = 0.2fb8205f75e56a2b56a1c4792f856258769af396e0189ef72c05e4df59a6b00e4b44a6ea515 */ - L(1.86403296762269884552379983103205261e-01), /* 3ffc7dc102fbaf2b515ab50e23c97c2b */ - L(1.76460304806826780010586715975331753e-36), /* 3f882c3b4d79cb700c4f7b9602f26fad */ - -/* x = 1.95312500000000000000000000000000000e-01 3ffc9000000000000000000000000000 */ -/* cos(x) = 0.fb21f7f5c156696b00ac1fe28ac5fd76674a92b4df80d9c8a46c684399005deccc41386257c */ - L(9.80987069605669190469329896435309665e-01), /* 3ffef643efeb82acd2d601583fc5158c */ -L(-1.90899259410096419886996331536278461e-36), /* bf8844cc5ab6a5903f931badc9cbde34 */ -/* sin(x) = 0.31aec65df552876f82ece9a2356713246eba6799983d7011b0b3698d6e1da919c15d57c30c1 */ - L(1.94073102892909791156055200214145404e-01), /* 3ffc8d7632efaa943b7c17674d11ab39 */ -L(-9.67304741051998267208945242944928999e-36), /* bf8a9b7228b30cccf851fdc9e992ce52 */ - -/* x = 2.03125000000000000000000000000000000e-01 3ffca000000000000000000000000000 */ -/* cos(x) = 0.fabca467fb3cb8f1d069f01d8ea33ade5bfd68296ecd1cc9f7b7609bbcf3676e726c3301334 */ - L(9.79440951715548359998530954502987493e-01), /* 3ffef57948cff67971e3a0d3e03b1d46 */ - L(4.42878056591560757066844797290067990e-35), /* 3f8cd6f2dfeb414b7668e64fbdbb04de */ -/* sin(x) = 0.33a4a5a19d86246710f602c44df4fa513f4639ce938477aeeabb82e8e0a7ed583a188879fd4 */ - L(2.01731063801638804725038151164000971e-01), /* 3ffc9d252d0cec31233887b016226fa8 */ -L(-4.27513434754966978435151290617384120e-36), /* bf896bb02e718c5b1ee21445511f45c8 */ - -/* x = 2.10937500000000000000000000000000000e-01 3ffcb000000000000000000000000000 */ -/* cos(x) = 0.fa5365e8f1d3ca27be1db5d76ae64d983d7470a4ab0f4ccf65a2b8c67a380df949953a09bc1 */ - L(9.77835053797959793331971572944454549e-01), /* 3ffef4a6cbd1e3a7944f7c3b6baed5cd */ -L(-3.79207422905180416937210853779192702e-35), /* bf8c933e145c7adaa7859984d2ea39cc */ -/* sin(x) = 0.3599b652f40ec999df12a0a4c8561de159c98d4e54555de518b97f48886f715d8df5f4f093e */ - L(2.09376712085993643711890752724881652e-01), /* 3ffcaccdb297a0764ccef895052642b1 */ -L(-1.59470287344329449965314638482515925e-36), /* bf880f531b3958d5d5510d73a3405bbc */ - -/* x = 2.18750000000000000000000000000000000e-01 3ffcc000000000000000000000000000 */ -/* cos(x) = 0.f9e63e1d9e8b6f6f2e296bae5b5ed9c11fd7fa2fe11e09fc7bde901abed24b6365e72f7db4e */ - L(9.76169473868635276723989035435135534e-01), /* 3ffef3cc7c3b3d16dede5c52d75cb6be */ -L(-2.87727974249481583047944860626985460e-35), /* bf8c31f701402e80f70fb01c210b7f2a */ -/* sin(x) = 0.378df09db8c332ce0d2b53d865582e4526ea336c768f68c32b496c6d11c1cd241bb9f1da523 */ - L(2.17009581095010156760578095826055396e-01), /* 3ffcbc6f84edc6199670695a9ec32ac1 */ - L(1.07356488794216831812829549198201194e-35), /* 3f8ac8a4dd466d8ed1ed1865692d8da2 */ - -/* x = 2.26562500000000000000000000000000000e-01 3ffcd000000000000000000000000000 */ -/* cos(x) = 0.f9752eba9fff6b98842beadab054a932fb0f8d5b875ae63d6b2288d09b148921aeb6e52f61b */ - L(9.74444313585988980349711056045434344e-01), /* 3ffef2ea5d753ffed7310857d5b560a9 */ - L(3.09947905955053419304514538592548333e-35), /* 3f8c4997d87c6adc3ad731eb59144685 */ -/* sin(x) = 0.39814cb10513453cb97b21bc1ca6a337b150c21a675ab85503bc09a436a10ab1473934e20c8 */ - L(2.24629204957705292350428549796424820e-01), /* 3ffccc0a6588289a29e5cbd90de0e535 */ - L(2.42061510849297469844695751870058679e-36), /* 3f889bd8a8610d33ad5c2a81de04d21b */ - -/* x = 2.34375000000000000000000000000000000e-01 3ffce000000000000000000000000000 */ -/* cos(x) = 0.f90039843324f9b940416c1984b6cbed1fc733d97354d4265788a86150493ce657cae032674 */ - L(9.72659678244912752670913058267565260e-01), /* 3ffef20073086649f3728082d833096e */ -L(-3.91759231819314904966076958560252735e-35), /* bf8ca09701c6613465595ecd43babcf5 */ -/* sin(x) = 0.3b73c2bf6b4b9f668ef9499c81f0d965087f1753fa64b086e58cb8470515c18c1412f8c2e02 */ - L(2.32235118611511462413930877746235872e-01), /* 3ffcdb9e15fb5a5cfb3477ca4ce40f87 */ -L(-4.96930483364191020075024624332928910e-36), /* bf89a6bde03a2b0166d3de469cd1ee3f */ - -/* x = 2.42187500000000000000000000000000000e-01 3ffcf000000000000000000000000000 */ -/* cos(x) = 0.f887604e2c39dbb20e4ec5825059a789ffc95b275ad9954078ba8a28d3fcfe9cc2c1d49697b */ - L(9.70815676770349462947490545785046027e-01), /* 3ffef10ec09c5873b7641c9d8b04a0b3 */ - L(2.97458820972393859125277682021202860e-35), /* 3f8c3c4ffe4ad93ad6ccaa03c5d45147 */ -/* sin(x) = 0.3d654aff15cb457a0fca854698aba33039a8a40626609204472d9d40309b626eccc6dff0ffa */ - L(2.39826857830661564441369251810886574e-01), /* 3ffceb2a57f8ae5a2bd07e542a34c55d */ - L(2.39867036569896287240938444445071448e-36), /* 3f88981cd45203133049022396cea018 */ - -/* x = 2.50000000000000000000000000000000000e-01 3ffd0000000000000000000000000000 */ -/* cos(x) = 0.f80aa4fbef750ba783d33cb95f94f8a41426dbe79edc4a023ef9ec13c944551c0795b84fee1 */ - L(9.68912421710644784144595449494189205e-01), /* 3ffef01549f7deea174f07a67972bf2a */ -L(-5.53634706113461989398873287749326500e-36), /* bf89d6faf649061848ed7f704184fb0e */ -/* sin(x) = 0.3f55dda9e62aed7513bd7b8e6a3d1635dd5676648d7db525898d7086af9330f03c7f285442a */ - L(2.47403959254522929596848704849389203e-01), /* 3ffcfaaeed4f31576ba89debdc7351e9 */ -L(-7.36487001108599532943597115275811618e-36), /* bf8a39445531336e50495b4ece51ef2a */ - -/* x = 2.57812500000000000000000000000000000e-01 3ffd0800000000000000000000000000 */ -/* cos(x) = 0.f78a098069792daabc9ee42591b7c5a68cb1ab822aeb446b3311b4ba5371b8970e2c1547ad7 */ - L(9.66950029230677822008341623610531503e-01), /* 3ffeef141300d2f25b55793dc84b2370 */ -L(-4.38972214432792412062088059990480514e-35), /* bf8cd2cb9a72a3eea8a5dca667725a2d */ -/* sin(x) = 0.414572fd94556e6473d620271388dd47c0ba050cdb5270112e3e370e8c4705ae006426fb5d5 */ - L(2.54965960415878467487556574864872628e-01), /* 3ffd0515cbf65155b991cf58809c4e23 */ - L(2.20280377918534721005071688328074154e-35), /* 3f8bd47c0ba050cdb5270112e3e370e9 */ - -/* x = 2.65625000000000000000000000000000000e-01 3ffd1000000000000000000000000000 */ -/* cos(x) = 0.f7058fde0788dfc805b8fe88789e4f4253e3c50afe8b22f41159620ab5940ff7df9557c0d1f */ - L(9.64928619104771009581074665315748371e-01), /* 3ffeee0b1fbc0f11bf900b71fd10f13d */ -L(-3.66685832670820775002475545602761113e-35), /* bf8c85ed60e1d7a80ba6e85f7534efaa */ -/* sin(x) = 0.4334033bcd90d6604f5f36c1d4b84451a87150438275b77470b50e5b968fa7962b5ffb379b7 */ - L(2.62512399769153281450949626395692931e-01), /* 3ffd0cd00cef364359813d7cdb0752e1 */ - L(3.24923677072031064673177178571821843e-36), /* 3f89146a1c5410e09d6ddd1c2d4396e6 */ - -/* x = 2.73437500000000000000000000000000000e-01 3ffd1800000000000000000000000000 */ -/* cos(x) = 0.f67d3a26af7d07aa4bd6d42af8c0067fefb96d5b46c031eff53627f215ea3242edc3f2e13eb */ - L(9.62848314709379699899701093480214365e-01), /* 3ffeecfa744d5efa0f5497ada855f180 */ - L(4.88986966383343450799422013051821394e-36), /* 3f899ffbee5b56d1b00c7bfd4d89fc85 */ -/* sin(x) = 0.452186aa5377ab20bbf2524f52e3a06a969f47166ab88cf88c111ad12c55941021ef3317a1a */ - L(2.70042816718585031552755063618827102e-01), /* 3ffd14861aa94ddeac82efc9493d4b8f */ -L(-2.37608892440611310321138680065803162e-35), /* bf8bf956960b8e99547730773eee52ed */ - -/* x = 2.81250000000000000000000000000000000e-01 3ffd2000000000000000000000000000 */ -/* cos(x) = 0.f5f10a7bb77d3dfa0c1da8b57842783280d01ce3c0f82bae3b9d623c168d2e7c29977994451 */ - L(9.60709243015561903066659350581313472e-01), /* 3ffeebe214f76efa7bf4183b516af085 */ -L(-5.87011558231583960712013351601221840e-36), /* bf89f35fcbf8c70fc1f5147118a770fa */ -/* sin(x) = 0.470df5931ae1d946076fe0dcff47fe31bb2ede618ebc607821f8462b639e1f4298b5ae87fd3 */ - L(2.77556751646336325922023446828128568e-01), /* 3ffd1c37d64c6b8765181dbf8373fd20 */ -L(-1.35848595468998128214344668770082997e-36), /* bf87ce44d1219e71439f87de07b9d49c */ - -/* x = 2.89062500000000000000000000000000000e-01 3ffd2800000000000000000000000000 */ -/* cos(x) = 0.f561030ddd7a78960ea9f4a32c6521554995667f5547bafee9ec48b3155cdb0f7fd00509713 */ - L(9.58511534581228627301969408154919822e-01), /* 3ffeeac2061bbaf4f12c1d53e94658ca */ - L(2.50770779371636481145735089393154404e-35), /* 3f8c0aaa4cab33faaa3dd7f74f624599 */ -/* sin(x) = 0.48f948446abcd6b0f7fccb100e7a1b26eccad880b0d24b59948c7cdd49514d44b933e6985c2 */ - L(2.85053745940547424587763033323252561e-01), /* 3ffd23e52111aaf35ac3dff32c4039e8 */ - L(2.04269325885902918802700123680403749e-35), /* 3f8bb26eccad880b0d24b59948c7cdd5 */ - -/* x = 2.96875000000000000000000000000000000e-01 3ffd3000000000000000000000000000 */ -/* cos(x) = 0.f4cd261d3e6c15bb369c8758630d2ac00b7ace2a51c0631bfeb39ed158ba924cc91e259c195 */ - L(9.56255323543175296975599942263028361e-01), /* 3ffee99a4c3a7cd82b766d390eb0c61a */ - L(3.21616572190865997051103645135837207e-35), /* 3f8c56005bd671528e0318dff59cf68b */ -/* sin(x) = 0.4ae37710fad27c8aa9c4cf96c03519b9ce07dc08a1471775499f05c29f86190aaebaeb9716e */ - L(2.92533342023327543624702326493913423e-01), /* 3ffd2b8ddc43eb49f22aa7133e5b00d4 */ - L(1.93539408668704450308003687950685128e-35), /* 3f8b9b9ce07dc08a1471775499f05c2a */ - -/* x = 3.04687500000000000000000000000000000e-01 3ffd3800000000000000000000000000 */ -/* cos(x) = 0.f43575f94d4f6b272f5fb76b14d2a64ab52df1ee8ddf7c651034e5b2889305a9ea9015d758a */ - L(9.53940747608894733981324795987611623e-01), /* 3ffee86aebf29a9ed64e5ebf6ed629a5 */ - L(2.88075689052478602008395972924657164e-35), /* 3f8c3255a96f8f746efbe32881a72d94 */ -/* sin(x) = 0.4ccc7a50127e1de0cb6b40c302c651f7bded4f9e7702b0471ae0288d091a37391950907202f */ - L(2.99995083378683051163248282011699944e-01), /* 3ffd3331e94049f877832dad030c0b19 */ - L(1.35174265535697850139283361475571050e-35), /* 3f8b1f7bded4f9e7702b0471ae0288d1 */ - -/* x = 3.12500000000000000000000000000000000e-01 3ffd4000000000000000000000000000 */ -/* cos(x) = 0.f399f500c9e9fd37ae9957263dab8877102beb569f101ee4495350868e5847d181d50d3cca2 */ - L(9.51567948048172202145488217364270962e-01), /* 3ffee733ea0193d3fa6f5d32ae4c7b57 */ - L(6.36842628598115658308749288799884606e-36), /* 3f8a0ee2057d6ad3e203dc892a6a10d2 */ -/* sin(x) = 0.4eb44a5da74f600207aaa090f0734e288603ffadb3eb2542a46977b105f8547128036dcf7f0 */ - L(3.07438514580380850670502958201982091e-01), /* 3ffd3ad129769d3d80081eaa8243c1cd */ - L(1.06515172423204645839241099453417152e-35), /* 3f8ac510c07ff5b67d64a8548d2ef621 */ - -/* x = 3.20312500000000000000000000000000000e-01 3ffd4800000000000000000000000000 */ -/* cos(x) = 0.f2faa5a1b74e82fd61fa05f9177380e8e69b7b15a945e8e5ae1124bf3d12b0617e03af4fab5 */ - L(9.49137069684463027665847421762105623e-01), /* 3ffee5f54b436e9d05fac3f40bf22ee7 */ - L(6.84433965991637152250309190468859701e-37), /* 3f86d1cd36f62b528bd1cb5c22497e7a */ -/* sin(x) = 0.509adf9a7b9a5a0f638a8fa3a60a199418859f18b37169a644fdb986c21ecb00133853bc35b */ - L(3.14863181319745250865036315126939016e-01), /* 3ffd426b7e69ee69683d8e2a3e8e9828 */ - L(1.92431240212432926993057705062834160e-35), /* 3f8b99418859f18b37169a644fdb986c */ - -/* x = 3.28125000000000000000000000000000000e-01 3ffd5000000000000000000000000000 */ -/* cos(x) = 0.f2578a595224dd2e6bfa2eb2f99cc674f5ea6f479eae2eb580186897ae3f893df1113ca06b8 */ - L(9.46648260886053321846099507295532976e-01), /* 3ffee4af14b2a449ba5cd7f45d65f33a */ -L(-4.32906339663000890941529420498824645e-35), /* bf8ccc5850ac85c30a8e8a53ff3cbb43 */ -/* sin(x) = 0.5280326c3cf481823ba6bb08eac82c2093f2bce3c4eb4ee3dec7df41c92c8a4226098616075 */ - L(3.22268630433386625687745919893188031e-01), /* 3ffd4a00c9b0f3d20608ee9aec23ab21 */ -L(-1.49505897804759263483853908335500228e-35), /* bf8b3df6c0d431c3b14b11c213820be3 */ - -/* x = 3.35937500000000000000000000000000000e-01 3ffd5800000000000000000000000000 */ -/* cos(x) = 0.f1b0a5b406b526d886c55feadc8d0dcc8eb9ae2ac707051771b48e05b25b000009660bdb3e3 */ - L(9.44101673557004345630017691253124860e-01), /* 3ffee3614b680d6a4db10d8abfd5b91a */ - L(1.03812535240120229609822461172145584e-35), /* 3f8ab991d735c558e0e0a2ee3691c0b6 */ -/* sin(x) = 0.54643b3da29de9b357155eef0f332fb3e66c83bf4dddd9491c5eb8e103ccd92d6175220ed51 */ - L(3.29654409930860171914317725126463176e-01), /* 3ffd5190ecf68a77a6cd5c557bbc3ccd */ -L(-1.22606996784743214973082192294232854e-35), /* bf8b04c19937c40b22226b6e3a1471f0 */ - -/* x = 3.43750000000000000000000000000000000e-01 3ffd6000000000000000000000000000 */ -/* cos(x) = 0.f105fa4d66b607a67d44e042725204435142ac8ad54dfb0907a4f6b56b06d98ee60f19e557a */ - L(9.41497463127881068644511236053670815e-01), /* 3ffee20bf49acd6c0f4cfa89c084e4a4 */ - L(3.20709366603165602071590241054884900e-36), /* 3f8910d450ab22b5537ec241e93dad5b */ -/* sin(x) = 0.5646f27e8bd65cbe3a5d61ff06572290ee826d9674a00246b05ae26753cdfc90d9ce81a7d02 */ - L(3.37020069022253076261281754173810024e-01), /* 3ffd591bc9fa2f5972f8e97587fc195d */ -L(-2.21435756148839473677777545049890664e-35), /* bf8bd6f117d92698b5ffdb94fa51d98b */ - -/* x = 3.51562500000000000000000000000000000e-01 3ffd6800000000000000000000000000 */ -/* cos(x) = 0.f0578ad01ede707fa39c09dc6b984afef74f3dc8d0efb0f4c5a6b13771145b3e0446fe33887 */ - L(9.38835788546265488632578305984712554e-01), /* 3ffee0af15a03dbce0ff473813b8d731 */ -L(-3.98758068773974031348585072752245458e-35), /* bf8ca808458611b978827859d2ca7644 */ -/* sin(x) = 0.582850a41e1dd46c7f602ea244cdbbbfcdfa8f3189be794dda427ce090b5f85164f1f80ac13 */ - L(3.44365158145698408207172046472223747e-01), /* 3ffd60a14290787751b1fd80ba891337 */ -L(-3.19791885005480924937758467594051927e-36), /* bf89100c815c339d9061ac896f60c7dc */ - -/* x = 3.59375000000000000000000000000000000e-01 3ffd7000000000000000000000000000 */ -/* cos(x) = 0.efa559f5ec3aec3a4eb03319278a2d41fcf9189462261125fe6147b078f1daa0b06750a1654 */ - L(9.36116812267055290294237411019508588e-01), /* 3ffedf4ab3ebd875d8749d6066324f14 */ - L(3.40481591236710658435409862439032162e-35), /* 3f8c6a0fe7c8c4a31130892ff30a3d84 */ -/* sin(x) = 0.5a084e28e35fda2776dfdbbb5531d74ced2b5d17c0b1afc4647529d50c295e36d8ceec126c1 */ - L(3.51689228994814059222584896955547016e-01), /* 3ffd682138a38d7f689ddb7f6eed54c7 */ - L(1.75293433418270210567525412802083294e-35), /* 3f8b74ced2b5d17c0b1afc4647529d51 */ - -/* x = 3.67187500000000000000000000000000000e-01 3ffd7800000000000000000000000000 */ -/* cos(x) = 0.eeef6a879146af0bf9b95ea2ea0ac0d3e2e4d7e15d93f48cbd41bf8e4fded40bef69e19eafa */ - L(9.33340700242548435655299229469995527e-01), /* 3ffeddded50f228d5e17f372bd45d416 */ -L(-4.75255707251679831124800898831382223e-35), /* bf8cf960e8d940f513605b9a15f2038e */ -/* sin(x) = 0.5be6e38ce8095542bc14ee9da0d36483e6734bcab2e07624188af5653f114eeb46738fa899d */ - L(3.58991834546065053677710299152868941e-01), /* 3ffd6f9b8e33a025550af053ba76834e */ -L(-2.06772389262723368139416970257112089e-35), /* bf8bb7c198cb4354d1f89dbe7750a9ac */ - -/* x = 3.75000000000000000000000000000000000e-01 3ffd8000000000000000000000000000 */ -/* cos(x) = 0.ee35bf5ccac89052cd91ddb734d3a47e262e3b609db604e217053803be0091e76daf28a89b7 */ - L(9.30507621912314291149476792229555481e-01), /* 3ffedc6b7eb9959120a59b23bb6e69a7 */ - L(2.74541088551732982573335285685416092e-35), /* 3f8c23f13171db04edb02710b829c01e */ -/* sin(x) = 0.5dc40955d9084f48a94675a2498de5d851320ff5528a6afb3f2e24de240fce6cbed1ba0ccd6 */ - L(3.66272529086047561372909351716264177e-01), /* 3ffd7710255764213d22a519d6892638 */ -L(-1.96768433534936592675897818253108989e-35), /* bf8ba27aecdf00aad759504c0d1db21e */ - -/* x = 3.82812500000000000000000000000000000e-01 3ffd8800000000000000000000000000 */ -/* cos(x) = 0.ed785b5c44741b4493c56bcb9d338a151c6f6b85d8f8aca658b28572c162b199680eb9304da */ - L(9.27617750192851909628030798799961350e-01), /* 3ffedaf0b6b888e83689278ad7973a67 */ - L(7.58520371916345756281201167126854712e-36), /* 3f8a42a38ded70bb1f1594cb1650ae58 */ -/* sin(x) = 0.5f9fb80f21b53649c432540a50e22c53057ff42ae0fdf1307760dc0093f99c8efeb2fbd7073 */ - L(3.73530868238692946416839752660848112e-01), /* 3ffd7e7ee03c86d4d92710c950294389 */ -L(-1.48023494778986556048879113411517128e-35), /* bf8b3acfa800bd51f020ecf889f23ff7 */ - -/* x = 3.90625000000000000000000000000000000e-01 3ffd9000000000000000000000000000 */ -/* cos(x) = 0.ecb7417b8d4ee3fec37aba4073aa48f1f14666006fb431d9671303c8100d10190ec8179c41d */ - L(9.24671261467036098502113014560138771e-01), /* 3ffed96e82f71a9dc7fd86f57480e755 */ -L(-4.14187124860031825108649347251175815e-35), /* bf8cb87075cccffc825e7134c767e1bf */ -/* sin(x) = 0.6179e84a09a5258a40e9b5face03e525f8b5753cd0105d93fe6298010c3458e84d75fe420e9 */ - L(3.80766408992390192057200703388896675e-01), /* 3ffd85e7a1282694962903a6d7eb3810 */ -L(-2.02009541175208636336924533372496107e-35), /* bf8bada074a8ac32fefa26c019d67fef */ - -/* x = 3.98437500000000000000000000000000000e-01 3ffd9800000000000000000000000000 */ -/* cos(x) = 0.ebf274bf0bda4f62447e56a093626798d3013b5942b1abfd155aacc9dc5c6d0806a20d6b9c1 */ - L(9.21668335573351918175411368202712714e-01), /* 3ffed7e4e97e17b49ec488fcad4126c5 */ -L(-1.83587995433957622948710263541479322e-35), /* bf8b8672cfec4a6bd4e5402eaa553362 */ -/* sin(x) = 0.6352929dd264bd44a02ea766325d8aa8bd9695fc8def3caefba5b94c9a3c873f7b2d3776ead */ - L(3.87978709727025046051079690813741960e-01), /* 3ffd8d4a4a774992f51280ba9d98c976 */ - L(8.01904783870935075844443278617586301e-36), /* 3f8a5517b2d2bf91bde795df74b72993 */ - -/* x = 4.06250000000000000000000000000000000e-01 3ffda000000000000000000000000000 */ -/* cos(x) = 0.eb29f839f201fd13b93796827916a78f15c85230a4e8ea4b21558265a14367e1abb4c30695a */ - L(9.18609155794918267837824977718549863e-01), /* 3ffed653f073e403fa27726f2d04f22d */ - L(2.97608282778274433460057745798409849e-35), /* 3f8c3c78ae429185274752590aac132d */ -/* sin(x) = 0.6529afa7d51b129631ec197c0a840a11d7dc5368b0a47956feb285caa8371c4637ef17ef01b */ - L(3.95167330240934236244832640419653657e-01), /* 3ffd94a6be9f546c4a58c7b065f02a10 */ - L(7.57560031388312550940040194042627704e-36), /* 3f8a423afb8a6d16148f2adfd650b955 */ - -/* x = 4.14062500000000000000000000000000000e-01 3ffda800000000000000000000000000 */ -/* cos(x) = 0.ea5dcf0e30cf03e6976ef0b1ec26515fba47383855c3b4055a99b5e86824b2cd1a691fdca7b */ - L(9.15493908848301228563917732180221882e-01), /* 3ffed4bb9e1c619e07cd2edde163d84d */ -L(-3.50775517955306954815090901168305659e-35), /* bf8c75022dc63e3d51e25fd52b3250bd */ -/* sin(x) = 0.66ff380ba0144109e39a320b0a3fa5fd65ea0585bcbf9b1a769a9b0334576c658139e1a1cbe */ - L(4.02331831777773111217105598880982387e-01), /* 3ffd9bfce02e805104278e68c82c28ff */ -L(-1.95678722882848174723569916504871563e-35), /* bf8ba029a15fa7a434064e5896564fcd */ - -/* x = 4.21875000000000000000000000000000000e-01 3ffdb000000000000000000000000000 */ -/* cos(x) = 0.e98dfc6c6be031e60dd3089cbdd18a75b1f6b2c1e97f79225202f03dbea45b07a5ec4efc062 */ - L(9.12322784872117846492029542047341734e-01), /* 3ffed31bf8d8d7c063cc1ba611397ba3 */ - L(7.86903886556373674267948132178845568e-36), /* 3f8a4eb63ed6583d2fef244a405e07b8 */ -/* sin(x) = 0.68d32473143327973bc712bcc4ccddc47630d755850c0655243b205934dc49ffed8eb76adcb */ - L(4.09471777053295066122694027011452236e-01), /* 3ffda34c91cc50cc9e5cef1c4af31333 */ - L(2.23945241468457597921655785729821354e-35), /* 3f8bdc47630d755850c0655243b20593 */ - -/* x = 4.29687500000000000000000000000000000e-01 3ffdb800000000000000000000000000 */ -/* cos(x) = 0.e8ba8393eca7821aa563d83491b6101189b3b101c3677f73d7bad7c10f9ee02b7ab4009739a */ - L(9.09095977415431051650381735684476417e-01), /* 3ffed1750727d94f04354ac7b069236c */ - L(1.20886014028444155733776025085677953e-35), /* 3f8b01189b3b101c3677f73d7bad7c11 */ -/* sin(x) = 0.6aa56d8e8249db4eb60a761fe3f9e559be456b9e13349ca99b0bfb787f22b95db3b70179615 */ - L(4.16586730282041119259112448831069657e-01), /* 3ffdaa95b63a09276d3ad829d87f8fe8 */ -L(-2.00488106831998813675438269796963612e-35), /* bf8baa641ba9461eccb635664f404878 */ - -/* x = 4.37500000000000000000000000000000000e-01 3ffdc000000000000000000000000000 */ -/* cos(x) = 0.e7e367d2956cfb16b6aa11e5419cd0057f5c132a6455bf064297e6a76fe2b72bb630d6d50ff */ - L(9.05813683425936420744516660652700258e-01), /* 3ffecfc6cfa52ad9f62d6d5423ca833a */ -L(-3.60950307605941169775676563004467163e-35), /* bf8c7fd4051f66acdd5207cdeb40cac5 */ -/* sin(x) = 0.6c760c14c8585a51dbd34660ae6c52ac7036a0b40887a0b63724f8b4414348c3063a637f457 */ - L(4.23676257203938010361683988031102480e-01), /* 3ffdb1d83053216169476f4d1982b9b1 */ - L(1.40484456388654470329473096579312595e-35), /* 3f8b2ac7036a0b40887a0b63724f8b44 */ - -/* x = 4.45312500000000000000000000000000000e-01 3ffdc800000000000000000000000000 */ -/* cos(x) = 0.e708ac84d4172a3e2737662213429e14021074d7e702e77d72a8f1101a7e70410df8273e9aa */ - L(9.02476103237941504925183272675895999e-01), /* 3ffece115909a82e547c4e6ecc442685 */ - L(2.26282899501344419018306295680210602e-35), /* 3f8be14021074d7e702e77d72a8f1102 */ -/* sin(x) = 0.6e44f8c36eb10a1c752d093c00f4d47ba446ac4c215d26b0316442f168459e677d06e7249e3 */ - L(4.30739925110803197216321517850849190e-01), /* 3ffdb913e30dbac42871d4b424f003d3 */ - L(1.54096780001629398850891218396761548e-35), /* 3f8b47ba446ac4c215d26b0316442f17 */ - -/* x = 4.53125000000000000000000000000000000e-01 3ffdd000000000000000000000000000 */ -/* cos(x) = 0.e62a551594b970a770b15d41d4c0e483e47aca550111df6966f9e7ac3a94ae49e6a71eb031e */ - L(8.99083440560138456216544929209379307e-01), /* 3ffecc54aa2b2972e14ee162ba83a982 */ -L(-2.06772615490904370666670275154751976e-35), /* bf8bb7c1b8535aafeee209699061853c */ -/* sin(x) = 0.70122c5ec5028c8cff33abf4fd340ccc382e038379b09cf04f9a52692b10b72586060cbb001 */ - L(4.37777302872755132861618974702796680e-01), /* 3ffdc048b17b140a3233fcceafd3f4d0 */ - L(9.62794364503442612477117426033922467e-36), /* 3f8a998705c0706f36139e09f34a4d25 */ - -/* x = 4.60937500000000000000000000000000000e-01 3ffdd800000000000000000000000000 */ -/* cos(x) = 0.e54864fe33e8575cabf5bd0e5cf1b1a8bc7c0d5f61702450fa6b6539735820dd2603ae355d5 */ - L(8.95635902463170698900570000446256350e-01), /* 3ffeca90c9fc67d0aeb957eb7a1cb9e3 */ - L(3.73593741659866883088620495542311808e-35), /* 3f8c8d45e3e06afb0b812287d35b29cc */ -/* sin(x) = 0.71dd9fb1ff4677853acb970a9f6729c6e3aac247b1c57cea66c77413f1f98e8b9e98e49d851 */ - L(4.44787960964527211433056012529525211e-01), /* 3ffdc7767ec7fd19de14eb2e5c2a7d9d */ -L(-1.67187936511493678007508371613954899e-35), /* bf8b6391c553db84e3a831599388bec1 */ - -/* x = 4.68750000000000000000000000000000000e-01 3ffde000000000000000000000000000 */ -/* cos(x) = 0.e462dfc670d421ab3d1a15901228f146a0547011202bf5ab01f914431859aef577966bc4fa4 */ - L(8.92133699366994404723900253723788575e-01), /* 3ffec8c5bf8ce1a843567a342b202452 */ -L(-1.10771937602567314732693079264692504e-35), /* bf8ad72bf571fddbfa814a9fc0dd779d */ -/* sin(x) = 0.73a74b8f52947b681baf6928eb3fb021769bf4779bad0e3aa9b1cdb75ec60aad9fc63ff19d5 */ - L(4.51771471491683776581688750134062870e-01), /* 3ffdce9d2e3d4a51eda06ebda4a3acff */ -L(-1.19387223016472295893794387275284505e-35), /* bf8afbd12c81710c8a5e38aac9c64914 */ - -/* x = 4.76562500000000000000000000000000000e-01 3ffde800000000000000000000000000 */ -/* cos(x) = 0.e379c9045f29d517c4808aa497c2057b2b3d109e76c0dc302d4d0698b36e3f0bdbf33d8e952 */ - L(8.88577045028035543317609023116020980e-01), /* 3ffec6f39208be53aa2f890115492f84 */ - L(4.12354278954664731443813655177022170e-36), /* 3f895ecacf44279db0370c0b5341a62d */ -/* sin(x) = 0.756f28d011d98528a44a75fc29c779bd734ecdfb582fdb74b68a4c4c4be54cfd0b2d3ad292f */ - L(4.58727408216736592377295028972874773e-01), /* 3ffdd5bca340476614a29129d7f0a71e */ -L(-4.70946994194182908929251719575431779e-36), /* bf8990a32c4c8129f40922d25d6ceced */ - -/* x = 4.84375000000000000000000000000000000e-01 3ffdf000000000000000000000000000 */ -/* cos(x) = 0.e28d245c58baef72225e232abc003c4366acd9eb4fc2808c2ab7fe7676cf512ac7f945ae5fb */ - L(8.84966156526143291697296536966647926e-01), /* 3ffec51a48b8b175dee444bc46557800 */ - L(4.53370570288325630442037826313462165e-35), /* 3f8ce21b3566cf5a7e14046155bff3b4 */ -/* sin(x) = 0.77353054ca72690d4c6e171fd99e6b39fa8e1ede5f052fd2964534c75340970a3a9cd3c5c32 */ - L(4.65655346585160182681199512507546779e-01), /* 3ffddcd4c15329c9a43531b85c7f667a */ -L(-1.56282598978971872478619772155305961e-35), /* bf8b4c60571e121a0fad02d69bacb38b */ - -/* x = 4.92187500000000000000000000000000000e-01 3ffdf800000000000000000000000000 */ -/* cos(x) = 0.e19cf580eeec046aa1422fa74807ecefb2a1911c94e7b5f20a00f70022d940193691e5bd790 */ - L(8.81301254251340599140161908298100173e-01), /* 3ffec339eb01ddd808d542845f4e9010 */ -L(-1.43419192312116687783945619009629445e-35), /* bf8b3104d5e6ee36b184a0df5ff08ffe */ -/* sin(x) = 0.78f95b0560a9a3bd6df7bd981dc38c61224d08bc20631ea932e605e53b579e9e0767dfcbbcb */ - L(4.72554863751304451146551317808516942e-01), /* 3ffde3e56c1582a68ef5b7def660770e */ - L(9.31324774957768018850224267625371204e-36), /* 3f8a8c2449a117840c63d5265cc0bca7 */ - -/* x = 5.00000000000000000000000000000000000e-01 3ffe0000000000000000000000000000 */ -/* cos(x) = 0.e0a94032dbea7cedbddd9da2fafad98556566b3a89f43eabd72350af3e8b19e801204d8fe2e */ - L(8.77582561890372716116281582603829681e-01), /* 3ffec1528065b7d4f9db7bbb3b45f5f6 */ -L(-2.89484960181363924855192538540698851e-35), /* bf8c33d54d4ca62bb05e0aa146e57a86 */ -/* sin(x) = 0.7abba1d12c17bfa1d92f0d93f60ded9992f45b4fcaf13cd58b303693d2a0db47db35ae8a3a9 */ - L(4.79425538604203000273287935215571402e-01), /* 3ffdeaee8744b05efe8764bc364fd838 */ -L(-1.38426977616718318950175848639381926e-35), /* bf8b2666d0ba4b0350ec32a74cfc96c3 */ - -/* x = 5.07812500000000000000000000000000000e-01 3ffe0400000000000000000000000000 */ -/* cos(x) = 0.dfb20840f3a9b36f7ae2c515342890b5ec583b8366cc2b55029e95094d31112383f2553498b */ - L(8.73810306413054508282556837071377159e-01), /* 3ffebf641081e75366def5c58a2a6851 */ - L(1.25716864497849302237218128599994785e-35), /* 3f8b0b5ec583b8366cc2b55029e95095 */ -/* sin(x) = 0.7c7bfdaf13e5ed17212f8a7525bfb113aba6c0741b5362bb8d59282a850b63716bca0c910f0 */ - L(4.86266951793275574311011306895834993e-01), /* 3ffdf1eff6bc4f97b45c84be29d496ff */ -L(-1.12269393250914752644352376448094271e-35), /* bf8add8a8b27f17c9593a88e54dafaaf */ - -/* x = 5.15625000000000000000000000000000000e-01 3ffe0800000000000000000000000000 */ -/* cos(x) = 0.deb7518814a7a931bbcc88c109cd41c50bf8bb48f20ae8c36628d1d3d57574f7dc58f27d91c */ - L(8.69984718058417388828915599901466243e-01), /* 3ffebd6ea310294f526377991182139b */ -L(-4.68168638300575626782741319792183837e-35), /* bf8cf1d7a03a25b86fa8b9e4ceb97161 */ -/* sin(x) = 0.7e3a679daaf25c676542bcb4028d0964172961c921823a4ef0c3a9070d886dbd073f6283699 */ - L(4.93078685753923057265136552753487121e-01), /* 3ffdf8e99e76abc9719d950af2d00a34 */ - L(7.06498693112535056352301101088624950e-36), /* 3f8a2c82e52c3924304749de187520e2 */ - -/* x = 5.23437500000000000000000000000000000e-01 3ffe0c00000000000000000000000000 */ -/* cos(x) = 0.ddb91ff318799172bd2452d0a3889f5169c64a0094bcf0b8aa7dcf0d7640a2eba68955a80be */ - L(8.66106030320656714696616831654267220e-01), /* 3ffebb723fe630f322e57a48a5a14711 */ - L(2.35610597588322493119667003904687628e-35), /* 3f8bf5169c64a0094bcf0b8aa7dcf0d7 */ -/* sin(x) = 0.7ff6d8a34bd5e8fa54c97482db5159df1f24e8038419c0b448b9eea8939b5d4dfcf40900257 */ - L(4.99860324733013463819556536946425724e-01), /* 3ffdffdb628d2f57a3e95325d20b6d45 */ - L(1.94636052312235297538564591686645139e-35), /* 3f8b9df1f24e8038419c0b448b9eea89 */ - -/* x = 5.31250000000000000000000000000000000e-01 3ffe1000000000000000000000000000 */ -/* cos(x) = 0.dcb7777ac420705168f31e3eb780ce9c939ecada62843b54522f5407eb7f21e556059fcd734 */ - L(8.62174479934880504367162510253324274e-01), /* 3ffeb96eeef58840e0a2d1e63c7d6f02 */ -L(-3.71556818317533582234562471835771823e-35), /* bf8c8b1b6309a92cebde255d6e855fc1 */ -/* sin(x) = 0.81b149ce34caa5a4e650f8d09fd4d6aa74206c32ca951a93074c83b2d294d25dbb0f7fdfad2 */ - L(5.06611454814257367642296000893867192e-01), /* 3ffe0362939c69954b49cca1f1a13faa */ -L(-3.10963699824274155702706043065967062e-35), /* bf8c4aac5efc9e69ab572b67c59be269 */ - -/* x = 5.39062500000000000000000000000000000e-01 3ffe1400000000000000000000000000 */ -/* cos(x) = 0.dbb25c25b8260c14f6e7bc98ec991b70c65335198b0ab628bad20cc7b229d4dd62183cfa055 */ - L(8.58190306862660347046629564970494649e-01), /* 3ffeb764b84b704c1829edcf7931d932 */ - L(2.06439574601190798155563653000684861e-35), /* 3f8bb70c65335198b0ab628bad20cc7b */ -/* sin(x) = 0.8369b434a372da7eb5c8a71fe36ce1e0b2b493f6f5cb2e38bcaec2a556b3678c401940d1c3c */ - L(5.13331663943471218288801270215706878e-01), /* 3ffe06d3686946e5b4fd6b914e3fc6da */ -L(-2.26614796466671970772244932848067224e-35), /* bf8be1f4d4b6c090a34d1c743513d5ab */ - -/* x = 5.46875000000000000000000000000000000e-01 3ffe1800000000000000000000000000 */ -/* cos(x) = 0.daa9d20860827063fde51c09e855e9932e1b17143e7244fd267a899d41ae1f3bc6a0ec42e27 */ - L(8.54153754277385385143451785105103176e-01), /* 3ffeb553a410c104e0c7fbca3813d0ac */ -L(-1.68707534013095152873222061722573172e-35), /* bf8b66cd1e4e8ebc18dbb02d9857662c */ -/* sin(x) = 0.852010f4f0800521378bd8dd614753d080c2e9e0775ffc609947b9132f5357404f464f06a58 */ - L(5.20020541953727004760213699874674730e-01), /* 3ffe0a4021e9e1000a426f17b1bac28f */ -L(-3.32415021330884924833711842866896734e-35), /* bf8c617bf9e8b0fc45001cfb35c23767 */ - -/* x = 5.54687500000000000000000000000000000e-01 3ffe1c00000000000000000000000000 */ -/* cos(x) = 0.d99ddd44e44a43d4d4a3a3ed95204106fd54d78e8c7684545c0da0b7c2c72be7a89b7c182ad */ - L(8.50065068549420263957072899177793617e-01), /* 3ffeb33bba89c89487a9a94747db2a41 */ -L(-4.73753917078785974356016104842568442e-35), /* bf8cf7c81559438b9c4bdd5d1f92fa42 */ -/* sin(x) = 0.86d45935ab396cb4e421e822dee54f3562dfcefeaa782184c23401d231f5ad981a1cc195b18 */ - L(5.26677680590386730710789410624833901e-01), /* 3ffe0da8b26b5672d969c843d045bdcb */ -L(-3.67066148195515214077582496518566735e-35), /* bf8c8654e901880aac3ef3d9ee5ff16e */ - -/* x = 5.62500000000000000000000000000000000e-01 3ffe2000000000000000000000000000 */ -/* cos(x) = 0.d88e820b1526311dd561efbc0c1a9a5375eb26f65d246c5744b13ca26a7e0fd42556da843c8 */ - L(8.45924499231067954459723078597493262e-01), /* 3ffeb11d04162a4c623baac3df781835 */ - L(1.98054947141989878179164342925274053e-35), /* 3f8ba5375eb26f65d246c5744b13ca27 */ -/* sin(x) = 0.88868625b4e1dbb2313310133022527200c143a5cb16637cb7daf8ade82459ff2e98511f40f */ - L(5.33302673536020173329131103308161529e-01), /* 3ffe110d0c4b69c3b764626620266045 */ -L(-3.42715291319551615996993795226755157e-35), /* bf8c6c6ff9f5e2d1a74ce41a41283a91 */ - -/* x = 5.70312500000000000000000000000000000e-01 3ffe2400000000000000000000000000 */ -/* cos(x) = 0.d77bc4985e93a607c9d868b906bbc6bbe3a04258814acb0358468b826fc91bd4d814827f65e */ - L(8.41732299041338366963111794309701085e-01), /* 3ffeaef78930bd274c0f93b0d1720d78 */ -L(-4.30821936750410026005408345400225948e-35), /* bf8cca20e2fded3bf5a9a7e53dcba3ed */ -/* sin(x) = 0.8a3690fc5bfc11bf9535e2739a8512f448a41251514bbed7fc18d530f9b4650fcbb2861b0aa */ - L(5.39895116435204405041660709903993340e-01), /* 3ffe146d21f8b7f8237f2a6bc4e7350a */ - L(1.42595803521626714477253741404712093e-35), /* 3f8b2f448a41251514bbed7fc18d5310 */ - -/* x = 5.78125000000000000000000000000000000e-01 3ffe2800000000000000000000000000 */ -/* cos(x) = 0.d665a937b4ef2b1f6d51bad6d988a4419c1d7051faf31a9efa151d7631117efac03713f950a */ - L(8.37488723850523685315353348917240617e-01), /* 3ffeaccb526f69de563edaa375adb311 */ - L(2.72761997872084533045777718677326179e-35), /* 3f8c220ce0eb828fd798d4f7d0a8ebb2 */ -/* sin(x) = 0.8be472f9776d809af2b88171243d63d66dfceeeb739cc894e023fbc165a0e3f26ff729c5d57 */ - L(5.46454606919203564403349553749411001e-01), /* 3ffe17c8e5f2eedb0135e57102e2487b */ -L(-2.11870230730160315420936523771864858e-35), /* bf8bc29920311148c63376b1fdc043ea */ - -/* x = 5.85937500000000000000000000000000000e-01 3ffe2c00000000000000000000000000 */ -/* cos(x) = 0.d54c3441844897fc8f853f0655f1ba695eba9fbfd7439dbb1171d862d9d9146ca5136f825ac */ - L(8.33194032664581363070224042208032321e-01), /* 3ffeaa98688308912ff91f0a7e0cabe3 */ - L(4.39440050052045486567668031751259899e-35), /* 3f8cd34af5d4fdfeba1cedd88b8ec317 */ -/* sin(x) = 0.8d902565817ee7839bce3cd128060119492cd36d42d82ada30d7f8bde91324808377ddbf5d4 */ - L(5.52980744630527369849695082681623667e-01), /* 3ffe1b204acb02fdcf07379c79a2500c */ - L(8.26624790417342895897164123189984127e-37), /* 3f8719492cd36d42d82ada30d7f8bde9 */ - -/* x = 5.93750000000000000000000000000000000e-01 3ffe3000000000000000000000000000 */ -/* cos(x) = 0.d42f6a1b9f0168cdf031c2f63c8d9304d86f8d34cb1d5fccb68ca0f2241427fc18d1fd5bbdf */ - L(8.28848487609325734810171790119116638e-01), /* 3ffea85ed4373e02d19be06385ec791b */ - L(1.43082508100496581719048175506239770e-35), /* 3f8b304d86f8d34cb1d5fccb68ca0f22 */ -/* sin(x) = 0.8f39a191b2ba6122a3fa4f41d5a3ffd421417d46f19a22230a14f7fcc8fce5c75b4b28b29d1 */ - L(5.59473131247366877384844006003116688e-01), /* 3ffe1e7343236574c24547f49e83ab48 */ -L(-1.28922620524163922306886952100992796e-37), /* bf845ef5f415c8732eeee7af584019b8 */ - -/* x = 6.01562500000000000000000000000000000e-01 3ffe3400000000000000000000000000 */ -/* cos(x) = 0.d30f4f392c357ab0661c5fa8a7d9b26627846fef214b1d19a22379ff9eddba087cf410eb097 */ - L(8.24452353914429207485643598212356053e-01), /* 3ffea61e9e72586af560cc38bf514fb3 */ - L(3.79160239225080026987031418939026741e-35), /* 3f8c93313c237f790a58e8cd111bcffd */ -/* sin(x) = 0.90e0e0d81ca678796cc92c8ea8c2815bc72ca78abe571bfa8576aacc571e096a33237e0e830 */ - L(5.65931370507905990773159095689276114e-01), /* 3ffe21c1c1b0394cf0f2d992591d5185 */ - L(1.02202775968053982310991962521535027e-36), /* 3f875bc72ca78abe571bfa8576aacc57 */ - -/* x = 6.09375000000000000000000000000000000e-01 3ffe3800000000000000000000000000 */ -/* cos(x) = 0.d1ebe81a95ee752e48a26bcd32d6e922d7eb44b8ad2232f6930795e84b56317269b9dd1dfa6 */ - L(8.20005899897234008255550633876556043e-01), /* 3ffea3d7d0352bdcea5c9144d79a65ae */ -L(-1.72008811955230823416724332297991247e-35), /* bf8b6dd2814bb4752ddcd096cf86a17b */ -/* sin(x) = 0.9285dc9bc45dd9ea3d02457bcce59c4175aab6ff7929a8d287195525fdace200dba032874fb */ - L(5.72355068234507240384953706824503608e-01), /* 3ffe250bb93788bbb3d47a048af799cb */ - L(2.12572273479933123944580199464514529e-35), /* 3f8bc4175aab6ff7929a8d2871955260 */ - -/* x = 6.17187500000000000000000000000000000e-01 3ffe3c00000000000000000000000000 */ -/* cos(x) = 0.d0c5394d772228195e25736c03574707de0af1ca344b13bd3914bfe27518e9e426f5deff1e1 */ - L(8.15509396946375476876345384201386217e-01), /* 3ffea18a729aee445032bc4ae6d806af */ -L(-4.28589138410712954051679139949341961e-35), /* bf8cc7c10fa871ae5da76216375a00ec */ -/* sin(x) = 0.94288e48bd0335fc41c4cbd2920497a8f5d1d8185c99fa0081f90c27e2a53ffdd208a0dbe69 */ - L(5.78743832357770354521111378581385347e-01), /* 3ffe28511c917a066bf8838997a52409 */ - L(1.77998063432551282609698670002456093e-35), /* 3f8b7a8f5d1d8185c99fa0081f90c27e */ - -/* x = 6.25000000000000000000000000000000000e-01 3ffe4000000000000000000000000000 */ -/* cos(x) = 0.cf9b476c897c25c5bfe750dd3f308eaf7bcc1ed00179a256870f4200445043dcdb1974b5878 */ - L(8.10963119505217902189534803941080724e-01), /* 3ffe9f368ed912f84b8b7fcea1ba7e61 */ - L(1.10481292856794436426051402418804358e-35), /* 3f8ad5ef7983da002f344ad0e1e84009 */ -/* sin(x) = 0.95c8ef544210ec0b91c49bd2aa09e8515fa61a156ebb10f5f8c232a6445b61ebf3c2ec268f9 */ - L(5.85097272940462154805399314150080459e-01), /* 3ffe2b91dea88421d817238937a55414 */ -L(-1.78164576278056195136525335403380464e-35), /* bf8b7aea059e5ea9144ef0a073dcd59c */ - -/* x = 6.32812500000000000000000000000000000e-01 3ffe4400000000000000000000000000 */ -/* cos(x) = 0.ce6e171f92f2e27f32225327ec440ddaefae248413efc0e58ceee1ae369aabe73f88c87ed1a */ - L(8.06367345055103913698795406077297399e-01), /* 3ffe9cdc2e3f25e5c4fe6444a64fd888 */ - L(1.04235088143133625463876245029180850e-35), /* 3f8abb5df5c490827df81cb19ddc35c7 */ -/* sin(x) = 0.9766f93cd18413a6aafc1cfc6fc28abb6817bf94ce349901ae3f48c3215d3eb60acc5f78903 */ - L(5.91415002201316315087000225758031236e-01), /* 3ffe2ecdf279a308274d55f839f8df85 */ - L(8.07390238063560077355762466502569603e-36), /* 3f8a576d02f7f299c6932035c7e91864 */ - -/* x = 6.40625000000000000000000000000000000e-01 3ffe4800000000000000000000000000 */ -/* cos(x) = 0.cd3dad1b5328a2e459f993f4f5108819faccbc4eeba9604e81c7adad51cc8a2561631a06826 */ - L(8.01722354098418450607492605652964208e-01), /* 3ffe9a7b5a36a65145c8b3f327e9ea21 */ - L(6.09487851305233089325627939458963741e-36), /* 3f8a033f599789dd752c09d038f5b5aa */ -/* sin(x) = 0.9902a58a45e27bed68412b426b675ed503f54d14c8172e0d373f42cadf04daf67319a7f94be */ - L(5.97696634538701531238647618967334337e-01), /* 3ffe32054b148bc4f7dad0825684d6cf */ -L(-2.49527608940873714527427941350461554e-35), /* bf8c0957e0559759bf468f964605e9a9 */ - -/* x = 6.48437500000000000000000000000000000e-01 3ffe4c00000000000000000000000000 */ -/* cos(x) = 0.cc0a0e21709883a3ff00911e11a07ee3bd7ea2b04e081be99be0264791170761ae64b8b744a */ - L(7.97028430141468342004642741431945296e-01), /* 3ffe98141c42e1310747fe01223c2341 */ -L(-8.35364432831812599727083251866305534e-37), /* bf871c42815d4fb1f7e416641fd9b86f */ -/* sin(x) = 0.9a9bedcdf01b38d993f3d7820781de292033ead73b89e28f39313dbe3a6e463f845b5fa8490 */ - L(6.03941786554156657267270287527367726e-01), /* 3ffe3537db9be03671b327e7af040f04 */ -L(-2.54578992328947177770363936132309779e-35), /* bf8c0eb6fe60a94623b0eb863676120e */ - -/* x = 6.56250000000000000000000000000000000e-01 3ffe5000000000000000000000000000 */ -/* cos(x) = 0.cad33f00658fe5e8204bbc0f3a66a0e6a773f87987a780b243d7be83b3db1448ca0e0e62787 */ - L(7.92285859677178543141501323781709399e-01), /* 3ffe95a67e00cb1fcbd04097781e74cd */ - L(2.47519558228473167879248891673807645e-35), /* 3f8c07353b9fc3cc3d3c05921ebdf41e */ -/* sin(x) = 0.9c32cba2b14156ef05256c4f857991ca6a547cd7ceb1ac8a8e62a282bd7b9183648a462bd04 */ - L(6.10150077075791371273742393566183220e-01), /* 3ffe386597456282adde0a4ad89f0af3 */ - L(1.33842237929938963780969418369150532e-35), /* 3f8b1ca6a547cd7ceb1ac8a8e62a282c */ - -/* x = 6.64062500000000000000000000000000000e-01 3ffe5400000000000000000000000000 */ -/* cos(x) = 0.c99944936cf48c8911ff93fe64b3ddb7981e414bdaf6aae1203577de44878c62bc3bc9cf7b9 */ - L(7.87494932167606083931328295965533034e-01), /* 3ffe93328926d9e9191223ff27fcc968 */ -L(-2.57915385618070637156514241185180920e-35), /* bf8c12433f0df5a1284aa8f6fe54410e */ -/* sin(x) = 0.9dc738ad14204e689ac582d0f85826590feece34886cfefe2e08cf2bb8488d55424dc9d3525 */ - L(6.16321127181550943005700433761731837e-01), /* 3ffe3b8e715a28409cd1358b05a1f0b0 */ - L(2.88497530050197716298085892460478666e-35), /* 3f8c32c87f7671a44367f7f17046795e */ - -/* x = 6.71875000000000000000000000000000000e-01 3ffe5800000000000000000000000000 */ -/* cos(x) = 0.c85c23c26ed7b6f014ef546c47929682122876bfbf157de0aff3c4247d820c746e32cd4174f */ - L(7.82655940026272796930787447428139026e-01), /* 3ffe90b84784ddaf6de029dea8d88f25 */ - L(1.69332045679237919427807771288506254e-35), /* 3f8b682122876bfbf157de0aff3c4248 */ -/* sin(x) = 0.9f592e9b66a9cf906a3c7aa3c10199849040c45ec3f0a747597311038101780c5f266059dbf */ - L(6.22454560222343683041926705090443330e-01), /* 3ffe3eb25d36cd539f20d478f5478203 */ - L(1.91974786921147072717621236192269859e-35), /* 3f8b9849040c45ec3f0a747597311038 */ - -/* x = 6.79687500000000000000000000000000000e-01 3ffe5c00000000000000000000000000 */ -/* cos(x) = 0.c71be181ecd6875ce2da5615a03cca207d9adcb9dfb0a1d6c40a4f0056437f1a59ccddd06ee */ - L(7.77769178600317903122203513685412863e-01), /* 3ffe8e37c303d9ad0eb9c5b4ac2b407a */ -L(-4.05296033424632846931240580239929672e-35), /* bf8caefc13291a31027af149dfad87fd */ -/* sin(x) = 0.a0e8a725d33c828c11fa50fd9e9a15ffecfad43f3e534358076b9b0f6865694842b1e8c67dc */ - L(6.28550001845029662028004327939032867e-01), /* 3ffe41d14e4ba679051823f4a1fb3d34 */ - L(1.65507421184028099672784511397428852e-35), /* 3f8b5ffecfad43f3e534358076b9b0f7 */ - -/* x = 6.87500000000000000000000000000000000e-01 3ffe6000000000000000000000000000 */ -/* cos(x) = 0.c5d882d2ee48030c7c07d28e981e34804f82ed4cf93655d2365389b716de6ad44676a1cc5da */ - L(7.72834946152471544810851845913425178e-01), /* 3ffe8bb105a5dc900618f80fa51d303c */ - L(3.94975229341211664237241534741146939e-35), /* 3f8ca4027c176a67c9b2ae91b29c4db9 */ -/* sin(x) = 0.a2759c0e79c35582527c32b55f5405c182c66160cb1d9eb7bb0b7cdf4ad66f317bda4332914 */ - L(6.34607080015269296850309914203671436e-01), /* 3ffe44eb381cf386ab04a4f8656abea8 */ - L(4.33025916939968369326060156455927002e-36), /* 3f897060b1985832c767adeec2df37d3 */ - -/* x = 6.95312500000000000000000000000000000e-01 3ffe6400000000000000000000000000 */ -/* cos(x) = 0.c4920cc2ec38fb891b38827db08884fc66371ac4c2052ca8885b981bbcfd3bb7b093ee31515 */ - L(7.67853543842850365879920759114193964e-01), /* 3ffe89241985d871f712367104fb6111 */ - L(3.75100035267325597157244776081706979e-36), /* 3f893f198dc6b130814b2a2216e606ef */ -/* sin(x) = 0.a400072188acf49cd6b173825e038346f105e1301afe642bcc364cea455e21e506e3e927ed8 */ - L(6.40625425040230409188409779413961021e-01), /* 3ffe48000e431159e939ad62e704bc07 */ - L(2.46542747294664049615806500747173281e-36), /* 3f88a37882f0980d7f3215e61b267523 */ - -/* x = 7.03125000000000000000000000000000000e-01 3ffe6800000000000000000000000000 */ -/* cos(x) = 0.c348846bbd3631338ffe2bfe9dd1381a35b4e9c0c51b4c13fe376bad1bf5caacc4542be0aa9 */ - L(7.62825275710576250507098753625429792e-01), /* 3ffe869108d77a6c62671ffc57fd3ba2 */ - L(4.22067411888601505004748939382325080e-35), /* 3f8cc0d1ada74e0628da609ff1bb5d69 */ -/* sin(x) = 0.a587e23555bb08086d02b9c662cdd29316c3e9bd08d93793634a21b1810cce73bdb97a99b9e */ - L(6.46604669591152370524042159882800763e-01), /* 3ffe4b0fc46aab761010da05738cc59c */ -L(-3.41742981816219412415674365946079826e-35), /* bf8c6b6749e0b217b9364364e5aef274 */ - -/* x = 7.10937500000000000000000000000000000e-01 3ffe6c00000000000000000000000000 */ -/* cos(x) = 0.c1fbeef380e4ffdd5a613ec8722f643ffe814ec2343e53adb549627224fdc9f2a7b77d3d69f */ - L(7.57750448655219342240234832230493361e-01), /* 3ffe83f7dde701c9ffbab4c27d90e45f */ -L(-2.08767968311222650582659938787920125e-35), /* bf8bbc0017eb13dcbc1ac524ab69d8de */ -/* sin(x) = 0.a70d272a76a8d4b6da0ec90712bb748b96dabf88c3079246f3db7eea6e58ead4ed0e2843303 */ - L(6.52544448725765956407573982284767763e-01), /* 3ffe4e1a4e54ed51a96db41d920e2577 */ -L(-8.61758060284379660697102362141557170e-36), /* bf8a6e8d24a80ee79f0db721849022b2 */ - -/* x = 7.18750000000000000000000000000000000e-01 3ffe7000000000000000000000000000 */ -/* cos(x) = 0.c0ac518c8b6ae710ba37a3eeb90cb15aebcb8bed4356fb507a48a6e97de9aa6d9660116b436 */ - L(7.52629372418066476054541324847143116e-01), /* 3ffe8158a31916d5ce21746f47dd7219 */ - L(3.71306958657663189665450864311104571e-35), /* 3f8c8ad75e5c5f6a1ab7da83d245374c */ -/* sin(x) = 0.a88fcfebd9a8dd47e2f3c76ef9e2439920f7e7fbe735f8bcc985491ec6f12a2d4214f8cfa99 */ - L(6.58444399910567541589583954884041989e-01), /* 3ffe511f9fd7b351ba8fc5e78eddf3c5 */ -L(-4.54412944084300330523721391865787219e-35), /* bf8ce336f840c020c6503a19b3d5b70a */ - -/* x = 7.26562500000000000000000000000000000e-01 3ffe7400000000000000000000000000 */ -/* cos(x) = 0.bf59b17550a4406875969296567cf3e3b4e483061877c02811c6cae85fad5a6c3da58f49292 */ - L(7.47462359563216166669700384714767552e-01), /* 3ffe7eb362eaa14880d0eb2d252cacfa */ -L(-9.11094340926220027288083639048016945e-36), /* bf8a8389636f9f3cf107fafdc726a2f4 */ -/* sin(x) = 0.aa0fd66eddb921232c28520d3911b8a03193b47f187f1471ac216fbcd5bb81029294d3a73f1 */ - L(6.64304163042946276515506587432846246e-01), /* 3ffe541facddbb7242465850a41a7223 */ - L(4.26004843895378210155889028714676019e-35), /* 3f8cc5018c9da3f8c3f8a38d610b7de7 */ - -/* x = 7.34375000000000000000000000000000000e-01 3ffe7800000000000000000000000000 */ -/* cos(x) = 0.be0413f84f2a771c614946a88cbf4da1d75a5560243de8f2283fefa0ea4a48468a52d51d8b3 */ - L(7.42249725458501306991347253449610537e-01), /* 3ffe7c0827f09e54ee38c2928d51197f */ -L(-3.78925270049800913539923473871287550e-35), /* bf8c92f1452d54fede10b86ebe0082f9 */ -/* sin(x) = 0.ab8d34b36acd987210ed343ec65d7e3adc2e7109fce43d55c8d57dfdf55b9e01d2cc1f1b9ec */ - L(6.70123380473162894654531583500648495e-01), /* 3ffe571a6966d59b30e421da687d8cbb */ -L(-1.33165852952743729897634069393684656e-36), /* bf87c523d18ef6031bc2aa372a82020b */ - -/* x = 7.42187500000000000000000000000000000e-01 3ffe7c00000000000000000000000000 */ -/* cos(x) = 0.bcab7e6bfb2a14a9b122c574a376bec98ab14808c64a4e731b34047e217611013ac99c0f25d */ - L(7.36991788256240741057089385586450844e-01), /* 3ffe7956fcd7f654295362458ae946ed */ - L(4.72358938637974850573747497460125519e-35), /* 3f8cf64c558a404632527398d9a023f1 */ -/* sin(x) = 0.ad07e4c409d08c4fa3a9057bb0ac24b8636e74e76f51e09bd6b2319707cbd9f5e254643897a */ - L(6.75901697026178809189642203142423973e-01), /* 3ffe5a0fc98813a1189f47520af76158 */ - L(2.76252586616364878801928456702948857e-35), /* 3f8c25c31b73a73b7a8f04deb5918cb8 */ - -/* x = 7.50000000000000000000000000000000000e-01 3ffe8000000000000000000000000000 */ -/* cos(x) = 0.bb4ff632a908f73ec151839cb9d993b4e0bfb8f20e7e44e6e4aee845e35575c3106dbe6fd06 */ - L(7.31688868873820886311838753000084529e-01), /* 3ffe769fec655211ee7d82a3073973b3 */ - L(1.48255637548931697184991710293198620e-35), /* 3f8b3b4e0bfb8f20e7e44e6e4aee845e */ -/* sin(x) = 0.ae7fe0b5fc786b2d966e1d6af140a488476747c2646425fc7533f532cd044cb10a971a49a6a */ - L(6.81638760023334166733241952779893908e-01), /* 3ffe5cffc16bf8f0d65b2cdc3ad5e281 */ - L(2.74838775935027549024224114338667371e-35), /* 3f8c24423b3a3e1323212fe3a99fa996 */ - -/* x = 7.57812500000000000000000000000000000e-01 3ffe8400000000000000000000000000 */ -/* cos(x) = 0.b9f180ba77dd0751628e135a9508299012230f14becacdd14c3f8862d122de5b56d55b53360 */ - L(7.26341290974108590410147630237598973e-01), /* 3ffe73e30174efba0ea2c51c26b52a10 */ - L(3.12683579338351123545814364980658990e-35), /* 3f8c4c80911878a5f6566e8a61fc4317 */ -/* sin(x) = 0.aff522a954f2ba16d9defdc416e33f5e9a5dfd5a6c228e0abc4d521327ff6e2517a7b3851dd */ - L(6.87334219303873534951703613035647220e-01), /* 3ffe5fea4552a9e5742db3bdfb882dc6 */ - L(4.76739454455410744997012795035529128e-35), /* 3f8cfaf4d2efead361147055e26a9099 */ - -/* x = 7.65625000000000000000000000000000000e-01 3ffe8800000000000000000000000000 */ -/* cos(x) = 0.b890237d3bb3c284b614a0539016bfa1053730bbdf940fa895e185f8e58884d3dda15e63371 */ - L(7.20949380945696418043812784148447688e-01), /* 3ffe712046fa776785096c2940a7202d */ - L(4.78691285733673379499536326050811832e-35), /* 3f8cfd0829b985defca07d44af0c2fc7 */ -/* sin(x) = 0.b167a4c90d63c4244cf5493b7cc23bd3c3c1225e078baa0c53d6d400b926281f537a1a260e6 */ - L(6.92987727246317910281815490823048210e-01), /* 3ffe62cf49921ac7884899ea9276f984 */ - L(4.50089871077663557180849219529189918e-35), /* 3f8cde9e1e0912f03c5d50629eb6a006 */ - -/* x = 7.73437500000000000000000000000000000e-01 3ffe8c00000000000000000000000000 */ -/* cos(x) = 0.b72be40067aaf2c050dbdb7a14c3d7d4f203f6b3f0224a4afe55d6ec8e92b508fd5c5984b3b */ - L(7.15513467882981573520620561289896903e-01), /* 3ffe6e57c800cf55e580a1b7b6f42988 */ -L(-3.02191815581445336509438104625489192e-35), /* bf8c41586fe04a607eedada80d51489c */ -/* sin(x) = 0.b2d7614b1f3aaa24df2d6e20a77e1ca3e6d838c03e29c1bcb026e6733324815fadc9eb89674 */ - L(6.98598938789681741301929277107891591e-01), /* 3ffe65aec2963e755449be5adc414efc */ - L(2.15465226809256290914423429408722521e-35), /* 3f8bca3e6d838c03e29c1bcb026e6733 */ - -/* x = 7.81250000000000000000000000000000000e-01 3ffe9000000000000000000000000000 */ -/* cos(x) = 0.b5c4c7d4f7dae915ac786ccf4b1a498d3e73b6e5e74fe7519d9c53ee6d6b90e881bddfc33e1 */ - L(7.10033883566079674974121643959490219e-01), /* 3ffe6b898fa9efb5d22b58f0d99e9635 */ -L(-4.09623224763692443220896752907902465e-35), /* bf8cb3960c6248d0c580c573131d608d */ -/* sin(x) = 0.b44452709a59752905913765434a59d111f0433eb2b133f7d103207e2aeb4aae111ddc385b3 */ - L(7.04167511454533672780059509973942844e-01), /* 3ffe6888a4e134b2ea520b226eca8695 */ -L(-2.87259372740393348676633610275598640e-35), /* bf8c3177707de60a6a76604177e6fc0f */ - -/* x = 7.89062500000000000000000000000000000e-01 3ffe9400000000000000000000000000 */ -/* cos(x) = 0.b45ad4975b1294cadca4cf40ec8f22a68cd14b175835239a37e63acb85e8e9505215df18140 */ - L(7.04510962440574606164129481545916976e-01), /* 3ffe68b5a92eb6252995b9499e81d91e */ - L(2.60682037357042658395360726992048803e-35), /* 3f8c1534668a58bac1a91cd1bf31d65c */ -/* sin(x) = 0.b5ae7285bc10cf515753847e8f8b7a30e0a580d929d770103509880680f7b8b0e8ad23b65d8 */ - L(7.09693105363899724959669028139035515e-01), /* 3ffe6b5ce50b78219ea2aea708fd1f17 */ -L(-4.37026016974122945368562319136420097e-36), /* bf8973c7d69fc9b58a23fbf2bd9dfe60 */ -}; diff --git a/sysdeps/ieee754/ldbl-128/w_expl_compat.c b/sysdeps/ieee754/ldbl-128/w_expl_compat.c deleted file mode 100644 index c32616e504..0000000000 --- a/sysdeps/ieee754/ldbl-128/w_expl_compat.c +++ /dev/null @@ -1,42 +0,0 @@ -/* w_expl.c -- long double version of w_exp.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * wrapper expl(x) - */ - -#include -#include - -long double __expl(long double x) /* wrapper exp */ -{ -#ifdef _IEEE_LIBM - return __ieee754_expl(x); -#else - long double z = __ieee754_expl (x); - if (__glibc_unlikely (!isfinite (z) || z == 0) - && isfinite (x) && _LIB_VERSION != _IEEE_) - return __kernel_standard_l (x, x, 206 + !!signbit (x)); - - return z; -#endif -} -hidden_def (__expl) -weak_alias (__expl, expl) diff --git a/sysdeps/ieee754/ldbl-128/x2y2m1l.c b/sysdeps/ieee754/ldbl-128/x2y2m1l.c deleted file mode 100644 index d3f88331b5..0000000000 --- a/sysdeps/ieee754/ldbl-128/x2y2m1l.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Compute x^2 + y^2 - 1, without large cancellation error. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -/* Calculate X + Y exactly and store the result in *HI + *LO. It is - given that |X| >= |Y| and the values are small enough that no - overflow occurs. */ - -static inline void -add_split (_Float128 *hi, _Float128 *lo, _Float128 x, _Float128 y) -{ - /* Apply Dekker's algorithm. */ - *hi = x + y; - *lo = (x - *hi) + y; -} - -/* Compare absolute values of floating-point values pointed to by P - and Q for qsort. */ - -static int -compare (const void *p, const void *q) -{ - _Float128 pld = fabsl (*(const _Float128 *) p); - _Float128 qld = fabsl (*(const _Float128 *) q); - if (pld < qld) - return -1; - else if (pld == qld) - return 0; - else - return 1; -} - -/* Return X^2 + Y^2 - 1, computed without large cancellation error. - It is given that 1 > X >= Y >= epsilon / 2, and that X^2 + Y^2 >= - 0.5. */ - -_Float128 -__x2y2m1l (_Float128 x, _Float128 y) -{ - _Float128 vals[5]; - SET_RESTORE_ROUNDL (FE_TONEAREST); - mul_splitl (&vals[1], &vals[0], x, x); - mul_splitl (&vals[3], &vals[2], y, y); - vals[4] = -1; - qsort (vals, 5, sizeof (_Float128), compare); - /* Add up the values so that each element of VALS has absolute value - at most equal to the last set bit of the next nonzero - element. */ - for (size_t i = 0; i <= 3; i++) - { - add_split (&vals[i + 1], &vals[i], vals[i + 1], vals[i]); - qsort (vals + i + 1, 4 - i, sizeof (_Float128), compare); - } - /* Now any error from this addition will be small. */ - return vals[4] + vals[3] + vals[2] + vals[1] + vals[0]; -} diff --git a/sysdeps/ieee754/ldbl-128ibm/Makefile b/sysdeps/ieee754/ldbl-128ibm/Makefile deleted file mode 100644 index bdba6cc6b5..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# The`long double' type is a distinct type we support if -# -mlong-double-128 option is used (or when it becomes a default -# when -mlong-double-64 is not used). -long-double-fcts = yes -sysdep-CFLAGS += -mlong-double-128 - -ifeq ($(subdir),stdlib) -tests += tst-strtold-ldbl-128ibm -$(objpfx)tst-strtold-ldbl-128ibm: $(libm) -endif - -ifeq ($(subdir),math) -tests += test-fmodl-ldbl-128ibm test-remainderl-ldbl-128ibm \ - test-remquol-ldbl-128ibm test-canonical-ldbl-128ibm \ - test-totalorderl-ldbl-128ibm -endif diff --git a/sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h b/sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h deleted file mode 100644 index 7ddb368d26..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Define iscanonical macro. ldbl-128ibm version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#ifdef __NO_LONG_DOUBLE_MATH -# define iscanonical(x) ((void) (__typeof (x)) (x), 1) -#else -extern int __iscanonicall (long double __x) - __THROW __attribute__ ((__const__)); -# define __iscanonicalf(x) ((void) (__typeof (x)) (x), 1) -# define __iscanonical(x) ((void) (__typeof (x)) (x), 1) -# if __HAVE_DISTINCT_FLOAT128 -# define __iscanonicalf128(x) ((void) (__typeof (x)) (x), 1) -# endif - -/* Return nonzero value if X is canonical. In IEEE interchange binary - formats, all values are canonical, but the argument must still be - converted to its semantic type for any exceptions arising from the - conversion, before being discarded; in IBM long double, there are - encodings that are not consistently handled as corresponding to any - particular value of the type, and we return 0 for those. */ -# define iscanonical(x) __MATH_TG ((x), __iscanonical, (x)) -#endif diff --git a/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c b/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c deleted file mode 100644 index cab1da9995..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c +++ /dev/null @@ -1,62 +0,0 @@ -/* @(#)e_acosh.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_acosh(x) - * Method : - * Based on - * acosh(x) = log [ x + sqrt(x*x-1) ] - * we have - * acosh(x) := log(x)+ln2, if x is large; else - * acosh(x) := log(2x-1/(sqrt(x*x-1)+x)) if x>2; else - * acosh(x) := log1p(t+sqrt(2.0*t+t*t)); where t=x-1. - * - * Special cases: - * acosh(x) is NaN with signal if x<1. - * acosh(NaN) is NaN without signal. - */ - -#include -#include - -static const long double -one = 1.0L, -ln2 = M_LN2l; - -long double -__ieee754_acoshl(long double x) -{ - long double t; - int64_t hx; - uint64_t lx; - double xhi, xlo; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - EXTRACT_WORDS64 (lx, xlo); - if(hx<0x3ff0000000000000LL) { /* x < 1 */ - return (x-x)/(x-x); - } else if(hx >=0x4370000000000000LL) { /* x >= 2**56 */ - if(hx >=0x7ff0000000000000LL) { /* x is inf of NaN */ - return x+x; - } else - return __ieee754_logl(x)+ln2; /* acosh(huge)=log(2x) */ - } else if (((hx-0x3ff0000000000000LL)|(lx&0x7fffffffffffffffLL))==0) { - return 0.0; /* acosh(1) = 0 */ - } else if (hx > 0x4000000000000000LL) { /* 2**56 > x > 2 */ - t=x*x; - return __ieee754_logl(2.0*x-one/(x+__ieee754_sqrtl(t-one))); - } else { /* 1 - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_acosl(x) - * Method : - * acos(x) = pi/2 - asin(x) - * acos(-x) = pi/2 + asin(x) - * For |x| <= 0.375 - * acos(x) = pi/2 - asin(x) - * Between .375 and .5 the approximation is - * acos(0.4375 + x) = acos(0.4375) + x P(x) / Q(x) - * Between .5 and .625 the approximation is - * acos(0.5625 + x) = acos(0.5625) + x rS(x) / sS(x) - * For x > 0.625, - * acos(x) = 2 asin(sqrt((1-x)/2)) - * computed with an extended precision square root in the leading term. - * For x < -0.625 - * acos(x) = pi - 2 asin(sqrt((1-|x|)/2)) - * - * Special cases: - * if x is NaN, return x itself; - * if |x|>1, return NaN with invalid signal. - * - * Functions needed: __ieee754_sqrtl. - */ - -#include -#include - -static const long double - one = 1.0L, - pio2_hi = 1.5707963267948966192313216916397514420986L, - pio2_lo = 4.3359050650618905123985220130216759843812E-35L, - - /* acos(0.5625 + x) = acos(0.5625) + x rS(x) / sS(x) - -0.0625 <= x <= 0.0625 - peak relative error 3.3e-35 */ - - rS0 = 5.619049346208901520945464704848780243887E0L, - rS1 = -4.460504162777731472539175700169871920352E1L, - rS2 = 1.317669505315409261479577040530751477488E2L, - rS3 = -1.626532582423661989632442410808596009227E2L, - rS4 = 3.144806644195158614904369445440583873264E1L, - rS5 = 9.806674443470740708765165604769099559553E1L, - rS6 = -5.708468492052010816555762842394927806920E1L, - rS7 = -1.396540499232262112248553357962639431922E1L, - rS8 = 1.126243289311910363001762058295832610344E1L, - rS9 = 4.956179821329901954211277873774472383512E-1L, - rS10 = -3.313227657082367169241333738391762525780E-1L, - - sS0 = -4.645814742084009935700221277307007679325E0L, - sS1 = 3.879074822457694323970438316317961918430E1L, - sS2 = -1.221986588013474694623973554726201001066E2L, - sS3 = 1.658821150347718105012079876756201905822E2L, - sS4 = -4.804379630977558197953176474426239748977E1L, - sS5 = -1.004296417397316948114344573811562952793E2L, - sS6 = 7.530281592861320234941101403870010111138E1L, - sS7 = 1.270735595411673647119592092304357226607E1L, - sS8 = -1.815144839646376500705105967064792930282E1L, - sS9 = -7.821597334910963922204235247786840828217E-2L, - /* 1.000000000000000000000000000000000000000E0 */ - - acosr5625 = 9.7338991014954640492751132535550279812151E-1L, - pimacosr5625 = 2.1682027434402468335351320579240000860757E0L, - - /* acos(0.4375 + x) = acos(0.4375) + x rS(x) / sS(x) - -0.0625 <= x <= 0.0625 - peak relative error 2.1e-35 */ - - P0 = 2.177690192235413635229046633751390484892E0L, - P1 = -2.848698225706605746657192566166142909573E1L, - P2 = 1.040076477655245590871244795403659880304E2L, - P3 = -1.400087608918906358323551402881238180553E2L, - P4 = 2.221047917671449176051896400503615543757E1L, - P5 = 9.643714856395587663736110523917499638702E1L, - P6 = -5.158406639829833829027457284942389079196E1L, - P7 = -1.578651828337585944715290382181219741813E1L, - P8 = 1.093632715903802870546857764647931045906E1L, - P9 = 5.448925479898460003048760932274085300103E-1L, - P10 = -3.315886001095605268470690485170092986337E-1L, - Q0 = -1.958219113487162405143608843774587557016E0L, - Q1 = 2.614577866876185080678907676023269360520E1L, - Q2 = -9.990858606464150981009763389881793660938E1L, - Q3 = 1.443958741356995763628660823395334281596E2L, - Q4 = -3.206441012484232867657763518369723873129E1L, - Q5 = -1.048560885341833443564920145642588991492E2L, - Q6 = 6.745883931909770880159915641984874746358E1L, - Q7 = 1.806809656342804436118449982647641392951E1L, - Q8 = -1.770150690652438294290020775359580915464E1L, - Q9 = -5.659156469628629327045433069052560211164E-1L, - /* 1.000000000000000000000000000000000000000E0 */ - - acosr4375 = 1.1179797320499710475919903296900511518755E0L, - pimacosr4375 = 2.0236129215398221908706530535894517323217E0L, - - /* asin(x) = x + x^3 pS(x^2) / qS(x^2) - 0 <= x <= 0.5 - peak relative error 1.9e-35 */ - pS0 = -8.358099012470680544198472400254596543711E2L, - pS1 = 3.674973957689619490312782828051860366493E3L, - pS2 = -6.730729094812979665807581609853656623219E3L, - pS3 = 6.643843795209060298375552684423454077633E3L, - pS4 = -3.817341990928606692235481812252049415993E3L, - pS5 = 1.284635388402653715636722822195716476156E3L, - pS6 = -2.410736125231549204856567737329112037867E2L, - pS7 = 2.219191969382402856557594215833622156220E1L, - pS8 = -7.249056260830627156600112195061001036533E-1L, - pS9 = 1.055923570937755300061509030361395604448E-3L, - - qS0 = -5.014859407482408326519083440151745519205E3L, - qS1 = 2.430653047950480068881028451580393430537E4L, - qS2 = -4.997904737193653607449250593976069726962E4L, - qS3 = 5.675712336110456923807959930107347511086E4L, - qS4 = -3.881523118339661268482937768522572588022E4L, - qS5 = 1.634202194895541569749717032234510811216E4L, - qS6 = -4.151452662440709301601820849901296953752E3L, - qS7 = 5.956050864057192019085175976175695342168E2L, - qS8 = -4.175375777334867025769346564600396877176E1L; - /* 1.000000000000000000000000000000000000000E0 */ - -long double -__ieee754_acosl (long double x) -{ - long double a, z, r, w, p, q, s, t, f2; - - if (__glibc_unlikely (isnan (x))) - return x + x; - a = __builtin_fabsl (x); - if (a == 1.0L) - { - if (x > 0.0L) - return 0.0; /* acos(1) = 0 */ - else - return (2.0 * pio2_hi) + (2.0 * pio2_lo); /* acos(-1)= pi */ - } - else if (a > 1.0L) - { - return (x - x) / (x - x); /* acos(|x| > 1) is NaN */ - } - if (a < 0.5L) - { - if (a < 0x1p-106L) - return pio2_hi + pio2_lo; - if (a < 0.4375L) - { - /* Arcsine of x. */ - z = x * x; - p = (((((((((pS9 * z - + pS8) * z - + pS7) * z - + pS6) * z - + pS5) * z - + pS4) * z - + pS3) * z - + pS2) * z - + pS1) * z - + pS0) * z; - q = (((((((( z - + qS8) * z - + qS7) * z - + qS6) * z - + qS5) * z - + qS4) * z - + qS3) * z - + qS2) * z - + qS1) * z - + qS0; - r = x + x * p / q; - z = pio2_hi - (r - pio2_lo); - return z; - } - /* .4375 <= |x| < .5 */ - t = a - 0.4375L; - p = ((((((((((P10 * t - + P9) * t - + P8) * t - + P7) * t - + P6) * t - + P5) * t - + P4) * t - + P3) * t - + P2) * t - + P1) * t - + P0) * t; - - q = (((((((((t - + Q9) * t - + Q8) * t - + Q7) * t - + Q6) * t - + Q5) * t - + Q4) * t - + Q3) * t - + Q2) * t - + Q1) * t - + Q0; - r = p / q; - if (x < 0.0L) - r = pimacosr4375 - r; - else - r = acosr4375 + r; - return r; - } - else if (a < 0.625L) - { - t = a - 0.5625L; - p = ((((((((((rS10 * t - + rS9) * t - + rS8) * t - + rS7) * t - + rS6) * t - + rS5) * t - + rS4) * t - + rS3) * t - + rS2) * t - + rS1) * t - + rS0) * t; - - q = (((((((((t - + sS9) * t - + sS8) * t - + sS7) * t - + sS6) * t - + sS5) * t - + sS4) * t - + sS3) * t - + sS2) * t - + sS1) * t - + sS0; - if (x < 0.0L) - r = pimacosr5625 - p / q; - else - r = acosr5625 + p / q; - return r; - } - else - { /* |x| >= .625 */ - double shi, slo; - - z = (one - a) * 0.5; - s = __ieee754_sqrtl (z); - /* Compute an extended precision square root from - the Newton iteration s -> 0.5 * (s + z / s). - The change w from s to the improved value is - w = 0.5 * (s + z / s) - s = (s^2 + z)/2s - s = (z - s^2)/2s. - Express s = f1 + f2 where f1 * f1 is exactly representable. - w = (z - s^2)/2s = (z - f1^2 - 2 f1 f2 - f2^2)/2s . - s + w has extended precision. */ - ldbl_unpack (s, &shi, &slo); - a = shi; - f2 = slo; - w = z - a * a; - w = w - 2.0 * a * f2; - w = w - f2 * f2; - w = w / (2.0 * s); - /* Arcsine of s. */ - p = (((((((((pS9 * z - + pS8) * z - + pS7) * z - + pS6) * z - + pS5) * z - + pS4) * z - + pS3) * z - + pS2) * z - + pS1) * z - + pS0) * z; - q = (((((((( z - + qS8) * z - + qS7) * z - + qS6) * z - + qS5) * z - + qS4) * z - + qS3) * z - + qS2) * z - + qS1) * z - + qS0; - r = s + (w + s * p / q); - - if (x < 0.0L) - w = pio2_hi + (pio2_lo - r); - else - w = r; - return 2.0 * w; - } -} -strong_alias (__ieee754_acosl, __acosl_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_asinl.c b/sysdeps/ieee754/ldbl-128ibm/e_asinl.c deleted file mode 100644 index 6ed5e8d68d..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_asinl.c +++ /dev/null @@ -1,250 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - Long double expansions are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under the - following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_asin(x) - * Method : - * Since asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ... - * we approximate asin(x) on [0,0.5] by - * asin(x) = x + x*x^2*R(x^2) - * Between .5 and .625 the approximation is - * asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x) - * For x in [0.625,1] - * asin(x) = pi/2-2*asin(sqrt((1-x)/2)) - * Let y = (1-x), z = y/2, s := sqrt(z), and pio2_hi+pio2_lo=pi/2; - * then for x>0.98 - * asin(x) = pi/2 - 2*(s+s*z*R(z)) - * = pio2_hi - (2*(s+s*z*R(z)) - pio2_lo) - * For x<=0.98, let pio4_hi = pio2_hi/2, then - * f = hi part of s; - * c = sqrt(z) - f = (z-f*f)/(s+f) ...f+c=sqrt(z) - * and - * asin(x) = pi/2 - 2*(s+s*z*R(z)) - * = pio4_hi+(pio4-2s)-(2s*z*R(z)-pio2_lo) - * = pio4_hi+(pio4-2f)-(2s*z*R(z)-(pio2_lo+2c)) - * - * Special cases: - * if x is NaN, return x itself; - * if |x|>1, return NaN with invalid signal. - * - */ - - -#include -#include -#include -long double sqrtl (long double); - -static const long double - one = 1.0L, - huge = 1.0e+300L, - pio2_hi = 1.5707963267948966192313216916397514420986L, - pio2_lo = 4.3359050650618905123985220130216759843812E-35L, - pio4_hi = 7.8539816339744830961566084581987569936977E-1L, - - /* coefficient for R(x^2) */ - - /* asin(x) = x + x^3 pS(x^2) / qS(x^2) - 0 <= x <= 0.5 - peak relative error 1.9e-35 */ - pS0 = -8.358099012470680544198472400254596543711E2L, - pS1 = 3.674973957689619490312782828051860366493E3L, - pS2 = -6.730729094812979665807581609853656623219E3L, - pS3 = 6.643843795209060298375552684423454077633E3L, - pS4 = -3.817341990928606692235481812252049415993E3L, - pS5 = 1.284635388402653715636722822195716476156E3L, - pS6 = -2.410736125231549204856567737329112037867E2L, - pS7 = 2.219191969382402856557594215833622156220E1L, - pS8 = -7.249056260830627156600112195061001036533E-1L, - pS9 = 1.055923570937755300061509030361395604448E-3L, - - qS0 = -5.014859407482408326519083440151745519205E3L, - qS1 = 2.430653047950480068881028451580393430537E4L, - qS2 = -4.997904737193653607449250593976069726962E4L, - qS3 = 5.675712336110456923807959930107347511086E4L, - qS4 = -3.881523118339661268482937768522572588022E4L, - qS5 = 1.634202194895541569749717032234510811216E4L, - qS6 = -4.151452662440709301601820849901296953752E3L, - qS7 = 5.956050864057192019085175976175695342168E2L, - qS8 = -4.175375777334867025769346564600396877176E1L, - /* 1.000000000000000000000000000000000000000E0 */ - - /* asin(0.5625 + x) = asin(0.5625) + x rS(x) / sS(x) - -0.0625 <= x <= 0.0625 - peak relative error 3.3e-35 */ - rS0 = -5.619049346208901520945464704848780243887E0L, - rS1 = 4.460504162777731472539175700169871920352E1L, - rS2 = -1.317669505315409261479577040530751477488E2L, - rS3 = 1.626532582423661989632442410808596009227E2L, - rS4 = -3.144806644195158614904369445440583873264E1L, - rS5 = -9.806674443470740708765165604769099559553E1L, - rS6 = 5.708468492052010816555762842394927806920E1L, - rS7 = 1.396540499232262112248553357962639431922E1L, - rS8 = -1.126243289311910363001762058295832610344E1L, - rS9 = -4.956179821329901954211277873774472383512E-1L, - rS10 = 3.313227657082367169241333738391762525780E-1L, - - sS0 = -4.645814742084009935700221277307007679325E0L, - sS1 = 3.879074822457694323970438316317961918430E1L, - sS2 = -1.221986588013474694623973554726201001066E2L, - sS3 = 1.658821150347718105012079876756201905822E2L, - sS4 = -4.804379630977558197953176474426239748977E1L, - sS5 = -1.004296417397316948114344573811562952793E2L, - sS6 = 7.530281592861320234941101403870010111138E1L, - sS7 = 1.270735595411673647119592092304357226607E1L, - sS8 = -1.815144839646376500705105967064792930282E1L, - sS9 = -7.821597334910963922204235247786840828217E-2L, - /* 1.000000000000000000000000000000000000000E0 */ - - asinr5625 = 5.9740641664535021430381036628424864397707E-1L; - - - -long double -__ieee754_asinl (long double x) -{ - long double a, t, w, p, q, c, r, s; - int flag; - - if (__glibc_unlikely (isnan (x))) - return x + x; - flag = 0; - a = __builtin_fabsl (x); - if (a == 1.0L) /* |x|>= 1 */ - return x * pio2_hi + x * pio2_lo; /* asin(1)=+-pi/2 with inexact */ - else if (a >= 1.0L) - return (x - x) / (x - x); /* asin(|x|>1) is NaN */ - else if (a < 0.5L) - { - if (a < 6.938893903907228e-18L) /* |x| < 2**-57 */ - { - math_check_force_underflow (x); - long double force_inexact = huge + x; - math_force_eval (force_inexact); - return x; /* return x with inexact if x!=0 */ - } - else - { - t = x * x; - /* Mark to use pS, qS later on. */ - flag = 1; - } - } - else if (a < 0.625L) - { - t = a - 0.5625; - p = ((((((((((rS10 * t - + rS9) * t - + rS8) * t - + rS7) * t - + rS6) * t - + rS5) * t - + rS4) * t - + rS3) * t - + rS2) * t - + rS1) * t - + rS0) * t; - - q = ((((((((( t - + sS9) * t - + sS8) * t - + sS7) * t - + sS6) * t - + sS5) * t - + sS4) * t - + sS3) * t - + sS2) * t - + sS1) * t - + sS0; - t = asinr5625 + p / q; - if (x > 0.0L) - return t; - else - return -t; - } - else - { - /* 1 > |x| >= 0.625 */ - w = one - a; - t = w * 0.5; - } - - p = (((((((((pS9 * t - + pS8) * t - + pS7) * t - + pS6) * t - + pS5) * t - + pS4) * t - + pS3) * t - + pS2) * t - + pS1) * t - + pS0) * t; - - q = (((((((( t - + qS8) * t - + qS7) * t - + qS6) * t - + qS5) * t - + qS4) * t - + qS3) * t - + qS2) * t - + qS1) * t - + qS0; - - if (flag) /* 2^-57 < |x| < 0.5 */ - { - w = p / q; - return x + x * w; - } - - s = __ieee754_sqrtl (t); - if (a > 0.975L) - { - w = p / q; - t = pio2_hi - (2.0 * (s + s * w) - pio2_lo); - } - else - { - w = ldbl_high (s); - c = (t - w * w) / (s + w); - r = p / q; - p = 2.0 * s * r - (pio2_lo - 2.0 * c); - q = pio4_hi - 2.0 * w; - t = pio4_hi - (p - q); - } - - if (x > 0.0L) - return t; - else - return -t; -} -strong_alias (__ieee754_asinl, __asinl_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c b/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c deleted file mode 100644 index b625323df3..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c +++ /dev/null @@ -1,122 +0,0 @@ -/* e_atan2l.c -- long double version of e_atan2.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_atan2l(y,x) - * Method : - * 1. Reduce y to positive by atan2l(y,x)=-atan2l(-y,x). - * 2. Reduce x to positive by (if x and y are unexceptional): - * ARG (x+iy) = arctan(y/x) ... if x > 0, - * ARG (x+iy) = pi - arctan[y/(-x)] ... if x < 0, - * - * Special cases: - * - * ATAN2((anything), NaN ) is NaN; - * ATAN2(NAN , (anything) ) is NaN; - * ATAN2(+-0, +(anything but NaN)) is +-0 ; - * ATAN2(+-0, -(anything but NaN)) is +-pi ; - * ATAN2(+-(anything but 0 and NaN), 0) is +-pi/2; - * ATAN2(+-(anything but INF and NaN), +INF) is +-0 ; - * ATAN2(+-(anything but INF and NaN), -INF) is +-pi; - * ATAN2(+-INF,+INF ) is +-pi/4 ; - * ATAN2(+-INF,-INF ) is +-3pi/4; - * ATAN2(+-INF, (anything but,0,NaN, and INF)) is +-pi/2; - * - * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough - * to produce the hexadecimal values shown. - */ - -#include -#include - -static const long double -tiny = 1.0e-300L, -zero = 0.0, -pi_o_4 = 7.85398163397448309615660845819875699e-01L, /* 3ffe921fb54442d18469898cc51701b8 */ -pi_o_2 = 1.57079632679489661923132169163975140e+00L, /* 3fff921fb54442d18469898cc51701b8 */ -pi = 3.14159265358979323846264338327950280e+00L, /* 4000921fb54442d18469898cc51701b8 */ -pi_lo = 8.67181013012378102479704402604335225e-35L; /* 3f8dcd129024e088a67cc74020bbea64 */ - -long double -__ieee754_atan2l(long double y, long double x) -{ - long double z; - int64_t k,m,hx,hy,ix,iy; - uint64_t lx; - double xhi, xlo, yhi; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - EXTRACT_WORDS64 (lx, xlo); - ix = hx&0x7fffffffffffffffLL; - yhi = ldbl_high (y); - EXTRACT_WORDS64 (hy, yhi); - iy = hy&0x7fffffffffffffffLL; - if(((ix)>0x7ff0000000000000LL)|| - ((iy)>0x7ff0000000000000LL)) /* x or y is NaN */ - return x+y; - if(((hx-0x3ff0000000000000LL))==0 - && (lx&0x7fffffffffffffff)==0) return __atanl(y); /* x=1.0L */ - m = ((hy>>63)&1)|((hx>>62)&2); /* 2*sign(x)+sign(y) */ - - /* when y = 0 */ - if(iy==0) { - switch(m) { - case 0: - case 1: return y; /* atan(+-0,+anything)=+-0 */ - case 2: return pi+tiny;/* atan(+0,-anything) = pi */ - case 3: return -pi-tiny;/* atan(-0,-anything) =-pi */ - } - } - /* when x = 0 */ - if(ix==0) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny; - - /* when x is INF */ - if(ix==0x7ff0000000000000LL) { - if(iy==0x7ff0000000000000LL) { - switch(m) { - case 0: return pi_o_4+tiny;/* atan(+INF,+INF) */ - case 1: return -pi_o_4-tiny;/* atan(-INF,+INF) */ - case 2: return 3.0L*pi_o_4+tiny;/*atan(+INF,-INF)*/ - case 3: return -3.0L*pi_o_4-tiny;/*atan(-INF,-INF)*/ - } - } else { - switch(m) { - case 0: return zero ; /* atan(+...,+INF) */ - case 1: return -zero ; /* atan(-...,+INF) */ - case 2: return pi+tiny ; /* atan(+...,-INF) */ - case 3: return -pi-tiny ; /* atan(-...,-INF) */ - } - } - } - /* when y is INF */ - if(iy==0x7ff0000000000000LL) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny; - - /* compute y/x */ - k = (iy-ix)>>52; - if(k > 120) z=pi_o_2+0.5L*pi_lo; /* |y/x| > 2**120 */ - else if(hx<0&&k<-120) z=0.0L; /* |y|/x < -2**120 */ - else z=__atanl(fabsl(y/x)); /* safe to do y/x */ - switch (m) { - case 0: return z ; /* atan(+,+) */ - case 1: return -z ; /* atan(-,+) */ - case 2: return pi-(z-pi_lo);/* atan(+,-) */ - default: /* case 3 */ - return (z-pi_lo)-pi;/* atan(-,-) */ - } -} -strong_alias (__ieee754_atan2l, __atan2l_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c b/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c deleted file mode 100644 index b576f42030..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c +++ /dev/null @@ -1,71 +0,0 @@ -/* @(#)e_atanh.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_atanh(x) - * Method : - * 1.Reduced x to positive by atanh(-x) = -atanh(x) - * 2.For x>=0.5 - * 1 2x x - * atanh(x) = --- * log(1 + -------) = 0.5 * log1p(2 * --------) - * 2 1 - x 1 - x - * - * For x<0.5 - * atanh(x) = 0.5*log1p(2x+2x*x/(1-x)) - * - * Special cases: - * atanh(x) is NaN if |x| > 1 with signal; - * atanh(NaN) is that NaN with no signal; - * atanh(+-1) is +-INF with signal. - * - */ - -#include -#include -#include - -static const long double one = 1.0L, huge = 1e300L; - -static const long double zero = 0.0L; - -long double -__ieee754_atanhl(long double x) -{ - long double t; - int64_t hx,ix; - double xhi; - - xhi = ldbl_high (x); - EXTRACT_WORDS64 (hx, xhi); - ix = hx&0x7fffffffffffffffLL; - if (ix >= 0x3ff0000000000000LL) { /* |x|>=1 */ - if (ix > 0x3ff0000000000000LL) - return (x-x)/(x-x); - t = fabsl (x); - if (t > one) - return (x-x)/(x-x); - if (t == one) - return x/zero; - } - if(ix<0x3c70000000000000LL&&(huge+x)>zero) /* x<2**-56 */ - { - math_check_force_underflow (x); - return x; - } - x = fabsl (x); - if(ix<0x3fe0000000000000LL) { /* x < 0.5 */ - t = x+x; - t = 0.5*__log1pl(t+t*x/(one-x)); - } else - t = 0.5*__log1pl((x+x)/(one-x)); - if(hx>=0) return t; else return -t; -} -strong_alias (__ieee754_atanhl, __atanhl_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_coshl.c b/sysdeps/ieee754/ldbl-128ibm/e_coshl.c deleted file mode 100644 index 327b2ab960..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_coshl.c +++ /dev/null @@ -1,81 +0,0 @@ -/* @(#)e_cosh.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_cosh(x) - * Method : - * mathematically cosh(x) if defined to be (exp(x)+exp(-x))/2 - * 1. Replace x by |x| (cosh(x) = cosh(-x)). - * 2. - * [ exp(x) - 1 ]^2 - * 0 <= x <= ln2/2 : cosh(x) := 1 + ------------------- - * 2*exp(x) - * - * exp(x) + 1/exp(x) - * ln2/2 <= x <= 40 : cosh(x) := ------------------- - * 2 - * 40 <= x <= lnovft : cosh(x) := exp(x)/2 - * lnovft <= x <= ln2ovft: cosh(x) := exp(x/2)/2 * exp(x/2) - * ln2ovft < x : cosh(x) := huge*huge (overflow) - * - * Special cases: - * cosh(x) is |x| if x is +INF, -INF, or NaN. - * only cosh(0)=1 is exact for finite x. - */ - -#include -#include - -static const long double one = 1.0L, half=0.5L, huge = 1.0e300L; - -long double -__ieee754_coshl (long double x) -{ - long double t,w; - int64_t ix; - double xhi; - - /* High word of |x|. */ - xhi = ldbl_high (x); - EXTRACT_WORDS64 (ix, xhi); - ix &= 0x7fffffffffffffffLL; - - /* x is INF or NaN */ - if(ix>=0x7ff0000000000000LL) return x*x; - - /* |x| in [0,0.5*ln2], return 1+expm1(|x|)^2/(2*exp(|x|)) */ - if(ix<0x3fd62e42fefa39efLL) { - if (ix<0x3c80000000000000LL) return one; /* cosh(tiny) = 1 */ - t = __expm1l(fabsl(x)); - w = one+t; - return one+(t*t)/(w+w); - } - - /* |x| in [0.5*ln2,40], return (exp(|x|)+1/exp(|x|)/2; */ - if (ix < 0x4044000000000000LL) { - t = __ieee754_expl(fabsl(x)); - return half*t+half/t; - } - - /* |x| in [40, log(maxdouble)] return half*exp(|x|) */ - if (ix < 0x40862e42fefa39efLL) return half*__ieee754_expl(fabsl(x)); - - /* |x| in [log(maxdouble), overflowthresold] */ - if (ix < 0x408633ce8fb9f87fLL) { - w = __ieee754_expl(half*fabsl(x)); - t = half*w; - return t*w; - } - - /* |x| > overflowthresold, cosh(x) overflow */ - return huge*huge; -} -strong_alias (__ieee754_coshl, __coshl_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_exp10l.c b/sysdeps/ieee754/ldbl-128ibm/e_exp10l.c deleted file mode 100644 index 6c3b6f5589..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_exp10l.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const long double log10_high = 0x2.4d763776aaap+0L; -static const long double log10_low = 0x2.b05ba95b58ae0b4c28a38a3fb4p-48L; - -long double -__ieee754_exp10l (long double arg) -{ - union ibm_extended_long_double u; - long double arg_high, arg_low; - long double exp_high, exp_low; - - if (!isfinite (arg)) - return __ieee754_expl (arg); - if (arg < LDBL_MIN_10_EXP - LDBL_DIG - 10) - return LDBL_MIN * LDBL_MIN; - else if (arg > LDBL_MAX_10_EXP + 1) - return LDBL_MAX * LDBL_MAX; - else if (fabsl (arg) < 0x1p-109L) - return 1.0L; - - u.ld = arg; - arg_high = u.d[0].d; - arg_low = u.d[1].d; - exp_high = arg_high * log10_high; - exp_low = arg_high * log10_low + arg_low * M_LN10l; - return __ieee754_expl (exp_high) * __ieee754_expl (exp_low); -} -strong_alias (__ieee754_exp10l, __exp10l_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_expl.c b/sysdeps/ieee754/ldbl-128ibm/e_expl.c deleted file mode 100644 index 10df6bb7d5..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_expl.c +++ /dev/null @@ -1,256 +0,0 @@ -/* Quad-precision floating point e^x. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - Partly based on double-precision code - by Geoffrey Keating - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The basic design here is from - Abraham Ziv, "Fast Evaluation of Elementary Mathematical Functions with - Correctly Rounded Last Bit", ACM Trans. Math. Soft., 17 (3), September 1991, - pp. 410-423. - - We work with number pairs where the first number is the high part and - the second one is the low part. Arithmetic with the high part numbers must - be exact, without any roundoff errors. - - The input value, X, is written as - X = n * ln(2)_0 + arg1[t1]_0 + arg2[t2]_0 + x - - n * ln(2)_1 + arg1[t1]_1 + arg2[t2]_1 + xl - - where: - - n is an integer, 16384 >= n >= -16495; - - ln(2)_0 is the first 93 bits of ln(2), and |ln(2)_0-ln(2)-ln(2)_1| < 2^-205 - - t1 is an integer, 89 >= t1 >= -89 - - t2 is an integer, 65 >= t2 >= -65 - - |arg1[t1]-t1/256.0| < 2^-53 - - |arg2[t2]-t2/32768.0| < 2^-53 - - x + xl is whatever is left, |x + xl| < 2^-16 + 2^-53 - - Then e^x is approximated as - - e^x = 2^n_1 ( 2^n_0 e^(arg1[t1]_0 + arg1[t1]_1) e^(arg2[t2]_0 + arg2[t2]_1) - + 2^n_0 e^(arg1[t1]_0 + arg1[t1]_1) e^(arg2[t2]_0 + arg2[t2]_1) - * p (x + xl + n * ln(2)_1)) - where: - - p(x) is a polynomial approximating e(x)-1 - - e^(arg1[t1]_0 + arg1[t1]_1) is obtained from a table - - e^(arg2[t2]_0 + arg2[t2]_1) likewise - - n_1 + n_0 = n, so that |n_0| < -LDBL_MIN_EXP-1. - - If it happens that n_1 == 0 (this is the usual case), that multiplication - is omitted. - */ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif -#include -#include -#include -#include -#include -#include - -#define _Float128 long double -#define L(x) x ## L - -#include - -static const long double C[] = { -/* Smallest integer x for which e^x overflows. */ -#define himark C[0] - 709.78271289338399678773454114191496482L, - -/* Largest integer x for which e^x underflows. */ -#define lomark C[1] --744.44007192138126231410729844608163411L, - -/* 3x2^96 */ -#define THREEp96 C[2] - 59421121885698253195157962752.0L, - -/* 3x2^103 */ -#define THREEp103 C[3] - 30423614405477505635920876929024.0L, - -/* 3x2^111 */ -#define THREEp111 C[4] - 7788445287802241442795744493830144.0L, - -/* 1/ln(2) */ -#define M_1_LN2 C[5] - 1.44269504088896340735992468100189204L, - -/* first 93 bits of ln(2) */ -#define M_LN2_0 C[6] - 0.693147180559945309417232121457981864L, - -/* ln2_0 - ln(2) */ -#define M_LN2_1 C[7] --1.94704509238074995158795957333327386E-31L, - -/* very small number */ -#define TINY C[8] - 1.0e-308L, - -/* 2^16383 */ -#define TWO1023 C[9] - 8.988465674311579538646525953945123668E+307L, - -/* 256 */ -#define TWO8 C[10] - 256.0L, - -/* 32768 */ -#define TWO15 C[11] - 32768.0L, - -/* Chebyshev polynom coefficients for (exp(x)-1)/x */ -#define P1 C[12] -#define P2 C[13] -#define P3 C[14] -#define P4 C[15] -#define P5 C[16] -#define P6 C[17] - 0.5L, - 1.66666666666666666666666666666666683E-01L, - 4.16666666666666666666654902320001674E-02L, - 8.33333333333333333333314659767198461E-03L, - 1.38888888889899438565058018857254025E-03L, - 1.98412698413981650382436541785404286E-04L, -}; - -long double -__ieee754_expl (long double x) -{ - long double result, x22; - union ibm_extended_long_double ex2_u, scale_u; - int unsafe; - - /* Check for usual case. */ - if (isless (x, himark) && isgreater (x, lomark)) - { - int tval1, tval2, n_i, exponent2; - long double n, xl; - - SET_RESTORE_ROUND (FE_TONEAREST); - - n = __roundl (x*M_1_LN2); - x = x-n*M_LN2_0; - xl = n*M_LN2_1; - - tval1 = __roundl (x*TWO8); - x -= __expl_table[T_EXPL_ARG1+2*tval1]; - xl -= __expl_table[T_EXPL_ARG1+2*tval1+1]; - - tval2 = __roundl (x*TWO15); - x -= __expl_table[T_EXPL_ARG2+2*tval2]; - xl -= __expl_table[T_EXPL_ARG2+2*tval2+1]; - - x = x + xl; - - /* Compute ex2 = 2^n_0 e^(argtable[tval1]) e^(argtable[tval2]). */ - ex2_u.ld = (__expl_table[T_EXPL_RES1 + tval1] - * __expl_table[T_EXPL_RES2 + tval2]); - n_i = (int)n; - /* 'unsafe' is 1 iff n_1 != 0. */ - unsafe = fabsl(n_i) >= -LDBL_MIN_EXP - 1; - ex2_u.d[0].ieee.exponent += n_i >> unsafe; - /* Fortunately, there are no subnormal lowpart doubles in - __expl_table, only normal values and zeros. - But after scaling it can be subnormal. */ - exponent2 = ex2_u.d[1].ieee.exponent + (n_i >> unsafe); - if (ex2_u.d[1].ieee.exponent == 0) - /* assert ((ex2_u.d[1].ieee.mantissa0|ex2_u.d[1].ieee.mantissa1) == 0) */; - else if (exponent2 > 0) - ex2_u.d[1].ieee.exponent = exponent2; - else if (exponent2 <= -54) - { - ex2_u.d[1].ieee.exponent = 0; - ex2_u.d[1].ieee.mantissa0 = 0; - ex2_u.d[1].ieee.mantissa1 = 0; - } - else - { - static const double - two54 = 1.80143985094819840000e+16, /* 4350000000000000 */ - twom54 = 5.55111512312578270212e-17; /* 3C90000000000000 */ - ex2_u.d[1].d *= two54; - ex2_u.d[1].ieee.exponent += n_i >> unsafe; - ex2_u.d[1].d *= twom54; - } - - /* Compute scale = 2^n_1. */ - scale_u.ld = 1.0L; - scale_u.d[0].ieee.exponent += n_i - (n_i >> unsafe); - - /* Approximate e^x2 - 1, using a seventh-degree polynomial, - with maximum error in [-2^-16-2^-53,2^-16+2^-53] - less than 4.8e-39. */ - x22 = x + x*x*(P1+x*(P2+x*(P3+x*(P4+x*(P5+x*P6))))); - - /* Now we can test whether the result is ultimate or if we are unsure. - In the later case we should probably call a mpn based routine to give - the ultimate result. - Empirically, this routine is already ultimate in about 99.9986% of - cases, the test below for the round to nearest case will be false - in ~ 99.9963% of cases. - Without proc2 routine maximum error which has been seen is - 0.5000262 ulp. - - union ieee854_long_double ex3_u; - - #ifdef FE_TONEAREST - fesetround (FE_TONEAREST); - #endif - ex3_u.d = (result - ex2_u.d) - x22 * ex2_u.d; - ex2_u.d = result; - ex3_u.ieee.exponent += LDBL_MANT_DIG + 15 + IEEE854_LONG_DOUBLE_BIAS - - ex2_u.ieee.exponent; - n_i = abs (ex3_u.d); - n_i = (n_i + 1) / 2; - fesetenv (&oldenv); - #ifdef FE_TONEAREST - if (fegetround () == FE_TONEAREST) - n_i -= 0x4000; - #endif - if (!n_i) { - return __ieee754_expl_proc2 (origx); - } - */ - } - /* Exceptional cases: */ - else if (isless (x, himark)) - { - if (isinf (x)) - /* e^-inf == 0, with no error. */ - return 0; - else - /* Underflow */ - return TINY * TINY; - } - else - /* Return x, if x is a NaN or Inf; or overflow, otherwise. */ - return TWO1023*x; - - result = x22 * ex2_u.ld + ex2_u.ld; - if (!unsafe) - return result; - return result * scale_u.ld; -} -strong_alias (__ieee754_expl, __expl_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c b/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c deleted file mode 100644 index 5284fd0fd5..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c +++ /dev/null @@ -1,149 +0,0 @@ -/* e_fmodl.c -- long double version of e_fmod.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * __ieee754_fmodl(x,y) - * Return x mod y in exact arithmetic - * Method: shift and subtract - */ - -#include -#include -#include - -static const long double one = 1.0, Zero[] = {0.0, -0.0,}; - -long double -__ieee754_fmodl (long double x, long double y) -{ - int64_t hx, hy, hz, sx, sy; - uint64_t lx, ly, lz; - int n, ix, iy; - double xhi, xlo, yhi, ylo; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - EXTRACT_WORDS64 (lx, xlo); - ldbl_unpack (y, &yhi, &ylo); - EXTRACT_WORDS64 (hy, yhi); - EXTRACT_WORDS64 (ly, ylo); - sx = hx&0x8000000000000000ULL; /* sign of x */ - hx ^= sx; /* |x| */ - sy = hy&0x8000000000000000ULL; /* sign of y */ - hy ^= sy; /* |y| */ - - /* purge off exception values */ - if(__builtin_expect(hy==0 || - (hx>=0x7ff0000000000000LL)|| /* y=0,or x not finite */ - (hy>0x7ff0000000000000LL),0)) /* or y is NaN */ - return (x*y)/(x*y); - if (__glibc_unlikely (hx <= hy)) - { - /* If |x| < |y| return x. */ - if (hx < hy) - return x; - /* At this point the absolute value of the high doubles of - x and y must be equal. */ - if ((lx & 0x7fffffffffffffffLL) == 0 - && (ly & 0x7fffffffffffffffLL) == 0) - /* Both low parts are zero. The result should be an - appropriately signed zero, but the subsequent logic - could treat them as unequal, depending on the signs - of the low parts. */ - return Zero[(uint64_t) sx >> 63]; - /* If the low double of y is the same sign as the high - double of y (ie. the low double increases |y|)... */ - if (((ly ^ sy) & 0x8000000000000000LL) == 0 - /* ... then a different sign low double to high double - for x or same sign but lower magnitude... */ - && (int64_t) (lx ^ sx) < (int64_t) (ly ^ sy)) - /* ... means |x| < |y|. */ - return x; - /* If the low double of x differs in sign to the high - double of x (ie. the low double decreases |x|)... */ - if (((lx ^ sx) & 0x8000000000000000LL) != 0 - /* ... then a different sign low double to high double - for y with lower magnitude (we've already caught - the same sign for y case above)... */ - && (int64_t) (lx ^ sx) > (int64_t) (ly ^ sy)) - /* ... means |x| < |y|. */ - return x; - /* If |x| == |y| return x*0. */ - if ((lx ^ sx) == (ly ^ sy)) - return Zero[(uint64_t) sx >> 63]; - } - - /* Make the IBM extended format 105 bit mantissa look like the ieee854 112 - bit mantissa so the following operations will give the correct - result. */ - ldbl_extract_mantissa(&hx, &lx, &ix, x); - ldbl_extract_mantissa(&hy, &ly, &iy, y); - - if (__glibc_unlikely (ix == -IEEE754_DOUBLE_BIAS)) - { - /* subnormal x, shift x to normal. */ - while ((hx & (1LL << 48)) == 0) - { - hx = (hx << 1) | (lx >> 63); - lx = lx << 1; - ix -= 1; - } - } - - if (__glibc_unlikely (iy == -IEEE754_DOUBLE_BIAS)) - { - /* subnormal y, shift y to normal. */ - while ((hy & (1LL << 48)) == 0) - { - hy = (hy << 1) | (ly >> 63); - ly = ly << 1; - iy -= 1; - } - } - - /* fix point fmod */ - n = ix - iy; - while(n--) { - hz=hx-hy;lz=lx-ly; if(lx>63); lx = lx+lx;} - else { - if((hz|lz)==0) /* return sign(x)*0 */ - return Zero[(u_int64_t)sx>>63]; - hx = hz+hz+(lz>>63); lx = lz+lz; - } - } - hz=hx-hy;lz=lx-ly; if(lx=0) {hx=hz;lx=lz;} - - /* convert back to floating value and restore the sign */ - if((hx|lx)==0) /* return sign(x)*0 */ - return Zero[(u_int64_t)sx>>63]; - while(hx<0x0001000000000000LL) { /* normalize x */ - hx = hx+hx+(lx>>63); lx = lx+lx; - iy -= 1; - } - if(__builtin_expect(iy>= -1022,0)) { /* normalize output */ - x = ldbl_insert_mantissa((sx>>63), iy, hx, lx); - } else { /* subnormal output */ - n = -1022 - iy; - /* We know 1 <= N <= 52, and that there are no nonzero - bits in places below 2^-1074. */ - lx = (lx >> n) | ((u_int64_t) hx << (64 - n)); - hx >>= n; - x = ldbl_insert_mantissa((sx>>63), -1023, hx, lx); - x *= one; /* create necessary signal */ - } - return x; /* exact output */ -} -strong_alias (__ieee754_fmodl, __fmodl_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c b/sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c deleted file mode 100644 index 81dbe42c79..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c +++ /dev/null @@ -1,218 +0,0 @@ -/* Implementation of gamma function according to ISO C. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek . */ - -#include -#include -#include - -/* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) inside exp in Stirling's - approximation to gamma function. */ - -static const long double gamma_coeff[] = - { - 0x1.555555555555555555555555558p-4L, - -0xb.60b60b60b60b60b60b60b60b6p-12L, - 0x3.4034034034034034034034034p-12L, - -0x2.7027027027027027027027027p-12L, - 0x3.72a3c5631fe46ae1d4e700dca9p-12L, - -0x7.daac36664f1f207daac36664f2p-12L, - 0x1.a41a41a41a41a41a41a41a41a4p-8L, - -0x7.90a1b2c3d4e5f708192a3b4c5ep-8L, - 0x2.dfd2c703c0cfff430edfd2c704p-4L, - -0x1.6476701181f39edbdb9ce625988p+0L, - 0xd.672219167002d3a7a9c886459cp+0L, - -0x9.cd9292e6660d55b3f712eb9e08p+4L, - 0x8.911a740da740da740da740da74p+8L, - }; - -#define NCOEFF (sizeof (gamma_coeff) / sizeof (gamma_coeff[0])) - -/* Return gamma (X), for positive X less than 191, in the form R * - 2^(*EXP2_ADJ), where R is the return value and *EXP2_ADJ is set to - avoid overflow or underflow in intermediate calculations. */ - -static long double -gammal_positive (long double x, int *exp2_adj) -{ - int local_signgam; - if (x < 0.5L) - { - *exp2_adj = 0; - return __ieee754_expl (__ieee754_lgammal_r (x + 1, &local_signgam)) / x; - } - else if (x <= 1.5L) - { - *exp2_adj = 0; - return __ieee754_expl (__ieee754_lgammal_r (x, &local_signgam)); - } - else if (x < 11.5L) - { - /* Adjust into the range for using exp (lgamma). */ - *exp2_adj = 0; - long double n = __ceill (x - 1.5L); - long double x_adj = x - n; - long double eps; - long double prod = __gamma_productl (x_adj, 0, n, &eps); - return (__ieee754_expl (__ieee754_lgammal_r (x_adj, &local_signgam)) - * prod * (1.0L + eps)); - } - else - { - long double eps = 0; - long double x_eps = 0; - long double x_adj = x; - long double prod = 1; - if (x < 23.0L) - { - /* Adjust into the range for applying Stirling's - approximation. */ - long double n = __ceill (23.0L - x); - x_adj = x + n; - x_eps = (x - (x_adj - n)); - prod = __gamma_productl (x_adj - n, x_eps, n, &eps); - } - /* The result is now gamma (X_ADJ + X_EPS) / (PROD * (1 + EPS)). - Compute gamma (X_ADJ + X_EPS) using Stirling's approximation, - starting by computing pow (X_ADJ, X_ADJ) with a power of 2 - factored out. */ - long double exp_adj = -eps; - long double x_adj_int = __roundl (x_adj); - long double x_adj_frac = x_adj - x_adj_int; - int x_adj_log2; - long double x_adj_mant = __frexpl (x_adj, &x_adj_log2); - if (x_adj_mant < M_SQRT1_2l) - { - x_adj_log2--; - x_adj_mant *= 2.0L; - } - *exp2_adj = x_adj_log2 * (int) x_adj_int; - long double ret = (__ieee754_powl (x_adj_mant, x_adj) - * __ieee754_exp2l (x_adj_log2 * x_adj_frac) - * __ieee754_expl (-x_adj) - * __ieee754_sqrtl (2 * M_PIl / x_adj) - / prod); - exp_adj += x_eps * __ieee754_logl (x_adj); - long double bsum = gamma_coeff[NCOEFF - 1]; - long double x_adj2 = x_adj * x_adj; - for (size_t i = 1; i <= NCOEFF - 1; i++) - bsum = bsum / x_adj2 + gamma_coeff[NCOEFF - 1 - i]; - exp_adj += bsum / x_adj; - return ret + ret * __expm1l (exp_adj); - } -} - -long double -__ieee754_gammal_r (long double x, int *signgamp) -{ - int64_t hx; - double xhi; - long double ret; - - xhi = ldbl_high (x); - EXTRACT_WORDS64 (hx, xhi); - - if ((hx & 0x7fffffffffffffffLL) == 0) - { - /* Return value for x == 0 is Inf with divide by zero exception. */ - *signgamp = 0; - return 1.0 / x; - } - if (hx < 0 && (u_int64_t) hx < 0xfff0000000000000ULL && __rintl (x) == x) - { - /* Return value for integer x < 0 is NaN with invalid exception. */ - *signgamp = 0; - return (x - x) / (x - x); - } - if (hx == 0xfff0000000000000ULL) - { - /* x == -Inf. According to ISO this is NaN. */ - *signgamp = 0; - return x - x; - } - if ((hx & 0x7ff0000000000000ULL) == 0x7ff0000000000000ULL) - { - /* Positive infinity (return positive infinity) or NaN (return - NaN). */ - *signgamp = 0; - return x + x; - } - - if (x >= 172.0L) - { - /* Overflow. */ - *signgamp = 0; - return LDBL_MAX * LDBL_MAX; - } - else - { - SET_RESTORE_ROUNDL (FE_TONEAREST); - if (x > 0.0L) - { - *signgamp = 0; - int exp2_adj; - ret = gammal_positive (x, &exp2_adj); - ret = __scalbnl (ret, exp2_adj); - } - else if (x >= -0x1p-110L) - { - *signgamp = 0; - ret = 1.0L / x; - } - else - { - long double tx = __truncl (x); - *signgamp = (tx == 2.0L * __truncl (tx / 2.0L)) ? -1 : 1; - if (x <= -191.0L) - /* Underflow. */ - ret = LDBL_MIN * LDBL_MIN; - else - { - long double frac = tx - x; - if (frac > 0.5L) - frac = 1.0L - frac; - long double sinpix = (frac <= 0.25L - ? __sinl (M_PIl * frac) - : __cosl (M_PIl * (0.5L - frac))); - int exp2_adj; - ret = M_PIl / (-x * sinpix - * gammal_positive (-x, &exp2_adj)); - ret = __scalbnl (ret, -exp2_adj); - math_check_force_underflow_nonneg (ret); - } - } - } - if (isinf (ret) && x != 0) - { - if (*signgamp < 0) - return -(-__copysignl (LDBL_MAX, ret) * LDBL_MAX); - else - return __copysignl (LDBL_MAX, ret) * LDBL_MAX; - } - else if (ret == 0) - { - if (*signgamp < 0) - return -(-__copysignl (LDBL_MIN, ret) * LDBL_MIN); - else - return __copysignl (LDBL_MIN, ret) * LDBL_MIN; - } - else - return ret; -} -strong_alias (__ieee754_gammal_r, __gammal_r_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c b/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c deleted file mode 100644 index de5a66ab05..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c +++ /dev/null @@ -1,138 +0,0 @@ -/* @(#)e_hypotl.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_hypotl(x,y) - * - * Method : - * If (assume round-to-nearest) z=x*x+y*y - * has error less than sqrtl(2)/2 ulp, than - * sqrtl(z) has error less than 1 ulp (exercise). - * - * So, compute sqrtl(x*x+y*y) with some care as - * follows to get the error below 1 ulp: - * - * Assume x>y>0; - * (if possible, set rounding to round-to-nearest) - * 1. if x > 2y use - * x1*x1+(y*y+(x2*(x+x1))) for x*x+y*y - * where x1 = x with lower 53 bits cleared, x2 = x-x1; else - * 2. if x <= 2y use - * t1*y1+((x-y)*(x-y)+(t1*y2+t2*y)) - * where t1 = 2x with lower 53 bits cleared, t2 = 2x-t1, - * y1= y with lower 53 bits chopped, y2 = y-y1. - * - * NOTE: scaling may be necessary if some argument is too - * large or too tiny - * - * Special cases: - * hypotl(x,y) is INF if x or y is +INF or -INF; else - * hypotl(x,y) is NAN if x or y is NAN. - * - * Accuracy: - * hypotl(x,y) returns sqrtl(x^2+y^2) with error less - * than 1 ulps (units in the last place) - */ - -#include -#include - -long double -__ieee754_hypotl(long double x, long double y) -{ - long double a,b,a1,a2,b1,b2,w,kld; - int64_t j,k,ha,hb; - double xhi, yhi, hi, lo; - - xhi = ldbl_high (x); - EXTRACT_WORDS64 (ha, xhi); - yhi = ldbl_high (y); - EXTRACT_WORDS64 (hb, yhi); - ha &= 0x7fffffffffffffffLL; - hb &= 0x7fffffffffffffffLL; - if(hb > ha) {a=y;b=x;j=ha; ha=hb;hb=j;} else {a=x;b=y;} - a = fabsl(a); /* a <- |a| */ - b = fabsl(b); /* b <- |b| */ - if((ha-hb)>0x0780000000000000LL) {return a+b;} /* x/y > 2**120 */ - k=0; - kld = 1.0L; - if(ha > 0x5f30000000000000LL) { /* a>2**500 */ - if(ha >= 0x7ff0000000000000LL) { /* Inf or NaN */ - w = a+b; /* for sNaN */ - if (issignaling (a) || issignaling (b)) - return w; - if(ha == 0x7ff0000000000000LL) - w = a; - if(hb == 0x7ff0000000000000LL) - w = b; - return w; - } - /* scale a and b by 2**-600 */ - a *= 0x1p-600L; - b *= 0x1p-600L; - k = 600; - kld = 0x1p+600L; - } - else if(hb < 0x23d0000000000000LL) { /* b < 2**-450 */ - if(hb <= 0x000fffffffffffffLL) { /* subnormal b or 0 */ - if(hb==0) return a; - a *= 0x1p+1022L; - b *= 0x1p+1022L; - k = -1022; - kld = 0x1p-1022L; - } else { /* scale a and b by 2^600 */ - a *= 0x1p+600L; - b *= 0x1p+600L; - k = -600; - kld = 0x1p-600L; - } - } - /* medium size a and b */ - w = a-b; - if (w>b) { - ldbl_unpack (a, &hi, &lo); - a1 = hi; - a2 = lo; - /* a*a + b*b - = (a1+a2)*a + b*b - = a1*a + a2*a + b*b - = a1*(a1+a2) + a2*a + b*b - = a1*a1 + a1*a2 + a2*a + b*b - = a1*a1 + a2*(a+a1) + b*b */ - w = __ieee754_sqrtl(a1*a1-(b*(-b)-a2*(a+a1))); - } else { - a = a+a; - ldbl_unpack (b, &hi, &lo); - b1 = hi; - b2 = lo; - ldbl_unpack (a, &hi, &lo); - a1 = hi; - a2 = lo; - /* a*a + b*b - = a*a + (a-b)*(a-b) - (a-b)*(a-b) + b*b - = a*a + w*w - (a*a - 2*a*b + b*b) + b*b - = w*w + 2*a*b - = w*w + (a1+a2)*b - = w*w + a1*b + a2*b - = w*w + a1*(b1+b2) + a2*b - = w*w + a1*b1 + a1*b2 + a2*b */ - w = __ieee754_sqrtl(a1*b1-(w*(-w)-(a1*b2+a2*b))); - } - if(k!=0) - { - w *= kld; - math_check_force_underflow_nonneg (w); - return w; - } - else - return w; -} -strong_alias (__ieee754_hypotl, __hypotl_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_ilogbl.c b/sysdeps/ieee754/ldbl-128ibm/e_ilogbl.c deleted file mode 100644 index 4088238f30..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_ilogbl.c +++ /dev/null @@ -1,70 +0,0 @@ -/* s_ilogbl.c -- long double version of s_ilogb.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* ilogbl(long double x) - * return the binary exponent of non-zero x - * ilogbl(0) = FP_ILOGB0 - * ilogbl(NaN) = FP_ILOGBNAN (no signal is raised) - * ilogbl(+-Inf) = INT_MAX (no signal is raised) - */ - -#include -#include -#include -#include - -int __ieee754_ilogbl(long double x) -{ - int64_t hx, hxs; - int ix; - double xhi, xlo; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - hxs = hx; - hx &= 0x7fffffffffffffffLL; - if(hx <= 0x0010000000000000LL) { - if(hx==0) - return FP_ILOGB0; /* ilogbl(0) = FP_ILOGB0 */ - else /* subnormal x */ - for (ix = -1022, hx<<=11; hx>0; hx<<=1) ix -=1; - return ix; - } - else if (hx < 0x7ff0000000000000LL) - { - int hexp = (hx >> 52) - 0x3ff; - /* If the high part is a power of 2, and the low part is - nonzero with the opposite sign, the low part affects - the exponent. */ - if ((hx & 0x000fffffffffffffLL) == 0) - { - int64_t lx; - EXTRACT_WORDS64 (lx, xlo); - if ((hxs ^ lx) < 0 && (lx & 0x7fffffffffffffffLL) != 0) - hexp--; - } - return hexp; - } - else if (FP_ILOGBNAN != INT_MAX) { - /* ISO C99 requires ilogbl(+-Inf) == INT_MAX. */ - if (hx==0x7ff0000000000000LL) - return INT_MAX; - } - return FP_ILOGBNAN; -} diff --git a/sysdeps/ieee754/ldbl-128ibm/e_j0l.c b/sysdeps/ieee754/ldbl-128ibm/e_j0l.c deleted file mode 100644 index 00bce29284..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_j0l.c +++ /dev/null @@ -1,5 +0,0 @@ -/* Looks like we can use ieee854 e_j0l.c as is for IBM extended format. */ -#define _Float128 long double -#define L(x) x ## L -#include - diff --git a/sysdeps/ieee754/ldbl-128ibm/e_j1l.c b/sysdeps/ieee754/ldbl-128ibm/e_j1l.c deleted file mode 100644 index da9fd9eeca..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_j1l.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Looks like we can use ieee854 e_j1l.c as is for IBM extended format. */ -#define _Float128 long double -#define L(x) x ## L -#include diff --git a/sysdeps/ieee754/ldbl-128ibm/e_jnl.c b/sysdeps/ieee754/ldbl-128ibm/e_jnl.c deleted file mode 100644 index 4a8ccb044e..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_jnl.c +++ /dev/null @@ -1,421 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Modifications for 128-bit long double are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* - * __ieee754_jn(n, x), __ieee754_yn(n, x) - * floating point Bessel's function of the 1st and 2nd kind - * of order n - * - * Special cases: - * y0(0)=y1(0)=yn(n,0) = -inf with division by zero signal; - * y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal. - * Note 2. About jn(n,x), yn(n,x) - * For n=0, j0(x) is called, - * for n=1, j1(x) is called, - * for nx, a continued fraction approximation to - * j(n,x)/j(n-1,x) is evaluated and then backward - * recursion is used starting from a supposed value - * for j(n,x). The resulting value of j(0,x) is - * compared with the actual value to correct the - * supposed value of j(n,x). - * - * yn(n,x) is similar in all respects, except - * that forward recursion is used for all - * values of n>1. - * - */ - -#include -#include -#include -#include - -static const long double - invsqrtpi = 5.6418958354775628694807945156077258584405E-1L, - two = 2.0e0L, - one = 1.0e0L, - zero = 0.0L; - - -long double -__ieee754_jnl (int n, long double x) -{ - uint32_t se, lx; - int32_t i, ix, sgn; - long double a, b, temp, di, ret; - long double z, w; - double xhi; - - - /* J(-n,x) = (-1)^n * J(n, x), J(n, -x) = (-1)^n * J(n, x) - * Thus, J(-n,x) = J(n,-x) - */ - - xhi = ldbl_high (x); - EXTRACT_WORDS (se, lx, xhi); - ix = se & 0x7fffffff; - - /* if J(n,NaN) is NaN */ - if (ix >= 0x7ff00000) - { - if (((ix - 0x7ff00000) | lx) != 0) - return x + x; - } - - if (n < 0) - { - n = -n; - x = -x; - se ^= 0x80000000; - } - if (n == 0) - return (__ieee754_j0l (x)); - if (n == 1) - return (__ieee754_j1l (x)); - sgn = (n & 1) & (se >> 31); /* even n -- 0, odd n -- sign(x) */ - x = fabsl (x); - - { - SET_RESTORE_ROUNDL (FE_TONEAREST); - if (x == 0.0L || ix >= 0x7ff00000) /* if x is 0 or inf */ - return sgn == 1 ? -zero : zero; - else if ((long double) n <= x) - { - /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ - if (ix >= 0x52d00000) - { /* x > 2**302 */ - - /* ??? Could use an expansion for large x here. */ - - /* (x >> n**2) - * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Let s=sin(x), c=cos(x), - * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then - * - * n sin(xn)*sqt2 cos(xn)*sqt2 - * ---------------------------------- - * 0 s-c c+s - * 1 -s-c -c+s - * 2 -s+c -c-s - * 3 s+c c-s - */ - long double s; - long double c; - __sincosl (x, &s, &c); - switch (n & 3) - { - case 0: - temp = c + s; - break; - case 1: - temp = -c + s; - break; - case 2: - temp = -c - s; - break; - case 3: - temp = c - s; - break; - } - b = invsqrtpi * temp / __ieee754_sqrtl (x); - } - else - { - a = __ieee754_j0l (x); - b = __ieee754_j1l (x); - for (i = 1; i < n; i++) - { - temp = b; - b = b * ((long double) (i + i) / x) - a; /* avoid underflow */ - a = temp; - } - } - } - else - { - if (ix < 0x3e100000) - { /* x < 2**-29 */ - /* x is tiny, return the first Taylor expansion of J(n,x) - * J(n,x) = 1/n!*(x/2)^n - ... - */ - if (n >= 33) /* underflow, result < 10^-300 */ - b = zero; - else - { - temp = x * 0.5; - b = temp; - for (a = one, i = 2; i <= n; i++) - { - a *= (long double) i; /* a = n! */ - b *= temp; /* b = (x/2)^n */ - } - b = b / a; - } - } - else - { - /* use backward recurrence */ - /* x x^2 x^2 - * J(n,x)/J(n-1,x) = ---- ------ ------ ..... - * 2n - 2(n+1) - 2(n+2) - * - * 1 1 1 - * (for large x) = ---- ------ ------ ..... - * 2n 2(n+1) 2(n+2) - * -- - ------ - ------ - - * x x x - * - * Let w = 2n/x and h=2/x, then the above quotient - * is equal to the continued fraction: - * 1 - * = ----------------------- - * 1 - * w - ----------------- - * 1 - * w+h - --------- - * w+2h - ... - * - * To determine how many terms needed, let - * Q(0) = w, Q(1) = w(w+h) - 1, - * Q(k) = (w+k*h)*Q(k-1) - Q(k-2), - * When Q(k) > 1e4 good for single - * When Q(k) > 1e9 good for double - * When Q(k) > 1e17 good for quadruple - */ - /* determine k */ - long double t, v; - long double q0, q1, h, tmp; - int32_t k, m; - w = (n + n) / (long double) x; - h = 2.0L / (long double) x; - q0 = w; - z = w + h; - q1 = w * z - 1.0L; - k = 1; - while (q1 < 1.0e17L) - { - k += 1; - z += h; - tmp = z * q1 - q0; - q0 = q1; - q1 = tmp; - } - m = n + n; - for (t = zero, i = 2 * (n + k); i >= m; i -= 2) - t = one / (i / x - t); - a = t; - b = one; - /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) - * Hence, if n*(log(2n/x)) > ... - * single 8.8722839355e+01 - * double 7.09782712893383973096e+02 - * long double 1.1356523406294143949491931077970765006170e+04 - * then recurrent value may overflow and the result is - * likely underflow to zero - */ - tmp = n; - v = two / x; - tmp = tmp * __ieee754_logl (fabsl (v * tmp)); - - if (tmp < 1.1356523406294143949491931077970765006170e+04L) - { - for (i = n - 1, di = (long double) (i + i); i > 0; i--) - { - temp = b; - b *= di; - b = b / x - a; - a = temp; - di -= two; - } - } - else - { - for (i = n - 1, di = (long double) (i + i); i > 0; i--) - { - temp = b; - b *= di; - b = b / x - a; - a = temp; - di -= two; - /* scale b to avoid spurious overflow */ - if (b > 1e100L) - { - a /= b; - t /= b; - b = one; - } - } - } - /* j0() and j1() suffer enormous loss of precision at and - * near zero; however, we know that their zero points never - * coincide, so just choose the one further away from zero. - */ - z = __ieee754_j0l (x); - w = __ieee754_j1l (x); - if (fabsl (z) >= fabsl (w)) - b = (t * z / b); - else - b = (t * w / a); - } - } - if (sgn == 1) - ret = -b; - else - ret = b; - } - if (ret == 0) - { - ret = __copysignl (LDBL_MIN, ret) * LDBL_MIN; - __set_errno (ERANGE); - } - else - math_check_force_underflow (ret); - return ret; -} -strong_alias (__ieee754_jnl, __jnl_finite) - -long double -__ieee754_ynl (int n, long double x) -{ - uint32_t se, lx; - int32_t i, ix; - int32_t sign; - long double a, b, temp, ret; - double xhi; - - xhi = ldbl_high (x); - EXTRACT_WORDS (se, lx, xhi); - ix = se & 0x7fffffff; - - /* if Y(n,NaN) is NaN */ - if (ix >= 0x7ff00000) - { - if (((ix - 0x7ff00000) | lx) != 0) - return x + x; - } - if (x <= 0.0L) - { - if (x == 0.0L) - return ((n < 0 && (n & 1) != 0) ? 1.0L : -1.0L) / 0.0L; - if (se & 0x80000000) - return zero / (zero * x); - } - sign = 1; - if (n < 0) - { - n = -n; - sign = 1 - ((n & 1) << 1); - } - if (n == 0) - return (__ieee754_y0l (x)); - { - SET_RESTORE_ROUNDL (FE_TONEAREST); - if (n == 1) - { - ret = sign * __ieee754_y1l (x); - goto out; - } - if (ix >= 0x7ff00000) - return zero; - if (ix >= 0x52D00000) - { /* x > 2**302 */ - - /* ??? See comment above on the possible futility of this. */ - - /* (x >> n**2) - * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Let s=sin(x), c=cos(x), - * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then - * - * n sin(xn)*sqt2 cos(xn)*sqt2 - * ---------------------------------- - * 0 s-c c+s - * 1 -s-c -c+s - * 2 -s+c -c-s - * 3 s+c c-s - */ - long double s; - long double c; - __sincosl (x, &s, &c); - switch (n & 3) - { - case 0: - temp = s - c; - break; - case 1: - temp = -s - c; - break; - case 2: - temp = -s + c; - break; - case 3: - temp = s + c; - break; - } - b = invsqrtpi * temp / __ieee754_sqrtl (x); - } - else - { - a = __ieee754_y0l (x); - b = __ieee754_y1l (x); - /* quit if b is -inf */ - xhi = ldbl_high (b); - GET_HIGH_WORD (se, xhi); - se &= 0xfff00000; - for (i = 1; i < n && se != 0xfff00000; i++) - { - temp = b; - b = ((long double) (i + i) / x) * b - a; - xhi = ldbl_high (b); - GET_HIGH_WORD (se, xhi); - se &= 0xfff00000; - a = temp; - } - } - /* If B is +-Inf, set up errno accordingly. */ - if (! isfinite (b)) - __set_errno (ERANGE); - if (sign > 0) - ret = b; - else - ret = -b; - } - out: - if (isinf (ret)) - ret = __copysignl (LDBL_MAX, ret) * LDBL_MAX; - return ret; -} -strong_alias (__ieee754_ynl, __ynl_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c b/sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c deleted file mode 100644 index 8ac8283bd8..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c +++ /dev/null @@ -1,5 +0,0 @@ -/* Looks like we can use ieee854 e_lgammal_r.c as is for IBM extended format. */ -#define _Float128 long double -#define L(x) x ## L -#include - diff --git a/sysdeps/ieee754/ldbl-128ibm/e_log10l.c b/sysdeps/ieee754/ldbl-128ibm/e_log10l.c deleted file mode 100644 index 1fbfa48e13..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_log10l.c +++ /dev/null @@ -1,261 +0,0 @@ -/* log10l.c - * - * Common logarithm, 128-bit long double precision - * - * - * - * SYNOPSIS: - * - * long double x, y, log10l(); - * - * y = log10l( x ); - * - * - * - * DESCRIPTION: - * - * Returns the base 10 logarithm of x. - * - * The argument is separated into its exponent and fractional - * parts. If the exponent is between -1 and +1, the logarithm - * of the fraction is approximated by - * - * log(1+x) = x - 0.5 x^2 + x^3 P(x)/Q(x). - * - * Otherwise, setting z = 2(x-1)/x+1), - * - * log(x) = z + z^3 P(z)/Q(z). - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE 0.5, 2.0 30000 2.3e-34 4.9e-35 - * IEEE exp(+-10000) 30000 1.0e-34 4.1e-35 - * - * In the tests over the interval exp(+-10000), the logarithms - * of the random arguments were uniformly distributed over - * [-10000, +10000]. - * - */ - -/* - Cephes Math Library Release 2.2: January, 1991 - Copyright 1984, 1991 by Stephen L. Moshier - Adapted for glibc November, 2001 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see . - */ - -#include -#include - -/* Coefficients for ln(1+x) = x - x**2/2 + x**3 P(x)/Q(x) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 5.3e-37, - * relative peak error spread = 2.3e-14 - */ -static const long double P[13] = -{ - 1.313572404063446165910279910527789794488E4L, - 7.771154681358524243729929227226708890930E4L, - 2.014652742082537582487669938141683759923E5L, - 3.007007295140399532324943111654767187848E5L, - 2.854829159639697837788887080758954924001E5L, - 1.797628303815655343403735250238293741397E5L, - 7.594356839258970405033155585486712125861E4L, - 2.128857716871515081352991964243375186031E4L, - 3.824952356185897735160588078446136783779E3L, - 4.114517881637811823002128927449878962058E2L, - 2.321125933898420063925789532045674660756E1L, - 4.998469661968096229986658302195402690910E-1L, - 1.538612243596254322971797716843006400388E-6L -}; -static const long double Q[12] = -{ - 3.940717212190338497730839731583397586124E4L, - 2.626900195321832660448791748036714883242E5L, - 7.777690340007566932935753241556479363645E5L, - 1.347518538384329112529391120390701166528E6L, - 1.514882452993549494932585972882995548426E6L, - 1.158019977462989115839826904108208787040E6L, - 6.132189329546557743179177159925690841200E5L, - 2.248234257620569139969141618556349415120E5L, - 5.605842085972455027590989944010492125825E4L, - 9.147150349299596453976674231612674085381E3L, - 9.104928120962988414618126155557301584078E2L, - 4.839208193348159620282142911143429644326E1L -/* 1.000000000000000000000000000000000000000E0L, */ -}; - -/* Coefficients for log(x) = z + z^3 P(z^2)/Q(z^2), - * where z = 2(x-1)/(x+1) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 1.1e-35, - * relative peak error spread 1.1e-9 - */ -static const long double R[6] = -{ - 1.418134209872192732479751274970992665513E5L, - -8.977257995689735303686582344659576526998E4L, - 2.048819892795278657810231591630928516206E4L, - -2.024301798136027039250415126250455056397E3L, - 8.057002716646055371965756206836056074715E1L, - -8.828896441624934385266096344596648080902E-1L -}; -static const long double S[6] = -{ - 1.701761051846631278975701529965589676574E6L, - -1.332535117259762928288745111081235577029E6L, - 4.001557694070773974936904547424676279307E5L, - -5.748542087379434595104154610899551484314E4L, - 3.998526750980007367835804959888064681098E3L, - -1.186359407982897997337150403816839480438E2L -/* 1.000000000000000000000000000000000000000E0L, */ -}; - -static const long double -/* log10(2) */ -L102A = 0.3125L, -L102B = -1.14700043360188047862611052755069732318101185E-2L, -/* log10(e) */ -L10EA = 0.5L, -L10EB = -6.570551809674817234887108108339491770560299E-2L, -/* sqrt(2)/2 */ -SQRTH = 7.071067811865475244008443621048490392848359E-1L; - - - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static long double -neval (long double x, const long double *p, int n) -{ - long double y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static long double -deval (long double x, const long double *p, int n) -{ - long double y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - - -long double -__ieee754_log10l (long double x) -{ - long double z; - long double y; - int e; - int64_t hx; - double xhi; - -/* Test for domain */ - xhi = ldbl_high (x); - EXTRACT_WORDS64 (hx, xhi); - if ((hx & 0x7fffffffffffffffLL) == 0) - return (-1.0L / __fabsl (x)); /* log10l(+-0)=-inf */ - if (hx < 0) - return (x - x) / (x - x); - if (hx >= 0x7ff0000000000000LL) - return (x + x); - - if (x == 1.0L) - return 0.0L; - -/* separate mantissa from exponent */ - -/* Note, frexp is used so that denormal numbers - * will be handled properly. - */ - x = __frexpl (x, &e); - - -/* logarithm using log(x) = z + z**3 P(z)/Q(z), - * where z = 2(x-1)/x+1) - */ - if ((e > 2) || (e < -2)) - { - if (x < SQRTH) - { /* 2( 2x-1 )/( 2x+1 ) */ - e -= 1; - z = x - 0.5L; - y = 0.5L * z + 0.5L; - } - else - { /* 2 (x-1)/(x+1) */ - z = x - 0.5L; - z -= 0.5L; - y = 0.5L * x + 0.5L; - } - x = z / y; - z = x * x; - y = x * (z * neval (z, R, 5) / deval (z, S, 5)); - goto done; - } - - -/* logarithm using log(1+x) = x - .5x**2 + x**3 P(x)/Q(x) */ - - if (x < SQRTH) - { - e -= 1; - x = 2.0 * x - 1.0L; /* 2x - 1 */ - } - else - { - x = x - 1.0L; - } - z = x * x; - y = x * (z * neval (x, P, 12) / deval (x, Q, 11)); - y = y - 0.5 * z; - -done: - - /* Multiply log of fraction by log10(e) - * and base 2 exponent by log10(2). - */ - z = y * L10EB; - z += x * L10EB; - z += e * L102B; - z += y * L10EA; - z += x * L10EA; - z += e * L102A; - return (z); -} -strong_alias (__ieee754_log10l, __log10l_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_log2l.c b/sysdeps/ieee754/ldbl-128ibm/e_log2l.c deleted file mode 100644 index c820dacf08..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_log2l.c +++ /dev/null @@ -1,254 +0,0 @@ -/* log2l.c - * Base 2 logarithm, 128-bit long double precision - * - * - * - * SYNOPSIS: - * - * long double x, y, log2l(); - * - * y = log2l( x ); - * - * - * - * DESCRIPTION: - * - * Returns the base 2 logarithm of x. - * - * The argument is separated into its exponent and fractional - * parts. If the exponent is between -1 and +1, the (natural) - * logarithm of the fraction is approximated by - * - * log(1+x) = x - 0.5 x^2 + x^3 P(x)/Q(x). - * - * Otherwise, setting z = 2(x-1)/x+1), - * - * log(x) = z + z^3 P(z)/Q(z). - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE 0.5, 2.0 100,000 2.6e-34 4.9e-35 - * IEEE exp(+-10000) 100,000 9.6e-35 4.0e-35 - * - * In the tests over the interval exp(+-10000), the logarithms - * of the random arguments were uniformly distributed over - * [-10000, +10000]. - * - */ - -/* - Cephes Math Library Release 2.2: January, 1991 - Copyright 1984, 1991 by Stephen L. Moshier - Adapted for glibc November, 2001 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see . - */ - -#include -#include - -/* Coefficients for ln(1+x) = x - x**2/2 + x**3 P(x)/Q(x) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 5.3e-37, - * relative peak error spread = 2.3e-14 - */ -static const long double P[13] = -{ - 1.313572404063446165910279910527789794488E4L, - 7.771154681358524243729929227226708890930E4L, - 2.014652742082537582487669938141683759923E5L, - 3.007007295140399532324943111654767187848E5L, - 2.854829159639697837788887080758954924001E5L, - 1.797628303815655343403735250238293741397E5L, - 7.594356839258970405033155585486712125861E4L, - 2.128857716871515081352991964243375186031E4L, - 3.824952356185897735160588078446136783779E3L, - 4.114517881637811823002128927449878962058E2L, - 2.321125933898420063925789532045674660756E1L, - 4.998469661968096229986658302195402690910E-1L, - 1.538612243596254322971797716843006400388E-6L -}; -static const long double Q[12] = -{ - 3.940717212190338497730839731583397586124E4L, - 2.626900195321832660448791748036714883242E5L, - 7.777690340007566932935753241556479363645E5L, - 1.347518538384329112529391120390701166528E6L, - 1.514882452993549494932585972882995548426E6L, - 1.158019977462989115839826904108208787040E6L, - 6.132189329546557743179177159925690841200E5L, - 2.248234257620569139969141618556349415120E5L, - 5.605842085972455027590989944010492125825E4L, - 9.147150349299596453976674231612674085381E3L, - 9.104928120962988414618126155557301584078E2L, - 4.839208193348159620282142911143429644326E1L -/* 1.000000000000000000000000000000000000000E0L, */ -}; - -/* Coefficients for log(x) = z + z^3 P(z^2)/Q(z^2), - * where z = 2(x-1)/(x+1) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 1.1e-35, - * relative peak error spread 1.1e-9 - */ -static const long double R[6] = -{ - 1.418134209872192732479751274970992665513E5L, - -8.977257995689735303686582344659576526998E4L, - 2.048819892795278657810231591630928516206E4L, - -2.024301798136027039250415126250455056397E3L, - 8.057002716646055371965756206836056074715E1L, - -8.828896441624934385266096344596648080902E-1L -}; -static const long double S[6] = -{ - 1.701761051846631278975701529965589676574E6L, - -1.332535117259762928288745111081235577029E6L, - 4.001557694070773974936904547424676279307E5L, - -5.748542087379434595104154610899551484314E4L, - 3.998526750980007367835804959888064681098E3L, - -1.186359407982897997337150403816839480438E2L -/* 1.000000000000000000000000000000000000000E0L, */ -}; - -static const long double -/* log2(e) - 1 */ -LOG2EA = 4.4269504088896340735992468100189213742664595E-1L, -/* sqrt(2)/2 */ -SQRTH = 7.071067811865475244008443621048490392848359E-1L; - - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static long double -neval (long double x, const long double *p, int n) -{ - long double y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static long double -deval (long double x, const long double *p, int n) -{ - long double y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - - -long double -__ieee754_log2l (long double x) -{ - long double z; - long double y; - int e; - int64_t hx; - double xhi; - -/* Test for domain */ - xhi = ldbl_high (x); - EXTRACT_WORDS64 (hx, xhi); - if ((hx & 0x7fffffffffffffffLL) == 0) - return (-1.0L / __fabsl (x)); /* log2l(+-0)=-inf */ - if (hx < 0) - return (x - x) / (x - x); - if (hx >= 0x7ff0000000000000LL) - return (x + x); - - if (x == 1.0L) - return 0.0L; - -/* separate mantissa from exponent */ - -/* Note, frexp is used so that denormal numbers - * will be handled properly. - */ - x = __frexpl (x, &e); - - -/* logarithm using log(x) = z + z**3 P(z)/Q(z), - * where z = 2(x-1)/x+1) - */ - if ((e > 2) || (e < -2)) - { - if (x < SQRTH) - { /* 2( 2x-1 )/( 2x+1 ) */ - e -= 1; - z = x - 0.5L; - y = 0.5L * z + 0.5L; - } - else - { /* 2 (x-1)/(x+1) */ - z = x - 0.5L; - z -= 0.5L; - y = 0.5L * x + 0.5L; - } - x = z / y; - z = x * x; - y = x * (z * neval (z, R, 5) / deval (z, S, 5)); - goto done; - } - - -/* logarithm using log(1+x) = x - .5x**2 + x**3 P(x)/Q(x) */ - - if (x < SQRTH) - { - e -= 1; - x = 2.0 * x - 1.0L; /* 2x - 1 */ - } - else - { - x = x - 1.0L; - } - z = x * x; - y = x * (z * neval (x, P, 12) / deval (x, Q, 11)); - y = y - 0.5 * z; - -done: - -/* Multiply log of fraction by log2(e) - * and base 2 exponent by 1 - */ - z = y * LOG2EA; - z += x * LOG2EA; - z += y; - z += x; - z += e; - return (z); -} -strong_alias (__ieee754_log2l, __log2l_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_logl.c b/sysdeps/ieee754/ldbl-128ibm/e_logl.c deleted file mode 100644 index c44feca65b..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_logl.c +++ /dev/null @@ -1,300 +0,0 @@ -/* logll.c - * - * Natural logarithm for 128-bit long double precision. - * - * - * - * SYNOPSIS: - * - * long double x, y, logl(); - * - * y = logl( x ); - * - * - * - * DESCRIPTION: - * - * Returns the base e (2.718...) logarithm of x. - * - * The argument is separated into its exponent and fractional - * parts. Use of a lookup table increases the speed of the routine. - * The program uses logarithms tabulated at intervals of 1/128 to - * cover the domain from approximately 0.7 to 1.4. - * - * On the interval [-1/128, +1/128] the logarithm of 1+x is approximated by - * log(1+x) = x - 0.5 x^2 + x^3 P(x) . - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE 0.875, 1.125 100000 1.2e-34 4.1e-35 - * IEEE 0.125, 8 100000 1.2e-34 4.1e-35 - * - * - * WARNING: - * - * This program uses integer operations on bit fields of floating-point - * numbers. It does not work with data structures other than the - * structure assumed. - * - */ - -/* Copyright 2001 by Stephen L. Moshier - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -#include -#include - -/* log(1+x) = x - .5 x^2 + x^3 l(x) - -.0078125 <= x <= +.0078125 - peak relative error 1.2e-37 */ -static const long double -l3 = 3.333333333333333333333333333333336096926E-1L, -l4 = -2.499999999999999999999999999486853077002E-1L, -l5 = 1.999999999999999999999999998515277861905E-1L, -l6 = -1.666666666666666666666798448356171665678E-1L, -l7 = 1.428571428571428571428808945895490721564E-1L, -l8 = -1.249999999999999987884655626377588149000E-1L, -l9 = 1.111111111111111093947834982832456459186E-1L, -l10 = -1.000000000000532974938900317952530453248E-1L, -l11 = 9.090909090915566247008015301349979892689E-2L, -l12 = -8.333333211818065121250921925397567745734E-2L, -l13 = 7.692307559897661630807048686258659316091E-2L, -l14 = -7.144242754190814657241902218399056829264E-2L, -l15 = 6.668057591071739754844678883223432347481E-2L; - -/* Lookup table of ln(t) - (t-1) - t = 0.5 + (k+26)/128) - k = 0, ..., 91 */ -static const long double logtbl[92] = { --5.5345593589352099112142921677820359632418E-2L, --5.2108257402767124761784665198737642086148E-2L, --4.8991686870576856279407775480686721935120E-2L, --4.5993270766361228596215288742353061431071E-2L, --4.3110481649613269682442058976885699556950E-2L, --4.0340872319076331310838085093194799765520E-2L, --3.7682072451780927439219005993827431503510E-2L, --3.5131785416234343803903228503274262719586E-2L, --3.2687785249045246292687241862699949178831E-2L, --3.0347913785027239068190798397055267411813E-2L, --2.8110077931525797884641940838507561326298E-2L, --2.5972247078357715036426583294246819637618E-2L, --2.3932450635346084858612873953407168217307E-2L, --2.1988775689981395152022535153795155900240E-2L, --2.0139364778244501615441044267387667496733E-2L, --1.8382413762093794819267536615342902718324E-2L, --1.6716169807550022358923589720001638093023E-2L, --1.5138929457710992616226033183958974965355E-2L, --1.3649036795397472900424896523305726435029E-2L, --1.2244881690473465543308397998034325468152E-2L, --1.0924898127200937840689817557742469105693E-2L, --9.6875626072830301572839422532631079809328E-3L, --8.5313926245226231463436209313499745894157E-3L, --7.4549452072765973384933565912143044991706E-3L, --6.4568155251217050991200599386801665681310E-3L, --5.5356355563671005131126851708522185605193E-3L, --4.6900728132525199028885749289712348829878E-3L, --3.9188291218610470766469347968659624282519E-3L, --3.2206394539524058873423550293617843896540E-3L, --2.5942708080877805657374888909297113032132E-3L, --2.0385211375711716729239156839929281289086E-3L, --1.5522183228760777967376942769773768850872E-3L, --1.1342191863606077520036253234446621373191E-3L, --7.8340854719967065861624024730268350459991E-4L, --4.9869831458030115699628274852562992756174E-4L, --2.7902661731604211834685052867305795169688E-4L, --1.2335696813916860754951146082826952093496E-4L, --3.0677461025892873184042490943581654591817E-5L, -#define ZERO logtbl[38] - 0.0000000000000000000000000000000000000000E0L, --3.0359557945051052537099938863236321874198E-5L, --1.2081346403474584914595395755316412213151E-4L, --2.7044071846562177120083903771008342059094E-4L, --4.7834133324631162897179240322783590830326E-4L, --7.4363569786340080624467487620270965403695E-4L, --1.0654639687057968333207323853366578860679E-3L, --1.4429854811877171341298062134712230604279E-3L, --1.8753781835651574193938679595797367137975E-3L, --2.3618380914922506054347222273705859653658E-3L, --2.9015787624124743013946600163375853631299E-3L, --3.4938307889254087318399313316921940859043E-3L, --4.1378413103128673800485306215154712148146E-3L, --4.8328735414488877044289435125365629849599E-3L, --5.5782063183564351739381962360253116934243E-3L, --6.3731336597098858051938306767880719015261E-3L, --7.2169643436165454612058905294782949315193E-3L, --8.1090214990427641365934846191367315083867E-3L, --9.0486422112807274112838713105168375482480E-3L, --1.0035177140880864314674126398350812606841E-2L, --1.1067990155502102718064936259435676477423E-2L, --1.2146457974158024928196575103115488672416E-2L, --1.3269969823361415906628825374158424754308E-2L, --1.4437927104692837124388550722759686270765E-2L, --1.5649743073340777659901053944852735064621E-2L, --1.6904842527181702880599758489058031645317E-2L, --1.8202661505988007336096407340750378994209E-2L, --1.9542647000370545390701192438691126552961E-2L, --2.0924256670080119637427928803038530924742E-2L, --2.2346958571309108496179613803760727786257E-2L, --2.3810230892650362330447187267648486279460E-2L, --2.5313561699385640380910474255652501521033E-2L, --2.6856448685790244233704909690165496625399E-2L, --2.8438398935154170008519274953860128449036E-2L, --3.0058928687233090922411781058956589863039E-2L, --3.1717563112854831855692484086486099896614E-2L, --3.3413836095418743219397234253475252001090E-2L, --3.5147290019036555862676702093393332533702E-2L, --3.6917475563073933027920505457688955423688E-2L, --3.8723951502862058660874073462456610731178E-2L, --4.0566284516358241168330505467000838017425E-2L, --4.2444048996543693813649967076598766917965E-2L, --4.4356826869355401653098777649745233339196E-2L, --4.6304207416957323121106944474331029996141E-2L, --4.8285787106164123613318093945035804818364E-2L, --5.0301169421838218987124461766244507342648E-2L, --5.2349964705088137924875459464622098310997E-2L, --5.4431789996103111613753440311680967840214E-2L, --5.6546268881465384189752786409400404404794E-2L, --5.8693031345788023909329239565012647817664E-2L, --6.0871713627532018185577188079210189048340E-2L, --6.3081958078862169742820420185833800925568E-2L, --6.5323413029406789694910800219643791556918E-2L, --6.7595732653791419081537811574227049288168E-2L -}; - -/* ln(2) = ln2a + ln2b with extended precision. */ -static const long double - ln2a = 6.93145751953125e-1L, - ln2b = 1.4286068203094172321214581765680755001344E-6L; - -static const long double - ldbl_epsilon = 0x1p-106L; - -long double -__ieee754_logl(long double x) -{ - long double z, y, w, t; - unsigned int m; - int k, e; - double xhi; - uint32_t hx, lx; - - xhi = ldbl_high (x); - EXTRACT_WORDS (hx, lx, xhi); - m = hx; - - /* Check for IEEE special cases. */ - k = m & 0x7fffffff; - /* log(0) = -infinity. */ - if ((k | lx) == 0) - { - return -0.5L / ZERO; - } - /* log ( x < 0 ) = NaN */ - if (m & 0x80000000) - { - return (x - x) / ZERO; - } - /* log (infinity or NaN) */ - if (k >= 0x7ff00000) - { - return x + x; - } - - /* On this interval the table is not used due to cancellation error. */ - if ((x <= 1.0078125L) && (x >= 0.9921875L)) - { - if (x == 1.0L) - return 0.0L; - z = x - 1.0L; - k = 64; - t = 1.0L; - e = 0; - } - else - { - /* Extract exponent and reduce domain to 0.703125 <= u < 1.40625 */ - unsigned int w0; - e = (int) (m >> 20) - (int) 0x3fe; - if (e == -1022) - { - x *= 0x1p106L; - xhi = ldbl_high (x); - EXTRACT_WORDS (hx, lx, xhi); - m = hx; - e = (int) (m >> 20) - (int) 0x3fe - 106; - } - m &= 0xfffff; - w0 = m | 0x3fe00000; - m |= 0x100000; - /* Find lookup table index k from high order bits of the significand. */ - if (m < 0x168000) - { - k = (m - 0xff000) >> 13; - /* t is the argument 0.5 + (k+26)/128 - of the nearest item to u in the lookup table. */ - INSERT_WORDS (xhi, 0x3ff00000 + (k << 13), 0); - t = xhi; - w0 += 0x100000; - e -= 1; - k += 64; - } - else - { - k = (m - 0xfe000) >> 14; - INSERT_WORDS (xhi, 0x3fe00000 + (k << 14), 0); - t = xhi; - } - x = __scalbnl (x, ((int) ((w0 - hx) * 2)) >> 21); - /* log(u) = log( t u/t ) = log(t) + log(u/t) - log(t) is tabulated in the lookup table. - Express log(u/t) = log(1+z), where z = u/t - 1 = (u-t)/t. - cf. Cody & Waite. */ - z = (x - t) / t; - } - /* Series expansion of log(1+z). */ - w = z * z; - /* Avoid spurious underflows. */ - if (__glibc_unlikely (fabsl (z) <= ldbl_epsilon)) - y = 0.0L; - else - { - y = ((((((((((((l15 * z - + l14) * z - + l13) * z - + l12) * z - + l11) * z - + l10) * z - + l9) * z - + l8) * z - + l7) * z - + l6) * z - + l5) * z - + l4) * z - + l3) * z * w; - y -= 0.5 * w; - } - y += e * ln2b; /* Base 2 exponent offset times ln(2). */ - y += z; - y += logtbl[k-26]; /* log(t) - (t-1) */ - y += (t - 1.0L); - y += e * ln2a; - return y; -} -strong_alias (__ieee754_logl, __logl_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_powl.c b/sysdeps/ieee754/ldbl-128ibm/e_powl.c deleted file mode 100644 index d6fbef6997..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_powl.c +++ /dev/null @@ -1,415 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Expansions and modifications for 128-bit long double are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_powl(x,y) return x**y - * - * n - * Method: Let x = 2 * (1+f) - * 1. Compute and return log2(x) in two pieces: - * log2(x) = w1 + w2, - * where w1 has 113-53 = 60 bit trailing zeros. - * 2. Perform y*log2(x) = n+y' by simulating muti-precision - * arithmetic, where |y'|<=0.5. - * 3. Return x**y = 2**n*exp(y'*log2) - * - * Special cases: - * 1. (anything) ** 0 is 1 - * 2. (anything) ** 1 is itself - * 3. (anything) ** NAN is NAN - * 4. NAN ** (anything except 0) is NAN - * 5. +-(|x| > 1) ** +INF is +INF - * 6. +-(|x| > 1) ** -INF is +0 - * 7. +-(|x| < 1) ** +INF is +0 - * 8. +-(|x| < 1) ** -INF is +INF - * 9. +-1 ** +-INF is NAN - * 10. +0 ** (+anything except 0, NAN) is +0 - * 11. -0 ** (+anything except 0, NAN, odd integer) is +0 - * 12. +0 ** (-anything except 0, NAN) is +INF - * 13. -0 ** (-anything except 0, NAN, odd integer) is +INF - * 14. -0 ** (odd integer) = -( +0 ** (odd integer) ) - * 15. +INF ** (+anything except 0,NAN) is +INF - * 16. +INF ** (-anything except 0,NAN) is +0 - * 17. -INF ** (anything) = -0 ** (-anything) - * 18. (-anything) ** (integer) is (-1)**(integer)*(+anything**integer) - * 19. (-anything except 0 and inf) ** (non-integer) is NAN - * - */ - -#include -#include - -static const long double bp[] = { - 1.0L, - 1.5L, -}; - -/* log_2(1.5) */ -static const long double dp_h[] = { - 0.0, - 5.8496250072115607565592654282227158546448E-1L -}; - -/* Low part of log_2(1.5) */ -static const long double dp_l[] = { - 0.0, - 1.0579781240112554492329533686862998106046E-16L -}; - -static const long double zero = 0.0L, - one = 1.0L, - two = 2.0L, - two113 = 1.0384593717069655257060992658440192E34L, - huge = 1.0e300L, - tiny = 1.0e-300L; - -/* 3/2 log x = 3 z + z^3 + z^3 (z^2 R(z^2)) - z = (x-1)/(x+1) - 1 <= x <= 1.25 - Peak relative error 2.3e-37 */ -static const long double LN[] = -{ - -3.0779177200290054398792536829702930623200E1L, - 6.5135778082209159921251824580292116201640E1L, - -4.6312921812152436921591152809994014413540E1L, - 1.2510208195629420304615674658258363295208E1L, - -9.9266909031921425609179910128531667336670E-1L -}; -static const long double LD[] = -{ - -5.129862866715009066465422805058933131960E1L, - 1.452015077564081884387441590064272782044E2L, - -1.524043275549860505277434040464085593165E2L, - 7.236063513651544224319663428634139768808E1L, - -1.494198912340228235853027849917095580053E1L - /* 1.0E0 */ -}; - -/* exp(x) = 1 + x - x / (1 - 2 / (x - x^2 R(x^2))) - 0 <= x <= 0.5 - Peak relative error 5.7e-38 */ -static const long double PN[] = -{ - 5.081801691915377692446852383385968225675E8L, - 9.360895299872484512023336636427675327355E6L, - 4.213701282274196030811629773097579432957E4L, - 5.201006511142748908655720086041570288182E1L, - 9.088368420359444263703202925095675982530E-3L, -}; -static const long double PD[] = -{ - 3.049081015149226615468111430031590411682E9L, - 1.069833887183886839966085436512368982758E8L, - 8.259257717868875207333991924545445705394E5L, - 1.872583833284143212651746812884298360922E3L, - /* 1.0E0 */ -}; - -static const long double - /* ln 2 */ - lg2 = 6.9314718055994530941723212145817656807550E-1L, - lg2_h = 6.9314718055994528622676398299518041312695E-1L, - lg2_l = 2.3190468138462996154948554638754786504121E-17L, - ovt = 8.0085662595372944372e-0017L, - /* 2/(3*log(2)) */ - cp = 9.6179669392597560490661645400126142495110E-1L, - cp_h = 9.6179669392597555432899980587535537779331E-1L, - cp_l = 5.0577616648125906047157785230014751039424E-17L; - -long double -__ieee754_powl (long double x, long double y) -{ - long double z, ax, z_h, z_l, p_h, p_l; - long double y1, t1, t2, r, s, sgn, t, u, v, w; - long double s2, s_h, s_l, t_h, t_l, ay; - int32_t i, j, k, yisint, n; - uint32_t ix, iy; - int32_t hx, hy, hax; - double ohi, xhi, xlo, yhi, ylo; - uint32_t lx, ly, lj; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS (hx, lx, xhi); - ix = hx & 0x7fffffff; - - ldbl_unpack (y, &yhi, &ylo); - EXTRACT_WORDS (hy, ly, yhi); - iy = hy & 0x7fffffff; - - /* y==zero: x**0 = 1 */ - if ((iy | ly) == 0 && !issignaling (x)) - return one; - - /* 1.0**y = 1; -1.0**+-Inf = 1 */ - if (x == one && !issignaling (y)) - return one; - if (x == -1.0L && ((iy - 0x7ff00000) | ly) == 0) - return one; - - /* +-NaN return x+y */ - if ((ix >= 0x7ff00000 && ((ix - 0x7ff00000) | lx) != 0) - || (iy >= 0x7ff00000 && ((iy - 0x7ff00000) | ly) != 0)) - return x + y; - - /* determine if y is an odd int when x < 0 - * yisint = 0 ... y is not an integer - * yisint = 1 ... y is an odd int - * yisint = 2 ... y is an even int - */ - yisint = 0; - if (hx < 0) - { - uint32_t low_ye; - - GET_HIGH_WORD (low_ye, ylo); - if ((low_ye & 0x7fffffff) >= 0x43400000) /* Low part >= 2^53 */ - yisint = 2; /* even integer y */ - else if (iy >= 0x3ff00000) /* 1.0 */ - { - if (__floorl (y) == y) - { - z = 0.5 * y; - if (__floorl (z) == z) - yisint = 2; - else - yisint = 1; - } - } - } - - ax = fabsl (x); - - /* special value of y */ - if (ly == 0) - { - if (iy == 0x7ff00000) /* y is +-inf */ - { - if (ax > one) - /* (|x|>1)**+-inf = inf,0 */ - return (hy >= 0) ? y : zero; - else - /* (|x|<1)**-,+inf = inf,0 */ - return (hy < 0) ? -y : zero; - } - if (ylo == 0.0) - { - if (iy == 0x3ff00000) - { /* y is +-1 */ - if (hy < 0) - return one / x; - else - return x; - } - if (hy == 0x40000000) - return x * x; /* y is 2 */ - if (hy == 0x3fe00000) - { /* y is 0.5 */ - if (hx >= 0) /* x >= +0 */ - return __ieee754_sqrtl (x); - } - } - } - - /* special value of x */ - if (lx == 0) - { - if (ix == 0x7ff00000 || ix == 0 || (ix == 0x3ff00000 && xlo == 0.0)) - { - z = ax; /*x is +-0,+-inf,+-1 */ - if (hy < 0) - z = one / z; /* z = (1/|x|) */ - if (hx < 0) - { - if (((ix - 0x3ff00000) | yisint) == 0) - { - z = (z - z) / (z - z); /* (-1)**non-int is NaN */ - } - else if (yisint == 1) - z = -z; /* (x<0)**odd = -(|x|**odd) */ - } - return z; - } - } - - /* (x<0)**(non-int) is NaN */ - if (((((u_int32_t) hx >> 31) - 1) | yisint) == 0) - return (x - x) / (x - x); - - /* sgn (sign of result -ve**odd) = -1 else = 1 */ - sgn = one; - if (((((u_int32_t) hx >> 31) - 1) | (yisint - 1)) == 0) - sgn = -one; /* (-ve)**(odd int) */ - - /* |y| is huge. - 2^-16495 = 1/2 of smallest representable value. - If (1 - 1/131072)^y underflows, y > 1.4986e9 */ - if (iy > 0x41d654b0) - { - /* if (1 - 2^-113)^y underflows, y > 1.1873e38 */ - if (iy > 0x47d654b0) - { - if (ix <= 0x3fefffff) - return (hy < 0) ? sgn * huge * huge : sgn * tiny * tiny; - if (ix >= 0x3ff00000) - return (hy > 0) ? sgn * huge * huge : sgn * tiny * tiny; - } - /* over/underflow if x is not close to one */ - if (ix < 0x3fefffff) - return (hy < 0) ? sgn * huge * huge : sgn * tiny * tiny; - if (ix > 0x3ff00000) - return (hy > 0) ? sgn * huge * huge : sgn * tiny * tiny; - } - - ay = y > 0 ? y : -y; - if (ay < 0x1p-117) - y = y < 0 ? -0x1p-117 : 0x1p-117; - - n = 0; - /* take care subnormal number */ - if (ix < 0x00100000) - { - ax *= two113; - n -= 113; - ohi = ldbl_high (ax); - GET_HIGH_WORD (ix, ohi); - } - n += ((ix) >> 20) - 0x3ff; - j = ix & 0x000fffff; - /* determine interval */ - ix = j | 0x3ff00000; /* normalize ix */ - if (j <= 0x39880) - k = 0; /* |x|> 21); - - /* compute s = s_h+s_l = (x-1)/(x+1) or (x-1.5)/(x+1.5) */ - u = ax - bp[k]; /* bp[0]=1.0, bp[1]=1.5 */ - v = one / (ax + bp[k]); - s = u * v; - s_h = ldbl_high (s); - - /* t_h=ax+bp[k] High */ - t_h = ax + bp[k]; - t_h = ldbl_high (t_h); - t_l = ax - (t_h - bp[k]); - s_l = v * ((u - s_h * t_h) - s_h * t_l); - /* compute log(ax) */ - s2 = s * s; - u = LN[0] + s2 * (LN[1] + s2 * (LN[2] + s2 * (LN[3] + s2 * LN[4]))); - v = LD[0] + s2 * (LD[1] + s2 * (LD[2] + s2 * (LD[3] + s2 * (LD[4] + s2)))); - r = s2 * s2 * u / v; - r += s_l * (s_h + s); - s2 = s_h * s_h; - t_h = 3.0 + s2 + r; - t_h = ldbl_high (t_h); - t_l = r - ((t_h - 3.0) - s2); - /* u+v = s*(1+...) */ - u = s_h * t_h; - v = s_l * t_h + t_l * s; - /* 2/(3log2)*(s+...) */ - p_h = u + v; - p_h = ldbl_high (p_h); - p_l = v - (p_h - u); - z_h = cp_h * p_h; /* cp_h+cp_l = 2/(3*log2) */ - z_l = cp_l * p_h + p_l * cp + dp_l[k]; - /* log2(ax) = (s+..)*2/(3*log2) = n + dp_h + z_h + z_l */ - t = (long double) n; - t1 = (((z_h + z_l) + dp_h[k]) + t); - t1 = ldbl_high (t1); - t2 = z_l - (((t1 - t) - dp_h[k]) - z_h); - - /* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */ - y1 = ldbl_high (y); - p_l = (y - y1) * t1 + y * t2; - p_h = y1 * t1; - z = p_l + p_h; - ohi = ldbl_high (z); - EXTRACT_WORDS (j, lj, ohi); - if (j >= 0x40d00000) /* z >= 16384 */ - { - /* if z > 16384 */ - if (((j - 0x40d00000) | lj) != 0) - return sgn * huge * huge; /* overflow */ - else - { - if (p_l + ovt > z - p_h) - return sgn * huge * huge; /* overflow */ - } - } - else if ((j & 0x7fffffff) >= 0x40d01b90) /* z <= -16495 */ - { - /* z < -16495 */ - if (((j - 0xc0d01bc0) | lj) != 0) - return sgn * tiny * tiny; /* underflow */ - else - { - if (p_l <= z - p_h) - return sgn * tiny * tiny; /* underflow */ - } - } - /* compute 2**(p_h+p_l) */ - i = j & 0x7fffffff; - k = (i >> 20) - 0x3ff; - n = 0; - if (i > 0x3fe00000) - { /* if |z| > 0.5, set n = [z+0.5] */ - n = __floorl (z + 0.5L); - t = n; - p_h -= t; - } - t = p_l + p_h; - t = ldbl_high (t); - u = t * lg2_h; - v = (p_l - (t - p_h)) * lg2 + t * lg2_l; - z = u + v; - w = v - (z - u); - /* exp(z) */ - t = z * z; - u = PN[0] + t * (PN[1] + t * (PN[2] + t * (PN[3] + t * PN[4]))); - v = PD[0] + t * (PD[1] + t * (PD[2] + t * (PD[3] + t))); - t1 = z - t * u / v; - r = (z * t1) / (t1 - two) - (w + z * w); - z = one - (r - z); - z = __scalbnl (sgn * z, n); - math_check_force_underflow (z); - return z; -} -strong_alias (__ieee754_powl, __powl_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c b/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c deleted file mode 100644 index 5aa2c1c007..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c +++ /dev/null @@ -1,279 +0,0 @@ -/* Quad-precision floating point argument reduction. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* - * Table of constants for 2/pi, 5628 hexadecimal digits of 2/pi - */ -static const int32_t two_over_pi[] = { -0xa2f983, 0x6e4e44, 0x1529fc, 0x2757d1, 0xf534dd, 0xc0db62, -0x95993c, 0x439041, 0xfe5163, 0xabdebb, 0xc561b7, 0x246e3a, -0x424dd2, 0xe00649, 0x2eea09, 0xd1921c, 0xfe1deb, 0x1cb129, -0xa73ee8, 0x8235f5, 0x2ebb44, 0x84e99c, 0x7026b4, 0x5f7e41, -0x3991d6, 0x398353, 0x39f49c, 0x845f8b, 0xbdf928, 0x3b1ff8, -0x97ffde, 0x05980f, 0xef2f11, 0x8b5a0a, 0x6d1f6d, 0x367ecf, -0x27cb09, 0xb74f46, 0x3f669e, 0x5fea2d, 0x7527ba, 0xc7ebe5, -0xf17b3d, 0x0739f7, 0x8a5292, 0xea6bfb, 0x5fb11f, 0x8d5d08, -0x560330, 0x46fc7b, 0x6babf0, 0xcfbc20, 0x9af436, 0x1da9e3, -0x91615e, 0xe61b08, 0x659985, 0x5f14a0, 0x68408d, 0xffd880, -0x4d7327, 0x310606, 0x1556ca, 0x73a8c9, 0x60e27b, 0xc08c6b, -0x47c419, 0xc367cd, 0xdce809, 0x2a8359, 0xc4768b, 0x961ca6, -0xddaf44, 0xd15719, 0x053ea5, 0xff0705, 0x3f7e33, 0xe832c2, -0xde4f98, 0x327dbb, 0xc33d26, 0xef6b1e, 0x5ef89f, 0x3a1f35, -0xcaf27f, 0x1d87f1, 0x21907c, 0x7c246a, 0xfa6ed5, 0x772d30, -0x433b15, 0xc614b5, 0x9d19c3, 0xc2c4ad, 0x414d2c, 0x5d000c, -0x467d86, 0x2d71e3, 0x9ac69b, 0x006233, 0x7cd2b4, 0x97a7b4, -0xd55537, 0xf63ed7, 0x1810a3, 0xfc764d, 0x2a9d64, 0xabd770, -0xf87c63, 0x57b07a, 0xe71517, 0x5649c0, 0xd9d63b, 0x3884a7, -0xcb2324, 0x778ad6, 0x23545a, 0xb91f00, 0x1b0af1, 0xdfce19, -0xff319f, 0x6a1e66, 0x615799, 0x47fbac, 0xd87f7e, 0xb76522, -0x89e832, 0x60bfe6, 0xcdc4ef, 0x09366c, 0xd43f5d, 0xd7de16, -0xde3b58, 0x929bde, 0x2822d2, 0xe88628, 0x4d58e2, 0x32cac6, -0x16e308, 0xcb7de0, 0x50c017, 0xa71df3, 0x5be018, 0x34132e, -0x621283, 0x014883, 0x5b8ef5, 0x7fb0ad, 0xf2e91e, 0x434a48, -0xd36710, 0xd8ddaa, 0x425fae, 0xce616a, 0xa4280a, 0xb499d3, -0xf2a606, 0x7f775c, 0x83c2a3, 0x883c61, 0x78738a, 0x5a8caf, -0xbdd76f, 0x63a62d, 0xcbbff4, 0xef818d, 0x67c126, 0x45ca55, -0x36d9ca, 0xd2a828, 0x8d61c2, 0x77c912, 0x142604, 0x9b4612, -0xc459c4, 0x44c5c8, 0x91b24d, 0xf31700, 0xad43d4, 0xe54929, -0x10d5fd, 0xfcbe00, 0xcc941e, 0xeece70, 0xf53e13, 0x80f1ec, -0xc3e7b3, 0x28f8c7, 0x940593, 0x3e71c1, 0xb3092e, 0xf3450b, -0x9c1288, 0x7b20ab, 0x9fb52e, 0xc29247, 0x2f327b, 0x6d550c, -0x90a772, 0x1fe76b, 0x96cb31, 0x4a1679, 0xe27941, 0x89dff4, -0x9794e8, 0x84e6e2, 0x973199, 0x6bed88, 0x365f5f, 0x0efdbb, -0xb49a48, 0x6ca467, 0x427271, 0x325d8d, 0xb8159f, 0x09e5bc, -0x25318d, 0x3974f7, 0x1c0530, 0x010c0d, 0x68084b, 0x58ee2c, -0x90aa47, 0x02e774, 0x24d6bd, 0xa67df7, 0x72486e, 0xef169f, -0xa6948e, 0xf691b4, 0x5153d1, 0xf20acf, 0x339820, 0x7e4bf5, -0x6863b2, 0x5f3edd, 0x035d40, 0x7f8985, 0x295255, 0xc06437, -0x10d86d, 0x324832, 0x754c5b, 0xd4714e, 0x6e5445, 0xc1090b, -0x69f52a, 0xd56614, 0x9d0727, 0x50045d, 0xdb3bb4, 0xc576ea, -0x17f987, 0x7d6b49, 0xba271d, 0x296996, 0xacccc6, 0x5414ad, -0x6ae290, 0x89d988, 0x50722c, 0xbea404, 0x940777, 0x7030f3, -0x27fc00, 0xa871ea, 0x49c266, 0x3de064, 0x83dd97, 0x973fa3, -0xfd9443, 0x8c860d, 0xde4131, 0x9d3992, 0x8c70dd, 0xe7b717, -0x3bdf08, 0x2b3715, 0xa0805c, 0x93805a, 0x921110, 0xd8e80f, -0xaf806c, 0x4bffdb, 0x0f9038, 0x761859, 0x15a562, 0xbbcb61, -0xb989c7, 0xbd4010, 0x04f2d2, 0x277549, 0xf6b6eb, 0xbb22db, -0xaa140a, 0x2f2689, 0x768364, 0x333b09, 0x1a940e, 0xaa3a51, -0xc2a31d, 0xaeedaf, 0x12265c, 0x4dc26d, 0x9c7a2d, 0x9756c0, -0x833f03, 0xf6f009, 0x8c402b, 0x99316d, 0x07b439, 0x15200c, -0x5bc3d8, 0xc492f5, 0x4badc6, 0xa5ca4e, 0xcd37a7, 0x36a9e6, -0x9492ab, 0x6842dd, 0xde6319, 0xef8c76, 0x528b68, 0x37dbfc, -0xaba1ae, 0x3115df, 0xa1ae00, 0xdafb0c, 0x664d64, 0xb705ed, -0x306529, 0xbf5657, 0x3aff47, 0xb9f96a, 0xf3be75, 0xdf9328, -0x3080ab, 0xf68c66, 0x15cb04, 0x0622fa, 0x1de4d9, 0xa4b33d, -0x8f1b57, 0x09cd36, 0xe9424e, 0xa4be13, 0xb52333, 0x1aaaf0, -0xa8654f, 0xa5c1d2, 0x0f3f0b, 0xcd785b, 0x76f923, 0x048b7b, -0x721789, 0x53a6c6, 0xe26e6f, 0x00ebef, 0x584a9b, 0xb7dac4, -0xba66aa, 0xcfcf76, 0x1d02d1, 0x2df1b1, 0xc1998c, 0x77adc3, -0xda4886, 0xa05df7, 0xf480c6, 0x2ff0ac, 0x9aecdd, 0xbc5c3f, -0x6dded0, 0x1fc790, 0xb6db2a, 0x3a25a3, 0x9aaf00, 0x9353ad, -0x0457b6, 0xb42d29, 0x7e804b, 0xa707da, 0x0eaa76, 0xa1597b, -0x2a1216, 0x2db7dc, 0xfde5fa, 0xfedb89, 0xfdbe89, 0x6c76e4, -0xfca906, 0x70803e, 0x156e85, 0xff87fd, 0x073e28, 0x336761, -0x86182a, 0xeabd4d, 0xafe7b3, 0x6e6d8f, 0x396795, 0x5bbf31, -0x48d784, 0x16df30, 0x432dc7, 0x356125, 0xce70c9, 0xb8cb30, -0xfd6cbf, 0xa200a4, 0xe46c05, 0xa0dd5a, 0x476f21, 0xd21262, -0x845cb9, 0x496170, 0xe0566b, 0x015299, 0x375550, 0xb7d51e, -0xc4f133, 0x5f6e13, 0xe4305d, 0xa92e85, 0xc3b21d, 0x3632a1, -0xa4b708, 0xd4b1ea, 0x21f716, 0xe4698f, 0x77ff27, 0x80030c, -0x2d408d, 0xa0cd4f, 0x99a520, 0xd3a2b3, 0x0a5d2f, 0x42f9b4, -0xcbda11, 0xd0be7d, 0xc1db9b, 0xbd17ab, 0x81a2ca, 0x5c6a08, -0x17552e, 0x550027, 0xf0147f, 0x8607e1, 0x640b14, 0x8d4196, -0xdebe87, 0x2afdda, 0xb6256b, 0x34897b, 0xfef305, 0x9ebfb9, -0x4f6a68, 0xa82a4a, 0x5ac44f, 0xbcf82d, 0x985ad7, 0x95c7f4, -0x8d4d0d, 0xa63a20, 0x5f57a4, 0xb13f14, 0x953880, 0x0120cc, -0x86dd71, 0xb6dec9, 0xf560bf, 0x11654d, 0x6b0701, 0xacb08c, -0xd0c0b2, 0x485551, 0x0efb1e, 0xc37295, 0x3b06a3, 0x3540c0, -0x7bdc06, 0xcc45e0, 0xfa294e, 0xc8cad6, 0x41f3e8, 0xde647c, -0xd8649b, 0x31bed9, 0xc397a4, 0xd45877, 0xc5e369, 0x13daf0, -0x3c3aba, 0x461846, 0x5f7555, 0xf5bdd2, 0xc6926e, 0x5d2eac, -0xed440e, 0x423e1c, 0x87c461, 0xe9fd29, 0xf3d6e7, 0xca7c22, -0x35916f, 0xc5e008, 0x8dd7ff, 0xe26a6e, 0xc6fdb0, 0xc10893, -0x745d7c, 0xb2ad6b, 0x9d6ecd, 0x7b723e, 0x6a11c6, 0xa9cff7, -0xdf7329, 0xbac9b5, 0x5100b7, 0x0db2e2, 0x24ba74, 0x607de5, -0x8ad874, 0x2c150d, 0x0c1881, 0x94667e, 0x162901, 0x767a9f, -0xbefdfd, 0xef4556, 0x367ed9, 0x13d9ec, 0xb9ba8b, 0xfc97c4, -0x27a831, 0xc36ef1, 0x36c594, 0x56a8d8, 0xb5a8b4, 0x0ecccf, -0x2d8912, 0x34576f, 0x89562c, 0xe3ce99, 0xb920d6, 0xaa5e6b, -0x9c2a3e, 0xcc5f11, 0x4a0bfd, 0xfbf4e1, 0x6d3b8e, 0x2c86e2, -0x84d4e9, 0xa9b4fc, 0xd1eeef, 0xc9352e, 0x61392f, 0x442138, -0xc8d91b, 0x0afc81, 0x6a4afb, 0xd81c2f, 0x84b453, 0x8c994e, -0xcc2254, 0xdc552a, 0xd6c6c0, 0x96190b, 0xb8701a, 0x649569, -0x605a26, 0xee523f, 0x0f117f, 0x11b5f4, 0xf5cbfc, 0x2dbc34, -0xeebc34, 0xcc5de8, 0x605edd, 0x9b8e67, 0xef3392, 0xb817c9, -0x9b5861, 0xbc57e1, 0xc68351, 0x103ed8, 0x4871dd, 0xdd1c2d, -0xa118af, 0x462c21, 0xd7f359, 0x987ad9, 0xc0549e, 0xfa864f, -0xfc0656, 0xae79e5, 0x362289, 0x22ad38, 0xdc9367, 0xaae855, -0x382682, 0x9be7ca, 0xa40d51, 0xb13399, 0x0ed7a9, 0x480569, -0xf0b265, 0xa7887f, 0x974c88, 0x36d1f9, 0xb39221, 0x4a827b, -0x21cf98, 0xdc9f40, 0x5547dc, 0x3a74e1, 0x42eb67, 0xdf9dfe, -0x5fd45e, 0xa4677b, 0x7aacba, 0xa2f655, 0x23882b, 0x55ba41, -0x086e59, 0x862a21, 0x834739, 0xe6e389, 0xd49ee5, 0x40fb49, -0xe956ff, 0xca0f1c, 0x8a59c5, 0x2bfa94, 0xc5c1d3, 0xcfc50f, -0xae5adb, 0x86c547, 0x624385, 0x3b8621, 0x94792c, 0x876110, -0x7b4c2a, 0x1a2c80, 0x12bf43, 0x902688, 0x893c78, 0xe4c4a8, -0x7bdbe5, 0xc23ac4, 0xeaf426, 0x8a67f7, 0xbf920d, 0x2ba365, -0xb1933d, 0x0b7cbd, 0xdc51a4, 0x63dd27, 0xdde169, 0x19949a, -0x9529a8, 0x28ce68, 0xb4ed09, 0x209f44, 0xca984e, 0x638270, -0x237c7e, 0x32b90f, 0x8ef5a7, 0xe75614, 0x08f121, 0x2a9db5, -0x4d7e6f, 0x5119a5, 0xabf9b5, 0xd6df82, 0x61dd96, 0x023616, -0x9f3ac4, 0xa1a283, 0x6ded72, 0x7a8d39, 0xa9b882, 0x5c326b, -0x5b2746, 0xed3400, 0x7700d2, 0x55f4fc, 0x4d5901, 0x8071e0, -0xe13f89, 0xb295f3, 0x64a8f1, 0xaea74b, 0x38fc4c, 0xeab2bb, -0x47270b, 0xabc3a7, 0x34ba60, 0x52dd34, 0xf8563a, 0xeb7e8a, -0x31bb36, 0x5895b7, 0x47f7a9, 0x94c3aa, 0xd39225, 0x1e7f3e, -0xd8974e, 0xbba94f, 0xd8ae01, 0xe661b4, 0x393d8e, 0xa523aa, -0x33068e, 0x1633b5, 0x3bb188, 0x1d3a9d, 0x4013d0, 0xcc1be5, -0xf862e7, 0x3bf28f, 0x39b5bf, 0x0bc235, 0x22747e, 0xa247c0, -0xd52d1f, 0x19add3, 0x9094df, 0x9311d0, 0xb42b25, 0x496db2, -0xe264b2, 0x5ef135, 0x3bc6a4, 0x1a4ad0, 0xaac92e, 0x64e886, -0x573091, 0x982cfb, 0x311b1a, 0x08728b, 0xbdcee1, 0x60e142, -0xeb641d, 0xd0bba3, 0xe559d4, 0x597b8c, 0x2a4483, 0xf332ba, -0xf84867, 0x2c8d1b, 0x2fa9b0, 0x50f3dd, 0xf9f573, 0xdb61b4, -0xfe233e, 0x6c41a6, 0xeea318, 0x775a26, 0xbc5e5c, 0xcea708, -0x94dc57, 0xe20196, 0xf1e839, 0xbe4851, 0x5d2d2f, 0x4e9555, -0xd96ec2, 0xe7d755, 0x6304e0, 0xc02e0e, 0xfc40a0, 0xbbf9b3, -0x7125a7, 0x222dfb, 0xf619d8, 0x838c1c, 0x6619e6, 0xb20d55, -0xbb5137, 0x79e809, 0xaf9149, 0x0d73de, 0x0b0da5, 0xce7f58, -0xac1934, 0x724667, 0x7a1a13, 0x9e26bc, 0x4555e7, 0x585cb5, -0x711d14, 0x486991, 0x480d60, 0x56adab, 0xd62f64, 0x96ee0c, -0x212ff3, 0x5d6d88, 0xa67684, 0x95651e, 0xab9e0a, 0x4ddefe, -0x571010, 0x836a39, 0xf8ea31, 0x9e381d, 0xeac8b1, 0xcac96b, -0x37f21e, 0xd505e9, 0x984743, 0x9fc56c, 0x0331b7, 0x3b8bf8, -0x86e56a, 0x8dc343, 0x6230e7, 0x93cfd5, 0x6a8f2d, 0x733005, -0x1af021, 0xa09fcb, 0x7415a1, 0xd56b23, 0x6ff725, 0x2f4bc7, -0xb8a591, 0x7fac59, 0x5c55de, 0x212c38, 0xb13296, 0x5cff50, -0x366262, 0xfa7b16, 0xf4d9a6, 0x2acfe7, 0xf07403, 0xd4d604, -0x6fd916, 0x31b1bf, 0xcbb450, 0x5bd7c8, 0x0ce194, 0x6bd643, -0x4fd91c, 0xdf4543, 0x5f3453, 0xe2b5aa, 0xc9aec8, 0x131485, -0xf9d2bf, 0xbadb9e, 0x76f5b9, 0xaf15cf, 0xca3182, 0x14b56d, -0xe9fe4d, 0x50fc35, 0xf5aed5, 0xa2d0c1, 0xc96057, 0x192eb6, -0xe91d92, 0x07d144, 0xaea3c6, 0x343566, 0x26d5b4, 0x3161e2, -0x37f1a2, 0x209eff, 0x958e23, 0x493798, 0x35f4a6, 0x4bdc02, -0xc2be13, 0xbe80a0, 0x0b72a3, 0x115c5f, 0x1e1bd1, 0x0db4d3, -0x869e85, 0x96976b, 0x2ac91f, 0x8a26c2, 0x3070f0, 0x041412, -0xfc9fa5, 0xf72a38, 0x9c6878, 0xe2aa76, 0x50cfe1, 0x559274, -0x934e38, 0x0a92f7, 0x5533f0, 0xa63db4, 0x399971, 0xe2b755, -0xa98a7c, 0x008f19, 0xac54d2, 0x2ea0b4, 0xf5f3e0, 0x60c849, -0xffd269, 0xae52ce, 0x7a5fdd, 0xe9ce06, 0xfb0ae8, 0xa50cce, -0xea9d3e, 0x3766dd, 0xb834f5, 0x0da090, 0x846f88, 0x4ae3d5, -0x099a03, 0x2eae2d, 0xfcb40a, 0xfb9b33, 0xe281dd, 0x1b16ba, -0xd8c0af, 0xd96b97, 0xb52dc9, 0x9c277f, 0x5951d5, 0x21ccd6, -0xb6496b, 0x584562, 0xb3baf2, 0xa1a5c4, 0x7ca2cf, 0xa9b93d, -0x7b7b89, 0x483d38, -}; - -static const long double c[] = { -/* 106 bits of pi/2 */ -#define PI_2_1 c[0] - 0x1.921fb54442d18469898cc517018p+0L, - -/* pi/2 - PI_2_1 */ -#define PI_2_1t c[1] - 0x3.839a252049c1114cf98e804178p-108L, -}; - -int32_t __ieee754_rem_pio2l(long double x, long double *y) -{ - long double z, w, t; - double tx[8]; - int exp; - int64_t n, ix, hx, ixd; - u_int64_t lxd; - double xhi; - - xhi = ldbl_high (x); - EXTRACT_WORDS64 (hx, xhi); - ix = hx & 0x7fffffffffffffffLL; - if (ix <= 0x3fe921fb54442d10LL) /* x in <-pi/4, pi/4> */ - { - y[0] = x; - y[1] = 0; - return 0; - } - - if (ix < 0x4002d97c7f3321d0LL) /* |x| in 0) - { - /* 106 + 106 bit PI is ok */ - z = x - PI_2_1; - y[0] = z - PI_2_1t; - y[1] = (z - y[0]) - PI_2_1t; - return 1; - } - else - { - /* 106 + 106 bit PI is ok */ - z = x + PI_2_1; - y[0] = z + PI_2_1t; - y[1] = (z - y[0]) + PI_2_1t; - return -1; - } - } - - if (ix >= 0x7ff0000000000000LL) /* x is +=oo or NaN */ - { - y[0] = x - x; - y[1] = y[0]; - return 0; - } - - /* Handle large arguments. - We split the 113 bits of the mantissa into 5 24bit integers - stored in a double array. */ - /* Make the IBM extended format 105 bit mantissa look like the ieee854 112 - bit mantissa so the next operation will give the correct result. */ - ldbl_extract_mantissa (&ixd, &lxd, &exp, x); - exp = exp - 23; - /* This is faster than doing this in floating point, because we - have to convert it to integers anyway and like this we can keep - both integer and floating point units busy. */ - tx [0] = (double)(((ixd >> 25) & 0x7fffff) | 0x800000); - tx [1] = (double)((ixd >> 1) & 0xffffff); - tx [2] = (double)(((ixd << 23) | (lxd >> 41)) & 0xffffff); - tx [3] = (double)((lxd >> 17) & 0xffffff); - tx [4] = (double)((lxd << 7) & 0xffffff); - - n = __kernel_rem_pio2 (tx, tx + 5, exp, ((lxd << 7) & 0xffffff) ? 5 : 4, - 3, two_over_pi); - - /* The result is now stored in 3 double values, we need to convert it into - two long double values. */ - t = (long double) tx [6] + (long double) tx [7]; - w = (long double) tx [5]; - - if (hx >= 0) - { - y[0] = w + t; - y[1] = t - (y[0] - w); - return n; - } - else - { - y[0] = -(w + t); - y[1] = -t - (y[0] + w); - return -n; - } -} diff --git a/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c b/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c deleted file mode 100644 index 68b8fb3519..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c +++ /dev/null @@ -1,81 +0,0 @@ -/* e_fmodl.c -- long double version of e_fmod.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_remainderl(x,p) - * Return : - * returns x REM p = x - [x/p]*p as if in infinite - * precise arithmetic, where [x/p] is the (infinite bit) - * integer nearest x/p (in half way case choose the even one). - * Method : - * Based on fmodl() return x-[x/p]chopped*p exactlp. - */ - -#include -#include - -static const long double zero = 0.0L; - - -long double -__ieee754_remainderl(long double x, long double p) -{ - int64_t hx,hp; - u_int64_t sx,lx,lp; - long double p_half; - double xhi, xlo, phi, plo; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - EXTRACT_WORDS64 (lx, xlo); - ldbl_unpack (p, &phi, &plo); - EXTRACT_WORDS64 (hp, phi); - EXTRACT_WORDS64 (lp, plo); - sx = hx&0x8000000000000000ULL; - lp ^= hp & 0x8000000000000000ULL; - hp &= 0x7fffffffffffffffLL; - lx ^= sx; - hx &= 0x7fffffffffffffffLL; - if (lp == 0x8000000000000000ULL) - lp = 0; - if (lx == 0x8000000000000000ULL) - lx = 0; - - /* purge off exception values */ - if(hp==0) return (x*p)/(x*p); /* p = 0 */ - if((hx>=0x7ff0000000000000LL)|| /* x not finite */ - (hp>0x7ff0000000000000LL)) /* p is NaN */ - return (x*p)/(x*p); - - - if (hp<=0x7fdfffffffffffffLL) x = __ieee754_fmodl(x,p+p); /* now x < 2p */ - if (((hx-hp)|(lx-lp))==0) return zero*x; - x = fabsl(x); - p = fabsl(p); - if (hp<0x0020000000000000LL) { - if(x+x>p) { - x-=p; - if(x+x>=p) x -= p; - } - } else { - p_half = 0.5L*p; - if(x>p_half) { - x-=p; - if(x>=p_half) x -= p; - } - } - if (sx) - x = -x; - return x; -} -strong_alias (__ieee754_remainderl, __remainderl_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c b/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c deleted file mode 100644 index 67d9d24ce7..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - - -/* __ieee754_sinh(x) - * Method : - * mathematically sinh(x) if defined to be (exp(x)-exp(-x))/2 - * 1. Replace x by |x| (sinh(-x) = -sinh(x)). - * 2. - * E + E/(E+1) - * 0 <= x <= 40 : sinh(x) := --------------, E=expm1(x) - * 2 - * - * 40 <= x <= lnovft : sinh(x) := exp(x)/2 - * lnovft <= x <= ln2ovft: sinh(x) := exp(x/2)/2 * exp(x/2) - * ln2ovft < x : sinh(x) := x*shuge (overflow) - * - * Special cases: - * sinh(x) is |x| if x is +INF, -INF, or NaN. - * only sinh(0)=0 is exact for finite x. - */ - -#include -#include -#include - -static const long double one = 1.0, shuge = 1.0e307; - -long double -__ieee754_sinhl(long double x) -{ - long double t,w,h; - int64_t ix,jx; - double xhi; - - /* High word of |x|. */ - xhi = ldbl_high (x); - EXTRACT_WORDS64 (jx, xhi); - ix = jx&0x7fffffffffffffffLL; - - /* x is INF or NaN */ - if(ix>=0x7ff0000000000000LL) return x+x; - - h = 0.5; - if (jx<0) h = -h; - /* |x| in [0,40], return sign(x)*0.5*(E+E/(E+1))) */ - if (ix < 0x4044000000000000LL) { /* |x|<40 */ - if (ix<0x3c90000000000000LL) { /* |x|<2**-54 */ - math_check_force_underflow (x); - if(shuge+x>one) return x;/* sinhl(tiny) = tiny with inexact */ - } - t = __expm1l(fabsl(x)); - if(ix<0x3ff0000000000000LL) return h*(2.0*t-t*t/(t+one)); - w = t/(t+one); - return h*(t+w); - } - - /* |x| in [40, log(maxdouble)] return 0.5*exp(|x|) */ - if (ix < 0x40862e42fefa39efLL) return h*__ieee754_expl(fabsl(x)); - - /* |x| in [log(maxdouble), overflowthresold] */ - if (ix <= 0x408633ce8fb9f87eLL) { - w = __ieee754_expl(0.5*fabsl(x)); - t = h*w; - return t*w; - } - - /* |x| > overflowthresold, sinh(x) overflow */ - return x*shuge; -} -strong_alias (__ieee754_sinhl, __sinhl_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c b/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c deleted file mode 100644 index 8089090533..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ -/*********************************************************************/ -/* MODULE_NAME: uroot.c */ -/* */ -/* FUNCTION: usqrt */ -/* */ -/* FILES NEEDED: dla.h endian.h mydefs.h uroot.h */ -/* uroot.tbl */ -/* */ -/* An ultimate sqrt routine. Given an IEEE double machine number x */ -/* it computes the correctly rounded (to nearest) value of square */ -/* root of x. */ -/* Assumption: Machine arithmetic operations are performed in */ -/* round to nearest mode of IEEE 754 standard. */ -/* */ -/*********************************************************************/ - -#include - -typedef union {int64_t i[2]; long double x; double d[2]; } mynumber; - -static const double - t512 = 0x1p512, - tm256 = 0x1p-256, - two54 = 0x1p54, /* 0x4350000000000000 */ - twom54 = 0x1p-54; /* 0x3C90000000000000 */ - -/*********************************************************************/ -/* An ultimate sqrt routine. Given an IEEE double machine number x */ -/* it computes the correctly rounded (to nearest) value of square */ -/* root of x. */ -/*********************************************************************/ -long double __ieee754_sqrtl(long double x) -{ - static const long double big = 134217728.0, big1 = 134217729.0; - long double t,s,i; - mynumber a,c; - uint64_t k, l; - int64_t m, n; - double d; - - a.x=x; - k=a.i[0] & INT64_C(0x7fffffffffffffff); - /*----------------- 2^-1022 <= | x |< 2^1024 -----------------*/ - if (k>INT64_C(0x000fffff00000000) && k> 53; - m = (a.i[1] >> 52) & 0x7ff; - if (m == 0) { - a.d[1] *= two54; - m = ((a.i[1] >> 52) & 0x7ff) - 54; - } - m += n; - if (m > 0) - a.i[1] = (a.i[1] & INT64_C(0x800fffffffffffff)) | (m << 52); - else if (m <= -54) { - a.i[1] &= INT64_C(0x8000000000000000); - } else { - m += 54; - a.i[1] = (a.i[1] & INT64_C(0x800fffffffffffff)) | (m << 52); - a.d[1] *= twom54; - } - } - a.i[0] = l; - s = a.x; - d = __ieee754_sqrt (a.d[0]); - c.i[0] = INT64_C(0x2000000000000000)+((k&INT64_C(0x7fe0000000000000))>>1); - c.i[1] = 0; - i = d; - t = 0.5L * (i + s / i); - i = 0.5L * (t + s / t); - return c.x * i; - } - else { - if (k>=INT64_C(0x7ff0000000000000)) - /* sqrt (-Inf) = NaN, sqrt (NaN) = NaN, sqrt (+Inf) = +Inf. */ - return x * x + x; - if (x == 0) return x; - if (x < 0) return (big1-big1)/(big-big); - return tm256*__ieee754_sqrtl(x*t512); - } -} -strong_alias (__ieee754_sqrtl, __sqrtl_finite) diff --git a/sysdeps/ieee754/ldbl-128ibm/gamma_productl.c b/sysdeps/ieee754/ldbl-128ibm/gamma_productl.c deleted file mode 100644 index 7e71cb008a..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/gamma_productl.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Compute a product of X, X+1, ..., with an error estimate. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Compute the product of X + X_EPS, X + X_EPS + 1, ..., X + X_EPS + N - - 1, in the form R * (1 + *EPS) where the return value R is an - approximation to the product and *EPS is set to indicate the - approximate error in the return value. X is such that all the - values X + 1, ..., X + N - 1 are exactly representable, and X_EPS / - X is small enough that factors quadratic in it can be - neglected. */ - -long double -__gamma_productl (long double x, long double x_eps, int n, long double *eps) -{ - long double ret = x; - *eps = x_eps / x; - for (int i = 1; i < n; i++) - { - *eps += x_eps / (x + i); - ret *= x + i; - /* FIXME: no error estimates for the multiplication. */ - } - return ret; -} diff --git a/sysdeps/ieee754/ldbl-128ibm/ieee754.h b/sysdeps/ieee754/ldbl-128ibm/ieee754.h deleted file mode 100644 index 7e31128996..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/ieee754.h +++ /dev/null @@ -1,133 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _IEEE754_H - -#define _IEEE754_H 1 -#include - -#include - -__BEGIN_DECLS - -union ieee754_float - { - float f; - - /* This is the IEEE 754 single-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int mantissa:23; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:23; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int quiet_nan:1; - unsigned int mantissa:22; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:22; - unsigned int quiet_nan:1; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee_nan; - }; - -#define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */ - - -union ieee754_double - { - double d; - - /* This is the IEEE 754 double-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:20; - unsigned int mantissa1:32; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - unsigned int quiet_nan:1; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:19; - unsigned int mantissa1:32; -#else - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; -#endif - } ieee_nan; - }; - -#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */ - - -/* IBM extended format for long double. - - Each long double is made up of two IEEE doubles. The value of the - long double is the sum of the values of the two parts. The most - significant part is required to be the value of the long double - rounded to the nearest double, as specified by IEEE. For Inf - values, the least significant part is required to be one of +0.0 or - -0.0. No other requirements are made; so, for example, 1.0 may be - represented as (1.0, +0.0) or (1.0, -0.0), and the low part of a - NaN is don't-care. */ - -union ibm_extended_long_double - { - long double ld; - union ieee754_double d[2]; - }; - -__END_DECLS - -#endif /* ieee754.h */ diff --git a/sysdeps/ieee754/ldbl-128ibm/include/bits/iscanonical.h b/sysdeps/ieee754/ldbl-128ibm/include/bits/iscanonical.h deleted file mode 100644 index bee080bd29..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/include/bits/iscanonical.h +++ /dev/null @@ -1,5 +0,0 @@ -#include_next - -#ifndef _ISOMAC -libm_hidden_proto (__iscanonicall) -#endif diff --git a/sysdeps/ieee754/ldbl-128ibm/k_cosl.c b/sysdeps/ieee754/ldbl-128ibm/k_cosl.c deleted file mode 100644 index 0010d6274a..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/k_cosl.c +++ /dev/null @@ -1,153 +0,0 @@ -/* Quad-precision floating point cosine on <-pi/4,pi/4>. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -static const long double c[] = { -#define ONE c[0] - 1.00000000000000000000000000000000000E+00L, /* 3fff0000000000000000000000000000 */ - -/* cos x ~ ONE + x^2 ( SCOS1 + SCOS2 * x^2 + ... + SCOS4 * x^6 + SCOS5 * x^8 ) - x in <0,1/256> */ -#define SCOS1 c[1] -#define SCOS2 c[2] -#define SCOS3 c[3] -#define SCOS4 c[4] -#define SCOS5 c[5] --5.00000000000000000000000000000000000E-01L, /* bffe0000000000000000000000000000 */ - 4.16666666666666666666666666556146073E-02L, /* 3ffa5555555555555555555555395023 */ --1.38888888888888888888309442601939728E-03L, /* bff56c16c16c16c16c16a566e42c0375 */ - 2.48015873015862382987049502531095061E-05L, /* 3fefa01a01a019ee02dcf7da2d6d5444 */ --2.75573112601362126593516899592158083E-07L, /* bfe927e4f5dce637cb0b54908754bde0 */ - -/* cos x ~ ONE + x^2 ( COS1 + COS2 * x^2 + ... + COS7 * x^12 + COS8 * x^14 ) - x in <0,0.1484375> */ -#define COS1 c[6] -#define COS2 c[7] -#define COS3 c[8] -#define COS4 c[9] -#define COS5 c[10] -#define COS6 c[11] -#define COS7 c[12] -#define COS8 c[13] --4.99999999999999999999999999999999759E-01L, /* bffdfffffffffffffffffffffffffffb */ - 4.16666666666666666666666666651287795E-02L, /* 3ffa5555555555555555555555516f30 */ --1.38888888888888888888888742314300284E-03L, /* bff56c16c16c16c16c16c16a463dfd0d */ - 2.48015873015873015867694002851118210E-05L, /* 3fefa01a01a01a01a0195cebe6f3d3a5 */ --2.75573192239858811636614709689300351E-07L, /* bfe927e4fb7789f5aa8142a22044b51f */ - 2.08767569877762248667431926878073669E-09L, /* 3fe21eed8eff881d1e9262d7adff4373 */ --1.14707451049343817400420280514614892E-11L, /* bfda9397496922a9601ed3d4ca48944b */ - 4.77810092804389587579843296923533297E-14L, /* 3fd2ae5f8197cbcdcaf7c3fb4523414c */ - -/* sin x ~ ONE * x + x^3 ( SSIN1 + SSIN2 * x^2 + ... + SSIN4 * x^6 + SSIN5 * x^8 ) - x in <0,1/256> */ -#define SSIN1 c[14] -#define SSIN2 c[15] -#define SSIN3 c[16] -#define SSIN4 c[17] -#define SSIN5 c[18] --1.66666666666666666666666666666666659E-01L, /* bffc5555555555555555555555555555 */ - 8.33333333333333333333333333146298442E-03L, /* 3ff81111111111111111111110fe195d */ --1.98412698412698412697726277416810661E-04L, /* bff2a01a01a01a01a019e7121e080d88 */ - 2.75573192239848624174178393552189149E-06L, /* 3fec71de3a556c640c6aaa51aa02ab41 */ --2.50521016467996193495359189395805639E-08L, /* bfe5ae644ee90c47dc71839de75b2787 */ -}; - -#define SINCOSL_COS_HI 0 -#define SINCOSL_COS_LO 1 -#define SINCOSL_SIN_HI 2 -#define SINCOSL_SIN_LO 3 -extern const long double __sincosl_table[]; - -long double -__kernel_cosl(long double x, long double y) -{ - long double h, l, z, sin_l, cos_l_m1; - int64_t ix; - uint32_t tix, hix, index; - double xhi, hhi; - - xhi = ldbl_high (x); - EXTRACT_WORDS64 (ix, xhi); - tix = ((u_int64_t)ix) >> 32; - tix &= ~0x80000000; /* tix = |x|'s high 32 bits */ - if (tix < 0x3fc30000) /* |x| < 0.1484375 */ - { - /* Argument is small enough to approximate it by a Chebyshev - polynomial of degree 16. */ - if (tix < 0x3c600000) /* |x| < 2^-57 */ - if (!((int)x)) return ONE; /* generate inexact */ - z = x * x; - return ONE + (z*(COS1+z*(COS2+z*(COS3+z*(COS4+ - z*(COS5+z*(COS6+z*(COS7+z*COS8)))))))); - } - else - { - /* So that we don't have to use too large polynomial, we find - l and h such that x = l + h, where fabsl(l) <= 1.0/256 with 83 - possible values for h. We look up cosl(h) and sinl(h) in - pre-computed tables, compute cosl(l) and sinl(l) using a - Chebyshev polynomial of degree 10(11) and compute - cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l). */ - int six = tix; - tix = ((six - 0x3ff00000) >> 4) + 0x3fff0000; - index = 0x3ffe - (tix >> 16); - hix = (tix + (0x200 << index)) & (0xfffffc00 << index); - x = fabsl (x); - switch (index) - { - case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break; - case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break; - default: - case 2: index = (hix - 0x3ffc3000) >> 10; break; - } - hix = (hix << 4) & 0x3fffffff; -/* - The following should work for double but generates the wrong index. - For now the code above converts double to ieee extended to compute - the index back to double for the h value. - - index = 0x3fe - (tix >> 20); - hix = (tix + (0x200 << index)) & (0xfffffc00 << index); - if (signbit (x)) - { - x = -x; - y = -y; - } - switch (index) - { - case 0: index = ((45 << 14) + hix - 0x3fe00000) >> 12; break; - case 1: index = ((13 << 15) + hix - 0x3fd00000) >> 13; break; - default: - case 2: index = (hix - 0x3fc30000) >> 14; break; - } -*/ - INSERT_WORDS64 (hhi, ((uint64_t)hix) << 32); - h = hhi; - l = y - (h - x); - z = l * l; - sin_l = l*(ONE+z*(SSIN1+z*(SSIN2+z*(SSIN3+z*(SSIN4+z*SSIN5))))); - cos_l_m1 = z*(SCOS1+z*(SCOS2+z*(SCOS3+z*(SCOS4+z*SCOS5)))); - return __sincosl_table [index + SINCOSL_COS_HI] - + (__sincosl_table [index + SINCOSL_COS_LO] - - (__sincosl_table [index + SINCOSL_SIN_HI] * sin_l - - __sincosl_table [index + SINCOSL_COS_HI] * cos_l_m1)); - } -} diff --git a/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c b/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c deleted file mode 100644 index 14b0359c15..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c +++ /dev/null @@ -1,193 +0,0 @@ -/* Quad-precision floating point sine and cosine on <-pi/4,pi/4>. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const long double c[] = { -#define ONE c[0] - 1.00000000000000000000000000000000000E+00L, /* 3fff0000000000000000000000000000 */ - -/* cos x ~ ONE + x^2 ( SCOS1 + SCOS2 * x^2 + ... + SCOS4 * x^6 + SCOS5 * x^8 ) - x in <0,1/256> */ -#define SCOS1 c[1] -#define SCOS2 c[2] -#define SCOS3 c[3] -#define SCOS4 c[4] -#define SCOS5 c[5] --5.00000000000000000000000000000000000E-01L, /* bffe0000000000000000000000000000 */ - 4.16666666666666666666666666556146073E-02L, /* 3ffa5555555555555555555555395023 */ --1.38888888888888888888309442601939728E-03L, /* bff56c16c16c16c16c16a566e42c0375 */ - 2.48015873015862382987049502531095061E-05L, /* 3fefa01a01a019ee02dcf7da2d6d5444 */ --2.75573112601362126593516899592158083E-07L, /* bfe927e4f5dce637cb0b54908754bde0 */ - -/* cos x ~ ONE + x^2 ( COS1 + COS2 * x^2 + ... + COS7 * x^12 + COS8 * x^14 ) - x in <0,0.1484375> */ -#define COS1 c[6] -#define COS2 c[7] -#define COS3 c[8] -#define COS4 c[9] -#define COS5 c[10] -#define COS6 c[11] -#define COS7 c[12] -#define COS8 c[13] --4.99999999999999999999999999999999759E-01L, /* bffdfffffffffffffffffffffffffffb */ - 4.16666666666666666666666666651287795E-02L, /* 3ffa5555555555555555555555516f30 */ --1.38888888888888888888888742314300284E-03L, /* bff56c16c16c16c16c16c16a463dfd0d */ - 2.48015873015873015867694002851118210E-05L, /* 3fefa01a01a01a01a0195cebe6f3d3a5 */ --2.75573192239858811636614709689300351E-07L, /* bfe927e4fb7789f5aa8142a22044b51f */ - 2.08767569877762248667431926878073669E-09L, /* 3fe21eed8eff881d1e9262d7adff4373 */ --1.14707451049343817400420280514614892E-11L, /* bfda9397496922a9601ed3d4ca48944b */ - 4.77810092804389587579843296923533297E-14L, /* 3fd2ae5f8197cbcdcaf7c3fb4523414c */ - -/* sin x ~ ONE * x + x^3 ( SSIN1 + SSIN2 * x^2 + ... + SSIN4 * x^6 + SSIN5 * x^8 ) - x in <0,1/256> */ -#define SSIN1 c[14] -#define SSIN2 c[15] -#define SSIN3 c[16] -#define SSIN4 c[17] -#define SSIN5 c[18] --1.66666666666666666666666666666666659E-01L, /* bffc5555555555555555555555555555 */ - 8.33333333333333333333333333146298442E-03L, /* 3ff81111111111111111111110fe195d */ --1.98412698412698412697726277416810661E-04L, /* bff2a01a01a01a01a019e7121e080d88 */ - 2.75573192239848624174178393552189149E-06L, /* 3fec71de3a556c640c6aaa51aa02ab41 */ --2.50521016467996193495359189395805639E-08L, /* bfe5ae644ee90c47dc71839de75b2787 */ - -/* sin x ~ ONE * x + x^3 ( SIN1 + SIN2 * x^2 + ... + SIN7 * x^12 + SIN8 * x^14 ) - x in <0,0.1484375> */ -#define SIN1 c[19] -#define SIN2 c[20] -#define SIN3 c[21] -#define SIN4 c[22] -#define SIN5 c[23] -#define SIN6 c[24] -#define SIN7 c[25] -#define SIN8 c[26] --1.66666666666666666666666666666666538e-01L, /* bffc5555555555555555555555555550 */ - 8.33333333333333333333333333307532934e-03L, /* 3ff811111111111111111111110e7340 */ --1.98412698412698412698412534478712057e-04L, /* bff2a01a01a01a01a01a019e7a626296 */ - 2.75573192239858906520896496653095890e-06L, /* 3fec71de3a556c7338fa38527474b8f5 */ --2.50521083854417116999224301266655662e-08L, /* bfe5ae64567f544e16c7de65c2ea551f */ - 1.60590438367608957516841576404938118e-10L, /* 3fde6124613a811480538a9a41957115 */ --7.64716343504264506714019494041582610e-13L, /* bfd6ae7f3d5aef30c7bc660b060ef365 */ - 2.81068754939739570236322404393398135e-15L, /* 3fce9510115aabf87aceb2022a9a9180 */ -}; - -#define SINCOSL_COS_HI 0 -#define SINCOSL_COS_LO 1 -#define SINCOSL_SIN_HI 2 -#define SINCOSL_SIN_LO 3 -extern const long double __sincosl_table[]; - -void -__kernel_sincosl(long double x, long double y, long double *sinx, long double *cosx, int iy) -{ - long double h, l, z, sin_l, cos_l_m1; - int64_t ix; - uint32_t tix, hix, index; - double xhi, hhi; - - xhi = ldbl_high (x); - EXTRACT_WORDS64 (ix, xhi); - tix = ((uint64_t)ix) >> 32; - tix &= ~0x80000000; /* tix = |x|'s high 32 bits */ - if (tix < 0x3fc30000) /* |x| < 0.1484375 */ - { - /* Argument is small enough to approximate it by a Chebyshev - polynomial of degree 16(17). */ - if (tix < 0x3c600000) /* |x| < 2^-57 */ - { - math_check_force_underflow (x); - if (!((int)x)) /* generate inexact */ - { - *sinx = x; - *cosx = ONE; - return; - } - } - z = x * x; - *sinx = x + (x * (z*(SIN1+z*(SIN2+z*(SIN3+z*(SIN4+ - z*(SIN5+z*(SIN6+z*(SIN7+z*SIN8))))))))); - *cosx = ONE + (z*(COS1+z*(COS2+z*(COS3+z*(COS4+ - z*(COS5+z*(COS6+z*(COS7+z*COS8)))))))); - } - else - { - /* So that we don't have to use too large polynomial, we find - l and h such that x = l + h, where fabsl(l) <= 1.0/256 with 83 - possible values for h. We look up cosl(h) and sinl(h) in - pre-computed tables, compute cosl(l) and sinl(l) using a - Chebyshev polynomial of degree 10(11) and compute - sinl(h+l) = sinl(h)cosl(l) + cosl(h)sinl(l) and - cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l). */ - int six = tix; - tix = ((six - 0x3ff00000) >> 4) + 0x3fff0000; - index = 0x3ffe - (tix >> 16); - hix = (tix + (0x200 << index)) & (0xfffffc00 << index); - x = fabsl (x); - switch (index) - { - case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break; - case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break; - default: - case 2: index = (hix - 0x3ffc3000) >> 10; break; - } - hix = (hix << 4) & 0x3fffffff; -/* - The following should work for double but generates the wrong index. - For now the code above converts double to ieee extended to compute - the index back to double for the h value. - - - index = 0x3fe - (tix >> 20); - hix = (tix + (0x2000 << index)) & (0xffffc000 << index); - if (signbit (x)) - { - x = -x; - y = -y; - } - switch (index) - { - case 0: index = ((45 << 14) + hix - 0x3fe00000) >> 12; break; - case 1: index = ((13 << 15) + hix - 0x3fd00000) >> 13; break; - default: - case 2: index = (hix - 0x3fc30000) >> 14; break; - } -*/ - INSERT_WORDS64 (hhi, ((uint64_t)hix) << 32); - h = hhi; - if (iy) - l = y - (h - x); - else - l = x - h; - z = l * l; - sin_l = l*(ONE+z*(SSIN1+z*(SSIN2+z*(SSIN3+z*(SSIN4+z*SSIN5))))); - cos_l_m1 = z*(SCOS1+z*(SCOS2+z*(SCOS3+z*(SCOS4+z*SCOS5)))); - z = __sincosl_table [index + SINCOSL_SIN_HI] - + (__sincosl_table [index + SINCOSL_SIN_LO] - + (__sincosl_table [index + SINCOSL_SIN_HI] * cos_l_m1) - + (__sincosl_table [index + SINCOSL_COS_HI] * sin_l)); - *sinx = (ix < 0) ? -z : z; - *cosx = __sincosl_table [index + SINCOSL_COS_HI] - + (__sincosl_table [index + SINCOSL_COS_LO] - - (__sincosl_table [index + SINCOSL_SIN_HI] * sin_l - - __sincosl_table [index + SINCOSL_COS_HI] * cos_l_m1)); - } -} diff --git a/sysdeps/ieee754/ldbl-128ibm/k_sinl.c b/sysdeps/ieee754/ldbl-128ibm/k_sinl.c deleted file mode 100644 index 2138ccf13b..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/k_sinl.c +++ /dev/null @@ -1,157 +0,0 @@ -/* Quad-precision floating point sine on <-pi/4,pi/4>. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const long double c[] = { -#define ONE c[0] - 1.00000000000000000000000000000000000E+00L, /* 3fff0000000000000000000000000000 */ - -/* cos x ~ ONE + x^2 ( SCOS1 + SCOS2 * x^2 + ... + SCOS4 * x^6 + SCOS5 * x^8 ) - x in <0,1/256> */ -#define SCOS1 c[1] -#define SCOS2 c[2] -#define SCOS3 c[3] -#define SCOS4 c[4] -#define SCOS5 c[5] --5.00000000000000000000000000000000000E-01L, /* bffe0000000000000000000000000000 */ - 4.16666666666666666666666666556146073E-02L, /* 3ffa5555555555555555555555395023 */ --1.38888888888888888888309442601939728E-03L, /* bff56c16c16c16c16c16a566e42c0375 */ - 2.48015873015862382987049502531095061E-05L, /* 3fefa01a01a019ee02dcf7da2d6d5444 */ --2.75573112601362126593516899592158083E-07L, /* bfe927e4f5dce637cb0b54908754bde0 */ - -/* sin x ~ ONE * x + x^3 ( SIN1 + SIN2 * x^2 + ... + SIN7 * x^12 + SIN8 * x^14 ) - x in <0,0.1484375> */ -#define SIN1 c[6] -#define SIN2 c[7] -#define SIN3 c[8] -#define SIN4 c[9] -#define SIN5 c[10] -#define SIN6 c[11] -#define SIN7 c[12] -#define SIN8 c[13] --1.66666666666666666666666666666666538e-01L, /* bffc5555555555555555555555555550 */ - 8.33333333333333333333333333307532934e-03L, /* 3ff811111111111111111111110e7340 */ --1.98412698412698412698412534478712057e-04L, /* bff2a01a01a01a01a01a019e7a626296 */ - 2.75573192239858906520896496653095890e-06L, /* 3fec71de3a556c7338fa38527474b8f5 */ --2.50521083854417116999224301266655662e-08L, /* bfe5ae64567f544e16c7de65c2ea551f */ - 1.60590438367608957516841576404938118e-10L, /* 3fde6124613a811480538a9a41957115 */ --7.64716343504264506714019494041582610e-13L, /* bfd6ae7f3d5aef30c7bc660b060ef365 */ - 2.81068754939739570236322404393398135e-15L, /* 3fce9510115aabf87aceb2022a9a9180 */ - -/* sin x ~ ONE * x + x^3 ( SSIN1 + SSIN2 * x^2 + ... + SSIN4 * x^6 + SSIN5 * x^8 ) - x in <0,1/256> */ -#define SSIN1 c[14] -#define SSIN2 c[15] -#define SSIN3 c[16] -#define SSIN4 c[17] -#define SSIN5 c[18] --1.66666666666666666666666666666666659E-01L, /* bffc5555555555555555555555555555 */ - 8.33333333333333333333333333146298442E-03L, /* 3ff81111111111111111111110fe195d */ --1.98412698412698412697726277416810661E-04L, /* bff2a01a01a01a01a019e7121e080d88 */ - 2.75573192239848624174178393552189149E-06L, /* 3fec71de3a556c640c6aaa51aa02ab41 */ --2.50521016467996193495359189395805639E-08L, /* bfe5ae644ee90c47dc71839de75b2787 */ -}; - -#define SINCOSL_COS_HI 0 -#define SINCOSL_COS_LO 1 -#define SINCOSL_SIN_HI 2 -#define SINCOSL_SIN_LO 3 -extern const long double __sincosl_table[]; - -long double -__kernel_sinl(long double x, long double y, int iy) -{ - long double h, l, z, sin_l, cos_l_m1; - int64_t ix; - u_int32_t tix, hix, index; - double xhi, hhi; - - xhi = ldbl_high (x); - EXTRACT_WORDS64 (ix, xhi); - tix = ((u_int64_t)ix) >> 32; - tix &= ~0x80000000; /* tix = |x|'s high 32 bits */ - if (tix < 0x3fc30000) /* |x| < 0.1484375 */ - { - /* Argument is small enough to approximate it by a Chebyshev - polynomial of degree 17. */ - if (tix < 0x3c600000) /* |x| < 2^-57 */ - { - math_check_force_underflow (x); - if (!((int)x)) return x; /* generate inexact */ - } - z = x * x; - return x + (x * (z*(SIN1+z*(SIN2+z*(SIN3+z*(SIN4+ - z*(SIN5+z*(SIN6+z*(SIN7+z*SIN8))))))))); - } - else - { - /* So that we don't have to use too large polynomial, we find - l and h such that x = l + h, where fabsl(l) <= 1.0/256 with 83 - possible values for h. We look up cosl(h) and sinl(h) in - pre-computed tables, compute cosl(l) and sinl(l) using a - Chebyshev polynomial of degree 10(11) and compute - sinl(h+l) = sinl(h)cosl(l) + cosl(h)sinl(l). */ - int six = tix; - tix = ((six - 0x3ff00000) >> 4) + 0x3fff0000; - index = 0x3ffe - (tix >> 16); - hix = (tix + (0x200 << index)) & (0xfffffc00 << index); - x = fabsl (x); - switch (index) - { - case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break; - case 1: index = ((13 << 11) + hix - 0x3ffd0000) >> 9; break; - default: - case 2: index = (hix - 0x3ffc3000) >> 10; break; - } - hix = (hix << 4) & 0x3fffffff; -/* - The following should work for double but generates the wrong index. - For now the code above converts double to ieee extended to compute - the index back to double for the h value. - - index = 0x3fe - (tix >> 20); - hix = (tix + (0x2000 << index)) & (0xffffc000 << index); - x = fabsl (x); - switch (index) - { - case 0: index = ((45 << 14) + hix - 0x3fe00000) >> 12; break; - case 1: index = ((13 << 15) + hix - 0x3fd00000) >> 13; break; - default: - case 2: index = (hix - 0x3fc30000) >> 14; break; - } -*/ - INSERT_WORDS64 (hhi, ((uint64_t)hix) << 32); - h = hhi; - if (iy) - l = (ix < 0 ? -y : y) - (h - x); - else - l = x - h; - z = l * l; - sin_l = l*(ONE+z*(SSIN1+z*(SSIN2+z*(SSIN3+z*(SSIN4+z*SSIN5))))); - cos_l_m1 = z*(SCOS1+z*(SCOS2+z*(SCOS3+z*(SCOS4+z*SCOS5)))); - z = __sincosl_table [index + SINCOSL_SIN_HI] - + (__sincosl_table [index + SINCOSL_SIN_LO] - + (__sincosl_table [index + SINCOSL_SIN_HI] * cos_l_m1) - + (__sincosl_table [index + SINCOSL_COS_HI] * sin_l)); - return (ix < 0) ? -z : z; - } -} diff --git a/sysdeps/ieee754/ldbl-128ibm/k_tanl.c b/sysdeps/ieee754/ldbl-128ibm/k_tanl.c deleted file mode 100644 index 232e00c345..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/k_tanl.c +++ /dev/null @@ -1,166 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - Long double expansions are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __kernel_tanl( x, y, k ) - * kernel tan function on [-pi/4, pi/4], pi/4 ~ 0.7854 - * Input x is assumed to be bounded by ~pi/4 in magnitude. - * Input y is the tail of x. - * Input k indicates whether tan (if k=1) or - * -1/tan (if k= -1) is returned. - * - * Algorithm - * 1. Since tan(-x) = -tan(x), we need only to consider positive x. - * 2. if x < 2^-57, return x with inexact if x!=0. - * 3. tan(x) is approximated by a rational form x + x^3 / 3 + x^5 R(x^2) - * on [0,0.67433]. - * - * Note: tan(x+y) = tan(x) + tan'(x)*y - * ~ tan(x) + (1+x*x)*y - * Therefore, for better accuracy in computing tan(x+y), let - * r = x^3 * R(x^2) - * then - * tan(x+y) = x + (x^3 / 3 + (x^2 *(r+y)+y)) - * - * 4. For x in [0.67433,pi/4], let y = pi/4 - x, then - * tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y)) - * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) - */ - -#include -#include -#include -#include - -static const long double - one = 1.0L, - pio4hi = 7.8539816339744830961566084581987569936977E-1L, - pio4lo = 2.1679525325309452561992610065108379921906E-35L, - - /* tan x = x + x^3 / 3 + x^5 T(x^2)/U(x^2) - 0 <= x <= 0.6743316650390625 - Peak relative error 8.0e-36 */ - TH = 3.333333333333333333333333333333333333333E-1L, - T0 = -1.813014711743583437742363284336855889393E7L, - T1 = 1.320767960008972224312740075083259247618E6L, - T2 = -2.626775478255838182468651821863299023956E4L, - T3 = 1.764573356488504935415411383687150199315E2L, - T4 = -3.333267763822178690794678978979803526092E-1L, - - U0 = -1.359761033807687578306772463253710042010E8L, - U1 = 6.494370630656893175666729313065113194784E7L, - U2 = -4.180787672237927475505536849168729386782E6L, - U3 = 8.031643765106170040139966622980914621521E4L, - U4 = -5.323131271912475695157127875560667378597E2L; - /* 1.000000000000000000000000000000000000000E0 */ - - -long double -__kernel_tanl (long double x, long double y, int iy) -{ - long double z, r, v, w, s; - int32_t ix, sign, hx, lx; - double xhi; - - xhi = ldbl_high (x); - EXTRACT_WORDS (hx, lx, xhi); - ix = hx & 0x7fffffff; - if (ix < 0x3c600000) /* x < 2**-57 */ - { - if ((int) x == 0) /* generate inexact */ - { - if ((ix | lx | (iy + 1)) == 0) - return one / fabs (x); - else if (iy == 1) - { - math_check_force_underflow (x); - return x; - } - else - return -one / x; - } - } - if (ix >= 0x3fe59420) /* |x| >= 0.6743316650390625 */ - { - if ((hx & 0x80000000) != 0) - { - x = -x; - y = -y; - sign = -1; - } - else - sign = 1; - z = pio4hi - x; - w = pio4lo - y; - x = z + w; - y = 0.0; - } - z = x * x; - r = T0 + z * (T1 + z * (T2 + z * (T3 + z * T4))); - v = U0 + z * (U1 + z * (U2 + z * (U3 + z * (U4 + z)))); - r = r / v; - - s = z * x; - r = y + z * (s * r + y); - r += TH * s; - w = x + r; - if (ix >= 0x3fe59420) - { - v = (long double) iy; - w = (v - 2.0 * (x - (w * w / (w + v) - r))); - /* SIGN is set for arguments that reach this code, but not - otherwise, resulting in warnings that it may be used - uninitialized although in the cases where it is used it has - always been set. */ - DIAG_PUSH_NEEDS_COMMENT; - DIAG_IGNORE_NEEDS_COMMENT (5, "-Wmaybe-uninitialized"); - if (sign < 0) - w = -w; - DIAG_POP_NEEDS_COMMENT; - return w; - } - if (iy == 1) - return w; - else - { /* if allow error up to 2 ulp, - simply return -1.0/(x+r) here */ - /* compute -1.0/(x+r) accurately */ - long double u1, z1; - - u1 = ldbl_high (w); - v = r - (u1 - x); /* u1+v = r+x */ - z = -1.0 / w; - z1 = ldbl_high (z); - s = 1.0 + z1 * u1; - return z1 + z * (s + z1 * v); - } -} diff --git a/sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c b/sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c deleted file mode 100644 index 4146e5c2d4..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c +++ /dev/null @@ -1,197 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" -#include -#include -#include -#include - -/* Convert a `long double' in IBM extended format to a multi-precision - integer representing the significand scaled up by its number of - bits (106 for long double) and an integral power of two (MPN - frexpl). */ - - -/* When signs differ, the actual value is the difference between the - significant double and the less significant double. Sometimes a - bit can be lost when we borrow from the significant mantissa. */ -#define EXTRA_INTERNAL_PRECISION (7) - -mp_size_t -__mpn_extract_long_double (mp_ptr res_ptr, mp_size_t size, - int *expt, int *is_neg, - long double value) -{ - union ibm_extended_long_double u; - unsigned long long hi, lo; - int ediff; - - u.ld = value; - - *is_neg = u.d[0].ieee.negative; - *expt = (int) u.d[0].ieee.exponent - IEEE754_DOUBLE_BIAS; - - lo = ((long long) u.d[1].ieee.mantissa0 << 32) | u.d[1].ieee.mantissa1; - hi = ((long long) u.d[0].ieee.mantissa0 << 32) | u.d[0].ieee.mantissa1; - - /* Hold 7 extra bits of precision in the mantissa. This allows - the normalizing shifts below to prevent losing precision when - the signs differ and the exponents are sufficiently far apart. */ - lo <<= EXTRA_INTERNAL_PRECISION; - - /* If the lower double is not a denormal or zero then set the hidden - 53rd bit. */ - if (u.d[1].ieee.exponent != 0) - lo |= 1ULL << (52 + EXTRA_INTERNAL_PRECISION); - else - lo = lo << 1; - - /* The lower double is normalized separately from the upper. We may - need to adjust the lower manitissa to reflect this. */ - ediff = u.d[0].ieee.exponent - u.d[1].ieee.exponent - 53; - if (ediff > 0) - { - if (ediff < 64) - lo = lo >> ediff; - else - lo = 0; - } - else if (ediff < 0) - lo = lo << -ediff; - - /* The high double may be rounded and the low double reflects the - difference between the long double and the rounded high double - value. This is indicated by a differnce between the signs of the - high and low doubles. */ - if (u.d[0].ieee.negative != u.d[1].ieee.negative - && lo != 0) - { - lo = (1ULL << (53 + EXTRA_INTERNAL_PRECISION)) - lo; - if (hi == 0) - { - /* we have a borrow from the hidden bit, so shift left 1. */ - hi = 0x000ffffffffffffeLL | (lo >> (52 + EXTRA_INTERNAL_PRECISION)); - lo = 0x0fffffffffffffffLL & (lo << 1); - (*expt)--; - } - else - hi--; - } -#if BITS_PER_MP_LIMB == 32 - /* Combine the mantissas to be contiguous. */ - res_ptr[0] = lo >> EXTRA_INTERNAL_PRECISION; - res_ptr[1] = (hi << (53 - 32)) | (lo >> (32 + EXTRA_INTERNAL_PRECISION)); - res_ptr[2] = hi >> 11; - res_ptr[3] = hi >> (32 + 11); - #define N 4 -#elif BITS_PER_MP_LIMB == 64 - /* Combine the two mantissas to be contiguous. */ - res_ptr[0] = (hi << 53) | (lo >> EXTRA_INTERNAL_PRECISION); - res_ptr[1] = hi >> 11; - #define N 2 -#else - #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" -#endif -/* The format does not fill the last limb. There are some zeros. */ -#define NUM_LEADING_ZEROS (BITS_PER_MP_LIMB \ - - (LDBL_MANT_DIG - ((N - 1) * BITS_PER_MP_LIMB))) - - if (u.d[0].ieee.exponent == 0) - { - /* A biased exponent of zero is a special case. - Either it is a zero or it is a denormal number. */ - if (res_ptr[0] == 0 && res_ptr[1] == 0 - && res_ptr[N - 2] == 0 && res_ptr[N - 1] == 0) /* Assumes N<=4. */ - /* It's zero. */ - *expt = 0; - else - { - /* It is a denormal number, meaning it has no implicit leading - one bit, and its exponent is in fact the format minimum. We - use DBL_MIN_EXP instead of LDBL_MIN_EXP below because the - latter describes the properties of both parts together, but - the exponent is computed from the high part only. */ - int cnt; - -#if N == 2 - if (res_ptr[N - 1] != 0) - { - count_leading_zeros (cnt, res_ptr[N - 1]); - cnt -= NUM_LEADING_ZEROS; - res_ptr[N - 1] = res_ptr[N - 1] << cnt - | (res_ptr[0] >> (BITS_PER_MP_LIMB - cnt)); - res_ptr[0] <<= cnt; - *expt = DBL_MIN_EXP - 1 - cnt; - } - else - { - count_leading_zeros (cnt, res_ptr[0]); - if (cnt >= NUM_LEADING_ZEROS) - { - res_ptr[N - 1] = res_ptr[0] << (cnt - NUM_LEADING_ZEROS); - res_ptr[0] = 0; - } - else - { - res_ptr[N - 1] = res_ptr[0] >> (NUM_LEADING_ZEROS - cnt); - res_ptr[0] <<= BITS_PER_MP_LIMB - (NUM_LEADING_ZEROS - cnt); - } - *expt = DBL_MIN_EXP - 1 - - (BITS_PER_MP_LIMB - NUM_LEADING_ZEROS) - cnt; - } -#else - int j, k, l; - - for (j = N - 1; j > 0; j--) - if (res_ptr[j] != 0) - break; - - count_leading_zeros (cnt, res_ptr[j]); - cnt -= NUM_LEADING_ZEROS; - l = N - 1 - j; - if (cnt < 0) - { - cnt += BITS_PER_MP_LIMB; - l--; - } - if (!cnt) - for (k = N - 1; k >= l; k--) - res_ptr[k] = res_ptr[k-l]; - else - { - for (k = N - 1; k > l; k--) - res_ptr[k] = res_ptr[k-l] << cnt - | res_ptr[k-l-1] >> (BITS_PER_MP_LIMB - cnt); - res_ptr[k--] = res_ptr[0] << cnt; - } - - for (; k >= 0; k--) - res_ptr[k] = 0; - *expt = DBL_MIN_EXP - 1 - l * BITS_PER_MP_LIMB - cnt; -#endif - } - } - else - /* Add the implicit leading one bit for a normalized number. */ - res_ptr[N - 1] |= (mp_limb_t) 1 << (LDBL_MANT_DIG - 1 - - ((N - 1) * BITS_PER_MP_LIMB)); - - return N; -} diff --git a/sysdeps/ieee754/ldbl-128ibm/lgamma_negl.c b/sysdeps/ieee754/ldbl-128ibm/lgamma_negl.c deleted file mode 100644 index 638812c50b..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/lgamma_negl.c +++ /dev/null @@ -1,532 +0,0 @@ -/* lgammal expanding around zeros. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const long double lgamma_zeros[][2] = - { - { -0x2.74ff92c01f0d82abec9f315f1ap+0L, -0x7.12c334804d9a79cb5d46094d46p-112L }, - { -0x2.bf6821437b20197995a4b4641fp+0L, 0x5.140b4ff4b7d6069e1bd7acc196p-108L }, - { -0x3.24c1b793cb35efb8be699ad3dap+0L, 0x4.59abab3480539f1c0e926287cp-108L }, - { -0x3.f48e2a8f85fca170d456129123p+0L, -0x6.cc320a4887d1cb4c711828a75ep-108L }, - { -0x4.0a139e16656030c39f0b0de182p+0L, 0xe.d53e84029416e1242006b2b3dp-108L }, - { -0x4.fdd5de9bbabf3510d0aa407698p+0L, -0x8.501d7d78125286f78d1e501f14p-108L }, - { -0x5.021a95fc2db6432a4c56e5953ap+0L, 0xb.2133950fbcf2b01a8b9058dcccp-108L }, - { -0x5.ffa4bd647d0357dd4ed62cbd32p+0L, 0x1.2071c071a2145d2982428f2269p-108L }, - { -0x6.005ac9625f233b607c2d96d164p+0L, 0x7.a347953a96cbf30e1a0db20856p-108L }, - { -0x6.fff2fddae1bbff3d626b65c24p+0L, 0x2.de0bfcff5c457ebcf4d3ad9674p-108L }, - { -0x7.000cff7b7f87adf4482dcdb988p+0L, 0x7.d54d99e35a74d6407b80292df2p-108L }, - { -0x7.fffe5fe05673c3ca9e82b522bp+0L, -0xc.a9d2e8837cd1f14bd3d05002e4p-108L }, - { -0x8.0001a01459fc9f60cb3cec1cecp+0L, -0x8.576677ca538d88084310983b8p-108L }, - { -0x8.ffffd1c425e80ffc864e957494p+0L, 0x1.a6181dfdef1807e3087e4bb163p-104L }, - { -0x9.00002e3bb47d86d6d843fedc34p+0L, -0x1.1deb7ad09ec5e9d6e8ae2d548bp-104L }, - { -0x9.fffffb606bdfdcd062ae77a504p+0L, -0x1.47c69d2eb6f33d170fce38ff818p-104L }, - { -0xa.0000049f93bb9927b45d95e154p+0L, -0x4.1e03086db9146a9287bd4f2172p-108L }, - { -0xa.ffffff9466e9f1b36dacd2adbcp+0L, -0x1.18d05a4e458062f3f95345a4dap-104L }, - { -0xb.0000006b9915315d965a6ffea4p+0L, -0xe.4bea39000dcc1848023c5f6bdcp-112L }, - { -0xb.fffffff7089387387de41acc3cp+0L, -0x1.3c978bd839c8c428b5efcf91ef8p-104L }, - { -0xc.00000008f76c7731567c0f025p+0L, -0xf.387920df5675833859190eb128p-108L }, - { -0xc.ffffffff4f6dcf617f97a5ffc8p+0L, 0xa.82ab72d76f32eaee2d1a42ed5p-108L }, - { -0xd.00000000b092309c06683dd1b8p+0L, -0x1.03e3700857a15c19ac5a611de98p-104L }, - { -0xd.fffffffff36345ab9e184a3e08p+0L, -0x1.d1176dc48e47f62d917973dd45p-104L }, - { -0xe.000000000c9cba545e94e75ec4p+0L, -0x1.718f753e2501e757a17cf2ecbfp-104L }, - { -0xe.ffffffffff28c060c6604ef304p+0L, 0x8.e0762c8ca8361c23e8393919c4p-108L }, - { -0xf.0000000000d73f9f399bd0e42p+0L, -0xf.85e9ee31b0b890744fc0e3fbcp-108L }, - { -0xf.fffffffffff28c060c6621f514p+0L, 0x1.18d1b2eec9d960bd9adc5be5f6p-104L }, - { -0x1.000000000000d73f9f399da1428p+4L, 0x3.406c46e0e88305d2800f0e414cp-104L }, - { -0x1.0ffffffffffff3569c47e7a93ep+4L, -0x1.c46a08a2e008a998ebabb8087fp-104L }, - { -0x1.1000000000000ca963b81856888p+4L, -0x7.6ca5a3a64ec15db0a95caf2cap-108L }, - { -0x1.1fffffffffffff4bec3ce23413p+4L, -0x2.d08b2b726187c841cb92cd5222p-104L }, - { -0x1.20000000000000b413c31dcbec8p+4L, -0x2.4c3b2ffacbb4932f18dceedfd7p-104L }, - { -0x1.2ffffffffffffff685b25cbf5f8p+4L, 0x2.ba3126cd1c7b7a0822d694705cp-104L }, - { -0x1.30000000000000097a4da340a08p+4L, -0x2.b81b7b1f1f001c72bf914141efp-104L }, - { -0x1.3fffffffffffffff86af516ff8p+4L, 0x8.9429818df2a87abafd48248a2p-108L }, - { -0x1.40000000000000007950ae9008p+4L, -0x8.9413ccc8a353fda263f8ce973cp-108L }, - { -0x1.4ffffffffffffffffa391c4249p+4L, 0x3.d5c63022b62b5484ba346524dbp-104L }, - { -0x1.500000000000000005c6e3bdb7p+4L, -0x3.d5c62f55ed5322b2685c5e9a52p-104L }, - { -0x1.5fffffffffffffffffbcc71a49p+4L, -0x2.01eb5aeb96c74d7ad25e060529p-104L }, - { -0x1.6000000000000000004338e5b7p+4L, 0x2.01eb5aec04b2f2eb663e4e3d8ap-104L }, - { -0x1.6ffffffffffffffffffd13c97d8p+4L, -0x1.d38fcc4d08d6fe5aa56ab04308p-104L }, - { -0x1.70000000000000000002ec36828p+4L, 0x1.d38fcc4d090cee2f5d0b69a99cp-104L }, - { -0x1.7fffffffffffffffffffe0d31p+4L, 0x1.972f577cca4b4c8cb1dc14001bp-104L }, - { -0x1.800000000000000000001f2cfp+4L, -0x1.972f577cca4b3442e35f0040b38p-104L }, - { -0x1.8ffffffffffffffffffffec0c3p+4L, -0x3.22e9a0572b1bb5b95f346a92d6p-104L }, - { -0x1.90000000000000000000013f3dp+4L, 0x3.22e9a0572b1bb5c371ddb35617p-104L }, - { -0x1.9ffffffffffffffffffffff3b88p+4L, -0x3.d01cad8d32e386fd783e97296dp-104L }, - { -0x1.a0000000000000000000000c478p+4L, 0x3.d01cad8d32e386fd7c1ab8c1fep-104L }, - { -0x1.afffffffffffffffffffffff8b8p+4L, -0x1.538f48cc5737d5979c39db806c8p-104L }, - { -0x1.b00000000000000000000000748p+4L, 0x1.538f48cc5737d5979c3b3a6bdap-104L }, - { -0x1.bffffffffffffffffffffffffcp+4L, 0x2.862898d42174dcf171470d8c8cp-104L }, - { -0x1.c0000000000000000000000004p+4L, -0x2.862898d42174dcf171470d18bap-104L }, - { -0x1.dp+4L, 0x2.4b3f31686b15af57c61ceecdf4p-104L }, - { -0x1.dp+4L, -0x2.4b3f31686b15af57c61ceecdd1p-104L }, - { -0x1.ep+4L, 0x1.3932c5047d60e60caded4c298ap-108L }, - { -0x1.ep+4L, -0x1.3932c5047d60e60caded4c29898p-108L }, - { -0x1.fp+4L, 0xa.1a6973c1fade2170f7237d36p-116L }, - { -0x1.fp+4L, -0xa.1a6973c1fade2170f7237d36p-116L }, - { -0x2p+4L, 0x5.0d34b9e0fd6f10b87b91be9bp-120L }, - { -0x2p+4L, -0x5.0d34b9e0fd6f10b87b91be9bp-120L }, - { -0x2.1p+4L, 0x2.73024a9ba1aa36a7059bff52e8p-124L }, - { -0x2.1p+4L, -0x2.73024a9ba1aa36a7059bff52e8p-124L }, - { -0x2.2p+4L, 0x1.2710231c0fd7a13f8a2b4af9d68p-128L }, - { -0x2.2p+4L, -0x1.2710231c0fd7a13f8a2b4af9d68p-128L }, - { -0x2.3p+4L, 0x8.6e2ce38b6c8f9419e3fad3f03p-136L }, - { -0x2.3p+4L, -0x8.6e2ce38b6c8f9419e3fad3f03p-136L }, - { -0x2.4p+4L, 0x3.bf30652185952560d71a254e4fp-140L }, - { -0x2.4p+4L, -0x3.bf30652185952560d71a254e4fp-140L }, - { -0x2.5p+4L, 0x1.9ec8d1c94e85af4c78b15c3d8ap-144L }, - { -0x2.5p+4L, -0x1.9ec8d1c94e85af4c78b15c3d8ap-144L }, - { -0x2.6p+4L, 0xa.ea565ce061d57489e9b8527628p-152L }, - { -0x2.6p+4L, -0xa.ea565ce061d57489e9b8527628p-152L }, - { -0x2.7p+4L, 0x4.7a6512692eb37804111dabad3p-156L }, - { -0x2.7p+4L, -0x4.7a6512692eb37804111dabad3p-156L }, - { -0x2.8p+4L, 0x1.ca8ed42a12ae3001a07244abadp-160L }, - { -0x2.8p+4L, -0x1.ca8ed42a12ae3001a07244abadp-160L }, - { -0x2.9p+4L, 0xb.2f30e1ce812063f12e7e8d8d98p-168L }, - { -0x2.9p+4L, -0xb.2f30e1ce812063f12e7e8d8d98p-168L }, - { -0x2.ap+4L, 0x4.42bd49d4c37a0db136489772e4p-172L }, - { -0x2.ap+4L, -0x4.42bd49d4c37a0db136489772e4p-172L }, - { -0x2.bp+4L, 0x1.95db45257e5122dcbae56def37p-176L }, - { -0x2.bp+4L, -0x1.95db45257e5122dcbae56def37p-176L }, - { -0x2.cp+4L, 0x9.3958d81ff63527ecf993f3fb7p-184L }, - { -0x2.cp+4L, -0x9.3958d81ff63527ecf993f3fb7p-184L }, - { -0x2.dp+4L, 0x3.47970e4440c8f1c058bd238c99p-188L }, - { -0x2.dp+4L, -0x3.47970e4440c8f1c058bd238c99p-188L }, - { -0x2.ep+4L, 0x1.240804f65951062ca46e4f25c6p-192L }, - { -0x2.ep+4L, -0x1.240804f65951062ca46e4f25c6p-192L }, - { -0x2.fp+4L, 0x6.36a382849fae6de2d15362d8a4p-200L }, - { -0x2.fp+4L, -0x6.36a382849fae6de2d15362d8a4p-200L }, - { -0x3p+4L, 0x2.123680d6dfe4cf4b9b1bcb9d8cp-204L }, - }; - -static const long double e_hi = 0x2.b7e151628aed2a6abf7158809dp+0L; -static const long double e_lo = -0xb.0c389d18e9f0c74b25a9587b28p-112L; - -/* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) in Stirling's - approximation to lgamma function. */ - -static const long double lgamma_coeff[] = - { - 0x1.555555555555555555555555558p-4L, - -0xb.60b60b60b60b60b60b60b60b6p-12L, - 0x3.4034034034034034034034034p-12L, - -0x2.7027027027027027027027027p-12L, - 0x3.72a3c5631fe46ae1d4e700dca9p-12L, - -0x7.daac36664f1f207daac36664f2p-12L, - 0x1.a41a41a41a41a41a41a41a41a4p-8L, - -0x7.90a1b2c3d4e5f708192a3b4c5ep-8L, - 0x2.dfd2c703c0cfff430edfd2c704p-4L, - -0x1.6476701181f39edbdb9ce625988p+0L, - 0xd.672219167002d3a7a9c886459cp+0L, - -0x9.cd9292e6660d55b3f712eb9e08p+4L, - 0x8.911a740da740da740da740da74p+8L, - -0x8.d0cc570e255bf59ff6eec24b48p+12L, - 0xa.8d1044d3708d1c219ee4fdc448p+16L, - -0xe.8844d8a169abbc406169abbc4p+20L, - 0x1.6d29a0f6433b79890cede624338p+28L, - -0x2.88a233b3c8cddaba9809357126p+32L, - 0x5.0dde6f27500939a85c40939a86p+36L, - -0xb.4005bde03d4642a243581714bp+40L, - 0x1.bc8cd6f8f1f755c78753cdb5d6p+48L, - -0x4.bbebb143bb94de5a0284fa7ec4p+52L, - 0xe.2e1337f5af0bed90b6b0a352d4p+56L, - -0x2.e78250162b62405ad3e4bfe61bp+64L, - 0xa.5f7eef9e71ac7c80326ab4cc8cp+68L, - -0x2.83be0395e550213369924971b2p+76L, - }; - -#define NCOEFF (sizeof (lgamma_coeff) / sizeof (lgamma_coeff[0])) - -/* Polynomial approximations to (|gamma(x)|-1)(x-n)/(x-x0), where n is - the integer end-point of the half-integer interval containing x and - x0 is the zero of lgamma in that half-integer interval. Each - polynomial is expressed in terms of x-xm, where xm is the midpoint - of the interval for which the polynomial applies. */ - -static const long double poly_coeff[] = - { - /* Interval [-2.125, -2] (polynomial degree 21). */ - -0x1.0b71c5c54d42eb6c17f30b7aa9p+0L, - -0xc.73a1dc05f34951602554c6d76cp-4L, - -0x1.ec841408528b51473e6c42f1c58p-4L, - -0xe.37c9da26fc3c9a3c1844c04b84p-4L, - -0x1.03cd87c519305703b00b046ce4p-4L, - -0xe.ae9ada65e09aa7f1c817c91048p-4L, - 0x9.b11855a4864b571b6a4f571c88p-8L, - -0xe.f28c133e697a95ba2dabb97584p-4L, - 0x2.6ec14a1c586a7ddb6c4be90fe1p-4L, - -0xf.57cab973e14496f0900851c0d4p-4L, - 0x4.5b0fc25f16b0df37175495c70cp-4L, - -0xf.f50e59f1a8fb8c402091e3cd3cp-4L, - 0x6.5f5eae1681d1e50e575c3d4d36p-4L, - -0x1.0d2422dac7ea8a52db6bf0d14fp+0L, - 0x8.820008f221eae5a36e15913bacp-4L, - -0x1.1f492eec53b9481ea23a7e944ep+0L, - 0xa.cb55b4d662945e8cf1f81ee5b4p-4L, - -0x1.3616863983e131d7935700ccd48p+0L, - 0xd.43c783ebab66074d18709d5cap-4L, - -0x1.51d5dbc56bc85976871c6e51f78p+0L, - 0x1.06253af656eb6b2ed998387aabp+0L, - -0x1.7d910a0aadc63d7a1ef7690dbb8p+0L, - /* Interval [-2.25, -2.125] (polynomial degree 22). */ - -0xf.2930890d7d675a80c36afb0fd4p-4L, - -0xc.a5cfde054eab5c6770daeca684p-4L, - 0x3.9c9e0fdebb07cdf89c61d434adp-4L, - -0x1.02a5ad35605fcf4af65a67fe8a8p+0L, - 0x9.6e9b1185bb48be9de18d8bbeb8p-4L, - -0x1.4d8332f3cfbfa116fdf648372cp+0L, - 0x1.1c0c8cb4d9f4b1d495142b53ebp+0L, - -0x1.c9a6f5ae9130ccfb9b7e39136f8p+0L, - 0x1.d7e9307fd58a2e85209d0e83eap+0L, - -0x2.921cb3473d96462f22c171712fp+0L, - 0x2.e8d59113b6f3fc1ed3b556b62cp+0L, - -0x3.cbab931624e3b6cf299cea1213p+0L, - 0x4.7d9f0f05d2c4cf91e41ea1f048p+0L, - -0x5.ade9cba31affa276fe516135eep+0L, - 0x6.dc983a62cf6ddc935ae3c5b9ap+0L, - -0x8.8d9ed100b2a7813f82cbd83e3cp+0L, - 0xa.6fa0926892835a9a29c9b8db8p+0L, - -0xc.ebc90aff4ffe319d70bef0d61p+0L, - 0xf.d69cf50ab226bacece014c0b44p+0L, - -0x1.389964ac7cfef4578eec028e5c8p+4L, - 0x1.7ff0d2090164e25901f97cab3bp+4L, - -0x1.e9e6d282da6bd004619d073071p+4L, - 0x2.5d719ab6ad4be8b5c32b0fba2ap+4L, - /* Interval [-2.375, -2.25] (polynomial degree 24). */ - -0xd.7d28d505d6181218a25f31d5e4p-4L, - -0xe.69649a3040985140cdf946827cp-4L, - 0xb.0d74a2827d053a8d4459500f88p-4L, - -0x1.924b0922853617cac181b097e48p+0L, - 0x1.d49b12bccf0a568582e2dbf8ep+0L, - -0x3.0898bb7d8c4093e6360d26bbc5p+0L, - 0x4.207a6cac711cb538684f74619ep+0L, - -0x6.39ee63ea4fb1dcac86ab337e3cp+0L, - 0x8.e2e2556a797b64a1b9328a3978p+0L, - -0xd.0e83ac82552ee5596df1706ff4p+0L, - 0x1.2e4525e0ce666e48fac68ddcdep+4L, - -0x1.b8e350d6a8f6597ed2eb3c2eff8p+4L, - 0x2.805cd69b9197ee0089dd1b1c46p+4L, - -0x3.a42585423e4d00db075f2d687ep+4L, - 0x5.4b4f409f874e2a7dcd8aa4a62ap+4L, - -0x7.b3c5829962ca1b95535db9cc4ep+4L, - 0xb.33b7b928986ec6b219e2e15a98p+4L, - -0x1.04b76dec4115106bb16316d9cd8p+8L, - 0x1.7b366d8d46f179d5c5302d6534p+8L, - -0x2.2799846ddc54813d40da622b99p+8L, - 0x3.2253a862c1078a3ccabac65bebp+8L, - -0x4.8d92cebc90a4a29816f4952f4ep+8L, - 0x6.9ebb8f9d72c66c80c4f4492e7ap+8L, - -0xa.2850a483f9ba0e43f5848b5cd8p+8L, - 0xe.e1b6bdce83b27944edab8c428p+8L, - /* Interval [-2.5, -2.375] (polynomial degree 25). */ - -0xb.74ea1bcfff94b2c01afba9daa8p-4L, - -0x1.2a82bd590c37538cab143308e3p+0L, - 0x1.88020f828b966fec66b8648d16p+0L, - -0x3.32279f040eb694970e9db0308bp+0L, - 0x5.57ac82517767e68a72142041b4p+0L, - -0x9.c2aedcfe22833de438786dc658p+0L, - 0x1.12c132f1f5577f99dbfb7ecb408p+4L, - -0x1.ea94e26628a3de3557dc349db8p+4L, - 0x3.66b4ac4fa582f5cbe7e19d10c6p+4L, - -0x6.0cf746a9cf4cbcb0004cb01f66p+4L, - 0xa.c102ef2c20d5a313cbfd37f5b8p+4L, - -0x1.31ebff06e8f08f58d1c35eacfdp+8L, - 0x2.1fd6f0c0e788660ba1f1573722p+8L, - -0x3.c6d760404305e75356a86a11d6p+8L, - 0x6.b6d18e0c31a2ba4d5b5ac78676p+8L, - -0xb.efaf5426343e6b41a823ed6c44p+8L, - 0x1.53852db2fe01305b9f336d132d8p+12L, - -0x2.5b977cb2b568382e71ca93a36bp+12L, - 0x4.310d090a6119c7d85a2786a616p+12L, - -0x7.73a518387ef1d4d04917dfb25cp+12L, - 0xd.3f965798601aabd24bdaa6e68cp+12L, - -0x1.78db20b0b166480c93cf0031198p+16L, - 0x2.9be0068b65cf13bd1cf71f0eccp+16L, - -0x4.a221230466b9cd51d5b811d6b6p+16L, - 0x8.f6f8c13e2b52aa3e30a4ce6898p+16L, - -0x1.02145337ff16b44fa7c2adf7f28p+20L, - /* Interval [-2.625, -2.5] (polynomial degree 26). */ - -0x3.d10108c27ebafad533c20eac33p-4L, - 0x1.cd557caff7d2b2085f41dbec538p+0L, - 0x3.819b4856d399520dad9776ebb9p+0L, - 0x6.8505cbad03dc34c5e42e89c4b4p+0L, - 0xb.c1b2e653a9e38f82b3997134a8p+0L, - 0x1.50a53a38f1481381051544750ep+4L, - 0x2.57ae00cbe5232cbeef4e94eb2cp+4L, - 0x4.2b156301b8604db82856d5767p+4L, - 0x7.6989ed23ca3ca751fc9c32eb88p+4L, - 0xd.2dd29765579396f3a456772c44p+4L, - 0x1.76e1c3430eb8630991d1aa8a248p+8L, - 0x2.9a77bf548873743fe65d025f56p+8L, - 0x4.a0d62ed7266389753842d7be74p+8L, - 0x8.3a6184dd32d31ec73fc6f2d37cp+8L, - 0xe.a0ade153a3bf0247db49e11ae8p+8L, - 0x1.a01359fa74d4eaf8858bbc35f68p+12L, - 0x2.e3b0a32845cbc135bae4a5216cp+12L, - 0x5.23012653815fe88456170a7dc6p+12L, - 0x9.21c92dcde748ec199bc9c65738p+12L, - 0x1.03c0f3621b4c67d2d86e5e813d8p+16L, - 0x1.cdc884edcc9f5404f2708551cb8p+16L, - 0x3.35025f0b1624d1ffc86688bf03p+16L, - 0x5.b3bd9562ebf2409c5ce99929ep+16L, - 0xa.1a229b1986d9f89cb80abccfdp+16L, - 0x1.1e69136ebd520146d51837f3308p+20L, - 0x2.2d2738c72449db2524171b9271p+20L, - 0x4.036e80cc6621b836f94f426834p+20L, - /* Interval [-2.75, -2.625] (polynomial degree 24). */ - -0x6.b5d252a56e8a75458a27ed1c2ep-4L, - 0x1.28d60383da3ac721aed3c57949p+0L, - 0x1.db6513ada8a66ea77d87d9a796p+0L, - 0x2.e217118f9d348a27f7506c4b4fp+0L, - 0x4.450112c5cbf725a0fb982fc44cp+0L, - 0x6.4af99151eae7810a75a5fceac8p+0L, - 0x9.2db598b4a97a7f69ab7be31128p+0L, - 0xd.62bef9c22471f5f17955733c6p+0L, - 0x1.379f294e412bd6255506135f4a8p+4L, - 0x1.c5827349d8865d858d4f85f3c38p+4L, - 0x2.93a7e7a75b755bbea1785a1349p+4L, - 0x3.bf9bb882afed66a08b22ed7a45p+4L, - 0x5.73c737828d2044aca95fdef33ep+4L, - 0x7.ee46534920f1c81574db260f0ep+4L, - 0xb.891c6b837b513eaf1592fe78ccp+4L, - 0x1.0c775d815bf741526a3dd66ded8p+8L, - 0x1.867ee44cf11f26455a8924a56bp+8L, - 0x2.37fe968baa1018e55cae680f1dp+8L, - 0x3.3a2c557f686679eb5d8e960fd1p+8L, - 0x4.b1ba0539d4d80cc9174738b992p+8L, - 0x6.d3fd80155b6d2211956cb6bc5ap+8L, - 0x9.eb5a96b0ee3d9ca523f5fbc1fp+8L, - 0xe.6b37429c1acc7dc19ef312dda4p+8L, - 0x1.621132d6aa138b203a28e4792fp+12L, - 0x2.09610219270e2ce11a985d4d36p+12L, - /* Interval [-2.875, -2.75] (polynomial degree 23). */ - -0x8.a41b1e4f36ff88dc820815607cp-4L, - 0xc.da87d3b69dc0f2f9c6f368b8c8p-4L, - 0x1.1474ad5c36158a7bea04fd30b28p+0L, - 0x1.761ecb90c555df6555b7dbb9ce8p+0L, - 0x1.d279bff9ae291caf6c4b17497f8p+0L, - 0x2.4e5d00559a6e2b9b5d7e35b575p+0L, - 0x2.d57545a75cee8743b1ff6e22b8p+0L, - 0x3.8514eee3aac88b89d2d4ddef4ep+0L, - 0x4.5235e3b6e1891fd9c975383318p+0L, - 0x5.562acdb10eef3c14a780490e3cp+0L, - 0x6.8ec8965c76f0b261bc41b5e532p+0L, - 0x8.15251aca144a98a1e1c0981388p+0L, - 0x9.f08d56ab9e7eee9515a457214cp+0L, - 0xc.3dbbeda2620d5be4fe8621ce6p+0L, - 0xf.0f5bfd65b3feb6d745a2cdbf9cp+0L, - 0x1.28a6ccd8dd27fb90fcaa31d37dp+4L, - 0x1.6d0a3a3091c3d64cfd1a3c5769p+4L, - 0x1.c1570107e02d5ab0b8bea6d6c98p+4L, - 0x2.28fc9b295b583fa469de7acceap+4L, - 0x2.a8a4cac0217026bbdbce34f4adp+4L, - 0x3.4532c98bce75262ac0ede53edep+4L, - 0x4.062fd9ba18e00e55c25a4f0688p+4L, - 0x5.22e00e6d9846a3451fad5587f8p+4L, - 0x6.5d0f7ce92a0bf928d4a30e92c6p+4L, - /* Interval [-3, -2.875] (polynomial degree 22). */ - -0xa.046d667e468f3e44dcae1afcc8p-4L, - 0x9.70b88dcc006c214d8d996fdf7p-4L, - 0xa.a8a39421c86d3ff24931a093c4p-4L, - 0xd.2f4d1363f324da2b357c850124p-4L, - 0xd.ca9aa1a3a5c00de11bf5d7047p-4L, - 0xf.cf09c31eeb52a45dfb25e50ebcp-4L, - 0x1.04b133a39ed8a096914cc78812p+0L, - 0x1.22b547a06edda9447f516a2ee7p+0L, - 0x1.2c57fce7db86a91c8d0f12077b8p+0L, - 0x1.4aade4894708fb8b78365e9bf88p+0L, - 0x1.579c8b7b67ec5179ecc4e9c7dp+0L, - 0x1.776820e7fc7361c50e7ef40a88p+0L, - 0x1.883ab28c72ef238ada6c480ab18p+0L, - 0x1.aa2ef6e1d11b9fcea06a1dcab1p+0L, - 0x1.bf4ad50f2dd2aeb02395ea08648p+0L, - 0x1.e40206a5477615838e02279dfc8p+0L, - 0x1.fdcbcfd4b0777fb173b85d5b398p+0L, - 0x2.25e32b3b3c89e833029169a17bp+0L, - 0x2.44ce344ff0bda6570fe3d0a76dp+0L, - 0x2.70bfba6fa079faf2dbf31d2216p+0L, - 0x2.953e22a97725cc179ad21024fap+0L, - 0x2.d8ccc51524659a499eee0f267p+0L, - 0x3.080fbb09c14936c2171c8a51bcp+0L, - }; - -static const size_t poly_deg[] = - { - 21, - 22, - 24, - 25, - 26, - 24, - 23, - 22, - }; - -static const size_t poly_end[] = - { - 21, - 44, - 69, - 95, - 122, - 147, - 171, - 194, - }; - -/* Compute sin (pi * X) for -0.25 <= X <= 0.5. */ - -static long double -lg_sinpi (long double x) -{ - if (x <= 0.25L) - return __sinl (M_PIl * x); - else - return __cosl (M_PIl * (0.5L - x)); -} - -/* Compute cos (pi * X) for -0.25 <= X <= 0.5. */ - -static long double -lg_cospi (long double x) -{ - if (x <= 0.25L) - return __cosl (M_PIl * x); - else - return __sinl (M_PIl * (0.5L - x)); -} - -/* Compute cot (pi * X) for -0.25 <= X <= 0.5. */ - -static long double -lg_cotpi (long double x) -{ - return lg_cospi (x) / lg_sinpi (x); -} - -/* Compute lgamma of a negative argument -48 < X < -2, setting - *SIGNGAMP accordingly. */ - -long double -__lgamma_negl (long double x, int *signgamp) -{ - /* Determine the half-integer region X lies in, handle exact - integers and determine the sign of the result. */ - int i = __floorl (-2 * x); - if ((i & 1) == 0 && i == -2 * x) - return 1.0L / 0.0L; - long double xn = ((i & 1) == 0 ? -i / 2 : (-i - 1) / 2); - i -= 4; - *signgamp = ((i & 2) == 0 ? -1 : 1); - - SET_RESTORE_ROUNDL (FE_TONEAREST); - - /* Expand around the zero X0 = X0_HI + X0_LO. */ - long double x0_hi = lgamma_zeros[i][0], x0_lo = lgamma_zeros[i][1]; - long double xdiff = x - x0_hi - x0_lo; - - /* For arguments in the range -3 to -2, use polynomial - approximations to an adjusted version of the gamma function. */ - if (i < 2) - { - int j = __floorl (-8 * x) - 16; - long double xm = (-33 - 2 * j) * 0.0625L; - long double x_adj = x - xm; - size_t deg = poly_deg[j]; - size_t end = poly_end[j]; - long double g = poly_coeff[end]; - for (size_t j = 1; j <= deg; j++) - g = g * x_adj + poly_coeff[end - j]; - return __log1pl (g * xdiff / (x - xn)); - } - - /* The result we want is log (sinpi (X0) / sinpi (X)) - + log (gamma (1 - X0) / gamma (1 - X)). */ - long double x_idiff = fabsl (xn - x), x0_idiff = fabsl (xn - x0_hi - x0_lo); - long double log_sinpi_ratio; - if (x0_idiff < x_idiff * 0.5L) - /* Use log not log1p to avoid inaccuracy from log1p of arguments - close to -1. */ - log_sinpi_ratio = __ieee754_logl (lg_sinpi (x0_idiff) - / lg_sinpi (x_idiff)); - else - { - /* Use log1p not log to avoid inaccuracy from log of arguments - close to 1. X0DIFF2 has positive sign if X0 is further from - XN than X is from XN, negative sign otherwise. */ - long double x0diff2 = ((i & 1) == 0 ? xdiff : -xdiff) * 0.5L; - long double sx0d2 = lg_sinpi (x0diff2); - long double cx0d2 = lg_cospi (x0diff2); - log_sinpi_ratio = __log1pl (2 * sx0d2 - * (-sx0d2 + cx0d2 * lg_cotpi (x_idiff))); - } - - long double log_gamma_ratio; - long double y0 = 1 - x0_hi; - long double y0_eps = -x0_hi + (1 - y0) - x0_lo; - long double y = 1 - x; - long double y_eps = -x + (1 - y); - /* We now wish to compute LOG_GAMMA_RATIO - = log (gamma (Y0 + Y0_EPS) / gamma (Y + Y_EPS)). XDIFF - accurately approximates the difference Y0 + Y0_EPS - Y - - Y_EPS. Use Stirling's approximation. First, we may need to - adjust into the range where Stirling's approximation is - sufficiently accurate. */ - long double log_gamma_adj = 0; - if (i < 18) - { - int n_up = (19 - i) / 2; - long double ny0, ny0_eps, ny, ny_eps; - ny0 = y0 + n_up; - ny0_eps = y0 - (ny0 - n_up) + y0_eps; - y0 = ny0; - y0_eps = ny0_eps; - ny = y + n_up; - ny_eps = y - (ny - n_up) + y_eps; - y = ny; - y_eps = ny_eps; - long double prodm1 = __lgamma_productl (xdiff, y - n_up, y_eps, n_up); - log_gamma_adj = -__log1pl (prodm1); - } - long double log_gamma_high - = (xdiff * __log1pl ((y0 - e_hi - e_lo + y0_eps) / e_hi) - + (y - 0.5L + y_eps) * __log1pl (xdiff / y) + log_gamma_adj); - /* Compute the sum of (B_2k / 2k(2k-1))(Y0^-(2k-1) - Y^-(2k-1)). */ - long double y0r = 1 / y0, yr = 1 / y; - long double y0r2 = y0r * y0r, yr2 = yr * yr; - long double rdiff = -xdiff / (y * y0); - long double bterm[NCOEFF]; - long double dlast = rdiff, elast = rdiff * yr * (yr + y0r); - bterm[0] = dlast * lgamma_coeff[0]; - for (size_t j = 1; j < NCOEFF; j++) - { - long double dnext = dlast * y0r2 + elast; - long double enext = elast * yr2; - bterm[j] = dnext * lgamma_coeff[j]; - dlast = dnext; - elast = enext; - } - long double log_gamma_low = 0; - for (size_t j = 0; j < NCOEFF; j++) - log_gamma_low += bterm[NCOEFF - 1 - j]; - log_gamma_ratio = log_gamma_high + log_gamma_low; - - return log_sinpi_ratio + log_gamma_ratio; -} diff --git a/sysdeps/ieee754/ldbl-128ibm/lgamma_productl.c b/sysdeps/ieee754/ldbl-128ibm/lgamma_productl.c deleted file mode 100644 index 92c1cffd67..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/lgamma_productl.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Compute a product of 1 + (T/X), 1 + (T/(X+1)), .... - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Compute the product of 1 + (T / (X + X_EPS)), 1 + (T / (X + X_EPS + - 1)), ..., 1 + (T / (X + X_EPS + N - 1)), minus 1. X is such that - all the values X + 1, ..., X + N - 1 are exactly representable, and - X_EPS / X is small enough that factors quadratic in it can be - neglected. */ - -long double -__lgamma_productl (long double t, long double x, long double x_eps, int n) -{ - long double x_full = x + x_eps; - long double ret = 0; - for (int i = 0; i < n; i++) - /* FIXME: no extra precision used. */ - ret += (t / (x_full + i)) * (1 + ret); - return ret; -} diff --git a/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h b/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h deleted file mode 100644 index 8f2984e924..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h +++ /dev/null @@ -1,290 +0,0 @@ -/* Manipulation of the bit representation of 'long double' quantities. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_LDBL_H_ -#define _MATH_LDBL_H_ 1 - -#include -#include - -/* To suit our callers we return *hi64 and *lo64 as if they came from - an ieee854 112 bit mantissa, that is, 48 bits in *hi64 (plus one - implicit bit) and 64 bits in *lo64. */ - -static inline void -ldbl_extract_mantissa (int64_t *hi64, uint64_t *lo64, int *exp, long double x) -{ - /* We have 105 bits of mantissa plus one implicit digit. Since - 106 bits are representable we use the first implicit digit for - the number before the decimal point and the second implicit bit - as bit 53 of the mantissa. */ - uint64_t hi, lo; - union ibm_extended_long_double u; - - u.ld = x; - *exp = u.d[0].ieee.exponent - IEEE754_DOUBLE_BIAS; - - lo = ((uint64_t) u.d[1].ieee.mantissa0 << 32) | u.d[1].ieee.mantissa1; - hi = ((uint64_t) u.d[0].ieee.mantissa0 << 32) | u.d[0].ieee.mantissa1; - - if (u.d[0].ieee.exponent != 0) - { - int ediff; - - /* If not a denormal or zero then we have an implicit 53rd bit. */ - hi |= (uint64_t) 1 << 52; - - if (u.d[1].ieee.exponent != 0) - lo |= (uint64_t) 1 << 52; - else - /* A denormal is to be interpreted as having a biased exponent - of 1. */ - lo = lo << 1; - - /* We are going to shift 4 bits out of hi later, because we only - want 48 bits in *hi64. That means we want 60 bits in lo, but - we currently only have 53. Shift the value up. */ - lo = lo << 7; - - /* The lower double is normalized separately from the upper. - We may need to adjust the lower mantissa to reflect this. - The difference between the exponents can be larger than 53 - when the low double is much less than 1ULP of the upper - (in which case there are significant bits, all 0's or all - 1's, between the two significands). The difference between - the exponents can be less than 53 when the upper double - exponent is nearing its minimum value (in which case the low - double is denormal ie. has an exponent of zero). */ - ediff = u.d[0].ieee.exponent - u.d[1].ieee.exponent - 53; - if (ediff > 0) - { - if (ediff < 64) - lo = lo >> ediff; - else - lo = 0; - } - else if (ediff < 0) - lo = lo << -ediff; - - if (u.d[0].ieee.negative != u.d[1].ieee.negative - && lo != 0) - { - hi--; - lo = ((uint64_t) 1 << 60) - lo; - if (hi < (uint64_t) 1 << 52) - { - /* We have a borrow from the hidden bit, so shift left 1. */ - hi = (hi << 1) | (lo >> 59); - lo = (((uint64_t) 1 << 60) - 1) & (lo << 1); - *exp = *exp - 1; - } - } - } - else - /* If the larger magnitude double is denormal then the smaller - one must be zero. */ - hi = hi << 1; - - *lo64 = (hi << 60) | lo; - *hi64 = hi >> 4; -} - -static inline long double -ldbl_insert_mantissa (int sign, int exp, int64_t hi64, uint64_t lo64) -{ - union ibm_extended_long_double u; - int expnt2; - uint64_t hi, lo; - - u.d[0].ieee.negative = sign; - u.d[1].ieee.negative = sign; - u.d[0].ieee.exponent = exp + IEEE754_DOUBLE_BIAS; - u.d[1].ieee.exponent = 0; - expnt2 = exp - 53 + IEEE754_DOUBLE_BIAS; - - /* Expect 113 bits (112 bits + hidden) right justified in two longs. - The low order 53 bits (52 + hidden) go into the lower double */ - lo = (lo64 >> 7) & (((uint64_t) 1 << 53) - 1); - /* The high order 53 bits (52 + hidden) go into the upper double */ - hi = lo64 >> 60; - hi |= hi64 << 4; - - if (lo != 0) - { - int lzcount; - - /* hidden bit of low double controls rounding of the high double. - If hidden is '1' and either the explicit mantissa is non-zero - or hi is odd, then round up hi and adjust lo (2nd mantissa) - plus change the sign of the low double to compensate. */ - if ((lo & ((uint64_t) 1 << 52)) != 0 - && ((hi & 1) != 0 || (lo & (((uint64_t) 1 << 52) - 1)) != 0)) - { - hi++; - if ((hi & ((uint64_t) 1 << 53)) != 0) - { - hi = hi >> 1; - u.d[0].ieee.exponent++; - } - u.d[1].ieee.negative = !sign; - lo = ((uint64_t) 1 << 53) - lo; - } - - /* Normalize the low double. Shift the mantissa left until - the hidden bit is '1' and adjust the exponent accordingly. */ - - if (sizeof (lo) == sizeof (long)) - lzcount = __builtin_clzl (lo); - else if ((lo >> 32) != 0) - lzcount = __builtin_clzl ((long) (lo >> 32)); - else - lzcount = __builtin_clzl ((long) lo) + 32; - lzcount = lzcount - (64 - 53); - lo <<= lzcount; - expnt2 -= lzcount; - - if (expnt2 >= 1) - /* Not denormal. */ - u.d[1].ieee.exponent = expnt2; - else - { - /* Is denormal. Note that biased exponent of 0 is treated - as if it was 1, hence the extra shift. */ - if (expnt2 > -53) - lo >>= 1 - expnt2; - else - lo = 0; - } - } - else - u.d[1].ieee.negative = 0; - - u.d[1].ieee.mantissa1 = lo; - u.d[1].ieee.mantissa0 = lo >> 32; - u.d[0].ieee.mantissa1 = hi; - u.d[0].ieee.mantissa0 = hi >> 32; - return u.ld; -} - -/* Handy utility functions to pack/unpack/cononicalize and find the nearbyint - of long double implemented as double double. */ -static inline long double -default_ldbl_pack (double a, double aa) -{ - union ibm_extended_long_double u; - u.d[0].d = a; - u.d[1].d = aa; - return u.ld; -} - -static inline void -default_ldbl_unpack (long double l, double *a, double *aa) -{ - union ibm_extended_long_double u; - u.ld = l; - *a = u.d[0].d; - *aa = u.d[1].d; -} - -#ifndef ldbl_pack -# define ldbl_pack default_ldbl_pack -#endif -#ifndef ldbl_unpack -# define ldbl_unpack default_ldbl_unpack -#endif - -/* Extract high double. */ -#define ldbl_high(x) ((double) x) - -/* Convert a finite long double to canonical form. - Does not handle +/-Inf properly. */ -static inline void -ldbl_canonicalize (double *a, double *aa) -{ - double xh, xl; - - xh = *a + *aa; - xl = (*a - xh) + *aa; - *a = xh; - *aa = xl; -} - -/* Simple inline nearbyint (double) function. - Only works in the default rounding mode - but is useful in long double rounding functions. */ -static inline double -ldbl_nearbyint (double a) -{ - double two52 = 0x1p52; - - if (__glibc_likely ((__builtin_fabs (a) < two52))) - { - if (__glibc_likely ((a > 0.0))) - { - a += two52; - a -= two52; - } - else if (__glibc_likely ((a < 0.0))) - { - a = two52 - a; - a = -(a - two52); - } - } - return a; -} - -/* Canonicalize a result from an integer rounding function, in any - rounding mode. *A and *AA are finite and integers, with *A being - nonzero; if the result is not already canonical, *AA is plus or - minus a power of 2 that does not exceed the least set bit in - *A. */ -static inline void -ldbl_canonicalize_int (double *a, double *aa) -{ - /* Previously we used EXTRACT_WORDS64 from math_private.h, but in order - to avoid including internal headers we duplicate that code here. */ - uint64_t ax, aax; - union { double value; uint64_t word; } extractor; - extractor.value = *a; - ax = extractor.word; - extractor.value = *aa; - aax = extractor.word; - - int expdiff = ((ax >> 52) & 0x7ff) - ((aax >> 52) & 0x7ff); - if (expdiff <= 53) - { - if (expdiff == 53) - { - /* Half way between two double values; noncanonical iff the - low bit of A's mantissa is 1. */ - if ((ax & 1) != 0) - { - *a += 2 * *aa; - *aa = -*aa; - } - } - else - { - /* The sum can be represented in a single double. */ - *a += *aa; - *aa = 0; - } - } -} - -#endif /* math_ldbl.h */ diff --git a/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c b/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c deleted file mode 100644 index 92b28b8b5d..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Need to set this when including gmp headers after system headers. */ -#define HAVE_ALLOCA 1 - -#include "gmp.h" -#include "gmp-impl.h" - -/* Convert a multi-precision integer of the needed number of bits (106 - for long double) and an integral power of two to a `long double' in - IBM extended format. */ - -long double -__mpn_construct_long_double (mp_srcptr frac_ptr, int expt, int sign) -{ - union ibm_extended_long_double u; - unsigned long lzcount; - unsigned long long hi, lo; - int exponent2; - - u.d[0].ieee.negative = sign; - u.d[1].ieee.negative = sign; - u.d[0].ieee.exponent = expt + IEEE754_DOUBLE_BIAS; - u.d[1].ieee.exponent = 0; - exponent2 = expt - 53 + IEEE754_DOUBLE_BIAS; - -#if BITS_PER_MP_LIMB == 32 - /* The low order 53 bits (52 + hidden) go into the lower double */ - lo = frac_ptr[0]; - lo |= (frac_ptr[1] & ((1LL << (53 - 32)) - 1)) << 32; - /* The high order 53 bits (52 + hidden) go into the upper double */ - hi = (frac_ptr[1] >> (53 - 32)) & ((1 << 11) - 1); - hi |= ((unsigned long long) frac_ptr[2]) << 11; - hi |= ((unsigned long long) frac_ptr[3]) << (32 + 11); -#elif BITS_PER_MP_LIMB == 64 - /* The low order 53 bits (52 + hidden) go into the lower double */ - lo = frac_ptr[0] & (((mp_limb_t) 1 << 53) - 1); - /* The high order 53 bits (52 + hidden) go into the upper double */ - hi = (frac_ptr[0] >> 53) & (((mp_limb_t) 1 << 11) - 1); - hi |= (frac_ptr[1] << 11); -#else - #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" -#endif - - if ((hi & (1LL << 52)) == 0 && (hi | lo) != 0) - { - /* denormal number */ - unsigned long long val = hi ? hi : lo; - - if (sizeof (val) == sizeof (long)) - lzcount = __builtin_clzl (val); - else if ((val >> 32) != 0) - lzcount = __builtin_clzl ((long) (val >> 32)); - else - lzcount = __builtin_clzl ((long) val) + 32; - if (hi) - lzcount = lzcount - (64 - 53); - else - lzcount = lzcount + 53 - (64 - 53); - - if (lzcount > u.d[0].ieee.exponent) - { - lzcount = u.d[0].ieee.exponent; - u.d[0].ieee.exponent = 0; - exponent2 -= lzcount; - } - else - { - u.d[0].ieee.exponent -= (lzcount - 1); - exponent2 -= (lzcount - 1); - } - - if (lzcount <= 53) - { - hi = (hi << lzcount) | (lo >> (53 - lzcount)); - lo = (lo << lzcount) & ((1LL << 53) - 1); - } - else - { - hi = lo << (lzcount - 53); - lo = 0; - } - } - - if (lo != 0) - { - /* hidden bit of low double controls rounding of the high double. - If hidden is '1' and either the explicit mantissa is non-zero - or hi is odd, then round up hi and adjust lo (2nd mantissa) - plus change the sign of the low double to compensate. */ - if ((lo & (1LL << 52)) != 0 - && ((hi & 1) != 0 || (lo & ((1LL << 52) - 1)) != 0)) - { - hi++; - if ((hi & (1LL << 53)) != 0) - { - hi >>= 1; - u.d[0].ieee.exponent++; - if (u.d[0].ieee.exponent == IEEE754_DOUBLE_BIAS + DBL_MAX_EXP) - { - /* Overflow. The appropriate overflowed result must - be produced (if an infinity, that means the low - part must be zero). */ - __set_errno (ERANGE); - return (sign ? -LDBL_MAX : LDBL_MAX) * LDBL_MAX; - } - } - u.d[1].ieee.negative = !sign; - lo = (1LL << 53) - lo; - } - - /* Normalize the low double. Shift the mantissa left until - the hidden bit is '1' and adjust the exponent accordingly. */ - - if (sizeof (lo) == sizeof (long)) - lzcount = __builtin_clzl (lo); - else if ((lo >> 32) != 0) - lzcount = __builtin_clzl ((long) (lo >> 32)); - else - lzcount = __builtin_clzl ((long) lo) + 32; - lzcount = lzcount - (64 - 53); - lo <<= lzcount; - exponent2 -= lzcount; - - if (exponent2 > 0) - u.d[1].ieee.exponent = exponent2; - else if (exponent2 > -53) - lo >>= 1 - exponent2; - else - lo = 0; - } - else - u.d[1].ieee.negative = 0; - - u.d[1].ieee.mantissa1 = lo; - u.d[1].ieee.mantissa0 = lo >> 32; - u.d[0].ieee.mantissa1 = hi; - u.d[0].ieee.mantissa0 = hi >> 32; - - return u.ld; -} diff --git a/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c b/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c deleted file mode 100644 index 2f87ec17cc..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c +++ /dev/null @@ -1,139 +0,0 @@ -/* Print floating point number in hexadecimal notation according to ISO C99. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define PRINT_FPHEX_LONG_DOUBLE \ -do { \ - /* We have 105 bits of mantissa plus one implicit digit. Since \ - 106 bits are representable without rest using hexadecimal \ - digits we use only the implicit digits for the number before \ - the decimal point. */ \ - unsigned long long int num0, num1; \ - unsigned long long hi, lo; \ - int ediff; \ - union ibm_extended_long_double u; \ - u.ld = fpnum.ldbl; \ - \ - assert (sizeof (long double) == 16); \ - \ - lo = ((long long)u.d[1].ieee.mantissa0 << 32) | u.d[1].ieee.mantissa1; \ - hi = ((long long)u.d[0].ieee.mantissa0 << 32) | u.d[0].ieee.mantissa1; \ - lo <<= 7; /* pre-shift lo to match ieee854. */ \ - /* If the lower double is not a denormal or zero then set the hidden \ - 53rd bit. */ \ - if (u.d[1].ieee.exponent != 0) \ - lo |= (1ULL << (52 + 7)); \ - else \ - lo <<= 1; \ - /* The lower double is normalized separately from the upper. We \ - may need to adjust the lower manitissa to reflect this. */ \ - ediff = u.d[0].ieee.exponent - u.d[1].ieee.exponent - 53; \ - if (ediff > 63) \ - lo = 0; \ - else if (ediff > 0) \ - lo = lo >> ediff; \ - else if (ediff < 0) \ - lo = lo << -ediff; \ - if (u.d[0].ieee.negative != u.d[1].ieee.negative \ - && lo != 0) \ - { \ - lo = (1ULL << 60) - lo; \ - if (hi == 0L) \ - { \ - /* we have a borrow from the hidden bit, so shift left 1. */ \ - hi = 0xffffffffffffeLL | (lo >> 59); \ - lo = 0xfffffffffffffffLL & (lo << 1); \ - u.d[0].ieee.exponent--; \ - } \ - else \ - hi--; \ - } \ - num1 = (hi << 60) | lo; \ - num0 = hi >> 4; \ - \ - zero_mantissa = (num0|num1) == 0; \ - \ - if (sizeof (unsigned long int) > 6) \ - { \ - numstr = _itoa_word (num1, numbuf + sizeof numbuf, 16, \ - info->spec == 'A'); \ - wnumstr = _itowa_word (num1, \ - wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t),\ - 16, info->spec == 'A'); \ - } \ - else \ - { \ - numstr = _itoa (num1, numbuf + sizeof numbuf, 16, \ - info->spec == 'A'); \ - wnumstr = _itowa (num1, \ - wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t), \ - 16, info->spec == 'A'); \ - } \ - \ - while (numstr > numbuf + (sizeof numbuf - 64 / 4)) \ - { \ - *--numstr = '0'; \ - *--wnumstr = L'0'; \ - } \ - \ - if (sizeof (unsigned long int) > 6) \ - { \ - numstr = _itoa_word (num0, numstr, 16, info->spec == 'A'); \ - wnumstr = _itowa_word (num0, wnumstr, 16, info->spec == 'A'); \ - } \ - else \ - { \ - numstr = _itoa (num0, numstr, 16, info->spec == 'A'); \ - wnumstr = _itowa (num0, wnumstr, 16, info->spec == 'A'); \ - } \ - \ - /* Fill with zeroes. */ \ - while (numstr > numbuf + (sizeof numbuf - 112 / 4)) \ - { \ - *--numstr = '0'; \ - *--wnumstr = L'0'; \ - } \ - \ - leading = u.d[0].ieee.exponent == 0 ? '0' : '1'; \ - \ - exponent = u.d[0].ieee.exponent; \ - \ - if (exponent == 0) \ - { \ - if (zero_mantissa) \ - expnegative = 0; \ - else \ - { \ - /* This is a denormalized number. */ \ - expnegative = 1; \ - exponent = IEEE754_DOUBLE_BIAS - 1; \ - } \ - } \ - else if (exponent >= IEEE754_DOUBLE_BIAS) \ - { \ - expnegative = 0; \ - exponent -= IEEE754_DOUBLE_BIAS; \ - } \ - else \ - { \ - expnegative = 1; \ - exponent = -(exponent - IEEE754_DOUBLE_BIAS); \ - } \ -} while (0) - -#include diff --git a/sysdeps/ieee754/ldbl-128ibm/s_asinhl.c b/sysdeps/ieee754/ldbl-128ibm/s_asinhl.c deleted file mode 100644 index aa9a9ba213..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_asinhl.c +++ /dev/null @@ -1,63 +0,0 @@ -/* @(#)s_asinh.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_asinh.c,v 1.9 1995/05/12 04:57:37 jtc Exp $"; -#endif - -/* asinh(x) - * Method : - * Based on - * asinh(x) = sign(x) * log [ |x| + sqrt(x*x+1) ] - * we have - * asinh(x) := x if 1+x*x=1, - * := sign(x)*(log(x)+ln2)) for large |x|, else - * := sign(x)*log(2|x|+1/(|x|+sqrt(x*x+1))) if|x|>2, else - * := sign(x)*log1p(|x| + x^2/(1 + sqrt(1+x^2))) - */ - -#include -#include -#include -#include - -static const long double -one = 1.00000000000000000000e+00L, /* 0x3ff0000000000000, 0 */ -ln2 = 0.6931471805599453094172321214581766L, /* 0x3fe62e42fefa39ef, 0x3c7abc9e3b398040 */ -huge= 1.00000000000000000000e+300L; - -long double __asinhl(long double x) -{ - long double t,w; - int64_t hx,ix; - double xhi; - - xhi = ldbl_high (x); - EXTRACT_WORDS64 (hx, xhi); - ix = hx&0x7fffffffffffffffLL; - if(ix>=0x7ff0000000000000LL) return x+x; /* x is inf or NaN */ - if(ix< 0x3c70000000000000LL) { /* |x|<2**-56 */ - math_check_force_underflow (x); - if(huge+x>one) return x; /* return x inexact except 0 */ - } - if(ix>0x4370000000000000LL) { /* |x| > 2**56 */ - w = __ieee754_logl(fabsl(x))+ln2; - } else if (ix>0x4000000000000000LL) { /* 2**56 >= |x| > 2.0 */ - t = fabs(x); - w = __ieee754_logl(2.0*t+one/(__ieee754_sqrtl(x*x+one)+t)); - } else { /* 2.0 >= |x| >= 2**-56 */ - t = x*x; - w =__log1pl(fabsl(x)+t/(one+__ieee754_sqrtl(one+t))); - } - if(hx>0) return w; else return -w; -} -long_double_symbol (libm, __asinhl, asinhl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_atanl.c b/sysdeps/ieee754/ldbl-128ibm/s_atanl.c deleted file mode 100644 index 0560d820ae..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_atanl.c +++ /dev/null @@ -1,250 +0,0 @@ -/* s_atanl.c - * - * Inverse circular tangent for 128-bit long double precision - * (arctangent) - * - * - * - * SYNOPSIS: - * - * long double x, y, atanl(); - * - * y = atanl( x ); - * - * - * - * DESCRIPTION: - * - * Returns radian angle between -pi/2 and +pi/2 whose tangent is x. - * - * The function uses a rational approximation of the form - * t + t^3 P(t^2)/Q(t^2), optimized for |t| < 0.09375. - * - * The argument is reduced using the identity - * arctan x - arctan u = arctan ((x-u)/(1 + ux)) - * and an 83-entry lookup table for arctan u, with u = 0, 1/8, ..., 10.25. - * Use of the table improves the execution speed of the routine. - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -19, 19 4e5 1.7e-34 5.4e-35 - * - * - * WARNING: - * - * This program uses integer operations on bit fields of floating-point - * numbers. It does not work with data structures other than the - * structure assumed. - * - */ - -/* Copyright 2001 by Stephen L. Moshier - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - - -#include -#include -#include -#include - -/* arctan(k/8), k = 0, ..., 82 */ -static const long double atantbl[84] = { - 0.0000000000000000000000000000000000000000E0L, - 1.2435499454676143503135484916387102557317E-1L, /* arctan(0.125) */ - 2.4497866312686415417208248121127581091414E-1L, - 3.5877067027057222039592006392646049977698E-1L, - 4.6364760900080611621425623146121440202854E-1L, - 5.5859931534356243597150821640166127034645E-1L, - 6.4350110879328438680280922871732263804151E-1L, - 7.1882999962162450541701415152590465395142E-1L, - 7.8539816339744830961566084581987572104929E-1L, - 8.4415398611317100251784414827164750652594E-1L, - 8.9605538457134395617480071802993782702458E-1L, - 9.4200004037946366473793717053459358607166E-1L, - 9.8279372324732906798571061101466601449688E-1L, - 1.0191413442663497346383429170230636487744E0L, - 1.0516502125483736674598673120862998296302E0L, - 1.0808390005411683108871567292171998202703E0L, - 1.1071487177940905030170654601785370400700E0L, - 1.1309537439791604464709335155363278047493E0L, - 1.1525719972156675180401498626127513797495E0L, - 1.1722738811284763866005949441337046149712E0L, - 1.1902899496825317329277337748293183376012E0L, - 1.2068173702852525303955115800565576303133E0L, - 1.2220253232109896370417417439225704908830E0L, - 1.2360594894780819419094519711090786987027E0L, - 1.2490457723982544258299170772810901230778E0L, - 1.2610933822524404193139408812473357720101E0L, - 1.2722973952087173412961937498224804940684E0L, - 1.2827408797442707473628852511364955306249E0L, - 1.2924966677897852679030914214070816845853E0L, - 1.3016288340091961438047858503666855921414E0L, - 1.3101939350475556342564376891719053122733E0L, - 1.3182420510168370498593302023271362531155E0L, - 1.3258176636680324650592392104284756311844E0L, - 1.3329603993374458675538498697331558093700E0L, - 1.3397056595989995393283037525895557411039E0L, - 1.3460851583802539310489409282517796256512E0L, - 1.3521273809209546571891479413898128509842E0L, - 1.3578579772154994751124898859640585287459E0L, - 1.3633001003596939542892985278250991189943E0L, - 1.3684746984165928776366381936948529556191E0L, - 1.3734007669450158608612719264449611486510E0L, - 1.3780955681325110444536609641291551522494E0L, - 1.3825748214901258580599674177685685125566E0L, - 1.3868528702577214543289381097042486034883E0L, - 1.3909428270024183486427686943836432060856E0L, - 1.3948567013423687823948122092044222644895E0L, - 1.3986055122719575950126700816114282335732E0L, - 1.4021993871854670105330304794336492676944E0L, - 1.4056476493802697809521934019958079881002E0L, - 1.4089588955564736949699075250792569287156E0L, - 1.4121410646084952153676136718584891599630E0L, - 1.4152014988178669079462550975833894394929E0L, - 1.4181469983996314594038603039700989523716E0L, - 1.4209838702219992566633046424614466661176E0L, - 1.4237179714064941189018190466107297503086E0L, - 1.4263547484202526397918060597281265695725E0L, - 1.4288992721907326964184700745371983590908E0L, - 1.4313562697035588982240194668401779312122E0L, - 1.4337301524847089866404719096698873648610E0L, - 1.4360250423171655234964275337155008780675E0L, - 1.4382447944982225979614042479354815855386E0L, - 1.4403930189057632173997301031392126865694E0L, - 1.4424730991091018200252920599377292525125E0L, - 1.4444882097316563655148453598508037025938E0L, - 1.4464413322481351841999668424758804165254E0L, - 1.4483352693775551917970437843145232637695E0L, - 1.4501726582147939000905940595923466567576E0L, - 1.4519559822271314199339700039142990228105E0L, - 1.4536875822280323362423034480994649820285E0L, - 1.4553696664279718992423082296859928222270E0L, - 1.4570043196511885530074841089245667532358E0L, - 1.4585935117976422128825857356750737658039E0L, - 1.4601391056210009726721818194296893361233E0L, - 1.4616428638860188872060496086383008594310E0L, - 1.4631064559620759326975975316301202111560E0L, - 1.4645314639038178118428450961503371619177E0L, - 1.4659193880646627234129855241049975398470E0L, - 1.4672716522843522691530527207287398276197E0L, - 1.4685896086876430842559640450619880951144E0L, - 1.4698745421276027686510391411132998919794E0L, - 1.4711276743037345918528755717617308518553E0L, - 1.4723501675822635384916444186631899205983E0L, - 1.4735431285433308455179928682541563973416E0L, /* arctan(10.25) */ - 1.5707963267948966192313216916397514420986E0L /* pi/2 */ -}; - - -/* arctan t = t + t^3 p(t^2) / q(t^2) - |t| <= 0.09375 - peak relative error 5.3e-37 */ - -static const long double - p0 = -4.283708356338736809269381409828726405572E1L, - p1 = -8.636132499244548540964557273544599863825E1L, - p2 = -5.713554848244551350855604111031839613216E1L, - p3 = -1.371405711877433266573835355036413750118E1L, - p4 = -8.638214309119210906997318946650189640184E-1L, - q0 = 1.285112506901621042780814422948906537959E2L, - q1 = 3.361907253914337187957855834229672347089E2L, - q2 = 3.180448303864130128268191635189365331680E2L, - q3 = 1.307244136980865800160844625025280344686E2L, - q4 = 2.173623741810414221251136181221172551416E1L; - /* q5 = 1.000000000000000000000000000000000000000E0 */ - - -long double -__atanl (long double x) -{ - int32_t k, sign, lx; - long double t, u, p, q; - double xhi; - - xhi = ldbl_high (x); - EXTRACT_WORDS (k, lx, xhi); - sign = k & 0x80000000; - - /* Check for IEEE special cases. */ - k &= 0x7fffffff; - if (k >= 0x7ff00000) - { - /* NaN. */ - if (((k - 0x7ff00000) | lx) != 0) - return (x + x); - - /* Infinity. */ - if (sign) - return -atantbl[83]; - else - return atantbl[83]; - } - - if (k <= 0x3c800000) /* |x| <= 2**-55. */ - { - math_check_force_underflow (x); - /* Raise inexact. */ - if (1e300L + x > 0.0) - return x; - } - - if (k >= 0x46c00000) /* |x| >= 2**109. */ - { - /* Saturate result to {-,+}pi/2. */ - if (sign) - return -atantbl[83]; - else - return atantbl[83]; - } - - if (sign) - x = -x; - - if (k >= 0x40248000) /* 10.25 */ - { - k = 83; - t = -1.0/x; - } - else - { - /* Index of nearest table element. - Roundoff to integer is asymmetrical to avoid cancellation when t < 0 - (cf. fdlibm). */ - k = 8.0 * x + 0.25; - u = 0.125 * k; - /* Small arctan argument. */ - t = (x - u) / (1.0 + x * u); - } - - /* Arctan of small argument t. */ - u = t * t; - p = ((((p4 * u) + p3) * u + p2) * u + p1) * u + p0; - q = ((((u + q4) * u + q3) * u + q2) * u + q1) * u + q0; - u = t * u * p / q + t; - - /* arctan x = arctan u + arctan t */ - u = atantbl[k] + u; - if (sign) - return (-u); - else - return u; -} - -long_double_symbol (libm, __atanl, atanl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c b/sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c deleted file mode 100644 index 64bfc46414..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Looks like we can use ieee854 s_cbrtl.c as is for IBM extended format. */ -#include -#undef weak_alias -#define weak_alias(n,a) - -#define _Float128 long double -#define L(x) x ## L - -#include -long_double_symbol (libm, __cbrtl, cbrtl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_ceill.c b/sysdeps/ieee754/ldbl-128ibm/s_ceill.c deleted file mode 100644 index c451825c62..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_ceill.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Ceil (round to +inf) long double floating-point values. - IBM extended format long double version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -long double -__ceill (long double x) -{ - double xh, xl, hi, lo; - - ldbl_unpack (x, &xh, &xl); - - /* Return Inf, Nan, +/-0 unchanged. */ - if (__builtin_expect (xh != 0.0 - && __builtin_isless (__builtin_fabs (xh), - __builtin_inf ()), 1)) - { - hi = __ceil (xh); - if (hi != xh) - { - /* The high part is not an integer; the low part does not - affect the result. */ - xh = hi; - xl = 0; - } - else - { - /* The high part is a nonzero integer. */ - lo = __ceil (xl); - xh = hi; - xl = lo; - ldbl_canonicalize_int (&xh, &xl); - } - } - else - /* Quiet signaling NaN arguments. */ - xh += xh; - - return ldbl_pack (xh, xl); -} - -long_double_symbol (libm, __ceill, ceill); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_copysignl.c b/sysdeps/ieee754/ldbl-128ibm/s_copysignl.c deleted file mode 100644 index 3b8ec1a74d..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_copysignl.c +++ /dev/null @@ -1,41 +0,0 @@ -/* s_copysignl.c -- long double version of s_copysign.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * copysignl(long double x, long double y) - * copysignl(x,y) returns a value with the magnitude of x and - * with the sign bit of y. - */ - -#include -#include -#include - -long double __copysignl(long double x, long double y) -{ - if (signbit (x) != signbit (y)) - x = -x; - return x; -} - -#if IS_IN (libm) -long_double_symbol (libm, __copysignl, copysignl); -#else -long_double_symbol (libc, __copysignl, copysignl); -#endif diff --git a/sysdeps/ieee754/ldbl-128ibm/s_cosl.c b/sysdeps/ieee754/ldbl-128ibm/s_cosl.c deleted file mode 100644 index 54c6cc77d2..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_cosl.c +++ /dev/null @@ -1,88 +0,0 @@ -/* s_cosl.c -- long double version of s_cos.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* cosl(x) - * Return cosine function of x. - * - * kernel function: - * __kernel_sinl ... sine function on [-pi/4,pi/4] - * __kernel_cosl ... cosine function on [-pi/4,pi/4] - * __ieee754_rem_pio2l ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include -#include -#include -#include - -long double __cosl(long double x) -{ - long double y[2],z=0.0L; - int64_t n, ix; - double xhi; - - /* High word of x. */ - xhi = ldbl_high (x); - EXTRACT_WORDS64 (ix, xhi); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffffffffffffLL; - if(ix <= 0x3fe921fb54442d18LL) - return __kernel_cosl(x,z); - - /* cos(Inf or NaN) is NaN */ - else if (ix>=0x7ff0000000000000LL) { - if (ix == 0x7ff0000000000000LL) - __set_errno (EDOM); - return x-x; - } - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2l(x,y); - switch(n&3) { - case 0: - return __kernel_cosl(y[0],y[1]); - case 1: - return -__kernel_sinl(y[0],y[1],1); - case 2: - return -__kernel_cosl(y[0],y[1]); - default: - return __kernel_sinl(y[0],y[1],1); - } - } -} -long_double_symbol (libm, __cosl, cosl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_erfl.c b/sysdeps/ieee754/ldbl-128ibm/s_erfl.c deleted file mode 100644 index 7b761b0afa..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_erfl.c +++ /dev/null @@ -1,970 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Modifications and expansions for 128-bit long double are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* double erf(double x) - * double erfc(double x) - * x - * 2 |\ - * erf(x) = --------- | exp(-t*t)dt - * sqrt(pi) \| - * 0 - * - * erfc(x) = 1-erf(x) - * Note that - * erf(-x) = -erf(x) - * erfc(-x) = 2 - erfc(x) - * - * Method: - * 1. erf(x) = x + x*R(x^2) for |x| in [0, 7/8] - * Remark. The formula is derived by noting - * erf(x) = (2/sqrt(pi))*(x - x^3/3 + x^5/10 - x^7/42 + ....) - * and that - * 2/sqrt(pi) = 1.128379167095512573896158903121545171688 - * is close to one. - * - * 1a. erf(x) = 1 - erfc(x), for |x| > 1.0 - * erfc(x) = 1 - erf(x) if |x| < 1/4 - * - * 2. For |x| in [7/8, 1], let s = |x| - 1, and - * c = 0.84506291151 rounded to single (24 bits) - * erf(s + c) = sign(x) * (c + P1(s)/Q1(s)) - * Remark: here we use the taylor series expansion at x=1. - * erf(1+s) = erf(1) + s*Poly(s) - * = 0.845.. + P1(s)/Q1(s) - * Note that |P1/Q1|< 0.078 for x in [0.84375,1.25] - * - * 3. For x in [1/4, 5/4], - * erfc(s + const) = erfc(const) + s P1(s)/Q1(s) - * for const = 1/4, 3/8, ..., 9/8 - * and 0 <= s <= 1/8 . - * - * 4. For x in [5/4, 107], - * erfc(x) = (1/x)*exp(-x*x-0.5625 + R(z)) - * z=1/x^2 - * The interval is partitioned into several segments - * of width 1/8 in 1/x. - * erf(x) = 1.0 - erfc(x) if x < 25.6283 else - * erf(x) = sign(x)*(1.0 - tiny) - * - * Note1: - * To compute exp(-x*x-0.5625+R/S), let s be a single - * precision number and s := x; then - * -x*x = -s*s + (s-x)*(s+x) - * exp(-x*x-0.5626+R/S) = - * exp(-s*s-0.5625)*exp((s-x)*(s+x)+R/S); - * Note2: - * Here 4 and 5 make use of the asymptotic series - * exp(-x*x) - * erfc(x) ~ ---------- * ( 1 + Poly(1/x^2) ) - * x*sqrt(pi) - * - * Note3: - * For x higher than 25.6283, erf(x) underflows. - * - * 5. For inf > x >= 107 - * erf(x) = sign(x) *(1 - tiny) (raise inexact) - * erfc(x) = tiny*tiny (raise underflow) if x > 0 - * = 2 - tiny if x<0 - * - * 7. Special case: - * erf(0) = 0, erf(inf) = 1, erf(-inf) = -1, - * erfc(0) = 1, erfc(inf) = 0, erfc(-inf) = 2, - * erfc/erf(NaN) is NaN - */ - -#include -#include -#include -#include -#include -#include - -/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */ - -static long double -neval (long double x, const long double *p, int n) -{ - long double y; - - p += n; - y = *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - -/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */ - -static long double -deval (long double x, const long double *p, int n) -{ - long double y; - - p += n; - y = x + *p--; - do - { - y = y * x + *p--; - } - while (--n > 0); - return y; -} - - - -static const long double -tiny = 1e-300L, - one = 1.0L, - two = 2.0L, - /* 2/sqrt(pi) - 1 */ - efx = 1.2837916709551257389615890312154517168810E-1L; - - -/* erf(x) = x + x R(x^2) - 0 <= x <= 7/8 - Peak relative error 1.8e-35 */ -#define NTN1 8 -static const long double TN1[NTN1 + 1] = -{ - -3.858252324254637124543172907442106422373E10L, - 9.580319248590464682316366876952214879858E10L, - 1.302170519734879977595901236693040544854E10L, - 2.922956950426397417800321486727032845006E9L, - 1.764317520783319397868923218385468729799E8L, - 1.573436014601118630105796794840834145120E7L, - 4.028077380105721388745632295157816229289E5L, - 1.644056806467289066852135096352853491530E4L, - 3.390868480059991640235675479463287886081E1L -}; -#define NTD1 8 -static const long double TD1[NTD1 + 1] = -{ - -3.005357030696532927149885530689529032152E11L, - -1.342602283126282827411658673839982164042E11L, - -2.777153893355340961288511024443668743399E10L, - -3.483826391033531996955620074072768276974E9L, - -2.906321047071299585682722511260895227921E8L, - -1.653347985722154162439387878512427542691E7L, - -6.245520581562848778466500301865173123136E5L, - -1.402124304177498828590239373389110545142E4L, - -1.209368072473510674493129989468348633579E2L -/* 1.0E0 */ -}; - - -/* erf(z+1) = erf_const + P(z)/Q(z) - -.125 <= z <= 0 - Peak relative error 7.3e-36 */ -static const long double erf_const = 0.845062911510467529296875L; -#define NTN2 8 -static const long double TN2[NTN2 + 1] = -{ - -4.088889697077485301010486931817357000235E1L, - 7.157046430681808553842307502826960051036E3L, - -2.191561912574409865550015485451373731780E3L, - 2.180174916555316874988981177654057337219E3L, - 2.848578658049670668231333682379720943455E2L, - 1.630362490952512836762810462174798925274E2L, - 6.317712353961866974143739396865293596895E0L, - 2.450441034183492434655586496522857578066E1L, - 5.127662277706787664956025545897050896203E-1L -}; -#define NTD2 8 -static const long double TD2[NTD2 + 1] = -{ - 1.731026445926834008273768924015161048885E4L, - 1.209682239007990370796112604286048173750E4L, - 1.160950290217993641320602282462976163857E4L, - 5.394294645127126577825507169061355698157E3L, - 2.791239340533632669442158497532521776093E3L, - 8.989365571337319032943005387378993827684E2L, - 2.974016493766349409725385710897298069677E2L, - 6.148192754590376378740261072533527271947E1L, - 1.178502892490738445655468927408440847480E1L - /* 1.0E0 */ -}; - - -/* erfc(x + 0.25) = erfc(0.25) + x R(x) - 0 <= x < 0.125 - Peak relative error 1.4e-35 */ -#define NRNr13 8 -static const long double RNr13[NRNr13 + 1] = -{ - -2.353707097641280550282633036456457014829E3L, - 3.871159656228743599994116143079870279866E2L, - -3.888105134258266192210485617504098426679E2L, - -2.129998539120061668038806696199343094971E1L, - -8.125462263594034672468446317145384108734E1L, - 8.151549093983505810118308635926270319660E0L, - -5.033362032729207310462422357772568553670E0L, - -4.253956621135136090295893547735851168471E-2L, - -8.098602878463854789780108161581050357814E-2L -}; -#define NRDr13 7 -static const long double RDr13[NRDr13 + 1] = -{ - 2.220448796306693503549505450626652881752E3L, - 1.899133258779578688791041599040951431383E2L, - 1.061906712284961110196427571557149268454E3L, - 7.497086072306967965180978101974566760042E1L, - 2.146796115662672795876463568170441327274E2L, - 1.120156008362573736664338015952284925592E1L, - 2.211014952075052616409845051695042741074E1L, - 6.469655675326150785692908453094054988938E-1L - /* 1.0E0 */ -}; -/* erfc(0.25) = C13a + C13b to extra precision. */ -static const long double C13a = 0.723663330078125L; -static const long double C13b = 1.0279753638067014931732235184287934646022E-5L; - - -/* erfc(x + 0.375) = erfc(0.375) + x R(x) - 0 <= x < 0.125 - Peak relative error 1.2e-35 */ -#define NRNr14 8 -static const long double RNr14[NRNr14 + 1] = -{ - -2.446164016404426277577283038988918202456E3L, - 6.718753324496563913392217011618096698140E2L, - -4.581631138049836157425391886957389240794E2L, - -2.382844088987092233033215402335026078208E1L, - -7.119237852400600507927038680970936336458E1L, - 1.313609646108420136332418282286454287146E1L, - -6.188608702082264389155862490056401365834E0L, - -2.787116601106678287277373011101132659279E-2L, - -2.230395570574153963203348263549700967918E-2L -}; -#define NRDr14 7 -static const long double RDr14[NRDr14 + 1] = -{ - 2.495187439241869732696223349840963702875E3L, - 2.503549449872925580011284635695738412162E2L, - 1.159033560988895481698051531263861842461E3L, - 9.493751466542304491261487998684383688622E1L, - 2.276214929562354328261422263078480321204E2L, - 1.367697521219069280358984081407807931847E1L, - 2.276988395995528495055594829206582732682E1L, - 7.647745753648996559837591812375456641163E-1L - /* 1.0E0 */ -}; -/* erfc(0.375) = C14a + C14b to extra precision. */ -static const long double C14a = 0.5958709716796875L; -static const long double C14b = 1.2118885490201676174914080878232469565953E-5L; - -/* erfc(x + 0.5) = erfc(0.5) + x R(x) - 0 <= x < 0.125 - Peak relative error 4.7e-36 */ -#define NRNr15 8 -static const long double RNr15[NRNr15 + 1] = -{ - -2.624212418011181487924855581955853461925E3L, - 8.473828904647825181073831556439301342756E2L, - -5.286207458628380765099405359607331669027E2L, - -3.895781234155315729088407259045269652318E1L, - -6.200857908065163618041240848728398496256E1L, - 1.469324610346924001393137895116129204737E1L, - -6.961356525370658572800674953305625578903E0L, - 5.145724386641163809595512876629030548495E-3L, - 1.990253655948179713415957791776180406812E-2L -}; -#define NRDr15 7 -static const long double RDr15[NRDr15 + 1] = -{ - 2.986190760847974943034021764693341524962E3L, - 5.288262758961073066335410218650047725985E2L, - 1.363649178071006978355113026427856008978E3L, - 1.921707975649915894241864988942255320833E2L, - 2.588651100651029023069013885900085533226E2L, - 2.628752920321455606558942309396855629459E1L, - 2.455649035885114308978333741080991380610E1L, - 1.378826653595128464383127836412100939126E0L - /* 1.0E0 */ -}; -/* erfc(0.5) = C15a + C15b to extra precision. */ -static const long double C15a = 0.4794921875L; -static const long double C15b = 7.9346869534623172533461080354712635484242E-6L; - -/* erfc(x + 0.625) = erfc(0.625) + x R(x) - 0 <= x < 0.125 - Peak relative error 5.1e-36 */ -#define NRNr16 8 -static const long double RNr16[NRNr16 + 1] = -{ - -2.347887943200680563784690094002722906820E3L, - 8.008590660692105004780722726421020136482E2L, - -5.257363310384119728760181252132311447963E2L, - -4.471737717857801230450290232600243795637E1L, - -4.849540386452573306708795324759300320304E1L, - 1.140885264677134679275986782978655952843E1L, - -6.731591085460269447926746876983786152300E0L, - 1.370831653033047440345050025876085121231E-1L, - 2.022958279982138755020825717073966576670E-2L, -}; -#define NRDr16 7 -static const long double RDr16[NRDr16 + 1] = -{ - 3.075166170024837215399323264868308087281E3L, - 8.730468942160798031608053127270430036627E2L, - 1.458472799166340479742581949088453244767E3L, - 3.230423687568019709453130785873540386217E2L, - 2.804009872719893612081109617983169474655E2L, - 4.465334221323222943418085830026979293091E1L, - 2.612723259683205928103787842214809134746E1L, - 2.341526751185244109722204018543276124997E0L, - /* 1.0E0 */ -}; -/* erfc(0.625) = C16a + C16b to extra precision. */ -static const long double C16a = 0.3767547607421875L; -static const long double C16b = 4.3570693945275513594941232097252997287766E-6L; - -/* erfc(x + 0.75) = erfc(0.75) + x R(x) - 0 <= x < 0.125 - Peak relative error 1.7e-35 */ -#define NRNr17 8 -static const long double RNr17[NRNr17 + 1] = -{ - -1.767068734220277728233364375724380366826E3L, - 6.693746645665242832426891888805363898707E2L, - -4.746224241837275958126060307406616817753E2L, - -2.274160637728782675145666064841883803196E1L, - -3.541232266140939050094370552538987982637E1L, - 6.988950514747052676394491563585179503865E0L, - -5.807687216836540830881352383529281215100E0L, - 3.631915988567346438830283503729569443642E-1L, - -1.488945487149634820537348176770282391202E-2L -}; -#define NRDr17 7 -static const long double RDr17[NRDr17 + 1] = -{ - 2.748457523498150741964464942246913394647E3L, - 1.020213390713477686776037331757871252652E3L, - 1.388857635935432621972601695296561952738E3L, - 3.903363681143817750895999579637315491087E2L, - 2.784568344378139499217928969529219886578E2L, - 5.555800830216764702779238020065345401144E1L, - 2.646215470959050279430447295801291168941E1L, - 2.984905282103517497081766758550112011265E0L, - /* 1.0E0 */ -}; -/* erfc(0.75) = C17a + C17b to extra precision. */ -static const long double C17a = 0.2888336181640625L; -static const long double C17b = 1.0748182422368401062165408589222625794046E-5L; - - -/* erfc(x + 0.875) = erfc(0.875) + x R(x) - 0 <= x < 0.125 - Peak relative error 2.2e-35 */ -#define NRNr18 8 -static const long double RNr18[NRNr18 + 1] = -{ - -1.342044899087593397419622771847219619588E3L, - 6.127221294229172997509252330961641850598E2L, - -4.519821356522291185621206350470820610727E2L, - 1.223275177825128732497510264197915160235E1L, - -2.730789571382971355625020710543532867692E1L, - 4.045181204921538886880171727755445395862E0L, - -4.925146477876592723401384464691452700539E0L, - 5.933878036611279244654299924101068088582E-1L, - -5.557645435858916025452563379795159124753E-2L -}; -#define NRDr18 7 -static const long double RDr18[NRDr18 + 1] = -{ - 2.557518000661700588758505116291983092951E3L, - 1.070171433382888994954602511991940418588E3L, - 1.344842834423493081054489613250688918709E3L, - 4.161144478449381901208660598266288188426E2L, - 2.763670252219855198052378138756906980422E2L, - 5.998153487868943708236273854747564557632E1L, - 2.657695108438628847733050476209037025318E1L, - 3.252140524394421868923289114410336976512E0L, - /* 1.0E0 */ -}; -/* erfc(0.875) = C18a + C18b to extra precision. */ -static const long double C18a = 0.215911865234375L; -static const long double C18b = 1.3073705765341685464282101150637224028267E-5L; - -/* erfc(x + 1.0) = erfc(1.0) + x R(x) - 0 <= x < 0.125 - Peak relative error 1.6e-35 */ -#define NRNr19 8 -static const long double RNr19[NRNr19 + 1] = -{ - -1.139180936454157193495882956565663294826E3L, - 6.134903129086899737514712477207945973616E2L, - -4.628909024715329562325555164720732868263E2L, - 4.165702387210732352564932347500364010833E1L, - -2.286979913515229747204101330405771801610E1L, - 1.870695256449872743066783202326943667722E0L, - -4.177486601273105752879868187237000032364E0L, - 7.533980372789646140112424811291782526263E-1L, - -8.629945436917752003058064731308767664446E-2L -}; -#define NRDr19 7 -static const long double RDr19[NRDr19 + 1] = -{ - 2.744303447981132701432716278363418643778E3L, - 1.266396359526187065222528050591302171471E3L, - 1.466739461422073351497972255511919814273E3L, - 4.868710570759693955597496520298058147162E2L, - 2.993694301559756046478189634131722579643E2L, - 6.868976819510254139741559102693828237440E1L, - 2.801505816247677193480190483913753613630E1L, - 3.604439909194350263552750347742663954481E0L, - /* 1.0E0 */ -}; -/* erfc(1.0) = C19a + C19b to extra precision. */ -static const long double C19a = 0.15728759765625L; -static const long double C19b = 1.1609394035130658779364917390740703933002E-5L; - -/* erfc(x + 1.125) = erfc(1.125) + x R(x) - 0 <= x < 0.125 - Peak relative error 3.6e-36 */ -#define NRNr20 8 -static const long double RNr20[NRNr20 + 1] = -{ - -9.652706916457973956366721379612508047640E2L, - 5.577066396050932776683469951773643880634E2L, - -4.406335508848496713572223098693575485978E2L, - 5.202893466490242733570232680736966655434E1L, - -1.931311847665757913322495948705563937159E1L, - -9.364318268748287664267341457164918090611E-2L, - -3.306390351286352764891355375882586201069E0L, - 7.573806045289044647727613003096916516475E-1L, - -9.611744011489092894027478899545635991213E-2L -}; -#define NRDr20 7 -static const long double RDr20[NRDr20 + 1] = -{ - 3.032829629520142564106649167182428189014E3L, - 1.659648470721967719961167083684972196891E3L, - 1.703545128657284619402511356932569292535E3L, - 6.393465677731598872500200253155257708763E2L, - 3.489131397281030947405287112726059221934E2L, - 8.848641738570783406484348434387611713070E1L, - 3.132269062552392974833215844236160958502E1L, - 4.430131663290563523933419966185230513168E0L - /* 1.0E0 */ -}; -/* erfc(1.125) = C20a + C20b to extra precision. */ -static const long double C20a = 0.111602783203125L; -static const long double C20b = 8.9850951672359304215530728365232161564636E-6L; - -/* erfc(1/x) = 1/x exp (-1/x^2 - 0.5625 + R(1/x^2)) - 7/8 <= 1/x < 1 - Peak relative error 1.4e-35 */ -#define NRNr8 9 -static const long double RNr8[NRNr8 + 1] = -{ - 3.587451489255356250759834295199296936784E1L, - 5.406249749087340431871378009874875889602E2L, - 2.931301290625250886238822286506381194157E3L, - 7.359254185241795584113047248898753470923E3L, - 9.201031849810636104112101947312492532314E3L, - 5.749697096193191467751650366613289284777E3L, - 1.710415234419860825710780802678697889231E3L, - 2.150753982543378580859546706243022719599E2L, - 8.740953582272147335100537849981160931197E0L, - 4.876422978828717219629814794707963640913E-2L -}; -#define NRDr8 8 -static const long double RDr8[NRDr8 + 1] = -{ - 6.358593134096908350929496535931630140282E1L, - 9.900253816552450073757174323424051765523E2L, - 5.642928777856801020545245437089490805186E3L, - 1.524195375199570868195152698617273739609E4L, - 2.113829644500006749947332935305800887345E4L, - 1.526438562626465706267943737310282977138E4L, - 5.561370922149241457131421914140039411782E3L, - 9.394035530179705051609070428036834496942E2L, - 6.147019596150394577984175188032707343615E1L - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp (-1/x^2 - 0.5625 + R(1/x^2)) - 0.75 <= 1/x <= 0.875 - Peak relative error 2.0e-36 */ -#define NRNr7 9 -static const long double RNr7[NRNr7 + 1] = -{ - 1.686222193385987690785945787708644476545E1L, - 1.178224543567604215602418571310612066594E3L, - 1.764550584290149466653899886088166091093E4L, - 1.073758321890334822002849369898232811561E5L, - 3.132840749205943137619839114451290324371E5L, - 4.607864939974100224615527007793867585915E5L, - 3.389781820105852303125270837910972384510E5L, - 1.174042187110565202875011358512564753399E5L, - 1.660013606011167144046604892622504338313E4L, - 6.700393957480661937695573729183733234400E2L -}; -#define NRDr7 9 -static const long double RDr7[NRDr7 + 1] = -{ --1.709305024718358874701575813642933561169E3L, --3.280033887481333199580464617020514788369E4L, --2.345284228022521885093072363418750835214E5L, --8.086758123097763971926711729242327554917E5L, --1.456900414510108718402423999575992450138E6L, --1.391654264881255068392389037292702041855E6L, --6.842360801869939983674527468509852583855E5L, --1.597430214446573566179675395199807533371E5L, --1.488876130609876681421645314851760773480E4L, --3.511762950935060301403599443436465645703E2L - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 5/8 <= 1/x < 3/4 - Peak relative error 1.9e-35 */ -#define NRNr6 9 -static const long double RNr6[NRNr6 + 1] = -{ - 1.642076876176834390623842732352935761108E0L, - 1.207150003611117689000664385596211076662E2L, - 2.119260779316389904742873816462800103939E3L, - 1.562942227734663441801452930916044224174E4L, - 5.656779189549710079988084081145693580479E4L, - 1.052166241021481691922831746350942786299E5L, - 9.949798524786000595621602790068349165758E4L, - 4.491790734080265043407035220188849562856E4L, - 8.377074098301530326270432059434791287601E3L, - 4.506934806567986810091824791963991057083E2L -}; -#define NRDr6 9 -static const long double RDr6[NRDr6 + 1] = -{ --1.664557643928263091879301304019826629067E2L, --3.800035902507656624590531122291160668452E3L, --3.277028191591734928360050685359277076056E4L, --1.381359471502885446400589109566587443987E5L, --3.082204287382581873532528989283748656546E5L, --3.691071488256738343008271448234631037095E5L, --2.300482443038349815750714219117566715043E5L, --6.873955300927636236692803579555752171530E4L, --8.262158817978334142081581542749986845399E3L, --2.517122254384430859629423488157361983661E2L - /* 1.00 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 1/2 <= 1/x < 5/8 - Peak relative error 4.6e-36 */ -#define NRNr5 10 -static const long double RNr5[NRNr5 + 1] = -{ --3.332258927455285458355550878136506961608E-3L, --2.697100758900280402659586595884478660721E-1L, --6.083328551139621521416618424949137195536E0L, --6.119863528983308012970821226810162441263E1L, --3.176535282475593173248810678636522589861E2L, --8.933395175080560925809992467187963260693E2L, --1.360019508488475978060917477620199499560E3L, --1.075075579828188621541398761300910213280E3L, --4.017346561586014822824459436695197089916E2L, --5.857581368145266249509589726077645791341E1L, --2.077715925587834606379119585995758954399E0L -}; -#define NRDr5 9 -static const long double RDr5[NRDr5 + 1] = -{ - 3.377879570417399341550710467744693125385E-1L, - 1.021963322742390735430008860602594456187E1L, - 1.200847646592942095192766255154827011939E2L, - 7.118915528142927104078182863387116942836E2L, - 2.318159380062066469386544552429625026238E3L, - 4.238729853534009221025582008928765281620E3L, - 4.279114907284825886266493994833515580782E3L, - 2.257277186663261531053293222591851737504E3L, - 5.570475501285054293371908382916063822957E2L, - 5.142189243856288981145786492585432443560E1L - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 3/8 <= 1/x < 1/2 - Peak relative error 2.0e-36 */ -#define NRNr4 10 -static const long double RNr4[NRNr4 + 1] = -{ - 3.258530712024527835089319075288494524465E-3L, - 2.987056016877277929720231688689431056567E-1L, - 8.738729089340199750734409156830371528862E0L, - 1.207211160148647782396337792426311125923E2L, - 8.997558632489032902250523945248208224445E2L, - 3.798025197699757225978410230530640879762E3L, - 9.113203668683080975637043118209210146846E3L, - 1.203285891339933238608683715194034900149E4L, - 8.100647057919140328536743641735339740855E3L, - 2.383888249907144945837976899822927411769E3L, - 2.127493573166454249221983582495245662319E2L -}; -#define NRDr4 10 -static const long double RDr4[NRDr4 + 1] = -{ --3.303141981514540274165450687270180479586E-1L, --1.353768629363605300707949368917687066724E1L, --2.206127630303621521950193783894598987033E2L, --1.861800338758066696514480386180875607204E3L, --8.889048775872605708249140016201753255599E3L, --2.465888106627948210478692168261494857089E4L, --3.934642211710774494879042116768390014289E4L, --3.455077258242252974937480623730228841003E4L, --1.524083977439690284820586063729912653196E4L, --2.810541887397984804237552337349093953857E3L, --1.343929553541159933824901621702567066156E2L - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 1/4 <= 1/x < 3/8 - Peak relative error 8.4e-37 */ -#define NRNr3 11 -static const long double RNr3[NRNr3 + 1] = -{ --1.952401126551202208698629992497306292987E-6L, --2.130881743066372952515162564941682716125E-4L, --8.376493958090190943737529486107282224387E-3L, --1.650592646560987700661598877522831234791E-1L, --1.839290818933317338111364667708678163199E0L, --1.216278715570882422410442318517814388470E1L, --4.818759344462360427612133632533779091386E1L, --1.120994661297476876804405329172164436784E2L, --1.452850765662319264191141091859300126931E2L, --9.485207851128957108648038238656777241333E1L, --2.563663855025796641216191848818620020073E1L, --1.787995944187565676837847610706317833247E0L -}; -#define NRDr3 10 -static const long double RDr3[NRDr3 + 1] = -{ - 1.979130686770349481460559711878399476903E-4L, - 1.156941716128488266238105813374635099057E-2L, - 2.752657634309886336431266395637285974292E-1L, - 3.482245457248318787349778336603569327521E0L, - 2.569347069372696358578399521203959253162E1L, - 1.142279000180457419740314694631879921561E2L, - 3.056503977190564294341422623108332700840E2L, - 4.780844020923794821656358157128719184422E2L, - 4.105972727212554277496256802312730410518E2L, - 1.724072188063746970865027817017067646246E2L, - 2.815939183464818198705278118326590370435E1L - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 1/8 <= 1/x < 1/4 - Peak relative error 1.5e-36 */ -#define NRNr2 11 -static const long double RNr2[NRNr2 + 1] = -{ --2.638914383420287212401687401284326363787E-8L, --3.479198370260633977258201271399116766619E-6L, --1.783985295335697686382487087502222519983E-4L, --4.777876933122576014266349277217559356276E-3L, --7.450634738987325004070761301045014986520E-2L, --7.068318854874733315971973707247467326619E-1L, --4.113919921935944795764071670806867038732E0L, --1.440447573226906222417767283691888875082E1L, --2.883484031530718428417168042141288943905E1L, --2.990886974328476387277797361464279931446E1L, --1.325283914915104866248279787536128997331E1L, --1.572436106228070195510230310658206154374E0L -}; -#define NRDr2 10 -static const long double RDr2[NRDr2 + 1] = -{ - 2.675042728136731923554119302571867799673E-6L, - 2.170997868451812708585443282998329996268E-4L, - 7.249969752687540289422684951196241427445E-3L, - 1.302040375859768674620410563307838448508E-1L, - 1.380202483082910888897654537144485285549E0L, - 8.926594113174165352623847870299170069350E0L, - 3.521089584782616472372909095331572607185E1L, - 8.233547427533181375185259050330809105570E1L, - 1.072971579885803033079469639073292840135E2L, - 6.943803113337964469736022094105143158033E1L, - 1.775695341031607738233608307835017282662E1L - /* 1.0E0 */ -}; - -/* erfc(1/x) = 1/x exp(-1/x^2 - 0.5625 + R(1/x^2)) - 1/128 <= 1/x < 1/8 - Peak relative error 2.2e-36 */ -#define NRNr1 9 -static const long double RNr1[NRNr1 + 1] = -{ --4.250780883202361946697751475473042685782E-8L, --5.375777053288612282487696975623206383019E-6L, --2.573645949220896816208565944117382460452E-4L, --6.199032928113542080263152610799113086319E-3L, --8.262721198693404060380104048479916247786E-2L, --6.242615227257324746371284637695778043982E-1L, --2.609874739199595400225113299437099626386E0L, --5.581967563336676737146358534602770006970E0L, --5.124398923356022609707490956634280573882E0L, --1.290865243944292370661544030414667556649E0L -}; -#define NRDr1 8 -static const long double RDr1[NRDr1 + 1] = -{ - 4.308976661749509034845251315983612976224E-6L, - 3.265390126432780184125233455960049294580E-4L, - 9.811328839187040701901866531796570418691E-3L, - 1.511222515036021033410078631914783519649E-1L, - 1.289264341917429958858379585970225092274E0L, - 6.147640356182230769548007536914983522270E0L, - 1.573966871337739784518246317003956180750E1L, - 1.955534123435095067199574045529218238263E1L, - 9.472613121363135472247929109615785855865E0L - /* 1.0E0 */ -}; - - -long double -__erfl (long double x) -{ - long double a, y, z; - int32_t i, ix, hx; - double xhi; - - xhi = ldbl_high (x); - GET_HIGH_WORD (hx, xhi); - ix = hx & 0x7fffffff; - - if (ix >= 0x7ff00000) - { /* erf(nan)=nan */ - i = ((uint32_t) hx >> 31) << 1; - return (long double) (1 - i) + one / x; /* erf(+-inf)=+-1 */ - } - - if (ix >= 0x3ff00000) /* |x| >= 1.0 */ - { - if (ix >= 0x4039A0DE) - { - /* __erfcl (x) underflows if x > 25.6283 */ - if ((hx & 0x80000000) == 0) - return one-tiny; - else - return tiny-one; - } - else - { - y = __erfcl (x); - return (one - y); - } - } - a = x; - if ((hx & 0x80000000) != 0) - a = -a; - z = x * x; - if (ix < 0x3fec0000) /* a < 0.875 */ - { - if (ix < 0x3c600000) /* |x|<2**-57 */ - { - if (ix < 0x00800000) - { - /* erf (-0) = -0. Unfortunately, for IBM extended double - 0.0625 * (16.0 * x + (16.0 * efx) * x) for x = -0 - evaluates to 0. */ - if (x == 0) - return x; - long double ret = 0.0625 * (16.0 * x + (16.0 * efx) * x); - math_check_force_underflow (ret); - return ret; - } - return x + efx * x; - } - y = a + a * neval (z, TN1, NTN1) / deval (z, TD1, NTD1); - } - else - { - a = a - one; - y = erf_const + neval (a, TN2, NTN2) / deval (a, TD2, NTD2); - } - - if (hx & 0x80000000) /* x < 0 */ - y = -y; - return( y ); -} - -long_double_symbol (libm, __erfl, erfl); -long double -__erfcl (long double x) -{ - long double y, z, p, r; - int32_t i, ix; - uint32_t hx; - double xhi; - - xhi = ldbl_high (x); - GET_HIGH_WORD (hx, xhi); - ix = hx & 0x7fffffff; - - if (ix >= 0x7ff00000) - { /* erfc(nan)=nan */ - /* erfc(+-inf)=0,2 */ - long double ret = (long double) ((hx >> 31) << 1) + one / x; - if (FIX_INT_FP_CONVERT_ZERO && ret == 0.0L) - return 0.0L; - return ret; - } - - if (ix < 0x3fd00000) /* |x| <1/4 */ - { - if (ix < 0x38d00000) /* |x|<2**-114 */ - return one - x; - return one - __erfl (x); - } - if (ix < 0x3ff40000) /* 1.25 */ - { - if ((hx & 0x80000000) != 0) - x = -x; - i = 8.0 * x; - switch (i) - { - case 2: - z = x - 0.25L; - y = C13b + z * neval (z, RNr13, NRNr13) / deval (z, RDr13, NRDr13); - y += C13a; - break; - case 3: - z = x - 0.375L; - y = C14b + z * neval (z, RNr14, NRNr14) / deval (z, RDr14, NRDr14); - y += C14a; - break; - case 4: - z = x - 0.5L; - y = C15b + z * neval (z, RNr15, NRNr15) / deval (z, RDr15, NRDr15); - y += C15a; - break; - case 5: - z = x - 0.625L; - y = C16b + z * neval (z, RNr16, NRNr16) / deval (z, RDr16, NRDr16); - y += C16a; - break; - case 6: - z = x - 0.75L; - y = C17b + z * neval (z, RNr17, NRNr17) / deval (z, RDr17, NRDr17); - y += C17a; - break; - case 7: - z = x - 0.875L; - y = C18b + z * neval (z, RNr18, NRNr18) / deval (z, RDr18, NRDr18); - y += C18a; - break; - case 8: - z = x - 1.0L; - y = C19b + z * neval (z, RNr19, NRNr19) / deval (z, RDr19, NRDr19); - y += C19a; - break; - default: /* i == 9. */ - z = x - 1.125L; - y = C20b + z * neval (z, RNr20, NRNr20) / deval (z, RDr20, NRDr20); - y += C20a; - break; - } - if (hx & 0x80000000) - y = 2.0L - y; - return y; - } - /* 1.25 < |x| < 107 */ - if (ix < 0x405ac000) - { - /* x < -9 */ - if (hx >= 0xc0220000) - return two - tiny; - - if ((hx & 0x80000000) != 0) - x = -x; - z = one / (x * x); - i = 8.0 / x; - switch (i) - { - default: - case 0: - p = neval (z, RNr1, NRNr1) / deval (z, RDr1, NRDr1); - break; - case 1: - p = neval (z, RNr2, NRNr2) / deval (z, RDr2, NRDr2); - break; - case 2: - p = neval (z, RNr3, NRNr3) / deval (z, RDr3, NRDr3); - break; - case 3: - p = neval (z, RNr4, NRNr4) / deval (z, RDr4, NRDr4); - break; - case 4: - p = neval (z, RNr5, NRNr5) / deval (z, RDr5, NRDr5); - break; - case 5: - p = neval (z, RNr6, NRNr6) / deval (z, RDr6, NRDr6); - break; - case 6: - p = neval (z, RNr7, NRNr7) / deval (z, RDr7, NRDr7); - break; - case 7: - p = neval (z, RNr8, NRNr8) / deval (z, RDr8, NRDr8); - break; - } - z = (float) x; - r = __ieee754_expl (-z * z - 0.5625) * - __ieee754_expl ((z - x) * (z + x) + p); - if ((hx & 0x80000000) == 0) - { - long double ret = r / x; - if (ret == 0) - __set_errno (ERANGE); - return ret; - } - else - return two - r / x; - } - else - { - if ((hx & 0x80000000) == 0) - { - __set_errno (ERANGE); - return tiny * tiny; - } - else - return two - tiny; - } -} - -long_double_symbol (libm, __erfcl, erfcl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c b/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c deleted file mode 100644 index 42d57c6eec..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c +++ /dev/null @@ -1,152 +0,0 @@ -/* expm1l.c - * - * Exponential function, minus 1 - * 128-bit long double precision - * - * - * - * SYNOPSIS: - * - * long double x, y, expm1l(); - * - * y = expm1l( x ); - * - * - * - * DESCRIPTION: - * - * Returns e (2.71828...) raised to the x power, minus one. - * - * Range reduction is accomplished by separating the argument - * into an integer k and fraction f such that - * - * x k f - * e = 2 e. - * - * An expansion x + .5 x^2 + x^3 R(x) approximates exp(f) - 1 - * in the basic range [-0.5 ln 2, 0.5 ln 2]. - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -79,+MAXLOG 100,000 1.7e-34 4.5e-35 - * - */ - -/* Copyright 2001 by Stephen L. Moshier - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -#include -#include -#include -#include - -/* exp(x) - 1 = x + 0.5 x^2 + x^3 P(x)/Q(x) - -.5 ln 2 < x < .5 ln 2 - Theoretical peak relative error = 8.1e-36 */ - -static const long double - P0 = 2.943520915569954073888921213330863757240E8L, - P1 = -5.722847283900608941516165725053359168840E7L, - P2 = 8.944630806357575461578107295909719817253E6L, - P3 = -7.212432713558031519943281748462837065308E5L, - P4 = 4.578962475841642634225390068461943438441E4L, - P5 = -1.716772506388927649032068540558788106762E3L, - P6 = 4.401308817383362136048032038528753151144E1L, - P7 = -4.888737542888633647784737721812546636240E-1L, - Q0 = 1.766112549341972444333352727998584753865E9L, - Q1 = -7.848989743695296475743081255027098295771E8L, - Q2 = 1.615869009634292424463780387327037251069E8L, - Q3 = -2.019684072836541751428967854947019415698E7L, - Q4 = 1.682912729190313538934190635536631941751E6L, - Q5 = -9.615511549171441430850103489315371768998E4L, - Q6 = 3.697714952261803935521187272204485251835E3L, - Q7 = -8.802340681794263968892934703309274564037E1L, - /* Q8 = 1.000000000000000000000000000000000000000E0 */ -/* C1 + C2 = ln 2 */ - - C1 = 6.93145751953125E-1L, - C2 = 1.428606820309417232121458176568075500134E-6L, -/* ln 2^-114 */ - minarg = -7.9018778583833765273564461846232128760607E1L, big = 1e290L; - - -long double -__expm1l (long double x) -{ - long double px, qx, xx; - int32_t ix, lx, sign; - int k; - double xhi; - - /* Detect infinity and NaN. */ - xhi = ldbl_high (x); - EXTRACT_WORDS (ix, lx, xhi); - sign = ix & 0x80000000; - ix &= 0x7fffffff; - if (!sign && ix >= 0x40600000) - return __expl (x); - if (ix >= 0x7ff00000) - { - /* Infinity (which must be negative infinity). */ - if (((ix - 0x7ff00000) | lx) == 0) - return -1.0L; - /* NaN. Invalid exception if signaling. */ - return x + x; - } - - /* expm1(+- 0) = +- 0. */ - if ((ix | lx) == 0) - return x; - - /* Minimum value. */ - if (x < minarg) - return (4.0/big - 1.0L); - - /* Express x = ln 2 (k + remainder), remainder not exceeding 1/2. */ - xx = C1 + C2; /* ln 2. */ - px = __floorl (0.5 + x / xx); - k = px; - /* remainder times ln 2 */ - x -= px * C1; - x -= px * C2; - - /* Approximate exp(remainder ln 2). */ - px = (((((((P7 * x - + P6) * x - + P5) * x + P4) * x + P3) * x + P2) * x + P1) * x + P0) * x; - - qx = (((((((x - + Q7) * x - + Q6) * x + Q5) * x + Q4) * x + Q3) * x + Q2) * x + Q1) * x + Q0; - - xx = x * x; - qx = x + (0.5 * xx + xx * px / qx); - - /* exp(x) = exp(k ln 2) exp(remainder ln 2) = 2^k exp(remainder ln 2). - - We have qx = exp(remainder ln 2) - 1, so - exp(x) - 1 = 2^k (qx + 1) - 1 - = 2^k qx + 2^k - 1. */ - - px = __ldexpl (1.0L, k); - x = px * qx + (px - 1.0); - return x; -} -libm_hidden_def (__expm1l) -long_double_symbol (libm, __expm1l, expm1l); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c b/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c deleted file mode 100644 index c801c97065..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c +++ /dev/null @@ -1,44 +0,0 @@ -/* s_fabsl.c -- long double version of s_fabs.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - - -/* - * fabsl(x) returns the absolute value of x. - */ - -#include -#include -#include - -long double __fabsl(long double x) -{ - u_int64_t hx, lx; - double xhi, xlo; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - EXTRACT_WORDS64 (lx, xlo); - lx = lx ^ ( hx & 0x8000000000000000LL ); - hx = hx & 0x7fffffffffffffffLL; - INSERT_WORDS64 (xhi, hx); - INSERT_WORDS64 (xlo, lx); - x = ldbl_pack (xhi, xlo); - return x; -} -long_double_symbol (libm, __fabsl, fabsl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_finitel.c b/sysdeps/ieee754/ldbl-128ibm/s_finitel.c deleted file mode 100644 index 3b9e3de292..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_finitel.c +++ /dev/null @@ -1,49 +0,0 @@ -/* s_finitel.c -- long double version of s_finite.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * finitel(x) returns 1 is x is finite, else 0; - * no branching! - */ - -#include -#include -#include - -int -___finitel (long double x) -{ - uint64_t hx; - double xhi; - - xhi = ldbl_high (x); - EXTRACT_WORDS64 (hx, xhi); - hx &= 0x7ff0000000000000LL; - hx -= 0x7ff0000000000000LL; - return hx >> 63; -} -hidden_ver (___finitel, __finitel) -weak_alias (___finitel, ____finitel) -#if IS_IN (libm) -long_double_symbol (libm, ____finitel, finitel); -long_double_symbol (libm, ___finitel, __finitel); -#else -long_double_symbol (libc, ____finitel, finitel); -long_double_symbol (libc, ___finitel, __finitel); -#endif diff --git a/sysdeps/ieee754/ldbl-128ibm/s_floorl.c b/sysdeps/ieee754/ldbl-128ibm/s_floorl.c deleted file mode 100644 index 6b837c7bcd..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_floorl.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Round to int long double floating-point values. - IBM extended format long double version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -long double -__floorl (long double x) -{ - double xh, xl, hi, lo; - - ldbl_unpack (x, &xh, &xl); - - /* Return Inf, Nan, +/-0 unchanged. */ - if (__builtin_expect (xh != 0.0 - && __builtin_isless (__builtin_fabs (xh), - __builtin_inf ()), 1)) - { - hi = __floor (xh); - if (hi != xh) - { - /* The high part is not an integer; the low part does not - affect the result. */ - xh = hi; - xl = 0; - } - else - { - /* The high part is a nonzero integer. */ - lo = __floor (xl); - xh = hi; - xl = lo; - ldbl_canonicalize_int (&xh, &xl); - } - } - else - /* Quiet signaling NaN arguments. */ - xh += xh; - - return ldbl_pack (xh, xl); -} - -long_double_symbol (libm, __floorl, floorl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_fmal.c b/sysdeps/ieee754/ldbl-128ibm/s_fmal.c deleted file mode 100644 index 9098e79df9..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_fmal.c +++ /dev/null @@ -1,257 +0,0 @@ -/* Compute x * y + z as ternary operation. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Flaherty . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -/* Calculate X + Y exactly and store the result in *HI + *LO. It is - given that |X| >= |Y| and the values are small enough that no - overflow occurs. */ - -static void -add_split (double *hi, double *lo, double x, double y) -{ - /* Apply Dekker's algorithm. */ - *hi = x + y; - *lo = (x - *hi) + y; -} - -/* Value with extended range, used in intermediate computations. */ -typedef struct -{ - /* Value in [0.5, 1), as from frexp, or 0. */ - double val; - /* Exponent of power of 2 it is multiplied by, or 0 for zero. */ - int exp; -} ext_val; - -/* Store D as an ext_val value. */ - -static void -store_ext_val (ext_val *v, double d) -{ - v->val = __frexp (d, &v->exp); -} - -/* Store X * Y as ext_val values *V0 and *V1. */ - -static void -mul_ext_val (ext_val *v0, ext_val *v1, double x, double y) -{ - int xexp, yexp; - x = __frexp (x, &xexp); - y = __frexp (y, &yexp); - double hi, lo; - mul_split (&hi, &lo, x, y); - store_ext_val (v0, hi); - if (hi != 0) - v0->exp += xexp + yexp; - store_ext_val (v1, lo); - if (lo != 0) - v1->exp += xexp + yexp; -} - -/* Compare absolute values of ext_val values pointed to by P and Q for - qsort. */ - -static int -compare (const void *p, const void *q) -{ - const ext_val *pe = p; - const ext_val *qe = q; - if (pe->val == 0) - return qe->val == 0 ? 0 : -1; - else if (qe->val == 0) - return 1; - else if (pe->exp < qe->exp) - return -1; - else if (pe->exp > qe->exp) - return 1; - else - { - double pd = fabs (pe->val); - double qd = fabs (qe->val); - if (pd < qd) - return -1; - else if (pd == qd) - return 0; - else - return 1; - } -} - -/* Calculate *X + *Y exactly, storing the high part in *X (rounded to - nearest) and the low part in *Y. It is given that |X| >= |Y|. */ - -static void -add_split_ext (ext_val *x, ext_val *y) -{ - int xexp = x->exp, yexp = y->exp; - if (y->val == 0 || xexp - yexp > 53) - return; - double hi = x->val; - double lo = __scalbn (y->val, yexp - xexp); - add_split (&hi, &lo, hi, lo); - store_ext_val (x, hi); - if (hi != 0) - x->exp += xexp; - store_ext_val (y, lo); - if (lo != 0) - y->exp += xexp; -} - -long double -__fmal (long double x, long double y, long double z) -{ - double xhi, xlo, yhi, ylo, zhi, zlo; - int64_t hx, hy, hz; - int xexp, yexp, zexp; - double scale_val; - int scale_exp; - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - xexp = (hx & 0x7ff0000000000000LL) >> 52; - ldbl_unpack (y, &yhi, &ylo); - EXTRACT_WORDS64 (hy, yhi); - yexp = (hy & 0x7ff0000000000000LL) >> 52; - ldbl_unpack (z, &zhi, &zlo); - EXTRACT_WORDS64 (hz, zhi); - zexp = (hz & 0x7ff0000000000000LL) >> 52; - - /* If z is Inf or NaN, but x and y are finite, avoid any exceptions - from computing x * y. */ - if (zexp == 0x7ff && xexp != 0x7ff && yexp != 0x7ff) - return (z + x) + y; - - /* If z is zero and x are y are nonzero, compute the result as x * y - to avoid the wrong sign of a zero result if x * y underflows to - 0. */ - if (z == 0 && x != 0 && y != 0) - return x * y; - - /* If x or y or z is Inf/NaN, or if x * y is zero, compute as x * y - + z. */ - if (xexp == 0x7ff || yexp == 0x7ff || zexp == 0x7ff - || x == 0 || y == 0) - return (x * y) + z; - - { - SET_RESTORE_ROUND (FE_TONEAREST); - - ext_val vals[10]; - store_ext_val (&vals[0], zhi); - store_ext_val (&vals[1], zlo); - mul_ext_val (&vals[2], &vals[3], xhi, yhi); - mul_ext_val (&vals[4], &vals[5], xhi, ylo); - mul_ext_val (&vals[6], &vals[7], xlo, yhi); - mul_ext_val (&vals[8], &vals[9], xlo, ylo); - qsort (vals, 10, sizeof (ext_val), compare); - /* Add up the values so that each element of VALS has absolute - value at most equal to the last set bit of the next nonzero - element. */ - for (size_t i = 0; i <= 8; i++) - { - add_split_ext (&vals[i + 1], &vals[i]); - qsort (vals + i + 1, 9 - i, sizeof (ext_val), compare); - } - /* Add up the values in the other direction, so that each element - of VALS has absolute value less than 5ulp of the next - value. */ - size_t dstpos = 9; - for (size_t i = 1; i <= 9; i++) - { - if (vals[dstpos].val == 0) - { - vals[dstpos] = vals[9 - i]; - vals[9 - i].val = 0; - vals[9 - i].exp = 0; - } - else - { - add_split_ext (&vals[dstpos], &vals[9 - i]); - if (vals[9 - i].val != 0) - { - if (9 - i < dstpos - 1) - { - vals[dstpos - 1] = vals[9 - i]; - vals[9 - i].val = 0; - vals[9 - i].exp = 0; - } - dstpos--; - } - } - } - /* If the result is an exact zero, it results from adding two - values with opposite signs; recompute in the original rounding - mode. */ - if (vals[9].val == 0) - goto zero_out; - /* Adding the top three values will now give a result as accurate - as the underlying long double arithmetic. */ - add_split_ext (&vals[9], &vals[8]); - if (compare (&vals[8], &vals[7]) < 0) - { - ext_val tmp = vals[7]; - vals[7] = vals[8]; - vals[8] = tmp; - } - add_split_ext (&vals[8], &vals[7]); - add_split_ext (&vals[9], &vals[8]); - if (vals[9].exp > DBL_MAX_EXP || vals[9].exp < DBL_MIN_EXP) - { - /* Overflow or underflow, with the result depending on the - original rounding mode, but not on the low part computed - here. */ - scale_val = vals[9].val; - scale_exp = vals[9].exp; - goto scale_out; - } - double hi = __scalbn (vals[9].val, vals[9].exp); - double lo = __scalbn (vals[8].val, vals[8].exp); - /* It is possible that the low part became subnormal and was - rounded so that the result is no longer canonical. */ - ldbl_canonicalize (&hi, &lo); - long double ret = ldbl_pack (hi, lo); - math_check_force_underflow (ret); - return ret; - } - - scale_out: - scale_val = math_opt_barrier (scale_val); - scale_val = __scalbn (scale_val, scale_exp); - if (fabs (scale_val) == DBL_MAX) - return __copysignl (LDBL_MAX, scale_val); - math_check_force_underflow (scale_val); - return scale_val; - - zero_out:; - double zero = 0.0; - zero = math_opt_barrier (zero); - return zero - zero; -} -#if IS_IN (libm) -long_double_symbol (libm, __fmal, fmal); -#else -long_double_symbol (libc, __fmal, fmal); -#endif diff --git a/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c b/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c deleted file mode 100644 index 82d520bc7f..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c +++ /dev/null @@ -1,97 +0,0 @@ -/* Return classification value corresponding to argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include -#include - - /* - * hx lx - * +NaN 7ffn nnnn nnnn nnnn xxxx xxxx xxxx xxxx - * -NaN fffn nnnn nnnn nnnn xxxx xxxx xxxx xxxx - * +Inf 7ff0 0000 0000 0000 xxxx xxxx xxxx xxxx - * -Inf fff0 0000 0000 0000 xxxx xxxx xxxx xxxx - * +0 0000 0000 0000 0000 xxxx xxxx xxxx xxxx - * -0 8000 0000 0000 0000 xxxx xxxx xxxx xxxx - * +normal 0360 0000 0000 0000 0000 0000 0000 0000 (smallest) - * -normal 8360 0000 0000 0000 0000 0000 0000 0000 (smallest) - * +normal 7fef ffff ffff ffff 7c8f ffff ffff fffe (largest) - * +normal ffef ffff ffff ffff fc8f ffff ffff fffe (largest) - * +denorm 0360 0000 0000 0000 8000 0000 0000 0001 (largest) - * -denorm 8360 0000 0000 0000 0000 0000 0000 0001 (largest) - * +denorm 000n nnnn nnnn nnnn xxxx xxxx xxxx xxxx - * -denorm 800n nnnn nnnn nnnn xxxx xxxx xxxx xxxx - */ - -int -___fpclassifyl (long double x) -{ - u_int64_t hx, lx; - int retval = FP_NORMAL; - double xhi, xlo; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - if ((hx & 0x7ff0000000000000ULL) == 0x7ff0000000000000ULL) { - /* +/-NaN or +/-Inf */ - if (hx & 0x000fffffffffffffULL) { - /* +/-NaN */ - retval = FP_NAN; - } else { - retval = FP_INFINITE; - } - } else { - /* +/-zero or +/- normal or +/- denormal */ - if (hx & 0x7fffffffffffffffULL) { - /* +/- normal or +/- denormal */ - if ((hx & 0x7ff0000000000000ULL) > 0x0360000000000000ULL) { - /* +/- normal */ - retval = FP_NORMAL; - } else { - if ((hx & 0x7ff0000000000000ULL) == 0x0360000000000000ULL) { - EXTRACT_WORDS64 (lx, xlo); - if ((lx & 0x7fffffffffffffff) /* lower is non-zero */ - && ((lx^hx) & 0x8000000000000000ULL)) { /* and sign differs */ - /* +/- denormal */ - retval = FP_SUBNORMAL; - } else { - /* +/- normal */ - retval = FP_NORMAL; - } - } else { - /* +/- denormal */ - retval = FP_SUBNORMAL; - } - } - } else { - /* +/- zero */ - retval = FP_ZERO; - } - } - - return retval; -} -long_double_symbol (libm, ___fpclassifyl, __fpclassifyl); -#ifdef __LONG_DOUBLE_MATH_OPTIONAL -libm_hidden_ver (___fpclassifyl, __fpclassifyl) -#else -libm_hidden_def (__fpclassifyl) -#endif diff --git a/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c b/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c deleted file mode 100644 index 210c5d2ed4..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c +++ /dev/null @@ -1,148 +0,0 @@ -/* s_frexpl.c -- long double version of s_frexp.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * for non-zero x - * x = frexpl(arg,&exp); - * return a long double fp quantity x such that 0.5 <= |x| <1.0 - * and the corresponding binary exponent "exp". That is - * arg = x*2^exp. - * If arg is inf, 0.0, or NaN, then frexpl(arg,&exp) returns arg - * with *exp=0. - */ - -#include -#include -#include - -long double __frexpl(long double x, int *eptr) -{ - uint64_t hx, lx, ix, ixl; - int64_t explo, expon; - double xhi, xlo; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - EXTRACT_WORDS64 (lx, xlo); - ixl = 0x7fffffffffffffffULL & lx; - ix = 0x7fffffffffffffffULL & hx; - expon = 0; - if (ix >= 0x7ff0000000000000ULL || ix == 0) - { - /* 0,inf,nan. */ - *eptr = expon; - return x + x; - } - expon = ix >> 52; - if (expon == 0) - { - /* Denormal high double, the low double must be 0.0. */ - int cnt; - - /* Normalize. */ - if (sizeof (ix) == sizeof (long)) - cnt = __builtin_clzl (ix); - else if ((ix >> 32) != 0) - cnt = __builtin_clzl ((long) (ix >> 32)); - else - cnt = __builtin_clzl ((long) ix) + 32; - cnt = cnt - 12; - expon -= cnt; - ix <<= cnt + 1; - } - expon -= 1022; - ix &= 0x000fffffffffffffULL; - hx &= 0x8000000000000000ULL; - hx |= (1022LL << 52) | ix; - - if (ixl != 0) - { - /* If the high double is an exact power of two and the low - double has the opposite sign, then the exponent calculated - from the high double is one too big. */ - if (ix == 0 - && (int64_t) (hx ^ lx) < 0) - { - hx += 1LL << 52; - expon -= 1; - } - - explo = ixl >> 52; - if (explo == 0) - { - /* The low double started out as a denormal. Normalize its - mantissa and adjust the exponent. */ - int cnt; - - if (sizeof (ixl) == sizeof (long)) - cnt = __builtin_clzl (ixl); - else if ((ixl >> 32) != 0) - cnt = __builtin_clzl ((long) (ixl >> 32)); - else - cnt = __builtin_clzl ((long) ixl) + 32; - cnt = cnt - 12; - explo -= cnt; - ixl <<= cnt + 1; - } - - /* With variable precision we can't assume much about the - magnitude of the returned low double. It may even be a - denormal. */ - explo -= expon; - ixl &= 0x000fffffffffffffULL; - lx &= 0x8000000000000000ULL; - if (explo <= 0) - { - /* Handle denormal low double. */ - if (explo > -52) - { - ixl |= 1LL << 52; - ixl >>= 1 - explo; - } - else - { - ixl = 0; - lx = 0; - if ((hx & 0x7ff0000000000000ULL) == (1023LL << 52)) - { - /* Oops, the adjustment we made above for values a - little smaller than powers of two turned out to - be wrong since the returned low double will be - zero. This can happen if the input was - something weird like 0x1p1000 - 0x1p-1000. */ - hx -= 1LL << 52; - expon += 1; - } - } - explo = 0; - } - lx |= (explo << 52) | ixl; - } - - INSERT_WORDS64 (xhi, hx); - INSERT_WORDS64 (xlo, lx); - x = ldbl_pack (xhi, xlo); - *eptr = expon; - return x; -} -#if IS_IN (libm) -long_double_symbol (libm, __frexpl, frexpl); -#else -long_double_symbol (libc, __frexpl, frexpl); -#endif diff --git a/sysdeps/ieee754/ldbl-128ibm/s_fromfpl.c b/sysdeps/ieee754/ldbl-128ibm/s_fromfpl.c deleted file mode 100644 index e323b4c25b..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_fromfpl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 0 -#define INEXACT 0 -#define FUNC fromfpl -#include diff --git a/sysdeps/ieee754/ldbl-128ibm/s_fromfpl_main.c b/sysdeps/ieee754/ldbl-128ibm/s_fromfpl_main.c deleted file mode 100644 index 8b9108e84d..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_fromfpl_main.c +++ /dev/null @@ -1,147 +0,0 @@ -/* Round to integer type. ldbl-128ibm version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#define BIAS 0x3ff -#define MANT_DIG 53 - -#if UNSIGNED -# define RET_TYPE uintmax_t -#else -# define RET_TYPE intmax_t -#endif - -#include - -RET_TYPE -FUNC (long double x, int round, unsigned int width) -{ - double hi, lo; - if (width > INTMAX_WIDTH) - width = INTMAX_WIDTH; - uint64_t hx, lx; - ldbl_unpack (x, &hi, &lo); - EXTRACT_WORDS64 (hx, hi); - EXTRACT_WORDS64 (lx, lo); - bool negative = (hx & 0x8000000000000000ULL) != 0; - bool lo_negative = (lx & 0x8000000000000000ULL) != 0; - if (width == 0) - return fromfp_domain_error (negative, width); - hx &= 0x7fffffffffffffffULL; - lx &= 0x7fffffffffffffffULL; - if ((hx | lx) == 0) - return 0; - int hi_exponent = hx >> (MANT_DIG - 1); - hi_exponent -= BIAS; - int exponent = hi_exponent; - hx &= ((1ULL << (MANT_DIG - 1)) - 1); - if (hx == 0 && lx != 0 && lo_negative != negative) - exponent--; - int max_exponent = fromfp_max_exponent (negative, width); - if (exponent > max_exponent) - return fromfp_domain_error (negative, width); - int lo_exponent = lx >> (MANT_DIG - 1); - lo_exponent -= BIAS; - - /* Convert the high part to integer. */ - hx |= 1ULL << (MANT_DIG - 1); - uintmax_t uret; - bool half_bit, more_bits; - if (hi_exponent >= MANT_DIG - 1) - { - uret = hx; - uret <<= hi_exponent - (MANT_DIG - 1); - half_bit = false; - more_bits = false; - } - else if (hi_exponent >= -1) - { - uint64_t h = 1ULL << (MANT_DIG - 2 - hi_exponent); - half_bit = (hx & h) != 0; - more_bits = (hx & (h - 1)) != 0; - uret = hx >> (MANT_DIG - 1 - hi_exponent); - } - else - { - uret = 0; - half_bit = false; - more_bits = true; - } - - /* Likewise, the low part. */ - if (lx != 0) - { - uintmax_t lo_uret; - bool lo_half_bit, lo_more_bits; - lx &= ((1ULL << (MANT_DIG - 1)) - 1); - lx |= 1ULL << (MANT_DIG - 1); - /* The high part exponent is at most 64, so the low part - exponent is at most 11. */ - if (lo_exponent >= -1) - { - uint64_t h = 1ULL << (MANT_DIG - 2 - lo_exponent); - lo_half_bit = (lx & h) != 0; - lo_more_bits = (lx & (h - 1)) != 0; - lo_uret = lx >> (MANT_DIG - 1 - lo_exponent); - } - else - { - lo_uret = 0; - lo_half_bit = false; - lo_more_bits = true; - } - if (lo_negative == negative) - { - uret += lo_uret; - half_bit |= lo_half_bit; - more_bits |= lo_more_bits; - } - else - { - uret -= lo_uret; - if (lo_half_bit) - { - uret--; - half_bit = true; - } - if (lo_more_bits && !more_bits) - { - if (half_bit) - { - half_bit = false; - more_bits = true; - } - else - { - uret--; - half_bit = true; - more_bits = true; - } - } - } - } - - return fromfp_round_and_return (negative, uret, half_bit, more_bits, round, - exponent, max_exponent, width); -} diff --git a/sysdeps/ieee754/ldbl-128ibm/s_fromfpxl.c b/sysdeps/ieee754/ldbl-128ibm/s_fromfpxl.c deleted file mode 100644 index 2f3189d7de..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_fromfpxl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 0 -#define INEXACT 1 -#define FUNC fromfpxl -#include diff --git a/sysdeps/ieee754/ldbl-128ibm/s_getpayloadl.c b/sysdeps/ieee754/ldbl-128ibm/s_getpayloadl.c deleted file mode 100644 index 420b17837e..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_getpayloadl.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Get NaN payload. ldbl-128ibm version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -long double -getpayloadl (const long double *x) -{ - double xhi = ldbl_high (*x); - uint64_t ix; - EXTRACT_WORDS64 (ix, xhi); - ix &= 0x7ffffffffffffULL; - if (FIX_INT_FP_CONVERT_ZERO && ix == 0) - return 0.0L; - return (long double) ix; -} diff --git a/sysdeps/ieee754/ldbl-128ibm/s_iscanonicall.c b/sysdeps/ieee754/ldbl-128ibm/s_iscanonicall.c deleted file mode 100644 index 24999a920d..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_iscanonicall.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Test whether long double value is canonical. ldbl-128ibm version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__iscanonicall (long double x) -{ - double xhi, xlo; - uint64_t hx, lx; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - EXTRACT_WORDS64 (lx, xlo); - int64_t ix = hx & 0x7fffffffffffffffULL; - int64_t iy = lx & 0x7fffffffffffffffULL; - int hexp = (ix & 0x7ff0000000000000LL) >> 52; - int lexp = (iy & 0x7ff0000000000000LL) >> 52; - - if (iy == 0) - /* Low part 0 is always OK. */ - return 1; - - if (hexp == 0x7ff) - /* If a NaN, the low part does not matter. If an infinity, the - low part must be 0, in which case we have already returned. */ - return ix != 0x7ff0000000000000LL; - - /* The high part is finite and the low part is nonzero. There must - be sufficient difference between the exponents. */ - bool low_p2; - if (lexp == 0) - { - /* Adjust the exponent for subnormal low part. */ - lexp = 12 - __builtin_clzll (iy); - low_p2 = iy == (1LL << (51 + lexp)); - } - else - low_p2 = (iy & 0xfffffffffffffLL) == 0; - int expdiff = hexp - lexp; - return expdiff > 53 || (expdiff == 53 && low_p2 && (ix & 1) == 0); -} -libm_hidden_def (__iscanonicall) diff --git a/sysdeps/ieee754/ldbl-128ibm/s_isinfl.c b/sysdeps/ieee754/ldbl-128ibm/s_isinfl.c deleted file mode 100644 index 730aa4d8d1..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_isinfl.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Written by J.T. Conklin . - * Change for long double by Jakub Jelinek - * Public domain. - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * isinfl(x) returns 1 if x is inf, -1 if x is -inf, else 0; - * no branching! - * slightly dodgy in relying on signed shift right copying sign bit - */ - -#include -#include -#include - -int -___isinfl (long double x) -{ - double xhi; - int64_t hx, mask; - - xhi = ldbl_high (x); - EXTRACT_WORDS64 (hx, xhi); - - mask = (hx & 0x7fffffffffffffffLL) ^ 0x7ff0000000000000LL; - mask |= -mask; - mask >>= 63; - return ~mask & (hx >> 62); -} -hidden_ver (___isinfl, __isinfl) -#if !IS_IN (libm) -weak_alias (___isinfl, ____isinfl) -long_double_symbol (libc, ___isinfl, isinfl); -long_double_symbol (libc, ____isinfl, __isinfl); -#endif diff --git a/sysdeps/ieee754/ldbl-128ibm/s_isnanl.c b/sysdeps/ieee754/ldbl-128ibm/s_isnanl.c deleted file mode 100644 index 9980875df2..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_isnanl.c +++ /dev/null @@ -1,46 +0,0 @@ -/* s_isnanl.c -- long double version of s_isnan.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * isnanl(x) returns 1 is x is nan, else 0; - * no branching! - */ - -#include -#include -#include - -int -___isnanl (long double x) -{ - uint64_t hx; - double xhi; - - xhi = ldbl_high (x); - EXTRACT_WORDS64 (hx, xhi); - hx &= 0x7fffffffffffffffLL; - hx = 0x7ff0000000000000LL - hx; - return (int) (hx >> 63); -} -hidden_ver (___isnanl, __isnanl) -#if !IS_IN (libm) -weak_alias (___isnanl, ____isnanl) -long_double_symbol (libc, ___isnanl, isnanl); -long_double_symbol (libc, ____isnanl, __isnanl); -#endif diff --git a/sysdeps/ieee754/ldbl-128ibm/s_issignalingl.c b/sysdeps/ieee754/ldbl-128ibm/s_issignalingl.c deleted file mode 100644 index feb7edea5d..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_issignalingl.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Test for signaling NaN. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__issignalingl (long double x) -{ - uint64_t xi; - /* For inspecting NaN status, we only have to look at the first of the pair - of IEEE 754 64-bit precision numbers. */ - double xhi; - - xhi = ldbl_high (x); - EXTRACT_WORDS64 (xi, xhi); -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN -# error untested - /* We only have to care about the high-order bit of x's significand, because - having it set (sNaN) already makes the significand different from that - used to designate infinity. */ - return (xi & UINT64_C (0x7ff8000000000000)) == UINT64_C (0x7ff8000000000000); -#else - /* To keep the following comparison simple, toggle the quiet/signaling bit, - so that it is set for sNaNs. This is inverse to IEEE 754-2008 (as well as - common practice for IEEE 754-1985). */ - xi ^= UINT64_C (0x0008000000000000); - /* We have to compare for greater (instead of greater or equal), because x's - significand being all-zero designates infinity not NaN. */ - return (xi & UINT64_C (0x7fffffffffffffff)) > UINT64_C (0x7ff8000000000000); -#endif -} -libm_hidden_def (__issignalingl) diff --git a/sysdeps/ieee754/ldbl-128ibm/s_llrintl.c b/sysdeps/ieee754/ldbl-128ibm/s_llrintl.c deleted file mode 100644 index fbf38bf717..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_llrintl.c +++ /dev/null @@ -1,140 +0,0 @@ -/* Round to long long int long double floating-point values. - IBM extended format long double version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - -long long -__llrintl (long double x) -{ - double xh, xl; - long long res, hi, lo; - int save_round; - - ldbl_unpack (x, &xh, &xl); - - /* Limit the range of values handled by the conversion to long long. - We do this because we aren't sure whether that conversion properly - raises FE_INVALID. */ - if (__builtin_expect - ((__builtin_fabs (xh) <= -(double) (-__LONG_LONG_MAX__ - 1)), 1) -#if !defined (FE_INVALID) - || 1 -#endif - ) - { - save_round = fegetround (); - - if (__glibc_unlikely ((xh == -(double) (-__LONG_LONG_MAX__ - 1)))) - { - /* When XH is 9223372036854775808.0, converting to long long will - overflow, resulting in an invalid operation. However, XL might - be negative and of sufficient magnitude that the overall long - double is in fact in range. Avoid raising an exception. In any - case we need to convert this value specially, because - the converted value is not exactly represented as a double - thus subtracting HI from XH suffers rounding error. */ - hi = __LONG_LONG_MAX__; - xh = 1.0; - } - else - { - hi = (long long) xh; - xh -= hi; - } - ldbl_canonicalize (&xh, &xl); - - lo = (long long) xh; - - /* Peg at max/min values, assuming that the above conversions do so. - Strictly speaking, we can return anything for values that overflow, - but this is more useful. */ - res = hi + lo; - - /* This is just sign(hi) == sign(lo) && sign(res) != sign(hi). */ - if (__glibc_unlikely (((~(hi ^ lo) & (res ^ hi)) < 0))) - goto overflow; - - xh -= lo; - ldbl_canonicalize (&xh, &xl); - - hi = res; - switch (save_round) - { - case FE_TONEAREST: - if (fabs (xh) < 0.5 - || (fabs (xh) == 0.5 - && ((xh > 0.0 && xl < 0.0) - || (xh < 0.0 && xl > 0.0) - || (xl == 0.0 && (res & 1) == 0)))) - return res; - - if (xh < 0.0) - res -= 1; - else - res += 1; - break; - - case FE_TOWARDZERO: - if (res > 0 && (xh < 0.0 || (xh == 0.0 && xl < 0.0))) - res -= 1; - else if (res < 0 && (xh > 0.0 || (xh == 0.0 && xl > 0.0))) - res += 1; - return res; - break; - - case FE_UPWARD: - if (xh > 0.0 || (xh == 0.0 && xl > 0.0)) - res += 1; - break; - - case FE_DOWNWARD: - if (xh < 0.0 || (xh == 0.0 && xl < 0.0)) - res -= 1; - break; - } - - if (__glibc_unlikely (((~(hi ^ (res - hi)) & (res ^ hi)) < 0))) - goto overflow; - - return res; - } - else - { - if (xh > 0.0) - hi = __LONG_LONG_MAX__; - else if (xh < 0.0) - hi = -__LONG_LONG_MAX__ - 1; - else - /* Nan */ - hi = 0; - } - -overflow: -#ifdef FE_INVALID - feraiseexcept (FE_INVALID); -#endif - return hi; -} - -long_double_symbol (libm, __llrintl, llrintl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_llroundl.c b/sysdeps/ieee754/ldbl-128ibm/s_llroundl.c deleted file mode 100644 index 609cc864de..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_llroundl.c +++ /dev/null @@ -1,120 +0,0 @@ -/* Round to long long int long double floating-point values. - IBM extended format long double version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -long long -__llroundl (long double x) -{ - double xh, xl; - long long res, hi, lo; - - ldbl_unpack (x, &xh, &xl); - - /* Limit the range of values handled by the conversion to long long. - We do this because we aren't sure whether that conversion properly - raises FE_INVALID. */ - if (__builtin_expect - ((__builtin_fabs (xh) <= -(double) (-__LONG_LONG_MAX__ - 1)), 1) -#if !defined (FE_INVALID) - || 1 -#endif - ) - { - if (__glibc_unlikely ((xh == -(double) (-__LONG_LONG_MAX__ - 1)))) - { - /* When XH is 9223372036854775808.0, converting to long long will - overflow, resulting in an invalid operation. However, XL might - be negative and of sufficient magnitude that the overall long - double is in fact in range. Avoid raising an exception. In any - case we need to convert this value specially, because - the converted value is not exactly represented as a double - thus subtracting HI from XH suffers rounding error. */ - hi = __LONG_LONG_MAX__; - xh = 1.0; - } - else - { - hi = (long long) xh; - xh -= hi; - } - ldbl_canonicalize (&xh, &xl); - - lo = (long long) xh; - - /* Peg at max/min values, assuming that the above conversions do so. - Strictly speaking, we can return anything for values that overflow, - but this is more useful. */ - res = hi + lo; - - /* This is just sign(hi) == sign(lo) && sign(res) != sign(hi). */ - if (__glibc_unlikely (((~(hi ^ lo) & (res ^ hi)) < 0))) - goto overflow; - - xh -= lo; - ldbl_canonicalize (&xh, &xl); - - hi = res; - if (xh > 0.5) - { - res += 1; - } - else if (xh == 0.5) - { - if (xl > 0.0 || (xl == 0.0 && res >= 0)) - res += 1; - } - else if (-xh > 0.5) - { - res -= 1; - } - else if (-xh == 0.5) - { - if (xl < 0.0 || (xl == 0.0 && res <= 0)) - res -= 1; - } - - if (__glibc_unlikely (((~(hi ^ (res - hi)) & (res ^ hi)) < 0))) - goto overflow; - - return res; - } - else - { - if (xh > 0.0) - hi = __LONG_LONG_MAX__; - else if (xh < 0.0) - hi = -__LONG_LONG_MAX__ - 1; - else - /* Nan */ - hi = 0; - } - -overflow: -#ifdef FE_INVALID - feraiseexcept (FE_INVALID); -#endif - return hi; -} - -long_double_symbol (libm, __llroundl, llroundl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c b/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c deleted file mode 100644 index 5457892a98..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c +++ /dev/null @@ -1,249 +0,0 @@ -/* log1pl.c - * - * Relative error logarithm - * Natural logarithm of 1+x, 128-bit long double precision - * - * - * - * SYNOPSIS: - * - * long double x, y, log1pl(); - * - * y = log1pl( x ); - * - * - * - * DESCRIPTION: - * - * Returns the base e (2.718...) logarithm of 1+x. - * - * The argument 1+x is separated into its exponent and fractional - * parts. If the exponent is between -1 and +1, the logarithm - * of the fraction is approximated by - * - * log(1+x) = x - 0.5 x^2 + x^3 P(x)/Q(x). - * - * Otherwise, setting z = 2(w-1)/(w+1), - * - * log(w) = z + z^3 P(z)/Q(z). - * - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -1, 8 100000 1.9e-34 4.3e-35 - */ - -/* Copyright 2001 by Stephen L. Moshier - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - - -#include -#include -#include - -/* Coefficients for log(1+x) = x - x^2 / 2 + x^3 P(x)/Q(x) - * 1/sqrt(2) <= 1+x < sqrt(2) - * Theoretical peak relative error = 5.3e-37, - * relative peak error spread = 2.3e-14 - */ -static const long double - P12 = 1.538612243596254322971797716843006400388E-6L, - P11 = 4.998469661968096229986658302195402690910E-1L, - P10 = 2.321125933898420063925789532045674660756E1L, - P9 = 4.114517881637811823002128927449878962058E2L, - P8 = 3.824952356185897735160588078446136783779E3L, - P7 = 2.128857716871515081352991964243375186031E4L, - P6 = 7.594356839258970405033155585486712125861E4L, - P5 = 1.797628303815655343403735250238293741397E5L, - P4 = 2.854829159639697837788887080758954924001E5L, - P3 = 3.007007295140399532324943111654767187848E5L, - P2 = 2.014652742082537582487669938141683759923E5L, - P1 = 7.771154681358524243729929227226708890930E4L, - P0 = 1.313572404063446165910279910527789794488E4L, - /* Q12 = 1.000000000000000000000000000000000000000E0L, */ - Q11 = 4.839208193348159620282142911143429644326E1L, - Q10 = 9.104928120962988414618126155557301584078E2L, - Q9 = 9.147150349299596453976674231612674085381E3L, - Q8 = 5.605842085972455027590989944010492125825E4L, - Q7 = 2.248234257620569139969141618556349415120E5L, - Q6 = 6.132189329546557743179177159925690841200E5L, - Q5 = 1.158019977462989115839826904108208787040E6L, - Q4 = 1.514882452993549494932585972882995548426E6L, - Q3 = 1.347518538384329112529391120390701166528E6L, - Q2 = 7.777690340007566932935753241556479363645E5L, - Q1 = 2.626900195321832660448791748036714883242E5L, - Q0 = 3.940717212190338497730839731583397586124E4L; - -/* Coefficients for log(x) = z + z^3 P(z^2)/Q(z^2), - * where z = 2(x-1)/(x+1) - * 1/sqrt(2) <= x < sqrt(2) - * Theoretical peak relative error = 1.1e-35, - * relative peak error spread 1.1e-9 - */ -static const long double - R5 = -8.828896441624934385266096344596648080902E-1L, - R4 = 8.057002716646055371965756206836056074715E1L, - R3 = -2.024301798136027039250415126250455056397E3L, - R2 = 2.048819892795278657810231591630928516206E4L, - R1 = -8.977257995689735303686582344659576526998E4L, - R0 = 1.418134209872192732479751274970992665513E5L, - /* S6 = 1.000000000000000000000000000000000000000E0L, */ - S5 = -1.186359407982897997337150403816839480438E2L, - S4 = 3.998526750980007367835804959888064681098E3L, - S3 = -5.748542087379434595104154610899551484314E4L, - S2 = 4.001557694070773974936904547424676279307E5L, - S1 = -1.332535117259762928288745111081235577029E6L, - S0 = 1.701761051846631278975701529965589676574E6L; - -/* C1 + C2 = ln 2 */ -static const long double C1 = 6.93145751953125E-1L; -static const long double C2 = 1.428606820309417232121458176568075500134E-6L; - -static const long double sqrth = 0.7071067811865475244008443621048490392848L; -/* ln (2^16384 * (1 - 2^-113)) */ -static const long double zero = 0.0L; - - -long double -__log1pl (long double xm1) -{ - long double x, y, z, r, s; - double xhi; - int32_t hx, lx; - int e; - - /* Test for NaN or infinity input. */ - xhi = ldbl_high (xm1); - EXTRACT_WORDS (hx, lx, xhi); - if (hx >= 0x7ff00000) - return xm1 + xm1; - - /* log1p(+- 0) = +- 0. */ - if (((hx & 0x7fffffff) | lx) == 0) - return xm1; - - if (xm1 >= 0x1p107L) - x = xm1; - else - x = xm1 + 1.0L; - - /* log1p(-1) = -inf */ - if (x <= 0.0L) - { - if (x == 0.0L) - return (-1.0L / 0.0L); - else - return (zero / (x - x)); - } - - /* Separate mantissa from exponent. */ - - /* Use frexp used so that denormal numbers will be handled properly. */ - x = __frexpl (x, &e); - - /* Logarithm using log(x) = z + z^3 P(z^2)/Q(z^2), - where z = 2(x-1)/x+1). */ - if ((e > 2) || (e < -2)) - { - if (x < sqrth) - { /* 2( 2x-1 )/( 2x+1 ) */ - e -= 1; - z = x - 0.5L; - y = 0.5L * z + 0.5L; - } - else - { /* 2 (x-1)/(x+1) */ - z = x - 0.5L; - z -= 0.5L; - y = 0.5L * x + 0.5L; - } - x = z / y; - z = x * x; - r = ((((R5 * z - + R4) * z - + R3) * z - + R2) * z - + R1) * z - + R0; - s = (((((z - + S5) * z - + S4) * z - + S3) * z - + S2) * z - + S1) * z - + S0; - z = x * (z * r / s); - z = z + e * C2; - z = z + x; - z = z + e * C1; - return (z); - } - - - /* Logarithm using log(1+x) = x - .5x^2 + x^3 P(x)/Q(x). */ - - if (x < sqrth) - { - e -= 1; - if (e != 0) - x = 2.0L * x - 1.0L; /* 2x - 1 */ - else - x = xm1; - } - else - { - if (e != 0) - x = x - 1.0L; - else - x = xm1; - } - z = x * x; - r = (((((((((((P12 * x - + P11) * x - + P10) * x - + P9) * x - + P8) * x - + P7) * x - + P6) * x - + P5) * x - + P4) * x - + P3) * x - + P2) * x - + P1) * x - + P0; - s = (((((((((((x - + Q11) * x - + Q10) * x - + Q9) * x - + Q8) * x - + Q7) * x - + Q6) * x - + Q5) * x - + Q4) * x - + Q3) * x - + Q2) * x - + Q1) * x - + Q0; - y = x * (z * r / s); - y = y + e * C2; - z = y - 0.5L * z; - z = z + x; - z = z + e * C1; - return (z); -} diff --git a/sysdeps/ieee754/ldbl-128ibm/s_logbl.c b/sysdeps/ieee754/ldbl-128ibm/s_logbl.c deleted file mode 100644 index 3c07c5e8e2..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_logbl.c +++ /dev/null @@ -1,63 +0,0 @@ -/* s_logbl.c -- long double version of s_logb.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * long double logbl(x) - * IEEE 754 logb. Included to pass IEEE test suite. Not recommend. - * Use ilogb instead. - */ - -#include -#include -#include -#include - -long double -__logbl (long double x) -{ - int64_t hx, hxs, rhx; - double xhi, xlo; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - hxs = hx; - hx &= 0x7fffffffffffffffLL; /* high |x| */ - if (hx == 0) - return -1.0 / fabs (x); - if (hx >= 0x7ff0000000000000LL) - return x * x; - if (__glibc_unlikely ((rhx = hx >> 52) == 0)) - { - /* POSIX specifies that denormal number is treated as - though it were normalized. */ - rhx -= __builtin_clzll (hx) - 12; - } - else if ((hx & 0x000fffffffffffffLL) == 0) - { - /* If the high part is a power of 2, and the low part is nonzero - with the opposite sign, the low part affects the - exponent. */ - int64_t lx; - EXTRACT_WORDS64 (lx, xlo); - if ((hxs ^ lx) < 0 && (lx & 0x7fffffffffffffffLL) != 0) - rhx--; - } - if (FIX_INT_FP_CONVERT_ZERO && rhx == 1023) - return 0.0L; - return (long double) (rhx - 1023); -} -#ifndef __logbl -long_double_symbol (libm, __logbl, logbl); -#endif diff --git a/sysdeps/ieee754/ldbl-128ibm/s_lrintl.c b/sysdeps/ieee754/ldbl-128ibm/s_lrintl.c deleted file mode 100644 index b404cab8e3..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_lrintl.c +++ /dev/null @@ -1,155 +0,0 @@ -/* Round to long int long double floating-point values. - IBM extended format long double version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - -long -__lrintl (long double x) -{ - double xh, xl; - long res, hi, lo; - int save_round; - - ldbl_unpack (x, &xh, &xl); - - /* Limit the range of values handled by the conversion to long. - We do this because we aren't sure whether that conversion properly - raises FE_INVALID. */ - if ( -#if __LONG_MAX__ == 2147483647 - __builtin_expect - ((__builtin_fabs (xh) <= (double) __LONG_MAX__ + 2), 1) -#else - __builtin_expect - ((__builtin_fabs (xh) <= -(double) (-__LONG_MAX__ - 1)), 1) -#endif -#if !defined (FE_INVALID) - || 1 -#endif - ) - { - save_round = fegetround (); - -#if __LONG_MAX__ == 2147483647 - long long llhi = (long long) xh; - if (llhi != (long) llhi) - hi = llhi < 0 ? -__LONG_MAX__ - 1 : __LONG_MAX__; - else - hi = llhi; - xh -= hi; -#else - if (__glibc_unlikely ((xh == -(double) (-__LONG_MAX__ - 1)))) - { - /* When XH is 9223372036854775808.0, converting to long long will - overflow, resulting in an invalid operation. However, XL might - be negative and of sufficient magnitude that the overall long - double is in fact in range. Avoid raising an exception. In any - case we need to convert this value specially, because - the converted value is not exactly represented as a double - thus subtracting HI from XH suffers rounding error. */ - hi = __LONG_MAX__; - xh = 1.0; - } - else - { - hi = (long) xh; - xh -= hi; - } -#endif - ldbl_canonicalize (&xh, &xl); - - lo = (long) xh; - - /* Peg at max/min values, assuming that the above conversions do so. - Strictly speaking, we can return anything for values that overflow, - but this is more useful. */ - res = hi + lo; - - /* This is just sign(hi) == sign(lo) && sign(res) != sign(hi). */ - if (__glibc_unlikely (((~(hi ^ lo) & (res ^ hi)) < 0))) - goto overflow; - - xh -= lo; - ldbl_canonicalize (&xh, &xl); - - hi = res; - switch (save_round) - { - case FE_TONEAREST: - if (fabs (xh) < 0.5 - || (fabs (xh) == 0.5 - && ((xh > 0.0 && xl < 0.0) - || (xh < 0.0 && xl > 0.0) - || (xl == 0.0 && (res & 1) == 0)))) - return res; - - if (xh < 0.0) - res -= 1; - else - res += 1; - break; - - case FE_TOWARDZERO: - if (res > 0 && (xh < 0.0 || (xh == 0.0 && xl < 0.0))) - res -= 1; - else if (res < 0 && (xh > 0.0 || (xh == 0.0 && xl > 0.0))) - res += 1; - return res; - break; - - case FE_UPWARD: - if (xh > 0.0 || (xh == 0.0 && xl > 0.0)) - res += 1; - break; - - case FE_DOWNWARD: - if (xh < 0.0 || (xh == 0.0 && xl < 0.0)) - res -= 1; - break; - } - - if (__glibc_unlikely (((~(hi ^ (res - hi)) & (res ^ hi)) < 0))) - goto overflow; - - return res; - } - else - { - if (xh > 0.0) - hi = __LONG_MAX__; - else if (xh < 0.0) - hi = -__LONG_MAX__ - 1; - else - /* Nan */ - hi = 0; - } - -overflow: -#ifdef FE_INVALID - feraiseexcept (FE_INVALID); -#endif - return hi; -} - -long_double_symbol (libm, __lrintl, lrintl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_lroundl.c b/sysdeps/ieee754/ldbl-128ibm/s_lroundl.c deleted file mode 100644 index f9ae37e844..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_lroundl.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Round to long int long double floating-point values. - IBM extended format long double version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -long -__lroundl (long double x) -{ - double xh, xl; - long res, hi, lo; - - ldbl_unpack (x, &xh, &xl); - - /* Limit the range of values handled by the conversion to long. - We do this because we aren't sure whether that conversion properly - raises FE_INVALID. */ - if ( -#if __LONG_MAX__ == 2147483647 - __builtin_expect - ((__builtin_fabs (xh) <= (double) __LONG_MAX__ + 2), 1) -#else - __builtin_expect - ((__builtin_fabs (xh) <= -(double) (-__LONG_MAX__ - 1)), 1) -#endif -#if !defined (FE_INVALID) - || 1 -#endif - ) - { -#if __LONG_MAX__ == 2147483647 - long long llhi = (long long) xh; - if (llhi != (long) llhi) - hi = llhi < 0 ? -__LONG_MAX__ - 1 : __LONG_MAX__; - else - hi = llhi; - xh -= hi; -#else - if (__glibc_unlikely ((xh == -(double) (-__LONG_MAX__ - 1)))) - { - /* When XH is 9223372036854775808.0, converting to long long will - overflow, resulting in an invalid operation. However, XL might - be negative and of sufficient magnitude that the overall long - double is in fact in range. Avoid raising an exception. In any - case we need to convert this value specially, because - the converted value is not exactly represented as a double - thus subtracting HI from XH suffers rounding error. */ - hi = __LONG_MAX__; - xh = 1.0; - } - else - { - hi = (long) xh; - xh -= hi; - } -#endif - ldbl_canonicalize (&xh, &xl); - - lo = (long) xh; - - /* Peg at max/min values, assuming that the above conversions do so. - Strictly speaking, we can return anything for values that overflow, - but this is more useful. */ - res = hi + lo; - - /* This is just sign(hi) == sign(lo) && sign(res) != sign(hi). */ - if (__glibc_unlikely (((~(hi ^ lo) & (res ^ hi)) < 0))) - goto overflow; - - xh -= lo; - ldbl_canonicalize (&xh, &xl); - - hi = res; - if (xh > 0.5) - { - res += 1; - } - else if (xh == 0.5) - { - if (xl > 0.0 || (xl == 0.0 && res >= 0)) - res += 1; - } - else if (-xh > 0.5) - { - res -= 1; - } - else if (-xh == 0.5) - { - if (xl < 0.0 || (xl == 0.0 && res <= 0)) - res -= 1; - } - - if (__glibc_unlikely (((~(hi ^ (res - hi)) & (res ^ hi)) < 0))) - goto overflow; - - return res; - } - else - { - if (xh > 0.0) - hi = __LONG_MAX__; - else if (xh < 0.0) - hi = -__LONG_MAX__ - 1; - else - /* Nan */ - hi = 0; - } - -overflow: -#ifdef FE_INVALID - feraiseexcept (FE_INVALID); -#endif - return hi; -} - -long_double_symbol (libm, __lroundl, lroundl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_modfl.c b/sysdeps/ieee754/ldbl-128ibm/s_modfl.c deleted file mode 100644 index 260cc3e33c..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_modfl.c +++ /dev/null @@ -1,96 +0,0 @@ -/* s_modfl.c -- long double version of s_modf.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * modfl(long double x, long double *iptr) - * return fraction part of x, and return x's integral part in *iptr. - * Method: - * Bit twiddling. - * - * Exception: - * No exception. - */ - -#include -#include -#include - -static const long double one = 1.0; - -long double __modfl(long double x, long double *iptr) -{ - int64_t i0,i1,j0; - u_int64_t i; - double xhi, xlo; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (i0, xhi); - EXTRACT_WORDS64 (i1, xlo); - i1 &= 0x000fffffffffffffLL; - j0 = ((i0>>52)&0x7ff)-0x3ff; /* exponent of x */ - if(j0<52) { /* integer part in high x */ - if(j0<0) { /* |x|<1 */ - /* *iptr = +-0 */ - INSERT_WORDS64 (xhi, i0&0x8000000000000000ULL); - *iptr = xhi; - return x; - } else { - i = (0x000fffffffffffffLL)>>j0; - if(((i0&i)|(i1&0x7fffffffffffffffLL))==0) { /* x is integral */ - *iptr = x; - /* return +-0 */ - INSERT_WORDS64 (xhi, i0&0x8000000000000000ULL); - x = xhi; - return x; - } else { - INSERT_WORDS64 (xhi, i0&(~i)); - *iptr = xhi; - return x - *iptr; - } - } - } else if (j0>103) { /* no fraction part */ - *iptr = x*one; - /* We must handle NaNs separately. */ - if ((i0 & 0x7fffffffffffffffLL) > 0x7ff0000000000000LL) - return x*one; - /* return +-0 */ - INSERT_WORDS64 (xhi, i0&0x8000000000000000ULL); - x = xhi; - return x; - } else { /* fraction part in low x */ - i = -1ULL>>(j0-52); - if((i1&i)==0) { /* x is integral */ - *iptr = x; - /* return +-0 */ - INSERT_WORDS64 (xhi, i0&0x8000000000000000ULL); - x = xhi; - return x; - } else { - INSERT_WORDS64 (xhi, i0); - INSERT_WORDS64 (xlo, i1&(~i)); - *iptr = ldbl_pack (xhi, xlo); - return x - *iptr; - } - } -} -#if IS_IN (libm) -long_double_symbol (libm, __modfl, modfl); -#else -long_double_symbol (libc, __modfl, modfl); -#endif diff --git a/sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c b/sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c deleted file mode 100644 index 18b052cecb..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Round to int long double floating-point values without raising inexact. - IBM extended format long double version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define USE_AS_NEARBYINTL -#include "s_rintl.c" diff --git a/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c b/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c deleted file mode 100644 index 0d6469d548..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c +++ /dev/null @@ -1,160 +0,0 @@ -/* s_nextafterl.c -- long double version of s_nextafter.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* IEEE functions - * nextafterl(x,y) - * return the next machine floating-point number of x in the - * direction toward y. - * Special cases: - */ - -#include -#include -#include -#include -#include - -long double __nextafterl(long double x, long double y) -{ - int64_t hx, hy, ihx, ihy, lx; - double xhi, xlo, yhi; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - EXTRACT_WORDS64 (lx, xlo); - yhi = ldbl_high (y); - EXTRACT_WORDS64 (hy, yhi); - ihx = hx&0x7fffffffffffffffLL; /* |hx| */ - ihy = hy&0x7fffffffffffffffLL; /* |hy| */ - - if((ihx>0x7ff0000000000000LL) || /* x is nan */ - (ihy>0x7ff0000000000000LL)) /* y is nan */ - return x+y; /* signal the nan */ - if(x==y) - return y; /* x=y, return y */ - if(ihx == 0) { /* x == 0 */ - long double u; /* return +-minsubnormal */ - hy = (hy & 0x8000000000000000ULL) | 1; - INSERT_WORDS64 (yhi, hy); - x = yhi; - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - - long double u; - if(x > y) { /* x > y, x -= ulp */ - /* This isn't the largest magnitude correctly rounded - long double as you can see from the lowest mantissa - bit being zero. It is however the largest magnitude - long double with a 106 bit mantissa, and nextafterl - is insane with variable precision. So to make - nextafterl sane we assume 106 bit precision. */ - if((hx==0xffefffffffffffffLL)&&(lx==0xfc8ffffffffffffeLL)) { - u = x+x; /* overflow, return -inf */ - math_force_eval (u); - __set_errno (ERANGE); - return y; - } - if (hx >= 0x7ff0000000000000LL) { - u = 0x1.fffffffffffff7ffffffffffff8p+1023L; - return u; - } - if(ihx <= 0x0360000000000000LL) { /* x <= LDBL_MIN */ - u = math_opt_barrier (x); - x -= LDBL_TRUE_MIN; - if (ihx < 0x0360000000000000LL - || (hx > 0 && lx <= 0) - || (hx < 0 && lx > 1)) { - u = u * u; - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - /* Avoid returning -0 in FE_DOWNWARD mode. */ - if (x == 0.0L) - return 0.0L; - return x; - } - /* If the high double is an exact power of two and the low - double is the opposite sign, then 1ulp is one less than - what we might determine from the high double. Similarly - if X is an exact power of two, and positive, because - making it a little smaller will result in the exponent - decreasing by one and normalisation of the mantissa. */ - if ((hx & 0x000fffffffffffffLL) == 0 - && ((lx != 0 && (hx ^ lx) < 0) - || (lx == 0 && hx >= 0))) - ihx -= 1LL << 52; - if (ihx < (106LL << 52)) { /* ulp will denormal */ - INSERT_WORDS64 (yhi, ihx & (0x7ffLL<<52)); - u = yhi * 0x1p-105; - } else { - INSERT_WORDS64 (yhi, (ihx & (0x7ffLL<<52))-(105LL<<52)); - u = yhi; - } - return x - u; - } else { /* x < y, x += ulp */ - if((hx==0x7fefffffffffffffLL)&&(lx==0x7c8ffffffffffffeLL)) { - u = x+x; /* overflow, return +inf */ - math_force_eval (u); - __set_errno (ERANGE); - return y; - } - if ((uint64_t) hx >= 0xfff0000000000000ULL) { - u = -0x1.fffffffffffff7ffffffffffff8p+1023L; - return u; - } - if(ihx <= 0x0360000000000000LL) { /* x <= LDBL_MIN */ - u = math_opt_barrier (x); - x += LDBL_TRUE_MIN; - if (ihx < 0x0360000000000000LL - || (hx > 0 && lx < 0 && lx != 0x8000000000000001LL) - || (hx < 0 && lx >= 0)) { - u = u * u; - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - if (x == 0.0L) /* handle negative LDBL_TRUE_MIN case */ - x = -0.0L; - return x; - } - /* If the high double is an exact power of two and the low - double is the opposite sign, then 1ulp is one less than - what we might determine from the high double. Similarly - if X is an exact power of two, and negative, because - making it a little larger will result in the exponent - decreasing by one and normalisation of the mantissa. */ - if ((hx & 0x000fffffffffffffLL) == 0 - && ((lx != 0 && (hx ^ lx) < 0) - || (lx == 0 && hx < 0))) - ihx -= 1LL << 52; - if (ihx < (106LL << 52)) { /* ulp will denormal */ - INSERT_WORDS64 (yhi, ihx & (0x7ffLL<<52)); - u = yhi * 0x1p-105; - } else { - INSERT_WORDS64 (yhi, (ihx & (0x7ffLL<<52))-(105LL<<52)); - u = yhi; - } - return x + u; - } -} -strong_alias (__nextafterl, __nexttowardl) -long_double_symbol (libm, __nextafterl, nextafterl); -long_double_symbol (libm, __nexttowardl, nexttowardl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c b/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c deleted file mode 100644 index d8f4fc6523..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c +++ /dev/null @@ -1,90 +0,0 @@ -/* s_nexttoward.c - * Conversion from s_nextafter.c by Ulrich Drepper, Cygnus Support, - * drepper@cygnus.com and Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* IEEE functions - * nexttoward(x,y) - * return the next machine floating-point number of x in the - * direction toward y. - * Special cases: - */ - -#include -#include -#include -#include -#include - -double __nexttoward(double x, long double y) -{ - int32_t hx,ix; - int64_t hy,iy; - uint32_t lx; - double yhi; - - EXTRACT_WORDS(hx,lx,x); - yhi = ldbl_high (y); - EXTRACT_WORDS64(hy,yhi); - ix = hx&0x7fffffff; /* |x| */ - iy = hy&0x7fffffffffffffffLL; /* |y| */ - - if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || /* x is nan */ - iy>0x7ff0000000000000LL) /* y is nan */ - return x+y; - if((long double) x==y) return y; /* x=y, return y */ - if((ix|lx)==0) { /* x == 0 */ - double u; - INSERT_WORDS(x,(uint32_t)((hy>>32)&0x80000000),1);/* return +-minsub */ - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(hx>=0) { /* x > 0 */ - if (x > y) { /* x > 0 */ - if(lx==0) hx -= 1; - lx -= 1; - } else { /* x < y, x += ulp */ - lx += 1; - if(lx==0) hx += 1; - } - } else { /* x < 0 */ - if (x < y) { /* x < 0 */ - if(lx==0) hx -= 1; - lx -= 1; - } else { /* x > y, x += ulp */ - lx += 1; - if(lx==0) hx += 1; - } - } - hy = hx&0x7ff00000; - if(hy>=0x7ff00000) { - double u = x+x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(hy<0x00100000) { - double u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - INSERT_WORDS(x,hx,lx); - return x; -} -long_double_symbol (libm, __nexttoward, nexttoward); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c b/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c deleted file mode 100644 index 7c5d1cc112..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c +++ /dev/null @@ -1,79 +0,0 @@ -/* s_nexttowardf.c -- float version of s_nextafter.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com - * and Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -#include -#include -#include -#include -#include - -float __nexttowardf(float x, long double y) -{ - int32_t hx,ix; - int64_t hy,iy; - double yhi; - - GET_FLOAT_WORD(hx,x); - yhi = ldbl_high (y); - EXTRACT_WORDS64 (hy, yhi); - ix = hx&0x7fffffff; /* |x| */ - iy = hy&0x7fffffffffffffffLL; /* |y| */ - - if((ix>0x7f800000) || /* x is nan */ - (iy>0x7ff0000000000000LL)) - /* y is nan */ - return x+y; - if((long double) x==y) return y; /* x=y, return y */ - if(ix==0) { /* x == 0 */ - float u; - SET_FLOAT_WORD(x,(u_int32_t)((hy>>32)&0x80000000)|1);/* return +-minsub*/ - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(hx>=0) { /* x > 0 */ - if(x > y) { /* x -= ulp */ - hx -= 1; - } else { /* x < y, x += ulp */ - hx += 1; - } - } else { /* x < 0 */ - if(x < y) { /* x -= ulp */ - hx -= 1; - } else { /* x > y, x += ulp */ - hx += 1; - } - } - hy = hx&0x7f800000; - if(hy>=0x7f800000) { - float u = x+x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(hy<0x00800000) { /* underflow */ - float u = x*x; - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - SET_FLOAT_WORD(x,hx); - return x; -} -long_double_symbol (libm, __nexttowardf, nexttowardf); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_nextupl.c b/sysdeps/ieee754/ldbl-128ibm/s_nextupl.c deleted file mode 100644 index bf74f0e1ab..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_nextupl.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Return the least floating-point number greater than X. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Return the least floating-point number greater than X. */ -long double -__nextupl (long double x) -{ - int64_t hx, ihx, lx; - double xhi, xlo, yhi; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - EXTRACT_WORDS64 (lx, xlo); - ihx = hx & 0x7fffffffffffffffLL; - - if (ihx > 0x7ff0000000000000LL) /* x is nan. */ - return x + x; /* Signal the nan. */ - if (ihx == 0) - return LDBL_TRUE_MIN; - - long double u; - if ((hx == 0x7fefffffffffffffLL) && (lx == 0x7c8ffffffffffffeLL)) - return INFINITY; - if ((uint64_t) hx >= 0xfff0000000000000ULL) - { - u = -0x1.fffffffffffff7ffffffffffff8p+1023L; - return u; - } - if (ihx <= 0x0360000000000000LL) - { /* x <= LDBL_MIN. */ - x += LDBL_TRUE_MIN; - if (x == 0.0L) /* Handle negative LDBL_TRUE_MIN case. */ - x = -0.0L; - return x; - } - /* If the high double is an exact power of two and the low - double is the opposite sign, then 1ulp is one less than - what we might determine from the high double. Similarly - if X is an exact power of two, and negative, because - making it a little larger will result in the exponent - decreasing by one and normalisation of the mantissa. */ - if ((hx & 0x000fffffffffffffLL) == 0 - && ((lx != 0 && lx != 0x8000000000000000LL && (hx ^ lx) < 0) - || ((lx == 0 || lx == 0x8000000000000000LL) && hx < 0))) - ihx -= 1LL << 52; - if (ihx < (106LL << 52)) - { /* ulp will denormal. */ - INSERT_WORDS64 (yhi, ihx & (0x7ffLL << 52)); - u = yhi * 0x1p-105; - } - else - { - INSERT_WORDS64 (yhi, (ihx & (0x7ffLL << 52)) - (105LL << 52)); - u = yhi; - } - return x + u; -} - -weak_alias (__nextupl, nextupl) diff --git a/sysdeps/ieee754/ldbl-128ibm/s_remquol.c b/sysdeps/ieee754/ldbl-128ibm/s_remquol.c deleted file mode 100644 index 9b6ec09d41..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_remquol.c +++ /dev/null @@ -1,119 +0,0 @@ -/* Compute remainder and a congruent to the quotient. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include -#include - - -static const long double zero = 0.0; - - -long double -__remquol (long double x, long double y, int *quo) -{ - int64_t hx,hy; - u_int64_t sx,lx,ly,qs; - int cquo; - double xhi, xlo, yhi, ylo; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - EXTRACT_WORDS64 (lx, xlo); - ldbl_unpack (y, &yhi, &ylo); - EXTRACT_WORDS64 (hy, yhi); - EXTRACT_WORDS64 (ly, ylo); - sx = hx & 0x8000000000000000ULL; - qs = sx ^ (hy & 0x8000000000000000ULL); - ly ^= hy & 0x8000000000000000ULL; - hy &= 0x7fffffffffffffffLL; - lx ^= sx; - hx &= 0x7fffffffffffffffLL; - - /* Purge off exception values. */ - if (hy == 0) - return (x * y) / (x * y); /* y = 0 */ - if ((hx >= 0x7ff0000000000000LL) /* x not finite */ - || (hy > 0x7ff0000000000000LL)) /* y is NaN */ - return (x * y) / (x * y); - - if (hy <= 0x7fbfffffffffffffLL) - x = __ieee754_fmodl (x, 8 * y); /* now x < 8y */ - - if (((hx - hy) | (lx - ly)) == 0) - { - *quo = qs ? -1 : 1; - return zero * x; - } - - x = fabsl (x); - y = fabsl (y); - cquo = 0; - - if (hy <= 0x7fcfffffffffffffLL && x >= 4 * y) - { - x -= 4 * y; - cquo += 4; - } - if (hy <= 0x7fdfffffffffffffLL && x >= 2 * y) - { - x -= 2 * y; - cquo += 2; - } - - if (hy < 0x0020000000000000LL) - { - if (x + x > y) - { - x -= y; - ++cquo; - if (x + x >= y) - { - x -= y; - ++cquo; - } - } - } - else - { - long double y_half = 0.5L * y; - if (x > y_half) - { - x -= y; - ++cquo; - if (x >= y_half) - { - x -= y; - ++cquo; - } - } - } - - *quo = qs ? -cquo : cquo; - - /* Ensure correct sign of zero result in round-downward mode. */ - if (x == 0.0L) - x = 0.0L; - if (sx) - x = -x; - return x; -} -long_double_symbol (libm, __remquol, remquol); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_rintl.c b/sysdeps/ieee754/ldbl-128ibm/s_rintl.c deleted file mode 100644 index ea8c2bca0e..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_rintl.c +++ /dev/null @@ -1,129 +0,0 @@ -/* Round to int long double floating-point values. - IBM extended format long double version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This has been coded in assembler because GCC makes such a mess of it - when it's coded in C. */ - -#include -#include -#include -#include -#include - -#ifdef USE_AS_NEARBYINTL -# define rintl nearbyintl -# define __rintl __nearbyintl -#endif - - -long double -__rintl (long double x) -{ - double xh, xl, hi, lo; - - ldbl_unpack (x, &xh, &xl); - - /* Return Inf, Nan, +/-0 unchanged. */ - if (__builtin_expect (xh != 0.0 - && __builtin_isless (__builtin_fabs (xh), - __builtin_inf ()), 1)) - { - double orig_xh; - int save_round = fegetround (); - - /* Long double arithmetic, including the canonicalisation below, - only works in round-to-nearest mode. */ -#ifdef USE_AS_NEARBYINTL - SET_RESTORE_ROUND_NOEX (FE_TONEAREST); -#else - fesetround (FE_TONEAREST); -#endif - - /* Convert the high double to integer. */ - orig_xh = xh; - hi = ldbl_nearbyint (xh); - - /* Subtract integral high part from the value. If the low double - happens to be exactly 0.5 or -0.5, you might think that this - subtraction could result in an incorrect conversion. For - instance, subtracting an odd number would cause this function - to round in the wrong direction. However, if we have a - canonical long double with the low double 0.5 or -0.5, then the - high double must be even. */ - xh -= hi; - ldbl_canonicalize (&xh, &xl); - - /* Now convert the low double, adjusted for any remainder from the - high double. */ - lo = ldbl_nearbyint (xh); - - xh -= lo; - ldbl_canonicalize (&xh, &xl); - - switch (save_round) - { - case FE_TONEAREST: - if (xl > 0.0 && xh == 0.5) - lo += 1.0; - else if (xl < 0.0 && -xh == 0.5) - lo -= 1.0; - break; - - case FE_TOWARDZERO: - if (orig_xh < 0.0) - goto do_up; - /* Fall thru */ - - case FE_DOWNWARD: - if (xh < 0.0 || (xh == 0.0 && xl < 0.0)) - lo -= 1.0; - break; - - case FE_UPWARD: - do_up: - if (xh > 0.0 || (xh == 0.0 && xl > 0.0)) - lo += 1.0; - break; - } - - /* Ensure the final value is canonical. In certain cases, - rounding causes hi,lo calculated so far to be non-canonical. */ - xh = hi; - xl = lo; - ldbl_canonicalize (&xh, &xl); - - /* Ensure we return -0 rather than +0 when appropriate. */ - if (orig_xh < 0.0) - xh = -__builtin_fabs (xh); - -#ifdef USE_AS_NEARBYINTL - math_force_eval (xh); - math_force_eval (xl); -#else - fesetround (save_round); -#endif - } - else - /* Quiet signaling NaN arguments. */ - xh += xh; - - return ldbl_pack (xh, xl); -} - -long_double_symbol (libm, __rintl, rintl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_roundevenl.c b/sysdeps/ieee754/ldbl-128ibm/s_roundevenl.c deleted file mode 100644 index f4221cda4b..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_roundevenl.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Round to nearest integer value, rounding halfway cases to even. - ldbl-128ibm version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -long double -roundevenl (long double x) -{ - double xh, xl, hi; - - ldbl_unpack (x, &xh, &xl); - - if (xh != 0 && isfinite (xh)) - { - hi = roundeven (xh); - if (hi != xh) - { - /* The high part is not an integer; the low part only - affects the result if the high part is exactly half way - between two integers and the low part is nonzero in the - opposite direction to the rounding of the high part. */ - double diff = hi - xh; - if (fabs (diff) == 0.5) - { - if (xl < 0 && diff > 0) - xh = hi - 1; - else if (xl > 0 && diff < 0) - xh = hi + 1; - else - xh = hi; - } - else - xh = hi; - xl = 0; - } - else - { - /* The high part is a nonzero integer. Rounding the low - part to nearest, ties round to even, is always correct, - as a high part that is an odd integer together with a low - part with magnitude 0.5 is not a valid long double. */ - xl = roundeven (xl); - xh = hi; - ldbl_canonicalize_int (&xh, &xl); - } - } - else - /* Quiet signaling NaN arguments. */ - xh += xh; - - return ldbl_pack (xh, xl); -} diff --git a/sysdeps/ieee754/ldbl-128ibm/s_roundl.c b/sysdeps/ieee754/ldbl-128ibm/s_roundl.c deleted file mode 100644 index 0b70e24637..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_roundl.c +++ /dev/null @@ -1,87 +0,0 @@ -/* Round to int long double floating-point values. - IBM extended format long double version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This has been coded in assembler because GCC makes such a mess of it - when it's coded in C. */ - -#include -#include -#include -#include - - -long double -__roundl (long double x) -{ - double xh, xl, hi, lo; - - ldbl_unpack (x, &xh, &xl); - - /* Return Inf, Nan, +/-0 unchanged. */ - if (__builtin_expect (xh != 0.0 - && __builtin_isless (__builtin_fabs (xh), - __builtin_inf ()), 1)) - { - hi = __round (xh); - if (hi != xh) - { - /* The high part is not an integer; the low part only - affects the result if the high part is exactly half way - between two integers and the low part is nonzero with the - opposite sign. */ - if (fabs (hi - xh) == 0.5) - { - if (xh > 0 && xl < 0) - xh = hi - 1; - else if (xh < 0 && xl > 0) - xh = hi + 1; - else - xh = hi; - } - else - xh = hi; - xl = 0; - } - else - { - /* The high part is a nonzero integer. */ - lo = __round (xl); - if (fabs (lo - xl) == 0.5) - { - if (xh > 0 && xl < 0) - xl = lo + 1; - else if (xh < 0 && lo > 0) - xl = lo - 1; - else - xl = lo; - } - else - xl = lo; - xh = hi; - ldbl_canonicalize_int (&xh, &xl); - } - } - else - /* Quiet signaling NaN arguments. */ - xh += xh; - - return ldbl_pack (xh, xl); -} - -long_double_symbol (libm, __roundl, roundl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c b/sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c deleted file mode 100644 index 031635267f..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c +++ /dev/null @@ -1,104 +0,0 @@ -/* s_scalblnl.c -- long double version of s_scalbln.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* @(#)s_scalbln.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * scalblnl (long double x, long int n) - * scalblnl(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include -#include -#include - -static const long double -twolm54 = 5.55111512312578270212e-17, /* 0x3C90000000000000, 0 */ -huge = 1.0E+300L, -tiny = 1.0E-300L; -static const double -two54 = 1.80143985094819840000e+16, /* 0x4350000000000000 */ -twom54 = 5.55111512312578270212e-17; /* 0x3C90000000000000 */ - -long double __scalblnl (long double x, long int n) -{ - int64_t k,l,hx,lx; - union { int64_t i; double d; } u; - double xhi, xlo; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - EXTRACT_WORDS64 (lx, xlo); - k = (hx>>52)&0x7ff; /* extract exponent */ - l = (lx>>52)&0x7ff; - if (k==0) { /* 0 or subnormal x */ - if ((hx&0x7fffffffffffffffULL)==0) return x; /* +-0 */ - u.i = hx; - u.d *= two54; - hx = u.i; - k = ((hx>>52)&0x7ff) - 54; - } - else if (k==0x7ff) return x+x; /* NaN or Inf */ - if (n< -50000) return tiny*__copysignl(tiny,x); /*underflow */ - if (n> 50000 || k+n > 0x7fe) - return huge*__copysignl(huge,x); /* overflow */ - /* Now k and n are bounded we know that k = k+n does not - overflow. */ - k = k+n; - if (k > 0) { /* normal result */ - hx = (hx&0x800fffffffffffffULL)|(k<<52); - if ((lx & 0x7fffffffffffffffULL) == 0) { /* low part +-0 */ - INSERT_WORDS64 (xhi, hx); - INSERT_WORDS64 (xlo, lx); - x = ldbl_pack (xhi, xlo); - return x; - } - if (l == 0) { /* low part subnormal */ - u.i = lx; - u.d *= two54; - lx = u.i; - l = ((lx>>52)&0x7ff) - 54; - } - l = l + n; - if (l > 0) - lx = (lx&0x800fffffffffffffULL)|(l<<52); - else if (l <= -54) - lx = (lx&0x8000000000000000ULL); - else { - l += 54; - u.i = (lx&0x800fffffffffffffULL)|(l<<52); - u.d *= twom54; - lx = u.i; - } - INSERT_WORDS64 (xhi, hx); - INSERT_WORDS64 (xlo, lx); - x = ldbl_pack (xhi, xlo); - return x; - } - if (k <= -54) - return tiny*__copysignl(tiny,x); /*underflow*/ - k += 54; /* subnormal result */ - lx &= 0x8000000000000000ULL; - hx &= 0x800fffffffffffffULL; - INSERT_WORDS64 (xhi, hx|(k<<52)); - INSERT_WORDS64 (xlo, lx); - x = ldbl_pack (xhi, xlo); - return x*twolm54; -} diff --git a/sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c b/sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c deleted file mode 100644 index 0c4508835e..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c +++ /dev/null @@ -1,104 +0,0 @@ -/* s_scalbnl.c -- long double version of s_scalbn.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* @(#)s_scalbn.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * scalbnl (long double x, int n) - * scalbnl(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include -#include -#include - -static const long double -twolm54 = 5.55111512312578270212e-17, /* 0x3C90000000000000, 0 */ -huge = 1.0E+300L, -tiny = 1.0E-300L; -static const double -two54 = 1.80143985094819840000e+16, /* 0x4350000000000000 */ -twom54 = 5.55111512312578270212e-17; /* 0x3C90000000000000 */ - -long double __scalbnl (long double x, int n) -{ - int64_t k,l,hx,lx; - union { int64_t i; double d; } u; - double xhi, xlo; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - EXTRACT_WORDS64 (lx, xlo); - k = (hx>>52)&0x7ff; /* extract exponent */ - l = (lx>>52)&0x7ff; - if (k==0) { /* 0 or subnormal x */ - if ((hx&0x7fffffffffffffffULL)==0) return x; /* +-0 */ - u.i = hx; - u.d *= two54; - hx = u.i; - k = ((hx>>52)&0x7ff) - 54; - } - else if (k==0x7ff) return x+x; /* NaN or Inf */ - if (n< -50000) return tiny*__copysignl(tiny,x); /*underflow */ - if (n> 50000 || k+n > 0x7fe) - return huge*__copysignl(huge,x); /* overflow */ - /* Now k and n are bounded we know that k = k+n does not - overflow. */ - k = k+n; - if (k > 0) { /* normal result */ - hx = (hx&0x800fffffffffffffULL)|(k<<52); - if ((lx & 0x7fffffffffffffffULL) == 0) { /* low part +-0 */ - INSERT_WORDS64 (xhi, hx); - INSERT_WORDS64 (xlo, lx); - x = ldbl_pack (xhi, xlo); - return x; - } - if (l == 0) { /* low part subnormal */ - u.i = lx; - u.d *= two54; - lx = u.i; - l = ((lx>>52)&0x7ff) - 54; - } - l = l + n; - if (l > 0) - lx = (lx&0x800fffffffffffffULL)|(l<<52); - else if (l <= -54) - lx = (lx&0x8000000000000000ULL); - else { - l += 54; - u.i = (lx&0x800fffffffffffffULL)|(l<<52); - u.d *= twom54; - lx = u.i; - } - INSERT_WORDS64 (xhi, hx); - INSERT_WORDS64 (xlo, lx); - x = ldbl_pack (xhi, xlo); - return x; - } - if (k <= -54) - return tiny*__copysignl(tiny,x); /*underflow*/ - k += 54; /* subnormal result */ - lx &= 0x8000000000000000ULL; - hx &= 0x800fffffffffffffULL; - INSERT_WORDS64 (xhi, hx|(k<<52)); - INSERT_WORDS64 (xlo, lx); - x = ldbl_pack (xhi, xlo); - return x*twolm54; -} diff --git a/sysdeps/ieee754/ldbl-128ibm/s_setpayloadl.c b/sysdeps/ieee754/ldbl-128ibm/s_setpayloadl.c deleted file mode 100644 index 1aba33e6e2..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_setpayloadl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SIG 0 -#define FUNC setpayloadl -#include diff --git a/sysdeps/ieee754/ldbl-128ibm/s_setpayloadl_main.c b/sysdeps/ieee754/ldbl-128ibm/s_setpayloadl_main.c deleted file mode 100644 index 9aa02cdf93..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_setpayloadl_main.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Set NaN payload. ldbl-128ibm version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#define SET_HIGH_BIT (HIGH_ORDER_BIT_IS_SET_FOR_SNAN ? SIG : !SIG) -#define BIAS 0x3ff -#define PAYLOAD_DIG 51 -#define EXPLICIT_MANT_DIG 52 - -int -FUNC (long double *x, long double payload) -{ - double hi, lo; - uint64_t hx, lx; - - ldbl_unpack (payload, &hi, &lo); - EXTRACT_WORDS64 (hx, hi); - EXTRACT_WORDS64 (lx, lo); - int exponent = hx >> EXPLICIT_MANT_DIG; - /* Test if argument is (a) negative or too large; (b) too small, - except for 0 when allowed; (c) not an integer. All valid - arguments have the low part zero. */ - if ((lx & 0x7fffffffffffffffULL) != 0 - || exponent >= BIAS + PAYLOAD_DIG - || (exponent < BIAS && !(SET_HIGH_BIT && hx == 0)) - || (hx & ((1ULL << (BIAS + EXPLICIT_MANT_DIG - exponent)) - 1)) != 0) - { - *x = 0.0L; - return 1; - } - if (hx != 0) - { - hx &= (1ULL << EXPLICIT_MANT_DIG) - 1; - hx |= 1ULL << EXPLICIT_MANT_DIG; - hx >>= BIAS + EXPLICIT_MANT_DIG - exponent; - } - hx |= 0x7ff0000000000000ULL | (SET_HIGH_BIT ? 0x8000000000000ULL : 0); - INSERT_WORDS64 (hi, hx); - *x = ldbl_pack (hi, 0.0); - return 0; -} diff --git a/sysdeps/ieee754/ldbl-128ibm/s_setpayloadsigl.c b/sysdeps/ieee754/ldbl-128ibm/s_setpayloadsigl.c deleted file mode 100644 index d97e2c8206..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_setpayloadsigl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SIG 1 -#define FUNC setpayloadsigl -#include diff --git a/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c b/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c deleted file mode 100644 index d6ceede69f..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Return nonzero value if number is negative. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -___signbitl (long double x) -{ - return __builtin_signbitl (x); -} -#if IS_IN (libm) -long_double_symbol (libm, ___signbitl, __signbitl); -#else -long_double_symbol (libc, ___signbitl, __signbitl); -#endif diff --git a/sysdeps/ieee754/ldbl-128ibm/s_sincosl.c b/sysdeps/ieee754/ldbl-128ibm/s_sincosl.c deleted file mode 100644 index 8329979931..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_sincosl.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Compute sine and cosine of argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997 and - Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include -#include - -void -__sincosl (long double x, long double *sinx, long double *cosx) -{ - int64_t ix; - double xhi; - - /* High word of x. */ - xhi = ldbl_high (x); - EXTRACT_WORDS64 (ix, xhi); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffffffffffffLL; - if (ix <= 0x3fe921fb54442d10LL) - __kernel_sincosl (x, 0.0L, sinx, cosx, 0); - else if (ix >= 0x7ff0000000000000LL) - { - /* sin(Inf or NaN) is NaN */ - *sinx = *cosx = x - x; - if (isinf (x)) - __set_errno (EDOM); - } - else - { - /* Argument reduction needed. */ - long double y[2]; - int n; - - n = __ieee754_rem_pio2l (x, y); - switch (n & 3) - { - case 0: - __kernel_sincosl (y[0], y[1], sinx, cosx, 1); - break; - case 1: - __kernel_sincosl (y[0], y[1], cosx, sinx, 1); - *cosx = -*cosx; - break; - case 2: - __kernel_sincosl (y[0], y[1], sinx, cosx, 1); - *sinx = -*sinx; - *cosx = -*cosx; - break; - default: - __kernel_sincosl (y[0], y[1], cosx, sinx, 1); - *sinx = -*sinx; - break; - } - } -} -long_double_symbol (libm, __sincosl, sincosl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_sinl.c b/sysdeps/ieee754/ldbl-128ibm/s_sinl.c deleted file mode 100644 index 087921a913..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_sinl.c +++ /dev/null @@ -1,85 +0,0 @@ -/* s_sinl.c -- long double version of s_sin.c. - * Conversion to long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* sinl(x) - * Return sine function of x. - * - * kernel function: - * __kernel_sinl ... sine function on [-pi/4,pi/4] - * __kernel_cosl ... cose function on [-pi/4,pi/4] - * __ieee754_rem_pio2l ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include -#include -#include -#include - -long double __sinl(long double x) -{ - long double y[2],z=0.0L; - int64_t n, ix; - double xhi; - - /* High word of x. */ - xhi = ldbl_high (x); - EXTRACT_WORDS64 (ix, xhi); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffffffffffffLL; - if(ix <= 0x3fe921fb54442d10LL) - return __kernel_sinl(x,z,0); - - /* sin(Inf or NaN) is NaN */ - else if (ix>=0x7ff0000000000000LL) { - if (ix == 0x7ff0000000000000LL) - __set_errno (EDOM); - return x-x; - } - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2l(x,y); - switch(n&3) { - case 0: return __kernel_sinl(y[0],y[1],1); - case 1: return __kernel_cosl(y[0],y[1]); - case 2: return -__kernel_sinl(y[0],y[1],1); - default: - return -__kernel_cosl(y[0],y[1]); - } - } -} -long_double_symbol (libm, __sinl, sinl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_tanhl.c b/sysdeps/ieee754/ldbl-128ibm/s_tanhl.c deleted file mode 100644 index e6457a1c1c..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_tanhl.c +++ /dev/null @@ -1,87 +0,0 @@ -/* @(#)s_tanh.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_tanh.c,v 1.7 1995/05/10 20:48:22 jtc Exp $"; -#endif - -/* Tanh(x) - * Return the Hyperbolic Tangent of x - * - * Method : - * x -x - * e - e - * 0. tanh(x) is defined to be ----------- - * x -x - * e + e - * 1. reduce x to non-negative by tanh(-x) = -tanh(x). - * 2. 0 <= x <= 2**-57 : tanh(x) := x*(one+x) - * -t - * 2**-57 < x <= 1 : tanh(x) := -----; t = expm1(-2x) - * t + 2 - * 2 - * 1 <= x <= 40.0 : tanh(x) := 1- ----- ; t=expm1(2x) - * t + 2 - * 40.0 < x <= INF : tanh(x) := 1. - * - * Special cases: - * tanh(NaN) is NaN; - * only tanh(0)=0 is exact for finite argument. - */ - -#include -#include -#include -#include - -static const long double one=1.0L, two=2.0L, tiny = 1.0e-300L; - -long double __tanhl(long double x) -{ - long double t,z; - int64_t jx,ix; - double xhi; - - /* High word of |x|. */ - xhi = ldbl_high (x); - EXTRACT_WORDS64 (jx, xhi); - ix = jx&0x7fffffffffffffffLL; - - /* x is INF or NaN */ - if(ix>=0x7ff0000000000000LL) { - if (jx>=0) return one/x+one; /* tanh(+-inf)=+-1 */ - else return one/x-one; /* tanh(NaN) = NaN */ - } - - /* |x| < 40 */ - if (ix < 0x4044000000000000LL) { /* |x|<40 */ - if (ix == 0) - return x; /* x == +-0 */ - if (ix<0x3c60000000000000LL) /* |x|<2**-57 */ - { - math_check_force_underflow (x); - return x; /* tanh(small) = small */ - } - if (ix>=0x3ff0000000000000LL) { /* |x|>=1 */ - t = __expm1l(two*fabsl(x)); - z = one - two/(t+two); - } else { - t = __expm1l(-two*fabsl(x)); - z= -t/(t+two); - } - /* |x| > 40, return +-1 */ - } else { - z = one - tiny; /* raised inexact flag */ - } - return (jx>=0)? z: -z; -} -long_double_symbol (libm, __tanhl, tanhl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_tanl.c b/sysdeps/ieee754/ldbl-128ibm/s_tanl.c deleted file mode 100644 index 66b8a0621e..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_tanl.c +++ /dev/null @@ -1,79 +0,0 @@ -/* s_tanl.c -- long double version of s_tan.c. - * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. - */ - -/* @(#)s_tan.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* tanl(x) - * Return tangent function of x. - * - * kernel function: - * __kernel_tanl ... tangent function on [-pi/4,pi/4] - * __ieee754_rem_pio2l ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include -#include -#include -#include - -long double __tanl(long double x) -{ - long double y[2],z=0.0L; - int64_t n, ix; - double xhi; - - /* High word of x. */ - xhi = ldbl_high (x); - EXTRACT_WORDS64 (ix, xhi); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffffffffffffLL; - if(ix <= 0x3fe921fb54442d10LL) return __kernel_tanl(x,z,1); - - /* tanl(Inf or NaN) is NaN */ - else if (ix>=0x7ff0000000000000LL) { - if (ix == 0x7ff0000000000000LL) - __set_errno (EDOM); - return x-x; /* NaN */ - } - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2l(x,y); - return __kernel_tanl(y[0],y[1],1-((n&1)<<1)); /* 1 -- n even - -1 -- n odd */ - } -} -long_double_symbol (libm, __tanl, tanl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_totalorderl.c b/sysdeps/ieee754/ldbl-128ibm/s_totalorderl.c deleted file mode 100644 index 963376a7cf..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_totalorderl.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Total order operation. ldbl-128ibm version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -totalorderl (long double x, long double y) -{ - double xhi, xlo, yhi, ylo; - int64_t hx, hy, lx, ly; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - ldbl_unpack (y, &yhi, &ylo); - EXTRACT_WORDS64 (hy, yhi); -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN -# error not implemented -#endif - uint64_t hx_sign = hx >> 63; - uint64_t hy_sign = hy >> 63; - int64_t hx_adj = hx ^ (hx_sign >> 1); - int64_t hy_adj = hy ^ (hy_sign >> 1); - if (hx_adj < hy_adj) - return 1; - else if (hx_adj > hy_adj) - return 0; - - /* The high doubles are identical. If they are NaNs or both the low - parts are zero, the low parts are not significant (and if they - are infinities, both the low parts must be zero). */ - if ((hx & 0x7fffffffffffffffULL) >= 0x7ff0000000000000ULL) - return 1; - EXTRACT_WORDS64 (lx, xlo); - EXTRACT_WORDS64 (ly, ylo); - if (((lx | ly) & 0x7fffffffffffffffULL) == 0) - return 1; - - /* Otherwise compare the low parts. */ - uint64_t lx_sign = lx >> 63; - uint64_t ly_sign = ly >> 63; - lx ^= lx_sign >> 1; - ly ^= ly_sign >> 1; - return lx <= ly; -} diff --git a/sysdeps/ieee754/ldbl-128ibm/s_totalordermagl.c b/sysdeps/ieee754/ldbl-128ibm/s_totalordermagl.c deleted file mode 100644 index f7480909df..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_totalordermagl.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Total order operation on absolute values. ldbl-128ibm version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -totalordermagl (long double x, long double y) -{ - double xhi, xlo, yhi, ylo; - int64_t hx, hy, lx, ly; - - ldbl_unpack (x, &xhi, &xlo); - EXTRACT_WORDS64 (hx, xhi); - ldbl_unpack (y, &yhi, &ylo); - EXTRACT_WORDS64 (hy, yhi); -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN -# error not implemented -#endif - uint64_t x_sign = hx & 0x8000000000000000ULL; - uint64_t y_sign = hy & 0x8000000000000000ULL; - hx ^= x_sign; - hy ^= y_sign; - if (hx < hy) - return 1; - else if (hx > hy) - return 0; - - /* The high doubles are identical. If they are NaNs or both the low - parts are zero, the low parts are not significant (and if they - are infinities, both the low parts must be zero). */ - if (hx >= 0x7ff0000000000000ULL) - return 1; - EXTRACT_WORDS64 (lx, xlo); - EXTRACT_WORDS64 (ly, ylo); - if (((lx | ly) & 0x7fffffffffffffffULL) == 0) - return 1; - lx ^= x_sign; - ly ^= y_sign; - - /* Otherwise compare the low parts. */ - uint64_t lx_sign = lx >> 63; - uint64_t ly_sign = ly >> 63; - lx ^= lx_sign >> 1; - ly ^= ly_sign >> 1; - return lx <= ly; -} diff --git a/sysdeps/ieee754/ldbl-128ibm/s_truncl.c b/sysdeps/ieee754/ldbl-128ibm/s_truncl.c deleted file mode 100644 index ecabf9d711..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_truncl.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Truncate (toward zero) long double floating-point values. - IBM extended format long double version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -long double -__truncl (long double x) -{ - double xh, xl, hi, lo; - - ldbl_unpack (x, &xh, &xl); - - /* Return Inf, Nan, +/-0 unchanged. */ - if (__builtin_expect (xh != 0.0 - && __builtin_isless (__builtin_fabs (xh), - __builtin_inf ()), 1)) - { - hi = __trunc (xh); - if (hi != xh) - { - /* The high part is not an integer; the low part does not - affect the result. */ - xh = hi; - xl = 0; - } - else - { - /* The high part is a nonzero integer. */ - lo = xh > 0 ? __floor (xl) : __ceil (xl); - xh = hi; - xl = lo; - ldbl_canonicalize_int (&xh, &xl); - } - } - else - /* Quiet signaling NaN arguments. */ - xh += xh; - - return ldbl_pack (xh, xl); -} - -long_double_symbol (libm, __truncl, truncl); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_ufromfpl.c b/sysdeps/ieee754/ldbl-128ibm/s_ufromfpl.c deleted file mode 100644 index c686daa4a7..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_ufromfpl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 1 -#define INEXACT 0 -#define FUNC ufromfpl -#include diff --git a/sysdeps/ieee754/ldbl-128ibm/s_ufromfpxl.c b/sysdeps/ieee754/ldbl-128ibm/s_ufromfpxl.c deleted file mode 100644 index 906066c83c..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/s_ufromfpxl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 1 -#define INEXACT 1 -#define FUNC ufromfpxl -#include diff --git a/sysdeps/ieee754/ldbl-128ibm/strtod_nan_ldouble.h b/sysdeps/ieee754/ldbl-128ibm/strtod_nan_ldouble.h deleted file mode 100644 index 198fe48f5c..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/strtod_nan_ldouble.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Convert string for NaN payload to corresponding NaN. For ldbl-128ibm. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FLOAT long double -#define SET_MANTISSA(flt, mant) \ - do \ - { \ - union ibm_extended_long_double u; \ - u.ld = (flt); \ - u.d[0].ieee_nan.mantissa0 = (mant) >> 32; \ - u.d[0].ieee_nan.mantissa1 = (mant); \ - if ((u.d[0].ieee.mantissa0 | u.d[0].ieee.mantissa1) != 0) \ - (flt) = u.ld; \ - } \ - while (0) diff --git a/sysdeps/ieee754/ldbl-128ibm/strtold_l.c b/sysdeps/ieee754/ldbl-128ibm/strtold_l.c deleted file mode 100644 index 37034cb254..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/strtold_l.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* The actual implementation for all floating point sizes is in strtod.c. - These macros tell it to produce the `long double' version, `strtold'. */ - -#define FLOAT long double -#define FLT LDBL -#ifdef USE_WIDE_CHAR -extern long double ____new_wcstold_l (const wchar_t *, wchar_t **, __locale_t); -# define STRTOF __new_wcstold_l -# define __STRTOF ____new_wcstold_l -# define ____STRTOF_INTERNAL ____wcstold_l_internal -# define STRTOF_NAN __wcstold_nan -#else -extern long double ____new_strtold_l (const char *, char **, __locale_t); -# define STRTOF __new_strtold_l -# define __STRTOF ____new_strtold_l -# define ____STRTOF_INTERNAL ____strtold_l_internal -# define STRTOF_NAN __strtold_nan -#endif -extern __typeof (__STRTOF) STRTOF; -libc_hidden_proto (__STRTOF) -libc_hidden_proto (STRTOF) -#define MPN2FLOAT __mpn_construct_long_double -#define FLOAT_HUGE_VAL HUGE_VALL - -#include - -#ifdef __LONG_DOUBLE_MATH_OPTIONAL -# include -# ifdef USE_WIDE_CHAR -weak_alias (____new_wcstold_l, ___new_wcstold_l); -long_double_symbol (libc, ___new_wcstold_l, wcstold_l); -long_double_symbol (libc, ____new_wcstold_l, __wcstold_l); -# else -weak_alias (____new_strtold_l, ___new_strtold_l); -long_double_symbol (libc, ___new_strtold_l, strtold_l); -long_double_symbol (libc, ____new_strtold_l, __strtold_l); -# endif -#endif diff --git a/sysdeps/ieee754/ldbl-128ibm/t_sincosl.c b/sysdeps/ieee754/ldbl-128ibm/t_sincosl.c deleted file mode 100644 index 22c59150be..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/t_sincosl.c +++ /dev/null @@ -1,693 +0,0 @@ -/* Quad-precision floating point sine and cosine tables. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* For 0.1484375 + n/128.0, n=0..82 this table contains - first 113 bits of cosine, then at least 113 additional - bits and the same for sine. - 0.1484375+82.0/128.0 is the smallest number among above defined numbers - larger than pi/4. - Computed using gmp. - */ - -const long double __sincosl_table[] = { - -/* x = 1.48437500000000000000000000000000000e-01L 3ffc3000000000000000000000000000 */ -/* cos(x) = 0.fd2f5320e1b790209b4dda2f98 f79caaa7b873aff1014b0fbc52 43766d03cb006bc837c4358 */ - 0x0.fd2f5320e1b790209b4dda2f98p0L, - 0x0.f79caaa7b873aff1014b0fbc52p-104L, -/* sin(x) = 0.25dc50bc95711d0d9787d108fd 438cf5959ee0bfb7a1e36e8b1a 112968f356657420e9cc9ea */ - 0x0.25dc50bc95711d0d9787d108fdp0L, - 0x0.438cf5959ee0bfb7a1e36e8b1ap-104L, - -/* x = 1.56250000000000000000000000000000000e-01 3ffc4000000000000000000000000000 */ -/* cos(x) = 0.fce1a053e621438b6d60c76e8c 45bf0a9dc71aa16f922acc10e9 5144ec796a249813c9cb649 */ - 0x0.fce1a053e621438b6d60c76e8cp0L, - 0x0.45bf0a9dc71aa16f922acc10e9p-104L, -/* sin(x) = 0.27d66258bacd96a3eb335b365c 87d59438c5142bb56a489e9b8d b9d36234ffdebb6bdc22d8e */ - 0x0.27d66258bacd96a3eb335b365cp0L, - 0x0.87d59438c5142bb56a489e9b8dp-104L, - -/* x = 1.64062500000000000000000000000000000e-01 3ffc5000000000000000000000000000 */ -/* cos(x) = 0.fc8ffa01ba6807417e05962b0d 9fdf1fddb0cc4c07d22e19e080 19bffa50a6c7acdb40307a3 */ - 0x0.fc8ffa01ba6807417e05962b0dp0L, - 0x0.9fdf1fddb0cc4c07d22e19e080p-104L, -/* sin(x) = 0.29cfd49b8be4f665276cab01cb f0426934906c3dd105473b226e 410b1450f62e53ff7c6cce1 */ - 0x0.29cfd49b8be4f665276cab01cbp0L, - 0x0.f0426934906c3dd105473b226ep-104L, - -/* x = 1.71875000000000000000000000000000000e-01 3ffc6000000000000000000000000000 */ -/* cos(x) = 0.fc3a6170f767ac735d63d99a9d 439e1db5e59d3ef153a4265d58 55850ed82b536bf361b80e3 */ - 0x0.fc3a6170f767ac735d63d99a9dp0L, - 0x0.439e1db5e59d3ef153a4265d58p-104L, -/* sin(x) = 0.2bc89f9f424de5485de7ce03b2 514952b9faf5648c3244d4736f eb95dbb9da49f3b58a9253b */ - 0x0.2bc89f9f424de5485de7ce03b2p0L, - 0x0.514952b9faf5648c3244d4736fp-104L, - -/* x = 1.79687500000000000000000000000000000e-01 3ffc7000000000000000000000000000 */ -/* cos(x) = 0.fbe0d7f7fef11e70aa43b8abf4 f6a457cea20c8f3f676b47781f 9821bbe9ce04b3c7b981c0b */ - 0x0.fbe0d7f7fef11e70aa43b8abf4p0L, - 0x0.f6a457cea20c8f3f676b47781fp-104L, -/* sin(x) = 0.2dc0bb80b49a97ffb34e8dd1f8 db9df7af47ed2dcf58b12c8e78 27e048cae929da02c04ecac */ - 0x0.2dc0bb80b49a97ffb34e8dd1f8p0L, - 0x0.db9df7af47ed2dcf58b12c8e78p-104L, - -/* x = 1.87500000000000000000000000000000000e-01 3ffc8000000000000000000000000000 */ -/* cos(x) = 0.fb835efcf670dd2ce6fe792469 7eea13ea358867e9cdb3899b78 3f4f9f43aa5626e8b67b3bc */ - 0x0.fb835efcf670dd2ce6fe792469p0L, - 0x0.7eea13ea358867e9cdb3899b78p-104L, -/* sin(x) = 0.2fb8205f75e56a2b56a1c4792f 856258769af396e0189ef72c05 e4df59a6b00e4b44a6ea515 */ - 0x0.2fb8205f75e56a2b56a1c4792fp0L, - 0x0.856258769af396e0189ef72c05p-104L, - -/* x = 1.95312500000000000000000000000000000e-01 3ffc9000000000000000000000000000 */ -/* cos(x) = 0.fb21f7f5c156696b00ac1fe28a c5fd76674a92b4df80d9c8a46c 684399005deccc41386257c */ - 0x0.fb21f7f5c156696b00ac1fe28ap0L, - 0x0.c5fd76674a92b4df80d9c8a46cp-104L, -/* sin(x) = 0.31aec65df552876f82ece9a235 6713246eba6799983d7011b0b3 698d6e1da919c15d57c30c1 */ - 0x0.31aec65df552876f82ece9a235p0L, - 0x0.6713246eba6799983d7011b0b3p-104L, - -/* x = 2.03125000000000000000000000000000000e-01 3ffca000000000000000000000000000 */ -/* cos(x) = 0.fabca467fb3cb8f1d069f01d8e a33ade5bfd68296ecd1cc9f7b7 609bbcf3676e726c3301334 */ - 0x0.fabca467fb3cb8f1d069f01d8ep0L, - 0x0.a33ade5bfd68296ecd1cc9f7b7p-104L, -/* sin(x) = 0.33a4a5a19d86246710f602c44d f4fa513f4639ce938477aeeabb 82e8e0a7ed583a188879fd4 */ - 0x0.33a4a5a19d86246710f602c44dp0L, - 0x0.f4fa513f4639ce938477aeeabbp-104L, - -/* x = 2.10937500000000000000000000000000000e-01 3ffcb000000000000000000000000000 */ -/* cos(x) = 0.fa5365e8f1d3ca27be1db5d76a e64d983d7470a4ab0f4ccf65a2 b8c67a380df949953a09bc1 */ - 0x0.fa5365e8f1d3ca27be1db5d76ap0L, - 0x0.e64d983d7470a4ab0f4ccf65a2p-104L, -/* sin(x) = 0.3599b652f40ec999df12a0a4c8 561de159c98d4e54555de518b9 7f48886f715d8df5f4f093e */ - 0x0.3599b652f40ec999df12a0a4c8p0L, - 0x0.561de159c98d4e54555de518b9p-104L, - -/* x = 2.18750000000000000000000000000000000e-01 3ffcc000000000000000000000000000 */ -/* cos(x) = 0.f9e63e1d9e8b6f6f2e296bae5b 5ed9c11fd7fa2fe11e09fc7bde 901abed24b6365e72f7db4e */ - 0x0.f9e63e1d9e8b6f6f2e296bae5bp0L, - 0x0.5ed9c11fd7fa2fe11e09fc7bdep-104L, -/* sin(x) = 0.378df09db8c332ce0d2b53d865 582e4526ea336c768f68c32b49 6c6d11c1cd241bb9f1da523 */ - 0x0.378df09db8c332ce0d2b53d865p0L, - 0x0.582e4526ea336c768f68c32b49p-104L, - -/* x = 2.26562500000000000000000000000000000e-01 3ffcd000000000000000000000000000 */ -/* cos(x) = 0.f9752eba9fff6b98842beadab0 54a932fb0f8d5b875ae63d6b22 88d09b148921aeb6e52f61b */ - 0x0.f9752eba9fff6b98842beadab0p0L, - 0x0.54a932fb0f8d5b875ae63d6b22p-104L, -/* sin(x) = 0.39814cb10513453cb97b21bc1c a6a337b150c21a675ab85503bc 09a436a10ab1473934e20c8 */ - 0x0.39814cb10513453cb97b21bc1cp0L, - 0x0.a6a337b150c21a675ab85503bcp-104L, - -/* x = 2.34375000000000000000000000000000000e-01 3ffce000000000000000000000000000 */ -/* cos(x) = 0.f90039843324f9b940416c1984 b6cbed1fc733d97354d4265788 a86150493ce657cae032674 */ - 0x0.f90039843324f9b940416c1984p0L, - 0x0.b6cbed1fc733d97354d4265788p-104L, -/* sin(x) = 0.3b73c2bf6b4b9f668ef9499c81 f0d965087f1753fa64b086e58c b8470515c18c1412f8c2e02 */ - 0x0.3b73c2bf6b4b9f668ef9499c81p0L, - 0x0.f0d965087f1753fa64b086e58cp-104L, - -/* x = 2.42187500000000000000000000000000000e-01 3ffcf000000000000000000000000000 */ -/* cos(x) = 0.f887604e2c39dbb20e4ec58250 59a789ffc95b275ad9954078ba 8a28d3fcfe9cc2c1d49697b */ - 0x0.f887604e2c39dbb20e4ec58250p0L, - 0x0.59a789ffc95b275ad9954078bap-104L, -/* sin(x) = 0.3d654aff15cb457a0fca854698 aba33039a8a40626609204472d 9d40309b626eccc6dff0ffa */ - 0x0.3d654aff15cb457a0fca854698p0L, - 0x0.aba33039a8a40626609204472dp-104L, - -/* x = 2.50000000000000000000000000000000000e-01 3ffd0000000000000000000000000000 */ -/* cos(x) = 0.f80aa4fbef750ba783d33cb95f 94f8a41426dbe79edc4a023ef9 ec13c944551c0795b84fee1 */ - 0x0.f80aa4fbef750ba783d33cb95fp0L, - 0x0.94f8a41426dbe79edc4a023ef9p-104L, -/* sin(x) = 0.3f55dda9e62aed7513bd7b8e6a 3d1635dd5676648d7db525898d 7086af9330f03c7f285442a */ - 0x0.3f55dda9e62aed7513bd7b8e6ap0L, - 0x0.3d1635dd5676648d7db525898dp-104L, - -/* x = 2.57812500000000000000000000000000000e-01 3ffd0800000000000000000000000000 */ -/* cos(x) = 0.f78a098069792daabc9ee42591 b7c5a68cb1ab822aeb446b3311 b4ba5371b8970e2c1547ad7 */ - 0x0.f78a098069792daabc9ee42591p0L, - 0x0.b7c5a68cb1ab822aeb446b3311p-104L, -/* sin(x) = 0.414572fd94556e6473d6202713 88dd47c0ba050cdb5270112e3e 370e8c4705ae006426fb5d5 */ - 0x0.414572fd94556e6473d6202713p0L, - 0x0.88dd47c0ba050cdb5270112e3ep-104L, - -/* x = 2.65625000000000000000000000000000000e-01 3ffd1000000000000000000000000000 */ -/* cos(x) = 0.f7058fde0788dfc805b8fe8878 9e4f4253e3c50afe8b22f41159 620ab5940ff7df9557c0d1f */ - 0x0.f7058fde0788dfc805b8fe8878p0L, - 0x0.9e4f4253e3c50afe8b22f41159p-104L, -/* sin(x) = 0.4334033bcd90d6604f5f36c1d4 b84451a87150438275b77470b5 0e5b968fa7962b5ffb379b7 */ - 0x0.4334033bcd90d6604f5f36c1d4p0L, - 0x0.b84451a87150438275b77470b5p-104L, - -/* x = 2.73437500000000000000000000000000000e-01 3ffd1800000000000000000000000000 */ -/* cos(x) = 0.f67d3a26af7d07aa4bd6d42af8 c0067fefb96d5b46c031eff536 27f215ea3242edc3f2e13eb */ - 0x0.f67d3a26af7d07aa4bd6d42af8p0L, - 0x0.c0067fefb96d5b46c031eff536p-104L, -/* sin(x) = 0.452186aa5377ab20bbf2524f52 e3a06a969f47166ab88cf88c11 1ad12c55941021ef3317a1a */ - 0x0.452186aa5377ab20bbf2524f52p0L, - 0x0.e3a06a969f47166ab88cf88c11p-104L, - -/* x = 2.81250000000000000000000000000000000e-01 3ffd2000000000000000000000000000 */ -/* cos(x) = 0.f5f10a7bb77d3dfa0c1da8b578 42783280d01ce3c0f82bae3b9d 623c168d2e7c29977994451 */ - 0x0.f5f10a7bb77d3dfa0c1da8b578p0L, - 0x0.42783280d01ce3c0f82bae3b9dp-104L, -/* sin(x) = 0.470df5931ae1d946076fe0dcff 47fe31bb2ede618ebc607821f8 462b639e1f4298b5ae87fd3 */ - 0x0.470df5931ae1d946076fe0dcffp0L, - 0x0.47fe31bb2ede618ebc607821f8p-104L, - -/* x = 2.89062500000000000000000000000000000e-01 3ffd2800000000000000000000000000 */ -/* cos(x) = 0.f561030ddd7a78960ea9f4a32c 6521554995667f5547bafee9ec 48b3155cdb0f7fd00509713 */ - 0x0.f561030ddd7a78960ea9f4a32cp0L, - 0x0.6521554995667f5547bafee9ecp-104L, -/* sin(x) = 0.48f948446abcd6b0f7fccb100e 7a1b26eccad880b0d24b59948c 7cdd49514d44b933e6985c2 */ - 0x0.48f948446abcd6b0f7fccb100ep0L, - 0x0.7a1b26eccad880b0d24b59948cp-104L, - -/* x = 2.96875000000000000000000000000000000e-01 3ffd3000000000000000000000000000 */ -/* cos(x) = 0.f4cd261d3e6c15bb369c875863 0d2ac00b7ace2a51c0631bfeb3 9ed158ba924cc91e259c195 */ - 0x0.f4cd261d3e6c15bb369c875863p0L, - 0x0.0d2ac00b7ace2a51c0631bfeb3p-104L, -/* sin(x) = 0.4ae37710fad27c8aa9c4cf96c0 3519b9ce07dc08a1471775499f 05c29f86190aaebaeb9716e */ - 0x0.4ae37710fad27c8aa9c4cf96c0p0L, - 0x0.3519b9ce07dc08a1471775499fp-104L, - -/* x = 3.04687500000000000000000000000000000e-01 3ffd3800000000000000000000000000 */ -/* cos(x) = 0.f43575f94d4f6b272f5fb76b14 d2a64ab52df1ee8ddf7c651034 e5b2889305a9ea9015d758a */ - 0x0.f43575f94d4f6b272f5fb76b14p0L, - 0x0.d2a64ab52df1ee8ddf7c651034p-104L, -/* sin(x) = 0.4ccc7a50127e1de0cb6b40c302 c651f7bded4f9e7702b0471ae0 288d091a37391950907202f */ - 0x0.4ccc7a50127e1de0cb6b40c302p0L, - 0x0.c651f7bded4f9e7702b0471ae0p-104L, - -/* x = 3.12500000000000000000000000000000000e-01 3ffd4000000000000000000000000000 */ -/* cos(x) = 0.f399f500c9e9fd37ae9957263d ab8877102beb569f101ee44953 50868e5847d181d50d3cca2 */ - 0x0.f399f500c9e9fd37ae9957263dp0L, - 0x0.ab8877102beb569f101ee44953p-104L, -/* sin(x) = 0.4eb44a5da74f600207aaa090f0 734e288603ffadb3eb2542a469 77b105f8547128036dcf7f0 */ - 0x0.4eb44a5da74f600207aaa090f0p0L, - 0x0.734e288603ffadb3eb2542a469p-104L, - -/* x = 3.20312500000000000000000000000000000e-01 3ffd4800000000000000000000000000 */ -/* cos(x) = 0.f2faa5a1b74e82fd61fa05f917 7380e8e69b7b15a945e8e5ae11 24bf3d12b0617e03af4fab5 */ - 0x0.f2faa5a1b74e82fd61fa05f917p0L, - 0x0.7380e8e69b7b15a945e8e5ae11p-104L, -/* sin(x) = 0.509adf9a7b9a5a0f638a8fa3a6 0a199418859f18b37169a644fd b986c21ecb00133853bc35b */ - 0x0.509adf9a7b9a5a0f638a8fa3a6p0L, - 0x0.0a199418859f18b37169a644fdp-104L, - -/* x = 3.28125000000000000000000000000000000e-01 3ffd5000000000000000000000000000 */ -/* cos(x) = 0.f2578a595224dd2e6bfa2eb2f9 9cc674f5ea6f479eae2eb58018 6897ae3f893df1113ca06b8 */ - 0x0.f2578a595224dd2e6bfa2eb2f9p0L, - 0x0.9cc674f5ea6f479eae2eb58018p-104L, -/* sin(x) = 0.5280326c3cf481823ba6bb08ea c82c2093f2bce3c4eb4ee3dec7 df41c92c8a4226098616075 */ - 0x0.5280326c3cf481823ba6bb08eap0L, - 0x0.c82c2093f2bce3c4eb4ee3dec7p-104L, - -/* x = 3.35937500000000000000000000000000000e-01 3ffd5800000000000000000000000000 */ -/* cos(x) = 0.f1b0a5b406b526d886c55feadc 8d0dcc8eb9ae2ac707051771b4 8e05b25b000009660bdb3e3 */ - 0x0.f1b0a5b406b526d886c55feadcp0L, - 0x0.8d0dcc8eb9ae2ac707051771b4p-104L, -/* sin(x) = 0.54643b3da29de9b357155eef0f 332fb3e66c83bf4dddd9491c5e b8e103ccd92d6175220ed51 */ - 0x0.54643b3da29de9b357155eef0fp0L, - 0x0.332fb3e66c83bf4dddd9491c5ep-104L, - -/* x = 3.43750000000000000000000000000000000e-01 3ffd6000000000000000000000000000 */ -/* cos(x) = 0.f105fa4d66b607a67d44e04272 5204435142ac8ad54dfb0907a4 f6b56b06d98ee60f19e557a */ - 0x0.f105fa4d66b607a67d44e04272p0L, - 0x0.5204435142ac8ad54dfb0907a4p-104L, -/* sin(x) = 0.5646f27e8bd65cbe3a5d61ff06 572290ee826d9674a00246b05a e26753cdfc90d9ce81a7d02 */ - 0x0.5646f27e8bd65cbe3a5d61ff06p0L, - 0x0.572290ee826d9674a00246b05ap-104L, - -/* x = 3.51562500000000000000000000000000000e-01 3ffd6800000000000000000000000000 */ -/* cos(x) = 0.f0578ad01ede707fa39c09dc6b 984afef74f3dc8d0efb0f4c5a6 b13771145b3e0446fe33887 */ - 0x0.f0578ad01ede707fa39c09dc6bp0L, - 0x0.984afef74f3dc8d0efb0f4c5a6p-104L, -/* sin(x) = 0.582850a41e1dd46c7f602ea244 cdbbbfcdfa8f3189be794dda42 7ce090b5f85164f1f80ac13 */ - 0x0.582850a41e1dd46c7f602ea244p0L, - 0x0.cdbbbfcdfa8f3189be794dda42p-104L, - -/* x = 3.59375000000000000000000000000000000e-01 3ffd7000000000000000000000000000 */ -/* cos(x) = 0.efa559f5ec3aec3a4eb0331927 8a2d41fcf9189462261125fe61 47b078f1daa0b06750a1654 */ - 0x0.efa559f5ec3aec3a4eb0331927p0L, - 0x0.8a2d41fcf9189462261125fe61p-104L, -/* sin(x) = 0.5a084e28e35fda2776dfdbbb55 31d74ced2b5d17c0b1afc46475 29d50c295e36d8ceec126c1 */ - 0x0.5a084e28e35fda2776dfdbbb55p0L, - 0x0.31d74ced2b5d17c0b1afc46475p-104L, - -/* x = 3.67187500000000000000000000000000000e-01 3ffd7800000000000000000000000000 */ -/* cos(x) = 0.eeef6a879146af0bf9b95ea2ea 0ac0d3e2e4d7e15d93f48cbd41 bf8e4fded40bef69e19eafa */ - 0x0.eeef6a879146af0bf9b95ea2eap0L, - 0x0.0ac0d3e2e4d7e15d93f48cbd41p-104L, -/* sin(x) = 0.5be6e38ce8095542bc14ee9da0 d36483e6734bcab2e07624188a f5653f114eeb46738fa899d */ - 0x0.5be6e38ce8095542bc14ee9da0p0L, - 0x0.d36483e6734bcab2e07624188ap-104L, - -/* x = 3.75000000000000000000000000000000000e-01 3ffd8000000000000000000000000000 */ -/* cos(x) = 0.ee35bf5ccac89052cd91ddb734 d3a47e262e3b609db604e21705 3803be0091e76daf28a89b7 */ - 0x0.ee35bf5ccac89052cd91ddb734p0L, - 0x0.d3a47e262e3b609db604e21705p-104L, -/* sin(x) = 0.5dc40955d9084f48a94675a249 8de5d851320ff5528a6afb3f2e 24de240fce6cbed1ba0ccd6 */ - 0x0.5dc40955d9084f48a94675a249p0L, - 0x0.8de5d851320ff5528a6afb3f2ep-104L, - -/* x = 3.82812500000000000000000000000000000e-01 3ffd8800000000000000000000000000 */ -/* cos(x) = 0.ed785b5c44741b4493c56bcb9d 338a151c6f6b85d8f8aca658b2 8572c162b199680eb9304da */ - 0x0.ed785b5c44741b4493c56bcb9dp0L, - 0x0.338a151c6f6b85d8f8aca658b2p-104L, -/* sin(x) = 0.5f9fb80f21b53649c432540a50 e22c53057ff42ae0fdf1307760 dc0093f99c8efeb2fbd7073 */ - 0x0.5f9fb80f21b53649c432540a50p0L, - 0x0.e22c53057ff42ae0fdf1307760p-104L, - -/* x = 3.90625000000000000000000000000000000e-01 3ffd9000000000000000000000000000 */ -/* cos(x) = 0.ecb7417b8d4ee3fec37aba4073 aa48f1f14666006fb431d96713 03c8100d10190ec8179c41d */ - 0x0.ecb7417b8d4ee3fec37aba4073p0L, - 0x0.aa48f1f14666006fb431d96713p-104L, -/* sin(x) = 0.6179e84a09a5258a40e9b5face 03e525f8b5753cd0105d93fe62 98010c3458e84d75fe420e9 */ - 0x0.6179e84a09a5258a40e9b5facep0L, - 0x0.03e525f8b5753cd0105d93fe62p-104L, - -/* x = 3.98437500000000000000000000000000000e-01 3ffd9800000000000000000000000000 */ -/* cos(x) = 0.ebf274bf0bda4f62447e56a093 626798d3013b5942b1abfd155a acc9dc5c6d0806a20d6b9c1 */ - 0x0.ebf274bf0bda4f62447e56a093p0L, - 0x0.626798d3013b5942b1abfd155ap-104L, -/* sin(x) = 0.6352929dd264bd44a02ea76632 5d8aa8bd9695fc8def3caefba5 b94c9a3c873f7b2d3776ead */ - 0x0.6352929dd264bd44a02ea76632p0L, - 0x0.5d8aa8bd9695fc8def3caefba5p-104L, - -/* x = 4.06250000000000000000000000000000000e-01 3ffda000000000000000000000000000 */ -/* cos(x) = 0.eb29f839f201fd13b937968279 16a78f15c85230a4e8ea4b2155 8265a14367e1abb4c30695a */ - 0x0.eb29f839f201fd13b937968279p0L, - 0x0.16a78f15c85230a4e8ea4b2155p-104L, -/* sin(x) = 0.6529afa7d51b129631ec197c0a 840a11d7dc5368b0a47956feb2 85caa8371c4637ef17ef01b */ - 0x0.6529afa7d51b129631ec197c0ap0L, - 0x0.840a11d7dc5368b0a47956feb2p-104L, - -/* x = 4.14062500000000000000000000000000000e-01 3ffda800000000000000000000000000 */ -/* cos(x) = 0.ea5dcf0e30cf03e6976ef0b1ec 26515fba47383855c3b4055a99 b5e86824b2cd1a691fdca7b */ - 0x0.ea5dcf0e30cf03e6976ef0b1ecp0L, - 0x0.26515fba47383855c3b4055a99p-104L, -/* sin(x) = 0.66ff380ba0144109e39a320b0a 3fa5fd65ea0585bcbf9b1a769a 9b0334576c658139e1a1cbe */ - 0x0.66ff380ba0144109e39a320b0ap0L, - 0x0.3fa5fd65ea0585bcbf9b1a769ap-104L, - -/* x = 4.21875000000000000000000000000000000e-01 3ffdb000000000000000000000000000 */ -/* cos(x) = 0.e98dfc6c6be031e60dd3089cbd d18a75b1f6b2c1e97f79225202 f03dbea45b07a5ec4efc062 */ - 0x0.e98dfc6c6be031e60dd3089cbdp0L, - 0x0.d18a75b1f6b2c1e97f79225202p-104L, -/* sin(x) = 0.68d32473143327973bc712bcc4 ccddc47630d755850c0655243b 205934dc49ffed8eb76adcb */ - 0x0.68d32473143327973bc712bcc4p0L, - 0x0.ccddc47630d755850c0655243bp-104L, - -/* x = 4.29687500000000000000000000000000000e-01 3ffdb800000000000000000000000000 */ -/* cos(x) = 0.e8ba8393eca7821aa563d83491 b6101189b3b101c3677f73d7ba d7c10f9ee02b7ab4009739a */ - 0x0.e8ba8393eca7821aa563d83491p0L, - 0x0.b6101189b3b101c3677f73d7bap-104L, -/* sin(x) = 0.6aa56d8e8249db4eb60a761fe3 f9e559be456b9e13349ca99b0b fb787f22b95db3b70179615 */ - 0x0.6aa56d8e8249db4eb60a761fe3p0L, - 0x0.f9e559be456b9e13349ca99b0bp-104L, - -/* x = 4.37500000000000000000000000000000000e-01 3ffdc000000000000000000000000000 */ -/* cos(x) = 0.e7e367d2956cfb16b6aa11e541 9cd0057f5c132a6455bf064297 e6a76fe2b72bb630d6d50ff */ - 0x0.e7e367d2956cfb16b6aa11e541p0L, - 0x0.9cd0057f5c132a6455bf064297p-104L, -/* sin(x) = 0.6c760c14c8585a51dbd34660ae 6c52ac7036a0b40887a0b63724 f8b4414348c3063a637f457 */ - 0x0.6c760c14c8585a51dbd34660aep0L, - 0x0.6c52ac7036a0b40887a0b63724p-104L, - -/* x = 4.45312500000000000000000000000000000e-01 3ffdc800000000000000000000000000 */ -/* cos(x) = 0.e708ac84d4172a3e2737662213 429e14021074d7e702e77d72a8 f1101a7e70410df8273e9aa */ - 0x0.e708ac84d4172a3e2737662213p0L, - 0x0.429e14021074d7e702e77d72a8p-104L, -/* sin(x) = 0.6e44f8c36eb10a1c752d093c00 f4d47ba446ac4c215d26b03164 42f168459e677d06e7249e3 */ - 0x0.6e44f8c36eb10a1c752d093c00p0L, - 0x0.f4d47ba446ac4c215d26b03164p-104L, - -/* x = 4.53125000000000000000000000000000000e-01 3ffdd000000000000000000000000000 */ -/* cos(x) = 0.e62a551594b970a770b15d41d4 c0e483e47aca550111df6966f9 e7ac3a94ae49e6a71eb031e */ - 0x0.e62a551594b970a770b15d41d4p0L, - 0x0.c0e483e47aca550111df6966f9p-104L, -/* sin(x) = 0.70122c5ec5028c8cff33abf4fd 340ccc382e038379b09cf04f9a 52692b10b72586060cbb001 */ - 0x0.70122c5ec5028c8cff33abf4fdp0L, - 0x0.340ccc382e038379b09cf04f9ap-104L, - -/* x = 4.60937500000000000000000000000000000e-01 3ffdd800000000000000000000000000 */ -/* cos(x) = 0.e54864fe33e8575cabf5bd0e5c f1b1a8bc7c0d5f61702450fa6b 6539735820dd2603ae355d5 */ - 0x0.e54864fe33e8575cabf5bd0e5cp0L, - 0x0.f1b1a8bc7c0d5f61702450fa6bp-104L, -/* sin(x) = 0.71dd9fb1ff4677853acb970a9f 6729c6e3aac247b1c57cea66c7 7413f1f98e8b9e98e49d851 */ - 0x0.71dd9fb1ff4677853acb970a9fp0L, - 0x0.6729c6e3aac247b1c57cea66c7p-104L, - -/* x = 4.68750000000000000000000000000000000e-01 3ffde000000000000000000000000000 */ -/* cos(x) = 0.e462dfc670d421ab3d1a159012 28f146a0547011202bf5ab01f9 14431859aef577966bc4fa4 */ - 0x0.e462dfc670d421ab3d1a159012p0L, - 0x0.28f146a0547011202bf5ab01f9p-104L, -/* sin(x) = 0.73a74b8f52947b681baf6928eb 3fb021769bf4779bad0e3aa9b1 cdb75ec60aad9fc63ff19d5 */ - 0x0.73a74b8f52947b681baf6928ebp0L, - 0x0.3fb021769bf4779bad0e3aa9b1p-104L, - -/* x = 4.76562500000000000000000000000000000e-01 3ffde800000000000000000000000000 */ -/* cos(x) = 0.e379c9045f29d517c4808aa497 c2057b2b3d109e76c0dc302d4d 0698b36e3f0bdbf33d8e952 */ - 0x0.e379c9045f29d517c4808aa497p0L, - 0x0.c2057b2b3d109e76c0dc302d4dp-104L, -/* sin(x) = 0.756f28d011d98528a44a75fc29 c779bd734ecdfb582fdb74b68a 4c4c4be54cfd0b2d3ad292f */ - 0x0.756f28d011d98528a44a75fc29p0L, - 0x0.c779bd734ecdfb582fdb74b68ap-104L, - -/* x = 4.84375000000000000000000000000000000e-01 3ffdf000000000000000000000000000 */ -/* cos(x) = 0.e28d245c58baef72225e232abc 003c4366acd9eb4fc2808c2ab7 fe7676cf512ac7f945ae5fb */ - 0x0.e28d245c58baef72225e232abcp0L, - 0x0.003c4366acd9eb4fc2808c2ab7p-104L, -/* sin(x) = 0.77353054ca72690d4c6e171fd9 9e6b39fa8e1ede5f052fd29645 34c75340970a3a9cd3c5c32 */ - 0x0.77353054ca72690d4c6e171fd9p0L, - 0x0.9e6b39fa8e1ede5f052fd29645p-104L, - -/* x = 4.92187500000000000000000000000000000e-01 3ffdf800000000000000000000000000 */ -/* cos(x) = 0.e19cf580eeec046aa1422fa748 07ecefb2a1911c94e7b5f20a00 f70022d940193691e5bd790 */ - 0x0.e19cf580eeec046aa1422fa748p0L, - 0x0.07ecefb2a1911c94e7b5f20a00p-104L, -/* sin(x) = 0.78f95b0560a9a3bd6df7bd981d c38c61224d08bc20631ea932e6 05e53b579e9e0767dfcbbcb */ - 0x0.78f95b0560a9a3bd6df7bd981dp0L, - 0x0.c38c61224d08bc20631ea932e6p-104L, - -/* x = 5.00000000000000000000000000000000000e-01 3ffe0000000000000000000000000000 */ -/* cos(x) = 0.e0a94032dbea7cedbddd9da2fa fad98556566b3a89f43eabd723 50af3e8b19e801204d8fe2e */ - 0x0.e0a94032dbea7cedbddd9da2fap0L, - 0x0.fad98556566b3a89f43eabd723p-104L, -/* sin(x) = 0.7abba1d12c17bfa1d92f0d93f6 0ded9992f45b4fcaf13cd58b30 3693d2a0db47db35ae8a3a9 */ - 0x0.7abba1d12c17bfa1d92f0d93f6p0L, - 0x0.0ded9992f45b4fcaf13cd58b30p-104L, - -/* x = 5.07812500000000000000000000000000000e-01 3ffe0400000000000000000000000000 */ -/* cos(x) = 0.dfb20840f3a9b36f7ae2c51534 2890b5ec583b8366cc2b55029e 95094d31112383f2553498b */ - 0x0.dfb20840f3a9b36f7ae2c51534p0L, - 0x0.2890b5ec583b8366cc2b55029ep-104L, -/* sin(x) = 0.7c7bfdaf13e5ed17212f8a7525 bfb113aba6c0741b5362bb8d59 282a850b63716bca0c910f0 */ - 0x0.7c7bfdaf13e5ed17212f8a7525p0L, - 0x0.bfb113aba6c0741b5362bb8d59p-104L, - -/* x = 5.15625000000000000000000000000000000e-01 3ffe0800000000000000000000000000 */ -/* cos(x) = 0.deb7518814a7a931bbcc88c109 cd41c50bf8bb48f20ae8c36628 d1d3d57574f7dc58f27d91c */ - 0x0.deb7518814a7a931bbcc88c109p0L, - 0x0.cd41c50bf8bb48f20ae8c36628p-104L, -/* sin(x) = 0.7e3a679daaf25c676542bcb402 8d0964172961c921823a4ef0c3 a9070d886dbd073f6283699 */ - 0x0.7e3a679daaf25c676542bcb402p0L, - 0x0.8d0964172961c921823a4ef0c3p-104L, - -/* x = 5.23437500000000000000000000000000000e-01 3ffe0c00000000000000000000000000 */ -/* cos(x) = 0.ddb91ff318799172bd2452d0a3 889f5169c64a0094bcf0b8aa7d cf0d7640a2eba68955a80be */ - 0x0.ddb91ff318799172bd2452d0a3p0L, - 0x0.889f5169c64a0094bcf0b8aa7dp-104L, -/* sin(x) = 0.7ff6d8a34bd5e8fa54c97482db 5159df1f24e8038419c0b448b9 eea8939b5d4dfcf40900257 */ - 0x0.7ff6d8a34bd5e8fa54c97482dbp0L, - 0x0.5159df1f24e8038419c0b448b9p-104L, - -/* x = 5.31250000000000000000000000000000000e-01 3ffe1000000000000000000000000000 */ -/* cos(x) = 0.dcb7777ac420705168f31e3eb7 80ce9c939ecada62843b54522f 5407eb7f21e556059fcd734 */ - 0x0.dcb7777ac420705168f31e3eb7p0L, - 0x0.80ce9c939ecada62843b54522fp-104L, -/* sin(x) = 0.81b149ce34caa5a4e650f8d09f d4d6aa74206c32ca951a93074c 83b2d294d25dbb0f7fdfad2 */ - 0x0.81b149ce34caa5a4e650f8d09fp0L, - 0x0.d4d6aa74206c32ca951a93074cp-104L, - -/* x = 5.39062500000000000000000000000000000e-01 3ffe1400000000000000000000000000 */ -/* cos(x) = 0.dbb25c25b8260c14f6e7bc98ec 991b70c65335198b0ab628bad2 0cc7b229d4dd62183cfa055 */ - 0x0.dbb25c25b8260c14f6e7bc98ecp0L, - 0x0.991b70c65335198b0ab628bad2p-104L, -/* sin(x) = 0.8369b434a372da7eb5c8a71fe3 6ce1e0b2b493f6f5cb2e38bcae c2a556b3678c401940d1c3c */ - 0x0.8369b434a372da7eb5c8a71fe3p0L, - 0x0.6ce1e0b2b493f6f5cb2e38bcaep-104L, - -/* x = 5.46875000000000000000000000000000000e-01 3ffe1800000000000000000000000000 */ -/* cos(x) = 0.daa9d20860827063fde51c09e8 55e9932e1b17143e7244fd267a 899d41ae1f3bc6a0ec42e27 */ - 0x0.daa9d20860827063fde51c09e8p0L, - 0x0.55e9932e1b17143e7244fd267ap-104L, -/* sin(x) = 0.852010f4f0800521378bd8dd61 4753d080c2e9e0775ffc609947 b9132f5357404f464f06a58 */ - 0x0.852010f4f0800521378bd8dd61p0L, - 0x0.4753d080c2e9e0775ffc609947p-104L, - -/* x = 5.54687500000000000000000000000000000e-01 3ffe1c00000000000000000000000000 */ -/* cos(x) = 0.d99ddd44e44a43d4d4a3a3ed95 204106fd54d78e8c7684545c0d a0b7c2c72be7a89b7c182ad */ - 0x0.d99ddd44e44a43d4d4a3a3ed95p0L, - 0x0.204106fd54d78e8c7684545c0dp-104L, -/* sin(x) = 0.86d45935ab396cb4e421e822de e54f3562dfcefeaa782184c234 01d231f5ad981a1cc195b18 */ - 0x0.86d45935ab396cb4e421e822dep0L, - 0x0.e54f3562dfcefeaa782184c234p-104L, - -/* x = 5.62500000000000000000000000000000000e-01 3ffe2000000000000000000000000000 */ -/* cos(x) = 0.d88e820b1526311dd561efbc0c 1a9a5375eb26f65d246c5744b1 3ca26a7e0fd42556da843c8 */ - 0x0.d88e820b1526311dd561efbc0cp0L, - 0x0.1a9a5375eb26f65d246c5744b1p-104L, -/* sin(x) = 0.88868625b4e1dbb23133101330 22527200c143a5cb16637cb7da f8ade82459ff2e98511f40f */ - 0x0.88868625b4e1dbb23133101330p0L, - 0x0.22527200c143a5cb16637cb7dap-104L, - -/* x = 5.70312500000000000000000000000000000e-01 3ffe2400000000000000000000000000 */ -/* cos(x) = 0.d77bc4985e93a607c9d868b906 bbc6bbe3a04258814acb035846 8b826fc91bd4d814827f65e */ - 0x0.d77bc4985e93a607c9d868b906p0L, - 0x0.bbc6bbe3a04258814acb035846p-104L, -/* sin(x) = 0.8a3690fc5bfc11bf9535e2739a 8512f448a41251514bbed7fc18 d530f9b4650fcbb2861b0aa */ - 0x0.8a3690fc5bfc11bf9535e2739ap0L, - 0x0.8512f448a41251514bbed7fc18p-104L, - -/* x = 5.78125000000000000000000000000000000e-01 3ffe2800000000000000000000000000 */ -/* cos(x) = 0.d665a937b4ef2b1f6d51bad6d9 88a4419c1d7051faf31a9efa15 1d7631117efac03713f950a */ - 0x0.d665a937b4ef2b1f6d51bad6d9p0L, - 0x0.88a4419c1d7051faf31a9efa15p-104L, -/* sin(x) = 0.8be472f9776d809af2b8817124 3d63d66dfceeeb739cc894e023 fbc165a0e3f26ff729c5d57 */ - 0x0.8be472f9776d809af2b8817124p0L, - 0x0.3d63d66dfceeeb739cc894e023p-104L, - -/* x = 5.85937500000000000000000000000000000e-01 3ffe2c00000000000000000000000000 */ -/* cos(x) = 0.d54c3441844897fc8f853f0655 f1ba695eba9fbfd7439dbb1171 d862d9d9146ca5136f825ac */ - 0x0.d54c3441844897fc8f853f0655p0L, - 0x0.f1ba695eba9fbfd7439dbb1171p-104L, -/* sin(x) = 0.8d902565817ee7839bce3cd128 060119492cd36d42d82ada30d7 f8bde91324808377ddbf5d4 */ - 0x0.8d902565817ee7839bce3cd128p0L, - 0x0.060119492cd36d42d82ada30d7p-104L, - -/* x = 5.93750000000000000000000000000000000e-01 3ffe3000000000000000000000000000 */ -/* cos(x) = 0.d42f6a1b9f0168cdf031c2f63c 8d9304d86f8d34cb1d5fccb68c a0f2241427fc18d1fd5bbdf */ - 0x0.d42f6a1b9f0168cdf031c2f63cp0L, - 0x0.8d9304d86f8d34cb1d5fccb68cp-104L, -/* sin(x) = 0.8f39a191b2ba6122a3fa4f41d5 a3ffd421417d46f19a22230a14 f7fcc8fce5c75b4b28b29d1 */ - 0x0.8f39a191b2ba6122a3fa4f41d5p0L, - 0x0.a3ffd421417d46f19a22230a14p-104L, - -/* x = 6.01562500000000000000000000000000000e-01 3ffe3400000000000000000000000000 */ -/* cos(x) = 0.d30f4f392c357ab0661c5fa8a7 d9b26627846fef214b1d19a223 79ff9eddba087cf410eb097 */ - 0x0.d30f4f392c357ab0661c5fa8a7p0L, - 0x0.d9b26627846fef214b1d19a223p-104L, -/* sin(x) = 0.90e0e0d81ca678796cc92c8ea8 c2815bc72ca78abe571bfa8576 aacc571e096a33237e0e830 */ - 0x0.90e0e0d81ca678796cc92c8ea8p0L, - 0x0.c2815bc72ca78abe571bfa8576p-104L, - -/* x = 6.09375000000000000000000000000000000e-01 3ffe3800000000000000000000000000 */ -/* cos(x) = 0.d1ebe81a95ee752e48a26bcd32 d6e922d7eb44b8ad2232f69307 95e84b56317269b9dd1dfa6 */ - 0x0.d1ebe81a95ee752e48a26bcd32p0L, - 0x0.d6e922d7eb44b8ad2232f69307p-104L, -/* sin(x) = 0.9285dc9bc45dd9ea3d02457bcc e59c4175aab6ff7929a8d28719 5525fdace200dba032874fb */ - 0x0.9285dc9bc45dd9ea3d02457bccp0L, - 0x0.e59c4175aab6ff7929a8d28719p-104L, - -/* x = 6.17187500000000000000000000000000000e-01 3ffe3c00000000000000000000000000 */ -/* cos(x) = 0.d0c5394d772228195e25736c03 574707de0af1ca344b13bd3914 bfe27518e9e426f5deff1e1 */ - 0x0.d0c5394d772228195e25736c03p0L, - 0x0.574707de0af1ca344b13bd3914p-104L, -/* sin(x) = 0.94288e48bd0335fc41c4cbd292 0497a8f5d1d8185c99fa0081f9 0c27e2a53ffdd208a0dbe69 */ - 0x0.94288e48bd0335fc41c4cbd292p0L, - 0x0.0497a8f5d1d8185c99fa0081f9p-104L, - -/* x = 6.25000000000000000000000000000000000e-01 3ffe4000000000000000000000000000 */ -/* cos(x) = 0.cf9b476c897c25c5bfe750dd3f 308eaf7bcc1ed00179a256870f 4200445043dcdb1974b5878 */ - 0x0.cf9b476c897c25c5bfe750dd3fp0L, - 0x0.308eaf7bcc1ed00179a256870fp-104L, -/* sin(x) = 0.95c8ef544210ec0b91c49bd2aa 09e8515fa61a156ebb10f5f8c2 32a6445b61ebf3c2ec268f9 */ - 0x0.95c8ef544210ec0b91c49bd2aap0L, - 0x0.09e8515fa61a156ebb10f5f8c2p-104L, - -/* x = 6.32812500000000000000000000000000000e-01 3ffe4400000000000000000000000000 */ -/* cos(x) = 0.ce6e171f92f2e27f32225327ec 440ddaefae248413efc0e58cee e1ae369aabe73f88c87ed1a */ - 0x0.ce6e171f92f2e27f32225327ecp0L, - 0x0.440ddaefae248413efc0e58ceep-104L, -/* sin(x) = 0.9766f93cd18413a6aafc1cfc6f c28abb6817bf94ce349901ae3f 48c3215d3eb60acc5f78903 */ - 0x0.9766f93cd18413a6aafc1cfc6fp0L, - 0x0.c28abb6817bf94ce349901ae3fp-104L, - -/* x = 6.40625000000000000000000000000000000e-01 3ffe4800000000000000000000000000 */ -/* cos(x) = 0.cd3dad1b5328a2e459f993f4f5 108819faccbc4eeba9604e81c7 adad51cc8a2561631a06826 */ - 0x0.cd3dad1b5328a2e459f993f4f5p0L, - 0x0.108819faccbc4eeba9604e81c7p-104L, -/* sin(x) = 0.9902a58a45e27bed68412b426b 675ed503f54d14c8172e0d373f 42cadf04daf67319a7f94be */ - 0x0.9902a58a45e27bed68412b426bp0L, - 0x0.675ed503f54d14c8172e0d373fp-104L, - -/* x = 6.48437500000000000000000000000000000e-01 3ffe4c00000000000000000000000000 */ -/* cos(x) = 0.cc0a0e21709883a3ff00911e11 a07ee3bd7ea2b04e081be99be0 264791170761ae64b8b744a */ - 0x0.cc0a0e21709883a3ff00911e11p0L, - 0x0.a07ee3bd7ea2b04e081be99be0p-104L, -/* sin(x) = 0.9a9bedcdf01b38d993f3d78207 81de292033ead73b89e28f3931 3dbe3a6e463f845b5fa8490 */ - 0x0.9a9bedcdf01b38d993f3d78207p0L, - 0x0.81de292033ead73b89e28f3931p-104L, - -/* x = 6.56250000000000000000000000000000000e-01 3ffe5000000000000000000000000000 */ -/* cos(x) = 0.cad33f00658fe5e8204bbc0f3a 66a0e6a773f87987a780b243d7 be83b3db1448ca0e0e62787 */ - 0x0.cad33f00658fe5e8204bbc0f3ap0L, - 0x0.66a0e6a773f87987a780b243d7p-104L, -/* sin(x) = 0.9c32cba2b14156ef05256c4f85 7991ca6a547cd7ceb1ac8a8e62 a282bd7b9183648a462bd04 */ - 0x0.9c32cba2b14156ef05256c4f85p0L, - 0x0.7991ca6a547cd7ceb1ac8a8e62p-104L, - -/* x = 6.64062500000000000000000000000000000e-01 3ffe5400000000000000000000000000 */ -/* cos(x) = 0.c99944936cf48c8911ff93fe64 b3ddb7981e414bdaf6aae12035 77de44878c62bc3bc9cf7b9 */ - 0x0.c99944936cf48c8911ff93fe64p0L, - 0x0.b3ddb7981e414bdaf6aae12035p-104L, -/* sin(x) = 0.9dc738ad14204e689ac582d0f8 5826590feece34886cfefe2e08 cf2bb8488d55424dc9d3525 */ - 0x0.9dc738ad14204e689ac582d0f8p0L, - 0x0.5826590feece34886cfefe2e08p-104L, - -/* x = 6.71875000000000000000000000000000000e-01 3ffe5800000000000000000000000000 */ -/* cos(x) = 0.c85c23c26ed7b6f014ef546c47 929682122876bfbf157de0aff3 c4247d820c746e32cd4174f */ - 0x0.c85c23c26ed7b6f014ef546c47p0L, - 0x0.929682122876bfbf157de0aff3p-104L, -/* sin(x) = 0.9f592e9b66a9cf906a3c7aa3c1 0199849040c45ec3f0a7475973 11038101780c5f266059dbf */ - 0x0.9f592e9b66a9cf906a3c7aa3c1p0L, - 0x0.0199849040c45ec3f0a7475973p-104L, - -/* x = 6.79687500000000000000000000000000000e-01 3ffe5c00000000000000000000000000 */ -/* cos(x) = 0.c71be181ecd6875ce2da5615a0 3cca207d9adcb9dfb0a1d6c40a 4f0056437f1a59ccddd06ee */ - 0x0.c71be181ecd6875ce2da5615a0p0L, - 0x0.3cca207d9adcb9dfb0a1d6c40ap-104L, -/* sin(x) = 0.a0e8a725d33c828c11fa50fd9e 9a15ffecfad43f3e534358076b 9b0f6865694842b1e8c67dc */ - 0x0.a0e8a725d33c828c11fa50fd9ep0L, - 0x0.9a15ffecfad43f3e534358076bp-104L, - -/* x = 6.87500000000000000000000000000000000e-01 3ffe6000000000000000000000000000 */ -/* cos(x) = 0.c5d882d2ee48030c7c07d28e98 1e34804f82ed4cf93655d23653 89b716de6ad44676a1cc5da */ - 0x0.c5d882d2ee48030c7c07d28e98p0L, - 0x0.1e34804f82ed4cf93655d23653p-104L, -/* sin(x) = 0.a2759c0e79c35582527c32b55f 5405c182c66160cb1d9eb7bb0b 7cdf4ad66f317bda4332914 */ - 0x0.a2759c0e79c35582527c32b55fp0L, - 0x0.5405c182c66160cb1d9eb7bb0bp-104L, - -/* x = 6.95312500000000000000000000000000000e-01 3ffe6400000000000000000000000000 */ -/* cos(x) = 0.c4920cc2ec38fb891b38827db0 8884fc66371ac4c2052ca8885b 981bbcfd3bb7b093ee31515 */ - 0x0.c4920cc2ec38fb891b38827db0p0L, - 0x0.8884fc66371ac4c2052ca8885bp-104L, -/* sin(x) = 0.a400072188acf49cd6b173825e 038346f105e1301afe642bcc36 4cea455e21e506e3e927ed8 */ - 0x0.a400072188acf49cd6b173825ep0L, - 0x0.038346f105e1301afe642bcc36p-104L, - -/* x = 7.03125000000000000000000000000000000e-01 3ffe6800000000000000000000000000 */ -/* cos(x) = 0.c348846bbd3631338ffe2bfe9d d1381a35b4e9c0c51b4c13fe37 6bad1bf5caacc4542be0aa9 */ - 0x0.c348846bbd3631338ffe2bfe9dp0L, - 0x0.d1381a35b4e9c0c51b4c13fe37p-104L, -/* sin(x) = 0.a587e23555bb08086d02b9c662 cdd29316c3e9bd08d93793634a 21b1810cce73bdb97a99b9e */ - 0x0.a587e23555bb08086d02b9c662p0L, - 0x0.cdd29316c3e9bd08d93793634ap-104L, - -/* x = 7.10937500000000000000000000000000000e-01 3ffe6c00000000000000000000000000 */ -/* cos(x) = 0.c1fbeef380e4ffdd5a613ec872 2f643ffe814ec2343e53adb549 627224fdc9f2a7b77d3d69f */ - 0x0.c1fbeef380e4ffdd5a613ec872p0L, - 0x0.2f643ffe814ec2343e53adb549p-104L, -/* sin(x) = 0.a70d272a76a8d4b6da0ec90712 bb748b96dabf88c3079246f3db 7eea6e58ead4ed0e2843303 */ - 0x0.a70d272a76a8d4b6da0ec90712p0L, - 0x0.bb748b96dabf88c3079246f3dbp-104L, - -/* x = 7.18750000000000000000000000000000000e-01 3ffe7000000000000000000000000000 */ -/* cos(x) = 0.c0ac518c8b6ae710ba37a3eeb9 0cb15aebcb8bed4356fb507a48 a6e97de9aa6d9660116b436 */ - 0x0.c0ac518c8b6ae710ba37a3eeb9p0L, - 0x0.0cb15aebcb8bed4356fb507a48p-104L, -/* sin(x) = 0.a88fcfebd9a8dd47e2f3c76ef9 e2439920f7e7fbe735f8bcc985 491ec6f12a2d4214f8cfa99 */ - 0x0.a88fcfebd9a8dd47e2f3c76ef9p0L, - 0x0.e2439920f7e7fbe735f8bcc985p-104L, - -/* x = 7.26562500000000000000000000000000000e-01 3ffe7400000000000000000000000000 */ -/* cos(x) = 0.bf59b17550a440687596929656 7cf3e3b4e483061877c02811c6 cae85fad5a6c3da58f49292 */ - 0x0.bf59b17550a440687596929656p0L, - 0x0.7cf3e3b4e483061877c02811c6p-104L, -/* sin(x) = 0.aa0fd66eddb921232c28520d39 11b8a03193b47f187f1471ac21 6fbcd5bb81029294d3a73f1 */ - 0x0.aa0fd66eddb921232c28520d39p0L, - 0x0.11b8a03193b47f187f1471ac21p-104L, - -/* x = 7.34375000000000000000000000000000000e-01 3ffe7800000000000000000000000000 */ -/* cos(x) = 0.be0413f84f2a771c614946a88c bf4da1d75a5560243de8f2283f efa0ea4a48468a52d51d8b3 */ - 0x0.be0413f84f2a771c614946a88cp0L, - 0x0.bf4da1d75a5560243de8f2283fp-104L, -/* sin(x) = 0.ab8d34b36acd987210ed343ec6 5d7e3adc2e7109fce43d55c8d5 7dfdf55b9e01d2cc1f1b9ec */ - 0x0.ab8d34b36acd987210ed343ec6p0L, - 0x0.5d7e3adc2e7109fce43d55c8d5p-104L, - -/* x = 7.42187500000000000000000000000000000e-01 3ffe7c00000000000000000000000000 */ -/* cos(x) = 0.bcab7e6bfb2a14a9b122c574a3 76bec98ab14808c64a4e731b34 047e217611013ac99c0f25d */ - 0x0.bcab7e6bfb2a14a9b122c574a3p0L, - 0x0.76bec98ab14808c64a4e731b34p-104L, -/* sin(x) = 0.ad07e4c409d08c4fa3a9057bb0 ac24b8636e74e76f51e09bd6b2 319707cbd9f5e254643897a */ - 0x0.ad07e4c409d08c4fa3a9057bb0p0L, - 0x0.ac24b8636e74e76f51e09bd6b2p-104L, - -/* x = 7.50000000000000000000000000000000000e-01 3ffe8000000000000000000000000000 */ -/* cos(x) = 0.bb4ff632a908f73ec151839cb9 d993b4e0bfb8f20e7e44e6e4ae e845e35575c3106dbe6fd06 */ - 0x0.bb4ff632a908f73ec151839cb9p0L, - 0x0.d993b4e0bfb8f20e7e44e6e4aep-104L, -/* sin(x) = 0.ae7fe0b5fc786b2d966e1d6af1 40a488476747c2646425fc7533 f532cd044cb10a971a49a6a */ - 0x0.ae7fe0b5fc786b2d966e1d6af1p0L, - 0x0.40a488476747c2646425fc7533p-104L, - -/* x = 7.57812500000000000000000000000000000e-01 3ffe8400000000000000000000000000 */ -/* cos(x) = 0.b9f180ba77dd0751628e135a95 08299012230f14becacdd14c3f 8862d122de5b56d55b53360 */ - 0x0.b9f180ba77dd0751628e135a95p0L, - 0x0.08299012230f14becacdd14c3fp-104L, -/* sin(x) = 0.aff522a954f2ba16d9defdc416 e33f5e9a5dfd5a6c228e0abc4d 521327ff6e2517a7b3851dd */ - 0x0.aff522a954f2ba16d9defdc416p0L, - 0x0.e33f5e9a5dfd5a6c228e0abc4dp-104L, - -/* x = 7.65625000000000000000000000000000000e-01 3ffe8800000000000000000000000000 */ -/* cos(x) = 0.b890237d3bb3c284b614a05390 16bfa1053730bbdf940fa895e1 85f8e58884d3dda15e63371 */ - 0x0.b890237d3bb3c284b614a05390p0L, - 0x0.16bfa1053730bbdf940fa895e1p-104L, -/* sin(x) = 0.b167a4c90d63c4244cf5493b7c c23bd3c3c1225e078baa0c53d6 d400b926281f537a1a260e6 */ - 0x0.b167a4c90d63c4244cf5493b7cp0L, - 0x0.c23bd3c3c1225e078baa0c53d6p-104L, - -/* x = 7.73437500000000000000000000000000000e-01 3ffe8c00000000000000000000000000 */ -/* cos(x) = 0.b72be40067aaf2c050dbdb7a14 c3d7d4f203f6b3f0224a4afe55 d6ec8e92b508fd5c5984b3b */ - 0x0.b72be40067aaf2c050dbdb7a14p0L, - 0x0.c3d7d4f203f6b3f0224a4afe55p-104L, -/* sin(x) = 0.b2d7614b1f3aaa24df2d6e20a7 7e1ca3e6d838c03e29c1bcb026 e6733324815fadc9eb89674 */ - 0x0.b2d7614b1f3aaa24df2d6e20a7p0L, - 0x0.7e1ca3e6d838c03e29c1bcb026p-104L, - -/* x = 7.81250000000000000000000000000000000e-01 3ffe9000000000000000000000000000 */ -/* cos(x) = 0.b5c4c7d4f7dae915ac786ccf4b 1a498d3e73b6e5e74fe7519d9c 53ee6d6b90e881bddfc33e1 */ - 0x0.b5c4c7d4f7dae915ac786ccf4bp0L, - 0x0.1a498d3e73b6e5e74fe7519d9cp-104L, -/* sin(x) = 0.b44452709a5975290591376543 4a59d111f0433eb2b133f7d103 207e2aeb4aae111ddc385b3 */ - 0x0.b44452709a5975290591376543p0L, - 0x0.4a59d111f0433eb2b133f7d103p-104L, - -/* x = 7.89062500000000000000000000000000000e-01 3ffe9400000000000000000000000000 */ -/* cos(x) = 0.b45ad4975b1294cadca4cf40ec 8f22a68cd14b175835239a37e6 3acb85e8e9505215df18140 */ - 0x0.b45ad4975b1294cadca4cf40ecp0L, - 0x0.8f22a68cd14b175835239a37e6p-104L, -/* sin(x) = 0.b5ae7285bc10cf515753847e8f 8b7a30e0a580d929d770103509 880680f7b8b0e8ad23b65d8 */ - 0x0.b5ae7285bc10cf515753847e8fp0L, - 0x0.8b7a30e0a580d929d770103509p-104L -}; diff --git a/sysdeps/ieee754/ldbl-128ibm/test-canonical-ldbl-128ibm.c b/sysdeps/ieee754/ldbl-128ibm/test-canonical-ldbl-128ibm.c deleted file mode 100644 index 75735db18e..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/test-canonical-ldbl-128ibm.c +++ /dev/null @@ -1,230 +0,0 @@ -/* Test iscanonical and canonicalizel for ldbl-128ibm. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -struct test -{ - double hi, lo; - bool canonical; -}; - -static const struct test tests[] = - { - { __builtin_nan (""), 0.0, true }, - { __builtin_nan (""), DBL_MAX, true }, - { __builtin_nan (""), __builtin_inf (), true }, - { __builtin_nan (""), __builtin_nan (""), true }, - { __builtin_nan (""), __builtin_nans (""), true }, - { __builtin_nans (""), 0.0, true }, - { __builtin_nans (""), DBL_MAX, true }, - { __builtin_nans (""), __builtin_inf (), true }, - { __builtin_nans (""), __builtin_nan (""), true }, - { __builtin_nans (""), __builtin_nans (""), true }, - { __builtin_inf (), 0.0, true }, - { __builtin_inf (), -0.0, true }, - { -__builtin_inf (), 0.0, true }, - { -__builtin_inf (), -0.0, true }, - { __builtin_inf (), DBL_TRUE_MIN, false }, - { __builtin_inf (), -DBL_TRUE_MIN, false }, - { -__builtin_inf (), DBL_TRUE_MIN, false }, - { -__builtin_inf (), -DBL_TRUE_MIN, false }, - { __builtin_inf (), DBL_MIN, false }, - { __builtin_inf (), -DBL_MIN, false }, - { -__builtin_inf (), DBL_MIN, false }, - { -__builtin_inf (), -DBL_MIN, false }, - { __builtin_inf (), __builtin_inf (), false }, - { __builtin_inf (), -__builtin_inf (), false }, - { -__builtin_inf (), __builtin_inf (), false }, - { -__builtin_inf (), -__builtin_inf (), false }, - { __builtin_inf (), __builtin_nan (""), false }, - { __builtin_inf (), -__builtin_nan (""), false }, - { -__builtin_inf (), __builtin_nan (""), false }, - { -__builtin_inf (), -__builtin_nan (""), false }, - { 0.0, 0.0, true }, - { 0.0, -0.0, true }, - { -0.0, 0.0, true }, - { -0.0, -0.0, true }, - { 0.0, DBL_TRUE_MIN, false }, - { 0.0, -DBL_TRUE_MIN, false }, - { -0.0, DBL_TRUE_MIN, false }, - { -0.0, -DBL_TRUE_MIN, false }, - { 0.0, DBL_MAX, false }, - { 0.0, -DBL_MAX, false }, - { -0.0, DBL_MAX, false }, - { -0.0, -DBL_MAX, false }, - { 0.0, __builtin_inf (), false }, - { 0.0, -__builtin_inf (), false }, - { -0.0, __builtin_inf (), false }, - { -0.0, -__builtin_inf (), false }, - { 0.0, __builtin_nan (""), false }, - { 0.0, -__builtin_nan (""), false }, - { -0.0, __builtin_nan (""), false }, - { -0.0, -__builtin_nan (""), false }, - { 1.0, 0.0, true }, - { 1.0, -0.0, true }, - { -1.0, 0.0, true }, - { -1.0, -0.0, true }, - { 1.0, DBL_TRUE_MIN, true }, - { 1.0, -DBL_TRUE_MIN, true }, - { -1.0, DBL_TRUE_MIN, true }, - { -1.0, -DBL_TRUE_MIN, true }, - { 1.0, DBL_MAX, false }, - { 1.0, -DBL_MAX, false }, - { -1.0, DBL_MAX, false }, - { -1.0, -DBL_MAX, false }, - { 1.0, __builtin_inf (), false }, - { 1.0, -__builtin_inf (), false }, - { -1.0, __builtin_inf (), false }, - { -1.0, -__builtin_inf (), false }, - { 1.0, __builtin_nan (""), false }, - { 1.0, -__builtin_nan (""), false }, - { -1.0, __builtin_nan (""), false }, - { -1.0, -__builtin_nan (""), false }, - { 0x1p1023, 0x1.1p969, true }, - { 0x1p1023, -0x1.1p969, true }, - { -0x1p1023, 0x1.1p969, true }, - { -0x1p1023, -0x1.1p969, true }, - { 0x1p1023, 0x1.1p970, false }, - { 0x1p1023, -0x1.1p970, false }, - { -0x1p1023, 0x1.1p970, false }, - { -0x1p1023, -0x1.1p970, false }, - { 0x1p1023, 0x1p970, true }, - { 0x1p1023, -0x1p970, true }, - { -0x1p1023, 0x1p970, true }, - { -0x1p1023, -0x1p970, true }, - { 0x1.0000000000001p1023, 0x1p970, false }, - { 0x1.0000000000001p1023, -0x1p970, false }, - { -0x1.0000000000001p1023, 0x1p970, false }, - { -0x1.0000000000001p1023, -0x1p970, false }, - { 0x1p-969, 0x1.1p-1023, true }, - { 0x1p-969, -0x1.1p-1023, true }, - { -0x1p-969, 0x1.1p-1023, true }, - { -0x1p-969, -0x1.1p-1023, true }, - { 0x1p-969, 0x1.1p-1022, false }, - { 0x1p-969, -0x1.1p-1022, false }, - { -0x1p-969, 0x1.1p-1022, false }, - { -0x1p-969, -0x1.1p-1022, false }, - { 0x1p-969, 0x1p-1022, true }, - { 0x1p-969, -0x1p-1022, true }, - { -0x1p-969, 0x1p-1022, true }, - { -0x1p-969, -0x1p-1022, true }, - { 0x1.0000000000001p-969, 0x1p-1022, false }, - { 0x1.0000000000001p-969, -0x1p-1022, false }, - { -0x1.0000000000001p-969, 0x1p-1022, false }, - { -0x1.0000000000001p-969, -0x1p-1022, false }, - { 0x1p-970, 0x1.1p-1024, true }, - { 0x1p-970, -0x1.1p-1024, true }, - { -0x1p-970, 0x1.1p-1024, true }, - { -0x1p-970, -0x1.1p-1024, true }, - { 0x1p-970, 0x1.1p-1023, false }, - { 0x1p-970, -0x1.1p-1023, false }, - { -0x1p-970, 0x1.1p-1023, false }, - { -0x1p-970, -0x1.1p-1023, false }, - { 0x1p-970, 0x1p-1023, true }, - { 0x1p-970, -0x1p-1023, true }, - { -0x1p-970, 0x1p-1023, true }, - { -0x1p-970, -0x1p-1023, true }, - { 0x1.0000000000001p-970, 0x1p-1023, false }, - { 0x1.0000000000001p-970, -0x1p-1023, false }, - { -0x1.0000000000001p-970, 0x1p-1023, false }, - { -0x1.0000000000001p-970, -0x1p-1023, false }, - { 0x1p-1000, 0x1.1p-1054, true }, - { 0x1p-1000, -0x1.1p-1054, true }, - { -0x1p-1000, 0x1.1p-1054, true }, - { -0x1p-1000, -0x1.1p-1054, true }, - { 0x1p-1000, 0x1.1p-1053, false }, - { 0x1p-1000, -0x1.1p-1053, false }, - { -0x1p-1000, 0x1.1p-1053, false }, - { -0x1p-1000, -0x1.1p-1053, false }, - { 0x1p-1000, 0x1p-1053, true }, - { 0x1p-1000, -0x1p-1053, true }, - { -0x1p-1000, 0x1p-1053, true }, - { -0x1p-1000, -0x1p-1053, true }, - { 0x1.0000000000001p-1000, 0x1p-1053, false }, - { 0x1.0000000000001p-1000, -0x1p-1053, false }, - { -0x1.0000000000001p-1000, 0x1p-1053, false }, - { -0x1.0000000000001p-1000, -0x1p-1053, false }, - { 0x1p-1021, 0x1p-1074, true }, - { 0x1p-1021, -0x1p-1074, true }, - { -0x1p-1021, 0x1p-1074, true }, - { -0x1p-1021, -0x1p-1074, true }, - { 0x1.0000000000001p-1021, 0x1p-1074, false }, - { 0x1.0000000000001p-1021, -0x1p-1074, false }, - { -0x1.0000000000001p-1021, 0x1p-1074, false }, - { -0x1.0000000000001p-1021, -0x1p-1074, false }, - { 0x1p-1022, 0x1p-1074, false }, - { 0x1p-1022, -0x1p-1074, false }, - { -0x1p-1022, 0x1p-1074, false }, - { -0x1p-1022, -0x1p-1074, false }, - }; - -static int -do_test (void) -{ - int result = 0; - - for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); i++) - { - long double ld = ldbl_pack (tests[i].hi, tests[i].lo); - bool canonical = iscanonical (ld); - if (canonical == tests[i].canonical) - { - printf ("PASS: iscanonical test %zu\n", i); - long double ldc = 12345.0L; - bool canonicalize_ret = canonicalizel (&ldc, &ld); - if (canonicalize_ret == !canonical) - { - printf ("PASS: canonicalizel test %zu\n", i); - bool canon_ok; - if (!canonical) - canon_ok = ldc == 12345.0L; - else if (isnan (ld)) - canon_ok = isnan (ldc) && !issignaling (ldc); - else - canon_ok = ldc == ld; - if (canon_ok) - printf ("PASS: canonicalized value test %zu\n", i); - else - { - printf ("FAIL: canonicalized value test %zu\n", i); - result = 1; - } - } - else - { - printf ("FAIL: canonicalizel test %zu\n", i); - result = 1; - } - } - else - { - printf ("FAIL: iscanonical test %zu\n", i); - result = 1; - } - } - - return result; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/ieee754/ldbl-128ibm/test-fmodl-ldbl-128ibm.c b/sysdeps/ieee754/ldbl-128ibm/test-fmodl-ldbl-128ibm.c deleted file mode 100644 index c9bfcfc5a8..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/test-fmodl-ldbl-128ibm.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Test for ldbl-128ibm fmodl handling of equal values (bug 19602). - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC fmodl -#define SETUP -#include "test-fmodrem-ldbl-128ibm.c" diff --git a/sysdeps/ieee754/ldbl-128ibm/test-fmodrem-ldbl-128ibm.c b/sysdeps/ieee754/ldbl-128ibm/test-fmodrem-ldbl-128ibm.c deleted file mode 100644 index a7cc042a15..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/test-fmodrem-ldbl-128ibm.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Test for ldbl-128ibm fmodl etc. handling of equal values. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* FUNC is defined to be the name of the function to test. */ -#define STRX(x) #x -#define STR(x) STRX (x) -#define SFUNC STR (FUNC) - -union u -{ - long double ld; - double d[2]; -}; - -volatile union u p1 = { .d = { DBL_MIN, 0.0 } }; -volatile union u p2 = { .d = { DBL_MIN, -0.0 } }; -volatile union u m1 = { .d = { -DBL_MIN, 0.0 } }; -volatile union u m2 = { .d = { -DBL_MIN, -0.0 } }; - -static int -test_func (const char *s, long double x, long double y, long double expected) -{ - volatile long double r; - r = FUNC (x, y); - if (r != expected || copysignl (1.0, r) != copysignl (1.0, expected)) - { - printf ("FAIL: " SFUNC " (%s)\n", s); - return 1; - } - else - { - printf ("PASS: " SFUNC " (%s)\n", s); - return 0; - } -} - -#define TEST_FUNC(a, b, e) test_func (#a ", " #b, a, b, e) - -static int -do_test (void) -{ - int result = 0; - SETUP; - result |= TEST_FUNC (p1.ld, p1.ld, 0.0L); - result |= TEST_FUNC (p1.ld, p2.ld, 0.0L); - result |= TEST_FUNC (p1.ld, m1.ld, 0.0L); - result |= TEST_FUNC (p1.ld, m2.ld, 0.0L); - result |= TEST_FUNC (p2.ld, p1.ld, 0.0L); - result |= TEST_FUNC (p2.ld, p2.ld, 0.0L); - result |= TEST_FUNC (p2.ld, m1.ld, 0.0L); - result |= TEST_FUNC (p2.ld, m2.ld, 0.0L); - result |= TEST_FUNC (m1.ld, p1.ld, -0.0L); - result |= TEST_FUNC (m1.ld, p2.ld, -0.0L); - result |= TEST_FUNC (m1.ld, m1.ld, -0.0L); - result |= TEST_FUNC (m1.ld, m2.ld, -0.0L); - result |= TEST_FUNC (m2.ld, p1.ld, -0.0L); - result |= TEST_FUNC (m2.ld, p2.ld, -0.0L); - result |= TEST_FUNC (m2.ld, m1.ld, -0.0L); - result |= TEST_FUNC (m2.ld, m2.ld, -0.0L); - return result; -} - -#define TEST_FUNCTION do_test () -#include "../../../test-skeleton.c" diff --git a/sysdeps/ieee754/ldbl-128ibm/test-remainderl-ldbl-128ibm.c b/sysdeps/ieee754/ldbl-128ibm/test-remainderl-ldbl-128ibm.c deleted file mode 100644 index 32b18be741..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/test-remainderl-ldbl-128ibm.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Test for ldbl-128ibm remainderl handling of equal values (bug 19677). - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FUNC remainderl -#define SETUP fesetround (FE_DOWNWARD) -#include "test-fmodrem-ldbl-128ibm.c" diff --git a/sysdeps/ieee754/ldbl-128ibm/test-remquol-ldbl-128ibm.c b/sysdeps/ieee754/ldbl-128ibm/test-remquol-ldbl-128ibm.c deleted file mode 100644 index f0d48420b8..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/test-remquol-ldbl-128ibm.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Test for ldbl-128ibm remquol handling of equal values (bug 19677). - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -static long double -wrap_remquol (long double x, long double y) -{ - int quo; - return remquol (x, y, &quo); -} - -#define FUNC wrap_remquol -#define SETUP fesetround (FE_DOWNWARD) -#include "test-fmodrem-ldbl-128ibm.c" diff --git a/sysdeps/ieee754/ldbl-128ibm/test-totalorderl-ldbl-128ibm.c b/sysdeps/ieee754/ldbl-128ibm/test-totalorderl-ldbl-128ibm.c deleted file mode 100644 index eaada2f848..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/test-totalorderl-ldbl-128ibm.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Test totalorderl and totalordermagl for ldbl-128ibm. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -struct test -{ - double hi, lo1, lo2; -}; - -static const struct test tests[] = - { - { __builtin_nan (""), 1, __builtin_nans ("") }, - { -__builtin_nan (""), 1, __builtin_nans ("") }, - { __builtin_nans (""), 1, __builtin_nan ("") }, - { -__builtin_nans (""), 1, __builtin_nan ("") }, - { __builtin_inf (), 0.0, -0.0 }, - { -__builtin_inf (), 0.0, -0.0 }, - { 1.5, 0.0, -0.0 }, - }; - -static int -do_test (void) -{ - int result = 0; - - for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); i++) - { - long double ldx = ldbl_pack (tests[i].hi, tests[i].lo1); - long double ldy = ldbl_pack (tests[i].hi, tests[i].lo2); - bool to1 = totalorderl (ldx, ldy); - bool to2 = totalorderl (ldy, ldx); - if (to1 && to2) - printf ("PASS: test %zu\n", i); - else - { - printf ("FAIL: test %zu\n", i); - result = 1; - } - to1 = totalordermagl (ldx, ldy); - to2 = totalordermagl (ldy, ldx); - if (to1 && to2) - printf ("PASS: test %zu (totalordermagl)\n", i); - else - { - printf ("FAIL: test %zu (totalordermagl)\n", i); - result = 1; - } - } - - return result; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/ieee754/ldbl-128ibm/tst-strtold-ldbl-128ibm.c b/sysdeps/ieee754/ldbl-128ibm/tst-strtold-ldbl-128ibm.c deleted file mode 100644 index 1181892165..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/tst-strtold-ldbl-128ibm.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Test for ldbl-128ibm strtold overflow to infinity (bug 14551). - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -static int -test_strtold_value (const char *s, double exp_hi, double exp_lo, int exp_exc, - int exp_errno) -{ - int result = 0; - union { long double ld; double d[2]; } x; - feclearexcept (FE_ALL_EXCEPT); - errno = 0; - x.ld = strtold (s, NULL); - int exc = fetestexcept (FE_ALL_EXCEPT); - int new_errno = errno; - printf ("strtold (\"%s\") returned (%a, %a), exceptions 0x%x, errno %d\n", - s, x.d[0], x.d[1], exc, new_errno); - if (x.d[0] == exp_hi) - printf ("PASS: strtold (\"%s\") high == %a\n", s, exp_hi); - else - { - printf ("FAIL: strtold (\"%s\") high == %a\n", s, exp_hi); - result = 1; - } - if (x.d[1] == exp_lo) - printf ("PASS: strtold (\"%s\") low == %a\n", s, exp_lo); - else - { - printf ("FAIL: strtold (\"%s\") low == %a\n", s, exp_lo); - result = 1; - } - if (exc == exp_exc) - printf ("PASS: strtold (\"%s\") exceptions 0x%x\n", s, exp_exc); - else - { - printf ("FAIL: strtold (\"%s\") exceptions 0x%x\n", s, exp_exc); - result = 1; - } - if (new_errno == exp_errno) - printf ("PASS: strtold (\"%s\") errno %d\n", s, exp_errno); - else - { - printf ("FAIL: strtold (\"%s\") errno %d\n", s, exp_errno); - result = 1; - } - return result; -} - -static int -do_test (void) -{ - int result = 0; - result |= test_strtold_value ("0x1.fffffffffffff8p+1023", INFINITY, 0, - FE_OVERFLOW | FE_INEXACT, ERANGE); - result |= test_strtold_value ("-0x1.fffffffffffff8p+1023", -INFINITY, 0, - FE_OVERFLOW | FE_INEXACT, ERANGE); - result |= test_strtold_value ("0x1.ffffffffffffffp+1023", INFINITY, 0, - FE_OVERFLOW | FE_INEXACT, ERANGE); - result |= test_strtold_value ("-0x1.ffffffffffffffp+1023", -INFINITY, 0, - FE_OVERFLOW | FE_INEXACT, ERANGE); - return result; -} - -#define TEST_FUNCTION do_test () -#include "../../../test-skeleton.c" diff --git a/sysdeps/ieee754/ldbl-128ibm/w_expl_compat.c b/sysdeps/ieee754/ldbl-128ibm/w_expl_compat.c deleted file mode 100644 index c9d44b61dd..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/w_expl_compat.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include -#include - -long double __expl(long double x) /* wrapper exp */ -{ - long double z; - z = __ieee754_expl(x); - if (_LIB_VERSION == _IEEE_) - return z; - if (isfinite(x)) - { - if (!isfinite (z)) - return __kernel_standard_l(x,x,206); /* exp overflow */ - else if (z == 0.0L) - return __kernel_standard_l(x,x,207); /* exp underflow */ - } - return z; -} -hidden_def (__expl) -long_double_symbol (libm, __expl, expl); diff --git a/sysdeps/ieee754/ldbl-128ibm/x2y2m1l.c b/sysdeps/ieee754/ldbl-128ibm/x2y2m1l.c deleted file mode 100644 index 0bdb9a1848..0000000000 --- a/sysdeps/ieee754/ldbl-128ibm/x2y2m1l.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Compute x^2 + y^2 - 1, without large cancellation error. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Calculate X + Y exactly and store the result in *HI + *LO. It is - given that |X| >= |Y| and the values are small enough that no - overflow occurs. */ - -static inline void -add_split (double *hi, double *lo, double x, double y) -{ - /* Apply Dekker's algorithm. */ - *hi = x + y; - *lo = (x - *hi) + y; -} - -/* Compare absolute values of floating-point values pointed to by P - and Q for qsort. */ - -static int -compare (const void *p, const void *q) -{ - double pd = fabs (*(const double *) p); - double qd = fabs (*(const double *) q); - if (pd < qd) - return -1; - else if (pd == qd) - return 0; - else - return 1; -} - -/* Return X^2 + Y^2 - 1, computed without large cancellation error. - It is given that 1 > X >= Y >= epsilon / 2, and that X^2 + Y^2 >= - 0.5. */ - -long double -__x2y2m1l (long double x, long double y) -{ - double vals[13]; - SET_RESTORE_ROUND (FE_TONEAREST); - union ibm_extended_long_double xu, yu; - xu.ld = x; - yu.ld = y; - if (fabs (xu.d[1].d) < 0x1p-500) - xu.d[1].d = 0.0; - if (fabs (yu.d[1].d) < 0x1p-500) - yu.d[1].d = 0.0; - mul_split (&vals[1], &vals[0], xu.d[0].d, xu.d[0].d); - mul_split (&vals[3], &vals[2], xu.d[0].d, xu.d[1].d); - vals[2] *= 2.0; - vals[3] *= 2.0; - mul_split (&vals[5], &vals[4], xu.d[1].d, xu.d[1].d); - mul_split (&vals[7], &vals[6], yu.d[0].d, yu.d[0].d); - mul_split (&vals[9], &vals[8], yu.d[0].d, yu.d[1].d); - vals[8] *= 2.0; - vals[9] *= 2.0; - mul_split (&vals[11], &vals[10], yu.d[1].d, yu.d[1].d); - vals[12] = -1.0; - qsort (vals, 13, sizeof (double), compare); - /* Add up the values so that each element of VALS has absolute value - at most equal to the last set bit of the next nonzero - element. */ - for (size_t i = 0; i <= 11; i++) - { - add_split (&vals[i + 1], &vals[i], vals[i + 1], vals[i]); - qsort (vals + i + 1, 12 - i, sizeof (double), compare); - } - /* Now any error from this addition will be small. */ - long double retval = (long double) vals[12]; - for (size_t i = 11; i != (size_t) -1; i--) - retval += (long double) vals[i]; - return retval; -} diff --git a/sysdeps/ieee754/ldbl-64-128/e_ilogbl.c b/sysdeps/ieee754/ldbl-64-128/e_ilogbl.c deleted file mode 100644 index 75a38e13ce..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/e_ilogbl.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include diff --git a/sysdeps/ieee754/ldbl-64-128/s_asinhl.c b/sysdeps/ieee754/ldbl-64-128/s_asinhl.c deleted file mode 100644 index 4e8a541263..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_asinhl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __asinhl, asinhl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_atanl.c b/sysdeps/ieee754/ldbl-64-128/s_atanl.c deleted file mode 100644 index c23d14aade..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_atanl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __atanl, atanl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_cbrtl.c b/sysdeps/ieee754/ldbl-64-128/s_cbrtl.c deleted file mode 100644 index ace5645277..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_cbrtl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __cbrtl, cbrtl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_ceill.c b/sysdeps/ieee754/ldbl-64-128/s_ceill.c deleted file mode 100644 index a646494f14..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_ceill.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __ceill, ceill); diff --git a/sysdeps/ieee754/ldbl-64-128/s_copysignl.c b/sysdeps/ieee754/ldbl-64-128/s_copysignl.c deleted file mode 100644 index 211e7240ac..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_copysignl.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -#if IS_IN (libm) -long_double_symbol (libm, __copysignl, copysignl); -#else -long_double_symbol (libc, __copysignl, copysignl); -#endif diff --git a/sysdeps/ieee754/ldbl-64-128/s_cosl.c b/sysdeps/ieee754/ldbl-64-128/s_cosl.c deleted file mode 100644 index 6a7e2e3162..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_cosl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __cosl, cosl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_erfl.c b/sysdeps/ieee754/ldbl-64-128/s_erfl.c deleted file mode 100644 index c5f9bb3ac4..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_erfl.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __erfl, erfl); -long_double_symbol (libm, __erfcl, erfcl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_expm1l.c b/sysdeps/ieee754/ldbl-64-128/s_expm1l.c deleted file mode 100644 index 4fb186127f..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_expm1l.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __expm1l, expm1l); diff --git a/sysdeps/ieee754/ldbl-64-128/s_fabsl.c b/sysdeps/ieee754/ldbl-64-128/s_fabsl.c deleted file mode 100644 index 93d81d98bc..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_fabsl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __fabsl, fabsl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_finitel.c b/sysdeps/ieee754/ldbl-64-128/s_finitel.c deleted file mode 100644 index c0862a7485..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_finitel.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#undef hidden_def -#define hidden_def(x) -#define __finitel(arg) ___finitel(arg) -#include -#undef __finitel -hidden_ver (___finitel, __finitel) -_weak_alias (___finitel, ____finitel) -#if IS_IN (libm) -long_double_symbol (libm, ____finitel, finitel); -long_double_symbol (libm, ___finitel, __finitel); -#else -long_double_symbol (libc, ____finitel, finitel); -long_double_symbol (libc, ___finitel, __finitel); -#endif diff --git a/sysdeps/ieee754/ldbl-64-128/s_floorl.c b/sysdeps/ieee754/ldbl-64-128/s_floorl.c deleted file mode 100644 index 953043035e..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_floorl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __floorl, floorl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_fmal.c b/sysdeps/ieee754/ldbl-64-128/s_fmal.c deleted file mode 100644 index 218aa52b35..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_fmal.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __fmal, fmal); diff --git a/sysdeps/ieee754/ldbl-64-128/s_fpclassifyl.c b/sysdeps/ieee754/ldbl-64-128/s_fpclassifyl.c deleted file mode 100644 index a10b6c3a1a..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_fpclassifyl.c +++ /dev/null @@ -1,10 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#define __fpclassifyl ___fpclassifyl -#undef libm_hidden_def -#define libm_hidden_def(a) -#include -#undef __fpclassifyl -long_double_symbol (libm, ___fpclassifyl, __fpclassifyl); -libm_hidden_ver (___fpclassifyl, __fpclassifyl) diff --git a/sysdeps/ieee754/ldbl-64-128/s_frexpl.c b/sysdeps/ieee754/ldbl-64-128/s_frexpl.c deleted file mode 100644 index c7b6aaaaee..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_frexpl.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -#if IS_IN (libm) -long_double_symbol (libm, __frexpl, frexpl); -#else -long_double_symbol (libc, __frexpl, frexpl); -#endif diff --git a/sysdeps/ieee754/ldbl-64-128/s_isinfl.c b/sysdeps/ieee754/ldbl-64-128/s_isinfl.c deleted file mode 100644 index 6dab0e9223..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_isinfl.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#if !IS_IN (libm) -# undef weak_alias -# define weak_alias(n,a) -# undef hidden_def -# define hidden_def(x) -# define __isinfl(arg) ___isinfl(arg) -#endif -#include -#if !IS_IN (libm) -# undef __isinfl -hidden_ver (___isinfl, __isinfl) -_weak_alias (___isinfl, ____isinfl) -long_double_symbol (libc, ____isinfl, isinfl); -long_double_symbol (libc, ___isinfl, __isinfl); -#endif diff --git a/sysdeps/ieee754/ldbl-64-128/s_isnanl.c b/sysdeps/ieee754/ldbl-64-128/s_isnanl.c deleted file mode 100644 index ad5ecc5281..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_isnanl.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#if !IS_IN (libm) -# undef weak_alias -# define weak_alias(n,a) -# undef hidden_def -# define hidden_def(x) -# define __isnanl(arg) ___isnanl(arg) -#endif -#include -#if !IS_IN (libm) -# undef __isnanl -hidden_ver (___isnanl, __isnanl) -_weak_alias (___isnanl, ____isnanl) -long_double_symbol (libc, ____isnanl, isnanl); -long_double_symbol (libc, ___isnanl, __isnanl); -#endif diff --git a/sysdeps/ieee754/ldbl-64-128/s_llrintl.c b/sysdeps/ieee754/ldbl-64-128/s_llrintl.c deleted file mode 100644 index 1515f3abd7..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_llrintl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __llrintl, llrintl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_llroundl.c b/sysdeps/ieee754/ldbl-64-128/s_llroundl.c deleted file mode 100644 index ca35dae491..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_llroundl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __llroundl, llroundl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_log1pl.c b/sysdeps/ieee754/ldbl-64-128/s_log1pl.c deleted file mode 100644 index 11d56bfe9f..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_log1pl.c +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include diff --git a/sysdeps/ieee754/ldbl-64-128/s_logbl.c b/sysdeps/ieee754/ldbl-64-128/s_logbl.c deleted file mode 100644 index 8ba8179feb..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_logbl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __logbl, logbl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_lrintl.c b/sysdeps/ieee754/ldbl-64-128/s_lrintl.c deleted file mode 100644 index 56e69c94f9..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_lrintl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __lrintl, lrintl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_lroundl.c b/sysdeps/ieee754/ldbl-64-128/s_lroundl.c deleted file mode 100644 index d5429e2384..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_lroundl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __lroundl, lroundl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_modfl.c b/sysdeps/ieee754/ldbl-64-128/s_modfl.c deleted file mode 100644 index fa4d3ad82a..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_modfl.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -#if IS_IN (libm) -long_double_symbol (libm, __modfl, modfl); -#else -long_double_symbol (libc, __modfl, modfl); -#endif diff --git a/sysdeps/ieee754/ldbl-64-128/s_nearbyintl.c b/sysdeps/ieee754/ldbl-64-128/s_nearbyintl.c deleted file mode 100644 index a6d0a313fd..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_nearbyintl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __nearbyintl, nearbyintl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_nextafterl.c b/sysdeps/ieee754/ldbl-64-128/s_nextafterl.c deleted file mode 100644 index 64c663eda3..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_nextafterl.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __nextafterl, nextafterl); -long_double_symbol (libm, __nexttowardl, nexttowardl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_nexttoward.c b/sysdeps/ieee754/ldbl-64-128/s_nexttoward.c deleted file mode 100644 index 2968503d2e..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_nexttoward.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __nexttoward, nexttoward); diff --git a/sysdeps/ieee754/ldbl-64-128/s_nexttowardf.c b/sysdeps/ieee754/ldbl-64-128/s_nexttowardf.c deleted file mode 100644 index 64b9c24465..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_nexttowardf.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __nexttowardf, nexttowardf); diff --git a/sysdeps/ieee754/ldbl-64-128/s_remquol.c b/sysdeps/ieee754/ldbl-64-128/s_remquol.c deleted file mode 100644 index 16f0eb16a4..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_remquol.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __remquol, remquol); diff --git a/sysdeps/ieee754/ldbl-64-128/s_rintl.c b/sysdeps/ieee754/ldbl-64-128/s_rintl.c deleted file mode 100644 index 19af9bbdcb..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_rintl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __rintl, rintl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_roundl.c b/sysdeps/ieee754/ldbl-64-128/s_roundl.c deleted file mode 100644 index 3fa99d6f2a..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_roundl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __roundl, roundl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_scalblnl.c b/sysdeps/ieee754/ldbl-64-128/s_scalblnl.c deleted file mode 100644 index 97181d29b9..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_scalblnl.c +++ /dev/null @@ -1,4 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include diff --git a/sysdeps/ieee754/ldbl-64-128/s_scalbnl.c b/sysdeps/ieee754/ldbl-64-128/s_scalbnl.c deleted file mode 100644 index 15af1b2849..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_scalbnl.c +++ /dev/null @@ -1,4 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include diff --git a/sysdeps/ieee754/ldbl-64-128/s_signbitl.c b/sysdeps/ieee754/ldbl-64-128/s_signbitl.c deleted file mode 100644 index 850db7386a..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_signbitl.c +++ /dev/null @@ -1,11 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#define __signbitl(arg) ___signbitl(arg) -#include -#undef __signbitl -#if IS_IN (libm) -long_double_symbol (libm, ___signbitl, __signbitl); -#else -long_double_symbol (libc, ___signbitl, __signbitl); -#endif diff --git a/sysdeps/ieee754/ldbl-64-128/s_sincosl.c b/sysdeps/ieee754/ldbl-64-128/s_sincosl.c deleted file mode 100644 index ce0d4e2887..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_sincosl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __sincosl, sincosl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_sinl.c b/sysdeps/ieee754/ldbl-64-128/s_sinl.c deleted file mode 100644 index ebc20affdb..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_sinl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __sinl, sinl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_tanhl.c b/sysdeps/ieee754/ldbl-64-128/s_tanhl.c deleted file mode 100644 index ede93930cd..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_tanhl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __tanhl, tanhl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_tanl.c b/sysdeps/ieee754/ldbl-64-128/s_tanl.c deleted file mode 100644 index 6e635dfdc9..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_tanl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __tanl, tanl); diff --git a/sysdeps/ieee754/ldbl-64-128/s_truncl.c b/sysdeps/ieee754/ldbl-64-128/s_truncl.c deleted file mode 100644 index 6311479d01..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/s_truncl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __truncl, truncl); diff --git a/sysdeps/ieee754/ldbl-64-128/strtold_l.c b/sysdeps/ieee754/ldbl-64-128/strtold_l.c deleted file mode 100644 index 37034cb254..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/strtold_l.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* The actual implementation for all floating point sizes is in strtod.c. - These macros tell it to produce the `long double' version, `strtold'. */ - -#define FLOAT long double -#define FLT LDBL -#ifdef USE_WIDE_CHAR -extern long double ____new_wcstold_l (const wchar_t *, wchar_t **, __locale_t); -# define STRTOF __new_wcstold_l -# define __STRTOF ____new_wcstold_l -# define ____STRTOF_INTERNAL ____wcstold_l_internal -# define STRTOF_NAN __wcstold_nan -#else -extern long double ____new_strtold_l (const char *, char **, __locale_t); -# define STRTOF __new_strtold_l -# define __STRTOF ____new_strtold_l -# define ____STRTOF_INTERNAL ____strtold_l_internal -# define STRTOF_NAN __strtold_nan -#endif -extern __typeof (__STRTOF) STRTOF; -libc_hidden_proto (__STRTOF) -libc_hidden_proto (STRTOF) -#define MPN2FLOAT __mpn_construct_long_double -#define FLOAT_HUGE_VAL HUGE_VALL - -#include - -#ifdef __LONG_DOUBLE_MATH_OPTIONAL -# include -# ifdef USE_WIDE_CHAR -weak_alias (____new_wcstold_l, ___new_wcstold_l); -long_double_symbol (libc, ___new_wcstold_l, wcstold_l); -long_double_symbol (libc, ____new_wcstold_l, __wcstold_l); -# else -weak_alias (____new_strtold_l, ___new_strtold_l); -long_double_symbol (libc, ___new_strtold_l, strtold_l); -long_double_symbol (libc, ____new_strtold_l, __strtold_l); -# endif -#endif diff --git a/sysdeps/ieee754/ldbl-64-128/w_expl_compat.c b/sysdeps/ieee754/ldbl-64-128/w_expl_compat.c deleted file mode 100644 index 37c153e2a4..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/w_expl_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __expl, expl); diff --git a/sysdeps/ieee754/ldbl-64-128/w_scalblnl.c b/sysdeps/ieee754/ldbl-64-128/w_scalblnl.c deleted file mode 100644 index fef2507cd5..0000000000 --- a/sysdeps/ieee754/ldbl-64-128/w_scalblnl.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Wrapper for __scalblnl handles setting errno. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define declare_mgen_alias(from, to) -#include -#include -#if IS_IN (libm) -long_double_symbol (libm, __w_scalblnl, scalblnl); -#else -long_double_symbol (libc, __w_scalblnl, scalblnl); -#endif diff --git a/sysdeps/ieee754/ldbl-96/Makefile b/sysdeps/ieee754/ldbl-96/Makefile deleted file mode 100644 index 279342acdf..0000000000 --- a/sysdeps/ieee754/ldbl-96/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Makefile for sysdeps/ieee754/ldbl-96. -# Copyright (C) 2016-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifeq ($(subdir),math) -tests += test-canonical-ldbl-96 test-totalorderl-ldbl-96 -endif diff --git a/sysdeps/ieee754/ldbl-96/bits/iscanonical.h b/sysdeps/ieee754/ldbl-96/bits/iscanonical.h deleted file mode 100644 index 2c8b786183..0000000000 --- a/sysdeps/ieee754/ldbl-96/bits/iscanonical.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Define iscanonical macro. ldbl-96 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -extern int __iscanonicall (long double __x) - __THROW __attribute__ ((__const__)); -#define __iscanonicalf(x) ((void) (__typeof (x)) (x), 1) -#define __iscanonical(x) ((void) (__typeof (x)) (x), 1) - -/* Return nonzero value if X is canonical. In IEEE interchange binary - formats, all values are canonical, but the argument must still be - converted to its semantic type for any exceptions arising from the - conversion, before being discarded; in extended precision, there - are encodings that are not consistently handled as corresponding to - any particular value of the type, and we return 0 for those. */ -#define iscanonical(x) __MATH_TG ((x), __iscanonical, (x)) diff --git a/sysdeps/ieee754/ldbl-96/bits/long-double.h b/sysdeps/ieee754/ldbl-96/bits/long-double.h deleted file mode 100644 index bb06df077f..0000000000 --- a/sysdeps/ieee754/ldbl-96/bits/long-double.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Properties of long double type. ldbl-96 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* long double is distinct from double, so there is nothing to - define here. */ diff --git a/sysdeps/ieee754/ldbl-96/e_acoshl.c b/sysdeps/ieee754/ldbl-96/e_acoshl.c deleted file mode 100644 index cf9a6db0ef..0000000000 --- a/sysdeps/ieee754/ldbl-96/e_acoshl.c +++ /dev/null @@ -1,61 +0,0 @@ -/* e_acoshl.c -- long double version of e_acosh.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_acoshl(x) - * Method : - * Based on - * acoshl(x) = logl [ x + sqrtl(x*x-1) ] - * we have - * acoshl(x) := logl(x)+ln2, if x is large; else - * acoshl(x) := logl(2x-1/(sqrtl(x*x-1)+x)) if x>2; else - * acoshl(x) := log1pl(t+sqrtl(2.0*t+t*t)); where t=x-1. - * - * Special cases: - * acoshl(x) is NaN with signal if x<1. - * acoshl(NaN) is NaN without signal. - */ - -#include -#include - -static const long double -one = 1.0, -ln2 = 6.931471805599453094287e-01L; /* 0x3FFE, 0xB17217F7, 0xD1CF79AC */ - -long double -__ieee754_acoshl(long double x) -{ - long double t; - u_int32_t se,i0,i1; - GET_LDOUBLE_WORDS(se,i0,i1,x); - if(se<0x3fff || se & 0x8000) { /* x < 1 */ - return (x-x)/(x-x); - } else if(se >=0x401d) { /* x > 2**30 */ - if(se >=0x7fff) { /* x is inf of NaN */ - return x+x; - } else - return __ieee754_logl(x)+ln2; /* acoshl(huge)=logl(2x) */ - } else if(((se-0x3fff)|(i0^0x80000000)|i1)==0) { - return 0.0; /* acosh(1) = 0 */ - } else if (se > 0x4000) { /* 2**28 > x > 2 */ - t=x*x; - return __ieee754_logl(2.0*x-one/(x+__ieee754_sqrtl(t-one))); - } else { /* 1 - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_asin(x) - * Method : - * Since asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ... - * we approximate asin(x) on [0,0.5] by - * asin(x) = x + x*x^2*R(x^2) - * - * For x in [0.5,1] - * asin(x) = pi/2-2*asin(sqrt((1-x)/2)) - * Let y = (1-x), z = y/2, s := sqrt(z), and pio2_hi+pio2_lo=pi/2; - * then for x>0.98 - * asin(x) = pi/2 - 2*(s+s*z*R(z)) - * = pio2_hi - (2*(s+s*z*R(z)) - pio2_lo) - * For x<=0.98, let pio4_hi = pio2_hi/2, then - * f = hi part of s; - * c = sqrt(z) - f = (z-f*f)/(s+f) ...f+c=sqrt(z) - * and - * asin(x) = pi/2 - 2*(s+s*z*R(z)) - * = pio4_hi+(pio4-2s)-(2s*z*R(z)-pio2_lo) - * = pio4_hi+(pio4-2f)-(2s*z*R(z)-(pio2_lo+2c)) - * - * Special cases: - * if x is NaN, return x itself; - * if |x|>1, return NaN with invalid signal. - * - */ - - -#include -#include -#include - -static const long double - one = 1.0L, - huge = 1.0e+4932L, - pio2_hi = 0x1.921fb54442d1846ap+0L, /* pi/2 rounded to nearest to 64 - bits. */ - pio2_lo = -0x7.6733ae8fe47c65d8p-68L, /* pi/2 - pio2_hi rounded to - nearest to 64 bits. */ - pio4_hi = 0xc.90fdaa22168c235p-4L, /* pi/4 rounded to nearest to 64 - bits. */ - - /* coefficient for R(x^2) */ - - /* asin(x) = x + x^3 pS(x^2) / qS(x^2) - 0 <= x <= 0.5 - peak relative error 1.9e-21 */ - pS0 = -1.008714657938491626019651170502036851607E1L, - pS1 = 2.331460313214179572063441834101394865259E1L, - pS2 = -1.863169762159016144159202387315381830227E1L, - pS3 = 5.930399351579141771077475766877674661747E0L, - pS4 = -6.121291917696920296944056882932695185001E-1L, - pS5 = 3.776934006243367487161248678019350338383E-3L, - - qS0 = -6.052287947630949712886794360635592886517E1L, - qS1 = 1.671229145571899593737596543114258558503E2L, - qS2 = -1.707840117062586426144397688315411324388E2L, - qS3 = 7.870295154902110425886636075950077640623E1L, - qS4 = -1.568433562487314651121702982333303458814E1L; - /* 1.000000000000000000000000000000000000000E0 */ - -long double -__ieee754_asinl (long double x) -{ - long double t, w, p, q, c, r, s; - int32_t ix; - u_int32_t se, i0, i1, k; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - ix = se & 0x7fff; - ix = (ix << 16) | (i0 >> 16); - if (ix >= 0x3fff8000) - { /* |x|>= 1 */ - if (ix == 0x3fff8000 && ((i0 - 0x80000000) | i1) == 0) - /* asin(1)=+-pi/2 with inexact */ - return x * pio2_hi + x * pio2_lo; - return (x - x) / (x - x); /* asin(|x|>1) is NaN */ - } - else if (ix < 0x3ffe8000) - { /* |x|<0.5 */ - if (ix < 0x3fde8000) - { /* if |x| < 2**-33 */ - math_check_force_underflow (x); - if (huge + x > one) - return x; /* return x with inexact if x!=0 */ - } - else - { - t = x * x; - p = - t * (pS0 + - t * (pS1 + t * (pS2 + t * (pS3 + t * (pS4 + t * pS5))))); - q = qS0 + t * (qS1 + t * (qS2 + t * (qS3 + t * (qS4 + t)))); - w = p / q; - return x + x * w; - } - } - /* 1> |x|>= 0.5 */ - w = one - fabsl (x); - t = w * 0.5; - p = t * (pS0 + t * (pS1 + t * (pS2 + t * (pS3 + t * (pS4 + t * pS5))))); - q = qS0 + t * (qS1 + t * (qS2 + t * (qS3 + t * (qS4 + t)))); - s = __ieee754_sqrtl (t); - if (ix >= 0x3ffef999) - { /* if |x| > 0.975 */ - w = p / q; - t = pio2_hi - (2.0 * (s + s * w) - pio2_lo); - } - else - { - GET_LDOUBLE_WORDS (k, i0, i1, s); - i1 = 0; - SET_LDOUBLE_WORDS (w,k,i0,i1); - c = (t - w * w) / (s + w); - r = p / q; - p = 2.0 * s * r - (pio2_lo - 2.0 * c); - q = pio4_hi - 2.0 * w; - t = pio4_hi - (p - q); - } - if ((se & 0x8000) == 0) - return t; - else - return -t; -} -strong_alias (__ieee754_asinl, __asinl_finite) diff --git a/sysdeps/ieee754/ldbl-96/e_atanhl.c b/sysdeps/ieee754/ldbl-96/e_atanhl.c deleted file mode 100644 index b99a83c6ee..0000000000 --- a/sysdeps/ieee754/ldbl-96/e_atanhl.c +++ /dev/null @@ -1,69 +0,0 @@ -/* s_atanhl.c -- long double version of s_atan.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_atanhl(x) - * Method : - * 1.Reduced x to positive by atanh(-x) = -atanh(x) - * 2.For x>=0.5 - * 1 2x x - * atanhl(x) = --- * log(1 + -------) = 0.5 * log1p(2 * --------) - * 2 1 - x 1 - x - * - * For x<0.5 - * atanhl(x) = 0.5*log1pl(2x+2x*x/(1-x)) - * - * Special cases: - * atanhl(x) is NaN if |x| > 1 with signal; - * atanhl(NaN) is that NaN with no signal; - * atanhl(+-1) is +-INF with signal. - * - */ - -#include -#include -#include - -static const long double one = 1.0, huge = 1e4900L; - -static const long double zero = 0.0; - -long double -__ieee754_atanhl(long double x) -{ - long double t; - int32_t ix; - u_int32_t se,i0,i1; - GET_LDOUBLE_WORDS(se,i0,i1,x); - ix = se&0x7fff; - if ((ix+((((i0&0x7fffffff)|i1)|(-((i0&0x7fffffff)|i1)))>>31))>0x3fff) - /* |x|>1 */ - return (x-x)/(x-x); - if(ix==0x3fff) - return x/zero; - if(ix<0x3fdf) { - math_force_eval(huge+x); - math_check_force_underflow (x); - return x; /* x<2**-32 */ - } - SET_LDOUBLE_EXP(x,ix); - if(ix<0x3ffe) { /* x < 0.5 */ - t = x+x; - t = 0.5*__log1pl(t+t*x/(one-x)); - } else - t = 0.5*__log1pl((x+x)/(one-x)); - if(se<=0x7fff) return t; else return -t; -} -strong_alias (__ieee754_atanhl, __atanhl_finite) diff --git a/sysdeps/ieee754/ldbl-96/e_coshl.c b/sysdeps/ieee754/ldbl-96/e_coshl.c deleted file mode 100644 index dd22cae363..0000000000 --- a/sysdeps/ieee754/ldbl-96/e_coshl.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: e_cosh.c,v 1.7 1995/05/10 20:44:58 jtc Exp $"; -#endif - -/* __ieee754_coshl(x) - * Method : - * mathematically coshl(x) if defined to be (exp(x)+exp(-x))/2 - * 1. Replace x by |x| (coshl(x) = coshl(-x)). - * 2. - * [ exp(x) - 1 ]^2 - * 0 <= x <= ln2/2 : coshl(x) := 1 + ------------------- - * 2*exp(x) - * - * exp(x) + 1/exp(x) - * ln2/2 <= x <= 22 : coshl(x) := ------------------- - * 2 - * 22 <= x <= lnovft : coshl(x) := expl(x)/2 - * lnovft <= x <= ln2ovft: coshl(x) := expl(x/2)/2 * expl(x/2) - * ln2ovft < x : coshl(x) := huge*huge (overflow) - * - * Special cases: - * coshl(x) is |x| if x is +INF, -INF, or NaN. - * only coshl(0)=1 is exact for finite x. - */ - -#include -#include - -static const long double one = 1.0, half=0.5, huge = 1.0e4900L; - -long double -__ieee754_coshl (long double x) -{ - long double t,w; - int32_t ex; - u_int32_t mx,lx; - - /* High word of |x|. */ - GET_LDOUBLE_WORDS(ex,mx,lx,x); - ex &= 0x7fff; - - /* |x| in [0,22] */ - if (ex < 0x4003 || (ex == 0x4003 && mx < 0xb0000000u)) { - /* |x| in [0,0.5*ln2], return 1+expm1l(|x|)^2/(2*expl(|x|)) */ - if(ex < 0x3ffd || (ex == 0x3ffd && mx < 0xb17217f7u)) { - if (ex<0x3fbc) return one; /* cosh(tiny) = 1 */ - t = __expm1l(fabsl(x)); - w = one+t; - return one+(t*t)/(w+w); - } - - /* |x| in [0.5*ln2,22], return (exp(|x|)+1/exp(|x|)/2; */ - t = __ieee754_expl(fabsl(x)); - return half*t+half/t; - } - - /* |x| in [22, ln(maxdouble)] return half*exp(|x|) */ - if (ex < 0x400c || (ex == 0x400c && mx < 0xb1700000u)) - return half*__ieee754_expl(fabsl(x)); - - /* |x| in [log(maxdouble), log(2*maxdouble)) */ - if (ex == 0x400c && (mx < 0xb174ddc0u - || (mx == 0xb174ddc0u && lx < 0x31aec0ebu))) - { - w = __ieee754_expl(half*fabsl(x)); - t = half*w; - return t*w; - } - - /* x is INF or NaN */ - if(ex==0x7fff) return x*x; - - /* |x| >= log(2*maxdouble), cosh(x) overflow */ - return huge*huge; -} -strong_alias (__ieee754_coshl, __coshl_finite) diff --git a/sysdeps/ieee754/ldbl-96/e_gammal_r.c b/sysdeps/ieee754/ldbl-96/e_gammal_r.c deleted file mode 100644 index 7e42cc1161..0000000000 --- a/sysdeps/ieee754/ldbl-96/e_gammal_r.c +++ /dev/null @@ -1,210 +0,0 @@ -/* Implementation of gamma function according to ISO C. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) inside exp in Stirling's - approximation to gamma function. */ - -static const long double gamma_coeff[] = - { - 0x1.5555555555555556p-4L, - -0xb.60b60b60b60b60bp-12L, - 0x3.4034034034034034p-12L, - -0x2.7027027027027028p-12L, - 0x3.72a3c5631fe46aep-12L, - -0x7.daac36664f1f208p-12L, - 0x1.a41a41a41a41a41ap-8L, - -0x7.90a1b2c3d4e5f708p-8L, - }; - -#define NCOEFF (sizeof (gamma_coeff) / sizeof (gamma_coeff[0])) - -/* Return gamma (X), for positive X less than 1766, in the form R * - 2^(*EXP2_ADJ), where R is the return value and *EXP2_ADJ is set to - avoid overflow or underflow in intermediate calculations. */ - -static long double -gammal_positive (long double x, int *exp2_adj) -{ - int local_signgam; - if (x < 0.5L) - { - *exp2_adj = 0; - return __ieee754_expl (__ieee754_lgammal_r (x + 1, &local_signgam)) / x; - } - else if (x <= 1.5L) - { - *exp2_adj = 0; - return __ieee754_expl (__ieee754_lgammal_r (x, &local_signgam)); - } - else if (x < 7.5L) - { - /* Adjust into the range for using exp (lgamma). */ - *exp2_adj = 0; - long double n = __ceill (x - 1.5L); - long double x_adj = x - n; - long double eps; - long double prod = __gamma_productl (x_adj, 0, n, &eps); - return (__ieee754_expl (__ieee754_lgammal_r (x_adj, &local_signgam)) - * prod * (1.0L + eps)); - } - else - { - long double eps = 0; - long double x_eps = 0; - long double x_adj = x; - long double prod = 1; - if (x < 13.0L) - { - /* Adjust into the range for applying Stirling's - approximation. */ - long double n = __ceill (13.0L - x); - x_adj = x + n; - x_eps = (x - (x_adj - n)); - prod = __gamma_productl (x_adj - n, x_eps, n, &eps); - } - /* The result is now gamma (X_ADJ + X_EPS) / (PROD * (1 + EPS)). - Compute gamma (X_ADJ + X_EPS) using Stirling's approximation, - starting by computing pow (X_ADJ, X_ADJ) with a power of 2 - factored out. */ - long double exp_adj = -eps; - long double x_adj_int = __roundl (x_adj); - long double x_adj_frac = x_adj - x_adj_int; - int x_adj_log2; - long double x_adj_mant = __frexpl (x_adj, &x_adj_log2); - if (x_adj_mant < M_SQRT1_2l) - { - x_adj_log2--; - x_adj_mant *= 2.0L; - } - *exp2_adj = x_adj_log2 * (int) x_adj_int; - long double ret = (__ieee754_powl (x_adj_mant, x_adj) - * __ieee754_exp2l (x_adj_log2 * x_adj_frac) - * __ieee754_expl (-x_adj) - * __ieee754_sqrtl (2 * M_PIl / x_adj) - / prod); - exp_adj += x_eps * __ieee754_logl (x_adj); - long double bsum = gamma_coeff[NCOEFF - 1]; - long double x_adj2 = x_adj * x_adj; - for (size_t i = 1; i <= NCOEFF - 1; i++) - bsum = bsum / x_adj2 + gamma_coeff[NCOEFF - 1 - i]; - exp_adj += bsum / x_adj; - return ret + ret * __expm1l (exp_adj); - } -} - -long double -__ieee754_gammal_r (long double x, int *signgamp) -{ - u_int32_t es, hx, lx; - long double ret; - - GET_LDOUBLE_WORDS (es, hx, lx, x); - - if (__glibc_unlikely (((es & 0x7fff) | hx | lx) == 0)) - { - /* Return value for x == 0 is Inf with divide by zero exception. */ - *signgamp = 0; - return 1.0 / x; - } - if (__glibc_unlikely (es == 0xffffffff && ((hx & 0x7fffffff) | lx) == 0)) - { - /* x == -Inf. According to ISO this is NaN. */ - *signgamp = 0; - return x - x; - } - if (__glibc_unlikely ((es & 0x7fff) == 0x7fff)) - { - /* Positive infinity (return positive infinity) or NaN (return - NaN). */ - *signgamp = 0; - return x + x; - } - if (__builtin_expect ((es & 0x8000) != 0, 0) && __rintl (x) == x) - { - /* Return value for integer x < 0 is NaN with invalid exception. */ - *signgamp = 0; - return (x - x) / (x - x); - } - - if (x >= 1756.0L) - { - /* Overflow. */ - *signgamp = 0; - return LDBL_MAX * LDBL_MAX; - } - else - { - SET_RESTORE_ROUNDL (FE_TONEAREST); - if (x > 0.0L) - { - *signgamp = 0; - int exp2_adj; - ret = gammal_positive (x, &exp2_adj); - ret = __scalbnl (ret, exp2_adj); - } - else if (x >= -LDBL_EPSILON / 4.0L) - { - *signgamp = 0; - ret = 1.0L / x; - } - else - { - long double tx = __truncl (x); - *signgamp = (tx == 2.0L * __truncl (tx / 2.0L)) ? -1 : 1; - if (x <= -1766.0L) - /* Underflow. */ - ret = LDBL_MIN * LDBL_MIN; - else - { - long double frac = tx - x; - if (frac > 0.5L) - frac = 1.0L - frac; - long double sinpix = (frac <= 0.25L - ? __sinl (M_PIl * frac) - : __cosl (M_PIl * (0.5L - frac))); - int exp2_adj; - ret = M_PIl / (-x * sinpix - * gammal_positive (-x, &exp2_adj)); - ret = __scalbnl (ret, -exp2_adj); - math_check_force_underflow_nonneg (ret); - } - } - } - if (isinf (ret) && x != 0) - { - if (*signgamp < 0) - return -(-__copysignl (LDBL_MAX, ret) * LDBL_MAX); - else - return __copysignl (LDBL_MAX, ret) * LDBL_MAX; - } - else if (ret == 0) - { - if (*signgamp < 0) - return -(-__copysignl (LDBL_MIN, ret) * LDBL_MIN); - else - return __copysignl (LDBL_MIN, ret) * LDBL_MIN; - } - else - return ret; -} -strong_alias (__ieee754_gammal_r, __gammal_r_finite) diff --git a/sysdeps/ieee754/ldbl-96/e_hypotl.c b/sysdeps/ieee754/ldbl-96/e_hypotl.c deleted file mode 100644 index 6b55b6d8ee..0000000000 --- a/sysdeps/ieee754/ldbl-96/e_hypotl.c +++ /dev/null @@ -1,142 +0,0 @@ -/* e_hypotl.c -- long double version of e_hypot.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* __ieee754_hypotl(x,y) - * - * Method : - * If (assume round-to-nearest) z=x*x+y*y - * has error less than sqrt(2)/2 ulp, than - * sqrt(z) has error less than 1 ulp (exercise). - * - * So, compute sqrt(x*x+y*y) with some care as - * follows to get the error below 1 ulp: - * - * Assume x>y>0; - * (if possible, set rounding to round-to-nearest) - * 1. if x > 2y use - * x1*x1+(y*y+(x2*(x+x1))) for x*x+y*y - * where x1 = x with lower 32 bits cleared, x2 = x-x1; else - * 2. if x <= 2y use - * t1*y1+((x-y)*(x-y)+(t1*y2+t2*y)) - * where t1 = 2x with lower 32 bits cleared, t2 = 2x-t1, - * y1= y with lower 32 bits chopped, y2 = y-y1. - * - * NOTE: scaling may be necessary if some argument is too - * large or too tiny - * - * Special cases: - * hypot(x,y) is INF if x or y is +INF or -INF; else - * hypot(x,y) is NAN if x or y is NAN. - * - * Accuracy: - * hypot(x,y) returns sqrt(x^2+y^2) with error less - * than 1 ulps (units in the last place) - */ - -#include -#include - -long double __ieee754_hypotl(long double x, long double y) -{ - long double a,b,t1,t2,y1,y2,w; - u_int32_t j,k,ea,eb; - - GET_LDOUBLE_EXP(ea,x); - ea &= 0x7fff; - GET_LDOUBLE_EXP(eb,y); - eb &= 0x7fff; - if(eb > ea) {a=y;b=x;j=ea; ea=eb;eb=j;} else {a=x;b=y;} - SET_LDOUBLE_EXP(a,ea); /* a <- |a| */ - SET_LDOUBLE_EXP(b,eb); /* b <- |b| */ - if((ea-eb)>0x46) {return a+b;} /* x/y > 2**70 */ - k=0; - if(__builtin_expect(ea > 0x5f3f,0)) { /* a>2**8000 */ - if(ea == 0x7fff) { /* Inf or NaN */ - u_int32_t exp __attribute__ ((unused)); - u_int32_t high,low; - w = a+b; /* for sNaN */ - if (issignaling (a) || issignaling (b)) - return w; - GET_LDOUBLE_WORDS(exp,high,low,a); - if(((high&0x7fffffff)|low)==0) w = a; - GET_LDOUBLE_WORDS(exp,high,low,b); - if(((eb^0x7fff)|(high&0x7fffffff)|low)==0) w = b; - return w; - } - /* scale a and b by 2**-9600 */ - ea -= 0x2580; eb -= 0x2580; k += 9600; - SET_LDOUBLE_EXP(a,ea); - SET_LDOUBLE_EXP(b,eb); - } - if(__builtin_expect(eb < 0x20bf, 0)) { /* b < 2**-8000 */ - if(eb == 0) { /* subnormal b or 0 */ - u_int32_t exp __attribute__ ((unused)); - u_int32_t high,low; - GET_LDOUBLE_WORDS(exp,high,low,b); - if((high|low)==0) return a; - SET_LDOUBLE_WORDS(t1, 0x7ffd, 0x80000000, 0); /* t1=2^16382 */ - b *= t1; - a *= t1; - k -= 16382; - GET_LDOUBLE_EXP (ea, a); - GET_LDOUBLE_EXP (eb, b); - if (eb > ea) - { - t1 = a; - a = b; - b = t1; - j = ea; - ea = eb; - eb = j; - } - } else { /* scale a and b by 2^9600 */ - ea += 0x2580; /* a *= 2^9600 */ - eb += 0x2580; /* b *= 2^9600 */ - k -= 9600; - SET_LDOUBLE_EXP(a,ea); - SET_LDOUBLE_EXP(b,eb); - } - } - /* medium size a and b */ - w = a-b; - if (w>b) { - u_int32_t high; - GET_LDOUBLE_MSW(high,a); - SET_LDOUBLE_WORDS(t1,ea,high,0); - t2 = a-t1; - w = __ieee754_sqrtl(t1*t1-(b*(-b)-t2*(a+t1))); - } else { - u_int32_t high; - GET_LDOUBLE_MSW(high,b); - a = a+a; - SET_LDOUBLE_WORDS(y1,eb,high,0); - y2 = b - y1; - GET_LDOUBLE_MSW(high,a); - SET_LDOUBLE_WORDS(t1,ea+1,high,0); - t2 = a - t1; - w = __ieee754_sqrtl(t1*y1-(w*(-w)-(t1*y2+t2*b))); - } - if(k!=0) { - u_int32_t exp; - t1 = 1.0; - GET_LDOUBLE_EXP(exp,t1); - SET_LDOUBLE_EXP(t1,exp+k); - w *= t1; - math_check_force_underflow_nonneg (w); - return w; - } else return w; -} -strong_alias (__ieee754_hypotl, __hypotl_finite) diff --git a/sysdeps/ieee754/ldbl-96/e_j0l.c b/sysdeps/ieee754/ldbl-96/e_j0l.c deleted file mode 100644 index a536054cde..0000000000 --- a/sysdeps/ieee754/ldbl-96/e_j0l.c +++ /dev/null @@ -1,531 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Long double expansions are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_j0(x), __ieee754_y0(x) - * Bessel function of the first and second kinds of order zero. - * Method -- j0(x): - * 1. For tiny x, we use j0(x) = 1 - x^2/4 + x^4/64 - ... - * 2. Reduce x to |x| since j0(x)=j0(-x), and - * for x in (0,2) - * j0(x) = 1 - z/4 + z^2*R0/S0, where z = x*x; - * for x in (2,inf) - * j0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x0)-q0(x)*sin(x0)) - * where x0 = x-pi/4. It is better to compute sin(x0),cos(x0) - * as follow: - * cos(x0) = cos(x)cos(pi/4)+sin(x)sin(pi/4) - * = 1/sqrt(2) * (cos(x) + sin(x)) - * sin(x0) = sin(x)cos(pi/4)-cos(x)sin(pi/4) - * = 1/sqrt(2) * (sin(x) - cos(x)) - * (To avoid cancellation, use - * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) - * to compute the worse one.) - * - * 3 Special cases - * j0(nan)= nan - * j0(0) = 1 - * j0(inf) = 0 - * - * Method -- y0(x): - * 1. For x<2. - * Since - * y0(x) = 2/pi*(j0(x)*(ln(x/2)+Euler) + x^2/4 - ...) - * therefore y0(x)-2/pi*j0(x)*ln(x) is an even function. - * We use the following function to approximate y0, - * y0(x) = U(z)/V(z) + (2/pi)*(j0(x)*ln(x)), z= x^2 - * - * Note: For tiny x, U/V = u0 and j0(x)~1, hence - * y0(tiny) = u0 + (2/pi)*ln(tiny), (choose tiny<2**-27) - * 2. For x>=2. - * y0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x0)+q0(x)*sin(x0)) - * where x0 = x-pi/4. It is better to compute sin(x0),cos(x0) - * by the method mentioned above. - * 3. Special cases: y0(0)=-inf, y0(x<0)=NaN, y0(inf)=0. - */ - -#include -#include - -static long double pzero (long double), qzero (long double); - -static const long double - huge = 1e4930L, - one = 1.0L, - invsqrtpi = 5.6418958354775628694807945156077258584405e-1L, - tpi = 6.3661977236758134307553505349005744813784e-1L, - - /* J0(x) = 1 - x^2 / 4 + x^4 R0(x^2) / S0(x^2) - 0 <= x <= 2 - peak relative error 1.41e-22 */ - R[5] = { - 4.287176872744686992880841716723478740566E7L, - -6.652058897474241627570911531740907185772E5L, - 7.011848381719789863458364584613651091175E3L, - -3.168040850193372408702135490809516253693E1L, - 6.030778552661102450545394348845599300939E-2L, -}, - - S[4] = { - 2.743793198556599677955266341699130654342E9L, - 3.364330079384816249840086842058954076201E7L, - 1.924119649412510777584684927494642526573E5L, - 6.239282256012734914211715620088714856494E2L, - /* 1.000000000000000000000000000000000000000E0L,*/ -}; - -static const long double zero = 0.0; - -long double -__ieee754_j0l (long double x) -{ - long double z, s, c, ss, cc, r, u, v; - int32_t ix; - u_int32_t se; - - GET_LDOUBLE_EXP (se, x); - ix = se & 0x7fff; - if (__glibc_unlikely (ix >= 0x7fff)) - return one / (x * x); - x = fabsl (x); - if (ix >= 0x4000) /* |x| >= 2.0 */ - { - __sincosl (x, &s, &c); - ss = s - c; - cc = s + c; - if (ix < 0x7ffe) - { /* make sure x+x not overflow */ - z = -__cosl (x + x); - if ((s * c) < zero) - cc = z / ss; - else - ss = z / cc; - } - /* - * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x) - * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x) - */ - if (__glibc_unlikely (ix > 0x4080)) /* 2^129 */ - z = (invsqrtpi * cc) / __ieee754_sqrtl (x); - else - { - u = pzero (x); - v = qzero (x); - z = invsqrtpi * (u * cc - v * ss) / __ieee754_sqrtl (x); - } - return z; - } - if (__glibc_unlikely (ix < 0x3fef)) /* |x| < 2**-16 */ - { - /* raise inexact if x != 0 */ - math_force_eval (huge + x); - if (ix < 0x3fde) /* |x| < 2^-33 */ - return one; - else - return one - 0.25 * x * x; - } - z = x * x; - r = z * (R[0] + z * (R[1] + z * (R[2] + z * (R[3] + z * R[4])))); - s = S[0] + z * (S[1] + z * (S[2] + z * (S[3] + z))); - if (ix < 0x3fff) - { /* |x| < 1.00 */ - return (one - 0.25 * z + z * (r / s)); - } - else - { - u = 0.5 * x; - return ((one + u) * (one - u) + z * (r / s)); - } -} -strong_alias (__ieee754_j0l, __j0l_finite) - - -/* y0(x) = 2/pi ln(x) J0(x) + U(x^2)/V(x^2) - 0 < x <= 2 - peak relative error 1.7e-21 */ -static const long double -U[6] = { - -1.054912306975785573710813351985351350861E10L, - 2.520192609749295139432773849576523636127E10L, - -1.856426071075602001239955451329519093395E9L, - 4.079209129698891442683267466276785956784E7L, - -3.440684087134286610316661166492641011539E5L, - 1.005524356159130626192144663414848383774E3L, -}; -static const long double -V[5] = { - 1.429337283720789610137291929228082613676E11L, - 2.492593075325119157558811370165695013002E9L, - 2.186077620785925464237324417623665138376E7L, - 1.238407896366385175196515057064384929222E5L, - 4.693924035211032457494368947123233101664E2L, - /* 1.000000000000000000000000000000000000000E0L */ -}; - -long double -__ieee754_y0l (long double x) -{ - long double z, s, c, ss, cc, u, v; - int32_t ix; - u_int32_t se, i0, i1; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - ix = se & 0x7fff; - /* Y0(NaN) is NaN, y0(-inf) is Nan, y0(inf) is 0 */ - if (__glibc_unlikely (se & 0x8000)) - return zero / (zero * x); - if (__glibc_unlikely (ix >= 0x7fff)) - return one / (x + x * x); - if (__glibc_unlikely ((i0 | i1) == 0)) - return -HUGE_VALL + x; /* -inf and overflow exception. */ - if (ix >= 0x4000) - { /* |x| >= 2.0 */ - - /* y0(x) = sqrt(2/(pi*x))*(p0(x)*sin(x0)+q0(x)*cos(x0)) - * where x0 = x-pi/4 - * Better formula: - * cos(x0) = cos(x)cos(pi/4)+sin(x)sin(pi/4) - * = 1/sqrt(2) * (sin(x) + cos(x)) - * sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4) - * = 1/sqrt(2) * (sin(x) - cos(x)) - * To avoid cancellation, use - * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) - * to compute the worse one. - */ - __sincosl (x, &s, &c); - ss = s - c; - cc = s + c; - /* - * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x) - * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x) - */ - if (ix < 0x7ffe) - { /* make sure x+x not overflow */ - z = -__cosl (x + x); - if ((s * c) < zero) - cc = z / ss; - else - ss = z / cc; - } - if (__glibc_unlikely (ix > 0x4080)) /* 1e39 */ - z = (invsqrtpi * ss) / __ieee754_sqrtl (x); - else - { - u = pzero (x); - v = qzero (x); - z = invsqrtpi * (u * ss + v * cc) / __ieee754_sqrtl (x); - } - return z; - } - if (__glibc_unlikely (ix <= 0x3fde)) /* x < 2^-33 */ - { - z = -7.380429510868722527629822444004602747322E-2L - + tpi * __ieee754_logl (x); - return z; - } - z = x * x; - u = U[0] + z * (U[1] + z * (U[2] + z * (U[3] + z * (U[4] + z * U[5])))); - v = V[0] + z * (V[1] + z * (V[2] + z * (V[3] + z * (V[4] + z)))); - return (u / v + tpi * (__ieee754_j0l (x) * __ieee754_logl (x))); -} -strong_alias (__ieee754_y0l, __y0l_finite) - -/* The asymptotic expansions of pzero is - * 1 - 9/128 s^2 + 11025/98304 s^4 - ..., where s = 1/x. - * For x >= 2, We approximate pzero by - * pzero(x) = 1 + s^2 R(s^2) / S(s^2) - */ -static const long double pR8[7] = { - /* 8 <= x <= inf - Peak relative error 4.62 */ - -4.094398895124198016684337960227780260127E-9L, - -8.929643669432412640061946338524096893089E-7L, - -6.281267456906136703868258380673108109256E-5L, - -1.736902783620362966354814353559382399665E-3L, - -1.831506216290984960532230842266070146847E-2L, - -5.827178869301452892963280214772398135283E-2L, - -2.087563267939546435460286895807046616992E-2L, -}; -static const long double pS8[6] = { - 5.823145095287749230197031108839653988393E-8L, - 1.279281986035060320477759999428992730280E-5L, - 9.132668954726626677174825517150228961304E-4L, - 2.606019379433060585351880541545146252534E-2L, - 2.956262215119520464228467583516287175244E-1L, - 1.149498145388256448535563278632697465675E0L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - -static const long double pR5[7] = { - /* 4.54541015625 <= x <= 8 - Peak relative error 6.51E-22 */ - -2.041226787870240954326915847282179737987E-7L, - -2.255373879859413325570636768224534428156E-5L, - -7.957485746440825353553537274569102059990E-4L, - -1.093205102486816696940149222095559439425E-2L, - -5.657957849316537477657603125260701114646E-2L, - -8.641175552716402616180994954177818461588E-2L, - -1.354654710097134007437166939230619726157E-2L, -}; -static const long double pS5[6] = { - 2.903078099681108697057258628212823545290E-6L, - 3.253948449946735405975737677123673867321E-4L, - 1.181269751723085006534147920481582279979E-2L, - 1.719212057790143888884745200257619469363E-1L, - 1.006306498779212467670654535430694221924E0L, - 2.069568808688074324555596301126375951502E0L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - -static const long double pR3[7] = { - /* 2.85711669921875 <= x <= 4.54541015625 - peak relative error 5.25e-21 */ - -5.755732156848468345557663552240816066802E-6L, - -3.703675625855715998827966962258113034767E-4L, - -7.390893350679637611641350096842846433236E-3L, - -5.571922144490038765024591058478043873253E-2L, - -1.531290690378157869291151002472627396088E-1L, - -1.193350853469302941921647487062620011042E-1L, - -8.567802507331578894302991505331963782905E-3L, -}; -static const long double pS3[6] = { - 8.185931139070086158103309281525036712419E-5L, - 5.398016943778891093520574483111255476787E-3L, - 1.130589193590489566669164765853409621081E-1L, - 9.358652328786413274673192987670237145071E-1L, - 3.091711512598349056276917907005098085273E0L, - 3.594602474737921977972586821673124231111E0L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - -static const long double pR2[7] = { - /* 2 <= x <= 2.85711669921875 - peak relative error 2.64e-21 */ - -1.219525235804532014243621104365384992623E-4L, - -4.838597135805578919601088680065298763049E-3L, - -5.732223181683569266223306197751407418301E-2L, - -2.472947430526425064982909699406646503758E-1L, - -3.753373645974077960207588073975976327695E-1L, - -1.556241316844728872406672349347137975495E-1L, - -5.355423239526452209595316733635519506958E-3L, -}; -static const long double pS2[6] = { - 1.734442793664291412489066256138894953823E-3L, - 7.158111826468626405416300895617986926008E-2L, - 9.153839713992138340197264669867993552641E-1L, - 4.539209519433011393525841956702487797582E0L, - 8.868932430625331650266067101752626253644E0L, - 6.067161890196324146320763844772857713502E0L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - -static long double -pzero (long double x) -{ - const long double *p, *q; - long double z, r, s; - int32_t ix; - u_int32_t se, i0, i1; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - ix = se & 0x7fff; - /* ix >= 0x4000 for all calls to this function. */ - if (ix >= 0x4002) - { - p = pR8; - q = pS8; - } /* x >= 8 */ - else - { - i1 = (ix << 16) | (i0 >> 16); - if (i1 >= 0x40019174) /* x >= 4.54541015625 */ - { - p = pR5; - q = pS5; - } - else if (i1 >= 0x4000b6db) /* x >= 2.85711669921875 */ - { - p = pR3; - q = pS3; - } - else /* x >= 2 */ - { - p = pR2; - q = pS2; - } - } - z = one / (x * x); - r = - p[0] + z * (p[1] + - z * (p[2] + z * (p[3] + z * (p[4] + z * (p[5] + z * p[6]))))); - s = - q[0] + z * (q[1] + z * (q[2] + z * (q[3] + z * (q[4] + z * (q[5] + z))))); - return (one + z * r / s); -} - - -/* For x >= 8, the asymptotic expansions of qzero is - * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. - * We approximate qzero by - * qzero(x) = s*(-.125 + R(s^2) / S(s^2)) - */ -static const long double qR8[7] = { - /* 8 <= x <= inf - peak relative error 2.23e-21 */ - 3.001267180483191397885272640777189348008E-10L, - 8.693186311430836495238494289942413810121E-8L, - 8.496875536711266039522937037850596580686E-6L, - 3.482702869915288984296602449543513958409E-4L, - 6.036378380706107692863811938221290851352E-3L, - 3.881970028476167836382607922840452192636E-2L, - 6.132191514516237371140841765561219149638E-2L, -}; -static const long double qS8[7] = { - 4.097730123753051126914971174076227600212E-9L, - 1.199615869122646109596153392152131139306E-6L, - 1.196337580514532207793107149088168946451E-4L, - 5.099074440112045094341500497767181211104E-3L, - 9.577420799632372483249761659674764460583E-2L, - 7.385243015344292267061953461563695918646E-1L, - 1.917266424391428937962682301561699055943E0L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - -static const long double qR5[7] = { - /* 4.54541015625 <= x <= 8 - peak relative error 1.03e-21 */ - 3.406256556438974327309660241748106352137E-8L, - 4.855492710552705436943630087976121021980E-6L, - 2.301011739663737780613356017352912281980E-4L, - 4.500470249273129953870234803596619899226E-3L, - 3.651376459725695502726921248173637054828E-2L, - 1.071578819056574524416060138514508609805E-1L, - 7.458950172851611673015774675225656063757E-2L, -}; -static const long double qS5[7] = { - 4.650675622764245276538207123618745150785E-7L, - 6.773573292521412265840260065635377164455E-5L, - 3.340711249876192721980146877577806687714E-3L, - 7.036218046856839214741678375536970613501E-2L, - 6.569599559163872573895171876511377891143E-1L, - 2.557525022583599204591036677199171155186E0L, - 3.457237396120935674982927714210361269133E0L, - /* 1.000000000000000000000000000000000000000E0L,*/ -}; - -static const long double qR3[7] = { - /* 2.85711669921875 <= x <= 4.54541015625 - peak relative error 5.24e-21 */ - 1.749459596550816915639829017724249805242E-6L, - 1.446252487543383683621692672078376929437E-4L, - 3.842084087362410664036704812125005761859E-3L, - 4.066369994699462547896426554180954233581E-2L, - 1.721093619117980251295234795188992722447E-1L, - 2.538595333972857367655146949093055405072E-1L, - 8.560591367256769038905328596020118877936E-2L, -}; -static const long double qS3[7] = { - 2.388596091707517488372313710647510488042E-5L, - 2.048679968058758616370095132104333998147E-3L, - 5.824663198201417760864458765259945181513E-2L, - 6.953906394693328750931617748038994763958E-1L, - 3.638186936390881159685868764832961092476E0L, - 7.900169524705757837298990558459547842607E0L, - 5.992718532451026507552820701127504582907E0L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - -static const long double qR2[7] = { - /* 2 <= x <= 2.85711669921875 - peak relative error 1.58e-21 */ - 6.306524405520048545426928892276696949540E-5L, - 3.209606155709930950935893996591576624054E-3L, - 5.027828775702022732912321378866797059604E-2L, - 3.012705561838718956481911477587757845163E-1L, - 6.960544893905752937420734884995688523815E-1L, - 5.431871999743531634887107835372232030655E-1L, - 9.447736151202905471899259026430157211949E-2L, -}; -static const long double qS2[7] = { - 8.610579901936193494609755345106129102676E-4L, - 4.649054352710496997203474853066665869047E-2L, - 8.104282924459837407218042945106320388339E-1L, - 5.807730930825886427048038146088828206852E0L, - 1.795310145936848873627710102199881642939E1L, - 2.281313316875375733663657188888110605044E1L, - 1.011242067883822301487154844458322200143E1L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - -static long double -qzero (long double x) -{ - const long double *p, *q; - long double s, r, z; - int32_t ix; - u_int32_t se, i0, i1; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - ix = se & 0x7fff; - /* ix >= 0x4000 for all calls to this function. */ - if (ix >= 0x4002) /* x >= 8 */ - { - p = qR8; - q = qS8; - } - else - { - i1 = (ix << 16) | (i0 >> 16); - if (i1 >= 0x40019174) /* x >= 4.54541015625 */ - { - p = qR5; - q = qS5; - } - else if (i1 >= 0x4000b6db) /* x >= 2.85711669921875 */ - { - p = qR3; - q = qS3; - } - else /* x >= 2 */ - { - p = qR2; - q = qS2; - } - } - z = one / (x * x); - r = - p[0] + z * (p[1] + - z * (p[2] + z * (p[3] + z * (p[4] + z * (p[5] + z * p[6]))))); - s = - q[0] + z * (q[1] + - z * (q[2] + - z * (q[3] + z * (q[4] + z * (q[5] + z * (q[6] + z)))))); - return (-.125 + z * r / s) / x; -} diff --git a/sysdeps/ieee754/ldbl-96/e_j1l.c b/sysdeps/ieee754/ldbl-96/e_j1l.c deleted file mode 100644 index e8a7349cf4..0000000000 --- a/sysdeps/ieee754/ldbl-96/e_j1l.c +++ /dev/null @@ -1,550 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Long double expansions are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_j1(x), __ieee754_y1(x) - * Bessel function of the first and second kinds of order zero. - * Method -- j1(x): - * 1. For tiny x, we use j1(x) = x/2 - x^3/16 + x^5/384 - ... - * 2. Reduce x to |x| since j1(x)=-j1(-x), and - * for x in (0,2) - * j1(x) = x/2 + x*z*R0/S0, where z = x*x; - * for x in (2,inf) - * j1(x) = sqrt(2/(pi*x))*(p1(x)*cos(x1)-q1(x)*sin(x1)) - * y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x1)+q1(x)*cos(x1)) - * where x1 = x-3*pi/4. It is better to compute sin(x1),cos(x1) - * as follow: - * cos(x1) = cos(x)cos(3pi/4)+sin(x)sin(3pi/4) - * = 1/sqrt(2) * (sin(x) - cos(x)) - * sin(x1) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4) - * = -1/sqrt(2) * (sin(x) + cos(x)) - * (To avoid cancellation, use - * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) - * to compute the worse one.) - * - * 3 Special cases - * j1(nan)= nan - * j1(0) = 0 - * j1(inf) = 0 - * - * Method -- y1(x): - * 1. screen out x<=0 cases: y1(0)=-inf, y1(x<0)=NaN - * 2. For x<2. - * Since - * y1(x) = 2/pi*(j1(x)*(ln(x/2)+Euler)-1/x-x/2+5/64*x^3-...) - * therefore y1(x)-2/pi*j1(x)*ln(x)-1/x is an odd function. - * We use the following function to approximate y1, - * y1(x) = x*U(z)/V(z) + (2/pi)*(j1(x)*ln(x)-1/x), z= x^2 - * Note: For tiny x, 1/x dominate y1 and hence - * y1(tiny) = -2/pi/tiny - * 3. For x>=2. - * y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x1)+q1(x)*cos(x1)) - * where x1 = x-3*pi/4. It is better to compute sin(x1),cos(x1) - * by method mentioned above. - */ - -#include -#include -#include -#include - -static long double pone (long double), qone (long double); - -static const long double - huge = 1e4930L, - one = 1.0L, - invsqrtpi = 5.6418958354775628694807945156077258584405e-1L, - tpi = 6.3661977236758134307553505349005744813784e-1L, - - /* J1(x) = .5 x + x x^2 R(x^2) / S(x^2) - 0 <= x <= 2 - Peak relative error 4.5e-21 */ -R[5] = { - -9.647406112428107954753770469290757756814E7L, - 2.686288565865230690166454005558203955564E6L, - -3.689682683905671185891885948692283776081E4L, - 2.195031194229176602851429567792676658146E2L, - -5.124499848728030297902028238597308971319E-1L, -}, - - S[4] = -{ - 1.543584977988497274437410333029029035089E9L, - 2.133542369567701244002565983150952549520E7L, - 1.394077011298227346483732156167414670520E5L, - 5.252401789085732428842871556112108446506E2L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - -static const long double zero = 0.0; - - -long double -__ieee754_j1l (long double x) -{ - long double z, c, r, s, ss, cc, u, v, y; - int32_t ix; - u_int32_t se; - - GET_LDOUBLE_EXP (se, x); - ix = se & 0x7fff; - if (__glibc_unlikely (ix >= 0x7fff)) - return one / x; - y = fabsl (x); - if (ix >= 0x4000) - { /* |x| >= 2.0 */ - __sincosl (y, &s, &c); - ss = -s - c; - cc = s - c; - if (ix < 0x7ffe) - { /* make sure y+y not overflow */ - z = __cosl (y + y); - if ((s * c) > zero) - cc = z / ss; - else - ss = z / cc; - } - /* - * j1(x) = 1/sqrt(pi) * (P(1,x)*cc - Q(1,x)*ss) / sqrt(x) - * y1(x) = 1/sqrt(pi) * (P(1,x)*ss + Q(1,x)*cc) / sqrt(x) - */ - if (__glibc_unlikely (ix > 0x4080)) - z = (invsqrtpi * cc) / __ieee754_sqrtl (y); - else - { - u = pone (y); - v = qone (y); - z = invsqrtpi * (u * cc - v * ss) / __ieee754_sqrtl (y); - } - if (se & 0x8000) - return -z; - else - return z; - } - if (__glibc_unlikely (ix < 0x3fde)) /* |x| < 2^-33 */ - { - if (huge + x > one) /* inexact if x!=0 necessary */ - { - long double ret = 0.5 * x; - math_check_force_underflow (ret); - if (ret == 0 && x != 0) - __set_errno (ERANGE); - return ret; - } - } - z = x * x; - r = z * (R[0] + z * (R[1]+ z * (R[2] + z * (R[3] + z * R[4])))); - s = S[0] + z * (S[1] + z * (S[2] + z * (S[3] + z))); - r *= x; - return (x * 0.5 + r / s); -} -strong_alias (__ieee754_j1l, __j1l_finite) - - -/* Y1(x) = 2/pi * (log(x) * j1(x) - 1/x) + x R(x^2) - 0 <= x <= 2 - Peak relative error 2.3e-23 */ -static const long double U0[6] = { - -5.908077186259914699178903164682444848615E10L, - 1.546219327181478013495975514375773435962E10L, - -6.438303331169223128870035584107053228235E8L, - 9.708540045657182600665968063824819371216E6L, - -6.138043997084355564619377183564196265471E4L, - 1.418503228220927321096904291501161800215E2L, -}; -static const long double V0[5] = { - 3.013447341682896694781964795373783679861E11L, - 4.669546565705981649470005402243136124523E9L, - 3.595056091631351184676890179233695857260E7L, - 1.761554028569108722903944659933744317994E5L, - 5.668480419646516568875555062047234534863E2L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - - -long double -__ieee754_y1l (long double x) -{ - long double z, s, c, ss, cc, u, v; - int32_t ix; - u_int32_t se, i0, i1; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - ix = se & 0x7fff; - /* if Y1(NaN) is NaN, Y1(-inf) is NaN, Y1(inf) is 0 */ - if (__glibc_unlikely (se & 0x8000)) - return zero / (zero * x); - if (__glibc_unlikely (ix >= 0x7fff)) - return one / (x + x * x); - if (__glibc_unlikely ((i0 | i1) == 0)) - return -HUGE_VALL + x; /* -inf and overflow exception. */ - if (ix >= 0x4000) - { /* |x| >= 2.0 */ - __sincosl (x, &s, &c); - ss = -s - c; - cc = s - c; - if (ix < 0x7ffe) - { /* make sure x+x not overflow */ - z = __cosl (x + x); - if ((s * c) > zero) - cc = z / ss; - else - ss = z / cc; - } - /* y1(x) = sqrt(2/(pi*x))*(p1(x)*sin(x0)+q1(x)*cos(x0)) - * where x0 = x-3pi/4 - * Better formula: - * cos(x0) = cos(x)cos(3pi/4)+sin(x)sin(3pi/4) - * = 1/sqrt(2) * (sin(x) - cos(x)) - * sin(x0) = sin(x)cos(3pi/4)-cos(x)sin(3pi/4) - * = -1/sqrt(2) * (cos(x) + sin(x)) - * To avoid cancellation, use - * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) - * to compute the worse one. - */ - if (__glibc_unlikely (ix > 0x4080)) - z = (invsqrtpi * ss) / __ieee754_sqrtl (x); - else - { - u = pone (x); - v = qone (x); - z = invsqrtpi * (u * ss + v * cc) / __ieee754_sqrtl (x); - } - return z; - } - if (__glibc_unlikely (ix <= 0x3fbe)) - { /* x < 2**-65 */ - z = -tpi / x; - if (isinf (z)) - __set_errno (ERANGE); - return z; - } - z = x * x; - u = U0[0] + z * (U0[1] + z * (U0[2] + z * (U0[3] + z * (U0[4] + z * U0[5])))); - v = V0[0] + z * (V0[1] + z * (V0[2] + z * (V0[3] + z * (V0[4] + z)))); - return (x * (u / v) + - tpi * (__ieee754_j1l (x) * __ieee754_logl (x) - one / x)); -} -strong_alias (__ieee754_y1l, __y1l_finite) - - -/* For x >= 8, the asymptotic expansions of pone is - * 1 + 15/128 s^2 - 4725/2^15 s^4 - ..., where s = 1/x. - * We approximate pone by - * pone(x) = 1 + (R/S) - */ - -/* J1(x) cosX + Y1(x) sinX = sqrt( 2/(pi x)) P1(x) - P1(x) = 1 + z^2 R(z^2), z=1/x - 8 <= x <= inf (0 <= z <= 0.125) - Peak relative error 5.2e-22 */ - -static const long double pr8[7] = { - 8.402048819032978959298664869941375143163E-9L, - 1.813743245316438056192649247507255996036E-6L, - 1.260704554112906152344932388588243836276E-4L, - 3.439294839869103014614229832700986965110E-3L, - 3.576910849712074184504430254290179501209E-2L, - 1.131111483254318243139953003461511308672E-1L, - 4.480715825681029711521286449131671880953E-2L, -}; -static const long double ps8[6] = { - 7.169748325574809484893888315707824924354E-8L, - 1.556549720596672576431813934184403614817E-5L, - 1.094540125521337139209062035774174565882E-3L, - 3.060978962596642798560894375281428805840E-2L, - 3.374146536087205506032643098619414507024E-1L, - 1.253830208588979001991901126393231302559E0L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - -/* J1(x) cosX + Y1(x) sinX = sqrt( 2/(pi x)) P1(x) - P1(x) = 1 + z^2 R(z^2), z=1/x - 4.54541015625 <= x <= 8 - Peak relative error 7.7e-22 */ -static const long double pr5[7] = { - 4.318486887948814529950980396300969247900E-7L, - 4.715341880798817230333360497524173929315E-5L, - 1.642719430496086618401091544113220340094E-3L, - 2.228688005300803935928733750456396149104E-2L, - 1.142773760804150921573259605730018327162E-1L, - 1.755576530055079253910829652698703791957E-1L, - 3.218803858282095929559165965353784980613E-2L, -}; -static const long double ps5[6] = { - 3.685108812227721334719884358034713967557E-6L, - 4.069102509511177498808856515005792027639E-4L, - 1.449728676496155025507893322405597039816E-2L, - 2.058869213229520086582695850441194363103E-1L, - 1.164890985918737148968424972072751066553E0L, - 2.274776933457009446573027260373361586841E0L, - /* 1.000000000000000000000000000000000000000E0L,*/ -}; - -/* J1(x) cosX + Y1(x) sinX = sqrt( 2/(pi x)) P1(x) - P1(x) = 1 + z^2 R(z^2), z=1/x - 2.85711669921875 <= x <= 4.54541015625 - Peak relative error 6.5e-21 */ -static const long double pr3[7] = { - 1.265251153957366716825382654273326407972E-5L, - 8.031057269201324914127680782288352574567E-4L, - 1.581648121115028333661412169396282881035E-2L, - 1.179534658087796321928362981518645033967E-1L, - 3.227936912780465219246440724502790727866E-1L, - 2.559223765418386621748404398017602935764E-1L, - 2.277136933287817911091370397134882441046E-2L, -}; -static const long double ps3[6] = { - 1.079681071833391818661952793568345057548E-4L, - 6.986017817100477138417481463810841529026E-3L, - 1.429403701146942509913198539100230540503E-1L, - 1.148392024337075609460312658938700765074E0L, - 3.643663015091248720208251490291968840882E0L, - 3.990702269032018282145100741746633960737E0L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - -/* J1(x) cosX + Y1(x) sinX = sqrt( 2/(pi x)) P1(x) - P1(x) = 1 + z^2 R(z^2), z=1/x - 2 <= x <= 2.85711669921875 - Peak relative error 3.5e-21 */ -static const long double pr2[7] = { - 2.795623248568412225239401141338714516445E-4L, - 1.092578168441856711925254839815430061135E-2L, - 1.278024620468953761154963591853679640560E-1L, - 5.469680473691500673112904286228351988583E-1L, - 8.313769490922351300461498619045639016059E-1L, - 3.544176317308370086415403567097130611468E-1L, - 1.604142674802373041247957048801599740644E-2L, -}; -static const long double ps2[6] = { - 2.385605161555183386205027000675875235980E-3L, - 9.616778294482695283928617708206967248579E-2L, - 1.195215570959693572089824415393951258510E0L, - 5.718412857897054829999458736064922974662E0L, - 1.065626298505499086386584642761602177568E1L, - 6.809140730053382188468983548092322151791E0L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - - -static long double -pone (long double x) -{ - const long double *p, *q; - long double z, r, s; - int32_t ix; - u_int32_t se, i0, i1; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - ix = se & 0x7fff; - /* ix >= 0x4000 for all calls to this function. */ - if (ix >= 0x4002) /* x >= 8 */ - { - p = pr8; - q = ps8; - } - else - { - i1 = (ix << 16) | (i0 >> 16); - if (i1 >= 0x40019174) /* x >= 4.54541015625 */ - { - p = pr5; - q = ps5; - } - else if (i1 >= 0x4000b6db) /* x >= 2.85711669921875 */ - { - p = pr3; - q = ps3; - } - else /* x >= 2 */ - { - p = pr2; - q = ps2; - } - } - z = one / (x * x); - r = p[0] + z * (p[1] + - z * (p[2] + z * (p[3] + z * (p[4] + z * (p[5] + z * p[6]))))); - s = q[0] + z * (q[1] + z * (q[2] + z * (q[3] + z * (q[4] + z * (q[5] + z))))); - return one + z * r / s; -} - - -/* For x >= 8, the asymptotic expansions of qone is - * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. - * We approximate pone by - * qone(x) = s*(0.375 + (R/S)) - */ - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = z(.375 + z^2 R(z^2)), z=1/x - 8 <= x <= inf - Peak relative error 8.3e-22 */ - -static const long double qr8[7] = { - -5.691925079044209246015366919809404457380E-10L, - -1.632587664706999307871963065396218379137E-7L, - -1.577424682764651970003637263552027114600E-5L, - -6.377627959241053914770158336842725291713E-4L, - -1.087408516779972735197277149494929568768E-2L, - -6.854943629378084419631926076882330494217E-2L, - -1.055448290469180032312893377152490183203E-1L, -}; -static const long double qs8[7] = { - 5.550982172325019811119223916998393907513E-9L, - 1.607188366646736068460131091130644192244E-6L, - 1.580792530091386496626494138334505893599E-4L, - 6.617859900815747303032860443855006056595E-3L, - 1.212840547336984859952597488863037659161E-1L, - 9.017885953937234900458186716154005541075E-1L, - 2.201114489712243262000939120146436167178E0L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = z(.375 + z^2 R(z^2)), z=1/x - 4.54541015625 <= x <= 8 - Peak relative error 4.1e-22 */ -static const long double qr5[7] = { - -6.719134139179190546324213696633564965983E-8L, - -9.467871458774950479909851595678622044140E-6L, - -4.429341875348286176950914275723051452838E-4L, - -8.539898021757342531563866270278505014487E-3L, - -6.818691805848737010422337101409276287170E-2L, - -1.964432669771684034858848142418228214855E-1L, - -1.333896496989238600119596538299938520726E-1L, -}; -static const long double qs5[7] = { - 6.552755584474634766937589285426911075101E-7L, - 9.410814032118155978663509073200494000589E-5L, - 4.561677087286518359461609153655021253238E-3L, - 9.397742096177905170800336715661091535805E-2L, - 8.518538116671013902180962914473967738771E-1L, - 3.177729183645800174212539541058292579009E0L, - 4.006745668510308096259753538973038902990E0L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = z(.375 + z^2 R(z^2)), z=1/x - 2.85711669921875 <= x <= 4.54541015625 - Peak relative error 2.2e-21 */ -static const long double qr3[7] = { - -3.618746299358445926506719188614570588404E-6L, - -2.951146018465419674063882650970344502798E-4L, - -7.728518171262562194043409753656506795258E-3L, - -8.058010968753999435006488158237984014883E-2L, - -3.356232856677966691703904770937143483472E-1L, - -4.858192581793118040782557808823460276452E-1L, - -1.592399251246473643510898335746432479373E-1L, -}; -static const long double qs3[7] = { - 3.529139957987837084554591421329876744262E-5L, - 2.973602667215766676998703687065066180115E-3L, - 8.273534546240864308494062287908662592100E-2L, - 9.613359842126507198241321110649974032726E-1L, - 4.853923697093974370118387947065402707519E0L, - 1.002671608961669247462020977417828796933E1L, - 7.028927383922483728931327850683151410267E0L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - -/* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x), - Q1(x) = z(.375 + z^2 R(z^2)), z=1/x - 2 <= x <= 2.85711669921875 - Peak relative error 6.9e-22 */ -static const long double qr2[7] = { - -1.372751603025230017220666013816502528318E-4L, - -6.879190253347766576229143006767218972834E-3L, - -1.061253572090925414598304855316280077828E-1L, - -6.262164224345471241219408329354943337214E-1L, - -1.423149636514768476376254324731437473915E0L, - -1.087955310491078933531734062917489870754E0L, - -1.826821119773182847861406108689273719137E-1L, -}; -static const long double qs2[7] = { - 1.338768933634451601814048220627185324007E-3L, - 7.071099998918497559736318523932241901810E-2L, - 1.200511429784048632105295629933382142221E0L, - 8.327301713640367079030141077172031825276E0L, - 2.468479301872299311658145549931764426840E1L, - 2.961179686096262083509383820557051621644E1L, - 1.201402313144305153005639494661767354977E1L, - /* 1.000000000000000000000000000000000000000E0L, */ -}; - - -static long double -qone (long double x) -{ - const long double *p, *q; - static long double s, r, z; - int32_t ix; - u_int32_t se, i0, i1; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - ix = se & 0x7fff; - /* ix >= 0x4000 for all calls to this function. */ - if (ix >= 0x4002) /* x >= 8 */ - { - p = qr8; - q = qs8; - } - else - { - i1 = (ix << 16) | (i0 >> 16); - if (i1 >= 0x40019174) /* x >= 4.54541015625 */ - { - p = qr5; - q = qs5; - } - else if (i1 >= 0x4000b6db) /* x >= 2.85711669921875 */ - { - p = qr3; - q = qs3; - } - else /* x >= 2 */ - { - p = qr2; - q = qs2; - } - } - z = one / (x * x); - r = - p[0] + z * (p[1] + - z * (p[2] + z * (p[3] + z * (p[4] + z * (p[5] + z * p[6]))))); - s = - q[0] + z * (q[1] + - z * (q[2] + - z * (q[3] + z * (q[4] + z * (q[5] + z * (q[6] + z)))))); - return (.375 + z * r / s) / x; -} diff --git a/sysdeps/ieee754/ldbl-96/e_jnl.c b/sysdeps/ieee754/ldbl-96/e_jnl.c deleted file mode 100644 index 92f96921a7..0000000000 --- a/sysdeps/ieee754/ldbl-96/e_jnl.c +++ /dev/null @@ -1,404 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Modifications for long double are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* - * __ieee754_jn(n, x), __ieee754_yn(n, x) - * floating point Bessel's function of the 1st and 2nd kind - * of order n - * - * Special cases: - * y0(0)=y1(0)=yn(n,0) = -inf with overflow signal; - * y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal. - * Note 2. About jn(n,x), yn(n,x) - * For n=0, j0(x) is called, - * for n=1, j1(x) is called, - * for nx, a continued fraction approximation to - * j(n,x)/j(n-1,x) is evaluated and then backward - * recursion is used starting from a supposed value - * for j(n,x). The resulting value of j(0,x) is - * compared with the actual value to correct the - * supposed value of j(n,x). - * - * yn(n,x) is similar in all respects, except - * that forward recursion is used for all - * values of n>1. - * - */ - -#include -#include -#include -#include - -static const long double - invsqrtpi = 5.64189583547756286948079e-1L, two = 2.0e0L, one = 1.0e0L; - -static const long double zero = 0.0L; - -long double -__ieee754_jnl (int n, long double x) -{ - u_int32_t se, i0, i1; - int32_t i, ix, sgn; - long double a, b, temp, di, ret; - long double z, w; - - /* J(-n,x) = (-1)^n * J(n, x), J(n, -x) = (-1)^n * J(n, x) - * Thus, J(-n,x) = J(n,-x) - */ - - GET_LDOUBLE_WORDS (se, i0, i1, x); - ix = se & 0x7fff; - - /* if J(n,NaN) is NaN */ - if (__glibc_unlikely ((ix == 0x7fff) && ((i0 & 0x7fffffff) != 0))) - return x + x; - if (n < 0) - { - n = -n; - x = -x; - se ^= 0x8000; - } - if (n == 0) - return (__ieee754_j0l (x)); - if (n == 1) - return (__ieee754_j1l (x)); - sgn = (n & 1) & (se >> 15); /* even n -- 0, odd n -- sign(x) */ - x = fabsl (x); - { - SET_RESTORE_ROUNDL (FE_TONEAREST); - if (__glibc_unlikely ((ix | i0 | i1) == 0 || ix >= 0x7fff)) - /* if x is 0 or inf */ - return sgn == 1 ? -zero : zero; - else if ((long double) n <= x) - { - /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ - if (ix >= 0x412D) - { /* x > 2**302 */ - - /* ??? This might be a futile gesture. - If x exceeds X_TLOSS anyway, the wrapper function - will set the result to zero. */ - - /* (x >> n**2) - * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Let s=sin(x), c=cos(x), - * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then - * - * n sin(xn)*sqt2 cos(xn)*sqt2 - * ---------------------------------- - * 0 s-c c+s - * 1 -s-c -c+s - * 2 -s+c -c-s - * 3 s+c c-s - */ - long double s; - long double c; - __sincosl (x, &s, &c); - switch (n & 3) - { - case 0: - temp = c + s; - break; - case 1: - temp = -c + s; - break; - case 2: - temp = -c - s; - break; - case 3: - temp = c - s; - break; - } - b = invsqrtpi * temp / __ieee754_sqrtl (x); - } - else - { - a = __ieee754_j0l (x); - b = __ieee754_j1l (x); - for (i = 1; i < n; i++) - { - temp = b; - b = b * ((long double) (i + i) / x) - a; /* avoid underflow */ - a = temp; - } - } - } - else - { - if (ix < 0x3fde) - { /* x < 2**-33 */ - /* x is tiny, return the first Taylor expansion of J(n,x) - * J(n,x) = 1/n!*(x/2)^n - ... - */ - if (n >= 400) /* underflow, result < 10^-4952 */ - b = zero; - else - { - temp = x * 0.5; - b = temp; - for (a = one, i = 2; i <= n; i++) - { - a *= (long double) i; /* a = n! */ - b *= temp; /* b = (x/2)^n */ - } - b = b / a; - } - } - else - { - /* use backward recurrence */ - /* x x^2 x^2 - * J(n,x)/J(n-1,x) = ---- ------ ------ ..... - * 2n - 2(n+1) - 2(n+2) - * - * 1 1 1 - * (for large x) = ---- ------ ------ ..... - * 2n 2(n+1) 2(n+2) - * -- - ------ - ------ - - * x x x - * - * Let w = 2n/x and h=2/x, then the above quotient - * is equal to the continued fraction: - * 1 - * = ----------------------- - * 1 - * w - ----------------- - * 1 - * w+h - --------- - * w+2h - ... - * - * To determine how many terms needed, let - * Q(0) = w, Q(1) = w(w+h) - 1, - * Q(k) = (w+k*h)*Q(k-1) - Q(k-2), - * When Q(k) > 1e4 good for single - * When Q(k) > 1e9 good for double - * When Q(k) > 1e17 good for quadruple - */ - /* determine k */ - long double t, v; - long double q0, q1, h, tmp; - int32_t k, m; - w = (n + n) / (long double) x; - h = 2.0L / (long double) x; - q0 = w; - z = w + h; - q1 = w * z - 1.0L; - k = 1; - while (q1 < 1.0e11L) - { - k += 1; - z += h; - tmp = z * q1 - q0; - q0 = q1; - q1 = tmp; - } - m = n + n; - for (t = zero, i = 2 * (n + k); i >= m; i -= 2) - t = one / (i / x - t); - a = t; - b = one; - /* estimate log((2/x)^n*n!) = n*log(2/x)+n*ln(n) - * Hence, if n*(log(2n/x)) > ... - * single 8.8722839355e+01 - * double 7.09782712893383973096e+02 - * long double 1.1356523406294143949491931077970765006170e+04 - * then recurrent value may overflow and the result is - * likely underflow to zero - */ - tmp = n; - v = two / x; - tmp = tmp * __ieee754_logl (fabsl (v * tmp)); - - if (tmp < 1.1356523406294143949491931077970765006170e+04L) - { - for (i = n - 1, di = (long double) (i + i); i > 0; i--) - { - temp = b; - b *= di; - b = b / x - a; - a = temp; - di -= two; - } - } - else - { - for (i = n - 1, di = (long double) (i + i); i > 0; i--) - { - temp = b; - b *= di; - b = b / x - a; - a = temp; - di -= two; - /* scale b to avoid spurious overflow */ - if (b > 1e100L) - { - a /= b; - t /= b; - b = one; - } - } - } - /* j0() and j1() suffer enormous loss of precision at and - * near zero; however, we know that their zero points never - * coincide, so just choose the one further away from zero. - */ - z = __ieee754_j0l (x); - w = __ieee754_j1l (x); - if (fabsl (z) >= fabsl (w)) - b = (t * z / b); - else - b = (t * w / a); - } - } - if (sgn == 1) - ret = -b; - else - ret = b; - } - if (ret == 0) - { - ret = __copysignl (LDBL_MIN, ret) * LDBL_MIN; - __set_errno (ERANGE); - } - else - math_check_force_underflow (ret); - return ret; -} -strong_alias (__ieee754_jnl, __jnl_finite) - -long double -__ieee754_ynl (int n, long double x) -{ - u_int32_t se, i0, i1; - int32_t i, ix; - int32_t sign; - long double a, b, temp, ret; - - - GET_LDOUBLE_WORDS (se, i0, i1, x); - ix = se & 0x7fff; - /* if Y(n,NaN) is NaN */ - if (__builtin_expect ((ix == 0x7fff) && ((i0 & 0x7fffffff) != 0), 0)) - return x + x; - if (__builtin_expect ((ix | i0 | i1) == 0, 0)) - /* -inf or inf and divide-by-zero exception. */ - return ((n < 0 && (n & 1) != 0) ? 1.0L : -1.0L) / 0.0L; - if (__builtin_expect (se & 0x8000, 0)) - return zero / (zero * x); - sign = 1; - if (n < 0) - { - n = -n; - sign = 1 - ((n & 1) << 1); - } - if (n == 0) - return (__ieee754_y0l (x)); - { - SET_RESTORE_ROUNDL (FE_TONEAREST); - if (n == 1) - { - ret = sign * __ieee754_y1l (x); - goto out; - } - if (__glibc_unlikely (ix == 0x7fff)) - return zero; - if (ix >= 0x412D) - { /* x > 2**302 */ - - /* ??? See comment above on the possible futility of this. */ - - /* (x >> n**2) - * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Let s=sin(x), c=cos(x), - * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then - * - * n sin(xn)*sqt2 cos(xn)*sqt2 - * ---------------------------------- - * 0 s-c c+s - * 1 -s-c -c+s - * 2 -s+c -c-s - * 3 s+c c-s - */ - long double s; - long double c; - __sincosl (x, &s, &c); - switch (n & 3) - { - case 0: - temp = s - c; - break; - case 1: - temp = -s - c; - break; - case 2: - temp = -s + c; - break; - case 3: - temp = s + c; - break; - } - b = invsqrtpi * temp / __ieee754_sqrtl (x); - } - else - { - a = __ieee754_y0l (x); - b = __ieee754_y1l (x); - /* quit if b is -inf */ - GET_LDOUBLE_WORDS (se, i0, i1, b); - /* Use 0xffffffff since GET_LDOUBLE_WORDS sign-extends SE. */ - for (i = 1; i < n && se != 0xffffffff; i++) - { - temp = b; - b = ((long double) (i + i) / x) * b - a; - GET_LDOUBLE_WORDS (se, i0, i1, b); - a = temp; - } - } - /* If B is +-Inf, set up errno accordingly. */ - if (! isfinite (b)) - __set_errno (ERANGE); - if (sign > 0) - ret = b; - else - ret = -b; - } - out: - if (isinf (ret)) - ret = __copysignl (LDBL_MAX, ret) * LDBL_MAX; - return ret; -} -strong_alias (__ieee754_ynl, __ynl_finite) diff --git a/sysdeps/ieee754/ldbl-96/e_lgammal_r.c b/sysdeps/ieee754/ldbl-96/e_lgammal_r.c deleted file mode 100644 index 4ecd63045f..0000000000 --- a/sysdeps/ieee754/ldbl-96/e_lgammal_r.c +++ /dev/null @@ -1,439 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Long double expansions are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __ieee754_lgammal_r(x, signgamp) - * Reentrant version of the logarithm of the Gamma function - * with user provide pointer for the sign of Gamma(x). - * - * Method: - * 1. Argument Reduction for 0 < x <= 8 - * Since gamma(1+s)=s*gamma(s), for x in [0,8], we may - * reduce x to a number in [1.5,2.5] by - * lgamma(1+s) = log(s) + lgamma(s) - * for example, - * lgamma(7.3) = log(6.3) + lgamma(6.3) - * = log(6.3*5.3) + lgamma(5.3) - * = log(6.3*5.3*4.3*3.3*2.3) + lgamma(2.3) - * 2. Polynomial approximation of lgamma around its - * minimun ymin=1.461632144968362245 to maintain monotonicity. - * On [ymin-0.23, ymin+0.27] (i.e., [1.23164,1.73163]), use - * Let z = x-ymin; - * lgamma(x) = -1.214862905358496078218 + z^2*poly(z) - * 2. Rational approximation in the primary interval [2,3] - * We use the following approximation: - * s = x-2.0; - * lgamma(x) = 0.5*s + s*P(s)/Q(s) - * Our algorithms are based on the following observation - * - * zeta(2)-1 2 zeta(3)-1 3 - * lgamma(2+s) = s*(1-Euler) + --------- * s - --------- * s + ... - * 2 3 - * - * where Euler = 0.5771... is the Euler constant, which is very - * close to 0.5. - * - * 3. For x>=8, we have - * lgamma(x)~(x-0.5)log(x)-x+0.5*log(2pi)+1/(12x)-1/(360x**3)+.... - * (better formula: - * lgamma(x)~(x-0.5)*(log(x)-1)-.5*(log(2pi)-1) + ...) - * Let z = 1/x, then we approximation - * f(z) = lgamma(x) - (x-0.5)(log(x)-1) - * by - * 3 5 11 - * w = w0 + w1*z + w2*z + w3*z + ... + w6*z - * - * 4. For negative x, since (G is gamma function) - * -x*G(-x)*G(x) = pi/sin(pi*x), - * we have - * G(x) = pi/(sin(pi*x)*(-x)*G(-x)) - * since G(-x) is positive, sign(G(x)) = sign(sin(pi*x)) for x<0 - * Hence, for x<0, signgam = sign(sin(pi*x)) and - * lgamma(x) = log(|Gamma(x)|) - * = log(pi/(|x*sin(pi*x)|)) - lgamma(-x); - * Note: one should avoid compute pi*(-x) directly in the - * computation of sin(pi*(-x)). - * - * 5. Special Cases - * lgamma(2+s) ~ s*(1-Euler) for tiny s - * lgamma(1)=lgamma(2)=0 - * lgamma(x) ~ -log(x) for tiny x - * lgamma(0) = lgamma(inf) = inf - * lgamma(-integer) = +-inf - * - */ - -#include -#include -#include - -static const long double - half = 0.5L, - one = 1.0L, - pi = 3.14159265358979323846264L, - two63 = 9.223372036854775808e18L, - - /* lgam(1+x) = 0.5 x + x a(x)/b(x) - -0.268402099609375 <= x <= 0 - peak relative error 6.6e-22 */ - a0 = -6.343246574721079391729402781192128239938E2L, - a1 = 1.856560238672465796768677717168371401378E3L, - a2 = 2.404733102163746263689288466865843408429E3L, - a3 = 8.804188795790383497379532868917517596322E2L, - a4 = 1.135361354097447729740103745999661157426E2L, - a5 = 3.766956539107615557608581581190400021285E0L, - - b0 = 8.214973713960928795704317259806842490498E3L, - b1 = 1.026343508841367384879065363925870888012E4L, - b2 = 4.553337477045763320522762343132210919277E3L, - b3 = 8.506975785032585797446253359230031874803E2L, - b4 = 6.042447899703295436820744186992189445813E1L, - /* b5 = 1.000000000000000000000000000000000000000E0 */ - - - tc = 1.4616321449683623412626595423257213284682E0L, - tf = -1.2148629053584961146050602565082954242826E-1,/* double precision */ -/* tt = (tail of tf), i.e. tf + tt has extended precision. */ - tt = 3.3649914684731379602768989080467587736363E-18L, - /* lgam ( 1.4616321449683623412626595423257213284682E0 ) = --1.2148629053584960809551455717769158215135617312999903886372437313313530E-1 */ - - /* lgam (x + tc) = tf + tt + x g(x)/h(x) - - 0.230003726999612341262659542325721328468 <= x - <= 0.2699962730003876587373404576742786715318 - peak relative error 2.1e-21 */ - g0 = 3.645529916721223331888305293534095553827E-18L, - g1 = 5.126654642791082497002594216163574795690E3L, - g2 = 8.828603575854624811911631336122070070327E3L, - g3 = 5.464186426932117031234820886525701595203E3L, - g4 = 1.455427403530884193180776558102868592293E3L, - g5 = 1.541735456969245924860307497029155838446E2L, - g6 = 4.335498275274822298341872707453445815118E0L, - - h0 = 1.059584930106085509696730443974495979641E4L, - h1 = 2.147921653490043010629481226937850618860E4L, - h2 = 1.643014770044524804175197151958100656728E4L, - h3 = 5.869021995186925517228323497501767586078E3L, - h4 = 9.764244777714344488787381271643502742293E2L, - h5 = 6.442485441570592541741092969581997002349E1L, - /* h6 = 1.000000000000000000000000000000000000000E0 */ - - - /* lgam (x+1) = -0.5 x + x u(x)/v(x) - -0.100006103515625 <= x <= 0.231639862060546875 - peak relative error 1.3e-21 */ - u0 = -8.886217500092090678492242071879342025627E1L, - u1 = 6.840109978129177639438792958320783599310E2L, - u2 = 2.042626104514127267855588786511809932433E3L, - u3 = 1.911723903442667422201651063009856064275E3L, - u4 = 7.447065275665887457628865263491667767695E2L, - u5 = 1.132256494121790736268471016493103952637E2L, - u6 = 4.484398885516614191003094714505960972894E0L, - - v0 = 1.150830924194461522996462401210374632929E3L, - v1 = 3.399692260848747447377972081399737098610E3L, - v2 = 3.786631705644460255229513563657226008015E3L, - v3 = 1.966450123004478374557778781564114347876E3L, - v4 = 4.741359068914069299837355438370682773122E2L, - v5 = 4.508989649747184050907206782117647852364E1L, - /* v6 = 1.000000000000000000000000000000000000000E0 */ - - - /* lgam (x+2) = .5 x + x s(x)/r(x) - 0 <= x <= 1 - peak relative error 7.2e-22 */ - s0 = 1.454726263410661942989109455292824853344E6L, - s1 = -3.901428390086348447890408306153378922752E6L, - s2 = -6.573568698209374121847873064292963089438E6L, - s3 = -3.319055881485044417245964508099095984643E6L, - s4 = -7.094891568758439227560184618114707107977E5L, - s5 = -6.263426646464505837422314539808112478303E4L, - s6 = -1.684926520999477529949915657519454051529E3L, - - r0 = -1.883978160734303518163008696712983134698E7L, - r1 = -2.815206082812062064902202753264922306830E7L, - r2 = -1.600245495251915899081846093343626358398E7L, - r3 = -4.310526301881305003489257052083370058799E6L, - r4 = -5.563807682263923279438235987186184968542E5L, - r5 = -3.027734654434169996032905158145259713083E4L, - r6 = -4.501995652861105629217250715790764371267E2L, - /* r6 = 1.000000000000000000000000000000000000000E0 */ - - -/* lgam(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x w(1/x^2) - x >= 8 - Peak relative error 1.51e-21 - w0 = LS2PI - 0.5 */ - w0 = 4.189385332046727417803e-1L, - w1 = 8.333333333333331447505E-2L, - w2 = -2.777777777750349603440E-3L, - w3 = 7.936507795855070755671E-4L, - w4 = -5.952345851765688514613E-4L, - w5 = 8.412723297322498080632E-4L, - w6 = -1.880801938119376907179E-3L, - w7 = 4.885026142432270781165E-3L; - -static const long double zero = 0.0L; - -static long double -sin_pi (long double x) -{ - long double y, z; - int n, ix; - u_int32_t se, i0, i1; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - ix = se & 0x7fff; - ix = (ix << 16) | (i0 >> 16); - if (ix < 0x3ffd8000) /* 0.25 */ - return __sinl (pi * x); - y = -x; /* x is assume negative */ - - /* - * argument reduction, make sure inexact flag not raised if input - * is an integer - */ - z = __floorl (y); - if (z != y) - { /* inexact anyway */ - y *= 0.5; - y = 2.0*(y - __floorl(y)); /* y = |x| mod 2.0 */ - n = (int) (y*4.0); - } - else - { - if (ix >= 0x403f8000) /* 2^64 */ - { - y = zero; n = 0; /* y must be even */ - } - else - { - if (ix < 0x403e8000) /* 2^63 */ - z = y + two63; /* exact */ - GET_LDOUBLE_WORDS (se, i0, i1, z); - n = i1 & 1; - y = n; - n <<= 2; - } - } - - switch (n) - { - case 0: - y = __sinl (pi * y); - break; - case 1: - case 2: - y = __cosl (pi * (half - y)); - break; - case 3: - case 4: - y = __sinl (pi * (one - y)); - break; - case 5: - case 6: - y = -__cosl (pi * (y - 1.5)); - break; - default: - y = __sinl (pi * (y - 2.0)); - break; - } - return -y; -} - - -long double -__ieee754_lgammal_r (long double x, int *signgamp) -{ - long double t, y, z, nadj, p, p1, p2, q, r, w; - int i, ix; - u_int32_t se, i0, i1; - - *signgamp = 1; - GET_LDOUBLE_WORDS (se, i0, i1, x); - ix = se & 0x7fff; - - if (__builtin_expect((ix | i0 | i1) == 0, 0)) - { - if (se & 0x8000) - *signgamp = -1; - return one / fabsl (x); - } - - ix = (ix << 16) | (i0 >> 16); - - /* purge off +-inf, NaN, +-0, and negative arguments */ - if (__builtin_expect(ix >= 0x7fff0000, 0)) - return x * x; - - if (__builtin_expect(ix < 0x3fc08000, 0)) /* 2^-63 */ - { /* |x|<2**-63, return -log(|x|) */ - if (se & 0x8000) - { - *signgamp = -1; - return -__ieee754_logl (-x); - } - else - return -__ieee754_logl (x); - } - if (se & 0x8000) - { - if (x < -2.0L && x > -33.0L) - return __lgamma_negl (x, signgamp); - t = sin_pi (x); - if (t == zero) - return one / fabsl (t); /* -integer */ - nadj = __ieee754_logl (pi / fabsl (t * x)); - if (t < zero) - *signgamp = -1; - x = -x; - } - - /* purge off 1 and 2 */ - if ((((ix - 0x3fff8000) | i0 | i1) == 0) - || (((ix - 0x40008000) | i0 | i1) == 0)) - r = 0; - else if (ix < 0x40008000) /* 2.0 */ - { - /* x < 2.0 */ - if (ix <= 0x3ffee666) /* 8.99993896484375e-1 */ - { - /* lgamma(x) = lgamma(x+1) - log(x) */ - r = -__ieee754_logl (x); - if (ix >= 0x3ffebb4a) /* 7.31597900390625e-1 */ - { - y = x - one; - i = 0; - } - else if (ix >= 0x3ffced33)/* 2.31639862060546875e-1 */ - { - y = x - (tc - one); - i = 1; - } - else - { - /* x < 0.23 */ - y = x; - i = 2; - } - } - else - { - r = zero; - if (ix >= 0x3fffdda6) /* 1.73162841796875 */ - { - /* [1.7316,2] */ - y = x - 2.0; - i = 0; - } - else if (ix >= 0x3fff9da6)/* 1.23162841796875 */ - { - /* [1.23,1.73] */ - y = x - tc; - i = 1; - } - else - { - /* [0.9, 1.23] */ - y = x - one; - i = 2; - } - } - switch (i) - { - case 0: - p1 = a0 + y * (a1 + y * (a2 + y * (a3 + y * (a4 + y * a5)))); - p2 = b0 + y * (b1 + y * (b2 + y * (b3 + y * (b4 + y)))); - r += half * y + y * p1/p2; - break; - case 1: - p1 = g0 + y * (g1 + y * (g2 + y * (g3 + y * (g4 + y * (g5 + y * g6))))); - p2 = h0 + y * (h1 + y * (h2 + y * (h3 + y * (h4 + y * (h5 + y))))); - p = tt + y * p1/p2; - r += (tf + p); - break; - case 2: - p1 = y * (u0 + y * (u1 + y * (u2 + y * (u3 + y * (u4 + y * (u5 + y * u6)))))); - p2 = v0 + y * (v1 + y * (v2 + y * (v3 + y * (v4 + y * (v5 + y))))); - r += (-half * y + p1 / p2); - } - } - else if (ix < 0x40028000) /* 8.0 */ - { - /* x < 8.0 */ - i = (int) x; - t = zero; - y = x - (double) i; - p = y * - (s0 + y * (s1 + y * (s2 + y * (s3 + y * (s4 + y * (s5 + y * s6)))))); - q = r0 + y * (r1 + y * (r2 + y * (r3 + y * (r4 + y * (r5 + y * (r6 + y)))))); - r = half * y + p / q; - z = one; /* lgamma(1+s) = log(s) + lgamma(s) */ - switch (i) - { - case 7: - z *= (y + 6.0); /* FALLTHRU */ - case 6: - z *= (y + 5.0); /* FALLTHRU */ - case 5: - z *= (y + 4.0); /* FALLTHRU */ - case 4: - z *= (y + 3.0); /* FALLTHRU */ - case 3: - z *= (y + 2.0); /* FALLTHRU */ - r += __ieee754_logl (z); - break; - } - } - else if (ix < 0x40418000) /* 2^66 */ - { - /* 8.0 <= x < 2**66 */ - t = __ieee754_logl (x); - z = one / x; - y = z * z; - w = w0 + z * (w1 - + y * (w2 + y * (w3 + y * (w4 + y * (w5 + y * (w6 + y * w7)))))); - r = (x - half) * (t - one) + w; - } - else - /* 2**66 <= x <= inf */ - r = x * (__ieee754_logl (x) - one); - /* NADJ is set for negative arguments but not otherwise, resulting - in warnings that it may be used uninitialized although in the - cases where it is used it has always been set. */ - DIAG_PUSH_NEEDS_COMMENT; - DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wmaybe-uninitialized"); - if (se & 0x8000) - r = nadj - r; - DIAG_POP_NEEDS_COMMENT; - return r; -} -strong_alias (__ieee754_lgammal_r, __lgammal_r_finite) diff --git a/sysdeps/ieee754/ldbl-96/e_rem_pio2l.c b/sysdeps/ieee754/ldbl-96/e_rem_pio2l.c deleted file mode 100644 index 43c5d91f0b..0000000000 --- a/sysdeps/ieee754/ldbl-96/e_rem_pio2l.c +++ /dev/null @@ -1,236 +0,0 @@ -/* Extended-precision floating point argument reduction. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Based on quad-precision code by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Table of constants for 2/pi, 5628 hexadecimal digits of 2/pi. */ -static const int32_t two_over_pi[] = { -0xa2f983, 0x6e4e44, 0x1529fc, 0x2757d1, 0xf534dd, 0xc0db62, -0x95993c, 0x439041, 0xfe5163, 0xabdebb, 0xc561b7, 0x246e3a, -0x424dd2, 0xe00649, 0x2eea09, 0xd1921c, 0xfe1deb, 0x1cb129, -0xa73ee8, 0x8235f5, 0x2ebb44, 0x84e99c, 0x7026b4, 0x5f7e41, -0x3991d6, 0x398353, 0x39f49c, 0x845f8b, 0xbdf928, 0x3b1ff8, -0x97ffde, 0x05980f, 0xef2f11, 0x8b5a0a, 0x6d1f6d, 0x367ecf, -0x27cb09, 0xb74f46, 0x3f669e, 0x5fea2d, 0x7527ba, 0xc7ebe5, -0xf17b3d, 0x0739f7, 0x8a5292, 0xea6bfb, 0x5fb11f, 0x8d5d08, -0x560330, 0x46fc7b, 0x6babf0, 0xcfbc20, 0x9af436, 0x1da9e3, -0x91615e, 0xe61b08, 0x659985, 0x5f14a0, 0x68408d, 0xffd880, -0x4d7327, 0x310606, 0x1556ca, 0x73a8c9, 0x60e27b, 0xc08c6b, -0x47c419, 0xc367cd, 0xdce809, 0x2a8359, 0xc4768b, 0x961ca6, -0xddaf44, 0xd15719, 0x053ea5, 0xff0705, 0x3f7e33, 0xe832c2, -0xde4f98, 0x327dbb, 0xc33d26, 0xef6b1e, 0x5ef89f, 0x3a1f35, -0xcaf27f, 0x1d87f1, 0x21907c, 0x7c246a, 0xfa6ed5, 0x772d30, -0x433b15, 0xc614b5, 0x9d19c3, 0xc2c4ad, 0x414d2c, 0x5d000c, -0x467d86, 0x2d71e3, 0x9ac69b, 0x006233, 0x7cd2b4, 0x97a7b4, -0xd55537, 0xf63ed7, 0x1810a3, 0xfc764d, 0x2a9d64, 0xabd770, -0xf87c63, 0x57b07a, 0xe71517, 0x5649c0, 0xd9d63b, 0x3884a7, -0xcb2324, 0x778ad6, 0x23545a, 0xb91f00, 0x1b0af1, 0xdfce19, -0xff319f, 0x6a1e66, 0x615799, 0x47fbac, 0xd87f7e, 0xb76522, -0x89e832, 0x60bfe6, 0xcdc4ef, 0x09366c, 0xd43f5d, 0xd7de16, -0xde3b58, 0x929bde, 0x2822d2, 0xe88628, 0x4d58e2, 0x32cac6, -0x16e308, 0xcb7de0, 0x50c017, 0xa71df3, 0x5be018, 0x34132e, -0x621283, 0x014883, 0x5b8ef5, 0x7fb0ad, 0xf2e91e, 0x434a48, -0xd36710, 0xd8ddaa, 0x425fae, 0xce616a, 0xa4280a, 0xb499d3, -0xf2a606, 0x7f775c, 0x83c2a3, 0x883c61, 0x78738a, 0x5a8caf, -0xbdd76f, 0x63a62d, 0xcbbff4, 0xef818d, 0x67c126, 0x45ca55, -0x36d9ca, 0xd2a828, 0x8d61c2, 0x77c912, 0x142604, 0x9b4612, -0xc459c4, 0x44c5c8, 0x91b24d, 0xf31700, 0xad43d4, 0xe54929, -0x10d5fd, 0xfcbe00, 0xcc941e, 0xeece70, 0xf53e13, 0x80f1ec, -0xc3e7b3, 0x28f8c7, 0x940593, 0x3e71c1, 0xb3092e, 0xf3450b, -0x9c1288, 0x7b20ab, 0x9fb52e, 0xc29247, 0x2f327b, 0x6d550c, -0x90a772, 0x1fe76b, 0x96cb31, 0x4a1679, 0xe27941, 0x89dff4, -0x9794e8, 0x84e6e2, 0x973199, 0x6bed88, 0x365f5f, 0x0efdbb, -0xb49a48, 0x6ca467, 0x427271, 0x325d8d, 0xb8159f, 0x09e5bc, -0x25318d, 0x3974f7, 0x1c0530, 0x010c0d, 0x68084b, 0x58ee2c, -0x90aa47, 0x02e774, 0x24d6bd, 0xa67df7, 0x72486e, 0xef169f, -0xa6948e, 0xf691b4, 0x5153d1, 0xf20acf, 0x339820, 0x7e4bf5, -0x6863b2, 0x5f3edd, 0x035d40, 0x7f8985, 0x295255, 0xc06437, -0x10d86d, 0x324832, 0x754c5b, 0xd4714e, 0x6e5445, 0xc1090b, -0x69f52a, 0xd56614, 0x9d0727, 0x50045d, 0xdb3bb4, 0xc576ea, -0x17f987, 0x7d6b49, 0xba271d, 0x296996, 0xacccc6, 0x5414ad, -0x6ae290, 0x89d988, 0x50722c, 0xbea404, 0x940777, 0x7030f3, -0x27fc00, 0xa871ea, 0x49c266, 0x3de064, 0x83dd97, 0x973fa3, -0xfd9443, 0x8c860d, 0xde4131, 0x9d3992, 0x8c70dd, 0xe7b717, -0x3bdf08, 0x2b3715, 0xa0805c, 0x93805a, 0x921110, 0xd8e80f, -0xaf806c, 0x4bffdb, 0x0f9038, 0x761859, 0x15a562, 0xbbcb61, -0xb989c7, 0xbd4010, 0x04f2d2, 0x277549, 0xf6b6eb, 0xbb22db, -0xaa140a, 0x2f2689, 0x768364, 0x333b09, 0x1a940e, 0xaa3a51, -0xc2a31d, 0xaeedaf, 0x12265c, 0x4dc26d, 0x9c7a2d, 0x9756c0, -0x833f03, 0xf6f009, 0x8c402b, 0x99316d, 0x07b439, 0x15200c, -0x5bc3d8, 0xc492f5, 0x4badc6, 0xa5ca4e, 0xcd37a7, 0x36a9e6, -0x9492ab, 0x6842dd, 0xde6319, 0xef8c76, 0x528b68, 0x37dbfc, -0xaba1ae, 0x3115df, 0xa1ae00, 0xdafb0c, 0x664d64, 0xb705ed, -0x306529, 0xbf5657, 0x3aff47, 0xb9f96a, 0xf3be75, 0xdf9328, -0x3080ab, 0xf68c66, 0x15cb04, 0x0622fa, 0x1de4d9, 0xa4b33d, -0x8f1b57, 0x09cd36, 0xe9424e, 0xa4be13, 0xb52333, 0x1aaaf0, -0xa8654f, 0xa5c1d2, 0x0f3f0b, 0xcd785b, 0x76f923, 0x048b7b, -0x721789, 0x53a6c6, 0xe26e6f, 0x00ebef, 0x584a9b, 0xb7dac4, -0xba66aa, 0xcfcf76, 0x1d02d1, 0x2df1b1, 0xc1998c, 0x77adc3, -0xda4886, 0xa05df7, 0xf480c6, 0x2ff0ac, 0x9aecdd, 0xbc5c3f, -0x6dded0, 0x1fc790, 0xb6db2a, 0x3a25a3, 0x9aaf00, 0x9353ad, -0x0457b6, 0xb42d29, 0x7e804b, 0xa707da, 0x0eaa76, 0xa1597b, -0x2a1216, 0x2db7dc, 0xfde5fa, 0xfedb89, 0xfdbe89, 0x6c76e4, -0xfca906, 0x70803e, 0x156e85, 0xff87fd, 0x073e28, 0x336761, -0x86182a, 0xeabd4d, 0xafe7b3, 0x6e6d8f, 0x396795, 0x5bbf31, -0x48d784, 0x16df30, 0x432dc7, 0x356125, 0xce70c9, 0xb8cb30, -0xfd6cbf, 0xa200a4, 0xe46c05, 0xa0dd5a, 0x476f21, 0xd21262, -0x845cb9, 0x496170, 0xe0566b, 0x015299, 0x375550, 0xb7d51e, -0xc4f133, 0x5f6e13, 0xe4305d, 0xa92e85, 0xc3b21d, 0x3632a1, -0xa4b708, 0xd4b1ea, 0x21f716, 0xe4698f, 0x77ff27, 0x80030c, -0x2d408d, 0xa0cd4f, 0x99a520, 0xd3a2b3, 0x0a5d2f, 0x42f9b4, -0xcbda11, 0xd0be7d, 0xc1db9b, 0xbd17ab, 0x81a2ca, 0x5c6a08, -0x17552e, 0x550027, 0xf0147f, 0x8607e1, 0x640b14, 0x8d4196, -0xdebe87, 0x2afdda, 0xb6256b, 0x34897b, 0xfef305, 0x9ebfb9, -0x4f6a68, 0xa82a4a, 0x5ac44f, 0xbcf82d, 0x985ad7, 0x95c7f4, -0x8d4d0d, 0xa63a20, 0x5f57a4, 0xb13f14, 0x953880, 0x0120cc, -0x86dd71, 0xb6dec9, 0xf560bf, 0x11654d, 0x6b0701, 0xacb08c, -0xd0c0b2, 0x485551, 0x0efb1e, 0xc37295, 0x3b06a3, 0x3540c0, -0x7bdc06, 0xcc45e0, 0xfa294e, 0xc8cad6, 0x41f3e8, 0xde647c, -0xd8649b, 0x31bed9, 0xc397a4, 0xd45877, 0xc5e369, 0x13daf0, -0x3c3aba, 0x461846, 0x5f7555, 0xf5bdd2, 0xc6926e, 0x5d2eac, -0xed440e, 0x423e1c, 0x87c461, 0xe9fd29, 0xf3d6e7, 0xca7c22, -0x35916f, 0xc5e008, 0x8dd7ff, 0xe26a6e, 0xc6fdb0, 0xc10893, -0x745d7c, 0xb2ad6b, 0x9d6ecd, 0x7b723e, 0x6a11c6, 0xa9cff7, -0xdf7329, 0xbac9b5, 0x5100b7, 0x0db2e2, 0x24ba74, 0x607de5, -0x8ad874, 0x2c150d, 0x0c1881, 0x94667e, 0x162901, 0x767a9f, -0xbefdfd, 0xef4556, 0x367ed9, 0x13d9ec, 0xb9ba8b, 0xfc97c4, -0x27a831, 0xc36ef1, 0x36c594, 0x56a8d8, 0xb5a8b4, 0x0ecccf, -0x2d8912, 0x34576f, 0x89562c, 0xe3ce99, 0xb920d6, 0xaa5e6b, -0x9c2a3e, 0xcc5f11, 0x4a0bfd, 0xfbf4e1, 0x6d3b8e, 0x2c86e2, -0x84d4e9, 0xa9b4fc, 0xd1eeef, 0xc9352e, 0x61392f, 0x442138, -0xc8d91b, 0x0afc81, 0x6a4afb, 0xd81c2f, 0x84b453, 0x8c994e, -0xcc2254, 0xdc552a, 0xd6c6c0, 0x96190b, 0xb8701a, 0x649569, -0x605a26, 0xee523f, 0x0f117f, 0x11b5f4, 0xf5cbfc, 0x2dbc34, -0xeebc34, 0xcc5de8, 0x605edd, 0x9b8e67, 0xef3392, 0xb817c9, -0x9b5861, 0xbc57e1, 0xc68351, 0x103ed8, 0x4871dd, 0xdd1c2d, -0xa118af, 0x462c21, 0xd7f359, 0x987ad9, 0xc0549e, 0xfa864f, -0xfc0656, 0xae79e5, 0x362289, 0x22ad38, 0xdc9367, 0xaae855, -0x382682, 0x9be7ca, 0xa40d51, 0xb13399, 0x0ed7a9, 0x480569, -0xf0b265, 0xa7887f, 0x974c88, 0x36d1f9, 0xb39221, 0x4a827b, -0x21cf98, 0xdc9f40, 0x5547dc, 0x3a74e1, 0x42eb67, 0xdf9dfe, -0x5fd45e, 0xa4677b, 0x7aacba, 0xa2f655, 0x23882b, 0x55ba41, -0x086e59, 0x862a21, 0x834739, 0xe6e389, 0xd49ee5, 0x40fb49, -0xe956ff, 0xca0f1c, 0x8a59c5, 0x2bfa94, 0xc5c1d3, 0xcfc50f, -0xae5adb, 0x86c547, 0x624385, 0x3b8621, 0x94792c, 0x876110, -0x7b4c2a, 0x1a2c80, 0x12bf43, 0x902688, 0x893c78, 0xe4c4a8, -0x7bdbe5, 0xc23ac4, 0xeaf426, 0x8a67f7, 0xbf920d, 0x2ba365, -0xb1933d, 0x0b7cbd, 0xdc51a4, 0x63dd27, 0xdde169, 0x19949a, -0x9529a8, 0x28ce68, 0xb4ed09, 0x209f44, 0xca984e, 0x638270, -0x237c7e, 0x32b90f, 0x8ef5a7, 0xe75614, 0x08f121, 0x2a9db5, -0x4d7e6f, 0x5119a5, 0xabf9b5, 0xd6df82, 0x61dd96, 0x023616, -0x9f3ac4, 0xa1a283, 0x6ded72, 0x7a8d39, 0xa9b882, 0x5c326b, -0x5b2746, 0xed3400, 0x7700d2, 0x55f4fc, 0x4d5901, 0x8071e0, -0xe13f89, 0xb295f3, 0x64a8f1, 0xaea74b, 0x38fc4c, 0xeab2bb, -0x47270b, 0xabc3a7, 0x34ba60, 0x52dd34, 0xf8563a, 0xeb7e8a, -0x31bb36, 0x5895b7, 0x47f7a9, 0x94c3aa, 0xd39225, 0x1e7f3e, -0xd8974e, 0xbba94f, 0xd8ae01, 0xe661b4, 0x393d8e, 0xa523aa, -0x33068e, 0x1633b5, 0x3bb188, 0x1d3a9d, 0x4013d0, 0xcc1be5, -0xf862e7, 0x3bf28f, 0x39b5bf, 0x0bc235, 0x22747e, 0xa247c0, -0xd52d1f, 0x19add3, 0x9094df, 0x9311d0, 0xb42b25, 0x496db2, -0xe264b2, 0x5ef135, 0x3bc6a4, 0x1a4ad0, 0xaac92e, 0x64e886, -0x573091, 0x982cfb, 0x311b1a, 0x08728b, 0xbdcee1, 0x60e142, -0xeb641d, 0xd0bba3, 0xe559d4, 0x597b8c, 0x2a4483, 0xf332ba, -0xf84867, 0x2c8d1b, 0x2fa9b0, 0x50f3dd, 0xf9f573, 0xdb61b4, -0xfe233e, 0x6c41a6, 0xeea318, 0x775a26, 0xbc5e5c, 0xcea708, -0x94dc57, 0xe20196, 0xf1e839, 0xbe4851, 0x5d2d2f, 0x4e9555, -0xd96ec2, 0xe7d755, 0x6304e0, 0xc02e0e, 0xfc40a0, 0xbbf9b3, -0x7125a7, 0x222dfb, 0xf619d8, 0x838c1c, 0x6619e6, 0xb20d55, -0xbb5137, 0x79e809, 0xaf9149, 0x0d73de, 0x0b0da5, 0xce7f58, -0xac1934, 0x724667, 0x7a1a13, 0x9e26bc, 0x4555e7, 0x585cb5, -0x711d14, 0x486991, 0x480d60, 0x56adab, 0xd62f64, 0x96ee0c, -0x212ff3, 0x5d6d88, 0xa67684, 0x95651e, 0xab9e0a, 0x4ddefe, -0x571010, 0x836a39, 0xf8ea31, 0x9e381d, 0xeac8b1, 0xcac96b, -0x37f21e, 0xd505e9, 0x984743, 0x9fc56c, 0x0331b7, 0x3b8bf8, -0x86e56a, 0x8dc343, 0x6230e7, 0x93cfd5, 0x6a8f2d, 0x733005, -0x1af021, 0xa09fcb, 0x7415a1, 0xd56b23, 0x6ff725, 0x2f4bc7, -0xb8a591, 0x7fac59, 0x5c55de, 0x212c38, 0xb13296, 0x5cff50, -0x366262, 0xfa7b16, 0xf4d9a6, 0x2acfe7, 0xf07403, 0xd4d604, -0x6fd916, 0x31b1bf, 0xcbb450, 0x5bd7c8, 0x0ce194, 0x6bd643, -0x4fd91c, 0xdf4543, 0x5f3453, 0xe2b5aa, 0xc9aec8, 0x131485, -0xf9d2bf, 0xbadb9e, 0x76f5b9, 0xaf15cf, 0xca3182, 0x14b56d, -0xe9fe4d, 0x50fc35, 0xf5aed5, 0xa2d0c1, 0xc96057, 0x192eb6, -0xe91d92, 0x07d144, 0xaea3c6, 0x343566, 0x26d5b4, 0x3161e2, -0x37f1a2, 0x209eff, 0x958e23, 0x493798, 0x35f4a6, 0x4bdc02, -0xc2be13, 0xbe80a0, 0x0b72a3, 0x115c5f, 0x1e1bd1, 0x0db4d3, -0x869e85, 0x96976b, 0x2ac91f, 0x8a26c2, 0x3070f0, 0x041412, -0xfc9fa5, 0xf72a38, 0x9c6878, 0xe2aa76, 0x50cfe1, 0x559274, -0x934e38, 0x0a92f7, 0x5533f0, 0xa63db4, 0x399971, 0xe2b755, -0xa98a7c, 0x008f19, 0xac54d2, 0x2ea0b4, 0xf5f3e0, 0x60c849, -0xffd269, 0xae52ce, 0x7a5fdd, 0xe9ce06, 0xfb0ae8, 0xa50cce, -0xea9d3e, 0x3766dd, 0xb834f5, 0x0da090, 0x846f88, 0x4ae3d5, -0x099a03, 0x2eae2d, 0xfcb40a, 0xfb9b33, 0xe281dd, 0x1b16ba, -0xd8c0af, 0xd96b97, 0xb52dc9, 0x9c277f, 0x5951d5, 0x21ccd6, -0xb6496b, 0x584562, 0xb3baf2, 0xa1a5c4, 0x7ca2cf, 0xa9b93d, -0x7b7b89, 0x483d38, -}; - -int32_t -__ieee754_rem_pio2l (long double x, long double *y) -{ - double tx[3], ty[3]; - int32_t se, j0; - u_int32_t i0, i1; - int sx; - int n, exp; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - sx = (se >> 15) & 1; - j0 = (se & 0x7fff) - 0x3fff; - - if (j0 < -1) - { - /* |x| < pi/4. */ - y[0] = x; - y[1] = 0; - return 0; - } - - if (j0 >= 0x8000) - { - /* x is infinite or NaN. */ - y[0] = x - x; - y[1] = y[0]; - return 0; - } - - /* Split the 64 bits of the mantissa into three 24-bit integers - stored in a double array. */ - exp = j0 - 23; - tx[0] = (double) (i0 >> 8); - tx[1] = (double) (((i0 << 16) | (i1 >> 16)) & 0xffffff); - tx[2] = (double) ((i1 << 8) & 0xffffff); - - n = __kernel_rem_pio2 (tx, ty, exp, 3, 2, two_over_pi); - - /* The result is now stored in two double values, we need to convert - it into two long double values. */ - if (sx == 0) - { - y[0] = (long double) ty[0] + (long double) ty[1]; - y[1] = ty[1] - (y[0] - ty[0]); - return n; - } - else - { - y[0] = -((long double) ty[0] + (long double) ty[1]); - y[1] = -ty[1] - (y[0] + ty[0]); - return -n; - } -} diff --git a/sysdeps/ieee754/ldbl-96/e_sinhl.c b/sysdeps/ieee754/ldbl-96/e_sinhl.c deleted file mode 100644 index 095b142621..0000000000 --- a/sysdeps/ieee754/ldbl-96/e_sinhl.c +++ /dev/null @@ -1,87 +0,0 @@ -/* e_asinhl.c -- long double version of e_asinh.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* __ieee754_sinhl(x) - * Method : - * mathematically sinh(x) if defined to be (exp(x)-exp(-x))/2 - * 1. Replace x by |x| (sinhl(-x) = -sinhl(x)). - * 2. - * E + E/(E+1) - * 0 <= x <= 25 : sinhl(x) := --------------, E=expm1l(x) - * 2 - * - * 25 <= x <= lnovft : sinhl(x) := expl(x)/2 - * lnovft <= x <= ln2ovft: sinhl(x) := expl(x/2)/2 * expl(x/2) - * ln2ovft < x : sinhl(x) := x*shuge (overflow) - * - * Special cases: - * sinhl(x) is |x| if x is +INF, -INF, or NaN. - * only sinhl(0)=0 is exact for finite x. - */ - -#include -#include -#include - -static const long double one = 1.0, shuge = 1.0e4931L; - -long double -__ieee754_sinhl(long double x) -{ - long double t,w,h; - u_int32_t jx,ix,i0,i1; - - /* Words of |x|. */ - GET_LDOUBLE_WORDS(jx,i0,i1,x); - ix = jx&0x7fff; - - /* x is INF or NaN */ - if(__builtin_expect(ix==0x7fff, 0)) return x+x; - - h = 0.5; - if (jx & 0x8000) h = -h; - /* |x| in [0,25], return sign(x)*0.5*(E+E/(E+1))) */ - if (ix < 0x4003 || (ix == 0x4003 && i0 <= 0xc8000000)) { /* |x|<25 */ - if (ix<0x3fdf) { /* |x|<2**-32 */ - math_check_force_underflow (x); - if(shuge+x>one) return x;/* sinh(tiny) = tiny with inexact */ - } - t = __expm1l(fabsl(x)); - if(ix<0x3fff) return h*(2.0*t-t*t/(t+one)); - return h*(t+t/(t+one)); - } - - /* |x| in [25, log(maxdouble)] return 0.5*exp(|x|) */ - if (ix < 0x400c || (ix == 0x400c && i0 < 0xb17217f7)) - return h*__ieee754_expl(fabsl(x)); - - /* |x| in [log(maxdouble), overflowthreshold] */ - if (ix<0x400c || (ix == 0x400c && (i0 < 0xb174ddc0 - || (i0 == 0xb174ddc0 - && i1 <= 0x31aec0ea)))) { - w = __ieee754_expl(0.5*fabsl(x)); - t = h*w; - return t*w; - } - - /* |x| > overflowthreshold, sinhl(x) overflow */ - return x*shuge; -} -strong_alias (__ieee754_sinhl, __sinhl_finite) diff --git a/sysdeps/ieee754/ldbl-96/gamma_product.c b/sysdeps/ieee754/ldbl-96/gamma_product.c deleted file mode 100644 index 31931bbd17..0000000000 --- a/sysdeps/ieee754/ldbl-96/gamma_product.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Compute a product of X, X+1, ..., with an error estimate. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Compute the product of X + X_EPS, X + X_EPS + 1, ..., X + X_EPS + N - - 1, in the form R * (1 + *EPS) where the return value R is an - approximation to the product and *EPS is set to indicate the - approximate error in the return value. X is such that all the - values X + 1, ..., X + N - 1 are exactly representable, and X_EPS / - X is small enough that factors quadratic in it can be - neglected. */ - -double -__gamma_product (double x, double x_eps, int n, double *eps) -{ - long double x_full = (long double) x + (long double) x_eps; - long double ret = x_full; - for (int i = 1; i < n; i++) - ret *= x_full + i; - - double fret = math_narrow_eval ((double) ret); - *eps = (ret - fret) / fret; - - return fret; -} diff --git a/sysdeps/ieee754/ldbl-96/gamma_productl.c b/sysdeps/ieee754/ldbl-96/gamma_productl.c deleted file mode 100644 index 0f1ccc4a2d..0000000000 --- a/sysdeps/ieee754/ldbl-96/gamma_productl.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Compute a product of X, X+1, ..., with an error estimate. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Compute the product of X + X_EPS, X + X_EPS + 1, ..., X + X_EPS + N - - 1, in the form R * (1 + *EPS) where the return value R is an - approximation to the product and *EPS is set to indicate the - approximate error in the return value. X is such that all the - values X + 1, ..., X + N - 1 are exactly representable, and X_EPS / - X is small enough that factors quadratic in it can be - neglected. */ - -long double -__gamma_productl (long double x, long double x_eps, int n, long double *eps) -{ - SET_RESTORE_ROUNDL (FE_TONEAREST); - long double ret = x; - *eps = x_eps / x; - for (int i = 1; i < n; i++) - { - *eps += x_eps / (x + i); - long double lo; - mul_splitl (&ret, &lo, ret, x + i); - *eps += lo / ret; - } - return ret; -} diff --git a/sysdeps/ieee754/ldbl-96/include/bits/iscanonical.h b/sysdeps/ieee754/ldbl-96/include/bits/iscanonical.h deleted file mode 100644 index bee080bd29..0000000000 --- a/sysdeps/ieee754/ldbl-96/include/bits/iscanonical.h +++ /dev/null @@ -1,5 +0,0 @@ -#include_next - -#ifndef _ISOMAC -libm_hidden_proto (__iscanonicall) -#endif diff --git a/sysdeps/ieee754/ldbl-96/k_cosl.c b/sysdeps/ieee754/ldbl-96/k_cosl.c deleted file mode 100644 index 8e3cd49f81..0000000000 --- a/sysdeps/ieee754/ldbl-96/k_cosl.c +++ /dev/null @@ -1,123 +0,0 @@ -/* Extended-precision floating point cosine on <-pi/4,pi/4>. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Based on quad-precision cosine by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* The polynomials have not been optimized for extended-precision and - may contain more terms than needed. */ - -static const long double c[] = { -#define ONE c[0] - 1.00000000000000000000000000000000000E+00L, - -/* cos x ~ ONE + x^2 ( SCOS1 + SCOS2 * x^2 + ... + SCOS4 * x^6 + SCOS5 * x^8 ) - x in <0,1/256> */ -#define SCOS1 c[1] -#define SCOS2 c[2] -#define SCOS3 c[3] -#define SCOS4 c[4] -#define SCOS5 c[5] --5.00000000000000000000000000000000000E-01L, - 4.16666666666666666666666666556146073E-02L, --1.38888888888888888888309442601939728E-03L, - 2.48015873015862382987049502531095061E-05L, --2.75573112601362126593516899592158083E-07L, - -/* cos x ~ ONE + x^2 ( COS1 + COS2 * x^2 + ... + COS7 * x^12 + COS8 * x^14 ) - x in <0,0.1484375> */ -#define COS1 c[6] -#define COS2 c[7] -#define COS3 c[8] -#define COS4 c[9] -#define COS5 c[10] -#define COS6 c[11] -#define COS7 c[12] -#define COS8 c[13] --4.99999999999999999999999999999999759E-01L, - 4.16666666666666666666666666651287795E-02L, --1.38888888888888888888888742314300284E-03L, - 2.48015873015873015867694002851118210E-05L, --2.75573192239858811636614709689300351E-07L, - 2.08767569877762248667431926878073669E-09L, --1.14707451049343817400420280514614892E-11L, - 4.77810092804389587579843296923533297E-14L, - -/* sin x ~ ONE * x + x^3 ( SSIN1 + SSIN2 * x^2 + ... + SSIN4 * x^6 + SSIN5 * x^8 ) - x in <0,1/256> */ -#define SSIN1 c[14] -#define SSIN2 c[15] -#define SSIN3 c[16] -#define SSIN4 c[17] -#define SSIN5 c[18] --1.66666666666666666666666666666666659E-01L, - 8.33333333333333333333333333146298442E-03L, --1.98412698412698412697726277416810661E-04L, - 2.75573192239848624174178393552189149E-06L, --2.50521016467996193495359189395805639E-08L, -}; - -#define SINCOSL_COS_HI 0 -#define SINCOSL_COS_LO 1 -#define SINCOSL_SIN_HI 2 -#define SINCOSL_SIN_LO 3 -extern const long double __sincosl_table[]; - -long double -__kernel_cosl(long double x, long double y) -{ - long double h, l, z, sin_l, cos_l_m1; - int index; - - if (signbit (x)) - { - x = -x; - y = -y; - } - if (x < 0.1484375L) - { - /* Argument is small enough to approximate it by a Chebyshev - polynomial of degree 16. */ - if (x < 0x1p-33L) - if (!((int)x)) return ONE; /* generate inexact */ - z = x * x; - return ONE + (z*(COS1+z*(COS2+z*(COS3+z*(COS4+ - z*(COS5+z*(COS6+z*(COS7+z*COS8)))))))); - } - else - { - /* So that we don't have to use too large polynomial, we find - l and h such that x = l + h, where fabsl(l) <= 1.0/256 with 83 - possible values for h. We look up cosl(h) and sinl(h) in - pre-computed tables, compute cosl(l) and sinl(l) using a - Chebyshev polynomial of degree 10(11) and compute - cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l). */ - index = (int) (128 * (x - (0.1484375L - 1.0L / 256.0L))); - h = 0.1484375L + index / 128.0; - index *= 4; - l = y - (h - x); - z = l * l; - sin_l = l*(ONE+z*(SSIN1+z*(SSIN2+z*(SSIN3+z*(SSIN4+z*SSIN5))))); - cos_l_m1 = z*(SCOS1+z*(SCOS2+z*(SCOS3+z*(SCOS4+z*SCOS5)))); - return __sincosl_table [index + SINCOSL_COS_HI] - + (__sincosl_table [index + SINCOSL_COS_LO] - - (__sincosl_table [index + SINCOSL_SIN_HI] * sin_l - - __sincosl_table [index + SINCOSL_COS_HI] * cos_l_m1)); - } -} diff --git a/sysdeps/ieee754/ldbl-96/k_sinl.c b/sysdeps/ieee754/ldbl-96/k_sinl.c deleted file mode 100644 index d56023aa8d..0000000000 --- a/sysdeps/ieee754/ldbl-96/k_sinl.c +++ /dev/null @@ -1,130 +0,0 @@ -/* Quad-precision floating point sine on <-pi/4,pi/4>. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Based on quad-precision sine by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The polynomials have not been optimized for extended-precision and - may contain more terms than needed. */ - -#include -#include -#include - -/* The polynomials have not been optimized for extended-precision and - may contain more terms than needed. */ - -static const long double c[] = { -#define ONE c[0] - 1.00000000000000000000000000000000000E+00L, - -/* cos x ~ ONE + x^2 ( SCOS1 + SCOS2 * x^2 + ... + SCOS4 * x^6 + SCOS5 * x^8 ) - x in <0,1/256> */ -#define SCOS1 c[1] -#define SCOS2 c[2] -#define SCOS3 c[3] -#define SCOS4 c[4] -#define SCOS5 c[5] --5.00000000000000000000000000000000000E-01L, - 4.16666666666666666666666666556146073E-02L, --1.38888888888888888888309442601939728E-03L, - 2.48015873015862382987049502531095061E-05L, --2.75573112601362126593516899592158083E-07L, - -/* sin x ~ ONE * x + x^3 ( SIN1 + SIN2 * x^2 + ... + SIN7 * x^12 + SIN8 * x^14 ) - x in <0,0.1484375> */ -#define SIN1 c[6] -#define SIN2 c[7] -#define SIN3 c[8] -#define SIN4 c[9] -#define SIN5 c[10] -#define SIN6 c[11] -#define SIN7 c[12] -#define SIN8 c[13] --1.66666666666666666666666666666666538e-01L, - 8.33333333333333333333333333307532934e-03L, --1.98412698412698412698412534478712057e-04L, - 2.75573192239858906520896496653095890e-06L, --2.50521083854417116999224301266655662e-08L, - 1.60590438367608957516841576404938118e-10L, --7.64716343504264506714019494041582610e-13L, - 2.81068754939739570236322404393398135e-15L, - -/* sin x ~ ONE * x + x^3 ( SSIN1 + SSIN2 * x^2 + ... + SSIN4 * x^6 + SSIN5 * x^8 ) - x in <0,1/256> */ -#define SSIN1 c[14] -#define SSIN2 c[15] -#define SSIN3 c[16] -#define SSIN4 c[17] -#define SSIN5 c[18] --1.66666666666666666666666666666666659E-01L, - 8.33333333333333333333333333146298442E-03L, --1.98412698412698412697726277416810661E-04L, - 2.75573192239848624174178393552189149E-06L, --2.50521016467996193495359189395805639E-08L, -}; - -#define SINCOSL_COS_HI 0 -#define SINCOSL_COS_LO 1 -#define SINCOSL_SIN_HI 2 -#define SINCOSL_SIN_LO 3 -extern const long double __sincosl_table[]; - -long double -__kernel_sinl(long double x, long double y, int iy) -{ - long double absx, h, l, z, sin_l, cos_l_m1; - int index; - - absx = fabsl (x); - if (absx < 0.1484375L) - { - /* Argument is small enough to approximate it by a Chebyshev - polynomial of degree 17. */ - if (absx < 0x1p-33L) - { - math_check_force_underflow (x); - if (!((int)x)) return x; /* generate inexact */ - } - z = x * x; - return x + (x * (z*(SIN1+z*(SIN2+z*(SIN3+z*(SIN4+ - z*(SIN5+z*(SIN6+z*(SIN7+z*SIN8))))))))); - } - else - { - /* So that we don't have to use too large polynomial, we find - l and h such that x = l + h, where fabsl(l) <= 1.0/256 with 83 - possible values for h. We look up cosl(h) and sinl(h) in - pre-computed tables, compute cosl(l) and sinl(l) using a - Chebyshev polynomial of degree 10(11) and compute - sinl(h+l) = sinl(h)cosl(l) + cosl(h)sinl(l). */ - index = (int) (128 * (absx - (0.1484375L - 1.0L / 256.0L))); - h = 0.1484375L + index / 128.0; - index *= 4; - if (iy) - l = (x < 0 ? -y : y) - (h - absx); - else - l = absx - h; - z = l * l; - sin_l = l*(ONE+z*(SSIN1+z*(SSIN2+z*(SSIN3+z*(SSIN4+z*SSIN5))))); - cos_l_m1 = z*(SCOS1+z*(SCOS2+z*(SCOS3+z*(SCOS4+z*SCOS5)))); - z = __sincosl_table [index + SINCOSL_SIN_HI] - + (__sincosl_table [index + SINCOSL_SIN_LO] - + (__sincosl_table [index + SINCOSL_SIN_HI] * cos_l_m1) - + (__sincosl_table [index + SINCOSL_COS_HI] * sin_l)); - return (x < 0) ? -z : z; - } -} diff --git a/sysdeps/ieee754/ldbl-96/k_tanl.c b/sysdeps/ieee754/ldbl-96/k_tanl.c deleted file mode 100644 index f8641d5ce4..0000000000 --- a/sysdeps/ieee754/ldbl-96/k_tanl.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - Long double expansions are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* __kernel_tanl( x, y, k ) - * kernel tan function on [-pi/4, pi/4], pi/4 ~ 0.7854 - * Input x is assumed to be bounded by ~pi/4 in magnitude. - * Input y is the tail of x. - * Input k indicates whether tan (if k=1) or - * -1/tan (if k= -1) is returned. - * - * Algorithm - * 1. Since tan(-x) = -tan(x), we need only to consider positive x. - * 2. if x < 2^-33, return x with inexact if x!=0. - * 3. tan(x) is approximated by a rational form x + x^3 / 3 + x^5 R(x^2) - * on [0,0.67433]. - * - * Note: tan(x+y) = tan(x) + tan'(x)*y - * ~ tan(x) + (1+x*x)*y - * Therefore, for better accuracy in computing tan(x+y), let - * r = x^3 * R(x^2) - * then - * tan(x+y) = x + (x^3 / 3 + (x^2 *(r+y)+y)) - * - * 4. For x in [0.67433,pi/4], let y = pi/4 - x, then - * tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y)) - * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) - */ - -#include -#include -#include -#include - -static const long double - one = 1.0L, - pio4hi = 0xc.90fdaa22168c235p-4L, - pio4lo = -0x3.b399d747f23e32ecp-68L, - - /* tan x = x + x^3 / 3 + x^5 T(x^2)/U(x^2) - 0 <= x <= 0.6743316650390625 - Peak relative error 8.0e-36 */ - TH = 3.333333333333333333333333333333333333333E-1L, - T0 = -1.813014711743583437742363284336855889393E7L, - T1 = 1.320767960008972224312740075083259247618E6L, - T2 = -2.626775478255838182468651821863299023956E4L, - T3 = 1.764573356488504935415411383687150199315E2L, - T4 = -3.333267763822178690794678978979803526092E-1L, - - U0 = -1.359761033807687578306772463253710042010E8L, - U1 = 6.494370630656893175666729313065113194784E7L, - U2 = -4.180787672237927475505536849168729386782E6L, - U3 = 8.031643765106170040139966622980914621521E4L, - U4 = -5.323131271912475695157127875560667378597E2L; - /* 1.000000000000000000000000000000000000000E0 */ - - -long double -__kernel_tanl (long double x, long double y, int iy) -{ - long double z, r, v, w, s; - long double absx = fabsl (x); - int sign; - - if (absx < 0x1p-33) - { - if ((int) x == 0) - { /* generate inexact */ - if (x == 0 && iy == -1) - return one / fabsl (x); - else if (iy == 1) - { - math_check_force_underflow_nonneg (absx); - return x; - } - else - return -one / x; - } - } - if (absx >= 0.6743316650390625L) - { - if (signbit (x)) - { - x = -x; - y = -y; - sign = -1; - } - else - sign = 1; - z = pio4hi - x; - w = pio4lo - y; - x = z + w; - y = 0.0; - } - z = x * x; - r = T0 + z * (T1 + z * (T2 + z * (T3 + z * T4))); - v = U0 + z * (U1 + z * (U2 + z * (U3 + z * (U4 + z)))); - r = r / v; - - s = z * x; - r = y + z * (s * r + y); - r += TH * s; - w = x + r; - if (absx >= 0.6743316650390625L) - { - v = (long double) iy; - w = (v - 2.0 * (x - (w * w / (w + v) - r))); - /* SIGN is set for arguments that reach this code, but not - otherwise, resulting in warnings that it may be used - uninitialized although in the cases where it is used it has - always been set. */ - DIAG_PUSH_NEEDS_COMMENT; - DIAG_IGNORE_NEEDS_COMMENT (4.8, "-Wmaybe-uninitialized"); - if (sign < 0) - w = -w; - DIAG_POP_NEEDS_COMMENT; - return w; - } - if (iy == 1) - return w; - else - return -1.0 / (x + r); -} diff --git a/sysdeps/ieee754/ldbl-96/ldbl2mpn.c b/sysdeps/ieee754/ldbl-96/ldbl2mpn.c deleted file mode 100644 index 425078e1de..0000000000 --- a/sysdeps/ieee754/ldbl-96/ldbl2mpn.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" -#include -#include -#include -#include - -/* Convert a `long double' in IEEE854 standard double-precision format to a - multi-precision integer representing the significand scaled up by its - number of bits (64 for long double) and an integral power of two - (MPN frexpl). */ - -mp_size_t -__mpn_extract_long_double (mp_ptr res_ptr, mp_size_t size, - int *expt, int *is_neg, - long double value) -{ - union ieee854_long_double u; - u.d = value; - - *is_neg = u.ieee.negative; - *expt = (int) u.ieee.exponent - IEEE854_LONG_DOUBLE_BIAS; - -#if BITS_PER_MP_LIMB == 32 - res_ptr[0] = u.ieee.mantissa1; /* Low-order 32 bits of fraction. */ - res_ptr[1] = u.ieee.mantissa0; /* High-order 32 bits. */ - #define N 2 -#elif BITS_PER_MP_LIMB == 64 - /* Hopefully the compiler will combine the two bitfield extracts - and this composition into just the original quadword extract. */ - res_ptr[0] = ((mp_limb_t) u.ieee.mantissa0 << 32) | u.ieee.mantissa1; - #define N 1 -#else - #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" -#endif - - if (u.ieee.exponent == 0) - { - /* A biased exponent of zero is a special case. - Either it is a zero or it is a denormal number. */ - if (res_ptr[0] == 0 && res_ptr[N - 1] == 0) /* Assumes N<=2. */ - /* It's zero. */ - *expt = 0; - else - { - /* It is a denormal number, meaning it has no implicit leading - one bit, and its exponent is in fact the format minimum. */ - int cnt; - - if (res_ptr[N - 1] != 0) - { - count_leading_zeros (cnt, res_ptr[N - 1]); - if (cnt != 0) - { -#if N == 2 - res_ptr[N - 1] = res_ptr[N - 1] << cnt - | (res_ptr[0] >> (BITS_PER_MP_LIMB - cnt)); - res_ptr[0] <<= cnt; -#else - res_ptr[N - 1] <<= cnt; -#endif - } - *expt = LDBL_MIN_EXP - 1 - cnt; - } - else - { - count_leading_zeros (cnt, res_ptr[0]); - res_ptr[N - 1] = res_ptr[0] << cnt; - res_ptr[0] = 0; - *expt = LDBL_MIN_EXP - 1 - BITS_PER_MP_LIMB - cnt; - } - } - } - - return N; -} diff --git a/sysdeps/ieee754/ldbl-96/lgamma_negl.c b/sysdeps/ieee754/ldbl-96/lgamma_negl.c deleted file mode 100644 index 36beb764be..0000000000 --- a/sysdeps/ieee754/ldbl-96/lgamma_negl.c +++ /dev/null @@ -1,418 +0,0 @@ -/* lgammal expanding around zeros. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static const long double lgamma_zeros[][2] = - { - { -0x2.74ff92c01f0d82acp+0L, 0x1.360cea0e5f8ed3ccp-68L }, - { -0x2.bf6821437b201978p+0L, -0x1.95a4b4641eaebf4cp-64L }, - { -0x3.24c1b793cb35efb8p+0L, -0xb.e699ad3d9ba6545p-68L }, - { -0x3.f48e2a8f85fca17p+0L, -0xd.4561291236cc321p-68L }, - { -0x4.0a139e16656030cp+0L, -0x3.9f0b0de18112ac18p-64L }, - { -0x4.fdd5de9bbabf351p+0L, -0xd.0aa4076988501d8p-68L }, - { -0x5.021a95fc2db64328p+0L, -0x2.4c56e595394decc8p-64L }, - { -0x5.ffa4bd647d0357ep+0L, 0x2.b129d342ce12071cp-64L }, - { -0x6.005ac9625f233b6p+0L, -0x7.c2d96d16385cb868p-68L }, - { -0x6.fff2fddae1bbff4p+0L, 0x2.9d949a3dc02de0cp-64L }, - { -0x7.000cff7b7f87adf8p+0L, 0x3.b7d23246787d54d8p-64L }, - { -0x7.fffe5fe05673c3c8p+0L, -0x2.9e82b522b0ca9d3p-64L }, - { -0x8.0001a01459fc9f6p+0L, -0xc.b3cec1cec857667p-68L }, - { -0x8.ffffd1c425e81p+0L, 0x3.79b16a8b6da6181cp-64L }, - { -0x9.00002e3bb47d86dp+0L, -0x6.d843fedc351deb78p-64L }, - { -0x9.fffffb606bdfdcdp+0L, -0x6.2ae77a50547c69dp-68L }, - { -0xa.0000049f93bb992p+0L, -0x7.b45d95e15441e03p-64L }, - { -0xa.ffffff9466e9f1bp+0L, -0x3.6dacd2adbd18d05cp-64L }, - { -0xb.0000006b9915316p+0L, 0x2.69a590015bf1b414p-64L }, - { -0xb.fffffff70893874p+0L, 0x7.821be533c2c36878p-64L }, - { -0xc.00000008f76c773p+0L, -0x1.567c0f0250f38792p-64L }, - { -0xc.ffffffff4f6dcf6p+0L, -0x1.7f97a5ffc757d548p-64L }, - { -0xd.00000000b09230ap+0L, 0x3.f997c22e46fc1c9p-64L }, - { -0xd.fffffffff36345bp+0L, 0x4.61e7b5c1f62ee89p-64L }, - { -0xe.000000000c9cba5p+0L, -0x4.5e94e75ec5718f78p-64L }, - { -0xe.ffffffffff28c06p+0L, -0xc.6604ef30371f89dp-68L }, - { -0xf.0000000000d73fap+0L, 0xc.6642f1bdf07a161p-68L }, - { -0xf.fffffffffff28cp+0L, -0x6.0c6621f512e72e5p-64L }, - { -0x1.000000000000d74p+4L, 0x6.0c6625ebdb406c48p-64L }, - { -0x1.0ffffffffffff356p+4L, -0x9.c47e7a93e1c46a1p-64L }, - { -0x1.1000000000000caap+4L, 0x9.c47e7a97778935ap-64L }, - { -0x1.1fffffffffffff4cp+4L, 0x1.3c31dcbecd2f74d4p-64L }, - { -0x1.20000000000000b4p+4L, -0x1.3c31dcbeca4c3b3p-64L }, - { -0x1.2ffffffffffffff6p+4L, -0x8.5b25cbf5f545ceep-64L }, - { -0x1.300000000000000ap+4L, 0x8.5b25cbf5f547e48p-64L }, - { -0x1.4p+4L, 0x7.950ae90080894298p-64L }, - { -0x1.4p+4L, -0x7.950ae9008089414p-64L }, - { -0x1.5p+4L, 0x5.c6e3bdb73d5c63p-68L }, - { -0x1.5p+4L, -0x5.c6e3bdb73d5c62f8p-68L }, - { -0x1.6p+4L, 0x4.338e5b6dfe14a518p-72L }, - { -0x1.6p+4L, -0x4.338e5b6dfe14a51p-72L }, - { -0x1.7p+4L, 0x2.ec368262c7033b3p-76L }, - { -0x1.7p+4L, -0x2.ec368262c7033b3p-76L }, - { -0x1.8p+4L, 0x1.f2cf01972f577ccap-80L }, - { -0x1.8p+4L, -0x1.f2cf01972f577ccap-80L }, - { -0x1.9p+4L, 0x1.3f3ccdd165fa8d4ep-84L }, - { -0x1.9p+4L, -0x1.3f3ccdd165fa8d4ep-84L }, - { -0x1.ap+4L, 0xc.4742fe35272cd1cp-92L }, - { -0x1.ap+4L, -0xc.4742fe35272cd1cp-92L }, - { -0x1.bp+4L, 0x7.46ac70b733a8c828p-96L }, - { -0x1.bp+4L, -0x7.46ac70b733a8c828p-96L }, - { -0x1.cp+4L, 0x4.2862898d42174ddp-100L }, - { -0x1.cp+4L, -0x4.2862898d42174ddp-100L }, - { -0x1.dp+4L, 0x2.4b3f31686b15af58p-104L }, - { -0x1.dp+4L, -0x2.4b3f31686b15af58p-104L }, - { -0x1.ep+4L, 0x1.3932c5047d60e60cp-108L }, - { -0x1.ep+4L, -0x1.3932c5047d60e60cp-108L }, - { -0x1.fp+4L, 0xa.1a6973c1fade217p-116L }, - { -0x1.fp+4L, -0xa.1a6973c1fade217p-116L }, - { -0x2p+4L, 0x5.0d34b9e0fd6f10b8p-120L }, - { -0x2p+4L, -0x5.0d34b9e0fd6f10b8p-120L }, - { -0x2.1p+4L, 0x2.73024a9ba1aa36a8p-124L }, - }; - -static const long double e_hi = 0x2.b7e151628aed2a6cp+0L; -static const long double e_lo = -0x1.408ea77f630b0c38p-64L; - -/* Coefficients B_2k / 2k(2k-1) of x^-(2k-1) in Stirling's - approximation to lgamma function. */ - -static const long double lgamma_coeff[] = - { - 0x1.5555555555555556p-4L, - -0xb.60b60b60b60b60bp-12L, - 0x3.4034034034034034p-12L, - -0x2.7027027027027028p-12L, - 0x3.72a3c5631fe46aep-12L, - -0x7.daac36664f1f208p-12L, - 0x1.a41a41a41a41a41ap-8L, - -0x7.90a1b2c3d4e5f708p-8L, - 0x2.dfd2c703c0cfff44p-4L, - -0x1.6476701181f39edcp+0L, - 0xd.672219167002d3ap+0L, - -0x9.cd9292e6660d55bp+4L, - 0x8.911a740da740da7p+8L, - -0x8.d0cc570e255bf5ap+12L, - 0xa.8d1044d3708d1c2p+16L, - -0xe.8844d8a169abbc4p+20L, - }; - -#define NCOEFF (sizeof (lgamma_coeff) / sizeof (lgamma_coeff[0])) - -/* Polynomial approximations to (|gamma(x)|-1)(x-n)/(x-x0), where n is - the integer end-point of the half-integer interval containing x and - x0 is the zero of lgamma in that half-integer interval. Each - polynomial is expressed in terms of x-xm, where xm is the midpoint - of the interval for which the polynomial applies. */ - -static const long double poly_coeff[] = - { - /* Interval [-2.125, -2] (polynomial degree 13). */ - -0x1.0b71c5c54d42eb6cp+0L, - -0xc.73a1dc05f349517p-4L, - -0x1.ec841408528b6baep-4L, - -0xe.37c9da26fc3b492p-4L, - -0x1.03cd87c5178991ap-4L, - -0xe.ae9ada65ece2f39p-4L, - 0x9.b1185505edac18dp-8L, - -0xe.f28c130b54d3cb2p-4L, - 0x2.6ec1666cf44a63bp-4L, - -0xf.57cb2774193bbd5p-4L, - 0x4.5ae64671a41b1c4p-4L, - -0xf.f48ea8b5bd3a7cep-4L, - 0x6.7d73788a8d30ef58p-4L, - -0x1.11e0e4b506bd272ep+0L, - /* Interval [-2.25, -2.125] (polynomial degree 13). */ - -0xf.2930890d7d675a8p-4L, - -0xc.a5cfde054eab5cdp-4L, - 0x3.9c9e0fdebb0676e4p-4L, - -0x1.02a5ad35605f0d8cp+0L, - 0x9.6e9b1185d0b92edp-4L, - -0x1.4d8332f3d6a3959p+0L, - 0x1.1c0c8cacd0ced3eap+0L, - -0x1.c9a6f592a67b1628p+0L, - 0x1.d7e9476f96aa4bd6p+0L, - -0x2.921cedb488bb3318p+0L, - 0x2.e8b3fd6ca193e4c8p+0L, - -0x3.cb69d9d6628e4a2p+0L, - 0x4.95f12c73b558638p+0L, - -0x5.d392d0b97c02ab6p+0L, - /* Interval [-2.375, -2.25] (polynomial degree 14). */ - -0xd.7d28d505d618122p-4L, - -0xe.69649a304098532p-4L, - 0xb.0d74a2827d055c5p-4L, - -0x1.924b09228531c00ep+0L, - 0x1.d49b12bccee4f888p+0L, - -0x3.0898bb7dbb21e458p+0L, - 0x4.207a6cad6fa10a2p+0L, - -0x6.39ee630b46093ad8p+0L, - 0x8.e2e25211a3fb5ccp+0L, - -0xd.0e85ccd8e79c08p+0L, - 0x1.2e45882bc17f9e16p+4L, - -0x1.b8b6e841815ff314p+4L, - 0x2.7ff8bf7504fa04dcp+4L, - -0x3.c192e9c903352974p+4L, - 0x5.8040b75f4ef07f98p+4L, - /* Interval [-2.5, -2.375] (polynomial degree 15). */ - -0xb.74ea1bcfff94b2cp-4L, - -0x1.2a82bd590c375384p+0L, - 0x1.88020f828b968634p+0L, - -0x3.32279f040eb80fa4p+0L, - 0x5.57ac825175943188p+0L, - -0x9.c2aedcfe10f129ep+0L, - 0x1.12c132f2df02881ep+4L, - -0x1.ea94e26c0b6ffa6p+4L, - 0x3.66b4a8bb0290013p+4L, - -0x6.0cf735e01f5990bp+4L, - 0xa.c10a8db7ae99343p+4L, - -0x1.31edb212b315feeap+8L, - 0x2.1f478592298b3ebp+8L, - -0x3.c546da5957ace6ccp+8L, - 0x7.0e3d2a02579ba4bp+8L, - -0xc.b1ea961c39302f8p+8L, - /* Interval [-2.625, -2.5] (polynomial degree 16). */ - -0x3.d10108c27ebafad4p-4L, - 0x1.cd557caff7d2b202p+0L, - 0x3.819b4856d3995034p+0L, - 0x6.8505cbad03dd3bd8p+0L, - 0xb.c1b2e653aa0b924p+0L, - 0x1.50a53a38f05f72d6p+4L, - 0x2.57ae00cbd06efb34p+4L, - 0x4.2b1563077a577e9p+4L, - 0x7.6989ed790138a7f8p+4L, - 0xd.2dd28417b4f8406p+4L, - 0x1.76e1b71f0710803ap+8L, - 0x2.9a7a096254ac032p+8L, - 0x4.a0e6109e2a039788p+8L, - 0x8.37ea17a93c877b2p+8L, - 0xe.9506a641143612bp+8L, - 0x1.b680ed4ea386d52p+12L, - 0x3.28a2130c8de0ae84p+12L, - /* Interval [-2.75, -2.625] (polynomial degree 15). */ - -0x6.b5d252a56e8a7548p-4L, - 0x1.28d60383da3ac72p+0L, - 0x1.db6513ada8a6703ap+0L, - 0x2.e217118f9d34aa7cp+0L, - 0x4.450112c5cbd6256p+0L, - 0x6.4af99151e972f92p+0L, - 0x9.2db598b5b183cd6p+0L, - 0xd.62bef9c9adcff6ap+0L, - 0x1.379f290d743d9774p+4L, - 0x1.c58271ff823caa26p+4L, - 0x2.93a871b87a06e73p+4L, - 0x3.bf9db66103d7ec98p+4L, - 0x5.73247c111fbf197p+4L, - 0x7.ec8b9973ba27d008p+4L, - 0xb.eca5f9619b39c03p+4L, - 0x1.18f2e46411c78b1cp+8L, - /* Interval [-2.875, -2.75] (polynomial degree 14). */ - -0x8.a41b1e4f36ff88ep-4L, - 0xc.da87d3b69dc0f34p-4L, - 0x1.1474ad5c36158ad2p+0L, - 0x1.761ecb90c5553996p+0L, - 0x1.d279bff9ae234f8p+0L, - 0x2.4e5d0055a16c5414p+0L, - 0x2.d57545a783902f8cp+0L, - 0x3.8514eec263aa9f98p+0L, - 0x4.5235e338245f6fe8p+0L, - 0x5.562b1ef200b256c8p+0L, - 0x6.8ec9782b93bd565p+0L, - 0x8.14baf4836483508p+0L, - 0x9.efaf35dc712ea79p+0L, - 0xc.8431f6a226507a9p+0L, - 0xf.80358289a768401p+0L, - /* Interval [-3, -2.875] (polynomial degree 13). */ - -0xa.046d667e468f3e4p-4L, - 0x9.70b88dcc006c216p-4L, - 0xa.a8a39421c86ce9p-4L, - 0xd.2f4d1363f321e89p-4L, - 0xd.ca9aa1a3ab2f438p-4L, - 0xf.cf09c31f05d02cbp-4L, - 0x1.04b133a195686a38p+0L, - 0x1.22b54799d0072024p+0L, - 0x1.2c5802b869a36ae8p+0L, - 0x1.4aadf23055d7105ep+0L, - 0x1.5794078dd45c55d6p+0L, - 0x1.7759069da18bcf0ap+0L, - 0x1.8e672cefa4623f34p+0L, - 0x1.b2acfa32c17145e6p+0L, - }; - -static const size_t poly_deg[] = - { - 13, - 13, - 14, - 15, - 16, - 15, - 14, - 13, - }; - -static const size_t poly_end[] = - { - 13, - 27, - 42, - 58, - 75, - 91, - 106, - 120, - }; - -/* Compute sin (pi * X) for -0.25 <= X <= 0.5. */ - -static long double -lg_sinpi (long double x) -{ - if (x <= 0.25L) - return __sinl (M_PIl * x); - else - return __cosl (M_PIl * (0.5L - x)); -} - -/* Compute cos (pi * X) for -0.25 <= X <= 0.5. */ - -static long double -lg_cospi (long double x) -{ - if (x <= 0.25L) - return __cosl (M_PIl * x); - else - return __sinl (M_PIl * (0.5L - x)); -} - -/* Compute cot (pi * X) for -0.25 <= X <= 0.5. */ - -static long double -lg_cotpi (long double x) -{ - return lg_cospi (x) / lg_sinpi (x); -} - -/* Compute lgamma of a negative argument -33 < X < -2, setting - *SIGNGAMP accordingly. */ - -long double -__lgamma_negl (long double x, int *signgamp) -{ - /* Determine the half-integer region X lies in, handle exact - integers and determine the sign of the result. */ - int i = __floorl (-2 * x); - if ((i & 1) == 0 && i == -2 * x) - return 1.0L / 0.0L; - long double xn = ((i & 1) == 0 ? -i / 2 : (-i - 1) / 2); - i -= 4; - *signgamp = ((i & 2) == 0 ? -1 : 1); - - SET_RESTORE_ROUNDL (FE_TONEAREST); - - /* Expand around the zero X0 = X0_HI + X0_LO. */ - long double x0_hi = lgamma_zeros[i][0], x0_lo = lgamma_zeros[i][1]; - long double xdiff = x - x0_hi - x0_lo; - - /* For arguments in the range -3 to -2, use polynomial - approximations to an adjusted version of the gamma function. */ - if (i < 2) - { - int j = __floorl (-8 * x) - 16; - long double xm = (-33 - 2 * j) * 0.0625L; - long double x_adj = x - xm; - size_t deg = poly_deg[j]; - size_t end = poly_end[j]; - long double g = poly_coeff[end]; - for (size_t j = 1; j <= deg; j++) - g = g * x_adj + poly_coeff[end - j]; - return __log1pl (g * xdiff / (x - xn)); - } - - /* The result we want is log (sinpi (X0) / sinpi (X)) - + log (gamma (1 - X0) / gamma (1 - X)). */ - long double x_idiff = fabsl (xn - x), x0_idiff = fabsl (xn - x0_hi - x0_lo); - long double log_sinpi_ratio; - if (x0_idiff < x_idiff * 0.5L) - /* Use log not log1p to avoid inaccuracy from log1p of arguments - close to -1. */ - log_sinpi_ratio = __ieee754_logl (lg_sinpi (x0_idiff) - / lg_sinpi (x_idiff)); - else - { - /* Use log1p not log to avoid inaccuracy from log of arguments - close to 1. X0DIFF2 has positive sign if X0 is further from - XN than X is from XN, negative sign otherwise. */ - long double x0diff2 = ((i & 1) == 0 ? xdiff : -xdiff) * 0.5L; - long double sx0d2 = lg_sinpi (x0diff2); - long double cx0d2 = lg_cospi (x0diff2); - log_sinpi_ratio = __log1pl (2 * sx0d2 - * (-sx0d2 + cx0d2 * lg_cotpi (x_idiff))); - } - - long double log_gamma_ratio; - long double y0 = 1 - x0_hi; - long double y0_eps = -x0_hi + (1 - y0) - x0_lo; - long double y = 1 - x; - long double y_eps = -x + (1 - y); - /* We now wish to compute LOG_GAMMA_RATIO - = log (gamma (Y0 + Y0_EPS) / gamma (Y + Y_EPS)). XDIFF - accurately approximates the difference Y0 + Y0_EPS - Y - - Y_EPS. Use Stirling's approximation. First, we may need to - adjust into the range where Stirling's approximation is - sufficiently accurate. */ - long double log_gamma_adj = 0; - if (i < 8) - { - int n_up = (9 - i) / 2; - long double ny0, ny0_eps, ny, ny_eps; - ny0 = y0 + n_up; - ny0_eps = y0 - (ny0 - n_up) + y0_eps; - y0 = ny0; - y0_eps = ny0_eps; - ny = y + n_up; - ny_eps = y - (ny - n_up) + y_eps; - y = ny; - y_eps = ny_eps; - long double prodm1 = __lgamma_productl (xdiff, y - n_up, y_eps, n_up); - log_gamma_adj = -__log1pl (prodm1); - } - long double log_gamma_high - = (xdiff * __log1pl ((y0 - e_hi - e_lo + y0_eps) / e_hi) - + (y - 0.5L + y_eps) * __log1pl (xdiff / y) + log_gamma_adj); - /* Compute the sum of (B_2k / 2k(2k-1))(Y0^-(2k-1) - Y^-(2k-1)). */ - long double y0r = 1 / y0, yr = 1 / y; - long double y0r2 = y0r * y0r, yr2 = yr * yr; - long double rdiff = -xdiff / (y * y0); - long double bterm[NCOEFF]; - long double dlast = rdiff, elast = rdiff * yr * (yr + y0r); - bterm[0] = dlast * lgamma_coeff[0]; - for (size_t j = 1; j < NCOEFF; j++) - { - long double dnext = dlast * y0r2 + elast; - long double enext = elast * yr2; - bterm[j] = dnext * lgamma_coeff[j]; - dlast = dnext; - elast = enext; - } - long double log_gamma_low = 0; - for (size_t j = 0; j < NCOEFF; j++) - log_gamma_low += bterm[NCOEFF - 1 - j]; - log_gamma_ratio = log_gamma_high + log_gamma_low; - - return log_sinpi_ratio + log_gamma_ratio; -} diff --git a/sysdeps/ieee754/ldbl-96/lgamma_product.c b/sysdeps/ieee754/ldbl-96/lgamma_product.c deleted file mode 100644 index 46be5df762..0000000000 --- a/sysdeps/ieee754/ldbl-96/lgamma_product.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Compute a product of 1 + (T/X), 1 + (T/(X+1)), .... - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Compute the product of 1 + (T / (X + X_EPS)), 1 + (T / (X + X_EPS + - 1)), ..., 1 + (T / (X + X_EPS + N - 1)), minus 1. X is such that - all the values X + 1, ..., X + N - 1 are exactly representable, and - X_EPS / X is small enough that factors quadratic in it can be - neglected. */ - -double -__lgamma_product (double t, double x, double x_eps, int n) -{ - long double x_full = (long double) x + (long double) x_eps; - long double ret = 0; - for (int i = 0; i < n; i++) - ret += (t / (x_full + i)) * (1 + ret); - return ret; -} diff --git a/sysdeps/ieee754/ldbl-96/lgamma_productl.c b/sysdeps/ieee754/ldbl-96/lgamma_productl.c deleted file mode 100644 index cd6f2f3156..0000000000 --- a/sysdeps/ieee754/ldbl-96/lgamma_productl.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Compute a product of 1 + (T/X), 1 + (T/(X+1)), .... - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Compute the product of 1 + (T / (X + X_EPS)), 1 + (T / (X + X_EPS + - 1)), ..., 1 + (T / (X + X_EPS + N - 1)), minus 1. X is such that - all the values X + 1, ..., X + N - 1 are exactly representable, and - X_EPS / X is small enough that factors quadratic in it can be - neglected. */ - -long double -__lgamma_productl (long double t, long double x, long double x_eps, int n) -{ - long double ret = 0, ret_eps = 0; - for (int i = 0; i < n; i++) - { - long double xi = x + i; - long double quot = t / xi; - long double mhi, mlo; - mul_splitl (&mhi, &mlo, quot, xi); - long double quot_lo = (t - mhi - mlo) / xi - t * x_eps / (xi * xi); - /* We want (1 + RET + RET_EPS) * (1 + QUOT + QUOT_LO) - 1. */ - long double rhi, rlo; - mul_splitl (&rhi, &rlo, ret, quot); - long double rpq = ret + quot; - long double rpq_eps = (ret - rpq) + quot; - long double nret = rpq + rhi; - long double nret_eps = (rpq - nret) + rhi; - ret_eps += (rpq_eps + nret_eps + rlo + ret_eps * quot - + quot_lo + quot_lo * (ret + ret_eps)); - ret = nret; - } - return ret + ret_eps; -} diff --git a/sysdeps/ieee754/ldbl-96/math_ldbl.h b/sysdeps/ieee754/ldbl-96/math_ldbl.h deleted file mode 100644 index ef897065b7..0000000000 --- a/sysdeps/ieee754/ldbl-96/math_ldbl.h +++ /dev/null @@ -1,120 +0,0 @@ -/* Manipulation of the bit representation of 'long double' quantities. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_LDBL_H_ -#define _MATH_LDBL_H_ 1 - -#include -#include - -/* A union which permits us to convert between a long double and - three 32 bit ints. */ - -#if __FLOAT_WORD_ORDER == __BIG_ENDIAN - -typedef union -{ - long double value; - struct - { - int sign_exponent:16; - unsigned int empty:16; - uint32_t msw; - uint32_t lsw; - } parts; -} ieee_long_double_shape_type; - -#endif - -#if __FLOAT_WORD_ORDER == __LITTLE_ENDIAN - -typedef union -{ - long double value; - struct - { - uint32_t lsw; - uint32_t msw; - int sign_exponent:16; - unsigned int empty:16; - } parts; -} ieee_long_double_shape_type; - -#endif - -/* Get three 32 bit ints from a double. */ - -#define GET_LDOUBLE_WORDS(exp,ix0,ix1,d) \ -do { \ - ieee_long_double_shape_type ew_u; \ - ew_u.value = (d); \ - (exp) = ew_u.parts.sign_exponent; \ - (ix0) = ew_u.parts.msw; \ - (ix1) = ew_u.parts.lsw; \ -} while (0) - -/* Set a double from two 32 bit ints. */ - -#define SET_LDOUBLE_WORDS(d,exp,ix0,ix1) \ -do { \ - ieee_long_double_shape_type iw_u; \ - iw_u.parts.sign_exponent = (exp); \ - iw_u.parts.msw = (ix0); \ - iw_u.parts.lsw = (ix1); \ - (d) = iw_u.value; \ -} while (0) - -/* Get the more significant 32 bits of a long double mantissa. */ - -#define GET_LDOUBLE_MSW(v,d) \ -do { \ - ieee_long_double_shape_type sh_u; \ - sh_u.value = (d); \ - (v) = sh_u.parts.msw; \ -} while (0) - -/* Set the more significant 32 bits of a long double mantissa from an int. */ - -#define SET_LDOUBLE_MSW(d,v) \ -do { \ - ieee_long_double_shape_type sh_u; \ - sh_u.value = (d); \ - sh_u.parts.msw = (v); \ - (d) = sh_u.value; \ -} while (0) - -/* Get int from the exponent of a long double. */ - -#define GET_LDOUBLE_EXP(exp,d) \ -do { \ - ieee_long_double_shape_type ge_u; \ - ge_u.value = (d); \ - (exp) = ge_u.parts.sign_exponent; \ -} while (0) - -/* Set exponent of a long double from an int. */ - -#define SET_LDOUBLE_EXP(d,exp) \ -do { \ - ieee_long_double_shape_type se_u; \ - se_u.value = (d); \ - se_u.parts.sign_exponent = (exp); \ - (d) = se_u.value; \ -} while (0) - -#endif /* math_ldbl.h */ diff --git a/sysdeps/ieee754/ldbl-96/mpn2ldbl.c b/sysdeps/ieee754/ldbl-96/mpn2ldbl.c deleted file mode 100644 index 715efb40b2..0000000000 --- a/sysdeps/ieee754/ldbl-96/mpn2ldbl.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "gmp.h" -#include "gmp-impl.h" -#include -#include -#include - -/* Convert a multi-precision integer of the needed number of bits (64 for - long double) and an integral power of two to a `long double' in IEEE854 - extended-precision format. */ - -long double -__mpn_construct_long_double (mp_srcptr frac_ptr, int expt, int sign) -{ - union ieee854_long_double u; - - u.ieee.negative = sign; - u.ieee.exponent = expt + IEEE854_LONG_DOUBLE_BIAS; -#if BITS_PER_MP_LIMB == 32 - u.ieee.mantissa1 = frac_ptr[0]; - u.ieee.mantissa0 = frac_ptr[1]; -#elif BITS_PER_MP_LIMB == 64 - u.ieee.mantissa1 = frac_ptr[0] & (((mp_limb_t) 1 << 32) - 1); - u.ieee.mantissa0 = frac_ptr[0] >> 32; -#else - #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" -#endif - - return u.d; -} diff --git a/sysdeps/ieee754/ldbl-96/printf_fphex.c b/sysdeps/ieee754/ldbl-96/printf_fphex.c deleted file mode 100644 index 0df9462d91..0000000000 --- a/sysdeps/ieee754/ldbl-96/printf_fphex.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Print floating point number in hexadecimal notation according to ISO C99. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef LONG_DOUBLE_DENORM_BIAS -# define LONG_DOUBLE_DENORM_BIAS (IEEE854_LONG_DOUBLE_BIAS - 1) -#endif - -#define PRINT_FPHEX_LONG_DOUBLE \ -do { \ - /* The "strange" 80 bit format on ix86 and m68k has an explicit \ - leading digit in the 64 bit mantissa. */ \ - unsigned long long int num; \ - union ieee854_long_double u; \ - u.d = fpnum.ldbl; \ - \ - assert (sizeof (long double) == 12); \ - \ - num = (((unsigned long long int) u.ieee.mantissa0) << 32 \ - | u.ieee.mantissa1); \ - \ - zero_mantissa = num == 0; \ - \ - if (sizeof (unsigned long int) > 6) \ - { \ - numstr = _itoa_word (num, numbuf + sizeof numbuf, 16, \ - info->spec == 'A'); \ - wnumstr = _itowa_word (num, \ - wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t),\ - 16, info->spec == 'A'); \ - } \ - else \ - { \ - numstr = _itoa (num, numbuf + sizeof numbuf, 16, info->spec == 'A');\ - wnumstr = _itowa (num, \ - wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t), \ - 16, info->spec == 'A'); \ - } \ - \ - /* Fill with zeroes. */ \ - while (numstr > numbuf + (sizeof numbuf - 64 / 4)) \ - { \ - *--numstr = '0'; \ - *--wnumstr = L'0'; \ - } \ - \ - /* We use a full nibble for the leading digit. */ \ - leading = *numstr++; \ - wnumstr++; \ - \ - /* We have 3 bits from the mantissa in the leading nibble. \ - Therefore we are here using `IEEE854_LONG_DOUBLE_BIAS + 3'. */ \ - exponent = u.ieee.exponent; \ - \ - if (exponent == 0) \ - { \ - if (zero_mantissa) \ - expnegative = 0; \ - else \ - { \ - /* This is a denormalized number. */ \ - expnegative = 1; \ - /* This is a hook for the m68k long double format, where the \ - exponent bias is the same for normalized and denormalized \ - numbers. */ \ - exponent = LONG_DOUBLE_DENORM_BIAS + 3; \ - } \ - } \ - else if (exponent >= IEEE854_LONG_DOUBLE_BIAS + 3) \ - { \ - expnegative = 0; \ - exponent -= IEEE854_LONG_DOUBLE_BIAS + 3; \ - } \ - else \ - { \ - expnegative = 1; \ - exponent = -(exponent - (IEEE854_LONG_DOUBLE_BIAS + 3)); \ - } \ -} while (0) - -#include diff --git a/sysdeps/ieee754/ldbl-96/s_asinhl.c b/sysdeps/ieee754/ldbl-96/s_asinhl.c deleted file mode 100644 index da49ea5988..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_asinhl.c +++ /dev/null @@ -1,65 +0,0 @@ -/* s_asinhl.c -- long double version of s_asinh.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* asinhl(x) - * Method : - * Based on - * asinhl(x) = signl(x) * logl [ |x| + sqrtl(x*x+1) ] - * we have - * asinhl(x) := x if 1+x*x=1, - * := signl(x)*(logl(x)+ln2)) for large |x|, else - * := signl(x)*logl(2|x|+1/(|x|+sqrtl(x*x+1))) if|x|>2, else - * := signl(x)*log1pl(|x| + x^2/(1 + sqrtl(1+x^2))) - */ - -#include -#include -#include - -static const long double -one = 1.000000000000000000000e+00L, /* 0x3FFF, 0x00000000, 0x00000000 */ -ln2 = 6.931471805599453094287e-01L, /* 0x3FFE, 0xB17217F7, 0xD1CF79AC */ -huge= 1.000000000000000000e+4900L; - -long double __asinhl(long double x) -{ - long double t,w; - int32_t hx,ix; - GET_LDOUBLE_EXP(hx,x); - ix = hx&0x7fff; - if(__builtin_expect(ix< 0x3fde, 0)) { /* |x|<2**-34 */ - math_check_force_underflow (x); - if(huge+x>one) return x; /* return x inexact except 0 */ - } - if(__builtin_expect(ix>0x4020,0)) { /* |x| > 2**34 */ - if(ix==0x7fff) return x+x; /* x is inf or NaN */ - w = __ieee754_logl(fabsl(x))+ln2; - } else { - long double xa = fabsl(x); - if (ix>0x4000) { /* 2**34 > |x| > 2.0 */ - w = __ieee754_logl(2.0*xa+one/(__ieee754_sqrtl(xa*xa+one)+xa)); - } else { /* 2.0 > |x| > 2**-28 */ - t = xa*xa; - w =__log1pl(xa+t/(one+__ieee754_sqrtl(one+t))); - } - } - return __copysignl(w, x); -} -weak_alias (__asinhl, asinhl) diff --git a/sysdeps/ieee754/ldbl-96/s_cbrtl.c b/sysdeps/ieee754/ldbl-96/s_cbrtl.c deleted file mode 100644 index 5712fce2e9..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_cbrtl.c +++ /dev/null @@ -1,70 +0,0 @@ -/* Compute cubic root of double value. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Dirk Alboth and - Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -#define CBRT2 1.2599210498948731648 /* 2^(1/3) */ -#define SQR_CBRT2 1.5874010519681994748 /* 2^(2/3) */ - -/* We don't use long double values here since U need not be computed - with full precision. */ -static const double factor[5] = -{ - 1.0 / SQR_CBRT2, - 1.0 / CBRT2, - 1.0, - CBRT2, - SQR_CBRT2 -}; - -static const long double third = 0.3333333333333333333333333L; - -long double -__cbrtl (long double x) -{ - long double xm, u; - int xe; - - /* Reduce X. XM now is an range 1.0 to 0.5. */ - xm = __frexpl (fabsl (x), &xe); - - /* If X is not finite or is null return it (with raising exceptions - if necessary. - Note: *Our* version of `frexp' sets XE to zero if the argument is - Inf or NaN. This is not portable but faster. */ - if (xe == 0 && fpclassify (x) <= FP_ZERO) - return x + x; - - u = (((-1.34661104733595206551E-1 * xm - + 5.46646013663955245034E-1) * xm - - 9.54382247715094465250E-1) * xm - + 1.13999833547172932737E0) * xm - + 4.02389795645447521269E-1; - - u *= factor[2 + xe % 3]; - u = __ldexpl (x > 0.0 ? u : -u, xe / 3); - - u -= (u - (x / (u * u))) * third; - u -= (u - (x / (u * u))) * third; - return u; -} -weak_alias (__cbrtl, cbrtl) diff --git a/sysdeps/ieee754/ldbl-96/s_copysignl.c b/sysdeps/ieee754/ldbl-96/s_copysignl.c deleted file mode 100644 index b1c442452f..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_copysignl.c +++ /dev/null @@ -1,38 +0,0 @@ -/* s_copysignl.c -- long double version of s_copysign.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * copysignl(long double x, long double y) - * copysignl(x,y) returns a value with the magnitude of x and - * with the sign bit of y. - */ - -#include -#include - -long double __copysignl(long double x, long double y) -{ - u_int32_t es1,es2; - GET_LDOUBLE_EXP(es1,x); - GET_LDOUBLE_EXP(es2,y); - SET_LDOUBLE_EXP(x,(es1&0x7fff)|(es2&0x8000)); - return x; -} -weak_alias (__copysignl, copysignl) diff --git a/sysdeps/ieee754/ldbl-96/s_cosl.c b/sysdeps/ieee754/ldbl-96/s_cosl.c deleted file mode 100644 index 8b0b7d3cc2..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_cosl.c +++ /dev/null @@ -1,88 +0,0 @@ -/* s_cosl.c -- long double version of s_cos.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* cosl(x) - * Return cosine function of x. - * - * kernel function: - * __kernel_sinl ... sine function on [-pi/4,pi/4] - * __kernel_cosl ... cosine function on [-pi/4,pi/4] - * __ieee754_rem_pio2l ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include -#include -#include - -long double __cosl(long double x) -{ - long double y[2],z=0.0; - int32_t n, se, i0, i1; - - /* High word of x. */ - GET_LDOUBLE_WORDS(se,i0,i1,x); - - /* |x| ~< pi/4 */ - se &= 0x7fff; - if(se < 0x3ffe || (se == 0x3ffe && i0 <= 0xc90fdaa2)) - return __kernel_cosl(x,z); - - /* cos(Inf or NaN) is NaN */ - else if (se==0x7fff) { - if (i1 == 0 && i0 == 0x80000000) - __set_errno (EDOM); - return x-x; - } - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2l(x,y); - switch(n&3) { - case 0: return __kernel_cosl(y[0],y[1]); - case 1: return -__kernel_sinl(y[0],y[1],1); - case 2: return -__kernel_cosl(y[0],y[1]); - default: - return __kernel_sinl(y[0],y[1],1); - } - } -} -weak_alias (__cosl, cosl) diff --git a/sysdeps/ieee754/ldbl-96/s_erfl.c b/sysdeps/ieee754/ldbl-96/s_erfl.c deleted file mode 100644 index d00adb1000..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_erfl.c +++ /dev/null @@ -1,451 +0,0 @@ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* Long double expansions are - Copyright (C) 2001 Stephen L. Moshier - and are incorporated herein by permission of the author. The author - reserves the right to distribute this material elsewhere under different - copying permissions. These modifications are distributed here under - the following terms: - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see - . */ - -/* double erf(double x) - * double erfc(double x) - * x - * 2 |\ - * erf(x) = --------- | exp(-t*t)dt - * sqrt(pi) \| - * 0 - * - * erfc(x) = 1-erf(x) - * Note that - * erf(-x) = -erf(x) - * erfc(-x) = 2 - erfc(x) - * - * Method: - * 1. For |x| in [0, 0.84375] - * erf(x) = x + x*R(x^2) - * erfc(x) = 1 - erf(x) if x in [-.84375,0.25] - * = 0.5 + ((0.5-x)-x*R) if x in [0.25,0.84375] - * Remark. The formula is derived by noting - * erf(x) = (2/sqrt(pi))*(x - x^3/3 + x^5/10 - x^7/42 + ....) - * and that - * 2/sqrt(pi) = 1.128379167095512573896158903121545171688 - * is close to one. The interval is chosen because the fix - * point of erf(x) is near 0.6174 (i.e., erf(x)=x when x is - * near 0.6174), and by some experiment, 0.84375 is chosen to - * guarantee the error is less than one ulp for erf. - * - * 2. For |x| in [0.84375,1.25], let s = |x| - 1, and - * c = 0.84506291151 rounded to single (24 bits) - * erf(x) = sign(x) * (c + P1(s)/Q1(s)) - * erfc(x) = (1-c) - P1(s)/Q1(s) if x > 0 - * 1+(c+P1(s)/Q1(s)) if x < 0 - * Remark: here we use the taylor series expansion at x=1. - * erf(1+s) = erf(1) + s*Poly(s) - * = 0.845.. + P1(s)/Q1(s) - * Note that |P1/Q1|< 0.078 for x in [0.84375,1.25] - * - * 3. For x in [1.25,1/0.35(~2.857143)], - * erfc(x) = (1/x)*exp(-x*x-0.5625+R1(z)/S1(z)) - * z=1/x^2 - * erf(x) = 1 - erfc(x) - * - * 4. For x in [1/0.35,107] - * erfc(x) = (1/x)*exp(-x*x-0.5625+R2/S2) if x > 0 - * = 2.0 - (1/x)*exp(-x*x-0.5625+R2(z)/S2(z)) - * if -6.666 x >= 107 - * erf(x) = sign(x) *(1 - tiny) (raise inexact) - * erfc(x) = tiny*tiny (raise underflow) if x > 0 - * = 2 - tiny if x<0 - * - * 7. Special case: - * erf(0) = 0, erf(inf) = 1, erf(-inf) = -1, - * erfc(0) = 1, erfc(inf) = 0, erfc(-inf) = 2, - * erfc/erf(NaN) is NaN - */ - - -#include -#include -#include -#include - -static const long double -tiny = 1e-4931L, - half = 0.5L, - one = 1.0L, - two = 2.0L, - /* c = (float)0.84506291151 */ - erx = 0.845062911510467529296875L, -/* - * Coefficients for approximation to erf on [0,0.84375] - */ - /* 2/sqrt(pi) - 1 */ - efx = 1.2837916709551257389615890312154517168810E-1L, - - pp[6] = { - 1.122751350964552113068262337278335028553E6L, - -2.808533301997696164408397079650699163276E6L, - -3.314325479115357458197119660818768924100E5L, - -6.848684465326256109712135497895525446398E4L, - -2.657817695110739185591505062971929859314E3L, - -1.655310302737837556654146291646499062882E2L, - }, - - qq[6] = { - 8.745588372054466262548908189000448124232E6L, - 3.746038264792471129367533128637019611485E6L, - 7.066358783162407559861156173539693900031E5L, - 7.448928604824620999413120955705448117056E4L, - 4.511583986730994111992253980546131408924E3L, - 1.368902937933296323345610240009071254014E2L, - /* 1.000000000000000000000000000000000000000E0 */ - }, - -/* - * Coefficients for approximation to erf in [0.84375,1.25] - */ -/* erf(x+1) = 0.845062911510467529296875 + pa(x)/qa(x) - -0.15625 <= x <= +.25 - Peak relative error 8.5e-22 */ - - pa[8] = { - -1.076952146179812072156734957705102256059E0L, - 1.884814957770385593365179835059971587220E2L, - -5.339153975012804282890066622962070115606E1L, - 4.435910679869176625928504532109635632618E1L, - 1.683219516032328828278557309642929135179E1L, - -2.360236618396952560064259585299045804293E0L, - 1.852230047861891953244413872297940938041E0L, - 9.394994446747752308256773044667843200719E-2L, - }, - - qa[7] = { - 4.559263722294508998149925774781887811255E2L, - 3.289248982200800575749795055149780689738E2L, - 2.846070965875643009598627918383314457912E2L, - 1.398715859064535039433275722017479994465E2L, - 6.060190733759793706299079050985358190726E1L, - 2.078695677795422351040502569964299664233E1L, - 4.641271134150895940966798357442234498546E0L, - /* 1.000000000000000000000000000000000000000E0 */ - }, - -/* - * Coefficients for approximation to erfc in [1.25,1/0.35] - */ -/* erfc(1/x) = x exp (-1/x^2 - 0.5625 + ra(x^2)/sa(x^2)) - 1/2.85711669921875 < 1/x < 1/1.25 - Peak relative error 3.1e-21 */ - - ra[] = { - 1.363566591833846324191000679620738857234E-1L, - 1.018203167219873573808450274314658434507E1L, - 1.862359362334248675526472871224778045594E2L, - 1.411622588180721285284945138667933330348E3L, - 5.088538459741511988784440103218342840478E3L, - 8.928251553922176506858267311750789273656E3L, - 7.264436000148052545243018622742770549982E3L, - 2.387492459664548651671894725748959751119E3L, - 2.220916652813908085449221282808458466556E2L, - }, - - sa[] = { - -1.382234625202480685182526402169222331847E1L, - -3.315638835627950255832519203687435946482E2L, - -2.949124863912936259747237164260785326692E3L, - -1.246622099070875940506391433635999693661E4L, - -2.673079795851665428695842853070996219632E4L, - -2.880269786660559337358397106518918220991E4L, - -1.450600228493968044773354186390390823713E4L, - -2.874539731125893533960680525192064277816E3L, - -1.402241261419067750237395034116942296027E2L, - /* 1.000000000000000000000000000000000000000E0 */ - }, -/* - * Coefficients for approximation to erfc in [1/.35,107] - */ -/* erfc(1/x) = x exp (-1/x^2 - 0.5625 + rb(x^2)/sb(x^2)) - 1/6.6666259765625 < 1/x < 1/2.85711669921875 - Peak relative error 4.2e-22 */ - rb[] = { - -4.869587348270494309550558460786501252369E-5L, - -4.030199390527997378549161722412466959403E-3L, - -9.434425866377037610206443566288917589122E-2L, - -9.319032754357658601200655161585539404155E-1L, - -4.273788174307459947350256581445442062291E0L, - -8.842289940696150508373541814064198259278E0L, - -7.069215249419887403187988144752613025255E0L, - -1.401228723639514787920274427443330704764E0L, - }, - - sb[] = { - 4.936254964107175160157544545879293019085E-3L, - 1.583457624037795744377163924895349412015E-1L, - 1.850647991850328356622940552450636420484E0L, - 9.927611557279019463768050710008450625415E0L, - 2.531667257649436709617165336779212114570E1L, - 2.869752886406743386458304052862814690045E1L, - 1.182059497870819562441683560749192539345E1L, - /* 1.000000000000000000000000000000000000000E0 */ - }, -/* erfc(1/x) = x exp (-1/x^2 - 0.5625 + rc(x^2)/sc(x^2)) - 1/107 <= 1/x <= 1/6.6666259765625 - Peak relative error 1.1e-21 */ - rc[] = { - -8.299617545269701963973537248996670806850E-5L, - -6.243845685115818513578933902532056244108E-3L, - -1.141667210620380223113693474478394397230E-1L, - -7.521343797212024245375240432734425789409E-1L, - -1.765321928311155824664963633786967602934E0L, - -1.029403473103215800456761180695263439188E0L, - }, - - sc[] = { - 8.413244363014929493035952542677768808601E-3L, - 2.065114333816877479753334599639158060979E-1L, - 1.639064941530797583766364412782135680148E0L, - 4.936788463787115555582319302981666347450E0L, - 5.005177727208955487404729933261347679090E0L, - /* 1.000000000000000000000000000000000000000E0 */ - }; - -long double -__erfl (long double x) -{ - long double R, S, P, Q, s, y, z, r; - int32_t ix, i; - u_int32_t se, i0, i1; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - ix = se & 0x7fff; - - if (ix >= 0x7fff) - { /* erf(nan)=nan */ - i = ((se & 0xffff) >> 15) << 1; - return (long double) (1 - i) + one / x; /* erf(+-inf)=+-1 */ - } - - ix = (ix << 16) | (i0 >> 16); - if (ix < 0x3ffed800) /* |x|<0.84375 */ - { - if (ix < 0x3fde8000) /* |x|<2**-33 */ - { - if (ix < 0x00080000) - { - /* Avoid spurious underflow. */ - long double ret = 0.0625 * (16.0 * x + (16.0 * efx) * x); - math_check_force_underflow (ret); - return ret; - } - return x + efx * x; - } - z = x * x; - r = pp[0] + z * (pp[1] - + z * (pp[2] + z * (pp[3] + z * (pp[4] + z * pp[5])))); - s = qq[0] + z * (qq[1] - + z * (qq[2] + z * (qq[3] + z * (qq[4] + z * (qq[5] + z))))); - y = r / s; - return x + x * y; - } - if (ix < 0x3fffa000) /* 1.25 */ - { /* 0.84375 <= |x| < 1.25 */ - s = fabsl (x) - one; - P = pa[0] + s * (pa[1] + s * (pa[2] - + s * (pa[3] + s * (pa[4] + s * (pa[5] + s * (pa[6] + s * pa[7])))))); - Q = qa[0] + s * (qa[1] + s * (qa[2] - + s * (qa[3] + s * (qa[4] + s * (qa[5] + s * (qa[6] + s)))))); - if ((se & 0x8000) == 0) - return erx + P / Q; - else - return -erx - P / Q; - } - if (ix >= 0x4001d555) /* 6.6666259765625 */ - { /* inf>|x|>=6.666 */ - if ((se & 0x8000) == 0) - return one - tiny; - else - return tiny - one; - } - x = fabsl (x); - s = one / (x * x); - if (ix < 0x4000b6db) /* 2.85711669921875 */ - { - R = ra[0] + s * (ra[1] + s * (ra[2] + s * (ra[3] + s * (ra[4] + - s * (ra[5] + s * (ra[6] + s * (ra[7] + s * ra[8]))))))); - S = sa[0] + s * (sa[1] + s * (sa[2] + s * (sa[3] + s * (sa[4] + - s * (sa[5] + s * (sa[6] + s * (sa[7] + s * (sa[8] + s)))))))); - } - else - { /* |x| >= 1/0.35 */ - R = rb[0] + s * (rb[1] + s * (rb[2] + s * (rb[3] + s * (rb[4] + - s * (rb[5] + s * (rb[6] + s * rb[7])))))); - S = sb[0] + s * (sb[1] + s * (sb[2] + s * (sb[3] + s * (sb[4] + - s * (sb[5] + s * (sb[6] + s)))))); - } - z = x; - GET_LDOUBLE_WORDS (i, i0, i1, z); - i1 = 0; - SET_LDOUBLE_WORDS (z, i, i0, i1); - r = - __ieee754_expl (-z * z - 0.5625) * __ieee754_expl ((z - x) * (z + x) + - R / S); - if ((se & 0x8000) == 0) - return one - r / x; - else - return r / x - one; -} - -weak_alias (__erfl, erfl) -long double -__erfcl (long double x) -{ - int32_t hx, ix; - long double R, S, P, Q, s, y, z, r; - u_int32_t se, i0, i1; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - ix = se & 0x7fff; - if (ix >= 0x7fff) - { /* erfc(nan)=nan */ - /* erfc(+-inf)=0,2 */ - return (long double) (((se & 0xffff) >> 15) << 1) + one / x; - } - - ix = (ix << 16) | (i0 >> 16); - if (ix < 0x3ffed800) /* |x|<0.84375 */ - { - if (ix < 0x3fbe0000) /* |x|<2**-65 */ - return one - x; - z = x * x; - r = pp[0] + z * (pp[1] - + z * (pp[2] + z * (pp[3] + z * (pp[4] + z * pp[5])))); - s = qq[0] + z * (qq[1] - + z * (qq[2] + z * (qq[3] + z * (qq[4] + z * (qq[5] + z))))); - y = r / s; - if (ix < 0x3ffd8000) /* x<1/4 */ - { - return one - (x + x * y); - } - else - { - r = x * y; - r += (x - half); - return half - r; - } - } - if (ix < 0x3fffa000) /* 1.25 */ - { /* 0.84375 <= |x| < 1.25 */ - s = fabsl (x) - one; - P = pa[0] + s * (pa[1] + s * (pa[2] - + s * (pa[3] + s * (pa[4] + s * (pa[5] + s * (pa[6] + s * pa[7])))))); - Q = qa[0] + s * (qa[1] + s * (qa[2] - + s * (qa[3] + s * (qa[4] + s * (qa[5] + s * (qa[6] + s)))))); - if ((se & 0x8000) == 0) - { - z = one - erx; - return z - P / Q; - } - else - { - z = erx + P / Q; - return one + z; - } - } - if (ix < 0x4005d600) /* 107 */ - { /* |x|<107 */ - x = fabsl (x); - s = one / (x * x); - if (ix < 0x4000b6db) /* 2.85711669921875 */ - { /* |x| < 1/.35 ~ 2.857143 */ - R = ra[0] + s * (ra[1] + s * (ra[2] + s * (ra[3] + s * (ra[4] + - s * (ra[5] + s * (ra[6] + s * (ra[7] + s * ra[8]))))))); - S = sa[0] + s * (sa[1] + s * (sa[2] + s * (sa[3] + s * (sa[4] + - s * (sa[5] + s * (sa[6] + s * (sa[7] + s * (sa[8] + s)))))))); - } - else if (ix < 0x4001d555) /* 6.6666259765625 */ - { /* 6.666 > |x| >= 1/.35 ~ 2.857143 */ - R = rb[0] + s * (rb[1] + s * (rb[2] + s * (rb[3] + s * (rb[4] + - s * (rb[5] + s * (rb[6] + s * rb[7])))))); - S = sb[0] + s * (sb[1] + s * (sb[2] + s * (sb[3] + s * (sb[4] + - s * (sb[5] + s * (sb[6] + s)))))); - } - else - { /* |x| >= 6.666 */ - if (se & 0x8000) - return two - tiny; /* x < -6.666 */ - - R = rc[0] + s * (rc[1] + s * (rc[2] + s * (rc[3] + - s * (rc[4] + s * rc[5])))); - S = sc[0] + s * (sc[1] + s * (sc[2] + s * (sc[3] + - s * (sc[4] + s)))); - } - z = x; - GET_LDOUBLE_WORDS (hx, i0, i1, z); - i1 = 0; - i0 &= 0xffffff00; - SET_LDOUBLE_WORDS (z, hx, i0, i1); - r = __ieee754_expl (-z * z - 0.5625) * - __ieee754_expl ((z - x) * (z + x) + R / S); - if ((se & 0x8000) == 0) - { - long double ret = r / x; - if (ret == 0) - __set_errno (ERANGE); - return ret; - } - else - return two - r / x; - } - else - { - if ((se & 0x8000) == 0) - { - __set_errno (ERANGE); - return tiny * tiny; - } - else - return two - tiny; - } -} - -weak_alias (__erfcl, erfcl) diff --git a/sysdeps/ieee754/ldbl-96/s_fma.c b/sysdeps/ieee754/ldbl-96/s_fma.c deleted file mode 100644 index 370592074e..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_fma.c +++ /dev/null @@ -1,101 +0,0 @@ -/* Compute x * y + z as ternary operation. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* This implementation uses rounding to odd to avoid problems with - double rounding. See a paper by Boldo and Melquiond: - http://www.lri.fr/~melquion/doc/08-tc.pdf */ - -double -__fma (double x, double y, double z) -{ - if (__glibc_unlikely (isinf (z))) - { - /* If z is Inf, but x and y are finite, the result should be - z rather than NaN. */ - if (isfinite (x) && isfinite (y)) - return (z + x) + y; - return (x * y) + z; - } - - /* Ensure correct sign of exact 0 + 0. */ - if (__glibc_unlikely ((x == 0 || y == 0) && z == 0)) - { - x = math_opt_barrier (x); - return x * y + z; - } - - fenv_t env; - feholdexcept (&env); - fesetround (FE_TONEAREST); - - /* Multiplication m1 + m2 = x * y using Dekker's algorithm. */ -#define C ((1ULL << (LDBL_MANT_DIG + 1) / 2) + 1) - long double x1 = (long double) x * C; - long double y1 = (long double) y * C; - long double m1 = (long double) x * y; - x1 = (x - x1) + x1; - y1 = (y - y1) + y1; - long double x2 = x - x1; - long double y2 = y - y1; - long double m2 = (((x1 * y1 - m1) + x1 * y2) + x2 * y1) + x2 * y2; - - /* Addition a1 + a2 = z + m1 using Knuth's algorithm. */ - long double a1 = z + m1; - long double t1 = a1 - z; - long double t2 = a1 - t1; - t1 = m1 - t1; - t2 = z - t2; - long double a2 = t1 + t2; - /* Ensure the arithmetic is not scheduled after feclearexcept call. */ - math_force_eval (m2); - math_force_eval (a2); - feclearexcept (FE_INEXACT); - - /* If the result is an exact zero, ensure it has the correct sign. */ - if (a1 == 0 && m2 == 0) - { - feupdateenv (&env); - /* Ensure that round-to-nearest value of z + m1 is not reused. */ - z = math_opt_barrier (z); - return z + m1; - } - - fesetround (FE_TOWARDZERO); - /* Perform m2 + a2 addition with round to odd. */ - a2 = a2 + m2; - - /* Add that to a1 again using rounding to odd. */ - union ieee854_long_double u; - u.d = a1 + a2; - if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7fff) - u.ieee.mantissa1 |= fetestexcept (FE_INEXACT) != 0; - feupdateenv (&env); - - /* Add finally round to double precision. */ - return u.d; -} -#ifndef __fma -weak_alias (__fma, fma) -#endif diff --git a/sysdeps/ieee754/ldbl-96/s_fmal.c b/sysdeps/ieee754/ldbl-96/s_fmal.c deleted file mode 100644 index 1f3fa1ea1e..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_fmal.c +++ /dev/null @@ -1,296 +0,0 @@ -/* Compute x * y + z as ternary operation. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* This implementation uses rounding to odd to avoid problems with - double rounding. See a paper by Boldo and Melquiond: - http://www.lri.fr/~melquion/doc/08-tc.pdf */ - -long double -__fmal (long double x, long double y, long double z) -{ - union ieee854_long_double u, v, w; - int adjust = 0; - u.d = x; - v.d = y; - w.d = z; - if (__builtin_expect (u.ieee.exponent + v.ieee.exponent - >= 0x7fff + IEEE854_LONG_DOUBLE_BIAS - - LDBL_MANT_DIG, 0) - || __builtin_expect (u.ieee.exponent >= 0x7fff - LDBL_MANT_DIG, 0) - || __builtin_expect (v.ieee.exponent >= 0x7fff - LDBL_MANT_DIG, 0) - || __builtin_expect (w.ieee.exponent >= 0x7fff - LDBL_MANT_DIG, 0) - || __builtin_expect (u.ieee.exponent + v.ieee.exponent - <= IEEE854_LONG_DOUBLE_BIAS + LDBL_MANT_DIG, 0)) - { - /* If z is Inf, but x and y are finite, the result should be - z rather than NaN. */ - if (w.ieee.exponent == 0x7fff - && u.ieee.exponent != 0x7fff - && v.ieee.exponent != 0x7fff) - return (z + x) + y; - /* If z is zero and x are y are nonzero, compute the result - as x * y to avoid the wrong sign of a zero result if x * y - underflows to 0. */ - if (z == 0 && x != 0 && y != 0) - return x * y; - /* If x or y or z is Inf/NaN, or if x * y is zero, compute as - x * y + z. */ - if (u.ieee.exponent == 0x7fff - || v.ieee.exponent == 0x7fff - || w.ieee.exponent == 0x7fff - || x == 0 - || y == 0) - return x * y + z; - /* If fma will certainly overflow, compute as x * y. */ - if (u.ieee.exponent + v.ieee.exponent - > 0x7fff + IEEE854_LONG_DOUBLE_BIAS) - return x * y; - /* If x * y is less than 1/4 of LDBL_TRUE_MIN, neither the - result nor whether there is underflow depends on its exact - value, only on its sign. */ - if (u.ieee.exponent + v.ieee.exponent - < IEEE854_LONG_DOUBLE_BIAS - LDBL_MANT_DIG - 2) - { - int neg = u.ieee.negative ^ v.ieee.negative; - long double tiny = neg ? -0x1p-16445L : 0x1p-16445L; - if (w.ieee.exponent >= 3) - return tiny + z; - /* Scaling up, adding TINY and scaling down produces the - correct result, because in round-to-nearest mode adding - TINY has no effect and in other modes double rounding is - harmless. But it may not produce required underflow - exceptions. */ - v.d = z * 0x1p65L + tiny; - if (TININESS_AFTER_ROUNDING - ? v.ieee.exponent < 66 - : (w.ieee.exponent == 0 - || (w.ieee.exponent == 1 - && w.ieee.negative != neg - && w.ieee.mantissa1 == 0 - && w.ieee.mantissa0 == 0x80000000))) - { - long double force_underflow = x * y; - math_force_eval (force_underflow); - } - return v.d * 0x1p-65L; - } - if (u.ieee.exponent + v.ieee.exponent - >= 0x7fff + IEEE854_LONG_DOUBLE_BIAS - LDBL_MANT_DIG) - { - /* Compute 1p-64 times smaller result and multiply - at the end. */ - if (u.ieee.exponent > v.ieee.exponent) - u.ieee.exponent -= LDBL_MANT_DIG; - else - v.ieee.exponent -= LDBL_MANT_DIG; - /* If x + y exponent is very large and z exponent is very small, - it doesn't matter if we don't adjust it. */ - if (w.ieee.exponent > LDBL_MANT_DIG) - w.ieee.exponent -= LDBL_MANT_DIG; - adjust = 1; - } - else if (w.ieee.exponent >= 0x7fff - LDBL_MANT_DIG) - { - /* Similarly. - If z exponent is very large and x and y exponents are - very small, adjust them up to avoid spurious underflows, - rather than down. */ - if (u.ieee.exponent + v.ieee.exponent - <= IEEE854_LONG_DOUBLE_BIAS + 2 * LDBL_MANT_DIG) - { - if (u.ieee.exponent > v.ieee.exponent) - u.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - else - v.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - } - else if (u.ieee.exponent > v.ieee.exponent) - { - if (u.ieee.exponent > LDBL_MANT_DIG) - u.ieee.exponent -= LDBL_MANT_DIG; - } - else if (v.ieee.exponent > LDBL_MANT_DIG) - v.ieee.exponent -= LDBL_MANT_DIG; - w.ieee.exponent -= LDBL_MANT_DIG; - adjust = 1; - } - else if (u.ieee.exponent >= 0x7fff - LDBL_MANT_DIG) - { - u.ieee.exponent -= LDBL_MANT_DIG; - if (v.ieee.exponent) - v.ieee.exponent += LDBL_MANT_DIG; - else - v.d *= 0x1p64L; - } - else if (v.ieee.exponent >= 0x7fff - LDBL_MANT_DIG) - { - v.ieee.exponent -= LDBL_MANT_DIG; - if (u.ieee.exponent) - u.ieee.exponent += LDBL_MANT_DIG; - else - u.d *= 0x1p64L; - } - else /* if (u.ieee.exponent + v.ieee.exponent - <= IEEE854_LONG_DOUBLE_BIAS + LDBL_MANT_DIG) */ - { - if (u.ieee.exponent > v.ieee.exponent) - u.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - else - v.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - if (w.ieee.exponent <= 4 * LDBL_MANT_DIG + 6) - { - if (w.ieee.exponent) - w.ieee.exponent += 2 * LDBL_MANT_DIG + 2; - else - w.d *= 0x1p130L; - adjust = -1; - } - /* Otherwise x * y should just affect inexact - and nothing else. */ - } - x = u.d; - y = v.d; - z = w.d; - } - - /* Ensure correct sign of exact 0 + 0. */ - if (__glibc_unlikely ((x == 0 || y == 0) && z == 0)) - { - x = math_opt_barrier (x); - return x * y + z; - } - - fenv_t env; - feholdexcept (&env); - fesetround (FE_TONEAREST); - - /* Multiplication m1 + m2 = x * y using Dekker's algorithm. */ -#define C ((1LL << (LDBL_MANT_DIG + 1) / 2) + 1) - long double x1 = x * C; - long double y1 = y * C; - long double m1 = x * y; - x1 = (x - x1) + x1; - y1 = (y - y1) + y1; - long double x2 = x - x1; - long double y2 = y - y1; - long double m2 = (((x1 * y1 - m1) + x1 * y2) + x2 * y1) + x2 * y2; - - /* Addition a1 + a2 = z + m1 using Knuth's algorithm. */ - long double a1 = z + m1; - long double t1 = a1 - z; - long double t2 = a1 - t1; - t1 = m1 - t1; - t2 = z - t2; - long double a2 = t1 + t2; - /* Ensure the arithmetic is not scheduled after feclearexcept call. */ - math_force_eval (m2); - math_force_eval (a2); - feclearexcept (FE_INEXACT); - - /* If the result is an exact zero, ensure it has the correct sign. */ - if (a1 == 0 && m2 == 0) - { - feupdateenv (&env); - /* Ensure that round-to-nearest value of z + m1 is not reused. */ - z = math_opt_barrier (z); - return z + m1; - } - - fesetround (FE_TOWARDZERO); - /* Perform m2 + a2 addition with round to odd. */ - u.d = a2 + m2; - - if (__glibc_likely (adjust == 0)) - { - if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7fff) - u.ieee.mantissa1 |= fetestexcept (FE_INEXACT) != 0; - feupdateenv (&env); - /* Result is a1 + u.d. */ - return a1 + u.d; - } - else if (__glibc_likely (adjust > 0)) - { - if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7fff) - u.ieee.mantissa1 |= fetestexcept (FE_INEXACT) != 0; - feupdateenv (&env); - /* Result is a1 + u.d, scaled up. */ - return (a1 + u.d) * 0x1p64L; - } - else - { - if ((u.ieee.mantissa1 & 1) == 0) - u.ieee.mantissa1 |= fetestexcept (FE_INEXACT) != 0; - v.d = a1 + u.d; - /* Ensure the addition is not scheduled after fetestexcept call. */ - math_force_eval (v.d); - int j = fetestexcept (FE_INEXACT) != 0; - feupdateenv (&env); - /* Ensure the following computations are performed in default rounding - mode instead of just reusing the round to zero computation. */ - asm volatile ("" : "=m" (u) : "m" (u)); - /* If a1 + u.d is exact, the only rounding happens during - scaling down. */ - if (j == 0) - return v.d * 0x1p-130L; - /* If result rounded to zero is not subnormal, no double - rounding will occur. */ - if (v.ieee.exponent > 130) - return (a1 + u.d) * 0x1p-130L; - /* If v.d * 0x1p-130L with round to zero is a subnormal above - or equal to LDBL_MIN / 2, then v.d * 0x1p-130L shifts mantissa - down just by 1 bit, which means v.ieee.mantissa1 |= j would - change the round bit, not sticky or guard bit. - v.d * 0x1p-130L never normalizes by shifting up, - so round bit plus sticky bit should be already enough - for proper rounding. */ - if (v.ieee.exponent == 130) - { - /* If the exponent would be in the normal range when - rounding to normal precision with unbounded exponent - range, the exact result is known and spurious underflows - must be avoided on systems detecting tininess after - rounding. */ - if (TININESS_AFTER_ROUNDING) - { - w.d = a1 + u.d; - if (w.ieee.exponent == 131) - return w.d * 0x1p-130L; - } - /* v.ieee.mantissa1 & 2 is LSB bit of the result before rounding, - v.ieee.mantissa1 & 1 is the round bit and j is our sticky - bit. */ - w.d = 0.0L; - w.ieee.mantissa1 = ((v.ieee.mantissa1 & 3) << 1) | j; - w.ieee.negative = v.ieee.negative; - v.ieee.mantissa1 &= ~3U; - v.d *= 0x1p-130L; - w.d *= 0x1p-2L; - return v.d + w.d; - } - v.ieee.mantissa1 |= j; - return v.d * 0x1p-130L; - } -} -weak_alias (__fmal, fmal) diff --git a/sysdeps/ieee754/ldbl-96/s_frexpl.c b/sysdeps/ieee754/ldbl-96/s_frexpl.c deleted file mode 100644 index 799880f373..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_frexpl.c +++ /dev/null @@ -1,61 +0,0 @@ -/* s_frexpl.c -- long double version of s_frexp.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* - * for non-zero x - * x = frexpl(arg,&exp); - * return a long double fp quantity x such that 0.5 <= |x| <1.0 - * and the corresponding binary exponent "exp". That is - * arg = x*2^exp. - * If arg is inf, 0.0, or NaN, then frexpl(arg,&exp) returns arg - * with *exp=0. - */ - -#include -#include -#include - -static const long double -#if LDBL_MANT_DIG == 64 -two65 = 3.68934881474191032320e+19L; /* 0x4040, 0x80000000, 0x00000000 */ -#else -# error "Cannot handle this MANT_DIG" -#endif - - -long double __frexpl(long double x, int *eptr) -{ - u_int32_t se, hx, ix, lx; - GET_LDOUBLE_WORDS(se,hx,lx,x); - ix = 0x7fff&se; - *eptr = 0; - if(ix==0x7fff||((ix|hx|lx)==0)) return x + x; /* 0,inf,nan */ - if (ix==0x0000) { /* subnormal */ - x *= two65; - GET_LDOUBLE_EXP(se,x); - ix = se&0x7fff; - *eptr = -65; - } - *eptr += ix-16382; - se = (se & 0x8000) | 0x3ffe; - SET_LDOUBLE_EXP(x,se); - return x; -} -weak_alias (__frexpl, frexpl) diff --git a/sysdeps/ieee754/ldbl-96/s_fromfpl.c b/sysdeps/ieee754/ldbl-96/s_fromfpl.c deleted file mode 100644 index e323b4c25b..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_fromfpl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 0 -#define INEXACT 0 -#define FUNC fromfpl -#include diff --git a/sysdeps/ieee754/ldbl-96/s_fromfpl_main.c b/sysdeps/ieee754/ldbl-96/s_fromfpl_main.c deleted file mode 100644 index 05de1fa6c0..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_fromfpl_main.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Round to integer type. ldbl-96 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#define BIAS 0x3fff -#define MANT_DIG 64 - -#if UNSIGNED -# define RET_TYPE uintmax_t -#else -# define RET_TYPE intmax_t -#endif - -#include - -RET_TYPE -FUNC (long double x, int round, unsigned int width) -{ - if (width > INTMAX_WIDTH) - width = INTMAX_WIDTH; - uint16_t se; - uint32_t hx, lx; - GET_LDOUBLE_WORDS (se, hx, lx, x); - bool negative = (se & 0x8000) != 0; - if (width == 0) - return fromfp_domain_error (negative, width); - if ((hx | lx) == 0) - return 0; - int exponent = se & 0x7fff; - exponent -= BIAS; - int max_exponent = fromfp_max_exponent (negative, width); - if (exponent > max_exponent) - return fromfp_domain_error (negative, width); - - uint64_t ix = (((uint64_t) hx) << 32) | lx; - uintmax_t uret; - bool half_bit, more_bits; - if (exponent >= MANT_DIG - 1) - { - uret = ix; - /* Exponent 63; no shifting required. */ - half_bit = false; - more_bits = false; - } - else if (exponent >= -1) - { - uint64_t h = 1ULL << (MANT_DIG - 2 - exponent); - half_bit = (ix & h) != 0; - more_bits = (ix & (h - 1)) != 0; - if (exponent == -1) - uret = 0; - else - uret = ix >> (MANT_DIG - 1 - exponent); - } - else - { - uret = 0; - half_bit = false; - more_bits = true; - } - return fromfp_round_and_return (negative, uret, half_bit, more_bits, round, - exponent, max_exponent, width); -} diff --git a/sysdeps/ieee754/ldbl-96/s_fromfpxl.c b/sysdeps/ieee754/ldbl-96/s_fromfpxl.c deleted file mode 100644 index 2f3189d7de..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_fromfpxl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 0 -#define INEXACT 1 -#define FUNC fromfpxl -#include diff --git a/sysdeps/ieee754/ldbl-96/s_getpayloadl.c b/sysdeps/ieee754/ldbl-96/s_getpayloadl.c deleted file mode 100644 index 6efe97baee..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_getpayloadl.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Get NaN payload. ldbl-96 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -long double -getpayloadl (const long double *x) -{ - uint16_t se __attribute__ ((unused)); - uint32_t hx, lx; - GET_LDOUBLE_WORDS (se, hx, lx, *x); - hx &= 0x3fffffff; - uint64_t ix = ((uint64_t) hx << 32) | lx; - return (long double) ix; -} diff --git a/sysdeps/ieee754/ldbl-96/s_iscanonicall.c b/sysdeps/ieee754/ldbl-96/s_iscanonicall.c deleted file mode 100644 index 820a45e3a8..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_iscanonicall.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Test whether long double value is canonical. ldbl-96 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -int -__iscanonicall (long double x) -{ - uint32_t se, i0, i1 __attribute__ ((unused)); - - GET_LDOUBLE_WORDS (se, i0, i1, x); - int32_t ix = se & 0x7fff; - bool mant_high = (i0 & 0x80000000) != 0; - - if (LDBL_MIN_EXP == -16381) - /* Intel variant: the high mantissa bit should have a value - determined by the exponent. */ - return ix > 0 ? mant_high : !mant_high; - else - /* M68K variant: both values of the high bit are valid for the - greatest and smallest exponents, while other exponents require - the high bit to be set. */ - return ix == 0 || ix == 0x7fff || mant_high; -} -libm_hidden_def (__iscanonicall) diff --git a/sysdeps/ieee754/ldbl-96/s_issignalingl.c b/sysdeps/ieee754/ldbl-96/s_issignalingl.c deleted file mode 100644 index f659bb7b35..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_issignalingl.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Test for signaling NaN. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__issignalingl (long double x) -{ - u_int32_t exi, hxi, lxi; - GET_LDOUBLE_WORDS (exi, hxi, lxi, x); -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN -# error not implemented -#else - /* To keep the following comparison simple, toggle the quiet/signaling bit, - so that it is set for sNaNs. This is inverse to IEEE 754-2008 (as well as - common practice for IEEE 754-1985). */ - hxi ^= 0x40000000; - /* If lxi != 0, then set any suitable bit of the significand in hxi. */ - hxi |= (lxi | -lxi) >> 31; - /* We do not recognize a pseudo NaN as sNaN; they're invalid on 80387 and - later. */ - /* We have to compare for greater (instead of greater or equal), because x's - significand being all-zero designates infinity not NaN. */ - return ((exi & 0x7fff) == 0x7fff) && (hxi > 0xc0000000); -#endif -} -libm_hidden_def (__issignalingl) diff --git a/sysdeps/ieee754/ldbl-96/s_llrintl.c b/sysdeps/ieee754/ldbl-96/s_llrintl.c deleted file mode 100644 index 53d33c3999..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_llrintl.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include - -static const long double two63[2] = -{ - 9.223372036854775808000000e+18, /* 0x403E, 0x00000000, 0x00000000 */ - -9.223372036854775808000000e+18 /* 0xC03E, 0x00000000, 0x00000000 */ -}; - - -long long int -__llrintl (long double x) -{ - int32_t se,j0; - u_int32_t i0, i1; - long long int result; - long double w; - long double t; - int sx; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - - sx = (se >> 15) & 1; - j0 = (se & 0x7fff) - 0x3fff; - - if (j0 < (int32_t) (8 * sizeof (long long int)) - 1) - { - if (j0 >= 63) - result = (((long long int) i0 << 32) | i1) << (j0 - 63); - else - { -#if defined FE_INVALID || defined FE_INEXACT - /* X < LLONG_MAX + 1 implied by J0 < 63. */ - if (x > (long double) LLONG_MAX) - { - /* In the event of overflow we must raise the "invalid" - exception, but not "inexact". */ - t = __nearbyintl (x); - feraiseexcept (t == LLONG_MAX ? FE_INEXACT : FE_INVALID); - } - else -#endif - { - w = two63[sx] + x; - t = w - two63[sx]; - } - GET_LDOUBLE_WORDS (se, i0, i1, t); - j0 = (se & 0x7fff) - 0x3fff; - - if (j0 < 0) - result = 0; - else if (j0 <= 31) - result = i0 >> (31 - j0); - else - result = ((long long int) i0 << (j0 - 31)) | (i1 >> (63 - j0)); - } - } - else - { - /* The number is too large. It is left implementation defined - what happens. */ - return (long long int) x; - } - - return sx ? -result : result; -} - -weak_alias (__llrintl, llrintl) diff --git a/sysdeps/ieee754/ldbl-96/s_llroundl.c b/sysdeps/ieee754/ldbl-96/s_llroundl.c deleted file mode 100644 index f113fabd1a..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_llroundl.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Round long double value to long long int. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include - - -long long int -__llroundl (long double x) -{ - int32_t j0; - u_int32_t se, i1, i0; - long long int result; - int sign; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - j0 = (se & 0x7fff) - 0x3fff; - sign = (se & 0x8000) != 0 ? -1 : 1; - - if (j0 < 31) - { - if (j0 < 0) - return j0 < -1 ? 0 : sign; - else - { - u_int32_t j = i0 + (0x40000000 >> j0); - if (j < i0) - { - j >>= 1; - j |= 0x80000000; - ++j0; - } - - result = j >> (31 - j0); - } - } - else if (j0 < (int32_t) (8 * sizeof (long long int)) - 1) - { - if (j0 >= 63) - result = (((long long int) i0 << 32) | i1) << (j0 - 63); - else - { - u_int32_t j = i1 + (0x80000000 >> (j0 - 31)); - - result = (long long int) i0; - if (j < i1) - ++result; - - if (j0 > 31) - { - result = (result << (j0 - 31)) | (j >> (63 - j0)); -#ifdef FE_INVALID - if (sign == 1 && result == LLONG_MIN) - /* Rounding brought the value out of range. */ - feraiseexcept (FE_INVALID); -#endif - } - } - } - else - { - /* The number is too large. It is left implementation defined - what happens. */ - return (long long int) x; - } - - return sign * result; -} - -weak_alias (__llroundl, llroundl) diff --git a/sysdeps/ieee754/ldbl-96/s_lrintl.c b/sysdeps/ieee754/ldbl-96/s_lrintl.c deleted file mode 100644 index 02dafe67f3..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_lrintl.c +++ /dev/null @@ -1,126 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include - -static const long double two63[2] = -{ - 9.223372036854775808000000e+18, /* 0x403E, 0x00000000, 0x00000000 */ - -9.223372036854775808000000e+18 /* 0xC03E, 0x00000000, 0x00000000 */ -}; - - -long int -__lrintl (long double x) -{ - int32_t se,j0; - u_int32_t i0, i1; - long int result; - long double w; - long double t; - int sx; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - - sx = (se >> 15) & 1; - j0 = (se & 0x7fff) - 0x3fff; - - if (j0 < 31) - { -#if defined FE_INVALID || defined FE_INEXACT - /* X < LONG_MAX + 1 implied by J0 < 31. */ - if (sizeof (long int) == 4 - && x > (long double) LONG_MAX) - { - /* In the event of overflow we must raise the "invalid" - exception, but not "inexact". */ - t = __nearbyintl (x); - feraiseexcept (t == LONG_MAX ? FE_INEXACT : FE_INVALID); - } - else -#endif - { - w = two63[sx] + x; - t = w - two63[sx]; - } - GET_LDOUBLE_WORDS (se, i0, i1, t); - j0 = (se & 0x7fff) - 0x3fff; - - result = (j0 < 0 ? 0 : i0 >> (31 - j0)); - } - else if (j0 < (int32_t) (8 * sizeof (long int)) - 1) - { - if (j0 >= 63) - result = ((long int) i0 << (j0 - 31)) | (i1 << (j0 - 63)); - else - { -#if defined FE_INVALID || defined FE_INEXACT - /* X < LONG_MAX + 1 implied by J0 < 63. */ - if (sizeof (long int) == 8 - && x > (long double) LONG_MAX) - { - /* In the event of overflow we must raise the "invalid" - exception, but not "inexact". */ - t = __nearbyintl (x); - feraiseexcept (t == LONG_MAX ? FE_INEXACT : FE_INVALID); - } - else -#endif - { - w = two63[sx] + x; - t = w - two63[sx]; - } - GET_LDOUBLE_WORDS (se, i0, i1, t); - j0 = (se & 0x7fff) - 0x3fff; - - if (j0 == 31) - result = (long int) i0; - else - result = ((long int) i0 << (j0 - 31)) | (i1 >> (63 - j0)); - } - } - else - { - /* The number is too large. Unless it rounds to LONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ -#if defined FE_INVALID || defined FE_INEXACT - if (sizeof (long int) == 4 - && x < (long double) LONG_MIN - && x > (long double) LONG_MIN - 1.0L) - { - /* If truncation produces LONG_MIN, the cast will not raise - the exception, but may raise "inexact". */ - t = __nearbyintl (x); - feraiseexcept (t == LONG_MIN ? FE_INEXACT : FE_INVALID); - return LONG_MIN; - } -#endif - return (long int) x; - } - - return sx ? -result : result; -} - -weak_alias (__lrintl, lrintl) diff --git a/sysdeps/ieee754/ldbl-96/s_lroundl.c b/sysdeps/ieee754/ldbl-96/s_lroundl.c deleted file mode 100644 index 7f418e6142..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_lroundl.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Round long double value to long int. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include - - -long int -__lroundl (long double x) -{ - int32_t j0; - u_int32_t se, i1, i0; - long int result; - int sign; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - j0 = (se & 0x7fff) - 0x3fff; - sign = (se & 0x8000) != 0 ? -1 : 1; - - if (j0 < 31) - { - if (j0 < 0) - return j0 < -1 ? 0 : sign; - else - { - u_int32_t j = i0 + (0x40000000 >> j0); - if (j < i0) - { - j >>= 1; - j |= 0x80000000; - ++j0; - } - - result = j >> (31 - j0); -#ifdef FE_INVALID - if (sizeof (long int) == 4 - && sign == 1 - && result == LONG_MIN) - /* Rounding brought the value out of range. */ - feraiseexcept (FE_INVALID); -#endif - } - } - else if (j0 < (int32_t) (8 * sizeof (long int)) - 1) - { - if (j0 >= 63) - result = ((long int) i0 << (j0 - 31)) | (i1 << (j0 - 63)); - else - { - u_int32_t j = i1 + (0x80000000 >> (j0 - 31)); - unsigned long int ures = i0; - - if (j < i1) - ++ures; - - if (j0 == 31) - result = ures; - else - { - result = (ures << (j0 - 31)) | (j >> (63 - j0)); -#ifdef FE_INVALID - if (sizeof (long int) == 8 - && sign == 1 - && result == LONG_MIN) - /* Rounding brought the value out of range. */ - feraiseexcept (FE_INVALID); -#endif - } - } - } - else - { - /* The number is too large. Unless it rounds to LONG_MIN, - FE_INVALID must be raised and the return value is - unspecified. */ -#ifdef FE_INVALID - if (sizeof (long int) == 4 - && x <= (long double) LONG_MIN - 0.5L) - { - /* If truncation produces LONG_MIN, the cast will not raise - the exception, but may raise "inexact". */ - feraiseexcept (FE_INVALID); - return LONG_MIN; - } -#endif - return (long int) x; - } - - return sign * result; -} - -weak_alias (__lroundl, lroundl) diff --git a/sysdeps/ieee754/ldbl-96/s_modfl.c b/sysdeps/ieee754/ldbl-96/s_modfl.c deleted file mode 100644 index e9401d0f5d..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_modfl.c +++ /dev/null @@ -1,73 +0,0 @@ -/* s_modfl.c -- long double version of s_modf.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * modfl(long double x, long double *iptr) - * return fraction part of x, and return x's integral part in *iptr. - * Method: - * Bit twiddling. - * - * Exception: - * No exception. - */ - -#include -#include - -static const long double one = 1.0; - -long double -__modfl(long double x, long double *iptr) -{ - int32_t i0,i1,j0; - u_int32_t i,se; - GET_LDOUBLE_WORDS(se,i0,i1,x); - j0 = (se&0x7fff)-0x3fff; /* exponent of x */ - if(j0<32) { /* integer part in high x */ - if(j0<0) { /* |x|<1 */ - SET_LDOUBLE_WORDS(*iptr,se&0x8000,0,0); /* *iptr = +-0 */ - return x; - } else { - i = (0x7fffffff)>>j0; - if(((i0&i)|i1)==0) { /* x is integral */ - *iptr = x; - SET_LDOUBLE_WORDS(x,se&0x8000,0,0); /* return +-0 */ - return x; - } else { - SET_LDOUBLE_WORDS(*iptr,se,i0&(~i),0); - return x - *iptr; - } - } - } else if (__builtin_expect(j0>63, 0)) { /* no fraction part */ - *iptr = x*one; - /* We must handle NaNs separately. */ - if (j0 == 0x4000 && ((i0 & 0x7fffffff) | i1)) - return x*one; - SET_LDOUBLE_WORDS(x,se&0x8000,0,0); /* return +-0 */ - return x; - } else { /* fraction part in low x */ - i = ((u_int32_t)(0x7fffffff))>>(j0-32); - if((i1&i)==0) { /* x is integral */ - *iptr = x; - SET_LDOUBLE_WORDS(x,se&0x8000,0,0); /* return +-0 */ - return x; - } else { - SET_LDOUBLE_WORDS(*iptr,se,i0,i1&(~i)); - return x - *iptr; - } - } -} -weak_alias (__modfl, modfl) diff --git a/sysdeps/ieee754/ldbl-96/s_nexttoward.c b/sysdeps/ieee754/ldbl-96/s_nexttoward.c deleted file mode 100644 index 3d0382eac9..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_nexttoward.c +++ /dev/null @@ -1,86 +0,0 @@ -/* s_nexttoward.c - * Conversion from s_nextafter.c by Ulrich Drepper, Cygnus Support, - * drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* IEEE functions - * nexttoward(x,y) - * return the next machine floating-point number of x in the - * direction toward y. - * Special cases: - */ - -#include -#include -#include -#include - -double __nexttoward(double x, long double y) -{ - int32_t hx,ix,iy; - u_int32_t lx,hy,ly,esy; - - EXTRACT_WORDS(hx,lx,x); - GET_LDOUBLE_WORDS(esy,hy,ly,y); - ix = hx&0x7fffffff; /* |x| */ - iy = esy&0x7fff; /* |y| */ - - if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || /* x is nan */ - ((iy>=0x7fff)&&(hy|ly)!=0)) /* y is nan */ - return x+y; - if((long double) x==y) return y; /* x=y, return y */ - if((ix|lx)==0) { /* x == 0 */ - double u; - INSERT_WORDS(x,(esy&0x8000)<<16,1); /* return +-minsub */ - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(hx>=0) { /* x > 0 */ - if (x > y) { /* x -= ulp */ - if(lx==0) hx -= 1; - lx -= 1; - } else { /* x < y, x += ulp */ - lx += 1; - if(lx==0) hx += 1; - } - } else { /* x < 0 */ - if (x < y) { /* x -= ulp */ - if(lx==0) hx -= 1; - lx -= 1; - } else { /* x > y, x += ulp */ - lx += 1; - if(lx==0) hx += 1; - } - } - hy = hx&0x7ff00000; - if(hy>=0x7ff00000) { - double u = x+x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(hy<0x00100000) { - double u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - INSERT_WORDS(x,hx,lx); - return x; -} -weak_alias (__nexttoward, nexttoward) diff --git a/sysdeps/ieee754/ldbl-96/s_nexttowardf.c b/sysdeps/ieee754/ldbl-96/s_nexttowardf.c deleted file mode 100644 index ae7538942f..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_nexttowardf.c +++ /dev/null @@ -1,74 +0,0 @@ -/* s_nexttowardf.c -- float version of s_nextafter.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -#include -#include -#include -#include - -float __nexttowardf(float x, long double y) -{ - int32_t hx,ix,iy; - u_int32_t hy,ly,esy; - - GET_FLOAT_WORD(hx,x); - GET_LDOUBLE_WORDS(esy,hy,ly,y); - ix = hx&0x7fffffff; /* |x| */ - iy = esy&0x7fff; /* |y| */ - - if((ix>0x7f800000) || /* x is nan */ - (iy>=0x7fff&&((hy|ly)!=0))) /* y is nan */ - return x+y; - if((long double) x==y) return y; /* x=y, return y */ - if(ix==0) { /* x == 0 */ - float u; - SET_FLOAT_WORD(x,((esy&0x8000)<<16)|1);/* return +-minsub*/ - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(hx>=0) { /* x > 0 */ - if(x > y) { /* x -= ulp */ - hx -= 1; - } else { /* x < y, x += ulp */ - hx += 1; - } - } else { /* x < 0 */ - if(x < y) { /* x -= ulp */ - hx -= 1; - } else { /* x > y, x += ulp */ - hx += 1; - } - } - hy = hx&0x7f800000; - if(hy>=0x7f800000) { - float u = x+x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(hy<0x00800000) { - float u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - SET_FLOAT_WORD(x,hx); - return x; -} -weak_alias (__nexttowardf, nexttowardf) diff --git a/sysdeps/ieee754/ldbl-96/s_nextupl.c b/sysdeps/ieee754/ldbl-96/s_nextupl.c deleted file mode 100644 index aa66eaf106..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_nextupl.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Return the least floating-point number greater than X. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Return the least floating-point number greater than X. */ -long double -__nextupl (long double x) -{ - u_int32_t hx, ix; - u_int32_t lx; - int32_t esx; - - GET_LDOUBLE_WORDS (esx, hx, lx, x); - ix = esx & 0x7fff; - - if (((ix == 0x7fff) && (((hx & 0x7fffffff) | lx) != 0))) /* x is nan. */ - return x + x; - if ((ix | hx | lx) == 0) - return LDBL_TRUE_MIN; - if (esx >= 0) - { /* x > 0. */ - if (isinf (x)) - return x; - lx += 1; - if (lx == 0) - { - hx += 1; -#if LDBL_MIN_EXP == -16381 - if (hx == 0 || (esx == 0 && hx == 0x80000000)) -#else - if (hx == 0) -#endif - { - esx += 1; - hx |= 0x80000000; - } - } - } - else - { /* x < 0. */ - if (lx == 0) - { -#if LDBL_MIN_EXP == -16381 - if (hx <= 0x80000000 && esx != 0xffff8000) - { - esx -= 1; - hx = hx - 1; - if ((esx & 0x7fff) > 0) - hx |= 0x80000000; - } - else - hx -= 1; -#else - if (ix != 0 && hx == 0x80000000) - hx = 0; - if (hx == 0) - esx -= 1; - hx -= 1; -#endif - } - lx -= 1; - } - SET_LDOUBLE_WORDS (x, esx, hx, lx); - return x; -} - -weak_alias (__nextupl, nextupl) diff --git a/sysdeps/ieee754/ldbl-96/s_remquol.c b/sysdeps/ieee754/ldbl-96/s_remquol.c deleted file mode 100644 index ee9a6a7d2a..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_remquol.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Compute remainder and a congruent to the quotient. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -static const long double zero = 0.0; - - -long double -__remquol (long double x, long double p, int *quo) -{ - int32_t ex,ep,hx,hp; - u_int32_t sx,lx,lp; - int cquo,qs; - - GET_LDOUBLE_WORDS (ex, hx, lx, x); - GET_LDOUBLE_WORDS (ep, hp, lp, p); - sx = ex & 0x8000; - qs = (sx ^ (ep & 0x8000)) >> 15; - ep &= 0x7fff; - ex &= 0x7fff; - - /* Purge off exception values. */ - if ((ep | hp | lp) == 0) - return (x * p) / (x * p); /* p = 0 */ - if ((ex == 0x7fff) /* x not finite */ - || ((ep == 0x7fff) /* p is NaN */ - && (((hp & 0x7fffffff) | lp) != 0))) - return (x * p) / (x * p); - - if (ep <= 0x7ffb) - x = __ieee754_fmodl (x, 8 * p); /* now x < 8p */ - - if (((ex - ep) | (hx - hp) | (lx - lp)) == 0) - { - *quo = qs ? -1 : 1; - return zero * x; - } - - x = fabsl (x); - p = fabsl (p); - cquo = 0; - - if (ep <= 0x7ffc && x >= 4 * p) - { - x -= 4 * p; - cquo += 4; - } - if (ep <= 0x7ffd && x >= 2 * p) - { - x -= 2 * p; - cquo += 2; - } - - if (ep < 0x0002) - { - if (x + x > p) - { - x -= p; - ++cquo; - if (x + x >= p) - { - x -= p; - ++cquo; - } - } - } - else - { - long double p_half = 0.5 * p; - if (x > p_half) - { - x -= p; - ++cquo; - if (x >= p_half) - { - x -= p; - ++cquo; - } - } - } - - *quo = qs ? -cquo : cquo; - - /* Ensure correct sign of zero result in round-downward mode. */ - if (x == 0.0L) - x = 0.0L; - if (sx) - x = -x; - return x; -} -weak_alias (__remquol, remquol) diff --git a/sysdeps/ieee754/ldbl-96/s_roundevenl.c b/sysdeps/ieee754/ldbl-96/s_roundevenl.c deleted file mode 100644 index dab6aa6558..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_roundevenl.c +++ /dev/null @@ -1,124 +0,0 @@ -/* Round to nearest integer value, rounding halfway cases to even. - ldbl-96 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define BIAS 0x3fff -#define MANT_DIG 64 -#define MAX_EXP (2 * BIAS + 1) - -long double -roundevenl (long double x) -{ - uint16_t se; - uint32_t hx, lx; - GET_LDOUBLE_WORDS (se, hx, lx, x); - int exponent = se & 0x7fff; - if (exponent >= BIAS + MANT_DIG - 1) - { - /* Integer, infinity or NaN. */ - if (exponent == MAX_EXP) - /* Infinity or NaN; quiet signaling NaNs. */ - return x + x; - else - return x; - } - else if (exponent >= BIAS + MANT_DIG - 32) - { - /* Not necessarily an integer; integer bit is in low word. - Locate the bits with exponents 0 and -1. */ - int int_pos = (BIAS + MANT_DIG - 1) - exponent; - int half_pos = int_pos - 1; - uint32_t half_bit = 1U << half_pos; - uint32_t int_bit = 1U << int_pos; - if ((lx & (int_bit | (half_bit - 1))) != 0) - { - /* No need to test whether HALF_BIT is set. */ - lx += half_bit; - if (lx < half_bit) - { - hx++; - if (hx == 0) - { - hx = 0x80000000; - se++; - } - } - } - lx &= ~(int_bit - 1); - } - else if (exponent == BIAS + MANT_DIG - 33) - { - /* Not necessarily an integer; integer bit is bottom of high - word, half bit is top of low word. */ - if (((hx & 1) | (lx & 0x7fffffff)) != 0) - { - lx += 0x80000000; - if (lx < 0x80000000) - { - hx++; - if (hx == 0) - { - hx = 0x80000000; - se++; - } - } - } - lx = 0; - } - else if (exponent >= BIAS) - { - /* At least 1; not necessarily an integer, integer bit and half - bit are in the high word. Locate the bits with exponents 0 - and -1. */ - int int_pos = (BIAS + MANT_DIG - 33) - exponent; - int half_pos = int_pos - 1; - uint32_t half_bit = 1U << half_pos; - uint32_t int_bit = 1U << int_pos; - if (((hx & (int_bit | (half_bit - 1))) | lx) != 0) - { - hx += half_bit; - if (hx < half_bit) - { - hx = 0x80000000; - se++; - } - } - hx &= ~(int_bit - 1); - lx = 0; - } - else if (exponent == BIAS - 1 && (hx > 0x80000000 || lx != 0)) - { - /* Interval (0.5, 1). */ - se = (se & 0x8000) | 0x3fff; - hx = 0x80000000; - lx = 0; - } - else - { - /* Rounds to 0. */ - se &= 0x8000; - hx = 0; - lx = 0; - } - SET_LDOUBLE_WORDS (x, se, hx, lx); - return x; -} diff --git a/sysdeps/ieee754/ldbl-96/s_roundl.c b/sysdeps/ieee754/ldbl-96/s_roundl.c deleted file mode 100644 index d8918d2874..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_roundl.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Round long double to integer away from zero. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -long double -__roundl (long double x) -{ - int32_t j0; - u_int32_t se, i1, i0; - - GET_LDOUBLE_WORDS (se, i0, i1, x); - j0 = (se & 0x7fff) - 0x3fff; - if (j0 < 31) - { - if (j0 < 0) - { - se &= 0x8000; - i0 = i1 = 0; - if (j0 == -1) - { - se |= 0x3fff; - i0 = 0x80000000; - } - } - else - { - u_int32_t i = 0x7fffffff >> j0; - if (((i0 & i) | i1) == 0) - /* X is integral. */ - return x; - - u_int32_t j = i0 + (0x40000000 >> j0); - if (j < i0) - se += 1; - i0 = (j & ~i) | 0x80000000; - i1 = 0; - } - } - else if (j0 > 62) - { - if (j0 == 0x4000) - /* Inf or NaN. */ - return x + x; - else - return x; - } - else - { - u_int32_t i = 0xffffffff >> (j0 - 31); - if ((i1 & i) == 0) - /* X is integral. */ - return x; - - u_int32_t j = i1 + (1 << (62 - j0)); - if (j < i1) - { - u_int32_t k = i0 + 1; - if (k < i0) - { - se += 1; - k |= 0x80000000; - } - i0 = k; - } - i1 = j; - i1 &= ~i; - } - - SET_LDOUBLE_WORDS (x, se, i0, i1); - return x; -} -weak_alias (__roundl, roundl) diff --git a/sysdeps/ieee754/ldbl-96/s_scalblnl.c b/sysdeps/ieee754/ldbl-96/s_scalblnl.c deleted file mode 100644 index 457e999c6c..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_scalblnl.c +++ /dev/null @@ -1,60 +0,0 @@ -/* s_scalbnl.c -- long double version of s_scalbn.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * scalbnl (long double x, int n) - * scalbnl(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include -#include - -static const long double -two63 = 0x1p63L, -twom64 = 0x1p-64L, -huge = 1.0e+4900L, -tiny = 1.0e-4900L; - -long double -__scalblnl (long double x, long int n) -{ - int32_t k,es,hx,lx; - GET_LDOUBLE_WORDS(es,hx,lx,x); - k = es&0x7fff; /* extract exponent */ - if (__builtin_expect(k==0, 0)) { /* 0 or subnormal x */ - if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */ - x *= two63; - GET_LDOUBLE_EXP(es,x); - k = (es&0x7fff) - 63; - } - if (__builtin_expect(k==0x7fff, 0)) return x+x; /* NaN or Inf */ - if (__builtin_expect(n< -50000, 0)) - return tiny*__copysignl(tiny,x); - if (__builtin_expect(n> 50000 || k+n > 0x7ffe, 0)) - return huge*__copysignl(huge,x); /* overflow */ - /* Now k and n are bounded we know that k = k+n does not - overflow. */ - k = k+n; - if (__builtin_expect(k > 0, 1)) /* normal result */ - {SET_LDOUBLE_EXP(x,(es&0x8000)|k); return x;} - if (k <= -64) - return tiny*__copysignl(tiny,x); /*underflow*/ - k += 64; /* subnormal result */ - SET_LDOUBLE_EXP(x,(es&0x8000)|k); - return x*twom64; -} diff --git a/sysdeps/ieee754/ldbl-96/s_setpayloadl.c b/sysdeps/ieee754/ldbl-96/s_setpayloadl.c deleted file mode 100644 index 1aba33e6e2..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_setpayloadl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SIG 0 -#define FUNC setpayloadl -#include diff --git a/sysdeps/ieee754/ldbl-96/s_setpayloadl_main.c b/sysdeps/ieee754/ldbl-96/s_setpayloadl_main.c deleted file mode 100644 index c2fd0401d7..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_setpayloadl_main.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Set NaN payload. ldbl-96 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#define SET_HIGH_BIT (HIGH_ORDER_BIT_IS_SET_FOR_SNAN ? SIG : !SIG) -#define BIAS 0x3fff -#define PAYLOAD_DIG 62 -#define EXPLICIT_MANT_DIG 63 - -int -FUNC (long double *x, long double payload) -{ - uint32_t hx, lx; - uint16_t exponent; - GET_LDOUBLE_WORDS (exponent, hx, lx, payload); - /* Test if argument is (a) negative or too large; (b) too small, - except for 0 when allowed; (c) not an integer. */ - if (exponent >= BIAS + PAYLOAD_DIG - || (exponent < BIAS && !(SET_HIGH_BIT - && exponent == 0 && hx == 0 && lx == 0))) - { - SET_LDOUBLE_WORDS (*x, 0, 0, 0); - return 1; - } - int shift = BIAS + EXPLICIT_MANT_DIG - exponent; - if (shift < 32 - ? (lx & ((1U << shift) - 1)) != 0 - : (lx != 0 || (hx & ((1U << (shift - 32)) - 1)) != 0)) - { - SET_LDOUBLE_WORDS (*x, 0, 0, 0); - return 1; - } - if (exponent != 0) - { - if (shift >= 32) - { - lx = hx >> (shift - 32); - hx = 0; - } - else if (shift != 0) - { - lx = (lx >> shift) | (hx << (32 - shift)); - hx >>= shift; - } - } - hx |= 0x80000000 | (SET_HIGH_BIT ? 0x40000000 : 0); - SET_LDOUBLE_WORDS (*x, 0x7fff, hx, lx); - return 0; -} diff --git a/sysdeps/ieee754/ldbl-96/s_setpayloadsigl.c b/sysdeps/ieee754/ldbl-96/s_setpayloadsigl.c deleted file mode 100644 index d97e2c8206..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_setpayloadsigl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SIG 1 -#define FUNC setpayloadsigl -#include diff --git a/sysdeps/ieee754/ldbl-96/s_signbitl.c b/sysdeps/ieee754/ldbl-96/s_signbitl.c deleted file mode 100644 index d430eb8600..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_signbitl.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Return nonzero value if number is negative. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__signbitl (long double x) -{ - return __builtin_signbitl (x); -} diff --git a/sysdeps/ieee754/ldbl-96/s_sincosl.c b/sysdeps/ieee754/ldbl-96/s_sincosl.c deleted file mode 100644 index 7d33c97162..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_sincosl.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Compute sine and cosine of argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include - - -void -__sincosl (long double x, long double *sinx, long double *cosx) -{ - int32_t se, i0, i1 __attribute__ ((unused)); - - /* High word of x. */ - GET_LDOUBLE_WORDS (se, i0, i1, x); - - /* |x| ~< pi/4 */ - se &= 0x7fff; - if (se < 0x3ffe || (se == 0x3ffe && i0 <= 0xc90fdaa2)) - { - *sinx = __kernel_sinl (x, 0.0, 0); - *cosx = __kernel_cosl (x, 0.0); - } - else if (se == 0x7fff) - { - /* sin(Inf or NaN) is NaN */ - *sinx = *cosx = x - x; - if (isinf (x)) - __set_errno (EDOM); - } - else - { - /* Argument reduction needed. */ - long double y[2]; - int n; - - n = __ieee754_rem_pio2l (x, y); - switch (n & 3) - { - case 0: - *sinx = __kernel_sinl (y[0], y[1], 1); - *cosx = __kernel_cosl (y[0], y[1]); - break; - case 1: - *sinx = __kernel_cosl (y[0], y[1]); - *cosx = -__kernel_sinl (y[0], y[1], 1); - break; - case 2: - *sinx = -__kernel_sinl (y[0], y[1], 1); - *cosx = -__kernel_cosl (y[0], y[1]); - break; - default: - *sinx = -__kernel_cosl (y[0], y[1]); - *cosx = __kernel_sinl (y[0], y[1], 1); - break; - } - } -} -weak_alias (__sincosl, sincosl) diff --git a/sysdeps/ieee754/ldbl-96/s_sinl.c b/sysdeps/ieee754/ldbl-96/s_sinl.c deleted file mode 100644 index 11e1899822..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_sinl.c +++ /dev/null @@ -1,88 +0,0 @@ -/* s_sinl.c -- long double version of s_sin.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* sinl(x) - * Return sine function of x. - * - * kernel function: - * __kernel_sinl ... sine function on [-pi/4,pi/4] - * __kernel_cosl ... cose function on [-pi/4,pi/4] - * __ieee754_rem_pio2l ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include -#include -#include - -long double __sinl(long double x) -{ - long double y[2],z=0.0; - int32_t n, se, i0, i1; - - /* High word of x. */ - GET_LDOUBLE_WORDS(se,i0,i1,x); - - /* |x| ~< pi/4 */ - se &= 0x7fff; - if(se < 0x3ffe || (se == 0x3ffe && i0 <= 0xc90fdaa2)) - return __kernel_sinl(x,z,0); - - /* sin(Inf or NaN) is NaN */ - else if (se==0x7fff) { - if (i1 == 0 && i0 == 0x80000000) - __set_errno (EDOM); - return x-x; - } - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2l(x,y); - switch(n&3) { - case 0: return __kernel_sinl(y[0],y[1],1); - case 1: return __kernel_cosl(y[0],y[1]); - case 2: return -__kernel_sinl(y[0],y[1],1); - default: - return -__kernel_cosl(y[0],y[1]); - } - } -} -weak_alias (__sinl, sinl) diff --git a/sysdeps/ieee754/ldbl-96/s_tanhl.c b/sysdeps/ieee754/ldbl-96/s_tanhl.c deleted file mode 100644 index 38edf9f75e..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_tanhl.c +++ /dev/null @@ -1,90 +0,0 @@ -/* s_tanhl.c -- long double version of s_tanh.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* tanhl(x) - * Return the Hyperbolic Tangent of x - * - * Method : - * x -x - * e - e - * 0. tanhl(x) is defined to be ----------- - * x -x - * e + e - * 1. reduce x to non-negative by tanhl(-x) = -tanhl(x). - * 2. 0 <= x <= 2**-55 : tanhl(x) := x*(one+x) - * -t - * 2**-55 < x <= 1 : tanhl(x) := -----; t = expm1l(-2x) - * t + 2 - * 2 - * 1 <= x <= 23.0 : tanhl(x) := 1- ----- ; t=expm1l(2x) - * t + 2 - * 23.0 < x <= INF : tanhl(x) := 1. - * - * Special cases: - * tanhl(NaN) is NaN; - * only tanhl(0)=0 is exact for finite argument. - */ - -#include -#include -#include - -static const long double one=1.0, two=2.0, tiny = 1.0e-4900L; - -long double __tanhl(long double x) -{ - long double t,z; - int32_t se; - u_int32_t j0,j1,ix; - - /* High word of |x|. */ - GET_LDOUBLE_WORDS(se,j0,j1,x); - ix = se&0x7fff; - - /* x is INF or NaN */ - if(ix==0x7fff) { - /* for NaN it's not important which branch: tanhl(NaN) = NaN */ - if (se&0x8000) return one/x-one; /* tanhl(-inf)= -1; */ - else return one/x+one; /* tanhl(+inf)=+1 */ - } - - /* |x| < 23 */ - if (ix < 0x4003 || (ix == 0x4003 && j0 < 0xb8000000u)) {/* |x|<23 */ - if ((ix|j0|j1) == 0) - return x; /* x == +- 0 */ - if (ix<0x3fc8) /* |x|<2**-55 */ - { - math_check_force_underflow (x); - return x*(one+tiny); /* tanh(small) = small */ - } - if (ix>=0x3fff) { /* |x|>=1 */ - t = __expm1l(two*fabsl(x)); - z = one - two/(t+two); - } else { - t = __expm1l(-two*fabsl(x)); - z= -t/(t+two); - } - /* |x| > 23, return +-1 */ - } else { - z = one - tiny; /* raised inexact flag */ - } - return (se&0x8000)? -z: z; -} -weak_alias (__tanhl, tanhl) diff --git a/sysdeps/ieee754/ldbl-96/s_tanl.c b/sysdeps/ieee754/ldbl-96/s_tanl.c deleted file mode 100644 index 3fbe4a8f6b..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_tanl.c +++ /dev/null @@ -1,81 +0,0 @@ -/* s_tanl.c -- long double version of s_tan.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* tanl(x) - * Return tangent function of x. - * - * kernel function: - * __kernel_tanl ... tangent function on [-pi/4,pi/4] - * __ieee754_rem_pio2l ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include -#include -#include - -long double __tanl(long double x) -{ - long double y[2],z=0.0; - int32_t n, se, i0, i1; - - /* High word of x. */ - GET_LDOUBLE_WORDS(se,i0,i1,x); - - /* |x| ~< pi/4 */ - se &= 0x7fff; - if(se <= 0x3ffe) return __kernel_tanl(x,z,1); - - /* tan(Inf or NaN) is NaN */ - else if (se==0x7fff) { - if (i1 == 0 && i0 == 0x80000000) - __set_errno (EDOM); - return x-x; - } - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2l(x,y); - return __kernel_tanl(y[0],y[1],1-((n&1)<<1)); /* 1 -- n even - -1 -- n odd */ - } -} -weak_alias (__tanl, tanl) diff --git a/sysdeps/ieee754/ldbl-96/s_totalorderl.c b/sysdeps/ieee754/ldbl-96/s_totalorderl.c deleted file mode 100644 index 16accad1ff..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_totalorderl.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Total order operation. ldbl-96 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -int -totalorderl (long double x, long double y) -{ - int16_t expx, expy; - uint32_t hx, hy; - uint32_t lx, ly; - GET_LDOUBLE_WORDS (expx, hx, lx, x); - GET_LDOUBLE_WORDS (expy, hy, ly, y); - if (LDBL_MIN_EXP == -16382) - { - /* M68K variant: for the greatest exponent, the high mantissa - bit is not significant and both values of it are valid, so - set it before comparing. For the Intel variant, only one - value of the high mantissa bit is valid for each exponent, so - this is not necessary. */ - if ((expx & 0x7fff) == 0x7fff) - hx |= 0x80000000; - if ((expy & 0x7fff) == 0x7fff) - hy |= 0x80000000; - } -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN -# error not implemented -#endif - uint32_t x_sign = expx >> 15; - uint32_t y_sign = expy >> 15; - expx ^= x_sign >> 17; - hx ^= x_sign; - lx ^= x_sign; - expy ^= y_sign >> 17; - hy ^= y_sign; - ly ^= y_sign; - return expx < expy || (expx == expy && (hx < hy || (hx == hy && lx <= ly))); -} diff --git a/sysdeps/ieee754/ldbl-96/s_totalordermagl.c b/sysdeps/ieee754/ldbl-96/s_totalordermagl.c deleted file mode 100644 index 6b370b2ade..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_totalordermagl.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Total order operation on absolute values. ldbl-96 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -int -totalordermagl (long double x, long double y) -{ - uint16_t expx, expy; - uint32_t hx, hy; - uint32_t lx, ly; - GET_LDOUBLE_WORDS (expx, hx, lx, x); - GET_LDOUBLE_WORDS (expy, hy, ly, y); - expx &= 0x7fff; - expy &= 0x7fff; - if (LDBL_MIN_EXP == -16382) - { - /* M68K variant: for the greatest exponent, the high mantissa - bit is not significant and both values of it are valid, so - set it before comparing. For the Intel variant, only one - value of the high mantissa bit is valid for each exponent, so - this is not necessary. */ - if (expx == 0x7fff) - hx |= 0x80000000; - if (expy == 0x7fff) - hy |= 0x80000000; - } -#if HIGH_ORDER_BIT_IS_SET_FOR_SNAN -# error not implemented -#endif - return expx < expy || (expx == expy && (hx < hy || (hx == hy && lx <= ly))); -} diff --git a/sysdeps/ieee754/ldbl-96/s_ufromfpl.c b/sysdeps/ieee754/ldbl-96/s_ufromfpl.c deleted file mode 100644 index c686daa4a7..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_ufromfpl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 1 -#define INEXACT 0 -#define FUNC ufromfpl -#include diff --git a/sysdeps/ieee754/ldbl-96/s_ufromfpxl.c b/sysdeps/ieee754/ldbl-96/s_ufromfpxl.c deleted file mode 100644 index 906066c83c..0000000000 --- a/sysdeps/ieee754/ldbl-96/s_ufromfpxl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNSIGNED 1 -#define INEXACT 1 -#define FUNC ufromfpxl -#include diff --git a/sysdeps/ieee754/ldbl-96/strtod_nan_ldouble.h b/sysdeps/ieee754/ldbl-96/strtod_nan_ldouble.h deleted file mode 100644 index e847b13b40..0000000000 --- a/sysdeps/ieee754/ldbl-96/strtod_nan_ldouble.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Convert string for NaN payload to corresponding NaN. For ldbl-96. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FLOAT long double -#define SET_MANTISSA(flt, mant) \ - do \ - { \ - union ieee854_long_double u; \ - u.d = (flt); \ - u.ieee_nan.mantissa0 = (mant) >> 32; \ - u.ieee_nan.mantissa1 = (mant); \ - if ((u.ieee.mantissa0 | u.ieee.mantissa1) != 0) \ - (flt) = u.d; \ - } \ - while (0) diff --git a/sysdeps/ieee754/ldbl-96/strtold_l.c b/sysdeps/ieee754/ldbl-96/strtold_l.c deleted file mode 100644 index 251f91ba9d..0000000000 --- a/sysdeps/ieee754/ldbl-96/strtold_l.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* The actual implementation for all floating point sizes is in strtod.c. - These macros tell it to produce the `long double' version, `strtold'. */ - -#define FLOAT long double -#define FLT LDBL -#ifdef USE_WIDE_CHAR -# define STRTOF wcstold_l -# define __STRTOF __wcstold_l -# define STRTOF_NAN __wcstold_nan -#else -# define STRTOF strtold_l -# define __STRTOF __strtold_l -# define STRTOF_NAN __strtold_nan -#endif -#define MPN2FLOAT __mpn_construct_long_double -#define FLOAT_HUGE_VAL HUGE_VALL - -#include diff --git a/sysdeps/ieee754/ldbl-96/t_sincosl.c b/sysdeps/ieee754/ldbl-96/t_sincosl.c deleted file mode 100644 index 77bf9cfdba..0000000000 --- a/sysdeps/ieee754/ldbl-96/t_sincosl.c +++ /dev/null @@ -1,483 +0,0 @@ -/* Extended-precision floating point sine and cosine tables. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Based on quad-precision tables by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* For 0.1484375 + n/128.0, n=0..82 this table contains - first 64 bits of cosine, then at least 64 additional - bits and the same for sine. - 0.1484375+82.0/128.0 is the smallest number among above defined numbers - larger than pi/4. - Computed using MPFR: - - #include - #include - - int - main (void) - { - int j; - mpfr_t t, b, i, rs, rc, ts, tc, tsl, tcl; - mpfr_init2 (b, 64); - mpfr_init2 (i, 64); - mpfr_init2 (t, 64); - mpfr_set_str (b, "0.1484375", 0, MPFR_RNDN); - mpfr_set_str (i, "0x1p-7", 0, MPFR_RNDN); - mpfr_init2 (rs, 300); - mpfr_init2 (rc, 300); - mpfr_init2 (ts, 64); - mpfr_init2 (tc, 64); - mpfr_init2 (tsl, 64); - mpfr_init2 (tcl, 64); - for (j = 0; j <= 82; j++) - { - mpfr_mul_ui (t, i, j, MPFR_RNDN); - mpfr_add (t, t, b, MPFR_RNDN); - printf (" /" "* x = 0.1484375 + %d/128. *" "/\n", j); - mpfr_cos (rc, t, MPFR_RNDN); - mpfr_sin (rs, t, MPFR_RNDN); - mpfr_set (tc, rc, MPFR_RNDN); - mpfr_set (ts, rs, MPFR_RNDN); - mpfr_sub (tcl, rc, tc, MPFR_RNDN); - mpfr_sub (tsl, rs, ts, MPFR_RNDN); - mpfr_printf (" %.17RaL,\n", tc); - mpfr_printf (" %.17RaL,\n", tcl); - mpfr_printf (" %.17RaL,\n", ts); - mpfr_printf (" %.17RaL,\n", tsl); - } - return 0; - } - -*/ - -const long double __sincosl_table[] = { - /* x = 0.1484375 + 0/128. */ - 0xf.d2f5320e1b7902100p-4L, - -0x6.4b225d06708635580p-68L, - 0x2.5dc50bc95711d0d80p-4L, - 0x1.787d108fd438cf5a0p-68L, - /* x = 0.1484375 + 1/128. */ - 0xf.ce1a053e621438b00p-4L, - 0x6.d60c76e8c45bf0a80p-68L, - 0x2.7d66258bacd96a400p-4L, - -0x1.4cca4c9a3782a6bc0p-68L, - /* x = 0.1484375 + 2/128. */ - 0xf.c8ffa01ba68074100p-4L, - 0x7.e05962b0d9fdf2000p-68L, - 0x2.9cfd49b8be4f66540p-4L, - -0x1.89354fe340fbd96c0p-68L, - /* x = 0.1484375 + 3/128. */ - 0xf.c3a6170f767ac7300p-4L, - 0x5.d63d99a9d439e1d80p-68L, - 0x2.bc89f9f424de54840p-4L, - 0x1.de7ce03b2514952c0p-68L, - /* x = 0.1484375 + 4/128. */ - 0xf.be0d7f7fef11e7100p-4L, - -0x5.5bc47540b095ba800p-68L, - 0x2.dc0bb80b49a97ffc0p-4L, - -0xc.b1722e07246208500p-72L, - /* x = 0.1484375 + 5/128. */ - 0xf.b835efcf670dd2d00p-4L, - -0x1.90186db968115ec20p-68L, - 0x2.fb8205f75e56a2b40p-4L, - 0x1.6a1c4792f85625880p-68L, - /* x = 0.1484375 + 6/128. */ - 0xf.b21f7f5c156696b00p-4L, - 0xa.c1fe28ac5fd766700p-76L, - 0x3.1aec65df552876f80p-4L, - 0x2.ece9a235671324700p-72L, - /* x = 0.1484375 + 7/128. */ - 0xf.abca467fb3cb8f200p-4L, - -0x2.f960fe2715cc521c0p-68L, - 0x3.3a4a5a19d86246700p-4L, - 0x1.0f602c44df4fa5140p-68L, - /* x = 0.1484375 + 8/128. */ - 0xf.a5365e8f1d3ca2800p-4L, - -0x4.1e24a289519b26800p-68L, - 0x3.599b652f40ec999c0p-4L, - 0x1.f12a0a4c8561de160p-68L, - /* x = 0.1484375 + 9/128. */ - 0xf.9e63e1d9e8b6f6f00p-4L, - 0x2.e296bae5b5ed9c100p-68L, - 0x3.78df09db8c332ce00p-4L, - 0xd.2b53d865582e45200p-72L, - /* x = 0.1484375 + 10/128. */ - 0xf.9752eba9fff6b9900p-4L, - -0x7.bd415254fab56cd00p-68L, - 0x3.9814cb10513453cc0p-4L, - -0x6.84de43e3595cc8500p-72L, - /* x = 0.1484375 + 11/128. */ - 0xf.90039843324f9b900p-4L, - 0x4.0416c1984b6cbed00p-68L, - 0x3.b73c2bf6b4b9f6680p-4L, - 0xe.f9499c81f0d965100p-72L, - /* x = 0.1484375 + 12/128. */ - 0xf.887604e2c39dbb200p-4L, - 0xe.4ec5825059a78a000p-72L, - 0x3.d654aff15cb457a00p-4L, - 0xf.ca854698aba330400p-72L, - /* x = 0.1484375 + 13/128. */ - 0xf.80aa4fbef750ba800p-4L, - -0x7.c2cc346a06b075c00p-68L, - 0x3.f55dda9e62aed7500p-4L, - 0x1.3bd7b8e6a3d1635e0p-68L, - /* x = 0.1484375 + 14/128. */ - 0xf.78a098069792dab00p-4L, - -0x4.3611bda6e483a5980p-68L, - 0x4.14572fd94556e6480p-4L, - -0xc.29dfd8ec7722b8400p-72L, - /* x = 0.1484375 + 15/128. */ - 0xf.7058fde0788dfc800p-4L, - 0x5.b8fe88789e4f42500p-72L, - 0x4.334033bcd90d66080p-4L, - -0x3.0a0c93e2b47bbae40p-68L, - /* x = 0.1484375 + 16/128. */ - 0xf.67d3a26af7d07aa00p-4L, - 0x4.bd6d42af8c0068000p-68L, - 0x4.52186aa5377ab2080p-4L, - 0x3.bf2524f52e3a06a80p-68L, - /* x = 0.1484375 + 17/128. */ - 0xf.5f10a7bb77d3dfa00p-4L, - 0xc.1da8b578427832800p-72L, - 0x4.70df5931ae1d94600p-4L, - 0x7.6fe0dcff47fe31b80p-72L, - /* x = 0.1484375 + 18/128. */ - 0xf.561030ddd7a789600p-4L, - 0xe.a9f4a32c652155500p-72L, - 0x4.8f948446abcd6b100p-4L, - -0x8.0334eff185e4d9100p-72L, - /* x = 0.1484375 + 19/128. */ - 0xf.4cd261d3e6c15bb00p-4L, - 0x3.69c8758630d2ac000p-68L, - 0x4.ae37710fad27c8a80p-4L, - 0x2.9c4cf96c03519b9c0p-68L, - /* x = 0.1484375 + 20/128. */ - 0xf.43575f94d4f6b2700p-4L, - 0x2.f5fb76b14d2a64ac0p-68L, - 0x4.ccc7a50127e1de100p-4L, - -0x3.494bf3cfd39ae0840p-68L, - /* x = 0.1484375 + 21/128. */ - 0xf.399f500c9e9fd3800p-4L, - -0x5.166a8d9c254778900p-68L, - 0x4.eb44a5da74f600200p-4L, - 0x7.aaa090f0734e28880p-72L, - /* x = 0.1484375 + 22/128. */ - 0xf.2faa5a1b74e82fd00p-4L, - 0x6.1fa05f9177380e900p-68L, - 0x5.09adf9a7b9a5a0f80p-4L, - -0x1.c75705c59f5e66be0p-68L, - /* x = 0.1484375 + 23/128. */ - 0xf.2578a595224dd2e00p-4L, - 0x6.bfa2eb2f99cc67500p-68L, - 0x5.280326c3cf4818200p-4L, - 0x3.ba6bb08eac82c2080p-68L, - /* x = 0.1484375 + 24/128. */ - 0xf.1b0a5b406b526d900p-4L, - -0x7.93aa0152372f23380p-68L, - 0x5.4643b3da29de9b380p-4L, - -0x2.8eaa110f0ccd04c00p-68L, - /* x = 0.1484375 + 25/128. */ - 0xf.105fa4d66b607a600p-4L, - 0x7.d44e0427252044380p-68L, - 0x5.646f27e8bd65cbe00p-4L, - 0x3.a5d61ff0657229100p-68L, - /* x = 0.1484375 + 26/128. */ - 0xf.0578ad01ede708000p-4L, - -0x5.c63f6239467b50100p-68L, - 0x5.82850a41e1dd46c80p-4L, - -0x9.fd15dbb3244403200p-76L, - /* x = 0.1484375 + 27/128. */ - 0xe.fa559f5ec3aec3a00p-4L, - 0x4.eb03319278a2d4200p-68L, - 0x5.a084e28e35fda2780p-4L, - -0x9.202444aace28b3100p-72L, - /* x = 0.1484375 + 28/128. */ - 0xe.eef6a879146af0c00p-4L, - -0x6.46a15d15f53f2c200p-72L, - 0x5.be6e38ce809554280p-4L, - 0x3.c14ee9da0d3648400p-68L, - /* x = 0.1484375 + 29/128. */ - 0xe.e35bf5ccac8905300p-4L, - -0x3.26e2248cb2c5b81c0p-68L, - 0x5.dc40955d9084f4880p-4L, - 0x2.94675a2498de5d840p-68L, - /* x = 0.1484375 + 30/128. */ - 0xe.d785b5c44741b4500p-4L, - -0x6.c3a943462cc75eb00p-68L, - 0x5.f9fb80f21b5364a00p-4L, - -0x3.bcdabf5af1dd3ad00p-68L, - /* x = 0.1484375 + 31/128. */ - 0xe.cb7417b8d4ee3ff00p-4L, - -0x3.c8545bf8c55b70e00p-68L, - 0x6.179e84a09a5258a80p-4L, - -0x3.f164a0531fc1ada00p-68L, - /* x = 0.1484375 + 32/128. */ - 0xe.bf274bf0bda4f6200p-4L, - 0x4.47e56a09362679900p-68L, - 0x6.352929dd264bd4480p-4L, - 0x2.02ea766325d8aa8c0p-68L, - /* x = 0.1484375 + 33/128. */ - 0xe.b29f839f201fd1400p-4L, - -0x4.6c8697d86e9587100p-68L, - 0x6.529afa7d51b129600p-4L, - 0x3.1ec197c0a840a11c0p-68L, - /* x = 0.1484375 + 34/128. */ - 0xe.a5dcf0e30cf03e700p-4L, - -0x6.8910f4e13d9aea080p-68L, - 0x6.6ff380ba014410a00p-4L, - -0x1.c65cdf4f5c05a02a0p-68L, - /* x = 0.1484375 + 35/128. */ - 0xe.98dfc6c6be031e600p-4L, - 0xd.d3089cbdd18a75b00p-72L, - 0x6.8d324731433279700p-4L, - 0x3.bc712bcc4ccddc480p-68L, - /* x = 0.1484375 + 36/128. */ - 0xe.8ba8393eca7821b00p-4L, - -0x5.a9c27cb6e49efee80p-68L, - 0x6.aa56d8e8249db4e80p-4L, - 0x3.60a761fe3f9e559c0p-68L, - /* x = 0.1484375 + 37/128. */ - 0xe.7e367d2956cfb1700p-4L, - -0x4.955ee1abe632ffa80p-68L, - 0x6.c760c14c8585a5200p-4L, - -0x2.42cb99f5193ad5380p-68L, - /* x = 0.1484375 + 38/128. */ - 0xe.708ac84d4172a3e00p-4L, - 0x2.737662213429e1400p-68L, - 0x6.e44f8c36eb10a1c80p-4L, - -0xa.d2f6c3ff0b2b84600p-72L, - /* x = 0.1484375 + 39/128. */ - 0xe.62a551594b970a700p-4L, - 0x7.0b15d41d4c0e48400p-68L, - 0x7.0122c5ec5028c8d00p-4L, - -0xc.c540b02cbf333c800p-76L, - /* x = 0.1484375 + 40/128. */ - 0xe.54864fe33e8575d00p-4L, - -0x5.40a42f1a30e4e5780p-68L, - 0x7.1dd9fb1ff46778500p-4L, - 0x3.acb970a9f6729c700p-68L, - /* x = 0.1484375 + 41/128. */ - 0xe.462dfc670d421ab00p-4L, - 0x3.d1a15901228f146c0p-68L, - 0x7.3a74b8f52947b6800p-4L, - 0x1.baf6928eb3fb02180p-68L, - /* x = 0.1484375 + 42/128. */ - 0xe.379c9045f29d51800p-4L, - -0x3.b7f755b683dfa84c0p-68L, - 0x7.56f28d011d9852880p-4L, - 0x2.44a75fc29c779bd80p-68L, - /* x = 0.1484375 + 43/128. */ - 0xe.28d245c58baef7200p-4L, - 0x2.25e232abc003c4380p-68L, - 0x7.7353054ca72690d80p-4L, - -0x3.391e8e0266194c600p-68L, - /* x = 0.1484375 + 44/128. */ - 0xe.19cf580eeec046b00p-4L, - -0x5.ebdd058b7f8131080p-68L, - 0x7.8f95b0560a9a3bd80p-4L, - -0x1.2084267e23c739ee0p-68L, - /* x = 0.1484375 + 45/128. */ - 0xe.0a94032dbea7cee00p-4L, - -0x4.222625d0505267a80p-68L, - 0x7.abba1d12c17bfa200p-4L, - -0x2.6d0f26c09f2126680p-68L, - /* x = 0.1484375 + 46/128. */ - 0xd.fb20840f3a9b36f00p-4L, - 0x7.ae2c515342890b600p-68L, - 0x7.c7bfdaf13e5ed1700p-4L, - 0x2.12f8a7525bfb113c0p-68L, - /* x = 0.1484375 + 47/128. */ - 0xd.eb7518814a7a93200p-4L, - -0x4.433773ef632be3b00p-68L, - 0x7.e3a679daaf25c6780p-4L, - -0x1.abd434bfd72f69be0p-68L, - /* x = 0.1484375 + 48/128. */ - 0xd.db91ff31879917300p-4L, - -0x4.2dbad2f5c7760ae80p-68L, - 0x7.ff6d8a34bd5e8fa80p-4L, - -0x2.b368b7d24aea62100p-68L, - /* x = 0.1484375 + 49/128. */ - 0xd.cb7777ac420705100p-4L, - 0x6.8f31e3eb780ce9c80p-68L, - 0x8.1b149ce34caa5a500p-4L, - -0x1.9af072f602b295580p-68L, - /* x = 0.1484375 + 50/128. */ - 0xd.bb25c25b8260c1500p-4L, - -0x9.1843671366e48f400p-72L, - 0x8.369b434a372da7f00p-4L, - -0x4.a3758e01c931e1f80p-68L, - /* x = 0.1484375 + 51/128. */ - 0xd.aa9d2086082706400p-4L, - -0x2.1ae3f617aa166cd00p-72L, - 0x8.52010f4f080052100p-4L, - 0x3.78bd8dd614753d080p-68L, - /* x = 0.1484375 + 52/128. */ - 0xd.99ddd44e44a43d500p-4L, - -0x2.b5c5c126adfbef900p-68L, - 0x8.6d45935ab396cb500p-4L, - -0x1.bde17dd211ab0caa0p-68L, - /* x = 0.1484375 + 53/128. */ - 0xd.88e820b1526311e00p-4L, - -0x2.a9e1043f3e565ac80p-68L, - 0x8.8868625b4e1dbb200p-4L, - 0x3.13310133022527200p-68L, - /* x = 0.1484375 + 54/128. */ - 0xd.77bc4985e93a60800p-4L, - -0x3.6279746f944394400p-68L, - 0x8.a3690fc5bfc11c000p-4L, - -0x6.aca1d8c657aed0b80p-68L, - /* x = 0.1484375 + 55/128. */ - 0xd.665a937b4ef2b1f00p-4L, - 0x6.d51bad6d988a44180p-68L, - 0x8.be472f9776d809b00p-4L, - -0xd.477e8edbc29c29900p-72L, - /* x = 0.1484375 + 56/128. */ - 0xd.54c3441844897fd00p-4L, - -0x7.07ac0f9aa0e459680p-68L, - 0x8.d902565817ee78400p-4L, - -0x6.431c32ed7f9fee680p-68L, - /* x = 0.1484375 + 57/128. */ - 0xd.42f6a1b9f0168ce00p-4L, - -0xf.ce3d09c3726cfb200p-72L, - 0x8.f39a191b2ba612300p-4L, - -0x5.c05b0be2a5c002c00p-68L, - /* x = 0.1484375 + 58/128. */ - 0xd.30f4f392c357ab000p-4L, - 0x6.61c5fa8a7d9b26600p-68L, - 0x9.0e0e0d81ca6787900p-4L, - 0x6.cc92c8ea8c2815c00p-68L, - /* x = 0.1484375 + 59/128. */ - 0xd.1ebe81a95ee752e00p-4L, - 0x4.8a26bcd32d6e92300p-68L, - 0x9.285dc9bc45dd9ea00p-4L, - 0x3.d02457bcce59c4180p-68L, - /* x = 0.1484375 + 60/128. */ - 0xd.0c5394d7722281900p-4L, - 0x5.e25736c0357470800p-68L, - 0x9.4288e48bd0335fc00p-4L, - 0x4.1c4cbd2920497a900p-68L, - /* x = 0.1484375 + 61/128. */ - 0xc.f9b476c897c25c600p-4L, - -0x4.018af22c0cf715080p-68L, - 0x9.5c8ef544210ec0c00p-4L, - -0x6.e3b642d55f617ae80p-68L, - /* x = 0.1484375 + 62/128. */ - 0xc.e6e171f92f2e27f00p-4L, - 0x3.2225327ec440ddb00p-68L, - 0x9.766f93cd18413a700p-4L, - -0x5.503e303903d754480p-68L, - /* x = 0.1484375 + 63/128. */ - 0xc.d3dad1b5328a2e400p-4L, - 0x5.9f993f4f510881a00p-68L, - 0x9.902a58a45e27bed00p-4L, - 0x6.8412b426b675ed500p-68L, - /* x = 0.1484375 + 64/128. */ - 0xc.c0a0e21709883a400p-4L, - -0xf.f6ee1ee5f811c4300p-76L, - 0x9.a9bedcdf01b38da00p-4L, - -0x6.c0c287df87e21d700p-68L, - /* x = 0.1484375 + 65/128. */ - 0xc.ad33f00658fe5e800p-4L, - 0x2.04bbc0f3a66a0e6c0p-68L, - 0x9.c32cba2b14156ef00p-4L, - 0x5.256c4f857991ca680p-72L, - /* x = 0.1484375 + 66/128. */ - 0xc.99944936cf48c8900p-4L, - 0x1.1ff93fe64b3ddb7a0p-68L, - 0x9.dc738ad14204e6900p-4L, - -0x6.53a7d2f07a7d9a700p-68L, - /* x = 0.1484375 + 67/128. */ - 0xc.85c23c26ed7b6f000p-4L, - 0x1.4ef546c4792968220p-68L, - 0x9.f592e9b66a9cf9000p-4L, - 0x6.a3c7aa3c101998480p-68L, - /* x = 0.1484375 + 68/128. */ - 0xc.71be181ecd6875d00p-4L, - -0x1.d25a9ea5fc335df80p-68L, - 0xa.0e8a725d33c828c00p-4L, - 0x1.1fa50fd9e9a15ffe0p-68L, - /* x = 0.1484375 + 69/128. */ - 0xc.5d882d2ee48030c00p-4L, - 0x7.c07d28e981e348080p-68L, - 0xa.2759c0e79c3558200p-4L, - 0x5.27c32b55f5405c180p-68L, - /* x = 0.1484375 + 70/128. */ - 0xc.4920cc2ec38fb8900p-4L, - 0x1.b38827db08884fc60p-68L, - 0xa.400072188acf49d00p-4L, - -0x2.94e8c7da1fc7cb900p-68L, - /* x = 0.1484375 + 71/128. */ - 0xc.348846bbd36313400p-4L, - -0x7.001d401622ec7e600p-68L, - 0xa.587e23555bb080800p-4L, - 0x6.d02b9c662cdd29300p-68L, - /* x = 0.1484375 + 72/128. */ - 0xc.1fbeef380e4ffdd00p-4L, - 0x5.a613ec8722f644000p-68L, - 0xa.70d272a76a8d4b700p-4L, - -0x2.5f136f8ed448b7480p-68L, - /* x = 0.1484375 + 73/128. */ - 0xc.0ac518c8b6ae71100p-4L, - -0x4.5c85c1146f34ea500p-68L, - 0xa.88fcfebd9a8dd4800p-4L, - -0x1.d0c3891061dbc66e0p-68L, - /* x = 0.1484375 + 74/128. */ - 0xb.f59b17550a4406800p-4L, - 0x7.5969296567cf3e380p-68L, - 0xa.a0fd66eddb9212300p-4L, - 0x2.c28520d3911b8a040p-68L, - /* x = 0.1484375 + 75/128. */ - 0xb.e0413f84f2a771c00p-4L, - 0x6.14946a88cbf4da200p-68L, - 0xa.b8d34b36acd987200p-4L, - 0x1.0ed343ec65d7e3ae0p-68L, - /* x = 0.1484375 + 76/128. */ - 0xb.cab7e6bfb2a14aa00p-4L, - -0x4.edd3a8b5c89413680p-68L, - 0xa.d07e4c409d08c5000p-4L, - -0x5.c56fa844f53db4780p-68L, - /* x = 0.1484375 + 77/128. */ - 0xb.b4ff632a908f73f00p-4L, - -0x3.eae7c6346266c4b00p-68L, - 0xa.e7fe0b5fc786b2e00p-4L, - -0x6.991e2950ebf5b7780p-68L, - /* x = 0.1484375 + 78/128. */ - 0xb.9f180ba77dd075100p-4L, - 0x6.28e135a9508299000p-68L, - 0xa.ff522a954f2ba1700p-4L, - -0x2.621023be91cc0a180p-68L, - /* x = 0.1484375 + 79/128. */ - 0xb.890237d3bb3c28500p-4L, - -0x4.9eb5fac6fe9405f00p-68L, - 0xb.167a4c90d63c42400p-4L, - 0x4.cf5493b7cc23bd400p-68L, - /* x = 0.1484375 + 80/128. */ - 0xb.72be40067aaf2c000p-4L, - 0x5.0dbdb7a14c3d7d500p-68L, - 0xb.2d7614b1f3aaa2500p-4L, - -0x2.0d291df5881e35c00p-68L, - /* x = 0.1484375 + 81/128. */ - 0xb.5c4c7d4f7dae91600p-4L, - -0x5.3879330b4e5b67300p-68L, - 0xb.44452709a59752900p-4L, - 0x5.913765434a59d1100p-72L, - /* x = 0.1484375 + 82/128. */ - 0xb.45ad4975b1294cb00p-4L, - -0x2.35b30bf1370dd5980p-68L, - 0xb.5ae7285bc10cf5100p-4L, - 0x5.753847e8f8b7a3100p-68L, -}; diff --git a/sysdeps/ieee754/ldbl-96/test-canonical-ldbl-96.c b/sysdeps/ieee754/ldbl-96/test-canonical-ldbl-96.c deleted file mode 100644 index 3254097754..0000000000 --- a/sysdeps/ieee754/ldbl-96/test-canonical-ldbl-96.c +++ /dev/null @@ -1,141 +0,0 @@ -/* Test iscanonical and canonicalizel for ldbl-96. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -struct test -{ - bool sign; - uint16_t exponent; - bool high; - uint64_t mantissa; - bool canonical; -}; - -#define M68K_VARIANT (LDBL_MIN_EXP == -16382) - -static const struct test tests[] = - { - { false, 0, true, 0, M68K_VARIANT }, - { true, 0, true, 0, M68K_VARIANT }, - { false, 0, true, 1, M68K_VARIANT }, - { true, 0, true, 1, M68K_VARIANT }, - { false, 0, true, 0x100000000ULL, M68K_VARIANT }, - { true, 0, true, 0x100000000ULL, M68K_VARIANT }, - { false, 0, false, 0, true }, - { true, 0, false, 0, true }, - { false, 0, false, 1, true }, - { true, 0, false, 1, true }, - { false, 0, false, 0x100000000ULL, true }, - { true, 0, false, 0x100000000ULL, true }, - { false, 1, true, 0, true }, - { true, 1, true, 0, true }, - { false, 1, true, 1, true }, - { true, 1, true, 1, true }, - { false, 1, true, 0x100000000ULL, true }, - { true, 1, true, 0x100000000ULL, true }, - { false, 1, false, 0, false }, - { true, 1, false, 0, false }, - { false, 1, false, 1, false }, - { true, 1, false, 1, false }, - { false, 1, false, 0x100000000ULL, false }, - { true, 1, false, 0x100000000ULL, false }, - { false, 0x7ffe, true, 0, true }, - { true, 0x7ffe, true, 0, true }, - { false, 0x7ffe, true, 1, true }, - { true, 0x7ffe, true, 1, true }, - { false, 0x7ffe, true, 0x100000000ULL, true }, - { true, 0x7ffe, true, 0x100000000ULL, true }, - { false, 0x7ffe, false, 0, false }, - { true, 0x7ffe, false, 0, false }, - { false, 0x7ffe, false, 1, false }, - { true, 0x7ffe, false, 1, false }, - { false, 0x7ffe, false, 0x100000000ULL, false }, - { true, 0x7ffe, false, 0x100000000ULL, false }, - { false, 0x7fff, true, 0, true }, - { true, 0x7fff, true, 0, true }, - { false, 0x7fff, true, 1, true }, - { true, 0x7fff, true, 1, true }, - { false, 0x7fff, true, 0x100000000ULL, true }, - { true, 0x7fff, true, 0x100000000ULL, true }, - { false, 0x7fff, false, 0, M68K_VARIANT }, - { true, 0x7fff, false, 0, M68K_VARIANT }, - { false, 0x7fff, false, 1, M68K_VARIANT }, - { true, 0x7fff, false, 1, M68K_VARIANT }, - { false, 0x7fff, false, 0x100000000ULL, M68K_VARIANT }, - { true, 0x7fff, false, 0x100000000ULL, M68K_VARIANT }, - }; - -static int -do_test (void) -{ - int result = 0; - - for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); i++) - { - long double ld; - SET_LDOUBLE_WORDS (ld, tests[i].exponent | (tests[i].sign << 15), - (tests[i].mantissa >> 32) | (tests[i].high << 31), - tests[i].mantissa & 0xffffffffULL); - bool canonical = iscanonical (ld); - if (canonical == tests[i].canonical) - { - printf ("PASS: iscanonical test %zu\n", i); - long double ldc = 12345.0L; - bool canonicalize_ret = canonicalizel (&ldc, &ld); - if (canonicalize_ret == !canonical) - { - printf ("PASS: canonicalizel test %zu\n", i); - bool canon_ok; - if (!canonical) - canon_ok = ldc == 12345.0L; - else if (isnan (ld)) - canon_ok = isnan (ldc) && !issignaling (ldc); - else - canon_ok = ldc == ld; - if (canon_ok) - printf ("PASS: canonicalized value test %zu\n", i); - else - { - printf ("FAIL: canonicalized value test %zu\n", i); - result = 1; - } - } - else - { - printf ("FAIL: canonicalizel test %zu\n", i); - result = 1; - } - } - else - { - printf ("FAIL: iscanonical test %zu\n", i); - result = 1; - } - } - - return result; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/ieee754/ldbl-96/test-totalorderl-ldbl-96.c b/sysdeps/ieee754/ldbl-96/test-totalorderl-ldbl-96.c deleted file mode 100644 index 4e01f15aa9..0000000000 --- a/sysdeps/ieee754/ldbl-96/test-totalorderl-ldbl-96.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Test totalorderl and totalordermagl for ldbl-96. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -static const uint64_t tests[] = - { - 0, 1, 0x4000000000000000ULL, 0x4000000000000001ULL, - 0x7fffffffffffffffULL - }; - -static int -do_test (void) -{ - int result = 0; - - if (LDBL_MIN_EXP == -16382) - for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); i++) - { - long double ldx, ldy, ldnx, ldny; - /* Verify that the high bit of the mantissa is ignored for - infinities and NaNs for the M68K variant of this - format. */ - SET_LDOUBLE_WORDS (ldx, 0x7fff, - tests[i] >> 32, tests[i] & 0xffffffffULL); - SET_LDOUBLE_WORDS (ldy, 0x7fff, - (tests[i] >> 32) | 0x80000000, - tests[i] & 0xffffffffULL); - SET_LDOUBLE_WORDS (ldnx, 0xffff, - tests[i] >> 32, tests[i] & 0xffffffffULL); - SET_LDOUBLE_WORDS (ldny, 0xffff, - (tests[i] >> 32) | 0x80000000, - tests[i] & 0xffffffffULL); - bool to1 = totalorderl (ldx, ldy); - bool to2 = totalorderl (ldy, ldx); - bool to3 = totalorderl (ldnx, ldny); - bool to4 = totalorderl (ldny, ldnx); - if (to1 && to2 && to3 && to4) - printf ("PASS: test %zu\n", i); - else - { - printf ("FAIL: test %zu\n", i); - result = 1; - } - to1 = totalordermagl (ldx, ldy); - to2 = totalordermagl (ldy, ldx); - to3 = totalordermagl (ldnx, ldny); - to4 = totalordermagl (ldny, ldnx); - if (to1 && to2 && to3 && to4) - printf ("PASS: test %zu (totalordermagl)\n", i); - else - { - printf ("FAIL: test %zu (totalordermagl)\n", i); - result = 1; - } - } - - return result; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/ieee754/ldbl-96/w_expl_compat.c b/sysdeps/ieee754/ldbl-96/w_expl_compat.c deleted file mode 100644 index a0b852a3e2..0000000000 --- a/sysdeps/ieee754/ldbl-96/w_expl_compat.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* wrapper expl */ -long double -__expl (long double x) -{ - long double z = __ieee754_expl (x); - if (__builtin_expect (!isfinite (z) || z == 0, 0) - && isfinite (x) && _LIB_VERSION != _IEEE_) - return __kernel_standard_l (x, x, 206 + !!signbit (x)); - - return z; -} -hidden_def (__expl) -weak_alias (__expl, expl) diff --git a/sysdeps/ieee754/ldbl-96/x2y2m1.c b/sysdeps/ieee754/ldbl-96/x2y2m1.c deleted file mode 100644 index a20e89309e..0000000000 --- a/sysdeps/ieee754/ldbl-96/x2y2m1.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Compute x^2 + y^2 - 1, without large cancellation error. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#if FLT_EVAL_METHOD == 0 - -# include - -#else - -/* Return X^2 + Y^2 - 1, computed without large cancellation error. - It is given that 1 > X >= Y >= epsilon / 2, and that X^2 + Y^2 >= - 0.5. */ - -double -__x2y2m1 (double x, double y) -{ - return (double) __x2y2m1l (x, y); -} - -#endif diff --git a/sysdeps/ieee754/ldbl-96/x2y2m1l.c b/sysdeps/ieee754/ldbl-96/x2y2m1l.c deleted file mode 100644 index a301fb3589..0000000000 --- a/sysdeps/ieee754/ldbl-96/x2y2m1l.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Compute x^2 + y^2 - 1, without large cancellation error. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Calculate X + Y exactly and store the result in *HI + *LO. It is - given that |X| >= |Y| and the values are small enough that no - overflow occurs. */ - -static inline void -add_split (long double *hi, long double *lo, long double x, long double y) -{ - /* Apply Dekker's algorithm. */ - *hi = x + y; - *lo = (x - *hi) + y; -} - -/* Compare absolute values of floating-point values pointed to by P - and Q for qsort. */ - -static int -compare (const void *p, const void *q) -{ - long double pld = fabsl (*(const long double *) p); - long double qld = fabsl (*(const long double *) q); - if (pld < qld) - return -1; - else if (pld == qld) - return 0; - else - return 1; -} - -/* Return X^2 + Y^2 - 1, computed without large cancellation error. - It is given that 1 > X >= Y >= epsilon / 2, and that X^2 + Y^2 >= - 0.5. */ - -long double -__x2y2m1l (long double x, long double y) -{ - long double vals[5]; - SET_RESTORE_ROUNDL (FE_TONEAREST); - mul_splitl (&vals[1], &vals[0], x, x); - mul_splitl (&vals[3], &vals[2], y, y); - vals[4] = -1.0L; - qsort (vals, 5, sizeof (long double), compare); - /* Add up the values so that each element of VALS has absolute value - at most equal to the last set bit of the next nonzero - element. */ - for (size_t i = 0; i <= 3; i++) - { - add_split (&vals[i + 1], &vals[i], vals[i + 1], vals[i]); - qsort (vals + i + 1, 4 - i, sizeof (long double), compare); - } - /* Now any error from this addition will be small. */ - return vals[4] + vals[3] + vals[2] + vals[1] + vals[0]; -} diff --git a/sysdeps/ieee754/ldbl-opt/Makefile b/sysdeps/ieee754/ldbl-opt/Makefile deleted file mode 100644 index 81429d0ddd..0000000000 --- a/sysdeps/ieee754/ldbl-opt/Makefile +++ /dev/null @@ -1,167 +0,0 @@ -# The`long double' type is a distinct type we support if -# -mlong-double-128 option is used (or when it becomes a default -# when -mlong-double-64 is not used). -long-double-fcts = yes -ifeq (,$(filter -mlong-double-128,$(sysdep-CFLAGS))) -sysdep-CFLAGS += -mlong-double-128 -endif - -ifeq ($(subdir),math) -libm-routines += s_nexttowardfd -routines += math_ldbl_opt nldbl-compat - -extra-libs += libnldbl -libnldbl-calls = asprintf dprintf fprintf fscanf fwprintf fwscanf iovfscanf \ - obstack_printf obstack_vprintf printf scanf snprintf \ - sprintf sscanf swprintf swscanf vasprintf vdprintf vfprintf \ - vfscanf vfwprintf vfwscanf vprintf vscanf vsnprintf \ - vsprintf vsscanf vswprintf vswscanf vwprintf vwscanf \ - wprintf wscanf printf_fp printf_size \ - fprintf_chk fwprintf_chk printf_chk snprintf_chk sprintf_chk \ - swprintf_chk vfprintf_chk vfwprintf_chk vprintf_chk \ - vsnprintf_chk vsprintf_chk vswprintf_chk vwprintf_chk \ - wprintf_chk asprintf_chk vasprintf_chk dprintf_chk \ - vdprintf_chk obstack_printf_chk obstack_vprintf_chk \ - syslog syslog_chk vsyslog vsyslog_chk \ - strfmon strfmon_l \ - strfroml \ - strtold strtold_l strtoldint wcstold wcstold_l wcstoldint \ - qecvt qfcvt qgcvt qecvt_r qfcvt_r \ - isinf isnan finite signbit scalb log2 lgamma_r ceil \ - significand acos asin atan atan2 cos sin tan cosh sinh \ - tanh acosh asinh atanh exp log log10 exp10 pow10 expm1 \ - log1p logb exp2 sqrt cbrt fabs floor j0 j1 y0 y1 erf erfc \ - lgamma tgamma gamma rint nearbyint round trunc \ - copysign fdim fmax fmin nextafter pow hypot fmod \ - remainder ldexp scalbn frexp modf scalbln fma nan sincos \ - jn yn ilogb remquo lrint lround llrint llround nexttowardf \ - nexttoward conj cacos cacosh casin catan catanh ccos ccosh \ - casinh cexp clog cproj csin csinh csqrt ctan ctanh cpow \ - cabs carg cimag creal clog10 \ - isoc99_scanf isoc99_fscanf isoc99_sscanf \ - isoc99_vscanf isoc99_vfscanf isoc99_vsscanf \ - isoc99_wscanf isoc99_fwscanf isoc99_swscanf \ - isoc99_vwscanf isoc99_vfwscanf isoc99_vswscanf \ - nextup nextdown totalorder totalordermag getpayload \ - canonicalize setpayload setpayloadsig llogb fmaxmag fminmag \ - roundeven fromfp ufromfp fromfpx ufromfpx -libnldbl-routines = $(libnldbl-calls:%=nldbl-%) -libnldbl-inhibit-o = $(object-suffixes) -libnldbl-static-only-routines = $(libnldbl-routines) -extra-objs += $(addsuffix .oS, $(libnldbl-routines)) - -CFLAGS-nldbl-acos.c = -fno-builtin-acosl -CFLAGS-nldbl-acosh.c = -fno-builtin-acoshl -CFLAGS-nldbl-asin.c = -fno-builtin-asinl -CFLAGS-nldbl-asinh.c = -fno-builtin-asinhl -CFLAGS-nldbl-atan.c = -fno-builtin-atanl -CFLAGS-nldbl-atan2.c = -fno-builtin-atan2l -CFLAGS-nldbl-atanh.c = -fno-builtin-atanhl -CFLAGS-nldbl-cabs.c = -fno-builtin-cabsl -CFLAGS-nldbl-cacos.c = -fno-builtin-cacosl -CFLAGS-nldbl-cacosh.c = -fno-builtin-cacoshl -CFLAGS-nldbl-canonicalize.c = -fno-builtin-canonicalizel -CFLAGS-nldbl-carg.c = -fno-builtin-cargl -CFLAGS-nldbl-casin.c = -fno-builtin-casinl -CFLAGS-nldbl-casinh.c = -fno-builtin-casinhl -CFLAGS-nldbl-catan.c = -fno-builtin-catanl -CFLAGS-nldbl-catanh.c = -fno-builtin-catanhl -CFLAGS-nldbl-cbrt.c = -fno-builtin-cbrtl -CFLAGS-nldbl-ccos.c = -fno-builtin-ccosl -CFLAGS-nldbl-ccosh.c = -fno-builtin-ccoshl -CFLAGS-nldbl-ceil.c = -fno-builtin-ceill -CFLAGS-nldbl-cexp.c = -fno-builtin-cexpl -CFLAGS-nldbl-cimag.c = -fno-builtin-cimagl -CFLAGS-nldbl-clog.c = -fno-builtin-clogl -CFLAGS-nldbl-clog10.c = -fno-builtin-clog10l -CFLAGS-nldbl-conj.c = -fno-builtin-conjl -CFLAGS-nldbl-copysign.c = -fno-builtin-copysignl -CFLAGS-nldbl-cos.c = -fno-builtin-cosl -CFLAGS-nldbl-cosh.c = -fno-builtin-coshl -CFLAGS-nldbl-cpow.c = -fno-builtin-cpowl -CFLAGS-nldbl-cproj.c = -fno-builtin-cprojl -CFLAGS-nldbl-creal.c = -fno-builtin-creall -CFLAGS-nldbl-csin.c = -fno-builtin-csinl -CFLAGS-nldbl-csinh.c = -fno-builtin-csinhl -CFLAGS-nldbl-csqrt.c = -fno-builtin-csqrtl -CFLAGS-nldbl-ctan.c = -fno-builtin-ctanl -CFLAGS-nldbl-ctanh.c = -fno-builtin-ctanhl -CFLAGS-nldbl-erf.c = -fno-builtin-erfl -CFLAGS-nldbl-erfc.c = -fno-builtin-erfcl -CFLAGS-nldbl-exp.c = -fno-builtin-expl -CFLAGS-nldbl-exp10.c = -fno-builtin-exp10l -CFLAGS-nldbl-exp2.c = -fno-builtin-exp2l -CFLAGS-nldbl-expm1.c = -fno-builtin-expm1l -CFLAGS-nldbl-fabs.c = -fno-builtin-fabsl -CFLAGS-nldbl-fdim.c = -fno-builtin-fdiml -CFLAGS-nldbl-finite.c = -fno-builtin-finitel -CFLAGS-nldbl-floor.c = -fno-builtin-floorl -CFLAGS-nldbl-fma.c = -fno-builtin-fmal -CFLAGS-nldbl-fmax.c = -fno-builtin-fmaxl -CFLAGS-nldbl-fmaxmag.c = -fno-builtin-fmaxmagl -CFLAGS-nldbl-fmin.c = -fno-builtin-fminl -CFLAGS-nldbl-fminmag.c = -fno-builtin-fminmagl -CFLAGS-nldbl-fmod.c = -fno-builtin-fmodl -CFLAGS-nldbl-frexp.c = -fno-builtin-frexpl -CFLAGS-nldbl-fromfp.c = -fno-builtin-fromfpl -CFLAGS-nldbl-fromfpx.c = -fno-builtin-fromfpxl -CFLAGS-nldbl-gamma.c = -fno-builtin-gammal -CFLAGS-nldbl-getpayload.c = -fno-builtin-getpayloadl -CFLAGS-nldbl-hypot.c = -fno-builtin-hypotl -CFLAGS-nldbl-ilogb.c = -fno-builtin-ilogbl -CFLAGS-nldbl-isinf.c = -fno-builtin-isinfl -CFLAGS-nldbl-isnan.c = -fno-builtin-isnanl -CFLAGS-nldbl-j0.c = -fno-builtin-j0l -CFLAGS-nldbl-j1.c = -fno-builtin-j1l -CFLAGS-nldbl-jn.c = -fno-builtin-jnl -CFLAGS-nldbl-ldexp.c = -fno-builtin-ldexpl -CFLAGS-nldbl-lgamma.c = -fno-builtin-lgammal -CFLAGS-nldbl-lgamma_r.c = -fno-builtin-lgammal_r -CFLAGS-nldbl-llogb.c = -fno-builtin-llogbl -CFLAGS-nldbl-llrint.c = -fno-builtin-llrintl -CFLAGS-nldbl-llround.c = -fno-builtin-llroundl -CFLAGS-nldbl-log.c = -fno-builtin-logl -CFLAGS-nldbl-log10.c = -fno-builtin-log10l -CFLAGS-nldbl-log1p.c = -fno-builtin-log1pl -CFLAGS-nldbl-log2.c = -fno-builtin-log2l -CFLAGS-nldbl-logb.c = -fno-builtin-logbl -CFLAGS-nldbl-lrint.c = -fno-builtin-lrintl -CFLAGS-nldbl-lround.c = -fno-builtin-lroundl -CFLAGS-nldbl-modf.c = -fno-builtin-modfl -CFLAGS-nldbl-nan.c = -fno-builtin-nanl -CFLAGS-nldbl-nearbyint.c = -fno-builtin-nearbyintl -CFLAGS-nldbl-nextafter.c = -fno-builtin-nextafterl -CFLAGS-nldbl-nextdown.c = -fno-builtin-nextdownl -CFLAGS-nldbl-nexttoward.c = -fno-builtin-nexttoward -fno-builtin-nexttowardl -CFLAGS-nldbl-nexttowardf.c = -fno-builtin-nexttowardf -CFLAGS-nldbl-nextup.c = -fno-builtin-nextupl -CFLAGS-nldbl-pow.c = -fno-builtin-powl -CFLAGS-nldbl-pow10.c = -fno-builtin-pow10l -CFLAGS-nldbl-remainder.c = -fno-builtin-remainderl -fno-builtin-dreml -CFLAGS-nldbl-remquo.c = -fno-builtin-remquol -CFLAGS-nldbl-rint.c = -fno-builtin-rintl -CFLAGS-nldbl-round.c = -fno-builtin-roundl -CFLAGS-nldbl-roundeven.c = -fno-builtin-roundevenl -CFLAGS-nldbl-scalb.c = -fno-builtin-scalbl -CFLAGS-nldbl-scalbln.c = -fno-builtin-scalblnl -CFLAGS-nldbl-scalbn.c = -fno-builtin-scalbnl -CFLAGS-nldbl-setpayload.c = -fno-builtin-setpayloadl -CFLAGS-nldbl-setpayloadsig.c = -fno-builtin-setpayloadsigl -CFLAGS-nldbl-significand.c = -fno-builtin-significandl -CFLAGS-nldbl-sin.c = -fno-builtin-sinl -CFLAGS-nldbl-sincos.c = -fno-builtin-sincosl -CFLAGS-nldbl-sinh.c = -fno-builtin-sinhl -CFLAGS-nldbl-sqrt.c = -fno-builtin-sqrtl -CFLAGS-nldbl-tan.c = -fno-builtin-tanl -CFLAGS-nldbl-tanh.c = -fno-builtin-tanhl -CFLAGS-nldbl-tgamma.c = -fno-builtin-tgammal -CFLAGS-nldbl-totalorder.c = -fno-builtin-totalorderl -CFLAGS-nldbl-totalordermag.c = -fno-builtin-totalordermagl -CFLAGS-nldbl-trunc.c = -fno-builtin-truncl -CFLAGS-nldbl-ufromfp.c = -fno-builtin-ufromfpl -CFLAGS-nldbl-ufromfpx.c = -fno-builtin-ufromfpxl -CFLAGS-nldbl-y0.c = -fno-builtin-y0l -CFLAGS-nldbl-y1.c = -fno-builtin-y1l -CFLAGS-nldbl-yn.c = -fno-builtin-ynl - -endif diff --git a/sysdeps/ieee754/ldbl-opt/Versions b/sysdeps/ieee754/ldbl-opt/Versions deleted file mode 100644 index d3f0beaef2..0000000000 --- a/sysdeps/ieee754/ldbl-opt/Versions +++ /dev/null @@ -1,100 +0,0 @@ -%include -%ifndef NLDBL_VERSION -% error "nldbl-abi.h must define NLDBL_VERSION" -%endif - -libc { - NLDBL_VERSION { - # IEEE quad long double functions (older symver is for - # IEEE double long double). - ldexpl; copysignl; finitel; frexpl; isinfl; isnanl; modfl; - __isinfl; __isnanl; __finitel; __signbitl; - scalbnl; - qecvt; qfcvt; qgcvt; qecvt_r; qfcvt_r; - - strtold; __strtold_internal; wcstold; __wcstold_internal; - __strtold_l; strtold_l; __wcstold_l; wcstold_l; - - strfmon; __strfmon_l; strfmon_l; - __nldbl_strfmon; __nldbl___strfmon_l; __nldbl_strfmon_l; - __nldbl___vstrfmon; __nldbl___vstrfmon_l; - - syslog; vsyslog; - __nldbl_syslog; __nldbl_vsyslog; - __nldbl___syslog_chk; __nldbl___vsyslog_chk; - - # *printf* family, using IEEE quad long double - __asprintf; asprintf; dprintf; fprintf; fwprintf; _IO_fprintf; - _IO_printf; _IO_sprintf; _IO_vfprintf; _IO_vsprintf; obstack_printf; - obstack_vprintf; printf; __printf_fp; printf_size; snprintf; sprintf; - swprintf; vasprintf; vdprintf; vfprintf; vfwprintf; vprintf; vsnprintf; - __vsnprintf; vsprintf; vswprintf; vwprintf; wprintf; - - # *printf* family, using IEEE double as long double - # The standard functions are __REDIRECTed to these if -mlong-double-64 - __nldbl___asprintf; __nldbl_asprintf; __nldbl_dprintf; __nldbl_fprintf; - __nldbl_fwprintf; __nldbl__IO_fprintf; __nldbl__IO_printf; - __nldbl__IO_sprintf; __nldbl__IO_vfprintf; __nldbl__IO_vsprintf; - __nldbl_obstack_printf; __nldbl_obstack_vprintf; __nldbl_printf; - __nldbl___printf_fp; __nldbl_printf_size; __nldbl_snprintf; - __nldbl_sprintf; __nldbl_swprintf; __nldbl_vasprintf; __nldbl_vdprintf; - __nldbl_vfprintf; __nldbl_vfwprintf; __nldbl_vprintf; __nldbl_vsnprintf; - __nldbl___vsnprintf; __nldbl_vsprintf; __nldbl_vswprintf; - __nldbl_vwprintf; __nldbl_wprintf; - - # *scanf family, using IEEE quad long double - _IO_sscanf; _IO_vfscanf; __vfscanf; __vsscanf; fscanf; fwscanf; scanf; - sscanf; swscanf; vfscanf; vfwscanf; vscanf; vsscanf; vswscanf; vwscanf; - wscanf; - - # *scanf family, using IEEE double as long double - __nldbl__IO_sscanf; __nldbl__IO_vfscanf; __nldbl___vfscanf; - __nldbl___vsscanf; __nldbl_fscanf; __nldbl_fwscanf; __nldbl_scanf; - __nldbl_sscanf; __nldbl_swscanf; __nldbl_vfscanf; __nldbl_vfwscanf; - __nldbl_vscanf; __nldbl_vsscanf; __nldbl_vswscanf; __nldbl_vwscanf; - __nldbl_wscanf; - - # checking versions, using IEEE quad long double - __sprintf_chk; __vsprintf_chk; __snprintf_chk; __vsnprintf_chk; - __printf_chk; __fprintf_chk; __vprintf_chk; __vfprintf_chk; - - # checking versions, using IEEE double as long double - __nldbl___sprintf_chk; __nldbl___vsprintf_chk; __nldbl___snprintf_chk; - __nldbl___vsnprintf_chk; __nldbl___printf_chk; __nldbl___fprintf_chk; - __nldbl___vprintf_chk; __nldbl___vfprintf_chk; - __nldbl___swprintf_chk; __nldbl___vswprintf_chk; __nldbl___fwprintf_chk; - __nldbl___wprintf_chk; __nldbl___vfwprintf_chk; __nldbl___vwprintf_chk; - } - GLIBC_2.7 { - __nldbl___isoc99_scanf; __nldbl___isoc99_fscanf; - __nldbl___isoc99_sscanf; __nldbl___isoc99_vscanf; - __nldbl___isoc99_vfscanf; __nldbl___isoc99_vsscanf; - __nldbl___isoc99_wscanf; __nldbl___isoc99_fwscanf; - __nldbl___isoc99_swscanf; __nldbl___isoc99_vwscanf; - __nldbl___isoc99_vfwscanf; __nldbl___isoc99_vswscanf; - } - GLIBC_2.8 { - __nldbl___asprintf_chk; __nldbl___vasprintf_chk; - __nldbl___dprintf_chk; __nldbl___vdprintf_chk; - __nldbl___obstack_printf_chk; __nldbl___obstack_vprintf_chk; - } -} -libm { - NLDBL_VERSION { - # IEEE quad long double functions (older symver is for - # IEEE double as long double). - cabsl; cargl; cimagl; conjl; creall; cacosl; cacoshl; casinl; - catanl; catanhl; ccosl; ccoshl; casinhl; cexpl; clogl; __clog10l; - clog10l; cpowl; cprojl; csinl; csinhl; csqrtl; ctanl; ctanhl; - fdiml; fmal; fmaxl; fminl; ldexpl; nanl; nextafterl; nexttowardl; - significandl; acosl; acoshl; asinl; atan2l; atanhl; coshl; dreml; - exp10l; pow10l; exp2l; fmodl; hypotl; j0l; y0l; j1l; y1l; jnl; ynl; - lgammal; gammal; lgammal_r; logl; log10l; log2l; powl; remainderl; - scalbl; sinhl; sqrtl; tgammal; asinhl; atanl; cbrtl; ceill; copysignl; - erfl; erfcl; expm1l; fabsl; finitel; floorl; frexpl; ilogbl; - llrintl; llroundl; log1pl; logbl; lrintl; lroundl; modfl; - nearbyintl; remquol; rintl; roundl; scalblnl; scalbnl; sinl; cosl; - sincosl; tanl; tanhl; truncl; expl; __finitel; __signbitl; - __fpclassifyl; nexttowardf; nexttoward; __nldbl_nexttowardf; - } -} diff --git a/sysdeps/ieee754/ldbl-opt/bits/long-double.h b/sysdeps/ieee754/ldbl-opt/bits/long-double.h deleted file mode 100644 index 67db5b9d0c..0000000000 --- a/sysdeps/ieee754/ldbl-opt/bits/long-double.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Properties of long double type. ldbl-opt version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __NO_LONG_DOUBLE_MATH -# define __LONG_DOUBLE_MATH_OPTIONAL 1 -# ifndef __LONG_DOUBLE_128__ -# define __NO_LONG_DOUBLE_MATH 1 -# endif -#endif diff --git a/sysdeps/ieee754/ldbl-opt/configure b/sysdeps/ieee754/ldbl-opt/configure deleted file mode 100644 index ad9d77b88c..0000000000 --- a/sysdeps/ieee754/ldbl-opt/configure +++ /dev/null @@ -1,39 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/ieee754/ldbl-opt/. - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC $CFLAGS supports -mlong-double-128" >&5 -$as_echo_n "checking whether $CC $CFLAGS supports -mlong-double-128... " >&6; } -if ${libc_cv_mlong_double_128+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -mlong-double-128" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - -#ifndef __LONG_DOUBLE_128__ -# error "compiler did not predefine __LONG_DOUBLE_128__ as expected" -#endif -long double foobar (long double x) { return x; } - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_cv_mlong_double_128=yes -else - libc_cv_mlong_double_128=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -CFLAGS="$save_CFLAGS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mlong_double_128" >&5 -$as_echo "$libc_cv_mlong_double_128" >&6; } -if test "$libc_cv_mlong_double_128" = no; then - as_fn_error $? "this configuration requires -mlong-double-128 support" "$LINENO" 5 -fi diff --git a/sysdeps/ieee754/ldbl-opt/configure.ac b/sysdeps/ieee754/ldbl-opt/configure.ac deleted file mode 100644 index a77fadd1c4..0000000000 --- a/sysdeps/ieee754/ldbl-opt/configure.ac +++ /dev/null @@ -1,19 +0,0 @@ -sinclude(./aclocal.m4)dnl Autoconf lossage -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/ieee754/ldbl-opt/. - -AC_CACHE_CHECK(whether $CC $CFLAGS supports -mlong-double-128, - libc_cv_mlong_double_128, [dnl -save_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -mlong-double-128" -AC_TRY_COMPILE(, [ -#ifndef __LONG_DOUBLE_128__ -# error "compiler did not predefine __LONG_DOUBLE_128__ as expected" -#endif -long double foobar (long double x) { return x; }], - libc_cv_mlong_double_128=yes, - libc_cv_mlong_double_128=no) -CFLAGS="$save_CFLAGS"]) -if test "$libc_cv_mlong_double_128" = no; then - AC_MSG_ERROR([this configuration requires -mlong-double-128 support]) -fi diff --git a/sysdeps/ieee754/ldbl-opt/math-type-macros-double.h b/sysdeps/ieee754/ldbl-opt/math-type-macros-double.h deleted file mode 100644 index 67b5268dc4..0000000000 --- a/sysdeps/ieee754/ldbl-opt/math-type-macros-double.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Overrides for ldbl-opt versioning for double types. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_TYPE_MACROS_DOUBLE - -#include -#include - -/* Define compat symbols for long double on platforms - where it was not always a distinct type. */ -#if !defined M_LIBM_NEED_COMPAT -# define M_LIBM_NEED_COMPAT(f) \ - LONG_DOUBLE_COMPAT (libm, FIRST_VERSION_libm_ ## f ## l) -#endif - -#if !defined declare_mgen_libm_compat -# define declare_mgen_libm_compat(from, to) \ - compat_symbol (libm, from, to ## l, \ - FIRST_VERSION_libm_ ## to ## l); -#endif - -#include_next -#endif diff --git a/sysdeps/ieee754/ldbl-opt/math-type-macros-ldouble.h b/sysdeps/ieee754/ldbl-opt/math-type-macros-ldouble.h deleted file mode 100644 index 20873ae6b5..0000000000 --- a/sysdeps/ieee754/ldbl-opt/math-type-macros-ldouble.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Overrides for ldbl-opt versioning for long double types. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_TYPE_MACROS_LDOUBLE - -#include -#include - -#define maybe_long_double_symbol(lib, from, to) \ - LONG_DOUBLE_COMPAT_CHOOSE_ ## lib ## _ ## to (long_double_symbol (lib, \ - from, \ - to), \ - weak_alias (from, to)) - -/* Use properly versioned symbols for long double on platforms where - it was not always a distinct type. */ -#if !defined declare_mgen_alias -# define declare_mgen_alias(from, to) \ - maybe_long_double_symbol (libm, from ## l, to ## l); -#endif - -#include_next -#endif diff --git a/sysdeps/ieee754/ldbl-opt/math_ldbl_opt.c b/sysdeps/ieee754/ldbl-opt/math_ldbl_opt.c deleted file mode 100644 index 49c5c1249b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/math_ldbl_opt.c +++ /dev/null @@ -1,3 +0,0 @@ -/* Set temporarily to non-zero if long double should be considered - the same as double. */ -__thread int __no_long_double attribute_tls_model_ie attribute_hidden; diff --git a/sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h b/sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h deleted file mode 100644 index af861c11ea..0000000000 --- a/sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h +++ /dev/null @@ -1,46 +0,0 @@ -/* -mlong-double-64 compatibility mode macros. */ - -#include -#ifndef LONG_DOUBLE_COMPAT_VERSION -# error "nldbl-abi.h must define LONG_DOUBLE_COMPAT_VERSION" -#endif - -#include -#define LONG_DOUBLE_COMPAT(lib, introduced) \ - SHLIB_COMPAT(lib, introduced, LONG_DOUBLE_COMPAT_VERSION) -#define long_double_symbol(lib, local, symbol) \ - long_double_symbol_1 (lib, local, symbol, LONG_DOUBLE_COMPAT_VERSION) -#ifdef SHARED -# define ldbl_hidden_def(local, name) libc_hidden_ver (local, name) -# define ldbl_strong_alias(name, aliasname) \ - strong_alias (name, __GL_##name##_##aliasname) \ - long_double_symbol (libc, __GL_##name##_##aliasname, aliasname); -# define ldbl_weak_alias(name, aliasname) \ - weak_alias (name, __GL_##name##_##aliasname) \ - long_double_symbol (libc, __GL_##name##_##aliasname, aliasname); -# define long_double_symbol_1(lib, local, symbol, version) \ - versioned_symbol (lib, local, symbol, version) -#else -# define ldbl_hidden_def(local, name) libc_hidden_def (name) -# define ldbl_strong_alias(name, aliasname) strong_alias (name, aliasname) -# define ldbl_weak_alias(name, aliasname) weak_alias (name, aliasname) -# ifndef __ASSEMBLER__ -/* Note that weak_alias cannot be used - it is defined to nothing - in most of the C files. */ -# define long_double_symbol_1(lib, local, symbol, version) \ - _weak_alias (local, symbol) -# else -# define long_double_symbol_1(lib, local, symbol, version) \ - weak_alias (local, symbol) -# endif -#endif - -#ifndef __ASSEMBLER__ -# include -# include - -/* Set temporarily to non-zero if long double should be considered - the same as double. */ -extern __thread int __no_long_double attribute_tls_model_ie attribute_hidden; -# define __ldbl_is_dbl __builtin_expect (__no_long_double, 0) -#endif diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-acos.c b/sysdeps/ieee754/ldbl-opt/nldbl-acos.c deleted file mode 100644 index 813a17e9d6..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-acos.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -acosl (double x) -{ - return acos (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-acosh.c b/sysdeps/ieee754/ldbl-opt/nldbl-acosh.c deleted file mode 100644 index 75508e30d7..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-acosh.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -acoshl (double x) -{ - return acosh (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-asin.c b/sysdeps/ieee754/ldbl-opt/nldbl-asin.c deleted file mode 100644 index 5bbe6cd992..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-asin.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -asinl (double x) -{ - return asin (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-asinh.c b/sysdeps/ieee754/ldbl-opt/nldbl-asinh.c deleted file mode 100644 index 512f68519b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-asinh.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -asinhl (double x) -{ - return asinh (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-asprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-asprintf.c deleted file mode 100644 index 4be216d610..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-asprintf.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "nldbl-compat.h" - -attribute_hidden -int -__asprintf (char **string_ptr, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vasprintf (string_ptr, fmt, arg); - va_end (arg); - - return done; -} -extern __typeof (__asprintf) asprintf attribute_hidden; -weak_alias (__asprintf, asprintf) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-asprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-asprintf_chk.c deleted file mode 100644 index b520181db7..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-asprintf_chk.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -attribute_hidden -int -__asprintf_chk (char **string_ptr, int flag, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vasprintf_chk (string_ptr, flag, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-atan.c b/sysdeps/ieee754/ldbl-opt/nldbl-atan.c deleted file mode 100644 index 2849e48d03..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-atan.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -atanl (double x) -{ - return atan (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-atan2.c b/sysdeps/ieee754/ldbl-opt/nldbl-atan2.c deleted file mode 100644 index d4e5a91702..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-atan2.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -atan2l (double x, double y) -{ - return atan2 (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-atanh.c b/sysdeps/ieee754/ldbl-opt/nldbl-atanh.c deleted file mode 100644 index 82b54ca6d4..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-atanh.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -atanhl (double x) -{ - return atanh (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-cabs.c b/sysdeps/ieee754/ldbl-opt/nldbl-cabs.c deleted file mode 100644 index 837822d2d6..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-cabs.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double -attribute_hidden -cabsl (double _Complex x) -{ - return cabs (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-cacos.c b/sysdeps/ieee754/ldbl-opt/nldbl-cacos.c deleted file mode 100644 index d935b511b4..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-cacos.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -cacosl (double _Complex x) -{ - return cacos (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-cacosh.c b/sysdeps/ieee754/ldbl-opt/nldbl-cacosh.c deleted file mode 100644 index 67f994b849..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-cacosh.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -cacoshl (double _Complex x) -{ - return cacosh (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-canonicalize.c b/sysdeps/ieee754/ldbl-opt/nldbl-canonicalize.c deleted file mode 100644 index 9d46163208..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-canonicalize.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Compatibility routine for IEEE double as long double for canonicalize. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -int -attribute_hidden -canonicalizel (double *cx, double *x) -{ - return canonicalize (cx, x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-carg.c b/sysdeps/ieee754/ldbl-opt/nldbl-carg.c deleted file mode 100644 index bfff141c11..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-carg.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double -attribute_hidden -cargl (double _Complex x) -{ - return carg (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-casin.c b/sysdeps/ieee754/ldbl-opt/nldbl-casin.c deleted file mode 100644 index 310aa0ac21..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-casin.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -casinl (double _Complex x) -{ - return casin (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-casinh.c b/sysdeps/ieee754/ldbl-opt/nldbl-casinh.c deleted file mode 100644 index 71b466ea22..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-casinh.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -casinhl (double _Complex x) -{ - return casinh (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-catan.c b/sysdeps/ieee754/ldbl-opt/nldbl-catan.c deleted file mode 100644 index ea5f528ee5..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-catan.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -catanl (double _Complex x) -{ - return catan (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-catanh.c b/sysdeps/ieee754/ldbl-opt/nldbl-catanh.c deleted file mode 100644 index e6f58aa048..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-catanh.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -catanhl (double _Complex x) -{ - return catanh (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-cbrt.c b/sysdeps/ieee754/ldbl-opt/nldbl-cbrt.c deleted file mode 100644 index 1c353a6e6b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-cbrt.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -cbrtl (double x) -{ - return cbrt (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-ccos.c b/sysdeps/ieee754/ldbl-opt/nldbl-ccos.c deleted file mode 100644 index 0e1c2e70f3..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-ccos.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -ccosl (double _Complex x) -{ - return ccos (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-ccosh.c b/sysdeps/ieee754/ldbl-opt/nldbl-ccosh.c deleted file mode 100644 index da2bf580af..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-ccosh.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -ccoshl (double _Complex x) -{ - return ccosh (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-ceil.c b/sysdeps/ieee754/ldbl-opt/nldbl-ceil.c deleted file mode 100644 index a8fc3d548a..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-ceil.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -ceill (double x) -{ - return ceil (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-cexp.c b/sysdeps/ieee754/ldbl-opt/nldbl-cexp.c deleted file mode 100644 index f1837afc28..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-cexp.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -cexpl (double _Complex x) -{ - return cexp (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-cimag.c b/sysdeps/ieee754/ldbl-opt/nldbl-cimag.c deleted file mode 100644 index fffbdd58ec..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-cimag.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double -attribute_hidden -cimagl (double _Complex x) -{ - return cimag (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-clog.c b/sysdeps/ieee754/ldbl-opt/nldbl-clog.c deleted file mode 100644 index ecbae7ba91..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-clog.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -clogl (double _Complex x) -{ - return clog (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-clog10.c b/sysdeps/ieee754/ldbl-opt/nldbl-clog10.c deleted file mode 100644 index 193f40104a..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-clog10.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -clog10l (double _Complex x) -{ - return clog10 (x); -} -extern __typeof (clog10l) __clog10l attribute_hidden; -weak_alias (clog10l, __clog10l) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c deleted file mode 100644 index 84c4aeeed9..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c +++ /dev/null @@ -1,1085 +0,0 @@ -/* *printf* family compatibility routines for IEEE double as long double - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2006. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "nldbl-compat.h" - -libc_hidden_proto (__nldbl_vfprintf) -libc_hidden_proto (__nldbl_vsscanf) -libc_hidden_proto (__nldbl_vsprintf) -libc_hidden_proto (__nldbl_vfscanf) -libc_hidden_proto (__nldbl_vfwscanf) -libc_hidden_proto (__nldbl_vdprintf) -libc_hidden_proto (__nldbl_vswscanf) -libc_hidden_proto (__nldbl_vfwprintf) -libc_hidden_proto (__nldbl_vswprintf) -libc_hidden_proto (__nldbl_vsnprintf) -libc_hidden_proto (__nldbl_vasprintf) -libc_hidden_proto (__nldbl_obstack_vprintf) -libc_hidden_proto (__nldbl___vfwprintf_chk) -libc_hidden_proto (__nldbl___vsnprintf_chk) -libc_hidden_proto (__nldbl___vfprintf_chk) -libc_hidden_proto (__nldbl___vsyslog_chk) -libc_hidden_proto (__nldbl___vsprintf_chk) -libc_hidden_proto (__nldbl___vswprintf_chk) -libc_hidden_proto (__nldbl___vasprintf_chk) -libc_hidden_proto (__nldbl___vdprintf_chk) -libc_hidden_proto (__nldbl___obstack_vprintf_chk) -libc_hidden_proto (__nldbl___vstrfmon) -libc_hidden_proto (__nldbl___vstrfmon_l) -libc_hidden_proto (__nldbl___isoc99_vsscanf) -libc_hidden_proto (__nldbl___isoc99_vfscanf) -libc_hidden_proto (__nldbl___isoc99_vswscanf) -libc_hidden_proto (__nldbl___isoc99_vfwscanf) - -static void -__nldbl_cleanup (void *arg) -{ - __no_long_double = 0; -} - -#define set_no_long_double() \ - __libc_cleanup_push (__nldbl_cleanup, NULL); __no_long_double = 1 -#define clear_no_long_double() \ - __no_long_double = 0; __libc_cleanup_pop (0) - -/* Compatibility with IEEE double as long double. - IEEE quad long double is used by default for most programs, so - we don't need to split this into one file per function for the - sake of statically linked programs. */ - -int -attribute_compat_text_section -__nldbl___asprintf (char **string_ptr, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vasprintf (string_ptr, fmt, arg); - va_end (arg); - - return done; -} -weak_alias (__nldbl___asprintf, __nldbl_asprintf) - -int -attribute_compat_text_section -__nldbl_dprintf (int d, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vdprintf (d, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl_fprintf (FILE *stream, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vfprintf (stream, fmt, arg); - va_end (arg); - - return done; -} -weak_alias (__nldbl_fprintf, __nldbl__IO_fprintf) - -int -attribute_compat_text_section weak_function -__nldbl_fwprintf (FILE *stream, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vfwprintf (stream, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl_printf (const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vfprintf (stdout, fmt, arg); - va_end (arg); - - return done; -} -strong_alias (__nldbl_printf, __nldbl__IO_printf) - -int -attribute_compat_text_section -__nldbl_sprintf (char *s, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vsprintf (s, fmt, arg); - va_end (arg); - - return done; -} -strong_alias (__nldbl_sprintf, __nldbl__IO_sprintf) - -int -attribute_compat_text_section -__nldbl_vfprintf (FILE *s, const char *fmt, va_list ap) -{ - int done; - set_no_long_double (); - done = _IO_vfprintf (s, fmt, ap); - clear_no_long_double (); - return done; -} -libc_hidden_def (__nldbl_vfprintf) -strong_alias (__nldbl_vfprintf, __nldbl__IO_vfprintf) - -int -attribute_compat_text_section -__nldbl__IO_vsprintf (char *string, const char *fmt, va_list ap) -{ - int done; - __no_long_double = 1; - done = _IO_vsprintf (string, fmt, ap); - __no_long_double = 0; - return done; -} -weak_alias (__nldbl__IO_vsprintf, __nldbl_vsprintf) -libc_hidden_def (__nldbl_vsprintf) - -int -attribute_compat_text_section -__nldbl_obstack_vprintf (struct obstack *obstack, const char *fmt, - va_list ap) -{ - int done; - __no_long_double = 1; - done = _IO_obstack_vprintf (obstack, fmt, ap); - __no_long_double = 0; - return done; -} -libc_hidden_def (__nldbl_obstack_vprintf) - -int -attribute_compat_text_section -__nldbl_obstack_printf (struct obstack *obstack, const char *fmt, ...) -{ - int result; - va_list ap; - va_start (ap, fmt); - result = __nldbl_obstack_vprintf (obstack, fmt, ap); - va_end (ap); - return result; -} - -int -attribute_compat_text_section weak_function -__nldbl_snprintf (char *s, size_t maxlen, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vsnprintf (s, maxlen, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl_swprintf (wchar_t *s, size_t n, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vswprintf (s, n, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section weak_function -__nldbl_vasprintf (char **result_ptr, const char *fmt, va_list ap) -{ - int res; - __no_long_double = 1; - res = _IO_vasprintf (result_ptr, fmt, ap); - __no_long_double = 0; - return res; -} -libc_hidden_def (__nldbl_vasprintf) - -int -attribute_compat_text_section -__nldbl_vdprintf (int d, const char *fmt, va_list arg) -{ - int res; - set_no_long_double (); - res = _IO_vdprintf (d, fmt, arg); - clear_no_long_double (); - return res; -} -libc_hidden_def (__nldbl_vdprintf) - -int -attribute_compat_text_section weak_function -__nldbl_vfwprintf (FILE *s, const wchar_t *fmt, va_list ap) -{ - int res; - set_no_long_double (); - res = _IO_vfwprintf (s, fmt, ap); - clear_no_long_double (); - return res; -} -libc_hidden_def (__nldbl_vfwprintf) - -int -attribute_compat_text_section -__nldbl_vprintf (const char *fmt, va_list ap) -{ - return __nldbl_vfprintf (stdout, fmt, ap); -} - -int -attribute_compat_text_section -__nldbl_vsnprintf (char *string, size_t maxlen, const char *fmt, - va_list ap) -{ - int res; - __no_long_double = 1; - res = _IO_vsnprintf (string, maxlen, fmt, ap); - __no_long_double = 0; - return res; -} -libc_hidden_def (__nldbl_vsnprintf) -weak_alias (__nldbl_vsnprintf, __nldbl___vsnprintf) - -int -attribute_compat_text_section weak_function -__nldbl_vswprintf (wchar_t *string, size_t maxlen, const wchar_t *fmt, - va_list ap) -{ - int res; - __no_long_double = 1; - res = _IO_vswprintf (string, maxlen, fmt, ap); - __no_long_double = 0; - return res; -} -libc_hidden_def (__nldbl_vswprintf) - -int -attribute_compat_text_section -__nldbl_vwprintf (const wchar_t *fmt, va_list ap) -{ - return __nldbl_vfwprintf (stdout, fmt, ap); -} - -int -attribute_compat_text_section -__nldbl_wprintf (const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vfwprintf (stdout, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl__IO_vfscanf (FILE *s, const char *fmt, _IO_va_list ap, - int *errp) -{ - int res; - set_no_long_double (); - res = _IO_vfscanf (s, fmt, ap, errp); - clear_no_long_double (); - return res; -} - -int -attribute_compat_text_section -__nldbl___vfscanf (FILE *s, const char *fmt, va_list ap) -{ - int res; - set_no_long_double (); - res = _IO_vfscanf (s, fmt, ap, NULL); - clear_no_long_double (); - return res; -} -weak_alias (__nldbl___vfscanf, __nldbl_vfscanf) -libc_hidden_def (__nldbl_vfscanf) - -int -attribute_compat_text_section -__nldbl_sscanf (const char *s, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vsscanf (s, fmt, arg); - va_end (arg); - - return done; -} -strong_alias (__nldbl_sscanf, __nldbl__IO_sscanf) - -int -attribute_compat_text_section -__nldbl___vsscanf (const char *string, const char *fmt, va_list ap) -{ - int res; - __no_long_double = 1; - res = _IO_vsscanf (string, fmt, ap); - __no_long_double = 0; - return res; -} -weak_alias (__nldbl___vsscanf, __nldbl_vsscanf) -libc_hidden_def (__nldbl_vsscanf) - -int -attribute_compat_text_section weak_function -__nldbl_vscanf (const char *fmt, va_list ap) -{ - return __nldbl_vfscanf (stdin, fmt, ap); -} - -int -attribute_compat_text_section -__nldbl_fscanf (FILE *stream, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vfscanf (stream, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl_scanf (const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vfscanf (stdin, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl_vfwscanf (FILE *s, const wchar_t *fmt, va_list ap) -{ - int res; - set_no_long_double (); - res = _IO_vfwscanf (s, fmt, ap, NULL); - clear_no_long_double (); - return res; -} -libc_hidden_def (__nldbl_vfwscanf) - -int -attribute_compat_text_section -__nldbl_swscanf (const wchar_t *s, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vswscanf (s, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl_vswscanf (const wchar_t *string, const wchar_t *fmt, va_list ap) -{ - int res; - __no_long_double = 1; - res = vswscanf (string, fmt, ap); - __no_long_double = 0; - return res; -} -libc_hidden_def (__nldbl_vswscanf) - -int -attribute_compat_text_section weak_function -__nldbl_vwscanf (const wchar_t *fmt, va_list ap) -{ - return __nldbl_vfwscanf (stdin, fmt, ap); -} - -int -attribute_compat_text_section -__nldbl_fwscanf (FILE *stream, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vfwscanf (stream, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl_wscanf (const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vfwscanf (stdin, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___fprintf_chk (FILE *stream, int flag, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vfprintf_chk (stream, flag, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___fwprintf_chk (FILE *stream, int flag, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vfwprintf_chk (stream, flag, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___printf_chk (int flag, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vfprintf_chk (stdout, flag, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___snprintf_chk (char *s, size_t maxlen, int flag, size_t slen, - const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vsnprintf_chk (s, maxlen, flag, slen, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___sprintf_chk (char *s, int flag, size_t slen, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vsprintf_chk (s, flag, slen, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___swprintf_chk (wchar_t *s, size_t n, int flag, size_t slen, - const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vswprintf_chk (s, n, flag, slen, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___vfprintf_chk (FILE *s, int flag, const char *fmt, va_list ap) -{ - int res; - set_no_long_double (); - res = __vfprintf_chk (s, flag, fmt, ap); - clear_no_long_double (); - return res; -} -libc_hidden_def (__nldbl___vfprintf_chk) - -int -attribute_compat_text_section -__nldbl___vfwprintf_chk (FILE *s, int flag, const wchar_t *fmt, va_list ap) -{ - int res; - set_no_long_double (); - res = __vfwprintf_chk (s, flag, fmt, ap); - clear_no_long_double (); - return res; -} -libc_hidden_def (__nldbl___vfwprintf_chk) - -int -attribute_compat_text_section -__nldbl___vprintf_chk (int flag, const char *fmt, va_list ap) -{ - return __nldbl___vfprintf_chk (stdout, flag, fmt, ap); -} - -int -attribute_compat_text_section -__nldbl___vsnprintf_chk (char *string, size_t maxlen, int flag, size_t slen, - const char *fmt, va_list ap) -{ - int res; - __no_long_double = 1; - res = __vsnprintf_chk (string, maxlen, flag, slen, fmt, ap); - __no_long_double = 0; - return res; -} -libc_hidden_def (__nldbl___vsnprintf_chk) - -int -attribute_compat_text_section -__nldbl___vsprintf_chk (char *string, int flag, size_t slen, const char *fmt, - va_list ap) -{ - int res; - __no_long_double = 1; - res = __vsprintf_chk (string, flag, slen, fmt, ap); - __no_long_double = 0; - return res; -} -libc_hidden_def (__nldbl___vsprintf_chk) - -int -attribute_compat_text_section -__nldbl___vswprintf_chk (wchar_t *string, size_t maxlen, int flag, size_t slen, - const wchar_t *fmt, va_list ap) -{ - int res; - __no_long_double = 1; - res = __vswprintf_chk (string, maxlen, flag, slen, fmt, ap); - __no_long_double = 0; - return res; -} -libc_hidden_def (__nldbl___vswprintf_chk) - -int -attribute_compat_text_section -__nldbl___vwprintf_chk (int flag, const wchar_t *fmt, va_list ap) -{ - return __nldbl___vfwprintf_chk (stdout, flag, fmt, ap); -} - -int -attribute_compat_text_section -__nldbl___wprintf_chk (int flag, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vfwprintf_chk (stdout, flag, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___vasprintf_chk (char **ptr, int flag, const char *fmt, va_list arg) -{ - int res; - __no_long_double = 1; - res = __vasprintf_chk (ptr, flag, fmt, arg); - __no_long_double = 0; - return res; -} -libc_hidden_def (__nldbl___vasprintf_chk) - -int -attribute_compat_text_section -__nldbl___asprintf_chk (char **ptr, int flag, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vasprintf_chk (ptr, flag, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___vdprintf_chk (int d, int flag, const char *fmt, va_list arg) -{ - int res; - set_no_long_double (); - res = __vdprintf_chk (d, flag, fmt, arg); - clear_no_long_double (); - return res; -} -libc_hidden_def (__nldbl___vdprintf_chk) - -int -attribute_compat_text_section -__nldbl___dprintf_chk (int d, int flag, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vdprintf_chk (d, flag, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___obstack_vprintf_chk (struct obstack *obstack, int flag, - const char *fmt, va_list arg) -{ - int res; - __no_long_double = 1; - res = __obstack_vprintf_chk (obstack, flag, fmt, arg); - __no_long_double = 0; - return res; -} -libc_hidden_def (__nldbl___obstack_vprintf_chk) - -int -attribute_compat_text_section -__nldbl___obstack_printf_chk (struct obstack *obstack, int flag, - const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___obstack_vprintf_chk (obstack, flag, fmt, arg); - va_end (arg); - - return done; -} - -extern __typeof (printf_size) __printf_size; - -int -attribute_compat_text_section -__nldbl_printf_size (FILE *fp, const struct printf_info *info, - const void *const *args) -{ - struct printf_info info_no_ldbl = *info; - - info_no_ldbl.is_long_double = 0; - return __printf_size (fp, &info_no_ldbl, args); -} - -extern __typeof (__printf_fp) ___printf_fp; - -int -attribute_compat_text_section -__nldbl___printf_fp (FILE *fp, const struct printf_info *info, - const void *const *args) -{ - struct printf_info info_no_ldbl = *info; - - info_no_ldbl.is_long_double = 0; - return ___printf_fp (fp, &info_no_ldbl, args); -} - -ssize_t -attribute_compat_text_section -__nldbl_strfmon (char *s, size_t maxsize, const char *format, ...) -{ - va_list ap; - ssize_t res; - - va_start (ap, format); - res = __nldbl___vstrfmon (s, maxsize, format, ap); - va_end (ap); - return res; -} - -ssize_t -attribute_compat_text_section -__nldbl___strfmon_l (char *s, size_t maxsize, __locale_t loc, - const char *format, ...) -{ - va_list ap; - ssize_t res; - - va_start (ap, format); - res = __nldbl___vstrfmon_l (s, maxsize, loc, format, ap); - va_end (ap); - return res; -} -weak_alias (__nldbl___strfmon_l, __nldbl_strfmon_l) - -ssize_t -attribute_compat_text_section -__nldbl___vstrfmon (char *s, size_t maxsize, const char *format, va_list ap) -{ - ssize_t res; - __no_long_double = 1; - res = __vstrfmon_l (s, maxsize, _NL_CURRENT_LOCALE, format, ap); - __no_long_double = 0; - va_end (ap); - return res; -} -libc_hidden_def (__nldbl___vstrfmon) - -ssize_t -attribute_compat_text_section -__nldbl___vstrfmon_l (char *s, size_t maxsize, __locale_t loc, - const char *format, va_list ap) -{ - ssize_t res; - __no_long_double = 1; - res = __vstrfmon_l (s, maxsize, loc, format, ap); - __no_long_double = 0; - va_end (ap); - return res; -} -libc_hidden_def (__nldbl___vstrfmon_l) - -void -attribute_compat_text_section -__nldbl_syslog (int pri, const char *fmt, ...) -{ - va_list ap; - va_start (ap, fmt); - __nldbl___vsyslog_chk (pri, -1, fmt, ap); - va_end (ap); -} - -void -attribute_compat_text_section -__nldbl___syslog_chk (int pri, int flag, const char *fmt, ...) -{ - va_list ap; - - va_start (ap, fmt); - __nldbl___vsyslog_chk (pri, flag, fmt, ap); - va_end(ap); -} - -void -attribute_compat_text_section -__nldbl___vsyslog_chk (int pri, int flag, const char *fmt, va_list ap) -{ - set_no_long_double (); - __vsyslog_chk (pri, flag, fmt, ap); - clear_no_long_double (); -} -libc_hidden_def (__nldbl___vsyslog_chk) - -void -attribute_compat_text_section -__nldbl_vsyslog (int pri, const char *fmt, va_list ap) -{ - __nldbl___vsyslog_chk (pri, -1, fmt, ap); -} - -int -attribute_compat_text_section -__nldbl___isoc99_vfscanf (FILE *s, const char *fmt, va_list ap) -{ - int res; - set_no_long_double (); - res = __isoc99_vfscanf (s, fmt, ap); - clear_no_long_double (); - return res; -} -libc_hidden_def (__nldbl___isoc99_vfscanf) - -int -attribute_compat_text_section -__nldbl___isoc99_sscanf (const char *s, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___isoc99_vsscanf (s, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___isoc99_vsscanf (const char *string, const char *fmt, va_list ap) -{ - int res; - __no_long_double = 1; - res = __isoc99_vsscanf (string, fmt, ap); - __no_long_double = 0; - return res; -} -libc_hidden_def (__nldbl___isoc99_vsscanf) - -int -attribute_compat_text_section -__nldbl___isoc99_vscanf (const char *fmt, va_list ap) -{ - return __nldbl___isoc99_vfscanf (stdin, fmt, ap); -} - -int -attribute_compat_text_section -__nldbl___isoc99_fscanf (FILE *stream, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___isoc99_vfscanf (stream, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___isoc99_scanf (const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___isoc99_vfscanf (stdin, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___isoc99_vfwscanf (FILE *s, const wchar_t *fmt, va_list ap) -{ - int res; - set_no_long_double (); - res = __isoc99_vfwscanf (s, fmt, ap); - clear_no_long_double (); - return res; -} -libc_hidden_def (__nldbl___isoc99_vfwscanf) - -int -attribute_compat_text_section -__nldbl___isoc99_swscanf (const wchar_t *s, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___isoc99_vswscanf (s, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___isoc99_vswscanf (const wchar_t *string, const wchar_t *fmt, - va_list ap) -{ - int res; - __no_long_double = 1; - res = __isoc99_vswscanf (string, fmt, ap); - __no_long_double = 0; - return res; -} -libc_hidden_def (__nldbl___isoc99_vswscanf) - -int -attribute_compat_text_section -__nldbl___isoc99_vwscanf (const wchar_t *fmt, va_list ap) -{ - return __nldbl___isoc99_vfwscanf (stdin, fmt, ap); -} - -int -attribute_compat_text_section -__nldbl___isoc99_fwscanf (FILE *stream, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___isoc99_vfwscanf (stream, fmt, arg); - va_end (arg); - - return done; -} - -int -attribute_compat_text_section -__nldbl___isoc99_wscanf (const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___isoc99_vfwscanf (stdin, fmt, arg); - va_end (arg); - - return done; -} - -#if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __nldbl__IO_printf, _IO_printf, GLIBC_2_0); -compat_symbol (libc, __nldbl__IO_sprintf, _IO_sprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl__IO_vfprintf, _IO_vfprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl__IO_vsprintf, _IO_vsprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl_dprintf, dprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl_fprintf, fprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl_printf, printf, GLIBC_2_0); -compat_symbol (libc, __nldbl_sprintf, sprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl_vfprintf, vfprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl_vprintf, vprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl__IO_fprintf, _IO_fprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl___vsnprintf, __vsnprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl_asprintf, asprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl_obstack_printf, obstack_printf, GLIBC_2_0); -compat_symbol (libc, __nldbl_obstack_vprintf, obstack_vprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl_snprintf, snprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl_vasprintf, vasprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl_vdprintf, vdprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl_vsnprintf, vsnprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl_vsprintf, vsprintf, GLIBC_2_0); -compat_symbol (libc, __nldbl__IO_sscanf, _IO_sscanf, GLIBC_2_0); -compat_symbol (libc, __nldbl__IO_vfscanf, _IO_vfscanf, GLIBC_2_0); -compat_symbol (libc, __nldbl___vfscanf, __vfscanf, GLIBC_2_0); -compat_symbol (libc, __nldbl___vsscanf, __vsscanf, GLIBC_2_0); -compat_symbol (libc, __nldbl_fscanf, fscanf, GLIBC_2_0); -compat_symbol (libc, __nldbl_scanf, scanf, GLIBC_2_0); -compat_symbol (libc, __nldbl_sscanf, sscanf, GLIBC_2_0); -compat_symbol (libc, __nldbl_vfscanf, vfscanf, GLIBC_2_0); -compat_symbol (libc, __nldbl_vscanf, vscanf, GLIBC_2_0); -compat_symbol (libc, __nldbl_vsscanf, vsscanf, GLIBC_2_0); -compat_symbol (libc, __nldbl___printf_fp, __printf_fp, GLIBC_2_0); -compat_symbol (libc, __nldbl_strfmon, strfmon, GLIBC_2_0); -compat_symbol (libc, __nldbl_syslog, syslog, GLIBC_2_0); -compat_symbol (libc, __nldbl_vsyslog, vsyslog, GLIBC_2_0); -#endif -#if LONG_DOUBLE_COMPAT(libc, GLIBC_2_1) -compat_symbol (libc, __nldbl___asprintf, __asprintf, GLIBC_2_1); -compat_symbol (libc, __nldbl_printf_size, printf_size, GLIBC_2_1); -compat_symbol (libc, __nldbl___strfmon_l, __strfmon_l, GLIBC_2_1); -#endif -#if LONG_DOUBLE_COMPAT(libc, GLIBC_2_2) -compat_symbol (libc, __nldbl_swprintf, swprintf, GLIBC_2_2); -compat_symbol (libc, __nldbl_vwprintf, vwprintf, GLIBC_2_2); -compat_symbol (libc, __nldbl_wprintf, wprintf, GLIBC_2_2); -compat_symbol (libc, __nldbl_fwprintf, fwprintf, GLIBC_2_2); -compat_symbol (libc, __nldbl_vfwprintf, vfwprintf, GLIBC_2_2); -compat_symbol (libc, __nldbl_vswprintf, vswprintf, GLIBC_2_2); -compat_symbol (libc, __nldbl_fwscanf, fwscanf, GLIBC_2_2); -compat_symbol (libc, __nldbl_swscanf, swscanf, GLIBC_2_2); -compat_symbol (libc, __nldbl_vfwscanf, vfwscanf, GLIBC_2_2); -compat_symbol (libc, __nldbl_vswscanf, vswscanf, GLIBC_2_2); -compat_symbol (libc, __nldbl_vwscanf, vwscanf, GLIBC_2_2); -compat_symbol (libc, __nldbl_wscanf, wscanf, GLIBC_2_2); -#endif -#if LONG_DOUBLE_COMPAT(libc, GLIBC_2_3) -compat_symbol (libc, __nldbl_strfmon_l, strfmon_l, GLIBC_2_3); -#endif -#if LONG_DOUBLE_COMPAT(libc, GLIBC_2_3_4) -compat_symbol (libc, __nldbl___sprintf_chk, __sprintf_chk, GLIBC_2_3_4); -compat_symbol (libc, __nldbl___vsprintf_chk, __vsprintf_chk, GLIBC_2_3_4); -compat_symbol (libc, __nldbl___snprintf_chk, __snprintf_chk, GLIBC_2_3_4); -compat_symbol (libc, __nldbl___vsnprintf_chk, __vsnprintf_chk, GLIBC_2_3_4); -compat_symbol (libc, __nldbl___printf_chk, __printf_chk, GLIBC_2_3_4); -compat_symbol (libc, __nldbl___fprintf_chk, __fprintf_chk, GLIBC_2_3_4); -compat_symbol (libc, __nldbl___vprintf_chk, __vprintf_chk, GLIBC_2_3_4); -compat_symbol (libc, __nldbl___vfprintf_chk, __vfprintf_chk, GLIBC_2_3_4); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-compat.h b/sysdeps/ieee754/ldbl-opt/nldbl-compat.h deleted file mode 100644 index 72ec0db390..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-compat.h +++ /dev/null @@ -1,104 +0,0 @@ -/* Prototypes for compatibility double == long double entry points. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2006. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __NLDBL_COMPAT_H -#define __NLDBL_COMPAT_H 1 - -/* Avoid long double prototypes. */ -#define __NO_LONG_DOUBLE_MATH 1 -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -/* Declare the __nldbl_NAME function the wrappers call that's in libc.so. */ -#define NLDBL_DECL(name) extern __typeof (name) __nldbl_##name - -NLDBL_DECL (_IO_vfscanf); -NLDBL_DECL (vfscanf); -NLDBL_DECL (vfwscanf); -NLDBL_DECL (obstack_vprintf); -NLDBL_DECL (vasprintf); -NLDBL_DECL (dprintf); -NLDBL_DECL (vdprintf); -NLDBL_DECL (fprintf); -NLDBL_DECL (vfprintf); -NLDBL_DECL (vfwprintf); -NLDBL_DECL (vsnprintf); -NLDBL_DECL (vsprintf); -NLDBL_DECL (vsscanf); -NLDBL_DECL (vswprintf); -NLDBL_DECL (vswscanf); -NLDBL_DECL (__asprintf); -NLDBL_DECL (asprintf); -NLDBL_DECL (__printf_fp); -NLDBL_DECL (printf_size); -NLDBL_DECL (syslog); -NLDBL_DECL (vsyslog); -NLDBL_DECL (qecvt); -NLDBL_DECL (qfcvt); -NLDBL_DECL (qgcvt); -NLDBL_DECL (__vstrfmon_l); -NLDBL_DECL (__isoc99_scanf); -NLDBL_DECL (__isoc99_fscanf); -NLDBL_DECL (__isoc99_sscanf); -NLDBL_DECL (__isoc99_vscanf); -NLDBL_DECL (__isoc99_vfscanf); -NLDBL_DECL (__isoc99_vsscanf); -NLDBL_DECL (__isoc99_wscanf); -NLDBL_DECL (__isoc99_fwscanf); -NLDBL_DECL (__isoc99_swscanf); -NLDBL_DECL (__isoc99_vwscanf); -NLDBL_DECL (__isoc99_vfwscanf); -NLDBL_DECL (__isoc99_vswscanf); - -/* This one does not exist in the normal interface, only - __nldbl___vstrfmon really exists. */ -extern ssize_t __nldbl___vstrfmon (char *, size_t, const char *, va_list) - __THROW; - -/* These don't use __typeof because they were not declared by the headers, - since we don't compile with _FORTIFY_SOURCE. */ -extern int __nldbl___vfprintf_chk (FILE *__restrict, int, - const char *__restrict, _G_va_list); -extern int __nldbl___vfwprintf_chk (FILE *__restrict, int, - const wchar_t *__restrict, __gnuc_va_list); -extern int __nldbl___vsprintf_chk (char *__restrict, int, size_t, - const char *__restrict, _G_va_list) __THROW; -extern int __nldbl___vsnprintf_chk (char *__restrict, size_t, int, size_t, - const char *__restrict, _G_va_list) - __THROW; -extern int __nldbl___vswprintf_chk (wchar_t *__restrict, size_t, int, size_t, - const wchar_t *__restrict, __gnuc_va_list) - __THROW; -extern int __nldbl___vasprintf_chk (char **, int, const char *, _G_va_list) - __THROW; -extern int __nldbl___vdprintf_chk (int, int, const char *, _G_va_list); -extern int __nldbl___obstack_vprintf_chk (struct obstack *, int, const char *, - _G_va_list) __THROW; -extern void __nldbl___vsyslog_chk (int, int, const char *, va_list); - - -#endif /* __NLDBL_COMPAT_H */ diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-conj.c b/sysdeps/ieee754/ldbl-opt/nldbl-conj.c deleted file mode 100644 index 8927ea9968..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-conj.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -conjl (double _Complex x) -{ - return conj (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-copysign.c b/sysdeps/ieee754/ldbl-opt/nldbl-copysign.c deleted file mode 100644 index 045f00dda8..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-copysign.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -copysignl (double x, double y) -{ - return __copysign (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-cos.c b/sysdeps/ieee754/ldbl-opt/nldbl-cos.c deleted file mode 100644 index 08738af048..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-cos.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -cosl (double x) -{ - return cos (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-cosh.c b/sysdeps/ieee754/ldbl-opt/nldbl-cosh.c deleted file mode 100644 index 0ab834ffd9..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-cosh.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -coshl (double x) -{ - return cosh (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-cpow.c b/sysdeps/ieee754/ldbl-opt/nldbl-cpow.c deleted file mode 100644 index 709e7d73b1..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-cpow.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -cpowl (double _Complex x, double _Complex y) -{ - return cpow (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-cproj.c b/sysdeps/ieee754/ldbl-opt/nldbl-cproj.c deleted file mode 100644 index 6f88b88bf2..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-cproj.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -cprojl (double _Complex x) -{ - return cproj (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-creal.c b/sysdeps/ieee754/ldbl-opt/nldbl-creal.c deleted file mode 100644 index b02ce6e5e4..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-creal.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double -attribute_hidden -creall (double _Complex x) -{ - return creal (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-csin.c b/sysdeps/ieee754/ldbl-opt/nldbl-csin.c deleted file mode 100644 index b2e2c9c8ef..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-csin.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -csinl (double _Complex x) -{ - return csin (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-csinh.c b/sysdeps/ieee754/ldbl-opt/nldbl-csinh.c deleted file mode 100644 index 2bcba920e3..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-csinh.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -csinhl (double _Complex x) -{ - return csinh (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-csqrt.c b/sysdeps/ieee754/ldbl-opt/nldbl-csqrt.c deleted file mode 100644 index ae00a29885..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-csqrt.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -csqrtl (double _Complex x) -{ - return csqrt (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-ctan.c b/sysdeps/ieee754/ldbl-opt/nldbl-ctan.c deleted file mode 100644 index 422c5cce94..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-ctan.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -ctanl (double _Complex x) -{ - return ctan (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-ctanh.c b/sysdeps/ieee754/ldbl-opt/nldbl-ctanh.c deleted file mode 100644 index f3842ed26f..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-ctanh.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" -#include - -double _Complex -attribute_hidden -ctanhl (double _Complex x) -{ - return ctanh (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-dprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-dprintf.c deleted file mode 100644 index 6e26db2a24..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-dprintf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -attribute_hidden -int -dprintf (int d, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vdprintf (d, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-dprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-dprintf_chk.c deleted file mode 100644 index b3e2359128..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-dprintf_chk.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -attribute_hidden -int -__dprintf_chk (int d, int flag, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vdprintf_chk (d, flag, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-erf.c b/sysdeps/ieee754/ldbl-opt/nldbl-erf.c deleted file mode 100644 index 0032c1febc..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-erf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -erfl (double x) -{ - return erf (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-erfc.c b/sysdeps/ieee754/ldbl-opt/nldbl-erfc.c deleted file mode 100644 index 21d09680aa..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-erfc.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -erfcl (double x) -{ - return erfc (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-exp.c b/sysdeps/ieee754/ldbl-opt/nldbl-exp.c deleted file mode 100644 index ad2c89b6d5..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-exp.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -expl (double x) -{ - return exp (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-exp10.c b/sysdeps/ieee754/ldbl-opt/nldbl-exp10.c deleted file mode 100644 index 2d0ead686b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-exp10.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -exp10l (double x) -{ - return exp10 (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-exp2.c b/sysdeps/ieee754/ldbl-opt/nldbl-exp2.c deleted file mode 100644 index d5fce3970d..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-exp2.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -exp2l (double x) -{ - return exp2 (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-expm1.c b/sysdeps/ieee754/ldbl-opt/nldbl-expm1.c deleted file mode 100644 index be5c6e51c4..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-expm1.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -expm1l (double x) -{ - return expm1 (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fabs.c b/sysdeps/ieee754/ldbl-opt/nldbl-fabs.c deleted file mode 100644 index 10729a6ec0..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fabs.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -fabsl (double x) -{ - return fabs (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fdim.c b/sysdeps/ieee754/ldbl-opt/nldbl-fdim.c deleted file mode 100644 index 72896b63ed..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fdim.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -fdiml (double x, double y) -{ - return fdim (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-finite.c b/sysdeps/ieee754/ldbl-opt/nldbl-finite.c deleted file mode 100644 index fc51508f16..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-finite.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__finitel (double x) -{ - return isfinite (x); -} -extern __typeof (__finitel) finitel attribute_hidden; -weak_alias (__finitel, finitel) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-floor.c b/sysdeps/ieee754/ldbl-opt/nldbl-floor.c deleted file mode 100644 index c7e9f834b6..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-floor.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -floorl (double x) -{ - return floor (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fma.c b/sysdeps/ieee754/ldbl-opt/nldbl-fma.c deleted file mode 100644 index 9474483673..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fma.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -fmal (double x, double y, double z) -{ - return fma (x, y, z); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fmax.c b/sysdeps/ieee754/ldbl-opt/nldbl-fmax.c deleted file mode 100644 index f5a84776ed..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fmax.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -fmaxl (double x, double y) -{ - return fmax (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fmaxmag.c b/sysdeps/ieee754/ldbl-opt/nldbl-fmaxmag.c deleted file mode 100644 index 28aab5791a..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fmaxmag.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Compatibility routine for IEEE double as long double for fmaxmag. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -double -attribute_hidden -fmaxmagl (double x, double y) -{ - return fmaxmag (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fmin.c b/sysdeps/ieee754/ldbl-opt/nldbl-fmin.c deleted file mode 100644 index a353cf9484..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fmin.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -fminl (double x, double y) -{ - return fmin (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fminmag.c b/sysdeps/ieee754/ldbl-opt/nldbl-fminmag.c deleted file mode 100644 index f1743acd4d..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fminmag.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Compatibility routine for IEEE double as long double for fminmag. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -double -attribute_hidden -fminmagl (double x, double y) -{ - return fminmag (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fmod.c b/sysdeps/ieee754/ldbl-opt/nldbl-fmod.c deleted file mode 100644 index aa692b9f36..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fmod.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -fmodl (double x, double y) -{ - return fmod (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-fprintf.c deleted file mode 100644 index 9df4c4bc34..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fprintf.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "nldbl-compat.h" - -attribute_hidden -int -fprintf (FILE *stream, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vfprintf (stream, fmt, arg); - va_end (arg); - - return done; -} -extern __typeof (fprintf) _IO_fprintf attribute_hidden; -weak_alias (fprintf, _IO_fprintf) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-fprintf_chk.c deleted file mode 100644 index 43a7618183..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fprintf_chk.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__fprintf_chk (FILE *stream, int flag, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vfprintf_chk (stream, flag, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-frexp.c b/sysdeps/ieee754/ldbl-opt/nldbl-frexp.c deleted file mode 100644 index 0ec97e10e3..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-frexp.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -frexpl (double x, int *exponent) -{ - return frexp (x, exponent); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fromfp.c b/sysdeps/ieee754/ldbl-opt/nldbl-fromfp.c deleted file mode 100644 index 6ef95f4ab4..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fromfp.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Compatibility routine for IEEE double as long double for fromfp. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -intmax_t -attribute_hidden -fromfpl (double x, int round, unsigned int width) -{ - return fromfp (x, round, width); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fromfpx.c b/sysdeps/ieee754/ldbl-opt/nldbl-fromfpx.c deleted file mode 100644 index 193d9b6ce1..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fromfpx.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Compatibility routine for IEEE double as long double for fromfpx. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -intmax_t -attribute_hidden -fromfpxl (double x, int round, unsigned int width) -{ - return fromfpx (x, round, width); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c deleted file mode 100644 index 1b768e306f..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -fscanf (FILE *stream, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl__IO_vfscanf (stream, fmt, arg, NULL); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fwprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-fwprintf.c deleted file mode 100644 index 18362af013..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fwprintf.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -weak_function -fwprintf (FILE *stream, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vfwprintf (stream, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fwprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-fwprintf_chk.c deleted file mode 100644 index 09731cf29d..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fwprintf_chk.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__fwprintf_chk (FILE *stream, int flag, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vfwprintf_chk (stream, flag, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-fwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-fwscanf.c deleted file mode 100644 index 27fc1a7271..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-fwscanf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -fwscanf (FILE *stream, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vfwscanf (stream, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-gamma.c b/sysdeps/ieee754/ldbl-opt/nldbl-gamma.c deleted file mode 100644 index 10dc640b92..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-gamma.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -gammal (double x) -{ - return gamma (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-getpayload.c b/sysdeps/ieee754/ldbl-opt/nldbl-getpayload.c deleted file mode 100644 index f15f9231ec..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-getpayload.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Compatibility routine for IEEE double as long double for getpayload. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -double -attribute_hidden -getpayloadl (const double *x) -{ - return getpayload (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-hypot.c b/sysdeps/ieee754/ldbl-opt/nldbl-hypot.c deleted file mode 100644 index 2105f3eba8..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-hypot.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -hypotl (double x, double y) -{ - return hypot (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-ilogb.c b/sysdeps/ieee754/ldbl-opt/nldbl-ilogb.c deleted file mode 100644 index e840b2a447..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-ilogb.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -ilogbl (double x) -{ - return ilogb (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c deleted file mode 100644 index 05581c0354..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -_IO_vfscanf (FILE *s, const char *fmt, _IO_va_list ap, int *errp) -{ - return __nldbl__IO_vfscanf (s, fmt, ap, errp); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isinf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isinf.c deleted file mode 100644 index 577ab2db28..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-isinf.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__isinfl (double x) -{ - return isinf (x); -} -extern __typeof (__isinfl) isinfl attribute_hidden; -weak_alias (__isinfl, isinfl) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isnan.c b/sysdeps/ieee754/ldbl-opt/nldbl-isnan.c deleted file mode 100644 index 2d87bf85fb..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-isnan.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__isnanl (double x) -{ - return isnan (x); -} -extern __typeof (__isnanl) isnanl attribute_hidden; -weak_alias (__isnanl, isnanl) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_fscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_fscanf.c deleted file mode 100644 index 1d736668a4..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_fscanf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__isoc99_fscanf (FILE *stream, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___isoc99_vfscanf (stream, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_fwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_fwscanf.c deleted file mode 100644 index dbea1512cf..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_fwscanf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__isoc99_fwscanf (FILE *stream, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___isoc99_vfwscanf (stream, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_scanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_scanf.c deleted file mode 100644 index ec2ec53291..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_scanf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__isoc99_scanf (const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___isoc99_vfscanf (stdin, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_sscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_sscanf.c deleted file mode 100644 index 52e1bd5d2a..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_sscanf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__isoc99_sscanf (const char *s, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___isoc99_vsscanf (s, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_swscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_swscanf.c deleted file mode 100644 index 927d024923..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_swscanf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__isoc99_swscanf (const wchar_t *s, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___isoc99_vswscanf (s, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vfscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vfscanf.c deleted file mode 100644 index 55556c375c..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vfscanf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__isoc99_vfscanf (FILE *s, const char *fmt, va_list ap) -{ - return __nldbl___isoc99_vfscanf (s, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vfwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vfwscanf.c deleted file mode 100644 index 4fd54cb176..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vfwscanf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__isoc99_vfwscanf (FILE *s, const wchar_t *fmt, va_list ap) -{ - return __nldbl___isoc99_vfwscanf (s, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vscanf.c deleted file mode 100644 index 6284c9339b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vscanf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__isoc99_vscanf (const char *fmt, va_list ap) -{ - return __nldbl___isoc99_vfscanf (stdin, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vsscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vsscanf.c deleted file mode 100644 index 0c19032b15..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vsscanf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__isoc99_vsscanf (const char *string, const char *fmt, va_list ap) -{ - return __nldbl___isoc99_vsscanf (string, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vswscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vswscanf.c deleted file mode 100644 index 5f34221b62..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vswscanf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__isoc99_vswscanf (const wchar_t *string, const wchar_t *fmt, va_list ap) -{ - return __nldbl___isoc99_vswscanf (string, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vwscanf.c deleted file mode 100644 index a8a76ff54b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_vwscanf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__isoc99_vwscanf (const wchar_t *fmt, va_list ap) -{ - return __nldbl___isoc99_vfwscanf (stdin, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_wscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_wscanf.c deleted file mode 100644 index fc2f6f8598..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-isoc99_wscanf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__isoc99_wscanf (const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___isoc99_vfwscanf (stdin, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-j0.c b/sysdeps/ieee754/ldbl-opt/nldbl-j0.c deleted file mode 100644 index 9d59f0a015..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-j0.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -j0l (double x) -{ - return j0 (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-j1.c b/sysdeps/ieee754/ldbl-opt/nldbl-j1.c deleted file mode 100644 index dba7366861..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-j1.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -j1l (double x) -{ - return j1 (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-jn.c b/sysdeps/ieee754/ldbl-opt/nldbl-jn.c deleted file mode 100644 index 3f19bbb1a8..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-jn.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -jnl (int n, double x) -{ - return jn (n, x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-ldexp.c b/sysdeps/ieee754/ldbl-opt/nldbl-ldexp.c deleted file mode 100644 index 360f8f0f6b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-ldexp.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -ldexpl (double x, int exponent) -{ - return ldexp (x, exponent); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-lgamma.c b/sysdeps/ieee754/ldbl-opt/nldbl-lgamma.c deleted file mode 100644 index 0055212628..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-lgamma.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -lgammal (double x) -{ - return lgamma (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-lgamma_r.c b/sysdeps/ieee754/ldbl-opt/nldbl-lgamma_r.c deleted file mode 100644 index e1ab9a1d0a..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-lgamma_r.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -lgammal_r (double x, int *signgamp) -{ - return lgamma_r (x, signgamp); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-llogb.c b/sysdeps/ieee754/ldbl-opt/nldbl-llogb.c deleted file mode 100644 index 76042b2f48..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-llogb.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Compatibility routine for IEEE double as long double for llogb. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -long int -attribute_hidden -llogbl (double x) -{ - return llogb (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-llrint.c b/sysdeps/ieee754/ldbl-opt/nldbl-llrint.c deleted file mode 100644 index 6dfce89d0d..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-llrint.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -long long int -attribute_hidden -llrintl (double x) -{ - return llrint (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-llround.c b/sysdeps/ieee754/ldbl-opt/nldbl-llround.c deleted file mode 100644 index 0157a079f4..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-llround.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -long long int -attribute_hidden -llroundl (double x) -{ - return llround (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-log.c b/sysdeps/ieee754/ldbl-opt/nldbl-log.c deleted file mode 100644 index a5a1ae7cd7..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-log.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -logl (double x) -{ - return log (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-log10.c b/sysdeps/ieee754/ldbl-opt/nldbl-log10.c deleted file mode 100644 index 1477866dc6..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-log10.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -log10l (double x) -{ - return log10 (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-log1p.c b/sysdeps/ieee754/ldbl-opt/nldbl-log1p.c deleted file mode 100644 index 455b25a9f4..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-log1p.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -log1pl (double x) -{ - return log1p (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-log2.c b/sysdeps/ieee754/ldbl-opt/nldbl-log2.c deleted file mode 100644 index 8c1ae344e5..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-log2.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -log2l (double x) -{ - return log2 (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-logb.c b/sysdeps/ieee754/ldbl-opt/nldbl-logb.c deleted file mode 100644 index d9ce8de075..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-logb.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -logbl (double x) -{ - return logb (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-lrint.c b/sysdeps/ieee754/ldbl-opt/nldbl-lrint.c deleted file mode 100644 index 0acd3d4ae6..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-lrint.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -long int -attribute_hidden -lrintl (double x) -{ - return lrint (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-lround.c b/sysdeps/ieee754/ldbl-opt/nldbl-lround.c deleted file mode 100644 index aadb111f88..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-lround.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -long int -attribute_hidden -lroundl (double x) -{ - return lround (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-modf.c b/sysdeps/ieee754/ldbl-opt/nldbl-modf.c deleted file mode 100644 index bcbe6bb435..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-modf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -modfl (double x, double *iptr) -{ - return modf (x, iptr); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-nan.c b/sysdeps/ieee754/ldbl-opt/nldbl-nan.c deleted file mode 100644 index 8db157a0ea..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-nan.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -nanl (const char *tag) -{ - return nan (tag); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-nearbyint.c b/sysdeps/ieee754/ldbl-opt/nldbl-nearbyint.c deleted file mode 100644 index fd4a24684d..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-nearbyint.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -nearbyintl (double x) -{ - return nearbyint (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-nextafter.c b/sysdeps/ieee754/ldbl-opt/nldbl-nextafter.c deleted file mode 100644 index b0bae43f49..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-nextafter.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -nextafterl (double x, double y) -{ - return nextafter (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-nextdown.c b/sysdeps/ieee754/ldbl-opt/nldbl-nextdown.c deleted file mode 100644 index b20c788401..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-nextdown.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Compatibility routine for IEEE double as long double for nextdown. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -/* Return the greatest floating-point number less than X. */ -double -attribute_hidden -nextdownl (double x) -{ - return nextdown (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-nexttoward.c b/sysdeps/ieee754/ldbl-opt/nldbl-nexttoward.c deleted file mode 100644 index acbd01a0cf..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-nexttoward.c +++ /dev/null @@ -1,14 +0,0 @@ -#define nexttoward nexttoward_XXX -#define nexttowardl nexttowardl_XXX -#include "nldbl-compat.h" -#undef nexttoward -#undef nexttowardl - -double -attribute_hidden -nexttoward (double x, double y) -{ - return nextafter (x, y); -} -extern __typeof (nexttoward) nexttowardl attribute_hidden; -strong_alias (nexttoward, nexttowardl) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-nexttowardf.c b/sysdeps/ieee754/ldbl-opt/nldbl-nexttowardf.c deleted file mode 100644 index 350b08d39e..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-nexttowardf.c +++ /dev/null @@ -1,12 +0,0 @@ -#define nexttowardf nexttowardf_XXX -#include "nldbl-compat.h" -#undef nexttowardf - -extern float __nldbl_nexttowardf (float x, double y); - -float -attribute_hidden -nexttowardf (float x, double y) -{ - return __nldbl_nexttowardf (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-nextup.c b/sysdeps/ieee754/ldbl-opt/nldbl-nextup.c deleted file mode 100644 index 71dc8d4816..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-nextup.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Compatibility routine for IEEE double as long double for nextup. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -/* Return the least floating-point number greater than X. */ -double -attribute_hidden -nextupl (double x) -{ - return nextup (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf.c b/sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf.c deleted file mode 100644 index 4abff2dc0d..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -obstack_printf (struct obstack *obstack, const char *fmt, ...) -{ - int result; - va_list ap; - va_start (ap, fmt); - result = __nldbl_obstack_vprintf (obstack, fmt, ap); - va_end (ap); - return result; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf_chk.c deleted file mode 100644 index 8e7d8eb4ad..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf_chk.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__obstack_printf_chk (struct obstack *obstack, int flag, const char *fmt, ...) -{ - int result; - va_list ap; - va_start (ap, fmt); - result = __nldbl___obstack_vprintf_chk (obstack, flag, fmt, ap); - va_end (ap); - return result; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf.c deleted file mode 100644 index 228a50726b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -obstack_vprintf (struct obstack *obstack, const char *fmt, va_list ap) -{ - return __nldbl_obstack_vprintf (obstack, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf_chk.c deleted file mode 100644 index a06f6bf9b4..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf_chk.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__obstack_vprintf_chk (struct obstack *obstack, int flag, const char *fmt, - va_list ap) -{ - return __nldbl___obstack_vprintf_chk (obstack, flag, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-pow.c b/sysdeps/ieee754/ldbl-opt/nldbl-pow.c deleted file mode 100644 index a5cc446555..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-pow.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -powl (double x, double y) -{ - return pow (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-pow10.c b/sysdeps/ieee754/ldbl-opt/nldbl-pow10.c deleted file mode 100644 index 20ebf8d1bb..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-pow10.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -pow10l (double x) -{ - return pow10 (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-printf.c b/sysdeps/ieee754/ldbl-opt/nldbl-printf.c deleted file mode 100644 index e4b0fbae0c..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-printf.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -printf (const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vfprintf (stdout, fmt, arg); - va_end (arg); - - return done; -} -extern __typeof (printf) _IO_printf attribute_hidden; -strong_alias (printf, _IO_printf) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-printf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-printf_chk.c deleted file mode 100644 index 926db412f9..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-printf_chk.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__printf_chk (int flag, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vfprintf_chk (stdout, flag, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-printf_fp.c b/sysdeps/ieee754/ldbl-opt/nldbl-printf_fp.c deleted file mode 100644 index 057dfe0b8a..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-printf_fp.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__printf_fp (FILE *fp, const struct printf_info *info, - const void *const *args) -{ - return __nldbl___printf_fp (fp, info, args); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-printf_size.c b/sysdeps/ieee754/ldbl-opt/nldbl-printf_size.c deleted file mode 100644 index d8b1fc9995..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-printf_size.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -printf_size (FILE *__restrict fp, const struct printf_info *info, - const void *const *__restrict args) -{ - return __nldbl_printf_size (fp, info, args); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-qecvt.c b/sysdeps/ieee754/ldbl-opt/nldbl-qecvt.c deleted file mode 100644 index 9f0b0a66a9..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-qecvt.c +++ /dev/null @@ -1,10 +0,0 @@ -#define qecvt qecvt_XXX -#include "nldbl-compat.h" -#undef qecvt - -attribute_hidden -char * -qecvt (double val, int ndigit, int *__restrict decpt, int *__restrict sign) -{ - return ecvt (val, ndigit, decpt, sign); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-qecvt_r.c b/sysdeps/ieee754/ldbl-opt/nldbl-qecvt_r.c deleted file mode 100644 index 06f99146cc..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-qecvt_r.c +++ /dev/null @@ -1,11 +0,0 @@ -#define qecvt_r qecvt_r_XXX -#include "nldbl-compat.h" -#undef qecvt_r - -int -attribute_hidden -qecvt_r (double val, int ndigit, int *__restrict decpt, int *__restrict sign, - char *__restrict buf, size_t len) -{ - return ecvt_r (val, ndigit, decpt, sign, buf, len); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-qfcvt.c b/sysdeps/ieee754/ldbl-opt/nldbl-qfcvt.c deleted file mode 100644 index 37fa7f0467..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-qfcvt.c +++ /dev/null @@ -1,10 +0,0 @@ -#define qfcvt qfcvt_XXX -#include "nldbl-compat.h" -#undef qfcvt - -attribute_hidden -char * -qfcvt (double val, int ndigit, int *__restrict decpt, int *__restrict sign) -{ - return fcvt (val, ndigit, decpt, sign); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-qfcvt_r.c b/sysdeps/ieee754/ldbl-opt/nldbl-qfcvt_r.c deleted file mode 100644 index 03224fefa9..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-qfcvt_r.c +++ /dev/null @@ -1,11 +0,0 @@ -#define qfcvt_r qfcvt_r_XXX -#include "nldbl-compat.h" -#undef qfcvt_r - -int -attribute_hidden -qfcvt_r (double val, int ndigit, int *__restrict decpt, int *__restrict sign, - char *__restrict buf, size_t len) -{ - return fcvt_r (val, ndigit, decpt, sign, buf, len); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-qgcvt.c b/sysdeps/ieee754/ldbl-opt/nldbl-qgcvt.c deleted file mode 100644 index b935d0962e..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-qgcvt.c +++ /dev/null @@ -1,10 +0,0 @@ -#define qgcvt qgcvt_XXX -#include "nldbl-compat.h" -#undef qgcvt - -attribute_hidden -char * -qgcvt (double val, int ndigit, char *buf) -{ - return gcvt (val, ndigit, buf); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-remainder.c b/sysdeps/ieee754/ldbl-opt/nldbl-remainder.c deleted file mode 100644 index 581dc78a4d..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-remainder.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -remainderl (double x, double y) -{ - return remainder (x, y); -} -extern __typeof (remainderl) dreml attribute_hidden; -weak_alias (remainderl, dreml) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-remquo.c b/sysdeps/ieee754/ldbl-opt/nldbl-remquo.c deleted file mode 100644 index 592dadae8d..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-remquo.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -remquol (double x, double y, int *quo) -{ - return remquo (x, y, quo); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-rint.c b/sysdeps/ieee754/ldbl-opt/nldbl-rint.c deleted file mode 100644 index 00f942f1a7..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-rint.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -rintl (double x) -{ - return rint (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-round.c b/sysdeps/ieee754/ldbl-opt/nldbl-round.c deleted file mode 100644 index be9bd5112e..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-round.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -roundl (double x) -{ - return round (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-roundeven.c b/sysdeps/ieee754/ldbl-opt/nldbl-roundeven.c deleted file mode 100644 index 1a46fa50d2..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-roundeven.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Compatibility routine for IEEE double as long double for roundeven. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -double -attribute_hidden -roundevenl (double x) -{ - return roundeven (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-scalb.c b/sysdeps/ieee754/ldbl-opt/nldbl-scalb.c deleted file mode 100644 index 00d3e2e714..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-scalb.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -scalbl (double x, double n) -{ - return scalb (x, n); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-scalbln.c b/sysdeps/ieee754/ldbl-opt/nldbl-scalbln.c deleted file mode 100644 index b5bd501250..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-scalbln.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -scalblnl (double x, long int n) -{ - return scalbln (x, n); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-scalbn.c b/sysdeps/ieee754/ldbl-opt/nldbl-scalbn.c deleted file mode 100644 index b1914ebf49..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-scalbn.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -scalbnl (double x, int n) -{ - return scalbn (x, n); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-scanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-scanf.c deleted file mode 100644 index bbab371cbe..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-scanf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -scanf (const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl__IO_vfscanf (stdin, fmt, arg, NULL); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-setpayload.c b/sysdeps/ieee754/ldbl-opt/nldbl-setpayload.c deleted file mode 100644 index df902cad99..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-setpayload.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Compatibility routine for IEEE double as long double for setpayload. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -int -attribute_hidden -setpayloadl (double *x, double payload) -{ - return setpayload (x, payload); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-setpayloadsig.c b/sysdeps/ieee754/ldbl-opt/nldbl-setpayloadsig.c deleted file mode 100644 index 1ca497502c..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-setpayloadsig.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Compatibility routine for IEEE double as long double for setpayloadsig. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -int -attribute_hidden -setpayloadsigl (double *x, double payload) -{ - return setpayloadsig (x, payload); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-signbit.c b/sysdeps/ieee754/ldbl-opt/nldbl-signbit.c deleted file mode 100644 index 2e98c07396..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-signbit.c +++ /dev/null @@ -1,10 +0,0 @@ -#define __signbitl __signbitl_XXX -#include "nldbl-compat.h" -#undef __signbitl - -int -attribute_hidden -__signbitl (double x) -{ - return signbit (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-significand.c b/sysdeps/ieee754/ldbl-opt/nldbl-significand.c deleted file mode 100644 index 624381dde7..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-significand.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -significandl (double x) -{ - return significand (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-sin.c b/sysdeps/ieee754/ldbl-opt/nldbl-sin.c deleted file mode 100644 index 0e76e05e6b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-sin.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -sinl (double x) -{ - return sin (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-sincos.c b/sysdeps/ieee754/ldbl-opt/nldbl-sincos.c deleted file mode 100644 index 9f2ab2b9fc..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-sincos.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -void -attribute_hidden -sincosl (double x, double *sinx, double *cosx) -{ - sincos (x, sinx, cosx); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-sinh.c b/sysdeps/ieee754/ldbl-opt/nldbl-sinh.c deleted file mode 100644 index 99ea62e8dc..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-sinh.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -sinhl (double x) -{ - return sinh (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-snprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-snprintf.c deleted file mode 100644 index ef6fb96a2c..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-snprintf.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -weak_function -snprintf (char *s, size_t maxlen, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vsnprintf (s, maxlen, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-snprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-snprintf_chk.c deleted file mode 100644 index 944d3de9db..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-snprintf_chk.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__snprintf_chk (char *s, size_t maxlen, int flag, size_t slen, - const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vsnprintf_chk (s, maxlen, flag, slen, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-sprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-sprintf.c deleted file mode 100644 index 5d37a7e7f0..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-sprintf.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -sprintf (char *s, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vsprintf (s, fmt, arg); - va_end (arg); - - return done; -} -extern __typeof (sprintf) _IO_sprintf attribute_hidden; -strong_alias (sprintf, _IO_sprintf) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-sprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-sprintf_chk.c deleted file mode 100644 index 349b7c5c22..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-sprintf_chk.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__sprintf_chk (char *s, int flag, size_t slen, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vsprintf_chk (s, flag, slen, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-sqrt.c b/sysdeps/ieee754/ldbl-opt/nldbl-sqrt.c deleted file mode 100644 index 4ae65665de..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-sqrt.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -sqrtl (double x) -{ - return sqrt (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-sscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-sscanf.c deleted file mode 100644 index a771d49996..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-sscanf.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -sscanf (const char *s, const char *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vsscanf (s, fmt, arg); - va_end (arg); - - return done; -} -extern __typeof (sscanf) _IO_sscanf attribute_hidden; -strong_alias (sscanf, _IO_sscanf) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-strfmon.c b/sysdeps/ieee754/ldbl-opt/nldbl-strfmon.c deleted file mode 100644 index 38f4071278..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-strfmon.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "nldbl-compat.h" - -ssize_t -attribute_hidden -strfmon (char *s, size_t maxsize, const char *format, ...) -{ - va_list ap; - ssize_t res; - - va_start (ap, format); - res = __nldbl___vstrfmon (s, maxsize, format, ap); - va_end (ap); - return res; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-strfmon_l.c b/sysdeps/ieee754/ldbl-opt/nldbl-strfmon_l.c deleted file mode 100644 index 0db0e8c42f..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-strfmon_l.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "nldbl-compat.h" - -ssize_t -attribute_hidden -__strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...) -{ - va_list ap; - ssize_t res; - - va_start (ap, format); - res = __nldbl___vstrfmon_l (s, maxsize, loc, format, ap); - va_end (ap); - return res; -} -extern __typeof (__strfmon_l) strfmon_l attribute_hidden; -weak_alias (__strfmon_l, strfmon_l) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-strfroml.c b/sysdeps/ieee754/ldbl-opt/nldbl-strfroml.c deleted file mode 100644 index d6df69e418..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-strfroml.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -strfroml (char *dest, size_t size, const char *format, long double f) -{ - return strfromd (dest, size, format, f); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-strtold.c b/sysdeps/ieee754/ldbl-opt/nldbl-strtold.c deleted file mode 100644 index 99b907947b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-strtold.c +++ /dev/null @@ -1,10 +0,0 @@ -#define strtold strtold_XXX -#include "nldbl-compat.h" -#undef strtold - -double -attribute_hidden -strtold (const char *nptr, char **endptr) -{ - return strtod (nptr, endptr); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c b/sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c deleted file mode 100644 index 33ff1ca5b5..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c +++ /dev/null @@ -1,20 +0,0 @@ -#define strtold_l strtold_l_XXX -#define __strtold_l __strtold_l_XXX -#define __strtod_l __strtod_l_XXX -#include "nldbl-compat.h" -#undef strtold_l -#undef __strtold_l -#undef __strtod_l - -extern double -__strtod_l (const char *__restrict __nptr, char **__restrict __endptr, - __locale_t __loc); - -double -attribute_hidden -__strtold_l (const char *nptr, char **endptr, __locale_t loc) -{ - return __strtod_l (nptr, endptr, loc); -} -extern __typeof (__strtold_l) strtold_l attribute_hidden; -weak_alias (__strtold_l, strtold_l) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-strtoldint.c b/sysdeps/ieee754/ldbl-opt/nldbl-strtoldint.c deleted file mode 100644 index 0bafabc6e4..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-strtoldint.c +++ /dev/null @@ -1,10 +0,0 @@ -#define __strtold_internal __strtold_internal_XXX -#include "nldbl-compat.h" -#undef __strtold_internal - -double -attribute_hidden -__strtold_internal (const char *nptr, char **endptr, int group) -{ - return __strtod_internal (nptr, endptr, group); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-swprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-swprintf.c deleted file mode 100644 index 7f4f7b04d3..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-swprintf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -swprintf (wchar_t *s, size_t n, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vswprintf (s, n, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-swprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-swprintf_chk.c deleted file mode 100644 index 0373f6ebc2..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-swprintf_chk.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__swprintf_chk (wchar_t *s, size_t n, int flag, size_t slen, - const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vswprintf_chk (s, n, flag, slen, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-swscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-swscanf.c deleted file mode 100644 index dd058f47ab..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-swscanf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -swscanf (const wchar_t *s, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vswscanf (s, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-syslog.c b/sysdeps/ieee754/ldbl-opt/nldbl-syslog.c deleted file mode 100644 index 8687e9f540..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-syslog.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "nldbl-compat.h" - -void -attribute_hidden -syslog (int pri, const char *fmt, ...) -{ - va_list ap; - va_start (ap, fmt); - __nldbl_vsyslog (pri, fmt, ap); - va_end (ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-syslog_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-syslog_chk.c deleted file mode 100644 index 31ea6a8b9d..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-syslog_chk.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "nldbl-compat.h" - -void -attribute_hidden -__syslog_chk (int pri, int flag, const char *fmt, ...) -{ - va_list ap; - - va_start (ap, fmt); - __nldbl___vsyslog_chk (pri, flag, fmt, ap); - va_end(ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-tan.c b/sysdeps/ieee754/ldbl-opt/nldbl-tan.c deleted file mode 100644 index 1a27b6fbdd..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-tan.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -tanl (double x) -{ - return tan (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-tanh.c b/sysdeps/ieee754/ldbl-opt/nldbl-tanh.c deleted file mode 100644 index fc2fd32eb8..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-tanh.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -tanhl (double x) -{ - return tanh (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-tgamma.c b/sysdeps/ieee754/ldbl-opt/nldbl-tgamma.c deleted file mode 100644 index bbf613abe1..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-tgamma.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -tgammal (double x) -{ - return tgamma (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-totalorder.c b/sysdeps/ieee754/ldbl-opt/nldbl-totalorder.c deleted file mode 100644 index c528d53555..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-totalorder.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Compatibility routine for IEEE double as long double for totalorder. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -double -attribute_hidden -totalorderl (double x, double y) -{ - return totalorder (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-totalordermag.c b/sysdeps/ieee754/ldbl-opt/nldbl-totalordermag.c deleted file mode 100644 index 4bc78588ea..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-totalordermag.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Compatibility routine for IEEE double as long double for totalordermag. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -double -attribute_hidden -totalordermagl (double x, double y) -{ - return totalordermag (x, y); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-trunc.c b/sysdeps/ieee754/ldbl-opt/nldbl-trunc.c deleted file mode 100644 index d0131e80a3..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-trunc.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -truncl (double x) -{ - return trunc (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-ufromfp.c b/sysdeps/ieee754/ldbl-opt/nldbl-ufromfp.c deleted file mode 100644 index 127225734c..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-ufromfp.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Compatibility routine for IEEE double as long double for ufromfp. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -uintmax_t -attribute_hidden -ufromfpl (double x, int round, unsigned int width) -{ - return ufromfp (x, round, width); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-ufromfpx.c b/sysdeps/ieee754/ldbl-opt/nldbl-ufromfpx.c deleted file mode 100644 index 3294f00609..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-ufromfpx.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Compatibility routine for IEEE double as long double for ufromfpx. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "nldbl-compat.h" - -uintmax_t -attribute_hidden -ufromfpxl (double x, int round, unsigned int width) -{ - return ufromfpx (x, round, width); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vasprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vasprintf.c deleted file mode 100644 index 52fa18ccee..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vasprintf.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -weak_function -vasprintf (char **result_ptr, const char *fmt, va_list ap) -{ - return __nldbl_vasprintf (result_ptr, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vasprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-vasprintf_chk.c deleted file mode 100644 index 4f5391a9d7..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vasprintf_chk.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__vasprintf_chk (char **result_ptr, int flag, const char *fmt, va_list ap) -{ - return __nldbl___vasprintf_chk (result_ptr, flag, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vdprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vdprintf.c deleted file mode 100644 index 1acbd40625..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vdprintf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -vdprintf (int d, const char *fmt, va_list arg) -{ - return __nldbl_vdprintf (d, fmt, arg); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vdprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-vdprintf_chk.c deleted file mode 100644 index ca1ce01878..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vdprintf_chk.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__vdprintf_chk (int d, int flag, const char *fmt, va_list arg) -{ - return __nldbl___vdprintf_chk (d, flag, fmt, arg); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vfprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vfprintf.c deleted file mode 100644 index 6ca8437b28..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vfprintf.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -vfprintf (FILE *s, const char *fmt, va_list ap) -{ - return __nldbl_vfprintf (s, fmt, ap); -} -extern __typeof (vfprintf) _IO_vfprintf attribute_hidden; -strong_alias (vfprintf, _IO_vfprintf) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vfprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-vfprintf_chk.c deleted file mode 100644 index 0f6820af63..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vfprintf_chk.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__vfprintf_chk (FILE *s, int flag, const char *fmt, va_list ap) -{ - return __nldbl___vfprintf_chk (s, flag, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c deleted file mode 100644 index f23465ee95..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__vfscanf (FILE *s, const char *fmt, va_list ap) -{ - return __nldbl__IO_vfscanf (s, fmt, ap, NULL); -} -extern __typeof (__vfscanf) vfscanf attribute_hidden; -weak_alias (__vfscanf, vfscanf) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf.c deleted file mode 100644 index c3fe76a971..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -weak_function -vfwprintf (FILE *s, const wchar_t *fmt, va_list ap) -{ - return __nldbl_vfwprintf (s, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf_chk.c deleted file mode 100644 index b3b69f0571..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf_chk.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__vfwprintf_chk (FILE *s, int flag, const wchar_t *fmt, va_list ap) -{ - return __nldbl___vfwprintf_chk (s, flag, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vfwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vfwscanf.c deleted file mode 100644 index be9febc9a0..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vfwscanf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -vfwscanf (FILE *s, const wchar_t *fmt, va_list ap) -{ - return __nldbl_vfwscanf (s, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vprintf.c deleted file mode 100644 index ed0d27d9a0..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vprintf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -vprintf (const char *fmt, va_list ap) -{ - return __nldbl_vfprintf (stdout, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-vprintf_chk.c deleted file mode 100644 index 63b3e8f965..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vprintf_chk.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__vprintf_chk (int flag, const char *fmt, va_list ap) -{ - return __nldbl___vfprintf_chk (stdout, flag, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c deleted file mode 100644 index e75907b905..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -weak_function -vscanf (const char *fmt, va_list ap) -{ - return __nldbl__IO_vfscanf (stdin, fmt, ap, NULL); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf.c deleted file mode 100644 index 5a9bcbcaee..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -vsnprintf (char *string, size_t maxlen, const char *fmt, va_list ap) -{ - return __nldbl_vsnprintf (string, maxlen, fmt, ap); -} -extern __typeof (vsnprintf) __vsnprintf attribute_hidden; -weak_alias (vsnprintf, __vsnprintf) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf_chk.c deleted file mode 100644 index 19380291a3..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf_chk.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__vsnprintf_chk (char *string, size_t maxlen, int flag, size_t slen, - const char *fmt, va_list ap) -{ - return __nldbl___vsnprintf_chk (string, maxlen, flag, slen, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vsprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vsprintf.c deleted file mode 100644 index 04406d0f6e..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vsprintf.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -_IO_vsprintf (char *string, const char *fmt, va_list ap) -{ - return __nldbl_vsprintf (string, fmt, ap); -} -extern __typeof (_IO_vsprintf) vsprintf attribute_hidden; -weak_alias (_IO_vsprintf, vsprintf) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vsprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-vsprintf_chk.c deleted file mode 100644 index 9df143fcef..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vsprintf_chk.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__vsprintf_chk (char *string, int flag, size_t slen, const char *fmt, - va_list ap) -{ - return __nldbl___vsprintf_chk (string, flag, slen, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vsscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vsscanf.c deleted file mode 100644 index f5594c122c..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vsscanf.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__vsscanf (const char *string, const char *fmt, va_list ap) -{ - return __nldbl_vsscanf (string, fmt, ap); -} -extern __typeof (__vsscanf) vsscanf attribute_hidden; -weak_alias (__vsscanf, vsscanf) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vswprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vswprintf.c deleted file mode 100644 index ff3415a072..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vswprintf.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -weak_function -vswprintf (wchar_t *string, size_t maxlen, const wchar_t *fmt, va_list ap) -{ - return __nldbl_vswprintf (string, maxlen, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vswprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-vswprintf_chk.c deleted file mode 100644 index 0cd1f96bfe..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vswprintf_chk.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__vswprintf_chk (wchar_t *string, size_t maxlen, int flag, size_t slen, - const wchar_t *fmt, va_list ap) -{ - return __nldbl___vswprintf_chk (string, maxlen, flag, slen, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vswscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vswscanf.c deleted file mode 100644 index bd4bb5131b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vswscanf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -vswscanf (const wchar_t *string, const wchar_t *fmt, va_list ap) -{ - return __nldbl_vswscanf (string, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vsyslog.c b/sysdeps/ieee754/ldbl-opt/nldbl-vsyslog.c deleted file mode 100644 index eed1010eea..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vsyslog.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -attribute_hidden -void -vsyslog (int pri, const char *fmt, va_list ap) -{ - __nldbl_vsyslog (pri, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vsyslog_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-vsyslog_chk.c deleted file mode 100644 index 2221474f97..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vsyslog_chk.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -void -attribute_hidden -__vsyslog_chk (int pri, int flag, const char *fmt, va_list ap) -{ - __nldbl___vsyslog_chk (pri, flag, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vwprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vwprintf.c deleted file mode 100644 index f46bdb3137..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vwprintf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -vwprintf (const wchar_t *fmt, va_list ap) -{ - return __nldbl_vfwprintf (stdout, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vwprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-vwprintf_chk.c deleted file mode 100644 index f7e7185977..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vwprintf_chk.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__vwprintf_chk (int flag, const wchar_t *fmt, va_list ap) -{ - return __nldbl___vfwprintf_chk (stdout, flag, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-vwscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-vwscanf.c deleted file mode 100644 index d39578ca4e..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-vwscanf.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -weak_function -vwscanf (const wchar_t *fmt, va_list ap) -{ - return __nldbl_vfwscanf (stdin, fmt, ap); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-wcstold.c b/sysdeps/ieee754/ldbl-opt/nldbl-wcstold.c deleted file mode 100644 index dbaffaa486..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-wcstold.c +++ /dev/null @@ -1,10 +0,0 @@ -#define wcstold wcstold_XXX -#include "nldbl-compat.h" -#undef wcstold - -double -attribute_hidden -wcstold (const wchar_t *nptr, wchar_t **endptr) -{ - return wcstod (nptr, endptr); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c b/sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c deleted file mode 100644 index e32d13a94b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c +++ /dev/null @@ -1,14 +0,0 @@ -#define wcstold_l wcstold_l_XXX -#define __wcstold_l __wcstold_l_XXX -#include "nldbl-compat.h" -#undef wcstold_l -#undef __wcstold_l - -double -attribute_hidden -__wcstold_l (const wchar_t *nptr, wchar_t **endptr, __locale_t loc) -{ - return __wcstod_l (nptr, endptr, loc); -} -extern __typeof (__wcstold_l) wcstold_l attribute_hidden; -weak_alias (__wcstold_l, wcstold_l) diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-wcstoldint.c b/sysdeps/ieee754/ldbl-opt/nldbl-wcstoldint.c deleted file mode 100644 index b638a399ad..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-wcstoldint.c +++ /dev/null @@ -1,10 +0,0 @@ -#define __wcstold_internal __wcstold_internal_XXX -#include "nldbl-compat.h" -#undef __wcstold_internal - -double -attribute_hidden -__wcstold_internal (const wchar_t *nptr, wchar_t **endptr, int group) -{ - return __wcstod_internal (nptr, endptr, group); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-wprintf.c b/sysdeps/ieee754/ldbl-opt/nldbl-wprintf.c deleted file mode 100644 index 2aa1a7475a..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-wprintf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -wprintf (const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vfwprintf (stdout, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-wprintf_chk.c b/sysdeps/ieee754/ldbl-opt/nldbl-wprintf_chk.c deleted file mode 100644 index 39191e123b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-wprintf_chk.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -__wprintf_chk (int flag, const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl___vfwprintf_chk (stdout, flag, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-wscanf.c b/sysdeps/ieee754/ldbl-opt/nldbl-wscanf.c deleted file mode 100644 index 4ee3fdc15f..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-wscanf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "nldbl-compat.h" - -int -attribute_hidden -wscanf (const wchar_t *fmt, ...) -{ - va_list arg; - int done; - - va_start (arg, fmt); - done = __nldbl_vfwscanf (stdin, fmt, arg); - va_end (arg); - - return done; -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-y0.c b/sysdeps/ieee754/ldbl-opt/nldbl-y0.c deleted file mode 100644 index e35621f60f..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-y0.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -y0l (double x) -{ - return y0 (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-y1.c b/sysdeps/ieee754/ldbl-opt/nldbl-y1.c deleted file mode 100644 index c47abcd3c5..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-y1.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -y1l (double x) -{ - return y1 (x); -} diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-yn.c b/sysdeps/ieee754/ldbl-opt/nldbl-yn.c deleted file mode 100644 index 7623d4513b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/nldbl-yn.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "nldbl-compat.h" - -double -attribute_hidden -ynl (int n, double x) -{ - return yn (n, x); -} diff --git a/sysdeps/ieee754/ldbl-opt/s_asinh.c b/sysdeps/ieee754/ldbl-opt/s_asinh.c deleted file mode 100644 index e9bcfaea62..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_asinh.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __asinh, asinhl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_atan.c b/sysdeps/ieee754/ldbl-opt/s_atan.c deleted file mode 100644 index 5fbd5e62d6..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_atan.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, atan, atanl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_cbrt.c b/sysdeps/ieee754/ldbl-opt/s_cbrt.c deleted file mode 100644 index cdc635771e..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_cbrt.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __cbrt, cbrtl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_ceil.c b/sysdeps/ieee754/ldbl-opt/s_ceil.c deleted file mode 100644 index 6e4b70795d..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_ceil.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __ceil, ceill, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_clog10l.c b/sysdeps/ieee754/ldbl-opt/s_clog10l.c deleted file mode 100644 index 15dc3ed891..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_clog10l.c +++ /dev/null @@ -1,31 +0,0 @@ -/* clog10l alias overrides for platforms where long double - was previously not unique. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define M_DECL_FUNC(x) __clog10l_internal -#include - -#undef declare_mgen_alias -#define declare_mgen_alias(from, to) - -#include - -/* __clog10l is also a public symbol. */ -strong_alias (__clog10l_internal, __clog10l__internal) -long_double_symbol (libm, __clog10l_internal, __clog10l); -long_double_symbol (libm, __clog10l__internal, clog10l); diff --git a/sysdeps/ieee754/ldbl-opt/s_copysign.c b/sysdeps/ieee754/ldbl-opt/s_copysign.c deleted file mode 100644 index f4303f5768..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_copysign.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __copysign, copysignl, GLIBC_2_0); -# endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __copysign, copysignl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_erf.c b/sysdeps/ieee754/ldbl-opt/s_erf.c deleted file mode 100644 index 76f1baa5ca..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_erf.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __erf, erfl, GLIBC_2_0); -compat_symbol (libm, __erfc, erfcl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_expm1.c b/sysdeps/ieee754/ldbl-opt/s_expm1.c deleted file mode 100644 index ef9b5956db..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_expm1.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __expm1, expm1l, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_fabs.c b/sysdeps/ieee754/ldbl-opt/s_fabs.c deleted file mode 100644 index e7c92187e9..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_fabs.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __fabs, fabsl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_finite.c b/sysdeps/ieee754/ldbl-opt/s_finite.c deleted file mode 100644 index 7d3ab0068d..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_finite.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include -weak_alias (__finite, ___finite) -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __finite, __finitel, GLIBC_2_1); -# endif -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, ___finite, finitel, GLIBC_2_0); -# endif -#else -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libm, __finite, __finitel, GLIBC_2_0); -# endif -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, ___finite, finitel, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_floor.c b/sysdeps/ieee754/ldbl-opt/s_floor.c deleted file mode 100644 index 7797944e9e..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_floor.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __floor, floorl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_fma.c b/sysdeps/ieee754/ldbl-opt/s_fma.c deleted file mode 100644 index 1723c5c306..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_fma.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fma, fmal, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_fmal.c b/sysdeps/ieee754/ldbl-opt/s_fmal.c deleted file mode 100644 index bd12dabcbe..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_fmal.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __fmal, fmal); diff --git a/sysdeps/ieee754/ldbl-opt/s_frexp.c b/sysdeps/ieee754/ldbl-opt/s_frexp.c deleted file mode 100644 index 0e3a5e0830..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_frexp.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __frexp, frexpl, GLIBC_2_0); -# endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __frexp, frexpl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_isinf.c b/sysdeps/ieee754/ldbl-opt/s_isinf.c deleted file mode 100644 index 1f760a0320..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_isinf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isinf, __isinfl, GLIBC_2_0); -compat_symbol (libc, isinf, isinfl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_isnan.c b/sysdeps/ieee754/ldbl-opt/s_isnan.c deleted file mode 100644 index 33f57f1955..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_isnan.c +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_ldexp.c b/sysdeps/ieee754/ldbl-opt/s_ldexp.c deleted file mode 100644 index 809080a149..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_ldexp.c +++ /dev/null @@ -1,30 +0,0 @@ -/* ldexp alias overrides for platforms where long double - was previously not unique. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define M_LIBM_NEED_COMPAT(f) 0 -#include -#include - -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __ldexp, ldexpl, GLIBC_2_0); -# endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __ldexp, ldexpl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_ldexpl.c b/sysdeps/ieee754/ldbl-opt/s_ldexpl.c deleted file mode 100644 index 85f34fa2c4..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_ldexpl.c +++ /dev/null @@ -1,31 +0,0 @@ -/* ldexpl alias overrides for platforms where long double - was previously not unique. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define declare_mgen_alias(f,t) -#include -#include - -strong_alias (__ldexpl, __ldexpl_2) -#if IS_IN (libm) -long_double_symbol (libm, __ldexpl, ldexpl); -long_double_symbol (libm, __ldexpl_2, scalbnl); -#else -long_double_symbol (libc, __ldexpl, ldexpl); -long_double_symbol (libc, __ldexpl_2, scalbnl); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_llrint.c b/sysdeps/ieee754/ldbl-opt/s_llrint.c deleted file mode 100644 index e6311972e1..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_llrint.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llrint, llrintl, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_llround.c b/sysdeps/ieee754/ldbl-opt/s_llround.c deleted file mode 100644 index 36c7e6edac..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_llround.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llround, llroundl, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_log1p.c b/sysdeps/ieee754/ldbl-opt/s_log1p.c deleted file mode 100644 index 495fa32e35..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_log1p.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __log1p, log1pl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_logb.c b/sysdeps/ieee754/ldbl-opt/s_logb.c deleted file mode 100644 index 4d7a6db275..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_logb.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __logb, logbl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_lrint.c b/sysdeps/ieee754/ldbl-opt/s_lrint.c deleted file mode 100644 index b7af812846..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_lrint.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lrint, lrintl, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_lround.c b/sysdeps/ieee754/ldbl-opt/s_lround.c deleted file mode 100644 index f3a27fa9c9..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_lround.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lround, lroundl, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_modf.c b/sysdeps/ieee754/ldbl-opt/s_modf.c deleted file mode 100644 index 93acb43ae6..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_modf.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __modf, modfl, GLIBC_2_0); -# endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __modf, modfl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_nearbyint.c b/sysdeps/ieee754/ldbl-opt/s_nearbyint.c deleted file mode 100644 index a8b7973acd..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_nearbyint.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __nearbyint, nearbyintl, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_nextafter.c b/sysdeps/ieee754/ldbl-opt/s_nextafter.c deleted file mode 100644 index 78e2c0ff37..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_nextafter.c +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __nextafter, nextafterl, GLIBC_2_0); -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -strong_alias (__nextafter, __nexttowardd) -strong_alias (__nextafter, __nexttowardld) -#undef nexttoward -compat_symbol (libm, __nexttowardd, nexttoward, GLIBC_2_1); -compat_symbol (libm, __nexttowardld, nexttowardl, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c b/sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c deleted file mode 100644 index 07e9375b78..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c +++ /dev/null @@ -1,81 +0,0 @@ -/* Single precision version of nexttoward.c. - Conversion to IEEE single float by Jakub Jelinek, jj@ultra.linux.cz. */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* IEEE functions - * __nexttowardfd(x,y) - * return the next machine floating-point number of x in the - * direction toward y. - * This is for machines which use different binary type for double and - * long double conditionally, y is long double equal to double. - * Special cases: - */ - -#include -#include -#include -#include -#include - -float __nldbl_nexttowardf(float x, double y); - -float __nldbl_nexttowardf(float x, double y) -{ - int32_t hx,hy,ix,iy; - u_int32_t ly; - - GET_FLOAT_WORD(hx,x); - EXTRACT_WORDS(hy,ly,y); - ix = hx&0x7fffffff; /* |x| */ - iy = hy&0x7fffffff; /* |y| */ - - if((ix>0x7f800000) || /* x is nan */ - ((iy>=0x7ff00000)&&((iy-0x7ff00000)|ly)!=0)) /* y is nan */ - return x+y; - if((double) x==y) return y; /* x=y, return y */ - if(ix==0) { /* x == 0 */ - float u; - SET_FLOAT_WORD(x,(u_int32_t)(hy&0x80000000)|1);/* return +-minsub*/ - u = math_opt_barrier (x); - u = u * u; - math_force_eval (u); /* raise underflow flag */ - return x; - } - if(hx>=0) { /* x > 0 */ - if(x > y) /* x -= ulp */ - hx -= 1; - else /* x < y, x += ulp */ - hx += 1; - } else { /* x < 0 */ - if(x < y) /* x -= ulp */ - hx -= 1; - else /* x > y, x += ulp */ - hx += 1; - } - hy = hx&0x7f800000; - if(hy>=0x7f800000) { - float u = x+x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(hy<0x00800000) { - float u = x*x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - __set_errno (ERANGE); - } - SET_FLOAT_WORD(x,hx); - return x; -} - -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __nldbl_nexttowardf, nexttowardf, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_remquo.c b/sysdeps/ieee754/ldbl-opt/s_remquo.c deleted file mode 100644 index 9f3d7ba368..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_remquo.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __remquo, remquol, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_rint.c b/sysdeps/ieee754/ldbl-opt/s_rint.c deleted file mode 100644 index d9b156ea27..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_rint.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __rint, rintl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_round.c b/sysdeps/ieee754/ldbl-opt/s_round.c deleted file mode 100644 index edff2f017b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_round.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __round, roundl, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_scalbln.c b/sysdeps/ieee754/ldbl-opt/s_scalbln.c deleted file mode 100644 index 391142b769..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_scalbln.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include -#if IS_IN (libm) -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __scalbln, scalblnl, GLIBC_2_1); -#endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_1) -compat_symbol (libc, __scalbln, scalblnl, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_scalbn.c b/sysdeps/ieee754/ldbl-opt/s_scalbn.c deleted file mode 100644 index 1ad81b199e..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_scalbn.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __scalbn, scalbnl, GLIBC_2_0); -# endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __scalbn, scalbnl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_significand.c b/sysdeps/ieee754/ldbl-opt/s_significand.c deleted file mode 100644 index 5287c09066..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_significand.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __significand, significandl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_significandl.c b/sysdeps/ieee754/ldbl-opt/s_significandl.c deleted file mode 100644 index 9339b4780d..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_significandl.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __significandl, significandl); diff --git a/sysdeps/ieee754/ldbl-opt/s_sin.c b/sysdeps/ieee754/ldbl-opt/s_sin.c deleted file mode 100644 index 6932ccc080..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_sin.c +++ /dev/null @@ -1,15 +0,0 @@ -/* dbl-64/s_sin.c uses NAN and sincos identifiers internally. */ -#define sincos sincos_disable -/* These definitions needed for proper unfolding of __MATHDECL_VEC. */ -#define __DECL_SIMD_sincos_disable -#define __DECL_SIMD_sincos_disablef -#define __DECL_SIMD_sincos_disablel -#define __DECL_SIMD_sincos_disablef128 -#include -#undef NAN -#undef sincos -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __sin, sinl, GLIBC_2_0); -compat_symbol (libm, __cos, cosl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_sincos.c b/sysdeps/ieee754/ldbl-opt/s_sincos.c deleted file mode 100644 index 6d2a48f25b..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_sincos.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __sincos, sincosl, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_tan.c b/sysdeps/ieee754/ldbl-opt/s_tan.c deleted file mode 100644 index 6b0fec0063..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_tan.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, tan, tanl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_tanh.c b/sysdeps/ieee754/ldbl-opt/s_tanh.c deleted file mode 100644 index e763bbde77..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_tanh.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __tanh, tanhl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/s_trunc.c b/sysdeps/ieee754/ldbl-opt/s_trunc.c deleted file mode 100644 index 9d90a2bd73..0000000000 --- a/sysdeps/ieee754/ldbl-opt/s_trunc.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __trunc, truncl, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_acos_compat.c b/sysdeps/ieee754/ldbl-opt/w_acos_compat.c deleted file mode 100644 index 1e6d1b37ec..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_acos_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __acos, acosl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_acosh_compat.c b/sysdeps/ieee754/ldbl-opt/w_acosh_compat.c deleted file mode 100644 index 40da339a7a..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_acosh_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __acosh, acoshl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_acoshl_compat.c b/sysdeps/ieee754/ldbl-opt/w_acoshl_compat.c deleted file mode 100644 index df4338d9fa..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_acoshl_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __acoshl, acoshl); diff --git a/sysdeps/ieee754/ldbl-opt/w_acosl_compat.c b/sysdeps/ieee754/ldbl-opt/w_acosl_compat.c deleted file mode 100644 index 5efc99024c..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_acosl_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __acosl, acosl); diff --git a/sysdeps/ieee754/ldbl-opt/w_asin_compat.c b/sysdeps/ieee754/ldbl-opt/w_asin_compat.c deleted file mode 100644 index 1c52cc22ad..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_asin_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __asin, asinl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_asinl_compat.c b/sysdeps/ieee754/ldbl-opt/w_asinl_compat.c deleted file mode 100644 index 087fab25bb..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_asinl_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __asinl, asinl); diff --git a/sysdeps/ieee754/ldbl-opt/w_atan2_compat.c b/sysdeps/ieee754/ldbl-opt/w_atan2_compat.c deleted file mode 100644 index d3f7964d7c..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_atan2_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __atan2, atan2l, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_atan2l_compat.c b/sysdeps/ieee754/ldbl-opt/w_atan2l_compat.c deleted file mode 100644 index 6b12209625..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_atan2l_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __atan2l, atan2l); diff --git a/sysdeps/ieee754/ldbl-opt/w_atanh_compat.c b/sysdeps/ieee754/ldbl-opt/w_atanh_compat.c deleted file mode 100644 index e15ef1f93d..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_atanh_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __atanh, atanhl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_atanhl_compat.c b/sysdeps/ieee754/ldbl-opt/w_atanhl_compat.c deleted file mode 100644 index 49bae1ee8f..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_atanhl_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __atanhl, atanhl); diff --git a/sysdeps/ieee754/ldbl-opt/w_cosh_compat.c b/sysdeps/ieee754/ldbl-opt/w_cosh_compat.c deleted file mode 100644 index af29735e10..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_cosh_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __cosh, coshl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_coshl_compat.c b/sysdeps/ieee754/ldbl-opt/w_coshl_compat.c deleted file mode 100644 index a8808778ba..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_coshl_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __coshl, coshl); diff --git a/sysdeps/ieee754/ldbl-opt/w_exp10_compat.c b/sysdeps/ieee754/ldbl-opt/w_exp10_compat.c deleted file mode 100644 index 142a70bcd6..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_exp10_compat.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __exp10, exp10l, GLIBC_2_1); -compat_symbol (libm, __pow10, pow10l, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c b/sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c deleted file mode 100644 index 8f2ccd3441..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __exp10l, exp10l); -long_double_symbol (libm, __pow10l, pow10l); diff --git a/sysdeps/ieee754/ldbl-opt/w_exp_compat.c b/sysdeps/ieee754/ldbl-opt/w_exp_compat.c deleted file mode 100644 index 686c9c26d0..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_exp_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __exp, expl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_fmod_compat.c b/sysdeps/ieee754/ldbl-opt/w_fmod_compat.c deleted file mode 100644 index 9280d39d70..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_fmod_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __fmod, fmodl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_fmodl_compat.c b/sysdeps/ieee754/ldbl-opt/w_fmodl_compat.c deleted file mode 100644 index 88fe0ac4d2..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_fmodl_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __fmodl, fmodl); diff --git a/sysdeps/ieee754/ldbl-opt/w_hypot_compat.c b/sysdeps/ieee754/ldbl-opt/w_hypot_compat.c deleted file mode 100644 index b3979ff0f4..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_hypot_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __hypot, hypotl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_hypotl_compat.c b/sysdeps/ieee754/ldbl-opt/w_hypotl_compat.c deleted file mode 100644 index 68e3997489..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_hypotl_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __hypotl, hypotl); diff --git a/sysdeps/ieee754/ldbl-opt/w_j0_compat.c b/sysdeps/ieee754/ldbl-opt/w_j0_compat.c deleted file mode 100644 index 45b4d14764..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_j0_compat.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, j0, j0l, GLIBC_2_0); -compat_symbol (libm, y0, y0l, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_j0l_compat.c b/sysdeps/ieee754/ldbl-opt/w_j0l_compat.c deleted file mode 100644 index 9050657e03..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_j0l_compat.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __j0l, j0l); -long_double_symbol (libm, __y0l, y0l); diff --git a/sysdeps/ieee754/ldbl-opt/w_j1_compat.c b/sysdeps/ieee754/ldbl-opt/w_j1_compat.c deleted file mode 100644 index 1071c8fd6a..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_j1_compat.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, j1, j1l, GLIBC_2_0); -compat_symbol (libm, y1, y1l, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_j1l_compat.c b/sysdeps/ieee754/ldbl-opt/w_j1l_compat.c deleted file mode 100644 index 4ed9e2dd12..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_j1l_compat.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __j1l, j1l); -long_double_symbol (libm, __y1l, y1l); diff --git a/sysdeps/ieee754/ldbl-opt/w_jn_compat.c b/sysdeps/ieee754/ldbl-opt/w_jn_compat.c deleted file mode 100644 index be29a36041..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_jn_compat.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, jn, jnl, GLIBC_2_0); -compat_symbol (libm, yn, ynl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_jnl_compat.c b/sysdeps/ieee754/ldbl-opt/w_jnl_compat.c deleted file mode 100644 index d22ee54997..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_jnl_compat.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __jnl, jnl); -long_double_symbol (libm, __ynl, ynl); diff --git a/sysdeps/ieee754/ldbl-opt/w_lgamma_compat.c b/sysdeps/ieee754/ldbl-opt/w_lgamma_compat.c deleted file mode 100644 index f268e65a88..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_lgamma_compat.c +++ /dev/null @@ -1,7 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -strong_alias (__lgamma_compat, __lgammal_dbl_compat) -compat_symbol (libm, __lgammal_dbl_compat, lgammal, GLIBC_2_0); -compat_symbol (libm, __gamma, gammal, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_lgamma_compatl.c b/sysdeps/ieee754/ldbl-opt/w_lgamma_compatl.c deleted file mode 100644 index f60b3d7bcf..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_lgamma_compatl.c +++ /dev/null @@ -1,11 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#define USE_AS_COMPAT 1 -#include -#undef LGAMMA_OLD_VER -#define LGAMMA_OLD_VER LONG_DOUBLE_COMPAT_VERSION -#include -#if GAMMA_ALIAS -long_double_symbol (libm, __gammal, gammal); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_lgamma_r_compat.c b/sysdeps/ieee754/ldbl-opt/w_lgamma_r_compat.c deleted file mode 100644 index 673954cd1a..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_lgamma_r_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __lgamma_r, lgammal_r, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_lgammal_r_compat.c b/sysdeps/ieee754/ldbl-opt/w_lgammal_r_compat.c deleted file mode 100644 index 6fdf2bba87..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_lgammal_r_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __lgammal_r, lgammal_r); diff --git a/sysdeps/ieee754/ldbl-opt/w_log10_compat.c b/sysdeps/ieee754/ldbl-opt/w_log10_compat.c deleted file mode 100644 index 5ec6a2b2b6..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_log10_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __log10, log10l, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_log10l_compat.c b/sysdeps/ieee754/ldbl-opt/w_log10l_compat.c deleted file mode 100644 index 17de3e7856..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_log10l_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __log10l, log10l); diff --git a/sysdeps/ieee754/ldbl-opt/w_log2_compat.c b/sysdeps/ieee754/ldbl-opt/w_log2_compat.c deleted file mode 100644 index dffd2c183e..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_log2_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __log2, log2l, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_log2l_compat.c b/sysdeps/ieee754/ldbl-opt/w_log2l_compat.c deleted file mode 100644 index 3c5e734573..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_log2l_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __log2l, log2l); diff --git a/sysdeps/ieee754/ldbl-opt/w_log_compat.c b/sysdeps/ieee754/ldbl-opt/w_log_compat.c deleted file mode 100644 index d2a2bcadde..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_log_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __log, logl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_logl_compat.c b/sysdeps/ieee754/ldbl-opt/w_logl_compat.c deleted file mode 100644 index 2b55842139..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_logl_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __logl, logl); diff --git a/sysdeps/ieee754/ldbl-opt/w_pow_compat.c b/sysdeps/ieee754/ldbl-opt/w_pow_compat.c deleted file mode 100644 index c2a7942019..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_pow_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __pow, powl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_powl_compat.c b/sysdeps/ieee754/ldbl-opt/w_powl_compat.c deleted file mode 100644 index 1897cf1c63..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_powl_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __powl, powl); diff --git a/sysdeps/ieee754/ldbl-opt/w_remainder_compat.c b/sysdeps/ieee754/ldbl-opt/w_remainder_compat.c deleted file mode 100644 index c823dcb8e7..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_remainder_compat.c +++ /dev/null @@ -1,7 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __remainder, remainderl, GLIBC_2_0); -strong_alias (__remainder, __drem) -compat_symbol (libm, __drem, dreml, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c b/sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c deleted file mode 100644 index b2ce5c9563..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c +++ /dev/null @@ -1,7 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __remainderl, remainderl); -strong_alias (__remainderl, __dreml) -long_double_symbol (libm, __dreml, dreml); diff --git a/sysdeps/ieee754/ldbl-opt/w_scalb_compat.c b/sysdeps/ieee754/ldbl-opt/w_scalb_compat.c deleted file mode 100644 index f6d53a5ba5..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_scalb_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __scalb, scalbl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_scalbl_compat.c b/sysdeps/ieee754/ldbl-opt/w_scalbl_compat.c deleted file mode 100644 index c8feb654a2..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_scalbl_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __scalbl, scalbl); diff --git a/sysdeps/ieee754/ldbl-opt/w_sinh_compat.c b/sysdeps/ieee754/ldbl-opt/w_sinh_compat.c deleted file mode 100644 index b47182c017..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_sinh_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __sinh, sinhl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_sinhl_compat.c b/sysdeps/ieee754/ldbl-opt/w_sinhl_compat.c deleted file mode 100644 index 305ed82357..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_sinhl_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __sinhl, sinhl); diff --git a/sysdeps/ieee754/ldbl-opt/w_sqrt_compat.c b/sysdeps/ieee754/ldbl-opt/w_sqrt_compat.c deleted file mode 100644 index 355d1c20db..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_sqrt_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __sqrt, sqrtl, GLIBC_2_0); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_sqrtl_compat.c b/sysdeps/ieee754/ldbl-opt/w_sqrtl_compat.c deleted file mode 100644 index 1e4526f2c6..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_sqrtl_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __sqrtl, sqrtl); diff --git a/sysdeps/ieee754/ldbl-opt/w_tgamma_compat.c b/sysdeps/ieee754/ldbl-opt/w_tgamma_compat.c deleted file mode 100644 index 082ce8aaff..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_tgamma_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __tgamma, tgammal, GLIBC_2_1); -#endif diff --git a/sysdeps/ieee754/ldbl-opt/w_tgammal_compat.c b/sysdeps/ieee754/ldbl-opt/w_tgammal_compat.c deleted file mode 100644 index aaf5403522..0000000000 --- a/sysdeps/ieee754/ldbl-opt/w_tgammal_compat.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#undef weak_alias -#define weak_alias(n,a) -#include -long_double_symbol (libm, __tgammal, tgammal); diff --git a/sysdeps/ieee754/s_lib_version.c b/sysdeps/ieee754/s_lib_version.c deleted file mode 100644 index bb59300953..0000000000 --- a/sysdeps/ieee754/s_lib_version.c +++ /dev/null @@ -1,41 +0,0 @@ -/* @(#)s_lib_ver.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_lib_version.c,v 1.6 1995/05/10 20:47:44 jtc Exp $"; -#endif - -/* - * MACRO for standards - */ - -#include -#include - -/* - * define and initialize _LIB_VERSION - */ -#ifdef _POSIX_MODE -_LIB_VERSION_TYPE _LIB_VERSION_INTERNAL = _POSIX_; -#else -#ifdef _XOPEN_MODE -_LIB_VERSION_TYPE _LIB_VERSION_INTERNAL = _XOPEN_; -#else -#ifdef _SVID3_MODE -_LIB_VERSION_TYPE _LIB_VERSION_INTERNAL = _SVID_; -#else /* default _IEEE_MODE */ -_LIB_VERSION_TYPE _LIB_VERSION_INTERNAL = _IEEE_; -#endif -#endif -#endif - -weak_alias (_LIB_VERSION_INTERNAL, _LIB_VERSION) diff --git a/sysdeps/ieee754/s_matherr.c b/sysdeps/ieee754/s_matherr.c deleted file mode 100644 index d5dc6f122d..0000000000 --- a/sysdeps/ieee754/s_matherr.c +++ /dev/null @@ -1,28 +0,0 @@ -/* @(#)s_matherr.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_matherr.c,v 1.6 1995/05/10 20:47:53 jtc Exp $"; -#endif - -#include -#include - -int -weak_function -__matherr(struct exception *x) -{ - int n=0; - if(x->arg1!=x->arg1) return 0; - return n; -} -weak_alias (__matherr, matherr) diff --git a/sysdeps/ieee754/s_signgam.c b/sysdeps/ieee754/s_signgam.c deleted file mode 100644 index 9af3a75f1e..0000000000 --- a/sysdeps/ieee754/s_signgam.c +++ /dev/null @@ -1,4 +0,0 @@ -#include -#include -int __signgam = 0; -weak_alias (__signgam, signgam) diff --git a/sysdeps/init_array/crti.S b/sysdeps/init_array/crti.S deleted file mode 100644 index 0a6e9fd953..0000000000 --- a/sysdeps/init_array/crti.S +++ /dev/null @@ -1,13 +0,0 @@ -/* Dummy crti file. - - In this configuration, crti.o and crtn.o are both empty because the - .init_array/.fini_array sections are used exclusively. - - Older ports cannot use this because even if the linker used to - build libc itself has .init_array support, we don't want to produce - a crt[in].o that presume a linker that new will be used to link - other things later. - - But new configurations without compatibility concerns for - toolchains without .init_array support can use this to avoid the - superfluous .init and .fini boilerplate code. */ diff --git a/sysdeps/init_array/crtn.S b/sysdeps/init_array/crtn.S deleted file mode 100644 index 6f70e77160..0000000000 --- a/sysdeps/init_array/crtn.S +++ /dev/null @@ -1,13 +0,0 @@ -/* Dummy crtn file. - - In this configuration, crti.o and crtn.o are both empty because the - .init_array/.fini_array sections are used exclusively. - - Older ports cannot use this because even if the linker used to - build libc itself has .init_array support, we don't want to produce - a crt[in].o that presume a linker that new will be used to link - other things later. - - But new configurations without compatibility concerns for - toolchains without .init_array support can use this to avoid the - superfluous .init and .fini boilerplate code. */ diff --git a/sysdeps/init_array/elf-init.c b/sysdeps/init_array/elf-init.c deleted file mode 100644 index 0d8eba2eab..0000000000 --- a/sysdeps/init_array/elf-init.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Startup support for ELF initializers/finalizers in the main executable. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define NO_INITFINI -#include diff --git a/sysdeps/init_array/gmon-start.c b/sysdeps/init_array/gmon-start.c deleted file mode 100644 index 2d1ed03533..0000000000 --- a/sysdeps/init_array/gmon-start.c +++ /dev/null @@ -1,41 +0,0 @@ -/* gmon startup hook using .preinit_array. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Instead of defining __gmon_start__ globally in gcrt1.o, we make it - static and just put a pointer to it into the .preinit_array section. */ - -#define GMON_START_ARRAY_SECTION ".preinit_array" - -#include diff --git a/sysdeps/init_array/pt-crti.S b/sysdeps/init_array/pt-crti.S deleted file mode 100644 index 7d5b4119e0..0000000000 --- a/sysdeps/init_array/pt-crti.S +++ /dev/null @@ -1,23 +0,0 @@ -/* Special initializer support for libpthread. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This arranges for libpthread.so's special initializer to be called as - soon as the library is loaded. */ - - .section .init_array,"a",%init_array - .dc.a __pthread_initialize_minimal_internal diff --git a/sysdeps/m68k/Implies b/sysdeps/m68k/Implies deleted file mode 100644 index beaba937de..0000000000 --- a/sysdeps/m68k/Implies +++ /dev/null @@ -1,4 +0,0 @@ -wordsize-32 -# 68k uses IEEE 754 floating point. -ieee754/dbl-64 -ieee754/flt-32 diff --git a/sysdeps/m68k/Makefile b/sysdeps/m68k/Makefile deleted file mode 100644 index 26539fa01d..0000000000 --- a/sysdeps/m68k/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright (C) 1993-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# . - -# The mpn functions need this. All existing 68k ports use MIT syntax. If -# a new port wants to use Motorola or Sony syntax, it can redefine this -# variable. -ifndef m68k-syntax-flag -m68k-syntax-flag = -DMIT_SYNTAX -endif - -asm-CPPFLAGS += $(m68k-syntax-flag) - -pic-ccflag = -fpic - -ifeq ($(subdir),csu) -# Make sure gcrt1.o uses the large PIC model -CFLAGS-gmon-start.c := -fPIC -ifeq ($(build-pie-default),yes) -# Override default PIE -ASFLAGS-.o += -fno-pie -endif -endif - -ifeq ($(subdir),setjmp) -# Make sure setjmp.c is compiled with a frame pointer -CFLAGS-setjmp.c := -fno-omit-frame-pointer -endif - -ifeq ($(subdir),debug) -CFLAGS-backtrace.c += -funwind-tables -endif - -ifeq ($(subdir),elf) -CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused -endif - -ifeq ($(subdir),gmon) -CFLAGS-mcount.c += -Wno-frame-address -endif diff --git a/sysdeps/m68k/Versions b/sysdeps/m68k/Versions deleted file mode 100644 index f450291a9b..0000000000 --- a/sysdeps/m68k/Versions +++ /dev/null @@ -1,13 +0,0 @@ -libc { - GLIBC_2.0 { - # Functions from libgcc. - __divdi3; __moddi3; __udivdi3; __umoddi3; - } -} -libm { - GLIBC_2.1 { - # A generic bug got this omitted from other configurations' version - # sets, but we always had it. - exp2l; - } -} diff --git a/sysdeps/m68k/__longjmp.c b/sysdeps/m68k/__longjmp.c deleted file mode 100644 index b330ac73e4..0000000000 --- a/sysdeps/m68k/__longjmp.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* Jump to the position specified by ENV, causing the - setjmp call there to return VAL, or 1 if VAL is 0. */ -void -__longjmp (__jmp_buf env, int val) -{ - /* This restores the FP and SP that setjmp's caller had, - and puts the return address into A0 and VAL into D0. */ - -#ifdef CHECK_SP - CHECK_SP (env[0].__sp); -#endif - -#if defined(__HAVE_68881__) || defined(__HAVE_FPU__) - /* Restore the floating-point registers. */ - asm volatile("fmovem%.x %0, %/fp0-%/fp7" : - /* No outputs. */ : "g" (env[0].__fpregs[0])); -#elif defined (__mcffpu__) - asm volatile("fmovem %0, %/fp0-%/fp7" : - /* No outputs. */ : "m" (env[0].__fpregs[0])); -#endif - - /* Put VAL in D0. */ - asm volatile("move%.l %0, %/d0" : /* No outputs. */ : - "g" (val == 0 ? 1 : val) : "d0"); - - asm volatile(/* Restore the data and address registers. */ - "movem%.l %0, %/d1-%/d7/%/a0-%/a7\n" - /* Return to setjmp's caller. */ -#ifdef __motorola__ - "jmp (%/a0)" -#else - "jmp %/a0@" -#endif - : /* No outputs. */ : "g" (env[0].__dregs[0]) - /* We don't bother with the clobbers, - because this code always jumps out anyway. */ - ); - - /* Avoid `volatile function does return' warnings. */ - for (;;); -} diff --git a/sysdeps/m68k/abort-instr.h b/sysdeps/m68k/abort-instr.h deleted file mode 100644 index b43c9efe1d..0000000000 --- a/sysdeps/m68k/abort-instr.h +++ /dev/null @@ -1,2 +0,0 @@ -/* An instruction which should crash any program is `illegal'. */ -#define ABORT_INSTRUCTION asm ("illegal") diff --git a/sysdeps/m68k/asm-syntax.h b/sysdeps/m68k/asm-syntax.h deleted file mode 100644 index eef8abad55..0000000000 --- a/sysdeps/m68k/asm-syntax.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Definitions for 68k syntax variations. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in the GNU MP Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* For ELF we need to prefix register names and local labels. */ -#define R_(r) %##r -#define R(r) R_(r) -#define L(label) .##label - -#ifdef MIT_SYNTAX -#define MEM(base)R(base)@ -#define MEM_DISP(base,displacement)R(base)@(displacement) -#define MEM_INDX(base,idx,size_suffix)R(base)@(R(idx):size_suffix) -#define MEM_INDX1(base,idx,size_suffix,scale)R(base)@(R(idx):size_suffix:scale) -#define MEM_PREDEC(memory_base)R(memory_base)@- -#define MEM_POSTINC(memory_base)R(memory_base)@+ -#define TEXT .text -/* Use variable sized opcodes. */ -#define bcc jcc -#define bcs jcs -#define bls jls -#define beq jeq -#define bne jne -#define bra jra -#endif - -#ifdef MOTOROLA_SYNTAX -#define MEM(base)(R(base)) -#define MEM_DISP(base,displacement)(displacement,R(base)) -#define MEM_PREDEC(memory_base)-(R(memory_base)) -#define MEM_POSTINC(memory_base)(R(memory_base))+ -#define MEM_INDX_(base,idx,size_suffix)(R(base),R(idx##.##size_suffix)) -#define MEM_INDX(base,idx,size_suffix)MEM_INDX_(base,idx,size_suffix) -#define MEM_INDX1_(base,idx,size_suffix,scale)(R(base),R(idx##.##size_suffix*scale)) -#define MEM_INDX1(base,idx,size_suffix,scale)MEM_INDX1_(base,idx,size_suffix,scale) -#define TEXT .text -#define bcc jbcc -#define bcs jbcs -#define bls jbls -#define beq jbeq -#define bne jbne -#define bra jbra -#define movel move.l -#define moveml movem.l -#define moveql moveq.l -#define cmpl cmp.l -#define orl or.l -#define clrl clr.l -#define andw and.w -#define eorw eor.w -#define andl and.l -#define lsrl lsr.l -#define lsll lsl.l -#define roxrl roxr.l -#define roxll roxl.l -#define addl add.l -#define addxl addx.l -#define addql addq.l -#define subl sub.l -#define subxl subx.l -#define subqw subq.w -#define subql subq.l -#define negl neg.l -#define mulul mulu.l -#define tstw tst.w -#define tstl tst.l -#endif diff --git a/sysdeps/m68k/backtrace.c b/sysdeps/m68k/backtrace.c deleted file mode 100644 index 13ed3d86af..0000000000 --- a/sysdeps/m68k/backtrace.c +++ /dev/null @@ -1,162 +0,0 @@ -/* Return backtrace of current program state. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -struct trace_arg -{ - void **array; - int cnt, size; - void *lastfp, *lastsp; -}; - -#ifdef SHARED -static _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *); -static _Unwind_Ptr (*unwind_getip) (struct _Unwind_Context *); -static _Unwind_Ptr (*unwind_getcfa) (struct _Unwind_Context *); -static _Unwind_Ptr (*unwind_getgr) (struct _Unwind_Context *, int); -static void *libgcc_handle; - -static void -init (void) -{ - libgcc_handle = __libc_dlopen ("libgcc_s.so.2"); - - if (libgcc_handle == NULL) - return; - - unwind_backtrace = __libc_dlsym (libgcc_handle, "_Unwind_Backtrace"); - unwind_getip = __libc_dlsym (libgcc_handle, "_Unwind_GetIP"); - unwind_getcfa = __libc_dlsym (libgcc_handle, "_Unwind_GetCFA"); - unwind_getgr = __libc_dlsym (libgcc_handle, "_Unwind_GetGR"); - if (unwind_getip == NULL || unwind_getgr == NULL || unwind_getcfa == NULL) - { - unwind_backtrace = NULL; - __libc_dlclose (libgcc_handle); - libgcc_handle = NULL; - } -} -#else -# define unwind_backtrace _Unwind_Backtrace -# define unwind_getip _Unwind_GetIP -# define unwind_getcfa _Unwind_GetCFA -# define unwind_getgr _Unwind_GetGR -#endif - -static _Unwind_Reason_Code -backtrace_helper (struct _Unwind_Context *ctx, void *a) -{ - struct trace_arg *arg = a; - - /* We are first called with address in the __backtrace function. - Skip it. */ - if (arg->cnt != -1) - arg->array[arg->cnt] = (void *) unwind_getip (ctx); - if (++arg->cnt == arg->size) - return _URC_END_OF_STACK; - - /* %fp is DWARF2 register 14 on M68K. */ - arg->lastfp = (void *) unwind_getgr (ctx, 14); - arg->lastsp = (void *) unwind_getcfa (ctx); - return _URC_NO_REASON; -} - - -/* This is a global variable set at program start time. It marks the - highest used stack address. */ -extern void *__libc_stack_end; - - -/* This is the stack layout we see with every stack frame - if not compiled without frame pointer. - - +-----------------+ +-----------------+ - %fp -> | %fp last frame--------> | %fp last frame--->... - | | | | - | return address | | return address | - +-----------------+ +-----------------+ - - First try as far to get as far as possible using - _Unwind_Backtrace which handles -fomit-frame-pointer - as well, but requires .eh_frame info. Then fall back to - walking the stack manually. */ - -struct layout -{ - struct layout *fp; - void *ret; -}; - - -int -__backtrace (void **array, int size) -{ - struct trace_arg arg = { .array = array, .size = size, .cnt = -1 }; - - if (size <= 0) - return 0; - -#ifdef SHARED - __libc_once_define (static, once); - - __libc_once (once, init); - if (unwind_backtrace == NULL) - return 0; -#endif - - unwind_backtrace (backtrace_helper, &arg); - - if (arg.cnt > 1 && arg.array[arg.cnt - 1] == NULL) - --arg.cnt; - else if (arg.cnt < size) - { - struct layout *fp = (struct layout *) arg.lastfp; - - while (arg.cnt < size) - { - /* Check for out of range. */ - if ((void *) fp < arg.lastsp || (void *) fp > __libc_stack_end - || ((long) fp & 1)) - break; - - array[arg.cnt++] = fp->ret; - fp = fp->fp; - } - } - return arg.cnt != -1 ? arg.cnt : 0; -} -weak_alias (__backtrace, backtrace) -libc_hidden_def (__backtrace) - - -#ifdef SHARED -/* Free all resources if necessary. */ -libc_freeres_fn (free_mem) -{ - unwind_backtrace = NULL; - if (libgcc_handle != NULL) - { - __libc_dlclose (libgcc_handle); - libgcc_handle = NULL; - } -} -#endif diff --git a/sysdeps/m68k/bits/byteswap.h b/sysdeps/m68k/bits/byteswap.h deleted file mode 100644 index e73c9fe31e..0000000000 --- a/sysdeps/m68k/bits/byteswap.h +++ /dev/null @@ -1,88 +0,0 @@ -/* Macros to swap the order of bytes in integer values. m68k version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#ifndef _BITS_BYTESWAP_H -#define _BITS_BYTESWAP_H 1 - -/* Swap bytes in 16 bit value. We don't provide an assembler version - because GCC is smart enough to generate optimal assembler output, and - this allows for better cse. */ -#define __bswap_constant_16(x) \ - ((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8)) - -static __always_inline unsigned short int -__bswap_16 (unsigned short int __bsx) -{ - return __bswap_constant_16 (__bsx); -} - -/* Swap bytes in 32 bit value. */ -#define __bswap_constant_32(x) \ - ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) | \ - (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24)) - -#if !defined(__mcoldfire__) -static __always_inline unsigned int -__bswap_32 (unsigned int __bsx) -{ - if (__builtin_constant_p (__bsx)) - return __bswap_constant_32 (__bsx); - __asm__ __volatile__ ("ror%.w %#8, %0;" - "swap %0;" - "ror%.w %#8, %0" - : "+d" (__bsx)); - return __bsx; -} -#else -static __always_inline unsigned int -__bswap_32 (unsigned int __bsx) -{ - return __bswap_constant_32 (__bsx); -} -#endif - -#if defined __GNUC__ && __GNUC__ >= 2 -/* Swap bytes in 64 bit value. */ -# define __bswap_constant_64(x) \ - __extension__ \ - ((((x) & 0xff00000000000000ull) >> 56) \ - | (((x) & 0x00ff000000000000ull) >> 40) \ - | (((x) & 0x0000ff0000000000ull) >> 24) \ - | (((x) & 0x000000ff00000000ull) >> 8) \ - | (((x) & 0x00000000ff000000ull) << 8) \ - | (((x) & 0x0000000000ff0000ull) << 24) \ - | (((x) & 0x000000000000ff00ull) << 40) \ - | (((x) & 0x00000000000000ffull) << 56)) - -/* Swap bytes in 64 bit value. */ -__extension__ -static __always_inline unsigned long long -__bswap_64 (unsigned long long __bsx) -{ - if (__builtin_constant_p (__bsx)) - return __bswap_constant_64 (__bsx); - return (__bswap_32 (__bsx >> 32) - | ((unsigned long long) __bswap_32 (__bsx) << 32)); -} -#endif - -#endif /* _BITS_BYTESWAP_H */ diff --git a/sysdeps/m68k/bits/endian.h b/sysdeps/m68k/bits/endian.h deleted file mode 100644 index bf4ecb60a4..0000000000 --- a/sysdeps/m68k/bits/endian.h +++ /dev/null @@ -1,7 +0,0 @@ -/* m68k is big-endian. */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#define __BYTE_ORDER __BIG_ENDIAN diff --git a/sysdeps/m68k/bits/link.h b/sysdeps/m68k/bits/link.h deleted file mode 100644 index c5e9e757b7..0000000000 --- a/sysdeps/m68k/bits/link.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - - -/* Registers for entry into PLT on M68K. */ -typedef struct La_m68k_regs -{ - uint32_t lr_a0; - uint32_t lr_a1; - uint32_t lr_sp; -} La_m68k_regs; - -/* Return values for calls from PLT on M68K. */ -typedef struct La_m68k_retval -{ - uint32_t lrv_d0; - uint32_t lrv_d1; - uint32_t lrv_a0; - long double lrv_fp0; -} La_m68k_retval; - - -__BEGIN_DECLS - -extern Elf32_Addr la_m68k_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_m68k_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_m68k_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_m68k_regs *__inregs, - La_m68k_retval *__outregs, - const char *__symname); - -__END_DECLS diff --git a/sysdeps/m68k/bits/setjmp.h b/sysdeps/m68k/bits/setjmp.h deleted file mode 100644 index 8246fca1e4..0000000000 --- a/sysdeps/m68k/bits/setjmp.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Define the machine-dependent type `jmp_buf'. m68k version. */ -#ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include directly; use instead." -#endif - -typedef struct __jmp_buf_internal_tag - { - /* There are eight 4-byte data registers, but D0 is not saved. */ - long int __dregs[7]; - - /* There are six 4-byte address registers, plus the FP and SP. */ - int *__aregs[6]; - int *__fp; - int *__sp; - -#if defined __HAVE_68881__ || defined __HAVE_FPU__ - /* There are eight floating point registers which - are saved in IEEE 96-bit extended format. */ - char __fpregs[8 * (96 / 8)]; -#elif defined __mcffpu__ - char __fpregs[8 * (64 / 8)]; -#endif - - } __jmp_buf[1]; - -#endif /* bits/setjmp.h */ diff --git a/sysdeps/m68k/bsd-_setjmp.c b/sysdeps/m68k/bsd-_setjmp.c deleted file mode 100644 index ea1c9be53f..0000000000 --- a/sysdeps/m68k/bsd-_setjmp.c +++ /dev/null @@ -1,21 +0,0 @@ -/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. m68k version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define BSD__SETJMP -#include -libc_hidden_def (_setjmp) diff --git a/sysdeps/m68k/bsd-setjmp.c b/sysdeps/m68k/bsd-setjmp.c deleted file mode 100644 index b3673b5fa5..0000000000 --- a/sysdeps/m68k/bsd-setjmp.c +++ /dev/null @@ -1,20 +0,0 @@ -/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. m68k version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define BSD_SETJMP -#include diff --git a/sysdeps/m68k/coldfire/atomic-machine.h b/sysdeps/m68k/coldfire/atomic-machine.h deleted file mode 100644 index d2e4a1f15d..0000000000 --- a/sysdeps/m68k/coldfire/atomic-machine.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _ATOMIC_MACHINE_H -#define _ATOMIC_MACHINE_H 1 - -#include - -/* Coldfire has no atomic compare-and-exchange operation, and the - kernel provides no userspace atomicity operations. Here we just - use generic non-atomic implementations instead. */ - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int16_t atomic16_t; -typedef uint16_t uatomic16_t; -typedef int_fast16_t atomic_fast16_t; -typedef uint_fast16_t uatomic_fast16_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -/* If we have just non-atomic operations, we can as well make them wide. */ -#define __HAVE_64B_ATOMICS 1 -#define USE_ATOMIC_COMPILER_BUILTINS 0 - -/* XXX Is this actually correct? */ -#define ATOMIC_EXCHANGE_USES_CAS 1 - -/* The only basic operation needed is compare and exchange. */ -#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ - ({ __typeof (mem) __gmemp = (mem); \ - __typeof (*mem) __gret = *__gmemp; \ - __typeof (*mem) __gnewval = (newval); \ - \ - if (__gret == (oldval)) \ - *__gmemp = __gnewval; \ - __gret; }) - -#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \ - ({ __typeof (mem) __gmemp = (mem); \ - __typeof (*mem) __gnewval = (newval); \ - \ - *__gmemp == (oldval) ? (*__gmemp = __gnewval, 0) : 1; }) - -#endif diff --git a/sysdeps/m68k/coldfire/fpu/bits/mathinline.h b/sysdeps/m68k/coldfire/fpu/bits/mathinline.h deleted file mode 100644 index 7dbfe37ee1..0000000000 --- a/sysdeps/m68k/coldfire/fpu/bits/mathinline.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Inline math functions for Coldfire. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#ifndef __extern_always_inline -# define __MATH_INLINE __inline -#else -# define __MATH_INLINE __extern_always_inline -#endif - -#if defined __USE_ISOC99 && defined __GNUC__ - -/* Test for negative number. Used in the signbit macro. */ -__MATH_INLINE int -__NTH (__signbitf (float __x)) -{ - return __builtin_signbitf (__x); -} - -__MATH_INLINE int -__NTH (__signbit (double __x)) -{ - return __builtin_signbit (__x); -} - -#endif diff --git a/sysdeps/m68k/coldfire/fpu/e_sqrt.c b/sysdeps/m68k/coldfire/fpu/e_sqrt.c deleted file mode 100644 index 6e54475f88..0000000000 --- a/sysdeps/m68k/coldfire/fpu/e_sqrt.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -double -__ieee754_sqrt (double x) -{ - asm ("fdsqrt.d %1,%0" : "=f" (x) : "fm" (x)); - return x; -} -strong_alias (__ieee754_sqrt, __sqrt_finite) diff --git a/sysdeps/m68k/coldfire/fpu/e_sqrtf.c b/sysdeps/m68k/coldfire/fpu/e_sqrtf.c deleted file mode 100644 index 64d26f87a7..0000000000 --- a/sysdeps/m68k/coldfire/fpu/e_sqrtf.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -float -__ieee754_sqrtf (float x) -{ - double result; - asm ("fssqrt.s %1,%0" : "=f" (result) : "dm" (x)); - return result; -} -strong_alias (__ieee754_sqrtf, __sqrtf_finite) diff --git a/sysdeps/m68k/coldfire/fpu/fraiseexcpt.c b/sysdeps/m68k/coldfire/fpu/fraiseexcpt.c deleted file mode 100644 index 4220a6b877..0000000000 --- a/sysdeps/m68k/coldfire/fpu/fraiseexcpt.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Raise given exceptions. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -int -__feraiseexcept (int excepts) -{ - /* Raise exceptions represented by EXCEPTS. But we must raise only one - signal at a time. It is important that if the overflow/underflow - exception and the divide by zero exception are given at the same - time, the overflow/underflow exception follows the divide by zero - exception. - - The Coldfire FPU allows an exception to be raised by asserting - the associated EXC bit and then executing an arbitrary arithmetic - instruction. fmove.l is classified as an arithmetic instruction - and suffices for this purpose. - - We therefore raise an exception by setting both the EXC and AEXC - bit associated with the exception (the former being 6 bits to the - left of the latter) and then loading the longword at (%sp) into an - FP register. */ - - inline void - raise_one_exception (int mask) - { - if (excepts & mask) - { - int fpsr; - double unused; - - asm volatile ("fmove%.l %/fpsr,%0" : "=d" (fpsr)); - fpsr |= (mask << 6) | mask; - asm volatile ("fmove%.l %0,%/fpsr" :: "d" (fpsr)); - asm volatile ("fmove%.l (%%sp),%0" : "=f" (unused)); - } - } - - raise_one_exception (FE_INVALID); - raise_one_exception (FE_DIVBYZERO); - raise_one_exception (FE_OVERFLOW); - raise_one_exception (FE_UNDERFLOW); - raise_one_exception (FE_INEXACT); - - /* Success. */ - return 0; -} -libm_hidden_def (__feraiseexcept) -weak_alias (__feraiseexcept, feraiseexcept) -libm_hidden_weak (feraiseexcept) diff --git a/sysdeps/m68k/coldfire/fpu/libm-test-ulps b/sysdeps/m68k/coldfire/fpu/libm-test-ulps deleted file mode 100644 index fad7f8f068..0000000000 --- a/sysdeps/m68k/coldfire/fpu/libm-test-ulps +++ /dev/null @@ -1,228 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "atan2": -float: 1 -ifloat: 1 - -Function: "atanh": -float: 1 -ifloat: 1 - -Function: Imaginary part of "cacosh": -float: 1 -ifloat: 1 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "casinh": -double: 5 -float: 1 -idouble: 5 -ifloat: 1 - -Function: Imaginary part of "casinh": -double: 3 -float: 6 -idouble: 3 -ifloat: 6 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catanh": -double: 4 -idouble: 4 - -Function: "cbrt": -double: 1 -idouble: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccos": -float: 1 -ifloat: 1 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccosh": -float: 1 -ifloat: 1 - -Function: Real part of "cexp": -float: 1 -ifloat: 1 - -Function: Imaginary part of "cexp": -float: 1 -ifloat: 1 - -Function: Real part of "clog": -float: 1 -ifloat: 1 - -Function: Real part of "clog10": -float: 1 -ifloat: 1 - -Function: Imaginary part of "clog10": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cos": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Real part of "cpow": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 - -Function: Imaginary part of "cpow": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csqrt": -float: 1 -ifloat: 1 - -Function: Imaginary part of "ctan": -double: 1 -idouble: 1 - -Function: Real part of "ctanh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "ctanh": -float: 1 -ifloat: 1 - -Function: "erf": -double: 1 -idouble: 1 - -Function: "erfc": -double: 1 -idouble: 1 - -Function: "exp10": -double: 6 -float: 2 -idouble: 6 -ifloat: 2 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "hypot": -float: 1 -ifloat: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "lgamma": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "log10": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "log1p": -float: 1 -ifloat: 1 - -Function: "sincos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "tan": -double: 1 -idouble: 1 - -Function: "tgamma": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -# end of automatic generation diff --git a/sysdeps/m68k/coldfire/fpu/libm-test-ulps-name b/sysdeps/m68k/coldfire/fpu/libm-test-ulps-name deleted file mode 100644 index d0b67ea9eb..0000000000 --- a/sysdeps/m68k/coldfire/fpu/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -ColdFire diff --git a/sysdeps/m68k/coldfire/fpu/math_private.h b/sysdeps/m68k/coldfire/fpu/math_private.h deleted file mode 100644 index d306a508b4..0000000000 --- a/sysdeps/m68k/coldfire/fpu/math_private.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef COLDFIRE_MATH_PRIVATE_H -#define COLDFIRE_MATH_PRIVATE_H 1 - -/* Enable __finitel, __isinfl, and __isnanl for binary compatibility - when built without long double support. */ -#define LDBL_CLASSIFY_COMPAT 1 - -#include_next - -#endif diff --git a/sysdeps/m68k/coldfire/fpu/s_fabs.c b/sysdeps/m68k/coldfire/fpu/s_fabs.c deleted file mode 100644 index 6c1a8dc344..0000000000 --- a/sysdeps/m68k/coldfire/fpu/s_fabs.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -double -__fabs (double x) -{ - asm ("fdabs.d %1,%0" : "=f" (x) : "fm" (x)); - return x; -} -weak_alias (__fabs, fabs) -#ifdef NO_LONG_DOUBLE -strong_alias (__fabs, __fabsl) -weak_alias (__fabs, fabsl) -#endif diff --git a/sysdeps/m68k/coldfire/fpu/s_fabsf.c b/sysdeps/m68k/coldfire/fpu/s_fabsf.c deleted file mode 100644 index e134c102e9..0000000000 --- a/sysdeps/m68k/coldfire/fpu/s_fabsf.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -float -__fabsf (float x) -{ - asm ("fsabs.s %1,%0" : "=f" (x) : "dm" (x)); - return x; -} -weak_alias (__fabsf, fabsf) diff --git a/sysdeps/m68k/coldfire/fpu/s_lrint.c b/sysdeps/m68k/coldfire/fpu/s_lrint.c deleted file mode 100644 index 0cdad325d1..0000000000 --- a/sysdeps/m68k/coldfire/fpu/s_lrint.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -long int -__lrint (double x) -{ - long int result; - asm ("fmove.l %1,%0" : "=dm" (result) : "f" (x)); - return result; -} -weak_alias (__lrint, lrint) -#ifdef NO_LONG_DOUBLE -strong_alias (__lrint, __lrintl) -weak_alias (__lrint, lrintl) -#endif diff --git a/sysdeps/m68k/coldfire/fpu/s_lrintf.c b/sysdeps/m68k/coldfire/fpu/s_lrintf.c deleted file mode 100644 index 7f5c9d04f2..0000000000 --- a/sysdeps/m68k/coldfire/fpu/s_lrintf.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -long int -__lrintf (float x) -{ - long int result; - asm ("fmove.l %1,%0" : "=dm" (result) : "f" (x)); - return result; -} -weak_alias (__lrintf, lrintf) diff --git a/sysdeps/m68k/coldfire/fpu/s_rint.c b/sysdeps/m68k/coldfire/fpu/s_rint.c deleted file mode 100644 index e950630688..0000000000 --- a/sysdeps/m68k/coldfire/fpu/s_rint.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -double -__rint (double x) -{ - asm ("fint.d %1,%0" : "=f" (x) : "fm" (x)); - return x; -} -weak_alias (__rint, rint) -#ifdef NO_LONG_DOUBLE -strong_alias (__rint, __rintl) -weak_alias (__rint, rintl) -#endif diff --git a/sysdeps/m68k/coldfire/fpu/s_rintf.c b/sysdeps/m68k/coldfire/fpu/s_rintf.c deleted file mode 100644 index ea244e8b88..0000000000 --- a/sysdeps/m68k/coldfire/fpu/s_rintf.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -float -__rintf (float x) -{ - double result; - asm ("fint.s %1,%0" : "=f" (result) : "dm" (x)); - return (float) result; -} -weak_alias (__rintf, rintf) diff --git a/sysdeps/m68k/coldfire/nofpu/s_fma.c b/sysdeps/m68k/coldfire/nofpu/s_fma.c deleted file mode 100644 index d9613fa67c..0000000000 --- a/sysdeps/m68k/coldfire/nofpu/s_fma.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/m68k/coldfire/nofpu/s_fmaf.c b/sysdeps/m68k/coldfire/nofpu/s_fmaf.c deleted file mode 100644 index aa5c9b2d91..0000000000 --- a/sysdeps/m68k/coldfire/nofpu/s_fmaf.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/m68k/coldfire/nofpu/sfp-machine.h b/sysdeps/m68k/coldfire/nofpu/sfp-machine.h deleted file mode 100644 index e4ad79e6bd..0000000000 --- a/sysdeps/m68k/coldfire/nofpu/sfp-machine.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/m68k/coldfire/sysdep.h b/sysdeps/m68k/coldfire/sysdep.h deleted file mode 100644 index c221c7d237..0000000000 --- a/sysdeps/m68k/coldfire/sysdep.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Assembler macros for Coldfire. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifdef __ASSEMBLER__ - -/* Perform operation OP with PC-relative SRC as the first operand and - DST as the second. TMP is available as a temporary if needed. */ -# define PCREL_OP(OP, SRC, DST, TMP) \ - move.l &SRC - ., TMP; OP (-8, %pc, TMP), DST - -/* Load the address of the GOT into register R. */ -# define LOAD_GOT(R) \ - move.l &_GLOBAL_OFFSET_TABLE_@GOTPC, R; \ - lea (-6, %pc, R), R - -#else - -/* As above, but PC is the spelling of the PC register. We need this - so that the macro can be used in both normal and extended asms. */ -# define PCREL_OP(OP, SRC, DST, TMP, PC) \ - "move.l #" SRC " - ., " TMP "\n\t" OP " (-8, " PC ", " TMP "), " DST - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/m68k/crti.S b/sysdeps/m68k/crti.S deleted file mode 100644 index fc211b189d..0000000000 --- a/sysdeps/m68k/crti.S +++ /dev/null @@ -1,82 +0,0 @@ -/* Special .init and .fini section support for m68k. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - - .section .init,"ax",@progbits - .align 2 - .globl _init - .type _init, @function -_init: - link.w %fp, #0 - move.l %a5, -(%sp) - LOAD_GOT (%a5) -#if PREINIT_FUNCTION_WEAK - tst.l PREINIT_FUNCTION@GOT(%a5) - jeq 1f - jbsr PREINIT_FUNCTION@PLTPC -1: -#else - jbsr PREINIT_FUNCTION -#endif - - .section .fini,"ax",@progbits - .align 2 - .globl _fini - .type _fini, @function -_fini: - link.w %fp, #0 - move.l %a5, -(%sp) - LOAD_GOT (%a5) diff --git a/sysdeps/m68k/crtn.S b/sysdeps/m68k/crtn.S deleted file mode 100644 index 16e7c513bf..0000000000 --- a/sysdeps/m68k/crtn.S +++ /dev/null @@ -1,47 +0,0 @@ -/* Special .init and .fini section support for m68k. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .section .init,"ax",@progbits - move.l -4(%fp), %a5 - unlk %fp - rts - - .section .fini,"ax",@progbits - move.l -4(%fp), %a5 - unlk %fp - rts diff --git a/sysdeps/m68k/dl-machine.h b/sysdeps/m68k/dl-machine.h deleted file mode 100644 index 8f457cea5a..0000000000 --- a/sysdeps/m68k/dl-machine.h +++ /dev/null @@ -1,319 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. m68k version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "m68k" - -#include -#include -#include - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf32_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_68K; -} - - -/* Return the link-time address of _DYNAMIC. - This must be inlined in a function which uses global data. */ -static inline Elf32_Addr -elf_machine_dynamic (void) -{ - Elf32_Addr addr; - - asm ("move.l _DYNAMIC@GOT.w(%%a5), %0" - : "=a" (addr)); - return addr; -} - - -/* Return the run-time load address of the shared object. */ -static inline Elf32_Addr -elf_machine_load_address (void) -{ - Elf32_Addr addr; - asm (PCREL_OP ("lea", "_dl_start", "%0", "%0", "%%pc") "\n\t" - "sub.l _dl_start@GOT.w(%%a5), %0" - : "=a" (addr)); - return addr; -} - - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int __attribute__ ((always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - Elf32_Addr *got; - extern void _dl_runtime_resolve (Elf32_Word); - extern void _dl_runtime_profile (Elf32_Word); - - if (l->l_info[DT_JMPREL] && lazy) - { - /* The GOT entries for functions in the PLT have not yet been - filled in. Their initial contents will arrange when called - to push an offset into the .rela.plt section, push - _GLOBAL_OFFSET_TABLE_[1], and then jump to - _GLOBAL_OFFSET_TABLE_[2]. */ - got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]); - got[1] = (Elf32_Addr) l; /* Identify this shared object. */ - - /* The got[2] entry contains the address of a function which gets - called to get the address of a so far unresolved function and - jump to it. The profiling extension of the dynamic linker allows - to intercept the calls to collect information. In this case we - don't store the address in the GOT so that all future calls also - end in this function. */ - if (profile) - { - got[2] = (Elf32_Addr) &_dl_runtime_profile; - - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - { - /* This is the object we are looking for. Say that we really - want profiling and the timers are started. */ - GL(dl_profile_map) = l; - } - } - else - /* This function will get called to fix up the GOT entry indicated by - the offset on the stack, and then jump to the resolved address. */ - got[2] = (Elf32_Addr) &_dl_runtime_resolve; - } - - return lazy; -} - -#define ELF_MACHINE_RUNTIME_FIXUP_ARGS long int save_a0, long int save_a1 -#define ELF_MACHINE_RUNTIME_FIXUP_PARAMS save_a0, save_a1 - - -/* Mask identifying addresses reserved for the user program, - where the dynamic linker should not map anything. */ -#define ELF_MACHINE_USER_ADDRESS_MASK 0x80000000UL - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START asm ("\ - .text\n\ - .globl _start\n\ - .type _start,@function\n\ -_start:\n\ - sub.l %fp, %fp\n\ - move.l %sp, -(%sp)\n\ - jbsr _dl_start\n\ - addq.l #4, %sp\n\ - /* FALLTHRU */\n\ -\n\ - .globl _dl_start_user\n\ - .type _dl_start_user,@function\n\ -_dl_start_user:\n\ - | Save the user entry point address in %a4.\n\ - move.l %d0, %a4\n\ - | See if we were run as a command with the executable file\n\ - | name as an extra leading argument.\n\ - " PCREL_OP ("move.l", "_dl_skip_args", "%d0", "%d0", "%pc") "\n\ - | Pop the original argument count\n\ - move.l (%sp)+, %d1\n\ - | Subtract _dl_skip_args from it.\n\ - sub.l %d0, %d1\n\ - | Adjust the stack pointer to skip _dl_skip_args words.\n\ - lea (%sp, %d0*4), %sp\n\ - | Push back the modified argument count.\n\ - move.l %d1, -(%sp)\n\ - # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env)\n\ - pea 8(%sp, %d1*4)\n\ - pea 8(%sp)\n\ - move.l %d1, -(%sp)\n\ - " PCREL_OP ("move.l", "_rtld_local", "-(%sp)", "%d0", "%pc") "\n\ - jbsr _dl_init\n\ - addq.l #8, %sp\n\ - addq.l #8, %sp\n\ - | Pass our finalizer function to the user in %a1.\n\ - " PCREL_OP ("lea", "_dl_fini", "%a1", "%a1", "%pc") "\n\ - | Initialize %fp with the stack pointer.\n\ - move.l %sp, %fp\n\ - | Jump to the user's entry point.\n\ - jmp (%a4)\n\ - .size _dl_start_user, . - _dl_start_user\n\ - .previous"); - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or - TLS variable, so undefined references should not be allowed to - define the value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. */ -#define elf_machine_type_class(type) \ - ((((type) == R_68K_JMP_SLOT \ - || (type) == R_68K_TLS_DTPMOD32 \ - || (type) == R_68K_TLS_DTPREL32 \ - || (type) == R_68K_TLS_TPREL32) * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_68K_COPY) * ELF_RTYPE_CLASS_COPY)) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_68K_JMP_SLOT - -/* The m68k never uses Elf32_Rel relocations. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -static inline Elf32_Addr -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf32_Rela *reloc, - Elf32_Addr *reloc_addr, Elf32_Addr value) -{ - return *reloc_addr = value; -} - -/* Return the final value of a plt relocation. On the m68k the JMP_SLOT - relocation ignores the addend. */ -static inline Elf32_Addr -elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, - Elf32_Addr value) -{ - return value; -} - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER m68k_gnu_pltenter -#define ARCH_LA_PLTEXIT m68k_gnu_pltexit - -#endif /* !dl_machine_h */ - -#ifdef RESOLVE_MAP - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ - -auto inline void __attribute__ ((unused, always_inline)) -elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, - const Elf32_Sym *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - - if (__builtin_expect (r_type == R_68K_RELATIVE, 0)) - *reloc_addr = map->l_addr + reloc->r_addend; - else - { - const Elf32_Sym *const refsym = sym; - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value; - - switch (r_type) - { - case R_68K_COPY: - if (sym == NULL) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (sym->st_size > refsym->st_size - || (sym->st_size < refsym->st_size && GLRO(dl_verbose))) - { - const char *strtab; - - strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - break; - case R_68K_GLOB_DAT: - case R_68K_JMP_SLOT: - *reloc_addr = value; - break; - case R_68K_8: - *(char *) reloc_addr = value + reloc->r_addend; - break; - case R_68K_16: - *(short *) reloc_addr = value + reloc->r_addend; - break; - case R_68K_32: - *reloc_addr = value + reloc->r_addend; - break; - case R_68K_PC8: - *(char *) reloc_addr - = value + reloc->r_addend - (Elf32_Addr) reloc_addr; - break; - case R_68K_PC16: - *(short *) reloc_addr - = value + reloc->r_addend - (Elf32_Addr) reloc_addr; - break; - case R_68K_PC32: - *reloc_addr = value + reloc->r_addend - (Elf32_Addr) reloc_addr; - break; -#ifndef RTLD_BOOTSTRAP - case R_68K_TLS_DTPMOD32: - /* Get the information from the link map returned by the - resolv function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; - break; - case R_68K_TLS_DTPREL32: - if (sym != NULL) - *reloc_addr = TLS_DTPREL_VALUE (sym, reloc); - break; - case R_68K_TLS_TPREL32: - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = TLS_TPREL_VALUE (sym_map, sym, reloc); - } - break; -#endif /* !RTLD_BOOTSTRAP */ - case R_68K_NONE: /* Alright, Wilbur. */ - break; - default: - _dl_reloc_bad_type (map, r_type, 0); - break; - } - } -} - -auto inline void __attribute__ ((unused, always_inline)) -elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, - void *const reloc_addr_arg) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - *reloc_addr = l_addr + reloc->r_addend; -} - -auto inline void __attribute__ ((unused, always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf32_Addr l_addr, const Elf32_Rela *reloc, - int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); - if (ELF32_R_TYPE (reloc->r_info) == R_68K_JMP_SLOT) - *reloc_addr += l_addr; - else - _dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 1); -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/m68k/dl-tls.h b/sysdeps/m68k/dl-tls.h deleted file mode 100644 index a22f8ae335..0000000000 --- a/sysdeps/m68k/dl-tls.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. M68K version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maxim Kuvyrkov , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - -/* The thread pointer points 0x7000 past the first static TLS block. */ -#define TLS_TP_OFFSET 0x7000 - -/* Dynamic thread vector pointers point 0x8000 past the start of each - TLS block. */ -#define TLS_DTV_OFFSET 0x8000 - -/* Compute the value for a TPREL reloc. */ -#define TLS_TPREL_VALUE(sym_map, sym, reloc) \ - ((sym_map)->l_tls_offset + (sym)->st_value + (reloc)->r_addend \ - - TLS_TP_OFFSET) - -/* Compute the value for a DTPREL reloc. */ -#define TLS_DTPREL_VALUE(sym, reloc) \ - ((sym)->st_value + (reloc)->r_addend - TLS_DTV_OFFSET) - -extern void *__tls_get_addr (tls_index *ti); - -#define GET_ADDR_OFFSET (ti->ti_offset + TLS_DTV_OFFSET) -#define __TLS_GET_ADDR(__ti) (__tls_get_addr (__ti) - TLS_DTV_OFFSET) diff --git a/sysdeps/m68k/dl-trampoline.S b/sysdeps/m68k/dl-trampoline.S deleted file mode 100644 index 75c2924f93..0000000000 --- a/sysdeps/m68k/dl-trampoline.S +++ /dev/null @@ -1,222 +0,0 @@ -/* PLT trampolines. m68k version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#if !defined (__mcoldfire__) -# define FMOVE fmove.x -# define FPSPACE 12 -#elif defined (__mcffpu__) -# define FMOVE fmove.d -# define FPSPACE 8 -#else -# define FPSPACE 0 -#endif - - .text - .globl _dl_runtime_resolve - .type _dl_runtime_resolve, @function -_dl_runtime_resolve: - cfi_startproc - cfi_adjust_cfa_offset (8) - | Save %a0 (struct return address) and %a1. - move.l %a0, -(%sp) - cfi_adjust_cfa_offset (4) - move.l %a1, -(%sp) - cfi_adjust_cfa_offset (4) - | Call the real address resolver. - jbsr _dl_fixup - | Restore register %a0 and %a1. - move.l (%sp)+, %a1 - cfi_adjust_cfa_offset (-4) - move.l (%sp)+, %a0 - cfi_adjust_cfa_offset (-4) - | Pop parameters - addq.l #8, %sp - cfi_adjust_cfa_offset (-8) - | Call real function. -#ifdef __mcoldfire__ - move.l %d0,-(%sp) - cfi_adjust_cfa_offset (4) - rts -#else - jmp (%d0) -#endif - cfi_endproc - .size _dl_runtime_resolve, . - _dl_runtime_resolve - - .text - .globl _dl_runtime_profile - .type _dl_runtime_profile, @function -_dl_runtime_profile: - cfi_startproc - cfi_adjust_cfa_offset (8) - pea 8(%sp) - cfi_adjust_cfa_offset (4) - move.l %a1, -(%sp) - cfi_adjust_cfa_offset (4) - move.l %a0, -(%sp) - cfi_adjust_cfa_offset (4) - pea -1.w - cfi_adjust_cfa_offset (4) - | Push parameters for _dl_profile_fixup - pea (%sp) - cfi_adjust_cfa_offset (4) - pea 8(%sp) - cfi_adjust_cfa_offset (4) - move.l 32(%sp), -(%sp) - cfi_adjust_cfa_offset (4) - move.l 32(%sp), -(%sp) - cfi_adjust_cfa_offset (4) - move.l 32(%sp), -(%sp) - cfi_adjust_cfa_offset (4) - subq.l #8, %sp - cfi_adjust_cfa_offset (8) - | Call the real address resolver. - jbsr _dl_profile_fixup - | Pop parameters - lea 28(%sp), %sp - cfi_adjust_cfa_offset (-28) - move.l (%sp), %d1 - jpl 1f - addq.l #4, %sp - cfi_adjust_cfa_offset (-4) - | Restore register %a0 and %a1. - move.l (%sp)+, %a0 - cfi_adjust_cfa_offset (-4) - move.l (%sp)+, %a1 - cfi_adjust_cfa_offset (-4) - lea 12(%sp), %sp - cfi_adjust_cfa_offset (-12) - | Call real function. -#ifdef __mcoldfire__ - move.l %d0,-(%sp) - cfi_adjust_cfa_offset (4) - rts -#else - jmp (%d0) -#endif - - /* - +24 return address - +20 PLT1 - +16 PLT2 - +12 %sp - +8 %a1 - +4 %a0 - %sp free - */ -#ifdef __mcoldfire__ - cfi_adjust_cfa_offset (20) -#else - cfi_adjust_cfa_offset (24) -#endif -1: move.l %a2, (%sp) - cfi_rel_offset (%a2, 0) - move.l %sp, %a2 - move.l %sp, %a0 - lea 28(%sp), %a1 - | Round framesize up to longword alignment - addq.l #3, %d1 - and.l #-3, %d1 - sub.l %d1, %a0 - move.l %a0, %sp - cfi_def_cfa_register (%a2) -#ifdef __mcoldfire__ - tst.l %d1 - beq 2f -1: move.l (%a1)+, (%a0)+ - subq.l #4,%d1 - bne 1b -2: -#else - lsr.l #2,%d1 - jra 2f -1: move.l (%a1)+, (%a0)+ -2: dbra %d1,1b -#endif - /* - %a2+24 return address - %a2+20 PLT1 - %a2+16 PLT2 - %a2+12 %sp - %a2+8 %a1 - %a2+4 %a0 - %a2 %a2 - %sp copied stack frame - */ - - move.l 4(%a2), %a0 - move.l 8(%a2), %a1 -#ifdef __mcoldfire__ - pea 2f(%pc) - move.l %d0,-(%sp) - rts -2: -#else - jsr (%d0) -#endif - move.l %a2, %sp - cfi_def_cfa_register (%sp) - move.l (%sp)+, %a2 - cfi_adjust_cfa_offset (4) - cfi_restore (%a2) - /* - +20 return address - +16 PLT1 - +12 PLT2 - +8 %sp - +4 %a1 - %sp %a0 - */ -#ifdef FMOVE - FMOVE %fp0, -(%sp) - cfi_adjust_cfa_offset (FPSPACE) -#endif - move.l %a0, -(%sp) - cfi_adjust_cfa_offset (4) - move.l %d1, -(%sp) - cfi_adjust_cfa_offset (4) - move.l %d0, -(%sp) - cfi_adjust_cfa_offset (4) - pea (%sp) - cfi_adjust_cfa_offset (4) - pea (16+FPSPACE)(%sp) - cfi_adjust_cfa_offset (4) - move.l (32+FPSPACE)(%sp), -(%sp) - cfi_adjust_cfa_offset (4) - move.l (32+FPSPACE)(%sp), -(%sp) - cfi_adjust_cfa_offset (4) - jbsr _dl_call_pltexit - lea 16(%sp), %sp - cfi_adjust_cfa_offset (-16) - move.l (%sp)+, %d0 - cfi_adjust_cfa_offset (-4) - move.l (%sp)+, %d1 - cfi_adjust_cfa_offset (-4) - move.l (%sp)+, %a0 - cfi_adjust_cfa_offset (-4) -#ifdef FMOVE - FMOVE (%sp)+, %fp0 - cfi_adjust_cfa_offset (-FPSPACE) -#endif - lea 20(%sp), %sp - cfi_adjust_cfa_offset (-20) - rts - cfi_endproc - .size _dl_runtime_profile, . - _dl_runtime_profile diff --git a/sysdeps/m68k/ffs.c b/sysdeps/m68k/ffs.c deleted file mode 100644 index 7cb6eca4f8..0000000000 --- a/sysdeps/m68k/ffs.c +++ /dev/null @@ -1,47 +0,0 @@ -/* ffs -- find first set bit in a word, counted from least significant end. - For mc68020, mc68030, mc68040. - This file is part of the GNU C Library. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - Contributed by Torbjorn Granlund (tege@sics.se). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define ffsl __something_else -#include - -#undef ffs - -#if defined (__GNUC__) && defined (__mc68020__) - -int -__ffs (int x) -{ - int cnt; - - asm ("bfffo %1{#0:#0},%0" : "=d" (cnt) : "dm" (x & -x)); - - return 32 - cnt; -} -weak_alias (__ffs, ffs) -libc_hidden_def (__ffs) -libc_hidden_builtin_def (ffs) -#undef ffsl -weak_alias (__ffs, ffsl) - -#else - -#include - -#endif diff --git a/sysdeps/m68k/fpu/bits/fenv.h b/sysdeps/m68k/fpu/bits/fenv.h deleted file mode 100644 index b99bb7d830..0000000000 --- a/sysdeps/m68k/fpu/bits/fenv.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - - -/* Define bits representing the exception. We use the bit positions of - the appropriate bits in the FPSR Accrued Exception Byte. */ -enum - { - FE_INEXACT = -#define FE_INEXACT (1 << 3) - FE_INEXACT, - FE_DIVBYZERO = -#define FE_DIVBYZERO (1 << 4) - FE_DIVBYZERO, - FE_UNDERFLOW = -#define FE_UNDERFLOW (1 << 5) - FE_UNDERFLOW, - FE_OVERFLOW = -#define FE_OVERFLOW (1 << 6) - FE_OVERFLOW, - FE_INVALID = -#define FE_INVALID (1 << 7) - FE_INVALID - }; - -#define FE_ALL_EXCEPT \ - (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) - -/* The m68k FPU supports all of the four defined rounding modes. We use - the bit positions in the FPCR Mode Control Byte as the values for the - appropriate macros. */ -enum - { - FE_TONEAREST = -#define FE_TONEAREST 0 - FE_TONEAREST, - FE_TOWARDZERO = -#define FE_TOWARDZERO (1 << 4) - FE_TOWARDZERO, - FE_DOWNWARD = -#define FE_DOWNWARD (2 << 4) - FE_DOWNWARD, - FE_UPWARD = -#define FE_UPWARD (3 << 4) - FE_UPWARD - }; - - -/* Type representing exception flags. */ -typedef unsigned int fexcept_t; - - -/* Type representing floating-point environment. This structure - corresponds to the layout of the block written by `fmovem'. */ -typedef struct - { - unsigned int __control_register; - unsigned int __status_register; - unsigned int __instruction_address; - } -fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1) - -#ifdef __USE_GNU -/* Floating-point environment where none of the exceptions are masked. */ -# define FE_NOMASK_ENV ((const fenv_t *) -2) -#endif - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef unsigned int femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) -1L) -#endif diff --git a/sysdeps/m68k/fpu/fclrexcpt.c b/sysdeps/m68k/fpu/fclrexcpt.c deleted file mode 100644 index 4a34af608e..0000000000 --- a/sysdeps/m68k/fpu/fclrexcpt.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__feclearexcept (int excepts) -{ - fexcept_t fpsr; - - /* Mask out unsupported bits/exceptions. */ - excepts &= FE_ALL_EXCEPT; - - /* Fetch the fpu status register. */ - __asm__ ("fmove%.l %/fpsr,%0" : "=dm" (fpsr)); - - /* Clear the relevant bits. */ - fpsr &= ~excepts; - - /* Put the new data in effect. */ - __asm__ __volatile__ ("fmove%.l %0,%/fpsr" : : "dm" (fpsr)); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feclearexcept, __old_feclearexcept) -compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1); -#endif - -libm_hidden_ver (__feclearexcept, feclearexcept) -versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2); diff --git a/sysdeps/m68k/fpu/fedisblxcpt.c b/sysdeps/m68k/fpu/fedisblxcpt.c deleted file mode 100644 index 02fce0a8be..0000000000 --- a/sysdeps/m68k/fpu/fedisblxcpt.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -fedisableexcept (int excepts) -{ - unsigned int old_exc, new_exc; - - /* Get the current control register contents. */ - __asm__ ("fmove%.l %!,%0" : "=dm" (new_exc)); - - old_exc = (new_exc >> 6) & FE_ALL_EXCEPT; - - excepts &= FE_ALL_EXCEPT; - - new_exc &= ~(excepts << 6); - __asm__ ("fmove%.l %0,%!" : : "dm" (new_exc)); - - return old_exc; -} diff --git a/sysdeps/m68k/fpu/feenablxcpt.c b/sysdeps/m68k/fpu/feenablxcpt.c deleted file mode 100644 index ebbbcd4482..0000000000 --- a/sysdeps/m68k/fpu/feenablxcpt.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -feenableexcept (int excepts) -{ - unsigned int new_exc, old_exc; - - /* Get the current control register contents. */ - __asm__ ("fmove%.l %!,%0" : "=dm" (new_exc)); - - old_exc = (new_exc >> 6) & FE_ALL_EXCEPT; - - excepts &= FE_ALL_EXCEPT; - - new_exc |= excepts << 6; - __asm__ ("fmove%.l %0,%!" : : "dm" (new_exc)); - - return old_exc; -} diff --git a/sysdeps/m68k/fpu/fegetenv.c b/sysdeps/m68k/fpu/fegetenv.c deleted file mode 100644 index e2dd485b59..0000000000 --- a/sysdeps/m68k/fpu/fegetenv.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__fegetenv (fenv_t *envp) -{ -#ifdef __mcoldfire__ - __asm__ ("fmove%.l %/fpcr,%0" : "=dm" (envp->__control_register)); - __asm__ ("fmove%.l %/fpsr,%0" : "=dm" (envp->__status_register)); - __asm__ ("fmove%.l %/fpiar,%0" : "=dm" (envp->__instruction_address)); -#else - __asm__ ("fmovem%.l %/fpcr/%/fpsr/%/fpiar,%0" : "=m" (*envp)); -#endif - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetenv, __old_fegetenv) -compat_symbol (libm, __old_fegetenv, fegetenv, GLIBC_2_1); -#endif - -libm_hidden_def (__fegetenv) -libm_hidden_ver (__fegetenv, fegetenv) -versioned_symbol (libm, __fegetenv, fegetenv, GLIBC_2_2); diff --git a/sysdeps/m68k/fpu/fegetexcept.c b/sysdeps/m68k/fpu/fegetexcept.c deleted file mode 100644 index 709b519992..0000000000 --- a/sysdeps/m68k/fpu/fegetexcept.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Get enabled floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -fegetexcept (void) -{ - unsigned int exc; - - /* Get the current control register contents. */ - __asm__ ("fmove%.l %!,%0" : "=dm" (exc)); - - return (exc >> 6) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/m68k/fpu/fegetmode.c b/sysdeps/m68k/fpu/fegetmode.c deleted file mode 100644 index c0761f43c7..0000000000 --- a/sysdeps/m68k/fpu/fegetmode.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Store current floating-point control modes. M68K version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fegetmode (femode_t *modep) -{ - _FPU_GETCW (*modep); - return 0; -} diff --git a/sysdeps/m68k/fpu/fegetround.c b/sysdeps/m68k/fpu/fegetround.c deleted file mode 100644 index 20d74900ce..0000000000 --- a/sysdeps/m68k/fpu/fegetround.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__fegetround (void) -{ - int fpcr; - - __asm__ ("fmove%.l %!,%0" : "=dm" (fpcr)); - - return fpcr & FE_UPWARD; -} -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/m68k/fpu/feholdexcpt.c b/sysdeps/m68k/fpu/feholdexcpt.c deleted file mode 100644 index 55d81f0a49..0000000000 --- a/sysdeps/m68k/fpu/feholdexcpt.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__feholdexcept (fenv_t *envp) -{ - fexcept_t fpcr, fpsr; - - /* Store the environment. */ -#ifdef __mcoldfire__ - __asm__ ("fmove%.l %/fpcr,%0" : "=dm" (envp->__control_register)); - __asm__ ("fmove%.l %/fpsr,%0" : "=dm" (envp->__status_register)); - __asm__ ("fmove%.l %/fpiar,%0" : "=dm" (envp->__instruction_address)); -#else - __asm__ ("fmovem%.l %/fpcr/%/fpsr/%/fpiar,%0" : "=m" (*envp)); -#endif - - /* Now clear all exceptions. */ - fpsr = envp->__status_register & ~FE_ALL_EXCEPT; - __asm__ __volatile__ ("fmove%.l %0,%/fpsr" : : "dm" (fpsr)); - /* And set all exceptions to non-stop. */ - fpcr = envp->__control_register & ~(FE_ALL_EXCEPT << 6); - __asm__ __volatile__ ("fmove%.l %0,%!" : : "dm" (fpcr)); - - return 0; -} -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/m68k/fpu/fesetenv.c b/sysdeps/m68k/fpu/fesetenv.c deleted file mode 100644 index 664468413a..0000000000 --- a/sysdeps/m68k/fpu/fesetenv.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__fesetenv (const fenv_t *envp) -{ - fenv_t temp; - - /* Install the environment specified by ENVP. But there are a few - values which we do not want to come from the saved environment. - Therefore, we get the current environment and replace the values - we want to use from the environment specified by the parameter. */ -#ifdef __mcoldfire__ - __asm__ ("fmove%.l %/fpcr,%0" : "=dm" (temp.__control_register)); - __asm__ ("fmove%.l %/fpsr,%0" : "=dm" (temp.__status_register)); - __asm__ ("fmove%.l %/fpiar,%0" : "=dm" (temp.__instruction_address)); -#else - __asm__ ("fmovem%.l %/fpcr/%/fpsr/%/fpiar,%0" : "=m" (*&temp)); -#endif - - temp.__status_register &= ~FE_ALL_EXCEPT; - temp.__control_register &= ~((FE_ALL_EXCEPT << 6) | FE_UPWARD); - if (envp == FE_DFL_ENV) - ; - else if (envp == FE_NOMASK_ENV) - temp.__control_register |= FE_ALL_EXCEPT << 6; - else - { - temp.__control_register |= (envp->__control_register - & ((FE_ALL_EXCEPT << 6) | FE_UPWARD)); - temp.__status_register |= envp->__status_register & FE_ALL_EXCEPT; - } - -#ifdef __mcoldfire__ - __asm__ __volatile__ ("fmove%.l %0,%/fpiar" - :: "dm" (temp.__instruction_address)); - __asm__ __volatile__ ("fmove%.l %0,%/fpcr" - :: "dm" (temp.__control_register)); - __asm__ __volatile__ ("fmove%.l %0,%/fpsr" - :: "dm" (temp.__status_register)); -#else - __asm__ __volatile__ ("fmovem%.l %0,%/fpcr/%/fpsr/%/fpiar" : : "m" (*&temp)); -#endif - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetenv, __old_fesetenv) -compat_symbol (libm, __old_fesetenv, fesetenv, GLIBC_2_1); -#endif - -libm_hidden_def (__fesetenv) -libm_hidden_ver (__fesetenv, fesetenv) -versioned_symbol (libm, __fesetenv, fesetenv, GLIBC_2_2); diff --git a/sysdeps/m68k/fpu/fesetexcept.c b/sysdeps/m68k/fpu/fesetexcept.c deleted file mode 100644 index a3731aa751..0000000000 --- a/sysdeps/m68k/fpu/fesetexcept.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Set given exception flags. M68K version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fesetexcept (int excepts) -{ - fexcept_t fpsr; - - __asm__ ("fmove%.l %/fpsr,%0" : "=dm" (fpsr)); - fpsr |= excepts & FE_ALL_EXCEPT; - __asm__ __volatile__ ("fmove%.l %0,%/fpsr" : : "dm" (fpsr)); - - return 0; -} diff --git a/sysdeps/m68k/fpu/fesetmode.c b/sysdeps/m68k/fpu/fesetmode.c deleted file mode 100644 index 3e235aa1b3..0000000000 --- a/sysdeps/m68k/fpu/fesetmode.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Install given floating-point control modes. M68K version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fesetmode (const femode_t *modep) -{ - femode_t mode; - if (modep == FE_DFL_MODE) - mode = _FPU_DEFAULT; - else - mode = *modep; - _FPU_SETCW (mode); - return 0; -} diff --git a/sysdeps/m68k/fpu/fesetround.c b/sysdeps/m68k/fpu/fesetround.c deleted file mode 100644 index 5f2f747782..0000000000 --- a/sysdeps/m68k/fpu/fesetround.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__fesetround (int round) -{ - fexcept_t fpcr; - - if (round & ~FE_UPWARD) - /* ROUND is no valid rounding mode. */ - return 1; - - __asm__ ("fmove%.l %!,%0" : "=dm" (fpcr)); - fpcr &= ~FE_UPWARD; - fpcr |= round; - __asm__ __volatile__ ("fmove%.l %0,%!" : : "dm" (fpcr)); - - return 0; -} -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/m68k/fpu/feupdateenv.c b/sysdeps/m68k/fpu/feupdateenv.c deleted file mode 100644 index e9ece48c6c..0000000000 --- a/sysdeps/m68k/fpu/feupdateenv.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__feupdateenv (const fenv_t *envp) -{ - fexcept_t fpsr; - - /* Save current exceptions. */ - __asm__ ("fmove%.l %/fpsr,%0" : "=dm" (fpsr)); - fpsr &= FE_ALL_EXCEPT; - - /* Install new environment. */ - __fesetenv (envp); - - /* Raise the saved exception. Incidently for us the implementation - defined format of the values in objects of type fexcept_t is the - same as the ones specified using the FE_* constants. */ - __feraiseexcept ((int) fpsr); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feupdateenv, __old_feupdateenv) -compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1); -#endif - -libm_hidden_def (__feupdateenv) -libm_hidden_ver (__feupdateenv, feupdateenv) -versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2); diff --git a/sysdeps/m68k/fpu/fgetexcptflg.c b/sysdeps/m68k/fpu/fgetexcptflg.c deleted file mode 100644 index 9f5d78f916..0000000000 --- a/sysdeps/m68k/fpu/fgetexcptflg.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -__fegetexceptflag (fexcept_t *flagp, int excepts) -{ - fexcept_t fpsr; - - /* Get the current exceptions. */ - __asm__ ("fmove%.l %/fpsr,%0" : "=dm" (fpsr)); - - *flagp = fpsr & excepts & FE_ALL_EXCEPT; - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetexceptflag, __old_fegetexceptflag) -compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2); diff --git a/sysdeps/m68k/fpu/fsetexcptflg.c b/sysdeps/m68k/fpu/fsetexcptflg.c deleted file mode 100644 index a651b7f703..0000000000 --- a/sysdeps/m68k/fpu/fsetexcptflg.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -__fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - fexcept_t fpsr; - - /* Get the current status register. */ - __asm__ ("fmove%.l %/fpsr,%0" : "=dm" (fpsr)); - - /* Install the new exception bits in the Accrued Exception Byte. */ - fpsr &= ~(excepts & FE_ALL_EXCEPT); - fpsr |= *flagp & excepts & FE_ALL_EXCEPT; - - /* Store the new status register. */ - __asm__ __volatile__ ("fmove%.l %0,%/fpsr" : : "dm" (fpsr)); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetexceptflag, __old_fesetexceptflag) -compat_symbol (libm, __old_fesetexceptflag, fesetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fesetexceptflag, fesetexceptflag, GLIBC_2_2); diff --git a/sysdeps/m68k/fpu/ftestexcept.c b/sysdeps/m68k/fpu/ftestexcept.c deleted file mode 100644 index 0da4b74937..0000000000 --- a/sysdeps/m68k/fpu/ftestexcept.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -int -fetestexcept (int excepts) -{ - fexcept_t fpsr; - - /* Get current exceptions. */ - __asm__ ("fmove%.l %/fpsr,%0" : "=dm" (fpsr)); - - return fpsr & excepts & FE_ALL_EXCEPT; -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/m68k/fpu_control.h b/sysdeps/m68k/fpu_control.h deleted file mode 100644 index 0cef963670..0000000000 --- a/sysdeps/m68k/fpu_control.h +++ /dev/null @@ -1,118 +0,0 @@ -/* 68k FPU control word definitions. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FPU_CONTROL_H -#define _FPU_CONTROL_H - -/* - * Motorola floating point control register bits. - * - * 31-16 -> reserved (read as 0, ignored on write) - * 15 -> enable trap for BSUN exception - * 14 -> enable trap for SNAN exception - * 13 -> enable trap for OPERR exception - * 12 -> enable trap for OVFL exception - * 11 -> enable trap for UNFL exception - * 10 -> enable trap for DZ exception - * 9 -> enable trap for INEX2 exception (INEX on Coldfire) - * 8 -> enable trap for INEX1 exception (IDE on Coldfire) - * 7-6 -> Precision Control (only bit 6 is used on Coldfire) - * 5-4 -> Rounding Control - * 3-0 -> zero (read as 0, write as 0) - * - * - * Precision Control: - * 00 - round to extended precision - * 01 - round to single precision - * 10 - round to double precision - * 11 - undefined - * - * Rounding Control: - * 00 - rounding to nearest (RN) - * 01 - rounding toward zero (RZ) - * 10 - rounding (down)toward minus infinity (RM) - * 11 - rounding (up) toward plus infinity (RP) - * - * The hardware default is 0x0000. I choose 0x5400. - */ - -#include - -#if defined (__mcoldfire__) && !defined (__mcffpu__) - -# define _FPU_RESERVED 0xffffffff -# define _FPU_DEFAULT 0x00000000 -# define _FPU_GETCW(cw) ((cw) = 0) -# define _FPU_SETCW(cw) ((void) (cw)) - -#else - -/* masking of interrupts */ -# define _FPU_MASK_BSUN 0x8000 -# define _FPU_MASK_SNAN 0x4000 -# define _FPU_MASK_OPERR 0x2000 -# define _FPU_MASK_OVFL 0x1000 -# define _FPU_MASK_UNFL 0x0800 -# define _FPU_MASK_DZ 0x0400 -# define _FPU_MASK_INEX1 0x0200 -# define _FPU_MASK_INEX2 0x0100 - -/* precision control */ -# ifdef __mcoldfire__ -# define _FPU_DOUBLE 0x00 -# else -# define _FPU_EXTENDED 0x00 /* RECOMMENDED */ -# define _FPU_DOUBLE 0x80 -# endif -# define _FPU_SINGLE 0x40 /* DO NOT USE */ - -/* rounding control */ -# define _FPU_RC_NEAREST 0x00 /* RECOMMENDED */ -# define _FPU_RC_ZERO 0x10 -# define _FPU_RC_DOWN 0x20 -# define _FPU_RC_UP 0x30 - -# ifdef __mcoldfire__ -# define _FPU_RESERVED 0xFFFF800F -# else -# define _FPU_RESERVED 0xFFFF000F /* Reserved bits in fpucr */ -# endif - - -/* Now two recommended fpucr */ - -/* The fdlibm code requires no interrupts for exceptions. Don't - change the rounding mode, it would break long double I/O! */ -# define _FPU_DEFAULT 0x00000000 - -/* IEEE: same as above, but exceptions. We must make it non-zero so - that __setfpucw works. This bit will be ignored. */ -# define _FPU_IEEE 0x00000001 - -/* Macros for accessing the hardware control word. */ -# define _FPU_GETCW(cw) __asm__ ("fmove%.l %!, %0" : "=dm" (cw)) -# define _FPU_SETCW(cw) __asm__ volatile ("fmove%.l %0, %!" : : "dm" (cw)) -#endif - -/* Type of the control word. */ -typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__))); - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#endif /* _M68K_FPU_CONTROL_H */ diff --git a/sysdeps/m68k/gccframe.h b/sysdeps/m68k/gccframe.h deleted file mode 100644 index 476d3e7b24..0000000000 --- a/sysdeps/m68k/gccframe.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Definition of object in frame unwind info. m68k version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define FIRST_PSEUDO_REGISTER 24 - -#include diff --git a/sysdeps/m68k/jmpbuf-unwind.h b/sysdeps/m68k/jmpbuf-unwind.h deleted file mode 100644 index 32e77f11d2..0000000000 --- a/sysdeps/m68k/jmpbuf-unwind.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Examine __jmp_buf for unwinding frames. m68k version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((void *) (address) < (void *) demangle ((uintptr_t) (jmpbuf)->__sp)) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf regs) -{ - uintptr_t sp = (uintptr_t) regs[0].__sp; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return sp; -} - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/m68k/ldsodefs.h b/sysdeps/m68k/ldsodefs.h deleted file mode 100644 index 7c4d5a2a11..0000000000 --- a/sysdeps/m68k/ldsodefs.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef __LDSODEFS_H - -#include - -struct La_m68k_regs; -struct La_m68k_retval; - -#define ARCH_PLTENTER_MEMBERS \ - Elf32_Addr (*m68k_gnu_pltenter) (Elf32_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - struct La_m68k_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep); - -#define ARCH_PLTEXIT_MEMBERS \ - unsigned int (*m68k_gnu_pltexit) (Elf32_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - const struct La_m68k_regs *, \ - struct La_m68k_retval *, \ - const char *); - -#include_next - -#endif diff --git a/sysdeps/m68k/libc-tls.c b/sysdeps/m68k/libc-tls.c deleted file mode 100644 index 4495f47feb..0000000000 --- a/sysdeps/m68k/libc-tls.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. m68k version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maxim Kuvyrkov , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* On M68K, linker optimizations are not required, so __tls_get_addr - can be called even in statically linked binaries. In this case module - must be always 1 and PT_TLS segment exist in the binary, otherwise it - would not link. */ - -void * -__tls_get_addr (tls_index *ti) -{ - dtv_t *dtv = THREAD_DTV (); - return (char *) dtv[1].pointer.val + GET_ADDR_OFFSET; -} diff --git a/sysdeps/m68k/m680x0/Implies b/sysdeps/m68k/m680x0/Implies deleted file mode 100644 index abf356d9e8..0000000000 --- a/sysdeps/m68k/m680x0/Implies +++ /dev/null @@ -1 +0,0 @@ -ieee754/ldbl-96 diff --git a/sysdeps/m68k/m680x0/Makefile b/sysdeps/m68k/m680x0/Makefile deleted file mode 100644 index 582fa6f900..0000000000 --- a/sysdeps/m68k/m680x0/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -# The 68k `long double' is a distinct type we support. -long-double-fcts = yes diff --git a/sysdeps/m68k/m680x0/add_n.S b/sysdeps/m68k/m680x0/add_n.S deleted file mode 100644 index 522ffcacf4..0000000000 --- a/sysdeps/m68k/m680x0/add_n.S +++ /dev/null @@ -1,82 +0,0 @@ -/* mc68020 __mpn_add_n -- Add two limb vectors of the same length > 0 and store - sum in a third limb vector. - -Copyright (C) 1992-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see . */ - -/* - INPUT PARAMETERS - res_ptr (sp + 4) - s1_ptr (sp + 8) - s2_ptr (sp + 16) - size (sp + 12) -*/ - -#include "sysdep.h" -#include "asm-syntax.h" - - TEXT -ENTRY(__mpn_add_n) -/* Save used registers on the stack. */ - movel R(d2),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4) - movel R(a2),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4) - cfi_rel_offset (R(d2), 4) - cfi_rel_offset (R(a2), 0) - -/* Copy the arguments to registers. Better use movem? */ - movel MEM_DISP(sp,12),R(a2) - movel MEM_DISP(sp,16),R(a0) - movel MEM_DISP(sp,20),R(a1) - movel MEM_DISP(sp,24),R(d2) - - eorw #1,R(d2) - lsrl #1,R(d2) - bcc L(L1) - subql #1,R(d2) /* clears cy as side effect */ - -L(Loop:) - movel MEM_POSTINC(a0),R(d0) - movel MEM_POSTINC(a1),R(d1) - addxl R(d1),R(d0) - movel R(d0),MEM_POSTINC(a2) -L(L1:) movel MEM_POSTINC(a0),R(d0) - movel MEM_POSTINC(a1),R(d1) - addxl R(d1),R(d0) - movel R(d0),MEM_POSTINC(a2) - - dbf R(d2),L(Loop) /* loop until 16 lsb of %4 == -1 */ - subxl R(d0),R(d0) /* d0 <= -cy; save cy as 0 or -1 in d0 */ - subl #0x10000,R(d2) - bcs L(L2) - addl R(d0),R(d0) /* restore cy */ - bra L(Loop) - -L(L2:) - negl R(d0) - -/* Restore used registers from stack frame. */ - movel MEM_POSTINC(sp),R(a2) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(a2)) - movel MEM_POSTINC(sp),R(d2) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d2)) - - rts -END(__mpn_add_n) diff --git a/sysdeps/m68k/m680x0/bits/flt-eval-method.h b/sysdeps/m68k/m680x0/bits/flt-eval-method.h deleted file mode 100644 index 3d28adcc96..0000000000 --- a/sysdeps/m68k/m680x0/bits/flt-eval-method.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Define __GLIBC_FLT_EVAL_METHOD. M68K version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -/* The m68k FPUs evaluate all values in the 96-bit floating-point - format which is also available for the user as 'long double'. */ -#define __GLIBC_FLT_EVAL_METHOD 2 diff --git a/sysdeps/m68k/m680x0/bits/fp-logb.h b/sysdeps/m68k/m680x0/bits/fp-logb.h deleted file mode 100644 index ebde56d2e2..0000000000 --- a/sysdeps/m68k/m680x0/bits/fp-logb.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Define __FP_LOGB0_IS_MIN and __FP_LOGBNAN_IS_MIN. M68K version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#define __FP_LOGB0_IS_MIN 1 -#define __FP_LOGBNAN_IS_MIN 0 diff --git a/sysdeps/m68k/m680x0/bits/huge_vall.h b/sysdeps/m68k/m680x0/bits/huge_vall.h deleted file mode 100644 index 14a4483582..0000000000 --- a/sysdeps/m68k/m680x0/bits/huge_vall.h +++ /dev/null @@ -1,41 +0,0 @@ -/* `HUGE_VALL' constant for m68k (where it is infinity). - Used by and functions for overflow. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#if __GNUC_PREREQ(3,3) -# define HUGE_VALL (__builtin_huge_vall ()) -#elif __GNUC_PREREQ(2,96) -# define HUGE_VALL (__extension__ 0x1.0p32767L) -#elif defined __GNUC__ - -# define HUGE_VALL \ - (__extension__ \ - ((union { unsigned long __l[3]; long double __ld; }) \ - { __l: { 0x7fff0000UL, 0x80000000UL, 0UL } }).__ld) - -#else /* not GCC */ - -static union { unsigned char __c[12]; long double __ld; } __huge_vall = - { { 0x7f, 0xff, 0, 0, 0x80, 0, 0, 0, 0, 0, 0, 0 } }; -# define HUGE_VALL (__huge_vall.__ld) - -#endif /* GCC 2.95. */ diff --git a/sysdeps/m68k/m680x0/fpu/bits/mathinline.h b/sysdeps/m68k/m680x0/fpu/bits/mathinline.h deleted file mode 100644 index 8e6bdc4e27..0000000000 --- a/sysdeps/m68k/m680x0/fpu/bits/mathinline.h +++ /dev/null @@ -1,444 +0,0 @@ -/* Definitions of inline math functions implemented by the m68881/2. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#ifndef __extern_inline -# define __MATH_INLINE __inline -#else -# define __MATH_INLINE __extern_inline -#endif - -#ifdef __GNUC__ - -#ifdef __USE_ISOC99 -/* GCC 3.1 and up have builtins that actually can be used. */ -# if !__GNUC_PREREQ (3,1) -/* ISO C99 defines some macros to perform unordered comparisons. The - m68k FPU supports this with special opcodes and we should use them. - These must not be inline functions since we have to be able to handle - all floating-point types. */ -# undef isgreater -# undef isgreaterequal -# undef isless -# undef islessequal -# undef islessgreater -# undef isunordered -# define isgreater(x, y) \ - __extension__ \ - ({ char __result; \ - __asm__ ("fcmp%.x %2,%1; fsogt %0" \ - : "=dm" (__result) : "f" (x), "f" (y)); \ - __result != 0; }) - -# define isgreaterequal(x, y) \ - __extension__ \ - ({ char __result; \ - __asm__ ("fcmp%.x %2,%1; fsoge %0" \ - : "=dm" (__result) : "f" (x), "f" (y)); \ - __result != 0; }) - -# define isless(x, y) \ - __extension__ \ - ({ char __result; \ - __asm__ ("fcmp%.x %2,%1; fsolt %0" \ - : "=dm" (__result) : "f" (x), "f" (y)); \ - __result != 0; }) - -# define islessequal(x, y) \ - __extension__ \ - ({ char __result; \ - __asm__ ("fcmp%.x %2,%1; fsole %0" \ - : "=dm" (__result) : "f" (x), "f" (y)); \ - __result != 0; }) - -# define islessgreater(x, y) \ - __extension__ \ - ({ char __result; \ - __asm__ ("fcmp%.x %2,%1; fsogl %0" \ - : "=dm" (__result) : "f" (x), "f" (y)); \ - __result != 0; }) - -# define isunordered(x, y) \ - __extension__ \ - ({ char __result; \ - __asm__ ("fcmp%.x %2,%1; fsun %0" \ - : "=dm" (__result) : "f" (x), "f" (y)); \ - __result != 0; }) -# endif /* GCC 3.1 */ - -/* Test for negative number. Used in the signbit() macro. */ -__MATH_INLINE int -__NTH (__signbitf (float __x)) -{ - __extension__ union { float __f; int __i; } __u = { __f: __x }; - return __u.__i < 0; -} -__MATH_INLINE int -__NTH (__signbit (double __x)) -{ - __extension__ union { double __d; int __i[2]; } __u = { __d: __x }; - return __u.__i[0] < 0; -} -__MATH_INLINE int -__NTH (__signbitl (long double __x)) -{ - __extension__ union { long double __d; int __i[3]; } __u = { __d: __x }; - return __u.__i[0] < 0; -} -#endif - - -#if (!defined __NO_MATH_INLINES && defined __OPTIMIZE__) \ - || defined __LIBC_INTERNAL_MATH_INLINES - -#ifdef __LIBC_INTERNAL_MATH_INLINES -/* This is used when defining the functions themselves. Define them with - __ names, and with `static inline' instead of `extern inline' so the - bodies will always be used, never an external function call. - Note: GCC 6 objects to __attribute__ ((__leaf__)) on static functions. */ -# define __m81_u(x) __CONCAT(__,x) -# define __m81_inline static __inline -# define __m81_nth(fn) __NTHNL (fn) -#else -# define __m81_u(x) x -# define __m81_inline __MATH_INLINE -# define __m81_nth(fn) __NTH (fn) -# define __M81_MATH_INLINES 1 -#endif - -/* Define a const math function. */ -#define __m81_defun(rettype, func, args) \ - __m81_inline rettype __attribute__((__const__)) \ - __m81_nth (__m81_u(func) args) - -/* Define the three variants of a math function that has a direct - implementation in the m68k fpu. FUNC is the name for C (which will be - suffixed with f and l for the float and long double version, resp). OP - is the name of the fpu operation (without leading f). */ - -#ifdef __USE_ISOC99 -# define __inline_mathop(func, op) \ - __inline_mathop1(double, func, op) \ - __inline_mathop1(float, __CONCAT(func,f), op) \ - __inline_mathop1(long double, __CONCAT(func,l), op) -#else -# define __inline_mathop(func, op) \ - __inline_mathop1(double, func, op) -#endif - -#define __inline_mathop1(float_type,func, op) \ - __m81_defun (float_type, func, (float_type __mathop_x)) \ - { \ - float_type __result; \ - __asm __volatile__ ("f" __STRING(op) "%.x %1, %0" \ - : "=f" (__result) : "f" (__mathop_x)); \ - return __result; \ - } - -__inline_mathop(__atan, atan) -__inline_mathop(__cos, cos) -__inline_mathop(__sin, sin) -__inline_mathop(__tan, tan) -__inline_mathop(__tanh, tanh) -__inline_mathop(__fabs, abs) - -#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 -__inline_mathop(__rint, int) -__inline_mathop(__expm1, etoxm1) -__inline_mathop(__log1p, lognp1) -#endif - -#ifdef __USE_MISC -__inline_mathop(__significand, getman) -#endif - -#ifdef __USE_ISOC99 -__inline_mathop(__trunc, intrz) -#endif - -#if !defined __NO_MATH_INLINES && defined __OPTIMIZE__ - -__inline_mathop(atan, atan) -__inline_mathop(tanh, tanh) - -# if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 -__inline_mathop(rint, int) -__inline_mathop(log1p, lognp1) -# endif - -# ifdef __USE_MISC -__inline_mathop(significand, getman) -# endif - -# ifdef __USE_ISOC99 -__inline_mathop(trunc, intrz) -# endif - -#endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */ - -/* This macro contains the definition for the rest of the inline - functions, using FLOAT_TYPE as the domain type and S as the suffix - for the function names. */ - -#define __inline_functions(float_type, s) \ -__m81_defun (float_type, __CONCAT(__floor,s), (float_type __x)) \ -{ \ - float_type __result; \ - unsigned long int __ctrl_reg; \ - __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg)); \ - /* Set rounding towards negative infinity. */ \ - __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs. */ \ - : "dmi" ((__ctrl_reg & ~0x10) | 0x20)); \ - /* Convert X to an integer, using -Inf rounding. */ \ - __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x)); \ - /* Restore the previous rounding mode. */ \ - __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs. */ \ - : "dmi" (__ctrl_reg)); \ - return __result; \ -} \ - \ -__m81_defun (float_type, __CONCAT(__ceil,s), (float_type __x)) \ -{ \ - float_type __result; \ - unsigned long int __ctrl_reg; \ - __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg)); \ - /* Set rounding towards positive infinity. */ \ - __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs. */ \ - : "dmi" (__ctrl_reg | 0x30)); \ - /* Convert X to an integer, using +Inf rounding. */ \ - __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x)); \ - /* Restore the previous rounding mode. */ \ - __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs. */ \ - : "dmi" (__ctrl_reg)); \ - return __result; \ -} - -__inline_functions(double,) -#ifdef __USE_ISOC99 -__inline_functions(float,f) -__inline_functions(long double,l) -#endif -#undef __inline_functions - -#ifdef __USE_MISC - -# define __inline_functions(float_type, s) \ -__m81_defun (int, __CONCAT(__isinf,s), (float_type __value)) \ -{ \ - /* There is no branch-condition for infinity, \ - so we must extract and examine the condition codes manually. */ \ - unsigned long int __fpsr; \ - __asm ("ftst%.x %1\n" \ - "fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value)); \ - return (__fpsr & (2 << 24)) ? (__fpsr & (8 << 24) ? -1 : 1) : 0; \ -} \ - \ -__m81_defun (int, __CONCAT(__finite,s), (float_type __value)) \ -{ \ - /* There is no branch-condition for infinity, so we must extract and \ - examine the condition codes manually. */ \ - unsigned long int __fpsr; \ - __asm ("ftst%.x %1\n" \ - "fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value)); \ - return (__fpsr & (3 << 24)) == 0; \ -} \ - \ -__m81_defun (float_type, __CONCAT(__scalbn,s), \ - (float_type __x, int __n)) \ -{ \ - float_type __result; \ - __asm __volatile__ ("fscale%.l %1, %0" : "=f" (__result) \ - : "dmi" (__n), "0" (__x)); \ - return __result; \ -} - -__inline_functions(double,) -__inline_functions(float,f) -__inline_functions(long double,l) -# undef __inline_functions - -#endif /* Use misc. */ - -#if defined __USE_MISC || defined __USE_XOPEN - -# define __inline_functions(float_type, s) \ -__m81_defun (int, __CONCAT(__isnan,s), (float_type __value)) \ -{ \ - char __result; \ - __asm ("ftst%.x %1\n" \ - "fsun %0" : "=dm" (__result) : "f" (__value)); \ - return __result; \ -} - -__inline_functions(double,) -# ifdef __USE_MISC -__inline_functions(float,f) -__inline_functions(long double,l) -# endif -# undef __inline_functions - -#endif - -#ifdef __USE_ISOC99 - -# define __inline_functions(float_type, s) \ -__m81_defun (float_type, __CONCAT(__scalbln,s), \ - (float_type __x, long int __n)) \ -{ \ - return __CONCAT(__scalbn,s) (__x, __n); \ -} \ - \ -__m81_defun (float_type, __CONCAT(__nearbyint,s), (float_type __x)) \ -{ \ - float_type __result; \ - unsigned long int __ctrl_reg; \ - __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg)); \ - /* Temporarily disable the inexact exception. */ \ - __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs. */ \ - : "dmi" (__ctrl_reg & ~0x200)); \ - __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x)); \ - __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs. */ \ - : "dmi" (__ctrl_reg)); \ - return __result; \ -} \ - \ -__m81_defun (long int, __CONCAT(__lrint,s), (float_type __x)) \ -{ \ - long int __result; \ - __asm __volatile__ ("fmove%.l %1, %0" : "=dm" (__result) : "f" (__x)); \ - return __result; \ -} - -__inline_functions (double,) -__inline_functions (float,f) -__inline_functions (long double,l) -# undef __inline_functions - -#endif /* Use ISO C9x */ - -#ifdef __USE_GNU - -# define __inline_functions(float_type, s) \ -__m81_inline void \ -__m81_nth (__m81_u(__CONCAT(__sincos,s)) \ - (float_type __x, float_type *__sinx, float_type *__cosx)) \ -{ \ - __asm __volatile__ ("fsincos%.x %2,%1:%0" \ - : "=f" (*__sinx), "=f" (*__cosx) : "f" (__x)); \ -} - -__inline_functions (double,) -__inline_functions (float,f) -__inline_functions (long double,l) -# undef __inline_functions - -#endif - -#if !defined __NO_MATH_INLINES && defined __OPTIMIZE__ - -/* Define inline versions of the user visible functions. */ - -# define __inline_forward_c(rettype, name, args1, args2) \ -__MATH_INLINE rettype __attribute__((__const__)) \ -__NTH (name args1) \ -{ \ - return __CONCAT(__,name) args2; \ -} - -# define __inline_forward(rettype, name, args1, args2) \ -__MATH_INLINE rettype __NTH (name args1) \ -{ \ - return __CONCAT(__,name) args2; \ -} - -__inline_forward_c(double,floor, (double __x), (__x)) -__inline_forward_c(double,ceil, (double __x), (__x)) -# ifdef __USE_MISC -# ifndef __USE_ISOC99 /* Conflict with macro of same name. */ -__inline_forward_c(int,isinf, (double __value), (__value)) -# endif -__inline_forward_c(int,finite, (double __value), (__value)) -__inline_forward_c(double,scalbn, (double __x, int __n), (__x, __n)) -# endif -# if defined __USE_MISC || defined __USE_XOPEN -# ifndef __USE_ISOC99 /* Conflict with macro of same name. */ -__inline_forward_c(int,isnan, (double __value), (__value)) -# endif -# endif -# ifdef __USE_ISOC99 -__inline_forward_c(double,scalbln, (double __x, long int __n), (__x, __n)) -__inline_forward_c(double,nearbyint, (double __value), (__value)) -__inline_forward_c(long int,lrint, (double __value), (__value)) -# endif -# ifdef __USE_GNU -__inline_forward(void,sincos, (double __x, double *__sinx, double *__cosx), - (__x, __sinx, __cosx)) -# endif - -# ifdef __USE_ISOC99 - -__inline_forward_c(float,floorf, (float __x), (__x)) -__inline_forward_c(float,ceilf, (float __x), (__x)) -# ifdef __USE_MISC -__inline_forward_c(int,isinff, (float __value), (__value)) -__inline_forward_c(int,finitef, (float __value), (__value)) -__inline_forward_c(float,scalbnf, (float __x, int __n), (__x, __n)) -__inline_forward_c(int,isnanf, (float __value), (__value)) -# endif -# ifdef __USE_ISOC99 -__inline_forward_c(float,scalblnf, (float __x, long int __n), (__x, __n)) -__inline_forward_c(float,nearbyintf, (float __value), (__value)) -__inline_forward_c(long int,lrintf, (float __value), (__value)) -# endif -# ifdef __USE_GNU -__inline_forward(void,sincosf, (float __x, float *__sinx, float *__cosx), - (__x, __sinx, __cosx)) -# endif - -__inline_forward_c(long double,floorl, (long double __x), (__x)) -__inline_forward_c(long double,ceill, (long double __x), (__x)) -# ifdef __USE_MISC -__inline_forward_c(int,isinfl, (long double __value), (__value)) -__inline_forward_c(int,finitel, (long double __value), (__value)) -__inline_forward_c(long double,scalbnl, (long double __x, int __n), (__x, __n)) -__inline_forward_c(int,isnanl, (long double __value), (__value)) -# endif -# ifdef __USE_ISOC99 -__inline_forward_c(long double,scalblnl, (long double __x, long int __n), - (__x, __n)) -__inline_forward_c(long double,nearbyintl, (long double __value), (__value)) -__inline_forward_c(long int,lrintl, (long double __value), (__value)) -# endif -# ifdef __USE_GNU -__inline_forward(void,sincosl, - (long double __x, long double *__sinx, long double *__cosx), - (__x, __sinx, __cosx)) -# endif - -#endif /* Use misc or ISO C99 */ - -#undef __inline_forward -#undef __inline_forward_c - -#endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */ - -#endif -#endif /* GCC. */ diff --git a/sysdeps/m68k/m680x0/fpu/branred.c b/sysdeps/m68k/m680x0/fpu/branred.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/branred.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/doasin.c b/sysdeps/m68k/m680x0/fpu/doasin.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/doasin.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/dosincos.c b/sysdeps/m68k/m680x0/fpu/dosincos.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/dosincos.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/e_acos.c b/sysdeps/m68k/m680x0/fpu/e_acos.c deleted file mode 100644 index 26eaa67242..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_acos.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "mathimpl.h" - -#ifndef FUNC -# define FUNC __ieee754_acos -# define FUNC_FINITE __acos_finite -#endif -#ifndef float_type -# define float_type double -#endif - -float_type -FUNC (float_type x) -{ - return __m81_u(FUNC)(x); -} -#ifdef FUNC_FINITE -strong_alias (FUNC, FUNC_FINITE) -#endif diff --git a/sysdeps/m68k/m680x0/fpu/e_acosf.c b/sysdeps/m68k/m680x0/fpu/e_acosf.c deleted file mode 100644 index 300fff601e..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_acosf.c +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef FUNC -# define FUNC __ieee754_acosf -# define FUNC_FINITE __acosf_finite -#endif -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_acosl.c b/sysdeps/m68k/m680x0/fpu/e_acosl.c deleted file mode 100644 index 35767f4e23..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_acosl.c +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef FUNC -# define FUNC __ieee754_acosl -# define FUNC_FINITE __acosl_finite -#endif -#define float_type long double -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_asin.c b/sysdeps/m68k/m680x0/fpu/e_asin.c deleted file mode 100644 index 271a1f23d2..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_asin.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_asin -#define FUNC_FINITE __asin_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_asinf.c b/sysdeps/m68k/m680x0/fpu/e_asinf.c deleted file mode 100644 index ece691c6fb..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_asinf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_asinf -#define FUNC_FINITE __asinf_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_asinl.c b/sysdeps/m68k/m680x0/fpu/e_asinl.c deleted file mode 100644 index 0c136f30eb..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_asinl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_asinl -#define FUNC_FINITE __asinl_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_atan2.c b/sysdeps/m68k/m680x0/fpu/e_atan2.c deleted file mode 100644 index dd7392f780..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_atan2.c +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "mathimpl.h" - -#ifndef SUFF -#define SUFF -#endif -#ifndef float_type -#define float_type double -#endif - -#define CONCATX(a,b) __CONCAT(a,b) -#define s(name) CONCATX(name,SUFF) -#define m81(func) __m81_u(s(func)) - -float_type -s(__ieee754_atan2) (float_type y, float_type x) -{ - float_type pi, pi_2, z; - unsigned long y_cond, x_cond; - - __asm ("fmovecr%.x %#0, %0" : "=f" (pi)); - __asm ("fscale%.w %#-1, %0" : "=f" (pi_2) : "0" (pi)); - y_cond = __m81_test (y); - x_cond = __m81_test (x); - - if ((x_cond | y_cond) & __M81_COND_NAN) - z = x + y; - else if (y_cond & __M81_COND_ZERO) - { - if (x_cond & __M81_COND_NEG) - z = y_cond & __M81_COND_NEG ? -pi : pi; - else - z = y; - } - else if (x_cond & __M81_COND_INF) - { - if (y_cond & __M81_COND_INF) - { - float_type pi_4; - __asm ("fscale%.w %#-2, %0" : "=f" (pi_4) : "0" (pi)); - z = x_cond & __M81_COND_NEG ? 3 * pi_4 : pi_4; - } - else - z = x_cond & __M81_COND_NEG ? pi : 0; - if (y_cond & __M81_COND_NEG) - z = -z; - } - else if (y_cond & __M81_COND_INF) - z = y_cond & __M81_COND_NEG ? -pi_2 : pi_2; - else if (x_cond & __M81_COND_NEG) - { - if (y_cond & __M81_COND_NEG) - { - if (-x > -y) - z = -pi + m81(__atan) (y / x); - else - z = -pi_2 - m81(__atan) (x / y); - } - else - { - if (-x > y) - z = pi + m81(__atan) (y / x); - else - z = pi_2 - m81(__atan) (x / y); - } - } - else - { - if (y_cond & __M81_COND_NEG) - { - if (x > -y) - z = m81(__atan) (y / x); - else - z = -pi_2 - m81(__atan) (x / y); - } - else - { - if (x > y) - z = m81(__atan) (y / x); - else - z = pi_2 - m81(__atan) (x / y); - } - } - return z; -} -strong_alias (s(__ieee754_atan2), CONCATX (s (__atan2), _finite)) diff --git a/sysdeps/m68k/m680x0/fpu/e_atan2f.c b/sysdeps/m68k/m680x0/fpu/e_atan2f.c deleted file mode 100644 index a0c750a759..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_atan2f.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SUFF f -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_atan2l.c b/sysdeps/m68k/m680x0/fpu/e_atan2l.c deleted file mode 100644 index 426ca94baa..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_atan2l.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SUFF l -#define float_type long double -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_atanh.c b/sysdeps/m68k/m680x0/fpu/e_atanh.c deleted file mode 100644 index f5f7e7b520..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_atanh.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_atanh -#define FUNC_FINITE __atanh_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_atanhf.c b/sysdeps/m68k/m680x0/fpu/e_atanhf.c deleted file mode 100644 index cb464cbb7d..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_atanhf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_atanhf -#define FUNC_FINITE __atanhf_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_atanhl.c b/sysdeps/m68k/m680x0/fpu/e_atanhl.c deleted file mode 100644 index 8f276f5fad..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_atanhl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_atanhl -#define FUNC_FINITE __atanhl_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_cosh.c b/sysdeps/m68k/m680x0/fpu/e_cosh.c deleted file mode 100644 index aaba11be3a..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_cosh.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_cosh -#define FUNC_FINITE __cosh_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_coshf.c b/sysdeps/m68k/m680x0/fpu/e_coshf.c deleted file mode 100644 index 0884741c5c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_coshf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_coshf -#define FUNC_FINITE __coshf_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_coshl.c b/sysdeps/m68k/m680x0/fpu/e_coshl.c deleted file mode 100644 index 7fc9b7b91c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_coshl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_coshl -#define FUNC_FINITE __coshl_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_exp.c b/sysdeps/m68k/m680x0/fpu/e_exp.c deleted file mode 100644 index 9f228034a1..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_exp.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_exp -#define FUNC_FINITE __exp_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_exp10.c b/sysdeps/m68k/m680x0/fpu/e_exp10.c deleted file mode 100644 index e66a80599c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_exp10.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_exp10 -#define FUNC_FINITE __exp10_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_exp10f.c b/sysdeps/m68k/m680x0/fpu/e_exp10f.c deleted file mode 100644 index 7a3bdd4186..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_exp10f.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_exp10f -#define FUNC_FINITE __exp10f_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_exp10l.c b/sysdeps/m68k/m680x0/fpu/e_exp10l.c deleted file mode 100644 index e2a6255a76..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_exp10l.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_exp10l -#define FUNC_FINITE __exp10l_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_exp2.c b/sysdeps/m68k/m680x0/fpu/e_exp2.c deleted file mode 100644 index 35e29ae653..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_exp2.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_exp2 -#define FUNC_FINITE __exp2_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_exp2f.c b/sysdeps/m68k/m680x0/fpu/e_exp2f.c deleted file mode 100644 index e57ddb5365..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_exp2f.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_exp2f -#define FUNC_FINITE __exp2f_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_exp2l.c b/sysdeps/m68k/m680x0/fpu/e_exp2l.c deleted file mode 100644 index c5854ae427..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_exp2l.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_exp2l -#define FUNC_FINITE __exp2l_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_expf.c b/sysdeps/m68k/m680x0/fpu/e_expf.c deleted file mode 100644 index af1e019504..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_expf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_expf -#define FUNC_FINITE __expf_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_expl.c b/sysdeps/m68k/m680x0/fpu/e_expl.c deleted file mode 100644 index 543eb0edf5..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_expl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_expl -#define FUNC_FINITE __expl_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_fmod.c b/sysdeps/m68k/m680x0/fpu/e_fmod.c deleted file mode 100644 index cd8e37a55a..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_fmod.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "mathimpl.h" - -#ifndef FUNC -# define FUNC __ieee754_fmod -# define FUNC_FINITE __fmod_finite -#endif -#ifndef float_type -# define float_type double -#endif - -float_type -FUNC (float_type x, float_type y) -{ - return __m81_u(FUNC)(x, y); -} -#ifdef FUNC_FINITE -strong_alias (FUNC, FUNC_FINITE) -#endif diff --git a/sysdeps/m68k/m680x0/fpu/e_fmodf.c b/sysdeps/m68k/m680x0/fpu/e_fmodf.c deleted file mode 100644 index 38995c3768..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_fmodf.c +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef FUNC -# define FUNC __ieee754_fmodf -# define FUNC_FINITE __fmodf_finite -#endif -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_fmodl.c b/sysdeps/m68k/m680x0/fpu/e_fmodl.c deleted file mode 100644 index 8d793b2de7..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_fmodl.c +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef FUNC -# define FUNC __ieee754_fmodl -# define FUNC_FINITE __fmodl_finite -#endif -#define float_type long double -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_ilogb.c b/sysdeps/m68k/m680x0/fpu/e_ilogb.c deleted file mode 100644 index 0de5830372..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_ilogb.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include "mathimpl.h" - -#ifndef SUFF -#define SUFF -#endif -#ifndef float_type -#define float_type double -#endif - -#define CONCATX(a,b) __CONCAT(a,b) -#define s(name) CONCATX(name,SUFF) -#define m81(func) __m81_u(s(func)) - -int -s(__ieee754_ilogb) (float_type x) -{ - float_type result; - unsigned long x_cond; - - x_cond = __m81_test (x); - /* We must return consistent values for zero and NaN. */ - if (x_cond & __M81_COND_ZERO) - return FP_ILOGB0; - if (x_cond & (__M81_COND_NAN | __M81_COND_INF)) - return FP_ILOGBNAN; - - __asm ("fgetexp%.x %1, %0" : "=f" (result) : "f" (x)); - return (int) result; -} diff --git a/sysdeps/m68k/m680x0/fpu/e_ilogbf.c b/sysdeps/m68k/m680x0/fpu/e_ilogbf.c deleted file mode 100644 index 34a8cd28e6..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_ilogbf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SUFF f -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_ilogbl.c b/sysdeps/m68k/m680x0/fpu/e_ilogbl.c deleted file mode 100644 index b0e13af6b1..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_ilogbl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SUFF l -#define float_type long double -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_log.c b/sysdeps/m68k/m680x0/fpu/e_log.c deleted file mode 100644 index 628c62b31a..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_log.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_log -#define FUNC_FINITE __log_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_log10.c b/sysdeps/m68k/m680x0/fpu/e_log10.c deleted file mode 100644 index 78e0693e9d..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_log10.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_log10 -#define FUNC_FINITE __log10_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_log10f.c b/sysdeps/m68k/m680x0/fpu/e_log10f.c deleted file mode 100644 index 452a75ec15..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_log10f.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_log10f -#define FUNC_FINITE __log10f_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_log10l.c b/sysdeps/m68k/m680x0/fpu/e_log10l.c deleted file mode 100644 index 7c5dcb8e18..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_log10l.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_log10l -#define FUNC_FINITE __log10l_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_log2.c b/sysdeps/m68k/m680x0/fpu/e_log2.c deleted file mode 100644 index a00ddbdc96..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_log2.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_log2 -#define FUNC_FINITE __log2_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_log2f.c b/sysdeps/m68k/m680x0/fpu/e_log2f.c deleted file mode 100644 index 670b69c8a9..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_log2f.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_log2f -#define FUNC_FINITE __log2f_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_log2l.c b/sysdeps/m68k/m680x0/fpu/e_log2l.c deleted file mode 100644 index 4a97a00235..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_log2l.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_log2l -#define FUNC_FINITE __log2l_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_logf.c b/sysdeps/m68k/m680x0/fpu/e_logf.c deleted file mode 100644 index 1989a95431..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_logf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_logf -#define FUNC_FINITE __logf_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_logl.c b/sysdeps/m68k/m680x0/fpu/e_logl.c deleted file mode 100644 index 9ab842c3fc..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_logl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_logl -#define FUNC_FINITE __logl_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_pow.c b/sysdeps/m68k/m680x0/fpu/e_pow.c deleted file mode 100644 index f2dad685e3..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_pow.c +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "mathimpl.h" - -#ifndef SUFF -#define SUFF -#endif -#ifndef float_type -#define float_type double -#endif - -#define CONCATX(a,b) __CONCAT(a,b) -#define s(name) CONCATX(name,SUFF) -#define m81(func) __m81_u(s(func)) - -float_type -s(__ieee754_pow) (float_type x, float_type y) -{ - float_type z; - float_type ax; - unsigned long x_cond, y_cond; - - y_cond = __m81_test (y); - if (y_cond & __M81_COND_ZERO) - return 1.0; - if (y_cond & __M81_COND_NAN) - return x == 1.0 ? x : x + y; - - x_cond = __m81_test (x); - if (x_cond & __M81_COND_NAN) - return x + y; - - if (y_cond & __M81_COND_INF) - { - ax = s(fabs) (x); - if (ax == 1.0) - return ax; - if (ax > 1.0) - return y_cond & __M81_COND_NEG ? 0 : y; - else - return y_cond & __M81_COND_NEG ? -y : 0; - } - - if (s(fabs) (y) == 1.0) - return y_cond & __M81_COND_NEG ? 1 / x : x; - - if (y == 2) - return x * x; - if (y == 0.5 && !(x_cond & __M81_COND_NEG)) - return m81(__ieee754_sqrt) (x); - - if (x == 10.0) - { - __asm ("ftentox%.x %1, %0" : "=f" (z) : "f" (y)); - return z; - } - if (x == 2.0) - { - __asm ("ftwotox%.x %1, %0" : "=f" (z) : "f" (y)); - return z; - } - - ax = s(fabs) (x); - if (x_cond & (__M81_COND_INF | __M81_COND_ZERO) || ax == 1.0) - { - z = ax; - if (y_cond & __M81_COND_NEG) - z = 1 / z; - if (x_cond & __M81_COND_NEG) - { - if (y != m81(__rint) (y)) - { - if (x == -1) - z = (z - z) / (z - z); - } - else - goto maybe_negate; - } - return z; - } - - if (x_cond & __M81_COND_NEG) - { - if (y == m81(__rint) (y)) - { - z = m81(__ieee754_exp) (y * m81(__ieee754_log) (-x)); - maybe_negate: - /* We always use the long double format, since y is already in - this format and rounding won't change the result. */ - { - int32_t exponent; - u_int32_t i0, i1; - GET_LDOUBLE_WORDS (exponent, i0, i1, y); - exponent = (exponent & 0x7fff) - 0x3fff; - if (exponent <= 31 - ? i0 & (1 << (31 - exponent)) - : (exponent <= 63 - && i1 & (1 << (63 - exponent)))) - z = -z; - } - } - else - z = (y - y) / (y - y); - } - else - z = m81(__ieee754_exp) (y * m81(__ieee754_log) (x)); - return z; -} -strong_alias (s(__ieee754_pow), CONCATX (s(__pow), _finite)) diff --git a/sysdeps/m68k/m680x0/fpu/e_powf.c b/sysdeps/m68k/m680x0/fpu/e_powf.c deleted file mode 100644 index 379014355a..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_powf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SUFF f -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_powl.c b/sysdeps/m68k/m680x0/fpu/e_powl.c deleted file mode 100644 index f71fa34a26..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_powl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SUFF l -#define float_type long double -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_rem_pio2.c b/sysdeps/m68k/m680x0/fpu/e_rem_pio2.c deleted file mode 100644 index 1347b0468c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_rem_pio2.c +++ /dev/null @@ -1,3 +0,0 @@ -/* Empty. This file is only meant to avoid compiling the file with the - same name in the libm-ieee754 directory. The code is not used since - there is an assembler version for all users of this file. */ diff --git a/sysdeps/m68k/m680x0/fpu/e_rem_pio2f.c b/sysdeps/m68k/m680x0/fpu/e_rem_pio2f.c deleted file mode 100644 index 1347b0468c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_rem_pio2f.c +++ /dev/null @@ -1,3 +0,0 @@ -/* Empty. This file is only meant to avoid compiling the file with the - same name in the libm-ieee754 directory. The code is not used since - there is an assembler version for all users of this file. */ diff --git a/sysdeps/m68k/m680x0/fpu/e_rem_pio2l.c b/sysdeps/m68k/m680x0/fpu/e_rem_pio2l.c deleted file mode 100644 index 1347b0468c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_rem_pio2l.c +++ /dev/null @@ -1,3 +0,0 @@ -/* Empty. This file is only meant to avoid compiling the file with the - same name in the libm-ieee754 directory. The code is not used since - there is an assembler version for all users of this file. */ diff --git a/sysdeps/m68k/m680x0/fpu/e_remainder.c b/sysdeps/m68k/m680x0/fpu/e_remainder.c deleted file mode 100644 index f7732af8c5..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_remainder.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_remainder -#define FUNC_FINITE __remainder_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_remainderf.c b/sysdeps/m68k/m680x0/fpu/e_remainderf.c deleted file mode 100644 index 94b53e7a80..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_remainderf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_remainderf -#define FUNC_FINITE __remainderf_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_remainderl.c b/sysdeps/m68k/m680x0/fpu/e_remainderl.c deleted file mode 100644 index d5b59607ab..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_remainderl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_remainderl -#define FUNC_FINITE __remainderl_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_scalb.c b/sysdeps/m68k/m680x0/fpu/e_scalb.c deleted file mode 100644 index 80bcade955..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_scalb.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "mathimpl.h" - -#ifndef SUFF -#define SUFF -#endif -#ifndef float_type -#define float_type double -#endif - -#define CONCATX(a,b) __CONCAT(a,b) -#define s(name) CONCATX(name,SUFF) -#define m81(func) __m81_u(s(func)) - -float_type -s(__ieee754_scalb) (float_type x, float_type fn) -{ - float_type retval; - unsigned long x_cond = __m81_test (x); - unsigned long fn_cond = __m81_test (fn); - - if ((x_cond | fn_cond) & __M81_COND_NAN) - return x * fn; - - if (fn_cond & __M81_COND_INF) - { - if (!(fn_cond & __M81_COND_NEG)) - return x * fn; - else if (x_cond & __M81_COND_ZERO) - return x; - else - return x / -fn; - } - - if (m81(__rint) (fn) != fn) - return (x - x) / (x - x); - - __asm ("fscale%.x %1, %0" : "=f" (retval) : "f" (fn), "0" (x)); - return retval; -} -strong_alias (s(__ieee754_scalb), CONCATX (s(__scalb), _finite)) diff --git a/sysdeps/m68k/m680x0/fpu/e_scalbf.c b/sysdeps/m68k/m680x0/fpu/e_scalbf.c deleted file mode 100644 index 7943571246..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_scalbf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SUFF f -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_scalbl.c b/sysdeps/m68k/m680x0/fpu/e_scalbl.c deleted file mode 100644 index 35fb2dc0ed..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_scalbl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SUFF l -#define float_type long double -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_sinh.c b/sysdeps/m68k/m680x0/fpu/e_sinh.c deleted file mode 100644 index 1e1b1c1180..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_sinh.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_sinh -#define FUNC_FINITE __sinh_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_sinhf.c b/sysdeps/m68k/m680x0/fpu/e_sinhf.c deleted file mode 100644 index 13c79f9d96..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_sinhf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_sinhf -#define FUNC_FINITE __sinhf_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_sinhl.c b/sysdeps/m68k/m680x0/fpu/e_sinhl.c deleted file mode 100644 index 47f0f24401..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_sinhl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_sinhl -#define FUNC_FINITE __sinhl_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_sqrt.c b/sysdeps/m68k/m680x0/fpu/e_sqrt.c deleted file mode 100644 index 9a250cbc25..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_sqrt.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_sqrt -#define FUNC_FINITE __sqrt_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_sqrtf.c b/sysdeps/m68k/m680x0/fpu/e_sqrtf.c deleted file mode 100644 index 372c3eb2f4..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_sqrtf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_sqrtf -#define FUNC_FINITE __sqrtf_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/e_sqrtl.c b/sysdeps/m68k/m680x0/fpu/e_sqrtl.c deleted file mode 100644 index df5f44e6a7..0000000000 --- a/sysdeps/m68k/m680x0/fpu/e_sqrtl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC __ieee754_sqrtl -#define FUNC_FINITE __sqrtl_finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/fraiseexcpt.c b/sysdeps/m68k/m680x0/fpu/fraiseexcpt.c deleted file mode 100644 index 08ba0a7ef5..0000000000 --- a/sysdeps/m68k/m680x0/fpu/fraiseexcpt.c +++ /dev/null @@ -1,83 +0,0 @@ -/* Raise given exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -int -__feraiseexcept (int excepts) -{ - /* Raise exceptions represented by EXCEPTS. But we must raise only one - signal at a time. It is important that if the overflow/underflow - exception and the divide by zero exception are given at the same - time, the overflow/underflow exception follows the divide by zero - exception. */ - - /* First: invalid exception. */ - if (excepts & FE_INVALID) - { - /* One example of an invalid operation is 0 * Infinity. */ - double d = HUGE_VAL; - __asm__ __volatile__ ("fmul%.s %#0r0,%0; fnop" : "=f" (d) : "0" (d)); - } - - /* Next: division by zero. */ - if (excepts & FE_DIVBYZERO) - { - double d = 1.0; - __asm__ __volatile__ ("fdiv%.s %#0r0,%0; fnop" : "=f" (d) : "0" (d)); - } - - /* Next: overflow. */ - if (excepts & FE_OVERFLOW) - { - long double d = LDBL_MAX; - - __asm__ __volatile__ ("fmul%.x %0,%0; fnop" : "=f" (d) : "0" (d)); - } - - /* Next: underflow. */ - if (excepts & FE_UNDERFLOW) - { - long double d = -LDBL_MAX; - - __asm__ __volatile__ ("fetox%.x %0; fnop" : "=f" (d) : "0" (d)); - } - - /* Last: inexact. */ - if (excepts & FE_INEXACT) - { - long double d = 1.0; - __asm__ __volatile__ ("fdiv%.s %#0r3,%0; fnop" : "=f" (d) : "0" (d)); - } - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feraiseexcept, __old_feraiseexcept) -compat_symbol (libm, __old_feraiseexcept, feraiseexcept, GLIBC_2_1); -#endif - -libm_hidden_def (__feraiseexcept) -libm_hidden_ver (__feraiseexcept, feraiseexcept) -versioned_symbol (libm, __feraiseexcept, feraiseexcept, GLIBC_2_2); diff --git a/sysdeps/m68k/m680x0/fpu/halfulp.c b/sysdeps/m68k/m680x0/fpu/halfulp.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/halfulp.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/k_cosl.c b/sysdeps/m68k/m680x0/fpu/k_cosl.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/k_cosl.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/k_rem_pio2.c b/sysdeps/m68k/m680x0/fpu/k_rem_pio2.c deleted file mode 100644 index 1347b0468c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/k_rem_pio2.c +++ /dev/null @@ -1,3 +0,0 @@ -/* Empty. This file is only meant to avoid compiling the file with the - same name in the libm-ieee754 directory. The code is not used since - there is an assembler version for all users of this file. */ diff --git a/sysdeps/m68k/m680x0/fpu/k_rem_pio2f.c b/sysdeps/m68k/m680x0/fpu/k_rem_pio2f.c deleted file mode 100644 index 1347b0468c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/k_rem_pio2f.c +++ /dev/null @@ -1,3 +0,0 @@ -/* Empty. This file is only meant to avoid compiling the file with the - same name in the libm-ieee754 directory. The code is not used since - there is an assembler version for all users of this file. */ diff --git a/sysdeps/m68k/m680x0/fpu/k_sinl.c b/sysdeps/m68k/m680x0/fpu/k_sinl.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/k_sinl.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/k_tanf.c b/sysdeps/m68k/m680x0/fpu/k_tanf.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/k_tanf.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/k_tanl.c b/sysdeps/m68k/m680x0/fpu/k_tanl.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/k_tanl.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/libm-test-ulps b/sysdeps/m68k/m680x0/fpu/libm-test-ulps deleted file mode 100644 index 2247a4af60..0000000000 --- a/sysdeps/m68k/m680x0/fpu/libm-test-ulps +++ /dev/null @@ -1,1602 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acosh_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asinh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "asinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "asinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "atan2": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "atan2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "atan2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "atan_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_towardzero": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cacos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacos_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cacos_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cacos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cacos_upward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cacosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacosh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "cacosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "cacosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_upward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "cacosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "carg": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "carg_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "carg_towardzero": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "carg_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casin_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Real part of "casin_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casin_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Real part of "casin_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casin_upward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Real part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "casinh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "casinh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casinh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "casinh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casinh_upward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "casinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catan": -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catan_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catanh": -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "catanh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "catanh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos": -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos_downward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_downward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos_upward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_upward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh": -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccosh_downward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_downward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh_upward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_upward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp": -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cexp": -ildouble: 1 -ldouble: 1 - -Function: Real part of "cexp_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "cexp_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "cexp_upward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp_upward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog10": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog10_downward": -double: 6 -float: 4 -idouble: 6 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "clog10_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "clog10_towardzero": -double: 6 -float: 4 -idouble: 6 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "clog10_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "clog10_upward": -double: 7 -float: 5 -idouble: 7 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "clog10_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog_downward": -double: 7 -float: 5 -idouble: 7 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "clog_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog_towardzero": -double: 7 -float: 5 -idouble: 7 -ifloat: 5 -ildouble: 9 -ldouble: 9 - -Function: Imaginary part of "clog_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog_upward": -double: 8 -float: 5 -idouble: 8 -ifloat: 5 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "clog_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cos": -double: 1 -idouble: 1 - -Function: Real part of "cpow": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cpow": -float: 5 -ifloat: 5 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cpow_downward": -double: 5 -float: 8 -idouble: 5 -ifloat: 8 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "cpow_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_towardzero": -double: 5 -float: 8 -idouble: 5 -ifloat: 8 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "cpow_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_upward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cpow_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin": -ildouble: 1 -ldouble: 1 - -Function: Real part of "csin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csinh": -ildouble: 1 -ldouble: 1 - -Function: Real part of "csinh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csinh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csinh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csqrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "csqrt_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctan_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ctan_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctan_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ctan_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctan_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 7 -ldouble: 7 - -Function: Real part of "ctanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ctanh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctanh_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ctanh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctanh_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctanh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctanh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "ctanh_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "erf": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_downward": -float: 1 -ifloat: 1 - -Function: "erf_towardzero": -ildouble: 1 -ldouble: 1 - -Function: "erf_upward": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erfc": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erfc_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "erfc_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "erfc_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "exp2": -double: 1 -idouble: 1 - -Function: "gamma": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "gamma_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "gamma_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "gamma_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "hypot": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "j0": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j0_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "j0_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: "j0_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "j1": -float: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "j1_downward": -double: 1 -float: 4 -idouble: 1 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "j1_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "jn": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "jn_downward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "jn_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "jn_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "lgamma": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "lgamma_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "lgamma_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "lgamma_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow": -double: 1 -float: 7 -idouble: 1 -ifloat: 7 -ildouble: 9 -ldouble: 9 - -Function: "pow_downward": -double: 1 -float: 7 -idouble: 1 -ifloat: 7 -ildouble: 9 -ldouble: 9 - -Function: "pow_towardzero": -double: 1 -float: 4 -idouble: 1 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "pow_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 8 -ldouble: 8 - -Function: "sin": -double: 1 -idouble: 1 - -Function: "tgamma": -double: 1 -float: 4 -idouble: 1 -ifloat: 4 -ildouble: 9 -ldouble: 9 - -Function: "tgamma_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 9 -ldouble: 9 - -Function: "tgamma_towardzero": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 9 -ldouble: 9 - -Function: "tgamma_upward": -double: 1 -float: 4 -idouble: 1 -ifloat: 4 -ildouble: 9 -ldouble: 9 - -Function: "y0": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "y0_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: "y0_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "y0_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "y1": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: "y1_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: "y1_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "y1_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "yn": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "yn_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: "yn_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "yn_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -# end of automatic generation diff --git a/sysdeps/m68k/m680x0/fpu/libm-test-ulps-name b/sysdeps/m68k/m680x0/fpu/libm-test-ulps-name deleted file mode 100644 index 35c8a9e5f0..0000000000 --- a/sysdeps/m68k/m680x0/fpu/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -M68k diff --git a/sysdeps/m68k/m680x0/fpu/math_private.h b/sysdeps/m68k/m680x0/fpu/math_private.h deleted file mode 100644 index 2b7909535e..0000000000 --- a/sysdeps/m68k/m680x0/fpu/math_private.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef M68K_MATH_PRIVATE_H -#define M68K_MATH_PRIVATE_H 1 - -#define math_opt_barrier(x) \ -({ __typeof (x) __x; \ - __asm ("" : "=f" (__x) : "0" (x)); \ - __x; }) -#define math_force_eval(x) \ -do \ - { \ - __typeof (x) __x = (x); \ - if (sizeof (x) <= sizeof (double)) \ - __asm __volatile ("" : : "m" (__x)); \ - else \ - __asm __volatile ("" : : "f" (__x)); \ - } \ -while (0) - -#include_next -#endif diff --git a/sysdeps/m68k/m680x0/fpu/mathimpl.h b/sysdeps/m68k/m680x0/fpu/mathimpl.h deleted file mode 100644 index 653df96873..0000000000 --- a/sysdeps/m68k/m680x0/fpu/mathimpl.h +++ /dev/null @@ -1,93 +0,0 @@ -/* Definitions of libc internal inline math functions implemented - by the m68881/2. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This file contains the definitions of the inline math functions that - are only used internally inside libm, not visible to the user. */ - -__inline_mathop (__ieee754_acos, acos) -__inline_mathop (__ieee754_asin, asin) -__inline_mathop (__ieee754_cosh, cosh) -__inline_mathop (__ieee754_sinh, sinh) -__inline_mathop (__ieee754_exp, etox) -__inline_mathop (__ieee754_exp2, twotox) -__inline_mathop (__ieee754_exp10, tentox) -__inline_mathop (__ieee754_log10, log10) -__inline_mathop (__ieee754_log2, log2) -__inline_mathop (__ieee754_log, logn) -__inline_mathop (__ieee754_sqrt, sqrt) -__inline_mathop (__ieee754_atanh, atanh) - -__m81_defun (double, __ieee754_remainder, (double __x, double __y)) -{ - double __result; - __asm ("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x)); - return __result; -} - -__m81_defun (float, __ieee754_remainderf, (float __x, float __y)) -{ - float __result; - __asm ("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x)); - return __result; -} - -__m81_defun (long double, - __ieee754_remainderl, (long double __x, long double __y)) -{ - long double __result; - __asm ("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x)); - return __result; -} - -__m81_defun (double, __ieee754_fmod, (double __x, double __y)) -{ - double __result; - __asm ("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x)); - return __result; -} - -__m81_defun (float, __ieee754_fmodf, (float __x, float __y)) -{ - float __result; - __asm ("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x)); - return __result; -} - -__m81_defun (long double, - __ieee754_fmodl, (long double __x, long double __y)) -{ - long double __result; - __asm ("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x)); - return __result; -} - -/* Get the m68881 condition codes, to quickly check multiple conditions. */ -static __inline__ unsigned long -__m81_test (long double __val) -{ - unsigned long __fpsr; - __asm ("ftst%.x %1; fmove%.l %/fpsr,%0" : "=dm" (__fpsr) : "f" (__val)); - return __fpsr; -} - -/* Bit values returned by __m81_test. */ -#define __M81_COND_NAN (1 << 24) -#define __M81_COND_INF (2 << 24) -#define __M81_COND_ZERO (4 << 24) -#define __M81_COND_NEG (8 << 24) diff --git a/sysdeps/m68k/m680x0/fpu/mpa.c b/sysdeps/m68k/m680x0/fpu/mpa.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/mpa.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/mpatan.c b/sysdeps/m68k/m680x0/fpu/mpatan.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/mpatan.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/mpatan2.c b/sysdeps/m68k/m680x0/fpu/mpatan2.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/mpatan2.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/mpexp.c b/sysdeps/m68k/m680x0/fpu/mpexp.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/mpexp.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/mplog.c b/sysdeps/m68k/m680x0/fpu/mplog.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/mplog.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/mpsqrt.c b/sysdeps/m68k/m680x0/fpu/mpsqrt.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/mpsqrt.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/mptan.c b/sysdeps/m68k/m680x0/fpu/mptan.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/mptan.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/s_atan.c b/sysdeps/m68k/m680x0/fpu/s_atan.c deleted file mode 100644 index 55e26312fc..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_atan.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifndef FUNC -#define FUNC atan -#endif -#ifndef float_type -#define float_type double -#endif - -#define __CONCATX(a,b) __CONCAT(a,b) - -float_type -__CONCATX(__,FUNC) (float_type x) -{ - return __m81_u(__CONCATX(__,FUNC))(x); -} -weak_alias (__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/m68k/m680x0/fpu/s_atanf.c b/sysdeps/m68k/m680x0/fpu/s_atanf.c deleted file mode 100644 index c98559a8ba..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_atanf.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef FUNC -#define FUNC atanf -#endif -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_atanl.c b/sysdeps/m68k/m680x0/fpu/s_atanl.c deleted file mode 100644 index b7e608addd..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_atanl.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef FUNC -#define FUNC atanl -#endif -#define float_type long double -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_ccosh_template.c b/sysdeps/m68k/m680x0/fpu/s_ccosh_template.c deleted file mode 100644 index 26d11fc740..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_ccosh_template.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Complex cosine hyperbole function. m68k fpu version - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "mathimpl.h" - -#define s(name) M_SUF (name) -#define m81(func) __m81_u(s(func)) - -CFLOAT -s(__ccosh) (CFLOAT x) -{ - CFLOAT retval; - unsigned long ix_cond = __m81_test (__imag__ x); - - if ((ix_cond & (__M81_COND_INF|__M81_COND_NAN)) == 0) - { - /* Imaginary part is finite. */ - FLOAT sin_ix, cos_ix; - - __asm ("fsincos%.x %2,%1:%0" : "=f" (sin_ix), "=f" (cos_ix) - : "f" (__imag__ x)); - __real__ retval = cos_ix * m81(__ieee754_cosh) (__real__ x); - if (ix_cond & __M81_COND_ZERO) - __imag__ retval = (signbit (__real__ x) - ? -__imag__ x : __imag__ x); - else - __imag__ retval = sin_ix * m81(__ieee754_sinh) (__real__ x); - } - else - { - unsigned long rx_cond = __m81_test (__real__ x); - - if (rx_cond & __M81_COND_ZERO) - { - __real__ retval = __imag__ x - __imag__ x; - __imag__ retval = __real__ x; - } - else - { - if (rx_cond & __M81_COND_INF) - __real__ retval = s(fabs) (__real__ x); - else - __real__ retval = s(__nan) (""); - __imag__ retval = __imag__ x - __imag__ x; - } - } - - return retval; -} -weak_alias (s(__ccosh), s(ccosh)) diff --git a/sysdeps/m68k/m680x0/fpu/s_ceil.c b/sysdeps/m68k/m680x0/fpu/s_ceil.c deleted file mode 100644 index 93d5ad72e5..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_ceil.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC ceil -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_ceilf.c b/sysdeps/m68k/m680x0/fpu/s_ceilf.c deleted file mode 100644 index b3ba6a5700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_ceilf.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC ceilf -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_ceill.c b/sysdeps/m68k/m680x0/fpu/s_ceill.c deleted file mode 100644 index 2bf95b00c6..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_ceill.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC ceill -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_cexp_template.c b/sysdeps/m68k/m680x0/fpu/s_cexp_template.c deleted file mode 100644 index 17cf145685..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_cexp_template.c +++ /dev/null @@ -1,129 +0,0 @@ -/* Complex exponential function. m68k fpu version - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include "mathimpl.h" - -#define CONCATX(a,b) __CONCAT(a,b) -#define s(name) M_SUF (name) -#define m81(func) __m81_u(s(func)) - -CFLOAT -s(__cexp) (CFLOAT x) -{ - CFLOAT retval; - unsigned long ix_cond; - - ix_cond = __m81_test (__imag__ x); - - if ((ix_cond & (__M81_COND_NAN|__M81_COND_INF)) == 0) - { - /* Imaginary part is finite. */ - unsigned long rx_cond = __m81_test (__real__ x); - - if ((rx_cond & (__M81_COND_NAN|__M81_COND_INF)) == 0) - { - const int t = (int) ((LDBL_MAX_EXP - 1) * M_LN2l); - long double sin_ix, cos_ix, exp_val; - - __m81_u (__sincosl) (__imag__ x, &sin_ix, &cos_ix); - - if (__real__ x > t) - { - long double exp_t = __m81_u(__ieee754_expl) (t); - __real__ x -= t; - sin_ix *= exp_t; - cos_ix *= exp_t; - if (__real__ x > t) - { - __real__ x -= t; - sin_ix *= exp_t; - cos_ix *= exp_t; - } - } - - exp_val = __m81_u(__ieee754_expl) (__real__ x); - __real__ retval = exp_val * cos_ix; - if (ix_cond & __M81_COND_ZERO) - __imag__ retval = __imag__ x; - else - __imag__ retval = exp_val * sin_ix; - } - else - { - /* Compute the sign of the result. */ - long double remainder, pi_2; - int quadrant; - - if ((rx_cond & (__M81_COND_NAN|__M81_COND_NEG)) == __M81_COND_NEG) - __real__ retval = __imag__ retval = 0.0; - else - __real__ retval = __imag__ retval = __real__ x; - __asm ("fmovecr %#0,%0\n\tfscale%.w %#-1,%0" : "=f" (pi_2)); - __asm ("fmod%.x %2,%0\n\tfmove%.l %/fpsr,%1" - : "=f" (remainder), "=dm" (quadrant) - : "f" (pi_2), "0" (__imag__ x)); - quadrant = (quadrant >> 16) & 0x83; - if (quadrant & 0x80) - quadrant ^= 0x83; - switch (quadrant) - { - default: - break; - case 1: - __real__ retval = -__real__ retval; - break; - case 2: - __real__ retval = -__real__ retval; - case 3: - __imag__ retval = -__imag__ retval; - break; - } - if (ix_cond & __M81_COND_ZERO && (rx_cond & __M81_COND_NAN) == 0) - __imag__ retval = __imag__ x; - } - } - else - { - unsigned long rx_cond = __m81_test (__real__ x); - - if (rx_cond & __M81_COND_INF) - { - /* Real part is infinite. */ - if (rx_cond & __M81_COND_NEG) - { - __real__ retval = __imag__ retval = 0.0; - if (ix_cond & __M81_COND_NEG) - __imag__ retval = -__imag__ retval; - } - else - { - __real__ retval = __real__ x; - __imag__ retval = __imag__ x - __imag__ x; - } - } - else - __real__ retval = __imag__ retval = __imag__ x - __imag__ x; - } - - return retval; -} -weak_alias (s(__cexp), s(cexp)) diff --git a/sysdeps/m68k/m680x0/fpu/s_cos.c b/sysdeps/m68k/m680x0/fpu/s_cos.c deleted file mode 100644 index 2f1adf77f5..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_cos.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC cos -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_cosf.c b/sysdeps/m68k/m680x0/fpu/s_cosf.c deleted file mode 100644 index b6d6accb4a..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_cosf.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC cosf -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_cosl.c b/sysdeps/m68k/m680x0/fpu/s_cosl.c deleted file mode 100644 index eb61521fdd..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_cosl.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC cosl -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_csin_template.c b/sysdeps/m68k/m680x0/fpu/s_csin_template.c deleted file mode 100644 index be72208ef7..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_csin_template.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Complex sine function. m68k fpu version - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "mathimpl.h" - -#define s(name) M_SUF (name) -#define m81(func) __m81_u(s(func)) - -CFLOAT -s(__csin) (CFLOAT x) -{ - CFLOAT retval; - unsigned long rx_cond = __m81_test (__real__ x); - - if ((rx_cond & (__M81_COND_INF|__M81_COND_NAN)) == 0) - { - /* Real part is finite. */ - FLOAT sin_rx, cos_rx; - - __asm ("fsincos%.x %2,%1:%0" : "=f" (sin_rx), "=f" (cos_rx) - : "f" (__real__ x)); - if (rx_cond & __M81_COND_ZERO) - __real__ retval = __real__ x; - else - __real__ retval = sin_rx * m81(__ieee754_cosh) (__imag__ x); - __imag__ retval = cos_rx * m81(__ieee754_sinh) (__imag__ x); - } - else - { - unsigned long ix_cond = __m81_test (__imag__ x); - - __real__ retval = __real__ x - __real__ x; - if (ix_cond & (__M81_COND_ZERO|__M81_COND_INF|__M81_COND_NAN)) - __imag__ retval = __imag__ x; - else - __imag__ retval = __real__ retval; - } - - return retval; -} -weak_alias (s(__csin), s(csin)) diff --git a/sysdeps/m68k/m680x0/fpu/s_csinh_template.c b/sysdeps/m68k/m680x0/fpu/s_csinh_template.c deleted file mode 100644 index f5180459e6..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_csinh_template.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Complex sine hyperbole function. m68k fpu version - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "mathimpl.h" - -#define CONCATX(a,b) __CONCAT(a,b) -#define s(name) M_SUF (name) -#define m81(func) __m81_u(s(func)) - -CFLOAT -s(__csinh) (CFLOAT x) -{ - CFLOAT retval; - unsigned long ix_cond; - - ix_cond = __m81_test (__imag__ x); - - if ((ix_cond & (__M81_COND_INF|__M81_COND_NAN)) == 0) - { - /* Imaginary part is finite. */ - FLOAT sin_ix, cos_ix; - - __asm ("fsincos%.x %2,%1:%0" : "=f" (sin_ix), "=f" (cos_ix) - : "f" (__imag__ x)); - __real__ retval = cos_ix * m81(__ieee754_sinh) (__real__ x); - if (ix_cond & __M81_COND_ZERO) - __imag__ retval = __imag__ x; - else - __imag__ retval = sin_ix * m81(__ieee754_cosh) (__real__ x); - } - else - { - unsigned long rx_cond = __m81_test (__real__ x); - - __imag__ retval = __imag__ x - __imag__ x; - if (rx_cond & (__M81_COND_ZERO|__M81_COND_INF|__M81_COND_NAN)) - __real__ retval = __real__ x; - else - __real__ retval = __imag__ retval; - } - - return retval; -} -weak_alias (s(__csinh), s(csinh)) diff --git a/sysdeps/m68k/m680x0/fpu/s_expm1.c b/sysdeps/m68k/m680x0/fpu/s_expm1.c deleted file mode 100644 index c969a7f029..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_expm1.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "mathimpl.h" - -#ifndef FUNC -# define FUNC expm1 -#endif -#ifndef float_type -# define float_type double -#endif -#ifndef o_threshold -# define o_threshold 7.09782712893383973096e+02 -#endif - -#define CONCATX(a,b) __CONCAT(a,b) - -float_type -CONCATX(__,FUNC) (float_type x) -{ - if ((__m81_test (x) & __M81_COND_INF) == 0 && isgreater (x, o_threshold)) - __set_errno (ERANGE); - return __m81_u(CONCATX(__, FUNC)) (x); -} -weak_alias (CONCATX(__, FUNC), FUNC) diff --git a/sysdeps/m68k/m680x0/fpu/s_expm1f.c b/sysdeps/m68k/m680x0/fpu/s_expm1f.c deleted file mode 100644 index 2cd8ffcfeb..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_expm1f.c +++ /dev/null @@ -1,4 +0,0 @@ -#define FUNC expm1f -#define float_type float -#define o_threshold 8.8722831726e+01F -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_expm1l.c b/sysdeps/m68k/m680x0/fpu/s_expm1l.c deleted file mode 100644 index a2c80860ba..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_expm1l.c +++ /dev/null @@ -1,6 +0,0 @@ -#define FUNC expm1l -#define float_type long double -/* 400c0000b17217f7d1cf79ab */ -#define o_threshold 1.13565234062941439487914863093465101e+04L -#include -libm_hidden_def (__expm1l) diff --git a/sysdeps/m68k/m680x0/fpu/s_fabs.c b/sysdeps/m68k/m680x0/fpu/s_fabs.c deleted file mode 100644 index 1f0631e2ff..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_fabs.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC fabs -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_fabsf.c b/sysdeps/m68k/m680x0/fpu/s_fabsf.c deleted file mode 100644 index 8f9421998a..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_fabsf.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC fabsf -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_fabsl.c b/sysdeps/m68k/m680x0/fpu/s_fabsl.c deleted file mode 100644 index 8ac14d5b8c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_fabsl.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC fabsl -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_finite.c b/sysdeps/m68k/m680x0/fpu/s_finite.c deleted file mode 100644 index dafbd5901d..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_finite.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC finite -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_finitef.c b/sysdeps/m68k/m680x0/fpu/s_finitef.c deleted file mode 100644 index b81342e5c6..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_finitef.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC finitef -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_finitel.c b/sysdeps/m68k/m680x0/fpu/s_finitel.c deleted file mode 100644 index bd346a220c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_finitel.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC finitel -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_floor.c b/sysdeps/m68k/m680x0/fpu/s_floor.c deleted file mode 100644 index e1219c602a..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_floor.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC floor -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_floorf.c b/sysdeps/m68k/m680x0/fpu/s_floorf.c deleted file mode 100644 index f4f9b9a1d8..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_floorf.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC floorf -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_floorl.c b/sysdeps/m68k/m680x0/fpu/s_floorl.c deleted file mode 100644 index 2c1ffd7d2c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_floorl.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC floorl -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_fpclassifyl.c b/sysdeps/m68k/m680x0/fpu/s_fpclassifyl.c deleted file mode 100644 index 248a2d3ca4..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_fpclassifyl.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Return classification value corresponding to argument. m68k version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - Fixed for m68k by Andreas Schwab . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#include - - -int -__fpclassifyl (long double x) -{ - u_int32_t ex, hx, lx; - int retval = FP_NORMAL; - - GET_LDOUBLE_WORDS (ex, hx, lx, x); - ex &= 0x7fff; - if ((ex | hx | lx) == 0) - retval = FP_ZERO; - else if (ex == 0 && (hx & 0x80000000) == 0) - retval = FP_SUBNORMAL; - else if (ex == 0x7fff) - retval = ((hx & 0x7fffffff) | lx) != 0 ? FP_NAN : FP_INFINITE; - - return retval; -} -libm_hidden_def (__fpclassifyl) diff --git a/sysdeps/m68k/m680x0/fpu/s_frexp.c b/sysdeps/m68k/m680x0/fpu/s_frexp.c deleted file mode 100644 index 009b1e3223..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_frexp.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifndef FUNC -#define FUNC frexp -#endif -#ifndef float_type -#define float_type double -#endif - -#define __CONCATX(a,b) __CONCAT(a,b) - -float_type -__CONCATX(__,FUNC) (float_type value, int *expptr) -{ - float_type mantissa, exponent; - int iexponent; - unsigned long fpsr; - - __asm ("ftst%.x %1\n" - "fmove%.l %/fpsr, %0" - : "=dm" (fpsr) : "f" (value)); - if (fpsr & (7 << 24)) - { - /* Not finite or zero. */ - *expptr = 0; - return value; - } - __asm ("fgetexp%.x %1, %0" : "=f" (exponent) : "f" (value)); - iexponent = (int) exponent + 1; - *expptr = iexponent; - __asm ("fscale%.l %2, %0" - : "=f" (mantissa) - : "0" (value), "dmi" (-iexponent)); - return mantissa; -} -weak_alias (__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/m68k/m680x0/fpu/s_frexpf.c b/sysdeps/m68k/m680x0/fpu/s_frexpf.c deleted file mode 100644 index 893b6ad3cf..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_frexpf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC frexpf -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_frexpl.c b/sysdeps/m68k/m680x0/fpu/s_frexpl.c deleted file mode 100644 index 7d1d3964e7..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_frexpl.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -long double -__frexpl (long double value, int *expptr) -{ - long double mantissa, exponent; - int iexponent; - unsigned long fpsr; - - __asm ("ftst%.x %1\n" - "fmove%.l %/fpsr, %0" - : "=dm" (fpsr) : "f" (value)); - if (fpsr & (7 << 24)) - { - /* Not finite or zero. */ - *expptr = 0; - return value; - } - __asm ("fgetexp%.x %1, %0" : "=f" (exponent) : "f" (value)); - iexponent = (int) exponent + 1; - *expptr = iexponent; - /* Unnormalized numbers must be handled specially, otherwise fscale - results in overflow. */ - if (iexponent <= -16384) - { - value *= 0x1p16383L; - iexponent += 16383; - } - else if (iexponent >= 16384) - { - value *= 0x1p-16383L; - iexponent -= 16383; - } - - __asm ("fscale%.l %2, %0" - : "=f" (mantissa) - : "0" (value), "dmi" (-iexponent)); - return mantissa; -} - -weak_alias (__frexpl, frexpl) diff --git a/sysdeps/m68k/m680x0/fpu/s_isinf.c b/sysdeps/m68k/m680x0/fpu/s_isinf.c deleted file mode 100644 index 8764bb7e78..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_isinf.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifndef FUNC -#define FUNC isinf -#endif -#ifndef float_type -#define float_type double -#endif - -#define __CONCATX(a,b) __CONCAT(a,b) - -int -__CONCATX(__,FUNC) (float_type x) -{ - return __m81_u(__CONCATX(__,FUNC))(x); -} - -#define hidden_defx(a) hidden_def(a) -hidden_defx(__CONCATX(__,FUNC)) -weak_alias (__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/m68k/m680x0/fpu/s_isinff.c b/sysdeps/m68k/m680x0/fpu/s_isinff.c deleted file mode 100644 index ebf4f2ae96..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_isinff.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef FUNC -#define FUNC isinff -#endif -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_isinfl.c b/sysdeps/m68k/m680x0/fpu/s_isinfl.c deleted file mode 100644 index 963725ad77..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_isinfl.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef FUNC -#define FUNC isinfl -#endif -#define float_type long double -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_isnan.c b/sysdeps/m68k/m680x0/fpu/s_isnan.c deleted file mode 100644 index 151d6dc6b4..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_isnan.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC isnan -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_isnanf.c b/sysdeps/m68k/m680x0/fpu/s_isnanf.c deleted file mode 100644 index 667bca7235..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_isnanf.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC isnanf -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_isnanl.c b/sysdeps/m68k/m680x0/fpu/s_isnanl.c deleted file mode 100644 index bbacb64f11..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_isnanl.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC isnanl -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_llrint.c b/sysdeps/m68k/m680x0/fpu/s_llrint.c deleted file mode 100644 index 333f680947..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_llrint.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "mathimpl.h" - -long long int -__llrint (double x) -{ - int32_t e; - u_int32_t h, l, s; - long long int result; - - x = __m81_u(__rint) (x); - - /* We could use __fixxfdi from libgcc, but here we can take advantage of - the known floating point format. */ - EXTRACT_WORDS (h, l, x); - - e = ((h >> 20) & 0x7ff) - 0x3ff; - if (e < 0) - return 0; - s = h; - h &= 0xfffff; - h |= 0x100000; - - if (e < 63) - { - if (e > 52) - { - h <<= e - 52; - h |= l >> (84 - e); - l <<= e - 52; - result = ((long long int) h << 32) | l; - } - else if (e > 20) - { - l >>= 52 - e; - l |= h << (e - 20); - h >>= 52 - e; - result = ((long long int) h << 32) | l; - } - else - result = h >> (20 - e); - if (s & 0x80000000) - result = -result; - } - else - /* The number is too large or not finite. The standard leaves it - undefined what to return when the number is too large to fit in a - `long long int'. */ - result = -1LL; - - return result; -} - -weak_alias (__llrint, llrint) diff --git a/sysdeps/m68k/m680x0/fpu/s_llrintf.c b/sysdeps/m68k/m680x0/fpu/s_llrintf.c deleted file mode 100644 index b4367a1494..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_llrintf.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "mathimpl.h" - -long long int -__llrintf (float x) -{ - int32_t e; - u_int32_t i, s; - long long int result; - - x = __m81_u(__rintf) (x); - - GET_FLOAT_WORD (i, x); - - e = ((i >> 23) & 0xff) - 0x7f; - if (e < 0) - return 0; - s = i; - i &= 0x7fffff; - i |= 0x800000; - - if (e < 63) - { - if (e > 55) - result = (long long int) (i << (e - 55)) << 32; - else if (e > 31) - result = (((long long int) (i >> (55 - e)) << 32) | (i << (e - 23))); - else if (e > 23) - result = i << (e - 23); - else - result = i >> (23 - e); - if (s & 0x80000000) - result = -result; - } - else - /* The number is too large or not finite. The standard leaves it - undefined what to return when the number is too large to fit in a - `long long int'. */ - result = -1LL; - - return result; -} - -weak_alias (__llrintf, llrintf) diff --git a/sysdeps/m68k/m680x0/fpu/s_llrintl.c b/sysdeps/m68k/m680x0/fpu/s_llrintl.c deleted file mode 100644 index 17a7d7d7b0..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_llrintl.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "mathimpl.h" - -long long int -__llrintl (long double x) -{ - int32_t e, s; - u_int32_t h, l; - long long int result; - - x = __m81_u(__rintl) (x); - - GET_LDOUBLE_WORDS (e, h, l, x); - - s = e; - e = (e & 0x7fff) - 0x3fff; - if (e < 0) - return 0; - - if (e < 63) - { - if (e > 31) - { - l >>= 63 - e; - l |= h << (e - 31); - h >>= 63 - e; - result = ((long long int) h << 32) | l; - } - else - result = h >> (31 - e); - if (s & 0x8000) - result = -result; - } - else - /* The number is too large or not finite. The standard leaves it - undefined what to return when the number is too large to fit in a - `long long int'. */ - result = -1LL; - - return result; -} - -weak_alias (__llrintl, llrintl) diff --git a/sysdeps/m68k/m680x0/fpu/s_log1p.c b/sysdeps/m68k/m680x0/fpu/s_log1p.c deleted file mode 100644 index 082618df18..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_log1p.c +++ /dev/null @@ -1,4 +0,0 @@ -#define FUNC log1p -#undef weak_alias -#define weak_alias(a,b) -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_log1pf.c b/sysdeps/m68k/m680x0/fpu/s_log1pf.c deleted file mode 100644 index 480c39519f..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_log1pf.c +++ /dev/null @@ -1,4 +0,0 @@ -#define FUNC log1pf -#undef weak_alias -#define weak_alias(a,b) -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_log1pl.c b/sysdeps/m68k/m680x0/fpu/s_log1pl.c deleted file mode 100644 index a4f34a4f86..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_log1pl.c +++ /dev/null @@ -1,4 +0,0 @@ -#define FUNC log1pl -#undef weak_alias -#define weak_alias(a,b) -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_logbl.c b/sysdeps/m68k/m680x0/fpu/s_logbl.c deleted file mode 100644 index 2586622bf7..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_logbl.c +++ /dev/null @@ -1,49 +0,0 @@ -/* s_logbl.c -- long double version of s_logb.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* - * long double logbl(x) - * IEEE 754 logb. Included to pass IEEE test suite. Not recommend. - * Use ilogb instead. - */ - -#include -#include - -long double -__logbl (long double x) -{ - int32_t es, lx, ix; - - GET_LDOUBLE_WORDS (es, ix, lx, x); - es &= 0x7fff; /* exponent */ - if ((es | ix | lx) == 0) - return -1.0 / fabsl (x); - if (es == 0x7fff) - return x * x; - if (es == 0) /* IEEE 754 logb */ - { - /* POSIX specifies that denormal number is treated as - though it were normalized. */ - if (ix == 0) - es = -(__builtin_clz (lx) + 32); - else - es = -__builtin_clz (ix); - } - return (long double) (es - 16383); -} - -weak_alias (__logbl, logbl) diff --git a/sysdeps/m68k/m680x0/fpu/s_lrint.c b/sysdeps/m68k/m680x0/fpu/s_lrint.c deleted file mode 100644 index d25a548dcd..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_lrint.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifndef suffix -#define suffix /*empty*/ -#endif -#ifndef float_type -#define float_type double -#endif - -#define CONCATX(a,b) __CONCAT(a,b) - -long int -CONCATX(__lrint,suffix) (float_type x) -{ - return __m81_u(CONCATX(__lrint,suffix)) (x); -} -weak_alias (CONCATX(__lrint,suffix), CONCATX(lrint,suffix)) diff --git a/sysdeps/m68k/m680x0/fpu/s_lrintf.c b/sysdeps/m68k/m680x0/fpu/s_lrintf.c deleted file mode 100644 index 44924cb82f..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_lrintf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define suffix f -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_lrintl.c b/sysdeps/m68k/m680x0/fpu/s_lrintl.c deleted file mode 100644 index cd0bd23b8a..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_lrintl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define suffix l -#define float_type long double -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_modf.c b/sysdeps/m68k/m680x0/fpu/s_modf.c deleted file mode 100644 index 3c1a5a2749..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_modf.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include "mathimpl.h" - -#ifndef SUFF -#define SUFF -#endif -#ifndef float_type -#define float_type double -#endif - -#define CONCATX(a,b) __CONCAT(a,b) -#define s(name) CONCATX(name,SUFF) -#define m81(func) __m81_u(s(func)) - -float_type -s(__modf) (float_type x, float_type *iptr) -{ - float_type x_int, result; - unsigned long x_cond; - - __asm ("fintrz%.x %1, %0" : "=f" (x_int) : "f" (x)); - *iptr = x_int; - x_cond = __m81_test (x); - if (x_cond & __M81_COND_INF) - { - result = 0; - if (x_cond & __M81_COND_NEG) - result = -result; - } - else if (x_cond & __M81_COND_ZERO) - result = x; - else - result = x - x_int; - return result; -} -weak_alias (s(__modf), s(modf)) diff --git a/sysdeps/m68k/m680x0/fpu/s_modff.c b/sysdeps/m68k/m680x0/fpu/s_modff.c deleted file mode 100644 index 0c44d7c0ab..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_modff.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SUFF f -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_modfl.c b/sysdeps/m68k/m680x0/fpu/s_modfl.c deleted file mode 100644 index c7075b3ba9..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_modfl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SUFF l -#define float_type long double -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_nearbyint.c b/sysdeps/m68k/m680x0/fpu/s_nearbyint.c deleted file mode 100644 index b87f5e2160..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_nearbyint.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC nearbyint -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_nearbyintf.c b/sysdeps/m68k/m680x0/fpu/s_nearbyintf.c deleted file mode 100644 index 70d08ab44c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_nearbyintf.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC nearbyintf -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_nearbyintl.c b/sysdeps/m68k/m680x0/fpu/s_nearbyintl.c deleted file mode 100644 index 230cd7784c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_nearbyintl.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC nearbyintl -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_nextafterl.c b/sysdeps/m68k/m680x0/fpu/s_nextafterl.c deleted file mode 100644 index c46c0e76ec..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_nextafterl.c +++ /dev/null @@ -1,108 +0,0 @@ -/* s_nextafterl.c -- long double version of s_nextafter.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - * Fixed for m68k by Andreas Schwab . - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif - -/* IEEE functions - * nextafterl(x,y) - * return the next machine floating-point number of x in the - * direction toward y. - * Special cases: - */ - -#include -#include -#include - -long double __nextafterl(long double x, long double y) -{ - int32_t ix,iy,esx,esy; - u_int32_t hx,hy,lx,ly; - - GET_LDOUBLE_WORDS(esx,hx,lx,x); - GET_LDOUBLE_WORDS(esy,hy,ly,y); - ix = esx&0x7fff; /* |x| */ - iy = esy&0x7fff; /* |y| */ - - if(((ix==0x7fff)&&((hx&0x7fffffff)|lx)!=0) || /* x is nan */ - ((iy==0x7fff)&&((hy&0x7fffffff)|ly)!=0)) /* y is nan */ - return x+y; - if(x==y) return y; /* x=y, return y */ - if((ix|hx|lx)==0) { /* x == 0 */ - SET_LDOUBLE_WORDS(x,esy&0x8000,0,1);/* return +-minsubnormal */ - y = x*x; - math_force_eval (y); /* raise underflow flag */ - return x; - } - if(esx>=0) { /* x > 0 */ - if(esx>esy||((esx==esy) && (hx>hy||((hx==hy)&&(lx>ly))))) { - /* x > y, x -= ulp */ - if(lx==0) { - if (ix != 0 && hx == 0x80000000) hx = 0; - if (hx==0) esx -= 1; - hx -= 1; - } - lx -= 1; - } else { /* x < y, x += ulp */ - lx += 1; - if(lx==0) { - hx += 1; - if (hx==0) { - hx = 0x80000000; - esx += 1; - } - } - } - } else { /* x < 0 */ - if(esy>=0||esx>esy||((esx==esy) && (hx>hy||((hx==hy)&&(lx>ly))))){ - /* x < y, x -= ulp */ - if(lx==0) { - if (ix != 0 && hx == 0x80000000) hx = 0; - if (hx==0) esx -= 1; - hx -= 1; - } - lx -= 1; - } else { /* x > y, x += ulp */ - lx += 1; - if(lx==0) { - hx += 1; - if (hx==0) { - hx = 0x80000000; - esx += 1; - } - } - } - } - esy = esx&0x7fff; - if(esy==0x7fff) { - long double u = x + x; /* overflow */ - math_force_eval (u); - __set_errno (ERANGE); - } - if(esy==0 && (hx & 0x80000000) == 0) { /* underflow */ - y = x*x; - math_force_eval (y); /* raise underflow flag */ - __set_errno (ERANGE); - } - SET_LDOUBLE_WORDS(x,esx,hx,lx); - return x; -} -weak_alias (__nextafterl, nextafterl) -strong_alias (__nextafterl, __nexttowardl) -weak_alias (__nextafterl, nexttowardl) diff --git a/sysdeps/m68k/m680x0/fpu/s_remquo.c b/sysdeps/m68k/m680x0/fpu/s_remquo.c deleted file mode 100644 index 554751ca87..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_remquo.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Compute remainder and a congruent to the quotient. m68k fpu version - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifndef SUFF -#define SUFF -#endif -#ifndef float_type -#define float_type double -#endif - -#define CONCATX(a,b) __CONCAT(a,b) -#define s(name) CONCATX(name,SUFF) - -float_type -s(__remquo) (float_type x, float_type y, int *quo) -{ - float_type result; - int cquo, fpsr; - - __asm ("frem%.x %2,%0\n\tfmove%.l %/fpsr,%1" - : "=f" (result), "=dm" (fpsr) : "f" (y), "0" (x)); - cquo = (fpsr >> 16) & 0x7f; - if (fpsr & (1 << 23)) - cquo = -cquo; - *quo = cquo; - return result; -} -weak_alias (s(__remquo), s(remquo)) diff --git a/sysdeps/m68k/m680x0/fpu/s_remquof.c b/sysdeps/m68k/m680x0/fpu/s_remquof.c deleted file mode 100644 index 8a292fc26c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_remquof.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SUFF f -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_remquol.c b/sysdeps/m68k/m680x0/fpu/s_remquol.c deleted file mode 100644 index d236cfd1f9..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_remquol.c +++ /dev/null @@ -1,3 +0,0 @@ -#define SUFF l -#define float_type long double -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_rint.c b/sysdeps/m68k/m680x0/fpu/s_rint.c deleted file mode 100644 index f0f18c7346..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_rint.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC rint -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_rintf.c b/sysdeps/m68k/m680x0/fpu/s_rintf.c deleted file mode 100644 index 4e00cab0fb..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_rintf.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC rintf -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_rintl.c b/sysdeps/m68k/m680x0/fpu/s_rintl.c deleted file mode 100644 index 305667b3a1..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_rintl.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC rintl -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_scalbln.c b/sysdeps/m68k/m680x0/fpu/s_scalbln.c deleted file mode 100644 index 1009713fbc..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_scalbln.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Nothing to do. This function is the same as scalbn. So we define an - alias. */ diff --git a/sysdeps/m68k/m680x0/fpu/s_scalblnf.c b/sysdeps/m68k/m680x0/fpu/s_scalblnf.c deleted file mode 100644 index 5e558c3540..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_scalblnf.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Nothing to do. This function is the same as scalbnf. So we define an - alias. */ diff --git a/sysdeps/m68k/m680x0/fpu/s_scalblnl.c b/sysdeps/m68k/m680x0/fpu/s_scalblnl.c deleted file mode 100644 index cda2ec11c8..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_scalblnl.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Nothing to do. This function is the same as scalbnl. So we define an - alias. */ diff --git a/sysdeps/m68k/m680x0/fpu/s_scalbn.c b/sysdeps/m68k/m680x0/fpu/s_scalbn.c deleted file mode 100644 index 0a1ffdb734..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_scalbn.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define scalbln __no_scalbln_decl -#define scalblnf __no_scalblnf_decl -#define scalblnl __no_scalblnl_decl -#define __scalbln __no__scalbln_decl -#define __scalblnf __no__scalblnf_decl -#define __scalblnl __no__scalblnl_decl -#include -#undef scalbln -#undef scalblnf -#undef scalblnl -#undef __scalbln -#undef __scalblnf -#undef __scalblnl - -#ifndef suffix -#define suffix /*empty*/ -#endif -#ifndef float_type -#define float_type double -#endif - -#define __CONCATX(a,b) __CONCAT(a,b) - -float_type -__CONCATX(__scalbn,suffix) (float_type x, int exp) -{ - return __m81_u(__CONCATX(__scalbn,suffix))(x, exp); -} -strong_alias (__CONCATX(__scalbn,suffix), __CONCATX(__scalbln,suffix)) - -#include -#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_20) -compat_symbol (libc, __CONCATX(__scalbn,suffix), __CONCATX(scalbln,suffix), - GLIBC_2_1); -#endif diff --git a/sysdeps/m68k/m680x0/fpu/s_scalbnf.c b/sysdeps/m68k/m680x0/fpu/s_scalbnf.c deleted file mode 100644 index 547971836a..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_scalbnf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define suffix f -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_scalbnl.c b/sysdeps/m68k/m680x0/fpu/s_scalbnl.c deleted file mode 100644 index 874bafb04b..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_scalbnl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define suffix l -#define float_type long double -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_significand.c b/sysdeps/m68k/m680x0/fpu/s_significand.c deleted file mode 100644 index 34d4ea3d14..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_significand.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC significand -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_significandf.c b/sysdeps/m68k/m680x0/fpu/s_significandf.c deleted file mode 100644 index 4e769ca317..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_significandf.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC significandf -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_significandl.c b/sysdeps/m68k/m680x0/fpu/s_significandl.c deleted file mode 100644 index 8c6fc7e610..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_significandl.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC significandl -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_sin.c b/sysdeps/m68k/m680x0/fpu/s_sin.c deleted file mode 100644 index 953fb445cf..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_sin.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "mathimpl.h" - -#ifndef FUNC -# define FUNC sin -#endif -#ifndef float_type -# define float_type double -#endif - -#define CONCATX(a,b) __CONCAT(a,b) - -float_type -CONCATX(__,FUNC) (float_type x) -{ - if (__m81_test (x) & __M81_COND_INF) - __set_errno (EDOM); - return __m81_u(CONCATX(__, FUNC)) (x); -} -weak_alias (CONCATX(__, FUNC), FUNC) diff --git a/sysdeps/m68k/m680x0/fpu/s_sincos.c b/sysdeps/m68k/m680x0/fpu/s_sincos.c deleted file mode 100644 index ca93d93333..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_sincos.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifndef FUNC -#define FUNC sincos -#endif -#ifndef float_type -#define float_type double -#endif - -#define CONCATX(a,b) __CONCAT(a,b) - -void -CONCATX(__,FUNC) (float_type x, float_type *sinx, float_type *cosx) -{ - __m81_u(CONCATX(__,FUNC))(x, sinx, cosx); -} -weak_alias (CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/m68k/m680x0/fpu/s_sincosf.c b/sysdeps/m68k/m680x0/fpu/s_sincosf.c deleted file mode 100644 index 7ee2ec6600..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_sincosf.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC sincosf -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_sincosl.c b/sysdeps/m68k/m680x0/fpu/s_sincosl.c deleted file mode 100644 index f998cc0977..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_sincosl.c +++ /dev/null @@ -1,3 +0,0 @@ -#define FUNC sincosl -#define float_type long double -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_sinf.c b/sysdeps/m68k/m680x0/fpu/s_sinf.c deleted file mode 100644 index 304f4f76f6..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_sinf.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef FUNC -# define FUNC sinf -#endif -#define float_type float -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_sinl.c b/sysdeps/m68k/m680x0/fpu/s_sinl.c deleted file mode 100644 index 31dac0bee7..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_sinl.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef FUNC -# define FUNC sinl -#endif -#define float_type long double -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_tan.c b/sysdeps/m68k/m680x0/fpu/s_tan.c deleted file mode 100644 index dfbbbb2270..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_tan.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC tan -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_tanf.c b/sysdeps/m68k/m680x0/fpu/s_tanf.c deleted file mode 100644 index 9ae66ddbf3..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_tanf.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC tanf -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_tanh.c b/sysdeps/m68k/m680x0/fpu/s_tanh.c deleted file mode 100644 index ac2e7dbb79..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_tanh.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC tanh -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_tanhf.c b/sysdeps/m68k/m680x0/fpu/s_tanhf.c deleted file mode 100644 index 1addaae4ff..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_tanhf.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC tanhf -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_tanhl.c b/sysdeps/m68k/m680x0/fpu/s_tanhl.c deleted file mode 100644 index 6e997911f2..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_tanhl.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC tanhl -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_tanl.c b/sysdeps/m68k/m680x0/fpu/s_tanl.c deleted file mode 100644 index 27daf8f29b..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_tanl.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC tanl -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_trunc.c b/sysdeps/m68k/m680x0/fpu/s_trunc.c deleted file mode 100644 index 96f29a776c..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_trunc.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC trunc -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_truncf.c b/sysdeps/m68k/m680x0/fpu/s_truncf.c deleted file mode 100644 index 44dca748ca..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_truncf.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC truncf -#include diff --git a/sysdeps/m68k/m680x0/fpu/s_truncl.c b/sysdeps/m68k/m680x0/fpu/s_truncl.c deleted file mode 100644 index 8d35777aed..0000000000 --- a/sysdeps/m68k/m680x0/fpu/s_truncl.c +++ /dev/null @@ -1,2 +0,0 @@ -#define FUNC truncl -#include diff --git a/sysdeps/m68k/m680x0/fpu/sincos32.c b/sysdeps/m68k/m680x0/fpu/sincos32.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/sincos32.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/sincostab.c b/sysdeps/m68k/m680x0/fpu/sincostab.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/sincostab.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/slowexp.c b/sysdeps/m68k/m680x0/fpu/slowexp.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/slowexp.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/slowpow.c b/sysdeps/m68k/m680x0/fpu/slowpow.c deleted file mode 100644 index 1cc8931700..0000000000 --- a/sysdeps/m68k/m680x0/fpu/slowpow.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/t_exp.c b/sysdeps/m68k/m680x0/fpu/t_exp.c deleted file mode 100644 index fd37963b05..0000000000 --- a/sysdeps/m68k/m680x0/fpu/t_exp.c +++ /dev/null @@ -1 +0,0 @@ -/* Empty. Not needed. */ diff --git a/sysdeps/m68k/m680x0/lshift.S b/sysdeps/m68k/m680x0/lshift.S deleted file mode 100644 index 16b1b2f210..0000000000 --- a/sysdeps/m68k/m680x0/lshift.S +++ /dev/null @@ -1,168 +0,0 @@ -/* mc68020 __mpn_lshift -- Shift left a low-level natural-number integer. - -Copyright (C) 1996-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see . */ - -/* - INPUT PARAMETERS - res_ptr (sp + 4) - s_ptr (sp + 8) - s_size (sp + 16) - cnt (sp + 12) -*/ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define res_ptr a1 -#define s_ptr a0 -#define s_size d6 -#define cnt d4 - - TEXT -ENTRY(__mpn_lshift) - -/* Save used registers on the stack. */ - moveml R(d2)-R(d6)/R(a2),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (6*4) - cfi_rel_offset (R(d2), 0) - cfi_rel_offset (R(d3), 4) - cfi_rel_offset (R(d4), 8) - cfi_rel_offset (R(d5), 12) - cfi_rel_offset (R(d6), 16) - cfi_rel_offset (R(a2), 20) - -/* Copy the arguments to registers. */ - movel MEM_DISP(sp,28),R(res_ptr) - movel MEM_DISP(sp,32),R(s_ptr) - movel MEM_DISP(sp,36),R(s_size) - movel MEM_DISP(sp,40),R(cnt) - - moveql #1,R(d5) - cmpl R(d5),R(cnt) - bne L(Lnormal) - cmpl R(s_ptr),R(res_ptr) - bls L(Lspecial) /* jump if s_ptr >= res_ptr */ -#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) - lea MEM_INDX1(s_ptr,s_size,l,4),R(a2) -#else /* not mc68020 */ - movel R(s_size),R(d0) - asll #2,R(d0) - lea MEM_INDX(s_ptr,d0,l),R(a2) -#endif - cmpl R(res_ptr),R(a2) - bls L(Lspecial) /* jump if res_ptr >= s_ptr + s_size */ - -L(Lnormal:) - moveql #32,R(d5) - subl R(cnt),R(d5) - -#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) - lea MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr) - lea MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr) -#else /* not mc68000 */ - movel R(s_size),R(d0) - asll #2,R(d0) - addl R(s_size),R(s_ptr) - addl R(s_size),R(res_ptr) -#endif - movel MEM_PREDEC(s_ptr),R(d2) - movel R(d2),R(d0) - lsrl R(d5),R(d0) /* compute carry limb */ - - lsll R(cnt),R(d2) - movel R(d2),R(d1) - subql #1,R(s_size) - beq L(Lend) - lsrl #1,R(s_size) - bcs L(L1) - subql #1,R(s_size) - -L(Loop:) - movel MEM_PREDEC(s_ptr),R(d2) - movel R(d2),R(d3) - lsrl R(d5),R(d3) - orl R(d3),R(d1) - movel R(d1),MEM_PREDEC(res_ptr) - lsll R(cnt),R(d2) -L(L1:) - movel MEM_PREDEC(s_ptr),R(d1) - movel R(d1),R(d3) - lsrl R(d5),R(d3) - orl R(d3),R(d2) - movel R(d2),MEM_PREDEC(res_ptr) - lsll R(cnt),R(d1) - - dbf R(s_size),L(Loop) - subl #0x10000,R(s_size) - bcc L(Loop) - -L(Lend:) - movel R(d1),MEM_PREDEC(res_ptr) /* store least significant limb */ - -/* Restore used registers from stack frame. */ - moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2) - cfi_remember_state - cfi_adjust_cfa_offset (-6*4) - cfi_restore (R(d2)) - cfi_restore (R(d3)) - cfi_restore (R(d4)) - cfi_restore (R(d5)) - cfi_restore (R(d6)) - cfi_restore (R(a2)) - rts - -/* We loop from least significant end of the arrays, which is only - permissible if the source and destination don't overlap, since the - function is documented to work for overlapping source and destination. */ - - cfi_restore_state -L(Lspecial:) - clrl R(d0) /* initialize carry */ - eorw #1,R(s_size) - lsrl #1,R(s_size) - bcc L(LL1) - subql #1,R(s_size) - -L(LLoop:) - movel MEM_POSTINC(s_ptr),R(d2) - addxl R(d2),R(d2) - movel R(d2),MEM_POSTINC(res_ptr) -L(LL1:) - movel MEM_POSTINC(s_ptr),R(d2) - addxl R(d2),R(d2) - movel R(d2),MEM_POSTINC(res_ptr) - - dbf R(s_size),L(LLoop) - addxl R(d0),R(d0) /* save cy in lsb */ - subl #0x10000,R(s_size) - bcs L(LLend) - lsrl #1,R(d0) /* restore cy */ - bra L(LLoop) - -L(LLend:) -/* Restore used registers from stack frame. */ - moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2) - cfi_adjust_cfa_offset (-6*4) - cfi_restore (R(d2)) - cfi_restore (R(d3)) - cfi_restore (R(d4)) - cfi_restore (R(d5)) - cfi_restore (R(d6)) - cfi_restore (R(a2)) - rts -END(__mpn_lshift) diff --git a/sysdeps/m68k/m680x0/m68020/Makefile b/sysdeps/m68k/m680x0/m68020/Makefile deleted file mode 100644 index b17635467d..0000000000 --- a/sysdeps/m68k/m680x0/m68020/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),db2) -CPPFLAGS += -DHAVE_SPINLOCKS=1 -DHAVE_ASSEM_MC68020_GCC=1 -endif diff --git a/sysdeps/m68k/m680x0/m68020/addmul_1.S b/sysdeps/m68k/m680x0/m68020/addmul_1.S deleted file mode 100644 index 53856c0846..0000000000 --- a/sysdeps/m68k/m680x0/m68020/addmul_1.S +++ /dev/null @@ -1,88 +0,0 @@ -/* mc68020 __mpn_addmul_1 -- Multiply a limb vector with a limb and add - the result to a second limb vector. - -Copyright (C) 1992-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see . */ - -/* - INPUT PARAMETERS - res_ptr (sp + 4) - s1_ptr (sp + 8) - s1_size (sp + 12) - s2_limb (sp + 16) -*/ - -#include "sysdep.h" -#include "asm-syntax.h" - - TEXT -ENTRY(__mpn_addmul_1) - -#define res_ptr a0 -#define s1_ptr a1 -#define s1_size d2 -#define s2_limb d4 - -/* Save used registers on the stack. */ - moveml R(d2)-R(d5),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4*4) - cfi_rel_offset (R(d2), 0) - cfi_rel_offset (R(d3), 4) - cfi_rel_offset (R(d4), 8) - cfi_rel_offset (R(d5), 12) - -/* Copy the arguments to registers. Better use movem? */ - movel MEM_DISP(sp,20),R(res_ptr) - movel MEM_DISP(sp,24),R(s1_ptr) - movel MEM_DISP(sp,28),R(s1_size) - movel MEM_DISP(sp,32),R(s2_limb) - - eorw #1,R(s1_size) - clrl R(d1) - clrl R(d5) - lsrl #1,R(s1_size) - bcc L(L1) - subql #1,R(s1_size) - subl R(d0),R(d0) /* (d0,cy) <= (0,0) */ - -L(Loop:) - movel MEM_POSTINC(s1_ptr),R(d3) - mulul R(s2_limb),R(d1):R(d3) - addxl R(d0),R(d3) - addxl R(d5),R(d1) - addl R(d3),MEM_POSTINC(res_ptr) -L(L1:) movel MEM_POSTINC(s1_ptr),R(d3) - mulul R(s2_limb),R(d0):R(d3) - addxl R(d1),R(d3) - addxl R(d5),R(d0) - addl R(d3),MEM_POSTINC(res_ptr) - - dbf R(s1_size),L(Loop) - addxl R(d5),R(d0) - subl #0x10000,R(s1_size) - bcc L(Loop) - -/* Restore used registers from stack frame. */ - moveml MEM_POSTINC(sp),R(d2)-R(d5) - cfi_adjust_cfa_offset (-4*4) - cfi_restore (R(d2)) - cfi_restore (R(d3)) - cfi_restore (R(d4)) - cfi_restore (R(d5)) - - rts -END(__mpn_addmul_1) diff --git a/sysdeps/m68k/m680x0/m68020/atomic-machine.h b/sysdeps/m68k/m680x0/m68020/atomic-machine.h deleted file mode 100644 index 83238f51de..0000000000 --- a/sysdeps/m68k/m680x0/m68020/atomic-machine.h +++ /dev/null @@ -1,261 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int16_t atomic16_t; -typedef uint16_t uatomic16_t; -typedef int_fast16_t atomic_fast16_t; -typedef uint_fast16_t uatomic_fast16_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#define __HAVE_64B_ATOMICS 1 -#define USE_ATOMIC_COMPILER_BUILTINS 0 - -/* XXX Is this actually correct? */ -#define ATOMIC_EXCHANGE_USES_CAS 1 - -#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \ - ({ __typeof (*(mem)) __ret; \ - __asm __volatile ("cas%.b %0,%2,%1" \ - : "=d" (__ret), "+m" (*(mem)) \ - : "d" (newval), "0" (oldval)); \ - __ret; }) - -#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \ - ({ __typeof (*(mem)) __ret; \ - __asm __volatile ("cas%.w %0,%2,%1" \ - : "=d" (__ret), "+m" (*(mem)) \ - : "d" (newval), "0" (oldval)); \ - __ret; }) - -#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - ({ __typeof (*(mem)) __ret; \ - __asm __volatile ("cas%.l %0,%2,%1" \ - : "=d" (__ret), "+m" (*(mem)) \ - : "d" (newval), "0" (oldval)); \ - __ret; }) - -# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - ({ __typeof (*(mem)) __ret; \ - __typeof (mem) __memp = (mem); \ - __asm __volatile ("cas2%.l %0:%R0,%1:%R1,(%2):(%3)" \ - : "=d" (__ret) \ - : "d" ((__typeof (*(mem))) (newval)), "r" (__memp), \ - "r" ((char *) __memp + 4), "0" (oldval) \ - : "memory"); \ - __ret; }) - -#define atomic_exchange_acq(mem, newvalue) \ - ({ __typeof (*(mem)) __result = *(mem); \ - if (sizeof (*(mem)) == 1) \ - __asm __volatile ("1: cas%.b %0,%2,%1;" \ - " jbne 1b" \ - : "=d" (__result), "+m" (*(mem)) \ - : "d" (newvalue), "0" (__result)); \ - else if (sizeof (*(mem)) == 2) \ - __asm __volatile ("1: cas%.w %0,%2,%1;" \ - " jbne 1b" \ - : "=d" (__result), "+m" (*(mem)) \ - : "d" (newvalue), "0" (__result)); \ - else if (sizeof (*(mem)) == 4) \ - __asm __volatile ("1: cas%.l %0,%2,%1;" \ - " jbne 1b" \ - : "=d" (__result), "+m" (*(mem)) \ - : "d" (newvalue), "0" (__result)); \ - else \ - { \ - __typeof (mem) __memp = (mem); \ - __asm __volatile ("1: cas2%.l %0:%R0,%1:%R1,(%2):(%3);" \ - " jbne 1b" \ - : "=d" (__result) \ - : "d" ((__typeof (*(mem))) (newvalue)), \ - "r" (__memp), "r" ((char *) __memp + 4), \ - "0" (__result) \ - : "memory"); \ - } \ - __result; }) - -#define atomic_exchange_and_add(mem, value) \ - ({ __typeof (*(mem)) __result = *(mem); \ - __typeof (*(mem)) __temp; \ - if (sizeof (*(mem)) == 1) \ - __asm __volatile ("1: move%.b %0,%2;" \ - " add%.b %3,%2;" \ - " cas%.b %0,%2,%1;" \ - " jbne 1b" \ - : "=d" (__result), "+m" (*(mem)), \ - "=&d" (__temp) \ - : "d" (value), "0" (__result)); \ - else if (sizeof (*(mem)) == 2) \ - __asm __volatile ("1: move%.w %0,%2;" \ - " add%.w %3,%2;" \ - " cas%.w %0,%2,%1;" \ - " jbne 1b" \ - : "=d" (__result), "+m" (*(mem)), \ - "=&d" (__temp) \ - : "d" (value), "0" (__result)); \ - else if (sizeof (*(mem)) == 4) \ - __asm __volatile ("1: move%.l %0,%2;" \ - " add%.l %3,%2;" \ - " cas%.l %0,%2,%1;" \ - " jbne 1b" \ - : "=d" (__result), "+m" (*(mem)), \ - "=&d" (__temp) \ - : "d" (value), "0" (__result)); \ - else \ - { \ - __typeof (mem) __memp = (mem); \ - __asm __volatile ("1: move%.l %0,%1;" \ - " move%.l %R0,%R1;" \ - " add%.l %R2,%R1;" \ - " addx%.l %2,%1;" \ - " cas2%.l %0:%R0,%1:%R1,(%3):(%4);" \ - " jbne 1b" \ - : "=d" (__result), "=&d" (__temp) \ - : "d" ((__typeof (*(mem))) (value)), "r" (__memp), \ - "r" ((char *) __memp + 4), "0" (__result) \ - : "memory"); \ - } \ - __result; }) - -#define atomic_add(mem, value) \ - (void) ({ if (sizeof (*(mem)) == 1) \ - __asm __volatile ("add%.b %1,%0" \ - : "+m" (*(mem)) \ - : "id" (value)); \ - else if (sizeof (*(mem)) == 2) \ - __asm __volatile ("add%.w %1,%0" \ - : "+m" (*(mem)) \ - : "id" (value)); \ - else if (sizeof (*(mem)) == 4) \ - __asm __volatile ("add%.l %1,%0" \ - : "+m" (*(mem)) \ - : "id" (value)); \ - else \ - { \ - __typeof (mem) __memp = (mem); \ - __typeof (*(mem)) __oldval = *__memp; \ - __typeof (*(mem)) __temp; \ - __asm __volatile ("1: move%.l %0,%1;" \ - " move%.l %R0,%R1;" \ - " add%.l %R2,%R1;" \ - " addx%.l %2,%1;" \ - " cas2%.l %0:%R0,%1:%R1,(%3):(%4);" \ - " jbne 1b" \ - : "=d" (__oldval), "=&d" (__temp) \ - : "d" ((__typeof (*(mem))) (value)), \ - "r" (__memp), "r" ((char *) __memp + 4), \ - "0" (__oldval) \ - : "memory"); \ - } \ - }) - -#define atomic_increment_and_test(mem) \ - ({ char __result; \ - if (sizeof (*(mem)) == 1) \ - __asm __volatile ("addq%.b %#1,%1; seq %0" \ - : "=dm" (__result), "+m" (*(mem))); \ - else if (sizeof (*(mem)) == 2) \ - __asm __volatile ("addq%.w %#1,%1; seq %0" \ - : "=dm" (__result), "+m" (*(mem))); \ - else if (sizeof (*(mem)) == 4) \ - __asm __volatile ("addq%.l %#1,%1; seq %0" \ - : "=dm" (__result), "+m" (*(mem))); \ - else \ - { \ - __typeof (mem) __memp = (mem); \ - __typeof (*(mem)) __oldval = *__memp; \ - __typeof (*(mem)) __temp; \ - __asm __volatile ("1: move%.l %1,%2;" \ - " move%.l %R1,%R2;" \ - " addq%.l %#1,%R2;" \ - " addx%.l %5,%2;" \ - " seq %0;" \ - " cas2%.l %1:%R1,%2:%R2,(%3):(%4);" \ - " jbne 1b" \ - : "=&dm" (__result), "=d" (__oldval), \ - "=&d" (__temp) \ - : "r" (__memp), "r" ((char *) __memp + 4), \ - "d" (0), "1" (__oldval) \ - : "memory"); \ - } \ - __result; }) - -#define atomic_decrement_and_test(mem) \ - ({ char __result; \ - if (sizeof (*(mem)) == 1) \ - __asm __volatile ("subq%.b %#1,%1; seq %0" \ - : "=dm" (__result), "+m" (*(mem))); \ - else if (sizeof (*(mem)) == 2) \ - __asm __volatile ("subq%.w %#1,%1; seq %0" \ - : "=dm" (__result), "+m" (*(mem))); \ - else if (sizeof (*(mem)) == 4) \ - __asm __volatile ("subq%.l %#1,%1; seq %0" \ - : "=dm" (__result), "+m" (*(mem))); \ - else \ - { \ - __typeof (mem) __memp = (mem); \ - __typeof (*(mem)) __oldval = *__memp; \ - __typeof (*(mem)) __temp; \ - __asm __volatile ("1: move%.l %1,%2;" \ - " move%.l %R1,%R2;" \ - " subq%.l %#1,%R2;" \ - " subx%.l %5,%2;" \ - " seq %0;" \ - " cas2%.l %1:%R1,%2:%R2,(%3):(%4);" \ - " jbne 1b" \ - : "=&dm" (__result), "=d" (__oldval), \ - "=&d" (__temp) \ - : "r" (__memp), "r" ((char *) __memp + 4), \ - "d" (0), "1" (__oldval) \ - : "memory"); \ - } \ - __result; }) - -#define atomic_bit_set(mem, bit) \ - __asm __volatile ("bfset %0{%1,#1}" \ - : "+m" (*(mem)) \ - : "di" (sizeof (*(mem)) * 8 - (bit) - 1)) - -#define atomic_bit_test_set(mem, bit) \ - ({ char __result; \ - __asm __volatile ("bfset %1{%2,#1}; sne %0" \ - : "=dm" (__result), "+m" (*(mem)) \ - : "di" (sizeof (*(mem)) * 8 - (bit) - 1)); \ - __result; }) diff --git a/sysdeps/m68k/m680x0/m68020/bits/string.h b/sysdeps/m68k/m680x0/m68020/bits/string.h deleted file mode 100644 index 120afc0d79..0000000000 --- a/sysdeps/m68k/m680x0/m68020/bits/string.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Optimized, inlined string functions. m680x0 version, x >= 2. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _STRING_H -# error "Never use directly; include instead." -#endif - -/* Use the unaligned string inline ABI. */ -#define _STRING_INLINE_unaligned 1 diff --git a/sysdeps/m68k/m680x0/m68020/mul_1.S b/sysdeps/m68k/m680x0/m68020/mul_1.S deleted file mode 100644 index ee871d2e44..0000000000 --- a/sysdeps/m68k/m680x0/m68020/mul_1.S +++ /dev/null @@ -1,83 +0,0 @@ -/* mc68020 __mpn_mul_1 -- Multiply a limb vector with a limb and store - the result in a second limb vector. - -Copyright (C) 1992-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see . */ - -/* - INPUT PARAMETERS - res_ptr (sp + 4) - s1_ptr (sp + 8) - s1_size (sp + 12) - s2_limb (sp + 16) -*/ - -#include "sysdep.h" -#include "asm-syntax.h" - - TEXT -ENTRY(__mpn_mul_1) - -#define res_ptr a0 -#define s1_ptr a1 -#define s1_size d2 -#define s2_limb d4 - -/* Save used registers on the stack. */ - moveml R(d2)-R(d4),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (3*4) - cfi_rel_offset (R(d2), 0) - cfi_rel_offset (R(d3), 4) - cfi_rel_offset (R(d4), 8) - -/* Copy the arguments to registers. Better use movem? */ - movel MEM_DISP(sp,16),R(res_ptr) - movel MEM_DISP(sp,20),R(s1_ptr) - movel MEM_DISP(sp,24),R(s1_size) - movel MEM_DISP(sp,28),R(s2_limb) - - eorw #1,R(s1_size) - clrl R(d1) - lsrl #1,R(s1_size) - bcc L(L1) - subql #1,R(s1_size) - subl R(d0),R(d0) /* (d0,cy) <= (0,0) */ - -L(Loop:) - movel MEM_POSTINC(s1_ptr),R(d3) - mulul R(s2_limb),R(d1):R(d3) - addxl R(d0),R(d3) - movel R(d3),MEM_POSTINC(res_ptr) -L(L1:) movel MEM_POSTINC(s1_ptr),R(d3) - mulul R(s2_limb),R(d0):R(d3) - addxl R(d1),R(d3) - movel R(d3),MEM_POSTINC(res_ptr) - - dbf R(s1_size),L(Loop) - clrl R(d3) - addxl R(d3),R(d0) - subl #0x10000,R(s1_size) - bcc L(Loop) - -/* Restore used registers from stack frame. */ - moveml MEM_POSTINC(sp),R(d2)-R(d4) - cfi_adjust_cfa_offset (-3*4) - cfi_restore (R(d2)) - cfi_restore (R(d3)) - cfi_restore (R(d4)) - rts -END(__mpn_mul_1) diff --git a/sysdeps/m68k/m680x0/m68020/string_private.h b/sysdeps/m68k/m680x0/m68020/string_private.h deleted file mode 100644 index a35ce053bb..0000000000 --- a/sysdeps/m68k/m680x0/m68020/string_private.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Define _STRING_ARCH_unaligned. m680x0 version, x >= 2. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Tell the generic inline macros that unaligned memory access is - possible. */ -#define _STRING_ARCH_unaligned 1 diff --git a/sysdeps/m68k/m680x0/m68020/submul_1.S b/sysdeps/m68k/m680x0/m68020/submul_1.S deleted file mode 100644 index 268e6bf38d..0000000000 --- a/sysdeps/m68k/m680x0/m68020/submul_1.S +++ /dev/null @@ -1,88 +0,0 @@ -/* mc68020 __mpn_submul_1 -- Multiply a limb vector with a limb and subtract - the result from a second limb vector. - -Copyright (C) 1992-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see . */ - -/* - INPUT PARAMETERS - res_ptr (sp + 4) - s1_ptr (sp + 8) - s1_size (sp + 12) - s2_limb (sp + 16) -*/ - -#include "sysdep.h" -#include "asm-syntax.h" - - TEXT -ENTRY(__mpn_submul_1) - -#define res_ptr a0 -#define s1_ptr a1 -#define s1_size d2 -#define s2_limb d4 - -/* Save used registers on the stack. */ - moveml R(d2)-R(d5),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4*4) - cfi_rel_offset (R(d2), 0) - cfi_rel_offset (R(d3), 4) - cfi_rel_offset (R(d4), 8) - cfi_rel_offset (R(d5), 12) - -/* Copy the arguments to registers. Better use movem? */ - movel MEM_DISP(sp,20),R(res_ptr) - movel MEM_DISP(sp,24),R(s1_ptr) - movel MEM_DISP(sp,28),R(s1_size) - movel MEM_DISP(sp,32),R(s2_limb) - - eorw #1,R(s1_size) - clrl R(d1) - clrl R(d5) - lsrl #1,R(s1_size) - bcc L(L1) - subql #1,R(s1_size) - subl R(d0),R(d0) /* (d0,cy) <= (0,0) */ - -L(Loop:) - movel MEM_POSTINC(s1_ptr),R(d3) - mulul R(s2_limb),R(d1):R(d3) - addxl R(d0),R(d3) - addxl R(d5),R(d1) - subl R(d3),MEM_POSTINC(res_ptr) -L(L1:) movel MEM_POSTINC(s1_ptr),R(d3) - mulul R(s2_limb),R(d0):R(d3) - addxl R(d1),R(d3) - addxl R(d5),R(d0) - subl R(d3),MEM_POSTINC(res_ptr) - - dbf R(s1_size),L(Loop) - addxl R(d5),R(d0) - subl #0x10000,R(s1_size) - bcc L(Loop) - -/* Restore used registers from stack frame. */ - moveml MEM_POSTINC(sp),R(d2)-R(d5) - cfi_adjust_cfa_offset (-4*4) - cfi_restore (R(d2)) - cfi_restore (R(d3)) - cfi_restore (R(d4)) - cfi_restore (R(d5)) - - rts -END(__mpn_submul_1) diff --git a/sysdeps/m68k/m680x0/m68020/wordcopy.S b/sysdeps/m68k/m680x0/m68020/wordcopy.S deleted file mode 100644 index 4fb1a4518f..0000000000 --- a/sysdeps/m68k/m680x0/m68020/wordcopy.S +++ /dev/null @@ -1 +0,0 @@ -/* Empty, not needed. */ diff --git a/sysdeps/m68k/m680x0/printf_fphex.c b/sysdeps/m68k/m680x0/printf_fphex.c deleted file mode 100644 index d021a090ab..0000000000 --- a/sysdeps/m68k/m680x0/printf_fphex.c +++ /dev/null @@ -1,2 +0,0 @@ -#define LONG_DOUBLE_DENORM_BIAS IEEE854_LONG_DOUBLE_BIAS -#include diff --git a/sysdeps/m68k/m680x0/rshift.S b/sysdeps/m68k/m680x0/rshift.S deleted file mode 100644 index 911179a273..0000000000 --- a/sysdeps/m68k/m680x0/rshift.S +++ /dev/null @@ -1,167 +0,0 @@ -/* mc68020 __mpn_rshift -- Shift right a low-level natural-number integer. - -Copyright (C) 1996-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see . */ - -/* - INPUT PARAMETERS - res_ptr (sp + 4) - s_ptr (sp + 8) - s_size (sp + 16) - cnt (sp + 12) -*/ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define res_ptr a1 -#define s_ptr a0 -#define s_size d6 -#define cnt d4 - - TEXT -ENTRY(__mpn_rshift) -/* Save used registers on the stack. */ - moveml R(d2)-R(d6)/R(a2),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (6*4) - cfi_rel_offset (R(d2), 0) - cfi_rel_offset (R(d3), 4) - cfi_rel_offset (R(d4), 8) - cfi_rel_offset (R(d5), 12) - cfi_rel_offset (R(d6), 16) - cfi_rel_offset (R(a2), 20) - -/* Copy the arguments to registers. */ - movel MEM_DISP(sp,28),R(res_ptr) - movel MEM_DISP(sp,32),R(s_ptr) - movel MEM_DISP(sp,36),R(s_size) - movel MEM_DISP(sp,40),R(cnt) - - moveql #1,R(d5) - cmpl R(d5),R(cnt) - bne L(Lnormal) - cmpl R(res_ptr),R(s_ptr) - bls L(Lspecial) /* jump if res_ptr >= s_ptr */ -#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) - lea MEM_INDX1(res_ptr,s_size,l,4),R(a2) -#else /* not mc68020 */ - movel R(s_size),R(d0) - asll #2,R(d0) - lea MEM_INDX(res_ptr,d0,l),R(a2) -#endif - cmpl R(s_ptr),R(a2) - bls L(Lspecial) /* jump if s_ptr >= res_ptr + s_size */ - -L(Lnormal:) - moveql #32,R(d5) - subl R(cnt),R(d5) - movel MEM_POSTINC(s_ptr),R(d2) - movel R(d2),R(d0) - lsll R(d5),R(d0) /* compute carry limb */ - - lsrl R(cnt),R(d2) - movel R(d2),R(d1) - subql #1,R(s_size) - beq L(Lend) - lsrl #1,R(s_size) - bcs L(L1) - subql #1,R(s_size) - -L(Loop:) - movel MEM_POSTINC(s_ptr),R(d2) - movel R(d2),R(d3) - lsll R(d5),R(d3) - orl R(d3),R(d1) - movel R(d1),MEM_POSTINC(res_ptr) - lsrl R(cnt),R(d2) -L(L1:) - movel MEM_POSTINC(s_ptr),R(d1) - movel R(d1),R(d3) - lsll R(d5),R(d3) - orl R(d3),R(d2) - movel R(d2),MEM_POSTINC(res_ptr) - lsrl R(cnt),R(d1) - - dbf R(s_size),L(Loop) - subl #0x10000,R(s_size) - bcc L(Loop) - -L(Lend:) - movel R(d1),MEM(res_ptr) /* store most significant limb */ - -/* Restore used registers from stack frame. */ - moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2) - cfi_remember_state - cfi_adjust_cfa_offset (-6*4) - cfi_restore (R(d2)) - cfi_restore (R(d3)) - cfi_restore (R(d4)) - cfi_restore (R(d5)) - cfi_restore (R(d6)) - cfi_restore (R(a2)) - rts - -/* We loop from most significant end of the arrays, which is only - permissible if the source and destination don't overlap, since the - function is documented to work for overlapping source and destination. */ - - cfi_restore_state -L(Lspecial:) -#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) - lea MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr) - lea MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr) -#else /* not mc68000 */ - movel R(s_size),R(d0) - asll #2,R(d0) - addl R(s_size),R(s_ptr) - addl R(s_size),R(res_ptr) -#endif - - clrl R(d0) /* initialize carry */ - eorw #1,R(s_size) - lsrl #1,R(s_size) - bcc L(LL1) - subql #1,R(s_size) - -L(LLoop:) - movel MEM_PREDEC(s_ptr),R(d2) - roxrl #1,R(d2) - movel R(d2),MEM_PREDEC(res_ptr) -L(LL1:) - movel MEM_PREDEC(s_ptr),R(d2) - roxrl #1,R(d2) - movel R(d2),MEM_PREDEC(res_ptr) - - dbf R(s_size),L(LLoop) - roxrl #1,R(d0) /* save cy in msb */ - subl #0x10000,R(s_size) - bcs L(LLend) - addl R(d0),R(d0) /* restore cy */ - bra L(LLoop) - -L(LLend:) -/* Restore used registers from stack frame. */ - moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2) - cfi_adjust_cfa_offset (-6*4) - cfi_restore (R(d2)) - cfi_restore (R(d3)) - cfi_restore (R(d4)) - cfi_restore (R(d5)) - cfi_restore (R(d6)) - cfi_restore (R(a2)) - rts -END(__mpn_rshift) diff --git a/sysdeps/m68k/m680x0/strtold_l.c b/sysdeps/m68k/m680x0/strtold_l.c deleted file mode 100644 index 481d9924c2..0000000000 --- a/sysdeps/m68k/m680x0/strtold_l.c +++ /dev/null @@ -1,2 +0,0 @@ -#define DENORM_EXP (MIN_EXP - 1) -#include diff --git a/sysdeps/m68k/m680x0/sub_n.S b/sysdeps/m68k/m680x0/sub_n.S deleted file mode 100644 index 9836b88be7..0000000000 --- a/sysdeps/m68k/m680x0/sub_n.S +++ /dev/null @@ -1,82 +0,0 @@ -/* mc68020 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and - store difference in a third limb vector. - -Copyright (C) 1992-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see . */ - -/* - INPUT PARAMETERS - res_ptr (sp + 4) - s1_ptr (sp + 8) - s2_ptr (sp + 16) - size (sp + 12) -*/ - -#include "sysdep.h" -#include "asm-syntax.h" - - TEXT -ENTRY(__mpn_sub_n) -/* Save used registers on the stack. */ - movel R(d2),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4) - movel R(a2),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4) - cfi_rel_offset (R(d2), 4) - cfi_rel_offset (R(a2), 0) - -/* Copy the arguments to registers. Better use movem? */ - movel MEM_DISP(sp,12),R(a2) - movel MEM_DISP(sp,16),R(a0) - movel MEM_DISP(sp,20),R(a1) - movel MEM_DISP(sp,24),R(d2) - - eorw #1,R(d2) - lsrl #1,R(d2) - bcc L(L1) - subql #1,R(d2) /* clears cy as side effect */ - -L(Loop:) - movel MEM_POSTINC(a0),R(d0) - movel MEM_POSTINC(a1),R(d1) - subxl R(d1),R(d0) - movel R(d0),MEM_POSTINC(a2) -L(L1:) movel MEM_POSTINC(a0),R(d0) - movel MEM_POSTINC(a1),R(d1) - subxl R(d1),R(d0) - movel R(d0),MEM_POSTINC(a2) - - dbf R(d2),L(Loop) /* loop until 16 lsb of %4 == -1 */ - subxl R(d0),R(d0) /* d0 <= -cy; save cy as 0 or -1 in d0 */ - subl #0x10000,R(d2) - bcs L(L2) - addl R(d0),R(d0) /* restore cy */ - bra L(Loop) - -L(L2:) - negl R(d0) - -/* Restore used registers from stack frame. */ - movel MEM_POSTINC(sp),R(a2) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(a2)) - movel MEM_POSTINC(sp),R(d2) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d2)) - - rts -END(__mpn_sub_n) diff --git a/sysdeps/m68k/m680x0/sysdep.h b/sysdeps/m68k/m680x0/sysdep.h deleted file mode 100644 index b9235fcb42..0000000000 --- a/sysdeps/m68k/m680x0/sysdep.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Assembler macros for m680x0. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifdef __ASSEMBLER__ - -/* Perform operation OP with PC-relative SRC as the first operand and - DST as the second. TMP is available as a temporary if needed. */ -# define PCREL_OP(OP, SRC, DST, TMP) \ - OP SRC(%pc), DST - -/* Load the address of the GOT into register R. */ -# define LOAD_GOT(R) \ - lea _GLOBAL_OFFSET_TABLE_@GOTPC (%pc), R - -#else - -/* As above, but PC is the spelling of the PC register. We need this - so that the macro can be used in both normal and extended asms. */ -#define PCREL_OP(OP, SRC, DST, TMP, PC) \ - OP " " SRC "(" PC "), " DST - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/m68k/memchr.S b/sysdeps/m68k/memchr.S deleted file mode 100644 index cfa86602e8..0000000000 --- a/sysdeps/m68k/memchr.S +++ /dev/null @@ -1,307 +0,0 @@ -/* memchr (str, ch, n) -- Return pointer to first occurrence of CH in the - first N bytes of STR. - For Motorola 68000. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include "asm-syntax.h" - - TEXT -ENTRY(__memchr) - /* Save the callee-saved registers we use. */ -#ifdef __mcoldfire__ - movel R(d2),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4) - movel R(d3),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4) - movel R(d4),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4) - cfi_rel_offset (R(d2), 8) - cfi_rel_offset (R(d3), 4) - cfi_rel_offset (R(d4), 0) -#else - moveml R(d2)-R(d4),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (3*4) - cfi_rel_offset (R(d2), 0) - cfi_rel_offset (R(d3), 4) - cfi_rel_offset (R(d4), 8) -#endif - - /* Get string pointer, character and length. */ - movel MEM_DISP(sp,16),R(a0) - moveb MEM_DISP(sp,23),R(d0) - movel MEM_DISP(sp,24),R(d4) - - /* Check if at least four bytes left to search. */ -#ifdef __mcoldfire__ - subql #4,R(d4) - bcs L(L6) - addql #4,R(d4) -#else - moveql #4,R(d1) - cmpl R(d1),R(d4) - bcs L(L6) -#endif - - /* Distribute the character to all bytes of a longword. */ - movel R(d0),R(d1) - lsll #8,R(d1) - moveb R(d0),R(d1) - movel R(d1),R(d0) - swap R(d0) - movew R(d1),R(d0) - - /* First search for the character one byte at a time until the - pointer is aligned to a longword boundary. */ - movel R(a0),R(d1) -#ifdef __mcoldfire__ - andl #3,R(d1) -#else - andw #3,R(d1) -#endif - beq L(L1) - cmpb MEM(a0),R(d0) - beq L(L9) - addql #1,R(a0) - subql #1,R(d4) - beq L(L7) - -#ifdef __mcoldfire__ - subql #3,R(d1) -#else - subqw #3,R(d1) -#endif - beq L(L1) - cmpb MEM(a0),R(d0) - beq L(L9) - addql #1,R(a0) - subql #1,R(d4) - beq L(L7) - -#ifdef __mcoldfire__ - addql #1,R(d1) -#else - addqw #1,R(d1) -#endif - beq L(L1) - cmpb MEM(a0),R(d0) - beq L(L9) - addql #1,R(a0) - subql #1,R(d4) - beq L(L7) - -L(L1:) - /* Load the magic bits. Unlike the generic implementation we can - use the carry bit as the fourth hole. */ - movel #0xfefefeff,R(d3) - - /* We exit the loop if adding MAGIC_BITS to LONGWORD fails to - change any of the hole bits of LONGWORD. - - 1) Is this safe? Will it catch all the zero bytes? - Suppose there is a byte with all zeros. Any carry bits - propagating from its left will fall into the hole at its - least significant bit and stop. Since there will be no - carry from its most significant bit, the LSB of the - byte to the left will be unchanged, and the zero will be - detected. - - 2) Is this worthwhile? Will it ignore everything except - zero bytes? Suppose every byte of LONGWORD has a bit set - somewhere. There will be a carry into bit 8. If bit 8 - is set, this will carry into bit 16. If bit 8 is clear, - one of bits 9-15 must be set, so there will be a carry - into bit 16. Similarly, there will be a carry into bit - 24. If one of bits 24-31 is set, there will be a carry - into bit 32 (=carry flag), so all of the hole bits will - be changed. - - 3) But wait! Aren't we looking for C, not zero? - Good point. So what we do is XOR LONGWORD with a longword, - each of whose bytes is C. This turns each byte that is C - into a zero. */ - - /* Still at least 4 bytes to search? */ - subql #4,R(d4) - bcs L(L6) - -L(L2:) - /* Get the longword in question. */ - movel MEM_POSTINC(a0),R(d1) - /* XOR with the byte we search for. */ - eorl R(d0),R(d1) - - /* Add the magic value. We get carry bits reported for each byte - which is not C. */ - movel R(d3),R(d2) - addl R(d1),R(d2) - - /* Check the fourth carry bit before it is clobbered by the next - XOR. If it is not set we have a hit. */ - bcc L(L8) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits. */ - eorl R(d1),R(d2) - - /* Now test for the other three overflow bits. - Set all non-carry bits. */ - orl R(d3),R(d2) - /* Add 1 to get zero if all carry bits were set. */ - addql #1,R(d2) - - /* If we don't get zero then at least one byte of the word equals - C. */ - bne L(L8) - - /* Still at least 4 bytes to search? */ - subql #4,R(d4) - bcs L(L6) - - /* Get the longword in question. */ - movel MEM_POSTINC(a0),R(d1) - /* XOR with the byte we search for. */ - eorl R(d0),R(d1) - - /* Add the magic value. We get carry bits reported for each byte - which is not C. */ - movel R(d3),R(d2) - addl R(d1),R(d2) - - /* Check the fourth carry bit before it is clobbered by the next - XOR. If it is not set we have a hit. */ - bcc L(L8) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits */ - eorl R(d1),R(d2) - - /* Now test for the other three overflow bits. - Set all non-carry bits. */ - orl R(d3),R(d2) - /* Add 1 to get zero if all carry bits were set. */ - addql #1,R(d2) - - /* If we don't get zero then at least one byte of the word equals - C. */ - bne L(L8) - - /* Still at least 4 bytes to search? */ - subql #4,R(d4) - bcc L(L2) - -L(L6:) - /* Search one byte at a time in the remaining less than 4 bytes. */ -#ifdef __mcoldfire__ - addql #4,R(d4) -#else - andw #3,R(d4) -#endif - beq L(L7) - cmpb MEM(a0),R(d0) - beq L(L9) - addql #1,R(a0) - -#ifdef __mcoldfire__ - subql #1,R(d4) -#else - subqw #1,R(d4) -#endif - beq L(L7) - cmpb MEM(a0),R(d0) - beq L(L9) - addql #1,R(a0) - -#ifdef __mcoldfire__ - subql #1,R(d4) -#else - subqw #1,R(d4) -#endif - beq L(L7) - cmpb MEM(a0),R(d0) - beq L(L9) - -L(L7:) - /* Return NULL. */ - clrl R(d0) - movel R(d0),R(a0) -#ifdef __mcoldfire__ - movel MEM_POSTINC(sp),R(d4) - cfi_remember_state - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d4)) - movel MEM_POSTINC(sp),R(d3) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d3)) - movel MEM_POSTINC(sp),R(d2) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d2)) -#else - moveml MEM_POSTINC(sp),R(d2)-R(d4) - cfi_remember_state - cfi_adjust_cfa_offset (-3*4) - cfi_restore (R(d2)) - cfi_restore (R(d3)) - cfi_restore (R(d4)) -#endif - rts - - cfi_restore_state -L(L8:) - /* We have a hit. Check to see which byte it was. First - compensate for the autoincrement in the loop. */ - subql #4,R(a0) - - cmpb MEM(a0),R(d0) - beq L(L9) - addql #1,R(a0) - - cmpb MEM(a0),R(d0) - beq L(L9) - addql #1,R(a0) - - cmpb MEM(a0),R(d0) - beq L(L9) - addql #1,R(a0) - - /* Otherwise the fourth byte must equal C. */ -L(L9:) - movel R(a0),R(d0) -#ifdef __mcoldfire__ - movel MEM_POSTINC(sp),R(d4) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d4)) - movel MEM_POSTINC(sp),R(d3) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d3)) - movel MEM_POSTINC(sp),R(d2) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d2)) -#else - moveml MEM_POSTINC(sp),R(d2)-R(d4) - cfi_adjust_cfa_offset (-3*4) - cfi_restore (R(d2)) - cfi_restore (R(d3)) - cfi_restore (R(d4)) -#endif - rts -END(__memchr) - -weak_alias (__memchr, memchr) -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/m68k/memcopy.h b/sysdeps/m68k/memcopy.h deleted file mode 100644 index 81ebd1572e..0000000000 --- a/sysdeps/m68k/memcopy.h +++ /dev/null @@ -1,99 +0,0 @@ -/* memcopy.h -- definitions for memory copy functions. Motorola 68020 version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Torbjorn Granlund (tege@sics.se). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#if defined(__mc68020__) || defined(mc68020) - -#undef OP_T_THRES -#define OP_T_THRES 16 - -/* WORD_COPY_FWD and WORD_COPY_BWD are not symmetric on the 68020, - because of its weird instruction overlap characteristics. */ - -#undef WORD_COPY_FWD -#define WORD_COPY_FWD(dst_bp, src_bp, nbytes_left, nbytes) \ - do \ - { \ - size_t __nwords = (nbytes) / sizeof (op_t); \ - size_t __nblocks = __nwords / 8 + 1; \ - dst_bp -= (8 - __nwords % 8) * sizeof (op_t); \ - src_bp -= (8 - __nwords % 8) * sizeof (op_t); \ - switch (__nwords % 8) \ - do \ - { \ - ((op_t *) dst_bp)[0] = ((op_t *) src_bp)[0]; \ - case 7: \ - ((op_t *) dst_bp)[1] = ((op_t *) src_bp)[1]; \ - case 6: \ - ((op_t *) dst_bp)[2] = ((op_t *) src_bp)[2]; \ - case 5: \ - ((op_t *) dst_bp)[3] = ((op_t *) src_bp)[3]; \ - case 4: \ - ((op_t *) dst_bp)[4] = ((op_t *) src_bp)[4]; \ - case 3: \ - ((op_t *) dst_bp)[5] = ((op_t *) src_bp)[5]; \ - case 2: \ - ((op_t *) dst_bp)[6] = ((op_t *) src_bp)[6]; \ - case 1: \ - ((op_t *) dst_bp)[7] = ((op_t *) src_bp)[7]; \ - case 0: \ - src_bp += 32; \ - dst_bp += 32; \ - __nblocks--; \ - } \ - while (__nblocks != 0); \ - (nbytes_left) = (nbytes) % sizeof (op_t); \ - } while (0) - -#undef WORD_COPY_BWD -#define WORD_COPY_BWD(dst_ep, src_ep, nbytes_left, nbytes) \ - do \ - { \ - size_t __nblocks = (nbytes) / 32 + 1; \ - op_t *__dst_ep = (op_t *) (dst_ep); \ - op_t *__src_ep = (op_t *) (src_ep); \ - switch ((nbytes) / sizeof (op_t) % 8) \ - do \ - { \ - *--__dst_ep = *--__src_ep; \ - case 7: \ - *--__dst_ep = *--__src_ep; \ - case 6: \ - *--__dst_ep = *--__src_ep; \ - case 5: \ - *--__dst_ep = *--__src_ep; \ - case 4: \ - *--__dst_ep = *--__src_ep; \ - case 3: \ - *--__dst_ep = *--__src_ep; \ - case 2: \ - *--__dst_ep = *--__src_ep; \ - case 1: \ - *--__dst_ep = *--__src_ep; \ - case 0: \ - __nblocks--; \ - } \ - while (__nblocks != 0); \ - (nbytes_left) = (nbytes) % sizeof (op_t); \ - (dst_ep) = (unsigned long) __dst_ep; \ - (src_ep) = (unsigned long) __src_ep; \ - } while (0) - -#endif diff --git a/sysdeps/m68k/memusage.h b/sysdeps/m68k/memusage.h deleted file mode 100644 index b4e632d2bd..0000000000 --- a/sysdeps/m68k/memusage.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -#define GETSP() ({ register uintptr_t stack_ptr asm ("%sp"); stack_ptr; }) - -#include diff --git a/sysdeps/m68k/nptl/Makefile b/sysdeps/m68k/nptl/Makefile deleted file mode 100644 index 52274c54f0..0000000000 --- a/sysdeps/m68k/nptl/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2010-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# Contributed by Maxim Kuvyrkov , 2010. -# -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# . - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif diff --git a/sysdeps/m68k/nptl/bits/pthreadtypes-arch.h b/sysdeps/m68k/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index 845b9e6c2b..0000000000 --- a/sysdeps/m68k/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maxim Kuvyrkov , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -#define _BITS_PTHREADTYPES_ARCH_H 1 - -#include - -#define __SIZEOF_PTHREAD_ATTR_T 36 -#define __SIZEOF_PTHREAD_MUTEX_T 24 -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_RWLOCK_T 32 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -#define __SIZEOF_PTHREAD_BARRIER_T 20 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - -/* Data structure for mutex handling. */ -#define __PTHREAD_COMPAT_PADDING_MID -#define __PTHREAD_COMPAT_PADDING_END -#define __PTHREAD_MUTEX_LOCK_ELISION 0 - -#define __LOCK_ALIGNMENT __attribute__ ((__aligned__ (4))) -#define __ONCE_ALIGNMENT __attribute__ ((__aligned__ (4))) - -struct __pthread_rwlock_arch_t -{ - unsigned int __readers __attribute__ ((__aligned__ (4))); - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; - unsigned char __pad1; - unsigned char __pad2; - unsigned char __shared; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; - int __cur_writer; -}; - -#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/m68k/nptl/bits/semaphore.h b/sysdeps/m68k/nptl/bits/semaphore.h deleted file mode 100644 index 2c409d8959..0000000000 --- a/sysdeps/m68k/nptl/bits/semaphore.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maxim Kuvyrkov , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - - -#define __SIZEOF_SEM_T 16 - - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align __attribute__ ((__aligned__ (4))); -} sem_t; diff --git a/sysdeps/m68k/nptl/pthreaddef.h b/sysdeps/m68k/nptl/pthreaddef.h deleted file mode 100644 index 00d0422b14..0000000000 --- a/sysdeps/m68k/nptl/pthreaddef.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maxim Kuvyrkov , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 16 - - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME __builtin_frame_address (0) diff --git a/sysdeps/m68k/nptl/tcb-offsets.sym b/sysdeps/m68k/nptl/tcb-offsets.sym deleted file mode 100644 index 241fb8b47c..0000000000 --- a/sysdeps/m68k/nptl/tcb-offsets.sym +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include - --- - --- Derive offsets relative to the thread register. -#define thread_offsetof(mem) (long)(offsetof(struct pthread, mem) - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE) - -MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) -TID_OFFSET thread_offsetof (tid) diff --git a/sysdeps/m68k/nptl/tls.h b/sysdeps/m68k/nptl/tls.h deleted file mode 100644 index a81a61195a..0000000000 --- a/sysdeps/m68k/nptl/tls.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Definition for thread-local data handling. NPTL/m68k version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maxim Kuvyrkov , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _TLS_H -#define _TLS_H 1 - -#include - -#ifndef __ASSEMBLER__ -# include -# include -# include -# include - -#else /* __ASSEMBLER__ */ -# include -#endif /* __ASSEMBLER__ */ - -#ifndef __ASSEMBLER__ - -/* Get system call information. */ -# include - -/* The TP points to the start of the thread blocks. */ -# define TLS_DTV_AT_TP 1 -# define TLS_TCB_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include - -typedef struct -{ - dtv_t *dtv; - void *private; -} tcbhead_t; - -/* This is the size of the initial TCB. Because our TCB is before the thread - pointer, we don't need this. */ -# define TLS_INIT_TCB_SIZE 0 - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size of the TCB. Because our TCB is before the thread - pointer, we don't need this. */ -# define TLS_TCB_SIZE 0 - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size we need before TCB - actually, it includes the TCB. */ -# define TLS_PRE_TCB_SIZE \ - (sizeof (struct pthread) \ - + ((sizeof (tcbhead_t) + TLS_TCB_ALIGN - 1) & ~(TLS_TCB_ALIGN - 1))) - -/* The thread pointer (TP) points to the end of the - TCB + 0x7000, as for PowerPC and MIPS. This implies that TCB address is - TP - 0x7000. As we define TLS_DTV_AT_TP we can - assume that the pthread struct is allocated immediately ahead of the - TCB. This implies that the pthread_descr address is - TP - (TLS_PRE_TCB_SIZE + 0x7000). */ -# define TLS_TCB_OFFSET 0x7000 - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(tcbp, dtvp) \ - ((tcbhead_t *) (tcbp))[-1].dtv = dtvp + 1 - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtv) \ - (THREAD_DTV () = (dtv)) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(tcbp) \ - (((tcbhead_t *) (tcbp))[-1].dtv) - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(tcbp) \ - ({ \ - INTERNAL_SYSCALL_DECL (err); \ - int _sys_result; \ - \ - _sys_result = INTERNAL_SYSCALL (set_thread_area, err, 1, \ - ((void *) (tcbp)) + TLS_TCB_OFFSET); \ - INTERNAL_SYSCALL_ERROR_P (_sys_result, err) ? "unknown error" : NULL; }) - -# define TLS_DEFINE_INIT_TP(tp, pd) \ - void *tp = (void *) (pd) + TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE - -extern void * __m68k_read_tp (void); - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - (((tcbhead_t *) (__m68k_read_tp () - TLS_TCB_OFFSET))[-1].dtv) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF \ - ((struct pthread *) (__m68k_read_tp () - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF \ - CONST_THREAD_AREA (32, TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE) - -/* Access to data in the thread descriptor is easy. */ -# define THREAD_GETMEM(descr, member) \ - descr->member -# define THREAD_GETMEM_NC(descr, member, idx) \ - descr->member[idx] -# define THREAD_SETMEM(descr, member, value) \ - descr->member = (value) -# define THREAD_SETMEM_NC(descr, member, idx, value) \ - descr->member[idx] = (value) - -/* l_tls_offset == 0 is perfectly valid on M68K, so we have to use some - different value to mean unset l_tls_offset. */ -# define NO_TLS_OFFSET -1 - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/m68k/preconfigure b/sysdeps/m68k/preconfigure deleted file mode 100644 index 94fc1aabc2..0000000000 --- a/sysdeps/m68k/preconfigure +++ /dev/null @@ -1,17 +0,0 @@ -# This fragment canonicalizes the machine names for m68k variants. - -case "$machine" in -m680?0) base_machine=m68k machine=m68k/m680x0/$machine ;; -m68k) variant=`(echo "#ifdef __mcoldfire__" - echo "coldfire" - echo "#else" - echo "m680x0/m68020" - echo "#endif") | - $CC $CFLAGS $CPPFLAGS -E - | - grep '^[a-z]'` - if test -z "$variant"; then - echo >&2 "Cannot determine m68k processor variant" - exit 1 - fi - base_machine=m68k machine=m68k/$variant ;; -esac diff --git a/sysdeps/m68k/rawmemchr.S b/sysdeps/m68k/rawmemchr.S deleted file mode 100644 index 70087064e6..0000000000 --- a/sysdeps/m68k/rawmemchr.S +++ /dev/null @@ -1,197 +0,0 @@ -/* rawmemchr (str, ch) -- Return pointer to first occurrence of CH in STR. - For Motorola 68000. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include "asm-syntax.h" - - TEXT -ENTRY(__rawmemchr) - /* Save the callee-saved registers we use. */ - movel R(d2),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4) - movel R(d3),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4) - cfi_rel_offset (R(d2), 4) - cfi_rel_offset (R(d3), 0) - - /* Get string pointer and character. */ - movel MEM_DISP(sp,12),R(a0) - moveb MEM_DISP(sp,19),R(d0) - - /* Distribute the character to all bytes of a longword. */ - movel R(d0),R(d1) - lsll #8,R(d1) - moveb R(d0),R(d1) - movel R(d1),R(d0) - swap R(d0) - movew R(d1),R(d0) - - /* First search for the character one byte at a time until the - pointer is aligned to a longword boundary. */ - movel R(a0),R(d1) -#ifdef __mcoldfire__ - andl #3,R(d1) -#else - andw #3,R(d1) -#endif - beq L(L1) - cmpb MEM(a0),R(d0) - beq L(L9) - addql #1,R(a0) - -#ifdef __mcoldfire__ - subql #3,R(d1) -#else - subqw #3,R(d1) -#endif - beq L(L1) - cmpb MEM(a0),R(d0) - beq L(L9) - addql #1,R(a0) - -#ifdef __mcoldfire__ - addql #1,R(d1) -#else - addqw #1,R(d1) -#endif - beq L(L1) - cmpb MEM(a0),R(d0) - beq L(L9) - addql #1,R(a0) - -L(L1:) - /* Load the magic bits. Unlike the generic implementation we can - use the carry bit as the fourth hole. */ - movel #0xfefefeff,R(d3) - - /* We exit the loop if adding MAGIC_BITS to LONGWORD fails to - change any of the hole bits of LONGWORD. - - 1) Is this safe? Will it catch all the zero bytes? - Suppose there is a byte with all zeros. Any carry bits - propagating from its left will fall into the hole at its - least significant bit and stop. Since there will be no - carry from its most significant bit, the LSB of the - byte to the left will be unchanged, and the zero will be - detected. - - 2) Is this worthwhile? Will it ignore everything except - zero bytes? Suppose every byte of LONGWORD has a bit set - somewhere. There will be a carry into bit 8. If bit 8 - is set, this will carry into bit 16. If bit 8 is clear, - one of bits 9-15 must be set, so there will be a carry - into bit 16. Similarly, there will be a carry into bit - 24. If one of bits 24-31 is set, there will be a carry - into bit 32 (=carry flag), so all of the hole bits will - be changed. - - 3) But wait! Aren't we looking for C, not zero? - Good point. So what we do is XOR LONGWORD with a longword, - each of whose bytes is C. This turns each byte that is C - into a zero. */ - -L(L2:) - /* Get the longword in question. */ - movel MEM_POSTINC(a0),R(d1) - /* XOR with the byte we search for. */ - eorl R(d0),R(d1) - - /* Add the magic value. We get carry bits reported for each byte - which is not C. */ - movel R(d3),R(d2) - addl R(d1),R(d2) - - /* Check the fourth carry bit before it is clobbered by the next - XOR. If it is not set we have a hit. */ - bcc L(L8) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits. */ - eorl R(d1),R(d2) - - /* Now test for the other three overflow bits. - Set all non-carry bits. */ - orl R(d3),R(d2) - /* Add 1 to get zero if all carry bits were set. */ - addql #1,R(d2) - - /* If we don't get zero then at least one byte of the word equals - C. */ - bne L(L8) - - /* Get the longword in question. */ - movel MEM_POSTINC(a0),R(d1) - /* XOR with the byte we search for. */ - eorl R(d0),R(d1) - - /* Add the magic value. We get carry bits reported for each byte - which is not C. */ - movel R(d3),R(d2) - addl R(d1),R(d2) - - /* Check the fourth carry bit before it is clobbered by the next - XOR. If it is not set we have a hit. */ - bcc L(L8) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits */ - eorl R(d1),R(d2) - - /* Now test for the other three overflow bits. - Set all non-carry bits. */ - orl R(d3),R(d2) - /* Add 1 to get zero if all carry bits were set. */ - addql #1,R(d2) - - /* If we don't get zero then at least one byte of the word equals - C. */ - beq L(L2) - -L(L8:) - /* We have a hit. Check to see which byte it was. First - compensate for the autoincrement in the loop. */ - subql #4,R(a0) - - cmpb MEM(a0),R(d0) - beq L(L9) - addql #1,R(a0) - - cmpb MEM(a0),R(d0) - beq L(L9) - addql #1,R(a0) - - cmpb MEM(a0),R(d0) - beq L(L9) - addql #1,R(a0) - - /* Otherwise the fourth byte must equal C. */ -L(L9:) - movel R(a0),R(d0) - movel MEM_POSTINC(sp),R(d3) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d3)) - movel MEM_POSTINC(sp),R(d2) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d2)) - rts -END(__rawmemchr) - -libc_hidden_def (__rawmemchr) -weak_alias (__rawmemchr, rawmemchr) diff --git a/sysdeps/m68k/setjmp.c b/sysdeps/m68k/setjmp.c deleted file mode 100644 index 5fb43b2cee..0000000000 --- a/sysdeps/m68k/setjmp.c +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Save the current program position in ENV and return 0. */ -int -#if defined BSD_SETJMP -# undef setjmp -# define savemask 1 -setjmp (jmp_buf env) -#elif defined BSD__SETJMP -# undef _setjmp -# define savemask 0 -_setjmp (jmp_buf env) -#else -__sigsetjmp (jmp_buf env, int savemask) -#endif -{ - /* Save data registers D1 through D7. */ - asm volatile ("movem%.l %/d1-%/d7, %0" - : : "m" (env[0].__jmpbuf[0].__dregs[0])); - - /* Save return address in place of register A0. */ - env[0].__jmpbuf[0].__aregs[0] = __builtin_return_address (0); - - /* Save address registers A1 through A5. */ - asm volatile ("movem%.l %/a1-%/a5, %0" - : : "m" (env[0].__jmpbuf[0].__aregs[1])); - - /* Save caller's FP, not our own. */ - env[0].__jmpbuf[0].__fp = *(int **) __builtin_frame_address (0); - - /* Save caller's SP, not our own. */ - env[0].__jmpbuf[0].__sp = (int *) __builtin_frame_address (0) + 2; - -#if defined __HAVE_68881__ || defined __HAVE_FPU__ - /* Save floating-point (68881) registers FP0 through FP7. */ - asm volatile ("fmovem%.x %/fp0-%/fp7, %0" - : : "m" (env[0].__jmpbuf[0].__fpregs[0])); -#elif defined (__mcffpu__) - asm volatile ("fmovem %/fp0-%/fp7, %0" - : : "m" (env[0].__jmpbuf[0].__fpregs[0])); -#endif - -#if IS_IN (rtld) - /* In ld.so we never save the signal mask. */ - return 0; -#else - /* Save the signal mask if requested. */ - return __sigjmp_save (env, savemask); -#endif -} -#if !defined BSD_SETJMP && !defined BSD__SETJMP -libc_hidden_def (__sigsetjmp) -#endif diff --git a/sysdeps/m68k/shlib-versions b/sysdeps/m68k/shlib-versions deleted file mode 100644 index c8db251c22..0000000000 --- a/sysdeps/m68k/shlib-versions +++ /dev/null @@ -1 +0,0 @@ -libgcc_s=2 diff --git a/sysdeps/m68k/sotruss-lib.c b/sysdeps/m68k/sotruss-lib.c deleted file mode 100644 index e90315f7e1..0000000000 --- a/sysdeps/m68k/sotruss-lib.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Override generic sotruss-lib.c to define actual functions for m68k. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define HAVE_ARCH_PLTENTER -#define HAVE_ARCH_PLTEXIT - -#include - -ElfW(Addr) -la_m68k_gnu_pltenter (Elf32_Sym *sym __attribute__ ((unused)), - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - La_m68k_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - unsigned long int *sp = (unsigned long int *) regs->lr_sp; - - print_enter (refcook, defcook, symname, sp[1], sp[2], sp[3], *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -la_m68k_gnu_pltexit (Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, - const struct La_m68k_regs *inregs, - struct La_m68k_retval *outregs, - const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_d0); - - return 0; -} diff --git a/sysdeps/m68k/stackinfo.h b/sysdeps/m68k/stackinfo.h deleted file mode 100644 index 2074e68279..0000000000 --- a/sysdeps/m68k/stackinfo.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* On m68k the stack grows down. */ -#define _STACK_GROWS_DOWN 1 - -/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK - is present, but it is presumed absent. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X) - -/* Access to the stack pointer. */ -#define stackinfo_get_sp() \ - ({ void *p__; asm volatile ("move.l %%sp, %0" : "=r" (p__)); p__; }) -#define stackinfo_sub_sp(ptr) \ - ({ ptrdiff_t d__; \ - asm volatile ("sub.l %%sp, %0" : "=r" (d__) : "0" (ptr)); \ - d__; }) - -#endif /* stackinfo.h */ diff --git a/sysdeps/m68k/start.S b/sysdeps/m68k/start.S deleted file mode 100644 index 71ba3b90e3..0000000000 --- a/sysdeps/m68k/start.S +++ /dev/null @@ -1,120 +0,0 @@ -/* Startup code compliant to the ELF m68k ABI. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This is the canonical entry point, usually the first thing in the text - segment. The SVR4/m68k ABI says that when the entry point runs, - most registers' values are unspecified, except for: - - %a1 Contains a function pointer to be registered with `atexit'. - This is how the dynamic linker arranges to have DT_FINI - functions called for shared libraries that have been loaded - before this code runs. - - %sp The stack contains the arguments and environment: - 0(%sp) argc - 4(%sp) argv[0] - ... - (4*argc)(%sp) NULL - (4*(argc+1))(%sp) envp[0] - ... - NULL -*/ - -#include - - .text - .globl _start - .type _start,@function -_start: - /* Clear the frame pointer. The ABI suggests this be done, to mark - the outermost frame obviously. */ - sub.l %fp, %fp - - /* Extract the arguments as encoded on the stack and set up the - arguments for `main': argc, argv. envp will be determined - later in __libc_start_main. */ - move.l (%sp)+, %d0 /* Pop the argument count. */ - move.l %sp, %a0 /* The argument vector starts just at the - current stack top. */ - - /* Provide the highest stack address to the user code (for stacks - which grow downward). */ - pea (%sp) - - pea (%a1) /* Push address of the shared library - termination function. */ - -#ifdef SHARED - /* Load PIC register. */ - LOAD_GOT (%a5) - - /* Push the address of our own entry points to `.fini' and - `.init'. */ - move.l __libc_csu_fini@GOT(%a5), -(%sp) - move.l __libc_csu_init@GOT(%a5), -(%sp) - - pea (%a0) /* Push second argument: argv. */ - move.l %d0, -(%sp) /* Push first argument: argc. */ - - move.l main@GOT(%a5), -(%sp) - - /* Call the user's main function, and exit with its value. But - let the libc call main. */ - jbsr __libc_start_main@PLTPC -#else - /* Push the address of our own entry points to `.fini' and - `.init'. */ - pea __libc_csu_fini - pea __libc_csu_init - - pea (%a0) /* Push second argument: argv. */ - move.l %d0, -(%sp) /* Push first argument: argc. */ - - pea main - - /* Call the user's main function, and exit with its value. But - let the libc call main. */ - jbsr __libc_start_main -#endif - - illegal /* Crash if somehow `exit' does return. */ - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start diff --git a/sysdeps/m68k/strchr.S b/sysdeps/m68k/strchr.S deleted file mode 100644 index 28b2ec4241..0000000000 --- a/sysdeps/m68k/strchr.S +++ /dev/null @@ -1,281 +0,0 @@ -/* strchr (str, ch) -- Return pointer to first occurrence of CH in STR. - For Motorola 68000. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include "asm-syntax.h" - - TEXT -ENTRY(strchr) - /* Save the callee-saved registers we use. */ - movel R(d2),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4) - movel R(d3),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4) - cfi_rel_offset (R(d2),4) - cfi_rel_offset (R(d3),0) - - /* Get string pointer and character. */ - movel MEM_DISP(sp,12),R(a0) - moveb MEM_DISP(sp,19),R(d0) - - /* Distribute the character to all bytes of a longword. */ - movel R(d0),R(d1) - lsll #8,R(d1) - moveb R(d0),R(d1) - movel R(d1),R(d0) - swap R(d0) - movew R(d1),R(d0) - - /* First search for the character one byte at a time until the - pointer is aligned to a longword boundary. */ - movel R(a0),R(d1) -#ifdef __mcoldfire__ - andl #3,R(d1) -#else - andw #3,R(d1) -#endif - beq L(L1) - moveb MEM(a0),R(d2) - cmpb R(d0),R(d2) - beq L(L9) - tstb R(d2) - beq L(L3) - addql #1,R(a0) - -#ifdef __mcoldfire__ - subql #3,R(d1) -#else - subqw #3,R(d1) -#endif - beq L(L1) - moveb MEM(a0),R(d2) - cmpb R(d0),R(d2) - beq L(L9) - tstb R(d2) - beq L(L3) - addql #1,R(a0) - -#ifdef __mcoldfire__ - addql #1,R(d1) -#else - addqw #1,R(d1) -#endif - beq L(L1) - moveb MEM(a0),R(d2) - cmpb R(d0),R(d2) - beq L(L9) - tstb R(d2) - beq L(L3) - addql #1,R(a0) - -L(L1:) - /* Load the magic bits. Unlike the generic implementation we can - use the carry bit as the fourth hole. */ - movel #0xfefefeff,R(d3) - - /* We exit the loop if adding MAGIC_BITS to LONGWORD fails to - change any of the hole bits of LONGWORD. - - 1) Is this safe? Will it catch all the zero bytes? - Suppose there is a byte with all zeros. Any carry bits - propagating from its left will fall into the hole at its - least significant bit and stop. Since there will be no - carry from its most significant bit, the LSB of the - byte to the left will be unchanged, and the zero will be - detected. - - 2) Is this worthwhile? Will it ignore everything except - zero bytes? Suppose every byte of LONGWORD has a bit set - somewhere. There will be a carry into bit 8. If bit 8 - is set, this will carry into bit 16. If bit 8 is clear, - one of bits 9-15 must be set, so there will be a carry - into bit 16. Similarly, there will be a carry into bit - 24. If one of bits 24-31 is set, there will be a carry - into bit 32 (=carry flag), so all of the hole bits will - be changed. - - 3) But wait! Aren't we looking for C, not zero? - Good point. So what we do is XOR LONGWORD with a longword, - each of whose bytes is C. This turns each byte that is C - into a zero. */ - -L(L2:) - /* Get the longword in question. */ - movel MEM_POSTINC(a0),R(d1) - /* XOR with the byte we search for. */ - eorl R(d0),R(d1) - - /* Add the magic value. We get carry bits reported for each byte - which is not C. */ - movel R(d3),R(d2) - addl R(d1),R(d2) - - /* Check the fourth carry bit before it is clobbered by the next - XOR. If it is not set we have a hit. */ - bcc L(L8) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits. */ - eorl R(d1),R(d2) - - /* Now test for the other three overflow bits. - Set all non-carry bits. */ - orl R(d3),R(d2) - /* Add 1 to get zero if all carry bits were set. */ - addql #1,R(d2) - - /* If we don't get zero then at least one byte of the word equals - C. */ - bne L(L8) - - /* Next look for a NUL byte. - Restore original longword without reload. */ - eorl R(d0),R(d1) - /* Add the magic value. We get carry bits reported for each byte - which is not NUL. */ - movel R(d3),R(d2) - addl R(d1),R(d2) - - /* Check the fourth carry bit before it is clobbered by the next - XOR. If it is not set we have a hit, and return NULL. */ - bcc L(L3) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits. */ - eorl R(d1),R(d2) - - /* Now test for the other three overflow bits. - Set all non-carry bits. */ - orl R(d3),R(d2) - /* Add 1 to get zero if all carry bits were set. */ - addql #1,R(d2) - - /* If we don't get zero then at least one byte of the word was NUL - and we return NULL. Otherwise continue with the next longword. */ - bne L(L3) - - /* Get the longword in question. */ - movel MEM_POSTINC(a0),R(d1) - /* XOR with the byte we search for. */ - eorl R(d0),R(d1) - - /* Add the magic value. We get carry bits reported for each byte - which is not C. */ - movel R(d3),R(d2) - addl R(d1),R(d2) - - /* Check the fourth carry bit before it is clobbered by the next - XOR. If it is not set we have a hit. */ - bcc L(L8) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits */ - eorl R(d1),R(d2) - - /* Now test for the other three overflow bits. - Set all non-carry bits. */ - orl R(d3),R(d2) - /* Add 1 to get zero if all carry bits were set. */ - addql #1,R(d2) - - /* If we don't get zero then at least one byte of the word equals - C. */ - bne L(L8) - - /* Next look for a NUL byte. - Restore original longword without reload. */ - eorl R(d0),R(d1) - /* Add the magic value. We get carry bits reported for each byte - which is not NUL. */ - movel R(d3),R(d2) - addl R(d1),R(d2) - - /* Check the fourth carry bit before it is clobbered by the next - XOR. If it is not set we have a hit, and return NULL. */ - bcc L(L3) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits */ - eorl R(d1),R(d2) - - /* Now test for the other three overflow bits. - Set all non-carry bits. */ - orl R(d3),R(d2) - /* Add 1 to get zero if all carry bits were set. */ - addql #1,R(d2) - - /* If we don't get zero then at least one byte of the word was NUL - and we return NULL. Otherwise continue with the next longword. */ - beq L(L2) - -L(L3:) - /* Return NULL. */ - clrl R(d0) - movel R(d0),R(a0) - movel MEM_POSTINC(sp),R(d3) - cfi_remember_state - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d3)) - movel MEM_POSTINC(sp),R(d2) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d2)) - rts - - cfi_restore_state -L(L8:) - /* We have a hit. Check to see which byte it was. First - compensate for the autoincrement in the loop. */ - subql #4,R(a0) - - moveb MEM(a0),R(d1) - cmpb R(d0),R(d1) - beq L(L9) - tstb R(d1) - beq L(L3) - addql #1,R(a0) - - moveb MEM(a0),R(d1) - cmpb R(d0),R(d1) - beq L(L9) - tstb R(d1) - beq L(L3) - addql #1,R(a0) - - moveb MEM(a0),R(d1) - cmpb R(d0),R(d1) - beq L(L9) - tstb R(d1) - beq L(L3) - addql #1,R(a0) - - /* Otherwise the fourth byte must equal C. */ -L(L9:) - movel R(a0),R(d0) - movel MEM_POSTINC(sp),R(d3) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d3)) - movel MEM_POSTINC(sp),R(d2) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d2)) - rts -END(strchr) - -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/m68k/strchrnul.S b/sysdeps/m68k/strchrnul.S deleted file mode 100644 index d12b2e74ab..0000000000 --- a/sysdeps/m68k/strchrnul.S +++ /dev/null @@ -1,267 +0,0 @@ -/* strchrnul (str, ch) -- Return pointer to first occurrence of CH in STR - or the final NUL byte. - For Motorola 68000. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include "asm-syntax.h" - - TEXT -ENTRY(__strchrnul) - /* Save the callee-saved registers we use. */ - movel R(d2),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4) - movel R(d3),MEM_PREDEC(sp) - cfi_adjust_cfa_offset (4) - cfi_rel_offset (R(d2), 4) - cfi_rel_offset (R(d3), 0) - - /* Get string pointer and character. */ - movel MEM_DISP(sp,12),R(a0) - moveb MEM_DISP(sp,19),R(d0) - - /* Distribute the character to all bytes of a longword. */ - movel R(d0),R(d1) - lsll #8,R(d1) - moveb R(d0),R(d1) - movel R(d1),R(d0) - swap R(d0) - movew R(d1),R(d0) - - /* First search for the character one byte at a time until the - pointer is aligned to a longword boundary. */ - movel R(a0),R(d1) -#ifdef __mcoldfire__ - andl #3,R(d1) -#else - andw #3,R(d1) -#endif - beq L(L1) - moveb MEM(a0),R(d2) - cmpb R(d0),R(d2) - beq L(L9) - tstb R(d2) - beq L(L9) - addql #1,R(a0) - -#ifdef __mcoldfire__ - subql #3,R(d1) -#else - subqw #3,R(d1) -#endif - beq L(L1) - moveb MEM(a0),R(d2) - cmpb R(d0),R(d2) - beq L(L9) - tstb R(d2) - beq L(L9) - addql #1,R(a0) - -#ifdef __mcoldfire__ - addql #1,R(d1) -#else - addqw #1,R(d1) -#endif - beq L(L1) - moveb MEM(a0),R(d2) - cmpb R(d0),R(d2) - beq L(L9) - tstb R(d2) - beq L(L9) - addql #1,R(a0) - -L(L1:) - /* Load the magic bits. Unlike the generic implementation we can - use the carry bit as the fourth hole. */ - movel #0xfefefeff,R(d3) - - /* We exit the loop if adding MAGIC_BITS to LONGWORD fails to - change any of the hole bits of LONGWORD. - - 1) Is this safe? Will it catch all the zero bytes? - Suppose there is a byte with all zeros. Any carry bits - propagating from its left will fall into the hole at its - least significant bit and stop. Since there will be no - carry from its most significant bit, the LSB of the - byte to the left will be unchanged, and the zero will be - detected. - - 2) Is this worthwhile? Will it ignore everything except - zero bytes? Suppose every byte of LONGWORD has a bit set - somewhere. There will be a carry into bit 8. If bit 8 - is set, this will carry into bit 16. If bit 8 is clear, - one of bits 9-15 must be set, so there will be a carry - into bit 16. Similarly, there will be a carry into bit - 24. If one of bits 24-31 is set, there will be a carry - into bit 32 (=carry flag), so all of the hole bits will - be changed. - - 3) But wait! Aren't we looking for C, not zero? - Good point. So what we do is XOR LONGWORD with a longword, - each of whose bytes is C. This turns each byte that is C - into a zero. */ - -L(L2:) - /* Get the longword in question. */ - movel MEM_POSTINC(a0),R(d1) - /* XOR with the byte we search for. */ - eorl R(d0),R(d1) - - /* Add the magic value. We get carry bits reported for each byte - which is not C. */ - movel R(d3),R(d2) - addl R(d1),R(d2) - - /* Check the fourth carry bit before it is clobbered by the next - XOR. If it is not set we have a hit. */ - bcc L(L8) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits. */ - eorl R(d1),R(d2) - - /* Now test for the other three overflow bits. - Set all non-carry bits. */ - orl R(d3),R(d2) - /* Add 1 to get zero if all carry bits were set. */ - addql #1,R(d2) - - /* If we don't get zero then at least one byte of the word equals - C. */ - bne L(L8) - - /* Next look for a NUL byte. - Restore original longword without reload. */ - eorl R(d0),R(d1) - /* Add the magic value. We get carry bits reported for each byte - which is not NUL. */ - movel R(d3),R(d2) - addl R(d1),R(d2) - - /* Check the fourth carry bit before it is clobbered by the next - XOR. If it is not set we have a hit. */ - bcc L(L8) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits. */ - eorl R(d1),R(d2) - - /* Now test for the other three overflow bits. - Set all non-carry bits. */ - orl R(d3),R(d2) - /* Add 1 to get zero if all carry bits were set. */ - addql #1,R(d2) - - /* If we don't get zero then at least one byte of the word was - NUL. Otherwise continue with the next longword. */ - bne L(L8) - - /* Get the longword in question. */ - movel MEM_POSTINC(a0),R(d1) - /* XOR with the byte we search for. */ - eorl R(d0),R(d1) - - /* Add the magic value. We get carry bits reported for each byte - which is not C. */ - movel R(d3),R(d2) - addl R(d1),R(d2) - - /* Check the fourth carry bit before it is clobbered by the next - XOR. If it is not set we have a hit. */ - bcc L(L8) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits */ - eorl R(d1),R(d2) - - /* Now test for the other three overflow bits. - Set all non-carry bits. */ - orl R(d3),R(d2) - /* Add 1 to get zero if all carry bits were set. */ - addql #1,R(d2) - - /* If we don't get zero then at least one byte of the word equals - C. */ - bne L(L8) - - /* Next look for a NUL byte. - Restore original longword without reload. */ - eorl R(d0),R(d1) - /* Add the magic value. We get carry bits reported for each byte - which is not NUL. */ - movel R(d3),R(d2) - addl R(d1),R(d2) - - /* Check the fourth carry bit before it is clobbered by the next - XOR. If it is not set we have a hit. */ - bcc L(L8) - - /* We are only interested in carry bits that change due to the - previous add, so remove original bits */ - eorl R(d1),R(d2) - - /* Now test for the other three overflow bits. - Set all non-carry bits. */ - orl R(d3),R(d2) - /* Add 1 to get zero if all carry bits were set. */ - addql #1,R(d2) - - /* If we don't get zero then at least one byte of the word was - NUL. Otherwise continue with the next longword. */ - beq L(L2) - -L(L8:) - /* We have a hit. Check to see which byte it was. First - compensate for the autoincrement in the loop. */ - subql #4,R(a0) - - moveb MEM(a0),R(d1) - cmpb R(d0),R(d1) - beq L(L9) - tstb R(d1) - beq L(L9) - addql #1,R(a0) - - moveb MEM(a0),R(d1) - cmpb R(d0),R(d1) - beq L(L9) - tstb R(d1) - beq L(L9) - addql #1,R(a0) - - moveb MEM(a0),R(d1) - cmpb R(d0),R(d1) - beq L(L9) - tstb R(d1) - beq L(L9) - addql #1,R(a0) - - /* Otherwise the fourth byte must equal C or be NUL. */ -L(L9:) - movel R(a0),R(d0) - movel MEM_POSTINC(sp),R(d3) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d3)) - movel MEM_POSTINC(sp),R(d2) - cfi_adjust_cfa_offset (-4) - cfi_restore (R(d2)) - rts -END(__strchrnul) - -weak_alias (__strchrnul, strchrnul) diff --git a/sysdeps/m68k/symbol-hacks.h b/sysdeps/m68k/symbol-hacks.h deleted file mode 100644 index e449d29810..0000000000 --- a/sysdeps/m68k/symbol-hacks.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Hacks needed for symbol manipulation. m68k version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include_next "symbol-hacks.h" diff --git a/sysdeps/m68k/sys/ucontext.h b/sysdeps/m68k/sys/ucontext.h deleted file mode 100644 index a742aaff9a..0000000000 --- a/sysdeps/m68k/sys/ucontext.h +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* System V/m68k ABI compliant context switching support. */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - - -/* Type for general register. */ -typedef int greg_t; - -/* Number of general registers. */ -#define __NGREG 18 -#ifdef __USE_MISC -# define NGREG __NGREG -#endif - -/* Container for all general registers. */ -typedef greg_t gregset_t[__NGREG]; - -#ifdef __USE_MISC -/* Number of each register is the `gregset_t' array. */ -enum -{ - R_D0 = 0, -# define R_D0 R_D0 - R_D1 = 1, -# define R_D1 R_D1 - R_D2 = 2, -# define R_D2 R_D2 - R_D3 = 3, -# define R_D3 R_D3 - R_D4 = 4, -# define R_D4 R_D4 - R_D5 = 5, -# define R_D5 R_D5 - R_D6 = 6, -# define R_D6 R_D6 - R_D7 = 7, -# define R_D7 R_D7 - R_A0 = 8, -# define R_A0 R_A0 - R_A1 = 9, -# define R_A1 R_A1 - R_A2 = 10, -# define R_A2 R_A2 - R_A3 = 11, -# define R_A3 R_A3 - R_A4 = 12, -# define R_A4 R_A4 - R_A5 = 13, -# define R_A5 R_A5 - R_A6 = 14, -# define R_A6 R_A6 - R_A7 = 15, -# define R_A7 R_A7 - R_SP = 15, -# define R_SP R_SP - R_PC = 16, -# define R_PC R_PC - R_PS = 17 -# define R_PS R_PS -}; - -/* Structure to describe FPU registers. */ -typedef struct fpregset -{ - int f_pcr; - int f_psr; - int f_fpiaddr; - int f_fpregs[8][3]; -} fpregset_t; -#endif - -#ifdef __USE_MISC -# define __ctx(fld) fld -#else -# define __ctx(fld) __ ## fld -#endif - -/* Context to describe whole processor state. */ -typedef struct -{ - int __ctx(version); - gregset_t __ctx(gregs); -} mcontext_t; - -#undef __ctx - -#ifdef __USE_MISC -# define MCONTEXT_VERSION 1 -#endif - -/* Userlevel context. */ -typedef struct ucontext -{ - unsigned long int uc_flags; - struct ucontext *uc_link; - sigset_t uc_sigmask; - stack_t uc_stack; - mcontext_t uc_mcontext; - long int uc_filler[201]; -} ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/m68k/sysdep.h b/sysdeps/m68k/sysdep.h deleted file mode 100644 index 008287b8ac..0000000000 --- a/sysdeps/m68k/sysdep.h +++ /dev/null @@ -1,74 +0,0 @@ -/* Assembler macros for m68k. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifdef __ASSEMBLER__ - -/* Define an entry point visible from C. - - There is currently a bug in gdb which prevents us from specifying - incomplete stabs information. Fake some entries here which specify - the current source file. */ -# define ENTRY(name) \ - .globl C_SYMBOL_NAME(name); \ - .type C_SYMBOL_NAME(name),@function; \ - .p2align 2; \ - C_LABEL(name) \ - cfi_startproc; \ - CALL_MCOUNT - -# undef END -# define END(name) \ - cfi_endproc; \ - .size name,.-name - - -/* If compiled for profiling, call `_mcount' at the start of each function. */ -# ifdef PROF -/* The mcount code relies on a normal frame pointer being on the stack - to locate our caller, so push one just for its benefit. */ -# define CALL_MCOUNT \ - move.l %fp, -(%sp); \ - cfi_adjust_cfa_offset (4); cfi_rel_offset (%a6, 0); \ - move.l %sp, %fp; \ - jbsr JUMPTARGET (_mcount); \ - move.l (%sp)+, %fp; \ - cfi_adjust_cfa_offset (-4); cfi_restore (%a6); -# else -# define CALL_MCOUNT /* Do nothing. */ -# endif - -# define PSEUDO(name, syscall_name, args) \ - .globl __syscall_error; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - jcc JUMPTARGET(__syscall_error) - -# undef PSEUDO_END -# define PSEUDO_END(name) \ - END (name) - -# undef JUMPTARGET -# ifdef PIC -# define JUMPTARGET(name) name##@PLTPC -# else -# define JUMPTARGET(name) name -# endif - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/m68k/tls-macros.h b/sysdeps/m68k/tls-macros.h deleted file mode 100644 index 6d5ca8125f..0000000000 --- a/sysdeps/m68k/tls-macros.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Macros for accessing thread-local storage. m68k version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maxim Kuvyrkov , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define TLS_GD(x) \ - ({ \ - void *__result; \ - extern void *__tls_get_addr (void *); \ - \ - asm ("movel #_GLOBAL_OFFSET_TABLE_@GOTPC, %0\n\t" \ - "lea (-6, %%pc, %0), %0\n\t" \ - "lea " #x "@TLSGD(%0), %0" \ - : "=&a" (__result)); \ - (int *) __tls_get_addr (__result); }) - -#define TLS_LD(x) \ - ({ \ - char *__tp; \ - int __offset; \ - extern void *__tls_get_addr (void *); \ - \ - asm ("movel #_GLOBAL_OFFSET_TABLE_@GOTPC, %0\n\t" \ - "lea (-6, %%pc, %0), %0\n\t" \ - "lea " #x "@TLSLDM(%0), %0" \ - : "=&a" (__tp)); \ - __tp = (char *) __tls_get_addr (__tp); \ - asm ("movel #" #x "@TLSLDO, %0" \ - : "=a" (__offset)); \ - (int *) (__tp + __offset); }) - -#define TLS_IE(x) \ - ({ \ - char *__tp; \ - int __offset; \ - extern void * __m68k_read_tp (void); \ - \ - __tp = (char *) __m68k_read_tp (); \ - asm ("movel #_GLOBAL_OFFSET_TABLE_@GOTPC, %0\n\t" \ - "lea (-6, %%pc, %0), %0\n\t" \ - "movel " #x "@TLSIE(%0), %0" \ - : "=&a" (__offset)); \ - (int *) (__tp + __offset); }) - -#define TLS_LE(x) \ - ({ \ - char *__tp; \ - int __offset; \ - extern void * __m68k_read_tp (void); \ - \ - __tp = (char *) __m68k_read_tp (); \ - asm ("movel #" #x "@TLSLE, %0" \ - : "=a" (__offset)); \ - (int *) (__tp + __offset); }) diff --git a/sysdeps/m68k/tst-audit.h b/sysdeps/m68k/tst-audit.h deleted file mode 100644 index 6befca2628..0000000000 --- a/sysdeps/m68k/tst-audit.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. m68k version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define pltenter la_m68k_gnu_pltenter -#define pltexit la_m68k_gnu_pltexit -#define La_regs La_m68k_regs -#define La_retval La_m68k_retval -#define int_retval lrv_d0 diff --git a/sysdeps/m68k/wcpcpy.c b/sysdeps/m68k/wcpcpy.c deleted file mode 100644 index a36316b4f4..0000000000 --- a/sysdeps/m68k/wcpcpy.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* The generic version of this file assumes that __alignof__(wchar_t) == - sizeof (wchar_t). We therefore use this port-specific implementation - instead. */ -#include - -/* Copy SRC to DEST, returning the address of the terminating L'\0' in - DEST. */ -wchar_t * -__wcpcpy (wchar_t *dest, const wchar_t *src) -{ - do - ; - while ((*dest++ = *src++)); - - return dest - 1; -} - -weak_alias (__wcpcpy, wcpcpy) diff --git a/sysdeps/m68k/wcpcpy_chk.c b/sysdeps/m68k/wcpcpy_chk.c deleted file mode 100644 index ec0d13088a..0000000000 --- a/sysdeps/m68k/wcpcpy_chk.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* The generic version of this file assumes that __alignof__(wchar_t) == - sizeof (wchar_t). We therefore use this port-specific implementation - instead. */ -#include - -/* Copy SRC to DEST, returning the address of the terminating L'\0' in - DEST. Check for overflows. */ -wchar_t * -__wcpcpy_chk (wchar_t *dest, const wchar_t *src, size_t destlen) -{ - do - if (destlen-- == 0) - __chk_fail (); - while ((*dest++ = *src++)); - - return dest - 1; -} diff --git a/sysdeps/mach/Makefile b/sysdeps/mach/Makefile deleted file mode 100644 index 1ae25b2d74..0000000000 --- a/sysdeps/mach/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright (C) 1993-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifdef in-Makerules - -# Look for header files in mach/ under the top-level library source directory. -# Look for generated header files where they get created. -includes += -I$(..)mach -I$(common-objpfx)mach/ - -ifneq (mach,$(subdir)) -# Subdirectories other than mach/ might use the generated Mach headers. -# So make sure we get a chance to run in mach/ to make them before all else. - -mach-objpfx = $(common-objpfx)mach/ -else -mach-objpfx = $(objpfx) -endif - -# These are all the generated files that includes. -# Actually, it's only some of them. We omit mach_interface.h -# because it's different in Darwin and the conditional crap is -# too much trouble. This should suffice for getting the mach/Makefile -# rules invoked when they need to be. -mach-before-compile := $(mach-objpfx)mach-shortcuts.h \ - $(patsubst %,$(mach-objpfx)mach/mach_%.h,\ - port host) - -ifneq (mach,$(subdir)) -# This patsubst generates patterns like `m%h-shortcuts.h', which are damn -# likely to match just the corresponding particular file we want. -$(patsubst mach%,m\%h%,$(mach-before-compile)): mach-before-compile # Run only if doesn't exist. -.PHONY: mach-before-compile -mach-before-compile: - $(MAKE) -C $(..)mach subdir=mach mach-before-compile no_deps=t generating=t - -before-compile += $(mach-before-compile) -endif - -endif # in-Makerules diff --git a/sysdeps/mach/Subdirs b/sysdeps/mach/Subdirs deleted file mode 100644 index 24fa4a3c98..0000000000 --- a/sysdeps/mach/Subdirs +++ /dev/null @@ -1,9 +0,0 @@ -# This file says that the mach subdirectory should appear before all others. -# The mach and hurd subdirectories have many generated header files which -# much of the rest of the library depends on, so it is best to build them -# first (and mach before hurd, at that). The before-compile additions in -# sysdeps/{mach,hurd}/Makefile should make it reliably work for these files -# not to exist when making in other directories, but it will be slower that -# way with more somewhat expensive `make' invocations. - -first mach diff --git a/sysdeps/mach/_strerror.c b/sysdeps/mach/_strerror.c deleted file mode 100644 index 8b4b602eaa..0000000000 --- a/sysdeps/mach/_strerror.c +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include <_itoa.h> - -/* It is critical here that we always use the `dcgettext' function for - the message translation. Since only defines the macro - `dgettext' to use `dcgettext' for optimizing programs this is not - always guaranteed. */ -#ifndef dgettext -# include /* We need LC_MESSAGES. */ -# define dgettext(domainname, msgid) dcgettext (domainname, msgid, LC_MESSAGES) -#endif - -/* Return a string describing the errno code in ERRNUM. */ -char * -__strerror_r (int errnum, char *buf, size_t buflen) -{ - int system; - int sub; - int code; - const struct error_system *es; - extern void __mach_error_map_compat (int *); - - __mach_error_map_compat (&errnum); - - system = err_get_system (errnum); - sub = err_get_sub (errnum); - code = err_get_code (errnum); - - if (system > err_max_system || ! __mach_error_systems[system].bad_sub) - { - /* Buffer we use to print the number in. For a maximum size for - `int' of 8 bytes we never need more than 20 digits. */ - char numbuf[21]; - const char *unk = _("Error in unknown error system: "); - const size_t unklen = strlen (unk); - char *p, *q; - - numbuf[20] = '\0'; - p = _itoa_word (errnum, &numbuf[20], 16, 1); - - /* Now construct the result while taking care for the destination - buffer size. */ - q = __mempcpy (buf, unk, MIN (unklen, buflen)); - if (unklen < buflen) - memcpy (q, p, MIN (&numbuf[21] - p, buflen - unklen)); - - /* Terminate the string in any case. */ - if (buflen > 0) - buf[buflen - 1] = '\0'; - - return buf; - } - - es = &__mach_error_systems[system]; - - if (sub >= es->max_sub) - return (char *) es->bad_sub; - - if (code >= es->subsystem[sub].max_code) - { - /* Buffer we use to print the number in. For a maximum size for - `int' of 8 bytes we never need more than 20 digits. */ - char numbuf[21]; - const char *unk = _("Unknown error "); - const size_t unklen = strlen (unk); - char *p, *q; - size_t len = strlen (es->subsystem[sub].subsys_name); - - numbuf[20] = '\0'; - p = _itoa_word (errnum, &numbuf[20], 10, 0); - - /* Now construct the result while taking care for the destination - buffer size. */ - q = __mempcpy (buf, unk, MIN (unklen, buflen)); - if (unklen < buflen) - { - q = __mempcpy (q, es->subsystem[sub].subsys_name, - MIN (len, buflen - unklen)); - if (unklen + len < buflen) - { - *q++ = ' '; - if (unklen + len + 1 < buflen) - memcpy (q, p, - MIN (&numbuf[21] - p, buflen - unklen - len - 1)); - } - } - - /* Terminate the string in any case. */ - if (buflen > 0) - buf[buflen - 1] = '\0'; - - return buf; - } - - return (char *) _(es->subsystem[sub].codes[code]); -} -libc_hidden_def (__strerror_r) -weak_alias (__strerror_r, strerror_r) diff --git a/sysdeps/mach/adjtime.c b/sysdeps/mach/adjtime.c deleted file mode 100644 index f68b0013ff..0000000000 --- a/sysdeps/mach/adjtime.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Adjust the current time of day by the amount in DELTA. - If OLDDELTA is not NULL, it is filled in with the amount - of time adjustment remaining to be done from the last `__adjtime' call. - This call is restricted to the super-user. */ -int -__adjtime (const struct timeval *delta, struct timeval *olddelta) -{ - error_t err; - mach_port_t hostpriv; - - hostpriv = __pid2task (-1); - if (hostpriv == MACH_PORT_NULL) - return -1; - err = __host_adjust_time (hostpriv, delta, olddelta); - __mach_port_deallocate (__mach_task_self (), hostpriv); - if (err) - return __hurd_fail (err); - return 0; -} - -weak_alias (__adjtime, adjtime) diff --git a/sysdeps/mach/configure b/sysdeps/mach/configure deleted file mode 100644 index 632a9c9fa4..0000000000 --- a/sysdeps/mach/configure +++ /dev/null @@ -1,564 +0,0 @@ - - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_header_preproc LINENO HEADER VAR -# ---------------------------------------------- -# Tests whether HEADER is present, setting the cache variable VAR accordingly. -ac_fn_c_check_header_preproc () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f conftest.err conftest.i conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_preproc -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}mig", so it can be a program name with args. -set dummy ${ac_tool_prefix}mig; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MIG"; then - ac_cv_prog_MIG="$MIG" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_MIG="${ac_tool_prefix}mig" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -MIG=$ac_cv_prog_MIG -if test -n "$MIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MIG" >&5 -$as_echo "$MIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_MIG"; then - ac_ct_MIG=$MIG - # Extract the first word of "mig", so it can be a program name with args. -set dummy mig; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_MIG"; then - ac_cv_prog_ac_ct_MIG="$ac_ct_MIG" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_MIG="mig" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_MIG=$ac_cv_prog_ac_ct_MIG -if test -n "$ac_ct_MIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MIG" >&5 -$as_echo "$ac_ct_MIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_MIG" = x; then - MIG="MISSING" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - MIG=$ac_ct_MIG - fi -else - MIG="$ac_cv_prog_MIG" -fi - -if test "x$MIG" = xMISSING; then - as_fn_error $? "cannot find required build tool mig" "$LINENO" 5 -fi -config_vars="$config_vars -MIG = $MIG" - -if test -n "$sysheaders"; then - OLD_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS $SYSINCLUDES" -fi - -### Sanity checks for Mach header installation - - -ac_fn_c_check_header_preproc "$LINENO" "mach/mach_types.h" "ac_cv_header_mach_mach_types_h" -if test "x$ac_cv_header_mach_mach_types_h" = xyes; then : - -else - as_fn_error $? "cannot find Mach headers" "$LINENO" 5 -fi - - -ac_fn_c_check_header_preproc "$LINENO" "mach/mach_types.defs" "ac_cv_header_mach_mach_types_defs" -if test "x$ac_cv_header_mach_mach_types_defs" = xyes; then : - -else - as_fn_error $? "cannot find Mach .defs files" "$LINENO" 5 -fi - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for task_t in mach/mach_types.h" >&5 -$as_echo_n "checking for task_t in mach/mach_types.h... " >&6; } -if ${libc_cv_mach_task_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -extern task_t foo; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_cv_mach_task_t=task_t -else - libc_cv_mach_task_t=task_port_t -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mach_task_t" >&5 -$as_echo "$libc_cv_mach_task_t" >&6; } -if test $libc_cv_mach_task_t != task_t; then - DEFINES="$DEFINES -Dtask_t=task_port_t" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread_t in mach/mach_types.h" >&5 -$as_echo_n "checking for thread_t in mach/mach_types.h... " >&6; } -if ${libc_cv_mach_thread_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -extern thread_t foo; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_cv_mach_thread_t=thread_t -else - libc_cv_mach_thread_t=thread_port_t -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mach_thread_t" >&5 -$as_echo "$libc_cv_mach_thread_t" >&6; } -if test $libc_cv_mach_thread_t != thread_t; then - DEFINES="$DEFINES -Dthread_t=thread_port_t" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for creation_time in task_basic_info" >&5 -$as_echo_n "checking for creation_time in task_basic_info... " >&6; } -if ${libc_cv_mach_task_creation_time+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - -extern struct task_basic_info *i; -long s = i->creation_time.seconds; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_cv_mach_task_creation_time=yes -else - libc_cv_mach_task_creation_time=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mach_task_creation_time" >&5 -$as_echo "$libc_cv_mach_task_creation_time" >&6; } -if test $libc_cv_mach_task_creation_time = no; then - as_fn_error $? "you need Mach headers supporting task_info.creation_time" "$LINENO" 5 -fi - -mach_interface_list= -for ifc in mach mach4 \ - clock clock_priv host_priv host_security ledger lock_set \ - processor processor_set task task_notify thread_act vm_map \ - memory_object memory_object_default default_pager \ - i386/mach_i386 \ - ; do - as_ac_Header=`$as_echo "ac_cv_header_mach/${ifc}.defs" | $as_tr_sh` -ac_fn_c_check_header_preproc "$LINENO" "mach/${ifc}.defs" "$as_ac_Header" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - mach_interface_list="$mach_interface_list $ifc" -fi - - -done -if test "x$mach_interface_list" = x; then - as_fn_error $? "what manner of Mach is this?" "$LINENO" 5 -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for host_page_size in mach_host.defs" >&5 -$as_echo_n "checking for host_page_size in mach_host.defs... " >&6; } -if ${libc_cv_mach_host_page_size+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "host_page_size" >/dev/null 2>&1; then : - libc_cv_mach_host_page_size=yes -else - libc_cv_mach_host_page_size=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mach_host_page_size" >&5 -$as_echo "$libc_cv_mach_host_page_size" >&6; } -if test $libc_cv_mach_host_page_size = yes; then - $as_echo "#define HAVE_HOST_PAGE_SIZE 1" >>confdefs.h - -fi - -ac_fn_c_check_header_preproc "$LINENO" "mach/machine/ndr_def.h" "ac_cv_header_mach_machine_ndr_def_h" -if test "x$ac_cv_header_mach_machine_ndr_def_h" = xyes; then : - DEFINES="$DEFINES -DNDR_DEF_HEADER=''" -else - ac_fn_c_check_header_preproc "$LINENO" "machine/ndr_def.h" "ac_cv_header_machine_ndr_def_h" -if test "x$ac_cv_header_machine_ndr_def_h" = xyes; then : - DEFINES="$DEFINES -DNDR_DEF_HEADER=''" -fi - - -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for i386_io_perm_modify in mach_i386.defs" >&5 -$as_echo_n "checking for i386_io_perm_modify in mach_i386.defs... " >&6; } -if ${libc_cv_mach_i386_ioports+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "i386_io_perm_modify" >/dev/null 2>&1; then : - libc_cv_mach_i386_ioports=yes -else - libc_cv_mach_i386_ioports=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mach_i386_ioports" >&5 -$as_echo "$libc_cv_mach_i386_ioports" >&6; } -if test $libc_cv_mach_i386_ioports = yes; then - $as_echo "#define HAVE_I386_IO_PERM_MODIFY 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for i386_set_gdt in mach_i386.defs" >&5 -$as_echo_n "checking for i386_set_gdt in mach_i386.defs... " >&6; } -if ${libc_cv_mach_i386_gdt+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "i386_set_gdt" >/dev/null 2>&1; then : - libc_cv_mach_i386_gdt=yes -else - libc_cv_mach_i386_gdt=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mach_i386_gdt" >&5 -$as_echo "$libc_cv_mach_i386_gdt" >&6; } -if test $libc_cv_mach_i386_gdt = yes; then - $as_echo "#define HAVE_I386_SET_GDT 1" >>confdefs.h - -fi - - - -# See if mig groks `retcode'. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $MIG supports the retcode keyword" >&5 -$as_echo_n "checking whether $MIG supports the retcode keyword... " >&6; } -if ${hurd_cv_mig_retcode+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.defs <<\EOF -#include -#include -subsystem foobar 1000; -type reply_port_t = polymorphic | MACH_MSG_TYPE_PORT_SEND_ONCE - ctype: mach_port_t; -simpleroutine foobar_reply ( - reply_port: reply_port_t; - err: kern_return_t, RetCode); -EOF -if { ac_try='CC="${CC}" ${MIG-false} -n conftest.defs 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - hurd_cv_mig_retcode=yes -else - hurd_cv_mig_retcode=no -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hurd_cv_mig_retcode" >&5 -$as_echo "$hurd_cv_mig_retcode" >&6; } -if test $hurd_cv_mig_retcode = yes; then - $as_echo "#define HAVE_MIG_RETCODE 1" >>confdefs.h - -fi - -if test -n "$sysheaders"; then - CPPFLAGS=$OLD_CPPFLAGS -fi diff --git a/sysdeps/mach/configure.ac b/sysdeps/mach/configure.ac deleted file mode 100644 index 3033fec946..0000000000 --- a/sysdeps/mach/configure.ac +++ /dev/null @@ -1,135 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. - -AC_CHECK_TOOL(MIG, mig, MISSING) -if test "x$MIG" = xMISSING; then - AC_MSG_ERROR([cannot find required build tool mig]) -fi -LIBC_CONFIG_VAR([MIG], [$MIG]) - -if test -n "$sysheaders"; then - OLD_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS $SYSINCLUDES" -fi - -### Sanity checks for Mach header installation -AC_CHECK_HEADER(mach/mach_types.h,, - [AC_MSG_ERROR([cannot find Mach headers])], -) -AC_CHECK_HEADER(mach/mach_types.defs,, [dnl -AC_MSG_ERROR([cannot find Mach .defs files])], -) - -dnl -dnl mach_TYPE_CHECK(foo_t, bar_t) -dnl -dnl Check if foo_t is defined by . -dnl If not, compile with -Dfoo_t=bar_t. -dnl -AC_DEFUN([mach_TYPE_CHECK], [dnl -AC_CACHE_CHECK(for $1 in mach/mach_types.h, libc_cv_mach_$1, -AC_TRY_COMPILE([#include ], [extern $1 foo;], -libc_cv_mach_$1=$1, libc_cv_mach_$1=$2)) -if test [$]libc_cv_mach_$1 != $1; then - DEFINES="$DEFINES -D$1=$2" -fi]) - -dnl -dnl OSF Mach has renamed these typedefs for some reason. -dnl -mach_TYPE_CHECK(task_t, task_port_t) -mach_TYPE_CHECK(thread_t, thread_port_t) - -dnl -dnl The creation_time field is a GNU Mach addition the other variants lack. -dnl -AC_CACHE_CHECK(for creation_time in task_basic_info, - libc_cv_mach_task_creation_time, [dnl -AC_TRY_COMPILE([#include ], [ -extern struct task_basic_info *i; -long s = i->creation_time.seconds; -], libc_cv_mach_task_creation_time=yes, libc_cv_mach_task_creation_time=no)]) -if test $libc_cv_mach_task_creation_time = no; then - AC_MSG_ERROR([you need Mach headers supporting task_info.creation_time]) -fi - -dnl -dnl The Darwin variant no longer has -dnl but instead has several constituent .defs files. -dnl In this scenario we will presume there is a -dnl that contains an #include for each constituent header file, -dnl but we don't do a check for that here because in a bare -dnl environment the compile against those headers will fail. -dnl -mach_interface_list= -for ifc in mach mach4 \ - clock clock_priv host_priv host_security ledger lock_set \ - processor processor_set task task_notify thread_act vm_map \ - memory_object memory_object_default default_pager \ - i386/mach_i386 \ - ; do - AC_CHECK_HEADER(mach/${ifc}.defs, [dnl - mach_interface_list="$mach_interface_list $ifc"],, -) -done -if test "x$mach_interface_list" = x; then - AC_MSG_ERROR([what manner of Mach is this?]) -fi - -AC_CACHE_CHECK(for host_page_size in mach_host.defs, - libc_cv_mach_host_page_size, [dnl -AC_EGREP_HEADER(host_page_size, mach/mach_host.defs, - libc_cv_mach_host_page_size=yes, - libc_cv_mach_host_page_size=no)]) -if test $libc_cv_mach_host_page_size = yes; then - AC_DEFINE([HAVE_HOST_PAGE_SIZE]) -fi - -AC_CHECK_HEADER(mach/machine/ndr_def.h, [dnl - DEFINES="$DEFINES -DNDR_DEF_HEADER=''"], [dnl -AC_CHECK_HEADER(machine/ndr_def.h, [dnl - DEFINES="$DEFINES -DNDR_DEF_HEADER=''"],, -)], -) - -AC_CACHE_CHECK(for i386_io_perm_modify in mach_i386.defs, - libc_cv_mach_i386_ioports, [dnl -AC_EGREP_HEADER(i386_io_perm_modify, mach/i386/mach_i386.defs, - libc_cv_mach_i386_ioports=yes, - libc_cv_mach_i386_ioports=no)]) -if test $libc_cv_mach_i386_ioports = yes; then - AC_DEFINE([HAVE_I386_IO_PERM_MODIFY]) -fi - -AC_CACHE_CHECK(for i386_set_gdt in mach_i386.defs, - libc_cv_mach_i386_gdt, [dnl -AC_EGREP_HEADER(i386_set_gdt, mach/i386/mach_i386.defs, - libc_cv_mach_i386_gdt=yes, - libc_cv_mach_i386_gdt=no)]) -if test $libc_cv_mach_i386_gdt = yes; then - AC_DEFINE([HAVE_I386_SET_GDT]) -fi - -dnl Swiped from hurd/aclocal.m4 -AC_DEFUN([hurd_MIG_RETCODE], [dnl -# See if mig groks `retcode'. -AC_CACHE_CHECK(whether $MIG supports the retcode keyword, hurd_cv_mig_retcode, -[cat > conftest.defs <<\EOF -#include -#include -subsystem foobar 1000; -type reply_port_t = polymorphic | MACH_MSG_TYPE_PORT_SEND_ONCE - ctype: mach_port_t; -simpleroutine foobar_reply ( - reply_port: reply_port_t; - err: kern_return_t, RetCode); -EOF -if AC_TRY_COMMAND([CC="${CC}" ${MIG-false} -n conftest.defs 1>&AS_MESSAGE_LOG_FD]); then - hurd_cv_mig_retcode=yes -else - hurd_cv_mig_retcode=no -fi -rm -f conftest*]) -if test $hurd_cv_mig_retcode = yes; then - AC_DEFINE(HAVE_MIG_RETCODE) -fi]) - -hurd_MIG_RETCODE - -if test -n "$sysheaders"; then - CPPFLAGS=$OLD_CPPFLAGS -fi diff --git a/sysdeps/mach/getloadavg.c b/sysdeps/mach/getloadavg.c deleted file mode 100644 index c54b772a15..0000000000 --- a/sysdeps/mach/getloadavg.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Get system load averages. Mach version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - -/* Put the 1 minute, 5 minute and 15 minute load averages - into the first NELEM elements of LOADAVG. - Return the number written (never more than 3, but may be less than NELEM), - or -1 if an error occurred. */ - -int -getloadavg (double loadavg[], int nelem) -{ - host_load_info_data_t info; - mach_msg_type_number_t size = HOST_LOAD_INFO_COUNT; - error_t err; - int i; - - err = __host_info (__mach_host_self (), HOST_LOAD_INFO, - (host_info_t) &info, &size); - if (err) - return __hurd_fail (err); - if (size < HOST_LOAD_INFO_COUNT) - return __hurd_fail (EGRATUITOUS); - - if (nelem > 3) - nelem = 3; - for (i = 0; i < nelem; ++i) - loadavg[i] = (double) info.avenrun[i] / (double) LOAD_SCALE; - - return i; -} diff --git a/sysdeps/mach/getpagesize.c b/sysdeps/mach/getpagesize.c deleted file mode 100644 index e1ab8168c2..0000000000 --- a/sysdeps/mach/getpagesize.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Return the system page size. */ -int -__getpagesize (void) -{ - return __vm_page_size; -} -libc_hidden_def (__getpagesize) -weak_alias (__getpagesize, getpagesize) diff --git a/sysdeps/mach/getsysstats.c b/sysdeps/mach/getsysstats.c deleted file mode 100644 index 0dacab0300..0000000000 --- a/sysdeps/mach/getsysstats.c +++ /dev/null @@ -1,105 +0,0 @@ -/* System dependent pieces of sysconf; Mach version - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -/* Return the number of processors configured on the system. */ -int -__get_nprocs_conf (void) -{ - struct host_basic_info hbi; - kern_return_t err; - mach_msg_type_number_t cnt = HOST_BASIC_INFO_COUNT; - - err = __host_info (__mach_host_self (), HOST_BASIC_INFO, - (host_info_t) &hbi, &cnt); - if (err) - return __hurd_fail (err); - else if (cnt != HOST_BASIC_INFO_COUNT) - return __hurd_fail (EIEIO); - - return hbi.max_cpus; -} -weak_alias (__get_nprocs_conf, get_nprocs_conf) - -/* Return the number of processors currently available on the system. */ -int -__get_nprocs (void) -{ - struct host_basic_info hbi; - kern_return_t err; - mach_msg_type_number_t cnt = HOST_BASIC_INFO_COUNT; - - err = __host_info (__mach_host_self (), HOST_BASIC_INFO, - (host_info_t) &hbi, &cnt); - if (err) - return __hurd_fail (err); - else if (cnt != HOST_BASIC_INFO_COUNT) - return __hurd_fail (EIEIO); - - return hbi.avail_cpus; -} -weak_alias (__get_nprocs, get_nprocs) - -/* Return the number of physical pages on the system. */ -long int -__get_phys_pages (void) -{ - struct host_basic_info hbi; - kern_return_t err; - mach_msg_type_number_t cnt = HOST_BASIC_INFO_COUNT; - - err = __host_info (__mach_host_self (), HOST_BASIC_INFO, - (host_info_t) &hbi, &cnt); - if (err) - return __hurd_fail (err); - else if (cnt != HOST_BASIC_INFO_COUNT) - return __hurd_fail (EIEIO); - - return hbi.memory_size / __vm_page_size; -} -weak_alias (__get_phys_pages, get_phys_pages) - -/* Return the number of available physical pages */ -long int -__get_avphys_pages (void) -{ - vm_statistics_data_t vs; - kern_return_t err; - -#ifdef HOST_VM_INFO - { - mach_msg_type_number_t count = HOST_VM_INFO_COUNT; - err = __host_info (__mach_host_self (), HOST_VM_INFO, - (host_info_t) &vs, &count); - if (!err && count < HOST_VM_INFO_COUNT) - err = EGRATUITOUS; - } -#else - err = __vm_statistics (__mach_task_self (), &vs); -#endif - if (err) - return __hurd_fail (err); - - return vs.free_count; -} -weak_alias (__get_avphys_pages, get_avphys_pages) diff --git a/sysdeps/mach/gettimeofday.c b/sysdeps/mach/gettimeofday.c deleted file mode 100644 index ca0252e7af..0000000000 --- a/sysdeps/mach/gettimeofday.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Get the current time of day and timezone information, - putting it into *TV and *TZ. If TZ is NULL, *TZ is not filled. - Returns 0 on success, -1 on errors. */ -int -__gettimeofday (struct timeval *tv, struct timezone *tz) -{ - kern_return_t err; - - if (tz != NULL) - *tz = (struct timezone){0, 0}; /* XXX */ - - if (err = __host_get_time (__mach_host_self (), (time_value_t *) tv)) - { - errno = err; - return -1; - } - return 0; -} -libc_hidden_def (__gettimeofday) -weak_alias (__gettimeofday, gettimeofday) -libc_hidden_weak (gettimeofday) diff --git a/sysdeps/mach/hurd/Implies b/sysdeps/mach/hurd/Implies deleted file mode 100644 index d2d5234c1f..0000000000 --- a/sysdeps/mach/hurd/Implies +++ /dev/null @@ -1,5 +0,0 @@ -# The gnu subdirectory exists for things common to both Linux-based and -# Hurd-based GNU systems. -gnu -# The Hurd provides a rough superset of the functionality of 4.4 BSD. -unix/bsd diff --git a/sysdeps/mach/hurd/Makeconfig b/sysdeps/mach/hurd/Makeconfig deleted file mode 100644 index fe3b7c553e..0000000000 --- a/sysdeps/mach/hurd/Makeconfig +++ /dev/null @@ -1,7 +0,0 @@ -# We need special startup code for statically linked binaries. -# See Makefile in this directory for the rule that builds this. -# We must define this variable earlier than sysdeps Makefiles are included. -static-start-installed-name = crt0.o - -# GNU libc on the Hurd is always reentrant. -libc-reentrant = yes diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile deleted file mode 100644 index 13bdf5c7c9..0000000000 --- a/sysdeps/mach/hurd/Makefile +++ /dev/null @@ -1,206 +0,0 @@ -# Copyright (C) 1993-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifdef in-Makerules - -# Look for header files in hurd/ under the top-level library source directory. -# Look for generated header files where they get created. -includes += -I$(..)hurd -I$(common-objpfx)hurd/ - -# We use the style `if (err = call(...))' a lot in the Hurd code, -# where we have a lot of functions that return zero or an errno code. -+cflags += -Wno-parentheses - -# Do not use any assembly code from sysdeps/unix (and subdirectories). -# This bypasses all the system call stubs and uses any existing posix or -# generic C files instead. -inhibit-sysdep-asm += unix.* -inhibit-unix-syscalls = yes - -# Don't try to generate anything from the installed Unix system and its -# libraries. That is only of use when building for a Unix system, so as to -# be compatible with some existing binaries for that system. -inhibit-glue = yes - -ifeq (,$(filter mach hurd,$(subdir))) -# Subdirectories other than hurd/ might use the generated Hurd headers. -# So make sure we get a chance to run in hurd/ to make them before all else. -# (But we don't want to do this in mach/, because hurd/ needs some things -# there, and we know mach/ doesn't need anything from hurd/.) - -hurd-objpfx = $(common-objpfx)hurd/ - -# These are all the generated headers that includes. -before-compile += $(patsubst %,$(hurd-objpfx)hurd/%.h,auth io fs process) -$(patsubst %,$(hurd-objpfx)hurd/%.h,auth io fs process): hurd-before-compile -.PHONY: hurd-before-compile -hurd-before-compile: $(common-objpfx)mach/mach-shortcuts.h - $(MAKE) -C $(..)hurd subdir=hurd before-compile no_deps=t -endif - -# Hurd profil.c includes this file, so give a rule to make it. -ifeq ($(subdir),gmon) -$(common-objpfx)hurd/../mach/RPC_task_get_sampled_pcs.c: - $(MAKE) -C $(..)mach subdir=mach before-compile no_deps=t -endif - - -# Generate bits/errno.h from the section of the manual that lists all the errno -# codes. - -errno.texinfo = $(..)manual/errno.texi - -hurd = $(..)sysdeps/mach/hurd - -define mach-errno-h -($(foreach h,mach/message.h \ - mach/kern_return.h \ - mach/mig_errors.h \ - device/device_types.h,\ - echo '#include <$h>';\ - )) -endef - -# We use the compiler to generate a list of absolute file names for -# the headers we want to search for Mach error codes, listed above (and -# incidentally, all other headers those include). --include $(common-objpfx)errnos.d -$(common-objpfx)errnos.d: $(mach-errnos-deps) - $(mach-errno-h) | \ - $(CC) $(CFLAGS) \ - $(subst -include $(common-objpfx)libc-modules.h,,$(CPPFLAGS)) \ - -M -x c - | \ - sed $(sed-remove-objpfx) -e 's,- *:,mach-errnos-deps :=,' \ - -e 's, \.\./, $(..),g' > $@t - mv -f $@t $@ - -$(hurd)/bits/errno.h: $(common-objpfx)stamp-errnos ; -$(common-objpfx)stamp-errnos: $(hurd)/errnos.awk $(errno.texinfo) \ - $(mach-errnos-deps) $(common-objpfx)errnos.d - $(AWK) -f $^ > $(hurd)/bits/errno.h-tmp -# Make it unwritable so noone will edit it by mistake. - -chmod a-w $(hurd)/bits/errno.h-tmp - $(move-if-change) $(hurd)/bits/errno.h-tmp $(hurd)/bits/errno.h - touch $@ - -common-generated += errnos.d stamp-errnos - -# We install the real libc.a as libcrt.a and as libc.a we install a linker -# script which does -( -lcrt -lmachuser -lhurduser -). - -libc-name = crt - -ifeq (,$(subdir)) -install-others += $(inst_libdir)/libc.a -$(inst_libdir)/libc.a: $(hurd)/libc-ldscript $(+force); $(do-install) -ifeq (yes,$(build-profile)) -install-others += $(inst_libdir)/libc_p.a -$(inst_libdir)/libc_p.a: $(hurd)/libc_p-ldscript $(+force); $(do-install) -endif -endif - -# Make sure these are used to build the libc.so shared object too. There -# is a circular dependency between each of these shared objects and libc -# (many high-level libc functions call stubs, stubs call low-level libc -# functions like memcpy and mach_msg). This works out fine at run time -# (all the objects are loaded before resolving their symbols, so these -# interdependencies are fine). But to create the shared objects we must -# link them one at a time; since each needs one or both of the others to -# produce its DT_NEEDED entries and to assign its undefined symbols the -# right symbol versions, we can't do any of them before the others! To -# get around this, we link each lib*user.so shared object twice. First, -# we link an object without reference to libc.so (since we haven't linked -# libc.so yet), so it lacks a DT_NEEDED record for the libc soname it -# depends on, and its undefined symbol references lack the symbol version -# assignments they should have. We will use this shared object solely to -# link libc.so against it; that gives libc.so the proper DT_NEEDED record, -# and symbol versions assignments (if the lib*user.so object is using them). -# Finally we link a second version of the same lib*user.so shared object, -# this time linked normally against libc so it gets a proper DT_NEEDED -# record and symbol version set; this one can be installed for run-time use. -rpcuserlibs := $(common-objpfx)mach/libmachuser.so \ - $(common-objpfx)hurd/libhurduser.so -link-rpcuserlibs := $(rpcuserlibs:%user.so=%user-link.so) -$(common-objpfx)libc.so: $(link-rpcuserlibs) -$(common-objpfx)linkobj/libc.so: $(link-rpcuserlibs) -rpath-dirs += mach hurd - -# Make sure the `lib' pass builds the dummy shared objects so -# we can link libc against them. -ifeq (mach,$(subdir)) -lib-noranlib: $(common-objpfx)mach/libmachuser-link.so -endif -ifeq (hurd,$(subdir)) -lib-noranlib: $(common-objpfx)hurd/libhurduser-link.so -endif - -$(link-rpcuserlibs): %-link.so: %_pic.a -# These shared objects are just for the purpose of linking libc, -# so they don't need abi-note.o linked into them. - $(build-shlib-helper) \ - -nostdlib -o $@ \ - -Wl,-soname=$(*F).so$($(*F).so-version) \ - $(build-shlib-objlist) -libmachuser-link.so-no-z-defs = yes -libhurduser-link.so-no-z-defs = yes - -# And get them into the libc.so ldscript. -$(inst_libdir)/libc.so: $(rpcuserlibs) - -# The RPC stubs from these libraries are needed in building the dynamic -# linker, too. It must be self-contained, so we link the needed PIC -# objects directly into the shared object. -ifeq (elf,$(subdir)) -$(objpfx)librtld.map: $(rpcuserlibs:.so=_pic.a) - -CFLAGS-dl-load.c = -DEXTERNAL_MAP_FROM_FD -endif - -# Override the generic Makeconfig values so we link against the RPC libs. -link-libc-static := -Wl,--start-group \ - $(patsubst %,$(common-objpfx)%.a,\ - libc mach/libmachuser hurd/libhurduser) \ - $(static-gnulib) -Wl,--end-group -link-libc-static-tests := -Wl,--start-group \ - $(patsubst %,$(common-objpfx)%.a,\ - libc mach/libmachuser hurd/libhurduser) \ - $(static-gnulib-tests) -Wl,--end-group - -ifeq ($(subdir),csu) - -extra-objs += static-start.o - -# We need special startup code for statically linked binaries. -$(objpfx)crt0.o: $(objpfx)static-start.o $(objpfx)abi-note.o $(objpfx)init.o - $(link-relocatable) - -endif - -ifeq (hurd, $(subdir)) -sysdep_routines += cthreads -endif - -ifeq ($(subdir),sunrpc) -sysdep_headers += nfs/nfs.h -endif - -ifeq ($(subdir),socket) -sysdep_headers += net/ethernet.h net/if_arp.h net/if_ether.h net/if_ppp.h \ - net/route.h -endif - -endif # in-Makerules diff --git a/sysdeps/mach/hurd/Subdirs b/sysdeps/mach/hurd/Subdirs deleted file mode 100644 index 7a7757582a..0000000000 --- a/sysdeps/mach/hurd/Subdirs +++ /dev/null @@ -1,9 +0,0 @@ -# This file says that the hurd subdirectory should appear before all others. -# The mach and hurd subdirectories have many generated header files which -# much of the rest of the library depends on, so it is best to build them -# first (and mach before hurd, at that). The before-compile additions in -# sysdeps/{mach,hurd}/Makefile should make it reliably work for these files -# not to exist when making in other directories, but it will be slower that -# way with more somewhat expensive `make' invocations. - -first hurd diff --git a/sysdeps/mach/hurd/Versions b/sysdeps/mach/hurd/Versions deleted file mode 100644 index 89e19061af..0000000000 --- a/sysdeps/mach/hurd/Versions +++ /dev/null @@ -1,37 +0,0 @@ -libc { - GLIBC_2.0 { - # functions with a weak definition in the dynamic linker - __getcwd; __mmap; - } - GLIBC_PRIVATE { - # Functions shared with the dynamic linker - __libc_read; __libc_write; __libc_lseek64; - - _dl_init_first; - } -} - -ld { - GLIBC_2.0 { - # variables that must be shared with libc - __hurd_sigthread_stack_base; __hurd_sigthread_stack_end; - __hurd_sigthread_variables; - __hurd_threadvar_stack_mask; __hurd_threadvar_stack_offset; - - # functions that must be shared with libc - __close; __getcwd; __getpid; - __mmap; __open; __xstat64; __fxstat64; - _exit; _hurd_intr_rpc_mach_msg; - abort; - } - GLIBC_2.2.6 { - # this also must be shared with libc. - __errno_location; - } - GLIBC_PRIVATE { - _dl_init_first; - - # functions that must be shared with libc - __libc_read; __libc_write; __libc_lseek64; - } -} diff --git a/sysdeps/mach/hurd/_exit.c b/sysdeps/mach/hurd/_exit.c deleted file mode 100644 index ae3b7984a8..0000000000 --- a/sysdeps/mach/hurd/_exit.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -void -_hurd_exit (int status) -{ - /* Give the proc server our exit status. */ - __USEPORT (PROC, __proc_mark_exit (port, status, 0)); - - /* Commit suicide. */ - __task_terminate (__mach_task_self ()); - - /* Perhaps the cached mach_task_self was bogus. */ - __task_terminate ((__mach_task_self) ()); - - /* This sucker really doesn't want to die. */ - while (1) - { -#ifdef LOSE - LOSE; -#else - volatile const int zero = 0, one = 1; - volatile int lossage = one / zero; -#endif - } -} - -void -_exit (int status) -{ - _hurd_exit (W_EXITCODE (status, 0)); -} -libc_hidden_def (_exit) -rtld_hidden_def (_exit) -weak_alias (_exit, _Exit) diff --git a/sysdeps/mach/hurd/accept.c b/sysdeps/mach/hurd/accept.c deleted file mode 100644 index 5c6d5256bf..0000000000 --- a/sysdeps/mach/hurd/accept.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Await a connection on socket FD. - When a connection arrives, open a new socket to communicate with it, - set *ADDRARG (which is *ADDR_LEN bytes long) to the address of the connecting - peer and *ADDR_LEN to the address's actual length, and return the - new socket's descriptor, or -1 for errors. */ -int -accept (int fd, __SOCKADDR_ARG addrarg, socklen_t *addr_len) -{ - return __libc_accept4 (fd, addrarg, addr_len, 0); -} -libc_hidden_def (accept) diff --git a/sysdeps/mach/hurd/accept4.c b/sysdeps/mach/hurd/accept4.c deleted file mode 100644 index 4b3f62a5a5..0000000000 --- a/sysdeps/mach/hurd/accept4.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include -#include -#include -#include - -/* Await a connection on socket FD. - When a connection arrives, open a new socket to communicate with it, - set *ADDRARG (which is *ADDR_LEN bytes long) to the address of the connecting - peer and *ADDR_LEN to the address's actual length, and return the - new socket's descriptor, or -1 for errors. The operation can be influenced - by the FLAGS parameter. */ -int -__libc_accept4 (int fd, __SOCKADDR_ARG addrarg, socklen_t *addr_len, int flags) -{ - error_t err; - socket_t new; - addr_port_t aport; - struct sockaddr *addr = addrarg.__sockaddr__; - char *buf = (char *) addr; - mach_msg_type_number_t buflen; - int type; - - flags = sock_to_o_flags (flags); - - if (flags & ~(O_CLOEXEC | O_NONBLOCK)) - return __hurd_fail (EINVAL); - - if (err = HURD_DPORT_USE (fd, __socket_accept (port, &new, &aport))) - return __hurd_dfail (fd, err); - - if (addr != NULL) - { - buflen = *addr_len; - err = __socket_whatis_address (aport, &type, &buf, &buflen); - if (err == EOPNOTSUPP) - /* If the protocol server can't tell us the address, just return a - zero-length one. */ - { - buf = (char *)addr; - buflen = 0; - err = 0; - } - } - __mach_port_deallocate (__mach_task_self (), aport); - - if (! err) - { - if (flags & O_NONBLOCK) - err = __io_set_some_openmodes (new, O_NONBLOCK); - /* TODO: do we need special ERR massaging after the previous call? */ - } - - if (err) - { - __mach_port_deallocate (__mach_task_self (), new); - return __hurd_dfail (fd, err); - } - - if (addr != NULL) - { - if (*addr_len > buflen) - *addr_len = buflen; - - if (buf != (char *) addr) - { - memcpy (addr, buf, *addr_len); - __vm_deallocate (__mach_task_self (), (vm_address_t) buf, buflen); - } - - if (buflen > 0) - addr->sa_family = type; - } - - return _hurd_intern_fd (new, O_IGNORE_CTTY | flags, 1); -} -weak_alias (__libc_accept4, accept4) diff --git a/sysdeps/mach/hurd/access.c b/sysdeps/mach/hurd/access.c deleted file mode 100644 index 185e000c9d..0000000000 --- a/sysdeps/mach/hurd/access.c +++ /dev/null @@ -1,173 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -static int -hurd_fail_seterrno (error_t err) -{ - return __hurd_fail (err); -} - -static int -hurd_fail_noerrno (error_t err) -{ - return -1; -} - -static int -access_common (const char *file, int type, int (*errfunc) (error_t)) -{ - error_t err; - file_t rcrdir, rcwdir, io; - int flags, allowed; - - error_t reauthenticate (int which, file_t *result) - { - /* Get a port to our root directory, authenticated with the real IDs. */ - error_t err; - mach_port_t ref; - ref = __mach_reply_port (); - err = HURD_PORT_USE - (&_hurd_ports[which], - ({ - err = __io_reauthenticate (port, ref, MACH_MSG_TYPE_MAKE_SEND); - if (!err) - err = __auth_user_authenticate (_hurd_id.rid_auth, - ref, MACH_MSG_TYPE_MAKE_SEND, - result); - err; - })); - __mach_port_destroy (__mach_task_self (), ref); - return err; - } - - error_t init_port (int which, error_t (*operate) (mach_port_t)) - { - switch (which) - { - case INIT_PORT_AUTH: - return (*operate) (_hurd_id.rid_auth); - case INIT_PORT_CRDIR: - return (reauthenticate (INIT_PORT_CRDIR, &rcrdir) ?: - (*operate) (rcrdir)); - case INIT_PORT_CWDIR: - return (reauthenticate (INIT_PORT_CWDIR, &rcwdir) ?: - (*operate) (rcwdir)); - default: - return _hurd_ports_use (which, operate); - } - } - - rcrdir = rcwdir = MACH_PORT_NULL; - - HURD_CRITICAL_BEGIN; - - __mutex_lock (&_hurd_id.lock); - /* Get _hurd_id up to date. */ - if (err = _hurd_check_ids ()) - goto lose; - - if (_hurd_id.rid_auth == MACH_PORT_NULL) - { - /* Set up _hurd_id.rid_auth. This is a special auth server port - which uses the real uid and gid (the first aux uid and gid) as - the only effective uid and gid. */ - - if (_hurd_id.aux.nuids < 1 || _hurd_id.aux.ngids < 1) - { - /* We do not have a real UID and GID. Lose, lose, lose! */ - err = EGRATUITOUS; - goto lose; - } - - /* Create a new auth port using our real UID and GID (the first - auxiliary UID and GID) as the only effective IDs. */ - if (err = __USEPORT (AUTH, - __auth_makeauth (port, - NULL, MACH_MSG_TYPE_COPY_SEND, 0, - _hurd_id.aux.uids, 1, - _hurd_id.aux.uids, - _hurd_id.aux.nuids, - _hurd_id.aux.gids, 1, - _hurd_id.aux.gids, - _hurd_id.aux.ngids, - &_hurd_id.rid_auth))) - goto lose; - } - - if (!err) - /* Look up the file name using the modified init ports. */ - err = __hurd_file_name_lookup (&init_port, &__getdport, 0, - file, 0, 0, &io); - - /* We are done with _hurd_id.rid_auth now. */ - lose: - __mutex_unlock (&_hurd_id.lock); - - HURD_CRITICAL_END; - - if (rcrdir != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), rcrdir); - if (rcwdir != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), rcwdir); - if (err) - return errfunc (err); - - /* Find out what types of access we are allowed to this file. */ - err = __file_check_access (io, &allowed); - __mach_port_deallocate (__mach_task_self (), io); - if (err) - return errfunc (err); - - flags = 0; - if (type & R_OK) - flags |= O_READ; - if (type & W_OK) - flags |= O_WRITE; - if (type & X_OK) - flags |= O_EXEC; - - if (flags & ~allowed) - /* We are not allowed all the requested types of access. */ - return errfunc (EACCES); - - return 0; -} - -/* Test for access to FILE by our real user and group IDs without setting - errno. This may be unsafe to run during initialization of tunables - since access_common calls __hurd_file_name_lookup, which calls - __hurd_file_name_lookup_retry, which can set errno. */ -int -__access_noerrno (const char *file, int type) -{ - return access_common (file, type, hurd_fail_noerrno); -} - -/* Test for access to FILE by our real user and group IDs. */ -int -__access (const char *file, int type) -{ - return access_common (file, type, hurd_fail_seterrno); -} -weak_alias (__access, access) diff --git a/sysdeps/mach/hurd/adjtime.c b/sysdeps/mach/hurd/adjtime.c deleted file mode 100644 index 3175e47ff0..0000000000 --- a/sysdeps/mach/hurd/adjtime.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Adjust the current time of day by the amount in DELTA. - If OLDDELTA is not NULL, it is filled in with the amount - of time adjustment remaining to be done from the last `__adjtime' call. - This call is restricted to the super-user. */ -int -__adjtime (const struct timeval *delta, struct timeval *olddelta) -{ - error_t err; - mach_port_t hostpriv; - struct timeval dummy; - - err = __get_privileged_ports (&hostpriv, NULL); - if (err) - return __hurd_fail (EPERM); - - if (olddelta == NULL) - olddelta = &dummy; - - err = __host_adjust_time (hostpriv, - /* `time_value_t' and `struct timeval' are in - fact identical with the names changed. */ - *(time_value_t *) delta, - (time_value_t *) olddelta); - __mach_port_deallocate (__mach_task_self (), hostpriv); - - if (err) - return __hurd_fail (err); - return 0; -} - -weak_alias (__adjtime, adjtime) diff --git a/sysdeps/mach/hurd/bind.c b/sysdeps/mach/hurd/bind.c deleted file mode 100644 index a0dbea6551..0000000000 --- a/sysdeps/mach/hurd/bind.c +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "hurd/hurdsocket.h" - -/* Give the socket FD the local address ADDR (which is LEN bytes long). */ -int -__bind (int fd, __CONST_SOCKADDR_ARG addrarg, socklen_t len) -{ - addr_port_t aport; - error_t err; - const struct sockaddr_un *addr = addrarg.__sockaddr_un__; - - if (addr->sun_family == AF_LOCAL) - { - char *name = _hurd_sun_path_dupa (addr, len); - /* For the local domain, we must create a node in the filesystem - using the ifsock translator and then fetch the address from it. */ - file_t dir, node, ifsock; - char *n; - - dir = __file_name_split (name, &n); - if (dir == MACH_PORT_NULL) - return -1; - - /* Create a new, unlinked node in the target directory. */ - err = __dir_mkfile (dir, O_CREAT, 0666 & ~_hurd_umask, &node); - - if (! err) - { - /* Set the node's translator to make it a local-domain socket. */ - err = __file_set_translator (node, - FS_TRANS_EXCL | FS_TRANS_SET, - FS_TRANS_EXCL | FS_TRANS_SET, 0, - _HURD_IFSOCK, sizeof _HURD_IFSOCK, - MACH_PORT_NULL, - MACH_MSG_TYPE_COPY_SEND); - if (! err) - { - enum retry_type doretry; - char retryname[1024]; - /* Get a port to the ifsock translator. */ - err = __dir_lookup (node, "", 0, 0, &doretry, retryname, &ifsock); - if (! err && (doretry != FS_RETRY_NORMAL || retryname[0] != '\0')) - err = EADDRINUSE; - } - if (! err) - { - /* Get the address port. */ - err = __ifsock_getsockaddr (ifsock, &aport); - if (err == MIG_BAD_ID || err == EOPNOTSUPP) - err = EGRATUITOUS; - if (! err) - { - /* Link the node, now a socket with proper mode, into the - target directory. */ - err = __dir_link (dir, node, n, 1); - if (err == EEXIST) - err = EADDRINUSE; - if (err) - __mach_port_deallocate (__mach_task_self (), aport); - } - __mach_port_deallocate (__mach_task_self (), ifsock); - } - __mach_port_deallocate (__mach_task_self (), node); - } - __mach_port_deallocate (__mach_task_self (), dir); - - if (err) - return __hurd_fail (err); - } - else - err = EIEIO; - - err = HURD_DPORT_USE (fd, - ({ - if (err) - err = __socket_create_address (port, - addr->sun_family, - (char *) addr, len, - &aport); - if (! err) - { - err = __socket_bind (port, aport); - __mach_port_deallocate (__mach_task_self (), - aport); - } - err; - })); - - return err ? __hurd_dfail (fd, err) : 0; -} - -weak_alias (__bind, bind) diff --git a/sysdeps/mach/hurd/bits/errno.h b/sysdeps/mach/hurd/bits/errno.h deleted file mode 100644 index d20ffe654a..0000000000 --- a/sysdeps/mach/hurd/bits/errno.h +++ /dev/null @@ -1,329 +0,0 @@ -/* This file generated by errnos.awk. */ - -/* The Hurd uses Mach error system 0x10, currently only subsystem 0. */ -#ifndef _HURD_ERRNO -#define _HURD_ERRNO(n) ((0x10 << 26) | ((n) & 0x3fff)) -#endif - -#ifdef _ERRNO_H - -enum __error_t_codes -{ - /* The value zero always means success and it is perfectly fine for - code to use 0 explicitly (or implicitly, e.g. via Boolean coercion). - Having an enum entry for zero both makes the debugger print the name - for error_t-typed zero values, and prevents the compiler from - issuing warnings about 'case 0:' in a switch on an error_t-typed - value. */ - ESUCCESS = 0, - -#undef EDOM -#undef ERANGE - EPERM = _HURD_ERRNO (1), -#define EPERM _HURD_ERRNO (1) /* Operation not permitted */ - ENOENT = _HURD_ERRNO (2), -#define ENOENT _HURD_ERRNO (2) /* No such file or directory */ - ESRCH = _HURD_ERRNO (3), -#define ESRCH _HURD_ERRNO (3) /* No such process */ - EINTR = _HURD_ERRNO (4), -#define EINTR _HURD_ERRNO (4) /* Interrupted system call */ - EIO = _HURD_ERRNO (5), -#define EIO _HURD_ERRNO (5) /* Input/output error */ - ENXIO = _HURD_ERRNO (6), -#define ENXIO _HURD_ERRNO (6) /* No such device or address */ - E2BIG = _HURD_ERRNO (7), -#define E2BIG _HURD_ERRNO (7) /* Argument list too long */ - ENOEXEC = _HURD_ERRNO (8), -#define ENOEXEC _HURD_ERRNO (8) /* Exec format error */ - EBADF = _HURD_ERRNO (9), -#define EBADF _HURD_ERRNO (9) /* Bad file descriptor */ - ECHILD = _HURD_ERRNO (10), -#define ECHILD _HURD_ERRNO (10)/* No child processes */ - EDEADLK = _HURD_ERRNO (11), -#define EDEADLK _HURD_ERRNO (11)/* Resource deadlock avoided */ - ENOMEM = _HURD_ERRNO (12), -#define ENOMEM _HURD_ERRNO (12)/* Cannot allocate memory */ - EACCES = _HURD_ERRNO (13), -#define EACCES _HURD_ERRNO (13)/* Permission denied */ - EFAULT = _HURD_ERRNO (14), -#define EFAULT _HURD_ERRNO (14)/* Bad address */ - ENOTBLK = _HURD_ERRNO (15), -#define ENOTBLK _HURD_ERRNO (15)/* Block device required */ - EBUSY = _HURD_ERRNO (16), -#define EBUSY _HURD_ERRNO (16)/* Device or resource busy */ - EEXIST = _HURD_ERRNO (17), -#define EEXIST _HURD_ERRNO (17)/* File exists */ - EXDEV = _HURD_ERRNO (18), -#define EXDEV _HURD_ERRNO (18)/* Invalid cross-device link */ - ENODEV = _HURD_ERRNO (19), -#define ENODEV _HURD_ERRNO (19)/* No such device */ - ENOTDIR = _HURD_ERRNO (20), -#define ENOTDIR _HURD_ERRNO (20)/* Not a directory */ - EISDIR = _HURD_ERRNO (21), -#define EISDIR _HURD_ERRNO (21)/* Is a directory */ - EINVAL = _HURD_ERRNO (22), -#define EINVAL _HURD_ERRNO (22)/* Invalid argument */ - EMFILE = _HURD_ERRNO (24), -#define EMFILE _HURD_ERRNO (24)/* Too many open files */ - ENFILE = _HURD_ERRNO (23), -#define ENFILE _HURD_ERRNO (23)/* Too many open files in system */ - ENOTTY = _HURD_ERRNO (25), -#define ENOTTY _HURD_ERRNO (25)/* Inappropriate ioctl for device */ - ETXTBSY = _HURD_ERRNO (26), -#define ETXTBSY _HURD_ERRNO (26)/* Text file busy */ - EFBIG = _HURD_ERRNO (27), -#define EFBIG _HURD_ERRNO (27)/* File too large */ - ENOSPC = _HURD_ERRNO (28), -#define ENOSPC _HURD_ERRNO (28)/* No space left on device */ - ESPIPE = _HURD_ERRNO (29), -#define ESPIPE _HURD_ERRNO (29)/* Illegal seek */ - EROFS = _HURD_ERRNO (30), -#define EROFS _HURD_ERRNO (30)/* Read-only file system */ - EMLINK = _HURD_ERRNO (31), -#define EMLINK _HURD_ERRNO (31)/* Too many links */ - EPIPE = _HURD_ERRNO (32), -#define EPIPE _HURD_ERRNO (32)/* Broken pipe */ - EDOM = _HURD_ERRNO (33), -#define EDOM _HURD_ERRNO (33)/* Numerical argument out of domain */ - ERANGE = _HURD_ERRNO (34), -#define ERANGE _HURD_ERRNO (34)/* Numerical result out of range */ - EAGAIN = _HURD_ERRNO (35), -#define EAGAIN _HURD_ERRNO (35)/* Resource temporarily unavailable */ -#define EWOULDBLOCK EAGAIN /* Operation would block */ - EINPROGRESS = _HURD_ERRNO (36), -#define EINPROGRESS _HURD_ERRNO (36)/* Operation now in progress */ - EALREADY = _HURD_ERRNO (37), -#define EALREADY _HURD_ERRNO (37)/* Operation already in progress */ - ENOTSOCK = _HURD_ERRNO (38), -#define ENOTSOCK _HURD_ERRNO (38)/* Socket operation on non-socket */ - EMSGSIZE = _HURD_ERRNO (40), -#define EMSGSIZE _HURD_ERRNO (40)/* Message too long */ - EPROTOTYPE = _HURD_ERRNO (41), -#define EPROTOTYPE _HURD_ERRNO (41)/* Protocol wrong type for socket */ - ENOPROTOOPT = _HURD_ERRNO (42), -#define ENOPROTOOPT _HURD_ERRNO (42)/* Protocol not available */ - EPROTONOSUPPORT = _HURD_ERRNO (43), -#define EPROTONOSUPPORT _HURD_ERRNO (43)/* Protocol not supported */ - ESOCKTNOSUPPORT = _HURD_ERRNO (44), -#define ESOCKTNOSUPPORT _HURD_ERRNO (44)/* Socket type not supported */ - EOPNOTSUPP = _HURD_ERRNO (45), -#define EOPNOTSUPP _HURD_ERRNO (45)/* Operation not supported */ - EPFNOSUPPORT = _HURD_ERRNO (46), -#define EPFNOSUPPORT _HURD_ERRNO (46)/* Protocol family not supported */ - EAFNOSUPPORT = _HURD_ERRNO (47), -#define EAFNOSUPPORT _HURD_ERRNO (47)/* Address family not supported by protocol */ - EADDRINUSE = _HURD_ERRNO (48), -#define EADDRINUSE _HURD_ERRNO (48)/* Address already in use */ - EADDRNOTAVAIL = _HURD_ERRNO (49), -#define EADDRNOTAVAIL _HURD_ERRNO (49)/* Cannot assign requested address */ - ENETDOWN = _HURD_ERRNO (50), -#define ENETDOWN _HURD_ERRNO (50)/* Network is down */ - ENETUNREACH = _HURD_ERRNO (51), -#define ENETUNREACH _HURD_ERRNO (51)/* Network is unreachable */ - ENETRESET = _HURD_ERRNO (52), -#define ENETRESET _HURD_ERRNO (52)/* Network dropped connection on reset */ - ECONNABORTED = _HURD_ERRNO (53), -#define ECONNABORTED _HURD_ERRNO (53)/* Software caused connection abort */ - ECONNRESET = _HURD_ERRNO (54), -#define ECONNRESET _HURD_ERRNO (54)/* Connection reset by peer */ - ENOBUFS = _HURD_ERRNO (55), -#define ENOBUFS _HURD_ERRNO (55)/* No buffer space available */ - EISCONN = _HURD_ERRNO (56), -#define EISCONN _HURD_ERRNO (56)/* Transport endpoint is already connected */ - ENOTCONN = _HURD_ERRNO (57), -#define ENOTCONN _HURD_ERRNO (57)/* Transport endpoint is not connected */ - EDESTADDRREQ = _HURD_ERRNO (39), -#define EDESTADDRREQ _HURD_ERRNO (39)/* Destination address required */ - ESHUTDOWN = _HURD_ERRNO (58), -#define ESHUTDOWN _HURD_ERRNO (58)/* Cannot send after transport endpoint shutdown */ - ETOOMANYREFS = _HURD_ERRNO (59), -#define ETOOMANYREFS _HURD_ERRNO (59)/* Too many references: cannot splice */ - ETIMEDOUT = _HURD_ERRNO (60), -#define ETIMEDOUT _HURD_ERRNO (60)/* Connection timed out */ - ECONNREFUSED = _HURD_ERRNO (61), -#define ECONNREFUSED _HURD_ERRNO (61)/* Connection refused */ - ELOOP = _HURD_ERRNO (62), -#define ELOOP _HURD_ERRNO (62)/* Too many levels of symbolic links */ - ENAMETOOLONG = _HURD_ERRNO (63), -#define ENAMETOOLONG _HURD_ERRNO (63)/* File name too long */ - EHOSTDOWN = _HURD_ERRNO (64), -#define EHOSTDOWN _HURD_ERRNO (64)/* Host is down */ - EHOSTUNREACH = _HURD_ERRNO (65), -#define EHOSTUNREACH _HURD_ERRNO (65)/* No route to host */ - ENOTEMPTY = _HURD_ERRNO (66), -#define ENOTEMPTY _HURD_ERRNO (66)/* Directory not empty */ - EPROCLIM = _HURD_ERRNO (67), -#define EPROCLIM _HURD_ERRNO (67)/* Too many processes */ - EUSERS = _HURD_ERRNO (68), -#define EUSERS _HURD_ERRNO (68)/* Too many users */ - EDQUOT = _HURD_ERRNO (69), -#define EDQUOT _HURD_ERRNO (69)/* Disk quota exceeded */ - ESTALE = _HURD_ERRNO (70), -#define ESTALE _HURD_ERRNO (70)/* Stale file handle */ - EREMOTE = _HURD_ERRNO (71), -#define EREMOTE _HURD_ERRNO (71)/* Object is remote */ - EBADRPC = _HURD_ERRNO (72), -#define EBADRPC _HURD_ERRNO (72)/* RPC struct is bad */ - ERPCMISMATCH = _HURD_ERRNO (73), -#define ERPCMISMATCH _HURD_ERRNO (73)/* RPC version wrong */ - EPROGUNAVAIL = _HURD_ERRNO (74), -#define EPROGUNAVAIL _HURD_ERRNO (74)/* RPC program not available */ - EPROGMISMATCH = _HURD_ERRNO (75), -#define EPROGMISMATCH _HURD_ERRNO (75)/* RPC program version wrong */ - EPROCUNAVAIL = _HURD_ERRNO (76), -#define EPROCUNAVAIL _HURD_ERRNO (76)/* RPC bad procedure for program */ - ENOLCK = _HURD_ERRNO (77), -#define ENOLCK _HURD_ERRNO (77)/* No locks available */ - EFTYPE = _HURD_ERRNO (79), -#define EFTYPE _HURD_ERRNO (79)/* Inappropriate file type or format */ - EAUTH = _HURD_ERRNO (80), -#define EAUTH _HURD_ERRNO (80)/* Authentication error */ - ENEEDAUTH = _HURD_ERRNO (81), -#define ENEEDAUTH _HURD_ERRNO (81)/* Need authenticator */ - ENOSYS = _HURD_ERRNO (78), -#define ENOSYS _HURD_ERRNO (78)/* Function not implemented */ - ENOTSUP = _HURD_ERRNO (118), -#define ENOTSUP _HURD_ERRNO (118)/* Not supported */ - EILSEQ = _HURD_ERRNO (106), -#define EILSEQ _HURD_ERRNO (106)/* Invalid or incomplete multibyte or wide character */ - EBACKGROUND = _HURD_ERRNO (100), -#define EBACKGROUND _HURD_ERRNO (100)/* Inappropriate operation for background process */ - EDIED = _HURD_ERRNO (101), -#define EDIED _HURD_ERRNO (101)/* Translator died */ - ED = _HURD_ERRNO (102), -#define ED _HURD_ERRNO (102)/* ? */ - EGREGIOUS = _HURD_ERRNO (103), -#define EGREGIOUS _HURD_ERRNO (103)/* You really blew it this time */ - EIEIO = _HURD_ERRNO (104), -#define EIEIO _HURD_ERRNO (104)/* Computer bought the farm */ - EGRATUITOUS = _HURD_ERRNO (105), -#define EGRATUITOUS _HURD_ERRNO (105)/* Gratuitous error */ - EBADMSG = _HURD_ERRNO (107), -#define EBADMSG _HURD_ERRNO (107)/* Bad message */ - EIDRM = _HURD_ERRNO (108), -#define EIDRM _HURD_ERRNO (108)/* Identifier removed */ - EMULTIHOP = _HURD_ERRNO (109), -#define EMULTIHOP _HURD_ERRNO (109)/* Multihop attempted */ - ENODATA = _HURD_ERRNO (110), -#define ENODATA _HURD_ERRNO (110)/* No data available */ - ENOLINK = _HURD_ERRNO (111), -#define ENOLINK _HURD_ERRNO (111)/* Link has been severed */ - ENOMSG = _HURD_ERRNO (112), -#define ENOMSG _HURD_ERRNO (112)/* No message of desired type */ - ENOSR = _HURD_ERRNO (113), -#define ENOSR _HURD_ERRNO (113)/* Out of streams resources */ - ENOSTR = _HURD_ERRNO (114), -#define ENOSTR _HURD_ERRNO (114)/* Device not a stream */ - EOVERFLOW = _HURD_ERRNO (115), -#define EOVERFLOW _HURD_ERRNO (115)/* Value too large for defined data type */ - EPROTO = _HURD_ERRNO (116), -#define EPROTO _HURD_ERRNO (116)/* Protocol error */ - ETIME = _HURD_ERRNO (117), -#define ETIME _HURD_ERRNO (117)/* Timer expired */ - ECANCELED = _HURD_ERRNO (119), -#define ECANCELED _HURD_ERRNO (119)/* Operation canceled */ - - /* Errors from . */ - EMACH_SEND_IN_PROGRESS = 0x10000001, - EMACH_SEND_INVALID_DATA = 0x10000002, - EMACH_SEND_INVALID_DEST = 0x10000003, - EMACH_SEND_TIMED_OUT = 0x10000004, - EMACH_SEND_WILL_NOTIFY = 0x10000005, - EMACH_SEND_NOTIFY_IN_PROGRESS = 0x10000006, - EMACH_SEND_INTERRUPTED = 0x10000007, - EMACH_SEND_MSG_TOO_SMALL = 0x10000008, - EMACH_SEND_INVALID_REPLY = 0x10000009, - EMACH_SEND_INVALID_RIGHT = 0x1000000a, - EMACH_SEND_INVALID_NOTIFY = 0x1000000b, - EMACH_SEND_INVALID_MEMORY = 0x1000000c, - EMACH_SEND_NO_BUFFER = 0x1000000d, - EMACH_SEND_NO_NOTIFY = 0x1000000e, - EMACH_SEND_INVALID_TYPE = 0x1000000f, - EMACH_SEND_INVALID_HEADER = 0x10000010, - EMACH_RCV_IN_PROGRESS = 0x10004001, - EMACH_RCV_INVALID_NAME = 0x10004002, - EMACH_RCV_TIMED_OUT = 0x10004003, - EMACH_RCV_TOO_LARGE = 0x10004004, - EMACH_RCV_INTERRUPTED = 0x10004005, - EMACH_RCV_PORT_CHANGED = 0x10004006, - EMACH_RCV_INVALID_NOTIFY = 0x10004007, - EMACH_RCV_INVALID_DATA = 0x10004008, - EMACH_RCV_PORT_DIED = 0x10004009, - EMACH_RCV_IN_SET = 0x1000400a, - EMACH_RCV_HEADER_ERROR = 0x1000400b, - EMACH_RCV_BODY_ERROR = 0x1000400c, - - /* Errors from . */ - EKERN_INVALID_ADDRESS = 1, - EKERN_PROTECTION_FAILURE = 2, - EKERN_NO_SPACE = 3, - EKERN_INVALID_ARGUMENT = 4, - EKERN_FAILURE = 5, - EKERN_RESOURCE_SHORTAGE = 6, - EKERN_NOT_RECEIVER = 7, - EKERN_NO_ACCESS = 8, - EKERN_MEMORY_FAILURE = 9, - EKERN_MEMORY_ERROR = 10, - EKERN_NOT_IN_SET = 12, - EKERN_NAME_EXISTS = 13, - EKERN_ABORTED = 14, - EKERN_INVALID_NAME = 15, - EKERN_INVALID_TASK = 16, - EKERN_INVALID_RIGHT = 17, - EKERN_INVALID_VALUE = 18, - EKERN_UREFS_OVERFLOW = 19, - EKERN_INVALID_CAPABILITY = 20, - EKERN_RIGHT_EXISTS = 21, - EKERN_INVALID_HOST = 22, - EKERN_MEMORY_PRESENT = 23, - EKERN_WRITE_PROTECTION_FAILURE = 24, - EKERN_TERMINATED = 26, - - /* Errors from . */ - EMIG_TYPE_ERROR = -300 /* client type check failure */, - EMIG_REPLY_MISMATCH = -301 /* wrong reply message ID */, - EMIG_REMOTE_ERROR = -302 /* server detected error */, - EMIG_BAD_ID = -303 /* bad request message ID */, - EMIG_BAD_ARGUMENTS = -304 /* server type check failure */, - EMIG_NO_REPLY = -305 /* no reply should be sent */, - EMIG_EXCEPTION = -306 /* server raised exception */, - EMIG_ARRAY_TOO_LARGE = -307 /* array not large enough */, - EMIG_SERVER_DIED = -308 /* server died */, - EMIG_DESTROY_REQUEST = -309 /* destroy request with no reply */, - - /* Errors from . */ - ED_IO_ERROR = 2500 /* hardware IO error */, - ED_WOULD_BLOCK = 2501 /* would block, but D_NOWAIT set */, - ED_NO_SUCH_DEVICE = 2502 /* no such device */, - ED_ALREADY_OPEN = 2503 /* exclusive-use device already open */, - ED_DEVICE_DOWN = 2504 /* device has been shut down */, - ED_INVALID_OPERATION = 2505 /* bad operation for device */, - ED_INVALID_RECNUM = 2506 /* invalid record (block) number */, - ED_INVALID_SIZE = 2507 /* invalid IO size */, - ED_NO_MEMORY = 2508 /* memory allocation failure */, - ED_READ_ONLY = 2509 /* device cannot be written to */ - -}; - -#define _HURD_ERRNOS 120 - -/* User-visible type of error codes. It is ok to use `int' or - `kern_return_t' for these, but with `error_t' the debugger prints - symbolic values. */ -#ifdef __USE_GNU -typedef enum __error_t_codes error_t; -#define __error_t_defined 1 -#endif - -/* Return the current thread's location for `errno'. - The syntax of this function allows redeclarations like `int errno'. */ -extern int *__errno_location (void) __THROW __attribute__ ((__const__)); - -#define errno (*__errno_location ()) - -#endif /* included. */ - -#if !defined (_ERRNO_H) && defined (__need_Emath) -#define EDOM _HURD_ERRNO (33)/* Numerical argument out of domain */ -#define ERANGE _HURD_ERRNO (34)/* Numerical result out of range */ -#endif /* not included and need math error codes. */ diff --git a/sysdeps/mach/hurd/bits/fcntl.h b/sysdeps/mach/hurd/bits/fcntl.h deleted file mode 100644 index 915c7c6abb..0000000000 --- a/sysdeps/mach/hurd/bits/fcntl.h +++ /dev/null @@ -1,221 +0,0 @@ -/* O_*, F_*, FD_* bit values for GNU. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -#include - -/* File access modes. These are understood by io servers; they can be - passed in `dir_lookup', and are returned by `io_get_openmodes'. - Consequently they can be passed to `open', `hurd_file_name_lookup', and - `file_name_lookup'; and are returned by `fcntl' with the F_GETFL - command. */ - -/* In GNU, read and write are bits (unlike BSD). */ -#ifdef __USE_GNU -# define O_READ O_RDONLY /* Open for reading. */ -# define O_WRITE O_WRONLY /* Open for writing. */ -# define O_EXEC 0x0004 /* Open for execution. */ -# define O_NORW 0 /* Open without R/W access. */ -#endif -/* POSIX.1 standard names. */ -#define O_RDONLY 0x0001 /* Open read-only. */ -#define O_WRONLY 0x0002 /* Open write-only. */ -#define O_RDWR (O_RDONLY|O_WRONLY) /* Open for reading and writing. */ -#define O_ACCMODE O_RDWR /* Mask for file access modes. */ - -#define O_LARGEFILE 0 - - -/* File name translation flags. These are understood by io servers; - they can be passed in `dir_lookup', and consequently to `open', - `hurd_file_name_lookup', and `file_name_lookup'. */ - -#define O_CREAT 0x0010 /* Create file if it doesn't exist. */ -#define O_EXCL 0x0020 /* Fail if file already exists. */ -#ifdef __USE_GNU -# define O_NOLINK 0x0040 /* No name mappings on final component. */ -# define O_NOTRANS 0x0080 /* No translator on final component. */ -#endif - -#ifdef __USE_XOPEN2K8 -# define O_NOFOLLOW 0x00100000 /* Produce ENOENT if file is a symlink. */ -# define O_DIRECTORY 0x00200000 /* Produce ENOTDIR if not a directory. */ -#endif - - -/* I/O operating modes. These are understood by io servers; they can be - passed in `dir_lookup' and set or fetched with `io_*_openmodes'. - Consequently they can be passed to `open', `hurd_file_name_lookup', - `file_name_lookup', and `fcntl' with the F_SETFL command; and are - returned by `fcntl' with the F_GETFL command. */ - -#define O_APPEND 0x0100 /* Writes always append to the file. */ -#define O_ASYNC 0x0200 /* Send SIGIO to owner when data is ready. */ -#define O_FSYNC 0x0400 /* Synchronous writes. */ -#define O_SYNC O_FSYNC -#ifdef __USE_GNU -# define O_NOATIME 0x0800 /* Don't set access time on read (owner). */ -#endif -#ifdef __USE_MISC -# define O_SHLOCK 0x00020000 /* Open with shared file lock. */ -# define O_EXLOCK 0x00040000 /* Open with exclusive file lock. */ -#endif - -/* These are lesser flavors of partial synchronization that are - implied by our one flag (O_FSYNC). */ -#if defined __USE_POSIX199309 || defined __USE_UNIX98 -# define O_DSYNC O_SYNC /* Synchronize data. */ -# define O_RSYNC O_SYNC /* Synchronize read operations. */ -#endif - - -/* The name O_NONBLOCK is unfortunately overloaded; it is both a file name - translation flag and an I/O operating mode. O_NDELAY is the deprecated - BSD name for the same flag, overloaded in the same way. - - When used in `dir_lookup' (and consequently `open', `hurd_file_name_lookup', - or `file_name_lookup'), O_NONBLOCK says the open should return immediately - instead of blocking for any significant length of time (e.g., to wait - for carrier detect on a serial line). It is also saved as an I/O - operating mode, and after open has the following meaning. - - When used in `io_*_openmodes' (and consequently `fcntl' with the F_SETFL - command), the O_NONBLOCK flag means to do nonblocking i/o: any i/o - operation that would block for any significant length of time will instead - fail with EAGAIN. */ - -#define O_NONBLOCK 0x0008 /* Non-blocking open or non-blocking I/O. */ -#ifdef __USE_MISC -# define O_NDELAY O_NONBLOCK /* Deprecated. */ -#endif - - -#ifdef __USE_GNU -/* Mask of bits which are understood by io servers. */ -# define O_HURD (0xffff | O_EXLOCK | O_SHLOCK) -#endif - - -/* Open-time action flags. These are understood by `hurd_file_name_lookup' - and consequently by `open' and `file_name_lookup'. They are not preserved - once the file has been opened. */ - -#define O_TRUNC 0x00010000 /* Truncate file to zero length. */ -#ifdef __USE_XOPEN2K8 -# define O_CLOEXEC 0x00400000 /* Set FD_CLOEXEC. */ -#endif - - -/* Controlling terminal flags. These are understood only by `open', - and are not preserved once the file has been opened. */ - -#ifdef __USE_GNU -# define O_IGNORE_CTTY 0x00080000 /* Don't do any ctty magic at all. */ -#endif -/* `open' never assigns a controlling terminal in GNU. */ -#define O_NOCTTY 0 /* Don't assign a controlling terminal. */ - - -#ifdef __USE_MISC -/* Bits in the file status flags returned by F_GETFL. */ -# define FREAD O_RDONLY -# define FWRITE O_WRONLY - -/* Traditional BSD names the O_* bits. */ -# define FASYNC O_ASYNC -# define FCREAT O_CREAT -# define FEXCL O_EXCL -# define FTRUNC O_TRUNC -# define FNOCTTY O_NOCTTY -# define FFSYNC O_FSYNC -# define FSYNC O_SYNC -# define FAPPEND O_APPEND -# define FNONBLOCK O_NONBLOCK -# define FNDELAY O_NDELAY -#endif - - -/* Values for the second argument to `fcntl'. */ -#define F_DUPFD 0 /* Duplicate file descriptor. */ -#define F_GETFD 1 /* Get file descriptor flags. */ -#define F_SETFD 2 /* Set file descriptor flags. */ -#define F_GETFL 3 /* Get file status flags. */ -#define F_SETFL 4 /* Set file status flags. */ -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 -# define F_GETOWN 5 /* Get owner (receiver of SIGIO). */ -# define F_SETOWN 6 /* Set owner (receiver of SIGIO). */ -#endif -#define F_GETLK 7 /* Get record locking info. */ -#define F_SETLK 8 /* Set record locking info (non-blocking). */ -#define F_SETLKW 9 /* Set record locking info (blocking). */ - -#ifdef __USE_XOPEN2K8 -# define F_DUPFD_CLOEXEC 1030 /* Duplicate, set FD_CLOEXEC on new one. */ -#endif - - -/* File descriptor flags used with F_GETFD and F_SETFD. */ -#define FD_CLOEXEC 1 /* Close on exec. */ - - -#include - -/* The structure describing an advisory lock. This is the type of the third - argument to `fcntl' for the F_GETLK, F_SETLK, and F_SETLKW requests. */ -struct flock - { - int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#ifndef __USE_FILE_OFFSET64 - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Values for the `l_type' field of a `struct flock'. */ -#define F_RDLCK 1 /* Read lock. */ -#define F_WRLCK 2 /* Write lock. */ -#define F_UNLCK 3 /* Remove lock. */ - -/* Advise to `posix_fadvise'. */ -#ifdef __USE_XOPEN2K -# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ -# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ -# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ -# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ -# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ -# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ -#endif diff --git a/sysdeps/mach/hurd/bits/ioctls.h b/sysdeps/mach/hurd/bits/ioctls.h deleted file mode 100644 index d78cfd9be8..0000000000 --- a/sysdeps/mach/hurd/bits/ioctls.h +++ /dev/null @@ -1,432 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __BITS_IOCTLS_H -#define __BITS_IOCTLS_H 1 - -#if !defined _HURD_IOCTL_H && !defined _SYS_IOCTL_H -# error "Never use directly; include instead." -#endif - -/* These macros are also defined in (with numerically - identical values) but this serves to shut up cpp's complaining. */ - -#ifdef NL0 -# undef NL0 -#endif -#ifdef NL1 -# undef NL1 -#endif -#ifdef TAB0 -# undef TAB0 -#endif -#ifdef TAB1 -# undef TAB1 -#endif -#ifdef TAB2 -# undef TAB2 -#endif -#ifdef CR0 -# undef CR0 -#endif -#ifdef CR1 -# undef CR1 -#endif -#ifdef CR2 -# undef CR2 -#endif -#ifdef CR3 -# undef CR3 -#endif -#ifdef FF0 -# undef FF0 -#endif -#ifdef FF1 -# undef FF1 -#endif -#ifdef BS0 -# undef BS0 -#endif -#ifdef BS1 -# undef BS1 -#endif -#ifdef MDMBUF -# undef MDMBUF -#endif -#ifdef ECHO -# undef ECHO -#endif -#ifdef TOSTOP -# undef TOSTOP -#endif -#ifdef FLUSHO -# undef FLUSHO -#endif -#ifdef PENDIN -# undef PENDIN -#endif -#ifdef NOFLSH -# undef NOFLSH -#endif - -/* Hurd ioctl request are made up of several fields: - - 10987654321098765432109876543210 - IOt0t1t2cc0c0cc1c1cc2ggggccccccc - - bits [31,30]: inout direction (enum __ioctl_dir) - bits [29,11]: type encoding as follows; zero count indicates omitted datum - [29,28]: datum #0 type (enum __ioctl_datum) - [27,26]: datum #1 type (enum __ioctl_datum) - [24,25]: datum #2 type (enum __ioctl_datum) - [23,19]: datum #0 count [0,31] - [18,14]: datum #1 count [0,31] - [13,11]: datum #2 count [0,3] - bits [07,10]: group (letter - 'f': ['f','v']) - bits [00,06]: command [0,127] - - The following macros construct and dissect these fields. */ - -enum __ioctl_dir - { - IOC_VOID = 0, /* No parameters. */ - IOC_OUT = 1, /* Data is written into the user's buffer. */ - IOC_IN = 2, /* Data is read from the user's buffer. */ - IOC_INOUT = (IOC_IN|IOC_OUT) - }; - -enum __ioctl_datum { IOC_8, IOC_16, IOC_32, IOC_64 }; - -/* Construct an ioctl from constructed type plus other fields. */ -#define _IOC(inout, group, num, type) \ - ((num) | ((((group) - 'f') | ((type) | (inout) << 19) << 4) << 7)) - -/* Dissect an ioctl into its component fields. */ -#define _IOC_INOUT(request) (((unsigned int) (request) >> 30) & IOC_INOUT) -#define _IOC_GROUP(request) ('f' + (((unsigned int) (request) >> 7) & 0xf)) -#define _IOC_COMMAND(request) ((unsigned int) (request) & 0x7f) -#define _IOC_TYPE(request) (((unsigned int) (request) >> 11) & 0x7ffff) -#define _IOC_NOTYPE(request) ((unsigned int) (request) & 0x3ff) - -/* Construct a type information field from - the broken-out type and count fields. */ -#define _IOT(t0, c0, t1, c1, t2, c2) \ - ((c2) | (((c1) | ((c0) | ((t2) | ((t1) | (t0) << 2) << 2) << 5) << 5) << 3)) - -/* Dissect a type information field into the type and count fields. */ -#define _IOT_TYPE0(type) (((unsigned int) (type) >> 17) & 3) -#define _IOT_TYPE1(type) (((unsigned int) (type) >> 15) & 3) -#define _IOT_TYPE2(type) (((unsigned int) (type) >> 13) & 3) -#define _IOT_COUNT0(type) (((unsigned int) (type) >> 8) & 0x1f) -#define _IOT_COUNT1(type) (((unsigned int) (type) >> 3) & 0x1f) -#define _IOT_COUNT2(type) (((unsigned int) (type) >> 0) & 7) - -/* Construct an ioctl from all the broken-out fields. */ -#define _IOCT(inout, group, num, t0, c0, t1, c1, t2, c2) \ - _IOC ((inout), (group), (num), _IOT ((t0), (c0), (t1), (c1), (t2), (c2))) - -/* Construct an individual type field for TYPE. */ -#define _IOTS(type) \ - (sizeof (type) == 8 ? IOC_64 : (enum __ioctl_datum) (sizeof (type) >> 1)) - -/* Construct a type information field for - a single argument of the scalar TYPE. */ -#define _IOT_SIMPLE(type) _IOT (_IOTS (type), 1, 0, 0, 0, 0) - -/* Basic C types. */ -#define _IOT__IOTBASE_char _IOT_SIMPLE (char) -#define _IOT__IOTBASE_short _IOT_SIMPLE (short) -#define _IOT__IOTBASE_int _IOT_SIMPLE (int) -#define _IOT__IOTBASE_long _IOT_SIMPLE (long) -#define _IOT_char _IOT_SIMPLE (char) -#define _IOT_short _IOT_SIMPLE (short) -#define _IOT_int _IOT_SIMPLE (int) -#define _IOT_long _IOT_SIMPLE (long) - -#define _IOT__IOTBASE_int8_t _IOT_SIMPLE (int8_t) -#define _IOT__IOTBASE_uint8_t _IOT_SIMPLE (uint8_t) -#define _IOT__IOTBASE_int16_t _IOT_SIMPLE (int16_t) -#define _IOT__IOTBASE_uint16_t _IOT_SIMPLE (uint16_t) -#define _IOT__IOTBASE_int32_t _IOT_SIMPLE (int32_t) -#define _IOT__IOTBASE_uint32_t _IOT_SIMPLE (uint32_t) -#define _IOT__IOTBASE_int64_t _IOT_SIMPLE (int64_t) -#define _IOT__IOTBASE_uint64_t _IOT_SIMPLE (uint64_t) - -#define _IOT__IOTBASE_size_t _IOT_SIMPLE (size_t) -#define _IOT__IOTBASE_ssize_t _IOT_SIMPLE (ssize_t) - - -/* Standard flavors of ioctls. - _IOT_foobar is defined either in this file, - or where struct foobar is defined. */ -#define _IO(g, n) _IOC (IOC_VOID, (g), (n), 0) -#define _IOIW(g, n, t) _IOC (IOC_VOID, (g), (n), _IOC_ENCODE_TYPE (t)) -#define _IOR(g, n, t) _IOC (IOC_OUT, (g), (n), _IOC_ENCODE_TYPE (t)) -#define _IOW(g, n, t) _IOC (IOC_IN, (g), (n), _IOC_ENCODE_TYPE (t)) -#define _IOWR(g, n, t) _IOC (IOC_INOUT, (g), (n), _IOC_ENCODE_TYPE (t)) - -/* These macros do some preprocessor gymnastics to turn a TYPESPEC of - `struct foobar' into the identifier `_IOT_foobar', which is generally - defined using `_IOT' (above) in whatever file defines `struct foobar'. - For a TYPESPEC that does not begin with `struct' produces a different - identifier: `int' produces `_IOT__IOTBASE_int'. These identifiers - are defined for the basic C types above. */ -#define _IOC_ENCODE_TYPE(typespec) _IOC_ENCODE_TYPE_1(_IOTBASE_##typespec) -#define _IOTBASE_struct -#define _IOC_ENCODE_TYPE_1(typespec) _IOC_ENCODE_TYPE_2(typespec) -#define _IOC_ENCODE_TYPE_2(typespec) _IOT_##typespec - -/* Also, ignore signedness. */ -#define _IOTBASE_unsigned -#define _IOTBASE_signed - - -/* ioctls verbatim from 4.4 . */ - -#define TIOCMODG _IOR('t', 3, int) /* get modem control state */ -#define TIOCMODS _IOW('t', 4, int) /* set modem control state */ -#define TIOCM_LE 0001 /* line enable */ -#define TIOCM_DTR 0002 /* data terminal ready */ -#define TIOCM_RTS 0004 /* request to send */ -#define TIOCM_ST 0010 /* secondary transmit */ -#define TIOCM_SR 0020 /* secondary receive */ -#define TIOCM_CTS 0040 /* clear to send */ -#define TIOCM_CAR 0100 /* carrier detect */ -#define TIOCM_CD TIOCM_CAR -#define TIOCM_RNG 0200 /* ring */ -#define TIOCM_RI TIOCM_RNG -#define TIOCM_DSR 0400 /* data set ready */ - /* 8-10 compat */ -#define TIOCEXCL _IO('t', 13) /* set exclusive use of tty */ -#define TIOCNXCL _IO('t', 14) /* reset exclusive use of tty */ - /* 15 unused */ -#define TIOCFLUSH _IOW('t', 16, int) /* flush buffers */ - /* 17-18 compat */ -#define TIOCGETA _IOR('t', 19, struct termios) /* get termios struct */ -#define TIOCSETA _IOW('t', 20, struct termios) /* set termios struct */ -#define TIOCSETAW _IOW('t', 21, struct termios) /* drain output, set */ -#define TIOCSETAF _IOW('t', 22, struct termios) /* drn out, fls in, set */ -#define TIOCGETD _IOR('t', 26, int) /* get line discipline */ -#define TIOCSETD _IOW('t', 27, int) /* set line discipline */ - /* 127-124 compat */ -#define TIOCSBRK _IO('t', 123) /* set break bit */ -#define TIOCCBRK _IO('t', 122) /* clear break bit */ -#define TIOCSDTR _IO('t', 121) /* set data terminal ready */ -#define TIOCCDTR _IO('t', 120) /* clear data terminal ready */ -#define TIOCGPGRP _IOR('t', 119, int) /* get pgrp of tty */ -#define TIOCSPGRP _IOW('t', 118, int) /* set pgrp of tty */ - /* 117-116 compat */ -#define TIOCOUTQ _IOR('t', 115, int) /* output queue size */ -#define TIOCSTI _IOW('t', 114, char) /* simulate terminal input */ -#define TIOCNOTTY _IO('t', 113) /* void tty association */ -#define TIOCPKT _IOW('t', 112, int) /* pty: set/clear packet mode */ -#define TIOCPKT_DATA 0x00 /* data packet */ -#define TIOCPKT_FLUSHREAD 0x01 /* flush packet */ -#define TIOCPKT_FLUSHWRITE 0x02 /* flush packet */ -#define TIOCPKT_STOP 0x04 /* stop output */ -#define TIOCPKT_START 0x08 /* start output */ -#define TIOCPKT_NOSTOP 0x10 /* no more ^S, ^Q */ -#define TIOCPKT_DOSTOP 0x20 /* now do ^S ^Q */ -#define TIOCPKT_IOCTL 0x40 /* state change of pty driver */ -#define TIOCSTOP _IO('t', 111) /* stop output, like ^S */ -#define TIOCSTART _IO('t', 110) /* start output, like ^Q */ -#define TIOCMSET _IOW('t', 109, int) /* set all modem bits */ -#define TIOCMBIS _IOW('t', 108, int) /* bis modem bits */ -#define TIOCMBIC _IOW('t', 107, int) /* bic modem bits */ -#define TIOCMGET _IOR('t', 106, int) /* get all modem bits */ -#define TIOCREMOTE _IOW('t', 105, int) /* remote input editing */ -#define TIOCGWINSZ _IOR('t', 104, struct winsize) /* get window size */ -#define TIOCSWINSZ _IOW('t', 103, struct winsize) /* set window size */ -#define TIOCUCNTL _IOW('t', 102, int) /* pty: set/clr usr cntl mode */ -#define UIOCCMD(n) _IO('u', n) /* usr cntl op "n" */ -#define TIOCCONS _IOW('t', 98, int) /* become virtual console */ -#define TIOCSCTTY _IO('t', 97) /* become controlling tty */ -#define TIOCEXT _IOW('t', 96, int) /* pty: external processing */ -#define TIOCSIG _IO('t', 95) /* pty: generate signal */ -#define TIOCDRAIN _IO('t', 94) /* wait till output drained */ - -#define TTYDISC 0 /* termios tty line discipline */ -#define TABLDISC 3 /* tablet discipline */ -#define SLIPDISC 4 /* serial IP discipline */ - - -#define FIOCLEX _IO('f', 1) /* set close on exec on fd */ -#define FIONCLEX _IO('f', 2) /* remove close on exec */ -#define FIONREAD _IOR('f', 127, int) /* get # bytes to read */ -#define FIONBIO _IOW('f', 126, int) /* set/clear non-blocking i/o */ -#define FIOASYNC _IOW('f', 125, int) /* set/clear async i/o */ -#define FIOSETOWN _IOW('f', 124, int) /* set owner */ -#define FIOGETOWN _IOR('f', 123, int) /* get owner */ - -/* socket i/o controls */ -#define SIOCSHIWAT _IOW('s', 0, int) /* set high watermark */ -#define SIOCGHIWAT _IOR('s', 1, int) /* get high watermark */ -#define SIOCSLOWAT _IOW('s', 2, int) /* set low watermark */ -#define SIOCGLOWAT _IOR('s', 3, int) /* get low watermark */ -#define SIOCATMARK _IOR('s', 7, int) /* at oob mark? */ -#define SIOCSPGRP _IOW('s', 8, int) /* set process group */ -#define SIOCGPGRP _IOR('s', 9, int) /* get process group */ - -#define SIOCADDRT _IOW('r', 10, struct ortentry) /* add route */ -#define SIOCDELRT _IOW('r', 11, struct ortentry) /* delete route */ - -#define SIOCSIFADDR _IOW('i', 12, struct ifreq) /* set ifnet address */ -#define OSIOCGIFADDR _IOWR('i',13, struct ifreq) /* get ifnet address */ -#define SIOCGIFADDR _IOWR('i',33, struct ifreq) /* get ifnet address */ -#define SIOCGIFHWADDR _IOWR('i',39, struct ifreq) /* get hwaddress */ -#define SIOCSIFDSTADDR _IOW('i', 14, struct ifreq) /* set p-p address */ -#define OSIOCGIFDSTADDR _IOWR('i',15, struct ifreq) /* get p-p address */ -#define SIOCGIFDSTADDR _IOWR('i',34, struct ifreq) /* get p-p address */ -#define SIOCSIFFLAGS _IOW('i', 16, struct ifreq_short)/* set ifnet flags */ -#define SIOCGIFFLAGS _IOWR('i',17, struct ifreq_short)/* get ifnet flags */ -#define OSIOCGIFBRDADDR _IOWR('i',18, struct ifreq) /* get broadcast addr */ -#define SIOCGIFBRDADDR _IOWR('i',35, struct ifreq) /* get broadcast addr */ -#define SIOCSIFBRDADDR _IOW('i',19, struct ifreq) /* set broadcast addr */ -#define OSIOCGIFCONF _IOWR('i',20, struct ifconf) /* get ifnet list */ -#define SIOCGIFCONF _IOWR('i',36, struct ifconf) /* get ifnet list */ -#define OSIOCGIFNETMASK _IOWR('i',21, struct ifreq) /* get net addr mask */ -#define SIOCGIFNETMASK _IOWR('i',37, struct ifreq) /* get net addr mask */ -#define SIOCSIFNETMASK _IOW('i',22, struct ifreq) /* set net addr mask */ -#define SIOCGIFMETRIC _IOWR('i',23, struct ifreq_int) /* get IF metric */ -#define SIOCSIFMETRIC _IOW('i',24, struct ifreq_int) /* set IF metric */ -#define SIOCDIFADDR _IOW('i',25, struct ifreq) /* delete IF addr */ -#define SIOCAIFADDR _IOW('i',26, struct ifaliasreq) /* add/chg IF alias */ - -#define SIOCSARP _IOW('i', 30, struct arpreq) /* set arp entry */ -#define OSIOCGARP _IOWR('i',31, struct arpreq) /* get arp entry */ -#define SIOCGARP _IOWR('i',38, struct arpreq) /* get arp entry */ -#define SIOCDARP _IOW('i', 32, struct arpreq) /* delete arp entry */ - -#define SIOCGIFMTU _IOWR('i', 51, struct ifreq_int)/* get IF mtu */ -#define SIOCSIFMTU _IOW('i', 52, struct ifreq_int) /* set IF mtu */ - -#define SIOCGIFINDEX _IOWR('i', 90, struct ifreq_int)/* get IF index */ -#define SIOCGIFNAME _IOWR('i', 91, struct ifreq_int)/* set IF name */ - - -/* Compatibility with 4.3 BSD terminal driver. - From 4.4 . */ - -#ifdef USE_OLD_TTY -# undef TIOCGETD -# define TIOCGETD _IOR('t', 0, int) /* get line discipline */ -# undef TIOCSETD -# define TIOCSETD _IOW('t', 1, int) /* set line discipline */ -#else -# define OTIOCGETD _IOR('t', 0, int) /* get line discipline */ -# define OTIOCSETD _IOW('t', 1, int) /* set line discipline */ -#endif -#define TIOCHPCL _IO('t', 2) /* hang up on last close */ -#define TIOCGETP _IOR('t', 8,struct sgttyb)/* get parameters -- gtty */ -#define TIOCSETP _IOW('t', 9,struct sgttyb)/* set parameters -- stty */ -#define TIOCSETN _IOW('t',10,struct sgttyb)/* as above, but no flushtty*/ -#define TIOCSETC _IOW('t',17,struct tchars)/* set special characters */ -#define TIOCGETC _IOR('t',18,struct tchars)/* get special characters */ -#define TANDEM 0x00000001 /* send stopc on out q full */ -#define CBREAK 0x00000002 /* half-cooked mode */ -#define LCASE 0x00000004 /* simulate lower case */ -#define ECHO 0x00000008 /* echo input */ -#define CRMOD 0x00000010 /* map \r to \r\n on output */ -#define RAW 0x00000020 /* no i/o processing */ -#define ODDP 0x00000040 /* get/send odd parity */ -#define EVENP 0x00000080 /* get/send even parity */ -#define ANYP 0x000000c0 /* get any parity/send none */ -#define NLDELAY 0x00000300 /* \n delay */ -#define NL0 0x00000000 -#define NL1 0x00000100 /* tty 37 */ -#define NL2 0x00000200 /* vt05 */ -#define NL3 0x00000300 -#define TBDELAY 0x00000c00 /* horizontal tab delay */ -#define TAB0 0x00000000 -#define TAB1 0x00000400 /* tty 37 */ -#define TAB2 0x00000800 -#define XTABS 0x00000c00 /* expand tabs on output */ -#define CRDELAY 0x00003000 /* \r delay */ -#define CR0 0x00000000 -#define CR1 0x00001000 /* tn 300 */ -#define CR2 0x00002000 /* tty 37 */ -#define CR3 0x00003000 /* concept 100 */ -#define VTDELAY 0x00004000 /* vertical tab delay */ -#define FF0 0x00000000 -#define FF1 0x00004000 /* tty 37 */ -#define BSDELAY 0x00008000 /* \b delay */ -#define BS0 0x00000000 -#define BS1 0x00008000 -#define ALLDELAY (NLDELAY|TBDELAY|CRDELAY|VTDELAY|BSDELAY) -#define CRTBS 0x00010000 /* do backspacing for crt */ -#define PRTERA 0x00020000 /* \ ... / erase */ -#define CRTERA 0x00040000 /* " \b " to wipe out char */ -#define TILDE 0x00080000 /* hazeltine tilde kludge */ -#define MDMBUF 0x00100000 /*start/stop output on carrier*/ -#define LITOUT 0x00200000 /* literal output */ -#define TOSTOP 0x00400000 /*SIGSTOP on background output*/ -#define FLUSHO 0x00800000 /* flush output to terminal */ -#define NOHANG 0x01000000 /* (no-op) was no SIGHUP on carrier drop */ -#define L001000 0x02000000 -#define CRTKIL 0x04000000 /* kill line with " \b " */ -#define PASS8 0x08000000 -#define CTLECH 0x10000000 /* echo control chars as ^X */ -#define PENDIN 0x20000000 /* tp->t_rawq needs reread */ -#define DECCTQ 0x40000000 /* only ^Q starts after ^S */ -#define NOFLSH 0x80000000 /* no output flush on signal */ -#define TIOCLBIS _IOW('t', 127, int) /* bis local mode bits */ -#define TIOCLBIC _IOW('t', 126, int) /* bic local mode bits */ -#define TIOCLSET _IOW('t', 125, int) /* set entire local mode word */ -#define TIOCLGET _IOR('t', 124, int) /* get local modes */ -#define LCRTBS (CRTBS>>16) -#define LPRTERA (PRTERA>>16) -#define LCRTERA (CRTERA>>16) -#define LTILDE (TILDE>>16) -#define LMDMBUF (MDMBUF>>16) -#define LLITOUT (LITOUT>>16) -#define LTOSTOP (TOSTOP>>16) -#define LFLUSHO (FLUSHO>>16) -#define LNOHANG (NOHANG>>16) -#define LCRTKIL (CRTKIL>>16) -#define LPASS8 (PASS8>>16) -#define LCTLECH (CTLECH>>16) -#define LPENDIN (PENDIN>>16) -#define LDECCTQ (DECCTQ>>16) -#define LNOFLSH (NOFLSH>>16) -#define TIOCSLTC _IOW('t',117,struct ltchars)/* set local special chars*/ -#define TIOCGLTC _IOR('t',116,struct ltchars)/* get local special chars*/ -#define OTIOCCONS _IO('t', 98) /* for hp300 -- sans int arg */ -#define OTTYDISC 0 -#define NETLDISC 1 -#define NTTYDISC 2 - -/* From 4.4 . */ -#ifdef USE_OLD_TTY -# define B0 0 -# define B50 1 -# define B75 2 -# define B110 3 -# define B134 4 -# define B150 5 -# define B200 6 -# define B300 7 -# define B600 8 -# define B1200 9 -# define B1800 10 -# define B2400 11 -# define B4800 12 -# define B9600 13 -# define EXTA 14 -# define EXTB 15 -#endif /* USE_OLD_TTY */ - -#endif /* bits/ioctls.h */ diff --git a/sysdeps/mach/hurd/bits/local_lim.h b/sysdeps/mach/hurd/bits/local_lim.h deleted file mode 100644 index dd13074c9b..0000000000 --- a/sysdeps/mach/hurd/bits/local_lim.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Minimum guaranteed maximum values for system limits. Hurd version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* GNU has no arbitrary fixed limits on most of these things, so we - don't define the macros. Some things are unlimited. Some are in - fact limited but the limit is run-time dependent and fetched with - `sysconf' or `pathconf'. */ - -/* This one value is actually constrained by the `struct dirent' - layout, in which the `d_namlen' member is only 8 bits wide. */ - -#define NAME_MAX 255 - -/* POSIX.1 requires that we define NGROUPS_MAX (though none of the others - is required). GNU allows any number of supplementary groups, - dynamically allocated. So we pick a number which seems vaguely - suitable, and `sysconf' will return a number at least as large. */ - -#define NGROUPS_MAX 256 diff --git a/sysdeps/mach/hurd/bits/param.h b/sysdeps/mach/hurd/bits/param.h deleted file mode 100644 index 6ebd7eeaa5..0000000000 --- a/sysdeps/mach/hurd/bits/param.h +++ /dev/null @@ -1,85 +0,0 @@ -/* Old-style Unix parameters and limits. Hurd version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PARAM_H -# error "Never use directly; include instead." -#endif - -/* This file is deprecated and is provided only for compatibility with - Unix systems. It is unwise to include this file on programs which - are intended only for GNU systems. - - Parts from: - - * Copyright (c) 1982, 1986, 1989 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)param.h 7.23 (Berkeley) 5/6/91 - */ - - -/* What versions of BSD we are compatible with. */ -#define BSD 199306 /* System version (year & month). */ -#define BSD4_3 1 -#define BSD4_4 1 - -#define GNU 1994100 /* GNU version (year, month, and release). */ - - -/* BSD names for some values. We do not define the BSD names - for the values which are not statically limited, such as NOFILE. */ - - -/* There is nothing quite equivalent in GNU to Unix "mounts", but there is - no limit on the number of simultaneously attached filesystems. */ -#define NMOUNT INT_MAX - - -/* Scale factor for scaled integers used to count %cpu time and load avgs. - - The number of CPU `tick's that map to a unique `%age' can be expressed - by the formula (1 / (2 ^ (FSHIFT - 11))). The maximum load average that - can be calculated (assuming 32 bits) can be closely approximated using - the formula (2 ^ (2 * (16 - FSHIFT))) for (FSHIFT < 15). */ - -#define FSHIFT 11 /* Bits to right of fixed binary point. */ -#define FSCALE (1<. */ - -#ifndef _UNISTD_H -#error "Never include this file directly; use instead." -#endif - -#ifndef _BITS_POSIX_OPT_H -#define _BITS_POSIX_OPT_H 1 - - -/* Job control is supported. */ -#define _POSIX_JOB_CONTROL 1 - -/* Processes have a saved set-user-ID and a saved set-group-ID. */ -#define _POSIX_SAVED_IDS 1 - -/* Priority scheduling is not supported. */ -#undef _POSIX_PRIORITY_SCHEDULING - -/* Synchronizing file data is supported, but msync is missing. */ -#undef _POSIX_SYNCHRONIZED_IO - -/* The fsync function is present. */ -#define _POSIX_FSYNC 200809L - -/* Mapping of files to memory is supported. */ -#define _POSIX_MAPPED_FILES 200809L - -/* Locking of all memory could be supported in future. */ -#define _POSIX_MEMLOCK 0 - -/* Locking of ranges of memory is supported. */ -#define _POSIX_MEMLOCK_RANGE 200809L - -/* Setting of memory protections is supported. */ -#define _POSIX_MEMORY_PROTECTION 200809L - -/* Elements of the `c_cc' member of `struct termios' structure - can be disabled by using the value _POSIX_VDISABLE. */ -#define _POSIX_VDISABLE ((unsigned char) -1) - - -/* Different Hurd filesystems might do these differently. - You must query the particular file with `pathconf' or `fpathconf'. */ -#undef _POSIX_CHOWN_RESTRICTED /* Only root can change owner of file? */ -#undef _POSIX_NO_TRUNC /* Overlong file names get error? */ -#undef _POSIX_SYNC_IO /* File supports O_SYNC et al? */ - -/* X/Open realtime support is not supported. */ -#undef _XOPEN_REALTIME - -/* X/Open thread realtime support is not supported. */ -#undef _XOPEN_REALTIME_THREADS - -/* XPG4.2 shared memory is not supported. */ -#undef _XOPEN_SHM - -/* We do not have the POSIX threads interface. */ -#define _POSIX_THREADS -1 - -/* We have the reentrant functions described in POSIX. */ -#define _POSIX_REENTRANT_FUNCTIONS 1 -#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L - -/* These are all things that won't be supported when _POSIX_THREADS is not. */ -#define _POSIX_THREAD_PRIORITY_SCHEDULING -1 -#define _POSIX_THREAD_ATTR_STACKSIZE -1 -#define _POSIX_THREAD_ATTR_STACKADDR -1 -#define _POSIX_THREAD_PRIO_INHERIT -1 -#define _POSIX_THREAD_PRIO_PROTECT -1 -#ifdef __USE_XOPEN2K8 -# define _POSIX_THREAD_ROBUST_PRIO_INHERIT -1 -# define _POSIX_THREAD_ROBUST_PRIO_PROTECT -1 -#endif -#define _POSIX_SEMAPHORES -1 - -/* Real-time signals are not yet supported. */ -#define _POSIX_REALTIME_SIGNALS -1 - -/* Asynchronous I/O might supported with the existing ABI. */ -#define _POSIX_ASYNCHRONOUS_IO 0 -#undef _POSIX_ASYNC_IO -/* Alternative name for Unix98. */ -#define _LFS_ASYNCHRONOUS_IO _POSIX_ASYNCHRONOUS_IO -/* Support for prioritization is not available. */ -#undef _POSIX_PRIORITIZED_IO - -/* The LFS support in asynchronous I/O is also available. */ -#define _LFS64_ASYNCHRONOUS_IO _POSIX_ASYNCHRONOUS_IO - -/* The rest of the LFS is also available. */ -#define _LFS_LARGEFILE 1 -#define _LFS64_LARGEFILE 1 -#define _LFS64_STDIO 1 - -/* POSIX.4 shared memory objects are supported (using regular files). */ -#define _POSIX_SHARED_MEMORY_OBJECTS _POSIX_MAPPED_FILES - -/* CPU-time clocks support needs to be checked at runtime. */ -#define _POSIX_CPUTIME 0 - -/* Clock support in threads must be also checked at runtime. */ -#define _POSIX_THREAD_CPUTIME 0 - -/* GNU libc provides regular expression handling. */ -#define _POSIX_REGEXP 1 - -/* Reader/Writer locks are not available. */ -#define _POSIX_READER_WRITER_LOCKS -1 - -/* We have a POSIX shell. */ -#define _POSIX_SHELL 1 - -/* We cannot support the Timeouts option without _POSIX_THREADS. */ -#define _POSIX_TIMEOUTS -1 - -/* We do not support spinlocks. */ -#define _POSIX_SPIN_LOCKS -1 - -/* The `spawn' function family is supported. */ -#define _POSIX_SPAWN 200809L - -/* We do not have POSIX timers, but could in future without ABI change. */ -#define _POSIX_TIMERS 0 - -/* The barrier functions are not available. */ -#define _POSIX_BARRIERS -1 - -/* POSIX message queues could be available in future. */ -#define _POSIX_MESSAGE_PASSING 0 - -/* Thread process-shared synchronization is not supported. */ -#define _POSIX_THREAD_PROCESS_SHARED -1 - -/* The monotonic clock might be available. */ -#define _POSIX_MONOTONIC_CLOCK 0 - -/* The clock selection interfaces are available. */ -#define _POSIX_CLOCK_SELECTION 200809L - -/* Advisory information interfaces could be available in future. */ -#define _POSIX_ADVISORY_INFO 0 - -/* IPv6 support is available. */ -#define _POSIX_IPV6 200809L - -/* Raw socket support is available. */ -#define _POSIX_RAW_SOCKETS 200809L - -/* We have at least one terminal. */ -#define _POSIX2_CHAR_TERM 200809L - -/* Neither process nor thread sporadic server interfaces is available. */ -#define _POSIX_SPORADIC_SERVER -1 -#define _POSIX_THREAD_SPORADIC_SERVER -1 - -/* trace.h is not available. */ -#define _POSIX_TRACE -1 -#define _POSIX_TRACE_EVENT_FILTER -1 -#define _POSIX_TRACE_INHERIT -1 -#define _POSIX_TRACE_LOG -1 - -/* Typed memory objects are not available. */ -#define _POSIX_TYPED_MEMORY_OBJECTS -1 - -#endif /* bits/posix_opt.h */ diff --git a/sysdeps/mach/hurd/bits/socket.h b/sysdeps/mach/hurd/bits/socket.h deleted file mode 100644 index 6eb09a0ab3..0000000000 --- a/sysdeps/mach/hurd/bits/socket.h +++ /dev/null @@ -1,362 +0,0 @@ -/* System-specific socket constants and types. Hurd version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#ifndef __BITS_SOCKET_H -#define __BITS_SOCKET_H 1 - -#ifndef _SYS_SOCKET_H -# error "Never include directly; use instead." -#endif - -#define __need_size_t -#define __need_NULL -#include - -#include /* XXX Is this allowed? */ -#include - -/* Type for length arguments in socket calls. */ -#ifndef __socklen_t_defined -typedef __socklen_t socklen_t; -# define __socklen_t_defined -#endif - - -/* Types of sockets. */ -enum __socket_type -{ - SOCK_STREAM = 1, /* Sequenced, reliable, connection-based - byte streams. */ -#define SOCK_STREAM SOCK_STREAM - SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams - of fixed maximum length. */ -#define SOCK_DGRAM SOCK_DGRAM - SOCK_RAW = 3, /* Raw protocol interface. */ -#define SOCK_RAW SOCK_RAW - SOCK_RDM = 4, /* Reliably-delivered messages. */ -#define SOCK_RDM SOCK_RDM - SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based, - datagrams of fixed maximum length. */ -#define SOCK_SEQPACKET SOCK_SEQPACKET - -#define SOCK_MAX (SOCK_SEQPACKET + 1) - /* Mask which covers at least up to SOCK_MASK-1. The - remaining bits are used as flags. */ -#define SOCK_TYPE_MASK 0xf - - /* Flags to be ORed into the type parameter of socket and socketpair and - used for the flags parameter of accept4. */ - - SOCK_CLOEXEC = 0x00400000, /* Atomically set close-on-exec flag for the - new descriptor(s). */ -#define SOCK_CLOEXEC SOCK_CLOEXEC - - /* Changed from the O_NONBLOCK value (0x8, which is unusable for us as it is - conflicting with the original SOCK_* flags' values) to the Linux value - (04000). TODO: is there a ``better'' value? */ - SOCK_NONBLOCK = 0x0800 /* Atomically mark descriptor(s) as - non-blocking. */ -#define SOCK_NONBLOCK SOCK_NONBLOCK -}; - -/* Protocol families. */ -#define PF_UNSPEC 0 /* Unspecified. */ -#define PF_LOCAL 1 /* Local to host (pipes and file-domain). */ -#define PF_UNIX PF_LOCAL /* Old BSD name for PF_LOCAL. */ -#define PF_FILE PF_LOCAL /* POSIX name for PF_LOCAL. */ -#define PF_INET 2 /* IP protocol family. */ -#define PF_IMPLINK 3 /* ARPAnet IMP protocol. */ -#define PF_PUP 4 /* PUP protocols. */ -#define PF_CHAOS 5 /* MIT Chaos protocols. */ -#define PF_NS 6 /* Xerox NS protocols. */ -#define PF_ISO 7 /* ISO protocols. */ -#define PF_OSI PF_ISO -#define PF_ECMA 8 /* ECMA protocols. */ -#define PF_DATAKIT 9 /* AT&T Datakit protocols. */ -#define PF_CCITT 10 /* CCITT protocols (X.25 et al). */ -#define PF_SNA 11 /* IBM SNA protocol. */ -#define PF_DECnet 12 /* DECnet protocols. */ -#define PF_DLI 13 /* Direct data link interface. */ -#define PF_LAT 14 /* DEC Local Area Transport protocol. */ -#define PF_HYLINK 15 /* NSC Hyperchannel protocol. */ -#define PF_APPLETALK 16 /* Don't use this. */ -#define PF_ROUTE 17 /* Internal Routing Protocol. */ -#define PF_LINK 18 /* Link layer interface. */ -#define PF_XTP 19 /* eXpress Transfer Protocol (no AF). */ -#define PF_COIP 20 /* Connection-oriented IP, aka ST II. */ -#define PF_CNT 21 /* Computer Network Technology. */ -#define PF_RTIP 22 /* Help Identify RTIP packets. **/ -#define PF_IPX 23 /* Novell Internet Protocol. */ -#define PF_SIP 24 /* Simple Internet Protocol. */ -#define PF_PIP 25 /* Help Identify PIP packets. */ -#define PF_INET6 26 /* IP version 6. */ -#define PF_MAX 27 - -/* Address families. */ -#define AF_UNSPEC PF_UNSPEC -#define AF_LOCAL PF_LOCAL -#define AF_UNIX PF_UNIX -#define AF_FILE PF_FILE -#define AF_INET PF_INET -#define AF_IMPLINK PF_IMPLINK -#define AF_PUP PF_PUP -#define AF_CHAOS PF_CHAOS -#define AF_NS PF_NS -#define AF_ISO PF_ISO -#define AF_OSI PF_OSI -#define AF_ECMA PF_ECMA -#define AF_DATAKIT PF_DATAKIT -#define AF_CCITT PF_CCITT -#define AF_SNA PF_SNA -#define AF_DECnet PF_DECnet -#define AF_DLI PF_DLI -#define AF_LAT PF_LAT -#define AF_HYLINK PF_HYLINK -#define AF_APPLETALK PF_APPLETALK -#define AF_ROUTE PF_ROUTE -#define AF_LINK PF_LINK -#define pseudo_AF_XTP PF_XTP -#define AF_COIP PF_COIP -#define AF_CNT PF_CNT -#define pseudo_AF_RTIP PF_RTIP -#define AF_IPX PF_IPX -#define AF_SIP PF_SIP -#define pseudo_AF_PIP PF_PIP -#define AF_INET6 PF_INET6 -#define AF_MAX PF_MAX - -/* Maximum queue length specifiable by listen. */ -#define SOMAXCONN 128 /* 5 on the origional 4.4 BSD. */ - -/* Get the definition of the macro to define the common sockaddr members. */ -#include - -/* Structure describing a generic socket address. */ -struct sockaddr - { - __SOCKADDR_COMMON (sa_); /* Common data: address family and length. */ - char sa_data[14]; /* Address data. */ - }; - - -/* Structure large enough to hold any socket address (with the historical - exception of AF_UNIX). */ -#if ULONG_MAX > 0xffffffff -# define __ss_aligntype __uint64_t -#else -# define __ss_aligntype __uint32_t -#endif -#define _SS_PADSIZE \ - (_SS_SIZE - __SOCKADDR_COMMON_SIZE - sizeof (__ss_aligntype)) - -struct sockaddr_storage - { - __SOCKADDR_COMMON (ss_); /* Address family, etc. */ - char __ss_padding[_SS_PADSIZE]; - __ss_aligntype __ss_align; /* Force desired alignment. */ - }; - - -/* Bits in the FLAGS argument to `send', `recv', et al. */ -enum - { - MSG_OOB = 0x01, /* Process out-of-band data. */ -#define MSG_OOB MSG_OOB - MSG_PEEK = 0x02, /* Peek at incoming messages. */ -#define MSG_PEEK MSG_PEEK - MSG_DONTROUTE = 0x04, /* Don't use local routing. */ -#define MSG_DONTROUTE MSG_DONTROUTE - MSG_EOR = 0x08, /* Data completes record. */ -#define MSG_EOR MSG_EOR - MSG_TRUNC = 0x10, /* Data discarded before delivery. */ -#define MSG_TRUNC MSG_TRUNC - MSG_CTRUNC = 0x20, /* Control data lost before delivery. */ -#define MSG_CTRUNC MSG_CTRUNC - MSG_WAITALL = 0x40, /* Wait for full request or error. */ -#define MSG_WAITALL MSG_WAITALL - MSG_DONTWAIT = 0x80, /* This message should be nonblocking. */ -#define MSG_DONTWAIT MSG_DONTWAIT - MSG_NOSIGNAL = 0x0400 /* Do not generate SIGPIPE on EPIPE. */ -#define MSG_NOSIGNAL MSG_NOSIGNAL - }; - - -/* Structure describing messages sent by - `sendmsg' and received by `recvmsg'. */ -struct msghdr - { - void *msg_name; /* Address to send to/receive from. */ - socklen_t msg_namelen; /* Length of address data. */ - - struct iovec *msg_iov; /* Vector of data to send/receive into. */ - int msg_iovlen; /* Number of elements in the vector. */ - - void *msg_control; /* Ancillary data (eg BSD filedesc passing). */ - socklen_t msg_controllen; /* Ancillary data buffer length. */ - - int msg_flags; /* Flags in received message. */ - }; - -/* Structure used for storage of ancillary data object information. */ -struct cmsghdr - { - socklen_t cmsg_len; /* Length of data in cmsg_data plus length - of cmsghdr structure. */ - int cmsg_level; /* Originating protocol. */ - int cmsg_type; /* Protocol specific type. */ -#if __glibc_c99_flexarr_available - __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */ -#endif - }; - -/* Ancillary data object manipulation macros. */ -#if __glibc_c99_flexarr_available -# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data) -#else -# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1)) -#endif - -#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg) - -#define CMSG_FIRSTHDR(mhdr) \ - ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) \ - ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL) - -#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \ - & (size_t) ~(sizeof (size_t) - 1)) -#define CMSG_SPACE(len) (CMSG_ALIGN (len) \ - + CMSG_ALIGN (sizeof (struct cmsghdr))) -#define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) - -extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr, - struct cmsghdr *__cmsg) __THROW; -#ifdef __USE_EXTERN_INLINES -# ifndef _EXTERN_INLINE -# define _EXTERN_INLINE __extern_inline -# endif -_EXTERN_INLINE struct cmsghdr * -__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg)) -{ - if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr)) - /* The kernel header does this so there may be a reason. */ - return NULL; - - __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg - + CMSG_ALIGN (__cmsg->cmsg_len)); - if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control - + __mhdr->msg_controllen) - || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len) - > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen))) - /* No more entries. */ - return NULL; - return __cmsg; -} -#endif /* Use `extern inline'. */ - -/* Socket level message types. */ -enum - { - SCM_RIGHTS = 0x01, /* Access rights (array of int). */ -#define SCM_RIGHTS SCM_RIGHTS - SCM_TIMESTAMP = 0x02, /* Timestamp (struct timeval). */ -#define SCM_TIMESTAMP SCM_TIMESTAMP - SCM_CREDS = 0x03 /* Process creds (struct cmsgcred). */ -#define SCM_CREDS SCM_CREDS - }; - -/* Unfortunately, BSD practice dictates this structure be of fixed size. - If there are more than CMGROUP_MAX groups, the list is truncated. - (On GNU systems, the `cmcred_euid' field is just the first in the - list of effective UIDs.) */ -#define CMGROUP_MAX 16 - -/* Structure delivered by SCM_CREDS. This describes the identity of the - sender of the data simultaneously received on the socket. By BSD - convention, this is included only when a sender on a AF_LOCAL socket - sends cmsg data of this type and size; the sender's structure is - ignored, and the system fills in the various IDs of the sender process. */ -struct cmsgcred - { - __pid_t cmcred_pid; - __uid_t cmcred_uid; - __uid_t cmcred_euid; - __gid_t cmcred_gid; - int cmcred_ngroups; - __gid_t cmcred_groups[CMGROUP_MAX]; - }; - -/* Protocol number used to manipulate socket-level options - with `getsockopt' and `setsockopt'. */ -#define SOL_SOCKET 0xffff - -/* Socket-level options for `getsockopt' and `setsockopt'. */ -enum - { - SO_DEBUG = 0x0001, /* Record debugging information. */ -#define SO_DEBUG SO_DEBUG - SO_ACCEPTCONN = 0x0002, /* Accept connections on socket. */ -#define SO_ACCEPTCONN SO_ACCEPTCONN - SO_REUSEADDR = 0x0004, /* Allow reuse of local addresses. */ -#define SO_REUSEADDR SO_REUSEADDR - SO_KEEPALIVE = 0x0008, /* Keep connections alive and send - SIGPIPE when they die. */ -#define SO_KEEPALIVE SO_KEEPALIVE - SO_DONTROUTE = 0x0010, /* Don't do local routing. */ -#define SO_DONTROUTE SO_DONTROUTE - SO_BROADCAST = 0x0020, /* Allow transmission of - broadcast messages. */ -#define SO_BROADCAST SO_BROADCAST - SO_USELOOPBACK = 0x0040, /* Use the software loopback to avoid - hardware use when possible. */ -#define SO_USELOOPBACK SO_USELOOPBACK - SO_LINGER = 0x0080, /* Block on close of a reliable - socket to transmit pending data. */ -#define SO_LINGER SO_LINGER - SO_OOBINLINE = 0x0100, /* Receive out-of-band data in-band. */ -#define SO_OOBINLINE SO_OOBINLINE - SO_REUSEPORT = 0x0200, /* Allow local address and port reuse. */ -#define SO_REUSEPORT SO_REUSEPORT - SO_SNDBUF = 0x1001, /* Send buffer size. */ -#define SO_SNDBUF SO_SNDBUF - SO_RCVBUF = 0x1002, /* Receive buffer. */ -#define SO_RCVBUF SO_RCVBUF - SO_SNDLOWAT = 0x1003, /* Send low-water mark. */ -#define SO_SNDLOWAT SO_SNDLOWAT - SO_RCVLOWAT = 0x1004, /* Receive low-water mark. */ -#define SO_RCVLOWAT SO_RCVLOWAT - SO_SNDTIMEO = 0x1005, /* Send timeout. */ -#define SO_SNDTIMEO SO_SNDTIMEO - SO_RCVTIMEO = 0x1006, /* Receive timeout. */ -#define SO_RCVTIMEO SO_RCVTIMEO - SO_ERROR = 0x1007, /* Get and clear error status. */ -#define SO_ERROR SO_ERROR - SO_STYLE = 0x1008, /* Get socket connection style. */ -#define SO_STYLE SO_STYLE - SO_TYPE = SO_STYLE /* Compatible name for SO_STYLE. */ -#define SO_TYPE SO_TYPE - }; - -/* Structure used to manipulate the SO_LINGER option. */ -struct linger - { - int l_onoff; /* Nonzero to linger on close. */ - int l_linger; /* Time to linger. */ - }; - -#endif /* bits/socket.h */ diff --git a/sysdeps/mach/hurd/bits/stat.h b/sysdeps/mach/hurd/bits/stat.h deleted file mode 100644 index b614cc5b28..0000000000 --- a/sysdeps/mach/hurd/bits/stat.h +++ /dev/null @@ -1,258 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STAT_H -#define _BITS_STAT_H 1 - -#include - -/* NOTE: The size of this structure (32 ints) is known in - , since it is used in the `io_stat' RPC. MiG - does not cope at all well with the passed C structure not being of - the expected size. There are some filler words at the end to allow - for future expansion. To increase the size of the structure used - in the RPC and retain binary compatibility, we would need to assign - a new message number. */ - -struct stat - { - int st_fstype; /* File system type. */ - __fsid_t st_fsid; /* File system ID. */ -#define st_dev st_fsid - -#ifndef __USE_FILE_OFFSET64 - __ino_t st_ino; /* File number. */ -#else - __ino64_t st_ino; /* File number. */ -#endif - unsigned int st_gen; /* To detect reuse of file numbers. */ - __dev_t st_rdev; /* Device if special file. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Number of links. */ - - __uid_t st_uid; /* Owner. */ - __gid_t st_gid; /* Owning group. */ - -#ifndef __USE_FILE_OFFSET64 - __off_t st_size; /* Size in bytes. */ -#else - __off64_t st_size; /* Size in bytes. */ -#endif - -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - - __blksize_t st_blksize; /* Optimal size for I/O. */ - -#ifndef __USE_FILE_OFFSET64 - __blkcnt_t st_blocks; /* Number of 512-byte blocks allocated. - Not related to `st_blksize'. */ -#else - __blkcnt64_t st_blocks; /* Number of 512-byte blocks allocated. - Not related to `st_blksize'. */ -#endif - - __uid_t st_author; /* File author. */ - - unsigned int st_flags; /* User-defined flags. - High 16 bits can be set only by root. */ - -#ifndef __USE_FILE_OFFSET64 -# define _SPARE_SIZE ((sizeof (__fsid_t) == sizeof (int)) ? 12 : 11) -#else -# define _SPARE_SIZE ((sizeof (__fsid_t) == sizeof (int)) ? 9 : 8) -#endif - int st_spare[_SPARE_SIZE]; /* Room for future expansion. */ -#undef _SPARE_SIZE - }; - -#ifdef __USE_LARGEFILE64 -struct stat64 - { - int st_fstype; /* File system type. */ - __fsid_t st_fsid; /* File system ID. */ -# define st_dev st_fsid - - __ino64_t st_ino; /* File number. */ - unsigned int st_gen; /* To detect reuse of file numbers. */ - __dev_t st_rdev; /* Device if special file. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Number of links. */ - - __uid_t st_uid; /* Owner. */ - __gid_t st_gid; /* Owning group. */ - - __off64_t st_size; /* Size in bytes. */ - -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - - __blksize_t st_blksize; /* Optimal size for I/O. */ - - __blkcnt64_t st_blocks; /* Number of 512-byte blocks allocated. - Not related to `st_blksize'. */ - - __uid_t st_author; /* File author. */ - - unsigned int st_flags; /* User-defined flags. - High 16 bits can be set only by root. */ - -#define _SPARE_SIZE ((sizeof (__fsid_t) == sizeof (int)) ? 9 : 8) - int st_spare[_SPARE_SIZE]; /* Room for future expansion. */ -#undef _SPARE_SIZE - }; -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -/* Nanosecond resolution time values are supported. */ -#define _STATBUF_ST_NSEC - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ -#define __S_IFIFO 0010000 /* FIFO. */ - -/* POSIX.1b objects. */ -#define __S_TYPEISMQ(buf) (0) -#define __S_TYPEISSEM(buf) (0) -#define __S_TYPEISSHM(buf) (0) - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 00400 /* Read by owner. */ -#define __S_IWRITE 00200 /* Write by owner. */ -#define __S_IEXEC 00100 /* Execute by owner. */ - - -#ifdef __USE_GNU -/* If set, there is no benefit in caching the contents of this file. */ -#define S_INOCACHE 000000200000 - -/* If the S_IUSEUNK bit is set, then the S_IUNKNOWN bits (see below) - control access for unknown users. If S_IUSEUNK is clear, then unknown - users are treated as "others" for purposes of access control. */ -#define S_IUSEUNK 000000400000 -/* Mask of protection bits for unknown users (no effective IDs at all). */ -#define S_IUNKNOWN 000007000000 -/* Shift S_IREAD, S_IWRITE, S_IEXEC left this many bits to produce the - protection bits for unknown users. */ -#define S_IUNKSHIFT 12 - -/* Read only bits: */ - -/* There is a passive translator set for this file */ -#define S_IPTRANS 000010000000 -/* There is an active translator running on this file */ -#define S_IATRANS 000020000000 -/* This is the root of a filesystem (or single node translator) */ -#define S_IROOT 000040000000 -/* All the bits relevant to translators */ -#define S_ITRANS 000070000000 - -/* Definitely no mmaps to this. */ -#define S_IMMAP0 000100000000 - -/* ALL the unused bits. */ -#define S_ISPARE (~(S_IFMT|S_ITRANS|S_INOCACHE|S_IMMAP0| \ - S_IUSEUNK|S_IUNKNOWN|07777)) -#endif - -#ifdef __USE_MISC -/* Default file creation mask (umask). */ -# define CMASK 0022 - -/* Definitions of flags stored in file flags word. */ - -/* Super-user and owner changeable flags. */ -# define UF_SETTABLE 0x0000ffff /* mask of owner changeable flags */ -# define UF_NODUMP 0x00000001 /* do not dump file */ -# define UF_IMMUTABLE 0x00000002 /* file may not be changed */ -# define UF_APPEND 0x00000004 /* writes to file may only append */ -# define UF_OPAQUE 0x00000008 /* directory is opaque wrt. union */ -# define UF_NOUNLINK 0x00000010 /* file may not be removed or renamed */ - -/* Super-user changeable flags. */ -# define SF_SETTABLE 0xffff0000 /* mask of superuser changeable flags */ -# define SF_ARCHIVED 0x00010000 /* file is archived */ -# define SF_IMMUTABLE 0x00020000 /* file may not be changed */ -# define SF_APPEND 0x00040000 /* writes to file may only append */ -# define SF_NOUNLINK 0x00100000 /* file may not be removed or renamed */ -# define SF_SNAPSHOT 0x00200000 /* snapshot inode */ - -__BEGIN_DECLS - -/* Set file flags for FILE to FLAGS. */ -extern int chflags (__const char *__file, unsigned long int __flags) __THROW; - -/* Set file flags of the file referred to by FD to FLAGS. */ -extern int fchflags (int __fd, unsigned long int __flags) __THROW; - -__END_DECLS -#endif - -#endif /* bits/stat.h */ diff --git a/sysdeps/mach/hurd/bits/statfs.h b/sysdeps/mach/hurd/bits/statfs.h deleted file mode 100644 index 4613f0f34a..0000000000 --- a/sysdeps/mach/hurd/bits/statfs.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Definition of `struct statfs', information about a filesystem. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_STATFS_H -# error "Never include directly; use instead." -#endif - -#include - -/* GNU Hurd NOTE: The size of this structure (16 ints) is known in - , since it is used in the `file_statfs' RPC. MiG - does not cope at all well with the passed C structure not being of the - expected size. There are some filler words at the end to allow for - future expansion. To increase the size of the structure used in the RPC - and retain binary compatibility, we would need to assign a new message - number. - - Note also that `struct statvfs' in is laid out - identically to `struct statfs', so they can be used interchangeably. - Any changes made here must also be made in that file. */ - -struct statfs - { - unsigned int f_type; - unsigned int f_bsize; -#ifndef __USE_FILE_OFFSET64 - __fsblkcnt_t f_blocks; - __fsblkcnt_t f_bfree; - __fsblkcnt_t f_bavail; - __fsblkcnt_t f_files; - __fsblkcnt_t f_ffree; -#else - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsblkcnt64_t f_files; - __fsblkcnt64_t f_ffree; -#endif - __fsid_t f_fsid; - unsigned int f_namelen; -#ifndef __USE_FILE_OFFSET64 - __fsfilcnt_t f_favail; -#else - __fsfilcnt64_t f_favail; -#endif - unsigned int f_frsize; - unsigned int f_flag; - unsigned int f_spare[3]; - }; - -#ifdef __USE_LARGEFILE64 -struct statfs64 - { - unsigned int f_type; - unsigned int f_bsize; - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsblkcnt64_t f_files; - __fsblkcnt64_t f_ffree; - __fsid_t f_fsid; - unsigned int f_namelen; - __fsfilcnt64_t f_favail; - unsigned int f_frsize; - unsigned int f_flag; - unsigned int f_spare[3]; - }; -#endif - -/* Tell code we have this member. */ -#define _STATFS_F_NAMELEN diff --git a/sysdeps/mach/hurd/bits/statvfs.h b/sysdeps/mach/hurd/bits/statvfs.h deleted file mode 100644 index 3dcf460444..0000000000 --- a/sysdeps/mach/hurd/bits/statvfs.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Definition of `struct statvfs', information about a filesystem. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_STATVFS_H -# error "Never include directly; use instead." -#endif - -#include - -/* GNU Hurd NOTE: This structure is carefully laid out such that we - can use the `file_statfs' RPC to implement `statvfs' and - `fstatvfs'. Please keep this file in sync with , - and pay attention to the note in that file. */ - -struct statvfs - { - unsigned int __f_type; - unsigned int f_bsize; -#ifndef __USE_FILE_OFFSET64 - __fsblkcnt_t f_blocks; - __fsblkcnt_t f_bfree; - __fsblkcnt_t f_bavail; - __fsfilcnt_t f_files; - __fsfilcnt_t f_ffree; -#else - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; -#endif - __fsid_t f_fsid; - unsigned int f_namemax; /* NOTE: f_namelen in `struct statfs'. */ -#ifndef __USE_FILE_OFFSET64 - __fsfilcnt_t f_favail; -#else - __fsfilcnt64_t f_favail; -#endif - unsigned int f_frsize; - unsigned int f_flag; - unsigned int f_spare[3]; - }; - -#ifdef __USE_LARGEFILE64 -struct statvfs64 - { - unsigned int __f_type; - unsigned int f_bsize; - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; - __fsid_t f_fsid; - unsigned int f_namemax; - __fsfilcnt64_t f_favail; - unsigned int f_frsize; - unsigned int f_flag; - unsigned int f_spare[3]; - }; -#endif - -/* Definitions for the flag in `f_flag'. - The values for the non-standard flags come from Linux. */ -enum -{ - ST_RDONLY = 1, -#define ST_RDONLY ST_RDONLY - ST_NOSUID = 2 -#define ST_NOSUID ST_NOSUID -#ifdef __USE_GNU - , - ST_NOEXEC = 8, -# define ST_NOEXEC ST_NOEXEC - ST_SYNCHRONOUS = 16, -# define ST_SYNCHRONOUS ST_SYNCHRONOUS - ST_NOATIME = 32 /* Do not update access times. */ -# define ST_NOATIME ST_NOATIME -#endif -}; diff --git a/sysdeps/mach/hurd/bits/typesizes.h b/sysdeps/mach/hurd/bits/typesizes.h deleted file mode 100644 index e87ad60517..0000000000 --- a/sysdeps/mach/hurd/bits/typesizes.h +++ /dev/null @@ -1,68 +0,0 @@ -/* bits/typesizes.h -- underlying types for *_t. Hurd version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_TYPES_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_TYPESIZES_H -#define _BITS_TYPESIZES_H 1 - -/* See for the meaning of these macros. This file exists so - that need not vary across different GNU platforms. */ - -#define __DEV_T_TYPE __U32_TYPE -#define __UID_T_TYPE __U32_TYPE -#define __GID_T_TYPE __U32_TYPE -#define __INO_T_TYPE __ULONGWORD_TYPE -#define __INO64_T_TYPE __UQUAD_TYPE -#define __MODE_T_TYPE __U32_TYPE -#define __NLINK_T_TYPE __UWORD_TYPE -#define __OFF_T_TYPE __SLONGWORD_TYPE -#define __OFF64_T_TYPE __SQUAD_TYPE -#define __PID_T_TYPE __S32_TYPE -#define __RLIM_T_TYPE __ULONGWORD_TYPE -#define __RLIM64_T_TYPE __UQUAD_TYPE -#define __BLKCNT_T_TYPE __SLONGWORD_TYPE -#define __BLKCNT64_T_TYPE __SQUAD_TYPE -#define __FSBLKCNT_T_TYPE __ULONGWORD_TYPE -#define __FSBLKCNT64_T_TYPE __UQUAD_TYPE -#define __FSFILCNT_T_TYPE __ULONGWORD_TYPE -#define __FSFILCNT64_T_TYPE __UQUAD_TYPE -#define __FSWORD_T_TYPE __SWORD_TYPE -#define __ID_T_TYPE __U32_TYPE -#define __CLOCK_T_TYPE __SLONGWORD_TYPE -#define __TIME_T_TYPE __SLONGWORD_TYPE -#define __USECONDS_T_TYPE __U32_TYPE -#define __SUSECONDS_T_TYPE __SLONGWORD_TYPE -#define __DADDR_T_TYPE __S32_TYPE -#define __KEY_T_TYPE __S32_TYPE -#define __CLOCKID_T_TYPE __S32_TYPE -#define __TIMER_T_TYPE __S32_TYPE -#define __BLKSIZE_T_TYPE __SLONGWORD_TYPE -#define __FSID_T_TYPE __UQUAD_TYPE -#define __SSIZE_T_TYPE __SWORD_TYPE -#define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE -#define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE -#define __CPU_MASK_TYPE __ULONGWORD_TYPE - -/* Number of descriptors that can fit in an `fd_set'. */ -#define __FD_SETSIZE 256 - - -#endif /* bits/typesizes.h */ diff --git a/sysdeps/mach/hurd/brk.c b/sysdeps/mach/hurd/brk.c deleted file mode 100644 index a9154bffdd..0000000000 --- a/sysdeps/mach/hurd/brk.c +++ /dev/null @@ -1,166 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include /* For `struct mutex'. */ - - -/* Initial maximum size of the data segment (this is arbitrary). */ -#define DATA_SIZE (128 * 1024 * 1024) - -/* Up to the page including this address is allocated from the kernel. - This address is the data resource limit. */ -vm_address_t _hurd_data_end; - -/* Up to this address is actually available to the user. - Pages beyond the one containing this address allow no access. */ -vm_address_t _hurd_brk = 0; - -/* This name is used by the Linux crtbeginS.o for reasons you don't even - want to think about it. It's just easier to provide some definition for - it than even to explain the braindamage involved. */ -weak_alias (_hurd_brk, ___brk_addr) - -struct mutex _hurd_brk_lock; - -extern int __data_start, _end; -weak_extern (__data_start) -static vm_address_t static_data_start; - - -/* Set the end of the process's data space to INADDR. - Return 0 if successful, -1 if not. */ -int -__brk (void *inaddr) -{ - int ret; - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_brk_lock); - ret = _hurd_set_brk ((vm_address_t) inaddr); - __mutex_unlock (&_hurd_brk_lock); - HURD_CRITICAL_END; - return ret; -} -weak_alias (__brk, brk) - - -int -_hurd_set_brk (vm_address_t addr) -{ - error_t err = 0; - vm_address_t pagend = round_page (addr); - vm_address_t pagebrk = round_page (_hurd_brk); - long int rlimit; - - if (pagend <= pagebrk) - { - if (pagend < pagebrk) - { - /* XXX wish this were atomic... */ - /* First deallocate the memory to release its backing space. */ - __vm_deallocate (__mach_task_self (), pagend, pagebrk - pagend); - /* Now reallocate it with no access allowed. */ - err = __vm_map (__mach_task_self (), - &pagend, pagebrk - pagend, - 0, 0, MACH_PORT_NULL, 0, 0, - 0, VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE, - VM_INHERIT_COPY); - /* XXX what if error? */ - } - _hurd_brk = addr; - return 0; - } - - __mutex_lock (&_hurd_rlimit_lock); - rlimit = _hurd_rlimits[RLIMIT_DATA].rlim_cur; - __mutex_unlock (&_hurd_rlimit_lock); - - if (addr - static_data_start > rlimit) - { - /* Need to increase the resource limit. */ - errno = ENOMEM; - return -1; - } - - if (pagend > _hurd_data_end) - { - vm_address_t alloc_start = _hurd_data_end; - - /* We didn't allocate enough space! Hopefully we can get some more! */ - - if (_hurd_data_end > pagebrk) - /* First finish allocation. */ - err = __vm_protect (__mach_task_self (), pagebrk, - alloc_start - pagebrk, 0, - VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); - if (! err) - _hurd_brk = alloc_start; - - if (! err) - err = __vm_allocate (__mach_task_self (), &alloc_start, - pagend - alloc_start, 0); - - if (! err) - _hurd_data_end = pagend; - } - else - /* Make the memory accessible. */ - err = __vm_protect (__mach_task_self (), pagebrk, pagend - pagebrk, - 0, VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); - - if (err) - return __hurd_fail (err); - - _hurd_brk = addr; - return 0; -} - -static void -init_brk (void) -{ - vm_address_t pagend; - - __mutex_init (&_hurd_brk_lock); - - static_data_start = (vm_address_t) (&__data_start ?: &_end); - - /* If _hurd_brk is already set, don't change it. The assumption is that - it was set in a previous run before something like Emacs's unexec was - called and dumped all the data up to the break at that point. */ - if (_hurd_brk == 0) - _hurd_brk = (vm_address_t) &_end; - - pagend = round_page (_hurd_brk); - - _hurd_data_end = round_page (static_data_start + DATA_SIZE); - - if (pagend < _hurd_data_end) - { - /* We use vm_map to allocate and change permissions atomically. */ - if (__vm_map (__mach_task_self (), &pagend, _hurd_data_end - pagend, - 0, 0, MACH_PORT_NULL, 0, 0, - 0, VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE, - VM_INHERIT_COPY)) - /* Couldn't allocate the memory. The break will be very short. */ - _hurd_data_end = pagend; - } - - (void) &init_brk; /* Avoid ``defined but not used'' warning. */ -} -text_set_element (_hurd_preinit_hook, init_brk); diff --git a/sysdeps/mach/hurd/chdir.c b/sysdeps/mach/hurd/chdir.c deleted file mode 100644 index 99305540d6..0000000000 --- a/sysdeps/mach/hurd/chdir.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Change the current directory to FILE_NAME. */ -int -__chdir (const char *file_name) -{ - return _hurd_change_directory_port_from_name (&_hurd_ports[INIT_PORT_CWDIR], - file_name); -} - -weak_alias (__chdir, chdir) diff --git a/sysdeps/mach/hurd/check_fds.c b/sysdeps/mach/hurd/check_fds.c deleted file mode 100644 index 69dc11e257..0000000000 --- a/sysdeps/mach/hurd/check_fds.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -#include - -/* Try to get a machine dependent instruction which will make the - program crash. This is used in case everything else fails. */ -#include -#ifndef ABORT_INSTRUCTION -/* No such instruction is available. */ -# define ABORT_INSTRUCTION -#endif - -static void -check_one_fd (int fd, int mode) -{ - struct hurd_fd *d; - - d = _hurd_fd_get (fd); - if (d == NULL) - { - /* This descriptor hasn't been opened. We try to allocate the - descriptor and open /dev/null on it so that the SUID program - we are about to start does not accidentally use this - descriptor. */ - d = _hurd_alloc_fd (NULL, fd); - if (d != NULL) - { - mach_port_t port; - - port = __file_name_lookup (_PATH_DEVNULL, mode, 0); - if (port) - { - /* Since /dev/null isn't supposed to be a terminal, we - avoid any ctty magic. */ - d->port.port = port; - d->flags = 0; - - __spin_unlock (&d->port.lock); - return; - } - } - - /* We cannot even give an error message here since it would run - into the same problems. */ - while (1) - /* Try for ever and ever. */ - ABORT_INSTRUCTION; - } -} - -static void -check_standard_fds (void) -{ - /* Check all three standard file descriptors. */ - check_one_fd (STDIN_FILENO, O_RDONLY); - check_one_fd (STDOUT_FILENO, O_RDWR); - check_one_fd (STDERR_FILENO, O_RDWR); -} - -static void -init_standard_fds (void) -{ - /* Now that we have FDs, make sure that, if this is a SUID program, - FDs 0, 1 and 2 are allocated. If necessary we'll set them up - ourselves. If that's not possible we stop the program. */ - if (__builtin_expect (__libc_enable_secure, 0)) - check_standard_fds (); - - (void) &init_standard_fds; /* Avoid "defined but not used" warning. */ -} -text_set_element (_hurd_fd_subinit, init_standard_fds); - - -#ifndef SHARED -void -__libc_check_standard_fds (void) -{ - /* We don't check the standard file descriptors here. They will be - checked when we initialize the file descriptor table, as part of - the _hurd_fd_subinit hook. - - This function is only present to make sure that this module gets - linked in when part of the static libc. */ -} -#endif diff --git a/sysdeps/mach/hurd/chflags.c b/sysdeps/mach/hurd/chflags.c deleted file mode 100644 index d231f68327..0000000000 --- a/sysdeps/mach/hurd/chflags.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Change the flags of FILE to FLAGS. */ - -/* XXX shouldn't this be __chflags? */ -int -chflags (const char *file, unsigned long int flags) -{ - error_t err; - file_t port = __file_name_lookup (file, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - err = __file_chflags (port, flags); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err); - return 0; -} diff --git a/sysdeps/mach/hurd/chmod.c b/sysdeps/mach/hurd/chmod.c deleted file mode 100644 index 943f9855d4..0000000000 --- a/sysdeps/mach/hurd/chmod.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Change the protections of FILE to MODE. */ -int -__chmod (const char *file, mode_t mode) -{ - error_t err; - file_t port = __file_name_lookup (file, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - err = __file_chmod (port, mode); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err); - return 0; -} - -weak_alias (__chmod, chmod) diff --git a/sysdeps/mach/hurd/chown.c b/sysdeps/mach/hurd/chown.c deleted file mode 100644 index 0a15181f3f..0000000000 --- a/sysdeps/mach/hurd/chown.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Change the owner and group of FILE. */ -int -__chown (const char *file, uid_t owner, gid_t group) -{ - error_t err; - file_t port = __file_name_lookup (file, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - err = __file_chown (port, owner, group); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err); - return 0; -} -libc_hidden_def (__chown) -weak_alias (__chown, chown) diff --git a/sysdeps/mach/hurd/chroot.c b/sysdeps/mach/hurd/chroot.c deleted file mode 100644 index 04054ca93e..0000000000 --- a/sysdeps/mach/hurd/chroot.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include -#include - -/* Make PATH be the root directory (the starting point for absolute - paths). Note that while on traditional UNIX systems this call is - restricted to the super-user, it isn't on the Hurd. */ -int -chroot (const char *path) -{ - const char *lookup; - size_t len; - file_t dir, root; - error_t err; - - /* Append trailing "/." to directory name to force ENOTDIR if it's not a - directory and EACCES if we don't have search permission. */ - len = strlen (path); - if (len >= 2 && path[len - 2] == '/' && path[len - 1] == '.') - lookup = path; - else if (len == 0) - /* Special-case empty file name according to POSIX. */ - return __hurd_fail (ENOENT); - else - { - char *n = alloca (len + 3); - memcpy (n, path, len); - n[len] = '/'; - n[len + 1] = '.'; - n[len + 2] = '\0'; - lookup = n; - } - - dir = __file_name_lookup (lookup, 0, 0); - if (dir == MACH_PORT_NULL) - return -1; - - /* Prevent going through DIR's .. */ - err = __file_reparent (dir, MACH_PORT_NULL, &root); - __mach_port_deallocate (__mach_task_self (), dir); - if (err) - return __hurd_fail (err); - - _hurd_port_set (&_hurd_ports[INIT_PORT_CRDIR], root); - return 0; -} diff --git a/sysdeps/mach/hurd/clock.c b/sysdeps/mach/hurd/clock.c deleted file mode 100644 index 98534268c8..0000000000 --- a/sysdeps/mach/hurd/clock.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Return the CPU time used by the program so far. Hurd version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Return the time used by the program so far (user time + system time). */ -clock_t -clock (void) -{ - struct task_basic_info bi; - struct task_thread_times_info tti; - mach_msg_type_number_t count; - clock_t total; - error_t err; - - count = TASK_BASIC_INFO_COUNT; - err = __task_info (__mach_task_self (), TASK_BASIC_INFO, - (task_info_t) &bi, &count); - if (err) - return __hurd_fail (err); - - count = TASK_THREAD_TIMES_INFO_COUNT; - err = __task_info (__mach_task_self (), TASK_THREAD_TIMES_INFO, - (task_info_t) &tti, &count); - if (err) - return __hurd_fail (err); - - total = bi.user_time.seconds * 1000000 + bi.user_time.microseconds; - total += tti.user_time.seconds * 1000000 + tti.user_time.microseconds; - total += bi.system_time.seconds * 1000000 + bi.system_time.microseconds; - total += tti.system_time.seconds * 1000000 + tti.system_time.microseconds; - - return total; -} diff --git a/sysdeps/mach/hurd/close.c b/sysdeps/mach/hurd/close.c deleted file mode 100644 index e672dfb72c..0000000000 --- a/sysdeps/mach/hurd/close.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Close the file descriptor FD. */ -int -__close (int fd) -{ - error_t err; - - err = HURD_FD_USE (fd, _hurd_fd_close (descriptor)); - - return err ? __hurd_fail (err) : 0; -} -libc_hidden_def (__close) -weak_alias (__close, close) diff --git a/sysdeps/mach/hurd/closedir.c b/sysdeps/mach/hurd/closedir.c deleted file mode 100644 index 0d3805c06c..0000000000 --- a/sysdeps/mach/hurd/closedir.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include "dirstream.h" - -/* Close the directory stream DIRP. - Return 0 if successful, -1 if not. */ -int -__closedir (DIR *dirp) -{ - error_t err; - - if (dirp == NULL) - { - errno = EINVAL; - return -1; - } - - __libc_lock_lock (dirp->__lock); - err = __vm_deallocate (__mach_task_self (), - (vm_address_t) dirp->__data, dirp->__allocation); - dirp->__data = NULL; - err = _hurd_fd_close (dirp->__fd); - - if (err) - { - /* Unlock the DIR. A failing closedir can be repeated (and may fail - again, but shouldn't deadlock). */ - __libc_lock_unlock (dirp->__lock); - return __hurd_fail (err); - } - - /* Clean up the lock and free the structure. */ - __libc_lock_fini (dirp->__lock); - free (dirp); - - return 0; -} -weak_alias (__closedir, closedir) diff --git a/sysdeps/mach/hurd/configure b/sysdeps/mach/hurd/configure deleted file mode 100644 index 163b5c7730..0000000000 --- a/sysdeps/mach/hurd/configure +++ /dev/null @@ -1,49 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - -$as_echo "#define NO_HIDDEN 1" >>confdefs.h - - -if test -n "$sysheaders"; then - OLD_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS $SYSINCLUDES" -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Hurd header version" >&5 -$as_echo_n "checking Hurd header version... " >&6; } -if ${libc_cv_hurd_version+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - -#define NEED_VERSION 20020609 -#if HURD_INTERFACE_VERSION < NEED_VERSION -# error Hurd version too old: HURD_INTERFACE_VERSION < NEED_VERSION -#endif - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_cv_hurd_version=ok -else - libc_cv_hurd_version=bad -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_hurd_version" >&5 -$as_echo "$libc_cv_hurd_version" >&6; } -if test "x$libc_cv_hurd_version" != xok; then - as_fn_error $? "Hurd headers not installed or too old" "$LINENO" 5 -fi - -if test -n "$sysheaders"; then - CPPFLAGS=$OLD_CPPFLAGS -fi - -libc_cv_ld_gnu_indirect_function=no diff --git a/sysdeps/mach/hurd/configure.ac b/sysdeps/mach/hurd/configure.ac deleted file mode 100644 index 5539a8c8af..0000000000 --- a/sysdeps/mach/hurd/configure.ac +++ /dev/null @@ -1,32 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. - -dnl We need this setting because of the need for PLT calls in ld.so. -dnl See Roland's comment in -dnl https://sourceware.org/bugzilla/show_bug.cgi?id=15605 -AC_DEFINE([NO_HIDDEN]) - -if test -n "$sysheaders"; then - OLD_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS $SYSINCLUDES" -fi - -AC_CACHE_CHECK(Hurd header version, libc_cv_hurd_version, [dnl -AC_TRY_COMPILE(dnl -[#include ], [ -#define NEED_VERSION 20020609 -#if HURD_INTERFACE_VERSION < NEED_VERSION -# error Hurd version too old: HURD_INTERFACE_VERSION < NEED_VERSION -#endif], - libc_cv_hurd_version=ok, - libc_cv_hurd_version=bad)]) -if test "x$libc_cv_hurd_version" != xok; then - AC_MSG_ERROR(Hurd headers not installed or too old) -fi - -if test -n "$sysheaders"; then - CPPFLAGS=$OLD_CPPFLAGS -fi - -dnl ifunc does not work yet for static binaries -dnl http://www.gnu.org/software/hurd/open_issues/ifunc.html -libc_cv_ld_gnu_indirect_function=no diff --git a/sysdeps/mach/hurd/connect.c b/sysdeps/mach/hurd/connect.c deleted file mode 100644 index 36c9eeb9fb..0000000000 --- a/sysdeps/mach/hurd/connect.c +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include "hurd/hurdsocket.h" - -/* Open a connection on socket FD to peer at ADDR (which LEN bytes long). - For connectionless socket types, just set the default address to send to - and the only address from which to accept transmissions. - Return 0 on success, -1 for errors. */ -int -__connect (int fd, __CONST_SOCKADDR_ARG addrarg, socklen_t len) -{ - error_t err; - addr_port_t aport; - const struct sockaddr_un *addr = addrarg.__sockaddr_un__; - - if (addr->sun_family == AF_LOCAL) - { - char *name = _hurd_sun_path_dupa (addr, len); - /* For the local domain, we must look up the name as a file and talk - to it with the ifsock protocol. */ - file_t file = __file_name_lookup (name, 0, 0); - if (file == MACH_PORT_NULL) - return -1; - err = __ifsock_getsockaddr (file, &aport); - __mach_port_deallocate (__mach_task_self (), file); - if (err == MIG_BAD_ID || err == EOPNOTSUPP) - /* The file did not grok the ifsock protocol. */ - err = ENOTSOCK; - if (err) - return __hurd_fail (err); - } - else - err = EIEIO; - - err = HURD_DPORT_USE (fd, - ({ - if (err) - err = __socket_create_address (port, - addr->sun_family, - (char *) addr, len, - &aport); - if (! err) - { - err = __socket_connect (port, aport); - __mach_port_deallocate (__mach_task_self (), - aport); - } - err; - })); - - return err ? __hurd_dfail (fd, err) : 0; -} - -libc_hidden_def (__connect) -weak_alias (__connect, connect) diff --git a/sysdeps/mach/hurd/cthreads.c b/sysdeps/mach/hurd/cthreads.c deleted file mode 100644 index e464714bed..0000000000 --- a/sysdeps/mach/hurd/cthreads.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Placeholder for key creation routine from Hurd cthreads library. */ -int -weak_function -cthread_keycreate (cthread_key_t *key) -{ - __set_errno (ENOSYS); - *key = -1; - return -1; -} - -/* Placeholder for key retrieval routine from Hurd cthreads library. */ -int -weak_function -cthread_getspecific (cthread_key_t key, void **pval) -{ - *pval = NULL; - __set_errno (ENOSYS); - return -1; -} - -/* Placeholder for key setting routine from Hurd cthreads library. */ -int -weak_function -cthread_setspecific (cthread_key_t key, void *val) -{ - __set_errno (ENOSYS); - return -1; -} - -/* Call cthread_getspecific which gets a pointer to the return value instead - of just returning it. */ -void * -__libc_getspecific (cthread_key_t key) -{ - void *val; - cthread_getspecific (key, &val); - return val; -} diff --git a/sysdeps/mach/hurd/device-nrs.h b/sysdeps/mach/hurd/device-nrs.h deleted file mode 100644 index 3cbebf8612..0000000000 --- a/sysdeps/mach/hurd/device-nrs.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Device numbers of devices used in the implementation. Hurd version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DEVICE_NRS_H -#define _DEVICE_NRS_H 1 - -#include - -/* Check whether a given device is a tty. */ -#define DEV_TTY_P(statp) ((statp)->st_fstype == FSTYPE_TERM) - -#endif /* device-nrs.h */ diff --git a/sysdeps/mach/hurd/dirfd.c b/sysdeps/mach/hurd/dirfd.c deleted file mode 100644 index 0ad290d515..0000000000 --- a/sysdeps/mach/hurd/dirfd.c +++ /dev/null @@ -1,43 +0,0 @@ -/* dirfd -- Return the file descriptor used by a DIR stream. Hurd version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -dirfd (DIR *dirp) -{ - int fd; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_dtable_lock); - for (fd = 0; fd < _hurd_dtablesize; ++fd) - if (_hurd_dtable[fd] == dirp->__fd) - break; - if (fd == _hurd_dtablesize) - { - errno = EINVAL; - fd = -1; - } - __mutex_unlock (&_hurd_dtable_lock); - HURD_CRITICAL_END; - - return fd; -} diff --git a/sysdeps/mach/hurd/dirstream.h b/sysdeps/mach/hurd/dirstream.h deleted file mode 100644 index 01aaa556e0..0000000000 --- a/sysdeps/mach/hurd/dirstream.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DIRSTREAM_H - -#define _DIRSTREAM_H 1 - -#include - -/* Directory stream type. - - The Hurd directory format is the same as `struct dirent', so `readdir' - returns a pointer into the buffer we read directory data into. */ - -struct __dirstream - { - void *__fd; /* `struct hurd_fd' pointer for descriptor. */ - char *__data; /* Directory block. */ - int __entry_data; /* Entry number `__data' corresponds to. */ - char *__ptr; /* Current pointer into the block. */ - int __entry_ptr; /* Entry number `__ptr' corresponds to. */ - size_t __allocation; /* Space allocated for the block. */ - size_t __size; /* Total valid data in the block. */ - __libc_lock_define (, __lock) /* Mutex lock for this structure. */ - }; - -#endif /* dirstream.h */ diff --git a/sysdeps/mach/hurd/dl-execstack.c b/sysdeps/mach/hurd/dl-execstack.c deleted file mode 100644 index 1168df9262..0000000000 --- a/sysdeps/mach/hurd/dl-execstack.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Stack executability handling for GNU dynamic linker. Hurd version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -extern struct hurd_startup_data *_dl_hurd_data attribute_hidden; - -/* There is no portable way to know the bounds of the initial thread's stack - so as to mprotect it. */ - -int -internal_function -_dl_make_stack_executable (void **stack_endp) -{ - /* Challenge the caller. */ - if (__builtin_expect (*stack_endp != __libc_stack_end, 0)) - return EPERM; - *stack_endp = NULL; - -#if IS_IN (rtld) - if (__mprotect ((void *)_dl_hurd_data->stack_base, _dl_hurd_data->stack_size, - PROT_READ|PROT_WRITE|PROT_EXEC) != 0) - return errno; - - /* Remember that we changed the permission. */ - GL(dl_stack_flags) |= PF_X; - - return 0; -#else - /* We don't bother to implement this for static linking. */ - return ENOSYS; -#endif -} -rtld_hidden_def (_dl_make_stack_executable) diff --git a/sysdeps/mach/hurd/dl-fcntl.h b/sysdeps/mach/hurd/dl-fcntl.h deleted file mode 100644 index 149481f2e4..0000000000 --- a/sysdeps/mach/hurd/dl-fcntl.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Functions with hidden attribute internal to ld.so, which are declared - in include/fcntl.h. Hurd version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* __open can't be hidden in ld.so on Hurd since it will be preempted by the - one in libc.so after bootstrap. */ -extern __typeof (__fcntl) __fcntl attribute_hidden; diff --git a/sysdeps/mach/hurd/dl-mman.h b/sysdeps/mach/hurd/dl-mman.h deleted file mode 100644 index 4e875eec28..0000000000 --- a/sysdeps/mach/hurd/dl-mman.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Functions with hidden attribute internal to ld.so, which are declared - in include/sys/mman.h. Hurd version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Can't hide __mmap on Hurd, since __mmap in ld.so will be preempted by - the one in libc.so after bootstrap. */ -extern __typeof (__mprotect) __mprotect attribute_hidden; -extern __typeof (__munmap) __munmap attribute_hidden; diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c deleted file mode 100644 index 4f274b4d65..0000000000 --- a/sysdeps/mach/hurd/dl-sysdep.c +++ /dev/null @@ -1,661 +0,0 @@ -/* Operating system support for run-time dynamic linker. Hurd version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* In the static library, this is all handled by dl-support.c - or by the vanilla definitions in the rest of the C library. */ -#ifdef SHARED - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "hurdstartup.h" -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -extern void __mach_init (void); - -extern int _dl_argc; -extern char **_dl_argv; -extern char **_environ; - -int __libc_enable_secure = 0; -rtld_hidden_data_def (__libc_enable_secure) -int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion - of init-first. */ -/* This variable contains the lowest stack address ever used. */ -void *__libc_stack_end = NULL; -rtld_hidden_data_def(__libc_stack_end) - -#if HP_TIMING_AVAIL -hp_timing_t _dl_cpuclock_offset; -#endif - - -struct hurd_startup_data *_dl_hurd_data; - -/* This is used only within ld.so, via dl-minimal.c's __errno_location. */ -#undef errno -int errno attribute_hidden; - -/* Defining these variables here avoids the inclusion of hurdsig.c. */ -unsigned long int __hurd_sigthread_stack_base; -unsigned long int __hurd_sigthread_stack_end; -unsigned long int *__hurd_sigthread_variables; - -/* Defining these variables here avoids the inclusion of init-first.c. - We need to provide temporary storage for the per-thread variables - of the main user thread here, since it is used for storing the - `errno' variable. Note that this information is lost once we - relocate the dynamic linker. */ -static unsigned long int threadvars[_HURD_THREADVAR_MAX]; -unsigned long int __hurd_threadvar_stack_offset - = (unsigned long int) &threadvars; -unsigned long int __hurd_threadvar_stack_mask; - -#define FMH defined(__i386__) -#if ! FMH -# define fmh() ((void)0) -# define unfmh() ((void)0) -#else -/* XXX loser kludge for vm_map kernel bug */ -#undef ELF_MACHINE_USER_ADDRESS_MASK -#define ELF_MACHINE_USER_ADDRESS_MASK 0 -static vm_address_t fmha; -static vm_size_t fmhs; -static void unfmh(void){ -__vm_deallocate(__mach_task_self(),fmha,fmhs);} -static void fmh(void) { - error_t err;int x;vm_offset_t o;mach_port_t p; - vm_address_t a=0x08000000U,max=VM_MAX_ADDRESS; - while (!(err=__vm_region(__mach_task_self(),&a,&fmhs,&x,&x,&x,&x,&p,&o))){ - __mach_port_deallocate(__mach_task_self(),p); - if (a+fmhs>=0x80000000U){ - max=a; break;} - fmha=a+=fmhs;} - if (err) assert(err==KERN_NO_SPACE); - if (!fmha)fmhs=0;else{ - fmhs=max-fmha; - err = __vm_map (__mach_task_self (), - &fmha, fmhs, 0, 0, MACH_PORT_NULL, 0, 1, - VM_PROT_NONE, VM_PROT_NONE, VM_INHERIT_COPY); - assert_perror(err);} - } -/* XXX loser kludge for vm_map kernel bug */ -#endif - - -ElfW(Addr) -_dl_sysdep_start (void **start_argptr, - void (*dl_main) (const ElfW(Phdr) *phdr, ElfW(Word) phent, - ElfW(Addr) *user_entry, - ElfW(auxv_t) *auxv)) -{ - void go (intptr_t *argdata) - { - char **p; - - /* Cache the information in various global variables. */ - _dl_argc = *argdata; - _dl_argv = 1 + (char **) argdata; - _environ = &_dl_argv[_dl_argc + 1]; - for (p = _environ; *p++;); /* Skip environ pointers and terminator. */ - - if ((void *) p == _dl_argv[0]) - { - static struct hurd_startup_data nodata; - _dl_hurd_data = &nodata; - nodata.user_entry = (vm_address_t) ENTRY_POINT; - } - else - _dl_hurd_data = (void *) p; - - __libc_enable_secure = _dl_hurd_data->flags & EXEC_SECURE; - - __tunables_init (_environ); - - if (_dl_hurd_data->flags & EXEC_STACK_ARGS && - _dl_hurd_data->user_entry == 0) - _dl_hurd_data->user_entry = (vm_address_t) ENTRY_POINT; - -unfmh(); /* XXX */ - -#if 0 /* XXX make this work for real someday... */ - if (_dl_hurd_data->user_entry == (vm_address_t) ENTRY_POINT) - /* We were invoked as a command, not as the program interpreter. - The generic ld.so code supports this: it will parse the args - as "ld.so PROGRAM [ARGS...]". For booting the Hurd, we - support an additional special syntax: - ld.so [-LIBS...] PROGRAM [ARGS...] - Each LIBS word consists of "FILENAME=MEMOBJ"; - for example "-/lib/libc.so=123" says that the contents of - /lib/libc.so are found in a memory object whose port name - in our task is 123. */ - while (_dl_argc > 2 && _dl_argv[1][0] == '-' && _dl_argv[1][1] != '-') - { - char *lastslash, *memobjname, *p; - struct link_map *l; - mach_port_t memobj; - error_t err; - - ++_dl_skip_args; - --_dl_argc; - p = _dl_argv++[1] + 1; - - memobjname = strchr (p, '='); - if (! memobjname) - _dl_sysdep_fatal ("Bogus library spec: ", p, "\n", NULL); - *memobjname++ = '\0'; - memobj = 0; - while (*memobjname != '\0') - memobj = (memobj * 10) + (*memobjname++ - '0'); - - /* Add a user reference on the memory object port, so we will - still have one after _dl_map_object_from_fd calls our - `close'. */ - err = __mach_port_mod_refs (__mach_task_self (), memobj, - MACH_PORT_RIGHT_SEND, +1); - assert_perror (err); - - lastslash = strrchr (p, '/'); - l = _dl_map_object_from_fd (lastslash ? lastslash + 1 : p, NULL, - memobj, strdup (p), 0); - - /* Squirrel away the memory object port where it - can be retrieved by the program later. */ - l->l_info[DT_NULL] = (void *) memobj; - } -#endif - - /* Call elf/rtld.c's main program. It will set everything - up and leave us to transfer control to USER_ENTRY. */ - (*dl_main) ((const ElfW(Phdr) *) _dl_hurd_data->phdr, - _dl_hurd_data->phdrsz / sizeof (ElfW(Phdr)), - &_dl_hurd_data->user_entry, NULL); - - /* The call above might screw a few things up. - - First of all, if _dl_skip_args is nonzero, we are ignoring - the first few arguments. However, if we have no Hurd startup - data, it is the magical convention that ARGV[0] == P. The - startup code in init-first.c will get confused if this is not - the case, so we must rearrange things to make it so. We'll - overwrite the origional ARGV[0] at P with ARGV[_dl_skip_args]. - - Secondly, if we need to be secure, it removes some dangerous - environment variables. If we have no Hurd startup date this - changes P (since that's the location after the terminating - NULL in the list of environment variables). We do the same - thing as in the first case but make sure we recalculate P. - If we do have Hurd startup data, we have to move the data - such that it starts just after the terminating NULL in the - environment list. - - We use memmove, since the locations might overlap. */ - if (__libc_enable_secure || _dl_skip_args) - { - char **newp; - - for (newp = _environ; *newp++;); - - if (_dl_argv[-_dl_skip_args] == (char *) p) - { - if ((char *) newp != _dl_argv[0]) - { - assert ((char *) newp < _dl_argv[0]); - _dl_argv[0] = memmove ((char *) newp, _dl_argv[0], - strlen (_dl_argv[0]) + 1); - } - } - else - { - if ((void *) newp != _dl_hurd_data) - memmove (newp, _dl_hurd_data, sizeof (*_dl_hurd_data)); - } - } - - { - extern void _dl_start_user (void); - /* Unwind the stack to ARGDATA and simulate a return from _dl_start - to the RTLD_START code which will run the user's entry point. */ - RETURN_TO (argdata, &_dl_start_user, _dl_hurd_data->user_entry); - } - } - - /* Set up so we can do RPCs. */ - __mach_init (); - - /* Initialize frequently used global variable. */ - GLRO(dl_pagesize) = __getpagesize (); - -#if HP_TIMING_AVAIL - HP_TIMING_NOW (_dl_cpuclock_offset); -#endif - -fmh(); /* XXX */ - - /* See hurd/hurdstartup.c; this deals with getting information - from the exec server and slicing up the arguments. - Then it will call `go', above. */ - _hurd_startup (start_argptr, &go); - - LOSE; - abort (); -} - -void -internal_function -_dl_sysdep_start_cleanup (void) -{ - /* Deallocate the reply port and task port rights acquired by - __mach_init. We are done with them now, and the user will - reacquire them for himself when he wants them. */ - __mig_dealloc_reply_port (MACH_PORT_NULL); - __mach_port_deallocate (__mach_task_self (), __mach_host_self_); - __mach_port_deallocate (__mach_task_self (), __mach_task_self_); -} - -/* Minimal open/close/mmap implementation sufficient for initial loading of - shared libraries. These are weak definitions so that when the - dynamic linker re-relocates itself to be user-visible (for -ldl), - it will get the user's definition (i.e. usually libc's). */ - -/* Open FILE_NAME and return a Hurd I/O for it in *PORT, or return an - error. If STAT is non-zero, stat the file into that stat buffer. */ -static error_t -open_file (const char *file_name, int flags, - mach_port_t *port, struct stat64 *stat) -{ - enum retry_type doretry; - char retryname[1024]; /* XXX string_t LOSES! */ - file_t startdir; - error_t err; - - error_t use_init_port (int which, error_t (*operate) (file_t)) - { - return (which < _dl_hurd_data->portarraysize - ? ((*operate) (_dl_hurd_data->portarray[which])) - : EGRATUITOUS); - } - file_t get_dtable_port (int fd) - { - if ((unsigned int) fd < _dl_hurd_data->dtablesize - && _dl_hurd_data->dtable[fd] != MACH_PORT_NULL) - { - __mach_port_mod_refs (__mach_task_self (), _dl_hurd_data->dtable[fd], - MACH_PORT_RIGHT_SEND, +1); - return _dl_hurd_data->dtable[fd]; - } - errno = EBADF; - return MACH_PORT_NULL; - } - - assert (!(flags & ~(O_READ | O_CLOEXEC))); - - startdir = _dl_hurd_data->portarray[file_name[0] == '/' ? - INIT_PORT_CRDIR : INIT_PORT_CWDIR]; - - while (file_name[0] == '/') - file_name++; - - err = __dir_lookup (startdir, (char *)file_name, O_RDONLY, 0, - &doretry, retryname, port); - - if (!err) - err = __hurd_file_name_lookup_retry (use_init_port, get_dtable_port, - __dir_lookup, doretry, retryname, - O_RDONLY, 0, port); - if (!err && stat) - { - err = __io_stat (*port, stat); - if (err) - __mach_port_deallocate (__mach_task_self (), *port); - } - - return err; -} - -int weak_function -__open (const char *file_name, int mode, ...) -{ - mach_port_t port; - error_t err = open_file (file_name, mode, &port, 0); - if (err) - return __hurd_fail (err); - else - return (int)port; -} - -int weak_function -__close (int fd) -{ - if (fd != (int) MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), (mach_port_t) fd); - return 0; -} - -__ssize_t weak_function -__libc_read (int fd, void *buf, size_t nbytes) -{ - error_t err; - char *data; - mach_msg_type_number_t nread; - - data = buf; - nread = nbytes; - err = __io_read ((mach_port_t) fd, &data, &nread, -1, nbytes); - if (err) - return __hurd_fail (err); - - if (data != buf) - { - memcpy (buf, data, nread); - __vm_deallocate (__mach_task_self (), (vm_address_t) data, nread); - } - - return nread; -} -libc_hidden_weak (__libc_read) - -__ssize_t weak_function -__libc_write (int fd, const void *buf, size_t nbytes) -{ - error_t err; - mach_msg_type_number_t nwrote; - - assert (fd < _hurd_init_dtablesize); - - err = __io_write (_hurd_init_dtable[fd], buf, nbytes, -1, &nwrote); - if (err) - return __hurd_fail (err); - - return nwrote; -} -libc_hidden_weak (__libc_write) - -/* This is only used for printing messages (see dl-misc.c). */ -__ssize_t weak_function -__writev (int fd, const struct iovec *iov, int niov) -{ - if (fd >= _hurd_init_dtablesize) - { - errno = EBADF; - return -1; - } - - int i; - size_t total = 0; - for (i = 0; i < niov; ++i) - total += iov[i].iov_len; - - if (total != 0) - { - char buf[total], *bufp = buf; - error_t err; - mach_msg_type_number_t nwrote; - - for (i = 0; i < niov; ++i) - bufp = (memcpy (bufp, iov[i].iov_base, iov[i].iov_len) - + iov[i].iov_len); - - err = __io_write (_hurd_init_dtable[fd], buf, total, -1, &nwrote); - if (err) - return __hurd_fail (err); - - return nwrote; - } - return 0; -} - - -off64_t weak_function -__libc_lseek64 (int fd, off64_t offset, int whence) -{ - error_t err; - - err = __io_seek ((mach_port_t) fd, offset, whence, &offset); - if (err) - return __hurd_fail (err); - - return offset; -} - -__ptr_t weak_function -__mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset) -{ - error_t err; - vm_prot_t vmprot; - vm_address_t mapaddr; - mach_port_t memobj_rd, memobj_wr; - - vmprot = VM_PROT_NONE; - if (prot & PROT_READ) - vmprot |= VM_PROT_READ; - if (prot & PROT_WRITE) - vmprot |= VM_PROT_WRITE; - if (prot & PROT_EXEC) - vmprot |= VM_PROT_EXECUTE; - - if (flags & MAP_ANON) - memobj_rd = MACH_PORT_NULL; - else - { - assert (!(flags & MAP_SHARED)); - err = __io_map ((mach_port_t) fd, &memobj_rd, &memobj_wr); - if (err) - return __hurd_fail (err), MAP_FAILED; - if (memobj_wr != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), memobj_wr); - } - - mapaddr = (vm_address_t) addr; - err = __vm_map (__mach_task_self (), - &mapaddr, (vm_size_t) len, ELF_MACHINE_USER_ADDRESS_MASK, - !(flags & MAP_FIXED), - memobj_rd, - (vm_offset_t) offset, - flags & (MAP_COPY|MAP_PRIVATE), - vmprot, VM_PROT_ALL, - (flags & MAP_SHARED) ? VM_INHERIT_SHARE : VM_INHERIT_COPY); - if (err == KERN_NO_SPACE && (flags & MAP_FIXED)) - { - /* XXX this is not atomic as it is in unix! */ - /* The region is already allocated; deallocate it first. */ - err = __vm_deallocate (__mach_task_self (), mapaddr, len); - if (! err) - err = __vm_map (__mach_task_self (), - &mapaddr, (vm_size_t) len, - ELF_MACHINE_USER_ADDRESS_MASK, - !(flags & MAP_FIXED), - memobj_rd, (vm_offset_t) offset, - flags & (MAP_COPY|MAP_PRIVATE), - vmprot, VM_PROT_ALL, - (flags & MAP_SHARED) - ? VM_INHERIT_SHARE : VM_INHERIT_COPY); - } - - if ((flags & MAP_ANON) == 0) - __mach_port_deallocate (__mach_task_self (), memobj_rd); - - if (err) - return __hurd_fail (err), MAP_FAILED; - return (__ptr_t) mapaddr; -} - -int weak_function -__fxstat64 (int vers, int fd, struct stat64 *buf) -{ - error_t err; - - assert (vers == _STAT_VER); - - err = __io_stat ((mach_port_t) fd, buf); - if (err) - return __hurd_fail (err); - - return 0; -} -libc_hidden_def (__fxstat64) - -int weak_function -__xstat64 (int vers, const char *file, struct stat64 *buf) -{ - error_t err; - mach_port_t port; - - assert (vers == _STAT_VER); - - err = open_file (file, 0, &port, buf); - if (err) - return __hurd_fail (err); - - __mach_port_deallocate (__mach_task_self (), port); - - return 0; -} -libc_hidden_def (__xstat64) - -/* This function is called by the dynamic linker (rtld.c) to check - whether debugging malloc is allowed even for SUID binaries. This - stub will always fail, which means that malloc-debugging is always - disabled for SUID binaries. */ -int weak_function -__access (const char *file, int type) -{ - errno = ENOSYS; - return -1; -} - -pid_t weak_function -__getpid (void) -{ - pid_t pid, ppid; - int orphaned; - - if (__proc_getpids (_dl_hurd_data->portarray[INIT_PORT_PROC], - &pid, &ppid, &orphaned)) - return -1; - - return pid; -} - -/* This is called only in some strange cases trying to guess a value - for $ORIGIN for the executable. The dynamic linker copes with - getcwd failing (dl-object.c), and it's too much hassle to include - the functionality here. (We could, it just requires duplicating or - reusing getcwd.c's code but using our special lookup function as in - `open', above.) */ -char * -weak_function -__getcwd (char *buf, size_t size) -{ - errno = ENOSYS; - return NULL; -} - -void weak_function attribute_hidden -_exit (int status) -{ - __proc_mark_exit (_dl_hurd_data->portarray[INIT_PORT_PROC], - W_EXITCODE (status, 0), 0); - while (__task_terminate (__mach_task_self ())) - __mach_task_self_ = (__mach_task_self) (); -} -/* We need this alias to satisfy references from libc_pic.a objects - that were affected by the libc_hidden_proto declaration for _exit. */ -strong_alias (_exit, __GI__exit) - -/* Try to get a machine dependent instruction which will make the - program crash. This is used in case everything else fails. */ -#include -#ifndef ABORT_INSTRUCTION -/* No such instruction is available. */ -# define ABORT_INSTRUCTION -#endif - -void weak_function -abort (void) -{ - /* Try to abort using the system specific command. */ - ABORT_INSTRUCTION; - - /* If the abort instruction failed, exit. */ - _exit (127); - - /* If even this fails, make sure we never return. */ - while (1) - /* Try for ever and ever. */ - ABORT_INSTRUCTION; -} - -/* We need this alias to satisfy references from libc_pic.a objects - that were affected by the libc_hidden_proto declaration for abort. */ -strong_alias (abort, __GI_abort) - -/* This function is called by interruptible RPC stubs. For initial - dynamic linking, just use the normal mach_msg. Since this defn is - weak, the real defn in libc.so will override it if we are linked into - the user program (-ldl). */ - -error_t weak_function -_hurd_intr_rpc_mach_msg (mach_msg_header_t *msg, - mach_msg_option_t option, - mach_msg_size_t send_size, - mach_msg_size_t rcv_size, - mach_port_t rcv_name, - mach_msg_timeout_t timeout, - mach_port_t notify) -{ - return __mach_msg (msg, option, send_size, rcv_size, rcv_name, - timeout, notify); -} - - -void -internal_function -_dl_show_auxv (void) -{ - /* There is nothing to print. Hurd has no auxiliary vector. */ -} - - -void weak_function -_dl_init_first (int argc, ...) -{ - /* This no-op definition only gets used if libc is not linked in. */ -} - -#endif /* SHARED */ diff --git a/sysdeps/mach/hurd/dl-sysdep.h b/sysdeps/mach/hurd/dl-sysdep.h deleted file mode 100644 index 83c4e12fee..0000000000 --- a/sysdeps/mach/hurd/dl-sysdep.h +++ /dev/null @@ -1,31 +0,0 @@ -/* System-specific settings for dynamic linker code. Hurd version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The private errno doesn't make sense on the Hurd. errno is always the - thread-local slot shared with libc, and it matters to share the cell - with libc because after startup we use libc functions that set errno - (open, mmap, etc). */ - -#define RTLD_PRIVATE_ERRNO 0 - -#ifdef SHARED -/* _dl_argv and __libc_stack_end cannot be attribute_relro, because the stack-switching - libc initializer for using cthreads might write into it. */ -# define DL_ARGV_NOT_RELRO 1 -# define LIBC_STACK_END_NOT_RELRO 1 -#endif diff --git a/sysdeps/mach/hurd/dl-unistd.h b/sysdeps/mach/hurd/dl-unistd.h deleted file mode 100644 index 2bb73efae7..0000000000 --- a/sysdeps/mach/hurd/dl-unistd.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Functions with hidden attribute internal to ld.so, which are declared - in include/unistd.h. Hurd version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* __close, __getcwd, __getpid, __libc_read and __libc_write can't be - hidden in ld.so on Hurd since they will be preempted by the ones in - libc.so after bootstrap. */ -extern __typeof (__access) __access attribute_hidden; -extern __typeof (__brk) __brk attribute_hidden; -extern __typeof (__lseek) __lseek attribute_hidden; -extern __typeof (__profil) __profil attribute_hidden; -extern __typeof (__read) __read attribute_hidden; -extern __typeof (__sbrk) __sbrk attribute_hidden; diff --git a/sysdeps/mach/hurd/dup2.c b/sysdeps/mach/hurd/dup2.c deleted file mode 100644 index fb8498876d..0000000000 --- a/sysdeps/mach/hurd/dup2.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Duplicate FD to FD2, closing the old FD2 and making FD2 be - open on the same file as FD is. Return FD2 or -1. */ -int -__dup2 (int fd, int fd2) -{ - int flags = 0; - - if (fd2 == fd) - /* See the comment in dup3. */ - flags = -1; - - return __dup3 (fd, fd2, flags); -} -libc_hidden_def (__dup2) -weak_alias (__dup2, dup2) diff --git a/sysdeps/mach/hurd/dup3.c b/sysdeps/mach/hurd/dup3.c deleted file mode 100644 index 3ad325e49f..0000000000 --- a/sysdeps/mach/hurd/dup3.c +++ /dev/null @@ -1,139 +0,0 @@ -/* Duplicate a file descriptor to a given number, with flags. Hurd version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include - -/* Duplicate FD to FD2, closing the old FD2 and making FD2 be - open on the same file as FD is, and setting FD2's flags according to FLAGS. - Return FD2 or -1. */ -int -__dup3 (int fd, int fd2, int flags) -{ - struct hurd_fd *d; - - /* Both passing flags different from O_CLOEXEC and FD2 being the same as FD - are invalid. */ - if ((flags & ~O_CLOEXEC - || fd2 == fd) - /* ... with the exception in case that dup2 behavior is requested: if FD - is valid and FD2 is already the same then just return it. */ - && ! (flags == -1 - && fd2 == fd)) - return __hurd_fail (EINVAL); - - /* Extract the ports and flags from FD. */ - d = _hurd_fd_get (fd); - if (d == NULL) - return __hurd_fail (EBADF); - - HURD_CRITICAL_BEGIN; - - __spin_lock (&d->port.lock); - if (d->port.port == MACH_PORT_NULL) - { - __spin_unlock (&d->port.lock); - fd2 = __hurd_fail (EBADF); - } - else if (fd2 == fd) - __spin_unlock (&d->port.lock); - else - { - struct hurd_userlink ulink, ctty_ulink; - int d_flags = d->flags; - io_t ctty = _hurd_port_get (&d->ctty, &ctty_ulink); - io_t port = _hurd_port_locked_get (&d->port, &ulink); /* Unlocks D. */ - - if (fd2 < 0) - fd2 = __hurd_fail (EBADF); - else - { - /* Get a hold of the destination descriptor. */ - struct hurd_fd *d2; - - __mutex_lock (&_hurd_dtable_lock); - - if (fd2 >= _hurd_dtablesize) - { - /* The table is not large enough to hold the destination - descriptor. Enlarge it as necessary to allocate this - descriptor. */ - __mutex_unlock (&_hurd_dtable_lock); - d2 = _hurd_alloc_fd (NULL, fd2); - if (d2) - __spin_unlock (&d2->port.lock); - __mutex_lock (&_hurd_dtable_lock); - } - else - { - d2 = _hurd_dtable[fd2]; - if (d2 == NULL) - { - /* Must allocate a new one. We don't initialize the port - cells with this call so that if it fails (out of - memory), we will not have already added user - references for the ports, which we would then have to - deallocate. */ - d2 = _hurd_dtable[fd2] = _hurd_new_fd (MACH_PORT_NULL, - MACH_PORT_NULL); - } - } - __mutex_unlock (&_hurd_dtable_lock); - - if (d2 == NULL) - { - fd2 = -1; - if (errno == EINVAL) - errno = EBADF; /* POSIX.1-1990 6.2.1.2 ll 54-55. */ - } - else - { - /* Give the ports each a user ref for the new descriptor. */ - __mach_port_mod_refs (__mach_task_self (), port, - MACH_PORT_RIGHT_SEND, 1); - if (ctty != MACH_PORT_NULL) - __mach_port_mod_refs (__mach_task_self (), ctty, - MACH_PORT_RIGHT_SEND, 1); - - /* Install the ports and flags in the new descriptor slot. */ - __spin_lock (&d2->port.lock); - if (flags & O_CLOEXEC) - d2->flags = d_flags | FD_CLOEXEC; - else - /* dup clears FD_CLOEXEC. */ - d2->flags = d_flags & ~FD_CLOEXEC; - _hurd_port_set (&d2->ctty, ctty); - _hurd_port_locked_set (&d2->port, port); /* Unlocks D2. */ - } - } - - _hurd_port_free (&d->port, &ulink, port); - if (ctty != MACH_PORT_NULL) - _hurd_port_free (&d->ctty, &ctty_ulink, port); - } - - HURD_CRITICAL_END; - - return fd2; -} -libc_hidden_def (__dup3) -weak_alias (__dup3, dup3) diff --git a/sysdeps/mach/hurd/eloop-threshold.h b/sysdeps/mach/hurd/eloop-threshold.h deleted file mode 100644 index 58f05616e1..0000000000 --- a/sysdeps/mach/hurd/eloop-threshold.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Threshold at which to diagnose ELOOP. Hurd version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _ELOOP_THRESHOLD_H -#define _ELOOP_THRESHOLD_H 1 - -/* Return the maximum number of symlink traversals to permit - before diagnosing ELOOP. - - In the Hurd version, here we are actually setting the only policy - there is on the system. We use a literal number here rather than - defining SYMLOOP_MAX so that programs don't compile in a number - but instead use sysconf and the number can be changed here to - affect sysconf's result. */ - -static inline unsigned int __attribute__ ((const)) -__eloop_threshold (void) -{ - return 32; -} - -#endif /* eloop-threshold.h */ diff --git a/sysdeps/mach/hurd/enbl-secure.c b/sysdeps/mach/hurd/enbl-secure.c deleted file mode 100644 index 9aeb0fafa6..0000000000 --- a/sysdeps/mach/hurd/enbl-secure.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Define and initialize the `__libc_enable_secure' flag. Hurd version. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* There is no need for this file in the Hurd; it is just a placeholder - to prevent inclusion of the sysdeps/generic version. - In the shared library, the `__libc_enable_secure' variable is defined - by the dynamic linker in dl-sysdep.c and set there. - In the static library, it is defined in init-first.c and set there. */ diff --git a/sysdeps/mach/hurd/err_hurd.sub b/sysdeps/mach/hurd/err_hurd.sub deleted file mode 100644 index 4a4dee3aa3..0000000000 --- a/sysdeps/mach/hurd/err_hurd.sub +++ /dev/null @@ -1,12 +0,0 @@ -/* This file defines the Mach error system for Hurd server errors. */ - -#include - -extern const char *const _hurd_errlist[]; - -/* Omit `const' because we are included with `static' - defined to `static const'. */ -static struct error_subsystem err_hurd_sub[] = - { - { "(os/hurd)", _HURD_ERRNOS, (const char *const *) _hurd_errlist }, - }; diff --git a/sysdeps/mach/hurd/errlist.c b/sysdeps/mach/hurd/errlist.c deleted file mode 100644 index 6815f3d83d..0000000000 --- a/sysdeps/mach/hurd/errlist.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* sys_errlist cannot have Unix semantics on the Hurd, so it is easier just - to rename it. We also need to remap error codes to array indices by - taking their subcode. */ -#define _sys_errlist_internal _hurd_errlist -#define _sys_nerr_internal _hurd_nerr -#define ERRLIST_NO_COMPAT 1 - -#include -#define ERR_REMAP(n) (err_get_code (n)) - -#include diff --git a/sysdeps/mach/hurd/errno-loc.c b/sysdeps/mach/hurd/errno-loc.c deleted file mode 100644 index 039c9fc748..0000000000 --- a/sysdeps/mach/hurd/errno-loc.c +++ /dev/null @@ -1,28 +0,0 @@ -/* __errno_location -- helper function for locating per-thread errno value - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int * -__errno_location (void) -{ - return (int *) __hurd_threadvar_location (_HURD_THREADVAR_ERRNO); -} -strong_alias (__errno_location, __hurd_errno_location) -libc_hidden_def (__errno_location) diff --git a/sysdeps/mach/hurd/errno.c b/sysdeps/mach/hurd/errno.c deleted file mode 100644 index a29091b5e2..0000000000 --- a/sysdeps/mach/hurd/errno.c +++ /dev/null @@ -1 +0,0 @@ -/* No definition of `errno' variable on the Hurd. */ diff --git a/sysdeps/mach/hurd/errnos.awk b/sysdeps/mach/hurd/errnos.awk deleted file mode 100644 index 1cd2a0ac96..0000000000 --- a/sysdeps/mach/hurd/errnos.awk +++ /dev/null @@ -1,165 +0,0 @@ -# Copyright (C) 1991-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -# errno.texinfo contains lines like: -# @errno{ENOSYS, 123, Function not implemented} - -BEGIN { - print "/* This file generated by errnos.awk. */"; - print ""; - print "/* The Hurd uses Mach error system 0x10, currently only subsystem 0. */"; - print "#ifndef _HURD_ERRNO"; - print "#define _HURD_ERRNO(n)\t((0x10 << 26) | ((n) & 0x3fff))"; - print "#endif"; - print ""; - print "#ifdef _ERRNO_H\n"; - print "enum __error_t_codes\n{"; - print "\t/* The value zero always means success and it is perfectly fine for"; - print "\t code to use 0 explicitly (or implicitly, e.g. via Boolean coercion)."; - print "\t Having an enum entry for zero both makes the debugger print the name"; - print "\t for error_t-typed zero values, and prevents the compiler from"; - print "\t issuing warnings about 'case 0:' in a switch on an error_t-typed"; - print "\t value. */"; - print "\tESUCCESS = 0," - print ""; - maxerrno = 0; - in_mach_errors = ""; - in_math = 0; - edom = erange = ""; - print "#undef EDOM\n#undef ERANGE"; - lno = 0; - } - -/^@errno\{/ \ - { - etext = ""; - for (i = 3; i <= NF; ++i) - etext = etext " " $i; - etext = substr(etext, 1, length(etext)-1) - - e = substr($1, 8, length($1)-8) - if (e == "EWOULDBLOCK") - { - lines[lno++]="#define EWOULDBLOCK EAGAIN /* Operation would block */"; - next; - } - - errno = substr($2, 1, length($2)-1) + 0 - if (errno == 0) - next; - if (errno > maxerrno) maxerrno = errno; - x = sprintf ("%-40s/*%s */", sprintf ("%-24s%s", "#define\t" e, - "_HURD_ERRNO (" errno ")"), - etext); - if (e == "EDOM") - edom = x; - else if (e == "ERANGE") - erange = x; - comma[lno] = 1; - lines[lno++] = sprintf("\t%-16s= _HURD_ERRNO (%d)", e, errno); - lines[lno++] = x; - next; - } - -NF == 3 && $1 == "#define" && $2 == "MACH_SEND_IN_PROGRESS" \ - { - in_mach_errors = FILENAME; - lines[lno++] = "\n\t/* Errors from . */"; - } -NF == 3 && $1 == "#define" && $2 == "KERN_SUCCESS" \ - { - in_mach_errors = FILENAME; - lines[lno++] = "\n\t/* Errors from . */"; - next; - } - -in_mach_errors != "" && $2 == "MACH_IPC_COMPAT" \ - { - in_mach_errors = ""; - } - -in_mach_errors == FILENAME && NF == 3 && $1 == "#define" \ - { - comma[lno] = 1; - lines[lno++] = sprintf("\t%-32s= %s", "E" $2, $3); - } - -$1 == "#define" && $2 == "_MACH_MIG_ERRORS_H_" \ - { - in_mig_errors = 1; - lines[lno++] = "\n\t/* Errors from . */"; - next; - } -in_mig_errors && $1 == "#endif" && $3 == "_MACH_MIG_ERRORS_H_" \ - { - in_mig_errors = 0; - } - -(in_mig_errors && $1 == "#define" && $3 <= -300) || \ -(in_device_errors && $1 == "#define" && /D_/ && NF > 3) \ - { - comment = ""; - for (i = 4; i <= NF; ++i) - comment = comment " " $i; - comma[lno] = 1; - lines[lno++] = sprintf("%-32s", sprintf ("\t%-24s= %s", "E" $2, $3)) comment; - } - -$1 == "#define" && $2 == "D_SUCCESS" \ - { - in_device_errors = 1; - lines[lno++] = "\n\t/* Errors from . */"; - next; - } -in_device_errors && $1 == "#endif" \ - { - in_device_errors = 0; - } - - -END \ - { - for (i = 0; i < lno - 1; ++i) - printf "%s%s\n", lines[i], (comma[i] ? "," : ""); - print lines[i]; - print ""; - print "};"; - print ""; - printf "#define\t_HURD_ERRNOS\t%d\n", maxerrno+1; - print ""; - print "\ -/* User-visible type of error codes. It is ok to use `int' or\n\ - `kern_return_t' for these, but with `error_t' the debugger prints\n\ - symbolic values. */"; - print "#ifdef __USE_GNU"; - print "typedef enum __error_t_codes error_t;" - print "#define __error_t_defined\t1" - print "#endif"; - print ""; - print "\ -/* Return the current thread's location for `errno'.\n\ - The syntax of this function allows redeclarations like `int errno'. */\n\ -extern int *__errno_location (void) __THROW __attribute__ ((__const__));\n\ -\n\ -#define errno (*__errno_location ())\n\ -"; - print "#endif /* included. */"; - print ""; - print "#if !defined (_ERRNO_H) && defined (__need_Emath)"; - print edom; print erange; - print "#endif /* not included and need math error codes. */"; - } diff --git a/sysdeps/mach/hurd/euidaccess.c b/sysdeps/mach/hurd/euidaccess.c deleted file mode 100644 index d2926d5dae..0000000000 --- a/sysdeps/mach/hurd/euidaccess.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Test for access to FILE using effective UID and GID. Hurd version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -int -__euidaccess (const char *file, int type) -{ - error_t err; - file_t port; - int allowed, flags; - - port = __file_name_lookup (file, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - - /* Find out what types of access we are allowed to this file. */ - err = __file_check_access (port, &allowed); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err); - - flags = 0; - if (type & R_OK) - flags |= O_READ; - if (type & W_OK) - flags |= O_WRITE; - if (type & X_OK) - flags |= O_EXEC; - - if (flags & ~allowed) - /* We are not allowed all the requested types of access. */ - return __hurd_fail (EACCES); - - return 0; -} -weak_alias (__euidaccess, euidaccess) -weak_alias (__euidaccess, eaccess) diff --git a/sysdeps/mach/hurd/execve.c b/sysdeps/mach/hurd/execve.c deleted file mode 100644 index 08d9322354..0000000000 --- a/sysdeps/mach/hurd/execve.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Replace the current process, executing FILE_NAME with arguments ARGV and - environment ENVP. ARGV and ENVP are terminated by NULL pointers. */ -int -__execve (const char *file_name, char *const argv[], char *const envp[]) -{ - error_t err; - file_t file = __file_name_lookup (file_name, O_EXEC, 0); - - if (file == MACH_PORT_NULL) - return -1; - - /* Hopefully this will not return. */ - err = _hurd_exec (__mach_task_self (), file, argv, envp); - - /* Oh well. Might as well be tidy. */ - __mach_port_deallocate (__mach_task_self (), file); - - return __hurd_fail (err); -} - -weak_alias (__execve, execve) diff --git a/sysdeps/mach/hurd/faccessat.c b/sysdeps/mach/hurd/faccessat.c deleted file mode 100644 index d55bc5027b..0000000000 --- a/sysdeps/mach/hurd/faccessat.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Test for access to file, relative to open directory. Hurd version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -int -faccessat (int fd, const char *file, int type, int flag) -{ - error_t err; - file_t port; - int allowed, flags; - - if ((flag & AT_EACCESS) == 0) - { - if (fd == AT_FDCWD || file[0] == '/') - return __access (file, type); - __set_errno (ENOTSUP); /* XXX later */ - return -1; - } - - port = __file_name_lookup_at (fd, flag &~ AT_EACCESS, file, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - - /* Find out what types of access we are allowed to this file. */ - err = __file_check_access (port, &allowed); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err); - - flags = 0; - if (type & R_OK) - flags |= O_READ; - if (type & W_OK) - flags |= O_WRITE; - if (type & X_OK) - flags |= O_EXEC; - - if (flags & ~allowed) - /* We are not allowed all the requested types of access. */ - return __hurd_fail (EACCES); - - return 0; -} diff --git a/sysdeps/mach/hurd/fchdir.c b/sysdeps/mach/hurd/fchdir.c deleted file mode 100644 index 6e6063f853..0000000000 --- a/sysdeps/mach/hurd/fchdir.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Change the current directory to FD. */ - -int -__fchdir (int fd) -{ - return _hurd_change_directory_port_from_fd (&_hurd_ports[INIT_PORT_CWDIR], - fd); -} -weak_alias (__fchdir, fchdir) diff --git a/sysdeps/mach/hurd/fchflags.c b/sysdeps/mach/hurd/fchflags.c deleted file mode 100644 index bf565030c4..0000000000 --- a/sysdeps/mach/hurd/fchflags.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Change the flags of the file referenced by FD to FLAGS. */ - -/* XXX should be __fchflags? */ -int -fchflags (int fd, unsigned long int flags) -{ - error_t err; - - if (err = HURD_DPORT_USE (fd, __file_chflags (port, flags))) - return __hurd_dfail (fd, err); - - return 0; -} diff --git a/sysdeps/mach/hurd/fchmod.c b/sysdeps/mach/hurd/fchmod.c deleted file mode 100644 index 767ad4e5a8..0000000000 --- a/sysdeps/mach/hurd/fchmod.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Change the permissions of the file referenced by FD to MODE. */ -int -__fchmod (int fd, mode_t mode) -{ - error_t err; - - if (err = HURD_DPORT_USE (fd, __file_chmod (port, mode))) - return __hurd_dfail (fd, err); - - return 0; -} - -weak_alias (__fchmod, fchmod) diff --git a/sysdeps/mach/hurd/fchmodat.c b/sysdeps/mach/hurd/fchmodat.c deleted file mode 100644 index 8581127a7e..0000000000 --- a/sysdeps/mach/hurd/fchmodat.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Change the protections of file relative to open directory. Hurd version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -int -fchmodat (int fd, const char *file, mode_t mode, int flag) -{ - error_t err; - file_t port = __file_name_lookup_at (fd, flag, file, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - err = __file_chmod (port, mode); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err); - return 0; -} diff --git a/sysdeps/mach/hurd/fchown.c b/sysdeps/mach/hurd/fchown.c deleted file mode 100644 index cd4738bdc1..0000000000 --- a/sysdeps/mach/hurd/fchown.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Change the owner and group of the file referred to by FD. */ -int -__fchown (int fd, uid_t owner, gid_t group) -{ - error_t err; - - if (err = HURD_DPORT_USE (fd, __file_chown (port, owner, group))) - return __hurd_dfail (fd, err); - - return 0; -} - -weak_alias (__fchown, fchown) diff --git a/sysdeps/mach/hurd/fchownat.c b/sysdeps/mach/hurd/fchownat.c deleted file mode 100644 index bdfb468f50..0000000000 --- a/sysdeps/mach/hurd/fchownat.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Change owner and group of a file relative to open directory. Hurd version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -/* Change the owner and group of FILE. */ -int -fchownat (int fd, const char *file, uid_t owner, gid_t group, int flag) -{ - error_t err; - file_t port = __file_name_lookup_at (fd, flag, file, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - err = __file_chown (port, owner, group); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err); - return 0; -} diff --git a/sysdeps/mach/hurd/fcntl.c b/sysdeps/mach/hurd/fcntl.c deleted file mode 100644 index 174e408edc..0000000000 --- a/sysdeps/mach/hurd/fcntl.c +++ /dev/null @@ -1,212 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include /* XXX for LOCK_* */ - -/* Perform file control operations on FD. */ -int -__libc_fcntl (int fd, int cmd, ...) -{ - va_list ap; - struct hurd_fd *d; - int result; - - d = _hurd_fd_get (fd); - - if (d == NULL) - return __hurd_fail (EBADF); - - va_start (ap, cmd); - - switch (cmd) - { - error_t err; - - default: /* Bad command. */ - errno = EINVAL; - result = -1; - break; - - /* First the descriptor-based commands, which do no RPCs. */ - - case F_DUPFD: /* Duplicate the file descriptor. */ - case F_DUPFD_CLOEXEC: - { - struct hurd_fd *new; - io_t port, ctty; - struct hurd_userlink ulink, ctty_ulink; - int flags; - - HURD_CRITICAL_BEGIN; - - /* Extract the ports and flags from the file descriptor. */ - __spin_lock (&d->port.lock); - flags = d->flags; - ctty = _hurd_port_get (&d->ctty, &ctty_ulink); - port = _hurd_port_locked_get (&d->port, &ulink); /* Unlocks D. */ - - if (cmd == F_DUPFD_CLOEXEC) - flags |= FD_CLOEXEC; - else - /* Duplication clears the FD_CLOEXEC flag. */ - flags &= ~FD_CLOEXEC; - - /* Get a new file descriptor. The third argument to __fcntl is the - minimum file descriptor number for it. */ - new = _hurd_alloc_fd (&result, va_arg (ap, int)); - if (new == NULL) - /* _hurd_alloc_fd has set errno. */ - result = -1; - else - { - /* Give the ports each a user ref for the new descriptor. */ - __mach_port_mod_refs (__mach_task_self (), port, - MACH_PORT_RIGHT_SEND, 1); - if (ctty != MACH_PORT_NULL) - __mach_port_mod_refs (__mach_task_self (), ctty, - MACH_PORT_RIGHT_SEND, 1); - - /* Install the ports and flags in the new descriptor. */ - if (ctty != MACH_PORT_NULL) - _hurd_port_set (&new->ctty, ctty); - new->flags = flags; - _hurd_port_locked_set (&new->port, port); /* Unlocks NEW. */ - } - - HURD_CRITICAL_END; - - _hurd_port_free (&d->port, &ulink, port); - if (ctty != MACH_PORT_NULL) - _hurd_port_free (&d->ctty, &ctty_ulink, port); - - break; - } - - /* Set RESULT by evaluating EXPR with the descriptor locked. - Check for an empty descriptor and return EBADF. */ -#define LOCKED(expr) \ - HURD_CRITICAL_BEGIN; \ - __spin_lock (&d->port.lock); \ - if (d->port.port == MACH_PORT_NULL) \ - result = __hurd_fail (EBADF); \ - else \ - result = (expr); \ - __spin_unlock (&d->port.lock); \ - HURD_CRITICAL_END; - - case F_GETFD: /* Get descriptor flags. */ - LOCKED (d->flags); - break; - - case F_SETFD: /* Set descriptor flags. */ - LOCKED ((d->flags = va_arg (ap, int), 0)); - break; - - - /* Now the real io operations, done by RPCs to io servers. */ - - case F_GETLK: - case F_SETLK: - case F_SETLKW: - { - /* XXX - We need new RPCs to support POSIX.1 fcntl file locking!! - For the time being we support the whole-file case only, - with all kinds of WRONG WRONG WRONG semantics, - by using flock. This is definitely the Wrong Thing, - but it might be better than nothing (?). */ - struct flock *fl = va_arg (ap, struct flock *); - va_end (ap); - switch (cmd) - { - case F_GETLK: - errno = ENOSYS; - return -1; - case F_SETLK: - cmd = LOCK_NB; - break; - default: - cmd = 0; - break; - } - switch (fl->l_type) - { - case F_RDLCK: cmd |= LOCK_SH; break; - case F_WRLCK: cmd |= LOCK_EX; break; - case F_UNLCK: cmd |= LOCK_UN; break; - default: - errno = EINVAL; - return -1; - } - switch (fl->l_whence) - { - case SEEK_SET: - if (fl->l_start == 0 && fl->l_len == 0) /* Whole file request. */ - break; - /* It seems to be common for applications to lock the first - byte of the file when they are really doing whole-file locking. - So, since it's so wrong already, might as well do that too. */ - if (fl->l_start == 0 && fl->l_len == 1) - break; - /* FALLTHROUGH */ - case SEEK_CUR: - case SEEK_END: - errno = ENOTSUP; - return -1; - default: - errno = EINVAL; - return -1; - } - - return __flock (fd, cmd); - } - - case F_GETFL: /* Get per-open flags. */ - if (err = HURD_FD_PORT_USE (d, __io_get_openmodes (port, &result))) - result = __hurd_dfail (fd, err); - break; - - case F_SETFL: /* Set per-open flags. */ - err = HURD_FD_PORT_USE (d, __io_set_all_openmodes (port, - va_arg (ap, int))); - result = err ? __hurd_dfail (fd, err) : 0; - break; - - case F_GETOWN: /* Get owner. */ - if (err = HURD_FD_PORT_USE (d, __io_get_owner (port, &result))) - result = __hurd_dfail (fd, err); - break; - - case F_SETOWN: /* Set owner. */ - err = HURD_FD_PORT_USE (d, __io_mod_owner (port, va_arg (ap, pid_t))); - result = err ? __hurd_dfail (fd, err) : 0; - break; - } - - va_end (ap); - - return result; -} -libc_hidden_def (__libc_fcntl) -weak_alias (__libc_fcntl, __fcntl) -libc_hidden_weak (__fcntl) -weak_alias (__libc_fcntl, fcntl) diff --git a/sysdeps/mach/hurd/fdatasync.c b/sysdeps/mach/hurd/fdatasync.c deleted file mode 100644 index 379f8b6f9e..0000000000 --- a/sysdeps/mach/hurd/fdatasync.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Make all changes done to FD's file data actually appear on disk. */ -int -fdatasync (int fd) -{ - error_t err = HURD_DPORT_USE (fd, __file_sync (port, 1, 1)); - if (err) - { - if (err == EOPNOTSUPP) - /* If the file descriptor does not support sync, return EINVAL - as POSIX specifies. */ - err = EINVAL; - return __hurd_dfail (fd, err); - } - return 0; -} diff --git a/sysdeps/mach/hurd/fdopendir.c b/sysdeps/mach/hurd/fdopendir.c deleted file mode 100644 index 676182fe9f..0000000000 --- a/sysdeps/mach/hurd/fdopendir.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Open a directory stream from a file descriptor. Hurd version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -DIR *_hurd_fd_opendir (struct hurd_fd *d); /* opendir.c */ - -/* Open a directory stream on FD. */ -DIR * -__fdopendir (int fd) -{ - struct hurd_fd *d = _hurd_fd_get (fd); - - if (d == NULL) - { - errno = EBADF; - return NULL; - } - - /* Ensure that it's a directory. */ - error_t err = HURD_FD_PORT_USE - (d, ({ - file_t dir = __file_name_lookup_under (port, "/", - O_DIRECTORY | O_NOTRANS, 0);; - if (dir != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), dir); - dir != MACH_PORT_NULL ? 0 : errno; - })); - - if (err) - { - errno = err; - return NULL; - } - - return _hurd_fd_opendir (d); -} -weak_alias (__fdopendir, fdopendir) diff --git a/sysdeps/mach/hurd/fexecve.c b/sysdeps/mach/hurd/fexecve.c deleted file mode 100644 index 93a8f36e97..0000000000 --- a/sysdeps/mach/hurd/fexecve.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Execute the file FD refers to, overlaying the running program image. */ - -int -fexecve (int fd, char *const argv[], char *const envp[]) -{ - error_t err = HURD_DPORT_USE (fd, _hurd_exec (__mach_task_self (), port, - argv, envp)); - if (! err) - err = EGRATUITOUS; - return __hurd_fail (err); -} diff --git a/sysdeps/mach/hurd/fgetxattr.c b/sysdeps/mach/hurd/fgetxattr.c deleted file mode 100644 index b0c051285a..0000000000 --- a/sysdeps/mach/hurd/fgetxattr.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Access to extended attributes on files. Hurd version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -ssize_t -fgetxattr (int fd, const char *name, void *value, size_t size) -{ - error_t err; - - err = HURD_DPORT_USE (fd, _hurd_xattr_get (port, name, value, &size)); - - return err ? __hurd_dfail (fd, err) : size; -} diff --git a/sysdeps/mach/hurd/flistxattr.c b/sysdeps/mach/hurd/flistxattr.c deleted file mode 100644 index 58a3514dcc..0000000000 --- a/sysdeps/mach/hurd/flistxattr.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Access to extended attributes on files. Hurd version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -ssize_t -flistxattr (int fd, char *list, size_t size) -{ - error_t err; - - err = HURD_DPORT_USE (fd, _hurd_xattr_list (port, list, &size)); - - return err ? __hurd_dfail (fd, err) : size; -} diff --git a/sysdeps/mach/hurd/flock.c b/sysdeps/mach/hurd/flock.c deleted file mode 100644 index 4aed048eb0..0000000000 --- a/sysdeps/mach/hurd/flock.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Apply or remove an advisory lock, according to OPERATION, - on the file FD refers to. */ -int -__flock (int fd, int operation) -{ - error_t err; - - if (err = HURD_DPORT_USE (fd, __file_lock (port, operation))) - return __hurd_dfail (fd, err); - - return 0; -} - -weak_alias (__flock, flock) diff --git a/sysdeps/mach/hurd/fork.c b/sysdeps/mach/hurd/fork.c deleted file mode 100644 index 582273ee14..0000000000 --- a/sysdeps/mach/hurd/fork.c +++ /dev/null @@ -1,733 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include /* For stack growth direction. */ -#include "set-hooks.h" -#include -#include "hurdmalloc.h" /* XXX */ -#include -#include - -#undef __fork - - -/* Things that want to be locked while forking. */ -symbol_set_declare (_hurd_fork_locks) - - -/* Application callbacks registered through pthread_atfork. */ -DEFINE_HOOK (_hurd_atfork_prepare_hook, (void)); -DEFINE_HOOK (_hurd_atfork_child_hook, (void)); -DEFINE_HOOK (_hurd_atfork_parent_hook, (void)); - -/* Things that want to be called before we fork, to prepare the parent for - task_create, when the new child task will inherit our address space. */ -DEFINE_HOOK (_hurd_fork_prepare_hook, (void)); - -/* Things that want to be called when we are forking, with the above all - locked. They are passed the task port of the child. The child process - is all set up except for doing proc_child, and has no threads yet. */ -DEFINE_HOOK (_hurd_fork_setup_hook, (void)); - -/* Things to be run in the child fork. */ -DEFINE_HOOK (_hurd_fork_child_hook, (void)); - -/* Things to be run in the parent fork. */ -DEFINE_HOOK (_hurd_fork_parent_hook, (void)); - - -/* Clone the calling process, creating an exact copy. - Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ -pid_t -__fork (void) -{ - jmp_buf env; - pid_t pid; - size_t i; - error_t err; - struct hurd_sigstate *volatile ss; - - RUN_HOOK (_hurd_atfork_prepare_hook, ()); - - ss = _hurd_self_sigstate (); - __spin_lock (&ss->critical_section_lock); - -#undef LOSE -#define LOSE do { assert_perror (err); goto lose; } while (0) /* XXX */ - - if (! setjmp (env)) - { - process_t newproc; - task_t newtask; - thread_t thread, sigthread; - mach_port_urefs_t thread_refs, sigthread_refs; - struct machine_thread_state state; - mach_msg_type_number_t statecount; - mach_port_t *portnames = NULL; - mach_msg_type_number_t nportnames = 0; - mach_port_type_t *porttypes = NULL; - mach_msg_type_number_t nporttypes = 0; - thread_t *threads = NULL; - mach_msg_type_number_t nthreads = 0; - int ports_locked = 0, stopped = 0; - - void resume_threads (void) - { - if (! stopped) - return; - - assert (threads); - - for (i = 0; i < nthreads; ++i) - if (threads[i] != ss->thread) - __thread_resume (threads[i]); - stopped = 0; - } - - /* Run things that prepare for forking before we create the task. */ - RUN_HOOK (_hurd_fork_prepare_hook, ()); - - /* Lock things that want to be locked before we fork. */ - { - void *const *p; - for (p = symbol_set_first_element (_hurd_fork_locks); - ! symbol_set_end_p (_hurd_fork_locks, p); - ++p) - __mutex_lock (*p); - } - __mutex_lock (&_hurd_siglock); - - /* Acquire malloc locks. This needs to come last because fork - handlers may use malloc, and the libio list lock has an - indirect malloc dependency as well (via the getdelim - function). */ - call_function_static_weak (__malloc_fork_lock_parent); - _hurd_malloc_fork_prepare (); - - newtask = MACH_PORT_NULL; - thread = sigthread = MACH_PORT_NULL; - newproc = MACH_PORT_NULL; - - /* Lock all the port cells for the standard ports while we copy the - address space. We want to insert all the send rights into the - child with the same names. */ - for (i = 0; i < _hurd_nports; ++i) - __spin_lock (&_hurd_ports[i].lock); - ports_locked = 1; - - - /* Keep our SS locked while stopping other threads, so they don't get a - chance to have it locked in the copied space. */ - __spin_lock (&ss->lock); - /* Stop all other threads while copying the address space, - so nothing changes. */ - err = __proc_dostop (_hurd_ports[INIT_PORT_PROC].port, ss->thread); - __spin_unlock (&ss->lock); - if (!err) - { - stopped = 1; - -#define XXX_KERNEL_PAGE_FAULT_BUG /* XXX work around page fault bug in mk */ - -#ifdef XXX_KERNEL_PAGE_FAULT_BUG - /* Gag me with a pitchfork. - The bug scenario is this: - - - The page containing __mach_task_self_ is paged out. - - The signal thread was faulting on that page when we - suspended it via proc_dostop. It holds some lock, or set - some busy bit, or somesuch. - - Now this thread faults on that same page. - - GRATUIOUS DEADLOCK - - We can break the deadlock by aborting the thread that faulted - first, which if the bug happened was the signal thread because - it is the only other thread and we just suspended it. - */ - __thread_abort (_hurd_msgport_thread); -#endif - /* Create the child task. It will inherit a copy of our memory. */ - err = __task_create (__mach_task_self (), -#ifdef KERN_INVALID_LEDGER - NULL, 0, /* OSF Mach */ -#endif - 1, &newtask); - } - - /* Unlock the global signal state lock, so we do not - block the signal thread any longer than necessary. */ - __mutex_unlock (&_hurd_siglock); - - if (err) - LOSE; - - /* Fetch the names of all ports used in this task. */ - if (err = __mach_port_names (__mach_task_self (), - &portnames, &nportnames, - &porttypes, &nporttypes)) - LOSE; - if (nportnames != nporttypes) - { - err = EGRATUITOUS; - LOSE; - } - - /* Get send rights for all the threads in this task. - We want to avoid giving these rights to the child. */ - if (err = __task_threads (__mach_task_self (), &threads, &nthreads)) - LOSE; - - /* Get the child process's proc server port. We will insert it into - the child with the same name as we use for our own proc server - port; and we will need it to set the child's message port. */ - if (err = __proc_task2proc (_hurd_ports[INIT_PORT_PROC].port, - newtask, &newproc)) - LOSE; - - /* Insert all our port rights into the child task. */ - thread_refs = sigthread_refs = 0; - for (i = 0; i < nportnames; ++i) - { - if (porttypes[i] & MACH_PORT_TYPE_RECEIVE) - { - /* This is a receive right. We want to give the child task - its own new receive right under the same name. */ - err = __mach_port_allocate_name (newtask, - MACH_PORT_RIGHT_RECEIVE, - portnames[i]); - if (err == KERN_NAME_EXISTS) - { - /* It already has a right under this name (?!). Well, - there is this bizarre old Mach IPC feature (in #ifdef - MACH_IPC_COMPAT in the ukernel) which results in new - tasks getting a new receive right for task special - port number 2. What else might be going on I'm not - sure. So let's check. */ -#if !MACH_IPC_COMPAT -#define TASK_NOTIFY_PORT 2 -#endif - assert (({ mach_port_t thisport, notify_port; - mach_msg_type_name_t poly; - (__task_get_special_port (newtask, - TASK_NOTIFY_PORT, - ¬ify_port) == 0 && - __mach_port_extract_right - (newtask, - portnames[i], - MACH_MSG_TYPE_MAKE_SEND, - &thisport, &poly) == 0 && - (thisport == notify_port) && - __mach_port_deallocate (__mach_task_self (), - thisport) == 0 && - __mach_port_deallocate (__mach_task_self (), - notify_port) == 0); - })); - } - else if (err) - LOSE; - if (porttypes[i] & MACH_PORT_TYPE_SEND) - { - /* Give the child as many send rights for its receive - right as we have for ours. */ - mach_port_urefs_t refs; - mach_port_t port; - mach_msg_type_name_t poly; - if (err = __mach_port_get_refs (__mach_task_self (), - portnames[i], - MACH_PORT_RIGHT_SEND, - &refs)) - LOSE; - if (err = __mach_port_extract_right (newtask, - portnames[i], - MACH_MSG_TYPE_MAKE_SEND, - &port, &poly)) - LOSE; - if (portnames[i] == _hurd_msgport) - { - /* We just created a receive right for the child's - message port and are about to insert send rights - for it. Now, while we happen to have a send right - for it, give it to the proc server. */ - mach_port_t old; - if (err = __proc_setmsgport (newproc, port, &old)) - LOSE; - if (old != MACH_PORT_NULL) - /* XXX what to do here? */ - __mach_port_deallocate (__mach_task_self (), old); - /* The new task will receive its own exceptions - on its message port. */ - if (err = -#ifdef TASK_EXCEPTION_PORT - __task_set_special_port (newtask, - TASK_EXCEPTION_PORT, - port) -#elif defined (EXC_MASK_ALL) - __task_set_exception_ports - (newtask, EXC_MASK_ALL & ~(EXC_MASK_SYSCALL - | EXC_MASK_MACH_SYSCALL - | EXC_MASK_RPC_ALERT), - port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE) -#else -# error task_set_exception_port? -#endif - ) - LOSE; - } - if (err = __mach_port_insert_right (newtask, - portnames[i], - port, - MACH_MSG_TYPE_MOVE_SEND)) - LOSE; - if (refs > 1 && - (err = __mach_port_mod_refs (newtask, - portnames[i], - MACH_PORT_RIGHT_SEND, - refs - 1))) - LOSE; - } - if (porttypes[i] & MACH_PORT_TYPE_SEND_ONCE) - { - /* Give the child a send-once right for its receive right, - since we have one for ours. */ - mach_port_t port; - mach_msg_type_name_t poly; - if (err = __mach_port_extract_right - (newtask, - portnames[i], - MACH_MSG_TYPE_MAKE_SEND_ONCE, - &port, &poly)) - LOSE; - if (err = __mach_port_insert_right - (newtask, - portnames[i], port, - MACH_MSG_TYPE_MOVE_SEND_ONCE)) - LOSE; - } - } - else if (porttypes[i] & - (MACH_PORT_TYPE_SEND|MACH_PORT_TYPE_DEAD_NAME)) - { - /* This is a send right or a dead name. - Give the child as many references for it as we have. */ - mach_port_urefs_t refs = 0, *record_refs = NULL; - mach_port_t insert; - mach_msg_type_name_t insert_type = MACH_MSG_TYPE_COPY_SEND; - if (portnames[i] == newtask || portnames[i] == newproc) - /* Skip the name we use for the child's task or proc ports. */ - continue; - if (portnames[i] == __mach_task_self ()) - /* For the name we use for our own task port, - insert the child's task port instead. */ - insert = newtask; - else if (portnames[i] == _hurd_ports[INIT_PORT_PROC].port) - { - /* Use the proc server port for the new task. */ - insert = newproc; - insert_type = MACH_MSG_TYPE_COPY_SEND; - } - else if (portnames[i] == ss->thread) - { - /* For the name we use for our own thread port, we will - insert the thread port for the child main user thread - after we create it. */ - insert = MACH_PORT_NULL; - record_refs = &thread_refs; - /* Allocate a dead name right for this name as a - placeholder, so the kernel will not chose this name - for any other new port (it might use it for one of the - rights created when a thread is created). */ - if (err = __mach_port_allocate_name - (newtask, MACH_PORT_RIGHT_DEAD_NAME, portnames[i])) - LOSE; - } - else if (portnames[i] == _hurd_msgport_thread) - /* For the name we use for our signal thread's thread port, - we will insert the thread port for the child's signal - thread after we create it. */ - { - insert = MACH_PORT_NULL; - record_refs = &sigthread_refs; - /* Allocate a dead name right as a placeholder. */ - if (err = __mach_port_allocate_name - (newtask, MACH_PORT_RIGHT_DEAD_NAME, portnames[i])) - LOSE; - } - else - { - /* Skip the name we use for any of our own thread ports. */ - mach_msg_type_number_t j; - for (j = 0; j < nthreads; ++j) - if (portnames[i] == threads[j]) - break; - if (j < nthreads) - continue; - - /* Copy our own send right. */ - insert = portnames[i]; - } - /* Find out how many user references we have for - the send right with this name. */ - if (err = __mach_port_get_refs (__mach_task_self (), - portnames[i], - MACH_PORT_RIGHT_SEND, - record_refs ?: &refs)) - LOSE; - if (insert == MACH_PORT_NULL) - continue; - if (insert == portnames[i] && - (porttypes[i] & MACH_PORT_TYPE_DEAD_NAME)) - /* This is a dead name; allocate another dead name - with the same name in the child. */ - allocate_dead_name: - err = __mach_port_allocate_name (newtask, - MACH_PORT_RIGHT_DEAD_NAME, - portnames[i]); - else - /* Insert the chosen send right into the child. */ - err = __mach_port_insert_right (newtask, - portnames[i], - insert, insert_type); - switch (err) - { - case KERN_NAME_EXISTS: - { - /* It already has a send right under this name (?!). - Well, it starts out with a send right for its task - port, and inherits the bootstrap and exception ports - from us. */ - mach_port_t childport; - mach_msg_type_name_t poly; - assert (__mach_port_extract_right (newtask, portnames[i], - MACH_MSG_TYPE_COPY_SEND, - &childport, - &poly) == 0 && - childport == insert && - __mach_port_deallocate (__mach_task_self (), - childport) == 0); - break; - } - - case KERN_INVALID_CAPABILITY: - /* The port just died. It was a send right, - and now it's a dead name. */ - goto allocate_dead_name; - - default: - LOSE; - break; - - case KERN_SUCCESS: - /* Give the child as many user references as we have. */ - if (refs > 1 && - (err = __mach_port_mod_refs (newtask, - portnames[i], - MACH_PORT_RIGHT_SEND, - refs - 1))) - LOSE; - } - } - } - - /* Unlock the standard port cells. The child must unlock its own - copies too. */ - for (i = 0; i < _hurd_nports; ++i) - __spin_unlock (&_hurd_ports[i].lock); - ports_locked = 0; - - /* All state has now been copied from the parent. It is safe to - resume other parent threads. */ - resume_threads (); - - /* Create the child main user thread and signal thread. */ - if ((err = __thread_create (newtask, &thread)) || - (err = __thread_create (newtask, &sigthread))) - LOSE; - - /* Insert send rights for those threads. We previously allocated - dead name rights with the names we want to give the thread ports - in the child as placeholders. Now deallocate them so we can use - the names. */ - if ((err = __mach_port_deallocate (newtask, ss->thread)) || - (err = __mach_port_insert_right (newtask, ss->thread, - thread, MACH_MSG_TYPE_COPY_SEND))) - LOSE; - if (thread_refs > 1 && - (err = __mach_port_mod_refs (newtask, ss->thread, - MACH_PORT_RIGHT_SEND, - thread_refs - 1))) - LOSE; - if ((_hurd_msgport_thread != MACH_PORT_NULL) /* Let user have none. */ - && ((err = __mach_port_deallocate (newtask, _hurd_msgport_thread)) || - (err = __mach_port_insert_right (newtask, _hurd_msgport_thread, - sigthread, - MACH_MSG_TYPE_COPY_SEND)))) - LOSE; - if (sigthread_refs > 1 && - (err = __mach_port_mod_refs (newtask, _hurd_msgport_thread, - MACH_PORT_RIGHT_SEND, - sigthread_refs - 1))) - LOSE; - - /* This seems like a convenient juncture to copy the proc server's - idea of what addresses our argv and envp are found at from the - parent into the child. Since we happen to know that the child - shares our memory image, it is we who should do this copying. */ - { - vm_address_t argv, envp; - err = (__USEPORT (PROC, __proc_get_arg_locations (port, &argv, &envp)) - ?: __proc_set_arg_locations (newproc, argv, envp)); - if (err) - LOSE; - } - - /* Set the child signal thread up to run the msgport server function - using the same signal thread stack copied from our address space. - We fetch the state before longjmp'ing it so that miscellaneous - registers not affected by longjmp (such as i386 segment registers) - are in their normal default state. */ - statecount = MACHINE_THREAD_STATE_COUNT; - if (err = __thread_get_state (_hurd_msgport_thread, - MACHINE_THREAD_STATE_FLAVOR, - (natural_t *) &state, &statecount)) - LOSE; -#ifdef STACK_GROWTH_UP -#define THREADVAR_SPACE (__hurd_threadvar_max \ - * sizeof *__hurd_sightread_variables) - if (__hurd_sigthread_stack_base == 0) - { - state.SP &= __hurd_threadvar_stack_mask; - state.SP += __hurd_threadvar_stack_offset + THREADVAR_SPACE; - } - else - state.SP = __hurd_sigthread_stack_base; -#else - if (__hurd_sigthread_stack_end == 0) - { - /* The signal thread has a normal stack assigned by cthreads. - The threadvar_stack variables conveniently tell us how - to get to the highest address in the stack, just below - the per-thread variables. */ - state.SP &= __hurd_threadvar_stack_mask; - state.SP += __hurd_threadvar_stack_offset; - } - else - state.SP = __hurd_sigthread_stack_end; -#endif - MACHINE_THREAD_STATE_SET_PC (&state, - (unsigned long int) _hurd_msgport_receive); - if (err = __thread_set_state (sigthread, MACHINE_THREAD_STATE_FLAVOR, - (natural_t *) &state, statecount)) - LOSE; - /* We do not thread_resume SIGTHREAD here because the child - fork needs to do more setup before it can take signals. */ - - /* Set the child user thread up to return 1 from the setjmp above. */ - _hurd_longjmp_thread_state (&state, env, 1); - - /* Do special thread setup for TLS if needed. */ - if (err = _hurd_tls_fork (thread, &state)) - LOSE; - - if (err = __thread_set_state (thread, MACHINE_THREAD_STATE_FLAVOR, - (natural_t *) &state, statecount)) - LOSE; - - /* Get the PID of the child from the proc server. We must do this - before calling proc_child below, because at that point any - authorized POSIX.1 process may kill the child task with SIGKILL. */ - if (err = __USEPORT (PROC, __proc_task2pid (port, newtask, &pid))) - LOSE; - - /* Register the child with the proc server. It is important that - this be that last thing we do before starting the child thread - running. Once proc_child has been done for the task, it appears - as a POSIX.1 process. Any errors we get must be detected before - this point, and the child must have a message port so it responds - to POSIX.1 signals. */ - if (err = __USEPORT (PROC, __proc_child (port, newtask))) - LOSE; - - /* This must be the absolutely last thing we do; we can't assume that - the child will remain alive for even a moment once we do this. We - ignore errors because we have committed to the fork and are not - allowed to return them after the process becomes visible to - POSIX.1 (which happened right above when we called proc_child). */ - (void) __thread_resume (thread); - - lose: - if (ports_locked) - for (i = 0; i < _hurd_nports; ++i) - __spin_unlock (&_hurd_ports[i].lock); - - resume_threads (); - - if (newtask != MACH_PORT_NULL) - { - if (err) - __task_terminate (newtask); - __mach_port_deallocate (__mach_task_self (), newtask); - } - if (thread != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), thread); - if (sigthread != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), sigthread); - if (newproc != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), newproc); - - if (portnames) - __vm_deallocate (__mach_task_self (), - (vm_address_t) portnames, - nportnames * sizeof (*portnames)); - if (porttypes) - __vm_deallocate (__mach_task_self (), - (vm_address_t) porttypes, - nporttypes * sizeof (*porttypes)); - if (threads) - { - for (i = 0; i < nthreads; ++i) - __mach_port_deallocate (__mach_task_self (), threads[i]); - __vm_deallocate (__mach_task_self (), - (vm_address_t) threads, - nthreads * sizeof (*threads)); - } - - /* Release malloc locks. */ - _hurd_malloc_fork_parent (); - call_function_static_weak (__malloc_fork_unlock_parent); - - /* Run things that want to run in the parent to restore it to - normality. Usually prepare hooks and parent hooks are - symmetrical: the prepare hook arrests state in some way for the - fork, and the parent hook restores the state for the parent to - continue executing normally. */ - RUN_HOOK (_hurd_fork_parent_hook, ()); - } - else - { - struct hurd_sigstate *oldstates; - - /* We are the child task. Unlock the standard port cells, which were - locked in the parent when we copied its memory. The parent has - inserted send rights with the names that were in the cells then. */ - for (i = 0; i < _hurd_nports; ++i) - __spin_unlock (&_hurd_ports[i].lock); - - /* We are one of the (exactly) two threads in this new task, we - will take the task-global signals. */ - _hurd_sigthread = ss->thread; - - /* Claim our sigstate structure and unchain the rest: the - threads existed in the parent task but don't exist in this - task (the child process). Delay freeing them until later - because some of the further setup and unlocking might be - required for free to work. Before we finish cleaning up, - we will reclaim the signal thread's sigstate structure (if - it had one). */ - oldstates = _hurd_sigstates; - if (oldstates == ss) - oldstates = ss->next; - else - { - while (_hurd_sigstates->next != ss) - _hurd_sigstates = _hurd_sigstates->next; - _hurd_sigstates->next = ss->next; - } - ss->next = NULL; - _hurd_sigstates = ss; - __mutex_unlock (&_hurd_siglock); - - /* Fetch our new process IDs from the proc server. No need to - refetch our pgrp; it is always inherited from the parent (so - _hurd_pgrp is already correct), and the proc server will send us a - proc_newids notification when it changes. */ - err = __USEPORT (PROC, __proc_getpids (port, &_hurd_pid, &_hurd_ppid, - &_hurd_orphaned)); - - /* Forking clears the trace flag. */ - __sigemptyset (&_hurdsig_traced); - - /* Release malloc locks. */ - _hurd_malloc_fork_child (); - call_function_static_weak (__malloc_fork_unlock_child); - - /* Run things that want to run in the child task to set up. */ - RUN_HOOK (_hurd_fork_child_hook, ()); - - /* Set up proc server-assisted fault recovery for the signal thread. */ - _hurdsig_fault_init (); - - /* Start the signal thread listening on the message port. */ - if (!err) - err = __thread_resume (_hurd_msgport_thread); - - /* Reclaim the signal thread's sigstate structure and free the - other old sigstate structures. */ - while (oldstates != NULL) - { - struct hurd_sigstate *next = oldstates->next; - - if (oldstates->thread == _hurd_msgport_thread) - { - /* If we have a second signal state structure then we - must have been through here before--not good. */ - assert (_hurd_sigstates->next == 0); - _hurd_sigstates->next = oldstates; - oldstates->next = 0; - } - else - free (oldstates); - - oldstates = next; - } - - /* XXX what to do if we have any errors here? */ - - pid = 0; - } - - /* Unlock things we locked before creating the child task. - They are locked in both the parent and child tasks. */ - { - void *const *p; - for (p = symbol_set_first_element (_hurd_fork_locks); - ! symbol_set_end_p (_hurd_fork_locks, p); - ++p) - __mutex_unlock (*p); - } - - _hurd_critical_section_unlock (ss); - - if (!err) - { - if (pid != 0) - RUN_HOOK (_hurd_atfork_parent_hook, ()); - else - RUN_HOOK (_hurd_atfork_child_hook, ()); - } - - return err ? __hurd_fail (err) : pid; -} -libc_hidden_def (__fork) - -weak_alias (__fork, fork) diff --git a/sysdeps/mach/hurd/fpathconf.c b/sysdeps/mach/hurd/fpathconf.c deleted file mode 100644 index 65f3ecb789..0000000000 --- a/sysdeps/mach/hurd/fpathconf.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Get file-specific information about descriptor FD. */ -long int -__fpathconf (int fd, int name) -{ - error_t err; - int value; - - if (err = HURD_DPORT_USE (fd, __io_pathconf (port, name, &value))) - return __hurd_dfail (fd, err), -1L; - - return value; -} - -weak_alias (__fpathconf, fpathconf) diff --git a/sysdeps/mach/hurd/fremovexattr.c b/sysdeps/mach/hurd/fremovexattr.c deleted file mode 100644 index 052556dc21..0000000000 --- a/sysdeps/mach/hurd/fremovexattr.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Access to extended attributes on files. Hurd version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -int -fremovexattr (int fd, const char *name) -{ - error_t err; - - err = HURD_DPORT_USE (fd, _hurd_xattr_remove (port, name)); - - return err ? __hurd_dfail (fd, err) : 0; -} diff --git a/sysdeps/mach/hurd/fsetxattr.c b/sysdeps/mach/hurd/fsetxattr.c deleted file mode 100644 index 7d26b75bbd..0000000000 --- a/sysdeps/mach/hurd/fsetxattr.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Access to extended attributes on files. Hurd version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -ssize_t -fsetxattr (int fd, const char *name, const void *value, size_t size, int flags) -{ - error_t err; - - err = HURD_DPORT_USE (fd, _hurd_xattr_set (port, name, value, size, flags)); - - return err ? __hurd_dfail (fd, err) : 0; -} diff --git a/sysdeps/mach/hurd/fstatfs.c b/sysdeps/mach/hurd/fstatfs.c deleted file mode 100644 index be9f7da321..0000000000 --- a/sysdeps/mach/hurd/fstatfs.c +++ /dev/null @@ -1,31 +0,0 @@ -/* fstatfs -- Return information about the filesystem on which FD resides. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "statfsconv.c" - -/* Return information about the filesystem on which FD resides. */ -int -__fstatfs (int fd, struct statfs *buf) -{ - struct statfs64 buf64; - return __fstatfs64 (fd, &buf64) ?: statfs64_conv (buf, &buf64); -} - -weak_alias (__fstatfs, fstatfs) diff --git a/sysdeps/mach/hurd/fstatfs64.c b/sysdeps/mach/hurd/fstatfs64.c deleted file mode 100644 index 68ecd7ce70..0000000000 --- a/sysdeps/mach/hurd/fstatfs64.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include "statfsconv.c" - -/* Return information about the filesystem on which FD resides. */ -int -__fstatfs64 (int fd, struct statfs64 *buf) -{ - error_t err; - - if (err = HURD_DPORT_USE (fd, __file_statfs (port, buf))) - return __hurd_dfail (fd, err); - - return 0; -} -weak_alias (__fstatfs64, fstatfs64) diff --git a/sysdeps/mach/hurd/fstatvfs.c b/sysdeps/mach/hurd/fstatvfs.c deleted file mode 100644 index 79f6b20288..0000000000 --- a/sysdeps/mach/hurd/fstatvfs.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fstatvfs (int fd, struct statvfs *buf) -{ - /* `struct statvfs' is in fact identical to `struct statfs' so we - can simply call fstatfs. */ - return __fstatfs (fd, (struct statfs *)buf); -} -libc_hidden_def (fstatvfs) diff --git a/sysdeps/mach/hurd/fstatvfs64.c b/sysdeps/mach/hurd/fstatvfs64.c deleted file mode 100644 index 26692ae1a7..0000000000 --- a/sysdeps/mach/hurd/fstatvfs64.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fstatvfs64 (int fd, struct statvfs64 *buf) -{ - /* `struct statvfs64' is in fact identical to `struct statfs64' so - we can simply call fstatfs64. */ - return __fstatfs64 (fd, (struct statfs64 *)buf); -} diff --git a/sysdeps/mach/hurd/fsync.c b/sysdeps/mach/hurd/fsync.c deleted file mode 100644 index a96e2a460f..0000000000 --- a/sysdeps/mach/hurd/fsync.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Make all changes done to FD actually appear on disk. */ -int -fsync (int fd) -{ - error_t err = HURD_DPORT_USE (fd, __file_sync (port, 1, 0)); - if (err) - { - if (err == EOPNOTSUPP) - /* If the file descriptor does not support sync, return EINVAL - as POSIX specifies. */ - err = EINVAL; - return __hurd_dfail (fd, err); - } - return 0; -} diff --git a/sysdeps/mach/hurd/ftruncate.c b/sysdeps/mach/hurd/ftruncate.c deleted file mode 100644 index c24df25114..0000000000 --- a/sysdeps/mach/hurd/ftruncate.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Truncate the file referenced by FD to LENGTH bytes. */ -int -__ftruncate (int fd, __off_t length) -{ - error_t err; - if (err = HURD_DPORT_USE (fd, __file_set_size (port, length))) - return __hurd_dfail (fd, err); - return 0; -} - -weak_alias (__ftruncate, ftruncate) diff --git a/sysdeps/mach/hurd/ftruncate64.c b/sysdeps/mach/hurd/ftruncate64.c deleted file mode 100644 index 53c4f64afc..0000000000 --- a/sysdeps/mach/hurd/ftruncate64.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Truncate the file referenced by FD to LENGTH bytes. */ -int -__ftruncate64 (int fd, off64_t length) -{ - error_t err; - if (err = HURD_DPORT_USE (fd, __file_set_size (port, length))) - return __hurd_dfail (fd, err); - return 0; -} - -weak_alias (__ftruncate64, ftruncate64) diff --git a/sysdeps/mach/hurd/futimes.c b/sysdeps/mach/hurd/futimes.c deleted file mode 100644 index 6ea8d25aab..0000000000 --- a/sysdeps/mach/hurd/futimes.c +++ /dev/null @@ -1,50 +0,0 @@ -/* futimes -- change access and modification times of open file. Hurd version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Change the access time of FD to TVP[0] and - the modification time of FD to TVP[1]. */ -int -__futimes (int fd, const struct timeval tvp[2]) -{ - union tv - { - struct timeval tv; - time_value_t tvt; - }; - const union tv *u = (const union tv *) tvp; - union tv nulltv[2]; - error_t err; - - if (tvp == NULL) - { - /* Setting the number of microseconds to `-1' tells the - underlying filesystems to use the current time. */ - nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1; - u = nulltv; - } - - err = HURD_DPORT_USE (fd, __file_utimes (port, u[0].tvt, u[1].tvt)); - return err ? __hurd_dfail (fd, err) : 0; -} -weak_alias (__futimes, futimes) diff --git a/sysdeps/mach/hurd/fxstat.c b/sysdeps/mach/hurd/fxstat.c deleted file mode 100644 index e534a054a1..0000000000 --- a/sysdeps/mach/hurd/fxstat.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include "xstatconv.c" - -/* Get information about the file descriptor FD in BUF. */ -int -__fxstat (int vers, int fd, struct stat *buf) -{ - struct stat64 buf64; - return __fxstat64 (vers, fd, &buf64) ?: xstat64_conv (buf, &buf64); -} -hidden_def (__fxstat) -weak_alias (__fxstat, _fxstat) diff --git a/sysdeps/mach/hurd/fxstat64.c b/sysdeps/mach/hurd/fxstat64.c deleted file mode 100644 index 6d5ffdf0e7..0000000000 --- a/sysdeps/mach/hurd/fxstat64.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef RTLD_STAT64 /* dl-fxstat64.c, but we don't want it. */ - -#include -#include -#include -#include -#include - -/* Get information about the file descriptor FD in BUF. */ -int -__fxstat64 (int vers, int fd, struct stat64 *buf) -{ - error_t err; - - if (vers != _STAT_VER) - return __hurd_fail (EINVAL); - - if (err = HURD_DPORT_USE (fd, __io_stat (port, buf))) - return __hurd_dfail (fd, err); - - return 0; -} -hidden_def (__fxstat64) - -#endif diff --git a/sysdeps/mach/hurd/fxstatat.c b/sysdeps/mach/hurd/fxstatat.c deleted file mode 100644 index a7810ea0a9..0000000000 --- a/sysdeps/mach/hurd/fxstatat.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Get information about file named relative to open directory. Hurd version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include "xstatconv.c" - -int -__fxstatat (int vers, int fd, const char *filename, struct stat *buf, int flag) -{ - struct stat64 buf64; - return (__fxstatat64 (vers, fd, filename, &buf64, flag) - ?: xstat64_conv (buf, &buf64)); -} -libc_hidden_def (__fxstatat) diff --git a/sysdeps/mach/hurd/fxstatat64.c b/sysdeps/mach/hurd/fxstatat64.c deleted file mode 100644 index 385fa39ee2..0000000000 --- a/sysdeps/mach/hurd/fxstatat64.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Get information about file named relative to open directory. Hurd version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Get information about the file descriptor FD in BUF. */ -int -__fxstatat64 (int vers, int fd, const char *filename, struct stat64 *buf, - int flag) -{ - error_t err; - io_t port; - - if (vers != _STAT_VER) - return __hurd_fail (EINVAL); - - port = __file_name_lookup_at (fd, flag, filename, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - - err = __io_stat (port, buf); - __mach_port_deallocate (__mach_task_self (), port); - - return __hurd_fail (err); -} -libc_hidden_def (__fxstatat64) diff --git a/sysdeps/mach/hurd/getclktck.c b/sysdeps/mach/hurd/getclktck.c deleted file mode 100644 index 08b787a135..0000000000 --- a/sysdeps/mach/hurd/getclktck.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Return run-time value of CLK_TCK for Hurd. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Return frequency of `times'. - Since Mach reports CPU times in microseconds, we always use 1 million. */ -int -__getclktck (void) -{ - return 1000000; -} - -/* Before glibc 2.2, the Hurd actually did this differently, so we - need to keep a compatibility symbol. */ - -#include - -#if SHLIB_COMPAT (libc, GLIBC_2_1_1, GLIBC_2_2) -compat_symbol (libc, __getclktck, __libc_clk_tck, GLIBC_2_1_1); -#endif diff --git a/sysdeps/mach/hurd/getcwd.c b/sysdeps/mach/hurd/getcwd.c deleted file mode 100644 index 9b371b041a..0000000000 --- a/sysdeps/mach/hurd/getcwd.c +++ /dev/null @@ -1,320 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -/* Get the canonical absolute name of the given directory port, and put it - in SIZE bytes of BUF. Returns NULL if the directory couldn't be - determined or SIZE was too small. If successful, returns BUF. In GNU, - if BUF is NULL, an array is allocated with `malloc'; the array is SIZE - bytes long, unless SIZE <= 0, in which case it is as big as necessary. - If our root directory cannot be reached, the result will not begin with - a slash to indicate that it is relative to some unknown root directory. */ - -char * -_hurd_canonicalize_directory_name_internal (file_t thisdir, - char *buf, - size_t size) -{ - error_t err; - mach_port_t rootid, thisid, rootdevid, thisdevid; - ino64_t rootino, thisino; - char *file_name; - char *file_namep; - file_t parent; - char *dirbuf = NULL; - unsigned int dirbufsize = 0; - const size_t orig_size = size; - - inline void cleanup (void) - { - if (parent != thisdir) - __mach_port_deallocate (__mach_task_self (), parent); - - __mach_port_deallocate (__mach_task_self (), thisid); - __mach_port_deallocate (__mach_task_self (), thisdevid); - __mach_port_deallocate (__mach_task_self (), rootid); - - if (dirbuf != NULL) - __vm_deallocate (__mach_task_self (), - (vm_address_t) dirbuf, dirbufsize); - } - - - if (size <= 0) - { - if (buf != NULL) - { - errno = EINVAL; - return NULL; - } - - size = FILENAME_MAX * 4 + 1; /* Good starting guess. */ - } - - if (buf != NULL) - file_name = buf; - else - { - file_name = malloc (size); - if (file_name == NULL) - return NULL; - } - - file_namep = file_name + size; - *--file_namep = '\0'; - - /* Get a port to our root directory and get its identity. */ - - if (err = __USEPORT (CRDIR, __io_identity (port, - &rootid, &rootdevid, &rootino))) - return __hurd_fail (err), NULL; - __mach_port_deallocate (__mach_task_self (), rootdevid); - - /* Stat the port to the directory of interest. */ - - if (err = __io_identity (thisdir, &thisid, &thisdevid, &thisino)) - { - __mach_port_deallocate (__mach_task_self (), rootid); - return __hurd_fail (err), NULL; - } - - parent = thisdir; - while (thisid != rootid) - { - /* PARENT is a port to the directory we are currently on; - THISID, THISDEV, and THISINO are its identity. - Look in its parent (..) for a file with the same file number. */ - - struct dirent64 *d; - mach_port_t dotid, dotdevid; - ino64_t dotino; - int mount_point; - file_t newp; - char *dirdata; - size_t dirdatasize; - int direntry, nentries; - - - /* Look at the parent directory. */ - newp = __file_name_lookup_under (parent, "..", O_READ, 0); - if (newp == MACH_PORT_NULL) - goto lose; - if (parent != thisdir) - __mach_port_deallocate (__mach_task_self (), parent); - parent = newp; - - /* Get this directory's identity and figure out if it's a mount - point. */ - if (err = __io_identity (parent, &dotid, &dotdevid, &dotino)) - goto errlose; - mount_point = dotdevid != thisdevid; - - if (thisid == dotid) - { - /* `..' == `.' but it is not our root directory. */ - __mach_port_deallocate (__mach_task_self (), dotid); - __mach_port_deallocate (__mach_task_self (), dotdevid); - break; - } - - /* Search for the last directory. */ - direntry = 0; - dirdata = dirbuf; - dirdatasize = dirbufsize; - while (!(err = __dir_readdir (parent, &dirdata, &dirdatasize, - direntry, -1, 0, &nentries)) && - nentries != 0) - { - /* We have a block of directory entries. */ - - unsigned int offset; - - direntry += nentries; - - if (dirdata != dirbuf) - { - /* The data was passed out of line, so our old buffer is no - longer useful. Deallocate the old buffer and reset our - information for the new buffer. */ - __vm_deallocate (__mach_task_self (), - (vm_address_t) dirbuf, dirbufsize); - dirbuf = dirdata; - dirbufsize = round_page (dirdatasize); - } - - /* Iterate over the returned directory entries, looking for one - whose file number is THISINO. */ - - offset = 0; - while (offset < dirdatasize) - { - d = (struct dirent64 *) &dirdata[offset]; - offset += d->d_reclen; - - /* Ignore `.' and `..'. */ - if (d->d_name[0] == '.' && - (d->d_namlen == 1 || - (d->d_namlen == 2 && d->d_name[1] == '.'))) - continue; - - if (mount_point || d->d_ino == thisino) - { - file_t try = __file_name_lookup_under (parent, d->d_name, - O_NOLINK, 0); - file_t id, devid; - ino64_t fileno; - if (try == MACH_PORT_NULL) - goto lose; - err = __io_identity (try, &id, &devid, &fileno); - __mach_port_deallocate (__mach_task_self (), try); - if (err) - goto inner_errlose; - __mach_port_deallocate (__mach_task_self (), id); - __mach_port_deallocate (__mach_task_self (), devid); - if (id == thisid) - goto found; - } - } - } - - if (err) - { - inner_errlose: /* Goto ERRLOSE: after cleaning up. */ - __mach_port_deallocate (__mach_task_self (), dotid); - __mach_port_deallocate (__mach_task_self (), dotdevid); - goto errlose; - } - else if (nentries == 0) - { - /* We got to the end of the directory without finding anything! - We are in a directory that has been unlinked, or something is - broken. */ - err = ENOENT; - goto inner_errlose; - } - else - found: - { - /* Prepend the directory name just discovered. */ - - if (file_namep - file_name < d->d_namlen + 1) - { - if (orig_size > 0) - { - errno = ERANGE; - return NULL; - } - else - { - size *= 2; - buf = realloc (file_name, size); - if (buf == NULL) - { - free (file_name); - return NULL; - } - file_namep = &buf[file_namep - file_name + size / 2]; - file_name = buf; - /* Move current contents up to the end of the buffer. - This is guaranteed to be non-overlapping. */ - memcpy (file_namep, file_namep - size / 2, - file_name + size - file_namep); - } - } - file_namep -= d->d_namlen; - (void) memcpy (file_namep, d->d_name, d->d_namlen); - *--file_namep = '/'; - } - - /* The next iteration will find the name of the directory we - just searched through. */ - __mach_port_deallocate (__mach_task_self (), thisid); - __mach_port_deallocate (__mach_task_self (), thisdevid); - thisid = dotid; - thisdevid = dotdevid; - thisino = dotino; - } - - if (file_namep == &file_name[size - 1]) - /* We found nothing and got all the way to the root. - So the root is our current directory. */ - *--file_namep = '/'; - - if (thisid != rootid) - /* We did not get to our root directory. The returned name should - not begin with a slash. */ - ++file_namep; - - memmove (file_name, file_namep, file_name + size - file_namep); - cleanup (); - return file_name; - - errlose: - /* Set errno. */ - (void) __hurd_fail (err); - lose: - cleanup (); - return NULL; -} - -char * -__canonicalize_directory_name_internal (const char *thisdir, char *buf, - size_t size) -{ - char *result; - file_t port = __file_name_lookup (thisdir, 0, 0); - if (port == MACH_PORT_NULL) - return NULL; - result = _hurd_canonicalize_directory_name_internal (port, buf, size); - __mach_port_deallocate (__mach_task_self (), port); - return result; -} - -/* Get the pathname of the current working directory, and put it in SIZE - bytes of BUF. Returns NULL if the directory couldn't be determined or - SIZE was too small. If successful, returns BUF. In GNU, if BUF is - NULL, an array is allocated with `malloc'; the array is SIZE bytes long, - unless SIZE <= 0, in which case it is as big as necessary. */ -char * -__getcwd (char *buf, size_t size) -{ - char *cwd = - __USEPORT (CWDIR, - _hurd_canonicalize_directory_name_internal (port, - buf, size)); - if (cwd && cwd[0] != '/') - { - /* `cwd' is an unknown root directory. */ - if (buf == NULL) - free (cwd); - return __hurd_fail (EGRATUITOUS), NULL; - } - return cwd; -} -weak_alias (__getcwd, getcwd) diff --git a/sysdeps/mach/hurd/getdents.c b/sysdeps/mach/hurd/getdents.c deleted file mode 100644 index d15be3b8f3..0000000000 --- a/sysdeps/mach/hurd/getdents.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mach/hurd/getdomain.c b/sysdeps/mach/hurd/getdomain.c deleted file mode 100644 index b75e9ac5e3..0000000000 --- a/sysdeps/mach/hurd/getdomain.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "hurdhost.h" - -/* Put the name of the current NIS domain in no more than LEN bytes of NAME. - The result is null-terminated if LEN is large enough for the full - name and the terminator. */ -int -getdomainname (char *name, size_t len) -{ - /* The NIS domain name is just the contents of the file /etc/nisdomain. */ - ssize_t n = _hurd_get_host_config ("/etc/nisdomain", name, len); - return n < 0 ? -1 : 0; -} -libc_hidden_def (getdomainname) diff --git a/sysdeps/mach/hurd/getdtsz.c b/sysdeps/mach/hurd/getdtsz.c deleted file mode 100644 index f44bdf9eac..0000000000 --- a/sysdeps/mach/hurd/getdtsz.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Return the maximum number of file descriptors the current process - could possibly have (until it raises the resource limit). */ -int -__getdtablesize (void) -{ - rlim_t limit; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_rlimit_lock); - limit = _hurd_rlimits[RLIMIT_NOFILE].rlim_cur; - __mutex_unlock (&_hurd_rlimit_lock); - HURD_CRITICAL_END; - - /* RLIM_INFINITY is not meaningful to our caller. -1 is a good choice - because `sysconf (_SC_OPEN_MAX)' calls us, and -1 from sysconf means - "no determinable limit". */ - return limit == RLIM_INFINITY ? -1 : (int) limit; -} - -weak_alias (__getdtablesize, getdtablesize) diff --git a/sysdeps/mach/hurd/getegid.c b/sysdeps/mach/hurd/getegid.c deleted file mode 100644 index 0a9a74a9b3..0000000000 --- a/sysdeps/mach/hurd/getegid.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Get the effective group ID of the calling process. */ -gid_t -__getegid (void) -{ - error_t err; - gid_t egid; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - - if (err = _hurd_check_ids ()) - { - errno = err; - egid = -1; - } - else if (_hurd_id.gen.ngids >= 1) - egid = _hurd_id.gen.gids[0]; - else if (_hurd_id.aux.ngids >= 1) - /* We have no effective gids. Return the real gid. */ - egid = _hurd_id.aux.gids[0]; - else - { - /* We do not even have a real gid. */ - errno = EGRATUITOUS; - egid = -1; - } - - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - return egid; -} - -weak_alias (__getegid, getegid) diff --git a/sysdeps/mach/hurd/geteuid.c b/sysdeps/mach/hurd/geteuid.c deleted file mode 100644 index 5f6deb7a92..0000000000 --- a/sysdeps/mach/hurd/geteuid.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Get the effective user ID of the calling process. */ -uid_t -__geteuid (void) -{ - error_t err; - uid_t euid; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - - if (err = _hurd_check_ids ()) - { - errno = err; - euid = -1; - } - else if (_hurd_id.gen.nuids >= 1) - euid = _hurd_id.gen.uids[0]; - else if (_hurd_id.aux.nuids >= 1) - /* We have no effective uids. Return the real uid. */ - euid = _hurd_id.aux.uids[0]; - else - { - /* We do not even have a real uid. */ - errno = EGRATUITOUS; - euid = -1; - } - - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - return euid; -} - -weak_alias (__geteuid, geteuid) diff --git a/sysdeps/mach/hurd/getgid.c b/sysdeps/mach/hurd/getgid.c deleted file mode 100644 index 557119e5a3..0000000000 --- a/sysdeps/mach/hurd/getgid.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Get the real group ID of the calling process. */ -gid_t -__getgid (void) -{ - error_t err; - gid_t gid; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - - if (err = _hurd_check_ids ()) - { - errno = err; - gid = -1; - } - else if (_hurd_id.aux.ngids >= 1) - gid = _hurd_id.aux.gids[0]; - else - { - /* We do not even have a real gid. */ - errno = EGRATUITOUS; - gid = -1; - } - - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - return gid; -} - -weak_alias (__getgid, getgid) diff --git a/sysdeps/mach/hurd/getgroups.c b/sysdeps/mach/hurd/getgroups.c deleted file mode 100644 index 5141796101..0000000000 --- a/sysdeps/mach/hurd/getgroups.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -int -__getgroups (int n, gid_t *gidset) -{ - error_t err; - int ngids; - void *crit; - - if (n < 0) - return __hurd_fail (EINVAL); - - crit = _hurd_critical_section_lock (); - __mutex_lock (&_hurd_id.lock); - - if (err = _hurd_check_ids ()) - { - __mutex_unlock (&_hurd_id.lock); - _hurd_critical_section_unlock (crit); - return __hurd_fail (err); - } - - ngids = _hurd_id.gen.ngids; - - if (n != 0) - { - /* Copy the gids onto stack storage and then release the idlock. */ - gid_t gids[ngids]; - memcpy (gids, _hurd_id.gen.gids, sizeof (gids)); - __mutex_unlock (&_hurd_id.lock); - _hurd_critical_section_unlock (crit); - - /* Now that the lock is released, we can safely copy the - group set into the user's array, which might fault. */ - if (ngids > n) - return __hurd_fail (EINVAL); - memcpy (gidset, gids, ngids * sizeof (gid_t)); - } - else - { - __mutex_unlock (&_hurd_id.lock); - _hurd_critical_section_unlock (crit); - } - - return ngids; -} - -weak_alias (__getgroups, getgroups) diff --git a/sysdeps/mach/hurd/gethostid.c b/sysdeps/mach/hurd/gethostid.c deleted file mode 100644 index b263e9b1ad..0000000000 --- a/sysdeps/mach/hurd/gethostid.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "hurdhost.h" - -/* Return the current machine's Internet number. */ -long int -gethostid (void) -{ - /* The hostid is just the contents of the file /etc/hostid, - kept as text of hexadecimal digits. */ - /* XXX this is supposed to come from the hardware serial number */ - char buf[8]; - ssize_t n = _hurd_get_host_config ("/etc/hostid", buf, sizeof buf); - if (n < 0) - return -1; - return strtol (buf, NULL, 16); -} diff --git a/sysdeps/mach/hurd/gethostname.c b/sysdeps/mach/hurd/gethostname.c deleted file mode 100644 index 2d8befd533..0000000000 --- a/sysdeps/mach/hurd/gethostname.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "hurdhost.h" - -/* Put the name of the current host in no more than LEN bytes of NAME. - The result is null-terminated if LEN is large enough for the full - name and the terminator. */ -int -__gethostname (char *name, size_t len) -{ - /* The host name is just the contents of the file /etc/hostname. */ - ssize_t n = _hurd_get_host_config ("/etc/hostname", name, len); - return n < 0 ? -1 : 0; -} - -weak_alias (__gethostname, gethostname) diff --git a/sysdeps/mach/hurd/getitimer.c b/sysdeps/mach/hurd/getitimer.c deleted file mode 100644 index 23ff376743..0000000000 --- a/sysdeps/mach/hurd/getitimer.c +++ /dev/null @@ -1,101 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* XXX Temporary cheezoid implementation; see __setitmr.c. */ - -/* These are defined in __setitmr.c. */ -extern spin_lock_t _hurd_itimer_lock; -extern struct itimerval _hurd_itimerval; -extern struct timeval _hurd_itimer_started; - -static inline void -subtract_timeval (struct timeval *from, const struct timeval *subtract) -{ - from->tv_usec -= subtract->tv_usec; - from->tv_sec -= subtract->tv_sec; - while (from->tv_usec < 0) - { - --from->tv_sec; - from->tv_usec += 1000000; - } -} - -/* Set *VALUE to the current setting of timer WHICH. - Return 0 on success, -1 on errors. */ -int -__getitimer (enum __itimer_which which, struct itimerval *value) -{ - struct itimerval val; - struct timeval elapsed; - - switch (which) - { - default: - return __hurd_fail (EINVAL); - - case ITIMER_VIRTUAL: - case ITIMER_PROF: - return __hurd_fail (ENOSYS); - - case ITIMER_REAL: - break; - } - - /* Get the time now. */ - if (__gettimeofday (&elapsed, NULL) < 0) - return -1; - - /* Extract the current timer setting; and the time it was set, so we can - calculate the time elapsed so far. */ - HURD_CRITICAL_BEGIN; - __spin_lock (&_hurd_itimer_lock); - val = _hurd_itimerval; - subtract_timeval (&elapsed, &_hurd_itimer_started); - __spin_unlock (&_hurd_itimer_lock); - HURD_CRITICAL_END; - - if ((val.it_value.tv_sec | val.it_value.tv_usec) != 0) - { - /* There is a pending alarm set. VAL indicates the interval it was - set for, relative to the time recorded in _hurd_itimer_started. - Now compensate for the time elapsed since to get the user's - conception of the current value of the timer (as if the value - stored decreased every microsecond). */ - if (timercmp (&val.it_value, &elapsed, <)) - { - /* Hmm. The timer should have just gone off, but has not been - reset. This is a possible timing glitch. The alarm will signal - soon, so fabricate a value for how soon. */ - val.it_value.tv_sec = 0; - val.it_value.tv_usec = 10; /* Random. */ - } - else - /* Subtract the time elapsed since the timer was set - from the current timer value the user sees. */ - subtract_timeval (&val.it_value, &elapsed); - } - - *value = val; - return 0; -} - -weak_alias (__getitimer, getitimer) diff --git a/sysdeps/mach/hurd/getlogin.c b/sysdeps/mach/hurd/getlogin.c deleted file mode 100644 index 47947202be..0000000000 --- a/sysdeps/mach/hurd/getlogin.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Return the login name of the user, or NULL if it can't be determined. - The returned pointer, if not NULL, is good only until the next call. */ -char * -getlogin (void) -{ - static char login[1024]; /* XXX */ - error_t err; - - if (err = __USEPORT (PROC, __proc_getlogin (port, login))) - { - errno = err; - return NULL; - } - - return login; -} diff --git a/sysdeps/mach/hurd/getlogin_r.c b/sysdeps/mach/hurd/getlogin_r.c deleted file mode 100644 index e11e05b216..0000000000 --- a/sysdeps/mach/hurd/getlogin_r.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Reentrant function to return the current login name. Hurd version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Return at most NAME_LEN characters of the login name of the user in NAME. - If it cannot be determined or some other error occurred, return the error - code. Otherwise return 0. */ -int -__getlogin_r (char *name, size_t name_len) -{ - string_t login; - error_t err; - - if (err = __USEPORT (PROC, __proc_getlogin (port, login))) - return errno = err; - - size_t len = __strnlen (login, sizeof login - 1) + 1; - if (len > name_len) - { - errno = ERANGE; - return errno; - } - - memcpy (name, login, len); - return 0; -} -libc_hidden_def (__getlogin_r) -weak_alias (__getlogin_r, getlogin_r) -libc_hidden_weak (getlogin_r) diff --git a/sysdeps/mach/hurd/getpeername.c b/sysdeps/mach/hurd/getpeername.c deleted file mode 100644 index fed9c0163a..0000000000 --- a/sysdeps/mach/hurd/getpeername.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include -#include - -/* Put the address of the peer connected to socket FD into *ADDR - (which is *LEN bytes long), and its actual length into *LEN. */ -int -__getpeername (int fd, __SOCKADDR_ARG addrarg, socklen_t *len) -{ - error_t err; - mach_msg_type_number_t buflen = *len; - int type; - struct sockaddr *addr = addrarg.__sockaddr__; - char *buf = (char *) addr; - addr_port_t aport; - - if (err = HURD_DPORT_USE (fd, __socket_peername (port, &aport))) - return __hurd_dfail (fd, err); - - err = __socket_whatis_address (aport, &type, &buf, &buflen); - __mach_port_deallocate (__mach_task_self (), aport); - - if (err) - return __hurd_dfail (fd, err); - - if (*len > buflen) - *len = buflen; - - if (buf != (char *) addr) - { - memcpy (addr, buf, *len); - __vm_deallocate (__mach_task_self (), (vm_address_t) buf, buflen); - } - - const sa_family_t family = type; - if (*len > offsetof (struct sockaddr, sa_family)) - { - if (*len < (char *) (&addr->sa_family + 1) - (char *) addr) - memcpy (&addr->sa_family, &family, - *len - offsetof (struct sockaddr, sa_family)); - else - addr->sa_family = family; - } - - return 0; -} - -weak_alias (__getpeername, getpeername) diff --git a/sysdeps/mach/hurd/getpgid.c b/sysdeps/mach/hurd/getpgid.c deleted file mode 100644 index 51d5ff581c..0000000000 --- a/sysdeps/mach/hurd/getpgid.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Get the process group ID of process PID. */ -int -__getpgid (pid_t pid) -{ - error_t err; - pid_t pgrp; - - if (pid == 0) - { - /* Assume atomic word fetch and store, so don't lock _hurd_pid_lock. */ - pgrp = _hurd_pgrp; - err = 0; - } - else - err = __USEPORT (PROC, __proc_getpgrp (port, pid, &pgrp)); - - return err ? __hurd_fail (err) : pgrp; -} -libc_hidden_def (__getpgid) -weak_alias (__getpgid, getpgid) diff --git a/sysdeps/mach/hurd/getpid.c b/sysdeps/mach/hurd/getpid.c deleted file mode 100644 index ac18d0a481..0000000000 --- a/sysdeps/mach/hurd/getpid.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Get the process ID of the calling process. */ -pid_t -__getpid (void) -{ - /* Assumes atomic word fetch and store, so doesn't lock _hurd_pid_lock. */ - return _hurd_pid; -} -libc_hidden_def (__getpid) -weak_alias (__getpid, getpid) -libc_hidden_weak (getpid) diff --git a/sysdeps/mach/hurd/getppid.c b/sysdeps/mach/hurd/getppid.c deleted file mode 100644 index 982082a278..0000000000 --- a/sysdeps/mach/hurd/getppid.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -/* Get the parent process ID of the calling process. */ -pid_t -__getppid (void) -{ - /* Assumes atomic word fetch and store, so doesn't lock _hurd_pid_lock. */ - return _hurd_ppid; -} - -weak_alias (__getppid, getppid) diff --git a/sysdeps/mach/hurd/getpriority.c b/sysdeps/mach/hurd/getpriority.c deleted file mode 100644 index 8bf464c1e1..0000000000 --- a/sysdeps/mach/hurd/getpriority.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Return the highest priority of any process specified by WHICH and WHO - (see ); if WHO is zero, the current process, process group, - or user (as specified by WHO) is used. A lower priority number means higher - priority. Priorities range from PRIO_MIN to PRIO_MAX. */ -int -__getpriority (enum __priority_which which, id_t who) -{ - error_t err, onerr; - int maxpri = INT_MIN; - struct procinfo *pip; /* Just for sizeof. */ - int pibuf[sizeof *pip + 2 * sizeof (pip->threadinfos[0])], *pi = pibuf; - size_t pisize = sizeof pibuf / sizeof pibuf[0]; - - error_t getonepriority (pid_t pid, struct procinfo *pip) - { - if (pip) - onerr = 0; - else - { - int *oldpi = pi; - size_t oldpisize = pisize; - char *tw = 0; - size_t twsz = 0; - int flags = PI_FETCH_TASKINFO; - onerr = __USEPORT (PROC, __proc_getprocinfo (port, pid, &flags, - &pi, &pisize, - &tw, &twsz)); - if (twsz) - __vm_deallocate (__mach_task_self (), (vm_address_t) tw, twsz); - if (pi != oldpi && oldpi != pibuf) - /* Old buffer from last call was not reused; free it. */ - __vm_deallocate (__mach_task_self (), - (vm_address_t) oldpi, oldpisize * sizeof pi[0]); - pip = (struct procinfo *) pi; - } -#ifdef TASK_SCHED_TIMESHARE_INFO - if (!onerr && pip->timeshare_base_info.base_priority > maxpri) - maxpri = pip->timeshare_base_info.base_priority; -#else - if (!onerr && pip->taskinfo.base_priority > maxpri) - maxpri = pip->taskinfo.base_priority; -#endif - return 0; - } - - onerr = 0; - err = _hurd_priority_which_map (which, who, - getonepriority, PI_FETCH_TASKINFO); - - if (pi != pibuf) - __vm_deallocate (__mach_task_self (), - (vm_address_t) pi, pisize * sizeof pi[0]); - - if (!err && maxpri == INT_MIN) - /* No error, but no pids found. */ - err = onerr ?: ESRCH; - - if (err) - return __hurd_fail (err); - - return MACH_PRIORITY_TO_NICE (maxpri); -} -libc_hidden_def (__getpriority) -weak_alias (__getpriority, getpriority) diff --git a/sysdeps/mach/hurd/getresgid.c b/sysdeps/mach/hurd/getresgid.c deleted file mode 100644 index 2bd873f428..0000000000 --- a/sysdeps/mach/hurd/getresgid.c +++ /dev/null @@ -1,61 +0,0 @@ -/* getresgid -- fetch real group ID, effective group ID, and saved-set group ID - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Fetch the real group ID, effective group ID, and saved-set group ID, - of the calling process. */ -int -__getresgid (gid_t *rgid, gid_t *egid, gid_t *sgid) -{ - error_t err; - gid_t real, eff, saved; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - - err = _hurd_check_ids (); - if (!err) - { - if (_hurd_id.aux.ngids < 1) - /* We do not even have a real GID. */ - err = EGRATUITOUS; - else - { - real = _hurd_id.aux.gids[0]; - eff = _hurd_id.gen.ngids < 1 ? real : _hurd_id.gen.gids[0]; - saved = _hurd_id.aux.ngids < 2 ? real : _hurd_id.aux.gids[1]; - } - } - - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - if (err) - return __hurd_fail (err); - - *rgid = real; - *egid = eff; - *sgid = saved; - return 0; -} -libc_hidden_def (__getresgid) -weak_alias (__getresgid, getresgid) diff --git a/sysdeps/mach/hurd/getresuid.c b/sysdeps/mach/hurd/getresuid.c deleted file mode 100644 index 1abea2e18f..0000000000 --- a/sysdeps/mach/hurd/getresuid.c +++ /dev/null @@ -1,61 +0,0 @@ -/* getresuid -- fetch real user ID, effective user ID, and saved-set user ID - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Fetch the real user ID, effective user ID, and saved-set user ID, - of the calling process. */ -int -__getresuid (uid_t *ruid, uid_t *euid, uid_t *suid) -{ - error_t err; - uid_t real, eff, saved; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - - err = _hurd_check_ids (); - if (!err) - { - if (_hurd_id.aux.nuids < 1) - /* We do not even have a real UID. */ - err = EGRATUITOUS; - else - { - real = _hurd_id.aux.uids[0]; - eff = _hurd_id.gen.nuids < 1 ? real : _hurd_id.gen.uids[0]; - saved = _hurd_id.aux.nuids < 2 ? real : _hurd_id.aux.uids[1]; - } - } - - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - if (err) - return __hurd_fail (err); - - *ruid = real; - *euid = eff; - *suid = saved; - return 0; -} -libc_hidden_def (__getresuid) -weak_alias (__getresuid, getresuid) diff --git a/sysdeps/mach/hurd/getrlimit.c b/sysdeps/mach/hurd/getrlimit.c deleted file mode 100644 index 9e28ca2127..0000000000 --- a/sysdeps/mach/hurd/getrlimit.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Put the soft and hard limits for RESOURCE in *RLIMITS. - Returns 0 if successful, -1 if not (and sets errno). */ -int -__getrlimit (enum __rlimit_resource resource, struct rlimit *rlimits) -{ - struct rlimit lim; - - if (rlimits == NULL || (unsigned int) resource >= RLIMIT_NLIMITS) - { - errno = EINVAL; - return -1; - } - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_rlimit_lock); - lim = _hurd_rlimits[resource]; - __mutex_unlock (&_hurd_rlimit_lock); - HURD_CRITICAL_END; - - *rlimits = lim; - - return 0; -} -libc_hidden_def (__getrlimit) -weak_alias (__getrlimit, getrlimit) diff --git a/sysdeps/mach/hurd/getrusage.c b/sysdeps/mach/hurd/getrusage.c deleted file mode 100644 index 7849518f39..0000000000 --- a/sysdeps/mach/hurd/getrusage.c +++ /dev/null @@ -1,91 +0,0 @@ -/* getrusage -- Get resource usage information about processes. Hurd version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Return resource usage information on process indicated by WHO - and put it in *USAGE. Returns 0 for success, -1 for failure. */ -int -__getrusage (enum __rusage_who who, struct rusage *usage) -{ - struct task_basic_info bi; - struct task_events_info ei; - struct task_thread_times_info tti; - mach_msg_type_number_t count; - error_t err; - - switch (who) - { - case RUSAGE_SELF: - count = TASK_BASIC_INFO_COUNT; - err = __task_info (__mach_task_self (), TASK_BASIC_INFO, - (task_info_t) &bi, &count); - if (err) - return __hurd_fail (err); - - count = TASK_EVENTS_INFO_COUNT; - err = __task_info (__mach_task_self (), TASK_EVENTS_INFO, - (task_info_t) &ei, &count); - if (err == KERN_INVALID_ARGUMENT) /* microkernel doesn't implement it */ - memset (&ei, 0, sizeof ei); - else if (err) - return __hurd_fail (err); - - count = TASK_THREAD_TIMES_INFO_COUNT; - err = __task_info (__mach_task_self (), TASK_THREAD_TIMES_INFO, - (task_info_t) &tti, &count); - if (err) - return __hurd_fail (err); - - time_value_add (&bi.user_time, &tti.user_time); - time_value_add (&bi.system_time, &tti.system_time); - - memset (usage, 0, sizeof (struct rusage)); - - usage->ru_utime.tv_sec = bi.user_time.seconds; - usage->ru_utime.tv_usec = bi.user_time.microseconds; - usage->ru_stime.tv_sec = bi.system_time.seconds; - usage->ru_stime.tv_usec = bi.system_time.microseconds; - - /* These statistics map only approximately. */ - usage->ru_majflt = ei.pageins; - usage->ru_minflt = ei.faults - ei.pageins; - usage->ru_msgsnd = ei.messages_sent; /* Mach IPC, not SysV IPC */ - usage->ru_msgrcv = ei.messages_received; /* Mach IPC, not SysV IPC */ - break; - - case RUSAGE_CHILDREN: - /* XXX Not implemented yet. However, zero out USAGE to be - consistent with the wait3 and wait4 functions. */ - memset (usage, 0, sizeof (struct rusage)); - - break; - - default: - return EINVAL; - } - - return 0; -} - -weak_alias (__getrusage, getrusage) diff --git a/sysdeps/mach/hurd/getsid.c b/sysdeps/mach/hurd/getsid.c deleted file mode 100644 index cf3e97830f..0000000000 --- a/sysdeps/mach/hurd/getsid.c +++ /dev/null @@ -1,38 +0,0 @@ -/* getsid -- Return session ID of a process. Hurd version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -pid_t -getsid (pid_t pid) -{ - error_t err; - pid_t sid; - - if (pid == 0) - pid = _hurd_pid; - - err = __USEPORT (PROC, __proc_getsid (port, pid, &sid)); - if (err) - return (pid_t) __hurd_fail (err); - return sid; -} -libc_hidden_def (getsid) diff --git a/sysdeps/mach/hurd/getsockname.c b/sysdeps/mach/hurd/getsockname.c deleted file mode 100644 index 3b7f71eb9e..0000000000 --- a/sysdeps/mach/hurd/getsockname.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Put the local address of FD into *ADDR and its length in *LEN. */ -int -__getsockname (int fd, __SOCKADDR_ARG addrarg, socklen_t *len) -{ - error_t err; - struct sockaddr *addr = addrarg.__sockaddr__; - char *buf = (char *) addr; - mach_msg_type_number_t buflen = *len; - int type; - addr_port_t aport; - - if (err = HURD_DPORT_USE (fd, __socket_name (port, &aport))) - return __hurd_dfail (fd, err); - - err = __socket_whatis_address (aport, &type, &buf, &buflen); - __mach_port_deallocate (__mach_task_self (), aport); - - if (err) - return __hurd_dfail (fd, err); - - if (*len > buflen) - *len = buflen; - - if (buf != (char *) addr) - { - memcpy (addr, buf, *len); - __vm_deallocate (__mach_task_self (), (vm_address_t) buf, buflen); - } - - addr->sa_family = type; - - return 0; -} - -weak_alias (__getsockname, getsockname) diff --git a/sysdeps/mach/hurd/getsockopt.c b/sysdeps/mach/hurd/getsockopt.c deleted file mode 100644 index 9974b61ef5..0000000000 --- a/sysdeps/mach/hurd/getsockopt.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Put the current value for socket FD's option OPTNAME at protocol level LEVEL - into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's - actual length. Returns 0 on success, -1 for errors. */ - -/* XXX should be __getsockopt ? */ -int -getsockopt (int fd, - int level, - int optname, - void *optval, - socklen_t *optlen) -{ - error_t err; - char *buf = optval; - mach_msg_type_number_t buflen = *optlen; - - if (err = HURD_DPORT_USE (fd, __socket_getopt (port, - level, optname, - &buf, &buflen))) - return __hurd_dfail (fd, err); - - if (*optlen > buflen) - *optlen = buflen; - if (buf != optval) - { - memcpy (optval, buf, *optlen); - __vm_deallocate (__mach_task_self (), (vm_address_t) buf, buflen); - } - - return 0; -} diff --git a/sysdeps/mach/hurd/getuid.c b/sysdeps/mach/hurd/getuid.c deleted file mode 100644 index ff95fd58b8..0000000000 --- a/sysdeps/mach/hurd/getuid.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Get the real user ID of the calling process. */ -uid_t -__getuid (void) -{ - error_t err; - uid_t uid; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - - if (err = _hurd_check_ids ()) - { - errno = err; - uid = -1; - } - else if (_hurd_id.aux.nuids >= 1) - uid = _hurd_id.aux.uids[0]; - else - { - /* We do not even have a real uid. */ - errno = EGRATUITOUS; - uid = -1; - } - - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - return uid; -} - -weak_alias (__getuid, getuid) diff --git a/sysdeps/mach/hurd/getxattr.c b/sysdeps/mach/hurd/getxattr.c deleted file mode 100644 index 7a38088fe8..0000000000 --- a/sysdeps/mach/hurd/getxattr.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Access to extended attributes on files. Hurd version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -ssize_t -getxattr (const char *path, const char *name, void *value, size_t size) -{ - error_t err; - file_t port = __file_name_lookup (path, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - err = _hurd_xattr_get (port, name, value, &size); - __mach_port_deallocate (__mach_task_self (), port); - return err ? __hurd_fail (err) : size; -} diff --git a/sysdeps/mach/hurd/group_member.c b/sysdeps/mach/hurd/group_member.c deleted file mode 100644 index a0fc359fe6..0000000000 --- a/sysdeps/mach/hurd/group_member.c +++ /dev/null @@ -1,54 +0,0 @@ -/* `group_member' -- test if process is in a given group. Hurd version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -__group_member (gid_t gid) -{ - int member = 0; - error_t err; - void *crit; - - crit = _hurd_critical_section_lock (); - __mutex_lock (&_hurd_id.lock); - - err = _hurd_check_ids (); - if (! err) - { - size_t i; - for (i = 0; i < _hurd_id.gen.ngids; ++i) - if (_hurd_id.gen.gids[i] == gid) - { - member = 1; - break; - } - } - - __mutex_unlock (&_hurd_id.lock); - _hurd_critical_section_unlock (crit); - - if (err) - __hurd_fail (err); - return member; -} - -weak_alias (__group_member, group_member) diff --git a/sysdeps/mach/hurd/i386/Makefile b/sysdeps/mach/hurd/i386/Makefile deleted file mode 100644 index 5f988097c2..0000000000 --- a/sysdeps/mach/hurd/i386/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -ifeq ($(subdir),misc) -sysdep_routines += ioperm -sysdep_headers += sys/io.h -endif - -ifeq ($(subdir),debug) -gen-as-const-headers += signal-defines.sym -endif diff --git a/sysdeps/mach/hurd/i386/Versions b/sysdeps/mach/hurd/i386/Versions deleted file mode 100644 index 67e6d94204..0000000000 --- a/sysdeps/mach/hurd/i386/Versions +++ /dev/null @@ -1,10 +0,0 @@ -libc { - GLIBC_2.0 { - # Exception handling support functions from libgcc - __register_frame; __register_frame_table; __deregister_frame; - __frame_state_for; __register_frame_info_table; - } - GLIBC_2.2.6 { - ioperm; - } -} diff --git a/sysdeps/mach/hurd/i386/____longjmp_chk.S b/sysdeps/mach/hurd/i386/____longjmp_chk.S deleted file mode 100644 index ac28c94e13..0000000000 --- a/sysdeps/mach/hurd/i386/____longjmp_chk.S +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -/* #include */ -#define SS_ONSTACK 1 - - - .section .rodata.str1.1,"aMS",@progbits,1 - .type longjmp_msg,@object -longjmp_msg: - .string "longjmp causes uninitialized stack frame" - .size longjmp_msg, .-longjmp_msg - - -#ifdef PIC -# define CALL_FAIL movl %ebx, %ecx; /* TODO: what's this mov good for? */ \ - cfi_register(%ebx,%ecx); \ - LOAD_PIC_REG (bx); \ - leal longjmp_msg@GOTOFF(%ebx), %eax; \ - call HIDDEN_JUMPTARGET(__fortify_fail) -#else -# define CALL_FAIL movl $longjmp_msg, %eax; \ - call HIDDEN_JUMPTARGET(__fortify_fail) -#endif - - - .text -ENTRY (____longjmp_chk) - movl 4(%esp), %ecx /* User's jmp_buf in %ecx. */ - - /* Save the return address now. */ - movl (JB_PC*4)(%ecx), %edx - /* Get the stack pointer. */ - movl (JB_SP*4)(%ecx), %edi - cfi_undefined(%edi) -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (%edx) - PTR_DEMANGLE (%edi) -#endif - - cmpl %edi, %esp - /* Jumping to a higher-address frame is always allowed. */ - jbe .Lok - - /* Passing here, we're either about to do something invalid, or we're - executing on an alternative signal stack. */ - - /* TODO: need locking? */ - /* struct hurd_sigstate * _hurd_self_sigstate (void) */ -#ifdef PIC - call 1f -1: popl %ebx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx -#endif - call JUMPTARGET(_hurd_self_sigstate) - /* TODO: %eax and %eax->sigaltstack are always valid? */ - - testl $SS_ONSTACK, (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_FLAGS__OFFSET)(%eax) - /* Fail if SS_ONSTACK is not set. */ - jz .Lfail - - movl (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_SP__OFFSET)(%eax), %ebx - addl (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_SIZE__OFFSET)(%eax), %ebx - subl %edi, %ebx - cmpl (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_SIZE__OFFSET)(%eax), %ebx - /* TODO: comment this calculation. */ - jae .Lok - -.Lfail: CALL_FAIL - -.Lok: /* We add unwind information for the target here. */ - cfi_def_cfa(%ecx, 0) - cfi_register(%eip, %edx) - cfi_register(%esp, %edi) - cfi_offset(%ebx, JB_BX*4) - cfi_offset(%esi, JB_SI*4) - cfi_offset(%edi, JB_DI*4) - cfi_offset(%ebp, JB_BP*4) - - movl 8(%esp), %eax /* Second argument is return value. */ - movl %edi, %esp - - /* Restore registers. */ - movl (JB_BX*4)(%ecx), %ebx - movl (JB_SI*4)(%ecx), %esi - movl (JB_DI*4)(%ecx), %edi - movl (JB_BP*4)(%ecx), %ebp - cfi_restore(%ebx) - cfi_restore(%esi) - cfi_restore(%edi) - cfi_restore(%ebp) - - /* Jump to saved PC. */ - jmp *%edx -END (____longjmp_chk) diff --git a/sysdeps/mach/hurd/i386/bits/sigcontext.h b/sysdeps/mach/hurd/i386/bits/sigcontext.h deleted file mode 100644 index 3d5a6736aa..0000000000 --- a/sysdeps/mach/hurd/i386/bits/sigcontext.h +++ /dev/null @@ -1,121 +0,0 @@ -/* Machine-dependent signal context structure for GNU Hurd. i386 version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SIGCONTEXT_H -#define _BITS_SIGCONTEXT_H 1 - -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H -# error "Never use directly; include instead." -#endif - -/* Signal handlers are actually called: - void handler (int sig, int code, struct sigcontext *scp); */ - -#include -#include - -/* State of this thread when the signal was taken. */ -struct sigcontext - { - /* These first members are machine-independent. */ - - int sc_onstack; /* Nonzero if running on sigstack. */ - __sigset_t sc_mask; /* Blocked signals to restore. */ - - /* MiG reply port this thread is using. */ - unsigned int sc_reply_port; - - /* Port this thread is doing an interruptible RPC on. */ - unsigned int sc_intr_port; - - /* Error code associated with this signal (interpreted as `error_t'). */ - int sc_error; - - /* All following members are machine-dependent. The rest of this - structure is written to be laid out identically to: - { - struct i386_thread_state basic; - struct i386_float_state fpu; - } - trampoline.c knows this, so it must be changed if this changes. */ - -#define sc_i386_thread_state sc_gs /* Beginning of correspondence. */ - /* Segment registers. */ - int sc_gs; - int sc_fs; - int sc_es; - int sc_ds; - - /* "General" registers. These members are in the order that the i386 - `pusha' and `popa' instructions use (`popa' ignores %esp). */ - int sc_edi; - int sc_esi; - int sc_ebp; - int sc_esp; /* Not used; sc_uesp is used instead. */ - int sc_ebx; - int sc_edx; - int sc_ecx; - int sc_eax; - - int sc_eip; /* Instruction pointer. */ - int sc_cs; /* Code segment register. */ - - int sc_efl; /* Processor flags. */ - - int sc_uesp; /* This stack pointer is used. */ - int sc_ss; /* Stack segment register. */ - - /* Following mimics struct i386_float_state. Structures and symbolic - values can be found in . */ -#define sc_i386_float_state sc_fpkind - int sc_fpkind; /* FP_NO, FP_387, etc. */ - int sc_fpused; /* If zero, ignore rest of float state. */ - struct i386_fp_save sc_fpsave; - struct i386_fp_regs sc_fpregs; - int sc_fpexcsr; /* FPSR including exception bits. */ - }; - -/* Traditional BSD names for some members. */ -#define sc_sp sc_uesp /* Stack pointer. */ -#define sc_fp sc_ebp /* Frame pointer. */ -#define sc_pc sc_eip /* Process counter. */ -#define sc_ps sc_efl - - -/* Codes for SIGFPE. */ -#define FPE_INTOVF_TRAP 0x1 /* integer overflow */ -#define FPE_INTDIV_FAULT 0x2 /* integer divide by zero */ -#define FPE_FLTOVF_FAULT 0x3 /* floating overflow */ -#define FPE_FLTDIV_FAULT 0x4 /* floating divide by zero */ -#define FPE_FLTUND_FAULT 0x5 /* floating underflow */ -#define FPE_SUBRNG_FAULT 0x7 /* BOUNDS instruction failed */ -#define FPE_FLTDNR_FAULT 0x8 /* denormalized operand */ -#define FPE_FLTINX_FAULT 0x9 /* floating loss of precision */ -#define FPE_EMERR_FAULT 0xa /* mysterious emulation error 33 */ -#define FPE_EMBND_FAULT 0xb /* emulation BOUNDS instruction failed */ - -/* Codes for SIGILL. */ -#define ILL_INVOPR_FAULT 0x1 /* invalid operation */ -#define ILL_STACK_FAULT 0x2 /* fault on microkernel stack access */ -#define ILL_FPEOPR_FAULT 0x3 /* invalid floating operation */ - -/* Codes for SIGTRAP. */ -#define DBG_SINGLE_TRAP 0x1 /* single step */ -#define DBG_BRKPNT_FAULT 0x2 /* breakpoint instruction */ - -#endif /* bits/sigcontext.h */ diff --git a/sysdeps/mach/hurd/i386/c++-types.data b/sysdeps/mach/hurd/i386/c++-types.data deleted file mode 100644 index 4cde3ca667..0000000000 --- a/sysdeps/mach/hurd/i386/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:j -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:y -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14__pthread_attr -pthread_barrier_t:17__pthread_barrier -pthread_barrierattr_t:21__pthread_barrierattr -pthread_cond_t:14__pthread_cond -pthread_condattr_t:18__pthread_condattr -pthread_key_t:i -pthread_mutex_t:15__pthread_mutex -pthread_mutexattr_t:19__pthread_mutexattr -pthread_once_t:14__pthread_once -pthread_rwlock_t:16__pthread_rwlock -pthread_rwlockattr_t:20__pthread_rwlockattr -pthread_spinlock_t:i -pthread_t:i -quad_t:x -register_t:i -rlim64_t:y -rlim_t:m -sigset_t:m -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/mach/hurd/i386/dl-machine.h b/sysdeps/mach/hurd/i386/dl-machine.h deleted file mode 100644 index 40f2ff29d4..0000000000 --- a/sysdeps/mach/hurd/i386/dl-machine.h +++ /dev/null @@ -1,7 +0,0 @@ -/* Dynamic linker magic for Hurd/i386. - This file just gets us a call to _dl_first_init inserted - into the asm in sysdeps/i386/dl-machine.h that contains - the initializer code. */ - -#define RTLD_START_SPECIAL_INIT "call _dl_init_first@PLT; movl (%esp), %edx" -#include_next "dl-machine.h" diff --git a/sysdeps/mach/hurd/i386/exc2signal.c b/sysdeps/mach/hurd/i386/exc2signal.c deleted file mode 100644 index a731da054c..0000000000 --- a/sysdeps/mach/hurd/i386/exc2signal.c +++ /dev/null @@ -1,165 +0,0 @@ -/* Translate Mach exception codes into signal numbers. i386 version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Translate the Mach exception codes, as received in an `exception_raise' RPC, - into a signal number and signal subcode. */ - -void -_hurd_exception2signal (struct hurd_signal_detail *detail, int *signo) -{ - detail->error = 0; - - switch (detail->exc) - { - default: - *signo = SIGIOT; - detail->code = detail->exc; - break; - - case EXC_BAD_ACCESS: - if (detail->exc_code == KERN_INVALID_ADDRESS - || detail->exc_code == KERN_PROTECTION_FAILURE - || detail->exc_code == KERN_WRITE_PROTECTION_FAILURE) - *signo = SIGSEGV; - else - *signo = SIGBUS; - detail->code = detail->exc_subcode; - detail->error = detail->exc_code; - break; - - case EXC_BAD_INSTRUCTION: - *signo = SIGILL; - if (detail->exc_code == EXC_I386_INVOP) - detail->code = ILL_INVOPR_FAULT; - else if (detail->exc_code == EXC_I386_STKFLT) - detail->code = ILL_STACK_FAULT; - else - detail->code = 0; - break; - - case EXC_ARITHMETIC: - switch (detail->exc_code) - { - case EXC_I386_DIV: /* integer divide by zero */ - *signo = SIGFPE; - detail->code = FPE_INTDIV_FAULT; - break; - - case EXC_I386_INTO: /* integer overflow */ - *signo = SIGFPE; - detail->code = FPE_INTOVF_TRAP; - break; - - /* These aren't anywhere documented or used in Mach 3.0. */ - case EXC_I386_NOEXT: - case EXC_I386_EXTOVR: - default: - *signo = SIGFPE; - detail->code = 0; - break; - - case EXC_I386_EXTERR: - /* Subcode is the fp_status word saved by the hardware. - Give an error code corresponding to the first bit set. */ - if (detail->exc_subcode & FPS_IE) - { - *signo = SIGILL; - detail->code = ILL_FPEOPR_FAULT; - } - else if (detail->exc_subcode & FPS_DE) - { - *signo = SIGFPE; - detail->code = FPE_FLTDNR_FAULT; - } - else if (detail->exc_subcode & FPS_ZE) - { - *signo = SIGFPE; - detail->code = FPE_FLTDIV_FAULT; - } - else if (detail->exc_subcode & FPS_OE) - { - *signo = SIGFPE; - detail->code = FPE_FLTOVF_FAULT; - } - else if (detail->exc_subcode & FPS_UE) - { - *signo = SIGFPE; - detail->code = FPE_FLTUND_FAULT; - } - else if (detail->exc_subcode & FPS_PE) - { - *signo = SIGFPE; - detail->code = FPE_FLTINX_FAULT; - } - else - { - *signo = SIGFPE; - detail->code = 0; - } - break; - - /* These two can only be arithmetic exceptions if we - are in V86 mode, which sounds like emulation to me. - (See Mach 3.0 i386/trap.c.) */ - case EXC_I386_EMERR: - *signo = SIGFPE; - detail->code = FPE_EMERR_FAULT; - break; - case EXC_I386_BOUND: - *signo = SIGFPE; - detail->code = FPE_EMBND_FAULT; - break; - } - break; - - case EXC_EMULATION: - /* 3.0 doesn't give this one, why, I don't know. */ - *signo = SIGEMT; - detail->code = 0; - break; - - case EXC_SOFTWARE: - /* The only time we get this in Mach 3.0 - is for an out of bounds trap. */ - if (detail->exc_code == EXC_I386_BOUND) - { - *signo = SIGFPE; - detail->code = FPE_SUBRNG_FAULT; - } - else - { - *signo = SIGEMT; - detail->code = 0; - } - break; - - case EXC_BREAKPOINT: - *signo = SIGTRAP; - if (detail->exc_code == EXC_I386_SGL) - detail->code = DBG_SINGLE_TRAP; - else if (detail->exc_code == EXC_I386_BPT) - detail->code = DBG_BRKPNT_FAULT; - else - detail->code = 0; - break; - } -} diff --git a/sysdeps/mach/hurd/i386/init-first.c b/sysdeps/mach/hurd/i386/init-first.c deleted file mode 100644 index 6a6a694719..0000000000 --- a/sysdeps/mach/hurd/i386/init-first.c +++ /dev/null @@ -1,410 +0,0 @@ -/* Initialization code run first thing by the ELF startup code. For i386/Hurd. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "hurdstartup.h" -#include "hurdmalloc.h" /* XXX */ -#include "../locale/localeinfo.h" - -#include -#include - -extern void __mach_init (void); -extern void __init_misc (int, char **, char **); -extern void __libc_global_ctors (void); - -unsigned int __hurd_threadvar_max; -unsigned long int __hurd_threadvar_stack_offset; -unsigned long int __hurd_threadvar_stack_mask; - -#ifndef SHARED -int __libc_enable_secure; -#endif -int __libc_multiple_libcs attribute_hidden = 1; - -extern int __libc_argc attribute_hidden; -extern char **__libc_argv attribute_hidden; -extern char **_dl_argv; - -extern void *(*_cthread_init_routine) (void) __attribute__ ((weak)); -void (*_cthread_exit_routine) (int status) __attribute__ ((__noreturn__)); - -/* Things that want to be run before _hurd_init or much anything else. - Importantly, these are called before anything tries to use malloc. */ -DEFINE_HOOK (_hurd_preinit_hook, (void)); - - -/* We call this once the Hurd magic is all set up and we are ready to be a - Posixoid program. This does the same things the generic version does. */ -static void -posixland_init (int argc, char **argv, char **envp) -{ - __libc_multiple_libcs = &_dl_starting_up && !_dl_starting_up; - - /* Make sure we don't initialize twice. */ - if (!__libc_multiple_libcs) - { - /* Set the FPU control word to the proper default value. */ - __setfpucw (__fpu_control); - } - else - { - /* Initialize data structures so the additional libc can do RPCs. */ - __mach_init (); - } - - /* Save the command-line arguments. */ - __libc_argc = argc; - __libc_argv = argv; - __environ = envp; - -#ifndef SHARED - _dl_non_dynamic_init (); -#endif - __init_misc (argc, argv, envp); - - /* Initialize ctype data. */ - __ctype_init (); - -#if defined SHARED && !defined NO_CTORS_DTORS_SECTIONS - __libc_global_ctors (); -#endif -} - - -static void -init1 (int argc, char *arg0, ...) -{ - char **argv = &arg0; - char **envp = &argv[argc + 1]; - struct hurd_startup_data *d; - - while (*envp) - ++envp; - d = (void *) ++envp; - - /* If we are the bootstrap task started by the kernel, - then after the environment pointers there is no Hurd - data block; the argument strings start there. */ - if ((void *) d == argv[0]) - { -#ifndef SHARED - /* With a new enough linker (binutils-2.23 or better), - the magic __ehdr_start symbol will be available and - __libc_start_main will have done this that way already. */ - if (_dl_phdr == NULL) - { - /* We may need to see our own phdrs, e.g. for TLS setup. - Try the usual kludge to find the headers without help from - the exec server. */ - extern const void __executable_start; - const ElfW(Ehdr) *const ehdr = &__executable_start; - _dl_phdr = (const void *) ehdr + ehdr->e_phoff; - _dl_phnum = ehdr->e_phnum; - assert (ehdr->e_phentsize == sizeof (ElfW(Phdr))); - } -#endif - return; - } - -#ifndef SHARED - __libc_enable_secure = d->flags & EXEC_SECURE; - - _dl_phdr = (ElfW(Phdr) *) d->phdr; - _dl_phnum = d->phdrsz / sizeof (ElfW(Phdr)); - assert (d->phdrsz % sizeof (ElfW(Phdr)) == 0); -#endif - - _hurd_init_dtable = d->dtable; - _hurd_init_dtablesize = d->dtablesize; - - { - /* Check if the stack we are now on is different from - the one described by _hurd_stack_{base,size}. */ - - char dummy; - const vm_address_t newsp = (vm_address_t) &dummy; - - if (d->stack_size != 0 && (newsp < d->stack_base || - newsp - d->stack_base > d->stack_size)) - /* The new stack pointer does not intersect with the - stack the exec server set up for us, so free that stack. */ - __vm_deallocate (__mach_task_self (), d->stack_base, d->stack_size); - } - - if (d->portarray || d->intarray) - /* Initialize library data structures, start signal processing, etc. */ - _hurd_init (d->flags, argv, - d->portarray, d->portarraysize, - d->intarray, d->intarraysize); -} - - -static inline void -init (int *data) -{ - int argc = *data; - char **argv = (void *) (data + 1); - char **envp = &argv[argc + 1]; - struct hurd_startup_data *d; - unsigned long int threadvars[_HURD_THREADVAR_MAX]; - - /* Provide temporary storage for thread-specific variables on the - startup stack so the cthreads initialization code can use them - for malloc et al, or so we can use malloc below for the real - threadvars array. */ - memset (threadvars, 0, sizeof threadvars); - threadvars[_HURD_THREADVAR_LOCALE] = (unsigned long int) &_nl_global_locale; - __hurd_threadvar_stack_offset = (unsigned long int) threadvars; - - /* Since the cthreads initialization code uses malloc, and the - malloc initialization code needs to get at the environment, make - sure we can find it. We'll need to do this again later on since - switching stacks changes the location where the environment is - stored. */ - __environ = envp; - - while (*envp) - ++envp; - d = (void *) ++envp; - - /* The user might have defined a value for this, to get more variables. - Otherwise it will be zero on startup. We must make sure it is set - properly before before cthreads initialization, so cthreads can know - how much space to leave for thread variables. */ - if (__hurd_threadvar_max < _HURD_THREADVAR_MAX) - __hurd_threadvar_max = _HURD_THREADVAR_MAX; - - - /* After possibly switching stacks, call `init1' (above) with the user - code as the return address, and the argument data immediately above - that on the stack. */ - - if (&_cthread_init_routine && _cthread_init_routine) - { - /* Initialize cthreads, which will allocate us a new stack to run on. */ - int *newsp = (*_cthread_init_routine) (); - struct hurd_startup_data *od; - - void switch_stacks (void); - - __libc_stack_end = newsp; - - /* Copy per-thread variables from that temporary - area onto the new cthread stack. */ - memcpy (__hurd_threadvar_location_from_sp (0, newsp), - threadvars, sizeof threadvars); - - /* Copy the argdata from the old stack to the new one. */ - newsp = memcpy (newsp - ((char *) &d[1] - (char *) data), data, - (char *) d - (char *) data); - -#ifdef SHARED - /* And readjust the dynamic linker's idea of where the argument - vector lives. */ - assert (_dl_argv == argv); - _dl_argv = (void *) (newsp + 1); -#endif - - /* Set up the Hurd startup data block immediately following - the argument and environment pointers on the new stack. */ - od = ((void *) newsp + ((char *) d - (char *) data)); - if ((void *) argv[0] == d) - /* We were started up by the kernel with arguments on the stack. - There is no Hurd startup data, so zero the block. */ - memset (od, 0, sizeof *od); - else - /* Copy the Hurd startup data block to the new stack. */ - *od = *d; - - /* Push the user code address on the top of the new stack. It will - be the return address for `init1'; we will jump there with NEWSP - as the stack pointer. */ - /* The following expression would typically be written as - ``__builtin_return_address (0)''. But, for example, GCC 4.4.6 doesn't - recognize that this read operation may alias the following write - operation, and thus is free to reorder the two, clobbering the - original return address. */ - *--newsp = *((int *) __builtin_frame_address (0) + 1); - /* GCC 4.4.6 also wants us to force loading *NEWSP already here. */ - asm volatile ("# %0" : : "X" (*newsp)); - *((void **) __builtin_frame_address (0) + 1) = &switch_stacks; - /* Force NEWSP into %eax and &init1 into %ecx, which are not restored - by function return. */ - asm volatile ("# a %0 c %1" : : "a" (newsp), "c" (&init1)); - } - else - { - /* We are not using cthreads, so we will have just a single allocated - area for the per-thread variables of the main user thread. */ - unsigned long int *array; - unsigned int i; - int usercode; - - void call_init1 (void); - - array = malloc (__hurd_threadvar_max * sizeof (unsigned long int)); - if (array == NULL) - __libc_fatal ("Can't allocate single-threaded thread variables."); - - /* Copy per-thread variables from the temporary array into the - newly malloc'd space. */ - memcpy (array, threadvars, sizeof threadvars); - __hurd_threadvar_stack_offset = (unsigned long int) array; - for (i = _HURD_THREADVAR_MAX; i < __hurd_threadvar_max; ++i) - array[i] = 0; - - /* The argument data is just above the stack frame we will unwind by - returning. Mutate our own return address to run the code below. */ - /* The following expression would typically be written as - ``__builtin_return_address (0)''. But, for example, GCC 4.4.6 doesn't - recognize that this read operation may alias the following write - operation, and thus is free to reorder the two, clobbering the - original return address. */ - usercode = *((int *) __builtin_frame_address (0) + 1); - /* GCC 4.4.6 also wants us to force loading USERCODE already here. */ - asm volatile ("# %0" : : "X" (usercode)); - *((void **) __builtin_frame_address (0) + 1) = &call_init1; - /* Force USERCODE into %eax and &init1 into %ecx, which are not - restored by function return. */ - asm volatile ("# a %0 c %1" : : "a" (usercode), "c" (&init1)); - } -} - -/* These bits of inline assembler used to be located inside `init'. - However they were optimized away by gcc 2.95. */ - -/* The return address of `init' above, was redirected to here, so at - this point our stack is unwound and callers' registers restored. - Only %ecx and %eax are call-clobbered and thus still have the - values we set just above. Fetch from there the new stack pointer - we will run on, and jmp to the run-time address of `init1'; when it - returns, it will run the user code with the argument data at the - top of the stack. */ -asm ("switch_stacks:\n" - " movl %eax, %esp\n" - " jmp *%ecx"); - -/* As in the stack-switching case, at this point our stack is unwound - and callers' registers restored, and only %ecx and %eax communicate - values from the lines above. In this case we have stashed in %eax - the user code return address. Push it on the top of the stack so - it acts as init1's return address, and then jump there. */ -asm ("call_init1:\n" - " push %eax\n" - " jmp *%ecx\n"); - - -/* Do the first essential initializations that must precede all else. */ -static inline void -first_init (void) -{ - /* Initialize data structures so we can do RPCs. */ - __mach_init (); - - RUN_HOOK (_hurd_preinit_hook, ()); -} - -#ifdef SHARED -/* This function is called specially by the dynamic linker to do early - initialization of the shared C library before normal initializers - expecting a Posixoid environment can run. It gets called with the - stack set up just as the user will see it, so it can switch stacks. */ - -void -_dl_init_first (int argc, ...) -{ - first_init (); - - /* If we use ``__builtin_frame_address (0) + 2'' here, GCC gets confused. */ - init (&argc); -} -#endif - - -#ifdef SHARED -/* The regular posixland initialization is what goes into libc's - normal initializer. */ -/* NOTE! The linker notices the magical name `_init' and sets the DT_INIT - pointer in the dynamic section based solely on that. It is convention - for this function to be in the `.init' section, but the symbol name is - the only thing that really matters!! */ -strong_alias (posixland_init, _init); - -void -__libc_init_first (int argc, char **argv, char **envp) -{ - /* Everything was done in the shared library initializer, _init. */ -} -#else -strong_alias (posixland_init, __libc_init_first); - - -/* XXX This is all a crock and I am not happy with it. - This poorly-named function is called by static-start.S, - which should not exist at all. */ -void -_hurd_stack_setup (void) -{ - intptr_t caller = (intptr_t) __builtin_return_address (0); - - void doinit (intptr_t *data) - { - /* This function gets called with the argument data at TOS. */ - void doinit1 (int argc, ...) - { - /* If we use ``__builtin_frame_address (0) + 2'' here, GCC gets - confused. */ - init ((int *) &argc); - } - - /* Push the user return address after the argument data, and then - jump to `doinit1' (above), so it is as if __libc_init_first's - caller had called `doinit1' with the argument data already on the - stack. */ - *--data = caller; - asm volatile ("movl %0, %%esp\n" /* Switch to new outermost stack. */ - "movl $0, %%ebp\n" /* Clear outermost frame pointer. */ - "jmp *%1" : : "r" (data), "r" (&doinit1) : "sp"); - /* NOTREACHED */ - } - - first_init (); - - _hurd_startup ((void **) __builtin_frame_address (0) + 2, &doinit); -} -#endif - - -/* This function is defined here so that if this file ever gets into - ld.so we will get a link error. Having this file silently included - in ld.so causes disaster, because the _init definition above will - cause ld.so to gain an init function, which is not a cool thing. */ - -void -_dl_start (void) -{ - abort (); -} diff --git a/sysdeps/mach/hurd/i386/intr-msg.h b/sysdeps/mach/hurd/i386/intr-msg.h deleted file mode 100644 index 43cd79bc28..0000000000 --- a/sysdeps/mach/hurd/i386/intr-msg.h +++ /dev/null @@ -1,112 +0,0 @@ -/* Machine-dependent details of interruptible RPC messaging. i386 version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* Note that we must mark OPTION and TIMEOUT as outputs of this operation, - to indicate that the signal thread might mutate them as part - of sending us to a signal handler. */ -#define INTR_MSG_TRAP(msg, option, send_size, rcv_size, rcv_name, timeout, notify) \ -({ \ - error_t err; \ - asm (".globl _hurd_intr_rpc_msg_do_trap\n" \ - ".globl _hurd_intr_rpc_msg_in_trap\n" \ - ".globl _hurd_intr_rpc_msg_cx_sp\n" \ - ".globl _hurd_intr_rpc_msg_sp_restored\n" \ - " movl %%esp, %%ecx\n" \ - " leal %3, %%esp\n" \ - "_hurd_intr_rpc_msg_cx_sp: movl $-25, %%eax\n" \ - "_hurd_intr_rpc_msg_do_trap: lcall $7, $0 # status in %0\n" \ - "_hurd_intr_rpc_msg_in_trap: movl %%ecx, %%esp\n" \ - "_hurd_intr_rpc_msg_sp_restored:" \ - : "=a" (err), "+m" (option), "+m" (timeout) \ - : "m" ((&msg)[-1]) \ - : "ecx"); \ - err; \ -}) - - -static void inline -INTR_MSG_BACK_OUT (struct i386_thread_state *state) -{ - extern const void _hurd_intr_rpc_msg_cx_sp; - if (state->eip >= (natural_t) &_hurd_intr_rpc_msg_cx_sp) - state->uesp = state->ecx; - else - state->ecx = state->uesp; -} - -#include "hurdfault.h" - -/* This cannot be an inline function because it calls setjmp. */ -#define SYSCALL_EXAMINE(state, callno) \ -({ \ - struct { unsigned int c[2]; } *p = (void *) ((state)->eip - 7); \ - int result; \ - if (_hurdsig_catch_memory_fault (p)) \ - return 0; \ - if (result = p->c[0] == 0x0000009a && (p->c[1] & 0x00ffffff) == 0x00000700) \ - /* The PC is just after an `lcall $7,$0' instruction. \ - This is a system call in progress; %eax holds the call number. */ \ - *(callno) = (state)->eax; \ - _hurdsig_end_catch_fault (); \ - result; \ -}) - - -struct mach_msg_trap_args - { - void *retaddr; /* Address mach_msg_trap will return to. */ - /* This is the order of arguments to mach_msg_trap. */ - mach_msg_header_t *msg; - mach_msg_option_t option; - mach_msg_size_t send_size; - mach_msg_size_t rcv_size; - mach_port_t rcv_name; - mach_msg_timeout_t timeout; - mach_port_t notify; - }; - - -/* This cannot be an inline function because it calls setjmp. */ -#define MSG_EXAMINE(state, msgid, rcvname, send_name, opt, tmout) \ -({ \ - const struct mach_msg_trap_args *args = (const void *) (state)->uesp; \ - mach_msg_header_t *msg; \ - _hurdsig_catch_memory_fault (args) ? -1 : \ - ({ \ - msg = args->msg; \ - *(opt) = args->option; \ - *(tmout) = args->timeout; \ - *(rcvname) = args->rcv_name; \ - _hurdsig_end_catch_fault (); \ - if (msg == 0) \ - { \ - *(send_name) = MACH_PORT_NULL; \ - *(msgid) = 0; \ - } \ - else \ - { \ - if (_hurdsig_catch_memory_fault (msg)) \ - return -1; \ - *(send_name) = msg->msgh_remote_port; \ - *(msgid) = msg->msgh_id; \ - _hurdsig_end_catch_fault (); \ - } \ - 0; \ - }); \ -}) diff --git a/sysdeps/mach/hurd/i386/ioperm.c b/sysdeps/mach/hurd/i386/ioperm.c deleted file mode 100644 index c3dc1a3354..0000000000 --- a/sysdeps/mach/hurd/i386/ioperm.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Access to hardware i/o ports. Hurd/x86 version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -ioperm (unsigned long int from, unsigned long int num, int turn_on) -{ -#if ! HAVE_I386_IO_PERM_MODIFY - return __hurd_fail (ENOSYS); -#else - error_t err; - device_t devmaster; - - /* With the device master port we get a capability that represents - this range of io ports. */ - err = __get_privileged_ports (NULL, &devmaster); - if (! err) - { - io_perm_t perm; - err = __i386_io_perm_create (devmaster, from, from + num - 1, &perm); - __mach_port_deallocate (__mach_task_self (), devmaster); - if (! err) - { - /* Now we add or remove that set from our task's bitmap. */ - err = __i386_io_perm_modify (__mach_task_self (), perm, turn_on); - __mach_port_deallocate (__mach_task_self (), perm); - } - - if (err == MIG_BAD_ID) /* Old kernels don't have these RPCs. */ - err = ENOSYS; - } - - return err ? __hurd_fail (err) : 0; -#endif -} diff --git a/sysdeps/mach/hurd/i386/longjmp-ts.c b/sysdeps/mach/hurd/i386/longjmp-ts.c deleted file mode 100644 index ef84c665ec..0000000000 --- a/sysdeps/mach/hurd/i386/longjmp-ts.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Perform a `longjmp' on a Mach thread_state. i386 version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -/* Set up STATE to do the equivalent of `longjmp (ENV, VAL);'. */ - -void -_hurd_longjmp_thread_state (void *state, jmp_buf env, int val) -{ - struct i386_thread_state *ts = state; - - ts->ebx = env[0].__jmpbuf[JB_BX]; - ts->esi = env[0].__jmpbuf[JB_SI]; - ts->edi = env[0].__jmpbuf[JB_DI]; - ts->ebp = env[0].__jmpbuf[JB_BP]; - ts->uesp = env[0].__jmpbuf[JB_SP]; - ts->eip = env[0].__jmpbuf[JB_PC]; - ts->eax = val ?: 1; -} diff --git a/sysdeps/mach/hurd/i386/sigcontextinfo.h b/sysdeps/mach/hurd/i386/sigcontextinfo.h deleted file mode 100644 index a8be1455d5..0000000000 --- a/sysdeps/mach/hurd/i386/sigcontextinfo.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define SIGCONTEXT struct sigcontext -#define SIGCONTEXT_EXTRA_ARGS -#define GET_PC(ctx) ((void *) (ctx).sc_eip) -#define GET_FRAME(ctx) ((void *) (ctx).sc_ebp) -#define GET_STACK(ctx) ((void *) (ctx).sc_uesp) -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff --git a/sysdeps/mach/hurd/i386/signal-defines.sym b/sysdeps/mach/hurd/i386/signal-defines.sym deleted file mode 100644 index e42bbbe061..0000000000 --- a/sysdeps/mach/hurd/i386/signal-defines.sym +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include - --- - -HURD_SIGSTATE__SIGALTSTACK__OFFSET offsetof(struct hurd_sigstate, sigaltstack) - -SIGALTSTACK__SS_SP__OFFSET offsetof(stack_t, ss_sp) -SIGALTSTACK__SS_SIZE__OFFSET offsetof(stack_t, ss_size) -SIGALTSTACK__SS_FLAGS__OFFSET offsetof(stack_t, ss_flags) diff --git a/sysdeps/mach/hurd/i386/sigreturn.c b/sysdeps/mach/hurd/i386/sigreturn.c deleted file mode 100644 index ce0f656ff0..0000000000 --- a/sysdeps/mach/hurd/i386/sigreturn.c +++ /dev/null @@ -1,139 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -register int *sp asm ("%esp"); - -#include -#include -#include -#include -#include -#include - -int -__sigreturn (struct sigcontext *scp) -{ - struct hurd_sigstate *ss; - struct hurd_userlink *link = (void *) &scp[1]; - mach_port_t *reply_port; - - if (scp == NULL || (scp->sc_mask & _SIG_CANT_MASK)) - { - errno = EINVAL; - return -1; - } - - ss = _hurd_self_sigstate (); - __spin_lock (&ss->lock); - - /* Remove the link on the `active resources' chain added by - _hurd_setup_sighandler. Its purpose was to make sure - that we got called; now we have, it is done. */ - _hurd_userlink_unlink (link); - - /* Restore the set of blocked signals, and the intr_port slot. */ - ss->blocked = scp->sc_mask; - ss->intr_port = scp->sc_intr_port; - - /* Check for pending signals that were blocked by the old set. */ - if (ss->pending & ~ss->blocked) - { - /* There are pending signals that just became unblocked. Wake up the - signal thread to deliver them. But first, squirrel away SCP where - the signal thread will notice it if it runs another handler, and - arrange to have us called over again in the new reality. */ - ss->context = scp; - __spin_unlock (&ss->lock); - __msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ()); - /* If a pending signal was handled, sig_post never returned. - If it did return, the pending signal didn't run a handler; - proceed as usual. */ - __spin_lock (&ss->lock); - ss->context = NULL; - } - - if (scp->sc_onstack) - { - ss->sigaltstack.ss_flags &= ~SS_ONSTACK; /* XXX threadvars */ - /* XXX cannot unlock until off sigstack */ - abort (); - } - else - __spin_unlock (&ss->lock); - - /* Destroy the MiG reply port used by the signal handler, and restore the - reply port in use by the thread when interrupted. */ - reply_port = - (mach_port_t *) __hurd_threadvar_location (_HURD_THREADVAR_MIG_REPLY); - if (*reply_port) - { - mach_port_t port = *reply_port; - - /* Assigning MACH_PORT_DEAD here tells libc's mig_get_reply_port not to - get another reply port, but avoids mig_dealloc_reply_port trying to - deallocate it after the receive fails (which it will, because the - reply port will be bogus, whether we do this or not). */ - *reply_port = MACH_PORT_DEAD; - - __mach_port_destroy (__mach_task_self (), port); - } - *reply_port = scp->sc_reply_port; - - if (scp->sc_fpused) - /* Restore the FPU state. Mach conveniently stores the state - in the format the i387 `frstor' instruction uses to restore it. */ - asm volatile ("frstor %0" : : "m" (scp->sc_fpsave)); - - { - /* There are convenient instructions to pop state off the stack, so we - copy the registers onto the user's stack, switch there, pop and - return. */ - - int *usp = (int *) scp->sc_uesp; - - *--usp = scp->sc_eip; - *--usp = scp->sc_efl; - memcpy (usp -= 12, &scp->sc_i386_thread_state, 12 * sizeof (int)); - - sp = usp; - -#define A(line) asm volatile (#line) - /* The members in the sigcontext are arranged in this order - so we can pop them easily. */ - - /* Pop the segment registers (except %cs and %ss, done last). */ - A (popl %gs); - A (popl %fs); - A (popl %es); - A (popl %ds); - /* Pop the general registers. */ - A (popa); - /* Pop the processor flags. */ - A (popf); - /* Return to the saved PC. */ - A (ret); - - /* Firewall. */ - A (hlt); -#undef A - } - - /* NOTREACHED */ - return -1; -} - -weak_alias (__sigreturn, sigreturn) diff --git a/sysdeps/mach/hurd/i386/static-start.S b/sysdeps/mach/hurd/i386/static-start.S deleted file mode 100644 index 03eb204f9d..0000000000 --- a/sysdeps/mach/hurd/i386/static-start.S +++ /dev/null @@ -1,27 +0,0 @@ -/* Startup code for statically linked Hurd/i386 binaries. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - .text - .globl _start -_start: - call _hurd_stack_setup - xorl %edx, %edx - jmp _start1 - -#define _start _start1 -#include diff --git a/sysdeps/mach/hurd/i386/sys/io.h b/sysdeps/mach/hurd/i386/sys/io.h deleted file mode 100644 index 9f3dbfffa7..0000000000 --- a/sysdeps/mach/hurd/i386/sys/io.h +++ /dev/null @@ -1,177 +0,0 @@ -/* Access to hardware i/o ports. GNU/x86 version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IO_H -#define _SYS_IO_H 1 - -#include - -__BEGIN_DECLS - -/* If TURN_ON is TRUE, request for permission to do direct i/o on the - port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O - permission off for that range. This call requires root privileges. */ -extern int ioperm (unsigned long int __from, unsigned long int __num, - int __turn_on) __THROW; - -/* Set the I/O privilege level to LEVEL. If LEVEL>3, permission to - access any I/O port is granted. This call requires root - privileges. */ -extern int iopl (int __level) __THROW; - -#if defined __GNUC__ && __GNUC__ >= 2 - -static __inline unsigned char -inb (unsigned short int port) -{ - unsigned char _v; - - __asm__ __volatile__ ("inb %w1,%0":"=a" (_v):"Nd" (port)); - return _v; -} - -static __inline unsigned char -inb_p (unsigned short int port) -{ - unsigned char _v; - - __asm__ __volatile__ ("inb %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (port)); - return _v; -} - -static __inline unsigned short int -inw (unsigned short int port) -{ - unsigned short _v; - - __asm__ __volatile__ ("inw %w1,%0":"=a" (_v):"Nd" (port)); - return _v; -} - -static __inline unsigned short int -inw_p (unsigned short int port) -{ - unsigned short int _v; - - __asm__ __volatile__ ("inw %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (port)); - return _v; -} - -static __inline unsigned int -inl (unsigned short int port) -{ - unsigned int _v; - - __asm__ __volatile__ ("inl %w1,%0":"=a" (_v):"Nd" (port)); - return _v; -} - -static __inline unsigned int -inl_p (unsigned short int port) -{ - unsigned int _v; - __asm__ __volatile__ ("inl %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (port)); - return _v; -} - -static __inline void -outb (unsigned char value, unsigned short int port) -{ - __asm__ __volatile__ ("outb %b0,%w1": :"a" (value), "Nd" (port)); -} - -static __inline void -outb_p (unsigned char value, unsigned short int port) -{ - __asm__ __volatile__ ("outb %b0,%w1\noutb %%al,$0x80": :"a" (value), - "Nd" (port)); -} - -static __inline void -outw (unsigned short int value, unsigned short int port) -{ - __asm__ __volatile__ ("outw %w0,%w1": :"a" (value), "Nd" (port)); - -} - -static __inline void -outw_p (unsigned short int value, unsigned short int port) -{ - __asm__ __volatile__ ("outw %w0,%w1\noutb %%al,$0x80": :"a" (value), - "Nd" (port)); -} - -static __inline void -outl (unsigned int value, unsigned short int port) -{ - __asm__ __volatile__ ("outl %0,%w1": :"a" (value), "Nd" (port)); -} - -static __inline void -outl_p (unsigned int value, unsigned short int port) -{ - __asm__ __volatile__ ("outl %0,%w1\noutb %%al,$0x80": :"a" (value), - "Nd" (port)); -} - -static __inline void -insb (unsigned short int port, void *addr, unsigned long int count) -{ - __asm__ __volatile__ ("cld ; rep ; insb":"=D" (addr), - "=c" (count):"d" (port), "0" (addr), "1" (count)); -} - -static __inline void -insw (unsigned short int port, void *addr, unsigned long int count) -{ - __asm__ __volatile__ ("cld ; rep ; insw":"=D" (addr), - "=c" (count):"d" (port), "0" (addr), "1" (count)); -} - -static __inline void -insl (unsigned short int port, void *addr, unsigned long int count) -{ - __asm__ __volatile__ ("cld ; rep ; insl":"=D" (addr), - "=c" (count):"d" (port), "0" (addr), "1" (count)); -} - -static __inline void -outsb (unsigned short int port, const void *addr, unsigned long int count) -{ - __asm__ __volatile__ ("cld ; rep ; outsb":"=S" (addr), - "=c" (count):"d" (port), "0" (addr), "1" (count)); -} - -static __inline void -outsw (unsigned short int port, const void *addr, unsigned long int count) -{ - __asm__ __volatile__ ("cld ; rep ; outsw":"=S" (addr), - "=c" (count):"d" (port), "0" (addr), "1" (count)); -} - -static __inline void -outsl (unsigned short int port, const void *addr, unsigned long int count) -{ - __asm__ __volatile__ ("cld ; rep ; outsl":"=S" (addr), - "=c" (count):"d" (port), "0" (addr), "1" (count)); -} - -#endif /* GNU C */ - -__END_DECLS -#endif /* _SYS_IO_H */ diff --git a/sysdeps/mach/hurd/i386/tls.h b/sysdeps/mach/hurd/i386/tls.h deleted file mode 100644 index 74b444ef19..0000000000 --- a/sysdeps/mach/hurd/i386/tls.h +++ /dev/null @@ -1,169 +0,0 @@ -/* Definitions for thread-local data handling. Hurd/i386 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _I386_TLS_H -#define _I386_TLS_H - - -/* Some things really need not be machine-dependent. */ -#include - - -#ifndef __ASSEMBLER__ -# include - -/* Type of the TCB. */ -typedef struct -{ - void *tcb; /* Points to this structure. */ - dtv_t *dtv; /* Vector of pointers to TLS data. */ - thread_t self; /* This thread's control port. */ - int multiple_threads; - uintptr_t sysinfo; - uintptr_t stack_guard; - uintptr_t pointer_guard; - int gscope_flag; - int private_futex; - /* Reservation of some values for the TM ABI. */ - void *__private_tm[4]; - /* GCC split stack support. */ - void *__private_ss; -} tcbhead_t; -#endif - - -/* The TCB can have any size and the memory following the address the - thread pointer points to is unspecified. Allocate the TCB there. */ -#define TLS_TCB_AT_TP 1 -#define TLS_DTV_AT_TP 0 - -#ifndef __ASSEMBLER__ - -/* Use i386-specific RPCs to arrange that %gs segment register prefix - addresses the TCB in each thread. */ -# include - -# ifndef HAVE_I386_SET_GDT -# define __i386_set_gdt(thr, sel, desc) ((void) (thr), (void) (sel), (void) (desc), MIG_BAD_ID) -# endif - -# include -# include - -# define HURD_TLS_DESC_DECL(desc, tcb) \ - struct descriptor desc = \ - { /* low word: */ \ - 0xffff /* limit 0..15 */ \ - | (((unsigned int) (tcb)) << 16) /* base 0..15 */ \ - , /* high word: */ \ - ((((unsigned int) (tcb)) >> 16) & 0xff) /* base 16..23 */ \ - | ((0x12 | 0x60 | 0x80) << 8) /* access = ACC_DATA_W|ACC_PL_U|ACC_P */ \ - | (0xf << 16) /* limit 16..19 */ \ - | ((4 | 8) << 20) /* granularity = SZ_32|SZ_G */ \ - | (((unsigned int) (tcb)) & 0xff000000) /* base 24..31 */ \ - } - - -static inline const char * __attribute__ ((unused)) -_hurd_tls_init (tcbhead_t *tcb) -{ - HURD_TLS_DESC_DECL (desc, tcb); - - /* This field is used by TLS accesses to get our "thread pointer" - from the TLS point of view. */ - tcb->tcb = tcb; - - /* Cache our thread port. */ - tcb->self = __mach_thread_self (); - - /* Get the first available selector. */ - int sel = -1; - error_t err = __i386_set_gdt (tcb->self, &sel, desc); - if (err == MIG_BAD_ID) - { - /* Old kernel, use a per-thread LDT. */ - sel = 0x27; - err = __i386_set_ldt (tcb->self, sel, &desc, 1); - assert_perror (err); - if (err) - return "i386_set_ldt failed"; - } - else if (err) - { - assert_perror (err); /* Separate from above with different line #. */ - return "i386_set_gdt failed"; - } - - /* Now install the new selector. */ - asm volatile ("mov %w0, %%gs" :: "q" (sel)); - - return 0; -} - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(descr) \ - _hurd_tls_init ((tcbhead_t *) (descr)) - -/* Return the TCB address of the current thread. */ -# define THREAD_SELF \ - ({ tcbhead_t *__tcb; \ - __asm__ ("movl %%gs:%c1,%0" : "=r" (__tcb) \ - : "i" (offsetof (tcbhead_t, tcb))); \ - __tcb;}) - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtvp) \ - ({ asm volatile ("movl %0,%%gs:%P1" \ - : : "ir" (dtvp), "i" (offsetof (tcbhead_t, dtv))); }) - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - ({ dtv_t *_dtv; \ - asm ("movl %%gs:%P1,%0" : "=q" (_dtv) : "i" (offsetof (tcbhead_t, dtv)));\ - _dtv; }) - -# include - -/* Set up TLS in the new thread of a fork child, copying from our own. */ -static inline error_t __attribute__ ((unused)) -_hurd_tls_fork (thread_t child, struct i386_thread_state *state) -{ - /* Fetch the selector set by _hurd_tls_init. */ - int sel; - asm ("mov %%gs, %w0" : "=q" (sel) : "0" (0)); - if (sel == state->ds) /* _hurd_tls_init was never called. */ - return 0; - - tcbhead_t *const tcb = THREAD_SELF; - HURD_TLS_DESC_DECL (desc, tcb); - error_t err; - - if (__builtin_expect (sel, 0x50) & 4) /* LDT selector */ - err = __i386_set_ldt (child, sel, &desc, 1); - else - err = __i386_set_gdt (child, &sel, desc); - - state->gs = sel; - return err; -} - -#endif /* !__ASSEMBLER__ */ - -#endif /* i386/tls.h */ diff --git a/sysdeps/mach/hurd/i386/trampoline.c b/sysdeps/mach/hurd/i386/trampoline.c deleted file mode 100644 index 002415929c..0000000000 --- a/sysdeps/mach/hurd/i386/trampoline.c +++ /dev/null @@ -1,265 +0,0 @@ -/* Set thread_state for sighandler, and sigcontext to recover. i386 version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include "hurdfault.h" -#include - - -struct sigcontext * -_hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler, - int signo, struct hurd_signal_detail *detail, - volatile int rpc_wait, - struct machine_thread_all_state *state) -{ - void trampoline (void); - void rpc_wait_trampoline (void); - void firewall (void); - extern const void _hurd_intr_rpc_msg_cx_sp; - extern const void _hurd_intr_rpc_msg_sp_restored; - void *volatile sigsp; - struct sigcontext *scp; - struct - { - int signo; - long int sigcode; - struct sigcontext *scp; /* Points to ctx, below. */ - void *sigreturn_addr; - void *sigreturn_returns_here; - struct sigcontext *return_scp; /* Same; arg to sigreturn. */ - struct sigcontext ctx; - struct hurd_userlink link; - } *stackframe; - - if (ss->context) - { - /* We have a previous sigcontext that sigreturn was about - to restore when another signal arrived. We will just base - our setup on that. */ - if (! _hurdsig_catch_memory_fault (ss->context)) - { - memcpy (&state->basic, &ss->context->sc_i386_thread_state, - sizeof (state->basic)); - memcpy (&state->fpu, &ss->context->sc_i386_float_state, - sizeof (state->fpu)); - state->set |= (1 << i386_THREAD_STATE) | (1 << i386_FLOAT_STATE); - } - } - - if (! machine_get_basic_state (ss->thread, state)) - return NULL; - - /* Save the original SP in the gratuitous `esp' slot. - We may need to reset the SP (the `uesp' slot) to avoid clobbering an - interrupted RPC frame. */ - state->basic.esp = state->basic.uesp; - - if ((ss->actions[signo].sa_flags & SA_ONSTACK) && - !(ss->sigaltstack.ss_flags & (SS_DISABLE|SS_ONSTACK))) - { - sigsp = ss->sigaltstack.ss_sp + ss->sigaltstack.ss_size; - ss->sigaltstack.ss_flags |= SS_ONSTACK; - /* XXX need to set up base of new stack for - per-thread variables, cthreads. */ - } - /* This code has intimate knowledge of the special mach_msg system call - done in intr-msg.c; that code does (see intr-msg.h): - movl %esp, %ecx - leal ARGS, %esp - _hurd_intr_rpc_msg_cx_sp: movl $-25, %eax - _hurd_intr_rpc_msg_do_trap: lcall $7, $0 - _hurd_intr_rpc_msg_in_trap: movl %ecx, %esp - _hurd_intr_rpc_msg_sp_restored: - We must check for the window during which %esp points at the - mach_msg arguments. The space below until %ecx is used by - the _hurd_intr_rpc_mach_msg frame, and must not be clobbered. */ - else if (state->basic.eip >= (int) &_hurd_intr_rpc_msg_cx_sp && - state->basic.eip < (int) &_hurd_intr_rpc_msg_sp_restored) - /* The SP now points at the mach_msg args, but there is more stack - space used below it. The real SP is saved in %ecx; we must push the - new frame below there, and restore that value as the SP on - sigreturn. */ - sigsp = (char *) (state->basic.uesp = state->basic.ecx); - else - sigsp = (char *) state->basic.uesp; - - /* Push the arguments to call `trampoline' on the stack. */ - sigsp -= sizeof (*stackframe); - stackframe = sigsp; - - if (_hurdsig_catch_memory_fault (stackframe)) - { - /* We got a fault trying to write the stack frame. - We cannot set up the signal handler. - Returning NULL tells our caller, who will nuke us with a SIGILL. */ - return NULL; - } - else - { - int ok; - - extern void _hurdsig_longjmp_from_handler (void *, jmp_buf, int); - - /* Add a link to the thread's active-resources list. We mark this as - the only user of the "resource", so the cleanup function will be - called by any longjmp which is unwinding past the signal frame. - The cleanup function (in sigunwind.c) will make sure that all the - appropriate cleanups done by sigreturn are taken care of. */ - stackframe->link.cleanup = &_hurdsig_longjmp_from_handler; - stackframe->link.cleanup_data = &stackframe->ctx; - stackframe->link.resource.next = NULL; - stackframe->link.resource.prevp = NULL; - stackframe->link.thread.next = ss->active_resources; - stackframe->link.thread.prevp = &ss->active_resources; - if (stackframe->link.thread.next) - stackframe->link.thread.next->thread.prevp - = &stackframe->link.thread.next; - ss->active_resources = &stackframe->link; - - /* Set up the arguments for the signal handler. */ - stackframe->signo = signo; - stackframe->sigcode = detail->code; - stackframe->scp = stackframe->return_scp = scp = &stackframe->ctx; - stackframe->sigreturn_addr = &__sigreturn; - stackframe->sigreturn_returns_here = firewall; /* Crash on return. */ - - /* Set up the sigcontext from the current state of the thread. */ - - scp->sc_onstack = ss->sigaltstack.ss_flags & SS_ONSTACK ? 1 : 0; - - /* struct sigcontext is laid out so that starting at sc_gs mimics a - struct i386_thread_state. */ - memcpy (&scp->sc_i386_thread_state, - &state->basic, sizeof (state->basic)); - - /* struct sigcontext is laid out so that starting at sc_fpkind mimics - a struct i386_float_state. */ - ok = machine_get_state (ss->thread, state, i386_FLOAT_STATE, - &state->fpu, &scp->sc_i386_float_state, - sizeof (state->fpu)); - - _hurdsig_end_catch_fault (); - - if (! ok) - return NULL; - } - - /* Modify the thread state to call the trampoline code on the new stack. */ - if (rpc_wait) - { - /* The signalee thread was blocked in a mach_msg_trap system call, - still waiting for a reply. We will have it run the special - trampoline code which retries the message receive before running - the signal handler. - - To do this we change the OPTION argument on its stack to enable only - message reception, since the request message has already been - sent. */ - - struct mach_msg_trap_args *args = (void *) state->basic.esp; - - if (_hurdsig_catch_memory_fault (args)) - { - /* Faulted accessing ARGS. Bomb. */ - return NULL; - } - - assert (args->option & MACH_RCV_MSG); - /* Disable the message-send, since it has already completed. The - calls we retry need only wait to receive the reply message. */ - args->option &= ~MACH_SEND_MSG; - - /* Limit the time to receive the reply message, in case the server - claimed that `interrupt_operation' succeeded but in fact the RPC - is hung. */ - args->option |= MACH_RCV_TIMEOUT; - args->timeout = _hurd_interrupted_rpc_timeout; - - _hurdsig_end_catch_fault (); - - state->basic.eip = (int) rpc_wait_trampoline; - /* The reply-receiving trampoline code runs initially on the original - user stack. We pass it the signal stack pointer in %ebx. */ - state->basic.uesp = state->basic.esp; /* Restore mach_msg syscall SP. */ - state->basic.ebx = (int) sigsp; - /* After doing the message receive, the trampoline code will need to - update the %eax value to be restored by sigreturn. To simplify - the assembly code, we pass the address of its slot in SCP to the - trampoline code in %ecx. */ - state->basic.ecx = (int) &scp->sc_eax; - } - else - { - state->basic.eip = (int) trampoline; - state->basic.uesp = (int) sigsp; - } - /* We pass the handler function to the trampoline code in %edx. */ - state->basic.edx = (int) handler; - - /* The x86 ABI says the DF bit is clear on entry to any function. */ - state->basic.efl &= ~EFL_DF; - - return scp; -} - -/* The trampoline code follows. This used to be located inside - _hurd_setup_sighandler, but was optimized away by gcc 2.95. */ - -asm ("rpc_wait_trampoline:\n"); - /* This is the entry point when we have an RPC reply message to receive - before running the handler. The MACH_MSG_SEND bit has already been - cleared in the OPTION argument on our stack. The interrupted user - stack pointer has not been changed, so the system call can find its - arguments; the signal stack pointer is in %ebx. For our convenience, - %ecx points to the sc_eax member of the sigcontext. */ -asm (/* Retry the interrupted mach_msg system call. */ - "movl $-25, %eax\n" /* mach_msg_trap */ - "lcall $7, $0\n" - /* When the sigcontext was saved, %eax was MACH_RCV_INTERRUPTED. But - now the message receive has completed and the original caller of - the RPC (i.e. the code running when the signal arrived) needs to - see the final return value of the message receive in %eax. So - store the new %eax value into the sc_eax member of the sigcontext - (whose address is in %ecx to make this code simpler). */ - "movl %eax, (%ecx)\n" - /* Switch to the signal stack. */ - "movl %ebx, %esp\n"); - - asm ("trampoline:\n"); - /* Entry point for running the handler normally. The arguments to the - handler function are already on the top of the stack: - - 0(%esp) SIGNO - 4(%esp) SIGCODE - 8(%esp) SCP - */ -asm ("call *%edx\n" /* Call the handler function. */ - "addl $12, %esp\n" /* Pop its args. */ - /* The word at the top of stack is &__sigreturn; following are a dummy - word to fill the slot for the address for __sigreturn to return to, - and a copy of SCP for __sigreturn's argument. "Return" to calling - __sigreturn (SCP); this call never returns. */ - "ret"); - -asm ("firewall:\n" - "hlt"); diff --git a/sysdeps/mach/hurd/if_index.c b/sysdeps/mach/hurd/if_index.c deleted file mode 100644 index 2b9041a3ba..0000000000 --- a/sysdeps/mach/hurd/if_index.c +++ /dev/null @@ -1,196 +0,0 @@ -/* Find network interface names and index numbers. Hurd version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#include -#include -#include - -/* Return the interface index corresponding to interface IFNAME. - On error, return 0. */ -unsigned int -__if_nametoindex (const char *ifname) -{ - struct ifreq ifr; - int fd = __opensock (); - - if (fd < 0) - return 0; - - strncpy (ifr.ifr_name, ifname, IFNAMSIZ); - if (__ioctl (fd, SIOCGIFINDEX, &ifr) < 0) - { - int saved_errno = errno; - __close (fd); - if (saved_errno == EINVAL || saved_errno == ENOTTY) - __set_errno (ENOSYS); - return 0; - } - __close (fd); - return ifr.ifr_ifindex; -} -libc_hidden_def (__if_nametoindex) -weak_alias (__if_nametoindex, if_nametoindex) -libc_hidden_weak (if_nametoindex) - -/* Free the structure IFN returned by if_nameindex. */ -void -__if_freenameindex (struct if_nameindex *ifn) -{ - struct if_nameindex *ptr = ifn; - while (ptr->if_name || ptr->if_index) - { - free (ptr->if_name); - ++ptr; - } - free (ifn); -} -libc_hidden_def (__if_freenameindex) -weak_alias (__if_freenameindex, if_freenameindex) -libc_hidden_weak (if_freenameindex) - -/* Return an array of if_nameindex structures, one for each network - interface present, plus one indicating the end of the array. On - error, return NULL. */ -struct if_nameindex * -__if_nameindex (void) -{ - error_t err = 0; - char data[2048]; - file_t server; - int fd = __opensock (); - struct ifconf ifc; - unsigned int nifs, i; - struct if_nameindex *idx = NULL; - - ifc.ifc_buf = data; - - if (fd < 0) - return NULL; - - server = _hurd_socket_server (PF_INET, 0); - if (server == MACH_PORT_NULL) - nifs = 0; - else - { - size_t len = sizeof data; - err = __pfinet_siocgifconf (server, -1, &ifc.ifc_buf, &len); - if (err == MACH_SEND_INVALID_DEST || err == MIG_SERVER_DIED) - { - /* On the first use of the socket server during the operation, - allow for the old server port dying. */ - server = _hurd_socket_server (PF_INET, 1); - if (server == MACH_PORT_NULL) - goto out; - err = __pfinet_siocgifconf (server, -1, &ifc.ifc_buf, &len); - } - if (err) - goto out; - - ifc.ifc_len = len; - nifs = len / sizeof (struct ifreq); - } - - idx = malloc ((nifs + 1) * sizeof (struct if_nameindex)); - if (idx == NULL) - { - err = ENOBUFS; - goto out; - } - - for (i = 0; i < nifs; ++i) - { - struct ifreq *ifr = &ifc.ifc_req[i]; - idx[i].if_name = __strdup (ifr->ifr_name); - if (idx[i].if_name == NULL - || __ioctl (fd, SIOCGIFINDEX, ifr) < 0) - { - unsigned int j; - err = errno; - - for (j = 0; j < i; ++j) - free (idx[j].if_name); - free (idx); - idx = NULL; - - if (err == EINVAL) - err = ENOSYS; - else if (err == ENOMEM) - err = ENOBUFS; - goto out; - } - idx[i].if_index = ifr->ifr_ifindex; - } - - idx[i].if_index = 0; - idx[i].if_name = NULL; - - out: - __close (fd); - if (data != ifc.ifc_buf) - __vm_deallocate (__mach_task_self (), (vm_address_t) ifc.ifc_buf, - ifc.ifc_len); - __set_errno (err); - return idx; -} -weak_alias (__if_nameindex, if_nameindex) -libc_hidden_weak (if_nameindex) - -/* Store the name of the interface corresponding to index IFINDEX in - IFNAME (which has space for at least IFNAMSIZ characters). Return - IFNAME, or NULL on error. */ -char * -__if_indextoname (unsigned int ifindex, char *ifname) -{ - struct ifreq ifr; - int fd = __opensock (); - - if (fd < 0) - return NULL; - - ifr.ifr_ifindex = ifindex; - if (__ioctl (fd, SIOCGIFNAME, &ifr) < 0) - { - int saved_errno = errno; - __close (fd); - if (saved_errno == EINVAL || saved_errno == ENOTTY) - __set_errno (ENOSYS); - else if (saved_errno == ENODEV) - __set_errno (ENXIO); - return NULL; - } - __close (fd); - return strncpy (ifname, ifr.ifr_name, IFNAMSIZ); -} -weak_alias (__if_indextoname, if_indextoname) -libc_hidden_weak (if_indextoname) - -#if 0 -void -internal_function -__protocol_available (int *have_inet, int *have_inet6) -{ - *have_inet = _hurd_socket_server (PF_INET, 0) != MACH_PORT_NULL; - *have_inet6 = _hurd_socket_server (PF_INET6, 0) != MACH_PORT_NULL; -} -#endif diff --git a/sysdeps/mach/hurd/ifreq.c b/sysdeps/mach/hurd/ifreq.c deleted file mode 100644 index fedc68d8fb..0000000000 --- a/sysdeps/mach/hurd/ifreq.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Fetch the host's network interface list. Hurd version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -void -__ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd) -{ - file_t server; - - server = _hurd_socket_server (PF_INET, 0); - if (server == MACH_PORT_NULL) - { - out: - *num_ifs = 0; - *ifreqs = NULL; - } - else - { - char *data = NULL; - size_t len = 0; - error_t err = __pfinet_siocgifconf (server, -1, &data, &len); - if (err == MACH_SEND_INVALID_DEST || err == MIG_SERVER_DIED) - { - /* On the first use of the socket server during the operation, - allow for the old server port dying. */ - server = _hurd_socket_server (PF_INET, 1); - if (server == MACH_PORT_NULL) - goto out; - err = __pfinet_siocgifconf (server, -1, (data_t *) ifreqs, &len); - } - if (err) - goto out; - - if (len % sizeof (struct ifreq) != 0) - { - munmap (data, len); - errno = EGRATUITOUS; - goto out; - } - *num_ifs = len / sizeof (struct ifreq); - *ifreqs = (struct ifreq *) data; - } - -} diff --git a/sysdeps/mach/hurd/ifreq.h b/sysdeps/mach/hurd/ifreq.h deleted file mode 100644 index eceeb7a2c3..0000000000 --- a/sysdeps/mach/hurd/ifreq.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -static inline struct ifreq * -__if_nextreq (struct ifreq *ifr) -{ -#ifdef _HAVE_SA_LEN - if (ifr->ifr_addr.sa_len > sizeof ifr->ifr_addr) - return (struct ifreq *) ((char *) &ifr->ifr_addr + ifr->ifr_addr.sa_len); -#endif - return ifr + 1; -} - -extern void __ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd); - - -static inline void -__if_freereq (struct ifreq *ifreqs, int num_ifs) -{ - munmap (ifreqs, num_ifs * sizeof (struct ifreq)); -} diff --git a/sysdeps/mach/hurd/init-posix.c b/sysdeps/mach/hurd/init-posix.c deleted file mode 100644 index eaf6332fe1..0000000000 --- a/sysdeps/mach/hurd/init-posix.c +++ /dev/null @@ -1,2 +0,0 @@ -/* We don't need the unix/bsd version. */ -#include diff --git a/sysdeps/mach/hurd/ioctl.c b/sysdeps/mach/hurd/ioctl.c deleted file mode 100644 index 7ce521c4fa..0000000000 --- a/sysdeps/mach/hurd/ioctl.c +++ /dev/null @@ -1,326 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#define typesize(type) (1 << (type)) - - -/* Perform the I/O control operation specified by REQUEST on FD. - The actual type and use of ARG and the return value depend on REQUEST. */ -int -__ioctl (int fd, unsigned long int request, ...) -{ -#ifdef MACH_MSG_TYPE_CHAR - /* Map individual type fields to Mach IPC types. */ - static const int mach_types[] = - { MACH_MSG_TYPE_CHAR, MACH_MSG_TYPE_INTEGER_16, MACH_MSG_TYPE_INTEGER_32, - MACH_MSG_TYPE_INTEGER_64 }; -#define io2mach_type(count, type) \ - ((mach_msg_type_t) { mach_types[type], typesize (type) * 8, count, 1, 0, 0 }) -#endif - - /* Extract the type information encoded in the request. */ - unsigned int type = _IOC_TYPE (request); - - /* Message buffer. */ -#define msg_align(x) \ - (((x) + sizeof (mach_msg_type_t) - 1) & ~(sizeof (mach_msg_type_t) - 1)) - struct - { -#ifdef MACH_MSG_TYPE_BIT - union - { - mig_reply_header_t header; - struct - { - mach_msg_header_t Head; - int RetCodeType; - kern_return_t RetCode; - } header_typecheck; - }; - char data[3 * sizeof (mach_msg_type_t) + - msg_align (_IOT_COUNT0 (type) * typesize (_IOT_TYPE0 (type))) + - msg_align (_IOT_COUNT1 (type) * typesize (_IOT_TYPE1 (type))) + - _IOT_COUNT2 (type) * typesize (_IOT_TYPE2 (type))]; -#else /* Untyped Mach IPC format. */ - mig_reply_error_t header; - char data[_IOT_COUNT0 (type) * typesize (_IOT_TYPE0 (type)) + - _IOT_COUNT1 (type) * typesize (_IOT_TYPE1 (type)) + - _IOT_COUNT2 (type) * typesize (_IOT_TYPE2 (type))]; - mach_msg_trailer_t trailer; -#endif - } msg; - mach_msg_header_t *const m = &msg.header.Head; - mach_msg_id_t msgid; - unsigned int reply_size; -#ifdef MACH_MSG_TYPE_BIT - mach_msg_type_t *t; -#else - void *p; -#endif - - void *arg = NULL; - - error_t err; - - /* Send the RPC already packed up in MSG to IOPORT - and decode the return value. */ - error_t send_rpc (io_t ioport) - { - error_t err; -#ifdef MACH_MSG_TYPE_BIT - mach_msg_type_t *t = &msg.header.RetCodeType; -#else - void *p = &msg.header.RetCode; -#endif - - /* Marshal the request arguments into the message buffer. - We must redo this work each time we retry the RPC after a SIGTTOU, - because the reply message containing the EBACKGROUND error code - clobbers the same message buffer also used for the request. */ - - if (_IOC_INOUT (request) & IOC_IN) - { - /* We don't want to advance ARG since it will be used to copy out - too if IOC_OUT is also set. */ - void *argptr = arg; - - /* Pack an argument into the message buffer. */ - void in (unsigned int count, enum __ioctl_datum type) - { - if (count > 0) - { - const size_t len = count * typesize ((unsigned int) type); -#ifdef MACH_MSG_TYPE_BIT - void *p = &t[1]; - *t = io2mach_type (count, type); - p = __mempcpy (p, argptr, len); - p = (void *) (((uintptr_t) p + sizeof (*t) - 1) - & ~(sizeof (*t) - 1)); - t = p; -#else - p = __mempcpy (p, argptr, len); -#endif - argptr += len; - } - } - - /* Pack the argument data. */ - in (_IOT_COUNT0 (type), _IOT_TYPE0 (type)); - in (_IOT_COUNT1 (type), _IOT_TYPE1 (type)); - in (_IOT_COUNT2 (type), _IOT_TYPE2 (type)); - } - else if (_IOC_INOUT (request) == IOC_VOID && _IOT_COUNT0 (type) != 0) - { - /* The RPC takes a single integer_t argument. - Rather than pointing to the value, ARG is the value itself. */ -#ifdef MACH_MSG_TYPE_BIT - *t++ = io2mach_type (1, _IOTS (integer_t)); - *(integer_t *) t = (integer_t) arg; - t = (void *) t + sizeof (integer_t); -#else - *(integer_t *) p = (integer_t) arg; - p = (void *) p + sizeof (integer_t); -#endif - } - - memset (m, 0, sizeof *m); /* Clear unused fields. */ - m->msgh_size = ( -#ifdef MACH_MSG_TYPE_BIT - (char *) t -#else - (char *) p -#endif - - (char *) &msg); - m->msgh_remote_port = ioport; - m->msgh_local_port = __mig_get_reply_port (); - m->msgh_id = msgid; - m->msgh_bits = MACH_MSGH_BITS (MACH_MSG_TYPE_COPY_SEND, - MACH_MSG_TYPE_MAKE_SEND_ONCE); - err = _hurd_intr_rpc_mach_msg (m, MACH_SEND_MSG|MACH_RCV_MSG, - m->msgh_size, sizeof (msg), - m->msgh_local_port, - MACH_MSG_TIMEOUT_NONE, - MACH_PORT_NULL); - switch (err) - { - case MACH_MSG_SUCCESS: - break; - case MACH_SEND_INVALID_REPLY: - case MACH_RCV_INVALID_NAME: - __mig_dealloc_reply_port (m->msgh_local_port); - default: - return err; - } - - if ((m->msgh_bits & MACH_MSGH_BITS_COMPLEX)) - { - /* Allow no ports or VM. */ - __mach_msg_destroy (m); - /* Want to return a different error below for a different msgid. */ - if (m->msgh_id == msgid + 100) - return MIG_TYPE_ERROR; - } - - if (m->msgh_id != msgid + 100) - return (m->msgh_id == MACH_NOTIFY_SEND_ONCE ? - MIG_SERVER_DIED : MIG_REPLY_MISMATCH); - - if (m->msgh_size != reply_size && - m->msgh_size != sizeof msg.header) - return MIG_TYPE_ERROR; - -#ifdef MACH_MSG_TYPE_BIT - if (msg.header_typecheck.RetCodeType != - ((union { mach_msg_type_t t; int i; }) - { t: io2mach_type (1, _IOTS (msg.header.RetCode)) }).i) - return MIG_TYPE_ERROR; -#endif - return msg.header.RetCode; - } - - if (_IOT_COUNT0 (type) != 0) - { - /* Data need either be sent, received, or even both. */ - va_list ap; - - va_start (ap, request); - arg = va_arg (ap, void *); - va_end (ap); - } - - { - /* Check for a registered handler for REQUEST. */ - ioctl_handler_t handler = _hurd_lookup_ioctl_handler (request); - if (handler) - { - /* This handler groks REQUEST. Se lo puntamonos. */ - int save = errno; - int result = (*handler) (fd, request, arg); - if (result != -1 || errno != ENOTTY) - return result; - - /* The handler doesn't really grok this one. - Try the normal RPC translation. */ - errno = save; - } - } - - /* Compute the Mach message ID for the RPC from the group and command - parts of the ioctl request. */ - msgid = IOC_MSGID (request); - - /* Compute the expected size of the reply. There is a standard header - consisting of the message header and the reply code. Then, for out - and in/out ioctls, there come the data with their type headers. */ - reply_size = sizeof msg.header; - - if (_IOC_INOUT (request) & IOC_OUT) - { - inline void figure_reply (unsigned int count, enum __ioctl_datum type) - { - if (count > 0) - { -#ifdef MACH_MSG_TYPE_BIT - /* Add the size of the type and data. */ - reply_size += sizeof (mach_msg_type_t) + typesize (type) * count; - /* Align it to word size. */ - reply_size += sizeof (mach_msg_type_t) - 1; - reply_size &= ~(sizeof (mach_msg_type_t) - 1); -#else - reply_size += typesize (type) * count; -#endif - } - } - figure_reply (_IOT_COUNT0 (type), _IOT_TYPE0 (type)); - figure_reply (_IOT_COUNT1 (type), _IOT_TYPE1 (type)); - figure_reply (_IOT_COUNT2 (type), _IOT_TYPE2 (type)); - } - - /* Marshal the arguments into the request message and make the RPC. - This wrapper function handles EBACKGROUND returns, turning them - into either SIGTTOU or EIO. */ - err = HURD_DPORT_USE (fd, _hurd_ctty_output (port, ctty, send_rpc)); - -#ifdef MACH_MSG_TYPE_BIT - t = (mach_msg_type_t *) msg.data; -#else - p = (void *) msg.data; -#endif - switch (err) - { - /* Unpack the message buffer into the argument location. */ - int out (unsigned int count, unsigned int type, - void *store, void **update) - { - if (count > 0) - { - const size_t len = count * typesize (type); -#ifdef MACH_MSG_TYPE_BIT - union { mach_msg_type_t t; int i; } ipctype; - ipctype.t = io2mach_type (count, type); - if (*(int *) t != ipctype.i) - return 1; - ++t; - memcpy (store, t, len); - if (update != NULL) - *update += len; - t = (void *) (((uintptr_t) t + len + sizeof (*t) - 1) - & ~(sizeof (*t) - 1)); -#else - memcpy (store, p, len); - p += len; - if (update != NULL) - *update += len; -#endif - } - return 0; - } - - case 0: - if (m->msgh_size != reply_size || - ((_IOC_INOUT (request) & IOC_OUT) && - (out (_IOT_COUNT0 (type), _IOT_TYPE0 (type), arg, &arg) || - out (_IOT_COUNT1 (type), _IOT_TYPE1 (type), arg, &arg) || - out (_IOT_COUNT2 (type), _IOT_TYPE2 (type), arg, &arg)))) - return __hurd_fail (MIG_TYPE_ERROR); - return 0; - - case MIG_BAD_ID: - case EOPNOTSUPP: - /* The server didn't understand the RPC. */ - err = ENOTTY; - default: - return __hurd_fail (err); - } -} - -weak_alias (__ioctl, ioctl) diff --git a/sysdeps/mach/hurd/isatty.c b/sysdeps/mach/hurd/isatty.c deleted file mode 100644 index 5916a7d1bd..0000000000 --- a/sysdeps/mach/hurd/isatty.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Return 1 if FD is a terminal, 0 if not. */ -int -__isatty (int fd) -{ - error_t err; - mach_port_t id; - - err = HURD_DPORT_USE (fd, __term_getctty (port, &id)); - if (! err) - __mach_port_deallocate (__mach_task_self (), id); - - return !err; -} - -weak_alias (__isatty, isatty) diff --git a/sysdeps/mach/hurd/jmp-unwind.c b/sysdeps/mach/hurd/jmp-unwind.c deleted file mode 100644 index 97cedd80f1..0000000000 --- a/sysdeps/mach/hurd/jmp-unwind.c +++ /dev/null @@ -1,79 +0,0 @@ -/* _longjmp_unwind -- Clean up stack frames unwound by longjmp. Hurd version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - -#ifndef _JMPBUF_UNWINDS -#error " fails to define _JMPBUF_UNWINDS" -#endif - -static inline uintptr_t -demangle_ptr (uintptr_t x) -{ -# ifdef PTR_DEMANGLE - PTR_DEMANGLE (x); -# endif - return x; -} - -/* This function is called by `longjmp' (with its arguments) to restore - active resources to a sane state before the frames code using them are - jumped out of. */ - -void -_longjmp_unwind (jmp_buf env, int val) -{ - struct hurd_sigstate *ss = _hurd_self_sigstate (); - struct hurd_userlink *link; - - /* All access to SS->active_resources must take place inside a critical - section where signal handlers cannot run. */ - __spin_lock (&ss->lock); - assert (! __spin_lock_locked (&ss->critical_section_lock)); - __spin_lock (&ss->critical_section_lock); - - /* Remove local signal preemptors being unwound past. */ - while (ss->preemptors && - _JMPBUF_UNWINDS (env[0].__jmpbuf, ss->preemptors, demangle_ptr)) - ss->preemptors = ss->preemptors->next; - - __spin_unlock (&ss->lock); - - /* Iterate over the current thread's list of active resources. - Process the head portion of the list whose links reside - in stack frames being unwound by this jump. */ - - for (link = ss->active_resources; - link && _JMPBUF_UNWINDS (env[0].__jmpbuf, link, demangle_ptr); - link = link->thread.next) - /* Remove this link from the resource's users list, - since the frame using the resource is being unwound. - This call returns nonzero if that was the last user. */ - if (_hurd_userlink_unlink (link)) - /* One of the frames being unwound by the longjmp was the last user - of its resource. Call the cleanup function to deallocate it. */ - (*link->cleanup) (link->cleanup_data, env, val); - - _hurd_critical_section_unlock (ss); -} diff --git a/sysdeps/mach/hurd/kernel-features.h b/sysdeps/mach/hurd/kernel-features.h deleted file mode 100644 index 196638829f..0000000000 --- a/sysdeps/mach/hurd/kernel-features.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Set flags signalling availability of certain operating system features. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file can define __ASSUME_* macros checked by certain source files. - Almost none of these are used outside of sysdeps/unix/sysv/linux code. - But those referring to POSIX-level features like O_* flags can be. */ diff --git a/sysdeps/mach/hurd/kill.c b/sysdeps/mach/hurd/kill.c deleted file mode 100644 index 2d556dd2ff..0000000000 --- a/sysdeps/mach/hurd/kill.c +++ /dev/null @@ -1,149 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -/* Send signal SIG to process number PID. If PID is zero, - send SIG to all processes in the current process's process group. - If PID is < -1, send SIG to all processes in process group - PID. */ -int -__kill (pid_t pid, int sig) -{ - int delivered = 0; /* Set when we deliver any signal. */ - error_t err; - mach_port_t proc; - struct hurd_userlink ulink; - - void kill_pid (pid_t pid) /* Kill one PID. */ - { - /* SIGKILL is not delivered as a normal signal. - Sending SIGKILL to a process means to terminate its task. */ - if (sig == SIGKILL) - /* Fetch the process's task port and terminate the task. We - loop in case the process execs and changes its task port. - If the old task port dies after we fetch it but before we - send the RPC, we get MACH_SEND_INVALID_DEST; if it dies - after we send the RPC request but before it is serviced, we - get MIG_SERVER_DIED. */ - do - { - task_t refport; - err = __proc_pid2task (proc, pid, &refport); - /* Ignore zombies. */ - if (!err && refport != MACH_PORT_NULL) - { - err = __task_terminate (refport); - __mach_port_deallocate (__mach_task_self (), refport); - } - } while (err == MACH_SEND_INVALID_DEST || - err == MIG_SERVER_DIED); - else - { - error_t taskerr; - error_t kill_port (mach_port_t msgport, mach_port_t refport) - { - if (msgport != MACH_PORT_NULL) - /* Send a signal message to his message port. */ - return __msg_sig_post (msgport, sig, 0, refport); - - /* The process has no message port. Perhaps try direct - frobnication of the task. */ - - if (taskerr) - /* If we could not get the task port, we can do nothing. */ - return taskerr; - - if (refport == MACH_PORT_NULL) - /* proc_pid2task returned success with a null task port. - That means the process is a zombie. Signals - to zombies should return success and do nothing. */ - return 0; - - /* For user convenience in the case of a task that has - not registered any message port with the proc server, - translate a few signals to direct task operations. */ - switch (sig) - { - /* The only signals that really make sense for an - unregistered task are kill, suspend, and continue. */ - case SIGSTOP: - case SIGTSTP: - return __task_suspend (refport); - case SIGCONT: - return __task_resume (refport); - case SIGTERM: - case SIGQUIT: - case SIGINT: - return __task_terminate (refport); - default: - /* We have full permission to send signals, but there is - no meaningful way to express this signal. */ - return EPERM; - } - } - err = HURD_MSGPORT_RPC (__proc_getmsgport (proc, pid, &msgport), - (taskerr = __proc_pid2task (proc, pid, - &refport)) ? - __proc_getsidport (proc, &refport) : 0, 1, - kill_port (msgport, refport)); - } - if (! err) - delivered = 1; - } - - proc = _hurd_port_get (&_hurd_ports[INIT_PORT_PROC], &ulink); - - if (pid <= 0) - { - /* Send SIG to each process in pgrp (- PID). */ - pid_t pidbuf[10], *pids = pidbuf; - mach_msg_type_number_t i, npids = sizeof (pidbuf) / sizeof (pidbuf[0]); - - err = __proc_getpgrppids (proc, - pid, &pids, &npids); - if (!err) - { - for (i = 0; i < npids; ++i) - { - kill_pid (pids[i]); - if (err == ESRCH) - /* The process died already. Ignore it. */ - err = 0; - } - if (pids != pidbuf) - __vm_deallocate (__mach_task_self (), - (vm_address_t) pids, npids * sizeof (pids[0])); - } - } - else - kill_pid (pid); - - _hurd_port_free (&_hurd_ports[INIT_PORT_PROC], &ulink, proc); - - /* If we delivered no signals, but ERR is clear, this must mean that - every kill_pid call failed with ESRCH, meaning all the processes in - the pgrp died between proc_getpgrppids and kill_pid; in that case we - fail with ESRCH. */ - return delivered ? 0 : __hurd_fail (err ?: ESRCH); -} - -weak_alias (__kill, kill) diff --git a/sysdeps/mach/hurd/lchmod.c b/sysdeps/mach/hurd/lchmod.c deleted file mode 100644 index 00bd9a3e28..0000000000 --- a/sysdeps/mach/hurd/lchmod.c +++ /dev/null @@ -1,38 +0,0 @@ -/* lchmod -- Change the protections of a file or symbolic link. Hurd version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Change the protections of FILE to MODE. */ -int -lchmod (const char *file, mode_t mode) -{ - error_t err; - file_t port = __file_name_lookup (file, O_NOLINK, 0); - if (port == MACH_PORT_NULL) - return -1; - err = __file_chmod (port, mode); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err); - return 0; -} diff --git a/sysdeps/mach/hurd/lchown.c b/sysdeps/mach/hurd/lchown.c deleted file mode 100644 index 9f155b1a81..0000000000 --- a/sysdeps/mach/hurd/lchown.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Change the owner and group of FILE; if it's a link, do the link and - not the target. */ -int -__lchown (const char *file, uid_t owner, gid_t group) -{ - error_t err; - file_t port = __file_name_lookup (file, O_NOLINK, 0); - if (port == MACH_PORT_NULL) - return -1; - err = __file_chown (port, owner, group); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err); - return 0; -} - -weak_alias (__lchown, lchown) diff --git a/sysdeps/mach/hurd/lgetxattr.c b/sysdeps/mach/hurd/lgetxattr.c deleted file mode 100644 index b1333fbeee..0000000000 --- a/sysdeps/mach/hurd/lgetxattr.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Access to extended attributes on files. Hurd version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -ssize_t -lgetxattr (const char *path, const char *name, void *value, size_t size) -{ - error_t err; - file_t port = __file_name_lookup (path, O_NOLINK, 0); - if (port == MACH_PORT_NULL) - return -1; - err = _hurd_xattr_get (port, name, value, &size); - __mach_port_deallocate (__mach_task_self (), port); - return err ? __hurd_fail (err) : size; -} diff --git a/sysdeps/mach/hurd/libc-ldscript b/sysdeps/mach/hurd/libc-ldscript deleted file mode 100644 index 499a2b2b99..0000000000 --- a/sysdeps/mach/hurd/libc-ldscript +++ /dev/null @@ -1,6 +0,0 @@ -/* GNU ld script - This linker script is installed as /lib/libc.a. - It makes -lc become just like -( -lcrt -lmachuser -lhurduser -). - */ - -GROUP ( libcrt.a libmachuser.a libhurduser.a ) diff --git a/sysdeps/mach/hurd/libc-lock.h b/sysdeps/mach/hurd/libc-lock.h deleted file mode 100644 index 18496588b3..0000000000 --- a/sysdeps/mach/hurd/libc-lock.h +++ /dev/null @@ -1,216 +0,0 @@ -/* libc-internal interface for mutex locks. Hurd version using Mach cthreads. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LIBC_LOCK_H -#define _LIBC_LOCK_H 1 - -#if (_LIBC - 0) || (_CTHREADS_ - 0) -#include -#include - -/* The locking here is very inexpensive, even for inlining. */ -#define _IO_lock_inexpensive 1 - -typedef struct mutex __libc_lock_t; -typedef struct -{ - struct mutex mutex; - void *owner; - int count; -} __libc_lock_recursive_t; -typedef __libc_lock_recursive_t __rtld_lock_recursive_t; - -#define __libc_lock_owner_self() ((void *) __hurd_threadvar_location (0)) - -#else -typedef struct __libc_lock_opaque__ __libc_lock_t; -typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; -#endif - -/* Define a lock variable NAME with storage class CLASS. The lock must be - initialized with __libc_lock_init before it can be used (or define it - with __libc_lock_define_initialized, below). Use `extern' for CLASS to - declare a lock defined in another module. In public structure - definitions you must use a pointer to the lock structure (i.e., NAME - begins with a `*'), because its storage size will not be known outside - of libc. */ -#define __libc_lock_define(CLASS,NAME) \ - CLASS __libc_lock_t NAME; - -/* Define an initialized lock variable NAME with storage class CLASS. */ -#define _LIBC_LOCK_INITIALIZER MUTEX_INITIALIZER -#define __libc_lock_define_initialized(CLASS,NAME) \ - CLASS __libc_lock_t NAME = _LIBC_LOCK_INITIALIZER; - -/* Initialize the named lock variable, leaving it in a consistent, unlocked - state. */ -#define __libc_lock_init(NAME) __mutex_init (&(NAME)) - -/* Finalize the named lock variable, which must be locked. It cannot be - used again until __libc_lock_init is called again on it. This must be - called on a lock variable before the containing storage is reused. */ -#define __libc_lock_fini(NAME) __mutex_unlock (&(NAME)) -#define __libc_lock_fini_recursive(NAME) __mutex_unlock (&(NAME).mutex) -#define __rtld_lock_fini_recursive(NAME) __mutex_unlock (&(NAME).mutex) - - -/* Lock the named lock variable. */ -#define __libc_lock_lock(NAME) __mutex_lock (&(NAME)) - -/* Lock the named lock variable. */ -#define __libc_lock_trylock(NAME) (!__mutex_trylock (&(NAME))) - -/* Unlock the named lock variable. */ -#define __libc_lock_unlock(NAME) __mutex_unlock (&(NAME)) - - -#define __libc_lock_define_recursive(CLASS,NAME) \ - CLASS __libc_lock_recursive_t NAME; -#define _LIBC_LOCK_RECURSIVE_INITIALIZER { MUTEX_INITIALIZER, 0, 0 } -#define __libc_lock_define_initialized_recursive(CLASS,NAME) \ - CLASS __libc_lock_recursive_t NAME = _LIBC_LOCK_RECURSIVE_INITIALIZER; - -#define __rtld_lock_define_recursive(CLASS,NAME) \ - __libc_lock_define_recursive (CLASS, NAME) -#define _RTLD_LOCK_RECURSIVE_INITIALIZER \ - _LIBC_LOCK_RECURSIVE_INITIALIZER -#define __rtld_lock_define_initialized_recursive(CLASS,NAME) \ - __libc_lock_define_initialized_recursive (CLASS, NAME) - -#define __libc_lock_init_recursive(NAME) \ - ({ __libc_lock_recursive_t *const __lock = &(NAME); \ - __lock->owner = 0; mutex_init (&__lock->mutex); }) - -#define __libc_lock_trylock_recursive(NAME) \ - ({ __libc_lock_recursive_t *const __lock = &(NAME); \ - void *__self = __libc_lock_owner_self (); \ - __mutex_trylock (&__lock->mutex) \ - ? (__lock->owner = __self, __lock->count = 1, 0) \ - : __lock->owner == __self ? (++__lock->count, 0) : 1; }) - -#define __libc_lock_lock_recursive(NAME) \ - ({ __libc_lock_recursive_t *const __lock = &(NAME); \ - void *__self = __libc_lock_owner_self (); \ - if (__mutex_trylock (&__lock->mutex) \ - || (__lock->owner != __self \ - && (__mutex_lock (&__lock->mutex), 1))) \ - __lock->owner = __self, __lock->count = 1; \ - else \ - ++__lock->count; \ - }) -#define __libc_lock_unlock_recursive(NAME) \ - ({ __libc_lock_recursive_t *const __lock = &(NAME); \ - if (--__lock->count == 0) \ - { \ - __lock->owner = 0; \ - __mutex_unlock (&__lock->mutex); \ - } \ - }) - - -#define __rtld_lock_initialize(NAME) \ - (void) ((NAME) = (__rtld_lock_recursive_t) _RTLD_LOCK_RECURSIVE_INITIALIZER) -#define __rtld_lock_trylock_recursive(NAME) \ - __libc_lock_trylock_recursive (NAME) -#define __rtld_lock_lock_recursive(NAME) \ - __libc_lock_lock_recursive(NAME) -#define __rtld_lock_unlock_recursive(NAME) \ - __libc_lock_unlock_recursive (NAME) - - -/* XXX for now */ -#define __libc_rwlock_define __libc_lock_define -#define __libc_rwlock_define_initialized __libc_lock_define_initialized -#define __libc_rwlock_init __libc_lock_init -#define __libc_rwlock_fini __libc_lock_fini -#define __libc_rwlock_rdlock __libc_lock_lock -#define __libc_rwlock_wrlock __libc_lock_lock -#define __libc_rwlock_tryrdlock __libc_lock_trylock -#define __libc_rwlock_trywrlock __libc_lock_trylock -#define __libc_rwlock_unlock __libc_lock_unlock - - -/* Start a critical region with a cleanup function */ -#define __libc_cleanup_region_start(DOIT, FCT, ARG) \ -{ \ - typeof (***(FCT)) *__save_FCT = (DOIT) ? (FCT) : 0; \ - typeof (ARG) __save_ARG = ARG; \ - /* close brace is in __libc_cleanup_region_end below. */ - -/* End a critical region started with __libc_cleanup_region_start. */ -#define __libc_cleanup_region_end(DOIT) \ - if ((DOIT) && __save_FCT != 0) \ - (*__save_FCT)(__save_ARG); \ -} - -/* Sometimes we have to exit the block in the middle. */ -#define __libc_cleanup_end(DOIT) \ - if ((DOIT) && __save_FCT != 0) \ - (*__save_FCT)(__save_ARG); \ - -#define __libc_cleanup_push(fct, arg) __libc_cleanup_region_start (1, fct, arg) -#define __libc_cleanup_pop(execute) __libc_cleanup_region_end (execute) - -#if (_CTHREADS_ - 0) - -/* Use mutexes as once control variables. */ - -struct __libc_once - { - __libc_lock_t lock; - int done; - }; - -#define __libc_once_define(CLASS,NAME) \ - CLASS struct __libc_once NAME = { MUTEX_INITIALIZER, 0 } - -/* Call handler iff the first call. */ -#define __libc_once(ONCE_CONTROL, INIT_FUNCTION) \ - do { \ - __libc_lock_lock (ONCE_CONTROL.lock); \ - if (!ONCE_CONTROL.done) \ - (INIT_FUNCTION) (); \ - ONCE_CONTROL.done = 1; \ - __libc_lock_unlock (ONCE_CONTROL.lock); \ - } while (0) - -/* Get once control variable. */ -#define __libc_once_get(ONCE_CONTROL) ((ONCE_CONTROL).done != 0) - -#ifdef _LIBC -/* We need portable names for some functions. E.g., when they are - used as argument to __libc_cleanup_region_start. */ -#define __libc_mutex_unlock __mutex_unlock -#endif - -/* Type for key of thread specific data. */ -typedef cthread_key_t __libc_key_t; - -#define __libc_key_create(KEY,DEST) cthread_keycreate (KEY) -#define __libc_setspecific(KEY,VAL) cthread_setspecific (KEY, VAL) -void *__libc_getspecific (__libc_key_t key); - -#endif /* _CTHREADS_ */ - -/* Hide the definitions which are only supposed to be used inside libc in - a separate file. This file is not present in the installation! */ -#ifdef _LIBC -# include -#endif - -#endif /* libc-lock.h */ diff --git a/sysdeps/mach/hurd/libc-tsd.h b/sysdeps/mach/hurd/libc-tsd.h deleted file mode 100644 index 0878d61aed..0000000000 --- a/sysdeps/mach/hurd/libc-tsd.h +++ /dev/null @@ -1,34 +0,0 @@ -/* libc-internal interface for thread-specific data. Hurd version. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LIBC_TSD_H -#define _LIBC_TSD_H 1 - -#include - -#define __libc_tsd_define(CLASS, TYPE, KEY) /* nothing, always have threadvars */ - -#define __libc_tsd_address(TYPE, KEY) \ - ((TYPE *) __hurd_threadvar_location (_HURD_THREADVAR_##KEY)) - -#define __libc_tsd_get(TYPE, KEY) \ - (*__libc_tsd_address (TYPE, KEY)) -#define __libc_tsd_set(TYPE, KEY, VALUE) \ - (*__libc_tsd_address (TYPE, KEY) = (VALUE)) - -#endif /* libc-tsd.h */ diff --git a/sysdeps/mach/hurd/libc_p-ldscript b/sysdeps/mach/hurd/libc_p-ldscript deleted file mode 100644 index 7dcd52eec4..0000000000 --- a/sysdeps/mach/hurd/libc_p-ldscript +++ /dev/null @@ -1,6 +0,0 @@ -/* GNU ld script - This linker script is installed as /lib/libc_p.a. - It makes -lc_p become just like -( -lcrt_p -lmachuser_p -lhurduser_p -). - */ - -GROUP ( libcrt_p.a libmachuser_p.a libhurduser_p.a ) diff --git a/sysdeps/mach/hurd/link.c b/sysdeps/mach/hurd/link.c deleted file mode 100644 index b9e00b2e1b..0000000000 --- a/sysdeps/mach/hurd/link.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Make a link to FROM called TO. */ -int -__link (const char *from, const char *to) -{ - error_t err; - file_t oldfile, linknode, todir; - char *toname; - - oldfile = __file_name_lookup (from, 0, 0); - if (oldfile == MACH_PORT_NULL) - return -1; - - /* The file_getlinknode RPC returns the port that should be passed to - the receiving filesystem (the one containing TODIR) in dir_link. */ - - err = __file_getlinknode (oldfile, &linknode); - __mach_port_deallocate (__mach_task_self (), oldfile); - if (err) - return __hurd_fail (err); - - todir = __file_name_split (to, &toname); - if (todir != MACH_PORT_NULL) - { - err = __dir_link (todir, linknode, toname, 1); - __mach_port_deallocate (__mach_task_self (), todir); - } - __mach_port_deallocate (__mach_task_self (), linknode); - if (todir == MACH_PORT_NULL) - return -1; - - if (err) - return __hurd_fail (err); - return 0; -} - -weak_alias (__link, link) diff --git a/sysdeps/mach/hurd/linkat.c b/sysdeps/mach/hurd/linkat.c deleted file mode 100644 index 676827891a..0000000000 --- a/sysdeps/mach/hurd/linkat.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Make a link between file names relative to open directories. Hurd version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - -/* Make a link to FROM relative to FROMFD called TO relative to TOFD. */ -int -linkat (int fromfd, const char *from, int tofd, const char *to, int flags) -{ - error_t err; - file_t oldfile, linknode, todir; - char *toname; - - /* POSIX says linkat doesn't follow symlinks by default, so pass - O_NOLINK. That can be overridden by AT_SYMLINK_FOLLOW in FLAGS. */ - oldfile = __file_name_lookup_at (fromfd, flags, from, O_NOLINK, 0); - if (oldfile == MACH_PORT_NULL) - return -1; - - /* The file_getlinknode RPC returns the port that should be passed to - the receiving filesystem (the one containing TODIR) in dir_link. */ - - err = __file_getlinknode (oldfile, &linknode); - __mach_port_deallocate (__mach_task_self (), oldfile); - if (err) - return __hurd_fail (err); - - todir = __file_name_split_at (tofd, to, &toname); - if (todir != MACH_PORT_NULL) - { - err = __dir_link (todir, linknode, toname, 1); - __mach_port_deallocate (__mach_task_self (), todir); - } - __mach_port_deallocate (__mach_task_self (), linknode); - if (todir == MACH_PORT_NULL) - return -1; - - if (err) - return __hurd_fail (err); - return 0; -} diff --git a/sysdeps/mach/hurd/listen.c b/sysdeps/mach/hurd/listen.c deleted file mode 100644 index 26add84e92..0000000000 --- a/sysdeps/mach/hurd/listen.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Prepare to accept connections on socket FD. - N connection requests will be queued before further requests are refused. - Returns 0 on success, -1 for errors. */ - -int -__listen (int fd, int n) -{ - error_t err = HURD_DPORT_USE (fd, __socket_listen (port, n)); - if (err) - return __hurd_dfail (fd, err); - return 0; -} - -weak_alias (__listen, listen) diff --git a/sysdeps/mach/hurd/listxattr.c b/sysdeps/mach/hurd/listxattr.c deleted file mode 100644 index 8c8c361213..0000000000 --- a/sysdeps/mach/hurd/listxattr.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Access to extended attributes on files. Hurd version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -ssize_t -listxattr (const char *path, char *list, size_t size) -{ - error_t err; - file_t port = __file_name_lookup (path, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - err = _hurd_xattr_list (port, list, &size); - __mach_port_deallocate (__mach_task_self (), port); - return err ? __hurd_fail (err) : size; -} diff --git a/sysdeps/mach/hurd/llistxattr.c b/sysdeps/mach/hurd/llistxattr.c deleted file mode 100644 index 646eacf80a..0000000000 --- a/sysdeps/mach/hurd/llistxattr.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Access to extended attributes on files. Hurd version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -ssize_t -llistxattr (const char *path, char *list, size_t size) -{ - error_t err; - file_t port = __file_name_lookup (path, O_NOLINK, 0); - if (port == MACH_PORT_NULL) - return -1; - err = _hurd_xattr_list (port, list, &size); - __mach_port_deallocate (__mach_task_self (), port); - return err ? __hurd_fail (err) : size; -} diff --git a/sysdeps/mach/hurd/lremovexattr.c b/sysdeps/mach/hurd/lremovexattr.c deleted file mode 100644 index bab92da7db..0000000000 --- a/sysdeps/mach/hurd/lremovexattr.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Access to extended attributes on files. Hurd version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -ssize_t -lremovexattr (const char *path, const char *name) -{ - error_t err; - file_t port = __file_name_lookup (path, O_NOLINK, 0); - if (port == MACH_PORT_NULL) - return -1; - err = _hurd_xattr_remove (port, name); - __mach_port_deallocate (__mach_task_self (), port); - return __hurd_fail (err); -} diff --git a/sysdeps/mach/hurd/lseek.c b/sysdeps/mach/hurd/lseek.c deleted file mode 100644 index a6168f540f..0000000000 --- a/sysdeps/mach/hurd/lseek.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Seek to OFFSET on FD, starting from WHENCE. */ -off_t -__libc_lseek (int fd, off_t offset, int whence) -{ - return __libc_lseek64 (fd, (off64_t) offset, whence); -} - -weak_alias (__libc_lseek, __lseek) -libc_hidden_def (__lseek) -weak_alias (__libc_lseek, lseek) diff --git a/sysdeps/mach/hurd/lseek64.c b/sysdeps/mach/hurd/lseek64.c deleted file mode 100644 index 320da05fc4..0000000000 --- a/sysdeps/mach/hurd/lseek64.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Seek to OFFSET on FD, starting from WHENCE. */ -off64_t -__libc_lseek64 (int fd, off64_t offset, int whence) -{ - error_t err; - if (err = HURD_DPORT_USE (fd, __io_seek (port, offset, whence, &offset))) - return __hurd_dfail (fd, err); - return offset; -} - -weak_alias (__libc_lseek64, __lseek64) -weak_alias (__libc_lseek64, lseek64) diff --git a/sysdeps/mach/hurd/lsetxattr.c b/sysdeps/mach/hurd/lsetxattr.c deleted file mode 100644 index 668698147b..0000000000 --- a/sysdeps/mach/hurd/lsetxattr.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Access to extended attributes on files. Hurd version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -ssize_t -lsetxattr (const char *path, const char *name, const void *value, size_t size, - int flags) -{ - error_t err; - file_t port = __file_name_lookup (path, O_NOLINK, 0); - if (port == MACH_PORT_NULL) - return -1; - err = _hurd_xattr_set (port, name, value, size, flags); - __mach_port_deallocate (__mach_task_self (), port); - return err ? __hurd_fail (err) : size; -} diff --git a/sysdeps/mach/hurd/lutimes.c b/sysdeps/mach/hurd/lutimes.c deleted file mode 100644 index 00013ab6ad..0000000000 --- a/sysdeps/mach/hurd/lutimes.c +++ /dev/null @@ -1,57 +0,0 @@ -/* lutimes -- change access and modification times of a symlink. Hurd version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Change the access time of FILE to TVP[0] and - the modification time of FILE to TVP[1]. */ -int -__lutimes (const char *file, const struct timeval tvp[2]) -{ - union tv - { - struct timeval tv; - time_value_t tvt; - }; - const union tv *u = (const union tv *) tvp; - union tv nulltv[2]; - error_t err; - file_t port; - - if (tvp == NULL) - { - /* Setting the number of microseconds to `-1' tells the - underlying filesystems to use the current time. */ - nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1; - u = nulltv; - } - - port = __file_name_lookup (file, O_NOLINK, 0); - if (port == MACH_PORT_NULL) - return -1; - err = __file_utimes (port, u[0].tvt, u[1].tvt); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err); - return 0; -} -weak_alias (__lutimes, lutimes) diff --git a/sysdeps/mach/hurd/lxstat.c b/sysdeps/mach/hurd/lxstat.c deleted file mode 100644 index 9ddc481018..0000000000 --- a/sysdeps/mach/hurd/lxstat.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include "xstatconv.c" - -int -__lxstat (int vers, const char *file, struct stat *buf) -{ - struct stat64 buf64; - return __lxstat64 (vers, file, &buf64) ?: xstat64_conv (buf, &buf64); -} -hidden_def (__lxstat) -weak_alias (__lxstat, _lxstat) diff --git a/sysdeps/mach/hurd/lxstat64.c b/sysdeps/mach/hurd/lxstat64.c deleted file mode 100644 index 953d4fb1d1..0000000000 --- a/sysdeps/mach/hurd/lxstat64.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Get information about the file descriptor FD in BUF. */ -int -__lxstat64 (int vers, const char *file, struct stat64 *buf) -{ - error_t err; - file_t port; - - if (vers != _STAT_VER) - return __hurd_fail (EINVAL); - - port = __file_name_lookup (file, O_NOLINK, 0); - if (port == MACH_PORT_NULL) - return -1; - err = __io_stat (port, buf); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err); - return 0; -} -hidden_def (__lxstat64) diff --git a/sysdeps/mach/hurd/malloc-machine.h b/sysdeps/mach/hurd/malloc-machine.h deleted file mode 100644 index 00b4e9714a..0000000000 --- a/sysdeps/mach/hurd/malloc-machine.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Basic platform-independent macro definitions for mutexes, - thread-specific data and parameters for malloc. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MALLOC_MACHINE_H -#define _MALLOC_MACHINE_H - -#include -#include - -/* madvise is a stub on Hurd, so don't bother calling it. */ - -#include - -#undef __madvise -#define __madvise(addr, len, advice) \ - ((void) (addr), (void) (len), (void) (advice)) - -#include - -#endif /* !defined(_MALLOC_MACHINE_H) */ diff --git a/sysdeps/mach/hurd/mig-reply.c b/sysdeps/mach/hurd/mig-reply.c deleted file mode 100644 index dde3fbf86c..0000000000 --- a/sysdeps/mach/hurd/mig-reply.c +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define GETPORT \ - mach_port_t *portloc = \ - (mach_port_t *) __hurd_threadvar_location (_HURD_THREADVAR_MIG_REPLY) -#define reply_port (*(use_threadvar ? portloc : &global_reply_port)) - -static int use_threadvar; -static mach_port_t global_reply_port; - -/* These functions are called by MiG-generated code. */ - -/* Called by MiG to get a reply port. */ -mach_port_t -__mig_get_reply_port (void) -{ - GETPORT; - - if (reply_port == MACH_PORT_NULL) - reply_port = __mach_reply_port (); - - return reply_port; -} -weak_alias (__mig_get_reply_port, mig_get_reply_port) - -/* Called by MiG to deallocate the reply port. */ -void -__mig_dealloc_reply_port (mach_port_t arg) -{ - mach_port_t port; - - GETPORT; - - port = reply_port; - reply_port = MACH_PORT_NULL; /* So the mod_refs RPC won't use it. */ - - if (MACH_PORT_VALID (port)) - __mach_port_mod_refs (__mach_task_self (), port, - MACH_PORT_RIGHT_RECEIVE, -1); -} -weak_alias (__mig_dealloc_reply_port, mig_dealloc_reply_port) - -/* Called by mig interfaces when done with a port. Used to provide the - same interface as needed when a custom allocator is used. */ -void -__mig_put_reply_port(mach_port_t port) -{ - /* Do nothing. */ -} -weak_alias (__mig_put_reply_port, mig_put_reply_port) - -/* Called at startup with STACK == NULL. When per-thread variables are set - up, this is called again with STACK set to the new stack being switched - to, where per-thread variables should be set up. */ -void -__mig_init (void *stack) -{ - use_threadvar = stack != 0; - - if (use_threadvar) - { - /* Recycle the reply port used before multithreading was enabled. */ - mach_port_t *portloc = (mach_port_t *) - __hurd_threadvar_location_from_sp (_HURD_THREADVAR_MIG_REPLY, stack); - *portloc = global_reply_port; - global_reply_port = MACH_PORT_NULL; - } -} -weak_alias (__mig_init, mig_init) diff --git a/sysdeps/mach/hurd/mkdir.c b/sysdeps/mach/hurd/mkdir.c deleted file mode 100644 index 58c2ac4291..0000000000 --- a/sysdeps/mach/hurd/mkdir.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Create a directory named FILE_NAME with protections MODE. */ -int -__mkdir (const char *file_name, mode_t mode) -{ - error_t err; - const char *name; - file_t parent; - if (!strcmp (file_name, "/")) - return __hurd_fail (EEXIST); - parent = __directory_name_split (file_name, (char **) &name); - if (parent == MACH_PORT_NULL) - return -1; - err = __dir_mkdir (parent, name, mode & ~_hurd_umask); - __mach_port_deallocate (__mach_task_self (), parent); - if (err) - return __hurd_fail (err); - return 0; -} - -weak_alias (__mkdir, mkdir) diff --git a/sysdeps/mach/hurd/mkdirat.c b/sysdeps/mach/hurd/mkdirat.c deleted file mode 100644 index 7c5f639008..0000000000 --- a/sysdeps/mach/hurd/mkdirat.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Create a directory named relative to another open directory. Hurd version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -int -mkdirat (int fd, const char *path, mode_t mode) -{ - error_t err; - const char *name; - file_t parent; - if (!strcmp (path, "/")) - return __hurd_fail (EEXIST); - parent = __directory_name_split_at (fd, path, (char **) &name); - if (parent == MACH_PORT_NULL) - return -1; - err = __dir_mkdir (parent, name, mode & ~_hurd_umask); - __mach_port_deallocate (__mach_task_self (), parent); - if (err) - return __hurd_fail (err); - return 0; -} diff --git a/sysdeps/mach/hurd/mlock.c b/sysdeps/mach/hurd/mlock.c deleted file mode 100644 index 3eb415bc9d..0000000000 --- a/sysdeps/mach/hurd/mlock.c +++ /dev/null @@ -1,47 +0,0 @@ -/* mlock -- guarantee pages are resident in memory. Mach/Hurd version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Guarantee all whole pages mapped by the range [ADDR,ADDR+LEN) to - be memory resident. */ - -int -mlock (const void *addr, size_t len) -{ - mach_port_t host; - vm_address_t page; - error_t err; - - err = __get_privileged_ports (&host, NULL); - if (err) - host = __mach_host_self(); - - page = trunc_page ((vm_address_t) addr); - len = round_page ((vm_address_t) addr + len) - page; - - err = __vm_wire (host, __mach_task_self (), page, len, VM_PROT_READ); - if (host != __mach_host_self()) - __mach_port_deallocate (__mach_task_self (), host); - - return err ? __hurd_fail (err) : 0; -} diff --git a/sysdeps/mach/hurd/mmap.c b/sysdeps/mach/hurd/mmap.c deleted file mode 100644 index dbd718a688..0000000000 --- a/sysdeps/mach/hurd/mmap.c +++ /dev/null @@ -1,188 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Map addresses starting near ADDR and extending for LEN bytes. from - OFFSET into the file FD describes according to PROT and FLAGS. If ADDR - is nonzero, it is the desired mapping address. If the MAP_FIXED bit is - set in FLAGS, the mapping will be at ADDR exactly (which must be - page-aligned); otherwise the system chooses a convenient nearby address. - The return value is the actual mapping address chosen or (__ptr_t) -1 - for errors (in which case `errno' is set). A successful `mmap' call - deallocates any previous mapping for the affected region. */ - -__ptr_t -__mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset) -{ - error_t err; - vm_prot_t vmprot; - memory_object_t memobj; - vm_address_t mapaddr; - - mapaddr = (vm_address_t) addr; - - /* ADDR and OFFSET must be page-aligned. */ - if ((mapaddr & (__vm_page_size - 1)) || (offset & (__vm_page_size - 1))) - return (__ptr_t) (long int) __hurd_fail (EINVAL); - - if ((flags & (MAP_TYPE|MAP_INHERIT)) == MAP_ANON - && prot == (PROT_READ|PROT_WRITE)) /* cf VM_PROT_DEFAULT */ - { - /* vm_allocate has (a little) less overhead in the kernel too. */ - err = __vm_allocate (__mach_task_self (), &mapaddr, len, mapaddr == 0); - - if (err == KERN_NO_SPACE) - { - if (flags & MAP_FIXED) - { - /* XXX this is not atomic as it is in unix! */ - /* The region is already allocated; deallocate it first. */ - err = __vm_deallocate (__mach_task_self (), mapaddr, len); - if (!err) - err = __vm_allocate (__mach_task_self (), &mapaddr, len, 0); - } - else if (mapaddr != 0) - err = __vm_allocate (__mach_task_self (), &mapaddr, len, 1); - } - - return err ? (__ptr_t) (long int) __hurd_fail (err) : (__ptr_t) mapaddr; - } - - vmprot = VM_PROT_NONE; - if (prot & PROT_READ) - vmprot |= VM_PROT_READ; - if (prot & PROT_WRITE) - vmprot |= VM_PROT_WRITE; - if (prot & PROT_EXEC) - vmprot |= VM_PROT_EXECUTE; - - switch (flags & MAP_TYPE) - { - default: - return (__ptr_t) (long int) __hurd_fail (EINVAL); - - case MAP_ANON: - memobj = MACH_PORT_NULL; - break; - - case MAP_FILE: - case 0: /* Allow, e.g., just MAP_SHARED. */ - { - mach_port_t robj, wobj; - if (err = HURD_DPORT_USE (fd, __io_map (port, &robj, &wobj))) - { - if (err == MIG_BAD_ID || err == EOPNOTSUPP || err == ENOSYS) - err = ENODEV; /* File descriptor doesn't support mmap. */ - return (__ptr_t) (long int) __hurd_dfail (fd, err); - } - switch (prot & (PROT_READ|PROT_WRITE)) - { - /* Although it apparently doesn't make sense to map a file with - protection set to PROT_NONE, it is actually sometimes done. - In particular, that's how localedef reserves some space for - the locale archive file, the rationale being that some - implementations take into account whether the mapping is - anonymous or not when selecting addresses. */ - case PROT_NONE: - case PROT_READ: - memobj = robj; - if (wobj != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), wobj); - break; - case PROT_WRITE: - memobj = wobj; - if (robj != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), robj); - break; - case PROT_READ|PROT_WRITE: - if (robj == wobj) - { - memobj = wobj; - /* Remove extra reference. */ - __mach_port_deallocate (__mach_task_self (), memobj); - } - else if (wobj == MACH_PORT_NULL && /* Not writable by mapping. */ - !(flags & MAP_SHARED)) - /* The file can only be mapped for reading. Since we are - making a private mapping, we will never try to write the - object anyway, so we don't care. */ - memobj = robj; - else - { - __mach_port_deallocate (__mach_task_self (), wobj); - return (__ptr_t) (long int) __hurd_fail (EACCES); - } - break; - default: - __builtin_unreachable (); - } - break; - /* XXX handle MAP_NOEXTEND */ - } - } - - /* XXX handle MAP_INHERIT */ - - err = __vm_map (__mach_task_self (), - &mapaddr, (vm_size_t) len, (vm_address_t) 0, - mapaddr == 0, - memobj, (vm_offset_t) offset, - ! (flags & MAP_SHARED), - vmprot, VM_PROT_ALL, - (flags & MAP_SHARED) ? VM_INHERIT_SHARE : VM_INHERIT_COPY); - - if (err == KERN_NO_SPACE) - { - if (flags & MAP_FIXED) - { - /* XXX this is not atomic as it is in unix! */ - /* The region is already allocated; deallocate it first. */ - err = __vm_deallocate (__mach_task_self (), mapaddr, len); - if (! err) - err = __vm_map (__mach_task_self (), - &mapaddr, (vm_size_t) len, (vm_address_t) 0, - 0, memobj, (vm_offset_t) offset, - ! (flags & MAP_SHARED), - vmprot, VM_PROT_ALL, - (flags & MAP_SHARED) ? VM_INHERIT_SHARE - : VM_INHERIT_COPY); - } - else if (mapaddr != 0) - err = __vm_map (__mach_task_self (), - &mapaddr, (vm_size_t) len, (vm_address_t) 0, - 1, memobj, (vm_offset_t) offset, - ! (flags & MAP_SHARED), - vmprot, VM_PROT_ALL, - (flags & MAP_SHARED) ? VM_INHERIT_SHARE - : VM_INHERIT_COPY); - } - - if (memobj != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), memobj); - - if (err) - return (__ptr_t) (long int) __hurd_fail (err); - - return (__ptr_t) mapaddr; -} - -weak_alias (__mmap, mmap) diff --git a/sysdeps/mach/hurd/mmap64.c b/sysdeps/mach/hurd/mmap64.c deleted file mode 100644 index ced469db18..0000000000 --- a/sysdeps/mach/hurd/mmap64.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Map addresses starting near ADDR and extending for LEN bytes. From - OFFSET into the file FD describes according to PROT and FLAGS. If ADDR - is nonzero, it is the desired mapping address. If the MAP_FIXED bit is - set in FLAGS, the mapping will be at ADDR exactly (which must be - page-aligned); otherwise the system chooses a convenient nearby address. - The return value is the actual mapping address chosen or MAP_FAILED - for errors (in which case `errno' is set). A successful `mmap' call - deallocates any previous mapping for the affected region. */ - -__ptr_t -__mmap64 (__ptr_t addr, size_t len, int prot, int flags, int fd, - __off64_t offset) -{ - vm_offset_t small_offset = (vm_offset_t) offset; - - if (small_offset != offset) - { - /* We cannot do this since the offset is too large. */ - __set_errno (EOVERFLOW); - return MAP_FAILED; - } - - return __mmap (addr, len, prot, flags, fd, small_offset); -} - -weak_alias (__mmap64, mmap64) diff --git a/sysdeps/mach/hurd/munlock.c b/sysdeps/mach/hurd/munlock.c deleted file mode 100644 index ee8235ecf0..0000000000 --- a/sysdeps/mach/hurd/munlock.c +++ /dev/null @@ -1,46 +0,0 @@ -/* munlock -- undo the effects of prior mlock calls. Mach/Hurd version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Undo the effects on these whole pages of any prior mlock calls. */ - -int -munlock (const void *addr, size_t len) -{ - mach_port_t host; - vm_address_t page; - error_t err; - - err = __get_privileged_ports (&host, NULL); - if (err) - host = __mach_host_self(); - - page = trunc_page ((vm_address_t) addr); - len = round_page ((vm_address_t) addr + len) - page; - - err = __vm_wire (host, __mach_task_self (), page, len, VM_PROT_NONE); - if (host != __mach_host_self()) - __mach_port_deallocate (__mach_task_self (), host); - - return err ? __hurd_fail (err) : 0; -} diff --git a/sysdeps/mach/hurd/net/ethernet.h b/sysdeps/mach/hurd/net/ethernet.h deleted file mode 100644 index 05201e6983..0000000000 --- a/sysdeps/mach/hurd/net/ethernet.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Based on the FreeBSD version of this file. Curiously, that file - lacks a copyright in the header. */ - -#ifndef __NET_ETHERNET_H -#define __NET_ETHERNET_H 1 - -#include -#include -#include /* IEEE 802.3 Ethernet constants */ - -__BEGIN_DECLS - -/* This is a name for the 48 bit ethernet address available on many - systems. */ -struct ether_addr -{ - uint8_t ether_addr_octet[ETH_ALEN]; -}; - -/* 10Mb/s ethernet header */ -struct ether_header -{ - uint8_t ether_dhost[ETH_ALEN]; /* destination eth addr */ - uint8_t ether_shost[ETH_ALEN]; /* source ether addr */ - uint16_t ether_type; /* packet type ID field */ -}; - -/* Ethernet protocol ID's */ -#define ETHERTYPE_PUP 0x0200 /* Xerox PUP */ -#define ETHERTYPE_IP 0x0800 /* IP */ -#define ETHERTYPE_ARP 0x0806 /* Address resolution */ -#define ETHERTYPE_REVARP 0x8035 /* Reverse ARP */ - -#define ETHER_ADDR_LEN ETH_ALEN /* size of ethernet addr */ -#define ETHER_TYPE_LEN 2 /* bytes in type field */ -#define ETHER_CRC_LEN 4 /* bytes in CRC field */ -#define ETHER_HDR_LEN ETH_HLEN /* total octets in header */ -#define ETHER_MIN_LEN (ETH_ZLEN + ETH_CRC_LEN) /* min packet length */ -#define ETHER_MAX_LEN (ETH_FRAME_LEN + ETH_CRC_LEN) /* max packet length */ - -/* make sure ethenet length is valid */ -#define ETHER_IS_VALID_LEN(foo) \ - ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN) - -/* - * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have - * (type-ETHERTYPE_TRAIL)*512 bytes of data followed - * by an ETHER type (as given above) and then the (variable-length) header. - */ -#define ETHERTYPE_TRAIL 0x1000 /* Trailer packet */ -#define ETHERTYPE_NTRAILER 16 - -#define ETHERMTU ETH_DATA_LEN -#define ETHERMIN (ETHER_MIN_LEN-ETHER_HDR_LEN-ETHER_CRC_LEN) - -__END_DECLS - -#endif /* net/ethernet.h */ diff --git a/sysdeps/mach/hurd/net/if_arp.h b/sysdeps/mach/hurd/net/if_arp.h deleted file mode 100644 index 59c5f92926..0000000000 --- a/sysdeps/mach/hurd/net/if_arp.h +++ /dev/null @@ -1,144 +0,0 @@ -/* Definitions for Address Resolution Protocol. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Based on the 4.4BSD and Linux version of this file. */ - -#ifndef _NET_IF_ARP_H - -#define _NET_IF_ARP_H 1 -#include - -#include -#include - -__BEGIN_DECLS - -/* Some internals from deep down in the kernel. */ -#define MAX_ADDR_LEN 7 - - -/* This structure defines an ethernet arp header. */ - -/* ARP protocol opcodes. */ -#define ARPOP_REQUEST 1 /* ARP request. */ -#define ARPOP_REPLY 2 /* ARP reply. */ -#define ARPOP_RREQUEST 3 /* RARP request. */ -#define ARPOP_RREPLY 4 /* RARP reply. */ - -/* See RFC 826 for protocol description. ARP packets are variable - in size; the arphdr structure defines the fixed-length portion. - Protocol type values are the same as those for 10 Mb/s Ethernet. - It is followed by the variable-sized fields ar_sha, arp_spa, - arp_tha and arp_tpa in that order, according to the lengths - specified. Field names used correspond to RFC 826. */ - -struct arphdr - { - unsigned short int ar_hrd; /* Format of hardware address. */ - unsigned short int ar_pro; /* Format of protocol address. */ - unsigned char ar_hln; /* Length of hardware address. */ - unsigned char ar_pln; /* Length of protocol address. */ - unsigned short int ar_op; /* ARP opcode (command). */ -#if 0 - /* Ethernet looks like this : This bit is variable sized - however... */ - unsigned char __ar_sha[ETH_ALEN]; /* Sender hardware address. */ - unsigned char __ar_sip[4]; /* Sender IP address. */ - unsigned char __ar_tha[ETH_ALEN]; /* Target hardware address. */ - unsigned char __ar_tip[4]; /* Target IP address. */ -#endif - }; - - -/* ARP protocol HARDWARE identifiers. */ -#define ARPHRD_NETROM 0 /* From KA9Q: NET/ROM pseudo. */ -#define ARPHRD_ETHER 1 /* Ethernet 10Mbps. */ -#define ARPHRD_EETHER 2 /* Experimental Ethernet. */ -#define ARPHRD_AX25 3 /* AX.25 Level 2. */ -#define ARPHRD_PRONET 4 /* PROnet token ring. */ -#define ARPHRD_CHAOS 5 /* Chaosnet. */ -#define ARPHRD_IEEE802 6 /* IEEE 802.2 Ethernet/TR/TB. */ -#define ARPHRD_ARCNET 7 /* ARCnet. */ -#define ARPHRD_APPLETLK 8 /* APPLEtalk. */ -#define ARPHRD_DLCI 15 /* Frame Relay DLCI. */ -#define ARPHRD_METRICOM 23 /* Metricom STRIP (new IANA id). */ - -/* Dummy types for non ARP hardware */ -#define ARPHRD_SLIP 256 -#define ARPHRD_CSLIP 257 -#define ARPHRD_SLIP6 258 -#define ARPHRD_CSLIP6 259 -#define ARPHRD_RSRVD 260 /* Notional KISS type. */ -#define ARPHRD_ADAPT 264 -#define ARPHRD_ROSE 270 -#define ARPHRD_X25 271 /* CCITT X.25. */ -#define ARPHRD_PPP 512 -#define ARPHRD_HDLC 513 /* (Cisco) HDLC. */ -#define ARPHRD_LAPB 516 /* LAPB. */ - -#define ARPHRD_TUNNEL 768 /* IPIP tunnel. */ -#define ARPHRD_TUNNEL6 769 /* IPIP6 tunnel. */ -#define ARPHRD_FRAD 770 /* Frame Relay Access Device. */ -#define ARPHRD_SKIP 771 /* SKIP vif. */ -#define ARPHRD_LOOPBACK 772 /* Loopback device. */ -#define ARPHRD_LOCALTLK 773 /* Localtalk device. */ -#define ARPHRD_FDDI 774 /* Fiber Distributed Data Interface. */ -#define ARPHRD_BIF 775 /* AP1000 BIF. */ -#define ARPHRD_SIT 776 /* sit0 device - IPv6-in-IPv4. */ - - -/* ARP ioctl request. */ -struct arpreq - { - struct sockaddr arp_pa; /* Protocol address. */ - struct sockaddr arp_ha; /* Hardware address. */ - int arp_flags; /* Flags. */ - struct sockaddr arp_netmask; /* Netmask (only for proxy arps). */ - char arp_dev[16]; - }; - -/* ARP Flag values. */ -#define ATF_COM 0x02 /* Completed entry (ha valid). */ -#define ATF_PERM 0x04 /* Permanent entry. */ -#define ATF_PUBL 0x08 /* Publish entry. */ -#define ATF_USETRAILERS 0x10 /* Has requested trailers. */ -#define ATF_NETMASK 0x20 /* Want to use a netmask (only - for proxy entries). */ -#define ATF_DONTPUB 0x40 /* Don't answer this addresses. */ -#define ATF_MAGIC 0x80 /* Automatically added entry. */ - - -/* Support for the user space arp daemon, arpd. */ -#define ARPD_UPDATE 0x01 -#define ARPD_LOOKUP 0x02 -#define ARPD_FLUSH 0x03 - -struct arpd_request - { - unsigned short int req; /* Request type. */ - uint32_t ip; /* IP address of entry. */ - unsigned long int dev; /* Device entry is tied to. */ - unsigned long int stamp; - unsigned long int updated; - unsigned char ha[MAX_ADDR_LEN]; /* Hardware address. */ - }; - -__END_DECLS - -#endif /* net/if_arp.h */ diff --git a/sysdeps/mach/hurd/net/if_ether.h b/sysdeps/mach/hurd/net/if_ether.h deleted file mode 100644 index 3fd09229e1..0000000000 --- a/sysdeps/mach/hurd/net/if_ether.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NET_IF_ETHER_H -#define _NET_IF_ETHER_H 1 - -/* - * IEEE 802.3 Ethernet magic constants. The frame sizes omit the preamble - * and FCS/CRC (frame check sequence). - */ - -#define ETH_ALEN 6 /* Octets in one ethernet addr */ -#define ETH_HLEN 14 /* Total octets in header. */ -#define ETH_ZLEN 60 /* Min. octets in frame sans FCS */ -#define ETH_DATA_LEN 1500 /* Max. octets in payload */ -#define ETH_FRAME_LEN 1514 /* Max. octets in frame sans FCS */ - -/* - * These are the defined Ethernet Protocol ID's. - */ - -#define ETH_P_LOOP 0x0060 /* Ethernet Loopback packet */ -#define ETH_P_ECHO 0x0200 /* Ethernet Echo packet */ -#define ETH_P_PUP 0x0400 /* Xerox PUP packet */ -#define ETH_P_IP 0x0800 /* Internet Protocol packet */ -#define ETH_P_X25 0x0805 /* CCITT X.25 */ -#define ETH_P_ARP 0x0806 /* Address Resolution packet */ -#define ETH_P_BPQ 0x08FF /* G8BPQ AX.25 Ethernet Packet [ NOT AN OFFICIALLY REGISTERED ID ] */ -#define ETH_P_DEC 0x6000 /* DEC Assigned proto */ -#define ETH_P_DNA_DL 0x6001 /* DEC DNA Dump/Load */ -#define ETH_P_DNA_RC 0x6002 /* DEC DNA Remote Console */ -#define ETH_P_DNA_RT 0x6003 /* DEC DNA Routing */ -#define ETH_P_LAT 0x6004 /* DEC LAT */ -#define ETH_P_DIAG 0x6005 /* DEC Diagnostics */ -#define ETH_P_CUST 0x6006 /* DEC Customer use */ -#define ETH_P_SCA 0x6007 /* DEC Systems Comms Arch */ -#define ETH_P_RARP 0x8035 /* Reverse Addr Res packet */ -#define ETH_P_ATALK 0x809B /* Appletalk DDP */ -#define ETH_P_AARP 0x80F3 /* Appletalk AARP */ -#define ETH_P_IPX 0x8137 /* IPX over DIX */ -#define ETH_P_IPV6 0x86DD /* IPv6 over bluebook */ - -/* - * Non DIX types. Won't clash for 1500 types. - */ - -#define ETH_P_802_3 0x0001 /* Dummy type for 802.3 frames */ -#define ETH_P_AX25 0x0002 /* Dummy protocol id for AX.25 */ -#define ETH_P_ALL 0x0003 /* Every packet (be careful!!!) */ -#define ETH_P_802_2 0x0004 /* 802.2 frames */ -#define ETH_P_SNAP 0x0005 /* Internal only */ -#define ETH_P_DDCMP 0x0006 /* DEC DDCMP: Internal only */ -#define ETH_P_WAN_PPP 0x0007 /* Dummy type for WAN PPP frames*/ -#define ETH_P_PPP_MP 0x0008 /* Dummy type for PPP MP frames */ -#define ETH_P_LOCALTALK 0x0009 /* Localtalk pseudo type */ -#define ETH_P_PPPTALK 0x0010 /* Dummy type for Atalk over PPP*/ -#define ETH_P_TR_802_2 0x0011 /* 802.2 frames */ - -/* - * This is an Ethernet frame header. - */ - -struct ethhdr -{ - unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ - unsigned char h_source[ETH_ALEN]; /* source ether addr */ - unsigned short int h_proto; /* packet type ID field */ -}; - -#endif /* net/if_ether.h */ diff --git a/sysdeps/mach/hurd/net/if_ppp.h b/sysdeps/mach/hurd/net/if_ppp.h deleted file mode 100644 index 8ee620bd03..0000000000 --- a/sysdeps/mach/hurd/net/if_ppp.h +++ /dev/null @@ -1,172 +0,0 @@ -/* From: if_ppp.h,v 1.3 1995/06/12 11:36:50 paulus Exp */ - -/* - * if_ppp.h - Point-to-Point Protocol definitions. - * - * Copyright (c) 1989 Carnegie Mellon University. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -/* - * ==FILEVERSION 960926== - * - * NOTE TO MAINTAINERS: - * If you modify this file at all, please set the above date. - * if_ppp.h is shipped with a PPP distribution as well as with the kernel; - * if everyone increases the FILEVERSION number above, then scripts - * can do the right thing when deciding whether to install a new if_ppp.h - * file. Don't change the format of that line otherwise, so the - * installation script can recognize it. - */ - - -#ifndef __NET_IF_PPP_H -#define __NET_IF_PPP_H 1 - -#include -#include - -#include -#include -#include - -__BEGIN_DECLS - -/* - * Packet sizes - */ - -#define PPP_MTU 1500 /* Default MTU (size of Info field) */ -#define PPP_MAXMRU 65000 /* Largest MRU we allow */ -#define PPP_VERSION "2.2.0" -#define PPP_MAGIC 0x5002 /* Magic value for the ppp structure */ -#define PROTO_IPX 0x002b /* protocol numbers */ -#define PROTO_DNA_RT 0x0027 /* DNA Routing */ - - -/* - * Bit definitions for flags. - */ - -#define SC_COMP_PROT 0x00000001 /* protocol compression (output) */ -#define SC_COMP_AC 0x00000002 /* header compression (output) */ -#define SC_COMP_TCP 0x00000004 /* TCP (VJ) compression (output) */ -#define SC_NO_TCP_CCID 0x00000008 /* disable VJ connection-id comp. */ -#define SC_REJ_COMP_AC 0x00000010 /* reject adrs/ctrl comp. on input */ -#define SC_REJ_COMP_TCP 0x00000020 /* reject TCP (VJ) comp. on input */ -#define SC_CCP_OPEN 0x00000040 /* Look at CCP packets */ -#define SC_CCP_UP 0x00000080 /* May send/recv compressed packets */ -#define SC_ENABLE_IP 0x00000100 /* IP packets may be exchanged */ -#define SC_COMP_RUN 0x00001000 /* compressor has been inited */ -#define SC_DECOMP_RUN 0x00002000 /* decompressor has been inited */ -#define SC_DEBUG 0x00010000 /* enable debug messages */ -#define SC_LOG_INPKT 0x00020000 /* log contents of good pkts recvd */ -#define SC_LOG_OUTPKT 0x00040000 /* log contents of pkts sent */ -#define SC_LOG_RAWIN 0x00080000 /* log all chars received */ -#define SC_LOG_FLUSH 0x00100000 /* log all chars flushed */ -#define SC_MASK 0x0fE0ffff /* bits that user can change */ - -/* state bits */ -#define SC_ESCAPED 0x80000000 /* saw a PPP_ESCAPE */ -#define SC_FLUSH 0x40000000 /* flush input until next PPP_FLAG */ -#define SC_VJ_RESET 0x20000000 /* Need to reset the VJ decompressor */ -#define SC_XMIT_BUSY 0x10000000 /* ppp_write_wakeup is active */ -#define SC_RCV_ODDP 0x08000000 /* have rcvd char with odd parity */ -#define SC_RCV_EVNP 0x04000000 /* have rcvd char with even parity */ -#define SC_RCV_B7_1 0x02000000 /* have rcvd char with bit 7 = 1 */ -#define SC_RCV_B7_0 0x01000000 /* have rcvd char with bit 7 = 0 */ -#define SC_DC_FERROR 0x00800000 /* fatal decomp error detected */ -#define SC_DC_ERROR 0x00400000 /* non-fatal decomp error detected */ - -/* - * Ioctl definitions. - */ - -struct npioctl { - int protocol; /* PPP protocol, e.g. PPP_IP */ - enum NPmode mode; -}; - -/* Structure describing a CCP configuration option, for PPPIOCSCOMPRESS */ -struct ppp_option_data { - uint8_t *ptr; - uint32_t length; - int transmit; -}; - -/* 'struct ifreq' is only available from net/if.h under __USE_MISC. */ -#ifdef __USE_MISC -struct ifpppstatsreq { - struct ifreq b; - struct ppp_stats stats; /* statistic information */ -}; - -struct ifpppcstatsreq { - struct ifreq b; - struct ppp_comp_stats stats; -}; - -#define ifr__name b.ifr_ifrn.ifrn_name -#define stats_ptr b.ifr_ifru.ifru_data -#endif - -/* - * Ioctl definitions. - */ - -#define PPPIOCGFLAGS _IOR('t', 90, int) /* get configuration flags */ -#define PPPIOCSFLAGS _IOW('t', 89, int) /* set configuration flags */ -#define PPPIOCGASYNCMAP _IOR('t', 88, int) /* get async map */ -#define PPPIOCSASYNCMAP _IOW('t', 87, int) /* set async map */ -#define PPPIOCGUNIT _IOR('t', 86, int) /* get ppp unit number */ -#define PPPIOCGRASYNCMAP _IOR('t', 85, int) /* get receive async map */ -#define PPPIOCSRASYNCMAP _IOW('t', 84, int) /* set receive async map */ -#define PPPIOCGMRU _IOR('t', 83, int) /* get max receive unit */ -#define PPPIOCSMRU _IOW('t', 82, int) /* set max receive unit */ -#define PPPIOCSMAXCID _IOW('t', 81, int) /* set VJ max slot ID */ -#define PPPIOCGXASYNCMAP _IOR('t', 80, ext_accm) /* get extended ACCM */ -#define PPPIOCSXASYNCMAP _IOW('t', 79, ext_accm) /* set extended ACCM */ -#define PPPIOCXFERUNIT _IO('t', 78) /* transfer PPP unit */ -#define PPPIOCSCOMPRESS _IOW('t', 77, struct ppp_option_data) -#define PPPIOCGNPMODE _IOWR('t', 76, struct npioctl) /* get NP mode */ -#define PPPIOCSNPMODE _IOW('t', 75, struct npioctl) /* set NP mode */ -#define PPPIOCGDEBUG _IOR('t', 65, int) /* Read debug level */ -#define PPPIOCSDEBUG _IOW('t', 64, int) /* Set debug level */ -#define PPPIOCGIDLE _IOR('t', 63, struct ppp_idle) /* get idle time */ - -#define SIOCGPPPSTATS (SIOCDEVPRIVATE + 0) -#define SIOCGPPPVER (SIOCDEVPRIVATE + 1) /* NEVER change this!! */ -#define SIOCGPPPCSTATS (SIOCDEVPRIVATE + 2) - -#if !defined(ifr_mtu) -#define ifr_mtu ifr_ifru.ifru_metric -#endif - -__END_DECLS - -#endif /* net/if_ppp.h */ diff --git a/sysdeps/mach/hurd/net/route.h b/sysdeps/mach/hurd/net/route.h deleted file mode 100644 index 93f11ef4da..0000000000 --- a/sysdeps/mach/hurd/net/route.h +++ /dev/null @@ -1,140 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc.. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Based on the 4.4BSD and Linux version of this file. */ - -#ifndef _NET_ROUTE_H - -#define _NET_ROUTE_H 1 -#include - -#include -#include -#include - - -/* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */ -struct rtentry - { - unsigned long int rt_pad1; - struct sockaddr rt_dst; /* Target address. */ - struct sockaddr rt_gateway; /* Gateway addr (RTF_GATEWAY). */ - struct sockaddr rt_genmask; /* Target network mask (IP). */ - unsigned short int rt_flags; - short int rt_pad2; - unsigned long int rt_pad3; - unsigned char rt_tos; - unsigned char rt_class; - short int rt_pad4; - short int rt_metric; /* +1 for binary compatibility! */ - char *rt_dev; /* Forcing the device at add. */ - unsigned long int rt_mtu; /* Per route MTU/Window. */ - unsigned long int rt_window; /* Window clamping. */ - unsigned short int rt_irtt; /* Initial RTT. */ - }; -/* Compatibility hack. */ -#define rt_mss rt_mtu - - -struct in6_rtmsg - { - struct in6_addr rtmsg_dst; - struct in6_addr rtmsg_src; - struct in6_addr rtmsg_gateway; - uint32_t rtmsg_type; - uint16_t rtmsg_dst_len; - uint16_t rtmsg_src_len; - uint32_t rtmsg_metric; - unsigned long int rtmsg_info; - uint32_t rtmsg_flags; - int rtmsg_ifindex; - }; - - -#define RTF_UP 0x0001 /* Route usable. */ -#define RTF_GATEWAY 0x0002 /* Destination is a gateway. */ - -#define RTF_HOST 0x0004 /* Host entry (net otherwise). */ -#define RTF_REINSTATE 0x0008 /* Reinstate route after timeout. */ -#define RTF_DYNAMIC 0x0010 /* Created dyn. (by redirect). */ -#define RTF_MODIFIED 0x0020 /* Modified dyn. (by redirect). */ -#define RTF_MTU 0x0040 /* Specific MTU for this route. */ -#define RTF_MSS RTF_MTU /* Compatibility. */ -#define RTF_WINDOW 0x0080 /* Per route window clamping. */ -#define RTF_IRTT 0x0100 /* Initial round trip time. */ -#define RTF_REJECT 0x0200 /* Reject route. */ -#define RTF_STATIC 0x0400 /* Manually injected route. */ -#define RTF_XRESOLVE 0x0800 /* External resolver. */ -#define RTF_NOFORWARD 0x1000 /* Forwarding inhibited. */ -#define RTF_THROW 0x2000 /* Go to next class. */ -#define RTF_NOPMTUDISC 0x4000 /* Do not send packets with DF. */ - -/* for IPv6 */ -#define RTF_DEFAULT 0x00010000 /* default - learned via ND */ -#define RTF_ALLONLINK 0x00020000 /* fallback, no routers on link */ -#define RTF_ADDRCONF 0x00040000 /* addrconf route - RA */ - -#define RTF_LINKRT 0x00100000 /* link specific - device match */ -#define RTF_NONEXTHOP 0x00200000 /* route with no nexthop */ - -#define RTF_CACHE 0x01000000 /* cache entry */ -#define RTF_FLOW 0x02000000 /* flow significant route */ -#define RTF_POLICY 0x04000000 /* policy route */ - -#define RTCF_VALVE 0x00200000 -#define RTCF_MASQ 0x00400000 -#define RTCF_NAT 0x00800000 -#define RTCF_DOREDIRECT 0x01000000 -#define RTCF_LOG 0x02000000 -#define RTCF_DIRECTSRC 0x04000000 - -#define RTF_LOCAL 0x80000000 -#define RTF_INTERFACE 0x40000000 -#define RTF_MULTICAST 0x20000000 -#define RTF_BROADCAST 0x10000000 -#define RTF_NAT 0x08000000 - -#define RTF_ADDRCLASSMASK 0xF8000000 -#define RT_ADDRCLASS(flags) ((uint32_t) flags >> 23) - -#define RT_TOS(tos) ((tos) & IPTOS_TOS_MASK) - -#define RT_LOCALADDR(flags) ((flags & RTF_ADDRCLASSMASK) \ - == (RTF_LOCAL|RTF_INTERFACE)) - -#define RT_CLASS_UNSPEC 0 -#define RT_CLASS_DEFAULT 253 - -#define RT_CLASS_MAIN 254 -#define RT_CLASS_LOCAL 255 -#define RT_CLASS_MAX 255 - - -#define RTMSG_ACK NLMSG_ACK -#define RTMSG_OVERRUN NLMSG_OVERRUN - -#define RTMSG_NEWDEVICE 0x11 -#define RTMSG_DELDEVICE 0x12 -#define RTMSG_NEWROUTE 0x21 -#define RTMSG_DELROUTE 0x22 -#define RTMSG_NEWRULE 0x31 -#define RTMSG_DELRULE 0x32 -#define RTMSG_CONTROL 0x40 - -#define RTMSG_AR_FAILED 0x51 /* Address Resolution failed. */ - -#endif /* net/route.h */ diff --git a/sysdeps/mach/hurd/open.c b/sysdeps/mach/hurd/open.c deleted file mode 100644 index d25754205b..0000000000 --- a/sysdeps/mach/hurd/open.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Open FILE with access OFLAG. If O_CREAT or O_TMPFILE is in OFLAG, - a third argument is the file protection. */ -int -__libc_open (const char *file, int oflag, ...) -{ - mode_t mode; - io_t port; - - if (__OPEN_NEEDS_MODE (oflag)) - { - va_list arg; - va_start (arg, oflag); - mode = va_arg (arg, mode_t); - va_end (arg); - } - else - mode = 0; - - port = __file_name_lookup (file, oflag, mode); - if (port == MACH_PORT_NULL) - return -1; - - return _hurd_intern_fd (port, oflag, 1); -} - -libc_hidden_def (__libc_open) -weak_alias (__libc_open, __open) -libc_hidden_weak (__open) -weak_alias (__libc_open, open) - - -/* open64 is just the same as open for us. */ -weak_alias (__libc_open, __libc_open64) -weak_alias (__libc_open, __open64) -libc_hidden_weak (__open64) -weak_alias (__libc_open, open64) diff --git a/sysdeps/mach/hurd/open64.c b/sysdeps/mach/hurd/open64.c deleted file mode 100644 index 018ac94f28..0000000000 --- a/sysdeps/mach/hurd/open64.c +++ /dev/null @@ -1 +0,0 @@ -/* open64 is defined in open.c as an alias. */ diff --git a/sysdeps/mach/hurd/openat.c b/sysdeps/mach/hurd/openat.c deleted file mode 100644 index 1213b663ac..0000000000 --- a/sysdeps/mach/hurd/openat.c +++ /dev/null @@ -1,59 +0,0 @@ -/* openat -- Open a file named relative to an open directory. Hurd version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - -/* Open FILE with access OFLAG. Interpret relative paths relative to - the directory associated with FD. If O_CREAT or O_TMPFILE is in OFLAG, a - third argument is the file protection. */ -int -__openat (int fd, const char *file, int oflag, ...) -{ - mode_t mode; - io_t port; - - if (__OPEN_NEEDS_MODE (oflag)) - { - va_list arg; - va_start (arg, oflag); - mode = va_arg (arg, mode_t); - va_end (arg); - } - else - mode = 0; - - port = __file_name_lookup_at (fd, 0, file, oflag, mode); - if (port == MACH_PORT_NULL) - return -1; - - return _hurd_intern_fd (port, oflag, 1); -} -libc_hidden_def (__openat) -weak_alias (__openat, openat) - -/* openat64 is just the same as openat for us. */ -weak_alias (__openat, __openat64) -libc_hidden_weak (__openat64) -weak_alias (__openat, openat64) diff --git a/sysdeps/mach/hurd/openat64.c b/sysdeps/mach/hurd/openat64.c deleted file mode 100644 index 15d9d6a183..0000000000 --- a/sysdeps/mach/hurd/openat64.c +++ /dev/null @@ -1 +0,0 @@ -/* openat64 is defined in openat.c as an alias. */ diff --git a/sysdeps/mach/hurd/opendir.c b/sysdeps/mach/hurd/opendir.c deleted file mode 100644 index b3dab24da1..0000000000 --- a/sysdeps/mach/hurd/opendir.c +++ /dev/null @@ -1,130 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "dirstream.h" - - -/* Open a directory stream on a file descriptor in Hurd internal form. - We do no checking here on the descriptor. */ -DIR * -_hurd_fd_opendir (struct hurd_fd *d) -{ - DIR *dirp; - - if (d == NULL) - { - errno = EBADF; - return NULL; - } - - dirp = (DIR *) malloc (sizeof (DIR)); - if (dirp == NULL) - return NULL; - - /* Set the descriptor to close on exec. */ - HURD_CRITICAL_BEGIN; - __spin_lock (&d->port.lock); - d->flags |= FD_CLOEXEC; - __spin_unlock (&d->port.lock); - HURD_CRITICAL_END; - - dirp->__fd = d; - dirp->__data = dirp->__ptr = NULL; - dirp->__entry_data = dirp->__entry_ptr = 0; - dirp->__allocation = 0; - dirp->__size = 0; - - __libc_lock_init (dirp->__lock); - - return dirp; -} - - -DIR * -internal_function -__opendirat (int dfd, const char *name) -{ - if (name[0] == '\0') - { - /* POSIX.1-1990 says an empty name gets ENOENT; - but `open' might like it fine. */ - __set_errno (ENOENT); - return NULL; - } - - int flags = O_RDONLY | O_NONBLOCK | O_DIRECTORY | O_CLOEXEC; - int fd; -#if IS_IN (rtld) - assert (dfd == AT_FDCWD); - fd = open_not_cancel_2 (name, flags); -#else - fd = openat_not_cancel_3 (dfd, name, flags); -#endif - if (fd < 0) - return NULL; - - /* Extract the pointer to the descriptor structure. */ - DIR *dirp = _hurd_fd_opendir (_hurd_fd_get (fd)); - if (dirp == NULL) - __close (fd); - - return dirp; -} - - -/* Open a directory stream on NAME. */ -DIR * -__opendir (const char *name) -{ -#if 0 /* TODO. */ - return __opendirat (AT_FDCWD, name); -#else - if (name[0] == '\0') - { - /* POSIX.1-1990 says an empty name gets ENOENT; - but `open' might like it fine. */ - __set_errno (ENOENT); - return NULL; - } - - int fd = __open (name, O_RDONLY | O_NONBLOCK | O_DIRECTORY); - if (fd < 0) - return NULL; - - /* Extract the pointer to the descriptor structure. */ - DIR *dirp = _hurd_fd_opendir (_hurd_fd_get (fd)); - if (dirp == NULL) - __close (fd); - - return dirp; -#endif -} -weak_alias (__opendir, opendir) diff --git a/sysdeps/mach/hurd/pathconf.c b/sysdeps/mach/hurd/pathconf.c deleted file mode 100644 index bae055ac98..0000000000 --- a/sysdeps/mach/hurd/pathconf.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Get file-specific information about FILE. */ -long int -__pathconf (const char *file, int name) -{ - error_t err; - int value; /* RPC returns an `int', not a `long int'. */ - file_t port = __file_name_lookup (file, 0, 0); - if (port == MACH_PORT_NULL) - return -1L; - err = __io_pathconf (port, name, &value); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err), -1L; - return value; -} - -weak_alias (__pathconf, pathconf) diff --git a/sysdeps/mach/hurd/pipe.c b/sysdeps/mach/hurd/pipe.c deleted file mode 100644 index 9525fd9ef0..0000000000 --- a/sysdeps/mach/hurd/pipe.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Create a one-way communication channel (pipe). - Actually the channel is two-way on the Hurd. - If successful, two file descriptors are stored in FDS; - bytes written on FDS[1] can be read from FDS[0]. - Returns 0 if successful, -1 if not. */ -int -__pipe (int fds[2]) -{ - int save_errno = errno; - int result; - - /* The magic S_IFIFO protocol tells the pflocal server to create - sockets which report themselves as FIFOs, as POSIX requires for - pipes. */ - result = __socketpair (PF_LOCAL, SOCK_STREAM, S_IFIFO, fds); - if (result == -1 && errno == EPROTONOSUPPORT) - { - /* We contacted an "old" pflocal server that doesn't support the - magic S_IFIFO protocol. - FIXME: Remove this junk somewhere in the future. */ - __set_errno (save_errno); - return __socketpair (PF_LOCAL, SOCK_STREAM, 0, fds); - } - - return result; -} -libc_hidden_def (__pipe) -weak_alias (__pipe, pipe) diff --git a/sysdeps/mach/hurd/poll.c b/sysdeps/mach/hurd/poll.c deleted file mode 100644 index 0625d5db8f..0000000000 --- a/sysdeps/mach/hurd/poll.c +++ /dev/null @@ -1,47 +0,0 @@ -/* poll file descriptors. Hurd version. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Poll the file descriptors described by the NFDS structures starting at - FDS. If TIMEOUT is nonzero and not -1, allow TIMEOUT milliseconds for - an event to occur; if TIMEOUT is -1, block until an event occurs. - Returns the number of file descriptors with events, zero if timed out, - or -1 for errors. */ - -int -__poll (struct pollfd *fds, nfds_t nfds, int timeout) -{ - struct timespec ts, *to; - - if (timeout < 0) - to = NULL; - else - { - ts.tv_sec = timeout / 1000; - ts.tv_nsec = (timeout % 1000) * 1000000; - to = &ts; - } - - return _hurd_select (nfds, fds, NULL, NULL, NULL, to, NULL); -} -libc_hidden_def (__poll) -weak_alias (__poll, poll) diff --git a/sysdeps/mach/hurd/ppoll.c b/sysdeps/mach/hurd/ppoll.c deleted file mode 100644 index 432b1713b7..0000000000 --- a/sysdeps/mach/hurd/ppoll.c +++ /dev/null @@ -1,30 +0,0 @@ -/* poll file descriptors. Hurd version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -ppoll (struct pollfd *fds, nfds_t nfds, - const struct timespec *timeout, const sigset_t *sigmask) -{ - return _hurd_select (nfds, fds, NULL, NULL, NULL, timeout, sigmask); -} -libc_hidden_def (ppoll) diff --git a/sysdeps/mach/hurd/pread.c b/sysdeps/mach/hurd/pread.c deleted file mode 100644 index 7d732cc4d7..0000000000 --- a/sysdeps/mach/hurd/pread.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Read block from given position in file without changing file pointer. - Hurd version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ssize_t -__libc_pread (int fd, void *buf, size_t nbytes, off_t offset) -{ - return __libc_pread64 (fd, buf, nbytes, (off64_t) offset); -} - -#ifndef __libc_pread -strong_alias (__libc_pread, __pread) -weak_alias (__libc_pread, pread) -#endif diff --git a/sysdeps/mach/hurd/pread64.c b/sysdeps/mach/hurd/pread64.c deleted file mode 100644 index c4a61c92e2..0000000000 --- a/sysdeps/mach/hurd/pread64.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Read block from given position in file without changing file pointer. - Hurd version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -ssize_t -__libc_pread64 (int fd, void *buf, size_t nbytes, off64_t offset) -{ - error_t err; - if (offset < 0) - err = EINVAL; - else - err = HURD_FD_USE (fd, _hurd_fd_read (descriptor, buf, &nbytes, offset)); - return err ? __hurd_dfail (fd, err) : nbytes; -} - -#ifndef __libc_pread64 -weak_alias (__libc_pread64, __pread64) -weak_alias (__libc_pread64, pread64) -#endif diff --git a/sysdeps/mach/hurd/prof-freq.c b/sysdeps/mach/hurd/prof-freq.c deleted file mode 100644 index a3707033a6..0000000000 --- a/sysdeps/mach/hurd/prof-freq.c +++ /dev/null @@ -1,2 +0,0 @@ -/* __profile_frequency is in sysdeps/mach/hurd/profil.c. This file -is here as a place-holder to prevent the use of sysdeps/generic/prof-freq.c. */ diff --git a/sysdeps/mach/hurd/profil.c b/sysdeps/mach/hurd/profil.c deleted file mode 100644 index 6830e0facc..0000000000 --- a/sysdeps/mach/hurd/profil.c +++ /dev/null @@ -1,285 +0,0 @@ -/* Low-level statistical profiling support function. Mach/Hurd version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#define MAX_PC_SAMPLES 512 /* XXX ought to be exported in kernel hdr */ - -static thread_t profile_thread = MACH_PORT_NULL; -static u_short *samples; -static size_t maxsamples; -static size_t pc_offset; -static size_t sample_scale; -static sampled_pc_seqno_t seqno; -static spin_lock_t lock = SPIN_LOCK_INITIALIZER; -static mach_msg_timeout_t collector_timeout; /* ms between collections. */ -static int profile_tick; - -/* Reply port used by profiler thread */ -static mach_port_t profil_reply_port = MACH_PORT_NULL; - -/* Forwards */ -static kern_return_t profil_task_get_sampled_pcs (mach_port_t, - sampled_pc_seqno_t *, - sampled_pc_array_t, - mach_msg_type_number_t *); -static void fetch_samples (void); -static void profile_waiter (void); - -/* Enable statistical profiling, writing samples of the PC into at most - SIZE bytes of SAMPLE_BUFFER; every processor clock tick while profiling - is enabled, the system examines the user PC and increments - SAMPLE_BUFFER[((PC - OFFSET) / 2) * SCALE / 65536]. If SCALE is zero, - disable profiling. Returns zero on success, -1 on error. */ - -static error_t -update_waiter (u_short *sample_buffer, size_t size, size_t offset, u_int scale) -{ - error_t err; - - if (profile_thread == MACH_PORT_NULL) - { - if (profil_reply_port == MACH_PORT_NULL) - profil_reply_port = __mach_reply_port (); - /* Set up the profiling collector thread. */ - err = __thread_create (__mach_task_self (), &profile_thread); - if (! err) - err = __mach_setup_thread (__mach_task_self (), profile_thread, - &profile_waiter, NULL, NULL); - } - else - err = 0; - - if (! err) - { - err = __task_enable_pc_sampling (__mach_task_self (), &profile_tick, - SAMPLED_PC_PERIODIC); - if (!err && sample_scale == 0) - /* Profiling was not turned on, so the collector thread was - suspended. Resume it. */ - err = __thread_resume (profile_thread); - if (! err) - { - samples = sample_buffer; - maxsamples = size / sizeof *sample_buffer; - pc_offset = offset; - sample_scale = scale; - /* Calculate a good period for the collector thread. From TICK - and the kernel buffer size we get the length of time it takes - to fill the buffer; translate that to milliseconds for - mach_msg, and chop it in half for general lag factor. */ - collector_timeout = MAX_PC_SAMPLES * profile_tick / 1000 / 2; - } - } - - return err; -} - -int -__profile_frequency (void) -{ - return 1000000 / profile_tick; -} -libc_hidden_def (__profile_frequency) - -int -__profil (u_short *sample_buffer, size_t size, size_t offset, u_int scale) -{ - error_t err; - - __spin_lock (&lock); - - if (scale == 0) - { - /* Disable profiling. */ - int count; - - if (profile_thread != MACH_PORT_NULL) - __thread_suspend (profile_thread); - - /* Fetch the last set of samples */ - if (sample_scale) - fetch_samples (); - - err = __task_disable_pc_sampling (__mach_task_self (), &count); - sample_scale = 0; - seqno = 0; - } - else - err = update_waiter (sample_buffer, size, offset, scale); - - __spin_unlock (&lock); - - return err ? __hurd_fail (err) : 0; -} -weak_alias (__profil, profil) - -/* Fetch PC samples. This function must be very careful not to depend - on Hurd threadvar variables. We arrange that by using a special - stub arranged for at the end of this file. */ -static void -fetch_samples (void) -{ - sampled_pc_t pc_samples[MAX_PC_SAMPLES]; - mach_msg_type_number_t nsamples, i; - error_t err; - - nsamples = MAX_PC_SAMPLES; - - err = profil_task_get_sampled_pcs (__mach_task_self (), &seqno, - pc_samples, &nsamples); - if (err) - { - static error_t special_profil_failure; - static volatile int a, b, c; - - special_profil_failure = err; - a = 1; - b = 0; - while (1) - c = a / b; - } - - for (i = 0; i < nsamples; ++i) - { - /* Do arithmetic in long long to avoid overflow problems. */ - long long pc_difference = pc_samples[i].pc - pc_offset; - size_t idx = ((pc_difference / 2) * sample_scale) / 65536; - if (idx < maxsamples) - ++samples[idx]; - } -} - - -/* This function must be very careful not to depend on Hurd threadvar - variables. We arrange that by using special stubs arranged for at the - end of this file. */ -static void -profile_waiter (void) -{ - mach_msg_header_t msg; - mach_port_t timeout_reply_port; - - timeout_reply_port = __mach_reply_port (); - - while (1) - { - __spin_lock (&lock); - - fetch_samples (); - - __spin_unlock (&lock); - - __mach_msg (&msg, MACH_RCV_MSG|MACH_RCV_TIMEOUT, 0, sizeof msg, - timeout_reply_port, collector_timeout, MACH_PORT_NULL); - } -} - -/* Fork interaction */ - -/* Before fork, lock the interlock so that we are in a clean state. */ -static void -fork_profil_prepare (void) -{ - __spin_lock (&lock); -} -text_set_element (_hurd_fork_prepare_hook, fork_profil_prepare); - -/* In the parent, unlock the interlock once fork is complete. */ -static void -fork_profil_parent (void) -{ - __spin_unlock (&lock); -} -text_set_element (_hurd_fork_parent_hook, fork_profil_parent); - -/* In the child, unlock the interlock, and start a profiling thread up - if necessary. */ -static void -fork_profil_child (void) -{ - u_short *sb; - size_t n, o, ss; - error_t err; - - __spin_unlock (&lock); - - if (profile_thread != MACH_PORT_NULL) - { - __mach_port_deallocate (__mach_task_self (), profile_thread); - profile_thread = MACH_PORT_NULL; - } - - sb = samples; - samples = NULL; - n = maxsamples; - maxsamples = 0; - o = pc_offset; - pc_offset = 0; - ss = sample_scale; - sample_scale = 0; - - if (ss != 0) - { - err = update_waiter (sb, n * sizeof *sb, o, ss); - assert_perror (err); - } -} -text_set_element (_hurd_fork_child_hook, fork_profil_child); - - - - -/* Special RPC stubs for profile_waiter are made by including the normal - source code, with special CPP state to prevent it from doing the - usual thing. */ - -/* Include these first; then our #define's will take full effect, not - being overridden. */ -#include - -/* This need not do anything; it is always associated with errors, which - are fatal in profile_waiter anyhow. */ -#define __mig_put_reply_port(foo) - -/* Use our static variable instead of the usual threadvar mechanism for - this. */ -#define __mig_get_reply_port() profil_reply_port - -/* Make the functions show up as static */ -#define mig_external static - -/* Turn off the attempt to generate ld aliasing records. */ -#undef weak_alias -#define weak_alias(a,b) - -/* And change their names to avoid confusing disasters. */ -#define __vm_deallocate_rpc profil_vm_deallocate -#define __task_get_sampled_pcs profil_task_get_sampled_pcs - -/* And include the source code */ -#include <../mach/RPC_task_get_sampled_pcs.c> diff --git a/sysdeps/mach/hurd/pselect.c b/sysdeps/mach/hurd/pselect.c deleted file mode 100644 index 007416ca11..0000000000 --- a/sysdeps/mach/hurd/pselect.c +++ /dev/null @@ -1,39 +0,0 @@ -/* pselect for Hurd. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Check the first NFDS descriptors each in READFDS (if not NULL) for read - readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS - (if not NULL) for exceptional conditions. If TIMEOUT is not NULL, time out - after waiting the interval specified therein. Additionally set the sigmask - SIGMASK for this call. Returns the number of ready descriptors, or -1 for - errors. */ -int -__pselect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, - const struct timespec *timeout, const sigset_t *sigmask) -{ - return _hurd_select (nfds, NULL, - readfds, writefds, exceptfds, timeout, sigmask); -} -weak_alias (__pselect, pselect) diff --git a/sysdeps/mach/hurd/ptrace.c b/sysdeps/mach/hurd/ptrace.c deleted file mode 100644 index f8ea7375b3..0000000000 --- a/sysdeps/mach/hurd/ptrace.c +++ /dev/null @@ -1,385 +0,0 @@ -/* Process tracing interface `ptrace' for GNU Hurd. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - -/* Perform process tracing functions. REQUEST is one of the values - in , and determines the action to be taken. - For all requests except PTRACE_TRACEME, PID specifies the process to be - traced. - - PID and the other arguments described above for the various requests should - appear (those that are used for the particular request) as: - pid_t PID, void *ADDR, int DATA, void *ADDR2 - after PID. */ -int -ptrace (enum __ptrace_request request, ... ) -{ - pid_t pid; - void *addr, *addr2; - natural_t data; - va_list ap; - - /* Read data from PID's address space, from ADDR for DATA bytes. */ - error_t read_data (task_t task, vm_address_t *ourpage, vm_size_t *size) - { - /* Read the pages containing the addressed range. */ - error_t err; - *size = round_page (addr + data) - trunc_page (addr); - err = __vm_read (task, trunc_page (addr), *size, ourpage, size); - return err; - } - - /* Fetch the thread port for PID's user thread. */ - error_t fetch_user_thread (task_t task, thread_t *thread) - { - thread_t threadbuf[3], *threads = threadbuf; - mach_msg_type_number_t nthreads = 3, i; - error_t err = __task_threads (task, &threads, &nthreads); - if (err) - return err; - if (nthreads == 0) - return EINVAL; - *thread = threads[0]; /* Assume user thread is first. */ - for (i = 1; i < nthreads; ++i) - __mach_port_deallocate (__mach_task_self (), threads[i]); - if (threads != threadbuf) - __vm_deallocate (__mach_task_self (), - (vm_address_t) threads, nthreads * sizeof threads[0]); - return 0; - } - - /* Fetch a thread state structure from PID and store it at ADDR. */ - int get_regs (int flavor, mach_msg_type_number_t count) - { - error_t err; - task_t task = __pid2task (pid); - thread_t thread; - if (task == MACH_PORT_NULL) - return -1; - err = fetch_user_thread (task, &thread); - __mach_port_deallocate (__mach_task_self (), task); - if (!err) - err = __thread_get_state (thread, flavor, addr, &count); - __mach_port_deallocate (__mach_task_self (), thread); - return err ? __hurd_fail (err) : 0; - } - - - switch (request) - { - case PTRACE_TRACEME: - /* Make this process be traced. */ - __sigfillset (&_hurdsig_traced); - __USEPORT (PROC, __proc_mark_traced (port)); - break; - - case PTRACE_CONT: - va_start (ap, request); - pid = va_arg (ap, pid_t); - addr = va_arg (ap, void *); - data = va_arg (ap, int); - va_end (ap); - { - /* Send a DATA signal to PID, telling it to take the signal - normally even if it's traced. */ - error_t err; - task_t task = __pid2task (pid); - if (task == MACH_PORT_NULL) - return -1; - if (data == SIGKILL) - err = __task_terminate (task); - else - { - if (addr != (void *) 1) - { - /* Move the user thread's PC to ADDR. */ - thread_t thread; - err = fetch_user_thread (task, &thread); - if (!err) - { - struct machine_thread_state state; - mach_msg_type_number_t count = MACHINE_THREAD_STATE_COUNT; - err = __thread_get_state (thread, - MACHINE_THREAD_STATE_FLAVOR, - (natural_t *) &state, &count); - if (!err) - { - MACHINE_THREAD_STATE_SET_PC (&state, addr); - err = __thread_set_state (thread, - MACHINE_THREAD_STATE_FLAVOR, - (natural_t *) &state, count); - } - - } - __mach_port_deallocate (__mach_task_self (), thread); - } - else - err = 0; - - if (! err) - /* Tell the process to take the signal (or just resume if 0). */ - err = HURD_MSGPORT_RPC - (__USEPORT (PROC, __proc_getmsgport (port, pid, &msgport)), - 0, 0, __msg_sig_post_untraced (msgport, data, 0, task)); - } - __mach_port_deallocate (__mach_task_self (), task); - return err ? __hurd_fail (err) : 0; - } - - case PTRACE_KILL: - va_start (ap, request); - pid = va_arg (ap, pid_t); - va_end (ap); - /* SIGKILL always just terminates the task, - so normal kill is just the same when traced. */ - return kill (pid, SIGKILL); - - case PTRACE_SINGLESTEP: - /* This is a machine-dependent kernel RPC on - machines that support it. Punt. */ - return __hurd_fail (EOPNOTSUPP); - - case PTRACE_ATTACH: - case PTRACE_DETACH: - va_start (ap, request); - pid = va_arg (ap, pid_t); - va_end (ap); - { - /* Tell PID to set or clear its trace bit. */ - error_t err; - mach_port_t msgport; - task_t task = __pid2task (pid); - if (task == MACH_PORT_NULL) - return -1; - err = __USEPORT (PROC, __proc_getmsgport (port, pid, &msgport)); - if (! err) - { - err = __msg_set_init_int (msgport, task, INIT_TRACEMASK, - request == PTRACE_DETACH ? 0 : - ~(sigset_t) 0); - if (! err) - { - if (request == PTRACE_ATTACH) - /* Now stop the process. */ - err = __msg_sig_post (msgport, SIGSTOP, 0, task); - else - /* Resume the process from tracing stop. */ - err = __msg_sig_post_untraced (msgport, 0, 0, task); - } - __mach_port_deallocate (__mach_task_self (), msgport); - } - __mach_port_deallocate (__mach_task_self (), task); - return err ? __hurd_fail (err) : 0; - } - - case PTRACE_PEEKTEXT: - case PTRACE_PEEKDATA: - va_start (ap, request); - pid = va_arg (ap, pid_t); - addr = va_arg (ap, void *); - va_end (ap); - { - /* Read the page (or two pages, if the word lies on a boundary) - containing the addressed word. */ - error_t err; - vm_address_t ourpage; - vm_size_t size; - natural_t word; - task_t task = __pid2task (pid); - if (task == MACH_PORT_NULL) - return -1; - data = sizeof word; - ourpage = 0; - size = 0; - err = read_data (task, &ourpage, &size); - __mach_port_deallocate (__mach_task_self (), task); - if (err) - return __hurd_fail (err); - word = *(natural_t *) ((vm_address_t) addr - trunc_page (addr) - + ourpage); - __vm_deallocate (__mach_task_self (), ourpage, size); - return word; - } - - case PTRACE_PEEKUSER: - case PTRACE_POKEUSER: - /* U area, what's that? */ - return __hurd_fail (EOPNOTSUPP); - - case PTRACE_GETREGS: - case PTRACE_SETREGS: - va_start (ap, request); - pid = va_arg (ap, pid_t); - addr = va_arg (ap, void *); - va_end (ap); - return get_regs (MACHINE_THREAD_STATE_FLAVOR, - MACHINE_THREAD_STATE_COUNT); - - case PTRACE_GETFPREGS: - case PTRACE_SETFPREGS: - va_start (ap, request); - pid = va_arg (ap, pid_t); - addr = va_arg (ap, void *); - va_end (ap); -#ifdef MACHINE_THREAD_FLOAT_STATE_FLAVOR - return get_regs (MACHINE_THREAD_FLOAT_STATE_FLAVOR, - MACHINE_THREAD_FLOAT_STATE_COUNT); -#else - return __hurd_fail (EOPNOTSUPP); -#endif - - case PTRACE_GETFPAREGS: - case PTRACE_SETFPAREGS: - va_start (ap, request); - pid = va_arg (ap, pid_t); - addr = va_arg (ap, void *); - va_end (ap); -#ifdef MACHINE_THREAD_FPA_STATE_FLAVOR - return get_regs (MACHINE_THREAD_FPA_STATE_FLAVOR, - MACHINE_THREAD_FPA_STATE_COUNT); -#else - return __hurd_fail (EOPNOTSUPP); -#endif - - case PTRACE_POKETEXT: - case PTRACE_POKEDATA: - va_start (ap, request); - pid = va_arg (ap, pid_t); - addr = va_arg (ap, void *); - data = va_arg (ap, int); - va_end (ap); - { - /* Read the page (or two pages, if the word lies on a boundary) - containing the addressed word. */ - error_t err; - vm_address_t ourpage; - vm_size_t size; - task_t task = __pid2task (pid); - if (task == MACH_PORT_NULL) - return -1; - data = sizeof (natural_t); - ourpage = 0; - size = 0; - err = read_data (task, &ourpage, &size); - - if (!err) - { - /* Now modify the specified word and write the page back. */ - *(natural_t *) ((vm_address_t) addr - trunc_page (addr) - + ourpage) = data; - err = __vm_write (task, trunc_page (addr), ourpage, size); - __vm_deallocate (__mach_task_self (), ourpage, size); - } - - __mach_port_deallocate (__mach_task_self (), task); - return err ? __hurd_fail (err) : 0; - } - - case PTRACE_READDATA: - case PTRACE_READTEXT: - va_start (ap, request); - pid = va_arg (ap, pid_t); - addr = va_arg (ap, void *); - data = va_arg (ap, int); - addr2 = va_arg (ap, void *); - va_end (ap); - { - error_t err; - vm_address_t ourpage; - vm_size_t size; - task_t task = __pid2task (pid); - if (task == MACH_PORT_NULL) - return -1; - if (((vm_address_t) addr2 + data) % __vm_page_size == 0) - { - /* Perhaps we can write directly to the user's buffer. */ - ourpage = (vm_address_t) addr2; - size = data; - } - else - { - ourpage = 0; - size = 0; - } - err = read_data (task, &ourpage, &size); - __mach_port_deallocate (__mach_task_self (), task); - if (!err && ourpage != (vm_address_t) addr2) - { - memcpy (addr2, (void *) ourpage, data); - __vm_deallocate (__mach_task_self (), ourpage, size); - } - return err ? __hurd_fail (err) : 0; - } - - case PTRACE_WRITEDATA: - case PTRACE_WRITETEXT: - va_start (ap, request); - pid = va_arg (ap, pid_t); - addr = va_arg (ap, void *); - data = va_arg (ap, int); - addr2 = va_arg (ap, void *); - va_end (ap); - { - error_t err; - vm_address_t ourpage; - vm_size_t size; - task_t task = __pid2task (pid); - if (task == MACH_PORT_NULL) - return -1; - if ((vm_address_t) addr % __vm_page_size == 0 && - (vm_address_t) data % __vm_page_size == 0) - { - /* Writing whole pages; can go directly from the user's buffer. */ - ourpage = (vm_address_t) addr2; - size = data; - err = 0; - } - else - { - /* Read the task's pages and modify our own copy. */ - ourpage = 0; - size = 0; - err = read_data (task, &ourpage, &size); - if (!err) - memcpy ((void *) ((vm_address_t) addr - trunc_page (addr) - + ourpage), - addr2, - data); - } - if (!err) - /* Write back the modified pages. */ - err = __vm_write (task, trunc_page (addr), ourpage, size); - __mach_port_deallocate (__mach_task_self (), task); - return err ? __hurd_fail (err) : 0; - } - - default: - errno = EINVAL; - return -1; - } - - return 0; -} diff --git a/sysdeps/mach/hurd/ptsname.c b/sysdeps/mach/hurd/ptsname.c deleted file mode 100644 index 7625aeed95..0000000000 --- a/sysdeps/mach/hurd/ptsname.c +++ /dev/null @@ -1,64 +0,0 @@ -/* ptsname -- return the name of a pty slave given an FD to the pty master - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - -/* Return the pathname of the pseudo terminal slave associated with - the master FD is open on, or NULL on errors. - The returned storage is good until the next call to this function. */ -char * -ptsname (int fd) -{ - static string_t peername; - error_t err; - - err = __ptsname_r (fd, peername, sizeof (peername)); - - return err ? NULL : peername; -} - - -/* Store at most BUFLEN characters of the pathname of the slave pseudo - terminal associated with the master FD is open on in BUF. - Return 0 on success, otherwise an error number. */ -int -__ptsname_r (int fd, char *buf, size_t buflen) -{ - string_t peername; - size_t len; - error_t err; - - if (err = HURD_DPORT_USE (fd, __term_get_peername (port, peername))) - return __hurd_dfail (fd, err), errno; - - len = __strnlen (peername, sizeof peername - 1) + 1; - if (len > buflen) - { - errno = ERANGE; - return ERANGE; - } - - memcpy (buf, peername, len); - return 0; -} -weak_alias (__ptsname_r, ptsname_r) diff --git a/sysdeps/mach/hurd/pwrite.c b/sysdeps/mach/hurd/pwrite.c deleted file mode 100644 index 10ddfe2bb8..0000000000 --- a/sysdeps/mach/hurd/pwrite.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Write block at given position in file without changing file pointer. - Hurd version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Write NBYTES of BUF to FD at given position OFFSET without changing - the file position. Return the number written, or -1. */ -ssize_t -__libc_pwrite (int fd, const void *buf, size_t nbytes, off_t offset) -{ - return __libc_pwrite64 (fd, buf, nbytes, (off64_t) offset); -} - -#ifndef __libc_pwrite -strong_alias (__libc_pwrite, __pwrite) -weak_alias (__libc_pwrite, pwrite) -#endif diff --git a/sysdeps/mach/hurd/pwrite64.c b/sysdeps/mach/hurd/pwrite64.c deleted file mode 100644 index d4aa8f2c4a..0000000000 --- a/sysdeps/mach/hurd/pwrite64.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Write block to given position in file without changing file pointer. - Hurd version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -ssize_t -__libc_pwrite64 (int fd, const void *buf, size_t nbytes, off64_t offset) -{ - error_t err; - if (offset < 0) - err = EINVAL; - else - err = HURD_FD_USE (fd, _hurd_fd_write (descriptor, buf, &nbytes, offset)); - return err ? __hurd_dfail (fd, err) : nbytes; -} - -#ifndef __libc_pwrite64 -weak_alias (__libc_pwrite64, __pwrite64) -libc_hidden_weak (__pwrite64) -weak_alias (__libc_pwrite64, pwrite64) -#endif diff --git a/sysdeps/mach/hurd/read.c b/sysdeps/mach/hurd/read.c deleted file mode 100644 index 5cef0b415f..0000000000 --- a/sysdeps/mach/hurd/read.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Read NBYTES into BUF from FD. Return the number read or -1. */ -ssize_t -__libc_read (int fd, void *buf, size_t nbytes) -{ - error_t err = HURD_FD_USE (fd, _hurd_fd_read (descriptor, buf, &nbytes, -1)); - return err ? __hurd_dfail (fd, err) : nbytes; -} -libc_hidden_def (__libc_read) -weak_alias (__libc_read, __read) -libc_hidden_weak (__read) -weak_alias (__libc_read, read) diff --git a/sysdeps/mach/hurd/readdir.c b/sysdeps/mach/hurd/readdir.c deleted file mode 100644 index 147a0bc469..0000000000 --- a/sysdeps/mach/hurd/readdir.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Read a directory entry from DIRP. */ -struct dirent * -__readdir (DIR *dirp) -{ - struct dirent64 *entry64 = __readdir64 (dirp); - - if (sizeof (struct dirent64) == sizeof (struct dirent)) - /* We should in fact just be an alias to readdir64 on this machine. */ - return (struct dirent *) entry64; - - /* These are all compile-time constants. We know that d_ino is the first - member and that the layout of the following members matches exactly in - both structures. */ - assert (offsetof (struct dirent, d_ino) == 0); - assert (offsetof (struct dirent64, d_ino) == 0); -# define MATCH(memb) \ - assert (offsetof (struct dirent64, memb) - sizeof (entry64->d_ino) \ - == offsetof (struct dirent, memb) - sizeof (ino_t)) - MATCH (d_reclen); - MATCH (d_type); - MATCH (d_namlen); -# undef MATCH - - if (entry64 == NULL) - return NULL; - - struct dirent *const entry = ((void *) (&entry64->d_ino + 1) - - sizeof entry->d_ino); - const ino_t d_ino = entry64->d_ino; - if (d_ino != entry64->d_ino) - { - __set_errno (EOVERFLOW); - return NULL; - } -# if BYTE_ORDER != BIG_ENDIAN /* We just skipped over the zero high word. */ - entry->d_ino = d_ino; /* ... or the nonzero low word, swap it. */ -# endif - entry->d_reclen -= sizeof entry64->d_ino - sizeof entry->d_ino; - return entry; -} - -weak_alias (__readdir, readdir) diff --git a/sysdeps/mach/hurd/readdir64.c b/sysdeps/mach/hurd/readdir64.c deleted file mode 100644 index f422fcff04..0000000000 --- a/sysdeps/mach/hurd/readdir64.c +++ /dev/null @@ -1,101 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include "dirstream.h" - -/* Read a directory entry from DIRP. */ -struct dirent64 * -__readdir64 (DIR *dirp) -{ - struct dirent64 *dp; - - if (dirp == NULL) - { - errno = EINVAL; - return NULL; - } - - __libc_lock_lock (dirp->__lock); - - do - { - if (dirp->__ptr - dirp->__data >= dirp->__size) - { - /* We've emptied out our buffer. Refill it. */ - - char *data = dirp->__data; - int nentries; - error_t err; - - if (err = HURD_FD_PORT_USE (dirp->__fd, - __dir_readdir (port, - &data, &dirp->__size, - dirp->__entry_ptr, - -1, 0, &nentries))) - { - __hurd_fail (err); - dp = NULL; - break; - } - - /* DATA now corresponds to entry index DIRP->__entry_ptr. */ - dirp->__entry_data = dirp->__entry_ptr; - - if (data != dirp->__data) - { - /* The data was passed out of line, so our old buffer is no - longer useful. Deallocate the old buffer and reset our - information for the new buffer. */ - __vm_deallocate (__mach_task_self (), - (vm_address_t) dirp->__data, - dirp->__allocation); - dirp->__data = data; - dirp->__allocation = round_page (dirp->__size); - } - - /* Reset the pointer into the buffer. */ - dirp->__ptr = dirp->__data; - - if (nentries == 0) - { - /* End of file. */ - dp = NULL; - break; - } - - /* We trust the filesystem to return correct data and so we - ignore NENTRIES. */ - } - - dp = (struct dirent64 *) dirp->__ptr; - dirp->__ptr += dp->d_reclen; - ++dirp->__entry_ptr; - - /* Loop to ignore deleted files. */ - } while (dp->d_fileno == 0); - - __libc_lock_unlock (dirp->__lock); - - return dp; -} - -weak_alias (__readdir64, readdir64) diff --git a/sysdeps/mach/hurd/readdir64_r.c b/sysdeps/mach/hurd/readdir64_r.c deleted file mode 100644 index 9534783521..0000000000 --- a/sysdeps/mach/hurd/readdir64_r.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include "dirstream.h" - -/* Read a directory entry from DIRP. */ -int -__readdir64_r (DIR *dirp, struct dirent64 *entry, struct dirent64 **result) -{ - struct dirent64 *dp; - error_t err = 0; - - if (dirp == NULL) - { - errno = EINVAL; - return errno; - } - - __libc_lock_lock (dirp->__lock); - - do - { - if (dirp->__ptr - dirp->__data >= dirp->__size) - { - /* We've emptied out our buffer. Refill it. */ - - char *data = dirp->__data; - int nentries; - - if (err = HURD_FD_PORT_USE (dirp->__fd, - __dir_readdir (port, - &data, &dirp->__size, - dirp->__entry_ptr, - -1, 0, &nentries))) - { - __hurd_fail (err); - dp = NULL; - break; - } - - /* DATA now corresponds to entry index DIRP->__entry_ptr. */ - dirp->__entry_data = dirp->__entry_ptr; - - if (data != dirp->__data) - { - /* The data was passed out of line, so our old buffer is no - longer useful. Deallocate the old buffer and reset our - information for the new buffer. */ - __vm_deallocate (__mach_task_self (), - (vm_address_t) dirp->__data, - dirp->__allocation); - dirp->__data = data; - dirp->__allocation = round_page (dirp->__size); - } - - /* Reset the pointer into the buffer. */ - dirp->__ptr = dirp->__data; - - if (nentries == 0) - { - /* End of file. */ - dp = NULL; - break; - } - - /* We trust the filesystem to return correct data and so we - ignore NENTRIES. */ - } - - dp = (struct dirent64 *) dirp->__ptr; - dirp->__ptr += dp->d_reclen; - ++dirp->__entry_ptr; - - /* Loop to ignore deleted files. */ - } while (dp->d_fileno == 0); - - if (dp) - { - *entry = *dp; - memcpy (entry->d_name, dp->d_name, dp->d_namlen + 1); - *result = entry; - } - else - *result = NULL; - - __libc_lock_unlock (dirp->__lock); - - return dp ? 0 : err ? errno : 0; -} - -weak_alias (__readdir64_r, readdir64_r) diff --git a/sysdeps/mach/hurd/readdir_r.c b/sysdeps/mach/hurd/readdir_r.c deleted file mode 100644 index 6acbb7c811..0000000000 --- a/sysdeps/mach/hurd/readdir_r.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "dirstream.h" - - -/* Read a directory entry from DIRP. */ -int -__readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result) -{ - if (sizeof (struct dirent64) == sizeof (struct dirent)) - /* We should in fact just be an alias to readdir64_r on this machine. */ - return __readdir64_r (dirp, - (struct dirent64 *) entry, - (struct dirent64 **) result); - - struct dirent64 *result64; - union - { - struct dirent64 d; - char b[offsetof (struct dirent64, d_name) + UCHAR_MAX + 1]; - } u; - int err; - - err = __readdir64_r (dirp, &u.d, &result64); - if (result64) - { - entry->d_fileno = result64->d_fileno; - entry->d_reclen = result64->d_reclen; - entry->d_type = result64->d_type; - entry->d_namlen = result64->d_namlen; - memcpy (entry->d_name, result64->d_name, result64->d_namlen + 1); - *result = entry; - } - else - *result = NULL; - - return err; -} - -weak_alias (__readdir_r, readdir_r) diff --git a/sysdeps/mach/hurd/readlink.c b/sysdeps/mach/hurd/readlink.c deleted file mode 100644 index 96295dede9..0000000000 --- a/sysdeps/mach/hurd/readlink.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Read the contents of the symbolic link FILE_NAME into no more than - LEN bytes of BUF. The contents are not null-terminated. - Returns the number of characters read, or -1 for errors. */ -ssize_t -__readlink (const char *file_name, char *buf, size_t len) -{ - error_t err; - file_t file; - struct stat64 st; - - file = __file_name_lookup (file_name, O_READ | O_NOLINK, 0); - if (file == MACH_PORT_NULL) - return -1; - - err = __io_stat (file, &st); - if (! err) - if (S_ISLNK (st.st_mode)) - { - char *rbuf = buf; - - err = __io_read (file, &rbuf, &len, 0, len); - if (!err && rbuf != buf) - { - memcpy (buf, rbuf, len); - __vm_deallocate (__mach_task_self (), (vm_address_t)rbuf, len); - } - } - else - err = EINVAL; - - __mach_port_deallocate (__mach_task_self (), file); - - if (err) - return __hurd_fail (err); - else - return len; -} -weak_alias (__readlink, readlink) diff --git a/sysdeps/mach/hurd/readlinkat.c b/sysdeps/mach/hurd/readlinkat.c deleted file mode 100644 index fa1640fd72..0000000000 --- a/sysdeps/mach/hurd/readlinkat.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include -#include - -/* Read the contents of the symbolic link FILE_NAME relative to FD into no more - than LEN bytes of BUF. The contents are not null-terminated. - Returns the number of characters read, or -1 for errors. */ -ssize_t -readlinkat (int fd, const char *file_name, char *buf, size_t len) -{ - error_t err; - file_t file; - struct stat64 st; - - file = __file_name_lookup_at (fd, 0, file_name, O_READ | O_NOLINK, 0); - if (file == MACH_PORT_NULL) - return -1; - - err = __io_stat (file, &st); - if (! err) - if (S_ISLNK (st.st_mode)) - { - char *rbuf = buf; - - err = __io_read (file, &rbuf, &len, 0, len); - if (!err && rbuf != buf) - { - memcpy (buf, rbuf, len); - __vm_deallocate (__mach_task_self (), (vm_address_t)rbuf, len); - } - } - else - err = EINVAL; - - __mach_port_deallocate (__mach_task_self (), file); - - return err ? __hurd_fail (err) : len; -} -libc_hidden_def (readlinkat) diff --git a/sysdeps/mach/hurd/reboot.c b/sysdeps/mach/hurd/reboot.c deleted file mode 100644 index 0ad3553707..0000000000 --- a/sysdeps/mach/hurd/reboot.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Reboot the system. */ -int -reboot (int howto) -{ - error_t err; - startup_t init; - mach_port_t hostpriv; - - err = __get_privileged_ports (&hostpriv, NULL); - if (err) - return __hurd_fail (EPERM); - - err = __USEPORT (PROC, __proc_getmsgport (port, 1, &init)); - if (!err) - { - err = __startup_reboot (init, hostpriv, howto); - __mach_port_deallocate (__mach_task_self (), init); - } - - __mach_port_deallocate (__mach_task_self (), hostpriv); - - if (err) - return __hurd_fail (err); - - return 0; -} diff --git a/sysdeps/mach/hurd/recv.c b/sysdeps/mach/hurd/recv.c deleted file mode 100644 index 133f49dfaa..0000000000 --- a/sysdeps/mach/hurd/recv.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Read N bytes into BUF from socket FD. - Returns the number read or -1 for errors. */ - -ssize_t -__recv (int fd, void *buf, size_t n, int flags) -{ - error_t err; - mach_port_t addrport; - char *bufp = buf; - mach_msg_type_number_t nread = n; - mach_port_t *ports; - mach_msg_type_number_t nports = 0; - char *cdata = NULL; - mach_msg_type_number_t clen = 0; - - err = HURD_DPORT_USE (fd, __socket_recv (port, &addrport, - flags, &bufp, &nread, - &ports, &nports, - &cdata, &clen, - &flags, - n)); - if (err == MIG_BAD_ID || err == EOPNOTSUPP) - /* The file did not grok the socket protocol. */ - err = ENOTSOCK; - if (err) - return __hurd_sockfail (fd, flags, err); - - __mach_port_deallocate (__mach_task_self (), addrport); - __vm_deallocate (__mach_task_self (), (vm_address_t) cdata, clen); - - if (bufp != buf) - { - memcpy (buf, bufp, nread); - __vm_deallocate (__mach_task_self (), (vm_address_t) bufp, nread); - } - - return nread; -} -libc_hidden_def (__recv) -weak_alias (__recv, recv) diff --git a/sysdeps/mach/hurd/recvfrom.c b/sysdeps/mach/hurd/recvfrom.c deleted file mode 100644 index 4b909174ff..0000000000 --- a/sysdeps/mach/hurd/recvfrom.c +++ /dev/null @@ -1,103 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Read N bytes into BUF through socket FD. - If ADDR is not NULL, fill in *ADDR_LEN bytes of it with tha address of - the sender, and store the actual size of the address in *ADDR_LEN. - Returns the number of bytes read or -1 for errors. */ -ssize_t -__recvfrom (int fd, void *buf, size_t n, int flags, __SOCKADDR_ARG addrarg, - socklen_t *addr_len) -{ - error_t err; - mach_port_t addrport; - char *bufp = buf; - mach_msg_type_number_t nread = n; - mach_port_t *ports; - mach_msg_type_number_t nports = 0; - char *cdata = NULL; - mach_msg_type_number_t clen = 0; - struct sockaddr *addr = addrarg.__sockaddr__; - - if (err = HURD_DPORT_USE (fd, __socket_recv (port, &addrport, - flags, &bufp, &nread, - &ports, &nports, - &cdata, &clen, - &flags, - n))) - return __hurd_sockfail (fd, flags, err); - - /* Get address data for the returned address port if requested. */ - if (addr != NULL && addrport != MACH_PORT_NULL) - { - char *buf = (char *) addr; - mach_msg_type_number_t buflen = *addr_len; - int type; - - err = __socket_whatis_address (addrport, &type, &buf, &buflen); - if (err == EOPNOTSUPP) - /* If the protocol server can't tell us the address, just return a - zero-length one. */ - { - buf = (char *)addr; - buflen = 0; - err = 0; - } - - if (err) - { - __mach_port_deallocate (__mach_task_self (), addrport); - return __hurd_sockfail (fd, flags, err); - } - - if (*addr_len > buflen) - *addr_len = buflen; - - if (buf != (char *) addr) - { - memcpy (addr, buf, *addr_len); - __vm_deallocate (__mach_task_self (), (vm_address_t) buf, buflen); - } - - if (buflen > 0) - addr->sa_family = type; - } - else if (addr_len != NULL) - *addr_len = 0; - - __mach_port_deallocate (__mach_task_self (), addrport); - - /* Toss control data; we don't care. */ - __vm_deallocate (__mach_task_self (), (vm_address_t) cdata, clen); - - if (bufp != buf) - { - memcpy (buf, bufp, nread); - __vm_deallocate (__mach_task_self (), (vm_address_t) bufp, nread); - } - - return nread; -} - -weak_alias (__recvfrom, recvfrom) diff --git a/sysdeps/mach/hurd/recvmsg.c b/sysdeps/mach/hurd/recvmsg.c deleted file mode 100644 index 59038dd6d6..0000000000 --- a/sysdeps/mach/hurd/recvmsg.c +++ /dev/null @@ -1,146 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include - -#include -#include -#include - -/* Receive a message as described by MESSAGE from socket FD. - Returns the number of bytes read or -1 for errors. */ -ssize_t -__libc_recvmsg (int fd, struct msghdr *message, int flags) -{ - error_t err; - addr_port_t aport; - char *data = NULL; - mach_msg_type_number_t len = 0; - mach_port_t *ports; - mach_msg_type_number_t nports = 0; - char *cdata = NULL; - mach_msg_type_number_t clen = 0; - size_t amount; - char *buf; - int i; - - /* Find the total number of bytes to be read. */ - amount = 0; - for (i = 0; i < message->msg_iovlen; i++) - { - amount += message->msg_iov[i].iov_len; - - /* As an optimization, we set the initial values of DATA and LEN - from the first non-empty iovec. This kicks-in in the case - where the whole packet fits into that iovec buffer. */ - if (data == NULL && message->msg_iov[i].iov_len > 0) - { - data = message->msg_iov[i].iov_base; - len = message->msg_iov[i].iov_len; - } - } - - buf = data; - if (err = HURD_DPORT_USE (fd, __socket_recv (port, &aport, - flags, &data, &len, - &ports, &nports, - &cdata, &clen, - &message->msg_flags, amount))) - return __hurd_sockfail (fd, flags, err); - - if (message->msg_name != NULL && aport != MACH_PORT_NULL) - { - char *buf = message->msg_name; - mach_msg_type_number_t buflen = message->msg_namelen; - int type; - - err = __socket_whatis_address (aport, &type, &buf, &buflen); - if (err == EOPNOTSUPP) - /* If the protocol server can't tell us the address, just return a - zero-length one. */ - { - buf = message->msg_name; - buflen = 0; - err = 0; - } - - if (err) - { - __mach_port_deallocate (__mach_task_self (), aport); - return __hurd_sockfail (fd, flags, err); - } - - if (message->msg_namelen > buflen) - message->msg_namelen = buflen; - - if (buf != message->msg_name) - { - memcpy (message->msg_name, buf, message->msg_namelen); - __vm_deallocate (__mach_task_self (), (vm_address_t) buf, buflen); - } - - if (buflen > 0) - ((struct sockaddr *) message->msg_name)->sa_family = type; - } - else if (message->msg_name != NULL) - message->msg_namelen = 0; - - __mach_port_deallocate (__mach_task_self (), aport); - - if (buf == data) - buf += len; - else - { - /* Copy the data into MSG. */ - if (len > amount) - message->msg_flags |= MSG_TRUNC; - else - amount = len; - - buf = data; - for (i = 0; i < message->msg_iovlen; i++) - { -#define min(a, b) ((a) > (b) ? (b) : (a)) - size_t copy = min (message->msg_iov[i].iov_len, amount); - - memcpy (message->msg_iov[i].iov_base, buf, copy); - - buf += copy; - amount -= copy; - if (len == 0) - break; - } - - __vm_deallocate (__mach_task_self (), (vm_address_t) data, len); - } - - /* Copy the control message into MSG. */ - if (clen > message->msg_controllen) - message->msg_flags |= MSG_CTRUNC; - else - message->msg_controllen = clen; - memcpy (message->msg_control, cdata, message->msg_controllen); - - __vm_deallocate (__mach_task_self (), (vm_address_t) cdata, clen); - - return (buf - data); -} - -weak_alias (__libc_recvmsg, recvmsg) -weak_alias (__libc_recvmsg, __recvmsg) diff --git a/sysdeps/mach/hurd/removexattr.c b/sysdeps/mach/hurd/removexattr.c deleted file mode 100644 index a3edd3d607..0000000000 --- a/sysdeps/mach/hurd/removexattr.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Access to extended attributes on files. Hurd version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -ssize_t -removexattr (const char *path, const char *name) -{ - error_t err; - file_t port = __file_name_lookup (path, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - err = _hurd_xattr_remove (port, name); - __mach_port_deallocate (__mach_task_self (), port); - return __hurd_fail (err); -} diff --git a/sysdeps/mach/hurd/rename.c b/sysdeps/mach/hurd/rename.c deleted file mode 100644 index 1b50f30588..0000000000 --- a/sysdeps/mach/hurd/rename.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Rename the file OLD to NEW. */ -int -rename (const char *old, const char *new) -{ - error_t err; - file_t olddir, newdir; - const char *oldname, *newname; - - olddir = __directory_name_split (old, (char **) &oldname); - if (olddir == MACH_PORT_NULL) - return -1; - newdir = __directory_name_split (new, (char **) &newname); - if (newdir == MACH_PORT_NULL) - { - __mach_port_deallocate (__mach_task_self (), olddir); - return -1; - } - - err = __dir_rename (olddir, oldname, newdir, newname, 0); - __mach_port_deallocate (__mach_task_self (), olddir); - __mach_port_deallocate (__mach_task_self (), newdir); - if (err) - return __hurd_fail (err); - return 0; -} diff --git a/sysdeps/mach/hurd/renameat.c b/sysdeps/mach/hurd/renameat.c deleted file mode 100644 index f2d69d4bc5..0000000000 --- a/sysdeps/mach/hurd/renameat.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Rename a file using relative source and destination names. Hurd version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Rename the file OLD relative to OLDFD to NEW relative to NEWFD. */ -int -renameat (int oldfd, const char *old, int newfd, const char *new) -{ - error_t err; - file_t olddir, newdir; - const char *oldname, *newname; - - olddir = __directory_name_split_at (oldfd, old, (char **) &oldname); - if (olddir == MACH_PORT_NULL) - return -1; - newdir = __directory_name_split_at (newfd, new, (char **) &newname); - if (newdir == MACH_PORT_NULL) - { - __mach_port_deallocate (__mach_task_self (), olddir); - return -1; - } - - err = __dir_rename (olddir, oldname, newdir, newname, 0); - __mach_port_deallocate (__mach_task_self (), olddir); - __mach_port_deallocate (__mach_task_self (), newdir); - if (err) - return __hurd_fail (err); - return 0; -} diff --git a/sysdeps/mach/hurd/revoke.c b/sysdeps/mach/hurd/revoke.c deleted file mode 100644 index 15b955b733..0000000000 --- a/sysdeps/mach/hurd/revoke.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Revoke the access of all descriptors currently open on a file. Hurd version - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -revoke (const char *file_name) -{ - error_t err; - file_t file = __file_name_lookup (file_name, 0, 0); - - if (file == MACH_PORT_NULL) - return -1; - - err = __io_revoke (file); - __mach_port_deallocate (__mach_task_self (), file); - - if (err) - return __hurd_fail (err); - return 0; -} diff --git a/sysdeps/mach/hurd/rewinddir.c b/sysdeps/mach/hurd/rewinddir.c deleted file mode 100644 index b6791d95c3..0000000000 --- a/sysdeps/mach/hurd/rewinddir.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Rewind DIRP to the beginning of the directory. */ -void -__rewinddir (DIR *dirp) -{ - seekdir (dirp, (off_t) 0L); -} -libc_hidden_def (__rewinddir) -weak_alias (__rewinddir, rewinddir) diff --git a/sysdeps/mach/hurd/rmdir.c b/sysdeps/mach/hurd/rmdir.c deleted file mode 100644 index e37245653e..0000000000 --- a/sysdeps/mach/hurd/rmdir.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Remove the directory FILE_NAME. */ -int -__rmdir (const char *file_name) -{ - error_t err; - const char *name; - file_t parent = __directory_name_split (file_name, (char **) &name); - if (parent == MACH_PORT_NULL) - return -1; - err = __dir_rmdir (parent, name); - __mach_port_deallocate (__mach_task_self (), parent); - if (err) - return __hurd_fail (err); - return 0; -} - -weak_alias (__rmdir, rmdir) diff --git a/sysdeps/mach/hurd/sbrk.c b/sysdeps/mach/hurd/sbrk.c deleted file mode 100644 index 5c9555a31c..0000000000 --- a/sysdeps/mach/hurd/sbrk.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Extend the process's data space by INCREMENT. - If INCREMENT is negative, shrink data space by - INCREMENT. - Return the address of the start of the new data space, or -1 for errors. */ -void * -__sbrk (intptr_t increment) -{ - void *result; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_brk_lock); - result = (void *) _hurd_brk; - if (increment != 0 && _hurd_set_brk (_hurd_brk + increment) < 0) - result = (void *) -1; - __mutex_unlock (&_hurd_brk_lock); - HURD_CRITICAL_END; - - return result; -} -libc_hidden_def (__sbrk) -weak_alias (__sbrk, sbrk) diff --git a/sysdeps/mach/hurd/seekdir.c b/sysdeps/mach/hurd/seekdir.c deleted file mode 100644 index 8d3020b02c..0000000000 --- a/sysdeps/mach/hurd/seekdir.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include "dirstream.h" - -/* Seek to position POS in DIRP. */ -/* XXX should be __seekdir ? */ -void -seekdir (DIR *dirp, long int pos) -{ - __libc_lock_lock (dirp->__lock); - /* Change our entry index pointer to POS and discard any data already - read. The next `readdir' call will notice the empty block and read - anew from the location in DIRP->__entry_ptr and reset the other state - variables. */ - dirp->__entry_ptr = pos; - dirp->__size = 0; - __libc_lock_unlock (dirp->__lock); -} diff --git a/sysdeps/mach/hurd/select.c b/sysdeps/mach/hurd/select.c deleted file mode 100644 index e39cf8dc91..0000000000 --- a/sysdeps/mach/hurd/select.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Check the first NFDS descriptors each in READFDS (if not NULL) for read - readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS - (if not NULL) for exceptional conditions. If TIMEOUT is not NULL, time out - after waiting the interval specified therein. Returns the number of ready - descriptors, or -1 for errors. */ -int -__select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, - struct timeval *timeout) -{ - struct timespec ts, *to; - - if (timeout) - { - to = &ts; - TIMEVAL_TO_TIMESPEC (timeout, to); - } - else - to = NULL; - - return _hurd_select (nfds, NULL, readfds, writefds, exceptfds, to, NULL); -} -libc_hidden_def (__select) -weak_alias (__select, select) diff --git a/sysdeps/mach/hurd/send.c b/sysdeps/mach/hurd/send.c deleted file mode 100644 index 98ffcbf562..0000000000 --- a/sysdeps/mach/hurd/send.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Send N bytes of BUF to socket FD. Returns the number sent or -1. */ -ssize_t -__send (int fd, const void *buf, size_t n, int flags) -{ - error_t err; - size_t wrote; - - err = HURD_DPORT_USE (fd, __socket_send (port, MACH_PORT_NULL, - flags, buf, n, - NULL, MACH_MSG_TYPE_COPY_SEND, 0, - NULL, 0, &wrote)); - - if (err == MIG_BAD_ID || err == EOPNOTSUPP) - /* The file did not grok the socket protocol. */ - err = ENOTSOCK; - - return err ? __hurd_sockfail (fd, flags, err) : wrote; -} -libc_hidden_def (__send) -weak_alias (__send, send) diff --git a/sysdeps/mach/hurd/sendfile.c b/sysdeps/mach/hurd/sendfile.c deleted file mode 100644 index e318de16a9..0000000000 --- a/sysdeps/mach/hurd/sendfile.c +++ /dev/null @@ -1,36 +0,0 @@ -/* sendfile -- copy data directly from one file descriptor to another - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Send COUNT bytes from file associated with IN_FD starting at OFFSET to - descriptor OUT_FD. */ -ssize_t -sendfile (int out_fd, int in_fd, off_t *offset, size_t count) -{ - if (offset == NULL || sizeof (off_t) == sizeof (off64_t)) - return sendfile64 (out_fd, in_fd, (off64_t *) offset, count); - else - { - off64_t ofs = *offset; - ssize_t ret = sendfile64 (out_fd, in_fd, &ofs, count); - *offset = ofs; - return ret; - } -} diff --git a/sysdeps/mach/hurd/sendfile64.c b/sysdeps/mach/hurd/sendfile64.c deleted file mode 100644 index 0b3d156c28..0000000000 --- a/sysdeps/mach/hurd/sendfile64.c +++ /dev/null @@ -1,59 +0,0 @@ -/* sendfile -- copy data directly from one file descriptor to another - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Send COUNT bytes from file associated with IN_FD starting at OFFSET to - descriptor OUT_FD. */ -ssize_t -sendfile64 (int out_fd, int in_fd, off64_t *offset, size_t count) -{ - /* We just do a vanilla io_read followed by a vanilla io_write here. - In theory the IN_FD filesystem can return us out-of-line data that - we then send out-of-line to the OUT_FD filesystem and no copying - takes place until those pages need to be flushed or packaged by - that filesystem (e.g. packetized by a network socket). However, - we momentarily consume COUNT bytes of our local address space, - which might blow if it's huge or address space is real tight. */ - - char *data = 0; - size_t datalen = 0; - error_t err = HURD_DPORT_USE (in_fd, - __io_read (port, &data, &datalen, - offset ? *offset : (off_t) -1, - count)); - if (err == 0) - { - size_t nwrote; - if (datalen == 0) - return 0; - err = HURD_DPORT_USE (out_fd, __io_write (port, data, datalen, - (off_t) -1, &nwrote)); - munmap (data, datalen); - if (err == 0) - { - if (offset) - *offset += datalen; - return nwrote; - } - } - return __hurd_fail (err); -} diff --git a/sysdeps/mach/hurd/sendmsg.c b/sysdeps/mach/hurd/sendmsg.c deleted file mode 100644 index 2f01efe0f7..0000000000 --- a/sysdeps/mach/hurd/sendmsg.c +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include "hurd/hurdsocket.h" - -/* Send a message described MESSAGE on socket FD. - Returns the number of bytes sent, or -1 for errors. */ -ssize_t -__libc_sendmsg (int fd, const struct msghdr *message, int flags) -{ - error_t err = 0; - struct sockaddr_un *addr = message->msg_name; - socklen_t addr_len = message->msg_namelen; - addr_port_t aport = MACH_PORT_NULL; - union - { - char *ptr; - vm_address_t addr; - } data = { .ptr = NULL }; - char data_buf[2048]; - mach_msg_type_number_t len; - mach_msg_type_number_t amount; - int dealloc = 0; - int i; - - /* Find the total number of bytes to be written. */ - len = 0; - for (i = 0; i < message->msg_iovlen; i++) - { - if (message->msg_iov[i].iov_len > 0) - { - /* As an optimization, if we only have a single non-empty - iovec, we set DATA and LEN from it. */ - if (len == 0) - data.ptr = message->msg_iov[i].iov_base; - else - data.ptr = NULL; - - len += message->msg_iov[i].iov_len; - } - } - - if (data.ptr == NULL) - { - size_t to_copy; - char *buf; - - /* Allocate a temporary buffer to hold the data. For small - amounts of data, we allocate a buffer on the stack. Larger - amounts of data are stored in a page-aligned buffer. The - limit of 2048 bytes is inspired by the MiG stubs. */ - if (len > 2048) - { - err = __vm_allocate (__mach_task_self (), &data.addr, len, 1); - if (err) - { - __set_errno (err); - return -1; - } - dealloc = 1; - } - else - data.ptr = data_buf; - - /* Copy the data into DATA. */ - to_copy = len; - buf = data.ptr; - for (i = 0; i < len; i++) - { -#define min(a, b) ((a) > (b) ? (b) : (a)) - size_t copy = min (message->msg_iov[i].iov_len, to_copy); - - buf = __mempcpy (buf, message->msg_iov[i].iov_base, copy); - - to_copy -= copy; - if (to_copy == 0) - break; - } - } - - if (addr) - { - if (addr->sun_family == AF_LOCAL) - { - char *name = _hurd_sun_path_dupa (addr, addr_len); - /* For the local domain, we must look up the name as a file - and talk to it with the ifsock protocol. */ - file_t file = __file_name_lookup (name, 0, 0); - if (file == MACH_PORT_NULL) - { - if (dealloc) - __vm_deallocate (__mach_task_self (), data.addr, len); - return -1; - } - err = __ifsock_getsockaddr (file, &aport); - __mach_port_deallocate (__mach_task_self (), file); - if (err == MIG_BAD_ID || err == EOPNOTSUPP) - /* The file did not grok the ifsock protocol. */ - err = ENOTSOCK; - if (err) - { - if (dealloc) - __vm_deallocate (__mach_task_self (), data.addr, len); - return __hurd_fail (err); - } - } - else - err = EIEIO; - } - - err = HURD_DPORT_USE (fd, - ({ - if (err) - err = __socket_create_address (port, - addr->sun_family, - (char *) addr, - addr_len, - &aport); - if (! err) - { - /* Send the data. */ - err = __socket_send (port, aport, - flags, data.ptr, len, - NULL, - MACH_MSG_TYPE_COPY_SEND, 0, - message->msg_control, - message->msg_controllen, - &amount); - __mach_port_deallocate (__mach_task_self (), - aport); - } - err; - })); - - if (dealloc) - __vm_deallocate (__mach_task_self (), data.addr, len); - - return err ? __hurd_sockfail (fd, flags, err) : amount; -} - -weak_alias (__libc_sendmsg, sendmsg) -weak_alias (__libc_sendmsg, __sendmsg) diff --git a/sysdeps/mach/hurd/sendto.c b/sysdeps/mach/hurd/sendto.c deleted file mode 100644 index 326999d27b..0000000000 --- a/sysdeps/mach/hurd/sendto.c +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include "hurd/hurdsocket.h" - -/* Send N bytes of BUF on socket FD to peer at address ADDR (which is - ADDR_LEN bytes long). Returns the number sent, or -1 for errors. */ -ssize_t -__sendto (int fd, - const void *buf, - size_t n, - int flags, - const struct sockaddr_un *addr, - socklen_t addr_len) -{ - addr_port_t aport = MACH_PORT_NULL; - error_t err; - size_t wrote; - - /* Get an address port for the desired destination address. */ - error_t create_address_port (io_t port, - const struct sockaddr_un *addr, - socklen_t addr_len, - addr_port_t *aport) - { - error_t err_port; - - if (addr->sun_family == AF_LOCAL) - { - char *name = _hurd_sun_path_dupa (addr, addr_len); - /* For the local domain, we must look up the name as a file and talk - to it with the ifsock protocol. */ - file_t file = __file_name_lookup (name, 0, 0); - if (file == MACH_PORT_NULL) - return errno; - err_port = __ifsock_getsockaddr (file, aport); - __mach_port_deallocate (__mach_task_self (), file); - if (err_port == MIG_BAD_ID || err_port == EOPNOTSUPP) - /* The file did not grok the ifsock protocol. */ - err_port = ENOTSOCK; - } - else - { - err_port = __socket_create_address (port, - addr->sun_family, - (char *) addr, - addr_len, - aport); - } - - return err_port; - } - - err = HURD_DPORT_USE (fd, - ({ - if (addr != NULL) - err = create_address_port (port, addr, addr_len, - &aport); - else - err = 0; - if (! err) - { - /* Send the data. */ - err = __socket_send (port, aport, - flags, buf, n, - NULL, - MACH_MSG_TYPE_COPY_SEND, 0, - NULL, 0, &wrote); - } - err; - })); - - if (aport != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), aport); - - return err ? __hurd_sockfail (fd, flags, err) : wrote; -} - -weak_alias (__sendto, sendto) diff --git a/sysdeps/mach/hurd/setdomain.c b/sysdeps/mach/hurd/setdomain.c deleted file mode 100644 index 0186927212..0000000000 --- a/sysdeps/mach/hurd/setdomain.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "hurdhost.h" - -/* Set the name of the current YP domain to NAME, which is LEN bytes long. - This call is restricted to the super-user. */ -int -setdomainname (const char *name, size_t len) -{ - /* The NIS domain name is just the contents of the file /etc/nisdomain. */ - ssize_t n = _hurd_set_host_config ("/etc/nisdomain", name, len); - return n < 0 ? -1 : 0; -} diff --git a/sysdeps/mach/hurd/setegid.c b/sysdeps/mach/hurd/setegid.c deleted file mode 100644 index ee0dacf0eb..0000000000 --- a/sysdeps/mach/hurd/setegid.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Set the effective user ID of the calling process to GID. */ -int -setegid (gid_t gid) -{ - auth_t newauth; - error_t err; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - err = _hurd_check_ids (); - - if (!err) - { - /* Make a new auth handle which has EGID as the first element in the - list of effective gids. */ - - if (_hurd_id.gen.ngids > 0) - { - _hurd_id.gen.gids[0] = gid; - _hurd_id.valid = 0; - } - - err = __USEPORT (AUTH, __auth_makeauth - (port, NULL, MACH_MSG_TYPE_COPY_SEND, 0, - _hurd_id.gen.uids, _hurd_id.gen.nuids, - _hurd_id.aux.uids, _hurd_id.aux.nuids, - _hurd_id.gen.ngids ? _hurd_id.gen.gids : &gid, - _hurd_id.gen.ngids ?: 1, - _hurd_id.aux.gids, _hurd_id.aux.ngids, - &newauth)); - } - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - if (err) - return __hurd_fail (err); - - /* Install the new handle and reauthenticate everything. */ - err = __setauth (newauth); - __mach_port_deallocate (__mach_task_self (), newauth); - return err; -} -libc_hidden_def (setegid) diff --git a/sysdeps/mach/hurd/seteuid.c b/sysdeps/mach/hurd/seteuid.c deleted file mode 100644 index 561f6b0369..0000000000 --- a/sysdeps/mach/hurd/seteuid.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Set the effective user ID of the calling process to UID. */ -int -seteuid (uid_t uid) -{ - auth_t newauth; - error_t err; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - err = _hurd_check_ids (); - - if (!err) - { - /* Make a new auth handle which has EUID as the first element in the - list of effective uids. */ - - if (_hurd_id.gen.nuids > 0) - { - _hurd_id.gen.uids[0] = uid; - _hurd_id.valid = 0; - } - - err = __USEPORT (AUTH, __auth_makeauth - (port, NULL, MACH_MSG_TYPE_COPY_SEND, 0, - _hurd_id.gen.nuids ? _hurd_id.gen.uids : &uid, - _hurd_id.gen.nuids ?: 1, - _hurd_id.aux.uids, _hurd_id.aux.nuids, - _hurd_id.gen.gids, _hurd_id.gen.ngids, - _hurd_id.aux.gids, _hurd_id.aux.ngids, - &newauth)); - } - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - if (err) - return __hurd_fail (err); - - /* Install the new handle and reauthenticate everything. */ - err = __setauth (newauth); - __mach_port_deallocate (__mach_task_self (), newauth); - return err; -} -libc_hidden_def (seteuid) diff --git a/sysdeps/mach/hurd/setgid.c b/sysdeps/mach/hurd/setgid.c deleted file mode 100644 index 2311571c23..0000000000 --- a/sysdeps/mach/hurd/setgid.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Set the group ID of the calling process to UID. - If the calling process is the super-user, the real - and effective group IDs, and the saved set-group-ID to UID; - if not, the effective group ID is set to GID. */ -int -__setgid (gid_t gid) -{ - auth_t newauth; - error_t err; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - err = _hurd_check_ids (); - - if (!err) - { - /* Make a new auth handle which has GID as the real gid, - and as the first element in the list of effective gids. */ - - gid_t *newgen, *newaux, auxbuf[2]; - size_t ngen, naux; - - if (_hurd_id.gen.ngids == 0) - { - /* No effective gids now. The new set will be just GID. */ - newgen = &gid; - ngen = 1; - } - else - { - _hurd_id.gen.gids[0] = gid; - _hurd_id.valid = 0; - newgen = _hurd_id.gen.gids; - ngen = _hurd_id.gen.ngids; - } - - newaux = _hurd_id.aux.gids; - naux = _hurd_id.aux.ngids; - if (_hurd_id.gen.nuids > 0 && _hurd_id.gen.uids[0] == 0) - { - /* We are root; set the real and saved IDs too. */ - _hurd_id.valid = 0; - if (_hurd_id.aux.ngids < 2) - { - newaux = auxbuf; - naux = 2; - } - newaux[0] = newaux[1] = gid; - } - - err = __USEPORT (AUTH, __auth_makeauth - (port, NULL, MACH_MSG_TYPE_COPY_SEND, 0, - _hurd_id.gen.uids, _hurd_id.gen.nuids, - _hurd_id.aux.uids, _hurd_id.aux.nuids, - newgen, ngen, newaux, naux, - &newauth)); - } - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - if (err) - return __hurd_fail (err); - - /* Install the new handle and reauthenticate everything. */ - err = __setauth (newauth); - __mach_port_deallocate (__mach_task_self (), newauth); - return err; -} - -weak_alias (__setgid, setgid) diff --git a/sysdeps/mach/hurd/setgroups.c b/sysdeps/mach/hurd/setgroups.c deleted file mode 100644 index 7742534b60..0000000000 --- a/sysdeps/mach/hurd/setgroups.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Set the group set for the current user to GROUPS (N of them). */ -int -setgroups (size_t n, const gid_t *groups) -{ - error_t err; - auth_t newauth; - size_t i; - gid_t new[n]; - - /* Fault before taking locks. */ - for (i = 0; i < n; ++i) - new[i] = groups[i]; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - err = _hurd_check_ids (); - if (! err) - { - /* Get a new auth port using those IDs. */ - err = __USEPORT (AUTH, - __auth_makeauth (port, NULL, MACH_MSG_TYPE_COPY_SEND, 0, - _hurd_id.gen.uids, _hurd_id.gen.nuids, - _hurd_id.aux.uids, _hurd_id.aux.nuids, - new, n, - _hurd_id.aux.gids, _hurd_id.aux.ngids, - &newauth)); - } - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - if (err) - return __hurd_fail (err); - - /* Install the new auth port and reauthenticate everything. */ - err = __setauth (newauth); - __mach_port_deallocate (__mach_task_self (), newauth); - return err; -} -libc_hidden_def (setgroups) diff --git a/sysdeps/mach/hurd/sethostid.c b/sysdeps/mach/hurd/sethostid.c deleted file mode 100644 index b1cecd2262..0000000000 --- a/sysdeps/mach/hurd/sethostid.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "hurdhost.h" -#include <_itoa.h> - -/* Set the current machine's Internet number to ID. - This call is restricted to the super-user. */ -/* XXX should be __sethostid? - isn't hostid supposed to be hardwired and unchangeable? */ -int -sethostid (long int id) -{ - char buf[8], *bp; - ssize_t n; - - /* The hostid is kept in the file /etc/hostid, - eight characters of upper-case hexadecimal. */ - - bp = _itoa_word (id, &buf[sizeof buf], 16, 1); - while (bp > buf) - *--bp = '0'; - - n = _hurd_set_host_config ("/etc/hostid", buf, sizeof buf); - return n < 0 ? -1 : 0; -} diff --git a/sysdeps/mach/hurd/sethostname.c b/sysdeps/mach/hurd/sethostname.c deleted file mode 100644 index 26615faa28..0000000000 --- a/sysdeps/mach/hurd/sethostname.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "hurdhost.h" - -/* Set the name of the current host to NAME, which is LEN bytes long. - This call is restricted to the super-user. */ -/* XXX should be __sethostname ? */ -int -sethostname (const char *name, size_t len) -{ - /* The host name is just the contents of the file /etc/hostname. */ - ssize_t n = _hurd_set_host_config ("/etc/hostname", name, len); - return n < 0 ? -1 : 0; -} diff --git a/sysdeps/mach/hurd/setitimer.c b/sysdeps/mach/hurd/setitimer.c deleted file mode 100644 index a5ab55405b..0000000000 --- a/sysdeps/mach/hurd/setitimer.c +++ /dev/null @@ -1,372 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* XXX Temporary cheezoid implementation of ITIMER_REAL/SIGALRM. */ - -spin_lock_t _hurd_itimer_lock = SPIN_LOCK_INITIALIZER; -struct itimerval _hurd_itimerval; /* Current state of the timer. */ -mach_port_t _hurd_itimer_port; /* Port the timer thread blocks on. */ -thread_t _hurd_itimer_thread; /* Thread waiting for timeout. */ -int _hurd_itimer_thread_suspended; /* Nonzero if that thread is suspended. */ -vm_address_t _hurd_itimer_thread_stack_base; /* Base of its stack. */ -vm_size_t _hurd_itimer_thread_stack_size; /* Size of its stack. */ -struct timeval _hurd_itimer_started; /* Time the thread started waiting. */ - -static void -quantize_timeval (struct timeval *tv) -{ - static time_t quantum = -1; - - if (quantum == -1) - quantum = 1000000 / __getclktck (); - - tv->tv_usec = ((tv->tv_usec + (quantum - 1)) / quantum) * quantum; - if (tv->tv_usec >= 1000000) - { - ++tv->tv_sec; - tv->tv_usec -= 1000000; - } -} - -static inline void -subtract_timeval (struct timeval *from, const struct timeval *subtract) -{ - from->tv_usec -= subtract->tv_usec; - from->tv_sec -= subtract->tv_sec; - while (from->tv_usec < 0) - { - --from->tv_sec; - from->tv_usec += 1000000; - } -} - -/* Function run by the itimer thread. - This code must be very careful not ever to require a MiG reply port. */ - -static void -timer_thread (void) -{ - while (1) - { - error_t err; - /* The only message we ever expect to receive is the reply from the - signal thread to a sig_post call we did. We never examine the - contents. */ - struct - { - mach_msg_header_t header; - error_t return_code; - } msg; - - /* Wait for a message on a port that noone sends to. The purpose is - the receive timeout. Notice interrupts so that if we are - thread_abort'd, we will loop around and fetch new values from - _hurd_itimerval. */ - err = __mach_msg (&msg.header, - MACH_RCV_MSG|MACH_RCV_TIMEOUT|MACH_RCV_INTERRUPT, - 0, 0, _hurd_itimer_port, - _hurd_itimerval.it_value.tv_sec * 1000 + - _hurd_itimerval.it_value.tv_usec / 1000, - MACH_PORT_NULL); - switch (err) - { - case MACH_RCV_TIMED_OUT: - /* We got the expected timeout. Send a message to the signal - thread to tell it to post a SIGALRM signal. We use - _hurd_itimer_port as the reply port just so we will block until - the signal thread has frobnicated things to reload the itimer or - has terminated this thread. */ - __msg_sig_post_request (_hurd_msgport, - _hurd_itimer_port, - MACH_MSG_TYPE_MAKE_SEND_ONCE, - SIGALRM, 0, __mach_task_self ()); - break; - - case MACH_RCV_INTERRUPTED: - /* We were thread_abort'd. This is to tell us that - _hurd_itimerval has changed and we need to reexamine it - and start waiting with the new timeout value. */ - break; - - case MACH_MSG_SUCCESS: - /* We got the reply message from the sig_post_request above. - Ignore it and reexamine the timer value. */ - __mach_msg_destroy (&msg.header); /* Just in case. */ - break; - - default: - /* Unexpected lossage. Oh well, keep trying. */ - break; - } - } -} - - -/* Forward declaration. */ -static int setitimer_locked (const struct itimerval *new, - struct itimerval *old, void *crit); - -static sighandler_t -restart_itimer (struct hurd_signal_preemptor *preemptor, - struct hurd_sigstate *ss, - int *signo, struct hurd_signal_detail *detail) -{ - /* This function gets called in the signal thread - each time a SIGALRM is arriving (even if blocked). */ - struct itimerval it; - - /* Either reload or disable the itimer. */ - __spin_lock (&_hurd_itimer_lock); - it.it_value = it.it_interval = _hurd_itimerval.it_interval; - setitimer_locked (&it, NULL, NULL); - - /* Continue with normal delivery (or hold, etc.) of SIGALRM. */ - return SIG_ERR; -} - - -/* Called before any normal SIGALRM signal is delivered. - Reload the itimer, or disable the itimer. */ - -static int -setitimer_locked (const struct itimerval *new, struct itimerval *old, - void *crit) -{ - struct itimerval newval; - struct timeval now, remaining, elapsed; - struct timeval old_interval; - error_t err; - - inline void kill_itimer_thread (void) - { - __thread_terminate (_hurd_itimer_thread); - __vm_deallocate (__mach_task_self (), - _hurd_itimer_thread_stack_base, - _hurd_itimer_thread_stack_size); - _hurd_itimer_thread = MACH_PORT_NULL; - } - - if (!new) - { - /* Just return the current value in OLD without changing anything. - This is what BSD does, even though it's not documented. */ - if (old) - *old = _hurd_itimerval; - spin_unlock (&_hurd_itimer_lock); - _hurd_critical_section_unlock (crit); - return 0; - } - - newval = *new; - quantize_timeval (&newval.it_interval); - quantize_timeval (&newval.it_value); - if ((newval.it_value.tv_sec | newval.it_value.tv_usec) != 0) - { - /* Make sure the itimer thread is set up. */ - - /* Set up a signal preemptor global for all threads to - run `restart_itimer' each time a SIGALRM would arrive. */ - static struct hurd_signal_preemptor preemptor = - { - __sigmask (SIGALRM), 0, 0, - &restart_itimer, - }; - __mutex_lock (&_hurd_siglock); - if (! preemptor.next && _hurdsig_preemptors != &preemptor) - { - preemptor.next = _hurdsig_preemptors; - _hurdsig_preemptors = &preemptor; - } - __mutex_unlock (&_hurd_siglock); - - if (_hurd_itimer_port == MACH_PORT_NULL) - { - /* Allocate a receive right that the itimer thread will - block waiting for a message on. */ - if (err = __mach_port_allocate (__mach_task_self (), - MACH_PORT_RIGHT_RECEIVE, - &_hurd_itimer_port)) - goto out; - } - - if (_hurd_itimer_thread == MACH_PORT_NULL) - { - /* Start up the itimer thread running `timer_thread' (below). */ - if (err = __thread_create (__mach_task_self (), - &_hurd_itimer_thread)) - goto out; - _hurd_itimer_thread_stack_base = 0; /* Anywhere. */ - _hurd_itimer_thread_stack_size = __vm_page_size; /* Small stack. */ - if (err = __mach_setup_thread (__mach_task_self (), - _hurd_itimer_thread, - &timer_thread, - &_hurd_itimer_thread_stack_base, - &_hurd_itimer_thread_stack_size)) - { - __thread_terminate (_hurd_itimer_thread); - _hurd_itimer_thread = MACH_PORT_NULL; - goto out; - } - _hurd_itimer_thread_suspended = 1; - } - } - - if ((newval.it_value.tv_sec | newval.it_value.tv_usec) != 0 || old != NULL) - { - /* Calculate how much time is remaining for the pending alarm. */ - if (__gettimeofday (&now, NULL) < 0) - { - __spin_unlock (&_hurd_itimer_lock); - _hurd_critical_section_unlock (crit); - return -1; - } - elapsed = now; - subtract_timeval (&elapsed, &_hurd_itimer_started); - remaining = _hurd_itimerval.it_value; - if (timercmp (&remaining, &elapsed, <)) - { - /* Hmm. The timer should have just gone off, but has not been reset. - This is a possible timing glitch. The alarm will signal soon. */ - /* XXX wrong */ - remaining.tv_sec = 0; - remaining.tv_usec = 0; - } - else - subtract_timeval (&remaining, &elapsed); - - /* Remember the old reload interval before changing it. */ - old_interval = _hurd_itimerval.it_interval; - - /* Record the starting time that the timer interval relates to. */ - _hurd_itimer_started = now; - } - - /* Load the new itimer value. */ - _hurd_itimerval = newval; - - if ((newval.it_value.tv_sec | newval.it_value.tv_usec) == 0) - { - /* Disable the itimer. */ - if (_hurd_itimer_thread && !_hurd_itimer_thread_suspended) - { - /* Suspend the itimer thread so it does nothing. Then abort its - kernel context so that when the thread is resumed, mach_msg - will return to timer_thread (below) and it will fetch new - values from _hurd_itimerval. */ - if ((err = __thread_suspend (_hurd_itimer_thread)) || - (err = __thread_abort (_hurd_itimer_thread))) - /* If we can't save it for later, nuke it. */ - kill_itimer_thread (); - else - _hurd_itimer_thread_suspended = 1; - } - } - /* See if the timeout changed. If so, we must alert the itimer thread. */ - else if (remaining.tv_sec != newval.it_value.tv_sec || - remaining.tv_usec != newval.it_value.tv_usec) - { - /* The timeout value is changing. Tell the itimer thread to - reexamine it and start counting down. If the itimer thread is - marked as suspended, either we just created it, or it was - suspended and thread_abort'd last time the itimer was disabled; - either way it will wake up and start waiting for the new timeout - value when we resume it. If it is not suspended, the itimer - thread is waiting to deliver a pending alarm that we will override - (since it would come later than the new alarm being set); - thread_abort will make mach_msg return MACH_RCV_INTERRUPTED, so it - will loop around and use the new timeout value. */ - if (err = (_hurd_itimer_thread_suspended - ? __thread_resume : __thread_abort) (_hurd_itimer_thread)) - { - kill_itimer_thread (); - goto out; - } - _hurd_itimer_thread_suspended = 0; - } - - __spin_unlock (&_hurd_itimer_lock); - _hurd_critical_section_unlock (crit); - - if (old != NULL) - { - old->it_value = remaining; - old->it_interval = old_interval; - } - return 0; - - out: - __spin_unlock (&_hurd_itimer_lock); - _hurd_critical_section_unlock (crit); - return __hurd_fail (err); -} - -/* Set the timer WHICH to *NEW. If OLD is not NULL, - set *OLD to the old value of timer WHICH. - Returns 0 on success, -1 on errors. */ -int -__setitimer (enum __itimer_which which, const struct itimerval *new, - struct itimerval *old) -{ - void *crit; - - switch (which) - { - default: - return __hurd_fail (EINVAL); - - case ITIMER_VIRTUAL: - case ITIMER_PROF: - return __hurd_fail (ENOSYS); - - case ITIMER_REAL: - break; - } - - crit = _hurd_critical_section_lock (); - __spin_lock (&_hurd_itimer_lock); - return setitimer_locked (new, old, crit); -} - -static void -fork_itimer (void) -{ - /* We must restart the itimer in the child. */ - - struct itimerval it; - - __spin_lock (&_hurd_itimer_lock); - _hurd_itimer_thread = MACH_PORT_NULL; - it = _hurd_itimerval; - it.it_value = it.it_interval; - - setitimer_locked (&it, NULL, NULL); - - (void) &fork_itimer; /* Avoid gcc optimizing out the function. */ -} -text_set_element (_hurd_fork_child_hook, fork_itimer); - -weak_alias (__setitimer, setitimer) diff --git a/sysdeps/mach/hurd/setlogin.c b/sysdeps/mach/hurd/setlogin.c deleted file mode 100644 index bdac6d1147..0000000000 --- a/sysdeps/mach/hurd/setlogin.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Set the login name returned by `getlogin'. */ -int -setlogin (const char *name) -{ - error_t err; - if (err = __USEPORT (PROC, __proc_setlogin (port, name))) - return __hurd_fail (err); - return 0; -} diff --git a/sysdeps/mach/hurd/setpgid.c b/sysdeps/mach/hurd/setpgid.c deleted file mode 100644 index 1de4c574d5..0000000000 --- a/sysdeps/mach/hurd/setpgid.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Set the process group ID of the process matching PID to PGID. - If PID is zero, the current process's process group ID is set. - If PGID is zero, the process ID of the process is used. */ -int -__setpgid (pid_t pid, pid_t pgid) -{ - error_t err; - unsigned int stamp; - - stamp = _hurd_pids_changed_stamp; /* Atomic fetch. */ - - if (err = __USEPORT (PROC, __proc_setpgrp (port, pid, pgid))) - return __hurd_fail (err); - - if (pid == 0 || pid == _hurd_pid) - /* Synchronize with the signal thread to make sure we have - received and processed proc_newids before returning to the user. */ - while (_hurd_pids_changed_stamp == stamp) - { -#ifdef noteven - /* XXX we have no need for a mutex, but cthreads demands one. */ - __condition_wait (&_hurd_pids_changed_sync, NULL); -#else - __swtch_pri(0); -#endif - } - - return 0; - -} -libc_hidden_def (__setpgid) -weak_alias (__setpgid, setpgid) diff --git a/sysdeps/mach/hurd/setpriority.c b/sysdeps/mach/hurd/setpriority.c deleted file mode 100644 index 86992a1f6a..0000000000 --- a/sysdeps/mach/hurd/setpriority.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Set the priority of all processes specified by WHICH and WHO - to PRIO. Returns 0 on success, -1 on errors. */ -int -__setpriority (enum __priority_which which, id_t who, int prio) -{ - error_t err; - error_t pidloser, priloser; - unsigned int npids, ntasks, nwin, nperm, nacces; - - error_t setonepriority (pid_t pid, struct procinfo *pi) - { - task_t task; - error_t piderr = __USEPORT (PROC, __proc_pid2task (port, pid, &task)); - if (piderr == EPERM) - ++nperm; - if (piderr != ESRCH) - { - ++npids; - if (piderr && piderr != EPERM) - pidloser = piderr; - } - if (! piderr) - { - error_t prierr; - ++ntasks; -#ifdef POLICY_TIMESHARE_BASE_COUNT - { - /* XXX This assumes timeshare policy. */ - struct policy_timeshare_base base - = { NICE_TO_MACH_PRIORITY (prio) }; - prierr = __task_policy (task, POLICY_TIMESHARE, - (policy_base_t) &base, - POLICY_TIMESHARE_BASE_COUNT, - 0, 1); - } -#else - prierr = __task_priority (task, NICE_TO_MACH_PRIORITY (prio), 1); -#endif - __mach_port_deallocate (__mach_task_self (), task); - switch (prierr) - { - case KERN_FAILURE: - ++nacces; - break; - case KERN_SUCCESS: - ++nwin; - break; - case KERN_INVALID_ARGUMENT: /* Task died. */ - --npids; - --ntasks; - break; - default: - priloser = prierr; - } - } - return 0; - } - - npids = ntasks = nwin = nperm = nacces = 0; - pidloser = priloser = 0; - err = _hurd_priority_which_map (which, who, setonepriority, 0); - - if (!err && npids == 0) - /* No error, but no pids found. */ - err = ESRCH; - else if (nperm == npids) - /* Got EPERM from proc_task2pid for every process. */ - err = EPERM; - else if (nacces == ntasks) - /* Got KERN_FAILURE from task_priority for every task. */ - err = EACCES; - else if (nwin == 0) - err = pidloser ?: priloser; - - return err ? __hurd_fail (err) : 0; -} -libc_hidden_def (__setpriority) -weak_alias (__setpriority, setpriority) diff --git a/sysdeps/mach/hurd/setregid.c b/sysdeps/mach/hurd/setregid.c deleted file mode 100644 index 2fe37bdf8d..0000000000 --- a/sysdeps/mach/hurd/setregid.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -int -__setregid (gid_t rgid, gid_t egid) -{ - auth_t newauth; - error_t err; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - err = _hurd_check_ids (); - - if (!err) - { - /* Make a new auth handle which has RGID as the real gid, - and EGID as the first element in the list of effective gids. */ - - gid_t *newgen, *newaux; - size_t ngen, naux; - - newgen = _hurd_id.gen.gids; - ngen = _hurd_id.gen.ngids; - if (egid != -1) - { - if (_hurd_id.gen.ngids == 0) - { - /* No effective gids now. The new set will be just GID. */ - newgen = &egid; - ngen = 1; - } - else - { - _hurd_id.gen.gids[0] = egid; - _hurd_id.valid = 0; - } - } - - newaux = _hurd_id.aux.gids; - naux = _hurd_id.aux.ngids; - if (rgid != -1) - { - if (_hurd_id.aux.ngids == 0) - { - newaux = &rgid; - naux = 1; - } - else - { - _hurd_id.aux.gids[0] = rgid; - _hurd_id.valid = 0; - } - } - - err = __USEPORT (AUTH, __auth_makeauth - (port, NULL, MACH_MSG_TYPE_COPY_SEND, 0, - _hurd_id.gen.uids, _hurd_id.gen.nuids, - _hurd_id.aux.uids, _hurd_id.aux.nuids, - newgen, ngen, newaux, naux, - &newauth)); - } - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - if (err) - return __hurd_fail (err); - - /* Install the new handle and reauthenticate everything. */ - err = __setauth (newauth); - __mach_port_deallocate (__mach_task_self (), newauth); - return err; -} - -weak_alias (__setregid, setregid) diff --git a/sysdeps/mach/hurd/setresgid.c b/sysdeps/mach/hurd/setresgid.c deleted file mode 100644 index 0eb5d422b7..0000000000 --- a/sysdeps/mach/hurd/setresgid.c +++ /dev/null @@ -1,123 +0,0 @@ -/* setresgid -- set real group ID, effective group ID, and saved-set group ID - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Set the real group ID, effective group ID, and saved-set group ID, - of the calling process to RGID, EGID, and SGID, respectively. */ -int -__setresgid (gid_t rgid, gid_t egid, gid_t sgid) -{ - auth_t newauth; - error_t err; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - err = _hurd_check_ids (); - - if (!err) - { - /* Make a new auth handle which has EGID as the first element in the - list of effective gids. */ - - uid_t *newgen, *newaux; - uid_t auxs[2] = { rgid, sgid }; - size_t ngen, naux; - - newgen = _hurd_id.gen.gids; - ngen = _hurd_id.gen.ngids; - if (egid != -1) - { - if (_hurd_id.gen.ngids == 0) - { - /* No effective gids now. The new set will be just UID. */ - newgen = &egid; - ngen = 1; - } - else - { - _hurd_id.gen.gids[0] = egid; - _hurd_id.valid = 0; - } - } - - newaux = _hurd_id.aux.gids; - naux = _hurd_id.aux.ngids; - if (rgid != -1) - { - if (_hurd_id.aux.ngids == 0) - { - newaux = &rgid; - naux = 1; - } - else - { - _hurd_id.aux.gids[0] = rgid; - _hurd_id.valid = 0; - } - } - - if (sgid != -1) - { - if (rgid == -1) - { - if (_hurd_id.aux.ngids >= 1) - auxs[0] = _hurd_id.aux.gids[0]; - else if (_hurd_id.gen.ngids >= 1) - auxs[0] = _hurd_id.gen.gids[0]; - else - /* Not even an effective GID. - Fall back to the only GID we have. */ - auxs[0] = sgid; - } - if (_hurd_id.aux.ngids <= 1) - { - /* No saved gids now. The new set will be just UID. */ - newaux = auxs; - naux = 2; - } - else - { - _hurd_id.aux.gids[1] = sgid; - _hurd_id.valid = 0; - } - } - - err = __USEPORT (AUTH, __auth_makeauth - (port, NULL, MACH_MSG_TYPE_COPY_SEND, 0, - _hurd_id.gen.uids, _hurd_id.gen.nuids, - _hurd_id.aux.uids, _hurd_id.aux.nuids, - newgen, ngen, newaux, naux, - &newauth)); - } - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - if (err) - return __hurd_fail (err); - - /* Install the new handle and reauthenticate everything. */ - err = __setauth (newauth); - __mach_port_deallocate (__mach_task_self (), newauth); - return err; -} -libc_hidden_def (__setresgid) -weak_alias (__setresgid, setresgid) diff --git a/sysdeps/mach/hurd/setresuid.c b/sysdeps/mach/hurd/setresuid.c deleted file mode 100644 index 39f64d44e0..0000000000 --- a/sysdeps/mach/hurd/setresuid.c +++ /dev/null @@ -1,124 +0,0 @@ -/* setresuid -- set real user ID, effective user ID, and saved-set user ID - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Set the real user ID, effective user ID, and saved-set user ID, - of the calling process to RUID, EUID, and SUID, respectively. */ -int -__setresuid (uid_t ruid, uid_t euid, uid_t suid) -{ - auth_t newauth; - error_t err; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - err = _hurd_check_ids (); - - if (!err) - { - /* Make a new auth handle which has EUID as the first element in the - list of effective uids. */ - - uid_t *newgen, *newaux; - uid_t auxs[2] = { ruid, suid }; - size_t ngen, naux; - - newgen = _hurd_id.gen.uids; - ngen = _hurd_id.gen.nuids; - if (euid != -1) - { - if (_hurd_id.gen.nuids == 0) - { - /* No effective uids now. The new set will be just UID. */ - newgen = &euid; - ngen = 1; - } - else - { - _hurd_id.gen.uids[0] = euid; - _hurd_id.valid = 0; - } - } - - newaux = _hurd_id.aux.uids; - naux = _hurd_id.aux.nuids; - if (ruid != -1) - { - if (_hurd_id.aux.nuids == 0) - { - newaux = &ruid; - naux = 1; - } - else - { - _hurd_id.aux.uids[0] = ruid; - _hurd_id.valid = 0; - } - } - - if (suid != -1) - { - if (ruid == -1) - { - if (_hurd_id.aux.nuids >= 1) - auxs[0] = _hurd_id.aux.uids[0]; - else if (_hurd_id.gen.nuids >= 1) - auxs[0] = _hurd_id.gen.uids[0]; - else - /* Not even an effective UID. - Fall back to the only UID we have. */ - auxs[0] = suid; - } - if (_hurd_id.aux.nuids <= 1) - { - /* No saved uids now. The new set will be just UID. */ - newaux = auxs; - naux = 2; - } - else - { - _hurd_id.aux.uids[1] = suid; - _hurd_id.valid = 0; - } - } - - err = __USEPORT (AUTH, __auth_makeauth - (port, NULL, MACH_MSG_TYPE_COPY_SEND, 0, - newgen, ngen, newaux, naux, - _hurd_id.gen.gids, _hurd_id.gen.ngids, - _hurd_id.aux.gids, _hurd_id.aux.ngids, - &newauth)); - } - - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - if (err) - return __hurd_fail (err); - - /* Install the new handle and reauthenticate everything. */ - err = __setauth (newauth); - __mach_port_deallocate (__mach_task_self (), newauth); - return err; -} -libc_hidden_def (__setresuid) -weak_alias (__setresuid, setresuid) diff --git a/sysdeps/mach/hurd/setreuid.c b/sysdeps/mach/hurd/setreuid.c deleted file mode 100644 index 5fdaa877e3..0000000000 --- a/sysdeps/mach/hurd/setreuid.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -int -__setreuid (uid_t ruid, uid_t euid) -{ - auth_t newauth; - error_t err; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - err = _hurd_check_ids (); - - if (!err) - { - /* Make a new auth handle which has RUID as the real uid, - and EUID as the first element in the list of effective uids. */ - - uid_t *newgen, *newaux; - size_t ngen, naux; - - newgen = _hurd_id.gen.uids; - ngen = _hurd_id.gen.nuids; - if (euid != -1) - { - if (_hurd_id.gen.nuids == 0) - { - /* No effective uids now. The new set will be just UID. */ - newgen = &euid; - ngen = 1; - } - else - { - _hurd_id.gen.uids[0] = euid; - _hurd_id.valid = 0; - } - } - - newaux = _hurd_id.aux.uids; - naux = _hurd_id.aux.nuids; - if (ruid != -1) - { - if (_hurd_id.aux.nuids == 0) - { - newaux = &ruid; - naux = 1; - } - else - { - _hurd_id.aux.uids[0] = ruid; - _hurd_id.valid = 0; - } - } - - err = __USEPORT (AUTH, __auth_makeauth - (port, NULL, MACH_MSG_TYPE_COPY_SEND, 0, - newgen, ngen, newaux, naux, - _hurd_id.gen.gids, _hurd_id.gen.ngids, - _hurd_id.aux.gids, _hurd_id.aux.ngids, - &newauth)); - } - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - if (err) - return __hurd_fail (err); - - /* Install the new handle and reauthenticate everything. */ - err = __setauth (newauth); - __mach_port_deallocate (__mach_task_self (), newauth); - return err; -} - -weak_alias (__setreuid, setreuid) diff --git a/sysdeps/mach/hurd/setrlimit.c b/sysdeps/mach/hurd/setrlimit.c deleted file mode 100644 index 3ea9af2e7c..0000000000 --- a/sysdeps/mach/hurd/setrlimit.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include -#include -#include - -/* Set the soft and hard limits for RESOURCE to *RLIMITS. - Only the super-user can increase hard limits. - Return 0 if successful, -1 if not (and sets errno). */ -int -__setrlimit (enum __rlimit_resource resource, const struct rlimit *rlimits) -{ - struct rlimit lim; - - if (rlimits == NULL || (unsigned int) resource >= RLIMIT_NLIMITS) - { - errno = EINVAL; - return -1; - } - - lim = *rlimits; - - /* Even though most limits do nothing, there is no inheritance, and hard - limits are not really hard, we just let any old call succeed to make - life easier for programs that expect normal behavior. */ - - if (lim.rlim_cur > lim.rlim_max) - lim.rlim_cur = lim.rlim_max; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_rlimit_lock); - _hurd_rlimits[resource] = lim; - __mutex_unlock (&_hurd_rlimit_lock); - HURD_CRITICAL_END; - - return 0; -} - -weak_alias (__setrlimit, setrlimit) diff --git a/sysdeps/mach/hurd/setsid.c b/sysdeps/mach/hurd/setsid.c deleted file mode 100644 index 60794df7b8..0000000000 --- a/sysdeps/mach/hurd/setsid.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Create a new session with the calling process as its leader. - The process group IDs of the session and the calling process - are set to the process ID of the calling process, which is returned. */ -pid_t -__setsid (void) -{ - error_t err; - unsigned int stamp; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_dtable_lock); - - stamp = _hurd_pids_changed_stamp; /* Atomic fetch. */ - - /* Tell the proc server we want to start a new session. */ - err = __USEPORT (PROC, __proc_setsid (port)); - if (err) - __mutex_unlock (&_hurd_dtable_lock); - else - { - /* Punt our current ctty, and update the dtable accordingly. We hold - the dtable lock from before the proc_setsid call through clearing - the cttyid port and processing the dtable, so that we can be sure - that it's all done by the time the signal thread processes the - pgrp change notification. */ - _hurd_locked_install_cttyid (MACH_PORT_NULL); - - /* Synchronize with the signal thread to make sure we have received - and processed proc_newids before returning to the user. - This is necessary to ensure that _hurd_pgrp (and thus the value - returned by `getpgrp ()' in other threads) has been updated before - we return. */ - while (_hurd_pids_changed_stamp == stamp) - { -#ifdef noteven - /* XXX we have no need for a mutex, but cthreads demands one. */ - __condition_wait (&_hurd_pids_changed_sync, NULL); -#else - __swtch_pri (0); -#endif - } - } - - HURD_CRITICAL_END; - - return err ? __hurd_fail (err) : _hurd_pgrp; -} - -weak_alias (__setsid, setsid) diff --git a/sysdeps/mach/hurd/setsockopt.c b/sysdeps/mach/hurd/setsockopt.c deleted file mode 100644 index de041e991c..0000000000 --- a/sysdeps/mach/hurd/setsockopt.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Set socket FD's option OPTNAME at protocol level LEVEL - to *OPTVAL (which is OPTLEN bytes long). - Returns 0 on success, -1 for errors. */ -int -__setsockopt (int fd, - int level, - int optname, - const void *optval, - socklen_t optlen) -{ - error_t err = HURD_DPORT_USE (fd, __socket_setopt (port, - level, optname, - optval, optlen)); - if (err) - return __hurd_dfail (fd, err); - return 0; -} - -weak_alias (__setsockopt, setsockopt) diff --git a/sysdeps/mach/hurd/settimeofday.c b/sysdeps/mach/hurd/settimeofday.c deleted file mode 100644 index 71225ee3dc..0000000000 --- a/sysdeps/mach/hurd/settimeofday.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Set the current time of day and timezone information. - This call is restricted to the super-user. */ -int -__settimeofday (const struct timeval *tv, const struct timezone *tz) -{ - error_t err; - mach_port_t hostpriv; - - if (tz != NULL) - { - errno = ENOSYS; - return -1; - } - - err = __get_privileged_ports (&hostpriv, NULL); - if (err) - return __hurd_fail (EPERM); - - /* `time_value_t' and `struct timeval' are in fact identical with the - names changed. */ - err = __host_set_time (hostpriv, *(time_value_t *) tv); - __mach_port_deallocate (__mach_task_self (), hostpriv); - - if (err) - return __hurd_fail (err); - - return 0; -} - -weak_alias (__settimeofday, settimeofday) diff --git a/sysdeps/mach/hurd/setuid.c b/sysdeps/mach/hurd/setuid.c deleted file mode 100644 index e78c5dd48f..0000000000 --- a/sysdeps/mach/hurd/setuid.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Set the user ID of the calling process to UID. - If the calling process is the super-user, the real - and effective user IDs, and the saved set-user-ID to UID; - if not, the effective user ID is set to UID. */ -int -__setuid (uid_t uid) -{ - auth_t newauth; - error_t err; - - HURD_CRITICAL_BEGIN; - __mutex_lock (&_hurd_id.lock); - err = _hurd_check_ids (); - - if (!err) - { - /* Make a new auth handle which has UID as the real uid, - and as the first element in the list of effective uids. */ - - uid_t *newgen, *newaux, auxbuf[2]; - size_t ngen, naux; - - newaux = _hurd_id.aux.uids; - naux = _hurd_id.aux.nuids; - if (_hurd_id.gen.nuids == 0) - { - /* No effective uids now. The new set will be just UID. */ - newgen = &uid; - ngen = 1; - } - else if (_hurd_id.gen.uids[0] == 0) - { - /* We are root; set the effective, real, and saved to UID. */ - _hurd_id.gen.uids[0] = uid; - _hurd_id.valid = 0; - newgen = _hurd_id.gen.uids; - ngen = _hurd_id.gen.nuids; - if (_hurd_id.aux.nuids < 2) - { - newaux = auxbuf; - naux = 2; - } - newaux[0] = newaux[1] = uid; - } - else - { - /* We are not root; just change the effective UID. */ - /* XXX that implies an unprivileged setuid(0) will give - the caller root, no questions asked! */ - _hurd_id.gen.uids[0] = uid; - _hurd_id.valid = 0; - newgen = _hurd_id.gen.uids; - ngen = _hurd_id.gen.nuids; - } - - err = __USEPORT (AUTH, __auth_makeauth - (port, NULL, MACH_MSG_TYPE_COPY_SEND, 0, - newgen, ngen, newaux, naux, - _hurd_id.gen.gids, _hurd_id.gen.ngids, - _hurd_id.aux.gids, _hurd_id.aux.ngids, - &newauth)); - } - __mutex_unlock (&_hurd_id.lock); - HURD_CRITICAL_END; - - if (err) - return __hurd_fail (err); - - /* Install the new handle and reauthenticate everything. */ - err = __setauth (newauth); - __mach_port_deallocate (__mach_task_self (), newauth); - return err; -} - -weak_alias (__setuid, setuid) diff --git a/sysdeps/mach/hurd/setxattr.c b/sysdeps/mach/hurd/setxattr.c deleted file mode 100644 index 0dc7fb4777..0000000000 --- a/sysdeps/mach/hurd/setxattr.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Access to extended attributes on files. Hurd version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -ssize_t -setxattr (const char *path, const char *name, const void *value, size_t size, - int flags) -{ - error_t err; - file_t port = __file_name_lookup (path, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - err = _hurd_xattr_set (port, name, value, size, flags); - __mach_port_deallocate (__mach_task_self (), port); - return __hurd_fail (err); -} diff --git a/sysdeps/mach/hurd/shlib-versions b/sysdeps/mach/hurd/shlib-versions deleted file mode 100644 index edbc3014a6..0000000000 --- a/sysdeps/mach/hurd/shlib-versions +++ /dev/null @@ -1,12 +0,0 @@ -DEFAULT GLIBC_2.2.6 - -libm=6 - -# libmachuser.so.1 corresponds to mach/*.defs as of Utah's UK22 release. -libmachuser=1 - -# libhurduser.so.0.3 corresponds to hurd/*.defs as of 11 June 2002. -libhurduser=0.3 - -# libc.so.0.3 is the first Hurd libc using libio. -libc=0.3 diff --git a/sysdeps/mach/hurd/shutdown.c b/sysdeps/mach/hurd/shutdown.c deleted file mode 100644 index 0869a777c8..0000000000 --- a/sysdeps/mach/hurd/shutdown.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Shut down all or part of the connection open on socket FD. - HOW determines what to shut down: - 0 = No more receptions; - 1 = No more transmissions; - 2 = No more receptions or transmissions. - Returns 0 on success, -1 for errors. */ -/* XXX should be __shutdown ? */ -int -shutdown (int fd, int how) -{ - error_t err = HURD_DPORT_USE (fd, __socket_shutdown (port, how)); - if (err) - return __hurd_dfail (fd, err); - return 0; -} diff --git a/sysdeps/mach/hurd/sigaction.c b/sysdeps/mach/hurd/sigaction.c deleted file mode 100644 index c01d3a1979..0000000000 --- a/sysdeps/mach/hurd/sigaction.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* If ACT is not NULL, change the action for SIG to *ACT. - If OACT is not NULL, put the old action for SIG in *OACT. */ -int -__sigaction (int sig, const struct sigaction *act, struct sigaction *oact) -{ - struct hurd_sigstate *ss; - struct sigaction a, old; - sigset_t pending; - - if (sig <= 0 || sig >= NSIG || - (act != NULL && act->sa_handler != SIG_DFL && - ((__sigmask (sig) & _SIG_CANT_MASK) || - act->sa_handler == SIG_ERR))) - { - errno = EINVAL; - return -1; - } - - /* Copy so we fault before taking locks. */ - if (act != NULL) - a = *act; - - ss = _hurd_self_sigstate (); - - __spin_lock (&ss->critical_section_lock); - __spin_lock (&ss->lock); - old = ss->actions[sig]; - if (act != NULL) - ss->actions[sig] = a; - - if (act != NULL && sig == SIGCHLD && - (a.sa_flags & SA_NOCLDSTOP) != (old.sa_flags & SA_NOCLDSTOP)) - { - __spin_unlock (&ss->lock); - - /* Inform the proc server whether or not it should send us SIGCHLD for - stopped children. We do this in a critical section so that no - SIGCHLD can arrive in the middle and be of indeterminate status. */ - __USEPORT (PROC, - __proc_mod_stopchild (port, !(a.sa_flags & SA_NOCLDSTOP))); - - __spin_lock (&ss->lock); - pending = ss->pending & ~ss->blocked; - } - else if (act != NULL && (a.sa_handler == SIG_IGN || a.sa_handler == SIG_DFL)) - /* We are changing to an action that might be to ignore SIG signals. - If SIG is blocked and pending and the new action is to ignore it, we - must remove it from the pending set now; if the action is changed - back and then SIG is unblocked, the signal pending now should not - arrive. So wake up the signal thread to check the new state and do - the right thing. */ - pending = ss->pending & __sigmask (sig); - else - pending = 0; - - __spin_unlock (&ss->lock); - __spin_unlock (&ss->critical_section_lock); - - if (pending) - __msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ()); - - if (oact != NULL) - *oact = old; - - return 0; -} -libc_hidden_def (__sigaction) -weak_alias (__sigaction, sigaction) diff --git a/sysdeps/mach/hurd/sigaltstack.c b/sysdeps/mach/hurd/sigaltstack.c deleted file mode 100644 index 4fba69e766..0000000000 --- a/sysdeps/mach/hurd/sigaltstack.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Run signals handlers on the stack specified by SS (if not NULL). - If OSS is not NULL, it is filled in with the old signal stack status. */ -int -__sigaltstack (const stack_t *argss, stack_t *oss) -{ - struct hurd_sigstate *s; - stack_t ss, old; - - /* Fault before taking any locks. */ - if (argss != NULL) - ss = *argss; - if (oss != NULL) - *(volatile stack_t *) oss = *oss; - - s = _hurd_self_sigstate (); - __spin_lock (&s->lock); - - if (argss != NULL && - (ss.ss_flags & SS_DISABLE) && (s->sigaltstack.ss_flags & SS_ONSTACK)) - { - /* Can't disable a stack that is in use. */ - __spin_unlock (&s->lock); - errno = EINVAL; - return -1; - } - - old = s->sigaltstack; - - if (argss != NULL) - s->sigaltstack = ss; - - __spin_unlock (&s->lock); - - if (oss != NULL) - *oss = old; - - return 0; -} -weak_alias (__sigaltstack, sigaltstack) diff --git a/sysdeps/mach/hurd/siglist.h b/sysdeps/mach/hurd/siglist.h deleted file mode 100644 index a87718c6d9..0000000000 --- a/sysdeps/mach/hurd/siglist.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file is included multiple times. */ - -#include_next /* Get the canonical list. */ - -#define OLD_SIGLIST_SIZE 33 /* For GLIBC_2.0 binary compatibility. */ diff --git a/sysdeps/mach/hurd/sigpending.c b/sysdeps/mach/hurd/sigpending.c deleted file mode 100644 index c5510239c8..0000000000 --- a/sysdeps/mach/hurd/sigpending.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -/* Store in SET all signals that are blocked and pending. */ -/* XXX should be __sigpending ? */ -int -sigpending (sigset_t *set) -{ - struct hurd_sigstate *ss; - sigset_t pending; - - if (set == NULL) - { - errno = EINVAL; - return -1; - } - - ss = _hurd_self_sigstate (); - __spin_lock (&ss->lock); - pending = ss->pending; - __spin_unlock (&ss->lock); - - *set = pending; - return 0; -} diff --git a/sysdeps/mach/hurd/sigprocmask.c b/sysdeps/mach/hurd/sigprocmask.c deleted file mode 100644 index a4ebe580ff..0000000000 --- a/sysdeps/mach/hurd/sigprocmask.c +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* If SET is not NULL, modify the current set of blocked signals - according to HOW, which may be SIG_BLOCK, SIG_UNBLOCK or SIG_SETMASK. - If OSET is not NULL, store the old set of blocked signals in *OSET. */ -int -__sigprocmask (int how, const sigset_t *set, sigset_t *oset) -{ - struct hurd_sigstate *ss; - sigset_t old, new; - sigset_t pending; - - if (set != NULL) - new = *set; - - ss = _hurd_self_sigstate (); - - __spin_lock (&ss->lock); - - old = ss->blocked; - - if (set != NULL) - { - switch (how) - { - case SIG_BLOCK: - __sigorset (&ss->blocked, &ss->blocked, &new); - break; - - case SIG_UNBLOCK: - ss->blocked &= ~new; - break; - - case SIG_SETMASK: - ss->blocked = new; - break; - - default: - __spin_unlock (&ss->lock); - errno = EINVAL; - return -1; - } - - ss->blocked &= ~_SIG_CANT_MASK; - } - - pending = ss->pending & ~ss->blocked; - - __spin_unlock (&ss->lock); - - if (oset != NULL) - *oset = old; - - if (pending) - /* Send a message to the signal thread so it - will wake up and check for pending signals. */ - __msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ()); - - return 0; -} - -weak_alias (__sigprocmask, sigprocmask) diff --git a/sysdeps/mach/hurd/sigstack.c b/sysdeps/mach/hurd/sigstack.c deleted file mode 100644 index 484efb627a..0000000000 --- a/sysdeps/mach/hurd/sigstack.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Run signals handlers on the stack specified by SS (if not NULL). - If OSS is not NULL, it is filled in with the old signal stack status. */ -int -sigstack (struct sigstack *ss, struct sigstack *oss) -{ - stack_t as, oas; - - as.ss_sp = ss->ss_sp; - as.ss_size = 0; - as.ss_flags = 0; - - if (__sigaltstack (&as, &oas) < 0) - return -1; - - if (oss != NULL) - { - oss->ss_sp = oas.ss_sp; - oss->ss_onstack = oas.ss_flags & SS_ONSTACK; - } - - return 0; -} diff --git a/sysdeps/mach/hurd/sigsuspend.c b/sysdeps/mach/hurd/sigsuspend.c deleted file mode 100644 index 4f5af1d302..0000000000 --- a/sysdeps/mach/hurd/sigsuspend.c +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Change the set of blocked signals to SET, - wait until a signal arrives, and restore the set of blocked signals. */ -int -__sigsuspend (const sigset_t *set) -{ - struct hurd_sigstate *ss; - sigset_t newmask, oldmask, pending; - mach_port_t wait; - mach_msg_header_t msg; - - if (set != NULL) - /* Crash before locking. */ - newmask = *set; - - /* Get a fresh port we will wait on. */ - wait = __mach_reply_port (); - - ss = _hurd_self_sigstate (); - - __spin_lock (&ss->lock); - - oldmask = ss->blocked; - if (set != NULL) - /* Change to the new blocked signal mask. */ - ss->blocked = newmask & ~_SIG_CANT_MASK; - - /* Notice if any pending signals just became unblocked. */ - pending = ss->pending & ~ss->blocked; - - /* Tell the signal thread to message us when a signal arrives. */ - ss->suspended = wait; - __spin_unlock (&ss->lock); - - if (pending) - /* Tell the signal thread to check for pending signals. */ - __msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ()); - - /* Wait for the signal thread's message. */ - __mach_msg (&msg, MACH_RCV_MSG, 0, sizeof (msg), wait, - MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); - __mach_port_destroy (__mach_task_self (), wait); - - __spin_lock (&ss->lock); - ss->blocked = oldmask; /* Restore the old mask. */ - pending = ss->pending & ~ss->blocked; /* Again check for pending signals. */ - __spin_unlock (&ss->lock); - - if (pending) - /* Tell the signal thread to check for pending signals. */ - __msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ()); - - /* We've been interrupted! And a good thing, too. - Otherwise we'd never return. - That's right; this function always returns an error. */ - errno = EINTR; - return -1; -} -libc_hidden_def (__sigsuspend) -strong_alias (__sigsuspend, sigsuspend_not_cancel) -weak_alias (__sigsuspend, sigsuspend) diff --git a/sysdeps/mach/hurd/sigwait.c b/sysdeps/mach/hurd/sigwait.c deleted file mode 100644 index c9fd8fce88..0000000000 --- a/sysdeps/mach/hurd/sigwait.c +++ /dev/null @@ -1,133 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Select any of pending signals from SET or wait for any to arrive. */ -int -__sigwait (const sigset_t *set, int *sig) -{ - struct hurd_sigstate *ss; - sigset_t mask, ready; - int signo = 0; - struct hurd_signal_preemptor preemptor; - jmp_buf buf; - mach_port_t wait; - mach_msg_header_t msg; - - sighandler_t - preempt_fun (struct hurd_signal_preemptor *pe, - struct hurd_sigstate *ss, - int *sigp, - struct hurd_signal_detail *detail) - { - if (signo) - /* We've already been run; don't interfere. */ - return SIG_ERR; - - signo = *sigp; - - /* Make sure this is all kosher */ - assert (__sigismember (&mask, signo)); - - /* Make sure this signal is unblocked */ - __sigdelset (&ss->blocked, signo); - - return pe->handler; - } - - void - handler (int sig) - { - assert (sig == signo); - longjmp (buf, 1); - } - - wait = __mach_reply_port (); - - if (set != NULL) - /* Crash before locking */ - mask = *set; - else - __sigemptyset (&mask); - - ss = _hurd_self_sigstate (); - __spin_lock (&ss->lock); - - /* See if one of these signals is currently pending. */ - __sigandset (&ready, &ss->pending, &mask); - if (! __sigisemptyset (&ready)) - { - for (signo = 1; signo < NSIG; signo++) - if (__sigismember (&ready, signo)) - { - __sigdelset (&ready, signo); - goto all_done; - } - /* Huh? Where'd it go? */ - abort (); - } - - /* Wait for one of them to show up. */ - - if (!setjmp (buf)) - { - /* Make the preemptor */ - preemptor.signals = mask; - preemptor.first = 0; - preemptor.last = -1; - preemptor.preemptor = preempt_fun; - preemptor.handler = handler; - - /* Install this preemptor */ - preemptor.next = ss->preemptors; - ss->preemptors = &preemptor; - - __spin_unlock (&ss->lock); - - /* Wait. */ - __mach_msg (&msg, MACH_RCV_MSG, 0, sizeof (msg), wait, - MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); - abort (); - } - else - { - assert (signo); - - __spin_lock (&ss->lock); - - /* Delete our preemptor. */ - assert (ss->preemptors == &preemptor); - ss->preemptors = preemptor.next; - } - - -all_done: - spin_unlock (&ss->lock); - - __mach_port_destroy (__mach_task_self (), wait); - *sig = signo; - return 0; -} - -libc_hidden_def (__sigwait) -weak_alias (__sigwait, sigwait) diff --git a/sysdeps/mach/hurd/socket.c b/sysdeps/mach/hurd/socket.c deleted file mode 100644 index 9412821d14..0000000000 --- a/sysdeps/mach/hurd/socket.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Create a new socket of type TYPE in domain DOMAIN, using - protocol PROTOCOL. If PROTOCOL is zero, one is chosen automatically. - Returns a file descriptor for the new socket, or -1 for errors. */ -int -__socket (int domain, int type, int protocol) -{ - error_t err; - socket_t sock, server; - - /* Find the socket server for DOMAIN. */ - server = _hurd_socket_server (domain, 0); - if (server == MACH_PORT_NULL) - return -1; - - err = __socket_create (server, type, protocol, &sock); - if (err == MACH_SEND_INVALID_DEST || err == MIG_SERVER_DIED - || err == MIG_BAD_ID || err == EOPNOTSUPP) - { - /* On the first use of the socket server during the operation, - allow for the old server port dying. */ - server = _hurd_socket_server (domain, 1); - if (server == MACH_PORT_NULL) - return -1; - err = __socket_create (server, type, protocol, &sock); - } - - /* These errors all mean that the server node doesn't support the - socket.defs protocol, which we'll take to mean that the protocol - isn't supported. */ - if (err == MACH_SEND_INVALID_DEST || err == MIG_SERVER_DIED - || err == MIG_BAD_ID || err == EOPNOTSUPP) - err = EAFNOSUPPORT; - - if (err) - return __hurd_fail (err); - - return _hurd_intern_fd (sock, O_IGNORE_CTTY, 1); -} - -libc_hidden_def (__socket) -weak_alias (__socket, socket) diff --git a/sysdeps/mach/hurd/socketpair.c b/sysdeps/mach/hurd/socketpair.c deleted file mode 100644 index f3cbf8c19b..0000000000 --- a/sysdeps/mach/hurd/socketpair.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include -#include -#include - -/* Create two new sockets, of type TYPE in domain DOMAIN and using - protocol PROTOCOL, which are connected to each other, and put file - descriptors for them in FDS[0] and FDS[1]. If PROTOCOL is zero, - one will be chosen automatically. Returns 0 on success, -1 for errors. */ -int -__socketpair (int domain, int type, int protocol, int fds[2]) -{ - error_t err; - socket_t server, sock1, sock2; - int d1, d2; - - if (fds == NULL) - return __hurd_fail (EINVAL); - - /* Find the domain's socket server. */ - server = _hurd_socket_server (domain, 0); - if (server == MACH_PORT_NULL) - return -1; - - /* Create two sockets and connect them together. */ - - err = __socket_create (server, type, protocol, &sock1); - if (err == MACH_SEND_INVALID_DEST || err == MIG_SERVER_DIED - || err == MIG_BAD_ID || err == EOPNOTSUPP) - { - /* On the first use of the socket server during the operation, - allow for the old server port dying. */ - server = _hurd_socket_server (domain, 1); - if (server == MACH_PORT_NULL) - return -1; - err = __socket_create (server, type, protocol, &sock1); - } - if (err) - return __hurd_fail (err); - if (err = __socket_create (server, type, protocol, &sock2)) - { - __mach_port_deallocate (__mach_task_self (), sock1); - return __hurd_fail (err); - } - if (err = __socket_connect2 (sock1, sock2)) - { - __mach_port_deallocate (__mach_task_self (), sock1); - __mach_port_deallocate (__mach_task_self (), sock2); - return __hurd_fail (err); - } - - /* Put the sockets into file descriptors. */ - - d1 = _hurd_intern_fd (sock1, O_IGNORE_CTTY, 1); - if (d1 < 0) - { - __mach_port_deallocate (__mach_task_self (), sock2); - return -1; - } - d2 = _hurd_intern_fd (sock2, O_IGNORE_CTTY, 1); - if (d2 < 0) - { - err = errno; - (void) close (d1); - return __hurd_fail (err); - } - - fds[0] = d1; - fds[1] = d2; - return 0; -} - -weak_alias (__socketpair, socketpair) diff --git a/sysdeps/mach/hurd/spawni.c b/sysdeps/mach/hurd/spawni.c deleted file mode 100644 index 74303839e4..0000000000 --- a/sysdeps/mach/hurd/spawni.c +++ /dev/null @@ -1,758 +0,0 @@ -/* spawn a new process running an executable. Hurd version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "spawn_int.h" - -/* Spawn a new process executing PATH with the attributes describes in *ATTRP. - Before running the process perform the actions described in FILE-ACTIONS. */ -int -__spawni (pid_t *pid, const char *file, - const posix_spawn_file_actions_t *file_actions, - const posix_spawnattr_t *attrp, - char *const argv[], char *const envp[], - int xflags) -{ - pid_t new_pid; - char *path, *p, *name; - size_t len; - size_t pathlen; - short int flags; - - /* The generic POSIX.1 implementation of posix_spawn uses fork and exec. - In traditional POSIX systems (Unix, Linux, etc), the only way to - create a new process is by fork, which also copies all the things from - the parent process that will be immediately wiped and replaced by the - exec. - - This Hurd implementation works by doing an exec on a fresh task, - without ever doing all the work of fork. The only work done by fork - that remains visible after an exec is registration with the proc - server, and the inheritance of various values and ports. All those - inherited values and ports are what get collected up and passed in the - file_exec RPC by an exec call. So we do the proc server registration - here, following the model of fork (see fork.c). We then collect up - the inherited values and ports from this (parent) process following - the model of exec (see hurd/hurdexec.c), modify or replace each value - that fork would (plus the specific changes demanded by ATTRP and - FILE_ACTIONS), and make the file_exec RPC on the requested executable - file with the child process's task port rather than our own. This - should be indistinguishable from the fork + exec implementation, - except that all errors will be detected here (in the parent process) - and return proper errno codes rather than the child dying with 127. - - XXX The one exception to this supposed indistinguishableness is that - when posix_spawn_file_actions_addopen has been used, the parent - process can do various filesystem RPCs on the child's behalf, rather - than the child process doing it. If these block due to a broken or - malicious filesystem server or just a blocked network fs or a serial - port waiting for carrier detect (!!), the parent's posix_spawn call - can block arbitrarily rather than just the child blocking. Possible - solutions include: - * punt to plain fork + exec implementation if addopen was used - ** easy to do - ** gives up all benefits of this implementation in that case - * if addopen was used, don't do any file actions at all here; - instead, exec an installed helper program e.g.: - /libexec/spawn-helper close 3 dup2 1 2 open 0 /file 0x123 0666 exec /bin/foo foo a1 a2 - ** extra exec might be more or less overhead than fork - * could do some weird half-fork thing where the child would inherit - our vm and run some code here, but not do the full work of fork - - XXX Actually, the parent opens the executable file on behalf of - the child, and that has all the same issues. - - I am favoring the half-fork solution. That is, we do task_create with - vm inheritance, and we setjmp/longjmp the child like fork does. But - rather than all the fork hair, the parent just packs up init/dtable - ports and does a single IPC to a receive right inserted in the child. */ - - error_t err; - task_t task; - file_t execfile; - process_t proc; - auth_t auth; - int ints[INIT_INT_MAX]; - file_t *dtable; - unsigned int dtablesize, orig_dtablesize, i; - struct hurd_port **dtable_cells; - char *dtable_cloexec; - struct hurd_userlink *ulink_dtable = NULL; - struct hurd_sigstate *ss; - - /* For POSIX_SPAWN_RESETIDS, this reauthenticates our root/current - directory ports with the new AUTH port. */ - file_t rcrdir = MACH_PORT_NULL, rcwdir = MACH_PORT_NULL; - error_t reauthenticate (int which, file_t *result) - { - error_t err; - mach_port_t ref; - if (*result != MACH_PORT_NULL) - return 0; - ref = __mach_reply_port (); - err = HURD_PORT_USE - (&_hurd_ports[which], - ({ - err = __io_reauthenticate (port, ref, MACH_MSG_TYPE_MAKE_SEND); - if (!err) - err = __auth_user_authenticate (auth, - ref, MACH_MSG_TYPE_MAKE_SEND, - result); - err; - })); - __mach_port_destroy (__mach_task_self (), ref); - return err; - } - - /* Reauthenticate one of our file descriptors for the child. A null - element of DTABLE_CELLS indicates a descriptor that was already - reauthenticated, or was newly opened on behalf of the child. */ - error_t reauthenticate_fd (int fd) - { - if (dtable_cells[fd] != NULL) - { - file_t newfile; - mach_port_t ref = __mach_reply_port (); - error_t err = __io_reauthenticate (dtable[fd], - ref, MACH_MSG_TYPE_MAKE_SEND); - if (!err) - err = __auth_user_authenticate (auth, - ref, MACH_MSG_TYPE_MAKE_SEND, - &newfile); - __mach_port_destroy (__mach_task_self (), ref); - if (err) - return err; - _hurd_port_free (dtable_cells[fd], &ulink_dtable[fd], dtable[fd]); - dtable_cells[fd] = NULL; - dtable[fd] = newfile; - } - return 0; - } - - /* These callbacks are for looking up file names on behalf of the child. */ - error_t child_init_port (int which, error_t (*operate) (mach_port_t)) - { - if (flags & POSIX_SPAWN_RESETIDS) - switch (which) - { - case INIT_PORT_AUTH: - return (*operate) (auth); - case INIT_PORT_CRDIR: - return (reauthenticate (INIT_PORT_CRDIR, &rcrdir) - ?: (*operate) (rcrdir)); - case INIT_PORT_CWDIR: - return (reauthenticate (INIT_PORT_CWDIR, &rcwdir) - ?: (*operate) (rcwdir)); - } - assert (which != INIT_PORT_PROC); - return _hurd_ports_use (which, operate); - } - file_t child_fd (int fd) - { - if ((unsigned int) fd < dtablesize && dtable[fd] != MACH_PORT_NULL) - { - if (flags & POSIX_SPAWN_RESETIDS) - { - /* Reauthenticate this descriptor right now, - since it is going to be used on behalf of the child. */ - errno = reauthenticate_fd (fd); - if (errno) - return MACH_PORT_NULL; - } - __mach_port_mod_refs (__mach_task_self (), dtable[fd], - MACH_PORT_RIGHT_SEND, +1); - return dtable[fd]; - } - errno = EBADF; - return MACH_PORT_NULL; - } - inline error_t child_lookup (const char *file, int oflag, mode_t mode, - file_t *result) - { - return __hurd_file_name_lookup (&child_init_port, &child_fd, 0, - file, oflag, mode, result); - } - - - /* Do this once. */ - flags = attrp == NULL ? 0 : attrp->__flags; - - /* Generate the new process. We create a task that does not inherit our - memory, and then register it as our child like fork does. See fork.c - for comments about the sequencing of these proc operations. */ - - err = __task_create (__mach_task_self (), -#ifdef KERN_INVALID_LEDGER - NULL, 0, /* OSF Mach */ -#endif - 0, &task); - if (err) - return __hurd_fail (err); - // From here down we must deallocate TASK and PROC before returning. - proc = MACH_PORT_NULL; - auth = MACH_PORT_NULL; - err = __USEPORT (PROC, __proc_task2pid (port, task, &new_pid)); - if (!err) - err = __USEPORT (PROC, __proc_task2proc (port, task, &proc)); - if (!err) - err = __USEPORT (PROC, __proc_child (port, task)); - if (err) - goto out; - - /* Load up the ints to give the new program. */ - memset (ints, 0, sizeof ints); - ints[INIT_UMASK] = _hurd_umask; - ints[INIT_TRACEMASK] = _hurdsig_traced; - - ss = _hurd_self_sigstate (); - - assert (! __spin_lock_locked (&ss->critical_section_lock)); - __spin_lock (&ss->critical_section_lock); - - __spin_lock (&ss->lock); - ints[INIT_SIGMASK] = ss->blocked; - ints[INIT_SIGPENDING] = ss->pending; - ints[INIT_SIGIGN] = 0; - /* Unless we were asked to reset all handlers to SIG_DFL, - pass down the set of signals that were set to SIG_IGN. */ - if ((flags & POSIX_SPAWN_SETSIGDEF) == 0) - for (i = 1; i < NSIG; ++i) - if (ss->actions[i].sa_handler == SIG_IGN) - ints[INIT_SIGIGN] |= __sigmask (i); - - /* We hold the sigstate lock until the exec has failed so that no signal - can arrive between when we pack the blocked and ignored signals, and - when the exec actually happens. A signal handler could change what - signals are blocked and ignored. Either the change will be reflected - in the exec, or the signal will never be delivered. Setting the - critical section flag avoids anything we call trying to acquire the - sigstate lock. */ - - __spin_unlock (&ss->lock); - - /* Set signal mask. */ - if ((flags & POSIX_SPAWN_SETSIGMASK) != 0) - ints[INIT_SIGMASK] = attrp->__ss; - -#ifdef _POSIX_PRIORITY_SCHEDULING - /* Set the scheduling algorithm and parameters. */ -# error implement me - if ((flags & (POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER)) - == POSIX_SPAWN_SETSCHEDPARAM) - { - if (__sched_setparam (0, &attrp->__sp) == -1) - _exit (SPAWN_ERROR); - } - else if ((flags & POSIX_SPAWN_SETSCHEDULER) != 0) - { - if (__sched_setscheduler (0, attrp->__policy, - (flags & POSIX_SPAWN_SETSCHEDPARAM) != 0 - ? &attrp->__sp : NULL) == -1) - _exit (SPAWN_ERROR); - } -#endif - - if (!err && (flags & POSIX_SPAWN_SETSID) != 0) - err = __proc_setsid (proc); - - /* Set the process group ID. */ - if (!err && (flags & POSIX_SPAWN_SETPGROUP) != 0) - err = __proc_setpgrp (proc, new_pid, attrp->__pgrp); - - /* Set the effective user and group IDs. */ - if (!err && (flags & POSIX_SPAWN_RESETIDS) != 0) - { - /* We need a different auth port for the child. */ - - __mutex_lock (&_hurd_id.lock); - err = _hurd_check_ids (); /* Get _hurd_id up to date. */ - if (!err && _hurd_id.rid_auth == MACH_PORT_NULL) - { - /* Set up _hurd_id.rid_auth. This is a special auth server port - which uses the real uid and gid (the first aux uid and gid) as - the only effective uid and gid. */ - - if (_hurd_id.aux.nuids < 1 || _hurd_id.aux.ngids < 1) - /* We do not have a real UID and GID. Lose, lose, lose! */ - err = EGRATUITOUS; - - /* Create a new auth port using our real UID and GID (the first - auxiliary UID and GID) as the only effective IDs. */ - if (!err) - err = __USEPORT (AUTH, - __auth_makeauth (port, - NULL, MACH_MSG_TYPE_COPY_SEND, 0, - _hurd_id.aux.uids, 1, - _hurd_id.aux.uids, - _hurd_id.aux.nuids, - _hurd_id.aux.gids, 1, - _hurd_id.aux.gids, - _hurd_id.aux.ngids, - &_hurd_id.rid_auth)); - } - if (!err) - { - /* Use the real-ID auth port in place of the normal one. */ - assert (_hurd_id.rid_auth != MACH_PORT_NULL); - auth = _hurd_id.rid_auth; - __mach_port_mod_refs (__mach_task_self (), auth, - MACH_PORT_RIGHT_SEND, +1); - } - __mutex_unlock (&_hurd_id.lock); - } - else - /* Copy our existing auth port. */ - err = __USEPORT (AUTH, __mach_port_mod_refs (__mach_task_self (), - (auth = port), - MACH_PORT_RIGHT_SEND, +1)); - - if (err) - goto out; - - /* Pack up the descriptor table to give the new program. - These descriptors will need to be reauthenticated below - if POSIX_SPAWN_RESETIDS is set. */ - __mutex_lock (&_hurd_dtable_lock); - dtablesize = _hurd_dtablesize; - orig_dtablesize = _hurd_dtablesize; - dtable = __alloca (dtablesize * sizeof (dtable[0])); - ulink_dtable = __alloca (dtablesize * sizeof (ulink_dtable[0])); - dtable_cells = __alloca (dtablesize * sizeof (dtable_cells[0])); - dtable_cloexec = __alloca (dtablesize); - for (i = 0; i < dtablesize; ++i) - { - struct hurd_fd *const d = _hurd_dtable[i]; - if (d == NULL) - { - dtable[i] = MACH_PORT_NULL; - dtable_cells[i] = NULL; - continue; - } - /* Note that this might return MACH_PORT_NULL. */ - dtable[i] = _hurd_port_get (&d->port, &ulink_dtable[i]); - dtable_cells[i] = &d->port; - dtable_cloexec[i] = (d->flags & FD_CLOEXEC) != 0; - } - __mutex_unlock (&_hurd_dtable_lock); - - /* Safe to let signals happen now. */ - _hurd_critical_section_unlock (ss); - - /* Execute the file actions. */ - if (file_actions != NULL) - for (i = 0; i < file_actions->__used; ++i) - { - /* Close a file descriptor in the child. */ - error_t do_close (int fd) - { - if ((unsigned int)fd < dtablesize - && dtable[fd] != MACH_PORT_NULL) - { - if (dtable_cells[fd] == NULL) - __mach_port_deallocate (__mach_task_self (), dtable[fd]); - else - { - _hurd_port_free (dtable_cells[fd], - &ulink_dtable[fd], dtable[fd]); - } - dtable_cells[fd] = NULL; - dtable[fd] = MACH_PORT_NULL; - return 0; - } - return EBADF; - } - - /* Make sure the dtable can hold NEWFD. */ -#define EXPAND_DTABLE(newfd) \ - ({ \ - if ((unsigned int)newfd >= dtablesize \ - && newfd < _hurd_rlimits[RLIMIT_OFILE].rlim_cur) \ - { \ - /* We need to expand the dtable for the child. */ \ - NEW_TABLE (dtable, newfd); \ - NEW_TABLE (ulink_dtable, newfd); \ - NEW_TABLE (dtable_cells, newfd); \ - dtablesize = newfd + 1; \ - } \ - ((unsigned int)newfd < dtablesize ? 0 : EMFILE); \ - }) -#define NEW_TABLE(x, newfd) \ - do { __typeof (x) new_##x = __alloca ((newfd + 1) * sizeof (x[0])); \ - memcpy (new_##x, x, dtablesize * sizeof (x[0])); \ - memset (&new_##x[dtablesize], 0, (newfd + 1 - dtablesize) * sizeof (x[0])); \ - x = new_##x; } while (0) - - struct __spawn_action *action = &file_actions->__actions[i]; - - switch (action->tag) - { - case spawn_do_close: - err = do_close (action->action.close_action.fd); - break; - - case spawn_do_dup2: - if ((unsigned int)action->action.dup2_action.fd < dtablesize - && dtable[action->action.dup2_action.fd] != MACH_PORT_NULL) - { - const int fd = action->action.dup2_action.fd; - const int newfd = action->action.dup2_action.newfd; - // dup2 always clears any old FD_CLOEXEC flag on the new fd. - if (newfd < orig_dtablesize) - dtable_cloexec[newfd] = 0; - if (fd == newfd) - // Same is same as same was. - break; - err = EXPAND_DTABLE (newfd); - if (!err) - { - /* Close the old NEWFD and replace it with FD's - contents, which can be either an original - descriptor (DTABLE_CELLS[FD] != 0) or a new - right that we acquired in this function. */ - do_close (newfd); - dtable_cells[newfd] = dtable_cells[fd]; - if (dtable_cells[newfd] != NULL) - dtable[newfd] = _hurd_port_get (dtable_cells[newfd], - &ulink_dtable[newfd]); - else - { - dtable[newfd] = dtable[fd]; - err = __mach_port_mod_refs (__mach_task_self (), - dtable[fd], - MACH_PORT_RIGHT_SEND, +1); - } - } - } - else - // The old FD specified was bogus. - err = EBADF; - break; - - case spawn_do_open: - /* Open a file on behalf of the child. - - XXX note that this can subject the parent to arbitrary - delays waiting for the files to open. I don't know what the - spec says about this. If it's not permissible, then this - whole forkless implementation is probably untenable. */ - { - const int fd = action->action.open_action.fd; - - do_close (fd); - if (fd < orig_dtablesize) - dtable_cloexec[fd] = 0; - err = EXPAND_DTABLE (fd); - if (err) - break; - - err = child_lookup (action->action.open_action.path, - action->action.open_action.oflag, - action->action.open_action.mode, - &dtable[fd]); - dtable_cells[fd] = NULL; - break; - } - } - - if (err) - goto out; - } - - /* Only now can we perform FD_CLOEXEC. We had to leave the descriptors - unmolested for the file actions to use. Note that the DTABLE_CLOEXEC - array is never expanded by file actions, so it might now have fewer - than DTABLESIZE elements. */ - for (i = 0; i < orig_dtablesize; ++i) - if (dtable[i] != MACH_PORT_NULL && dtable_cloexec[i]) - { - assert (dtable_cells[i] != NULL); - _hurd_port_free (dtable_cells[i], &ulink_dtable[i], dtable[i]); - dtable[i] = MACH_PORT_NULL; - } - - /* Prune trailing null ports from the descriptor table. */ - while (dtablesize > 0 && dtable[dtablesize - 1] == MACH_PORT_NULL) - --dtablesize; - - if (flags & POSIX_SPAWN_RESETIDS) - { - /* Reauthenticate all the child's ports with its new auth handle. */ - - mach_port_t ref; - process_t newproc; - - /* Reauthenticate with the proc server. */ - ref = __mach_reply_port (); - err = __proc_reauthenticate (proc, ref, MACH_MSG_TYPE_MAKE_SEND); - if (!err) - err = __auth_user_authenticate (auth, - ref, MACH_MSG_TYPE_MAKE_SEND, - &newproc); - __mach_port_destroy (__mach_task_self (), ref); - if (!err) - { - __mach_port_deallocate (__mach_task_self (), proc); - proc = newproc; - } - - if (!err) - err = reauthenticate (INIT_PORT_CRDIR, &rcrdir); - if (!err) - err = reauthenticate (INIT_PORT_CWDIR, &rcwdir); - - /* We must reauthenticate all the fds except those that came from - `spawn_do_open' file actions, which were opened using the child's - auth port to begin with. */ - for (i = 0; !err && i < dtablesize; ++i) - err = reauthenticate_fd (i); - } - if (err) - goto out; - - /* Now we are ready to open the executable file using the child's ports. - We do this after performing all the file actions so the order of - events is the same as for a fork, exec sequence. This affects things - like the meaning of a /dev/fd file name, as well as which error - conditions are diagnosed first and what side effects (file creation, - etc) can be observed before what errors. */ - - if ((xflags & SPAWN_XFLAGS_USE_PATH) == 0 || strchr (file, '/') != NULL) - /* The FILE parameter is actually a path. */ - err = child_lookup (file, O_EXEC, 0, &execfile); - else - { - /* We have to search for FILE on the path. */ - path = getenv ("PATH"); - if (path == NULL) - { - /* There is no `PATH' in the environment. - The default search path is the current directory - followed by the path `confstr' returns for `_CS_PATH'. */ - len = confstr (_CS_PATH, (char *) NULL, 0); - path = (char *) __alloca (1 + len); - path[0] = ':'; - (void) confstr (_CS_PATH, path + 1, len); - } - - len = strlen (file) + 1; - pathlen = strlen (path); - name = __alloca (pathlen + len + 1); - /* Copy the file name at the top. */ - name = (char *) memcpy (name + pathlen + 1, file, len); - /* And add the slash. */ - *--name = '/'; - - p = path; - do - { - char *startp; - - path = p; - p = __strchrnul (path, ':'); - - if (p == path) - /* Two adjacent colons, or a colon at the beginning or the end - of `PATH' means to search the current directory. */ - startp = name + 1; - else - startp = (char *) memcpy (name - (p - path), path, p - path); - - /* Try to open this file name. */ - err = child_lookup (startp, O_EXEC, 0, &execfile); - switch (err) - { - case EACCES: - case ENOENT: - case ESTALE: - case ENOTDIR: - /* Those errors indicate the file is missing or not executable - by us, in which case we want to just try the next path - directory. */ - continue; - - case 0: /* Success! */ - default: - /* Some other error means we found an executable file, but - something went wrong executing it; return the error to our - caller. */ - break; - } - - // We only get here when we are done looking for the file. - break; - } - while (*p++ != '\0'); - } - if (err) - goto out; - - /* Almost there! */ - { - mach_port_t ports[_hurd_nports]; - struct hurd_userlink ulink_ports[_hurd_nports]; - char *args = NULL, *env = NULL; - size_t argslen = 0, envlen = 0; - - inline error_t exec (file_t file) - { - return __file_exec (file, task, - (__sigismember (&_hurdsig_traced, SIGKILL) - ? EXEC_SIGTRAP : 0), - args, argslen, env, envlen, - dtable, MACH_MSG_TYPE_COPY_SEND, dtablesize, - ports, MACH_MSG_TYPE_COPY_SEND, _hurd_nports, - ints, INIT_INT_MAX, - NULL, 0, NULL, 0); - } - - /* Now we are out of things that can fail before the file_exec RPC, - for which everything else must be prepared. The only thing left - to do is packing up the argument and environment strings, - and the array of init ports. */ - - if (argv != NULL) - err = __argz_create (argv, &args, &argslen); - if (!err && envp != NULL) - err = __argz_create (envp, &env, &envlen); - - /* Load up the ports to give to the new program. - Note the loop/switch below must parallel exactly to release refs. */ - for (i = 0; i < _hurd_nports; ++i) - { - switch (i) - { - case INIT_PORT_AUTH: - ports[i] = auth; - continue; - case INIT_PORT_PROC: - ports[i] = proc; - continue; - case INIT_PORT_CRDIR: - if (flags & POSIX_SPAWN_RESETIDS) - { - ports[i] = rcrdir; - continue; - } - break; - case INIT_PORT_CWDIR: - if (flags & POSIX_SPAWN_RESETIDS) - { - ports[i] = rcwdir; - continue; - } - break; - } - ports[i] = _hurd_port_get (&_hurd_ports[i], &ulink_ports[i]); - } - - /* Finally, try executing the file we opened. */ - if (!err) - err = exec (execfile); - __mach_port_deallocate (__mach_task_self (), execfile); - - if (err == ENOEXEC) - { - /* The file is accessible but it is not an executable file. - Invoke the shell to interpret it as a script. */ - err = __argz_insert (&args, &argslen, args, _PATH_BSHELL); - if (!err) - err = child_lookup (_PATH_BSHELL, O_EXEC, 0, &execfile); - if (!err) - { - err = exec (execfile); - __mach_port_deallocate (__mach_task_self (), execfile); - } - } - - /* Release the references just packed up in PORTS. - This switch must always parallel the one above that fills PORTS. */ - for (i = 0; i < _hurd_nports; ++i) - { - switch (i) - { - case INIT_PORT_AUTH: - case INIT_PORT_PROC: - continue; - case INIT_PORT_CRDIR: - if (flags & POSIX_SPAWN_RESETIDS) - continue; - break; - case INIT_PORT_CWDIR: - if (flags & POSIX_SPAWN_RESETIDS) - continue; - break; - } - _hurd_port_free (&_hurd_ports[i], &ulink_ports[i], ports[i]); - } - - free (args); - free (env); - } - - /* We did it! We have a child! */ - if (pid != NULL) - *pid = new_pid; - - out: - /* Clean up all the references we are now holding. */ - - if (task != MACH_PORT_NULL) - { - if (err) - /* We failed after creating the task, so kill it. */ - __task_terminate (task); - __mach_port_deallocate (__mach_task_self (), task); - } - __mach_port_deallocate (__mach_task_self (), auth); - __mach_port_deallocate (__mach_task_self (), proc); - if (rcrdir != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), rcrdir); - if (rcwdir != MACH_PORT_NULL) - __mach_port_deallocate (__mach_task_self (), rcwdir); - - if (ulink_dtable) - /* Release references to the file descriptor ports. */ - for (i = 0; i < dtablesize; ++i) - if (dtable[i] != MACH_PORT_NULL) - { - if (dtable_cells[i] == NULL) - __mach_port_deallocate (__mach_task_self (), dtable[i]); - else - _hurd_port_free (dtable_cells[i], &ulink_dtable[i], dtable[i]); - } - - if (err) - /* This hack canonicalizes the error code that we return. */ - err = (__hurd_fail (err), errno); - - return err; -} diff --git a/sysdeps/mach/hurd/statfs.c b/sysdeps/mach/hurd/statfs.c deleted file mode 100644 index 1fa909c756..0000000000 --- a/sysdeps/mach/hurd/statfs.c +++ /dev/null @@ -1,31 +0,0 @@ -/* statfs -- Return information about the filesystem on which FILE resides. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "statfsconv.c" - -/* Return information about the filesystem on which FILE resides. */ -int -__statfs (const char *file, struct statfs *buf) -{ - struct statfs64 buf64; - return __statfs64 (file, &buf64) ?: statfs64_conv (buf, &buf64); -} -libc_hidden_def (__statfs) -weak_alias (__statfs, statfs) diff --git a/sysdeps/mach/hurd/statfs64.c b/sysdeps/mach/hurd/statfs64.c deleted file mode 100644 index 9026ca97bf..0000000000 --- a/sysdeps/mach/hurd/statfs64.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Return information about the filesystem on which FILE resides. */ -int -__statfs64 (const char *file, struct statfs64 *buf) -{ - error_t err; - file_t port; - - port = __file_name_lookup (file, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - err = __file_statfs (port, buf); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err); - return 0; -} -weak_alias (__statfs64, statfs64) diff --git a/sysdeps/mach/hurd/statfsconv.c b/sysdeps/mach/hurd/statfsconv.c deleted file mode 100644 index 2163b5a932..0000000000 --- a/sysdeps/mach/hurd/statfsconv.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Convert between `struct statfs' format, and `struct statfs64' format. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -static inline int -statfs64_conv (struct statfs *buf, const struct statfs64 *buf64) -{ -# define DO(memb) \ - buf->memb = buf64->memb; \ - if (sizeof buf->memb != sizeof buf64->memb && buf->memb != buf64->memb) \ - { \ - __set_errno (EOVERFLOW); \ - return -1; \ - } - - DO (f_type); - DO (f_bsize); - DO (f_blocks); - DO (f_bfree); - DO (f_bavail); - DO (f_files); - DO (f_fsid); - DO (f_namelen); - DO (f_favail); - DO (f_frsize); - DO (f_flag); - -# undef DO - - return 0; -} diff --git a/sysdeps/mach/hurd/statvfs.c b/sysdeps/mach/hurd/statvfs.c deleted file mode 100644 index 8844e873c8..0000000000 --- a/sysdeps/mach/hurd/statvfs.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -statvfs (const char *file, struct statvfs *buf) -{ - /* `struct statvfs' is in fact identical to `struct statfs' so we - can simply call statfs. */ - return __statfs (file, (struct statfs *)buf); -} -libc_hidden_def (statvfs) diff --git a/sysdeps/mach/hurd/statvfs64.c b/sysdeps/mach/hurd/statvfs64.c deleted file mode 100644 index 179ad643ba..0000000000 --- a/sysdeps/mach/hurd/statvfs64.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -statvfs64 (const char *file, struct statvfs64 *buf) -{ - /* `struct statvfs64' is in fact identical to `struct statfs64' so - we can simply call statfs64. */ - return __statfs64 (file, (struct statfs64 *)buf); -} diff --git a/sysdeps/mach/hurd/symlink.c b/sysdeps/mach/hurd/symlink.c deleted file mode 100644 index d5c768b89b..0000000000 --- a/sysdeps/mach/hurd/symlink.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Make a link to FROM called TO. */ -int -__symlink (const char *from, const char *to) -{ - error_t err; - file_t dir, node; - char *name; - const size_t len = strlen (from) + 1; - char buf[sizeof (_HURD_SYMLINK) + len]; - - /* A symlink is a file whose translator is "/hurd/symlink\0target\0". */ - - memcpy (buf, _HURD_SYMLINK, sizeof (_HURD_SYMLINK)); - memcpy (&buf[sizeof (_HURD_SYMLINK)], from, len); - - dir = __file_name_split (to, &name); - if (dir == MACH_PORT_NULL) - return -1; - - /* Create a new, unlinked node in the target directory. */ - err = __dir_mkfile (dir, O_WRITE, 0777 & ~_hurd_umask, &node); - - if (! err) - { - /* Set the node's translator to make it a symlink. */ - err = __file_set_translator (node, - FS_TRANS_EXCL|FS_TRANS_SET, - FS_TRANS_EXCL|FS_TRANS_SET, 0, - buf, sizeof (_HURD_SYMLINK) + len, - MACH_PORT_NULL, MACH_MSG_TYPE_COPY_SEND); - - if (! err) - /* Link the node, now a valid symlink, into the target directory. */ - err = __dir_link (dir, node, name, 1); - - __mach_port_deallocate (__mach_task_self (), node); - } - - __mach_port_deallocate (__mach_task_self (), dir); - - if (err) - return __hurd_fail (err); - return 0; -} - -weak_alias (__symlink, symlink) diff --git a/sysdeps/mach/hurd/symlinkat.c b/sysdeps/mach/hurd/symlinkat.c deleted file mode 100644 index 19463f2dcd..0000000000 --- a/sysdeps/mach/hurd/symlinkat.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Create a symbolic link named relative to an open directory. Hurd version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -/* Make a link to FROM called TO relative to FD. */ -int -symlinkat (const char *from, int fd, const char *to) -{ - error_t err; - file_t dir, node; - char *name; - const size_t len = strlen (from) + 1; - char buf[sizeof (_HURD_SYMLINK) + len]; - - /* A symlink is a file whose translator is "/hurd/symlink\0target\0". */ - - memcpy (buf, _HURD_SYMLINK, sizeof (_HURD_SYMLINK)); - memcpy (&buf[sizeof (_HURD_SYMLINK)], from, len); - - dir = __file_name_split_at (fd, to, &name); - if (dir == MACH_PORT_NULL) - return -1; - - /* Create a new, unlinked node in the target directory. */ - err = __dir_mkfile (dir, O_WRITE, 0777 & ~_hurd_umask, &node); - - if (! err) - { - /* Set the node's translator to make it a symlink. */ - err = __file_set_translator (node, - FS_TRANS_EXCL|FS_TRANS_SET, - FS_TRANS_EXCL|FS_TRANS_SET, 0, - buf, sizeof (_HURD_SYMLINK) + len, - MACH_PORT_NULL, MACH_MSG_TYPE_COPY_SEND); - - if (! err) - /* Link the node, now a valid symlink, into the target directory. */ - err = __dir_link (dir, node, name, 1); - - __mach_port_deallocate (__mach_task_self (), node); - } - - __mach_port_deallocate (__mach_task_self (), dir); - - if (err) - return __hurd_fail (err); - return 0; -} diff --git a/sysdeps/mach/hurd/sync.c b/sysdeps/mach/hurd/sync.c deleted file mode 100644 index ce662446a3..0000000000 --- a/sysdeps/mach/hurd/sync.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Make all changes done to all files actually appear on disk. */ -void -sync (void) -{ - /* This is not actually synchronous; we don't wait. */ - error_t err = __USEPORT (CRDIR, __file_syncfs (port, 0, 1)); - if (err) - (void) __hurd_fail (err); -} diff --git a/sysdeps/mach/hurd/syncfs.c b/sysdeps/mach/hurd/syncfs.c deleted file mode 100644 index 82ad09a1c4..0000000000 --- a/sysdeps/mach/hurd/syncfs.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Make all changes done to all files on the file system associated - with FD actually appear on disk. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -syncfs (int fd) -{ - error_t err = HURD_DPORT_USE (fd, __file_syncfs (port, 1, 0)); - if (err) - return __hurd_dfail (fd, err); - return 0; -} diff --git a/sysdeps/mach/hurd/sysconf.c b/sysdeps/mach/hurd/sysconf.c deleted file mode 100644 index bc7fdd4b77..0000000000 --- a/sysdeps/mach/hurd/sysconf.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Return values of system parameters. Hurd version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include - -#define SYMLOOP_MAX (__eloop_threshold ()) - -#include diff --git a/sysdeps/mach/hurd/telldir.c b/sysdeps/mach/hurd/telldir.c deleted file mode 100644 index 47a52c3d9a..0000000000 --- a/sysdeps/mach/hurd/telldir.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include "dirstream.h" - -/* Return the current position of DIRP. */ -/* XXX should be __telldir ? */ -long int -telldir (DIR *dirp) -{ - return dirp->__entry_ptr; -} diff --git a/sysdeps/mach/hurd/times.c b/sysdeps/mach/hurd/times.c deleted file mode 100644 index 10ba2f7cb7..0000000000 --- a/sysdeps/mach/hurd/times.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Return CPU and real time used by process and its children. Hurd version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static inline clock_t -clock_from_time_value (const time_value_t *t) -{ - return t->seconds * 1000000 + t->microseconds; -} - -/* Store the CPU time used by this process and all its - dead children (and their dead children) in BUFFER. - Return the elapsed real time, or (clock_t) -1 for errors. - All times are in CLK_TCKths of a second. */ -clock_t -__times (struct tms *tms) -{ - struct task_basic_info bi; - struct task_thread_times_info tti; - mach_msg_type_number_t count; - union { time_value_t tvt; struct timeval tv; } now; - error_t err; - - count = TASK_BASIC_INFO_COUNT; - err = __task_info (__mach_task_self (), TASK_BASIC_INFO, - (task_info_t) &bi, &count); - if (err) - return __hurd_fail (err); - - count = TASK_THREAD_TIMES_INFO_COUNT; - err = __task_info (__mach_task_self (), TASK_THREAD_TIMES_INFO, - (task_info_t) &tti, &count); - if (err) - return __hurd_fail (err); - - tms->tms_utime = (clock_from_time_value (&bi.user_time) - + clock_from_time_value (&tti.user_time)); - tms->tms_stime = (clock_from_time_value (&bi.system_time) - + clock_from_time_value (&tti.system_time)); - - /* XXX This can't be implemented until getrusage(RUSAGE_CHILDREN) can be. */ - tms->tms_cutime = tms->tms_cstime = 0; - - if (__gettimeofday (&now.tv, NULL) < 0) - return -1; - - return (clock_from_time_value (&now.tvt) - - clock_from_time_value (&bi.creation_time)); -} -weak_alias (__times, times) diff --git a/sysdeps/mach/hurd/tls.h b/sysdeps/mach/hurd/tls.h deleted file mode 100644 index 5e68739655..0000000000 --- a/sysdeps/mach/hurd/tls.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Definitions for thread-local data handling. Hurd version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TLS_H -#define _TLS_H - -#ifndef __ASSEMBLER__ - -# include -# include -# include -# include -# include -# include - - -/* This is the size of the initial TCB. */ -# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t) - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE TLS_INIT_TCB_SIZE /* XXX */ - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN TLS_INIT_TCB_ALIGN /* XXX */ - - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(descr, dtvp) \ - ((tcbhead_t *) (descr))->dtv = (dtvp) + 1 - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(descr) \ - (((tcbhead_t *) (descr))->dtv) - -#endif /* !ASSEMBLER */ - - -#endif /* tls.h */ diff --git a/sysdeps/mach/hurd/tmpfile.c b/sysdeps/mach/hurd/tmpfile.c deleted file mode 100644 index 8bcfb81a10..0000000000 --- a/sysdeps/mach/hurd/tmpfile.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Open a stdio stream on an anonymous temporary file. Hurd version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -/* This returns a new stream opened on a temporary file (generated - by tmpnam). The file is opened with mode "w+b" (binary read/write). - If we couldn't generate a unique filename or the file couldn't - be opened, NULL is returned. */ -FILE * -__tmpfile (void) -{ - error_t err; - file_t file; - int fd; - FILE *f; - - /* Get a port to the directory that will contain the file. */ - const char *dirname = __libc_secure_getenv ("TMPDIR") ?: P_tmpdir; - file_t dir = __file_name_lookup (dirname, 0, 0); - if (dir == MACH_PORT_NULL) - return NULL; - - /* Create an unnamed file in the temporary directory. */ - err = __dir_mkfile (dir, O_RDWR, S_IRUSR | S_IWUSR, &file); - __mach_port_deallocate (__mach_task_self (), dir); - if (err) - return __hurd_fail (err), NULL; - - /* Get a file descriptor for that port. POSIX.1 requires that streams - returned by tmpfile allocate file descriptors as fopen would. */ - fd = _hurd_intern_fd (file, O_RDWR, 1); /* dealloc on error */ - if (fd < 0) - return NULL; - - /* Open a stream on the unnamed file. - It will cease to exist when this stream is closed. */ - if ((f = _IO_fdopen (fd, "w+b")) == NULL) - __close (fd); - - return f; -} - -#include -versioned_symbol (libc, __tmpfile, tmpfile, GLIBC_2_1); - -weak_alias (__tmpfile, tmpfile64) diff --git a/sysdeps/mach/hurd/tmpfile64.c b/sysdeps/mach/hurd/tmpfile64.c deleted file mode 100644 index 094304a075..0000000000 --- a/sysdeps/mach/hurd/tmpfile64.c +++ /dev/null @@ -1 +0,0 @@ -/* tmpfile64 is an alias for tmpfile, defined in tmpfile.c. */ diff --git a/sysdeps/mach/hurd/truncate.c b/sysdeps/mach/hurd/truncate.c deleted file mode 100644 index 4636f8cc32..0000000000 --- a/sysdeps/mach/hurd/truncate.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Truncate FILE_NAME to LENGTH bytes. */ -int -__truncate (const char *file_name, off_t length) -{ - error_t err; - file_t file = __file_name_lookup (file_name, O_WRITE, 0); - - if (file == MACH_PORT_NULL) - return -1; - - err = __file_set_size (file, length); - __mach_port_deallocate (__mach_task_self (), file); - - if (err) - return __hurd_fail (err); - return 0; -} -weak_alias (__truncate, truncate) diff --git a/sysdeps/mach/hurd/truncate64.c b/sysdeps/mach/hurd/truncate64.c deleted file mode 100644 index a2e2ed2190..0000000000 --- a/sysdeps/mach/hurd/truncate64.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Truncate FILE_NAME to LENGTH bytes. */ -int -__truncate64 (const char *file_name, off64_t length) -{ - error_t err; - file_t file = __file_name_lookup (file_name, O_WRITE, 0); - - if (file == MACH_PORT_NULL) - return -1; - - err = __file_set_size (file, length); - __mach_port_deallocate (__mach_task_self (), file); - - if (err) - return __hurd_fail (err); - return 0; -} - -weak_alias (__truncate64, truncate64) diff --git a/sysdeps/mach/hurd/ttyname.c b/sysdeps/mach/hurd/ttyname.c deleted file mode 100644 index 6da7f21bd7..0000000000 --- a/sysdeps/mach/hurd/ttyname.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Return the pathname of the terminal FD is open on, or NULL on errors. - The returned storage is good only until the next call to this function. */ -char * -ttyname (int fd) -{ - error_t err; - static char nodename[1024]; /* XXX */ - - nodename[0] = '\0'; - if (err = HURD_DPORT_USE (fd, __term_get_nodename (port, nodename))) - { - if (err == MIG_BAD_ID || err == EOPNOTSUPP) - err = ENOTTY; - return __hurd_dfail (fd, err), NULL; - } - - return nodename; -} diff --git a/sysdeps/mach/hurd/ttyname_r.c b/sysdeps/mach/hurd/ttyname_r.c deleted file mode 100644 index d53c6fff35..0000000000 --- a/sysdeps/mach/hurd/ttyname_r.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Store at most BUFLEN characters of the pathname of the terminal FD is - open on in BUF. Return 0 on success, -1 otherwise. */ -int -__ttyname_r (int fd, char *buf, size_t buflen) -{ - error_t err; - char nodename[1024]; /* XXX */ - size_t len; - - nodename[0] = '\0'; - if (err = HURD_DPORT_USE (fd, __term_get_nodename (port, nodename))) - { - if (err == MIG_BAD_ID || err == EOPNOTSUPP) - err = ENOTTY; - return __hurd_dfail (fd, err), errno; - } - - len = strlen (nodename) + 1; - if (len > buflen) - { - errno = ERANGE; - return errno; - } - - memcpy (buf, nodename, len); - return 0; -} - -weak_alias (__ttyname_r, ttyname_r) diff --git a/sysdeps/mach/hurd/umask.c b/sysdeps/mach/hurd/umask.c deleted file mode 100644 index 57498b450d..0000000000 --- a/sysdeps/mach/hurd/umask.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Set the file creation mask to MASK, returning the old mask. */ -mode_t -__umask (mode_t mask) -{ - mode_t omask; - mask &= 0777; - omask = _hurd_umask; - _hurd_umask = mask; - return omask; -} - -weak_alias (__umask, umask) diff --git a/sysdeps/mach/hurd/uname.c b/sysdeps/mach/hurd/uname.c deleted file mode 100644 index d8457038b5..0000000000 --- a/sysdeps/mach/hurd/uname.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -__uname (struct utsname *uname) -{ - error_t err; - - if (err = __USEPORT (PROC, __proc_uname (port, uname))) - return __hurd_fail (err); - - /* Fill in the hostname, which the proc server doesn't know. */ - err = errno; - if (__gethostname (uname->nodename, sizeof uname->nodename) < 0) - { - if (errno == ENAMETOOLONG) - /* Ignore the error of the buffer being too small. - It is of fixed size, nothing to do about it. */ - errno = err; - else - return -1; - } - - return 0; -} -weak_alias (__uname, uname) -libc_hidden_def (__uname) -libc_hidden_def (uname) diff --git a/sysdeps/mach/hurd/unlink.c b/sysdeps/mach/hurd/unlink.c deleted file mode 100644 index 606da91ec3..0000000000 --- a/sysdeps/mach/hurd/unlink.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -/* Remove the link named NAME. */ -int -__unlink (const char *name) -{ - error_t err; - file_t dir; - const char *file; - - dir = __directory_name_split (name, (char **) &file); - if (dir == MACH_PORT_NULL) - return -1; - - err = __dir_unlink (dir, file); - __mach_port_deallocate (__mach_task_self (), dir); - - if (err) - return __hurd_fail (err); - return 0; -} - -weak_alias (__unlink, unlink) diff --git a/sysdeps/mach/hurd/unlinkat.c b/sysdeps/mach/hurd/unlinkat.c deleted file mode 100644 index 18f4b96290..0000000000 --- a/sysdeps/mach/hurd/unlinkat.c +++ /dev/null @@ -1,51 +0,0 @@ -/* unlinkat -- Remove a name relative to an open directory. Hurd version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - -/* Remove the link named NAME. */ -int -unlinkat (int fd, const char *name, int flag) -{ - error_t err; - file_t dir; - const char *file; - - if ((flag &~ AT_REMOVEDIR) != 0) - { - __set_errno (EINVAL); - return -1; - } - - dir = __directory_name_split_at (fd, name, (char **) &file); - if (dir == MACH_PORT_NULL) - return -1; - - err = ((flag & AT_REMOVEDIR) ? __dir_rmdir : __dir_unlink) (dir, file); - __mach_port_deallocate (__mach_task_self (), dir); - - if (err) - return __hurd_fail (err); - return 0; -} diff --git a/sysdeps/mach/hurd/utimes.c b/sysdeps/mach/hurd/utimes.c deleted file mode 100644 index 337586f966..0000000000 --- a/sysdeps/mach/hurd/utimes.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Change the access time of FILE to TVP[0] and - the modification time of FILE to TVP[1]. */ -int -__utimes (const char *file, const struct timeval tvp[2]) -{ - union tv - { - struct timeval tv; - time_value_t tvt; - }; - const union tv *u = (const union tv *) tvp; - union tv nulltv[2]; - error_t err; - file_t port; - - if (tvp == NULL) - { - /* Setting the number of microseconds to `-1' tells the - underlying filesystems to use the current time. */ - nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1; - u = nulltv; - } - - port = __file_name_lookup (file, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - err = __file_utimes (port, u[0].tvt, u[1].tvt); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err); - return 0; -} -weak_alias (__utimes, utimes) diff --git a/sysdeps/mach/hurd/wait4.c b/sysdeps/mach/hurd/wait4.c deleted file mode 100644 index 4d54c0e316..0000000000 --- a/sysdeps/mach/hurd/wait4.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -pid_t -__wait4 (pid_t pid, int *stat_loc, int options, struct rusage *usage) -{ - pid_t dead; - error_t err; - struct rusage ignored; - int sigcode; - int dummy; - - err = __USEPORT (PROC, __proc_wait (port, pid, options, - stat_loc ?: &dummy, &sigcode, - usage ?: &ignored, &dead)); - switch (err) - { - case 0: /* Got a child. */ - return dead; - case EAGAIN: - /* The RPC returns this error when the WNOHANG flag is set and no - selected children are dead (but some are living). In that - situation, our return value is zero. (The RPC can't return zero - for DEAD without also returning some garbage for the other out - parameters, so an error return is much more natural here. Hence - the difference between the RPC and the POSIX.1 interface. */ - return (pid_t) 0; - default: - return (pid_t) __hurd_fail (err); - } -} - -weak_alias (__wait4, wait4) diff --git a/sysdeps/mach/hurd/write.c b/sysdeps/mach/hurd/write.c deleted file mode 100644 index bfa96735e2..0000000000 --- a/sysdeps/mach/hurd/write.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -ssize_t -__libc_write (int fd, const void *buf, size_t nbytes) -{ - error_t err = HURD_FD_USE (fd, _hurd_fd_write (descriptor, - buf, &nbytes, -1)); - return err ? __hurd_dfail (fd, err) : nbytes; -} -libc_hidden_def (__libc_write) -weak_alias (__libc_write, __write) -libc_hidden_weak (__write) -weak_alias (__libc_write, write) diff --git a/sysdeps/mach/hurd/xmknod.c b/sysdeps/mach/hurd/xmknod.c deleted file mode 100644 index bef58a1a39..0000000000 --- a/sysdeps/mach/hurd/xmknod.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - -/* Create a device file named FILE_NAME, with permission and special bits MODE - and device number DEV (which can be constructed from major and minor - device numbers with the `makedev' macro above). */ -int -__xmknod (int vers, const char *file_name, mode_t mode, dev_t *dev) -{ - return __xmknodat (vers, AT_FDCWD, file_name, mode, dev); -} -libc_hidden_def (__xmknod) diff --git a/sysdeps/mach/hurd/xmknodat.c b/sysdeps/mach/hurd/xmknodat.c deleted file mode 100644 index 68cdf74ea3..0000000000 --- a/sysdeps/mach/hurd/xmknodat.c +++ /dev/null @@ -1,119 +0,0 @@ -/* Create a device file relative to an open directory. Hurd version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include <_itoa.h> -#include -#include - -/* Create a device file named PATH relative to FD, with permission and - special bits MODE and device number DEV (which can be constructed - from major and minor device numbers with the `makedev' macro - above). */ -int -__xmknodat (int vers, int fd, const char *path, mode_t mode, dev_t *dev) -{ - error_t errnode, err; - file_t dir, node; - char *name; - char buf[100], *bp; - const char *translator; - size_t len; - - if (vers != _MKNOD_VER) - return __hurd_fail (EINVAL); - - if (S_ISCHR (mode)) - { - translator = _HURD_CHRDEV; - len = sizeof (_HURD_CHRDEV); - } - else if (S_ISBLK (mode)) - { - translator = _HURD_BLKDEV; - len = sizeof (_HURD_BLKDEV); - } - else if (S_ISFIFO (mode)) - { - translator = _HURD_FIFO; - len = sizeof (_HURD_FIFO); - } - else if (S_ISREG (mode)) - { - translator = NULL; - len = 0; - } - else - { - errno = EINVAL; - return -1; - } - - if (translator != NULL && ! S_ISFIFO (mode)) - { - /* We set the translator to "ifmt\0major\0minor\0", where IFMT - depends on the S_IFMT bits of our MODE argument, and MAJOR and - MINOR are ASCII decimal (octal or hex would do as well) - representations of our arguments. Thus the convention is that - CHRDEV and BLKDEV translators are invoked with two non-switch - arguments, giving the major and minor device numbers in %i format. */ - - bp = buf + sizeof (buf); - *--bp = '\0'; - bp = _itoa (minor (*dev), bp, 10, 0); - *--bp = '\0'; - bp = _itoa (major (*dev), bp, 10, 0); - memcpy (bp - len, translator, len); - translator = bp - len; - len = buf + sizeof (buf) - translator; - } - - dir = __file_name_split_at (fd, path, &name); - if (dir == MACH_PORT_NULL) - return -1; - - /* Create a new, unlinked node in the target directory. */ - errnode = err = __dir_mkfile (dir, O_WRITE, (mode & ~S_IFMT) & ~_hurd_umask, &node); - - if (! err && translator != NULL) - /* Set the node's translator to make it a device. */ - err = __file_set_translator (node, - FS_TRANS_EXCL | FS_TRANS_SET, - FS_TRANS_EXCL | FS_TRANS_SET, 0, - translator, len, - MACH_PORT_NULL, MACH_MSG_TYPE_COPY_SEND); - - if (! err) - /* Link the node, now a valid device, into the target directory. */ - err = __dir_link (dir, node, name, 1); - - __mach_port_deallocate (__mach_task_self (), dir); - if (! errnode) - __mach_port_deallocate (__mach_task_self (), node); - - if (err) - return __hurd_fail (err); - return 0; -} - -libc_hidden_def (__xmknodat) diff --git a/sysdeps/mach/hurd/xstat.c b/sysdeps/mach/hurd/xstat.c deleted file mode 100644 index 11b0a94322..0000000000 --- a/sysdeps/mach/hurd/xstat.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "xstatconv.c" - -/* Get file information about FILE in BUF. */ -int -__xstat (int vers, const char *file, struct stat *buf) -{ - struct stat64 buf64; - return __xstat64 (vers, file, &buf64) ?: xstat64_conv (buf, &buf64); -} -hidden_def (__xstat) -weak_alias (__xstat, _xstat) diff --git a/sysdeps/mach/hurd/xstat64.c b/sysdeps/mach/hurd/xstat64.c deleted file mode 100644 index 20e3d82f42..0000000000 --- a/sysdeps/mach/hurd/xstat64.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef RTLD_STAT64 /* dl-xstat64.c, but we don't want it. */ - -#include -#include -#include -#include - -/* Get information about the file descriptor FD in BUF. */ -int -__xstat64 (int vers, const char *file, struct stat64 *buf) -{ - error_t err; - file_t port; - - if (vers != _STAT_VER) - return __hurd_fail (EINVAL); - - port = __file_name_lookup (file, 0, 0); - if (port == MACH_PORT_NULL) - return -1; - err = __io_stat (port, buf); - __mach_port_deallocate (__mach_task_self (), port); - if (err) - return __hurd_fail (err); - return 0; -} -hidden_def (__xstat64) - -#endif diff --git a/sysdeps/mach/hurd/xstatconv.c b/sysdeps/mach/hurd/xstatconv.c deleted file mode 100644 index 6b51002371..0000000000 --- a/sysdeps/mach/hurd/xstatconv.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Convert between `struct stat' format, and `struct stat64' format. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -static inline int -xstat64_conv (struct stat *buf, const struct stat64 *buf64) -{ - if (sizeof *buf == sizeof *buf64 - && sizeof buf->st_ino == sizeof buf64->st_ino - && sizeof buf->st_size == sizeof buf64->st_size - && sizeof buf->st_blocks == sizeof buf64->st_blocks) - { - *buf = *(struct stat *) buf64; - return 0; - } - - buf->st_fstype = buf64->st_fstype; - buf->st_fsid = buf64->st_fsid; - buf->st_ino = buf64->st_ino; - buf->st_gen = buf64->st_gen; - buf->st_rdev = buf64->st_rdev; - buf->st_mode = buf64->st_mode; - buf->st_nlink = buf64->st_nlink; - buf->st_uid = buf64->st_uid; - buf->st_gid = buf64->st_gid; - buf->st_size = buf64->st_size; - buf->st_atim = buf64->st_atim; - buf->st_mtim = buf64->st_mtim; - buf->st_ctim = buf64->st_ctim; - buf->st_blksize = buf64->st_blksize; - buf->st_blocks = buf64->st_blocks; - buf->st_author = buf64->st_author; - buf->st_flags = buf64->st_flags; - - if ((sizeof buf->st_ino != sizeof buf64->st_ino - && buf->st_ino != buf64->st_ino) - || (sizeof buf->st_size != sizeof buf64->st_size - && buf->st_size != buf64->st_size) - || (sizeof buf->st_blocks != sizeof buf64->st_blocks - && buf->st_blocks != buf64->st_blocks)) - { - __set_errno (EOVERFLOW); - return -1; - } - - return 0; -} diff --git a/sysdeps/mach/i386/machine-lock.h b/sysdeps/mach/i386/machine-lock.h deleted file mode 100644 index 540d1a5326..0000000000 --- a/sysdeps/mach/i386/machine-lock.h +++ /dev/null @@ -1,67 +0,0 @@ -/* Machine-specific definition for spin locks. i386 version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MACHINE_LOCK_H -#define _MACHINE_LOCK_H - -/* The type of a spin lock variable. */ - -typedef volatile int __spin_lock_t; - -/* Value to initialize `__spin_lock_t' variables to. */ - -#define __SPIN_LOCK_INITIALIZER 0 - - -#ifndef _EXTERN_INLINE -#define _EXTERN_INLINE __extern_inline -#endif - -/* Unlock LOCK. */ - -_EXTERN_INLINE void -__spin_unlock (__spin_lock_t *__lock) -{ - register int __unlocked; - __asm__ __volatile ("xchgl %0, %1" - : "=&r" (__unlocked), "=m" (*__lock) : "0" (0) - : "memory"); -} - -/* Try to lock LOCK; return nonzero if we locked it, zero if another has. */ - -_EXTERN_INLINE int -__spin_try_lock (__spin_lock_t *__lock) -{ - register int __locked; - __asm__ __volatile ("xchgl %0, %1" - : "=&r" (__locked), "=m" (*__lock) : "0" (1) - : "memory"); - return !__locked; -} - -/* Return nonzero if LOCK is locked. */ - -_EXTERN_INLINE int -__spin_lock_locked (__spin_lock_t *__lock) -{ - return *__lock != 0; -} - - -#endif /* machine-lock.h */ diff --git a/sysdeps/mach/i386/machine-sp.h b/sysdeps/mach/i386/machine-sp.h deleted file mode 100644 index 264facbf1e..0000000000 --- a/sysdeps/mach/i386/machine-sp.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Machine-specific function to return the stack pointer. i386 version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MACHINE_SP_H -#define _MACHINE_SP_H - -/* Return the current stack pointer. */ - -#define __thread_stack_pointer() ({ \ - void *__sp__; \ - __asm__ ("movl %%esp, %0" : "=r" (__sp__)); \ - __sp__; \ -}) - -#endif /* machine-sp.h */ diff --git a/sysdeps/mach/i386/syscall.S b/sysdeps/mach/i386/syscall.S deleted file mode 100644 index 562aedd175..0000000000 --- a/sysdeps/mach/i386/syscall.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (syscall) - popl %ecx /* Pop return address into %ecx. */ - popl %eax /* Pop syscall number into %eax. */ - pushl %ecx /* Push back return address. */ - .byte 0x9a, 0, 0, 0, 0, 7, 0 /* lcall $7, $0 -- gas bug */ - popl %ecx /* Pop return address into %ecx. */ - pushl $0 /* Push back dumb syscall number. */ - pushl %ecx /* Push back return address. */ - ret -END (syscall) diff --git a/sysdeps/mach/i386/sysdep.h b/sysdeps/mach/i386/sysdep.h deleted file mode 100644 index d5e5f6bcf3..0000000000 --- a/sysdeps/mach/i386/sysdep.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MACH_I386_SYSDEP_H -#define _MACH_I386_SYSDEP_H 1 - -/* Defines RTLD_PRIVATE_ERRNO and USE_DL_SYSINFO. */ -#include -#include - -#define LOSE asm volatile ("hlt") - -#define SNARF_ARGS(entry_sp, argc, argv, envp) \ - do \ - { \ - char **p; \ - argc = (int) *entry_sp; \ - argv = (char **) (entry_sp + 1); \ - p = argv; \ - while (*p++ != NULL) \ - ; \ - if (p >= (char **) argv[0]) \ - --p; \ - envp = p; \ - } while (0) - -#define CALL_WITH_SP(fn, info, sp) \ - do { \ - void **ptr = (void **) sp; \ - *--(__typeof (info) *) ptr = info; \ - ptr[-1] = ptr; \ - --ptr; \ - asm volatile ("movl %0, %%esp; call %1" : : \ - "g" (ptr), "m" (*(long int *) (fn)) : "%esp"); \ - } while (0) - -#define RETURN_TO(sp, pc, retval) \ - asm volatile ("movl %0, %%esp; jmp %*%1 # %2" \ - : : "g" (sp), "r" (pc), "a" (retval)) - - -#define STACK_GROWTH_DOWN - -/* Get the machine-independent Mach definitions. */ -#include - - -/* This should be rearranged, but at the moment this file provides - the most useful definitions for assembler syntax details. */ -#undef ENTRY -#undef ALIGN -#include - -#endif /* mach/i386/sysdep.h */ diff --git a/sysdeps/mach/i386/thread_state.h b/sysdeps/mach/i386/thread_state.h deleted file mode 100644 index 2ad2619e34..0000000000 --- a/sysdeps/mach/i386/thread_state.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Mach thread state definitions for machine-independent code. i386 version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MACH_I386_THREAD_STATE_H -#define _MACH_I386_THREAD_STATE_H 1 - -#include - -#define MACHINE_THREAD_STATE_FLAVOR i386_THREAD_STATE -#define MACHINE_THREAD_STATE_COUNT i386_THREAD_STATE_COUNT - -#define machine_thread_state i386_thread_state - -#define PC eip -#define SP uesp -#define SYSRETURN eax - -struct machine_thread_all_state - { - int set; /* Mask of bits (1 << FLAVOR). */ - struct i386_thread_state basic; - struct i386_float_state fpu; - }; - -#include - -#endif /* mach/i386/thread_state.h */ diff --git a/sysdeps/mach/libc-lock.h b/sysdeps/mach/libc-lock.h deleted file mode 100644 index 9b864a7d50..0000000000 --- a/sysdeps/mach/libc-lock.h +++ /dev/null @@ -1,145 +0,0 @@ -/* libc-internal interface for mutex locks. Mach cthreads version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LIBC_LOCK_H -#define _LIBC_LOCK_H 1 - -#ifdef _LIBC -#include -#define __libc_lock_t struct mutex -#else -typedef struct __libc_lock_opaque__ __libc_lock_t; -#endif - -/* Type for key of thread specific data. */ -typedef cthread_key_t __libc_key_t; - -/* Define a lock variable NAME with storage class CLASS. The lock must be - initialized with __libc_lock_init before it can be used (or define it - with __libc_lock_define_initialized, below). Use `extern' for CLASS to - declare a lock defined in another module. In public structure - definitions you must use a pointer to the lock structure (i.e., NAME - begins with a `*'), because its storage size will not be known outside - of libc. */ -#define __libc_lock_define(CLASS,NAME) \ - CLASS __libc_lock_t NAME; - -/* Define an initialized lock variable NAME with storage class CLASS. */ -#define __libc_lock_define_initialized(CLASS,NAME) \ - CLASS __libc_lock_t NAME = MUTEX_INITIALIZER; - -/* Initialize the named lock variable, leaving it in a consistent, unlocked - state. */ -#define __libc_lock_init(NAME) __mutex_init (&(NAME)) - -/* Finalize the named lock variable, which must be locked. It cannot be - used again until __libc_lock_init is called again on it. This must be - called on a lock variable before the containing storage is reused. */ -#define __libc_lock_fini(NAME) __mutex_unlock (&(NAME)) - -/* Lock the named lock variable. */ -#define __libc_lock_lock(NAME) __mutex_lock (&(NAME)) - -/* Lock the named lock variable. */ -#define __libc_lock_trylock(NAME) (!__mutex_trylock (&(NAME))) - -/* Unlock the named lock variable. */ -#define __libc_lock_unlock(NAME) __mutex_unlock (&(NAME)) - - -/* XXX for now */ -#define __libc_rwlock_define __libc_lock_define -#define __libc_rwlock_define_initialized __libc_lock_define_initialized -#define __libc_rwlock_init __libc_lock_init -#define __libc_rwlock_fini __libc_lock_fini -#define __libc_rwlock_rdlock __libc_lock_lock -#define __libc_rwlock_wrlock __libc_lock_lock -#define __libc_rwlock_tryrdlock __libc_lock_trylock -#define __libc_rwlock_trywrlock __libc_lock_trylock -#define __libc_rwlock_unlock __libc_lock_unlock - - -/* Start a critical region with a cleanup function */ -#define __libc_cleanup_region_start(DOIT, FCT, ARG) \ -{ \ - typeof (***(FCT)) *__save_FCT = (DOIT) ? (FCT) : 0; \ - typeof (ARG) __save_ARG = ARG; \ - /* close brace is in __libc_cleanup_region_end below. */ - -/* End a critical region started with __libc_cleanup_region_start. */ -#define __libc_cleanup_region_end(DOIT) \ - if ((DOIT) && __save_FCT != 0) \ - (*__save_FCT)(__save_ARG); \ -} - -/* Sometimes we have to exit the block in the middle. */ -#define __libc_cleanup_end(DOIT) \ - if ((DOIT) && __save_FCT != 0) \ - (*__save_FCT)(__save_ARG); \ - - -/* Use mutexes as once control variables. */ - -struct __libc_once - { - __libc_lock_t lock; - int done; - }; - -#define __libc_once_define(CLASS,NAME) \ - CLASS struct __libc_once NAME = { MUTEX_INITIALIZER, 0 } - - -/* Call handler iff the first call. */ -#define __libc_once(ONCE_CONTROL, INIT_FUNCTION) \ - do { \ - __libc_lock_lock (ONCE_CONTROL.lock); \ - if (!ONCE_CONTROL.done) \ - (INIT_FUNCTION) (); \ - ONCE_CONTROL.done = 1; \ - __libc_lock_unlock (ONCE_CONTROL.lock); \ - } while (0) - -/* Get once control variable. */ -#define __libc_once_get(ONCE_CONTROL) ((ONCE_CONTROL).done != 0) - -#ifdef _LIBC -/* We need portable names for some functions. E.g., when they are - used as argument to __libc_cleanup_region_start. */ -#define __libc_mutex_unlock __mutex_unlock -#endif - -#define __libc_key_create(KEY,DEST) cthread_keycreate (KEY) -#define __libc_setspecific(KEY,VAL) cthread_setspecific (KEY, VAL) -void *__libc_getspecific (__libc_key_t key); - -/* XXX until cthreads supports recursive locks */ -#define __libc_lock_define_initialized_recursive __libc_lock_define_initialized -#define __libc_lock_init_recursive __libc_lock_init -#define __libc_lock_fini_recursive __libc_lock_fini -#define __libc_lock_trylock_recursive __libc_lock_trylock -#define __libc_lock_unlock_recursive __libc_lock_unlock -#define __libc_lock_lock_recursive __libc_lock_lock - -#define __rtld_lock_define_initialized_recursive __libc_lock_define_initialized -#define __rtld_lock_fini_recursive __libc_lock_fini -#define __rtld_lock_trylock_recursive __libc_lock_trylock -#define __rtld_lock_unlock_recursive __libc_lock_unlock -#define __rtld_lock_lock_recursive __libc_lock_lock - -#endif /* libc-lock.h */ diff --git a/sysdeps/mach/mprotect.c b/sysdeps/mach/mprotect.c deleted file mode 100644 index 477017da39..0000000000 --- a/sysdeps/mach/mprotect.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Change the memory protection of the region starting at ADDR and - extending LEN bytes to PROT. Returns 0 if successful, -1 for errors - (and sets errno). */ - -int -__mprotect (__ptr_t addr, size_t len, int prot) -{ - kern_return_t err; - vm_prot_t vmprot; - - vmprot = VM_PROT_NONE; - if (prot & PROT_READ) - vmprot |= VM_PROT_READ; - if (prot & PROT_WRITE) - vmprot |= VM_PROT_WRITE; - if (prot & PROT_EXEC) - vmprot |= VM_PROT_EXECUTE; - - if (err = __vm_protect (__mach_task_self (), - (vm_address_t) addr, (vm_size_t) len, - 0, vmprot)) - { - errno = err; - return -1; - } - return 0; -} -weak_alias (__mprotect, mprotect) diff --git a/sysdeps/mach/msync.c b/sysdeps/mach/msync.c deleted file mode 100644 index f84553269e..0000000000 --- a/sysdeps/mach/msync.c +++ /dev/null @@ -1,56 +0,0 @@ -/* msync -- Synchronize mapped memory to external storage. Mach version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Some Mach variants have vm_msync and some don't. Those that have it - define the VM_SYNC_* bits when we include . */ - -#ifndef VM_SYNC_SYNCHRONOUS -# include -#else - -/* Synchronize the region starting at ADDR and extending LEN bytes with the - file it maps. Filesystem operations on a file being mapped are - unpredictable before this is done. */ - -int -msync (__ptr_t addr, size_t len, int flags) -{ - vm_sync_t sync_flags = 0; - kern_return_t err; - - if (flags & MS_SYNC) - sync_flags |= VM_SYNC_SYNCHRONOUS; - if (flags & MS_ASYNC) - sync_flags |= VM_SYNC_ASYNCHRONOUS; - if (flags & MS_INVALIDATE) - sync_flags |= VM_SYNC_INVALIDATE; - - if (err = __vm_msync (__mach_task_self (), - (vm_address_t) addr, (vm_size_t) len, sync_flags)) - { - errno = err; - return -1; - } - return 0; -} -#endif diff --git a/sysdeps/mach/munmap.c b/sysdeps/mach/munmap.c deleted file mode 100644 index b5fdaeaf1b..0000000000 --- a/sysdeps/mach/munmap.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Deallocate any mapping for the region starting at ADDR and extending LEN - bytes. Returns 0 if successful, -1 for errors (and sets errno). */ - -int -__munmap (__ptr_t addr, size_t len) -{ - kern_return_t err; - - if (addr == 0) - { - errno = EINVAL; - return -1; - } - - if (err = __vm_deallocate (__mach_task_self (), - (vm_address_t) addr, (vm_size_t) len)) - { - errno = err; - return -1; - } - return 0; -} - -weak_alias (__munmap, munmap) diff --git a/sysdeps/mach/nanosleep.c b/sysdeps/mach/nanosleep.c deleted file mode 100644 index a932e82cf1..0000000000 --- a/sysdeps/mach/nanosleep.c +++ /dev/null @@ -1,70 +0,0 @@ -/* nanosleep -- sleep for a period specified with a struct timespec - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -int -__libc_nanosleep (const struct timespec *requested_time, - struct timespec *remaining) -{ - mach_port_t recv; - struct timeval before, after; - - if (requested_time->tv_sec < 0 - || requested_time->tv_nsec < 0 - || requested_time->tv_nsec >= 1000000000) - { - errno = EINVAL; - return -1; - } - - const mach_msg_timeout_t ms - = requested_time->tv_sec * 1000 - + (requested_time->tv_nsec + 999999) / 1000000; - - recv = __mach_reply_port (); - - if (remaining && __gettimeofday (&before, NULL) < 0) - return -1; - error_t err = __mach_msg (NULL, MACH_RCV_MSG|MACH_RCV_TIMEOUT|MACH_RCV_INTERRUPT, - 0, 0, recv, ms, MACH_PORT_NULL); - __mach_port_destroy (mach_task_self (), recv); - if (err == EMACH_RCV_INTERRUPTED) - { - if (remaining && __gettimeofday (&after, NULL) >= 0) - { - struct timeval req_time, elapsed, rem; - TIMESPEC_TO_TIMEVAL (&req_time, requested_time); - timersub (&after, &before, &elapsed); - timersub (&req_time, &elapsed, &rem); - TIMEVAL_TO_TIMESPEC (&rem, remaining); - } - - errno = EINTR; - return -1; - } - - return 0; -} -weak_alias(__libc_nanosleep, __nanosleep) -libc_hidden_def (__nanosleep) -weak_alias (__libc_nanosleep, nanosleep) diff --git a/sysdeps/mach/pagecopy.h b/sysdeps/mach/pagecopy.h deleted file mode 100644 index 4d9cb688d6..0000000000 --- a/sysdeps/mach/pagecopy.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Macros for copying by pages; used in memcpy, memmove. Mach version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Threshold at which vm_copy is more efficient than well-optimized copying - by words. This parameter should be tuned as necessary. */ -#define PAGE_THRESHOLD (2 * PAGE_SIZE) /* XXX ? */ - -#define PAGE_SIZE __vm_page_size -#define PAGE_COPY_FWD(dstp, srcp, nbytes_left, nbytes) \ - ((nbytes_left) = ((nbytes) - \ - (__vm_copy (__mach_task_self (), \ - (vm_address_t) srcp, trunc_page (nbytes), \ - (vm_address_t) dstp) == KERN_SUCCESS \ - ? trunc_page (nbytes) \ - : 0))) diff --git a/sysdeps/mach/readonly-area.c b/sysdeps/mach/readonly-area.c deleted file mode 100644 index c187b06a7b..0000000000 --- a/sysdeps/mach/readonly-area.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Test if a memory region is wholly unwritable. Mach version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Return 1 if the whole area PTR .. PTR+SIZE is not writable. - Return -1 if it is writable. */ - -int -__readonly_area (const char *ptr, size_t size) -{ - vm_address_t region_address = (uintptr_t) ptr; - vm_size_t region_length = size; - vm_prot_t protection; - vm_prot_t max_protection; - vm_inherit_t inheritance; - boolean_t is_shared; - mach_port_t object_name; - vm_offset_t offset; - - while (__vm_region (__mach_task_self (), - ®ion_address, ®ion_length, - &protection, &max_protection, &inheritance, &is_shared, - &object_name, &offset) == KERN_SUCCESS - && region_address <= (uintptr_t) ptr) - { - region_address += region_length; - if (region_address < (uintptr_t) ptr) - continue; - - if (protection & VM_PROT_WRITE) - return -1; - - if (region_address - (uintptr_t) ptr >= size) - break; - } - - return 1; -} diff --git a/sysdeps/mach/sched_yield.c b/sysdeps/mach/sched_yield.c deleted file mode 100644 index 9f0f2f9ce9..0000000000 --- a/sysdeps/mach/sched_yield.c +++ /dev/null @@ -1,31 +0,0 @@ -/* sched_yield -- yield the processor. Mach version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Yield the processor. */ -int -__sched_yield (void) -{ - (void) __swtch (); - return 0; -} -libc_hidden_def (__sched_yield) -weak_alias (__sched_yield, sched_yield) diff --git a/sysdeps/mach/sleep.c b/sysdeps/mach/sleep.c deleted file mode 100644 index 260280ce34..0000000000 --- a/sysdeps/mach/sleep.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Make the process sleep for SECONDS seconds, or until a signal arrives - and is not ignored. The function returns the number of seconds less - than SECONDS which it actually slept (zero if it slept the full time). - There is no return value to indicate error, but if `sleep' returns - SECONDS, it probably didn't work. */ -unsigned int -__sleep (unsigned int seconds) -{ - time_t before, after; - mach_port_t recv; - - recv = __mach_reply_port (); - - before = time ((time_t *) NULL); - (void) __mach_msg (NULL, MACH_RCV_MSG|MACH_RCV_TIMEOUT|MACH_RCV_INTERRUPT, - 0, 0, recv, seconds * 1000, MACH_PORT_NULL); - after = time ((time_t *) NULL); - __mach_port_destroy (__mach_task_self (), recv); - - return seconds - (after - before); -} -weak_alias (__sleep, sleep) diff --git a/sysdeps/mach/strerror_l.c b/sysdeps/mach/strerror_l.c deleted file mode 100644 index b598286bb9..0000000000 --- a/sysdeps/mach/strerror_l.c +++ /dev/null @@ -1,101 +0,0 @@ -/* strerror_l - Get errno description string in given locale. Mach version. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -static __thread char *last_value; - - -static const char * -translate (const char *str, locale_t loc) -{ - locale_t oldloc = __uselocale (loc); - const char *res = _(str); - __uselocale (oldloc); - return res; -} - - -/* Return a string describing the errno code in ERRNUM. */ -char * -strerror_l (int errnum, locale_t loc) -{ - int system; - int sub; - int code; - const struct error_system *es; - extern void __mach_error_map_compat (int *); - - __mach_error_map_compat (&errnum); - - system = err_get_system (errnum); - sub = err_get_sub (errnum); - code = err_get_code (errnum); - - if (system > err_max_system || ! __mach_error_systems[system].bad_sub) - { - free (last_value); - if (__asprintf (&last_value, "%s%X", - translate ("Error in unknown error system: ", loc), - errnum) == -1) - last_value = NULL; - - return last_value; - } - - es = &__mach_error_systems[system]; - - if (sub >= es->max_sub) - return (char *) translate (es->bad_sub, loc); - - if (code >= es->subsystem[sub].max_code) - { - free (last_value); - if (__asprintf (&last_value, "%s%s %d", - translate ("Unknown error ", loc), - translate (es->subsystem[sub].subsys_name, loc), - errnum) == -1) - last_value = NULL; - - return last_value; - } - - return (char *) translate (es->subsystem[sub].codes[code], loc); -} - - -#ifdef _LIBC -# ifdef _LIBC_REENTRANT -/* This is called when a thread is exiting to free the last_value string. */ -static void __attribute__ ((section ("__libc_thread_freeres_fn"))) -strerror_thread_freeres (void) -{ - free (last_value); -} -text_set_element (__libc_thread_subfreeres, strerror_thread_freeres); -text_set_element (__libc_subfreeres, strerror_thread_freeres); -# endif -#endif diff --git a/sysdeps/mach/sys/reboot.h b/sysdeps/mach/sys/reboot.h deleted file mode 100644 index 9beb8aef72..0000000000 --- a/sysdeps/mach/sys/reboot.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Mach Operating System - * Copyright (C) 1993,1991,1990 Carnegie Mellon University - * All Rights Reserved. - * - * Permission to use, copy, modify and distribute this software and its - * documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR - * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie Mellon - * the rights to redistribute these changes. - */ -/* - * (pre-GNU) HISTORY - * - * Revision 2.8 93/03/11 13:46:40 danner - * unsigned long -> unsigned int. - * [93/03/09 danner] - * - * Revision 2.7 92/05/21 17:25:11 jfriedl - * Appended 'U' to constants that would otherwise be signed. - * [92/05/16 jfriedl] - * - * Revision 2.6 91/06/19 11:59:44 rvb - * Second byte of boothowto is flags for "startup" program. - * [91/06/18 rvb] - * Add ifndef __ASSEMBLER__ so that vax_init.s can include it. - * [91/06/11 rvb] - * - * Revision 2.5 91/05/14 17:40:11 mrt - * Correcting copyright - * - * Revision 2.4 91/02/05 17:56:48 mrt - * Changed to new Mach copyright - * [91/02/01 17:49:12 mrt] - * - * Revision 2.3 90/08/27 22:12:56 dbg - * Added definitions used by Mach Kernel: RB_DEBUGGER, RB_UNIPROC, - * RB_NOBOOTRC, RB_ALTBOOT. Moved RB_KDB to 0x04 (Mach value). - * Removed RB_RDONLY, RB_DUMP, RB_NOSYNC. - * [90/08/14 dbg] - * - */ - -/* - Copyright (C) 1982, 1986, 1988 Regents of the University of California. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 4. Neither the name of the University nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE.*/ - -/* - * @(#)reboot.h 7.5 (Berkeley) 6/27/88 - */ - -#ifndef _SYS_REBOOT_H_ -#define _SYS_REBOOT_H_ - -#include - -/* - * Arguments to reboot system call. - * These are converted to switches, and passed to startup program, - * and on to init. - */ -#define RB_AUTOBOOT 0 /* flags for system auto-booting itself */ - -#define RB_ASKNAME 0x01 /* -a: ask for file name to reboot from */ -#define RB_SINGLE 0x02 /* -s: reboot to single user only */ -#define RB_KDB 0x04 /* -d: kernel debugger symbols loaded */ -#define RB_HALT 0x08 /* -h: enter KDB at bootup */ - /* for host_reboot(): don't reboot, - just halt */ -#define RB_INITNAME 0x10 /* -i: name given for /etc/init (unused) */ -#define RB_DFLTROOT 0x20 /* use compiled-in rootdev */ -#define RB_NOBOOTRC 0x20 /* -b: don't run /etc/rc.boot */ -#define RB_ALTBOOT 0x40 /* use /boot.old vs /boot */ -#define RB_UNIPROC 0x80 /* -u: start only one processor */ - -#define RB_SHIFT 8 /* second byte is for ux */ - -#define RB_DEBUGGER 0x1000 /* for host_reboot(): enter kernel - debugger from user level */ - -/* - * Constants for converting boot-style device number to type, - * adaptor (uba, mba, etc), unit number and partition number. - * Type (== major device number) is in the low byte - * for backward compatibility. Except for that of the "magic - * number", each mask applies to the shifted value. - * Format: - * (4) (4) (4) (4) (8) (8) - * -------------------------------- - * |MA | AD| CT| UN| PART | TYPE | - * -------------------------------- - */ -#define B_ADAPTORSHIFT 24 -#define B_ADAPTORMASK 0x0f -#define B_ADAPTOR(val) (((val) >> B_ADAPTORSHIFT) & B_ADAPTORMASK) -#define B_CONTROLLERSHIFT 20 -#define B_CONTROLLERMASK 0xf -#define B_CONTROLLER(val) (((val)>>B_CONTROLLERSHIFT) & B_CONTROLLERMASK) -#define B_UNITSHIFT 16 -#define B_UNITMASK 0xf -#define B_UNIT(val) (((val) >> B_UNITSHIFT) & B_UNITMASK) -#define B_PARTITIONSHIFT 8 -#define B_PARTITIONMASK 0xff -#define B_PARTITION(val) (((val) >> B_PARTITIONSHIFT) & B_PARTITIONMASK) -#define B_TYPESHIFT 0 -#define B_TYPEMASK 0xff -#define B_TYPE(val) (((val) >> B_TYPESHIFT) & B_TYPEMASK) - -#define B_MAGICMASK 0xf0000000U -#define B_DEVMAGIC 0xa0000000U - -#define MAKEBOOTDEV(type, adaptor, controller, unit, partition) \ - (((type) << B_TYPESHIFT) | ((adaptor) << B_ADAPTORSHIFT) | \ - ((controller) << B_CONTROLLERSHIFT) | ((unit) << B_UNITSHIFT) | \ - ((partition) << B_PARTITIONSHIFT) | B_DEVMAGIC) - - -#ifdef KERNEL -#ifndef __ASSEMBLER__ -extern int boothowto; -#endif /* __ASSEMBLER__ */ -#endif - -__BEGIN_DECLS - -/* Reboot or halt the system. */ -extern int reboot (int __howto) __THROW; - -__END_DECLS - - -#endif /* _SYS_REBOOT_H_ */ diff --git a/sysdeps/mach/sys/syscall.h b/sysdeps/mach/sys/syscall.h deleted file mode 100644 index 6e4ed4d64e..0000000000 --- a/sysdeps/mach/sys/syscall.h +++ /dev/null @@ -1 +0,0 @@ -/* The Mach syscalls are in . */ diff --git a/sysdeps/mach/sysdep.h b/sysdeps/mach/sysdep.h deleted file mode 100644 index 6cdcbf366f..0000000000 --- a/sysdeps/mach/sysdep.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef __ASSEMBLER__ - -/* Get the Mach definitions of ENTRY and kernel_trap. */ -#include - -/* The Mach definitions assume underscores should be prepended to - symbol names. Redefine them to do so only when appropriate. */ -#undef EXT -#undef LEXT -#define EXT(x) C_SYMBOL_NAME(x) -#define LEXT(x) C_SYMBOL_NAME(x##:) - -/* For ELF we need to add the `.type' directive to make shared libraries - work right. */ -#undef ENTRY -#define ENTRY(name) \ - .globl name; \ - .align ALIGN; \ - .type name,@function; \ - name: - -#endif - -/* This is invoked by things run when there is random lossage, before they - try to do anything else. Just to be safe, deallocate the reply port so - bogons arriving on it don't foul up future RPCs. */ - -#ifndef __ASSEMBLER__ -#define FATAL_PREPARE_INCLUDE -#define FATAL_PREPARE __mig_dealloc_reply_port (MACH_PORT_NULL) -#endif - -/* sysdeps/mach/MACHINE/sysdep.h should define the following macros. */ - -/* Produce a text assembler label for the C global symbol NAME. */ -#ifndef ENTRY -#define ENTRY(name) .error ENTRY not defined by sysdeps/mach/MACHINE/sysdep.h -/* This is not used on all machines. */ -#endif - -/* Set variables ARGC, ARGV, and ENVP for the arguments - left on the stack by the microkernel. */ -#ifndef SNARF_ARGS -#define SNARF_ARGS(argc, argv, envp) -#error SNARF_ARGS not defined by sysdeps/mach/MACHINE/sysdep.h -#endif - -/* Call the C function FN with no arguments, - on a stack starting at SP (as returned by *_cthread_init_routine). - You don't need to deal with FN returning; it shouldn't. */ -#ifndef CALL_WITH_SP -#define CALL_WITH_SP(fn, sp) -#error CALL_WITH_SP not defined by sysdeps/mach/MACHINE/sysdep.h -#endif - -/* LOSE can be defined as the `halt' instruction or something - similar which will cause the process to die in a characteristic - way suggesting a bug. */ -#ifndef LOSE -#define LOSE ({ volatile int zero = 0; zero / zero; }) -#endif - -/* One of these should be defined to specify the stack direction. */ -#if !defined (STACK_GROWTH_UP) && !defined (STACK_GROWTH_DOWN) -#error stack direction unspecified -#endif - -/* Used by some assembly code. */ -#define C_SYMBOL_NAME(name) name diff --git a/sysdeps/mach/thread_state.h b/sysdeps/mach/thread_state.h deleted file mode 100644 index 1a154cd0fa..0000000000 --- a/sysdeps/mach/thread_state.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Generic definitions for dealing with Mach thread states. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* Everything else is called `thread_state', but CMU's header file is - called `thread_status'. Oh boy. */ -#include - -/* The machine-dependent thread_state.h file can either define these - macros, or just define PC and SP to the register names. */ - -#ifndef MACHINE_THREAD_STATE_SET_PC -#define MACHINE_THREAD_STATE_SET_PC(ts, pc) \ - ((ts)->PC = (unsigned long int) (pc)) -#endif -#ifndef MACHINE_THREAD_STATE_SET_SP -#ifdef STACK_GROWTH_UP -#define MACHINE_THREAD_STATE_SET_SP(ts, stack, size) \ - ((ts)->SP = (unsigned long int) (stack)) -#else -#define MACHINE_THREAD_STATE_SET_SP(ts, stack, size) \ - ((ts)->SP = (unsigned long int) (stack) + (size)) -#endif -#endif - -/* These functions are of use in machine-dependent signal trampoline - implementations. */ - -#include /* size_t, memcpy */ -#include /* __thread_get_state */ - -static inline int -machine_get_state (thread_t thread, struct machine_thread_all_state *state, - int flavor, void *stateptr, void *scpptr, size_t size) -{ - if (state->set & (1 << flavor)) - { - /* Copy the saved state. */ - memcpy (scpptr, stateptr, size); - return 1; - } - else - { - /* No one asked about this flavor of state before; fetch the state - directly from the kernel into the sigcontext. */ - mach_msg_type_number_t got = (size / sizeof (int)); - return (! __thread_get_state (thread, flavor, scpptr, &got) - && got == (size / sizeof (int))); - } -} - -static inline int -machine_get_basic_state (thread_t thread, - struct machine_thread_all_state *state) -{ - mach_msg_type_number_t count; - - if (state->set & (1 << MACHINE_THREAD_STATE_FLAVOR)) - return 1; - - count = MACHINE_THREAD_STATE_COUNT; - if (__thread_get_state (thread, MACHINE_THREAD_STATE_FLAVOR, - (natural_t *) &state->basic, - &count) != KERN_SUCCESS || - count != MACHINE_THREAD_STATE_COUNT) - /* What kind of thread?? */ - return 0; /* XXX */ - - state->set |= 1 << MACHINE_THREAD_STATE_FLAVOR; - return 1; -} diff --git a/sysdeps/mach/usleep.c b/sysdeps/mach/usleep.c deleted file mode 100644 index 49f987df72..0000000000 --- a/sysdeps/mach/usleep.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Sleep USECONDS microseconds, or until a previously set timer goes off. */ -int -usleep (useconds_t useconds) -{ - mach_port_t recv; - struct timeval before, after; - - recv = __mach_reply_port (); - - if (__gettimeofday (&before, NULL) < 0) - return -1; - (void) __mach_msg (NULL, MACH_RCV_MSG|MACH_RCV_TIMEOUT|MACH_RCV_INTERRUPT, - 0, 0, recv, (useconds + 999) / 1000, MACH_PORT_NULL); - __mach_port_destroy (mach_task_self (), recv); - if (__gettimeofday (&after, NULL) < 0) - return -1; - - return 0; -} diff --git a/sysdeps/mach/xpg-strerror.c b/sysdeps/mach/xpg-strerror.c deleted file mode 100644 index 44d22cc266..0000000000 --- a/sysdeps/mach/xpg-strerror.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include <_itoa.h> - -/* It is critical here that we always use the `dcgettext' function for - the message translation. Since only defines the macro - `dgettext' to use `dcgettext' for optimizing programs this is not - always guaranteed. */ -#ifndef dgettext -# include /* We need LC_MESSAGES. */ -# define dgettext(domainname, msgid) dcgettext (domainname, msgid, LC_MESSAGES) -#endif - -/* Fill buf with a string describing the errno code in ERRNUM. */ -int -__xpg_strerror_r (int errnum, char *buf, size_t buflen) -{ - int system; - int sub; - int code; - const struct error_system *es; - extern void __mach_error_map_compat (int *); - const char *estr; - - __mach_error_map_compat (&errnum); - - system = err_get_system (errnum); - sub = err_get_sub (errnum); - code = err_get_code (errnum); - - if (system > err_max_system || ! __mach_error_systems[system].bad_sub) - return EINVAL; - - es = &__mach_error_systems[system]; - - if (sub >= es->max_sub) - estr = (const char *) es->bad_sub; - else if (code >= es->subsystem[sub].max_code) - return EINVAL; - else - estr = (const char *) _(es->subsystem[sub].codes[code]); - - size_t estrlen = strlen (estr) + 1; - - if (buflen < estrlen) - return ERANGE; - - memcpy (buf, estr, estrlen); - return 0; -} diff --git a/sysdeps/microblaze/Implies b/sysdeps/microblaze/Implies deleted file mode 100644 index 73c766c52e..0000000000 --- a/sysdeps/microblaze/Implies +++ /dev/null @@ -1,4 +0,0 @@ -wordsize-32 -# MicroBlaze uses IEEE 754 floating point. -ieee754/flt-32 -ieee754/dbl-64 diff --git a/sysdeps/microblaze/Makefile b/sysdeps/microblaze/Makefile deleted file mode 100644 index f7c95ae115..0000000000 --- a/sysdeps/microblaze/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -ifeq ($(subdir),elf) -CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused -endif - -ifeq ($(subdir),gmon) -sysdep_routines += _mcount -endif - -ifeq ($(subdir),resource) -sysdep_routines += backtrace_linux -endif diff --git a/sysdeps/microblaze/__longjmp.S b/sysdeps/microblaze/__longjmp.S deleted file mode 100644 index cefe6d35b0..0000000000 --- a/sysdeps/microblaze/__longjmp.S +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Jump to the position specified by ENV, causing the - setjmp call there to return VAL, or 1 if VAL is 0. */ - -/* void __longjmp (__jmp_buf env, int val) */ - -ENTRY(__longjmp) - lwi r1,r5,0 - lwi r2,r5,4 - lwi r13,r5,8 - lwi r14,r5,12 - lwi r15,r5,16 - lwi r16,r5,20 - lwi r17,r5,24 - lwi r18,r5,28 - lwi r19,r5,32 - lwi r20,r5,36 - lwi r21,r5,40 - lwi r22,r5,44 - lwi r23,r5,48 - lwi r24,r5,52 - lwi r25,r5,56 - lwi r26,r5,60 - lwi r27,r5,64 - lwi r28,r5,68 - lwi r29,r5,72 - lwi r30,r5,76 - lwi r31,r5,80 - addk r3,r6,r0 - beqi r3,L(return_1) - rtsd r15,8 - nop -L(return_1): - rtsd r15,8 - addik r3,r0,1 /* delay slot. */ -END(__longjmp) diff --git a/sysdeps/microblaze/_mcount.S b/sysdeps/microblaze/_mcount.S deleted file mode 100644 index 502d966640..0000000000 --- a/sysdeps/microblaze/_mcount.S +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - .global _mcount - .type _mcount, @function -_mcount: - # Save regs. - addik r1, r1,-4 * 24 - swi r31, r1, 4 * 23 - swi r30, r1, 4 * 22 - swi r29, r1, 4 * 21 - swi r28, r1, 4 * 20 - swi r27, r1, 4 * 19 - swi r26, r1, 4 * 18 - swi r25, r1, 4 * 17 - swi r24, r1, 4 * 16 - swi r23, r1, 4 * 15 - swi r22, r1, 4 * 14 - swi r21, r1, 4 * 13 - swi r20, r1, 4 * 12 - swi r19, r1, 4 * 11 - swi r15, r1, 4 * 10 - swi r12, r1, 4 * 9 - swi r11, r1, 4 * 8 - swi r10, r1, 4 * 7 - swi r8, r1, 4 * 6 - swi r7, r1, 4 * 5 - swi r6, r1, 4 * 4 - swi r5, r1, 4 * 3 - swi r4, r1, 4 * 2 - swi r3, r1, 4 * 1 - swi r2, r1, 4 * 0 - -#ifdef SHARED - mfs r20,rpc - addik r20,r20,_GLOBAL_OFFSET_TABLE_+8 - addk r6, r0, r15 # callee is in r15. - brlid r15, __mcount_internal@PLT - lwi r5, r1, 4 * 24 # caller is on the stack. -#else - # Pass from/to in r5 and r6. - addk r6, r0, r15 # callee is in r15. - bralid r15, __mcount_internal - lwi r5, r1, 4 * 24 # caller is on the stack. -#endif - - # Reload regs - lwi r31, r1, 4 * 23 - lwi r30, r1, 4 * 22 - lwi r29, r1, 4 * 21 - lwi r28, r1, 4 * 20 - lwi r27, r1, 4 * 19 - lwi r26, r1, 4 * 18 - lwi r25, r1, 4 * 17 - lwi r24, r1, 4 * 16 - lwi r23, r1, 4 * 15 - lwi r22, r1, 4 * 14 - lwi r21, r1, 4 * 13 - lwi r20, r1, 4 * 12 - lwi r19, r1, 4 * 11 - lwi r15, r1, 4 * 10 - lwi r12, r1, 4 * 9 - lwi r11, r1, 4 * 8 - lwi r10, r1, 4 * 7 - lwi r8, r1, 4 * 6 - lwi r7, r1, 4 * 5 - lwi r6, r1, 4 * 4 - lwi r5, r1, 4 * 3 - lwi r4, r1, 4 * 2 - lwi r3, r1, 4 * 1 - lwi r2, r1, 4 * 0 - - rtsd r15, 8 - addik r1, r1, 4 * 24 - - .size _mcount, . - _mcount diff --git a/sysdeps/microblaze/abort-instr.h b/sysdeps/microblaze/abort-instr.h deleted file mode 100644 index 38469d490a..0000000000 --- a/sysdeps/microblaze/abort-instr.h +++ /dev/null @@ -1,2 +0,0 @@ -/* An instruction which should crash any program is `illegal'. */ -#define ABORT_INSTRUCTION asm ("brki r0, -1") diff --git a/sysdeps/microblaze/asm-syntax.h b/sysdeps/microblaze/asm-syntax.h deleted file mode 100644 index be54a0962f..0000000000 --- a/sysdeps/microblaze/asm-syntax.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#undef ALIGN -#define ALIGN(log) .align 1<. */ - -#include -#include - - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#define __HAVE_64B_ATOMICS 0 -#define USE_ATOMIC_COMPILER_BUILTINS 0 - -/* XXX Is this actually correct? */ -#define ATOMIC_EXCHANGE_USES_CAS 1 - - -/* Microblaze does not have byte and halfword forms of load and reserve and - store conditional. So for microblaze we stub out the 8- and 16-bit forms. */ -#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval) \ - (abort (), 0) - -#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval) \ - (abort (), 0) - -#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - ({ \ - __typeof (*(mem)) __tmp; \ - __typeof (mem) __memp = (mem); \ - int test; \ - __asm __volatile ( \ - " addc r0, r0, r0;" \ - "1: lwx %0, %3, r0;" \ - " addic %1, r0, 0;" \ - " bnei %1, 1b;" \ - " cmp %1, %0, %4;" \ - " bnei %1, 2f;" \ - " swx %5, %3, r0;" \ - " addic %1, r0, 0;" \ - " bnei %1, 1b;" \ - "2:" \ - : "=&r" (__tmp), \ - "=&r" (test), \ - "=m" (*__memp) \ - : "r" (__memp), \ - "r" (oldval), \ - "r" (newval) \ - : "cc", "memory"); \ - __tmp; \ - }) - -#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) - -#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*mem) == 4) \ - __result = __arch_compare_and_exchange_val_32_acq (mem, newval, oldval); \ - else if (sizeof (*mem) == 8) \ - __result = __arch_compare_and_exchange_val_64_acq (mem, newval, oldval); \ - else \ - abort (); \ - __result; \ - }) - -#define atomic_compare_and_exchange_val_rel(mem, newval, oldval) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*mem) == 4) \ - __result = __arch_compare_and_exchange_val_32_acq (mem, newval, oldval); \ - else if (sizeof (*mem) == 8) \ - __result = __arch_compare_and_exchange_val_64_acq (mem, newval, oldval); \ - else \ - abort (); \ - __result; \ - }) - -#define __arch_atomic_exchange_32_acq(mem, value) \ - ({ \ - __typeof (*(mem)) __tmp; \ - __typeof (mem) __memp = (mem); \ - int test; \ - __asm __volatile ( \ - " addc r0, r0, r0;" \ - "1: lwx %0, %4, r0;" \ - " addic %1, r0, 0;" \ - " bnei %1, 1b;" \ - " swx %3, %4, r0;" \ - " addic %1, r0, 0;" \ - " bnei %1, 1b;" \ - : "=&r" (__tmp), \ - "=&r" (test), \ - "=m" (*__memp) \ - : "r" (value), \ - "r" (__memp) \ - : "cc", "memory"); \ - __tmp; \ - }) - -#define __arch_atomic_exchange_64_acq(mem, newval) \ - (abort (), (__typeof (*mem)) 0) - -#define atomic_exchange_acq(mem, value) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*mem) == 4) \ - __result = __arch_atomic_exchange_32_acq (mem, value); \ - else if (sizeof (*mem) == 8) \ - __result = __arch_atomic_exchange_64_acq (mem, value); \ - else \ - abort (); \ - __result; \ - }) - -#define atomic_exchange_rel(mem, value) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*mem) == 4) \ - __result = __arch_atomic_exchange_32_acq (mem, value); \ - else if (sizeof (*mem) == 8) \ - __result = __arch_atomic_exchange_64_acq (mem, value); \ - else \ - abort (); \ - __result; \ - }) - -#define __arch_atomic_exchange_and_add_32(mem, value) \ - ({ \ - __typeof (*(mem)) __tmp; \ - __typeof (mem) __memp = (mem); \ - int test; \ - __asm __volatile ( \ - " addc r0, r0, r0;" \ - "1: lwx %0, %4, r0;" \ - " addic %1, r0, 0;" \ - " bnei %1, 1b;" \ - " add %1, %3, %0;" \ - " swx %1, %4, r0;" \ - " addic %1, r0, 0;" \ - " bnei %1, 1b;" \ - : "=&r" (__tmp), \ - "=&r" (test), \ - "=m" (*__memp) \ - : "r" (value), \ - "r" (__memp) \ - : "cc", "memory"); \ - __tmp; \ - }) - -#define __arch_atomic_exchange_and_add_64(mem, value) \ - (abort (), (__typeof (*mem)) 0) - -#define atomic_exchange_and_add(mem, value) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*mem) == 4) \ - __result = __arch_atomic_exchange_and_add_32 (mem, value); \ - else if (sizeof (*mem) == 8) \ - __result = __arch_atomic_exchange_and_add_64 (mem, value); \ - else \ - abort (); \ - __result; \ - }) - -#define __arch_atomic_increment_val_32(mem) \ - ({ \ - __typeof (*(mem)) __val; \ - int test; \ - __asm __volatile ( \ - " addc r0, r0, r0;" \ - "1: lwx %0, %3, r0;" \ - " addic %1, r0, 0;" \ - " bnei %1, 1b;" \ - " addi %0, %0, 1;" \ - " swx %0, %3, r0;" \ - " addic %1, r0, 0;" \ - " bnei %1, 1b;" \ - : "=&r" (__val), \ - "=&r" (test), \ - "=m" (*mem) \ - : "r" (mem), \ - "m" (*mem) \ - : "cc", "memory"); \ - __val; \ - }) - -#define __arch_atomic_increment_val_64(mem) \ - (abort (), (__typeof (*mem)) 0) - -#define atomic_increment_val(mem) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*(mem)) == 4) \ - __result = __arch_atomic_increment_val_32 (mem); \ - else if (sizeof (*(mem)) == 8) \ - __result = __arch_atomic_increment_val_64 (mem); \ - else \ - abort (); \ - __result; \ - }) - -#define atomic_increment(mem) ({ atomic_increment_val (mem); (void) 0; }) - -#define __arch_atomic_decrement_val_32(mem) \ - ({ \ - __typeof (*(mem)) __val; \ - int test; \ - __asm __volatile ( \ - " addc r0, r0, r0;" \ - "1: lwx %0, %3, r0;" \ - " addic %1, r0, 0;" \ - " bnei %1, 1b;" \ - " rsubi %0, %0, 1;" \ - " swx %0, %3, r0;" \ - " addic %1, r0, 0;" \ - " bnei %1, 1b;" \ - : "=&r" (__val), \ - "=&r" (test), \ - "=m" (*mem) \ - : "r" (mem), \ - "m" (*mem) \ - : "cc", "memory"); \ - __val; \ - }) - -#define __arch_atomic_decrement_val_64(mem) \ - (abort (), (__typeof (*mem)) 0) - -#define atomic_decrement_val(mem) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*(mem)) == 4) \ - __result = __arch_atomic_decrement_val_32 (mem); \ - else if (sizeof (*(mem)) == 8) \ - __result = __arch_atomic_decrement_val_64 (mem); \ - else \ - abort (); \ - __result; \ - }) - -#define atomic_decrement(mem) ({ atomic_decrement_val (mem); (void) 0; }) diff --git a/sysdeps/microblaze/backtrace.c b/sysdeps/microblaze/backtrace.c deleted file mode 100644 index 7cc28ff146..0000000000 --- a/sysdeps/microblaze/backtrace.c +++ /dev/null @@ -1,142 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -extern int -_identify_sighandler (unsigned long fp, unsigned long pc, - unsigned long *pprev_fp, unsigned long *pprev_pc, - unsigned long *retaddr); - -static inline long -get_frame_size (unsigned long instr) -{ - return abs ((short signed) (instr & 0xFFFF)); -} - -static unsigned long * -find_frame_creation (unsigned long *pc) -{ - int i; - - /* NOTE: Distance to search is arbitrary. - 250 works well for most things, - 750 picks up things like tcp_recvmsg, - 1000 needed for fat_fill_super. */ - for (i = 0; i < 1000; i++, pc--) - { - unsigned long instr; - unsigned long frame_size; - - instr = *pc; - - /* Is the instruction of the form - addik r1, r1, foo ? */ - if ((instr & 0xFFFF0000) != 0x30210000) - continue; - - frame_size = get_frame_size (instr); - - if ((frame_size < 8) || (frame_size & 3)) - return NULL; - - return pc; - } - return NULL; -} - -static int -lookup_prev_stack_frame (unsigned long fp, unsigned long pc, - unsigned long *pprev_fp, unsigned long *pprev_pc, - unsigned long *retaddr) -{ - unsigned long *prologue = NULL; - - int is_signalhandler = _identify_sighandler (fp, pc, pprev_fp, - pprev_pc, retaddr); - - if (!is_signalhandler) - { - prologue = find_frame_creation ((unsigned long *) pc); - - if (prologue) - { - long frame_size = get_frame_size (*prologue); - *pprev_fp = fp + frame_size; - if (*retaddr != 0) - *pprev_pc = *retaddr; - else - *pprev_pc = *(unsigned long *) fp; - - *retaddr = 0; - if (!*pprev_pc || (*pprev_pc & 3)) - prologue=0; - } - else - { - *pprev_pc = 0; - *pprev_fp = fp; - *retaddr = 0; - } - } - return (!*pprev_pc || (*pprev_pc & 3)) ? -1 : 0; -} - -int -__backtrace (void **array, int size) -{ - unsigned long pc, fp; - unsigned long ppc, pfp; - /* Return address(r15) is required in the signal handler case, since the - return address of the function which causes the signal may not be - recorded in the stack. */ - unsigned long retaddr; - - int count; - int rc = 0; - - if (size <= 0) - return 0; - - __asm__ __volatile__ ("mfs %0, rpc" - : "=r"(pc)); - - __asm__ __volatile__ ("add %0, r1, r0" - : "=r"(fp)); - - array[0] = (void *) pc; - retaddr = 0; - for (count = 1; count < size; count++) - { - rc = lookup_prev_stack_frame (fp, pc, &pfp, &ppc, &retaddr); - - fp = pfp; - pc = ppc; - array[count] = (void *) pc; - if (rc) - return count; - } - return count; -} - -weak_alias (__backtrace, backtrace) -libc_hidden_def (__backtrace) diff --git a/sysdeps/microblaze/backtrace_linux.c b/sysdeps/microblaze/backtrace_linux.c deleted file mode 100644 index 2fe3c5cb30..0000000000 --- a/sysdeps/microblaze/backtrace_linux.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -int -_identify_sighandler (unsigned long fp, unsigned long pc, - unsigned long *pprev_fp, unsigned long *pprev_pc, - unsigned long *retaddr) -{ - unsigned long *tramp = 0; - struct ucontext *uc; - - if (*retaddr == 0) - { - /* Kernel inserts the tramp between the signal handler frame and the - caller frame in signal handling. */ - tramp = (unsigned long *) pc; - tramp += 2; - if ((*tramp == (0x31800000 | __NR_rt_sigreturn)) - && (*(tramp+1) == 0xb9cc0008)) - { - /* Signal handler function argument are: - int sig_num, siginfo_t * info, void * ucontext - therefore ucontext is the 3rd argument. */ - unsigned long ucptr = ((unsigned long) tramp - - sizeof (struct ucontext)); - uc = (struct ucontext *) ucptr; - *pprev_pc = uc->uc_mcontext.regs.pc; - /* Need to record the return address since the return address of the - function which causes this signal may not be recorded in the - stack. */ - *pprev_fp = uc->uc_mcontext.regs.r1; - *retaddr = uc->uc_mcontext.regs.r15; - /* It is a signal handler. */ - return 1; - } - } - return 0; -} diff --git a/sysdeps/microblaze/bits/endian.h b/sysdeps/microblaze/bits/endian.h deleted file mode 100644 index fff19505b6..0000000000 --- a/sysdeps/microblaze/bits/endian.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -/* MicroBlaze can be either big or little endian. */ -#ifdef _BIG_ENDIAN -# define __BYTE_ORDER __BIG_ENDIAN -# define __FLOAT_WORD_ORDER __BIG_ENDIAN -#else -# define __BYTE_ORDER __LITTLE_ENDIAN -# define __FLOAT_WORD_ORDER __LITTLE_ENDIAN -#endif diff --git a/sysdeps/microblaze/bits/fenv.h b/sysdeps/microblaze/bits/fenv.h deleted file mode 100644 index 7ee3251c1b..0000000000 --- a/sysdeps/microblaze/bits/fenv.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - -/* MicroBlaze supports only round-to-nearest. The software - floating-point support also acts this way. */ -enum - { - __FE_UNDEFINED = 0, - - FE_TONEAREST = -#define FE_TONEAREST 0x1 - FE_TONEAREST, - }; - -#define FE_ALL_EXCEPT 0 - -/* Type representing exception flags (if there were any). */ -typedef unsigned int fexcept_t; - -/* Type representing floating-point environment. */ -typedef unsigned int fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1l) - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef unsigned int femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) -1L) -#endif diff --git a/sysdeps/microblaze/bits/link.h b/sysdeps/microblaze/bits/link.h deleted file mode 100644 index 2e1f06b6b3..0000000000 --- a/sysdeps/microblaze/bits/link.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - -/* Registers for entry into PLT on Microblaze. */ -typedef struct La_microblaze_regs -{ - uint32_t lr_r0; - uint32_t lr_r1; - uint32_t lr_sp; -} La_microblaze_regs; - -/* Return values for calls from PLT on Microblaze. */ -typedef struct La_microblaze_retval -{ - uint32_t lrv_r3; -} La_microblaze_retval; - - -__BEGIN_DECLS - -extern Elf32_Addr la_microblaze_gnu_pltenter (Elf32_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_microblaze_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); - -extern unsigned int la_microblaze_gnu_pltexit (Elf32_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_microblaze_regs *__inregs, - La_microblaze_retval *__outregs, - const char *__symname); - -__END_DECLS diff --git a/sysdeps/microblaze/bits/setjmp.h b/sysdeps/microblaze/bits/setjmp.h deleted file mode 100644 index fd175dac2b..0000000000 --- a/sysdeps/microblaze/bits/setjmp.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define the machine-dependent type `jmp_buf'. */ - -#ifndef _BITS_SETJMP_H -# define _BITS_SETJMP_H 1 - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include directly; use instead." -#endif - -typedef struct __jmp_buf_internal_tag - { - /* There are 21 4-byte registers that should be saved: - r1, r2, r13-r31. Actually, there seems no need to save - r14, r16, r17, r18 (return addresses for interrupt/exception/trap). */ - int *__sp; /* dedicated name for r1. */ - long int __gregs[20]; - } __jmp_buf[1]; - -#endif diff --git a/sysdeps/microblaze/bsd-_setjmp.S b/sysdeps/microblaze/bsd-_setjmp.S deleted file mode 100644 index 75dff29bfe..0000000000 --- a/sysdeps/microblaze/bsd-_setjmp.S +++ /dev/null @@ -1,22 +0,0 @@ -/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define setjmp_name _setjmp -#define SAVEMASK 0 - -#include diff --git a/sysdeps/microblaze/bsd-setjmp.S b/sysdeps/microblaze/bsd-setjmp.S deleted file mode 100644 index 66456749cd..0000000000 --- a/sysdeps/microblaze/bsd-setjmp.S +++ /dev/null @@ -1,22 +0,0 @@ -/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define setjmp_name setjmp -#define SAVEMASK 1 - -#include diff --git a/sysdeps/microblaze/crti.S b/sysdeps/microblaze/crti.S deleted file mode 100644 index 2affed2aed..0000000000 --- a/sysdeps/microblaze/crti.S +++ /dev/null @@ -1,88 +0,0 @@ -/* Special .init and .fini section support for MicroBlaze. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - - .section .init,"ax",@progbits - .align 2 - .globl _init - .type _init, @function -_init: - addik r1,r1,-32 - swi r20,r1,28 - mfs r20,rpc - addik r20,r20,_GLOBAL_OFFSET_TABLE_+8 - lwi r3,r20,PREINIT_FUNCTION@GOT -#if PREINIT_FUNCTION_WEAK - beqid r3,$Lno_weak_fn: - swi r15,r1,0 - brlid r15,PREINIT_FUNCTION@PLT -$Lno_weak_fn: -#else - swi r15,r1,0 - brald r15,r3 -#endif - nop # Unfilled delay slot - - .section .fini,"ax",@progbits - .align 2 - .globl _fini - .type _fini, @function -_fini: - addik r1,r1,-32 - swi r20,r1,28 - swi r15,r1,0 - mfs r20,rpc - addik r20,r20,_GLOBAL_OFFSET_TABLE_+8 diff --git a/sysdeps/microblaze/crtn.S b/sysdeps/microblaze/crtn.S deleted file mode 100644 index 4f2766a32f..0000000000 --- a/sysdeps/microblaze/crtn.S +++ /dev/null @@ -1,51 +0,0 @@ -/* Special .init and .fini section support for MicroBlaze. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - -#include - - .section .init,"ax",@progbits - lwi r15,r1,0 - lwi r20,r1,28 - rtsd r15,8 - addik r1,r1,32 - - .section .fini,"ax",@progbits - lwi r15,r1,0 - lwi r20,r1,28 - rtsd r15,8 - addik r1,r1,32 diff --git a/sysdeps/microblaze/dl-machine.h b/sysdeps/microblaze/dl-machine.h deleted file mode 100644 index cc80b30868..0000000000 --- a/sysdeps/microblaze/dl-machine.h +++ /dev/null @@ -1,299 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "microblaze" - -#include -#include - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf32_Ehdr *ehdr) -{ - return (ehdr->e_machine == EM_MICROBLAZE); -} - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. This must be inlined in a function which - uses global data. */ -static inline Elf32_Addr -elf_machine_dynamic (void) -{ - /* This produces a GOTOFF reloc that resolves to zero at link time, so in - fact just loads from the GOT register directly. By doing it without - an asm we can let the compiler choose any register. */ - - Elf32_Addr got_entry_0; - __asm__ __volatile__( - "lwi %0,r20,0" - :"=r"(got_entry_0) - ); - return got_entry_0; -} - -/* Return the run-time load address of the shared object. */ -static inline Elf32_Addr -elf_machine_load_address (void) -{ - /* Compute the difference between the runtime address of _DYNAMIC as seen - by a GOTOFF reference, and the link-time address found in the special - unrelocated first GOT entry. */ - - Elf32_Addr dyn; - __asm__ __volatile__ ( - "addik %0,r20,_DYNAMIC@GOTOFF" - : "=r"(dyn) - ); - return dyn - elf_machine_dynamic (); -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int __attribute__ ((always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - extern void _dl_runtime_resolve (Elf32_Word); - extern void _dl_runtime_profile (Elf32_Word); - - return lazy; -} - -/* The PLT uses Elf32_Rela relocs. */ -#define elf_machine_relplt elf_machine_rela - -/* Mask identifying addresses reserved for the user program, - where the dynamic linker should not map anything. */ -#define ELF_MACHINE_USER_ADDRESS_MASK 0x80000000UL - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START asm ("\ - .text\n\ - .globl _start\n\ - .type _start,@function\n\ -_start:\n\ - addk r5,r0,r1\n\ - addk r3,r0,r0\n\ -1:\n\ - addik r5,r5,4\n\ - lw r4,r5,r0\n\ - bneid r4,1b\n\ - addik r3,r3,1\n\ - addik r3,r3,-1\n\ - addk r5,r0,r1\n\ - sw r3,r5,r0\n\ - addik r1,r1,-24\n\ - sw r15,r1,r0\n\ - brlid r15,_dl_start\n\ - nop\n\ - /* FALLTHRU. */\n\ -\n\ - .globl _dl_start_user\n\ - .type _dl_start_user,@function\n\ -_dl_start_user:\n\ - mfs r20,rpc\n\ - addik r20,r20,_GLOBAL_OFFSET_TABLE_+8\n\ - lwi r4,r20,_dl_skip_args@GOTOFF\n\ - lwi r5,r1,24\n\ - rsubk r5,r4,r5\n\ - addk r4,r4,r4\n\ - addk r4,r4,r4\n\ - addk r1,r1,r4\n\ - swi r5,r1,24\n\ - swi r3,r1,20\n\ - addk r6,r5,r0\n\ - addk r5,r5,r5\n\ - addk r5,r5,r5\n\ - addik r7,r1,28\n\ - addk r8,r7,r5\n\ - addik r8,r8,4\n\ - lwi r5,r20,_rtld_local@GOTOFF\n\ - brlid r15,_dl_init\n\ - nop\n\ - lwi r5,r1,24\n\ - lwi r3,r1,20\n\ - addk r4,r5,r5\n\ - addk r4,r4,r4\n\ - addik r6,r1,28\n\ - addk r7,r6,r4\n\ - addik r7,r7,4\n\ - addik r15,r20,_dl_fini@GOTOFF\n\ - addik r15,r15,-8\n\ - brad r3\n\ - addik r1,r1,24\n\ - nop\n\ - .size _dl_start_user, . - _dl_start_user\n\ - .previous"); - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or - TLS variable, so undefined references should not be allowed to - define the value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. */ -#ifndef RTLD_BOOTSTRAP -# define elf_machine_type_class(type) \ - (((type) == R_MICROBLAZE_JUMP_SLOT || \ - (type) == R_MICROBLAZE_TLSDTPREL32 || \ - (type) == R_MICROBLAZE_TLSDTPMOD32 || \ - (type) == R_MICROBLAZE_TLSTPREL32) \ - * ELF_RTYPE_CLASS_PLT \ - | ((type) == R_MICROBLAZE_COPY) * ELF_RTYPE_CLASS_COPY) -#else -# define elf_machine_type_class(type) \ - (((type) == R_MICROBLAZE_JUMP_SLOT) * ELF_RTYPE_CLASS_PLT \ - | ((type) == R_MICROBLAZE_COPY) * ELF_RTYPE_CLASS_COPY) -#endif - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_MICROBLAZE_JUMP_SLOT - -/* The microblaze never uses Elf32_Rel relocations. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -static inline Elf32_Addr -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf32_Rela *reloc, - Elf32_Addr *reloc_addr, Elf32_Addr value) -{ - return *reloc_addr = value; -} - -/* Return the final value of a plt relocation. Ignore the addend. */ -static inline Elf32_Addr -elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, - Elf32_Addr value) -{ - return value; -} - -#endif /* !dl_machine_h. */ - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER microblaze_gnu_pltenter -#define ARCH_LA_PLTEXIT microblaze_gnu_pltexit - -#ifdef RESOLVE_MAP - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ - -/* Macro to put 32-bit relocation value into 2 words. */ -#define PUT_REL_64(rel_addr,val) \ - do { \ - ((unsigned short *)(rel_addr))[1] = (val) >> 16; \ - ((unsigned short *)(rel_addr))[3] = (val) & 0xffff; \ - } while (0) - -auto inline void __attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, - const Elf32_Sym *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - const int r_type = ELF32_R_TYPE (reloc->r_info); - - if (__builtin_expect (r_type == R_MICROBLAZE_64_PCREL, 0)) - PUT_REL_64 (reloc_addr, map->l_addr + reloc->r_addend); - else if (r_type == R_MICROBLAZE_REL) - *reloc_addr = map->l_addr + reloc->r_addend; - else - { - const Elf32_Sym *const refsym = sym; - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value; - - value += reloc->r_addend; - if (r_type == R_MICROBLAZE_GLOB_DAT || - r_type == R_MICROBLAZE_JUMP_SLOT || - r_type == R_MICROBLAZE_32) - { - *reloc_addr = value; - } - else if (r_type == R_MICROBLAZE_COPY) - { - if (sym != NULL && (sym->st_size > refsym->st_size - || (sym->st_size < refsym->st_size && GLRO (dl_verbose))) ) - { - const char *strtab; - - strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - } - else if (r_type == R_MICROBLAZE_NONE) - { - } -#if !defined RTLD_BOOTSTRAP - else if (r_type == R_MICROBLAZE_TLSDTPMOD32) - { - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; - } - else if (r_type == R_MICROBLAZE_TLSDTPREL32) - { - if (sym != NULL) - *reloc_addr = sym->st_value + reloc->r_addend; - } - else if (r_type == R_MICROBLAZE_TLSTPREL32) - { - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = sym->st_value + sym_map->l_tls_offset + reloc->r_addend; - } - } -#endif - else - { - _dl_reloc_bad_type (map, r_type, 0); - } - } -} - -auto inline void -elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, - void *const reloc_addr_arg) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - PUT_REL_64 (reloc_addr, l_addr + reloc->r_addend); -} - -auto inline void -elf_machine_lazy_rel (struct link_map *map, - Elf32_Addr l_addr, const Elf32_Rela *reloc, - int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); - if (ELF32_R_TYPE (reloc->r_info) == R_MICROBLAZE_JUMP_SLOT) - *reloc_addr += l_addr; - else - _dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 1); -} - -#endif /* RESOLVE_MAP. */ diff --git a/sysdeps/microblaze/dl-tls.h b/sysdeps/microblaze/dl-tls.h deleted file mode 100644 index 1ffe0abac2..0000000000 --- a/sysdeps/microblaze/dl-tls.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - -extern void *__tls_get_addr (tls_index *ti); diff --git a/sysdeps/microblaze/dl-trampoline.S b/sysdeps/microblaze/dl-trampoline.S deleted file mode 100644 index de3b4b79d3..0000000000 --- a/sysdeps/microblaze/dl-trampoline.S +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -#ifndef PROF - - .text - .globl _dl_runtime_resolve - .type _dl_runtime_resolve, @function - .align 4 -_dl_runtime_resolve: - addik r1,r1,-40 - swi r5,r1,12 - swi r6,r1,16 - swi r7,r1,20 - swi r8,r1,24 - swi r9,r1,28 - swi r10,r1,32 - swi r15,r1,0 - addk r5,r0,r4 - brlid r15, _dl_fixup - addk r6,r0,r3; /* delay slot. */ - lwi r10,r1,32 - lwi r9,r1,28 - lwi r8,r1,24 - lwi r7,r1,20 - lwi r6,r1,16 - lwi r5,r1,12 - lwi r15,r1,0 - brad r3 - addik r1,r1,40; /* delay slot. */ - .size _dl_runtime_resolve, . - _dl_runtime_resolve - - .text - .globl _dl_runtime_profile - .type _dl_runtime_profile, @function - .align 4 -_dl_runtime_profile: - addik r1,r1,-40 - swi r5,r1,12 - swi r6,r1,16 - swi r7,r1,20 - swi r8,r1,24 - swi r9,r1,28 - swi r10,r1,32 - swi r15,r1,0 - addk r5,r0,r4 - brlid r15, _dl_profile_fixup - addk r6,r0,r3; /* delay slot. */ - lwi r10,r1,32 - lwi r9,r1,28 - lwi r8,r1,24 - lwi r7,r1,20 - lwi r6,r1,16 - lwi r5,r1,12 - lwi r15,r1,0 - brad r3 - addik r1,r1,40; /* delay slot. */ - .size _dl_runtime_profile, . - _dl_runtime_profile - -#else - - .text - .globl _dl_runtime_resolve - .type _dl_runtime_resolve, @function - .align 4 -_dl_runtime_resolve: - addik r1,r1,-40 - swi r5,r1,12 - swi r6,r1,16 - swi r7,r1,20 - swi r8,r1,24 - swi r9,r1,28 - swi r10,r1,32 - swi r15,r1,0 - addk r5,r0,r4 - brlid r15, fixup - addk r6,r0,r3; /* delay slot. */ - lwi r10,r1,32 - lwi r9,r1,28 - lwi r8,r1,24 - lwi r7,r1,20 - lwi r6,r1,16 - lwi r5,r1,12 - lwi r15,r1,0 - brad r3 - addik r1,r1,40; /* delay slot. */ - .size _dl_runtime_resolve, . - _dl_runtime_resolve - .globl _dl_runtime_profile - .set _dl_runtime_profile, _dl_runtime_resolve - -#endif diff --git a/sysdeps/microblaze/gccframe.h b/sysdeps/microblaze/gccframe.h deleted file mode 100644 index 35fd1cda56..0000000000 --- a/sysdeps/microblaze/gccframe.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define FIRST_PSEUDO_REGISTER 78 - -#include diff --git a/sysdeps/microblaze/jmpbuf-unwind.h b/sysdeps/microblaze/jmpbuf-unwind.h deleted file mode 100644 index 06dd83adce..0000000000 --- a/sysdeps/microblaze/jmpbuf-unwind.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((void *) (address) < (void *) demangle ((jmpbuf)[0].__sp)) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf regs) -{ - void *sp = (void *) regs[0].__sp; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return (uintptr_t) sp; -} - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/microblaze/ldsodefs.h b/sysdeps/microblaze/ldsodefs.h deleted file mode 100644 index 6e01c197d0..0000000000 --- a/sysdeps/microblaze/ldsodefs.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MICROBLAZE_LDSODEFS_H -#define _MICROBLAZE_LDSODEFS_H 1 - -#include - -struct La_microblaze_regs; -struct La_microblaze_retval; - -#define ARCH_PLTENTER_MEMBERS \ - Elf32_Addr (*microblaze_gnu_pltenter) (Elf32_Sym *, unsigned int, \ - uintptr_t *, \ - uintptr_t *, \ - struct La_microblaze_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep); - -#define ARCH_PLTEXIT_MEMBERS \ - unsigned int (*microblaze_gnu_pltexit) (Elf32_Sym *, unsigned int, \ - uintptr_t *, \ - uintptr_t *, \ - const struct La_microblaze_regs *, \ - struct La_microblaze_retval *, \ - const char *); - -#include_next - -#endif diff --git a/sysdeps/microblaze/libc-tls.c b/sysdeps/microblaze/libc-tls.c deleted file mode 100644 index a43d6692e2..0000000000 --- a/sysdeps/microblaze/libc-tls.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* On Microblaze, linker optimizations are not required, so __tls_get_addr - can be called even in statically linked binaries. In this case module - must be always 1 and PT_TLS segment exist in the binary, otherwise it - would not link. */ - -void * -__tls_get_addr (tls_index *ti) -{ - dtv_t *dtv = THREAD_DTV (); - return (char *) dtv[1].pointer.val + ti->ti_offset; -} diff --git a/sysdeps/microblaze/libm-test-ulps b/sysdeps/microblaze/libm-test-ulps deleted file mode 100644 index 0806905370..0000000000 --- a/sysdeps/microblaze/libm-test-ulps +++ /dev/null @@ -1,333 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acosh": -double: 1 -idouble: 1 - -Function: "asinh": -double: 1 -float: 1 -ifloat: 1 - -Function: "atan2": -float: 1 -ifloat: 1 - -Function: "atanh": -float: 1 -ifloat: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "casin": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "casinh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catan": -float: 1 -ifloat: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "catanh": -float: 1 -ifloat: 1 - -Function: "cbrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "clog": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 - -Function: Real part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "clog10": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cos": -float: 1 -ifloat: 1 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "cpow": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csqrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "csqrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Real part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "erf": -double: 1 -idouble: 1 - -Function: "erfc": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp10": -double: 1 -idouble: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "gamma": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "hypot": -double: 1 -idouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "lgamma": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "log": -float: 1 -ifloat: 1 - -Function: "log10": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "log1p": -float: 1 -ifloat: 1 - -Function: "pow": -float: 1 -ifloat: 1 - -Function: "pow10": -double: 1 -idouble: 1 - -Function: "sin": -float: 1 -ifloat: 1 - -Function: "sincos": -float: 1 -ifloat: 1 - -Function: "tgamma": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -# end of automatic generation diff --git a/sysdeps/microblaze/libm-test-ulps-name b/sysdeps/microblaze/libm-test-ulps-name deleted file mode 100644 index 1edbaa8d98..0000000000 --- a/sysdeps/microblaze/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -MicroBlaze diff --git a/sysdeps/microblaze/machine-gmon.h b/sysdeps/microblaze/machine-gmon.h deleted file mode 100644 index a73d495e23..0000000000 --- a/sysdeps/microblaze/machine-gmon.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* We need a special version of the `mcount' function because it has - to preserve more registers than your usual function. */ - -void __mcount_internal (unsigned long frompc, unsigned long selfpc); - -#define _MCOUNT_DECL(frompc, selfpc) \ -void __mcount_internal (unsigned long frompc, unsigned long selfpc) - - -/* Define MCOUNT as empty since we have the implementation in another - file. */ -#define MCOUNT diff --git a/sysdeps/microblaze/math_private.h b/sysdeps/microblaze/math_private.h deleted file mode 100644 index d82e8bf820..0000000000 --- a/sysdeps/microblaze/math_private.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef MICROBLAZE_MATH_PRIVATE_H -#define MICROBLAZE_MATH_PRIVATE_H 1 - -/* Suppress use of exceptions here to avoid build errors if the FE_* - macros aren't definied. Only allow rounding modes implemented for - MicroBlaze. - - This does mean that some code will silently fail to report exceptions, - set rounding mode as expected, etc., but it allows math code to compile - that otherwise wouldn't (such as math/s_fma.c) and so is valuable. - - We intentionally ignore the "exception" arguments of functions that - take an exception, since we can't even evaluate the argument - without causing a build failure. The extra level of statement - expression wrapping avoids "statement with no effect" warnings. - Since the callers don't check for errors anyway, we just claim - success in every case. - - The overrides for libc_ functions must happen before we include - the generic math_private.h, and the overrides for regular - functions must happen afterwards, to avoid clashing with - the declarations of those functions. */ - -#define libc_fesetround(rnd) ({ 0; }) -#define libc_fetestexcept(exc) ({ 0; }) -#define libc_feholdexcept_setround(env, exc) ({ (void) (env); 0; }) -#define libc_feupdateenv_test(env, exc) ({ (void) (env); 0; }) - -/* Enable __finitel, __isinfl, and __isnanl for binary compatibility - when built without long double support. */ -#define LDBL_CLASSIFY_COMPAT 1 - -#include_next - -#define feraiseexcept(excepts) ({ 0; }) -#define __feraiseexcept(excepts) ({ 0; }) -#define feclearexcept(exc) ({ 0; }) - -#endif diff --git a/sysdeps/microblaze/memusage.h b/sysdeps/microblaze/memusage.h deleted file mode 100644 index 644de0765e..0000000000 --- a/sysdeps/microblaze/memusage.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("r1"); stack_ptr; }) - -#include diff --git a/sysdeps/microblaze/nptl/Makefile b/sysdeps/microblaze/nptl/Makefile deleted file mode 100644 index 3627748ad8..0000000000 --- a/sysdeps/microblaze/nptl/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2005-2017 Free Software Foundation, Inc. -# -# This file is part of the GNU C Library. -# -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# . - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif diff --git a/sysdeps/microblaze/nptl/bits/pthreadtypes-arch.h b/sysdeps/microblaze/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index d687e2c076..0000000000 --- a/sysdeps/microblaze/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -# define _BITS_PTHREADTYPES_ARCH_H 1 - -# include - -# define __SIZEOF_PTHREAD_ATTR_T 36 -# define __SIZEOF_PTHREAD_MUTEX_T 24 -# define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -# define __SIZEOF_PTHREAD_COND_T 48 -# define __SIZEOF_PTHREAD_CONDATTR_T 4 -# define __SIZEOF_PTHREAD_RWLOCK_T 32 -# define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -# define __SIZEOF_PTHREAD_BARRIER_T 20 -# define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - -/* Definitions for internal mutex struct. */ -#define __PTHREAD_COMPAT_PADDING_MID -#define __PTHREAD_COMPAT_PADDING_END -#define __PTHREAD_MUTEX_LOCK_ELISION 0 - -#define __LOCK_ALIGNMENT -#define __ONCE_ALIGNMENT - -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; -# if __BYTE_ORDER == __BIG_ENDIAN - unsigned char __pad1; - unsigned char __pad2; - unsigned char __shared; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; -# else - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; - unsigned char __shared; - unsigned char __pad1; - unsigned char __pad2; -# endif - int __cur_writer; -}; - -# define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - -#endif /* bits/pthreadtypes.h. */ diff --git a/sysdeps/microblaze/nptl/bits/semaphore.h b/sysdeps/microblaze/nptl/bits/semaphore.h deleted file mode 100644 index f1d25cdfef..0000000000 --- a/sysdeps/microblaze/nptl/bits/semaphore.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - -#define __SIZEOF_SEM_T 16 - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/sysdeps/microblaze/nptl/pthreaddef.h b/sysdeps/microblaze/nptl/pthreaddef.h deleted file mode 100644 index 7141fb414f..0000000000 --- a/sysdeps/microblaze/nptl/pthreaddef.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 16 - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME __builtin_frame_address (0) diff --git a/sysdeps/microblaze/nptl/tcb-offsets.sym b/sysdeps/microblaze/nptl/tcb-offsets.sym deleted file mode 100644 index 614f0dfed6..0000000000 --- a/sysdeps/microblaze/nptl/tcb-offsets.sym +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include - --- - --- Abuse tls.h macros to derive offsets relative to the thread register. -#define thread_offsetof(mem) (long)(offsetof (struct pthread, mem) - sizeof (struct pthread)) - -MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) -TID_OFFSET thread_offsetof (tid) diff --git a/sysdeps/microblaze/nptl/tls.h b/sysdeps/microblaze/nptl/tls.h deleted file mode 100644 index 9703484c0e..0000000000 --- a/sysdeps/microblaze/nptl/tls.h +++ /dev/null @@ -1,143 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TLS_H -# define _TLS_H 1 - -# include - -#ifndef __ASSEMBLER__ -# include -# include -# include -# include - -#else /* __ASSEMBLER__ */ -# include -#endif /* __ASSEMBLER__ */ - -#ifndef __ASSEMBLER__ - -/* Get system call information. */ -# include - -/* The TP points to the start of the thread blocks. */ -# define TLS_DTV_AT_TP 1 -# define TLS_TCB_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include - -typedef struct -{ - dtv_t *dtv; - void *private; -} tcbhead_t; - -#define READ_THREAD_POINTER() \ - ({ register void *__microblaze_thread_area asm ("r21"); \ - __microblaze_thread_area; }) - -/* This is the size of the initial TCB. */ -# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t) - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE sizeof (tcbhead_t) - -/* This is the size we need before TCB. */ -# define TLS_PRE_TCB_SIZE sizeof (struct pthread) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(tcbp, dtvp) \ - (((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1) - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtv) \ - (THREAD_DTV() = (dtv)) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(tcbp) \ - (((tcbhead_t *) (tcbp))->dtv) - -/* Code to initially initialize the thread pointer. - r21 is reserved for thread pointer. */ -# define TLS_INIT_TP(tcbp) \ - ({ __asm __volatile ("or r21,r0,%0" : : "r" ((void *)tcbp)); NULL; }) - -# define TLS_DEFINE_INIT_TP(tp, pd) void *tp = (pd) + 1 - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - (((tcbhead_t *) READ_THREAD_POINTER())->dtv) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF \ - (((struct pthread *) READ_THREAD_POINTER()) - 1) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF \ - CONST_THREAD_AREA (32, sizeof (struct pthread)) - -/* Read member of the thread descriptor directly. */ -# define THREAD_GETMEM(descr, member) (descr->member) - -/* Same as THREAD_GETMEM, but the member offset can be non-constant. */ -# define THREAD_GETMEM_NC(descr, member, idx) \ - (descr->member[idx]) - -/* Set member of the thread descriptor directly. */ -# define THREAD_SETMEM(descr, member, value) \ - (descr->member = (value)) - -/* Same as THREAD_SETMEM, but the member offset can be non-constant. */ -# define THREAD_SETMEM_NC(descr, member, idx, value) \ - (descr->member[idx] = (value)) - -/* Get and set the global scope generation counter in struct pthread. */ -# define THREAD_GSCOPE_FLAG_UNUSED 0 -# define THREAD_GSCOPE_FLAG_USED 1 -# define THREAD_GSCOPE_FLAG_WAIT 2 -# define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -# define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -# define THREAD_GSCOPE_WAIT() \ - GL (dl_wait_lookup_done) () - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h. */ diff --git a/sysdeps/microblaze/preconfigure b/sysdeps/microblaze/preconfigure deleted file mode 100644 index 90e2e631d9..0000000000 --- a/sysdeps/microblaze/preconfigure +++ /dev/null @@ -1,3 +0,0 @@ -case "$machine" in -microblaze*) base_machine=microblaze machine=microblaze ;; -esac diff --git a/sysdeps/microblaze/s_fma.c b/sysdeps/microblaze/s_fma.c deleted file mode 100644 index d9613fa67c..0000000000 --- a/sysdeps/microblaze/s_fma.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/microblaze/s_fmaf.c b/sysdeps/microblaze/s_fmaf.c deleted file mode 100644 index aa5c9b2d91..0000000000 --- a/sysdeps/microblaze/s_fmaf.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/microblaze/setjmp.S b/sysdeps/microblaze/setjmp.S deleted file mode 100644 index 79b8aec490..0000000000 --- a/sysdeps/microblaze/setjmp.S +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* This source produces 3 functions: - __sigsetjmp (jmpbuf,savemask) - setjmp (jmpbuf) - equivalent to __sigsetjump (jmpbuf, 1) - _setjmp (jmpbuf) - equivalent to __sigsetjump (jmpbuf, 0) -*/ - -#ifndef setjmp_name -# define setjmp_name __sigsetjmp -# define SET_MASK_ARG -#else -# define SET_MASK_ARG addik r6,r0,SAVEMASK -#endif - -ENTRY (setjmp_name) - swi r1,r5,0 - swi r2,r5,4 - swi r13,r5,8 - swi r14,r5,12 - swi r15,r5,16 - swi r16,r5,20 - swi r17,r5,24 - swi r18,r5,28 - swi r19,r5,32 - swi r20,r5,36 - swi r21,r5,40 - swi r22,r5,44 - swi r23,r5,48 - swi r24,r5,52 - swi r25,r5,56 - swi r26,r5,60 - swi r27,r5,64 - swi r28,r5,68 - swi r29,r5,72 - swi r30,r5,76 - swi r31,r5,80 - - SET_MASK_ARG - - /* Make a tail call to __sigjmp_save; it takes the same args. */ -#ifdef PIC - /* We cannot use the PLT, because it requires that r20 be set, but - we can't save and restore our caller's value. Instead, we do an - indirect jump through the GOT, using the temporary register - %ecx, which is call-clobbered. */ - mfs r12,rpc - addik r12,r12,_GLOBAL_OFFSET_TABLE_+8 - lwi r12,r12,__sigjmp_save@GOT - brad r12 -#else - brid __sigjmp_save -#endif - nop -END (setjmp_name) - -libc_hidden_def (setjmp_name) diff --git a/sysdeps/microblaze/sfp-machine.h b/sysdeps/microblaze/sfp-machine.h deleted file mode 100644 index e4ad79e6bd..0000000000 --- a/sysdeps/microblaze/sfp-machine.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/microblaze/sotruss-lib.c b/sysdeps/microblaze/sotruss-lib.c deleted file mode 100644 index cbb7cd21bc..0000000000 --- a/sysdeps/microblaze/sotruss-lib.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Override generic sotruss-lib.c to define actual functions for MicroBlaze. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define HAVE_ARCH_PLTENTER -#define HAVE_ARCH_PLTEXIT - -#include - -ElfW(Addr) -la_microblaze_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - La_microblaze_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - print_enter (refcook, defcook, symname, - regs->lr_r0, regs->lr_r1, regs->lr_sp, - *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -la_microblaze_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, - uintptr_t *refcook, - uintptr_t *defcook, - const struct La_microblaze_regs *inregs, - struct La_microblaze_retval *outregs, - const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_r3); - - return 0; -} diff --git a/sysdeps/microblaze/stackinfo.h b/sysdeps/microblaze/stackinfo.h deleted file mode 100644 index 3062b1e69d..0000000000 --- a/sysdeps/microblaze/stackinfo.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -# define _STACKINFO_H 1 - -# include - -/* On MicroBlaze the stack grows down. */ -# define _STACK_GROWS_DOWN 1 - -/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK is - * present, but it is presumed absent. */ -# define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X) - -#endif /* stackinfo.h. */ diff --git a/sysdeps/microblaze/start.S b/sysdeps/microblaze/start.S deleted file mode 100644 index f94e816ee0..0000000000 --- a/sysdeps/microblaze/start.S +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - .text - .globl _start - .type _start,@function -_start: - /* On entry the stack contains the following args: - r1+0 - argc - r1+4 - argv[0] - ... - r1+4*(argc-1) - argv[argc-1] - r1+4*argc - NULL - r1+4*argc + 4 - envp[0] - ... - NULL - */ - addk r3,r0,r0 - addk r5,r1,r0 -1: - addik r5,r5,4 - lw r4,r5,r0 - bneid r4,1b - addik r3,r3,1 - addik r6,r3,-1 - sw r6,r1,r0 - addik r7,r1,4 - addik r1,r1,-24 -#ifdef SHARED - /* Setup PIC. */ - mfs r20,rpc - addik r20,r20,_GLOBAL_OFFSET_TABLE_+8 - lwi r5,r20,main@GOT - lwi r8,r20,__libc_csu_init@GOT - lwi r9,r20,__libc_csu_fini@GOT - brid __libc_start_main@PLT - addk r10,r0,r0 -#else - addik r5,r0,main - addik r8,r0,__libc_csu_init - addik r9,r0,__libc_csu_fini - brid __libc_start_main - addk r10,r0,r0 -#endif - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start diff --git a/sysdeps/microblaze/sysdep.h b/sysdeps/microblaze/sysdep.h deleted file mode 100644 index 1f1ca3709b..0000000000 --- a/sysdeps/microblaze/sysdep.h +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef __ASSEMBLER__ - -/* Syntactic details of assembler. */ - -# define ALIGNARG(log2) log2 -# define ASM_SIZE_DIRECTIVE(name) .size name,.-name - -/* Define an entry point visible from C. */ -# define ENTRY(name) \ - .globl C_SYMBOL_NAME(name); \ - .type C_SYMBOL_NAME(name),@function; \ - .align ALIGNARG(2); \ - C_LABEL(name) \ - CALL_MCOUNT - -# undef END -# define END(name) ASM_SIZE_DIRECTIVE(name) - - -/* If compiled for profiling, call `_mcount' at the start of each function. */ -# ifdef PROF -/* The mcount code relies on a normal frame pointer being on the stack - to locate our caller, so push one just for its benefit. */ -# define CALL_MCOUNT \ - addik r1,r1,-4; \ - swi r15,r1,0; \ - brlid r15,JUMPTARGET(mcount); \ - nop; \ - lwi r15,r1,0; \ - addik r1,r1,4; -# else -# define CALL_MCOUNT /* Do nothing. */ -# endif - -/* Since C identifiers are not normally prefixed with an underscore - on this system, the asm identifier `syscall_error' intrudes on the - C name space. Make sure we use an innocuous name. */ -# define syscall_error __syscall_error -# define mcount _mcount - -# define PSEUDO(name, syscall_name, args) \ - .globl syscall_error; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); - -# define ret \ - rtsd r15,8; nop; - -# undef PSEUDO_END -# define PSEUDO_END(name) \ - END (name) - -# undef JUMPTARGET -# ifdef PIC -# define JUMPTARGET(name) name##@PLTPC -# else -# define JUMPTARGET(name) name -# endif - -/* Local label name for asm code. */ -# ifndef L -# define L(name) $L##name -# endif - -# endif /* __ASSEMBLER__ */ diff --git a/sysdeps/microblaze/tls-macros.h b/sysdeps/microblaze/tls-macros.h deleted file mode 100644 index a12df06e24..0000000000 --- a/sysdeps/microblaze/tls-macros.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define TLS_LD(x) \ - ({ \ - char *__result; \ - int __offset; \ - extern void *__tls_get_addr (void *); \ - asm ("mfs r20,rpc \n" \ - "addik r20,r20,_GLOBAL_OFFSET_TABLE_+8\n" \ - "addik %0,r20," #x "@TLSLDM" \ - : "=r" (__result)); \ - __result = (char *) __tls_get_addr (__result); \ - asm ("addik %0,r0,"#x"@TLSDTPREL" \ - : "=r" (__offset)); \ - (int *) (__result + __offset); }) - - -#define TLS_GD(x) \ - ({ \ - int *__result; \ - extern void *__tls_get_addr (void *); \ - asm ("mfs r20,rpc\n" \ - "addik r20,r20,_GLOBAL_OFFSET_TABLE_+8\n" \ - "addik %0,r20," #x "@TLSGD" \ - : "=r" (__result)); \ - (int *) __tls_get_addr (__result); }) - -#define TLS_LE(x) TLS_LD(x) - -#define TLS_IE(x) TLS_GD(x) diff --git a/sysdeps/microblaze/tst-audit.h b/sysdeps/microblaze/tst-audit.h deleted file mode 100644 index e08811ccca..0000000000 --- a/sysdeps/microblaze/tst-audit.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. MicroBlaze version. - - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define pltenter la_microblaze_gnu_pltenter -#define pltexit la_microblaze_gnu_pltexit -#define La_regs La_microblaze_regs -#define La_retval La_microblaze_retval -#define int_retval lrv_r3 diff --git a/sysdeps/mips/Implies b/sysdeps/mips/Implies deleted file mode 100644 index 8c18cb3034..0000000000 --- a/sysdeps/mips/Implies +++ /dev/null @@ -1,3 +0,0 @@ -# MIPS uses IEEE 754 floating point. -ieee754/flt-32 -ieee754/dbl-64 diff --git a/sysdeps/mips/Makefile b/sysdeps/mips/Makefile deleted file mode 100644 index 7c1d77941e..0000000000 --- a/sysdeps/mips/Makefile +++ /dev/null @@ -1,85 +0,0 @@ -ifeq ($(subdir),misc) -sysdep_headers += regdef.h fpregdef.h sys/regdef.h sys/fpregdef.h \ - sys/asm.h sgidefs.h -endif - -ifeq ($(subdir),setjmp) -sysdep_routines += setjmp_aux -endif - -ifeq ($(subdir),rt) -librt-sysdep_routines += rt-sysdep -librt-shared-only-routines += rt-sysdep -endif - -ifeq ($(subdir),debug) -CFLAGS-backtrace.c += -funwind-tables -endif - -ifeq ($(subdir),csu) -CPPFLAGS-crti.S += $(pic-ccflag) -CPPFLAGS-crtn.S += $(pic-ccflag) -endif - -ifeq ($(subdir),nptl) -CPPFLAGS-pt-crti.S += $(pic-ccflag) -CPPFLAGS-crtn.S += $(pic-ccflag) -endif - -ASFLAGS-.os += $(pic-ccflag) - -ifeq ($(subdir),elf) -ifneq ($(o32-fpabi),) -tests += tst-abi-interlink - -fpabi-modules-names = -fpabi_list = -ifneq (,$(filter $(o32-fpabi),32 xx xxo)) -fpabi-modules-names += tst-abi-fp32mod -CFLAGS-tst-abi-fp32mod.c += -mfp32 -endif -ifneq (,$(filter $(o32-fpabi),xx)) -fpabi-modules-names += tst-abi-fpxxmod -CFLAGS-tst-abi-fpxxmod.c += -mfpxx -mno-odd-spreg -endif -ifneq (,$(filter $(o32-fpabi),xx xxo)) -ifeq ($(has-modd-spreg),yes) -fpabi-modules-names += tst-abi-fpxxomod -CFLAGS-tst-abi-fpxxomod.c += -mfpxx -modd-spreg -endif -endif -ifneq (,$(filter $(o32-fpabi),xx 64a)) -ifeq ($(has-mpf64),yes) -fpabi-modules-names += tst-abi-fp64amod -CFLAGS-tst-abi-fp64amod.c += -mfp64 -mno-odd-spreg -endif -endif -ifneq (,$(filter $(o32-fpabi),xx xxo 64a 64)) -ifeq ($(has-mpf64)-$(has-modd-spreg),yes-yes) -fpabi-modules-names += tst-abi-fp64mod -CFLAGS-tst-abi-fp64mod.c += -mfp64 -modd-spreg -endif -endif -modules-names += $(fpabi-modules-names) - -comma:=, -empty:= -space:=$(empty) $(empty) -fpabi_list=$(subst $(space),$(comma),$(patsubst tst-abi-%mod,o_%,\ - $(fpabi-modules-names))) -CPPFLAGS-tst-abi-interlink.c += -DFPABI_LIST=$(fpabi_list) -CPPFLAGS-tst-abi-interlink.c += -DFPABI_COUNT=$(words $(fpabi-modules-names)) -CPPFLAGS-tst-abi-interlink.c += -DFPABI_NATIVE=o_fp$(o32-fpabi) -$(objpfx)tst-abi-interlink: $(libdl) -$(objpfx)tst-abi-interlink.out: $(patsubst %,$(objpfx)%.so,\ - $(fpabi-modules-names)) -endif - -ifeq ($(mips-mode-switch),yes) -ifeq ($(o32-fpabi),xx) -tests += tst-mode-switch-1 tst-mode-switch-2 tst-mode-switch-3 -$(objpfx)tst-mode-switch-1: $(shared-thread-library) -$(objpfx)tst-mode-switch-2: $(shared-thread-library) -endif -endif -endif diff --git a/sysdeps/mips/__longjmp.c b/sysdeps/mips/__longjmp.c deleted file mode 100644 index 03bc1ccf23..0000000000 --- a/sysdeps/mips/__longjmp.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe (brendan@zen.org). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -#ifndef __GNUC__ - #error This file uses GNU C extensions; you must compile with GCC. -#endif - -static void __attribute__ ((nomips16)) -____longjmp (__jmp_buf env_arg, int val_arg) -{ - /* gcc 1.39.19 miscompiled the longjmp routine (as it did setjmp before - the hack around it); force it to use $a1 for the longjmp value. - Without this it saves $a1 in a register which gets clobbered - along the way. */ - register struct __jmp_buf_internal_tag *env asm ("a0"); - register int val asm ("a1"); -#ifdef CHECK_SP - register long sp asm ("$29"); - CHECK_SP (env[0].__sp, sp, long); -#endif - -#ifdef __mips_hard_float - /* Pull back the floating point callee-saved registers. */ - asm volatile ("l.d $f20, %0" : : "m" (env[0].__fpregs[0])); - asm volatile ("l.d $f22, %0" : : "m" (env[0].__fpregs[1])); - asm volatile ("l.d $f24, %0" : : "m" (env[0].__fpregs[2])); - asm volatile ("l.d $f26, %0" : : "m" (env[0].__fpregs[3])); - asm volatile ("l.d $f28, %0" : : "m" (env[0].__fpregs[4])); - asm volatile ("l.d $f30, %0" : : "m" (env[0].__fpregs[5])); -#endif - - /* Get the GP. */ - asm volatile ("lw $gp, %0" : : "m" (env[0].__gp)); - - /* Get the callee-saved registers. */ - asm volatile ("lw $16, %0" : : "m" (env[0].__regs[0])); - asm volatile ("lw $17, %0" : : "m" (env[0].__regs[1])); - asm volatile ("lw $18, %0" : : "m" (env[0].__regs[2])); - asm volatile ("lw $19, %0" : : "m" (env[0].__regs[3])); - asm volatile ("lw $20, %0" : : "m" (env[0].__regs[4])); - asm volatile ("lw $21, %0" : : "m" (env[0].__regs[5])); - asm volatile ("lw $22, %0" : : "m" (env[0].__regs[6])); - asm volatile ("lw $23, %0" : : "m" (env[0].__regs[7])); - - /* Get the PC. */ - asm volatile ("lw $25, %0" : : "m" (env[0].__pc)); - - /* Restore the stack pointer and the FP. They have to be restored - last and in a single asm as gcc, depending on options used, may - use either of them to access env. */ - asm volatile ("lw $29, %0\n\t" - "lw $30, %1\n\t" : : "m" (env[0].__sp), "m" (env[0].__fp)); - -/* Give setjmp 1 if given a 0, or what they gave us if non-zero. */ - if (val == 0) - asm volatile ("li $2, 1"); - else - asm volatile ("move $2, %0" : : "r" (val)); - - asm volatile ("jr $25"); - - /* Avoid `volatile function does return' warnings. */ - for (;;); -} - -strong_alias (____longjmp, __longjmp); diff --git a/sysdeps/mips/abort-instr.h b/sysdeps/mips/abort-instr.h deleted file mode 100644 index 7ccae5736b..0000000000 --- a/sysdeps/mips/abort-instr.h +++ /dev/null @@ -1,6 +0,0 @@ -/* An instruction which should crash any program is a breakpoint. */ -#ifdef __mips16 -# define ABORT_INSTRUCTION asm ("break 63") -#else -# define ABORT_INSTRUCTION asm ("break 255") -#endif diff --git a/sysdeps/mips/add_n.S b/sysdeps/mips/add_n.S deleted file mode 100644 index 823778feb7..0000000000 --- a/sysdeps/mips/add_n.S +++ /dev/null @@ -1,121 +0,0 @@ -/* MIPS2 __mpn_add_n -- Add two limb vectors of the same length > 0 and -store sum in a third limb vector. - -Copyright (C) 1995-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see -. */ - -#include - -/* INPUT PARAMETERS - res_ptr $4 - s1_ptr $5 - s2_ptr $6 - size $7 -*/ -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__mpn_add_n) - .set noreorder -#ifdef __PIC__ - .cpload t9 -#endif - .set nomacro - - lw $10,0($5) - lw $11,0($6) - - addiu $7,$7,-1 - and $9,$7,4-1 /* number of limbs in first loop */ - beq $9,$0,L(L0) /* if multiple of 4 limbs, skip first loop */ - move $2,$0 - - subu $7,$7,$9 - -L(Loop0): addiu $9,$9,-1 - lw $12,4($5) - addu $11,$11,$2 - lw $13,4($6) - sltu $8,$11,$2 - addu $11,$10,$11 - sltu $2,$11,$10 - sw $11,0($4) - or $2,$2,$8 - - addiu $5,$5,4 - addiu $6,$6,4 - move $10,$12 - move $11,$13 - bne $9,$0,L(Loop0) - addiu $4,$4,4 - -L(L0): beq $7,$0,L(end) - nop - -L(Loop): addiu $7,$7,-4 - - lw $12,4($5) - addu $11,$11,$2 - lw $13,4($6) - sltu $8,$11,$2 - addu $11,$10,$11 - sltu $2,$11,$10 - sw $11,0($4) - or $2,$2,$8 - - lw $10,8($5) - addu $13,$13,$2 - lw $11,8($6) - sltu $8,$13,$2 - addu $13,$12,$13 - sltu $2,$13,$12 - sw $13,4($4) - or $2,$2,$8 - - lw $12,12($5) - addu $11,$11,$2 - lw $13,12($6) - sltu $8,$11,$2 - addu $11,$10,$11 - sltu $2,$11,$10 - sw $11,8($4) - or $2,$2,$8 - - lw $10,16($5) - addu $13,$13,$2 - lw $11,16($6) - sltu $8,$13,$2 - addu $13,$12,$13 - sltu $2,$13,$12 - sw $13,12($4) - or $2,$2,$8 - - addiu $5,$5,16 - addiu $6,$6,16 - - bne $7,$0,L(Loop) - addiu $4,$4,16 - -L(end): addu $11,$11,$2 - sltu $8,$11,$2 - addu $11,$10,$11 - sltu $2,$11,$10 - sw $11,0($4) - j $31 - or $2,$2,$8 -END (__mpn_add_n) diff --git a/sysdeps/mips/addmul_1.S b/sysdeps/mips/addmul_1.S deleted file mode 100644 index 7a664934b2..0000000000 --- a/sysdeps/mips/addmul_1.S +++ /dev/null @@ -1,128 +0,0 @@ -/* MIPS __mpn_addmul_1 -- Multiply a limb vector with a single limb and -add the product to a second limb vector. - -Copyright (C) 1995-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see -. */ - -#include - -/* INPUT PARAMETERS - res_ptr $4 - s1_ptr $5 - size $6 - s2_limb $7 -*/ -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__mpn_addmul_1) - .set noreorder -#ifdef __PIC__ - .cpload t9 -#endif - .set nomacro - - /* warm up phase 0 */ - lw $8,0($5) - - /* warm up phase 1 */ - addiu $5,$5,4 -#if __mips_isa_rev < 6 - multu $8,$7 -#else - mulu $11,$8,$7 - muhu $12,$8,$7 -#endif - - addiu $6,$6,-1 - beq $6,$0,L(LC0) - move $2,$0 /* zero cy2 */ - - addiu $6,$6,-1 - beq $6,$0,L(LC1) - lw $8,0($5) /* load new s1 limb as early as possible */ - -L(Loop): lw $10,0($4) -#if __mips_isa_rev < 6 - mflo $3 - mfhi $9 -#else - move $3,$11 - move $9,$12 -#endif - addiu $5,$5,4 - addu $3,$3,$2 /* add old carry limb to low product limb */ -#if __mips_isa_rev < 6 - multu $8,$7 -#else - mulu $11,$8,$7 - muhu $12,$8,$7 -#endif - lw $8,0($5) /* load new s1 limb as early as possible */ - addiu $6,$6,-1 /* decrement loop counter */ - sltu $2,$3,$2 /* carry from previous addition -> $2 */ - addu $3,$10,$3 - sltu $10,$3,$10 - addu $2,$2,$10 - sw $3,0($4) - addiu $4,$4,4 - bne $6,$0,L(Loop) /* should be "bnel" */ - addu $2,$9,$2 /* add high product limb and carry from addition */ - - /* cool down phase 1 */ -L(LC1): lw $10,0($4) -#if __mips_isa_rev < 6 - mflo $3 - mfhi $9 -#else - move $3,$11 - move $9,$12 -#endif - addu $3,$3,$2 - sltu $2,$3,$2 -#if __mips_isa_rev < 6 - multu $8,$7 -#else - mulu $11,$8,$7 - muhu $12,$8,$7 -#endif - addu $3,$10,$3 - sltu $10,$3,$10 - addu $2,$2,$10 - sw $3,0($4) - addiu $4,$4,4 - addu $2,$9,$2 /* add high product limb and carry from addition */ - - /* cool down phase 0 */ -L(LC0): lw $10,0($4) -#if __mips_isa_rev < 6 - mflo $3 - mfhi $9 -#else - move $3,$11 - move $9,$12 -#endif - addu $3,$3,$2 - sltu $2,$3,$2 - addu $3,$10,$3 - sltu $10,$3,$10 - addu $2,$2,$10 - sw $3,0($4) - j $31 - addu $2,$9,$2 /* add high product limb and carry from addition */ - END (__mpn_addmul_1) diff --git a/sysdeps/mips/atomic-machine.h b/sysdeps/mips/atomic-machine.h deleted file mode 100644 index 16fef6b797..0000000000 --- a/sysdeps/mips/atomic-machine.h +++ /dev/null @@ -1,479 +0,0 @@ -/* Low-level functions for atomic operations. Mips version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _MIPS_ATOMIC_MACHINE_H -#define _MIPS_ATOMIC_MACHINE_H 1 - -#include -#include -#include - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#if _MIPS_SIM == _ABIO32 && __mips < 2 -#define MIPS_PUSH_MIPS2 ".set mips2\n\t" -#else -#define MIPS_PUSH_MIPS2 -#endif - -#if _MIPS_SIM == _ABIO32 || _MIPS_SIM == _ABIN32 -#define __HAVE_64B_ATOMICS 0 -#else -#define __HAVE_64B_ATOMICS 1 -#endif - -/* See the comments in about the use of the sync instruction. */ -#ifndef MIPS_SYNC -# define MIPS_SYNC sync -#endif - -/* Certain revisions of the R10000 Processor need an LL/SC Workaround - enabled. Revisions before 3.0 misbehave on atomic operations, and - Revs 2.6 and lower deadlock after several seconds due to other errata. - - To quote the R10K Errata: - Workaround: The basic idea is to inhibit the four instructions - from simultaneously becoming active in R10000. Padding all - ll/sc sequences with nops or changing the looping branch in the - routines to a branch likely (which is always predicted taken - by R10000) will work. The nops should go after the loop, and the - number of them should be 28. This number could be decremented for - each additional instruction in the ll/sc loop such as the lock - modifier(s) between the ll and sc, the looping branch and its - delay slot. For typical short routines with one ll/sc loop, any - instructions after the loop could also count as a decrement. The - nop workaround pollutes the cache more but would be a few cycles - faster if all the code is in the cache and the looping branch - is predicted not taken. */ - - -#ifdef _MIPS_ARCH_R10000 -#define R10K_BEQZ_INSN "beqzl" -#else -#define R10K_BEQZ_INSN "beqz" -#endif - -#define MIPS_SYNC_STR_2(X) #X -#define MIPS_SYNC_STR_1(X) MIPS_SYNC_STR_2(X) -#define MIPS_SYNC_STR MIPS_SYNC_STR_1(MIPS_SYNC) - -#if __GNUC_PREREQ (4, 8) || defined __mips16 -/* The __atomic_* builtins are available in GCC 4.7 and later, but MIPS - support for their efficient implementation was added only in GCC 4.8. - We still want to use them even with GCC 4.7 for MIPS16 code where we - have no assembly alternative available and want to avoid the __sync_* - builtins if at all possible. */ - -# define USE_ATOMIC_COMPILER_BUILTINS 1 - -/* MIPS is an LL/SC machine. However, XLP has a direct atomic exchange - instruction which will be used by __atomic_exchange_n. */ -# ifdef _MIPS_ARCH_XLP -# define ATOMIC_EXCHANGE_USES_CAS 0 -# else -# define ATOMIC_EXCHANGE_USES_CAS 1 -# endif - -/* Compare and exchange. - For all "bool" routines, we return FALSE if exchange succesful. */ - -# define __arch_compare_and_exchange_bool_8_int(mem, newval, oldval, model) \ - (abort (), 0) - -# define __arch_compare_and_exchange_bool_16_int(mem, newval, oldval, model) \ - (abort (), 0) - -# define __arch_compare_and_exchange_bool_32_int(mem, newval, oldval, model) \ - ({ \ - typeof (*mem) __oldval = (oldval); \ - !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ - model, __ATOMIC_RELAXED); \ - }) - -# define __arch_compare_and_exchange_val_8_int(mem, newval, oldval, model) \ - (abort (), (typeof(*mem)) 0) - -# define __arch_compare_and_exchange_val_16_int(mem, newval, oldval, model) \ - (abort (), (typeof(*mem)) 0) - -# define __arch_compare_and_exchange_val_32_int(mem, newval, oldval, model) \ - ({ \ - typeof (*mem) __oldval = (oldval); \ - __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ - model, __ATOMIC_RELAXED); \ - __oldval; \ - }) - -# if _MIPS_SIM == _ABIO32 - /* We can't do an atomic 64-bit operation in O32. */ -# define __arch_compare_and_exchange_bool_64_int(mem, newval, oldval, model) \ - (abort (), 0) -# define __arch_compare_and_exchange_val_64_int(mem, newval, oldval, model) \ - (abort (), (typeof(*mem)) 0) -# else -# define __arch_compare_and_exchange_bool_64_int(mem, newval, oldval, model) \ - __arch_compare_and_exchange_bool_32_int (mem, newval, oldval, model) -# define __arch_compare_and_exchange_val_64_int(mem, newval, oldval, model) \ - __arch_compare_and_exchange_val_32_int (mem, newval, oldval, model) -# endif - -/* Compare and exchange with "acquire" semantics, ie barrier after. */ - -# define atomic_compare_and_exchange_bool_acq(mem, new, old) \ - __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \ - mem, new, old, __ATOMIC_ACQUIRE) - -# define atomic_compare_and_exchange_val_acq(mem, new, old) \ - __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ - mem, new, old, __ATOMIC_ACQUIRE) - -/* Compare and exchange with "release" semantics, ie barrier before. */ - -# define atomic_compare_and_exchange_val_rel(mem, new, old) \ - __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ - mem, new, old, __ATOMIC_RELEASE) - - -/* Atomic exchange (without compare). */ - -# define __arch_exchange_8_int(mem, newval, model) \ - (abort (), (typeof(*mem)) 0) - -# define __arch_exchange_16_int(mem, newval, model) \ - (abort (), (typeof(*mem)) 0) - -# define __arch_exchange_32_int(mem, newval, model) \ - __atomic_exchange_n (mem, newval, model) - -# if _MIPS_SIM == _ABIO32 -/* We can't do an atomic 64-bit operation in O32. */ -# define __arch_exchange_64_int(mem, newval, model) \ - (abort (), (typeof(*mem)) 0) -# else -# define __arch_exchange_64_int(mem, newval, model) \ - __atomic_exchange_n (mem, newval, model) -# endif - -# define atomic_exchange_acq(mem, value) \ - __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_ACQUIRE) - -# define atomic_exchange_rel(mem, value) \ - __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_RELEASE) - - -/* Atomically add value and return the previous (unincremented) value. */ - -# define __arch_exchange_and_add_8_int(mem, value, model) \ - (abort (), (typeof(*mem)) 0) - -# define __arch_exchange_and_add_16_int(mem, value, model) \ - (abort (), (typeof(*mem)) 0) - -# define __arch_exchange_and_add_32_int(mem, value, model) \ - __atomic_fetch_add (mem, value, model) - -# if _MIPS_SIM == _ABIO32 -/* We can't do an atomic 64-bit operation in O32. */ -# define __arch_exchange_and_add_64_int(mem, value, model) \ - (abort (), (typeof(*mem)) 0) -# else -# define __arch_exchange_and_add_64_int(mem, value, model) \ - __atomic_fetch_add (mem, value, model) -# endif - -# define atomic_exchange_and_add_acq(mem, value) \ - __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, \ - __ATOMIC_ACQUIRE) - -# define atomic_exchange_and_add_rel(mem, value) \ - __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, \ - __ATOMIC_RELEASE) - -#else /* !__mips16 && !__GNUC_PREREQ (4, 8) */ -/* This implementation using inline assembly will be removed once glibc - requires GCC 4.8 or later to build. */ - -# define USE_ATOMIC_COMPILER_BUILTINS 0 -# define ATOMIC_EXCHANGE_USES_CAS 1 - -/* Compare and exchange. For all of the "xxx" routines, we expect a - "__prev" and a "__cmp" variable to be provided by the enclosing scope, - in which values are returned. */ - -# define __arch_compare_and_exchange_xxx_8_int(mem, newval, oldval, rel, acq) \ - (abort (), __prev = 0, __cmp = 0, (void) __cmp) - -# define __arch_compare_and_exchange_xxx_16_int(mem, newval, oldval, rel, acq) \ - (abort (), __prev = 0, __cmp = 0, (void) __cmp) - -# define __arch_compare_and_exchange_xxx_32_int(mem, newval, oldval, rel, acq) \ - __asm__ __volatile__ ( \ - ".set push\n\t" \ - MIPS_PUSH_MIPS2 \ - rel "\n" \ - "1:\t" \ - "ll %0,%5\n\t" \ - "move %1,$0\n\t" \ - "bne %0,%3,2f\n\t" \ - "move %1,%4\n\t" \ - "sc %1,%2\n\t" \ - R10K_BEQZ_INSN" %1,1b\n" \ - acq "\n\t" \ - ".set pop\n" \ - "2:\n\t" \ - : "=&r" (__prev), "=&r" (__cmp), "=m" (*mem) \ - : "r" (oldval), "r" (newval), "m" (*mem) \ - : "memory") - -# if _MIPS_SIM == _ABIO32 -/* We can't do an atomic 64-bit operation in O32. */ -# define __arch_compare_and_exchange_xxx_64_int(mem, newval, oldval, rel, acq) \ - (abort (), __prev = 0, __cmp = 0, (void) __cmp) -# else -# define __arch_compare_and_exchange_xxx_64_int(mem, newval, oldval, rel, acq) \ - __asm__ __volatile__ ("\n" \ - ".set push\n\t" \ - MIPS_PUSH_MIPS2 \ - rel "\n" \ - "1:\t" \ - "lld %0,%5\n\t" \ - "move %1,$0\n\t" \ - "bne %0,%3,2f\n\t" \ - "move %1,%4\n\t" \ - "scd %1,%2\n\t" \ - R10K_BEQZ_INSN" %1,1b\n" \ - acq "\n\t" \ - ".set pop\n" \ - "2:\n\t" \ - : "=&r" (__prev), "=&r" (__cmp), "=m" (*mem) \ - : "r" (oldval), "r" (newval), "m" (*mem) \ - : "memory") -# endif - -/* For all "bool" routines, we return FALSE if exchange succesful. */ - -# define __arch_compare_and_exchange_bool_8_int(mem, new, old, rel, acq) \ -({ typeof (*mem) __prev __attribute__ ((unused)); int __cmp; \ - __arch_compare_and_exchange_xxx_8_int(mem, new, old, rel, acq); \ - !__cmp; }) - -# define __arch_compare_and_exchange_bool_16_int(mem, new, old, rel, acq) \ -({ typeof (*mem) __prev __attribute__ ((unused)); int __cmp; \ - __arch_compare_and_exchange_xxx_16_int(mem, new, old, rel, acq); \ - !__cmp; }) - -# define __arch_compare_and_exchange_bool_32_int(mem, new, old, rel, acq) \ -({ typeof (*mem) __prev __attribute__ ((unused)); int __cmp; \ - __arch_compare_and_exchange_xxx_32_int(mem, new, old, rel, acq); \ - !__cmp; }) - -# define __arch_compare_and_exchange_bool_64_int(mem, new, old, rel, acq) \ -({ typeof (*mem) __prev __attribute__ ((unused)); int __cmp; \ - __arch_compare_and_exchange_xxx_64_int(mem, new, old, rel, acq); \ - !__cmp; }) - -/* For all "val" routines, return the old value whether exchange - successful or not. */ - -# define __arch_compare_and_exchange_val_8_int(mem, new, old, rel, acq) \ -({ typeof (*mem) __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_8_int(mem, new, old, rel, acq); \ - (typeof (*mem))__prev; }) - -# define __arch_compare_and_exchange_val_16_int(mem, new, old, rel, acq) \ -({ typeof (*mem) __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_16_int(mem, new, old, rel, acq); \ - (typeof (*mem))__prev; }) - -# define __arch_compare_and_exchange_val_32_int(mem, new, old, rel, acq) \ -({ typeof (*mem) __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_32_int(mem, new, old, rel, acq); \ - (typeof (*mem))__prev; }) - -# define __arch_compare_and_exchange_val_64_int(mem, new, old, rel, acq) \ -({ typeof (*mem) __prev; int __cmp; \ - __arch_compare_and_exchange_xxx_64_int(mem, new, old, rel, acq); \ - (typeof (*mem))__prev; }) - -/* Compare and exchange with "acquire" semantics, ie barrier after. */ - -# define atomic_compare_and_exchange_bool_acq(mem, new, old) \ - __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \ - mem, new, old, "", MIPS_SYNC_STR) - -# define atomic_compare_and_exchange_val_acq(mem, new, old) \ - __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ - mem, new, old, "", MIPS_SYNC_STR) - -/* Compare and exchange with "release" semantics, ie barrier before. */ - -# define atomic_compare_and_exchange_val_rel(mem, new, old) \ - __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ - mem, new, old, MIPS_SYNC_STR, "") - - - -/* Atomic exchange (without compare). */ - -# define __arch_exchange_xxx_8_int(mem, newval, rel, acq) \ - (abort (), (typeof(*mem)) 0) - -# define __arch_exchange_xxx_16_int(mem, newval, rel, acq) \ - (abort (), (typeof(*mem)) 0) - -# define __arch_exchange_xxx_32_int(mem, newval, rel, acq) \ -({ typeof (*mem) __prev; int __cmp; \ - __asm__ __volatile__ ("\n" \ - ".set push\n\t" \ - MIPS_PUSH_MIPS2 \ - rel "\n" \ - "1:\t" \ - "ll %0,%4\n\t" \ - "move %1,%3\n\t" \ - "sc %1,%2\n\t" \ - R10K_BEQZ_INSN" %1,1b\n" \ - acq "\n\t" \ - ".set pop\n" \ - "2:\n\t" \ - : "=&r" (__prev), "=&r" (__cmp), "=m" (*mem) \ - : "r" (newval), "m" (*mem) \ - : "memory"); \ - __prev; }) - -# if _MIPS_SIM == _ABIO32 -/* We can't do an atomic 64-bit operation in O32. */ -# define __arch_exchange_xxx_64_int(mem, newval, rel, acq) \ - (abort (), (typeof(*mem)) 0) -# else -# define __arch_exchange_xxx_64_int(mem, newval, rel, acq) \ -({ typeof (*mem) __prev; int __cmp; \ - __asm__ __volatile__ ("\n" \ - ".set push\n\t" \ - MIPS_PUSH_MIPS2 \ - rel "\n" \ - "1:\n" \ - "lld %0,%4\n\t" \ - "move %1,%3\n\t" \ - "scd %1,%2\n\t" \ - R10K_BEQZ_INSN" %1,1b\n" \ - acq "\n\t" \ - ".set pop\n" \ - "2:\n\t" \ - : "=&r" (__prev), "=&r" (__cmp), "=m" (*mem) \ - : "r" (newval), "m" (*mem) \ - : "memory"); \ - __prev; }) -# endif - -# define atomic_exchange_acq(mem, value) \ - __atomic_val_bysize (__arch_exchange_xxx, int, mem, value, "", MIPS_SYNC_STR) - -# define atomic_exchange_rel(mem, value) \ - __atomic_val_bysize (__arch_exchange_xxx, int, mem, value, MIPS_SYNC_STR, "") - - -/* Atomically add value and return the previous (unincremented) value. */ - -# define __arch_exchange_and_add_8_int(mem, newval, rel, acq) \ - (abort (), (typeof(*mem)) 0) - -# define __arch_exchange_and_add_16_int(mem, newval, rel, acq) \ - (abort (), (typeof(*mem)) 0) - -# define __arch_exchange_and_add_32_int(mem, value, rel, acq) \ -({ typeof (*mem) __prev; int __cmp; \ - __asm__ __volatile__ ("\n" \ - ".set push\n\t" \ - MIPS_PUSH_MIPS2 \ - rel "\n" \ - "1:\t" \ - "ll %0,%4\n\t" \ - "addu %1,%0,%3\n\t" \ - "sc %1,%2\n\t" \ - R10K_BEQZ_INSN" %1,1b\n" \ - acq "\n\t" \ - ".set pop\n" \ - "2:\n\t" \ - : "=&r" (__prev), "=&r" (__cmp), "=m" (*mem) \ - : "r" (value), "m" (*mem) \ - : "memory"); \ - __prev; }) - -# if _MIPS_SIM == _ABIO32 -/* We can't do an atomic 64-bit operation in O32. */ -# define __arch_exchange_and_add_64_int(mem, value, rel, acq) \ - (abort (), (typeof(*mem)) 0) -# else -# define __arch_exchange_and_add_64_int(mem, value, rel, acq) \ -({ typeof (*mem) __prev; int __cmp; \ - __asm__ __volatile__ ( \ - ".set push\n\t" \ - MIPS_PUSH_MIPS2 \ - rel "\n" \ - "1:\t" \ - "lld %0,%4\n\t" \ - "daddu %1,%0,%3\n\t" \ - "scd %1,%2\n\t" \ - R10K_BEQZ_INSN" %1,1b\n" \ - acq "\n\t" \ - ".set pop\n" \ - "2:\n\t" \ - : "=&r" (__prev), "=&r" (__cmp), "=m" (*mem) \ - : "r" (value), "m" (*mem) \ - : "memory"); \ - __prev; }) -# endif - -# define atomic_exchange_and_add_acq(mem, value) \ - __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, \ - "", MIPS_SYNC_STR) - -# define atomic_exchange_and_add_rel(mem, value) \ - __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, \ - MIPS_SYNC_STR, "") - -#endif /* !__mips16 && !__GNUC_PREREQ (4, 8) */ - -/* TODO: More atomic operations could be implemented efficiently; only the - basic requirements are done. */ - -#ifdef __mips16 -# define atomic_full_barrier() __sync_synchronize () - -#else /* !__mips16 */ -# define atomic_full_barrier() \ - __asm__ __volatile__ (".set push\n\t" \ - MIPS_PUSH_MIPS2 \ - MIPS_SYNC_STR "\n\t" \ - ".set pop" : : : "memory") -#endif /* !__mips16 */ - -#endif /* atomic-machine.h */ diff --git a/sysdeps/mips/backtrace.c b/sysdeps/mips/backtrace.c deleted file mode 100644 index 27ce597b39..0000000000 --- a/sysdeps/mips/backtrace.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/bits/dlfcn.h b/sysdeps/mips/bits/dlfcn.h deleted file mode 100644 index 95b2fa0973..0000000000 --- a/sysdeps/mips/bits/dlfcn.h +++ /dev/null @@ -1,64 +0,0 @@ -/* System dependent definitions for run-time dynamic loading. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _DLFCN_H -# error "Never use directly; include instead." -#endif - -/* The MODE argument to `dlopen' contains one of the following: */ -#define RTLD_LAZY 0x0001 /* Lazy function call binding. */ -#define RTLD_NOW 0x0002 /* Immediate function call binding. */ -#define RTLD_BINDING_MASK 0x3 /* Mask of binding time value. */ -#define RTLD_NOLOAD 0x00008 /* Do not load the object. */ -#define RTLD_DEEPBIND 0x00010 /* Use deep binding. */ - -/* If the following bit is set in the MODE argument to `dlopen', - the symbols of the loaded object and its dependencies are made - visible as if the object were linked directly into the program. */ -#define RTLD_GLOBAL 0x0004 - -/* Unix98 demands the following flag which is the inverse to RTLD_GLOBAL. - The implementation does this by default and so we can define the - value to zero. */ -#define RTLD_LOCAL 0 - -/* Do not delete object when closed. */ -#define RTLD_NODELETE 0x01000 - -#ifdef __USE_GNU -/* To support profiling of shared objects it is a good idea to call - the function found using `dlsym' using the following macro since - these calls do not use the PLT. But this would mean the dynamic - loader has no chance to find out when the function is called. The - macro applies the necessary magic so that profiling is possible. - Rewrite - foo = (*fctp) (arg1, arg2); - into - foo = DL_CALL_FCT (fctp, (arg1, arg2)); -*/ -# define DL_CALL_FCT(fctp, args) \ - (_dl_mcount_wrapper_check ((void *) (fctp)), (*(fctp)) args) - -__BEGIN_DECLS - -/* This function calls the profiling functions. */ -extern void _dl_mcount_wrapper_check (void *__selfpc) __THROW; - -__END_DECLS - -#endif diff --git a/sysdeps/mips/bits/endian.h b/sysdeps/mips/bits/endian.h deleted file mode 100644 index 126059799d..0000000000 --- a/sysdeps/mips/bits/endian.h +++ /dev/null @@ -1,15 +0,0 @@ -/* The MIPS architecture has selectable endianness. - It exists in both little and big endian flavours and we - want to be able to share the installed header files between - both, so we define __BYTE_ORDER based on GCC's predefines. */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#ifdef __MIPSEB -# define __BYTE_ORDER __BIG_ENDIAN -#endif -#ifdef __MIPSEL -# define __BYTE_ORDER __LITTLE_ENDIAN -#endif diff --git a/sysdeps/mips/bits/fenv.h b/sysdeps/mips/bits/fenv.h deleted file mode 100644 index a3195ea474..0000000000 --- a/sysdeps/mips/bits/fenv.h +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - - -/* Define bits representing the exception. We use the bit positions - of the appropriate bits in the FPU control word. */ -enum - { - FE_INEXACT = -#define FE_INEXACT 0x04 - FE_INEXACT, - FE_UNDERFLOW = -#define FE_UNDERFLOW 0x08 - FE_UNDERFLOW, - FE_OVERFLOW = -#define FE_OVERFLOW 0x10 - FE_OVERFLOW, - FE_DIVBYZERO = -#define FE_DIVBYZERO 0x20 - FE_DIVBYZERO, - FE_INVALID = -#define FE_INVALID 0x40 - FE_INVALID, - }; - -#define FE_ALL_EXCEPT \ - (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) - -/* The MIPS FPU supports all of the four defined rounding modes. We - use again the bit positions in the FPU control word as the values - for the appropriate macros. */ -enum - { - FE_TONEAREST = -#define FE_TONEAREST 0x0 - FE_TONEAREST, - FE_TOWARDZERO = -#define FE_TOWARDZERO 0x1 - FE_TOWARDZERO, - FE_UPWARD = -#define FE_UPWARD 0x2 - FE_UPWARD, - FE_DOWNWARD = -#define FE_DOWNWARD 0x3 - FE_DOWNWARD - }; - - -/* Type representing exception flags. */ -typedef unsigned short int fexcept_t; - - -/* Type representing floating-point environment. This function corresponds - to the layout of the block written by the `fstenv'. */ -typedef struct - { - unsigned int __fp_control_register; - } -fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1) - -#ifdef __USE_GNU -/* Floating-point environment where none of the exception is masked. */ -# define FE_NOMASK_ENV ((const fenv_t *) -2) -#endif - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef unsigned int femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) -1L) -#endif diff --git a/sysdeps/mips/bits/ipctypes.h b/sysdeps/mips/bits/ipctypes.h deleted file mode 100644 index 9596c290dd..0000000000 --- a/sysdeps/mips/bits/ipctypes.h +++ /dev/null @@ -1,31 +0,0 @@ -/* bits/ipctypes.h -- Define some types used by SysV IPC/MSG/SHM. MIPS version - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* - * Never include directly. - */ - -#ifndef _BITS_IPCTYPES_H -#define _BITS_IPCTYPES_H 1 - -#include - -typedef __SLONG32_TYPE __ipc_pid_t; - - -#endif /* bits/ipctypes.h */ diff --git a/sysdeps/mips/bits/link.h b/sysdeps/mips/bits/link.h deleted file mode 100644 index e32dad5633..0000000000 --- a/sysdeps/mips/bits/link.h +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - -#include - -#if _MIPS_SIM == _ABIO32 - -/* Registers for entry into PLT on MIPS. */ -typedef struct La_mips_32_regs -{ - uint32_t lr_reg[4]; /* $a0 through $a3 */ - double lr_fpreg[2]; /* $f12 and $f14 */ - uint32_t lr_ra; - uint32_t lr_sp; -} La_mips_32_regs; - -/* Return values for calls from PLT on MIPS. */ -typedef struct La_mips_32_retval -{ - uint32_t lrv_v0; - uint32_t lrv_v1; - double lrv_f0; - double lrv_f2; -} La_mips_32_retval; - -#else - -typedef struct La_mips_64_regs -{ - uint64_t lr_reg[8]; /* $a0 through $a7 */ - double lr_fpreg[8]; /* $f12 throgh $f19 */ - uint64_t lr_ra; - uint64_t lr_sp; -} La_mips_64_regs; - -/* Return values for calls from PLT on MIPS. */ -typedef struct La_mips_64_retval -{ - uint64_t lrv_v0; - uint64_t lrv_v1; - double lrv_f0; - double lrv_f2; -} La_mips_64_retval; - -#endif - -__BEGIN_DECLS - -#if _MIPS_SIM == _ABIO32 - -extern Elf32_Addr la_mips_o32_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_mips_32_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_mips_o32_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_mips_32_regs *__inregs, - La_mips_32_retval *__outregs, - const char *__symname); - -#elif _MIPS_SIM == _ABIN32 - -extern Elf32_Addr la_mips_n32_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_mips_64_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_mips_n32_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_mips_64_regs *__inregs, - La_mips_64_retval *__outregs, - const char *__symname); - -#else - -extern Elf64_Addr la_mips_n64_gnu_pltenter (Elf64_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_mips_64_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_mips_n64_gnu_pltexit (Elf64_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_mips_64_regs *__inregs, - La_mips_64_retval *__outregs, - const char *__symname); - -#endif - -__END_DECLS diff --git a/sysdeps/mips/bits/long-double.h b/sysdeps/mips/bits/long-double.h deleted file mode 100644 index 604188e181..0000000000 --- a/sysdeps/mips/bits/long-double.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Properties of long double type. MIPS version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if !defined __NO_LONG_DOUBLE_MATH && _MIPS_SIM == _ABIO32 -# define __NO_LONG_DOUBLE_MATH 1 -#endif diff --git a/sysdeps/mips/bits/nan.h b/sysdeps/mips/bits/nan.h deleted file mode 100644 index a4a1ef9f06..0000000000 --- a/sysdeps/mips/bits/nan.h +++ /dev/null @@ -1,67 +0,0 @@ -/* `NAN' constant for IEEE 754 machines. MIPS version. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - - -/* IEEE Not A Number. */ -/* In legacy-NaN mode MIPS has the qNaN and sNaN patterns reversed - compared to most other architectures. IEEE 754-1985 left the - definition of this open to implementations, and for MIPS the top bit - of the mantissa must be SET to indicate a sNaN. In 2008-NaN mode - MIPS aligned to IEEE 754-2008. */ - -#if __GNUC_PREREQ(3,3) - -# define NAN (__builtin_nanf ("")) - -#elif defined __GNUC__ - -/* No 2008-NaN mode support in any GCC version before 4.9. */ - -# define NAN \ - (__extension__ \ - ((union { unsigned __l __attribute__ ((__mode__ (__SI__))); float __d; }) \ - { __l: 0x7fbfffffUL }).__d) - -#else - -# include - -# if __BYTE_ORDER == __BIG_ENDIAN -# ifdef __mips_nan2008 -# define __qnan_bytes { 0x7f, 0xc0, 0, 0 } -# else -# define __qnan_bytes { 0x7f, 0xbf, 0xff, 0xff } -# endif -# endif -# if __BYTE_ORDER == __LITTLE_ENDIAN -# ifdef __mips_nan2008 -# define __qnan_bytes { 0, 0, 0xc0, 0x7f } -# else -# define __qnan_bytes { 0xff, 0xff, 0xbf, 0x7f } -# endif -# endif - -static union { unsigned char __c[4]; float __d; } __qnan_union - __attribute__ ((__unused__)) = { __qnan_bytes }; -# define NAN (__qnan_union.__d) - -#endif /* GCC. */ diff --git a/sysdeps/mips/bits/setjmp.h b/sysdeps/mips/bits/setjmp.h deleted file mode 100644 index 91c64505f4..0000000000 --- a/sysdeps/mips/bits/setjmp.h +++ /dev/null @@ -1,73 +0,0 @@ -/* Define the machine-dependent type `jmp_buf'. MIPS version. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _MIPS_BITS_SETJMP_H -#define _MIPS_BITS_SETJMP_H 1 - -#if !defined(_SETJMP_H) && !defined(_PTHREAD_H) -# error "Never include directly; use instead." -#endif - -#include - -typedef struct __jmp_buf_internal_tag - { -#if _MIPS_SIM == _ABIO32 - /* Program counter. */ - __ptr_t __pc; - - /* Stack pointer. */ - __ptr_t __sp; - - /* Callee-saved registers s0 through s7. */ - int __regs[8]; - - /* The frame pointer. */ - __ptr_t __fp; - - /* The global pointer. */ - __ptr_t __gp; -#else - /* Program counter. */ - __extension__ long long __pc; - - /* Stack pointer. */ - __extension__ long long __sp; - - /* Callee-saved registers s0 through s7. */ - __extension__ long long __regs[8]; - - /* The frame pointer. */ - __extension__ long long __fp; - - /* The global pointer. */ - __extension__ long long __gp; -#endif - - /* Unused (was floating point status register). */ - int __glibc_reserved1; - - /* Callee-saved floating point registers. */ -#if _MIPS_SIM == _ABI64 - double __fpregs[8]; -#else - double __fpregs[6]; -#endif - } __jmp_buf[1]; - -#endif /* _MIPS_BITS_SETJMP_H */ diff --git a/sysdeps/mips/bits/wordsize.h b/sysdeps/mips/bits/wordsize.h deleted file mode 100644 index c32e3bc491..0000000000 --- a/sysdeps/mips/bits/wordsize.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#define __WORDSIZE _MIPS_SZPTR - -#if _MIPS_SIM == _ABI64 -# define __WORDSIZE_TIME64_COMPAT32 1 -#else -# define __WORDSIZE_TIME64_COMPAT32 0 -#endif - -#if __WORDSIZE == 32 -#define __WORDSIZE32_SIZE_ULONG 0 -#define __WORDSIZE32_PTRDIFF_LONG 0 -#endif diff --git a/sysdeps/mips/bsd-_setjmp.S b/sysdeps/mips/bsd-_setjmp.S deleted file mode 100644 index d5a8731227..0000000000 --- a/sysdeps/mips/bsd-_setjmp.S +++ /dev/null @@ -1,44 +0,0 @@ -/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. MIPS version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 0)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include - - .set nomips16 - -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (_setjmp) -#ifdef __PIC__ - .set noreorder - .cpload t9 - .set reorder - la t9, C_SYMBOL_NAME (__sigsetjmp) -#endif - move a1,zero /* Pass a second argument of zero. */ -#ifdef __PIC__ - jr t9 -#else - j C_SYMBOL_NAME (__sigsetjmp) -#endif -END (_setjmp) -libc_hidden_def (_setjmp) diff --git a/sysdeps/mips/bsd-setjmp.S b/sysdeps/mips/bsd-setjmp.S deleted file mode 100644 index 6d3d31b101..0000000000 --- a/sysdeps/mips/bsd-setjmp.S +++ /dev/null @@ -1,43 +0,0 @@ -/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. MIPS version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include - - .set nomips16 - -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (setjmp) - .set noreorder -#ifdef __PIC__ - .cpload t9 - .set reorder - la t9, C_SYMBOL_NAME (__sigsetjmp) -#endif - li a1, 1 /* Pass a second argument of one. */ -#ifdef __PIC__ - jr t9 -#else - j C_SYMBOL_NAME (__sigsetjmp) -#endif -END (setjmp) diff --git a/sysdeps/mips/configure b/sysdeps/mips/configure deleted file mode 100644 index 4e13248c03..0000000000 --- a/sysdeps/mips/configure +++ /dev/null @@ -1,163 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/mips. - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler is using the 2008 NaN encoding" >&5 -$as_echo_n "checking whether the compiler is using the 2008 NaN encoding... " >&6; } -if ${libc_cv_mips_nan2008+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -dnl -#ifdef __mips_nan2008 -yes -#endif -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - libc_cv_mips_nan2008=yes -else - libc_cv_mips_nan2008=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mips_nan2008" >&5 -$as_echo "$libc_cv_mips_nan2008" >&6; } -if test x$libc_cv_mips_nan2008 = xyes; then - $as_echo "#define HAVE_MIPS_NAN2008 1" >>confdefs.h - -fi diff --git a/sysdeps/mips/configure.ac b/sysdeps/mips/configure.ac deleted file mode 100644 index bcbdaffd9f..0000000000 --- a/sysdeps/mips/configure.ac +++ /dev/null @@ -1,15 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/mips. - -dnl No MIPS GCC supports accessing static and hidden symbols in an -dnl position independent way. -dnl AC_DEFINE(PI_STATIC_AND_HIDDEN) - -AC_CACHE_CHECK([whether the compiler is using the 2008 NaN encoding], - libc_cv_mips_nan2008, [AC_EGREP_CPP(yes, [dnl -#ifdef __mips_nan2008 -yes -#endif], libc_cv_mips_nan2008=yes, libc_cv_mips_nan2008=no)]) -if test x$libc_cv_mips_nan2008 = xyes; then - AC_DEFINE(HAVE_MIPS_NAN2008) -fi diff --git a/sysdeps/mips/dl-dtprocnum.h b/sysdeps/mips/dl-dtprocnum.h deleted file mode 100644 index 805fbbc8f8..0000000000 --- a/sysdeps/mips/dl-dtprocnum.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Configuration of lookup functions. MIPS version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Number of extra dynamic section entries for this architecture. By - default there are none. */ -#define DT_THISPROCNUM DT_MIPS_NUM diff --git a/sysdeps/mips/dl-machine-reject-phdr.h b/sysdeps/mips/dl-machine-reject-phdr.h deleted file mode 100644 index 3dde936e3b..0000000000 --- a/sysdeps/mips/dl-machine-reject-phdr.h +++ /dev/null @@ -1,326 +0,0 @@ -/* Machine-dependent program header inspection for the ELF loader. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_MACHINE_REJECT_PHDR_H -#define _DL_MACHINE_REJECT_PHDR_H 1 - -#include -#include - -#if defined PR_GET_FP_MODE && defined PR_SET_FP_MODE -# define HAVE_PRCTL_FP_MODE 1 -#else -# define HAVE_PRCTL_FP_MODE 0 -#endif - -/* Reject an object with a debug message. */ -#define REJECT(str, args...) \ - { \ - if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS)) \ - _dl_debug_printf (str, ##args); \ - return true; \ - } - -/* Search the program headers for the ABI Flags. */ - -static inline const ElfW(Phdr) * -find_mips_abiflags (const ElfW(Phdr) *phdr, ElfW(Half) phnum) -{ - const ElfW(Phdr) *ph; - - for (ph = phdr; ph < &phdr[phnum]; ++ph) - if (ph->p_type == PT_MIPS_ABIFLAGS) - return ph; - return NULL; -} - -/* Cache the FP ABI value from the PT_MIPS_ABIFLAGS program header. */ - -static bool -cached_fpabi_reject_phdr_p (struct link_map *l) -{ - if (l->l_mach.fpabi == 0) - { - const ElfW(Phdr) *ph = find_mips_abiflags (l->l_phdr, l->l_phnum); - - if (ph) - { - Elf_MIPS_ABIFlags_v0 * mips_abiflags; - if (ph->p_filesz < sizeof (Elf_MIPS_ABIFlags_v0)) - REJECT (" %s: malformed PT_MIPS_ABIFLAGS found\n", l->l_name); - - mips_abiflags = (Elf_MIPS_ABIFlags_v0 *) (l->l_addr + ph->p_vaddr); - - if (__glibc_unlikely (mips_abiflags->flags2 != 0)) - REJECT (" %s: unknown MIPS.abiflags flags2: %u\n", l->l_name, - mips_abiflags->flags2); - - l->l_mach.fpabi = mips_abiflags->fp_abi; - l->l_mach.odd_spreg = (mips_abiflags->flags1 - & MIPS_AFL_FLAGS1_ODDSPREG) != 0; - } - else - { - l->l_mach.fpabi = -1; - l->l_mach.odd_spreg = true; - } - } - return false; -} - -/* Return a description of the specified floating-point ABI. */ - -static const char * -fpabi_string (int fpabi) -{ - switch (fpabi) - { - case Val_GNU_MIPS_ABI_FP_ANY: - return "Hard or soft float"; - case Val_GNU_MIPS_ABI_FP_DOUBLE: - return "Hard float (double precision)"; - case Val_GNU_MIPS_ABI_FP_SINGLE: - return "Hard float (single precision)"; - case Val_GNU_MIPS_ABI_FP_SOFT: - return "Soft float"; - case Val_GNU_MIPS_ABI_FP_OLD_64: - return "Unsupported FP64"; - case Val_GNU_MIPS_ABI_FP_XX: - return "Hard float (32-bit CPU, Any FPU)"; - case Val_GNU_MIPS_ABI_FP_64: - return "Hard float (32-bit CPU, 64-bit FPU)"; - case Val_GNU_MIPS_ABI_FP_64A: - return "Hard float compat (32-bit CPU, 64-bit FPU)"; - case -1: - return "Double precision, single precision or soft float"; - default: - return "Unknown FP ABI"; - } -} - -/* A structure to describe the requirements of each FP ABI extension. - Each field says whether the ABI can be executed in that mode. The FR0 field - is actually overloaded and means 'default' FR mode for the ABI. I.e. For - O32 it is FR0 and for N32/N64 it is actually FR1. Since this logic is - focussed on the intricacies of mode management for O32 we call the field - FR0. */ - -struct abi_req -{ - bool single; - bool soft; - bool fr0; - bool fr1; - bool fre; -}; - -/* FP ABI requirements for all Val_GNU_MIPS_ABI_FP_* values. */ - -static const struct abi_req reqs[Val_GNU_MIPS_ABI_FP_MAX + 1] = - {{true, true, true, true, true}, /* Any */ - {false, false, true, false, true}, /* Double-float */ - {true, false, false, false, false}, /* Single-float */ - {false, true, false, false, false}, /* Soft-float */ - {false, false, false, false, false}, /* old-FP64 */ - {false, false, true, true, true}, /* FPXX */ - {false, false, false, true, false}, /* FP64 */ - {false, false, false, true, true}}; /* FP64A */ - -/* FP ABI requirements for objects without a PT_MIPS_ABIFLAGS segment. */ - -static const struct abi_req none_req = { true, true, true, false, true }; - -/* Return true iff ELF program headers are incompatible with the running - host. This verifies that floating-point ABIs are compatible and - re-configures the hardware mode if necessary. This code handles both the - DT_NEEDED libraries and the dlopen'ed libraries. It also accounts for the - impact of dlclose. */ - -static bool __attribute_used__ -elf_machine_reject_phdr_p (const ElfW(Phdr) *phdr, uint_fast16_t phnum, - const char *buf, size_t len, struct link_map *map, - int fd) -{ - const ElfW(Phdr) *ph = find_mips_abiflags (phdr, phnum); - struct link_map *l; - Lmid_t nsid; - int in_abi = -1; - struct abi_req in_req; - Elf_MIPS_ABIFlags_v0 *mips_abiflags = NULL; - bool perfect_match = false; -#if _MIPS_SIM == _ABIO32 - unsigned int cur_mode = -1; -# if HAVE_PRCTL_FP_MODE - bool cannot_mode_switch = false; - - /* Get the current hardware mode. */ - cur_mode = __prctl (PR_GET_FP_MODE); -# endif -#endif - - /* Read the attributes section. */ - if (ph != NULL) - { - ElfW(Addr) size = ph->p_filesz; - - if (ph->p_offset + size <= len) - mips_abiflags = (Elf_MIPS_ABIFlags_v0 *) (buf + ph->p_offset); - else - { - mips_abiflags = alloca (size); - __lseek (fd, ph->p_offset, SEEK_SET); - if (__libc_read (fd, (void *) mips_abiflags, size) != size) - REJECT (" unable to read PT_MIPS_ABIFLAGS\n"); - } - - if (size < sizeof (Elf_MIPS_ABIFlags_v0)) - REJECT (" contains malformed PT_MIPS_ABIFLAGS\n"); - - if (__glibc_unlikely (mips_abiflags->flags2 != 0)) - REJECT (" unknown MIPS.abiflags flags2: %u\n", mips_abiflags->flags2); - - in_abi = mips_abiflags->fp_abi; - } - - /* ANY is compatible with anything. */ - perfect_match |= (in_abi == Val_GNU_MIPS_ABI_FP_ANY); - - /* Unknown ABIs are rejected. */ - if (in_abi != -1 && in_abi > Val_GNU_MIPS_ABI_FP_MAX) - REJECT (" uses unknown FP ABI: %u\n", in_abi); - - /* Obtain the initial requirements. */ - in_req = (in_abi == -1) ? none_req : reqs[in_abi]; - - /* Check that the new requirement does not conflict with any currently - loaded object. */ - for (nsid = 0; nsid < DL_NNS; ++nsid) - for (l = GL(dl_ns)[nsid]._ns_loaded; l != NULL; l = l->l_next) - { - struct abi_req existing_req; - - if (cached_fpabi_reject_phdr_p (l)) - return true; - -#if _MIPS_SIM == _ABIO32 - /* A special case arises for O32 FP64 and FP64A where the kernel - pre-dates PT_MIPS_ABIFLAGS. These ABIs will be blindly loaded even - if the hardware mode is unavailable or disabled. In this - circumstance the prctl call to obtain the current mode will fail. - Detect this situation here and reject everything. This will - effectively prevent dynamically linked applications from failing in - unusual ways but there is nothing we can do to help static - applications. */ - if ((l->l_mach.fpabi == Val_GNU_MIPS_ABI_FP_64A - || l->l_mach.fpabi == Val_GNU_MIPS_ABI_FP_64) - && cur_mode == -1) - REJECT (" found %s running in the wrong mode\n", - fpabi_string (l->l_mach.fpabi)); -#endif - - /* Found a perfect match, success. */ - perfect_match |= (in_abi == l->l_mach.fpabi); - - /* Unknown ABIs are rejected. */ - if (l->l_mach.fpabi != -1 && l->l_mach.fpabi > Val_GNU_MIPS_ABI_FP_MAX) - REJECT (" found unknown FP ABI: %u\n", l->l_mach.fpabi); - - existing_req = (l->l_mach.fpabi == -1 ? none_req - : reqs[l->l_mach.fpabi]); - - /* Merge requirements. */ - in_req.soft &= existing_req.soft; - in_req.single &= existing_req.single; - in_req.fr0 &= existing_req.fr0; - in_req.fr1 &= existing_req.fr1; - in_req.fre &= existing_req.fre; - - /* If there is at least one mode which is still usable then the new - object can be loaded. */ - if (in_req.single || in_req.soft || in_req.fr1 || in_req.fr0 - || in_req.fre) - { -#if _MIPS_SIM == _ABIO32 && HAVE_PRCTL_FP_MODE - /* Account for loaded ABIs which prohibit mode switching. */ - if (l->l_mach.fpabi == Val_GNU_MIPS_ABI_FP_XX) - cannot_mode_switch |= l->l_mach.odd_spreg; -#endif - } - else - REJECT (" uses %s, already loaded %s\n", - fpabi_string (in_abi), - fpabi_string (l->l_mach.fpabi)); - } - -#if _MIPS_SIM == _ABIO32 - /* At this point we know that the newly loaded object is compatible with all - existing objects but the hardware mode may not be correct. */ - if ((in_req.fr1 || in_req.fre || in_req.fr0) - && !perfect_match) - { - if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS)) - _dl_debug_printf (" needs %s%s mode\n", in_req.fr0 ? "FR0 or " : "", - (in_req.fre && !in_req.fr1) ? "FRE" : "FR1"); - - /* If the PR_GET_FP_MODE is not supported then only FR0 is available. - If the overall requirements cannot be met by FR0 then reject the - object. */ - if (cur_mode == -1) - return !in_req.fr0; - -# if HAVE_PRCTL_FP_MODE - { - unsigned int fr1_mode = PR_FP_MODE_FR; - - /* It is not possible to change the mode of a thread which may be - executing FPXX code with odd-singles. If an FPXX object with - odd-singles is loaded then just check the current mode is OK. This - can be either the FR1 mode or FR0 if the requirements are met by - FR0. */ - if (cannot_mode_switch) - return (!(in_req.fre && cur_mode == (PR_FP_MODE_FR | PR_FP_MODE_FRE)) - && !(in_req.fr1 && cur_mode == PR_FP_MODE_FR) - && !(in_req.fr0 && cur_mode == 0)); - - /* If the overall requirements can be satisfied by FRE but not FR1 then - fr1_mode must become FRE. */ - if (in_req.fre && !in_req.fr1) - fr1_mode |= PR_FP_MODE_FRE; - - /* Set the new mode. Use fr1_mode if the requirements cannot be met by - FR0. */ - if (!in_req.fr0) - return __prctl (PR_SET_FP_MODE, fr1_mode) != 0; - else if (__prctl (PR_SET_FP_MODE, /* fr0_mode */ 0) != 0) - { - /* Setting FR0 can validly fail on an R6 core so retry with the FR1 - mode as a fall back. */ - if (errno != ENOTSUP) - return true; - - return __prctl (PR_SET_FP_MODE, fr1_mode) != 0; - } - } -# endif /* HAVE_PRCTL_FP_MODE */ - } -#endif /* _MIPS_SIM == _ABIO32 */ - - return false; -} - -#endif /* dl-machine-reject-phdr.h */ diff --git a/sysdeps/mips/dl-machine.h b/sysdeps/mips/dl-machine.h deleted file mode 100644 index ed47513ccc..0000000000 --- a/sysdeps/mips/dl-machine.h +++ /dev/null @@ -1,936 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. MIPS version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Kazumoto Kojima . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* FIXME: Profiling of shared libraries is not implemented yet. */ -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "MIPS" - -#include - -#ifndef ENTRY_POINT -#error ENTRY_POINT needs to be defined for MIPS. -#endif - -#include -#include -#include -#include - -/* The offset of gp from GOT might be system-dependent. It's set by - ld. The same value is also */ -#define OFFSET_GP_GOT 0x7ff0 - -#ifndef _RTLD_PROLOGUE -# define _RTLD_PROLOGUE(entry) \ - ".globl\t" __STRING(entry) "\n\t" \ - ".ent\t" __STRING(entry) "\n\t" \ - ".type\t" __STRING(entry) ", @function\n" \ - __STRING(entry) ":\n\t" -#endif - -#ifndef _RTLD_EPILOGUE -# define _RTLD_EPILOGUE(entry) \ - ".end\t" __STRING(entry) "\n\t" \ - ".size\t" __STRING(entry) ", . - " __STRING(entry) "\n\t" -#endif - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. - This only makes sense on MIPS when using PLTs, so choose the - PLT relocation (not encountered when not using PLTs). */ -#define ELF_MACHINE_JMP_SLOT R_MIPS_JUMP_SLOT -#define elf_machine_type_class(type) \ - ((((type) == ELF_MACHINE_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_MIPS_COPY) * ELF_RTYPE_CLASS_COPY)) - -#define ELF_MACHINE_PLT_REL 1 -#define ELF_MACHINE_NO_REL 0 -#define ELF_MACHINE_NO_RELA 0 - -/* Translate a processor specific dynamic tag to the index - in l_info array. */ -#define DT_MIPS(x) (DT_MIPS_##x - DT_LOPROC + DT_NUM) - -/* If there is a DT_MIPS_RLD_MAP_REL or DT_MIPS_RLD_MAP entry in the dynamic - section, fill in the debug map pointer with the run-time address of the - r_debug structure. */ -#define ELF_MACHINE_DEBUG_SETUP(l,r) \ -do { if ((l)->l_info[DT_MIPS (RLD_MAP_REL)]) \ - { \ - char *ptr = (char *)(l)->l_info[DT_MIPS (RLD_MAP_REL)]; \ - ptr += (l)->l_info[DT_MIPS (RLD_MAP_REL)]->d_un.d_val; \ - *(ElfW(Addr) *)ptr = (ElfW(Addr)) (r); \ - } \ - else if ((l)->l_info[DT_MIPS (RLD_MAP)]) \ - *(ElfW(Addr) *)((l)->l_info[DT_MIPS (RLD_MAP)]->d_un.d_ptr) = \ - (ElfW(Addr)) (r); \ - } while (0) - -#if ((defined __mips_nan2008 && !defined HAVE_MIPS_NAN2008) \ - || (!defined __mips_nan2008 && defined HAVE_MIPS_NAN2008)) -# error "Configuration inconsistency: __mips_nan2008 != HAVE_MIPS_NAN2008, overridden CFLAGS?" -#endif -#ifdef __mips_nan2008 -# define ELF_MACHINE_NAN2008 EF_MIPS_NAN2008 -#else -# define ELF_MACHINE_NAN2008 0 -#endif - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int __attribute_used__ -elf_machine_matches_host (const ElfW(Ehdr) *ehdr) -{ -#if _MIPS_SIM == _ABIO32 || _MIPS_SIM == _ABIN32 - /* Don't link o32 and n32 together. */ - if (((ehdr->e_flags & EF_MIPS_ABI2) != 0) != (_MIPS_SIM == _ABIN32)) - return 0; -#endif - - /* Don't link 2008-NaN and legacy-NaN objects together. */ - if ((ehdr->e_flags & EF_MIPS_NAN2008) != ELF_MACHINE_NAN2008) - return 0; - - /* Ensure that the old O32 FP64 ABI is never loaded, it is not supported - on linux. */ - if (ehdr->e_flags & EF_MIPS_FP64) - return 0; - - switch (ehdr->e_machine) - { - case EM_MIPS: - case EM_MIPS_RS3_LE: - return 1; - default: - return 0; - } -} - -static inline ElfW(Addr) * -elf_mips_got_from_gpreg (ElfW(Addr) gpreg) -{ - /* FIXME: the offset of gp from GOT may be system-dependent. */ - return (ElfW(Addr) *) (gpreg - OFFSET_GP_GOT); -} - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. This must be inlined in a function which - uses global data. We assume its $gp points to the primary GOT. */ -static inline ElfW(Addr) -elf_machine_dynamic (void) -{ - register ElfW(Addr) gp __asm__ ("$28"); - return *elf_mips_got_from_gpreg (gp); -} - -#define STRINGXP(X) __STRING(X) -#define STRINGXV(X) STRINGV_(X) -#define STRINGV_(...) # __VA_ARGS__ - -/* Return the run-time load address of the shared object. */ -static inline ElfW(Addr) -elf_machine_load_address (void) -{ - ElfW(Addr) addr; -#ifndef __mips16 - asm (" .set noreorder\n" - " " STRINGXP (PTR_LA) " %0, 0f\n" -# if !defined __mips_isa_rev || __mips_isa_rev < 6 - " bltzal $0, 0f\n" - " nop\n" - "0: " STRINGXP (PTR_SUBU) " %0, $31, %0\n" -# else - "0: addiupc $31, 0\n" - " " STRINGXP (PTR_SUBU) " %0, $31, %0\n" -# endif - " .set reorder\n" - : "=r" (addr) - : /* No inputs */ - : "$31"); -#else - ElfW(Addr) tmp; - asm (" .set noreorder\n" - " move %1,$gp\n" - " lw %1,%%got(0f)(%1)\n" - "0: .fill 0\n" /* Clear the ISA bit on 0:. */ - " la %0,0b\n" - " addiu %1,%%lo(0b)\n" - " subu %0,%1\n" - " .set reorder\n" - : "=d" (addr), "=d" (tmp) - : /* No inputs */); -#endif - return addr; -} - -/* The MSB of got[1] of a gnu object is set to identify gnu objects. */ -#if _MIPS_SIM == _ABI64 -# define ELF_MIPS_GNU_GOT1_MASK 0x8000000000000000L -#else -# define ELF_MIPS_GNU_GOT1_MASK 0x80000000L -#endif - -/* We can't rely on elf_machine_got_rel because _dl_object_relocation_scope - fiddles with global data. */ -#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) \ -do { \ - struct link_map *map = &bootstrap_map; \ - ElfW(Sym) *sym; \ - ElfW(Addr) *got; \ - int i, n; \ - \ - got = (ElfW(Addr) *) D_PTR (map, l_info[DT_PLTGOT]); \ - \ - if (__builtin_expect (map->l_addr == 0, 1)) \ - break; \ - \ - /* got[0] is reserved. got[1] is also reserved for the dynamic object \ - generated by gnu ld. Skip these reserved entries from \ - relocation. */ \ - i = (got[1] & ELF_MIPS_GNU_GOT1_MASK)? 2 : 1; \ - n = map->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val; \ - \ - /* Add the run-time displacement to all local got entries. */ \ - while (i < n) \ - got[i++] += map->l_addr; \ - \ - /* Handle global got entries. */ \ - got += n; \ - sym = (ElfW(Sym) *) D_PTR(map, l_info[DT_SYMTAB]) \ - + map->l_info[DT_MIPS (GOTSYM)]->d_un.d_val; \ - i = (map->l_info[DT_MIPS (SYMTABNO)]->d_un.d_val \ - - map->l_info[DT_MIPS (GOTSYM)]->d_un.d_val); \ - \ - while (i--) \ - { \ - if (sym->st_shndx == SHN_UNDEF || sym->st_shndx == SHN_COMMON) \ - *got = map->l_addr + sym->st_value; \ - else if (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC \ - && *got != sym->st_value) \ - *got += map->l_addr; \ - else if (ELFW(ST_TYPE) (sym->st_info) == STT_SECTION) \ - { \ - if (sym->st_other == 0) \ - *got += map->l_addr; \ - } \ - else \ - *got = map->l_addr + sym->st_value; \ - \ - got++; \ - sym++; \ - } \ -} while(0) - - -/* Mask identifying addresses reserved for the user program, - where the dynamic linker should not map anything. */ -#define ELF_MACHINE_USER_ADDRESS_MASK 0x80000000UL - - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. - Note how we have to be careful about two things: - - 1) That we allocate a minimal stack of 24 bytes for - every function call, the MIPS ABI states that even - if all arguments are passed in registers the procedure - called can use the 16 byte area pointed to by $sp - when it is called to store away the arguments passed - to it. - - 2) That under Unix the entry is named __start - and not just plain _start. */ - -#ifndef __mips16 -# if !defined __mips_isa_rev || __mips_isa_rev < 6 -# define LCOFF STRINGXP(.Lcof2) -# define LOAD_31 STRINGXP(bltzal $8) "," STRINGXP(.Lcof2) -# else -# define LCOFF STRINGXP(.Lcof1) -# define LOAD_31 "addiupc $31, 0" -# endif -# define RTLD_START asm (\ - ".text\n\ - " _RTLD_PROLOGUE(ENTRY_POINT) "\ - " STRINGXV(SETUP_GPX($25)) "\n\ - " STRINGXV(SETUP_GPX64($18,$25)) "\n\ - # i386 ABI book says that the first entry of GOT holds\n\ - # the address of the dynamic structure. Though MIPS ABI\n\ - # doesn't say nothing about this, I emulate this here.\n\ - " STRINGXP(PTR_LA) " $4, _DYNAMIC\n\ - # Subtract OFFSET_GP_GOT\n\ - " STRINGXP(PTR_S) " $4, -0x7ff0($28)\n\ - move $4, $29\n\ - " STRINGXP(PTR_SUBIU) " $29, 16\n\ - \n\ - " STRINGXP(PTR_LA) " $8, " LCOFF "\n\ -.Lcof1: " LOAD_31 "\n\ -.Lcof2: " STRINGXP(PTR_SUBU) " $8, $31, $8\n\ - \n\ - " STRINGXP(PTR_LA) " $25, _dl_start\n\ - " STRINGXP(PTR_ADDU) " $25, $8\n\ - jalr $25\n\ - \n\ - " STRINGXP(PTR_ADDIU) " $29, 16\n\ - # Get the value of label '_dl_start_user' in t9 ($25).\n\ - " STRINGXP(PTR_LA) " $25, _dl_start_user\n\ - " _RTLD_EPILOGUE(ENTRY_POINT) "\ - \n\ - \n\ - " _RTLD_PROLOGUE(_dl_start_user) "\ - " STRINGXP(SETUP_GP) "\n\ - " STRINGXV(SETUP_GP64($18,_dl_start_user)) "\n\ - move $16, $28\n\ - # Save the user entry point address in a saved register.\n\ - move $17, $2\n\ - # See if we were run as a command with the executable file\n\ - # name as an extra leading argument.\n\ - lw $2, _dl_skip_args\n\ - beq $2, $0, 1f\n\ - # Load the original argument count.\n\ - " STRINGXP(PTR_L) " $4, 0($29)\n\ - # Subtract _dl_skip_args from it.\n\ - subu $4, $2\n\ - # Adjust the stack pointer to skip _dl_skip_args words.\n\ - sll $2, " STRINGXP (PTRLOG) "\n\ - " STRINGXP(PTR_ADDU) " $29, $2\n\ - # Save back the modified argument count.\n\ - " STRINGXP(PTR_S) " $4, 0($29)\n\ -1: # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) \n\ - " STRINGXP(PTR_L) " $4, _rtld_local\n\ - " STRINGXP(PTR_L) /* or lw??? fixme */ " $5, 0($29)\n\ - " STRINGXP(PTR_LA) " $6, " STRINGXP (PTRSIZE) "($29)\n\ - sll $7, $5, " STRINGXP (PTRLOG) "\n\ - " STRINGXP(PTR_ADDU) " $7, $7, $6\n\ - " STRINGXP(PTR_ADDU) " $7, $7, " STRINGXP (PTRSIZE) " \n\ - # Make sure the stack pointer is aligned for _dl_init.\n\ - and $2, $29, -2 * " STRINGXP(SZREG) "\n\ - move $8, $29\n\ - " STRINGXP(PTR_SUBIU) " $29, $2, 32\n\ - " STRINGXP(PTR_S) " $8, (32 - " STRINGXP(SZREG) ")($29)\n\ - " STRINGXP(SAVE_GP(16)) "\n\ - # Call the function to run the initializers.\n\ - jal _dl_init\n\ - # Restore the stack pointer for _start.\n\ - " STRINGXP(PTR_L) " $29, (32 - " STRINGXP(SZREG) ")($29)\n\ - # Pass our finalizer function to the user in $2 as per ELF ABI.\n\ - " STRINGXP(PTR_LA) " $2, _dl_fini\n\ - # Jump to the user entry point.\n\ - move $25, $17\n\ - jr $25\n\t"\ - _RTLD_EPILOGUE(_dl_start_user)\ - ".previous"\ -); - -#else /* __mips16 */ -/* MIPS16 version. We currently only support O32 under MIPS16; the proper - assembly preprocessor abstractions will need to be added if other ABIs - are to be supported. */ - -# define RTLD_START asm (\ - ".text\n\ - .set mips16\n\ - " _RTLD_PROLOGUE (ENTRY_POINT) "\ - # Construct GP value in $3.\n\ - li $3, %hi(_gp_disp)\n\ - addiu $4, $pc, %lo(_gp_disp)\n\ - sll $3, 16\n\ - addu $3, $4\n\ - move $28, $3\n\ - lw $4, %got(_DYNAMIC)($3)\n\ - sw $4, -0x7ff0($3)\n\ - move $4, $sp\n\ - addiu $sp, -16\n\ - # _dl_start() is sufficiently near to use pc-relative\n\ - # load address.\n\ - la $3, _dl_start\n\ - move $25, $3\n\ - jalr $3\n\ - addiu $sp, 16\n\ - " _RTLD_EPILOGUE (ENTRY_POINT) "\ - \n\ - \n\ - " _RTLD_PROLOGUE (_dl_start_user) "\ - li $16, %hi(_gp_disp)\n\ - addiu $4, $pc, %lo(_gp_disp)\n\ - sll $16, 16\n\ - addu $16, $4\n\ - move $17, $2\n\ - move $28, $16\n\ - lw $4, %got(_dl_skip_args)($16)\n\ - lw $4, 0($4)\n\ - beqz $4, 1f\n\ - # Load the original argument count.\n\ - lw $5, 0($sp)\n\ - # Subtract _dl_skip_args from it.\n\ - subu $5, $4\n\ - # Adjust the stack pointer to skip _dl_skip_args words.\n\ - sll $4, " STRINGXP (PTRLOG) "\n\ - move $6, $sp\n\ - addu $6, $4\n\ - move $sp, $6\n\ - # Save back the modified argument count.\n\ - sw $5, 0($sp)\n\ -1: # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) \n\ - lw $4, %got(_rtld_local)($16)\n\ - lw $4, 0($4)\n\ - lw $5, 0($sp)\n\ - addiu $6, $sp, " STRINGXP (PTRSIZE) "\n\ - sll $7, $5, " STRINGXP (PTRLOG) "\n\ - addu $7, $6\n\ - addu $7, " STRINGXP (PTRSIZE) "\n\ - # Make sure the stack pointer is aligned for _dl_init.\n\ - li $2, 2 * " STRINGXP (SZREG) "\n\ - neg $2, $2\n\ - move $3, $sp\n\ - and $2, $3\n\ - sw $3, -" STRINGXP (SZREG) "($2)\n\ - addiu $2, -32\n\ - move $sp, $2\n\ - sw $16, 16($sp)\n\ - # Call the function to run the initializers.\n\ - lw $2, %call16(_dl_init)($16)\n\ - move $25, $2\n\ - jalr $2\n\ - # Restore the stack pointer for _start.\n\ - lw $2, 32-" STRINGXP (SZREG) "($sp)\n\ - move $sp, $2\n\ - move $28, $16\n\ - # Pass our finalizer function to the user in $2 as per ELF ABI.\n\ - lw $2, %call16(_dl_fini)($16)\n\ - # Jump to the user entry point.\n\ - move $25, $17\n\ - jr $17\n\t"\ - _RTLD_EPILOGUE (_dl_start_user)\ - ".previous"\ -); - -#endif /* __mips16 */ - -/* Names of the architecture-specific auditing callback functions. */ -# if _MIPS_SIM == _ABIO32 -# define ARCH_LA_PLTENTER mips_o32_gnu_pltenter -# define ARCH_LA_PLTEXIT mips_o32_gnu_pltexit -# elif _MIPS_SIM == _ABIN32 -# define ARCH_LA_PLTENTER mips_n32_gnu_pltenter -# define ARCH_LA_PLTEXIT mips_n32_gnu_pltexit -# else -# define ARCH_LA_PLTENTER mips_n64_gnu_pltenter -# define ARCH_LA_PLTEXIT mips_n64_gnu_pltexit -# endif - -/* We define an initialization function. This is called very early in - _dl_sysdep_start. */ -#define DL_PLATFORM_INIT dl_platform_init () - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ - if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') - /* Avoid an empty string which would disturb us. */ - GLRO(dl_platform) = NULL; -} - -/* For a non-writable PLT, rewrite the .got.plt entry at RELOC_ADDR to - point at the symbol with address VALUE. For a writable PLT, rewrite - the corresponding PLT entry instead. */ -static inline ElfW(Addr) -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const ElfW(Rel) *reloc, - ElfW(Addr) *reloc_addr, ElfW(Addr) value) -{ - return *reloc_addr = value; -} - -static inline ElfW(Addr) -elf_machine_plt_value (struct link_map *map, const ElfW(Rel) *reloc, - ElfW(Addr) value) -{ - return value; -} - -/* The semantics of zero/non-zero values of undefined symbols differs - depending on whether the non-PIC ABI is in use. Under the non-PIC - ABI, a non-zero value indicates that there is an address reference - to the symbol and thus it must always be resolved (except when - resolving a jump slot relocation) to the PLT entry whose address is - provided as the symbol's value; a zero value indicates that this - canonical-address behaviour is not required. Yet under the classic - MIPS psABI, a zero value indicates that there is an address - reference to the function and the dynamic linker must resolve the - symbol immediately upon loading. To avoid conflict, symbols for - which the dynamic linker must assume the non-PIC ABI semantics are - marked with the STO_MIPS_PLT flag. */ -#define ELF_MACHINE_SYM_NO_MATCH(sym) \ - ((sym)->st_shndx == SHN_UNDEF && !((sym)->st_other & STO_MIPS_PLT)) - -#endif /* !dl_machine_h */ - -#ifdef RESOLVE_MAP - -/* Perform a relocation described by R_INFO at the location pointed to - by RELOC_ADDR. SYM is the relocation symbol specified by R_INFO and - MAP is the object containing the reloc. */ - -auto inline void -__attribute__ ((always_inline)) -elf_machine_reloc (struct link_map *map, ElfW(Addr) r_info, - const ElfW(Sym) *sym, const struct r_found_version *version, - void *reloc_addr, ElfW(Addr) r_addend, int inplace_p) -{ - const unsigned long int r_type = ELFW(R_TYPE) (r_info); - ElfW(Addr) *addr_field = (ElfW(Addr) *) reloc_addr; - -#if !defined RTLD_BOOTSTRAP && !defined SHARED - /* This is defined in rtld.c, but nowhere in the static libc.a; - make the reference weak so static programs can still link. This - declaration cannot be done when compiling rtld.c (i.e. #ifdef - RTLD_BOOTSTRAP) because rtld.c contains the common defn for - _dl_rtld_map, which is incompatible with a weak decl in the same - file. */ - weak_extern (GL(dl_rtld_map)); -#endif - - switch (r_type) - { -#if !defined (RTLD_BOOTSTRAP) -# if _MIPS_SIM == _ABI64 - case R_MIPS_TLS_DTPMOD64: - case R_MIPS_TLS_DTPREL64: - case R_MIPS_TLS_TPREL64: -# else - case R_MIPS_TLS_DTPMOD32: - case R_MIPS_TLS_DTPREL32: - case R_MIPS_TLS_TPREL32: -# endif - { - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - - switch (r_type) - { - case R_MIPS_TLS_DTPMOD64: - case R_MIPS_TLS_DTPMOD32: - if (sym_map) - *addr_field = sym_map->l_tls_modid; - break; - - case R_MIPS_TLS_DTPREL64: - case R_MIPS_TLS_DTPREL32: - if (sym) - { - if (inplace_p) - r_addend = *addr_field; - *addr_field = r_addend + TLS_DTPREL_VALUE (sym); - } - break; - - case R_MIPS_TLS_TPREL32: - case R_MIPS_TLS_TPREL64: - if (sym) - { - CHECK_STATIC_TLS (map, sym_map); - if (inplace_p) - r_addend = *addr_field; - *addr_field = r_addend + TLS_TPREL_VALUE (sym_map, sym); - } - break; - } - - break; - } -#endif - -#if _MIPS_SIM == _ABI64 - case (R_MIPS_64 << 8) | R_MIPS_REL32: -#else - case R_MIPS_REL32: -#endif - { - int symidx = ELFW(R_SYM) (r_info); - ElfW(Addr) reloc_value; - - if (inplace_p) - /* Support relocations on mis-aligned offsets. */ - __builtin_memcpy (&reloc_value, reloc_addr, sizeof (reloc_value)); - else - reloc_value = r_addend; - - if (symidx) - { - const ElfW(Word) gotsym - = (const ElfW(Word)) map->l_info[DT_MIPS (GOTSYM)]->d_un.d_val; - - if ((ElfW(Word))symidx < gotsym) - { - /* This wouldn't work for a symbol imported from other - libraries for which there's no GOT entry, but MIPS - requires every symbol referenced in a dynamic - relocation to have a GOT entry in the primary GOT, - so we only get here for locally-defined symbols. - For section symbols, we should *NOT* be adding - sym->st_value (per the definition of the meaning of - S in reloc expressions in the ELF64 MIPS ABI), - since it should have already been added to - reloc_value by the linker, but older versions of - GNU ld didn't add it, and newer versions don't emit - useless relocations to section symbols any more, so - it is safe to keep on adding sym->st_value, even - though it's not ABI compliant. Some day we should - bite the bullet and stop doing this. */ -#ifndef RTLD_BOOTSTRAP - if (map != &GL(dl_rtld_map)) -#endif - reloc_value += sym->st_value + map->l_addr; - } - else - { -#ifndef RTLD_BOOTSTRAP - const ElfW(Addr) *got - = (const ElfW(Addr) *) D_PTR (map, l_info[DT_PLTGOT]); - const ElfW(Word) local_gotno - = (const ElfW(Word)) - map->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val; - - reloc_value += got[symidx + local_gotno - gotsym]; -#endif - } - } - else -#ifndef RTLD_BOOTSTRAP - if (map != &GL(dl_rtld_map)) -#endif - reloc_value += map->l_addr; - - __builtin_memcpy (reloc_addr, &reloc_value, sizeof (reloc_value)); - } - break; -#ifndef RTLD_BOOTSTRAP -#if _MIPS_SIM == _ABI64 - case (R_MIPS_64 << 8) | R_MIPS_GLOB_DAT: -#else - case R_MIPS_GLOB_DAT: -#endif - { - int symidx = ELFW(R_SYM) (r_info); - const ElfW(Word) gotsym - = (const ElfW(Word)) map->l_info[DT_MIPS (GOTSYM)]->d_un.d_val; - - if (__builtin_expect ((ElfW(Word)) symidx >= gotsym, 1)) - { - const ElfW(Addr) *got - = (const ElfW(Addr) *) D_PTR (map, l_info[DT_PLTGOT]); - const ElfW(Word) local_gotno - = ((const ElfW(Word)) - map->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val); - - ElfW(Addr) reloc_value = got[symidx + local_gotno - gotsym]; - __builtin_memcpy (reloc_addr, &reloc_value, sizeof (reloc_value)); - } - } - break; -#endif - case R_MIPS_NONE: /* Alright, Wilbur. */ - break; - - case R_MIPS_JUMP_SLOT: - { - struct link_map *sym_map; - ElfW(Addr) value; - - /* The addend for a jump slot relocation must always be zero: - calls via the PLT always branch to the symbol's address and - not to the address plus a non-zero offset. */ - if (r_addend != 0) - _dl_signal_error (0, map->l_name, NULL, - "found jump slot relocation with non-zero addend"); - - sym_map = RESOLVE_MAP (&sym, version, r_type); - value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; - *addr_field = value; - - break; - } - - case R_MIPS_COPY: - { - const ElfW(Sym) *const refsym = sym; - struct link_map *sym_map; - ElfW(Addr) value; - - /* Calculate the address of the symbol. */ - sym_map = RESOLVE_MAP (&sym, version, r_type); - value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; - - if (__builtin_expect (sym == NULL, 0)) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (__builtin_expect (sym->st_size > refsym->st_size, 0) - || (__builtin_expect (sym->st_size < refsym->st_size, 0) - && GLRO(dl_verbose))) - { - const char *strtab; - - strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ - %s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr, (void *) value, - MIN (sym->st_size, refsym->st_size)); - break; - } - -#if _MIPS_SIM == _ABI64 - case R_MIPS_64: - /* For full compliance with the ELF64 ABI, one must precede the - _REL32/_64 pair of relocations with a _64 relocation, such - that the in-place addend is read as a 64-bit value. IRIX - didn't pick up on this requirement, so we treat the - _REL32/_64 relocation as a 64-bit relocation even if it's by - itself. For ABI compliance, we ignore such _64 dummy - relocations. For RELA, this may be simply removed, since - it's totally unnecessary. */ - if (ELFW(R_SYM) (r_info) == 0) - break; - /* Fall through. */ -#endif - default: - _dl_reloc_bad_type (map, r_type, 0); - break; - } -} - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rel (struct link_map *map, const ElfW(Rel) *reloc, - const ElfW(Sym) *sym, const struct r_found_version *version, - void *const reloc_addr, int skip_ifunc) -{ - elf_machine_reloc (map, reloc->r_info, sym, version, reloc_addr, 0, 1); -} - -auto inline void -__attribute__((always_inline)) -elf_machine_rel_relative (ElfW(Addr) l_addr, const ElfW(Rel) *reloc, - void *const reloc_addr) -{ - /* XXX Nothing to do. There is no relative relocation, right? */ -} - -auto inline void -__attribute__((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - ElfW(Addr) l_addr, const ElfW(Rel) *reloc, - int skip_ifunc) -{ - ElfW(Addr) *const reloc_addr = (void *) (l_addr + reloc->r_offset); - const unsigned int r_type = ELFW(R_TYPE) (reloc->r_info); - /* Check for unexpected PLT reloc type. */ - if (__builtin_expect (r_type == R_MIPS_JUMP_SLOT, 1)) - { - if (__builtin_expect (map->l_mach.plt, 0) == 0) - { - /* Nothing is required here since we only support lazy - relocation in executables. */ - } - else - *reloc_addr = map->l_mach.plt; - } - else - _dl_reloc_bad_type (map, r_type, 1); -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, - const ElfW(Sym) *sym, const struct r_found_version *version, - void *const reloc_addr, int skip_ifunc) -{ - elf_machine_reloc (map, reloc->r_info, sym, version, reloc_addr, - reloc->r_addend, 0); -} - -auto inline void -__attribute__((always_inline)) -elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc, - void *const reloc_addr) -{ -} - -#ifndef RTLD_BOOTSTRAP -/* Relocate GOT. */ -auto inline void -__attribute__((always_inline)) -elf_machine_got_rel (struct link_map *map, int lazy) -{ - ElfW(Addr) *got; - ElfW(Sym) *sym; - const ElfW(Half) *vernum; - int i, n, symidx; - -#define RESOLVE_GOTSYM(sym,vernum,sym_index,reloc) \ - ({ \ - const ElfW(Sym) *ref = sym; \ - const struct r_found_version *version __attribute__ ((unused)) \ - = vernum ? &map->l_versions[vernum[sym_index] & 0x7fff] : NULL; \ - struct link_map *sym_map; \ - sym_map = RESOLVE_MAP (&ref, version, reloc); \ - ref ? sym_map->l_addr + ref->st_value : 0; \ - }) - - if (map->l_info[VERSYMIDX (DT_VERSYM)] != NULL) - vernum = (const void *) D_PTR (map, l_info[VERSYMIDX (DT_VERSYM)]); - else - vernum = NULL; - - got = (ElfW(Addr) *) D_PTR (map, l_info[DT_PLTGOT]); - - n = map->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val; - /* The dynamic linker's local got entries have already been relocated. */ - if (map != &GL(dl_rtld_map)) - { - /* got[0] is reserved. got[1] is also reserved for the dynamic object - generated by gnu ld. Skip these reserved entries from relocation. */ - i = (got[1] & ELF_MIPS_GNU_GOT1_MASK)? 2 : 1; - - /* Add the run-time displacement to all local got entries if - needed. */ - if (__builtin_expect (map->l_addr != 0, 0)) - { - while (i < n) - got[i++] += map->l_addr; - } - } - - /* Handle global got entries. */ - got += n; - /* Keep track of the symbol index. */ - symidx = map->l_info[DT_MIPS (GOTSYM)]->d_un.d_val; - sym = (ElfW(Sym) *) D_PTR (map, l_info[DT_SYMTAB]) + symidx; - i = (map->l_info[DT_MIPS (SYMTABNO)]->d_un.d_val - - map->l_info[DT_MIPS (GOTSYM)]->d_un.d_val); - - /* This loop doesn't handle Quickstart. */ - while (i--) - { - if (sym->st_shndx == SHN_UNDEF) - { - if (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC && sym->st_value - && !(sym->st_other & STO_MIPS_PLT)) - { - if (lazy) - *got = sym->st_value + map->l_addr; - else - /* This is a lazy-binding stub, so we don't need the - canonical address. */ - *got = RESOLVE_GOTSYM (sym, vernum, symidx, R_MIPS_JUMP_SLOT); - } - else - *got = RESOLVE_GOTSYM (sym, vernum, symidx, R_MIPS_32); - } - else if (sym->st_shndx == SHN_COMMON) - *got = RESOLVE_GOTSYM (sym, vernum, symidx, R_MIPS_32); - else if (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC - && *got != sym->st_value) - { - if (lazy) - *got += map->l_addr; - else - /* This is a lazy-binding stub, so we don't need the - canonical address. */ - *got = RESOLVE_GOTSYM (sym, vernum, symidx, R_MIPS_JUMP_SLOT); - } - else if (ELFW(ST_TYPE) (sym->st_info) == STT_SECTION) - { - if (sym->st_other == 0) - *got += map->l_addr; - } - else - *got = RESOLVE_GOTSYM (sym, vernum, symidx, R_MIPS_32); - - ++got; - ++sym; - ++symidx; - } - -#undef RESOLVE_GOTSYM -} -#endif - -/* Set up the loaded object described by L so its stub function - will jump to the on-demand fixup code __dl_runtime_resolve. */ - -auto inline int -__attribute__((always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ -# ifndef RTLD_BOOTSTRAP - ElfW(Addr) *got; - extern void _dl_runtime_resolve (ElfW(Word)); - extern void _dl_runtime_pltresolve (void); - extern int _dl_mips_gnu_objects; - - if (lazy) - { - /* The GOT entries for functions have not yet been filled in. - Their initial contents will arrange when called to put an - offset into the .dynsym section in t8, the return address - in t7 and then jump to _GLOBAL_OFFSET_TABLE[0]. */ - got = (ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]); - - /* This function will get called to fix up the GOT entry indicated by - the register t8, and then jump to the resolved address. */ - got[0] = (ElfW(Addr)) &_dl_runtime_resolve; - - /* Store l to _GLOBAL_OFFSET_TABLE[1] for gnu object. The MSB - of got[1] of a gnu object is set to identify gnu objects. - Where we can store l for non gnu objects? XXX */ - if ((got[1] & ELF_MIPS_GNU_GOT1_MASK) != 0) - got[1] = ((ElfW(Addr)) l | ELF_MIPS_GNU_GOT1_MASK); - else - _dl_mips_gnu_objects = 0; - } - - /* Relocate global offset table. */ - elf_machine_got_rel (l, lazy); - - /* If using PLTs, fill in the first two entries of .got.plt. */ - if (l->l_info[DT_JMPREL] && lazy) - { - ElfW(Addr) *gotplt; - gotplt = (ElfW(Addr) *) D_PTR (l, l_info[DT_MIPS (PLTGOT)]); - /* If a library is prelinked but we have to relocate anyway, - we have to be able to undo the prelinking of .got.plt. - The prelinker saved the address of .plt for us here. */ - if (gotplt[1]) - l->l_mach.plt = gotplt[1] + l->l_addr; - gotplt[0] = (ElfW(Addr)) &_dl_runtime_pltresolve; - gotplt[1] = (ElfW(Addr)) l; - } - -# endif - return lazy; -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/mips/dl-procinfo.c b/sysdeps/mips/dl-procinfo.c deleted file mode 100644 index a3e0703794..0000000000 --- a/sysdeps/mips/dl-procinfo.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Data for Mips version of processor capability information. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Robert Millan . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This information must be kept in sync with the _DL_PLATFORM_COUNT - definitions in procinfo.h. - - If anything should be added here check whether the size of each string - is still ok with the given array size. - - All the #ifdefs in the definitions are quite irritating but - necessary if we want to avoid duplicating the information. There - are three different modes: - - - PROCINFO_DECL is defined. This means we are only interested in - declarations. - - - PROCINFO_DECL is not defined: - - + if SHARED is defined the file is included in an array - initializer. The .element = { ... } syntax is needed. - - + if SHARED is not defined a normal array initialization is - needed. - */ - -#ifndef PROCINFO_CLASS -#define PROCINFO_CLASS -#endif - -#if !defined PROCINFO_DECL && defined SHARED - ._dl_mips_platforms -#else -PROCINFO_CLASS const char _dl_mips_platforms[4][11] -#endif -#ifndef PROCINFO_DECL -= { - "loongson2e", "loongson2f", "octeon", "octeon2" - } -#endif -#if !defined SHARED || defined PROCINFO_DECL -; -#else -, -#endif - -#undef PROCINFO_DECL -#undef PROCINFO_CLASS diff --git a/sysdeps/mips/dl-procinfo.h b/sysdeps/mips/dl-procinfo.h deleted file mode 100644 index 9e6d8e5a40..0000000000 --- a/sysdeps/mips/dl-procinfo.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Mips version of processor capability information handling macros. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Robert Millan . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _DL_PROCINFO_H -#define _DL_PROCINFO_H 1 - -#include - - -/* Mask to filter out platforms. */ -#define _DL_HWCAP_PLATFORM (-1ULL) - -#define _DL_PLATFORMS_COUNT 4 - -static inline int -__attribute__ ((unused, always_inline)) -_dl_string_platform (const char *str) -{ - int i; - - if (str != NULL) - for (i = 0; i < _DL_PLATFORMS_COUNT; ++i) - { - if (strcmp (str, GLRO(dl_mips_platforms)[i]) == 0) - return i; - } - return -1; -}; - -/* We cannot provide a general printing function. */ -#define _dl_procinfo(type, word) -1 - -/* There are no hardware capabilities defined. */ -#define _dl_hwcap_string(idx) "" - -/* By default there is no important hardware capability. */ -#define HWCAP_IMPORTANT (0) - -/* We don't have any hardware capabilities. */ -#define _DL_HWCAP_COUNT 0 - -#define _dl_string_hwcap(str) (-1) - -#endif /* dl-procinfo.h */ diff --git a/sysdeps/mips/dl-tls.h b/sysdeps/mips/dl-tls.h deleted file mode 100644 index 6213333f5e..0000000000 --- a/sysdeps/mips/dl-tls.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. MIPS version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - -/* The thread pointer points 0x7000 past the first static TLS block. */ -#define TLS_TP_OFFSET 0x7000 - -/* Dynamic thread vector pointers point 0x8000 past the start of each - TLS block. */ -#define TLS_DTV_OFFSET 0x8000 - -/* Compute the value for a GOTTPREL reloc. */ -#define TLS_TPREL_VALUE(sym_map, sym) \ - ((sym_map)->l_tls_offset + (sym)->st_value - TLS_TP_OFFSET) - -/* Compute the value for a DTPREL reloc. */ -#define TLS_DTPREL_VALUE(sym) \ - ((sym)->st_value - TLS_DTV_OFFSET) - -extern void *__tls_get_addr (tls_index *ti); - -# define GET_ADDR_OFFSET (ti->ti_offset + TLS_DTV_OFFSET) -# define __TLS_GET_ADDR(__ti) (__tls_get_addr (__ti) - TLS_DTV_OFFSET) diff --git a/sysdeps/mips/dl-trampoline.c b/sysdeps/mips/dl-trampoline.c deleted file mode 100644 index 243c4d1f54..0000000000 --- a/sysdeps/mips/dl-trampoline.c +++ /dev/null @@ -1,513 +0,0 @@ -/* PLT trampoline. MIPS version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Kazumoto Kojima . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* FIXME: Profiling of shared libraries is not implemented yet. */ - -#include -#include -#include -#include -#include -#include - -/* Get link map for callers object containing STUB_PC. */ -static inline struct link_map * -elf_machine_runtime_link_map (ElfW(Addr) gpreg, ElfW(Addr) stub_pc) -{ - extern int _dl_mips_gnu_objects; - - /* got[1] is reserved to keep its link map address for the shared - object generated by the gnu linker. If all are such objects, we - can find the link map from current GPREG simply. If not so, get - the link map for caller's object containing STUB_PC. */ - - if (_dl_mips_gnu_objects) - { - ElfW(Addr) *got = elf_mips_got_from_gpreg (gpreg); - ElfW(Word) g1; - - g1 = ((ElfW(Word) *) got)[1]; - - if ((g1 & ELF_MIPS_GNU_GOT1_MASK) != 0) - { - struct link_map *l = - (struct link_map *) (g1 & ~ELF_MIPS_GNU_GOT1_MASK); - ElfW(Addr) base, limit; - const ElfW(Phdr) *p = l->l_phdr; - ElfW(Half) this, nent = l->l_phnum; - - /* For the common case of a stub being called from the containing - object, STUB_PC will point to somewhere within the object that - is described by the link map fetched via got[1]. Otherwise we - have to scan all maps. */ - for (this = 0; this < nent; this++) - { - if (p[this].p_type == PT_LOAD) - { - base = p[this].p_vaddr + l->l_addr; - limit = base + p[this].p_memsz; - if (stub_pc >= base && stub_pc < limit) - return l; - } - } - } - } - - struct link_map *l; - Lmid_t nsid; - - for (nsid = 0; nsid < DL_NNS; ++nsid) - for (l = GL(dl_ns)[nsid]._ns_loaded; l != NULL; l = l->l_next) - { - ElfW(Addr) base, limit; - const ElfW(Phdr) *p = l->l_phdr; - ElfW(Half) this, nent = l->l_phnum; - - for (this = 0; this < nent; ++this) - { - if (p[this].p_type == PT_LOAD) - { - base = p[this].p_vaddr + l->l_addr; - limit = base + p[this].p_memsz; - if (stub_pc >= base && stub_pc < limit) - return l; - } - } - } - - _dl_signal_error (0, NULL, NULL, "cannot find runtime link map"); - return NULL; -} - -/* Define mips specific runtime resolver. The function __dl_runtime_resolve - is called from assembler function _dl_runtime_resolve which converts - special argument registers t7 ($15) and t8 ($24): - t7 address to return to the caller of the function - t8 index for this function symbol in .dynsym - to usual c arguments. - - Other architectures call fixup from dl-runtime.c in - _dl_runtime_resolve. MIPS instead calls __dl_runtime_resolve. We - have to use our own version because of the way the got section is - treated on MIPS (we've also got ELF_MACHINE_PLT defined). */ - -/* The flag _dl_mips_gnu_objects is set if all dynamic objects are - generated by the gnu linker. */ -int _dl_mips_gnu_objects = 1; - -/* This is called from assembly stubs below which the compiler can't see. */ -static ElfW(Addr) -__dl_runtime_resolve (ElfW(Word), ElfW(Word), ElfW(Addr), ElfW(Addr)) - __attribute_used__; - -static ElfW(Addr) -__dl_runtime_resolve (ElfW(Word) sym_index, - ElfW(Word) return_address, - ElfW(Addr) old_gpreg, - ElfW(Addr) stub_pc) -{ - struct link_map *l = elf_machine_runtime_link_map (old_gpreg, stub_pc); - const ElfW(Sym) *const symtab - = (const ElfW(Sym) *) D_PTR (l, l_info[DT_SYMTAB]); - const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]); - ElfW(Addr) *got - = (ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]); - const ElfW(Word) local_gotno - = (const ElfW(Word)) l->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val; - const ElfW(Word) gotsym - = (const ElfW(Word)) l->l_info[DT_MIPS (GOTSYM)]->d_un.d_val; - const ElfW(Sym) *sym = &symtab[sym_index]; - struct link_map *sym_map; - ElfW(Addr) value; - - /* FIXME: The symbol versioning stuff is not tested yet. */ - if (__builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0) - { - switch (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL ? 1 : 0) - { - default: - { - const ElfW(Half) *vernum = - (const void *) D_PTR (l, l_info[VERSYMIDX (DT_VERSYM)]); - ElfW(Half) ndx = vernum[sym_index] & 0x7fff; - const struct r_found_version *version = &l->l_versions[ndx]; - - if (version->hash != 0) - { - /* We need to keep the scope around so do some locking. This is - not necessary for objects which cannot be unloaded or when - we are not using any threads (yet). */ - if (!RTLD_SINGLE_THREAD_P) - THREAD_GSCOPE_SET_FLAG (); - - sym_map = _dl_lookup_symbol_x (strtab + sym->st_name, l, - &sym, l->l_scope, version, - ELF_RTYPE_CLASS_PLT, 0, 0); - - /* We are done with the global scope. */ - if (!RTLD_SINGLE_THREAD_P) - THREAD_GSCOPE_RESET_FLAG (); - - break; - } - /* Fall through. */ - } - case 0: - { - /* We need to keep the scope around so do some locking. This is - not necessary for objects which cannot be unloaded or when - we are not using any threads (yet). */ - int flags = DL_LOOKUP_ADD_DEPENDENCY; - if (!RTLD_SINGLE_THREAD_P) - { - THREAD_GSCOPE_SET_FLAG (); - flags |= DL_LOOKUP_GSCOPE_LOCK; - } - - sym_map = _dl_lookup_symbol_x (strtab + sym->st_name, l, &sym, - l->l_scope, 0, ELF_RTYPE_CLASS_PLT, - flags, 0); - - /* We are done with the global scope. */ - if (!RTLD_SINGLE_THREAD_P) - THREAD_GSCOPE_RESET_FLAG (); - } - } - - /* Currently value contains the base load address of the object - that defines sym. Now add in the symbol offset. */ - value = (sym ? sym_map->l_addr + sym->st_value : 0); - } - else - /* We already found the symbol. The module (and therefore its load - address) is also known. */ - value = l->l_addr + sym->st_value; - - /* Apply the relocation with that value. */ - *(got + local_gotno + sym_index - gotsym) = value; - - return value; -} - -#if _MIPS_SIM == _ABIO32 -#define ELF_DL_FRAME_SIZE 40 - -#define ELF_DL_SAVE_ARG_REGS "\ - sw $15, 36($29)\n \ - sw $4, 16($29)\n \ - sw $5, 20($29)\n \ - sw $6, 24($29)\n \ - sw $7, 28($29)\n \ -" - -#define ELF_DL_RESTORE_ARG_REGS "\ - lw $31, 36($29)\n \ - lw $4, 16($29)\n \ - lw $5, 20($29)\n \ - lw $6, 24($29)\n \ - lw $7, 28($29)\n \ -" - -/* The PLT resolver should also save and restore $2 and $3, which are used - as arguments to MIPS16 stub functions. */ -#define ELF_DL_PLT_FRAME_SIZE 48 - -#define ELF_DL_PLT_SAVE_ARG_REGS \ - ELF_DL_SAVE_ARG_REGS "\ - sw $2, 40($29)\n \ - sw $3, 44($29)\n \ -" - -#define ELF_DL_PLT_RESTORE_ARG_REGS \ - ELF_DL_RESTORE_ARG_REGS "\ - lw $2, 40($29)\n \ - lw $3, 44($29)\n \ -" - -#define IFABIO32(X) X -#define IFNEWABI(X) - -#else /* _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 */ - -#define ELF_DL_FRAME_SIZE 80 - -#define ELF_DL_SAVE_ARG_REGS "\ - sd $15, 72($29)\n \ - sd $4, 8($29)\n \ - sd $5, 16($29)\n \ - sd $6, 24($29)\n \ - sd $7, 32($29)\n \ - sd $8, 40($29)\n \ - sd $9, 48($29)\n \ - sd $10, 56($29)\n \ - sd $11, 64($29)\n \ -" - -#define ELF_DL_RESTORE_ARG_REGS "\ - ld $31, 72($29)\n \ - ld $4, 8($29)\n \ - ld $5, 16($29)\n \ - ld $6, 24($29)\n \ - ld $7, 32($29)\n \ - ld $8, 40($29)\n \ - ld $9, 48($29)\n \ - ld $10, 56($29)\n \ - ld $11, 64($29)\n \ -" - -/* The PLT resolver should also save and restore $2 and $3, which are used - as arguments to MIPS16 stub functions. */ -#define ELF_DL_PLT_FRAME_SIZE 96 - -#define ELF_DL_PLT_SAVE_ARG_REGS \ - ELF_DL_SAVE_ARG_REGS "\ - sd $2, 80($29)\n \ - sd $3, 88($29)\n \ -" - -#define ELF_DL_PLT_RESTORE_ARG_REGS \ - ELF_DL_RESTORE_ARG_REGS "\ - ld $2, 80($29)\n \ - ld $3, 88($29)\n \ -" - -#define IFABIO32(X) -#define IFNEWABI(X) X - -#endif - -#ifndef __mips16 -asm ("\n\ - .text\n\ - .align 2\n\ - .set nomips16\n\ - .globl _dl_runtime_resolve\n\ - .type _dl_runtime_resolve,@function\n\ - .ent _dl_runtime_resolve\n\ -_dl_runtime_resolve:\n\ - .frame $29, " STRINGXP(ELF_DL_FRAME_SIZE) ", $31\n\ - .set noreorder\n\ - # Save GP.\n\ -1: move $3, $28\n\ - # Save arguments and sp value in stack.\n\ - " STRINGXP(PTR_SUBIU) " $29, " STRINGXP(ELF_DL_FRAME_SIZE) "\n\ - # Modify t9 ($25) so as to point .cpload instruction.\n\ - " IFABIO32(STRINGXP(PTR_ADDIU) " $25, (2f-1b)\n") "\ - # Compute GP.\n\ -2: " STRINGXP(SETUP_GP) "\n\ - " STRINGXV(SETUP_GP64 (0, _dl_runtime_resolve)) "\n\ - .set reorder\n\ - # Save slot call pc.\n\ - move $2, $31\n\ - " IFABIO32(STRINGXP(CPRESTORE(32))) "\n\ - " ELF_DL_SAVE_ARG_REGS "\ - move $4, $24\n\ - move $5, $15\n\ - move $6, $3\n\ - move $7, $2\n\ - jal __dl_runtime_resolve\n\ - " ELF_DL_RESTORE_ARG_REGS "\ - " STRINGXP(RESTORE_GP64) "\n\ - " STRINGXP(PTR_ADDIU) " $29, " STRINGXP(ELF_DL_FRAME_SIZE) "\n\ - move $25, $2\n\ - jr $25\n\ - .end _dl_runtime_resolve\n\ - .previous\n\ -"); - -/* Assembler veneer called from the PLT header code when using PLTs. - - Code in each PLT entry and the PLT header fills in the arguments to - this function: - - - $15 (o32 t7, n32/n64 t3) - caller's return address - - $24 (t8) - PLT entry index - - $25 (t9) - address of _dl_runtime_pltresolve - - o32 $28 (gp), n32/n64 $14 (t2) - address of .got.plt - - Different registers are used for .got.plt because the ABI was - originally designed for o32, where gp was available (call - clobbered). On n32/n64 gp is call saved. - - _dl_fixup needs: - - - $4 (a0) - link map address - - $5 (a1) - .rel.plt offset (== PLT entry index * 8) */ - -asm ("\n\ - .text\n\ - .align 2\n\ - .set nomips16\n\ - .globl _dl_runtime_pltresolve\n\ - .type _dl_runtime_pltresolve,@function\n\ - .ent _dl_runtime_pltresolve\n\ -_dl_runtime_pltresolve:\n\ - .frame $29, " STRINGXP(ELF_DL_PLT_FRAME_SIZE) ", $31\n\ - .set noreorder\n\ - # Save arguments and sp value in stack.\n\ -1: " STRINGXP(PTR_SUBIU) " $29, " STRINGXP(ELF_DL_PLT_FRAME_SIZE) "\n\ - " IFABIO32(STRINGXP(PTR_L) " $13, " STRINGXP(PTRSIZE) "($28)") "\n\ - " IFNEWABI(STRINGXP(PTR_L) " $13, " STRINGXP(PTRSIZE) "($14)") "\n\ - # Modify t9 ($25) so as to point .cpload instruction.\n\ - " IFABIO32(STRINGXP(PTR_ADDIU) " $25, (2f-1b)\n") "\ - # Compute GP.\n\ -2: " STRINGXP(SETUP_GP) "\n\ - " STRINGXV(SETUP_GP64 (0, _dl_runtime_pltresolve)) "\n\ - .set reorder\n\ - " IFABIO32(STRINGXP(CPRESTORE(32))) "\n\ - " ELF_DL_PLT_SAVE_ARG_REGS "\ - move $4, $13\n\ - sll $5, $24, " STRINGXP(PTRLOG) " + 1\n\ - jal _dl_fixup\n\ - move $25, $2\n\ - " ELF_DL_PLT_RESTORE_ARG_REGS "\ - " STRINGXP(RESTORE_GP64) "\n\ - " STRINGXP(PTR_ADDIU) " $29, " STRINGXP(ELF_DL_PLT_FRAME_SIZE) "\n\ - jr $25\n\ - .end _dl_runtime_pltresolve\n\ - .previous\n\ -"); - -#elif _MIPS_SIM == _ABIO32 /* __mips16 */ -/* MIPS16 version, O32 only. */ -asm ("\n\ - .text\n\ - .align 2\n\ - .set mips16\n\ - .globl _dl_runtime_resolve\n\ - .type _dl_runtime_resolve,@function\n\ - .ent _dl_runtime_resolve\n\ -_dl_runtime_resolve:\n\ - .frame $29, " STRINGXP (ELF_DL_FRAME_SIZE) ", $31\n\ - # Save arguments and sp value in stack.\n\t" -# if _MIPS_ISA >= _MIPS_ISA_MIPS32 - "save " STRINGXP (ELF_DL_FRAME_SIZE) ", $4-$7, $ra\n\t" -# else - "addiu $sp, -" STRINGXP (ELF_DL_FRAME_SIZE) "\n\ - sw $7, 32($sp)\n\ - sw $6, 28($sp)\n\ - sw $5, 24($sp)\n\ - sw $4, 20($sp)\n\t" -# endif - "# Preserve caller's $ra, for RESTORE instruction below.\n\ - move $5, $15\n\ - sw $5, 36($sp)\n\ - # Compute GP into $2.\n\ - li $2, %hi(_gp_disp)\n\ - addiu $3, $pc, %lo(_gp_disp)\n\ - sll $2, 16\n\ - addu $2, $3\n\ - lw $3, %got(__dl_runtime_resolve)($2)\n\ - move $4, $24\n\ - addiu $3, %lo(__dl_runtime_resolve)\n\ - move $7, $ra\n\ - move $6, $28\n\ - move $25, $3\n\ - jalr $3\n\t" -# if _MIPS_ISA >= _MIPS_ISA_MIPS32 - "restore " STRINGXP(ELF_DL_FRAME_SIZE) ", $4-$7, $ra\n\t" -# else - "# Restore $ra, move placed further down to hide latency.\n\ - lw $4, 36($sp)\n\ - lw $5, 24($sp)\n\ - lw $6, 28($sp)\n\ - lw $7, 32($sp)\n\ - move $ra, $4\n\ - lw $4, 20($sp)\n\ - addiu $sp, " STRINGXP(ELF_DL_FRAME_SIZE) "\n\t" -# endif - "move $25, $2\n\ - jr $2\n\ - .end _dl_runtime_resolve\n\ - .previous\n\ -"); - -asm ("\n\ - .text\n\ - .align 2\n\ - .set mips16\n\ - .globl _dl_runtime_pltresolve\n\ - .type _dl_runtime_pltresolve,@function\n\ - .ent _dl_runtime_pltresolve\n\ -_dl_runtime_pltresolve:\n\ - .frame $29, " STRINGXP(ELF_DL_PLT_FRAME_SIZE) ", $31\n\ - # Save arguments and sp value in stack.\n\t" -# if _MIPS_ISA >= _MIPS_ISA_MIPS32 - "save " STRINGXP(ELF_DL_PLT_FRAME_SIZE) ", $4-$7, $ra\n\t" -# else - "addiu $sp, -" STRINGXP(ELF_DL_PLT_FRAME_SIZE) "\n\ - sw $7, 40($sp)\n\ - sw $6, 36($sp)\n\ - sw $5, 32($sp)\n\ - sw $4, 28($sp)\n\t" -# endif - "# Preserve MIPS16 stub function arguments.\n\ - sw $3, 20($sp)\n\ - sw $2, 16($sp)\n\ - # Preserve caller's $ra, for RESTORE instruction below.\n\ - move $3, $15\n\ - sw $3, 44($sp)\n\ - # Compute GP into $2.\n\ - li $2, %hi(_gp_disp)\n\ - addiu $3, $pc, %lo(_gp_disp)\n\ - sll $2, 16\n\ - addu $2, $3\n\ - # Save GP value in slot.\n\ - sw $2, 24($sp)\n\ - # Load _dl_fixup address.\n\ - lw $6, %call16(_dl_fixup)($2)\n\ - # Load link map address.\n\ - move $3, $28\n\ - lw $4, " STRINGXP (PTRSIZE) "($3)\n\ - move $5, $24\n\ - sll $5, " STRINGXP (PTRLOG) " + 1\n\ - # Call _dl_fixup.\n\ - move $25, $6\n\ - jalr $6\n\ - move $25, $2\n\ - # Reload GP value into $28.\n\ - lw $3, 24($sp)\n\ - move $28, $3\n\ - lw $3, 16($sp)\n\ - move $15, $3\n\ - lw $3, 20($sp)\n\t" -# if _MIPS_ISA >= _MIPS_ISA_MIPS32 - "restore " STRINGXP (ELF_DL_PLT_FRAME_SIZE) ", $4-$7, $ra\n\t" -# else - "# Restore $ra, move placed further down to hide latency.\n\ - lw $4, 44($sp)\n\ - lw $5, 32($sp)\n\ - lw $6, 36($sp)\n\ - lw $7, 40($sp)\n\ - move $ra, $4\n\ - lw $4, 28($sp)\n\ - addiu $sp, " STRINGXP (ELF_DL_PLT_FRAME_SIZE) "\n\t" -# endif - ".set noreorder\n\ - jr $2\n\ - move $2, $15\n\ - .set reorder\n\ - .end _dl_runtime_pltresolve\n\ - .previous\n\ -"); - -#else /* __mips16 && _MIPS_SIM != _ABIO32 */ -# error "MIPS16 support for N32/N64 not implemented" - -#endif /* __mips16 */ diff --git a/sysdeps/mips/fpregdef.h b/sysdeps/mips/fpregdef.h deleted file mode 100644 index cb617ffb3b..0000000000 --- a/sysdeps/mips/fpregdef.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FPREGDEF_H -#define _FPREGDEF_H - -#include - -#endif /* _FPREGDEF_H */ diff --git a/sysdeps/mips/fpu/e_sqrt.c b/sysdeps/mips/fpu/e_sqrt.c deleted file mode 100644 index 543cf2608b..0000000000 --- a/sysdeps/mips/fpu/e_sqrt.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Hartvig Ekner , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -#include - - -#if (_MIPS_ISA >= _MIPS_ISA_MIPS2) - -double __attribute__ ((nomips16)) -__ieee754_sqrt (double x) -{ - double z; - __asm__ ("sqrt.d %0,%1" : "=f" (z) : "f" (x)); - return z; -} -strong_alias (__ieee754_sqrt, __sqrt_finite) - -#else - -#include - -#endif diff --git a/sysdeps/mips/fpu/e_sqrtf.c b/sysdeps/mips/fpu/e_sqrtf.c deleted file mode 100644 index f0c101185a..0000000000 --- a/sysdeps/mips/fpu/e_sqrtf.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Hartvig Ekner , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -#include - - -#if (_MIPS_ISA >= _MIPS_ISA_MIPS2) - -float __attribute__ ((nomips16)) -__ieee754_sqrtf (float x) -{ - float z; - __asm__ ("sqrt.s %0,%1" : "=f" (z) : "f" (x)); - return z; -} -strong_alias (__ieee754_sqrtf, __sqrtf_finite) - -#else - -#include - -#endif diff --git a/sysdeps/mips/fpu/fclrexcpt.c b/sysdeps/mips/fpu/fclrexcpt.c deleted file mode 100644 index 87cb4a30d2..0000000000 --- a/sysdeps/mips/fpu/fclrexcpt.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -int -feclearexcept (int excepts) -{ - int cw; - - /* Mask out unsupported bits/exceptions. */ - excepts &= FE_ALL_EXCEPT; - - /* Read the complete control word. */ - _FPU_GETCW (cw); - - /* Clear exception flag bits and cause bits. If the cause bit is not - cleared, the next CTC instruction (just below) will re-generate the - exception. */ - - cw &= ~(excepts | (excepts << CAUSE_SHIFT)); - - /* Put the new data in effect. */ - _FPU_SETCW (cw); - - /* Success. */ - return 0; -} -libm_hidden_def (feclearexcept) diff --git a/sysdeps/mips/fpu/fedisblxcpt.c b/sysdeps/mips/fpu/fedisblxcpt.c deleted file mode 100644 index c6d18820d3..0000000000 --- a/sysdeps/mips/fpu/fedisblxcpt.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -int -fedisableexcept (int excepts) -{ - unsigned int new_exc, old_exc; - - /* Get the current control word. */ - _FPU_GETCW (new_exc); - - old_exc = (new_exc & ENABLE_MASK) >> ENABLE_SHIFT; - - excepts &= FE_ALL_EXCEPT; - - new_exc &= ~(excepts << ENABLE_SHIFT); - _FPU_SETCW (new_exc); - - return old_exc; -} diff --git a/sysdeps/mips/fpu/feenablxcpt.c b/sysdeps/mips/fpu/feenablxcpt.c deleted file mode 100644 index 6ed90dce7b..0000000000 --- a/sysdeps/mips/fpu/feenablxcpt.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -int -feenableexcept (int excepts) -{ - unsigned int new_exc, old_exc; - - /* Get the current control word. */ - _FPU_GETCW (new_exc); - - old_exc = (new_exc & ENABLE_MASK) >> ENABLE_SHIFT; - - excepts &= FE_ALL_EXCEPT; - - new_exc |= excepts << ENABLE_SHIFT; - _FPU_SETCW (new_exc); - - return old_exc; -} diff --git a/sysdeps/mips/fpu/fegetenv.c b/sysdeps/mips/fpu/fegetenv.c deleted file mode 100644 index 7a286add2a..0000000000 --- a/sysdeps/mips/fpu/fegetenv.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -__fegetenv (fenv_t *envp) -{ - _FPU_GETCW (*envp); - - /* Success. */ - return 0; -} -libm_hidden_def (__fegetenv) -weak_alias (__fegetenv, fegetenv) -libm_hidden_weak (fegetenv) diff --git a/sysdeps/mips/fpu/fegetexcept.c b/sysdeps/mips/fpu/fegetexcept.c deleted file mode 100644 index 7739f56c6d..0000000000 --- a/sysdeps/mips/fpu/fegetexcept.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Get enabled floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -int -fegetexcept (void) -{ - unsigned int exc; - - /* Get the current control word. */ - _FPU_GETCW (exc); - - return (exc & ENABLE_MASK) >> ENABLE_SHIFT; -} diff --git a/sysdeps/mips/fpu/fegetmode.c b/sysdeps/mips/fpu/fegetmode.c deleted file mode 100644 index 09dd978060..0000000000 --- a/sysdeps/mips/fpu/fegetmode.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Store current floating-point control modes. MIPS version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fegetmode (femode_t *modep) -{ - _FPU_GETCW (*modep); - return 0; -} diff --git a/sysdeps/mips/fpu/fegetround.c b/sysdeps/mips/fpu/fegetround.c deleted file mode 100644 index a764e473ad..0000000000 --- a/sysdeps/mips/fpu/fegetround.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -__fegetround (void) -{ - int cw; - - /* Get control word. */ - _FPU_GETCW (cw); - - return cw & _FPU_RC_MASK; -} -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/mips/fpu/feholdexcpt.c b/sysdeps/mips/fpu/feholdexcpt.c deleted file mode 100644 index d6829e9ddb..0000000000 --- a/sysdeps/mips/fpu/feholdexcpt.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -__feholdexcept (fenv_t *envp) -{ - fpu_control_t cw; - - /* Save the current state. */ - _FPU_GETCW (cw); - envp->__fp_control_register = cw; - - /* Clear all exception enable bits and flags. */ - cw &= ~(_FPU_MASK_V|_FPU_MASK_Z|_FPU_MASK_O|_FPU_MASK_U|_FPU_MASK_I|FE_ALL_EXCEPT); - _FPU_SETCW (cw); - - return 0; -} - -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/mips/fpu/fenv_libc.h b/sysdeps/mips/fpu/fenv_libc.h deleted file mode 100644 index fc2b82670d..0000000000 --- a/sysdeps/mips/fpu/fenv_libc.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FENV_LIBC_H -#define _FENV_LIBC_H 1 - -/* Mask for enabling exceptions and for the CAUSE bits. */ -#define ENABLE_MASK 0x00F80U -#define CAUSE_MASK 0x1F000U - -/* Shift for FE_* flags to get up to the ENABLE bits and the CAUSE bits. */ -#define ENABLE_SHIFT 5 -#define CAUSE_SHIFT 10 - - -#endif /* _FENV_LIBC_H */ diff --git a/sysdeps/mips/fpu/fesetenv.c b/sysdeps/mips/fpu/fesetenv.c deleted file mode 100644 index 411478273b..0000000000 --- a/sysdeps/mips/fpu/fesetenv.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -__fesetenv (const fenv_t *envp) -{ - fpu_control_t cw; - - /* Read first current state to flush fpu pipeline. */ - _FPU_GETCW (cw); - - if (envp == FE_DFL_ENV) - _FPU_SETCW (_FPU_DEFAULT); - else if (envp == FE_NOMASK_ENV) - _FPU_SETCW (_FPU_IEEE); - else - _FPU_SETCW (envp->__fp_control_register); - - /* Success. */ - return 0; -} - -libm_hidden_def (__fesetenv) -weak_alias (__fesetenv, fesetenv) -libm_hidden_weak (fesetenv) diff --git a/sysdeps/mips/fpu/fesetexcept.c b/sysdeps/mips/fpu/fesetexcept.c deleted file mode 100644 index 28f61e95fd..0000000000 --- a/sysdeps/mips/fpu/fesetexcept.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Set given exception flags. MIPS version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fesetexcept (int excepts) -{ - fpu_control_t temp; - - _FPU_GETCW (temp); - temp |= excepts & FE_ALL_EXCEPT; - _FPU_SETCW (temp); - - return 0; -} diff --git a/sysdeps/mips/fpu/fesetmode.c b/sysdeps/mips/fpu/fesetmode.c deleted file mode 100644 index ed8a682682..0000000000 --- a/sysdeps/mips/fpu/fesetmode.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Install given floating-point control modes. MIPS version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define FCSR_STATUS 0xfe83f07c - -int -fesetmode (const femode_t *modep) -{ - fpu_control_t cw; - - _FPU_GETCW (cw); - cw &= FCSR_STATUS; - if (modep == FE_DFL_MODE) - cw |= _FPU_DEFAULT; - else - cw |= *modep & ~FCSR_STATUS; - _FPU_SETCW (cw); - - return 0; -} diff --git a/sysdeps/mips/fpu/fesetround.c b/sysdeps/mips/fpu/fesetround.c deleted file mode 100644 index 1631b6e3b7..0000000000 --- a/sysdeps/mips/fpu/fesetround.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -__fesetround (int round) -{ - fpu_control_t cw; - - if ((round & ~_FPU_RC_MASK) != 0) - /* ROUND is no valid rounding mode. */ - return 1; - - /* Get current state. */ - _FPU_GETCW (cw); - - /* Set rounding bits. */ - cw &= ~_FPU_RC_MASK; - cw |= round; - /* Set new state. */ - _FPU_SETCW (cw); - - return 0; -} - -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/mips/fpu/feupdateenv.c b/sysdeps/mips/fpu/feupdateenv.c deleted file mode 100644 index 4c8e3d649b..0000000000 --- a/sysdeps/mips/fpu/feupdateenv.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -__feupdateenv (const fenv_t *envp) -{ - int temp; - - /* Save current exceptions. */ - _FPU_GETCW (temp); - temp &= FE_ALL_EXCEPT; - - /* Install new environment. */ - __fesetenv (envp); - - /* Raise the safed exception. Incidently for us the implementation - defined format of the values in objects of type fexcept_t is the - same as the ones specified using the FE_* constants. */ - __feraiseexcept (temp); - - /* Success. */ - return 0; -} -libm_hidden_def (__feupdateenv) -weak_alias (__feupdateenv, feupdateenv) -libm_hidden_weak (feupdateenv) diff --git a/sysdeps/mips/fpu/fgetexcptflg.c b/sysdeps/mips/fpu/fgetexcptflg.c deleted file mode 100644 index a97cef1664..0000000000 --- a/sysdeps/mips/fpu/fgetexcptflg.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -fegetexceptflag (fexcept_t *flagp, int excepts) -{ - fpu_control_t temp; - - /* Get the current exceptions. */ - _FPU_GETCW (temp); - - /* We only save the relevant bits here. In particular, care has to be - taken with the CAUSE bits, as an inadvertent restore later on could - generate unexpected exceptions. */ - - *flagp = temp & excepts & FE_ALL_EXCEPT; - - /* Success. */ - return 0; -} diff --git a/sysdeps/mips/fpu/fraiseexcpt.c b/sysdeps/mips/fpu/fraiseexcpt.c deleted file mode 100644 index ffad16a83d..0000000000 --- a/sysdeps/mips/fpu/fraiseexcpt.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Raise given exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -int -__feraiseexcept (int excepts) -{ - fpu_control_t cw; - - /* Get current state. */ - _FPU_GETCW (cw); - - /* Set flag bits (which are accumulative), and *also* set the - cause bits. The setting of the cause bits is what actually causes - the hardware to generate the exception, if the corresponding enable - bit is set as well. */ - - excepts &= FE_ALL_EXCEPT; - cw |= excepts | (excepts << CAUSE_SHIFT); - - /* Set new state. */ - _FPU_SETCW (cw); - - return 0; -} - -libm_hidden_def (__feraiseexcept) -weak_alias (__feraiseexcept, feraiseexcept) -libm_hidden_weak (feraiseexcept) diff --git a/sysdeps/mips/fpu/fsetexcptflg.c b/sysdeps/mips/fpu/fsetexcptflg.c deleted file mode 100644 index 14fa0d3bdd..0000000000 --- a/sysdeps/mips/fpu/fsetexcptflg.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Hartvig Ekner , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - fpu_control_t temp; - - /* Get the current exceptions. */ - _FPU_GETCW (temp); - - /* Make sure the flags we want restored are legal. */ - excepts &= FE_ALL_EXCEPT; - - /* Now clear the bits called for, and copy them in from flagp. Note that - we ignore all non-flag bits from *flagp, so they don't matter. */ - temp = (temp & ~excepts) | (*flagp & excepts); - - _FPU_SETCW (temp); - - /* Success. */ - return 0; -} diff --git a/sysdeps/mips/fpu/ftestexcept.c b/sysdeps/mips/fpu/ftestexcept.c deleted file mode 100644 index 548cee7d1a..0000000000 --- a/sysdeps/mips/fpu/ftestexcept.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -fetestexcept (int excepts) -{ - int cw; - - /* Get current control word. */ - _FPU_GETCW (cw); - - return cw & excepts & FE_ALL_EXCEPT; -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/mips/fpu_control.h b/sysdeps/mips/fpu_control.h deleted file mode 100644 index 2dddf49362..0000000000 --- a/sysdeps/mips/fpu_control.h +++ /dev/null @@ -1,133 +0,0 @@ -/* FPU control word bits. Mips version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Olaf Flebbe and Ralf Baechle. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FPU_CONTROL_H -#define _FPU_CONTROL_H - -/* MIPS FPU floating point control register bits. - * - * 31-25 -> floating point conditions code bits 7-1. These bits are only - * available in MIPS IV. - * 24 -> flush denormalized results to zero instead of - * causing unimplemented operation exception. This bit is only - * available for MIPS III and newer. - * 23 -> Condition bit - * 22-21 -> reserved for architecture implementers - * 20 -> reserved (read as 0, write with 0) - * 19 -> IEEE 754-2008 non-arithmetic ABS.fmt and NEG.fmt enable - * 18 -> IEEE 754-2008 recommended NaN encoding enable - * 17 -> cause bit for unimplemented operation - * 16 -> cause bit for invalid exception - * 15 -> cause bit for division by zero exception - * 14 -> cause bit for overflow exception - * 13 -> cause bit for underflow exception - * 12 -> cause bit for inexact exception - * 11 -> enable exception for invalid exception - * 10 -> enable exception for division by zero exception - * 9 -> enable exception for overflow exception - * 8 -> enable exception for underflow exception - * 7 -> enable exception for inexact exception - * 6 -> flag invalid exception - * 5 -> flag division by zero exception - * 4 -> flag overflow exception - * 3 -> flag underflow exception - * 2 -> flag inexact exception - * 1-0 -> rounding control - * - * - * Rounding Control: - * 00 - rounding to nearest (RN) - * 01 - rounding toward zero (RZ) - * 10 - rounding (up) toward plus infinity (RP) - * 11 - rounding (down)toward minus infinity (RM) - */ - -#include - -#ifdef __mips_soft_float - -#define _FPU_RESERVED 0xffffffff -#define _FPU_DEFAULT 0x00000000 -typedef unsigned int fpu_control_t; -#define _FPU_GETCW(cw) (cw) = 0 -#define _FPU_SETCW(cw) (void) (cw) -extern fpu_control_t __fpu_control; - -#else /* __mips_soft_float */ - -/* Masks for interrupts. */ -#define _FPU_MASK_V 0x0800 /* Invalid operation */ -#define _FPU_MASK_Z 0x0400 /* Division by zero */ -#define _FPU_MASK_O 0x0200 /* Overflow */ -#define _FPU_MASK_U 0x0100 /* Underflow */ -#define _FPU_MASK_I 0x0080 /* Inexact operation */ - -/* Flush denormalized numbers to zero. */ -#define _FPU_FLUSH_TZ 0x1000000 - -/* IEEE 754-2008 compliance control. */ -#define _FPU_ABS2008 0x80000 -#define _FPU_NAN2008 0x40000 - -/* Rounding control. */ -#define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */ -#define _FPU_RC_ZERO 0x1 -#define _FPU_RC_UP 0x2 -#define _FPU_RC_DOWN 0x3 -/* Mask for rounding control. */ -#define _FPU_RC_MASK 0x3 - -#define _FPU_RESERVED 0xfe8c0000 /* Reserved bits in cw, incl ABS/NAN2008. */ - - -/* The fdlibm code requires strict IEEE double precision arithmetic, - and no interrupts for exceptions, rounding to nearest. */ -#ifdef __mips_nan2008 -# define _FPU_DEFAULT 0x000C0000 -#else -# define _FPU_DEFAULT 0x00000000 -#endif - -/* IEEE: same as above, but exceptions. */ -#ifdef __mips_nan2008 -# define _FPU_IEEE 0x000C0F80 -#else -# define _FPU_IEEE 0x00000F80 -#endif - -/* Type of the control word. */ -typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__))); - -/* Macros for accessing the hardware control word. */ -extern fpu_control_t __mips_fpu_getcw (void) __THROW; -extern void __mips_fpu_setcw (fpu_control_t) __THROW; -#ifdef __mips16 -# define _FPU_GETCW(cw) do { (cw) = __mips_fpu_getcw (); } while (0) -# define _FPU_SETCW(cw) __mips_fpu_setcw (cw) -#else -# define _FPU_GETCW(cw) __asm__ volatile ("cfc1 %0,$31" : "=r" (cw)) -# define _FPU_SETCW(cw) __asm__ volatile ("ctc1 %0,$31" : : "r" (cw)) -#endif - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#endif /* __mips_soft_float */ - -#endif /* fpu_control.h */ diff --git a/sysdeps/mips/gccframe.h b/sysdeps/mips/gccframe.h deleted file mode 100644 index fcbfd69e75..0000000000 --- a/sysdeps/mips/gccframe.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Definition of object in frame unwind info. mips version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define FIRST_PSEUDO_REGISTER 76 - -#include diff --git a/sysdeps/mips/ieee754/ieee754.h b/sysdeps/mips/ieee754/ieee754.h deleted file mode 100644 index 0e8589a87b..0000000000 --- a/sysdeps/mips/ieee754/ieee754.h +++ /dev/null @@ -1,323 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _IEEE754_H - -#define _IEEE754_H 1 -#include - -#include - -#include - -__BEGIN_DECLS - -union ieee754_float - { - float f; - - /* This is the IEEE 754 single-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int mantissa:23; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:23; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int quiet_nan:1; - unsigned int mantissa:22; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:22; - unsigned int quiet_nan:1; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee_nan; - }; - -#define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */ - - -union ieee754_double - { - double d; - - /* This is the IEEE 754 double-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:20; - unsigned int mantissa1:32; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN -# if __FLOAT_WORD_ORDER == __BIG_ENDIAN - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; - unsigned int mantissa1:32; -# else - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; -# endif -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - unsigned int quiet_nan:1; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:19; - unsigned int mantissa1:32; -#else -# if __FLOAT_WORD_ORDER == __BIG_ENDIAN - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; - unsigned int mantissa1:32; -# else - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; -# endif -#endif - } ieee_nan; - }; - -#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */ - -#if LDBL_MANT_DIG == 113 - -union ieee854_long_double - { - long double d; - - /* This is the IEEE 854 quad-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:15; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:16; - unsigned int mantissa1:32; - unsigned int mantissa2:32; - unsigned int mantissa3:32; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - /* Together these comprise the mantissa. */ - unsigned int mantissa3:32; - unsigned int mantissa2:32; - unsigned int mantissa1:32; - unsigned int mantissa0:16; - unsigned int exponent:15; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:15; - unsigned int quiet_nan:1; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:15; - unsigned int mantissa1:32; - unsigned int mantissa2:32; - unsigned int mantissa3:32; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - /* Together these comprise the mantissa. */ - unsigned int mantissa3:32; - unsigned int mantissa2:32; - unsigned int mantissa1:32; - unsigned int mantissa0:15; - unsigned int quiet_nan:1; - unsigned int exponent:15; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee_nan; - }; - -#define IEEE854_LONG_DOUBLE_BIAS 0x3fff /* Added to exponent. */ - -#elif LDBL_MANT_DIG == 64 - -union ieee854_long_double - { - long double d; - - /* This is the IEEE 854 double-extended-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:15; - unsigned int empty:16; - unsigned int mantissa0:32; - unsigned int mantissa1:32; -#endif -#if __BYTE_ORDER == __LITTLE_ENDIAN -# if __FLOAT_WORD_ORDER == __BIG_ENDIAN - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty:16; - unsigned int mantissa0:32; - unsigned int mantissa1:32; -# else - unsigned int mantissa1:32; - unsigned int mantissa0:32; - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty:16; -# endif -#endif - } ieee; - - /* This is for NaNs in the IEEE 854 double-extended-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:15; - unsigned int empty:16; - unsigned int one:1; - unsigned int quiet_nan:1; - unsigned int mantissa0:30; - unsigned int mantissa1:32; -#endif -#if __BYTE_ORDER == __LITTLE_ENDIAN -# if __FLOAT_WORD_ORDER == __BIG_ENDIAN - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty:16; - unsigned int mantissa0:30; - unsigned int quiet_nan:1; - unsigned int one:1; - unsigned int mantissa1:32; -# else - unsigned int mantissa1:32; - unsigned int mantissa0:30; - unsigned int quiet_nan:1; - unsigned int one:1; - unsigned int exponent:15; - unsigned int negative:1; - unsigned int empty:16; -# endif -#endif - } ieee_nan; - }; - -#define IEEE854_LONG_DOUBLE_BIAS 0x3fff - -#elif LDBL_MANT_DIG == 53 - -union ieee854_long_double - { - long double d; - - /* This is the IEEE 754 double-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:20; - unsigned int mantissa1:32; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN -# if __FLOAT_WORD_ORDER == __BIG_ENDIAN - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; - unsigned int mantissa1:32; -# else - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; -# endif -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - unsigned int quiet_nan:1; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:19; - unsigned int mantissa1:32; -#else -# if __FLOAT_WORD_ORDER == __BIG_ENDIAN - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; - unsigned int mantissa1:32; -# else - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; -# endif -#endif - } ieee_nan; - }; - -#define IEEE854_LONG_DOUBLE_BIAS 0x3ff /* Added to exponent. */ - -#endif /* LDBL_MANT_DIG == 53 */ - -__END_DECLS - -#endif /* ieee754.h */ diff --git a/sysdeps/mips/ieee754/s_fma.c b/sysdeps/mips/ieee754/s_fma.c deleted file mode 100644 index 574141416b..0000000000 --- a/sysdeps/mips/ieee754/s_fma.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __mips_hard_float -# include -#else -# include -#endif diff --git a/sysdeps/mips/ieee754/s_fmaf.c b/sysdeps/mips/ieee754/s_fmaf.c deleted file mode 100644 index 30bcdae620..0000000000 --- a/sysdeps/mips/ieee754/s_fmaf.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __mips_hard_float -# include -#else -# include -#endif diff --git a/sysdeps/mips/ieee754/s_fmal.c b/sysdeps/mips/ieee754/s_fmal.c deleted file mode 100644 index 6b83e914fe..0000000000 --- a/sysdeps/mips/ieee754/s_fmal.c +++ /dev/null @@ -1,7 +0,0 @@ -#include - -#if _MIPS_SIM == _ABIO32 -# error "long double fma being compiled for o32 ABI" -#endif - -#include diff --git a/sysdeps/mips/include/sys/asm.h b/sysdeps/mips/include/sys/asm.h deleted file mode 100644 index b301237266..0000000000 --- a/sysdeps/mips/include/sys/asm.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_ASM_H -#include_next - -# ifndef _ISOMAC - -# undef __mips_cfi_startproc -# define __mips_cfi_startproc cfi_startproc -# undef __mips_cfi_endproc -# define __mips_cfi_endproc cfi_endproc - -# if _MIPS_SIM == _ABIO32 -# define SETUP_GP64_REG_CFI(a) -# define SETUP_GP64_REG(a, b) -# define SETUP_GP64_STACK_CFI(a) -# define SETUP_GP64_STACK(a, b) -# define RESTORE_GP64_REG -# define RESTORE_GP64_STACK -# else -# define SETUP_GP64_REG_CFI(gpsavereg) \ - cfi_register (gp, gpsavereg) -# define SETUP_GP64_REG(gpsavereg, proc) \ - SETUP_GP64 (gpsavereg, proc); \ - SETUP_GP64_REG_CFI (gpsavereg) -# define SETUP_GP64_STACK_CFI(gpoffset) \ - cfi_rel_offset (gp, gpoffset) -# define SETUP_GP64_STACK(gpoffset, proc) \ - SETUP_GP64 (gpoffset, proc); \ - SETUP_GP64_STACK_CFI (gpoffset) -# define RESTORE_GP64_REG \ - RESTORE_GP64; \ - cfi_restore (gp) -# define RESTORE_GP64_STACK \ - RESTORE_GP64; \ - cfi_restore (gp) -# endif - -# endif /* _ISOMAC */ -#endif /* sys/asm.h */ diff --git a/sysdeps/mips/jmpbuf-unwind.h b/sysdeps/mips/jmpbuf-unwind.h deleted file mode 100644 index e5293ec63c..0000000000 --- a/sysdeps/mips/jmpbuf-unwind.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((void *) (address) < (void *) demangle ((jmpbuf)[0].__sp)) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, \ - (void *) (_Unwind_Ptr) _Unwind_GetCFA (_context), \ - _adj) - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf regs) -{ - uintptr_t sp = (uintptr_t) regs[0].__sp; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return sp; -} - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/mips/ldsodefs.h b/sysdeps/mips/ldsodefs.h deleted file mode 100644 index ba04cbbfda..0000000000 --- a/sysdeps/mips/ldsodefs.h +++ /dev/null @@ -1,149 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _MIPS_LDSODEFS_H -#define _MIPS_LDSODEFS_H 1 - -#include - -struct La_mips_32_regs; -struct La_mips_32_retval; -struct La_mips_64_regs; -struct La_mips_64_retval; - -#define ARCH_PLTENTER_MEMBERS \ - Elf32_Addr (*mips_o32_gnu_pltenter) (Elf32_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - struct La_mips_32_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep); \ - Elf32_Addr (*mips_n32_gnu_pltenter) (Elf32_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - struct La_mips_64_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep); \ - Elf64_Addr (*mips_n64_gnu_pltenter) (Elf64_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - struct La_mips_64_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep); - -#define ARCH_PLTEXIT_MEMBERS \ - unsigned int (*mips_o32_gnu_pltexit) (Elf32_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - const struct La_mips_32_regs *, \ - struct La_mips_32_retval *, \ - const char *); \ - unsigned int (*mips_n32_gnu_pltexit) (Elf32_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - const struct La_mips_64_regs *, \ - struct La_mips_64_retval *, \ - const char *); \ - unsigned int (*mips_n64_gnu_pltexit) (Elf64_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - const struct La_mips_64_regs *, \ - struct La_mips_64_retval *, \ - const char *); - -/* The MIPS ABI specifies that the dynamic section has to be read-only. */ - -#define DL_RO_DYN_SECTION 1 - -#include_next - -/* The 64-bit MIPS ELF ABI uses an unusual reloc format. Each - relocation entry specifies up to three actual relocations, all at - the same address. The first relocation which required a symbol - uses the symbol in the r_sym field. The second relocation which - requires a symbol uses the symbol in the r_ssym field. If all - three relocations require a symbol, the third one uses a zero - value. - - We define these structures in internal headers because we're not - sure we want to make them part of the ABI yet. Eventually, some of - this may move into elf/elf.h. */ - -/* An entry in a 64 bit SHT_REL section. */ - -typedef struct -{ - Elf32_Word r_sym; /* Symbol index */ - unsigned char r_ssym; /* Special symbol for 2nd relocation */ - unsigned char r_type3; /* 3rd relocation type */ - unsigned char r_type2; /* 2nd relocation type */ - unsigned char r_type1; /* 1st relocation type */ -} _Elf64_Mips_R_Info; - -typedef union -{ - Elf64_Xword r_info_number; - _Elf64_Mips_R_Info r_info_fields; -} _Elf64_Mips_R_Info_union; - -typedef struct -{ - Elf64_Addr r_offset; /* Address */ - _Elf64_Mips_R_Info_union r_info; /* Relocation type and symbol index */ -} Elf64_Mips_Rel; - -typedef struct -{ - Elf64_Addr r_offset; /* Address */ - _Elf64_Mips_R_Info_union r_info; /* Relocation type and symbol index */ - Elf64_Sxword r_addend; /* Addend */ -} Elf64_Mips_Rela; - -#define ELF64_MIPS_R_SYM(i) \ - ((__extension__ (_Elf64_Mips_R_Info_union)(i)).r_info_fields.r_sym) -#define ELF64_MIPS_R_TYPE(i) \ - (((_Elf64_Mips_R_Info_union)(i)).r_info_fields.r_type1 \ - | ((Elf32_Word)(__extension__ (_Elf64_Mips_R_Info_union)(i) \ - ).r_info_fields.r_type2 << 8) \ - | ((Elf32_Word)(__extension__ (_Elf64_Mips_R_Info_union)(i) \ - ).r_info_fields.r_type3 << 16) \ - | ((Elf32_Word)(__extension__ (_Elf64_Mips_R_Info_union)(i) \ - ).r_info_fields.r_ssym << 24)) -#define ELF64_MIPS_R_INFO(sym, type) \ - (__extension__ (_Elf64_Mips_R_Info_union) \ - (__extension__ (_Elf64_Mips_R_Info) \ - { (sym), ELF64_MIPS_R_SSYM (type), \ - ELF64_MIPS_R_TYPE3 (type), \ - ELF64_MIPS_R_TYPE2 (type), \ - ELF64_MIPS_R_TYPE1 (type) \ - }).r_info_number) -/* These macros decompose the value returned by ELF64_MIPS_R_TYPE, and - compose it back into a value that it can be used as an argument to - ELF64_MIPS_R_INFO. */ -#define ELF64_MIPS_R_SSYM(i) (((i) >> 24) & 0xff) -#define ELF64_MIPS_R_TYPE3(i) (((i) >> 16) & 0xff) -#define ELF64_MIPS_R_TYPE2(i) (((i) >> 8) & 0xff) -#define ELF64_MIPS_R_TYPE1(i) ((i) & 0xff) -#define ELF64_MIPS_R_TYPEENC(type1, type2, type3, ssym) \ - ((type1) \ - | ((Elf32_Word)(type2) << 8) \ - | ((Elf32_Word)(type3) << 16) \ - | ((Elf32_Word)(ssym) << 24)) - -#undef ELF64_R_SYM -#define ELF64_R_SYM(i) ELF64_MIPS_R_SYM (i) -#undef ELF64_R_TYPE -#define ELF64_R_TYPE(i) ELF64_MIPS_R_TYPE (i) -#undef ELF64_R_INFO -#define ELF64_R_INFO(sym, type) ELF64_MIPS_R_INFO ((sym), (type)) - -#endif diff --git a/sysdeps/mips/libc-tls.c b/sysdeps/mips/libc-tls.c deleted file mode 100644 index 864e89b35d..0000000000 --- a/sysdeps/mips/libc-tls.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. MIPS version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* On MIPS, linker optimizations are not required, so __tls_get_addr - can be called even in statically linked binaries. In this case module - must be always 1 and PT_TLS segment exist in the binary, otherwise it - would not link. */ - -void * -__tls_get_addr (tls_index *ti) -{ - dtv_t *dtv = THREAD_DTV (); - return (char *) dtv[1].pointer.val + GET_ADDR_OFFSET; -} diff --git a/sysdeps/mips/linkmap.h b/sysdeps/mips/linkmap.h deleted file mode 100644 index 1fb9678a6d..0000000000 --- a/sysdeps/mips/linkmap.h +++ /dev/null @@ -1,6 +0,0 @@ -struct link_map_machine - { - ElfW(Addr) plt; /* Address of .plt */ - ElfW(Word) fpabi; /* FP ABI of the object */ - unsigned int odd_spreg; /* Does the object require odd_spreg support? */ - }; diff --git a/sysdeps/mips/localplt.data b/sysdeps/mips/localplt.data deleted file mode 100644 index f0c5970c08..0000000000 --- a/sysdeps/mips/localplt.data +++ /dev/null @@ -1,3 +0,0 @@ -# MIPS does not use PLTs in shared libraries, and implicit GOT -# relocation means this test cannot check for GOT relocations as an -# alternative. diff --git a/sysdeps/mips/lshift.S b/sysdeps/mips/lshift.S deleted file mode 100644 index 46117aa89e..0000000000 --- a/sysdeps/mips/lshift.S +++ /dev/null @@ -1,97 +0,0 @@ -/* MIPS2 __mpn_lshift -- - -Copyright (C) 1995-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see -. */ - -#include - -/* INPUT PARAMETERS - res_ptr $4 - src_ptr $5 - size $6 - cnt $7 -*/ -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__mpn_lshift) - .set noreorder -#ifdef __PIC__ - .cpload t9 -#endif - .set nomacro - - sll $2,$6,2 - addu $5,$5,$2 /* make r5 point at end of src */ - lw $10,-4($5) /* load first limb */ - subu $13,$0,$7 - addu $4,$4,$2 /* make r4 point at end of res */ - addiu $6,$6,-1 - and $9,$6,4-1 /* number of limbs in first loop */ - beq $9,$0,L(L0) /* if multiple of 4 limbs, skip first loop */ - srl $2,$10,$13 /* compute function result */ - - subu $6,$6,$9 - -L(Loop0): lw $3,-8($5) - addiu $4,$4,-4 - addiu $5,$5,-4 - addiu $9,$9,-1 - sll $11,$10,$7 - srl $12,$3,$13 - move $10,$3 - or $8,$11,$12 - bne $9,$0,L(Loop0) - sw $8,0($4) - -L(L0): beq $6,$0,L(Lend) - nop - -L(Loop): lw $3,-8($5) - addiu $4,$4,-16 - addiu $6,$6,-4 - sll $11,$10,$7 - srl $12,$3,$13 - - lw $10,-12($5) - sll $14,$3,$7 - or $8,$11,$12 - sw $8,12($4) - srl $9,$10,$13 - - lw $3,-16($5) - sll $11,$10,$7 - or $8,$14,$9 - sw $8,8($4) - srl $12,$3,$13 - - lw $10,-20($5) - sll $14,$3,$7 - or $8,$11,$12 - sw $8,4($4) - srl $9,$10,$13 - - addiu $5,$5,-16 - or $8,$14,$9 - bgtz $6,L(Loop) - sw $8,0($4) - -L(Lend): sll $8,$10,$7 - j $31 - sw $8,-4($4) - END (__mpn_lshift) diff --git a/sysdeps/mips/machine-gmon.h b/sysdeps/mips/machine-gmon.h deleted file mode 100644 index e99d13e4a6..0000000000 --- a/sysdeps/mips/machine-gmon.h +++ /dev/null @@ -1,146 +0,0 @@ -/* Machine-specific calling sequence for `mcount' profiling function. MIPS - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#define _MCOUNT_DECL(frompc,selfpc) \ -static void __attribute_used__ __mcount (u_long frompc, u_long selfpc) - -/* Call __mcount with the return PC for our caller, - and the return PC our caller will return to. */ - -#if _MIPS_SIM == _ABIO32 - -#ifdef __PIC__ -# define CPLOAD ".cpload $25;" -# define CPRESTORE ".cprestore 44\n\t" -#else -# define CPLOAD -# define CPRESTORE -#endif - -#define MCOUNT asm(\ - ".globl _mcount;\n\t" \ - ".align 2;\n\t" \ - ".set push;\n\t" \ - ".set nomips16;\n\t" \ - ".type _mcount,@function;\n\t" \ - ".ent _mcount\n\t" \ - "_mcount:\n\t" \ - ".frame $sp,44,$31\n\t" \ - ".set noreorder;\n\t" \ - ".set noat;\n\t" \ - CPLOAD \ - "subu $29,$29,48;\n\t" \ - CPRESTORE \ - "sw $4,24($29);\n\t" \ - "sw $5,28($29);\n\t" \ - "sw $6,32($29);\n\t" \ - "sw $7,36($29);\n\t" \ - "sw $2,40($29);\n\t" \ - "sw $1,16($29);\n\t" \ - "sw $31,20($29);\n\t" \ - "move $5,$31;\n\t" \ - "move $4,$1;\n\t" \ - "jal __mcount;\n\t" \ - "nop;\n\t" \ - "lw $4,24($29);\n\t" \ - "lw $5,28($29);\n\t" \ - "lw $6,32($29);\n\t" \ - "lw $7,36($29);\n\t" \ - "lw $2,40($29);\n\t" \ - "lw $31,20($29);\n\t" \ - "lw $1,16($29);\n\t" \ - "addu $29,$29,56;\n\t" \ - "j $31;\n\t" \ - "move $31,$1;\n\t" \ - ".end _mcount;\n\t" \ - ".set pop"); - -#else - -#ifdef __PIC__ -# define CPSETUP ".cpsetup $25, 88, _mcount;" -# define CPRETURN ".cpreturn;" -#else -# define CPSETUP -# define CPRETURN -#endif - -#if _MIPS_SIM == _ABIN32 -# if !defined __mips_isa_rev || __mips_isa_rev < 6 -# define PTR_ADDU_STRING "add" /* no u */ -# define PTR_SUBU_STRING "sub" /* no u */ -# else -# define PTR_ADDU_STRING "addu" -# define PTR_SUBU_STRING "subu" -# endif -#elif _MIPS_SIM == _ABI64 -# define PTR_ADDU_STRING "daddu" -# define PTR_SUBU_STRING "dsubu" -#else -# error "Unknown ABI" -#endif - -#define MCOUNT asm(\ - ".globl _mcount;\n\t" \ - ".align 3;\n\t" \ - ".set push;\n\t" \ - ".set nomips16;\n\t" \ - ".type _mcount,@function;\n\t" \ - ".ent _mcount\n\t" \ - "_mcount:\n\t" \ - ".frame $sp,88,$31\n\t" \ - ".set noreorder;\n\t" \ - ".set noat;\n\t" \ - PTR_SUBU_STRING " $29,$29,96;\n\t" \ - CPSETUP \ - "sd $4,24($29);\n\t" \ - "sd $5,32($29);\n\t" \ - "sd $6,40($29);\n\t" \ - "sd $7,48($29);\n\t" \ - "sd $8,56($29);\n\t" \ - "sd $9,64($29);\n\t" \ - "sd $10,72($29);\n\t" \ - "sd $11,80($29);\n\t" \ - "sd $2,16($29);\n\t" \ - "sd $1,0($29);\n\t" \ - "sd $31,8($29);\n\t" \ - "move $5,$31;\n\t" \ - "move $4,$1;\n\t" \ - "jal __mcount;\n\t" \ - "nop;\n\t" \ - "ld $4,24($29);\n\t" \ - "ld $5,32($29);\n\t" \ - "ld $6,40($29);\n\t" \ - "ld $7,48($29);\n\t" \ - "ld $8,56($29);\n\t" \ - "ld $9,64($29);\n\t" \ - "ld $10,72($29);\n\t" \ - "ld $11,80($29);\n\t" \ - "ld $2,16($29);\n\t" \ - "ld $31,8($29);\n\t" \ - "ld $1,0($29);\n\t" \ - CPRETURN \ - PTR_ADDU_STRING " $29,$29,96;\n\t" \ - "j $31;\n\t" \ - "move $31,$1;\n\t" \ - ".end _mcount;\n\t" \ - ".set pop"); - -#endif diff --git a/sysdeps/mips/math-tests.h b/sysdeps/mips/math-tests.h deleted file mode 100644 index 7680db21ee..0000000000 --- a/sysdeps/mips/math-tests.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Configuration for math tests. MIPS version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* MIPS soft float does not support exceptions and rounding modes, and - before GCC 4.9 long double when wider than double is implemented - using fp-bit which does not integrate with hardware exceptions and - rounding modes. */ -#ifdef __mips_soft_float -# define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST) -# define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST) -# define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST) -# define EXCEPTION_TESTS_float 0 -# define EXCEPTION_TESTS_double 0 -# define EXCEPTION_TESTS_long_double 0 -#elif _MIPS_SIM != _ABIO32 && !__GNUC_PREREQ (4, 9) -# define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST) -# define EXCEPTION_TESTS_long_double 0 -#endif - -/* NaN payload preservation when converting a signaling NaN to quiet - is only required in NAN2008 mode. */ -#ifndef __mips_nan2008 -# define SNAN_TESTS_PRESERVE_PAYLOAD 0 -#endif - -#include_next diff --git a/sysdeps/mips/math_private.h b/sysdeps/mips/math_private.h deleted file mode 100644 index 05f1f084a4..0000000000 --- a/sysdeps/mips/math_private.h +++ /dev/null @@ -1,249 +0,0 @@ -/* Internal math stuff. MIPS version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef MIPS_MATH_PRIVATE_H -#define MIPS_MATH_PRIVATE_H 1 - -/* Inline functions to speed up the math library implementation. The - default versions of these routines are in generic/math_private.h - and call fesetround, feholdexcept, etc. These routines use inlined - code instead. */ - -#ifdef __mips_hard_float - -# include -# include -# include - -# define _FPU_MASK_ALL (_FPU_MASK_V | _FPU_MASK_Z | _FPU_MASK_O \ - |_FPU_MASK_U | _FPU_MASK_I | FE_ALL_EXCEPT) - -static __always_inline void -libc_feholdexcept_mips (fenv_t *envp) -{ - fpu_control_t cw; - - /* Save the current state. */ - _FPU_GETCW (cw); - envp->__fp_control_register = cw; - - /* Clear all exception enable bits and flags. */ - cw &= ~(_FPU_MASK_ALL); - _FPU_SETCW (cw); -} -# define libc_feholdexcept libc_feholdexcept_mips -# define libc_feholdexceptf libc_feholdexcept_mips -# define libc_feholdexceptl libc_feholdexcept_mips - -static __always_inline void -libc_fesetround_mips (int round) -{ - fpu_control_t cw; - - /* Get current state. */ - _FPU_GETCW (cw); - - /* Set rounding bits. */ - cw &= ~_FPU_RC_MASK; - cw |= round; - - /* Set new state. */ - _FPU_SETCW (cw); -} -# define libc_fesetround libc_fesetround_mips -# define libc_fesetroundf libc_fesetround_mips -# define libc_fesetroundl libc_fesetround_mips - -static __always_inline void -libc_feholdexcept_setround_mips (fenv_t *envp, int round) -{ - fpu_control_t cw; - - /* Save the current state. */ - _FPU_GETCW (cw); - envp->__fp_control_register = cw; - - /* Clear all exception enable bits and flags. */ - cw &= ~(_FPU_MASK_ALL); - - /* Set rounding bits. */ - cw &= ~_FPU_RC_MASK; - cw |= round; - - /* Set new state. */ - _FPU_SETCW (cw); -} -# define libc_feholdexcept_setround libc_feholdexcept_setround_mips -# define libc_feholdexcept_setroundf libc_feholdexcept_setround_mips -# define libc_feholdexcept_setroundl libc_feholdexcept_setround_mips - -# define libc_feholdsetround libc_feholdexcept_setround_mips -# define libc_feholdsetroundf libc_feholdexcept_setround_mips -# define libc_feholdsetroundl libc_feholdexcept_setround_mips - -static __always_inline void -libc_fesetenv_mips (fenv_t *envp) -{ - fpu_control_t cw __attribute__ ((unused)); - - /* Read current state to flush fpu pipeline. */ - _FPU_GETCW (cw); - - _FPU_SETCW (envp->__fp_control_register); -} -# define libc_fesetenv libc_fesetenv_mips -# define libc_fesetenvf libc_fesetenv_mips -# define libc_fesetenvl libc_fesetenv_mips - -static __always_inline int -libc_feupdateenv_test_mips (fenv_t *envp, int excepts) -{ - /* int ret = fetestexcept (excepts); feupdateenv (envp); return ret; */ - int cw, temp; - - /* Get current control word. */ - _FPU_GETCW (cw); - - /* Set flag bits (which are accumulative), and *also* set the - cause bits. The setting of the cause bits is what actually causes - the hardware to generate the exception, if the corresponding enable - bit is set as well. */ - temp = cw & FE_ALL_EXCEPT; - temp |= envp->__fp_control_register | (temp << CAUSE_SHIFT); - - /* Set new state. */ - _FPU_SETCW (temp); - - return cw & excepts & FE_ALL_EXCEPT; -} -# define libc_feupdateenv_test libc_feupdateenv_test_mips -# define libc_feupdateenv_testf libc_feupdateenv_test_mips -# define libc_feupdateenv_testl libc_feupdateenv_test_mips - -static __always_inline void -libc_feupdateenv_mips (fenv_t *envp) -{ - libc_feupdateenv_test_mips (envp, 0); -} -# define libc_feupdateenv libc_feupdateenv_mips -# define libc_feupdateenvf libc_feupdateenv_mips -# define libc_feupdateenvl libc_feupdateenv_mips - -# define libc_feresetround libc_feupdateenv_mips -# define libc_feresetroundf libc_feupdateenv_mips -# define libc_feresetroundl libc_feupdateenv_mips - -static __always_inline int -libc_fetestexcept_mips (int excepts) -{ - int cw; - - /* Get current control word. */ - _FPU_GETCW (cw); - - return cw & excepts & FE_ALL_EXCEPT; -} -# define libc_fetestexcept libc_fetestexcept_mips -# define libc_fetestexceptf libc_fetestexcept_mips -# define libc_fetestexceptl libc_fetestexcept_mips - -/* Enable support for rounding mode context. */ -# define HAVE_RM_CTX 1 - -static __always_inline void -libc_feholdexcept_setround_mips_ctx (struct rm_ctx *ctx, int round) -{ - fpu_control_t old, new; - - /* Save the current state. */ - _FPU_GETCW (old); - ctx->env.__fp_control_register = old; - - /* Clear all exception enable bits and flags. */ - new = old & ~(_FPU_MASK_ALL); - - /* Set rounding bits. */ - new = (new & ~_FPU_RC_MASK) | round; - - if (__glibc_unlikely (new != old)) - { - _FPU_SETCW (new); - ctx->updated_status = true; - } - else - ctx->updated_status = false; -} -# define libc_feholdexcept_setround_ctx libc_feholdexcept_setround_mips_ctx -# define libc_feholdexcept_setroundf_ctx libc_feholdexcept_setround_mips_ctx -# define libc_feholdexcept_setroundl_ctx libc_feholdexcept_setround_mips_ctx - -static __always_inline void -libc_fesetenv_mips_ctx (struct rm_ctx *ctx) -{ - libc_fesetenv_mips (&ctx->env); -} -# define libc_fesetenv_ctx libc_fesetenv_mips_ctx -# define libc_fesetenvf_ctx libc_fesetenv_mips_ctx -# define libc_fesetenvl_ctx libc_fesetenv_mips_ctx - -static __always_inline void -libc_feupdateenv_mips_ctx (struct rm_ctx *ctx) -{ - if (__glibc_unlikely (ctx->updated_status)) - libc_feupdateenv_test_mips (&ctx->env, 0); -} -# define libc_feupdateenv_ctx libc_feupdateenv_mips_ctx -# define libc_feupdateenvf_ctx libc_feupdateenv_mips_ctx -# define libc_feupdateenvl_ctx libc_feupdateenv_mips_ctx -# define libc_feresetround_ctx libc_feupdateenv_mips_ctx -# define libc_feresetroundf_ctx libc_feupdateenv_mips_ctx -# define libc_feresetroundl_ctx libc_feupdateenv_mips_ctx - -static __always_inline void -libc_feholdsetround_mips_ctx (struct rm_ctx *ctx, int round) -{ - fpu_control_t old, new; - - /* Save the current state. */ - _FPU_GETCW (old); - ctx->env.__fp_control_register = old; - - /* Set rounding bits. */ - new = (old & ~_FPU_RC_MASK) | round; - - if (__glibc_unlikely (new != old)) - { - _FPU_SETCW (new); - ctx->updated_status = true; - } - else - ctx->updated_status = false; -} -# define libc_feholdsetround_ctx libc_feholdsetround_mips_ctx -# define libc_feholdsetroundf_ctx libc_feholdsetround_mips_ctx -# define libc_feholdsetroundl_ctx libc_feholdsetround_mips_ctx - -#endif - -/* Enable __finitel, __isinfl, and __isnanl for binary compatibility - when built without long double support. */ -#define LDBL_CLASSIFY_COMPAT 1 - -#include_next - -#endif diff --git a/sysdeps/mips/memcpy.S b/sysdeps/mips/memcpy.S deleted file mode 100644 index af01d0dd73..0000000000 --- a/sysdeps/mips/memcpy.S +++ /dev/null @@ -1,868 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifdef ANDROID_CHANGES -# include "machine/asm.h" -# include "machine/regdef.h" -# define USE_MEMMOVE_FOR_OVERLAP -# define PREFETCH_LOAD_HINT PREFETCH_HINT_LOAD_STREAMED -# define PREFETCH_STORE_HINT PREFETCH_HINT_PREPAREFORSTORE -#elif _LIBC -# include -# include -# include -# define PREFETCH_LOAD_HINT PREFETCH_HINT_LOAD_STREAMED -# define PREFETCH_STORE_HINT PREFETCH_HINT_PREPAREFORSTORE -#elif defined _COMPILING_NEWLIB -# include "machine/asm.h" -# include "machine/regdef.h" -# define PREFETCH_LOAD_HINT PREFETCH_HINT_LOAD_STREAMED -# define PREFETCH_STORE_HINT PREFETCH_HINT_PREPAREFORSTORE -#else -# include -# include -#endif - -#if (_MIPS_ISA == _MIPS_ISA_MIPS4) || (_MIPS_ISA == _MIPS_ISA_MIPS5) || \ - (_MIPS_ISA == _MIPS_ISA_MIPS32) || (_MIPS_ISA == _MIPS_ISA_MIPS64) -# ifndef DISABLE_PREFETCH -# define USE_PREFETCH -# endif -#endif - -#if defined(_MIPS_SIM) && ((_MIPS_SIM == _ABI64) || (_MIPS_SIM == _ABIN32)) -# ifndef DISABLE_DOUBLE -# define USE_DOUBLE -# endif -#endif - -/* Some asm.h files do not have the L macro definition. */ -#ifndef L -# if _MIPS_SIM == _ABIO32 -# define L(label) $L ## label -# else -# define L(label) .L ## label -# endif -#endif - -/* Some asm.h files do not have the PTR_ADDIU macro definition. */ -#ifndef PTR_ADDIU -# ifdef USE_DOUBLE -# define PTR_ADDIU daddiu -# else -# define PTR_ADDIU addiu -# endif -#endif - -/* Some asm.h files do not have the PTR_SRA macro definition. */ -#ifndef PTR_SRA -# ifdef USE_DOUBLE -# define PTR_SRA dsra -# else -# define PTR_SRA sra -# endif -#endif - -/* New R6 instructions that may not be in asm.h. */ -#ifndef PTR_LSA -# if _MIPS_SIM == _ABI64 -# define PTR_LSA dlsa -# else -# define PTR_LSA lsa -# endif -#endif - -/* - * Using PREFETCH_HINT_LOAD_STREAMED instead of PREFETCH_LOAD on load - * prefetches appears to offer a slight preformance advantage. - * - * Using PREFETCH_HINT_PREPAREFORSTORE instead of PREFETCH_STORE - * or PREFETCH_STORE_STREAMED offers a large performance advantage - * but PREPAREFORSTORE has some special restrictions to consider. - * - * Prefetch with the 'prepare for store' hint does not copy a memory - * location into the cache, it just allocates a cache line and zeros - * it out. This means that if you do not write to the entire cache - * line before writing it out to memory some data will get zero'ed out - * when the cache line is written back to memory and data will be lost. - * - * Also if you are using this memcpy to copy overlapping buffers it may - * not behave correctly when using the 'prepare for store' hint. If you - * use the 'prepare for store' prefetch on a memory area that is in the - * memcpy source (as well as the memcpy destination), then you will get - * some data zero'ed out before you have a chance to read it and data will - * be lost. - * - * If you are going to use this memcpy routine with the 'prepare for store' - * prefetch you may want to set USE_MEMMOVE_FOR_OVERLAP in order to avoid - * the problem of running memcpy on overlapping buffers. - * - * There are ifdef'ed sections of this memcpy to make sure that it does not - * do prefetches on cache lines that are not going to be completely written. - * This code is only needed and only used when PREFETCH_STORE_HINT is set to - * PREFETCH_HINT_PREPAREFORSTORE. This code assumes that cache lines are - * 32 bytes and if the cache line is larger it will not work correctly. - */ - -#ifdef USE_PREFETCH -# define PREFETCH_HINT_LOAD 0 -# define PREFETCH_HINT_STORE 1 -# define PREFETCH_HINT_LOAD_STREAMED 4 -# define PREFETCH_HINT_STORE_STREAMED 5 -# define PREFETCH_HINT_LOAD_RETAINED 6 -# define PREFETCH_HINT_STORE_RETAINED 7 -# define PREFETCH_HINT_WRITEBACK_INVAL 25 -# define PREFETCH_HINT_PREPAREFORSTORE 30 - -/* - * If we have not picked out what hints to use at this point use the - * standard load and store prefetch hints. - */ -# ifndef PREFETCH_STORE_HINT -# define PREFETCH_STORE_HINT PREFETCH_HINT_STORE -# endif -# ifndef PREFETCH_LOAD_HINT -# define PREFETCH_LOAD_HINT PREFETCH_HINT_LOAD -# endif - -/* - * We double everything when USE_DOUBLE is true so we do 2 prefetches to - * get 64 bytes in that case. The assumption is that each individual - * prefetch brings in 32 bytes. - */ - -# ifdef USE_DOUBLE -# define PREFETCH_CHUNK 64 -# define PREFETCH_FOR_LOAD(chunk, reg) \ - pref PREFETCH_LOAD_HINT, (chunk)*64(reg); \ - pref PREFETCH_LOAD_HINT, ((chunk)*64)+32(reg) -# define PREFETCH_FOR_STORE(chunk, reg) \ - pref PREFETCH_STORE_HINT, (chunk)*64(reg); \ - pref PREFETCH_STORE_HINT, ((chunk)*64)+32(reg) -# else -# define PREFETCH_CHUNK 32 -# define PREFETCH_FOR_LOAD(chunk, reg) \ - pref PREFETCH_LOAD_HINT, (chunk)*32(reg) -# define PREFETCH_FOR_STORE(chunk, reg) \ - pref PREFETCH_STORE_HINT, (chunk)*32(reg) -# endif -/* MAX_PREFETCH_SIZE is the maximum size of a prefetch, it must not be less - * than PREFETCH_CHUNK, the assumed size of each prefetch. If the real size - * of a prefetch is greater than MAX_PREFETCH_SIZE and the PREPAREFORSTORE - * hint is used, the code will not work correctly. If PREPAREFORSTORE is not - * used then MAX_PREFETCH_SIZE does not matter. */ -# define MAX_PREFETCH_SIZE 128 -/* PREFETCH_LIMIT is set based on the fact that we never use an offset greater - * than 5 on a STORE prefetch and that a single prefetch can never be larger - * than MAX_PREFETCH_SIZE. We add the extra 32 when USE_DOUBLE is set because - * we actually do two prefetches in that case, one 32 bytes after the other. */ -# ifdef USE_DOUBLE -# define PREFETCH_LIMIT (5 * PREFETCH_CHUNK) + 32 + MAX_PREFETCH_SIZE -# else -# define PREFETCH_LIMIT (5 * PREFETCH_CHUNK) + MAX_PREFETCH_SIZE -# endif -# if (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE) \ - && ((PREFETCH_CHUNK * 4) < MAX_PREFETCH_SIZE) -/* We cannot handle this because the initial prefetches may fetch bytes that - * are before the buffer being copied. We start copies with an offset - * of 4 so avoid this situation when using PREPAREFORSTORE. */ -#error "PREFETCH_CHUNK is too large and/or MAX_PREFETCH_SIZE is too small." -# endif -#else /* USE_PREFETCH not defined */ -# define PREFETCH_FOR_LOAD(offset, reg) -# define PREFETCH_FOR_STORE(offset, reg) -#endif - -#if __mips_isa_rev > 5 -# if (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE) -# undef PREFETCH_STORE_HINT -# define PREFETCH_STORE_HINT PREFETCH_HINT_STORE_STREAMED -# endif -# define R6_CODE -#endif - -/* Allow the routine to be named something else if desired. */ -#ifndef MEMCPY_NAME -# define MEMCPY_NAME memcpy -#endif - -/* We use these 32/64 bit registers as temporaries to do the copying. */ -#define REG0 t0 -#define REG1 t1 -#define REG2 t2 -#define REG3 t3 -#if defined(_MIPS_SIM) && ((_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABIO64)) -# define REG4 t4 -# define REG5 t5 -# define REG6 t6 -# define REG7 t7 -#else -# define REG4 ta0 -# define REG5 ta1 -# define REG6 ta2 -# define REG7 ta3 -#endif - -/* We load/store 64 bits at a time when USE_DOUBLE is true. - * The C_ prefix stands for CHUNK and is used to avoid macro name - * conflicts with system header files. */ - -#ifdef USE_DOUBLE -# define C_ST sd -# define C_LD ld -# ifdef __MIPSEB -# define C_LDHI ldl /* high part is left in big-endian */ -# define C_STHI sdl /* high part is left in big-endian */ -# define C_LDLO ldr /* low part is right in big-endian */ -# define C_STLO sdr /* low part is right in big-endian */ -# else -# define C_LDHI ldr /* high part is right in little-endian */ -# define C_STHI sdr /* high part is right in little-endian */ -# define C_LDLO ldl /* low part is left in little-endian */ -# define C_STLO sdl /* low part is left in little-endian */ -# endif -# define C_ALIGN dalign /* r6 align instruction */ -#else -# define C_ST sw -# define C_LD lw -# ifdef __MIPSEB -# define C_LDHI lwl /* high part is left in big-endian */ -# define C_STHI swl /* high part is left in big-endian */ -# define C_LDLO lwr /* low part is right in big-endian */ -# define C_STLO swr /* low part is right in big-endian */ -# else -# define C_LDHI lwr /* high part is right in little-endian */ -# define C_STHI swr /* high part is right in little-endian */ -# define C_LDLO lwl /* low part is left in little-endian */ -# define C_STLO swl /* low part is left in little-endian */ -# endif -# define C_ALIGN align /* r6 align instruction */ -#endif - -/* Bookkeeping values for 32 vs. 64 bit mode. */ -#ifdef USE_DOUBLE -# define NSIZE 8 -# define NSIZEMASK 0x3f -# define NSIZEDMASK 0x7f -#else -# define NSIZE 4 -# define NSIZEMASK 0x1f -# define NSIZEDMASK 0x3f -#endif -#define UNIT(unit) ((unit)*NSIZE) -#define UNITM1(unit) (((unit)*NSIZE)-1) - -#ifdef ANDROID_CHANGES -LEAF(MEMCPY_NAME, 0) -#else -LEAF(MEMCPY_NAME) -#endif - .set nomips16 - .set noreorder -/* - * Below we handle the case where memcpy is called with overlapping src and dst. - * Although memcpy is not required to handle this case, some parts of Android - * like Skia rely on such usage. We call memmove to handle such cases. - */ -#ifdef USE_MEMMOVE_FOR_OVERLAP - PTR_SUBU t0,a0,a1 - PTR_SRA t2,t0,31 - xor t1,t0,t2 - PTR_SUBU t0,t1,t2 - sltu t2,t0,a2 - beq t2,zero,L(memcpy) - la t9,memmove - jr t9 - nop -L(memcpy): -#endif -/* - * If the size is less than 2*NSIZE (8 or 16), go to L(lastb). Regardless of - * size, copy dst pointer to v0 for the return value. - */ - slti t2,a2,(2 * NSIZE) - bne t2,zero,L(lasts) -#if defined(RETURN_FIRST_PREFETCH) || defined(RETURN_LAST_PREFETCH) - move v0,zero -#else - move v0,a0 -#endif - -#ifndef R6_CODE - -/* - * If src and dst have different alignments, go to L(unaligned), if they - * have the same alignment (but are not actually aligned) do a partial - * load/store to make them aligned. If they are both already aligned - * we can start copying at L(aligned). - */ - xor t8,a1,a0 - andi t8,t8,(NSIZE-1) /* t8 is a0/a1 word-displacement */ - bne t8,zero,L(unaligned) - PTR_SUBU a3, zero, a0 - - andi a3,a3,(NSIZE-1) /* copy a3 bytes to align a0/a1 */ - beq a3,zero,L(aligned) /* if a3=0, it is already aligned */ - PTR_SUBU a2,a2,a3 /* a2 is the remining bytes count */ - - C_LDHI t8,0(a1) - PTR_ADDU a1,a1,a3 - C_STHI t8,0(a0) - PTR_ADDU a0,a0,a3 - -#else /* R6_CODE */ - -/* - * Align the destination and hope that the source gets aligned too. If it - * doesn't we jump to L(r6_unaligned*) to do unaligned copies using the r6 - * align instruction. - */ - andi t8,a0,7 - lapc t9,L(atable) - PTR_LSA t9,t8,t9,2 - jrc t9 -L(atable): - bc L(lb0) - bc L(lb7) - bc L(lb6) - bc L(lb5) - bc L(lb4) - bc L(lb3) - bc L(lb2) - bc L(lb1) -L(lb7): - lb a3, 6(a1) - sb a3, 6(a0) -L(lb6): - lb a3, 5(a1) - sb a3, 5(a0) -L(lb5): - lb a3, 4(a1) - sb a3, 4(a0) -L(lb4): - lb a3, 3(a1) - sb a3, 3(a0) -L(lb3): - lb a3, 2(a1) - sb a3, 2(a0) -L(lb2): - lb a3, 1(a1) - sb a3, 1(a0) -L(lb1): - lb a3, 0(a1) - sb a3, 0(a0) - - li t9,8 - subu t8,t9,t8 - PTR_SUBU a2,a2,t8 - PTR_ADDU a0,a0,t8 - PTR_ADDU a1,a1,t8 -L(lb0): - - andi t8,a1,(NSIZE-1) - lapc t9,L(jtable) - PTR_LSA t9,t8,t9,2 - jrc t9 -L(jtable): - bc L(aligned) - bc L(r6_unaligned1) - bc L(r6_unaligned2) - bc L(r6_unaligned3) -# ifdef USE_DOUBLE - bc L(r6_unaligned4) - bc L(r6_unaligned5) - bc L(r6_unaligned6) - bc L(r6_unaligned7) -# endif -#endif /* R6_CODE */ - -L(aligned): - -/* - * Now dst/src are both aligned to (word or double word) aligned addresses - * Set a2 to count how many bytes we have to copy after all the 64/128 byte - * chunks are copied and a3 to the dst pointer after all the 64/128 byte - * chunks have been copied. We will loop, incrementing a0 and a1 until a0 - * equals a3. - */ - - andi t8,a2,NSIZEDMASK /* any whole 64-byte/128-byte chunks? */ - beq a2,t8,L(chkw) /* if a2==t8, no 64-byte/128-byte chunks */ - PTR_SUBU a3,a2,t8 /* subtract from a2 the reminder */ - PTR_ADDU a3,a0,a3 /* Now a3 is the final dst after loop */ - -/* When in the loop we may prefetch with the 'prepare to store' hint, - * in this case the a0+x should not be past the "t0-32" address. This - * means: for x=128 the last "safe" a0 address is "t0-160". Alternatively, - * for x=64 the last "safe" a0 address is "t0-96" In the current version we - * will use "prefetch hint,128(a0)", so "t0-160" is the limit. - */ -#if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE) - PTR_ADDU t0,a0,a2 /* t0 is the "past the end" address */ - PTR_SUBU t9,t0,PREFETCH_LIMIT /* t9 is the "last safe pref" address */ -#endif - PREFETCH_FOR_LOAD (0, a1) - PREFETCH_FOR_LOAD (1, a1) - PREFETCH_FOR_LOAD (2, a1) - PREFETCH_FOR_LOAD (3, a1) -#if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT != PREFETCH_HINT_PREPAREFORSTORE) - PREFETCH_FOR_STORE (1, a0) - PREFETCH_FOR_STORE (2, a0) - PREFETCH_FOR_STORE (3, a0) -#endif -#if defined(RETURN_FIRST_PREFETCH) && defined(USE_PREFETCH) -# if PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE - sltu v1,t9,a0 - bgtz v1,L(skip_set) - nop - PTR_ADDIU v0,a0,(PREFETCH_CHUNK*4) -L(skip_set): -# else - PTR_ADDIU v0,a0,(PREFETCH_CHUNK*1) -# endif -#endif -#if defined(RETURN_LAST_PREFETCH) && defined(USE_PREFETCH) \ - && (PREFETCH_STORE_HINT != PREFETCH_HINT_PREPAREFORSTORE) - PTR_ADDIU v0,a0,(PREFETCH_CHUNK*3) -# ifdef USE_DOUBLE - PTR_ADDIU v0,v0,32 -# endif -#endif -L(loop16w): - C_LD t0,UNIT(0)(a1) -#if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE) - sltu v1,t9,a0 /* If a0 > t9 don't use next prefetch */ - bgtz v1,L(skip_pref) -#endif - C_LD t1,UNIT(1)(a1) -#ifdef R6_CODE - PREFETCH_FOR_STORE (2, a0) -#else - PREFETCH_FOR_STORE (4, a0) - PREFETCH_FOR_STORE (5, a0) -#endif -#if defined(RETURN_LAST_PREFETCH) && defined(USE_PREFETCH) - PTR_ADDIU v0,a0,(PREFETCH_CHUNK*5) -# ifdef USE_DOUBLE - PTR_ADDIU v0,v0,32 -# endif -#endif -L(skip_pref): - C_LD REG2,UNIT(2)(a1) - C_LD REG3,UNIT(3)(a1) - C_LD REG4,UNIT(4)(a1) - C_LD REG5,UNIT(5)(a1) - C_LD REG6,UNIT(6)(a1) - C_LD REG7,UNIT(7)(a1) -#ifdef R6_CODE - PREFETCH_FOR_LOAD (3, a1) -#else - PREFETCH_FOR_LOAD (4, a1) -#endif - C_ST t0,UNIT(0)(a0) - C_ST t1,UNIT(1)(a0) - C_ST REG2,UNIT(2)(a0) - C_ST REG3,UNIT(3)(a0) - C_ST REG4,UNIT(4)(a0) - C_ST REG5,UNIT(5)(a0) - C_ST REG6,UNIT(6)(a0) - C_ST REG7,UNIT(7)(a0) - - C_LD t0,UNIT(8)(a1) - C_LD t1,UNIT(9)(a1) - C_LD REG2,UNIT(10)(a1) - C_LD REG3,UNIT(11)(a1) - C_LD REG4,UNIT(12)(a1) - C_LD REG5,UNIT(13)(a1) - C_LD REG6,UNIT(14)(a1) - C_LD REG7,UNIT(15)(a1) -#ifndef R6_CODE - PREFETCH_FOR_LOAD (5, a1) -#endif - C_ST t0,UNIT(8)(a0) - C_ST t1,UNIT(9)(a0) - C_ST REG2,UNIT(10)(a0) - C_ST REG3,UNIT(11)(a0) - C_ST REG4,UNIT(12)(a0) - C_ST REG5,UNIT(13)(a0) - C_ST REG6,UNIT(14)(a0) - C_ST REG7,UNIT(15)(a0) - PTR_ADDIU a0,a0,UNIT(16) /* adding 64/128 to dest */ - bne a0,a3,L(loop16w) - PTR_ADDIU a1,a1,UNIT(16) /* adding 64/128 to src */ - move a2,t8 - -/* Here we have src and dest word-aligned but less than 64-bytes or - * 128 bytes to go. Check for a 32(64) byte chunk and copy if if there - * is one. Otherwise jump down to L(chk1w) to handle the tail end of - * the copy. - */ - -L(chkw): - PREFETCH_FOR_LOAD (0, a1) - andi t8,a2,NSIZEMASK /* Is there a 32-byte/64-byte chunk. */ - /* The t8 is the reminder count past 32-bytes */ - beq a2,t8,L(chk1w) /* When a2=t8, no 32-byte chunk */ - nop - C_LD t0,UNIT(0)(a1) - C_LD t1,UNIT(1)(a1) - C_LD REG2,UNIT(2)(a1) - C_LD REG3,UNIT(3)(a1) - C_LD REG4,UNIT(4)(a1) - C_LD REG5,UNIT(5)(a1) - C_LD REG6,UNIT(6)(a1) - C_LD REG7,UNIT(7)(a1) - PTR_ADDIU a1,a1,UNIT(8) - C_ST t0,UNIT(0)(a0) - C_ST t1,UNIT(1)(a0) - C_ST REG2,UNIT(2)(a0) - C_ST REG3,UNIT(3)(a0) - C_ST REG4,UNIT(4)(a0) - C_ST REG5,UNIT(5)(a0) - C_ST REG6,UNIT(6)(a0) - C_ST REG7,UNIT(7)(a0) - PTR_ADDIU a0,a0,UNIT(8) - -/* - * Here we have less than 32(64) bytes to copy. Set up for a loop to - * copy one word (or double word) at a time. Set a2 to count how many - * bytes we have to copy after all the word (or double word) chunks are - * copied and a3 to the dst pointer after all the (d)word chunks have - * been copied. We will loop, incrementing a0 and a1 until a0 equals a3. - */ -L(chk1w): - andi a2,t8,(NSIZE-1) /* a2 is the reminder past one (d)word chunks */ - beq a2,t8,L(lastw) - PTR_SUBU a3,t8,a2 /* a3 is count of bytes in one (d)word chunks */ - PTR_ADDU a3,a0,a3 /* a3 is the dst address after loop */ - -/* copying in words (4-byte or 8-byte chunks) */ -L(wordCopy_loop): - C_LD REG3,UNIT(0)(a1) - PTR_ADDIU a0,a0,UNIT(1) - PTR_ADDIU a1,a1,UNIT(1) - bne a0,a3,L(wordCopy_loop) - C_ST REG3,UNIT(-1)(a0) - -/* If we have been copying double words, see if we can copy a single word - before doing byte copies. We can have, at most, one word to copy. */ - -L(lastw): -#ifdef USE_DOUBLE - andi t8,a2,3 /* a2 is the remainder past 4 byte chunks. */ - beq t8,a2,L(lastb) - move a2,t8 - lw REG3,0(a1) - sw REG3,0(a0) - PTR_ADDIU a0,a0,4 - PTR_ADDIU a1,a1,4 -#endif - -/* Copy the last 8 (or 16) bytes */ -L(lastb): - blez a2,L(leave) - PTR_ADDU a3,a0,a2 /* a3 is the last dst address */ -L(lastbloop): - lb v1,0(a1) - PTR_ADDIU a0,a0,1 - PTR_ADDIU a1,a1,1 - bne a0,a3,L(lastbloop) - sb v1,-1(a0) -L(leave): - j ra - nop - -/* We jump here with a memcpy of less than 8 or 16 bytes, depending on - whether or not USE_DOUBLE is defined. Instead of just doing byte - copies, check the alignment and size and use lw/sw if possible. - Otherwise, do byte copies. */ - -L(lasts): - andi t8,a2,3 - beq t8,a2,L(lastb) - - andi t9,a0,3 - bne t9,zero,L(lastb) - andi t9,a1,3 - bne t9,zero,L(lastb) - - PTR_SUBU a3,a2,t8 - PTR_ADDU a3,a0,a3 - -L(wcopy_loop): - lw REG3,0(a1) - PTR_ADDIU a0,a0,4 - PTR_ADDIU a1,a1,4 - bne a0,a3,L(wcopy_loop) - sw REG3,-4(a0) - - b L(lastb) - move a2,t8 - -#ifndef R6_CODE -/* - * UNALIGNED case, got here with a3 = "negu a0" - * This code is nearly identical to the aligned code above - * but only the destination (not the source) gets aligned - * so we need to do partial loads of the source followed - * by normal stores to the destination (once we have aligned - * the destination). - */ - -L(unaligned): - andi a3,a3,(NSIZE-1) /* copy a3 bytes to align a0/a1 */ - beqz a3,L(ua_chk16w) /* if a3=0, it is already aligned */ - PTR_SUBU a2,a2,a3 /* a2 is the remining bytes count */ - - C_LDHI v1,UNIT(0)(a1) - C_LDLO v1,UNITM1(1)(a1) - PTR_ADDU a1,a1,a3 - C_STHI v1,UNIT(0)(a0) - PTR_ADDU a0,a0,a3 - -/* - * Now the destination (but not the source) is aligned - * Set a2 to count how many bytes we have to copy after all the 64/128 byte - * chunks are copied and a3 to the dst pointer after all the 64/128 byte - * chunks have been copied. We will loop, incrementing a0 and a1 until a0 - * equals a3. - */ - -L(ua_chk16w): - andi t8,a2,NSIZEDMASK /* any whole 64-byte/128-byte chunks? */ - beq a2,t8,L(ua_chkw) /* if a2==t8, no 64-byte/128-byte chunks */ - PTR_SUBU a3,a2,t8 /* subtract from a2 the reminder */ - PTR_ADDU a3,a0,a3 /* Now a3 is the final dst after loop */ - -# if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE) - PTR_ADDU t0,a0,a2 /* t0 is the "past the end" address */ - PTR_SUBU t9,t0,PREFETCH_LIMIT /* t9 is the "last safe pref" address */ -# endif - PREFETCH_FOR_LOAD (0, a1) - PREFETCH_FOR_LOAD (1, a1) - PREFETCH_FOR_LOAD (2, a1) -# if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT != PREFETCH_HINT_PREPAREFORSTORE) - PREFETCH_FOR_STORE (1, a0) - PREFETCH_FOR_STORE (2, a0) - PREFETCH_FOR_STORE (3, a0) -# endif -# if defined(RETURN_FIRST_PREFETCH) && defined(USE_PREFETCH) -# if (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE) - sltu v1,t9,a0 - bgtz v1,L(ua_skip_set) - nop - PTR_ADDIU v0,a0,(PREFETCH_CHUNK*4) -L(ua_skip_set): -# else - PTR_ADDIU v0,a0,(PREFETCH_CHUNK*1) -# endif -# endif -L(ua_loop16w): - PREFETCH_FOR_LOAD (3, a1) - C_LDHI t0,UNIT(0)(a1) - C_LDHI t1,UNIT(1)(a1) - C_LDHI REG2,UNIT(2)(a1) -# if defined(USE_PREFETCH) && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE) - sltu v1,t9,a0 - bgtz v1,L(ua_skip_pref) -# endif - C_LDHI REG3,UNIT(3)(a1) - PREFETCH_FOR_STORE (4, a0) - PREFETCH_FOR_STORE (5, a0) -L(ua_skip_pref): - C_LDHI REG4,UNIT(4)(a1) - C_LDHI REG5,UNIT(5)(a1) - C_LDHI REG6,UNIT(6)(a1) - C_LDHI REG7,UNIT(7)(a1) - C_LDLO t0,UNITM1(1)(a1) - C_LDLO t1,UNITM1(2)(a1) - C_LDLO REG2,UNITM1(3)(a1) - C_LDLO REG3,UNITM1(4)(a1) - C_LDLO REG4,UNITM1(5)(a1) - C_LDLO REG5,UNITM1(6)(a1) - C_LDLO REG6,UNITM1(7)(a1) - C_LDLO REG7,UNITM1(8)(a1) - PREFETCH_FOR_LOAD (4, a1) - C_ST t0,UNIT(0)(a0) - C_ST t1,UNIT(1)(a0) - C_ST REG2,UNIT(2)(a0) - C_ST REG3,UNIT(3)(a0) - C_ST REG4,UNIT(4)(a0) - C_ST REG5,UNIT(5)(a0) - C_ST REG6,UNIT(6)(a0) - C_ST REG7,UNIT(7)(a0) - C_LDHI t0,UNIT(8)(a1) - C_LDHI t1,UNIT(9)(a1) - C_LDHI REG2,UNIT(10)(a1) - C_LDHI REG3,UNIT(11)(a1) - C_LDHI REG4,UNIT(12)(a1) - C_LDHI REG5,UNIT(13)(a1) - C_LDHI REG6,UNIT(14)(a1) - C_LDHI REG7,UNIT(15)(a1) - C_LDLO t0,UNITM1(9)(a1) - C_LDLO t1,UNITM1(10)(a1) - C_LDLO REG2,UNITM1(11)(a1) - C_LDLO REG3,UNITM1(12)(a1) - C_LDLO REG4,UNITM1(13)(a1) - C_LDLO REG5,UNITM1(14)(a1) - C_LDLO REG6,UNITM1(15)(a1) - C_LDLO REG7,UNITM1(16)(a1) - PREFETCH_FOR_LOAD (5, a1) - C_ST t0,UNIT(8)(a0) - C_ST t1,UNIT(9)(a0) - C_ST REG2,UNIT(10)(a0) - C_ST REG3,UNIT(11)(a0) - C_ST REG4,UNIT(12)(a0) - C_ST REG5,UNIT(13)(a0) - C_ST REG6,UNIT(14)(a0) - C_ST REG7,UNIT(15)(a0) - PTR_ADDIU a0,a0,UNIT(16) /* adding 64/128 to dest */ - bne a0,a3,L(ua_loop16w) - PTR_ADDIU a1,a1,UNIT(16) /* adding 64/128 to src */ - move a2,t8 - -/* Here we have src and dest word-aligned but less than 64-bytes or - * 128 bytes to go. Check for a 32(64) byte chunk and copy if if there - * is one. Otherwise jump down to L(ua_chk1w) to handle the tail end of - * the copy. */ - -L(ua_chkw): - PREFETCH_FOR_LOAD (0, a1) - andi t8,a2,NSIZEMASK /* Is there a 32-byte/64-byte chunk. */ - /* t8 is the reminder count past 32-bytes */ - beq a2,t8,L(ua_chk1w) /* When a2=t8, no 32-byte chunk */ - nop - C_LDHI t0,UNIT(0)(a1) - C_LDHI t1,UNIT(1)(a1) - C_LDHI REG2,UNIT(2)(a1) - C_LDHI REG3,UNIT(3)(a1) - C_LDHI REG4,UNIT(4)(a1) - C_LDHI REG5,UNIT(5)(a1) - C_LDHI REG6,UNIT(6)(a1) - C_LDHI REG7,UNIT(7)(a1) - C_LDLO t0,UNITM1(1)(a1) - C_LDLO t1,UNITM1(2)(a1) - C_LDLO REG2,UNITM1(3)(a1) - C_LDLO REG3,UNITM1(4)(a1) - C_LDLO REG4,UNITM1(5)(a1) - C_LDLO REG5,UNITM1(6)(a1) - C_LDLO REG6,UNITM1(7)(a1) - C_LDLO REG7,UNITM1(8)(a1) - PTR_ADDIU a1,a1,UNIT(8) - C_ST t0,UNIT(0)(a0) - C_ST t1,UNIT(1)(a0) - C_ST REG2,UNIT(2)(a0) - C_ST REG3,UNIT(3)(a0) - C_ST REG4,UNIT(4)(a0) - C_ST REG5,UNIT(5)(a0) - C_ST REG6,UNIT(6)(a0) - C_ST REG7,UNIT(7)(a0) - PTR_ADDIU a0,a0,UNIT(8) -/* - * Here we have less than 32(64) bytes to copy. Set up for a loop to - * copy one word (or double word) at a time. - */ -L(ua_chk1w): - andi a2,t8,(NSIZE-1) /* a2 is the reminder past one (d)word chunks */ - beq a2,t8,L(ua_smallCopy) - PTR_SUBU a3,t8,a2 /* a3 is count of bytes in one (d)word chunks */ - PTR_ADDU a3,a0,a3 /* a3 is the dst address after loop */ - -/* copying in words (4-byte or 8-byte chunks) */ -L(ua_wordCopy_loop): - C_LDHI v1,UNIT(0)(a1) - C_LDLO v1,UNITM1(1)(a1) - PTR_ADDIU a0,a0,UNIT(1) - PTR_ADDIU a1,a1,UNIT(1) - bne a0,a3,L(ua_wordCopy_loop) - C_ST v1,UNIT(-1)(a0) - -/* Copy the last 8 (or 16) bytes */ -L(ua_smallCopy): - beqz a2,L(leave) - PTR_ADDU a3,a0,a2 /* a3 is the last dst address */ -L(ua_smallCopy_loop): - lb v1,0(a1) - PTR_ADDIU a0,a0,1 - PTR_ADDIU a1,a1,1 - bne a0,a3,L(ua_smallCopy_loop) - sb v1,-1(a0) - - j ra - nop - -#else /* R6_CODE */ - -# ifdef __MIPSEB -# define SWAP_REGS(X,Y) X, Y -# define ALIGN_OFFSET(N) (N) -# else -# define SWAP_REGS(X,Y) Y, X -# define ALIGN_OFFSET(N) (NSIZE-N) -# endif -# define R6_UNALIGNED_WORD_COPY(BYTEOFFSET) \ - andi REG7, a2, (NSIZE-1);/* REG7 is # of bytes to by bytes. */ \ - beq REG7, a2, L(lastb); /* Check for bytes to copy by word */ \ - PTR_SUBU a3, a2, REG7; /* a3 is number of bytes to be copied in */ \ - /* (d)word chunks. */ \ - move a2, REG7; /* a2 is # of bytes to copy byte by byte */ \ - /* after word loop is finished. */ \ - PTR_ADDU REG6, a0, a3; /* REG6 is the dst address after loop. */ \ - PTR_SUBU REG2, a1, t8; /* REG2 is the aligned src address. */ \ - PTR_ADDU a1, a1, a3; /* a1 is addr of source after word loop. */ \ - C_LD t0, UNIT(0)(REG2); /* Load first part of source. */ \ -L(r6_ua_wordcopy##BYTEOFFSET): \ - C_LD t1, UNIT(1)(REG2); /* Load second part of source. */ \ - C_ALIGN REG3, SWAP_REGS(t1,t0), ALIGN_OFFSET(BYTEOFFSET); \ - PTR_ADDIU a0, a0, UNIT(1); /* Increment destination pointer. */ \ - PTR_ADDIU REG2, REG2, UNIT(1); /* Increment aligned source pointer.*/ \ - move t0, t1; /* Move second part of source to first. */ \ - bne a0, REG6,L(r6_ua_wordcopy##BYTEOFFSET); \ - C_ST REG3, UNIT(-1)(a0); \ - j L(lastb); \ - nop - - /* We are generating R6 code, the destination is 4 byte aligned and - the source is not 4 byte aligned. t8 is 1, 2, or 3 depending on the - alignment of the source. */ - -L(r6_unaligned1): - R6_UNALIGNED_WORD_COPY(1) -L(r6_unaligned2): - R6_UNALIGNED_WORD_COPY(2) -L(r6_unaligned3): - R6_UNALIGNED_WORD_COPY(3) -# ifdef USE_DOUBLE -L(r6_unaligned4): - R6_UNALIGNED_WORD_COPY(4) -L(r6_unaligned5): - R6_UNALIGNED_WORD_COPY(5) -L(r6_unaligned6): - R6_UNALIGNED_WORD_COPY(6) -L(r6_unaligned7): - R6_UNALIGNED_WORD_COPY(7) -# endif -#endif /* R6_CODE */ - - .set at - .set reorder -END(MEMCPY_NAME) -#ifndef ANDROID_CHANGES -# ifdef _LIBC -libc_hidden_builtin_def (MEMCPY_NAME) -# endif -#endif diff --git a/sysdeps/mips/memset.S b/sysdeps/mips/memset.S deleted file mode 100644 index 04370a8660..0000000000 --- a/sysdeps/mips/memset.S +++ /dev/null @@ -1,426 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifdef ANDROID_CHANGES -# include "machine/asm.h" -# include "machine/regdef.h" -# define PREFETCH_STORE_HINT PREFETCH_HINT_PREPAREFORSTORE -#elif _LIBC -# include -# include -# include -# define PREFETCH_STORE_HINT PREFETCH_HINT_PREPAREFORSTORE -#elif defined _COMPILING_NEWLIB -# include "machine/asm.h" -# include "machine/regdef.h" -# define PREFETCH_STORE_HINT PREFETCH_HINT_PREPAREFORSTORE -#else -# include -# include -#endif - -/* Check to see if the MIPS architecture we are compiling for supports - prefetching. */ - -#if (__mips == 4) || (__mips == 5) || (__mips == 32) || (__mips == 64) -# ifndef DISABLE_PREFETCH -# define USE_PREFETCH -# endif -#endif - -#if defined(_MIPS_SIM) && ((_MIPS_SIM == _ABI64) || (_MIPS_SIM == _ABIN32)) -# ifndef DISABLE_DOUBLE -# define USE_DOUBLE -# endif -#endif - -#ifndef USE_DOUBLE -# ifndef DISABLE_DOUBLE_ALIGN -# define DOUBLE_ALIGN -# endif -#endif - - -/* Some asm.h files do not have the L macro definition. */ -#ifndef L -# if _MIPS_SIM == _ABIO32 -# define L(label) $L ## label -# else -# define L(label) .L ## label -# endif -#endif - -/* Some asm.h files do not have the PTR_ADDIU macro definition. */ -#ifndef PTR_ADDIU -# ifdef USE_DOUBLE -# define PTR_ADDIU daddiu -# else -# define PTR_ADDIU addiu -# endif -#endif - -/* New R6 instructions that may not be in asm.h. */ -#ifndef PTR_LSA -# if _MIPS_SIM == _ABI64 -# define PTR_LSA dlsa -# else -# define PTR_LSA lsa -# endif -#endif - -/* Using PREFETCH_HINT_PREPAREFORSTORE instead of PREFETCH_STORE - or PREFETCH_STORE_STREAMED offers a large performance advantage - but PREPAREFORSTORE has some special restrictions to consider. - - Prefetch with the 'prepare for store' hint does not copy a memory - location into the cache, it just allocates a cache line and zeros - it out. This means that if you do not write to the entire cache - line before writing it out to memory some data will get zero'ed out - when the cache line is written back to memory and data will be lost. - - There are ifdef'ed sections of this memcpy to make sure that it does not - do prefetches on cache lines that are not going to be completely written. - This code is only needed and only used when PREFETCH_STORE_HINT is set to - PREFETCH_HINT_PREPAREFORSTORE. This code assumes that cache lines are - less than MAX_PREFETCH_SIZE bytes and if the cache line is larger it will - not work correctly. */ - -#ifdef USE_PREFETCH -# define PREFETCH_HINT_STORE 1 -# define PREFETCH_HINT_STORE_STREAMED 5 -# define PREFETCH_HINT_STORE_RETAINED 7 -# define PREFETCH_HINT_PREPAREFORSTORE 30 - -/* If we have not picked out what hints to use at this point use the - standard load and store prefetch hints. */ -# ifndef PREFETCH_STORE_HINT -# define PREFETCH_STORE_HINT PREFETCH_HINT_STORE -# endif - -/* We double everything when USE_DOUBLE is true so we do 2 prefetches to - get 64 bytes in that case. The assumption is that each individual - prefetch brings in 32 bytes. */ -# ifdef USE_DOUBLE -# define PREFETCH_CHUNK 64 -# define PREFETCH_FOR_STORE(chunk, reg) \ - pref PREFETCH_STORE_HINT, (chunk)*64(reg); \ - pref PREFETCH_STORE_HINT, ((chunk)*64)+32(reg) -# else -# define PREFETCH_CHUNK 32 -# define PREFETCH_FOR_STORE(chunk, reg) \ - pref PREFETCH_STORE_HINT, (chunk)*32(reg) -# endif - -/* MAX_PREFETCH_SIZE is the maximum size of a prefetch, it must not be less - than PREFETCH_CHUNK, the assumed size of each prefetch. If the real size - of a prefetch is greater than MAX_PREFETCH_SIZE and the PREPAREFORSTORE - hint is used, the code will not work correctly. If PREPAREFORSTORE is not - used than MAX_PREFETCH_SIZE does not matter. */ -# define MAX_PREFETCH_SIZE 128 -/* PREFETCH_LIMIT is set based on the fact that we never use an offset greater - than 5 on a STORE prefetch and that a single prefetch can never be larger - than MAX_PREFETCH_SIZE. We add the extra 32 when USE_DOUBLE is set because - we actually do two prefetches in that case, one 32 bytes after the other. */ -# ifdef USE_DOUBLE -# define PREFETCH_LIMIT (5 * PREFETCH_CHUNK) + 32 + MAX_PREFETCH_SIZE -# else -# define PREFETCH_LIMIT (5 * PREFETCH_CHUNK) + MAX_PREFETCH_SIZE -# endif - -# if (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE) \ - && ((PREFETCH_CHUNK * 4) < MAX_PREFETCH_SIZE) -/* We cannot handle this because the initial prefetches may fetch bytes that - are before the buffer being copied. We start copies with an offset - of 4 so avoid this situation when using PREPAREFORSTORE. */ -# error "PREFETCH_CHUNK is too large and/or MAX_PREFETCH_SIZE is too small." -# endif -#else /* USE_PREFETCH not defined */ -# define PREFETCH_FOR_STORE(offset, reg) -#endif - -#if __mips_isa_rev > 5 -# if (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE) -# undef PREFETCH_STORE_HINT -# define PREFETCH_STORE_HINT PREFETCH_HINT_STORE_STREAMED -# endif -# define R6_CODE -#endif - -/* Allow the routine to be named something else if desired. */ -#ifndef MEMSET_NAME -# define MEMSET_NAME memset -#endif - -/* We load/store 64 bits at a time when USE_DOUBLE is true. - The C_ prefix stands for CHUNK and is used to avoid macro name - conflicts with system header files. */ - -#ifdef USE_DOUBLE -# define C_ST sd -# ifdef __MIPSEB -# define C_STHI sdl /* high part is left in big-endian */ -# else -# define C_STHI sdr /* high part is right in little-endian */ -# endif -#else -# define C_ST sw -# ifdef __MIPSEB -# define C_STHI swl /* high part is left in big-endian */ -# else -# define C_STHI swr /* high part is right in little-endian */ -# endif -#endif - -/* Bookkeeping values for 32 vs. 64 bit mode. */ -#ifdef USE_DOUBLE -# define NSIZE 8 -# define NSIZEMASK 0x3f -# define NSIZEDMASK 0x7f -#else -# define NSIZE 4 -# define NSIZEMASK 0x1f -# define NSIZEDMASK 0x3f -#endif -#define UNIT(unit) ((unit)*NSIZE) -#define UNITM1(unit) (((unit)*NSIZE)-1) - -#ifdef ANDROID_CHANGES -LEAF(MEMSET_NAME,0) -#else -LEAF(MEMSET_NAME) -#endif - - .set nomips16 - .set noreorder -/* If the size is less than 2*NSIZE (8 or 16), go to L(lastb). Regardless of - size, copy dst pointer to v0 for the return value. */ - slti t2,a2,(2 * NSIZE) - bne t2,zero,L(lastb) - move v0,a0 - -/* If memset value is not zero, we copy it to all the bytes in a 32 or 64 - bit word. */ - beq a1,zero,L(set0) /* If memset value is zero no smear */ - PTR_SUBU a3,zero,a0 - nop - - /* smear byte into 32 or 64 bit word */ -#if ((__mips == 64) || (__mips == 32)) && (__mips_isa_rev >= 2) -# ifdef USE_DOUBLE - dins a1, a1, 8, 8 /* Replicate fill byte into half-word. */ - dins a1, a1, 16, 16 /* Replicate fill byte into word. */ - dins a1, a1, 32, 32 /* Replicate fill byte into dbl word. */ -# else - ins a1, a1, 8, 8 /* Replicate fill byte into half-word. */ - ins a1, a1, 16, 16 /* Replicate fill byte into word. */ -# endif -#else -# ifdef USE_DOUBLE - and a1,0xff - dsll t2,a1,8 - or a1,t2 - dsll t2,a1,16 - or a1,t2 - dsll t2,a1,32 - or a1,t2 -# else - and a1,0xff - sll t2,a1,8 - or a1,t2 - sll t2,a1,16 - or a1,t2 -# endif -#endif - -/* If the destination address is not aligned do a partial store to get it - aligned. If it is already aligned just jump to L(aligned). */ -L(set0): -#ifndef R6_CODE - andi t2,a3,(NSIZE-1) /* word-unaligned address? */ - beq t2,zero,L(aligned) /* t2 is the unalignment count */ - PTR_SUBU a2,a2,t2 - C_STHI a1,0(a0) - PTR_ADDU a0,a0,t2 -#else /* R6_CODE */ - andi t2,a0,(NSIZE-1) - lapc t9,L(atable) - PTR_LSA t9,t2,t9,2 - jrc t9 -L(atable): - bc L(aligned) -# ifdef USE_DOUBLE - bc L(lb7) - bc L(lb6) - bc L(lb5) - bc L(lb4) -# endif - bc L(lb3) - bc L(lb2) - bc L(lb1) -L(lb7): - sb a1,6(a0) -L(lb6): - sb a1,5(a0) -L(lb5): - sb a1,4(a0) -L(lb4): - sb a1,3(a0) -L(lb3): - sb a1,2(a0) -L(lb2): - sb a1,1(a0) -L(lb1): - sb a1,0(a0) - - li t9,NSIZE - subu t2,t9,t2 - PTR_SUBU a2,a2,t2 - PTR_ADDU a0,a0,t2 -#endif /* R6_CODE */ - -L(aligned): -/* If USE_DOUBLE is not set we may still want to align the data on a 16 - byte boundry instead of an 8 byte boundry to maximize the opportunity - of proAptiv chips to do memory bonding (combining two sequential 4 - byte stores into one 8 byte store). We know there are at least 4 bytes - left to store or we would have jumped to L(lastb) earlier in the code. */ -#ifdef DOUBLE_ALIGN - andi t2,a3,4 - beq t2,zero,L(double_aligned) - PTR_SUBU a2,a2,t2 - sw a1,0(a0) - PTR_ADDU a0,a0,t2 -L(double_aligned): -#endif - -/* Now the destination is aligned to (word or double word) aligned address - Set a2 to count how many bytes we have to copy after all the 64/128 byte - chunks are copied and a3 to the dest pointer after all the 64/128 byte - chunks have been copied. We will loop, incrementing a0 until it equals - a3. */ - andi t8,a2,NSIZEDMASK /* any whole 64-byte/128-byte chunks? */ - beq a2,t8,L(chkw) /* if a2==t8, no 64-byte/128-byte chunks */ - PTR_SUBU a3,a2,t8 /* subtract from a2 the reminder */ - PTR_ADDU a3,a0,a3 /* Now a3 is the final dst after loop */ - -/* When in the loop we may prefetch with the 'prepare to store' hint, - in this case the a0+x should not be past the "t0-32" address. This - means: for x=128 the last "safe" a0 address is "t0-160". Alternatively, - for x=64 the last "safe" a0 address is "t0-96" In the current version we - will use "prefetch hint,128(a0)", so "t0-160" is the limit. */ -#if defined(USE_PREFETCH) \ - && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE) - PTR_ADDU t0,a0,a2 /* t0 is the "past the end" address */ - PTR_SUBU t9,t0,PREFETCH_LIMIT /* t9 is the "last safe pref" address */ -#endif -#if defined(USE_PREFETCH) \ - && (PREFETCH_STORE_HINT != PREFETCH_HINT_PREPAREFORSTORE) - PREFETCH_FOR_STORE (1, a0) - PREFETCH_FOR_STORE (2, a0) - PREFETCH_FOR_STORE (3, a0) -#endif - -L(loop16w): -#if defined(USE_PREFETCH) \ - && (PREFETCH_STORE_HINT == PREFETCH_HINT_PREPAREFORSTORE) - sltu v1,t9,a0 /* If a0 > t9 don't use next prefetch */ - bgtz v1,L(skip_pref) - nop -#endif -#ifdef R6_CODE - PREFETCH_FOR_STORE (2, a0) -#else - PREFETCH_FOR_STORE (4, a0) - PREFETCH_FOR_STORE (5, a0) -#endif -L(skip_pref): - C_ST a1,UNIT(0)(a0) - C_ST a1,UNIT(1)(a0) - C_ST a1,UNIT(2)(a0) - C_ST a1,UNIT(3)(a0) - C_ST a1,UNIT(4)(a0) - C_ST a1,UNIT(5)(a0) - C_ST a1,UNIT(6)(a0) - C_ST a1,UNIT(7)(a0) - C_ST a1,UNIT(8)(a0) - C_ST a1,UNIT(9)(a0) - C_ST a1,UNIT(10)(a0) - C_ST a1,UNIT(11)(a0) - C_ST a1,UNIT(12)(a0) - C_ST a1,UNIT(13)(a0) - C_ST a1,UNIT(14)(a0) - C_ST a1,UNIT(15)(a0) - PTR_ADDIU a0,a0,UNIT(16) /* adding 64/128 to dest */ - bne a0,a3,L(loop16w) - nop - move a2,t8 - -/* Here we have dest word-aligned but less than 64-bytes or 128 bytes to go. - Check for a 32(64) byte chunk and copy if if there is one. Otherwise - jump down to L(chk1w) to handle the tail end of the copy. */ -L(chkw): - andi t8,a2,NSIZEMASK /* is there a 32-byte/64-byte chunk. */ - /* the t8 is the reminder count past 32-bytes */ - beq a2,t8,L(chk1w)/* when a2==t8, no 32-byte chunk */ - nop - C_ST a1,UNIT(0)(a0) - C_ST a1,UNIT(1)(a0) - C_ST a1,UNIT(2)(a0) - C_ST a1,UNIT(3)(a0) - C_ST a1,UNIT(4)(a0) - C_ST a1,UNIT(5)(a0) - C_ST a1,UNIT(6)(a0) - C_ST a1,UNIT(7)(a0) - PTR_ADDIU a0,a0,UNIT(8) - -/* Here we have less than 32(64) bytes to set. Set up for a loop to - copy one word (or double word) at a time. Set a2 to count how many - bytes we have to copy after all the word (or double word) chunks are - copied and a3 to the dest pointer after all the (d)word chunks have - been copied. We will loop, incrementing a0 until a0 equals a3. */ -L(chk1w): - andi a2,t8,(NSIZE-1) /* a2 is the reminder past one (d)word chunks */ - beq a2,t8,L(lastb) - PTR_SUBU a3,t8,a2 /* a3 is count of bytes in one (d)word chunks */ - PTR_ADDU a3,a0,a3 /* a3 is the dst address after loop */ - -/* copying in words (4-byte or 8 byte chunks) */ -L(wordCopy_loop): - PTR_ADDIU a0,a0,UNIT(1) - bne a0,a3,L(wordCopy_loop) - C_ST a1,UNIT(-1)(a0) - -/* Copy the last 8 (or 16) bytes */ -L(lastb): - blez a2,L(leave) - PTR_ADDU a3,a0,a2 /* a3 is the last dst address */ -L(lastbloop): - PTR_ADDIU a0,a0,1 - bne a0,a3,L(lastbloop) - sb a1,-1(a0) -L(leave): - j ra - nop - - .set at - .set reorder -END(MEMSET_NAME) -#ifndef ANDROID_CHANGES -# ifdef _LIBC -libc_hidden_builtin_def (MEMSET_NAME) -# endif -#endif diff --git a/sysdeps/mips/memusage.h b/sysdeps/mips/memusage.h deleted file mode 100644 index aa2d4a8a3a..0000000000 --- a/sysdeps/mips/memusage.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("$29"); stack_ptr; }) - -#include diff --git a/sysdeps/mips/mips32/Implies b/sysdeps/mips/mips32/Implies deleted file mode 100644 index 6473f2517c..0000000000 --- a/sysdeps/mips/mips32/Implies +++ /dev/null @@ -1,3 +0,0 @@ -mips/ieee754 -mips -wordsize-32 diff --git a/sysdeps/mips/mips32/Makefile b/sysdeps/mips/mips32/Makefile deleted file mode 100644 index dec0b024c3..0000000000 --- a/sysdeps/mips/mips32/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(filter -mabi=32,$(CC)),) -CC += -mabi=32 -endif diff --git a/sysdeps/mips/mips32/crti.S b/sysdeps/mips/mips32/crti.S deleted file mode 100644 index 2cfdb23e3e..0000000000 --- a/sysdeps/mips/mips32/crti.S +++ /dev/null @@ -1,100 +0,0 @@ -/* Special .init and .fini section support for MIPS (o32). - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include - -#ifdef __mips_micromips -# define JALR_RELOC R_MICROMIPS_JALR -#else -# define JALR_RELOC R_MIPS_JALR -#endif - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - - .set nomips16 - - .section .init,"ax",@progbits - .p2align 2 - .globl _init - .type _init, @function -_init: - .set noreorder - .cpload $25 - .set reorder - addiu $sp,$sp,-32 - .cprestore 16 - sw $31,28($sp) -#if PREINIT_FUNCTION_WEAK - lw $2,%got(PREINIT_FUNCTION)($28) - beq $2,$0,.Lno_weak_fn - lw $25,%call16(PREINIT_FUNCTION)($28) - .reloc 1f,JALR_RELOC,PREINIT_FUNCTION -1: jalr $25 -.Lno_weak_fn: - .insn -#else - lw $25,%got(PREINIT_FUNCTION)($28) - .reloc 1f,JALR_RELOC,PREINIT_FUNCTION -1: jalr $25 -#endif - - .section .fini,"ax",@progbits - .p2align 2 - .globl _fini - .type _fini, @function -_fini: - .set noreorder - .cpload $25 - .set reorder - addiu $sp,$sp,-32 - .cprestore 16 - sw $31,28($sp) diff --git a/sysdeps/mips/mips32/crtn.S b/sysdeps/mips/mips32/crtn.S deleted file mode 100644 index 6655e2f03c..0000000000 --- a/sysdeps/mips/mips32/crtn.S +++ /dev/null @@ -1,57 +0,0 @@ -/* Special .init and .fini section support for MIPS (o32). - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .set nomips16 - - .section .init,"ax",@progbits - lw $31,28($sp) - .set noreorder - .set nomacro - j $31 - addiu $sp,$sp,32 - .set macro - .set reorder - - .section .fini,"ax",@progbits - lw $31,28($sp) - .set noreorder - .set nomacro - j $31 - addiu $sp,$sp,32 - .set macro - .set reorder diff --git a/sysdeps/mips/mips32/fpu/Makefile b/sysdeps/mips/mips32/fpu/Makefile deleted file mode 100644 index 951c408423..0000000000 --- a/sysdeps/mips/mips32/fpu/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),math) -aux += fpucw-helpers -endif diff --git a/sysdeps/mips/mips32/fpu/Versions b/sysdeps/mips/mips32/fpu/Versions deleted file mode 100644 index 91bbf564b3..0000000000 --- a/sysdeps/mips/mips32/fpu/Versions +++ /dev/null @@ -1,5 +0,0 @@ -libc { - GLIBC_2.18 { - __mips_fpu_getcw; __mips_fpu_setcw; - } -} diff --git a/sysdeps/mips/mips32/fpu/e_sqrt.c b/sysdeps/mips/mips32/fpu/e_sqrt.c deleted file mode 100644 index 81f4e77697..0000000000 --- a/sysdeps/mips/mips32/fpu/e_sqrt.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/mips32/fpu/e_sqrtf.c b/sysdeps/mips/mips32/fpu/e_sqrtf.c deleted file mode 100644 index fb0700d45c..0000000000 --- a/sysdeps/mips/mips32/fpu/e_sqrtf.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/mips32/fpu/fix-fp-int-convert-overflow.h b/sysdeps/mips/mips32/fpu/fix-fp-int-convert-overflow.h deleted file mode 100644 index 6ed2ec2bbb..0000000000 --- a/sysdeps/mips/mips32/fpu/fix-fp-int-convert-overflow.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Fix for conversion of floating point to integer overflow. MIPS version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef FIX_FP_INT_CONVERT_OVERFLOW_H -#define FIX_FP_INT_CONVERT_OVERFLOW_H 1 - -/* As of GCC 5, the generic libgcc2.c conversions from floating point - to long long may not raise the correct exceptions on overflow (and - may raise spurious "inexact" exceptions even in non-overflow cases, - see ). */ -#define FIX_FLT_LLONG_CONVERT_OVERFLOW 1 -#define FIX_DBL_LLONG_CONVERT_OVERFLOW 1 -#define FIX_LDBL_LLONG_CONVERT_OVERFLOW 0 - -/* As of GCC 5 and binutils 2.25, for MIPS I GCC generates calls to - assembler macros for conversions from floating point to integer - types, and those macros save and restore the whole of FSCR and so - lose exceptions. */ -#define FIX_FLT_LONG_CONVERT_OVERFLOW (__mips == 1) -#define FIX_DBL_LONG_CONVERT_OVERFLOW (__mips == 1) -#define FIX_LDBL_LONG_CONVERT_OVERFLOW 0 - -#endif /* fix-fp-int-convert-overflow.h */ diff --git a/sysdeps/mips/mips32/fpu/fpucw-helpers.c b/sysdeps/mips/mips32/fpu/fpucw-helpers.c deleted file mode 100644 index a69107bee2..0000000000 --- a/sysdeps/mips/mips32/fpu/fpucw-helpers.c +++ /dev/null @@ -1,34 +0,0 @@ -/* FPU control word handling, MIPS version, needed by MIPS16 callers. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -fpu_control_t -__mips_fpu_getcw (void) -{ - fpu_control_t cw; - - _FPU_GETCW (cw); - return cw; -} - -void -__mips_fpu_setcw (fpu_control_t cw) -{ - _FPU_SETCW (cw); -} diff --git a/sysdeps/mips/mips32/libm-test-ulps b/sysdeps/mips/mips32/libm-test-ulps deleted file mode 100644 index c6ee80095a..0000000000 --- a/sysdeps/mips/mips32/libm-test-ulps +++ /dev/null @@ -1,1690 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -float: 1 -ifloat: 1 - -Function: "acos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "acos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "acos_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "acosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "acosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "acosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "acosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "asin": -float: 1 -ifloat: 1 - -Function: "asin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "asinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "asinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "atan": -float: 1 -ifloat: 1 - -Function: "atan2": -float: 1 -ifloat: 1 - -Function: "atan2_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atan2_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atan2_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "atan_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "atanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "atanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "atanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "atanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "cabs": -double: 1 -idouble: 1 - -Function: "cabs_downward": -double: 1 -idouble: 1 - -Function: "cabs_towardzero": -double: 1 -idouble: 1 - -Function: "cabs_upward": -double: 1 -idouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacos": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "cacos_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: Imaginary part of "cacos_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "cacos_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: Imaginary part of "cacos_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "cacos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "cacos_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 - -Function: Real part of "cacosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cacosh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "cacosh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: Real part of "cacosh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "cacosh_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: Real part of "cacosh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: Imaginary part of "cacosh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "carg": -float: 1 -ifloat: 1 - -Function: "carg_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "carg_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "carg_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "casin": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "casin_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: Imaginary part of "casin_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "casin_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: Imaginary part of "casin_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "casin_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: Imaginary part of "casin_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 - -Function: Real part of "casinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "casinh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "casinh_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: Real part of "casinh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "casinh_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: Real part of "casinh_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 - -Function: Imaginary part of "casinh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: Real part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "catan_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "catan_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "catan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "catan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "catan_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catanh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "catanh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "catanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "catanh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "catanh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: Imaginary part of "catanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cbrt": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: "cbrt_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 - -Function: "cbrt_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: "cbrt_upward": -double: 5 -float: 1 -idouble: 5 -ifloat: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccos_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ccos_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "ccos_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ccos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccosh_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Imaginary part of "ccosh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ccosh_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Imaginary part of "ccosh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ccosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "ccosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cexp_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cexp_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Real part of "cexp_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cexp_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Real part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "clog": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 - -Function: Real part of "clog10": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 - -Function: Imaginary part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "clog10_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: Imaginary part of "clog10_downward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 - -Function: Real part of "clog10_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: Imaginary part of "clog10_towardzero": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 - -Function: Real part of "clog10_upward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 - -Function: Imaginary part of "clog10_upward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 - -Function: Real part of "clog_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Imaginary part of "clog_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "clog_towardzero": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: Imaginary part of "clog_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 - -Function: Real part of "clog_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Imaginary part of "clog_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "cos": -float: 1 -ifloat: 1 - -Function: "cos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "cos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cpow": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 - -Function: Real part of "cpow_downward": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 - -Function: Imaginary part of "cpow_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cpow_towardzero": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 - -Function: Imaginary part of "cpow_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cpow_upward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 - -Function: Imaginary part of "cpow_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csin_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "csin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csin_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "csin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csin_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "csin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csinh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "csinh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "csinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "csinh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "csinh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "csinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "csqrt_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: Imaginary part of "csqrt_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Real part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Imaginary part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: Real part of "csqrt_upward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: Imaginary part of "csqrt_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Real part of "ctan_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 - -Function: Imaginary part of "ctan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Real part of "ctan_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ctanh_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 - -Function: Imaginary part of "ctanh_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "ctanh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "erf_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "erf_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "erf_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "erfc": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "erfc_downward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 - -Function: "erfc_towardzero": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 - -Function: "erfc_upward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 - -Function: "exp": -float: 1 -ifloat: 1 - -Function: "exp10": -double: 2 -idouble: 2 - -Function: "exp10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "exp10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "exp10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "exp2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp2_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp_downward": -double: 1 -idouble: 1 - -Function: "exp_towardzero": -double: 1 -idouble: 1 - -Function: "exp_upward": -double: 1 -idouble: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "gamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "gamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "gamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "gamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "hypot": -double: 1 -idouble: 1 - -Function: "hypot_downward": -double: 1 -idouble: 1 - -Function: "hypot_towardzero": -double: 1 -idouble: 1 - -Function: "hypot_upward": -double: 1 -idouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "j0_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: "j0_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "j0_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "j1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "j1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "j1_upward": -double: 3 -float: 5 -idouble: 3 -ifloat: 5 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "jn_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "jn_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "jn_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "lgamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "lgamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "lgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "lgamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "log": -float: 1 -ifloat: 1 - -Function: "log10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log10_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: "log10_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log10_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log1p": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "log1p_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log1p_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log1p_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log2": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "log2_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "log2_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log2_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "log_downward": -float: 2 -ifloat: 2 - -Function: "log_towardzero": -float: 2 -ifloat: 2 - -Function: "log_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "pow": -float: 1 -ifloat: 1 - -Function: "pow10": -double: 2 -idouble: 2 - -Function: "pow10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "pow10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "pow10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "pow_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "pow_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "pow_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "sin": -float: 1 -ifloat: 1 - -Function: "sin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "sin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sincos": -float: 1 -ifloat: 1 - -Function: "sincos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sincos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "sincos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "sinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "sinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "sinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "tan": -float: 1 -ifloat: 1 - -Function: "tan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "tan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "tan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "tanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "tanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "tanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "tanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "tgamma": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "tgamma_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "tgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 - -Function: "tgamma_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "y0_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "y0_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "y0_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "y1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "y1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "y1_upward": -double: 7 -float: 2 -idouble: 7 -ifloat: 2 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "yn_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "yn_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: "yn_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -# end of automatic generation diff --git a/sysdeps/mips/mips32/libm-test-ulps-name b/sysdeps/mips/mips32/libm-test-ulps-name deleted file mode 100644 index d0622692ce..0000000000 --- a/sysdeps/mips/mips32/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -MIPS 32-bit diff --git a/sysdeps/mips/mips32/mips16/add_n.c b/sysdeps/mips/mips32/mips16/add_n.c deleted file mode 100644 index fbb4120418..0000000000 --- a/sysdeps/mips/mips32/mips16/add_n.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/mips32/mips16/addmul_1.c b/sysdeps/mips/mips32/mips16/addmul_1.c deleted file mode 100644 index c0e4a0bd7e..0000000000 --- a/sysdeps/mips/mips32/mips16/addmul_1.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/mips32/mips16/fpu/Makefile b/sysdeps/mips/mips32/mips16/fpu/Makefile deleted file mode 100644 index b58c4eeb0c..0000000000 --- a/sysdeps/mips/mips32/mips16/fpu/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -# Building hard-float libm as MIPS16 actually produces larger code size, -# so avoid doing so. -ifeq ($(subdir),math) -sysdep-CFLAGS += -mno-mips16 -endif diff --git a/sysdeps/mips/mips32/mips16/lshift.c b/sysdeps/mips/mips32/mips16/lshift.c deleted file mode 100644 index 2f945d2c59..0000000000 --- a/sysdeps/mips/mips32/mips16/lshift.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/mips32/mips16/mul_1.c b/sysdeps/mips/mips32/mips16/mul_1.c deleted file mode 100644 index 8e758d6039..0000000000 --- a/sysdeps/mips/mips32/mips16/mul_1.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/mips32/mips16/rshift.c b/sysdeps/mips/mips32/mips16/rshift.c deleted file mode 100644 index 4e350a0dcb..0000000000 --- a/sysdeps/mips/mips32/mips16/rshift.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/mips32/mips16/sub_n.c b/sysdeps/mips/mips32/mips16/sub_n.c deleted file mode 100644 index d8b54925b1..0000000000 --- a/sysdeps/mips/mips32/mips16/sub_n.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/mips32/mips16/submul_1.c b/sysdeps/mips/mips32/mips16/submul_1.c deleted file mode 100644 index 44cadf5cc0..0000000000 --- a/sysdeps/mips/mips32/mips16/submul_1.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/mips32/sfp-machine.h b/sysdeps/mips/mips32/sfp-machine.h deleted file mode 100644 index 5215655029..0000000000 --- a/sysdeps/mips/mips32/sfp-machine.h +++ /dev/null @@ -1,80 +0,0 @@ -#define _FP_W_TYPE_SIZE 32 -#define _FP_W_TYPE unsigned long -#define _FP_WS_TYPE signed long -#define _FP_I_TYPE long - -#define _FP_MUL_MEAT_S(R,X,Y) \ - _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_D(R,X,Y) \ - _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_MUL_MEAT_DW_S(R,X,Y) \ - _FP_MUL_MEAT_DW_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_DW_D(R,X,Y) \ - _FP_MUL_MEAT_DW_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_DW_Q(R,X,Y) \ - _FP_MUL_MEAT_DW_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(S,R,X,Y) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) - -#ifdef __mips_nan2008 -# define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) -# define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 -# define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 -#else -# define _FP_NANFRAC_S (_FP_QNANBIT_S - 1) -# define _FP_NANFRAC_D (_FP_QNANBIT_D - 1), -1 -# define _FP_NANFRAC_Q (_FP_QNANBIT_Q - 1), -1, -1, -1 -#endif -#define _FP_NANSIGN_S 0 -#define _FP_NANSIGN_D 0 -#define _FP_NANSIGN_Q 0 - -#define _FP_KEEPNANFRACP 1 -#ifdef __mips_nan2008 -# define _FP_QNANNEGATEDP 0 -#else -# define _FP_QNANNEGATEDP 1 -#endif - -#ifdef __mips_nan2008 -/* NaN payloads should be preserved for NAN2008. */ -# define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do \ - { \ - R##_s = X##_s; \ - _FP_FRAC_COPY_##wc (R, X); \ - R##_c = FP_CLS_NAN; \ - } \ - while (0) -#else -/* From my experiments it seems X is chosen unless one of the - NaNs is sNaN, in which case the result is NANSIGN/NANFRAC. */ -# define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - if ((_FP_FRAC_HIGH_RAW_##fs(X) | \ - _FP_FRAC_HIGH_RAW_##fs(Y)) & _FP_QNANBIT_##fs) \ - { \ - R##_s = _FP_NANSIGN_##fs; \ - _FP_FRAC_SET_##wc(R,_FP_NANFRAC_##fs); \ - } \ - else \ - { \ - R##_s = X##_s; \ - _FP_FRAC_COPY_##wc(R,X); \ - } \ - R##_c = FP_CLS_NAN; \ - } while (0) -#endif - -#define FP_EX_INVALID (1 << 4) -#define FP_EX_DIVZERO (1 << 3) -#define FP_EX_OVERFLOW (1 << 2) -#define FP_EX_UNDERFLOW (1 << 1) -#define FP_EX_INEXACT (1 << 0) - -#define _FP_TININESS_AFTER_ROUNDING 1 diff --git a/sysdeps/mips/mips64/Implies b/sysdeps/mips/mips64/Implies deleted file mode 100644 index b476b8b298..0000000000 --- a/sysdeps/mips/mips64/Implies +++ /dev/null @@ -1,5 +0,0 @@ -# MIPS uses IEEE 754 floating point. -mips/ieee754 -ieee754/flt-32 -ieee754/dbl-64/wordsize-64 -ieee754/dbl-64 diff --git a/sysdeps/mips/mips64/Makefile b/sysdeps/mips/mips64/Makefile deleted file mode 100644 index ada13e8b70..0000000000 --- a/sysdeps/mips/mips64/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),math) -CPPFLAGS += -I../soft-fp -endif diff --git a/sysdeps/mips/mips64/Versions b/sysdeps/mips/mips64/Versions deleted file mode 100644 index 253a65f04e..0000000000 --- a/sysdeps/mips/mips64/Versions +++ /dev/null @@ -1,7 +0,0 @@ -libm { - GLIBC_2.1 { - # A generic bug got this omitted from other configurations' version - # sets, but we always had it. - exp2l; - } -} diff --git a/sysdeps/mips/mips64/__longjmp.c b/sysdeps/mips/mips64/__longjmp.c deleted file mode 100644 index 3f96e8e2d4..0000000000 --- a/sysdeps/mips/mips64/__longjmp.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe (brendan@zen.org). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -#ifndef __GNUC__ - #error This file uses GNU C extensions; you must compile with GCC. -#endif - -void -__longjmp (__jmp_buf env_arg, int val_arg) -{ - /* gcc 1.39.19 miscompiled the longjmp routine (as it did setjmp before - the hack around it); force it to use $a1 for the longjmp value. - Without this it saves $a1 in a register which gets clobbered - along the way. */ - register struct __jmp_buf_internal_tag *env asm ("a0"); - register int val asm ("a1"); -#ifdef CHECK_SP - register long long sp asm ("$29"); - CHECK_SP (env[0].__sp, sp, long long); -#endif - -#ifdef __mips_hard_float - /* Pull back the floating point callee-saved registers. */ -#if _MIPS_SIM == _ABI64 - asm volatile ("l.d $f24, %0" : : "m" (env[0].__fpregs[0])); - asm volatile ("l.d $f25, %0" : : "m" (env[0].__fpregs[1])); - asm volatile ("l.d $f26, %0" : : "m" (env[0].__fpregs[2])); - asm volatile ("l.d $f27, %0" : : "m" (env[0].__fpregs[3])); - asm volatile ("l.d $f28, %0" : : "m" (env[0].__fpregs[4])); - asm volatile ("l.d $f29, %0" : : "m" (env[0].__fpregs[5])); - asm volatile ("l.d $f30, %0" : : "m" (env[0].__fpregs[6])); - asm volatile ("l.d $f31, %0" : : "m" (env[0].__fpregs[7])); -#else - asm volatile ("l.d $f20, %0" : : "m" (env[0].__fpregs[0])); - asm volatile ("l.d $f22, %0" : : "m" (env[0].__fpregs[1])); - asm volatile ("l.d $f24, %0" : : "m" (env[0].__fpregs[2])); - asm volatile ("l.d $f26, %0" : : "m" (env[0].__fpregs[3])); - asm volatile ("l.d $f28, %0" : : "m" (env[0].__fpregs[4])); - asm volatile ("l.d $f30, %0" : : "m" (env[0].__fpregs[5])); -#endif -#endif - - /* Get the GP. */ - asm volatile ("ld $gp, %0" : : "m" (env[0].__gp)); - - /* Get the callee-saved registers. */ - asm volatile ("ld $16, %0" : : "m" (env[0].__regs[0])); - asm volatile ("ld $17, %0" : : "m" (env[0].__regs[1])); - asm volatile ("ld $18, %0" : : "m" (env[0].__regs[2])); - asm volatile ("ld $19, %0" : : "m" (env[0].__regs[3])); - asm volatile ("ld $20, %0" : : "m" (env[0].__regs[4])); - asm volatile ("ld $21, %0" : : "m" (env[0].__regs[5])); - asm volatile ("ld $22, %0" : : "m" (env[0].__regs[6])); - asm volatile ("ld $23, %0" : : "m" (env[0].__regs[7])); - - /* Get the PC. */ - asm volatile ("ld $31, %0" : : "m" (env[0].__pc)); - - - /* Restore the stack pointer and the FP. They have to be restored - last and in a single asm as gcc, depending on options used, may - use either of them to access env. */ - asm volatile ("ld $29, %0\n\t" - "ld $30, %1\n\t" : : "m" (env[0].__sp), "m" (env[0].__fp)); - -/* Give setjmp 1 if given a 0, or what they gave us if non-zero. */ - if (val == 0) - asm volatile ("dli $2, 1"); - else - asm volatile ("move $2, %0" : : "r" (val)); - - asm volatile ("j $31"); - - /* Avoid `volatile function does return' warnings. */ - for (;;); -} diff --git a/sysdeps/mips/mips64/add_n.S b/sysdeps/mips/mips64/add_n.S deleted file mode 100644 index 60033e3e3e..0000000000 --- a/sysdeps/mips/mips64/add_n.S +++ /dev/null @@ -1,125 +0,0 @@ -/* MIPS3 __mpn_add_n -- Add two limb vectors of the same length > 0 and - * store sum in a third limb vector. - * - * Copyright (C) 1995-2017 Free Software Foundation, Inc. - * - * This file is part of the GNU MP Library. - * - * The GNU MP Library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or (at your - * option) any later version. - * - * The GNU MP Library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with the GNU MP Library. If not, see - * . - */ - -#include -#include - -/* - * INPUT PARAMETERS - * res_ptr $4 - * s1_ptr $5 - * s2_ptr $6 - * size $7 - */ -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__mpn_add_n) -#ifdef __PIC__ - SETUP_GP /* ??? unused */ -#endif - .set noreorder - .set nomacro - - ld $10,0($5) - ld $11,0($6) - - daddiu $7,$7,-1 - and $9,$7,4-1 # number of limbs in first loop - beq $9,$0,L(L0) # if multiple of 4 limbs, skip first loop - move $2,$0 - - dsubu $7,$7,$9 - -L(Loop0): daddiu $9,$9,-1 - ld $12,8($5) - daddu $11,$11,$2 - ld $13,8($6) - sltu $8,$11,$2 - daddu $11,$10,$11 - sltu $2,$11,$10 - sd $11,0($4) - or $2,$2,$8 - - daddiu $5,$5,8 - daddiu $6,$6,8 - move $10,$12 - move $11,$13 - bne $9,$0,L(Loop0) - daddiu $4,$4,8 - -L(L0): beq $7,$0,L(Lend) - nop - -L(Loop): daddiu $7,$7,-4 - - ld $12,8($5) - daddu $11,$11,$2 - ld $13,8($6) - sltu $8,$11,$2 - daddu $11,$10,$11 - sltu $2,$11,$10 - sd $11,0($4) - or $2,$2,$8 - - ld $10,16($5) - daddu $13,$13,$2 - ld $11,16($6) - sltu $8,$13,$2 - daddu $13,$12,$13 - sltu $2,$13,$12 - sd $13,8($4) - or $2,$2,$8 - - ld $12,24($5) - daddu $11,$11,$2 - ld $13,24($6) - sltu $8,$11,$2 - daddu $11,$10,$11 - sltu $2,$11,$10 - sd $11,16($4) - or $2,$2,$8 - - ld $10,32($5) - daddu $13,$13,$2 - ld $11,32($6) - sltu $8,$13,$2 - daddu $13,$12,$13 - sltu $2,$13,$12 - sd $13,24($4) - or $2,$2,$8 - - daddiu $5,$5,32 - daddiu $6,$6,32 - - bne $7,$0,L(Loop) - daddiu $4,$4,32 - -L(Lend): daddu $11,$11,$2 - sltu $8,$11,$2 - daddu $11,$10,$11 - sltu $2,$11,$10 - sd $11,0($4) - j $31 - or $2,$2,$8 - -END (__mpn_add_n) diff --git a/sysdeps/mips/mips64/addmul_1.S b/sysdeps/mips/mips64/addmul_1.S deleted file mode 100644 index 9791a08a4d..0000000000 --- a/sysdeps/mips/mips64/addmul_1.S +++ /dev/null @@ -1,131 +0,0 @@ -/* MIPS3 __mpn_addmul_1 -- Multiply a limb vector with a single limb and - * add the product to a second limb vector. - * - * Copyright (C) 1992-2017 Free Software Foundation, Inc. - * - * This file is part of the GNU MP Library. - * - * The GNU MP Library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or (at your - * option) any later version. - * - * The GNU MP Library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with the GNU MP Library. If not, see . - */ - -#include -#include - -/* INPUT PARAMETERS - * res_ptr $4 - * s1_ptr $5 - * size $6 - * s2_limb $7 - */ - -#ifdef PIC - .option pic2 -#endif -ENTRY (__mpn_addmul_1) -#ifdef PIC - SETUP_GP /* ??? unused */ -#endif - .set noreorder - .set nomacro - - # warm up phase 0 - ld $8,0($5) - - # warm up phase 1 - daddiu $5,$5,8 -#if __mips_isa_rev < 6 - dmultu $8,$7 -#else - dmulu $11,$8,$7 - dmuhu $12,$8,$7 -#endif - - daddiu $6,$6,-1 - beq $6,$0,L(LC0) - move $2,$0 # zero cy2 - - daddiu $6,$6,-1 - beq $6,$0,L(LC1) - ld $8,0($5) # load new s1 limb as early as possible - -L(Loop): ld $10,0($4) -#if __mips_isa_rev < 6 - mflo $3 - mfhi $9 -#else - move $3,$11 - move $9,$12 -#endif - daddiu $5,$5,8 - daddu $3,$3,$2 # add old carry limb to low product limb -#if __mips_isa_rev < 6 - dmultu $8,$7 -#else - dmulu $11,$8,$7 - dmuhu $12,$8,$7 -#endif - ld $8,0($5) # load new s1 limb as early as possible - daddiu $6,$6,-1 # decrement loop counter - sltu $2,$3,$2 # carry from previous addition -> $2 - daddu $3,$10,$3 - sltu $10,$3,$10 - daddu $2,$2,$10 - sd $3,0($4) - daddiu $4,$4,8 - bne $6,$0,L(Loop) - daddu $2,$9,$2 # add high product limb and carry from addition - - # cool down phase 1 -L(LC1): ld $10,0($4) -#if __mips_isa_rev < 6 - mflo $3 - mfhi $9 -#else - move $3,$11 - move $9,$12 -#endif - daddu $3,$3,$2 - sltu $2,$3,$2 -#if __mips_isa_rev < 6 - dmultu $8,$7 -#else - dmulu $11,$8,$7 - dmuhu $12,$8,$7 -#endif - daddu $3,$10,$3 - sltu $10,$3,$10 - daddu $2,$2,$10 - sd $3,0($4) - daddiu $4,$4,8 - daddu $2,$9,$2 # add high product limb and carry from addition - - # cool down phase 0 -L(LC0): ld $10,0($4) -#if __mips_isa_rev < 6 - mflo $3 - mfhi $9 -#else - move $3,$11 - move $9,$12 -#endif - daddu $3,$3,$2 - sltu $2,$3,$2 - daddu $3,$10,$3 - sltu $10,$3,$10 - daddu $2,$2,$10 - sd $3,0($4) - j $31 - daddu $2,$9,$2 # add high product limb and carry from addition - -END (__mpn_addmul_1) diff --git a/sysdeps/mips/mips64/bsd-_setjmp.S b/sysdeps/mips/mips64/bsd-_setjmp.S deleted file mode 100644 index a8f27d2de0..0000000000 --- a/sysdeps/mips/mips64/bsd-_setjmp.S +++ /dev/null @@ -1,47 +0,0 @@ -/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. MIPS64 version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 0)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include -#include -#include - -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (_setjmp) -#ifdef __PIC__ - SETUP_GP -#endif - SETUP_GP64_REG (v0, C_SYMBOL_NAME (_setjmp)) - PTR_LA t9, C_SYMBOL_NAME (__sigsetjmp) -#if _MIPS_SIM == _ABIO32 - nop -#endif - RESTORE_GP64_REG - move a1, zero /* Pass a second argument of zero. */ -#ifdef __PIC__ - jr t9 -#else - j C_SYMBOL_NAME (__sigsetjmp) -#endif -END (_setjmp) -libc_hidden_def (_setjmp) diff --git a/sysdeps/mips/mips64/bsd-setjmp.S b/sysdeps/mips/mips64/bsd-setjmp.S deleted file mode 100644 index aeac200f70..0000000000 --- a/sysdeps/mips/mips64/bsd-setjmp.S +++ /dev/null @@ -1,46 +0,0 @@ -/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. MIPS64 version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include -#include -#include - -#ifdef PIC - .option pic2 -#endif -ENTRY (setjmp) -#ifdef __PIC__ - SETUP_GP -#endif - SETUP_GP64_REG (v0, C_SYMBOL_NAME (setjmp)) - PTR_LA t9, C_SYMBOL_NAME (__sigsetjmp) -#if _MIPS_SIM == _ABIO32 - nop -#endif - RESTORE_GP64_REG - dli a1, 1 /* Pass a second argument of one. */ -#ifdef __PIC__ - jr t9 -#else - j C_SYMBOL_NAME (__sigsetjmp) -#endif -END (setjmp) diff --git a/sysdeps/mips/mips64/e_sqrtl.c b/sysdeps/mips/mips64/e_sqrtl.c deleted file mode 100644 index 3f0829e1b2..0000000000 --- a/sysdeps/mips/mips64/e_sqrtl.c +++ /dev/null @@ -1,39 +0,0 @@ -/* long double square root in software floating-point emulation. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -long double -__ieee754_sqrtl (const long double a) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(C); - long double c; - - FP_INIT_ROUNDMODE; - FP_UNPACK_Q(A, a); - FP_SQRT_Q(C, A); - FP_PACK_Q(c, C); - FP_HANDLE_EXCEPTIONS; - return c; -} -strong_alias (__ieee754_sqrtl, __sqrtl_finite) diff --git a/sysdeps/mips/mips64/gmp-mparam.h b/sysdeps/mips/mips64/gmp-mparam.h deleted file mode 100644 index f164ce999e..0000000000 --- a/sysdeps/mips/mips64/gmp-mparam.h +++ /dev/null @@ -1,30 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see . */ - -#if defined __GMP_H__ && ! defined _LONG_LONG_LIMB -#error "Included too late for _LONG_LONG_LIMB to take effect" -#endif - -#define _LONG_LONG_LIMB -#define BITS_PER_MP_LIMB 64 -#define BYTES_PER_MP_LIMB 8 -#define BITS_PER_LONGINT __WORDSIZE -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 diff --git a/sysdeps/mips/mips64/libm-test-ulps b/sysdeps/mips/mips64/libm-test-ulps deleted file mode 100644 index b3b0140abc..0000000000 --- a/sysdeps/mips/mips64/libm-test-ulps +++ /dev/null @@ -1,2270 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "acosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "acosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "acosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "asin": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "asinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "asinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "asinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "atan": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atan2_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "atan2_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "atanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "atanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "cabs": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacos_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cacos_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "cacos_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cacos_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "cacos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cacos_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 -ildouble: 7 -ldouble: 7 - -Function: Real part of "cacosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cacosh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "cacosh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cacosh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "carg": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "carg_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "carg_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "carg_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casin": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "casin_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "casin_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 -ildouble: 7 -ldouble: 7 - -Function: Real part of "casinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casinh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "casinh_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casinh_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "casinh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catan_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catan_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catan_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catanh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catanh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catanh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cbrt": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_upward": -double: 5 -float: 1 -idouble: 5 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccosh_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cexp_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog10": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog10_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog10_downward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog10_towardzero": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_upward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog10_upward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog_towardzero": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "cos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "cos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 2 - -Function: "cosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 2 - -Function: "cosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 3 - -Function: Real part of "cpow": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cpow_downward": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cpow_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_towardzero": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cpow_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_upward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cpow_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csin": -ildouble: 1 -ldouble: 1 - -Function: Real part of "csin_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csinh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csinh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csinh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csinh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt_upward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctan_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctan_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erf_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erfc": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "erfc_downward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 -ildouble: 5 -ldouble: 5 - -Function: "erfc_towardzero": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "erfc_upward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 -ildouble: 5 -ldouble: 5 - -Function: "exp": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp10": -double: 2 -idouble: 2 -ildouble: 2 -ldouble: 2 - -Function: "exp10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp_downward": -double: 1 -idouble: 1 - -Function: "exp_towardzero": -double: 1 -idouble: 1 - -Function: "exp_upward": -double: 1 -idouble: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "expm1_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "expm1_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "gamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "gamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: "gamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "gamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "hypot": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j0_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "j0_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j0_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_upward": -double: 3 -float: 5 -idouble: 3 -ifloat: 5 -ildouble: 3 -ldouble: 3 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "jn_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "jn_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "jn_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 7 -ldouble: 7 - -Function: "lgamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "lgamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: "lgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "lgamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "log": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "log10_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log1p": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log1p_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "log1p_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "log1p_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log2": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log2_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "log2_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log2_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "log_downward": -float: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log_towardzero": -float: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "pow": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow10": -double: 2 -idouble: 2 -ildouble: 2 -ldouble: 2 - -Function: "pow10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sin": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sincos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sincos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sincos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sincos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "sinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "sinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "tan": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "tan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "tanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "tanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "tanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "tgamma": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "tgamma_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "y0_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "y0_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "y0_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "y1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_upward": -double: 7 -float: 2 -idouble: 7 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "yn_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -# end of automatic generation diff --git a/sysdeps/mips/mips64/libm-test-ulps-name b/sysdeps/mips/mips64/libm-test-ulps-name deleted file mode 100644 index 916e314f86..0000000000 --- a/sysdeps/mips/mips64/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -MIPS 64-bit diff --git a/sysdeps/mips/mips64/lshift.S b/sysdeps/mips/mips64/lshift.S deleted file mode 100644 index 7f2e5669a5..0000000000 --- a/sysdeps/mips/mips64/lshift.S +++ /dev/null @@ -1,100 +0,0 @@ -/* MIPS3 __mpn_lshift -- - * - * Copyright (C) 1995-2017 Free Software Foundation, Inc. - * - * This file is part of the GNU MP Library. - * - * The GNU MP Library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or (at your - * option) any later version. - * - * The GNU MP Library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with the GNU MP Library. If not, see - * . - */ - -#include -#include - -/* INPUT PARAMETERS - * res_ptr $4 - * src_ptr $5 - * size $6 - * cnt $7 - */ - -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__mpn_lshift) -#ifdef __PIC__ - SETUP_GP /* ??? unused */ -#endif - .set noreorder - .set nomacro - - dsll $2,$6,3 - daddu $5,$5,$2 # make r5 point at end of src - ld $10,-8($5) # load first limb - dsubu $13,$0,$7 - daddu $4,$4,$2 # make r4 point at end of res - daddiu $6,$6,-1 - and $9,$6,4-1 # number of limbs in first loop - beq $9,$0,L(L0) # if multiple of 4 limbs, skip first loop - dsrl $2,$10,$13 # compute function result - - dsubu $6,$6,$9 - -L(Loop0): ld $3,-16($5) - daddiu $4,$4,-8 - daddiu $5,$5,-8 - daddiu $9,$9,-1 - dsll $11,$10,$7 - dsrl $12,$3,$13 - move $10,$3 - or $8,$11,$12 - bne $9,$0,L(Loop0) - sd $8,0($4) - -L(L0): beq $6,$0,L(Lend) - nop - -L(Loop): ld $3,-16($5) - daddiu $4,$4,-32 - daddiu $6,$6,-4 - dsll $11,$10,$7 - dsrl $12,$3,$13 - - ld $10,-24($5) - dsll $14,$3,$7 - or $8,$11,$12 - sd $8,24($4) - dsrl $9,$10,$13 - - ld $3,-32($5) - dsll $11,$10,$7 - or $8,$14,$9 - sd $8,16($4) - dsrl $12,$3,$13 - - ld $10,-40($5) - dsll $14,$3,$7 - or $8,$11,$12 - sd $8,8($4) - dsrl $9,$10,$13 - - daddiu $5,$5,-32 - or $8,$14,$9 - bgtz $6,L(Loop) - sd $8,0($4) - -L(Lend): dsll $8,$10,$7 - j $31 - sd $8,-8($4) -END (__mpn_lshift) diff --git a/sysdeps/mips/mips64/mul_1.S b/sysdeps/mips/mips64/mul_1.S deleted file mode 100644 index 9ceb683d08..0000000000 --- a/sysdeps/mips/mips64/mul_1.S +++ /dev/null @@ -1,120 +0,0 @@ -/* MIPS3 __mpn_mul_1 -- Multiply a limb vector with a single limb and - * store the product in a second limb vector. - * - * Copyright (C) 1992-2017 Free Software Foundation, Inc. - * - * This file is part of the GNU MP Library. - * - * The GNU MP Library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or (at your - * option) any later version. - * - * The GNU MP Library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with the GNU MP Library. If not, see - * . - */ - -#include -#include - -/* INPUT PARAMETERS - * res_ptr $4 - * s1_ptr $5 - * size $6 - * s2_limb $7 - */ - -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__mpn_mul_1) -#ifdef __PIC__ - SETUP_GP /* ??? unused */ -#endif - .set noreorder - .set nomacro - - # warm up phase 0 - ld $8,0($5) - - # warm up phase 1 - daddiu $5,$5,8 -#if __mips_isa_rev < 6 - dmultu $8,$7 -#else - dmulu $11,$8,$7 - dmuhu $12,$8,$7 -#endif - - daddiu $6,$6,-1 - beq $6,$0,L(LC0) - move $2,$0 # zero cy2 - - daddiu $6,$6,-1 - beq $6,$0,L(LC1) - ld $8,0($5) # load new s1 limb as early as possible - -#if __mips_isa_rev < 6 -L(Loop): mflo $10 - mfhi $9 -#else -L(Loop): move $10,$11 - move $9,$12 -#endif - daddiu $5,$5,8 - daddu $10,$10,$2 # add old carry limb to low product limb -#if __mips_isa_rev < 6 - dmultu $8,$7 -#else - dmulu $11,$8,$7 - dmuhu $12,$8,$7 -#endif - ld $8,0($5) # load new s1 limb as early as possible - daddiu $6,$6,-1 # decrement loop counter - sltu $2,$10,$2 # carry from previous addition -> $2 - sd $10,0($4) - daddiu $4,$4,8 - bne $6,$0,L(Loop) - daddu $2,$9,$2 # add high product limb and carry from addition - - # cool down phase 1 -#if __mips_isa_rev < 6 -L(LC1): mflo $10 - mfhi $9 -#else -L(LC1): move $10,$11 - move $9,$12 -#endif - daddu $10,$10,$2 - sltu $2,$10,$2 -#if __mips_isa_rev < 6 - dmultu $8,$7 -#else - dmulu $11,$8,$7 - dmuhu $12,$8,$7 -#endif - sd $10,0($4) - daddiu $4,$4,8 - daddu $2,$9,$2 # add high product limb and carry from addition - - # cool down phase 0 -#if __mips_isa_rev < 6 -L(LC0): mflo $10 - mfhi $9 -#else -L(LC0): move $10,$11 - move $9,$12 -#endif - daddu $10,$10,$2 - sltu $2,$10,$2 - sd $10,0($4) - j $31 - daddu $2,$9,$2 # add high product limb and carry from addition - -END (__mpn_mul_1) diff --git a/sysdeps/mips/mips64/n32/Implies b/sysdeps/mips/mips64/n32/Implies deleted file mode 100644 index e5d8a0e22f..0000000000 --- a/sysdeps/mips/mips64/n32/Implies +++ /dev/null @@ -1,5 +0,0 @@ -mips/ieee754 -ieee754/ldbl-128 -mips/mips64 -mips -wordsize-32 diff --git a/sysdeps/mips/mips64/n32/Makefile b/sysdeps/mips/mips64/n32/Makefile deleted file mode 100644 index a84d2a51bd..0000000000 --- a/sysdeps/mips/mips64/n32/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# `long double' is a distinct type we support. -long-double-fcts = yes - -ifeq ($(filter -mabi=n32,$(CC)),) -CC += -mabi=n32 -endif diff --git a/sysdeps/mips/mips64/n32/_itoa.h b/sysdeps/mips/mips64/n32/_itoa.h deleted file mode 100644 index 363cdfe9ac..0000000000 --- a/sysdeps/mips/mips64/n32/_itoa.h +++ /dev/null @@ -1,4 +0,0 @@ -/* MIPS n32 uses 64-bit _itoa_word and _itoa is mapped to _itoa_word. */ -#define _ITOA_NEEDED 0 -#define _ITOA_WORD_TYPE unsigned long long int -#include_next <_itoa.h> diff --git a/sysdeps/mips/mips64/n32/crti.S b/sysdeps/mips/mips64/n32/crti.S deleted file mode 100644 index a9e7579e75..0000000000 --- a/sysdeps/mips/mips64/n32/crti.S +++ /dev/null @@ -1,100 +0,0 @@ -/* Special .init and .fini section support for MIPS (n32). - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include - -#ifdef __mips_micromips -# define JALR_RELOC R_MICROMIPS_JALR -#else -# define JALR_RELOC R_MIPS_JALR -#endif - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - - .set nomips16 - - .section .init,"ax",@progbits - .p2align 2 - .globl _init - .type _init, @function -_init: - addiu $sp,$sp,-16 - sd $28,0($sp) - lui $28,%hi(%neg(%gp_rel(_init))) - addu $28,$28,$25 - sd $31,8($sp) - addiu $28,$28,%lo(%neg(%gp_rel(_init))) -#if PREINIT_FUNCTION_WEAK - lw $2,%got_disp(PREINIT_FUNCTION)($28) - beq $2,$0,.Lno_weak_fn - lw $25,%call16(PREINIT_FUNCTION)($28) - .reloc 1f,JALR_RELOC,PREINIT_FUNCTION -1: jalr $25 -.Lno_weak_fn: - .insn -#else - lw $25,%got_disp(PREINIT_FUNCTION)($28) - .reloc 1f,JALR_RELOC,PREINIT_FUNCTION -1: jalr $25 -#endif - - .section .fini,"ax",@progbits - .p2align 2 - .globl _fini - .type _fini, @function -_fini: - addiu $sp,$sp,-16 - sd $28,0($sp) - lui $28,%hi(%neg(%gp_rel(_fini))) - addu $28,$28,$25 - sd $31,8($sp) - addiu $28,$28,%lo(%neg(%gp_rel(_fini))) diff --git a/sysdeps/mips/mips64/n32/crtn.S b/sysdeps/mips/mips64/n32/crtn.S deleted file mode 100644 index 8e0524ac4d..0000000000 --- a/sysdeps/mips/mips64/n32/crtn.S +++ /dev/null @@ -1,59 +0,0 @@ -/* Special .init and .fini section support for MIPS (n32). - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .set nomips16 - - .section .init,"ax",@progbits - ld $31,8($sp) - ld $28,0($sp) - .set noreorder - .set nomacro - j $31 - addiu $sp,$sp,16 - .set macro - .set reorder - - .section .fini,"ax",@progbits - ld $31,8($sp) - ld $28,0($sp) - .set noreorder - .set nomacro - j $31 - addiu $sp,$sp,16 - .set macro - .set reorder diff --git a/sysdeps/mips/mips64/n32/fpu/e_sqrt.c b/sysdeps/mips/mips64/n32/fpu/e_sqrt.c deleted file mode 100644 index 81f4e77697..0000000000 --- a/sysdeps/mips/mips64/n32/fpu/e_sqrt.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/mips64/n32/fpu/e_sqrtf.c b/sysdeps/mips/mips64/n32/fpu/e_sqrtf.c deleted file mode 100644 index fb0700d45c..0000000000 --- a/sysdeps/mips/mips64/n32/fpu/e_sqrtf.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/mips64/n64/Implies b/sysdeps/mips/mips64/n64/Implies deleted file mode 100644 index 25ad0cf458..0000000000 --- a/sysdeps/mips/mips64/n64/Implies +++ /dev/null @@ -1,5 +0,0 @@ -mips/ieee754 -ieee754/ldbl-128 -mips/mips64 -mips -wordsize-64 diff --git a/sysdeps/mips/mips64/n64/Makefile b/sysdeps/mips/mips64/n64/Makefile deleted file mode 100644 index a823f32b53..0000000000 --- a/sysdeps/mips/mips64/n64/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# `long double' is a distinct type we support. -long-double-fcts = yes - -ifeq ($(filter -mabi=64,$(CC)),) -CC += -mabi=64 -endif diff --git a/sysdeps/mips/mips64/n64/crti.S b/sysdeps/mips/mips64/n64/crti.S deleted file mode 100644 index b11ea2ccb5..0000000000 --- a/sysdeps/mips/mips64/n64/crti.S +++ /dev/null @@ -1,100 +0,0 @@ -/* Special .init and .fini section support for MIPS (n64). - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include - -#ifdef __mips_micromips -# define JALR_RELOC R_MICROMIPS_JALR -#else -# define JALR_RELOC R_MIPS_JALR -#endif - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - - .set nomips16 - - .section .init,"ax",@progbits - .p2align 2 - .globl _init - .type _init, @function -_init: - daddiu $sp,$sp,-16 - sd $28,0($sp) - lui $28,%hi(%neg(%gp_rel(_init))) - daddu $28,$28,$25 - sd $31,8($sp) - daddiu $28,$28,%lo(%neg(%gp_rel(_init))) -#if PREINIT_FUNCTION_WEAK - ld $2,%got_disp(PREINIT_FUNCTION)($28) - beq $2,$0,.Lno_weak_fn - ld $25,%call16(PREINIT_FUNCTION)($28) - .reloc 1f,JALR_RELOC,PREINIT_FUNCTION -1: jalr $25 -.Lno_weak_fn: - .insn -#else - ld $25,%got_disp(PREINIT_FUNCTION)($28) - .reloc 1f,JALR_RELOC,PREINIT_FUNCTION -1: jalr $25 -#endif - - .section .fini,"ax",@progbits - .p2align 2 - .globl _fini - .type _fini, @function -_fini: - daddiu $sp,$sp,-16 - sd $28,0($sp) - lui $28,%hi(%neg(%gp_rel(_fini))) - daddu $28,$28,$25 - sd $31,8($sp) - daddiu $28,$28,%lo(%neg(%gp_rel(_fini))) diff --git a/sysdeps/mips/mips64/n64/crtn.S b/sysdeps/mips/mips64/n64/crtn.S deleted file mode 100644 index d3fce8c5c8..0000000000 --- a/sysdeps/mips/mips64/n64/crtn.S +++ /dev/null @@ -1,59 +0,0 @@ -/* Special .init and .fini section support for MIPS (n64). - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .set nomips16 - - .section .init,"ax",@progbits - ld $31,8($sp) - ld $28,0($sp) - .set noreorder - .set nomacro - j $31 - daddiu $sp,$sp,16 - .set macro - .set reorder - - .section .fini,"ax",@progbits - ld $31,8($sp) - ld $28,0($sp) - .set noreorder - .set nomacro - j $31 - daddiu $sp,$sp,16 - .set macro - .set reorder diff --git a/sysdeps/mips/mips64/n64/fpu/e_sqrt.c b/sysdeps/mips/mips64/n64/fpu/e_sqrt.c deleted file mode 100644 index 81f4e77697..0000000000 --- a/sysdeps/mips/mips64/n64/fpu/e_sqrt.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/mips64/n64/fpu/e_sqrtf.c b/sysdeps/mips/mips64/n64/fpu/e_sqrtf.c deleted file mode 100644 index fb0700d45c..0000000000 --- a/sysdeps/mips/mips64/n64/fpu/e_sqrtf.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/mips/mips64/rshift.S b/sysdeps/mips/mips64/rshift.S deleted file mode 100644 index 8c13abcadc..0000000000 --- a/sysdeps/mips/mips64/rshift.S +++ /dev/null @@ -1,97 +0,0 @@ -/* MIPS3 __mpn_rshift -- - * - * Copyright (C) 1995-2017 Free Software Foundation, Inc. - * - * This file is part of the GNU MP Library. - * - * The GNU MP Library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or (at your - * option) any later version. - * - * The GNU MP Library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with the GNU MP Library. If not, see - * . - */ - -#include -#include - -/* INPUT PARAMETERS - * res_ptr $4 - * src_ptr $5 - * size $6 - * cnt $7 - */ - -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__mpn_rshift) -#ifdef __PIC__ - SETUP_GP /* ??? unused */ -#endif - .set noreorder - .set nomacro - - ld $10,0($5) # load first limb - dsubu $13,$0,$7 - daddiu $6,$6,-1 - and $9,$6,4-1 # number of limbs in first loop - beq $9,$0,L(L0) # if multiple of 4 limbs, skip first loop - dsll $2,$10,$13 # compute function result - - dsubu $6,$6,$9 - -L(Loop0): ld $3,8($5) - daddiu $4,$4,8 - daddiu $5,$5,8 - daddiu $9,$9,-1 - dsrl $11,$10,$7 - dsll $12,$3,$13 - move $10,$3 - or $8,$11,$12 - bne $9,$0,L(Loop0) - sd $8,-8($4) - -L(L0): beq $6,$0,L(Lend) - nop - -L(Loop): ld $3,8($5) - daddiu $4,$4,32 - daddiu $6,$6,-4 - dsrl $11,$10,$7 - dsll $12,$3,$13 - - ld $10,16($5) - dsrl $14,$3,$7 - or $8,$11,$12 - sd $8,-32($4) - dsll $9,$10,$13 - - ld $3,24($5) - dsrl $11,$10,$7 - or $8,$14,$9 - sd $8,-24($4) - dsll $12,$3,$13 - - ld $10,32($5) - dsrl $14,$3,$7 - or $8,$11,$12 - sd $8,-16($4) - dsll $9,$10,$13 - - daddiu $5,$5,32 - or $8,$14,$9 - bgtz $6,L(Loop) - sd $8,-8($4) - -L(Lend): dsrl $8,$10,$7 - j $31 - sd $8,0($4) -END (__mpn_rshift) diff --git a/sysdeps/mips/mips64/setjmp.S b/sysdeps/mips/mips64/setjmp.S deleted file mode 100644 index 3e4120e1ea..0000000000 --- a/sysdeps/mips/mips64/setjmp.S +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* The function __sigsetjmp_aux saves all the registers, but it can't - reliably access the stack or frame pointers, so we pass them in as - extra arguments. */ -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__sigsetjmp) -#ifdef __PIC__ - SETUP_GP -#endif - SETUP_GP64_REG (v0, C_SYMBOL_NAME (__sigsetjmp)) - move a2, sp - move a3, fp - PTR_LA t9, __sigsetjmp_aux -#if _MIPS_SIM == _ABIO32 - nop -#endif - RESTORE_GP64_REG -#if _MIPS_SIM != _ABIO32 - move a4, gp -#endif - jr t9 -END (__sigsetjmp) -hidden_def (__sigsetjmp) diff --git a/sysdeps/mips/mips64/setjmp_aux.c b/sysdeps/mips/mips64/setjmp_aux.c deleted file mode 100644 index b43c36a7d5..0000000000 --- a/sysdeps/mips/mips64/setjmp_aux.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe (brendan@zen.org). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* This function is only called via the assembly language routine - __sigsetjmp, which arranges to pass in the stack pointer and the frame - pointer. We do things this way because it's difficult to reliably - access them in C. */ - -int -__sigsetjmp_aux (jmp_buf env, int savemask, long long sp, long long fp, - long long gp) -{ -#ifdef __mips_hard_float - /* Store the floating point callee-saved registers... */ -#if _MIPS_SIM == _ABI64 - asm volatile ("s.d $f24, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[0])); - asm volatile ("s.d $f25, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[1])); - asm volatile ("s.d $f26, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[2])); - asm volatile ("s.d $f27, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[3])); - asm volatile ("s.d $f28, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[4])); - asm volatile ("s.d $f29, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[5])); - asm volatile ("s.d $f30, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[6])); - asm volatile ("s.d $f31, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[7])); -#else - asm volatile ("s.d $f20, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[0])); - asm volatile ("s.d $f22, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[1])); - asm volatile ("s.d $f24, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[2])); - asm volatile ("s.d $f26, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[3])); - asm volatile ("s.d $f28, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[4])); - asm volatile ("s.d $f30, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[5])); -#endif -#endif - - /* .. and the PC; */ - asm volatile ("sd $31, %0" : : "m" (env[0].__jmpbuf[0].__pc)); - - /* .. and the stack pointer; */ - env[0].__jmpbuf[0].__sp = sp; - - /* .. and the FP; it'll be in s8. */ - env[0].__jmpbuf[0].__fp = fp; - - /* .. and the GP; */ - env[0].__jmpbuf[0].__gp = gp; - - /* .. and the callee-saved registers; */ - asm volatile ("sd $16, %0" : : "m" (env[0].__jmpbuf[0].__regs[0])); - asm volatile ("sd $17, %0" : : "m" (env[0].__jmpbuf[0].__regs[1])); - asm volatile ("sd $18, %0" : : "m" (env[0].__jmpbuf[0].__regs[2])); - asm volatile ("sd $19, %0" : : "m" (env[0].__jmpbuf[0].__regs[3])); - asm volatile ("sd $20, %0" : : "m" (env[0].__jmpbuf[0].__regs[4])); - asm volatile ("sd $21, %0" : : "m" (env[0].__jmpbuf[0].__regs[5])); - asm volatile ("sd $22, %0" : : "m" (env[0].__jmpbuf[0].__regs[6])); - asm volatile ("sd $23, %0" : : "m" (env[0].__jmpbuf[0].__regs[7])); - - /* Save the signal mask if requested. */ - return __sigjmp_save (env, savemask); -} diff --git a/sysdeps/mips/mips64/sfp-machine.h b/sysdeps/mips/mips64/sfp-machine.h deleted file mode 100644 index 35cc4ddeb1..0000000000 --- a/sysdeps/mips/mips64/sfp-machine.h +++ /dev/null @@ -1,108 +0,0 @@ -#include -#include - -#define _FP_W_TYPE_SIZE 64 -#define _FP_W_TYPE unsigned long long -#define _FP_WS_TYPE signed long long -#define _FP_I_TYPE long long - -#define _FP_MUL_MEAT_S(R,X,Y) \ - _FP_MUL_MEAT_1_imm(_FP_WFRACBITS_S,R,X,Y) -#define _FP_MUL_MEAT_D(R,X,Y) \ - _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_2_wide_3mul(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_MUL_MEAT_DW_S(R,X,Y) \ - _FP_MUL_MEAT_DW_1_imm(_FP_WFRACBITS_S,R,X,Y) -#define _FP_MUL_MEAT_DW_D(R,X,Y) \ - _FP_MUL_MEAT_DW_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_DW_Q(R,X,Y) \ - _FP_MUL_MEAT_DW_2_wide_3mul(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y) -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) - -#ifdef __mips_nan2008 -# define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) -# define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1) -# define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1 -#else -# define _FP_NANFRAC_S (_FP_QNANBIT_S - 1) -# define _FP_NANFRAC_D (_FP_QNANBIT_D - 1) -# define _FP_NANFRAC_Q (_FP_QNANBIT_Q - 1), -1 -#endif -#define _FP_NANSIGN_S 0 -#define _FP_NANSIGN_D 0 -#define _FP_NANSIGN_Q 0 - -#define _FP_KEEPNANFRACP 1 -#ifdef __mips_nan2008 -# define _FP_QNANNEGATEDP 0 -#else -# define _FP_QNANNEGATEDP 1 -#endif - -#ifdef __mips_nan2008 -/* NaN payloads should be preserved for NAN2008. */ -# define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do \ - { \ - R##_s = X##_s; \ - _FP_FRAC_COPY_##wc (R, X); \ - R##_c = FP_CLS_NAN; \ - } \ - while (0) -#else -/* From my experiments it seems X is chosen unless one of the - NaNs is sNaN, in which case the result is NANSIGN/NANFRAC. */ -# define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - if ((_FP_FRAC_HIGH_RAW_##fs(X) | \ - _FP_FRAC_HIGH_RAW_##fs(Y)) & _FP_QNANBIT_##fs) \ - { \ - R##_s = _FP_NANSIGN_##fs; \ - _FP_FRAC_SET_##wc(R,_FP_NANFRAC_##fs); \ - } \ - else \ - { \ - R##_s = X##_s; \ - _FP_FRAC_COPY_##wc(R,X); \ - } \ - R##_c = FP_CLS_NAN; \ - } while (0) -#endif - -#define _FP_DECL_EX fpu_control_t _fcw - -#define FP_ROUNDMODE (_fcw & 0x3) - -#define FP_RND_NEAREST FE_TONEAREST -#define FP_RND_ZERO FE_TOWARDZERO -#define FP_RND_PINF FE_UPWARD -#define FP_RND_MINF FE_DOWNWARD - -#define FP_EX_INVALID FE_INVALID -#define FP_EX_OVERFLOW FE_OVERFLOW -#define FP_EX_UNDERFLOW FE_UNDERFLOW -#define FP_EX_DIVZERO FE_DIVBYZERO -#define FP_EX_INEXACT FE_INEXACT - -#define _FP_TININESS_AFTER_ROUNDING 1 - -#ifdef __mips_hard_float -#define FP_INIT_ROUNDMODE \ -do { \ - _FPU_GETCW (_fcw); \ -} while (0) - -#define FP_HANDLE_EXCEPTIONS \ -do { \ - if (__builtin_expect (_fex, 0)) \ - _FPU_SETCW (_fcw | _fex | (_fex << 10)); \ -} while (0) -#define FP_TRAPPING_EXCEPTIONS ((_fcw >> 5) & 0x7c) -#else -#define FP_INIT_ROUNDMODE _fcw = FP_RND_NEAREST -#endif diff --git a/sysdeps/mips/mips64/sub_n.S b/sysdeps/mips/mips64/sub_n.S deleted file mode 100644 index fe42764724..0000000000 --- a/sysdeps/mips/mips64/sub_n.S +++ /dev/null @@ -1,125 +0,0 @@ -/* MIPS3 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and - * store difference in a third limb vector. - * - * Copyright (C) 1995-2017 Free Software Foundation, Inc. - * - * This file is part of the GNU MP Library. - * - * The GNU MP Library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or (at your - * option) any later version. - * - * The GNU MP Library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with the GNU MP Library. If not, see - * . - */ - -#include -#include - -/* INPUT PARAMETERS - * res_ptr $4 - * s1_ptr $5 - * s2_ptr $6 - * size $7 - */ - -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__mpn_sub_n) -#ifdef __PIC__ - SETUP_GP /* ??? unused */ -#endif - .set noreorder - .set nomacro - - ld $10,0($5) - ld $11,0($6) - - daddiu $7,$7,-1 - and $9,$7,4-1 # number of limbs in first loop - beq $9,$0,L(L0) # if multiple of 4 limbs, skip first loop - move $2,$0 - - dsubu $7,$7,$9 - -L(Loop0): daddiu $9,$9,-1 - ld $12,8($5) - daddu $11,$11,$2 - ld $13,8($6) - sltu $8,$11,$2 - dsubu $11,$10,$11 - sltu $2,$10,$11 - sd $11,0($4) - or $2,$2,$8 - - daddiu $5,$5,8 - daddiu $6,$6,8 - move $10,$12 - move $11,$13 - bne $9,$0,L(Loop0) - daddiu $4,$4,8 - -L(L0): beq $7,$0,L(Lend) - nop - -L(Loop): daddiu $7,$7,-4 - - ld $12,8($5) - daddu $11,$11,$2 - ld $13,8($6) - sltu $8,$11,$2 - dsubu $11,$10,$11 - sltu $2,$10,$11 - sd $11,0($4) - or $2,$2,$8 - - ld $10,16($5) - daddu $13,$13,$2 - ld $11,16($6) - sltu $8,$13,$2 - dsubu $13,$12,$13 - sltu $2,$12,$13 - sd $13,8($4) - or $2,$2,$8 - - ld $12,24($5) - daddu $11,$11,$2 - ld $13,24($6) - sltu $8,$11,$2 - dsubu $11,$10,$11 - sltu $2,$10,$11 - sd $11,16($4) - or $2,$2,$8 - - ld $10,32($5) - daddu $13,$13,$2 - ld $11,32($6) - sltu $8,$13,$2 - dsubu $13,$12,$13 - sltu $2,$12,$13 - sd $13,24($4) - or $2,$2,$8 - - daddiu $5,$5,32 - daddiu $6,$6,32 - - bne $7,$0,L(Loop) - daddiu $4,$4,32 - -L(Lend): daddu $11,$11,$2 - sltu $8,$11,$2 - dsubu $11,$10,$11 - sltu $2,$10,$11 - sd $11,0($4) - j $31 - or $2,$2,$8 - -END (__mpn_sub_n) diff --git a/sysdeps/mips/mips64/submul_1.S b/sysdeps/mips/mips64/submul_1.S deleted file mode 100644 index 11c9851814..0000000000 --- a/sysdeps/mips/mips64/submul_1.S +++ /dev/null @@ -1,132 +0,0 @@ -/* MIPS3 __mpn_submul_1 -- Multiply a limb vector with a single limb and - * subtract the product from a second limb vector. - * - * Copyright (C) 1992-2017 Free Software Foundation, Inc. - * - * This file is part of the GNU MP Library. - * - * The GNU MP Library is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or (at your - * option) any later version. - * - * The GNU MP Library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with the GNU MP Library. If not, see - * . - */ - -#include -#include - -/* INPUT PARAMETERS - * res_ptr $4 - * s1_ptr $5 - * size $6 - * s2_limb $7 - */ - -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__mpn_submul_1) -#ifdef __PIC__ - SETUP_GP /* ??? unused */ -#endif - .set noreorder - .set nomacro - - # warm up phase 0 - ld $8,0($5) - - # warm up phase 1 - daddiu $5,$5,8 -#if __mips_isa_rev < 6 - dmultu $8,$7 -#else - dmulu $11,$8,$7 - dmuhu $12,$8,$7 -#endif - - daddiu $6,$6,-1 - beq $6,$0,L(LC0) - move $2,$0 # zero cy2 - - daddiu $6,$6,-1 - beq $6,$0,L(LC1) - ld $8,0($5) # load new s1 limb as early as possible - -L(Loop): ld $10,0($4) -#if __mips_isa_rev < 6 - mflo $3 - mfhi $9 -#else - move $3,$11 - move $9,$12 -#endif - daddiu $5,$5,8 - daddu $3,$3,$2 # add old carry limb to low product limb -#if __mips_isa_rev < 6 - dmultu $8,$7 -#else - dmulu $11,$8,$7 - dmuhu $12,$8,$7 -#endif - ld $8,0($5) # load new s1 limb as early as possible - daddiu $6,$6,-1 # decrement loop counter - sltu $2,$3,$2 # carry from previous addition -> $2 - dsubu $3,$10,$3 - sgtu $10,$3,$10 - daddu $2,$2,$10 - sd $3,0($4) - daddiu $4,$4,8 - bne $6,$0,L(Loop) - daddu $2,$9,$2 # add high product limb and carry from addition - - # cool down phase 1 -L(LC1): ld $10,0($4) -#if __mips_isa_rev < 6 - mflo $3 - mfhi $9 -#else - move $3,$11 - move $9,$12 -#endif - daddu $3,$3,$2 - sltu $2,$3,$2 -#if __mips_isa_rev < 6 - dmultu $8,$7 -#else - dmulu $11,$8,$7 - dmuhu $12,$8,$7 -#endif - dsubu $3,$10,$3 - sgtu $10,$3,$10 - daddu $2,$2,$10 - sd $3,0($4) - daddiu $4,$4,8 - daddu $2,$9,$2 # add high product limb and carry from addition - - # cool down phase 0 -L(LC0): ld $10,0($4) -#if __mips_isa_rev < 6 - mflo $3 - mfhi $9 -#else - move $3,$11 - move $9,$12 -#endif - daddu $3,$3,$2 - sltu $2,$3,$2 - dsubu $3,$10,$3 - sgtu $10,$3,$10 - daddu $2,$2,$10 - sd $3,0($4) - j $31 - daddu $2,$9,$2 # add high product limb and carry from addition - -END (__mpn_submul_1) diff --git a/sysdeps/mips/mul_1.S b/sysdeps/mips/mul_1.S deleted file mode 100644 index d924f02061..0000000000 --- a/sysdeps/mips/mul_1.S +++ /dev/null @@ -1,117 +0,0 @@ -/* MIPS __mpn_mul_1 -- Multiply a limb vector with a single limb and -store the product in a second limb vector. - -Copyright (C) 1995-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see -. */ - -#include - -/* INPUT PARAMETERS - res_ptr $4 - s1_ptr $5 - size $6 - s2_limb $7 -*/ -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__mpn_mul_1) - .set noreorder -#ifdef __PIC__ - .cpload t9 -#endif - .set nomacro - - /* warm up phase 0 */ - lw $8,0($5) - - /* warm up phase 1 */ - addiu $5,$5,4 -#if __mips_isa_rev < 6 - multu $8,$7 -#else - mulu $11,$8,$7 - muhu $12,$8,$7 -#endif - - addiu $6,$6,-1 - beq $6,$0,L(LC0) - move $2,$0 /* zero cy2 */ - - addiu $6,$6,-1 - beq $6,$0,L(LC1) - lw $8,0($5) /* load new s1 limb as early as possible */ - - -#if __mips_isa_rev < 6 -L(Loop): mflo $10 - mfhi $9 -#else -L(Loop): move $10,$11 - move $9,$12 -#endif - addiu $5,$5,4 - addu $10,$10,$2 /* add old carry limb to low product limb */ -#if __mips_isa_rev < 6 - multu $8,$7 -#else - mulu $11,$8,$7 - muhu $12,$8,$7 -#endif - lw $8,0($5) /* load new s1 limb as early as possible */ - addiu $6,$6,-1 /* decrement loop counter */ - sltu $2,$10,$2 /* carry from previous addition -> $2 */ - sw $10,0($4) - addiu $4,$4,4 - bne $6,$0,L(Loop) /* should be "bnel" */ - addu $2,$9,$2 /* add high product limb and carry from addition */ - - /* cool down phase 1 */ -#if __mips_isa_rev < 6 -L(LC1): mflo $10 - mfhi $9 -#else -L(LC1): move $10,$11 - move $9,$12 -#endif - addu $10,$10,$2 - sltu $2,$10,$2 -#if __mips_isa_rev < 6 - multu $8,$7 -#else - mulu $11,$8,$7 - muhu $12,$8,$7 -#endif - sw $10,0($4) - addiu $4,$4,4 - addu $2,$9,$2 /* add high product limb and carry from addition */ - - /* cool down phase 0 */ -#if __mips_isa_rev < 6 -L(LC0): mflo $10 - mfhi $9 -#else -L(LC0): move $10,$11 - move $9,$12 -#endif - addu $10,$10,$2 - sltu $2,$10,$2 - sw $10,0($4) - j $31 - addu $2,$9,$2 /* add high product limb and carry from addition */ - END (__mpn_mul_1) diff --git a/sysdeps/mips/nan-high-order-bit.h b/sysdeps/mips/nan-high-order-bit.h deleted file mode 100644 index bab0cb4e8c..0000000000 --- a/sysdeps/mips/nan-high-order-bit.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Specify NaN high-order bit conventions. MIPS version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef NAN_HIGH_ORDER_BIT_H -#define NAN_HIGH_ORDER_BIT_H 1 - -#ifdef __mips_nan2008 -/* MIPS aligned to IEEE 754-2008. */ -# define HIGH_ORDER_BIT_IS_SET_FOR_SNAN 0 -#else -/* One of the few architectures where the meaning of the - quiet/signaling bit is inverse to IEEE 754-2008 (as well as common - practice for IEEE 754-1985). */ -# define HIGH_ORDER_BIT_IS_SET_FOR_SNAN 1 -#endif - -#endif /* nan-high-order-bit.h */ diff --git a/sysdeps/mips/nptl/Makefile b/sysdeps/mips/nptl/Makefile deleted file mode 100644 index f0ca4f3303..0000000000 --- a/sysdeps/mips/nptl/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (C) 2005-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# . - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif - -ifeq ($(subdir),nptl) -libpthread-sysdep_routines += nptl-sysdep -libpthread-shared-only-routines += nptl-sysdep -endif diff --git a/sysdeps/mips/nptl/bits/pthreadtypes-arch.h b/sysdeps/mips/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index 6aa1bda172..0000000000 --- a/sysdeps/mips/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,87 +0,0 @@ -/* Machine-specific pthread type layouts. MIPS version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -#define _BITS_PTHREADTYPES_ARCH_H 1 - -#include - -#if _MIPS_SIM == _ABI64 -# define __SIZEOF_PTHREAD_ATTR_T 56 -# define __SIZEOF_PTHREAD_MUTEX_T 40 -# define __SIZEOF_PTHREAD_RWLOCK_T 56 -# define __SIZEOF_PTHREAD_BARRIER_T 32 -#else -# define __SIZEOF_PTHREAD_ATTR_T 36 -# define __SIZEOF_PTHREAD_MUTEX_T 24 -# define __SIZEOF_PTHREAD_RWLOCK_T 32 -# define __SIZEOF_PTHREAD_BARRIER_T 20 -#endif -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - -/* Data structure for mutex handling. */ -#define __PTHREAD_COMPAT_PADDING_MID -#define __PTHREAD_COMPAT_PADDING_END -#define __PTHREAD_MUTEX_LOCK_ELISION 0 - -#define __LOCK_ALIGNMENT -#define __ONCE_ALIGNMENT - -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; -#if _MIPS_SIM == _ABI64 - int __cur_writer; - int __shared; - unsigned long int __pad1; - unsigned long int __pad2; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned int __flags; -# else -# if __BYTE_ORDER == __BIG_ENDIAN - unsigned char __pad1; - unsigned char __pad2; - unsigned char __shared; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; -# else - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; - unsigned char __shared; - unsigned char __pad1; - unsigned char __pad2; -# endif - int __cur_writer; -#endif -}; - -#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/mips/nptl/bits/semaphore.h b/sysdeps/mips/nptl/bits/semaphore.h deleted file mode 100644 index 64227b92b5..0000000000 --- a/sysdeps/mips/nptl/bits/semaphore.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - -#if _MIPS_SIM == _ABI64 -# define __SIZEOF_SEM_T 32 -#else -# define __SIZEOF_SEM_T 16 -#endif - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/sysdeps/mips/nptl/nptl-sysdep.S b/sysdeps/mips/nptl/nptl-sysdep.S deleted file mode 100644 index 3f5c2a364a..0000000000 --- a/sysdeps/mips/nptl/nptl-sysdep.S +++ /dev/null @@ -1,2 +0,0 @@ -/* Pull in __syscall_error. */ -#include diff --git a/sysdeps/mips/nptl/pthreaddef.h b/sysdeps/mips/nptl/pthreaddef.h deleted file mode 100644 index 1adfe668b6..0000000000 --- a/sysdeps/mips/nptl/pthreaddef.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 16 - - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME __builtin_frame_address (0) diff --git a/sysdeps/mips/nptl/tcb-offsets.sym b/sysdeps/mips/nptl/tcb-offsets.sym deleted file mode 100644 index 9ea25b94a8..0000000000 --- a/sysdeps/mips/nptl/tcb-offsets.sym +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include - --- - --- Abuse tls.h macros to derive offsets relative to the thread register. -#define thread_offsetof(mem) (long)(offsetof(struct pthread, mem) - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE) - -MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) -TID_OFFSET thread_offsetof (tid) diff --git a/sysdeps/mips/nptl/tls.h b/sysdeps/mips/nptl/tls.h deleted file mode 100644 index 913f7d33f9..0000000000 --- a/sysdeps/mips/nptl/tls.h +++ /dev/null @@ -1,186 +0,0 @@ -/* Definition for thread-local data handling. NPTL/MIPS version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _TLS_H -#define _TLS_H 1 - -#include - -#ifndef __ASSEMBLER__ -# include -# include -# include -# include - -/* Get system call information. */ -# include - -#ifdef __mips16 -/* MIPS16 uses GCC builtin to access the TP. */ -# define READ_THREAD_POINTER() (__builtin_thread_pointer ()) -#else -/* Note: rd must be $v1 to be ABI-conformant. */ -# if __mips_isa_rev >= 2 -# define READ_THREAD_POINTER() \ - ({ void *__result; \ - asm volatile ("rdhwr\t%0, $29" : "=v" (__result)); \ - __result; }) -# else -# define READ_THREAD_POINTER() \ - ({ void *__result; \ - asm volatile (".set\tpush\n\t.set\tmips32r2\n\t" \ - "rdhwr\t%0, $29\n\t.set\tpop" : "=v" (__result)); \ - __result; }) -# endif -#endif - -#else /* __ASSEMBLER__ */ -# include - -# if __mips_isa_rev >= 2 -# define READ_THREAD_POINTER(rd) rdhwr rd, $29 -# else -# define READ_THREAD_POINTER(rd) \ - .set push; \ - .set mips32r2; \ - rdhwr rd, $29; \ - .set pop -# endif -#endif /* __ASSEMBLER__ */ - - -#ifndef __ASSEMBLER__ - -/* The TP points to the start of the thread blocks. */ -# define TLS_DTV_AT_TP 1 -# define TLS_TCB_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include - -typedef struct -{ - dtv_t *dtv; - void *private; -} tcbhead_t; - -/* This is the size of the initial TCB. Because our TCB is before the thread - pointer, we don't need this. */ -# define TLS_INIT_TCB_SIZE 0 - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size of the TCB. Because our TCB is before the thread - pointer, we don't need this. */ -# define TLS_TCB_SIZE 0 - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size we need before TCB - actually, it includes the TCB. */ -# define TLS_PRE_TCB_SIZE \ - (sizeof (struct pthread) \ - + ((sizeof (tcbhead_t) + TLS_TCB_ALIGN - 1) & ~(TLS_TCB_ALIGN - 1))) - -/* The thread pointer (in hardware register $29) points to the end of - the TCB + 0x7000, as for PowerPC. The pthread_descr structure is - immediately in front of the TCB. */ -# define TLS_TCB_OFFSET 0x7000 - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(tcbp, dtvp) \ - (((tcbhead_t *) (tcbp))[-1].dtv = (dtvp) + 1) - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtv) \ - (THREAD_DTV() = (dtv)) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(tcbp) \ - (((tcbhead_t *) (tcbp))[-1].dtv) - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(tcbp) \ - ({ INTERNAL_SYSCALL_DECL (err); \ - long result_var; \ - result_var = INTERNAL_SYSCALL (set_thread_area, err, 1, \ - (char *) (tcbp) + TLS_TCB_OFFSET); \ - INTERNAL_SYSCALL_ERROR_P (result_var, err) \ - ? "unknown error" : NULL; }) - -/* Value passed to 'clone' for initialization of the thread register. */ -# define TLS_DEFINE_INIT_TP(tp, pd) \ - void *tp = (void *) (pd) + TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - (((tcbhead_t *) (READ_THREAD_POINTER () - TLS_TCB_OFFSET))[-1].dtv) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF \ - ((struct pthread *) (READ_THREAD_POINTER () \ - - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF \ - CONST_THREAD_AREA (32, TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE) - -/* Access to data in the thread descriptor is easy. */ -# define THREAD_GETMEM(descr, member) \ - descr->member -# define THREAD_GETMEM_NC(descr, member, idx) \ - descr->member[idx] -# define THREAD_SETMEM(descr, member, value) \ - descr->member = (value) -# define THREAD_SETMEM_NC(descr, member, idx, value) \ - descr->member[idx] = (value) - -/* l_tls_offset == 0 is perfectly valid on MIPS, so we have to use some - different value to mean unset l_tls_offset. */ -# define NO_TLS_OFFSET -1 - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/mips/preconfigure b/sysdeps/mips/preconfigure deleted file mode 100644 index c118592b27..0000000000 --- a/sysdeps/mips/preconfigure +++ /dev/null @@ -1,29 +0,0 @@ -case "$machine" in -mips*) - abiflag=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define _MIPS_SIM \(.*\)/\1/p'` - mips16flag=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __mips16 \(.*\)/\1/p'` - - base_machine=mips - if test "$abiflag" = "_ABIO32" ; then - if test "$mips16flag" = "1" ; then - machine=mips/mips32/mips16 - else - machine=mips/mips32 - fi - elif test "$abiflag" = "_ABIN32" ; then - machine=mips/mips64/n32 - elif test "$abiflag" = "_ABI64" ; then - machine=mips/mips64/n64 - else - as_fn_error $? "Unable to determine ABI." "$LINENO" 5 - fi - # $config_machine is not really needed here but the slash after - # $machine is needed by the case statement in - # sysdeps/unix/sysv/linux/mips/configure.ac. - machine=$machine/$config_machine - - if test "$abiflag" != "_ABIO32" -a "$mips16flag" = "1"; then - as_fn_error $? "MIPS16 is only supported with the o32 ABI." "$LINENO" 5 - fi - ;; -esac diff --git a/sysdeps/mips/regdef.h b/sysdeps/mips/regdef.h deleted file mode 100644 index 9674826311..0000000000 --- a/sysdeps/mips/regdef.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ralf Baechle . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _REGDEF_H -#define _REGDEF_H - -#include -#include - -#endif /* _REGDEF_H */ diff --git a/sysdeps/mips/rshift.S b/sysdeps/mips/rshift.S deleted file mode 100644 index 4850d8c5b2..0000000000 --- a/sysdeps/mips/rshift.S +++ /dev/null @@ -1,94 +0,0 @@ -/* MIPS2 __mpn_rshift -- - -Copyright (C) 1995-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see -. */ - -#include - -/* INPUT PARAMETERS - res_ptr $4 - src_ptr $5 - size $6 - cnt $7 -*/ -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__mpn_rshift) - .set noreorder -#ifdef __PIC__ - .cpload t9 -#endif - .set nomacro - - lw $10,0($5) /* load first limb */ - subu $13,$0,$7 - addiu $6,$6,-1 - and $9,$6,4-1 /* number of limbs in first loop */ - beq $9,$0,L(L0) /* if multiple of 4 limbs, skip first loop*/ - sll $2,$10,$13 /* compute function result */ - - subu $6,$6,$9 - -L(Loop0): lw $3,4($5) - addiu $4,$4,4 - addiu $5,$5,4 - addiu $9,$9,-1 - srl $11,$10,$7 - sll $12,$3,$13 - move $10,$3 - or $8,$11,$12 - bne $9,$0,L(Loop0) - sw $8,-4($4) - -L(L0): beq $6,$0,L(Lend) - nop - -L(Loop): lw $3,4($5) - addiu $4,$4,16 - addiu $6,$6,-4 - srl $11,$10,$7 - sll $12,$3,$13 - - lw $10,8($5) - srl $14,$3,$7 - or $8,$11,$12 - sw $8,-16($4) - sll $9,$10,$13 - - lw $3,12($5) - srl $11,$10,$7 - or $8,$14,$9 - sw $8,-12($4) - sll $12,$3,$13 - - lw $10,16($5) - srl $14,$3,$7 - or $8,$11,$12 - sw $8,-8($4) - sll $9,$10,$13 - - addiu $5,$5,16 - or $8,$14,$9 - bgtz $6,L(Loop) - sw $8,-4($4) - -L(Lend): srl $8,$10,$7 - j $31 - sw $8,0($4) - END (__mpn_rshift) diff --git a/sysdeps/mips/setjmp.S b/sysdeps/mips/setjmp.S deleted file mode 100644 index 2a5633b43b..0000000000 --- a/sysdeps/mips/setjmp.S +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .set nomips16 - -/* The function __sigsetjmp_aux saves all the registers, but it can't - reliably access the stack or frame pointers, so we pass them in as - extra arguments. */ -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__sigsetjmp) -#ifdef __PIC__ - .set noreorder - .cpload t9 - .set reorder -#endif - move a2, sp -#ifdef fp - move a3, fp -#else - move a3, $fp -#endif -#ifdef __PIC__ - la t9, __sigsetjmp_aux - jr t9 -#else - j __sigsetjmp_aux -#endif -END (__sigsetjmp) -hidden_def (__sigsetjmp) diff --git a/sysdeps/mips/setjmp_aux.c b/sysdeps/mips/setjmp_aux.c deleted file mode 100644 index 0052e0c4a4..0000000000 --- a/sysdeps/mips/setjmp_aux.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe (brendan@zen.org). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* This function is only called via the assembly language routine - __sigsetjmp, which arranges to pass in the stack pointer and the frame - pointer. We do things this way because it's difficult to reliably - access them in C. */ - -int __attribute__ ((nomips16)) -__sigsetjmp_aux (jmp_buf env, int savemask, int sp, int fp) -{ -#ifdef __mips_hard_float - /* Store the floating point callee-saved registers... */ - asm volatile ("s.d $f20, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[0])); - asm volatile ("s.d $f22, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[1])); - asm volatile ("s.d $f24, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[2])); - asm volatile ("s.d $f26, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[3])); - asm volatile ("s.d $f28, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[4])); - asm volatile ("s.d $f30, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[5])); -#endif - - /* .. and the PC; */ - asm volatile ("sw $31, %0" : : "m" (env[0].__jmpbuf[0].__pc)); - - /* .. and the stack pointer; */ - env[0].__jmpbuf[0].__sp = (void *) sp; - - /* .. and the FP; it'll be in s8. */ - env[0].__jmpbuf[0].__fp = (void *) fp; - - /* .. and the GP; */ - asm volatile ("sw $gp, %0" : : "m" (env[0].__jmpbuf[0].__gp)); - - /* .. and the callee-saved registers; */ - asm volatile ("sw $16, %0" : : "m" (env[0].__jmpbuf[0].__regs[0])); - asm volatile ("sw $17, %0" : : "m" (env[0].__jmpbuf[0].__regs[1])); - asm volatile ("sw $18, %0" : : "m" (env[0].__jmpbuf[0].__regs[2])); - asm volatile ("sw $19, %0" : : "m" (env[0].__jmpbuf[0].__regs[3])); - asm volatile ("sw $20, %0" : : "m" (env[0].__jmpbuf[0].__regs[4])); - asm volatile ("sw $21, %0" : : "m" (env[0].__jmpbuf[0].__regs[5])); - asm volatile ("sw $22, %0" : : "m" (env[0].__jmpbuf[0].__regs[6])); - asm volatile ("sw $23, %0" : : "m" (env[0].__jmpbuf[0].__regs[7])); - - /* Save the signal mask if requested. */ - return __sigjmp_save (env, savemask); -} diff --git a/sysdeps/mips/sgidefs.h b/sysdeps/mips/sgidefs.h deleted file mode 100644 index e43ba15775..0000000000 --- a/sysdeps/mips/sgidefs.h +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ralf Baechle . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SGIDEFS_H -#define _SGIDEFS_H 1 - -/* - * A crude hack to stop - */ -#undef __ASM_SGIDEFS_H -#define __ASM_SGIDEFS_H - -/* - * And remove any damage it might have already done - */ -#undef _MIPS_ISA_MIPS1 -#undef _MIPS_ISA_MIPS2 -#undef _MIPS_ISA_MIPS3 -#undef _MIPS_ISA_MIPS4 -#undef _MIPS_ISA_MIPS5 -#undef _MIPS_ISA_MIPS32 -#undef _MIPS_ISA_MIPS64 - -#undef _MIPS_SIM_ABI32 -#undef _MIPS_SIM_NABI32 -#undef _MIPS_SIM_ABI64 - -/* - * Definitions for the ISA level - */ -#define _MIPS_ISA_MIPS1 1 -#define _MIPS_ISA_MIPS2 2 -#define _MIPS_ISA_MIPS3 3 -#define _MIPS_ISA_MIPS4 4 -#define _MIPS_ISA_MIPS5 5 -#define _MIPS_ISA_MIPS32 6 -#define _MIPS_ISA_MIPS64 7 - -/* - * Subprogram calling convention - */ -#ifndef _ABIO32 -# define _ABIO32 1 -#endif -#define _MIPS_SIM_ABI32 _ABIO32 - -#ifndef _ABIN32 -# define _ABIN32 2 -#endif -#define _MIPS_SIM_NABI32 _ABIN32 - -#ifndef _ABI64 -# define _ABI64 3 -#endif -#define _MIPS_SIM_ABI64 _ABI64 - -#ifndef _ABIO64 -# define _ABIO64 4 -#endif - -#endif /* sgidefs.h */ diff --git a/sysdeps/mips/sotruss-lib.c b/sysdeps/mips/sotruss-lib.c deleted file mode 100644 index 65df0de989..0000000000 --- a/sysdeps/mips/sotruss-lib.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Override generic sotruss-lib.c to define actual functions for MIPS. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define HAVE_ARCH_PLTENTER -#define HAVE_ARCH_PLTEXIT - -#include - -#if _MIPS_SIM == _ABIO32 - -ElfW(Addr) -la_mips_o32_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - La_mips_32_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - print_enter (refcook, defcook, symname, - regs->lr_reg[0], regs->lr_reg[1], regs->lr_reg[2], - *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -la_mips_o32_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, - const struct La_mips_32_regs *inregs, - struct La_mips_32_retval *outregs, - const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_v0); - - return 0; -} - -#elif _MIPS_SIM == _ABIN32 - -ElfW(Addr) -la_mips_n32_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - La_mips_64_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - print_enter (refcook, defcook, symname, - regs->lr_reg[0], regs->lr_reg[1], regs->lr_reg[2], - *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -la_mips_n32_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, - const struct La_mips_64_regs *inregs, - struct La_mips_64_retval *outregs, - const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_v0); - - return 0; -} - -#else - -ElfW(Addr) -la_mips_n64_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - La_mips_64_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - print_enter (refcook, defcook, symname, - regs->lr_reg[0], regs->lr_reg[1], regs->lr_reg[2], - *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -la_mips_n64_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, - const struct La_mips_64_regs *inregs, - struct La_mips_64_retval *outregs, - const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_v0); - - return 0; -} - -#endif diff --git a/sysdeps/mips/stackinfo.h b/sysdeps/mips/stackinfo.h deleted file mode 100644 index 67a532ca92..0000000000 --- a/sysdeps/mips/stackinfo.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* On MIPS the stack grows down. */ -#define _STACK_GROWS_DOWN 1 - -/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK is - * present, but it is presumed absent. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X) - -#endif /* stackinfo.h */ diff --git a/sysdeps/mips/start.S b/sysdeps/mips/start.S deleted file mode 100644 index 777b42d4ce..0000000000 --- a/sysdeps/mips/start.S +++ /dev/null @@ -1,185 +0,0 @@ -/* Startup code compliant to the ELF Mips ABI. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __ASSEMBLY__ 1 -#include -#include -#include - -#ifndef ENTRY_POINT -#error ENTRY_POINT needs to be defined for start.S on MIPS/ELF. -#endif - -/* This is the canonical entry point, usually the first thing in the text - segment. The SVR4/Mips ABI (pages 3-31, 3-32) says that when the entry - point runs, most registers' values are unspecified, except for: - - v0 ($2) Contains a function pointer to be registered with `atexit'. - This is how the dynamic linker arranges to have DT_FINI - functions called for shared libraries that have been loaded - before this code runs. - - sp ($29) The stack contains the arguments and environment: - 0(%esp) argc - 4(%esp) argv[0] - ... - (4*argc)(%esp) NULL - (4*(argc+1))(%esp) envp[0] - ... - NULL - ra ($31) The return address register is set to zero so that programs - that search backword through stack frames recognize the last - stack frame. -*/ - - -/* We need to call: - __libc_start_main (int (*main) (int, char **, char **), int argc, - char **argv, void (*init) (void), void (*fini) (void), - void (*rtld_fini) (void), void *stack_end) -*/ - - .text - .globl ENTRY_POINT - .type ENTRY_POINT,@function -#ifndef __mips16 -ENTRY_POINT: -# ifdef __PIC__ - SETUP_GPX($0) - SETUP_GPX64($25,$0) -# else - PTR_LA $28, _gp /* Setup GP correctly if we're non-PIC. */ - move $31, $0 -# endif - - PTR_LA $4, main /* main */ - PTR_L $5, 0($29) /* argc */ - PTR_ADDIU $6, $29, PTRSIZE /* argv */ - - /* Allocate space on the stack for seven arguments (o32 only) - and make sure the stack is aligned to double words (8 bytes) - on o32 and quad words (16 bytes) on n32 and n64. */ - - and $29, -2 * SZREG -# if _MIPS_SIM == _ABIO32 - PTR_SUBIU $29, 32 -# endif - PTR_LA $7, __libc_csu_init /* init */ - PTR_LA $8, __libc_csu_fini -# if _MIPS_SIM == _ABIO32 - PTR_S $8, 16($29) /* fini */ - PTR_S $2, 20($29) /* rtld_fini */ - PTR_S $29, 24($29) /* stack_end */ -# else - move $9, $2 /* rtld_fini */ - move $10, $29 /* stack_end */ -# endif - PTR_LA $25, __libc_start_main - jalr $25 -hlt: b hlt /* Crash if somehow it does return. */ - -#elif _MIPS_SIM == _ABIO32 /* __mips16 */ - /* MIPS16 entry point. */ - .set mips16 -ENTRY_POINT: -# ifdef __PIC__ - li $3, %hi(_gp_disp) - addiu $4, $pc, %lo(_gp_disp) - sll $3, 16 - addu $3, $4 - move $gp, $3 -# else - li $3, %hi(_gp) - sll $3, 16 - addiu $3, %lo(_gp) - move $gp, $3 -# endif - /* Tie end of stack frames. */ - li $4, 0 - move $31, $4 - /* Create new SP value in $7, including alignment. */ - li $4, 2 * SZREG - neg $4, $4 - move $7, $sp - and $7, $4 - addiu $7, -32 - /* Load arguments with original SP. */ - lw $5, 0($sp) - addiu $6, $sp, PTRSIZE - /* Update SP. */ - move $sp, $7 - /* Lay out last arguments, and call __libc_start_main(). */ -# ifdef __PIC__ - sw $7, 24($sp) /* stack_end */ - lw $4, %got(__libc_csu_fini)($3) - lw $7, %got(__libc_csu_init)($3) /* init */ - sw $4, 16($sp) /* fini */ - lw $4, %got(main)($3) /* main */ - lw $3, %call16(__libc_start_main)($3) - sw $2, 20($sp) /* rtld_fini */ - move $25, $3 - jalr $3 -# else - lw $4, 1f - sw $7, 24($sp) /* stack_end */ - lw $7, 2f /* init */ - sw $4, 16($sp) /* fini */ - lw $4, 3f /* main */ - sw $2, 20($sp) /* rtld_fini */ - /* Load and call __libc_start_main(). */ - lw $3, 4f - jalr $3 -# endif -hlt: b hlt /* Crash if somehow it does return. */ -# ifndef __PIC__ - .align 2 -1: .word __libc_csu_fini -2: .word __libc_csu_init -3: .word main -4: .word __libc_start_main -# endif - -#else /* __mips16 && _MIPS_SIM != _ABIO32 */ -# error "MIPS16 support for N32/N64 not implemented" - -#endif /* __mips16 */ - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start diff --git a/sysdeps/mips/strcmp.S b/sysdeps/mips/strcmp.S deleted file mode 100644 index 61e52b8c73..0000000000 --- a/sysdeps/mips/strcmp.S +++ /dev/null @@ -1,249 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifdef ANDROID_CHANGES -# include "machine/asm.h" -# include "machine/regdef.h" -#elif _LIBC -# include -# include -# include -#elif defined _COMPILING_NEWLIB -# include "machine/asm.h" -# include "machine/regdef.h" -#else -# include -# include -#endif - -/* Technically strcmp should not read past the end of the strings being - compared. We will read a full word that may contain excess bits beyond - the NULL string terminator but unless ENABLE_READAHEAD is set, we will not - read the next word after the end of string. Setting ENABLE_READAHEAD will - improve performance but is technically illegal based on the definition of - strcmp. */ -#ifdef ENABLE_READAHEAD -# define DELAY_READ -#else -# define DELAY_READ nop -#endif - -/* Testing on a little endian machine showed using CLZ was a - performance loss, so we are not turning it on by default. */ -#if defined(ENABLE_CLZ) && (__mips_isa_rev > 1) -# define USE_CLZ -#endif - -/* Some asm.h files do not have the L macro definition. */ -#ifndef L -# if _MIPS_SIM == _ABIO32 -# define L(label) $L ## label -# else -# define L(label) .L ## label -# endif -#endif - -/* Some asm.h files do not have the PTR_ADDIU macro definition. */ -#ifndef PTR_ADDIU -# ifdef USE_DOUBLE -# define PTR_ADDIU daddiu -# else -# define PTR_ADDIU addiu -# endif -#endif - -/* Allow the routine to be named something else if desired. */ -#ifndef STRCMP_NAME -# define STRCMP_NAME strcmp -#endif - -#ifdef ANDROID_CHANGES -LEAF(STRCMP_NAME, 0) -#else -LEAF(STRCMP_NAME) -#endif - .set nomips16 - .set noreorder - - or t0, a0, a1 - andi t0,0x3 - bne t0, zero, L(byteloop) - -/* Both strings are 4 byte aligned at this point. */ - - lui t8, 0x0101 - ori t8, t8, 0x0101 - lui t9, 0x7f7f - ori t9, 0x7f7f - -#define STRCMP32(OFFSET) \ - lw v0, OFFSET(a0); \ - lw v1, OFFSET(a1); \ - subu t0, v0, t8; \ - bne v0, v1, L(worddiff); \ - nor t1, v0, t9; \ - and t0, t0, t1; \ - bne t0, zero, L(returnzero) - -L(wordloop): - STRCMP32(0) - DELAY_READ - STRCMP32(4) - DELAY_READ - STRCMP32(8) - DELAY_READ - STRCMP32(12) - DELAY_READ - STRCMP32(16) - DELAY_READ - STRCMP32(20) - DELAY_READ - STRCMP32(24) - DELAY_READ - STRCMP32(28) - PTR_ADDIU a0, a0, 32 - b L(wordloop) - PTR_ADDIU a1, a1, 32 - -L(returnzero): - j ra - move v0, zero - -L(worddiff): -#ifdef USE_CLZ - subu t0, v0, t8 - nor t1, v0, t9 - and t1, t0, t1 - xor t0, v0, v1 - or t0, t0, t1 -# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - wsbh t0, t0 - rotr t0, t0, 16 -# endif - clz t1, t0 - and t1, 0xf8 -# if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ - neg t1 - addu t1, 24 -# endif - rotrv v0, v0, t1 - rotrv v1, v1, t1 - and v0, v0, 0xff - and v1, v1, 0xff - j ra - subu v0, v0, v1 -#else /* USE_CLZ */ -# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - andi t0, v0, 0xff - beq t0, zero, L(wexit01) - andi t1, v1, 0xff - bne t0, t1, L(wexit01) - - srl t8, v0, 8 - srl t9, v1, 8 - andi t8, t8, 0xff - beq t8, zero, L(wexit89) - andi t9, t9, 0xff - bne t8, t9, L(wexit89) - - srl t0, v0, 16 - srl t1, v1, 16 - andi t0, t0, 0xff - beq t0, zero, L(wexit01) - andi t1, t1, 0xff - bne t0, t1, L(wexit01) - - srl t8, v0, 24 - srl t9, v1, 24 -# else /* __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ */ - srl t0, v0, 24 - beq t0, zero, L(wexit01) - srl t1, v1, 24 - bne t0, t1, L(wexit01) - - srl t8, v0, 16 - srl t9, v1, 16 - andi t8, t8, 0xff - beq t8, zero, L(wexit89) - andi t9, t9, 0xff - bne t8, t9, L(wexit89) - - srl t0, v0, 8 - srl t1, v1, 8 - andi t0, t0, 0xff - beq t0, zero, L(wexit01) - andi t1, t1, 0xff - bne t0, t1, L(wexit01) - - andi t8, v0, 0xff - andi t9, v1, 0xff -# endif /* __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ */ - -L(wexit89): - j ra - subu v0, t8, t9 -L(wexit01): - j ra - subu v0, t0, t1 -#endif /* USE_CLZ */ - -/* It might seem better to do the 'beq' instruction between the two 'lbu' - instructions so that the nop is not needed but testing showed that this - code is actually faster (based on glibc strcmp test). */ -#define BYTECMP01(OFFSET) \ - lbu v0, OFFSET(a0); \ - lbu v1, OFFSET(a1); \ - beq v0, zero, L(bexit01); \ - nop; \ - bne v0, v1, L(bexit01) - -#define BYTECMP89(OFFSET) \ - lbu t8, OFFSET(a0); \ - lbu t9, OFFSET(a1); \ - beq t8, zero, L(bexit89); \ - nop; \ - bne t8, t9, L(bexit89) - -L(byteloop): - BYTECMP01(0) - BYTECMP89(1) - BYTECMP01(2) - BYTECMP89(3) - BYTECMP01(4) - BYTECMP89(5) - BYTECMP01(6) - BYTECMP89(7) - PTR_ADDIU a0, a0, 8 - b L(byteloop) - PTR_ADDIU a1, a1, 8 - -L(bexit01): - j ra - subu v0, v0, v1 -L(bexit89): - j ra - subu v0, t8, t9 - - .set at - .set reorder - -END(STRCMP_NAME) -#ifndef ANDROID_CHANGES -# ifdef _LIBC -libc_hidden_builtin_def (STRCMP_NAME) -# endif -#endif diff --git a/sysdeps/mips/sub_n.S b/sysdeps/mips/sub_n.S deleted file mode 100644 index 3996dcd8eb..0000000000 --- a/sysdeps/mips/sub_n.S +++ /dev/null @@ -1,121 +0,0 @@ -/* MIPS2 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -store difference in a third limb vector. - -Copyright (C) 1995-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see -. */ - -#include - -/* INPUT PARAMETERS - res_ptr $4 - s1_ptr $5 - s2_ptr $6 - size $7 -*/ -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__mpn_sub_n) - .set noreorder -#ifdef __PIC__ - .cpload t9 -#endif - .set nomacro - - lw $10,0($5) - lw $11,0($6) - - addiu $7,$7,-1 - and $9,$7,4-1 /* number of limbs in first loop */ - beq $9,$0,L(L0) /* if multiple of 4 limbs, skip first loop */ - move $2,$0 - - subu $7,$7,$9 - -L(Loop0): addiu $9,$9,-1 - lw $12,4($5) - addu $11,$11,$2 - lw $13,4($6) - sltu $8,$11,$2 - subu $11,$10,$11 - sltu $2,$10,$11 - sw $11,0($4) - or $2,$2,$8 - - addiu $5,$5,4 - addiu $6,$6,4 - move $10,$12 - move $11,$13 - bne $9,$0,L(Loop0) - addiu $4,$4,4 - -L(L0): beq $7,$0,L(Lend) - nop - -L(Loop): addiu $7,$7,-4 - - lw $12,4($5) - addu $11,$11,$2 - lw $13,4($6) - sltu $8,$11,$2 - subu $11,$10,$11 - sltu $2,$10,$11 - sw $11,0($4) - or $2,$2,$8 - - lw $10,8($5) - addu $13,$13,$2 - lw $11,8($6) - sltu $8,$13,$2 - subu $13,$12,$13 - sltu $2,$12,$13 - sw $13,4($4) - or $2,$2,$8 - - lw $12,12($5) - addu $11,$11,$2 - lw $13,12($6) - sltu $8,$11,$2 - subu $11,$10,$11 - sltu $2,$10,$11 - sw $11,8($4) - or $2,$2,$8 - - lw $10,16($5) - addu $13,$13,$2 - lw $11,16($6) - sltu $8,$13,$2 - subu $13,$12,$13 - sltu $2,$12,$13 - sw $13,12($4) - or $2,$2,$8 - - addiu $5,$5,16 - addiu $6,$6,16 - - bne $7,$0,L(Loop) - addiu $4,$4,16 - -L(Lend): addu $11,$11,$2 - sltu $8,$11,$2 - subu $11,$10,$11 - sltu $2,$10,$11 - sw $11,0($4) - j $31 - or $2,$2,$8 - END (__mpn_sub_n) diff --git a/sysdeps/mips/submul_1.S b/sysdeps/mips/submul_1.S deleted file mode 100644 index 8be8bf9007..0000000000 --- a/sysdeps/mips/submul_1.S +++ /dev/null @@ -1,128 +0,0 @@ -/* MIPS __mpn_submul_1 -- Multiply a limb vector with a single limb and -subtract the product from a second limb vector. - -Copyright (C) 1995-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library. If not, see -. */ - -#include - -/* INPUT PARAMETERS - res_ptr $4 - s1_ptr $5 - size $6 - s2_limb $7 -*/ -#ifdef __PIC__ - .option pic2 -#endif -ENTRY (__mpn_submul_1) - .set noreorder -#ifdef __PIC__ - .cpload t9 -#endif - .set nomacro - - /* warm up phase 0 */ - lw $8,0($5) - - /* warm up phase 1 */ - addiu $5,$5,4 -#if __mips_isa_rev < 6 - multu $8,$7 -#else - mulu $11,$8,$7 - muhu $12,$8,$7 -#endif - - addiu $6,$6,-1 - beq $6,$0,L(LC0) - move $2,$0 /* zero cy2 */ - - addiu $6,$6,-1 - beq $6,$0,L(LC1) - lw $8,0($5) /* load new s1 limb as early as possible */ - -L(Loop): lw $10,0($4) -#if __mips_isa_rev < 6 - mflo $3 - mfhi $9 -#else - move $3,$11 - move $9,$12 -#endif - addiu $5,$5,4 - addu $3,$3,$2 /* add old carry limb to low product limb */ -#if __mips_isa_rev < 6 - multu $8,$7 -#else - mulu $11,$8,$7 - muhu $12,$8,$7 -#endif - lw $8,0($5) /* load new s1 limb as early as possible */ - addiu $6,$6,-1 /* decrement loop counter */ - sltu $2,$3,$2 /* carry from previous addition -> $2 */ - subu $3,$10,$3 - sgtu $10,$3,$10 - addu $2,$2,$10 - sw $3,0($4) - addiu $4,$4,4 - bne $6,$0,L(Loop) /* should be "bnel" */ - addu $2,$9,$2 /* add high product limb and carry from addition */ - - /* cool down phase 1 */ -L(LC1): lw $10,0($4) -#if __mips_isa_rev < 6 - mflo $3 - mfhi $9 -#else - move $3,$11 - move $9,$12 -#endif - addu $3,$3,$2 - sltu $2,$3,$2 -#if __mips_isa_rev < 6 - multu $8,$7 -#else - mulu $11,$8,$7 - muhu $12,$8,$7 -#endif - subu $3,$10,$3 - sgtu $10,$3,$10 - addu $2,$2,$10 - sw $3,0($4) - addiu $4,$4,4 - addu $2,$9,$2 /* add high product limb and carry from addition */ - - /* cool down phase 0 */ -L(LC0): lw $10,0($4) -#if __mips_isa_rev < 6 - mflo $3 - mfhi $9 -#else - move $3,$11 - move $9,$12 -#endif - addu $3,$3,$2 - sltu $2,$3,$2 - subu $3,$10,$3 - sgtu $10,$3,$10 - addu $2,$2,$10 - sw $3,0($4) - j $31 - addu $2,$9,$2 /* add high product limb and carry from addition */ - END (__mpn_submul_1) diff --git a/sysdeps/mips/sys/asm.h b/sysdeps/mips/sys/asm.h deleted file mode 100644 index 9e5df26f3a..0000000000 --- a/sysdeps/mips/sys/asm.h +++ /dev/null @@ -1,498 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ralf Baechle . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_ASM_H -#define _SYS_ASM_H - -#include - -#ifndef CAT -# define __CAT(str1,str2) str1##str2 -# define CAT(str1,str2) __CAT(str1,str2) -#endif - -/* Redefined as nonempty in the internal header. */ -#define __mips_cfi_startproc /* Empty. */ -#define __mips_cfi_endproc /* Empty. */ - -/* - * Macros to handle different pointer/register sizes for 32/64-bit code - * - * 64 bit address space isn't used yet, so we may use the R3000 32 bit - * defines for now. - */ -#if _MIPS_SIM == _ABIO32 || _MIPS_SIM == _ABIN32 -# define PTR .word -# define PTRSIZE 4 -# define PTRLOG 2 -#elif _MIPS_SIM == _ABI64 -# define PTR .dword -# define PTRSIZE 8 -# define PTRLOG 3 -#endif - -/* - * PIC specific declarations - */ -#if _MIPS_SIM == _ABIO32 -# ifdef __PIC__ -# define CPRESTORE(register) \ - .cprestore register -# define CPLOAD(register) \ - .cpload register -# else -# define CPRESTORE(register) -# define CPLOAD(register) -# endif - -# define CPADD(register) \ - .cpadd register - -/* - * Set gp when at 1st instruction - */ -# define SETUP_GP \ - .set noreorder; \ - .cpload $25; \ - .set reorder -/* Set gp when not at 1st instruction */ -# define SETUP_GPX(r) \ - .set noreorder; \ - move r, $31; /* Save old ra. */ \ - bal 10f; /* Find addr of cpload. */ \ - nop; \ -10: \ - .cpload $31; \ - move $31, r; \ - .set reorder -# define SETUP_GPX_L(r, l) \ - .set noreorder; \ - move r, $31; /* Save old ra. */ \ - bal l; /* Find addr of cpload. */ \ - nop; \ -l: \ - .cpload $31; \ - move $31, r; \ - .set reorder -# define SAVE_GP(x) \ - .cprestore x /* Save gp trigger t9/jalr conversion. */ -# define SETUP_GP64(a, b) -# define SETUP_GPX64(a, b) -# define SETUP_GPX64_L(cp_reg, ra_save, l) -# define RESTORE_GP64 -# define USE_ALT_CP(a) -#else /* _MIPS_SIM == _ABI64 || _MIPS_SIM == _ABIN32 */ -/* - * For callee-saved gp calling convention: - */ -# define SETUP_GP -# define SETUP_GPX(r) -# define SETUP_GPX_L(r, l) -# define SAVE_GP(x) - -# define SETUP_GP64(gpoffset, proc) \ - .cpsetup $25, gpoffset, proc -# define SETUP_GPX64(cp_reg, ra_save) \ - move ra_save, $31; /* Save old ra. */ \ - .set noreorder; \ - bal 10f; /* Find addr of .cpsetup. */ \ - nop; \ -10: \ - .set reorder; \ - .cpsetup $31, cp_reg, 10b; \ - move $31, ra_save -# define SETUP_GPX64_L(cp_reg, ra_save, l) \ - move ra_save, $31; /* Save old ra. */ \ - .set noreorder; \ - bal l; /* Find addr of .cpsetup. */ \ - nop; \ -l: \ - .set reorder; \ - .cpsetup $31, cp_reg, l; \ - move $31, ra_save -# define RESTORE_GP64 \ - .cpreturn -/* Use alternate register for context pointer. */ -# define USE_ALT_CP(reg) \ - .cplocal reg -#endif /* _MIPS_SIM != _ABIO32 */ - -/* - * Stack Frame Definitions - */ -#if _MIPS_SIM == _ABIO32 -# define NARGSAVE 4 /* Space for 4 argument registers must be allocated. */ -#endif -#if _MIPS_SIM == _ABI64 || _MIPS_SIM == _ABIN32 -# define NARGSAVE 0 /* No caller responsibilities. */ -#endif - - -/* - * LEAF - declare leaf routine - */ -#define LEAF(symbol) \ - .globl symbol; \ - .align 2; \ - .type symbol,@function; \ - .ent symbol,0; \ -symbol: .frame sp,0,ra; \ - __mips_cfi_startproc - -/* - * NESTED - declare nested routine entry point - */ -#define NESTED(symbol, framesize, rpc) \ - .globl symbol; \ - .align 2; \ - .type symbol,@function; \ - .ent symbol,0; \ -symbol: .frame sp, framesize, rpc; \ - __mips_cfi_startproc - -/* - * END - mark end of function - */ -#ifndef END -# define END(function) \ - __mips_cfi_endproc; \ - .end function; \ - .size function,.-function -#endif - -/* - * EXPORT - export definition of symbol - */ -#define EXPORT(symbol) \ - .globl symbol; \ -symbol: __mips_cfi_startproc - -/* - * ABS - export absolute symbol - */ -#define ABS(symbol,value) \ - .globl symbol; \ -symbol = value - -#define PANIC(msg) \ - .set push; \ - .set reorder; \ - la a0,8f; \ - jal panic; \ -9: b 9b; \ - .set pop; \ - TEXT(msg) - -/* - * Print formated string - */ -#define PRINT(string) \ - .set push; \ - .set reorder; \ - la a0,8f; \ - jal printk; \ - .set pop; \ - TEXT(string) - -#define TEXT(msg) \ - .data; \ -8: .asciiz msg; \ - .previous; - -/* - * Build text tables - */ -#define TTABLE(string) \ - .text; \ - .word 1f; \ - .previous; \ - .data; \ -1: .asciz string; \ - .previous - -/* - * MIPS IV pref instruction. - * Use with .set noreorder only! - * - * MIPS IV implementations are free to treat this as a nop. The R5000 - * is one of them. So we should have an option not to use this instruction. - */ -#if (_MIPS_ISA == _MIPS_ISA_MIPS4) || (_MIPS_ISA == _MIPS_ISA_MIPS5) || \ - (_MIPS_ISA == _MIPS_ISA_MIPS32) || (_MIPS_ISA == _MIPS_ISA_MIPS64) -# define PREF(hint,addr) \ - pref hint,addr -# define PREFX(hint,addr) \ - prefx hint,addr -#else -# define PREF(hint,addr) -# define PREFX(hint,addr) -#endif - -/* - * MIPS ISA IV/V movn/movz instructions and equivalents for older CPUs. - */ -#if _MIPS_ISA == _MIPS_ISA_MIPS1 -# define MOVN(rd,rs,rt) \ - .set push; \ - .set reorder; \ - beqz rt,9f; \ - move rd,rs; \ - .set pop; \ -9: -# define MOVZ(rd,rs,rt) \ - .set push; \ - .set reorder; \ - bnez rt,9f; \ - move rd,rt; \ - .set pop; \ -9: -#endif /* _MIPS_ISA == _MIPS_ISA_MIPS1 */ -#if (_MIPS_ISA == _MIPS_ISA_MIPS2) || (_MIPS_ISA == _MIPS_ISA_MIPS3) -# define MOVN(rd,rs,rt) \ - .set push; \ - .set noreorder; \ - bnezl rt,9f; \ - move rd,rs; \ - .set pop; \ -9: -# define MOVZ(rd,rs,rt) \ - .set push; \ - .set noreorder; \ - beqzl rt,9f; \ - movz rd,rs; \ - .set pop; \ -9: -#endif /* (_MIPS_ISA == _MIPS_ISA_MIPS2) || (_MIPS_ISA == _MIPS_ISA_MIPS3) */ -#if (_MIPS_ISA == _MIPS_ISA_MIPS4) || (_MIPS_ISA == _MIPS_ISA_MIPS5) || \ - (_MIPS_ISA == _MIPS_ISA_MIPS32) || (_MIPS_ISA == _MIPS_ISA_MIPS64) -# define MOVN(rd,rs,rt) \ - movn rd,rs,rt -# define MOVZ(rd,rs,rt) \ - movz rd,rs,rt -#endif /* (_MIPS_ISA == _MIPS_ISA_MIPS4) || (_MIPS_ISA == _MIPS_ISA_MIPS5) */ - -/* - * Stack alignment - */ -#if _MIPS_SIM == _ABI64 || _MIPS_SIM == _ABIN32 -# define ALSZ 15 -# define ALMASK ~15 -#else -# define ALSZ 7 -# define ALMASK ~7 -#endif - -/* - * Size of a register - */ -#if _MIPS_SIM == _ABI64 || _MIPS_SIM == _ABIN32 -# define SZREG 8 -#else -# define SZREG 4 -#endif - -/* - * Use the following macros in assemblercode to load/store registers, - * pointers etc. - */ -#if (SZREG == 4) -# define REG_S sw -# define REG_L lw -#else -# define REG_S sd -# define REG_L ld -#endif - -/* - * How to add/sub/load/store/shift C int variables. - */ -#if (_MIPS_SZINT == 32) -# define INT_ADD add -# define INT_ADDI addi -# define INT_ADDU addu -# define INT_ADDIU addiu -# define INT_SUB sub -# define INT_SUBI subi -# define INT_SUBU subu -# define INT_SUBIU subu -# define INT_L lw -# define INT_S sw -#endif - -#if (_MIPS_SZINT == 64) -# define INT_ADD dadd -# define INT_ADDI daddi -# define INT_ADDU daddu -# define INT_ADDIU daddiu -# define INT_SUB dsub -# define INT_SUBI dsubi -# define INT_SUBU dsubu -# define INT_SUBIU dsubu -# define INT_L ld -# define INT_S sd -#endif - -/* - * How to add/sub/load/store/shift C long variables. - */ -#if (_MIPS_SZLONG == 32) -# define LONG_ADD add -# define LONG_ADDI addi -# define LONG_ADDU addu -# define LONG_ADDIU addiu -# define LONG_SUB sub -# define LONG_SUBI subi -# define LONG_SUBU subu -# define LONG_SUBIU subu -# define LONG_L lw -# define LONG_S sw -# define LONG_SLL sll -# define LONG_SLLV sllv -# define LONG_SRL srl -# define LONG_SRLV srlv -# define LONG_SRA sra -# define LONG_SRAV srav -#endif - -#if (_MIPS_SZLONG == 64) -# define LONG_ADD dadd -# define LONG_ADDI daddi -# define LONG_ADDU daddu -# define LONG_ADDIU daddiu -# define LONG_SUB dsub -# define LONG_SUBI dsubi -# define LONG_SUBU dsubu -# define LONG_SUBIU dsubu -# define LONG_L ld -# define LONG_S sd -# define LONG_SLL dsll -# define LONG_SLLV dsllv -# define LONG_SRL dsrl -# define LONG_SRLV dsrlv -# define LONG_SRA dsra -# define LONG_SRAV dsrav -#endif - -/* - * How to add/sub/load/store/shift pointers. - */ -#if (_MIPS_SIM == _ABIO32 && _MIPS_SZPTR == 32) -# define PTR_ADD add -# define PTR_ADDI addi -# define PTR_ADDU addu -# define PTR_ADDIU addiu -# define PTR_SUB sub -# define PTR_SUBI subi -# define PTR_SUBU subu -# define PTR_SUBIU subu -# define PTR_L lw -# define PTR_LA la -# define PTR_S sw -# define PTR_SLL sll -# define PTR_SLLV sllv -# define PTR_SRL srl -# define PTR_SRLV srlv -# define PTR_SRA sra -# define PTR_SRAV srav - -# define PTR_SCALESHIFT 2 -#endif - -#if _MIPS_SIM == _ABIN32 -# define PTR_ADD add -# define PTR_ADDI addi -# define PTR_SUB sub -# define PTR_SUBI subi -#if !defined __mips_isa_rev || __mips_isa_rev < 6 -# define PTR_ADDU add /* no u */ -# define PTR_ADDIU addi /* no u */ -# define PTR_SUBU sub /* no u */ -# define PTR_SUBIU sub /* no u */ -#else -# define PTR_ADDU addu -# define PTR_ADDIU addiu -# define PTR_SUBU subu -# define PTR_SUBIU subu -#endif -# define PTR_L lw -# define PTR_LA la -# define PTR_S sw -# define PTR_SLL sll -# define PTR_SLLV sllv -# define PTR_SRL srl -# define PTR_SRLV srlv -# define PTR_SRA sra -# define PTR_SRAV srav - -# define PTR_SCALESHIFT 2 -#endif - -#if (_MIPS_SIM == _ABIO32 && _MIPS_SZPTR == 64 /* o64??? */) \ - || _MIPS_SIM == _ABI64 -# define PTR_ADD dadd -# define PTR_ADDI daddi -# define PTR_ADDU daddu -# define PTR_ADDIU daddiu -# define PTR_SUB dsub -# define PTR_SUBI dsubi -# define PTR_SUBU dsubu -# define PTR_SUBIU dsubu -# define PTR_L ld -# define PTR_LA dla -# define PTR_S sd -# define PTR_SLL dsll -# define PTR_SLLV dsllv -# define PTR_SRL dsrl -# define PTR_SRLV dsrlv -# define PTR_SRA dsra -# define PTR_SRAV dsrav - -# define PTR_SCALESHIFT 3 -#endif - -/* - * Some cp0 registers were extended to 64bit for MIPS III. - */ -#if (_MIPS_ISA == _MIPS_ISA_MIPS1) || (_MIPS_ISA == _MIPS_ISA_MIPS2) || \ - (_MIPS_ISA == _MIPS_ISA_MIPS32) -# define MFC0 mfc0 -# define MTC0 mtc0 -#endif -#if (_MIPS_ISA == _MIPS_ISA_MIPS3) || (_MIPS_ISA == _MIPS_ISA_MIPS4) || \ - (_MIPS_ISA == _MIPS_ISA_MIPS5) || (_MIPS_ISA == _MIPS_ISA_MIPS64) -# define MFC0 dmfc0 -# define MTC0 dmtc0 -#endif - -/* The MIPS architectures do not have a uniform memory model. Particular - platforms may provide additional guarantees - for instance, the R4000 - LL and SC instructions implicitly perform a SYNC, and the 4K promises - strong ordering. - - However, in the absence of those guarantees, we must assume weak ordering - and SYNC explicitly where necessary. - - Some obsolete MIPS processors may not support the SYNC instruction. This - applies to "true" MIPS I processors; most of the processors which compile - using MIPS I implement parts of MIPS II. */ - -#ifndef MIPS_SYNC -# define MIPS_SYNC sync -#endif - -#endif /* sys/asm.h */ diff --git a/sysdeps/mips/sys/fpregdef.h b/sysdeps/mips/sys/fpregdef.h deleted file mode 100644 index 01e53e9f5a..0000000000 --- a/sysdeps/mips/sys/fpregdef.h +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_FPREGDEF_H -#define _SYS_FPREGDEF_H - -#include - -/* Commonalities first, individualities next... */ - -#define fv0 $f0 /* return value */ -#define fv1 $f2 - -#if _MIPS_SIM == _ABIO32 || _MIPS_SIM == _ABIN32 -#define fs0 $f20 /* callee saved */ -#define fs1 $f22 -#define fs2 $f24 -#define fs3 $f26 -#define fs4 $f28 -#define fs5 $f30 -#endif /* _MIPS_SIM == _ABIO32 || _MIPS_SIM == _ABIN32 */ - -#if _MIPS_SIM == _ABI64 || _MIPS_SIM == _ABIN32 -#define fa0 $f12 /* argument registers */ -#define fa1 $f13 -#define fa2 $f14 -#define fa3 $f15 -#define fa4 $f16 -#define fa5 $f17 -#define fa6 $f18 -#define fa7 $f19 - -#define ft0 $f4 /* caller saved */ -#define ft1 $f5 -#define ft2 $f6 -#define ft3 $f7 -#define ft4 $f8 -#define ft5 $f9 -#define ft6 $f10 -#define ft7 $f11 -#endif /* _MIPS_SIM == _ABI64 || _MIPS_SIM == _ABIN32 */ - -#if _MIPS_SIM == _ABIO32 -#define fv0f $f1 /* return value, high part */ -#define fv1f $f3 - -#define fa0 $f12 /* argument registers */ -#define fa0f $f13 -#define fa1 $f14 -#define fa1f $f15 - -#define ft0 $f4 /* caller saved */ -#define ft0f $f5 -#define ft1 $f6 -#define ft1f $f7 -#define ft2 $f8 -#define ft2f $f9 -#define ft3 $f10 -#define ft3f $f11 -#define ft4 $f16 -#define ft4f $f17 -#define ft5 $f18 -#define ft5f $f19 - -#define fs0f $f21 /* callee saved, high part */ -#define fs1f $f23 -#define fs2f $f25 -#define fs3f $f27 -#define fs4f $f29 -#define fs5f $f31 -#endif /* _MIPS_SIM == _ABIO32 */ - -#if _MIPS_SIM == _ABI64 -#define ft8 $f20 /* caller saved */ -#define ft9 $f21 -#define ft10 $f22 -#define ft11 $f23 -#define ft12 $f1 -#define ft13 $f3 - -#define fs0 $f24 /* callee saved */ -#define fs1 $f25 -#define fs2 $f26 -#define fs3 $f27 -#define fs4 $f28 -#define fs5 $f29 -#define fs6 $f30 -#define fs7 $f31 -#endif /* _MIPS_SIM == _ABI64 */ - -#if _MIPS_SIM == _ABIN32 -#define ft8 $f21 /* caller saved */ -#define ft9 $f23 -#define ft10 $f25 -#define ft11 $f27 -#define ft12 $f29 -#define ft13 $f31 -#define ft14 $f1 -#define ft15 $f3 -#endif /* _MIPS_SIM == _ABIN32 */ - -#define fcr31 $31 /* FPU status register */ - -#endif /* sys/fpregdef.h */ diff --git a/sysdeps/mips/sys/regdef.h b/sysdeps/mips/sys/regdef.h deleted file mode 100644 index f938345056..0000000000 --- a/sysdeps/mips/sys/regdef.h +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ralf Baechle . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_REGDEF_H -#define _SYS_REGDEF_H - -#include - -/* - * Symbolic register names for 32 bit ABI - */ -#define zero $0 /* wired zero */ -#define AT $1 /* assembler temp - uppercase because of ".set at" */ -#define v0 $2 /* return value */ -#define v1 $3 -#define a0 $4 /* argument registers */ -#define a1 $5 -#define a2 $6 -#define a3 $7 -#if _MIPS_SIM != _ABIO32 -#define a4 $8 -#define a5 $9 -#define a6 $10 -#define a7 $11 -#define t0 $12 -#define t1 $13 -#define t2 $14 -#define t3 $15 -#define ta0 a4 -#define ta1 a5 -#define ta2 a6 -#define ta3 a7 -#else /* if _MIPS_SIM == _ABIO32 */ -#define t0 $8 /* caller saved */ -#define t1 $9 -#define t2 $10 -#define t3 $11 -#define t4 $12 -#define t5 $13 -#define t6 $14 -#define t7 $15 -#define ta0 t4 -#define ta1 t5 -#define ta2 t6 -#define ta3 t7 -#endif /* _MIPS_SIM == _ABIO32 */ -#define s0 $16 /* callee saved */ -#define s1 $17 -#define s2 $18 -#define s3 $19 -#define s4 $20 -#define s5 $21 -#define s6 $22 -#define s7 $23 -#define t8 $24 /* caller saved */ -#define t9 $25 -#define jp $25 /* PIC jump register */ -#define k0 $26 /* kernel scratch */ -#define k1 $27 -#define gp $28 /* global pointer */ -#define sp $29 /* stack pointer */ -#define fp $30 /* frame pointer */ -#define s8 $30 /* same like fp! */ -#define ra $31 /* return address */ - -#endif /* _SYS_REGDEF_H */ diff --git a/sysdeps/mips/sys/tas.h b/sysdeps/mips/sys/tas.h deleted file mode 100644 index 3e020a754e..0000000000 --- a/sysdeps/mips/sys/tas.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maciej W. Rozycki , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_TAS_H -#define _SYS_TAS_H 1 - -#include -#include - -__BEGIN_DECLS - -extern int _test_and_set (int *__p, int __v) - __THROW __attribute__ ((__nomips16__)); - -#ifdef __USE_EXTERN_INLINES - -# ifndef _EXTERN_INLINE -# define _EXTERN_INLINE __extern_inline -# endif - -_EXTERN_INLINE int __attribute__ ((__nomips16__)) -__NTH (_test_and_set (int *__p, int __v)) -{ - int __r, __t; - - __asm__ __volatile__ - ("/* Inline test and set */\n" - ".set push\n\t" -#if _MIPS_SIM == _ABIO32 && __mips < 2 - ".set mips2\n\t" -#endif - "sync\n\t" - "1:\n\t" - "ll %0,%3\n\t" - "move %1,%4\n\t" - "beq %0,%4,2f\n\t" - "sc %1,%2\n\t" - "beqz %1,1b\n" - "sync\n\t" - ".set pop\n\t" - "2:\n\t" - "/* End test and set */" - : "=&r" (__r), "=&r" (__t), "=m" (*__p) - : "m" (*__p), "r" (__v) - : "memory"); - - return __r; -} - -#endif /* __USE_EXTERN_INLINES */ - -__END_DECLS - -#endif /* sys/tas.h */ diff --git a/sysdeps/mips/sys/ucontext.h b/sysdeps/mips/sys/ucontext.h deleted file mode 100644 index 4bc1bc199a..0000000000 --- a/sysdeps/mips/sys/ucontext.h +++ /dev/null @@ -1,176 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* System V/mips ABI compliant context switching support. */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - -#include - - -/* Type for general register. */ -#if _MIPS_SIM == _ABIO32 -typedef __uint32_t greg_t; -#else -typedef __uint64_t greg_t; -#endif - -/* Number of general registers. */ -#define __NGREG 36 -#ifdef __USE_MISC -# define NGREG __NGREG -#endif - -/* Container for all general registers. */ -typedef greg_t gregset_t[__NGREG]; - -#ifdef __USE_MISC -/* Number of each register is the `gregset_t' array. */ -enum -{ - CTX_R0 = 0, -# define CTX_R0 CTX_R0 - CTX_AT = 1, -# define CTX_AT CTX_AT - CTX_V0 = 2, -# define CTX_V0 CTX_V0 - CTX_V1 = 3, -# define CTX_V1 CTX_V1 - CTX_A0 = 4, -# define CTX_A0 CTX_A0 - CTX_A1 = 5, -# define CTX_A1 CTX_A1 - CTX_A2 = 6, -# define CTX_A2 CTX_A2 - CTX_A3 = 7, -# define CTX_A3 CTX_A3 - CTX_T0 = 8, -# define CTX_T0 CTX_T0 - CTX_T1 = 9, -# define CTX_T1 CTX_T1 - CTX_T2 = 10, -# define CTX_T2 CTX_T2 - CTX_T3 = 11, -# define CTX_T3 CTX_T3 - CTX_T4 = 12, -# define CTX_T4 CTX_T4 - CTX_T5 = 13, -# define CTX_T5 CTX_T5 - CTX_T6 = 14, -# define CTX_T6 CTX_T6 - CTX_T7 = 15, -# define CTX_T7 CTX_T7 - CTX_S0 = 16, -# define CTX_S0 CTX_S0 - CTX_S1 = 17, -# define CTX_S1 CTX_S1 - CTX_S2 = 18, -# define CTX_S2 CTX_S2 - CTX_S3 = 19, -# define CTX_S3 CTX_S3 - CTX_S4 = 20, -# define CTX_S4 CTX_S4 - CTX_S5 = 21, -# define CTX_S5 CTX_S5 - CTX_S6 = 22, -# define CTX_S6 CTX_S6 - CTX_S7 = 23, -# define CTX_S7 CTX_S7 - CTX_T8 = 24, -# define CTX_T8 CTX_T8 - CTX_T9 = 25, -# define CTX_T9 CTX_T9 - CTX_K0 = 26, -# define CTX_K0 CTX_K0 - CTX_K1 = 27, -# define CTX_K1 CTX_K1 - CTX_GP = 28, -# define CTX_GP CTX_GP - CTX_SP = 29, -# define CTX_SP CTX_SP - CTX_S8 = 30, -# define CTX_S8 CTX_S8 - CTX_RA = 31, -# define CTX_RA CTX_RA - CTX_MDLO = 32, -# define CTX_MDLO CTX_MDLO - CTX_MDHI = 33, -# define CTX_MDHI CTX_MDHI - CTX_CAUSE = 34, -# define CTX_CAUSE CTX_CAUSE - CTX_EPC = 35, -# define CTX_EPC CTX_EPC -}; -#endif - -#ifdef __USE_MISC -# define __ctx(fld) fld -#else -# define __ctx(fld) __ ## fld -#endif - -/* Structure to describe FPU registers. */ -typedef struct fpregset -{ - union - { -#if _MIPS_SIM == _ABIO32 - double __ctx(fp_dregs)[16]; - float __ctx(fp_fregs)[32]; - unsigned int __ctx(fp_regs)[32]; -#else - double __ctx(fp_dregs)[32]; - /* float __ctx(fp_fregs)[32]; */ - __uint64_t __ctx(fp_regs)[32]; -#endif - } __ctx(fp_r); - unsigned int __ctx(fp_csr); - unsigned int __ctx(fp_pad); -} fpregset_t; - -/* Context to describe whole processor state. */ -typedef struct -{ - gregset_t __ctx(gpregs); - fpregset_t __ctx(fpregs); -} mcontext_t; - -#undef __ctx - -/* Userlevel context. */ -typedef struct ucontext -{ -#if _MIPS_SIM == _ABIO32 - unsigned long int uc_flags; -#else - __uint64_t uc_flags; -#endif - struct ucontext *uc_link; - sigset_t uc_sigmask; - stack_t uc_stack; - mcontext_t uc_mcontext; - int uc_filler[48]; -} ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/mips/tininess.h b/sysdeps/mips/tininess.h deleted file mode 100644 index 1db37790f8..0000000000 --- a/sysdeps/mips/tininess.h +++ /dev/null @@ -1 +0,0 @@ -#define TININESS_AFTER_ROUNDING 1 diff --git a/sysdeps/mips/tls-macros.h b/sysdeps/mips/tls-macros.h deleted file mode 100644 index a6fdfbc0ad..0000000000 --- a/sysdeps/mips/tls-macros.h +++ /dev/null @@ -1,130 +0,0 @@ -/* Macros to support TLS testing in times of missing compiler support. */ - -#include -#include -#include - -#define __STRING2(X) __STRING(X) -#define ADDU __STRING2(PTR_ADDU) -#define ADDIU __STRING2(PTR_ADDIU) -#define LW __STRING2(PTR_L) - -/* Load the GOT pointer, which may not be in $28 in a non-PIC - (abicalls pic0) function. */ -#ifndef __PIC__ -# if _MIPS_SIM != _ABI64 -# ifndef __mips16 -# define LOAD_GP "move %[tmp], $28\n\tla $28, __gnu_local_gp\n\t" -# else -# define LOAD_GP \ - "li %[tmp], %%hi(__gnu_local_gp)\n\t" \ - "sll %[tmp], 16\n\t" \ - "addiu %[tmp], %%lo(__gnu_local_gp)\n\t" -# endif -# else -# define LOAD_GP "move %[tmp], $28\n\tdla $28, __gnu_local_gp\n\t" -# endif -# define UNLOAD_GP "\n\tmove $28, %[tmp]" -#else -/* MIPS16 (re)creates the GP value using PC-relative instructions. */ -# ifdef __mips16 -# define LOAD_GP \ - "li %[tmp], %%hi(_gp_disp)\n\t" \ - "addiu %0, $pc, %%lo(_gp_disp)\n\t" \ - "sll %[tmp], 16\n\t" \ - "addu %[tmp], %0\n\t" -# else -# define LOAD_GP -# endif -# define UNLOAD_GP -#endif - -# if __mips_isa_rev >= 2 -# define TLS_RDHWR "rdhwr\t%0,$29" -# else -# define TLS_RDHWR \ - ".set push\n\t.set mips32r2\n\t" \ - "rdhwr\t%0,$29\n\t.set pop" -#endif - -#ifndef __mips16 -# define TLS_GD(x) \ - ({ void *__result, *__tmp; \ - extern void *__tls_get_addr (void *); \ - asm (LOAD_GP ADDIU " %0, $28, %%tlsgd(" #x ")" \ - UNLOAD_GP \ - : "=r" (__result), [tmp] "=&r" (__tmp)); \ - (int *)__tls_get_addr (__result); }) -# define TLS_LD(x) \ - ({ void *__result, *__tmp; \ - extern void *__tls_get_addr (void *); \ - asm (LOAD_GP ADDIU " %0, $28, %%tlsldm(" #x ")" \ - UNLOAD_GP \ - : "=r" (__result), [tmp] "=&r" (__tmp)); \ - __result = __tls_get_addr (__result); \ - asm ("lui $3,%%dtprel_hi(" #x ")\n\t" \ - "addiu $3,$3,%%dtprel_lo(" #x ")\n\t" \ - ADDU " %0,%0,$3" \ - : "+r" (__result) : : "$3"); \ - __result; }) -# define TLS_IE(x) \ - ({ void *__result, *__tmp; \ - asm (TLS_RDHWR \ - : "=v" (__result)); \ - asm (LOAD_GP LW " $3,%%gottprel(" #x ")($28)\n\t" \ - ADDU " %0,%0,$3" \ - UNLOAD_GP \ - : "+r" (__result), [tmp] "=&r" (__tmp) \ - : : "$3"); \ - __result; }) -# define TLS_LE(x) \ - ({ void *__result; \ - asm (TLS_RDHWR \ - : "=v" (__result)); \ - asm ("lui $3,%%tprel_hi(" #x ")\n\t" \ - "addiu $3,$3,%%tprel_lo(" #x ")\n\t" \ - ADDU " %0,%0,$3" \ - : "+r" (__result) : : "$3"); \ - __result; }) - -#else /* __mips16 */ -/* MIPS16 version. */ -# define TLS_GD(x) \ - ({ void *__result, *__tmp; \ - extern void *__tls_get_addr (void *); \ - asm (LOAD_GP ADDIU " %1, %%tlsgd(" #x ")" \ - "\n\tmove %0, %1" \ - : "=d" (__result), [tmp] "=&d" (__tmp)); \ - (int *) __tls_get_addr (__result); }) -# define TLS_LD(x) \ - ({ void *__result, *__tmp; \ - extern void *__tls_get_addr (void *); \ - asm (LOAD_GP ADDIU " %1, %%tlsldm(" #x ")" \ - "\n\tmove %0, %1" \ - : "=d" (__result), [tmp] "=&d" (__tmp)); \ - __result = __tls_get_addr (__result); \ - asm ("li $3,%%dtprel_hi(" #x ")\n\t" \ - "sll $3,16\n\t" \ - "addiu $3,%%dtprel_lo(" #x ")\n\t" \ - ADDU " %0,%0,$3" \ - : "+d" (__result) : : "$3"); \ - __result; }) -# define TLS_IE(x) \ - ({ void *__result, *__tmp, *__tp; \ - __tp = __builtin_thread_pointer (); \ - asm (LOAD_GP LW " $3,%%gottprel(" #x ")(%1)\n\t" \ - ADDU " %0,%[tp],$3" \ - : "=&d" (__result), [tmp] "=&d" (__tmp) \ - : [tp] "d" (__tp) : "$3"); \ - __result; }) -# define TLS_LE(x) \ - ({ void *__result, *__tp; \ - __tp = __builtin_thread_pointer (); \ - asm ("li $3,%%tprel_hi(" #x ")\n\t" \ - "sll $3,16\n\t" \ - "addiu $3,%%tprel_lo(" #x ")\n\t" \ - ADDU " %0,%[tp],$3" \ - : "=d" (__result) : [tp] "d" (__tp) : "$3"); \ - __result; }) - -#endif /* __mips16 */ diff --git a/sysdeps/mips/tst-abi-fp32mod.c b/sysdeps/mips/tst-abi-fp32mod.c deleted file mode 100644 index 2df4070fc2..0000000000 --- a/sysdeps/mips/tst-abi-fp32mod.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -int -fp32 (void) -{ - return 1; -} diff --git a/sysdeps/mips/tst-abi-fp64amod.c b/sysdeps/mips/tst-abi-fp64amod.c deleted file mode 100644 index c724d53bf2..0000000000 --- a/sysdeps/mips/tst-abi-fp64amod.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -int -fp64a (void) -{ - return 7; -} diff --git a/sysdeps/mips/tst-abi-fp64mod.c b/sysdeps/mips/tst-abi-fp64mod.c deleted file mode 100644 index c4d5ab72ae..0000000000 --- a/sysdeps/mips/tst-abi-fp64mod.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -int -fp64 (void) -{ - return 6; -} diff --git a/sysdeps/mips/tst-abi-fpxxmod.c b/sysdeps/mips/tst-abi-fpxxmod.c deleted file mode 100644 index a2de29735e..0000000000 --- a/sysdeps/mips/tst-abi-fpxxmod.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -int -fpxx (void) -{ - return 5; -} diff --git a/sysdeps/mips/tst-abi-fpxxomod.c b/sysdeps/mips/tst-abi-fpxxomod.c deleted file mode 100644 index b43190eb03..0000000000 --- a/sysdeps/mips/tst-abi-fpxxomod.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -int -fpxxo (void) -{ - return 5 + 100; -} diff --git a/sysdeps/mips/tst-abi-interlink.c b/sysdeps/mips/tst-abi-interlink.c deleted file mode 100644 index 32aa861191..0000000000 --- a/sysdeps/mips/tst-abi-interlink.c +++ /dev/null @@ -1,844 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#if defined PR_GET_FP_MODE && defined PR_SET_FP_MODE -# define HAVE_PRCTL_FP_MODE 1 -# define FR1_MODE (PR_FP_MODE_FR) -# define FRE_MODE (PR_FP_MODE_FR | PR_FP_MODE_FRE) -#else -# define HAVE_PRCTL_FP_MODE 0 -# define FR1_MODE 0x1 -# define FRE_MODE 0x2 -#endif - -#define STR_VAL(VAL) #VAL -#define N_STR(VAL) STR_VAL(VAL) - -#define START_STATE(NAME) \ -case s_ ## NAME: \ - { \ - switch (obj) \ - { - -#define END_STATE \ - default: \ - return false; \ - } \ - break; \ - } - -#define NEXT(OBJ, NEXT_STATE) \ -case o_ ## OBJ: \ - current_fp_state = s_ ## NEXT_STATE; \ - break; - -#define NEXT_REQ_FR1(OBJ, NEXT_STATE) \ -case o_ ## OBJ: \ - { \ - if (has_fr1) \ - current_fp_state = s_ ## NEXT_STATE; \ - else \ - return false; \ - } \ - break; - -#define NEXT_REQ_FR0(OBJ, NEXT_STATE) \ -case o_ ## OBJ: \ - { \ - if (!is_r6 \ - || (is_r6 && has_fr1 && has_fre)) \ - current_fp_state = s_ ## NEXT_STATE; \ - else \ - return false; \ - } \ - break; - -#define NEXT_REQ_FRE(OBJ, NEXT_STATE) \ -case o_ ## OBJ: \ - { \ - if (has_fr1 && has_fre) \ - current_fp_state = s_ ## NEXT_STATE; \ - else \ - return false; \ - } \ - break; - -#define NEXT_NO_MODE_CHANGE(OBJ, NEXT_STATE) \ -case o_ ## OBJ: \ - { \ - if (current_mode_valid_p (s_ ## NEXT_STATE)) \ - { \ - current_fp_state = s_ ## NEXT_STATE; \ - cant_change_mode = true; \ - } \ - else \ - return false; \ - } \ - break; - -static const char * const shared_lib_names[] = - { - "tst-abi-fpanymod.so", "tst-abi-fpsoftmod.so", "tst-abi-fpsinglemod.so", - "tst-abi-fp32mod.so", "tst-abi-fp64mod.so", "tst-abi-fp64amod.so", - "tst-abi-fpxxmod.so", "tst-abi-fpxxomod.so" - }; - -struct fp_mode_req -{ - int mode1; - int mode2; - int mode3; -}; - -enum fp_obj -{ - o_any, - o_soft, - o_single, - o_fp32, - o_fp64, - o_fp64a, - o_fpxx, - o_fpxxo, - o_max -}; - -enum fp_state -{ - s_any, - s_soft, - s_single, - s_fp32, - s_fpxx, - s_fpxxo, - s_fp64a, - s_fp64, - s_fpxxo_fpxx, - s_fp32_fpxx, - s_fp32_fpxxo, - s_fp32_fpxxo_fpxx, - s_fp32_fp64a_fpxx, - s_fp32_fp64a_fpxxo, - s_fp32_fp64a_fpxxo_fpxx, - s_fp64a_fp32, - s_fp64a_fpxx, - s_fp64a_fpxxo, - s_fp64a_fp64, - s_fp64a_fp64_fpxx, - s_fp64a_fp64_fpxxo, - s_fp64a_fpxx_fpxxo, - s_fp64a_fp64_fpxxo_fpxx, - s_fp64_fpxx, - s_fp64_fpxxo, - s_fp64_fpxx_fpxxo -}; - - -static int current_fp_mode; -static bool cant_change_mode = false; -static bool has_fr1 = false; -static bool has_fre = false; -static bool is_r6 = false; -static unsigned int fp_obj_count[o_max]; -void * shared_lib_ptrs[o_max]; -static enum fp_state current_fp_state = s_any; -static enum fp_obj test_objects[FPABI_COUNT] = { FPABI_LIST }; - -/* This function will return the valid FP modes for the specified state. */ - -static struct fp_mode_req -compute_fp_modes (enum fp_state state) -{ - struct fp_mode_req requirements; - - requirements.mode1 = -1; - requirements.mode2 = -1; - requirements.mode3 = -1; - - switch (state) - { - case s_single: - { - if (is_r6) - requirements.mode1 = FR1_MODE; - else - { - requirements.mode1 = 0; - requirements.mode2 = FR1_MODE; - } - break; - } - case s_fp32: - case s_fp32_fpxx: - case s_fp32_fpxxo: - case s_fp32_fpxxo_fpxx: - { - if (is_r6) - requirements.mode1 = FRE_MODE; - else - { - requirements.mode1 = 0; - requirements.mode2 = FRE_MODE; - } - break; - } - case s_fpxx: - case s_fpxxo: - case s_fpxxo_fpxx: - case s_any: - case s_soft: - { - if (is_r6) - { - requirements.mode1 = FR1_MODE; - requirements.mode2 = FRE_MODE; - } - else - { - requirements.mode1 = 0; - requirements.mode2 = FR1_MODE; - requirements.mode3 = FRE_MODE; - } - break; - } - case s_fp64a: - case s_fp64a_fpxx: - case s_fp64a_fpxxo: - case s_fp64a_fpxx_fpxxo: - { - requirements.mode1 = FR1_MODE; - requirements.mode2 = FRE_MODE; - break; - } - case s_fp64: - case s_fp64_fpxx: - case s_fp64_fpxxo: - case s_fp64_fpxx_fpxxo: - case s_fp64a_fp64: - case s_fp64a_fp64_fpxx: - case s_fp64a_fp64_fpxxo: - case s_fp64a_fp64_fpxxo_fpxx: - { - requirements.mode1 = FR1_MODE; - break; - } - case s_fp64a_fp32: - case s_fp32_fp64a_fpxx: - case s_fp32_fp64a_fpxxo: - case s_fp32_fp64a_fpxxo_fpxx: - { - requirements.mode1 = FRE_MODE; - break; - } - } - return requirements; -} - -/* Check the current mode is suitable for the specified state. */ - -static bool -current_mode_valid_p (enum fp_state s) -{ - struct fp_mode_req req = compute_fp_modes (s); - return (req.mode1 == current_fp_mode - || req.mode2 == current_fp_mode - || req.mode3 == current_fp_mode); -} - -/* Run the state machine by adding a new object. */ - -static bool -set_next_fp_state (enum fp_obj obj) -{ - cant_change_mode = false; - switch (current_fp_state) - { - - START_STATE(soft) - NEXT(soft,soft) - NEXT(any,soft) - END_STATE - - START_STATE(single) - NEXT(single,single) - NEXT(any,single) - END_STATE - - START_STATE(any) - NEXT_REQ_FR0(fp32, fp32) - NEXT(fpxx, fpxx) - NEXT(fpxxo, fpxxo) - NEXT_REQ_FR1(fp64a, fp64a) - NEXT_REQ_FR1(fp64, fp64) - NEXT(any,any) - NEXT(soft,soft) - NEXT(single,single) - END_STATE - - START_STATE(fp32) - NEXT_REQ_FR0(fp32,fp32) - NEXT(fpxx, fp32_fpxx) - NEXT(fpxxo, fp32_fpxxo) - NEXT_REQ_FRE(fp64a, fp64a_fp32) - NEXT(any,fp32) - END_STATE - - START_STATE(fpxx) - NEXT_REQ_FR0(fp32, fp32_fpxx) - NEXT_REQ_FR1(fp64, fp64_fpxx) - NEXT_REQ_FR1(fp64a, fp64a_fpxx) - NEXT(fpxxo, fpxxo_fpxx) - NEXT(fpxx,fpxx) - NEXT(any,fpxx) - END_STATE - - START_STATE(fpxxo) - NEXT_NO_MODE_CHANGE(fp32, fp32_fpxxo) - NEXT_NO_MODE_CHANGE(fp64, fp64_fpxxo) - NEXT_NO_MODE_CHANGE(fp64a, fp64a_fpxxo) - NEXT_NO_MODE_CHANGE(fpxx, fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fpxxo,fpxxo) - NEXT_NO_MODE_CHANGE(any,fpxxo) - END_STATE - - START_STATE(fp64a) - NEXT_REQ_FRE(fp32, fp64a_fp32) - NEXT_REQ_FR1(fp64, fp64a_fp64) - NEXT(fpxxo, fp64a_fpxxo) - NEXT(fpxx, fp64a_fpxx) - NEXT_REQ_FR1(fp64a, fp64a) - NEXT(any, fp64a) - END_STATE - - START_STATE(fp64) - NEXT_REQ_FR1(fp64a, fp64a_fp64) - NEXT(fpxxo, fp64_fpxxo) - NEXT(fpxx, fp64_fpxx) - NEXT_REQ_FR1(fp64, fp64) - NEXT(any, fp64) - END_STATE - - START_STATE(fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fp32, fp32_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fp64, fp64_fpxx_fpxxo) - NEXT_NO_MODE_CHANGE(fp64a, fp64a_fpxx_fpxxo) - NEXT_NO_MODE_CHANGE(fpxx, fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fpxxo, fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(any, fpxxo_fpxx) - END_STATE - - START_STATE(fp32_fpxx) - NEXT_REQ_FR0(fp32, fp32_fpxx) - NEXT(fpxx, fp32_fpxx) - NEXT(fpxxo, fp32_fpxxo_fpxx) - NEXT_REQ_FRE(fp64a, fp32_fp64a_fpxx) - NEXT(any, fp32_fpxx) - END_STATE - - START_STATE(fp32_fpxxo) - NEXT_NO_MODE_CHANGE(fp32, fp32_fpxxo) - NEXT_NO_MODE_CHANGE(fpxxo, fp32_fpxxo) - NEXT_NO_MODE_CHANGE(fpxx, fp32_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fp64a, fp32_fp64a_fpxxo) - NEXT_NO_MODE_CHANGE(any, fp32_fpxxo) - END_STATE - - START_STATE(fp32_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fp32, fp32_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fpxxo, fp32_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fpxx, fp32_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fp64a, fp32_fp64a_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(any, fp32_fpxxo_fpxx) - END_STATE - - START_STATE(fp64a_fp32) - NEXT_REQ_FRE(fp32, fp64a_fp32) - NEXT_REQ_FRE(fp64a, fp64a_fp32) - NEXT(fpxxo, fp32_fp64a_fpxxo) - NEXT(fpxx, fp32_fp64a_fpxx) - NEXT(any, fp64a_fp32) - END_STATE - - START_STATE(fp64a_fpxx) - NEXT_REQ_FRE(fp32, fp32_fp64a_fpxx) - NEXT_REQ_FR1(fp64a, fp64a_fpxx) - NEXT(fpxx, fp64a_fpxx) - NEXT(fpxxo, fp64a_fpxx_fpxxo) - NEXT_REQ_FR1(fp64, fp64a_fp64_fpxx) - NEXT(any, fp64a_fpxx) - END_STATE - - START_STATE(fp64a_fpxxo) - NEXT_NO_MODE_CHANGE(fp32, fp32_fp64a_fpxxo) - NEXT_NO_MODE_CHANGE(fp64a, fp64a_fpxxo) - NEXT_NO_MODE_CHANGE(fpxx, fp64a_fpxx_fpxxo) - NEXT_NO_MODE_CHANGE(fpxxo, fp64a_fpxxo) - NEXT_NO_MODE_CHANGE(fp64, fp64a_fp64_fpxxo) - NEXT_NO_MODE_CHANGE(any, fp64a_fpxxo) - END_STATE - - START_STATE(fp64a_fpxx_fpxxo) - NEXT_NO_MODE_CHANGE(fp32, fp32_fp64a_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fp64a, fp64a_fpxx_fpxxo) - NEXT_NO_MODE_CHANGE(fpxx, fp64a_fpxx_fpxxo) - NEXT_NO_MODE_CHANGE(fpxxo, fp64a_fpxx_fpxxo) - NEXT_NO_MODE_CHANGE(fp64, fp64a_fp64_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(any, fp64a_fpxx_fpxxo) - END_STATE - - START_STATE(fp64_fpxx) - NEXT_REQ_FR1(fp64a, fp64a_fp64_fpxx) - NEXT(fpxxo, fp64_fpxx_fpxxo) - NEXT(fpxx, fp64_fpxx) - NEXT_REQ_FR1(fp64, fp64_fpxx) - NEXT(any, fp64_fpxx) - END_STATE - - START_STATE(fp64_fpxxo) - NEXT_NO_MODE_CHANGE(fp64a, fp64a_fp64_fpxxo) - NEXT_NO_MODE_CHANGE(fpxxo, fp64_fpxxo) - NEXT_NO_MODE_CHANGE(fpxx, fp64_fpxx_fpxxo) - NEXT_NO_MODE_CHANGE(fp64, fp64_fpxxo) - NEXT_NO_MODE_CHANGE(any, fp64_fpxxo) - END_STATE - - START_STATE(fp64_fpxx_fpxxo) - NEXT_NO_MODE_CHANGE(fp64a, fp64a_fp64_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fpxxo, fp64_fpxx_fpxxo) - NEXT_NO_MODE_CHANGE(fpxx, fp64_fpxx_fpxxo) - NEXT_NO_MODE_CHANGE(fp64, fp64_fpxx_fpxxo) - NEXT_NO_MODE_CHANGE(any, fp64_fpxx_fpxxo) - END_STATE - - START_STATE(fp64a_fp64) - NEXT_REQ_FR1(fp64a, fp64a_fp64) - NEXT(fpxxo, fp64a_fp64_fpxxo) - NEXT(fpxx, fp64a_fp64_fpxx) - NEXT_REQ_FR1(fp64, fp64a_fp64) - NEXT(any, fp64a_fp64) - END_STATE - - START_STATE(fp64a_fp64_fpxx) - NEXT_REQ_FR1(fp64a, fp64a_fp64_fpxx) - NEXT(fpxxo, fp64a_fp64_fpxxo_fpxx) - NEXT(fpxx, fp64a_fp64_fpxx) - NEXT_REQ_FR1(fp64, fp64a_fp64_fpxx) - NEXT(any, fp64a_fp64_fpxx) - END_STATE - - START_STATE(fp64a_fp64_fpxxo) - NEXT_NO_MODE_CHANGE(fp64a, fp64a_fp64_fpxxo) - NEXT_NO_MODE_CHANGE(fpxx, fp64a_fp64_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fpxxo, fp64a_fp64_fpxxo) - NEXT_NO_MODE_CHANGE(fp64, fp64a_fp64_fpxxo) - NEXT_NO_MODE_CHANGE(any, fp64a_fp64_fpxxo) - END_STATE - - START_STATE(fp64a_fp64_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fp64a, fp64a_fp64_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fpxx, fp64a_fp64_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fpxxo, fp64a_fp64_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fp64, fp64a_fp64_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(any, fp64a_fp64_fpxxo_fpxx) - END_STATE - - START_STATE(fp32_fp64a_fpxx) - NEXT_REQ_FRE(fp32, fp32_fp64a_fpxx) - NEXT_REQ_FRE(fp64a, fp32_fp64a_fpxx) - NEXT(fpxxo, fp32_fp64a_fpxxo_fpxx) - NEXT(fpxx, fp32_fp64a_fpxx) - NEXT(any, fp32_fp64a_fpxx) - END_STATE - - START_STATE(fp32_fp64a_fpxxo) - NEXT_NO_MODE_CHANGE(fp32, fp32_fp64a_fpxxo) - NEXT_NO_MODE_CHANGE(fp64a, fp32_fp64a_fpxxo) - NEXT_NO_MODE_CHANGE(fpxx, fp32_fp64a_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fpxxo, fp32_fp64a_fpxxo) - NEXT_NO_MODE_CHANGE(any, fp32_fp64a_fpxxo) - END_STATE - - START_STATE(fp32_fp64a_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fp32, fp32_fp64a_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fp64a, fp32_fp64a_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fpxx, fp32_fp64a_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(fpxxo, fp32_fp64a_fpxxo_fpxx) - NEXT_NO_MODE_CHANGE(any, fp32_fp64a_fpxxo_fpxx) - END_STATE - } - - if (obj != o_max) - fp_obj_count[obj]++; - - return true; -} - -/* Run the state machine by removing an object. */ - -static bool -remove_object (enum fp_obj obj) -{ - if (obj == o_max) - return false; - - fp_obj_count[obj]--; - - /* We can't change fp state until all the objects - of a particular type have been unloaded. */ - if (fp_obj_count[obj] != 0) - return false; - - switch (current_fp_state) - { - START_STATE(soft) - NEXT(soft,any) - END_STATE - - START_STATE(single) - NEXT(single,any) - END_STATE - - START_STATE(any) - NEXT(any,any) - END_STATE - - START_STATE(fp32) - NEXT (fp32,any) - END_STATE - - START_STATE(fpxx) - NEXT (fpxx,any) - END_STATE - - START_STATE(fpxxo) - NEXT (fpxxo,any) - END_STATE - - START_STATE(fp64a) - NEXT(fp64a, any) - END_STATE - - START_STATE(fp64) - NEXT(fp64, any) - END_STATE - - START_STATE(fpxxo_fpxx) - NEXT(fpxx, fpxxo) - NEXT(fpxxo, fpxx) - END_STATE - - START_STATE(fp32_fpxx) - NEXT(fp32, fpxx) - NEXT(fpxx, fp32) - END_STATE - - START_STATE(fp32_fpxxo) - NEXT(fp32, fpxxo) - NEXT(fpxxo, fp32) - END_STATE - - START_STATE(fp32_fpxxo_fpxx) - NEXT(fp32, fpxxo_fpxx) - NEXT(fpxxo, fp32_fpxx) - NEXT(fpxx, fp32_fpxxo) - END_STATE - - START_STATE(fp64a_fp32) - NEXT(fp32, fp64a) - NEXT(fp64a, fp32) - END_STATE - - START_STATE(fp64a_fpxx) - NEXT(fp64a, fpxx) - NEXT(fpxx, fp64a) - END_STATE - - START_STATE(fp64a_fpxxo) - NEXT(fp64a, fpxxo) - NEXT(fpxxo, fp64a) - END_STATE - - START_STATE(fp64a_fpxx_fpxxo) - NEXT(fp64a, fpxxo_fpxx) - NEXT(fpxx, fp64a_fpxxo) - NEXT(fpxxo, fp64a_fpxx) - END_STATE - - START_STATE(fp64_fpxx) - NEXT(fpxx, fp64) - NEXT(fp64, fpxx) - END_STATE - - START_STATE(fp64_fpxxo) - NEXT(fpxxo, fp64) - NEXT(fp64, fpxxo) - END_STATE - - START_STATE(fp64_fpxx_fpxxo) - NEXT(fp64, fpxxo_fpxx) - NEXT(fpxxo, fp64_fpxx) - NEXT(fpxx, fp64_fpxxo) - END_STATE - - START_STATE(fp64a_fp64) - NEXT(fp64a, fp64) - NEXT(fp64, fp64a) - END_STATE - - START_STATE(fp64a_fp64_fpxx) - NEXT(fp64a, fp64_fpxx) - NEXT(fpxx, fp64a_fp64) - NEXT(fp64, fp64a_fpxx) - END_STATE - - START_STATE(fp64a_fp64_fpxxo) - NEXT(fp64a, fp64_fpxxo) - NEXT(fpxxo, fp64a_fp64) - NEXT(fp64, fp64a_fpxxo) - END_STATE - - START_STATE(fp64a_fp64_fpxxo_fpxx) - NEXT(fp64a, fp64_fpxx_fpxxo) - NEXT(fpxx, fp64a_fp64_fpxxo) - NEXT(fpxxo, fp64a_fp64_fpxx) - NEXT(fp64, fp64a_fpxx_fpxxo) - END_STATE - - START_STATE(fp32_fp64a_fpxx) - NEXT(fp32, fp64a_fpxx) - NEXT(fp64a, fp32_fpxx) - NEXT(fpxx, fp64a_fp32) - END_STATE - - START_STATE(fp32_fp64a_fpxxo) - NEXT(fp32, fp64a_fpxxo) - NEXT(fp64a, fp32_fpxxo) - NEXT(fpxxo, fp64a_fp32) - END_STATE - - START_STATE(fp32_fp64a_fpxxo_fpxx) - NEXT(fp32, fp64a_fpxx_fpxxo) - NEXT(fp64a, fp32_fpxxo_fpxx) - NEXT(fpxx, fp32_fp64a_fpxxo) - NEXT(fpxxo, fp32_fp64a_fpxx) - END_STATE - } - - return true; -} - -static int -mode_transition_valid_p (void) -{ - int prev_fp_mode; - - /* Get the current fp mode. */ - prev_fp_mode = current_fp_mode; -#if HAVE_PRCTL_FP_MODE - current_fp_mode = prctl (PR_GET_FP_MODE); - - /* If the prctl call fails assume the core only has FR0 mode support. */ - if (current_fp_mode == -1) - current_fp_mode = 0; -#endif - - if (!current_mode_valid_p (current_fp_state)) - return 0; - - /* Check if mode changes are not allowed but a mode change happened. */ - if (cant_change_mode - && current_fp_mode != prev_fp_mode) - return 0; - - return 1; -} - -/* Load OBJ and check that it was/was not loaded correctly. */ -bool -load_object (enum fp_obj obj) -{ - bool should_load = set_next_fp_state (obj); - - shared_lib_ptrs[obj] = dlopen (shared_lib_names[obj], RTLD_LAZY); - - /* If we expected an error and the load was successful then fail. */ - if (!should_load && (shared_lib_ptrs[obj] != 0)) - return false; - - if (should_load && (shared_lib_ptrs[obj] == 0)) - return false; - - if (!mode_transition_valid_p ()) - return false; - - return true; -} - -/* Remove an object and check the state remains valid. */ -bool -unload_object (enum fp_obj obj) -{ - if (!shared_lib_ptrs[obj]) - return true; - - remove_object (obj); - - if (dlclose (shared_lib_ptrs[obj]) != 0) - return false; - - shared_lib_ptrs[obj] = 0; - - if (!mode_transition_valid_p ()) - return false; - - return true; -} - -/* Load every permuation of OBJECTS. */ -static bool -test_permutations (enum fp_obj objects[], int count) -{ - int i; - - for (i = 0 ; i < count ; i++) - { - if (!load_object (objects[i])) - return false; - - if (count > 1) - { - enum fp_obj new_objects[count - 1]; - int j; - int k = 0; - - for (j = 0 ; j < count ; j++) - { - if (j != i) - new_objects[k++] = objects[j]; - } - - if (!test_permutations (new_objects, count - 1)) - return false; - } - - if (!unload_object (objects[i])) - return false; - } - return true; -} - -int -do_test (void) -{ -#if HAVE_PRCTL_FP_MODE - /* Determine available hardware support and current mode. */ - current_fp_mode = prctl (PR_GET_FP_MODE); - - /* If the prctl call fails assume the core only has FR0 mode support. */ - if (current_fp_mode == -1) - current_fp_mode = 0; - else - { - if (prctl (PR_SET_FP_MODE, 0) != 0) - { - if (errno == ENOTSUP) - is_r6 = true; - else - { - printf ("unexpected error from PR_SET_FP_MODE, 0: %m\n"); - return 1; - } - } - - if (prctl (PR_SET_FP_MODE, PR_FP_MODE_FR) != 0) - { - if (errno != ENOTSUP) - { - printf ("unexpected error from PR_SET_FP_MODE, " - "PR_FP_MODE_FR: %m\n"); - return 1; - } - } - else - has_fr1 = true; - - if (prctl (PR_SET_FP_MODE, PR_FP_MODE_FR | PR_FP_MODE_FRE) != 0) - { - if (errno != ENOTSUP) - { - printf ("unexpected error from PR_SET_FP_MODE, " - "PR_FP_MODE_FR | PR_FP_MODE_FRE: %m\n"); - return 1; - } - } - else - has_fre = true; - - if (prctl (PR_SET_FP_MODE, current_fp_mode) != 0) - { - printf ("unable to restore initial FP mode: %m\n"); - return 1; - } - } - - if ((is_r6 && !(current_fp_mode & PR_FP_MODE_FR)) - || (!has_fr1 && (current_fp_mode & PR_FP_MODE_FR)) - || (!has_fre && (current_fp_mode & PR_FP_MODE_FRE))) - { - puts ("Inconsistency detected between initial FP mode " - "and supported FP modes\n"); - return 1; - } -#else - current_fp_mode = 0; -#endif - - /* Set up the initial state from executable and LDSO. Assumptions: - 1) All system libraries have the same ABI as ld.so. - 2) Due to the fact that ld.so is tested by invoking it directly - rather than via an interpreter, there is no point in varying - the ABI of the test program. Instead the ABI only varies for - the shared libraries which get loaded. */ - if (!set_next_fp_state (FPABI_NATIVE)) - { - puts ("Unable to enter initial ABI state\n"); - return 1; - } - - /* Compare the computed state with the hardware state. */ - if (!mode_transition_valid_p ()) - return 1; - - /* Run all possible test permutations. */ - if (!test_permutations (test_objects, FPABI_COUNT)) - { - puts ("Mode checks failed\n"); - return 1; - } - - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../../test-skeleton.c" diff --git a/sysdeps/mips/tst-audit.h b/sysdeps/mips/tst-audit.h deleted file mode 100644 index c9c6ddb079..0000000000 --- a/sysdeps/mips/tst-audit.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. ARM version. - - Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#if _MIPS_SIM == _ABIO32 -#define pltenter la_mips_o32_gnu_pltenter -#define pltexit la_mips_o32_gnu_pltexit -#define La_regs La_mips_32_regs -#define La_retval La_mips_32_retval -#else -#if _MIPS_SIM == _ABIN32 -#define pltenter la_mips_n32_gnu_pltenter -#define pltexit la_mips_n32_gnu_pltexit -#else -#define pltenter la_mips_n64_gnu_pltenter -#define pltexit la_mips_n64_gnu_pltexit -#endif -#define La_regs La_mips_64_regs -#define La_retval La_mips_64_retval -#endif -#define int_retval lrv_v0 diff --git a/sysdeps/mips/tst-mode-switch-1.c b/sysdeps/mips/tst-mode-switch-1.c deleted file mode 100644 index cdfa5aa859..0000000000 --- a/sysdeps/mips/tst-mode-switch-1.c +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#if __mips_fpr != 0 || _MIPS_SPFPSET != 16 -# error This test requires -mfpxx -mno-odd-spreg -#endif - -/* This test verifies that mode changes do not clobber register state - in other threads. */ - -static volatile int finished; -static int mode[6] = - { - 0, - PR_FP_MODE_FR, - PR_FP_MODE_FR | PR_FP_MODE_FRE, - PR_FP_MODE_FR, - 0, - PR_FP_MODE_FR | PR_FP_MODE_FRE - }; - -static void * -thread_function (void * arg __attribute__ ((unused))) -{ - volatile int i = 0; - volatile float f = 0.0; - volatile double d = 0.0; - - while (!finished) - { - if ((float) i != f || (double) i != d) - { - printf ("unexpected value: i(%d) f(%f) d(%f)\n", i, f, d); - exit (1); - } - - if (i == 100) - { - i = 0; - f = 0.0; - d = 0.0; - } - - i++; - f++; - d++; - } - return NULL; -} - -static int -do_test (void) -{ - int count = sysconf (_SC_NPROCESSORS_ONLN); - if (count <= 0) - count = 1; - count *= 4; - - pthread_t th[count]; - int i; - int result = 0; - - for (i = 0; i < count; ++i) - if (pthread_create (&th[i], NULL, thread_function, 0) != 0) - { - printf ("creation of thread %d failed\n", i); - exit (1); - } - - for (i = 0 ; i < 1000000 ; i++) - { - if (prctl (PR_SET_FP_MODE, mode[i % 6]) != 0 - && errno != ENOTSUP) - { - printf ("prctl PR_SET_FP_MODE failed: %m\n"); - exit (1); - } - } - - finished = 1; - - for (i = 0; i < count; ++i) - { - void *v; - if (pthread_join (th[i], &v) != 0) - { - printf ("join of thread %d failed\n", i); - result = 1; - } - else if (v != NULL) - { - printf ("join %d successful, but child failed\n", i); - result = 1; - } - else - printf ("join %d successful\n", i); - } - - return result; -} - -#define TEST_FUNCTION do_test () -#include "../../test-skeleton.c" diff --git a/sysdeps/mips/tst-mode-switch-2.c b/sysdeps/mips/tst-mode-switch-2.c deleted file mode 100644 index 6fd1e914a9..0000000000 --- a/sysdeps/mips/tst-mode-switch-2.c +++ /dev/null @@ -1,166 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#if __mips_fpr != 0 || _MIPS_SPFPSET != 16 -# error This test requires -mfpxx -mno-odd-spreg -#endif - -/* This test verifies that all threads in a process see a mode - change when any thread causes a mode change. */ - -static int mode[6] = - { - 0, - PR_FP_MODE_FR, - PR_FP_MODE_FR | PR_FP_MODE_FRE, - PR_FP_MODE_FR, - 0, - PR_FP_MODE_FR | PR_FP_MODE_FRE - }; -static volatile int current_mode; -static volatile int finished; -static pthread_barrier_t barr_ready; -static pthread_barrier_t barr_cont; - -static void * -thread_function (void * arg __attribute__ ((unused))) -{ - while (!finished) - { - int res = pthread_barrier_wait (&barr_ready); - - if (res != 0 && res != PTHREAD_BARRIER_SERIAL_THREAD) - { - printf ("barrier wait failed: %m\n"); - exit (1); - } - - int mode = prctl (PR_GET_FP_MODE); - - if (mode != current_mode) - { - printf ("unexpected mode: %d != %d\n", mode, current_mode); - exit (1); - } - - res = pthread_barrier_wait (&barr_cont); - - if (res != 0 && res != PTHREAD_BARRIER_SERIAL_THREAD) - { - printf ("barrier wait failed: %m\n"); - exit (1); - } - } - return NULL; -} - -static int -do_test (void) -{ - int count = sysconf (_SC_NPROCESSORS_ONLN); - if (count <= 0) - count = 1; - count *= 4; - - pthread_t th[count]; - int i; - int result = 0; - - if (pthread_barrier_init (&barr_ready, NULL, count + 1) != 0) - { - printf ("failed to initialize barrier: %m\n"); - exit (1); - } - - if (pthread_barrier_init (&barr_cont, NULL, count + 1) != 0) - { - printf ("failed to initialize barrier: %m\n"); - exit (1); - } - - for (i = 0; i < count; ++i) - if (pthread_create (&th[i], NULL, thread_function, 0) != 0) - { - printf ("creation of thread %d failed\n", i); - exit (1); - } - - for (i = 0 ; i < 7 ; i++) - { - if (prctl (PR_SET_FP_MODE, mode[i % 6]) != 0) - { - if (errno != ENOTSUP) - { - printf ("prctl PR_SET_FP_MODE failed: %m"); - exit (1); - } - } - else - current_mode = mode[i % 6]; - - - int res = pthread_barrier_wait (&barr_ready); - - if (res != 0 && res != PTHREAD_BARRIER_SERIAL_THREAD) - { - printf ("barrier wait failed: %m\n"); - exit (1); - } - - if (i == 6) - finished = 1; - - res = pthread_barrier_wait (&barr_cont); - - if (res != 0 && res != PTHREAD_BARRIER_SERIAL_THREAD) - { - printf ("barrier wait failed: %m\n"); - exit (1); - } - } - - for (i = 0; i < count; ++i) - { - void *v; - if (pthread_join (th[i], &v) != 0) - { - printf ("join of thread %d failed\n", i); - result = 1; - } - else if (v != NULL) - { - printf ("join %d successful, but child failed\n", i); - result = 1; - } - else - printf ("join %d successful\n", i); - } - - return result; -} - -#define TEST_FUNCTION do_test () -#include "../../test-skeleton.c" diff --git a/sysdeps/mips/tst-mode-switch-3.c b/sysdeps/mips/tst-mode-switch-3.c deleted file mode 100644 index 405eacdf5a..0000000000 --- a/sysdeps/mips/tst-mode-switch-3.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -#if __mips_fpr != 0 || _MIPS_SPFPSET != 16 -# error This test requires -mfpxx -mno-odd-spreg -#endif - -/* This test verifies that mode changes between a setjmp and longjmp do - not corrupt the state of callee-saved registers. */ - -static int mode[6] = - { - 0, - PR_FP_MODE_FR, - PR_FP_MODE_FR | PR_FP_MODE_FRE, - PR_FP_MODE_FR, - 0, - PR_FP_MODE_FR | PR_FP_MODE_FRE - }; -static jmp_buf env; -float check1 = 2.0; -double check2 = 3.0; - -static int -do_test (void) -{ - int i; - int result = 0; - - for (i = 0 ; i < 7 ; i++) - { - int retval; - register float test1 __asm ("$f20"); - register double test2 __asm ("$f22"); - - /* Hide what we are doing to $f20 and $f22 from the compiler. */ - __asm __volatile ("l.s %0,%2\n" - "l.d %1,%3\n" - : "=f" (test1), "=f" (test2) - : "m" (check1), "m" (check2)); - - retval = setjmp (env); - - /* Make sure the compiler knows we want to access the variables - via the named registers again. */ - __asm __volatile ("" : : "f" (test1), "f" (test2)); - - if (test1 != check1 || test2 != check2) - { - printf ("Corrupt register detected: $20 %f = %f, $22 %f = %f\n", - test1, check1, test2, check2); - result = 1; - } - - if (retval == 0) - { - if (prctl (PR_SET_FP_MODE, mode[i % 6]) != 0 - && errno != ENOTSUP) - { - printf ("prctl PR_SET_FP_MODE failed: %m"); - exit (1); - } - longjmp (env, 0); - } - } - - return result; -} - -#define TEST_FUNCTION do_test () -#include "../../test-skeleton.c" diff --git a/sysdeps/nios2/Implies b/sysdeps/nios2/Implies deleted file mode 100644 index 387a0ca052..0000000000 --- a/sysdeps/nios2/Implies +++ /dev/null @@ -1,3 +0,0 @@ -wordsize-32 -ieee754/dbl-64 -ieee754/flt-32 diff --git a/sysdeps/nios2/Makefile b/sysdeps/nios2/Makefile deleted file mode 100644 index 75cab5e5b8..0000000000 --- a/sysdeps/nios2/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (C) 1993-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# . - -pic-ccflag = -fpic - -# We don't support long doubles as a distinct type. We don't need to set -# this variable; it's here mostly for documentational purposes. -long-double-fcts = no - -ifeq ($(subdir),soft-fp) -sysdep_routines += $(filter-out sqrtsf2,$(gcc-single-routines)) \ - $(filter-out sqrtdf2,$(gcc-double-routines)) -endif - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif - -ifeq ($(subdir),debug) -CFLAGS-backtrace.c += -funwind-tables -endif diff --git a/sysdeps/nios2/Subdirs b/sysdeps/nios2/Subdirs deleted file mode 100644 index 87eadf3024..0000000000 --- a/sysdeps/nios2/Subdirs +++ /dev/null @@ -1 +0,0 @@ -soft-fp diff --git a/sysdeps/nios2/Versions b/sysdeps/nios2/Versions deleted file mode 100644 index 48a23519d9..0000000000 --- a/sysdeps/nios2/Versions +++ /dev/null @@ -1,12 +0,0 @@ -libc { - GLIBC_2.21 { - __adddf3; __addsf3; __divdf3; __divsf3; __eqdf2; __eqsf2; __extendsfdf2; - __fixdfdi; __fixdfsi; __fixsfdi; __fixsfsi; - __fixunsdfdi; __fixunsdfsi; __fixunssfdi; __fixunssfsi; - __floatdidf; __floatdisf; __floatsidf; __floatsisf; - __floatundidf; __floatundisf; __floatunsidf; __floatunsisf; - __gedf2; __gesf2; __gtdf2; __gtsf2; __ledf2; __lesf2; __ltdf2; __ltsf2; - __muldf3; __mulsf3; __nedf2; __nesf2; __negdf2; __negsf2; - __subdf3; __subsf3; __truncdfsf2; __unorddf2; __unordsf2; - } -} diff --git a/sysdeps/nios2/__longjmp.S b/sysdeps/nios2/__longjmp.S deleted file mode 100644 index 0b84ac63d7..0000000000 --- a/sysdeps/nios2/__longjmp.S +++ /dev/null @@ -1,80 +0,0 @@ -/* longjmp for Nios II. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* __longjmp(jmpbuf, val) */ - -ENTRY (__longjmp) - mov r2, r5 - bne r5, zero, 1f - movi r2, 1 -1: -#ifdef PTR_DEMANGLE - PTR_MANGLE_GUARD (r3) - ldw r5, (JB_RA*4)(r4) - ldw r6, (JB_SP*4)(r4) - PTR_DEMANGLE (r5, r5, r3) - PTR_DEMANGLE (r6, r6, r3) -#endif - - cfi_def_cfa (r4, 0) - cfi_offset (r16, JB_R16*4) - cfi_offset (r17, JB_R17*4) - cfi_offset (r18, JB_R18*4) - cfi_offset (r19, JB_R19*4) - cfi_offset (r20, JB_R20*4) - cfi_offset (r21, JB_R21*4) - cfi_offset (r22, JB_R22*4) - cfi_offset (fp, JB_FP*4) -#ifdef PTR_DEMANGLE - cfi_register (ra, r5) - cfi_register (sp, r7) -#else - cfi_offset (ra, JB_RA*4) - cfi_offset (sp, JB_SP*4) -#endif - ldw r16, (JB_R16*4)(r4) - ldw r17, (JB_R17*4)(r4) - ldw r18, (JB_R18*4)(r4) - ldw r19, (JB_R19*4)(r4) - ldw r20, (JB_R20*4)(r4) - ldw r21, (JB_R21*4)(r4) - ldw r22, (JB_R22*4)(r4) - ldw fp, (JB_FP*4)(r4) -#ifdef PTR_DEMANGLE - mov ra, r5 - mov sp, r6 -#else - ldw ra, (JB_RA*4)(r4) - ldw sp, (JB_SP*4)(r4) -#endif - cfi_same_value (r16) - cfi_same_value (r17) - cfi_same_value (r18) - cfi_same_value (r19) - cfi_same_value (r20) - cfi_same_value (r21) - cfi_same_value (r22) - cfi_same_value (fp) - cfi_same_value (ra) - cfi_same_value (sp) - - ret -END (__longjmp) diff --git a/sysdeps/nios2/abort-instr.h b/sysdeps/nios2/abort-instr.h deleted file mode 100644 index 17502e4a70..0000000000 --- a/sysdeps/nios2/abort-instr.h +++ /dev/null @@ -1,2 +0,0 @@ -/* An instruction which should crash any program is an unused trap. */ -#define ABORT_INSTRUCTION asm ("trap 31") diff --git a/sysdeps/nios2/backtrace.c b/sysdeps/nios2/backtrace.c deleted file mode 100644 index 27ce597b39..0000000000 --- a/sysdeps/nios2/backtrace.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/nios2/bits/endian.h b/sysdeps/nios2/bits/endian.h deleted file mode 100644 index 164f9e4d78..0000000000 --- a/sysdeps/nios2/bits/endian.h +++ /dev/null @@ -1,12 +0,0 @@ -/* The Nios II architecture has selectable endianness. */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#ifdef __nios2_big_endian__ -# define __BYTE_ORDER __BIG_ENDIAN -#endif -#ifdef __nios2_little_endian__ -# define __BYTE_ORDER __LITTLE_ENDIAN -#endif diff --git a/sysdeps/nios2/bits/fenv.h b/sysdeps/nios2/bits/fenv.h deleted file mode 100644 index 7e74275208..0000000000 --- a/sysdeps/nios2/bits/fenv.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - -/* The Altera specified Nios II hardware FPU does not support exceptions, - nor does the software floating-point support. */ -#define FE_ALL_EXCEPT 0 - -/* Nios II supports only round-to-nearest. The software - floating-point support also acts this way. */ -enum - { - __FE_UNDEFINED = 0, - - FE_TONEAREST = -#define FE_TONEAREST 1 - FE_TONEAREST, - }; - -/* Type representing exception flags. */ -typedef unsigned int fexcept_t; - -/* Type representing floating-point environment. */ -typedef unsigned int fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1) - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef unsigned int femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) -1L) -#endif diff --git a/sysdeps/nios2/bits/link.h b/sysdeps/nios2/bits/link.h deleted file mode 100644 index 161efcbfe2..0000000000 --- a/sysdeps/nios2/bits/link.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Machine-specific declarations for dynamic linker interface, Nios II version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - -/* Registers for entry into PLT on Nios II. */ -typedef struct La_nios2_regs -{ - uint32_t lr_reg[4]; /* r4 through r7 */ - uint32_t lr_ra; - uint32_t lr_sp; -} La_nios2_regs; - -/* Return values for calls from PLT on Nios II. */ -typedef struct La_nios2_retval -{ - uint32_t lrv_r2; - uint32_t lrv_r3; -} La_nios2_retval; - -__BEGIN_DECLS - -extern Elf32_Addr la_nios2_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_nios2_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_nios2_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_nios2_regs *__inregs, - La_nios2_retval *__outregs, - const char *symname); - -__END_DECLS diff --git a/sysdeps/nios2/bits/setjmp.h b/sysdeps/nios2/bits/setjmp.h deleted file mode 100644 index a66e11533c..0000000000 --- a/sysdeps/nios2/bits/setjmp.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Define the machine-dependent type `jmp_buf'. Nios II version. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _NIOS2_BITS_SETJMP_H -#define _NIOS2_BITS_SETJMP_H 1 - -#if !defined(_SETJMP_H) && !defined(_PTHREAD_H) -# error "Never include directly; use instead." -#endif - -/* Saves r16-r22 (callee-saved, including GOT pointer), fp (frame pointer), - ra (return address), and sp (stack pointer). */ -typedef int __jmp_buf[10]; - -#endif /* _NIOS2_BITS_SETJMP_H */ diff --git a/sysdeps/nios2/bsd-_setjmp.S b/sysdeps/nios2/bsd-_setjmp.S deleted file mode 100644 index 4e6a2da560..0000000000 --- a/sysdeps/nios2/bsd-_setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* _setjmp is in setjmp.S */ diff --git a/sysdeps/nios2/bsd-setjmp.S b/sysdeps/nios2/bsd-setjmp.S deleted file mode 100644 index 1da848d2f1..0000000000 --- a/sysdeps/nios2/bsd-setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* setjmp is in setjmp.S */ diff --git a/sysdeps/nios2/configure b/sysdeps/nios2/configure deleted file mode 100644 index 14c8a3a014..0000000000 --- a/sysdeps/nios2/configure +++ /dev/null @@ -1,162 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/nios2. - -# Nios II big endian is not yet supported. - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for big endian" >&5 -$as_echo_n "checking for big endian... " >&6; } -if ${libc_cv_nios2_be+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __nios2_big_endian__ - yes - #endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - libc_cv_nios2_be=yes -else - libc_cv_nios2_be=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_nios2_be" >&5 -$as_echo "$libc_cv_nios2_be" >&6; } -if test $libc_cv_nios2_be = yes; then - as_fn_error $? "Big endian not supported for Nios II" "$LINENO" 5 -fi diff --git a/sysdeps/nios2/configure.ac b/sysdeps/nios2/configure.ac deleted file mode 100644 index f05f43802b..0000000000 --- a/sysdeps/nios2/configure.ac +++ /dev/null @@ -1,13 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/nios2. - -# Nios II big endian is not yet supported. -AC_CACHE_CHECK([for big endian], - [libc_cv_nios2_be], - [AC_EGREP_CPP(yes,[#ifdef __nios2_big_endian__ - yes - #endif - ], libc_cv_nios2_be=yes, libc_cv_nios2_be=no)]) -if test $libc_cv_nios2_be = yes; then - AC_MSG_ERROR([Big endian not supported for Nios II]) -fi diff --git a/sysdeps/nios2/crti.S b/sysdeps/nios2/crti.S deleted file mode 100644 index d37c72187a..0000000000 --- a/sysdeps/nios2/crti.S +++ /dev/null @@ -1,96 +0,0 @@ -/* Special .init and .fini section support for Nios II. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - - .section .init,"ax",@progbits - .align 2 - .global _init - .type _init, @function -_init: - addi sp, sp, -8 - stw r22, 0(sp) - nextpc r22 - 1: - movhi r8, %hiadj(_gp_got - 1b) - addi r8, r8, %lo(_gp_got - 1b) - add r22, r22, r8 - stw ra, 4(sp) -#if PREINIT_FUNCTION_WEAK - movhi r2, %got_hiadj(PREINIT_FUNCTION) - addi r2, r2, %got_lo(PREINIT_FUNCTION) - add r2, r2, r22 - ldw r2, 0(r2) - beq r2, zero, .L5 -#endif - movhi r2, %call_hiadj(PREINIT_FUNCTION) - addi r2, r2, %call_lo(PREINIT_FUNCTION) - add r2, r2, r22 - ldw r2, 0(r2) - callr r2 -.L5: - - .section .fini,"ax",@progbits - .align 2 - .global _fini - .type _fini, @function -_fini: - addi sp, sp, -8 - stw r22, 0(sp) - nextpc r22 - 1: - movhi r8, %hiadj(_gp_got - 1b) - addi r8, r8, %lo(_gp_got - 1b) - stw ra, 4(sp) - add r22, r22, r8 diff --git a/sysdeps/nios2/crtn.S b/sysdeps/nios2/crtn.S deleted file mode 100644 index 3e7d2cceea..0000000000 --- a/sysdeps/nios2/crtn.S +++ /dev/null @@ -1,49 +0,0 @@ -/* Special .init and .fini section support for Nios II. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .section .init,"ax",@progbits - ldw ra, 4(sp) - ldw r22, 0(sp) - addi sp, sp, 8 - ret - - .section .fini,"ax",@progbits - ldw ra, 4(sp) - ldw r22, 0(sp) - addi sp, sp, 8 - ret diff --git a/sysdeps/nios2/dl-init.c b/sysdeps/nios2/dl-init.c deleted file mode 100644 index 5d3d0edc68..0000000000 --- a/sysdeps/nios2/dl-init.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Nios II specific procedures for initializing code. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -unsigned int -internal_function -_dl_nios2_get_gp_value (struct link_map *main_map) -{ - ElfW(Dyn) *dyn = main_map->l_ld; - for (dyn = main_map->l_ld; dyn->d_tag != DT_NULL; ++dyn) - if (dyn->d_tag == DT_NIOS2_GP) - return (unsigned int)(dyn->d_un.d_ptr); - return 0; -} diff --git a/sysdeps/nios2/dl-machine.h b/sysdeps/nios2/dl-machine.h deleted file mode 100644 index 8d2b18de23..0000000000 --- a/sysdeps/nios2/dl-machine.h +++ /dev/null @@ -1,336 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. Nios II version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "nios2" - -#include -#include -#include - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf32_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_ALTERA_NIOS2; -} - - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. */ -static inline Elf32_Addr -elf_machine_dynamic (void) -{ - Elf32_Addr *dynamic; - int tmp; - asm ("nextpc\t%0\n\t" - "1: movhi\t%1, %%hiadj(_GLOBAL_OFFSET_TABLE_ - 1b)\n\t" - "addi\t%1, %1, %%lo(_GLOBAL_OFFSET_TABLE_ - 1b)\n\t" - "add\t%0, %0, %1\n" - : "=r" (dynamic), "=r" (tmp)); - return *dynamic; -} - - -/* Return the run-time load address of the shared object. */ -static inline Elf32_Addr -elf_machine_load_address (void) -{ - Elf32_Addr result; - int tmp; - asm ("nextpc\t%0\n\t" - "1: movhi\t%1, %%hiadj(1b)\n\t" - "addi\t%1, %1, %%lo(1b)\n\t" - "sub\t%0, %0, %1\n" - : "=r" (result), "=r" (tmp)); - return result; -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int __attribute__ ((always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - extern void _dl_runtime_resolve (Elf32_Word); - - if (l->l_info[DT_JMPREL] && lazy) - { - /* The GOT entries for functions in the PLT have not yet been filled - in. Their initial contents will arrange when called to load r15 with - an offset into the .got section, load r14 with - _GLOBAL_OFFSET_TABLE_[1], and then jump to _GLOBAL_OFFSET_TABLE[2]. - */ - Elf32_Addr *got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]); - got[1] = (Elf32_Addr) l; /* Identify this shared object. */ - - /* This function will get called to fix up the GOT entry indicated by - the offset on the stack, and then jump to the resolved address. */ - got[2] = (Elf32_Addr) &_dl_runtime_resolve; - } - - return lazy; -} - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START asm ("\ -.text\n\ -.globl _start\n\ -.type _start, %function\n\ -_start:\n\ - /* At start time, all the args are on the stack. */\n\ - mov r4, sp\n\ -\n\ - /* Start the calculation of the GOT pointer. */\n\ - nextpc r22\n\ -1: movhi r8, %hiadj(_gp_got - 1b)\n\ - addi r8, r8, %lo(_gp_got - 1b)\n\ -\n\ - /* Figure out where _dl_start will need to return to. */\n\ - movhi ra, %hiadj(2f - 1b)\n\ - addi ra, ra, %lo(2f - 1b)\n\ - add ra, ra, r22\n\ -\n\ - /* Finish the calculation of the GOT pointer. */\n\ - add r22, r22, r8\n\ -\n\ - br _dl_start\n\ -\n\ - /* Save the returned user entry point. */\n\ -2: mov r16, r2\n\ -\n\ - /* Initialize gp. */\n\ - ldw r4, %got(_rtld_local)(r22)\n\ - ldw r4, 0(r4)\n\ - ldw r8, %call(_dl_nios2_get_gp_value)(r22)\n\ - callr r8\n\ - mov gp, r2\n\ -\n\ - /* Find the number of arguments to skip. */\n\ - ldw r8, %got(_dl_skip_args)(r22)\n\ - ldw r8, 0(r8)\n\ -\n\ - /* Find the main_map from the GOT. */\n\ - ldw r4, %got(_rtld_local)(r22)\n\ - ldw r4, 0(r4)\n\ -\n\ - /* Find argc. */\n\ - ldw r5, 0(sp)\n\ - sub r5, r5, r8\n\ - stw r5, 0(sp)\n\ -\n\ - /* Find the first unskipped argument. */\n\ - slli r8, r8, 2\n\ - addi r6, sp, 4\n\ - add r9, r6, r8\n\ - mov r10, r6\n\ -\n\ - /* Shuffle argv down. */\n\ -3: ldw r11, 0(r9)\n\ - stw r11, 0(r10)\n\ - addi r9, r9, 4\n\ - addi r10, r10, 4\n\ - bne r11, zero, 3b\n\ -\n\ - /* Shuffle envp down. */\n\ - mov r7, r10\n\ -4: ldw r11, 0(r9)\n\ - stw r11, 0(r10)\n\ - addi r9, r9, 4\n\ - addi r10, r10, 4\n\ - bne r11, zero, 4b\n\ -\n\ - /* Shuffle auxv down. */\n\ -5: ldw r11, 4(r9)\n\ - stw r11, 4(r10)\n\ - ldw r11, 0(r9)\n\ - stw r11, 0(r10)\n\ - addi r9, r9, 8\n\ - addi r10, r10, 8\n\ - bne r11, zero, 5b\n\ -\n\ - /* Update _dl_argv. */\n\ - ldw r2, %got(_dl_argv)(r22)\n\ - stw r6, 0(r2)\n\ -\n\ - /* Call _dl_init through the PLT. */\n\ - ldw r8, %call(_dl_init)(r22)\n\ - callr r8\n\ -\n\ - /* Find the finalization function. */\n\ - ldw r4, %got(_dl_fini)(r22)\n\ -\n\ - /* Jump to the user's entry point. */\n\ - jmp r16\n\ -"); - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so - PLT entries should not be allowed to define the value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. */ -#define elf_machine_type_class(type) \ - ((((type) == R_NIOS2_JUMP_SLOT \ - || (type) == R_NIOS2_TLS_DTPMOD \ - || (type) == R_NIOS2_TLS_DTPREL \ - || (type) == R_NIOS2_TLS_TPREL) * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_NIOS2_COPY) * ELF_RTYPE_CLASS_COPY) \ - | (((type) == R_NIOS2_GLOB_DAT) * ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA)) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_NIOS2_JUMP_SLOT - -/* The Nios II never uses Elf32_Rel relocations. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -/* Fixup a PLT entry to bounce directly to the function at VALUE. */ - -static inline Elf32_Addr -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf32_Rela *reloc, - Elf32_Addr *reloc_addr, Elf32_Addr value) -{ - return *reloc_addr = value; -} - -/* Return the final value of a plt relocation. */ -static inline Elf32_Addr -elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, - Elf32_Addr value) -{ - return value; -} - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER nios2_gnu_pltenter -#define ARCH_LA_PLTEXIT nios2_gnu_pltexit - -#endif /* dl_machine_h */ - -#ifdef RESOLVE_MAP - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - LOADADDR is the load address of the object; INFO is an array indexed - by DT_* of the .dynamic section info. */ - -auto inline void __attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, - const ElfW(Sym) *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - - if (__glibc_unlikely (r_type == R_NIOS2_RELATIVE)) - *reloc_addr = map->l_addr + reloc->r_addend; - else if (__glibc_unlikely (r_type == R_NIOS2_NONE)) - return; - else - { - const Elf32_Sym *const refsym = sym; - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value; - - switch (r_type) - { - case R_NIOS2_COPY: - if (sym == NULL) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (sym->st_size > refsym->st_size - || (sym->st_size < refsym->st_size && GLRO(dl_verbose))) - { - const char *strtab; - - strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - rtld_progname ?: "", - strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - break; - case R_NIOS2_GLOB_DAT: - case R_NIOS2_JUMP_SLOT: -# ifdef RTLD_BOOTSTRAP - /* Fix weak undefined references. */ - if (sym != NULL && sym->st_value == 0) - *reloc_addr = 0; - else -# endif - *reloc_addr = value; - break; -#ifndef RTLD_BOOTSTRAP - case R_NIOS2_TLS_DTPMOD: - /* Get the information from the link map returned by the - resolv function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; - break; - - case R_NIOS2_TLS_DTPREL: - *reloc_addr = reloc->r_addend + TLS_DTPREL_VALUE(sym); - break; - - case R_NIOS2_TLS_TPREL: - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = reloc->r_addend + TLS_TPREL_VALUE(sym_map, sym); - } - break; -#endif - case R_NIOS2_BFD_RELOC_32: - *reloc_addr = value + reloc->r_addend; - break; - - default: - _dl_reloc_bad_type (map, r_type, 0); - break; - } - } -} - -auto inline void __attribute__((always_inline)) -elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc, - void *const reloc_addr_arg) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - *reloc_addr = l_addr + reloc->r_addend; -} - -auto inline void __attribute__((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - ElfW(Addr) l_addr, const ElfW(Rela) *reloc, - int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); - if (ELF32_R_TYPE (reloc->r_info) == R_NIOS2_JUMP_SLOT) - *reloc_addr += l_addr; - else - _dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 1); -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/nios2/dl-sysdep.h b/sysdeps/nios2/dl-sysdep.h deleted file mode 100644 index 497bae30e8..0000000000 --- a/sysdeps/nios2/dl-sysdep.h +++ /dev/null @@ -1,25 +0,0 @@ -/* System-specific settings for dynamic linker code. Nios II version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include_next - -/* _dl_argv cannot be attribute_relro, because _dl_start_user - might write into it after _dl_start returns. */ -#define DL_ARGV_NOT_RELRO 1 - -#define DL_EXTERN_PROTECTED_DATA diff --git a/sysdeps/nios2/dl-tls.h b/sysdeps/nios2/dl-tls.h deleted file mode 100644 index 87f6ba5f4f..0000000000 --- a/sysdeps/nios2/dl-tls.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. Nios II version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - -/* The thread pointer points 0x7000 past the first static TLS block. */ -#define TLS_TP_OFFSET 0x7000 - -/* Dynamic thread vector pointers point 0x8000 past the start of each - TLS block. */ -#define TLS_DTV_OFFSET 0x8000 - -/* Compute the value for a GOTTPREL reloc. */ -#define TLS_TPREL_VALUE(sym_map, sym) \ - ((sym_map)->l_tls_offset + (sym)->st_value - TLS_TP_OFFSET) - -/* Compute the value for a DTPREL reloc. */ -#define TLS_DTPREL_VALUE(sym) \ - ((sym)->st_value - TLS_DTV_OFFSET) - -extern void *__tls_get_addr (tls_index *ti); - -# define GET_ADDR_OFFSET (ti->ti_offset + TLS_DTV_OFFSET) -# define __TLS_GET_ADDR(__ti) (__tls_get_addr (__ti) - TLS_DTV_OFFSET) diff --git a/sysdeps/nios2/dl-trampoline.S b/sysdeps/nios2/dl-trampoline.S deleted file mode 100644 index 1dbf5c14eb..0000000000 --- a/sysdeps/nios2/dl-trampoline.S +++ /dev/null @@ -1,79 +0,0 @@ -/* PLT trampolines. Nios II version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - .text - .globl _dl_runtime_resolve - cfi_startproc -_dl_runtime_resolve: -/* The runtime resolver receives the original function arguments in r4 - through r7, the shared library identifier from GOT[1]? in r14, and the - relocation index times four in r15. It updates the corresponding PLT GOT - entry so that the PLT entry will transfer control directly to the target - in the future, and then transfers control to the target. */ - /* Save arguments and return address. */ - subi sp, sp, 28 - cfi_adjust_cfa_offset (28) - stw r22, 24(sp) - cfi_rel_offset (r22, 24) - stw r8, 20(sp) /* save r8, because this might be a call to mcount */ - cfi_rel_offset (r8, 20) - stw r7, 16(sp) - cfi_rel_offset (r7, 16) - stw r6, 12(sp) - cfi_rel_offset (r6, 12) - stw r5, 8(sp) - cfi_rel_offset (r5, 8) - stw r4, 4(sp) - cfi_rel_offset (r4, 4) - stw ra, 0(sp) - cfi_rel_offset (ra, 0) - - /* Get pointer to linker struct. */ - mov r4, r14 - - /* Get the relocation offset. We're given a multiple of 4 and - need a multiple of 12, so multiply by 3. */ - slli r5, r15, 1 - add r5, r5, r15 - - /* Call the fixup routine. */ - nextpc r22 -1: movhi r2, %hiadj(_gp_got - 1b) - addi r2, r2, %lo(_gp_got - 1b) - add r22, r22, r2 - ldw r2, %call(_dl_fixup)(r22) - callr r2 - - /* Restore the arguments and return address. */ - ldw ra, 0(sp) - ldw r4, 4(sp) - ldw r5, 8(sp) - ldw r6, 12(sp) - ldw r7, 16(sp) - ldw r8, 20(sp) - ldw r22, 24(sp) - addi sp, sp, 28 - cfi_adjust_cfa_offset (-28) - - /* Jump to the newly found address. */ - jmp r2 - - cfi_endproc diff --git a/sysdeps/nios2/gccframe.h b/sysdeps/nios2/gccframe.h deleted file mode 100644 index c2440eefe6..0000000000 --- a/sysdeps/nios2/gccframe.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Definition of object in frame unwind info. Nios II version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define FIRST_PSEUDO_REGISTER 40 - -#include diff --git a/sysdeps/nios2/gmp-mparam.h b/sysdeps/nios2/gmp-mparam.h deleted file mode 100644 index e77343e9b0..0000000000 --- a/sysdeps/nios2/gmp-mparam.h +++ /dev/null @@ -1,23 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 2015-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, see -. */ - -#include - -#define IEEE_DOUBLE_BIG_ENDIAN 0 diff --git a/sysdeps/nios2/jmpbuf-offsets.h b/sysdeps/nios2/jmpbuf-offsets.h deleted file mode 100644 index 64b228f119..0000000000 --- a/sysdeps/nios2/jmpbuf-offsets.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Private macros for accessing __jmp_buf contents. Nios II version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Save offsets within __jmp_buf. */ -#define JB_R16 0 -#define JB_R17 1 -#define JB_R18 2 -#define JB_R19 3 -#define JB_R20 4 -#define JB_R21 5 -#define JB_R22 6 -#define JB_FP 7 -#define JB_RA 8 -#define JB_SP 9 - -#ifndef __ASSEMBLER__ -#include -#include -#include - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf jmpbuf) -{ - uintptr_t sp = jmpbuf[JB_SP]; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return sp; -} -#endif - -/* Helper for generic ____longjmp_chk(). */ -#define JB_FRAME_ADDRESS(buf) ((void *) _jmpbuf_sp (buf)) diff --git a/sysdeps/nios2/jmpbuf-unwind.h b/sysdeps/nios2/jmpbuf-unwind.h deleted file mode 100644 index aff44eccbf..0000000000 --- a/sysdeps/nios2/jmpbuf-unwind.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Examine __jmp_buf for unwinding frames. Nios II version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ - -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((void *) (address) < (void *) demangle (jmpbuf[JB_SP])) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf_sp (_jmpbuf) - (_adj))) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/nios2/ldsodefs.h b/sysdeps/nios2/ldsodefs.h deleted file mode 100644 index 69201b9d11..0000000000 --- a/sysdeps/nios2/ldsodefs.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _NIOS2_LDSODEFS_H -#define _NIOS2_LDSODEFS_H 1 - -#include - -struct La_nios2_regs; -struct La_nios2_retval; - -#define ARCH_PLTENTER_MEMBERS \ - ElfW(Addr) (*nios2_gnu_pltenter) (ElfW(Sym) *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - const struct La_nios2_regs *, \ - unsigned int *, const char *, \ - long int *); - -#define ARCH_PLTEXIT_MEMBERS \ - unsigned int (*nios2_gnu_pltexit) (ElfW(Sym) *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - const struct La_nios2_regs *, \ - struct La_nios2_retval *, \ - const char *); - -#include_next - -#endif diff --git a/sysdeps/nios2/libc-tls.c b/sysdeps/nios2/libc-tls.c deleted file mode 100644 index b7d3936681..0000000000 --- a/sysdeps/nios2/libc-tls.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. Nios II version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* On Nios II, linker optimizations are not required, so __tls_get_addr - can be called even in statically linked binaries. In this case module - must be always 1 and PT_TLS segment exist in the binary, otherwise it - would not link. */ - -void * -__tls_get_addr (tls_index *ti) -{ - dtv_t *dtv = THREAD_DTV (); - return (char *) dtv[1].pointer.val + GET_ADDR_OFFSET; -} diff --git a/sysdeps/nios2/libm-test-ulps b/sysdeps/nios2/libm-test-ulps deleted file mode 100644 index f1a01fdb30..0000000000 --- a/sysdeps/nios2/libm-test-ulps +++ /dev/null @@ -1,394 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -float: 1 -ifloat: 1 - -Function: "acosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "asin": -float: 1 -ifloat: 1 - -Function: "asinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "atan": -float: 1 -ifloat: 1 - -Function: "atan2": -float: 1 -ifloat: 1 - -Function: "atanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "cabs": -double: 1 -idouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "carg": -float: 1 -ifloat: 1 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "casin": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "casinh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catan": -float: 1 -ifloat: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "catanh": -float: 1 -ifloat: 1 - -Function: "cbrt": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "clog": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 - -Function: Real part of "clog10": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 - -Function: Imaginary part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "cos": -float: 1 -ifloat: 1 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "cpow": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Real part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "erfc": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "exp": -float: 1 -ifloat: 1 - -Function: "exp10": -double: 2 -idouble: 2 - -Function: "exp2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "gamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "hypot": -double: 1 -idouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "lgamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "log": -float: 1 -ifloat: 1 - -Function: "log10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log1p": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "log2": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "pow": -float: 3 -ifloat: 3 - -Function: "pow10": -double: 2 -idouble: 2 - -Function: "sin": -float: 1 -ifloat: 1 - -Function: "sincos": -float: 1 -ifloat: 1 - -Function: "sinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "tan": -float: 1 -ifloat: 1 - -Function: "tanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "tgamma": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -# end of automatic generation diff --git a/sysdeps/nios2/libm-test-ulps-name b/sysdeps/nios2/libm-test-ulps-name deleted file mode 100644 index 4ee7692b1b..0000000000 --- a/sysdeps/nios2/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -Nios II diff --git a/sysdeps/nios2/machine-gmon.h b/sysdeps/nios2/machine-gmon.h deleted file mode 100644 index 9ad018ba8d..0000000000 --- a/sysdeps/nios2/machine-gmon.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Machine-dependent definitions for profiling support. Nios II version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#define _MCOUNT_DECL(frompc, selfpc) \ -static void __attribute_used__ __mcount_internal (u_long frompc, u_long selfpc) - -/* This macro/func MUST save r4, r5, r6, r7 and r8 because the compiler inserts - blind calls to mcount(), ignoring the fact that mcount may clobber - registers; therefore, mcount may NOT clobber registers. */ - -#if defined(__PIC__) || defined(PIC) -#define NIOS2_MCOUNT_CALL \ - "nextpc r3\n\t" \ - "1: movhi r2, %hiadj(_gp_got - 1b)\n\t" \ - "addi r2, r2, %lo(_gp_got - 1b)\n\t" \ - "add r2, r2, r3\n\t" \ - "ldw r2, %call(__mcount_internal)(r2)\n\t" \ - "callr r2\n\t" -#else -#define NIOS2_MCOUNT_CALL \ - "call\t__mcount_internal\n\t" -#endif - -#define MCOUNT \ - asm (".globl _mcount\n\t" \ - ".type _mcount,@function\n\t" \ - "_mcount:\n\t" \ - "subi sp, sp, 24\n\t" \ - "stw ra, 20(sp)\n\t" \ - "stw r8, 16(sp)\n\t" \ - "stw r7, 12(sp)\n\t" \ - "stw r6, 8(sp)\n\t" \ - "stw r5, 4(sp)\n\t" \ - "stw r4, 0(sp)\n\t" \ - "mov r4, r8\n\t" \ - "mov r5, ra\n\t" \ - NIOS2_MCOUNT_CALL \ - "ldw ra, 20(sp)\n\t" \ - "ldw r8, 16(sp)\n\t" \ - "ldw r7, 12(sp)\n\t" \ - "ldw r6, 8(sp)\n\t" \ - "ldw r5, 4(sp)\n\t" \ - "ldw r4, 0(sp)\n\t" \ - "addi sp, sp, 24\n\t" \ - "ret\n\t" \ - ".size _mcount, . - _mcount\n\t" \ - ); diff --git a/sysdeps/nios2/math-tests.h b/sysdeps/nios2/math-tests.h deleted file mode 100644 index 62c19ba9b3..0000000000 --- a/sysdeps/nios2/math-tests.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Configuration for math tests. Nios II version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Current Nios II soft-float does not support exceptions or rounding - modes. */ -#define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST) -#define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST) -#define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST) -#define EXCEPTION_TESTS_float 0 -#define EXCEPTION_TESTS_double 0 -#define EXCEPTION_TESTS_long_double 0 - -#include_next diff --git a/sysdeps/nios2/math_private.h b/sysdeps/nios2/math_private.h deleted file mode 100644 index 373da2a621..0000000000 --- a/sysdeps/nios2/math_private.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef NIO2_MATH_PRIVATE_H -#define NIO2_MATH_PRIVATE_H 1 - -/* Suppress use of exceptions here to avoid build errors if the FE_* - macros aren't defined. Only allow rounding modes implemented for Nios II. - - This does mean that some code will silently fail to report exceptions, - set rounding mode as expected, etc., but it allows math code to compile - that otherwise wouldn't (such as math/s_fma.c) and so is valuable. - - We intentionally ignore the "exception" arguments of functions that - take an exception, since we can't even evaluate the argument - without causing a build failure. The extra level of statement - expression wrapping avoids "statement with no effect" warnings. - Since the callers don't check for errors anyway, we just claim - success in every case. - - The overrides for libc_ functions must happen before we include - the generic math_private.h, and the overrides for regular - functions must happen afterwards, to avoid clashing with - the declarations of those functions. */ - -#define libc_fesetround(rnd) ({ 0; }) -#define libc_fetestexcept(exc) ({ 0; }) -#define libc_feholdexcept_setround(env, exc) ({ (void) (env); 0; }) -#define libc_feupdateenv_test(env, exc) ({ (void) (env); 0; }) - -/* Enable __finitel, __isinfl, and __isnanl for binary compatibility - when built without long double support. */ -#define LDBL_CLASSIFY_COMPAT 1 - -#include_next - -#define feraiseexcept(excepts) ({ 0; }) -#define __feraiseexcept(excepts) ({ 0; }) -#define feclearexcept(exc) ({ 0; }) - -#endif diff --git a/sysdeps/nios2/memusage.h b/sysdeps/nios2/memusage.h deleted file mode 100644 index ed66f12fed..0000000000 --- a/sysdeps/nios2/memusage.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Machine-specific definitions for memory usage profiling, Nios II version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("%sp"); stack_ptr; }) - -#define uatomic32_t unsigned int - -#include diff --git a/sysdeps/nios2/nptl/Makefile b/sysdeps/nios2/nptl/Makefile deleted file mode 100644 index 1ae6ca40c1..0000000000 --- a/sysdeps/nios2/nptl/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -# NPTL makefile fragment for Nios II. -# Copyright (C) 2005-2017 Free Software Foundation, Inc. -# -# This file is part of the GNU C Library. -# -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# . - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif diff --git a/sysdeps/nios2/nptl/bits/pthreadtypes-arch.h b/sysdeps/nios2/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index e2732f9771..0000000000 --- a/sysdeps/nios2/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,70 +0,0 @@ -/* Machine-specific pthread type layouts. Nios II version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -#define _BITS_PTHREADTYPES_ARCH_H 1 - -#include - -#define __SIZEOF_PTHREAD_ATTR_T 36 -#define __SIZEOF_PTHREAD_MUTEX_T 24 -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_RWLOCK_T 32 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -#define __SIZEOF_PTHREAD_BARRIER_T 20 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - -/* Data structure for mutex handling. */ -#define __PTHREAD_COMPAT_PADDING_MID -#define __PTHREAD_COMPAT_PADDING_END -#define __PTHREAD_MUTEX_LOCK_ELISION 0 - -#define __LOCK_ALIGNMENT -#define __ONCE_ALIGNMENT - -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned char __pad1; - unsigned char __pad2; - unsigned char __shared; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; -#else - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; - unsigned char __shared; - unsigned char __pad1; - unsigned char __pad2; -#endif - int __cur_writer; -}; - -#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/nios2/nptl/bits/semaphore.h b/sysdeps/nios2/nptl/bits/semaphore.h deleted file mode 100644 index d4277b907b..0000000000 --- a/sysdeps/nios2/nptl/bits/semaphore.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Machine-specific POSIX semaphore type layouts. Nios II version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - -#define __SIZEOF_SEM_T 16 - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/sysdeps/nios2/nptl/pthreaddef.h b/sysdeps/nios2/nptl/pthreaddef.h deleted file mode 100644 index cf37fcc950..0000000000 --- a/sysdeps/nios2/nptl/pthreaddef.h +++ /dev/null @@ -1,32 +0,0 @@ -/* pthread machine parameter definitions, Nios II version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. */ -#define STACK_ALIGN 4 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 4 - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME __builtin_frame_address (0) diff --git a/sysdeps/nios2/nptl/tcb-offsets.sym b/sysdeps/nios2/nptl/tcb-offsets.sym deleted file mode 100644 index 3cd8d984ac..0000000000 --- a/sysdeps/nios2/nptl/tcb-offsets.sym +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include - --- - --- Abuse tls.h macros to derive offsets relative to the thread register. -# undef __thread_self -# define __thread_self ((void *) 0) -# define thread_offsetof(mem) ((ptrdiff_t) THREAD_SELF + offsetof (struct pthread, mem)) - -MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) -TID_OFFSET thread_offsetof (tid) -POINTER_GUARD (offsetof (tcbhead_t, pointer_guard) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) diff --git a/sysdeps/nios2/nptl/tls.h b/sysdeps/nios2/nptl/tls.h deleted file mode 100644 index 104e82ae43..0000000000 --- a/sysdeps/nios2/nptl/tls.h +++ /dev/null @@ -1,164 +0,0 @@ -/* Definition for thread-local data handling. NPTL/Nios II version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _TLS_H -#define _TLS_H 1 - -#include - -#ifndef __ASSEMBLER__ -# include -# include -# include -# include - -#else /* __ASSEMBLER__ */ -# include -#endif /* __ASSEMBLER__ */ - - -#ifndef __ASSEMBLER__ - -/* Get system call information. */ -# include - -/* The TP points to the start of the thread blocks. */ -# define TLS_DTV_AT_TP 1 -# define TLS_TCB_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include - -typedef struct -{ - dtv_t *dtv; - uintptr_t pointer_guard; - unsigned spare[6]; -} tcbhead_t; - -register struct pthread *__thread_self __asm__("r23"); - -#define READ_THREAD_POINTER() ((void *) __thread_self) - -/* This is the size of the initial TCB. Because our TCB is before the thread - pointer, we don't need this. */ -# define TLS_INIT_TCB_SIZE 0 - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size of the TCB. Because our TCB is before the thread - pointer, we don't need this. */ -# define TLS_TCB_SIZE 0 - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size we need before TCB - actually, it includes the TCB. */ -# define TLS_PRE_TCB_SIZE \ - (sizeof (struct pthread) \ - + ((sizeof (tcbhead_t) + TLS_TCB_ALIGN - 1) & ~(TLS_TCB_ALIGN - 1))) - -/* The thread pointer (in hardware register r23) points to the end of - the TCB + 0x7000, as for PowerPC and MIPS. */ -# define TLS_TCB_OFFSET 0x7000 - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(tcbp, dtvp) \ - (((tcbhead_t *) (tcbp))[-1].dtv = (dtvp) + 1) - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtv) \ - (THREAD_DTV() = (dtv)) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(tcbp) \ - (((tcbhead_t *) (tcbp))[-1].dtv) - -/* Code to initially initialize the thread pointer. */ -# define TLS_INIT_TP(tcbp) \ - (__thread_self = (struct pthread *) ((char *) tcbp + TLS_TCB_OFFSET), NULL) - -/* Value passed to 'clone' for initialization of the thread register. */ -# define TLS_DEFINE_INIT_TP(tp, pd) \ - void *tp = (void *) (pd) + TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - (((tcbhead_t *) (READ_THREAD_POINTER () - TLS_TCB_OFFSET))[-1].dtv) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF \ - ((struct pthread *) (READ_THREAD_POINTER () \ - - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF \ - REGISTER (32, 32, 23 * 4, -TLS_PRE_TCB_SIZE - TLS_TCB_OFFSET) - -/* Access to data in the thread descriptor is easy. */ -# define THREAD_GETMEM(descr, member) \ - descr->member -# define THREAD_GETMEM_NC(descr, member, idx) \ - descr->member[idx] -# define THREAD_SETMEM(descr, member, value) \ - descr->member = (value) -# define THREAD_SETMEM_NC(descr, member, idx, value) \ - descr->member[idx] = (value) - -# define THREAD_GET_POINTER_GUARD() \ - (((tcbhead_t *) (READ_THREAD_POINTER () \ - - TLS_TCB_OFFSET))[-1].pointer_guard) -# define THREAD_SET_POINTER_GUARD(value) \ - (THREAD_GET_POINTER_GUARD () = (value)) -# define THREAD_COPY_POINTER_GUARD(descr) \ - (((tcbhead_t *) ((void *) (descr) \ - + TLS_PRE_TCB_SIZE))[-1].pointer_guard \ - = THREAD_GET_POINTER_GUARD()) - -/* l_tls_offset == 0 is perfectly valid on Nios II, so we have to use some - different value to mean unset l_tls_offset. */ -# define NO_TLS_OFFSET -1 - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/nios2/preconfigure b/sysdeps/nios2/preconfigure deleted file mode 100644 index 4b5bd49084..0000000000 --- a/sysdeps/nios2/preconfigure +++ /dev/null @@ -1,6 +0,0 @@ -case "$machine" in -nios2*) - base_machine=nios2 - machine=nios2 - ;; -esac diff --git a/sysdeps/nios2/s_fma.c b/sysdeps/nios2/s_fma.c deleted file mode 100644 index d9613fa67c..0000000000 --- a/sysdeps/nios2/s_fma.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/nios2/s_fmaf.c b/sysdeps/nios2/s_fmaf.c deleted file mode 100644 index aa5c9b2d91..0000000000 --- a/sysdeps/nios2/s_fmaf.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/nios2/setjmp.S b/sysdeps/nios2/setjmp.S deleted file mode 100644 index 77f7456ef4..0000000000 --- a/sysdeps/nios2/setjmp.S +++ /dev/null @@ -1,73 +0,0 @@ -/* setjmp for Nios II. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - .text -ENTRY(setjmp) - movi r5, 1 - br __sigsetjmp -END(setjmp) - -ENTRY(_setjmp) - mov r5, zero - br __sigsetjmp -END(_setjmp) -libc_hidden_def (_setjmp) - -/* Save the current program position in ENV and return 0. */ -ENTRY(__sigsetjmp) -#ifdef PTR_MANGLE - PTR_MANGLE_GUARD (r9) -#endif - stw r16, (JB_R16*4)(r4) - stw r17, (JB_R17*4)(r4) - stw r18, (JB_R18*4)(r4) - stw r19, (JB_R19*4)(r4) - stw r20, (JB_R20*4)(r4) - stw r21, (JB_R21*4)(r4) - stw r22, (JB_R22*4)(r4) - stw fp, (JB_FP*4)(r4) -#ifdef PTR_MANGLE - PTR_MANGLE (r6, ra, r9) - PTR_MANGLE (r7, sp, r9) - stw r6, (JB_RA*4)(r4) - stw r7, (JB_SP*4)(r4) -#else - stw ra, (JB_RA*4)(r4) - stw sp, (JB_SP*4)(r4) -#endif -#if IS_IN (rtld) - /* In ld.so we never save the signal mask. */ - mov r2, zero - ret -#else - /* Save the signal mask if requested. */ -#if defined(__PIC__) || defined(PIC) - nextpc r2 -1: movhi r3, %hiadj(__sigjmp_save - 1b) - addi r3, r3, %lo(__sigjmp_save - 1b) - add r2, r2, r3 - jmp r2 -#else - jmpi __sigjmp_save -#endif -#endif -END (__sigsetjmp) -libc_hidden_def (__sigsetjmp) diff --git a/sysdeps/nios2/sfp-machine.h b/sysdeps/nios2/sfp-machine.h deleted file mode 100644 index 95eefc1874..0000000000 --- a/sysdeps/nios2/sfp-machine.h +++ /dev/null @@ -1,51 +0,0 @@ -#define _FP_W_TYPE_SIZE 32 -#define _FP_W_TYPE unsigned long -#define _FP_WS_TYPE signed long -#define _FP_I_TYPE long - -#define _FP_MUL_MEAT_S(R,X,Y) \ - _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_D(R,X,Y) \ - _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_MUL_MEAT_DW_S(R,X,Y) \ - _FP_MUL_MEAT_DW_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_DW_D(R,X,Y) \ - _FP_MUL_MEAT_DW_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_DW_Q(R,X,Y) \ - _FP_MUL_MEAT_DW_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) - -#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) -#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 -#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 -#define _FP_NANSIGN_S 0 -#define _FP_NANSIGN_D 0 -#define _FP_NANSIGN_Q 0 - -#define _FP_KEEPNANFRACP 1 -#define _FP_QNANNEGATEDP 0 - -/* This is arbitrarily taken from the PowerPC version. */ -#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \ - && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \ - { \ - R##_s = Y##_s; \ - _FP_FRAC_COPY_##wc(R,Y); \ - } \ - else \ - { \ - R##_s = X##_s; \ - _FP_FRAC_COPY_##wc(R,X); \ - } \ - R##_c = FP_CLS_NAN; \ - } while (0) - -#define _FP_TININESS_AFTER_ROUNDING 0 diff --git a/sysdeps/nios2/sotruss-lib.c b/sysdeps/nios2/sotruss-lib.c deleted file mode 100644 index 844e76f1ba..0000000000 --- a/sysdeps/nios2/sotruss-lib.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Override generic sotruss-lib.c to define actual functions for Nios II. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define HAVE_ARCH_PLTENTER -#define HAVE_ARCH_PLTEXIT - -#include - -ElfW(Addr) -la_nios2_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - La_nios2_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - print_enter (refcook, defcook, symname, - regs->lr_reg[0], regs->lr_reg[1], regs->lr_reg[2], - *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -la_nios2_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, - const struct La_nios2_regs *inregs, - struct La_nios2_retval *outregs, const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_r2); - - return 0; -} diff --git a/sysdeps/nios2/stackguard-macros.h b/sysdeps/nios2/stackguard-macros.h deleted file mode 100644 index 55a5771b62..0000000000 --- a/sysdeps/nios2/stackguard-macros.h +++ /dev/null @@ -1,6 +0,0 @@ -#include - -extern uintptr_t __stack_chk_guard; -#define STACK_CHK_GUARD __stack_chk_guard - -#define POINTER_CHK_GUARD THREAD_GET_POINTER_GUARD() diff --git a/sysdeps/nios2/stackinfo.h b/sysdeps/nios2/stackinfo.h deleted file mode 100644 index b4ca93f7f0..0000000000 --- a/sysdeps/nios2/stackinfo.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Stack environment definitions for Nios II. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* On Nios II the stack grows down. */ -#define _STACK_GROWS_DOWN 1 - -/* Default to a non-executable stack. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W) - -#endif /* stackinfo.h */ diff --git a/sysdeps/nios2/start.S b/sysdeps/nios2/start.S deleted file mode 100644 index d2eeead20f..0000000000 --- a/sysdeps/nios2/start.S +++ /dev/null @@ -1,146 +0,0 @@ -/* Startup code for Nios II - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This is the canonical entry point, usually the first thing in the text - segment. - - Note that the code in the .init section has already been run. - This includes _init and _libc_init - - The stack pointer, sp, will point to the argument count on the stack. - The initial state of the stack when a userspace process is started is: - - Purpose Start Address Length - Unspecified High Addresses - Referenced strings, etc. Varies - Unspecified - Null auxilliary vector entry 4bytes - Auxilliary vector entries 8bytes each - NULL terminator for envp 4bytes - Environment pointers sp+8+4*argc 4bytes each - NULL terminator for argv sp+4+4*argc 4bytes - Argument pointers sp+4 4bytes each - Argument count sp 4bytes - Unspecified Low Addresses - - If the application should register a destructor function with atexit, - the pointer will be placed in r4. Otherwise r4 will be zero. - - The contents of all other registers are unspecified. User code should - set fp to zero to mark the end of the frame chain. - - The auxilliary vector is a series of pairs of 32-bit tag and 32-bit - value, terminated by an AT_NULL tag. -*/ - - .text - .globl _start - .type _start,%function -_start: - /* Set up the global pointer. */ - movhi gp, %hiadj(_gp) - addi gp, gp, %lo(_gp) - - /* Save the stack pointer. */ - mov r2, sp - - /* Create room on the stack for the fini, rtld_fini and stack_end args - to __libc_start_main. */ - subi sp, sp, 12 - - /* Push stack_end */ - stw r2, 8(sp) - - /* Push rtld_fini */ - stw r4, 4(sp) - - /* Set up the GOT pointer. */ - nextpc r22 -1: movhi r2, %hiadj(_gp_got - 1b) - addi r2, r2, %lo(_gp_got - 1b) - add r22, r22, r2 - - /* Push fini */ - movhi r8, %call_hiadj(__libc_csu_fini) - addi r8, r8, %call_lo(__libc_csu_fini) - add r8, r8, r22 - ldw r8, 0(r8) - stw r8, 0(sp) - - /* r7 == init */ - movhi r7, %call_hiadj(__libc_csu_init) - addi r7, r7, %call_lo(__libc_csu_init) - add r7, r7, r22 - ldw r7, 0(r7) - - /* r6 == argv */ - addi r6, sp, 16 - - /* r5 == argc */ - ldw r5, 12(sp) - - /* r4 == main */ - movhi r4, %call_hiadj(main) - addi r4, r4, %call_lo(main) - add r4, r4, r22 - ldw r4, 0(r4) - - /* fp == 0 */ - mov fp, zero - - /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, - stack_end) */ - - /* Let the libc call main and exit with its return code. */ - movhi r2, %call_hiadj(__libc_start_main) - addi r2, r2, %call_lo(__libc_start_main) - add r2, r2, r22 - ldw r2, 0(r2) - callr r2 - - /* should never get here....*/ - movhi r2, %call_hiadj(abort) - addi r2, r2, %call_lo(abort) - add r2, r2, r22 - ldw r2, 0(r2) - callr r2 - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start diff --git a/sysdeps/nios2/sysdep.h b/sysdeps/nios2/sysdep.h deleted file mode 100644 index c99fefe029..0000000000 --- a/sysdeps/nios2/sysdep.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Assembler macros for Nios II. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef __ASSEMBLER__ - -/* Syntactic details of assembler. */ - -#define ASM_SIZE_DIRECTIVE(name) .size name,.-name - -#define ENTRY(name) \ - .globl C_SYMBOL_NAME(name); \ - .type C_SYMBOL_NAME(name),%function; \ - C_LABEL(name) \ - cfi_startproc; \ - CALL_MCOUNT; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(name) - -#ifdef PROF - -# ifdef __PIC__ -# define CALL_MCOUNT \ - mov r8, ra; \ - nextpc r2; \ -1: \ - movhi r3, %hiadj(_gp_got - 1b); \ - addi r3, r3, %lo(_gp_got - 1b); \ - add r2, r2, r3; \ - ldw r2, %call(_mcount)(r2); \ - callr r2; \ - mov ra, r8; \ - ret; -# else -# define CALL_MCOUNT \ - mov r8, ra; \ - call _mount; \ - mov ra, r8; \ - ret; -# endif - -#else -# define CALL_MCOUNT /* Do nothing. */ -#endif - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/nios2/tls-macros.h b/sysdeps/nios2/tls-macros.h deleted file mode 100644 index 7029530e46..0000000000 --- a/sysdeps/nios2/tls-macros.h +++ /dev/null @@ -1,46 +0,0 @@ -#define TLS_LE(x) \ - ({ int *__result; \ - asm ("addi %0, r23, %%tls_le(" #x ")" \ - : "=r" (__result)); \ - __result; }) - -#define TLS_IE(x) \ - ({ int *__result; \ - int __tmp; \ - asm ("nextpc %0 ; " \ - "1: movhi %1, %%hiadj(_gp_got - 1b) ; " \ - "addi %1, %1, %%lo(_gp_got - 1b) ; " \ - "add %0, %0, %1 ; " \ - "ldw %1, %%tls_ie(" #x ")(%0) ; " \ - "add %1, r23, %1" \ - : "=&r" (__tmp), "=&r" (__result)); \ - __result; }) - -#define TLS_LD(x) \ - ({ char *__result; \ - char *__result2; \ - int *__result3; \ - int __tmp; \ - extern void *__tls_get_addr (void *); \ - asm ("nextpc %0 ; " \ - "1: movhi %1, %%hiadj(_gp_got - 1b) ; " \ - "addi %1, %1, %%lo(_gp_got - 1b) ; " \ - "add %0, %0, %1 ; " \ - "addi %0, %0, %%tls_ldm(" #x ")" \ - : "=r" (__result), "=r" (__tmp)); \ - __result2 = (char *)__tls_get_addr (__result); \ - asm ("addi %0, %1, %%tls_ldo(" #x ")" \ - : "=r" (__result3) : "r" (__result2)); \ - __result3; }) - -#define TLS_GD(x) \ - ({ int *__result; \ - int __tmp; \ - extern void *__tls_get_addr (void *); \ - asm ("nextpc %0 ; " \ - "1: movhi %1, %%hiadj(_gp_got - 1b) ; " \ - "addi %1, %1, %%lo(_gp_got - 1b) ; " \ - "add %0, %0, %1 ; " \ - "addi %0, %0, %%tls_gd(" #x ")" \ - : "=r" (__result), "=r" (__tmp)); \ - (int *)__tls_get_addr (__result); }) diff --git a/sysdeps/nios2/tst-audit.h b/sysdeps/nios2/tst-audit.h deleted file mode 100644 index 25348bb792..0000000000 --- a/sysdeps/nios2/tst-audit.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. Nios II version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define pltenter la_nios2_gnu_pltenter -#define pltexit la_nios2_gnu_pltexit -#define La_regs La_nios2_regs -#define La_retval La_nios2_retval -#define int_retval lrv_r2 diff --git a/sysdeps/nptl/Implies b/sysdeps/nptl/Implies deleted file mode 100644 index f1b3e8939c..0000000000 --- a/sysdeps/nptl/Implies +++ /dev/null @@ -1 +0,0 @@ -pthread diff --git a/sysdeps/nptl/Makeconfig b/sysdeps/nptl/Makeconfig deleted file mode 100644 index d31b77680f..0000000000 --- a/sysdeps/nptl/Makeconfig +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright (C) 2002-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# Contributed by Ulrich Drepper , 2002. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -# Makeconfig fragment for NPTL add-on. -# This gets included at the end of the main glibc Makeconfig. - -have-thread-library = yes - -shared-thread-library = $(common-objpfx)nptl/libpthread_nonshared.a \ - $(common-objpfx)nptl/libpthread.so -static-thread-library = $(common-objpfx)nptl/libpthread.a - -rpath-dirs += nptl diff --git a/sysdeps/nptl/Makefile b/sysdeps/nptl/Makefile deleted file mode 100644 index 4f4f4ffe69..0000000000 --- a/sysdeps/nptl/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (C) 2002-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# Contributed by Ulrich Drepper , 2002. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifeq ($(subdir),nptl) -libpthread-sysdep_routines += errno-loc -endif - -ifeq ($(subdir),rt) -librt-sysdep_routines += timer_routines librt-cancellation -CFLAGS-librt-cancellation.c += -fexceptions -fasynchronous-unwind-tables - -tests += tst-mqueue8x -CFLAGS-tst-mqueue8x.c += -fexceptions -endif - -ifeq ($(subdir),posix) -CFLAGS-confstr.c += -DLIBPTHREAD_VERSION='"NPTL $(version)"' -endif diff --git a/sysdeps/nptl/Subdirs b/sysdeps/nptl/Subdirs deleted file mode 100644 index 36266c1e69..0000000000 --- a/sysdeps/nptl/Subdirs +++ /dev/null @@ -1,2 +0,0 @@ -nptl -nptl_db diff --git a/sysdeps/nptl/aio_misc.h b/sysdeps/nptl/aio_misc.h deleted file mode 100644 index 47b1a36479..0000000000 --- a/sysdeps/nptl/aio_misc.h +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* We define a special synchronization primitive for AIO. POSIX - conditional variables would be ideal but the pthread_cond_*wait - operations do not return on EINTR. This is a requirement for - correct aio_suspend and lio_listio implementations. */ - -#include -#include -#include - -#define DONT_NEED_AIO_MISC_COND 1 - -#define AIO_MISC_NOTIFY(waitlist) \ - do { \ - if (*waitlist->counterp > 0 && --*waitlist->counterp == 0) \ - futex_wake ((unsigned int *) waitlist->counterp, 1, FUTEX_PRIVATE); \ - } while (0) - -#define AIO_MISC_WAIT(result, futex, timeout, cancel) \ - do { \ - volatile unsigned int *futexaddr = &futex; \ - unsigned int oldval = futex; \ - \ - if (oldval != 0) \ - { \ - pthread_mutex_unlock (&__aio_requests_mutex); \ - \ - int oldtype; \ - if (cancel) \ - oldtype = LIBC_CANCEL_ASYNC (); \ - \ - int status; \ - do \ - { \ - status = futex_reltimed_wait ((unsigned int *) futexaddr, oldval, \ - timeout, FUTEX_PRIVATE); \ - if (status != EAGAIN) \ - break; \ - \ - oldval = *futexaddr; \ - } \ - while (oldval != 0); \ - \ - if (cancel) \ - LIBC_CANCEL_RESET (oldtype); \ - \ - if (status == EINTR) \ - result = EINTR; \ - else if (status == ETIMEDOUT) \ - result = EAGAIN; \ - else \ - assert (status == 0 || status == EAGAIN); \ - \ - pthread_mutex_lock (&__aio_requests_mutex); \ - } \ - } while (0) - -#include_next diff --git a/sysdeps/nptl/allocrtsig.c b/sysdeps/nptl/allocrtsig.c deleted file mode 100644 index fed4e7e527..0000000000 --- a/sysdeps/nptl/allocrtsig.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Handle real-time signal allocation. NPTL version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Up to three special signals might be used privately by libpthread. - Figure out how many unique ones are actually used. */ - -#ifdef SIGCANCEL -# define SIGCANCEL_CONSUMES 1 -#else -# define SIGCANCEL_CONSUMES 0 -#endif - -#if defined SIGTIMER && (!defined SIGCANCEL || SIGTIMER != SIGCANCEL) -# define SIGTIMER_CONSUMES 1 -#else -# define SIGTIMER_CONSUMES 0 -#endif - -#if (defined SIGSETXID \ - && (!defined SIGCANCEL || SIGSETXID != SIGCANCEL) \ - && (!defined SIGTIMER || SIGSETXID != SIGTIMER)) -# define SIGSETXID_CONSUMES 1 -#else -# define SIGSETXID_CONSUMES 0 -#endif - -/* This tells the generic code (included below) how many signal - numbers need to be reserved for libpthread's private uses. */ -#define RESERVED_SIGRT \ - (SIGCANCEL_CONSUMES + SIGTIMER_CONSUMES + SIGSETXID_CONSUMES) - -#include diff --git a/sysdeps/nptl/bits/pthreadtypes.h b/sysdeps/nptl/bits/pthreadtypes.h deleted file mode 100644 index 8839559f5a..0000000000 --- a/sysdeps/nptl/bits/pthreadtypes.h +++ /dev/null @@ -1,121 +0,0 @@ -/* Declaration of common pthread types for all architectures. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_PTHREADTYPES_COMMON_H -# define _BITS_PTHREADTYPES_COMMON_H 1 - -/* For internal mutex and condition variable definitions. */ -#include - -/* Thread identifiers. The structure of the attribute type is not - exposed on purpose. */ -typedef unsigned long int pthread_t; - - -/* Data structures for mutex handling. The structure of the attribute - type is not exposed on purpose. */ -typedef union -{ - char __size[__SIZEOF_PTHREAD_MUTEXATTR_T]; - int __align; -} pthread_mutexattr_t; - - -/* Data structure for condition variable handling. The structure of - the attribute type is not exposed on purpose. */ -typedef union -{ - char __size[__SIZEOF_PTHREAD_CONDATTR_T]; - int __align; -} pthread_condattr_t; - - -/* Keys for thread-specific data */ -typedef unsigned int pthread_key_t; - - -/* Once-only execution */ -typedef int __ONCE_ALIGNMENT pthread_once_t; - - -union pthread_attr_t -{ - char __size[__SIZEOF_PTHREAD_ATTR_T]; - long int __align; -}; -#ifndef __have_pthread_attr_t -typedef union pthread_attr_t pthread_attr_t; -# define __have_pthread_attr_t1 -#endif - - -typedef union -{ - struct __pthread_mutex_s __data; - char __size[__SIZEOF_PTHREAD_MUTEX_T]; - long int __align; -} pthread_mutex_t; - - -typedef union -{ - struct __pthread_cond_s __data; - char __size[__SIZEOF_PTHREAD_COND_T]; - __extension__ long long int __align; -} pthread_cond_t; - - -#if defined __USE_UNIX98 || defined __USE_XOPEN2K -/* Data structure for reader-writer lock variable handling. The - structure of the attribute type is deliberately not exposed. */ -typedef union -{ - struct __pthread_rwlock_arch_t __data; - char __size[__SIZEOF_PTHREAD_RWLOCK_T]; - long int __align; -} pthread_rwlock_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T]; - long int __align; -} pthread_rwlockattr_t; -#endif - - -#ifdef __USE_XOPEN2K -/* POSIX spinlock data type. */ -typedef volatile int pthread_spinlock_t; - - -/* POSIX barriers data type. The structure of the type is - deliberately not exposed. */ -typedef union -{ - char __size[__SIZEOF_PTHREAD_BARRIER_T]; - long int __align; -} pthread_barrier_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_BARRIERATTR_T]; - int __align; -} pthread_barrierattr_t; -#endif - -#endif diff --git a/sysdeps/nptl/bits/thread-shared-types.h b/sysdeps/nptl/bits/thread-shared-types.h deleted file mode 100644 index d95ac9ac13..0000000000 --- a/sysdeps/nptl/bits/thread-shared-types.h +++ /dev/null @@ -1,156 +0,0 @@ -/* Common threading primitives definitions for both POSIX and C11. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _THREAD_SHARED_TYPES_H -#define _THREAD_SHARED_TYPES_H 1 - -/* Arch-specific definitions. Each architecture must define the following - macros to define the expected sizes of pthread data types: - - __SIZEOF_PTHREAD_ATTR_T - size of pthread_attr_t. - __SIZEOF_PTHREAD_MUTEX_T - size of pthread_mutex_t. - __SIZEOF_PTHREAD_MUTEXATTR_T - size of pthread_mutexattr_t. - __SIZEOF_PTHREAD_COND_T - size of pthread_cond_t. - __SIZEOF_PTHREAD_CONDATTR_T - size of pthread_condattr_t. - __SIZEOF_PTHREAD_RWLOCK_T - size of pthread_rwlock_t. - __SIZEOF_PTHREAD_RWLOCKATTR_T - size of pthread_rwlockattr_t. - __SIZEOF_PTHREAD_BARRIER_T - size of pthread_barrier_t. - __SIZEOF_PTHREAD_BARRIERATTR_T - size of pthread_barrierattr_t. - - Also, the following macros must be define for internal pthread_mutex_t - struct definitions (struct __pthread_mutex_s): - - __PTHREAD_COMPAT_PADDING_MID - any additional members after 'kind' - and before '__spin' (for 64 bits) or - '__nusers' (for 32 bits). - __PTHREAD_COMPAT_PADDING_END - any additional members at the end of - the internal structure. - __PTHREAD_MUTEX_LOCK_ELISION - 1 if the architecture supports lock - elision or 0 otherwise. - - The additional macro defines any constraint for the lock alignment - inside the thread structures: - - __LOCK_ALIGNMENT - for internal lock/futex usage. - - Same idea but for the once locking primitive: - - __ONCE_ALIGNMENT - for pthread_once_t/once_flag definition. - - And finally the internal pthread_rwlock_t (struct __pthread_rwlock_arch_t) - must be defined. - */ -#include - -/* Common definition of pthread_mutex_t. */ - -#if __WORDSIZE == 64 -typedef struct __pthread_internal_list -{ - struct __pthread_internal_list *__prev; - struct __pthread_internal_list *__next; -} __pthread_list_t; -#else -typedef struct __pthread_internal_slist -{ - struct __pthread_internal_slist *__next; -} __pthread_slist_t; -#endif - -/* Lock elision support. */ -#if __PTHREAD_MUTEX_LOCK_ELISION -# if __WORDSIZE == 64 -# define __PTHREAD_SPINS_DATA \ - short __spins; \ - short __elision; -# define __PTHREAD_SPINS 0, 0 -# else -# define __PTHREAD_SPINS_DATA \ - struct \ - { \ - short __espins; \ - short __eelision; \ - } __elision_data -# define __PTHREAD_SPINS { 0, 0 } -# define __spins __elision_data.__espins -# define __elision __elision_data.__eelision -# endif -#else -# define __PTHREAD_SPINS_DATA int __spins -/* Mutex __spins initializer used by PTHREAD_MUTEX_INITIALIZER. */ -# define __PTHREAD_SPINS 0 -#endif - -struct __pthread_mutex_s -{ - int __lock __LOCK_ALIGNMENT; - unsigned int __count; - int __owner; -#if __WORDSIZE == 64 - unsigned int __nusers; -#endif - /* KIND must stay at this position in the structure to maintain - binary compatibility with static initializers. */ - int __kind; - __PTHREAD_COMPAT_PADDING_MID; -#if __WORDSIZE == 64 - __PTHREAD_SPINS_DATA; - __pthread_list_t __list; -# define __PTHREAD_MUTEX_HAVE_PREV 1 -#else - unsigned int __nusers; - __extension__ union - { - __PTHREAD_SPINS_DATA; - __pthread_slist_t __list; - } -#endif - __PTHREAD_COMPAT_PADDING_END; -}; - - -/* Common definition of pthread_cond_t. */ - -struct __pthread_cond_s -{ - __extension__ union - { - __extension__ unsigned long long int __wseq; - struct - { - unsigned int __low; - unsigned int __high; - } __wseq32; - }; - __extension__ union - { - __extension__ unsigned long long int __g1_start; - struct - { - unsigned int __low; - unsigned int __high; - } __g1_start32; - }; - unsigned int __g_refs[2] __LOCK_ALIGNMENT; - unsigned int __g_size[2]; - unsigned int __g1_orig_size; - unsigned int __wrefs; - unsigned int __g_signals[2]; -}; - -#endif /* _THREAD_SHARED_TYPES_H */ diff --git a/sysdeps/nptl/fork.c b/sysdeps/nptl/fork.c deleted file mode 100644 index 4bb87e2331..0000000000 --- a/sysdeps/nptl/fork.c +++ /dev/null @@ -1,255 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static void -fresetlockfiles (void) -{ - _IO_ITER i; - - for (i = _IO_iter_begin(); i != _IO_iter_end(); i = _IO_iter_next(i)) - if ((_IO_iter_file (i)->_flags & _IO_USER_LOCK) == 0) - _IO_lock_init (*((_IO_lock_t *) _IO_iter_file(i)->_lock)); -} - - -pid_t -__libc_fork (void) -{ - pid_t pid; - struct used_handler - { - struct fork_handler *handler; - struct used_handler *next; - } *allp = NULL; - - /* Determine if we are running multiple threads. We skip some fork - handlers in the single-thread case, to make fork safer to use in - signal handlers. POSIX requires that fork is async-signal-safe, - but our current fork implementation is not. */ - bool multiple_threads = THREAD_GETMEM (THREAD_SELF, header.multiple_threads); - - /* Run all the registered preparation handlers. In reverse order. - While doing this we build up a list of all the entries. */ - struct fork_handler *runp; - while ((runp = __fork_handlers) != NULL) - { - /* Make sure we read from the current RUNP pointer. */ - atomic_full_barrier (); - - unsigned int oldval = runp->refcntr; - - if (oldval == 0) - /* This means some other thread removed the list just after - the pointer has been loaded. Try again. Either the list - is empty or we can retry it. */ - continue; - - /* Bump the reference counter. */ - if (atomic_compare_and_exchange_bool_acq (&__fork_handlers->refcntr, - oldval + 1, oldval)) - /* The value changed, try again. */ - continue; - - /* We bumped the reference counter for the first entry in the - list. That means that none of the following entries will - just go away. The unloading code works in the order of the - list. - - While executing the registered handlers we are building a - list of all the entries so that we can go backward later on. */ - while (1) - { - /* Execute the handler if there is one. */ - if (runp->prepare_handler != NULL) - runp->prepare_handler (); - - /* Create a new element for the list. */ - struct used_handler *newp - = (struct used_handler *) alloca (sizeof (*newp)); - newp->handler = runp; - newp->next = allp; - allp = newp; - - /* Advance to the next handler. */ - runp = runp->next; - if (runp == NULL) - break; - - /* Bump the reference counter for the next entry. */ - atomic_increment (&runp->refcntr); - } - - /* We are done. */ - break; - } - - /* If we are not running multiple threads, we do not have to - preserve lock state. If fork runs from a signal handler, only - async-signal-safe functions can be used in the child. These data - structures are only used by unsafe functions, so their state does - not matter if fork was called from a signal handler. */ - if (multiple_threads) - { - _IO_list_lock (); - - /* Acquire malloc locks. This needs to come last because fork - handlers may use malloc, and the libio list lock has an - indirect malloc dependency as well (via the getdelim - function). */ - call_function_static_weak (__malloc_fork_lock_parent); - } - -#ifdef ARCH_FORK - pid = ARCH_FORK (); -#else -# error "ARCH_FORK must be defined so that the CLONE_SETTID flag is used" - pid = INLINE_SYSCALL (fork, 0); -#endif - - - if (pid == 0) - { - struct pthread *self = THREAD_SELF; - - /* See __pthread_once. */ - if (__fork_generation_pointer != NULL) - *__fork_generation_pointer += __PTHREAD_ONCE_FORK_GEN_INCR; - -#if HP_TIMING_AVAIL - /* The CPU clock of the thread and process have to be set to zero. */ - hp_timing_t now; - HP_TIMING_NOW (now); - THREAD_SETMEM (self, cpuclock_offset, now); - GL(dl_cpuclock_offset) = now; -#endif - -#ifdef __NR_set_robust_list - /* Initialize the robust mutex list setting in the kernel which has - been reset during the fork. We do not check for errors because if - it fails here, it must have failed at process startup as well and - nobody could have used robust mutexes. - Before we do that, we have to clear the list of robust mutexes - because we do not inherit ownership of mutexes from the parent. - We do not have to set self->robust_head.futex_offset since we do - inherit the correct value from the parent. We do not need to clear - the pending operation because it must have been zero when fork was - called. */ -# ifdef __PTHREAD_MUTEX_HAVE_PREV - self->robust_prev = &self->robust_head; -# endif - self->robust_head.list = &self->robust_head; -# ifdef SHARED - if (__builtin_expect (__libc_pthread_functions_init, 0)) - PTHFCT_CALL (ptr_set_robust, (self)); -# else - extern __typeof (__nptl_set_robust) __nptl_set_robust - __attribute__((weak)); - if (__builtin_expect (__nptl_set_robust != NULL, 0)) - __nptl_set_robust (self); -# endif -#endif - - /* Reset the lock state in the multi-threaded case. */ - if (multiple_threads) - { - /* Release malloc locks. */ - call_function_static_weak (__malloc_fork_unlock_child); - - /* Reset the file list. These are recursive mutexes. */ - fresetlockfiles (); - - /* Reset locks in the I/O code. */ - _IO_list_resetlock (); - } - - /* Reset the lock the dynamic loader uses to protect its data. */ - __rtld_lock_initialize (GL(dl_load_lock)); - - /* Run the handlers registered for the child. */ - while (allp != NULL) - { - if (allp->handler->child_handler != NULL) - allp->handler->child_handler (); - - /* Note that we do not have to wake any possible waiter. - This is the only thread in the new process. The count - may have been bumped up by other threads doing a fork. - We reset it to 1, to avoid waiting for non-existing - thread(s) to release the count. */ - allp->handler->refcntr = 1; - - /* XXX We could at this point look through the object pool - and mark all objects not on the __fork_handlers list as - unused. This is necessary in case the fork() happened - while another thread called dlclose() and that call had - to create a new list. */ - - allp = allp->next; - } - - /* Initialize the fork lock. */ - __fork_lock = LLL_LOCK_INITIALIZER; - } - else - { - /* Release acquired locks in the multi-threaded case. */ - if (multiple_threads) - { - /* Release malloc locks, parent process variant. */ - call_function_static_weak (__malloc_fork_unlock_parent); - - /* We execute this even if the 'fork' call failed. */ - _IO_list_unlock (); - } - - /* Run the handlers registered for the parent. */ - while (allp != NULL) - { - if (allp->handler->parent_handler != NULL) - allp->handler->parent_handler (); - - if (atomic_decrement_and_test (&allp->handler->refcntr) - && allp->handler->need_signal) - futex_wake (&allp->handler->refcntr, 1, FUTEX_PRIVATE); - - allp = allp->next; - } - } - - return pid; -} -weak_alias (__libc_fork, __fork) -libc_hidden_def (__fork) -weak_alias (__libc_fork, fork) diff --git a/sysdeps/nptl/fork.h b/sysdeps/nptl/fork.h deleted file mode 100644 index e94b027140..0000000000 --- a/sysdeps/nptl/fork.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* The fork generation counter, defined in libpthread. */ -extern unsigned long int __fork_generation attribute_hidden; - -/* Pointer to the fork generation counter in the thread library. */ -extern unsigned long int *__fork_generation_pointer attribute_hidden; - -/* Lock to protect allocation and deallocation of fork handlers. */ -extern int __fork_lock attribute_hidden; - -/* Elements of the fork handler lists. */ -struct fork_handler -{ - struct fork_handler *next; - void (*prepare_handler) (void); - void (*parent_handler) (void); - void (*child_handler) (void); - void *dso_handle; - unsigned int refcntr; - int need_signal; -}; - -/* The single linked list of all currently registered for handlers. */ -extern struct fork_handler *__fork_handlers attribute_hidden; - - -/* Function to call to unregister fork handlers. */ -extern void __unregister_atfork (void *dso_handle) attribute_hidden; -#define UNREGISTER_ATFORK(dso_handle) __unregister_atfork (dso_handle) - - -/* C library side function to register new fork handlers. */ -extern int __register_atfork (void (*__prepare) (void), - void (*__parent) (void), - void (*__child) (void), - void *dso_handle); -libc_hidden_proto (__register_atfork) - -/* Add a new element to the fork list. */ -extern void __linkin_atfork (struct fork_handler *newp) attribute_hidden; diff --git a/sysdeps/nptl/futex-internal.h b/sysdeps/nptl/futex-internal.h deleted file mode 100644 index be7a33f460..0000000000 --- a/sysdeps/nptl/futex-internal.h +++ /dev/null @@ -1,203 +0,0 @@ -/* futex operations for glibc-internal use. Stub version; do not include - this file directly. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef STUB_FUTEX_INTERNAL_H -#define STUB_FUTEX_INTERNAL_H - -#include -#include -#include -#include - -/* This file defines futex operations used internally in glibc. A futex - consists of the so-called futex word in userspace, which is of type - unsigned int and represents an application-specific condition, and kernel - state associated with this particular futex word (e.g., wait queues). The - futex operations we provide are wrappers for the futex syscalls and add - glibc-specific error checking of the syscall return value. We abort on - error codes that are caused by bugs in glibc or in the calling application, - or when an error code is not known. We return error codes that can arise - in correct executions to the caller. Each operation calls out exactly the - return values that callers need to handle. - - The private flag must be either FUTEX_PRIVATE or FUTEX_SHARED. - FUTEX_PRIVATE is always supported, and the implementation can internally - use FUTEX_SHARED when FUTEX_PRIVATE is requested. FUTEX_SHARED is not - necessarily supported (use futex_supports_pshared to detect this). - - We expect callers to only use these operations if futexes and the - specific futex operations being used are supported (e.g., FUTEX_SHARED). - - Given that waking other threads waiting on a futex involves concurrent - accesses to the futex word, you must use atomic operations to access the - futex word. - - Both absolute and relative timeouts can be used. An absolute timeout - expires when the given specific point in time on the CLOCK_REALTIME clock - passes, or when it already has passed. A relative timeout expires when - the given duration of time on the CLOCK_MONOTONIC clock passes. Relative - timeouts may be imprecise (see futex_supports_exact_relative_timeouts). - - Due to POSIX requirements on when synchronization data structures such - as mutexes or semaphores can be destroyed and due to the futex design - having separate fast/slow paths for wake-ups, we need to consider that - futex_wake calls might effectively target a data structure that has been - destroyed and reused for another object, or unmapped; thus, some - errors or spurious wake-ups can happen in correct executions that would - not be possible in a program using just a single futex whose lifetime - does not end before the program terminates. For background, see: - https://sourceware.org/ml/libc-alpha/2014-04/msg00075.html - https://lkml.org/lkml/2014/11/27/472 */ - -/* Defined this way for interoperability with lowlevellock. - FUTEX_PRIVATE must be zero because the initializers for pthread_mutex_t, - pthread_rwlock_t, and pthread_cond_t initialize the respective field of - those structures to zero, and we want FUTEX_PRIVATE to be the default. */ -#define FUTEX_PRIVATE LLL_PRIVATE -#define FUTEX_SHARED LLL_SHARED -#if FUTEX_PRIVATE != 0 -# error FUTEX_PRIVATE must be equal to 0 -#endif - -/* Returns EINVAL if PSHARED is neither PTHREAD_PROCESS_PRIVATE nor - PTHREAD_PROCESS_SHARED; otherwise, returns 0 if PSHARED is supported, and - ENOTSUP if not. */ -static __always_inline int -futex_supports_pshared (int pshared); - -/* Returns true if relative timeouts are robust to concurrent changes to the - system clock. If this returns false, relative timeouts can still be used - but might be effectively longer or shorter than requested. */ -static __always_inline bool -futex_supports_exact_relative_timeouts (void); - -/* Atomically wrt other futex operations on the same futex, this blocks iff - the value *FUTEX_WORD matches the expected value. This is - semantically equivalent to: - l = (FUTEX_WORD); - wait_flag = (FUTEX_WORD); - lock (l); - val = atomic_load_relaxed (FUTEX_WORD); - if (val != expected) { unlock (l); return EAGAIN; } - atomic_store_relaxed (wait_flag, true); - unlock (l); - // Now block; can time out in futex_time_wait (see below) - while (atomic_load_relaxed(wait_flag) && !); - - Note that no guarantee of a happens-before relation between a woken - futex_wait and a futex_wake is documented; however, this does not matter - in practice because we have to consider spurious wake-ups (see below), - and thus would not be able to reliably reason about which futex_wake woke - us. - - Returns 0 if woken by a futex operation or spuriously. (Note that due to - the POSIX requirements mentioned above, we need to conservatively assume - that unrelated futex_wake operations could wake this futex; it is easiest - to just be prepared for spurious wake-ups.) - Returns EAGAIN if the futex word did not match the expected value. - Returns EINTR if waiting was interrupted by a signal. - - Note that some previous code in glibc assumed the underlying futex - operation (e.g., syscall) to start with or include the equivalent of a - seq_cst fence; this allows one to avoid an explicit seq_cst fence before - a futex_wait call when synchronizing similar to Dekker synchronization. - However, we make no such guarantee here. */ -static __always_inline int -futex_wait (unsigned int *futex_word, unsigned int expected, int private); - -/* Like futex_wait but does not provide any indication why we stopped waiting. - Thus, when this function returns, you have to always check FUTEX_WORD to - determine whether you need to continue waiting, and you cannot detect - whether the waiting was interrupted by a signal. Example use: - while (atomic_load_relaxed (&futex_word) == 23) - futex_wait_simple (&futex_word, 23, FUTEX_PRIVATE); - This is common enough to make providing this wrapper worthwhile. */ -static __always_inline void -futex_wait_simple (unsigned int *futex_word, unsigned int expected, - int private) -{ - ignore_value (futex_wait (futex_word, expected, private)); -} - - -/* Like futex_wait but is a POSIX cancellation point. */ -static __always_inline int -futex_wait_cancelable (unsigned int *futex_word, unsigned int expected, - int private); - -/* Like futex_wait, but will eventually time out (i.e., stop being - blocked) after the duration of time provided (i.e., RELTIME) has - passed. The caller must provide a normalized RELTIME. RELTIME can also - equal NULL, in which case this function behaves equivalent to futex_wait. - - Returns the same values as futex_wait under those same conditions; - additionally, returns ETIMEDOUT if the timeout expired. - */ -static __always_inline int -futex_reltimed_wait (unsigned int* futex_word, unsigned int expected, - const struct timespec* reltime, int private); - -/* Like futex_reltimed_wait but is a POSIX cancellation point. */ -static __always_inline int -futex_reltimed_wait_cancelable (unsigned int* futex_word, - unsigned int expected, - const struct timespec* reltime, int private); - -/* Like futex_reltimed_wait, but the provided timeout (ABSTIME) is an - absolute point in time; a call will time out after this point in time. */ -static __always_inline int -futex_abstimed_wait (unsigned int* futex_word, unsigned int expected, - const struct timespec* abstime, int private); - -/* Like futex_reltimed_wait but is a POSIX cancellation point. */ -static __always_inline int -futex_abstimed_wait_cancelable (unsigned int* futex_word, - unsigned int expected, - const struct timespec* abstime, int private); - -/* Atomically wrt other futex operations on the same futex, this unblocks the - specified number of processes, or all processes blocked on this futex if - there are fewer than the specified number. Semantically, this is - equivalent to: - l = (FUTEX_WORD); - lock (l); - for (res = 0; PROCESSES_TO_WAKE > 0; PROCESSES_TO_WAKE--, res++) { - if () break; - wf = (FUTEX_WORD); - // No happens-before guarantee with woken futex_wait (see above) - atomic_store_relaxed (wf, 0); - } - return res; - - Note that we need to support futex_wake calls to past futexes whose memory - has potentially been reused due to POSIX' requirements on synchronization - object destruction (see above); therefore, we must not report or abort - on most errors. */ -static __always_inline void -futex_wake (unsigned int* futex_word, int processes_to_wake, int private); - -/* Calls __libc_fatal with an error message. Convenience function for - concrete implementations of the futex interface. */ -static __always_inline __attribute__ ((__noreturn__)) void -futex_fatal_error (void) -{ - __libc_fatal ("The futex facility returned an unexpected error code."); -} - -#endif /* futex-internal.h */ diff --git a/sysdeps/nptl/gai_misc.h b/sysdeps/nptl/gai_misc.h deleted file mode 100644 index 8b2a2c1d78..0000000000 --- a/sysdeps/nptl/gai_misc.h +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* We define a special synchronization primitive for AIO. POSIX - conditional variables would be ideal but the pthread_cond_*wait - operations do not return on EINTR. This is a requirement for - correct aio_suspend and lio_listio implementations. */ - -#include -#include -#include -#include - -#define DONT_NEED_GAI_MISC_COND 1 - -#define GAI_MISC_NOTIFY(waitlist) \ - do { \ - if (*waitlist->counterp > 0 && --*waitlist->counterp == 0) \ - futex_wake ((unsigned int *) waitlist->counterp, 1, FUTEX_PRIVATE); \ - } while (0) - -#define GAI_MISC_WAIT(result, futex, timeout, cancel) \ - do { \ - volatile unsigned int *futexaddr = &futex; \ - unsigned int oldval = futex; \ - \ - if (oldval != 0) \ - { \ - pthread_mutex_unlock (&__gai_requests_mutex); \ - \ - int oldtype; \ - if (cancel) \ - oldtype = LIBC_CANCEL_ASYNC (); \ - \ - int status; \ - do \ - { \ - status = futex_reltimed_wait ((unsigned int *) futexaddr, oldval, \ - timeout, FUTEX_PRIVATE); \ - if (status != EAGAIN) \ - break; \ - \ - oldval = *futexaddr; \ - } \ - while (oldval != 0); \ - \ - if (cancel) \ - LIBC_CANCEL_RESET (oldtype); \ - \ - if (status == EINTR) \ - result = EINTR; \ - else if (status == ETIMEDOUT) \ - result = EAGAIN; \ - else \ - assert (status == 0 || status == EAGAIN); \ - \ - pthread_mutex_lock (&__gai_requests_mutex); \ - } \ - } while (0) - - -#define gai_start_notify_thread __gai_start_notify_thread -#define gai_create_helper_thread __gai_create_helper_thread - -extern inline void -__gai_start_notify_thread (void) -{ - sigset_t ss; - sigemptyset (&ss); - int sigerr __attribute__ ((unused)); - sigerr = pthread_sigmask (SIG_SETMASK, &ss, NULL); - assert_perror (sigerr); -} - -extern inline int -__gai_create_helper_thread (pthread_t *threadp, void *(*tf) (void *), - void *arg) -{ - pthread_attr_t attr; - - /* Make sure the thread is created detached. */ - pthread_attr_init (&attr); - pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); - - /* The helper thread needs only very little resources. */ - (void) pthread_attr_setstacksize (&attr, - __pthread_get_minstack (&attr) - + 4 * PTHREAD_STACK_MIN); - - /* Block all signals in the helper thread. To do this thoroughly we - temporarily have to block all signals here. */ - sigset_t ss; - sigset_t oss; - sigfillset (&ss); - int sigerr __attribute__ ((unused)); - sigerr = pthread_sigmask (SIG_SETMASK, &ss, &oss); - assert_perror (sigerr); - - int ret = pthread_create (threadp, &attr, tf, arg); - - /* Restore the signal mask. */ - sigerr = pthread_sigmask (SIG_SETMASK, &oss, NULL); - assert_perror (sigerr); - - (void) pthread_attr_destroy (&attr); - return ret; -} - -#include_next diff --git a/sysdeps/nptl/internaltypes.h b/sysdeps/nptl/internaltypes.h deleted file mode 100644 index 5be9d983ab..0000000000 --- a/sysdeps/nptl/internaltypes.h +++ /dev/null @@ -1,179 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _INTERNALTYPES_H -#define _INTERNALTYPES_H 1 - -#include -#include -#include - - -struct pthread_attr -{ - /* Scheduler parameters and priority. */ - struct sched_param schedparam; - int schedpolicy; - /* Various flags like detachstate, scope, etc. */ - int flags; - /* Size of guard area. */ - size_t guardsize; - /* Stack handling. */ - void *stackaddr; - size_t stacksize; - /* Affinity map. */ - cpu_set_t *cpuset; - size_t cpusetsize; -}; - -#define ATTR_FLAG_DETACHSTATE 0x0001 -#define ATTR_FLAG_NOTINHERITSCHED 0x0002 -#define ATTR_FLAG_SCOPEPROCESS 0x0004 -#define ATTR_FLAG_STACKADDR 0x0008 -#define ATTR_FLAG_OLDATTR 0x0010 -#define ATTR_FLAG_SCHED_SET 0x0020 -#define ATTR_FLAG_POLICY_SET 0x0040 - - -/* Mutex attribute data structure. */ -struct pthread_mutexattr -{ - /* Identifier for the kind of mutex. - - Bit 31 is set if the mutex is to be shared between processes. - - Bit 0 to 30 contain one of the PTHREAD_MUTEX_ values to identify - the type of the mutex. */ - int mutexkind; -}; - - -/* Conditional variable attribute data structure. */ -struct pthread_condattr -{ - /* Combination of values: - - Bit 0 : flag whether conditional variable will be - sharable between processes. - Bit 1-COND_CLOCK_BITS: Clock ID. COND_CLOCK_BITS is the number of bits - needed to represent the ID of the clock. */ - int value; -}; -#define COND_CLOCK_BITS 1 - - -/* Read-write lock variable attribute data structure. */ -struct pthread_rwlockattr -{ - int lockkind; - int pshared; -}; - - -/* Barrier data structure. See pthread_barrier_wait for a description - of how these fields are used. */ -struct pthread_barrier -{ - unsigned int in; - unsigned int current_round; - unsigned int count; - int shared; - unsigned int out; -}; -/* See pthread_barrier_wait for a description. */ -#define BARRIER_IN_THRESHOLD (UINT_MAX/2) - - -/* Barrier variable attribute data structure. */ -struct pthread_barrierattr -{ - int pshared; -}; - - -/* Thread-local data handling. */ -struct pthread_key_struct -{ - /* Sequence numbers. Even numbers indicated vacant entries. Note - that zero is even. We use uintptr_t to not require padding on - 32- and 64-bit machines. On 64-bit machines it helps to avoid - wrapping, too. */ - uintptr_t seq; - - /* Destructor for the data. */ - void (*destr) (void *); -}; - -/* Check whether an entry is unused. */ -#define KEY_UNUSED(p) (((p) & 1) == 0) -/* Check whether a key is usable. We cannot reuse an allocated key if - the sequence counter would overflow after the next destroy call. - This would mean that we potentially free memory for a key with the - same sequence. This is *very* unlikely to happen, A program would - have to create and destroy a key 2^31 times (on 32-bit platforms, - on 64-bit platforms that would be 2^63). If it should happen we - simply don't use this specific key anymore. */ -#define KEY_USABLE(p) (((uintptr_t) (p)) < ((uintptr_t) ((p) + 2))) - - -/* Handling of read-write lock data. */ -// XXX For now there is only one flag. Maybe more in future. -#define RWLOCK_RECURSIVE(rwlock) ((rwlock)->__data.__flags != 0) - - -/* Semaphore variable structure. */ -struct new_sem -{ -#if __HAVE_64B_ATOMICS - /* The data field holds both value (in the least-significant 32 bytes) and - nwaiters. */ -# if __BYTE_ORDER == __LITTLE_ENDIAN -# define SEM_VALUE_OFFSET 0 -# elif __BYTE_ORDER == __BIG_ENDIAN -# define SEM_VALUE_OFFSET 1 -# else -# error Unsupported byte order. -# endif -# define SEM_NWAITERS_SHIFT 32 -# define SEM_VALUE_MASK (~(unsigned int)0) - uint64_t data; - int private; - int pad; -#else -# define SEM_VALUE_SHIFT 1 -# define SEM_NWAITERS_MASK ((unsigned int)1) - unsigned int value; - int private; - int pad; - unsigned int nwaiters; -#endif -}; - -struct old_sem -{ - unsigned int value; -}; - - -/* Compatibility type for old conditional variable interfaces. */ -typedef struct -{ - pthread_cond_t *cond; -} pthread_cond_2_0_t; - -#endif /* internaltypes.h */ diff --git a/sysdeps/nptl/jmp-unwind.c b/sysdeps/nptl/jmp-unwind.c deleted file mode 100644 index 8a26064c7f..0000000000 --- a/sysdeps/nptl/jmp-unwind.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Clean up stack frames unwound by longjmp. Linux version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -extern void __pthread_cleanup_upto (__jmp_buf env, char *targetframe); -#pragma weak __pthread_cleanup_upto - - -void -_longjmp_unwind (jmp_buf env, int val) -{ - __libc_ptf_call (__pthread_cleanup_upto, (env->__jmpbuf, - CURRENT_STACK_FRAME), 0); -} diff --git a/sysdeps/nptl/libc-lock.h b/sysdeps/nptl/libc-lock.h deleted file mode 100644 index f1b5659d32..0000000000 --- a/sysdeps/nptl/libc-lock.h +++ /dev/null @@ -1,187 +0,0 @@ -/* libc-internal interface for mutex locks. NPTL version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#ifndef _LIBC_LOCK_H -#define _LIBC_LOCK_H 1 - -#include -#define __need_NULL -#include - - -/* Mutex type. */ -#if defined _LIBC || defined _IO_MTSAFE_IO -# if (!IS_IN (libc) && !IS_IN (libpthread)) || !defined _LIBC -typedef struct { pthread_mutex_t mutex; } __libc_lock_recursive_t; -# else -typedef struct { int lock; int cnt; void *owner; } __libc_lock_recursive_t; -# endif -#else -typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; -#endif - -/* Define a lock variable NAME with storage class CLASS. The lock must be - initialized with __libc_lock_init before it can be used (or define it - with __libc_lock_define_initialized, below). Use `extern' for CLASS to - declare a lock defined in another module. In public structure - definitions you must use a pointer to the lock structure (i.e., NAME - begins with a `*'), because its storage size will not be known outside - of libc. */ -#define __libc_lock_define_recursive(CLASS,NAME) \ - CLASS __libc_lock_recursive_t NAME; - -/* Define an initialized recursive lock variable NAME with storage - class CLASS. */ -#if defined _LIBC && (IS_IN (libc) || IS_IN (libpthread)) -# define __libc_lock_define_initialized_recursive(CLASS, NAME) \ - CLASS __libc_lock_recursive_t NAME = _LIBC_LOCK_RECURSIVE_INITIALIZER; -# define _LIBC_LOCK_RECURSIVE_INITIALIZER \ - { LLL_LOCK_INITIALIZER, 0, NULL } -#else -# define __libc_lock_define_initialized_recursive(CLASS,NAME) \ - CLASS __libc_lock_recursive_t NAME = _LIBC_LOCK_RECURSIVE_INITIALIZER; -# define _LIBC_LOCK_RECURSIVE_INITIALIZER \ - {PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP} -#endif - -/* Initialize a recursive mutex. */ -#if defined _LIBC && (IS_IN (libc) || IS_IN (libpthread)) -# define __libc_lock_init_recursive(NAME) \ - ((void) ((NAME) = (__libc_lock_recursive_t) _LIBC_LOCK_RECURSIVE_INITIALIZER)) -#else -# define __libc_lock_init_recursive(NAME) \ - do { \ - if (__pthread_mutex_init != NULL) \ - { \ - pthread_mutexattr_t __attr; \ - __pthread_mutexattr_init (&__attr); \ - __pthread_mutexattr_settype (&__attr, PTHREAD_MUTEX_RECURSIVE_NP); \ - __pthread_mutex_init (&(NAME).mutex, &__attr); \ - __pthread_mutexattr_destroy (&__attr); \ - } \ - } while (0) -#endif - -/* Finalize recursive named lock. */ -#if defined _LIBC && (IS_IN (libc) || IS_IN (libpthread)) -# define __libc_lock_fini_recursive(NAME) ((void) 0) -#else -# define __libc_lock_fini_recursive(NAME) \ - __libc_maybe_call (__pthread_mutex_destroy, (&(NAME).mutex), 0) -#endif - -/* Lock the recursive named lock variable. */ -#if defined _LIBC && (IS_IN (libc) || IS_IN (libpthread)) -# define __libc_lock_lock_recursive(NAME) \ - do { \ - void *self = THREAD_SELF; \ - if ((NAME).owner != self) \ - { \ - lll_lock ((NAME).lock, LLL_PRIVATE); \ - (NAME).owner = self; \ - } \ - ++(NAME).cnt; \ - } while (0) -#else -# define __libc_lock_lock_recursive(NAME) \ - __libc_maybe_call (__pthread_mutex_lock, (&(NAME).mutex), 0) -#endif - -/* Try to lock the recursive named lock variable. */ -#if defined _LIBC && (IS_IN (libc) || IS_IN (libpthread)) -# define __libc_lock_trylock_recursive(NAME) \ - ({ \ - int result = 0; \ - void *self = THREAD_SELF; \ - if ((NAME).owner != self) \ - { \ - if (lll_trylock ((NAME).lock) == 0) \ - { \ - (NAME).owner = self; \ - (NAME).cnt = 1; \ - } \ - else \ - result = EBUSY; \ - } \ - else \ - ++(NAME).cnt; \ - result; \ - }) -#else -# define __libc_lock_trylock_recursive(NAME) \ - __libc_maybe_call (__pthread_mutex_trylock, (&(NAME).mutex), 0) -#endif - -/* Unlock the recursive named lock variable. */ -#if defined _LIBC && (IS_IN (libc) || IS_IN (libpthread)) -/* We do no error checking here. */ -# define __libc_lock_unlock_recursive(NAME) \ - do { \ - if (--(NAME).cnt == 0) \ - { \ - (NAME).owner = NULL; \ - lll_unlock ((NAME).lock, LLL_PRIVATE); \ - } \ - } while (0) -#else -# define __libc_lock_unlock_recursive(NAME) \ - __libc_maybe_call (__pthread_mutex_unlock, (&(NAME).mutex), 0) -#endif - -/* Note that for I/O cleanup handling we are using the old-style - cancel handling. It does not have to be integrated with C++ since - no C++ code is called in the middle. The old-style handling is - faster and the support is not going away. */ -extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer, - void (*routine) (void *), void *arg); -extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer, - int execute); - -/* Start critical region with cleanup. */ -#define __libc_cleanup_region_start(DOIT, FCT, ARG) \ - { struct _pthread_cleanup_buffer _buffer; \ - int _avail; \ - if (DOIT) { \ - _avail = PTFAVAIL (_pthread_cleanup_push_defer); \ - if (_avail) { \ - __libc_ptf_call_always (_pthread_cleanup_push_defer, (&_buffer, FCT, \ - ARG)); \ - } else { \ - _buffer.__routine = (FCT); \ - _buffer.__arg = (ARG); \ - } \ - } else { \ - _avail = 0; \ - } - -/* End critical region with cleanup. */ -#define __libc_cleanup_region_end(DOIT) \ - if (_avail) { \ - __libc_ptf_call_always (_pthread_cleanup_pop_restore, (&_buffer, DOIT));\ - } else if (DOIT) \ - _buffer.__routine (_buffer.__arg); \ - } - - -/* Hide the definitions which are only supposed to be used inside libc in - a separate file. This file is not present in the installation! */ -#ifdef _LIBC -# include "libc-lockP.h" -#endif - -#endif /* libc-lock.h */ diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h deleted file mode 100644 index a43e62db4d..0000000000 --- a/sysdeps/nptl/libc-lockP.h +++ /dev/null @@ -1,438 +0,0 @@ -/* Private libc-internal interface for mutex locks. NPTL version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#ifndef _LIBC_LOCKP_H -#define _LIBC_LOCKP_H 1 - -#include -#define __need_NULL -#include - - -/* Fortunately Linux now has a mean to do locking which is realtime - safe without the aid of the thread library. We also need no fancy - options like error checking mutexes etc. We only need simple - locks, maybe recursive. This can be easily and cheaply implemented - using futexes. We will use them everywhere except in ld.so since - ld.so might be used on old kernels with a different libc.so. */ -#include -#include -#include - -#if IS_IN (libpthread) -/* This gets us the declarations of the __pthread_* internal names, - and hidden_proto for them. */ -# include -#endif - -/* Mutex type. */ -#if !IS_IN (libc) && !IS_IN (libpthread) -typedef pthread_mutex_t __libc_lock_t; -#else -typedef int __libc_lock_t; -#endif -typedef struct { pthread_mutex_t mutex; } __rtld_lock_recursive_t; -typedef pthread_rwlock_t __libc_rwlock_t; - -/* Type for key to thread-specific data. */ -typedef pthread_key_t __libc_key_t; - -/* Define a lock variable NAME with storage class CLASS. The lock must be - initialized with __libc_lock_init before it can be used (or define it - with __libc_lock_define_initialized, below). Use `extern' for CLASS to - declare a lock defined in another module. In public structure - definitions you must use a pointer to the lock structure (i.e., NAME - begins with a `*'), because its storage size will not be known outside - of libc. */ -#define __libc_lock_define(CLASS,NAME) \ - CLASS __libc_lock_t NAME; -#define __libc_rwlock_define(CLASS,NAME) \ - CLASS __libc_rwlock_t NAME; -#define __rtld_lock_define_recursive(CLASS,NAME) \ - CLASS __rtld_lock_recursive_t NAME; - -/* Define an initialized lock variable NAME with storage class CLASS. - - For the C library we take a deeper look at the initializer. For - this implementation all fields are initialized to zero. Therefore - we don't initialize the variable which allows putting it into the - BSS section. (Except on PA-RISC and other odd architectures, where - initialized locks must be set to one due to the lack of normal - atomic operations.) */ - -#define _LIBC_LOCK_INITIALIZER LLL_LOCK_INITIALIZER -#if IS_IN (libc) || IS_IN (libpthread) -# if LLL_LOCK_INITIALIZER == 0 -# define __libc_lock_define_initialized(CLASS,NAME) \ - CLASS __libc_lock_t NAME; -# else -# define __libc_lock_define_initialized(CLASS,NAME) \ - CLASS __libc_lock_t NAME = LLL_LOCK_INITIALIZER; -# endif -#else -# define __libc_lock_define_initialized(CLASS,NAME) \ - CLASS __libc_lock_t NAME; -#endif - -#define __libc_rwlock_define_initialized(CLASS,NAME) \ - CLASS __libc_rwlock_t NAME = PTHREAD_RWLOCK_INITIALIZER; - -#define __rtld_lock_define_initialized_recursive(CLASS,NAME) \ - CLASS __rtld_lock_recursive_t NAME = _RTLD_LOCK_RECURSIVE_INITIALIZER; -#define _RTLD_LOCK_RECURSIVE_INITIALIZER \ - {PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP} - -#define __rtld_lock_initialize(NAME) \ - (void) ((NAME) = (__rtld_lock_recursive_t) _RTLD_LOCK_RECURSIVE_INITIALIZER) - -/* If we check for a weakly referenced symbol and then perform a - normal jump to it te code generated for some platforms in case of - PIC is unnecessarily slow. What would happen is that the function - is first referenced as data and then it is called indirectly - through the PLT. We can make this a direct jump. */ -#ifdef __PIC__ -# define __libc_maybe_call(FUNC, ARGS, ELSE) \ - (__extension__ ({ __typeof (FUNC) *_fn = (FUNC); \ - _fn != NULL ? (*_fn) ARGS : ELSE; })) -#else -# define __libc_maybe_call(FUNC, ARGS, ELSE) \ - (FUNC != NULL ? FUNC ARGS : ELSE) -#endif - -/* Call thread functions through the function pointer table. */ -#if defined SHARED && IS_IN (libc) -# define PTFAVAIL(NAME) __libc_pthread_functions_init -# define __libc_ptf_call(FUNC, ARGS, ELSE) \ - (__libc_pthread_functions_init ? PTHFCT_CALL (ptr_##FUNC, ARGS) : ELSE) -# define __libc_ptf_call_always(FUNC, ARGS) \ - PTHFCT_CALL (ptr_##FUNC, ARGS) -#elif IS_IN (libpthread) -# define PTFAVAIL(NAME) 1 -# define __libc_ptf_call(FUNC, ARGS, ELSE) \ - FUNC ARGS -# define __libc_ptf_call_always(FUNC, ARGS) \ - FUNC ARGS -#else -# define PTFAVAIL(NAME) (NAME != NULL) -# define __libc_ptf_call(FUNC, ARGS, ELSE) \ - __libc_maybe_call (FUNC, ARGS, ELSE) -# define __libc_ptf_call_always(FUNC, ARGS) \ - FUNC ARGS -#endif - - -/* Initialize the named lock variable, leaving it in a consistent, unlocked - state. */ -#if IS_IN (libc) || IS_IN (libpthread) -# define __libc_lock_init(NAME) \ - ((void) ((NAME) = LLL_LOCK_INITIALIZER)) -#else -# define __libc_lock_init(NAME) \ - __libc_maybe_call (__pthread_mutex_init, (&(NAME), NULL), 0) -#endif -#if defined SHARED && IS_IN (libc) -/* ((NAME) = (__libc_rwlock_t) PTHREAD_RWLOCK_INITIALIZER) is inefficient. */ -# define __libc_rwlock_init(NAME) \ - ((void) __builtin_memset (&(NAME), '\0', sizeof (NAME))) -#else -# define __libc_rwlock_init(NAME) \ - __libc_maybe_call (__pthread_rwlock_init, (&(NAME), NULL), 0) -#endif - -/* Finalize the named lock variable, which must be locked. It cannot be - used again until __libc_lock_init is called again on it. This must be - called on a lock variable before the containing storage is reused. */ -#if IS_IN (libc) || IS_IN (libpthread) -# define __libc_lock_fini(NAME) ((void) 0) -#else -# define __libc_lock_fini(NAME) \ - __libc_maybe_call (__pthread_mutex_destroy, (&(NAME)), 0) -#endif -#if defined SHARED && IS_IN (libc) -# define __libc_rwlock_fini(NAME) ((void) 0) -#else -# define __libc_rwlock_fini(NAME) \ - __libc_maybe_call (__pthread_rwlock_destroy, (&(NAME)), 0) -#endif - -/* Lock the named lock variable. */ -#if IS_IN (libc) || IS_IN (libpthread) -# ifndef __libc_lock_lock -# define __libc_lock_lock(NAME) \ - ({ lll_lock (NAME, LLL_PRIVATE); 0; }) -# endif -#else -# undef __libc_lock_lock -# define __libc_lock_lock(NAME) \ - __libc_maybe_call (__pthread_mutex_lock, (&(NAME)), 0) -#endif -#define __libc_rwlock_rdlock(NAME) \ - __libc_ptf_call (__pthread_rwlock_rdlock, (&(NAME)), 0) -#define __libc_rwlock_wrlock(NAME) \ - __libc_ptf_call (__pthread_rwlock_wrlock, (&(NAME)), 0) - -/* Try to lock the named lock variable. */ -#if IS_IN (libc) || IS_IN (libpthread) -# ifndef __libc_lock_trylock -# define __libc_lock_trylock(NAME) \ - lll_trylock (NAME) -# endif -#else -# undef __libc_lock_trylock -# define __libc_lock_trylock(NAME) \ - __libc_maybe_call (__pthread_mutex_trylock, (&(NAME)), 0) -#endif -#define __libc_rwlock_tryrdlock(NAME) \ - __libc_maybe_call (__pthread_rwlock_tryrdlock, (&(NAME)), 0) -#define __libc_rwlock_trywrlock(NAME) \ - __libc_maybe_call (__pthread_rwlock_trywrlock, (&(NAME)), 0) - -#define __rtld_lock_trylock_recursive(NAME) \ - __libc_maybe_call (__pthread_mutex_trylock, (&(NAME).mutex), 0) - -/* Unlock the named lock variable. */ -#if IS_IN (libc) || IS_IN (libpthread) -# define __libc_lock_unlock(NAME) \ - lll_unlock (NAME, LLL_PRIVATE) -#else -# define __libc_lock_unlock(NAME) \ - __libc_maybe_call (__pthread_mutex_unlock, (&(NAME)), 0) -#endif -#define __libc_rwlock_unlock(NAME) \ - __libc_ptf_call (__pthread_rwlock_unlock, (&(NAME)), 0) - -#ifdef SHARED -# define __rtld_lock_default_lock_recursive(lock) \ - ++((pthread_mutex_t *)(lock))->__data.__count; - -# define __rtld_lock_default_unlock_recursive(lock) \ - --((pthread_mutex_t *)(lock))->__data.__count; - -# define __rtld_lock_lock_recursive(NAME) \ - GL(dl_rtld_lock_recursive) (&(NAME).mutex) - -# define __rtld_lock_unlock_recursive(NAME) \ - GL(dl_rtld_unlock_recursive) (&(NAME).mutex) -#else -# define __rtld_lock_lock_recursive(NAME) \ - __libc_maybe_call (__pthread_mutex_lock, (&(NAME).mutex), 0) - -# define __rtld_lock_unlock_recursive(NAME) \ - __libc_maybe_call (__pthread_mutex_unlock, (&(NAME).mutex), 0) -#endif - -/* Define once control variable. */ -#if PTHREAD_ONCE_INIT == 0 -/* Special case for static variables where we can avoid the initialization - if it is zero. */ -# define __libc_once_define(CLASS, NAME) \ - CLASS pthread_once_t NAME -#else -# define __libc_once_define(CLASS, NAME) \ - CLASS pthread_once_t NAME = PTHREAD_ONCE_INIT -#endif - -/* Call handler iff the first call. */ -#define __libc_once(ONCE_CONTROL, INIT_FUNCTION) \ - do { \ - if (PTFAVAIL (__pthread_once)) \ - __libc_ptf_call_always (__pthread_once, (&(ONCE_CONTROL), \ - INIT_FUNCTION)); \ - else if ((ONCE_CONTROL) == PTHREAD_ONCE_INIT) { \ - INIT_FUNCTION (); \ - (ONCE_CONTROL) |= 2; \ - } \ - } while (0) - -/* Get once control variable. */ -#define __libc_once_get(ONCE_CONTROL) ((ONCE_CONTROL) != PTHREAD_ONCE_INIT) - -/* Note that for I/O cleanup handling we are using the old-style - cancel handling. It does not have to be integrated with C++ snce - no C++ code is called in the middle. The old-style handling is - faster and the support is not going away. */ -extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer, - void (*routine) (void *), void *arg); -extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer, - int execute); -extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer, - void (*routine) (void *), void *arg); -extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer, - int execute); - -/* Sometimes we have to exit the block in the middle. */ -#define __libc_cleanup_end(DOIT) \ - if (_avail) { \ - __libc_ptf_call_always (_pthread_cleanup_pop_restore, (&_buffer, DOIT));\ - } else if (DOIT) \ - _buffer.__routine (_buffer.__arg) - - -/* Normal cleanup handling, based on C cleanup attribute. */ -__extern_inline void -__libc_cleanup_routine (struct __pthread_cleanup_frame *f) -{ - if (f->__do_it) - f->__cancel_routine (f->__cancel_arg); -} - -#define __libc_cleanup_push(fct, arg) \ - do { \ - struct __pthread_cleanup_frame __clframe \ - __attribute__ ((__cleanup__ (__libc_cleanup_routine))) \ - = { .__cancel_routine = (fct), .__cancel_arg = (arg), \ - .__do_it = 1 }; - -#define __libc_cleanup_pop(execute) \ - __clframe.__do_it = (execute); \ - } while (0) - - -/* Create thread-specific key. */ -#define __libc_key_create(KEY, DESTRUCTOR) \ - __libc_ptf_call (__pthread_key_create, (KEY, DESTRUCTOR), 1) - -/* Get thread-specific data. */ -#define __libc_getspecific(KEY) \ - __libc_ptf_call (__pthread_getspecific, (KEY), NULL) - -/* Set thread-specific data. */ -#define __libc_setspecific(KEY, VALUE) \ - __libc_ptf_call (__pthread_setspecific, (KEY, VALUE), 0) - - -/* Register handlers to execute before and after `fork'. Note that the - last parameter is NULL. The handlers registered by the libc are - never removed so this is OK. */ -#define __libc_atfork(PREPARE, PARENT, CHILD) \ - __register_atfork (PREPARE, PARENT, CHILD, NULL) -extern int __register_atfork (void (*__prepare) (void), - void (*__parent) (void), - void (*__child) (void), - void *__dso_handle); - -/* Functions that are used by this file and are internal to the GNU C - library. */ - -extern int __pthread_mutex_init (pthread_mutex_t *__mutex, - const pthread_mutexattr_t *__mutex_attr); - -extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex); - -extern int __pthread_mutex_trylock (pthread_mutex_t *__mutex); - -extern int __pthread_mutex_lock (pthread_mutex_t *__mutex); - -extern int __pthread_mutex_unlock (pthread_mutex_t *__mutex); - -extern int __pthread_mutexattr_init (pthread_mutexattr_t *__attr); - -extern int __pthread_mutexattr_destroy (pthread_mutexattr_t *__attr); - -extern int __pthread_mutexattr_settype (pthread_mutexattr_t *__attr, - int __kind); - -extern int __pthread_rwlock_init (pthread_rwlock_t *__rwlock, - const pthread_rwlockattr_t *__attr); - -extern int __pthread_rwlock_destroy (pthread_rwlock_t *__rwlock); - -extern int __pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock); - -extern int __pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock); - -extern int __pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock); - -extern int __pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock); - -extern int __pthread_rwlock_unlock (pthread_rwlock_t *__rwlock); - -extern int __pthread_key_create (pthread_key_t *__key, - void (*__destr_function) (void *)); - -extern int __pthread_setspecific (pthread_key_t __key, - const void *__pointer); - -extern void *__pthread_getspecific (pthread_key_t __key); - -extern int __pthread_once (pthread_once_t *__once_control, - void (*__init_routine) (void)); - -extern int __pthread_atfork (void (*__prepare) (void), - void (*__parent) (void), - void (*__child) (void)); - -extern int __pthread_setcancelstate (int state, int *oldstate); - - -/* Make the pthread functions weak so that we can elide them from - single-threaded processes. */ -#ifndef __NO_WEAK_PTHREAD_ALIASES -# ifdef weak_extern -weak_extern (__pthread_mutex_init) -weak_extern (__pthread_mutex_destroy) -weak_extern (__pthread_mutex_lock) -weak_extern (__pthread_mutex_trylock) -weak_extern (__pthread_mutex_unlock) -weak_extern (__pthread_mutexattr_init) -weak_extern (__pthread_mutexattr_destroy) -weak_extern (__pthread_mutexattr_settype) -weak_extern (__pthread_rwlock_init) -weak_extern (__pthread_rwlock_destroy) -weak_extern (__pthread_rwlock_rdlock) -weak_extern (__pthread_rwlock_tryrdlock) -weak_extern (__pthread_rwlock_wrlock) -weak_extern (__pthread_rwlock_trywrlock) -weak_extern (__pthread_rwlock_unlock) -weak_extern (__pthread_key_create) -weak_extern (__pthread_setspecific) -weak_extern (__pthread_getspecific) -weak_extern (__pthread_once) -weak_extern (__pthread_initialize) -weak_extern (__pthread_atfork) -weak_extern (__pthread_setcancelstate) -weak_extern (_pthread_cleanup_push_defer) -weak_extern (_pthread_cleanup_pop_restore) -# else -# pragma weak __pthread_mutex_init -# pragma weak __pthread_mutex_destroy -# pragma weak __pthread_mutex_lock -# pragma weak __pthread_mutex_trylock -# pragma weak __pthread_mutex_unlock -# pragma weak __pthread_mutexattr_init -# pragma weak __pthread_mutexattr_destroy -# pragma weak __pthread_mutexattr_settype -# pragma weak __pthread_rwlock_destroy -# pragma weak __pthread_rwlock_rdlock -# pragma weak __pthread_rwlock_tryrdlock -# pragma weak __pthread_rwlock_wrlock -# pragma weak __pthread_rwlock_trywrlock -# pragma weak __pthread_rwlock_unlock -# pragma weak __pthread_key_create -# pragma weak __pthread_setspecific -# pragma weak __pthread_getspecific -# pragma weak __pthread_once -# pragma weak __pthread_initialize -# pragma weak __pthread_atfork -# pragma weak __pthread_setcancelstate -# pragma weak _pthread_cleanup_push_defer -# pragma weak _pthread_cleanup_pop_restore -# endif -#endif - -#endif /* libc-lockP.h */ diff --git a/sysdeps/nptl/librt-cancellation.c b/sysdeps/nptl/librt-cancellation.c deleted file mode 100644 index 19322429e2..0000000000 --- a/sysdeps/nptl/librt-cancellation.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - -#define __pthread_enable_asynccancel __librt_enable_asynccancel -#define __pthread_disable_asynccancel __librt_disable_asynccancel -#include diff --git a/sysdeps/nptl/lowlevellock-futex.h b/sysdeps/nptl/lowlevellock-futex.h deleted file mode 100644 index 155080ac70..0000000000 --- a/sysdeps/nptl/lowlevellock-futex.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Low-level locking access to futex facilities. Stub version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LOWLEVELLOCK_FUTEX_H -#define _LOWLEVELLOCK_FUTEX_H 1 - -#include - - -/* Values for 'private' parameter of locking macros. Note pthreadP.h - optimizes for these exact values, though they are not required. */ -#define LLL_PRIVATE 0 -#define LLL_SHARED 128 - - -/* For most of these macros, the return value is never really used. - Nevertheless, the protocol is that each one returns a negated errno - code for failure or zero for success. (Note that the corresponding - Linux system calls can sometimes return positive values for success - cases too. We never use those values.) */ - - -/* Wait while *FUTEXP == VAL for an lll_futex_wake call on FUTEXP. */ -#define lll_futex_wait(futexp, val, private) \ - lll_futex_timed_wait (futexp, val, NULL, private) - -/* Wait until a lll_futex_wake call on FUTEXP, or TIMEOUT elapses. */ -#define lll_futex_timed_wait(futexp, val, timeout, private) \ - -ENOSYS - -/* This macro should be defined only if FUTEX_CLOCK_REALTIME is also defined. - If CLOCKBIT is zero, this is identical to lll_futex_timed_wait. - If CLOCKBIT has FUTEX_CLOCK_REALTIME set, then it's the same but - TIMEOUT is counted by CLOCK_REALTIME rather than CLOCK_MONOTONIC. */ -#define lll_futex_timed_wait_bitset(futexp, val, timeout, clockbit, private) \ - -ENOSYS - -/* Wake up up to NR waiters on FUTEXP. */ -#define lll_futex_wake(futexp, nr, private) \ - -ENOSYS - -/* Wake up up to NR_WAKE waiters on FUTEXP. Move up to NR_MOVE of the - rest from waiting on FUTEXP to waiting on MUTEX (a different futex). */ -#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \ - -ENOSYS - -/* Wake up up to NR_WAKE waiters on FUTEXP and NR_WAKE2 on FUTEXP2. */ -#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \ - -ENOSYS - - -/* Like lll_futex_wait (FUTEXP, VAL, PRIVATE) but with the expectation - that lll_futex_cmp_requeue_pi (FUTEXP, _, _, MUTEX, _, PRIVATE) will - be used to do the wakeup. Confers priority-inheritance behavior on - the waiter. */ -#define lll_futex_wait_requeue_pi(futexp, val, mutex, private) \ - lll_futex_timed_wait_requeue_pi (futexp, val, NULL, 0, mutex, private) - -/* Like lll_futex_wait_requeue_pi, but with a timeout. */ -#define lll_futex_timed_wait_requeue_pi(futexp, val, timeout, clockbit, \ - mutex, private) \ - -ENOSYS - -/* Like lll_futex_requeue, but pairs with lll_futex_wait_requeue_pi - and inherits priority from the waiter. */ -#define lll_futex_cmp_requeue_pi(futexp, nr_wake, nr_move, mutex, \ - val, private) \ - -ENOSYS - - -#endif /* lowlevellock-futex.h */ diff --git a/sysdeps/nptl/lowlevellock.h b/sysdeps/nptl/lowlevellock.h deleted file mode 100644 index 54e3c28b0b..0000000000 --- a/sysdeps/nptl/lowlevellock.h +++ /dev/null @@ -1,205 +0,0 @@ -/* Low-level lock implementation. Generic futex-based version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LOWLEVELLOCK_H -#define _LOWLEVELLOCK_H 1 - -#include -#include - -/* Low-level locks use a combination of atomic operations (to acquire and - release lock ownership) and futex operations (to block until the state - of a lock changes). A lock can be in one of three states: - 0: not acquired, - 1: acquired with no waiters; no other threads are blocked or about to block - for changes to the lock state, - >1: acquired, possibly with waiters; there may be other threads blocked or - about to block for changes to the lock state. - - We expect that the common case is an uncontended lock, so we just need - to transition the lock between states 0 and 1; releasing the lock does - not need to wake any other blocked threads. If the lock is contended - and a thread decides to block using a futex operation, then this thread - needs to first change the state to >1; if this state is observed during - lock release, the releasing thread will wake one of the potentially - blocked threads. - - Much of this code takes a 'private' parameter. This may be: - LLL_PRIVATE: lock only shared within a process - LLL_SHARED: lock may be shared across processes. - - Condition variables contain an optimization for broadcasts that requeues - waiting threads on a lock's futex. Therefore, there is a special - variant of the locks (whose name contains "cond") that makes sure to - always set the lock state to >1 and not just 1. - - Robust locks set the lock to the id of the owner. This allows detection - of the case where the owner exits without releasing the lock. Flags are - OR'd with the owner id to record additional information about lock state. - Therefore the states of robust locks are: - 0: not acquired - id: acquired (by user identified by id & FUTEX_TID_MASK) - - The following flags may be set in the robust lock value: - FUTEX_WAITERS - possibly has waiters - FUTEX_OWNER_DIED - owning user has exited without releasing the futex. */ - - -/* If LOCK is 0 (not acquired), set to 1 (acquired with no waiters) and return - 0. Otherwise leave lock unchanged and return non-zero to indicate that the - lock was not acquired. */ -#define lll_trylock(lock) \ - __glibc_unlikely (atomic_compare_and_exchange_bool_acq (&(lock), 1, 0)) - -/* If LOCK is 0 (not acquired), set to 2 (acquired, possibly with waiters) and - return 0. Otherwise leave lock unchanged and return non-zero to indicate - that the lock was not acquired. */ -#define lll_cond_trylock(lock) \ - __glibc_unlikely (atomic_compare_and_exchange_bool_acq (&(lock), 2, 0)) - -extern void __lll_lock_wait_private (int *futex) attribute_hidden; -extern void __lll_lock_wait (int *futex, int private) attribute_hidden; - -/* This is an expression rather than a statement even though its value is - void, so that it can be used in a comma expression or as an expression - that's cast to void. */ -/* The inner conditional compiles to a call to __lll_lock_wait_private if - private is known at compile time to be LLL_PRIVATE, and to a call to - __lll_lock_wait otherwise. */ -/* If FUTEX is 0 (not acquired), set to 1 (acquired with no waiters) and - return. Otherwise, ensure that it is >1 (acquired, possibly with waiters) - and then block until we acquire the lock, at which point FUTEX will still be - >1. The lock is always acquired on return. */ -#define __lll_lock(futex, private) \ - ((void) \ - ({ \ - int *__futex = (futex); \ - if (__glibc_unlikely \ - (atomic_compare_and_exchange_bool_acq (__futex, 1, 0))) \ - { \ - if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ - __lll_lock_wait_private (__futex); \ - else \ - __lll_lock_wait (__futex, private); \ - } \ - })) -#define lll_lock(futex, private) \ - __lll_lock (&(futex), private) - - -/* This is an expression rather than a statement even though its value is - void, so that it can be used in a comma expression or as an expression - that's cast to void. */ -/* Unconditionally set FUTEX to 2 (acquired, possibly with waiters). If FUTEX - was 0 (not acquired) then return. Otherwise, block until the lock is - acquired, at which point FUTEX is 2 (acquired, possibly with waiters). The - lock is always acquired on return. */ -#define __lll_cond_lock(futex, private) \ - ((void) \ - ({ \ - int *__futex = (futex); \ - if (__glibc_unlikely (atomic_exchange_acq (__futex, 2) != 0)) \ - __lll_lock_wait (__futex, private); \ - })) -#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private) - - -extern int __lll_timedlock_wait (int *futex, const struct timespec *, - int private) attribute_hidden; - - -/* As __lll_lock, but with a timeout. If the timeout occurs then return - ETIMEDOUT. If ABSTIME is invalid, return EINVAL. */ -#define __lll_timedlock(futex, abstime, private) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - \ - if (__glibc_unlikely \ - (atomic_compare_and_exchange_bool_acq (__futex, 1, 0))) \ - __val = __lll_timedlock_wait (__futex, abstime, private); \ - __val; \ - }) -#define lll_timedlock(futex, abstime, private) \ - __lll_timedlock (&(futex), abstime, private) - - -/* This is an expression rather than a statement even though its value is - void, so that it can be used in a comma expression or as an expression - that's cast to void. */ -/* Unconditionally set FUTEX to 0 (not acquired), releasing the lock. If FUTEX - was >1 (acquired, possibly with waiters), then wake any waiters. The waiter - that acquires the lock will set FUTEX to >1. - Evaluate PRIVATE before releasing the lock so that we do not violate the - mutex destruction requirements. Specifically, we need to ensure that - another thread can destroy the mutex (and reuse its memory) once it - acquires the lock and when there will be no further lock acquisitions; - thus, we must not access the lock after releasing it, or those accesses - could be concurrent with mutex destruction or reuse of the memory. */ -#define __lll_unlock(futex, private) \ - ((void) \ - ({ \ - int *__futex = (futex); \ - int __private = (private); \ - int __oldval = atomic_exchange_rel (__futex, 0); \ - if (__glibc_unlikely (__oldval > 1)) \ - lll_futex_wake (__futex, 1, __private); \ - })) -#define lll_unlock(futex, private) \ - __lll_unlock (&(futex), private) - - -#define lll_islocked(futex) \ - ((futex) != LLL_LOCK_INITIALIZER) - - -/* Our internal lock implementation is identical to the binary-compatible - mutex implementation. */ - -/* Initializers for lock. */ -#define LLL_LOCK_INITIALIZER (0) -#define LLL_LOCK_INITIALIZER_LOCKED (1) - - -/* The kernel notifies a process which uses CLONE_CHILD_CLEARTID via futex - wake-up when the clone terminates. The memory location contains the - thread ID while the clone is running and is reset to zero by the kernel - afterwards. The kernel up to version 3.16.3 does not use the private futex - operations for futex wake-up when the clone terminates. */ -#define lll_wait_tid(tid) \ - do { \ - __typeof (tid) __tid; \ - while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid, LLL_SHARED);\ - } while (0) - -extern int __lll_timedwait_tid (int *, const struct timespec *) - attribute_hidden; - -/* As lll_wait_tid, but with a timeout. If the timeout occurs then return - ETIMEDOUT. If ABSTIME is invalid, return EINVAL. */ -#define lll_timedwait_tid(tid, abstime) \ - ({ \ - int __res = 0; \ - if ((tid) != 0) \ - __res = __lll_timedwait_tid (&(tid), (abstime)); \ - __res; \ - }) - - -#endif /* lowlevellock.h */ diff --git a/sysdeps/nptl/malloc-machine.h b/sysdeps/nptl/malloc-machine.h deleted file mode 100644 index 7dae506a92..0000000000 --- a/sysdeps/nptl/malloc-machine.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Basic platform-independent macro definitions for mutexes, - thread-specific data and parameters for malloc. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MALLOC_MACHINE_H -#define _MALLOC_MACHINE_H - -#include -#include -#include - -#endif /* !defined(_MALLOC_MACHINE_H) */ diff --git a/sysdeps/nptl/nptl-signals.h b/sysdeps/nptl/nptl-signals.h deleted file mode 100644 index 298acf28a6..0000000000 --- a/sysdeps/nptl/nptl-signals.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Special use of signals in NPTL internals. Stub version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file can define the macros SIGCANCEL, SIGTIMER, and SIGSETXID to - signal numbers reserved by libpthread for those internal purposes. - - Note that some code presumes SIGTIMER is the same as SIGCANCEL. */ diff --git a/sysdeps/nptl/pthread-functions.h b/sysdeps/nptl/pthread-functions.h deleted file mode 100644 index 4006fc6c25..0000000000 --- a/sysdeps/nptl/pthread-functions.h +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _PTHREAD_FUNCTIONS_H -#define _PTHREAD_FUNCTIONS_H 1 - -#include -#include -#include -#include - -struct xid_command; - -/* Data type shared with libc. The libc uses it to pass on calls to - the thread functions. */ -struct pthread_functions -{ - int (*ptr_pthread_attr_destroy) (pthread_attr_t *); - int (*ptr___pthread_attr_init_2_0) (pthread_attr_t *); - int (*ptr___pthread_attr_init_2_1) (pthread_attr_t *); - int (*ptr_pthread_attr_getdetachstate) (const pthread_attr_t *, int *); - int (*ptr_pthread_attr_setdetachstate) (pthread_attr_t *, int); - int (*ptr_pthread_attr_getinheritsched) (const pthread_attr_t *, int *); - int (*ptr_pthread_attr_setinheritsched) (pthread_attr_t *, int); - int (*ptr_pthread_attr_getschedparam) (const pthread_attr_t *, - struct sched_param *); - int (*ptr_pthread_attr_setschedparam) (pthread_attr_t *, - const struct sched_param *); - int (*ptr_pthread_attr_getschedpolicy) (const pthread_attr_t *, int *); - int (*ptr_pthread_attr_setschedpolicy) (pthread_attr_t *, int); - int (*ptr_pthread_attr_getscope) (const pthread_attr_t *, int *); - int (*ptr_pthread_attr_setscope) (pthread_attr_t *, int); - int (*ptr_pthread_condattr_destroy) (pthread_condattr_t *); - int (*ptr_pthread_condattr_init) (pthread_condattr_t *); - int (*ptr___pthread_cond_broadcast) (pthread_cond_t *); - int (*ptr___pthread_cond_destroy) (pthread_cond_t *); - int (*ptr___pthread_cond_init) (pthread_cond_t *, - const pthread_condattr_t *); - int (*ptr___pthread_cond_signal) (pthread_cond_t *); - int (*ptr___pthread_cond_wait) (pthread_cond_t *, pthread_mutex_t *); - int (*ptr___pthread_cond_timedwait) (pthread_cond_t *, pthread_mutex_t *, - const struct timespec *); - int (*ptr___pthread_cond_broadcast_2_0) (pthread_cond_2_0_t *); - int (*ptr___pthread_cond_destroy_2_0) (pthread_cond_2_0_t *); - int (*ptr___pthread_cond_init_2_0) (pthread_cond_2_0_t *, - const pthread_condattr_t *); - int (*ptr___pthread_cond_signal_2_0) (pthread_cond_2_0_t *); - int (*ptr___pthread_cond_wait_2_0) (pthread_cond_2_0_t *, pthread_mutex_t *); - int (*ptr___pthread_cond_timedwait_2_0) (pthread_cond_2_0_t *, - pthread_mutex_t *, - const struct timespec *); - int (*ptr_pthread_equal) (pthread_t, pthread_t); - void (*ptr___pthread_exit) (void *) __attribute__ ((__noreturn__)); - int (*ptr_pthread_getschedparam) (pthread_t, int *, struct sched_param *); - int (*ptr_pthread_setschedparam) (pthread_t, int, - const struct sched_param *); - int (*ptr_pthread_mutex_destroy) (pthread_mutex_t *); - int (*ptr_pthread_mutex_init) (pthread_mutex_t *, - const pthread_mutexattr_t *); - int (*ptr_pthread_mutex_lock) (pthread_mutex_t *); - int (*ptr_pthread_mutex_unlock) (pthread_mutex_t *); - pthread_t (*ptr_pthread_self) (void); - int (*ptr___pthread_setcancelstate) (int, int *); - int (*ptr_pthread_setcanceltype) (int, int *); - void (*ptr___pthread_cleanup_upto) (__jmp_buf, char *); - int (*ptr___pthread_once) (pthread_once_t *, void (*) (void)); - int (*ptr___pthread_rwlock_rdlock) (pthread_rwlock_t *); - int (*ptr___pthread_rwlock_wrlock) (pthread_rwlock_t *); - int (*ptr___pthread_rwlock_unlock) (pthread_rwlock_t *); - int (*ptr___pthread_key_create) (pthread_key_t *, void (*) (void *)); - void *(*ptr___pthread_getspecific) (pthread_key_t); - int (*ptr___pthread_setspecific) (pthread_key_t, const void *); - void (*ptr__pthread_cleanup_push_defer) (struct _pthread_cleanup_buffer *, - void (*) (void *), void *); - void (*ptr__pthread_cleanup_pop_restore) (struct _pthread_cleanup_buffer *, - int); -#define HAVE_PTR_NTHREADS - unsigned int *ptr_nthreads; - void (*ptr___pthread_unwind) (__pthread_unwind_buf_t *) - __attribute ((noreturn)) __cleanup_fct_attribute; - void (*ptr__nptl_deallocate_tsd) (void); - int (*ptr__nptl_setxid) (struct xid_command *); - void (*ptr_freeres) (void); - void (*ptr_set_robust) (struct pthread *); -}; - -/* Variable in libc.so. */ -extern struct pthread_functions __libc_pthread_functions attribute_hidden; -extern int __libc_pthread_functions_init attribute_hidden; - -#ifdef PTR_DEMANGLE -# define PTHFCT_CALL(fct, params) \ - ({ __typeof (__libc_pthread_functions.fct) __p; \ - __p = __libc_pthread_functions.fct; \ - PTR_DEMANGLE (__p); \ - __p params; }) -#else -# define PTHFCT_CALL(fct, params) \ - __libc_pthread_functions.fct params -#endif - -#endif /* pthread-functions.h */ diff --git a/sysdeps/nptl/pthread.h b/sysdeps/nptl/pthread.h deleted file mode 100644 index 632ea7bc36..0000000000 --- a/sysdeps/nptl/pthread.h +++ /dev/null @@ -1,1162 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _PTHREAD_H -#define _PTHREAD_H 1 - -#include -#include -#include -#include - -#include -#include -#include -#include - - -/* Detach state. */ -enum -{ - PTHREAD_CREATE_JOINABLE, -#define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE - PTHREAD_CREATE_DETACHED -#define PTHREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED -}; - - -/* Mutex types. */ -enum -{ - PTHREAD_MUTEX_TIMED_NP, - PTHREAD_MUTEX_RECURSIVE_NP, - PTHREAD_MUTEX_ERRORCHECK_NP, - PTHREAD_MUTEX_ADAPTIVE_NP -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 - , - PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP, - PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP, - PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP, - PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL -#endif -#ifdef __USE_GNU - /* For compatibility. */ - , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP -#endif -}; - - -#ifdef __USE_XOPEN2K -/* Robust mutex or not flags. */ -enum -{ - PTHREAD_MUTEX_STALLED, - PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED, - PTHREAD_MUTEX_ROBUST, - PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST -}; -#endif - - -#if defined __USE_POSIX199506 || defined __USE_UNIX98 -/* Mutex protocols. */ -enum -{ - PTHREAD_PRIO_NONE, - PTHREAD_PRIO_INHERIT, - PTHREAD_PRIO_PROTECT -}; -#endif - - -#ifdef __PTHREAD_MUTEX_HAVE_PREV -# define PTHREAD_MUTEX_INITIALIZER \ - { { 0, 0, 0, 0, 0, __PTHREAD_SPINS, { 0, 0 } } } -# ifdef __USE_GNU -# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, __PTHREAD_SPINS, { 0, 0 } } } -# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, __PTHREAD_SPINS, { 0, 0 } } } -# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __PTHREAD_SPINS, { 0, 0 } } } - -# endif -#else -# define PTHREAD_MUTEX_INITIALIZER \ - { { 0, 0, 0, 0, 0, { __PTHREAD_SPINS } } } -# ifdef __USE_GNU -# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { __PTHREAD_SPINS } } } -# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, { __PTHREAD_SPINS } } } -# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, { __PTHREAD_SPINS } } } - -# endif -#endif - - -/* Read-write lock types. */ -#if defined __USE_UNIX98 || defined __USE_XOPEN2K -enum -{ - PTHREAD_RWLOCK_PREFER_READER_NP, - PTHREAD_RWLOCK_PREFER_WRITER_NP, - PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, - PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP -}; - -/* Define __PTHREAD_RWLOCK_INT_FLAGS_SHARED to 1 if pthread_rwlock_t - has the shared field. All 64-bit architectures have the shared field - in pthread_rwlock_t. */ -#ifndef __PTHREAD_RWLOCK_INT_FLAGS_SHARED -# if __WORDSIZE == 64 -# define __PTHREAD_RWLOCK_INT_FLAGS_SHARED 1 -# endif -#endif - -/* Read-write lock initializers. */ -# define PTHREAD_RWLOCK_INITIALIZER \ - { { 0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, 0 } } -# ifdef __USE_GNU -# ifdef __PTHREAD_RWLOCK_INT_FLAGS_SHARED -# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ - { { 0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, \ - PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } } -# else -# if __BYTE_ORDER == __LITTLE_ENDIAN -# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ - { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, \ - 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, 0 } } -# else -# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,\ - 0 } } -# endif -# endif -# endif -#endif /* Unix98 or XOpen2K */ - - -/* Scheduler inheritance. */ -enum -{ - PTHREAD_INHERIT_SCHED, -#define PTHREAD_INHERIT_SCHED PTHREAD_INHERIT_SCHED - PTHREAD_EXPLICIT_SCHED -#define PTHREAD_EXPLICIT_SCHED PTHREAD_EXPLICIT_SCHED -}; - - -/* Scope handling. */ -enum -{ - PTHREAD_SCOPE_SYSTEM, -#define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_SYSTEM - PTHREAD_SCOPE_PROCESS -#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_PROCESS -}; - - -/* Process shared or private flag. */ -enum -{ - PTHREAD_PROCESS_PRIVATE, -#define PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE - PTHREAD_PROCESS_SHARED -#define PTHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED -}; - - - -/* Conditional variable handling. */ -#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } } - - -/* Cleanup buffers */ -struct _pthread_cleanup_buffer -{ - void (*__routine) (void *); /* Function to call. */ - void *__arg; /* Its argument. */ - int __canceltype; /* Saved cancellation type. */ - struct _pthread_cleanup_buffer *__prev; /* Chaining of cleanup functions. */ -}; - -/* Cancellation */ -enum -{ - PTHREAD_CANCEL_ENABLE, -#define PTHREAD_CANCEL_ENABLE PTHREAD_CANCEL_ENABLE - PTHREAD_CANCEL_DISABLE -#define PTHREAD_CANCEL_DISABLE PTHREAD_CANCEL_DISABLE -}; -enum -{ - PTHREAD_CANCEL_DEFERRED, -#define PTHREAD_CANCEL_DEFERRED PTHREAD_CANCEL_DEFERRED - PTHREAD_CANCEL_ASYNCHRONOUS -#define PTHREAD_CANCEL_ASYNCHRONOUS PTHREAD_CANCEL_ASYNCHRONOUS -}; -#define PTHREAD_CANCELED ((void *) -1) - - -/* Single execution handling. */ -#define PTHREAD_ONCE_INIT 0 - - -#ifdef __USE_XOPEN2K -/* Value returned by 'pthread_barrier_wait' for one of the threads after - the required number of threads have called this function. - -1 is distinct from 0 and all errno constants */ -# define PTHREAD_BARRIER_SERIAL_THREAD -1 -#endif - - -__BEGIN_DECLS - -/* Create a new thread, starting with execution of START-ROUTINE - getting passed ARG. Creation attributed come from ATTR. The new - handle is stored in *NEWTHREAD. */ -extern int pthread_create (pthread_t *__restrict __newthread, - const pthread_attr_t *__restrict __attr, - void *(*__start_routine) (void *), - void *__restrict __arg) __THROWNL __nonnull ((1, 3)); - -/* Terminate calling thread. - - The registered cleanup handlers are called via exception handling - so we cannot mark this function with __THROW.*/ -extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__)); - -/* Make calling thread wait for termination of the thread TH. The - exit status of the thread is stored in *THREAD_RETURN, if THREAD_RETURN - is not NULL. - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int pthread_join (pthread_t __th, void **__thread_return); - -#ifdef __USE_GNU -/* Check whether thread TH has terminated. If yes return the status of - the thread in *THREAD_RETURN, if THREAD_RETURN is not NULL. */ -extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __THROW; - -/* Make calling thread wait for termination of the thread TH, but only - until TIMEOUT. The exit status of the thread is stored in - *THREAD_RETURN, if THREAD_RETURN is not NULL. - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return, - const struct timespec *__abstime); -#endif - -/* Indicate that the thread TH is never to be joined with PTHREAD_JOIN. - The resources of TH will therefore be freed immediately when it - terminates, instead of waiting for another thread to perform PTHREAD_JOIN - on it. */ -extern int pthread_detach (pthread_t __th) __THROW; - - -/* Obtain the identifier of the current thread. */ -extern pthread_t pthread_self (void) __THROW __attribute__ ((__const__)); - -/* Compare two thread identifiers. */ -extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) - __THROW __attribute__ ((__const__)); - - -/* Thread attribute handling. */ - -/* Initialize thread attribute *ATTR with default attributes - (detachstate is PTHREAD_JOINABLE, scheduling policy is SCHED_OTHER, - no user-provided stack). */ -extern int pthread_attr_init (pthread_attr_t *__attr) __THROW __nonnull ((1)); - -/* Destroy thread attribute *ATTR. */ -extern int pthread_attr_destroy (pthread_attr_t *__attr) - __THROW __nonnull ((1)); - -/* Get detach state attribute. */ -extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr, - int *__detachstate) - __THROW __nonnull ((1, 2)); - -/* Set detach state attribute. */ -extern int pthread_attr_setdetachstate (pthread_attr_t *__attr, - int __detachstate) - __THROW __nonnull ((1)); - - -/* Get the size of the guard area created for stack overflow protection. */ -extern int pthread_attr_getguardsize (const pthread_attr_t *__attr, - size_t *__guardsize) - __THROW __nonnull ((1, 2)); - -/* Set the size of the guard area created for stack overflow protection. */ -extern int pthread_attr_setguardsize (pthread_attr_t *__attr, - size_t __guardsize) - __THROW __nonnull ((1)); - - -/* Return in *PARAM the scheduling parameters of *ATTR. */ -extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr, - struct sched_param *__restrict __param) - __THROW __nonnull ((1, 2)); - -/* Set scheduling parameters (priority, etc) in *ATTR according to PARAM. */ -extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr, - const struct sched_param *__restrict - __param) __THROW __nonnull ((1, 2)); - -/* Return in *POLICY the scheduling policy of *ATTR. */ -extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict - __attr, int *__restrict __policy) - __THROW __nonnull ((1, 2)); - -/* Set scheduling policy in *ATTR according to POLICY. */ -extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy) - __THROW __nonnull ((1)); - -/* Return in *INHERIT the scheduling inheritance mode of *ATTR. */ -extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict - __attr, int *__restrict __inherit) - __THROW __nonnull ((1, 2)); - -/* Set scheduling inheritance mode in *ATTR according to INHERIT. */ -extern int pthread_attr_setinheritsched (pthread_attr_t *__attr, - int __inherit) - __THROW __nonnull ((1)); - - -/* Return in *SCOPE the scheduling contention scope of *ATTR. */ -extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr, - int *__restrict __scope) - __THROW __nonnull ((1, 2)); - -/* Set scheduling contention scope in *ATTR according to SCOPE. */ -extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope) - __THROW __nonnull ((1)); - -/* Return the previously set address for the stack. */ -extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict - __attr, void **__restrict __stackaddr) - __THROW __nonnull ((1, 2)) __attribute_deprecated__; - -/* Set the starting address of the stack of the thread to be created. - Depending on whether the stack grows up or down the value must either - be higher or lower than all the address in the memory block. The - minimal size of the block must be PTHREAD_STACK_MIN. */ -extern int pthread_attr_setstackaddr (pthread_attr_t *__attr, - void *__stackaddr) - __THROW __nonnull ((1)) __attribute_deprecated__; - -/* Return the currently used minimal stack size. */ -extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict - __attr, size_t *__restrict __stacksize) - __THROW __nonnull ((1, 2)); - -/* Add information about the minimum stack size needed for the thread - to be started. This size must never be less than PTHREAD_STACK_MIN - and must also not exceed the system limits. */ -extern int pthread_attr_setstacksize (pthread_attr_t *__attr, - size_t __stacksize) - __THROW __nonnull ((1)); - -#ifdef __USE_XOPEN2K -/* Return the previously set address for the stack. */ -extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr, - void **__restrict __stackaddr, - size_t *__restrict __stacksize) - __THROW __nonnull ((1, 2, 3)); - -/* The following two interfaces are intended to replace the last two. They - require setting the address as well as the size since only setting the - address will make the implementation on some architectures impossible. */ -extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr, - size_t __stacksize) __THROW __nonnull ((1)); -#endif - -#ifdef __USE_GNU -/* Thread created with attribute ATTR will be limited to run only on - the processors represented in CPUSET. */ -extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr, - size_t __cpusetsize, - const cpu_set_t *__cpuset) - __THROW __nonnull ((1, 3)); - -/* Get bit set in CPUSET representing the processors threads created with - ATTR can run on. */ -extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr, - size_t __cpusetsize, - cpu_set_t *__cpuset) - __THROW __nonnull ((1, 3)); - -/* Get the default attributes used by pthread_create in this process. */ -extern int pthread_getattr_default_np (pthread_attr_t *__attr) - __THROW __nonnull ((1)); - -/* Set the default attributes to be used by pthread_create in this - process. */ -extern int pthread_setattr_default_np (const pthread_attr_t *__attr) - __THROW __nonnull ((1)); - -/* Initialize thread attribute *ATTR with attributes corresponding to the - already running thread TH. It shall be called on uninitialized ATTR - and destroyed with pthread_attr_destroy when no longer needed. */ -extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr) - __THROW __nonnull ((2)); -#endif - - -/* Functions for scheduling control. */ - -/* Set the scheduling parameters for TARGET_THREAD according to POLICY - and *PARAM. */ -extern int pthread_setschedparam (pthread_t __target_thread, int __policy, - const struct sched_param *__param) - __THROW __nonnull ((3)); - -/* Return in *POLICY and *PARAM the scheduling parameters for TARGET_THREAD. */ -extern int pthread_getschedparam (pthread_t __target_thread, - int *__restrict __policy, - struct sched_param *__restrict __param) - __THROW __nonnull ((2, 3)); - -/* Set the scheduling priority for TARGET_THREAD. */ -extern int pthread_setschedprio (pthread_t __target_thread, int __prio) - __THROW; - - -#ifdef __USE_GNU -/* Get thread name visible in the kernel and its interfaces. */ -extern int pthread_getname_np (pthread_t __target_thread, char *__buf, - size_t __buflen) - __THROW __nonnull ((2)); - -/* Set thread name visible in the kernel and its interfaces. */ -extern int pthread_setname_np (pthread_t __target_thread, const char *__name) - __THROW __nonnull ((2)); -#endif - - -#ifdef __USE_UNIX98 -/* Determine level of concurrency. */ -extern int pthread_getconcurrency (void) __THROW; - -/* Set new concurrency level to LEVEL. */ -extern int pthread_setconcurrency (int __level) __THROW; -#endif - -#ifdef __USE_GNU -/* Yield the processor to another thread or process. - This function is similar to the POSIX `sched_yield' function but - might be differently implemented in the case of a m-on-n thread - implementation. */ -extern int pthread_yield (void) __THROW; - - -/* Limit specified thread TH to run only on the processors represented - in CPUSET. */ -extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize, - const cpu_set_t *__cpuset) - __THROW __nonnull ((3)); - -/* Get bit set in CPUSET representing the processors TH can run on. */ -extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize, - cpu_set_t *__cpuset) - __THROW __nonnull ((3)); -#endif - - -/* Functions for handling initialization. */ - -/* Guarantee that the initialization function INIT_ROUTINE will be called - only once, even if pthread_once is executed several times with the - same ONCE_CONTROL argument. ONCE_CONTROL must point to a static or - extern variable initialized to PTHREAD_ONCE_INIT. - - The initialization functions might throw exception which is why - this function is not marked with __THROW. */ -extern int pthread_once (pthread_once_t *__once_control, - void (*__init_routine) (void)) __nonnull ((1, 2)); - - -/* Functions for handling cancellation. - - Note that these functions are explicitly not marked to not throw an - exception in C++ code. If cancellation is implemented by unwinding - this is necessary to have the compiler generate the unwind information. */ - -/* Set cancelability state of current thread to STATE, returning old - state in *OLDSTATE if OLDSTATE is not NULL. */ -extern int pthread_setcancelstate (int __state, int *__oldstate); - -/* Set cancellation state of current thread to TYPE, returning the old - type in *OLDTYPE if OLDTYPE is not NULL. */ -extern int pthread_setcanceltype (int __type, int *__oldtype); - -/* Cancel THREAD immediately or at the next possibility. */ -extern int pthread_cancel (pthread_t __th); - -/* Test for pending cancellation for the current thread and terminate - the thread as per pthread_exit(PTHREAD_CANCELED) if it has been - cancelled. */ -extern void pthread_testcancel (void); - - -/* Cancellation handling with integration into exception handling. */ - -typedef struct -{ - struct - { - __jmp_buf __cancel_jmp_buf; - int __mask_was_saved; - } __cancel_jmp_buf[1]; - void *__pad[4]; -} __pthread_unwind_buf_t __attribute__ ((__aligned__)); - -/* No special attributes by default. */ -#ifndef __cleanup_fct_attribute -# define __cleanup_fct_attribute -#endif - - -/* Structure to hold the cleanup handler information. */ -struct __pthread_cleanup_frame -{ - void (*__cancel_routine) (void *); - void *__cancel_arg; - int __do_it; - int __cancel_type; -}; - -#if defined __GNUC__ && defined __EXCEPTIONS -# ifdef __cplusplus -/* Class to handle cancellation handler invocation. */ -class __pthread_cleanup_class -{ - void (*__cancel_routine) (void *); - void *__cancel_arg; - int __do_it; - int __cancel_type; - - public: - __pthread_cleanup_class (void (*__fct) (void *), void *__arg) - : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { } - ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); } - void __setdoit (int __newval) { __do_it = __newval; } - void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, - &__cancel_type); } - void __restore () const { pthread_setcanceltype (__cancel_type, 0); } -}; - -/* Install a cleanup handler: ROUTINE will be called with arguments ARG - when the thread is canceled or calls pthread_exit. ROUTINE will also - be called with arguments ARG when the matching pthread_cleanup_pop - is executed with non-zero EXECUTE argument. - - pthread_cleanup_push and pthread_cleanup_pop are macros and must always - be used in matching pairs at the same nesting level of braces. */ -# define pthread_cleanup_push(routine, arg) \ - do { \ - __pthread_cleanup_class __clframe (routine, arg) - -/* Remove a cleanup handler installed by the matching pthread_cleanup_push. - If EXECUTE is non-zero, the handler function is called. */ -# define pthread_cleanup_pop(execute) \ - __clframe.__setdoit (execute); \ - } while (0) - -# ifdef __USE_GNU -/* Install a cleanup handler as pthread_cleanup_push does, but also - saves the current cancellation type and sets it to deferred - cancellation. */ -# define pthread_cleanup_push_defer_np(routine, arg) \ - do { \ - __pthread_cleanup_class __clframe (routine, arg); \ - __clframe.__defer () - -/* Remove a cleanup handler as pthread_cleanup_pop does, but also - restores the cancellation type that was in effect when the matching - pthread_cleanup_push_defer was called. */ -# define pthread_cleanup_pop_restore_np(execute) \ - __clframe.__restore (); \ - __clframe.__setdoit (execute); \ - } while (0) -# endif -# else -/* Function called to call the cleanup handler. As an extern inline - function the compiler is free to decide inlining the change when - needed or fall back on the copy which must exist somewhere - else. */ -__extern_inline void -__pthread_cleanup_routine (struct __pthread_cleanup_frame *__frame) -{ - if (__frame->__do_it) - __frame->__cancel_routine (__frame->__cancel_arg); -} - -/* Install a cleanup handler: ROUTINE will be called with arguments ARG - when the thread is canceled or calls pthread_exit. ROUTINE will also - be called with arguments ARG when the matching pthread_cleanup_pop - is executed with non-zero EXECUTE argument. - - pthread_cleanup_push and pthread_cleanup_pop are macros and must always - be used in matching pairs at the same nesting level of braces. */ -# define pthread_cleanup_push(routine, arg) \ - do { \ - struct __pthread_cleanup_frame __clframe \ - __attribute__ ((__cleanup__ (__pthread_cleanup_routine))) \ - = { .__cancel_routine = (routine), .__cancel_arg = (arg), \ - .__do_it = 1 }; - -/* Remove a cleanup handler installed by the matching pthread_cleanup_push. - If EXECUTE is non-zero, the handler function is called. */ -# define pthread_cleanup_pop(execute) \ - __clframe.__do_it = (execute); \ - } while (0) - -# ifdef __USE_GNU -/* Install a cleanup handler as pthread_cleanup_push does, but also - saves the current cancellation type and sets it to deferred - cancellation. */ -# define pthread_cleanup_push_defer_np(routine, arg) \ - do { \ - struct __pthread_cleanup_frame __clframe \ - __attribute__ ((__cleanup__ (__pthread_cleanup_routine))) \ - = { .__cancel_routine = (routine), .__cancel_arg = (arg), \ - .__do_it = 1 }; \ - (void) pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, \ - &__clframe.__cancel_type) - -/* Remove a cleanup handler as pthread_cleanup_pop does, but also - restores the cancellation type that was in effect when the matching - pthread_cleanup_push_defer was called. */ -# define pthread_cleanup_pop_restore_np(execute) \ - (void) pthread_setcanceltype (__clframe.__cancel_type, NULL); \ - __clframe.__do_it = (execute); \ - } while (0) -# endif -# endif -#else -/* Install a cleanup handler: ROUTINE will be called with arguments ARG - when the thread is canceled or calls pthread_exit. ROUTINE will also - be called with arguments ARG when the matching pthread_cleanup_pop - is executed with non-zero EXECUTE argument. - - pthread_cleanup_push and pthread_cleanup_pop are macros and must always - be used in matching pairs at the same nesting level of braces. */ -# define pthread_cleanup_push(routine, arg) \ - do { \ - __pthread_unwind_buf_t __cancel_buf; \ - void (*__cancel_routine) (void *) = (routine); \ - void *__cancel_arg = (arg); \ - int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *) \ - __cancel_buf.__cancel_jmp_buf, 0); \ - if (__glibc_unlikely (__not_first_call)) \ - { \ - __cancel_routine (__cancel_arg); \ - __pthread_unwind_next (&__cancel_buf); \ - /* NOTREACHED */ \ - } \ - \ - __pthread_register_cancel (&__cancel_buf); \ - do { -extern void __pthread_register_cancel (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute; - -/* Remove a cleanup handler installed by the matching pthread_cleanup_push. - If EXECUTE is non-zero, the handler function is called. */ -# define pthread_cleanup_pop(execute) \ - do { } while (0);/* Empty to allow label before pthread_cleanup_pop. */\ - } while (0); \ - __pthread_unregister_cancel (&__cancel_buf); \ - if (execute) \ - __cancel_routine (__cancel_arg); \ - } while (0) -extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute; - -# ifdef __USE_GNU -/* Install a cleanup handler as pthread_cleanup_push does, but also - saves the current cancellation type and sets it to deferred - cancellation. */ -# define pthread_cleanup_push_defer_np(routine, arg) \ - do { \ - __pthread_unwind_buf_t __cancel_buf; \ - void (*__cancel_routine) (void *) = (routine); \ - void *__cancel_arg = (arg); \ - int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *) \ - __cancel_buf.__cancel_jmp_buf, 0); \ - if (__glibc_unlikely (__not_first_call)) \ - { \ - __cancel_routine (__cancel_arg); \ - __pthread_unwind_next (&__cancel_buf); \ - /* NOTREACHED */ \ - } \ - \ - __pthread_register_cancel_defer (&__cancel_buf); \ - do { -extern void __pthread_register_cancel_defer (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute; - -/* Remove a cleanup handler as pthread_cleanup_pop does, but also - restores the cancellation type that was in effect when the matching - pthread_cleanup_push_defer was called. */ -# define pthread_cleanup_pop_restore_np(execute) \ - do { } while (0);/* Empty to allow label before pthread_cleanup_pop. */\ - } while (0); \ - __pthread_unregister_cancel_restore (&__cancel_buf); \ - if (execute) \ - __cancel_routine (__cancel_arg); \ - } while (0) -extern void __pthread_unregister_cancel_restore (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute; -# endif - -/* Internal interface to initiate cleanup. */ -extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute __attribute__ ((__noreturn__)) -# ifndef SHARED - __attribute__ ((__weak__)) -# endif - ; -#endif - -/* Function used in the macros. */ -struct __jmp_buf_tag; -extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) __THROWNL; - - -/* Mutex handling. */ - -/* Initialize a mutex. */ -extern int pthread_mutex_init (pthread_mutex_t *__mutex, - const pthread_mutexattr_t *__mutexattr) - __THROW __nonnull ((1)); - -/* Destroy a mutex. */ -extern int pthread_mutex_destroy (pthread_mutex_t *__mutex) - __THROW __nonnull ((1)); - -/* Try locking a mutex. */ -extern int pthread_mutex_trylock (pthread_mutex_t *__mutex) - __THROWNL __nonnull ((1)); - -/* Lock a mutex. */ -extern int pthread_mutex_lock (pthread_mutex_t *__mutex) - __THROWNL __nonnull ((1)); - -#ifdef __USE_XOPEN2K -/* Wait until lock becomes available, or specified time passes. */ -extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex, - const struct timespec *__restrict - __abstime) __THROWNL __nonnull ((1, 2)); -#endif - -/* Unlock a mutex. */ -extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) - __THROWNL __nonnull ((1)); - - -/* Get the priority ceiling of MUTEX. */ -extern int pthread_mutex_getprioceiling (const pthread_mutex_t * - __restrict __mutex, - int *__restrict __prioceiling) - __THROW __nonnull ((1, 2)); - -/* Set the priority ceiling of MUTEX to PRIOCEILING, return old - priority ceiling value in *OLD_CEILING. */ -extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex, - int __prioceiling, - int *__restrict __old_ceiling) - __THROW __nonnull ((1, 3)); - - -#ifdef __USE_XOPEN2K8 -/* Declare the state protected by MUTEX as consistent. */ -extern int pthread_mutex_consistent (pthread_mutex_t *__mutex) - __THROW __nonnull ((1)); -# ifdef __USE_GNU -extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex) - __THROW __nonnull ((1)); -# endif -#endif - - -/* Functions for handling mutex attributes. */ - -/* Initialize mutex attribute object ATTR with default attributes - (kind is PTHREAD_MUTEX_TIMED_NP). */ -extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr) - __THROW __nonnull ((1)); - -/* Destroy mutex attribute object ATTR. */ -extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) - __THROW __nonnull ((1)); - -/* Get the process-shared flag of the mutex attribute ATTR. */ -extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t * - __restrict __attr, - int *__restrict __pshared) - __THROW __nonnull ((1, 2)); - -/* Set the process-shared flag of the mutex attribute ATTR. */ -extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr, - int __pshared) - __THROW __nonnull ((1)); - -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 -/* Return in *KIND the mutex kind attribute in *ATTR. */ -extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict - __attr, int *__restrict __kind) - __THROW __nonnull ((1, 2)); - -/* Set the mutex kind attribute in *ATTR to KIND (either PTHREAD_MUTEX_NORMAL, - PTHREAD_MUTEX_RECURSIVE, PTHREAD_MUTEX_ERRORCHECK, or - PTHREAD_MUTEX_DEFAULT). */ -extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind) - __THROW __nonnull ((1)); -#endif - -/* Return in *PROTOCOL the mutex protocol attribute in *ATTR. */ -extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t * - __restrict __attr, - int *__restrict __protocol) - __THROW __nonnull ((1, 2)); - -/* Set the mutex protocol attribute in *ATTR to PROTOCOL (either - PTHREAD_PRIO_NONE, PTHREAD_PRIO_INHERIT, or PTHREAD_PRIO_PROTECT). */ -extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr, - int __protocol) - __THROW __nonnull ((1)); - -/* Return in *PRIOCEILING the mutex prioceiling attribute in *ATTR. */ -extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t * - __restrict __attr, - int *__restrict __prioceiling) - __THROW __nonnull ((1, 2)); - -/* Set the mutex prioceiling attribute in *ATTR to PRIOCEILING. */ -extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr, - int __prioceiling) - __THROW __nonnull ((1)); - -#ifdef __USE_XOPEN2K -/* Get the robustness flag of the mutex attribute ATTR. */ -extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr, - int *__robustness) - __THROW __nonnull ((1, 2)); -# ifdef __USE_GNU -extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr, - int *__robustness) - __THROW __nonnull ((1, 2)); -# endif - -/* Set the robustness flag of the mutex attribute ATTR. */ -extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr, - int __robustness) - __THROW __nonnull ((1)); -# ifdef __USE_GNU -extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr, - int __robustness) - __THROW __nonnull ((1)); -# endif -#endif - - -#if defined __USE_UNIX98 || defined __USE_XOPEN2K -/* Functions for handling read-write locks. */ - -/* Initialize read-write lock RWLOCK using attributes ATTR, or use - the default values if later is NULL. */ -extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock, - const pthread_rwlockattr_t *__restrict - __attr) __THROW __nonnull ((1)); - -/* Destroy read-write lock RWLOCK. */ -extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock) - __THROW __nonnull ((1)); - -/* Acquire read lock for RWLOCK. */ -extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - -/* Try to acquire read lock for RWLOCK. */ -extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - -# ifdef __USE_XOPEN2K -/* Try to acquire read lock for RWLOCK or return after specfied time. */ -extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock, - const struct timespec *__restrict - __abstime) __THROWNL __nonnull ((1, 2)); -# endif - -/* Acquire write lock for RWLOCK. */ -extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - -/* Try to acquire write lock for RWLOCK. */ -extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - -# ifdef __USE_XOPEN2K -/* Try to acquire write lock for RWLOCK or return after specfied time. */ -extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock, - const struct timespec *__restrict - __abstime) __THROWNL __nonnull ((1, 2)); -# endif - -/* Unlock RWLOCK. */ -extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - - -/* Functions for handling read-write lock attributes. */ - -/* Initialize attribute object ATTR with default values. */ -extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr) - __THROW __nonnull ((1)); - -/* Destroy attribute object ATTR. */ -extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr) - __THROW __nonnull ((1)); - -/* Return current setting of process-shared attribute of ATTR in PSHARED. */ -extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t * - __restrict __attr, - int *__restrict __pshared) - __THROW __nonnull ((1, 2)); - -/* Set process-shared attribute of ATTR to PSHARED. */ -extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr, - int __pshared) - __THROW __nonnull ((1)); - -/* Return current setting of reader/writer preference. */ -extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t * - __restrict __attr, - int *__restrict __pref) - __THROW __nonnull ((1, 2)); - -/* Set reader/write preference. */ -extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr, - int __pref) __THROW __nonnull ((1)); -#endif - - -/* Functions for handling conditional variables. */ - -/* Initialize condition variable COND using attributes ATTR, or use - the default values if later is NULL. */ -extern int pthread_cond_init (pthread_cond_t *__restrict __cond, - const pthread_condattr_t *__restrict __cond_attr) - __THROW __nonnull ((1)); - -/* Destroy condition variable COND. */ -extern int pthread_cond_destroy (pthread_cond_t *__cond) - __THROW __nonnull ((1)); - -/* Wake up one thread waiting for condition variable COND. */ -extern int pthread_cond_signal (pthread_cond_t *__cond) - __THROWNL __nonnull ((1)); - -/* Wake up all threads waiting for condition variables COND. */ -extern int pthread_cond_broadcast (pthread_cond_t *__cond) - __THROWNL __nonnull ((1)); - -/* Wait for condition variable COND to be signaled or broadcast. - MUTEX is assumed to be locked before. - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int pthread_cond_wait (pthread_cond_t *__restrict __cond, - pthread_mutex_t *__restrict __mutex) - __nonnull ((1, 2)); - -/* Wait for condition variable COND to be signaled or broadcast until - ABSTIME. MUTEX is assumed to be locked before. ABSTIME is an - absolute time specification; zero is the beginning of the epoch - (00:00:00 GMT, January 1, 1970). - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond, - pthread_mutex_t *__restrict __mutex, - const struct timespec *__restrict __abstime) - __nonnull ((1, 2, 3)); - -/* Functions for handling condition variable attributes. */ - -/* Initialize condition variable attribute ATTR. */ -extern int pthread_condattr_init (pthread_condattr_t *__attr) - __THROW __nonnull ((1)); - -/* Destroy condition variable attribute ATTR. */ -extern int pthread_condattr_destroy (pthread_condattr_t *__attr) - __THROW __nonnull ((1)); - -/* Get the process-shared flag of the condition variable attribute ATTR. */ -extern int pthread_condattr_getpshared (const pthread_condattr_t * - __restrict __attr, - int *__restrict __pshared) - __THROW __nonnull ((1, 2)); - -/* Set the process-shared flag of the condition variable attribute ATTR. */ -extern int pthread_condattr_setpshared (pthread_condattr_t *__attr, - int __pshared) __THROW __nonnull ((1)); - -#ifdef __USE_XOPEN2K -/* Get the clock selected for the condition variable attribute ATTR. */ -extern int pthread_condattr_getclock (const pthread_condattr_t * - __restrict __attr, - __clockid_t *__restrict __clock_id) - __THROW __nonnull ((1, 2)); - -/* Set the clock selected for the condition variable attribute ATTR. */ -extern int pthread_condattr_setclock (pthread_condattr_t *__attr, - __clockid_t __clock_id) - __THROW __nonnull ((1)); -#endif - - -#ifdef __USE_XOPEN2K -/* Functions to handle spinlocks. */ - -/* Initialize the spinlock LOCK. If PSHARED is nonzero the spinlock can - be shared between different processes. */ -extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared) - __THROW __nonnull ((1)); - -/* Destroy the spinlock LOCK. */ -extern int pthread_spin_destroy (pthread_spinlock_t *__lock) - __THROW __nonnull ((1)); - -/* Wait until spinlock LOCK is retrieved. */ -extern int pthread_spin_lock (pthread_spinlock_t *__lock) - __THROWNL __nonnull ((1)); - -/* Try to lock spinlock LOCK. */ -extern int pthread_spin_trylock (pthread_spinlock_t *__lock) - __THROWNL __nonnull ((1)); - -/* Release spinlock LOCK. */ -extern int pthread_spin_unlock (pthread_spinlock_t *__lock) - __THROWNL __nonnull ((1)); - - -/* Functions to handle barriers. */ - -/* Initialize BARRIER with the attributes in ATTR. The barrier is - opened when COUNT waiters arrived. */ -extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier, - const pthread_barrierattr_t *__restrict - __attr, unsigned int __count) - __THROW __nonnull ((1)); - -/* Destroy a previously dynamically initialized barrier BARRIER. */ -extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) - __THROW __nonnull ((1)); - -/* Wait on barrier BARRIER. */ -extern int pthread_barrier_wait (pthread_barrier_t *__barrier) - __THROWNL __nonnull ((1)); - - -/* Initialize barrier attribute ATTR. */ -extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr) - __THROW __nonnull ((1)); - -/* Destroy previously dynamically initialized barrier attribute ATTR. */ -extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) - __THROW __nonnull ((1)); - -/* Get the process-shared flag of the barrier attribute ATTR. */ -extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t * - __restrict __attr, - int *__restrict __pshared) - __THROW __nonnull ((1, 2)); - -/* Set the process-shared flag of the barrier attribute ATTR. */ -extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr, - int __pshared) - __THROW __nonnull ((1)); -#endif - - -/* Functions for handling thread-specific data. */ - -/* Create a key value identifying a location in the thread-specific - data area. Each thread maintains a distinct thread-specific data - area. DESTR_FUNCTION, if non-NULL, is called with the value - associated to that key when the key is destroyed. - DESTR_FUNCTION is not called if the value associated is NULL when - the key is destroyed. */ -extern int pthread_key_create (pthread_key_t *__key, - void (*__destr_function) (void *)) - __THROW __nonnull ((1)); - -/* Destroy KEY. */ -extern int pthread_key_delete (pthread_key_t __key) __THROW; - -/* Return current value of the thread-specific data slot identified by KEY. */ -extern void *pthread_getspecific (pthread_key_t __key) __THROW; - -/* Store POINTER in the thread-specific data slot identified by KEY. */ -extern int pthread_setspecific (pthread_key_t __key, - const void *__pointer) __THROW ; - - -#ifdef __USE_XOPEN2K -/* Get ID of CPU-time clock for thread THREAD_ID. */ -extern int pthread_getcpuclockid (pthread_t __thread_id, - __clockid_t *__clock_id) - __THROW __nonnull ((2)); -#endif - - -/* Install handlers to be called when a new process is created with FORK. - The PREPARE handler is called in the parent process just before performing - FORK. The PARENT handler is called in the parent process just after FORK. - The CHILD handler is called in the child process. Each of the three - handlers can be NULL, meaning that no handler needs to be called at that - point. - PTHREAD_ATFORK can be called several times, in which case the PREPARE - handlers are called in LIFO order (last added with PTHREAD_ATFORK, - first called before FORK), and the PARENT and CHILD handlers are called - in FIFO (first added, first called). */ - -extern int pthread_atfork (void (*__prepare) (void), - void (*__parent) (void), - void (*__child) (void)) __THROW; - - -#ifdef __USE_EXTERN_INLINES -/* Optimizations. */ -__extern_inline int -__NTH (pthread_equal (pthread_t __thread1, pthread_t __thread2)) -{ - return __thread1 == __thread2; -} -#endif - -__END_DECLS - -#endif /* pthread.h */ diff --git a/sysdeps/nptl/setxid.h b/sysdeps/nptl/setxid.h deleted file mode 100644 index 7db1687439..0000000000 --- a/sysdeps/nptl/setxid.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define __SETXID_1(cmd, arg1) \ - cmd.id[0] = (long int) arg1 -#define __SETXID_2(cmd, arg1, arg2) \ - __SETXID_1 (cmd, arg1); cmd.id[1] = (long int) arg2 -#define __SETXID_3(cmd, arg1, arg2, arg3) \ - __SETXID_2 (cmd, arg1, arg2); cmd.id[2] = (long int) arg3 - -#ifdef SINGLE_THREAD -# define INLINE_SETXID_SYSCALL(name, nr, args...) \ - INLINE_SYSCALL (name, nr, args) -#elif defined SHARED -# define INLINE_SETXID_SYSCALL(name, nr, args...) \ - ({ \ - int __result; \ - if (__builtin_expect (__libc_pthread_functions_init, 0)) \ - { \ - struct xid_command __cmd; \ - __cmd.syscall_no = __NR_##name; \ - __SETXID_##nr (__cmd, args); \ - __result = PTHFCT_CALL (ptr__nptl_setxid, (&__cmd)); \ - } \ - else \ - __result = INLINE_SYSCALL (name, nr, args); \ - __result; \ - }) -#else -# define INLINE_SETXID_SYSCALL(name, nr, args...) \ - ({ \ - extern __typeof (__nptl_setxid) __nptl_setxid __attribute__((weak));\ - int __result; \ - if (__glibc_unlikely (__nptl_setxid != NULL)) \ - { \ - struct xid_command __cmd; \ - __cmd.syscall_no = __NR_##name; \ - __SETXID_##nr (__cmd, args); \ - __result =__nptl_setxid (&__cmd); \ - } \ - else \ - __result = INLINE_SYSCALL (name, nr, args); \ - __result; \ - }) -#endif diff --git a/sysdeps/nptl/shm-directory.h b/sysdeps/nptl/shm-directory.h deleted file mode 100644 index a7f09f51ea..0000000000 --- a/sysdeps/nptl/shm-directory.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Header for directory for shm/sem files. NPTL version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SHM_DIRECTORY_H - -#include - -/* For NPTL the __shm_directory function lives in libpthread. - We don't want PLT calls from there. But it's also used from - librt, so it cannot just be declared hidden. */ - -#if IS_IN (libpthread) -hidden_proto (__shm_directory) -#endif - -#endif /* shm-directory.h */ diff --git a/sysdeps/nptl/sigfillset.c b/sysdeps/nptl/sigfillset.c deleted file mode 100644 index 50e8512de0..0000000000 --- a/sysdeps/nptl/sigfillset.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include diff --git a/sysdeps/nptl/stdio-lock.h b/sysdeps/nptl/stdio-lock.h deleted file mode 100644 index df749062ea..0000000000 --- a/sysdeps/nptl/stdio-lock.h +++ /dev/null @@ -1,111 +0,0 @@ -/* Thread package specific definitions of stream lock type. NPTL version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _STDIO_LOCK_H -#define _STDIO_LOCK_H 1 - -#include -#include - - -/* The locking here is very inexpensive, even for inlining. */ -#define _IO_lock_inexpensive 1 - -typedef struct { int lock; int cnt; void *owner; } _IO_lock_t; -#define _IO_lock_t_defined 1 - -#define _IO_lock_initializer { LLL_LOCK_INITIALIZER, 0, NULL } - -#define _IO_lock_init(_name) \ - ((void) ((_name) = (_IO_lock_t) _IO_lock_initializer)) - -#define _IO_lock_fini(_name) \ - ((void) 0) - -#define _IO_lock_lock(_name) \ - do { \ - void *__self = THREAD_SELF; \ - if ((_name).owner != __self) \ - { \ - lll_lock ((_name).lock, LLL_PRIVATE); \ - (_name).owner = __self; \ - } \ - ++(_name).cnt; \ - } while (0) - -#define _IO_lock_trylock(_name) \ - ({ \ - int __result = 0; \ - void *__self = THREAD_SELF; \ - if ((_name).owner != __self) \ - { \ - if (lll_trylock ((_name).lock) == 0) \ - { \ - (_name).owner = __self; \ - (_name).cnt = 1; \ - } \ - else \ - __result = EBUSY; \ - } \ - else \ - ++(_name).cnt; \ - __result; \ - }) - -#define _IO_lock_unlock(_name) \ - do { \ - if (--(_name).cnt == 0) \ - { \ - (_name).owner = NULL; \ - lll_unlock ((_name).lock, LLL_PRIVATE); \ - } \ - } while (0) - - - -#define _IO_cleanup_region_start(_fct, _fp) \ - __libc_cleanup_region_start (((_fp)->_flags & _IO_USER_LOCK) == 0, _fct, _fp) -#define _IO_cleanup_region_start_noarg(_fct) \ - __libc_cleanup_region_start (1, _fct, NULL) -#define _IO_cleanup_region_end(_doit) \ - __libc_cleanup_region_end (_doit) - -#if defined _LIBC && IS_IN (libc) - -# ifdef __EXCEPTIONS -# define _IO_acquire_lock(_fp) \ - do { \ - _IO_FILE *_IO_acquire_lock_file \ - __attribute__((cleanup (_IO_acquire_lock_fct))) \ - = (_fp); \ - _IO_flockfile (_IO_acquire_lock_file); -# define _IO_acquire_lock_clear_flags2(_fp) \ - do { \ - _IO_FILE *_IO_acquire_lock_file \ - __attribute__((cleanup (_IO_acquire_lock_clear_flags2_fct))) \ - = (_fp); \ - _IO_flockfile (_IO_acquire_lock_file); -# else -# define _IO_acquire_lock(_fp) _IO_acquire_lock_needs_exceptions_enabled -# define _IO_acquire_lock_clear_flags2(_fp) _IO_acquire_lock (_fp) -# endif -# define _IO_release_lock(_fp) ; } while (0) - -#endif - -#endif /* stdio-lock.h */ diff --git a/sysdeps/nptl/sys/procfs.h b/sysdeps/nptl/sys/procfs.h deleted file mode 100644 index 785953835e..0000000000 --- a/sysdeps/nptl/sys/procfs.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Types used by thread_db callback interface. Stub version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -#include - -/* The rest of this file provides the types for emulation of the - Solaris interfaces that should be implemented by - users of libthread_db. */ - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register set types used in thread_db interface. */ -typedef struct prregset prgregset_t; -typedef struct prfpregset prfpregset_t; - -/* Type used for lightweight-process (i.e. thread) IDs. */ -typedef __pid_t lwpid_t; - - -#endif /* sys/procfs.h */ diff --git a/sysdeps/nptl/tcb-offsets.h b/sysdeps/nptl/tcb-offsets.h deleted file mode 100644 index 3fe13702ea..0000000000 --- a/sysdeps/nptl/tcb-offsets.h +++ /dev/null @@ -1 +0,0 @@ -/* This is overridden by generated tcb-offsets.h on arches which need it. */ diff --git a/sysdeps/nptl/tst-mqueue8x.c b/sysdeps/nptl/tst-mqueue8x.c deleted file mode 100644 index ca280394f7..0000000000 --- a/sysdeps/nptl/tst-mqueue8x.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/nptl/unwind-forcedunwind.c b/sysdeps/nptl/unwind-forcedunwind.c deleted file mode 100644 index 33a1975f5e..0000000000 --- a/sysdeps/nptl/unwind-forcedunwind.c +++ /dev/null @@ -1,148 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include -#include -#include - -static void *libgcc_s_handle; -void (*__libgcc_s_resume) (struct _Unwind_Exception *exc) - attribute_hidden __attribute__ ((noreturn)); -static _Unwind_Reason_Code (*libgcc_s_personality) PERSONALITY_PROTO; -static _Unwind_Reason_Code (*libgcc_s_forcedunwind) - (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *); -static _Unwind_Word (*libgcc_s_getcfa) (struct _Unwind_Context *); - -void -__attribute_noinline__ -pthread_cancel_init (void) -{ - void *resume; - void *personality; - void *forcedunwind; - void *getcfa; - void *handle; - - if (__glibc_likely (libgcc_s_handle != NULL)) - { - /* Force gcc to reload all values. */ - asm volatile ("" ::: "memory"); - return; - } - - handle = __libc_dlopen (LIBGCC_S_SO); - - if (handle == NULL - || (resume = __libc_dlsym (handle, "_Unwind_Resume")) == NULL - || (personality = __libc_dlsym (handle, "__gcc_personality_v0")) == NULL - || (forcedunwind = __libc_dlsym (handle, "_Unwind_ForcedUnwind")) - == NULL - || (getcfa = __libc_dlsym (handle, "_Unwind_GetCFA")) == NULL -#ifdef ARCH_CANCEL_INIT - || ARCH_CANCEL_INIT (handle) -#endif - ) - __libc_fatal (LIBGCC_S_SO " must be installed for pthread_cancel to work\n"); - - PTR_MANGLE (resume); - __libgcc_s_resume = resume; - PTR_MANGLE (personality); - libgcc_s_personality = personality; - PTR_MANGLE (forcedunwind); - libgcc_s_forcedunwind = forcedunwind; - PTR_MANGLE (getcfa); - libgcc_s_getcfa = getcfa; - /* Make sure libgcc_s_handle is written last. Otherwise, - pthread_cancel_init might return early even when the pointer the - caller is interested in is not initialized yet. */ - atomic_write_barrier (); - libgcc_s_handle = handle; -} - -void -__libc_freeres_fn_section -__unwind_freeres (void) -{ - void *handle = libgcc_s_handle; - if (handle != NULL) - { - libgcc_s_handle = NULL; - __libc_dlclose (handle); - } -} - -#if !HAVE_ARCH_UNWIND_RESUME -void -_Unwind_Resume (struct _Unwind_Exception *exc) -{ - if (__glibc_unlikely (libgcc_s_handle == NULL)) - pthread_cancel_init (); - else - atomic_read_barrier (); - - void (*resume) (struct _Unwind_Exception *exc) = __libgcc_s_resume; - PTR_DEMANGLE (resume); - resume (exc); -} -#endif - -_Unwind_Reason_Code -__gcc_personality_v0 PERSONALITY_PROTO -{ - if (__glibc_unlikely (libgcc_s_handle == NULL)) - pthread_cancel_init (); - else - atomic_read_barrier (); - - __typeof (libgcc_s_personality) personality = libgcc_s_personality; - PTR_DEMANGLE (personality); - return (*personality) PERSONALITY_ARGS; -} - -_Unwind_Reason_Code -_Unwind_ForcedUnwind (struct _Unwind_Exception *exc, _Unwind_Stop_Fn stop, - void *stop_argument) -{ - if (__glibc_unlikely (libgcc_s_handle == NULL)) - pthread_cancel_init (); - else - atomic_read_barrier (); - - _Unwind_Reason_Code (*forcedunwind) - (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *) - = libgcc_s_forcedunwind; - PTR_DEMANGLE (forcedunwind); - return forcedunwind (exc, stop, stop_argument); -} - -_Unwind_Word -_Unwind_GetCFA (struct _Unwind_Context *context) -{ - if (__glibc_unlikely (libgcc_s_handle == NULL)) - pthread_cancel_init (); - else - atomic_read_barrier (); - - _Unwind_Word (*getcfa) (struct _Unwind_Context *) = libgcc_s_getcfa; - PTR_DEMANGLE (getcfa); - return getcfa (context); -} diff --git a/sysdeps/posix/Makefile b/sysdeps/posix/Makefile deleted file mode 100644 index 52f20f5d97..0000000000 --- a/sysdeps/posix/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -# These affect the generated bits/stdio_lim.h file. -L_tmpnam = 20 -TMP_MAX = 238328 -L_ctermid = 9 -L_cuserid = 9 - -ifeq ($(subdir)|$(have-thread-library),rt|no) -# With NPTL, this lives in libpthread so it can be used for sem_open too. -# Without NPTL, it's just private in librt. -librt-routines += shm-directory -endif diff --git a/sysdeps/posix/Subdirs b/sysdeps/posix/Subdirs deleted file mode 100644 index a46884d4f8..0000000000 --- a/sysdeps/posix/Subdirs +++ /dev/null @@ -1 +0,0 @@ -login diff --git a/sysdeps/posix/alarm.c b/sysdeps/posix/alarm.c deleted file mode 100644 index c1a50129ba..0000000000 --- a/sysdeps/posix/alarm.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Schedule an alarm. In SECONDS seconds, the process will get a SIGALRM. - If SECONDS is zero, any currently scheduled alarm will be cancelled. - The function returns the number of seconds remaining until the last - alarm scheduled would have signaled, or zero if there wasn't one. - There is no return value to indicate an error, but you can set `errno' - to 0 and check its value after calling `alarm', and this might tell you. - The signal may come late due to processor scheduling. */ -unsigned int -alarm (unsigned int seconds) -{ - struct itimerval old, new; - unsigned int retval; - - new.it_interval.tv_usec = 0; - new.it_interval.tv_sec = 0; - new.it_value.tv_usec = 0; - new.it_value.tv_sec = (long int) seconds; - if (__setitimer (ITIMER_REAL, &new, &old) < 0) - return 0; - - retval = old.it_value.tv_sec; - /* Round to the nearest second, but never report zero seconds when - the alarm is still set. */ - if (old.it_value.tv_usec >= 500000 - || (retval == 0 && old.it_value.tv_usec > 0)) - ++retval; - return retval; -} -libc_hidden_def (alarm) diff --git a/sysdeps/posix/clock.c b/sysdeps/posix/clock.c deleted file mode 100644 index 2985f0bf5e..0000000000 --- a/sysdeps/posix/clock.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Return the time used by the program so far (user time + system time). */ -clock_t -clock (void) -{ - struct tms buf; - - if (__times (&buf) < 0) - return (clock_t) -1; - - return buf.tms_utime + buf.tms_stime; -} diff --git a/sysdeps/posix/clock_getres.c b/sysdeps/posix/clock_getres.c deleted file mode 100644 index b6248bef2c..0000000000 --- a/sysdeps/posix/clock_getres.c +++ /dev/null @@ -1,118 +0,0 @@ -/* clock_getres -- Get the resolution of a POSIX clockid_t. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - -#if HP_TIMING_AVAIL -static long int nsec; /* Clock frequency of the processor. */ - -static int -hp_timing_getres (struct timespec *res) -{ - if (__glibc_unlikely (nsec == 0)) - { - hp_timing_t freq; - - /* This can only happen if we haven't initialized the `nsec' - variable yet. Do this now. We don't have to protect this - code against multiple execution since all of them should - lead to the same result. */ - freq = __get_clockfreq (); - if (__glibc_unlikely (freq == 0)) - /* Something went wrong. */ - return -1; - - nsec = MAX (UINT64_C (1000000000) / freq, 1); - } - - /* Fill in the values. - The seconds are always zero (unless we have a 1Hz machine). */ - res->tv_sec = 0; - res->tv_nsec = nsec; - - return 0; -} -#endif - -static inline int -realtime_getres (struct timespec *res) -{ - long int clk_tck = sysconf (_SC_CLK_TCK); - - if (__glibc_likely (clk_tck != -1)) - { - /* This implementation assumes that the realtime clock has a - resolution higher than 1 second. This is the case for any - reasonable implementation. */ - res->tv_sec = 0; - res->tv_nsec = 1000000000 / clk_tck; - return 0; - } - - return -1; -} - - -/* Get resolution of clock. */ -int -__clock_getres (clockid_t clock_id, struct timespec *res) -{ - int retval = -1; - - switch (clock_id) - { -#ifdef SYSDEP_GETRES - SYSDEP_GETRES; -#endif - -#ifndef HANDLED_REALTIME - case CLOCK_REALTIME: - retval = realtime_getres (res); - break; -#endif /* handled REALTIME */ - - default: -#ifdef SYSDEP_GETRES_CPU - SYSDEP_GETRES_CPU; -#endif -#if HP_TIMING_AVAIL - if ((clock_id & ((1 << CLOCK_IDFIELD_SIZE) - 1)) - == CLOCK_THREAD_CPUTIME_ID) - retval = hp_timing_getres (res); - else -#endif - __set_errno (EINVAL); - break; - -#if HP_TIMING_AVAIL && !defined HANDLED_CPUTIME - case CLOCK_PROCESS_CPUTIME_ID: - case CLOCK_THREAD_CPUTIME_ID: - retval = hp_timing_getres (res); - break; -#endif - } - - return retval; -} -weak_alias (__clock_getres, clock_getres) diff --git a/sysdeps/posix/closedir.c b/sysdeps/posix/closedir.c deleted file mode 100644 index e7b7d77fde..0000000000 --- a/sysdeps/posix/closedir.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - - -/* Close the directory stream DIRP. - Return 0 if successful, -1 if not. */ -int -__closedir (DIR *dirp) -{ - int fd; - - if (dirp == NULL) - { - __set_errno (EINVAL); - return -1; - } - - /* We do not try to synchronize access here. If some other thread - still uses this handle it is a big mistake and that thread - deserves all the bad data it gets. */ - - fd = dirp->fd; - -#if IS_IN (libc) - __libc_lock_fini (dirp->lock); -#endif - - free ((void *) dirp); - - return close_not_cancel (fd); -} -weak_alias (__closedir, closedir) diff --git a/sysdeps/posix/ctermid.c b/sysdeps/posix/ctermid.c deleted file mode 100644 index 253a89f0ab..0000000000 --- a/sysdeps/posix/ctermid.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -/* Return the name of the controlling terminal. If S is not NULL, the - name is copied into it (it should be at least L_ctermid bytes - long), otherwise we return a pointer to a non-const but read-only - string literal, that POSIX states the caller must not modify. */ -char * -ctermid (char *s) -{ - char *name = (char /*drop const*/ *) "/dev/tty"; - - if (s == NULL) - return name; - - return strcpy (s, name); -} diff --git a/sysdeps/posix/cuserid.c b/sysdeps/posix/cuserid.c deleted file mode 100644 index bee9734793..0000000000 --- a/sysdeps/posix/cuserid.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Return the username of the caller. - If S is not NULL, it points to a buffer of at least L_cuserid bytes - into which the name is copied; otherwise, a static buffer is used. */ -char * -cuserid (char *s) -{ - static char name[L_cuserid]; - char buf[NSS_BUFLEN_PASSWD]; - struct passwd pwent; - struct passwd *pwptr; - - if (__getpwuid_r (__geteuid (), &pwent, buf, sizeof (buf), &pwptr) - || pwptr == NULL) - { - if (s != NULL) - s[0] = '\0'; - return s; - } - - if (s == NULL) - s = name; - s[L_cuserid - 1] = '\0'; - return strncpy (s, pwptr->pw_name, L_cuserid - 1); -} diff --git a/sysdeps/posix/dirfd.c b/sysdeps/posix/dirfd.c deleted file mode 100644 index fee8326d93..0000000000 --- a/sysdeps/posix/dirfd.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Return the file descriptor used by a DIR stream. Unix version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef dirfd - -int -dirfd (DIR *dirp) -{ - return dirp->fd; -} diff --git a/sysdeps/posix/dirstream.h b/sysdeps/posix/dirstream.h deleted file mode 100644 index 521db348a6..0000000000 --- a/sysdeps/posix/dirstream.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DIRSTREAM_H -#define _DIRSTREAM_H 1 - -#include - -#include - -/* Directory stream type. - - The miscellaneous Unix `readdir' implementations read directory data - into a buffer and return `struct dirent *' pointers into it. */ - -struct __dirstream - { - int fd; /* File descriptor. */ - - __libc_lock_define (, lock) /* Mutex lock for this structure. */ - - size_t allocation; /* Space allocated for the block. */ - size_t size; /* Total valid data in the block. */ - size_t offset; /* Current offset into the block. */ - - off_t filepos; /* Position of next entry to read. */ - - int errcode; /* Delayed error code. */ - - /* Directory block. We must make sure that this block starts - at an address that is aligned adequately enough to store - dirent entries. Using the alignment of "void *" is not - sufficient because dirents on 32-bit platforms can require - 64-bit alignment. We use "long double" here to be consistent - with what malloc uses. */ - char data[0] __attribute__ ((aligned (__alignof__ (long double)))); - }; - -#define _DIR_dirfd(dirp) ((dirp)->fd) - -#endif /* dirstream.h */ diff --git a/sysdeps/posix/dl-fileid.h b/sysdeps/posix/dl-fileid.h deleted file mode 100644 index 0ab98272ba..0000000000 --- a/sysdeps/posix/dl-fileid.h +++ /dev/null @@ -1,50 +0,0 @@ -/* File identity for the dynamic linker. Generic POSIX.1 version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* For POSIX.1 systems, the pair of st_dev and st_ino constitute - a unique identifier for a file. */ -struct r_file_id - { - dev_t dev; - ino64_t ino; - }; - -/* Sample FD to fill in *ID. Returns true on success. - On error, returns false, with errno set. */ -static inline bool -_dl_get_file_id (int fd, struct r_file_id *id) -{ - struct stat64 st; - - if (__glibc_unlikely (__fxstat64 (_STAT_VER, fd, &st) < 0)) - return false; - - id->dev = st.st_dev; - id->ino = st.st_ino; - return true; -} - -/* Compare two results from _dl_get_file_id for equality. */ -static inline bool -_dl_file_id_match_p (const struct r_file_id *a, const struct r_file_id *b) -{ - return a->dev == b->dev && a->ino == b->ino; -} diff --git a/sysdeps/posix/dup.c b/sysdeps/posix/dup.c deleted file mode 100644 index 82c0081111..0000000000 --- a/sysdeps/posix/dup.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -/* Duplicate FD, returning a new file descriptor open on the same file. */ -int -__dup (int fd) -{ - return __fcntl (fd, F_DUPFD, 0); -} -libc_hidden_def (__dup) -weak_alias (__dup, dup) diff --git a/sysdeps/posix/dup2.c b/sysdeps/posix/dup2.c deleted file mode 100644 index 3c8e1bcac4..0000000000 --- a/sysdeps/posix/dup2.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Duplicate FD to FD2, closing the old FD2 and making FD2 be - open the same file as FD is. Return FD2 or -1. */ -int -__dup2 (int fd, int fd2) -{ - int save; - - if (fd2 < 0 -#ifdef OPEN_MAX - || fd2 >= OPEN_MAX -#endif -) - { - __set_errno (EBADF); - return -1; - } - - /* Check if FD is kosher. */ - if (fcntl (fd, F_GETFL) < 0) - return -1; - - if (fd == fd2) - return fd2; - - /* This is not atomic. */ - - save = errno; - (void) close (fd2); - __set_errno (save); - - return fcntl (fd, F_DUPFD, fd2); -} -libc_hidden_def (__dup2) -weak_alias (__dup2, dup2) diff --git a/sysdeps/posix/euidaccess.c b/sysdeps/posix/euidaccess.c deleted file mode 100644 index 0c6f4d0c54..0000000000 --- a/sysdeps/posix/euidaccess.c +++ /dev/null @@ -1,215 +0,0 @@ -/* Check if effective user id can access file - Copyright (C) 1990-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Written by David MacKenzie and Torbjorn Granlund. - Adapted for GNU C library by Roland McGrath. */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include -#include - -#ifdef S_IEXEC -# ifndef S_IXUSR -# define S_IXUSR S_IEXEC -# endif -# ifndef S_IXGRP -# define S_IXGRP (S_IEXEC >> 3) -# endif -# ifndef S_IXOTH -# define S_IXOTH (S_IEXEC >> 6) -# endif -#endif /* S_IEXEC */ - -#if defined HAVE_UNISTD_H || defined _LIBC -# include -#endif - -#ifndef _POSIX_VERSION -uid_t getuid (); -gid_t getgid (); -uid_t geteuid (); -gid_t getegid (); -#endif /* not POSIX_VERSION */ - -#include -#ifndef errno -extern int errno; -#endif -#ifndef __set_errno -# define __set_errno(val) errno = (val) -#endif - -#if defined EACCES && !defined EACCESS -# define EACCESS EACCES -#endif - -#ifndef F_OK -# define F_OK 0 -# define X_OK 1 -# define W_OK 2 -# define R_OK 4 -#endif - -#if !defined S_IROTH && defined R_OK -# define S_IROTH R_OK -#endif -#if !defined S_IWOTH && defined W_OK -# define S_IWOTH W_OK -#endif -#if !defined S_IXOTH && defined X_OK -# define S_IXOTH X_OK -#endif - - -#ifdef _LIBC - -# define group_member __group_member -# define euidaccess __euidaccess - -#else - -/* The user's real user id. */ -static uid_t uid; - -/* The user's real group id. */ -static gid_t gid; - -/* The user's effective user id. */ -static uid_t euid; - -/* The user's effective group id. */ -static gid_t egid; - -/* Nonzero if UID, GID, EUID, and EGID have valid values. */ -static int have_ids; - -# ifdef HAVE_GETGROUPS -int group_member (); -# else -# define group_member(gid) 0 -# endif - -#endif - - -/* Return 0 if the user has permission of type MODE on file PATH; - otherwise, return -1 and set `errno' to EACCESS. - Like access, except that it uses the effective user and group - id's instead of the real ones, and it does not check for read-only - filesystem, text busy, etc. */ - -int -euidaccess (const char *path, int mode) -{ - struct stat64 stats; - int granted; - -#ifdef _LIBC - uid_t euid; - gid_t egid; -#else - if (have_ids == 0) - { - have_ids = 1; - uid = getuid (); - gid = getgid (); - euid = geteuid (); - egid = getegid (); - } - - if (uid == euid && gid == egid) - /* If we are not set-uid or set-gid, access does the same. */ - return access (path, mode); -#endif - - if (stat64 (path, &stats)) - return -1; - - mode &= (X_OK | W_OK | R_OK); /* Clear any bogus bits. */ -#if R_OK != S_IROTH || W_OK != S_IWOTH || X_OK != S_IXOTH - ?error Oops, portability assumptions incorrect. -#endif - - if (mode == F_OK) - return 0; /* The file exists. */ - -#ifdef _LIBC - /* Now we need the IDs. */ - euid = __geteuid (); - egid = __getegid (); - - if (__getuid () == euid && __getgid () == egid) - /* If we are not set-uid or set-gid, access does the same. */ - return __access (path, mode); -#endif - - /* The super-user can read and write any file, and execute any file - that anyone can execute. */ - if (euid == 0 && ((mode & X_OK) == 0 - || (stats.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))) - return 0; - - if (euid == stats.st_uid) - granted = (unsigned int) (stats.st_mode & (mode << 6)) >> 6; - else if (egid == stats.st_gid || group_member (stats.st_gid)) - granted = (unsigned int) (stats.st_mode & (mode << 3)) >> 3; - else - granted = (stats.st_mode & mode); - /* XXX Add support for ACLs. */ - if (granted == mode) - return 0; - __set_errno (EACCESS); - return -1; -} -#undef euidaccess -#undef eaccess -#ifdef weak_alias -weak_alias (__euidaccess, euidaccess) -weak_alias (__euidaccess, eaccess) -#endif - -#ifdef TEST -# include -# include -# include "error.h" - -char *program_name; - -int -main (int argc, char **argv) -{ - char *file; - int mode; - int err; - - program_name = argv[0]; - if (argc < 3) - abort (); - file = argv[1]; - mode = atoi (argv[2]); - - err = euidaccess (file, mode); - printf ("%d\n", err); - if (err != 0) - error (0, errno, "%s", file); - exit (0); -} -#endif diff --git a/sysdeps/posix/fdopendir.c b/sysdeps/posix/fdopendir.c deleted file mode 100644 index 6e772f26ff..0000000000 --- a/sysdeps/posix/fdopendir.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#include - - -DIR * -__fdopendir (int fd) -{ - struct stat64 statbuf; - - if (__builtin_expect (__fxstat64 (_STAT_VER, fd, &statbuf), 0) < 0) - return NULL; - if (__glibc_unlikely (! S_ISDIR (statbuf.st_mode))) - { - __set_errno (ENOTDIR); - return NULL; - } - - /* Make sure the descriptor allows for reading. */ - int flags = __fcntl (fd, F_GETFL); - if (__glibc_unlikely (flags == -1)) - return NULL; - if (__glibc_unlikely ((flags & O_ACCMODE) == O_WRONLY)) - { - __set_errno (EINVAL); - return NULL; - } - - return __alloc_dir (fd, false, flags, &statbuf); -} -weak_alias (__fdopendir, fdopendir) diff --git a/sysdeps/posix/flock.c b/sysdeps/posix/flock.c deleted file mode 100644 index 5aeba7d1b8..0000000000 --- a/sysdeps/posix/flock.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file implements the `flock' function in terms of the POSIX.1 `fcntl' - locking mechanism. In 4BSD, these are two incompatible locking mechanisms, - perhaps with different semantics? */ - -#include -#include -#include -#include - -/* Apply or remove an advisory lock, according to OPERATION, - on the file FD refers to. */ -int -__flock (int fd, int operation) -{ - struct flock lbuf; - - switch (operation & ~LOCK_NB) - { - case LOCK_SH: - lbuf.l_type = F_RDLCK; - break; - case LOCK_EX: - lbuf.l_type = F_WRLCK; - break; - case LOCK_UN: - lbuf.l_type = F_UNLCK; - break; - default: - __set_errno (EINVAL); - return -1; - } - - lbuf.l_whence = SEEK_SET; - lbuf.l_start = lbuf.l_len = 0L; /* Lock the whole file. */ - - return __fcntl (fd, (operation & LOCK_NB) ? F_SETLK : F_SETLKW, &lbuf); -} - -weak_alias (__flock, flock) diff --git a/sysdeps/posix/fpathconf.c b/sysdeps/posix/fpathconf.c deleted file mode 100644 index a363a59659..0000000000 --- a/sysdeps/posix/fpathconf.c +++ /dev/null @@ -1,229 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - - -/* Get file-specific information about descriptor FD. */ -long int -__fpathconf (int fd, int name) -{ - if (fd < 0) - { - __set_errno (EBADF); - return -1; - } - - switch (name) - { - default: - __set_errno (EINVAL); - return -1; - - case _PC_LINK_MAX: -#ifdef LINK_MAX - return LINK_MAX; -#else - return -1; -#endif - - case _PC_MAX_CANON: -#ifdef MAX_CANON - return MAX_CANON; -#else - return -1; -#endif - - case _PC_MAX_INPUT: -#ifdef MAX_INPUT - return MAX_INPUT; -#else - return -1; -#endif - - case _PC_NAME_MAX: -#ifdef NAME_MAX - { - struct statvfs64 sv; - int save_errno = errno; - - if (__fstatvfs64 (fd, &sv) < 0) - { - if (errno == ENOSYS) - { - __set_errno (save_errno); - return NAME_MAX; - } - else if (errno == ENODEV) - __set_errno (EINVAL); - - return -1; - } - else - { - return sv.f_namemax; - } - } -#else - return -1; -#endif - - case _PC_PATH_MAX: -#ifdef PATH_MAX - return PATH_MAX; -#else - return -1; -#endif - - case _PC_PIPE_BUF: -#ifdef PIPE_BUF - return PIPE_BUF; -#else - return -1; -#endif - - case _PC_CHOWN_RESTRICTED: -#ifdef _POSIX_CHOWN_RESTRICTED - return _POSIX_CHOWN_RESTRICTED; -#else - return -1; -#endif - - case _PC_NO_TRUNC: -#ifdef _POSIX_NO_TRUNC - return _POSIX_NO_TRUNC; -#else - return -1; -#endif - - case _PC_VDISABLE: -#ifdef _POSIX_VDISABLE - return _POSIX_VDISABLE; -#else - return -1; -#endif - - case _PC_SYNC_IO: -#ifdef _POSIX_SYNC_IO - return _POSIX_SYNC_IO; -#else - return -1; -#endif - - case _PC_ASYNC_IO: -#ifdef _POSIX_ASYNC_IO - { - /* AIO is only allowed on regular files and block devices. */ - struct stat64 st; - - if (__fxstat64 (_STAT_VER, fd, &st) < 0 - || (! S_ISREG (st.st_mode) && ! S_ISBLK (st.st_mode))) - return -1; - else - return 1; - } -#else - return -1; -#endif - - case _PC_PRIO_IO: -#ifdef _POSIX_PRIO_IO - return _POSIX_PRIO_IO; -#else - return -1; -#endif - - case _PC_SOCK_MAXBUF: -#ifdef SOCK_MAXBUF - return SOCK_MAXBUF; -#else - return -1; -#endif - - case _PC_FILESIZEBITS: -#ifdef FILESIZEBITS - return FILESIZEBITS; -#else - /* We let platforms with larger file sizes overwrite this value. */ - return 32; -#endif - - case _PC_REC_INCR_XFER_SIZE: - /* XXX It is not entirely clear what the limit is supposed to do. - What is incremented? */ - return -1; - - case _PC_REC_MAX_XFER_SIZE: - /* XXX It is not entirely clear what the limit is supposed to do. - In general there is no top limit of the number of bytes which - case be transported at once. */ - return -1; - - case _PC_REC_MIN_XFER_SIZE: - { - /* XXX It is not entirely clear what the limit is supposed to do. - I assume this is the block size of the filesystem. */ - struct statvfs64 sv; - - if (__fstatvfs64 (fd, &sv) < 0) - return -1; - return sv.f_bsize; - } - - case _PC_REC_XFER_ALIGN: - { - /* XXX It is not entirely clear what the limit is supposed to do. - I assume that the number should reflect the minimal block - alignment. */ - struct statvfs64 sv; - - if (__fstatvfs64 (fd, &sv) < 0) - return -1; - return sv.f_frsize; - } - - case _PC_ALLOC_SIZE_MIN: - { - /* XXX It is not entirely clear what the limit is supposed to do. - I assume that the number should reflect the minimal block - alignment. */ - struct statvfs64 sv; - - if (__fstatvfs64 (fd, &sv) < 0) - return -1; - return sv.f_frsize; - } - - case _PC_SYMLINK_MAX: - /* In general there are no limits. If a system has one it should - overwrite this case. */ - return -1; - - case _PC_2_SYMLINKS: - /* Unix systems generally have symlinks. */ - return 1; - } -} - -#undef __fpathconf -weak_alias (__fpathconf, fpathconf) diff --git a/sysdeps/posix/gai_strerror-strs.h b/sysdeps/posix/gai_strerror-strs.h deleted file mode 100644 index 19040a5138..0000000000 --- a/sysdeps/posix/gai_strerror-strs.h +++ /dev/null @@ -1,17 +0,0 @@ -_S(EAI_ADDRFAMILY, N_("Address family for hostname not supported")) -_S(EAI_AGAIN, N_("Temporary failure in name resolution")) -_S(EAI_BADFLAGS, N_("Bad value for ai_flags")) -_S(EAI_FAIL, N_("Non-recoverable failure in name resolution")) -_S(EAI_FAMILY, N_("ai_family not supported")) -_S(EAI_MEMORY, N_("Memory allocation failure")) -_S(EAI_NODATA, N_("No address associated with hostname")) -_S(EAI_NONAME, N_("Name or service not known")) -_S(EAI_SERVICE, N_("Servname not supported for ai_socktype")) -_S(EAI_SOCKTYPE, N_("ai_socktype not supported")) -_S(EAI_SYSTEM, N_("System error")) -_S(EAI_INPROGRESS, N_("Processing request in progress")) -_S(EAI_CANCELED, N_("Request canceled")) -_S(EAI_NOTCANCELED, N_("Request not canceled")) -_S(EAI_ALLDONE, N_("All requests done")) -_S(EAI_INTR, N_("Interrupted by a signal")) -_S(EAI_IDN_ENCODE, N_("Parameter string not correctly encoded")) diff --git a/sysdeps/posix/gai_strerror.c b/sysdeps/posix/gai_strerror.c deleted file mode 100644 index e47e14688f..0000000000 --- a/sysdeps/posix/gai_strerror.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -#define MSGSTRFIELD(line) MSGSTRFIELD1 (line) -#define MSGSTRFIELD1(line) str##line -static const union msgstr_t -{ - struct - { -#define _S(n, s) char MSGSTRFIELD(__LINE__)[sizeof (s)]; -#include "gai_strerror-strs.h" -#undef _S - }; - char str[0]; -} msgstr = - { - { -#define _S(n, s) s, -#include "gai_strerror-strs.h" -#undef _S - } - }; -static const struct -{ - int16_t code; - uint16_t idx; -} msgidx[] = - { -#define _S(n, s) { n, offsetof (union msgstr_t, MSGSTRFIELD (__LINE__)) }, -#include "gai_strerror-strs.h" -#undef _S - }; - - -const char * -gai_strerror (int code) -{ - const char *result = "Unknown error"; - for (size_t i = 0; i < sizeof (msgidx) / sizeof (msgidx[0]); ++i) - if (msgidx[i].code == code) - { - result = msgstr.str + msgidx[i].idx; - break; - } - - return _(result); -} -libc_hidden_def (gai_strerror) diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c deleted file mode 100644 index a8bdd9a182..0000000000 --- a/sysdeps/posix/getaddrinfo.c +++ /dev/null @@ -1,2598 +0,0 @@ -/* Host and service name lookups using Name Service Switch modules. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The Inner Net License, Version 2.00 - - The author(s) grant permission for redistribution and use in source and -binary forms, with or without modification, of the software and documentation -provided that the following conditions are met: - -0. If you receive a version of the software that is specifically labelled - as not being for redistribution (check the version message and/or README), - you are not permitted to redistribute that version of the software in any - way or form. -1. All terms of the all other applicable copyrights and licenses must be - followed. -2. Redistributions of source code must retain the authors' copyright - notice(s), this list of conditions, and the following disclaimer. -3. Redistributions in binary form must reproduce the authors' copyright - notice(s), this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. -4. [The copyright holder has authorized the removal of this clause.] -5. Neither the name(s) of the author(s) nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY ITS AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - If these license terms cause you a real problem, contact the author. */ - -/* This software is Copyright 1996 by Craig Metz, All Rights Reserved. */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_LIBIDN -extern int __idna_to_ascii_lz (const char *input, char **output, int flags); -extern int __idna_to_unicode_lzlz (const char *input, char **output, - int flags); -# include -#endif - -struct gaih_service - { - const char *name; - int num; - }; - -struct gaih_servtuple - { - struct gaih_servtuple *next; - int socktype; - int protocol; - int port; - }; - -static const struct gaih_servtuple nullserv; - - -struct gaih_typeproto - { - int socktype; - int protocol; - uint8_t protoflag; - bool defaultflag; - char name[8]; - }; - -/* Values for `protoflag'. */ -#define GAI_PROTO_NOSERVICE 1 -#define GAI_PROTO_PROTOANY 2 - -static const struct gaih_typeproto gaih_inet_typeproto[] = -{ - { 0, 0, 0, false, "" }, - { SOCK_STREAM, IPPROTO_TCP, 0, true, "tcp" }, - { SOCK_DGRAM, IPPROTO_UDP, 0, true, "udp" }, -#if defined SOCK_DCCP && defined IPPROTO_DCCP - { SOCK_DCCP, IPPROTO_DCCP, 0, false, "dccp" }, -#endif -#ifdef IPPROTO_UDPLITE - { SOCK_DGRAM, IPPROTO_UDPLITE, 0, false, "udplite" }, -#endif -#ifdef IPPROTO_SCTP - { SOCK_STREAM, IPPROTO_SCTP, 0, false, "sctp" }, - { SOCK_SEQPACKET, IPPROTO_SCTP, 0, false, "sctp" }, -#endif - { SOCK_RAW, 0, GAI_PROTO_PROTOANY|GAI_PROTO_NOSERVICE, true, "raw" }, - { 0, 0, 0, false, "" } -}; - -static const struct addrinfo default_hints = - { - .ai_flags = AI_DEFAULT, - .ai_family = PF_UNSPEC, - .ai_socktype = 0, - .ai_protocol = 0, - .ai_addrlen = 0, - .ai_addr = NULL, - .ai_canonname = NULL, - .ai_next = NULL - }; - - -static int -gaih_inet_serv (const char *servicename, const struct gaih_typeproto *tp, - const struct addrinfo *req, struct gaih_servtuple *st, - struct scratch_buffer *tmpbuf) -{ - struct servent *s; - struct servent ts; - int r; - - do - { - r = __getservbyname_r (servicename, tp->name, &ts, - tmpbuf->data, tmpbuf->length, &s); - if (r != 0 || s == NULL) - { - if (r == ERANGE) - { - if (!scratch_buffer_grow (tmpbuf)) - return -EAI_MEMORY; - } - else - return -EAI_SERVICE; - } - } - while (r); - - st->next = NULL; - st->socktype = tp->socktype; - st->protocol = ((tp->protoflag & GAI_PROTO_PROTOANY) - ? req->ai_protocol : tp->protocol); - st->port = s->s_port; - - return 0; -} - -/* Convert struct hostent to a list of struct gaih_addrtuple objects. - h_name is not copied, and the struct hostent object must not be - deallocated prematurely. *RESULT must be NULL or a pointer to an - object allocated using malloc, which is freed. */ -static bool -convert_hostent_to_gaih_addrtuple (const struct addrinfo *req, - int family, - struct hostent *h, - struct gaih_addrtuple **result) -{ - free (*result); - *result = NULL; - - /* Count the number of addresses in h->h_addr_list. */ - size_t count = 0; - for (char **p = h->h_addr_list; *p != NULL; ++p) - ++count; - - /* Report no data if no addresses are available, or if the incoming - address size is larger than what we can store. */ - if (count == 0 || h->h_length > sizeof (((struct gaih_addrtuple) {}).addr)) - return true; - - struct gaih_addrtuple *array = calloc (count, sizeof (*array)); - if (array == NULL) - return false; - - for (size_t i = 0; i < count; ++i) - { - if (family == AF_INET && req->ai_family == AF_INET6) - { - /* Perform address mapping. */ - array[i].family = AF_INET6; - memcpy(array[i].addr + 3, h->h_addr_list[i], sizeof (uint32_t)); - array[i].addr[2] = htonl (0xffff); - } - else - { - array[i].family = family; - memcpy (array[i].addr, h->h_addr_list[i], h->h_length); - } - array[i].next = array + i + 1; - } - array[0].name = h->h_name; - array[count - 1].next = NULL; - - *result = array; - return true; -} - -#define gethosts(_family, _type) \ - { \ - int herrno; \ - struct hostent th; \ - struct hostent *h; \ - char *localcanon = NULL; \ - no_data = 0; \ - while (1) { \ - rc = 0; \ - status = DL_CALL_FCT (fct, (name, _family, &th, \ - tmpbuf->data, tmpbuf->length, \ - &rc, &herrno, NULL, &localcanon)); \ - if (rc != ERANGE || herrno != NETDB_INTERNAL) \ - break; \ - if (!scratch_buffer_grow (tmpbuf)) \ - { \ - result = -EAI_MEMORY; \ - goto free_and_return; \ - } \ - } \ - if (status == NSS_STATUS_SUCCESS && rc == 0) \ - h = &th; \ - else \ - h = NULL; \ - if (rc != 0) \ - { \ - if (herrno == NETDB_INTERNAL) \ - { \ - __set_h_errno (herrno); \ - _res.options |= old_res_options & DEPRECATED_RES_USE_INET6; \ - result = -EAI_SYSTEM; \ - goto free_and_return; \ - } \ - if (herrno == TRY_AGAIN) \ - no_data = EAI_AGAIN; \ - else \ - no_data = herrno == NO_DATA; \ - } \ - else if (h != NULL) \ - { \ - if (!convert_hostent_to_gaih_addrtuple (req, _family,h, &addrmem)) \ - { \ - _res.options |= old_res_options & DEPRECATED_RES_USE_INET6; \ - result = -EAI_SYSTEM; \ - goto free_and_return; \ - } \ - *pat = addrmem; \ - \ - if (localcanon != NULL && canon == NULL) \ - { \ - canonbuf = __strdup (localcanon); \ - if (canonbuf == NULL) \ - { \ - result = -EAI_SYSTEM; \ - goto free_and_return; \ - } \ - canon = canonbuf; \ - } \ - if (_family == AF_INET6 && *pat != NULL) \ - got_ipv6 = true; \ - } \ - } - - -typedef enum nss_status (*nss_gethostbyname4_r) - (const char *name, struct gaih_addrtuple **pat, - char *buffer, size_t buflen, int *errnop, - int *h_errnop, int32_t *ttlp); -typedef enum nss_status (*nss_gethostbyname3_r) - (const char *name, int af, struct hostent *host, - char *buffer, size_t buflen, int *errnop, - int *h_errnop, int32_t *ttlp, char **canonp); -typedef enum nss_status (*nss_getcanonname_r) - (const char *name, char *buffer, size_t buflen, char **result, - int *errnop, int *h_errnop); -extern service_user *__nss_hosts_database attribute_hidden; - -/* This function is called if a canonical name is requested, but if - the service function did not provide it. It tries to obtain the - name using getcanonname_r from the same service NIP. If the name - cannot be canonicalized, return a copy of NAME. Return NULL on - memory allocation failure. The returned string is allocated on the - heap; the caller has to free it. */ -static char * -getcanonname (service_user *nip, struct gaih_addrtuple *at, const char *name) -{ - nss_getcanonname_r cfct = __nss_lookup_function (nip, "getcanonname_r"); - char *s = (char *) name; - if (cfct != NULL) - { - char buf[256]; - int herrno; - int rc; - if (DL_CALL_FCT (cfct, (at->name ?: name, buf, sizeof (buf), - &s, &rc, &herrno)) != NSS_STATUS_SUCCESS) - /* If the canonical name cannot be determined, use the passed - string. */ - s = (char *) name; - } - return __strdup (name); -} - -static int -gaih_inet (const char *name, const struct gaih_service *service, - const struct addrinfo *req, struct addrinfo **pai, - unsigned int *naddrs, struct scratch_buffer *tmpbuf) -{ - const struct gaih_typeproto *tp = gaih_inet_typeproto; - struct gaih_servtuple *st = (struct gaih_servtuple *) &nullserv; - struct gaih_addrtuple *at = NULL; - int rc; - bool got_ipv6 = false; - const char *canon = NULL; - const char *orig_name = name; - - /* Reserve stack memory for the scratch buffer in the getaddrinfo - function. */ - size_t alloca_used = sizeof (struct scratch_buffer); - - if (req->ai_protocol || req->ai_socktype) - { - ++tp; - - while (tp->name[0] - && ((req->ai_socktype != 0 && req->ai_socktype != tp->socktype) - || (req->ai_protocol != 0 - && !(tp->protoflag & GAI_PROTO_PROTOANY) - && req->ai_protocol != tp->protocol))) - ++tp; - - if (! tp->name[0]) - { - if (req->ai_socktype) - return -EAI_SOCKTYPE; - else - return -EAI_SERVICE; - } - } - - int port = 0; - if (service != NULL) - { - if ((tp->protoflag & GAI_PROTO_NOSERVICE) != 0) - return -EAI_SERVICE; - - if (service->num < 0) - { - if (tp->name[0]) - { - st = (struct gaih_servtuple *) - alloca_account (sizeof (struct gaih_servtuple), alloca_used); - - if ((rc = gaih_inet_serv (service->name, tp, req, st, tmpbuf))) - return rc; - } - else - { - struct gaih_servtuple **pst = &st; - for (tp++; tp->name[0]; tp++) - { - struct gaih_servtuple *newp; - - if ((tp->protoflag & GAI_PROTO_NOSERVICE) != 0) - continue; - - if (req->ai_socktype != 0 - && req->ai_socktype != tp->socktype) - continue; - if (req->ai_protocol != 0 - && !(tp->protoflag & GAI_PROTO_PROTOANY) - && req->ai_protocol != tp->protocol) - continue; - - newp = (struct gaih_servtuple *) - alloca_account (sizeof (struct gaih_servtuple), - alloca_used); - - if ((rc = gaih_inet_serv (service->name, - tp, req, newp, tmpbuf))) - { - if (rc) - continue; - return rc; - } - - *pst = newp; - pst = &(newp->next); - } - if (st == (struct gaih_servtuple *) &nullserv) - return -EAI_SERVICE; - } - } - else - { - port = htons (service->num); - goto got_port; - } - } - else - { - got_port: - - if (req->ai_socktype || req->ai_protocol) - { - st = alloca_account (sizeof (struct gaih_servtuple), alloca_used); - st->next = NULL; - st->socktype = tp->socktype; - st->protocol = ((tp->protoflag & GAI_PROTO_PROTOANY) - ? req->ai_protocol : tp->protocol); - st->port = port; - } - else - { - /* Neither socket type nor protocol is set. Return all socket types - we know about. */ - struct gaih_servtuple **lastp = &st; - for (++tp; tp->name[0]; ++tp) - if (tp->defaultflag) - { - struct gaih_servtuple *newp; - - newp = alloca_account (sizeof (struct gaih_servtuple), - alloca_used); - newp->next = NULL; - newp->socktype = tp->socktype; - newp->protocol = tp->protocol; - newp->port = port; - - *lastp = newp; - lastp = &newp->next; - } - } - } - - bool malloc_name = false; - struct gaih_addrtuple *addrmem = NULL; - char *canonbuf = NULL; - int result = 0; - - if (name != NULL) - { - at = alloca_account (sizeof (struct gaih_addrtuple), alloca_used); - at->family = AF_UNSPEC; - at->scopeid = 0; - at->next = NULL; - -#ifdef HAVE_LIBIDN - if (req->ai_flags & AI_IDN) - { - int idn_flags = 0; - if (req->ai_flags & AI_IDN_ALLOW_UNASSIGNED) - idn_flags |= IDNA_ALLOW_UNASSIGNED; - if (req->ai_flags & AI_IDN_USE_STD3_ASCII_RULES) - idn_flags |= IDNA_USE_STD3_ASCII_RULES; - - char *p = NULL; - rc = __idna_to_ascii_lz (name, &p, idn_flags); - if (rc != IDNA_SUCCESS) - { - /* No need to jump to free_and_return here. */ - if (rc == IDNA_MALLOC_ERROR) - return -EAI_MEMORY; - if (rc == IDNA_DLOPEN_ERROR) - return -EAI_SYSTEM; - return -EAI_IDN_ENCODE; - } - /* In case the output string is the same as the input string - no new string has been allocated. */ - if (p != name) - { - name = p; - malloc_name = true; - } - } -#endif - - if (__inet_aton (name, (struct in_addr *) at->addr) != 0) - { - if (req->ai_family == AF_UNSPEC || req->ai_family == AF_INET) - at->family = AF_INET; - else if (req->ai_family == AF_INET6 && (req->ai_flags & AI_V4MAPPED)) - { - at->addr[3] = at->addr[0]; - at->addr[2] = htonl (0xffff); - at->addr[1] = 0; - at->addr[0] = 0; - at->family = AF_INET6; - } - else - { - result = -EAI_ADDRFAMILY; - goto free_and_return; - } - - if (req->ai_flags & AI_CANONNAME) - canon = name; - } - else if (at->family == AF_UNSPEC) - { - char *scope_delim = strchr (name, SCOPE_DELIMITER); - int e; - - { - bool malloc_namebuf = false; - char *namebuf = (char *) name; - - if (__glibc_unlikely (scope_delim != NULL)) - { - if (malloc_name) - *scope_delim = '\0'; - else - { - if (__libc_use_alloca (alloca_used - + scope_delim - name + 1)) - { - namebuf = alloca_account (scope_delim - name + 1, - alloca_used); - *((char *) __mempcpy (namebuf, name, - scope_delim - name)) = '\0'; - } - else - { - namebuf = __strndup (name, scope_delim - name); - if (namebuf == NULL) - { - assert (!malloc_name); - return -EAI_MEMORY; - } - malloc_namebuf = true; - } - } - } - - e = inet_pton (AF_INET6, namebuf, at->addr); - - if (malloc_namebuf) - free (namebuf); - else if (scope_delim != NULL && malloc_name) - /* Undo what we did above. */ - *scope_delim = SCOPE_DELIMITER; - } - if (e > 0) - { - if (req->ai_family == AF_UNSPEC || req->ai_family == AF_INET6) - at->family = AF_INET6; - else if (req->ai_family == AF_INET - && IN6_IS_ADDR_V4MAPPED (at->addr)) - { - at->addr[0] = at->addr[3]; - at->family = AF_INET; - } - else - { - result = -EAI_ADDRFAMILY; - goto free_and_return; - } - - if (scope_delim != NULL - && __inet6_scopeid_pton ((struct in6_addr *) at->addr, - scope_delim + 1, - &at->scopeid) != 0) - { - result = -EAI_NONAME; - goto free_and_return; - } - - if (req->ai_flags & AI_CANONNAME) - canon = name; - } - } - - if (at->family == AF_UNSPEC && (req->ai_flags & AI_NUMERICHOST) == 0) - { - struct gaih_addrtuple **pat = &at; - int no_data = 0; - int no_inet6_data = 0; - service_user *nip; - enum nss_status inet6_status = NSS_STATUS_UNAVAIL; - enum nss_status status = NSS_STATUS_UNAVAIL; - int no_more; - int old_res_options; - - /* If we do not have to look for IPv6 addresses or the canonical - name, use the simple, old functions, which do not support - IPv6 scope ids, nor retrieving the canonical name. */ - if (req->ai_family == AF_INET - && (req->ai_flags & AI_CANONNAME) == 0) - { - int rc; - struct hostent th; - struct hostent *h; - int herrno; - - while (1) - { - rc = __gethostbyname2_r (name, AF_INET, &th, - tmpbuf->data, tmpbuf->length, - &h, &herrno); - if (rc != ERANGE || herrno != NETDB_INTERNAL) - break; - if (!scratch_buffer_grow (tmpbuf)) - { - result = -EAI_MEMORY; - goto free_and_return; - } - } - - if (rc == 0) - { - if (h != NULL) - { - /* We found data, convert it. */ - if (!convert_hostent_to_gaih_addrtuple - (req, AF_INET, h, &addrmem)) - { - result = -EAI_MEMORY; - goto free_and_return; - } - *pat = addrmem; - } - } - else - { - if (herrno == NETDB_INTERNAL) - { - __set_h_errno (herrno); - result = -EAI_SYSTEM; - } - else if (herrno == TRY_AGAIN) - result = -EAI_AGAIN; - else - /* We made requests but they turned out no data. - The name is known, though. */ - result = -EAI_NODATA; - - goto free_and_return; - } - - goto process_list; - } - -#ifdef USE_NSCD - if (__nss_not_use_nscd_hosts > 0 - && ++__nss_not_use_nscd_hosts > NSS_NSCD_RETRY) - __nss_not_use_nscd_hosts = 0; - - if (!__nss_not_use_nscd_hosts - && !__nss_database_custom[NSS_DBSIDX_hosts]) - { - /* Try to use nscd. */ - struct nscd_ai_result *air = NULL; - int herrno; - int err = __nscd_getai (name, &air, &herrno); - if (air != NULL) - { - /* Transform into gaih_addrtuple list. */ - bool added_canon = (req->ai_flags & AI_CANONNAME) == 0; - char *addrs = air->addrs; - - addrmem = calloc (air->naddrs, sizeof (*addrmem)); - if (addrmem == NULL) - { - result = -EAI_MEMORY; - goto free_and_return; - } - - struct gaih_addrtuple *addrfree = addrmem; - for (int i = 0; i < air->naddrs; ++i) - { - socklen_t size = (air->family[i] == AF_INET - ? INADDRSZ : IN6ADDRSZ); - - if (!((air->family[i] == AF_INET - && req->ai_family == AF_INET6 - && (req->ai_flags & AI_V4MAPPED) != 0) - || req->ai_family == AF_UNSPEC - || air->family[i] == req->ai_family)) - { - /* Skip over non-matching result. */ - addrs += size; - continue; - } - - if (*pat == NULL) - { - *pat = addrfree++; - (*pat)->scopeid = 0; - } - uint32_t *pataddr = (*pat)->addr; - (*pat)->next = NULL; - if (added_canon || air->canon == NULL) - (*pat)->name = NULL; - else if (canonbuf == NULL) - { - canonbuf = __strdup (air->canon); - if (canonbuf == NULL) - { - result = -EAI_MEMORY; - goto free_and_return; - } - canon = (*pat)->name = canonbuf; - } - - if (air->family[i] == AF_INET - && req->ai_family == AF_INET6 - && (req->ai_flags & AI_V4MAPPED)) - { - (*pat)->family = AF_INET6; - pataddr[3] = *(uint32_t *) addrs; - pataddr[2] = htonl (0xffff); - pataddr[1] = 0; - pataddr[0] = 0; - pat = &((*pat)->next); - added_canon = true; - } - else if (req->ai_family == AF_UNSPEC - || air->family[i] == req->ai_family) - { - (*pat)->family = air->family[i]; - memcpy (pataddr, addrs, size); - pat = &((*pat)->next); - added_canon = true; - if (air->family[i] == AF_INET6) - got_ipv6 = true; - } - addrs += size; - } - - free (air); - - if (at->family == AF_UNSPEC) - { - result = -EAI_NONAME; - goto free_and_return; - } - - goto process_list; - } - else if (err == 0) - /* The database contains a negative entry. */ - goto free_and_return; - else if (__nss_not_use_nscd_hosts == 0) - { - if (herrno == NETDB_INTERNAL && errno == ENOMEM) - result = -EAI_MEMORY; - else if (herrno == TRY_AGAIN) - result = -EAI_AGAIN; - else - result = -EAI_SYSTEM; - - goto free_and_return; - } - } -#endif - - if (__nss_hosts_database == NULL) - no_more = __nss_database_lookup ("hosts", NULL, - "dns [!UNAVAIL=return] files", - &__nss_hosts_database); - else - no_more = 0; - nip = __nss_hosts_database; - - /* Initialize configurations. */ - _res_hconf_init (); - if (__res_maybe_init (&_res, 0) == -1) - no_more = 1; - - /* If we are looking for both IPv4 and IPv6 address we don't - want the lookup functions to automatically promote IPv4 - addresses to IPv6 addresses. Currently this is decided - by setting the RES_USE_INET6 bit in _res.options. */ - old_res_options = _res.options; - _res.options &= ~DEPRECATED_RES_USE_INET6; - - while (!no_more) - { - no_data = 0; - nss_gethostbyname4_r fct4 = NULL; - - /* gethostbyname4_r sends out parallel A and AAAA queries and - is thus only suitable for PF_UNSPEC. */ - if (req->ai_family == PF_UNSPEC) - fct4 = __nss_lookup_function (nip, "gethostbyname4_r"); - - if (fct4 != NULL) - { - int herrno; - - while (1) - { - rc = 0; - status = DL_CALL_FCT (fct4, (name, pat, - tmpbuf->data, tmpbuf->length, - &rc, &herrno, - NULL)); - if (status == NSS_STATUS_SUCCESS) - break; - if (status != NSS_STATUS_TRYAGAIN - || rc != ERANGE || herrno != NETDB_INTERNAL) - { - if (herrno == TRY_AGAIN) - no_data = EAI_AGAIN; - else - no_data = herrno == NO_DATA; - break; - } - - if (!scratch_buffer_grow (tmpbuf)) - { - _res.options - |= old_res_options & DEPRECATED_RES_USE_INET6; - result = -EAI_MEMORY; - goto free_and_return; - } - } - - if (status == NSS_STATUS_SUCCESS) - { - assert (!no_data); - no_data = 1; - - if ((req->ai_flags & AI_CANONNAME) != 0 && canon == NULL) - canon = (*pat)->name; - - while (*pat != NULL) - { - if ((*pat)->family == AF_INET - && req->ai_family == AF_INET6 - && (req->ai_flags & AI_V4MAPPED) != 0) - { - uint32_t *pataddr = (*pat)->addr; - (*pat)->family = AF_INET6; - pataddr[3] = pataddr[0]; - pataddr[2] = htonl (0xffff); - pataddr[1] = 0; - pataddr[0] = 0; - pat = &((*pat)->next); - no_data = 0; - } - else if (req->ai_family == AF_UNSPEC - || (*pat)->family == req->ai_family) - { - pat = &((*pat)->next); - - no_data = 0; - if (req->ai_family == AF_INET6) - got_ipv6 = true; - } - else - *pat = ((*pat)->next); - } - } - - no_inet6_data = no_data; - } - else - { - nss_gethostbyname3_r fct = NULL; - if (req->ai_flags & AI_CANONNAME) - /* No need to use this function if we do not look for - the canonical name. The function does not exist in - all NSS modules and therefore the lookup would - often fail. */ - fct = __nss_lookup_function (nip, "gethostbyname3_r"); - if (fct == NULL) - /* We are cheating here. The gethostbyname2_r - function does not have the same interface as - gethostbyname3_r but the extra arguments the - latter takes are added at the end. So the - gethostbyname2_r code will just ignore them. */ - fct = __nss_lookup_function (nip, "gethostbyname2_r"); - - if (fct != NULL) - { - if (req->ai_family == AF_INET6 - || req->ai_family == AF_UNSPEC) - { - gethosts (AF_INET6, struct in6_addr); - no_inet6_data = no_data; - inet6_status = status; - } - if (req->ai_family == AF_INET - || req->ai_family == AF_UNSPEC - || (req->ai_family == AF_INET6 - && (req->ai_flags & AI_V4MAPPED) - /* Avoid generating the mapped addresses if we - know we are not going to need them. */ - && ((req->ai_flags & AI_ALL) || !got_ipv6))) - { - gethosts (AF_INET, struct in_addr); - - if (req->ai_family == AF_INET) - { - no_inet6_data = no_data; - inet6_status = status; - } - } - - /* If we found one address for AF_INET or AF_INET6, - don't continue the search. */ - if (inet6_status == NSS_STATUS_SUCCESS - || status == NSS_STATUS_SUCCESS) - { - if ((req->ai_flags & AI_CANONNAME) != 0 - && canon == NULL) - { - canonbuf = getcanonname (nip, at, name); - if (canonbuf == NULL) - { - _res.options - |= old_res_options - & DEPRECATED_RES_USE_INET6; - result = -EAI_MEMORY; - goto free_and_return; - } - canon = canonbuf; - } - status = NSS_STATUS_SUCCESS; - } - else - { - /* We can have different states for AF_INET and - AF_INET6. Try to find a useful one for both. */ - if (inet6_status == NSS_STATUS_TRYAGAIN) - status = NSS_STATUS_TRYAGAIN; - else if (status == NSS_STATUS_UNAVAIL - && inet6_status != NSS_STATUS_UNAVAIL) - status = inet6_status; - } - } - else - { - status = NSS_STATUS_UNAVAIL; - /* Could not load any of the lookup functions. Indicate - an internal error if the failure was due to a system - error other than the file not being found. We use the - errno from the last failed callback. */ - if (errno != 0 && errno != ENOENT) - __set_h_errno (NETDB_INTERNAL); - } - } - - if (nss_next_action (nip, status) == NSS_ACTION_RETURN) - break; - - if (nip->next == NULL) - no_more = -1; - else - nip = nip->next; - } - - _res.options |= old_res_options & DEPRECATED_RES_USE_INET6; - - if (h_errno == NETDB_INTERNAL) - { - result = -EAI_SYSTEM; - goto free_and_return; - } - - if (no_data != 0 && no_inet6_data != 0) - { - /* If both requests timed out report this. */ - if (no_data == EAI_AGAIN && no_inet6_data == EAI_AGAIN) - result = -EAI_AGAIN; - else - /* We made requests but they turned out no data. The name - is known, though. */ - result = -EAI_NODATA; - - goto free_and_return; - } - } - - process_list: - if (at->family == AF_UNSPEC) - { - result = -EAI_NONAME; - goto free_and_return; - } - } - else - { - struct gaih_addrtuple *atr; - atr = at = alloca_account (sizeof (struct gaih_addrtuple), alloca_used); - memset (at, '\0', sizeof (struct gaih_addrtuple)); - - if (req->ai_family == AF_UNSPEC) - { - at->next = __alloca (sizeof (struct gaih_addrtuple)); - memset (at->next, '\0', sizeof (struct gaih_addrtuple)); - } - - if (req->ai_family == AF_UNSPEC || req->ai_family == AF_INET6) - { - at->family = AF_INET6; - if ((req->ai_flags & AI_PASSIVE) == 0) - memcpy (at->addr, &in6addr_loopback, sizeof (struct in6_addr)); - atr = at->next; - } - - if (req->ai_family == AF_UNSPEC || req->ai_family == AF_INET) - { - atr->family = AF_INET; - if ((req->ai_flags & AI_PASSIVE) == 0) - atr->addr[0] = htonl (INADDR_LOOPBACK); - } - } - - { - struct gaih_servtuple *st2; - struct gaih_addrtuple *at2 = at; - size_t socklen; - sa_family_t family; - - /* - buffer is the size of an unformatted IPv6 address in printable format. - */ - while (at2 != NULL) - { - /* Only the first entry gets the canonical name. */ - if (at2 == at && (req->ai_flags & AI_CANONNAME) != 0) - { - if (canon == NULL) - /* If the canonical name cannot be determined, use - the passed in string. */ - canon = orig_name; - -#ifdef HAVE_LIBIDN - if (req->ai_flags & AI_CANONIDN) - { - int idn_flags = 0; - if (req->ai_flags & AI_IDN_ALLOW_UNASSIGNED) - idn_flags |= IDNA_ALLOW_UNASSIGNED; - if (req->ai_flags & AI_IDN_USE_STD3_ASCII_RULES) - idn_flags |= IDNA_USE_STD3_ASCII_RULES; - - char *out; - int rc = __idna_to_unicode_lzlz (canon, &out, idn_flags); - if (rc != IDNA_SUCCESS) - { - if (rc == IDNA_MALLOC_ERROR) - result = -EAI_MEMORY; - else if (rc == IDNA_DLOPEN_ERROR) - result = -EAI_SYSTEM; - else - result = -EAI_IDN_ENCODE; - goto free_and_return; - } - /* In case the output string is the same as the input - string no new string has been allocated and we - make a copy. */ - if (out == canon) - goto make_copy; - canon = out; - } - else -#endif - { -#ifdef HAVE_LIBIDN - make_copy: -#endif - if (canonbuf != NULL) - /* We already allocated the string using malloc, but - the buffer is now owned by canon. */ - canonbuf = NULL; - else - { - canon = __strdup (canon); - if (canon == NULL) - { - result = -EAI_MEMORY; - goto free_and_return; - } - } - } - } - - family = at2->family; - if (family == AF_INET6) - { - socklen = sizeof (struct sockaddr_in6); - - /* If we looked up IPv4 mapped address discard them here if - the caller isn't interested in all address and we have - found at least one IPv6 address. */ - if (got_ipv6 - && (req->ai_flags & (AI_V4MAPPED|AI_ALL)) == AI_V4MAPPED - && IN6_IS_ADDR_V4MAPPED (at2->addr)) - goto ignore; - } - else - socklen = sizeof (struct sockaddr_in); - - for (st2 = st; st2 != NULL; st2 = st2->next) - { - struct addrinfo *ai; - ai = *pai = malloc (sizeof (struct addrinfo) + socklen); - if (ai == NULL) - { - free ((char *) canon); - result = -EAI_MEMORY; - goto free_and_return; - } - - ai->ai_flags = req->ai_flags; - ai->ai_family = family; - ai->ai_socktype = st2->socktype; - ai->ai_protocol = st2->protocol; - ai->ai_addrlen = socklen; - ai->ai_addr = (void *) (ai + 1); - - /* We only add the canonical name once. */ - ai->ai_canonname = (char *) canon; - canon = NULL; - -#ifdef _HAVE_SA_LEN - ai->ai_addr->sa_len = socklen; -#endif /* _HAVE_SA_LEN */ - ai->ai_addr->sa_family = family; - - /* In case of an allocation error the list must be NULL - terminated. */ - ai->ai_next = NULL; - - if (family == AF_INET6) - { - struct sockaddr_in6 *sin6p = - (struct sockaddr_in6 *) ai->ai_addr; - - sin6p->sin6_port = st2->port; - sin6p->sin6_flowinfo = 0; - memcpy (&sin6p->sin6_addr, - at2->addr, sizeof (struct in6_addr)); - sin6p->sin6_scope_id = at2->scopeid; - } - else - { - struct sockaddr_in *sinp = - (struct sockaddr_in *) ai->ai_addr; - sinp->sin_port = st2->port; - memcpy (&sinp->sin_addr, - at2->addr, sizeof (struct in_addr)); - memset (sinp->sin_zero, '\0', sizeof (sinp->sin_zero)); - } - - pai = &(ai->ai_next); - } - - ++*naddrs; - - ignore: - at2 = at2->next; - } - } - - free_and_return: - if (malloc_name) - free ((char *) name); - free (addrmem); - free (canonbuf); - - return result; -} - - -struct sort_result -{ - struct addrinfo *dest_addr; - /* Using sockaddr_storage is for now overkill. We only support IPv4 - and IPv6 so far. If this changes at some point we can adjust the - type here. */ - struct sockaddr_in6 source_addr; - uint8_t source_addr_len; - bool got_source_addr; - uint8_t source_addr_flags; - uint8_t prefixlen; - uint32_t index; - int32_t native; -}; - -struct sort_result_combo -{ - struct sort_result *results; - int nresults; -}; - - -#if __BYTE_ORDER == __BIG_ENDIAN -# define htonl_c(n) n -#else -# define htonl_c(n) __bswap_constant_32 (n) -#endif - -static const struct scopeentry -{ - union - { - char addr[4]; - uint32_t addr32; - }; - uint32_t netmask; - int32_t scope; -} default_scopes[] = - { - /* Link-local addresses: scope 2. */ - { { { 169, 254, 0, 0 } }, htonl_c (0xffff0000), 2 }, - { { { 127, 0, 0, 0 } }, htonl_c (0xff000000), 2 }, - /* Default: scope 14. */ - { { { 0, 0, 0, 0 } }, htonl_c (0x00000000), 14 } - }; - -/* The label table. */ -static const struct scopeentry *scopes; - - -static int -get_scope (const struct sockaddr_in6 *in6) -{ - int scope; - if (in6->sin6_family == PF_INET6) - { - if (! IN6_IS_ADDR_MULTICAST (&in6->sin6_addr)) - { - if (IN6_IS_ADDR_LINKLOCAL (&in6->sin6_addr) - /* RFC 4291 2.5.3 says that the loopback address is to be - treated like a link-local address. */ - || IN6_IS_ADDR_LOOPBACK (&in6->sin6_addr)) - scope = 2; - else if (IN6_IS_ADDR_SITELOCAL (&in6->sin6_addr)) - scope = 5; - else - /* XXX Is this the correct default behavior? */ - scope = 14; - } - else - scope = in6->sin6_addr.s6_addr[1] & 0xf; - } - else if (in6->sin6_family == PF_INET) - { - const struct sockaddr_in *in = (const struct sockaddr_in *) in6; - - size_t cnt = 0; - while (1) - { - if ((in->sin_addr.s_addr & scopes[cnt].netmask) - == scopes[cnt].addr32) - return scopes[cnt].scope; - - ++cnt; - } - /* NOTREACHED */ - } - else - /* XXX What is a good default? */ - scope = 15; - - return scope; -} - - -struct prefixentry -{ - struct in6_addr prefix; - unsigned int bits; - int val; -}; - - -/* The label table. */ -static const struct prefixentry *labels; - -/* Default labels. */ -static const struct prefixentry default_labels[] = - { - /* See RFC 3484 for the details. */ - { { .__in6_u - = { .__u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } } - }, 128, 0 }, - { { .__in6_u - = { .__u6_addr8 = { 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } - }, 16, 2 }, - { { .__in6_u - = { .__u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } - }, 96, 3 }, - { { .__in6_u - = { .__u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 } } - }, 96, 4 }, - /* The next two entries differ from RFC 3484. We need to treat - IPv6 site-local addresses special because they are never NATed, - unlike site-locale IPv4 addresses. If this would not happen, on - machines which have only IPv4 and IPv6 site-local addresses, the - sorting would prefer the IPv6 site-local addresses, causing - unnecessary delays when trying to connect to a global IPv6 address - through a site-local IPv6 address. */ - { { .__in6_u - = { .__u6_addr8 = { 0xfe, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } - }, 10, 5 }, - { { .__in6_u - = { .__u6_addr8 = { 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } - }, 7, 6 }, - /* Additional rule for Teredo tunnels. */ - { { .__in6_u - = { .__u6_addr8 = { 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } - }, 32, 7 }, - { { .__in6_u - = { .__u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } - }, 0, 1 } - }; - - -/* The precedence table. */ -static const struct prefixentry *precedence; - -/* The default precedences. */ -static const struct prefixentry default_precedence[] = - { - /* See RFC 3484 for the details. */ - { { .__in6_u - = { .__u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } } - }, 128, 50 }, - { { .__in6_u - = { .__u6_addr8 = { 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } - }, 16, 30 }, - { { .__in6_u - = { .__u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } - }, 96, 20 }, - { { .__in6_u - = { .__u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 } } - }, 96, 10 }, - { { .__in6_u - = { .__u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } - }, 0, 40 } - }; - - -static int -match_prefix (const struct sockaddr_in6 *in6, - const struct prefixentry *list, int default_val) -{ - int idx; - struct sockaddr_in6 in6_mem; - - if (in6->sin6_family == PF_INET) - { - const struct sockaddr_in *in = (const struct sockaddr_in *) in6; - - /* Construct a V4-to-6 mapped address. */ - in6_mem.sin6_family = PF_INET6; - in6_mem.sin6_port = in->sin_port; - in6_mem.sin6_flowinfo = 0; - memset (&in6_mem.sin6_addr, '\0', sizeof (in6_mem.sin6_addr)); - in6_mem.sin6_addr.s6_addr16[5] = 0xffff; - in6_mem.sin6_addr.s6_addr32[3] = in->sin_addr.s_addr; - in6_mem.sin6_scope_id = 0; - - in6 = &in6_mem; - } - else if (in6->sin6_family != PF_INET6) - return default_val; - - for (idx = 0; ; ++idx) - { - unsigned int bits = list[idx].bits; - const uint8_t *mask = list[idx].prefix.s6_addr; - const uint8_t *val = in6->sin6_addr.s6_addr; - - while (bits >= 8) - { - if (*mask != *val) - break; - - ++mask; - ++val; - bits -= 8; - } - - if (bits < 8) - { - if ((*mask & (0xff00 >> bits)) == (*val & (0xff00 >> bits))) - /* Match! */ - break; - } - } - - return list[idx].val; -} - - -static int -get_label (const struct sockaddr_in6 *in6) -{ - /* XXX What is a good default value? */ - return match_prefix (in6, labels, INT_MAX); -} - - -static int -get_precedence (const struct sockaddr_in6 *in6) -{ - /* XXX What is a good default value? */ - return match_prefix (in6, precedence, 0); -} - - -/* Find last bit set in a word. */ -static int -fls (uint32_t a) -{ - uint32_t mask; - int n; - for (n = 0, mask = 1 << 31; n < 32; mask >>= 1, ++n) - if ((a & mask) != 0) - break; - return n; -} - - -static int -rfc3484_sort (const void *p1, const void *p2, void *arg) -{ - const size_t idx1 = *(const size_t *) p1; - const size_t idx2 = *(const size_t *) p2; - struct sort_result_combo *src = (struct sort_result_combo *) arg; - struct sort_result *a1 = &src->results[idx1]; - struct sort_result *a2 = &src->results[idx2]; - - /* Rule 1: Avoid unusable destinations. - We have the got_source_addr flag set if the destination is reachable. */ - if (a1->got_source_addr && ! a2->got_source_addr) - return -1; - if (! a1->got_source_addr && a2->got_source_addr) - return 1; - - - /* Rule 2: Prefer matching scope. Only interesting if both - destination addresses are IPv6. */ - int a1_dst_scope - = get_scope ((struct sockaddr_in6 *) a1->dest_addr->ai_addr); - - int a2_dst_scope - = get_scope ((struct sockaddr_in6 *) a2->dest_addr->ai_addr); - - if (a1->got_source_addr) - { - int a1_src_scope = get_scope (&a1->source_addr); - int a2_src_scope = get_scope (&a2->source_addr); - - if (a1_dst_scope == a1_src_scope && a2_dst_scope != a2_src_scope) - return -1; - if (a1_dst_scope != a1_src_scope && a2_dst_scope == a2_src_scope) - return 1; - } - - - /* Rule 3: Avoid deprecated addresses. */ - if (a1->got_source_addr) - { - if (!(a1->source_addr_flags & in6ai_deprecated) - && (a2->source_addr_flags & in6ai_deprecated)) - return -1; - if ((a1->source_addr_flags & in6ai_deprecated) - && !(a2->source_addr_flags & in6ai_deprecated)) - return 1; - } - - /* Rule 4: Prefer home addresses. */ - if (a1->got_source_addr) - { - if (!(a1->source_addr_flags & in6ai_homeaddress) - && (a2->source_addr_flags & in6ai_homeaddress)) - return 1; - if ((a1->source_addr_flags & in6ai_homeaddress) - && !(a2->source_addr_flags & in6ai_homeaddress)) - return -1; - } - - /* Rule 5: Prefer matching label. */ - if (a1->got_source_addr) - { - int a1_dst_label - = get_label ((struct sockaddr_in6 *) a1->dest_addr->ai_addr); - int a1_src_label = get_label (&a1->source_addr); - - int a2_dst_label - = get_label ((struct sockaddr_in6 *) a2->dest_addr->ai_addr); - int a2_src_label = get_label (&a2->source_addr); - - if (a1_dst_label == a1_src_label && a2_dst_label != a2_src_label) - return -1; - if (a1_dst_label != a1_src_label && a2_dst_label == a2_src_label) - return 1; - } - - - /* Rule 6: Prefer higher precedence. */ - int a1_prec - = get_precedence ((struct sockaddr_in6 *) a1->dest_addr->ai_addr); - int a2_prec - = get_precedence ((struct sockaddr_in6 *) a2->dest_addr->ai_addr); - - if (a1_prec > a2_prec) - return -1; - if (a1_prec < a2_prec) - return 1; - - - /* Rule 7: Prefer native transport. */ - if (a1->got_source_addr) - { - /* The same interface index means the same interface which means - there is no difference in transport. This should catch many - (most?) cases. */ - if (a1->index != a2->index) - { - int a1_native = a1->native; - int a2_native = a2->native; - - if (a1_native == -1 || a2_native == -1) - { - uint32_t a1_index; - if (a1_native == -1) - { - /* If we do not have the information use 'native' as - the default. */ - a1_native = 0; - a1_index = a1->index; - } - else - a1_index = 0xffffffffu; - - uint32_t a2_index; - if (a2_native == -1) - { - /* If we do not have the information use 'native' as - the default. */ - a2_native = 0; - a2_index = a2->index; - } - else - a2_index = 0xffffffffu; - - __check_native (a1_index, &a1_native, a2_index, &a2_native); - - /* Fill in the results in all the records. */ - for (int i = 0; i < src->nresults; ++i) - if (a1_index != -1 && src->results[i].index == a1_index) - { - assert (src->results[i].native == -1 - || src->results[i].native == a1_native); - src->results[i].native = a1_native; - } - else if (a2_index != -1 && src->results[i].index == a2_index) - { - assert (src->results[i].native == -1 - || src->results[i].native == a2_native); - src->results[i].native = a2_native; - } - } - - if (a1_native && !a2_native) - return -1; - if (!a1_native && a2_native) - return 1; - } - } - - - /* Rule 8: Prefer smaller scope. */ - if (a1_dst_scope < a2_dst_scope) - return -1; - if (a1_dst_scope > a2_dst_scope) - return 1; - - - /* Rule 9: Use longest matching prefix. */ - if (a1->got_source_addr - && a1->dest_addr->ai_family == a2->dest_addr->ai_family) - { - int bit1 = 0; - int bit2 = 0; - - if (a1->dest_addr->ai_family == PF_INET) - { - assert (a1->source_addr.sin6_family == PF_INET); - assert (a2->source_addr.sin6_family == PF_INET); - - /* Outside of subnets, as defined by the network masks, - common address prefixes for IPv4 addresses make no sense. - So, define a non-zero value only if source and - destination address are on the same subnet. */ - struct sockaddr_in *in1_dst - = (struct sockaddr_in *) a1->dest_addr->ai_addr; - in_addr_t in1_dst_addr = ntohl (in1_dst->sin_addr.s_addr); - struct sockaddr_in *in1_src - = (struct sockaddr_in *) &a1->source_addr; - in_addr_t in1_src_addr = ntohl (in1_src->sin_addr.s_addr); - in_addr_t netmask1 = 0xffffffffu << (32 - a1->prefixlen); - - if ((in1_src_addr & netmask1) == (in1_dst_addr & netmask1)) - bit1 = fls (in1_dst_addr ^ in1_src_addr); - - struct sockaddr_in *in2_dst - = (struct sockaddr_in *) a2->dest_addr->ai_addr; - in_addr_t in2_dst_addr = ntohl (in2_dst->sin_addr.s_addr); - struct sockaddr_in *in2_src - = (struct sockaddr_in *) &a2->source_addr; - in_addr_t in2_src_addr = ntohl (in2_src->sin_addr.s_addr); - in_addr_t netmask2 = 0xffffffffu << (32 - a2->prefixlen); - - if ((in2_src_addr & netmask2) == (in2_dst_addr & netmask2)) - bit2 = fls (in2_dst_addr ^ in2_src_addr); - } - else if (a1->dest_addr->ai_family == PF_INET6) - { - assert (a1->source_addr.sin6_family == PF_INET6); - assert (a2->source_addr.sin6_family == PF_INET6); - - struct sockaddr_in6 *in1_dst; - struct sockaddr_in6 *in1_src; - struct sockaddr_in6 *in2_dst; - struct sockaddr_in6 *in2_src; - - in1_dst = (struct sockaddr_in6 *) a1->dest_addr->ai_addr; - in1_src = (struct sockaddr_in6 *) &a1->source_addr; - in2_dst = (struct sockaddr_in6 *) a2->dest_addr->ai_addr; - in2_src = (struct sockaddr_in6 *) &a2->source_addr; - - int i; - for (i = 0; i < 4; ++i) - if (in1_dst->sin6_addr.s6_addr32[i] - != in1_src->sin6_addr.s6_addr32[i] - || (in2_dst->sin6_addr.s6_addr32[i] - != in2_src->sin6_addr.s6_addr32[i])) - break; - - if (i < 4) - { - bit1 = fls (ntohl (in1_dst->sin6_addr.s6_addr32[i] - ^ in1_src->sin6_addr.s6_addr32[i])); - bit2 = fls (ntohl (in2_dst->sin6_addr.s6_addr32[i] - ^ in2_src->sin6_addr.s6_addr32[i])); - } - } - - if (bit1 > bit2) - return -1; - if (bit1 < bit2) - return 1; - } - - - /* Rule 10: Otherwise, leave the order unchanged. To ensure this - compare with the value indicating the order in which the entries - have been received from the services. NB: no two entries can have - the same order so the test will never return zero. */ - return idx1 < idx2 ? -1 : 1; -} - - -static int -in6aicmp (const void *p1, const void *p2) -{ - struct in6addrinfo *a1 = (struct in6addrinfo *) p1; - struct in6addrinfo *a2 = (struct in6addrinfo *) p2; - - return memcmp (a1->addr, a2->addr, sizeof (a1->addr)); -} - - -/* Name of the config file for RFC 3484 sorting (for now). */ -#define GAICONF_FNAME "/etc/gai.conf" - - -/* Non-zero if we are supposed to reload the config file automatically - whenever it changed. */ -static int gaiconf_reload_flag; - -/* Non-zero if gaiconf_reload_flag was ever set to true. */ -static int gaiconf_reload_flag_ever_set; - -/* Last modification time. */ -#ifdef _STATBUF_ST_NSEC - -static struct timespec gaiconf_mtime; - -static inline void -save_gaiconf_mtime (const struct stat64 *st) -{ - gaiconf_mtime = st->st_mtim; -} - -static inline bool -check_gaiconf_mtime (const struct stat64 *st) -{ - return (st->st_mtim.tv_sec == gaiconf_mtime.tv_sec - && st->st_mtim.tv_nsec == gaiconf_mtime.tv_nsec); -} - -#else - -static time_t gaiconf_mtime; - -static inline void -save_gaiconf_mtime (const struct stat64 *st) -{ - gaiconf_mtime = st->st_mtime; -} - -static inline bool -check_gaiconf_mtime (const struct stat64 *st) -{ - return st->st_mtime == gaiconf_mtime; -} - -#endif - - -libc_freeres_fn(fini) -{ - if (labels != default_labels) - { - const struct prefixentry *old = labels; - labels = default_labels; - free ((void *) old); - } - - if (precedence != default_precedence) - { - const struct prefixentry *old = precedence; - precedence = default_precedence; - free ((void *) old); - } - - if (scopes != default_scopes) - { - const struct scopeentry *old = scopes; - scopes = default_scopes; - free ((void *) old); - } -} - - -struct prefixlist -{ - struct prefixentry entry; - struct prefixlist *next; -}; - - -struct scopelist -{ - struct scopeentry entry; - struct scopelist *next; -}; - - -static void -free_prefixlist (struct prefixlist *list) -{ - while (list != NULL) - { - struct prefixlist *oldp = list; - list = list->next; - free (oldp); - } -} - - -static void -free_scopelist (struct scopelist *list) -{ - while (list != NULL) - { - struct scopelist *oldp = list; - list = list->next; - free (oldp); - } -} - - -static int -prefixcmp (const void *p1, const void *p2) -{ - const struct prefixentry *e1 = (const struct prefixentry *) p1; - const struct prefixentry *e2 = (const struct prefixentry *) p2; - - if (e1->bits < e2->bits) - return 1; - if (e1->bits == e2->bits) - return 0; - return -1; -} - - -static int -scopecmp (const void *p1, const void *p2) -{ - const struct scopeentry *e1 = (const struct scopeentry *) p1; - const struct scopeentry *e2 = (const struct scopeentry *) p2; - - if (e1->netmask > e2->netmask) - return -1; - if (e1->netmask == e2->netmask) - return 0; - return 1; -} - - -static void -gaiconf_init (void) -{ - struct prefixlist *labellist = NULL; - size_t nlabellist = 0; - bool labellist_nullbits = false; - struct prefixlist *precedencelist = NULL; - size_t nprecedencelist = 0; - bool precedencelist_nullbits = false; - struct scopelist *scopelist = NULL; - size_t nscopelist = 0; - bool scopelist_nullbits = false; - - FILE *fp = fopen (GAICONF_FNAME, "rce"); - if (fp != NULL) - { - struct stat64 st; - if (__fxstat64 (_STAT_VER, fileno (fp), &st) != 0) - { - fclose (fp); - goto no_file; - } - - char *line = NULL; - size_t linelen = 0; - - __fsetlocking (fp, FSETLOCKING_BYCALLER); - - while (!feof_unlocked (fp)) - { - ssize_t n = __getline (&line, &linelen, fp); - if (n <= 0) - break; - - /* Handle comments. No escaping possible so this is easy. */ - char *cp = strchr (line, '#'); - if (cp != NULL) - *cp = '\0'; - - cp = line; - while (isspace (*cp)) - ++cp; - - char *cmd = cp; - while (*cp != '\0' && !isspace (*cp)) - ++cp; - size_t cmdlen = cp - cmd; - - if (*cp != '\0') - *cp++ = '\0'; - while (isspace (*cp)) - ++cp; - - char *val1 = cp; - while (*cp != '\0' && !isspace (*cp)) - ++cp; - size_t val1len = cp - cmd; - - /* We always need at least two values. */ - if (val1len == 0) - continue; - - if (*cp != '\0') - *cp++ = '\0'; - while (isspace (*cp)) - ++cp; - - char *val2 = cp; - while (*cp != '\0' && !isspace (*cp)) - ++cp; - - /* Ignore the rest of the line. */ - *cp = '\0'; - - struct prefixlist **listp; - size_t *lenp; - bool *nullbitsp; - switch (cmdlen) - { - case 5: - if (strcmp (cmd, "label") == 0) - { - struct in6_addr prefix; - unsigned long int bits; - unsigned long int val; - char *endp; - - listp = &labellist; - lenp = &nlabellist; - nullbitsp = &labellist_nullbits; - - new_elem: - bits = 128; - __set_errno (0); - cp = strchr (val1, '/'); - if (cp != NULL) - *cp++ = '\0'; - if (inet_pton (AF_INET6, val1, &prefix) - && (cp == NULL - || (bits = strtoul (cp, &endp, 10)) != ULONG_MAX - || errno != ERANGE) - && *endp == '\0' - && bits <= 128 - && ((val = strtoul (val2, &endp, 10)) != ULONG_MAX - || errno != ERANGE) - && *endp == '\0' - && val <= INT_MAX) - { - struct prefixlist *newp = malloc (sizeof (*newp)); - if (newp == NULL) - { - free (line); - fclose (fp); - goto no_file; - } - - memcpy (&newp->entry.prefix, &prefix, sizeof (prefix)); - newp->entry.bits = bits; - newp->entry.val = val; - newp->next = *listp; - *listp = newp; - ++*lenp; - *nullbitsp |= bits == 0; - } - } - break; - - case 6: - if (strcmp (cmd, "reload") == 0) - { - gaiconf_reload_flag = strcmp (val1, "yes") == 0; - if (gaiconf_reload_flag) - gaiconf_reload_flag_ever_set = 1; - } - break; - - case 7: - if (strcmp (cmd, "scopev4") == 0) - { - struct in6_addr prefix; - unsigned long int bits; - unsigned long int val; - char *endp; - - bits = 32; - __set_errno (0); - cp = strchr (val1, '/'); - if (cp != NULL) - *cp++ = '\0'; - if (inet_pton (AF_INET6, val1, &prefix)) - { - bits = 128; - if (IN6_IS_ADDR_V4MAPPED (&prefix) - && (cp == NULL - || (bits = strtoul (cp, &endp, 10)) != ULONG_MAX - || errno != ERANGE) - && *endp == '\0' - && bits >= 96 - && bits <= 128 - && ((val = strtoul (val2, &endp, 10)) != ULONG_MAX - || errno != ERANGE) - && *endp == '\0' - && val <= INT_MAX) - { - struct scopelist *newp; - new_scope: - newp = malloc (sizeof (*newp)); - if (newp == NULL) - { - free (line); - fclose (fp); - goto no_file; - } - - newp->entry.netmask = htonl (bits != 96 - ? (0xffffffff - << (128 - bits)) - : 0); - newp->entry.addr32 = (prefix.s6_addr32[3] - & newp->entry.netmask); - newp->entry.scope = val; - newp->next = scopelist; - scopelist = newp; - ++nscopelist; - scopelist_nullbits |= bits == 96; - } - } - else if (inet_pton (AF_INET, val1, &prefix.s6_addr32[3]) - && (cp == NULL - || (bits = strtoul (cp, &endp, 10)) != ULONG_MAX - || errno != ERANGE) - && *endp == '\0' - && bits <= 32 - && ((val = strtoul (val2, &endp, 10)) != ULONG_MAX - || errno != ERANGE) - && *endp == '\0' - && val <= INT_MAX) - { - bits += 96; - goto new_scope; - } - } - break; - - case 10: - if (strcmp (cmd, "precedence") == 0) - { - listp = &precedencelist; - lenp = &nprecedencelist; - nullbitsp = &precedencelist_nullbits; - goto new_elem; - } - break; - } - } - - free (line); - - fclose (fp); - - /* Create the array for the labels. */ - struct prefixentry *new_labels; - if (nlabellist > 0) - { - if (!labellist_nullbits) - ++nlabellist; - new_labels = malloc (nlabellist * sizeof (*new_labels)); - if (new_labels == NULL) - goto no_file; - - int i = nlabellist; - if (!labellist_nullbits) - { - --i; - memset (&new_labels[i].prefix, '\0', sizeof (struct in6_addr)); - new_labels[i].bits = 0; - new_labels[i].val = 1; - } - - struct prefixlist *l = labellist; - while (i-- > 0) - { - new_labels[i] = l->entry; - l = l->next; - } - free_prefixlist (labellist); - - /* Sort the entries so that the most specific ones are at - the beginning. */ - qsort (new_labels, nlabellist, sizeof (*new_labels), prefixcmp); - } - else - new_labels = (struct prefixentry *) default_labels; - - struct prefixentry *new_precedence; - if (nprecedencelist > 0) - { - if (!precedencelist_nullbits) - ++nprecedencelist; - new_precedence = malloc (nprecedencelist * sizeof (*new_precedence)); - if (new_precedence == NULL) - { - if (new_labels != default_labels) - free (new_labels); - goto no_file; - } - - int i = nprecedencelist; - if (!precedencelist_nullbits) - { - --i; - memset (&new_precedence[i].prefix, '\0', - sizeof (struct in6_addr)); - new_precedence[i].bits = 0; - new_precedence[i].val = 40; - } - - struct prefixlist *l = precedencelist; - while (i-- > 0) - { - new_precedence[i] = l->entry; - l = l->next; - } - free_prefixlist (precedencelist); - - /* Sort the entries so that the most specific ones are at - the beginning. */ - qsort (new_precedence, nprecedencelist, sizeof (*new_precedence), - prefixcmp); - } - else - new_precedence = (struct prefixentry *) default_precedence; - - struct scopeentry *new_scopes; - if (nscopelist > 0) - { - if (!scopelist_nullbits) - ++nscopelist; - new_scopes = malloc (nscopelist * sizeof (*new_scopes)); - if (new_scopes == NULL) - { - if (new_labels != default_labels) - free (new_labels); - if (new_precedence != default_precedence) - free (new_precedence); - goto no_file; - } - - int i = nscopelist; - if (!scopelist_nullbits) - { - --i; - new_scopes[i].addr32 = 0; - new_scopes[i].netmask = 0; - new_scopes[i].scope = 14; - } - - struct scopelist *l = scopelist; - while (i-- > 0) - { - new_scopes[i] = l->entry; - l = l->next; - } - free_scopelist (scopelist); - - /* Sort the entries so that the most specific ones are at - the beginning. */ - qsort (new_scopes, nscopelist, sizeof (*new_scopes), - scopecmp); - } - else - new_scopes = (struct scopeentry *) default_scopes; - - /* Now we are ready to replace the values. */ - const struct prefixentry *old = labels; - labels = new_labels; - if (old != default_labels) - free ((void *) old); - - old = precedence; - precedence = new_precedence; - if (old != default_precedence) - free ((void *) old); - - const struct scopeentry *oldscope = scopes; - scopes = new_scopes; - if (oldscope != default_scopes) - free ((void *) oldscope); - - save_gaiconf_mtime (&st); - } - else - { - no_file: - free_prefixlist (labellist); - free_prefixlist (precedencelist); - free_scopelist (scopelist); - - /* If we previously read the file but it is gone now, free the - old data and use the builtin one. Leave the reload flag - alone. */ - fini (); - } -} - - -static void -gaiconf_reload (void) -{ - struct stat64 st; - if (__xstat64 (_STAT_VER, GAICONF_FNAME, &st) != 0 - || !check_gaiconf_mtime (&st)) - gaiconf_init (); -} - - -int -getaddrinfo (const char *name, const char *service, - const struct addrinfo *hints, struct addrinfo **pai) -{ - int i = 0, last_i = 0; - int nresults = 0; - struct addrinfo *p = NULL; - struct gaih_service gaih_service, *pservice; - struct addrinfo local_hints; - - if (name != NULL && name[0] == '*' && name[1] == 0) - name = NULL; - - if (service != NULL && service[0] == '*' && service[1] == 0) - service = NULL; - - if (name == NULL && service == NULL) - return EAI_NONAME; - - if (hints == NULL) - hints = &default_hints; - - if (hints->ai_flags - & ~(AI_PASSIVE|AI_CANONNAME|AI_NUMERICHOST|AI_ADDRCONFIG|AI_V4MAPPED -#ifdef HAVE_LIBIDN - |AI_IDN|AI_CANONIDN|AI_IDN_ALLOW_UNASSIGNED - |AI_IDN_USE_STD3_ASCII_RULES -#endif - |AI_NUMERICSERV|AI_ALL)) - return EAI_BADFLAGS; - - if ((hints->ai_flags & AI_CANONNAME) && name == NULL) - return EAI_BADFLAGS; - - struct in6addrinfo *in6ai = NULL; - size_t in6ailen = 0; - bool seen_ipv4 = false; - bool seen_ipv6 = false; - bool check_pf_called = false; - - if (hints->ai_flags & AI_ADDRCONFIG) - { - /* We might need information about what interfaces are available. - Also determine whether we have IPv4 or IPv6 interfaces or both. We - cannot cache the results since new interfaces could be added at - any time. */ - __check_pf (&seen_ipv4, &seen_ipv6, &in6ai, &in6ailen); - check_pf_called = true; - - /* Now make a decision on what we return, if anything. */ - if (hints->ai_family == PF_UNSPEC && (seen_ipv4 || seen_ipv6)) - { - /* If we haven't seen both IPv4 and IPv6 interfaces we can - narrow down the search. */ - if ((! seen_ipv4 || ! seen_ipv6) && (seen_ipv4 || seen_ipv6)) - { - local_hints = *hints; - local_hints.ai_family = seen_ipv4 ? PF_INET : PF_INET6; - hints = &local_hints; - } - } - else if ((hints->ai_family == PF_INET && ! seen_ipv4) - || (hints->ai_family == PF_INET6 && ! seen_ipv6)) - { - /* We cannot possibly return a valid answer. */ - __free_in6ai (in6ai); - return EAI_NONAME; - } - } - - if (service && service[0]) - { - char *c; - gaih_service.name = service; - gaih_service.num = strtoul (gaih_service.name, &c, 10); - if (*c != '\0') - { - if (hints->ai_flags & AI_NUMERICSERV) - { - __free_in6ai (in6ai); - return EAI_NONAME; - } - - gaih_service.num = -1; - } - - pservice = &gaih_service; - } - else - pservice = NULL; - - struct addrinfo **end = &p; - - unsigned int naddrs = 0; - if (hints->ai_family == AF_UNSPEC || hints->ai_family == AF_INET - || hints->ai_family == AF_INET6) - { - struct scratch_buffer tmpbuf; - scratch_buffer_init (&tmpbuf); - last_i = gaih_inet (name, pservice, hints, end, &naddrs, &tmpbuf); - scratch_buffer_free (&tmpbuf); - - if (last_i != 0) - { - freeaddrinfo (p); - __free_in6ai (in6ai); - - return -last_i; - } - while (*end) - { - end = &((*end)->ai_next); - ++nresults; - } - } - else - { - __free_in6ai (in6ai); - return EAI_FAMILY; - } - - if (naddrs > 1) - { - /* Read the config file. */ - __libc_once_define (static, once); - __typeof (once) old_once = once; - __libc_once (once, gaiconf_init); - /* Sort results according to RFC 3484. */ - struct sort_result *results; - size_t *order; - struct addrinfo *q; - struct addrinfo *last = NULL; - char *canonname = NULL; - bool malloc_results; - size_t alloc_size = nresults * (sizeof (*results) + sizeof (size_t)); - - malloc_results - = !__libc_use_alloca (alloc_size); - if (malloc_results) - { - results = malloc (alloc_size); - if (results == NULL) - { - __free_in6ai (in6ai); - return EAI_MEMORY; - } - } - else - results = alloca (alloc_size); - order = (size_t *) (results + nresults); - - /* Now we definitely need the interface information. */ - if (! check_pf_called) - __check_pf (&seen_ipv4, &seen_ipv6, &in6ai, &in6ailen); - - /* If we have information about deprecated and temporary addresses - sort the array now. */ - if (in6ai != NULL) - qsort (in6ai, in6ailen, sizeof (*in6ai), in6aicmp); - - int fd = -1; - int af = AF_UNSPEC; - - for (i = 0, q = p; q != NULL; ++i, last = q, q = q->ai_next) - { - results[i].dest_addr = q; - results[i].native = -1; - order[i] = i; - - /* If we just looked up the address for a different - protocol, reuse the result. */ - if (last != NULL && last->ai_addrlen == q->ai_addrlen - && memcmp (last->ai_addr, q->ai_addr, q->ai_addrlen) == 0) - { - memcpy (&results[i].source_addr, &results[i - 1].source_addr, - results[i - 1].source_addr_len); - results[i].source_addr_len = results[i - 1].source_addr_len; - results[i].got_source_addr = results[i - 1].got_source_addr; - results[i].source_addr_flags = results[i - 1].source_addr_flags; - results[i].prefixlen = results[i - 1].prefixlen; - results[i].index = results[i - 1].index; - } - else - { - results[i].got_source_addr = false; - results[i].source_addr_flags = 0; - results[i].prefixlen = 0; - results[i].index = 0xffffffffu; - - /* We overwrite the type with SOCK_DGRAM since we do not - want connect() to connect to the other side. If we - cannot determine the source address remember this - fact. */ - if (fd == -1 || (af == AF_INET && q->ai_family == AF_INET6)) - { - if (fd != -1) - close_retry: - close_not_cancel_no_status (fd); - af = q->ai_family; - fd = __socket (af, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_IP); - } - else - { - /* Reset the connection. */ - struct sockaddr sa = { .sa_family = AF_UNSPEC }; - __connect (fd, &sa, sizeof (sa)); - } - - socklen_t sl = sizeof (results[i].source_addr); - if (fd != -1 - && __connect (fd, q->ai_addr, q->ai_addrlen) == 0 - && __getsockname (fd, - (struct sockaddr *) &results[i].source_addr, - &sl) == 0) - { - results[i].source_addr_len = sl; - results[i].got_source_addr = true; - - if (in6ai != NULL) - { - /* See whether the source address is on the list of - deprecated or temporary addresses. */ - struct in6addrinfo tmp; - - if (q->ai_family == AF_INET && af == AF_INET) - { - struct sockaddr_in *sinp - = (struct sockaddr_in *) &results[i].source_addr; - tmp.addr[0] = 0; - tmp.addr[1] = 0; - tmp.addr[2] = htonl (0xffff); - /* Special case for lo interface, the source address - being possibly different than the interface - address. */ - if ((ntohl(sinp->sin_addr.s_addr) & 0xff000000) - == 0x7f000000) - tmp.addr[3] = htonl(0x7f000001); - else - tmp.addr[3] = sinp->sin_addr.s_addr; - } - else - { - struct sockaddr_in6 *sin6p - = (struct sockaddr_in6 *) &results[i].source_addr; - memcpy (tmp.addr, &sin6p->sin6_addr, IN6ADDRSZ); - } - - struct in6addrinfo *found - = bsearch (&tmp, in6ai, in6ailen, sizeof (*in6ai), - in6aicmp); - if (found != NULL) - { - results[i].source_addr_flags = found->flags; - results[i].prefixlen = found->prefixlen; - results[i].index = found->index; - } - } - - if (q->ai_family == AF_INET && af == AF_INET6) - { - /* We have to convert the address. The socket is - IPv6 and the request is for IPv4. */ - struct sockaddr_in6 *sin6 - = (struct sockaddr_in6 *) &results[i].source_addr; - struct sockaddr_in *sin - = (struct sockaddr_in *) &results[i].source_addr; - assert (IN6_IS_ADDR_V4MAPPED (sin6->sin6_addr.s6_addr32)); - sin->sin_family = AF_INET; - /* We do not have to initialize sin_port since this - fields has the same position and size in the IPv6 - structure. */ - assert (offsetof (struct sockaddr_in, sin_port) - == offsetof (struct sockaddr_in6, sin6_port)); - assert (sizeof (sin->sin_port) - == sizeof (sin6->sin6_port)); - memcpy (&sin->sin_addr, - &sin6->sin6_addr.s6_addr32[3], INADDRSZ); - results[i].source_addr_len = sizeof (struct sockaddr_in); - } - } - else if (errno == EAFNOSUPPORT && af == AF_INET6 - && q->ai_family == AF_INET) - /* This could mean IPv6 sockets are IPv6-only. */ - goto close_retry; - else - /* Just make sure that if we have to process the same - address again we do not copy any memory. */ - results[i].source_addr_len = 0; - } - - /* Remember the canonical name. */ - if (q->ai_canonname != NULL) - { - assert (canonname == NULL); - canonname = q->ai_canonname; - q->ai_canonname = NULL; - } - } - - if (fd != -1) - close_not_cancel_no_status (fd); - - /* We got all the source addresses we can get, now sort using - the information. */ - struct sort_result_combo src - = { .results = results, .nresults = nresults }; - if (__glibc_unlikely (gaiconf_reload_flag_ever_set)) - { - __libc_lock_define_initialized (static, lock); - - __libc_lock_lock (lock); - if (__libc_once_get (old_once) && gaiconf_reload_flag) - gaiconf_reload (); - __qsort_r (order, nresults, sizeof (order[0]), rfc3484_sort, &src); - __libc_lock_unlock (lock); - } - else - __qsort_r (order, nresults, sizeof (order[0]), rfc3484_sort, &src); - - /* Queue the results up as they come out of sorting. */ - q = p = results[order[0]].dest_addr; - for (i = 1; i < nresults; ++i) - q = q->ai_next = results[order[i]].dest_addr; - q->ai_next = NULL; - - /* Fill in the canonical name into the new first entry. */ - p->ai_canonname = canonname; - - if (malloc_results) - free (results); - } - - __free_in6ai (in6ai); - - if (p) - { - *pai = p; - return 0; - } - - return last_i ? -last_i : EAI_NONAME; -} -libc_hidden_def (getaddrinfo) - -nss_interface_function (getaddrinfo) - -void -freeaddrinfo (struct addrinfo *ai) -{ - struct addrinfo *p; - - while (ai != NULL) - { - p = ai; - ai = ai->ai_next; - free (p->ai_canonname); - free (p); - } -} -libc_hidden_def (freeaddrinfo) diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c deleted file mode 100644 index eb1706aa5c..0000000000 --- a/sysdeps/posix/getcwd.c +++ /dev/null @@ -1,535 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Wants: - AC_STDC_HEADERS - AC_DIR_HEADER - AC_UNISTD_H - AC_MEMORY_H - AC_CONST - AC_ALLOCA - */ - -/* AIX requires this to be the first thing in the file. */ -#if defined _AIX && !defined __GNUC__ - #pragma alloca -#endif - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include -#include -#include - -#ifdef STDC_HEADERS -# include -#endif - -#if !defined __GNU_LIBRARY__ && !defined STDC_HEADERS -extern int errno; -#endif -#ifndef __set_errno -# define __set_errno(val) errno = (val) -#endif - -#ifndef NULL -# define NULL 0 -#endif - -#if defined USGr3 && !defined DIRENT -# define DIRENT -#endif /* USGr3 */ -#if defined Xenix && !defined SYSNDIR -# define SYSNDIR -#endif /* Xenix */ - -#if defined POSIX || defined DIRENT || defined __GNU_LIBRARY__ -# include -# ifndef __GNU_LIBRARY__ -# define D_NAMLEN(d) strlen((d)->d_name) -# else -# define HAVE_D_NAMLEN -# define D_NAMLEN(d) ((d)->d_namlen) -# endif -#else /* not POSIX or DIRENT */ -# define dirent direct -# define D_NAMLEN(d) ((d)->d_namlen) -# define HAVE_D_NAMLEN -# if defined USG && !defined sgi -# if defined SYSNDIR -# include -# else /* Not SYSNDIR */ -# include "ndir.h" -# endif /* SYSNDIR */ -# else /* not USG */ -# include -# endif /* USG */ -#endif /* POSIX or DIRENT or __GNU_LIBRARY__ */ - -#if defined HAVE_UNISTD_H || defined __GNU_LIBRARY__ -# include -#endif - -#if defined STDC_HEADERS || defined __GNU_LIBRARY__ || defined POSIX -# include -# include -# define ANSI_STRING -#else /* No standard headers. */ - -# ifdef USG - -# include -# ifdef NEED_MEMORY_H -# include -# endif -# define ANSI_STRING - -# else /* Not USG. */ - -# ifdef NeXT - -# include - -# else /* Not NeXT. */ - -# include - -# ifndef bcmp -extern int bcmp (); -# endif -# ifndef bzero -extern void bzero (); -# endif -# ifndef bcopy -extern void bcopy (); -# endif - -# endif /* NeXT. */ - -# endif /* USG. */ - -extern char *malloc (), *realloc (); -extern void free (); - -#endif /* Standard headers. */ - -#ifndef ANSI_STRING -# define memcpy(d, s, n) bcopy((s), (d), (n)) -# define memmove memcpy -#endif /* Not ANSI_STRING. */ - -#ifndef MAX -# define MAX(a, b) ((a) < (b) ? (b) : (a)) -#endif - -#ifdef _LIBC -# ifndef mempcpy -# define mempcpy __mempcpy -# endif -# define HAVE_MEMPCPY 1 -#endif - -#if !defined __alloca && !defined __GNU_LIBRARY__ - -# ifdef __GNUC__ -# undef alloca -# define alloca(n) __builtin_alloca (n) -# else /* Not GCC. */ -# if defined sparc || defined HAVE_ALLOCA_H -# include -# else /* Not sparc or HAVE_ALLOCA_H. */ -# ifndef _AIX -extern char *alloca (); -# endif /* Not _AIX. */ -# endif /* sparc or HAVE_ALLOCA_H. */ -# endif /* GCC. */ - -# define __alloca alloca - -#endif - -#if defined HAVE_LIMITS_H || defined STDC_HEADERS || defined __GNU_LIBRARY__ -# include -#else -# include -#endif - -#if defined _LIBC -# include -# include -#else -# define openat64_not_cancel_3(dfd, name, mode) openat64 (dfd, name, mode) -# define close_not_cancel_no_status(fd) close (fd) -#endif - -#ifndef PATH_MAX -# ifdef MAXPATHLEN -# define PATH_MAX MAXPATHLEN -# else -# define PATH_MAX 1024 -# endif -#endif - -#if !defined STDC_HEADERS && !defined __GNU_LIBRARY__ -# undef size_t -# define size_t unsigned int -#endif - -#ifndef __GNU_LIBRARY__ -# define __lstat64 stat64 -#endif - -#ifndef _LIBC -# define __rewinddir rewinddir -#endif - -#ifndef _LIBC -# define __getcwd getcwd -#endif - -#ifndef GETCWD_RETURN_TYPE -# define GETCWD_RETURN_TYPE char * -#endif - -#ifdef __ASSUME_ATFCTS -# define __have_atfcts 1 -#elif IS_IN (rtld) -static int __rtld_have_atfcts; -# define __have_atfcts __rtld_have_atfcts -#endif - -/* Get the pathname of the current working directory, and put it in SIZE - bytes of BUF. Returns NULL if the directory couldn't be determined or - SIZE was too small. If successful, returns BUF. In GNU, if BUF is - NULL, an array is allocated with `malloc'; the array is SIZE bytes long, - unless SIZE == 0, in which case it is as big as necessary. */ - -GETCWD_RETURN_TYPE -__getcwd (char *buf, size_t size) -{ -#ifndef __ASSUME_ATFCTS - static const char dots[] - = "../../../../../../../../../../../../../../../../../../../../../../../\ -../../../../../../../../../../../../../../../../../../../../../../../../../../\ -../../../../../../../../../../../../../../../../../../../../../../../../../.."; - const char *dotp = &dots[sizeof (dots)]; - const char *dotlist = dots; - size_t dotsize = sizeof (dots) - 1; -#endif - int prev_errno = errno; - DIR *dirstream = NULL; - bool fd_needs_closing = false; - int fd = AT_FDCWD; - - char *path; -#ifndef NO_ALLOCATION - size_t allocated = size; - if (size == 0) - { - if (buf != NULL) - { - __set_errno (EINVAL); - return NULL; - } - - allocated = PATH_MAX + 1; - } - - if (buf == NULL) - { - path = malloc (allocated); - if (path == NULL) - return NULL; - } - else -#else -# define allocated size -#endif - path = buf; - - char *pathp = path + allocated; - *--pathp = '\0'; - - struct stat64 st; - if (__lstat64 (".", &st) < 0) - goto lose; - dev_t thisdev = st.st_dev; - ino_t thisino = st.st_ino; - - if (__lstat64 ("/", &st) < 0) - goto lose; - dev_t rootdev = st.st_dev; - ino_t rootino = st.st_ino; - - while (!(thisdev == rootdev && thisino == rootino)) - { - if (__have_atfcts >= 0) - fd = openat64_not_cancel_3 (fd, "..", O_RDONLY | O_CLOEXEC); - else - fd = -1; - if (fd >= 0) - { - fd_needs_closing = true; - if (__fstat64 (fd, &st) < 0) - goto lose; - } -#ifndef __ASSUME_ATFCTS - else if (errno == ENOSYS) - { - __have_atfcts = -1; - - /* Look at the parent directory. */ - if (dotp == dotlist) - { -# ifdef NO_ALLOCATION - __set_errno (ENOMEM); - goto lose; -# else - /* My, what a deep directory tree you have, Grandma. */ - char *new; - if (dotlist == dots) - { - new = malloc (dotsize * 2 + 1); - if (new == NULL) - goto lose; -# ifdef HAVE_MEMPCPY - dotp = mempcpy (new, dots, dotsize); -# else - memcpy (new, dots, dotsize); - dotp = &new[dotsize]; -# endif - } - else - { - new = realloc ((__ptr_t) dotlist, dotsize * 2 + 1); - if (new == NULL) - goto lose; - dotp = &new[dotsize]; - } -# ifdef HAVE_MEMPCPY - *((char *) mempcpy ((char *) dotp, new, dotsize)) = '\0'; - dotsize *= 2; -# else - memcpy ((char *) dotp, new, dotsize); - dotsize *= 2; - new[dotsize] = '\0'; -# endif - dotlist = new; -# endif - } - - dotp -= 3; - - /* Figure out if this directory is a mount point. */ - if (__lstat64 (dotp, &st) < 0) - goto lose; - } -#endif - else - goto lose; - - if (dirstream && __closedir (dirstream) != 0) - { - dirstream = NULL; - goto lose; - } - - dev_t dotdev = st.st_dev; - ino_t dotino = st.st_ino; - bool mount_point = dotdev != thisdev; - - /* Search for the last directory. */ - if (__have_atfcts >= 0) - dirstream = __fdopendir (fd); -#ifndef __ASSUME_ATFCTS - else - dirstream = __opendir (dotp); -#endif - if (dirstream == NULL) - goto lose; - fd_needs_closing = false; - - struct dirent *d; - bool use_d_ino = true; - while (1) - { - /* Clear errno to distinguish EOF from error if readdir returns - NULL. */ - __set_errno (0); - d = __readdir (dirstream); - if (d == NULL) - { - if (errno == 0) - { - /* When we've iterated through all directory entries - without finding one with a matching d_ino, rewind the - stream and consider each name again, but this time, using - lstat64. This is necessary in a chroot on at least one - system. */ - if (use_d_ino) - { - use_d_ino = false; - __rewinddir (dirstream); - continue; - } - - /* EOF on dirstream, which means that the current directory - has been removed. */ - __set_errno (ENOENT); - } - goto lose; - } - -#ifdef _DIRENT_HAVE_D_TYPE - if (d->d_type != DT_DIR && d->d_type != DT_UNKNOWN) - continue; -#endif - if (d->d_name[0] == '.' - && (d->d_name[1] == '\0' - || (d->d_name[1] == '.' && d->d_name[2] == '\0'))) - continue; - if (use_d_ino && !mount_point && (ino_t) d->d_ino != thisino) - continue; - - if (__have_atfcts >= 0) - { - /* We don't fail here if we cannot stat64() a directory entry. - This can happen when (network) filesystems fail. If this - entry is in fact the one we are looking for we will find - out soon as we reach the end of the directory without - having found anything. */ - if (__fstatat64 (fd, d->d_name, &st, AT_SYMLINK_NOFOLLOW) < 0) - continue; - } -#ifndef __ASSUME_ATFCTS - else - { - char name[dotlist + dotsize - dotp + 1 + _D_ALLOC_NAMLEN (d)]; -# ifdef HAVE_MEMPCPY - char *tmp = mempcpy (name, dotp, dotlist + dotsize - dotp); - *tmp++ = '/'; - strcpy (tmp, d->d_name); -# else - memcpy (name, dotp, dotlist + dotsize - dotp); - name[dotlist + dotsize - dotp] = '/'; - strcpy (&name[dotlist + dotsize - dotp + 1], d->d_name); -# endif - /* We don't fail here if we cannot stat64() a directory entry. - This can happen when (network) filesystems fail. If this - entry is in fact the one we are looking for we will find - out soon as we reach the end of the directory without - having found anything. */ - if (__lstat64 (name, &st) < 0) - continue; - } -#endif - if (S_ISDIR (st.st_mode) - && st.st_dev == thisdev && st.st_ino == thisino) - break; - } - - size_t namlen = _D_EXACT_NAMLEN (d); - - if ((size_t) (pathp - path) <= namlen) - { -#ifndef NO_ALLOCATION - if (size == 0) - { - size_t oldsize = allocated; - - allocated = 2 * MAX (allocated, namlen); - char *tmp = realloc (path, allocated); - if (tmp == NULL) - goto lose; - - /* Move current contents up to the end of the buffer. - This is guaranteed to be non-overlapping. */ - pathp = memcpy (tmp + allocated - (path + oldsize - pathp), - tmp + (pathp - path), - path + oldsize - pathp); - path = tmp; - } - else -#endif - { - __set_errno (ERANGE); - goto lose; - } - } - pathp -= namlen; - (void) memcpy (pathp, d->d_name, namlen); - *--pathp = '/'; - - thisdev = dotdev; - thisino = dotino; - } - - if (dirstream != NULL && __closedir (dirstream) != 0) - { - dirstream = NULL; - goto lose; - } - - if (pathp == &path[allocated - 1]) - *--pathp = '/'; - -#ifndef __ASSUME_ATFCTS - if (dotlist != dots) - free ((__ptr_t) dotlist); -#endif - - size_t used = path + allocated - pathp; - memmove (path, pathp, used); - - if (size == 0) - /* Ensure that the buffer is only as large as necessary. */ - buf = realloc (path, used); - - if (buf == NULL) - /* Either buf was NULL all along, or `realloc' failed but - we still have the original string. */ - buf = path; - - /* Restore errno on successful return. */ - __set_errno (prev_errno); - - return buf; - - lose:; - int save_errno = errno; -#ifndef __ASSUME_ATFCTS - if (dotlist != dots) - free ((__ptr_t) dotlist); -#endif - if (dirstream != NULL) - __closedir (dirstream); - if (fd_needs_closing) - close_not_cancel_no_status (fd); -#ifndef NO_ALLOCATION - if (buf == NULL) - free (path); -#endif - __set_errno (save_errno); - return NULL; -} - -#if defined _LIBC && !defined __getcwd -weak_alias (__getcwd, getcwd) -#endif diff --git a/sysdeps/posix/getdtsz.c b/sysdeps/posix/getdtsz.c deleted file mode 100644 index 0f468cf498..0000000000 --- a/sysdeps/posix/getdtsz.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Return the maximum number of file descriptors - the current process could possibly have. */ -int -__getdtablesize (void) -{ - struct rlimit ru; - - /* This should even work if `getrlimit' is not implemented. POSIX.1 - does not define this function but we will generate a stub which - returns -1. */ - return __getrlimit (RLIMIT_NOFILE, &ru) < 0 ? OPEN_MAX : ru.rlim_cur; -} - -weak_alias (__getdtablesize, getdtablesize) diff --git a/sysdeps/posix/gethostname.c b/sysdeps/posix/gethostname.c deleted file mode 100644 index 03a5d3f409..0000000000 --- a/sysdeps/posix/gethostname.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Put the name of the current host in no more than LEN bytes of NAME. - The result is null-terminated if LEN is large enough for the full - name and the terminator. */ -int -__gethostname (char *name, size_t len) -{ - struct utsname buf; - size_t node_len; - - if (uname (&buf)) - return -1; - - node_len = strlen (buf.nodename) + 1; - memcpy (name, buf.nodename, len < node_len ? len : node_len); - - if (node_len > len) - { - __set_errno (ENAMETOOLONG); - return -1; - } - return 0; -} - -weak_alias (__gethostname, gethostname) diff --git a/sysdeps/posix/getpagesize.c b/sysdeps/posix/getpagesize.c deleted file mode 100644 index de7b52e284..0000000000 --- a/sysdeps/posix/getpagesize.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe (brendan@cygnus.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Return the system page size. */ -int -__getpagesize (void) -{ - return __sysconf (_SC_PAGESIZE); -} -libc_hidden_def (__getpagesize) -weak_alias (__getpagesize, getpagesize) diff --git a/sysdeps/posix/gettimeofday.c b/sysdeps/posix/gettimeofday.c deleted file mode 100644 index 41a8217fd1..0000000000 --- a/sysdeps/posix/gettimeofday.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Get the current time of day and timezone information, - putting it into *TV and *TZ. If TZ is NULL, *TZ is not filled. - Returns 0 on success, -1 on errors. */ -int -__gettimeofday (struct timeval *tv, struct timezone *tz) -{ - if (tv == NULL) - { - __set_errno (EINVAL); - return -1; - } - - tv->tv_sec = (long int) time ((time_t *) NULL); - tv->tv_usec = 0L; - - if (tz != NULL) - { - const time_t timer = tv->tv_sec; - struct tm tm; - const struct tm *tmp; - - const long int save_timezone = __timezone; - const long int save_daylight = __daylight; - char *save_tzname[2]; - save_tzname[0] = __tzname[0]; - save_tzname[1] = __tzname[1]; - - tmp = localtime_r (&timer, &tm); - - tz->tz_minuteswest = __timezone / 60; - tz->tz_dsttime = __daylight; - - __timezone = save_timezone; - __daylight = save_daylight; - __tzname[0] = save_tzname[0]; - __tzname[1] = save_tzname[1]; - - if (tmp == NULL) - return -1; - } - - return 0; -} -libc_hidden_def (__gettimeofday) -weak_alias (__gettimeofday, gettimeofday) -libc_hidden_weak (gettimeofday) diff --git a/sysdeps/posix/isatty.c b/sysdeps/posix/isatty.c deleted file mode 100644 index 150a0134d7..0000000000 --- a/sysdeps/posix/isatty.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Return 1 if FD is a terminal, 0 if not. */ -int -__isatty (int fd) -{ - struct termios term; - - return __tcgetattr (fd, &term) == 0; -} - -weak_alias (__isatty, isatty) diff --git a/sysdeps/posix/isfdtype.c b/sysdeps/posix/isfdtype.c deleted file mode 100644 index 4a825e7e5d..0000000000 --- a/sysdeps/posix/isfdtype.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Determine whether descriptor has given property. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -isfdtype (int fildes, int fdtype) -{ - struct stat64 st; - int result; - - { - int save_error = errno; - result = fstat64 (fildes, &st); - __set_errno (save_error); - } - - return result ?: (st.st_mode & S_IFMT) == (mode_t) fdtype; -} diff --git a/sysdeps/posix/killpg.c b/sysdeps/posix/killpg.c deleted file mode 100644 index 5b9df19c76..0000000000 --- a/sysdeps/posix/killpg.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -/* Send SIG to all processes in process group PGRP. - If PGRP is zero, send SIG to all processes in - the current process's process group. */ -int -killpg (__pid_t pgrp, int sig) -{ - if (pgrp < 0) - { - __set_errno (EINVAL); - return -1; - } - - return __kill (- pgrp, sig); -} diff --git a/sysdeps/posix/libc_fatal.c b/sysdeps/posix/libc_fatal.c deleted file mode 100644 index b261963679..0000000000 --- a/sysdeps/posix/libc_fatal.c +++ /dev/null @@ -1,187 +0,0 @@ -/* Catastrophic failure reports. Generic POSIX.1 version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef FATAL_PREPARE_INCLUDE -#include FATAL_PREPARE_INCLUDE -#endif - -#ifndef WRITEV_FOR_FATAL -# define WRITEV_FOR_FATAL writev_for_fatal -static bool -writev_for_fatal (int fd, const struct iovec *iov, size_t niov, size_t total) -{ - return TEMP_FAILURE_RETRY (__writev (fd, iov, niov)) == total; -} -#endif - -#ifndef BEFORE_ABORT -# define BEFORE_ABORT before_abort -static void -before_abort (int do_abort __attribute__ ((unused)), - bool written __attribute__ ((unused)), - int fd __attribute__ ((unused))) -{ -} -#endif - -struct str_list -{ - const char *str; - size_t len; - struct str_list *next; -}; - -/* Abort with an error message. */ -void -__libc_message (int do_abort, const char *fmt, ...) -{ - va_list ap; - int fd = -1; - - va_start (ap, fmt); - -#ifdef FATAL_PREPARE - FATAL_PREPARE; -#endif - - /* Open a descriptor for /dev/tty unless the user explicitly - requests errors on standard error. */ - const char *on_2 = __libc_secure_getenv ("LIBC_FATAL_STDERR_"); - if (on_2 == NULL || *on_2 == '\0') - fd = open_not_cancel_2 (_PATH_TTY, O_RDWR | O_NOCTTY | O_NDELAY); - - if (fd == -1) - fd = STDERR_FILENO; - - struct str_list *list = NULL; - int nlist = 0; - - const char *cp = fmt; - while (*cp != '\0') - { - /* Find the next "%s" or the end of the string. */ - const char *next = cp; - while (next[0] != '%' || next[1] != 's') - { - next = __strchrnul (next + 1, '%'); - - if (next[0] == '\0') - break; - } - - /* Determine what to print. */ - const char *str; - size_t len; - if (cp[0] == '%' && cp[1] == 's') - { - str = va_arg (ap, const char *); - len = strlen (str); - cp += 2; - } - else - { - str = cp; - len = next - cp; - cp = next; - } - - struct str_list *newp = alloca (sizeof (struct str_list)); - newp->str = str; - newp->len = len; - newp->next = list; - list = newp; - ++nlist; - } - - bool written = false; - if (nlist > 0) - { - struct iovec *iov = alloca (nlist * sizeof (struct iovec)); - ssize_t total = 0; - - for (int cnt = nlist - 1; cnt >= 0; --cnt) - { - iov[cnt].iov_base = (char *) list->str; - iov[cnt].iov_len = list->len; - total += list->len; - list = list->next; - } - - written = WRITEV_FOR_FATAL (fd, iov, nlist, total); - - if (do_abort) - { - total = ((total + 1 + GLRO(dl_pagesize) - 1) - & ~(GLRO(dl_pagesize) - 1)); - struct abort_msg_s *buf = __mmap (NULL, total, - PROT_READ | PROT_WRITE, - MAP_ANON | MAP_PRIVATE, -1, 0); - if (__glibc_likely (buf != MAP_FAILED)) - { - buf->size = total; - char *wp = buf->msg; - for (int cnt = 0; cnt < nlist; ++cnt) - wp = mempcpy (wp, iov[cnt].iov_base, iov[cnt].iov_len); - *wp = '\0'; - - /* We have to free the old buffer since the application might - catch the SIGABRT signal. */ - struct abort_msg_s *old = atomic_exchange_acq (&__abort_msg, - buf); - if (old != NULL) - __munmap (old, old->size); - } - } - } - - va_end (ap); - - if (do_abort) - { - BEFORE_ABORT (do_abort, written, fd); - - /* Kill the application. */ - abort (); - } -} - - -void -__libc_fatal (const char *message) -{ - /* The loop is added only to keep gcc happy. */ - while (1) - __libc_message (1, "%s", message); -} -libc_hidden_def (__libc_fatal) diff --git a/sysdeps/posix/mkfifo.c b/sysdeps/posix/mkfifo.c deleted file mode 100644 index 4d7fa58675..0000000000 --- a/sysdeps/posix/mkfifo.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Create a named pipe (FIFO) named PATH with protections MODE. */ -int -mkfifo (const char *path, mode_t mode) -{ - dev_t dev = 0; - return __xmknod (_MKNOD_VER, path, mode | S_IFIFO, &dev); -} diff --git a/sysdeps/posix/mkfifoat.c b/sysdeps/posix/mkfifoat.c deleted file mode 100644 index 598c1e25ca..0000000000 --- a/sysdeps/posix/mkfifoat.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - -/* Create a new FIFO with permission bits MODE. But interpret - relative PATH names relative to the directory associated with FD. */ -int -mkfifoat (int fd, const char *file, mode_t mode) -{ - dev_t dev = 0; - return __xmknodat (_MKNOD_VER, fd, file, mode | S_IFIFO, &dev); -} diff --git a/sysdeps/posix/nice.c b/sysdeps/posix/nice.c deleted file mode 100644 index d13176556e..0000000000 --- a/sysdeps/posix/nice.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Increment the scheduling priority of the calling process by INCR. - The superuser may use a negative INCR to decrement the priority. */ -int -nice (int incr) -{ - int save; - int prio; - int result; - - /* -1 is a valid priority, so we use errno to check for an error. */ - save = errno; - __set_errno (0); - prio = __getpriority (PRIO_PROCESS, 0); - if (prio == -1) - { - if (errno != 0) - return -1; - } - - result = __setpriority (PRIO_PROCESS, 0, prio + incr); - if (result == -1) - { - if (errno == EACCES) - __set_errno (EPERM); - return -1; - } - - __set_errno (save); - return __getpriority (PRIO_PROCESS, 0); -} diff --git a/sysdeps/posix/open64.c b/sysdeps/posix/open64.c deleted file mode 100644 index dd1b4d61fe..0000000000 --- a/sysdeps/posix/open64.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Open FILE with access OFLAG. If O_CREAT or O_TMPFILE is in OFLAG, - a third argument is the file protection. */ -int -__libc_open64 (const char *file, int oflag, ...) -{ - int mode = 0; - - if (__OPEN_NEEDS_MODE (oflag)) - { - va_list arg; - va_start (arg, oflag); - mode = va_arg (arg, int); - va_end (arg); - } - - if (SINGLE_THREAD_P) - return __libc_open (file, oflag | O_LARGEFILE, mode); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = __libc_open (file, oflag | O_LARGEFILE, mode); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} -weak_alias (__libc_open64, __open64) -libc_hidden_weak (__open64) -weak_alias (__libc_open64, open64) diff --git a/sysdeps/posix/opendir.c b/sysdeps/posix/opendir.c deleted file mode 100644 index 909aa61884..0000000000 --- a/sysdeps/posix/opendir.c +++ /dev/null @@ -1,248 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -/* The st_blksize value of the directory is used as a hint for the - size of the buffer which receives struct dirent values from the - kernel. st_blksize is limited to MAX_DIR_BUFFER_SIZE, in case the - file system provides a bogus value. */ -#define MAX_DIR_BUFFER_SIZE 1048576U - -/* opendir() must not accidentally open something other than a directory. - Some OS's have kernel support for that, some don't. In the worst - case we have to stat() before the open() AND fstat() after. - - We have to test at runtime for kernel support since libc may have - been compiled with different headers to the kernel it's running on. - This test can't be done reliably in the general case. We'll use - /dev/null, which if it's not a device lots of stuff will break, as - a guinea pig. It may be missing in chroot environments, so we - make sure to fail safe. */ -#ifdef O_DIRECTORY -# ifdef O_DIRECTORY_WORKS -# define o_directory_works 1 -# define tryopen_o_directory() while (1) /* This must not be called. */ -# else -static int o_directory_works; - -static void -tryopen_o_directory (void) -{ - int serrno = errno; - int x = open_not_cancel_2 ("/dev/null", O_RDONLY|O_NDELAY|O_DIRECTORY); - - if (x >= 0) - { - close_not_cancel_no_status (x); - o_directory_works = -1; - } - else if (errno != ENOTDIR) - o_directory_works = -1; - else - o_directory_works = 1; - - __set_errno (serrno); -} -# endif -# define EXTRA_FLAGS O_DIRECTORY -#else -# define EXTRA_FLAGS 0 -#endif - -enum { - opendir_oflags = O_RDONLY|O_NDELAY|EXTRA_FLAGS|O_LARGEFILE|O_CLOEXEC -}; - -static bool -invalid_name (const char *name) -{ - if (__glibc_unlikely (name[0] == '\0')) - { - /* POSIX.1-1990 says an empty name gets ENOENT; - but `open' might like it fine. */ - __set_errno (ENOENT); - return true; - } - return false; -} - - -static bool -need_isdir_precheck (void) -{ -#ifdef O_DIRECTORY - /* Test whether O_DIRECTORY works. */ - if (o_directory_works == 0) - tryopen_o_directory (); - - /* We can skip the expensive `stat' call if O_DIRECTORY works. */ - return o_directory_works < 0; -#endif - return true; -} - -static DIR * -opendir_tail (int fd) -{ - if (__glibc_unlikely (fd < 0)) - return NULL; - - /* Now make sure this really is a directory and nothing changed since the - `stat' call. The S_ISDIR check is superfluous if O_DIRECTORY works, - but it's cheap and we need the stat call for st_blksize anyway. */ - struct stat64 statbuf; - if (__glibc_unlikely (__fxstat64 (_STAT_VER, fd, &statbuf) < 0)) - goto lose; - if (__glibc_unlikely (! S_ISDIR (statbuf.st_mode))) - { - __set_errno (ENOTDIR); - lose: - close_not_cancel_no_status (fd); - return NULL; - } - - return __alloc_dir (fd, true, 0, &statbuf); -} - - -#if IS_IN (libc) -DIR * -internal_function -__opendirat (int dfd, const char *name) -{ - if (__glibc_unlikely (invalid_name (name))) - return NULL; - - if (need_isdir_precheck ()) - { - /* We first have to check whether the name is for a directory. We - cannot do this after the open() call since the open/close operation - performed on, say, a tape device might have undesirable effects. */ - struct stat64 statbuf; - if (__glibc_unlikely (__fxstatat64 (_STAT_VER, dfd, name, - &statbuf, 0) < 0)) - return NULL; - if (__glibc_unlikely (! S_ISDIR (statbuf.st_mode))) - { - __set_errno (ENOTDIR); - return NULL; - } - } - - return opendir_tail (openat_not_cancel_3 (dfd, name, opendir_oflags)); -} -#endif - - -/* Open a directory stream on NAME. */ -DIR * -__opendir (const char *name) -{ - if (__glibc_unlikely (invalid_name (name))) - return NULL; - - if (need_isdir_precheck ()) - { - /* We first have to check whether the name is for a directory. We - cannot do this after the open() call since the open/close operation - performed on, say, a tape device might have undesirable effects. */ - struct stat64 statbuf; - if (__glibc_unlikely (__xstat64 (_STAT_VER, name, &statbuf) < 0)) - return NULL; - if (__glibc_unlikely (! S_ISDIR (statbuf.st_mode))) - { - __set_errno (ENOTDIR); - return NULL; - } - } - - return opendir_tail (open_not_cancel_2 (name, opendir_oflags)); -} -weak_alias (__opendir, opendir) - -DIR * -internal_function -__alloc_dir (int fd, bool close_fd, int flags, const struct stat64 *statp) -{ - /* We have to set the close-on-exit flag if the user provided the - file descriptor. */ - if (!close_fd - && __builtin_expect (__fcntl (fd, F_SETFD, FD_CLOEXEC), 0) < 0) - goto lose; - - const size_t default_allocation = (4 * BUFSIZ < sizeof (struct dirent64) - ? sizeof (struct dirent64) : 4 * BUFSIZ); - const size_t small_allocation = (BUFSIZ < sizeof (struct dirent64) - ? sizeof (struct dirent64) : BUFSIZ); - size_t allocation = default_allocation; -#ifdef _STATBUF_ST_BLKSIZE - /* Increase allocation if requested, but not if the value appears to - be bogus. */ - if (statp != NULL) - allocation = MIN (MAX ((size_t) statp->st_blksize, default_allocation), - MAX_DIR_BUFFER_SIZE); -#endif - - DIR *dirp = (DIR *) malloc (sizeof (DIR) + allocation); - if (dirp == NULL) - { - allocation = small_allocation; - dirp = (DIR *) malloc (sizeof (DIR) + allocation); - - if (dirp == NULL) - lose: - { - if (close_fd) - { - int save_errno = errno; - close_not_cancel_no_status (fd); - __set_errno (save_errno); - } - return NULL; - } - } - - dirp->fd = fd; -#if IS_IN (libc) - __libc_lock_init (dirp->lock); -#endif - dirp->allocation = allocation; - dirp->size = 0; - dirp->offset = 0; - dirp->filepos = 0; - dirp->errcode = 0; - - return dirp; -} diff --git a/sysdeps/posix/pathconf.c b/sysdeps/posix/pathconf.c deleted file mode 100644 index 46cc35629e..0000000000 --- a/sysdeps/posix/pathconf.c +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -/* Get file-specific information about PATH. */ -long int -__pathconf (const char *path, int name) -{ - if (path[0] == '\0') - { - __set_errno (ENOENT); - return -1; - } - - switch (name) - { - default: - __set_errno (EINVAL); - return -1; - - case _PC_LINK_MAX: -#ifdef LINK_MAX - return LINK_MAX; -#else - return -1; -#endif - - case _PC_MAX_CANON: -#ifdef MAX_CANON - return MAX_CANON; -#else - return -1; -#endif - - case _PC_MAX_INPUT: -#ifdef MAX_INPUT - return MAX_INPUT; -#else - return -1; -#endif - - case _PC_NAME_MAX: -#ifdef NAME_MAX - { - struct statvfs64 sv; - int save_errno = errno; - - if (__statvfs64 (path, &sv) < 0) - { - if (errno == ENOSYS) - { - errno = save_errno; - return NAME_MAX; - } - return -1; - } - else - { - return sv.f_namemax; - } - } -#else - return -1; -#endif - - case _PC_PATH_MAX: -#ifdef PATH_MAX - return PATH_MAX; -#else - return -1; -#endif - - case _PC_PIPE_BUF: -#ifdef PIPE_BUF - return PIPE_BUF; -#else - return -1; -#endif - - case _PC_CHOWN_RESTRICTED: -#ifdef _POSIX_CHOWN_RESTRICTED - return _POSIX_CHOWN_RESTRICTED; -#else - return -1; -#endif - - case _PC_NO_TRUNC: -#ifdef _POSIX_NO_TRUNC - return _POSIX_NO_TRUNC; -#else - return -1; -#endif - - case _PC_VDISABLE: -#ifdef _POSIX_VDISABLE - return _POSIX_VDISABLE; -#else - return -1; -#endif - - case _PC_SYNC_IO: -#ifdef _POSIX_SYNC_IO - return _POSIX_SYNC_IO; -#else - return -1; -#endif - - case _PC_ASYNC_IO: -#ifdef _POSIX_ASYNC_IO - { - /* AIO is only allowed on regular files and block devices. */ - struct stat64 st; - - if (__xstat64 (_STAT_VER, path, &st) < 0 - || (! S_ISREG (st.st_mode) && ! S_ISBLK (st.st_mode))) - return -1; - else - return 1; - } -#else - return -1; -#endif - - case _PC_PRIO_IO: -#ifdef _POSIX_PRIO_IO - return _POSIX_PRIO_IO; -#else - return -1; -#endif - - case _PC_SOCK_MAXBUF: -#ifdef SOCK_MAXBUF - return SOCK_MAXBUF; -#else - return -1; -#endif - - case _PC_FILESIZEBITS: -#ifdef FILESIZEBITS - return FILESIZEBITS; -#else - /* We let platforms with larger file sizes overwrite this value. */ - return 32; -#endif - - case _PC_REC_INCR_XFER_SIZE: - /* XXX It is not entirely clear what the limit is supposed to do. - What is incremented? */ - return -1; - - case _PC_REC_MAX_XFER_SIZE: - /* XXX It is not entirely clear what the limit is supposed to do. - In general there is no top limit of the number of bytes which - case be transported at once. */ - return -1; - - case _PC_REC_MIN_XFER_SIZE: - { - /* XXX It is not entirely clear what the limit is supposed to do. - I assume this is the block size of the filesystem. */ - struct statvfs64 sv; - - if (__statvfs64 (path, &sv) < 0) - return -1; - return sv.f_bsize; - } - - case _PC_REC_XFER_ALIGN: - { - /* XXX It is not entirely clear what the limit is supposed to do. - I assume that the number should reflect the minimal block - alignment. */ - struct statvfs64 sv; - - if (__statvfs64 (path, &sv) < 0) - return -1; - return sv.f_frsize; - } - - case _PC_ALLOC_SIZE_MIN: - { - /* XXX It is not entirely clear what the limit is supposed to do. - I assume that the number should reflect the minimal block - alignment. */ - struct statvfs64 sv; - - if (__statvfs64 (path, &sv) < 0) - return -1; - return sv.f_frsize; - } - - case _PC_SYMLINK_MAX: - /* In general there are no limits. If a system has one it should - overwrite this case. */ - return -1; - - case _PC_2_SYMLINKS: - /* Unix systems generally have symlinks. */ - return 1; - } -} - -#undef __pathconf -weak_alias (__pathconf, pathconf) diff --git a/sysdeps/posix/pause.c b/sysdeps/posix/pause.c deleted file mode 100644 index 7996cd6dbb..0000000000 --- a/sysdeps/posix/pause.c +++ /dev/null @@ -1,56 +0,0 @@ -/* pause -- suspend the process until a signal arrives. POSIX.1 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Suspend the process until a signal arrives. - This always returns -1 and sets errno to EINTR. */ - -int -__libc_pause (void) -{ - sigset_t set; - - __sigemptyset (&set); - __sigprocmask (SIG_BLOCK, NULL, &set); - - /* pause is a cancellation point, but so is sigsuspend. - So no need for anything special here. */ - - return __sigsuspend (&set); -} -weak_alias (__libc_pause, pause) - -LIBC_CANCEL_HANDLED (); /* sigsuspend handles our cancellation. */ - -#ifndef NO_CANCELLATION -# include - -int -__pause_nocancel (void) -{ - sigset_t set; - - __sigemptyset (&set); - __sigprocmask (SIG_BLOCK, NULL, &set); - - return sigsuspend_not_cancel (&set); -} -#endif diff --git a/sysdeps/posix/posix_fallocate.c b/sysdeps/posix/posix_fallocate.c deleted file mode 100644 index f87f536bd9..0000000000 --- a/sysdeps/posix/posix_fallocate.c +++ /dev/null @@ -1,122 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -/* Reserve storage for the data of the file associated with FD. This - emulation is far from perfect, but the kernel cannot do not much - better for network file systems, either. */ - -int -posix_fallocate (int fd, __off_t offset, __off_t len) -{ - struct stat64 st; - - if (offset < 0 || len < 0) - return EINVAL; - - /* Perform overflow check. The outer cast relies on a GCC - extension. */ - if ((__off_t) ((uint64_t) offset + (uint64_t) len) < 0) - return EFBIG; - - /* pwrite below will not do the right thing in O_APPEND mode. */ - { - int flags = __fcntl (fd, F_GETFL, 0); - if (flags < 0 || (flags & O_APPEND) != 0) - return EBADF; - } - - /* We have to make sure that this is really a regular file. */ - if (__fxstat64 (_STAT_VER, fd, &st) != 0) - return EBADF; - if (S_ISFIFO (st.st_mode)) - return ESPIPE; - if (! S_ISREG (st.st_mode)) - return ENODEV; - - if (len == 0) - { - /* This is racy, but there is no good way to satisfy a - zero-length allocation request. */ - if (st.st_size < offset) - { - int ret = __ftruncate (fd, offset); - - if (ret != 0) - ret = errno; - return ret; - } - return 0; - } - - /* Minimize data transfer for network file systems, by issuing - single-byte write requests spaced by the file system block size. - (Most local file systems have fallocate support, so this fallback - code is not used there.) */ - - unsigned increment; - { - struct statfs64 f; - - if (__fstatfs64 (fd, &f) != 0) - return errno; - if (f.f_bsize == 0) - increment = 512; - else if (f.f_bsize < 4096) - increment = f.f_bsize; - else - /* NFS does not propagate the block size of the underlying - storage and may report a much larger value which would still - leave holes after the loop below, so we cap the increment at - 4096. */ - increment = 4096; - } - - /* Write a null byte to every block. This is racy; we currently - lack a better option. Compare-and-swap against a file mapping - might additional local races, but requires interposition of a - signal handler to catch SIGBUS. */ - for (offset += (len - 1) % increment; len > 0; offset += increment) - { - len -= increment; - - if (offset < st.st_size) - { - unsigned char c; - ssize_t rsize = __pread (fd, &c, 1, offset); - - if (rsize < 0) - return errno; - /* If there is a non-zero byte, the block must have been - allocated already. */ - else if (rsize == 1 && c != 0) - continue; - } - - if (__pwrite (fd, "", 1, offset) != 1) - return errno; - } - - return 0; -} diff --git a/sysdeps/posix/posix_fallocate64.c b/sysdeps/posix/posix_fallocate64.c deleted file mode 100644 index a637ebe0c6..0000000000 --- a/sysdeps/posix/posix_fallocate64.c +++ /dev/null @@ -1,142 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -/* Reserve storage for the data of the file associated with FD. This - emulation is far from perfect, but the kernel cannot do not much - better for network file systems, either. */ - -int -__posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len) -{ - struct stat64 st; - - if (offset < 0 || len < 0) - return EINVAL; - - /* Perform overflow check. The outer cast relies on a GCC - extension. */ - if ((__off64_t) ((uint64_t) offset + (uint64_t) len) < 0) - return EFBIG; - - /* pwrite64 below will not do the right thing in O_APPEND mode. */ - { - int flags = __fcntl (fd, F_GETFL, 0); - if (flags < 0 || (flags & O_APPEND) != 0) - return EBADF; - } - - /* We have to make sure that this is really a regular file. */ - if (__fxstat64 (_STAT_VER, fd, &st) != 0) - return EBADF; - if (S_ISFIFO (st.st_mode)) - return ESPIPE; - if (! S_ISREG (st.st_mode)) - return ENODEV; - - if (len == 0) - { - /* This is racy, but there is no good way to satisfy a - zero-length allocation request. */ - if (st.st_size < offset) - { - int ret = __ftruncate64 (fd, offset); - - if (ret != 0) - ret = errno; - return ret; - } - return 0; - } - - /* Minimize data transfer for network file systems, by issuing - single-byte write requests spaced by the file system block size. - (Most local file systems have fallocate support, so this fallback - code is not used there.) */ - - unsigned increment; - { - struct statfs64 f; - - if (__fstatfs64 (fd, &f) != 0) - return errno; - if (f.f_bsize == 0) - increment = 512; - else if (f.f_bsize < 4096) - increment = f.f_bsize; - else - /* NFS clients do not propagate the block size of the underlying - storage and may report a much larger value which would still - leave holes after the loop below, so we cap the increment at - 4096. */ - increment = 4096; - } - - /* Write a null byte to every block. This is racy; we currently - lack a better option. Compare-and-swap against a file mapping - might address local races, but requires interposition of a signal - handler to catch SIGBUS. */ - for (offset += (len - 1) % increment; len > 0; offset += increment) - { - len -= increment; - - if (offset < st.st_size) - { - unsigned char c; - ssize_t rsize = __libc_pread64 (fd, &c, 1, offset); - - if (rsize < 0) - return errno; - /* If there is a non-zero byte, the block must have been - allocated already. */ - else if (rsize == 1 && c != 0) - continue; - } - - if (__libc_pwrite64 (fd, "", 1, offset) != 1) - return errno; - } - - return 0; -} - -#undef __posix_fallocate64_l64 -#include -#include - -#if __WORDSIZE == 32 && SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) - -int -attribute_compat_text_section -__posix_fallocate64_l32 (int fd, off64_t offset, size_t len) -{ - return __posix_fallocate64_l64 (fd, offset, len); -} - -versioned_symbol (libc, __posix_fallocate64_l64, posix_fallocate64, - GLIBC_2_3_3); -compat_symbol (libc, __posix_fallocate64_l32, posix_fallocate64, GLIBC_2_2); -#else -strong_alias (__posix_fallocate64_l64, posix_fallocate64); -#endif diff --git a/sysdeps/posix/pread.c b/sysdeps/posix/pread.c deleted file mode 100644 index 82d6d9c7d9..0000000000 --- a/sysdeps/posix/pread.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Read block from given position in file without changing file pointer. - POSIX version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Note: This implementation of pread is not multithread-safe. */ - -ssize_t -__libc_pread (int fd, void *buf, size_t nbyte, off_t offset) -{ - /* Since we must not change the file pointer preserve the value so that - we can restore it later. */ - int save_errno; - ssize_t result; - off_t old_offset = __libc_lseek (fd, 0, SEEK_CUR); - if (old_offset == (off_t) -1) - return -1; - - /* Set to wanted position. */ - if (__libc_lseek (fd, offset, SEEK_SET) == (off_t) -1) - return -1; - - /* Write out the data. */ - result = __libc_read (fd, buf, nbyte); - - /* Now we have to restore the position. If this fails we have to - return this as an error. But if the writing also failed we - return this error. */ - save_errno = errno; - if (__libc_lseek (fd, old_offset, SEEK_SET) == (off_t) -1) - { - if (result == -1) - __set_errno (save_errno); - return -1; - } - __set_errno (save_errno); - - return result; -} - -#ifndef __libc_pread -strong_alias (__libc_pread, __pread) -weak_alias (__libc_pread, pread) -#endif diff --git a/sysdeps/posix/pread64.c b/sysdeps/posix/pread64.c deleted file mode 100644 index f28ef31329..0000000000 --- a/sysdeps/posix/pread64.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Read block from given position in file without changing file pointer. - POSIX version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Note: This implementation of pread64 is not multithread-safe. */ - -ssize_t -__libc_pread64 (int fd, void *buf, size_t nbyte, off64_t offset) -{ - /* Since we must not change the file pointer preserve the value so that - we can restore it later. */ - int save_errno; - ssize_t result; - off64_t old_offset = __libc_lseek64 (fd, 0, SEEK_CUR); - if (old_offset == (off64_t) -1) - return -1; - - /* Set to wanted position. */ - if (__libc_lseek64 (fd, offset, SEEK_SET) == (off64_t) -1) - return -1; - - /* Write out the data. */ - result = __libc_read (fd, buf, nbyte); - - /* Now we have to restore the position. If this fails we have to - return this as an error. But if the writing also failed we - return this error. */ - save_errno = errno; - if (__libc_lseek64 (fd, old_offset, SEEK_SET) == (off64_t) -1) - { - if (result == -1) - __set_errno (save_errno); - return -1; - } - __set_errno (save_errno); - - return result; -} - -#ifndef __libc_pread64 -weak_alias (__libc_pread64, __pread64) -weak_alias (__libc_pread64, pread64) -#endif diff --git a/sysdeps/posix/preadv.c b/sysdeps/posix/preadv.c deleted file mode 100644 index 7819a938a1..0000000000 --- a/sysdeps/posix/preadv.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Read data into multiple buffers. Generic version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef __OFF_T_MATCHES_OFF64_T - -# define PREADV preadv -# define PREAD __pread -# define OFF_T off_t -# include - -libc_hidden_def (preadv) - -#endif diff --git a/sysdeps/posix/preadv2.c b/sysdeps/posix/preadv2.c deleted file mode 100644 index 2a7cf11e27..0000000000 --- a/sysdeps/posix/preadv2.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Generic version of preadv2. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef __OFF_T_MATCHES_OFF64_T - -/* Since we define no flags for preadv2 just route to preadv. */ -ssize_t -preadv2 (int fd, const struct iovec *vector, int count, OFF_T offset, - int flags) -{ - if (flags != 0) - { - __set_errno (EOPNOTSUPP); - return -1; - } - - return preadv (fd, vector, count, offset); -} - -#endif diff --git a/sysdeps/posix/preadv64.c b/sysdeps/posix/preadv64.c deleted file mode 100644 index 374b5bc45c..0000000000 --- a/sysdeps/posix/preadv64.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Read data into multiple buffers. Generic LFS version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define PREADV preadv64 -#define PREAD __pread64 -#define OFF_T off64_t -#include - -libc_hidden_def (preadv64) -#ifdef __OFF_T_MATCHES_OFF64_T -strong_alias (preadv64, preadv) -libc_hidden_def (preadv) -#endif diff --git a/sysdeps/posix/preadv64v2.c b/sysdeps/posix/preadv64v2.c deleted file mode 100644 index e084f3f9e1..0000000000 --- a/sysdeps/posix/preadv64v2.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Generic version of preadv2. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ssize_t -preadv64v2 (int fd, const struct iovec *vector, int count, OFF_T offset, - int flags) -{ - if (flags != 0) - { - __set_errno (EOPNOTSUPP); - return -1; - } - - return preadv64 (fd, vector, count, offset); -} - -#ifdef __OFF_T_MATCHES_OFF64_T -strong_alias (preadv64v2, preadv2) -#endif diff --git a/sysdeps/posix/preadv_common.c b/sysdeps/posix/preadv_common.c deleted file mode 100644 index 37efdc0ec0..0000000000 --- a/sysdeps/posix/preadv_common.c +++ /dev/null @@ -1,83 +0,0 @@ -/* Read data into multiple buffers. Base implementation for preadv - and preadv64. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#include - -/* Read data from file descriptor FD at the given position OFFSET - without change the file pointer, and put the result in the buffers - described by VECTOR, which is a vector of COUNT 'struct iovec's. - The buffers are filled in the order specified. Operates just like - 'pread' (see ) except that data are put in VECTOR instead - of a contiguous buffer. */ -ssize_t -PREADV (int fd, const struct iovec *vector, int count, OFF_T offset) -{ - /* Find the total number of bytes to be read. */ - size_t bytes = 0; - for (int i = 0; i < count; ++i) - { - /* Check for ssize_t overflow. */ - if (SSIZE_MAX - bytes < vector[i].iov_len) - { - __set_errno (EINVAL); - return -1; - } - bytes += vector[i].iov_len; - } - - /* Allocate a temporary buffer to hold the data. It could be done with a - stack allocation, but due limitations on some system (Linux with - O_DIRECT) it aligns the buffer to pagesize. A possible optimization - would be querying if the syscall would impose any alignment constraint, - but 1. it is system specific (not meant in generic implementation), and - 2. it would make the implementation more complex, and 3. it will require - another syscall (fcntl). */ - void *buffer = NULL; - if (__posix_memalign (&buffer, GLRO(dl_pagesize), bytes) != 0) - return -1; - - ssize_t bytes_read = PREAD (fd, buffer, bytes, offset); - if (bytes_read < 0) - goto end; - - /* Copy the data from BUFFER into the memory specified by VECTOR. */ - bytes = bytes_read; - void *buf = buffer; - for (int i = 0; i < count; ++i) - { - size_t copy = MIN (vector[i].iov_len, bytes); - - memcpy (vector[i].iov_base, buf, copy); - - buf += copy; - bytes -= copy; - if (bytes == 0) - break; - } - -end: - free (buffer); - return bytes_read; -} diff --git a/sysdeps/posix/profil.c b/sysdeps/posix/profil.c deleted file mode 100644 index 4d3fbe0b8a..0000000000 --- a/sysdeps/posix/profil.c +++ /dev/null @@ -1,120 +0,0 @@ -/* Low-level statistical profiling support function. Mostly POSIX.1 version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -#ifndef SIGPROF - -#include - -#else - -static u_short *samples; -static size_t nsamples; -static size_t pc_offset; -static u_int pc_scale; - -static inline void -profil_count (void *pc) -{ - size_t i = (pc - pc_offset - (void *) 0) / 2; - - if (sizeof (unsigned long long int) > sizeof (size_t)) - i = (unsigned long long int) i * pc_scale / 65536; - else - i = i / 65536 * pc_scale + i % 65536 * pc_scale / 65536; - - if (i < nsamples) - ++samples[i]; -} - -/* Get the machine-dependent definition of `__profil_counter', the signal - handler for SIGPROF. It calls `profil_count' (above) with the PC of the - interrupted code. */ -#include "profil-counter.h" - -/* Enable statistical profiling, writing samples of the PC into at most - SIZE bytes of SAMPLE_BUFFER; every processor clock tick while profiling - is enabled, the system examines the user PC and increments - SAMPLE_BUFFER[((PC - OFFSET) / 2) * SCALE / 65536]. If SCALE is zero, - disable profiling. Returns zero on success, -1 on error. */ - -int -__profil (u_short *sample_buffer, size_t size, size_t offset, u_int scale) -{ - struct sigaction act; - struct itimerval timer; -#if !IS_IN (rtld) - static struct sigaction oact; - static struct itimerval otimer; -# define oact_ptr &oact -# define otimer_ptr &otimer - - if (sample_buffer == NULL) - { - /* Disable profiling. */ - if (samples == NULL) - /* Wasn't turned on. */ - return 0; - - if (__setitimer (ITIMER_PROF, &otimer, NULL) < 0) - return -1; - samples = NULL; - return __sigaction (SIGPROF, &oact, NULL); - } - - if (samples) - { - /* Was already turned on. Restore old timer and signal handler - first. */ - if (__setitimer (ITIMER_PROF, &otimer, NULL) < 0 - || __sigaction (SIGPROF, &oact, NULL) < 0) - return -1; - } -#else - /* In ld.so profiling should never be disabled once it runs. */ - //assert (sample_buffer != NULL); -# define oact_ptr NULL -# define otimer_ptr NULL -#endif - - samples = sample_buffer; - nsamples = size / sizeof *samples; - pc_offset = offset; - pc_scale = scale; - - act.sa_handler = (sighandler_t) &__profil_counter; - act.sa_flags = SA_RESTART; - __sigfillset (&act.sa_mask); - if (__sigaction (SIGPROF, &act, oact_ptr) < 0) - return -1; - - timer.it_value.tv_sec = 0; - timer.it_value.tv_usec = 1000000 / __profile_frequency (); - timer.it_interval = timer.it_value; - return __setitimer (ITIMER_PROF, &timer, otimer_ptr); -} -weak_alias (__profil, profil) - -#endif diff --git a/sysdeps/posix/pwrite.c b/sysdeps/posix/pwrite.c deleted file mode 100644 index 764e9172be..0000000000 --- a/sysdeps/posix/pwrite.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Write block to given position in file without changing file pointer. - POSIX version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Note: This implementation of pwrite is not multithread-safe. */ - -ssize_t -__libc_pwrite (int fd, const void *buf, size_t nbyte, off_t offset) -{ - /* Since we must not change the file pointer preserve the value so that - we can restore it later. */ - int save_errno; - ssize_t result; - off_t old_offset = __libc_lseek (fd, 0, SEEK_CUR); - if (old_offset == (off_t) -1) - return -1; - - /* Set to wanted position. */ - if (__libc_lseek (fd, offset, SEEK_SET) == (off_t) -1) - return -1; - - /* Write out the data. */ - result = __libc_write (fd, buf, nbyte); - - /* Now we have to restore the position. If this fails we have to - return this as an error. But if the writing also failed we - return this error. */ - save_errno = errno; - if (__libc_lseek (fd, old_offset, SEEK_SET) == (off_t) -1) - { - if (result == -1) - __set_errno (save_errno); - return -1; - } - __set_errno (save_errno); - - return result; -} - -#ifndef __libc_pwrite -strong_alias (__libc_pwrite, __pwrite) -weak_alias (__libc_pwrite, pwrite) -#endif diff --git a/sysdeps/posix/pwrite64.c b/sysdeps/posix/pwrite64.c deleted file mode 100644 index 601a268f59..0000000000 --- a/sysdeps/posix/pwrite64.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Write block to given position in file without changing file pointer. - POSIX version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Note: This implementation of pwrite64 is not multithread-safe. */ - -ssize_t -__libc_pwrite64 (int fd, const void *buf, size_t nbyte, off64_t offset) -{ - /* Since we must not change the file pointer preserve the value so that - we can restore it later. */ - int save_errno; - ssize_t result; - off64_t old_offset = __libc_lseek64 (fd, 0, SEEK_CUR); - if (old_offset == (off64_t) -1) - return -1; - - /* Set to wanted position. */ - if (__libc_lseek64 (fd, offset, SEEK_SET) == (off64_t) -1) - return -1; - - /* Write out the data. */ - result = __libc_write (fd, buf, nbyte); - - /* Now we have to restore the position. If this fails we have to - return this as an error. But if the writing also failed we - return this error. */ - save_errno = errno; - if (__libc_lseek64 (fd, old_offset, SEEK_SET) == (off64_t) -1) - { - if (result == -1) - __set_errno (save_errno); - return -1; - } - __set_errno (save_errno); - - return result; -} -#ifndef __libc_pwrite64 -weak_alias (__libc_pwrite64, __pwrite64) -libc_hidden_weak (__pwrite64) -weak_alias (__libc_pwrite64, pwrite64) -#endif diff --git a/sysdeps/posix/pwritev.c b/sysdeps/posix/pwritev.c deleted file mode 100644 index f9de092aa5..0000000000 --- a/sysdeps/posix/pwritev.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Write data into multiple buffers. Generic version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef __OFF_T_MATCHES_OFF64_T - -# define PWRITEV pwritev -# define PWRITE __pwrite -# define OFF_T off_t -# include - -libc_hidden_def (pwritev) - -#endif diff --git a/sysdeps/posix/pwritev2.c b/sysdeps/posix/pwritev2.c deleted file mode 100644 index 5b7650c4fc..0000000000 --- a/sysdeps/posix/pwritev2.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Generic version of pwritev2. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef __OFF_T_MATCHES_OFF64_T - -/* Since we define no flags for pwritev2 just route to pwritev. */ -ssize_t -pwritev2 (int fd, const struct iovec *vector, int count, OFF_T offset, - int flags) -{ - if (flags != 0) - { - __set_errno (EOPNOTSUPP); - return -1; - } - - return pwritev (fd, vector, count, offset); -} - -#endif diff --git a/sysdeps/posix/pwritev64.c b/sysdeps/posix/pwritev64.c deleted file mode 100644 index c5392f7836..0000000000 --- a/sysdeps/posix/pwritev64.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Write data into multiple buffers. Generic LFS version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define PWRITEV pwritev64 -#define PWRITE __pwrite64 -#define OFF_T off64_t -#include - -libc_hidden_def (pwritev64) -#ifdef __OFF_T_MATCHES_OFF64_T -strong_alias (pwritev64, pwritev) -libc_hidden_def (pwritev) -#endif diff --git a/sysdeps/posix/pwritev64v2.c b/sysdeps/posix/pwritev64v2.c deleted file mode 100644 index 0f2f9ef863..0000000000 --- a/sysdeps/posix/pwritev64v2.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Generic version of pwritev2. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Since we define no flags for pwritev2 just route to pwritev. */ -ssize_t -pwritev64v2 (int fd, const struct iovec *vector, int count, OFF_T offset, - int flags) -{ - if (flags != 0) - { - __set_errno (EOPNOTSUPP); - return -1; - } - - return pwritev64 (fd, vector, count, offset); -} - -#ifdef __OFF_T_MATCHES_OFF64_T -strong_alias (pwritev64v2, pwritev2) -#endif diff --git a/sysdeps/posix/pwritev_common.c b/sysdeps/posix/pwritev_common.c deleted file mode 100644 index 03830650e4..0000000000 --- a/sysdeps/posix/pwritev_common.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Write data into multiple buffers. Base implementation for pwritev - and pwritev64. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#include - -/* Write data pointed by the buffers described by IOVEC, which is a - vector of COUNT 'struct iovec's, to file descriptor FD at the given - position OFFSET without change the file pointer. The data is - written in the order specified. Operates just like 'write' (see - ) except that the data are taken from IOVEC instead of a - contiguous buffer. */ -ssize_t -PWRITEV (int fd, const struct iovec *vector, int count, OFF_T offset) -{ - /* Find the total number of bytes to be read. */ - size_t bytes = 0; - for (int i = 0; i < count; ++i) - { - /* Check for ssize_t overflow. */ - if (SSIZE_MAX - bytes < vector[i].iov_len) - { - __set_errno (EINVAL); - return -1; - } - bytes += vector[i].iov_len; - } - - /* Allocate a temporary buffer to hold the data. It could be done with a - stack allocation, but due limitations on some system (Linux with - O_DIRECT) it aligns the buffer to pagesize. A possible optimization - would be querying if the syscall would impose any alignment constraint, - but 1. it is system specific (not meant in generic implementation), and - 2. it would make the implementation more complex, and 3. it will require - another syscall (fcntl). */ - void *buffer = NULL; - if (__posix_memalign (&buffer, GLRO(dl_pagesize), bytes) != 0) - return -1; - - /* Copy the data from BUFFER into the memory specified by VECTOR. */ - char *ptr = buffer; - for (int i = 0; i < count; ++i) - ptr = __mempcpy ((void *) ptr, (void *) vector[i].iov_base, - vector[i].iov_len); - - ssize_t ret = PWRITE (fd, buffer, bytes, offset); - - free (buffer); - - return ret; -} diff --git a/sysdeps/posix/raise.c b/sysdeps/posix/raise.c deleted file mode 100644 index 6660144e5f..0000000000 --- a/sysdeps/posix/raise.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Raise the signal SIG. */ -int -raise (int sig) -{ - return __kill (__getpid (), sig); -} -libc_hidden_def (raise) -weak_alias (raise, gsignal) diff --git a/sysdeps/posix/readdir.c b/sysdeps/posix/readdir.c deleted file mode 100644 index 8e9384d472..0000000000 --- a/sysdeps/posix/readdir.c +++ /dev/null @@ -1,122 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#ifndef __READDIR -# define __READDIR __readdir -# define __GETDENTS __getdents -# define DIRENT_TYPE struct dirent -# define __READDIR_ALIAS -#endif - -/* Read a directory entry from DIRP. */ -DIRENT_TYPE * -__READDIR (DIR *dirp) -{ - DIRENT_TYPE *dp; - int saved_errno = errno; - -#if IS_IN (libc) - __libc_lock_lock (dirp->lock); -#endif - - do - { - size_t reclen; - - if (dirp->offset >= dirp->size) - { - /* We've emptied out our buffer. Refill it. */ - - size_t maxread; - ssize_t bytes; - -#ifndef _DIRENT_HAVE_D_RECLEN - /* Fixed-size struct; must read one at a time (see below). */ - maxread = sizeof *dp; -#else - maxread = dirp->allocation; -#endif - - bytes = __GETDENTS (dirp->fd, dirp->data, maxread); - if (bytes <= 0) - { - /* On some systems getdents fails with ENOENT when the - open directory has been rmdir'd already. POSIX.1 - requires that we treat this condition like normal EOF. */ - if (bytes < 0 && errno == ENOENT) - bytes = 0; - - /* Don't modifiy errno when reaching EOF. */ - if (bytes == 0) - __set_errno (saved_errno); - dp = NULL; - break; - } - dirp->size = (size_t) bytes; - - /* Reset the offset into the buffer. */ - dirp->offset = 0; - } - - dp = (DIRENT_TYPE *) &dirp->data[dirp->offset]; - -#ifdef _DIRENT_HAVE_D_RECLEN - reclen = dp->d_reclen; -#else - /* The only version of `struct dirent*' that lacks `d_reclen' - is fixed-size. */ - assert (sizeof dp->d_name > 1); - reclen = sizeof *dp; - /* The name is not terminated if it is the largest possible size. - Clobber the following byte to ensure proper null termination. We - read jst one entry at a time above so we know that byte will not - be used later. */ - dp->d_name[sizeof dp->d_name] = '\0'; -#endif - - dirp->offset += reclen; - -#ifdef _DIRENT_HAVE_D_OFF - dirp->filepos = dp->d_off; -#else - dirp->filepos += reclen; -#endif - - /* Skip deleted files. */ - } while (dp->d_ino == 0); - -#if IS_IN (libc) - __libc_lock_unlock (dirp->lock); -#endif - - return dp; -} - -#ifdef __READDIR_ALIAS -weak_alias (__readdir, readdir) -#endif diff --git a/sysdeps/posix/readdir_r.c b/sysdeps/posix/readdir_r.c deleted file mode 100644 index 4da2369d8b..0000000000 --- a/sysdeps/posix/readdir_r.c +++ /dev/null @@ -1,154 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#ifndef __READDIR_R -# define __READDIR_R __readdir_r -# define __GETDENTS __getdents -# define DIRENT_TYPE struct dirent -# define __READDIR_R_ALIAS -#endif - -/* Read a directory entry from DIRP. */ -int -__READDIR_R (DIR *dirp, DIRENT_TYPE *entry, DIRENT_TYPE **result) -{ - DIRENT_TYPE *dp; - size_t reclen; - const int saved_errno = errno; - int ret; - - __libc_lock_lock (dirp->lock); - - do - { - if (dirp->offset >= dirp->size) - { - /* We've emptied out our buffer. Refill it. */ - - size_t maxread; - ssize_t bytes; - -#ifndef _DIRENT_HAVE_D_RECLEN - /* Fixed-size struct; must read one at a time (see below). */ - maxread = sizeof *dp; -#else - maxread = dirp->allocation; -#endif - - bytes = __GETDENTS (dirp->fd, dirp->data, maxread); - if (bytes <= 0) - { - /* On some systems getdents fails with ENOENT when the - open directory has been rmdir'd already. POSIX.1 - requires that we treat this condition like normal EOF. */ - if (bytes < 0 && errno == ENOENT) - { - bytes = 0; - __set_errno (saved_errno); - } - if (bytes < 0) - dirp->errcode = errno; - - dp = NULL; - break; - } - dirp->size = (size_t) bytes; - - /* Reset the offset into the buffer. */ - dirp->offset = 0; - } - - dp = (DIRENT_TYPE *) &dirp->data[dirp->offset]; - -#ifdef _DIRENT_HAVE_D_RECLEN - reclen = dp->d_reclen; -#else - /* The only version of `struct dirent*' that lacks `d_reclen' - is fixed-size. */ - assert (sizeof dp->d_name > 1); - reclen = sizeof *dp; - /* The name is not terminated if it is the largest possible size. - Clobber the following byte to ensure proper null termination. We - read just one entry at a time above so we know that byte will not - be used later. */ - dp->d_name[sizeof dp->d_name] = '\0'; -#endif - - dirp->offset += reclen; - -#ifdef _DIRENT_HAVE_D_OFF - dirp->filepos = dp->d_off; -#else - dirp->filepos += reclen; -#endif - -#ifdef NAME_MAX - if (reclen > offsetof (DIRENT_TYPE, d_name) + NAME_MAX + 1) - { - /* The record is very long. It could still fit into the - caller-supplied buffer if we can skip padding at the - end. */ - size_t namelen = _D_EXACT_NAMLEN (dp); - if (namelen <= NAME_MAX) - reclen = offsetof (DIRENT_TYPE, d_name) + namelen + 1; - else - { - /* The name is too long. Ignore this file. */ - dirp->errcode = ENAMETOOLONG; - dp->d_ino = 0; - continue; - } - } -#endif - - /* Skip deleted and ignored files. */ - } - while (dp->d_ino == 0); - - if (dp != NULL) - { - *result = memcpy (entry, dp, reclen); -#ifdef _DIRENT_HAVE_D_RECLEN - entry->d_reclen = reclen; -#endif - ret = 0; - } - else - { - *result = NULL; - ret = dirp->errcode; - } - - __libc_lock_unlock (dirp->lock); - - return ret; -} - -#ifdef __READDIR_R_ALIAS -weak_alias (__readdir_r, readdir_r) -#endif diff --git a/sysdeps/posix/readv.c b/sysdeps/posix/readv.c deleted file mode 100644 index 5b0c124e89..0000000000 --- a/sysdeps/posix/readv.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -static void -ifree (char **ptrp) -{ - free (*ptrp); -} - -/* Read data from file descriptor FD, and put the result in the - buffers described by VECTOR, which is a vector of COUNT 'struct iovec's. - The buffers are filled in the order specified. - Operates just like 'read' (see ) except that data are - put in VECTOR instead of a contiguous buffer. */ -ssize_t -__readv (int fd, const struct iovec *vector, int count) -{ - /* Find the total number of bytes to be read. */ - size_t bytes = 0; - for (int i = 0; i < count; ++i) - { - /* Check for ssize_t overflow. */ - if (SSIZE_MAX - bytes < vector[i].iov_len) - { - __set_errno (EINVAL); - return -1; - } - bytes += vector[i].iov_len; - } - - /* Allocate a temporary buffer to hold the data. We should normally - use alloca since it's faster and does not require synchronization - with other threads. But we cannot if the amount of memory - required is too large. */ - char *buffer; - char *malloced_buffer __attribute__ ((__cleanup__ (ifree))) = NULL; - if (__libc_use_alloca (bytes)) - buffer = (char *) __alloca (bytes); - else - { - malloced_buffer = buffer = (char *) malloc (bytes); - if (buffer == NULL) - return -1; - } - - /* Read the data. */ - ssize_t bytes_read = __read (fd, buffer, bytes); - if (bytes_read < 0) - return -1; - - /* Copy the data from BUFFER into the memory specified by VECTOR. */ - bytes = bytes_read; - for (int i = 0; i < count; ++i) - { - size_t copy = MIN (vector[i].iov_len, bytes); - - (void) memcpy ((void *) vector[i].iov_base, (void *) buffer, copy); - - buffer += copy; - bytes -= copy; - if (bytes == 0) - break; - } - - return bytes_read; -} -weak_alias (__readv, readv) diff --git a/sysdeps/posix/remove.c b/sysdeps/posix/remove.c deleted file mode 100644 index 1901622270..0000000000 --- a/sysdeps/posix/remove.c +++ /dev/null @@ -1,43 +0,0 @@ -/* ANSI C `remove' function to delete a file or directory. POSIX.1 version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -#ifndef IS_NO_DIRECTORY_ERROR -# define IS_NO_DIRECTORY_ERROR errno != EPERM -#endif - - -int -remove (const char *file) -{ - /* First try to unlink since this is more frequently the necessary action. */ - if (__unlink (file) != 0 - /* If it is indeed a directory... */ - && (IS_NO_DIRECTORY_ERROR - /* ...try to remove it. */ - || __rmdir (file) != 0)) - /* Cannot remove the object for whatever reason. */ - return -1; - - return 0; -} -libc_hidden_def (remove) diff --git a/sysdeps/posix/rename.c b/sysdeps/posix/rename.c deleted file mode 100644 index e5f721f366..0000000000 --- a/sysdeps/posix/rename.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Rename the file OLD to NEW. */ -int -rename (const char *old, const char *new) -{ - int save = errno; - if (__link (old, new) < 0) - { - if (errno == EEXIST) - { - __set_errno (save); - /* Race condition, required for 1003.1 conformance. */ - if (__unlink (new) < 0 || - __link (old, new) < 0) - return -1; - } - else - return -1; - } - if (__unlink (old) < 0) - { - save = errno; - if (__unlink (new) == 0) - __set_errno (save); - return -1; - } - return 0; -} diff --git a/sysdeps/posix/rewinddir.c b/sysdeps/posix/rewinddir.c deleted file mode 100644 index 06fa612382..0000000000 --- a/sysdeps/posix/rewinddir.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Rewind DIRP to the beginning of the directory. */ -void -__rewinddir (DIR *dirp) -{ -#if IS_IN (libc) - __libc_lock_lock (dirp->lock); -#endif - (void) __lseek (dirp->fd, (off_t) 0, SEEK_SET); - dirp->filepos = 0; - dirp->offset = 0; - dirp->size = 0; - dirp->errcode = 0; -#if IS_IN (libc) - __libc_lock_unlock (dirp->lock); -#endif -} -libc_hidden_def (__rewinddir) -weak_alias (__rewinddir, rewinddir) diff --git a/sysdeps/posix/seekdir.c b/sysdeps/posix/seekdir.c deleted file mode 100644 index 1f37525061..0000000000 --- a/sysdeps/posix/seekdir.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Seek to position POS in DIRP. */ -/* XXX should be __seekdir ? */ -void -seekdir (DIR *dirp, long int pos) -{ - __libc_lock_lock (dirp->lock); - (void) __lseek (dirp->fd, pos, SEEK_SET); - dirp->size = 0; - dirp->offset = 0; - dirp->filepos = pos; - __libc_lock_unlock (dirp->lock); -} diff --git a/sysdeps/posix/shm-directory.c b/sysdeps/posix/shm-directory.c deleted file mode 100644 index f64e02614d..0000000000 --- a/sysdeps/posix/shm-directory.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Determine directory for shm/sem files. Generic POSIX version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if _POSIX_MAPPED_FILES - -# include - -# define SHMDIR (_PATH_DEV "shm/") - -const char * -__shm_directory (size_t *len) -{ - *len = sizeof SHMDIR - 1; - return SHMDIR; -} -# if IS_IN (libpthread) -hidden_def (__shm_directory) -# endif - -#endif diff --git a/sysdeps/posix/shm-directory.h b/sysdeps/posix/shm-directory.h deleted file mode 100644 index 5c70e1a71e..0000000000 --- a/sysdeps/posix/shm-directory.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Header for directory for shm/sem files. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SHM_DIRECTORY_H - -#include -#include -#include -#include -#include - -extern const char *__shm_directory (size_t *len); - -/* This defines local variables SHM_DIR and SHM_DIRLEN, giving the - directory prefix (with trailing slash) and length (not including '\0' - terminator) of the directory used for shm files. If that cannot be - determined, it sets errno to ENOSYS and returns RETVAL_FOR_INVALID. - - This uses the local variable NAME as an lvalue, and increments it past - any leading slashes. It then defines the local variable NAMELEN, giving - strlen (NAME) + 1. If NAME is invalid, it sets errno to - ERRNO_FOR_INVALID and returns RETVAL_FOR_INVALID. Finally, it defines - the local variable SHM_NAME, giving the absolute file name of the shm - file corresponding to NAME. PREFIX is a string constant used as a - prefix on NAME. */ - -#define SHM_GET_NAME(errno_for_invalid, retval_for_invalid, prefix) \ - size_t shm_dirlen; \ - const char *shm_dir = __shm_directory (&shm_dirlen); \ - /* If we don't know what directory to use, there is nothing we can do. */ \ - if (__glibc_unlikely (shm_dir == NULL)) \ - { \ - __set_errno (ENOSYS); \ - return retval_for_invalid; \ - } \ - /* Construct the filename. */ \ - while (name[0] == '/') \ - ++name; \ - size_t namelen = strlen (name) + 1; \ - /* Validate the filename. */ \ - if (namelen == 1 || namelen >= NAME_MAX || strchr (name, '/') != NULL) \ - { \ - __set_errno (errno_for_invalid); \ - return retval_for_invalid; \ - } \ - char *shm_name = __alloca (shm_dirlen + sizeof prefix - 1 + namelen); \ - __mempcpy (__mempcpy (__mempcpy (shm_name, shm_dir, shm_dirlen), \ - prefix, sizeof prefix - 1), \ - name, namelen) - -#endif /* shm-directory.h */ diff --git a/sysdeps/posix/shm_open.c b/sysdeps/posix/shm_open.c deleted file mode 100644 index 64315de8f8..0000000000 --- a/sysdeps/posix/shm_open.c +++ /dev/null @@ -1,55 +0,0 @@ -/* shm_open -- open a POSIX shared memory object. Generic POSIX file version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if ! _POSIX_MAPPED_FILES - -# include - -#else - -# include -# include - - -/* Open shared memory object. */ -int -shm_open (const char *name, int oflag, mode_t mode) -{ - SHM_GET_NAME (EINVAL, -1, ""); - - oflag |= O_NOFOLLOW | O_CLOEXEC; - - /* Disable asynchronous cancellation. */ - int state; - pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &state); - - int fd = open (shm_name, oflag, mode); - if (fd == -1 && __glibc_unlikely (errno == EISDIR)) - /* It might be better to fold this error with EINVAL since - directory names are just another example for unsuitable shared - object names and the standard does not mention EISDIR. */ - __set_errno (EINVAL); - - pthread_setcancelstate (state, NULL); - - return fd; -} - -#endif /* _POSIX_MAPPED_FILES */ diff --git a/sysdeps/posix/shm_unlink.c b/sysdeps/posix/shm_unlink.c deleted file mode 100644 index 1d573d2a41..0000000000 --- a/sysdeps/posix/shm_unlink.c +++ /dev/null @@ -1,43 +0,0 @@ -/* shm_unlink -- remove a POSIX shared memory object. Generic POSIX version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if ! _POSIX_MAPPED_FILES -#include - -#else - -#include -#include -#include "shm-directory.h" - - -/* Remove shared memory object. */ -int -shm_unlink (const char *name) -{ - SHM_GET_NAME (ENOENT, -1, ""); - - int result = unlink (shm_name); - if (result < 0 && errno == EPERM) - __set_errno (EACCES); - return result; -} - -#endif diff --git a/sysdeps/posix/sigblock.c b/sysdeps/posix/sigblock.c deleted file mode 100644 index 1f8686458b..0000000000 --- a/sysdeps/posix/sigblock.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include - -/* Block signals in MASK, returning the old mask. */ -int -__sigblock (int mask) -{ - sigset_t set, oset; - - if (sigset_set_old_mask (&set, mask) < 0) - return -1; - - if (__sigprocmask (SIG_BLOCK, &set, &oset) < 0) - return -1; - - return sigset_get_old_mask (&oset); -} - -weak_alias (__sigblock, sigblock) diff --git a/sysdeps/posix/sigignore.c b/sysdeps/posix/sigignore.c deleted file mode 100644 index 601ae9685a..0000000000 --- a/sysdeps/posix/sigignore.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Set the disposition of SIG to SIG_IGN. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define __need_NULL -#include -#include -#include /* For the real memset prototype. */ -#include - -int -sigignore (int sig) -{ - struct sigaction act; - - act.sa_handler = SIG_IGN; - __sigemptyset (&act.sa_mask); - act.sa_flags = 0; - - return __sigaction (sig, &act, NULL); -} diff --git a/sysdeps/posix/sigintr.c b/sysdeps/posix/sigintr.c deleted file mode 100644 index a6202de6a9..0000000000 --- a/sysdeps/posix/sigintr.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* If INTERRUPT is nonzero, make signal SIG interrupt system calls - (causing them to fail with EINTR); if INTERRUPT is zero, make system - calls be restarted after signal SIG. */ -int -siginterrupt (int sig, int interrupt) -{ -#ifdef SA_RESTART - extern sigset_t _sigintr attribute_hidden; /* Defined in signal.c. */ - struct sigaction action; - - if (__sigaction (sig, (struct sigaction *) NULL, &action) < 0) - return -1; - - if (interrupt) - { - __sigaddset (&_sigintr, sig); - action.sa_flags &= ~SA_RESTART; - } - else - { - __sigdelset (&_sigintr, sig); - action.sa_flags |= SA_RESTART; - } - - if (__sigaction (sig, &action, (struct sigaction *) NULL) < 0) - return -1; - - return 0; -#else - __set_errno (ENOSYS); - return -1; -#endif -} diff --git a/sysdeps/posix/signal.c b/sysdeps/posix/signal.c deleted file mode 100644 index 81ba17745d..0000000000 --- a/sysdeps/posix/signal.c +++ /dev/null @@ -1,51 +0,0 @@ -/* BSD-like signal function. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include /* For the real memset prototype. */ -#include - -sigset_t _sigintr attribute_hidden; /* Set by siginterrupt. */ - -/* Set the handler for the signal SIG to HANDLER, - returning the old handler, or SIG_ERR on error. */ -__sighandler_t -__bsd_signal (int sig, __sighandler_t handler) -{ - struct sigaction act, oact; - - /* Check signal extents to protect __sigismember. */ - if (handler == SIG_ERR || sig < 1 || sig >= NSIG) - { - __set_errno (EINVAL); - return SIG_ERR; - } - - act.sa_handler = handler; - __sigemptyset (&act.sa_mask); - __sigaddset (&act.sa_mask, sig); - act.sa_flags = __sigismember (&_sigintr, sig) ? 0 : SA_RESTART; - if (__sigaction (sig, &act, &oact) < 0) - return SIG_ERR; - - return oact.sa_handler; -} -weak_alias (__bsd_signal, bsd_signal) -weak_alias (__bsd_signal, signal) -weak_alias (__bsd_signal, ssignal) diff --git a/sysdeps/posix/sigpause.c b/sysdeps/posix/sigpause.c deleted file mode 100644 index 9038ed368d..0000000000 --- a/sysdeps/posix/sigpause.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define sigpause __rename_sigpause -#include -#include -#include /* For NULL. */ -#include -#undef sigpause - -#include - -/* Set the mask of blocked signals to MASK, - wait for a signal to arrive, and then restore the mask. */ -static int -do_sigpause (int sig_or_mask, int is_sig) -{ - sigset_t set; - - if (is_sig != 0) - { - /* The modern X/Open implementation is requested. */ - if (__sigprocmask (0, NULL, &set) < 0 - || sigdelset (&set, sig_or_mask) < 0) - return -1; - } - else if (sigset_set_old_mask (&set, sig_or_mask) < 0) - return -1; - - /* Note the sigpause() is a cancellation point. But since we call - sigsuspend() which itself is a cancellation point we do not have - to do anything here. */ - return __sigsuspend (&set); -} - -int -__sigpause (int sig_or_mask, int is_sig) -{ - if (SINGLE_THREAD_P) - return do_sigpause (sig_or_mask, is_sig); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = do_sigpause (sig_or_mask, is_sig); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} -libc_hidden_def (__sigpause) - -/* We have to provide a default version of this function since the - standards demand it. The version which is a bit more reasonable is - the BSD version. So make this the default. */ -int -__attribute__ ((weak)) -__default_sigpause (int mask) -{ - return __sigpause (mask, 0); -} -#undef sigpause -weak_alias (__default_sigpause, sigpause) -strong_alias (__default_sigpause, __libc_sigpause) - - -/* We have to provide a default version of this function since the - standards demand it. The version which is a bit more reasonable is - the BSD version. So make this the default. */ -int -__attribute__ ((weak)) -__xpg_sigpause (int sig) -{ - return __sigpause (sig, 1); -} -strong_alias (__xpg_sigpause, __libc___xpg_sigpause) diff --git a/sysdeps/posix/sigset.c b/sysdeps/posix/sigset.c deleted file mode 100644 index a4dfe0ae93..0000000000 --- a/sysdeps/posix/sigset.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define __need_NULL -#include -#include -#include /* For the real memset prototype. */ -#include - -/* Set the disposition for SIG. */ -__sighandler_t -sigset (int sig, __sighandler_t disp) -{ - struct sigaction act; - struct sigaction oact; - sigset_t set; - sigset_t oset; - - /* Check signal extents to protect __sigismember. */ - if (disp == SIG_ERR || sig < 1 || sig >= NSIG) - { - __set_errno (EINVAL); - return SIG_ERR; - } - - __sigemptyset (&set); - __sigaddset (&set, sig); - - if (disp == SIG_HOLD) - { - /* Add the signal to the current signal mask. */ - if (__sigprocmask (SIG_BLOCK, &set, &oset) < 0) - return SIG_ERR; - - /* If the signal was already blocked signal this to the caller. */ - if (__sigismember (&oset, sig)) - return SIG_HOLD; - - /* We need to determine whether a specific handler is installed. */ - if (__sigaction (sig, NULL, &oact) < 0) - return SIG_ERR; - - return oact.sa_handler; - } - else - { - act.sa_handler = disp; - __sigemptyset (&act.sa_mask); - act.sa_flags = 0; - if (__sigaction (sig, &act, &oact) < 0) - return SIG_ERR; - - /* Remove the signal from the current signal mask. */ - if (__sigprocmask (SIG_UNBLOCK, &set, &oset) < 0) - return SIG_ERR; - - /* If the signal was already blocked return SIG_HOLD. */ - return __sigismember (&oset, sig) ? SIG_HOLD : oact.sa_handler; - } -} diff --git a/sysdeps/posix/sigsetmask.c b/sysdeps/posix/sigsetmask.c deleted file mode 100644 index 56c8358ad4..0000000000 --- a/sysdeps/posix/sigsetmask.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include - -/* Set the mask of blocked signals to MASK, returning the old mask. */ -int -__sigsetmask (int mask) -{ - sigset_t set, oset; - - if (sigset_set_old_mask (&set, mask) < 0) - return -1; - - if (__sigprocmask (SIG_SETMASK, &set, &oset) < 0) - return -1; - - return sigset_get_old_mask (&oset); -} - -weak_alias (__sigsetmask, sigsetmask) diff --git a/sysdeps/posix/sigsuspend.c b/sysdeps/posix/sigsuspend.c deleted file mode 100644 index 336a2e773e..0000000000 --- a/sysdeps/posix/sigsuspend.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -/* Change the set of blocked signals to SET, - wait until a signal arrives, and restore the set of blocked signals. */ -int -__sigsuspend (const sigset_t *set) -{ - sigset_t oset; - int save; - - if (set == NULL) - { - __set_errno (EINVAL); - return -1; - } - - if (sigprocmask (SIG_SETMASK, set, &oset) < 0) - return -1; - - (void) pause(); - save = errno; - - if (sigprocmask (SIG_SETMASK, &oset, (sigset_t *) NULL) < 0) - return -1; - - __set_errno (save); - return -1; -} -libc_hidden_def (__sigsuspend) -weak_alias (__sigsuspend, sigsuspend) diff --git a/sysdeps/posix/sigwait.c b/sysdeps/posix/sigwait.c deleted file mode 100644 index d807dbf72c..0000000000 --- a/sysdeps/posix/sigwait.c +++ /dev/null @@ -1,108 +0,0 @@ -/* Implementation of sigwait function from POSIX.1c. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include /* For NULL. */ -#include - -/* This is our dummy signal handler we use here. */ -static void ignore_signal (int sig); - -/* Place where to remember which signal we got. Please note that this - implementation cannot be used for the threaded libc. The - libpthread must provide an own version. */ -static int was_sig; - - -static int -do_sigwait (const sigset_t *set, int *sig) -{ - sigset_t tmp_mask; - struct sigaction saved[NSIG]; - struct sigaction action; - int save_errno; - int this; - - /* Prepare set. */ - __sigfillset (&tmp_mask); - - /* Unblock all signals in the SET and register our nice handler. */ - action.sa_handler = ignore_signal; - action.sa_flags = 0; - __sigfillset (&action.sa_mask); /* Block all signals for handler. */ - - /* Make sure we recognize error conditions by setting WAS_SIG to a - value which does not describe a legal signal number. */ - was_sig = -1; - - for (this = 1; this < NSIG; ++this) - if (__sigismember (set, this)) - { - /* Unblock this signal. */ - __sigdelset (&tmp_mask, this); - - /* Register temporary action handler. */ - if (__sigaction (this, &action, &saved[this]) != 0) - goto restore_handler; - } - - /* Now we can wait for signals. */ - __sigsuspend (&tmp_mask); - - restore_handler: - save_errno = errno; - - while (--this >= 1) - if (__sigismember (set, this)) - /* We ignore errors here since we must restore all handlers. */ - __sigaction (this, &saved[this], NULL); - - __set_errno (save_errno); - - /* Store the result and return. */ - *sig = was_sig; - return was_sig == -1 ? -1 : 0; -} - - -int -__sigwait (const sigset_t *set, int *sig) -{ - if (SINGLE_THREAD_P) - return do_sigwait (set, sig); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = do_sigwait (set, sig); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} -libc_hidden_def (__sigwait) -weak_alias (__sigwait, sigwait) - - -static void -ignore_signal (int sig) -{ - /* Remember the signal. */ - was_sig = sig; -} diff --git a/sysdeps/posix/sleep.c b/sysdeps/posix/sleep.c deleted file mode 100644 index b3162baab1..0000000000 --- a/sysdeps/posix/sleep.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Sleep for a given number of seconds. POSIX.1 version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -/* Make the process sleep for SECONDS seconds, or until a signal arrives - and is not ignored. The function returns the number of seconds less - than SECONDS which it actually slept (zero if it slept the full time). - If a signal handler does a `longjmp' or modifies the handling of the - SIGALRM signal while inside `sleep' call, the handling of the SIGALRM - signal afterwards is undefined. There is no return value to indicate - error, but if `sleep' returns SECONDS, it probably didn't work. */ -unsigned int -__sleep (unsigned int seconds) -{ - int save_errno = errno; - - const unsigned int max - = (unsigned int) (((unsigned long int) (~((time_t) 0))) >> 1); - struct timespec ts = { 0, 0 }; - do - { - if (sizeof (ts.tv_sec) <= sizeof (seconds)) - { - /* Since SECONDS is unsigned assigning the value to .tv_sec can - overflow it. In this case we have to wait in steps. */ - ts.tv_sec += MIN (seconds, max); - seconds -= (unsigned int) ts.tv_sec; - } - else - { - ts.tv_sec = (time_t) seconds; - seconds = 0; - } - - if (__nanosleep (&ts, &ts) < 0) - /* We were interrupted. - Return the number of (whole) seconds we have not yet slept. */ - return seconds + ts.tv_sec; - } - while (seconds > 0); - - __set_errno (save_errno); - - return 0; -} -weak_alias (__sleep, sleep) diff --git a/sysdeps/posix/spawni.c b/sysdeps/posix/spawni.c deleted file mode 100644 index 9cad25ca4e..0000000000 --- a/sysdeps/posix/spawni.c +++ /dev/null @@ -1,319 +0,0 @@ -/* Guts of POSIX spawn interface. Generic POSIX.1 version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "spawn_int.h" -#include -#include -#include - - -/* The Unix standard contains a long explanation of the way to signal - an error after the fork() was successful. Since no new wait status - was wanted there is no way to signal an error using one of the - available methods. The committee chose to signal an error by a - normal program exit with the exit code 127. */ -#define SPAWN_ERROR 127 - - -/* The file is accessible but it is not an executable file. Invoke - the shell to interpret it as a script. */ -static void -internal_function -script_execute (const char *file, char *const argv[], char *const envp[]) -{ - /* Count the arguments. */ - int argc = 0; - while (argv[argc++]) - ; - - /* Construct an argument list for the shell. */ - { - char *new_argv[argc + 1]; - new_argv[0] = (char *) _PATH_BSHELL; - new_argv[1] = (char *) file; - while (argc > 1) - { - new_argv[argc] = argv[argc - 1]; - --argc; - } - - /* Execute the shell. */ - __execve (new_argv[0], new_argv, envp); - } -} - -static inline void -maybe_script_execute (const char *file, char *const argv[], char *const envp[], - int xflags) -{ - if (SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_15) - && (xflags & SPAWN_XFLAGS_TRY_SHELL) - && errno == ENOEXEC) - script_execute (file, argv, envp); -} - -/* Spawn a new process executing PATH with the attributes describes in *ATTRP. - Before running the process perform the actions described in FILE-ACTIONS. */ -int -__spawni (pid_t *pid, const char *file, - const posix_spawn_file_actions_t *file_actions, - const posix_spawnattr_t *attrp, char *const argv[], - char *const envp[], int xflags) -{ - pid_t new_pid; - char *path, *p, *name; - size_t len; - size_t pathlen; - - /* Do this once. */ - short int flags = attrp == NULL ? 0 : attrp->__flags; - - /* Generate the new process. */ - if ((flags & POSIX_SPAWN_USEVFORK) != 0 - /* If no major work is done, allow using vfork. Note that we - might perform the path searching. But this would be done by - a call to execvp(), too, and such a call must be OK according - to POSIX. */ - || ((flags & (POSIX_SPAWN_SETSIGMASK | POSIX_SPAWN_SETSIGDEF - | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER - | POSIX_SPAWN_SETPGROUP | POSIX_SPAWN_RESETIDS - | POSIX_SPAWN_SETSID)) == 0 - && file_actions == NULL)) - new_pid = __vfork (); - else - new_pid = __fork (); - - if (new_pid != 0) - { - if (new_pid < 0) - return errno; - - /* The call was successful. Store the PID if necessary. */ - if (pid != NULL) - *pid = new_pid; - - return 0; - } - - /* Set signal mask. */ - if ((flags & POSIX_SPAWN_SETSIGMASK) != 0 - && __sigprocmask (SIG_SETMASK, &attrp->__ss, NULL) != 0) - _exit (SPAWN_ERROR); - - /* Set signal default action. */ - if ((flags & POSIX_SPAWN_SETSIGDEF) != 0) - { - /* We have to iterate over all signals. This could possibly be - done better but it requires system specific solutions since - the sigset_t data type can be very different on different - architectures. */ - int sig; - struct sigaction sa; - - memset (&sa, '\0', sizeof (sa)); - sa.sa_handler = SIG_DFL; - - for (sig = 1; sig <= _NSIG; ++sig) - if (__sigismember (&attrp->__sd, sig) != 0 - && __sigaction (sig, &sa, NULL) != 0) - _exit (SPAWN_ERROR); - - } - -#ifdef _POSIX_PRIORITY_SCHEDULING - /* Set the scheduling algorithm and parameters. */ - if ((flags & (POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER)) - == POSIX_SPAWN_SETSCHEDPARAM) - { - if (__sched_setparam (0, &attrp->__sp) == -1) - _exit (SPAWN_ERROR); - } - else if ((flags & POSIX_SPAWN_SETSCHEDULER) != 0) - { - if (__sched_setscheduler (0, attrp->__policy, &attrp->__sp) == -1) - _exit (SPAWN_ERROR); - } -#endif - - if ((flags & POSIX_SPAWN_SETSID) != 0 - && __setsid () < 0) - _exit (SPAWN_ERROR); - - /* Set the process group ID. */ - if ((flags & POSIX_SPAWN_SETPGROUP) != 0 - && __setpgid (0, attrp->__pgrp) != 0) - _exit (SPAWN_ERROR); - - /* Set the effective user and group IDs. */ - if ((flags & POSIX_SPAWN_RESETIDS) != 0 - && (local_seteuid (__getuid ()) != 0 - || local_setegid (__getgid ()) != 0)) - _exit (SPAWN_ERROR); - - /* Execute the file actions. */ - if (file_actions != NULL) - { - int cnt; - struct rlimit64 fdlimit; - bool have_fdlimit = false; - - for (cnt = 0; cnt < file_actions->__used; ++cnt) - { - struct __spawn_action *action = &file_actions->__actions[cnt]; - - switch (action->tag) - { - case spawn_do_close: - if (close_not_cancel (action->action.close_action.fd) != 0) - { - if (! have_fdlimit) - { - __getrlimit64 (RLIMIT_NOFILE, &fdlimit); - have_fdlimit = true; - } - - /* Only signal errors for file descriptors out of range. */ - if (action->action.close_action.fd < 0 - || action->action.close_action.fd >= fdlimit.rlim_cur) - /* Signal the error. */ - _exit (SPAWN_ERROR); - } - break; - - case spawn_do_open: - { - int new_fd = open_not_cancel (action->action.open_action.path, - action->action.open_action.oflag - | O_LARGEFILE, - action->action.open_action.mode); - - if (new_fd == -1) - /* The `open' call failed. */ - _exit (SPAWN_ERROR); - - /* Make sure the desired file descriptor is used. */ - if (new_fd != action->action.open_action.fd) - { - if (__dup2 (new_fd, action->action.open_action.fd) - != action->action.open_action.fd) - /* The `dup2' call failed. */ - _exit (SPAWN_ERROR); - - if (close_not_cancel (new_fd) != 0) - /* The `close' call failed. */ - _exit (SPAWN_ERROR); - } - } - break; - - case spawn_do_dup2: - if (__dup2 (action->action.dup2_action.fd, - action->action.dup2_action.newfd) - != action->action.dup2_action.newfd) - /* The `dup2' call failed. */ - _exit (SPAWN_ERROR); - break; - } - } - } - - if ((xflags & SPAWN_XFLAGS_USE_PATH) == 0 || strchr (file, '/') != NULL) - { - /* The FILE parameter is actually a path. */ - __execve (file, argv, envp); - - maybe_script_execute (file, argv, envp, xflags); - - /* Oh, oh. `execve' returns. This is bad. */ - _exit (SPAWN_ERROR); - } - - /* We have to search for FILE on the path. */ - path = getenv ("PATH"); - if (path == NULL) - { - /* There is no `PATH' in the environment. - The default search path is the current directory - followed by the path `confstr' returns for `_CS_PATH'. */ - len = confstr (_CS_PATH, (char *) NULL, 0); - path = (char *) __alloca (1 + len); - path[0] = ':'; - (void) confstr (_CS_PATH, path + 1, len); - } - - len = strlen (file) + 1; - pathlen = strlen (path); - name = __alloca (pathlen + len + 1); - /* Copy the file name at the top. */ - name = (char *) memcpy (name + pathlen + 1, file, len); - /* And add the slash. */ - *--name = '/'; - - p = path; - do - { - char *startp; - - path = p; - p = __strchrnul (path, ':'); - - if (p == path) - /* Two adjacent colons, or a colon at the beginning or the end - of `PATH' means to search the current directory. */ - startp = name + 1; - else - startp = (char *) memcpy (name - (p - path), path, p - path); - - /* Try to execute this name. If it works, execv will not return. */ - __execve (startp, argv, envp); - - maybe_script_execute (startp, argv, envp, xflags); - - switch (errno) - { - case EACCES: - case ENOENT: - case ESTALE: - case ENOTDIR: - /* Those errors indicate the file is missing or not executable - by us, in which case we want to just try the next path - directory. */ - break; - - default: - /* Some other error means we found an executable file, but - something went wrong executing it; return the error to our - caller. */ - _exit (SPAWN_ERROR); - } - } - while (*p++ != '\0'); - - /* Return with an error. */ - _exit (SPAWN_ERROR); -} diff --git a/sysdeps/posix/sprofil.c b/sysdeps/posix/sprofil.c deleted file mode 100644 index f704b9e8f4..0000000000 --- a/sysdeps/posix/sprofil.c +++ /dev/null @@ -1,355 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by David Mosberger-Tang . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#include -#include - -#ifndef SIGPROF -# include -#else - -#include - -struct region - { - size_t offset; - size_t nsamples; - unsigned int scale; - union - { - void *vp; - unsigned short *us; - unsigned int *ui; - } - sample; - size_t start; - size_t end; - }; - -struct prof_info - { - unsigned int num_regions; - struct region *region; - struct region *last, *overflow; - struct itimerval saved_timer; - struct sigaction saved_action; - }; - -static unsigned int overflow_counter; - -static struct region default_overflow_region = - { - .offset = 0, - .nsamples = 1, - .scale = 2, - .sample = { &overflow_counter }, - .start = 0, - .end = ~(size_t) 0 - }; - -static struct prof_info prof_info; - -static unsigned long int -pc_to_index (size_t pc, size_t offset, unsigned int scale, int prof_uint) -{ - size_t i = (pc - offset) / (prof_uint ? sizeof (int) : sizeof (short)); - - if (sizeof (unsigned long long int) > sizeof (size_t)) - return (unsigned long long int) i * scale / 65536; - else - return i / 65536 * scale + i % 65536 * scale / 65536; -} - -static inline size_t -index_to_pc (unsigned long int n, size_t offset, unsigned int scale, - int prof_uint) -{ - size_t pc, bin_size = (prof_uint ? sizeof (int) : sizeof (short)); - - if (sizeof (unsigned long long int) > sizeof (size_t)) - pc = offset + (unsigned long long int) n * bin_size * 65536ull / scale; - else - pc = (offset + n * bin_size / scale * 65536 - + n * bin_size % scale * 65536 / scale); - - if (pc_to_index (pc, offset, scale, prof_uint) < n) - /* Adjust for rounding error. */ - ++pc; - - assert (pc_to_index (pc - 1, offset, scale, prof_uint) < n - && pc_to_index (pc, offset, scale, prof_uint) >= n); - - return pc; -} - -static void -profil_count (void *pcp, int prof_uint) -{ - struct region *region, *r = prof_info.last; - size_t lo, hi, mid, pc = (unsigned long int) pcp; - unsigned long int i; - - /* Fast path: pc is in same region as before. */ - if (pc >= r->start && pc < r->end) - region = r; - else - { - /* Slow path: do a binary search for the right region. */ - lo = 0; hi = prof_info.num_regions - 1; - while (lo <= hi) - { - mid = (lo + hi) / 2; - - r = prof_info.region + mid; - if (pc >= r->start && pc < r->end) - { - prof_info.last = r; - region = r; - break; - } - - if (pc < r->start) - hi = mid - 1; - else - lo = mid + 1; - } - - /* No matching region: increment overflow count. There is no point - in updating the cache here, as it won't hit anyhow. */ - region = prof_info.overflow; - } - - i = pc_to_index (pc, region->offset, region->scale, prof_uint); - if (i < r->nsamples) - { - if (prof_uint) - { - if (r->sample.ui[i] < (unsigned int) ~0) - ++r->sample.ui[i]; - } - else - { - if (r->sample.us[i] < (unsigned short) ~0) - ++r->sample.us[i]; - } - } - else - { - if (prof_uint) - ++prof_info.overflow->sample.ui[0]; - else - ++prof_info.overflow->sample.us[0]; - } -} - -static inline void -profil_count_ushort (void *pcp) -{ - profil_count (pcp, 0); -} - -static inline void -profil_count_uint (void *pcp) -{ - profil_count (pcp, 1); -} - -/* Get the machine-dependent definition of `__profil_counter', the signal - handler for SIGPROF. It calls `profil_count' (above) with the PC of the - interrupted code. */ -#define __profil_counter __profil_counter_ushort -#define profil_count(pc) profil_count (pc, 0) -#include - -#undef __profil_counter -#undef profil_count - -#define __profil_counter __profil_counter_uint -#define profil_count(pc) profil_count (pc, 1) -#include - -static int -insert (int i, unsigned long int start, unsigned long int end, struct prof *p, - int prof_uint) -{ - struct region *r; - size_t to_copy; - - if (start >= end) - return 0; /* don't bother with empty regions */ - - if (prof_info.num_regions == 0) - r = malloc (sizeof (*r)); - else - r = realloc (prof_info.region, (prof_info.num_regions + 1) * sizeof (*r)); - if (r == NULL) - return -1; - - to_copy = prof_info.num_regions - i; - if (to_copy > 0) - memmove (r + i + 1, r + i, to_copy * sizeof (*r)); - - r[i].offset = p->pr_off; - r[i].nsamples = p->pr_size / (prof_uint ? sizeof (int) : sizeof (short)); - r[i].scale = p->pr_scale; - r[i].sample.vp = p->pr_base; - r[i].start = start; - r[i].end = end; - - prof_info.region = r; - ++prof_info.num_regions; - - if (p->pr_off == 0 && p->pr_scale == 2) - prof_info.overflow = r; - - return 0; -} - -/* Add a new profiling region. If the new region overlaps with - existing ones, this may add multiple subregions so that the final - data structure is free of overlaps. The absence of overlaps makes - it possible to use a binary search in profil_count(). Note that - this function depends on new regions being presented in DECREASING - ORDER of starting address. */ - -static int -add_region (struct prof *p, int prof_uint) -{ - unsigned long int nsamples; - size_t start, end; - unsigned int i; - - if (p->pr_scale < 2) - return 0; - - nsamples = p->pr_size / (prof_uint ? sizeof (int) : sizeof (short)); - - start = p->pr_off; - end = index_to_pc (nsamples, p->pr_off, p->pr_scale, prof_uint); - - /* Merge with existing regions. */ - for (i = 0; i < prof_info.num_regions; ++i) - { - if (start < prof_info.region[i].start) - { - if (end < prof_info.region[i].start) - break; - else if (insert (i, start, prof_info.region[i].start, p, prof_uint) - < 0) - return -1; - } - start = prof_info.region[i].end; - } - return insert (i, start, end, p, prof_uint); -} - -static int -pcmp (const void *left, const void *right) -{ - struct prof *l = *(struct prof **) left; - struct prof *r = *(struct prof **) right; - - if (l->pr_off < r->pr_off) - return 1; - else if (l->pr_off > r->pr_off) - return -1; - return 0; -} - -int -__sprofil (struct prof *profp, int profcnt, struct timeval *tvp, - unsigned int flags) -{ - struct prof *p[profcnt]; - struct itimerval timer; - struct sigaction act; - int i; - - if (tvp != NULL) - { - /* Return profiling period. */ - unsigned long int t = 1000000 / __profile_frequency (); - tvp->tv_sec = t / 1000000; - tvp->tv_usec = t % 1000000; - } - - if (prof_info.num_regions > 0) - { - /* Disable profiling. */ - if (__setitimer (ITIMER_PROF, &prof_info.saved_timer, NULL) < 0) - return -1; - - if (__sigaction (SIGPROF, &prof_info.saved_action, NULL) < 0) - return -1; - - free (prof_info.region); - return 0; - } - - prof_info.num_regions = 0; - prof_info.region = NULL; - prof_info.overflow = &default_overflow_region; - - for (i = 0; i < profcnt; ++i) - p[i] = profp + i; - - /* Sort in order of decreasing starting address: */ - qsort (p, profcnt, sizeof (p[0]), pcmp); - - /* Add regions in order of decreasing starting address: */ - for (i = 0; i < profcnt; ++i) - if (add_region (p[i], (flags & PROF_UINT) != 0) < 0) - { - free (prof_info.region); - prof_info.num_regions = 0; - prof_info.region = NULL; - return -1; - } - - if (prof_info.num_regions == 0) - return 0; - - prof_info.last = prof_info.region; - - /* Install SIGPROF handler. */ - if (flags & PROF_UINT) - act.sa_handler = (sighandler_t) &__profil_counter_uint; - else - act.sa_handler = (sighandler_t) &__profil_counter_ushort; - act.sa_flags = SA_RESTART; - __sigfillset (&act.sa_mask); - if (__sigaction (SIGPROF, &act, &prof_info.saved_action) < 0) - return -1; - - /* Setup profiling timer. */ - timer.it_value.tv_sec = 0; - timer.it_value.tv_usec = 1; - timer.it_interval = timer.it_value; - return __setitimer (ITIMER_PROF, &timer, &prof_info.saved_timer); -} - -weak_alias (__sprofil, sprofil) - -#endif /* SIGPROF */ diff --git a/sysdeps/posix/sysconf.c b/sysdeps/posix/sysconf.c deleted file mode 100644 index a95e1b3f05..0000000000 --- a/sysdeps/posix/sysconf.c +++ /dev/null @@ -1,1227 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define NEED_SPEC_ARRAY 0 -#include - -#define NEED_CHECK_SPEC \ - (!defined _XBS5_ILP32_OFF32 || !defined _XBS5_ILP32_OFFBIG \ - || !defined _XBS5_LP64_OFF64 || !defined _XBS5_LPBIG_OFFBIG \ - || !defined _POSIX_V6_ILP32_OFF32 || !defined _POSIX_V6_ILP32_OFFBIG \ - || !defined _POSIX_V6_LP64_OFF64 || !defined _POSIX_V6_LPBIG_OFFBIG \ - || !defined _POSIX_V7_ILP32_OFF32 || !defined _POSIX_V7_ILP32_OFFBIG \ - || !defined _POSIX_V7_LP64_OFF64 || !defined _POSIX_V7_LPBIG_OFFBIG) -#if NEED_CHECK_SPEC -static long int __sysconf_check_spec (const char *spec); -#endif - - -/* Get the value of the system variable NAME. */ -long int -__sysconf (int name) -{ - switch (name) - { - /* Also add obsolete or unnecessarily added constants here. */ - case _SC_EQUIV_CLASS_MAX: - default: - __set_errno (EINVAL); - return -1; - - case _SC_ARG_MAX: -#ifdef ARG_MAX - return ARG_MAX; -#else - return -1; -#endif - - case _SC_CHILD_MAX: -#ifdef CHILD_MAX - return CHILD_MAX; -#else - return __get_child_max (); -#endif - - case _SC_CLK_TCK: - return __getclktck (); - - case _SC_NGROUPS_MAX: -#ifdef NGROUPS_MAX - return NGROUPS_MAX; -#else - return -1; -#endif - - case _SC_OPEN_MAX: - return __getdtablesize (); - - case _SC_STREAM_MAX: -#ifdef STREAM_MAX - return STREAM_MAX; -#else - return FOPEN_MAX; -#endif - - case _SC_TZNAME_MAX: - return -1; - - case _SC_JOB_CONTROL: -#if CONF_IS_DEFINED_SET (_POSIX_JOB_CONTROL) - return _POSIX_JOB_CONTROL; -#else - return -1; -#endif - - case _SC_SAVED_IDS: -#if CONF_IS_DEFINED_SET (_POSIX_SAVED_IDS) - return 1; -#else - return -1; -#endif - - case _SC_REALTIME_SIGNALS: -#if CONF_IS_DEFINED_SET (_POSIX_REALTIME_SIGNALS) - return _POSIX_REALTIME_SIGNALS; -#else - return -1; -#endif - - case _SC_PRIORITY_SCHEDULING: -#if CONF_IS_DEFINED_SET (_POSIX_PRIORITY_SCHEDULING) - return _POSIX_PRIORITY_SCHEDULING; -#else - return -1; -#endif - - case _SC_TIMERS: -#if CONF_IS_DEFINED_SET (_POSIX_TIMERS) - return _POSIX_TIMERS; -#else - return -1; -#endif - - case _SC_ASYNCHRONOUS_IO: -#if CONF_IS_DEFINED_SET (_POSIX_ASYNCHRONOUS_IO) - return _POSIX_ASYNCHRONOUS_IO; -#else - return -1; -#endif - - case _SC_PRIORITIZED_IO: -#if CONF_IS_DEFINED_SET (_POSIX_PRIORITIZED_IO) - return _POSIX_PRIORITIZED_IO; -#else - return -1; -#endif - - case _SC_SYNCHRONIZED_IO: -#if CONF_IS_DEFINED_SET (_POSIX_SYNCHRONIZED_IO) - return _POSIX_SYNCHRONIZED_IO; -#else - return -1; -#endif - - case _SC_FSYNC: -#if CONF_IS_DEFINED_SET (_POSIX_FSYNC) - return _POSIX_FSYNC; -#else - return -1; -#endif - - case _SC_MAPPED_FILES: -#if CONF_IS_DEFINED_SET (_POSIX_MAPPED_FILES) - return _POSIX_MAPPED_FILES; -#else - return -1; -#endif - - case _SC_MEMLOCK: -#if CONF_IS_DEFINED_SET (_POSIX_MEMLOCK) - return _POSIX_MEMLOCK; -#else - return -1; -#endif - - case _SC_MEMLOCK_RANGE: -#if CONF_IS_DEFINED_SET (_POSIX_MEMLOCK_RANGE) - return _POSIX_MEMLOCK_RANGE; -#else - return -1; -#endif - - case _SC_MEMORY_PROTECTION: -#if CONF_IS_DEFINED_SET (_POSIX_MEMORY_PROTECTION) - return _POSIX_MEMORY_PROTECTION; -#else - return -1; -#endif - - case _SC_MESSAGE_PASSING: -#if CONF_IS_DEFINED_SET (_POSIX_MESSAGE_PASSING) - return _POSIX_MESSAGE_PASSING; -#else - return -1; -#endif - - case _SC_SEMAPHORES: -#if CONF_IS_DEFINED_SET (_POSIX_SEMAPHORES) - return _POSIX_SEMAPHORES; -#else - return -1; -#endif - - case _SC_SHARED_MEMORY_OBJECTS: -#if CONF_IS_DEFINED_SET (_POSIX_SHARED_MEMORY_OBJECTS) - return _POSIX_SHARED_MEMORY_OBJECTS; -#else - return -1; -#endif - - case _SC_VERSION: - return _POSIX_VERSION; - - case _SC_PAGESIZE: - return __getpagesize (); - - case _SC_AIO_LISTIO_MAX: -#ifdef AIO_LISTIO_MAX - return AIO_LISTIO_MAX; -#else - return -1; -#endif - - case _SC_AIO_MAX: -#ifdef AIO_MAX - return AIO_MAX; -#else - return -1; -#endif - - case _SC_AIO_PRIO_DELTA_MAX: -#ifdef AIO_PRIO_DELTA_MAX - return AIO_PRIO_DELTA_MAX; -#else - return -1; -#endif - - case _SC_DELAYTIMER_MAX: -#ifdef DELAYTIMER_MAX - return DELAYTIMER_MAX; -#else - return -1; -#endif - - case _SC_MQ_OPEN_MAX: -#ifdef MQ_OPEN_MAX - return MQ_OPEN_MAX; -#else - return -1; -#endif - - case _SC_MQ_PRIO_MAX: -#ifdef MQ_PRIO_MAX - return MQ_PRIO_MAX; -#else - return -1; -#endif - - case _SC_RTSIG_MAX: -#ifdef RTSIG_MAX - return RTSIG_MAX; -#else - return -1; -#endif - - case _SC_SEM_NSEMS_MAX: -#ifdef SEM_NSEMS_MAX - return SEM_NSEMS_MAX; -#else - return -1; -#endif - - case _SC_SEM_VALUE_MAX: -#ifdef SEM_VALUE_MAX - return SEM_VALUE_MAX; -#else - return -1; -#endif - - case _SC_SIGQUEUE_MAX: -#ifdef SIGQUEUE_MAX - return SIGQUEUE_MAX; -#else - return -1; -#endif - - case _SC_TIMER_MAX: -#ifdef TIMER_MAX - return TIMER_MAX; -#else - return -1; -#endif - - case _SC_BC_BASE_MAX: -#ifdef BC_BASE_MAX - return BC_BASE_MAX; -#else - return -1; -#endif - - case _SC_BC_DIM_MAX: -#ifdef BC_DIM_MAX - return BC_DIM_MAX; -#else - return -1; -#endif - - case _SC_BC_SCALE_MAX: -#ifdef BC_SCALE_MAX - return BC_SCALE_MAX; -#else - return -1; -#endif - - case _SC_BC_STRING_MAX: -#ifdef BC_STRING_MAX - return BC_STRING_MAX; -#else - return -1; -#endif - - case _SC_COLL_WEIGHTS_MAX: -#ifdef COLL_WEIGHTS_MAX - return COLL_WEIGHTS_MAX; -#else - return -1; -#endif - - case _SC_EXPR_NEST_MAX: -#ifdef EXPR_NEST_MAX - return EXPR_NEST_MAX; -#else - return -1; -#endif - - case _SC_LINE_MAX: -#ifdef LINE_MAX - return LINE_MAX; -#else - return -1; -#endif - - case _SC_RE_DUP_MAX: -#ifdef RE_DUP_MAX - return RE_DUP_MAX; -#else - return -1; -#endif - - case _SC_CHARCLASS_NAME_MAX: -#ifdef CHARCLASS_NAME_MAX - return CHARCLASS_NAME_MAX; -#else - return -1; -#endif - - case _SC_PII: -#if CONF_IS_DEFINED_SET (_POSIX_PII) - return 1; -#else - return -1; -#endif - - case _SC_PII_XTI: -#if CONF_IS_DEFINED_SET (_POSIX_PII_XTI) - return 1; -#else - return -1; -#endif - - case _SC_PII_SOCKET: -#if CONF_IS_DEFINED_SET (_POSIX_PII_SOCKET) - return 1; -#else - return -1; -#endif - - case _SC_PII_INTERNET: -#if CONF_IS_DEFINED_SET (_POSIX_PII_INTERNET) - return 1; -#else - return -1; -#endif - - case _SC_PII_OSI: -#if CONF_IS_DEFINED_SET (_POSIX_PII_OSI) - return 1; -#else - return -1; -#endif - - case _SC_POLL: -#if CONF_IS_DEFINED_SET (_POSIX_POLL) - return 1; -#else - return -1; -#endif - - case _SC_SELECT: -#if CONF_IS_DEFINED_SET (_POSIX_SELECT) - return 1; -#else - return -1; -#endif - - /* The same as _SC_IOV_MAX. */ - case _SC_UIO_MAXIOV: -#ifdef UIO_MAXIOV - return UIO_MAXIOV; -#else - return -1; -#endif - - case _SC_PII_INTERNET_STREAM: -#if CONF_IS_DEFINED_SET (_POSIX_PII_INTERNET_STREAM) - return 1; -#else - return -1; -#endif - - case _SC_PII_INTERNET_DGRAM: -#if CONF_IS_DEFINED_SET (_POSIX_PII_INTERNET_DGRAM) - return 1; -#else - return -1; -#endif - - case _SC_PII_OSI_COTS: -#if CONF_IS_DEFINED_SET (_POSIX_PII_OSI_COTS) - return 1; -#else - return -1; -#endif - - case _SC_PII_OSI_CLTS: -#if CONF_IS_DEFINED_SET (_POSIX_PII_OSI_CLTS) - return 1; -#else - return -1; -#endif - - case _SC_PII_OSI_M: -#if CONF_IS_DEFINED_SET (_POSIX_PII_OSI_M) - return 1; -#else - return -1; -#endif - - case _SC_T_IOV_MAX: -#ifdef _T_IOV_MAX - return _T_IOV_MAX; -#else - return -1; -#endif - - case _SC_2_VERSION: - return _POSIX2_VERSION; - - case _SC_2_C_BIND: -#ifdef _POSIX2_C_BIND - return _POSIX2_C_BIND; -#else - return -1; -#endif - - case _SC_2_C_DEV: -#ifdef _POSIX2_C_DEV - return _POSIX2_C_DEV; -#else - return -1; -#endif - - case _SC_2_C_VERSION: -#ifdef _POSIX2_C_VERSION - return _POSIX2_C_VERSION; -#else - return -1; -#endif - - case _SC_2_FORT_DEV: -#ifdef _POSIX2_FORT_DEV - return _POSIX2_FORT_DEV; -#else - return -1; -#endif - - case _SC_2_FORT_RUN: -#ifdef _POSIX2_FORT_RUN - return _POSIX2_FORT_RUN; -#else - return -1; -#endif - - case _SC_2_LOCALEDEF: -#ifdef _POSIX2_LOCALEDEF - return _POSIX2_LOCALEDEF; -#else - return -1; -#endif - - case _SC_2_SW_DEV: -#ifdef _POSIX2_SW_DEV - return _POSIX2_SW_DEV; -#else - return -1; -#endif - - case _SC_2_CHAR_TERM: -#ifdef _POSIX2_CHAR_TERM - return _POSIX2_CHAR_TERM; -#else - return -1; -#endif - - case _SC_2_UPE: -#ifdef _POSIX2_UPE - return _POSIX2_UPE; -#else - return -1; -#endif - - /* POSIX 1003.1c (POSIX Threads). */ - case _SC_THREADS: -#if CONF_IS_DEFINED_SET (_POSIX_THREADS) - return _POSIX_THREADS; -#else - return -1; -#endif - - case _SC_THREAD_SAFE_FUNCTIONS: -#if CONF_IS_DEFINED_SET (_POSIX_THREAD_SAFE_FUNCTIONS) - return _POSIX_THREAD_SAFE_FUNCTIONS; -#else - return -1; -#endif - - case _SC_GETGR_R_SIZE_MAX: - return NSS_BUFLEN_GROUP; - - case _SC_GETPW_R_SIZE_MAX: - return NSS_BUFLEN_PASSWD; - - case _SC_LOGIN_NAME_MAX: -#ifdef LOGIN_NAME_MAX - return LOGIN_NAME_MAX; -#else - return -1; -#endif - - case _SC_TTY_NAME_MAX: -#ifdef TTY_NAME_MAX - return TTY_NAME_MAX; -#else - return -1; -#endif - - case _SC_THREAD_DESTRUCTOR_ITERATIONS: -#if CONF_IS_DEFINED_SET (_POSIX_THREAD_DESTRUCTOR_ITERATIONS) - return _POSIX_THREAD_DESTRUCTOR_ITERATIONS; -#else - return -1; -#endif - - case _SC_THREAD_KEYS_MAX: -#ifdef PTHREAD_KEYS_MAX - return PTHREAD_KEYS_MAX; -#else - return -1; -#endif - - case _SC_THREAD_STACK_MIN: -#ifdef PTHREAD_STACK_MIN - return PTHREAD_STACK_MIN; -#else - return -1; -#endif - - case _SC_THREAD_THREADS_MAX: -#ifdef PTHREAD_THREADS_MAX - return PTHREAD_THREADS_MAX; -#else - return -1; -#endif - - case _SC_THREAD_ATTR_STACKADDR: -#if CONF_IS_DEFINED_SET (_POSIX_THREAD_ATTR_STACKADDR) - return _POSIX_THREAD_ATTR_STACKADDR; -#else - return -1; -#endif - - case _SC_THREAD_ATTR_STACKSIZE: -#if CONF_IS_DEFINED_SET (_POSIX_THREAD_ATTR_STACKSIZE) - return _POSIX_THREAD_ATTR_STACKSIZE; -#else - return -1; -#endif - - case _SC_THREAD_PRIORITY_SCHEDULING: -#if CONF_IS_DEFINED_SET (_POSIX_THREAD_PRIORITY_SCHEDULING) - return _POSIX_THREAD_PRIORITY_SCHEDULING; -#else - return -1; -#endif - - case _SC_THREAD_PRIO_INHERIT: -#if CONF_IS_DEFINED_SET (_POSIX_THREAD_PRIO_INHERIT) - return _POSIX_THREAD_PRIO_INHERIT; -#else - return -1; -#endif - - case _SC_THREAD_PRIO_PROTECT: -#if CONF_IS_DEFINED_SET (_POSIX_THREAD_PRIO_PROTECT) - return _POSIX_THREAD_PRIO_PROTECT; -#else - return -1; -#endif - - case _SC_THREAD_PROCESS_SHARED: -#if CONF_IS_DEFINED_SET (_POSIX_THREAD_PROCESS_SHARED) - return _POSIX_THREAD_PROCESS_SHARED; -#else - return -1; -#endif - - case _SC_NPROCESSORS_CONF: - return __get_nprocs_conf (); - - case _SC_NPROCESSORS_ONLN: - return __get_nprocs (); - - case _SC_PHYS_PAGES: - return __get_phys_pages (); - - case _SC_AVPHYS_PAGES: - return __get_avphys_pages (); - - case _SC_ATEXIT_MAX: - /* We have no limit since we use lists. */ - return INT_MAX; - - case _SC_PASS_MAX: - /* We have no limit but since the return value might be used to - allocate a buffer we restrict the value. */ - return BUFSIZ; - - case _SC_XOPEN_VERSION: - return _XOPEN_VERSION; - - case _SC_XOPEN_XCU_VERSION: - return _XOPEN_XCU_VERSION; - - case _SC_XOPEN_UNIX: - return _XOPEN_UNIX; - - case _SC_XOPEN_CRYPT: -#ifdef _XOPEN_CRYPT - return _XOPEN_CRYPT; -#else - return -1; -#endif - - case _SC_XOPEN_ENH_I18N: -#ifdef _XOPEN_ENH_I18N - return _XOPEN_ENH_I18N; -#else - return -1; -#endif - - case _SC_XOPEN_SHM: -#ifdef _XOPEN_SHM - return _XOPEN_SHM; -#else - return -1; -#endif - - case _SC_XOPEN_XPG2: -#ifdef _XOPEN_XPG2 - return _XOPEN_XPG2; -#else - return -1; -#endif - - case _SC_XOPEN_XPG3: -#ifdef _XOPEN_XPG3 - return _XOPEN_XPG3; -#else - return -1; -#endif - - case _SC_XOPEN_XPG4: -#ifdef _XOPEN_XPG4 - return _XOPEN_XPG4; -#else - return -1; -#endif - - case _SC_CHAR_BIT: - return CHAR_BIT; - - case _SC_CHAR_MAX: - return CHAR_MAX; - - case _SC_CHAR_MIN: - return CHAR_MIN; - - case _SC_INT_MAX: - return INT_MAX; - - case _SC_INT_MIN: - return INT_MIN; - - case _SC_LONG_BIT: - return sizeof (long int) * CHAR_BIT; - - case _SC_WORD_BIT: - return sizeof (int) * CHAR_BIT; - - case _SC_MB_LEN_MAX: - return MB_LEN_MAX; - - case _SC_NZERO: - return NZERO; - - case _SC_SSIZE_MAX: - return _POSIX_SSIZE_MAX; - - case _SC_SCHAR_MAX: - return SCHAR_MAX; - - case _SC_SCHAR_MIN: - return SCHAR_MIN; - - case _SC_SHRT_MAX: - return SHRT_MAX; - - case _SC_SHRT_MIN: - return SHRT_MIN; - - case _SC_UCHAR_MAX: - return UCHAR_MAX; - - case _SC_UINT_MAX: - return UINT_MAX; - - case _SC_ULONG_MAX: - return ULONG_MAX; - - case _SC_USHRT_MAX: - return USHRT_MAX; - - case _SC_NL_ARGMAX: -#ifdef NL_ARGMAX - return NL_ARGMAX; -#else - return -1; -#endif - - case _SC_NL_LANGMAX: -#ifdef NL_LANGMAX - return NL_LANGMAX; -#else - return -1; -#endif - - case _SC_NL_MSGMAX: -#ifdef NL_MSGMAX - return NL_MSGMAX; -#else - return -1; -#endif - - case _SC_NL_NMAX: -#ifdef NL_NMAX - return NL_NMAX; -#else - return -1; -#endif - - case _SC_NL_SETMAX: -#ifdef NL_SETMAX - return NL_SETMAX; -#else - return -1; -#endif - - case _SC_NL_TEXTMAX: -#ifdef NL_TEXTMAX - return NL_TEXTMAX; -#else - return -1; -#endif - -#define START_ENV_GROUP(VERSION) \ - /* Empty. */ - -#define END_ENV_GROUP(VERSION) \ - /* Empty. */ - -#define KNOWN_ABSENT_ENVIRONMENT(SC_PREFIX, ENV_PREFIX, SUFFIX) \ - case _SC_##SC_PREFIX##_##SUFFIX: \ - return _##ENV_PREFIX##_##SUFFIX; - -#define KNOWN_PRESENT_ENVIRONMENT(SC_PREFIX, ENV_PREFIX, SUFFIX) \ - case _SC_##SC_PREFIX##_##SUFFIX: \ - return _##ENV_PREFIX##_##SUFFIX; - -#define UNKNOWN_ENVIRONMENT(SC_PREFIX, ENV_PREFIX, SUFFIX) \ - case _SC_##SC_PREFIX##_##SUFFIX: \ - return __sysconf_check_spec (#SUFFIX); - -#include - -#undef START_ENV_GROUP -#undef END_ENV_GROUP -#undef KNOWN_ABSENT_ENVIRONMENT -#undef KNOWN_PRESENT_ENVIRONMENT -#undef UNKNOWN_ENVIRONMENT - - case _SC_XOPEN_LEGACY: - return _XOPEN_LEGACY; - - case _SC_XOPEN_REALTIME: -#ifdef _XOPEN_REALTIME - return _XOPEN_REALTIME; -#else - return -1; -#endif - case _SC_XOPEN_REALTIME_THREADS: -#ifdef _XOPEN_REALTIME_THREADS - return _XOPEN_REALTIME_THREADS; -#else - return -1; -#endif - - case _SC_ADVISORY_INFO: -#if CONF_IS_DEFINED_SET (_POSIX_ADVISORY_INFO) - return _POSIX_ADVISORY_INFO; -#else - return -1; -#endif - - case _SC_BARRIERS: -#if CONF_IS_DEFINED_SET (_POSIX_BARRIERS) - return _POSIX_BARRIERS; -#else - return -1; -#endif - - case _SC_BASE: -#if CONF_IS_DEFINED_SET (_POSIX_BASE) - return _POSIX_BASE; -#else - return -1; -#endif - case _SC_C_LANG_SUPPORT: -#if CONF_IS_DEFINED_SET (_POSIX_C_LANG_SUPPORT) - return _POSIX_C_LANG_SUPPORT; -#else - return -1; -#endif - case _SC_C_LANG_SUPPORT_R: -#if CONF_IS_DEFINED_SET (_POSIX_C_LANG_SUPPORT_R) - return _POSIX_C_LANG_SUPPORT_R; -#else - return -1; -#endif - - case _SC_CLOCK_SELECTION: -#if CONF_IS_DEFINED_SET (_POSIX_CLOCK_SELECTION) - return _POSIX_CLOCK_SELECTION; -#else - return -1; -#endif - - case _SC_CPUTIME: -#if CONF_IS_DEFINED_SET (_POSIX_CPUTIME) - return _POSIX_CPUTIME; -#else - return -1; -#endif - - case _SC_DEVICE_IO: -#if CONF_IS_DEFINED_SET (_POSIX_DEVICE_IO) - return _POSIX_DEVICE_IO; -#else - return -1; -#endif - case _SC_DEVICE_SPECIFIC: -#if CONF_IS_DEFINED_SET (_POSIX_DEVICE_SPECIFIC) - return _POSIX_DEVICE_SPECIFIC; -#else - return -1; -#endif - case _SC_DEVICE_SPECIFIC_R: -#if CONF_IS_DEFINED_SET (_POSIX_DEVICE_SPECIFIC_R) - return _POSIX_DEVICE_SPECIFIC_R; -#else - return -1; -#endif - - case _SC_FD_MGMT: -#if CONF_IS_DEFINED_SET (_POSIX_FD_MGMT) - return _POSIX_FD_MGMT; -#else - return -1; -#endif - - case _SC_FIFO: -#if CONF_IS_DEFINED_SET (_POSIX_FIFO) - return _POSIX_FIFO; -#else - return -1; -#endif - case _SC_PIPE: -#if CONF_IS_DEFINED_SET (_POSIX_PIPE) - return _POSIX_PIPE; -#else - return -1; -#endif - - case _SC_FILE_ATTRIBUTES: -#if CONF_IS_DEFINED_SET (_POSIX_FILE_ATTRIBUTES) - return _POSIX_FILE_ATTRIBUTES; -#else - return -1; -#endif - case _SC_FILE_LOCKING: -#if CONF_IS_DEFINED_SET (_POSIX_FILE_LOCKING) - return _POSIX_FILE_LOCKING; -#else - return -1; -#endif - case _SC_FILE_SYSTEM: -#if CONF_IS_DEFINED_SET (_POSIX_FILE_SYSTEM) - return _POSIX_FILE_SYSTEM; -#else - return -1; -#endif - - case _SC_MONOTONIC_CLOCK: -#if CONF_IS_DEFINED_SET (_POSIX_MONOTONIC_CLOCK) - return _POSIX_MONOTONIC_CLOCK; -#else - return -1; -#endif - - case _SC_MULTI_PROCESS: -#if CONF_IS_DEFINED_SET (_POSIX_MULTI_PROCESS) - return _POSIX_MULTI_PROCESS; -#else - return -1; -#endif - case _SC_SINGLE_PROCESS: -#if CONF_IS_DEFINED_SET (_POSIX_SINGLE_PROCESS) - return _POSIX_SINGLE_PROCESS; -#else - return -1; -#endif - - case _SC_NETWORKING: -#if CONF_IS_DEFINED_SET (_POSIX_NETWORKING) - return _POSIX_NETWORKING; -#else - return -1; -#endif - - case _SC_READER_WRITER_LOCKS: -#if CONF_IS_DEFINED_SET (_POSIX_READER_WRITER_LOCKS) - return _POSIX_READER_WRITER_LOCKS; -#else - return -1; -#endif - case _SC_SPIN_LOCKS: -#if CONF_IS_DEFINED_SET (_POSIX_SPIN_LOCKS) - return _POSIX_SPIN_LOCKS; -#else - return -1; -#endif - - case _SC_REGEXP: -#if CONF_IS_DEFINED_SET (_POSIX_REGEXP) - return _POSIX_REGEXP; -#else - return -1; -#endif - /* _REGEX_VERSION has been removed with IEEE Std 1003.1-2001/Cor 2-2004, - item XSH/TC2/D6/137. */ - case _SC_REGEX_VERSION: - return -1; - - case _SC_SHELL: -#if CONF_IS_DEFINED_SET (_POSIX_SHELL) - return _POSIX_SHELL; -#else - return -1; -#endif - - case _SC_SIGNALS: -#if CONF_IS_DEFINED (_POSIX_SIGNALS) - return _POSIX_SIGNALS; -#else - return -1; -#endif - - case _SC_SPAWN: -#if CONF_IS_DEFINED_SET (_POSIX_SPAWN) - return _POSIX_SPAWN; -#else - return -1; -#endif - - case _SC_SPORADIC_SERVER: -#if CONF_IS_DEFINED_SET (_POSIX_SPORADIC_SERVER) - return _POSIX_SPORADIC_SERVER; -#else - return -1; -#endif - case _SC_THREAD_SPORADIC_SERVER: -#if CONF_IS_DEFINED_SET (_POSIX_THREAD_SPORADIC_SERVER) - return _POSIX_THREAD_SPORADIC_SERVER; -#else - return -1; -#endif - - case _SC_SYSTEM_DATABASE: -#if CONF_IS_DEFINED_SET (_POSIX_SYSTEM_DATABASE) - return _POSIX_SYSTEM_DATABASE; -#else - return -1; -#endif - case _SC_SYSTEM_DATABASE_R: -#if CONF_IS_DEFINED_SET (_POSIX_SYSTEM_DATABASE_R) - return _POSIX_SYSTEM_DATABASE_R; -#else - return -1; -#endif - - case _SC_THREAD_CPUTIME: -#if CONF_IS_DEFINED_SET (_POSIX_THREAD_CPUTIME) - return _POSIX_THREAD_CPUTIME; -#else - return -1; -#endif - - case _SC_TIMEOUTS: -#if CONF_IS_DEFINED_SET (_POSIX_TIMEOUTS) - return _POSIX_TIMEOUTS; -#else - return -1; -#endif - - case _SC_TYPED_MEMORY_OBJECTS: -#if CONF_IS_DEFINED_SET (_POSIX_TYPED_MEMORY_OBJECTS) - return _POSIX_TYPED_MEMORY_OBJECTS; -#else - return -1; -#endif - - case _SC_USER_GROUPS: -#if CONF_IS_DEFINED_SET (_POSIX_USER_GROUPS) - return _POSIX_USER_GROUPS; -#else - return -1; -#endif - case _SC_USER_GROUPS_R: -#if CONF_IS_DEFINED_SET (_POSIX_USER_GROUPS_R) - return _POSIX_USER_GROUPS_R; -#else - return -1; -#endif - - case _SC_2_PBS: -#ifdef _POSIX2_PBS - return _POSIX2_PBS; -#else - return -1; -#endif - case _SC_2_PBS_ACCOUNTING: -#ifdef _POSIX2_PBS_ACCOUNTING - return _POSIX2_PBS_ACCOUNTING; -#else - return -1; -#endif - case _SC_2_PBS_CHECKPOINT: -#ifdef _POSIX2_PBS_CHECKPOINT - return _POSIX2_PBS_CHECKPOINT; -#else - return -1; -#endif - case _SC_2_PBS_LOCATE: -#ifdef _POSIX2_PBS_LOCATE - return _POSIX2_PBS_LOCATE; -#else - return -1; -#endif - case _SC_2_PBS_MESSAGE: -#ifdef _POSIX2_PBS_MESSAGE - return _POSIX2_PBS_MESSAGE; -#else - return -1; -#endif - case _SC_2_PBS_TRACK: -#ifdef _POSIX2_PBS_TRACK - return _POSIX2_PBS_TRACK; -#else - return -1; -#endif - - case _SC_SYMLOOP_MAX: -#ifdef SYMLOOP_MAX - return SYMLOOP_MAX; -#else - return -1; -#endif - - case _SC_STREAMS: -#ifdef _XOPEN_STREAMS - return _XOPEN_STREAMS; -#else - return -1; -#endif - - case _SC_HOST_NAME_MAX: -#ifdef HOST_NAME_MAX - return HOST_NAME_MAX; -#else - return -1; -#endif - - case _SC_TRACE: -#if CONF_IS_DEFINED_SET (_POSIX_TRACE) - return _POSIX_TRACE; -#else - return -1; -#endif - case _SC_TRACE_EVENT_FILTER: -#if CONF_IS_DEFINED_SET (_POSIX_TRACE_EVENT_FILTER) - return _POSIX_TRACE_EVENT_FILTER; -#else - return -1; -#endif - case _SC_TRACE_INHERIT: -#if CONF_IS_DEFINED_SET (_POSIX_TRACE_INHERIT) - return _POSIX_TRACE_INHERIT; -#else - return -1; -#endif - case _SC_TRACE_LOG: -#if CONF_IS_DEFINED_SET (_POSIX_TRACE_LOG) - return _POSIX_TRACE_LOG; -#else - return -1; -#endif - - case _SC_TRACE_EVENT_NAME_MAX: - case _SC_TRACE_NAME_MAX: - case _SC_TRACE_SYS_MAX: - case _SC_TRACE_USER_EVENT_MAX: - /* No support for tracing. */ - - case _SC_XOPEN_STREAMS: - /* No support for STREAMS. */ - return -1; - - case _SC_LEVEL1_ICACHE_SIZE: - case _SC_LEVEL1_ICACHE_ASSOC: - case _SC_LEVEL1_ICACHE_LINESIZE: - case _SC_LEVEL1_DCACHE_SIZE: - case _SC_LEVEL1_DCACHE_ASSOC: - case _SC_LEVEL1_DCACHE_LINESIZE: - case _SC_LEVEL2_CACHE_SIZE: - case _SC_LEVEL2_CACHE_ASSOC: - case _SC_LEVEL2_CACHE_LINESIZE: - case _SC_LEVEL3_CACHE_SIZE: - case _SC_LEVEL3_CACHE_ASSOC: - case _SC_LEVEL3_CACHE_LINESIZE: - case _SC_LEVEL4_CACHE_SIZE: - case _SC_LEVEL4_CACHE_ASSOC: - case _SC_LEVEL4_CACHE_LINESIZE: - /* In general we cannot determine these values. Therefore we - return zero which indicates that no information is - available. */ - return 0; - - case _SC_IPV6: -#if CONF_IS_DEFINED_SET (_POSIX_IPV6) - return _POSIX_IPV6; -#else - return -1; -#endif - - case _SC_RAW_SOCKETS: -#if CONF_IS_DEFINED_SET (_POSIX_RAW_SOCKETS) - return _POSIX_RAW_SOCKETS; -#else - return -1; -#endif - } -} - -#undef __sysconf -weak_alias (__sysconf, sysconf) -libc_hidden_def (__sysconf) - -#if NEED_CHECK_SPEC -static long int -__sysconf_check_spec (const char *spec) -{ - int save_errno = errno; - - const char *getconf_dir = __libc_secure_getenv ("GETCONF_DIR") ?: GETCONF_DIR; - size_t getconf_dirlen = strlen (getconf_dir); - size_t speclen = strlen (spec); - - char name[getconf_dirlen + sizeof ("/POSIX_V6_") + speclen]; - memcpy (mempcpy (mempcpy (name, getconf_dir, getconf_dirlen), - "/POSIX_V6_", sizeof ("/POSIX_V6_") - 1), - spec, speclen + 1); - - struct stat64 st; - long int ret = __xstat64 (_STAT_VER, name, &st) >= 0 ? 1 : -1; - - __set_errno (save_errno); - return ret; -} -#endif diff --git a/sysdeps/posix/system.c b/sysdeps/posix/system.c deleted file mode 100644 index d49cc3f01c..0000000000 --- a/sysdeps/posix/system.c +++ /dev/null @@ -1,186 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#define SHELL_PATH "/bin/sh" /* Path of the shell. */ -#define SHELL_NAME "sh" /* Name to give it. */ - - -#ifdef _LIBC_REENTRANT -static struct sigaction intr, quit; -static int sa_refcntr; -__libc_lock_define_initialized (static, lock); - -# define DO_LOCK() __libc_lock_lock (lock) -# define DO_UNLOCK() __libc_lock_unlock (lock) -# define INIT_LOCK() ({ __libc_lock_init (lock); sa_refcntr = 0; }) -# define ADD_REF() sa_refcntr++ -# define SUB_REF() --sa_refcntr -#else -# define DO_LOCK() -# define DO_UNLOCK() -# define INIT_LOCK() -# define ADD_REF() 0 -# define SUB_REF() 0 -#endif - - -/* Execute LINE as a shell command, returning its status. */ -static int -do_system (const char *line) -{ - int status, save; - pid_t pid; - struct sigaction sa; -#ifndef _LIBC_REENTRANT - struct sigaction intr, quit; -#endif - sigset_t omask; - - sa.sa_handler = SIG_IGN; - sa.sa_flags = 0; - __sigemptyset (&sa.sa_mask); - - DO_LOCK (); - if (ADD_REF () == 0) - { - if (__sigaction (SIGINT, &sa, &intr) < 0) - { - (void) SUB_REF (); - goto out; - } - if (__sigaction (SIGQUIT, &sa, &quit) < 0) - { - save = errno; - (void) SUB_REF (); - goto out_restore_sigint; - } - } - DO_UNLOCK (); - - /* We reuse the bitmap in the 'sa' structure. */ - __sigaddset (&sa.sa_mask, SIGCHLD); - save = errno; - if (__sigprocmask (SIG_BLOCK, &sa.sa_mask, &omask) < 0) - { -#ifndef _LIBC - if (errno == ENOSYS) - __set_errno (save); - else -#endif - { - DO_LOCK (); - if (SUB_REF () == 0) - { - save = errno; - (void) __sigaction (SIGQUIT, &quit, (struct sigaction *) NULL); - out_restore_sigint: - (void) __sigaction (SIGINT, &intr, (struct sigaction *) NULL); - __set_errno (save); - } - out: - DO_UNLOCK (); - return -1; - } - } - -#ifdef CLEANUP_HANDLER - CLEANUP_HANDLER; -#endif - -#ifdef FORK - pid = FORK (); -#else - pid = __fork (); -#endif - if (pid == (pid_t) 0) - { - /* Child side. */ - const char *new_argv[4]; - new_argv[0] = SHELL_NAME; - new_argv[1] = "-c"; - new_argv[2] = line; - new_argv[3] = NULL; - - /* Restore the signals. */ - (void) __sigaction (SIGINT, &intr, (struct sigaction *) NULL); - (void) __sigaction (SIGQUIT, &quit, (struct sigaction *) NULL); - (void) __sigprocmask (SIG_SETMASK, &omask, (sigset_t *) NULL); - INIT_LOCK (); - - /* Exec the shell. */ - (void) __execve (SHELL_PATH, (char *const *) new_argv, __environ); - _exit (127); - } - else if (pid < (pid_t) 0) - /* The fork failed. */ - status = -1; - else - /* Parent side. */ - { - /* Note the system() is a cancellation point. But since we call - waitpid() which itself is a cancellation point we do not - have to do anything here. */ - if (TEMP_FAILURE_RETRY (__waitpid (pid, &status, 0)) != pid) - status = -1; - } - -#ifdef CLEANUP_HANDLER - CLEANUP_RESET; -#endif - - save = errno; - DO_LOCK (); - if ((SUB_REF () == 0 - && (__sigaction (SIGINT, &intr, (struct sigaction *) NULL) - | __sigaction (SIGQUIT, &quit, (struct sigaction *) NULL)) != 0) - || __sigprocmask (SIG_SETMASK, &omask, (sigset_t *) NULL) != 0) - { -#ifndef _LIBC - /* glibc cannot be used on systems without waitpid. */ - if (errno == ENOSYS) - __set_errno (save); - else -#endif - status = -1; - } - DO_UNLOCK (); - - return status; -} - -int -__libc_system (const char *line) -{ - if (line == NULL) - /* Check that we have a command processor available. It might - not be available after a chroot(), for example. */ - return do_system ("exit 0") == 0; - - return do_system (line); -} -weak_alias (__libc_system, system) diff --git a/sysdeps/posix/sysv_signal.c b/sysdeps/posix/sysv_signal.c deleted file mode 100644 index 6893ec23e4..0000000000 --- a/sysdeps/posix/sysv_signal.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include /* For the real memset prototype. */ -#include - -/* Tolerate non-threads versions of Posix */ -#ifndef SA_ONESHOT -#define SA_ONESHOT 0 -#endif -#ifndef SA_NOMASK -#define SA_NOMASK 0 -#endif -#ifndef SA_INTERRUPT -#define SA_INTERRUPT 0 -#endif - -/* Set the handler for the signal SIG to HANDLER, - returning the old handler, or SIG_ERR on error. */ -__sighandler_t -__sysv_signal (int sig, __sighandler_t handler) -{ - struct sigaction act, oact; - - /* Check signal extents to protect __sigismember. */ - if (handler == SIG_ERR || sig < 1 || sig >= NSIG) - { - __set_errno (EINVAL); - return SIG_ERR; - } - - act.sa_handler = handler; - __sigemptyset (&act.sa_mask); - act.sa_flags = SA_ONESHOT | SA_NOMASK | SA_INTERRUPT; - act.sa_flags &= ~SA_RESTART; - if (__sigaction (sig, &act, &oact) < 0) - return SIG_ERR; - - return oact.sa_handler; -} - -weak_alias (__sysv_signal, sysv_signal) diff --git a/sysdeps/posix/telldir.c b/sysdeps/posix/telldir.c deleted file mode 100644 index 1d04da97ee..0000000000 --- a/sysdeps/posix/telldir.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - -/* Return the current position of DIRP. */ -long int -telldir (DIR *dirp) -{ - return dirp->filepos; -} diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c deleted file mode 100644 index b00bd588ec..0000000000 --- a/sysdeps/posix/tempname.c +++ /dev/null @@ -1,305 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !_LIBC -# include -# include "tempname.h" -#endif - -#include -#include - -#include -#ifndef __set_errno -# define __set_errno(Val) errno = (Val) -#endif - -#include -#ifndef P_tmpdir -# define P_tmpdir "/tmp" -#endif -#ifndef TMP_MAX -# define TMP_MAX 238328 -#endif -#ifndef __GT_FILE -# define __GT_FILE 0 -# define __GT_DIR 1 -# define __GT_NOCREATE 2 -#endif -#if !_LIBC && (GT_FILE != __GT_FILE || GT_DIR != __GT_DIR \ - || GT_NOCREATE != __GT_NOCREATE) -# error report this to bug-gnulib@gnu.org -#endif - -#include -#include -#include - -#include -#include -#include -#include - -#include - -#if _LIBC -# define struct_stat64 struct stat64 -# define __secure_getenv __libc_secure_getenv -#else -# define struct_stat64 struct stat -# define __gen_tempname gen_tempname -# define __getpid getpid -# define __gettimeofday gettimeofday -# define __mkdir mkdir -# define __open open -# define __lxstat64(version, file, buf) lstat (file, buf) -# define __secure_getenv secure_getenv -#endif - -#ifdef _LIBC -# include -# if HP_TIMING_AVAIL -# define RANDOM_BITS(Var) \ - if (__glibc_unlikely (value == UINT64_C (0))) \ - { \ - /* If this is the first time this function is used initialize \ - the variable we accumulate the value in to some somewhat \ - random value. If we'd not do this programs at startup time \ - might have a reduced set of possible names, at least on slow \ - machines. */ \ - struct timeval tv; \ - __gettimeofday (&tv, NULL); \ - value = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; \ - } \ - HP_TIMING_NOW (Var) -# endif -#endif - -/* Use the widest available unsigned type if uint64_t is not - available. The algorithm below extracts a number less than 62**6 - (approximately 2**35.725) from uint64_t, so ancient hosts where - uintmax_t is only 32 bits lose about 3.725 bits of randomness, - which is better than not having mkstemp at all. */ -#if !defined UINT64_MAX && !defined uint64_t -# define uint64_t uintmax_t -#endif - -#if _LIBC -/* Return nonzero if DIR is an existent directory. */ -static int -direxists (const char *dir) -{ - struct_stat64 buf; - return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode); -} - -/* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is - non-null and exists, uses it; otherwise uses the first of $TMPDIR, - P_tmpdir, /tmp that exists. Copies into TMPL a template suitable - for use with mk[s]temp. Will fail (-1) if DIR is non-null and - doesn't exist, none of the searched dirs exists, or there's not - enough space in TMPL. */ -int -__path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, - int try_tmpdir) -{ - const char *d; - size_t dlen, plen; - - if (!pfx || !pfx[0]) - { - pfx = "file"; - plen = 4; - } - else - { - plen = strlen (pfx); - if (plen > 5) - plen = 5; - } - - if (try_tmpdir) - { - d = __secure_getenv ("TMPDIR"); - if (d != NULL && direxists (d)) - dir = d; - else if (dir != NULL && direxists (dir)) - /* nothing */ ; - else - dir = NULL; - } - if (dir == NULL) - { - if (direxists (P_tmpdir)) - dir = P_tmpdir; - else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp")) - dir = "/tmp"; - else - { - __set_errno (ENOENT); - return -1; - } - } - - dlen = strlen (dir); - while (dlen > 1 && dir[dlen - 1] == '/') - dlen--; /* remove trailing slashes */ - - /* check we have room for "${dir}/${pfx}XXXXXX\0" */ - if (tmpl_len < dlen + 1 + plen + 6 + 1) - { - __set_errno (EINVAL); - return -1; - } - - sprintf (tmpl, "%.*s/%.*sXXXXXX", (int) dlen, dir, (int) plen, pfx); - return 0; -} -#endif /* _LIBC */ - -/* These are the characters used in temporary file names. */ -static const char letters[] = -"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - -/* Generate a temporary file name based on TMPL. TMPL must match the - rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix). - The name constructed does not exist at the time of the call to - __gen_tempname. TMPL is overwritten with the result. - - KIND may be one of: - __GT_NOCREATE: simply verify that the name does not exist - at the time of the call. - __GT_FILE: create the file using open(O_CREAT|O_EXCL) - and return a read-write fd. The file is mode 0600. - __GT_DIR: create a directory, which will be mode 0700. - - We use a clever algorithm to get hard-to-predict names. */ -int -__gen_tempname (char *tmpl, int suffixlen, int flags, int kind) -{ - int len; - char *XXXXXX; - static uint64_t value; - uint64_t random_time_bits; - unsigned int count; - int fd = -1; - int save_errno = errno; - struct_stat64 st; - - /* A lower bound on the number of temporary files to attempt to - generate. The maximum total number of temporary file names that - can exist for a given template is 62**6. It should never be - necessary to try all of these combinations. Instead if a reasonable - number of names is tried (we define reasonable as 62**3) fail to - give the system administrator the chance to remove the problems. */ -#define ATTEMPTS_MIN (62 * 62 * 62) - - /* The number of times to attempt to generate a temporary file. To - conform to POSIX, this must be no smaller than TMP_MAX. */ -#if ATTEMPTS_MIN < TMP_MAX - unsigned int attempts = TMP_MAX; -#else - unsigned int attempts = ATTEMPTS_MIN; -#endif - - len = strlen (tmpl); - if (len < 6 + suffixlen || memcmp (&tmpl[len - 6 - suffixlen], "XXXXXX", 6)) - { - __set_errno (EINVAL); - return -1; - } - - /* This is where the Xs start. */ - XXXXXX = &tmpl[len - 6 - suffixlen]; - - /* Get some more or less random data. */ -#ifdef RANDOM_BITS - RANDOM_BITS (random_time_bits); -#else - { - struct timeval tv; - __gettimeofday (&tv, NULL); - random_time_bits = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; - } -#endif - value += random_time_bits ^ __getpid (); - - for (count = 0; count < attempts; value += 7777, ++count) - { - uint64_t v = value; - - /* Fill in the random bits. */ - XXXXXX[0] = letters[v % 62]; - v /= 62; - XXXXXX[1] = letters[v % 62]; - v /= 62; - XXXXXX[2] = letters[v % 62]; - v /= 62; - XXXXXX[3] = letters[v % 62]; - v /= 62; - XXXXXX[4] = letters[v % 62]; - v /= 62; - XXXXXX[5] = letters[v % 62]; - - switch (kind) - { - case __GT_FILE: - fd = __open (tmpl, - (flags & ~O_ACCMODE) - | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); - break; - - case __GT_DIR: - fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR); - break; - - case __GT_NOCREATE: - /* This case is backward from the other three. __gen_tempname - succeeds if __xstat fails because the name does not exist. - Note the continue to bypass the common logic at the bottom - of the loop. */ - if (__lxstat64 (_STAT_VER, tmpl, &st) < 0) - { - if (errno == ENOENT) - { - __set_errno (save_errno); - return 0; - } - else - /* Give up now. */ - return -1; - } - continue; - - default: - assert (! "invalid KIND in __gen_tempname"); - abort (); - } - - if (fd >= 0) - { - __set_errno (save_errno); - return fd; - } - else if (errno != EEXIST) - return -1; - } - - /* We got out of the loop because we ran out of combinations to try. */ - __set_errno (EEXIST); - return -1; -} diff --git a/sysdeps/posix/time.c b/sysdeps/posix/time.c deleted file mode 100644 index 32ca177514..0000000000 --- a/sysdeps/posix/time.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include /* For NULL. */ -#include -#include - - -/* Return the current time as a `time_t' and also put it in *T if T is - not NULL. Time is represented as seconds from Jan 1 00:00:00 1970. */ -time_t -time (time_t *t) -{ - struct timeval tv; - time_t result; - - if (__gettimeofday (&tv, (struct timezone *) NULL)) - result = (time_t) -1; - else - result = (time_t) tv.tv_sec; - - if (t != NULL) - *t = result; - return result; -} -libc_hidden_def (time) diff --git a/sysdeps/posix/timespec_get.c b/sysdeps/posix/timespec_get.c deleted file mode 100644 index 94b78cdcec..0000000000 --- a/sysdeps/posix/timespec_get.c +++ /dev/null @@ -1,38 +0,0 @@ -/* timespec_get -- C11 interface to sample a clock. Generic POSIX.1 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - -/* Set TS to calendar time based in time base BASE. */ -int -timespec_get (struct timespec *ts, int base) -{ - switch (base) - { - case TIME_UTC: - if (__clock_gettime (CLOCK_REALTIME, ts) < 0) - return 0; - break; - - default: - return 0; - } - - return base; -} diff --git a/sysdeps/posix/truncate.c b/sysdeps/posix/truncate.c deleted file mode 100644 index 24e099c046..0000000000 --- a/sysdeps/posix/truncate.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Truncate a file given by name. Generic POSIX.1 version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Truncate PATH to LENGTH bytes. */ -int -__truncate (const char *path, off_t length) -{ - int fd, ret, save; - - fd = __open (path, O_WRONLY | (length == 0 ? O_TRUNC : 0)); - if (fd < 0) - return -1; - - if (length == 0) - ret = 0; - else - ret = __ftruncate (fd, length); - save = errno; - (void) __close (fd); - if (ret < 0) - __set_errno (save); - return ret; -} -weak_alias (__truncate, truncate) diff --git a/sysdeps/posix/ttyname.c b/sysdeps/posix/ttyname.c deleted file mode 100644 index 288e22b307..0000000000 --- a/sysdeps/posix/ttyname.c +++ /dev/null @@ -1,129 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -char *__ttyname; - -static char *getttyname (int fd, dev_t mydev, ino_t myino, - int save, int *dostat) internal_function; - - -libc_freeres_ptr (static char *getttyname_name); - -static char * -internal_function -getttyname (int fd, dev_t mydev, ino_t myino, int save, int *dostat) -{ - static const char dev[] = "/dev"; - static size_t namelen; - struct stat st; - DIR *dirstream; - struct dirent *d; - - dirstream = __opendir (dev); - if (dirstream == NULL) - { - *dostat = -1; - return NULL; - } - - while ((d = __readdir (dirstream)) != NULL) - if (((ino_t) d->d_fileno == myino || *dostat) - && strcmp (d->d_name, "stdin") - && strcmp (d->d_name, "stdout") - && strcmp (d->d_name, "stderr")) - { - size_t dlen = _D_ALLOC_NAMLEN (d); - if (sizeof (dev) + dlen > namelen) - { - free (getttyname_name); - namelen = 2 * (sizeof (dev) + dlen); /* Big enough. */ - getttyname_name = malloc (namelen); - if (! getttyname_name) - { - *dostat = -1; - /* Perhaps it helps to free the directory stream buffer. */ - (void) __closedir (dirstream); - return NULL; - } - *((char *) __mempcpy (getttyname_name, dev, sizeof (dev) - 1)) - = '/'; - } - (void) __mempcpy (&getttyname_name[sizeof (dev)], d->d_name, dlen); - if (stat (getttyname_name, &st) == 0 -#ifdef _STATBUF_ST_RDEV - && S_ISCHR (st.st_mode) && st.st_rdev == mydev -#else - && (ino_t) d->d_fileno == myino && st.st_dev == mydev -#endif - ) - { - (void) __closedir (dirstream); - __ttyname = getttyname_name; - __set_errno (save); - return getttyname_name; - } - } - - (void) __closedir (dirstream); - __set_errno (save); - return NULL; -} - -/* Return the pathname of the terminal FD is open on, or NULL on errors. - The returned storage is good only until the next call to this function. */ -char * -ttyname (int fd) -{ - struct stat st; - int dostat = 0; - char *name; - int save = errno; - - if (!__isatty (fd)) - return NULL; - - if (fstat (fd, &st) < 0) - return NULL; - -#ifdef _STATBUF_ST_RDEV - name = getttyname (fd, st.st_rdev, st.st_ino, save, &dostat); -#else - name = getttyname (fd, st.st_dev, st.st_ino, save, &dostat); -#endif - - if (!name && dostat != -1) - { - dostat = 1; -#ifdef _STATBUF_ST_RDEV - name = getttyname (fd, st.st_rdev, st.st_ino, save, &dostat); -#else - name = getttyname (fd, st.st_dev, st.st_ino, save, &dostat); -#endif - } - - return name; -} diff --git a/sysdeps/posix/ttyname_r.c b/sysdeps/posix/ttyname_r.c deleted file mode 100644 index 56bf18e4bc..0000000000 --- a/sysdeps/posix/ttyname_r.c +++ /dev/null @@ -1,156 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef MIN -# define MIN(a, b) ((a) < (b) ? (a) : (b)) -#endif - -static const char dev[] = "/dev"; - -static int getttyname_r (int fd, char *buf, size_t buflen, - dev_t mydev, ino_t myino, int save, - int *dostat) __THROW internal_function; - -static int -internal_function -getttyname_r (int fd, char *buf, size_t buflen, dev_t mydev, ino_t myino, - int save, int *dostat) -{ - struct stat st; - DIR *dirstream; - struct dirent *d; - - dirstream = __opendir (dev); - if (dirstream == NULL) - { - *dostat = -1; - return errno; - } - - while ((d = __readdir (dirstream)) != NULL) - if (((ino_t) d->d_fileno == myino || *dostat) - && strcmp (d->d_name, "stdin") - && strcmp (d->d_name, "stdout") - && strcmp (d->d_name, "stderr")) - { - char *cp; - size_t needed = _D_EXACT_NAMLEN (d) + 1; - - if (needed > buflen) - { - *dostat = -1; - (void) __closedir (dirstream); - __set_errno (ERANGE); - return ERANGE; - } - - cp = __stpncpy (&buf[sizeof (dev)], d->d_name, needed); - cp[0] = '\0'; - - if (stat (buf, &st) == 0 -#ifdef _STATBUF_ST_RDEV - && S_ISCHR (st.st_mode) && st.st_rdev == mydev -#else - && (ino_t) d->d_fileno == myino && st.st_dev == mydev -#endif - ) - { - (void) __closedir (dirstream); - __set_errno (save); - return 0; - } - } - - (void) __closedir (dirstream); - __set_errno (save); - /* It is not clear what to return in this case. `isatty' says FD - refers to a TTY but no entry in /dev has this inode. */ - return ENOTTY; -} - -/* Store at most BUFLEN character of the pathname of the terminal FD is - open on in BUF. Return 0 on success, otherwise an error number. */ -int -__ttyname_r (int fd, char *buf, size_t buflen) -{ - struct stat st; - int dostat = 0; - int save = errno; - int ret; - - /* Test for the absolute minimal size. This makes life easier inside - the loop. */ - if (!buf) - { - __set_errno (EINVAL); - return EINVAL; - } - - if (buflen < (int) (sizeof (dev) + 1)) - { - __set_errno (ERANGE); - return ERANGE; - } - - if (!__isatty (fd)) - { - __set_errno (ENOTTY); - return ENOTTY; - } - - if (fstat (fd, &st) < 0) - return errno; - - /* Prepare the result buffer. */ - memcpy (buf, dev, sizeof (dev) - 1); - buf[sizeof (dev) - 1] = '/'; - buflen -= sizeof (dev); - -#ifdef _STATBUF_ST_RDEV - ret = getttyname_r (fd, buf, buflen, st.st_rdev, st.st_ino, save, - &dostat); -#else - ret = getttyname_r (fd, buf, buflen, st.st_dev, st.st_ino, save, - &dostat); -#endif - - if (ret && dostat != -1) - { - dostat = 1; -#ifdef _STATBUF_ST_RDEV - ret = getttyname_r (fd, buf, buflen, st.st_rdev, st.st_ino, - save, &dostat); -#else - ret = getttyname_r (fd, buf, buflen, st.st_dev, st.st_ino, - save, &dostat); -#endif - } - - return ret; -} - -weak_alias (__ttyname_r, ttyname_r) diff --git a/sysdeps/posix/ulimit.c b/sysdeps/posix/ulimit.c deleted file mode 100644 index 2ae34758e2..0000000000 --- a/sysdeps/posix/ulimit.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -/* Function depends on CMD: - 1 = Return the limit on the size of a file, in units of 512 bytes. - 2 = Set the limit on the size of a file to NEWLIMIT. Only the - super-user can increase the limit. - 3 = illegal due to shared libraries; normally is - (Return the maximum possible address of the data segment.) - 4 = Return the maximum number of files that the calling process - can open. - Returns -1 on errors. */ -long int -__ulimit (int cmd, ...) -{ - struct rlimit limit; - va_list va; - long int result = -1; - - va_start (va, cmd); - - switch (cmd) - { - case UL_GETFSIZE: - /* Get limit on file size. */ - if (__getrlimit (RLIMIT_FSIZE, &limit) == 0) - /* Convert from bytes to 512 byte units. */ - result = (limit.rlim_cur == RLIM_INFINITY - ? LONG_MAX : limit.rlim_cur / 512); - break; - - case UL_SETFSIZE: - /* Set limit on file size. */ - { - long int newlimit = va_arg (va, long int); - long int newlen; - - if ((rlim_t) newlimit > RLIM_INFINITY / 512) - { - limit.rlim_cur = RLIM_INFINITY; - limit.rlim_max = RLIM_INFINITY; - newlen = LONG_MAX; - } - else - { - limit.rlim_cur = newlimit * 512; - limit.rlim_max = newlimit * 512; - newlen = newlimit; - } - - result = __setrlimit (RLIMIT_FSIZE, &limit); - if (result != -1) - result = newlen; - } - break; - - case __UL_GETOPENMAX: - result = __sysconf (_SC_OPEN_MAX); - break; - - default: - __set_errno (EINVAL); - } - - va_end (va); - - return result; -} - -weak_alias (__ulimit, ulimit); diff --git a/sysdeps/posix/usleep.c b/sysdeps/posix/usleep.c deleted file mode 100644 index 581d2c2d39..0000000000 --- a/sysdeps/posix/usleep.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Implementation of the BSD usleep function using nanosleep. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -usleep (useconds_t useconds) -{ - struct timespec ts = { .tv_sec = (long int) (useconds / 1000000), - .tv_nsec = (long int) (useconds % 1000000) * 1000ul }; - - /* Note the usleep() is a cancellation point. But since we call - nanosleep() which itself is a cancellation point we do not have - to do anything here. */ - return __nanosleep (&ts, NULL); -} diff --git a/sysdeps/posix/utime.c b/sysdeps/posix/utime.c deleted file mode 100644 index c8fe60ba91..0000000000 --- a/sysdeps/posix/utime.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - -/* Set the access and modification times of FILE to those given in TIMES. - If TIMES is NULL, set them to the current time. */ -int -utime (const char *file, const struct utimbuf *times) -{ - struct timeval timevals[2]; - struct timeval *tvp; - - if (times != NULL) - { - timevals[0].tv_sec = (time_t) times->actime; - timevals[0].tv_usec = 0L; - timevals[1].tv_sec = (time_t) times->modtime; - timevals[1].tv_usec = 0L; - tvp = timevals; - } - else - tvp = NULL; - - return __utimes (file, tvp); -} -libc_hidden_def (utime) diff --git a/sysdeps/posix/utimes.c b/sysdeps/posix/utimes.c deleted file mode 100644 index 22caec24ec..0000000000 --- a/sysdeps/posix/utimes.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Change the access time of FILE to TVP[0] and - the modification time of FILE to TVP[1]. */ -int -__utimes (const char *file, const struct timeval tvp[2]) -{ - struct utimbuf buf, *times; - - if (tvp) - { - times = &buf; - buf.actime = tvp[0].tv_sec + tvp[0].tv_usec / 1000000; - buf.modtime = tvp[1].tv_sec + tvp[1].tv_usec / 1000000; - } - else - times = NULL; - - return utime (file, times); -} - -weak_alias (__utimes, utimes) diff --git a/sysdeps/posix/wait.c b/sysdeps/posix/wait.c deleted file mode 100644 index f00d24b198..0000000000 --- a/sysdeps/posix/wait.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - -/* Wait for a child to die. When one does, put its status in *STAT_LOC - and return its process ID. For errors, return (pid_t) -1. */ -__pid_t -__libc_wait (int *stat_loc) -{ - return __waitpid (WAIT_ANY, (int *) stat_loc, 0); -} - -weak_alias (__libc_wait, __wait) -weak_alias (__libc_wait, wait) diff --git a/sysdeps/posix/wait3.c b/sysdeps/posix/wait3.c deleted file mode 100644 index a65214fdfc..0000000000 --- a/sysdeps/posix/wait3.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Wait for a child to exit. When one does, put its status in *STAT_LOC and - return its process ID. For errors return (pid_t) -1. If USAGE is not nil, - store information about the child's resource usage (as a `struct rusage') - there. If the WUNTRACED bit is set in OPTIONS, return status for stopped - children; otherwise don't. */ -pid_t -__wait3 (int *stat_loc, int options, struct rusage *usage) -{ - if (usage != NULL) - { - __set_errno (ENOSYS); - return (pid_t) -1; - } - return __waitpid (WAIT_ANY, stat_loc, options); -} - -weak_alias (__wait3, wait3) diff --git a/sysdeps/posix/waitid.c b/sysdeps/posix/waitid.c deleted file mode 100644 index 2c23cdbb25..0000000000 --- a/sysdeps/posix/waitid.c +++ /dev/null @@ -1,166 +0,0 @@ -/* Pseudo implementation of waitid. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Zack Weinberg , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#define __need_NULL -#include -#include -#include -#include - - -#ifdef DO_WAITID -# define OUR_WAITID DO_WAITID -#elif !defined NO_DO_WAITID -# define OUR_WAITID do_waitid -#endif - -#ifdef OUR_WAITID -static int -OUR_WAITID (idtype_t idtype, id_t id, siginfo_t *infop, int options) -{ - pid_t pid, child; - int status; - - switch (idtype) - { - case P_PID: - if(id <= 0) - goto invalid; - pid = (pid_t) id; - break; - case P_PGID: - if (id < 0 || id == 1) - goto invalid; - pid = (pid_t) -id; - break; - case P_ALL: - pid = -1; - break; - default: - invalid: - __set_errno (EINVAL); - return -1; - } - - /* Technically we're supposed to return EFAULT if infop is bogus, - but that would involve mucking with signals, which is - too much hassle. User will have to deal with SIGSEGV/SIGBUS. - We just check for a null pointer. */ - - if (infop == NULL) - { - __set_errno (EFAULT); - return -1; - } - - /* This emulation using waitpid cannot support the waitid modes in which - we do not reap the child, or match only stopped and not dead children. */ - if (0 -#ifdef WNOWAIT - || (options & WNOWAIT) -#endif -#ifdef WEXITED - || ((options & (WEXITED|WSTOPPED|WCONTINUED)) - != (WEXITED | (options & WSTOPPED))) -#endif - ) - { - __set_errno (ENOTSUP); - return -1; - } - - /* Note the waitid() is a cancellation point. But since we call - waitpid() which itself is a cancellation point we do not have - to do anything here. */ - child = __waitpid (pid, &status, - options -#ifdef WEXITED - &~ WEXITED -#endif - ); - - if (child == -1) - /* `waitpid' set `errno' for us. */ - return -1; - - if (child == 0) - { - /* The WHOHANG bit in OPTIONS is set and there are children available - but none has a status for us. The XPG docs do not mention this - case so we clear the `siginfo_t' struct and return successfully. */ - infop->si_signo = 0; - infop->si_code = 0; - return 0; - } - - /* Decode the status field and set infop members... */ - infop->si_signo = SIGCHLD; - infop->si_pid = child; - infop->si_errno = 0; - - if (WIFEXITED (status)) - { - infop->si_code = CLD_EXITED; - infop->si_status = WEXITSTATUS (status); - } - else if (WIFSIGNALED (status)) - { - infop->si_code = WCOREDUMP (status) ? CLD_DUMPED : CLD_KILLED; - infop->si_status = WTERMSIG (status); - } - else if (WIFSTOPPED (status)) - { - infop->si_code = CLD_STOPPED; - infop->si_status = WSTOPSIG (status); - } -#ifdef WIFCONTINUED - else if (WIFCONTINUED (status)) - { - infop->si_code = CLD_CONTINUED; - infop->si_status = SIGCONT; - } -#endif - else - /* Can't happen. */ - assert (! "What?"); - - return 0; -} -#endif - - -int -__waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options) -{ - if (SINGLE_THREAD_P) - return do_waitid (idtype, id, infop, options); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = do_waitid (idtype, id, infop, options); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} -weak_alias (__waitid, waitid) -strong_alias (__waitid, __libc_waitid) diff --git a/sysdeps/posix/writev.c b/sysdeps/posix/writev.c deleted file mode 100644 index 7ce1deb80f..0000000000 --- a/sysdeps/posix/writev.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -static void -ifree (char **ptrp) -{ - free (*ptrp); -} - - -/* Write data pointed by the buffers described by VECTOR, which - is a vector of COUNT 'struct iovec's, to file descriptor FD. - The data is written in the order specified. - Operates just like 'write' (see ) except that the data - are taken from VECTOR instead of a contiguous buffer. */ -ssize_t -__writev (int fd, const struct iovec *vector, int count) -{ - /* Find the total number of bytes to be written. */ - size_t bytes = 0; - for (int i = 0; i < count; ++i) - { - /* Check for ssize_t overflow. */ - if (SSIZE_MAX - bytes < vector[i].iov_len) - { - __set_errno (EINVAL); - return -1; - } - bytes += vector[i].iov_len; - } - - /* Allocate a temporary buffer to hold the data. We should normally - use alloca since it's faster and does not require synchronization - with other threads. But we cannot if the amount of memory - required is too large. */ - char *buffer; - char *malloced_buffer __attribute__ ((__cleanup__ (ifree))) = NULL; - if (__libc_use_alloca (bytes)) - buffer = (char *) __alloca (bytes); - else - { - malloced_buffer = buffer = (char *) malloc (bytes); - if (buffer == NULL) - /* XXX I don't know whether it is acceptable to try writing - the data in chunks. Probably not so we just fail here. */ - return -1; - } - - /* Copy the data into BUFFER. */ - size_t to_copy = bytes; - char *bp = buffer; - for (int i = 0; i < count; ++i) - { - size_t copy = MIN (vector[i].iov_len, to_copy); - - bp = __mempcpy ((void *) bp, (void *) vector[i].iov_base, copy); - - to_copy -= copy; - if (to_copy == 0) - break; - } - - ssize_t bytes_written = __write (fd, buffer, bytes); - - return bytes_written; -} -weak_alias (__writev, writev) diff --git a/sysdeps/powerpc/Implies b/sysdeps/powerpc/Implies deleted file mode 100644 index 78dba9510c..0000000000 --- a/sysdeps/powerpc/Implies +++ /dev/null @@ -1,5 +0,0 @@ -# On PowerPC we use the IBM extended long double format. -ieee754/ldbl-128ibm -ieee754/ldbl-opt -ieee754/dbl-64 -ieee754/flt-32 diff --git a/sysdeps/powerpc/Makefile b/sysdeps/powerpc/Makefile deleted file mode 100644 index e03a202c65..0000000000 --- a/sysdeps/powerpc/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -ifeq ($(subdir),string) -CFLAGS-memcmp.c += -Wno-uninitialized -endif - -ifeq ($(subdir),elf) -# extra shared linker files to link into dl-allobjs.so and libc -sysdep-dl-routines += dl-machine hwcapinfo -sysdep_routines += dl-machine hwcapinfo -# extra shared linker files to link only into dl-allobjs.so -sysdep-rtld-routines += dl-machine hwcapinfo -# Don't optimize GD tls sequence to LE. -LDFLAGS-tst-tlsopt-powerpc += -Wl,--no-tls-optimize -tests += tst-tlsopt-powerpc -endif - -ifeq ($(subdir),setjmp) -ifeq (yes,$(build-shared)) -sysdep_routines += novmx-longjmp novmx-sigjmp -endif -endif - -ifeq ($(subdir),csu) -# get offset to rtld_global._dl_hwcap and rtld_global._dl_hwcap2 -gen-as-const-headers += rtld-global-offsets.sym -# get offset to __locale_struct.__ctype_tolower -gen-as-const-headers += locale-defines.sym -endif - -ifeq ($(subdir),nptl) -tests-internal += test-get_hwcap test-get_hwcap-static -tests-static += test-get_hwcap-static -endif - -ifeq ($(subdir),misc) -sysdep_headers += sys/platform/ppc.h -tests += test-gettimebase -tests += tst-set_ppr -endif - -ifneq (,$(filter %le,$(config-machine))) -abilist-pattern = %-le.abilist -endif diff --git a/sysdeps/powerpc/Versions b/sysdeps/powerpc/Versions deleted file mode 100644 index 95849668f2..0000000000 --- a/sysdeps/powerpc/Versions +++ /dev/null @@ -1,31 +0,0 @@ -libm { - GLIBC_2.1 { - # symbols used in macros from sysdeps/powerpc/bits/fenv.h - __fe_dfl_env; __fe_enabled_env; __fe_nonieee_env; __fe_nomask_env; - } - GLIBC_2.25 { - __fe_dfl_mode; - } -} - -libc { - GLIBC_2.3.4 { - _longjmp; __sigsetjmp; _setjmp; - longjmp; setjmp; - } - GLIBC_PRIVATE { - __novmx__libc_longjmp; __novmx__libc_siglongjmp; - __vmx__libc_longjmp; __vmx__libc_siglongjmp; - } -} - -ld { - GLIBC_2.22 { - __tls_get_addr_opt; - } - GLIBC_2.23 { - # Symbol used to version control when the ABI started to specify that HWCAP - # and AT_PLATFORM data should be stored into the TCB. - __parse_hwcap_and_convert_at_platform; - } -} diff --git a/sysdeps/powerpc/abort-instr.h b/sysdeps/powerpc/abort-instr.h deleted file mode 100644 index 43746e65ba..0000000000 --- a/sysdeps/powerpc/abort-instr.h +++ /dev/null @@ -1,2 +0,0 @@ -/* An op-code of 0 is guaranteed to be illegal. */ -#define ABORT_INSTRUCTION asm (".long 0") diff --git a/sysdeps/powerpc/atomic-machine.h b/sysdeps/powerpc/atomic-machine.h deleted file mode 100644 index 0a58203a10..0000000000 --- a/sysdeps/powerpc/atomic-machine.h +++ /dev/null @@ -1,339 +0,0 @@ -/* Atomic operations. PowerPC Common version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Paul Mackerras , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * Never include sysdeps/powerpc/atomic-machine.h directly. - * Alway use include/atomic.h which will include either - * sysdeps/powerpc/powerpc32/atomic-machine.h - * or - * sysdeps/powerpc/powerpc64/atomic-machine.h - * as appropriate and which in turn include this file. - */ - -#include - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -/* - * Powerpc does not have byte and halfword forms of load and reserve and - * store conditional. So for powerpc we stub out the 8- and 16-bit forms. - */ -#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval) \ - (abort (), 0) - -#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval) \ - (abort (), 0) - -#ifdef UP -# define __ARCH_ACQ_INSTR "" -# define __ARCH_REL_INSTR "" -#else -# define __ARCH_ACQ_INSTR "isync" -# ifndef __ARCH_REL_INSTR -# define __ARCH_REL_INSTR "sync" -# endif -#endif - -#ifndef MUTEX_HINT_ACQ -# define MUTEX_HINT_ACQ -#endif -#ifndef MUTEX_HINT_REL -# define MUTEX_HINT_REL -#endif - -#define atomic_full_barrier() __asm ("sync" ::: "memory") - -#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - ({ \ - __typeof (*(mem)) __tmp; \ - __typeof (mem) __memp = (mem); \ - __asm __volatile ( \ - "1: lwarx %0,0,%1" MUTEX_HINT_ACQ "\n" \ - " cmpw %0,%2\n" \ - " bne 2f\n" \ - " stwcx. %3,0,%1\n" \ - " bne- 1b\n" \ - "2: " __ARCH_ACQ_INSTR \ - : "=&r" (__tmp) \ - : "b" (__memp), "r" (oldval), "r" (newval) \ - : "cr0", "memory"); \ - __tmp; \ - }) - -#define __arch_compare_and_exchange_val_32_rel(mem, newval, oldval) \ - ({ \ - __typeof (*(mem)) __tmp; \ - __typeof (mem) __memp = (mem); \ - __asm __volatile (__ARCH_REL_INSTR "\n" \ - "1: lwarx %0,0,%1" MUTEX_HINT_REL "\n" \ - " cmpw %0,%2\n" \ - " bne 2f\n" \ - " stwcx. %3,0,%1\n" \ - " bne- 1b\n" \ - "2: " \ - : "=&r" (__tmp) \ - : "b" (__memp), "r" (oldval), "r" (newval) \ - : "cr0", "memory"); \ - __tmp; \ - }) - -#define __arch_atomic_exchange_32_acq(mem, value) \ - ({ \ - __typeof (*mem) __val; \ - __asm __volatile ( \ - "1: lwarx %0,0,%2" MUTEX_HINT_ACQ "\n" \ - " stwcx. %3,0,%2\n" \ - " bne- 1b\n" \ - " " __ARCH_ACQ_INSTR \ - : "=&r" (__val), "=m" (*mem) \ - : "b" (mem), "r" (value), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define __arch_atomic_exchange_32_rel(mem, value) \ - ({ \ - __typeof (*mem) __val; \ - __asm __volatile (__ARCH_REL_INSTR "\n" \ - "1: lwarx %0,0,%2" MUTEX_HINT_REL "\n" \ - " stwcx. %3,0,%2\n" \ - " bne- 1b" \ - : "=&r" (__val), "=m" (*mem) \ - : "b" (mem), "r" (value), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define __arch_atomic_exchange_and_add_32(mem, value) \ - ({ \ - __typeof (*mem) __val, __tmp; \ - __asm __volatile ("1: lwarx %0,0,%3\n" \ - " add %1,%0,%4\n" \ - " stwcx. %1,0,%3\n" \ - " bne- 1b" \ - : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \ - : "b" (mem), "r" (value), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define __arch_atomic_exchange_and_add_32_acq(mem, value) \ - ({ \ - __typeof (*mem) __val, __tmp; \ - __asm __volatile ("1: lwarx %0,0,%3" MUTEX_HINT_ACQ "\n" \ - " add %1,%0,%4\n" \ - " stwcx. %1,0,%3\n" \ - " bne- 1b\n" \ - __ARCH_ACQ_INSTR \ - : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \ - : "b" (mem), "r" (value), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define __arch_atomic_exchange_and_add_32_rel(mem, value) \ - ({ \ - __typeof (*mem) __val, __tmp; \ - __asm __volatile (__ARCH_REL_INSTR "\n" \ - "1: lwarx %0,0,%3" MUTEX_HINT_REL "\n" \ - " add %1,%0,%4\n" \ - " stwcx. %1,0,%3\n" \ - " bne- 1b" \ - : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \ - : "b" (mem), "r" (value), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define __arch_atomic_increment_val_32(mem) \ - ({ \ - __typeof (*(mem)) __val; \ - __asm __volatile ("1: lwarx %0,0,%2\n" \ - " addi %0,%0,1\n" \ - " stwcx. %0,0,%2\n" \ - " bne- 1b" \ - : "=&b" (__val), "=m" (*mem) \ - : "b" (mem), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define __arch_atomic_decrement_val_32(mem) \ - ({ \ - __typeof (*(mem)) __val; \ - __asm __volatile ("1: lwarx %0,0,%2\n" \ - " subi %0,%0,1\n" \ - " stwcx. %0,0,%2\n" \ - " bne- 1b" \ - : "=&b" (__val), "=m" (*mem) \ - : "b" (mem), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define __arch_atomic_decrement_if_positive_32(mem) \ - ({ int __val, __tmp; \ - __asm __volatile ("1: lwarx %0,0,%3\n" \ - " cmpwi 0,%0,0\n" \ - " addi %1,%0,-1\n" \ - " ble 2f\n" \ - " stwcx. %1,0,%3\n" \ - " bne- 1b\n" \ - "2: " __ARCH_ACQ_INSTR \ - : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \ - : "b" (mem), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*mem) == 4) \ - __result = __arch_compare_and_exchange_val_32_acq(mem, newval, oldval); \ - else if (sizeof (*mem) == 8) \ - __result = __arch_compare_and_exchange_val_64_acq(mem, newval, oldval); \ - else \ - abort (); \ - __result; \ - }) - -#define atomic_compare_and_exchange_val_rel(mem, newval, oldval) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*mem) == 4) \ - __result = __arch_compare_and_exchange_val_32_rel(mem, newval, oldval); \ - else if (sizeof (*mem) == 8) \ - __result = __arch_compare_and_exchange_val_64_rel(mem, newval, oldval); \ - else \ - abort (); \ - __result; \ - }) - -#define atomic_exchange_acq(mem, value) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*mem) == 4) \ - __result = __arch_atomic_exchange_32_acq (mem, value); \ - else if (sizeof (*mem) == 8) \ - __result = __arch_atomic_exchange_64_acq (mem, value); \ - else \ - abort (); \ - __result; \ - }) - -#define atomic_exchange_rel(mem, value) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*mem) == 4) \ - __result = __arch_atomic_exchange_32_rel (mem, value); \ - else if (sizeof (*mem) == 8) \ - __result = __arch_atomic_exchange_64_rel (mem, value); \ - else \ - abort (); \ - __result; \ - }) - -#define atomic_exchange_and_add(mem, value) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*mem) == 4) \ - __result = __arch_atomic_exchange_and_add_32 (mem, value); \ - else if (sizeof (*mem) == 8) \ - __result = __arch_atomic_exchange_and_add_64 (mem, value); \ - else \ - abort (); \ - __result; \ - }) -#define atomic_exchange_and_add_acq(mem, value) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*mem) == 4) \ - __result = __arch_atomic_exchange_and_add_32_acq (mem, value); \ - else if (sizeof (*mem) == 8) \ - __result = __arch_atomic_exchange_and_add_64_acq (mem, value); \ - else \ - abort (); \ - __result; \ - }) -#define atomic_exchange_and_add_rel(mem, value) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*mem) == 4) \ - __result = __arch_atomic_exchange_and_add_32_rel (mem, value); \ - else if (sizeof (*mem) == 8) \ - __result = __arch_atomic_exchange_and_add_64_rel (mem, value); \ - else \ - abort (); \ - __result; \ - }) - -#define atomic_increment_val(mem) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*(mem)) == 4) \ - __result = __arch_atomic_increment_val_32 (mem); \ - else if (sizeof (*(mem)) == 8) \ - __result = __arch_atomic_increment_val_64 (mem); \ - else \ - abort (); \ - __result; \ - }) - -#define atomic_increment(mem) ({ atomic_increment_val (mem); (void) 0; }) - -#define atomic_decrement_val(mem) \ - ({ \ - __typeof (*(mem)) __result; \ - if (sizeof (*(mem)) == 4) \ - __result = __arch_atomic_decrement_val_32 (mem); \ - else if (sizeof (*(mem)) == 8) \ - __result = __arch_atomic_decrement_val_64 (mem); \ - else \ - abort (); \ - __result; \ - }) - -#define atomic_decrement(mem) ({ atomic_decrement_val (mem); (void) 0; }) - - -/* Decrement *MEM if it is > 0, and return the old value. */ -#define atomic_decrement_if_positive(mem) \ - ({ __typeof (*(mem)) __result; \ - if (sizeof (*mem) == 4) \ - __result = __arch_atomic_decrement_if_positive_32 (mem); \ - else if (sizeof (*mem) == 8) \ - __result = __arch_atomic_decrement_if_positive_64 (mem); \ - else \ - abort (); \ - __result; \ - }) diff --git a/sysdeps/powerpc/bits/endian.h b/sysdeps/powerpc/bits/endian.h deleted file mode 100644 index db150e9efc..0000000000 --- a/sysdeps/powerpc/bits/endian.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* PowerPC can be little or big endian. Hopefully gcc will know... */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#if defined __BIG_ENDIAN__ || defined _BIG_ENDIAN -# if defined __LITTLE_ENDIAN__ || defined _LITTLE_ENDIAN -# error Both BIG_ENDIAN and LITTLE_ENDIAN defined! -# endif -# define __BYTE_ORDER __BIG_ENDIAN -#else -# if defined __LITTLE_ENDIAN__ || defined _LITTLE_ENDIAN -# define __BYTE_ORDER __LITTLE_ENDIAN -# else -# warning Cannot determine current byte order, assuming big-endian. -# define __BYTE_ORDER __BIG_ENDIAN -# endif -#endif diff --git a/sysdeps/powerpc/bits/fenv.h b/sysdeps/powerpc/bits/fenv.h deleted file mode 100644 index c279b484f5..0000000000 --- a/sysdeps/powerpc/bits/fenv.h +++ /dev/null @@ -1,180 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - - -/* Define bits representing the exception. We use the bit positions of - the appropriate bits in the FPSCR... */ -enum - { - FE_INEXACT = -#define FE_INEXACT (1 << (31 - 6)) - FE_INEXACT, - FE_DIVBYZERO = -#define FE_DIVBYZERO (1 << (31 - 5)) - FE_DIVBYZERO, - FE_UNDERFLOW = -#define FE_UNDERFLOW (1 << (31 - 4)) - FE_UNDERFLOW, - FE_OVERFLOW = -#define FE_OVERFLOW (1 << (31 - 3)) - FE_OVERFLOW, - - /* ... except for FE_INVALID, for which we use bit 31. FE_INVALID - actually corresponds to bits 7 through 12 and 21 through 23 - in the FPSCR, but we can't use that because the current draft - says that it must be a power of 2. Instead we use bit 2 which - is the summary bit for all the FE_INVALID exceptions, which - kind of makes sense. */ - FE_INVALID = -#define FE_INVALID (1 << (31 - 2)) - FE_INVALID, - -#ifdef __USE_GNU - /* Breakdown of the FE_INVALID bits. Setting FE_INVALID on an - input to a routine is equivalent to setting all of these bits; - FE_INVALID will be set on output from a routine iff one of - these bits is set. Note, though, that you can't disable or - enable these exceptions individually. */ - - /* Operation with a sNaN. */ - FE_INVALID_SNAN = -# define FE_INVALID_SNAN (1 << (31 - 7)) - FE_INVALID_SNAN, - - /* Inf - Inf */ - FE_INVALID_ISI = -# define FE_INVALID_ISI (1 << (31 - 8)) - FE_INVALID_ISI, - - /* Inf / Inf */ - FE_INVALID_IDI = -# define FE_INVALID_IDI (1 << (31 - 9)) - FE_INVALID_IDI, - - /* 0 / 0 */ - FE_INVALID_ZDZ = -# define FE_INVALID_ZDZ (1 << (31 - 10)) - FE_INVALID_ZDZ, - - /* Inf * 0 */ - FE_INVALID_IMZ = -# define FE_INVALID_IMZ (1 << (31 - 11)) - FE_INVALID_IMZ, - - /* Comparison with a NaN. */ - FE_INVALID_COMPARE = -# define FE_INVALID_COMPARE (1 << (31 - 12)) - FE_INVALID_COMPARE, - - /* Invalid operation flag for software (not set by hardware). */ - /* Note that some chips don't have this implemented, presumably - because no-one expected anyone to write software for them %-). */ - FE_INVALID_SOFTWARE = -# define FE_INVALID_SOFTWARE (1 << (31 - 21)) - FE_INVALID_SOFTWARE, - - /* Square root of negative number (including -Inf). */ - /* Note that some chips don't have this implemented. */ - FE_INVALID_SQRT = -# define FE_INVALID_SQRT (1 << (31 - 22)) - FE_INVALID_SQRT, - - /* Conversion-to-integer of a NaN or a number too large or too small. */ - FE_INVALID_INTEGER_CONVERSION = -# define FE_INVALID_INTEGER_CONVERSION (1 << (31 - 23)) - FE_INVALID_INTEGER_CONVERSION - -# define FE_ALL_INVALID \ - (FE_INVALID_SNAN | FE_INVALID_ISI | FE_INVALID_IDI | FE_INVALID_ZDZ \ - | FE_INVALID_IMZ | FE_INVALID_COMPARE | FE_INVALID_SOFTWARE \ - | FE_INVALID_SQRT | FE_INVALID_INTEGER_CONVERSION) -#endif - }; - -#define FE_ALL_EXCEPT \ - (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) - -/* PowerPC chips support all of the four defined rounding modes. We - use the bit pattern in the FPSCR as the values for the - appropriate macros. */ -enum - { - FE_TONEAREST = -#define FE_TONEAREST 0 - FE_TONEAREST, - FE_TOWARDZERO = -#define FE_TOWARDZERO 1 - FE_TOWARDZERO, - FE_UPWARD = -#define FE_UPWARD 2 - FE_UPWARD, - FE_DOWNWARD = -#define FE_DOWNWARD 3 - FE_DOWNWARD - }; - -/* Type representing exception flags. */ -typedef unsigned int fexcept_t; - -/* Type representing floating-point environment. We leave it as 'double' - for efficiency reasons (rather than writing it to a 32-bit integer). */ -typedef double fenv_t; - -/* If the default argument is used we use this value. */ -extern const fenv_t __fe_dfl_env; -#define FE_DFL_ENV (&__fe_dfl_env) - -#ifdef __USE_GNU -/* Floating-point environment where all exceptions are enabled. Note that - this is not sufficient to give you SIGFPE. */ -extern const fenv_t __fe_enabled_env; -# define FE_ENABLED_ENV (&__fe_enabled_env) - -/* Floating-point environment with (processor-dependent) non-IEEE floating - point. */ -extern const fenv_t __fe_nonieee_env; -# define FE_NONIEEE_ENV (&__fe_nonieee_env) - -/* Floating-point environment with all exceptions enabled. Note that - just evaluating this value does not change the processor exception mode. - Passing this mask to fesetenv will result in a prctl syscall to change - the MSR FE0/FE1 bits to "Precise Mode". On some processors this will - result in slower floating point execution. This will last until an - fenv or exception mask is installed that disables all FP exceptions. */ -# define FE_NOMASK_ENV FE_ENABLED_ENV - -/* Floating-point environment with all exceptions disabled. Note that - just evaluating this value does not change the processor exception mode. - Passing this mask to fesetenv will result in a prctl syscall to change - the MSR FE0/FE1 bits to "Ignore Exceptions Mode". On most processors - this allows the fastest possible floating point execution.*/ -# define FE_MASK_ENV FE_DFL_ENV - -#endif - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef double femode_t; - -/* Default floating-point control modes. */ -extern const femode_t __fe_dfl_mode; -# define FE_DFL_MODE (&__fe_dfl_mode) -#endif diff --git a/sysdeps/powerpc/bits/fenvinline.h b/sysdeps/powerpc/bits/fenvinline.h deleted file mode 100644 index 4110bdfbbf..0000000000 --- a/sysdeps/powerpc/bits/fenvinline.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Inline floating-point environment handling functions for powerpc. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined __GNUC__ && !defined _SOFT_FLOAT && !defined __NO_FPRS__ - -/* Inline definition for fegetround. */ -# define __fegetround() \ - (__extension__ ({ int __fegetround_result; \ - __asm__ __volatile__ \ - ("mcrfs 7,7 ; mfcr %0" \ - : "=r"(__fegetround_result) : : "cr7"); \ - __fegetround_result & 3; })) -# define fegetround() __fegetround () - -# ifndef __NO_MATH_INLINES -/* The weird 'i#*X' constraints on the following suppress a gcc - warning when __excepts is not a constant. Otherwise, they mean the - same as just plain 'i'. */ - -# if __GNUC_PREREQ(3, 4) - -/* Inline definition for feraiseexcept. */ -# define feraiseexcept(__excepts) \ - (__extension__ ({ \ - int __e = __excepts; \ - int __ret; \ - if (__builtin_constant_p (__e) \ - && (__e & (__e - 1)) == 0 \ - && __e != FE_INVALID) \ - { \ - if (__e != 0) \ - __asm__ __volatile__ ("mtfsb1 %0" \ - : : "i#*X" (__builtin_clz (__e))); \ - __ret = 0; \ - } \ - else \ - __ret = feraiseexcept (__e); \ - __ret; \ - })) - -/* Inline definition for feclearexcept. */ -# define feclearexcept(__excepts) \ - (__extension__ ({ \ - int __e = __excepts; \ - int __ret; \ - if (__builtin_constant_p (__e) \ - && (__e & (__e - 1)) == 0 \ - && __e != FE_INVALID) \ - { \ - if (__e != 0) \ - __asm__ __volatile__ ("mtfsb0 %0" \ - : : "i#*X" (__builtin_clz (__e))); \ - __ret = 0; \ - } \ - else \ - __ret = feclearexcept (__e); \ - __ret; \ - })) - -# endif /* __GNUC_PREREQ(3, 4). */ - -# endif /* !__NO_MATH_INLINES. */ - -#endif /* __GNUC__ && !_SOFT_FLOAT && !__NO_FPRS__ */ diff --git a/sysdeps/powerpc/bits/fp-fast.h b/sysdeps/powerpc/bits/fp-fast.h deleted file mode 100644 index 9faf1b7c51..0000000000 --- a/sysdeps/powerpc/bits/fp-fast.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Define FP_FAST_* macros. PowerPC version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#ifdef __USE_ISOC99 - -/* The GCC 4.6 compiler will define __FP_FAST_FMA{,F,L} if the fma{,f,l} - builtins are supported. */ -# if (!defined _SOFT_FLOAT && !defined __NO_FPRS__) || defined __FP_FAST_FMA -# define FP_FAST_FMA 1 -# endif - -# if (!defined _SOFT_FLOAT && !defined __NO_FPRS__) || defined __FP_FAST_FMAF -# define FP_FAST_FMAF 1 -# endif - -# ifdef __FP_FAST_FMAL -# define FP_FAST_FMAL 1 -# endif - -#endif diff --git a/sysdeps/powerpc/bits/hwcap.h b/sysdeps/powerpc/bits/hwcap.h deleted file mode 100644 index c9daeedfde..0000000000 --- a/sysdeps/powerpc/bits/hwcap.h +++ /dev/null @@ -1,71 +0,0 @@ -/* Defines for bits in AT_HWCAP and AT_HWCAP2. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined(_SYS_AUXV_H) && !defined(_SYSDEPS_SYSDEP_H) -# error "Never include directly; use instead." -#endif - -/* The bit numbers must match those in the kernel's asm/cputable.h. */ - -/* Feature definitions in AT_HWCAP. */ -#define PPC_FEATURE_32 0x80000000 /* 32-bit mode. */ -#define PPC_FEATURE_64 0x40000000 /* 64-bit mode. */ -#define PPC_FEATURE_601_INSTR 0x20000000 /* 601 chip, Old POWER ISA. */ -#define PPC_FEATURE_HAS_ALTIVEC 0x10000000 /* SIMD/Vector Unit. */ -#define PPC_FEATURE_HAS_FPU 0x08000000 /* Floating Point Unit. */ -#define PPC_FEATURE_HAS_MMU 0x04000000 /* Memory Management Unit. */ -#define PPC_FEATURE_HAS_4xxMAC 0x02000000 /* 4xx Multiply Accumulator. */ -#define PPC_FEATURE_UNIFIED_CACHE 0x01000000 /* Unified I/D cache. */ -#define PPC_FEATURE_HAS_SPE 0x00800000 /* Signal Processing ext. */ -#define PPC_FEATURE_HAS_EFP_SINGLE 0x00400000 /* SPE Float. */ -#define PPC_FEATURE_HAS_EFP_DOUBLE 0x00200000 /* SPE Double. */ -#define PPC_FEATURE_NO_TB 0x00100000 /* 601/403gx have no timebase */ -#define PPC_FEATURE_POWER4 0x00080000 /* POWER4 ISA 2.00 */ -#define PPC_FEATURE_POWER5 0x00040000 /* POWER5 ISA 2.02 */ -#define PPC_FEATURE_POWER5_PLUS 0x00020000 /* POWER5+ ISA 2.03 */ -#define PPC_FEATURE_CELL_BE 0x00010000 /* CELL Broadband Engine */ -#define PPC_FEATURE_BOOKE 0x00008000 /* ISA Category Embedded */ -#define PPC_FEATURE_SMT 0x00004000 /* Simultaneous - Multi-Threading */ -#define PPC_FEATURE_ICACHE_SNOOP 0x00002000 -#define PPC_FEATURE_ARCH_2_05 0x00001000 /* ISA 2.05 */ -#define PPC_FEATURE_PA6T 0x00000800 /* PA Semi 6T Core */ -#define PPC_FEATURE_HAS_DFP 0x00000400 /* Decimal FP Unit */ -#define PPC_FEATURE_POWER6_EXT 0x00000200 /* P6 + mffgpr/mftgpr */ -#define PPC_FEATURE_ARCH_2_06 0x00000100 /* ISA 2.06 */ -#define PPC_FEATURE_HAS_VSX 0x00000080 /* P7 Vector Extension. */ -#define PPC_FEATURE_PSERIES_PERFMON_COMPAT 0x00000040 -#define PPC_FEATURE_TRUE_LE 0x00000002 -#define PPC_FEATURE_PPC_LE 0x00000001 - -/* Feature definitions in AT_HWCAP2. */ -#define PPC_FEATURE2_ARCH_2_07 0x80000000 /* ISA 2.07 */ -#define PPC_FEATURE2_HAS_HTM 0x40000000 /* Hardware Transactional - Memory */ -#define PPC_FEATURE2_HAS_DSCR 0x20000000 /* Data Stream Control - Register */ -#define PPC_FEATURE2_HAS_EBB 0x10000000 /* Event Base Branching */ -#define PPC_FEATURE2_HAS_ISEL 0x08000000 /* Integer Select */ -#define PPC_FEATURE2_HAS_TAR 0x04000000 /* Target Address Register */ -#define PPC_FEATURE2_HAS_VEC_CRYPTO 0x02000000 /* Target supports vector - instruction. */ -#define PPC_FEATURE2_HTM_NOSC 0x01000000 /* Kernel aborts transaction - when a syscall is made. */ -#define PPC_FEATURE2_ARCH_3_00 0x00800000 /* ISA 3.0 */ -#define PPC_FEATURE2_HAS_IEEE128 0x00400000 /* VSX IEEE Binary Float - 128-bit */ diff --git a/sysdeps/powerpc/bits/link.h b/sysdeps/powerpc/bits/link.h deleted file mode 100644 index 1cab121a65..0000000000 --- a/sysdeps/powerpc/bits/link.h +++ /dev/null @@ -1,156 +0,0 @@ -/* Machine-specific declarations for dynamic linker interface. PowerPC version - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - - -#if __ELF_NATIVE_CLASS == 32 - -/* Registers for entry into PLT on PPC32. */ -typedef struct La_ppc32_regs -{ - uint32_t lr_reg[8]; - double lr_fp[8]; - uint32_t lr_vreg[12][4]; - uint32_t lr_r1; - uint32_t lr_lr; -} La_ppc32_regs; - -/* Return values for calls from PLT on PPC32. */ -typedef struct La_ppc32_retval -{ - uint32_t lrv_r3; - uint32_t lrv_r4; - double lrv_fp[8]; - uint32_t lrv_v2[4]; -} La_ppc32_retval; - - -__BEGIN_DECLS - -extern Elf32_Addr la_ppc32_gnu_pltenter (Elf32_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_ppc32_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_ppc32_gnu_pltexit (Elf32_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_ppc32_regs *__inregs, - La_ppc32_retval *__outregs, - const char *__symname); - -__END_DECLS - -#elif __ELF_NATIVE_CLASS == 64 -# if _CALL_ELF != 2 - -/* Registers for entry into PLT on PPC64. */ -typedef struct La_ppc64_regs -{ - uint64_t lr_reg[8]; - double lr_fp[13]; - uint32_t __padding; - uint32_t lr_vrsave; - uint32_t lr_vreg[12][4]; - uint64_t lr_r1; - uint64_t lr_lr; -} La_ppc64_regs; - -/* Return values for calls from PLT on PPC64. */ -typedef struct La_ppc64_retval -{ - uint64_t lrv_r3; - uint64_t lrv_r4; - double lrv_fp[4]; /* f1-f4, float - complex long double. */ - uint32_t lrv_v2[4]; /* v2. */ -} La_ppc64_retval; - - -__BEGIN_DECLS - -extern Elf64_Addr la_ppc64_gnu_pltenter (Elf64_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_ppc64_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_ppc64_gnu_pltexit (Elf64_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_ppc64_regs *__inregs, - La_ppc64_retval *__outregs, - const char *__symname); - -__END_DECLS - -# else - -/* Registers for entry into PLT on PPC64 in the ELFv2 ABI. */ -typedef struct La_ppc64v2_regs -{ - uint64_t lr_reg[8]; - double lr_fp[13]; - uint32_t __padding; - uint32_t lr_vrsave; - uint32_t lr_vreg[12][4] __attribute__ ((aligned (16))); - uint64_t lr_r1; - uint64_t lr_lr; -} La_ppc64v2_regs; - -/* Return values for calls from PLT on PPC64 in the ELFv2 ABI. */ -typedef struct La_ppc64v2_retval -{ - uint64_t lrv_r3; - uint64_t lrv_r4; - double lrv_fp[10]; - uint32_t lrv_vreg[8][4] __attribute__ ((aligned (16))); -} La_ppc64v2_retval; - - -__BEGIN_DECLS - -extern Elf64_Addr la_ppc64v2_gnu_pltenter (Elf64_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_ppc64v2_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_ppc64v2_gnu_pltexit (Elf64_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_ppc64v2_regs *__inregs, - La_ppc64v2_retval *__outregs, - const char *__symname); - -__END_DECLS - -# endif -#endif diff --git a/sysdeps/powerpc/bits/mathinline.h b/sysdeps/powerpc/bits/mathinline.h deleted file mode 100644 index e5f0cd30f2..0000000000 --- a/sysdeps/powerpc/bits/mathinline.h +++ /dev/null @@ -1,132 +0,0 @@ -/* Inline math functions for powerpc. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#ifndef __extern_inline -# define __MATH_INLINE __inline -#else -# define __MATH_INLINE __extern_inline -#endif /* __cplusplus */ - -#if defined __GNUC__ && !defined _SOFT_FLOAT && !defined __NO_FPRS__ - -#ifdef __USE_ISOC99 -# if !__GNUC_PREREQ (2,97) -# define __unordered_cmp(x, y) \ - (__extension__ \ - ({ __typeof__(x) __x = (x); __typeof__(y) __y = (y); \ - unsigned __r; \ - __asm__("fcmpu 7,%1,%2 ; mfcr %0" : "=r" (__r) : "f" (__x), "f"(__y) \ - : "cr7"); \ - __r; })) - -# undef isgreater -# undef isgreaterequal -# undef isless -# undef islessequal -# undef islessgreater -# undef isunordered - -# define isgreater(x, y) (__unordered_cmp (x, y) >> 2 & 1) -# define isgreaterequal(x, y) ((__unordered_cmp (x, y) & 6) != 0) -# define isless(x, y) (__unordered_cmp (x, y) >> 3 & 1) -# define islessequal(x, y) ((__unordered_cmp (x, y) & 0xA) != 0) -# define islessgreater(x, y) ((__unordered_cmp (x, y) & 0xC) != 0) -# define isunordered(x, y) (__unordered_cmp (x, y) & 1) - -# endif /* __GNUC_PREREQ (2,97) */ - -/* The gcc, version 2.7 or below, has problems with all this inlining - code. So disable it for this version of the compiler. */ -# if __GNUC_PREREQ (2, 8) -/* Test for negative number. Used in the signbit() macro. */ -__MATH_INLINE int -__NTH (__signbitf (float __x)) -{ -#if __GNUC_PREREQ (4, 0) - return __builtin_signbitf (__x); -#else - __extension__ union { float __f; int __i; } __u = { __f: __x }; - return __u.__i < 0; -#endif -} -__MATH_INLINE int -__NTH (__signbit (double __x)) -{ -#if __GNUC_PREREQ (4, 0) - return __builtin_signbit (__x); -#else - __extension__ union { double __d; long long __i; } __u = { __d: __x }; - return __u.__i < 0; -#endif -} -# ifdef __LONG_DOUBLE_128__ -__MATH_INLINE int -__NTH (__signbitl (long double __x)) -{ - return __signbit ((double) __x); -} -# endif -# endif -#endif /* __USE_ISOC99 */ - -#if !defined __NO_MATH_INLINES && defined __OPTIMIZE__ - -#ifdef __USE_ISOC99 - -# ifndef __powerpc64__ -__MATH_INLINE long int lrint (double __x) __THROW; -__MATH_INLINE long int -__NTH (lrint (double __x)) -{ - union { - double __d; - long long __ll; - } __u; - __asm__ ("fctiw %0,%1" : "=f"(__u.__d) : "f"(__x)); - return __u.__ll; -} - -__MATH_INLINE long int lrintf (float __x) __THROW; -__MATH_INLINE long int -__NTH (lrintf (float __x)) -{ - return lrint ((double) __x); -} -# endif - -__MATH_INLINE double fdim (double __x, double __y) __THROW; -__MATH_INLINE double -__NTH (fdim (double __x, double __y)) -{ - return __x <= __y ? 0 : __x - __y; -} - -__MATH_INLINE float fdimf (float __x, float __y) __THROW; -__MATH_INLINE float -__NTH (fdimf (float __x, float __y)) -{ - return __x <= __y ? 0 : __x - __y; -} - -#endif /* __USE_ISOC99 */ -#endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */ -#endif /* __GNUC__ && !_SOFT_FLOAT && !__NO_FPRS__ */ diff --git a/sysdeps/powerpc/bits/setjmp.h b/sysdeps/powerpc/bits/setjmp.h deleted file mode 100644 index 02568951e9..0000000000 --- a/sysdeps/powerpc/bits/setjmp.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define the machine-dependent type `jmp_buf'. PowerPC version. */ -#ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include directly; use instead." -#endif - -/* The previous bits/setjmp.h had __jmp_buf defined as a structure. - We use an array of 'long int' instead, to make writing the - assembler easier. Naturally, user code should not depend on - either representation. */ - -#include - -/* The current powerpc 32-bit Altivec ABI specifies for SVR4 ABI and EABI - the vrsave must be at byte 248 & v20 at byte 256. So we must pad this - correctly on 32 bit. It also insists that vecregs are only gauranteed - 4 byte alignment so we need to use vperm in the setjmp/longjmp routines. - We have to version the code because members like int __mask_was_saved - in the jmp_buf will move as jmp_buf is now larger than 248 bytes. We - cannot keep the altivec jmp_buf backward compatible with the jmp_buf. */ -#ifndef _ASM -# if __WORDSIZE == 64 -typedef long int __jmp_buf[64] __attribute__ ((__aligned__ (16))); -# else -/* The alignment is not essential, i.e.the buffer can be copied to a 4 byte - aligned buffer as per the ABI it is just added for performance reasons. */ -typedef long int __jmp_buf[64 + (12 * 4)] __attribute__ ((__aligned__ (16))); -# endif -#endif - -#endif /* bits/setjmp.h */ diff --git a/sysdeps/powerpc/dl-procinfo.c b/sysdeps/powerpc/dl-procinfo.c deleted file mode 100644 index cd7329b84e..0000000000 --- a/sysdeps/powerpc/dl-procinfo.c +++ /dev/null @@ -1,77 +0,0 @@ -/* Data for processor capability information. PowerPC version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This information must be kept in sync with the _DL_HWCAP_COUNT - definition in procinfo.h. - - If anything should be added here check whether the size of each string - is still ok with the given array size. - - All the #ifdefs in the definitions are quite irritating but - necessary if we want to avoid duplicating the information. There - are three different modes: - - - PROCINFO_DECL is defined. This means we are only interested in - declarations. - - - PROCINFO_DECL is not defined: - - + if SHARED is defined the file is included in an array - initializer. The .element = { ... } syntax is needed. - - + if SHARED is not defined a normal array initialization is - needed. - */ - -#ifndef PROCINFO_CLASS -# define PROCINFO_CLASS -#endif - -#if !defined PROCINFO_DECL && defined SHARED - ._dl_powerpc_cap_flags -#else -PROCINFO_CLASS const char _dl_powerpc_cap_flags[64][10] -#endif -#ifndef PROCINFO_DECL -= { - "ppcle", "true_le", "", "", - "", "", "archpmu", "vsx", - "arch_2_06", "power6x", "dfp", "pa6t", - "arch_2_05", "ic_snoop", "smt", "booke", - "cellbe", "power5+", "power5", "power4", - "notb", "efpdouble", "efpsingle", "spe", - "ucache", "4xxmac", "mmu", "fpu", - "altivec", "ppc601", "ppc64", "ppc32", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "", "", - "", "", "ieee128", "arch_3_00", - "htm-nosc", "vcrypto", "tar", "isel", - "ebb", "dscr", "htm", "arch_2_07", - } -#endif -#if !defined SHARED || defined PROCINFO_DECL -; -#else -, -#endif - -#undef PROCINFO_DECL -#undef PROCINFO_CLASS diff --git a/sysdeps/powerpc/dl-procinfo.h b/sysdeps/powerpc/dl-procinfo.h deleted file mode 100644 index 216d20fbff..0000000000 --- a/sysdeps/powerpc/dl-procinfo.h +++ /dev/null @@ -1,185 +0,0 @@ -/* Processor capability information handling macros. PowerPC version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _DL_PROCINFO_H -#define _DL_PROCINFO_H 1 - -#include -#include /* This defines the PPC_FEATURE[2]_* macros. */ - -/* The total number of available bits (including those prior to - _DL_HWCAP_FIRST). Some of these bits might not be used. */ -#define _DL_HWCAP_COUNT 64 - -/* Features started at bit 31 and decremented as new features were added. */ -#define _DL_HWCAP_LAST 31 - -/* AT_HWCAP2 features started at bit 31 and decremented as new features were - added. HWCAP2 feature bits start at bit 0. */ -#define _DL_HWCAP2_LAST 31 - -/* These bits influence library search. */ -#define HWCAP_IMPORTANT (PPC_FEATURE_HAS_ALTIVEC \ - + PPC_FEATURE_HAS_DFP) - -#define _DL_PLATFORMS_COUNT 15 - -#define _DL_FIRST_PLATFORM 32 -/* Mask to filter out platforms. */ -#define _DL_HWCAP_PLATFORM (((1ULL << _DL_PLATFORMS_COUNT) - 1) \ - << _DL_FIRST_PLATFORM) - -/* Platform bits (relative to _DL_FIRST_PLATFORM). */ -#define PPC_PLATFORM_POWER4 0 -#define PPC_PLATFORM_PPC970 1 -#define PPC_PLATFORM_POWER5 2 -#define PPC_PLATFORM_POWER5_PLUS 3 -#define PPC_PLATFORM_POWER6 4 -#define PPC_PLATFORM_CELL_BE 5 -#define PPC_PLATFORM_POWER6X 6 -#define PPC_PLATFORM_POWER7 7 -#define PPC_PLATFORM_PPCA2 8 -#define PPC_PLATFORM_PPC405 9 -#define PPC_PLATFORM_PPC440 10 -#define PPC_PLATFORM_PPC464 11 -#define PPC_PLATFORM_PPC476 12 -#define PPC_PLATFORM_POWER8 13 -#define PPC_PLATFORM_POWER9 14 - -static inline const char * -__attribute__ ((unused)) -_dl_hwcap_string (int idx) -{ - return GLRO(dl_powerpc_cap_flags)[idx]; -} - -static inline int -__attribute__ ((unused)) -_dl_string_hwcap (const char *str) -{ - for (int i = 0; i < _DL_HWCAP_COUNT; ++i) - if (strcmp (str, _dl_hwcap_string (i)) == 0) - return i; - return -1; -} - -static inline int -__attribute__ ((unused, always_inline)) -_dl_string_platform (const char *str) -{ - if (str == NULL) - return -1; - - if (strncmp (str, "power", 5) == 0) - { - int ret; - str += 5; - switch (*str) - { - case '4': - ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER4; - break; - case '5': - ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER5; - if (str[1] == '+') - { - ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER5_PLUS; - ++str; - } - break; - case '6': - ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER6; - if (str[1] == 'x') - { - ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER6X; - ++str; - } - break; - case '7': - ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER7; - break; - case '8': - ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER8; - break; - case '9': - ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER9; - break; - default: - return -1; - } - if (str[1] == '\0') - return ret; - } - else if (strncmp (str, "ppc", 3) == 0) - { - if (strcmp (str + 3, "970") == 0) - return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC970; - else if (strcmp (str + 3, "-cell-be") == 0) - return _DL_FIRST_PLATFORM + PPC_PLATFORM_CELL_BE; - else if (strcmp (str + 3, "a2") == 0) - return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPCA2; - else if (strcmp (str + 3, "405") == 0) - return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC405; - else if (strcmp (str + 3, "440") == 0) - return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC440; - else if (strcmp (str + 3, "464") == 0) - return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC464; - else if (strcmp (str + 3, "476") == 0) - return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC476; - } - - return -1; -} - -#if IS_IN (rtld) -static inline int -__attribute__ ((unused)) -_dl_procinfo (unsigned int type, unsigned long int word) -{ - switch(type) - { - case AT_HWCAP: - _dl_printf ("AT_HWCAP: "); - - for (int i = 0; i <= _DL_HWCAP_LAST; ++i) - if (word & (1 << i)) - _dl_printf (" %s", _dl_hwcap_string (i)); - break; - case AT_HWCAP2: - { - unsigned int offset = _DL_HWCAP_LAST + 1; - - _dl_printf ("AT_HWCAP2: "); - - /* We have to go through them all because the kernel added the - AT_HWCAP2 features starting with the high bits. */ - for (int i = 0; i <= _DL_HWCAP2_LAST; ++i) - if (word & (1 << i)) - _dl_printf (" %s", _dl_hwcap_string (offset + i)); - break; - } - default: - /* This should not happen. */ - return -1; - } - _dl_printf ("\n"); - return 0; -} -#endif - -#endif /* dl-procinfo.h */ diff --git a/sysdeps/powerpc/dl-tls.c b/sysdeps/powerpc/dl-tls.c deleted file mode 100644 index f666d53b49..0000000000 --- a/sysdeps/powerpc/dl-tls.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. PowerPC version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "elf/dl-tls.c" - -#ifdef SHARED -strong_alias(__tls_get_addr, __tls_get_addr_opt) -#endif diff --git a/sysdeps/powerpc/dl-tls.h b/sysdeps/powerpc/dl-tls.h deleted file mode 100644 index 54beaee5ae..0000000000 --- a/sysdeps/powerpc/dl-tls.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. PowerPC version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _PPC_DL_TLS_H -# define _PPC_DL_TLS_H 1 - -/* Type used for the representation of TLS information in the TOC. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - -/* The thread pointer points 0x7000 past the first static TLS block. */ -#define TLS_TP_OFFSET 0x7000 - -/* Dynamic thread vector pointers point 0x8000 past the start of each - TLS block. */ -#define TLS_DTV_OFFSET 0x8000 - -/* Compute the value for a @tprel reloc. */ -#define TLS_TPREL_VALUE(sym_map, sym, reloc) \ - ((sym_map)->l_tls_offset + (sym)->st_value + (reloc)->r_addend \ - - TLS_TP_OFFSET) - -/* Compute the value for a @dtprel reloc. */ -#define TLS_DTPREL_VALUE(sym, reloc) \ - ((sym)->st_value + (reloc)->r_addend - TLS_DTV_OFFSET) - -#ifdef SHARED -extern void *__tls_get_addr (tls_index *ti); - -# define GET_ADDR_OFFSET (ti->ti_offset + TLS_DTV_OFFSET) -# define __TLS_GET_ADDR(__ti) (__tls_get_addr (__ti) - TLS_DTV_OFFSET) -#endif - -#endif /* dl-tls.h */ diff --git a/sysdeps/powerpc/ffs.c b/sysdeps/powerpc/ffs.c deleted file mode 100644 index 125683b0f9..0000000000 --- a/sysdeps/powerpc/ffs.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Find first set bit in a word, counted from least significant end. - For PowerPC. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Torbjorn Granlund (tege@sics.se). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define ffsl __something_else -#include -#include - -#undef ffs - -#ifdef __GNUC__ - -int -__ffs (int x) -{ - int cnt; - - asm ("cntlzw %0,%1" : "=r" (cnt) : "r" (x & -x)); - return 32 - cnt; -} -weak_alias (__ffs, ffs) -libc_hidden_def (__ffs) -libc_hidden_builtin_def (ffs) -#if ULONG_MAX == UINT_MAX -#undef ffsl -weak_alias (__ffs, ffsl) -#endif - -#else -#include -#endif diff --git a/sysdeps/powerpc/fpu/Makefile b/sysdeps/powerpc/fpu/Makefile deleted file mode 100644 index 53470a9cf2..0000000000 --- a/sysdeps/powerpc/fpu/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -ifeq ($(subdir),math) -libm-support += fenv_const fe_nomask fe_mask t_sqrt -endif - -ifeq ($(subdir),stdlib) -tests += tst-setcontext-fpscr -endif diff --git a/sysdeps/powerpc/fpu/e_hypot.c b/sysdeps/powerpc/fpu/e_hypot.c deleted file mode 100644 index 2685ca6ba0..0000000000 --- a/sysdeps/powerpc/fpu/e_hypot.c +++ /dev/null @@ -1,134 +0,0 @@ -/* Pythagorean addition using doubles - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library - Contributed by Adhemerval Zanella , 2011 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include - -static const double two60 = 1.152921504606847e+18; -static const double two500 = 3.2733906078961419e+150; -static const double two600 = 4.149515568880993e+180; -static const double two1022 = 4.49423283715579e+307; -static const double twoM500 = 3.054936363499605e-151; -static const double twoM600 = 2.4099198651028841e-181; -static const double two60factor = 1.5592502418239997e+290; -static const double pdnum = 2.225073858507201e-308; - -/* __ieee754_hypot(x,y) - * - * This a FP only version without any FP->INT conversion. - * It is similar to default C version, making appropriates - * overflow and underflows checks as well scaling when it - * is needed. - */ - -#ifdef _ARCH_PWR7 -/* POWER7 isinf and isnan optimization are fast. */ -# define TEST_INF_NAN(x, y) \ - if ((isinf(x) || isinf(y)) \ - && !issignaling (x) && !issignaling (y)) \ - return INFINITY; \ - if (isnan(x) || isnan(y)) \ - return x + y; -# else -/* For POWER6 and below isinf/isnan triggers LHS and PLT calls are - * costly (especially for POWER6). */ -# define GET_TW0_HIGH_WORD(d1,d2,i1,i2) \ - do { \ - ieee_double_shape_type gh_u1; \ - ieee_double_shape_type gh_u2; \ - gh_u1.value = (d1); \ - gh_u2.value = (d2); \ - (i1) = gh_u1.parts.msw & 0x7fffffff; \ - (i2) = gh_u2.parts.msw & 0x7fffffff; \ - } while (0) - -# define TEST_INF_NAN(x, y) \ - do { \ - uint32_t hx, hy; \ - GET_TW0_HIGH_WORD(x, y, hx, hy); \ - if (hy > hx) { \ - uint32_t ht = hx; hx = hy; hy = ht; \ - } \ - if (hx >= 0x7ff00000) { \ - if ((hx == 0x7ff00000 || hy == 0x7ff00000) \ - && !issignaling (x) && !issignaling (y)) \ - return INFINITY; \ - return x + y; \ - } \ - } while (0) - -#endif - - -double -__ieee754_hypot (double x, double y) -{ - x = fabs (x); - y = fabs (y); - - TEST_INF_NAN (x, y); - - if (y > x) - { - double t = x; - x = y; - y = t; - } - if (y == 0.0) - return x; - /* if y is higher enough, y * 2^60 might overflow. The tests if - y >= 1.7976931348623157e+308/2^60 (two60factor) and uses the - appropriate check to avoid the overflow exception generation. */ - if (y > two60factor) - { - if ((x / y) > two60) - return x + y; - } - else - { - if (x > (y * two60)) - return x + y; - } - if (x > two500) - { - x *= twoM600; - y *= twoM600; - return __ieee754_sqrt (x * x + y * y) / twoM600; - } - if (y < twoM500) - { - if (y <= pdnum) - { - x *= two1022; - y *= two1022; - double ret = __ieee754_sqrt (x * x + y * y) / two1022; - math_check_force_underflow_nonneg (ret); - return ret; - } - else - { - x *= two600; - y *= two600; - return __ieee754_sqrt (x * x + y * y) / two600; - } - } - return __ieee754_sqrt (x * x + y * y); -} -strong_alias (__ieee754_hypot, __hypot_finite) diff --git a/sysdeps/powerpc/fpu/e_hypotf.c b/sysdeps/powerpc/fpu/e_hypotf.c deleted file mode 100644 index 8502ca962a..0000000000 --- a/sysdeps/powerpc/fpu/e_hypotf.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Pythagorean addition using floats - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Adhemerval Zanella , 2011 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include - -/* __ieee754_hypotf(x,y) - - This a FP only version without any FP->INT conversion. - It is similar to default C version, making appropriates - overflow and underflows checks as using double precision - instead of scaling. */ - -#ifdef _ARCH_PWR7 -/* POWER7 isinf and isnan optimizations are fast. */ -# define TEST_INF_NAN(x, y) \ - if ((isinff(x) || isinff(y)) \ - && !issignaling (x) && !issignaling (y)) \ - return INFINITY; \ - if (isnanf(x) || isnanf(y)) \ - return x + y; -# else -/* For POWER6 and below isinf/isnan triggers LHS and PLT calls are - * costly (especially for POWER6). */ -# define GET_TWO_FLOAT_WORD(f1,f2,i1,i2) \ - do { \ - ieee_float_shape_type gf_u1; \ - ieee_float_shape_type gf_u2; \ - gf_u1.value = (f1); \ - gf_u2.value = (f2); \ - (i1) = gf_u1.word & 0x7fffffff; \ - (i2) = gf_u2.word & 0x7fffffff; \ - } while (0) - -# define TEST_INF_NAN(x, y) \ - do { \ - uint32_t hx, hy; \ - GET_TWO_FLOAT_WORD(x, y, hx, hy); \ - if (hy > hx) { \ - uint32_t ht = hx; hx = hy; hy = ht; \ - } \ - if (hx >= 0x7f800000) { \ - if ((hx == 0x7f800000 || hy == 0x7f800000) \ - && !issignaling (x) && !issignaling (y)) \ - return INFINITY; \ - return x + y; \ - } \ - } while (0) -#endif - - -float -__ieee754_hypotf (float x, float y) -{ - TEST_INF_NAN (x, y); - - return __ieee754_sqrt ((double) x * x + (double) y * y); -} -strong_alias (__ieee754_hypotf, __hypotf_finite) diff --git a/sysdeps/powerpc/fpu/e_rem_pio2f.c b/sysdeps/powerpc/fpu/e_rem_pio2f.c deleted file mode 100644 index 8563e7c5e4..0000000000 --- a/sysdeps/powerpc/fpu/e_rem_pio2f.c +++ /dev/null @@ -1,188 +0,0 @@ -/* e_rem_pio2f.c -- float version of e_rem_pio2.c - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Adhemerval Zanella , 2011 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include - -#include -#include "s_float_bitwise.h" - -/* defined in sysdeps/powerpc/fpu/k_rem_pio2f.c */ -int __fp_kernel_rem_pio2f (float *x, float *y, float e0, int32_t nx); - -/* __ieee754_rem_pio2f(x,y) - * - * return the remainder of x rem pi/2 in y[0]+y[1] - */ - -static const float npio2_hw[] = { - 1.57077026e+00, 3.14154053e+00, 4.71228027e+00, 6.28308105e+00, - 7.85388184e+00, 9.42456055e+00, 1.09953613e+01, 1.25661621e+01, - 1.41369629e+01, 1.57077637e+01, 1.72783203e+01, 1.88491211e+01, - 2.04199219e+01, 2.19907227e+01, 2.35615234e+01, 2.51323242e+01, - 2.67031250e+01, 2.82739258e+01, 2.98447266e+01, 3.14155273e+01, - 3.29863281e+01, 3.45566406e+01, 3.61279297e+01, 3.76982422e+01, - 3.92695312e+01, 4.08398438e+01, 4.24111328e+01, 4.39814453e+01, - 4.55527344e+01, 4.71230469e+01, 4.86943359e+01, 5.02646484e+01 -}; - - -static const float zero = 0.0000000000e+00; -static const float two8 = 2.5600000000e+02; - -static const float half = 5.0000000000e-01; -static const float invpio2 = 6.3661980629e-01; -static const float pio2_1 = 1.5707855225e+00; -static const float pio2_1t = 1.0804334124e-05; -static const float pio2_2 = 1.0804273188e-05; -static const float pio2_2t = 6.0770999344e-11; -static const float pio2_3 = 6.0770943833e-11; -static const float pio2_3t = 6.1232342629e-17; - -static const float pio4 = 7.8539801e-01; -static const float pio3_4 = 2.3561945e+00; -static const float pio2_24b = 1.5707951e+00; -static const float pio2_2e7 = 2.0106054e+02; - - -int32_t -__ieee754_rem_pio2f (float x, float *y) -{ - float ax, z, n, r, w, t, e0; - float tx[3]; - int32_t i, nx; - - ax = __builtin_fabsf (x); - if (ax <= pio4) - { - y[0] = x; - y[1] = 0; - return 0; - } - if (ax < pio3_4) - { - if (x > 0) - { - z = x - pio2_1; - if (!__float_and_test28 (ax, pio2_24b)) - { - y[0] = z - pio2_1t; - y[1] = (z - y[0]) - pio2_1t; - } - else - { - z -= pio2_2; - y[0] = z - pio2_2t; - y[1] = (z - y[0]) - pio2_2t; - } - return 1; - } - else - { - z = x + pio2_1; - if (!__float_and_test28 (ax, pio2_24b)) - { - y[0] = z + pio2_1t; - y[1] = (z - y[0]) + pio2_1t; - } - else - { - z += pio2_2; - y[0] = z + pio2_2t; - y[1] = (z - y[0]) + pio2_2t; - } - return -1; - } - } - if (ax <= pio2_2e7) - { - n = __floorf (ax * invpio2 + half); - i = (int32_t) n; - r = ax - n * pio2_1; - w = n * pio2_1t; /* 1st round good to 40 bit */ - if (i < 32 && !__float_and_test24 (ax, npio2_hw[i - 1])) - { - y[0] = r - w; - } - else - { - float i, j; - j = __float_and8 (ax); - y[0] = r - w; - i = __float_and8 (y[0]); - if (j / i > 256.0 || j / i < 3.9062500e-3) - { /* 2nd iterations needed, good to 57 */ - t = r; - w = n * pio2_2; - r = t - w; - w = n * pio2_2t - ((t - r) - w); - y[0] = r - w; - i = __float_and8 (y[0]); - if (j / i > 33554432 || j / i < 2.9802322e-8) - { /* 3rd iteration needed, 74 bits acc */ - t = r; - w = n * pio2_3; - r = t - w; - w = n * pio2_3t - ((t - r) - w); - y[0] = r - w; - } - } - } - y[1] = (r - y[0]) - w; - if (x < 0) - { - y[0] = -y[0]; - y[1] = -y[1]; - return -i; - } - else - { - return i; - } - } - - /* all other (large) arguments */ - if (isnanf (x) || isinff (x)) - { - y[0] = y[1] = x - x; - return 0; - } - - /* set z = scalbn(|x|,ilogb(x)-7) */ - e0 = __float_and8 (ax / 128.0); - z = ax / e0; - - tx[0] = __floorf (z); - z = (z - tx[0]) * two8; - tx[1] = __floorf (z); - z = (z - tx[1]) * two8; - tx[2] = __floorf (z); - - nx = 3; - while (tx[nx - 1] == zero) - nx--; - - i = __fp_kernel_rem_pio2f (tx, y, e0, nx); - if (x < 0) - { - y[0] = -y[0]; - y[1] = -y[1]; - return -i; - } - return i; -} diff --git a/sysdeps/powerpc/fpu/e_sqrt.c b/sysdeps/powerpc/fpu/e_sqrt.c deleted file mode 100644 index 1c8977d6ad..0000000000 --- a/sysdeps/powerpc/fpu/e_sqrt.c +++ /dev/null @@ -1,175 +0,0 @@ -/* Double-precision floating point square root. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -#ifndef _ARCH_PPCSQ -static const double almost_half = 0.5000000000000001; /* 0.5 + 2^-53 */ -static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 }; -static const ieee_float_shape_type a_inf = {.word = 0x7f800000 }; -static const float two108 = 3.245185536584267269e+32; -static const float twom54 = 5.551115123125782702e-17; -extern const float __t_sqrt[1024]; - -/* The method is based on a description in - Computation of elementary functions on the IBM RISC System/6000 processor, - P. W. Markstein, IBM J. Res. Develop, 34(1) 1990. - Basically, it consists of two interleaved Newton-Raphson approximations, - one to find the actual square root, and one to find its reciprocal - without the expense of a division operation. The tricky bit here - is the use of the POWER/PowerPC multiply-add operation to get the - required accuracy with high speed. - - The argument reduction works by a combination of table lookup to - obtain the initial guesses, and some careful modification of the - generated guesses (which mostly runs on the integer unit, while the - Newton-Raphson is running on the FPU). */ - -double -__slow_ieee754_sqrt (double x) -{ - const float inf = a_inf.value; - - if (x > 0) - { - /* schedule the EXTRACT_WORDS to get separation between the store - and the load. */ - ieee_double_shape_type ew_u; - ieee_double_shape_type iw_u; - ew_u.value = (x); - if (x != inf) - { - /* Variables named starting with 's' exist in the - argument-reduced space, so that 2 > sx >= 0.5, - 1.41... > sg >= 0.70.., 0.70.. >= sy > 0.35... . - Variables named ending with 'i' are integer versions of - floating-point values. */ - double sx; /* The value of which we're trying to find the - square root. */ - double sg, g; /* Guess of the square root of x. */ - double sd, d; /* Difference between the square of the guess and x. */ - double sy; /* Estimate of 1/2g (overestimated by 1ulp). */ - double sy2; /* 2*sy */ - double e; /* Difference between y*g and 1/2 (se = e * fsy). */ - double shx; /* == sx * fsg */ - double fsg; /* sg*fsg == g. */ - fenv_t fe; /* Saved floating-point environment (stores rounding - mode and whether the inexact exception is - enabled). */ - uint32_t xi0, xi1, sxi, fsgi; - const float *t_sqrt; - - fe = fegetenv_register (); - /* complete the EXTRACT_WORDS (xi0,xi1,x) operation. */ - xi0 = ew_u.parts.msw; - xi1 = ew_u.parts.lsw; - relax_fenv_state (); - sxi = (xi0 & 0x3fffffff) | 0x3fe00000; - /* schedule the INSERT_WORDS (sx, sxi, xi1) to get separation - between the store and the load. */ - iw_u.parts.msw = sxi; - iw_u.parts.lsw = xi1; - t_sqrt = __t_sqrt + (xi0 >> (52 - 32 - 8 - 1) & 0x3fe); - sg = t_sqrt[0]; - sy = t_sqrt[1]; - /* complete the INSERT_WORDS (sx, sxi, xi1) operation. */ - sx = iw_u.value; - - /* Here we have three Newton-Raphson iterations each of a - division and a square root and the remainder of the - argument reduction, all interleaved. */ - sd = -__builtin_fma (sg, sg, -sx); - fsgi = (xi0 + 0x40000000) >> 1 & 0x7ff00000; - sy2 = sy + sy; - sg = __builtin_fma (sy, sd, sg); /* 16-bit approximation to - sqrt(sx). */ - - /* schedule the INSERT_WORDS (fsg, fsgi, 0) to get separation - between the store and the load. */ - INSERT_WORDS (fsg, fsgi, 0); - iw_u.parts.msw = fsgi; - iw_u.parts.lsw = (0); - e = -__builtin_fma (sy, sg, -almost_half); - sd = -__builtin_fma (sg, sg, -sx); - if ((xi0 & 0x7ff00000) == 0) - goto denorm; - sy = __builtin_fma (e, sy2, sy); - sg = __builtin_fma (sy, sd, sg); /* 32-bit approximation to - sqrt(sx). */ - sy2 = sy + sy; - /* complete the INSERT_WORDS (fsg, fsgi, 0) operation. */ - fsg = iw_u.value; - e = -__builtin_fma (sy, sg, -almost_half); - sd = -__builtin_fma (sg, sg, -sx); - sy = __builtin_fma (e, sy2, sy); - shx = sx * fsg; - sg = __builtin_fma (sy, sd, sg); /* 64-bit approximation to - sqrt(sx), but perhaps - rounded incorrectly. */ - sy2 = sy + sy; - g = sg * fsg; - e = -__builtin_fma (sy, sg, -almost_half); - d = -__builtin_fma (g, sg, -shx); - sy = __builtin_fma (e, sy2, sy); - fesetenv_register (fe); - return __builtin_fma (sy, d, g); - denorm: - /* For denormalised numbers, we normalise, calculate the - square root, and return an adjusted result. */ - fesetenv_register (fe); - return __slow_ieee754_sqrt (x * two108) * twom54; - } - } - else if (x < 0) - { - /* For some reason, some PowerPC32 processors don't implement - FE_INVALID_SQRT. */ -#ifdef FE_INVALID_SQRT - __feraiseexcept (FE_INVALID_SQRT); - - fenv_union_t u = { .fenv = fegetenv_register () }; - if ((u.l & FE_INVALID) == 0) -#endif - __feraiseexcept (FE_INVALID); - x = a_nan.value; - } - return f_wash (x); -} -#endif /* _ARCH_PPCSQ */ - -#undef __ieee754_sqrt -double -__ieee754_sqrt (double x) -{ - double z; - -#ifdef _ARCH_PPCSQ - asm ("fsqrt %0,%1\n" :"=f" (z):"f" (x)); -#else - z = __slow_ieee754_sqrt (x); -#endif - - return z; -} -strong_alias (__ieee754_sqrt, __sqrt_finite) diff --git a/sysdeps/powerpc/fpu/e_sqrtf.c b/sysdeps/powerpc/fpu/e_sqrtf.c deleted file mode 100644 index 65d27b4d42..0000000000 --- a/sysdeps/powerpc/fpu/e_sqrtf.c +++ /dev/null @@ -1,150 +0,0 @@ -/* Single-precision floating point square root. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -#ifndef _ARCH_PPCSQ -static const float almost_half = 0.50000006; /* 0.5 + 2^-24 */ -static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 }; -static const ieee_float_shape_type a_inf = {.word = 0x7f800000 }; -static const float two48 = 281474976710656.0; -static const float twom24 = 5.9604644775390625e-8; -extern const float __t_sqrt[1024]; - -/* The method is based on a description in - Computation of elementary functions on the IBM RISC System/6000 processor, - P. W. Markstein, IBM J. Res. Develop, 34(1) 1990. - Basically, it consists of two interleaved Newton-Raphson approximations, - one to find the actual square root, and one to find its reciprocal - without the expense of a division operation. The tricky bit here - is the use of the POWER/PowerPC multiply-add operation to get the - required accuracy with high speed. - - The argument reduction works by a combination of table lookup to - obtain the initial guesses, and some careful modification of the - generated guesses (which mostly runs on the integer unit, while the - Newton-Raphson is running on the FPU). */ - -float -__slow_ieee754_sqrtf (float x) -{ - const float inf = a_inf.value; - - if (x > 0) - { - if (x != inf) - { - /* Variables named starting with 's' exist in the - argument-reduced space, so that 2 > sx >= 0.5, - 1.41... > sg >= 0.70.., 0.70.. >= sy > 0.35... . - Variables named ending with 'i' are integer versions of - floating-point values. */ - float sx; /* The value of which we're trying to find the square - root. */ - float sg, g; /* Guess of the square root of x. */ - float sd, d; /* Difference between the square of the guess and x. */ - float sy; /* Estimate of 1/2g (overestimated by 1ulp). */ - float sy2; /* 2*sy */ - float e; /* Difference between y*g and 1/2 (note that e==se). */ - float shx; /* == sx * fsg */ - float fsg; /* sg*fsg == g. */ - fenv_t fe; /* Saved floating-point environment (stores rounding - mode and whether the inexact exception is - enabled). */ - uint32_t xi, sxi, fsgi; - const float *t_sqrt; - - GET_FLOAT_WORD (xi, x); - fe = fegetenv_register (); - relax_fenv_state (); - sxi = (xi & 0x3fffffff) | 0x3f000000; - SET_FLOAT_WORD (sx, sxi); - t_sqrt = __t_sqrt + (xi >> (23 - 8 - 1) & 0x3fe); - sg = t_sqrt[0]; - sy = t_sqrt[1]; - - /* Here we have three Newton-Raphson iterations each of a - division and a square root and the remainder of the - argument reduction, all interleaved. */ - sd = -__builtin_fmaf (sg, sg, -sx); - fsgi = (xi + 0x40000000) >> 1 & 0x7f800000; - sy2 = sy + sy; - sg = __builtin_fmaf (sy, sd, sg); /* 16-bit approximation to - sqrt(sx). */ - e = -__builtin_fmaf (sy, sg, -almost_half); - SET_FLOAT_WORD (fsg, fsgi); - sd = -__builtin_fmaf (sg, sg, -sx); - sy = __builtin_fmaf (e, sy2, sy); - if ((xi & 0x7f800000) == 0) - goto denorm; - shx = sx * fsg; - sg = __builtin_fmaf (sy, sd, sg); /* 32-bit approximation to - sqrt(sx), but perhaps - rounded incorrectly. */ - sy2 = sy + sy; - g = sg * fsg; - e = -__builtin_fmaf (sy, sg, -almost_half); - d = -__builtin_fmaf (g, sg, -shx); - sy = __builtin_fmaf (e, sy2, sy); - fesetenv_register (fe); - return __builtin_fmaf (sy, d, g); - denorm: - /* For denormalised numbers, we normalise, calculate the - square root, and return an adjusted result. */ - fesetenv_register (fe); - return __slow_ieee754_sqrtf (x * two48) * twom24; - } - } - else if (x < 0) - { - /* For some reason, some PowerPC32 processors don't implement - FE_INVALID_SQRT. */ -#ifdef FE_INVALID_SQRT - feraiseexcept (FE_INVALID_SQRT); - - fenv_union_t u = { .fenv = fegetenv_register () }; - if ((u.l & FE_INVALID) == 0) -#endif - feraiseexcept (FE_INVALID); - x = a_nan.value; - } - return f_washf (x); -} -#endif /* _ARCH_PPCSQ */ - -#undef __ieee754_sqrtf -float -__ieee754_sqrtf (float x) -{ - double z; - -#ifdef _ARCH_PPCSQ - asm ("fsqrts %0,%1\n" :"=f" (z):"f" (x)); -#else - z = __slow_ieee754_sqrtf (x); -#endif - - return z; -} -strong_alias (__ieee754_sqrtf, __sqrtf_finite) diff --git a/sysdeps/powerpc/fpu/fclrexcpt.c b/sysdeps/powerpc/fpu/fclrexcpt.c deleted file mode 100644 index 2ee9547833..0000000000 --- a/sysdeps/powerpc/fpu/fclrexcpt.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef feclearexcept -int -__feclearexcept (int excepts) -{ - fenv_union_t u, n; - - /* Get the current state. */ - u.fenv = fegetenv_register (); - - /* Clear the relevant bits. */ - n.l = u.l & ~((-(excepts >> (31 - FPSCR_VX) & 1) & FE_ALL_INVALID) - | (excepts & FPSCR_STICKY_BITS)); - - /* Put the new state in effect. */ - if (u.l != n.l) - fesetenv_register (n.fenv); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feclearexcept, __old_feclearexcept) -compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1); -#endif - -libm_hidden_ver (__feclearexcept, feclearexcept) -versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2); diff --git a/sysdeps/powerpc/fpu/fe_mask.c b/sysdeps/powerpc/fpu/fe_mask.c deleted file mode 100644 index bbe41a9d92..0000000000 --- a/sysdeps/powerpc/fpu/fe_mask.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Procedure definition for FE_MASK_ENV. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* This is a generic stub. An OS specific override is required to clear - the FE0/FE1 bits in the MSR. MSR update is privileged, so this will - normally involve a syscall. */ - -const fenv_t * -__fe_mask_env(void) -{ - __set_errno (ENOSYS); - return FE_DFL_ENV; -} -stub_warning (__fe_mask_env) diff --git a/sysdeps/powerpc/fpu/fe_nomask.c b/sysdeps/powerpc/fpu/fe_nomask.c deleted file mode 100644 index 3b42aedd15..0000000000 --- a/sysdeps/powerpc/fpu/fe_nomask.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Procedure definition for FE_NOMASK_ENV. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* This is a generic stub. An OS specific override is required to set - the FE0/FE1 bits in the MSR. MSR update is privileged, so this will - normally involve a syscall. */ - -const fenv_t * -__fe_nomask_env_priv (void) -{ - __set_errno (ENOSYS); - return FE_ENABLED_ENV; -} -stub_warning (__fe_nomask_env_priv) diff --git a/sysdeps/powerpc/fpu/fedisblxcpt.c b/sysdeps/powerpc/fpu/fedisblxcpt.c deleted file mode 100644 index bb10b4701a..0000000000 --- a/sysdeps/powerpc/fpu/fedisblxcpt.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Geoffrey Keating , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fedisableexcept (int excepts) -{ - fenv_union_t fe, curr; - int result, new; - - /* Get current exception mask to return. */ - fe.fenv = curr.fenv = fegetenv_register (); - result = fenv_reg_to_exceptions (fe.l); - - if ((excepts & FE_ALL_INVALID) == FE_ALL_INVALID) - excepts = (excepts | FE_INVALID) & ~ FE_ALL_INVALID; - - /* Sets the new exception mask. */ - if (excepts & FE_INEXACT) - fe.l &= ~(1 << (31 - FPSCR_XE)); - if (excepts & FE_DIVBYZERO) - fe.l &= ~(1 << (31 - FPSCR_ZE)); - if (excepts & FE_UNDERFLOW) - fe.l &= ~(1 << (31 - FPSCR_UE)); - if (excepts & FE_OVERFLOW) - fe.l &= ~(1 << (31 - FPSCR_OE)); - if (excepts & FE_INVALID) - fe.l &= ~(1 << (31 - FPSCR_VE)); - - if (fe.l != curr.l) - fesetenv_register (fe.fenv); - - new = __fegetexcept (); - if (new == 0 && result != 0) - (void)__fe_mask_env (); - - if ((new & excepts) != 0) - result = -1; - return result; -} diff --git a/sysdeps/powerpc/fpu/feenablxcpt.c b/sysdeps/powerpc/fpu/feenablxcpt.c deleted file mode 100644 index 7f0b333fc6..0000000000 --- a/sysdeps/powerpc/fpu/feenablxcpt.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Geoffrey Keating , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -feenableexcept (int excepts) -{ - fenv_union_t fe, curr; - int result, new; - - /* Get current exception mask to return. */ - fe.fenv = curr.fenv = fegetenv_register (); - result = fenv_reg_to_exceptions (fe.l); - - if ((excepts & FE_ALL_INVALID) == FE_ALL_INVALID) - excepts = (excepts | FE_INVALID) & ~ FE_ALL_INVALID; - - /* Sets the new exception mask. */ - if (excepts & FE_INEXACT) - fe.l |= (1 << (31 - FPSCR_XE)); - if (excepts & FE_DIVBYZERO) - fe.l |= (1 << (31 - FPSCR_ZE)); - if (excepts & FE_UNDERFLOW) - fe.l |= (1 << (31 - FPSCR_UE)); - if (excepts & FE_OVERFLOW) - fe.l |= (1 << (31 - FPSCR_OE)); - if (excepts & FE_INVALID) - fe.l |= (1 << (31 - FPSCR_VE)); - - if (fe.l != curr.l) - fesetenv_register (fe.fenv); - - new = __fegetexcept (); - if (new != 0 && result == 0) - (void) __fe_nomask_env_priv (); - - if ((new & excepts) != excepts) - result = -1; - - return result; -} diff --git a/sysdeps/powerpc/fpu/fegetenv.c b/sysdeps/powerpc/fpu/fegetenv.c deleted file mode 100644 index 251977beba..0000000000 --- a/sysdeps/powerpc/fpu/fegetenv.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fegetenv (fenv_t *envp) -{ - *envp = fegetenv_register (); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetenv, __old_fegetenv) -compat_symbol (libm, __old_fegetenv, fegetenv, GLIBC_2_1); -#endif - -libm_hidden_def (__fegetenv) -libm_hidden_ver (__fegetenv, fegetenv) -versioned_symbol (libm, __fegetenv, fegetenv, GLIBC_2_2); diff --git a/sysdeps/powerpc/fpu/fegetexcept.c b/sysdeps/powerpc/fpu/fegetexcept.c deleted file mode 100644 index 2b9899abe2..0000000000 --- a/sysdeps/powerpc/fpu/fegetexcept.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Get floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Geoffrey Keating , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fegetexcept (void) -{ - fenv_union_t fe; - int result = 0; - - fe.fenv = fegetenv_register (); - - if (fe.l & (1 << (31 - FPSCR_XE))) - result |= FE_INEXACT; - if (fe.l & (1 << (31 - FPSCR_ZE))) - result |= FE_DIVBYZERO; - if (fe.l & (1 << (31 - FPSCR_UE))) - result |= FE_UNDERFLOW; - if (fe.l & (1 << (31 - FPSCR_OE))) - result |= FE_OVERFLOW; - if (fe.l & (1 << (31 - FPSCR_VE))) - result |= FE_INVALID; - - return result; -} -weak_alias (__fegetexcept, fegetexcept) diff --git a/sysdeps/powerpc/fpu/fegetmode.c b/sysdeps/powerpc/fpu/fegetmode.c deleted file mode 100644 index 5597000a4b..0000000000 --- a/sysdeps/powerpc/fpu/fegetmode.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Store current floating-point control modes. PowerPC version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fegetmode (femode_t *modep) -{ - *modep = fegetenv_register (); - return 0; -} diff --git a/sysdeps/powerpc/fpu/fegetround.c b/sysdeps/powerpc/fpu/fegetround.c deleted file mode 100644 index bedb02f0e5..0000000000 --- a/sysdeps/powerpc/fpu/fegetround.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -(__fegetround) (void) -{ - return __fegetround(); -} -#undef fegetround -#undef __fegetround -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/powerpc/fpu/feholdexcpt.c b/sysdeps/powerpc/fpu/feholdexcpt.c deleted file mode 100644 index fef49c33a9..0000000000 --- a/sysdeps/powerpc/fpu/feholdexcpt.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#define _FPU_MASK_ALL (_FPU_MASK_ZM | _FPU_MASK_OM | _FPU_MASK_UM | _FPU_MASK_XM | _FPU_MASK_IM) - -int -__feholdexcept (fenv_t *envp) -{ - fenv_union_t old, new; - - /* Save the currently set exceptions. */ - old.fenv = *envp = fegetenv_register (); - - /* Clear everything except for the rounding modes and non-IEEE arithmetic - flag. */ - new.l = old.l & 0xffffffff00000007LL; - - if (new.l == old.l) - return 0; - - /* If the old env had any enabled exceptions, then mask SIGFPE in the - MSR FE0/FE1 bits. This may allow the FPU to run faster because it - always takes the default action and can not generate SIGFPE. */ - if ((old.l & _FPU_MASK_ALL) != 0) - (void)__fe_mask_env (); - - /* Put the new state in effect. */ - fesetenv_register (new.fenv); - - return 0; -} -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/powerpc/fpu/fenv_const.c b/sysdeps/powerpc/fpu/fenv_const.c deleted file mode 100644 index c5e088c98e..0000000000 --- a/sysdeps/powerpc/fpu/fenv_const.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Constants for fenv_bits.h. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* We want to specify the bit pattern of the __fe_*_env constants, so - pretend they're really `long long' instead of `double'. */ - -/* If the default argument is used we use this value. */ -const unsigned long long __fe_dfl_env __attribute__ ((aligned (8))) = -0xfff8000000000000ULL; - -/* The same representation is used for femode_t. */ -extern const unsigned long long __fe_dfl_mode - __attribute__ ((aligned (8), alias ("__fe_dfl_env"))); - -/* Floating-point environment where none of the exceptions are masked. */ -const unsigned long long __fe_enabled_env __attribute__ ((aligned (8))) = -0xfff80000000000f8ULL; - -/* Floating-point environment with the NI bit set. */ -const unsigned long long __fe_nonieee_env __attribute__ ((aligned (8))) = -0xfff8000000000004ULL; diff --git a/sysdeps/powerpc/fpu/fenv_libc.h b/sysdeps/powerpc/fpu/fenv_libc.h deleted file mode 100644 index 500ac042b4..0000000000 --- a/sysdeps/powerpc/fpu/fenv_libc.h +++ /dev/null @@ -1,176 +0,0 @@ -/* Internal libc stuff for floating point environment routines. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FENV_LIBC_H -#define _FENV_LIBC_H 1 - -#include -#include -#include - -extern const fenv_t *__fe_nomask_env_priv (void); - -extern const fenv_t *__fe_mask_env (void) attribute_hidden; - -/* The sticky bits in the FPSCR indicating exceptions have occurred. */ -#define FPSCR_STICKY_BITS ((FE_ALL_EXCEPT | FE_ALL_INVALID) & ~FE_INVALID) - -/* Equivalent to fegetenv, but returns a fenv_t instead of taking a - pointer. */ -#define fegetenv_register() \ - ({ fenv_t env; asm volatile ("mffs %0" : "=f" (env)); env; }) - -/* Equivalent to fesetenv, but takes a fenv_t instead of a pointer. */ -#define fesetenv_register(env) \ - do { \ - double d = (env); \ - if(GLRO(dl_hwcap) & PPC_FEATURE_HAS_DFP) \ - asm volatile (".machine push; " \ - ".machine \"power6\"; " \ - "mtfsf 0xff,%0,1,0; " \ - ".machine pop" : : "f" (d)); \ - else \ - asm volatile ("mtfsf 0xff,%0" : : "f" (d)); \ - } while(0) - -/* This very handy macro: - - Sets the rounding mode to 'round to nearest'; - - Sets the processor into IEEE mode; and - - Prevents exceptions from being raised for inexact results. - These things happen to be exactly what you need for typical elementary - functions. */ -#define relax_fenv_state() \ - do { \ - if (GLRO(dl_hwcap) & PPC_FEATURE_HAS_DFP) \ - asm (".machine push; .machine \"power6\"; " \ - "mtfsfi 7,0,1; .machine pop"); \ - asm ("mtfsfi 7,0"); \ - } while(0) - -/* Set/clear a particular FPSCR bit (for instance, - reset_fpscr_bit(FPSCR_VE); - prevents INVALID exceptions from being raised). */ -#define set_fpscr_bit(x) asm volatile ("mtfsb1 %0" : : "i"(x)) -#define reset_fpscr_bit(x) asm volatile ("mtfsb0 %0" : : "i"(x)) - -typedef union -{ - fenv_t fenv; - unsigned long long l; -} fenv_union_t; - - -static inline int -__fesetround_inline (int round) -{ - if ((unsigned int) round < 2) - { - asm volatile ("mtfsb0 30"); - if ((unsigned int) round == 0) - asm volatile ("mtfsb0 31"); - else - asm volatile ("mtfsb1 31"); - } - else - { - asm volatile ("mtfsb1 30"); - if ((unsigned int) round == 2) - asm volatile ("mtfsb0 31"); - else - asm volatile ("mtfsb1 31"); - } - - return 0; -} - -/* Definitions of all the FPSCR bit numbers */ -enum { - FPSCR_FX = 0, /* exception summary */ - FPSCR_FEX, /* enabled exception summary */ - FPSCR_VX, /* invalid operation summary */ - FPSCR_OX, /* overflow */ - FPSCR_UX, /* underflow */ - FPSCR_ZX, /* zero divide */ - FPSCR_XX, /* inexact */ - FPSCR_VXSNAN, /* invalid operation for sNaN */ - FPSCR_VXISI, /* invalid operation for Inf-Inf */ - FPSCR_VXIDI, /* invalid operation for Inf/Inf */ - FPSCR_VXZDZ, /* invalid operation for 0/0 */ - FPSCR_VXIMZ, /* invalid operation for Inf*0 */ - FPSCR_VXVC, /* invalid operation for invalid compare */ - FPSCR_FR, /* fraction rounded [fraction was incremented by round] */ - FPSCR_FI, /* fraction inexact */ - FPSCR_FPRF_C, /* result class descriptor */ - FPSCR_FPRF_FL, /* result less than (usually, less than 0) */ - FPSCR_FPRF_FG, /* result greater than */ - FPSCR_FPRF_FE, /* result equal to */ - FPSCR_FPRF_FU, /* result unordered */ - FPSCR_20, /* reserved */ - FPSCR_VXSOFT, /* invalid operation set by software */ - FPSCR_VXSQRT, /* invalid operation for square root */ - FPSCR_VXCVI, /* invalid operation for invalid integer convert */ - FPSCR_VE, /* invalid operation exception enable */ - FPSCR_OE, /* overflow exception enable */ - FPSCR_UE, /* underflow exception enable */ - FPSCR_ZE, /* zero divide exception enable */ - FPSCR_XE, /* inexact exception enable */ -#ifdef _ARCH_PWR6 - FPSCR_29, /* Reserved in ISA 2.05 */ -#else - FPSCR_NI /* non-IEEE mode (typically, no denormalised numbers) */ -#endif /* _ARCH_PWR6 */ - /* the remaining two least-significant bits keep the rounding mode */ -}; - -static inline int -fenv_reg_to_exceptions (unsigned long long l) -{ - int result = 0; - if (l & (1 << (31 - FPSCR_XE))) - result |= FE_INEXACT; - if (l & (1 << (31 - FPSCR_ZE))) - result |= FE_DIVBYZERO; - if (l & (1 << (31 - FPSCR_UE))) - result |= FE_UNDERFLOW; - if (l & (1 << (31 - FPSCR_OE))) - result |= FE_OVERFLOW; - if (l & (1 << (31 - FPSCR_VE))) - result |= FE_INVALID; - return result; -} - -#ifdef _ARCH_PWR6 - /* Not supported in ISA 2.05. Provided for source compat only. */ -# define FPSCR_NI 29 -#endif /* _ARCH_PWR6 */ - -/* This operation (i) sets the appropriate FPSCR bits for its - parameter, (ii) converts sNaN to the corresponding qNaN, and (iii) - otherwise passes its parameter through unchanged (in particular, -0 - and +0 stay as they were). The `obvious' way to do this is optimised - out by gcc. */ -#define f_wash(x) \ - ({ double d; asm volatile ("fmul %0,%1,%2" \ - : "=f"(d) \ - : "f" (x), "f"((float)1.0)); d; }) -#define f_washf(x) \ - ({ float f; asm volatile ("fmuls %0,%1,%2" \ - : "=f"(f) \ - : "f" (x), "f"((float)1.0)); f; }) - -#endif /* fenv_libc.h */ diff --git a/sysdeps/powerpc/fpu/fenv_private.h b/sysdeps/powerpc/fpu/fenv_private.h deleted file mode 100644 index 877f25bcf2..0000000000 --- a/sysdeps/powerpc/fpu/fenv_private.h +++ /dev/null @@ -1,229 +0,0 @@ -/* Private floating point rounding and exceptions handling. PowerPC version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef FENV_PRIVATE_H -#define FENV_PRIVATE_H 1 - -#include -#include -#include - -/* Mask for the exception enable bits. */ -#define _FPU_ALL_TRAPS (_FPU_MASK_ZM | _FPU_MASK_OM | _FPU_MASK_UM \ - | _FPU_MASK_XM | _FPU_MASK_IM) - -/* Mask the rounding mode bits. */ -#define _FPU_MASK_RN (~0x3) - -/* Mask everything but the rounding moded and non-IEEE arithmetic flags. */ -#define _FPU_MASK_NOT_RN_NI 0xffffffff00000007LL - -/* Mask restore rounding mode and exception enabled. */ -#define _FPU_MASK_TRAPS_RN 0xffffffff1fffff00LL - -/* Mask exception enable but fraction rounded/inexact and FP result/CC - bits. */ -#define _FPU_MASK_FRAC_INEX_RET_CC 0xffffffff1ff80fff - -static __always_inline void -__libc_feholdbits_ppc (fenv_t *envp, unsigned long long mask, - unsigned long long bits) -{ - fenv_union_t old, new; - - old.fenv = *envp = fegetenv_register (); - - new.l = (old.l & mask) | bits; - - /* If the old env had any enabled exceptions, then mask SIGFPE in the - MSR FE0/FE1 bits. This may allow the FPU to run faster because it - always takes the default action and can not generate SIGFPE. */ - if ((old.l & _FPU_ALL_TRAPS) != 0) - (void) __fe_mask_env (); - - fesetenv_register (new.fenv); -} - -static __always_inline void -libc_feholdexcept_ppc (fenv_t *envp) -{ - __libc_feholdbits_ppc (envp, _FPU_MASK_NOT_RN_NI, 0LL); -} - -static __always_inline void -libc_feholdexcept_setround_ppc (fenv_t *envp, int r) -{ - __libc_feholdbits_ppc (envp, _FPU_MASK_NOT_RN_NI & _FPU_MASK_RN, r); -} - -static __always_inline void -libc_fesetround_ppc (int r) -{ - __fesetround_inline (r); -} - -static __always_inline int -libc_fetestexcept_ppc (int e) -{ - fenv_union_t u; - u.fenv = fegetenv_register (); - return u.l & e; -} - -static __always_inline void -libc_feholdsetround_ppc (fenv_t *e, int r) -{ - __libc_feholdbits_ppc (e, _FPU_MASK_TRAPS_RN, r); -} - -static __always_inline unsigned long long -__libc_femergeenv_ppc (const fenv_t *envp, unsigned long long old_mask, - unsigned long long new_mask) -{ - fenv_union_t old, new; - - new.fenv = *envp; - old.fenv = fegetenv_register (); - - /* Merge bits while masking unwanted bits from new and old env. */ - new.l = (old.l & old_mask) | (new.l & new_mask); - - /* If the old env has no enabled exceptions and the new env has any enabled - exceptions, then unmask SIGFPE in the MSR FE0/FE1 bits. This will put the - hardware into "precise mode" and may cause the FPU to run slower on some - hardware. */ - if ((old.l & _FPU_ALL_TRAPS) == 0 && (new.l & _FPU_ALL_TRAPS) != 0) - (void) __fe_nomask_env_priv (); - - /* If the old env had any enabled exceptions and the new env has no enabled - exceptions, then mask SIGFPE in the MSR FE0/FE1 bits. This may allow the - FPU to run faster because it always takes the default action and can not - generate SIGFPE. */ - if ((old.l & _FPU_ALL_TRAPS) != 0 && (new.l & _FPU_ALL_TRAPS) == 0) - (void) __fe_mask_env (); - - /* Atomically enable and raise (if appropriate) exceptions set in `new'. */ - fesetenv_register (new.fenv); - - return old.l; -} - -static __always_inline void -libc_fesetenv_ppc (const fenv_t *envp) -{ - /* Replace the entire environment. */ - __libc_femergeenv_ppc (envp, 0LL, -1LL); -} - -static __always_inline void -libc_feresetround_ppc (fenv_t *envp) -{ - __libc_femergeenv_ppc (envp, _FPU_MASK_TRAPS_RN, _FPU_MASK_FRAC_INEX_RET_CC); -} - -static __always_inline int -libc_feupdateenv_test_ppc (fenv_t *envp, int ex) -{ - return __libc_femergeenv_ppc (envp, _FPU_MASK_TRAPS_RN, - _FPU_MASK_FRAC_INEX_RET_CC) & ex; -} - -static __always_inline void -libc_feupdateenv_ppc (fenv_t *e) -{ - libc_feupdateenv_test_ppc (e, 0); -} - -#define libc_feholdexceptf libc_feholdexcept_ppc -#define libc_feholdexcept libc_feholdexcept_ppc -#define libc_feholdexcept_setroundf libc_feholdexcept_setround_ppc -#define libc_feholdexcept_setround libc_feholdexcept_setround_ppc -#define libc_fetestexceptf libc_fetestexcept_ppc -#define libc_fetestexcept libc_fetestexcept_ppc -#define libc_fesetroundf libc_fesetround_ppc -#define libc_fesetround libc_fesetround_ppc -#define libc_fesetenvf libc_fesetenv_ppc -#define libc_fesetenv libc_fesetenv_ppc -#define libc_feupdateenv_testf libc_feupdateenv_test_ppc -#define libc_feupdateenv_test libc_feupdateenv_test_ppc -#define libc_feupdateenvf libc_feupdateenv_ppc -#define libc_feupdateenv libc_feupdateenv_ppc -#define libc_feholdsetroundf libc_feholdsetround_ppc -#define libc_feholdsetround libc_feholdsetround_ppc -#define libc_feresetroundf libc_feresetround_ppc -#define libc_feresetround libc_feresetround_ppc - - -/* We have support for rounding mode context. */ -#define HAVE_RM_CTX 1 - -static __always_inline void -libc_feholdsetround_ppc_ctx (struct rm_ctx *ctx, int r) -{ - fenv_union_t old, new; - - old.fenv = fegetenv_register (); - - new.l = (old.l & _FPU_MASK_TRAPS_RN) | r; - - ctx->env = old.fenv; - if (__glibc_unlikely (new.l != old.l)) - { - if ((old.l & _FPU_ALL_TRAPS) != 0) - (void) __fe_mask_env (); - fesetenv_register (new.fenv); - ctx->updated_status = true; - } - else - ctx->updated_status = false; -} - -static __always_inline void -libc_fesetenv_ppc_ctx (struct rm_ctx *ctx) -{ - libc_fesetenv_ppc (&ctx->env); -} - -static __always_inline void -libc_feupdateenv_ppc_ctx (struct rm_ctx *ctx) -{ - if (__glibc_unlikely (ctx->updated_status)) - libc_feresetround_ppc (&ctx->env); -} - -static __always_inline void -libc_feresetround_ppc_ctx (struct rm_ctx *ctx) -{ - if (__glibc_unlikely (ctx->updated_status)) - libc_feresetround_ppc (&ctx->env); -} - -#define libc_fesetenv_ctx libc_fesetenv_ppc_ctx -#define libc_fesetenvf_ctx libc_fesetenv_ppc_ctx -#define libc_fesetenvl_ctx libc_fesetenv_ppc_ctx -#define libc_feholdsetround_ctx libc_feholdsetround_ppc_ctx -#define libc_feholdsetroundf_ctx libc_feholdsetround_ppc_ctx -#define libc_feholdsetroundl_ctx libc_feholdsetround_ppc_ctx -#define libc_feresetround_ctx libc_feresetround_ppc_ctx -#define libc_feresetroundf_ctx libc_feresetround_ppc_ctx -#define libc_feresetroundl_ctx libc_feresetround_ppc_ctx -#define libc_feupdateenv_ctx libc_feupdateenv_ppc_ctx -#define libc_feupdateenvf_ctx libc_feupdateenv_ppc_ctx -#define libc_feupdateenvl_ctx libc_feupdateenv_ppc_ctx - -#endif diff --git a/sysdeps/powerpc/fpu/fesetenv.c b/sysdeps/powerpc/fpu/fesetenv.c deleted file mode 100644 index 7208ab455a..0000000000 --- a/sysdeps/powerpc/fpu/fesetenv.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define _FPU_MASK_ALL (_FPU_MASK_ZM | _FPU_MASK_OM | _FPU_MASK_UM | _FPU_MASK_XM | _FPU_MASK_IM) - -int -__fesetenv (const fenv_t *envp) -{ - fenv_union_t old, new; - - /* get the currently set exceptions. */ - new.fenv = *envp; - old.fenv = fegetenv_register (); - if (old.l == new.l) - return 0; - - /* If the old env has no enabled exceptions and the new env has any enabled - exceptions, then unmask SIGFPE in the MSR FE0/FE1 bits. This will put the - hardware into "precise mode" and may cause the FPU to run slower on some - hardware. */ - if ((old.l & _FPU_MASK_ALL) == 0 && (new.l & _FPU_MASK_ALL) != 0) - (void) __fe_nomask_env_priv (); - - /* If the old env had any enabled exceptions and the new env has no enabled - exceptions, then mask SIGFPE in the MSR FE0/FE1 bits. This may allow the - FPU to run faster because it always takes the default action and can not - generate SIGFPE. */ - if ((old.l & _FPU_MASK_ALL) != 0 && (new.l & _FPU_MASK_ALL) == 0) - (void)__fe_mask_env (); - - fesetenv_register (*envp); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetenv, __old_fesetenv) -compat_symbol (libm, __old_fesetenv, fesetenv, GLIBC_2_1); -#endif - -libm_hidden_def (__fesetenv) -libm_hidden_ver (__fesetenv, fesetenv) -versioned_symbol (libm, __fesetenv, fesetenv, GLIBC_2_2); diff --git a/sysdeps/powerpc/fpu/fesetexcept.c b/sysdeps/powerpc/fpu/fesetexcept.c deleted file mode 100644 index 47ea8e499d..0000000000 --- a/sysdeps/powerpc/fpu/fesetexcept.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Set given exception flags. PowerPC version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fesetexcept (int excepts) -{ - fenv_union_t u, n; - - u.fenv = fegetenv_register (); - n.l = (u.l - | (excepts & FPSCR_STICKY_BITS) - /* Turn FE_INVALID into FE_INVALID_SOFTWARE. */ - | (excepts >> ((31 - FPSCR_VX) - (31 - FPSCR_VXSOFT)) - & FE_INVALID_SOFTWARE)); - if (n.l != u.l) - { - fesetenv_register (n.fenv); - - /* Deal with FE_INVALID_SOFTWARE not being implemented on some chips. */ - if (excepts & FE_INVALID) - feraiseexcept (FE_INVALID); - } - - return 0; -} diff --git a/sysdeps/powerpc/fpu/fesetmode.c b/sysdeps/powerpc/fpu/fesetmode.c deleted file mode 100644 index 794f762898..0000000000 --- a/sysdeps/powerpc/fpu/fesetmode.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Install given floating-point control modes. PowerPC version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define _FPU_MASK_ALL (_FPU_MASK_ZM | _FPU_MASK_OM | _FPU_MASK_UM \ - | _FPU_MASK_XM | _FPU_MASK_IM) - -#define FPU_STATUS 0xbffff700ULL - -int -fesetmode (const femode_t *modep) -{ - fenv_union_t old, new; - - /* Logic regarding enabled exceptions as in fesetenv. */ - - new.fenv = *modep; - old.fenv = fegetenv_register (); - new.l = (new.l & ~FPU_STATUS) | (old.l & FPU_STATUS); - - if (old.l == new.l) - return 0; - - if ((old.l & _FPU_MASK_ALL) == 0 && (new.l & _FPU_MASK_ALL) != 0) - (void) __fe_nomask_env_priv (); - - if ((old.l & _FPU_MASK_ALL) != 0 && (new.l & _FPU_MASK_ALL) == 0) - (void) __fe_mask_env (); - - fesetenv_register (new.fenv); - return 0; -} diff --git a/sysdeps/powerpc/fpu/fesetround.c b/sysdeps/powerpc/fpu/fesetround.c deleted file mode 100644 index a041f1add9..0000000000 --- a/sysdeps/powerpc/fpu/fesetround.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef fesetround -int -__fesetround (int round) -{ - if ((unsigned int) round > 3) - return 1; - else - return __fesetround_inline(round); -} -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/powerpc/fpu/feupdateenv.c b/sysdeps/powerpc/fpu/feupdateenv.c deleted file mode 100644 index 551cc1734d..0000000000 --- a/sysdeps/powerpc/fpu/feupdateenv.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define _FPU_MASK_ALL (_FPU_MASK_ZM | _FPU_MASK_OM | _FPU_MASK_UM | _FPU_MASK_XM | _FPU_MASK_IM) - -int -__feupdateenv (const fenv_t *envp) -{ - fenv_union_t old, new; - - /* Save the currently set exceptions. */ - new.fenv = *envp; - old.fenv = fegetenv_register (); - - /* Restore rounding mode and exception enable from *envp and merge - exceptions. Leave fraction rounded/inexact and FP result/CC bits - unchanged. */ - new.l = (old.l & 0xffffffff1fffff00LL) | (new.l & 0x1ff80fff); - - /* If the old env has no enabled exceptions and the new env has any enabled - exceptions, then unmask SIGFPE in the MSR FE0/FE1 bits. This will put - the hardware into "precise mode" and may cause the FPU to run slower on - some hardware. */ - if ((old.l & _FPU_MASK_ALL) == 0 && (new.l & _FPU_MASK_ALL) != 0) - (void) __fe_nomask_env_priv (); - - /* If the old env had any enabled exceptions and the new env has no enabled - exceptions, then mask SIGFPE in the MSR FE0/FE1 bits. This may allow the - FPU to run faster because it always takes the default action and can not - generate SIGFPE. */ - if ((old.l & _FPU_MASK_ALL) != 0 && (new.l & _FPU_MASK_ALL) == 0) - (void)__fe_mask_env (); - - /* Atomically enable and raise (if appropriate) exceptions set in `new'. */ - fesetenv_register (new.fenv); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feupdateenv, __old_feupdateenv) -compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1); -#endif - -libm_hidden_def (__feupdateenv) -libm_hidden_ver (__feupdateenv, feupdateenv) -versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2); diff --git a/sysdeps/powerpc/fpu/fgetexcptflg.c b/sysdeps/powerpc/fpu/fgetexcptflg.c deleted file mode 100644 index a11b8f3323..0000000000 --- a/sysdeps/powerpc/fpu/fgetexcptflg.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fegetexceptflag (fexcept_t *flagp, int excepts) -{ - fenv_union_t u; - - /* Get the current state. */ - u.fenv = fegetenv_register (); - - /* Return (all of) it. */ - *flagp = u.l & excepts & FE_ALL_EXCEPT; - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetexceptflag, __old_fegetexceptflag) -compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2); diff --git a/sysdeps/powerpc/fpu/fix-fp-int-compare-invalid.h b/sysdeps/powerpc/fpu/fix-fp-int-compare-invalid.h deleted file mode 100644 index 17ac1d2c83..0000000000 --- a/sysdeps/powerpc/fpu/fix-fp-int-compare-invalid.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Fix for missing "invalid" exceptions from floating-point - comparisons. PowerPC version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef FIX_FP_INT_COMPARE_INVALID_H -#define FIX_FP_INT_COMPARE_INVALID_H 1 - -/* As of GCC 5, comparisons use unordered comparison instructions when - they should use ordered comparisons - . */ -#define FIX_COMPARE_INVALID 1 - -#endif /* fix-fp-int-compare-invalid.h */ diff --git a/sysdeps/powerpc/fpu/fraiseexcpt.c b/sysdeps/powerpc/fpu/fraiseexcpt.c deleted file mode 100644 index 05f5cb6309..0000000000 --- a/sysdeps/powerpc/fpu/fraiseexcpt.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Raise given exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef feraiseexcept -int -__feraiseexcept (int excepts) -{ - fenv_union_t u; - - /* Raise exceptions represented by EXCEPTS. It is the responsibility of - the OS to ensure that if multiple exceptions occur they are fed back - to this process in the proper way; this can happen in hardware, - anyway (in particular, inexact with overflow or underflow). */ - - /* Get the current state. */ - u.fenv = fegetenv_register (); - - /* Add the exceptions */ - u.l = (u.l - | (excepts & FPSCR_STICKY_BITS) - /* Turn FE_INVALID into FE_INVALID_SOFTWARE. */ - | (excepts >> ((31 - FPSCR_VX) - (31 - FPSCR_VXSOFT)) - & FE_INVALID_SOFTWARE)); - - /* Store the new status word (along with the rest of the environment), - triggering any appropriate exceptions. */ - fesetenv_register (u.fenv); - - if ((excepts & FE_INVALID)) - { - /* For some reason, some PowerPC chips (the 601, in particular) - don't have FE_INVALID_SOFTWARE implemented. Detect this - case and raise FE_INVALID_SNAN instead. */ - u.fenv = fegetenv_register (); - if ((u.l & FE_INVALID) == 0) - set_fpscr_bit (FPSCR_VXSNAN); - } - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feraiseexcept, __old_feraiseexcept) -compat_symbol (libm, __old_feraiseexcept, feraiseexcept, GLIBC_2_1); -#endif - -libm_hidden_def (__feraiseexcept) -libm_hidden_ver (__feraiseexcept, feraiseexcept) -versioned_symbol (libm, __feraiseexcept, feraiseexcept, GLIBC_2_2); diff --git a/sysdeps/powerpc/fpu/fsetexcptflg.c b/sysdeps/powerpc/fpu/fsetexcptflg.c deleted file mode 100644 index d5c0963688..0000000000 --- a/sysdeps/powerpc/fpu/fsetexcptflg.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - fenv_union_t u, n; - fexcept_t flag; - - /* Get the current state. */ - u.fenv = fegetenv_register (); - - /* Ignore exceptions not listed in 'excepts'. */ - flag = *flagp & excepts; - - /* Replace the exception status */ - int excepts_mask = FPSCR_STICKY_BITS & excepts; - if ((excepts & FE_INVALID) != 0) - excepts_mask |= FE_ALL_INVALID; - n.l = ((u.l & ~excepts_mask) - | (flag & FPSCR_STICKY_BITS) - /* Turn FE_INVALID into FE_INVALID_SOFTWARE. */ - | (flag >> ((31 - FPSCR_VX) - (31 - FPSCR_VXSOFT)) - & FE_INVALID_SOFTWARE)); - - /* Store the new status word (along with the rest of the environment). - This may cause floating-point exceptions if the restored state - requests it. */ - if (n.l != u.l) - fesetenv_register (n.fenv); - - /* Deal with FE_INVALID_SOFTWARE not being implemented on some chips. */ - if (flag & FE_INVALID) - feraiseexcept(FE_INVALID); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetexceptflag, __old_fesetexceptflag) -compat_symbol (libm, __old_fesetexceptflag, fesetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fesetexceptflag, fesetexceptflag, GLIBC_2_2); diff --git a/sysdeps/powerpc/fpu/ftestexcept.c b/sysdeps/powerpc/fpu/ftestexcept.c deleted file mode 100644 index 8f2ecad509..0000000000 --- a/sysdeps/powerpc/fpu/ftestexcept.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fetestexcept (int excepts) -{ - fenv_union_t u; - - /* Get the current state. */ - u.fenv = fegetenv_register (); - - /* The FE_INVALID bit is dealt with correctly by the hardware, so we can - just: */ - return u.l & excepts; -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/powerpc/fpu/k_cosf.c b/sysdeps/powerpc/fpu/k_cosf.c deleted file mode 100644 index b9e31dc64d..0000000000 --- a/sysdeps/powerpc/fpu/k_cosf.c +++ /dev/null @@ -1,65 +0,0 @@ -/* k_cosf.c -- float version of k_cos.c - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Adhemerval Zanella , 2011 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include - -static const float twom27 = 7.4505806e-09; -static const float dot3 = 3.0000001e-01; -static const float dot78125 = 7.8125000e-01; - -static const float one = 1.0000000000e+00; -static const float C1 = 4.1666667908e-02; -static const float C2 = -1.3888889225e-03; -static const float C3 = 2.4801587642e-05; -static const float C4 = -2.7557314297e-07; -static const float C5 = 2.0875723372e-09; -static const float C6 = -1.1359647598e-11; - -float -__kernel_cosf (float x, float y) -{ - float a, hz, z, r, qx; - float ix; - ix = __builtin_fabsf (x); - if (ix < twom27) - { /* |x| < 2**-27 */ - __feraiseexcept (FE_INEXACT); - return one; - } - z = x * x; - r = z * (C1 + z * (C2 + z * (C3 + z * (C4 + z * (C5 + z * C6))))); - if (ix < dot3) /* if |x| < 0.3 */ - return one - ((float) 0.5 * z - (z * r - x * y)); - else - { - if (ix > dot78125) - { /* x > 0.78125 */ - qx = (float) 0.28125; - } - else - { - qx = ix / 4.0; - } - hz = (float) 0.5 *z - qx; - a = one - qx; - return a - (hz - (z * r - x * y)); - } -} diff --git a/sysdeps/powerpc/fpu/k_rem_pio2f.c b/sysdeps/powerpc/fpu/k_rem_pio2f.c deleted file mode 100644 index 04ed62055a..0000000000 --- a/sysdeps/powerpc/fpu/k_rem_pio2f.c +++ /dev/null @@ -1,273 +0,0 @@ -/* k_rem_pio2f.c -- float version of e_rem_pio2.c - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Adhemerval Zanella , 2011 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include - -#include -#include "s_float_bitwise.h" - - -static const float two_over_pi[] = { - 1.62000000e+02, 2.49000000e+02, 1.31000000e+02, 1.10000000e+02, - 7.80000000e+01, 6.80000000e+01, 2.10000000e+01, 4.10000000e+01, - 2.52000000e+02, 3.90000000e+01, 8.70000000e+01, 2.09000000e+02, - 2.45000000e+02, 5.20000000e+01, 2.21000000e+02, 1.92000000e+02, - 2.19000000e+02, 9.80000000e+01, 1.49000000e+02, 1.53000000e+02, - 6.00000000e+01, 6.70000000e+01, 1.44000000e+02, 6.50000000e+01, - 2.54000000e+02, 8.10000000e+01, 9.90000000e+01, 1.71000000e+02, - 2.22000000e+02, 1.87000000e+02, 1.97000000e+02, 9.70000000e+01, - 1.83000000e+02, 3.60000000e+01, 1.10000000e+02, 5.80000000e+01, - 6.60000000e+01, 7.70000000e+01, 2.10000000e+02, 2.24000000e+02, - 6.00000000e+00, 7.30000000e+01, 4.60000000e+01, 2.34000000e+02, - 9.00000000e+00, 2.09000000e+02, 1.46000000e+02, 2.80000000e+01, - 2.54000000e+02, 2.90000000e+01, 2.35000000e+02, 2.80000000e+01, - 1.77000000e+02, 4.10000000e+01, 1.67000000e+02, 6.20000000e+01, - 2.32000000e+02, 1.30000000e+02, 5.30000000e+01, 2.45000000e+02, - 4.60000000e+01, 1.87000000e+02, 6.80000000e+01, 1.32000000e+02, - 2.33000000e+02, 1.56000000e+02, 1.12000000e+02, 3.80000000e+01, - 1.80000000e+02, 9.50000000e+01, 1.26000000e+02, 6.50000000e+01, - 5.70000000e+01, 1.45000000e+02, 2.14000000e+02, 5.70000000e+01, - 1.31000000e+02, 8.30000000e+01, 5.70000000e+01, 2.44000000e+02, - 1.56000000e+02, 1.32000000e+02, 9.50000000e+01, 1.39000000e+02, - 1.89000000e+02, 2.49000000e+02, 4.00000000e+01, 5.90000000e+01, - 3.10000000e+01, 2.48000000e+02, 1.51000000e+02, 2.55000000e+02, - 2.22000000e+02, 5.00000000e+00, 1.52000000e+02, 1.50000000e+01, - 2.39000000e+02, 4.70000000e+01, 1.70000000e+01, 1.39000000e+02, - 9.00000000e+01, 1.00000000e+01, 1.09000000e+02, 3.10000000e+01, - 1.09000000e+02, 5.40000000e+01, 1.26000000e+02, 2.07000000e+02, - 3.90000000e+01, 2.03000000e+02, 9.00000000e+00, 1.83000000e+02, - 7.90000000e+01, 7.00000000e+01, 6.30000000e+01, 1.02000000e+02, - 1.58000000e+02, 9.50000000e+01, 2.34000000e+02, 4.50000000e+01, - 1.17000000e+02, 3.90000000e+01, 1.86000000e+02, 1.99000000e+02, - 2.35000000e+02, 2.29000000e+02, 2.41000000e+02, 1.23000000e+02, - 6.10000000e+01, 7.00000000e+00, 5.70000000e+01, 2.47000000e+02, - 1.38000000e+02, 8.20000000e+01, 1.46000000e+02, 2.34000000e+02, - 1.07000000e+02, 2.51000000e+02, 9.50000000e+01, 1.77000000e+02, - 3.10000000e+01, 1.41000000e+02, 9.30000000e+01, 8.00000000e+00, - 8.60000000e+01, 3.00000000e+00, 4.80000000e+01, 7.00000000e+01, - 2.52000000e+02, 1.23000000e+02, 1.07000000e+02, 1.71000000e+02, - 2.40000000e+02, 2.07000000e+02, 1.88000000e+02, 3.20000000e+01, - 1.54000000e+02, 2.44000000e+02, 5.40000000e+01, 2.90000000e+01, - 1.69000000e+02, 2.27000000e+02, 1.45000000e+02, 9.70000000e+01, - 9.40000000e+01, 2.30000000e+02, 2.70000000e+01, 8.00000000e+00, - 1.01000000e+02, 1.53000000e+02, 1.33000000e+02, 9.50000000e+01, - 2.00000000e+01, 1.60000000e+02, 1.04000000e+02, 6.40000000e+01, - 1.41000000e+02, 2.55000000e+02, 2.16000000e+02, 1.28000000e+02, - 7.70000000e+01, 1.15000000e+02, 3.90000000e+01, 4.90000000e+01, - 6.00000000e+00, 6.00000000e+00, 2.10000000e+01, 8.60000000e+01, - 2.02000000e+02, 1.15000000e+02, 1.68000000e+02, 2.01000000e+02, - 9.60000000e+01, 2.26000000e+02, 1.23000000e+02, 1.92000000e+02, - 1.40000000e+02, 1.07000000e+02 -}; - - -static const float PIo2[] = { - 1.5703125000e+00, /* 0x3fc90000 */ - 4.5776367188e-04, /* 0x39f00000 */ - 2.5987625122e-05, /* 0x37da0000 */ - 7.5437128544e-08, /* 0x33a20000 */ - 6.0026650317e-11, /* 0x2e840000 */ - 7.3896444519e-13, /* 0x2b500000 */ - 5.3845816694e-15, /* 0x27c20000 */ - 5.6378512969e-18, /* 0x22d00000 */ - 8.3009228831e-20, /* 0x1fc40000 */ - 3.2756352257e-22, /* 0x1bc60000 */ - 6.3331015649e-25, /* 0x17440000 */ -}; - - -static const float zero = 0.0000000000e+00; -static const float one = 1.0000000000; -static const float twon8 = 3.9062500000e-03; -static const float two8 = 2.5600000000e+02; - - -int32_t -__fp_kernel_rem_pio2f (float *x, float *y, float e0, int32_t nx) -{ - int32_t jz, jx, jv, jp, jk, carry, n, iq[20], i, j, k, m, q0, ih, exp; - float z, fw, f[20], fq[20], q[20]; - - /* initialize jk */ - jp = jk = 9; - - /* determine jx,jv,q0, note that 3>q0 */ - jx = nx - 1; - exp = __float_get_exp (e0) - 127; - jv = (exp - 3) / 8; - if (jv < 0) - jv = 0; - q0 = exp - 8 * (jv + 1); - - /* set up f[0] to f[jx+jk] where f[jx+jk] = two_over_pi[jv+jk] */ - j = jv - jx; - m = jx + jk; - for (i = 0; i <= m; i++, j++) - f[i] = (j < 0) ? zero : two_over_pi[j]; - - /* compute q[0],q[1],...q[jk] */ - for (i = 0; i <= jk; i++) - { - for (j = 0, fw = 0.0; j <= jx; j++) - fw += x[j] * f[jx + i - j]; - q[i] = fw; - } - - jz = jk; -recompute: - /* distill q[] into iq[] reversingly */ - for (i = 0, j = jz, z = q[jz]; j > 0; i++, j--) - { - fw = __truncf (twon8 * z); - iq[i] = (int32_t) (z - two8 * fw); - z = q[j - 1] + fw; - } - - /* compute n */ - z = __scalbnf (z, q0); /* actual value of z */ - z -= 8.0 * __floorf (z * 0.125); /* trim off integer >= 8 */ - n = (int32_t) z; - z -= __truncf (z); - ih = 0; - if (q0 > 0) - { /* need iq[jz-1] to determine n */ - i = (iq[jz - 1] >> (8 - q0)); - n += i; - iq[jz - 1] -= i << (8 - q0); - ih = iq[jz - 1] >> (7 - q0); - } - else if (q0 == 0) - ih = iq[jz - 1] >> 7; - else if (z >= 0.5) - ih = 2; - - if (ih > 0) - { /* q > 0.5 */ - n += 1; - carry = 0; - for (i = 0; i < jz; i++) - { /* compute 1-q */ - j = iq[i]; - if (carry == 0) - { - if (j != 0) - { - carry = 1; - iq[i] = 0x100 - j; - } - } - else - iq[i] = 0xff - j; - } - if (q0 > 0) - { /* rare case: chance is 1 in 12 */ - switch (q0) - { - case 1: - iq[jz - 1] &= 0x7f; - break; - case 2: - iq[jz - 1] &= 0x3f; - break; - } - } - if (ih == 2) - { - z = one - z; - if (carry != 0) - z -= __scalbnf (one, q0); - } - } - - /* check if recomputation is needed */ - if (z == zero) - { - j = 0; - for (i = jz - 1; i >= jk; i--) - j |= iq[i]; - if (j == 0) - { /* need recomputation */ - for (k = 1; iq[jk - k] == 0; k++); /* k = no. of terms needed */ - - for (i = jz + 1; i <= jz + k; i++) - { /* add q[jz+1] to q[jz+k] */ - f[jx + i] = two_over_pi[jv + i]; - for (j = 0, fw = 0.0; j <= jx; j++) - fw += x[j] * f[jx + i - j]; - q[i] = fw; - } - jz += k; - goto recompute; - } - } - - /* chop off zero terms */ - if (z == 0.0) - { - jz -= 1; - q0 -= 8; - while (iq[jz] == 0) - { - jz--; - q0 -= 8; - } - } - else - { /* break z into 8-bit if necessary */ - z = __scalbnf (z, -q0); - if (z >= two8) - { - fw = __truncf (twon8 * z); - iq[jz] = (int32_t) (z - two8 * fw); - jz += 1; - q0 += 8; - iq[jz] = (int32_t) fw; - } - else - iq[jz] = (int32_t) z; - } - - /* convert integer "bit" chunk to floating-point value */ - fw = __scalbnf (one, q0); - for (i = jz; i >= 0; i--) - { - q[i] = fw * (float) iq[i]; - fw *= twon8; - } - - /* compute PIo2[0,...,jp]*q[jz,...,0] */ - for (i = jz; i >= 0; i--) - { - for (fw = 0.0, k = 0; k <= jp && k <= jz - i; k++) - fw += PIo2[k] * q[i + k]; - fq[jz - i] = fw; - } - - /* compress fq[] into y[] */ - fw = 0.0; - for (i = jz; i >= 0; i--) - fw += fq[i]; - y[0] = (ih == 0) ? fw : -fw; - fw = fq[0] - fw; - for (i = 1; i <= jz; i++) - fw += fq[i]; - y[1] = (ih == 0) ? fw : -fw; - - return n & 7; -} diff --git a/sysdeps/powerpc/fpu/k_sinf.c b/sysdeps/powerpc/fpu/k_sinf.c deleted file mode 100644 index 251633dc30..0000000000 --- a/sysdeps/powerpc/fpu/k_sinf.c +++ /dev/null @@ -1,57 +0,0 @@ -/* k_sinf.c -- float version of k_sin.c - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Adhemerval Zanella , 2011 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include - - -static const float twom27 = 7.4505806000e-09; -static const float half = 5.0000000000e-01; -static const float S1 = -1.6666667163e-01; -static const float S2 = 8.3333337680e-03; -static const float S3 = -1.9841270114e-04; -static const float S4 = 2.7557314297e-06; -static const float S5 = -2.5050759689e-08; -static const float S6 = 1.5896910177e-10; - - -float -__kernel_sinf (float x, float y, int iy) -{ - float z, r, v; - float ix; - ix = __builtin_fabsf (x); - if (ix < twom27) - { /* |x| < 2**-27 */ - if (ix < FLT_MIN && ix != 0.0f) - __feraiseexcept (FE_UNDERFLOW|FE_INEXACT); - else - __feraiseexcept (FE_INEXACT); - return x; - } - z = x * x; - v = z * x; - r = S2 + z * (S3 + z * (S4 + z * (S5 + z * S6))); - if (iy == 0) - return x + v * (S1 + z * r); - else - return x - ((z * (half * y - v * r) - y) - v * S1); -} diff --git a/sysdeps/powerpc/fpu/libm-test-ulps b/sysdeps/powerpc/fpu/libm-test-ulps deleted file mode 100644 index 72eb2b1e5a..0000000000 --- a/sysdeps/powerpc/fpu/libm-test-ulps +++ /dev/null @@ -1,2342 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "acos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "acos_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "acosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "acosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "acosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "acosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 4 - -Function: "asin": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "asinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "asinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 7 -ldouble: 7 - -Function: "atan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "atan2_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "atan2_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: "atan2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "atan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "atan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "atanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "cabs": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_upward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cacos": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacos_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cacos_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Real part of "cacos_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "cacos_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Real part of "cacos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "cacos_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 13 -ldouble: 13 - -Function: Real part of "cacosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacosh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "cacosh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "cacosh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "cacosh_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: Real part of "cacosh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 12 -ldouble: 12 - -Function: Imaginary part of "cacosh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 8 -ldouble: 8 - -Function: "carg": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "carg_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "carg_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: "carg_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "casin": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "casin_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Real part of "casin_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casin_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Real part of "casin_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "casin_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 13 -ldouble: 13 - -Function: Real part of "casinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "casinh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "casinh_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "casinh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "casinh_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Real part of "casinh_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 13 -ldouble: 13 - -Function: Imaginary part of "casinh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Real part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "catan_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: Real part of "catan_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "catan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "catan_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catanh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "catanh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Real part of "catanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "catanh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: Real part of "catanh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "catanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 6 -ldouble: 6 - -Function: "cbrt": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: "cbrt_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "cbrt_upward": -double: 5 -float: 1 -idouble: 5 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "ccos_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "ccos_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "ccos_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "ccos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "ccosh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "ccosh_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "ccosh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "ccosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 11 -ldouble: 11 - -Function: Imaginary part of "cexp_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 11 -ldouble: 11 - -Function: Real part of "cexp_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 11 -ldouble: 11 - -Function: Imaginary part of "cexp_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 11 -ldouble: 11 - -Function: Real part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "clog": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog10": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog10_downward": -double: 6 -float: 6 -idouble: 6 -ifloat: 6 -ildouble: 10 -ldouble: 10 - -Function: Imaginary part of "clog10_downward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: Real part of "clog10_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 9 -ldouble: 9 - -Function: Imaginary part of "clog10_towardzero": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: Real part of "clog10_upward": -double: 8 -float: 5 -idouble: 8 -ifloat: 5 -ildouble: 10 -ldouble: 10 - -Function: Imaginary part of "clog10_upward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: Real part of "clog_downward": -double: 7 -float: 5 -idouble: 7 -ifloat: 5 -ildouble: 11 -ldouble: 11 - -Function: Imaginary part of "clog_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Real part of "clog_towardzero": -double: 7 -float: 5 -idouble: 7 -ifloat: 5 -ildouble: 10 -ldouble: 10 - -Function: Imaginary part of "clog_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 7 -ldouble: 7 - -Function: Real part of "clog_upward": -double: 8 -float: 5 -idouble: 8 -ifloat: 5 -ildouble: 10 -ldouble: 10 - -Function: Imaginary part of "clog_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "cos": -float: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "cos_downward": -double: 1 -float: 4 -idouble: 1 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "cos_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "cos_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "cosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow": -double: 2 -float: 5 -idouble: 2 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_downward": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "cpow_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cpow_towardzero": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "cpow_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cpow_upward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cpow_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin": -ildouble: 1 -ldouble: 1 - -Function: Real part of "csin_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "csin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 6 -ldouble: 6 - -Function: Real part of "csin_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "csin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 6 -ldouble: 6 - -Function: Real part of "csin_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csinh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "csinh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "csinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "csinh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "csinh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csqrt_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "csqrt_upward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 12 -ldouble: 12 - -Function: Imaginary part of "csqrt_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctan_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "ctan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 9 -ldouble: 9 - -Function: Real part of "ctan_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 13 -ldouble: 13 - -Function: Real part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 10 -ldouble: 10 - -Function: Real part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 9 -ldouble: 9 - -Function: Imaginary part of "ctanh_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 13 -ldouble: 13 - -Function: Imaginary part of "ctanh_towardzero": -double: 5 -float: 2 -idouble: 5 -ifloat: 2 -ildouble: 10 -ldouble: 10 - -Function: Real part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 10 -ldouble: 10 - -Function: Imaginary part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 10 -ldouble: 10 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erf_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erf_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "erfc": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "erfc_downward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 10 -ldouble: 10 - -Function: "erfc_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 9 -ldouble: 9 - -Function: "erfc_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "exp": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp10": -double: 2 -idouble: 2 -ildouble: 1 -ldouble: 1 - -Function: "exp10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 9 -ldouble: 9 - -Function: "exp10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 9 -ldouble: 9 - -Function: "exp10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "exp2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp2_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp_downward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "expm1_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "expm1_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 6 -ldouble: 6 - -Function: "fma": -ildouble: 1 -ldouble: 1 - -Function: "fma_downward": -ildouble: 1 -ldouble: 1 - -Function: "fma_towardzero": -ildouble: 2 -ldouble: 2 - -Function: "fma_upward": -ildouble: 3 -ldouble: 3 - -Function: "fmod": -ildouble: 1 -ldouble: 1 - -Function: "fmod_downward": -ildouble: 1 -ldouble: 1 - -Function: "fmod_towardzero": -ildouble: 1 -ldouble: 1 - -Function: "fmod_upward": -ildouble: 1 -ldouble: 1 - -Function: "gamma": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: "gamma_downward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 15 -ldouble: 15 - -Function: "gamma_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 16 -ldouble: 16 - -Function: "gamma_upward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 11 -ldouble: 11 - -Function: "hypot": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_downward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "hypot_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "hypot_upward": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j0_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 11 -ldouble: 11 - -Function: "j0_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 8 -ldouble: 8 - -Function: "j0_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "j1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "j1_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 6 -ldouble: 6 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "jn_downward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 7 -ldouble: 7 - -Function: "jn_towardzero": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 7 -ldouble: 7 - -Function: "jn_upward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "lgamma": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: "lgamma_downward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 15 -ldouble: 15 - -Function: "lgamma_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 16 -ldouble: 16 - -Function: "lgamma_upward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 11 -ldouble: 11 - -Function: "log": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "log10_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log10_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log1p": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log1p_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log1p_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "log1p_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "log2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log2_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: "log2_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "log2_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "log_downward": -float: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log_towardzero": -float: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "nextafter_downward": -ildouble: 1 -ldouble: 1 - -Function: "nextafter_upward": -ildouble: 1 -ldouble: 1 - -Function: "pow": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "pow10": -double: 2 -idouble: 2 -ildouble: 1 -ldouble: 1 - -Function: "pow10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 9 -ldouble: 9 - -Function: "pow10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 9 -ldouble: 9 - -Function: "pow10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "pow_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "pow_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "pow_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sin": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "sin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "sin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "sincos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sincos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "sincos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 7 -ldouble: 7 - -Function: "sincos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "sinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: "sinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: "sinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: "sqrt": -ildouble: 1 -ldouble: 1 - -Function: "sqrt_downward": -ildouble: 1 -ldouble: 1 - -Function: "sqrt_towardzero": -ildouble: 1 -ldouble: 1 - -Function: "sqrt_upward": -ildouble: 1 -ldouble: 1 - -Function: "tan": -float: 3 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: "tan_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "tan_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: "tan_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "tanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "tanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "tanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "tanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: "tgamma": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: "tgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "y0_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 10 -ldouble: 10 - -Function: "y0_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: "y0_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 9 -ldouble: 9 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "y1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 9 -ldouble: 9 - -Function: "y1_upward": -double: 5 -float: 2 -idouble: 5 -ifloat: 2 -ildouble: 9 -ldouble: 9 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "yn_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 10 -ldouble: 10 - -Function: "yn_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: "yn_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 9 -ldouble: 9 - -# end of automatic generation diff --git a/sysdeps/powerpc/fpu/libm-test-ulps-name b/sysdeps/powerpc/fpu/libm-test-ulps-name deleted file mode 100644 index 8c5f7fa2ab..0000000000 --- a/sysdeps/powerpc/fpu/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -PowerPC diff --git a/sysdeps/powerpc/fpu/math_ldbl.h b/sysdeps/powerpc/fpu/math_ldbl.h deleted file mode 100644 index 05f51217bf..0000000000 --- a/sysdeps/powerpc/fpu/math_ldbl.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Manipulation of the bit representation of 'long double' quantities. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_LDBL_H_PPC_ -#define _MATH_LDBL_H_PPC_ 1 - -/* GCC does not optimize the default ldbl_pack code to not spill register - in the stack. The following optimization tells gcc that pack/unpack - is really a nop. We use fr1/fr2 because those are the regs used to - pass/return a single long double arg. */ -static inline long double -ldbl_pack_ppc (double a, double aa) -{ - register long double x __asm__ ("fr1"); - register double xh __asm__ ("fr1"); - register double xl __asm__ ("fr2"); - xh = a; - xl = aa; - __asm__ ("" : "=f" (x) : "f" (xh), "f" (xl)); - return x; -} - -static inline void -ldbl_unpack_ppc (long double l, double *a, double *aa) -{ - register long double x __asm__ ("fr1"); - register double xh __asm__ ("fr1"); - register double xl __asm__ ("fr2"); - x = l; - __asm__ ("" : "=f" (xh), "=f" (xl) : "f" (x)); - *a = xh; - *aa = xl; -} - -#define ldbl_pack ldbl_pack_ppc -#define ldbl_unpack ldbl_unpack_ppc - -#include - -#endif /* math_ldbl.h */ diff --git a/sysdeps/powerpc/fpu/math_private.h b/sysdeps/powerpc/fpu/math_private.h deleted file mode 100644 index 3c71275392..0000000000 --- a/sysdeps/powerpc/fpu/math_private.h +++ /dev/null @@ -1,142 +0,0 @@ -/* Private inline math functions for powerpc. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _PPC_MATH_PRIVATE_H_ -#define _PPC_MATH_PRIVATE_H_ - -#include -#include -#include -#include -#include_next - -extern double __slow_ieee754_sqrt (double); -extern __always_inline double -__ieee754_sqrt (double __x) -{ - double __z; - -#ifdef _ARCH_PPCSQ - asm ("fsqrt %0,%1" : "=f" (__z) : "f" (__x)); -#else - __z = __slow_ieee754_sqrt(__x); -#endif - - return __z; -} - -extern float __slow_ieee754_sqrtf (float); -extern __always_inline float -__ieee754_sqrtf (float __x) -{ - float __z; - -#ifdef _ARCH_PPCSQ - asm ("fsqrts %0,%1" : "=f" (__z) : "f" (__x)); -#else - __z = __slow_ieee754_sqrtf(__x); -#endif - - return __z; -} - -#if defined _ARCH_PWR5X - -# ifndef __round -# define __round(x) \ - ({ double __z; \ - __asm __volatile ( \ - " frin %0,%1\n" \ - : "=f" (__z) \ - : "f" (x)); \ - __z; }) -# endif -# ifndef __roundf -# define __roundf(x) \ - ({ float __z; \ - __asm __volatile ( \ - " frin %0,%1\n" \ - " frsp %0,%0\n" \ - : "=f" (__z) \ - : "f" (x)); \ - __z; }) -# endif - -# ifndef __trunc -# define __trunc(x) \ - ({ double __z; \ - __asm __volatile ( \ - " friz %0,%1\n" \ - : "=f" (__z) \ - : "f" (x)); \ - __z; }) -# endif -# ifndef __truncf -# define __truncf(x) \ - ({ float __z; \ - __asm __volatile ( \ - " friz %0,%1\n" \ - " frsp %0,%0\n" \ - : "=f" (__z) \ - : "f" (x)); \ - __z; }) -# endif - -# ifndef __ceil -# define __ceil(x) \ - ({ double __z; \ - __asm __volatile ( \ - " frip %0,%1\n" \ - : "=f" (__z) \ - : "f" (x)); \ - __z; }) -# endif -# ifndef __ceilf -# define __ceilf(x) \ - ({ float __z; \ - __asm __volatile ( \ - " frip %0,%1\n" \ - " frsp %0,%0\n" \ - : "=f" (__z) \ - : "f" (x)); \ - __z; }) -# endif - -# ifndef __floor -# define __floor(x) \ - ({ double __z; \ - __asm __volatile ( \ - " frim %0,%1\n" \ - : "=f" (__z) \ - : "f" (x)); \ - __z; }) -# endif -# ifndef __floorf -# define __floorf(x) \ - ({ float __z; \ - __asm __volatile ( \ - " frim %0,%1\n" \ - " frsp %0,%0\n" \ - : "=f" (__z) \ - : "f" (x)); \ - __z; }) -# endif - -#endif /* defined _ARCH_PWR5X */ - -#endif /* _PPC_MATH_PRIVATE_H_ */ diff --git a/sysdeps/powerpc/fpu/s_cosf.c b/sysdeps/powerpc/fpu/s_cosf.c deleted file mode 100644 index 772b138ac3..0000000000 --- a/sysdeps/powerpc/fpu/s_cosf.c +++ /dev/null @@ -1,69 +0,0 @@ -/* s_cosf.c -- float version of s_cos.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Adhemerval Zanella , 2011 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include - -static const float pio4 = 7.8539801e-1; - -float -__cosf (float x) -{ - float y[2], z = 0.0; - float ix; - int32_t n; - - ix = __builtin_fabsf (x); - - /* |x| ~< pi/4 */ - if (ix <= pio4) - { - return __kernel_cosf (x, z); - /* cos(Inf or NaN) is NaN */ - } - else if (isnanf (ix)) - { - return x - x; - } - else if (isinff (ix)) - { - __set_errno (EDOM); - return x - x; - } - - /* argument reduction needed */ - else - { - n = __ieee754_rem_pio2f (x, y); - switch (n & 3) - { - case 0: - return __kernel_cosf (y[0], y[1]); - case 1: - return -__kernel_sinf (y[0], y[1], 1); - case 2: - return -__kernel_cosf (y[0], y[1]); - default: - return __kernel_sinf (y[0], y[1], 1); - } - } -} - -weak_alias (__cosf, cosf) diff --git a/sysdeps/powerpc/fpu/s_fabs.S b/sysdeps/powerpc/fpu/s_fabs.S deleted file mode 100644 index 87dc82eb28..0000000000 --- a/sysdeps/powerpc/fpu/s_fabs.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Floating-point absolute value. PowerPC version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__fabs) -/* double [f1] fabs (double [f1] x); */ - fabs fp1,fp1 - blr -END(__fabs) - -weak_alias (__fabs,fabs) - -/* It turns out that it's safe to use this code even for single-precision. */ -strong_alias(__fabs,__fabsf) -weak_alias (__fabs,fabsf) - -#ifdef NO_LONG_DOUBLE -weak_alias (__fabs,__fabsl) -weak_alias (__fabs,fabsl) -#endif diff --git a/sysdeps/powerpc/fpu/s_fabsf.S b/sysdeps/powerpc/fpu/s_fabsf.S deleted file mode 100644 index 877c710ce8..0000000000 --- a/sysdeps/powerpc/fpu/s_fabsf.S +++ /dev/null @@ -1 +0,0 @@ -/* __fabsf is in s_fabs.S */ diff --git a/sysdeps/powerpc/fpu/s_float_bitwise.h b/sysdeps/powerpc/fpu/s_float_bitwise.h deleted file mode 100644 index 8e63fb253b..0000000000 --- a/sysdeps/powerpc/fpu/s_float_bitwise.h +++ /dev/null @@ -1,115 +0,0 @@ -/* Bitwise manipulation over float. Function prototypes. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Adhemerval Zanella , 2011 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FLOAT_BITWISE_ -#define _FLOAT_BITWISE_ 1 - -#include - -/* Returns (int)(num & 0x7FFFFFF0 == value) */ -static inline int -__float_and_test28 (float num, float value) -{ - float ret; -#ifdef _ARCH_PWR7 - union { - int i; - float f; - } mask = { .i = 0x7ffffff0 }; - __asm__ ( - /* the 'f' constraint is used on mask because we just need - * to compare floats, not full vector */ - "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask.f) - ); -#else - int32_t inum; - GET_FLOAT_WORD(inum, num); - inum = (inum & 0x7ffffff0); - SET_FLOAT_WORD(ret, inum); -#endif - return (ret == value); -} - -/* Returns (int)(num & 0x7FFFFF00 == value) */ -static inline int -__float_and_test24 (float num, float value) -{ - float ret; -#ifdef _ARCH_PWR7 - union { - int i; - float f; - } mask = { .i = 0x7fffff00 }; - __asm__ ( - "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask.f) - ); -#else - int32_t inum; - GET_FLOAT_WORD(inum, num); - inum = (inum & 0x7fffff00); - SET_FLOAT_WORD(ret, inum); -#endif - return (ret == value); -} - -/* Returns (float)(num & 0x7F800000) */ -static inline float -__float_and8 (float num) -{ - float ret; -#ifdef _ARCH_PWR7 - union { - int i; - float f; - } mask = { .i = 0x7f800000 }; - __asm__ ( - "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask.f) - ); -#else - int32_t inum; - GET_FLOAT_WORD(inum, num); - inum = (inum & 0x7f800000); - SET_FLOAT_WORD(ret, inum); -#endif - return ret; -} - -/* Returns ((int32_t)(num & 0x7F800000) >> 23) */ -static inline int32_t -__float_get_exp (float num) -{ - int32_t inum; -#ifdef _ARCH_PWR7 - float ret; - union { - int i; - float f; - } mask = { .i = 0x7f800000 }; - __asm__ ( - "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask.f) - ); - GET_FLOAT_WORD(inum, ret); -#else - GET_FLOAT_WORD(inum, num); - inum = inum & 0x7f800000; -#endif - return inum >> 23; -} - -#endif /* s_float_bitwise.h */ diff --git a/sysdeps/powerpc/fpu/s_fma.S b/sysdeps/powerpc/fpu/s_fma.S deleted file mode 100644 index e101f374bf..0000000000 --- a/sysdeps/powerpc/fpu/s_fma.S +++ /dev/null @@ -1,32 +0,0 @@ -/* Compute x * y + z as ternary operation. PowerPC version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__fma) -/* double [f1] fma (double [f1] x, double [f2] y, double [f3] z); */ - fmadd fp1,fp1,fp2,fp3 - blr -END(__fma) - -weak_alias (__fma,fma) - -#ifdef NO_LONG_DOUBLE -weak_alias (__fma,__fmal) -weak_alias (__fma,fmal) -#endif diff --git a/sysdeps/powerpc/fpu/s_fmaf.S b/sysdeps/powerpc/fpu/s_fmaf.S deleted file mode 100644 index 49ea298707..0000000000 --- a/sysdeps/powerpc/fpu/s_fmaf.S +++ /dev/null @@ -1,27 +0,0 @@ -/* Compute x * y + z as ternary operation. PowerPC version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__fmaf) -/* float [f1] fmaf (float [f1] x, float [f2] y, float [f3] z); */ - fmadds fp1,fp1,fp2,fp3 - blr -END(__fmaf) - -weak_alias (__fmaf,fmaf) diff --git a/sysdeps/powerpc/fpu/s_isnan.c b/sysdeps/powerpc/fpu/s_isnan.c deleted file mode 100644 index f75391fa80..0000000000 --- a/sysdeps/powerpc/fpu/s_isnan.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Return 1 if argument is a NaN, else 0. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ugly kludge to avoid declarations. */ -#define __isnanf __Xisnanf -#define isnanf Xisnanf -#define __GI___isnanf __GI___Xisnanf - -#include -#include -#include - -#undef __isnanf -#undef isnanf -#undef __GI___isnanf - - -/* The hidden_proto in include/math.h was obscured by the macro hackery. */ -__typeof (__isnan) __isnanf; -hidden_proto (__isnanf) - - -int -__isnan (double x) -{ - fenv_t savedstate; - int result; - savedstate = fegetenv_register (); - reset_fpscr_bit (FPSCR_VE); - result = !(x == x); - fesetenv_register (savedstate); - return result; -} -hidden_def (__isnan) -weak_alias (__isnan, isnan) - - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__isnan, __isnanf) -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif diff --git a/sysdeps/powerpc/fpu/s_isnanf.S b/sysdeps/powerpc/fpu/s_isnanf.S deleted file mode 100644 index fc22f678a1..0000000000 --- a/sysdeps/powerpc/fpu/s_isnanf.S +++ /dev/null @@ -1 +0,0 @@ -/* __isnanf is in s_isnan.c */ diff --git a/sysdeps/powerpc/fpu/s_lrintf.S b/sysdeps/powerpc/fpu/s_lrintf.S deleted file mode 100644 index e24766535f..0000000000 --- a/sysdeps/powerpc/fpu/s_lrintf.S +++ /dev/null @@ -1 +0,0 @@ -/* __lrintf is in s_lrint.c */ diff --git a/sysdeps/powerpc/fpu/s_rint.c b/sysdeps/powerpc/fpu/s_rint.c deleted file mode 100644 index a96140b2c9..0000000000 --- a/sysdeps/powerpc/fpu/s_rint.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Round a 64-bit floating point value to the nearest integer. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -double -__rint (double x) -{ - static const float TWO52 = 4503599627370496.0; - - if (fabs (x) < TWO52) - { - if (x > 0.0) - { - x += TWO52; - x -= TWO52; - } - else if (x < 0.0) - { - x = TWO52 - x; - x = -(x - TWO52); - } - } - - return x; -} -weak_alias (__rint, rint) -#ifdef NO_LONG_DOUBLE -strong_alias (__rint, __rintl) -weak_alias (__rint, rintl) -#endif diff --git a/sysdeps/powerpc/fpu/s_rintf.c b/sysdeps/powerpc/fpu/s_rintf.c deleted file mode 100644 index 6b16c7bec4..0000000000 --- a/sysdeps/powerpc/fpu/s_rintf.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Round a 32-bit floating point value to the nearest integer. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -float -__rintf (float x) -{ - static const float TWO23 = 8388608.0; - - if (fabsf (x) < TWO23) - { - if (x > 0.0) - { - x += TWO23; - x -= TWO23; - } - else if (x < 0.0) - { - x = TWO23 - x; - x = -(x - TWO23); - } - } - - return x; -} -weak_alias (__rintf, rintf) diff --git a/sysdeps/powerpc/fpu/s_sinf.c b/sysdeps/powerpc/fpu/s_sinf.c deleted file mode 100644 index 54a428e68a..0000000000 --- a/sysdeps/powerpc/fpu/s_sinf.c +++ /dev/null @@ -1,69 +0,0 @@ -/* s_sinf.c -- float version of s_sin.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Adhemerval Zanella , 2011 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include - -static const float pio4 = 7.8539801e-1; - -float -__sinf (float x) -{ - float y[2], z = 0.0; - float ix; - int32_t n; - - ix = __builtin_fabsf (x); - - /* |x| ~< pi/4 */ - if (ix <= pio4) - { - return __kernel_sinf (x, z, 0); - /* sin(Inf or NaN) is NaN */ - } - else if (isnanf (ix)) - { - return x - x; - } - else if (isinff (ix)) - { - __set_errno (EDOM); - return x - x; - } - - /* argument reduction needed */ - else - { - n = __ieee754_rem_pio2f (x, y); - switch (n & 3) - { - case 0: - return __kernel_sinf (y[0], y[1], 1); - case 1: - return __kernel_cosf (y[0], y[1]); - case 2: - return -__kernel_sinf (y[0], y[1], 1); - default: - return -__kernel_cosf (y[0], y[1]); - } - } -} - -weak_alias (__sinf, sinf) diff --git a/sysdeps/powerpc/fpu/t_sqrt.c b/sysdeps/powerpc/fpu/t_sqrt.c deleted file mode 100644 index 9ed7436ae6..0000000000 --- a/sysdeps/powerpc/fpu/t_sqrt.c +++ /dev/null @@ -1,144 +0,0 @@ -const float __t_sqrt[1024] = { -0.7078,0.7064, 0.7092,0.7050, 0.7106,0.7037, 0.7119,0.7023, 0.7133,0.7010, -0.7147,0.6996, 0.7160,0.6983, 0.7174,0.6970, 0.7187,0.6957, 0.7201,0.6943, -0.7215,0.6930, 0.7228,0.6917, 0.7242,0.6905, 0.7255,0.6892, 0.7269,0.6879, -0.7282,0.6866, 0.7295,0.6854, 0.7309,0.6841, 0.7322,0.6829, 0.7335,0.6816, -0.7349,0.6804, 0.7362,0.6792, 0.7375,0.6779, 0.7388,0.6767, 0.7402,0.6755, -0.7415,0.6743, 0.7428,0.6731, 0.7441,0.6719, 0.7454,0.6708, 0.7467,0.6696, -0.7480,0.6684, 0.7493,0.6672, 0.7507,0.6661, 0.7520,0.6649, 0.7532,0.6638, -0.7545,0.6627, 0.7558,0.6615, 0.7571,0.6604, 0.7584,0.6593, 0.7597,0.6582, -0.7610,0.6570, 0.7623,0.6559, 0.7635,0.6548, 0.7648,0.6537, 0.7661,0.6527, -0.7674,0.6516, 0.7686,0.6505, 0.7699,0.6494, 0.7712,0.6484, 0.7725,0.6473, -0.7737,0.6462, 0.7750,0.6452, 0.7762,0.6441, 0.7775,0.6431, 0.7787,0.6421, -0.7800,0.6410, 0.7812,0.6400, 0.7825,0.6390, 0.7837,0.6380, 0.7850,0.6370, -0.7862,0.6359, 0.7875,0.6349, 0.7887,0.6339, 0.7900,0.6330, 0.7912,0.6320, -0.7924,0.6310, 0.7937,0.6300, 0.7949,0.6290, 0.7961,0.6281, 0.7973,0.6271, -0.7986,0.6261, 0.7998,0.6252, 0.8010,0.6242, 0.8022,0.6233, 0.8034,0.6223, -0.8046,0.6214, 0.8059,0.6205, 0.8071,0.6195, 0.8083,0.6186, 0.8095,0.6177, -0.8107,0.6168, 0.8119,0.6158, 0.8131,0.6149, 0.8143,0.6140, 0.8155,0.6131, -0.8167,0.6122, 0.8179,0.6113, 0.8191,0.6104, 0.8203,0.6096, 0.8215,0.6087, -0.8227,0.6078, 0.8238,0.6069, 0.8250,0.6060, 0.8262,0.6052, 0.8274,0.6043, -0.8286,0.6035, 0.8297,0.6026, 0.8309,0.6017, 0.8321,0.6009, 0.8333,0.6000, -0.8344,0.5992, 0.8356,0.5984, 0.8368,0.5975, 0.8379,0.5967, 0.8391,0.5959, -0.8403,0.5950, 0.8414,0.5942, 0.8426,0.5934, 0.8437,0.5926, 0.8449,0.5918, -0.8461,0.5910, 0.8472,0.5902, 0.8484,0.5894, 0.8495,0.5886, 0.8507,0.5878, -0.8518,0.5870, 0.8530,0.5862, 0.8541,0.5854, 0.8552,0.5846, 0.8564,0.5838, -0.8575,0.5831, 0.8587,0.5823, 0.8598,0.5815, 0.8609,0.5808, 0.8621,0.5800, -0.8632,0.5792, 0.8643,0.5785, 0.8655,0.5777, 0.8666,0.5770, 0.8677,0.5762, -0.8688,0.5755, 0.8700,0.5747, 0.8711,0.5740, 0.8722,0.5733, 0.8733,0.5725, -0.8744,0.5718, 0.8756,0.5711, 0.8767,0.5703, 0.8778,0.5696, 0.8789,0.5689, -0.8800,0.5682, 0.8811,0.5675, 0.8822,0.5667, 0.8833,0.5660, 0.8844,0.5653, -0.8855,0.5646, 0.8866,0.5639, 0.8877,0.5632, 0.8888,0.5625, 0.8899,0.5618, -0.8910,0.5611, 0.8921,0.5605, 0.8932,0.5598, 0.8943,0.5591, 0.8954,0.5584, -0.8965,0.5577, 0.8976,0.5570, 0.8987,0.5564, 0.8998,0.5557, 0.9008,0.5550, -0.9019,0.5544, 0.9030,0.5537, 0.9041,0.5530, 0.9052,0.5524, 0.9062,0.5517, -0.9073,0.5511, 0.9084,0.5504, 0.9095,0.5498, 0.9105,0.5491, 0.9116,0.5485, -0.9127,0.5478, 0.9138,0.5472, 0.9148,0.5465, 0.9159,0.5459, 0.9170,0.5453, -0.9180,0.5446, 0.9191,0.5440, 0.9202,0.5434, 0.9212,0.5428, 0.9223,0.5421, -0.9233,0.5415, 0.9244,0.5409, 0.9254,0.5403, 0.9265,0.5397, 0.9276,0.5391, -0.9286,0.5384, 0.9297,0.5378, 0.9307,0.5372, 0.9318,0.5366, 0.9328,0.5360, -0.9338,0.5354, 0.9349,0.5348, 0.9359,0.5342, 0.9370,0.5336, 0.9380,0.5330, -0.9391,0.5324, 0.9401,0.5319, 0.9411,0.5313, 0.9422,0.5307, 0.9432,0.5301, -0.9442,0.5295, 0.9453,0.5289, 0.9463,0.5284, 0.9473,0.5278, 0.9484,0.5272, -0.9494,0.5266, 0.9504,0.5261, 0.9515,0.5255, 0.9525,0.5249, 0.9535,0.5244, -0.9545,0.5238, 0.9556,0.5233, 0.9566,0.5227, 0.9576,0.5221, 0.9586,0.5216, -0.9596,0.5210, 0.9607,0.5205, 0.9617,0.5199, 0.9627,0.5194, 0.9637,0.5188, -0.9647,0.5183, 0.9657,0.5177, 0.9667,0.5172, 0.9677,0.5167, 0.9687,0.5161, -0.9698,0.5156, 0.9708,0.5151, 0.9718,0.5145, 0.9728,0.5140, 0.9738,0.5135, -0.9748,0.5129, 0.9758,0.5124, 0.9768,0.5119, 0.9778,0.5114, 0.9788,0.5108, -0.9798,0.5103, 0.9808,0.5098, 0.9818,0.5093, 0.9828,0.5088, 0.9838,0.5083, -0.9847,0.5077, 0.9857,0.5072, 0.9867,0.5067, 0.9877,0.5062, 0.9887,0.5057, -0.9897,0.5052, 0.9907,0.5047, 0.9917,0.5042, 0.9926,0.5037, 0.9936,0.5032, -0.9946,0.5027, 0.9956,0.5022, 0.9966,0.5017, 0.9976,0.5012, 0.9985,0.5007, -0.9995,0.5002, -1.0010,0.4995, 1.0029,0.4985, 1.0049,0.4976, 1.0068,0.4966, 1.0088,0.4957, -1.0107,0.4947, 1.0126,0.4938, 1.0145,0.4928, 1.0165,0.4919, 1.0184,0.4910, -1.0203,0.4901, 1.0222,0.4891, 1.0241,0.4882, 1.0260,0.4873, 1.0279,0.4864, -1.0298,0.4855, 1.0317,0.4846, 1.0336,0.4837, 1.0355,0.4829, 1.0374,0.4820, -1.0393,0.4811, 1.0411,0.4802, 1.0430,0.4794, 1.0449,0.4785, 1.0468,0.4777, -1.0486,0.4768, 1.0505,0.4760, 1.0523,0.4751, 1.0542,0.4743, 1.0560,0.4735, -1.0579,0.4726, 1.0597,0.4718, 1.0616,0.4710, 1.0634,0.4702, 1.0653,0.4694, -1.0671,0.4686, 1.0689,0.4678, 1.0707,0.4670, 1.0726,0.4662, 1.0744,0.4654, -1.0762,0.4646, 1.0780,0.4638, 1.0798,0.4630, 1.0816,0.4623, 1.0834,0.4615, -1.0852,0.4607, 1.0870,0.4600, 1.0888,0.4592, 1.0906,0.4585, 1.0924,0.4577, -1.0942,0.4570, 1.0960,0.4562, 1.0978,0.4555, 1.0995,0.4547, 1.1013,0.4540, -1.1031,0.4533, 1.1049,0.4525, 1.1066,0.4518, 1.1084,0.4511, 1.1101,0.4504, -1.1119,0.4497, 1.1137,0.4490, 1.1154,0.4483, 1.1172,0.4476, 1.1189,0.4469, -1.1207,0.4462, 1.1224,0.4455, 1.1241,0.4448, 1.1259,0.4441, 1.1276,0.4434, -1.1293,0.4427, 1.1311,0.4421, 1.1328,0.4414, 1.1345,0.4407, 1.1362,0.4401, -1.1379,0.4394, 1.1397,0.4387, 1.1414,0.4381, 1.1431,0.4374, 1.1448,0.4368, -1.1465,0.4361, 1.1482,0.4355, 1.1499,0.4348, 1.1516,0.4342, 1.1533,0.4335, -1.1550,0.4329, 1.1567,0.4323, 1.1584,0.4316, 1.1600,0.4310, 1.1617,0.4304, -1.1634,0.4298, 1.1651,0.4292, 1.1668,0.4285, 1.1684,0.4279, 1.1701,0.4273, -1.1718,0.4267, 1.1734,0.4261, 1.1751,0.4255, 1.1768,0.4249, 1.1784,0.4243, -1.1801,0.4237, 1.1817,0.4231, 1.1834,0.4225, 1.1850,0.4219, 1.1867,0.4213, -1.1883,0.4208, 1.1900,0.4202, 1.1916,0.4196, 1.1932,0.4190, 1.1949,0.4185, -1.1965,0.4179, 1.1981,0.4173, 1.1998,0.4167, 1.2014,0.4162, 1.2030,0.4156, -1.2046,0.4151, 1.2063,0.4145, 1.2079,0.4139, 1.2095,0.4134, 1.2111,0.4128, -1.2127,0.4123, 1.2143,0.4117, 1.2159,0.4112, 1.2175,0.4107, 1.2192,0.4101, -1.2208,0.4096, 1.2224,0.4090, 1.2239,0.4085, 1.2255,0.4080, 1.2271,0.4075, -1.2287,0.4069, 1.2303,0.4064, 1.2319,0.4059, 1.2335,0.4054, 1.2351,0.4048, -1.2366,0.4043, 1.2382,0.4038, 1.2398,0.4033, 1.2414,0.4028, 1.2429,0.4023, -1.2445,0.4018, 1.2461,0.4013, 1.2477,0.4008, 1.2492,0.4003, 1.2508,0.3998, -1.2523,0.3993, 1.2539,0.3988, 1.2555,0.3983, 1.2570,0.3978, 1.2586,0.3973, -1.2601,0.3968, 1.2617,0.3963, 1.2632,0.3958, 1.2648,0.3953, 1.2663,0.3949, -1.2678,0.3944, 1.2694,0.3939, 1.2709,0.3934, 1.2725,0.3929, 1.2740,0.3925, -1.2755,0.3920, 1.2771,0.3915, 1.2786,0.3911, 1.2801,0.3906, 1.2816,0.3901, -1.2832,0.3897, 1.2847,0.3892, 1.2862,0.3887, 1.2877,0.3883, 1.2892,0.3878, -1.2907,0.3874, 1.2923,0.3869, 1.2938,0.3865, 1.2953,0.3860, 1.2968,0.3856, -1.2983,0.3851, 1.2998,0.3847, 1.3013,0.3842, 1.3028,0.3838, 1.3043,0.3834, -1.3058,0.3829, 1.3073,0.3825, 1.3088,0.3820, 1.3103,0.3816, 1.3118,0.3812, -1.3132,0.3807, 1.3147,0.3803, 1.3162,0.3799, 1.3177,0.3794, 1.3192,0.3790, -1.3207,0.3786, 1.3221,0.3782, 1.3236,0.3778, 1.3251,0.3773, 1.3266,0.3769, -1.3280,0.3765, 1.3295,0.3761, 1.3310,0.3757, 1.3324,0.3753, 1.3339,0.3748, -1.3354,0.3744, 1.3368,0.3740, 1.3383,0.3736, 1.3397,0.3732, 1.3412,0.3728, -1.3427,0.3724, 1.3441,0.3720, 1.3456,0.3716, 1.3470,0.3712, 1.3485,0.3708, -1.3499,0.3704, 1.3514,0.3700, 1.3528,0.3696, 1.3542,0.3692, 1.3557,0.3688, -1.3571,0.3684, 1.3586,0.3680, 1.3600,0.3676, 1.3614,0.3673, 1.3629,0.3669, -1.3643,0.3665, 1.3657,0.3661, 1.3672,0.3657, 1.3686,0.3653, 1.3700,0.3650, -1.3714,0.3646, 1.3729,0.3642, 1.3743,0.3638, 1.3757,0.3634, 1.3771,0.3631, -1.3785,0.3627, 1.3800,0.3623, 1.3814,0.3620, 1.3828,0.3616, 1.3842,0.3612, -1.3856,0.3609, 1.3870,0.3605, 1.3884,0.3601, 1.3898,0.3598, 1.3912,0.3594, -1.3926,0.3590, 1.3940,0.3587, 1.3954,0.3583, 1.3968,0.3580, 1.3982,0.3576, -1.3996,0.3572, 1.4010,0.3569, 1.4024,0.3565, 1.4038,0.3562, 1.4052,0.3558, -1.4066,0.3555, 1.4080,0.3551, 1.4094,0.3548, 1.4108,0.3544, 1.4121,0.3541, -1.4135,0.3537 -}; - - -/* Generated by: */ -#if 0 -#include -#include -#include - -int -main(int argc, char **argv) -{ - int i, j; - - printf ("const float __t_sqrt[1024] = {"); - for (i = 0; i < 2; i++) - { - putchar('\n'); - for (j = 0; j < 256; j++) - { - double mval = j/512.0 + 0.5; - double eval = i==0 ? 1.0 : 2.0; - double ls = sqrt(mval*eval); - double hs = sqrt((mval+1/512.0)*eval); - double as = (ls+hs)*0.5; - double lx = 1/(2.0*ls); - double hx = 1/(2.0*hs); - double ax = (lx+hx)*0.5; - - printf("%.4f,%.4f%s",as,ax, - i*j==255 ? "\n" : j % 5 == 4 ? ",\n" : ", "); - assert((hs-ls)/as < 1/256.0); - assert((hx-lx)/ax < 1/256.0); - } - } - printf ("};\n"); - return 0; -} -#endif /* 0 */ diff --git a/sysdeps/powerpc/fpu/tst-setcontext-fpscr.c b/sysdeps/powerpc/fpu/tst-setcontext-fpscr.c deleted file mode 100644 index 4e3f90d4d3..0000000000 --- a/sysdeps/powerpc/fpu/tst-setcontext-fpscr.c +++ /dev/null @@ -1,370 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ryan S. Arnold - Sean Curry - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static ucontext_t ctx[3]; - - -volatile int global; - - -static int back_in_main; - - -volatile static ElfW(auxv_t) *auxv = NULL; - -ElfW(Addr) query_auxv(int type) -{ - FILE *auxv_f; - ElfW(auxv_t) auxv_struct; - ElfW(auxv_t) *auxv_temp; - int i = 0; - - /* if the /proc/self/auxv file has not been manually copied into the heap - yet, then do it */ - - if(auxv == NULL) - { - auxv_f = fopen("/proc/self/auxv", "r"); - - if(auxv_f == 0) - { - perror("Error opening file for reading"); - return 0; - } - auxv = (ElfW(auxv_t) *)malloc(getpagesize()); - - do - { - fread(&auxv_struct, sizeof(ElfW(auxv_t)), 1, auxv_f); - auxv[i] = auxv_struct; - i++; - } while(auxv_struct.a_type != AT_NULL); - } - - auxv_temp = (ElfW(auxv_t) *)auxv; - i = 0; - do - { - if(auxv_temp[i].a_type == type) - { - return auxv_temp[i].a_un.a_val; - } - i++; - } while (auxv_temp[i].a_type != AT_NULL); - - return 0; -} - -typedef unsigned int di_fpscr_t __attribute__ ((__mode__ (__DI__))); -typedef unsigned int si_fpscr_t __attribute__ ((__mode__ (__SI__))); - -#define _FPSCR_RESERVED 0xfffffff8ffffff04ULL - -#define _FPSCR_TEST0_DRN 0x0000000400000000ULL -#define _FPSCR_TEST0_RN 0x0000000000000003ULL - -#define _FPSCR_TEST1_DRN 0x0000000300000000ULL -#define _FPSCR_TEST1_RN 0x0000000000000002ULL - -/* Macros for accessing the hardware control word on Power6[x]. */ -#define _GET_DI_FPSCR(__fpscr) \ - ({union { double d; di_fpscr_t fpscr; } u; \ - register double fr; \ - __asm__ ("mffs %0" : "=f" (fr)); \ - u.d = fr; \ - (__fpscr) = u.fpscr; \ - u.fpscr; \ - }) - -/* We make sure to zero fp after we use it in order to prevent stale data - in an fp register from making a test-case pass erroneously. */ -# define _SET_DI_FPSCR(__fpscr) \ - { union { double d; di_fpscr_t fpscr; } u; \ - register double fr; \ - u.fpscr = __fpscr; \ - fr = u.d; \ - /* Set the entire 64-bit FPSCR. */ \ - __asm__ (".machine push; " \ - ".machine \"power6\"; " \ - "mtfsf 255,%0,1,0; " \ - ".machine pop" : : "f" (fr)); \ - fr = 0.0; \ - } - -# define _GET_SI_FPSCR(__fpscr) \ - ({union { double d; di_fpscr_t fpscr; } u; \ - register double fr; \ - __asm__ ("mffs %0" : "=f" (fr)); \ - u.d = fr; \ - (__fpscr) = (si_fpscr_t) u.fpscr; \ - (si_fpscr_t) u.fpscr; \ - }) - -/* We make sure to zero fp after we use it in order to prevent stale data - in an fp register from making a test-case pass erroneously. */ -# define _SET_SI_FPSCR(__fpscr) \ - { union { double d; di_fpscr_t fpscr; } u; \ - register double fr; \ - /* More-or-less arbitrary; this is a QNaN. */ \ - u.fpscr = 0xfff80000ULL << 32; \ - u.fpscr |= __fpscr & 0xffffffffULL; \ - fr = u.d; \ - __asm__ ("mtfsf 255,%0" : : "f" (fr)); \ - fr = 0.0; \ - } - -void prime_special_regs(int which) -{ - ElfW(Addr) a_val; - - di_fpscr_t di_fpscr __attribute__ ((__aligned__(8))); - - a_val = query_auxv(AT_HWCAP); - if(a_val == -1) - { - puts ("querying the auxv for the hwcap failed"); - _exit (1); - } - - /* Indicates a 64-bit FPSCR. */ - if (a_val & PPC_FEATURE_HAS_DFP) - { - _GET_DI_FPSCR(di_fpscr); - - /* Overwrite the existing DRN and RN if there is one. */ - if (which == 0) - di_fpscr = ((di_fpscr & _FPSCR_RESERVED) | (_FPSCR_TEST0_DRN | _FPSCR_TEST0_RN)); - else - di_fpscr = ((di_fpscr & _FPSCR_RESERVED) | (_FPSCR_TEST1_DRN | _FPSCR_TEST1_RN)); - puts ("Priming 64-bit FPSCR with:"); - printf("0x%.16llx\n",(unsigned long long int)di_fpscr); - - _SET_DI_FPSCR(di_fpscr); - } - else - { - puts ("32-bit FPSCR found and will be tested."); - _GET_SI_FPSCR(di_fpscr); - - /* Overwrite the existing RN if there is one. */ - if (which == 0) - di_fpscr = ((di_fpscr & _FPSCR_RESERVED) | (_FPSCR_TEST0_RN)); - else - di_fpscr = ((di_fpscr & _FPSCR_RESERVED) | (_FPSCR_TEST1_RN)); - puts ("Priming 32-bit FPSCR with:"); - printf("0x%.8lx\n",(unsigned long int) di_fpscr); - - _SET_SI_FPSCR(di_fpscr); - } -} - -void clear_special_regs(void) -{ - ElfW(Addr) a_val; - - di_fpscr_t di_fpscr __attribute__ ((__aligned__(8))); - - union { - double d; - unsigned long long int lli; - unsigned int li[2]; - } dlli; - - a_val = query_auxv(AT_HWCAP); - if(a_val == -1) - { - puts ("querying the auxv for the hwcap failed"); - _exit (1); - } - -#if __WORDSIZE == 32 - dlli.d = ctx[0].uc_mcontext.uc_regs->fpregs.fpscr; -#else - dlli.d = ctx[0].uc_mcontext.fp_regs[32]; -#endif - - puts("The FPSCR value saved in the ucontext_t is:"); - - /* Indicates a 64-bit FPSCR. */ - if (a_val & PPC_FEATURE_HAS_DFP) - { - printf("0x%.16llx\n",dlli.lli); - di_fpscr = 0x0; - puts ("Clearing the 64-bit FPSCR to:"); - printf("0x%.16llx\n",(unsigned long long int) di_fpscr); - - _SET_DI_FPSCR(di_fpscr); - } - else - { - printf("0x%.8x\n",(unsigned int) dlli.li[1]); - di_fpscr = 0x0; - puts ("Clearing the 32-bit FPSCR to:"); - printf("0x%.8lx\n",(unsigned long int) di_fpscr); - - _SET_SI_FPSCR(di_fpscr); - } -} - -void test_special_regs(int which) -{ - ElfW(Addr) a_val; - unsigned long long int test; - - di_fpscr_t di_fpscr __attribute__ ((__aligned__(8))); - - a_val = query_auxv(AT_HWCAP); - if(a_val == -1) - { - puts ("querying the auxv for the hwcap failed"); - _exit (2); - } - - /* Indicates a 64-bit FPSCR. */ - if (a_val & PPC_FEATURE_HAS_DFP) - { - _GET_DI_FPSCR(di_fpscr); - - if (which == 0) - puts ("After setcontext the 64-bit FPSCR contains:"); - else - puts ("After swapcontext the 64-bit FPSCR contains:"); - - printf("0x%.16llx\n",(unsigned long long int) di_fpscr); - test = (_FPSCR_TEST0_DRN | _FPSCR_TEST0_RN); - if((di_fpscr & (test)) != (test)) - { - printf ("%s: DRN and RN bits set before getcontext were not preserved across [set|swap]context call: %m",__FUNCTION__); - _exit (3); - } - } - else - { - _GET_SI_FPSCR(di_fpscr); - if (which == 0) - puts ("After setcontext the 32-bit FPSCR contains:"); - else - puts ("After swapcontext the 32-bit FPSCR contains:"); - - printf("0x%.8lx\n",(unsigned long int) di_fpscr); - test = _FPSCR_TEST0_RN; - if((di_fpscr & test) != test) - { - printf ("%s: RN bit set before getcontext was not preserved across [set|swap]context call: %m",__FUNCTION__); - _exit (4); - } - } -} - - -static void -check_called (void) -{ - if (back_in_main == 0) - { - puts ("program did not reach main again"); - _exit (5); - } -} - - -int -main (void) -{ - atexit (check_called); - - puts ("priming the FPSCR with a marker"); - prime_special_regs (0); - - puts ("making contexts"); - if (getcontext (&ctx[0]) != 0) - { - if (errno == ENOSYS) - { - back_in_main = 1; - exit (0); - } - - printf ("%s: getcontext: %m\n", __FUNCTION__); - exit (6); - } - - /* Play some tricks with this context. */ - if (++global == 1) - { - clear_special_regs ( ); - if (setcontext (&ctx[0]) != 0) - { - printf ("%s: setcontext: %m\n", __FUNCTION__); - exit (7); - } - } - if (global != 2) - { - printf ("%s: 'global' not incremented twice\n", __FUNCTION__); - exit (8); - } - - test_special_regs (0); - - global = 0; - if (getcontext (&ctx[0]) != 0) - { - printf ("%s: getcontext: %m\n", __FUNCTION__); - exit (9); - } - - if (++global == 1) - { - puts ("priming the FPSCR with a marker"); - prime_special_regs (1); - - puts ("swapping contexts"); - if (swapcontext (&ctx[1], &ctx[0]) != 0) - { - printf ("%s: swapcontext: %m\n", __FUNCTION__); - exit (9); - } - } - if (global != 2) - { - printf ("%s: 'global' not incremented twice\n", __FUNCTION__); - exit (10); - } - - test_special_regs (1); - - puts ("back at main program"); - back_in_main = 1; - - puts ("test succeeded"); - return 0; -} diff --git a/sysdeps/powerpc/fpu_control.h b/sysdeps/powerpc/fpu_control.h deleted file mode 100644 index 842cbfa03f..0000000000 --- a/sysdeps/powerpc/fpu_control.h +++ /dev/null @@ -1,120 +0,0 @@ -/* FPU control word definitions. PowerPC version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FPU_CONTROL_H -#define _FPU_CONTROL_H - -#ifdef _SOFT_FLOAT - -# define _FPU_RESERVED 0xffffffff -# define _FPU_DEFAULT 0x00000000 /* Default value. */ -typedef unsigned int fpu_control_t; -# define _FPU_GETCW(cw) (cw) = 0 -# define _FPU_SETCW(cw) (void) (cw) -extern fpu_control_t __fpu_control; - -#elif defined __NO_FPRS__ /* e500 */ - -/* rounding control */ -# define _FPU_RC_NEAREST 0x00 /* RECOMMENDED */ -# define _FPU_RC_DOWN 0x03 -# define _FPU_RC_UP 0x02 -# define _FPU_RC_ZERO 0x01 - -/* masking of interrupts */ -# define _FPU_MASK_ZM 0x10 /* zero divide */ -# define _FPU_MASK_OM 0x04 /* overflow */ -# define _FPU_MASK_UM 0x08 /* underflow */ -# define _FPU_MASK_XM 0x40 /* inexact */ -# define _FPU_MASK_IM 0x20 /* invalid operation */ - -# define _FPU_RESERVED 0x00c10080 /* These bits are reserved and not changed. */ - -/* Correct IEEE semantics require traps to be enabled at the hardware - level; the kernel then does the emulation and determines whether - generation of signals from those traps was enabled using prctl. */ -# define _FPU_DEFAULT 0x0000003c /* Default value. */ -# define _FPU_IEEE _FPU_DEFAULT - -/* Type of the control word. */ -typedef unsigned int fpu_control_t; - -/* Macros for accessing the hardware control word. */ -# define _FPU_GETCW(cw) \ - __asm__ volatile ("mfspefscr %0" : "=r" (cw)) -# define _FPU_SETCW(cw) \ - __asm__ volatile ("mtspefscr %0" : : "r" (cw)) - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#else /* PowerPC 6xx floating-point. */ - -/* rounding control */ -# define _FPU_RC_NEAREST 0x00 /* RECOMMENDED */ -# define _FPU_RC_DOWN 0x03 -# define _FPU_RC_UP 0x02 -# define _FPU_RC_ZERO 0x01 - -# define _FPU_MASK_NI 0x04 /* non-ieee mode */ - -/* masking of interrupts */ -# define _FPU_MASK_ZM 0x10 /* zero divide */ -# define _FPU_MASK_OM 0x40 /* overflow */ -# define _FPU_MASK_UM 0x20 /* underflow */ -# define _FPU_MASK_XM 0x08 /* inexact */ -# define _FPU_MASK_IM 0x80 /* invalid operation */ - -# define _FPU_RESERVED 0xffffff00 /* These bits are reserved are not changed. */ - -/* The fdlibm code requires no interrupts for exceptions. */ -# define _FPU_DEFAULT 0x00000000 /* Default value. */ - -/* IEEE: same as above, but (some) exceptions; - we leave the 'inexact' exception off. - */ -# define _FPU_IEEE 0x000000f0 - -/* Type of the control word. */ -typedef unsigned int fpu_control_t; - -/* Macros for accessing the hardware control word. */ -# define _FPU_GETCW(cw) \ - ({union { double __d; unsigned long long __ll; } __u; \ - register double __fr; \ - __asm__ ("mffs %0" : "=f" (__fr)); \ - __u.__d = __fr; \ - (cw) = (fpu_control_t) __u.__ll; \ - (fpu_control_t) __u.__ll; \ - }) - -# define _FPU_SETCW(cw) \ - { union { double __d; unsigned long long __ll; } __u; \ - register double __fr; \ - __u.__ll = 0xfff80000LL << 32; /* This is a QNaN. */ \ - __u.__ll |= (cw) & 0xffffffffLL; \ - __fr = __u.__d; \ - __asm__ ("mtfsf 255,%0" : : "f" (__fr)); \ - } - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#endif /* PowerPC 6xx floating-point. */ - -#endif /* _FPU_CONTROL_H */ diff --git a/sysdeps/powerpc/gccframe.h b/sysdeps/powerpc/gccframe.h deleted file mode 100644 index 87edbae05b..0000000000 --- a/sysdeps/powerpc/gccframe.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Definition of object in frame unwind info. powerpc version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define DWARF_FRAME_REGISTERS 77 - -#include diff --git a/sysdeps/powerpc/hwcapinfo.c b/sysdeps/powerpc/hwcapinfo.c deleted file mode 100644 index 82ad222c36..0000000000 --- a/sysdeps/powerpc/hwcapinfo.c +++ /dev/null @@ -1,84 +0,0 @@ -/* powerpc HWCAP/HWCAP2 and AT_PLATFORM data pre-processing. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -uint64_t __tcb_hwcap __attribute__ ((visibility ("hidden"))); -uint32_t __tcb_platform __attribute__ ((visibility ("hidden"))); - -/* This function parses the HWCAP/HWCAP2 fields, adding the previous supported - ISA bits, as well as converting the AT_PLATFORM string to a number. This - data is stored in two global variables that can be used later by the - powerpc-specific code to store it into the TCB. */ -void -__tcb_parse_hwcap_and_convert_at_platform (void) -{ - - uint64_t h1, h2; - - /* Read AT_PLATFORM string from auxv and convert it to a number. */ - __tcb_platform = _dl_string_platform (GLRO (dl_platform)); - - /* Read HWCAP and HWCAP2 from auxv. */ - h1 = GLRO (dl_hwcap); - h2 = GLRO (dl_hwcap2); - - /* hwcap contains only the latest supported ISA, the code checks which is - and fills the previous supported ones. */ - - if (h2 & PPC_FEATURE2_ARCH_2_07) - h1 |= PPC_FEATURE_ARCH_2_06 - | PPC_FEATURE_ARCH_2_05 - | PPC_FEATURE_POWER5_PLUS - | PPC_FEATURE_POWER5 - | PPC_FEATURE_POWER4; - else if (h1 & PPC_FEATURE_ARCH_2_06) - h1 |= PPC_FEATURE_ARCH_2_05 - | PPC_FEATURE_POWER5_PLUS - | PPC_FEATURE_POWER5 - | PPC_FEATURE_POWER4; - else if (h1 & PPC_FEATURE_ARCH_2_05) - h1 |= PPC_FEATURE_POWER5_PLUS - | PPC_FEATURE_POWER5 - | PPC_FEATURE_POWER4; - else if (h1 & PPC_FEATURE_POWER5_PLUS) - h1 |= PPC_FEATURE_POWER5 - | PPC_FEATURE_POWER4; - else if (h1 & PPC_FEATURE_POWER5) - h1 |= PPC_FEATURE_POWER4; - - /* Consolidate both HWCAP and HWCAP2 into a single doubleword so that - we can read both in a single load later. */ - __tcb_hwcap = h2; - __tcb_hwcap = (h1 << 32) | __tcb_hwcap; - -} -#if IS_IN (rtld) -versioned_symbol (ld, __tcb_parse_hwcap_and_convert_at_platform, \ - __parse_hwcap_and_convert_at_platform, GLIBC_2_23); -#endif - -/* Export __parse_hwcap_and_convert_at_platform in libc.a. This is used by - GCC to make sure that the HWCAP/Platform bits are stored in the TCB when - using __builtin_cpu_is()/__builtin_cpu_supports() in the static case. */ -#ifndef SHARED -weak_alias (__tcb_parse_hwcap_and_convert_at_platform, \ - __parse_hwcap_and_convert_at_platform); -#endif diff --git a/sysdeps/powerpc/hwcapinfo.h b/sysdeps/powerpc/hwcapinfo.h deleted file mode 100644 index 830948a855..0000000000 --- a/sysdeps/powerpc/hwcapinfo.h +++ /dev/null @@ -1,29 +0,0 @@ -/* powerpc HWCAP/HWCAP2 and AT_PLATFORM data pre-processing. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef HWCAPINFO_H -# define HWCAPINFO_H - -extern uint64_t __tcb_hwcap attribute_hidden; -extern uint32_t __tcb_platform attribute_hidden; - -extern void __tcb_parse_hwcap_and_convert_at_platform (void); - -#endif diff --git a/sysdeps/powerpc/ifunc-sel.h b/sysdeps/powerpc/ifunc-sel.h deleted file mode 100644 index bdb00bf2c6..0000000000 --- a/sysdeps/powerpc/ifunc-sel.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Used by the elf ifunc tests. */ -#ifndef ELF_IFUNC_SEL_H -#define ELF_IFUNC_SEL_H 1 - -extern int global; - -static inline void * -inhibit_stack_protector -ifunc_sel (int (*f1) (void), int (*f2) (void), int (*f3) (void)) -{ - register void *ret __asm__ ("r3"); - __asm__ ("mflr 12\n\t" - "bcl 20,31,1f\n" - "1:\tmflr 11\n\t" - "mtlr 12\n\t" - "addis 12,11,global-1b@ha\n\t" - "lwz 12,global-1b@l(12)\n\t" - "addis %0,11,%2-1b@ha\n\t" - "addi %0,%0,%2-1b@l\n\t" - "cmpwi 12,1\n\t" - "beq 2f\n\t" - "addis %0,11,%3-1b@ha\n\t" - "addi %0,%0,%3-1b@l\n\t" - "cmpwi 12,-1\n\t" - "beq 2f\n\t" - "addis %0,11,%4-1b@ha\n\t" - "addi %0,%0,%4-1b@l\n\t" - "2:" - : "=r" (ret) - : "i" (&global), "i" (f1), "i" (f2), "i" (f3) - : "11", "12", "cr0"); - return ret; -} - -static inline void * -inhibit_stack_protector -ifunc_one (int (*f1) (void)) -{ - register void *ret __asm__ ("r3"); - __asm__ ("mflr 12\n\t" - "bcl 20,31,1f\n" - "1:\tmflr %0\n\t" - "mtlr 12\n\t" - "addis %0,%0,%1-1b@ha\n\t" - "addi %0,%0,%1-1b@l" - : "=r" (ret) - : "i" (f1) - : "12"); - return ret; -} -#endif diff --git a/sysdeps/powerpc/jmpbuf-offsets.h b/sysdeps/powerpc/jmpbuf-offsets.h deleted file mode 100644 index e748a35f4d..0000000000 --- a/sysdeps/powerpc/jmpbuf-offsets.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Private macros for accessing __jmp_buf contents. PowerPC version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define JB_GPR1 0 /* Also known as the stack pointer */ -#define JB_GPR2 1 -#define JB_LR 2 /* The address we will return to */ -#if __WORDSIZE == 64 -# define JB_GPRS 3 /* GPRs 14 through 31 are saved, 18*2 words total. */ -# define JB_CR 21 /* Shared dword with VRSAVE. CR word at offset 172. */ -# define JB_FPRS 22 /* FPRs 14 through 31 are saved, 18*2 words total. */ -# define JB_SIZE (64 * 8) /* As per PPC64-VMX ABI. */ -# define JB_VRSAVE 21 /* Shared dword with CR. VRSAVE word at offset 168. */ -# define JB_VRS 40 /* VRs 20 through 31 are saved, 12*4 words total. */ -#else -# define JB_GPRS 3 /* GPRs 14 through 31 are saved, 18 in total. */ -# define JB_CR 21 /* Condition code registers. */ -# define JB_FPRS 22 /* FPRs 14 through 31 are saved, 18*2 words total. */ -# define JB_SIZE ((64 + (12 * 4)) * 4) -# define JB_VRSAVE 62 -# define JB_VRS 64 -#endif diff --git a/sysdeps/powerpc/jmpbuf-unwind.h b/sysdeps/powerpc/jmpbuf-unwind.h deleted file mode 100644 index 96e2af9e3f..0000000000 --- a/sysdeps/powerpc/jmpbuf-unwind.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((void *) (address) < (void *) demangle ((jmpbuf)[JB_GPR1])) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf regs) -{ - uintptr_t sp = regs[JB_GPR1]; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return sp; -} - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/powerpc/ldsodefs.h b/sysdeps/powerpc/ldsodefs.h deleted file mode 100644 index 466de797fc..0000000000 --- a/sysdeps/powerpc/ldsodefs.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _POWERPC_LDSODEFS_H -#define _POWERPC_LDSODEFS_H 1 - -#include - -struct La_ppc32_regs; -struct La_ppc32_retval; -struct La_ppc64_regs; -struct La_ppc64_retval; -struct La_ppc64v2_regs; -struct La_ppc64v2_retval; - -#define ARCH_PLTENTER_MEMBERS \ - Elf32_Addr (*ppc32_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *, \ - uintptr_t *, struct La_ppc32_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep); \ - Elf64_Addr (*ppc64_gnu_pltenter) (Elf64_Sym *, unsigned int, uintptr_t *, \ - uintptr_t *, struct La_ppc64_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep); \ - Elf64_Addr (*ppc64v2_gnu_pltenter) (Elf64_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - struct La_ppc64v2_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep) - -#define ARCH_PLTEXIT_MEMBERS \ - unsigned int (*ppc32_gnu_pltexit) (Elf32_Sym *, unsigned int, \ - uintptr_t *, \ - uintptr_t *, \ - const struct La_ppc32_regs *, \ - struct La_ppc32_retval *, \ - const char *); \ - unsigned int (*ppc64_gnu_pltexit) (Elf64_Sym *, unsigned int, \ - uintptr_t *, \ - uintptr_t *, \ - const struct La_ppc64_regs *, \ - struct La_ppc64_retval *, \ - const char *); \ - unsigned int (*ppc64v2_gnu_pltexit) (Elf64_Sym *, unsigned int, \ - uintptr_t *, \ - uintptr_t *, \ - const struct La_ppc64v2_regs *,\ - struct La_ppc64v2_retval *, \ - const char *) - -#include_next - -#endif diff --git a/sysdeps/powerpc/libc-tls.c b/sysdeps/powerpc/libc-tls.c deleted file mode 100644 index 76d5c9abb9..0000000000 --- a/sysdeps/powerpc/libc-tls.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. PowerPC version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* On powerpc, the linker usually optimizes code sequences used to access - Thread Local Storage. However, when the user disables these optimizations - by passing --no-tls-optimze to the linker, we need to provide __tls_get_addr - in static libc in order to avoid undefined references to that symbol. */ - -void * -__tls_get_addr (tls_index *ti) -{ - dtv_t *dtv = THREAD_DTV (); - return (char *) dtv[1].pointer.val + ti->ti_offset + TLS_DTV_OFFSET; -} diff --git a/sysdeps/powerpc/locale-defines.sym b/sysdeps/powerpc/locale-defines.sym deleted file mode 100644 index 5c5379c39f..0000000000 --- a/sysdeps/powerpc/locale-defines.sym +++ /dev/null @@ -1,9 +0,0 @@ -#include - --- - -LOCALE_CTYPE_TOLOWER offsetof (struct __locale_struct, __ctype_tolower) -LOCALE_CTYPE_TOUPPER offsetof (struct __locale_struct, __ctype_toupper) -_NL_CTYPE_NONASCII_CASE -LOCALE_DATA_VALUES offsetof (struct __locale_data, values) -SIZEOF_VALUES sizeof (((struct __locale_data *) 0)->values[0]) diff --git a/sysdeps/powerpc/longjmp.c b/sysdeps/powerpc/longjmp.c deleted file mode 100644 index bd3ed8c22b..0000000000 --- a/sysdeps/powerpc/longjmp.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Versioned copy of sysdeps/generic/longjmp.c modified for AltiVec support. */ - -#include -#include -#include -#include - -extern void __vmx__longjmp (__jmp_buf __env, int __val) - __attribute__ ((noreturn)); -extern void __vmx__libc_longjmp (sigjmp_buf env, int val) - __attribute__ ((noreturn)); -libc_hidden_proto (__vmx__libc_longjmp) - -/* Set the signal mask to the one specified in ENV, and jump - to the position specified in ENV, causing the setjmp - call there to return VAL, or 1 if VAL is 0. */ -void -__vmx__libc_siglongjmp (sigjmp_buf env, int val) -{ - /* Perform any cleanups needed by the frames being unwound. */ - _longjmp_unwind (env, val); - - if (env[0].__mask_was_saved) - /* Restore the saved signal mask. */ - (void) __sigprocmask (SIG_SETMASK, &env[0].__saved_mask, - (sigset_t *) NULL); - - /* Call the machine-dependent function to restore machine state. */ - __vmx__longjmp (env[0].__jmpbuf, val ?: 1); -} - -strong_alias (__vmx__libc_siglongjmp, __vmx__libc_longjmp) -libc_hidden_def (__vmx__libc_longjmp) -weak_alias (__vmx__libc_siglongjmp, __vmx_longjmp) -weak_alias (__vmx__libc_siglongjmp, __vmxlongjmp) -weak_alias (__vmx__libc_siglongjmp, __vmxsiglongjmp) - - -default_symbol_version (__vmx__libc_longjmp, __libc_longjmp, GLIBC_PRIVATE); -default_symbol_version (__vmx__libc_siglongjmp, __libc_siglongjmp, GLIBC_PRIVATE); -versioned_symbol (libc, __vmx_longjmp, _longjmp, GLIBC_2_3_4); -versioned_symbol (libc, __vmxlongjmp, longjmp, GLIBC_2_3_4); -versioned_symbol (libc, __vmxsiglongjmp, siglongjmp, GLIBC_2_3_4); diff --git a/sysdeps/powerpc/machine-gmon.h b/sysdeps/powerpc/machine-gmon.h deleted file mode 100644 index 3078426a6d..0000000000 --- a/sysdeps/powerpc/machine-gmon.h +++ /dev/null @@ -1,30 +0,0 @@ -/* PowerPC-specific implementation of profiling support. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* We need a special version of the `mcount' function because it has - to preserve more registers than your usual function. */ - -void __mcount_internal (unsigned long frompc, unsigned long selfpc); - -#define _MCOUNT_DECL(frompc, selfpc) \ -void __mcount_internal (unsigned long frompc, unsigned long selfpc) - - -/* Define MCOUNT as empty since we have the implementation in another - file. */ -#define MCOUNT diff --git a/sysdeps/powerpc/math-tests.h b/sysdeps/powerpc/math-tests.h deleted file mode 100644 index f7ba200cfc..0000000000 --- a/sysdeps/powerpc/math-tests.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Configuration for math tests. PowerPC version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* On PowerPC, in versions of GCC up to at least 4.7.2, a type cast -- which is - a IEEE 754-2008 general-computational convertFormat operation (IEEE - 754-2008, 5.4.2) -- does not turn a sNaN into a qNaN (whilst raising an - INVALID exception), which is contrary to IEEE 754-2008 5.1 and 7.2. This - renders certain tests infeasible in this scenario. - . */ -#define SNAN_TESTS_TYPE_CAST 0 - -#ifndef __NO_FPRS__ -/* Setting exception flags in FPSCR results in enabled traps for those - exceptions being taken. */ -# define EXCEPTION_SET_FORCES_TRAP 1 -#endif - -#include_next diff --git a/sysdeps/powerpc/memusage.h b/sysdeps/powerpc/memusage.h deleted file mode 100644 index 69f098006a..0000000000 --- a/sysdeps/powerpc/memusage.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("%r1"); stack_ptr; }) - -#include diff --git a/sysdeps/powerpc/mp_clz_tab.c b/sysdeps/powerpc/mp_clz_tab.c deleted file mode 100644 index 4b5f29bfe5..0000000000 --- a/sysdeps/powerpc/mp_clz_tab.c +++ /dev/null @@ -1 +0,0 @@ -/* __clz_tab not needed on powerpc. */ diff --git a/sysdeps/powerpc/nofpu/Makefile b/sysdeps/powerpc/nofpu/Makefile deleted file mode 100644 index 35517b63a1..0000000000 --- a/sysdeps/powerpc/nofpu/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -# Makefile fragment for PowerPC with no FPU. - -ifeq ($(subdir),soft-fp) -sysdep_routines += $(gcc-single-routines) $(gcc-double-routines) \ - sim-full atomic-feholdexcept atomic-feclearexcept \ - atomic-feupdateenv flt-rounds -endif - -ifeq ($(subdir),math) -libm-support += fenv_const -CPPFLAGS += -I../soft-fp/ -# The follow CFLAGS are a work around for GCC Bugzilla Bug 29253 -# "expand_abs wrong default code for floating point" -# As this is not a regression, a fix is not likely to go into -# gcc-4.1.1 and may be too late for gcc-4.2. So we need these flags -# until the fix in a gcc release and glibc drops support for earlier -# versions of gcc. -CFLAGS-e_atan2l.c += -fno-builtin-fabsl -CFLAGS-e_hypotl.c += -fno-builtin-fabsl -CFLAGS-e_powl.c += -fno-builtin-fabsl -CFLAGS-s_ccoshl.c += -fno-builtin-fabsl -CFLAGS-s_csinhl.c += -fno-builtin-fabsl -CFLAGS-s_clogl.c += -fno-builtin-fabsl -CFLAGS-s_clog10l.c += -fno-builtin-fabsl -CFLAGS-s_csinl.c += -fno-builtin-fabsl -CFLAGS-s_csqrtl.c += -fno-builtin-fabsl -CFLAGS-w_acosl_compat.c += -fno-builtin-fabsl -CFLAGS-w_asinl_compat.c += -fno-builtin-fabsl -CFLAGS-w_atanhl_compat.c += -fno-builtin-fabsl -CFLAGS-w_j0l_compat.c += -fno-builtin-fabsl -CFLAGS-w_j1l_compat.c += -fno-builtin-fabsl -endif diff --git a/sysdeps/powerpc/nofpu/Subdirs b/sysdeps/powerpc/nofpu/Subdirs deleted file mode 100644 index 87eadf3024..0000000000 --- a/sysdeps/powerpc/nofpu/Subdirs +++ /dev/null @@ -1 +0,0 @@ -soft-fp diff --git a/sysdeps/powerpc/nofpu/Versions b/sysdeps/powerpc/nofpu/Versions deleted file mode 100644 index 9f569bd1a5..0000000000 --- a/sysdeps/powerpc/nofpu/Versions +++ /dev/null @@ -1,29 +0,0 @@ -libc { - GLIBC_2.3.2 { - __sim_exceptions; __sim_disabled_exceptions; __sim_round_mode; - __adddf3; __addsf3; __divdf3; __divsf3; __eqdf2; __eqsf2; - __extendsfdf2; __fixdfsi; __fixsfsi; - __fixunsdfsi; __fixunssfsi; - __floatsidf; __floatsisf; - __gedf2; __gesf2; __ledf2; __lesf2; __muldf3; __mulsf3; - __negdf2; __negsf2; __sqrtdf2; __sqrtsf2; __subdf3; - __subsf3; __truncdfsf2; - } - GLIBC_2.4 { - __floatundidf; __floatundisf; - __floatunsidf; __floatunsisf; - __unorddf2; __unordsf2; - __nedf2; __nesf2; - __gtdf2; __gtsf2; - __ltdf2; __ltsf2; - } - GLIBC_2.19 { - __atomic_feholdexcept; __atomic_feclearexcept; __atomic_feupdateenv; - __flt_rounds; - } - GLIBC_PRIVATE { - __sim_exceptions_thread; - __sim_disabled_exceptions_thread; - __sim_round_mode_thread; - } -} diff --git a/sysdeps/powerpc/nofpu/atomic-feclearexcept.c b/sysdeps/powerpc/nofpu/atomic-feclearexcept.c deleted file mode 100644 index 6946e19337..0000000000 --- a/sysdeps/powerpc/nofpu/atomic-feclearexcept.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Clear floating-point exceptions for atomic compound assignment. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" - -void -__atomic_feclearexcept (void) -{ - /* This function postdates the global variables being turned into - compat symbols, so no need to set them. */ - __sim_exceptions_thread = 0; -} diff --git a/sysdeps/powerpc/nofpu/atomic-feholdexcept.c b/sysdeps/powerpc/nofpu/atomic-feholdexcept.c deleted file mode 100644 index 50cf1b96ae..0000000000 --- a/sysdeps/powerpc/nofpu/atomic-feholdexcept.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Store current floating-point environment and clear exceptions for - atomic compound assignment. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" - -void -__atomic_feholdexcept (fenv_t *envp) -{ - fenv_union_t u; - - u.l[0] = __sim_exceptions_thread; - /* The rounding mode is not changed by arithmetic, so no need to - save it. */ - u.l[1] = __sim_disabled_exceptions_thread; - *envp = u.fenv; - - /* This function postdates the global variables being turned into - compat symbols, so no need to set them. */ - __sim_exceptions_thread = 0; - __sim_disabled_exceptions_thread = FE_ALL_EXCEPT; -} diff --git a/sysdeps/powerpc/nofpu/atomic-feupdateenv.c b/sysdeps/powerpc/nofpu/atomic-feupdateenv.c deleted file mode 100644 index e74178ff12..0000000000 --- a/sysdeps/powerpc/nofpu/atomic-feupdateenv.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Install given floating-point environment and raise exceptions for - atomic compound assignment. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" -#include - -void -__atomic_feupdateenv (const fenv_t *envp) -{ - fenv_union_t u; - int saved_exceptions = __sim_exceptions_thread; - - /* This function postdates the global variables being turned into - compat symbols, so no need to set them. */ - u.fenv = *envp; - __sim_exceptions_thread |= u.l[0]; - __sim_disabled_exceptions_thread = u.l[1]; - if (saved_exceptions & ~__sim_disabled_exceptions_thread) - raise (SIGFPE); -} diff --git a/sysdeps/powerpc/nofpu/fclrexcpt.c b/sysdeps/powerpc/nofpu/fclrexcpt.c deleted file mode 100644 index 1c8e578afc..0000000000 --- a/sysdeps/powerpc/nofpu/fclrexcpt.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Clear floating-point exceptions (soft-float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" - -int -__feclearexcept (int x) -{ - __sim_exceptions_thread &= ~x; - SIM_SET_GLOBAL (__sim_exceptions_global, __sim_exceptions_thread); - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feclearexcept, __old_feclearexcept) -compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1); -#endif - -libm_hidden_ver (__feclearexcept, feclearexcept) -versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2); diff --git a/sysdeps/powerpc/nofpu/fedisblxcpt.c b/sysdeps/powerpc/nofpu/fedisblxcpt.c deleted file mode 100644 index 6514f45a73..0000000000 --- a/sysdeps/powerpc/nofpu/fedisblxcpt.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Disable exceptions (soft-float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" -#include - -int -fedisableexcept (int x) -{ - int old_exceptions = ~__sim_disabled_exceptions_thread & FE_ALL_EXCEPT; - - __sim_disabled_exceptions_thread |= x; - SIM_SET_GLOBAL (__sim_disabled_exceptions_global, - __sim_disabled_exceptions_thread); - - return old_exceptions; -} diff --git a/sysdeps/powerpc/nofpu/feenablxcpt.c b/sysdeps/powerpc/nofpu/feenablxcpt.c deleted file mode 100644 index cd71e4e9cd..0000000000 --- a/sysdeps/powerpc/nofpu/feenablxcpt.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Enable exceptions (soft-float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-supp.h" -#include - -int -feenableexcept (int exceptions) -{ - int old_exceptions = ~__sim_disabled_exceptions_thread & FE_ALL_EXCEPT; - - __sim_disabled_exceptions_thread &= ~exceptions; - SIM_SET_GLOBAL (__sim_disabled_exceptions_global, - __sim_disabled_exceptions_thread); - - return old_exceptions; -} diff --git a/sysdeps/powerpc/nofpu/fegetenv.c b/sysdeps/powerpc/nofpu/fegetenv.c deleted file mode 100644 index 079946c58e..0000000000 --- a/sysdeps/powerpc/nofpu/fegetenv.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Store current floating-point environment (soft-float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002, 2010. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" - -int -__fegetenv (fenv_t *envp) -{ - fenv_union_t u; - - u.l[0] = __sim_exceptions_thread; - u.l[0] |= __sim_round_mode_thread; - u.l[1] = __sim_disabled_exceptions_thread; - - *envp = u.fenv; - - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetenv, __old_fegetenv) -compat_symbol (libm, __old_fegetenv, fegetenv, GLIBC_2_1); -#endif - -libm_hidden_def (__fegetenv) -libm_hidden_ver (__fegetenv, fegetenv) -versioned_symbol (libm, __fegetenv, fegetenv, GLIBC_2_2); diff --git a/sysdeps/powerpc/nofpu/fegetexcept.c b/sysdeps/powerpc/nofpu/fegetexcept.c deleted file mode 100644 index 36f4f45b36..0000000000 --- a/sysdeps/powerpc/nofpu/fegetexcept.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Get floating-point exceptions (soft-float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" - -int -fegetexcept (void) -{ - return (__sim_disabled_exceptions_thread ^ FE_ALL_EXCEPT) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/powerpc/nofpu/fegetmode.c b/sysdeps/powerpc/nofpu/fegetmode.c deleted file mode 100644 index 2346858eda..0000000000 --- a/sysdeps/powerpc/nofpu/fegetmode.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Store current floating-point control modes. PowerPC soft-float version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" - -int -fegetmode (femode_t *modep) -{ - fenv_union_t u; - - u.l[0] = __sim_round_mode_thread; - u.l[1] = __sim_disabled_exceptions_thread; - - *modep = u.fenv; - - return 0; -} diff --git a/sysdeps/powerpc/nofpu/fegetround.c b/sysdeps/powerpc/nofpu/fegetround.c deleted file mode 100644 index 7d7dfbaeef..0000000000 --- a/sysdeps/powerpc/nofpu/fegetround.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Return current rounding mode (soft-float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" - -int -__fegetround (void) -{ - return __sim_round_mode_thread; -} -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/powerpc/nofpu/feholdexcpt.c b/sysdeps/powerpc/nofpu/feholdexcpt.c deleted file mode 100644 index b0dce0bed1..0000000000 --- a/sysdeps/powerpc/nofpu/feholdexcpt.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Store current floating-point environment and clear exceptions - (soft-float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" - -int -__feholdexcept (fenv_t *envp) -{ - fenv_union_t u; - - /* Get the current state. */ - __fegetenv (envp); - - u.fenv = *envp; - /* Clear everything except the rounding mode. */ - u.l[0] &= 0x3; - /* Disable exceptions */ - u.l[1] = FE_ALL_EXCEPT; - - /* Put the new state in effect. */ - __fesetenv (&u.fenv); - - return 0; -} -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/powerpc/nofpu/fenv_const.c b/sysdeps/powerpc/nofpu/fenv_const.c deleted file mode 100644 index 451070bcdf..0000000000 --- a/sysdeps/powerpc/nofpu/fenv_const.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Constants for fenv_bits.h (soft float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* We want to specify the bit pattern of the __fe_*_env constants, so - pretend they're really `long long' instead of `double'. */ - -/* If the default argument is used we use this value. Disable all - signalling exceptions as default. */ -const unsigned long long __fe_dfl_env __attribute__ ((aligned (8))) = -0x000000003e000000ULL; - -/* The same representation is used for femode_t. */ -extern const unsigned long long __fe_dfl_mode - __attribute__ ((aligned (8), alias ("__fe_dfl_env"))); - -/* Floating-point environment where none of the exceptions are masked. */ -const unsigned long long __fe_enabled_env __attribute__ ((aligned (8))) = -0x0000000000000000ULL; - -/* Floating-point environment with the NI bit set. No difference for - soft float from the default environment. */ -strong_alias (__fe_dfl_env, __fe_nonieee_env) diff --git a/sysdeps/powerpc/nofpu/fesetenv.c b/sysdeps/powerpc/nofpu/fesetenv.c deleted file mode 100644 index f6ef1737bd..0000000000 --- a/sysdeps/powerpc/nofpu/fesetenv.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Set floating point environment (soft-float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" - -int -__fesetenv (const fenv_t *envp) -{ - fenv_union_t u; - - u.fenv = *envp; - __sim_exceptions_thread = u.l[0] & FE_ALL_EXCEPT; - SIM_SET_GLOBAL (__sim_exceptions_global, __sim_exceptions_thread); - __sim_round_mode_thread = u.l[0] & 0x3; - SIM_SET_GLOBAL (__sim_round_mode_global, __sim_round_mode_thread); - __sim_disabled_exceptions_thread = u.l[1]; - SIM_SET_GLOBAL (__sim_disabled_exceptions_global, - __sim_disabled_exceptions_thread); - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetenv, __old_fesetenv) -compat_symbol (libm, __old_fesetenv, fesetenv, GLIBC_2_1); -#endif - -libm_hidden_def (__fesetenv) -libm_hidden_ver (__fesetenv, fesetenv) -versioned_symbol (libm, __fesetenv, fesetenv, GLIBC_2_2); diff --git a/sysdeps/powerpc/nofpu/fesetexcept.c b/sysdeps/powerpc/nofpu/fesetexcept.c deleted file mode 100644 index c22ee2e952..0000000000 --- a/sysdeps/powerpc/nofpu/fesetexcept.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Set given exception flags. PowerPC soft-float version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-supp.h" - -int -fesetexcept (int excepts) -{ - __sim_exceptions_thread |= (excepts & FE_ALL_EXCEPT); - SIM_SET_GLOBAL (__sim_exceptions_global, __sim_exceptions_thread); - - return 0; -} diff --git a/sysdeps/powerpc/nofpu/fesetmode.c b/sysdeps/powerpc/nofpu/fesetmode.c deleted file mode 100644 index 85ce8b3ae1..0000000000 --- a/sysdeps/powerpc/nofpu/fesetmode.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Install given floating-point control modes. PowerPC soft-float version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" - -int -fesetmode (const femode_t *modep) -{ - fenv_union_t u; - - u.fenv = *modep; - __sim_round_mode_thread = u.l[0]; - SIM_SET_GLOBAL (__sim_round_mode_global, __sim_round_mode_thread); - __sim_disabled_exceptions_thread = u.l[1]; - SIM_SET_GLOBAL (__sim_disabled_exceptions_global, - __sim_disabled_exceptions_thread); - return 0; -} diff --git a/sysdeps/powerpc/nofpu/fesetround.c b/sysdeps/powerpc/nofpu/fesetround.c deleted file mode 100644 index 2ca60b5014..0000000000 --- a/sysdeps/powerpc/nofpu/fesetround.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Set rounding mode (soft-float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" - -int -__fesetround (int round) -{ - if ((unsigned int) round > FE_DOWNWARD) - return 1; - - __sim_round_mode_thread = round; - SIM_SET_GLOBAL (__sim_round_mode_global, __sim_round_mode_thread); - - return 0; -} -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/powerpc/nofpu/feupdateenv.c b/sysdeps/powerpc/nofpu/feupdateenv.c deleted file mode 100644 index 316b7a96f3..0000000000 --- a/sysdeps/powerpc/nofpu/feupdateenv.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Install given floating-point environment and raise exceptions - (soft-float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" -#include - -int -__feupdateenv (const fenv_t *envp) -{ - int saved_exceptions; - - /* Save currently set exceptions. */ - saved_exceptions = __sim_exceptions_thread; - - /* Set environment. */ - __fesetenv (envp); - - /* Raise old exceptions. */ - __sim_exceptions_thread |= saved_exceptions; - SIM_SET_GLOBAL (__sim_exceptions_global, __sim_exceptions_thread); - if (saved_exceptions & ~__sim_disabled_exceptions_thread) - raise (SIGFPE); - - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feupdateenv, __old_feupdateenv) -compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1); -#endif - -libm_hidden_def (__feupdateenv) -libm_hidden_ver (__feupdateenv, feupdateenv) -versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2); diff --git a/sysdeps/powerpc/nofpu/fgetexcptflg.c b/sysdeps/powerpc/nofpu/fgetexcptflg.c deleted file mode 100644 index 4247be2352..0000000000 --- a/sysdeps/powerpc/nofpu/fgetexcptflg.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Store current representation for exceptions (soft-float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" - -int -__fegetexceptflag (fexcept_t *flagp, int excepts) -{ - *flagp = (fexcept_t) __sim_exceptions_thread & excepts & FE_ALL_EXCEPT; - - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetexceptflag, __old_fegetexceptflag) -compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2); diff --git a/sysdeps/powerpc/nofpu/flt-rounds.c b/sysdeps/powerpc/nofpu/flt-rounds.c deleted file mode 100644 index 744ba95d60..0000000000 --- a/sysdeps/powerpc/nofpu/flt-rounds.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Return current rounding mode as correct value for FLT_ROUNDS. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#include "soft-fp.h" -#include "soft-supp.h" - -int -__flt_rounds (void) -{ - switch (__sim_round_mode_thread) - { - case FP_RND_ZERO: - return 0; - case FP_RND_NEAREST: - return 1; - case FP_RND_PINF: - return 2; - case FP_RND_MINF: - return 3; - default: - abort (); - } -} diff --git a/sysdeps/powerpc/nofpu/fraiseexcpt.c b/sysdeps/powerpc/nofpu/fraiseexcpt.c deleted file mode 100644 index 585c1c7d95..0000000000 --- a/sysdeps/powerpc/nofpu/fraiseexcpt.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Raise given exceptions (soft-float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" -#include - -#undef feraiseexcept -int -__feraiseexcept (int x) -{ - __sim_exceptions_thread |= x; - SIM_SET_GLOBAL (__sim_exceptions_global, __sim_exceptions_thread); - if (x & ~__sim_disabled_exceptions_thread) - raise (SIGFPE); - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feraiseexcept, __old_feraiseexcept) -compat_symbol (libm, __old_feraiseexcept, feraiseexcept, GLIBC_2_1); -#endif - -libm_hidden_def (__feraiseexcept) -libm_hidden_ver (__feraiseexcept, feraiseexcept) -versioned_symbol (libm, __feraiseexcept, feraiseexcept, GLIBC_2_2); diff --git a/sysdeps/powerpc/nofpu/fsetexcptflg.c b/sysdeps/powerpc/nofpu/fsetexcptflg.c deleted file mode 100644 index 10b64285d3..0000000000 --- a/sysdeps/powerpc/nofpu/fsetexcptflg.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Set floating-point environment exception handling (soft-float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" - -int -__fesetexceptflag(const fexcept_t *flagp, int excepts) -{ - /* Ignore exceptions not listed in 'excepts'. */ - __sim_exceptions_thread - = (__sim_exceptions_thread & ~excepts) | (*flagp & excepts); - SIM_SET_GLOBAL (__sim_exceptions_global, __sim_exceptions_thread); - - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetexceptflag, __old_fesetexceptflag) -compat_symbol (libm, __old_fesetexceptflag, fesetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fesetexceptflag, fesetexceptflag, GLIBC_2_2); diff --git a/sysdeps/powerpc/nofpu/ftestexcept.c b/sysdeps/powerpc/nofpu/ftestexcept.c deleted file mode 100644 index 56c804e558..0000000000 --- a/sysdeps/powerpc/nofpu/ftestexcept.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Test floating-point exceptions (soft-float edition). - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "soft-fp.h" -#include "soft-supp.h" - -int -fetestexcept (int x) -{ - return __sim_exceptions_thread & x; -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/powerpc/nofpu/get-rounding-mode.h b/sysdeps/powerpc/nofpu/get-rounding-mode.h deleted file mode 100644 index 4e6206e121..0000000000 --- a/sysdeps/powerpc/nofpu/get-rounding-mode.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Determine floating-point rounding mode within libc. PowerPC - soft-float version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _POWERPC_NOFPU_GET_ROUNDING_MODE_H -#define _POWERPC_NOFPU_GET_ROUNDING_MODE_H 1 - -#include - -#include "soft-supp.h" - -/* Return the floating-point rounding mode. */ - -static inline int -get_rounding_mode (void) -{ - return __sim_round_mode_thread; -} - -#endif /* get-rounding-mode.h */ diff --git a/sysdeps/powerpc/nofpu/libm-test-ulps b/sysdeps/powerpc/nofpu/libm-test-ulps deleted file mode 100644 index 8935f0d714..0000000000 --- a/sysdeps/powerpc/nofpu/libm-test-ulps +++ /dev/null @@ -1,2364 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "acos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "acos_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "acosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "acosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "acosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "acosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 4 - -Function: "asin": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "asinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "asinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 7 -ldouble: 7 - -Function: "atan": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "atan2_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "atan2_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: "atan2_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "atan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "atan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "atanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "cabs": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacos_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cacos_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Real part of "cacos_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "cacos_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Real part of "cacos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "cacos_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 -ildouble: 13 -ldouble: 13 - -Function: Real part of "cacosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "cacosh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "cacosh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "cacosh_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: Real part of "cacosh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 12 -ldouble: 12 - -Function: Imaginary part of "cacosh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "carg": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "carg_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "carg_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: "carg_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casin": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "casin_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Real part of "casin_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casin_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Real part of "casin_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "casin_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 -ildouble: 13 -ldouble: 13 - -Function: Real part of "casinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casinh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "casinh_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "casinh_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Real part of "casinh_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 -ildouble: 13 -ldouble: 13 - -Function: Imaginary part of "casinh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Real part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "catan_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: Real part of "catan_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "catan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "catan_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catanh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "catanh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Real part of "catanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "catanh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: Real part of "catanh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "catanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 6 -ldouble: 6 - -Function: "cbrt": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: "cbrt_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "cbrt_upward": -double: 5 -float: 1 -idouble: 5 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "ccos_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "ccos_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "ccos_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "ccos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "ccosh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "ccosh_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 10 -ldouble: 10 - -Function: Imaginary part of "ccosh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "ccosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cexp_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 11 -ldouble: 11 - -Function: Imaginary part of "cexp_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 11 -ldouble: 11 - -Function: Real part of "cexp_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 11 -ldouble: 11 - -Function: Imaginary part of "cexp_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 11 -ldouble: 11 - -Function: Real part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog10": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog10_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "clog10_downward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: Real part of "clog10_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "clog10_towardzero": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: Real part of "clog10_upward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "clog10_upward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: Real part of "clog_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Real part of "clog_towardzero": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 7 -ldouble: 7 - -Function: Real part of "clog_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "clog_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "cos": -float: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "cos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "cos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "cos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "cosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cpow_downward": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "cpow_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cpow_towardzero": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "cpow_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cpow_upward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cpow_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin": -ildouble: 1 -ldouble: 1 - -Function: Real part of "csin_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "csin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 6 -ldouble: 6 - -Function: Real part of "csin_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "csin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 6 -ldouble: 6 - -Function: Real part of "csin_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csinh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "csinh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "csinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "csinh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "csinh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csqrt_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "csqrt_upward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 12 -ldouble: 12 - -Function: Imaginary part of "csqrt_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctan_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "ctan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 9 -ldouble: 9 - -Function: Real part of "ctan_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 13 -ldouble: 13 - -Function: Real part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 10 -ldouble: 10 - -Function: Real part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 9 -ldouble: 9 - -Function: Imaginary part of "ctanh_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 13 -ldouble: 13 - -Function: Imaginary part of "ctanh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 10 -ldouble: 10 - -Function: Real part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 10 -ldouble: 10 - -Function: Imaginary part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 10 -ldouble: 10 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erf_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erf_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erfc": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "erfc_downward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 -ildouble: 10 -ldouble: 10 - -Function: "erfc_towardzero": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 9 -ldouble: 9 - -Function: "erfc_upward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 -ildouble: 7 -ldouble: 7 - -Function: "exp": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp10": -double: 2 -idouble: 2 -ildouble: 1 -ldouble: 1 - -Function: "exp10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 9 -ldouble: 9 - -Function: "exp10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 9 -ldouble: 9 - -Function: "exp10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "exp2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "expm1_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "expm1_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 6 -ldouble: 6 - -Function: "fma": -ildouble: 1 -ldouble: 1 - -Function: "fma_downward": -ildouble: 1 -ldouble: 1 - -Function: "fma_towardzero": -ildouble: 2 -ldouble: 2 - -Function: "fma_upward": -ildouble: 3 -ldouble: 3 - -Function: "fmod": -ildouble: 1 -ldouble: 1 - -Function: "fmod_downward": -ildouble: 1 -ldouble: 1 - -Function: "fmod_towardzero": -ildouble: 1 -ldouble: 1 - -Function: "fmod_upward": -ildouble: 1 -ldouble: 1 - -Function: "gamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: "gamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 15 -ldouble: 15 - -Function: "gamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 16 -ldouble: 16 - -Function: "gamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 11 -ldouble: 11 - -Function: "hypot": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_downward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "hypot_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "hypot_upward": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j0_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 11 -ldouble: 11 - -Function: "j0_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 8 -ldouble: 8 - -Function: "j0_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "j1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: "j1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: "j1_upward": -double: 3 -float: 5 -idouble: 3 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "jn_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: "jn_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: "jn_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: "ldexp_downward": -ildouble: 1 -ldouble: 1 - -Function: "ldexp_upward": -ildouble: 1 -ldouble: 1 - -Function: "lgamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: "lgamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 15 -ldouble: 15 - -Function: "lgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 16 -ldouble: 16 - -Function: "lgamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 11 -ldouble: 11 - -Function: "log": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "log10_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log10_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log1p": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log1p_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log1p_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log1p_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log2": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log2_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: "log2_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "log2_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "log_downward": -float: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log_towardzero": -float: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "nextafter_downward": -ildouble: 1 -ldouble: 1 - -Function: "nextafter_upward": -ildouble: 1 -ldouble: 1 - -Function: "pow": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "pow10": -double: 2 -idouble: 2 -ildouble: 1 -ldouble: 1 - -Function: "pow10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 9 -ldouble: 9 - -Function: "pow10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 9 -ldouble: 9 - -Function: "pow10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "pow_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "pow_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "pow_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "scalb_downward": -ildouble: 1 -ldouble: 1 - -Function: "scalb_upward": -ildouble: 1 -ldouble: 1 - -Function: "scalbln_downward": -ildouble: 1 -ldouble: 1 - -Function: "scalbln_upward": -ildouble: 1 -ldouble: 1 - -Function: "scalbn_downward": -ildouble: 1 -ldouble: 1 - -Function: "scalbn_upward": -ildouble: 1 -ldouble: 1 - -Function: "sin": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "sin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "sin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "sincos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sincos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "sincos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 7 -ldouble: 7 - -Function: "sincos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "sinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: "sinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: "sinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: "sqrt": -ildouble: 1 -ldouble: 1 - -Function: "sqrt_downward": -ildouble: 1 -ldouble: 1 - -Function: "sqrt_towardzero": -ildouble: 1 -ldouble: 1 - -Function: "sqrt_upward": -ildouble: 1 -ldouble: 1 - -Function: "tan": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "tan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "tan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "tan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "tanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "tanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "tanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "tanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: "tgamma": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: "tgamma_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: "tgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: "tgamma_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "y0_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 10 -ldouble: 10 - -Function: "y0_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: "y0_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "y1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "y1_upward": -double: 7 -float: 2 -idouble: 7 -ifloat: 2 -ildouble: 9 -ldouble: 9 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "yn_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 10 -ldouble: 10 - -Function: "yn_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 8 -ldouble: 8 - -Function: "yn_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -# end of automatic generation diff --git a/sysdeps/powerpc/nofpu/libm-test-ulps-name b/sysdeps/powerpc/nofpu/libm-test-ulps-name deleted file mode 100644 index 3ed2c6ec8a..0000000000 --- a/sysdeps/powerpc/nofpu/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -PowerPC soft-float diff --git a/sysdeps/powerpc/nofpu/sim-full.c b/sysdeps/powerpc/nofpu/sim-full.c deleted file mode 100644 index da48f3714e..0000000000 --- a/sysdeps/powerpc/nofpu/sim-full.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Software floating-point exception handling emulation. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include "soft-fp.h" -#include "soft-supp.h" - -/* Thread-local to store sticky exceptions. */ -__thread int __sim_exceptions_thread __attribute__ ((nocommon)); -libc_hidden_data_def (__sim_exceptions_thread); - -/* By default, no exceptions should trap. */ -__thread int __sim_disabled_exceptions_thread = 0xffffffff; -libc_hidden_data_def (__sim_disabled_exceptions_thread); - -__thread int __sim_round_mode_thread __attribute__ ((nocommon)); -libc_hidden_data_def (__sim_round_mode_thread); - -#if SIM_GLOBAL_COMPAT -int __sim_exceptions_global __attribute__ ((nocommon)); -libc_hidden_data_def (__sim_exceptions_global); -SIM_COMPAT_SYMBOL (__sim_exceptions_global, __sim_exceptions); - -int __sim_disabled_exceptions_global = 0xffffffff; -libc_hidden_data_def (__sim_disabled_exceptions_global); -SIM_COMPAT_SYMBOL (__sim_disabled_exceptions_global, - __sim_disabled_exceptions); - -int __sim_round_mode_global __attribute__ ((nocommon)); -libc_hidden_data_def (__sim_round_mode_global); -SIM_COMPAT_SYMBOL (__sim_round_mode_global, __sim_round_mode); -#endif - -void -__simulate_exceptions (int x) -{ - __sim_exceptions_thread |= x; - SIM_SET_GLOBAL (__sim_exceptions_global, __sim_exceptions_thread); - if (x & ~__sim_disabled_exceptions_thread) - raise (SIGFPE); -} diff --git a/sysdeps/powerpc/nofpu/soft-supp.h b/sysdeps/powerpc/nofpu/soft-supp.h deleted file mode 100644 index f66d9573fa..0000000000 --- a/sysdeps/powerpc/nofpu/soft-supp.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Internal support stuff for complete soft float. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Aldy Hernandez , 2002. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#if defined __NO_FPRS__ && !defined _SOFT_FLOAT - -# include - -#else - -# include - -typedef union -{ - fenv_t fenv; - unsigned int l[2]; -} fenv_union_t; - -#endif - -extern __thread int __sim_exceptions_thread attribute_tls_model_ie; -libc_hidden_tls_proto (__sim_exceptions_thread, tls_model ("initial-exec")); -extern __thread int __sim_disabled_exceptions_thread attribute_tls_model_ie; -libc_hidden_tls_proto (__sim_disabled_exceptions_thread, - tls_model ("initial-exec")); -extern __thread int __sim_round_mode_thread attribute_tls_model_ie; -libc_hidden_tls_proto (__sim_round_mode_thread, tls_model ("initial-exec")); - -/* These variables were formerly global, so there are compat symbols - for global versions as well. */ - -#include -#define SIM_GLOBAL_COMPAT SHLIB_COMPAT (libc, GLIBC_2_3_2, GLIBC_2_19) -#if SIM_GLOBAL_COMPAT -extern int __sim_exceptions_global; -libc_hidden_proto (__sim_exceptions_global); -extern int __sim_disabled_exceptions_global ; -libc_hidden_proto (__sim_disabled_exceptions_global); -extern int __sim_round_mode_global; -libc_hidden_proto (__sim_round_mode_global); -# define SIM_COMPAT_SYMBOL(GLOBAL_NAME, NAME) \ - compat_symbol (libc, GLOBAL_NAME, NAME, GLIBC_2_3_2) -# define SIM_SET_GLOBAL(GLOBAL_VAR, THREAD_VAR) ((GLOBAL_VAR) = (THREAD_VAR)) -#else -# define SIM_SET_GLOBAL(GLOBAL_VAR, THREAD_VAR) ((void) 0) -#endif - -extern void __simulate_exceptions (int x) attribute_hidden; diff --git a/sysdeps/powerpc/novmx-longjmp.c b/sysdeps/powerpc/novmx-longjmp.c deleted file mode 100644 index b0020b728a..0000000000 --- a/sysdeps/powerpc/novmx-longjmp.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Copy of sysdeps/generic/longjmp.c modified for backward compatibility - with old non AltiVec/VMX longjmp. */ - -#include -#include -#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) -# include -# include -# include - - -/* Set the signal mask to the one specified in ENV, and jump - to the position specified in ENV, causing the setjmp - call there to return VAL, or 1 if VAL is 0. */ -void -__novmx__libc_siglongjmp (__novmx__sigjmp_buf env, int val) -{ - /* Perform any cleanups needed by the frames being unwound. */ - _longjmp_unwind (env, val); - - if (env[0].__mask_was_saved) - /* Restore the saved signal mask. */ - (void) __sigprocmask (SIG_SETMASK, &env[0].__saved_mask, - (sigset_t *) NULL); - - /* Call the machine-dependent function to restore machine state. */ - __novmx__longjmp (env[0].__jmpbuf, val ?: 1); -} - -strong_alias (__novmx__libc_siglongjmp, __novmx__libc_longjmp) -libc_hidden_def (__novmx__libc_longjmp) -weak_alias (__novmx__libc_siglongjmp, __novmx_longjmp) -weak_alias (__novmx__libc_siglongjmp, __novmxlongjmp) -weak_alias (__novmx__libc_siglongjmp, __novmxsiglongjmp) - -compat_symbol (libc, __novmx_longjmp, _longjmp, GLIBC_2_0); -compat_symbol (libc, __novmxlongjmp, longjmp, GLIBC_2_0); -compat_symbol (libc, __novmxsiglongjmp, siglongjmp, GLIBC_2_0); -#endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)) */ diff --git a/sysdeps/powerpc/novmx-sigjmp.c b/sysdeps/powerpc/novmx-sigjmp.c deleted file mode 100644 index 7d0ae59437..0000000000 --- a/sysdeps/powerpc/novmx-sigjmp.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Copy of sysdeps/generic/sigjmp.c modified for backward compatibility - with old non AltiVec/VMX setjmp. */ - -#include -#include -#if IS_IN (libc) && defined SHARED -# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) -# include -# include -# include - -/* This function is called by the `sigsetjmp' macro - before doing a `__setjmp' on ENV[0].__jmpbuf. - Always return zero. */ - -int -__novmx__sigjmp_save (__novmx__sigjmp_buf env, int savemask) -{ - env[0].__mask_was_saved = (savemask && - __sigprocmask (SIG_BLOCK, (sigset_t *) NULL, - &env[0].__saved_mask) == 0); - - return 0; -} - -# endif /* SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) */ -#endif /* IS_IN (libc) && SHARED */ diff --git a/sysdeps/powerpc/novmxsetjmp.h b/sysdeps/powerpc/novmxsetjmp.h deleted file mode 100644 index aa76bf9d1e..0000000000 --- a/sysdeps/powerpc/novmxsetjmp.h +++ /dev/null @@ -1,132 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Copied from setjmp/setjmp.h, powerpc/bits/setjmp.h and modified - appropriately to keep backward compatible with setjmp without - AltiVec/VMX support. - - This file is not exported and the interfaces are private to libc. */ - -#ifndef __NOVMX_SETJMP_H -#define __NOVMX_SETJMP_H 1 - -#include - -/* The following definitions are needed by ASM implementations of the old - (novmx) __longjmp/__setjmp functions. */ - -# define JB_GPR1 0 /* Also known as the stack pointer */ -# define JB_GPR2 1 -# define JB_LR 2 /* The address we will return to */ -# if __WORDSIZE == 64 -# define JB_GPRS 3 /* GPRs 14 through 31 are saved, 18*2 words total. */ -# define JB_CR 21 /* Condition code registers. */ -# define JB_FPRS 22 /* FPRs 14 through 31 are saved, 18*2 words total. */ -# define JB_SIZE (40 * 8) -# else -# define JB_GPRS 3 /* GPRs 14 through 31 are saved, 18 in total. */ -# define JB_CR 21 /* Condition code registers. */ -# define JB_FPRS 22 /* FPRs 14 through 31 are saved, 18*2 words total. */ -# define JB_SIZE (58 * 4) -# endif - -#ifndef _ASM -/* The following definitions are needed by the novmx* implementations of - setjmp/longjmp/sigsetjmp/etc that wrapper __setjmp/__longjmp. */ - -# if __WORDSIZE == 64 -typedef long int __jmp_buf[40]; -# else -typedef long int __jmp_buf[58]; -# endif - -# include - -/* Calling environment, plus possibly a saved signal mask. */ -typedef struct __novmx__jmp_buf_tag - { - /* NOTE: The machine-dependent definitions of `__sigsetjmp' - assume that a `jmp_buf' begins with a `__jmp_buf' and that - `__mask_was_saved' follows it. Do not move these members - or add others before it. */ - __jmp_buf __jmpbuf; /* Calling environment. */ - int __mask_was_saved; /* Saved the signal mask? */ - __sigset_t __saved_mask; /* Saved signal mask. */ - } __novmx__jmp_buf[1]; - - -/* Store the calling environment in ENV, also saving the signal mask. - Return 0. */ -extern int __novmxsetjmp (__novmx__jmp_buf __env); - -/* Store the calling environment in ENV, also saving the - signal mask if SAVEMASK is nonzero. Return 0. - This is the internal name for `sigsetjmp'. */ -extern int __novmx__sigsetjmp (struct __novmx__jmp_buf_tag __env[1], - int __savemask); - -/* Store the calling environment in ENV, not saving the signal mask. - Return 0. */ -extern int __novmx_setjmp (struct __novmx__jmp_buf_tag __env[1]); - -/* Jump to the environment saved in ENV, making the - `setjmp' call there return VAL, or 1 if VAL is 0. */ -extern void __novmxlongjmp (struct __novmx__jmp_buf_tag __env[1], int __val) - __attribute__ ((__noreturn__)); - -/* Same. Usually `_longjmp' is used with `_setjmp', which does not save - the signal mask. But it is how ENV was saved that determines whether - `longjmp' restores the mask; `_longjmp' is just an alias. */ -extern void __novmx_longjmp (struct __novmx__jmp_buf_tag __env[1], int __val) - __attribute__ ((__noreturn__)); - -/* Use the same type for `jmp_buf' and `sigjmp_buf'. - The `__mask_was_saved' flag determines whether - or not `longjmp' will restore the signal mask. */ -typedef struct __novmx__jmp_buf_tag __novmx__sigjmp_buf[1]; - -/* Jump to the environment saved in ENV, making the - sigsetjmp call there return VAL, or 1 if VAL is 0. - Restore the signal mask if that sigsetjmp call saved it. - This is just an alias `longjmp'. */ -extern void __novmxsiglongjmp (__novmx__sigjmp_buf __env, int __val) - __attribute__ ((__noreturn__)); - -/* Internal machine-dependent function to restore context sans signal mask. */ -extern void __novmx__longjmp (__jmp_buf __env, int __val) - __attribute__ ((__noreturn__)); - -/* Internal function to possibly save the current mask of blocked signals - in ENV, and always set the flag saying whether or not it was saved. - This is used by the machine-dependent definition of `__sigsetjmp'. - Always returns zero, for convenience. */ -extern int __novmx__sigjmp_save (__novmx__jmp_buf __env, int __savemask); - -extern void _longjmp_unwind (__novmx__jmp_buf env, int val); - -extern void __novmx__libc_siglongjmp (__novmx__sigjmp_buf env, int val) - __attribute__ ((noreturn)); - -extern void __novmx__libc_longjmp (__novmx__sigjmp_buf env, int val) - __attribute__ ((noreturn)); - -libc_hidden_proto (__novmx__libc_longjmp) -libc_hidden_proto (__novmx_setjmp) -libc_hidden_proto (__novmx__sigsetjmp) -#endif /* !_ASM */ - -#endif diff --git a/sysdeps/powerpc/nptl/Makefile b/sysdeps/powerpc/nptl/Makefile deleted file mode 100644 index 13fa630f2f..0000000000 --- a/sysdeps/powerpc/nptl/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (C) 2003-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif diff --git a/sysdeps/powerpc/nptl/bits/pthreadtypes-arch.h b/sysdeps/powerpc/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index f29119b794..0000000000 --- a/sysdeps/powerpc/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Machine-specific pthread type layouts. PowerPC version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -#define _BITS_PTHREADTYPES_ARCH_H 1 - -#include - -#if __WORDSIZE == 64 -# define __SIZEOF_PTHREAD_MUTEX_T 40 -# define __SIZEOF_PTHREAD_ATTR_T 56 -# define __SIZEOF_PTHREAD_RWLOCK_T 56 -# define __SIZEOF_PTHREAD_BARRIER_T 32 -#else -# define __SIZEOF_PTHREAD_MUTEX_T 24 -# define __SIZEOF_PTHREAD_ATTR_T 36 -# define __SIZEOF_PTHREAD_RWLOCK_T 32 -# define __SIZEOF_PTHREAD_BARRIER_T 20 -#endif -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - -/* Definitions for internal mutex struct. */ -#define __PTHREAD_COMPAT_PADDING_MID -#define __PTHREAD_COMPAT_PADDING_END -#define __PTHREAD_MUTEX_LOCK_ELISION 1 - -#define __LOCK_ALIGNMENT -#define __ONCE_ALIGNMENT - -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; -#if __WORDSIZE == 64 - int __cur_writer; - int __shared; - unsigned char __rwelision; - unsigned char __pad1[7]; - unsigned long int __pad2; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned int __flags; -# define __PTHREAD_RWLOCK_ELISION_EXTRA 0, {0, 0, 0, 0, 0, 0, 0 } -#else - unsigned char __rwelision; - unsigned char __pad2; - unsigned char __shared; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; - int __cur_writer; -# define __PTHREAD_RWLOCK_ELISION_EXTRA 0 -#endif -}; - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/powerpc/nptl/elide.h b/sysdeps/powerpc/nptl/elide.h deleted file mode 100644 index 1c42814b71..0000000000 --- a/sysdeps/powerpc/nptl/elide.h +++ /dev/null @@ -1,125 +0,0 @@ -/* elide.h: Generic lock elision support for powerpc. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef ELIDE_PPC_H -# define ELIDE_PPC_H - -#ifdef ENABLE_LOCK_ELISION -# include -# include - -/* Get the new value of adapt_count according to the elision - configurations. Returns true if the system should retry again or false - otherwise. */ -static inline bool -__get_new_count (uint8_t *adapt_count, int attempt) -{ - /* A persistent failure indicates that a retry will probably - result in another failure. Use normal locking now and - for the next couple of calls. */ - if (_TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ())) - { - if (__elision_aconf.skip_lock_internal_abort > 0) - *adapt_count = __elision_aconf.skip_lock_internal_abort; - return false; - } - /* Same logic as above, but for a number of temporary failures in a - a row. */ - else if (attempt <= 1 && __elision_aconf.skip_lock_out_of_tbegin_retries > 0 - && __elision_aconf.try_tbegin > 0) - *adapt_count = __elision_aconf.skip_lock_out_of_tbegin_retries; - return true; -} - -/* CONCURRENCY NOTES: - - The evaluation of the macro expression is_lock_free encompasses one or - more loads from memory locations that are concurrently modified by other - threads. For lock elision to work, this evaluation and the rest of the - critical section protected by the lock must be atomic because an - execution with lock elision must be equivalent to an execution in which - the lock would have been actually acquired and released. Therefore, we - evaluate is_lock_free inside of the transaction that represents the - critical section for which we want to use lock elision, which ensures - the atomicity that we require. */ - -/* Returns 0 if the lock defined by is_lock_free was elided. - ADAPT_COUNT is a per-lock state variable. */ -# define ELIDE_LOCK(adapt_count, is_lock_free) \ - ({ \ - int ret = 0; \ - if (adapt_count > 0) \ - (adapt_count)--; \ - else \ - for (int i = __elision_aconf.try_tbegin; i > 0; i--) \ - { \ - if (__libc_tbegin (0)) \ - { \ - if (is_lock_free) \ - { \ - ret = 1; \ - break; \ - } \ - __libc_tabort (_ABORT_LOCK_BUSY); \ - } \ - else \ - if (!__get_new_count (&adapt_count,i)) \ - break; \ - } \ - ret; \ - }) - -# define ELIDE_TRYLOCK(adapt_count, is_lock_free, write) \ - ({ \ - int ret = 0; \ - if (__elision_aconf.try_tbegin > 0) \ - { \ - if (write) \ - __libc_tabort (_ABORT_NESTED_TRYLOCK); \ - ret = ELIDE_LOCK (adapt_count, is_lock_free); \ - } \ - ret; \ - }) - - -static inline bool -__elide_unlock (int is_lock_free) -{ - if (is_lock_free) - { - /* This code is expected to crash when trying to unlock a lock not - held by this thread. More information is available in the - __pthread_rwlock_unlock() implementation. */ - __libc_tend (0); - return true; - } - return false; -} - -# define ELIDE_UNLOCK(is_lock_free) \ - __elide_unlock (is_lock_free) - -# else - -# define ELIDE_LOCK(adapt_count, is_lock_free) 0 -# define ELIDE_TRYLOCK(adapt_count, is_lock_free, write) 0 -# define ELIDE_UNLOCK(is_lock_free) 0 - -#endif /* ENABLE_LOCK_ELISION */ - -#endif diff --git a/sysdeps/powerpc/nptl/pthread_spin_lock.c b/sysdeps/powerpc/nptl/pthread_spin_lock.c deleted file mode 100644 index e377feb1cf..0000000000 --- a/sysdeps/powerpc/nptl/pthread_spin_lock.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Paul Mackerras , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "pthreadP.h" - -int -pthread_spin_lock (pthread_spinlock_t *lock) -{ - unsigned int __tmp; - - asm volatile ( - "1: lwarx %0,0,%1" MUTEX_HINT_ACQ "\n" - " cmpwi 0,%0,0\n" - " bne- 2f\n" - " stwcx. %2,0,%1\n" - " bne- 2f\n" - __ARCH_ACQ_INSTR "\n" - " .subsection 1\n" - "2: lwzx %0,0,%1\n" - " cmpwi 0,%0,0\n" - " bne 2b\n" - " b 1b\n" - " .previous" - : "=&r" (__tmp) - : "r" (lock), "r" (1) - : "cr0", "memory"); - return 0; -} diff --git a/sysdeps/powerpc/nptl/pthread_spin_trylock.c b/sysdeps/powerpc/nptl/pthread_spin_trylock.c deleted file mode 100644 index d81d984237..0000000000 --- a/sysdeps/powerpc/nptl/pthread_spin_trylock.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Paul Mackerras , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "pthreadP.h" - -int -pthread_spin_trylock (pthread_spinlock_t *lock) -{ - unsigned int old; - int err = EBUSY; - - asm ("1: lwarx %0,0,%2" MUTEX_HINT_ACQ "\n" - " cmpwi 0,%0,0\n" - " bne 2f\n" - " stwcx. %3,0,%2\n" - " bne- 1b\n" - " li %1,0\n" - __ARCH_ACQ_INSTR "\n" - "2: " - : "=&r" (old), "=&r" (err) - : "r" (lock), "r" (1), "1" (err) - : "cr0", "memory"); - - return err; -} diff --git a/sysdeps/powerpc/nptl/pthread_spin_unlock.c b/sysdeps/powerpc/nptl/pthread_spin_unlock.c deleted file mode 100644 index fa30a82491..0000000000 --- a/sysdeps/powerpc/nptl/pthread_spin_unlock.c +++ /dev/null @@ -1,27 +0,0 @@ -/* pthread_spin_unlock -- unlock a spin lock. PowerPC version. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "pthreadP.h" -#include - -int -pthread_spin_unlock (pthread_spinlock_t *lock) -{ - atomic_store_release (lock, 0); - return 0; -} diff --git a/sysdeps/powerpc/nptl/pthreaddef.h b/sysdeps/powerpc/nptl/pthreaddef.h deleted file mode 100644 index e3e407a4c4..0000000000 --- a/sysdeps/powerpc/nptl/pthreaddef.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (4 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. The ABI requires 16 - bytes (for both 32-bit and 64-bit PowerPC). */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 4096 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 16 - - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME __builtin_frame_address (0) diff --git a/sysdeps/powerpc/nptl/tcb-offsets.sym b/sysdeps/powerpc/nptl/tcb-offsets.sym deleted file mode 100644 index 7c9fd33562..0000000000 --- a/sysdeps/powerpc/nptl/tcb-offsets.sym +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include -#include - --- - --- Abuse tls.h macros to derive offsets relative to the thread register. -# undef __thread_register -# define __thread_register ((void *) 0) -# define thread_offsetof(mem) ((ptrdiff_t) THREAD_SELF + offsetof (struct pthread, mem)) - - -#if TLS_MULTIPLE_THREADS_IN_TCB -MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) -#endif -TID thread_offsetof (tid) -POINTER_GUARD (offsetof (tcbhead_t, pointer_guard) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) -TAR_SAVE (offsetof (tcbhead_t, tar_save) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) -DSO_SLOT1 (offsetof (tcbhead_t, dso_slot1) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) -DSO_SLOT2 (offsetof (tcbhead_t, dso_slot2) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) -#ifdef __powerpc64__ -TCB_AT_PLATFORM (offsetof (tcbhead_t, at_platform) - TLS_TCB_OFFSET - sizeof(tcbhead_t)) -#endif -TM_CAPABLE (offsetof (tcbhead_t, tm_capable) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) -#ifndef __powerpc64__ -TCB_AT_PLATFORM (offsetof (tcbhead_t, at_platform) - TLS_TCB_OFFSET - sizeof(tcbhead_t)) -PADDING (offsetof (tcbhead_t, padding) - TLS_TCB_OFFSET - sizeof(tcbhead_t)) -#endif -TCB_HWCAP (offsetof (tcbhead_t, hwcap) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) -#ifndef __ASSUME_PRIVATE_FUTEX -PRIVATE_FUTEX_OFFSET thread_offsetof (header.private_futex) -#endif diff --git a/sysdeps/powerpc/nptl/tls.h b/sysdeps/powerpc/nptl/tls.h deleted file mode 100644 index 7556e7c8b8..0000000000 --- a/sysdeps/powerpc/nptl/tls.h +++ /dev/null @@ -1,263 +0,0 @@ -/* Definition for thread-local data handling. NPTL/PowerPC version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TLS_H -#define _TLS_H 1 - -# include - -#ifndef __ASSEMBLER__ -# include -# include -# include -# include - -#else /* __ASSEMBLER__ */ -# include -#endif /* __ASSEMBLER__ */ - - -#ifndef __ASSEMBLER__ - -# include - -/* Get system call information. */ -# include - -/* The TP points to the start of the thread blocks. */ -# define TLS_DTV_AT_TP 1 -# define TLS_TCB_AT_TP 0 - -/* We use the multiple_threads field in the pthread struct */ -#define TLS_MULTIPLE_THREADS_IN_TCB 1 - -/* Get the thread descriptor definition. */ -# include - - -/* The stack_guard is accessed directly by GCC -fstack-protector code, - so it is a part of public ABI. The dtv and pointer_guard fields - are private. */ -typedef struct -{ - /* Reservation for HWCAP data. To be accessed by GCC in - __builtin_cpu_supports(), so it is a part of public ABI. */ - uint64_t hwcap; - /* Reservation for AT_PLATFORM data. To be accessed by GCC in - __builtin_cpu_is(), so it is a part of public ABI. Since there - are different ABIs for 32 and 64 bit, we put this field in a - previously empty padding space for powerpc64. */ -#ifndef __powerpc64__ - /* Padding to maintain alignment. */ - uint32_t padding; - uint32_t at_platform; -#endif - /* Indicate if HTM capable (ISA 2.07). */ - uint32_t tm_capable; - /* Reservation for AT_PLATFORM data - powerpc64. */ -#ifdef __powerpc64__ - uint32_t at_platform; -#endif - /* Reservation for Dynamic System Optimizer ABI. */ - uintptr_t dso_slot2; - uintptr_t dso_slot1; - /* Reservation for tar register (ISA 2.07). */ - uintptr_t tar_save; - /* GCC split stack support. */ - void *__private_ss; - /* Reservation for the Event-Based Branching ABI. */ - uintptr_t ebb_handler; - uintptr_t ebb_ctx_pointer; - uintptr_t ebb_reserved1; - uintptr_t ebb_reserved2; - uintptr_t pointer_guard; - uintptr_t stack_guard; - dtv_t *dtv; -} tcbhead_t; - -/* This is the size of the initial TCB. */ -# define TLS_INIT_TCB_SIZE 0 - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE 0 - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size we need before TCB. */ -# define TLS_PRE_TCB_SIZE \ - (sizeof (struct pthread) \ - + ((sizeof (tcbhead_t) + TLS_TCB_ALIGN - 1) & ~(TLS_TCB_ALIGN - 1))) - -# ifndef __powerpc64__ -/* Register r2 (tp) is reserved by the ABI as "thread pointer". */ -register void *__thread_register __asm__ ("r2"); -# define PT_THREAD_POINTER PT_R2 -# else -/* Register r13 (tp) is reserved by the ABI as "thread pointer". */ -register void *__thread_register __asm__ ("r13"); -# define PT_THREAD_POINTER PT_R13 -# endif - -/* The following assumes that TP (R2 or R13) points to the end of the - TCB + 0x7000 (per the ABI). This implies that TCB address is - TP - 0x7000. As we define TLS_DTV_AT_TP we can - assume that the pthread struct is allocated immediately ahead of the - TCB. This implies that the pthread_descr address is - TP - (TLS_PRE_TCB_SIZE + 0x7000). */ -# define TLS_TCB_OFFSET 0x7000 - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(tcbp, dtvp) \ - ((tcbhead_t *) (tcbp))[-1].dtv = dtvp + 1 - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtv) (THREAD_DTV() = (dtv)) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(tcbp) (((tcbhead_t *) (tcbp))[-1].dtv) - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(tcbp) \ - ({ \ - __thread_register = (void *) (tcbp) + TLS_TCB_OFFSET; \ - THREAD_SET_TM_CAPABLE (__tcb_hwcap & PPC_FEATURE2_HAS_HTM ? 1 : 0); \ - THREAD_SET_HWCAP (__tcb_hwcap); \ - THREAD_SET_AT_PLATFORM (__tcb_platform); \ - NULL; \ - }) - -/* Value passed to 'clone' for initialization of the thread register. */ -# define TLS_DEFINE_INIT_TP(tp, pd) \ - void *tp = (void *) (pd) + TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE; \ - (((tcbhead_t *) ((char *) tp - TLS_TCB_OFFSET))[-1].tm_capable) = \ - THREAD_GET_TM_CAPABLE (); \ - (((tcbhead_t *) ((char *) tp - TLS_TCB_OFFSET))[-1].hwcap) = \ - THREAD_GET_HWCAP (); \ - (((tcbhead_t *) ((char *) tp - TLS_TCB_OFFSET))[-1].at_platform) = \ - THREAD_GET_AT_PLATFORM (); - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - (((tcbhead_t *) (__thread_register - TLS_TCB_OFFSET))[-1].dtv) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF \ - ((struct pthread *) (__thread_register \ - - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF \ - REGISTER (32, 32, PT_THREAD_POINTER * 4, \ - - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE) \ - REGISTER (64, 64, PT_THREAD_POINTER * 8, \ - - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE) - -/* Read member of the thread descriptor directly. */ -# define THREAD_GETMEM(descr, member) ((void)(descr), (THREAD_SELF)->member) - -/* Same as THREAD_GETMEM, but the member offset can be non-constant. */ -# define THREAD_GETMEM_NC(descr, member, idx) \ - ((void)(descr), (THREAD_SELF)->member[idx]) - -/* Set member of the thread descriptor directly. */ -# define THREAD_SETMEM(descr, member, value) \ - ((void)(descr), (THREAD_SELF)->member = (value)) - -/* Same as THREAD_SETMEM, but the member offset can be non-constant. */ -# define THREAD_SETMEM_NC(descr, member, idx, value) \ - ((void)(descr), (THREAD_SELF)->member[idx] = (value)) - -/* Set the stack guard field in TCB head. */ -# define THREAD_SET_STACK_GUARD(value) \ - (((tcbhead_t *) ((char *) __thread_register \ - - TLS_TCB_OFFSET))[-1].stack_guard = (value)) -# define THREAD_COPY_STACK_GUARD(descr) \ - (((tcbhead_t *) ((char *) (descr) \ - + TLS_PRE_TCB_SIZE))[-1].stack_guard \ - = ((tcbhead_t *) ((char *) __thread_register \ - - TLS_TCB_OFFSET))[-1].stack_guard) - -/* Set the stack guard field in TCB head. */ -# define THREAD_GET_POINTER_GUARD() \ - (((tcbhead_t *) ((char *) __thread_register \ - - TLS_TCB_OFFSET))[-1].pointer_guard) -# define THREAD_SET_POINTER_GUARD(value) \ - (THREAD_GET_POINTER_GUARD () = (value)) -# define THREAD_COPY_POINTER_GUARD(descr) \ - (((tcbhead_t *) ((char *) (descr) \ - + TLS_PRE_TCB_SIZE))[-1].pointer_guard \ - = THREAD_GET_POINTER_GUARD()) - -/* tm_capable field in TCB head. */ -# define THREAD_GET_TM_CAPABLE() \ - (((tcbhead_t *) ((char *) __thread_register \ - - TLS_TCB_OFFSET))[-1].tm_capable) -# define THREAD_SET_TM_CAPABLE(value) \ - (THREAD_GET_TM_CAPABLE () = (value)) - -/* hwcap field in TCB head. */ -# define THREAD_GET_HWCAP() \ - (((tcbhead_t *) ((char *) __thread_register \ - - TLS_TCB_OFFSET))[-1].hwcap) -# define THREAD_SET_HWCAP(value) \ - (THREAD_GET_HWCAP () = (value)) - -/* at_platform field in TCB head. */ -# define THREAD_GET_AT_PLATFORM() \ - (((tcbhead_t *) ((char *) __thread_register \ - - TLS_TCB_OFFSET))[-1].at_platform) -# define THREAD_SET_AT_PLATFORM(value) \ - (THREAD_GET_AT_PLATFORM () = (value)) - -/* l_tls_offset == 0 is perfectly valid on PPC, so we have to use some - different value to mean unset l_tls_offset. */ -# define NO_TLS_OFFSET -1 - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/powerpc/power4/fpu/Makefile b/sysdeps/powerpc/power4/fpu/Makefile deleted file mode 100644 index e17d32f30e..0000000000 --- a/sysdeps/powerpc/power4/fpu/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -# Makefile fragment for POWER4/5/5+ with FPU. - -ifeq ($(subdir),math) -CFLAGS-mpa.c += --param max-unroll-times=4 -funroll-loops -fpeel-loops -CPPFLAGS-slowpow.c += -DUSE_LONG_DOUBLE_FOR_MP=1 -CPPFLAGS-slowexp.c += -DUSE_LONG_DOUBLE_FOR_MP=1 -endif diff --git a/sysdeps/powerpc/power4/fpu/mpa-arch.h b/sysdeps/powerpc/power4/fpu/mpa-arch.h deleted file mode 100644 index 4754c1b0f9..0000000000 --- a/sysdeps/powerpc/power4/fpu/mpa-arch.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Overridable constants and operations. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -typedef double mantissa_t; -typedef double mantissa_store_t; - -#define TWOPOW(i) (0x1.0p##i) - -#define RADIX TWOPOW (24) /* 2^24 */ -#define CUTTER TWOPOW (76) /* 2^76 */ -#define RADIXI 0x1.0p-24 /* 2^-24 */ -#define TWO52 TWOPOW (52) /* 2^52 */ - -/* Divide D by RADIX and put the remainder in R. */ -#define DIV_RADIX(d,r) \ - ({ \ - double u = ((d) + CUTTER) - CUTTER; \ - if (u > (d)) \ - u -= RADIX; \ - r = (d) - u; \ - (d) = u * RADIXI; \ - }) - -/* Put the integer component of a double X in R and retain the fraction in - X. */ -#define INTEGER_OF(x, r) \ - ({ \ - double u = ((x) + TWO52) - TWO52; \ - if (u > (x)) \ - u -= 1; \ - (r) = u; \ - (x) -= u; \ - }) - -/* Align IN down to a multiple of F, where F is a power of two. */ -#define ALIGN_DOWN_TO(in, f) \ - ({ \ - double factor = f * TWO52; \ - double u = (in + factor) - factor; \ - if (u > in) \ - u -= f; \ - u; \ - }) diff --git a/sysdeps/powerpc/power4/fpu/mpa.c b/sysdeps/powerpc/power4/fpu/mpa.c deleted file mode 100644 index 0a0f7175b4..0000000000 --- a/sysdeps/powerpc/power4/fpu/mpa.c +++ /dev/null @@ -1,214 +0,0 @@ - -/* - * IBM Accurate Mathematical Library - * written by International Business Machines Corp. - * Copyright (C) 2001-2017 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, see . - */ - -/* Define __mul and __sqr and use the rest from generic code. */ -#define NO__MUL -#define NO__SQR - -#include - -/* Multiply *X and *Y and store result in *Z. X and Y may overlap but not X - and Z or Y and Z. For P in [1, 2, 3], the exact result is truncated to P - digits. In case P > 3 the error is bounded by 1.001 ULP. */ -void -__mul (const mp_no *x, const mp_no *y, mp_no *z, int p) -{ - long i, i1, i2, j, k, k2; - long p2 = p; - double u, zk, zk2; - - /* Is z=0? */ - if (__glibc_unlikely (X[0] * Y[0] == 0)) - { - Z[0] = 0; - return; - } - - /* Multiply, add and carry */ - k2 = (p2 < 3) ? p2 + p2 : p2 + 3; - zk = Z[k2] = 0; - for (k = k2; k > 1;) - { - if (k > p2) - { - i1 = k - p2; - i2 = p2 + 1; - } - else - { - i1 = 1; - i2 = k; - } -#if 1 - /* Rearrange this inner loop to allow the fmadd instructions to be - independent and execute in parallel on processors that have - dual symmetrical FP pipelines. */ - if (i1 < (i2 - 1)) - { - /* Make sure we have at least 2 iterations. */ - if (((i2 - i1) & 1L) == 1L) - { - /* Handle the odd iterations case. */ - zk2 = x->d[i2 - 1] * y->d[i1]; - } - else - zk2 = 0.0; - /* Do two multiply/adds per loop iteration, using independent - accumulators; zk and zk2. */ - for (i = i1, j = i2 - 1; i < i2 - 1; i += 2, j -= 2) - { - zk += x->d[i] * y->d[j]; - zk2 += x->d[i + 1] * y->d[j - 1]; - } - zk += zk2; /* Final sum. */ - } - else - { - /* Special case when iterations is 1. */ - zk += x->d[i1] * y->d[i1]; - } -#else - /* The original code. */ - for (i = i1, j = i2 - 1; i < i2; i++, j--) - zk += X[i] * Y[j]; -#endif - - u = (zk + CUTTER) - CUTTER; - if (u > zk) - u -= RADIX; - Z[k] = zk - u; - zk = u * RADIXI; - --k; - } - Z[k] = zk; - - int e = EX + EY; - /* Is there a carry beyond the most significant digit? */ - if (Z[1] == 0) - { - for (i = 1; i <= p2; i++) - Z[i] = Z[i + 1]; - e--; - } - - EZ = e; - Z[0] = X[0] * Y[0]; -} - -/* Square *X and store result in *Y. X and Y may not overlap. For P in - [1, 2, 3], the exact result is truncated to P digits. In case P > 3 the - error is bounded by 1.001 ULP. This is a faster special case of - multiplication. */ -void -__sqr (const mp_no *x, mp_no *y, int p) -{ - long i, j, k, ip; - double u, yk; - - /* Is z=0? */ - if (__glibc_unlikely (X[0] == 0)) - { - Y[0] = 0; - return; - } - - /* We need not iterate through all X's since it's pointless to - multiply zeroes. */ - for (ip = p; ip > 0; ip--) - if (X[ip] != 0) - break; - - k = (__glibc_unlikely (p < 3)) ? p + p : p + 3; - - while (k > 2 * ip + 1) - Y[k--] = 0; - - yk = 0; - - while (k > p) - { - double yk2 = 0.0; - long lim = k / 2; - - if (k % 2 == 0) - { - yk += X[lim] * X[lim]; - lim--; - } - - /* In __mul, this loop (and the one within the next while loop) run - between a range to calculate the mantissa as follows: - - Z[k] = X[k] * Y[n] + X[k+1] * Y[n-1] ... + X[n-1] * Y[k+1] - + X[n] * Y[k] - - For X == Y, we can get away with summing halfway and doubling the - result. For cases where the range size is even, the mid-point needs - to be added separately (above). */ - for (i = k - p, j = p; i <= lim; i++, j--) - yk2 += X[i] * X[j]; - - yk += 2.0 * yk2; - - u = (yk + CUTTER) - CUTTER; - if (u > yk) - u -= RADIX; - Y[k--] = yk - u; - yk = u * RADIXI; - } - - while (k > 1) - { - double yk2 = 0.0; - long lim = k / 2; - - if (k % 2 == 0) - { - yk += X[lim] * X[lim]; - lim--; - } - - /* Likewise for this loop. */ - for (i = 1, j = k - 1; i <= lim; i++, j--) - yk2 += X[i] * X[j]; - - yk += 2.0 * yk2; - - u = (yk + CUTTER) - CUTTER; - if (u > yk) - u -= RADIX; - Y[k--] = yk - u; - yk = u * RADIXI; - } - Y[k] = yk; - - /* Squares are always positive. */ - Y[0] = 1.0; - - int e = EX * 2; - /* Is there a carry beyond the most significant digit? */ - if (__glibc_unlikely (Y[1] == 0)) - { - for (i = 1; i <= p; i++) - Y[i] = Y[i + 1]; - e--; - } - EY = e; -} diff --git a/sysdeps/powerpc/power4/wordcopy.c b/sysdeps/powerpc/power4/wordcopy.c deleted file mode 100644 index 2648e25c58..0000000000 --- a/sysdeps/powerpc/power4/wordcopy.c +++ /dev/null @@ -1,212 +0,0 @@ -/* _memcopy.c -- subroutines for memory copy functions. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Torbjorn Granlund (tege@sics.se). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* BE VERY CAREFUL IF YOU CHANGE THIS CODE...! */ - -#include -#include - -/* _wordcopy_fwd_aligned -- Copy block beginning at SRCP to - block beginning at DSTP with LEN `op_t' words (not LEN bytes!). - Both SRCP and DSTP should be aligned for memory operations on `op_t's. */ - -#ifndef WORDCOPY_FWD_ALIGNED -# define WORDCOPY_FWD_ALIGNED _wordcopy_fwd_aligned -#endif - -void -WORDCOPY_FWD_ALIGNED (long int dstp, long int srcp, size_t len) -{ - op_t a0, a1; - - if (len & 1) - { - ((op_t *) dstp)[0] = ((op_t *) srcp)[0]; - - if (len == 1) - return; - srcp += OPSIZ; - dstp += OPSIZ; - len -= 1; - } - - do - { - a0 = ((op_t *) srcp)[0]; - a1 = ((op_t *) srcp)[1]; - ((op_t *) dstp)[0] = a0; - ((op_t *) dstp)[1] = a1; - - srcp += 2 * OPSIZ; - dstp += 2 * OPSIZ; - len -= 2; - } - while (len != 0); -} - -/* _wordcopy_fwd_dest_aligned -- Copy block beginning at SRCP to - block beginning at DSTP with LEN `op_t' words (not LEN bytes!). - DSTP should be aligned for memory operations on `op_t's, but SRCP must - *not* be aligned. */ - -#ifndef WORDCOPY_FWD_DEST_ALIGNED -# define WORDCOPY_FWD_DEST_ALIGNED _wordcopy_fwd_dest_aligned -#endif - -void -WORDCOPY_FWD_DEST_ALIGNED (long int dstp, long int srcp, size_t len) -{ - op_t a0, a1, a2; - int sh_1, sh_2; - - /* Calculate how to shift a word read at the memory operation - aligned srcp to make it aligned for copy. */ - - sh_1 = 8 * (srcp % OPSIZ); - sh_2 = 8 * OPSIZ - sh_1; - - /* Make SRCP aligned by rounding it down to the beginning of the `op_t' - it points in the middle of. */ - srcp &= -OPSIZ; - a0 = ((op_t *) srcp)[0]; - - if (len & 1) - { - a1 = ((op_t *) srcp)[1]; - ((op_t *) dstp)[0] = MERGE (a0, sh_1, a1, sh_2); - - if (len == 1) - return; - - a0 = a1; - srcp += OPSIZ; - dstp += OPSIZ; - len -= 1; - } - - do - { - a1 = ((op_t *) srcp)[1]; - a2 = ((op_t *) srcp)[2]; - ((op_t *) dstp)[0] = MERGE (a0, sh_1, a1, sh_2); - ((op_t *) dstp)[1] = MERGE (a1, sh_1, a2, sh_2); - a0 = a2; - - srcp += 2 * OPSIZ; - dstp += 2 * OPSIZ; - len -= 2; - } - while (len != 0); -} - -/* _wordcopy_bwd_aligned -- Copy block finishing right before - SRCP to block finishing right before DSTP with LEN `op_t' words - (not LEN bytes!). Both SRCP and DSTP should be aligned for memory - operations on `op_t's. */ - -#ifndef WORDCOPY_BWD_ALIGNED -# define WORDCOPY_BWD_ALIGNED _wordcopy_bwd_aligned -#endif - -void -WORDCOPY_BWD_ALIGNED (long int dstp, long int srcp, size_t len) -{ - op_t a0, a1; - - if (len & 1) - { - srcp -= OPSIZ; - dstp -= OPSIZ; - ((op_t *) dstp)[0] = ((op_t *) srcp)[0]; - - if (len == 1) - return; - len -= 1; - } - - do - { - srcp -= 2 * OPSIZ; - dstp -= 2 * OPSIZ; - - a1 = ((op_t *) srcp)[1]; - a0 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[1] = a1; - ((op_t *) dstp)[0] = a0; - - len -= 2; - } - while (len != 0); -} - -/* _wordcopy_bwd_dest_aligned -- Copy block finishing right - before SRCP to block finishing right before DSTP with LEN `op_t' - words (not LEN bytes!). DSTP should be aligned for memory - operations on `op_t', but SRCP must *not* be aligned. */ - -#ifndef WORDCOPY_BWD_DEST_ALIGNED -# define WORDCOPY_BWD_DEST_ALIGNED _wordcopy_bwd_dest_aligned -#endif - -void -WORDCOPY_BWD_DEST_ALIGNED (long int dstp, long int srcp, size_t len) -{ - op_t a0, a1, a2; - int sh_1, sh_2; - - /* Calculate how to shift a word read at the memory operation - aligned srcp to make it aligned for copy. */ - - sh_1 = 8 * (srcp % OPSIZ); - sh_2 = 8 * OPSIZ - sh_1; - - /* Make srcp aligned by rounding it down to the beginning of the op_t - it points in the middle of. */ - srcp &= -OPSIZ; - a2 = ((op_t *) srcp)[0]; - - if (len & 1) - { - srcp -= OPSIZ; - dstp -= OPSIZ; - a1 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = MERGE (a1, sh_1, a2, sh_2); - - if (len == 1) - return; - - a2 = a1; - len -= 1; - } - - do - { - srcp -= 2 * OPSIZ; - dstp -= 2 * OPSIZ; - - a1 = ((op_t *) srcp)[1]; - a0 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[1] = MERGE (a1, sh_1, a2, sh_2); - ((op_t *) dstp)[0] = MERGE (a0, sh_1, a1, sh_2); - a2 = a0; - - len -= 2; - } - while (len != 0); -} diff --git a/sysdeps/powerpc/power5+/fpu/s_modf.c b/sysdeps/powerpc/power5+/fpu/s_modf.c deleted file mode 100644 index ee0c62874b..0000000000 --- a/sysdeps/powerpc/power5+/fpu/s_modf.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include - -double -__modf (double x, double *iptr) -{ - if (__builtin_isinf (x)) - { - *iptr = x; - return __copysign (0.0, x); - } - else if (__builtin_isnan (x)) - { - *iptr = NAN; - return NAN; - } - - if (x >= 0.0) - { - *iptr = __floor (x); - return __copysign (x - *iptr, x); - } - else - { - *iptr = __ceil (x); - return __copysign (x - *iptr, x); - } -} -weak_alias (__modf, modf) -#ifdef NO_LONG_DOUBLE -strong_alias (__modf, __modfl) -weak_alias (__modf, modfl) -#endif -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __modf, modfl, GLIBC_2_0); -# endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __modf, modfl, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/power5+/fpu/s_modff.c b/sysdeps/powerpc/power5+/fpu/s_modff.c deleted file mode 100644 index 35bed46fa7..0000000000 --- a/sysdeps/powerpc/power5+/fpu/s_modff.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include - -float -__modff (float x, float *iptr) -{ - if (__builtin_isinff (x)) - { - *iptr = x; - return __copysignf (0.0, x); - } - else if (__builtin_isnanf (x)) - { - *iptr = NAN; - return NAN; - } - - if (x >= 0.0) - { - *iptr = __floorf (x); - return __copysignf (x - *iptr, x); - } - else - { - *iptr = __ceilf (x); - return __copysignf (x - *iptr, x); - } -} -weak_alias (__modff, modff) diff --git a/sysdeps/powerpc/power6/wcschr.c b/sysdeps/powerpc/power6/wcschr.c deleted file mode 100644 index a416f31f7c..0000000000 --- a/sysdeps/powerpc/power6/wcschr.c +++ /dev/null @@ -1,96 +0,0 @@ -/* wcschr.c - Wide Character Search for POWER6+. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include - -#ifndef WCSCHR -# define WCSCHR __wcschr -# define DEFAULT_WCSCHR -#endif - -/* Find the first occurrence of WC in WCS. */ -wchar_t * -WCSCHR (const wchar_t *wcs, const wchar_t wc) -{ - const wchar_t *wcs2 = wcs + 1; - - if (*wcs == wc) - return (wchar_t *) wcs; - if (*wcs == L'\0') - return NULL; - - do - { - wcs += 2; - - if (*wcs2 == wc) - return (wchar_t *) wcs2; - if (*wcs2 == L'\0') - return NULL; - wcs2 += 2; - - if (*wcs == wc) - return (wchar_t *) wcs; - if (*wcs == L'\0') - return NULL; - wcs += 2; - - if (*wcs2 == wc) - return (wchar_t *) wcs2; - if (*wcs2 == L'\0') - return NULL; - wcs2 += 2; - - if (*wcs == wc) - return (wchar_t *) wcs; - if (*wcs == L'\0') - return NULL; - wcs += 2; - - if (*wcs2 == wc) - return (wchar_t *) wcs2; - if (*wcs2 == L'\0') - return NULL; - wcs2 += 2; - - if (*wcs == wc) - return (wchar_t *) wcs; - if (*wcs == L'\0') - return NULL; - wcs += 2; - - if (*wcs2 == wc) - return (wchar_t *) wcs2; - if (*wcs2 == L'\0') - return NULL; - wcs2 += 2; - - if (*wcs == wc) - return (wchar_t *) wcs; - } - while (*wcs != L'\0'); - - return NULL; -} -#ifdef DEFAULT_WCSCHR -libc_hidden_def (__wcschr) -weak_alias (__wcschr, wcschr) -libc_hidden_weak (wcschr) -#else -libc_hidden_def (wcschr) -#endif diff --git a/sysdeps/powerpc/power6/wcscpy.c b/sysdeps/powerpc/power6/wcscpy.c deleted file mode 100644 index e6de240746..0000000000 --- a/sysdeps/powerpc/power6/wcscpy.c +++ /dev/null @@ -1,105 +0,0 @@ -/* wcscpy.c - Wide Character Copy for POWER6+. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include - -#ifndef WCSCPY -# define WCSCPY wcscpy -#endif - -/* Copy SRC to DEST. */ -wchar_t * -WCSCPY (wchar_t *dest, const wchar_t *src) -{ - wint_t c,d; - wchar_t *wcp, *wcp2; - - if (__alignof__ (wchar_t) >= sizeof (wchar_t)) - { - const ptrdiff_t off = dest - src; - - wcp = (wchar_t *) src; - wcp2 = wcp + 1 ; - - do - { - d = *wcp; - wcp[off] = d; - if (d == L'\0') - return dest; - wcp += 2; - - c = *wcp2; - wcp2[off] = c; - if (c == L'\0') - return dest; - wcp2 += 2; - - d = *wcp; - wcp[off] = d; - if (d == L'\0') - return dest; - wcp += 2; - - c = *wcp2; - wcp2[off] = c; - if (c == L'\0') - return dest; - wcp2 += 2; - - d = *wcp; - wcp[off] = d; - if (d == L'\0') - return dest; - wcp += 2; - - c = *wcp2; - wcp2[off] = c; - if (c == L'\0') - return dest; - wcp2 += 2; - - d = *wcp; - wcp[off] = d; - if (d == L'\0') - return dest; - wcp += 2; - - c = *wcp2; - wcp2[off] = c; - if (c == L'\0') - return dest; - wcp2 += 2; - } - while (c != L'\0'); - - } - else - { - wcp = dest; - - do - { - c = *src++; - *wcp++ = c; - } - while (c != L'\0'); - } - return dest; -} diff --git a/sysdeps/powerpc/power6/wcsrchr.c b/sysdeps/powerpc/power6/wcsrchr.c deleted file mode 100644 index f9fb399b31..0000000000 --- a/sysdeps/powerpc/power6/wcsrchr.c +++ /dev/null @@ -1,89 +0,0 @@ -/* wcsrchr.c - Wide Character Reverse Search for POWER6+. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include - -#ifndef WCSRCHR -# define WCSRCHR wcsrchr -#endif - -/* Find the last occurrence of WC in WCS. */ -wchar_t * -WCSRCHR (const wchar_t *wcs, const wchar_t wc) -{ - const wchar_t *wcs2 = wcs + 1; - const wchar_t *retval = NULL; - - if (*wcs == wc) - retval = wcs; - - if (*wcs == L'\0') return (wchar_t *) retval; - - do - { - wcs+=2; - - if (*wcs2 == wc) - retval = wcs2; - if (*wcs2 == L'\0') - return (wchar_t *) retval; - wcs2+=2; - - if (*wcs == wc) - retval = wcs; - if (*wcs == L'\0') - return (wchar_t *) retval; - wcs+=2; - - if (*wcs2 == wc) - retval = wcs2; - if (*wcs2 == L'\0') - return (wchar_t *) retval; - wcs2+=2; - - if (*wcs == wc) - retval = wcs; - if (*wcs == L'\0') - return (wchar_t *) retval; - wcs+=2; - - if (*wcs2 == wc) - retval = wcs2; - if (*wcs2 == L'\0') - return (wchar_t *) retval; - wcs2+=2; - - if (*wcs == wc) - retval = wcs; - if (*wcs == L'\0') - return (wchar_t *) retval; - wcs+=2; - - if (*wcs2 == wc) - retval = wcs2; - if (*wcs2 == L'\0') - return (wchar_t *) retval; - wcs2+=2; - - if (*wcs == wc) - retval = wcs; - } - while (*wcs != L'\0'); - - return (wchar_t *) retval; -} diff --git a/sysdeps/powerpc/power6/wordcopy.c b/sysdeps/powerpc/power6/wordcopy.c deleted file mode 100644 index 545a67bf5d..0000000000 --- a/sysdeps/powerpc/power6/wordcopy.c +++ /dev/null @@ -1,221 +0,0 @@ -/* _memcopy.c -- subroutines for memory copy functions. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Torbjorn Granlund (tege@sics.se). - Updated for POWER6 by Steven Munroe (sjmunroe@us.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* BE VERY CAREFUL IF YOU CHANGE THIS CODE...! */ - -#include -#include - -/* _wordcopy_fwd_aligned -- Copy block beginning at SRCP to - block beginning at DSTP with LEN `op_t' words (not LEN bytes!). - Both SRCP and DSTP should be aligned for memory operations on `op_t's. */ - -#ifndef WORDCOPY_FWD_ALIGNED -# define WORDCOPY_FWD_ALIGNED _wordcopy_fwd_aligned -#endif - -void -WORDCOPY_FWD_ALIGNED (long int dstp, long int srcp, size_t len) -{ - op_t a0, a1; - - if (len & 1) - { - ((op_t *) dstp)[0] = ((op_t *) srcp)[0]; - - if (len == 1) - return; - srcp += OPSIZ; - dstp += OPSIZ; - len -= 1; - } - - do - { - a0 = ((op_t *) srcp)[0]; - a1 = ((op_t *) srcp)[1]; - ((op_t *) dstp)[0] = a0; - ((op_t *) dstp)[1] = a1; - - srcp += 2 * OPSIZ; - dstp += 2 * OPSIZ; - len -= 2; - } - while (len != 0); -} - -/* _wordcopy_fwd_dest_aligned -- Copy block beginning at SRCP to - block beginning at DSTP with LEN `op_t' words (not LEN bytes!). - DSTP should be aligned for memory operations on `op_t's, but SRCP must - *not* be aligned. */ - -#define fwd_align_merge(align) \ - do \ - { \ - a1 = ((op_t *) srcp)[1]; \ - a2 = ((op_t *) srcp)[2]; \ - ((op_t *) dstp)[0] = MERGE (a0, align*8, a1, (__WORDSIZE-align*8)); \ - ((op_t *) dstp)[1] = MERGE (a1, align*8, a2, (__WORDSIZE-align*8)); \ - a0 = a2; \ - srcp += 2 * OPSIZ; \ - dstp += 2 * OPSIZ; \ - len -= 2; \ - } \ - while (len != 0) - -#ifndef WORDCOPY_FWD_DEST_ALIGNED -# define WORDCOPY_FWD_DEST_ALIGNED _wordcopy_fwd_dest_aligned -#endif - -void -WORDCOPY_FWD_DEST_ALIGNED (long int dstp, long int srcp, size_t len) -{ - op_t a0, a1, a2; - int sh_1, sh_2; - int align; - - /* Calculate how to shift a word read at the memory operation - aligned srcp to make it aligned for copy. */ - - align = srcp % OPSIZ; - sh_1 = 8 * (srcp % OPSIZ); - sh_2 = 8 * OPSIZ - sh_1; - - /* Make SRCP aligned by rounding it down to the beginning of the `op_t' - it points in the middle of. */ - srcp &= -OPSIZ; - a0 = ((op_t *) srcp)[0]; - - if (len & 1) - { - a1 = ((op_t *) srcp)[1]; - ((op_t *) dstp)[0] = MERGE (a0, sh_1, a1, sh_2); - - if (len == 1) - return; - - a0 = a1; - srcp += OPSIZ; - dstp += OPSIZ; - len -= 1; - } - - fwd_align_merge (align); - -} - -/* _wordcopy_bwd_aligned -- Copy block finishing right before - SRCP to block finishing right before DSTP with LEN `op_t' words - (not LEN bytes!). Both SRCP and DSTP should be aligned for memory - operations on `op_t's. */ - -#ifndef WORDCOPY_BWD_ALIGNED -# define WORDCOPY_BWD_ALIGNED _wordcopy_bwd_aligned -#endif - -void -WORDCOPY_BWD_ALIGNED (long int dstp, long int srcp, size_t len) -{ - op_t a0, a1; - - if (len & 1) - { - srcp -= OPSIZ; - dstp -= OPSIZ; - ((op_t *) dstp)[0] = ((op_t *) srcp)[0]; - - if (len == 1) - return; - len -= 1; - } - - do - { - srcp -= 2 * OPSIZ; - dstp -= 2 * OPSIZ; - - a1 = ((op_t *) srcp)[1]; - a0 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[1] = a1; - ((op_t *) dstp)[0] = a0; - - len -= 2; - } - while (len != 0); -} - -#define bwd_align_merge(align) \ - do \ - { \ - srcp -= 2 * OPSIZ; \ - dstp -= 2 * OPSIZ; \ - a1 = ((op_t *) srcp)[1]; \ - a0 = ((op_t *) srcp)[0]; \ - ((op_t *) dstp)[1] = MERGE (a1, align*8, a2, (__WORDSIZE-align*8)); \ - ((op_t *) dstp)[0] = MERGE (a0, align*8, a1, (__WORDSIZE-align*8)); \ - a2 = a0; \ - len -= 2; \ - } \ - while (len != 0) - -/* _wordcopy_bwd_dest_aligned -- Copy block finishing right - before SRCP to block finishing right before DSTP with LEN `op_t' - words (not LEN bytes!). DSTP should be aligned for memory - operations on `op_t', but SRCP must *not* be aligned. */ - -#ifndef WORDCOPY_BWD_DEST_ALIGNED -# define WORDCOPY_BWD_DEST_ALIGNED _wordcopy_bwd_dest_aligned -#endif - -void -WORDCOPY_BWD_DEST_ALIGNED (long int dstp, long int srcp, size_t len) -{ - op_t a0, a1, a2; - int sh_1, sh_2; - int align; - - /* Calculate how to shift a word read at the memory operation - aligned srcp to make it aligned for copy. */ - - align = srcp % OPSIZ; - sh_1 = 8 * (srcp % OPSIZ); - sh_2 = 8 * OPSIZ - sh_1; - - /* Make srcp aligned by rounding it down to the beginning of the op_t - it points in the middle of. */ - srcp &= -OPSIZ; - a2 = ((op_t *) srcp)[0]; - - if (len & 1) - { - srcp -= OPSIZ; - dstp -= OPSIZ; - a1 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = MERGE (a1, sh_1, a2, sh_2); - - if (len == 1) - return; - - a2 = a1; - len -= 1; - } - - bwd_align_merge (align); -} diff --git a/sysdeps/powerpc/power7/fpu/s_logb.c b/sysdeps/powerpc/power7/fpu/s_logb.c deleted file mode 100644 index af74b1d024..0000000000 --- a/sysdeps/powerpc/power7/fpu/s_logb.c +++ /dev/null @@ -1,79 +0,0 @@ -/* logb(). PowerPC/POWER7 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* This implementation avoids FP to INT conversions by using VSX - bitwise instructions over FP values. */ - -static const double two1div52 = 2.220446049250313e-16; /* 1/2**52 */ -static const double two10m1 = -1023.0; /* 2**10 -1 */ - -/* FP mask to extract the exponent. */ -static const union { - unsigned long long mask; - double d; -} mask = { 0x7ff0000000000000ULL }; - -double -__logb (double x) -{ - double ret; - - if (__builtin_expect (x == 0.0, 0)) - /* Raise FE_DIVBYZERO and return -HUGE_VAL[LF]. */ - return -1.0 / __builtin_fabs (x); - - /* ret = x & 0x7ff0000000000000; */ - asm ( - "xxland %x0,%x1,%x2\n" - "fcfid %0,%0" - : "=f" (ret) - : "f" (x), "f" (mask.d)); - /* ret = (ret >> 52) - 1023.0; */ - ret = (ret * two1div52) + two10m1; - if (__builtin_expect (ret > -two10m1, 0)) - /* Multiplication is used to set logb (+-INF) = INF. */ - return (x * x); - else if (__builtin_expect (ret == two10m1, 0)) - { - /* POSIX specifies that denormal numbers are treated as - though they were normalized. */ - int32_t lx, ix; - int ma; - - EXTRACT_WORDS (ix, lx, x); - ix &= 0x7fffffff; - if (ix == 0) - ma = __builtin_clz (lx) + 32; - else - ma = __builtin_clz (ix); - return (double) (-1023 - (ma - 12)); - } - /* Test to avoid logb_downward (0.0) == -0.0. */ - return ret == -0.0 ? 0.0 : ret; -} -weak_alias (__logb, logb) -#ifdef NO_LONG_DOUBLE -strong_alias (__logb, __logbl) -weak_alias (__logb, logbl) -#endif - -#if LONG_DOUBLE_COMPAT (libm, GLIBC_2_0) -compat_symbol (libm, logb, logbl, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/power7/fpu/s_logbf.c b/sysdeps/powerpc/power7/fpu/s_logbf.c deleted file mode 100644 index 1461327cd1..0000000000 --- a/sysdeps/powerpc/power7/fpu/s_logbf.c +++ /dev/null @@ -1,60 +0,0 @@ -/* logbf(). PowerPC/POWER7 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "math_private.h" - -/* This implementation avoids FP to INT conversions by using VSX - bitwise instructions over FP values. */ - -static const double two1div52 = 2.220446049250313e-16; /* 1/2**52 */ -static const double two10m1 = -1023.0; /* -2**10 + 1 */ -static const double two7m1 = -127.0; /* -2**7 + 1 */ - -/* FP mask to extract the exponent. */ -static const union { - unsigned long long mask; - double d; -} mask = { 0x7ff0000000000000ULL }; - -float -__logbf (float x) -{ - /* VSX operation are all done internally as double. */ - double ret; - - if (__builtin_expect (x == 0.0, 0)) - /* Raise FE_DIVBYZERO and return -HUGE_VAL[LF]. */ - return -1.0 / __builtin_fabsf (x); - - /* ret = x & 0x7f800000; */ - asm ( - "xxland %x0,%x1,%x2\n" - "fcfid %0,%0" - : "=f"(ret) - : "f" (x), "f" (mask.d)); - /* ret = (ret >> 52) - 1023.0, since ret is double. */ - ret = (ret * two1div52) + two10m1; - if (__builtin_expect (ret > -two7m1, 0)) - /* Multiplication is used to set logb (+-INF) = INF. */ - return (x * x); - /* Since operations are done with double we don't need - additional tests for subnormal numbers. - The test is to avoid logb_downward (0.0) == -0.0. */ - return ret == -0.0 ? 0.0 : ret; -} -weak_alias (__logbf, logbf) diff --git a/sysdeps/powerpc/power7/fpu/s_logbl.c b/sysdeps/powerpc/power7/fpu/s_logbl.c deleted file mode 100644 index 3ae383a831..0000000000 --- a/sysdeps/powerpc/power7/fpu/s_logbl.c +++ /dev/null @@ -1,83 +0,0 @@ -/* logbl(). PowerPC/POWER7 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* This implementation avoids FP to INT conversions by using VSX - bitwise instructions over FP values. */ - -static const double two1div52 = 2.220446049250313e-16; /* 1/2**52 */ -static const double two10m1 = -1023.0; /* 2**10 -1 */ - -/* FP mask to extract the exponent. */ -static const union { - unsigned long long mask; - double d; -} mask = { 0x7ff0000000000000ULL }; - -long double -__logbl (long double x) -{ - double xh, xl; - double ret; - int64_t hx; - - if (__builtin_expect (x == 0.0L, 0)) - /* Raise FE_DIVBYZERO and return -HUGE_VAL[LF]. */ - return -1.0L / __builtin_fabsl (x); - - ldbl_unpack (x, &xh, &xl); - EXTRACT_WORDS64 (hx, xh); - /* ret = x & 0x7ff0000000000000; */ - asm ( - "xxland %x0,%x1,%x2\n" - "fcfid %0,%0" - : "=f" (ret) - : "f" (xh), "f" (mask.d)); - /* ret = (ret >> 52) - 1023.0; */ - ret = (ret * two1div52) + two10m1; - if (__builtin_expect (ret > -two10m1, 0)) - /* Multiplication is used to set logb (+-INF) = INF. */ - return (xh * xh); - else if (__builtin_expect (ret == two10m1, 0)) - { - /* POSIX specifies that denormal number is treated as - though it were normalized. */ - return (long double) (- (__builtin_clzll (hx & 0x7fffffffffffffffLL) \ - - 12) - 1023); - } - else if ((hx & 0x000fffffffffffffLL) == 0) - { - /* If the high part is a power of 2, and the low part is nonzero - with the opposite sign, the low part affects the - exponent. */ - int64_t lx, rhx; - EXTRACT_WORDS64 (lx, xl); - rhx = (hx & 0x7ff0000000000000LL) >> 52; - if ((hx ^ lx) < 0 && (lx & 0x7fffffffffffffffLL) != 0) - rhx--; - return (long double) (rhx - 1023); - } - /* Test to avoid logb_downward (0.0) == -0.0. */ - return ret == -0.0 ? 0.0 : ret; -} -#ifndef __logbl -long_double_symbol (libm, __logbl, logbl); -#endif diff --git a/sysdeps/powerpc/powerpc32/405/memcmp.S b/sysdeps/powerpc/powerpc32/405/memcmp.S deleted file mode 100644 index d1865140eb..0000000000 --- a/sysdeps/powerpc/powerpc32/405/memcmp.S +++ /dev/null @@ -1,128 +0,0 @@ -/* Optimized memcmp implementation for PowerPC476. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* memcmp - - r3:source1 address, return equality - r4:source2 address - r5:byte count - - Check 2 words from src1 and src2. If unequal jump to end and - return src1 > src2 or src1 < src2. - If count = zero check bytes before zero counter and then jump to end and - return src1 > src2, src1 < src2 or src1 = src2. - If src1 = src2 and no null, repeat. */ - -EALIGN (memcmp, 5, 0) - srwi. r6,r5,5 - beq L(preword2_count_loop) - mtctr r6 - clrlwi r5,r5,27 - -L(word8_compare_loop): - lwz r10,0(r3) - lwz r6,4(r3) - lwz r8,0(r4) - lwz r9,4(r4) - cmplw cr5,r8,r10 - cmplw cr1,r9,r6 - bne cr5,L(st2) - bne cr1,L(st1) - lwz r10,8(r3) - lwz r6,12(r3) - lwz r8,8(r4) - lwz r9,12(r4) - cmplw cr5,r8,r10 - cmplw cr1,r9,r6 - bne cr5,L(st2) - bne cr1,L(st1) - lwz r10,16(r3) - lwz r6,20(r3) - lwz r8,16(r4) - lwz r9,20(r4) - cmplw cr5,r8,r10 - cmplw cr1,r9,r6 - bne cr5,L(st2) - bne cr1,L(st1) - lwz r10,24(r3) - lwz r6,28(r3) - addi r3,r3,0x20 - lwz r8,24(r4) - lwz r9,28(r4) - addi r4,r4,0x20 - cmplw cr5,r8,r10 - cmplw cr1,r9,r6 - bne cr5,L(st2) - bne cr1,L(st1) - bdnz L(word8_compare_loop) - -L(preword2_count_loop): - srwi. r6,r5,3 - beq L(prebyte_count_loop) - mtctr r6 - clrlwi r5,r5,29 - -L(word2_count_loop): - lwz r10,0(r3) - lwz r6,4(r3) - addi r3,r3,0x08 - lwz r8,0(r4) - lwz r9,4(r4) - addi r4,r4,0x08 - cmplw cr5,r8,r10 - cmplw cr1,r9,r6 - bne cr5,L(st2) - bne cr1,L(st1) - bdnz L(word2_count_loop) - -L(prebyte_count_loop): - addi r5,r5,1 - mtctr r5 - bdz L(end_memcmp) - -L(byte_count_loop): - lbz r6,0(r3) - addi r3,r3,0x01 - lbz r8,0(r4) - addi r4,r4,0x01 - cmplw cr5,r8,r6 - bne cr5,L(st2) - bdnz L(byte_count_loop) - -L(end_memcmp): - addi r3,r0,0 - blr - -L(l_r): - addi r3,r0,1 - blr - -L(st1): - blt cr1,L(l_r) - addi r3,r0,-1 - blr - -L(st2): - blt cr5,L(l_r) - addi r3,r0,-1 - blr -END (memcmp) -libc_hidden_builtin_def (memcmp) -weak_alias (memcmp,bcmp) diff --git a/sysdeps/powerpc/powerpc32/405/memcpy.S b/sysdeps/powerpc/powerpc32/405/memcpy.S deleted file mode 100644 index 9878dbceac..0000000000 --- a/sysdeps/powerpc/powerpc32/405/memcpy.S +++ /dev/null @@ -1,130 +0,0 @@ -/* Optimized memcpy implementation for PowerPC476. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* memcpy - - r0:return address - r3:destination address - r4:source address - r5:byte count - - Save return address in r0. - If destinationn and source are unaligned and copy count is greater than 256 - then copy 0-3 bytes to make destination aligned. - If 32 or more bytes to copy we use 32 byte copy loop. - Finaly we copy 0-31 extra bytes. */ - -EALIGN (memcpy, 5, 0) -/* Check if bytes to copy are greater than 256 and if - source and destination are unaligned */ - cmpwi r5,0x0100 - addi r0,r3,0 - ble L(string_count_loop) - neg r6,r3 - clrlwi. r6,r6,30 - beq L(string_count_loop) - neg r6,r4 - clrlwi. r6,r6,30 - beq L(string_count_loop) - mtctr r6 - subf r5,r6,r5 - -L(unaligned_bytecopy_loop): /* Align destination by coping 0-3 bytes */ - lbz r8,0x0(r4) - addi r4,r4,1 - stb r8,0x0(r3) - addi r3,r3,1 - bdnz L(unaligned_bytecopy_loop) - srwi. r7,r5,5 - beq L(preword2_count_loop) - mtctr r7 - -L(word8_count_loop_no_dcbt): /* Copy 32 bytes at a time */ - lwz r6,0(r4) - lwz r7,4(r4) - lwz r8,8(r4) - lwz r9,12(r4) - subi r5,r5,0x20 - stw r6,0(r3) - stw r7,4(r3) - stw r8,8(r3) - stw r9,12(r3) - lwz r6,16(r4) - lwz r7,20(r4) - lwz r8,24(r4) - lwz r9,28(r4) - addi r4,r4,0x20 - stw r6,16(r3) - stw r7,20(r3) - stw r8,24(r3) - stw r9,28(r3) - addi r3,r3,0x20 - bdnz L(word8_count_loop_no_dcbt) - -L(preword2_count_loop): /* Copy remaining 0-31 bytes */ - clrlwi. r12,r5,27 - beq L(end_memcpy) - mtxer r12 - lswx r5,0,r4 - stswx r5,0,r3 - mr r3,r0 - blr - -L(string_count_loop): /* Copy odd 0-31 bytes */ - clrlwi. r12,r5,28 - add r3,r3,r5 - add r4,r4,r5 - beq L(pre_string_copy) - mtxer r12 - subf r4,r12,r4 - subf r3,r12,r3 - lswx r6,0,r4 - stswx r6,0,r3 - -L(pre_string_copy): /* Check how many 32 byte chunks to copy */ - srwi. r7,r5,4 - beq L(end_memcpy) - mtctr r7 - -L(word4_count_loop_no_dcbt): /* Copy 32 bytes at a time */ - lwz r6,-4(r4) - lwz r7,-8(r4) - lwz r8,-12(r4) - lwzu r9,-16(r4) - stw r6,-4(r3) - stw r7,-8(r3) - stw r8,-12(r3) - stwu r9,-16(r3) - bdz L(end_memcpy) - lwz r6,-4(r4) - lwz r7,-8(r4) - lwz r8,-12(r4) - lwzu r9,-16(r4) - stw r6,-4(r3) - stw r7,-8(r3) - stw r8,-12(r3) - stwu r9,-16(r3) - bdnz L(word4_count_loop_no_dcbt) - -L(end_memcpy): - mr r3,r0 - blr -END (memcpy) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/powerpc/powerpc32/405/memset.S b/sysdeps/powerpc/powerpc32/405/memset.S deleted file mode 100644 index 18aea515ba..0000000000 --- a/sysdeps/powerpc/powerpc32/405/memset.S +++ /dev/null @@ -1,152 +0,0 @@ -/* Optimized memset for PowerPC405,440,464 (32-byte cacheline). - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* memset - - r3:destination address and return address - r4:source integer to copy - r5:byte count - r11:sources integer to copy in all 32 bits of reg - r12:temp return address - - Save return address in r12 - If destinationn is unaligned and count is greater tha 255 bytes - set 0-3 bytes to make destination aligned - If count is greater tha 255 bytes and setting zero to memory - use dbcz to set memeory when we can - otherwsie do the follwoing - If 16 or more words to set we use 16 word copy loop. - Finaly we set 0-15 extra bytes with string store. */ - -EALIGN (memset, 5, 0) - rlwinm r11,r4,0,24,31 - rlwimi r11,r4,8,16,23 - rlwimi r11,r11,16,0,15 - addi r12,r3,0 - cmpwi r5,0x00FF - ble L(preword8_count_loop) - cmpwi r4,0x00 - beq L(use_dcbz) - neg r6,r3 - clrlwi. r6,r6,30 - beq L(preword8_count_loop) - addi r8,0,1 - mtctr r6 - subi r3,r3,1 - -L(unaligned_bytecopy_loop): - stbu r11,0x1(r3) - subf. r5,r8,r5 - beq L(end_memset) - bdnz L(unaligned_bytecopy_loop) - addi r3,r3,1 - -L(preword8_count_loop): - srwi. r6,r5,4 - beq L(preword2_count_loop) - mtctr r6 - addi r3,r3,-4 - mr r8,r11 - mr r9,r11 - mr r10,r11 - -L(word8_count_loop_no_dcbt): - stwu r8,4(r3) - stwu r9,4(r3) - subi r5,r5,0x10 - stwu r10,4(r3) - stwu r11,4(r3) - bdnz L(word8_count_loop_no_dcbt) - addi r3,r3,4 - -L(preword2_count_loop): - clrlwi. r7,r5,28 - beq L(end_memset) - mr r8,r11 - mr r9,r11 - mr r10,r11 - mtxer r7 - stswx r8,0,r3 - -L(end_memset): - addi r3,r12,0 - blr - -L(use_dcbz): - neg r6,r3 - clrlwi. r7,r6,28 - beq L(skip_string_loop) - mr r8,r11 - mr r9,r11 - mr r10,r11 - subf r5,r7,r5 - mtxer r7 - stswx r8,0,r3 - add r3,r3,r7 - -L(skip_string_loop): - clrlwi r8,r6,27 - srwi. r8,r8,4 - beq L(dcbz_pre_loop) - mtctr r8 - -L(word_loop): - stw r11,0(r3) - subi r5,r5,0x10 - stw r11,4(r3) - stw r11,8(r3) - stw r11,12(r3) - addi r3,r3,0x10 - bdnz L(word_loop) - -L(dcbz_pre_loop): - srwi r6,r5,5 - mtctr r6 - addi r7,0,0 - -L(dcbz_loop): - dcbz r3,r7 - addi r3,r3,0x20 - subi r5,r5,0x20 - bdnz L(dcbz_loop) - srwi. r6,r5,4 - beq L(postword2_count_loop) - mtctr r6 - -L(postword8_count_loop): - stw r11,0(r3) - subi r5,r5,0x10 - stw r11,4(r3) - stw r11,8(r3) - stw r11,12(r3) - addi r3,r3,0x10 - bdnz L(postword8_count_loop) - -L(postword2_count_loop): - clrlwi. r7,r5,28 - beq L(end_memset) - mr r8,r11 - mr r9,r11 - mr r10,r11 - mtxer r7 - stswx r8,0,r3 - b L(end_memset) -END (memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/powerpc/powerpc32/405/strcmp.S b/sysdeps/powerpc/powerpc32/405/strcmp.S deleted file mode 100644 index 42e04e9552..0000000000 --- a/sysdeps/powerpc/powerpc32/405/strcmp.S +++ /dev/null @@ -1,134 +0,0 @@ -/* Optimized strcmp implementation for PowerPC476. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* strcmp - - Register Use - r0:temp return equality - r3:source1 address, return equality - r4:source2 address - - Implementation description - Check 2 words from src1 and src2. If unequal jump to end and - return src1 > src2 or src1 < src2. - If null check bytes before null and then jump to end and - return src1 > src2, src1 < src2 or src1 = src2. - If src1 = src2 and no null, repeat. */ - -EALIGN (strcmp,5,0) - neg r7,r3 - clrlwi r7,r7,20 - neg r8,r4 - clrlwi r8,r8,20 - srwi. r7,r7,5 - beq L(byte_loop) - srwi. r8,r8,5 - beq L(byte_loop) - cmplw r7,r8 - mtctr r7 - ble L(big_loop) - mtctr r8 - -L(big_loop): - lwz r5,0(r3) - lwz r6,4(r3) - lwz r8,0(r4) - lwz r9,4(r4) - dlmzb. r12,r5,r6 - bne L(end_check) - cmplw r5,r8 - bne L(st1) - cmplw r6,r9 - bne L(st1) - lwz r5,8(r3) - lwz r6,12(r3) - lwz r8,8(r4) - lwz r9,12(r4) - dlmzb. r12,r5,r6 - bne L(end_check) - cmplw r5,r8 - bne L(st1) - cmplw r6,r9 - bne L(st1) - lwz r5,16(r3) - lwz r6,20(r3) - lwz r8,16(r4) - lwz r9,20(r4) - dlmzb. r12,r5,r6 - bne L(end_check) - cmplw r5,r8 - bne L(st1) - cmplw r6,r9 - bne L(st1) - lwz r5,24(r3) - lwz r6,28(r3) - addi r3,r3,0x20 - lwz r8,24(r4) - lwz r9,28(r4) - addi r4,r4,0x20 - dlmzb. r12,r5,r6 - bne L(end_check) - cmplw r5,r8 - bne L(st1) - cmplw r6,r9 - bne L(st1) - bdnz L(big_loop) - b L(byte_loop) - -L(end_check): - subfic r12,r12,4 - blt L(end_check2) - rlwinm r12,r12,3,0,31 - srw r5,r5,r12 - srw r8,r8,r12 - cmplw r5,r8 - bne L(st1) - b L(end_strcmp) - -L(end_check2): - addi r12,r12,4 - cmplw r5,r8 - rlwinm r12,r12,3,0,31 - bne L(st1) - srw r6,r6,r12 - srw r9,r9,r12 - cmplw r6,r9 - bne L(st1) - -L(end_strcmp): - addi r3,r0,0 - blr - -L(st1): - mfcr r3 - blr - -L(byte_loop): - lbz r5,0(r3) - addi r3,r3,1 - lbz r6,0(r4) - addi r4,r4,1 - cmplw r5,r6 - bne L(st1) - cmpwi r5,0 - beq L(end_strcmp) - b L(byte_loop) -END (strcmp) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/powerpc/powerpc32/405/strcpy.S b/sysdeps/powerpc/powerpc32/405/strcpy.S deleted file mode 100644 index 2a554dc32e..0000000000 --- a/sysdeps/powerpc/powerpc32/405/strcpy.S +++ /dev/null @@ -1,107 +0,0 @@ -/* Optimized strcpy implementation for PowerPC476. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* strcpy - - Register Use - r3:destination and return address - r4:source address - r10:temp destination address - - Implementation description - Loop by checking 2 words at a time, with dlmzb. Check if there is a null - in the 2 words. If there is a null jump to end checking to determine - where in the last 8 bytes it is. Copy the appropriate bytes of the last - 8 according to the null position. */ - -EALIGN (strcpy, 5, 0) - neg r7,r4 - subi r4,r4,1 - clrlwi. r8,r7,29 - subi r10,r3,1 - beq L(pre_word8_loop) - mtctr r8 - -L(loop): - lbzu r5,0x01(r4) - cmpi cr5,r5,0x0 - stbu r5,0x01(r10) - beq cr5,L(end_strcpy) - bdnz L(loop) - -L(pre_word8_loop): - subi r4,r4,3 - subi r10,r10,3 - -L(word8_loop): - lwzu r5,0x04(r4) - lwzu r6,0x04(r4) - dlmzb. r11,r5,r6 - bne L(byte_copy) - stwu r5,0x04(r10) - stwu r6,0x04(r10) - lwzu r5,0x04(r4) - lwzu r6,0x04(r4) - dlmzb. r11,r5,r6 - bne L(byte_copy) - stwu r5,0x04(r10) - stwu r6,0x04(r10) - lwzu r5,0x04(r4) - lwzu r6,0x04(r4) - dlmzb. r11,r5,r6 - bne L(byte_copy) - stwu r5,0x04(r10) - stwu r6,0x04(r10) - lwzu r5,0x04(r4) - lwzu r6,0x04(r4) - dlmzb. r11,r5,r6 - bne L(byte_copy) - stwu r5,0x04(r10) - stwu r6,0x04(r10) - b L(word8_loop) - -L(last_bytes_copy): - stwu r5,0x04(r10) - subi r11,r11,4 - mtctr r11 - addi r10,r10,3 - subi r4,r4,1 - -L(last_bytes_copy_loop): - lbzu r5,0x01(r4) - stbu r5,0x01(r10) - bdnz L(last_bytes_copy_loop) - blr - -L(byte_copy): - blt L(last_bytes_copy) - mtctr r11 - addi r10,r10,3 - subi r4,r4,5 - -L(last_bytes_copy_loop2): - lbzu r5,0x01(r4) - stbu r5,0x01(r10) - bdnz L(last_bytes_copy_loop2) - -L(end_strcpy): - blr -END (strcpy) -libc_hidden_builtin_def (strcpy) diff --git a/sysdeps/powerpc/powerpc32/405/strlen.S b/sysdeps/powerpc/powerpc32/405/strlen.S deleted file mode 100644 index 25e54dafc7..0000000000 --- a/sysdeps/powerpc/powerpc32/405/strlen.S +++ /dev/null @@ -1,75 +0,0 @@ -/* Optimized strlen implementation for PowerPC476. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* strlen - - Register Use - r3:source address and return length of string - r4:byte counter - - Implementation description - Load 2 words at a time and count bytes, if we find null we subtract one from - the count and return the count value. We need to subtract one because - we don't count the null character as a byte. */ - -EALIGN (strlen,5,0) - neg r7,r3 - clrlwi. r8,r7,29 - addi r4,0,0 - beq L(byte_count_loop) - mtctr r8 - -L(loop): - lbz r5,0(r3) - cmpi cr5,r5,0x0 - addi r3,r3,0x1 - addi r4,r4,0x1 - beq cr5,L(end_strlen) - bdnz L(loop) - -L(byte_count_loop): - lwz r5,0(r3) - lwz r6,4(r3) - dlmzb. r12,r5,r6 - add r4,r4,r12 - bne L(end_strlen) - lwz r5,8(r3) - lwz r6,12(r3) - dlmzb. r12,r5,r6 - add r4,r4,r12 - bne L(end_strlen) - lwz r5,16(r3) - lwz r6,20(r3) - dlmzb. r12,r5,r6 - add r4,r4,r12 - bne L(end_strlen) - lwz r5,24(r3) - lwz r6,28(r3) - addi r3,r3,0x20 - dlmzb. r12,r5,r6 - add r4,r4,r12 - bne L(end_strlen) - b L(byte_count_loop) - -L(end_strlen): - addi r3,r4,-1 - blr -END (strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/powerpc/powerpc32/405/strncmp.S b/sysdeps/powerpc/powerpc32/405/strncmp.S deleted file mode 100644 index 9c5a8feb9d..0000000000 --- a/sysdeps/powerpc/powerpc32/405/strncmp.S +++ /dev/null @@ -1,128 +0,0 @@ -/* Optimized strncmp implementation for PowerPC476. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* strncmp - - Register Use - r0:temp return equality - r3:source1 address, return equality - r4:source2 address - r5:byte count - - Implementation description - Touch in 3 lines of D-cache. - If source1 or source2 is unaligned copy 0-3 bytes to make source1 aligned - Check 2 words from src1 and src2. If unequal jump to end and - return src1 > src2 or src1 < src2. - If null check bytes before null and then jump to end and - return src1 > src2, src1 < src2 or src1 = src2. - If count = zero check bytes before zero counter and then jump to end and - return src1 > src2, src1 < src2 or src1 = src2. - If src1 = src2 and no null, repeat. */ - -EALIGN (strncmp,5,0) - neg r7,r3 - clrlwi r7,r7,20 - neg r8,r4 - clrlwi r8,r8,20 - srwi. r7,r7,3 - beq L(prebyte_count_loop) - srwi. r8,r8,3 - beq L(prebyte_count_loop) - cmplw r7,r8 - mtctr r7 - ble L(preword2_count_loop) - mtctr r8 - -L(preword2_count_loop): - srwi. r6,r5,3 - beq L(prebyte_count_loop) - mfctr r7 - cmplw r6,r7 - bgt L(set_count_loop) - mtctr r6 - clrlwi r5,r5,29 - -L(word2_count_loop): - lwz r10,0(r3) - lwz r6,4(r3) - addi r3,r3,0x08 - lwz r8,0(r4) - lwz r9,4(r4) - addi r4,r4,0x08 - dlmzb. r12,r10,r6 - bne L(end_check) - cmplw r10,r8 - bne L(st1) - cmplw r6,r9 - bne L(st1) - bdnz L(word2_count_loop) - -L(prebyte_count_loop): - addi r5,r5,1 - mtctr r5 - bdz L(end_strncmp) - -L(byte_count_loop): - lbz r6,0(r3) - addi r3,r3,1 - lbz r7,0(r4) - addi r4,r4,1 - cmplw r6,r7 - bne L(st1) - cmpwi r6,0 - beq L(end_strncmp) - bdnz L(byte_count_loop) - b L(end_strncmp) - -L(set_count_loop): - slwi r7,r7,3 - subf r5,r7,r5 - b L(word2_count_loop) - -L(end_check): - subfic r12,r12,4 - blt L(end_check2) - rlwinm r12,r12,3,0,31 - srw r10,r10,r12 - srw r8,r8,r12 - cmplw r10,r8 - bne L(st1) - b L(end_strncmp) - -L(end_check2): - addi r12,r12,4 - cmplw r10,r8 - rlwinm r12,r12,3,0,31 - bne L(st1) - srw r6,r6,r12 - srw r9,r9,r12 - cmplw r6,r9 - bne L(st1) - -L(end_strncmp): - addi r3,r0,0 - blr - -L(st1): - mfcr r3 - blr -END (strncmp) -libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/powerpc/powerpc32/440/Implies b/sysdeps/powerpc/powerpc32/440/Implies deleted file mode 100644 index 70c0d2eda3..0000000000 --- a/sysdeps/powerpc/powerpc32/440/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/405/fpu -powerpc/powerpc32/405 diff --git a/sysdeps/powerpc/powerpc32/464/Implies b/sysdeps/powerpc/powerpc32/464/Implies deleted file mode 100644 index c3e52c5504..0000000000 --- a/sysdeps/powerpc/powerpc32/464/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/440/fpu -powerpc/powerpc32/440 diff --git a/sysdeps/powerpc/powerpc32/476/Implies b/sysdeps/powerpc/powerpc32/476/Implies deleted file mode 100644 index 2829f9ccaf..0000000000 --- a/sysdeps/powerpc/powerpc32/476/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/464/fpu -powerpc/powerpc32/464 diff --git a/sysdeps/powerpc/powerpc32/476/memset.S b/sysdeps/powerpc/powerpc32/476/memset.S deleted file mode 100644 index 17c91238e1..0000000000 --- a/sysdeps/powerpc/powerpc32/476/memset.S +++ /dev/null @@ -1,152 +0,0 @@ -/* Optimized memset for PowerPC476 (128-byte cacheline). - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* memset - - r3:destination address and return address - r4:source integer to copy - r5:byte count - r11:sources integer to copy in all 32 bits of reg - r12:temp return address - - Save return address in r12 - If destinationn is unaligned and count is greater tha 255 bytes - set 0-3 bytes to make destination aligned - If count is greater tha 255 bytes and setting zero to memory - use dbcz to set memeory when we can - otherwsie do the follwoing - If 16 or more words to set we use 16 word copy loop. - Finaly we set 0-15 extra bytes with string store. */ - -EALIGN (memset, 5, 0) - rlwinm r11,r4,0,24,31 - rlwimi r11,r4,8,16,23 - rlwimi r11,r11,16,0,15 - addi r12,r3,0 - cmpwi r5,0x00FF - ble L(preword8_count_loop) - cmpwi r4,0x00 - beq L(use_dcbz) - neg r6,r3 - clrlwi. r6,r6,30 - beq L(preword8_count_loop) - addi r8,0,1 - mtctr r6 - subi r3,r3,1 - -L(unaligned_bytecopy_loop): - stbu r11,0x1(r3) - subf. r5,r8,r5 - beq L(end_memset) - bdnz L(unaligned_bytecopy_loop) - addi r3,r3,1 - -L(preword8_count_loop): - srwi. r6,r5,4 - beq L(preword2_count_loop) - mtctr r6 - addi r3,r3,-4 - mr r8,r11 - mr r9,r11 - mr r10,r11 - -L(word8_count_loop_no_dcbt): - stwu r8,4(r3) - stwu r9,4(r3) - subi r5,r5,0x10 - stwu r10,4(r3) - stwu r11,4(r3) - bdnz L(word8_count_loop_no_dcbt) - addi r3,r3,4 - -L(preword2_count_loop): - clrlwi. r7,r5,28 - beq L(end_memset) - mr r8,r11 - mr r9,r11 - mr r10,r11 - mtxer r7 - stswx r8,0,r3 - -L(end_memset): - addi r3,r12,0 - blr - -L(use_dcbz): - neg r6,r3 - clrlwi. r7,r6,28 - beq L(skip_string_loop) - mr r8,r11 - mr r9,r11 - mr r10,r11 - subf r5,r7,r5 - mtxer r7 - stswx r8,0,r3 - add r3,r3,r7 - -L(skip_string_loop): - clrlwi r8,r6,25 - srwi. r8,r8,4 - beq L(dcbz_pre_loop) - mtctr r8 - -L(word_loop): - stw r11,0(r3) - subi r5,r5,0x10 - stw r11,4(r3) - stw r11,8(r3) - stw r11,12(r3) - addi r3,r3,0x10 - bdnz L(word_loop) - -L(dcbz_pre_loop): - srwi r6,r5,7 - mtctr r6 - addi r7,0,0 - -L(dcbz_loop): - dcbz r3,r7 - addi r3,r3,0x80 - subi r5,r5,0x80 - bdnz L(dcbz_loop) - srwi. r6,r5,4 - beq L(postword2_count_loop) - mtctr r6 - -L(postword8_count_loop): - stw r11,0(r3) - subi r5,r5,0x10 - stw r11,4(r3) - stw r11,8(r3) - stw r11,12(r3) - addi r3,r3,0x10 - bdnz L(postword8_count_loop) - -L(postword2_count_loop): - clrlwi. r7,r5,28 - beq L(end_memset) - mr r8,r11 - mr r9,r11 - mr r10,r11 - mtxer r7 - stswx r8,0,r3 - b L(end_memset) -END (memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/powerpc/powerpc32/970/Implies b/sysdeps/powerpc/powerpc32/970/Implies deleted file mode 100644 index 17139bf21c..0000000000 --- a/sysdeps/powerpc/powerpc32/970/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/power4/fpu -powerpc/powerpc32/power4 diff --git a/sysdeps/powerpc/powerpc32/Implies b/sysdeps/powerpc/powerpc32/Implies deleted file mode 100644 index 39a34c5f57..0000000000 --- a/sysdeps/powerpc/powerpc32/Implies +++ /dev/null @@ -1 +0,0 @@ -wordsize-32 diff --git a/sysdeps/powerpc/powerpc32/Makefile b/sysdeps/powerpc/powerpc32/Makefile deleted file mode 100644 index cf620c8269..0000000000 --- a/sysdeps/powerpc/powerpc32/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -# Powerpc32 specific build options. - -# Some Powerpc32 variants assume soft-fp is the default even though there is -# an fp variant so provide -mhard-float if --with-fp is explicitly passed. - -ifeq ($(with-fp),yes) -+cflags += -mhard-float -ASFLAGS += -mhard-float -sysdep-LDFLAGS += -mhard-float -endif - -ifeq ($(subdir),gmon) -sysdep_routines += ppc-mcount compat-ppc-mcount -static-only-routines += ppc-mcount -shared-only-routines += compat-ppc-mcount -endif - -ifeq ($(subdir),misc) -sysdep_routines += gprsave0 gprrest0 gprsave1 gprrest1 -endif - -# On PPC, -fpic works until the GOT contains 32768 bytes, and possibly -# more depending on how clever the linker is. Each GOT entry takes 4 bytes, -# so that's at least 8192 entries. Since libc only uses about 2000 entries, -# we want to use -fpic, because this generates fewer relocs. -ifeq (yes,$(build-shared)) -pic-ccflag = -fpic -endif - -ifeq ($(subdir),csu) -# There is no benefit to using sdata for these objects, and the user -# of the library should be able to control what goes into sdata. -CFLAGS-init.o = -G0 -CFLAGS-gmon-start.o = -G0 - -ifeq (yes,$(build-shared)) -# Compatibility -ifeq (yes,$(have-protected)) -CPPFLAGS-libgcc-compat.S = -DHAVE_DOT_HIDDEN -endif -sysdep_routines += libgcc-compat -shared-only-routines += libgcc-compat -endif -endif - -ifeq ($(subdir),elf) -# extra shared linker files to link only into dl-allobjs.so -sysdep-rtld-routines += dl-start -endif diff --git a/sysdeps/powerpc/powerpc32/Versions b/sysdeps/powerpc/powerpc32/Versions deleted file mode 100644 index b0782fecd4..0000000000 --- a/sysdeps/powerpc/powerpc32/Versions +++ /dev/null @@ -1,40 +0,0 @@ -libc { - GLIBC_2.0 { - # Functions from libgcc. - __divdi3; __moddi3; __udivdi3; __umoddi3; - __cmpdi2; __ucmpdi2; - __ashldi3; __ashrdi3; __lshrdi3; - __fixdfdi; __fixunsdfdi; - __fixsfdi; __fixunssfdi; - __floatdidf; __floatdisf; - } - GLIBC_2.16 { - __mcount_internal; - } - GLIBC_PRIVATE { - __mcount_internal; - } -} - -libm { - GLIBC_2.2 { - # Special functions to save and restore registers used by the - # runtime libraries. - _restgpr0_13; _restgpr0_14; _restgpr0_15; _restgpr0_16; _restgpr0_17; - _restgpr0_18; _restgpr0_19; _restgpr0_20; _restgpr0_21; _restgpr0_22; - _restgpr0_22; _restgpr0_23; _restgpr0_24; _restgpr0_25; _restgpr0_26; - _restgpr0_27; _restgpr0_28; _restgpr0_29; _restgpr0_30; _restgpr0_31; - _savegpr0_13; _savegpr0_14; _savegpr0_15; _savegpr0_16; _savegpr0_17; - _savegpr0_18; _savegpr0_19; _savegpr0_20; _savegpr0_21; _savegpr0_22; - _savegpr0_22; _savegpr0_23; _savegpr0_24; _savegpr0_25; _savegpr0_26; - _savegpr0_27; _savegpr0_28; _savegpr0_29; _savegpr0_30; _savegpr0_31; - _restgpr1_13; _restgpr1_14; _restgpr1_15; _restgpr1_16; _restgpr1_17; - _restgpr1_18; _restgpr1_19; _restgpr1_20; _restgpr1_21; _restgpr1_22; - _restgpr1_22; _restgpr1_23; _restgpr1_24; _restgpr1_25; _restgpr1_26; - _restgpr1_27; _restgpr1_28; _restgpr1_29; _restgpr1_30; _restgpr1_31; - _savegpr1_13; _savegpr1_14; _savegpr1_15; _savegpr1_16; _savegpr1_17; - _savegpr1_18; _savegpr1_19; _savegpr1_20; _savegpr1_21; _savegpr1_22; - _savegpr1_22; _savegpr1_23; _savegpr1_24; _savegpr1_25; _savegpr1_26; - _savegpr1_27; _savegpr1_28; _savegpr1_29; _savegpr1_30; _savegpr1_31; - } -} diff --git a/sysdeps/powerpc/powerpc32/__longjmp-common.S b/sysdeps/powerpc/powerpc32/__longjmp-common.S deleted file mode 100644 index 4b60a2f9a8..0000000000 --- a/sysdeps/powerpc/powerpc32/__longjmp-common.S +++ /dev/null @@ -1,82 +0,0 @@ -/* longjmp for PowerPC. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#define _ASM -#ifdef __NO_VMX__ -# include -#else -# include -#endif - -#if defined __SPE__ || (defined __NO_FPRS__ && !defined _SOFT_FLOAT) -# define LOAD_GP(N) evldd r##N,((JB_FPRS+((N)-14)*2)*4)(r3) -#else -# define LOAD_GP(N) lwz r##N,((JB_GPRS+(N)-14)*4)(r3) -#endif - -ENTRY (__longjmp_symbol) - -#if defined PTR_DEMANGLE || defined CHECK_SP - lwz r24,(JB_GPR1*4)(r3) -# ifdef CHECK_SP -# ifdef PTR_DEMANGLE - PTR_DEMANGLE3 (r24, r24, r25) -# endif - CHECK_SP (r24) - mr r1,r24 -# endif -#else - lwz r1,(JB_GPR1*4)(r3) -#endif - lwz r0,(JB_LR*4)(r3) - LOAD_GP (14) - LOAD_GP (15) - LOAD_GP (16) - LOAD_GP (17) - LOAD_GP (18) - LOAD_GP (19) - LOAD_GP (20) -#ifdef PTR_DEMANGLE -# ifndef CHECK_SP - PTR_DEMANGLE3 (r1, r24, r25) -# endif - PTR_DEMANGLE2 (r0, r25) -#endif - /* longjmp/longjmp_target probe expects longjmp first argument (4@3), - second argument (-4@4), and target address (4@0), respectively. */ - LIBC_PROBE (longjmp, 3, 4@3, -4@4, 4@0) - mtlr r0 - LOAD_GP (21) - LOAD_GP (22) - lwz r5,(JB_CR*4)(r3) - LOAD_GP (23) - LOAD_GP (24) - LOAD_GP (25) - mtcrf 0xFF,r5 - LOAD_GP (26) - LOAD_GP (27) - LOAD_GP (28) - LOAD_GP (29) - LOAD_GP (30) - LOAD_GP (31) - LIBC_PROBE (longjmp_target, 3, 4@3, -4@4, 4@0) - mr r3,r4 - blr -END (__longjmp_symbol) diff --git a/sysdeps/powerpc/powerpc32/__longjmp.S b/sysdeps/powerpc/powerpc32/__longjmp.S deleted file mode 100644 index 42127c6ff2..0000000000 --- a/sysdeps/powerpc/powerpc32/__longjmp.S +++ /dev/null @@ -1,39 +0,0 @@ -/* AltiVec/VMX (new) version of __longjmp for PowerPC. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if !IS_IN (libc) -/* Build a non-versioned object for rtld-*. */ -# define __longjmp_symbol __longjmp -# include "__longjmp-common.S" - -#else /* IS_IN (libc) */ -strong_alias (__vmx__longjmp, __longjmp); -# define __longjmp_symbol __vmx__longjmp -# include "__longjmp-common.S" - -# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) -# define __NO_VMX__ -# undef JB_SIZE -# undef __longjmp_symbol -# define __longjmp_symbol __novmx__longjmp -# include "__longjmp-common.S" -# endif -#endif /* IS_IN (libc) */ diff --git a/sysdeps/powerpc/powerpc32/a2/memcpy.S b/sysdeps/powerpc/powerpc32/a2/memcpy.S deleted file mode 100644 index c795ff48fe..0000000000 --- a/sysdeps/powerpc/powerpc32/a2/memcpy.S +++ /dev/null @@ -1,527 +0,0 @@ -/* Optimized memcpy implementation for PowerPC A2. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Michael Brutman . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define PREFETCH_AHEAD 4 /* no cache lines SRC prefetching ahead */ -#define ZERO_AHEAD 2 /* no cache lines DST zeroing ahead */ - - .machine a2 -EALIGN (memcpy, 5, 0) - CALL_MCOUNT - - dcbt 0,r4 /* Prefetch ONE SRC cacheline */ - cmplwi cr1,r5,16 /* is size < 16 ? */ - mr r6,r3 /* Copy dest reg to r6; */ - blt+ cr1,L(shortcopy) - - - /* Big copy (16 bytes or more) - - Figure out how far to the nearest quadword boundary, or if we are - on one already. - - r3 - return value (always) - r4 - current source addr - r5 - copy length - r6 - current dest addr - */ - - neg r8,r3 /* LS 4 bits = # bytes to 8-byte dest bdry */ - clrlwi r8,r8,32-4 /* align to 16byte boundary */ - sub r7,r4,r3 /* compute offset to src from dest */ - cmplwi cr0,r8,0 /* Were we aligned on a 16 byte bdy? */ - beq+ L(dst_aligned) - - - - /* Destination is not aligned on quadword boundary. Get us to one. - - r3 - return value (always) - r4 - current source addr - r5 - copy length - r6 - current dest addr - r7 - offset to src from dest - r8 - number of bytes to quadword boundary - */ - - mtcrf 0x01,r8 /* put #bytes to boundary into cr7 */ - subf r5,r8,r5 /* adjust remaining len */ - - bf cr7*4+3,1f - lbzx r0,r7,r6 /* copy 1 byte addr */ - stb r0,0(r6) - addi r6,r6,1 -1: - bf cr7*4+2,2f - lhzx r0,r7,r6 /* copy 2 byte addr */ - sth r0,0(r6) - addi r6,r6,2 -2: - bf cr7*4+1,4f - lwzx r0,r7,r6 /* copy 4 byte addr */ - stw r0,0(r6) - addi r6,r6,4 -4: - bf cr7*4+0,8f - lfdx r0,r7,r6 /* copy 8 byte addr */ - stfd r0,0(r6) - addi r6,r6,8 -8: - add r4,r7,r6 /* update src addr */ - - - - /* Dest is quadword aligned now. - - Lots of decisions to make. If we are copying less than a cache - line we won't be here long. If we are not on a cache line - boundary we need to get there. And then we need to figure out - how many cache lines ahead to pre-touch. - - r3 - return value (always) - r4 - current source addr - r5 - copy length - r6 - current dest addr - */ - - - .align 4 -L(dst_aligned): - - -#ifdef SHARED - mflr r0 -/* Establishes GOT addressability so we can load __cache_line_size - from static. This value was set from the aux vector during startup. */ - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,__cache_line_size-got_label@ha - lwz r9,__cache_line_size-got_label@l(r9) - mtlr r0 -#else -/* Load __cache_line_size from static. This value was set from the - aux vector during startup. */ - lis r9,__cache_line_size@ha - lwz r9,__cache_line_size@l(r9) -#endif - - cmplwi cr5, r9, 0 - bne+ cr5,L(cachelineset) - -/* __cache_line_size not set: generic byte copy without much optimization */ - andi. r0,r5,1 /* If length is odd copy one byte. */ - beq L(cachelinenotset_align) - lbz r7,0(r4) /* Read one byte from source. */ - addi r5,r5,-1 /* Update length. */ - addi r4,r4,1 /* Update source pointer address. */ - stb r7,0(r6) /* Store one byte on dest. */ - addi r6,r6,1 /* Update dest pointer address. */ -L(cachelinenotset_align): - cmpwi cr7,r5,0 /* If length is 0 return. */ - beqlr cr7 - ori r2,r2,0 /* Force a new dispatch group. */ -L(cachelinenotset_loop): - addic. r5,r5,-2 /* Update length. */ - lbz r7,0(r4) /* Load 2 bytes from source. */ - lbz r8,1(r4) - addi r4,r4,2 /* Update source pointer address. */ - stb r7,0(r6) /* Store 2 bytes on dest. */ - stb r8,1(r6) - addi r6,r6,2 /* Update dest pointer address. */ - bne L(cachelinenotset_loop) - blr - - -L(cachelineset): - - addi r10,r9,-1 - - cmpw cr5,r5,r10 /* Less than a cacheline to go? */ - - neg r7,r6 /* How far to next cacheline bdy? */ - - addi r6,r6,-8 /* prepare for stdu */ - cmpwi cr0,r9,128 - addi r4,r4,-8 /* prepare for ldu */ - - - ble+ cr5,L(lessthancacheline) - - beq- cr0,L(big_lines) /* 128 byte line code */ - - - - - /* More than a cacheline left to go, and using 64 byte cachelines */ - - clrlwi r7,r7,32-6 /* How far to next cacheline bdy? */ - - cmplwi cr6,r7,0 /* Are we on a cacheline bdy already? */ - - /* Reduce total len by what it takes to get to the next cache line */ - subf r5,r7,r5 - srwi r7,r7,4 /* How many qws to get to the line bdy? */ - - /* How many full cache lines to copy after getting to a line bdy? */ - srwi r10,r5,6 - - cmplwi r10,0 /* If no full cache lines to copy ... */ - li r11,0 /* number cachelines to copy with prefetch */ - beq L(nocacheprefetch) - - - /* We are here because we have at least one full cache line to copy, - and therefore some pre-touching to do. */ - - cmplwi r10,PREFETCH_AHEAD - li r12,64+8 /* prefetch distance */ - ble L(lessthanmaxprefetch) - - /* We can only do so much pre-fetching. R11 will have the count of - lines left to prefetch after the initial batch of prefetches - are executed. */ - - subi r11,r10,PREFETCH_AHEAD - li r10,PREFETCH_AHEAD - -L(lessthanmaxprefetch): - mtctr r10 - - /* At this point r10/ctr hold the number of lines to prefetch in this - initial batch, and r11 holds any remainder. */ - -L(prefetchSRC): - dcbt r12,r4 - addi r12,r12,64 - bdnz L(prefetchSRC) - - - /* Prefetching is done, or was not needed. - - cr6 - are we on a cacheline boundary already? - r7 - number of quadwords to the next cacheline boundary - */ - -L(nocacheprefetch): - mtctr r7 - - cmplwi cr1,r5,64 /* Less than a cache line to copy? */ - - /* How many bytes are left after we copy whatever full - cache lines we can get? */ - clrlwi r5,r5,32-6 - - beq cr6,L(cachelinealigned) - - - /* Copy quadwords up to the next cacheline boundary */ - -L(aligntocacheline): - lfd fp9,0x08(r4) - lfdu fp10,0x10(r4) - stfd fp9,0x08(r6) - stfdu fp10,0x10(r6) - bdnz L(aligntocacheline) - - - .align 4 -L(cachelinealigned): /* copy while cache lines */ - - blt- cr1,L(lessthancacheline) /* size <64 */ - -L(outerloop): - cmpwi r11,0 - mtctr r11 - beq- L(endloop) - - li r11,64*ZERO_AHEAD +8 /* DCBZ dist */ - - .align 4 - /* Copy whole cachelines, optimized by prefetching SRC cacheline */ -L(loop): /* Copy aligned body */ - dcbt r12,r4 /* PREFETCH SOURCE some cache lines ahead */ - lfd fp9, 0x08(r4) - dcbz r11,r6 - lfd fp10, 0x10(r4) - lfd fp11, 0x18(r4) - lfd fp12, 0x20(r4) - stfd fp9, 0x08(r6) - stfd fp10, 0x10(r6) - stfd fp11, 0x18(r6) - stfd fp12, 0x20(r6) - lfd fp9, 0x28(r4) - lfd fp10, 0x30(r4) - lfd fp11, 0x38(r4) - lfdu fp12, 0x40(r4) - stfd fp9, 0x28(r6) - stfd fp10, 0x30(r6) - stfd fp11, 0x38(r6) - stfdu fp12, 0x40(r6) - - bdnz L(loop) - - -L(endloop): - cmpwi r10,0 - beq- L(endloop2) - mtctr r10 - -L(loop2): /* Copy aligned body */ - lfd fp9, 0x08(r4) - lfd fp10, 0x10(r4) - lfd fp11, 0x18(r4) - lfd fp12, 0x20(r4) - stfd fp9, 0x08(r6) - stfd fp10, 0x10(r6) - stfd fp11, 0x18(r6) - stfd fp12, 0x20(r6) - lfd fp9, 0x28(r4) - lfd fp10, 0x30(r4) - lfd fp11, 0x38(r4) - lfdu fp12, 0x40(r4) - stfd fp9, 0x28(r6) - stfd fp10, 0x30(r6) - stfd fp11, 0x38(r6) - stfdu fp12, 0x40(r6) - - bdnz L(loop2) -L(endloop2): - - - .align 4 -L(lessthancacheline): /* Was there less than cache to do ? */ - cmplwi cr0,r5,16 - srwi r7,r5,4 /* divide size by 16 */ - blt- L(do_lt16) - mtctr r7 - -L(copy_remaining): - lfd fp9, 0x08(r4) - lfdu fp10, 0x10(r4) - stfd fp9, 0x08(r6) - stfdu fp10, 0x10(r6) - bdnz L(copy_remaining) - -L(do_lt16): /* less than 16 ? */ - cmplwi cr0,r5,0 /* copy remaining bytes (0-15) */ - beqlr+ /* no rest to copy */ - addi r4,r4,8 - addi r6,r6,8 - -L(shortcopy): /* SIMPLE COPY to handle size =< 15 bytes */ - mtcrf 0x01,r5 - sub r7,r4,r6 - bf- cr7*4+0,8f - lfdx fp9,r7,r6 /* copy 8 byte */ - stfd fp9,0(r6) - addi r6,r6,8 -8: - bf cr7*4+1,4f - lwzx r0,r7,r6 /* copy 4 byte */ - stw r0,0(r6) - addi r6,r6,4 -4: - bf cr7*4+2,2f - lhzx r0,r7,r6 /* copy 2 byte */ - sth r0,0(r6) - addi r6,r6,2 -2: - bf cr7*4+3,1f - lbzx r0,r7,r6 /* copy 1 byte */ - stb r0,0(r6) -1: - blr - - - - - - /* Similar to above, but for use with 128 byte lines. */ - - -L(big_lines): - - clrlwi r7,r7,32-7 /* How far to next cacheline bdy? */ - - cmplwi cr6,r7,0 /* Are we on a cacheline bdy already? */ - - /* Reduce total len by what it takes to get to the next cache line */ - subf r5,r7,r5 - srwi r7,r7,4 /* How many qw to get to the line bdy? */ - - /* How many full cache lines to copy after getting to a line bdy? */ - srwi r10,r5,7 - - cmplwi r10,0 /* If no full cache lines to copy ... */ - li r11,0 /* number cachelines to copy with prefetch */ - beq L(nocacheprefetch_128) - - - /* We are here because we have at least one full cache line to copy, - and therefore some pre-touching to do. */ - - cmplwi r10,PREFETCH_AHEAD - li r12,128+8 /* prefetch distance */ - ble L(lessthanmaxprefetch_128) - - /* We can only do so much pre-fetching. R11 will have the count of - lines left to prefetch after the initial batch of prefetches - are executed. */ - - subi r11,r10,PREFETCH_AHEAD - li r10,PREFETCH_AHEAD - -L(lessthanmaxprefetch_128): - mtctr r10 - - /* At this point r10/ctr hold the number of lines to prefetch in this - initial batch, and r11 holds any remainder. */ - -L(prefetchSRC_128): - dcbt r12,r4 - addi r12,r12,128 - bdnz L(prefetchSRC_128) - - - /* Prefetching is done, or was not needed. - - cr6 - are we on a cacheline boundary already? - r7 - number of quadwords to the next cacheline boundary - */ - -L(nocacheprefetch_128): - mtctr r7 - - cmplwi cr1,r5,128 /* Less than a cache line to copy? */ - - /* How many bytes are left after we copy whatever full - cache lines we can get? */ - clrlwi r5,r5,32-7 - - beq cr6,L(cachelinealigned_128) - - - /* Copy quadwords up to the next cacheline boundary */ - -L(aligntocacheline_128): - lfd fp9,0x08(r4) - lfdu fp10,0x10(r4) - stfd fp9,0x08(r6) - stfdu fp10,0x10(r6) - bdnz L(aligntocacheline_128) - - -L(cachelinealigned_128): /* copy while cache lines */ - - blt- cr1,L(lessthancacheline) /* size <128 */ - -L(outerloop_128): - cmpwi r11,0 - mtctr r11 - beq- L(endloop_128) - - li r11,128*ZERO_AHEAD +8 /* DCBZ dist */ - - .align 4 - /* Copy whole cachelines, optimized by prefetching SRC cacheline */ -L(loop_128): /* Copy aligned body */ - dcbt r12,r4 /* PREFETCH SOURCE some cache lines ahead */ - lfd fp9, 0x08(r4) - dcbz r11,r6 - lfd fp10, 0x10(r4) - lfd fp11, 0x18(r4) - lfd fp12, 0x20(r4) - stfd fp9, 0x08(r6) - stfd fp10, 0x10(r6) - stfd fp11, 0x18(r6) - stfd fp12, 0x20(r6) - lfd fp9, 0x28(r4) - lfd fp10, 0x30(r4) - lfd fp11, 0x38(r4) - lfd fp12, 0x40(r4) - stfd fp9, 0x28(r6) - stfd fp10, 0x30(r6) - stfd fp11, 0x38(r6) - stfd fp12, 0x40(r6) - lfd fp9, 0x48(r4) - lfd fp10, 0x50(r4) - lfd fp11, 0x58(r4) - lfd fp12, 0x60(r4) - stfd fp9, 0x48(r6) - stfd fp10, 0x50(r6) - stfd fp11, 0x58(r6) - stfd fp12, 0x60(r6) - lfd fp9, 0x68(r4) - lfd fp10, 0x70(r4) - lfd fp11, 0x78(r4) - lfdu fp12, 0x80(r4) - stfd fp9, 0x68(r6) - stfd fp10, 0x70(r6) - stfd fp11, 0x78(r6) - stfdu fp12, 0x80(r6) - - bdnz L(loop_128) - - -L(endloop_128): - cmpwi r10,0 - beq- L(endloop2_128) - mtctr r10 - -L(loop2_128): /* Copy aligned body */ - lfd fp9, 0x08(r4) - lfd fp10, 0x10(r4) - lfd fp11, 0x18(r4) - lfd fp12, 0x20(r4) - stfd fp9, 0x08(r6) - stfd fp10, 0x10(r6) - stfd fp11, 0x18(r6) - stfd fp12, 0x20(r6) - lfd fp9, 0x28(r4) - lfd fp10, 0x30(r4) - lfd fp11, 0x38(r4) - lfd fp12, 0x40(r4) - stfd fp9, 0x28(r6) - stfd fp10, 0x30(r6) - stfd fp11, 0x38(r6) - stfd fp12, 0x40(r6) - lfd fp9, 0x48(r4) - lfd fp10, 0x50(r4) - lfd fp11, 0x58(r4) - lfd fp12, 0x60(r4) - stfd fp9, 0x48(r6) - stfd fp10, 0x50(r6) - stfd fp11, 0x58(r6) - stfd fp12, 0x60(r6) - lfd fp9, 0x68(r4) - lfd fp10, 0x70(r4) - lfd fp11, 0x78(r4) - lfdu fp12, 0x80(r4) - stfd fp9, 0x68(r6) - stfd fp10, 0x70(r6) - stfd fp11, 0x78(r6) - stfdu fp12, 0x80(r6) - bdnz L(loop2_128) -L(endloop2_128): - - b L(lessthancacheline) - - -END (memcpy) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/powerpc/powerpc32/add_n.S b/sysdeps/powerpc/powerpc32/add_n.S deleted file mode 100644 index 0687be6236..0000000000 --- a/sysdeps/powerpc/powerpc32/add_n.S +++ /dev/null @@ -1,68 +0,0 @@ -/* Add two limb vectors of equal, non-zero length for PowerPC. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* mp_limb_t mpn_add_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr, - mp_size_t size) - Calculate s1+s2 and put result in res_ptr; return carry, 0 or 1. */ - -/* Note on optimisation: This code is optimal for the 601. Almost every other - possible 2-unrolled inner loop will not be. Also, watch out for the - alignment... */ - -EALIGN (__mpn_add_n, 3, 0) - -/* Set up for loop below. */ - mtcrf 0x01,r6 - srwi. r7,r6,1 - li r10,0 - mtctr r7 - bt 31,L(2) - -/* Clear the carry. */ - addic r0,r0,0 -/* Adjust pointers for loop. */ - addi r3,r3,-4 - addi r4,r4,-4 - addi r5,r5,-4 - b L(0) - -L(2): lwz r7,0(r5) - lwz r6,0(r4) - addc r6,r6,r7 - stw r6,0(r3) - beq L(1) - -/* The loop. */ - -/* Align start of loop to an odd word boundary to guarantee that the - last two words can be fetched in one access (for 601). */ -L(0): lwz r9,4(r4) - lwz r8,4(r5) - lwzu r6,8(r4) - lwzu r7,8(r5) - adde r8,r9,r8 - stw r8,4(r3) - adde r6,r6,r7 - stwu r6,8(r3) - bdnz L(0) -/* Return the carry. */ -L(1): addze r3,r10 - blr -END (__mpn_add_n) diff --git a/sysdeps/powerpc/powerpc32/addmul_1.S b/sysdeps/powerpc/powerpc32/addmul_1.S deleted file mode 100644 index f742be21b8..0000000000 --- a/sysdeps/powerpc/powerpc32/addmul_1.S +++ /dev/null @@ -1,48 +0,0 @@ -/* Multiply a limb vector by a single limb, for PowerPC. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* mp_limb_t mpn_addmul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr, - mp_size_t s1_size, mp_limb_t s2_limb) - Calculate res+s1*s2 and put result back in res; return carry. */ -ENTRY (__mpn_addmul_1) - mtctr r5 - - lwz r0,0(r4) - mullw r7,r0,r6 - mulhwu r10,r0,r6 - lwz r9,0(r3) - addc r8,r7,r9 - addi r3,r3,-4 /* adjust res_ptr */ - bdz L(1) - -L(0): lwzu r0,4(r4) - stwu r8,4(r3) - mullw r8,r0,r6 - adde r7,r8,r10 - mulhwu r10,r0,r6 - lwz r9,4(r3) - addze r10,r10 - addc r8,r7,r9 - bdnz L(0) - -L(1): stw r8,4(r3) - addze r3,r10 - blr -END (__mpn_addmul_1) diff --git a/sysdeps/powerpc/powerpc32/atomic-machine.h b/sysdeps/powerpc/powerpc32/atomic-machine.h deleted file mode 100644 index 96c7d81359..0000000000 --- a/sysdeps/powerpc/powerpc32/atomic-machine.h +++ /dev/null @@ -1,126 +0,0 @@ -/* Atomic operations. PowerPC32 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Paul Mackerras , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* POWER6 adds a "Mutex Hint" to the Load and Reserve instruction. - This is a hint to the hardware to expect additional updates adjacent - to the lock word or not. If we are acquiring a Mutex, the hint - should be true. Otherwise we releasing a Mutex or doing a simple - atomic operation. In that case we don't expect additional updates - adjacent to the lock word after the Store Conditional and the hint - should be false. */ - -#if defined _ARCH_PWR6 || defined _ARCH_PWR6X -# define MUTEX_HINT_ACQ ",1" -# define MUTEX_HINT_REL ",0" -#else -# define MUTEX_HINT_ACQ -# define MUTEX_HINT_REL -#endif - -#define __HAVE_64B_ATOMICS 0 -#define USE_ATOMIC_COMPILER_BUILTINS 0 -#define ATOMIC_EXCHANGE_USES_CAS 1 - -/* - * The 32-bit exchange_bool is different on powerpc64 because the subf - * does signed 64-bit arithmetic while the lwarx is 32-bit unsigned - * (a load word and zero (high 32) form). So powerpc64 has a slightly - * different version in sysdeps/powerpc/powerpc64/atomic-machine.h. - */ -#define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval) \ -({ \ - unsigned int __tmp; \ - __asm __volatile ( \ - "1: lwarx %0,0,%1" MUTEX_HINT_ACQ "\n" \ - " subf. %0,%2,%0\n" \ - " bne 2f\n" \ - " stwcx. %3,0,%1\n" \ - " bne- 1b\n" \ - "2: " __ARCH_ACQ_INSTR \ - : "=&r" (__tmp) \ - : "b" (mem), "r" (oldval), "r" (newval) \ - : "cr0", "memory"); \ - __tmp != 0; \ -}) - -/* Powerpc32 processors don't implement the 64-bit (doubleword) forms of - load and reserve (ldarx) and store conditional (stdcx.) instructions. - So for powerpc32 we stub out the 64-bit forms. */ -#define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \ - (abort (), 0) - -#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) - -#define __arch_compare_and_exchange_val_64_rel(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) - -#define __arch_atomic_exchange_64_acq(mem, value) \ - ({ abort (); (*mem) = (value); }) - -#define __arch_atomic_exchange_64_rel(mem, value) \ - ({ abort (); (*mem) = (value); }) - -#define __arch_atomic_exchange_and_add_64(mem, value) \ - ({ abort (); (*mem) = (value); }) - -#define __arch_atomic_exchange_and_add_64_acq(mem, value) \ - ({ abort (); (*mem) = (value); }) - -#define __arch_atomic_exchange_and_add_64_rel(mem, value) \ - ({ abort (); (*mem) = (value); }) - -#define __arch_atomic_increment_val_64(mem) \ - ({ abort (); (*mem)++; }) - -#define __arch_atomic_decrement_val_64(mem) \ - ({ abort (); (*mem)--; }) - -#define __arch_atomic_decrement_if_positive_64(mem) \ - ({ abort (); (*mem)--; }) - -#ifdef _ARCH_PWR4 -/* - * Newer powerpc64 processors support the new "light weight" sync (lwsync) - * So if the build is using -mcpu=[power4,power5,power5+,970] we can - * safely use lwsync. - */ -# define atomic_read_barrier() __asm ("lwsync" ::: "memory") -/* - * "light weight" sync can also be used for the release barrier. - */ -# ifndef UP -# define __ARCH_REL_INSTR "lwsync" -# endif -# define atomic_write_barrier() __asm ("lwsync" ::: "memory") -#else -/* - * Older powerpc32 processors don't support the new "light weight" - * sync (lwsync). So the only safe option is to use normal sync - * for all powerpc32 applications. - */ -# define atomic_read_barrier() __asm ("sync" ::: "memory") -# define atomic_write_barrier() __asm ("sync" ::: "memory") -#endif - -/* - * Include the rest of the atomic ops macros which are common to both - * powerpc32 and powerpc64. - */ -#include_next diff --git a/sysdeps/powerpc/powerpc32/backtrace.c b/sysdeps/powerpc/powerpc32/backtrace.c deleted file mode 100644 index 394062136c..0000000000 --- a/sysdeps/powerpc/powerpc32/backtrace.c +++ /dev/null @@ -1,131 +0,0 @@ -/* Return backtrace of current program state. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* This is the stack layout we see with every stack frame. - Note that every routine is required by the ABI to lay out the stack - like this. - - +----------------+ +-----------------+ - %r1 -> | %r1 last frame--------> | %r1 last frame--->... --> NULL - | | | | - | (unused) | | return address | - +----------------+ +-----------------+ -*/ -struct layout -{ - struct layout *next; - void *return_address; -}; - -#define SIGNAL_FRAMESIZE 64 - -/* Since the signal handler is just like any other function it needs to - save/restore its LR and it will save it into callers stack frame. - Since a signal handler doesn't have a caller, the kernel creates a - dummy frame to make it look like it has a caller. */ -struct signal_frame_32 { - char dummy[SIGNAL_FRAMESIZE]; - struct sigcontext sctx; - mcontext_t mctx; - /* We don't care about the rest, since IP value is at 'mctx' field. */ -}; - -static inline int -is_sigtramp_address (void *nip) -{ -#ifdef SHARED - if (nip == VDSO_SYMBOL (sigtramp32)) - return 1; -#endif - return 0; -} - -struct rt_signal_frame_32 { - char dummy[SIGNAL_FRAMESIZE + 16]; - siginfo_t info; - struct ucontext uc; - /* We don't care about the rest, since IP value is at 'uc' field. */ -}; - -static inline int -is_sigtramp_address_rt (void * nip) -{ -#ifdef SHARED - if (nip == VDSO_SYMBOL (sigtramp_rt32)) - return 1; -#endif - return 0; -} - -int -__backtrace (void **array, int size) -{ - struct layout *current; - int count; - - /* Force gcc to spill LR. */ - asm volatile ("" : "=l"(current)); - - /* Get the address on top-of-stack. */ - asm volatile ("lwz %0,0(1)" : "=r"(current)); - - for ( count = 0; - current != NULL && count < size; - current = current->next, count++) - { - gregset_t *gregset = NULL; - - array[count] = current->return_address; - - /* Check if the symbol is the signal trampoline and get the interrupted - * symbol address from the trampoline saved area. */ - if (is_sigtramp_address (current->return_address)) - { - struct signal_frame_32 *sigframe = - (struct signal_frame_32*) current; - gregset = &sigframe->mctx.gregs; - } - else if (is_sigtramp_address_rt (current->return_address)) - { - struct rt_signal_frame_32 *sigframe = - (struct rt_signal_frame_32*) current; - gregset = &sigframe->uc.uc_mcontext.uc_regs->gregs; - } - if (gregset) - { - array[++count] = (void*)((*gregset)[PT_NIP]); - current = (void*)((*gregset)[PT_R1]); - } - } - - /* It's possible the second-last stack frame can't return - (that is, it's __libc_start_main), in which case - the CRT startup code will have set its LR to 'NULL'. */ - if (count > 0 && array[count-1] == NULL) - count--; - - return count; -} -weak_alias (__backtrace, backtrace) -libc_hidden_def (__backtrace) diff --git a/sysdeps/powerpc/powerpc32/bits/wordsize.h b/sysdeps/powerpc/powerpc32/bits/wordsize.h deleted file mode 100644 index 04ca9debf0..0000000000 --- a/sysdeps/powerpc/powerpc32/bits/wordsize.h +++ /dev/null @@ -1,11 +0,0 @@ -/* Determine the wordsize from the preprocessor defines. */ - -#if defined __powerpc64__ -# define __WORDSIZE 64 -# define __WORDSIZE_TIME64_COMPAT32 1 -#else -# define __WORDSIZE 32 -# define __WORDSIZE_TIME64_COMPAT32 0 -# define __WORDSIZE32_SIZE_ULONG 0 -# define __WORDSIZE32_PTRDIFF_LONG 0 -#endif diff --git a/sysdeps/powerpc/powerpc32/bsd-_setjmp.S b/sysdeps/powerpc/powerpc32/bsd-_setjmp.S deleted file mode 100644 index 169766c304..0000000000 --- a/sysdeps/powerpc/powerpc32/bsd-_setjmp.S +++ /dev/null @@ -1,56 +0,0 @@ -/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. PowerPC32/64 version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ -#include -#include -#include - -#if !IS_IN (libc) -/* Build a non-versioned object for rtld-*. */ -ENTRY (_setjmp) - li r4,0 /* Set second argument to 0. */ - b __sigsetjmp@local -END (_setjmp) -libc_hidden_def (_setjmp) -#else -/* Build a versioned object for libc. */ - -# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) -compat_symbol (libc, __novmx_setjmp, _setjmp, GLIBC_2_0); - -ENTRY (__novmx_setjmp) - li r4,0 /* Set second argument to 0. */ - b __novmx__sigsetjmp@local -END (__novmx_setjmp) -libc_hidden_def (__novmx_setjmp) -# endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) */ - -versioned_symbol (libc, __vmx_setjmp, _setjmp, GLIBC_2_3_4) -/* __GI__setjmp prototype is needed for ntpl i.e. _setjmp is defined - as a libc_hidden_proto & is used in sysdeps/generic/libc-start.c - if HAVE_CLEANUP_JMP_BUF is defined */ -ENTRY (__GI__setjmp) - li r4,0 /* Set second argument to 0. */ - b __vmx__sigsetjmp@local -END (__GI__setjmp) - -ENTRY (__vmx_setjmp) - li r4,0 /* Set second argument to 0. */ - b __vmx__sigsetjmp@local -END (__vmx_setjmp) -libc_hidden_def (__vmx_setjmp) -#endif /* IS_IN (libc) */ diff --git a/sysdeps/powerpc/powerpc32/bsd-setjmp.S b/sysdeps/powerpc/powerpc32/bsd-setjmp.S deleted file mode 100644 index 212d6ce8b1..0000000000 --- a/sysdeps/powerpc/powerpc32/bsd-setjmp.S +++ /dev/null @@ -1,39 +0,0 @@ -/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. PowerPC32/64 version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ -#include -#include -#include - -#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) - -ENTRY (__novmxsetjmp) - li r4,1 /* Set second argument to 1. */ - b __novmx__sigsetjmp@local -END (__novmxsetjmp) -strong_alias (__novmxsetjmp, __novmx__setjmp) -compat_symbol (libc, __novmxsetjmp, setjmp, GLIBC_2_0) - -#endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) ) */ - -ENTRY (__vmxsetjmp) - li r4,1 /* Set second argument to 1. */ - b __vmx__sigsetjmp@local -END (__vmxsetjmp) -strong_alias (__vmxsetjmp, __vmx__setjmp) -strong_alias (__vmx__setjmp, __setjmp) -versioned_symbol (libc, __vmxsetjmp, setjmp, GLIBC_2_3_4) diff --git a/sysdeps/powerpc/powerpc32/bzero.S b/sysdeps/powerpc/powerpc32/bzero.S deleted file mode 100644 index 2638b12db0..0000000000 --- a/sysdeps/powerpc/powerpc32/bzero.S +++ /dev/null @@ -1,27 +0,0 @@ -/* Optimized bzero `implementation' for PowerPC. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__bzero) - - mr r5,r4 - li r4,0 - b memset@local -END (__bzero) -weak_alias (__bzero, bzero) diff --git a/sysdeps/powerpc/powerpc32/cell/memcpy.S b/sysdeps/powerpc/powerpc32/cell/memcpy.S deleted file mode 100644 index a7f761408a..0000000000 --- a/sysdeps/powerpc/powerpc32/cell/memcpy.S +++ /dev/null @@ -1,242 +0,0 @@ -/* Optimized memcpy implementation for CELL BE PowerPC. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define PREFETCH_AHEAD 6 /* no cache lines SRC prefetching ahead */ -#define ZERO_AHEAD 4 /* no cache lines DST zeroing ahead */ - -/* memcpy routine optimized for CELL-BE-PPC v2.0 - * - * The CELL PPC core has 1 integer unit and 1 load/store unit - * CELL: - * 1st level data cache = 32K - * 2nd level data cache = 512K - * 3rd level data cache = 0K - * With 3.2 GHz clockrate the latency to 2nd level cache is >36 clocks, - * latency to memory is >400 clocks - * To improve copy performance we need to prefetch source data - * far ahead to hide this latency - * For best performance instruction forms ending in "." like "andi." - * should be avoided as the are implemented in microcode on CELL. - * The below code is loop unrolled for the CELL cache line of 128 bytes - */ - -.align 7 - -EALIGN (memcpy, 5, 0) - CALL_MCOUNT - - dcbt 0,r4 /* Prefetch ONE SRC cacheline */ - cmplwi cr1,r5,16 /* is size < 16 ? */ - mr r6,r3 - blt+ cr1,.Lshortcopy - -.Lbigcopy: - neg r8,r3 /* LS 3 bits = # bytes to 8-byte dest bdry */ - clrlwi r8,r8,32-4 /* align to 16byte boundary */ - sub r7,r4,r3 - cmplwi cr0,r8,0 - beq+ .Ldst_aligned - -.Ldst_unaligned: - mtcrf 0x01,r8 /* put #bytes to boundary into cr7 */ - subf r5,r8,r5 - - bf cr7*4+3,1f - lbzx r0,r7,r6 /* copy 1 byte */ - stb r0,0(r6) - addi r6,r6,1 -1: bf cr7*4+2,2f - lhzx r0,r7,r6 /* copy 2 byte */ - sth r0,0(r6) - addi r6,r6,2 -2: bf cr7*4+1,4f - lwzx r0,r7,r6 /* copy 4 byte */ - stw r0,0(r6) - addi r6,r6,4 -4: bf cr7*4+0,8f - lfdx fp9,r7,r6 /* copy 8 byte */ - stfd fp9,0(r6) - addi r6,r6,8 -8: - add r4,r7,r6 - -.Ldst_aligned: - - cmpwi cr5,r5,128-1 - - neg r7,r6 - addi r6,r6,-8 /* prepare for stfdu */ - addi r4,r4,-8 /* prepare for lfdu */ - - clrlwi r7,r7,32-7 /* align to cacheline boundary */ - ble+ cr5,.Llessthancacheline - - cmplwi cr6,r7,0 - subf r5,r7,r5 - srwi r7,r7,4 /* divide size by 16 */ - srwi r10,r5,7 /* number of cache lines to copy */ - - cmplwi r10,0 - li r11,0 /* number cachelines to copy with prefetch */ - beq .Lnocacheprefetch - - cmplwi r10,PREFETCH_AHEAD - li r12,128+8 /* prefetch distance */ - ble .Llessthanmaxprefetch - - subi r11,r10,PREFETCH_AHEAD - li r10,PREFETCH_AHEAD - -.Llessthanmaxprefetch: - mtctr r10 - -.LprefetchSRC: - dcbt r12,r4 - addi r12,r12,128 - bdnz .LprefetchSRC - -.Lnocacheprefetch: - mtctr r7 - cmplwi cr1,r5,128 - clrlwi r5,r5,32-7 - beq cr6,.Lcachelinealigned - -.Laligntocacheline: - lfd fp9,0x08(r4) - lfdu fp10,0x10(r4) - stfd fp9,0x08(r6) - stfdu fp10,0x10(r6) - bdnz .Laligntocacheline - - -.Lcachelinealigned: /* copy while cache lines */ - - blt- cr1,.Llessthancacheline /* size <128 */ - -.Louterloop: - cmpwi r11,0 - mtctr r11 - beq- .Lendloop - - li r11,128*ZERO_AHEAD +8 /* DCBZ dist */ - -.align 4 - /* Copy whole cachelines, optimized by prefetching SRC cacheline */ -.Lloop: /* Copy aligned body */ - dcbt r12,r4 /* PREFETCH SOURCE some cache lines ahead */ - lfd fp9, 0x08(r4) - dcbz r11,r6 - lfd fp10, 0x10(r4) /* 4 register stride copy is optimal */ - lfd fp11, 0x18(r4) /* to hide 1st level cache latency. */ - lfd fp12, 0x20(r4) - stfd fp9, 0x08(r6) - stfd fp10, 0x10(r6) - stfd fp11, 0x18(r6) - stfd fp12, 0x20(r6) - lfd fp9, 0x28(r4) - lfd fp10, 0x30(r4) - lfd fp11, 0x38(r4) - lfd fp12, 0x40(r4) - stfd fp9, 0x28(r6) - stfd fp10, 0x30(r6) - stfd fp11, 0x38(r6) - stfd fp12, 0x40(r6) - lfd fp9, 0x48(r4) - lfd fp10, 0x50(r4) - lfd fp11, 0x58(r4) - lfd fp12, 0x60(r4) - stfd fp9, 0x48(r6) - stfd fp10, 0x50(r6) - stfd fp11, 0x58(r6) - stfd fp12, 0x60(r6) - lfd fp9, 0x68(r4) - lfd fp10, 0x70(r4) - lfd fp11, 0x78(r4) - lfdu fp12, 0x80(r4) - stfd fp9, 0x68(r6) - stfd fp10, 0x70(r6) - stfd fp11, 0x78(r6) - stfdu fp12, 0x80(r6) - - bdnz .Lloop - -.Lendloop: - cmpwi r10,0 - slwi r10,r10,2 /* adjust from 128 to 32 byte stride */ - beq- .Lendloop2 - mtctr r10 - -.Lloop2: /* Copy aligned body */ - lfd fp9, 0x08(r4) - lfd fp10, 0x10(r4) - lfd fp11, 0x18(r4) - lfdu fp12, 0x20(r4) - stfd fp9, 0x08(r6) - stfd fp10, 0x10(r6) - stfd fp11, 0x18(r6) - stfdu fp12, 0x20(r6) - - bdnz .Lloop2 -.Lendloop2: - -.Llessthancacheline: /* less than cache to do ? */ - cmplwi cr0,r5,16 - srwi r7,r5,4 /* divide size by 16 */ - blt- .Ldo_lt16 - mtctr r7 - -.Lcopy_remaining: - lfd fp9,0x08(r4) - lfdu fp10,0x10(r4) - stfd fp9,0x08(r6) - stfdu fp10,0x10(r6) - bdnz .Lcopy_remaining - -.Ldo_lt16: /* less than 16 ? */ - cmplwi cr0,r5,0 /* copy remaining bytes (0-15) */ - beqlr+ /* no rest to copy */ - addi r4,r4,8 - addi r6,r6,8 - -.Lshortcopy: /* SIMPLE COPY to handle size =< 15 bytes */ - mtcrf 0x01,r5 - sub r7,r4,r6 - bf- cr7*4+0,8f - lfdx fp9,r7,r6 /* copy 8 byte */ - stfd fp9,0(r6) - addi r6,r6,8 -8: - bf cr7*4+1,4f - lwzx r0,r7,r6 /* copy 4 byte */ - stw r0,0(r6) - addi r6,r6,4 -4: - bf cr7*4+2,2f - lhzx r0,r7,r6 /* copy 2 byte */ - sth r0,0(r6) - addi r6,r6,2 -2: - bf cr7*4+3,1f - lbzx r0,r7,r6 /* copy 1 byte */ - stb r0,0(r6) -1: blr - -END (memcpy) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/powerpc/powerpc32/compat-ppc-mcount.S b/sysdeps/powerpc/powerpc32/compat-ppc-mcount.S deleted file mode 100644 index 2a9cb24072..0000000000 --- a/sysdeps/powerpc/powerpc32/compat-ppc-mcount.S +++ /dev/null @@ -1,11 +0,0 @@ -#include - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_15) - - compat_text_section -# define _mcount __compat_mcount -# include "ppc-mcount.S" -# undef _mcount - -compat_symbol (libc, __compat_mcount, _mcount, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc32/configure b/sysdeps/powerpc/powerpc32/configure deleted file mode 100644 index 29cfd53e8b..0000000000 --- a/sysdeps/powerpc/powerpc32/configure +++ /dev/null @@ -1,29 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/powerpc/powerpc32. - -# See whether GCC uses -msecure-plt. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -msecure-plt by default" >&5 -$as_echo_n "checking for -msecure-plt by default... " >&6; } -if ${libc_cv_ppc_secure_plt+:} false; then : - $as_echo_n "(cached) " >&6 -else - echo 'int foo (void) { extern int bar; return bar; }' > conftest.c -libc_cv_ppc_secure_plt=no -if { ac_try='${CC-cc} -S $CFLAGS conftest.c -fpic -o conftest.s 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - if grep '_GLOBAL_OFFSET_TABLE_-.*@ha' conftest.s > /dev/null 2>&1; then - libc_cv_ppc_secure_plt=yes - fi -fi -rm -rf conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ppc_secure_plt" >&5 -$as_echo "$libc_cv_ppc_secure_plt" >&6; } -if test $libc_cv_ppc_secure_plt = yes; then - $as_echo "#define HAVE_PPC_SECURE_PLT 1" >>confdefs.h - -fi diff --git a/sysdeps/powerpc/powerpc32/configure.ac b/sysdeps/powerpc/powerpc32/configure.ac deleted file mode 100644 index 5d3a9b509d..0000000000 --- a/sysdeps/powerpc/powerpc32/configure.ac +++ /dev/null @@ -1,16 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/powerpc/powerpc32. - -# See whether GCC uses -msecure-plt. -AC_CACHE_CHECK(for -msecure-plt by default, libc_cv_ppc_secure_plt, [dnl -echo 'int foo (void) { extern int bar; return bar; }' > conftest.c -libc_cv_ppc_secure_plt=no -if AC_TRY_COMMAND(${CC-cc} -S $CFLAGS conftest.c -fpic -o conftest.s 1>&AS_MESSAGE_LOG_FD); then - if grep '_GLOBAL_OFFSET_TABLE_-.*@ha' conftest.s > /dev/null 2>&1; then - libc_cv_ppc_secure_plt=yes - fi -fi -rm -rf conftest*]) -if test $libc_cv_ppc_secure_plt = yes; then - AC_DEFINE(HAVE_PPC_SECURE_PLT) -fi diff --git a/sysdeps/powerpc/powerpc32/crti.S b/sysdeps/powerpc/powerpc32/crti.S deleted file mode 100644 index 50b02630c3..0000000000 --- a/sysdeps/powerpc/powerpc32/crti.S +++ /dev/null @@ -1,89 +0,0 @@ -/* Special .init and .fini section support for PowerPC. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - - .section .init,"ax",@progbits - .align 2 - .globl _init - .type _init, @function -_init: - stwu r1, -16(r1) - mflr r0 - stw r0, 20(r1) - stw r30, 8(r1) - SETUP_GOT_ACCESS (r30, .Lgot_label_i) - addis r30, r30, _GLOBAL_OFFSET_TABLE_-.Lgot_label_i@ha - addi r30, r30, _GLOBAL_OFFSET_TABLE_-.Lgot_label_i@l -#if PREINIT_FUNCTION_WEAK - lwz r0, PREINIT_FUNCTION@got(r30) - cmpwi cr7, r0, 0 - beq+ cr7, 1f - bl PREINIT_FUNCTION@plt -1: -#else - bl PREINIT_FUNCTION@local -#endif - - .section .fini,"ax",@progbits - .align 2 - .globl _fini - .type _fini, @function -_fini: - stwu r1, -16(r1) - mflr r0 - stw r0, 20(r1) - stw r30, 8(r1) - SETUP_GOT_ACCESS (r30, .Lgot_label_f) diff --git a/sysdeps/powerpc/powerpc32/crtn.S b/sysdeps/powerpc/powerpc32/crtn.S deleted file mode 100644 index 67be2950fe..0000000000 --- a/sysdeps/powerpc/powerpc32/crtn.S +++ /dev/null @@ -1,53 +0,0 @@ -/* Special .init and .fini section support for PowerPC. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - -#include - - .section .init,"ax",@progbits - lwz r0, 20(r1) - mtlr r0 - lwz r30, 8(r1) - addi r1, r1, 16 - blr - - .section .fini,"ax",@progbits - lwz r0, 20(r1) - mtlr r0 - lwz r30, 8(r1) - addi r1, r1, 16 - blr diff --git a/sysdeps/powerpc/powerpc32/dl-dtprocnum.h b/sysdeps/powerpc/powerpc32/dl-dtprocnum.h deleted file mode 100644 index 7fe2be7939..0000000000 --- a/sysdeps/powerpc/powerpc32/dl-dtprocnum.h +++ /dev/null @@ -1,3 +0,0 @@ -/* Number of extra dynamic section entries for this architecture. By - default there are none. */ -#define DT_THISPROCNUM DT_PPC_NUM diff --git a/sysdeps/powerpc/powerpc32/dl-irel.h b/sysdeps/powerpc/powerpc32/dl-irel.h deleted file mode 100644 index e5d6540ce4..0000000000 --- a/sysdeps/powerpc/powerpc32/dl-irel.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Machine-dependent ELF indirect relocation inline functions. - PowerPC version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_IREL_H -#define _DL_IREL_H - -#include -#include -#include - -#define ELF_MACHINE_IRELA 1 - -static inline Elf32_Addr -__attribute ((always_inline)) -elf_ifunc_invoke (Elf32_Addr addr) -{ - return ((Elf32_Addr (*) (unsigned long int)) (addr)) (GLRO(dl_hwcap)); -} - -static inline void -__attribute ((always_inline)) -elf_irela (const Elf32_Rela *reloc) -{ - unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - - if (__glibc_likely (r_type == R_PPC_IRELATIVE)) - { - Elf32_Addr *const reloc_addr = (void *) reloc->r_offset; - Elf32_Addr value = elf_ifunc_invoke(reloc->r_addend); - *reloc_addr = value; - } - else - __libc_fatal ("unexpected reloc type in static binary"); -} - -#endif /* dl-irel.h */ diff --git a/sysdeps/powerpc/powerpc32/dl-machine.c b/sysdeps/powerpc/powerpc32/dl-machine.c deleted file mode 100644 index 2d6a576552..0000000000 --- a/sysdeps/powerpc/powerpc32/dl-machine.c +++ /dev/null @@ -1,608 +0,0 @@ -/* Machine-dependent ELF dynamic relocation functions. PowerPC version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include <_itoa.h> - -/* The value __cache_line_size is defined in dl-sysdep.c and is initialised - by _dl_sysdep_start via DL_PLATFORM_INIT. */ -extern int __cache_line_size attribute_hidden; - - -/* Stuff for the PLT. */ -#define PLT_INITIAL_ENTRY_WORDS 18 -#define PLT_LONGBRANCH_ENTRY_WORDS 0 -#define PLT_TRAMPOLINE_ENTRY_WORDS 6 -#define PLT_DOUBLE_SIZE (1<<13) -#define PLT_ENTRY_START_WORDS(entry_number) \ - (PLT_INITIAL_ENTRY_WORDS + (entry_number)*2 \ - + ((entry_number) > PLT_DOUBLE_SIZE \ - ? ((entry_number) - PLT_DOUBLE_SIZE)*2 \ - : 0)) -#define PLT_DATA_START_WORDS(num_entries) PLT_ENTRY_START_WORDS(num_entries) - -/* Macros to build PowerPC opcode words. */ -#define OPCODE_ADDI(rd,ra,simm) \ - (0x38000000 | (rd) << 21 | (ra) << 16 | ((simm) & 0xffff)) -#define OPCODE_ADDIS(rd,ra,simm) \ - (0x3c000000 | (rd) << 21 | (ra) << 16 | ((simm) & 0xffff)) -#define OPCODE_ADD(rd,ra,rb) \ - (0x7c000214 | (rd) << 21 | (ra) << 16 | (rb) << 11) -#define OPCODE_B(target) (0x48000000 | ((target) & 0x03fffffc)) -#define OPCODE_BA(target) (0x48000002 | ((target) & 0x03fffffc)) -#define OPCODE_BCTR() 0x4e800420 -#define OPCODE_LWZ(rd,d,ra) \ - (0x80000000 | (rd) << 21 | (ra) << 16 | ((d) & 0xffff)) -#define OPCODE_LWZU(rd,d,ra) \ - (0x84000000 | (rd) << 21 | (ra) << 16 | ((d) & 0xffff)) -#define OPCODE_MTCTR(rd) (0x7C0903A6 | (rd) << 21) -#define OPCODE_RLWINM(ra,rs,sh,mb,me) \ - (0x54000000 | (rs) << 21 | (ra) << 16 | (sh) << 11 | (mb) << 6 | (me) << 1) - -#define OPCODE_LI(rd,simm) OPCODE_ADDI(rd,0,simm) -#define OPCODE_ADDIS_HI(rd,ra,value) \ - OPCODE_ADDIS(rd,ra,((value) + 0x8000) >> 16) -#define OPCODE_LIS_HI(rd,value) OPCODE_ADDIS_HI(rd,0,value) -#define OPCODE_SLWI(ra,rs,sh) OPCODE_RLWINM(ra,rs,sh,0,31-sh) - - -#define PPC_DCBST(where) asm volatile ("dcbst 0,%0" : : "r"(where) : "memory") -#define PPC_SYNC asm volatile ("sync" : : : "memory") -#define PPC_ISYNC asm volatile ("sync; isync" : : : "memory") -#define PPC_ICBI(where) asm volatile ("icbi 0,%0" : : "r"(where) : "memory") -#define PPC_DIE asm volatile ("tweq 0,0") - -/* Use this when you've modified some code, but it won't be in the - instruction fetch queue (or when it doesn't matter if it is). */ -#define MODIFIED_CODE_NOQUEUE(where) \ - do { PPC_DCBST(where); PPC_SYNC; PPC_ICBI(where); } while (0) -/* Use this when it might be in the instruction queue. */ -#define MODIFIED_CODE(where) \ - do { PPC_DCBST(where); PPC_SYNC; PPC_ICBI(where); PPC_ISYNC; } while (0) - - -/* The idea here is that to conform to the ABI, we are supposed to try - to load dynamic objects between 0x10000 (we actually use 0x40000 as - the lower bound, to increase the chance of a memory reference from - a null pointer giving a segfault) and the program's load address; - this may allow us to use a branch instruction in the PLT rather - than a computed jump. The address is only used as a preference for - mmap, so if we get it wrong the worst that happens is that it gets - mapped somewhere else. */ - -ElfW(Addr) -__elf_preferred_address (struct link_map *loader, size_t maplength, - ElfW(Addr) mapstartpref) -{ - ElfW(Addr) low, high; - struct link_map *l; - Lmid_t nsid; - - /* If the object has a preference, load it there! */ - if (mapstartpref != 0) - return mapstartpref; - - /* Otherwise, quickly look for a suitable gap between 0x3FFFF and - 0x70000000. 0x3FFFF is so that references off NULL pointers will - cause a segfault, 0x70000000 is just paranoia (it should always - be superseded by the program's load address). */ - low = 0x0003FFFF; - high = 0x70000000; - for (nsid = 0; nsid < DL_NNS; ++nsid) - for (l = GL(dl_ns)[nsid]._ns_loaded; l; l = l->l_next) - { - ElfW(Addr) mapstart, mapend; - mapstart = l->l_map_start & ~(GLRO(dl_pagesize) - 1); - mapend = l->l_map_end | (GLRO(dl_pagesize) - 1); - assert (mapend > mapstart); - - /* Prefer gaps below the main executable, note that l == - _dl_loaded does not work for static binaries loading - e.g. libnss_*.so. */ - if ((mapend >= high || l->l_type == lt_executable) - && high >= mapstart) - high = mapstart; - else if (mapend >= low && low >= mapstart) - low = mapend; - else if (high >= mapend && mapstart >= low) - { - if (high - mapend >= mapstart - low) - low = mapend; - else - high = mapstart; - } - } - - high -= 0x10000; /* Allow some room between objects. */ - maplength = (maplength | (GLRO(dl_pagesize) - 1)) + 1; - if (high <= low || high - low < maplength ) - return 0; - return high - maplength; /* Both high and maplength are page-aligned. */ -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. - Also install a small trampoline to be used by entries that have - been relocated to an address too far away for a single branch. */ - -/* There are many kinds of PLT entries: - - (1) A direct jump to the actual routine, either a relative or - absolute branch. These are set up in __elf_machine_fixup_plt. - - (2) Short lazy entries. These cover the first 8192 slots in - the PLT, and look like (where 'index' goes from 0 to 8191): - - li %r11, index*4 - b &plt[PLT_TRAMPOLINE_ENTRY_WORDS+1] - - (3) Short indirect jumps. These replace (2) when a direct jump - wouldn't reach. They look the same except that the branch - is 'b &plt[PLT_LONGBRANCH_ENTRY_WORDS]'. - - (4) Long lazy entries. These cover the slots when a short entry - won't fit ('index*4' overflows its field), and look like: - - lis %r11, %hi(index*4 + &plt[PLT_DATA_START_WORDS]) - lwzu %r12, %r11, %lo(index*4 + &plt[PLT_DATA_START_WORDS]) - b &plt[PLT_TRAMPOLINE_ENTRY_WORDS] - bctr - - (5) Long indirect jumps. These replace (4) when a direct jump - wouldn't reach. They look like: - - lis %r11, %hi(index*4 + &plt[PLT_DATA_START_WORDS]) - lwz %r12, %r11, %lo(index*4 + &plt[PLT_DATA_START_WORDS]) - mtctr %r12 - bctr - - (6) Long direct jumps. These are used when thread-safety is not - required. They look like: - - lis %r12, %hi(finaladdr) - addi %r12, %r12, %lo(finaladdr) - mtctr %r12 - bctr - - - The lazy entries, (2) and (4), are set up here in - __elf_machine_runtime_setup. (1), (3), and (5) are set up in - __elf_machine_fixup_plt. (1), (3), and (6) can also be constructed - in __process_machine_rela. - - The reason for the somewhat strange construction of the long - entries, (4) and (5), is that we need to ensure thread-safety. For - (1) and (3), this is obvious because only one instruction is - changed and the PPC architecture guarantees that aligned stores are - atomic. For (5), this is more tricky. When changing (4) to (5), - the `b' instruction is first changed to `mtctr'; this is safe - and is why the `lwzu' instruction is not just a simple `addi'. - Once this is done, and is visible to all processors, the `lwzu' can - safely be changed to a `lwz'. */ -int -__elf_machine_runtime_setup (struct link_map *map, int lazy, int profile) -{ - if (map->l_info[DT_JMPREL]) - { - Elf32_Word i; - Elf32_Word *plt = (Elf32_Word *) D_PTR (map, l_info[DT_PLTGOT]); - Elf32_Word num_plt_entries = (map->l_info[DT_PLTRELSZ]->d_un.d_val - / sizeof (Elf32_Rela)); - Elf32_Word rel_offset_words = PLT_DATA_START_WORDS (num_plt_entries); - Elf32_Word data_words = (Elf32_Word) (plt + rel_offset_words); - Elf32_Word size_modified; - - extern void _dl_runtime_resolve (void); - extern void _dl_prof_resolve (void); - - /* Convert the index in r11 into an actual address, and get the - word at that address. */ - plt[PLT_LONGBRANCH_ENTRY_WORDS] = OPCODE_ADDIS_HI (11, 11, data_words); - plt[PLT_LONGBRANCH_ENTRY_WORDS + 1] = OPCODE_LWZ (11, data_words, 11); - - /* Call the procedure at that address. */ - plt[PLT_LONGBRANCH_ENTRY_WORDS + 2] = OPCODE_MTCTR (11); - plt[PLT_LONGBRANCH_ENTRY_WORDS + 3] = OPCODE_BCTR (); - - if (lazy) - { - Elf32_Word *tramp = plt + PLT_TRAMPOLINE_ENTRY_WORDS; - Elf32_Word dlrr; - Elf32_Word offset; - -#ifndef PROF - dlrr = (Elf32_Word) (profile - ? _dl_prof_resolve - : _dl_runtime_resolve); - if (profile && GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), map)) - /* This is the object we are looking for. Say that we really - want profiling and the timers are started. */ - GL(dl_profile_map) = map; -#else - dlrr = (Elf32_Word) _dl_runtime_resolve; -#endif - - /* For the long entries, subtract off data_words. */ - tramp[0] = OPCODE_ADDIS_HI (11, 11, -data_words); - tramp[1] = OPCODE_ADDI (11, 11, -data_words); - - /* Multiply index of entry by 3 (in r11). */ - tramp[2] = OPCODE_SLWI (12, 11, 1); - tramp[3] = OPCODE_ADD (11, 12, 11); - if (dlrr <= 0x01fffffc || dlrr >= 0xfe000000) - { - /* Load address of link map in r12. */ - tramp[4] = OPCODE_LI (12, (Elf32_Word) map); - tramp[5] = OPCODE_ADDIS_HI (12, 12, (Elf32_Word) map); - - /* Call _dl_runtime_resolve. */ - tramp[6] = OPCODE_BA (dlrr); - } - else - { - /* Get address of _dl_runtime_resolve in CTR. */ - tramp[4] = OPCODE_LI (12, dlrr); - tramp[5] = OPCODE_ADDIS_HI (12, 12, dlrr); - tramp[6] = OPCODE_MTCTR (12); - - /* Load address of link map in r12. */ - tramp[7] = OPCODE_LI (12, (Elf32_Word) map); - tramp[8] = OPCODE_ADDIS_HI (12, 12, (Elf32_Word) map); - - /* Call _dl_runtime_resolve. */ - tramp[9] = OPCODE_BCTR (); - } - - /* Set up the lazy PLT entries. */ - offset = PLT_INITIAL_ENTRY_WORDS; - i = 0; - while (i < num_plt_entries && i < PLT_DOUBLE_SIZE) - { - plt[offset ] = OPCODE_LI (11, i * 4); - plt[offset+1] = OPCODE_B ((PLT_TRAMPOLINE_ENTRY_WORDS + 2 - - (offset+1)) - * 4); - i++; - offset += 2; - } - while (i < num_plt_entries) - { - plt[offset ] = OPCODE_LIS_HI (11, i * 4 + data_words); - plt[offset+1] = OPCODE_LWZU (12, i * 4 + data_words, 11); - plt[offset+2] = OPCODE_B ((PLT_TRAMPOLINE_ENTRY_WORDS - - (offset+2)) - * 4); - plt[offset+3] = OPCODE_BCTR (); - i++; - offset += 4; - } - } - - /* Now, we've modified code. We need to write the changes from - the data cache to a second-level unified cache, then make - sure that stale data in the instruction cache is removed. - (In a multiprocessor system, the effect is more complex.) - Most of the PLT shouldn't be in the instruction cache, but - there may be a little overlap at the start and the end. - - Assumes that dcbst and icbi apply to lines of 16 bytes or - more. Current known line sizes are 16, 32, and 128 bytes. - The following gets the __cache_line_size, when available. */ - - /* Default minimum 4 words per cache line. */ - int line_size_words = 4; - - if (lazy && __cache_line_size != 0) - /* Convert bytes to words. */ - line_size_words = __cache_line_size / 4; - - size_modified = lazy ? rel_offset_words : 6; - for (i = 0; i < size_modified; i += line_size_words) - PPC_DCBST (plt + i); - PPC_DCBST (plt + size_modified - 1); - PPC_SYNC; - - for (i = 0; i < size_modified; i += line_size_words) - PPC_ICBI (plt + i); - PPC_ICBI (plt + size_modified - 1); - PPC_ISYNC; - } - - return lazy; -} - -Elf32_Addr -__elf_machine_fixup_plt (struct link_map *map, - Elf32_Addr *reloc_addr, Elf32_Addr finaladdr) -{ - Elf32_Sword delta = finaladdr - (Elf32_Word) reloc_addr; - if (delta << 6 >> 6 == delta) - *reloc_addr = OPCODE_B (delta); - else if (finaladdr <= 0x01fffffc || finaladdr >= 0xfe000000) - *reloc_addr = OPCODE_BA (finaladdr); - else - { - Elf32_Word *plt, *data_words; - Elf32_Word index, offset, num_plt_entries; - - num_plt_entries = (map->l_info[DT_PLTRELSZ]->d_un.d_val - / sizeof(Elf32_Rela)); - plt = (Elf32_Word *) D_PTR (map, l_info[DT_PLTGOT]); - offset = reloc_addr - plt; - index = (offset - PLT_INITIAL_ENTRY_WORDS)/2; - data_words = plt + PLT_DATA_START_WORDS (num_plt_entries); - - reloc_addr += 1; - - if (index < PLT_DOUBLE_SIZE) - { - data_words[index] = finaladdr; - PPC_SYNC; - *reloc_addr = OPCODE_B ((PLT_LONGBRANCH_ENTRY_WORDS - (offset+1)) - * 4); - } - else - { - index -= (index - PLT_DOUBLE_SIZE)/2; - - data_words[index] = finaladdr; - PPC_SYNC; - - reloc_addr[1] = OPCODE_MTCTR (12); - MODIFIED_CODE_NOQUEUE (reloc_addr + 1); - PPC_SYNC; - - reloc_addr[0] = OPCODE_LWZ (12, - (Elf32_Word) (data_words + index), 11); - } - } - MODIFIED_CODE (reloc_addr); - return finaladdr; -} - -void -_dl_reloc_overflow (struct link_map *map, - const char *name, - Elf32_Addr *const reloc_addr, - const Elf32_Sym *refsym) -{ - char buffer[128]; - char *t; - t = stpcpy (buffer, name); - t = stpcpy (t, " relocation at 0x00000000"); - _itoa_word ((unsigned) reloc_addr, t, 16, 0); - if (refsym) - { - const char *strtab; - - strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - t = stpcpy (t, " for symbol `"); - t = stpcpy (t, strtab + refsym->st_name); - t = stpcpy (t, "'"); - } - t = stpcpy (t, " out of range"); - _dl_signal_error (0, map->l_name, NULL, buffer); -} - -void -__process_machine_rela (struct link_map *map, - const Elf32_Rela *reloc, - struct link_map *sym_map, - const Elf32_Sym *sym, - const Elf32_Sym *refsym, - Elf32_Addr *const reloc_addr, - Elf32_Addr const finaladdr, - int rinfo) -{ - union unaligned - { - uint16_t u2; - uint32_t u4; - } __attribute__((__packed__)); - - switch (rinfo) - { - case R_PPC_NONE: - return; - - case R_PPC_ADDR32: - case R_PPC_GLOB_DAT: - case R_PPC_RELATIVE: - *reloc_addr = finaladdr; - return; - - case R_PPC_IRELATIVE: - *reloc_addr = ((Elf32_Addr (*) (void)) finaladdr) (); - return; - - case R_PPC_UADDR32: - ((union unaligned *) reloc_addr)->u4 = finaladdr; - break; - - case R_PPC_ADDR24: - if (__glibc_unlikely (finaladdr > 0x01fffffc && finaladdr < 0xfe000000)) - _dl_reloc_overflow (map, "R_PPC_ADDR24", reloc_addr, refsym); - *reloc_addr = (*reloc_addr & 0xfc000003) | (finaladdr & 0x3fffffc); - break; - - case R_PPC_ADDR16: - if (__glibc_unlikely (finaladdr > 0x7fff && finaladdr < 0xffff8000)) - _dl_reloc_overflow (map, "R_PPC_ADDR16", reloc_addr, refsym); - *(Elf32_Half*) reloc_addr = finaladdr; - break; - - case R_PPC_UADDR16: - if (__glibc_unlikely (finaladdr > 0x7fff && finaladdr < 0xffff8000)) - _dl_reloc_overflow (map, "R_PPC_UADDR16", reloc_addr, refsym); - ((union unaligned *) reloc_addr)->u2 = finaladdr; - break; - - case R_PPC_ADDR16_LO: - *(Elf32_Half*) reloc_addr = finaladdr; - break; - - case R_PPC_ADDR16_HI: - *(Elf32_Half*) reloc_addr = finaladdr >> 16; - break; - - case R_PPC_ADDR16_HA: - *(Elf32_Half*) reloc_addr = (finaladdr + 0x8000) >> 16; - break; - - case R_PPC_ADDR14: - case R_PPC_ADDR14_BRTAKEN: - case R_PPC_ADDR14_BRNTAKEN: - if (__glibc_unlikely (finaladdr > 0x7fff && finaladdr < 0xffff8000)) - _dl_reloc_overflow (map, "R_PPC_ADDR14", reloc_addr, refsym); - *reloc_addr = (*reloc_addr & 0xffff0003) | (finaladdr & 0xfffc); - if (rinfo != R_PPC_ADDR14) - *reloc_addr = ((*reloc_addr & 0xffdfffff) - | ((rinfo == R_PPC_ADDR14_BRTAKEN) - ^ (finaladdr >> 31)) << 21); - break; - - case R_PPC_REL24: - { - Elf32_Sword delta = finaladdr - (Elf32_Word) reloc_addr; - if (delta << 6 >> 6 != delta) - _dl_reloc_overflow (map, "R_PPC_REL24", reloc_addr, refsym); - *reloc_addr = (*reloc_addr & 0xfc000003) | (delta & 0x3fffffc); - } - break; - - case R_PPC_COPY: - if (sym == NULL) - /* This can happen in trace mode when an object could not be - found. */ - return; - if (sym->st_size > refsym->st_size - || (GLRO(dl_verbose) && sym->st_size < refsym->st_size)) - { - const char *strtab; - - strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr, (char *) finaladdr, MIN (sym->st_size, - refsym->st_size)); - return; - - case R_PPC_REL32: - *reloc_addr = finaladdr - (Elf32_Word) reloc_addr; - return; - - case R_PPC_JMP_SLOT: - /* It used to be that elf_machine_fixup_plt was used here, - but that doesn't work when ld.so relocates itself - for the second time. On the bright side, there's - no need to worry about thread-safety here. */ - { - Elf32_Sword delta = finaladdr - (Elf32_Word) reloc_addr; - if (delta << 6 >> 6 == delta) - *reloc_addr = OPCODE_B (delta); - else if (finaladdr <= 0x01fffffc || finaladdr >= 0xfe000000) - *reloc_addr = OPCODE_BA (finaladdr); - else - { - Elf32_Word *plt, *data_words; - Elf32_Word index, offset, num_plt_entries; - - plt = (Elf32_Word *) D_PTR (map, l_info[DT_PLTGOT]); - offset = reloc_addr - plt; - - if (offset < PLT_DOUBLE_SIZE*2 + PLT_INITIAL_ENTRY_WORDS) - { - index = (offset - PLT_INITIAL_ENTRY_WORDS)/2; - num_plt_entries = (map->l_info[DT_PLTRELSZ]->d_un.d_val - / sizeof(Elf32_Rela)); - data_words = plt + PLT_DATA_START_WORDS (num_plt_entries); - data_words[index] = finaladdr; - reloc_addr[0] = OPCODE_LI (11, index * 4); - reloc_addr[1] = OPCODE_B ((PLT_LONGBRANCH_ENTRY_WORDS - - (offset+1)) - * 4); - MODIFIED_CODE_NOQUEUE (reloc_addr + 1); - } - else - { - reloc_addr[0] = OPCODE_LIS_HI (12, finaladdr); - reloc_addr[1] = OPCODE_ADDI (12, 12, finaladdr); - reloc_addr[2] = OPCODE_MTCTR (12); - reloc_addr[3] = OPCODE_BCTR (); - MODIFIED_CODE_NOQUEUE (reloc_addr + 3); - } - } - } - break; - -#define DO_TLS_RELOC(suffix) \ - case R_PPC_DTPREL##suffix: \ - /* During relocation all TLS symbols are defined and used. \ - Therefore the offset is already correct. */ \ - if (sym_map != NULL) \ - do_reloc##suffix ("R_PPC_DTPREL"#suffix, \ - TLS_DTPREL_VALUE (sym, reloc)); \ - break; \ - case R_PPC_TPREL##suffix: \ - if (sym_map != NULL) \ - { \ - CHECK_STATIC_TLS (map, sym_map); \ - do_reloc##suffix ("R_PPC_TPREL"#suffix, \ - TLS_TPREL_VALUE (sym_map, sym, reloc)); \ - } \ - break; - - inline void do_reloc16 (const char *r_name, Elf32_Addr value) - { - if (__glibc_unlikely (value > 0x7fff && value < 0xffff8000)) - _dl_reloc_overflow (map, r_name, reloc_addr, refsym); - *(Elf32_Half *) reloc_addr = value; - } - inline void do_reloc16_LO (const char *r_name, Elf32_Addr value) - { - *(Elf32_Half *) reloc_addr = value; - } - inline void do_reloc16_HI (const char *r_name, Elf32_Addr value) - { - *(Elf32_Half *) reloc_addr = value >> 16; - } - inline void do_reloc16_HA (const char *r_name, Elf32_Addr value) - { - *(Elf32_Half *) reloc_addr = (value + 0x8000) >> 16; - } - DO_TLS_RELOC (16) - DO_TLS_RELOC (16_LO) - DO_TLS_RELOC (16_HI) - DO_TLS_RELOC (16_HA) - - default: - _dl_reloc_bad_type (map, rinfo, 0); - return; - } - - MODIFIED_CODE_NOQUEUE (reloc_addr); -} diff --git a/sysdeps/powerpc/powerpc32/dl-machine.h b/sysdeps/powerpc/powerpc32/dl-machine.h deleted file mode 100644 index 28eb50f92d..0000000000 --- a/sysdeps/powerpc/powerpc32/dl-machine.h +++ /dev/null @@ -1,455 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. PowerPC version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "powerpc" - -#include -#include -#include -#include - -/* Translate a processor specific dynamic tag to the index - in l_info array. */ -#define DT_PPC(x) (DT_PPC_##x - DT_LOPROC + DT_NUM) - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf32_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_PPC; -} - -/* Return the value of the GOT pointer. */ -static inline Elf32_Addr * __attribute__ ((const)) -ppc_got (void) -{ - Elf32_Addr *got; - - asm ("bcl 20,31,1f\n" - "1: mflr %0\n" - " addis %0,%0,_GLOBAL_OFFSET_TABLE_-1b@ha\n" - " addi %0,%0,_GLOBAL_OFFSET_TABLE_-1b@l\n" - : "=b" (got) : : "lr"); - - return got; -} - -/* Return the link-time address of _DYNAMIC, stored as - the first value in the GOT. */ -static inline Elf32_Addr __attribute__ ((const)) -elf_machine_dynamic (void) -{ - return *ppc_got (); -} - -/* Return the run-time load address of the shared object. */ -static inline Elf32_Addr __attribute__ ((const)) -elf_machine_load_address (void) -{ - Elf32_Addr *branchaddr; - Elf32_Addr runtime_dynamic; - - /* This is much harder than you'd expect. Possibly I'm missing something. - The 'obvious' way: - - Apparently, "bcl 20,31,$+4" is what should be used to load LR - with the address of the next instruction. - I think this is so that machines that do bl/blr pairing don't - get confused. - - asm ("bcl 20,31,0f ;" - "0: mflr 0 ;" - "lis %0,0b@ha;" - "addi %0,%0,0b@l;" - "subf %0,%0,0" - : "=b" (addr) : : "r0", "lr"); - - doesn't work, because the linker doesn't have to (and in fact doesn't) - update the @ha and @l references; the loader (which runs after this - code) will do that. - - Instead, we use the following trick: - - The linker puts the _link-time_ address of _DYNAMIC at the first - word in the GOT. We could branch to that address, if we wanted, - by using an @local reloc; the linker works this out, so it's safe - to use now. We can't, of course, actually branch there, because - we'd cause an illegal instruction exception; so we need to compute - the address ourselves. That gives us the following code: */ - - /* Get address of the 'b _DYNAMIC@local'... */ - asm ("bcl 20,31,0f;" - "b _DYNAMIC@local;" - "0:" - : "=l" (branchaddr)); - - /* So now work out the difference between where the branch actually points, - and the offset of that location in memory from the start of the file. */ - runtime_dynamic = ((Elf32_Addr) branchaddr - + ((Elf32_Sword) (*branchaddr << 6 & 0xffffff00) >> 6)); - - return runtime_dynamic - elf_machine_dynamic (); -} - -#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) /* nothing */ - -/* The PLT uses Elf32_Rela relocs. */ -#define elf_machine_relplt elf_machine_rela - -/* Mask identifying addresses reserved for the user program, - where the dynamic linker should not map anything. */ -#define ELF_MACHINE_USER_ADDRESS_MASK 0xf0000000UL - -/* The actual _start code is in dl-start.S. Use a really - ugly bit of assembler to let dl-start.o see _dl_start. */ -#define RTLD_START asm (".globl _dl_start"); - -/* Decide where a relocatable object should be loaded. */ -extern ElfW(Addr) -__elf_preferred_address(struct link_map *loader, size_t maplength, - ElfW(Addr) mapstartpref); -#define ELF_PREFERRED_ADDRESS(loader, maplength, mapstartpref) \ - __elf_preferred_address (loader, maplength, mapstartpref) - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so - PLT entries should not be allowed to define the value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. */ -/* We never want to use a PLT entry as the destination of a - reloc, when what is being relocated is a branch. This is - partly for efficiency, but mostly so we avoid loops. */ -#define elf_machine_type_class(type) \ - ((((type) == R_PPC_JMP_SLOT \ - || (type) == R_PPC_REL24 \ - || ((type) >= R_PPC_DTPMOD32 /* contiguous TLS */ \ - && (type) <= R_PPC_DTPREL32) \ - || (type) == R_PPC_ADDR24) * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_PPC_COPY) * ELF_RTYPE_CLASS_COPY)) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_PPC_JMP_SLOT - -/* The PowerPC never uses REL relocations. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -/* We define an initialization function to initialize HWCAP/HWCAP2 and - platform data so it can be copied into the TCB later. This is called - very early in _dl_sysdep_start for dynamically linked binaries. */ -#ifdef SHARED -# define DL_PLATFORM_INIT dl_platform_init () - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ - __tcb_parse_hwcap_and_convert_at_platform (); -} -#endif - -/* Set up the loaded object described by MAP so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. - Also install a small trampoline to be used by entries that have - been relocated to an address too far away for a single branch. */ -extern int __elf_machine_runtime_setup (struct link_map *map, - int lazy, int profile); - -static inline int -elf_machine_runtime_setup (struct link_map *map, - int lazy, int profile) -{ - if (map->l_info[DT_JMPREL] == 0) - return lazy; - - if (map->l_info[DT_PPC(GOT)] == 0) - /* Handle old style PLT. */ - return __elf_machine_runtime_setup (map, lazy, profile); - - /* New style non-exec PLT consisting of an array of addresses. */ - map->l_info[DT_PPC(GOT)]->d_un.d_ptr += map->l_addr; - if (lazy) - { - Elf32_Addr *plt, *got, glink; - Elf32_Word num_plt_entries; - void (*dlrr) (void); - extern void _dl_runtime_resolve (void); - extern void _dl_prof_resolve (void); - - if (__glibc_likely (!profile)) - dlrr = _dl_runtime_resolve; - else - { - if (GLRO(dl_profile) != NULL - &&_dl_name_match_p (GLRO(dl_profile), map)) - GL(dl_profile_map) = map; - dlrr = _dl_prof_resolve; - } - got = (Elf32_Addr *) map->l_info[DT_PPC(GOT)]->d_un.d_ptr; - glink = got[1]; - got[1] = (Elf32_Addr) dlrr; - got[2] = (Elf32_Addr) map; - - /* Relocate everything in .plt by the load address offset. */ - plt = (Elf32_Addr *) D_PTR (map, l_info[DT_PLTGOT]); - num_plt_entries = (map->l_info[DT_PLTRELSZ]->d_un.d_val - / sizeof (Elf32_Rela)); - - /* If a library is prelinked but we have to relocate anyway, - we have to be able to undo the prelinking of .plt section. - The prelinker saved us at got[1] address of .glink - section's start. */ - if (glink) - { - glink += map->l_addr; - while (num_plt_entries-- != 0) - *plt++ = glink, glink += 4; - } - else - while (num_plt_entries-- != 0) - *plt++ += map->l_addr; - } - return lazy; -} - -/* Change the PLT entry whose reloc is 'reloc' to call the actual routine. */ -extern Elf32_Addr __elf_machine_fixup_plt (struct link_map *map, - Elf32_Addr *reloc_addr, - Elf32_Addr finaladdr); - -static inline Elf32_Addr -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf32_Rela *reloc, - Elf32_Addr *reloc_addr, Elf64_Addr finaladdr) -{ - if (map->l_info[DT_PPC(GOT)] == 0) - /* Handle old style PLT. */ - return __elf_machine_fixup_plt (map, reloc_addr, finaladdr); - - *reloc_addr = finaladdr; - return finaladdr; -} - -/* Return the final value of a plt relocation. */ -static inline Elf32_Addr -elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, - Elf32_Addr value) -{ - return value + reloc->r_addend; -} - - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER ppc32_gnu_pltenter -#define ARCH_LA_PLTEXIT ppc32_gnu_pltexit - -#endif /* dl_machine_h */ - -#ifdef RESOLVE_MAP - -/* Do the actual processing of a reloc, once its target address - has been determined. */ -extern void __process_machine_rela (struct link_map *map, - const Elf32_Rela *reloc, - struct link_map *sym_map, - const Elf32_Sym *sym, - const Elf32_Sym *refsym, - Elf32_Addr *const reloc_addr, - Elf32_Addr finaladdr, - int rinfo) attribute_hidden; - -/* Call _dl_signal_error when a resolved value overflows a relocated area. */ -extern void _dl_reloc_overflow (struct link_map *map, - const char *name, - Elf32_Addr *const reloc_addr, - const Elf32_Sym *refsym) attribute_hidden; - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - LOADADDR is the load address of the object; INFO is an array indexed - by DT_* of the .dynamic section info. */ - -auto inline void __attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, - const Elf32_Sym *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - const Elf32_Sym *const refsym = sym; - Elf32_Addr value; - const int r_type = ELF32_R_TYPE (reloc->r_info); - struct link_map *sym_map = NULL; - -#ifndef RESOLVE_CONFLICT_FIND_MAP - if (r_type == R_PPC_RELATIVE) - { - *reloc_addr = map->l_addr + reloc->r_addend; - return; - } - - if (__glibc_unlikely (r_type == R_PPC_NONE)) - return; - - /* binutils on ppc32 includes st_value in r_addend for relocations - against local symbols. */ - if (__builtin_expect (ELF32_ST_BIND (sym->st_info) == STB_LOCAL, 0) - && sym->st_shndx != SHN_UNDEF) - value = map->l_addr; - else - { - sym_map = RESOLVE_MAP (&sym, version, r_type); - value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; - } - value += reloc->r_addend; -#else - value = reloc->r_addend; -#endif - - if (sym != NULL - && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0) - && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) - && __builtin_expect (!skip_ifunc, 1)) - value = elf_ifunc_invoke (value); - - /* A small amount of code is duplicated here for speed. In libc, - more than 90% of the relocs are R_PPC_RELATIVE; in the X11 shared - libraries, 60% are R_PPC_RELATIVE, 24% are R_PPC_GLOB_DAT or - R_PPC_ADDR32, and 16% are R_PPC_JMP_SLOT (which this routine - wouldn't usually handle). As an bonus, doing this here allows - the switch statement in __process_machine_rela to work. */ - switch (r_type) - { - case R_PPC_GLOB_DAT: - case R_PPC_ADDR32: - *reloc_addr = value; - break; - -#ifndef RESOLVE_CONFLICT_FIND_MAP -# ifdef RTLD_BOOTSTRAP -# define NOT_BOOTSTRAP 0 -# else -# define NOT_BOOTSTRAP 1 -# endif - - case R_PPC_DTPMOD32: - if (map->l_info[DT_PPC(OPT)] - && (map->l_info[DT_PPC(OPT)]->d_un.d_val & PPC_OPT_TLS)) - { - if (!NOT_BOOTSTRAP) - { - reloc_addr[0] = 0; - reloc_addr[1] = (sym_map->l_tls_offset - TLS_TP_OFFSET - + TLS_DTV_OFFSET); - break; - } - else if (sym_map != NULL) - { -# ifndef SHARED - CHECK_STATIC_TLS (map, sym_map); -# else - if (TRY_STATIC_TLS (map, sym_map)) -# endif - { - reloc_addr[0] = 0; - /* Set up for local dynamic. */ - reloc_addr[1] = (sym_map->l_tls_offset - TLS_TP_OFFSET - + TLS_DTV_OFFSET); - break; - } - } - } - if (!NOT_BOOTSTRAP) - /* During startup the dynamic linker is always index 1. */ - *reloc_addr = 1; - else if (sym_map != NULL) - /* Get the information from the link map returned by the - RESOLVE_MAP function. */ - *reloc_addr = sym_map->l_tls_modid; - break; - case R_PPC_DTPREL32: - if (map->l_info[DT_PPC(OPT)] - && (map->l_info[DT_PPC(OPT)]->d_un.d_val & PPC_OPT_TLS)) - { - if (!NOT_BOOTSTRAP) - { - *reloc_addr = TLS_TPREL_VALUE (sym_map, sym, reloc); - break; - } - else if (sym_map != NULL) - { - /* This reloc is always preceded by R_PPC_DTPMOD32. */ -# ifndef SHARED - assert (HAVE_STATIC_TLS (map, sym_map)); -# else - if (HAVE_STATIC_TLS (map, sym_map)) -# endif - { - *reloc_addr = TLS_TPREL_VALUE (sym_map, sym, reloc); - break; - } - } - } - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ - if (NOT_BOOTSTRAP && sym_map != NULL) - *reloc_addr = TLS_DTPREL_VALUE (sym, reloc); - break; - case R_PPC_TPREL32: - if (!NOT_BOOTSTRAP || sym_map != NULL) - { - if (NOT_BOOTSTRAP) - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = TLS_TPREL_VALUE (sym_map, sym, reloc); - } - break; -#endif - - case R_PPC_JMP_SLOT: -#ifdef RESOLVE_CONFLICT_FIND_MAP - RESOLVE_CONFLICT_FIND_MAP (map, reloc_addr); -#endif - if (map->l_info[DT_PPC(GOT)] != 0) - { - *reloc_addr = value; - break; - } - /* FALLTHROUGH */ - - default: - __process_machine_rela (map, reloc, sym_map, sym, refsym, - reloc_addr, value, r_type); - } -} - -auto inline void __attribute__ ((always_inline)) -elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, - void *const reloc_addr_arg) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - *reloc_addr = l_addr + reloc->r_addend; -} - -auto inline void __attribute__ ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf32_Addr l_addr, const Elf32_Rela *reloc, - int skip_ifunc) -{ - /* elf_machine_runtime_setup handles this. */ -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/powerpc/powerpc32/dl-start.S b/sysdeps/powerpc/powerpc32/dl-start.S deleted file mode 100644 index ab429567aa..0000000000 --- a/sysdeps/powerpc/powerpc32/dl-start.S +++ /dev/null @@ -1,103 +0,0 @@ -/* Machine-dependent ELF startup code. PowerPC version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ -ENTRY(_start) -/* We start with the following on the stack, from top: - argc (4 bytes); - arguments for program (terminated by NULL); - environment variables (terminated by NULL); - arguments for the program loader. */ - -/* Call _dl_start with one parameter pointing at argc */ - mr r3,r1 -/* (we have to frob the stack pointer a bit to allow room for - _dl_start to save the link register). */ - li r4,0 - addi r1,r1,-16 - stw r4,0(r1) - bl _dl_start@local - - /* FALLTHRU */ -_dl_start_user: -/* Now, we do our main work of calling initialisation procedures. - The ELF ABI doesn't say anything about parameters for these, - so we just pass argc, argv, and the environment. - Changing these is strongly discouraged (not least because argc is - passed by value!). */ - -/* Put our GOT pointer in r31, */ - SETUP_GOT_ACCESS(r31,got_label) - addis r31,r31,_GLOBAL_OFFSET_TABLE_-got_label@ha - addi r31,r31,_GLOBAL_OFFSET_TABLE_-got_label@l -/* the address of _start in r30, */ - mr r30,r3 -/* &_dl_argc in 29, &_dl_argv in 27, and _dl_loaded in 28. */ - lwz r28,_rtld_local@got(r31) - lwz r29,_dl_argc@got(r31) - lwz r27,__GI__dl_argv@got(r31) - -/* Call _dl_init (_dl_loaded, _dl_argc, _dl_argv, _dl_argv+_dl_argc+1). */ - lwz r3,0(r28) - lwz r4,0(r29) - lwz r5,0(r27) - slwi r6,r4,2 - add r6,r5,r6 - addi r6,r6,4 - bl _dl_init@local - -/* Now, to conform to the ELF ABI, we have to: */ -/* Pass argc (actually _dl_argc) in r3; */ - lwz r3,0(r29) -/* pass argv (actually _dl_argv) in r4; */ - lwz r4,0(r27) -/* pass envp (actually _dl_argv+_dl_argc+1) in r5; */ - slwi r5,r3,2 - add r6,r4,r5 - addi r5,r6,4 -/* pass the auxiliary vector in r6. This is passed to us just after _envp. */ -2: lwzu r0,4(r6) - cmpwi r0,0 - bne 2b - addi r6,r6,4 -/* Pass a termination function pointer (in this case _dl_fini) in r7. */ - lwz r7,_dl_fini@got(r31) -/* Now, call the start function in r30... */ - mtctr r30 -/* Pass the stack pointer in r1 (so far so good), pointing to a NULL value. - (This lets our startup code distinguish between a program linked statically, - which linux will call with argc on top of the stack which will hopefully - never be zero, and a dynamically linked program which will always have - a NULL on the top of the stack). - Take the opportunity to clear LR, so anyone who accidentally returns - from _start gets SEGV. Also clear the next few words of the stack. */ - -_dl_main_dispatch: - li r31,0 - stw r31,0(r1) - mtlr r31 - stw r31,4(r1) - stw r31,8(r1) - stw r31,12(r1) -/* Go do it! */ - bctr -END(_start) diff --git a/sysdeps/powerpc/powerpc32/dl-trampoline.S b/sysdeps/powerpc/powerpc32/dl-trampoline.S deleted file mode 100644 index 16b12db0e4..0000000000 --- a/sysdeps/powerpc/powerpc32/dl-trampoline.S +++ /dev/null @@ -1,189 +0,0 @@ -/* PLT trampolines. PPC32 version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section ".text" - .align 2 - .globl _dl_runtime_resolve - .type _dl_runtime_resolve,@function -_dl_runtime_resolve: - cfi_startproc - # We need to save the registers used to pass parameters, and register 0, - # which is used by _mcount; the registers are saved in a stack frame. - stwu r1,-64(r1) - cfi_adjust_cfa_offset (64) - stw r0,12(r1) - stw r3,16(r1) - stw r4,20(r1) - # The code that calls this has put parameters for `fixup' in r12 and r11. - mr r3,r12 - stw r5,24(r1) - mr r4,r11 - stw r6,28(r1) - mflr r0 - # We also need to save some of the condition register fields - stw r7,32(r1) - # Don't clobber the caller's LRSAVE, it is needed by _mcount. - stw r0,48(r1) - cfi_offset (lr, -16) - stw r8,36(r1) - mfcr r0 - stw r9,40(r1) - stw r10,44(r1) - stw r0,8(r1) - bl _dl_fixup@local - # 'fixup' returns the address we want to branch to. - mtctr r3 - # Put the registers back... - lwz r0,48(r1) - lwz r10,44(r1) - lwz r9,40(r1) - mtlr r0 - lwz r8,36(r1) - lwz r0,8(r1) - lwz r7,32(r1) - lwz r6,28(r1) - mtcrf 0xFF,r0 - lwz r5,24(r1) - lwz r4,20(r1) - lwz r3,16(r1) - lwz r0,12(r1) - # ...unwind the stack frame, and jump to the PLT entry we updated. - addi r1,r1,64 - bctr - cfi_endproc - .size _dl_runtime_resolve,.-_dl_runtime_resolve - -#ifndef PROF - .align 2 - .globl _dl_prof_resolve - .type _dl_prof_resolve,@function -_dl_prof_resolve: - cfi_startproc - # We need to save the registers used to pass parameters, and register 0, - # which is used by _mcount; the registers are saved in a stack frame. - stwu r1,-320(r1) - cfi_adjust_cfa_offset (320) - /* Stack layout: - - +312 stackframe - +308 lr - +304 r1 - +288 v12 - +272 v11 - +256 v10 - +240 v9 - +224 v8 - +208 v7 - +192 v6 - +176 v5 - +160 v4 - +144 v3 - +128 v2 - +112 v1 - +104 fp8 - +96 fp7 - +88 fp6 - +80 fp5 - +72 fp4 - +64 fp3 - +56 fp2 - +48 fp1 - +44 r10 - +40 r9 - +36 r8 - +32 r7 - +28 r6 - +24 r5 - +20 r4 - +16 r3 - +12 r0 - +8 cr - r1 link - */ - stw r0,12(r1) - stw r3,16(r1) - stw r4,20(r1) - # The code that calls this has put parameters for `fixup' in r12 and r11. - mr r3,r12 - stw r5,24(r1) - mr r4,r11 - stw r6,28(r1) - mflr r5 - # We also need to save some of the condition register fields. - stw r7,32(r1) - # Don't clobber the caller's LRSAVE, it is needed by _mcount. - stw r5,308(r1) - cfi_offset (lr, -12) - stw r8,36(r1) - mfcr r0 - stw r9,40(r1) - stw r10,44(r1) - stw r0,8(r1) -#ifndef __NO_FPRS__ - # Save the floating point registers - stfd fp1,48(r1) - stfd fp2,56(r1) - stfd fp3,64(r1) - stfd fp4,72(r1) - stfd fp5,80(r1) - stfd fp6,88(r1) - stfd fp7,96(r1) - stfd fp8,104(r1) -#endif - # XXX TODO: store vmx registers - # Load the extra parameters. - addi r6,r1,16 - addi r7,r1,312 - li r0,-1 - stw r0,0(r7) - bl _dl_profile_fixup@local - # 'fixup' returns the address we want to branch to. - mtctr r3 - # Put the registers back... - lwz r0,308(r1) - lwz r10,44(r1) - lwz r9,40(r1) - mtlr r0 - lwz r8,36(r1) - lwz r0,8(r1) - lwz r7,32(r1) - lwz r6,28(r1) - mtcrf 0xFF,r0 - lwz r5,24(r1) - lwz r4,20(r1) - lwz r3,16(r1) - lwz r0,12(r1) -#ifndef __NO_FPRS__ - # Load the floating point registers. - lfd fp1,48(r1) - lfd fp2,56(r1) - lfd fp3,64(r1) - lfd fp4,72(r1) - lfd fp5,80(r1) - lfd fp6,88(r1) - lfd fp7,96(r1) - lfd fp8,104(r1) -#endif - # ...unwind the stack frame, and jump to the PLT entry we updated. - addi r1,r1,320 - bctr - cfi_endproc - .size _dl_prof_resolve,.-_dl_prof_resolve -#endif diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/Makefile b/sysdeps/powerpc/powerpc32/e500/nofpu/Makefile deleted file mode 100644 index adf556870a..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -ifeq ($(subdir),math) -libm-routines += fexcepts_to_spe fexcepts_from_spe -libm-routines += fexcepts_to_prctl fexcepts_from_prctl -libm-routines += fe_note_change -endif - -ifeq ($(subdir),soft-fp) -sysdep_routines += fraiseexcept-soft -endif diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/atomic-feclearexcept.c b/sysdeps/powerpc/powerpc32/e500/nofpu/atomic-feclearexcept.c deleted file mode 100644 index 09132451a0..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/atomic-feclearexcept.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Clear floating-point exceptions for atomic compound assignment. - e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -void -__atomic_feclearexcept (void) -{ - unsigned int fpescr, old_fpescr; - - /* Get the current state. */ - old_fpescr = fpescr = fegetenv_register (); - - /* Clear the relevant bits. */ - fpescr &= ~SPEFSCR_ALL_EXCEPT; - - /* Put the new state in effect. */ - fesetenv_register (fpescr); - - /* Let the kernel know if the "invalid" or "underflow" bit was - cleared. */ - if (old_fpescr & (SPEFSCR_FINVS | SPEFSCR_FUNFS)) - { - int pflags __attribute__ ((__unused__)), r; - INTERNAL_SYSCALL_DECL (err); - - r = INTERNAL_SYSCALL (prctl, err, 2, PR_GET_FPEXC, &pflags); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - abort (); - } -} diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/atomic-feholdexcept.c b/sysdeps/powerpc/powerpc32/e500/nofpu/atomic-feholdexcept.c deleted file mode 100644 index 3d6e10f1b6..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/atomic-feholdexcept.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Store current floating-point environment and clear exceptions for - atomic compound assignment. e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -void -__atomic_feholdexcept (fenv_t *envp) -{ - fenv_union_t u; - INTERNAL_SYSCALL_DECL (err); - int r; - - /* Get the current state. */ - r = INTERNAL_SYSCALL (prctl, err, 2, PR_GET_FPEXC, &u.l[0]); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - abort (); - - u.l[1] = fegetenv_register (); - *envp = u.fenv; - - /* Clear everything except for the rounding mode and trapping to the - kernel. */ - u.l[0] &= ~(PR_FP_EXC_DIV - | PR_FP_EXC_OVF - | PR_FP_EXC_UND - | PR_FP_EXC_RES - | PR_FP_EXC_INV); - u.l[1] &= SPEFSCR_FRMC | (SPEFSCR_ALL_EXCEPT_ENABLE & ~SPEFSCR_FINXE); - - /* Put the new state in effect. */ - fesetenv_register (u.l[1]); - r = INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, - u.l[0] | PR_FP_EXC_SW_ENABLE); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - abort (); -} diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/atomic-feupdateenv.c b/sysdeps/powerpc/powerpc32/e500/nofpu/atomic-feupdateenv.c deleted file mode 100644 index a4615a1b01..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/atomic-feupdateenv.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Install given floating-point environment and raise exceptions for - atomic compound assignment. e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -void -__atomic_feupdateenv (const fenv_t *envp) -{ - int exc; - fenv_union_t u; - INTERNAL_SYSCALL_DECL (err); - int r; - - /* Save the currently set exceptions. */ - exc = fegetenv_register () & SPEFSCR_ALL_EXCEPT; - - u.fenv = *envp; - - fesetenv_register (u.l[1]); - r = INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, - u.l[0] | PR_FP_EXC_SW_ENABLE); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - abort (); - - /* Raise (if appropriate) saved exceptions. */ - __feraiseexcept_soft (exc); -} diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fclrexcpt.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fclrexcpt.c deleted file mode 100644 index cbf8d9df6c..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fclrexcpt.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Clear given exceptions in current floating-point environment. e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef feclearexcept -int -__feclearexcept (int excepts) -{ - unsigned int fpescr; - int excepts_spe = __fexcepts_to_spe (excepts); - - /* Get the current state. */ - fpescr = fegetenv_register (); - - /* Clear the relevant bits. */ - fpescr &= ~excepts_spe; - - /* Put the new state in effect. */ - fesetenv_register (fpescr); - - /* Let the kernel know if the "invalid" or "underflow" bit was - cleared. */ - if (excepts & (FE_INVALID | FE_UNDERFLOW)) - __fe_note_change (); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feclearexcept, __old_feclearexcept) -compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1); -#endif - -libm_hidden_ver (__feclearexcept, feclearexcept) -versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2); diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fe_note_change.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fe_note_change.c deleted file mode 100644 index 3dd3161f7d..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fe_note_change.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Note a change to floating-point exceptions. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Inform the kernel of a change to floating-point exceptions. */ - -void -__fe_note_change (void) -{ - int pflags, r; - INTERNAL_SYSCALL_DECL (err); - - r = INTERNAL_SYSCALL (prctl, err, 2, PR_GET_FPEXC, &pflags); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - return; - if ((pflags & PR_FP_EXC_SW_ENABLE) == 0) - INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, - pflags | PR_FP_EXC_SW_ENABLE); -} - -libm_hidden_def (__fe_note_change) diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fedisblxcpt.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fedisblxcpt.c deleted file mode 100644 index 94ce45463c..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fedisblxcpt.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Disable floating-point exceptions. e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -fedisableexcept (int excepts) -{ - int result = 0, pflags, r; - INTERNAL_SYSCALL_DECL (err); - - r = INTERNAL_SYSCALL (prctl, err, 2, PR_GET_FPEXC, &pflags); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - return -1; - - /* Save old enable bits. */ - result = __fexcepts_from_prctl (pflags); - - pflags &= ~__fexcepts_to_prctl (excepts); - r = INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, - pflags | PR_FP_EXC_SW_ENABLE); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - return -1; - - /* If disabling signals for "inexact", also disable trapping to the - kernel. */ - if ((excepts & FE_INEXACT) != 0) - { - unsigned long fpescr; - - fpescr = fegetenv_register (); - fpescr &= ~SPEFSCR_FINXE; - fesetenv_register (fpescr); - } - - return result; -} diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/feenablxcpt.c b/sysdeps/powerpc/powerpc32/e500/nofpu/feenablxcpt.c deleted file mode 100644 index 32116d1608..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/feenablxcpt.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Enable floating-point exceptions. e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -feenableexcept (int excepts) -{ - unsigned int result = 0, pflags, r; - INTERNAL_SYSCALL_DECL (err); - - r = INTERNAL_SYSCALL (prctl, err, 2, PR_GET_FPEXC, &pflags); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - return -1; - - /* Save old enable bits. */ - result = __fexcepts_from_prctl (pflags); - - pflags |= __fexcepts_to_prctl (excepts); - r = INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, - pflags | PR_FP_EXC_SW_ENABLE); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - return -1; - - /* If enabling signals for "inexact", also enable trapping to the - kernel. */ - if ((excepts & FE_INEXACT) != 0) - { - unsigned long fpescr; - - fpescr = fegetenv_register (); - fpescr |= SPEFSCR_FINXE; - fesetenv_register (fpescr); - } - - return result; -} diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fegetenv.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fegetenv.c deleted file mode 100644 index 01b8fa4c9a..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fegetenv.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Store current floating-point environment. e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__fegetenv (fenv_t *envp) -{ - fenv_union_t u; - INTERNAL_SYSCALL_DECL (err); - int r; - - r = INTERNAL_SYSCALL (prctl, err, 2, PR_GET_FPEXC, &u.l[0]); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - return -1; - - u.l[1] = fegetenv_register (); - *envp = u.fenv; - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetenv, __old_fegetenv) -compat_symbol (libm, __old_fegetenv, fegetenv, GLIBC_2_1); -#endif -libm_hidden_def (__fegetenv) -libm_hidden_ver (__fegetenv, fegetenv) - -versioned_symbol (libm, __fegetenv, fegetenv, GLIBC_2_2); diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fegetexcept.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fegetexcept.c deleted file mode 100644 index 74fdb5a1c9..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fegetexcept.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Get floating-point exceptions. e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -fegetexcept (void) -{ - int result = 0, pflags, r; - INTERNAL_SYSCALL_DECL (err); - - r = INTERNAL_SYSCALL (prctl, err, 2, PR_GET_FPEXC, &pflags); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - return -1; - - result = __fexcepts_from_prctl (pflags); - - return result; -} diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fegetmode.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fegetmode.c deleted file mode 100644 index d262714266..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fegetmode.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Store current floating-point control modes. e500 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -fegetmode (femode_t *modep) -{ - fenv_union_t u; - INTERNAL_SYSCALL_DECL (err); - int r; - - r = INTERNAL_SYSCALL (prctl, err, 2, PR_GET_FPEXC, &u.l[0]); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - return -1; - - u.l[1] = fegetenv_register (); - *modep = u.fenv; - return 0; -} diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fegetround.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fegetround.c deleted file mode 100644 index afcc5d18cc..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fegetround.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Return current rounding direction. e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fegetround (void) -{ - unsigned long fpescr; - - fpescr = fegetenv_register (); - return fpescr & 3; -} -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/feholdexcpt.c b/sysdeps/powerpc/powerpc32/e500/nofpu/feholdexcpt.c deleted file mode 100644 index cba1239561..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/feholdexcpt.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__feholdexcept (fenv_t *envp) -{ - fenv_union_t u; - INTERNAL_SYSCALL_DECL (err); - int r; - - /* Get the current state. */ - r = INTERNAL_SYSCALL (prctl, err, 2, PR_GET_FPEXC, &u.l[0]); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - return -1; - - u.l[1] = fegetenv_register (); - *envp = u.fenv; - - /* Clear everything except for the rounding mode and trapping to the - kernel. */ - u.l[0] &= ~(PR_FP_EXC_DIV - | PR_FP_EXC_OVF - | PR_FP_EXC_UND - | PR_FP_EXC_RES - | PR_FP_EXC_INV); - u.l[1] &= SPEFSCR_FRMC | (SPEFSCR_ALL_EXCEPT_ENABLE & ~SPEFSCR_FINXE); - - /* Put the new state in effect. */ - fesetenv_register (u.l[1]); - r = INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, - u.l[0] | PR_FP_EXC_SW_ENABLE); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - return -1; - - return 0; -} -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fenv_const.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fenv_const.c deleted file mode 100644 index 9fc3f53bc7..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fenv_const.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Constant floating-point environments for e500. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The use of "unsigned long long" as the type to define the - bit-pattern explicitly, rather than the type "double" used in - , means that we cannot include here to - get the enum constants for the SPEFSCR bits to enable - exceptions. */ - -#include - -/* If the default argument is used we use this value. */ -const unsigned long long __fe_dfl_env __attribute__ ((aligned (8))) = - 0x3cULL; - -/* The same representation is used for femode_t. */ -extern const unsigned long long __fe_dfl_mode - __attribute__ ((aligned (8), alias ("__fe_dfl_env"))); - -/* Floating-point environment where none of the exceptions are masked. */ -const unsigned long long __fe_enabled_env __attribute__ ((aligned (8))) = - (((unsigned long long) (PR_FP_EXC_DIV - | PR_FP_EXC_OVF - | PR_FP_EXC_UND - | PR_FP_EXC_RES - | PR_FP_EXC_INV)) << 32) | 0x7cULL; - -/* Non-IEEE mode. */ -const unsigned long long __fe_nonieee_env __attribute__ ((aligned (8))) = - 0x0ULL; diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fenv_libc.h b/sysdeps/powerpc/powerpc32/e500/nofpu/fenv_libc.h deleted file mode 100644 index 13437f8052..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fenv_libc.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Internal libc stuff for floating point environment routines. e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FENV_LIBC_H -#define _FENV_LIBC_H 1 - -#include - -int __feraiseexcept_spe (int); -libm_hidden_proto (__feraiseexcept_spe) - -int __feraiseexcept_soft (int); -libc_hidden_proto (__feraiseexcept_soft) - -int __fexcepts_to_spe (int); -libm_hidden_proto (__fexcepts_to_spe) - -int __fexcepts_from_spe (int); -libm_hidden_proto (__fexcepts_from_spe) - -int __fexcepts_to_prctl (int); -libm_hidden_proto (__fexcepts_to_prctl) - -int __fexcepts_from_prctl (int); -libm_hidden_proto (__fexcepts_from_prctl) - -void __fe_note_change (void); -libm_hidden_proto (__fe_note_change) - -/* Equivalent to fegetenv, but returns an unsigned int instead of - taking a pointer. */ -#define fegetenv_register() \ - ({ unsigned int fscr; asm volatile ("mfspefscr %0" : "=r" (fscr)); fscr; }) - -/* Equivalent to fesetenv, but takes an unsigned int instead of a - pointer. */ -#define fesetenv_register(fscr) \ - ({ asm volatile ("mtspefscr %0" : : "r" (fscr)); }) - -typedef union -{ - fenv_t fenv; - unsigned int l[2]; -} fenv_union_t; - -/* Definitions of all the SPEFSCR bit numbers. */ -enum { - SPEFSCR_SOVH = 0x80000000, - SPEFSCR_OVH = 0x40000000, - SPEFSCR_FGH = 0x20000000, - SPEFSCR_FXH = 0x10000000, - SPEFSCR_FINVH = 0x08000000, - SPEFSCR_FDBZH = 0x04000000, - SPEFSCR_FUNFH = 0x02000000, - SPEFSCR_FOVFH = 0x01000000, - /* 2 unused bits. */ - SPEFSCR_FINXS = 0x00200000, - SPEFSCR_FINVS = 0x00100000, - SPEFSCR_FDBZS = 0x00080000, - SPEFSCR_FUNFS = 0x00040000, - SPEFSCR_FOVFS = 0x00020000, - /* Combination of the exception bits. */ - SPEFSCR_ALL_EXCEPT = 0x003e0000, - SPEFSCR_MODE = 0x00010000, - SPEFSCR_SOV = 0x00008000, - SPEFSCR_OV = 0x00004000, - SPEFSCR_FG = 0x00002000, - SPEFSCR_FX = 0x00001000, - SPEFSCR_FINV = 0x00000800, - SPEFSCR_FDBZ = 0x00000400, - SPEFSCR_FUNF = 0x00000200, - SPEFSCR_FOVF = 0x00000100, - /* 1 unused bit. */ - SPEFSCR_FINXE = 0x00000040, - SPEFSCR_FINVE = 0x00000020, - SPEFSCR_FDBZE = 0x00000010, - SPEFSCR_FUNFE = 0x00000008, - SPEFSCR_FOVFE = 0x00000004, - /* Combination of the exception trap enable bits. */ - SPEFSCR_ALL_EXCEPT_ENABLE = 0x0000007c, - SPEFSCR_FRMC = 0x00000003 -}; - -#endif /* fenv_libc.h */ diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fesetenv.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fesetenv.c deleted file mode 100644 index 185bcdb051..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fesetenv.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Install given floating-point environment. e500 version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__fesetenv (const fenv_t *envp) -{ - fenv_union_t u; - INTERNAL_SYSCALL_DECL (err); - int r; - - u.fenv = *envp; - - fesetenv_register (u.l[1]); - r = INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, - u.l[0] | PR_FP_EXC_SW_ENABLE); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - return -1; - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetenv, __old_fesetenv) -compat_symbol (libm, __old_fesetenv, fesetenv, GLIBC_2_1); -#endif - -libm_hidden_def (__fesetenv) -libm_hidden_ver (__fesetenv, fesetenv) -versioned_symbol (libm, __fesetenv, fesetenv, GLIBC_2_2); diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fesetexcept.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fesetexcept.c deleted file mode 100644 index 688583a6e7..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fesetexcept.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Set given exception flags. e500 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fesetexcept (int excepts) -{ - unsigned long old_spefscr, spefscr; - int excepts_spe = __fexcepts_to_spe (excepts); - - old_spefscr = fegetenv_register (); - spefscr = old_spefscr | excepts_spe; - fesetenv_register (spefscr); - - /* If the state of the "invalid" or "underflow" flag has changed, - inform the kernel. */ - if (((spefscr ^ old_spefscr) & (SPEFSCR_FINVS | SPEFSCR_FUNFS)) != 0) - __fe_note_change (); - - return 0; -} diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fesetmode.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fesetmode.c deleted file mode 100644 index 360e500b27..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fesetmode.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Install given floating-point control modes. e500 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define SPEFSCR_STATUS 0xff3eff00 - -int -fesetmode (const femode_t *modep) -{ - fenv_union_t u; - INTERNAL_SYSCALL_DECL (err); - int r; - - u.fenv = *modep; - unsigned int spefscr = fegetenv_register (); - spefscr = (spefscr & SPEFSCR_STATUS) | (u.l[1] & ~SPEFSCR_STATUS); - - fesetenv_register (spefscr); - r = INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, - u.l[0] | PR_FP_EXC_SW_ENABLE); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - return -1; - - return 0; -} diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fesetround.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fesetround.c deleted file mode 100644 index 15aaa62079..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fesetround.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Set current rounding direction. e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fesetround (int round) -{ - unsigned long fpescr; - - if ((unsigned int) round > 3) - return 1; - - fpescr = fegetenv_register (); - fpescr = (fpescr & ~SPEFSCR_FRMC) | (round & 3); - fesetenv_register (fpescr); - - return 0; -} -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fetestexceptflag.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fetestexceptflag.c deleted file mode 100644 index 9d42d919ec..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fetestexceptflag.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Test exception in saved exception state. e500 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fetestexceptflag (const fexcept_t *flagp, int excepts) -{ - return __fexcepts_from_spe (*flagp) & excepts & FE_ALL_EXCEPT; -} diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/feupdateenv.c b/sysdeps/powerpc/powerpc32/e500/nofpu/feupdateenv.c deleted file mode 100644 index 54de708449..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/feupdateenv.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__feupdateenv (const fenv_t *envp) -{ - int exc; - - /* Save the currently set exceptions. */ - exc = fegetenv_register () & SPEFSCR_ALL_EXCEPT; - - /* Install new environment. */ - __fesetenv (envp); - - /* Raise (if appropriate) saved exceptions. */ - __feraiseexcept_spe (exc); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feupdateenv, __old_feupdateenv) -compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1); -#endif - -libm_hidden_def (__feupdateenv) -libm_hidden_ver (__feupdateenv, feupdateenv) -versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2); diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_from_prctl.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_from_prctl.c deleted file mode 100644 index b260fc8df1..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_from_prctl.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Convert floating-point exceptions from prctl form. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Convert EXCEPTS from prctl bits to FE_* form, returning the - converted value. */ - -int -__fexcepts_from_prctl (int excepts) -{ - int result = 0; - if (excepts & PR_FP_EXC_OVF) - result |= FE_OVERFLOW; - if (excepts & PR_FP_EXC_UND) - result |= FE_UNDERFLOW; - if (excepts & PR_FP_EXC_INV) - result |= FE_INVALID; - if (excepts & PR_FP_EXC_DIV) - result |= FE_DIVBYZERO; - if (excepts & PR_FP_EXC_RES) - result |= FE_INEXACT; - return result; -} - -libm_hidden_def (__fexcepts_from_prctl) diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_from_spe.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_from_spe.c deleted file mode 100644 index a925fe4c37..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_from_spe.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Convert floating-point exceptions from SPEFSCR form. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Convert EXCEPTS from SPEFSCR bits to FE_* form, returning the - converted value. */ - -int -__fexcepts_from_spe (int excepts) -{ - int result = 0; - if (excepts & SPEFSCR_FINXS) - result |= FE_INEXACT; - if (excepts & SPEFSCR_FDBZS) - result |= FE_DIVBYZERO; - if (excepts & SPEFSCR_FUNFS) - result |= FE_UNDERFLOW; - if (excepts & SPEFSCR_FOVFS) - result |= FE_OVERFLOW; - if (excepts & SPEFSCR_FINVS) - result |= FE_INVALID; - return result; -} - -libm_hidden_def (__fexcepts_from_spe) diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_to_prctl.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_to_prctl.c deleted file mode 100644 index e4626312ee..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_to_prctl.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Convert floating-point exceptions to prctl form. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Convert EXCEPTS from FE_* form to prctl bits, returning the - converted value. */ - -int -__fexcepts_to_prctl (int excepts) -{ - int result = 0; - if (excepts & FE_INEXACT) - result |= PR_FP_EXC_RES; - if (excepts & FE_DIVBYZERO) - result |= PR_FP_EXC_DIV; - if (excepts & FE_UNDERFLOW) - result |= PR_FP_EXC_UND; - if (excepts & FE_OVERFLOW) - result |= PR_FP_EXC_OVF; - if (excepts & FE_INVALID) - result |= PR_FP_EXC_INV; - return result; -} - -libm_hidden_def (__fexcepts_to_prctl) diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_to_spe.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_to_spe.c deleted file mode 100644 index 3eed4ae6e9..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fexcepts_to_spe.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Convert floating-point exceptions to SPEFSCR form. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Convert EXCEPTS from FE_* form to SPEFSCR bits, returning the - converted value. */ - -int -__fexcepts_to_spe (int excepts) -{ - int result = 0; - if (excepts & FE_INEXACT) - result |= SPEFSCR_FINXS; - if (excepts & FE_DIVBYZERO) - result |= SPEFSCR_FDBZS; - if (excepts & FE_UNDERFLOW) - result |= SPEFSCR_FUNFS; - if (excepts & FE_OVERFLOW) - result |= SPEFSCR_FOVFS; - if (excepts & FE_INVALID) - result |= SPEFSCR_FINVS; - return result; -} - -libm_hidden_def (__fexcepts_to_spe) diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fgetexcptflg.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fgetexcptflg.c deleted file mode 100644 index cff4330a9c..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fgetexcptflg.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Store current representation for exceptions. e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fegetexceptflag (fexcept_t *flagp, int excepts) -{ - unsigned long fpescr; - - /* Get the current state. */ - fpescr = fegetenv_register (); - - *flagp = fpescr & SPEFSCR_ALL_EXCEPT; - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetexceptflag, __old_fegetexceptflag) -compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2); diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/flt-rounds.c b/sysdeps/powerpc/powerpc32/e500/nofpu/flt-rounds.c deleted file mode 100644 index 4fb8d034c4..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/flt-rounds.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Return current rounding mode as correct value for FLT_ROUNDS. e500 - version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -__flt_rounds (void) -{ - switch (fegetenv_register () & SPEFSCR_FRMC) - { - case FE_TOWARDZERO: - return 0; - case FE_TONEAREST: - return 1; - case FE_UPWARD: - return 2; - case FE_DOWNWARD: - return 3; - default: - abort (); - } -} diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fraiseexcept-soft.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fraiseexcept-soft.c deleted file mode 100644 index ef35a9426d..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fraiseexcept-soft.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Raise given exceptions. e500 version for use from soft-fp. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Aldy Hernandez , 2004. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define __FERAISEEXCEPT_INTERNAL __feraiseexcept_soft -#include "spe-raise.c" -libc_hidden_def (__feraiseexcept_soft) diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fraiseexcpt.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fraiseexcpt.c deleted file mode 100644 index 915642a1dc..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fraiseexcpt.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Raise given exceptions. e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __FERAISEEXCEPT_INTERNAL __feraiseexcept_spe -#include "spe-raise.c" - -libm_hidden_def (__feraiseexcept_spe) - -#undef feraiseexcept -int -__feraiseexcept (int excepts) -{ - return __feraiseexcept_spe (__fexcepts_to_spe (excepts)); -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feraiseexcept, __old_feraiseexcept) -compat_symbol (libm, __old_feraiseexcept, feraiseexcept, GLIBC_2_1); -#endif - -libm_hidden_def (__feraiseexcept) -libm_hidden_ver (__feraiseexcept, feraiseexcept) -versioned_symbol (libm, __feraiseexcept, feraiseexcept, GLIBC_2_2); diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/fsetexcptflg.c b/sysdeps/powerpc/powerpc32/e500/nofpu/fsetexcptflg.c deleted file mode 100644 index f1e6a02681..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/fsetexcptflg.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Set floating-point environment exception handling. e500 version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - unsigned long old_spefscr, spefscr; - fexcept_t flag; - int excepts_spe = __fexcepts_to_spe (excepts); - - /* Get the current state. */ - old_spefscr = fegetenv_register (); - - /* Ignore exceptions not listed in 'excepts'. */ - flag = *flagp & excepts_spe; - - /* Replace the exception status */ - spefscr = (old_spefscr & ~excepts_spe) | flag; - - /* Store the new status word (along with the rest of the environment). */ - fesetenv_register (spefscr); - - /* If the state of the "invalid" or "underflow" flag has changed, - inform the kernel. */ - if (((spefscr ^ old_spefscr) & (SPEFSCR_FINVS | SPEFSCR_FUNFS)) != 0) - __fe_note_change (); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetexceptflag, __old_fesetexceptflag) -compat_symbol (libm, __old_fesetexceptflag, fesetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fesetexceptflag, fesetexceptflag, GLIBC_2_2); diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/ftestexcept.c b/sysdeps/powerpc/powerpc32/e500/nofpu/ftestexcept.c deleted file mode 100644 index 05040d7224..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/ftestexcept.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Test exception in current environment. e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fetestexcept (int excepts) -{ - unsigned long f; - - /* Get the current state. */ - f = fegetenv_register (); - - return __fexcepts_from_spe (f) & excepts; -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/get-rounding-mode.h b/sysdeps/powerpc/powerpc32/e500/nofpu/get-rounding-mode.h deleted file mode 100644 index 117e7331e9..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/get-rounding-mode.h +++ /dev/null @@ -1,4 +0,0 @@ -/* The generic version of get-rounding-mode.h using fpu_control.h, not - the one using the software rounding mode, is correct for e500. */ - -#include diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/s_fabsf.S b/sysdeps/powerpc/powerpc32/e500/nofpu/s_fabsf.S deleted file mode 100644 index 9d00b62923..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/s_fabsf.S +++ /dev/null @@ -1,27 +0,0 @@ -/* Floating-point absolute value. e500 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__fabsf) -/* float [r3] fabsf (float [r3] x) ; */ - efsabs r3,r3 - blr -END (__fabsf) - -weak_alias (__fabsf, fabsf) diff --git a/sysdeps/powerpc/powerpc32/e500/nofpu/spe-raise.c b/sysdeps/powerpc/powerpc32/e500/nofpu/spe-raise.c deleted file mode 100644 index cc13c67786..0000000000 --- a/sysdeps/powerpc/powerpc32/e500/nofpu/spe-raise.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Raise given exceptions, given the SPEFSCR bits for those exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__FERAISEEXCEPT_INTERNAL (int excepts) -{ - unsigned long f; - - f = fegetenv_register (); - f |= (excepts & SPEFSCR_ALL_EXCEPT); - fesetenv_register (f); - - /* Force the operations that cause the exceptions. */ - if ((SPEFSCR_FINVS & excepts) != 0) - /* 0 / 0 */ - asm volatile ("efsdiv %0,%0,%1" : : "r" (0), "r" (0)); - - if ((SPEFSCR_FDBZS & excepts) != 0) - /* 1.0 / 0.0 */ - asm volatile ("efsdiv %0,%0,%1" : : "r" (1.0F), "r" (0)); - - if ((SPEFSCR_FOVFS & excepts) != 0) - /* Largest normalized number plus itself. */ - asm volatile ("efsadd %0,%0,%1" : : "r" (0x7f7fffff), "r" (0x7f7fffff)); - - if ((SPEFSCR_FUNFS & excepts) != 0) - /* Smallest normalized number times itself. */ - asm volatile ("efsmul %0,%0,%1" : : "r" (0x800000), "r" (0x800000)); - - if ((SPEFSCR_FINXS & excepts) != 0) - /* Smallest normalized minus 1.0 raises the inexact flag. */ - asm volatile ("efssub %0,%0,%1" : : "r" (0x00800000), "r" (1.0F)); - - /* Success. */ - return 0; -} diff --git a/sysdeps/powerpc/powerpc32/fpu/Makefile b/sysdeps/powerpc/powerpc32/fpu/Makefile deleted file mode 100644 index e05073970d..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),misc) -sysdep_routines += fprsave fprrest -endif diff --git a/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S b/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S deleted file mode 100644 index c01c94dfb7..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S +++ /dev/null @@ -1,178 +0,0 @@ -/* longjmp for PowerPC. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#define _ASM -#ifdef __NO_VMX__ -# include -#else -# include -#endif - - .machine "altivec" -ENTRY (__longjmp_symbol) -#ifndef __NO_VMX__ -# ifdef PIC - mflr r6 - cfi_register (lr,r6) - SETUP_GOT_ACCESS(r5,got_label) - addis r5,r5,_GLOBAL_OFFSET_TABLE_-got_label@ha - addi r5,r5,_GLOBAL_OFFSET_TABLE_-got_label@l -# ifdef SHARED -# if IS_IN (rtld) - /* Inside ld.so we use the local alias to avoid runtime GOT - relocations. */ - lwz r5,_rtld_local_ro@got(r5) -# else - lwz r5,_rtld_global_ro@got(r5) -# endif - mtlr r6 - cfi_same_value (lr) - lwz r5,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+LOWORD(r5) -# else - lwz r5,_dl_hwcap@got(r5) - mtlr r6 - cfi_same_value (lr) - lwz r5,LOWORD(r5) -# endif -# else - lis r5,(_dl_hwcap+LOWORD)@ha - lwz r5,(_dl_hwcap+LOWORD)@l(r5) -# endif - andis. r5,r5,(PPC_FEATURE_HAS_ALTIVEC >> 16) - beq L(no_vmx) - la r5,((JB_VRS)*4)(3) - andi. r6,r5,0xf - lwz r0,((JB_VRSAVE)*4)(3) - mtspr VRSAVE,r0 - beq+ L(aligned_restore_vmx) - addi r6,r5,16 - lvsl v0,0,r5 - lvx v1,0,r5 - addi r5,r5,32 - lvx v21,0,r6 - vperm v20,v1,v21,v0 -# define load_misaligned_vmx_lo_loaded(loadvr,lovr,shiftvr,loadgpr,addgpr) \ - addi addgpr,addgpr,32; \ - lvx lovr,0,loadgpr; \ - vperm loadvr,loadvr,lovr,shiftvr; - load_misaligned_vmx_lo_loaded(v21,v22,v0,r5,r6) - load_misaligned_vmx_lo_loaded(v22,v23,v0,r6,r5) - load_misaligned_vmx_lo_loaded(v23,v24,v0,r5,r6) - load_misaligned_vmx_lo_loaded(v24,v25,v0,r6,r5) - load_misaligned_vmx_lo_loaded(v25,v26,v0,r5,r6) - load_misaligned_vmx_lo_loaded(v26,v27,v0,r6,r5) - load_misaligned_vmx_lo_loaded(v27,v28,v0,r5,r6) - load_misaligned_vmx_lo_loaded(v28,v29,v0,r6,r5) - load_misaligned_vmx_lo_loaded(v29,v30,v0,r5,r6) - load_misaligned_vmx_lo_loaded(v30,v31,v0,r6,r5) - lvx v1,0,r5 - vperm v31,v31,v1,v0 - b L(no_vmx) -L(aligned_restore_vmx): - addi r6,r5,16 - lvx v20,0,r5 - addi r5,r5,32 - lvx v21,0,r6 - addi r6,r6,32 - lvx v22,0,r5 - addi r5,r5,32 - lvx v23,0,r6 - addi r6,r6,32 - lvx v24,0,r5 - addi r5,r5,32 - lvx v25,0,r6 - addi r6,r6,32 - lvx v26,0,r5 - addi r5,r5,32 - lvx v27,0,r6 - addi r6,r6,32 - lvx v28,0,r5 - addi r5,r5,32 - lvx v29,0,r6 - addi r6,r6,32 - lvx v30,0,r5 - lvx v31,0,r6 -L(no_vmx): -#endif -#if defined PTR_DEMANGLE || defined CHECK_SP - lwz r24,(JB_GPR1*4)(r3) -# ifdef CHECK_SP -# ifdef PTR_DEMANGLE - PTR_DEMANGLE3 (r24, r24, r25) -# endif - CHECK_SP (r24) - mr r1,r24 -# endif -#else - lwz r1,(JB_GPR1*4)(r3) -#endif - lwz r0,(JB_LR*4)(r3) - lwz r14,((JB_GPRS+0)*4)(r3) - lfd fp14,((JB_FPRS+0*2)*4)(r3) - lwz r15,((JB_GPRS+1)*4)(r3) - lfd fp15,((JB_FPRS+1*2)*4)(r3) - lwz r16,((JB_GPRS+2)*4)(r3) - lfd fp16,((JB_FPRS+2*2)*4)(r3) - lwz r17,((JB_GPRS+3)*4)(r3) - lfd fp17,((JB_FPRS+3*2)*4)(r3) - lwz r18,((JB_GPRS+4)*4)(r3) - lfd fp18,((JB_FPRS+4*2)*4)(r3) - lwz r19,((JB_GPRS+5)*4)(r3) - lfd fp19,((JB_FPRS+5*2)*4)(r3) - lwz r20,((JB_GPRS+6)*4)(r3) - lfd fp20,((JB_FPRS+6*2)*4)(r3) -#ifdef PTR_DEMANGLE -# ifndef CHECK_SP - PTR_DEMANGLE3 (r1, r24, r25) -# endif - PTR_DEMANGLE2 (r0, r25) -#endif - /* longjmp/longjmp_target probe expects longjmp first argument (4@3), - second argument (-4@4), and target address (4@0), respectively. */ - LIBC_PROBE (longjmp, 3, 4@3, -4@4, 4@0) - mtlr r0 - lwz r21,((JB_GPRS+7)*4)(r3) - lfd fp21,((JB_FPRS+7*2)*4)(r3) - lwz r22,((JB_GPRS+8)*4)(r3) - lfd fp22,((JB_FPRS+8*2)*4)(r3) - lwz r5,(JB_CR*4)(r3) - lwz r23,((JB_GPRS+9)*4)(r3) - lfd fp23,((JB_FPRS+9*2)*4)(r3) - lwz r24,((JB_GPRS+10)*4)(r3) - lfd fp24,((JB_FPRS+10*2)*4)(r3) - lwz r25,((JB_GPRS+11)*4)(r3) - lfd fp25,((JB_FPRS+11*2)*4)(r3) - mtcrf 0xFF,r5 - lwz r26,((JB_GPRS+12)*4)(r3) - lfd fp26,((JB_FPRS+12*2)*4)(r3) - lwz r27,((JB_GPRS+13)*4)(r3) - lfd fp27,((JB_FPRS+13*2)*4)(r3) - lwz r28,((JB_GPRS+14)*4)(r3) - lfd fp28,((JB_FPRS+14*2)*4)(r3) - lwz r29,((JB_GPRS+15)*4)(r3) - lfd fp29,((JB_FPRS+15*2)*4)(r3) - lwz r30,((JB_GPRS+16)*4)(r3) - lfd fp30,((JB_FPRS+16*2)*4)(r3) - lwz r31,((JB_GPRS+17)*4)(r3) - lfd fp31,((JB_FPRS+17*2)*4)(r3) - LIBC_PROBE (longjmp_target, 3, 4@3, -4@4, 4@0) - mr r3,r4 - blr -END (__longjmp_symbol) diff --git a/sysdeps/powerpc/powerpc32/fpu/__longjmp.S b/sysdeps/powerpc/powerpc32/fpu/__longjmp.S deleted file mode 100644 index 0e62245927..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/__longjmp.S +++ /dev/null @@ -1,40 +0,0 @@ -/* AltiVec/VMX (new) version of __longjmp for PowerPC. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#if !IS_IN (libc) -/* Build a non-versioned object for rtld-*. */ -# define __longjmp_symbol __longjmp -# include "__longjmp-common.S" - -#else /* IS_IN (libc) */ -strong_alias (__vmx__longjmp, __longjmp) -# define __longjmp_symbol __vmx__longjmp -# include "__longjmp-common.S" - -# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) -# define __NO_VMX__ -# undef JB_SIZE -# undef __longjmp_symbol -# define __longjmp_symbol __novmx__longjmp -# include "__longjmp-common.S" -# endif -#endif /* IS_IN (libc) */ diff --git a/sysdeps/powerpc/powerpc32/fpu/configure b/sysdeps/powerpc/powerpc32/fpu/configure deleted file mode 100644 index 98c6f30ca3..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/configure +++ /dev/null @@ -1,56 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/powerpc/powerpc32/fpu. - -# Test whether integer to floating point conversions use fcfid. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fcfid use" >&5 -$as_echo_n "checking for fcfid use... " >&6; } -if ${libc_cv_ppc_fcfid+:} false; then : - $as_echo_n "(cached) " >&6 -else - echo 'double foo (int x) { return (double) x; }' > conftest.c -libc_cv_ppc_fcfid=no -if { ac_try='${CC-cc} -S $CFLAGS conftest.c -o conftest.s 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - if grep '[ ]fcfid' conftest.s > /dev/null 2>&1; then - libc_cv_ppc_fcfid=yes - fi -fi -rm -rf conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ppc_fcfid" >&5 -$as_echo "$libc_cv_ppc_fcfid" >&6; } -if test $libc_cv_ppc_fcfid = yes; then - $as_echo "#define HAVE_PPC_FCFID 1" >>confdefs.h - -fi - -# Test whether floating point to long long conversions use fctidz. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fctidz use" >&5 -$as_echo_n "checking for fctidz use... " >&6; } -if ${libc_cv_ppc_fctidz+:} false; then : - $as_echo_n "(cached) " >&6 -else - echo 'long long int foo (double x) { return (long long int) x; }' > conftest.c -libc_cv_ppc_fctidz=no -if { ac_try='${CC-cc} -S $CFLAGS conftest.c -o conftest.s 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - if grep '[ ]fctidz' conftest.s > /dev/null 2>&1; then - libc_cv_ppc_fctidz=yes - fi -fi -rm -rf conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ppc_fctidz" >&5 -$as_echo "$libc_cv_ppc_fctidz" >&6; } -if test $libc_cv_ppc_fctidz = yes; then - $as_echo "#define HAVE_PPC_FCTIDZ 1" >>confdefs.h - -fi diff --git a/sysdeps/powerpc/powerpc32/fpu/configure.ac b/sysdeps/powerpc/powerpc32/fpu/configure.ac deleted file mode 100644 index 1899705aab..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/configure.ac +++ /dev/null @@ -1,34 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/powerpc/powerpc32/fpu. - -# Test whether integer to floating point conversions use fcfid. -AC_CACHE_CHECK([for fcfid use], [libc_cv_ppc_fcfid], [dnl -echo 'double foo (int x) { return (double) x; }' > conftest.c -libc_cv_ppc_fcfid=no -if AC_TRY_COMMAND(${CC-cc} -S $CFLAGS conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then -changequote(,)dnl - if grep '[ ]fcfid' conftest.s > /dev/null 2>&1; then - libc_cv_ppc_fcfid=yes - fi -changequote([,])dnl -fi -rm -rf conftest*]) -if test $libc_cv_ppc_fcfid = yes; then - AC_DEFINE([HAVE_PPC_FCFID]) -fi - -# Test whether floating point to long long conversions use fctidz. -AC_CACHE_CHECK([for fctidz use], [libc_cv_ppc_fctidz], [dnl -echo 'long long int foo (double x) { return (long long int) x; }' > conftest.c -libc_cv_ppc_fctidz=no -if AC_TRY_COMMAND(${CC-cc} -S $CFLAGS conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then -changequote(,)dnl - if grep '[ ]fctidz' conftest.s > /dev/null 2>&1; then - libc_cv_ppc_fctidz=yes - fi -changequote([,])dnl -fi -rm -rf conftest*]) -if test $libc_cv_ppc_fctidz = yes; then - AC_DEFINE([HAVE_PPC_FCTIDZ]) -fi diff --git a/sysdeps/powerpc/powerpc32/fpu/fix-int-fp-convert-zero.h b/sysdeps/powerpc/powerpc32/fpu/fix-int-fp-convert-zero.h deleted file mode 100644 index bd3eb62bf5..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/fix-int-fp-convert-zero.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Fix for conversion of integer 0 to floating point. PowerPC version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef FIX_INT_FP_CONVERT_ZERO_H -#define FIX_INT_FP_CONVERT_ZERO_H 1 - -/* The code sequences GCC generates for conversion of integers to - floating point result in -0 instead of +0 in FE_DOWNWARD mode when - the fcfid instruction is not used, as of GCC 5. See - . */ -#define FIX_INT_FP_CONVERT_ZERO (!HAVE_PPC_FCFID) - -#endif /* fix-int-fp-convert-zero.h */ diff --git a/sysdeps/powerpc/powerpc32/fpu/fprrest.S b/sysdeps/powerpc/powerpc32/fpu/fprrest.S deleted file mode 100644 index 7b2346471b..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/fprrest.S +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - Floating Point Registers (FPRs) restore routine -*/ - -#include - -ENTRY(_restfpr_all) - .globl C_TEXT(_restf14) - .globl C_TEXT(_restfpr_14) -C_TEXT(_restf14): -C_TEXT(_restfpr_14): lfd fp14,-144(r1) - .globl C_TEXT(_restf15) - .globl C_TEXT(_restfpr_15) -C_TEXT(_restf15): -C_TEXT(_restfpr_15): lfd fp15,-136(r1) - .globl C_TEXT(_restf16) - .globl C_TEXT(_restfpr_16) -C_TEXT(_restf16): -C_TEXT(_restfpr_16): lfd fp16,-128(r1) - .globl C_TEXT(_restf17) - .globl C_TEXT(_restfpr_17) -C_TEXT(_restf17): -C_TEXT(_restfpr_17): lfd fp17,-120(r1) - .globl C_TEXT(_restf18) - .globl C_TEXT(_restfpr_18) -C_TEXT(_restf18): -C_TEXT(_restfpr_18): lfd fp18,-112(r1) - .globl C_TEXT(_restf19) - .globl C_TEXT(_restfpr_19) -C_TEXT(_restf19): -C_TEXT(_restfpr_19): lfd fp19,-104(r1) - .globl C_TEXT(_restf20) - .globl C_TEXT(_restfpr_20) -C_TEXT(_restf20): -C_TEXT(_restfpr_20): lfd fp20,-96(r1) - .globl C_TEXT(_restf21) - .globl C_TEXT(_restfpr_21) -C_TEXT(_restf21): -C_TEXT(_restfpr_21): lfd fp21,-88(r1) - .globl C_TEXT(_restf22) - .globl C_TEXT(_restfpr_22) -C_TEXT(_restf22): -C_TEXT(_restfpr_22): lfd fp22,-80(r1) - .globl C_TEXT(_restf23) - .globl C_TEXT(_restfpr_23) -C_TEXT(_restf23): -C_TEXT(_restfpr_23): lfd fp23,-72(r1) - .globl C_TEXT(_restf24) - .globl C_TEXT(_restfpr_24) -C_TEXT(_restf24): -C_TEXT(_restfpr_24): lfd fp24,-64(r1) - .globl C_TEXT(_restf25) - .globl C_TEXT(_restfpr_25) -C_TEXT(_restf25): -C_TEXT(_restfpr_25): lfd fp25,-56(r1) - .globl C_TEXT(_restf26) - .globl C_TEXT(_restfpr_26) -C_TEXT(_restf26): -C_TEXT(_restfpr_26): lfd fp26,-48(r1) - .globl C_TEXT(_restf27) - .globl C_TEXT(_restfpr_27) -C_TEXT(_restf27): -C_TEXT(_restfpr_27): lfd fp27,-40(r1) - .globl C_TEXT(_restf28) - .globl C_TEXT(_restfpr_28) -C_TEXT(_restf28): -C_TEXT(_restfpr_28): lfd fp28,-32(r1) - .globl C_TEXT(_restf29) - .globl C_TEXT(_restfpr_29) -C_TEXT(_restf29): -C_TEXT(_restfpr_29): lwz r0,8(r1) #get return address from frame - lfd fp29,-24(r1) #restore f29 - mtlr r0 #move return address to LR - lfd fp30,-16(r1) #restore f30 - lfd fp31,-8(r1) #restore f31 - blr #return -END (_restfpr_all) diff --git a/sysdeps/powerpc/powerpc32/fpu/fprsave.S b/sysdeps/powerpc/powerpc32/fpu/fprsave.S deleted file mode 100644 index 975a8216cb..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/fprsave.S +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - Floating Point Registers (FPRs) save routine -*/ - -#include - -ENTRY(_savefpr_all) - .globl C_TEXT(_savef14) - .globl C_TEXT(_savefpr_14) -C_TEXT(_savef14): -C_TEXT(_savefpr_14): stfd fp14,-144(r1) - cfi_offset(fp14,-144) - .globl C_TEXT(_savef15) - .globl C_TEXT(_savefpr_15) -C_TEXT(_savef15): -C_TEXT(_savefpr_15): stfd fp15,-136(r1) - cfi_offset(fp15,-136) - .globl C_TEXT(_savef16) - .globl C_TEXT(_savefpr_16) -C_TEXT(_savef16): -C_TEXT(_savefpr_16): stfd fp16,-128(r1) - cfi_offset(fp16,-128) - .globl C_TEXT(_savef17) - .globl C_TEXT(_savefpr_17) -C_TEXT(_savef17): -C_TEXT(_savefpr_17): stfd fp17,-120(r1) - cfi_offset(fp17,-120) - .globl C_TEXT(_savef18) - .globl C_TEXT(_savefpr_18) -C_TEXT(_savef18): -C_TEXT(_savefpr_18): stfd fp18,-112(r1) - cfi_offset(fp18,-112) - .globl C_TEXT(_savef19) - .globl C_TEXT(_savefpr_19) -C_TEXT(_savef19): -C_TEXT(_savefpr_19): stfd fp19,-104(r1) - cfi_offset(fp19,-104) - .globl C_TEXT(_savef20) - .globl C_TEXT(_savefpr_20) -C_TEXT(_savef20): -C_TEXT(_savefpr_20): stfd fp20,-96(r1) - cfi_offset(fp20,-96) - .globl C_TEXT(_savef21) - .globl C_TEXT(_savefpr_21) -C_TEXT(_savef21): -C_TEXT(_savefpr_21): stfd fp21,-88(r1) - cfi_offset(fp21,-88) - .globl C_TEXT(_savef22) - .globl C_TEXT(_savefpr_22) -C_TEXT(_savef22): -C_TEXT(_savefpr_22): stfd fp22,-80(r1) - cfi_offset(fp22,-80) - .globl C_TEXT(_savef23) - .globl C_TEXT(_savefpr_23) -C_TEXT(_savef23): -C_TEXT(_savefpr_23): stfd fp23,-72(r1) - cfi_offset(fp23,-72) - .globl C_TEXT(_savef24) - .globl C_TEXT(_savefpr_24) -C_TEXT(_savef24): -C_TEXT(_savefpr_24): stfd fp24,-64(r1) - cfi_offset(fp24,-64) - .globl C_TEXT(_savef25) - .globl C_TEXT(_savefpr_25) -C_TEXT(_savef25): -C_TEXT(_savefpr_25): stfd fp25,-56(r1) - cfi_offset(fp25,-56) - .globl C_TEXT(_savef26) - .globl C_TEXT(_savefpr_26) -C_TEXT(_savef26): -C_TEXT(_savefpr_26): stfd fp26,-48(r1) - cfi_offset(fp26,-48) - .globl C_TEXT(_savef27) - .globl C_TEXT(_savefpr_27) -C_TEXT(_savef27): -C_TEXT(_savefpr_27): stfd fp27,-40(r1) - cfi_offset(fp27,-40) - .globl C_TEXT(_savef28) - .globl C_TEXT(_savefpr_28) -C_TEXT(_savef28): -C_TEXT(_savefpr_28): stfd fp28,-32(r1) - cfi_offset(fp28,-32) - .globl C_TEXT(_savef29) - .globl C_TEXT(_savefpr_29) -C_TEXT(_savef29): -C_TEXT(_savefpr_29): stfd fp29,-24(r1) #save f29 - stfd fp30,-16(r1) #save f30 - stfd fp31,-8(r1) #save f31 - cfi_offset(fp29,-24) - cfi_offset(fp30,-16) - cfi_offset(fp31,-8) - stw r0,8(r1) #save LR in callers frame - blr #return -END (_savefpr_all) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_ceil.S b/sysdeps/powerpc/powerpc32/fpu/s_ceil.S deleted file mode 100644 index 51b8c21027..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_ceil.S +++ /dev/null @@ -1,83 +0,0 @@ -/* ceil function. PowerPC32 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section .rodata.cst4,"aM",@progbits,4 - .align 2 -.LC0: /* 2**52 */ - .long 0x59800000 - - .section ".text" -ENTRY (__ceil) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,.LC0-got_label@ha - lfs fp13,.LC0-got_label@l(r9) - mtlr r11 - cfi_same_value (lr) -#else - lis r9,.LC0@ha - lfs fp13,.LC0@l(r9) -#endif - fabs fp0,fp1 - fsub fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO52) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,2 /* Set rounding mode toward +inf. */ - ble- cr6,.L4 - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - bge- cr6,.L9 /* if (x < 0.0) */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadd fp1,fp1,fp1 - blr - END (__ceil) - -weak_alias (__ceil, ceil) - -#ifdef NO_LONG_DOUBLE -weak_alias (__ceil, ceill) -strong_alias (__ceil, __ceill) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __ceil, ceill, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S b/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S deleted file mode 100644 index 9d8d8aa294..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S +++ /dev/null @@ -1,75 +0,0 @@ -/* float ceil function. PowerPC32 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata.cst4,"aM",@progbits,4 - .align 2 -.LC0: /* 2**23 */ - .long 0x4b000000 - - .section ".text" -ENTRY (__ceilf) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,.LC0-got_label@ha - lfs fp13,.LC0-got_label@l(r9) - mtlr r11 - cfi_same_value (lr) -#else - lis r9,.LC0@ha - lfs fp13,.LC0@l(r9) -#endif - fabs fp0,fp1 - fsubs fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO23) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,2 /* Set rounding mode toward +inf. */ - ble- cr6,.L4 - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - bge- cr6,.L9 /* if (x < 0.0) */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadds fp1,fp1,fp1 - blr - END (__ceilf) - -weak_alias (__ceilf, ceilf) - diff --git a/sysdeps/powerpc/powerpc32/fpu/s_copysign.S b/sysdeps/powerpc/powerpc32/fpu/s_copysign.S deleted file mode 100644 index 850dded3b6..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_copysign.S +++ /dev/null @@ -1,59 +0,0 @@ -/* Copy a sign bit between floating-point values. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This has been coded in assembler because GCC makes such a mess of it - when it's coded in C. */ - -#include -#include - -ENTRY(__copysign) -/* double [f1] copysign (double [f1] x, double [f2] y); - copysign(x,y) returns a value with the magnitude of x and - with the sign bit of y. */ - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - stfd fp2,8(r1) - lwz r3,8+HIWORD(r1) - cmpwi r3,0 - addi r1,r1,16 - cfi_adjust_cfa_offset (-16) - blt L(0) - fabs fp1,fp1 - blr -L(0): fnabs fp1,fp1 - blr - END (__copysign) - -weak_alias (__copysign,copysign) - -/* It turns out that it's safe to use this code even for single-precision. */ -weak_alias (__copysign,copysignf) -strong_alias(__copysign,__copysignf) - -#ifdef NO_LONG_DOUBLE -weak_alias (__copysign,copysignl) -strong_alias(__copysign,__copysignl) -#endif -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __copysign, copysignl, GLIBC_2_0) -# endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __copysign, copysignl, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_copysignf.S b/sysdeps/powerpc/powerpc32/fpu/s_copysignf.S deleted file mode 100644 index e05438ae7d..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_copysignf.S +++ /dev/null @@ -1 +0,0 @@ -/* __copysignf is in s_copysign.S */ diff --git a/sysdeps/powerpc/powerpc32/fpu/s_copysignl.S b/sysdeps/powerpc/powerpc32/fpu/s_copysignl.S deleted file mode 100644 index 272032b49e..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_copysignl.S +++ /dev/null @@ -1,66 +0,0 @@ -/* Copy a sign bit between floating-point values. - IBM extended format long double version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ENTRY(__copysignl) -/* long double [f1,f2] copysign (long double [f1,f2] x, long double [f3,f4] y); - copysign(x,y) returns a value with the magnitude of x and - with the sign bit of y. */ -#ifdef _ARCH_PPCGR - /* fsel available. */ - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - stfd fp3,8(r1) - fmr fp0,fp1 - fabs fp1,fp1 - lwz r3,8+HIWORD(r1) - cmpwi cr6,r3,0 - addi r1,r1,16 - cfi_adjust_cfa_offset (-16) - fneg fp3,fp2 - fsel fp2,fp0,fp2,fp3 - bgelr cr6 - fneg fp1,fp1 - fneg fp2,fp2 - blr -#else - stwu r1,-32(r1) - cfi_adjust_cfa_offset (32) - stfd fp3,8(r1) - stfd fp1,16(r1) - lwz r3,8+HIWORD(r1) - lwz r4,16+HIWORD(r1) - xor r3,r3,r4 - cmpwi cr6,r3,0 - addi r1,r1,32 - cfi_adjust_cfa_offset (-32) - bgelr cr6 - fneg fp1,fp1 - fneg fp2,fp2 - blr -#endif -END (__copysignl) - -#if IS_IN (libm) -long_double_symbol (libm, __copysignl, copysignl) -#else -long_double_symbol (libc, __copysignl, copysignl) -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_fabs.S b/sysdeps/powerpc/powerpc32/fpu/s_fabs.S deleted file mode 100644 index 53d21301ee..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_fabs.S +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __fabs, fabsl, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_fabsl.S b/sysdeps/powerpc/powerpc32/fpu/s_fabsl.S deleted file mode 100644 index 75608ec70c..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_fabsl.S +++ /dev/null @@ -1,52 +0,0 @@ -/* Copy a sign bit between floating-point values. - IBM extended format long double version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ENTRY(__fabsl) -/* long double [f1,f2] fabs (long double [f1,f2] x); - fabs(x,y) returns a value with the magnitude of x and - with the sign bit of y. */ -#ifdef _ARCH_PPCGR - /* fsel available. */ - fmr fp0,fp1 -#else - /* Use integer operations to test sign of high part to avoid - exceptions on sNaNs. */ - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - stfd fp1,8(r1) -#endif - fabs fp1,fp1 -#ifdef _ARCH_PPCGR - fneg fp3,fp2 - fsel fp2,fp0,fp2,fp3 -#else - lwz r3,8+HIWORD(r1) - cmpwi cr6,r3,0 - addi r1,r1,16 - cfi_adjust_cfa_offset (-16) - bgelr cr6 - fneg fp2,fp2 -#endif - blr -END (__fabsl) - -long_double_symbol (libm, __fabsl, fabsl) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_floor.S b/sysdeps/powerpc/powerpc32/fpu/s_floor.S deleted file mode 100644 index 90a1b184df..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_floor.S +++ /dev/null @@ -1,83 +0,0 @@ -/* Floor function. PowerPC32 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section .rodata.cst4,"aM",@progbits,4 - .align 2 -.LC0: /* 2**52 */ - .long 0x59800000 - - .section ".text" -ENTRY (__floor) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,.LC0-got_label@ha - lfs fp13,.LC0-got_label@l(r9) - mtlr r11 - cfi_same_value (lr) -#else - lis r9,.LC0@ha - lfs fp13,.LC0@l(r9) -#endif - fabs fp0,fp1 - fsub fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO52) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,3 /* Set rounding mode toward -inf. */ - ble- cr6,.L4 - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - bge- cr6,.L9 /* if (x < 0.0) */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadd fp1,fp1,fp1 - blr - END (__floor) - -weak_alias (__floor, floor) - -#ifdef NO_LONG_DOUBLE -weak_alias (__floor, floorl) -strong_alias (__floor, __floorl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __floor, floorl, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_floorf.S b/sysdeps/powerpc/powerpc32/fpu/s_floorf.S deleted file mode 100644 index b87e3bf33e..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_floorf.S +++ /dev/null @@ -1,75 +0,0 @@ -/* float Floor function. PowerPC32 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata.cst4,"aM",@progbits,4 - .align 2 -.LC0: /* 2**23 */ - .long 0x4b000000 - - .section ".text" -ENTRY (__floorf) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,.LC0-got_label@ha - lfs fp13,.LC0-got_label@l(r9) - mtlr r11 - cfi_same_value (lr) -#else - lis r9,.LC0@ha - lfs fp13,.LC0@l(r9) -#endif - fabs fp0,fp1 - fsubs fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO23) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,3 /* Set rounding mode toward -inf. */ - ble- cr6,.L4 - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - bge- cr6,.L9 /* if (x < 0.0) */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadds fp1,fp1,fp1 - blr - END (__floorf) - -weak_alias (__floorf, floorf) - diff --git a/sysdeps/powerpc/powerpc32/fpu/s_fma.S b/sysdeps/powerpc/powerpc32/fpu/s_fma.S deleted file mode 100644 index d40695c633..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_fma.S +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fma, fmal, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_isnan.S b/sysdeps/powerpc/powerpc32/fpu/s_isnan.S deleted file mode 100644 index 363535dcdb..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_isnan.S +++ /dev/null @@ -1,57 +0,0 @@ -/* isnan(). PowerPC32 version. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __isnan(x) */ - .machine power4 -EALIGN (__isnan, 4, 0) - mffs fp0 - mtfsb0 4*cr6+lt /* reset_fpscr_bit (FPSCR_VE) */ - fcmpu cr7,fp1,fp1 - mtfsf 255,fp0 - li r3,0 - beqlr+ cr7 /* (x == x) then not a NAN */ - li r3,1 /* else must be a NAN */ - blr - END (__isnan) - -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -#ifndef __isnan -strong_alias (__isnan, __isnanf) -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) -#endif - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -# endif -#endif - diff --git a/sysdeps/powerpc/powerpc32/fpu/s_llrint.c b/sysdeps/powerpc/powerpc32/fpu/s_llrint.c deleted file mode 100644 index 13d150cd68..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_llrint.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Round a double value to a long long in the current rounding mode. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -long long int -__llrint (double x) -{ - double rx = __rint (x); - if (HAVE_PPC_FCTIDZ || rx != x) - return (long long int) rx; - else - { - /* Avoid incorrect exceptions from libgcc conversions (as of GCC - 5): . */ - if (fabs (rx) < 0x1p31) - return (long long int) (long int) rx; - uint64_t i0; - EXTRACT_WORDS64 (i0, rx); - int exponent = ((i0 >> 52) & 0x7ff) - 0x3ff; - if (exponent < 63) - { - unsigned long long int mant - = (i0 & ((1ULL << 52) - 1)) | (1ULL << 52); - if (exponent < 52) - mant >>= 52 - exponent; - else - mant <<= exponent - 52; - return (long long int) ((i0 & (1ULL << 63)) != 0 ? -mant : mant); - } - else if (rx == (double) LLONG_MIN) - return LLONG_MIN; - else - return (long long int) (long int) rx << 32; - } -} -weak_alias (__llrint, llrint) -#ifdef NO_LONG_DOUBLE -strong_alias (__llrint, __llrintl) -weak_alias (__llrint, llrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llrint, llrintl, GLIBC_2_1); -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_llrintf.c b/sysdeps/powerpc/powerpc32/fpu/s_llrintf.c deleted file mode 100644 index 46365452a8..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_llrintf.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Round a float value to a long long in the current rounding mode. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -long long int -__llrintf (float x) -{ - float rx = __rintf (x); - if (HAVE_PPC_FCTIDZ || rx != x) - return (long long int) rx; - else - { - float arx = fabsf (rx); - /* Avoid incorrect exceptions from libgcc conversions (as of GCC - 5): . */ - if (arx < 0x1p31f) - return (long long int) (long int) rx; - else if (!(arx < 0x1p55f)) - return (long long int) (long int) (rx * 0x1p-32f) << 32; - uint32_t i0; - GET_FLOAT_WORD (i0, rx); - int exponent = ((i0 >> 23) & 0xff) - 0x7f; - unsigned long long int mant = (i0 & 0x7fffff) | 0x800000; - mant <<= exponent - 23; - return (long long int) ((i0 & 0x80000000) != 0 ? -mant : mant); - } -} -weak_alias (__llrintf, llrintf) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_llround.c b/sysdeps/powerpc/powerpc32/fpu/s_llround.c deleted file mode 100644 index 5e5a237b0c..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_llround.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Round double value to long long int. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Round to the nearest integer, with values exactly on a 0.5 boundary - rounded away from zero, regardless of the current rounding mode. - If (long long)x, when x is out of range of a long long, clips at - LLONG_MAX or LLONG_MIN, then this implementation also clips. */ - -long long int -__llround (double x) -{ - long long xr; - if (HAVE_PPC_FCTIDZ) - xr = (long long) x; - else - { - /* Avoid incorrect exceptions from libgcc conversions (as of GCC - 5): . */ - if (fabs (x) < 0x1p31) - xr = (long long int) (long int) x; - else - { - uint64_t i0; - EXTRACT_WORDS64 (i0, x); - int exponent = ((i0 >> 52) & 0x7ff) - 0x3ff; - if (exponent < 63) - { - unsigned long long int mant - = (i0 & ((1ULL << 52) - 1)) | (1ULL << 52); - if (exponent < 52) - /* llround is not required to raise "inexact". */ - mant >>= 52 - exponent; - else - mant <<= exponent - 52; - xr = (long long int) ((i0 & (1ULL << 63)) != 0 ? -mant : mant); - } - else if (x == (double) LLONG_MIN) - xr = LLONG_MIN; - else - xr = (long long int) (long int) x << 32; - } - } - /* Avoid spurious "inexact" converting LLONG_MAX to double, and from - subtraction when the result is out of range, by returning early - for arguments large enough that no rounding is needed. */ - if (!(fabs (x) < 0x1p52)) - return xr; - double xrf = (double) xr; - - if (x >= 0.0) - { - if (x - xrf >= 0.5) - xr += (long long) ((unsigned long long) xr + 1) > 0; - } - else - { - if (xrf - x >= 0.5) - xr -= (long long) ((unsigned long long) xr - 1) < 0; - } - return xr; -} -weak_alias (__llround, llround) -#ifdef NO_LONG_DOUBLE -strong_alias (__llround, __llroundl) -weak_alias (__llround, llroundl) -#endif -#if LONG_DOUBLE_COMPAT (libm, GLIBC_2_1) -compat_symbol (libm, __llround, llroundl, GLIBC_2_1); -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_llroundf.c b/sysdeps/powerpc/powerpc32/fpu/s_llroundf.c deleted file mode 100644 index 55452bac73..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_llroundf.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Round float value to long long int. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Round to the nearest integer, with values exactly on a 0.5 boundary - rounded away from zero, regardless of the current rounding mode. - If (long long)x, when x is out of range of a long long, clips at - LLONG_MAX or LLONG_MIN, then this implementation also clips. */ - -long long int -__llroundf (float x) -{ - long long xr; - if (HAVE_PPC_FCTIDZ) - xr = (long long) x; - else - { - float ax = fabsf (x); - /* Avoid incorrect exceptions from libgcc conversions (as of GCC - 5): . */ - if (ax < 0x1p31f) - xr = (long long int) (long int) x; - else if (!(ax < 0x1p55f)) - xr = (long long int) (long int) (x * 0x1p-32f) << 32; - else - { - uint32_t i0; - GET_FLOAT_WORD (i0, x); - int exponent = ((i0 >> 23) & 0xff) - 0x7f; - unsigned long long int mant = (i0 & 0x7fffff) | 0x800000; - mant <<= exponent - 23; - xr = (long long int) ((i0 & 0x80000000) != 0 ? -mant : mant); - } - } - /* Avoid spurious "inexact" converting LLONG_MAX to float, and from - subtraction when the result is out of range, by returning early - for arguments large enough that no rounding is needed. */ - if (!(fabsf (x) < 0x1p23f)) - return xr; - float xrf = (float) xr; - - if (x >= 0.0) - { - if (x - xrf >= 0.5) - xr += (long long) ((unsigned long long) xr + 1) > 0; - } - else - { - if (xrf - x >= 0.5) - xr -= (long long) ((unsigned long long) xr - 1) < 0; - } - return xr; -} -weak_alias (__llroundf, llroundf) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_lrint.S b/sysdeps/powerpc/powerpc32/fpu/s_lrint.S deleted file mode 100644 index 8d54d95b6a..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_lrint.S +++ /dev/null @@ -1,46 +0,0 @@ -/* Round double to long int. PowerPC32 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* long int[r3] __lrint (double x[fp1]) */ -ENTRY (__lrint) - stwu r1,-16(r1) - fctiw fp13,fp1 - stfd fp13,8(r1) - nop /* Ensure the following load is in a different dispatch group */ - nop /* to avoid pipe stall on POWER4&5. */ - nop - lwz r3,8+LOWORD(r1) - addi r1,r1,16 - blr - END (__lrint) - -weak_alias (__lrint, lrint) - -strong_alias (__lrint, __lrintf) -weak_alias (__lrint, lrintf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__lrint, __lrintl) -weak_alias (__lrint, lrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lrint, lrintl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_lround.S b/sysdeps/powerpc/powerpc32/fpu/s_lround.S deleted file mode 100644 index e4ec1bb0b6..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_lround.S +++ /dev/null @@ -1,129 +0,0 @@ -/* lround function. PowerPC32 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section .rodata.cst4,"aM",@progbits,4 - .align 2 -.LC0: /* 0.5 */ - .long 0x3f000000 -.LC1: /* 2^52. */ - .long 0x59800000 - .section .rodata.cst8,"aM",@progbits,8 - .align 3 -.LC2: /* 0x7fffffff.8p0. */ - .long 0x41dfffff - .long 0xffe00000 -.LC3: /* -0x80000000.8p0. */ - .long 0xc1e00000 - .long 0x00100000 - .section ".text" - -/* long [r3] lround (float x [fp1]) - IEEE 1003.1 lround function. IEEE specifies "round to the nearest - integer value, rounding halfway cases away from zero, regardless of - the current rounding mode." However PowerPC Architecture defines - "round to Nearest" as "Choose the best approximation. In case of a - tie, choose the one that is even (least significant bit o).". - So we can't use the PowerPC "round to Nearest" mode. Instead we set - "round toward Zero" mode and round by adding +-0.5 before rounding - to the integer value. It is necessary to detect when x is - (+-)0x1.fffffffffffffp-2 because adding +-0.5 in this case will - cause an erroneous shift, carry and round. We simply return 0 if - 0.5 > x > -0.5. */ - -ENTRY (__lround) - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - SETUP_GOT_ACCESS(r9,got_label) - addis r10,r9,.LC0-got_label@ha - lfs fp10,.LC0-got_label@l(r10) - addis r10,r9,.LC1-got_label@ha - lfs fp11,.LC1-got_label@l(r10) - addis r10,r9,.LC2-got_label@ha - lfd fp9,.LC2-got_label@l(r10) - addis r10,r9,.LC3-got_label@ha - lfd fp8,.LC3-got_label@l(r10) - mtlr r11 - cfi_same_value (lr) -#else - lis r9,.LC0@ha - lfs fp10,.LC0@l(r9) - lis r9,.LC1@ha - lfs fp11,.LC1@l(r9) - lis r9,.LC2@ha - lfd fp9,.LC2@l(r9) - lis r9,.LC3@ha - lfd fp8,.LC3@l(r9) -#endif - fabs fp2, fp1 /* Get the absolute value of x. */ - fsub fp12,fp10,fp10 /* Compute 0.0. */ - fcmpu cr6, fp2, fp10 /* if |x| < 0.5 */ - fcmpu cr5, fp1, fp9 /* if x >= 0x7fffffff.8p0 */ - fcmpu cr1, fp1, fp8 /* if x <= -0x80000000.8p0 */ - fcmpu cr7, fp1, fp12 /* x is negative? x < 0.0 */ - blt- cr6,.Lretzero - bge- cr5,.Loflow - ble- cr1,.Loflow - /* Test whether an integer to avoid spurious "inexact". */ - fadd fp3,fp2,fp11 - fsub fp3,fp3,fp11 - fcmpu cr5, fp2, fp3 - beq cr5,.Lnobias - fadd fp3,fp2,fp10 /* |x|+=0.5 bias to prepare to round. */ - bge cr7,.Lconvert /* x is positive so don't negate x. */ - fnabs fp3,fp3 /* -(|x|+=0.5) */ -.Lconvert: - fctiwz fp4,fp3 /* Convert to Integer word lround toward 0. */ - stfd fp4,8(r1) - nop /* Ensure the following load is in a different dispatch */ - nop /* group to avoid pipe stall on POWER4&5. */ - nop - lwz r3,8+LOWORD(r1) /* Load return as integer. */ -.Lout: - addi r1,r1,16 - blr -.Lretzero: /* when 0.5 > x > -0.5 */ - li r3,0 /* return 0. */ - b .Lout -.Lnobias: - fmr fp3,fp1 - b .Lconvert -.Loflow: - fmr fp3,fp11 - bge cr7,.Lconvert - fnabs fp3,fp3 - b .Lconvert - END (__lround) - -weak_alias (__lround, lround) - -strong_alias (__lround, __lroundf) -weak_alias (__lround, lroundf) - -#ifdef NO_LONG_DOUBLE -weak_alias (__lround, lroundl) -strong_alias (__lround, __lroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lround, lroundl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_lroundf.S b/sysdeps/powerpc/powerpc32/fpu/s_lroundf.S deleted file mode 100644 index 6289e0be58..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_lroundf.S +++ /dev/null @@ -1 +0,0 @@ -/* __lroundf is in s_lround.S */ diff --git a/sysdeps/powerpc/powerpc32/fpu/s_nearbyint.S b/sysdeps/powerpc/powerpc32/fpu/s_nearbyint.S deleted file mode 100644 index df590e08bd..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_nearbyint.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Round to int floating-point values. PowerPC32 version. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Adhemerval Zanella , 2011 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This has been coded in assembler because GCC makes such a mess of it - when it's coded in C. */ - -#include -#include - - -/* double [fp1] nearbyint(double [fp1] x) */ - - .section .rodata.cst4,"aM",@progbits,4 - .align 2 -.LC0: /* 2**52 */ - .long 0x59800000 /* TWO52: 2**52 */ - - .section ".text" -ENTRY (__nearbyint) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - lfs fp13,.LC0-1b@l(r9) - mtlr r11 - cfi_same_value (lr) -#else - lis r9,.LC0@ha - lfs fp13,.LC0@l(r9) -#endif - fabs fp0,fp1 - fsub fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO52 */ - bge cr7,.L10 - fcmpu cr7,fp1,fp12 /* if (x > 0.0 */ - ble cr7,L(lessthanzero) - mffs fp11 - mtfsb0 4*cr7+lt /* Disable FE_INEXACT exception */ - fadd fp1,fp1,fp13 /* x += TWO52 */ - fsub fp1,fp1,fp13 /* x -= TWO52 */ - fabs fp1,fp1 /* if (x == 0.0 */ - mtfsf 0xff,fp11 /* Restore FE_INEXACT state. */ - blr -L(lessthanzero): - bgelr cr7 - mffs fp11 - mtfsb0 4*cr7+lt /* Disable FE_INEXACT exception */ - fsub fp1,fp1,fp13 /* x -= TWO52 */ - fadd fp1,fp1,fp13 /* x += TWO52 */ - fnabs fp1,fp1 /* if (x == 0.0) */ - mtfsf 0xff,fp11 /* Restore FE_INEXACT state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadd fp1,fp1,fp1 - blr -END (__nearbyint) - -weak_alias (__nearbyint, nearbyint) - -#ifdef NO_LONG_DOUBLE -weak_alias (__nearbyint, nearbyintl) -strong_alias (__nearbyint, __nearbyintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __nearbyint, nearbyintl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_nearbyintf.S b/sysdeps/powerpc/powerpc32/fpu/s_nearbyintf.S deleted file mode 100644 index fb4c6e4cee..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_nearbyintf.S +++ /dev/null @@ -1,78 +0,0 @@ -/* Round to int floating-point values. PowerPC32 version. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Adhemerval Zanella , 2011 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This has been coded in assembler because GCC makes such a mess of it - when it's coded in C. */ - -#include - - -/* float [fp1] nearbyintf(float [fp1] x) */ - - .section .rodata.cst4,"aM",@progbits,4 - .align 2 -.LC0: - .long 0x4B000000 /* TWO23: 2**23 */ - - .section ".text" -ENTRY (__nearbyintf) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - lfs fp13,.LC0-1b@l(r9) - mtlr r11 - cfi_same_value (lr) -#else - lis r9,.LC0@ha - lfs fp13,.LC0@l(r9) -#endif - fabs fp0,fp1 - fsub fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO23 */ - bge cr7,.L10 - fcmpu cr7,fp1,fp12 /* if (x > 0.0 */ - ble cr7,L(lessthanzero) - mffs fp11 - mtfsb0 4*cr7+lt /* Disable FE_INEXACT exception */ - fadds fp1,fp1,fp13 /* x += TWO23 */ - fsubs fp1,fp1,fp13 /* x -= TWO23 */ - fabs fp1,fp1 /* if (x == 0.0) */ - mtfsf 0xff,fp11 /* Restore FE_INEXACT state. */ - blr -L(lessthanzero): - bgelr cr7 - mffs fp11 - mtfsb0 4*cr7+lt /* Disable FE_INEXACT exception */ - fsubs fp1,fp1,fp13 /* x -= TWO23 */ - fadds fp1,fp1,fp13 /* x += TWO23 */ - fnabs fp1,fp1 /* if (x == 0.0) */ - mtfsf 0xff,fp11 /* Restore FE_INEXACT state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadds fp1,fp1,fp1 - blr -END (__nearbyintf) - -weak_alias (__nearbyintf, nearbyintf) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_rint.S b/sysdeps/powerpc/powerpc32/fpu/s_rint.S deleted file mode 100644 index a1c3116447..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_rint.S +++ /dev/null @@ -1,76 +0,0 @@ -/* Round to int floating-point values. PowerPC32 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This has been coded in assembler because GCC makes such a mess of it - when it's coded in C. */ - -#include -#include - - .section .rodata.cst4,"aM",@progbits,4 - .align 2 -.LC0: /* 2**52 */ - .long 0x59800000 - - .section ".text" -ENTRY (__rint) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,.LC0-got_label@ha - lfs fp13,.LC0-got_label@l(r9) - mtlr r11 - cfi_same_value (lr) -#else - lis r9,.LC0@ha - lfs fp13,.LC0@l(r9) -#endif - fabs fp0,fp1 - fsub fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO52) */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl cr7,.L10 - bng cr6,.L4 - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fabs fp1,fp1 /* if (x == 0.0) */ - blr /* x = 0.0; */ -.L4: - bnllr cr6 /* if (x < 0.0) */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - blr /* x = -0.0; */ -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadd fp1,fp1,fp1 - blr - END (__rint) - -weak_alias (__rint, rint) - -#ifdef NO_LONG_DOUBLE -weak_alias (__rint, rintl) -strong_alias (__rint, __rintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __rint, rintl, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_rintf.S b/sysdeps/powerpc/powerpc32/fpu/s_rintf.S deleted file mode 100644 index 70e52e894d..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_rintf.S +++ /dev/null @@ -1,65 +0,0 @@ -/* Round float to int floating-point values. PowerPC32 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata.cst4,"aM",@progbits,4 - .align 2 -.LC0: /* 2**23 */ - .long 0x4b000000 - - .section ".text" -ENTRY (__rintf) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,.LC0-got_label@ha - lfs fp13,.LC0-got_label@l(r9) - mtlr r11 - cfi_same_value (lr) -#else - lis r9,.LC0@ha - lfs fp13,.LC0@l(r9) -#endif - fabs fp0,fp1 - fsubs fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO23) */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl cr7,.L10 - bng cr6,.L4 - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fabs fp1,fp1 /* if (x == 0.0) */ - blr /* x = 0.0; */ -.L4: - bnllr cr6 /* if (x < 0.0) */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - blr /* x = -0.0; */ -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadds fp1,fp1,fp1 - blr - END (__rintf) - -weak_alias (__rintf, rintf) - diff --git a/sysdeps/powerpc/powerpc32/fpu/s_round.S b/sysdeps/powerpc/powerpc32/fpu/s_round.S deleted file mode 100644 index f539890b17..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_round.S +++ /dev/null @@ -1,104 +0,0 @@ -/* round function. PowerPC32 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section .rodata.cst8,"aM",@progbits,8 - .align 2 -.LC0: /* 2**52 */ - .long 0x59800000 -.LC1: /* 0.5 */ - .long 0x3f000000 - -/* double [fp1] round (double x [fp1]) - IEEE 1003.1 round function. IEEE specifies "round to the nearest - integer value, rounding halfway cases away from zero, regardless of - the current rounding mode." However PowerPC Architecture defines - "Round to Nearest" as "Choose the best approximation. In case of a - tie, choose the one that is even (least significant bit o).". - So we can't use the PowerPC "Round to Nearest" mode. Instead we set - "Round toward Zero" mode and round by adding +-0.5 before rounding - to the integer value. */ - - .section ".text" -ENTRY (__round) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,.LC0-got_label@ha - addi r9,r9,.LC0-got_label@l - mtlr r11 - cfi_same_value (lr) - lfs fp13,0(r9) -#else - lis r9,.LC0@ha - lfs fp13,.LC0@l(r9) -#endif - fabs fp0,fp1 - fsub fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO52) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,1 /* Set rounding mode toward 0. */ -#ifdef SHARED - lfs fp10,.LC1-.LC0(r9) -#else - lis r9,.LC1@ha - lfs fp10,.LC1@l(r9) -#endif - ble- cr6,.L4 - fadd fp1,fp1,fp10 /* x+= 0.5; */ - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - fsub fp9,fp1,fp10 /* x+= 0.5; */ - bge- cr6,.L9 /* if (x < 0.0) */ - fsub fp1,fp9,fp13 /* x-= TWO52; */ - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadd fp1,fp1,fp1 - blr - END (__round) - -weak_alias (__round, round) - -#ifdef NO_LONG_DOUBLE -weak_alias (__round, roundl) -strong_alias (__round, __roundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __round, roundl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_roundf.S b/sysdeps/powerpc/powerpc32/fpu/s_roundf.S deleted file mode 100644 index 5daf84b598..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_roundf.S +++ /dev/null @@ -1,95 +0,0 @@ -/* roundf function. PowerPC32 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - .align 3 -.LC0: /* 2**23 */ - .long 0x4b000000 -.LC1: /* 0.5 */ - .long 0x3f000000 - -/* float [fp1] roundf (float x [fp1]) - IEEE 1003.1 round function. IEEE specifies "round to the nearest - integer value, rounding halfway cases away from zero, regardless of - the current rounding mode." However PowerPC Architecture defines - "Round to Nearest" as "Choose the best approximation. In case of a - tie, choose the one that is even (least significant bit o).". - So we can't use the PowerPC "Round to Nearest" mode. Instead we set - "Round toward Zero" mode and round by adding +-0.5 before rounding - to the integer value. */ - - .section ".text" -ENTRY (__roundf ) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,.LC0-got_label@ha - addi r9,r9,.LC0-got_label@l - mtlr r11 - cfi_same_value (lr) - lfs fp13,0(r9) -#else - lis r9,.LC0@ha - lfs fp13,.LC0@l(r9) -#endif - fabs fp0,fp1 - fsubs fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO23) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,1 /* Set rounding mode toward 0. */ -#ifdef SHARED - lfs fp10,.LC1-.LC0(r9) -#else - lfs fp10,.LC1@l(r9) -#endif - ble- cr6,.L4 - fadds fp1,fp1,fp10 /* x+= 0.5; */ - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - fsubs fp9,fp1,fp10 /* x+= 0.5; */ - bge- cr6,.L9 /* if (x < 0.0) */ - fsubs fp1,fp9,fp13 /* x-= TWO23; */ - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadds fp1,fp1,fp1 - blr - END (__roundf) - -weak_alias (__roundf, roundf) - diff --git a/sysdeps/powerpc/powerpc32/fpu/s_trunc.S b/sysdeps/powerpc/powerpc32/fpu/s_trunc.S deleted file mode 100644 index 85d292c03c..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_trunc.S +++ /dev/null @@ -1,90 +0,0 @@ -/* trunc function. PowerPC32 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section .rodata.cst4,"aM",@progbits,4 - .align 2 -.LC0: /* 2**52 */ - .long 0x59800000 - -/* double [fp1] trunc (double x [fp1]) - IEEE 1003.1 trunc function. IEEE specifies "trunc to the integer - value, in floating format, nearest to but no larger in magnitude - then the argument." - We set "round toward Zero" mode and trunc by adding +-2**52 then - subtracting +-2**52. */ - - .section ".text" -ENTRY (__trunc) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,.LC0-got_label@ha - lfs fp13,.LC0-got_label@l(r9) - mtlr r11 - cfi_same_value (lr) -#else - lis r9,.LC0@ha - lfs fp13,.LC0@l(r9) -#endif - fabs fp0,fp1 - fsub fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO52) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,1 /* Set rounding toward 0 mode. */ - ble- cr6,.L4 - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - bge- cr6,.L9 /* if (x < 0.0) */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadd fp1,fp1,fp1 - blr - END (__trunc) - -weak_alias (__trunc, trunc) - -#ifdef NO_LONG_DOUBLE -weak_alias (__trunc, truncl) -strong_alias (__trunc, __truncl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __trunc, truncl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/fpu/s_truncf.S b/sysdeps/powerpc/powerpc32/fpu/s_truncf.S deleted file mode 100644 index 9b91e3f0a5..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/s_truncf.S +++ /dev/null @@ -1,82 +0,0 @@ -/* truncf function. PowerPC32 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata.cst4,"aM",@progbits,4 - .align 2 -.LC0: /* 2**23 */ - .long 0x4b000000 - -/* float [fp1] truncf (float x [fp1]) - IEEE 1003.1 trunc function. IEEE specifies "trunc to the integer - value, in floating format, nearest to but no larger in magnitude - then the argument." - We set "round toward Zero" mode and trunc by adding +-2**23 then - subtracting +-2**23. */ - - .section ".text" -ENTRY (__truncf) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,.LC0-got_label@ha - lfs fp13,.LC0-got_label@l(r9) - mtlr r11 - cfi_same_value (lr) -#else - lis r9,.LC0@ha - lfs fp13,.LC0@l(r9) -#endif - fabs fp0,fp1 - fsubs fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO23) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,1 /* Set rounding toward 0 mode. */ - ble- cr6,.L4 - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - bge- cr6,.L9 /* if (x < 0.0) */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadds fp1,fp1,fp1 - blr - END (__truncf) - -weak_alias (__truncf, truncf) - diff --git a/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S b/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S deleted file mode 100644 index 19ad07ee56..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S +++ /dev/null @@ -1,183 +0,0 @@ -/* setjmp for PowerPC. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#define _ASM -#ifdef __NO_VMX__ -# include -#else -# include -#endif - - .machine "altivec" -ENTRY (__sigsetjmp_symbol) - -#ifdef PTR_MANGLE - mr r5,r1 - PTR_MANGLE(r5, r6) - stw r5,(JB_GPR1*4)(3) -#else - stw r1,(JB_GPR1*4)(3) -#endif - mflr r0 - /* setjmp probe expects longjmp first argument (4@3), second argument - (-4@4), and target address (4@0), respectively. */ - LIBC_PROBE (setjmp, 3, 4@3, -4@4, 4@0) - stw r14,((JB_GPRS+0)*4)(3) - stfd fp14,((JB_FPRS+0*2)*4)(3) -#ifdef PTR_MANGLE - PTR_MANGLE2 (r0, r6) -#endif - stw r0,(JB_LR*4)(3) - stw r15,((JB_GPRS+1)*4)(3) - stfd fp15,((JB_FPRS+1*2)*4)(3) - mfcr r0 - stw r16,((JB_GPRS+2)*4)(3) - stfd fp16,((JB_FPRS+2*2)*4)(3) - stw r0,(JB_CR*4)(3) - stw r17,((JB_GPRS+3)*4)(3) - stfd fp17,((JB_FPRS+3*2)*4)(3) - stw r18,((JB_GPRS+4)*4)(3) - stfd fp18,((JB_FPRS+4*2)*4)(3) - stw r19,((JB_GPRS+5)*4)(3) - stfd fp19,((JB_FPRS+5*2)*4)(3) - stw r20,((JB_GPRS+6)*4)(3) - stfd fp20,((JB_FPRS+6*2)*4)(3) - stw r21,((JB_GPRS+7)*4)(3) - stfd fp21,((JB_FPRS+7*2)*4)(3) - stw r22,((JB_GPRS+8)*4)(3) - stfd fp22,((JB_FPRS+8*2)*4)(3) - stw r23,((JB_GPRS+9)*4)(3) - stfd fp23,((JB_FPRS+9*2)*4)(3) - stw r24,((JB_GPRS+10)*4)(3) - stfd fp24,((JB_FPRS+10*2)*4)(3) - stw r25,((JB_GPRS+11)*4)(3) - stfd fp25,((JB_FPRS+11*2)*4)(3) - stw r26,((JB_GPRS+12)*4)(3) - stfd fp26,((JB_FPRS+12*2)*4)(3) - stw r27,((JB_GPRS+13)*4)(3) - stfd fp27,((JB_FPRS+13*2)*4)(3) - stw r28,((JB_GPRS+14)*4)(3) - stfd fp28,((JB_FPRS+14*2)*4)(3) - stw r29,((JB_GPRS+15)*4)(3) - stfd fp29,((JB_FPRS+15*2)*4)(3) - stw r30,((JB_GPRS+16)*4)(3) - stfd fp30,((JB_FPRS+16*2)*4)(3) - stw r31,((JB_GPRS+17)*4)(3) - stfd fp31,((JB_FPRS+17*2)*4)(3) -#ifndef __NO_VMX__ -# ifdef PIC - mflr r6 - cfi_register(lr,r6) - SETUP_GOT_ACCESS(r5,got_label) - addis r5,r5,_GLOBAL_OFFSET_TABLE_-got_label@ha - addi r5,r5,_GLOBAL_OFFSET_TABLE_-got_label@l - mtlr r6 - cfi_same_value (lr) -# ifdef SHARED -# if IS_IN (rtld) - /* Inside ld.so we use the local alias to avoid runtime GOT - relocations. */ - lwz r5,_rtld_local_ro@got(r5) -# else - lwz r5,_rtld_global_ro@got(r5) -# endif - lwz r5,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+LOWORD(r5) -# else - lwz r5,_dl_hwcap@got(r5) - lwz r5,LOWORD(r5) -# endif -# else - lis r6,(_dl_hwcap+LOWORD)@ha - lwz r5,(_dl_hwcap+LOWORD)@l(r6) -# endif - andis. r5,r5,(PPC_FEATURE_HAS_ALTIVEC >> 16) - beq L(no_vmx) - la r5,((JB_VRS)*4)(3) - andi. r6,r5,0xf - mfspr r0,VRSAVE - stw r0,((JB_VRSAVE)*4)(3) - addi r6,r5,16 - beq+ L(aligned_save_vmx) - - lvsr v0,0,r5 - lvsl v1,0,r5 - addi r6,r5,-16 - -# define save_misaligned_vmx(savevr,prevvr,shiftvr,tmpvr,savegpr,addgpr) \ - addi addgpr,addgpr,32; \ - vperm tmpvr,prevvr,savevr,shiftvr; \ - stvx tmpvr,0,savegpr - - /* - * We have to be careful not to corrupt the data below v20 and - * above v31. To keep things simple we just rotate both ends in - * the opposite direction to our main permute so we can use - * the common macro. - */ - - /* load and rotate data below v20 */ - lvx v2,0,r5 - vperm v2,v2,v2,v1 - save_misaligned_vmx(v20,v2,v0,v3,r5,r6) - save_misaligned_vmx(v21,v20,v0,v3,r6,r5) - save_misaligned_vmx(v22,v21,v0,v3,r5,r6) - save_misaligned_vmx(v23,v22,v0,v3,r6,r5) - save_misaligned_vmx(v24,v23,v0,v3,r5,r6) - save_misaligned_vmx(v25,v24,v0,v3,r6,r5) - save_misaligned_vmx(v26,v25,v0,v3,r5,r6) - save_misaligned_vmx(v27,v26,v0,v3,r6,r5) - save_misaligned_vmx(v28,v27,v0,v3,r5,r6) - save_misaligned_vmx(v29,v28,v0,v3,r6,r5) - save_misaligned_vmx(v30,v29,v0,v3,r5,r6) - save_misaligned_vmx(v31,v30,v0,v3,r6,r5) - /* load and rotate data above v31 */ - lvx v2,0,r6 - vperm v2,v2,v2,v1 - save_misaligned_vmx(v2,v31,v0,v3,r5,r6) - - b L(no_vmx) - -L(aligned_save_vmx): - stvx 20,0,r5 - addi r5,r5,32 - stvx 21,0,r6 - addi r6,r6,32 - stvx 22,0,r5 - addi r5,r5,32 - stvx 23,0,r6 - addi r6,r6,32 - stvx 24,0,r5 - addi r5,r5,32 - stvx 25,0,r6 - addi r6,r6,32 - stvx 26,0,r5 - addi r5,r5,32 - stvx 27,0,r6 - addi r6,r6,32 - stvx 28,0,r5 - addi r5,r5,32 - stvx 29,0,r6 - addi r6,r6,32 - stvx 30,0,r5 - stvx 31,0,r6 -L(no_vmx): -#endif - b __sigjmp_save_symbol@local -END (__sigsetjmp_symbol) diff --git a/sysdeps/powerpc/powerpc32/fpu/setjmp.S b/sysdeps/powerpc/powerpc32/fpu/setjmp.S deleted file mode 100644 index 02b17d3467..0000000000 --- a/sysdeps/powerpc/powerpc32/fpu/setjmp.S +++ /dev/null @@ -1,47 +0,0 @@ -/* non altivec (old) version of setjmp for PowerPC. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#if !IS_IN (libc) -/* Build a non-versioned object for rtld-*. */ -# define __sigsetjmp_symbol __sigsetjmp -# define __sigjmp_save_symbol __sigjmp_save -# include "setjmp-common.S" - -#else /* IS_IN (libc) */ -/* Build a versioned object for libc. */ -versioned_symbol (libc, __vmx__sigsetjmp, __sigsetjmp, GLIBC_2_3_4) -# define __sigsetjmp_symbol __vmx__sigsetjmp -# define __sigjmp_save_symbol __vmx__sigjmp_save -# include "setjmp-common.S" -libc_hidden_ver (__vmx__sigsetjmp, __sigsetjmp) - -# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) -# define __NO_VMX__ -# undef __sigsetjmp_symbol -# undef __sigjmp_save_symbol -# undef JB_SIZE -compat_symbol (libc, __novmx__sigsetjmp, __sigsetjmp, GLIBC_2_0) -# define __sigsetjmp_symbol __novmx__sigsetjmp -# define __sigjmp_save_symbol __novmx__sigjmp_save -# include "setjmp-common.S" -# endif -#endif /* IS_IN (libc) */ diff --git a/sysdeps/powerpc/powerpc32/gprrest0.S b/sysdeps/powerpc/powerpc32/gprrest0.S deleted file mode 100644 index a379e0248e..0000000000 --- a/sysdeps/powerpc/powerpc32/gprrest0.S +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - General Purpose Register (GPR) restore routine - when Floating Point Registers (FPRs) are not saved - - Note: This restore routine must not be called when GPR30 or - GPR31, or both, are the only registers beings saved. In these - cases, the saving and restoring must be done inline. -*/ - -#include - -ENTRY(_restgpr0_all) - .globl C_TEXT(_restgpr0_13) -C_TEXT(_restgpr0_13): lwz r13,-76(r1) - .globl C_TEXT(_restgpr0_14) -C_TEXT(_restgpr0_14): lwz r14,-72(r1) - .globl C_TEXT(_restgpr0_15) -C_TEXT(_restgpr0_15): lwz r15,-68(r1) - .globl C_TEXT(_restgpr0_16) -C_TEXT(_restgpr0_16): lwz r16,-64(r1) - .globl C_TEXT(_restgpr0_17) -C_TEXT(_restgpr0_17): lwz r17,-60(r1) - .globl C_TEXT(_restgpr0_18) -C_TEXT(_restgpr0_18): lwz r18,-56(r1) - .globl C_TEXT(_restgpr0_19) -C_TEXT(_restgpr0_19): lwz r19,-52(r1) - .globl C_TEXT(_restgpr0_20) -C_TEXT(_restgpr0_20): lwz r20,-48(r1) - .globl C_TEXT(_restgpr0_21) -C_TEXT(_restgpr0_21): lwz r21,-44(r1) - .globl C_TEXT(_restgpr0_22) -C_TEXT(_restgpr0_22): lwz r22,-40(r1) - .globl C_TEXT(_restgpr0_23) -C_TEXT(_restgpr0_23): lwz r23,-36(r1) - .globl C_TEXT(_restgpr0_24) -C_TEXT(_restgpr0_24): lwz r24,-32(r1) - .globl C_TEXT(_restgpr0_25) -C_TEXT(_restgpr0_25): lwz r25,-28(r1) - .globl C_TEXT(_restgpr0_26) -C_TEXT(_restgpr0_26): lwz r26,-24(r1) - .globl C_TEXT(_restgpr0_27) -C_TEXT(_restgpr0_27): lwz r27,-20(r1) - .globl C_TEXT(_restgpr0_28) -C_TEXT(_restgpr0_28): lwz r28,-16(r1) - .globl C_TEXT(_restgpr0_29) -C_TEXT(_restgpr0_29): lwz r0,8(r1) #get return address from frame - lwz r29,-12(r1) #restore r29 - mtlr r0 #move return address to LR - lwz r30,-8(r1) #restore r30 - lwz r31,-4(r1) #restore r31 - blr #return -END (_restgpr0_all) diff --git a/sysdeps/powerpc/powerpc32/gprrest1.S b/sysdeps/powerpc/powerpc32/gprrest1.S deleted file mode 100644 index c3ac120ca5..0000000000 --- a/sysdeps/powerpc/powerpc32/gprrest1.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - General Purpose Register (GPR) restore routine - when Floating Point Registers (FPRs) are saved -*/ - -#include - -ENTRY(_restgpr1_all) - .globl C_TEXT(_restgpr1_13) -C_TEXT(_restgpr1_13): lwz r13,-76(r12) - .globl C_TEXT(_restgpr1_14) -C_TEXT(_restgpr1_14): lwz r14,-72(r12) - .globl C_TEXT(_restgpr1_15) -C_TEXT(_restgpr1_15): lwz r15,-68(r12) - .globl C_TEXT(_restgpr1_16) -C_TEXT(_restgpr1_16): lwz r16,-64(r12) - .globl C_TEXT(_restgpr1_17) -C_TEXT(_restgpr1_17): lwz r17,-60(r12) - .globl C_TEXT(_restgpr1_18) -C_TEXT(_restgpr1_18): lwz r18,-56(r12) - .globl C_TEXT(_restgpr1_19) -C_TEXT(_restgpr1_19): lwz r19,-52(r12) - .globl C_TEXT(_restgpr1_20) -C_TEXT(_restgpr1_20): lwz r20,-48(r12) - .globl C_TEXT(_restgpr1_21) -C_TEXT(_restgpr1_21): lwz r21,-44(r12) - .globl C_TEXT(_restgpr1_22) -C_TEXT(_restgpr1_22): lwz r22,-40(r12) - .globl C_TEXT(_restgpr1_23) -C_TEXT(_restgpr1_23): lwz r23,-36(r12) - .globl C_TEXT(_restgpr1_24) -C_TEXT(_restgpr1_24): lwz r24,-32(r12) - .globl C_TEXT(_restgpr1_25) -C_TEXT(_restgpr1_25): lwz r25,-28(r12) - .globl C_TEXT(_restgpr1_26) -C_TEXT(_restgpr1_26): lwz r26,-24(r12) - .globl C_TEXT(_restgpr1_27) -C_TEXT(_restgpr1_27): lwz r27,-20(r12) - .globl C_TEXT(_restgpr1_28) -C_TEXT(_restgpr1_28): lwz r28,-16(r12) - .globl C_TEXT(_restgpr1_29) -C_TEXT(_restgpr1_29): lwz r29,-12(r12) #restore r29 - lwz r30,-8(r12) #restore r30 - lwz r31,-4(r12) #restore r31 - blr #return -END (_restgpr1_all) diff --git a/sysdeps/powerpc/powerpc32/gprsave0.S b/sysdeps/powerpc/powerpc32/gprsave0.S deleted file mode 100644 index 4c474514c6..0000000000 --- a/sysdeps/powerpc/powerpc32/gprsave0.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - General Purpose Register (GPR) save routine - when Floating Point Registers (FPRs) are not saved - - Note: This save routine must not be called when GPR30 or - GPR31, or both, are the only registers beings saved. In these - cases, the saving and restoring must be done inline. -*/ - -#include - -ENTRY(_savegpr0_all) - .globl C_TEXT(_savegpr0_13) -C_TEXT(_savegpr0_13): stw r13,-76(r1) - cfi_offset(r13,-76) - .globl C_TEXT(_savegpr0_14) -C_TEXT(_savegpr0_14): stw r14,-72(r1) - cfi_offset(r14,-72) - .globl C_TEXT(_savegpr0_15) -C_TEXT(_savegpr0_15): stw r15,-68(r1) - cfi_offset(r15,-68) - .globl C_TEXT(_savegpr0_16) -C_TEXT(_savegpr0_16): stw r16,-64(r1) - cfi_offset(r16,-64) - .globl C_TEXT(_savegpr0_17) -C_TEXT(_savegpr0_17): stw r17,-60(r1) - cfi_offset(r17,-60) - .globl C_TEXT(_savegpr0_18) -C_TEXT(_savegpr0_18): stw r18,-56(r1) - cfi_offset(r18,-56) - .globl C_TEXT(_savegpr0_19) -C_TEXT(_savegpr0_19): stw r19,-52(r1) - cfi_offset(r19,-52) - .globl C_TEXT(_savegpr0_20) -C_TEXT(_savegpr0_20): stw r20,-48(r1) - cfi_offset(r20,-48) - .globl C_TEXT(_savegpr0_21) -C_TEXT(_savegpr0_21): stw r21,-44(r1) - cfi_offset(r21,-44) - .globl C_TEXT(_savegpr0_22) -C_TEXT(_savegpr0_22): stw r22,-40(r1) - cfi_offset(r22,-40) - .globl C_TEXT(_savegpr0_23) -C_TEXT(_savegpr0_23): stw r23,-36(r1) - cfi_offset(r23,-36) - .globl C_TEXT(_savegpr0_24) -C_TEXT(_savegpr0_24): stw r24,-32(r1) - cfi_offset(r24,-32) - .globl C_TEXT(_savegpr0_25) -C_TEXT(_savegpr0_25): stw r25,-28(r1) - cfi_offset(r25,-28) - .globl C_TEXT(_savegpr0_26) -C_TEXT(_savegpr0_26): stw r26,-24(r1) - cfi_offset(r26,-24) - .globl C_TEXT(_savegpr0_27) -C_TEXT(_savegpr0_27): stw r27,-20(r1) - cfi_offset(r27,-20) - .globl C_TEXT(_savegpr0_28) -C_TEXT(_savegpr0_28): stw r28,-16(r1) - cfi_offset(r28,-16) - .globl C_TEXT(_savegpr0_29) -C_TEXT(_savegpr0_29): stw r29,-12(r1) #save r29 - stw r30,-8(r1) #save r30 - stw r31,-4(r1) #save r31 - cfi_offset(r29,-12) - cfi_offset(r30,-8) - cfi_offset(r31,-4) - stw r0,8(r1) #save LR in callers frame - blr #return -END (_savegpr0_all) diff --git a/sysdeps/powerpc/powerpc32/gprsave1.S b/sysdeps/powerpc/powerpc32/gprsave1.S deleted file mode 100644 index 89da657070..0000000000 --- a/sysdeps/powerpc/powerpc32/gprsave1.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - General Purpose Register (GPR) save routine - when Floating Point Registers (FPRs) are saved -*/ - -#include - -ENTRY(_savegpr1_all) - .globl C_TEXT(_savegpr1_13) -C_TEXT(_savegpr1_13): stw r13,-76(r12) - .globl C_TEXT(_savegpr1_14) -C_TEXT(_savegpr1_14): stw r14,-72(r12) - .globl C_TEXT(_savegpr1_15) -C_TEXT(_savegpr1_15): stw r15,-68(r12) - .globl C_TEXT(_savegpr1_16) -C_TEXT(_savegpr1_16): stw r16,-64(r12) - .globl C_TEXT(_savegpr1_17) -C_TEXT(_savegpr1_17): stw r17,-60(r12) - .globl C_TEXT(_savegpr1_18) -C_TEXT(_savegpr1_18): stw r18,-56(r12) - .globl C_TEXT(_savegpr1_19) -C_TEXT(_savegpr1_19): stw r19,-52(r12) - .globl C_TEXT(_savegpr1_20) -C_TEXT(_savegpr1_20): stw r20,-48(r12) - .globl C_TEXT(_savegpr1_21) -C_TEXT(_savegpr1_21): stw r21,-44(r12) - .globl C_TEXT(_savegpr1_22) -C_TEXT(_savegpr1_22): stw r22,-40(r12) - .globl C_TEXT(_savegpr1_23) -C_TEXT(_savegpr1_23): stw r23,-36(r12) - .globl C_TEXT(_savegpr1_24) -C_TEXT(_savegpr1_24): stw r24,-32(r12) - .globl C_TEXT(_savegpr1_25) -C_TEXT(_savegpr1_25): stw r25,-28(r12) - .globl C_TEXT(_savegpr1_26) -C_TEXT(_savegpr1_26): stw r26,-24(r12) - .globl C_TEXT(_savegpr1_27) -C_TEXT(_savegpr1_27): stw r27,-20(r12) - .globl C_TEXT(_savegpr1_28) -C_TEXT(_savegpr1_28): stw r28,-16(r12) - .globl C_TEXT(_savegpr1_29) -C_TEXT(_savegpr1_29): stw r29,-12(r12) #save r29 - stw r30,-8(r12) #save r30 - stw r31,-4(r12) #save r31 - blr #return -END (_savegpr1_all) diff --git a/sysdeps/powerpc/powerpc32/libgcc-compat.S b/sysdeps/powerpc/powerpc32/libgcc-compat.S deleted file mode 100644 index 431ccaa4b3..0000000000 --- a/sysdeps/powerpc/powerpc32/libgcc-compat.S +++ /dev/null @@ -1,137 +0,0 @@ -/* pre-.hidden libgcc compatibility - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - .file "libgcc-compat.S" - -#include - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2_6) - - .symver __ashldi3_v_glibc20,__ashldi3@GLIBC_2.0 - .symver __ashrdi3_v_glibc20,__ashrdi3@GLIBC_2.0 - .symver __lshrdi3_v_glibc20,__lshrdi3@GLIBC_2.0 - .symver __cmpdi2_v_glibc20,__cmpdi2@GLIBC_2.0 - .symver __ucmpdi2_v_glibc20,__ucmpdi2@GLIBC_2.0 -#if !defined _SOFT_FLOAT && !defined __NO_FPRS__ - .symver __fixdfdi_v_glibc20,__fixdfdi@GLIBC_2.0 - .symver __fixunsdfdi_v_glibc20,__fixunsdfdi@GLIBC_2.0 - .symver __fixsfdi_v_glibc20,__fixsfdi@GLIBC_2.0 - .symver __fixunssfdi_v_glibc20,__fixunssfdi@GLIBC_2.0 - .symver __floatdidf_v_glibc20,__floatdidf@GLIBC_2.0 - .symver __floatdisf_v_glibc20,__floatdisf@GLIBC_2.0 -#endif - -#ifdef HAVE_DOT_HIDDEN - .hidden __ashldi3 - .hidden __ashrdi3 - .hidden __lshrdi3 - .hidden __cmpdi2 - .hidden __ucmpdi2 -# if !defined _SOFT_FLOAT && !defined __NO_FPRS__ - .hidden __fixdfdi - .hidden __fixsfdi - .hidden __fixunsdfdi - .hidden __fixunssfdi - .hidden __floatdidf - .hidden __floatdisf -# endif -#endif - - .section ".text" - - .align 2 - .globl __ashldi3_v_glibc20 - .type __ashldi3_v_glibc20,@function -__ashldi3_v_glibc20: - b __ashldi3@local -.Lfe5: - .size __ashldi3_v_glibc20,.Lfe5-__ashldi3_v_glibc20 - .align 2 - .globl __ashrdi3_v_glibc20 - .type __ashrdi3_v_glibc20,@function -__ashrdi3_v_glibc20: - b __ashrdi3@local -.Lfe6: - .size __ashrdi3_v_glibc20,.Lfe6-__ashrdi3_v_glibc20 - .align 2 - .globl __lshrdi3_v_glibc20 - .type __lshrdi3_v_glibc20,@function -__lshrdi3_v_glibc20: - b __lshrdi3@local -.Lfe7: - .size __lshrdi3_v_glibc20,.Lfe7-__lshrdi3_v_glibc20 - .align 2 - .globl __cmpdi2_v_glibc20 - .type __cmpdi2_v_glibc20,@function -__cmpdi2_v_glibc20: - b __cmpdi2@local -.Lfe8: - .size __cmpdi2_v_glibc20,.Lfe8-__cmpdi2_v_glibc20 - .align 2 - .globl __ucmpdi2_v_glibc20 - .type __ucmpdi2_v_glibc20,@function -__ucmpdi2_v_glibc20: - b __ucmpdi2@local -.Lfe9: - .size __ucmpdi2_v_glibc20,.Lfe9-__ucmpdi2_v_glibc20 -#if !defined _SOFT_FLOAT && !defined __NO_FPRS__ - .align 2 - .globl __fixdfdi_v_glibc20 - .type __fixdfdi_v_glibc20,@function -__fixdfdi_v_glibc20: - b __fixdfdi@local -.Lfe10: - .size __fixdfdi_v_glibc20,.Lfe10-__fixdfdi_v_glibc20 - .align 2 - .globl __fixunsdfdi_v_glibc20 - .type __fixunsdfdi_v_glibc20,@function -__fixunsdfdi_v_glibc20: - b __fixunsdfdi@local -.Lfe11: - .size __fixunsdfdi_v_glibc20,.Lfe11-__fixunsdfdi_v_glibc20 - .align 2 - .globl __fixsfdi_v_glibc20 - .type __fixsfdi_v_glibc20,@function -__fixsfdi_v_glibc20: - b __fixsfdi@local -.Lfe12: - .size __fixsfdi_v_glibc20,.Lfe12-__fixsfdi_v_glibc20 - .align 2 - .globl __fixunssfdi_v_glibc20 - .type __fixunssfdi_v_glibc20,@function -__fixunssfdi_v_glibc20: - b __fixunssfdi@local -.Lfe13: - .size __fixunssfdi_v_glibc20,.Lfe13-__fixunssfdi_v_glibc20 - .align 2 - .globl __floatdidf_v_glibc20 - .type __floatdidf_v_glibc20,@function -__floatdidf_v_glibc20: - b __floatdidf@local -.Lfe14: - .size __floatdidf_v_glibc20,.Lfe14-__floatdidf_v_glibc20 - .align 2 - .globl __floatdisf_v_glibc20 - .type __floatdisf_v_glibc20,@function -__floatdisf_v_glibc20: - b __floatdisf@local -.Lfe15: - .size __floatdisf_v_glibc20,.Lfe15-__floatdisf_v_glibc20 -#endif - -#endif diff --git a/sysdeps/powerpc/powerpc32/lshift.S b/sysdeps/powerpc/powerpc32/lshift.S deleted file mode 100644 index 78c151f101..0000000000 --- a/sysdeps/powerpc/powerpc32/lshift.S +++ /dev/null @@ -1,125 +0,0 @@ -/* Shift a limb left, low level routine. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* mp_limb_t mpn_lshift (mp_ptr wp, mp_srcptr up, mp_size_t usize, - unsigned int cnt) */ - -EALIGN (__mpn_lshift, 3, 0) - - mtctr r5 # copy size into CTR - cmplwi cr0,r5,16 # is size < 16 - slwi r0,r5,2 - add r7,r3,r0 # make r7 point at end of res - add r4,r4,r0 # make r4 point at end of s1 - lwzu r11,-4(r4) # load first s1 limb - subfic r8,r6,32 - srw r3,r11,r8 # compute function return value - bge cr0,L(big) # branch if size >= 16 - - bdz L(end1) - -L(0): lwzu r10,-4(r4) - slw r9,r11,r6 - srw r12,r10,r8 - or r9,r9,r12 - stwu r9,-4(r7) - bdz L(end2) - lwzu r11,-4(r4) - slw r9,r10,r6 - srw r12,r11,r8 - or r9,r9,r12 - stwu r9,-4(r7) - bdnz L(0) - -L(end1):slw r0,r11,r6 - stw r0,-4(r7) - blr - - -/* Guaranteed not to succeed. */ -L(boom): tweq r0,r0 - -/* We imitate a case statement, by using (yuk!) fixed-length code chunks, - of size 4*12 bytes. We have to do this (or something) to make this PIC. */ -L(big): mflr r9 - cfi_register(lr,r9) - bltl- cr0,L(boom) # Never taken, only used to set LR. - slwi r10,r6,4 - mflr r12 - add r10,r12,r10 - slwi r8,r6,5 - add r10,r8,r10 - mtctr r10 - addi r5,r5,-1 - mtlr r9 - cfi_same_value (lr) - bctr - -L(end2):slw r0,r10,r6 - stw r0,-4(r7) - blr - -#define DO_LSHIFT(n) \ - mtctr r5; \ -L(n): lwzu r10,-4(r4); \ - slwi r9,r11,n; \ - inslwi r9,r10,n,32-n; \ - stwu r9,-4(r7); \ - bdz- L(end2); \ - lwzu r11,-4(r4); \ - slwi r9,r10,n; \ - inslwi r9,r11,n,32-n; \ - stwu r9,-4(r7); \ - bdnz L(n); \ - b L(end1) - - DO_LSHIFT(1) - DO_LSHIFT(2) - DO_LSHIFT(3) - DO_LSHIFT(4) - DO_LSHIFT(5) - DO_LSHIFT(6) - DO_LSHIFT(7) - DO_LSHIFT(8) - DO_LSHIFT(9) - DO_LSHIFT(10) - DO_LSHIFT(11) - DO_LSHIFT(12) - DO_LSHIFT(13) - DO_LSHIFT(14) - DO_LSHIFT(15) - DO_LSHIFT(16) - DO_LSHIFT(17) - DO_LSHIFT(18) - DO_LSHIFT(19) - DO_LSHIFT(20) - DO_LSHIFT(21) - DO_LSHIFT(22) - DO_LSHIFT(23) - DO_LSHIFT(24) - DO_LSHIFT(25) - DO_LSHIFT(26) - DO_LSHIFT(27) - DO_LSHIFT(28) - DO_LSHIFT(29) - DO_LSHIFT(30) - DO_LSHIFT(31) - -END (__mpn_lshift) diff --git a/sysdeps/powerpc/powerpc32/mcount.c b/sysdeps/powerpc/powerpc32/mcount.c deleted file mode 100644 index d8c063222a..0000000000 --- a/sysdeps/powerpc/powerpc32/mcount.c +++ /dev/null @@ -1,17 +0,0 @@ -#include - -#define __mcount_internal ___mcount_internal - -#include - -#undef __mcount_internal - -/* __mcount_internal was added in glibc 2.15 with version GLIBC_PRIVATE, - but it should have been put in version GLIBC_2.15. Mark the - GLIBC_PRIVATE version obsolete and add it to GLIBC_2.16 instead. */ -versioned_symbol (libc, ___mcount_internal, __mcount_internal, GLIBC_2_16); - -#if SHLIB_COMPAT (libc, GLIBC_2_15, GLIBC_2_16) -strong_alias (___mcount_internal, ___mcount_internal_private); -symbol_version (___mcount_internal_private, __mcount_internal, GLIBC_PRIVATE); -#endif diff --git a/sysdeps/powerpc/powerpc32/memset.S b/sysdeps/powerpc/powerpc32/memset.S deleted file mode 100644 index 8913a02698..0000000000 --- a/sysdeps/powerpc/powerpc32/memset.S +++ /dev/null @@ -1,307 +0,0 @@ -/* Optimized memset implementation for PowerPC. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); - Returns 's'. - - The memset is done in four sizes: byte (8 bits), word (32 bits), - 32-byte blocks (256 bits) and __cache_line_size (128, 256, 1024 bits). - There is a special case for setting whole cache lines to 0, which - takes advantage of the dcbz instruction. */ - - .section ".text" -EALIGN (memset, 5, 1) - -#define rTMP r0 -#define rRTN r3 /* initial value of 1st argument */ -#define rMEMP0 r3 /* original value of 1st arg */ -#define rCHR r4 /* char to set in each byte */ -#define rLEN r5 /* length of region to set */ -#define rMEMP r6 /* address at which we are storing */ -#define rALIGN r7 /* number of bytes we are setting now (when aligning) */ -#define rMEMP2 r8 - -#define rPOS32 r7 /* constant +32 for clearing with dcbz */ -#define rNEG64 r8 /* constant -64 for clearing with dcbz */ -#define rNEG32 r9 /* constant -32 for clearing with dcbz */ - -#define rGOT r9 /* Address of the Global Offset Table. */ -#define rCLS r8 /* Cache line size obtained from static. */ -#define rCLM r9 /* Cache line size mask to check for cache alignment. */ - -/* take care of case for size <= 4 */ - cmplwi cr1, rLEN, 4 - andi. rALIGN, rMEMP0, 3 - mr rMEMP, rMEMP0 - ble- cr1, L(small) -/* align to word boundary */ - cmplwi cr5, rLEN, 31 - rlwimi rCHR, rCHR, 8, 16, 23 - beq+ L(aligned) /* 8th instruction from .align */ - mtcrf 0x01, rMEMP0 - subfic rALIGN, rALIGN, 4 - add rMEMP, rMEMP, rALIGN - sub rLEN, rLEN, rALIGN - bf+ 31, L(g0) - stb rCHR, 0(rMEMP0) - bt 30, L(aligned) -L(g0): sth rCHR, -2(rMEMP) /* 16th instruction from .align */ -/* take care of case for size < 31 */ -L(aligned): - mtcrf 0x01, rLEN - rlwimi rCHR, rCHR, 16, 0, 15 - ble cr5, L(medium) -/* align to cache line boundary... */ - andi. rALIGN, rMEMP, 0x1C - subfic rALIGN, rALIGN, 0x20 - beq L(caligned) - mtcrf 0x01, rALIGN - add rMEMP, rMEMP, rALIGN - sub rLEN, rLEN, rALIGN - cmplwi cr1, rALIGN, 0x10 - mr rMEMP2, rMEMP - bf 28, L(a1) - stw rCHR, -4(rMEMP2) - stwu rCHR, -8(rMEMP2) -L(a1): blt cr1, L(a2) - stw rCHR, -4(rMEMP2) /* 32nd instruction from .align */ - stw rCHR, -8(rMEMP2) - stw rCHR, -12(rMEMP2) - stwu rCHR, -16(rMEMP2) -L(a2): bf 29, L(caligned) - stw rCHR, -4(rMEMP2) -/* now aligned to a cache line. */ -L(caligned): - cmplwi cr1, rCHR, 0 - clrrwi. rALIGN, rLEN, 5 - mtcrf 0x01, rLEN /* 40th instruction from .align */ - -/* Check if we can use the special case for clearing memory using dcbz. - This requires that we know the correct cache line size for this - processor. Getting the __cache_line_size may require establishing GOT - addressability, so branch out of line to set this up. */ - beq cr1, L(checklinesize) - -/* Store blocks of 32-bytes (256-bits) starting on a 32-byte boundary. - Can't assume that rCHR is zero or that the cache line size is either - 32-bytes or even known. */ -L(nondcbz): - srwi rTMP, rALIGN, 5 - mtctr rTMP - beq L(medium) /* we may not actually get to do a full line */ - clrlwi. rLEN, rLEN, 27 - add rMEMP, rMEMP, rALIGN - li rNEG64, -0x40 - bdz L(cloopdone) /* 48th instruction from .align */ - -/* We can't use dcbz here as we don't know the cache line size. We can - use "data cache block touch for store", which is safe. */ -L(c3): dcbtst rNEG64, rMEMP - stw rCHR, -4(rMEMP) - stw rCHR, -8(rMEMP) - stw rCHR, -12(rMEMP) - stw rCHR, -16(rMEMP) - nop /* let 601 fetch last 4 instructions of loop */ - stw rCHR, -20(rMEMP) - stw rCHR, -24(rMEMP) /* 56th instruction from .align */ - nop /* let 601 fetch first 8 instructions of loop */ - stw rCHR, -28(rMEMP) - stwu rCHR, -32(rMEMP) - bdnz L(c3) -L(cloopdone): - stw rCHR, -4(rMEMP) - stw rCHR, -8(rMEMP) - stw rCHR, -12(rMEMP) - stw rCHR, -16(rMEMP) /* 64th instruction from .align */ - stw rCHR, -20(rMEMP) - cmplwi cr1, rLEN, 16 - stw rCHR, -24(rMEMP) - stw rCHR, -28(rMEMP) - stwu rCHR, -32(rMEMP) - beqlr - add rMEMP, rMEMP, rALIGN - b L(medium_tail2) /* 72nd instruction from .align */ - - .align 5 - nop -/* Clear cache lines of memory in 128-byte chunks. - This code is optimized for processors with 32-byte cache lines. - It is further optimized for the 601 processor, which requires - some care in how the code is aligned in the i-cache. */ -L(zloopstart): - clrlwi rLEN, rLEN, 27 - mtcrf 0x02, rALIGN - srwi. rTMP, rALIGN, 7 - mtctr rTMP - li rPOS32, 0x20 - li rNEG64, -0x40 - cmplwi cr1, rLEN, 16 /* 8 */ - bf 26, L(z0) - dcbz 0, rMEMP - addi rMEMP, rMEMP, 0x20 -L(z0): li rNEG32, -0x20 - bf 25, L(z1) - dcbz 0, rMEMP - dcbz rPOS32, rMEMP - addi rMEMP, rMEMP, 0x40 /* 16 */ -L(z1): cmplwi cr5, rLEN, 0 - beq L(medium) -L(zloop): - dcbz 0, rMEMP - dcbz rPOS32, rMEMP - addi rMEMP, rMEMP, 0x80 - dcbz rNEG64, rMEMP - dcbz rNEG32, rMEMP - bdnz L(zloop) - beqlr cr5 - b L(medium_tail2) - - .align 5 -L(small): -/* Memset of 4 bytes or less. */ - cmplwi cr5, rLEN, 1 - cmplwi cr1, rLEN, 3 - bltlr cr5 - stb rCHR, 0(rMEMP) - beqlr cr5 - nop - stb rCHR, 1(rMEMP) - bltlr cr1 - stb rCHR, 2(rMEMP) - beqlr cr1 - nop - stb rCHR, 3(rMEMP) - blr - -/* Memset of 0-31 bytes. */ - .align 5 -L(medium): - cmplwi cr1, rLEN, 16 -L(medium_tail2): - add rMEMP, rMEMP, rLEN -L(medium_tail): - bt- 31, L(medium_31t) - bt- 30, L(medium_30t) -L(medium_30f): - bt- 29, L(medium_29t) -L(medium_29f): - bge- cr1, L(medium_27t) - bflr- 28 - stw rCHR, -4(rMEMP) /* 8th instruction from .align */ - stw rCHR, -8(rMEMP) - blr - -L(medium_31t): - stbu rCHR, -1(rMEMP) - bf- 30, L(medium_30f) -L(medium_30t): - sthu rCHR, -2(rMEMP) - bf- 29, L(medium_29f) -L(medium_29t): - stwu rCHR, -4(rMEMP) - blt- cr1, L(medium_27f) /* 16th instruction from .align */ -L(medium_27t): - stw rCHR, -4(rMEMP) - stw rCHR, -8(rMEMP) - stw rCHR, -12(rMEMP) - stwu rCHR, -16(rMEMP) -L(medium_27f): - bflr- 28 -L(medium_28t): - stw rCHR, -4(rMEMP) - stw rCHR, -8(rMEMP) - blr - -L(checklinesize): -#ifdef SHARED - mflr rTMP -/* If the remaining length is less the 32 bytes then don't bother getting - the cache line size. */ - beq L(medium) -/* Establishes GOT addressability so we can load __cache_line_size - from static. This value was set from the aux vector during startup. */ - SETUP_GOT_ACCESS(rGOT,got_label) - addis rGOT,rGOT,__cache_line_size-got_label@ha - lwz rCLS,__cache_line_size-got_label@l(rGOT) - mtlr rTMP -#else -/* Load __cache_line_size from static. This value was set from the - aux vector during startup. */ - lis rCLS,__cache_line_size@ha -/* If the remaining length is less the 32 bytes then don't bother getting - the cache line size. */ - beq L(medium) - lwz rCLS,__cache_line_size@l(rCLS) -#endif - -/* If the cache line size was not set then goto to L(nondcbz), which is - safe for any cache line size. */ - cmplwi cr1,rCLS,0 - beq cr1,L(nondcbz) - -/* If the cache line size is 32 bytes then goto to L(zloopstart), - which is coded specifically for 32-byte lines (and 601). */ - cmplwi cr1,rCLS,32 - beq cr1,L(zloopstart) - -/* Now we know the cache line size and it is not 32-bytes. However - we may not yet be aligned to the cache line and may have a partial - line to fill. Touch it 1st to fetch the cache line. */ - dcbtst 0,rMEMP - - addi rCLM,rCLS,-1 -L(getCacheAligned): - cmplwi cr1,rLEN,32 - and. rTMP,rCLM,rMEMP - blt cr1,L(handletail32) - beq L(cacheAligned) -/* We are not aligned to start of a cache line yet. Store 32-byte - of data and test again. */ - addi rMEMP,rMEMP,32 - addi rLEN,rLEN,-32 - stw rCHR,-32(rMEMP) - stw rCHR,-28(rMEMP) - stw rCHR,-24(rMEMP) - stw rCHR,-20(rMEMP) - stw rCHR,-16(rMEMP) - stw rCHR,-12(rMEMP) - stw rCHR,-8(rMEMP) - stw rCHR,-4(rMEMP) - b L(getCacheAligned) - -/* Now we are aligned to the cache line and can use dcbz. */ -L(cacheAligned): - cmplw cr1,rLEN,rCLS - blt cr1,L(handletail32) - dcbz 0,rMEMP - subf rLEN,rCLS,rLEN - add rMEMP,rMEMP,rCLS - b L(cacheAligned) - -/* We are here because; the cache line size was set, it was not - 32-bytes, and the remainder (rLEN) is now less than the actual cache - line size. Set up the preconditions for L(nondcbz) and go there to - store the remaining bytes. */ -L(handletail32): - clrrwi. rALIGN, rLEN, 5 - b L(nondcbz) - -END (memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/powerpc/powerpc32/mul_1.S b/sysdeps/powerpc/powerpc32/mul_1.S deleted file mode 100644 index c3093e2bc6..0000000000 --- a/sysdeps/powerpc/powerpc32/mul_1.S +++ /dev/null @@ -1,45 +0,0 @@ -/* Multiply a limb vector by a limb, for PowerPC. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* mp_limb_t mpn_mul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr, - mp_size_t s1_size, mp_limb_t s2_limb) - Calculate s1*s2 and put result in res_ptr; return carry. */ - -ENTRY (__mpn_mul_1) - mtctr r5 - - lwz r0,0(r4) - mullw r7,r0,r6 - mulhwu r10,r0,r6 - addi r3,r3,-4 # adjust res_ptr - addic r5,r5,0 # clear cy with dummy insn - bdz L(1) - -L(0): lwzu r0,4(r4) - stwu r7,4(r3) - mullw r8,r0,r6 - adde r7,r8,r10 - mulhwu r10,r0,r6 - bdnz L(0) - -L(1): stw r7,4(r3) - addze r3,r10 - blr -END (__mpn_mul_1) diff --git a/sysdeps/powerpc/powerpc32/power4/Implies b/sysdeps/powerpc/powerpc32/power4/Implies deleted file mode 100644 index a372141bb7..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/power4/fpu -powerpc/power4 diff --git a/sysdeps/powerpc/powerpc32/power4/Makefile b/sysdeps/powerpc/powerpc32/power4/Makefile deleted file mode 100644 index ba06adb5d0..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# Makefile fragment for POWER4/5/5+. - -ifeq ($(subdir),string) -CFLAGS-wordcopy.c += --param max-variable-expansions-in-unroller=2 --param max-unroll-times=2 -funroll-loops -fpeel-loops -CFLAGS-memmove.c += --param max-variable-expansions-in-unroller=2 --param max-unroll-times=2 -funroll-loops -fpeel-loops -endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile deleted file mode 100644 index 5afbade15f..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -ifeq ($(subdir),math) -sysdep_routines += s_isnan-power7 s_isnan-power6 s_isnan-power5 s_isnan-ppc32 \ - s_isnanf-power6 s_isnanf-power5 s_isinf-power7 \ - s_isinf-ppc32 s_isinff-ppc32 s_finite-power7 \ - s_finite-ppc32 s_finitef-ppc32 s_copysign-power6 \ - s_copysign-ppc32 s_modf-power5+ s_modf-ppc32 \ - s_modff-power5+ s_modff-ppc32 - -libm-sysdep_routines += s_llrintf-power6 s_llrintf-ppc32 s_llrint-power6 \ - s_llrint-ppc32 s_llround-power6 s_llround-power5+ \ - s_llround-ppc32 s_isnan-power7 \ - w_sqrt_compat-power5 w_sqrt_compat-ppc32 \ - w_sqrtf_compat-power5 w_sqrtf_compat-ppc32 \ - s_isnan-power6 s_isnan-power5 s_isnan-ppc32 \ - s_isnanf-power6 s_isnanf-power5 s_isinf-power7 \ - s_isinf-ppc32 s_isinff-ppc32 s_finite-power7 \ - s_finite-ppc32 s_finitef-ppc32 s_ceil-power5+ \ - s_ceil-ppc32 s_ceilf-power5+ s_ceilf-ppc32 \ - s_floor-power5+ s_floor-ppc32 s_floorf-power5+ \ - s_floorf-ppc32 s_round-power5+ s_round-ppc32 \ - s_roundf-power5+ s_roundf-ppc32 s_trunc-power5+ \ - s_trunc-ppc32 s_truncf-power5+ s_truncf-ppc32 \ - s_copysign-power6 s_copysign-ppc32 s_lround-power6x \ - s_lround-power5+ s_lround-ppc32 s_lrint-power6x \ - s_lrint-ppc32 s_modf-power5+ s_modf-ppc32 \ - s_modff-power5+ s_modff-ppc32 s_logbl-power7 \ - s_logbl-ppc32 s_logb-power7 s_logb-ppc32 \ - s_logbf-power7 s_logbf-ppc32 e_hypot-power7 \ - e_hypot-ppc32 e_hypotf-power7 e_hypotf-ppc32 - -CFLAGS-s_modf-power5+.c = -mcpu=power5+ -CFLAGS-s_modff-power5+.c = -mcpu=power5+ -CFLAGS-s_logbl-power7.c = -mcpu=power7 -CFLAGS-s_logb-power7.c = -mcpu=power7 -CFLAGS-s_logbf-power7.c = -mcpu=power7 -CFLAGS-e_hypot-power7.c = -mcpu=power7 -CFLAGS-e_hypotf-power7.c = -mcpu=power7 - -# These files quiet sNaNs in a way that is optimized away without -# -fsignaling-nans. -CFLAGS-s_modf-ppc32.c += -fsignaling-nans -CFLAGS-s_modff-ppc32.c += -fsignaling-nans -endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c deleted file mode 100644 index d62b7c4f7b..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c +++ /dev/null @@ -1,26 +0,0 @@ -/* __ieee_hypot() POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef strong_alias -#define strong_alias(a, b) - -#define __ieee754_hypot __ieee754_hypot_power7 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c deleted file mode 100644 index 25984b724c..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c +++ /dev/null @@ -1,26 +0,0 @@ -/* __ieee_hypot() PowerPC32 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef strong_alias -#define strong_alias(a, b) - -#define __ieee754_hypot __ieee754_hypot_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c deleted file mode 100644 index 5b8a06b4d1..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of ieee754_hypot. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__ieee754_hypot) __ieee754_hypot_ppc32 attribute_hidden; -extern __typeof (__ieee754_hypot) __ieee754_hypot_power7 attribute_hidden; - -libc_ifunc (__ieee754_hypot, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __ieee754_hypot_power7 - : __ieee754_hypot_ppc32); - -strong_alias (__ieee754_hypot, __hypot_finite) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c deleted file mode 100644 index f52bc635d1..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c +++ /dev/null @@ -1,26 +0,0 @@ -/* __ieee754_hypot POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef strong_alias -#define strong_alias(a, b) - -#define __ieee754_hypotf __ieee754_hypotf_power7 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c deleted file mode 100644 index d9f86163c9..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c +++ /dev/null @@ -1,26 +0,0 @@ -/* __ieee_hypot() PowerPC32 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef strong_alias -#define strong_alias(a, b) - -#define __ieee754_hypotf __ieee754_hypotf_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c deleted file mode 100644 index d1fc0ce532..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of ieee754_hypotf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__ieee754_hypotf) __ieee754_hypotf_ppc32 attribute_hidden; -extern __typeof (__ieee754_hypotf) __ieee754_hypotf_power7 attribute_hidden; - -libc_ifunc (__ieee754_hypotf, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __ieee754_hypotf_power7 - : __ieee754_hypotf_ppc32); - -strong_alias (__ieee754_hypotf, __hypotf_finite) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceil-power5+.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceil-power5+.S deleted file mode 100644 index 670d6bbffb..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceil-power5+.S +++ /dev/null @@ -1,33 +0,0 @@ -/* ceil function. PowerPC32/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __ceil __ceil_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceil-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceil-ppc32.S deleted file mode 100644 index 77d43c5de7..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceil-ppc32.S +++ /dev/null @@ -1,31 +0,0 @@ -/* ceil function. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __ceil __ceil_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceil.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceil.c deleted file mode 100644 index 4e3d980ce6..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceil.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of ceil. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__ceil) __ceil_ppc32 attribute_hidden; -extern __typeof (__ceil) __ceil_power5plus attribute_hidden; - -libc_ifunc (__ceil, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __ceil_power5plus - : __ceil_ppc32); - -weak_alias (__ceil, ceil) - -#ifdef NO_LONG_DOUBLE -strong_alias (__ceil, __ceill) -weak_alias (__ceil, ceill) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __ceil, ceill, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceilf-power5+.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceilf-power5+.S deleted file mode 100644 index 089261460e..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceilf-power5+.S +++ /dev/null @@ -1,26 +0,0 @@ -/* ceilf function. PowerPC32/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(name, alias) - -#define __ceilf __ceilf_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceilf-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceilf-ppc32.S deleted file mode 100644 index c783919f3a..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceilf-ppc32.S +++ /dev/null @@ -1,27 +0,0 @@ -/* ceilf function. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __ceilf __ceilf_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceilf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceilf.c deleted file mode 100644 index 9674001caa..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_ceilf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of ceilf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__ceilf) __ceilf_ppc32 attribute_hidden; -extern __typeof (__ceilf) __ceilf_power5plus attribute_hidden; - -libc_ifunc (__ceilf, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __ceilf_power5plus - : __ceilf_ppc32); - -weak_alias (__ceilf, ceilf) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign-power6.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign-power6.S deleted file mode 100644 index 1f58420763..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign-power6.S +++ /dev/null @@ -1,33 +0,0 @@ -/* copysign(). PowerPC32/POWER6 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __copysign __copysign_power6 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign-ppc32.S deleted file mode 100644 index 5d46f0379a..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign-ppc32.S +++ /dev/null @@ -1,34 +0,0 @@ -/* copysign(). PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a, b, c, d) - -#define __copysign __copysign_ppc32 -#undef hidden_def -#define hidden_def(name) - strong_alias (__copysign_ppc32, __GI___copysign) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign.c deleted file mode 100644 index bddc1ab3c5..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysign.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Multiple versions of copysign. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Redefine copysign so that the compiler won't complain about the type - mismatch with the IFUNC selector in strong_alias below. */ -#undef __copysign -#define __copysign __redirect_copysign -#include -#include -#undef __copysign -#include -#include "init-arch.h" - -extern __typeof (__redirect_copysign) __copysign_ppc32 attribute_hidden; -extern __typeof (__redirect_copysign) __copysign_power6 attribute_hidden; - -extern __typeof (__redirect_copysign) __libm_copysign; -libc_ifunc (__libm_copysign, - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __copysign_power6 - : __copysign_ppc32); - -strong_alias (__libm_copysign, __copysign) -weak_alias (__copysign, copysign) - -#ifdef NO_LONG_DOUBLE -weak_alias (__copysign,copysignl) -strong_alias(__copysign,__copysignl) -#endif -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __copysign, copysignl, GLIBC_2_0); -# endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __copysign, copysignl, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysignf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysignf.c deleted file mode 100644 index 7709e08968..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_copysignf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of copysignf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "init-arch.h" - -/* It's safe to use double-precision implementation for single-precision. */ -extern __typeof (__copysignf) __copysign_ppc32 attribute_hidden; -extern __typeof (__copysignf) __copysign_power6 attribute_hidden; - -libc_ifunc (__copysignf, - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __copysign_power6 - : __copysign_ppc32); - -weak_alias (__copysignf, copysignf) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite-power7.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite-power7.S deleted file mode 100644 index eb23f73e6e..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite-power7.S +++ /dev/null @@ -1,33 +0,0 @@ -/* finite(). PowerPC32/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __finite __finite_power7 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite-ppc32.c deleted file mode 100644 index 495dd36d0b..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite-ppc32.c +++ /dev/null @@ -1,33 +0,0 @@ -/* finite(). PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) -#undef strong_alias -#define strong_alias(a, b) - -#define FINITE __finite_ppc32 -#ifdef SHARED -# undef hidden_def -# define hidden_def(a) \ - __hidden_ver1 (__finite_ppc32, __GI___finite, __finite_ppc32); -#endif - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite.c deleted file mode 100644 index d3d0755bc0..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Multiple versions of finite. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __finite __redirect___finite -#define __finitef __redirect___finitef -#define __finitel __redirect___finitel -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__finite) __finite_ppc32 attribute_hidden; -extern __typeof (__finite) __finite_power7 attribute_hidden; -#undef __finite -#undef __finitef -#undef __finitel - -libc_ifunc_redirected (__redirect___finite, __finite, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __finite_power7 - : __finite_ppc32); - -weak_alias (__finite, finite) - -#ifdef NO_LONG_DOUBLE -strong_alias (__finite, __finitel) -weak_alias (__finite, finitel) -#endif - -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT (libm, GLIBC_2_0) -compat_symbol (libm, finite, finitel, GLIBC_2_0); -# endif -# if LONG_DOUBLE_COMPAT (libm, GLIBC_2_1) -compat_symbol (libm, __finite, __finitel, GLIBC_2_1); -# endif -#else -# if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) -compat_symbol (libc, __finite, __finitel, GLIBC_2_0); -compat_symbol (libc, finite, finitel, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef-ppc32.c deleted file mode 100644 index 4a52949066..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef-ppc32.c +++ /dev/null @@ -1,31 +0,0 @@ -/* finitef(). PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) - -#define FINITEF __finitef_ppc32 -#ifdef SHARED -# undef hidden_def -# define hidden_def(a) \ - __hidden_ver1 (__finitef_ppc32, __GI___finitef, __finitef_ppc32); -#endif - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef.c deleted file mode 100644 index fa214f37ae..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Multiple versions of finitef. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __finitef __redirect___finitef -#include -#include -#include "init-arch.h" - -extern __typeof (__finitef) __finitef_ppc32 attribute_hidden; -/* The power7 finite(double) works for float. */ -extern __typeof (__finitef) __finite_power7 attribute_hidden; -#undef __finitef - -libc_ifunc_redirected (__redirect___finitef, __finitef, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __finite_power7 - : __finitef_ppc32); - -weak_alias (__finitef, finitef) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floor-power5+.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floor-power5+.S deleted file mode 100644 index dfecd1c59e..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floor-power5+.S +++ /dev/null @@ -1,33 +0,0 @@ -/* floor function. PowerPC32/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __floor __floor_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floor-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floor-ppc32.S deleted file mode 100644 index 3af604ca25..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floor-ppc32.S +++ /dev/null @@ -1,31 +0,0 @@ -/* floor function. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __floor __floor_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floor.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floor.c deleted file mode 100644 index 0da528c922..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floor.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of floor. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__floor) __floor_ppc32 attribute_hidden; -extern __typeof (__floor) __floor_power5plus attribute_hidden; - -libc_ifunc (__floor, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __floor_power5plus - : __floor_ppc32); - -weak_alias (__floor, floor) - -#ifdef NO_LONG_DOUBLE -strong_alias (__floor, __floorl) -weak_alias (__floor, floorl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __floor, floorl, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floorf-power5+.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floorf-power5+.S deleted file mode 100644 index fd2fa331bb..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floorf-power5+.S +++ /dev/null @@ -1,26 +0,0 @@ -/* floorf function. PowerPC32/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(name, alias) - -#define __floorf __floorf_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floorf-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floorf-ppc32.S deleted file mode 100644 index 55bee8652b..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floorf-ppc32.S +++ /dev/null @@ -1,27 +0,0 @@ -/* floorf function. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __floorf __floorf_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floorf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floorf.c deleted file mode 100644 index 56375097f7..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_floorf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of floorf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__floorf) __floorf_ppc32 attribute_hidden; -extern __typeof (__floorf) __floorf_power5plus attribute_hidden; - -libc_ifunc (__floorf, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __floorf_power5plus - : __floorf_ppc32); - -weak_alias (__floorf, floorf) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinf-power7.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinf-power7.S deleted file mode 100644 index f7c7510649..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinf-power7.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isinf(). PowerPC32/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __isinf __isinf_power7 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinf-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinf-ppc32.c deleted file mode 100644 index 0d1cb75cf3..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinf-ppc32.c +++ /dev/null @@ -1,33 +0,0 @@ -/* isinf(). PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) -#undef strong_alias -#define strong_alias(a, b) - -#define __isinf __isinf_ppc32 -#ifdef SHARED -# undef hidden_def -# define hidden_def(a) \ - __hidden_ver1 (__isinf_ppc32, __GI___isinf, __isinf_ppc32); -#endif - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinf.c deleted file mode 100644 index c7d7568ce0..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinf.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Multiple versions of isinf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __isinf __redirect___isinf -#define __isinff __redirect___isinff -#define __isinfl __redirect___isinfl -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__isinf) __isinf_ppc32 attribute_hidden; -extern __typeof (__isinf) __isinf_power7 attribute_hidden; -#undef __isinf -#undef __isinff -#undef __isinfl - -libc_ifunc_redirected (__redirect___isinf, __isinf, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __isinf_power7 - : __isinf_ppc32); - -weak_alias (__isinf, isinf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isinf, __isinfl) -weak_alias (__isinf, isinfl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) -compat_symbol (libc, __isinf, __isinfl, GLIBC_2_0); -compat_symbol (libc, isinf, isinfl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinff-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinff-ppc32.c deleted file mode 100644 index 25fd22d0c3..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinff-ppc32.c +++ /dev/null @@ -1,31 +0,0 @@ -/* isinff(). PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) - -#define __isinff __isinff_ppc32 -#ifdef SHARED -# undef hidden_def -# define hidden_def(a) \ - __hidden_ver1 (__isinff_ppc32, __GI___isinff, __isinff_ppc32); -#endif - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinff.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinff.c deleted file mode 100644 index fd6e9983f6..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinff.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Multiple versions of isinf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __isinff __redirect___isinff -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__isinff) __isinff_ppc32 attribute_hidden; -/* The power7 isinf(double) works for float. */ -extern __typeof (__isinff) __isinf_power7 attribute_hidden; -#undef __isinff - -libc_ifunc_redirected (__redirect___isinff, __isinff, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __isinf_power7 - : __isinff_ppc32); - -weak_alias (__isinff, isinff) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-power5.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-power5.S deleted file mode 100644 index 36d6709ab0..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-power5.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isnan(). PowerPC32/POWER5 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, symbol, ver) - -#define __isnan __isnan_power5 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-power6.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-power6.S deleted file mode 100644 index 0ee970330c..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-power6.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isnan(). PowerPC32/POWER6 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, symbol, ver) - -#define __isnan __isnan_power6 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-power7.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-power7.S deleted file mode 100644 index 24d5a21d73..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-power7.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isnan(). PowerPC32/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, symbol, ver) - -#define __isnan __isnan_power7 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-ppc32.S deleted file mode 100644 index 175229edd6..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan-ppc32.S +++ /dev/null @@ -1,32 +0,0 @@ -/* isnan(). PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a, b) -#undef compat_symbol -#define compat_symbol(a, b, c, d) - -#define __isnan __isnan_ppc32 -#undef hidden_def -#define hidden_def(name) - strong_alias (__isnan_ppc32, __GI___isnan) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan.c deleted file mode 100644 index 79447af535..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Multiple versions of isnan. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __isnan __redirect___isnan -#define __isnanf __redirect___isnanf -#define __isnanl __redirect___isnanl -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__isnan) __isnan_ppc32 attribute_hidden; -extern __typeof (__isnan) __isnan_power5 attribute_hidden; -extern __typeof (__isnan) __isnan_power6 attribute_hidden; -extern __typeof (__isnan) __isnan_power7 attribute_hidden; -#undef __isnan -#undef __isnanf -#undef __isnanl - -libc_ifunc_redirected (__redirect___isnan, __isnan, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __isnan_power7 - : (hwcap & PPC_FEATURE_ARCH_2_05) - ? __isnan_power6 - : (hwcap & PPC_FEATURE_POWER5) - ? __isnan_power5 - : __isnan_ppc32); - -weak_alias (__isnan, isnan) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnanf-power5.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnanf-power5.S deleted file mode 100644 index 4e57289794..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnanf-power5.S +++ /dev/null @@ -1,28 +0,0 @@ -/* isnanf(). PowerPC32/POWER5 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) - -#define __isnanf __isnanf_power5 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnanf-power6.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnanf-power6.S deleted file mode 100644 index 40687b5f43..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnanf-power6.S +++ /dev/null @@ -1,28 +0,0 @@ -/* isnanf(). PowerPC32/POWER6 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) - -#define __isnanf __isnanf_power6 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnanf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnanf.c deleted file mode 100644 index 12bdcffcec..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnanf.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Multiple versions of isnanf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "init-arch.h" - -/* Both ppc32 and power7 isnan(double) work for float. */ -extern __typeof (__isnanf) __isnan_ppc32 attribute_hidden; -extern __typeof (__isnanf) __isnanf_power5 attribute_hidden; -extern __typeof (__isnanf) __isnanf_power6 attribute_hidden; -extern __typeof (__isnanf) __isnan_power7 attribute_hidden; - -libc_ifunc_hidden (__isnanf, __isnanf, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __isnan_power7 - : (hwcap & PPC_FEATURE_ARCH_2_05) - ? __isnanf_power6 - : (hwcap & PPC_FEATURE_POWER5) - ? __isnanf_power5 - : __isnan_ppc32); - -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrint-power6.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrint-power6.S deleted file mode 100644 index 07c0f94a2f..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrint-power6.S +++ /dev/null @@ -1,31 +0,0 @@ -/* Round double to long int. PowerPC32/Power6. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __llrint __llrint_power6 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrint-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrint-ppc32.S deleted file mode 100644 index 390cd9a8bc..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrint-ppc32.S +++ /dev/null @@ -1,31 +0,0 @@ -/* llrint function. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __llrint __llrint_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrint.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrint.c deleted file mode 100644 index 88357ebdd9..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrint.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of llrint. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__llrint) __llrint_ppc32 attribute_hidden; -extern __typeof (__llrint) __llrint_power6 attribute_hidden; - -libc_ifunc (__llrint, - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __llrint_power6 - : __llrint_ppc32); - -weak_alias (__llrint, llrint) - -#ifdef NO_LONG_DOUBLE -strong_alias (__llrint, __llrintl) -weak_alias (__llrint, llrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llrint, llrintl, GLIBC_2_1); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrintf-power6.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrintf-power6.S deleted file mode 100644 index 8ebbefd3dd..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrintf-power6.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Round float to long int. PowerPC32/POWER6 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __llrintf __llrintf_power6 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrintf-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrintf-ppc32.S deleted file mode 100644 index aa66e1ed9d..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrintf-ppc32.S +++ /dev/null @@ -1,26 +0,0 @@ -/* llrintf function. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __llrintf __llrintf_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrintf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrintf.c deleted file mode 100644 index f513e61944..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llrintf.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Multiple versions of llrintf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "init-arch.h" - -extern __typeof (__llrintf) __llrintf_ppc32 attribute_hidden; -extern __typeof (__llrintf) __llrintf_power6 attribute_hidden; - -libc_ifunc (__llrintf, - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __llrintf_power6 - : __llrintf_ppc32); - -weak_alias (__llrintf, llrintf) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-power5+.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-power5+.S deleted file mode 100644 index 16e3124a3c..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-power5+.S +++ /dev/null @@ -1,31 +0,0 @@ -/* lround function. PowerPC32/POWER5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __llround __llround_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-power6.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-power6.S deleted file mode 100644 index 508c6b7a29..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-power6.S +++ /dev/null @@ -1,31 +0,0 @@ -/* lround function. PowerPC32/POWER6 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __llround __llround_power6 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-ppc32.S deleted file mode 100644 index 4ecd2a266f..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-ppc32.S +++ /dev/null @@ -1,31 +0,0 @@ -/* llround function. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __llround __llround_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround.c deleted file mode 100644 index caf8953c81..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Multiple versions of llround. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__llround) __llround_ppc32 attribute_hidden; -extern __typeof (__llround) __llround_power5plus attribute_hidden; -extern __typeof (__llround) __llround_power6 attribute_hidden; - -libc_ifunc (__llround, - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __llround_power6 : - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __llround_power5plus - : __llround_ppc32); - -weak_alias (__llround, llround) - -#ifdef NO_LONG_DOUBLE -strong_alias (__llround, __llroundl) -weak_alias (__llround, llroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llround, llroundl, GLIBC_2_1); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llroundf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llroundf.c deleted file mode 100644 index 1b7e45653a..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llroundf.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Multiple versions of llroundf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "init-arch.h" - -/* It's safe to use double-precision implementation for single-precision. */ -extern __typeof (__llroundf) __llround_ppc32 attribute_hidden; -extern __typeof (__llroundf) __llround_power5plus attribute_hidden; -extern __typeof (__llroundf) __llround_power6 attribute_hidden; - -libc_ifunc (__llroundf, - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __llround_power6 : - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __llround_power5plus - : __llround_ppc32); - -weak_alias (__llroundf, llroundf) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-power7.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-power7.c deleted file mode 100644 index 20fd02a5ee..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-power7.c +++ /dev/null @@ -1,31 +0,0 @@ -/* logb(). PowerPC32/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a, b) -#undef strong_alias -#define strong_alias(a, b) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __logb __logb_power7 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-ppc32.c deleted file mode 100644 index 3920579dbc..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-ppc32.c +++ /dev/null @@ -1,28 +0,0 @@ -/* logb(). PowerPC32/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) -#undef strong_alias -#define strong_alias(a, b) - -#define __logb __logb_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb.c deleted file mode 100644 index fddd1ecbec..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Multiple versions of logb. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__logb) __logb_ppc32 attribute_hidden; -extern __typeof (__logb) __logb_power7 attribute_hidden; - -libc_ifunc (__logb, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __logb_power7 - : __logb_ppc32); - -weak_alias (__logb, logb) - -#ifdef NO_LONG_DOUBLE -strong_alias (__logb, __logbl) -weak_alias (__logb, logbl) -#endif - -#if LONG_DOUBLE_COMPAT (libm, GLIBC_2_0) -compat_symbol (libm, logb, logbl, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-power7.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-power7.c deleted file mode 100644 index 6e064bedbf..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-power7.c +++ /dev/null @@ -1,26 +0,0 @@ -/* logbf(). PowerPC32/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) - -#define __logbf __logbf_power7 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-ppc32.c deleted file mode 100644 index ca9865d784..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-ppc32.c +++ /dev/null @@ -1,26 +0,0 @@ -/* logbf(). PowerPC32 default implementation. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) - -#define __logbf __logbf_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf.c deleted file mode 100644 index 3b9de174bd..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of logbf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__logbf) __logbf_ppc32 attribute_hidden; -extern __typeof (__logbf) __logbf_power7 attribute_hidden; - -libc_ifunc (__logbf, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __logbf_power7 - : __logbf_ppc32); - -weak_alias (__logbf, logbf) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-power7.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-power7.c deleted file mode 100644 index 547664dd4b..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-power7.c +++ /dev/null @@ -1,21 +0,0 @@ -/* logbl(). PowerPC32/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __logbl __logbl_power7 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-ppc32.c deleted file mode 100644 index c4361226dd..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-ppc32.c +++ /dev/null @@ -1,21 +0,0 @@ -/* logbl(). PowerPC32/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __logbl __logbl_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl.c deleted file mode 100644 index 167e9535cb..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of logbl. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__logbl) __logbl_ppc32 attribute_hidden; -extern __typeof (__logbl) __logbl_power7 attribute_hidden; - -libc_ifunc (__logbl, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __logbl_power7 - : __logbl_ppc32); - -long_double_symbol (libm, __logbl, logbl); diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrint-power6x.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrint-power6x.S deleted file mode 100644 index 3be812e5dc..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrint-power6x.S +++ /dev/null @@ -1,33 +0,0 @@ -/* Round double to long int. POWER6x PowerPC32 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __lrint __lrint_power6x - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrint-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrint-ppc32.S deleted file mode 100644 index ee5725db03..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrint-ppc32.S +++ /dev/null @@ -1,31 +0,0 @@ -/* Round double to long int. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __lrint __lrint_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrint.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrint.c deleted file mode 100644 index ec7c991464..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrint.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of lrint. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__lrint) __lrint_ppc32 attribute_hidden; -extern __typeof (__lrint) __lrint_power6x attribute_hidden; - -libc_ifunc (__lrint, - (hwcap & PPC_FEATURE_POWER6_EXT) ? - __lrint_power6x - : __lrint_ppc32); - -weak_alias (__lrint, lrint) - -#ifdef NO_LONG_DOUBLE -weak_alias (__lrint, lrintl) -strong_alias (__lrint, __lrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lrint, lrintl, GLIBC_2_1); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrintf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrintf.c deleted file mode 100644 index 4a7fa4bcfa..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lrintf.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Multiple versions of lrintf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "init-arch.h" - -/* It's safe to use double-precision implementation for single-precision. */ -extern __typeof (__lrintf) __lrint_ppc32 attribute_hidden; -extern __typeof (__lrintf) __lrint_power6x attribute_hidden; - -libc_ifunc (__lrintf, - (hwcap & PPC_FEATURE_POWER6_EXT) ? - __lrint_power6x - : __lrint_ppc32); - -weak_alias (__lrintf, lrintf) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-power5+.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-power5+.S deleted file mode 100644 index 7aa2364183..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-power5+.S +++ /dev/null @@ -1,33 +0,0 @@ -/* lround function. POWER5+, PowerPC32 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __lround __lround_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-power6x.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-power6x.S deleted file mode 100644 index a9d54d560d..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-power6x.S +++ /dev/null @@ -1,33 +0,0 @@ -/* lround function. POWER6x, PowerPC32 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __lround __lround_power6x - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-ppc32.S deleted file mode 100644 index 78a931238a..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-ppc32.S +++ /dev/null @@ -1,31 +0,0 @@ -/* lround function. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __lround __lround_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround.c deleted file mode 100644 index fdc0c3dd8d..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Multiple versions of lround. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__lround) __lround_ppc32 attribute_hidden; -extern __typeof (__lround) __lround_power5plus attribute_hidden; -extern __typeof (__lround) __lround_power6x attribute_hidden; - -libc_ifunc (__lround, - (hwcap & PPC_FEATURE_POWER6_EXT) ? - __lround_power6x - : (hwcap & PPC_FEATURE_POWER5_PLUS) ? - __lround_power5plus - : __lround_ppc32); - -weak_alias (__lround, lround) - -#ifdef NO_LONG_DOUBLE -weak_alias (__lround, lroundl) -strong_alias (__lround, __lroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lround, lroundl, GLIBC_2_1); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lroundf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lroundf.c deleted file mode 100644 index ff61dd6ca7..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lroundf.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Multiple versions of lroundf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "init-arch.h" - -/* It's safe to use double-precision implementation for single-precision. */ -extern __typeof (__lroundf) __lround_ppc32 attribute_hidden; -extern __typeof (__lroundf) __lround_power5plus attribute_hidden; -extern __typeof (__lroundf) __lround_power6x attribute_hidden; - -libc_ifunc (__lroundf, - (hwcap & PPC_FEATURE_POWER6_EXT) ? - __lround_power6x - : (hwcap & PPC_FEATURE_POWER5_PLUS) ? - __lround_power5plus - : __lround_ppc32); - -weak_alias (__lroundf, lroundf) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf-power5+.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf-power5+.c deleted file mode 100644 index 955b265045..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf-power5+.c +++ /dev/null @@ -1,31 +0,0 @@ -/* PowerPC/POWER5+ implementation for modf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __modf __modf_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf-ppc32.c deleted file mode 100644 index 6561fdf8e1..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf-ppc32.c +++ /dev/null @@ -1,29 +0,0 @@ -/* PowerPC32 default implementation for modf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) - -#define __modf __modf_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf.c deleted file mode 100644 index 537592ab16..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Multiple versions of modf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__modf) __modf_ppc32 attribute_hidden; -extern __typeof (__modf) __modf_power5plus attribute_hidden; - -libc_ifunc (__modf, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __modf_power5plus - : __modf_ppc32); - -weak_alias (__modf, modf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__modf, __modfl) -weak_alias (__modf, modfl) -#endif -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __modf, modfl, GLIBC_2_0); -# endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __modf, modfl, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modff-power5+.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modff-power5+.c deleted file mode 100644 index f5a12a282a..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modff-power5+.c +++ /dev/null @@ -1,27 +0,0 @@ -/* PowerPC/POWER5+ implementation for modff. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __modff __modff_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modff-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modff-ppc32.c deleted file mode 100644 index 9b9fa971bf..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modff-ppc32.c +++ /dev/null @@ -1,26 +0,0 @@ -/* PowerPC32 default implementation for modff. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __modff __modff_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modff.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modff.c deleted file mode 100644 index 7ae682d124..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modff.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Multiple versions of modff. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "init-arch.h" - -extern __typeof (__modff) __modff_ppc32 attribute_hidden; -extern __typeof (__modff) __modff_power5plus attribute_hidden; - -libc_ifunc (__modff, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __modff_power5plus - : __modff_ppc32); - -weak_alias (__modff, modff) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_round-power5+.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_round-power5+.S deleted file mode 100644 index 02ab78b33c..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_round-power5+.S +++ /dev/null @@ -1,33 +0,0 @@ -/* round function. PowerPC32/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __round __round_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_round-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_round-ppc32.S deleted file mode 100644 index b9e5bb6170..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_round-ppc32.S +++ /dev/null @@ -1,31 +0,0 @@ -/* round function. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __round __round_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_round.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_round.c deleted file mode 100644 index 46102862ac..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_round.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of round. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__round) __round_ppc32 attribute_hidden; -extern __typeof (__round) __round_power5plus attribute_hidden; - -libc_ifunc (__round, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __round_power5plus - : __round_ppc32); - -weak_alias (__round, round) - -#ifdef NO_LONG_DOUBLE -strong_alias (__round, __roundl) -weak_alias (__round, roundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __round, roundl, GLIBC_2_1); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_roundf-power5+.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_roundf-power5+.S deleted file mode 100644 index 442af4c1ea..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_roundf-power5+.S +++ /dev/null @@ -1,26 +0,0 @@ -/* roundf function. PowerPC32/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(name, alias) - -#define __roundf __roundf_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_roundf-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_roundf-ppc32.S deleted file mode 100644 index abe74e2e1a..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_roundf-ppc32.S +++ /dev/null @@ -1,27 +0,0 @@ -/* roundf function. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __roundf __roundf_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_roundf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_roundf.c deleted file mode 100644 index 0a2e6d53cc..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_roundf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of roundf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__roundf) __roundf_ppc32 attribute_hidden; -extern __typeof (__roundf) __roundf_power5plus attribute_hidden; - -libc_ifunc (__roundf, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __roundf_power5plus - : __roundf_ppc32); - -weak_alias (__roundf, roundf) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_trunc-power5+.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_trunc-power5+.S deleted file mode 100644 index 129570ca34..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_trunc-power5+.S +++ /dev/null @@ -1,33 +0,0 @@ -/* trunc function. PowerPC32/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __trunc __trunc_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_trunc-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_trunc-ppc32.S deleted file mode 100644 index 5e74248a9f..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_trunc-ppc32.S +++ /dev/null @@ -1,31 +0,0 @@ -/* trunc function. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __trunc __trunc_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_trunc.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_trunc.c deleted file mode 100644 index 110e701218..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_trunc.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of trunc. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__trunc) __trunc_ppc32 attribute_hidden; -extern __typeof (__trunc) __trunc_power5plus attribute_hidden; - -libc_ifunc (__trunc, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __trunc_power5plus - : __trunc_ppc32); - -weak_alias (__trunc, trunc) - -#ifdef NO_LONG_DOUBLE -strong_alias (__trunc, __truncl) -weak_alias (__trunc, truncl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __trunc, truncl, GLIBC_2_1); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_truncf-power5+.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_truncf-power5+.S deleted file mode 100644 index 57ab878876..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_truncf-power5+.S +++ /dev/null @@ -1,26 +0,0 @@ -/* truncf function. PowerPC32/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(name, alias) - -#define __truncf __truncf_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_truncf-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_truncf-ppc32.S deleted file mode 100644 index 4dd0a6021a..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_truncf-ppc32.S +++ /dev/null @@ -1,27 +0,0 @@ -/* truncf function. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __truncf __truncf_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_truncf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_truncf.c deleted file mode 100644 index ef6e97d000..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_truncf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of truncf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__truncf) __truncf_ppc32 attribute_hidden; -extern __typeof (__truncf) __truncf_power5plus attribute_hidden; - -libc_ifunc (__truncf, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __truncf_power5plus - : __truncf_ppc32); - -weak_alias (__truncf, truncf) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrt_compat-power5.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrt_compat-power5.S deleted file mode 100644 index 7c5a504177..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrt_compat-power5.S +++ /dev/null @@ -1,31 +0,0 @@ -/* sqrt function. PowerPC32/POWER5 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __sqrt __sqrt_power5 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrt_compat-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrt_compat-ppc32.S deleted file mode 100644 index 534e934ac9..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrt_compat-ppc32.S +++ /dev/null @@ -1,31 +0,0 @@ -/* sqrt function. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __sqrt __sqrt_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrt_compat.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrt_compat.c deleted file mode 100644 index 1e1892034e..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrt_compat.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of sqrt. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__sqrt) __sqrt_ppc32 attribute_hidden; -extern __typeof (__sqrt) __sqrt_power5 attribute_hidden; - -libc_ifunc (__sqrt, - (hwcap & PPC_FEATURE_POWER5) - ? __sqrt_power5 - : __sqrt_ppc32); - -weak_alias (__sqrt, sqrt) - -#ifdef NO_LONG_DOUBLE -strong_alias (__sqrt, __sqrtl) -weak_alias (__sqrt, sqrtl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __sqrt, sqrtl, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrtf_compat-power5.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrtf_compat-power5.S deleted file mode 100644 index eacc042850..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrtf_compat-power5.S +++ /dev/null @@ -1,26 +0,0 @@ -/* sqrtf function. PowerPC32/POWER5 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __sqrtf __sqrtf_power5 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrtf_compat-ppc32.S b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrtf_compat-ppc32.S deleted file mode 100644 index 72191fc9a5..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrtf_compat-ppc32.S +++ /dev/null @@ -1,26 +0,0 @@ -/* sqrtf function. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __sqrtf __sqrtf_ppc32 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrtf_compat.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrtf_compat.c deleted file mode 100644 index bbab4d4f93..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/w_sqrtf_compat.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of sqrtf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__sqrtf) __sqrtf_ppc32 attribute_hidden; -extern __typeof (__sqrtf) __sqrtf_power5 attribute_hidden; - -libc_ifunc (__sqrtf, - (hwcap & PPC_FEATURE_POWER5) - ? __sqrtf_power5 - : __sqrtf_ppc32); - -weak_alias (__sqrtf, sqrtf) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/s_llrint.S b/sysdeps/powerpc/powerpc32/power4/fpu/s_llrint.S deleted file mode 100644 index d16dbb8406..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/s_llrint.S +++ /dev/null @@ -1,46 +0,0 @@ -/* Round double to long int. PowerPC32 on PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* long long int[r3, r4] __llrint (double x[fp1]) */ -ENTRY (__llrint) - CALL_MCOUNT - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - fctid fp13,fp1 - stfd fp13,8(r1) - nop /* Insure the following load is in a different dispatch group */ - nop /* to avoid pipe stall on POWER4&5. */ - nop - lwz r3,8+HIWORD(r1) - lwz r4,8+LOWORD(r1) - addi r1,r1,16 - blr - END (__llrint) - -weak_alias (__llrint, llrint) - -#ifdef NO_LONG_DOUBLE -strong_alias (__llrint, __llrintl) -weak_alias (__llrint, llrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llrint, llrintl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/s_llrintf.S b/sysdeps/powerpc/powerpc32/power4/fpu/s_llrintf.S deleted file mode 100644 index 9c3dd77863..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/s_llrintf.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Round float to long int. PowerPC32 on PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* long long int[r3, r4] __llrintf (float x[fp1]) */ -ENTRY (__llrintf) - CALL_MCOUNT - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - fctid fp13,fp1 - stfd fp13,8(r1) - nop /* Insure the following load is in a different dispatch group */ - nop /* to avoid pipe stall on POWER4&5. */ - nop - lwz r3,8+HIWORD(r1) - lwz r4,8+LOWORD(r1) - addi r1,r1,16 - blr - END (__llrintf) - -weak_alias (__llrintf, llrintf) - diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S b/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S deleted file mode 100644 index 24bd533748..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S +++ /dev/null @@ -1,106 +0,0 @@ -/* llround function. PowerPC32 on PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section .rodata.cst8,"aM",@progbits,8 - .align 3 - .LC0: .long (52+127)<<23 /* 0x1p+52 */ - .long (-1+127)<<23 /* 0.5 */ - - .section ".text" - -/* long [r3] lround (float x [fp1]) - IEEE 1003.1 lround function. IEEE specifies "round to the nearest - integer value, rounding halfway cases away from zero, regardless of - the current rounding mode." However PowerPC Architecture defines - "round to Nearest" as "Choose the best approximation. In case of a - tie, choose the one that is even (least significant bit o).". - So we can't use the PowerPC "round to Nearest" mode. Instead we set - "round toward Zero" mode and round by adding +-0.5 before rounding - to the integer value. - - It is necessary to detect when x is (+-)0x1.fffffffffffffp-2 - because adding +-0.5 in this case will cause an erroneous shift, - carry and round. We simply return 0 if 0.5 > x > -0.5. Likewise - if x is and odd number between +-(2^52 and 2^53-1) a shift and - carry will erroneously round if biased with +-0.5. Therefore if x - is greater/less than +-2^52 we don't need to bias the number with - +-0.5. */ - -ENTRY (__llround) - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,.LC0-got_label@ha - addi r9,r9,.LC0-got_label@l - mtlr r11 - cfi_same_value (lr) - lfs fp9,0(r9) - lfs fp10,4(r9) -#else - lis r9,.LC0@ha - lfs fp9,.LC0@l(r9) /* Load 2^52 into fpr9. */ - lfs fp10,.LC0@l+4(r9) /* Load 0.5 into fpr10. */ -#endif - fabs fp2,fp1 /* Get the absolute value of x. */ - fsub fp12,fp10,fp10 /* Compute 0.0 into fpr12. */ - fcmpu cr6,fp2,fp10 /* if |x| < 0.5 */ - fcmpu cr7,fp2,fp9 /* if |x| >= 2^52 */ - fcmpu cr1,fp1,fp12 /* x is negative? x < 0.0 */ - blt- cr6,.Lretzero /* 0.5 > x < -0.5 so just return 0. */ - bge- cr7,.Lnobias /* 2^52 > x < -2^52 just convert with no bias. */ - fadd fp3,fp2,fp10 /* |x|+=0.5 bias to prepare to round. */ - bge cr1,.Lconvert /* x is positive so don't negate x. */ - fnabs fp3,fp3 /* -(|x|+=0.5) */ -.Lconvert: - fctidz fp4,fp3 /* Convert to Integer double word round toward 0. */ - stfd fp4,8(r1) - nop - nop - nop - lwz r3,8+HIWORD(r1) /* Load return as integer. */ - lwz r4,8+LOWORD(r1) -.Lout: - addi r1,r1,16 - blr -.Lretzero: /* 0.5 > x > -0.5 */ - li r3,0 /* return 0. */ - li r4,0 - b .Lout -.Lnobias: - fmr fp3,fp1 - b .Lconvert - END (__llround) - -weak_alias (__llround, llround) - -strong_alias (__llround, __llroundf) -weak_alias (__llround, llroundf) - -#ifdef NO_LONG_DOUBLE -weak_alias (__llround, llroundl) -strong_alias (__llround, __llroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llround, llroundl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/s_llroundf.S b/sysdeps/powerpc/powerpc32/power4/fpu/s_llroundf.S deleted file mode 100644 index 72d6181541..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/s_llroundf.S +++ /dev/null @@ -1 +0,0 @@ -/* __llroundf is in s_llround.S */ diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrt_compat.S b/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrt_compat.S deleted file mode 100644 index bb896a33cd..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrt_compat.S +++ /dev/null @@ -1,108 +0,0 @@ -/* sqrt function. PowerPC32 version. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* double [fp1] sqrt (double x [fp1]) - Power4 (ISA V2.0) and above implement sqrt in hardware (not optional). - The fsqrt instruction generates the correct value for all inputs and - sets the appropriate floating point exceptions. Extended checking is - only needed to set errno (via __kernel_standard) if the input value - is negative. - - The fsqrt will set FPCC and FU (Floating Point Unordered or NaN - to indicated that the input value was negative or NaN. Use Move to - Condition Register from FPSCR to copy the FPCC field to cr1. The - branch on summary overflow transfers control to w_sqrt to process - any error conditions. Otherwise we can return the result directly. - - This part of the function is a leaf routine, so no need to stack a - frame or execute prologue/epilogue code. This means it is safe to - transfer directly to w_sqrt as long as the input value (f1) is - preserved. Putting the sqrt result into f2 (double parameter 2) - allows passing both the input value and sqrt result into the extended - wrapper so there is no need to recompute. - - This tactic avoids the overhead of stacking a frame for the normal - (non-error) case. Until gcc supports prologue shrink-wrapping - this is the best we can do. */ - - .section ".text" - .machine power4 -EALIGN (__sqrt, 5, 0) - fsqrt fp2,fp1 - mcrfs cr1,4 - bso- cr1,.Lw_sqrt - fmr fp1,fp2 - blr - .align 4 -.Lw_sqrt: - mflr r0 - stwu r1,-16(r1) - cfi_adjust_cfa_offset(16) - fmr fp12,fp2 - stw r0,20(r1) - stw r30,8(r1) - cfi_offset(lr,20-16) - cfi_offset(r30,8-16) -#ifdef SHARED - SETUP_GOT_ACCESS(r30,got_label) - addis r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@ha - addi r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@l - lwz r9,_LIB_VERSION@got(30) - lwz r0,0(r9) -#else - lis r9,_LIB_VERSION@ha - lwz r0,_LIB_VERSION@l(r9) -#endif -/* if (_LIB_VERSION == _IEEE_) return z; */ - cmpwi cr7,r0,-1 - beq- cr7,.L4 -/* if (x != x) return z; !isnan*/ - fcmpu cr7,fp1,fp1 - bne- cr7,.L4 -/* if (x < 0.0) - return __kernel_standard (x, x, 26) */ - fmr fp2,fp1 - fabs fp0,fp1 - li r3,26 - fcmpu cr7,fp1,fp0 - bne- cr7,.L11 -.L4: - lwz r0,20(r1) - fmr fp1,fp12 - lwz r30,8(r1) - addi r1,r1,16 - mtlr r0 - blr -.L11: - bl __kernel_standard@plt - fmr fp12,fp1 - b .L4 - END (__sqrt) - -weak_alias (__sqrt, sqrt) - -#ifdef NO_LONG_DOUBLE -weak_alias (__sqrt, sqrtl) -strong_alias (__sqrt, __sqrtl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __sqrt, sqrtl, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf_compat.S b/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf_compat.S deleted file mode 100644 index c304ab5ca2..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf_compat.S +++ /dev/null @@ -1,100 +0,0 @@ -/* sqrtf function. PowerPC32 version. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* float [fp1] sqrts (float x [fp1]) - Power4 (ISA V2.0) and above implement sqrt in hardware (not optional). - The fsqrts instruction generates the correct value for all inputs and - sets the appropriate floating point exceptions. Extended checking is - only needed to set errno (via __kernel_standard) if the input value - is negative. - - The fsqrts will set FPCC and FU (Floating Point Unordered or NaN - to indicated that the input value was negative or NaN. Use Move to - Condition Register from FPSCR to copy the FPCC field to cr1. The - branch on summary overflow transfers control to w_sqrt to process - any error conditions. Otherwise we can return the result directly. - - This part of the function is a leaf routine, so no need to stack a - frame or execute prologue/epilogue code. This means it is safe to - transfer directly to w_sqrt as long as the input value (f1) is - preserved. Putting the sqrt result into f2 (float parameter 2) - allows passing both the input value and sqrt result into the extended - wrapper so there is no need to recompute. - - This tactic avoids the overhead of stacking a frame for the normal - (non-error) case. Until gcc supports prologue shrink-wrapping - this is the best we can do. */ - - .section ".text" - .machine power4 -EALIGN (__sqrtf, 5, 0) - fsqrts fp2,fp1 - mcrfs cr1,4 - bso- cr1,.Lw_sqrtf - fmr fp1,fp2 - blr - .align 4 -.Lw_sqrtf: - mflr r0 - stwu r1,-16(r1) - cfi_adjust_cfa_offset(16) - fmr fp12,fp2 - stw r0,20(r1) - stw r30,8(r1) - cfi_offset(lr,20-16) - cfi_offset(r30,8-16) -#ifdef SHARED - SETUP_GOT_ACCESS(r30,got_label) - addis r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@ha - addi r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@l - lwz r9,_LIB_VERSION@got(30) - lwz r0,0(r9) -#else - lis r9,_LIB_VERSION@ha - lwz r0,_LIB_VERSION@l(r9) -#endif -/* if (_LIB_VERSION == _IEEE_) return z; */ - cmpwi cr7,r0,-1 - beq- cr7,.L4 -/* if (x != x, 0) return z; !isnan */ - fcmpu cr7,fp1,fp1 - bne- cr7,.L4 -/* if (x < 0.0) - return __kernel_standard (x, x, 126) */ - fmr fp2,fp1 - fabs fp0,fp1 - li r3,126 - fcmpu cr7,1,0 - bne- cr7,.L11 -.L4: - lwz r0,20(r1) - fmr fp1,fp12 - lwz r30,8(r1) - addi r1,r1,16 - mtlr r0 - blr -.L11: - bl __kernel_standard@plt - fmr fp12,fp1 - b .L4 - END (__sqrtf) - -weak_alias (__sqrtf, sqrtf) diff --git a/sysdeps/powerpc/powerpc32/power4/hp-timing.h b/sysdeps/powerpc/powerpc32/power4/hp-timing.h deleted file mode 100644 index 93cce4625a..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/hp-timing.h +++ /dev/null @@ -1,54 +0,0 @@ -/* High precision, low overhead timing functions. powerpc64 version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _HP_TIMING_H -#define _HP_TIMING_H 1 - -/* We always assume having the timestamp register. */ -#define HP_TIMING_AVAIL (1) -#define HP_SMALL_TIMING_AVAIL (1) - -/* We indeed have inlined functions. */ -#define HP_TIMING_INLINE (1) - -/* We use 64bit values for the times. */ -typedef unsigned long long int hp_timing_t; - -/* That's quite simple. Use the `mftb' instruction. Note that the value - might not be 100% accurate since there might be some more instructions - running in this moment. This could be changed by using a barrier like - 'lwsync' right before the `mftb' instruction. But we are not interested - in accurate clock cycles here so we don't do this. */ - -#define HP_TIMING_NOW(Var) \ - do { \ - unsigned int hi, lo, tmp; \ - __asm__ __volatile__ ("1: mfspr %0,269;" \ - " mfspr %1,268;" \ - " mfspr %2,269;" \ - " cmpw %0,%2;" \ - " bne 1b;" \ - : "=&r" (hi), "=&r" (lo), "=&r" (tmp) \ - : : "cr0"); \ - Var = ((hp_timing_t) hi << 32) | lo; \ - } while (0) - -#include - -#endif /* hp-timing.h */ diff --git a/sysdeps/powerpc/powerpc32/power4/memcmp.S b/sysdeps/powerpc/powerpc32/power4/memcmp.S deleted file mode 100644 index c6270d347f..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/memcmp.S +++ /dev/null @@ -1,1375 +0,0 @@ -/* Optimized strcmp implementation for PowerPC32. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] memcmp (const char *s1 [r3], - const char *s2 [r4], - size_t size [r5]) */ - - .machine power4 -EALIGN (memcmp, 4, 0) - CALL_MCOUNT - -#define rRTN r3 -#define rSTR1 r3 /* first string arg */ -#define rSTR2 r4 /* second string arg */ -#define rN r5 /* max string length */ -#define rWORD1 r6 /* current word in s1 */ -#define rWORD2 r7 /* current word in s2 */ -#define rWORD3 r8 /* next word in s1 */ -#define rWORD4 r9 /* next word in s2 */ -#define rWORD5 r10 /* next word in s1 */ -#define rWORD6 r11 /* next word in s2 */ -#define rWORD7 r30 /* next word in s1 */ -#define rWORD8 r31 /* next word in s2 */ - - xor r0, rSTR2, rSTR1 - cmplwi cr6, rN, 0 - cmplwi cr1, rN, 12 - clrlwi. r0, r0, 30 - clrlwi r12, rSTR1, 30 - cmplwi cr5, r12, 0 - beq- cr6, L(zeroLength) - dcbt 0, rSTR1 - dcbt 0, rSTR2 -/* If less than 8 bytes or not aligned, use the unaligned - byte loop. */ - blt cr1, L(bytealigned) - stwu 1, -64(r1) - cfi_adjust_cfa_offset(64) - stw rWORD8, 48(r1) - stw rWORD7, 44(r1) - cfi_offset(rWORD8, (48-64)) - cfi_offset(rWORD7, (44-64)) - bne L(unaligned) -/* At this point we know both strings have the same alignment and the - compare length is at least 8 bytes. r12 contains the low order - 2 bits of rSTR1 and cr5 contains the result of the logical compare - of r12 to 0. If r12 == 0 then we are already word - aligned and can perform the word aligned loop. - - Otherwise we know the two strings have the same alignment (but not - yet word aligned). So we force the string addresses to the next lower - word boundary and special case this first word using shift left to - eliminate bits preceding the first byte. Since we want to join the - normal (word aligned) compare loop, starting at the second word, - we need to adjust the length (rN) and special case the loop - versioning for the first word. This ensures that the loop count is - correct and the first word (shifted) is in the expected register pair. */ - .align 4 -L(samealignment): - clrrwi rSTR1, rSTR1, 2 - clrrwi rSTR2, rSTR2, 2 - beq cr5, L(Waligned) - add rN, rN, r12 - slwi rWORD6, r12, 3 - srwi r0, rN, 4 /* Divide by 16 */ - andi. r12, rN, 12 /* Get the word remainder */ -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 0(rSTR1) - lwz rWORD2, 0(rSTR2) -#endif - cmplwi cr1, r12, 8 - cmplwi cr7, rN, 16 - clrlwi rN, rN, 30 - beq L(dPs4) - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ - bgt cr1, L(dPs3) - beq cr1, L(dPs2) - -/* Remainder is 4 */ - .align 3 -L(dsP1): - slw rWORD5, rWORD1, rWORD6 - slw rWORD6, rWORD2, rWORD6 - cmplw cr5, rWORD5, rWORD6 - blt cr7, L(dP1x) -/* Do something useful in this cycle since we have to branch anyway. */ -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 4(rSTR1) - lwz rWORD2, 4(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 - b L(dP1e) -/* Remainder is 8 */ - .align 4 -L(dPs2): - slw rWORD5, rWORD1, rWORD6 - slw rWORD6, rWORD2, rWORD6 - cmplw cr6, rWORD5, rWORD6 - blt cr7, L(dP2x) -/* Do something useful in this cycle since we have to branch anyway. */ -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD7, 4(rSTR1) - lwz rWORD8, 4(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 - b L(dP2e) -/* Remainder is 12 */ - .align 4 -L(dPs3): - slw rWORD3, rWORD1, rWORD6 - slw rWORD4, rWORD2, rWORD6 - cmplw cr1, rWORD3, rWORD4 - b L(dP3e) -/* Count is a multiple of 16, remainder is 0 */ - .align 4 -L(dPs4): - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ - slw rWORD1, rWORD1, rWORD6 - slw rWORD2, rWORD2, rWORD6 - cmplw cr7, rWORD1, rWORD2 - b L(dP4e) - -/* At this point we know both strings are word aligned and the - compare length is at least 8 bytes. */ - .align 4 -L(Waligned): - andi. r12, rN, 12 /* Get the word remainder */ - srwi r0, rN, 4 /* Divide by 16 */ - cmplwi cr1, r12, 8 - cmplwi cr7, rN, 16 - clrlwi rN, rN, 30 - beq L(dP4) - bgt cr1, L(dP3) - beq cr1, L(dP2) - -/* Remainder is 4 */ - .align 4 -L(dP1): - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ -/* Normally we'd use rWORD7/rWORD8 here, but since we might exit early - (8-15 byte compare), we want to use only volatile registers. This - means we can avoid restoring non-volatile registers since we did not - change any on the early exit path. The key here is the non-early - exit path only cares about the condition code (cr5), not about which - register pair was used. */ -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 0(rSTR1) - lwz rWORD6, 0(rSTR2) -#endif - cmplw cr5, rWORD5, rWORD6 - blt cr7, L(dP1x) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 4(rSTR1) - lwz rWORD2, 4(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 -L(dP1e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 8(rSTR1) - lwz rWORD4, 8(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 12(rSTR1) - lwz rWORD6, 12(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5x) - bne cr7, L(dLcr7x) - -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwzu rWORD7, 16(rSTR1) - lwzu rWORD8, 16(rSTR2) -#endif - bne cr1, L(dLcr1) - cmplw cr5, rWORD7, rWORD8 - bdnz L(dLoop) - bne cr6, L(dLcr6) - lwz rWORD7, 44(r1) - lwz rWORD8, 48(r1) - .align 3 -L(dP1x): - slwi. r12, rN, 3 - bne cr5, L(dLcr5x) - subfic rN, r12, 32 /* Shift count is 32 - (rN * 8). */ - addi 1, 1, 64 - cfi_adjust_cfa_offset(-64) - bne L(d00) - li rRTN, 0 - blr - -/* Remainder is 8 */ - .align 4 - cfi_adjust_cfa_offset(64) -L(dP2): - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 0(rSTR1) - lwz rWORD6, 0(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - blt cr7, L(dP2x) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD7, 4(rSTR1) - lwz rWORD8, 4(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 -L(dP2e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 8(rSTR1) - lwz rWORD2, 8(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 12(rSTR1) - lwz rWORD4, 12(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#endif - bne cr6, L(dLcr6) - bne cr5, L(dLcr5) - b L(dLoop2) -/* Again we are on a early exit path (16-23 byte compare), we want to - only use volatile registers and avoid restoring non-volatile - registers. */ - .align 4 -L(dP2x): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 4(rSTR1) - lwz rWORD4, 4(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 - slwi. r12, rN, 3 - bne cr6, L(dLcr6x) -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#endif - bne cr1, L(dLcr1x) - subfic rN, r12, 32 /* Shift count is 32 - (rN * 8). */ - addi 1, 1, 64 - cfi_adjust_cfa_offset(-64) - bne L(d00) - li rRTN, 0 - blr - -/* Remainder is 12 */ - .align 4 - cfi_adjust_cfa_offset(64) -L(dP3): - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 0(rSTR1) - lwz rWORD4, 0(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 -L(dP3e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 4(rSTR1) - lwz rWORD6, 4(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - blt cr7, L(dP3x) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD7, 8(rSTR1) - lwz rWORD8, 8(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 12(rSTR1) - lwz rWORD2, 12(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#endif - bne cr1, L(dLcr1) - bne cr6, L(dLcr6) - b L(dLoop1) -/* Again we are on a early exit path (24-31 byte compare), we want to - only use volatile registers and avoid restoring non-volatile - registers. */ - .align 4 -L(dP3x): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 8(rSTR1) - lwz rWORD2, 8(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 - slwi. r12, rN, 3 - bne cr1, L(dLcr1x) -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#endif - bne cr6, L(dLcr6x) - subfic rN, r12, 32 /* Shift count is 32 - (rN * 8). */ - bne cr7, L(dLcr7x) - addi 1, 1, 64 - cfi_adjust_cfa_offset(-64) - bne L(d00) - li rRTN, 0 - blr - -/* Count is a multiple of 16, remainder is 0 */ - .align 4 - cfi_adjust_cfa_offset(64) -L(dP4): - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 0(rSTR1) - lwz rWORD2, 0(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 -L(dP4e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 4(rSTR1) - lwz rWORD4, 4(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 8(rSTR1) - lwz rWORD6, 8(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwzu rWORD7, 12(rSTR1) - lwzu rWORD8, 12(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 - bne cr7, L(dLcr7) - bne cr1, L(dLcr1) - bdz- L(d24) /* Adjust CTR as we start with +4 */ -/* This is the primary loop */ - .align 4 -L(dLoop): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 4(rSTR1) - lwz rWORD2, 4(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 - bne cr6, L(dLcr6) -L(dLoop1): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 8(rSTR1) - lwz rWORD4, 8(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5) -L(dLoop2): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 12(rSTR1) - lwz rWORD6, 12(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 - bne cr7, L(dLcr7) -L(dLoop3): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwzu rWORD7, 16(rSTR1) - lwzu rWORD8, 16(rSTR2) -#endif - bne- cr1, L(dLcr1) - cmplw cr7, rWORD1, rWORD2 - bdnz+ L(dLoop) - -L(dL4): - cmplw cr1, rWORD3, rWORD4 - bne cr6, L(dLcr6) - cmplw cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5) - cmplw cr5, rWORD7, rWORD8 -L(d44): - bne cr7, L(dLcr7) -L(d34): - bne cr1, L(dLcr1) -L(d24): - bne cr6, L(dLcr6) -L(d14): - slwi. r12, rN, 3 - bne cr5, L(dLcr5) -L(d04): - lwz rWORD7, 44(r1) - lwz rWORD8, 48(r1) - addi 1, 1, 64 - cfi_adjust_cfa_offset(-64) - subfic rN, r12, 32 /* Shift count is 32 - (rN * 8). */ - beq L(zeroLength) -/* At this point we have a remainder of 1 to 3 bytes to compare. Since - we are aligned it is safe to load the whole word, and use - shift right to eliminate bits beyond the compare length. */ -L(d00): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 4(rSTR1) - lwz rWORD2, 4(rSTR2) -#endif - srw rWORD1, rWORD1, rN - srw rWORD2, rWORD2, rN - sub rRTN, rWORD1, rWORD2 - blr - - .align 4 - cfi_adjust_cfa_offset(64) -L(dLcr7): - lwz rWORD7, 44(r1) - lwz rWORD8, 48(r1) -L(dLcr7x): - li rRTN, 1 - addi 1, 1, 64 - cfi_adjust_cfa_offset(-64) - bgtlr cr7 - li rRTN, -1 - blr - .align 4 - cfi_adjust_cfa_offset(64) -L(dLcr1): - lwz rWORD7, 44(r1) - lwz rWORD8, 48(r1) -L(dLcr1x): - li rRTN, 1 - addi 1, 1, 64 - cfi_adjust_cfa_offset(-64) - bgtlr cr1 - li rRTN, -1 - blr - .align 4 - cfi_adjust_cfa_offset(64) -L(dLcr6): - lwz rWORD7, 44(r1) - lwz rWORD8, 48(r1) -L(dLcr6x): - li rRTN, 1 - addi 1, 1, 64 - cfi_adjust_cfa_offset(-64) - bgtlr cr6 - li rRTN, -1 - blr - .align 4 - cfi_adjust_cfa_offset(64) -L(dLcr5): - lwz rWORD7, 44(r1) - lwz rWORD8, 48(r1) -L(dLcr5x): - li rRTN, 1 - addi 1, 1, 64 - cfi_adjust_cfa_offset(-64) - bgtlr cr5 - li rRTN, -1 - blr - - .align 4 -L(bytealigned): - mtctr rN /* Power4 wants mtctr 1st in dispatch group */ - -/* We need to prime this loop. This loop is swing modulo scheduled - to avoid pipe delays. The dependent instruction latencies (load to - compare to conditional branch) is 2 to 3 cycles. In this loop each - dispatch group ends in a branch and takes 1 cycle. Effectively - the first iteration of the loop only serves to load operands and - branches based on compares are delayed until the next loop. - - So we must precondition some registers and condition codes so that - we don't exit the loop early on the first iteration. */ - - lbz rWORD1, 0(rSTR1) - lbz rWORD2, 0(rSTR2) - bdz- L(b11) - cmplw cr7, rWORD1, rWORD2 - lbz rWORD3, 1(rSTR1) - lbz rWORD4, 1(rSTR2) - bdz- L(b12) - cmplw cr1, rWORD3, rWORD4 - lbzu rWORD5, 2(rSTR1) - lbzu rWORD6, 2(rSTR2) - bdz- L(b13) - .align 4 -L(bLoop): - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) - bne- cr7, L(bLcr7) - - cmplw cr6, rWORD5, rWORD6 - bdz- L(b3i) - - lbzu rWORD3, 1(rSTR1) - lbzu rWORD4, 1(rSTR2) - bne- cr1, L(bLcr1) - - cmplw cr7, rWORD1, rWORD2 - bdz- L(b2i) - - lbzu rWORD5, 1(rSTR1) - lbzu rWORD6, 1(rSTR2) - bne- cr6, L(bLcr6) - - cmplw cr1, rWORD3, rWORD4 - bdnz+ L(bLoop) - -/* We speculatively loading bytes before we have tested the previous - bytes. But we must avoid overrunning the length (in the ctr) to - prevent these speculative loads from causing a segfault. In this - case the loop will exit early (before the all pending bytes are - tested. In this case we must complete the pending operations - before returning. */ -L(b1i): - bne- cr7, L(bLcr7) - bne- cr1, L(bLcr1) - b L(bx56) - .align 4 -L(b2i): - bne- cr6, L(bLcr6) - bne- cr7, L(bLcr7) - b L(bx34) - .align 4 -L(b3i): - bne- cr1, L(bLcr1) - bne- cr6, L(bLcr6) - b L(bx12) - .align 4 -L(bLcr7): - li rRTN, 1 - bgtlr cr7 - li rRTN, -1 - blr -L(bLcr1): - li rRTN, 1 - bgtlr cr1 - li rRTN, -1 - blr -L(bLcr6): - li rRTN, 1 - bgtlr cr6 - li rRTN, -1 - blr - -L(b13): - bne- cr7, L(bx12) - bne- cr1, L(bx34) -L(bx56): - sub rRTN, rWORD5, rWORD6 - blr - nop -L(b12): - bne- cr7, L(bx12) -L(bx34): - sub rRTN, rWORD3, rWORD4 - blr -L(b11): -L(bx12): - sub rRTN, rWORD1, rWORD2 - blr - .align 4 -L(zeroLength): - li rRTN, 0 - blr - - .align 4 -/* At this point we know the strings have different alignment and the - compare length is at least 8 bytes. r12 contains the low order - 2 bits of rSTR1 and cr5 contains the result of the logical compare - of r12 to 0. If r12 == 0 then rStr1 is word aligned and can - perform the Wunaligned loop. - - Otherwise we know that rSTR1 is not already word aligned yet. - So we can force the string addresses to the next lower word - boundary and special case this first word using shift left to - eliminate bits preceding the first byte. Since we want to join the - normal (Wualigned) compare loop, starting at the second word, - we need to adjust the length (rN) and special case the loop - versioning for the first W. This ensures that the loop count is - correct and the first W (shifted) is in the expected resister pair. */ -#define rSHL r29 /* Unaligned shift left count. */ -#define rSHR r28 /* Unaligned shift right count. */ -#define rWORD8_SHIFT r27 /* Left rotation temp for rWORD2. */ -#define rWORD2_SHIFT r26 /* Left rotation temp for rWORD4. */ -#define rWORD4_SHIFT r25 /* Left rotation temp for rWORD6. */ -#define rWORD6_SHIFT r24 /* Left rotation temp for rWORD8. */ - cfi_adjust_cfa_offset(64) -L(unaligned): - stw rSHL, 40(r1) - cfi_offset(rSHL, (40-64)) - clrlwi rSHL, rSTR2, 30 - stw rSHR, 36(r1) - cfi_offset(rSHR, (36-64)) - beq cr5, L(Wunaligned) - stw rWORD8_SHIFT, 32(r1) - cfi_offset(rWORD8_SHIFT, (32-64)) -/* Adjust the logical start of rSTR2 to compensate for the extra bits - in the 1st rSTR1 W. */ - sub rWORD8_SHIFT, rSTR2, r12 -/* But do not attempt to address the W before that W that contains - the actual start of rSTR2. */ - clrrwi rSTR2, rSTR2, 2 - stw rWORD2_SHIFT, 28(r1) -/* Compute the left/right shift counts for the unaligned rSTR2, - compensating for the logical (W aligned) start of rSTR1. */ - clrlwi rSHL, rWORD8_SHIFT, 30 - clrrwi rSTR1, rSTR1, 2 - stw rWORD4_SHIFT, 24(r1) - slwi rSHL, rSHL, 3 - cmplw cr5, rWORD8_SHIFT, rSTR2 - add rN, rN, r12 - slwi rWORD6, r12, 3 - stw rWORD6_SHIFT, 20(r1) - cfi_offset(rWORD2_SHIFT, (28-64)) - cfi_offset(rWORD4_SHIFT, (24-64)) - cfi_offset(rWORD6_SHIFT, (20-64)) - subfic rSHR, rSHL, 32 - srwi r0, rN, 4 /* Divide by 16 */ - andi. r12, rN, 12 /* Get the W remainder */ -/* We normally need to load 2 Ws to start the unaligned rSTR2, but in - this special case those bits may be discarded anyway. Also we - must avoid loading a W where none of the bits are part of rSTR2 as - this may cross a page boundary and cause a page fault. */ - li rWORD8, 0 - blt cr5, L(dus0) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD8, 0, rSTR2 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD8, 0(rSTR2) - addi rSTR2, rSTR2, 4 -#endif - slw rWORD8, rWORD8, rSHL - -L(dus0): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 0(rSTR1) - lwz rWORD2, 0(rSTR2) -#endif - cmplwi cr1, r12, 8 - cmplwi cr7, rN, 16 - srw r12, rWORD2, rSHR - clrlwi rN, rN, 30 - beq L(duPs4) - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ - or rWORD8, r12, rWORD8 - bgt cr1, L(duPs3) - beq cr1, L(duPs2) - -/* Remainder is 4 */ - .align 4 -L(dusP1): - slw rWORD8_SHIFT, rWORD2, rSHL - slw rWORD7, rWORD1, rWORD6 - slw rWORD8, rWORD8, rWORD6 - bge cr7, L(duP1e) -/* At this point we exit early with the first word compare - complete and remainder of 0 to 3 bytes. See L(du14) for details on - how we handle the remaining bytes. */ - cmplw cr5, rWORD7, rWORD8 - slwi. rN, rN, 3 - bne cr5, L(duLcr5) - cmplw cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD2, 4(rSTR2) -#endif - srw r0, rWORD2, rSHR - b L(dutrim) -/* Remainder is 8 */ - .align 4 -L(duPs2): - slw rWORD6_SHIFT, rWORD2, rSHL - slw rWORD5, rWORD1, rWORD6 - slw rWORD6, rWORD8, rWORD6 - b L(duP2e) -/* Remainder is 12 */ - .align 4 -L(duPs3): - slw rWORD4_SHIFT, rWORD2, rSHL - slw rWORD3, rWORD1, rWORD6 - slw rWORD4, rWORD8, rWORD6 - b L(duP3e) -/* Count is a multiple of 16, remainder is 0 */ - .align 4 -L(duPs4): - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ - or rWORD8, r12, rWORD8 - slw rWORD2_SHIFT, rWORD2, rSHL - slw rWORD1, rWORD1, rWORD6 - slw rWORD2, rWORD8, rWORD6 - b L(duP4e) - -/* At this point we know rSTR1 is word aligned and the - compare length is at least 8 bytes. */ - .align 4 -L(Wunaligned): - stw rWORD8_SHIFT, 32(r1) - clrrwi rSTR2, rSTR2, 2 - stw rWORD2_SHIFT, 28(r1) - srwi r0, rN, 4 /* Divide by 16 */ - stw rWORD4_SHIFT, 24(r1) - andi. r12, rN, 12 /* Get the W remainder */ - stw rWORD6_SHIFT, 20(r1) - cfi_offset(rWORD8_SHIFT, (32-64)) - cfi_offset(rWORD2_SHIFT, (28-64)) - cfi_offset(rWORD4_SHIFT, (24-64)) - cfi_offset(rWORD6_SHIFT, (20-64)) - slwi rSHL, rSHL, 3 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD6, 0, rSTR2 - addi rSTR2, rSTR2, 4 - lwbrx rWORD8, 0, rSTR2 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD6, 0(rSTR2) - lwzu rWORD8, 4(rSTR2) -#endif - cmplwi cr1, r12, 8 - cmplwi cr7, rN, 16 - clrlwi rN, rN, 30 - subfic rSHR, rSHL, 32 - slw rWORD6_SHIFT, rWORD6, rSHL - beq L(duP4) - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ - bgt cr1, L(duP3) - beq cr1, L(duP2) - -/* Remainder is 4 */ - .align 4 -L(duP1): - srw r12, rWORD8, rSHR -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - addi rSTR1, rSTR1, 4 -#else - lwz rWORD7, 0(rSTR1) -#endif - slw rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP1x) -L(duP1e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 4(rSTR1) - lwz rWORD2, 4(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 - srw r0, rWORD2, rSHR - slw rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 8(rSTR1) - lwz rWORD4, 8(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 - srw r12, rWORD4, rSHR - slw rWORD4_SHIFT, rWORD4, rSHL - bne cr5, L(duLcr5) - or rWORD4, r12, rWORD2_SHIFT -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 12(rSTR1) - lwz rWORD6, 12(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 - srw r0, rWORD6, rSHR - slw rWORD6_SHIFT, rWORD6, rSHL - bne cr7, L(duLcr7) - or rWORD6, r0, rWORD4_SHIFT - cmplw cr6, rWORD5, rWORD6 - b L(duLoop3) - .align 4 -/* At this point we exit early with the first word compare - complete and remainder of 0 to 3 bytes. See L(du14) for details on - how we handle the remaining bytes. */ -L(duP1x): - cmplw cr5, rWORD7, rWORD8 - slwi. rN, rN, 3 - bne cr5, L(duLcr5) - cmplw cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD2, 8(rSTR2) -#endif - srw r0, rWORD2, rSHR - b L(dutrim) -/* Remainder is 8 */ - .align 4 -L(duP2): - srw r0, rWORD8, rSHR -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - addi rSTR1, rSTR1, 4 -#else - lwz rWORD5, 0(rSTR1) -#endif - or rWORD6, r0, rWORD6_SHIFT - slw rWORD6_SHIFT, rWORD8, rSHL -L(duP2e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD7, 4(rSTR1) - lwz rWORD8, 4(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - srw r12, rWORD8, rSHR - slw rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP2x) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 8(rSTR1) - lwz rWORD2, 8(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - srw r0, rWORD2, rSHR - slw rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 12(rSTR1) - lwz rWORD4, 12(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 - bne cr5, L(duLcr5) - srw r12, rWORD4, rSHR - slw rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#endif - cmplw cr1, rWORD3, rWORD4 - b L(duLoop2) - .align 4 -L(duP2x): - cmplw cr5, rWORD7, rWORD8 -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#endif - bne cr6, L(duLcr6) - slwi. rN, rN, 3 - bne cr5, L(duLcr5) - cmplw cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD2, 4(rSTR2) -#endif - srw r0, rWORD2, rSHR - b L(dutrim) - -/* Remainder is 12 */ - .align 4 -L(duP3): - srw r12, rWORD8, rSHR -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - addi rSTR1, rSTR1, 4 -#else - lwz rWORD3, 0(rSTR1) -#endif - slw rWORD4_SHIFT, rWORD8, rSHL - or rWORD4, r12, rWORD6_SHIFT -L(duP3e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 4(rSTR1) - lwz rWORD6, 4(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 - srw r0, rWORD6, rSHR - slw rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD7, 8(rSTR1) - lwz rWORD8, 8(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - bne cr1, L(duLcr1) - srw r12, rWORD8, rSHR - slw rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP3x) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 12(rSTR1) - lwz rWORD2, 12(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - srw r0, rWORD2, rSHR - slw rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#endif - cmplw cr7, rWORD1, rWORD2 - b L(duLoop1) - .align 4 -L(duP3x): -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#endif -#if 0 -/* Huh? We've already branched on cr1! */ - bne cr1, L(duLcr1) -#endif - cmplw cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - slwi. rN, rN, 3 - bne cr5, L(duLcr5) - cmplw cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD2, 4(rSTR2) -#endif - srw r0, rWORD2, rSHR - b L(dutrim) - -/* Count is a multiple of 16, remainder is 0 */ - .align 4 -L(duP4): - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ - srw r0, rWORD8, rSHR -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - addi rSTR1, rSTR1, 4 -#else - lwz rWORD1, 0(rSTR1) -#endif - slw rWORD2_SHIFT, rWORD8, rSHL - or rWORD2, r0, rWORD6_SHIFT -L(duP4e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 4(rSTR1) - lwz rWORD4, 4(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 - srw r12, rWORD4, rSHR - slw rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 8(rSTR1) - lwz rWORD6, 8(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 - bne cr7, L(duLcr7) - srw r0, rWORD6, rSHR - slw rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwzu rWORD7, 12(rSTR1) - lwzu rWORD8, 12(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - bne cr1, L(duLcr1) - srw r12, rWORD8, rSHR - slw rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - cmplw cr5, rWORD7, rWORD8 - bdz- L(du24) /* Adjust CTR as we start with +4 */ -/* This is the primary loop */ - .align 4 -L(duLoop): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 4(rSTR1) - lwz rWORD2, 4(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 - bne cr6, L(duLcr6) - srw r0, rWORD2, rSHR - slw rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT -L(duLoop1): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 8(rSTR1) - lwz rWORD4, 8(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - bne cr5, L(duLcr5) - srw r12, rWORD4, rSHR - slw rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT -L(duLoop2): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 12(rSTR1) - lwz rWORD6, 12(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 - bne cr7, L(duLcr7) - srw r0, rWORD6, rSHR - slw rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT -L(duLoop3): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwzu rWORD7, 16(rSTR1) - lwzu rWORD8, 16(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 - bne- cr1, L(duLcr1) - srw r12, rWORD8, rSHR - slw rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - bdnz+ L(duLoop) - -L(duL4): -#if 0 -/* Huh? We've already branched on cr1! */ - bne cr1, L(duLcr1) -#endif - cmplw cr1, rWORD3, rWORD4 - bne cr6, L(duLcr6) - cmplw cr6, rWORD5, rWORD6 - bne cr5, L(duLcr5) - cmplw cr5, rWORD7, rWORD8 -L(du44): - bne cr7, L(duLcr7) -L(du34): - bne cr1, L(duLcr1) -L(du24): - bne cr6, L(duLcr6) -L(du14): - slwi. rN, rN, 3 - bne cr5, L(duLcr5) -/* At this point we have a remainder of 1 to 3 bytes to compare. We use - shift right to eliminate bits beyond the compare length. - This allows the use of word subtract to compute the final result. - - However it may not be safe to load rWORD2 which may be beyond the - string length. So we compare the bit length of the remainder to - the right shift count (rSHR). If the bit count is less than or equal - we do not need to load rWORD2 (all significant bits are already in - rWORD8_SHIFT). */ - cmplw cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD2, 4(rSTR2) -#endif - srw r0, rWORD2, rSHR - .align 4 -L(dutrim): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 -#else - lwz rWORD1, 4(rSTR1) -#endif - lwz rWORD8, 48(r1) - subfic rN, rN, 32 /* Shift count is 32 - (rN * 8). */ - or rWORD2, r0, rWORD8_SHIFT - lwz rWORD7, 44(r1) - lwz rSHL, 40(r1) - srw rWORD1, rWORD1, rN - srw rWORD2, rWORD2, rN - lwz rSHR, 36(r1) - lwz rWORD8_SHIFT, 32(r1) - sub rRTN, rWORD1, rWORD2 - b L(dureturn26) - .align 4 -L(duLcr7): - lwz rWORD8, 48(r1) - lwz rWORD7, 44(r1) - li rRTN, 1 - bgt cr7, L(dureturn29) - lwz rSHL, 40(r1) - lwz rSHR, 36(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr1): - lwz rWORD8, 48(r1) - lwz rWORD7, 44(r1) - li rRTN, 1 - bgt cr1, L(dureturn29) - lwz rSHL, 40(r1) - lwz rSHR, 36(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr6): - lwz rWORD8, 48(r1) - lwz rWORD7, 44(r1) - li rRTN, 1 - bgt cr6, L(dureturn29) - lwz rSHL, 40(r1) - lwz rSHR, 36(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr5): - lwz rWORD8, 48(r1) - lwz rWORD7, 44(r1) - li rRTN, 1 - bgt cr5, L(dureturn29) - lwz rSHL, 40(r1) - lwz rSHR, 36(r1) - li rRTN, -1 - b L(dureturn27) - .align 3 -L(duZeroReturn): - li rRTN, 0 - .align 4 -L(dureturn): - lwz rWORD8, 48(r1) - lwz rWORD7, 44(r1) -L(dureturn29): - lwz rSHL, 40(r1) - lwz rSHR, 36(r1) -L(dureturn27): - lwz rWORD8_SHIFT, 32(r1) -L(dureturn26): - lwz rWORD2_SHIFT, 28(r1) -L(dureturn25): - lwz rWORD4_SHIFT, 24(r1) - lwz rWORD6_SHIFT, 20(r1) - addi 1, 1, 64 - cfi_adjust_cfa_offset(-64) - blr -END (memcmp) - -libc_hidden_builtin_def (memcmp) -weak_alias (memcmp, bcmp) diff --git a/sysdeps/powerpc/powerpc32/power4/memcopy.h b/sysdeps/powerpc/powerpc32/power4/memcopy.h deleted file mode 100644 index c76739e390..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/memcopy.h +++ /dev/null @@ -1,116 +0,0 @@ -/* memcopy.h -- definitions for memory copy functions. Generic C version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Torbjorn Granlund (tege@sics.se). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The strategy of the memory functions is: - - 1. Copy bytes until the destination pointer is aligned. - - 2. Copy words in unrolled loops. If the source and destination - are not aligned in the same way, use word memory operations, - but shift and merge two read words before writing. - - 3. Copy the few remaining bytes. - - This is fast on processors that have at least 10 registers for - allocation by GCC, and that can access memory at reg+const in one - instruction. - - I made an "exhaustive" test of this memmove when I wrote it, - exhaustive in the sense that I tried all alignment and length - combinations, with and without overlap. */ - -#include - -/* The macros defined in this file are: - - BYTE_COPY_FWD(dst_beg_ptr, src_beg_ptr, nbytes_to_copy) - - BYTE_COPY_BWD(dst_end_ptr, src_end_ptr, nbytes_to_copy) - - WORD_COPY_FWD(dst_beg_ptr, src_beg_ptr, nbytes_remaining, nbytes_to_copy) - - WORD_COPY_BWD(dst_end_ptr, src_end_ptr, nbytes_remaining, nbytes_to_copy) - - MERGE(old_word, sh_1, new_word, sh_2) - [I fail to understand. I feel stupid. --roland] -*/ - - -/* Threshold value for when to enter the unrolled loops. */ -#undef OP_T_THRES -#define OP_T_THRES 16 - -/* Copy exactly NBYTES bytes from SRC_BP to DST_BP, - without any assumptions about alignment of the pointers. */ -#undef BYTE_COPY_FWD -#define BYTE_COPY_FWD(dst_bp, src_bp, nbytes) \ - do \ - { \ - size_t __nbytes = (nbytes); \ - if (__nbytes & 1) \ - { \ - ((byte *) dst_bp)[0] = ((byte *) src_bp)[0]; \ - src_bp += 1; \ - dst_bp += 1; \ - __nbytes -= 1; \ - } \ - while (__nbytes > 0) \ - { \ - byte __x = ((byte *) src_bp)[0]; \ - byte __y = ((byte *) src_bp)[1]; \ - src_bp += 2; \ - __nbytes -= 2; \ - ((byte *) dst_bp)[0] = __x; \ - ((byte *) dst_bp)[1] = __y; \ - dst_bp += 2; \ - } \ - } while (0) - -/* Copy exactly NBYTES_TO_COPY bytes from SRC_END_PTR to DST_END_PTR, - beginning at the bytes right before the pointers and continuing towards - smaller addresses. Don't assume anything about alignment of the - pointers. */ -#undef BYTE_COPY_BWD -#define BYTE_COPY_BWD(dst_ep, src_ep, nbytes) \ - do \ - { \ - size_t __nbytes = (nbytes); \ - if (__nbytes & 1) \ - { \ - src_ep -= 1; \ - dst_ep -= 1; \ - ((byte *) dst_ep)[0] = ((byte *) src_ep)[0]; \ - __nbytes -= 1; \ - } \ - while (__nbytes > 0) \ - { \ - byte __x, __y; \ - src_ep -= 2; \ - __y = ((byte *) src_ep)[1]; \ - __x = ((byte *) src_ep)[0]; \ - dst_ep -= 2; \ - __nbytes -= 2; \ - ((byte *) dst_ep)[1] = __y; \ - ((byte *) dst_ep)[0] = __x; \ - } \ - } while (0) - -/* The powerpc memcpy implementation is safe to use for memmove. */ -#undef MEMCPY_OK_FOR_FWD_MEMMOVE -#define MEMCPY_OK_FOR_FWD_MEMMOVE 1 diff --git a/sysdeps/powerpc/powerpc32/power4/memcpy.S b/sysdeps/powerpc/powerpc32/power4/memcpy.S deleted file mode 100644 index 37bc712dd9..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/memcpy.S +++ /dev/null @@ -1,481 +0,0 @@ -/* Optimized memcpy implementation for PowerPC32 on PowerPC64. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); - Returns 'dst'. - - Memcpy handles short copies (< 32-bytes) using a binary move blocks - (no loops) of lwz/stw. The tail (remaining 1-3) bytes is handled - with the appropriate combination of byte and halfword load/stores. - There is minimal effort to optimize the alignment of short moves. - - Longer moves (>= 32-bytes) justify the effort to get at least the - destination word (4-byte) aligned. Further optimization is - possible when both source and destination are word aligned. - Each case has an optimized unrolled loop. */ - - .machine power4 -EALIGN (memcpy, 5, 0) - CALL_MCOUNT - - stwu 1,-32(1) - cfi_adjust_cfa_offset(32) - stw 30,20(1) - cfi_offset(30,(20-32)) - mr 30,3 - cmplwi cr1,5,31 - stw 31,24(1) - cfi_offset(31,(24-32)) - neg 0,3 - andi. 11,3,3 /* check alignment of dst. */ - clrlwi 0,0,30 /* Number of bytes until the 1st word of dst. */ - clrlwi 10,4,30 /* check alignment of src. */ - cmplwi cr6,5,8 - ble- cr1,.L2 /* If move < 32 bytes use short move code. */ - cmplw cr6,10,11 - mr 12,4 - srwi 9,5,2 /* Number of full words remaining. */ - mtcrf 0x01,0 - mr 31,5 - beq .L0 - - subf 31,0,5 - /* Move 0-3 bytes as needed to get the destination word aligned. */ -1: bf 31,2f - lbz 6,0(12) - addi 12,12,1 - stb 6,0(3) - addi 3,3,1 -2: bf 30,0f - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -0: - clrlwi 10,12,30 /* check alignment of src again. */ - srwi 9,31,2 /* Number of full words remaining. */ - - /* Copy words from source to destination, assuming the destination is - aligned on a word boundary. - - At this point we know there are at least 25 bytes left (32-7) to copy. - The next step is to determine if the source is also word aligned. - If not branch to the unaligned move code at .L6. which uses - a load, shift, store strategy. - - Otherwise source and destination are word aligned, and we can use - the optimized word copy loop. */ -.L0: - clrlwi 11,31,30 /* calculate the number of tail bytes */ - mtcrf 0x01,9 - bne- cr6,.L6 /* If source is not word aligned. */ - - /* Move words where destination and source are word aligned. - Use an unrolled loop to copy 4 words (16-bytes) per iteration. - If the copy is not an exact multiple of 16 bytes, 1-3 - words are copied as needed to set up the main loop. After - the main loop exits there may be a tail of 1-3 bytes. These bytes are - copied a halfword/byte at a time as needed to preserve alignment. */ - - srwi 8,31,4 /* calculate the 16 byte loop count */ - cmplwi cr1,9,4 - cmplwi cr6,11,0 - mr 11,12 - - bf 30,1f - lwz 6,0(12) - lwz 7,4(12) - addi 11,12,8 - mtctr 8 - stw 6,0(3) - stw 7,4(3) - addi 10,3,8 - bf 31,4f - lwz 0,8(12) - stw 0,8(3) - blt cr1,3f - addi 11,12,12 - addi 10,3,12 - b 4f - .align 4 -1: - mr 10,3 - mtctr 8 - bf 31,4f - lwz 6,0(12) - addi 11,12,4 - stw 6,0(3) - addi 10,3,4 - - .align 4 -4: - lwz 6,0(11) - lwz 7,4(11) - lwz 8,8(11) - lwz 0,12(11) - stw 6,0(10) - stw 7,4(10) - stw 8,8(10) - stw 0,12(10) - addi 11,11,16 - addi 10,10,16 - bdnz 4b -3: - clrrwi 0,31,2 - mtcrf 0x01,31 - beq cr6,0f -.L9: - add 3,3,0 - add 12,12,0 - -/* At this point we have a tail of 0-3 bytes and we know that the - destination is word aligned. */ -2: bf 30,1f - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -1: bf 31,0f - lbz 6,0(12) - stb 6,0(3) -0: - /* Return original dst pointer. */ - mr 3,30 - lwz 30,20(1) - lwz 31,24(1) - addi 1,1,32 - blr - -/* Copy up to 31 bytes. This is divided into two cases 0-8 bytes and - 9-31 bytes. Each case is handled without loops, using binary - (1,2,4,8) tests. - - In the short (0-8 byte) case no attempt is made to force alignment - of either source or destination. The hardware will handle the - unaligned load/stores with small delays for crossing 32- 64-byte, and - 4096-byte boundaries. Since these short moves are unlikely to be - unaligned or cross these boundaries, the overhead to force - alignment is not justified. - - The longer (9-31 byte) move is more likely to cross 32- or 64-byte - boundaries. Since only loads are sensitive to the 32-/64-byte - boundaries it is more important to align the source than the - destination. If the source is not already word aligned, we first - move 1-3 bytes as needed. While the destination and stores may - still be unaligned, this is only an issue for page (4096 byte - boundary) crossing, which should be rare for these short moves. - The hardware handles this case automatically with a small delay. */ - - .align 4 -.L2: - mtcrf 0x01,5 - neg 8,4 - clrrwi 11,4,2 - andi. 0,8,3 - ble cr6,.LE8 /* Handle moves of 0-8 bytes. */ -/* At least 9 bytes left. Get the source word aligned. */ - cmplwi cr1,5,16 - mr 10,5 - mr 12,4 - cmplwi cr6,0,2 - beq .L3 /* If the source is already word aligned skip this. */ -/* Copy 1-3 bytes to get source address word aligned. */ - lwz 6,0(11) - subf 10,0,5 - add 12,4,0 - blt cr6,5f - srwi 7,6,16 - bgt cr6,3f -#ifdef __LITTLE_ENDIAN__ - sth 7,0(3) -#else - sth 6,0(3) -#endif - b 7f - .align 4 -3: -#ifdef __LITTLE_ENDIAN__ - rotlwi 6,6,24 - stb 6,0(3) - sth 7,1(3) -#else - stb 7,0(3) - sth 6,1(3) -#endif - b 7f - .align 4 -5: -#ifdef __LITTLE_ENDIAN__ - rotlwi 6,6,8 -#endif - stb 6,0(3) -7: - cmplwi cr1,10,16 - add 3,3,0 - mtcrf 0x01,10 - .align 4 -.L3: -/* At least 6 bytes left and the source is word aligned. */ - blt cr1,8f -16: /* Move 16 bytes. */ - lwz 6,0(12) - lwz 7,4(12) - stw 6,0(3) - lwz 6,8(12) - stw 7,4(3) - lwz 7,12(12) - addi 12,12,16 - stw 6,8(3) - stw 7,12(3) - addi 3,3,16 -8: /* Move 8 bytes. */ - bf 28,4f - lwz 6,0(12) - lwz 7,4(12) - addi 12,12,8 - stw 6,0(3) - stw 7,4(3) - addi 3,3,8 -4: /* Move 4 bytes. */ - bf 29,2f - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: /* Move 2-3 bytes. */ - bf 30,1f - lhz 6,0(12) - sth 6,0(3) - bf 31,0f - lbz 7,2(12) - stb 7,2(3) - mr 3,30 - lwz 30,20(1) - addi 1,1,32 - blr -1: /* Move 1 byte. */ - bf 31,0f - lbz 6,0(12) - stb 6,0(3) -0: - /* Return original dst pointer. */ - mr 3,30 - lwz 30,20(1) - addi 1,1,32 - blr - -/* Special case to copy 0-8 bytes. */ - .align 4 -.LE8: - mr 12,4 - bne cr6,4f - lwz 6,0(4) - lwz 7,4(4) - stw 6,0(3) - stw 7,4(3) - /* Return original dst pointer. */ - mr 3,30 - lwz 30,20(1) - addi 1,1,32 - blr - .align 4 -4: bf 29,2b - lwz 6,0(4) - stw 6,0(3) -6: - bf 30,5f - lhz 7,4(4) - sth 7,4(3) - bf 31,0f - lbz 8,6(4) - stb 8,6(3) - mr 3,30 - lwz 30,20(1) - addi 1,1,32 - blr - .align 4 -5: - bf 31,0f - lbz 6,4(4) - stb 6,4(3) - .align 4 -0: - /* Return original dst pointer. */ - mr 3,30 - lwz 30,20(1) - addi 1,1,32 - blr - - .align 4 -.L6: - - /* Copy words where the destination is aligned but the source is - not. Use aligned word loads from the source, shifted to realign - the data, to allow aligned destination stores. - Use an unrolled loop to copy 4 words (16-bytes) per iteration. - A single word is retained for storing at loop exit to avoid walking - off the end of a page within the loop. - If the copy is not an exact multiple of 16 bytes, 1-3 - words are copied as needed to set up the main loop. After - the main loop exits there may be a tail of 1-3 bytes. These bytes are - copied a halfword/byte at a time as needed to preserve alignment. */ - - - cmplwi cr6,11,0 /* are there tail bytes left ? */ - subf 5,10,12 /* back up src pointer to prev word alignment */ - slwi 10,10,3 /* calculate number of bits to shift 1st word left */ - addi 11,9,-1 /* we move one word after the loop */ - srwi 8,11,2 /* calculate the 16 byte loop count */ - lwz 6,0(5) /* load 1st src word into R6 */ - mr 4,3 - lwz 7,4(5) /* load 2nd src word into R7 */ - mtcrf 0x01,11 - subfic 9,10,32 /* number of bits to shift 2nd word right */ - mtctr 8 - bf 30,1f - - /* there are at least two words to copy, so copy them */ -#ifdef __LITTLE_ENDIAN__ - srw 0,6,10 - slw 8,7,9 -#else - slw 0,6,10 /* shift 1st src word to left align it in R0 */ - srw 8,7,9 /* shift 2nd src word to right align it in R8 */ -#endif - or 0,0,8 /* or them to get word to store */ - lwz 6,8(5) /* load the 3rd src word */ - stw 0,0(4) /* store the 1st dst word */ -#ifdef __LITTLE_ENDIAN__ - srw 0,7,10 - slw 8,6,9 -#else - slw 0,7,10 /* now left align 2nd src word into R0 */ - srw 8,6,9 /* shift 3rd src word to right align it in R8 */ -#endif - or 0,0,8 /* or them to get word to store */ - lwz 7,12(5) - stw 0,4(4) /* store the 2nd dst word */ - addi 4,4,8 - addi 5,5,16 - bf 31,4f - /* there is a third word to copy, so copy it */ -#ifdef __LITTLE_ENDIAN__ - srw 0,6,10 - slw 8,7,9 -#else - slw 0,6,10 /* shift 3rd src word to left align it in R0 */ - srw 8,7,9 /* shift 4th src word to right align it in R8 */ -#endif - or 0,0,8 /* or them to get word to store */ - stw 0,0(4) /* store 3rd dst word */ - mr 6,7 - lwz 7,0(5) - addi 5,5,4 - addi 4,4,4 - b 4f - .align 4 -1: -#ifdef __LITTLE_ENDIAN__ - srw 0,6,10 - slw 8,7,9 -#else - slw 0,6,10 /* shift 1st src word to left align it in R0 */ - srw 8,7,9 /* shift 2nd src word to right align it in R8 */ -#endif - addi 5,5,8 - or 0,0,8 /* or them to get word to store */ - bf 31,4f - mr 6,7 - lwz 7,0(5) - addi 5,5,4 - stw 0,0(4) /* store the 1st dst word */ - addi 4,4,4 - - .align 4 -4: - /* copy 16 bytes at a time */ -#ifdef __LITTLE_ENDIAN__ - srw 0,6,10 - slw 8,7,9 -#else - slw 0,6,10 - srw 8,7,9 -#endif - or 0,0,8 - lwz 6,0(5) - stw 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srw 0,7,10 - slw 8,6,9 -#else - slw 0,7,10 - srw 8,6,9 -#endif - or 0,0,8 - lwz 7,4(5) - stw 0,4(4) -#ifdef __LITTLE_ENDIAN__ - srw 0,6,10 - slw 8,7,9 -#else - slw 0,6,10 - srw 8,7,9 -#endif - or 0,0,8 - lwz 6,8(5) - stw 0,8(4) -#ifdef __LITTLE_ENDIAN__ - srw 0,7,10 - slw 8,6,9 -#else - slw 0,7,10 - srw 8,6,9 -#endif - or 0,0,8 - lwz 7,12(5) - stw 0,12(4) - addi 5,5,16 - addi 4,4,16 - bdnz+ 4b -8: - /* calculate and store the final word */ -#ifdef __LITTLE_ENDIAN__ - srw 0,6,10 - slw 8,7,9 -#else - slw 0,6,10 - srw 8,7,9 -#endif - or 0,0,8 - stw 0,0(4) -3: - clrrwi 0,31,2 - mtcrf 0x01,31 - bne cr6,.L9 /* If the tail is 0 bytes we are done! */ - - /* Return original dst pointer. */ - mr 3,30 - lwz 30,20(1) - lwz 31,24(1) - addi 1,1,32 - blr -END (memcpy) - -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/powerpc/powerpc32/power4/memset.S b/sysdeps/powerpc/powerpc32/power4/memset.S deleted file mode 100644 index 25319f7233..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/memset.S +++ /dev/null @@ -1,226 +0,0 @@ -/* Optimized memset implementation for PowerPC64. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); - Returns 's'. - - The memset is done in three sizes: byte (8 bits), word (32 bits), - cache line (1024 bits). There is a special case for setting cache lines - to 0, to take advantage of the dcbz instruction. */ - - .machine power4 -EALIGN (memset, 5, 0) - CALL_MCOUNT - -#define rTMP r0 -#define rRTN r3 /* Initial value of 1st argument. */ -#define rMEMP0 r3 /* Original value of 1st arg. */ -#define rCHR r4 /* Char to set in each byte. */ -#define rLEN r5 /* Length of region to set. */ -#define rMEMP r6 /* Address at which we are storing. */ -#define rALIGN r7 /* Number of bytes we are setting now (when aligning). */ -#define rMEMP2 r8 - -#define rNEG64 r8 /* Constant -64 for clearing with dcbz. */ -#define rCLS r8 /* Cache line size (known to be 128). */ -#define rCLM r9 /* Cache line size mask to check for cache alignment. */ -L(_memset): -/* Take care of case for size <= 4. */ - cmplwi cr1, rLEN, 4 - andi. rALIGN, rMEMP0, 3 - mr rMEMP, rMEMP0 - ble- cr1, L(small) - -/* Align to word boundary. */ - cmplwi cr5, rLEN, 31 - insrwi rCHR, rCHR, 8, 16 /* Replicate byte to halfword. */ - beq+ L(aligned) - mtcrf 0x01, rMEMP0 - subfic rALIGN, rALIGN, 4 - add rMEMP, rMEMP, rALIGN - sub rLEN, rLEN, rALIGN - bf+ 31, L(g0) - stb rCHR, 0(rMEMP0) - bt 30, L(aligned) -L(g0): - sth rCHR, -2(rMEMP) - -/* Handle the case of size < 31. */ -L(aligned): - mtcrf 0x01, rLEN - insrwi rCHR, rCHR, 16, 0 /* Replicate halfword to word. */ - ble cr5, L(medium) -/* Align to 32-byte boundary. */ - andi. rALIGN, rMEMP, 0x1C - subfic rALIGN, rALIGN, 0x20 - beq L(caligned) - mtcrf 0x01, rALIGN - add rMEMP, rMEMP, rALIGN - sub rLEN, rLEN, rALIGN - cmplwi cr1, rALIGN, 0x10 - mr rMEMP2, rMEMP - bf 28, L(a1) - stw rCHR, -4(rMEMP2) - stwu rCHR, -8(rMEMP2) -L(a1): blt cr1, L(a2) - stw rCHR, -4(rMEMP2) - stw rCHR, -8(rMEMP2) - stw rCHR, -12(rMEMP2) - stwu rCHR, -16(rMEMP2) -L(a2): bf 29, L(caligned) - stw rCHR, -4(rMEMP2) - -/* Now aligned to a 32 byte boundary. */ -L(caligned): - cmplwi cr1, rCHR, 0 - clrrwi. rALIGN, rLEN, 5 - mtcrf 0x01, rLEN - beq cr1, L(zloopstart) /* Special case for clearing memory using dcbz. */ -L(nondcbz): - srwi rTMP, rALIGN, 5 - mtctr rTMP - beq L(medium) /* We may not actually get to do a full line. */ - clrlwi. rLEN, rLEN, 27 - add rMEMP, rMEMP, rALIGN - li rNEG64, -0x40 - bdz L(cloopdone) - - .align 4 -L(c3): dcbtst rNEG64, rMEMP - stw rCHR, -4(rMEMP) - stw rCHR, -8(rMEMP) - stw rCHR, -12(rMEMP) - stw rCHR, -16(rMEMP) - stw rCHR, -20(rMEMP) - stw rCHR, -24(rMEMP) - stw rCHR, -28(rMEMP) - stwu rCHR, -32(rMEMP) - bdnz L(c3) -L(cloopdone): - stw rCHR, -4(rMEMP) - stw rCHR, -8(rMEMP) - stw rCHR, -12(rMEMP) - stw rCHR, -16(rMEMP) - cmplwi cr1, rLEN, 16 - stw rCHR, -20(rMEMP) - stw rCHR, -24(rMEMP) - stw rCHR, -28(rMEMP) - stwu rCHR, -32(rMEMP) - beqlr - add rMEMP, rMEMP, rALIGN - b L(medium_tail2) - - .align 5 -/* Clear lines of memory in 128-byte chunks. */ -L(zloopstart): -/* If the remaining length is less the 32 bytes, don't bother getting - the cache line size. */ - beq L(medium) - li rCLS,128 /* cache line size is 128 */ - dcbt 0,rMEMP -L(getCacheAligned): - cmplwi cr1,rLEN,32 - andi. rTMP,rMEMP,127 - blt cr1,L(handletail32) - beq L(cacheAligned) - addi rMEMP,rMEMP,32 - addi rLEN,rLEN,-32 - stw rCHR,-32(rMEMP) - stw rCHR,-28(rMEMP) - stw rCHR,-24(rMEMP) - stw rCHR,-20(rMEMP) - stw rCHR,-16(rMEMP) - stw rCHR,-12(rMEMP) - stw rCHR,-8(rMEMP) - stw rCHR,-4(rMEMP) - b L(getCacheAligned) - -/* Now we are aligned to the cache line and can use dcbz. */ - .align 4 -L(cacheAligned): - cmplw cr1,rLEN,rCLS - blt cr1,L(handletail32) - dcbz 0,rMEMP - subf rLEN,rCLS,rLEN - add rMEMP,rMEMP,rCLS - b L(cacheAligned) - -/* We are here because the cache line size was set and the remainder - (rLEN) is less than the actual cache line size. - So set up the preconditions for L(nondcbz) and go there. */ -L(handletail32): - clrrwi. rALIGN, rLEN, 5 - b L(nondcbz) - - .align 5 -L(small): -/* Memset of 4 bytes or less. */ - cmplwi cr5, rLEN, 1 - cmplwi cr1, rLEN, 3 - bltlr cr5 - stb rCHR, 0(rMEMP) - beqlr cr5 - stb rCHR, 1(rMEMP) - bltlr cr1 - stb rCHR, 2(rMEMP) - beqlr cr1 - stb rCHR, 3(rMEMP) - blr - -/* Memset of 0-31 bytes. */ - .align 5 -L(medium): - cmplwi cr1, rLEN, 16 -L(medium_tail2): - add rMEMP, rMEMP, rLEN -L(medium_tail): - bt- 31, L(medium_31t) - bt- 30, L(medium_30t) -L(medium_30f): - bt- 29, L(medium_29t) -L(medium_29f): - bge- cr1, L(medium_27t) - bflr- 28 - stw rCHR, -4(rMEMP) - stw rCHR, -8(rMEMP) - blr - -L(medium_31t): - stbu rCHR, -1(rMEMP) - bf- 30, L(medium_30f) -L(medium_30t): - sthu rCHR, -2(rMEMP) - bf- 29, L(medium_29f) -L(medium_29t): - stwu rCHR, -4(rMEMP) - blt- cr1, L(medium_27f) -L(medium_27t): - stw rCHR, -4(rMEMP) - stw rCHR, -8(rMEMP) - stw rCHR, -12(rMEMP) - stwu rCHR, -16(rMEMP) -L(medium_27f): - bflr- 28 -L(medium_28t): - stw rCHR, -4(rMEMP) - stw rCHR, -8(rMEMP) - blr -END (memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/Makefile b/sysdeps/powerpc/powerpc32/power4/multiarch/Makefile deleted file mode 100644 index bd9d360efa..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -ifeq ($(subdir),string) -sysdep_routines += memcpy-power7 memcpy-a2 memcpy-power6 memcpy-cell \ - memcpy-ppc32 memcmp-power7 memcmp-ppc32 memset-power7 \ - memset-power6 memset-ppc32 bzero-power7 bzero-power6 \ - bzero-ppc32 mempcpy-power7 mempcpy-ppc32 memchr-power7 \ - memchr-ppc32 memrchr-power7 memrchr-ppc32 rawmemchr-power7 \ - rawmemchr-ppc32 strlen-power7 strlen-ppc32 strnlen-power7 \ - strnlen-ppc32 strncmp-power7 strncmp-ppc32 \ - strcasecmp-power7 strcasecmp_l-power7 strncase-power7 \ - strncase_l-power7 strchrnul-power7 strchrnul-ppc32 \ - strchr-power7 strchr-ppc32 \ - wordcopy-power7 wordcopy-ppc32 \ - memmove-power7 memmove-ppc - -CFLAGS-strncase-power7.c += -mcpu=power7 -funroll-loops -CFLAGS-strncase_l-power7.c += -mcpu=power7 -funroll-loops -endif - -ifeq ($(subdir),wcsmbs) -sysdep_routines += wcschr-power7 wcschr-power6 wcschr-ppc32 \ - wcsrchr-power7 wcsrchr-power6 wcsrchr-ppc32 \ - wcscpy-power7 wcscpy-power6 wcscpy-ppc32 - -CFLAGS-wcschr-power7.c += -mcpu=power7 -CFLAGS-wcschr-power6.c += -mcpu=power6 -CFLAGS-wcsrchr-power7.c += -mcpu=power7 -CFLAGS-wcsrchr-power6.c += -mcpu=power6 -CFLAGS-wcscpy-power7.c += -mcpu=power7 -CFLAGS-wcscpy-power6.c += -mcpu=power6 -endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/bzero-power6.S b/sysdeps/powerpc/powerpc32/power4/multiarch/bzero-power6.S deleted file mode 100644 index 4e000309cf..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/bzero-power6.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized bzero implementation for PowerPC32/POWER6. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__bzero_power6) - mr r5,r4 - li r4,0 - b __memset_power6@local -END (__bzero_power6) diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/bzero-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/bzero-power7.S deleted file mode 100644 index 580da55166..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/bzero-power7.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized bzero implementation for PowerPC32/POWER7. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__bzero_power7) - mr r5,r4 - li r4,0 - b __memset_power7@local -END (__bzero_power7) diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/bzero-ppc32.S b/sysdeps/powerpc/powerpc32/power4/multiarch/bzero-ppc32.S deleted file mode 100644 index 33c69cbfb9..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/bzero-ppc32.S +++ /dev/null @@ -1,35 +0,0 @@ -/* Optimized bzero implementation for PowerPC32/PPC32. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* memset ifunc selector is not built for static and memset@local - for shared builds makes the linker point the call to the ifunc - selector. */ -#ifdef SHARED -# define MEMSET __memset_ppc -#else -# define MEMSET memset -#endif - -ENTRY (__bzero_ppc) - mr r5,r4 - li r4,0 - b MEMSET@local -END (__bzero_ppc) diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/bzero.c b/sysdeps/powerpc/powerpc32/power4/multiarch/bzero.c deleted file mode 100644 index 865920ee26..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/bzero.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of bzero. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for definition in libc. */ -#if IS_IN (libc) -# include -# include -# include "init-arch.h" - -extern __typeof (bzero) __bzero_ppc attribute_hidden; -extern __typeof (bzero) __bzero_power6 attribute_hidden; -extern __typeof (bzero) __bzero_power7 attribute_hidden; - -libc_ifunc (__bzero, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __bzero_power7 : - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __bzero_power6 - : __bzero_ppc); - -weak_alias (__bzero, bzero) -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c deleted file mode 100644 index 1caf15a07d..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/ifunc-impl-list.c +++ /dev/null @@ -1,224 +0,0 @@ -/* Enumerate available IFUNC implementations of a function. PowerPC32 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Maximum number of IFUNC implementations. */ -#define MAX_IFUNC 6 - -size_t -__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, - size_t max) -{ - assert (max >= MAX_IFUNC); - - size_t i = 0; - - unsigned long int hwcap = GLRO(dl_hwcap); - /* hwcap contains only the latest supported ISA, the code checks which is - and fills the previous supported ones. */ - if (hwcap & PPC_FEATURE_ARCH_2_06) - hwcap |= PPC_FEATURE_ARCH_2_05 | PPC_FEATURE_POWER5_PLUS | - PPC_FEATURE_POWER5 | PPC_FEATURE_POWER4; - else if (hwcap & PPC_FEATURE_ARCH_2_05) - hwcap |= PPC_FEATURE_POWER5_PLUS | PPC_FEATURE_POWER5 | PPC_FEATURE_POWER4; - else if (hwcap & PPC_FEATURE_POWER5_PLUS) - hwcap |= PPC_FEATURE_POWER5 | PPC_FEATURE_POWER4; - else if (hwcap & PPC_FEATURE_POWER5) - hwcap |= PPC_FEATURE_POWER4; - -#ifdef SHARED - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/memcpy.c. */ - IFUNC_IMPL (i, name, memcpy, - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_HAS_VSX, - __memcpy_power7) - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_ARCH_2_06, - __memcpy_a2) - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_ARCH_2_05, - __memcpy_power6) - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_CELL_BE, - __memcpy_cell) - IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/memmove.c. */ - IFUNC_IMPL (i, name, memmove, - IFUNC_IMPL_ADD (array, i, memmove, hwcap & PPC_FEATURE_HAS_VSX, - __memmove_power7) - IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/memset.c. */ - IFUNC_IMPL (i, name, memset, - IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_HAS_VSX, - __memset_power7) - IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_ARCH_2_05, - __memset_power6) - IFUNC_IMPL_ADD (array, i, memset, 1, __memset_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/bzero.c. */ - IFUNC_IMPL (i, name, bzero, - IFUNC_IMPL_ADD (array, i, bzero, hwcap & PPC_FEATURE_HAS_VSX, - __bzero_power7) - IFUNC_IMPL_ADD (array, i, bzero, hwcap & PPC_FEATURE_ARCH_2_05, - __bzero_power6) - IFUNC_IMPL_ADD (array, i, bzero, 1, __bzero_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/strlen.c. */ - IFUNC_IMPL (i, name, strlen, - IFUNC_IMPL_ADD (array, i, strlen, hwcap & PPC_FEATURE_HAS_VSX, - __strlen_power7) - IFUNC_IMPL_ADD (array, i, strlen, 1, - __strlen_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/strnlen.c. */ - IFUNC_IMPL (i, name, strnlen, - IFUNC_IMPL_ADD (array, i, strnlen, hwcap & PPC_FEATURE_HAS_VSX, - __strnlen_power7) - IFUNC_IMPL_ADD (array, i, strnlen, 1, - __strnlen_ppc)) - - /* Support sysdeps/powerpc/powerpc32/multiarch/strncmp.c. */ - IFUNC_IMPL (i, name, strncmp, - IFUNC_IMPL_ADD (array, i, strncmp, hwcap & PPC_FEATURE_HAS_VSX, - __strncmp_power7) - IFUNC_IMPL_ADD (array, i, strncmp, 1, - __strncmp_ppc)) -#endif - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/memcmp.c. */ - IFUNC_IMPL (i, name, memcmp, - IFUNC_IMPL_ADD (array, i, memcmp, hwcap & PPC_FEATURE_HAS_VSX, - __memcmp_power7) - IFUNC_IMPL_ADD (array, i, memcmp, 1, __memcmp_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy.c. */ - IFUNC_IMPL (i, name, mempcpy, - IFUNC_IMPL_ADD (array, i, mempcpy, - hwcap & PPC_FEATURE_HAS_VSX, - __mempcpy_power7) - IFUNC_IMPL_ADD (array, i, mempcpy, 1, - __mempcpy_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/memchr.c. */ - IFUNC_IMPL (i, name, memchr, - IFUNC_IMPL_ADD (array, i, memchr, - hwcap & PPC_FEATURE_HAS_VSX, - __memchr_power7) - IFUNC_IMPL_ADD (array, i, memchr, 1, - __memchr_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/memrchr.c. */ - IFUNC_IMPL (i, name, memrchr, - IFUNC_IMPL_ADD (array, i, memrchr, - hwcap & PPC_FEATURE_HAS_VSX, - __memrchr_power7) - IFUNC_IMPL_ADD (array, i, memrchr, 1, - __memrchr_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/rawmemchr.c. */ - IFUNC_IMPL (i, name, rawmemchr, - IFUNC_IMPL_ADD (array, i, rawmemchr, - hwcap & PPC_FEATURE_HAS_VSX, - __rawmemchr_power7) - IFUNC_IMPL_ADD (array, i, rawmemchr, 1, - __rawmemchr_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp.c. */ - IFUNC_IMPL (i, name, strcasecmp, - IFUNC_IMPL_ADD (array, i, strcasecmp, - hwcap & PPC_FEATURE_HAS_VSX, - __strcasecmp_power7) - IFUNC_IMPL_ADD (array, i, strcasecmp, 1, __strcasecmp_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp_l.c. */ - IFUNC_IMPL (i, name, strcasecmp_l, - IFUNC_IMPL_ADD (array, i, strcasecmp_l, - hwcap & PPC_FEATURE_HAS_VSX, - __strcasecmp_l_power7) - IFUNC_IMPL_ADD (array, i, strcasecmp_l, 1, - __strcasecmp_l_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/strncase.c. */ - IFUNC_IMPL (i, name, strncasecmp, - IFUNC_IMPL_ADD (array, i, strncasecmp, - hwcap & PPC_FEATURE_HAS_VSX, - __strncasecmp_power7) - IFUNC_IMPL_ADD (array, i, strncasecmp, 1, __strncasecmp_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/strncase_l.c. */ - IFUNC_IMPL (i, name, strncasecmp_l, - IFUNC_IMPL_ADD (array, i, strncasecmp_l, - hwcap & PPC_FEATURE_HAS_VSX, - __strncasecmp_l_power7) - IFUNC_IMPL_ADD (array, i, strncasecmp_l, 1, - __strncasecmp_l_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/strchrnul.c. */ - IFUNC_IMPL (i, name, strchrnul, - IFUNC_IMPL_ADD (array, i, strchrnul, - hwcap & PPC_FEATURE_HAS_VSX, - __strchrnul_power7) - IFUNC_IMPL_ADD (array, i, strchrnul, 1, - __strchrnul_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/strchr.c. */ - IFUNC_IMPL (i, name, strchr, - IFUNC_IMPL_ADD (array, i, strchr, - hwcap & PPC_FEATURE_HAS_VSX, - __strchr_power7) - IFUNC_IMPL_ADD (array, i, strchr, 1, - __strchr_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/wcschr.c. */ - IFUNC_IMPL (i, name, wcschr, - IFUNC_IMPL_ADD (array, i, wcschr, - hwcap & PPC_FEATURE_HAS_VSX, - __wcschr_power7) - IFUNC_IMPL_ADD (array, i, wcschr, - hwcap & PPC_FEATURE_ARCH_2_05, - __wcschr_power6) - IFUNC_IMPL_ADD (array, i, wcschr, 1, - __wcschr_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr.c. */ - IFUNC_IMPL (i, name, wcsrchr, - IFUNC_IMPL_ADD (array, i, wcsrchr, - hwcap & PPC_FEATURE_HAS_VSX, - __wcsrchr_power7) - IFUNC_IMPL_ADD (array, i, wcsrchr, - hwcap & PPC_FEATURE_ARCH_2_05, - __wcsrchr_power6) - IFUNC_IMPL_ADD (array, i, wcsrchr, 1, - __wcsrchr_ppc)) - - /* Support sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy.c. */ - IFUNC_IMPL (i, name, wcscpy, - IFUNC_IMPL_ADD (array, i, wcscpy, - hwcap & PPC_FEATURE_HAS_VSX, - __wcscpy_power7) - IFUNC_IMPL_ADD (array, i, wcscpy, - hwcap & PPC_FEATURE_ARCH_2_05, - __wcscpy_power6) - IFUNC_IMPL_ADD (array, i, wcscpy, 1, - __wcscpy_ppc)) - - return i; -} diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/init-arch.h b/sysdeps/powerpc/powerpc32/power4/multiarch/init-arch.h deleted file mode 100644 index f2e6a4b705..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/init-arch.h +++ /dev/null @@ -1,53 +0,0 @@ -/* This file is part of the GNU C Library. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* The code checks if _rtld_global_ro was realocated before trying to access - the dl_hwcap field. The assembly is to make the compiler not optimize the - test (&_rtld_global_ro != NULL), which is always true in ISO C (but not - in that case since _rtld_global_ro might not been realocated yet). */ -#if defined(SHARED) && !IS_IN (rtld) -# define __GLRO(value) \ - ({ volatile void **__p = (volatile void**)(&_rtld_global_ro); \ - unsigned long int __ret; \ - asm ("# x in %0" : "+r" (__p)); \ - __ret = (__p) ? GLRO(value) : 0; \ - __ret; }) -#else -# define __GLRO(value) GLRO(value) -#endif - -/* dl_hwcap contains only the latest supported ISA, the macro checks which is - and fills the previous ones. */ -#define INIT_ARCH() \ - unsigned long int hwcap = __GLRO(dl_hwcap); \ - unsigned long int __attribute__((unused)) hwcap2 = __GLRO(dl_hwcap2); \ - if (hwcap & PPC_FEATURE_ARCH_2_06) \ - hwcap |= PPC_FEATURE_ARCH_2_05 | \ - PPC_FEATURE_POWER5_PLUS | \ - PPC_FEATURE_POWER5 | \ - PPC_FEATURE_POWER4; \ - else if (hwcap & PPC_FEATURE_ARCH_2_05) \ - hwcap |= PPC_FEATURE_POWER5_PLUS | \ - PPC_FEATURE_POWER5 | \ - PPC_FEATURE_POWER4; \ - else if (hwcap & PPC_FEATURE_POWER5_PLUS) \ - hwcap |= PPC_FEATURE_POWER5 | \ - PPC_FEATURE_POWER4; \ - else if (hwcap & PPC_FEATURE_POWER5) \ - hwcap |= PPC_FEATURE_POWER4; diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memchr-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memchr-power7.S deleted file mode 100644 index e7eb56a8fc..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memchr-power7.S +++ /dev/null @@ -1,40 +0,0 @@ -/* Optimized memchr implementation for PowerPC32/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef ENTRY -#define ENTRY(name) \ - .globl C_SYMBOL_NAME(__memchr_power7); \ - .type C_SYMBOL_NAME(__memchr_power7),@function; \ - C_LABEL(__memchr_power7) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__memchr_power7) - -#undef weak_alias -#define weak_alias(name, alias) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memchr-ppc32.c b/sysdeps/powerpc/powerpc32/power4/multiarch/memchr-ppc32.c deleted file mode 100644 index 1e4b88f9e9..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memchr-ppc32.c +++ /dev/null @@ -1,34 +0,0 @@ -/* PowerPC32 default implementation of memchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMCHR __memchr_ppc - -#undef weak_alias -#define weak_alias(a, b) - -#ifdef SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1(__memchr_ppc, __GI_memchr, __memchr_ppc); -#endif - -extern __typeof (memchr) __memchr_ppc attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memchr.c b/sysdeps/powerpc/powerpc32/power4/multiarch/memchr.c deleted file mode 100644 index 7eb4be7248..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memchr.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Multiple versions of memchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# undef memchr -/* Redefine memchr so that the compiler won't make the weak_alias point - to internal hidden definition (__GI_memchr), since PPC32 does not - support local IFUNC calls. */ -# define memchr __redirect_memchr -# include -# include "init-arch.h" - -extern __typeof (__redirect_memchr) __memchr_ppc attribute_hidden; -extern __typeof (__redirect_memchr) __memchr_power7 attribute_hidden; - -extern __typeof (__redirect_memchr) __libc_memchr; - -libc_ifunc (__libc_memchr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __memchr_power7 - : __memchr_ppc); -#undef memchr -weak_alias (__libc_memchr, memchr) -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-power7.S deleted file mode 100644 index e002aef057..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-power7.S +++ /dev/null @@ -1,41 +0,0 @@ -/* Optimized memcmp implementation for POWER7/PowerPC32. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef EALIGN -#define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(__memcmp_power7); \ - .type C_SYMBOL_NAME(__memcmp_power7),@function; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(__memcmp_power7) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__memcmp_power7) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#undef weak_alias -#define weak_alias(a, b) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-ppc32.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-ppc32.S deleted file mode 100644 index dc1f21bcb5..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp-ppc32.S +++ /dev/null @@ -1,45 +0,0 @@ -/* Default memcmp implementation for PowerPC32. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if IS_IN (libc) -# undef EALIGN -# define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(__memcmp_ppc); \ - .type C_SYMBOL_NAME(__memcmp_ppc),@function; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(__memcmp_ppc) \ - cfi_startproc; - -# undef END -# define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__memcmp_ppc) - -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - .globl __GI_memcmp; __GI_memcmp = __memcmp_ppc - -# undef weak_alias -# define weak_alias(a, b) \ - .weak b ; b = __memcmp_ppc -#endif - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp.c b/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp.c deleted file mode 100644 index 00bbcfaa4c..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memcmp.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of memcmp. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for definition in libc. */ -#if IS_IN (libc) -# define memcmp __redirect_memcmp -# include -# include -# include "init-arch.h" - -extern __typeof (memcmp) __memcmp_ppc attribute_hidden; -extern __typeof (memcmp) __memcmp_power7 attribute_hidden; -# undef memcmp - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect_memcmp, memcmp, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __memcmp_power7 - : __memcmp_ppc); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-a2.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-a2.S deleted file mode 100644 index 17a31226c5..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-a2.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Optimized memcpy implementation for PowerPC A2. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef EALIGN -#define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(__memcpy_a2); \ - .type C_SYMBOL_NAME(__memcpy_a2),@function; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(__memcpy_a2) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__memcpy_a2) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-cell.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-cell.S deleted file mode 100644 index 59859c6b94..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-cell.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Optimized memcpy implementation for CELL BE PowerPC. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef EALIGN -#define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(__memcpy_cell); \ - .type C_SYMBOL_NAME(__memcpy_cell),@function; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(__memcpy_cell) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__memcpy_cell) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-power6.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-power6.S deleted file mode 100644 index 750151973b..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-power6.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Optimized memcpy implementation for PowerPC32 on POWER6. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef EALIGN -#define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(__memcpy_power6); \ - .type C_SYMBOL_NAME(__memcpy_power6),@function; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(__memcpy_power6) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__memcpy_power6) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-power7.S deleted file mode 100644 index 3ac7c32084..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-power7.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Optimized memcpy implementation for PowerPC32/POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef EALIGN -#define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(__memcpy_power7); \ - .type C_SYMBOL_NAME(__memcpy_power7),@function; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(__memcpy_power7) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__memcpy_power7) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-ppc32.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-ppc32.S deleted file mode 100644 index f018684155..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy-ppc32.S +++ /dev/null @@ -1,41 +0,0 @@ -/* Default memcpy implementation for PowerPC32. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if defined SHARED && IS_IN (libc) -# undef EALIGN -# define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(__memcpy_ppc); \ - .type C_SYMBOL_NAME(__memcpy_ppc),@function; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(__memcpy_ppc) \ - cfi_startproc; - -# undef END -# define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__memcpy_ppc) - -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - .globl __GI_memcpy; __GI_memcpy = __memcpy_ppc -#endif - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy.c b/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy.c deleted file mode 100644 index b414ba946b..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memcpy.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Multiple versions of memcpy. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for the definition in lib and for - DSO. In static binaries we need memcpy before the initialization - happened. */ -#if defined SHARED && IS_IN (libc) -# undef memcpy -# define memcpy __redirect_memcpy -# include -# include -# include "init-arch.h" - -extern __typeof (memcpy) __memcpy_ppc attribute_hidden; -extern __typeof (memcpy) __memcpy_cell attribute_hidden; -extern __typeof (memcpy) __memcpy_power6 attribute_hidden; -extern __typeof (memcpy) __memcpy_a2 attribute_hidden; -extern __typeof (memcpy) __memcpy_power7 attribute_hidden; -# undef memcpy - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect_memcpy, memcpy, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __memcpy_power7 - : (hwcap & PPC_FEATURE_ARCH_2_06) - ? __memcpy_a2 - : (hwcap & PPC_FEATURE_ARCH_2_05) - ? __memcpy_power6 - : (hwcap & PPC_FEATURE_CELL_BE) - ? __memcpy_cell - : __memcpy_ppc); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memmove-power7.c b/sysdeps/powerpc/powerpc32/power4/multiarch/memmove-power7.c deleted file mode 100644 index 12902fec3f..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memmove-power7.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Power7 multiarch memmove. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include - -extern __typeof (_wordcopy_fwd_aligned) _wordcopy_fwd_aligned_power7; -extern __typeof (_wordcopy_fwd_dest_aligned) _wordcopy_fwd_dest_aligned_power7; -extern __typeof (_wordcopy_bwd_aligned) _wordcopy_bwd_aligned_power7; -extern __typeof (_wordcopy_bwd_dest_aligned) _wordcopy_bwd_dest_aligned_power7; - -#define _wordcopy_fwd_aligned _wordcopy_fwd_aligned_power7 -#define _wordcopy_fwd_dest_aligned _wordcopy_fwd_dest_aligned_power7 -#define _wordcopy_bwd_aligned _wordcopy_bwd_aligned_power7 -#define _wordcopy_bwd_dest_aligned _wordcopy_bwd_dest_aligned_power7 - -extern __typeof (memcpy) __memcpy_power7; -#define memcpy __memcpy_power7 - -extern __typeof (memmove) __memmove_power7; -#define MEMMOVE __memmove_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memmove-ppc.c b/sysdeps/powerpc/powerpc32/power4/multiarch/memmove-ppc.c deleted file mode 100644 index 59f298507c..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memmove-ppc.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Power7 multiarch memmove. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include - -extern __typeof (_wordcopy_fwd_aligned) _wordcopy_fwd_aligned_ppc; -extern __typeof (_wordcopy_fwd_dest_aligned) _wordcopy_fwd_dest_aligned_ppc; -extern __typeof (_wordcopy_bwd_aligned) _wordcopy_bwd_aligned_ppc; -extern __typeof (_wordcopy_bwd_dest_aligned) _wordcopy_bwd_dest_aligned_ppc; - -#define _wordcopy_fwd_aligned _wordcopy_fwd_aligned_ppc -#define _wordcopy_fwd_dest_aligned _wordcopy_fwd_dest_aligned_ppc -#define _wordcopy_bwd_aligned _wordcopy_bwd_aligned_ppc -#define _wordcopy_bwd_dest_aligned _wordcopy_bwd_dest_aligned_ppc - -extern __typeof (memcpy) __memcpy_ppc; -#define memcpy __memcpy_ppc - -extern __typeof (memmove) __memmove_ppc; -#define MEMMOVE __memmove_ppc - -#if defined SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__memmove_ppc, __GI_memmove, __memmove_ppc); -#endif - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memmove.c b/sysdeps/powerpc/powerpc32/power4/multiarch/memmove.c deleted file mode 100644 index 481139fae8..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memmove.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of memmove. PowerPC32 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined SHARED && IS_IN (libc) -/* Redefine memmove so that the compiler won't complain about the type - mismatch with the IFUNC selector in strong_alias, below. */ -# define memmove __redirect_memmove -# include -# include "init-arch.h" - -extern __typeof (memmove) __memmove_ppc attribute_hidden; -extern __typeof (memmove) __memmove_power7 attribute_hidden; -# undef memmove - -libc_ifunc_redirected (__redirect_memmove, memmove, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __memmove_power7 - : __memmove_ppc); -#else -# include -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy-power7.S deleted file mode 100644 index a1a078dec6..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy-power7.S +++ /dev/null @@ -1,35 +0,0 @@ -/* Optimized mempcpy implementation for POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef EALIGN -#define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(__mempcpy_power7); \ - .type C_SYMBOL_NAME(__mempcpy_power7),@function; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(__mempcpy_power7) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__mempcpy_power7) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy-ppc32.c b/sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy-ppc32.c deleted file mode 100644 index 2a20060e5b..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy-ppc32.c +++ /dev/null @@ -1,32 +0,0 @@ -/* PowerPC32 default implementation of mempcpy. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define MEMPCPY __mempcpy_ppc - -#undef libc_hidden_def -#define libc_hidden_def(name) -#undef weak_alias -#define weak_alias(a, b) - -#if defined SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__mempcpy_ppc, __GI_mempcpy, __mempcpy_ppc); -#endif - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy.c b/sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy.c deleted file mode 100644 index 0c7250a4bf..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Multiple versions of mempcpy. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define mempcpy __redirect_mempcpy -# define __mempcpy __redirect___mempcpy -# define NO_MEMPCPY_STPCPY_REDIRECT -/* Omit the mempcpy inline definitions because it would redefine mempcpy. */ -# define _HAVE_STRING_ARCH_mempcpy 1 -# include -# include -# include "init-arch.h" - -extern __typeof (__mempcpy) __mempcpy_ppc attribute_hidden; -extern __typeof (__mempcpy) __mempcpy_power7 attribute_hidden; -# undef mempcpy -# undef __mempcpy - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect___mempcpy, __mempcpy, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __mempcpy_power7 - : __mempcpy_ppc); - -weak_alias (__mempcpy, mempcpy) -#else -# include -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memrchr-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memrchr-power7.S deleted file mode 100644 index 4c3f6af9f3..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memrchr-power7.S +++ /dev/null @@ -1,40 +0,0 @@ -/* Optimized memrchr implementation for PowerPC32/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef ENTRY -#define ENTRY(name) \ - .globl C_SYMBOL_NAME(__memrchr_power7); \ - .type C_SYMBOL_NAME(__memrchr_power7),@function; \ - C_LABEL(__memrchr_power7) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__memrchr_power7) - -#undef weak_alias -#define weak_alias(name, alias) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memrchr-ppc32.c b/sysdeps/powerpc/powerpc32/power4/multiarch/memrchr-ppc32.c deleted file mode 100644 index a0247f49c8..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memrchr-ppc32.c +++ /dev/null @@ -1,25 +0,0 @@ -/* PowerPC32 default implementation of memrchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define MEMRCHR __memrchr_ppc -# include -extern void *__memrchr_ppc (const void *, int, size_t); -#endif - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memrchr.c b/sysdeps/powerpc/powerpc32/power4/multiarch/memrchr.c deleted file mode 100644 index fb09fdf89c..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memrchr.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of memrchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# include -# include "init-arch.h" - -extern __typeof (__memrchr) __memrchr_ppc attribute_hidden; -extern __typeof (__memrchr) __memrchr_power7 attribute_hidden; - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc (__memrchr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __memrchr_power7 - : __memrchr_ppc); - -weak_alias (__memrchr, memrchr) -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memset-power6.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memset-power6.S deleted file mode 100644 index 55ff437a20..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memset-power6.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Optimized 32-bit memset implementation for POWER6. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef EALIGN -#define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(__memset_power6); \ - .type C_SYMBOL_NAME(__memset_power6),@function; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(__memset_power6) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__memset_power6) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memset-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memset-power7.S deleted file mode 100644 index ced4cb015b..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memset-power7.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Optimized memset implementation for PowerPC32/POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef EALIGN -#define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(__memset_power7); \ - .type C_SYMBOL_NAME(__memset_power7),@function; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(__memset_power7) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__memset_power7) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memset-ppc32.S b/sysdeps/powerpc/powerpc32/power4/multiarch/memset-ppc32.S deleted file mode 100644 index 63cd5b4eea..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memset-ppc32.S +++ /dev/null @@ -1,41 +0,0 @@ -/* Default memset implementation for PowerPC32. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if defined SHARED && IS_IN (libc) -# undef EALIGN -# define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(__memset_ppc); \ - .type C_SYMBOL_NAME(__memset_ppc),@function; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(__memset_ppc) \ - cfi_startproc; - -# undef END -# define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__memset_ppc) - -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - .globl __GI_memset; __GI_memset = __memset_ppc -#endif - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/memset.c b/sysdeps/powerpc/powerpc32/power4/multiarch/memset.c deleted file mode 100644 index afcca12c78..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/memset.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Multiple versions of memset. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for definition in libc. */ -#if defined SHARED && IS_IN (libc) -# define memset __redirect_memset -# include -# include -# include "init-arch.h" - -extern __typeof (memset) __memset_ppc attribute_hidden; -extern __typeof (memset) __memset_power6 attribute_hidden; -extern __typeof (memset) __memset_power7 attribute_hidden; -# undef memset - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect_memset, memset, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __memset_power7 - : (hwcap & PPC_FEATURE_ARCH_2_05) - ? __memset_power6 - : __memset_ppc); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/rawmemchr-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/rawmemchr-power7.S deleted file mode 100644 index e088c6b046..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/rawmemchr-power7.S +++ /dev/null @@ -1,40 +0,0 @@ -/* Optimized rawrawmemchr implementation for PowerPC32/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef ENTRY -#define ENTRY(name) \ - .globl C_SYMBOL_NAME(__rawmemchr_power7); \ - .type C_SYMBOL_NAME(__rawmemchr_power7),@function; \ - C_LABEL(__rawmemchr_power7) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__rawmemchr_power7) - -#undef weak_alias -#define weak_alias(name, alias) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/rawmemchr-ppc32.c b/sysdeps/powerpc/powerpc32/power4/multiarch/rawmemchr-ppc32.c deleted file mode 100644 index bce76cbe75..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/rawmemchr-ppc32.c +++ /dev/null @@ -1,32 +0,0 @@ -/* PowerPC32 default implementation of rawmemchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define RAWMEMCHR __rawmemchr_ppc -#undef weak_alias -#define weak_alias(a, b) -#ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__rawmemchr_ppc, __GI___rawmemchr, __rawmemchr_ppc); -#endif - -extern __typeof (rawmemchr) __rawmemchr_ppc attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/rawmemchr.c b/sysdeps/powerpc/powerpc32/power4/multiarch/rawmemchr.c deleted file mode 100644 index 6ea56db0af..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/rawmemchr.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Multiple versions of rawmemchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define __rawmemchr __redirect___rawmemchr -# include -# include -# include "init-arch.h" - -extern __typeof (__rawmemchr) __rawmemchr_ppc attribute_hidden; -extern __typeof (__rawmemchr) __rawmemchr_power7 attribute_hidden; -# undef __rawmemchr - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect___rawmemchr, __rawmemchr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __rawmemchr_power7 - : __rawmemchr_ppc); -weak_alias (__rawmemchr, rawmemchr) -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/rtld-memcmp.S b/sysdeps/powerpc/powerpc32/power4/multiarch/rtld-memcmp.S deleted file mode 100644 index b676dd147e..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/rtld-memcmp.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Loader memcmp implementation for PowerPC32. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/rtld-memset.S b/sysdeps/powerpc/powerpc32/power4/multiarch/rtld-memset.S deleted file mode 100644 index b9eb81328f..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/rtld-memset.S +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/rtld-strchr.S b/sysdeps/powerpc/powerpc32/power4/multiarch/rtld-strchr.S deleted file mode 100644 index 5d197557af..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/rtld-strchr.S +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/rtld-strnlen.c b/sysdeps/powerpc/powerpc32/power4/multiarch/rtld-strnlen.c deleted file mode 100644 index 79704aa2d9..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/rtld-strnlen.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp-power7.S deleted file mode 100644 index f9324a972e..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp-power7.S +++ /dev/null @@ -1,39 +0,0 @@ -/* Optimized strcasecmp implementation for PowerPC32. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef ENTRY -#define ENTRY(name) \ - .globl C_SYMBOL_NAME(__strcasecmp_power7); \ - .type C_SYMBOL_NAME(__strcasecmp_power7),@function; \ - C_LABEL(__strcasecmp_power7) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__strcasecmp_power7) - -#undef weak_alias -#define weak_alias(name, alias) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp.c b/sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp.c deleted file mode 100644 index da7d8415d2..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Multiple versions of strcasecmp. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# define strcasecmp __strcasecmp_ppc - -extern __typeof (__strcasecmp) __strcasecmp_ppc attribute_hidden; -extern __typeof (__strcasecmp) __strcasecmp_power7 attribute_hidden; -#endif - -#include -#undef strcasecmp - -#if IS_IN (libc) -# include -# include "init-arch.h" - -extern __typeof (__strcasecmp) __libc_strcasecmp; -libc_ifunc (__libc_strcasecmp, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strcasecmp_power7 - : __strcasecmp_ppc); - -weak_alias (__libc_strcasecmp, strcasecmp) -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp_l-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp_l-power7.S deleted file mode 100644 index 66e0584139..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp_l-power7.S +++ /dev/null @@ -1,41 +0,0 @@ -/* Default strcasecmp implementation for PowerPC32. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef ENTRY -#define ENTRY(name) \ - .globl C_SYMBOL_NAME(__strcasecmp_l_power7); \ - .type C_SYMBOL_NAME(__strcasecmp_l_power7),@function; \ - C_LABEL(__strcasecmp_l_power7) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__strcasecmp_l_power7) - -#undef weak_alias -#define weak_alias(name, alias) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#define USE_IN_EXTENDED_LOCALE_MODEL - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp_l.c b/sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp_l.c deleted file mode 100644 index 85411f5558..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strcasecmp_l.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Multiple versions of strcasecmp. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# define strcasecmp_l __strcasecmp_l_ppc - -extern __typeof (__strcasecmp_l) __strcasecmp_l_ppc attribute_hidden; -extern __typeof (__strcasecmp_l) __strcasecmp_l_power7 attribute_hidden; -#endif - -#include -#undef strcasecmp_l - -#if IS_IN (libc) -# include -# include "init-arch.h" - -extern __typeof (__strcasecmp_l) __libc_strcasecmp_l; -libc_ifunc (__libc_strcasecmp_l, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strcasecmp_l_power7 - : __strcasecmp_l_ppc); - -weak_alias (__libc_strcasecmp_l, strcasecmp_l) -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strchr-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/strchr-power7.S deleted file mode 100644 index 7624a27bbd..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strchr-power7.S +++ /dev/null @@ -1,39 +0,0 @@ -/* Optimized strchr implementation for PowerPC32/POWER7 using cmpb insn. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef ENTRY -#define ENTRY(name) \ - .globl C_SYMBOL_NAME(__strchr_power7); \ - .type C_SYMBOL_NAME(__strchr_power7),@function; \ - C_LABEL(__strchr_power7) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__strchr_power7) - -#undef weak_alias -#define weak_alias(name, alias) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strchr-ppc32.S b/sysdeps/powerpc/powerpc32/power4/multiarch/strchr-ppc32.S deleted file mode 100644 index 7dcd55af59..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strchr-ppc32.S +++ /dev/null @@ -1,41 +0,0 @@ -/* PowerPC32 default implementation of strchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef SHARED -# undef ENTRY -# define ENTRY(name) \ - .globl C_SYMBOL_NAME(__strchr_ppc); \ - .type C_SYMBOL_NAME(__strchr_ppc),@function; \ - .align ALIGNARG(2); \ - C_LABEL(__strchr_ppc) \ - cfi_startproc; \ - CALL_MCOUNT - -# undef END -# define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__strchr_ppc) \ - -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - .globl __GI_strchr; __GI_strchr = __strchr_ppc -#endif - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strchr.c b/sysdeps/powerpc/powerpc32/power4/multiarch/strchr.c deleted file mode 100644 index 712bc1a4b8..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strchr.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Multiple versions of strchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for definition in libc. */ -#if defined SHARED && IS_IN (libc) -# define strchr __redirect_strchr -/* Omit the strchr inline definitions because it would redefine strchr. */ -# define __NO_STRING_INLINES -# include -# include -# include "init-arch.h" - -extern __typeof (strchr) __strchr_ppc attribute_hidden; -extern __typeof (strchr) __strchr_power7 attribute_hidden; -# undef strchr - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect_strchr, strchr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strchr_power7 - : __strchr_ppc); -weak_alias (strchr, index) -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strchrnul-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/strchrnul-power7.S deleted file mode 100644 index 3baad50818..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strchrnul-power7.S +++ /dev/null @@ -1,39 +0,0 @@ -/* Optimized strchrnul implementation for PowerPC32/POWER7 using cmpb insn. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef ENTRY -#define ENTRY(name) \ - .globl C_SYMBOL_NAME(__strchrnul_power7); \ - .type C_SYMBOL_NAME(__strchrnul_power7),@function; \ - C_LABEL(__strchrnul_power7) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__strchrnul_power7) - -#undef weak_alias -#define weak_alias(name, alias) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strchrnul-ppc32.c b/sysdeps/powerpc/powerpc32/power4/multiarch/strchrnul-ppc32.c deleted file mode 100644 index c981eb67f3..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strchrnul-ppc32.c +++ /dev/null @@ -1,28 +0,0 @@ -/* PowerPC32 default implementation of strchrnul. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCHRNUL __strchrnul_ppc - -#undef weak_alias -#define weak_alias(a,b ) - -extern __typeof (strchrnul) __strchrnul_ppc attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strchrnul.c b/sysdeps/powerpc/powerpc32/power4/multiarch/strchrnul.c deleted file mode 100644 index b8f853d8e4..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strchrnul.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of strchrnul. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# include -# include "init-arch.h" - -extern __typeof (__strchrnul) __strchrnul_ppc attribute_hidden; -extern __typeof (__strchrnul) __strchrnul_power7 attribute_hidden; - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc (__strchrnul, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strchrnul_power7 - : __strchrnul_ppc); - -weak_alias (__strchrnul, strchrnul) -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strlen-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/strlen-power7.S deleted file mode 100644 index 7681b827d6..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strlen-power7.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Optimized strlen implementation for PowerPC32/POWER7 using cmpb insn. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef ENTRY -#define ENTRY(name) \ - .globl C_SYMBOL_NAME(__strlen_power7); \ - .type C_SYMBOL_NAME(__strlen_power7),@function; \ - C_LABEL(__strlen_power7) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__strlen_power7) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strlen-ppc32.S b/sysdeps/powerpc/powerpc32/power4/multiarch/strlen-ppc32.S deleted file mode 100644 index b665977e17..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strlen-ppc32.S +++ /dev/null @@ -1,41 +0,0 @@ -/* Default strlen implementation for PowerPC32. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined SHARED && IS_IN (libc) - -#include - -# undef ENTRY -# define ENTRY(name) \ - .globl C_SYMBOL_NAME(__strlen_ppc); \ - .type C_SYMBOL_NAME(__strlen_ppc),@function; \ - C_LABEL(__strlen_ppc) \ - cfi_startproc; - -# undef END -# define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__strlen_ppc) - -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - .globl __GI_strlen; __GI_strlen = __strlen_ppc - -#endif - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strlen.c b/sysdeps/powerpc/powerpc32/power4/multiarch/strlen.c deleted file mode 100644 index c13940e999..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strlen.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Multiple versions of strlen. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined SHARED && IS_IN (libc) -# define strlen __redirect_strlen -# include -# include -# include "init-arch.h" - -extern __typeof (strlen) __strlen_ppc attribute_hidden; -extern __typeof (strlen) __strlen_power7 attribute_hidden; -# undef strlen - -libc_ifunc_redirected (__redirect_strlen, strlen, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strlen_power7 - : __strlen_ppc); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strncase-power7.c b/sysdeps/powerpc/powerpc32/power4/multiarch/strncase-power7.c deleted file mode 100644 index a49bed9278..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strncase-power7.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized strcasecmp_l implememtation for POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include - -#define __strncasecmp __strncasecmp_power7 - -extern __typeof (strncasecmp) __strncasecmp_power7 attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strncase.c b/sysdeps/powerpc/powerpc32/power4/multiarch/strncase.c deleted file mode 100644 index 089faa9853..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strncase.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Multiple versions of strncasecmp. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# define strncasecmp __strncasecmp_ppc -extern __typeof (__strncasecmp) __strncasecmp_ppc attribute_hidden; -extern __typeof (__strncasecmp) __strncasecmp_power7 attribute_hidden; -#endif - -#include -#undef strncasecmp - -#if IS_IN (libc) -# include -# include "init-arch.h" - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -extern __typeof (__strncasecmp) __libc_strncasecmp; -libc_ifunc (__libc_strncasecmp, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strncasecmp_power7 - : __strncasecmp_ppc); -weak_alias (__libc_strncasecmp, strncasecmp) -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strncase_l-power7.c b/sysdeps/powerpc/powerpc32/power4/multiarch/strncase_l-power7.c deleted file mode 100644 index 80f7d48133..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strncase_l-power7.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized strcasecmp_l implememtation for POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __strncasecmp_l __strncasecmp_l_power7 -#define USE_IN_EXTENDED_LOCALE_MODEL 1 - -extern __typeof (strncasecmp_l) __strncasecmp_l_power7 attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strncase_l.c b/sysdeps/powerpc/powerpc32/power4/multiarch/strncase_l.c deleted file mode 100644 index c988c8dd3f..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strncase_l.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Multiple versions of strncasecmp_l. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# define strncasecmp_l __strncasecmp_l_ppc -extern __typeof (__strncasecmp_l) __strncasecmp_l_ppc attribute_hidden; -extern __typeof (__strncasecmp_l) __strncasecmp_l_power7 attribute_hidden; -#endif - -#include -#undef strncasecmp_l - -#if IS_IN (libc) -# include -# include "init-arch.h" - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -extern __typeof (__strncasecmp_l) __libc_strncasecmp_l; -libc_ifunc (__libc_strncasecmp_l, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strncasecmp_l_power7 - : __strncasecmp_l_ppc); - -weak_alias (__libc_strncasecmp_l, strncasecmp_l) -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp-power7.S deleted file mode 100644 index cbe969a5a4..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp-power7.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Optimized strcmp implementation for POWER7/PowerPC32. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef EALIGN -#define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(__strncmp_power7); \ - .type C_SYMBOL_NAME(__strncmp_power7),@function; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(__strncmp_power7) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__strncmp_power7) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp-ppc32.S b/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp-ppc32.S deleted file mode 100644 index 2f5d2d3651..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp-ppc32.S +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if defined SHARED && IS_IN (libc) -# undef EALIGN -# define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(__strncmp_ppc); \ - .type C_SYMBOL_NAME(__strncmp_ppc),@function; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(__strncmp_ppc) \ - cfi_startproc; - -# undef END -# define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__strncmp_ppc) - -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - .globl __GI_strncmp; __GI_strncmp = __strncmp_ppc -#endif - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp.c b/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp.c deleted file mode 100644 index bb4e892df8..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strncmp.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Multiple versions of strncmp. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for definition in libc. */ -#if defined SHARED && IS_IN (libc) -# define strncmp __redirect_strncmp -/* Omit the strncmp inline definitions because it would redefine strncmp. */ -# define __NO_STRING_INLINES -# include -# include -# include "init-arch.h" - -extern __typeof (strncmp) __strncmp_ppc attribute_hidden; -extern __typeof (strncmp) __strncmp_power4 attribute_hidden; -extern __typeof (strncmp) __strncmp_power7 attribute_hidden; -# undef strncmp - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect_strncmp, strncmp, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strncmp_power7 - : __strncmp_ppc); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strnlen-power7.S b/sysdeps/powerpc/powerpc32/power4/multiarch/strnlen-power7.S deleted file mode 100644 index 3f5a32f0c6..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strnlen-power7.S +++ /dev/null @@ -1,40 +0,0 @@ -/* Optimized strnlen implementation for PowerPC32/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef ENTRY -#define ENTRY(name) \ - .globl C_SYMBOL_NAME(__strnlen_power7); \ - .type C_SYMBOL_NAME(__strnlen_power7),@function; \ - C_LABEL(__strnlen_power7) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(__strnlen_power7) - -#undef libc_hidden_def -#define libc_hidden_def(name) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strnlen-ppc32.c b/sysdeps/powerpc/powerpc32/power4/multiarch/strnlen-ppc32.c deleted file mode 100644 index b41fc9d359..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strnlen-ppc32.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Default strnlen implementation for PowerPC32. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define STRNLEN __strnlen_ppc -#ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__strnlen_ppc, __GI_strnlen, __strnlen_ppc); \ - strong_alias (__strnlen_ppc, __strnlen_ppc_1); \ - __hidden_ver1 (__strnlen_ppc_1, __GI___strnlen, __strnlen_ppc_1); -#endif - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/strnlen.c b/sysdeps/powerpc/powerpc32/power4/multiarch/strnlen.c deleted file mode 100644 index f2883e69eb..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/strnlen.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of strnlen. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define strnlen __redirect_strnlen -# define __strnlen __redirect___strnlen -# include -# include -# include "init-arch.h" - -extern __typeof (__strnlen) __strnlen_ppc attribute_hidden; -extern __typeof (__strnlen) __strnlen_power7 attribute_hidden; -# undef strnlen -# undef __strnlen - -libc_ifunc_redirected (__redirect___strnlen, __strnlen, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strnlen_power7 - : __strnlen_ppc); -weak_alias (__strnlen, strnlen) -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-power6.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-power6.c deleted file mode 100644 index 6610b5ef82..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-power6.c +++ /dev/null @@ -1,26 +0,0 @@ -/* wcschr.c - Wide Character Search for powerpc32/power6. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include - -#define WCSCHR __wcschr_power6 - -#undef libc_hidden_def -#define libc_hidden_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-power7.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-power7.c deleted file mode 100644 index 7e22c441ac..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-power7.c +++ /dev/null @@ -1,26 +0,0 @@ -/* wcschr.c - Wide Character Search for powerpc32/power7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include - -#define WCSCHR __wcschr_power7 - -#undef libc_hidden_def -#define libc_hidden_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-ppc32.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-ppc32.c deleted file mode 100644 index 777ec080b2..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-ppc32.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if IS_IN (libc) -# undef libc_hidden_weak -# define libc_hidden_weak(name) - -# undef weak_alias -# undef libc_hidden_def - -# ifdef SHARED -# define libc_hidden_def(name) \ - __hidden_ver1 (__wcschr_ppc, __GI_wcschr, __wcschr_ppc); \ - strong_alias (__wcschr_ppc, __wcschr_ppc_1); \ - __hidden_ver1 (__wcschr_ppc_1, __GI___wcschr, __wcschr_ppc_1); -# define weak_alias(name,alias) -# else -# define weak_alias(name, alias) \ - _weak_alias(__wcschr_ppc, __wcschr) -# define libc_hidden_def(name) -# endif /* SHARED */ -#endif - -extern __typeof (wcschr) __wcschr_ppc; - -#define WCSCHR __wcschr_ppc -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr.c deleted file mode 100644 index 059665f1b1..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Multiple versions of wcschr - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define wcschr __redirect_wcschr -# include -# include -# include "init-arch.h" - -extern __typeof (__redirect_wcschr) __wcschr_ppc attribute_hidden; -extern __typeof (__redirect_wcschr) __wcschr_power6 attribute_hidden; -extern __typeof (__redirect_wcschr) __wcschr_power7 attribute_hidden; - -extern __typeof (__redirect_wcschr) __libc_wcschr; - -libc_ifunc (__libc_wcschr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __wcschr_power7 : - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __wcschr_power6 - : __wcschr_ppc); -#undef wcschr -weak_alias (__libc_wcschr, wcschr) -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power6.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power6.c deleted file mode 100644 index 8e732fc80c..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power6.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define WCSCPY __wcscpy_power6 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power7.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power7.c deleted file mode 100644 index dece1024f4..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-power7.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define WCSCPY __wcscpy_power7 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-ppc32.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-ppc32.c deleted file mode 100644 index b48ff54d92..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy-ppc32.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if IS_IN (libc) -# define WCSCPY __wcscpy_ppc -#endif - -extern __typeof (wcscpy) __wcscpy_ppc; - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy.c deleted file mode 100644 index a59e794f03..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcscpy.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of wcscpy - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# include -# include "init-arch.h" - -extern __typeof (wcscpy) __wcscpy_ppc attribute_hidden; -extern __typeof (wcscpy) __wcscpy_power6 attribute_hidden; -extern __typeof (wcscpy) __wcscpy_power7 attribute_hidden; - -libc_ifunc (wcscpy, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __wcscpy_power7 : - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __wcscpy_power6 - : __wcscpy_ppc); -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr-power6.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr-power6.c deleted file mode 100644 index 0391e12442..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr-power6.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define WCSRCHR __wcsrchr_power6 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr-power7.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr-power7.c deleted file mode 100644 index 1167a75734..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr-power7.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define WCSRCHR __wcsrchr_power7 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr-ppc32.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr-ppc32.c deleted file mode 100644 index 1c8e12eefb..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr-ppc32.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if IS_IN (libc) -# define WCSRCHR __wcsrchr_ppc -#endif - -extern __typeof (wcsrchr) __wcsrchr_ppc; - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr.c deleted file mode 100644 index 10820443b4..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcsrchr.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of wcsrchr - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# include -# include "init-arch.h" - -extern __typeof (wcsrchr) __wcsrchr_ppc attribute_hidden; -extern __typeof (wcsrchr) __wcsrchr_power6 attribute_hidden; -extern __typeof (wcsrchr) __wcsrchr_power7 attribute_hidden; - -libc_ifunc (wcsrchr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __wcsrchr_power7 : - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __wcsrchr_power6 - : __wcsrchr_ppc); -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wordcopy-power7.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wordcopy-power7.c deleted file mode 100644 index d2095d85ac..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wordcopy-power7.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define WORDCOPY_FWD_ALIGNED _wordcopy_fwd_aligned_power7 -#define WORDCOPY_FWD_DEST_ALIGNED _wordcopy_fwd_dest_aligned_power7 -#define WORDCOPY_BWD_ALIGNED _wordcopy_bwd_aligned_power7 -#define WORDCOPY_BWD_DEST_ALIGNED _wordcopy_bwd_dest_aligned_power7 - -#include diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wordcopy-ppc32.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wordcopy-ppc32.c deleted file mode 100644 index ecdc2fa73d..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wordcopy-ppc32.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define WORDCOPY_FWD_ALIGNED _wordcopy_fwd_aligned_ppc -# define WORDCOPY_FWD_DEST_ALIGNED _wordcopy_fwd_dest_aligned_ppc -# define WORDCOPY_BWD_ALIGNED _wordcopy_bwd_aligned_ppc -# define WORDCOPY_BWD_DEST_ALIGNED _wordcopy_bwd_dest_aligned_ppc - -# include -#else -# include -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/strncmp.S b/sysdeps/powerpc/powerpc32/power4/strncmp.S deleted file mode 100644 index 42a67e7e8a..0000000000 --- a/sysdeps/powerpc/powerpc32/power4/strncmp.S +++ /dev/null @@ -1,196 +0,0 @@ -/* Optimized strcmp implementation for PowerPC32. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* See strlen.s for comments on how the end-of-string testing works. */ - -/* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */ - -EALIGN (strncmp, 4, 0) - -#define rTMP2 r0 -#define rRTN r3 -#define rSTR1 r3 /* first string arg */ -#define rSTR2 r4 /* second string arg */ -#define rN r5 /* max string length */ -#define rWORD1 r6 /* current word in s1 */ -#define rWORD2 r7 /* current word in s2 */ -#define rWORD3 r10 -#define rWORD4 r11 -#define rFEFE r8 /* constant 0xfefefeff (-0x01010101) */ -#define r7F7F r9 /* constant 0x7f7f7f7f */ -#define rNEG r10 /* ~(word in s1 | 0x7f7f7f7f) */ -#define rBITDIF r11 /* bits that differ in s1 & s2 words */ -#define rTMP r12 - - dcbt 0,rSTR1 - or rTMP, rSTR2, rSTR1 - lis r7F7F, 0x7f7f - dcbt 0,rSTR2 - clrlwi. rTMP, rTMP, 30 - cmplwi cr1, rN, 0 - lis rFEFE, -0x101 - bne L(unaligned) -/* We are word aligned so set up for two loops. first a word - loop, then fall into the byte loop if any residual. */ - srwi. rTMP, rN, 2 - clrlwi rN, rN, 30 - addi rFEFE, rFEFE, -0x101 - addi r7F7F, r7F7F, 0x7f7f - cmplwi cr1, rN, 0 - beq L(unaligned) - - mtctr rTMP /* Power4 wants mtctr 1st in dispatch group. */ - lwz rWORD1, 0(rSTR1) - lwz rWORD2, 0(rSTR2) - b L(g1) - -L(g0): - lwzu rWORD1, 4(rSTR1) - bne- cr1, L(different) - lwzu rWORD2, 4(rSTR2) -L(g1): add rTMP, rFEFE, rWORD1 - nor rNEG, r7F7F, rWORD1 - bdz L(tail) - and. rTMP, rTMP, rNEG - cmpw cr1, rWORD1, rWORD2 - beq+ L(g0) - -/* OK. We've hit the end of the string. We need to be careful that - we don't compare two strings as different because of gunk beyond - the end of the strings... */ - -#ifdef __LITTLE_ENDIAN__ -L(endstring): - slwi rTMP, rTMP, 1 - addi rTMP2, rTMP, -1 - andc rTMP2, rTMP2, rTMP - and rWORD2, rWORD2, rTMP2 /* Mask off gunk. */ - and rWORD1, rWORD1, rTMP2 - rlwinm rTMP2, rWORD2, 8, 0xffffffff /* Byte reverse word. */ - rlwinm rTMP, rWORD1, 8, 0xffffffff - rldimi rTMP2, rWORD2, 24, 32 - rldimi rTMP, rWORD1, 24, 32 - rlwimi rTMP2, rWORD2, 24, 16, 23 - rlwimi rTMP, rWORD1, 24, 16, 23 - xor. rBITDIF, rTMP, rTMP2 - sub rRTN, rTMP, rTMP2 - bgelr+ - ori rRTN, rTMP2, 1 - blr - -L(different): - lwz rWORD1, -4(rSTR1) - rlwinm rTMP2, rWORD2, 8, 0xffffffff /* Byte reverse word. */ - rlwinm rTMP, rWORD1, 8, 0xffffffff - rldimi rTMP2, rWORD2, 24, 32 - rldimi rTMP, rWORD1, 24, 32 - rlwimi rTMP2, rWORD2, 24, 16, 23 - rlwimi rTMP, rWORD1, 24, 16, 23 - xor. rBITDIF, rTMP, rTMP2 - sub rRTN, rTMP, rTMP2 - bgelr+ - ori rRTN, rTMP2, 1 - blr - -#else -L(endstring): - and rTMP, r7F7F, rWORD1 - beq cr1, L(equal) - add rTMP, rTMP, r7F7F - xor. rBITDIF, rWORD1, rWORD2 - andc rNEG, rNEG, rTMP - blt- L(highbit) - cntlzw rBITDIF, rBITDIF - cntlzw rNEG, rNEG - addi rNEG, rNEG, 7 - cmpw cr1, rNEG, rBITDIF - sub rRTN, rWORD1, rWORD2 - bgelr+ cr1 -L(equal): - li rRTN, 0 - blr - -L(different): - lwz rWORD1, -4(rSTR1) - xor. rBITDIF, rWORD1, rWORD2 - sub rRTN, rWORD1, rWORD2 - bgelr+ -L(highbit): - ori rRTN, rWORD2, 1 - blr -#endif - -/* Oh well. In this case, we just do a byte-by-byte comparison. */ - .align 4 -L(tail): - and. rTMP, rTMP, rNEG - cmpw cr1, rWORD1, rWORD2 - bne- L(endstring) - addi rSTR1, rSTR1, 4 - bne- cr1, L(different) - addi rSTR2, rSTR2, 4 - cmplwi cr1, rN, 0 -L(unaligned): - mtctr rN /* Power4 wants mtctr 1st in dispatch group */ - ble cr1, L(ux) -L(uz): - lbz rWORD1, 0(rSTR1) - lbz rWORD2, 0(rSTR2) - .align 4 -L(u1): - cmpwi cr1, rWORD1, 0 - bdz L(u4) - cmpw rWORD1, rWORD2 - beq- cr1, L(u4) - bne- L(u4) - lbzu rWORD3, 1(rSTR1) - lbzu rWORD4, 1(rSTR2) - cmpwi cr1, rWORD3, 0 - bdz L(u3) - cmpw rWORD3, rWORD4 - beq- cr1, L(u3) - bne- L(u3) - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) - cmpwi cr1, rWORD1, 0 - bdz L(u4) - cmpw rWORD1, rWORD2 - beq- cr1, L(u4) - bne- L(u4) - lbzu rWORD3, 1(rSTR1) - lbzu rWORD4, 1(rSTR2) - cmpwi cr1, rWORD3, 0 - bdz L(u3) - cmpw rWORD3, rWORD4 - beq- cr1, L(u3) - bne- L(u3) - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) - b L(u1) - -L(u3): sub rRTN, rWORD3, rWORD4 - blr -L(u4): sub rRTN, rWORD1, rWORD2 - blr -L(ux): - li rRTN, 0 - blr -END (strncmp) -libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/powerpc/powerpc32/power5+/Implies b/sysdeps/powerpc/powerpc32/power5+/Implies deleted file mode 100644 index 02d222d22a..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/Implies +++ /dev/null @@ -1,4 +0,0 @@ -powerpc/power5+/fpu -powerpc/power5+ -powerpc/powerpc32/power5/fpu -powerpc/powerpc32/power5 diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc32/power5+/fpu/multiarch/Implies deleted file mode 100644 index 76a985188e..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power5/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceil.S b/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceil.S deleted file mode 100644 index efe7be8242..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceil.S +++ /dev/null @@ -1,36 +0,0 @@ -/* ceil function. PowerPC32/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .machine "power5" -EALIGN (__ceil, 4, 0) - frip fp1, fp1 - blr - END (__ceil) - -weak_alias (__ceil, ceil) - -#ifdef NO_LONG_DOUBLE -weak_alias (__ceil, ceill) -strong_alias (__ceil, __ceill) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __ceil, ceill, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceilf.S b/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceilf.S deleted file mode 100644 index cff058e7ef..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_ceilf.S +++ /dev/null @@ -1,29 +0,0 @@ -/* ceilf function. PowerPC32/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .machine "power5" -EALIGN (__ceilf, 4, 0) - frip fp1, fp1 /* The rounding instructions are double. */ - frsp fp1, fp1 /* But we need to set ooverflow for float. */ - blr - END (__ceilf) - -weak_alias (__ceilf, ceilf) - diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_floor.S b/sysdeps/powerpc/powerpc32/power5+/fpu/s_floor.S deleted file mode 100644 index 9f040d8457..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_floor.S +++ /dev/null @@ -1,36 +0,0 @@ -/* floor function. PowerPC32/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .machine "power5" -EALIGN (__floor, 4, 0) - frim fp1, fp1 - blr - END (__floor) - -weak_alias (__floor, floor) - -#ifdef NO_LONG_DOUBLE -weak_alias (__floor, floorl) -strong_alias (__floor, __floorl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __floor, floorl, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_floorf.S b/sysdeps/powerpc/powerpc32/power5+/fpu/s_floorf.S deleted file mode 100644 index b84e4c64fb..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_floorf.S +++ /dev/null @@ -1,29 +0,0 @@ -/* floorf function. PowerPC32/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .machine "power5" -EALIGN (__floorf, 4, 0) - frim fp1, fp1 /* The rounding instructions are double. */ - frsp fp1, fp1 /* But we need to set ooverflow for float. */ - blr - END (__floorf) - -weak_alias (__floorf, floorf) - diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_llround.S b/sysdeps/powerpc/powerpc32/power5+/fpu/s_llround.S deleted file mode 100644 index adbc7ebe18..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_llround.S +++ /dev/null @@ -1,59 +0,0 @@ -/* lround function. POWER5+, PowerPC32 version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* long [r3] llround (float x [fp1]) - IEEE 1003.1 lround function. IEEE specifies "round to the nearest - integer value, rounding halfway cases away from zero, regardless of - the current rounding mode." However PowerPC Architecture defines - "round to Nearest" as "Choose the best approximation. In case of a - tie, choose the one that is even (least significant bit o).". - So we pre-round using the V2.02 Floating Round to Integer Nearest - instruction before we use the Floating Convert to Integer Word with - round to zero instruction. */ - - .machine "power5" -ENTRY (__llround) - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - frin fp2,fp1 - fctidz fp3,fp2 /* Convert To Integer Word lround toward 0. */ - stfd fp3,8(r1) - nop /* Ensure the following load is in a different dispatch */ - nop /* group to avoid pipe stall on POWER4&5. */ - nop - lwz r3,8+HIWORD(r1) - lwz r4,8+LOWORD(r1) - addi r1,r1,16 - blr - END (__llround) - -weak_alias (__llround, llround) - -strong_alias (__llround, __llroundf) -weak_alias (__llround, llroundf) - -#ifdef NO_LONG_DOUBLE -weak_alias (__llround, llroundl) -strong_alias (__llround, __llroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llround, llroundl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_llroundf.S b/sysdeps/powerpc/powerpc32/power5+/fpu/s_llroundf.S deleted file mode 100644 index 030d2fdff8..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_llroundf.S +++ /dev/null @@ -1 +0,0 @@ -/* __llroundf is in s_llround.S */ diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_lround.S b/sysdeps/powerpc/powerpc32/power5+/fpu/s_lround.S deleted file mode 100644 index f61846331d..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_lround.S +++ /dev/null @@ -1,57 +0,0 @@ -/* lround function. POWER5+, PowerPC32 version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ -#include -#include - -/* long [r3] lround (float x [fp1]) - IEEE 1003.1 lround function. IEEE specifies "round to the nearest - integer value, rounding halfway cases away from zero, regardless of - the current rounding mode." However PowerPC Architecture defines - "round to Nearest" as "Choose the best approximation. In case of a - tie, choose the one that is even (least significant bit o).". - So we pre-round using the V2.02 Floating Round to Integer Nearest - instruction before we use the Floating Convert to Integer Word with - round to zero instruction. */ - - .machine "power5" -ENTRY (__lround) - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - frin fp2,fp1 - fctiwz fp3,fp2 /* Convert To Integer Word lround toward 0. */ - stfd fp3,8(r1) - nop /* Ensure the following load is in a different dispatch */ - nop /* group to avoid pipe stall on POWER4&5. */ - nop - lwz r3,8+LOWORD(r1) - addi r1,r1,16 - blr - END (__lround) - -weak_alias (__lround, lround) - -strong_alias (__lround, __lroundf) -weak_alias (__lround, lroundf) - -#ifdef NO_LONG_DOUBLE -weak_alias (__lround, lroundl) -strong_alias (__lround, __lroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lround, lroundl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_round.S b/sysdeps/powerpc/powerpc32/power5+/fpu/s_round.S deleted file mode 100644 index 91b42352f3..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_round.S +++ /dev/null @@ -1,36 +0,0 @@ -/* round function. PowerPC32/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .machine "power5" -EALIGN (__round, 4, 0) - frin fp1, fp1 - blr - END (__round) - -weak_alias (__round, round) - -#ifdef NO_LONG_DOUBLE -weak_alias (__round, roundl) -strong_alias (__round, __roundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __round, roundl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_roundf.S b/sysdeps/powerpc/powerpc32/power5+/fpu/s_roundf.S deleted file mode 100644 index 4e0c7e5cec..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_roundf.S +++ /dev/null @@ -1,29 +0,0 @@ -/* roundf function. PowerPC32/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .machine "power5" -EALIGN (__roundf, 4, 0) - frin fp1, fp1 /* The rounding instructions are double. */ - frsp fp1, fp1 /* But we need to set ooverflow for float. */ - blr - END (__roundf) - -weak_alias (__roundf, roundf) - diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_trunc.S b/sysdeps/powerpc/powerpc32/power5+/fpu/s_trunc.S deleted file mode 100644 index ceca529826..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_trunc.S +++ /dev/null @@ -1,36 +0,0 @@ -/* trunc function. PowerPC32/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .machine "power5" -EALIGN (__trunc, 4, 0) - friz fp1, fp1 - blr - END (__trunc) - -weak_alias (__trunc, trunc) - -#ifdef NO_LONG_DOUBLE -weak_alias (__trunc, truncl) -strong_alias (__trunc, __truncl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __trunc, truncl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/power5+/fpu/s_truncf.S b/sysdeps/powerpc/powerpc32/power5+/fpu/s_truncf.S deleted file mode 100644 index 60be314c28..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/fpu/s_truncf.S +++ /dev/null @@ -1,29 +0,0 @@ -/* truncf function. PowerPC32/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .machine "power5" -EALIGN (__truncf, 4, 0) - friz fp1, fp1 /* The rounding instructions are double. */ - frsp fp1, fp1 /* But we need to set ooverflow for float. */ - blr - END (__truncf) - -weak_alias (__truncf, truncf) - diff --git a/sysdeps/powerpc/powerpc32/power5+/multiarch/Implies b/sysdeps/powerpc/powerpc32/power5+/multiarch/Implies deleted file mode 100644 index 54b3931625..0000000000 --- a/sysdeps/powerpc/powerpc32/power5+/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power5/multiarch diff --git a/sysdeps/powerpc/powerpc32/power5/Implies b/sysdeps/powerpc/powerpc32/power5/Implies deleted file mode 100644 index 17139bf21c..0000000000 --- a/sysdeps/powerpc/powerpc32/power5/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/power4/fpu -powerpc/powerpc32/power4 diff --git a/sysdeps/powerpc/powerpc32/power5/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc32/power5/fpu/multiarch/Implies deleted file mode 100644 index c6c090a60e..0000000000 --- a/sysdeps/powerpc/powerpc32/power5/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power4/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc32/power5/fpu/s_isnan.S b/sysdeps/powerpc/powerpc32/power5/fpu/s_isnan.S deleted file mode 100644 index 09a2fe3865..0000000000 --- a/sysdeps/powerpc/powerpc32/power5/fpu/s_isnan.S +++ /dev/null @@ -1,61 +0,0 @@ -/* isnan(). PowerPC32 version. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __isnan(x) */ - .machine power5 -EALIGN (__isnan, 4, 0) - stwu r1,-32(r1) - cfi_adjust_cfa_offset (32) - ori r1,r1,0 - stfd fp1,24(r1) /* copy FPR to GPR */ - ori r1,r1,0 - lwz r4,24+HIWORD(r1) - lwz r5,24+LOWORD(r1) - lis r0,0x7ff0 /* const long r0 0x7ff00000 00000000 */ - clrlwi r4,r4,1 /* x = fabs(x) */ - cmpw cr7,r4,r0 /* if (fabs(x) =< inf) */ - cmpwi cr6,r5,0 - li r3,0 /* then return 0 */ - addi r1,r1,32 - cfi_adjust_cfa_offset (-32) - bltlr+ cr7 - bgt- cr7,L(NaN) - beqlr+ cr6 -L(NaN): - li r3,1 /* else return 1 */ - blr - END (__isnan) - -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -# endif -#endif - diff --git a/sysdeps/powerpc/powerpc32/power5/fpu/s_isnanf.S b/sysdeps/powerpc/powerpc32/power5/fpu/s_isnanf.S deleted file mode 100644 index 7948f52e84..0000000000 --- a/sysdeps/powerpc/powerpc32/power5/fpu/s_isnanf.S +++ /dev/null @@ -1,45 +0,0 @@ -/* isnan(). PowerPC32 version. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __isnanf(x) */ - .machine power5 -EALIGN (__isnanf, 4, 0) - stwu r1,-32(r1) - cfi_adjust_cfa_offset (32) - stfs fp1,28(r1) /* copy FPR to GPR */ - nop - nop - lwz r4,28(r1) - lis r0,0x7f80 /* const long r0 0x7f800000 */ - clrlwi r4,r4,1 /* x = fabs(x) */ - cmpw cr7,r4,r0 /* if (fabs(x) =< inf) */ - li r3,0 /* then return 0 */ - addi r1,r1,32 - cfi_adjust_cfa_offset (-32) - blelr+ cr7 -L(NaN): - li r3,1 /* else return 1 */ - blr - END (__isnanf) - -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) - diff --git a/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrt_compat.S b/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrt_compat.S deleted file mode 100644 index 93625c5aa9..0000000000 --- a/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrt_compat.S +++ /dev/null @@ -1,106 +0,0 @@ -/* sqrt function. PowerPC32 version. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* double [fp1] sqrt (double x [fp1]) - Power4 (ISA V2.0) and above implement sqrt in hardware (not optional). - The fsqrt instruction generates the correct value for all inputs and - sets the appropriate floating point exceptions. Extended checking is - only needed to set errno (via __kernel_standard) if the input value - is negative. - - So compare the input value against the absolute value of itself. - This will compare equal unless the value is negative (EDOM) or a NAN, - in which case we branch to the extend wrapper. If equal we can return - the result directly. - - This part of the function looks like a leaf routine, so no need to - stack a frame or execute prologue/epilogue code. It is safe to - branch directly to w_sqrt as long as the input value (f1) is - preserved. Putting the sqrt result into f2 (float parameter 2) - allows passing both the input value and sqrt result into the extended - wrapper so there is no need to recompute. - - This tactic avoids the overhead of stacking a frame for the normal - (non-error) case. Until gcc supports prologue shrink-wrapping - this is the best we can do. */ - - .section ".text" - .machine power4 -EALIGN (__sqrt, 5, 0) - fabs fp0,fp1 - fsqrt fp2,fp1 - fcmpu cr1,fp0,fp1 - bne- cr1,.Lw_sqrt - fmr fp1,fp2 - blr - .align 4 -.Lw_sqrt: - mflr r0 - stwu r1,-16(r1) - cfi_adjust_cfa_offset(16) - fmr fp12,fp2 - stw r0,20(r1) - stw r30,8(r1) - cfi_offset(lr,20-16) - cfi_offset(r30,8-16) -#ifdef SHARED - SETUP_GOT_ACCESS(r30,got_label) - addis r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@ha - addi r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@l - lwz r9,_LIB_VERSION@got(30) - lwz r0,0(r9) -#else - lis r9,_LIB_VERSION@ha - lwz r0,_LIB_VERSION@l(r9) -#endif -/* if (_LIB_VERSION == _IEEE_) return z; */ - cmpwi cr7,r0,-1 - beq- cr7,.L4 -/* if (x != x) return z; !isnan*/ - fcmpu cr7,fp1,fp1 - bne- cr7,.L4 -/* if (x < 0.0) - return __kernel_standard (x, x, 26) */ - fmr fp2,fp1 - li r3,26 - bne- cr1,.L11 -.L4: - lwz r0,20(r1) - fmr fp1,fp12 - lwz r30,8(r1) - addi r1,r1,16 - mtlr r0 - blr -.L11: - bl __kernel_standard@plt - fmr fp12,fp1 - b .L4 - END (__sqrt) - -weak_alias (__sqrt, sqrt) - -#ifdef NO_LONG_DOUBLE -weak_alias (__sqrt, sqrtl) -strong_alias (__sqrt, __sqrtl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __sqrt, sqrtl, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrtf_compat.S b/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrtf_compat.S deleted file mode 100644 index 2ca86b6155..0000000000 --- a/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrtf_compat.S +++ /dev/null @@ -1,98 +0,0 @@ -/* sqrtf function. PowerPC32 version. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* float [fp1] sqrts (float x [fp1]) - Power4 (ISA V2.0) and above implement sqrt in hardware (not optional). - The fsqrts instruction generates the correct value for all inputs and - sets the appropriate floating point exceptions. Extended checking is - only needed to set errno (via __kernel_standard) if the input value - is negative. - - So compare the input value against the absolute value of itself. - This will compare equal unless the value is negative (EDOM) or a NAN, - in which case we branch to the extend wrapper. If equal we can return - the result directly. - - This part of the function looks like a leaf routine, so no need to - stack a frame or execute prologue/epilogue code. It is safe to - branch directly to w_sqrt as long as the input value (f1) is - preserved. Putting the sqrt result into f2 (float parameter 2) - allows passing both the input value and sqrt result into the extended - wrapper so there is no need to recompute. - - This tactic avoids the overhead of stacking a frame for the normal - (non-error) case. Until gcc supports prologue shrink-wrapping - this is the best we can do. */ - - .section ".text" - .machine power4 -EALIGN (__sqrtf, 5, 0) - fabs fp0,fp1 - fsqrts fp2,fp1 - fcmpu cr1,fp0,fp1 - bne- cr1,.Lw_sqrtf - fmr fp1,fp2 - blr - .align 4 -.Lw_sqrtf: - mflr r0 - stwu r1,-16(r1) - cfi_adjust_cfa_offset(16) - fmr fp12,fp2 - stw r0,20(r1) - stw r30,8(r1) - cfi_offset(lr,20-16) - cfi_offset(r30,8-16) -#ifdef SHARED - SETUP_GOT_ACCESS(r30,got_label) - addis r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@ha - addi r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@l - lwz r9,_LIB_VERSION@got(30) - lwz r0,0(r9) -#else - lis r9,_LIB_VERSION@ha - lwz r0,_LIB_VERSION@l(r9) -#endif -/* if (_LIB_VERSION == _IEEE_) return z; */ - cmpwi cr7,r0,-1 - beq- cr7,.L4 -/* if (x != x, 0) return z; !isnan */ - fcmpu cr7,fp1,fp1 - bne- cr7,.L4 -/* if (x < 0.0) - return __kernel_standard (x, x, 126) */ - fmr fp2,fp1 - li r3,126 - bne- cr1,.L11 -.L4: - lwz r0,20(r1) - fmr fp1,fp12 - lwz r30,8(r1) - addi r1,r1,16 - mtlr r0 - blr -.L11: - bl __kernel_standard@plt - fmr fp12,fp1 - b .L4 - END (__sqrtf) - -weak_alias (__sqrtf, sqrtf) diff --git a/sysdeps/powerpc/powerpc32/power5/multiarch/Implies b/sysdeps/powerpc/powerpc32/power5/multiarch/Implies deleted file mode 100644 index d29e3853ab..0000000000 --- a/sysdeps/powerpc/powerpc32/power5/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power4/multiarch diff --git a/sysdeps/powerpc/powerpc32/power6/Implies b/sysdeps/powerpc/powerpc32/power6/Implies deleted file mode 100644 index 8e5b58a57a..0000000000 --- a/sysdeps/powerpc/powerpc32/power6/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/power5+/fpu -powerpc/powerpc32/power5+ diff --git a/sysdeps/powerpc/powerpc32/power6/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc32/power6/fpu/multiarch/Implies deleted file mode 100644 index c66805ee63..0000000000 --- a/sysdeps/powerpc/powerpc32/power6/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power5+/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc32/power6/fpu/s_copysign.S b/sysdeps/powerpc/powerpc32/power6/fpu/s_copysign.S deleted file mode 100644 index d6cc8011ae..0000000000 --- a/sysdeps/powerpc/powerpc32/power6/fpu/s_copysign.S +++ /dev/null @@ -1,58 +0,0 @@ -/* copysign(). PowerPC32/POWER6 version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* double [f1] copysign (double [f1] x, double [f2] y); - copysign(x,y) returns a value with the magnitude of x and - with the sign bit of y. */ - - .section ".text" - .type __copysign, @function - .machine power6 -EALIGN (__copysign, 4, 0) - CALL_MCOUNT - fcpsgn fp1,fp2,fp1 - blr -END (__copysign) - -hidden_def (__copysign) -weak_alias (__copysign, copysign) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__copysign, __copysignf) -hidden_def (__copysignf) -weak_alias (__copysignf, copysignf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__copysign, __copysignl) -weak_alias (__copysign, copysignl) -#endif - -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT (libm, GLIBC_2_0) -compat_symbol (libm, copysign, copysignl, GLIBC_2_0) -# endif -#else -# if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) -compat_symbol (libc, copysign, copysignl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc32/power6/fpu/s_copysignf.S b/sysdeps/powerpc/powerpc32/power6/fpu/s_copysignf.S deleted file mode 100644 index d4aa702d07..0000000000 --- a/sysdeps/powerpc/powerpc32/power6/fpu/s_copysignf.S +++ /dev/null @@ -1 +0,0 @@ -/* This function uses the same code as s_copysign.S. */ diff --git a/sysdeps/powerpc/powerpc32/power6/fpu/s_isnan.S b/sysdeps/powerpc/powerpc32/power6/fpu/s_isnan.S deleted file mode 100644 index 5b19433cbf..0000000000 --- a/sysdeps/powerpc/powerpc32/power6/fpu/s_isnan.S +++ /dev/null @@ -1,61 +0,0 @@ -/* isnan(). PowerPC32 version. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __isnan(x) */ - .machine power6 -EALIGN (__isnan, 4, 0) - stwu r1,-32(r1) - cfi_adjust_cfa_offset (32) - ori r1,r1,0 - stfd fp1,24(r1) /* copy FPR to GPR */ - ori r1,r1,0 - lwz r4,24+HIWORD(r1) - lwz r5,24+LOWORD(r1) - lis r0,0x7ff0 /* const long r0 0x7ff00000 00000000 */ - clrlwi r4,r4,1 /* x = fabs(x) */ - cmpw cr7,r4,r0 /* if (fabs(x) =< inf) */ - cmpwi cr6,r5,0 - li r3,0 /* then return 0 */ - addi r1,r1,32 - cfi_adjust_cfa_offset (-32) - bltlr+ cr7 - bgt- cr7,L(NaN) - beqlr+ cr6 -L(NaN): - li r3,1 /* else return 1 */ - blr - END (__isnan) - -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -# endif -#endif - diff --git a/sysdeps/powerpc/powerpc32/power6/fpu/s_isnanf.S b/sysdeps/powerpc/powerpc32/power6/fpu/s_isnanf.S deleted file mode 100644 index 7a19ed86d2..0000000000 --- a/sysdeps/powerpc/powerpc32/power6/fpu/s_isnanf.S +++ /dev/null @@ -1,44 +0,0 @@ -/* isnanf(). PowerPC32 version. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __isnanf(x) */ - .machine power6 -EALIGN (__isnanf, 4, 0) - stwu r1,-32(r1) - cfi_adjust_cfa_offset (32) - ori r1,r1,0 - stfs fp1,24(r1) /* copy FPR to GPR */ - ori r1,r1,0 - lwz r4,24(r1) - lis r0,0x7f80 /* const long r0 0x7f800000 */ - clrlwi r4,r4,1 /* x = fabs(x) */ - cmpw cr7,r4,r0 /* if (fabs(x) =< inf) */ - li r3,0 /* then return 0 */ - addi r1,r1,32 - cfi_adjust_cfa_offset (-32) - blelr+ cr7 -L(NaN): - li r3,1 /* else return 1 */ - blr - END (__isnanf) - -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) diff --git a/sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S b/sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S deleted file mode 100644 index 326e77361b..0000000000 --- a/sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S +++ /dev/null @@ -1,46 +0,0 @@ -/* Round double to long int. PowerPC32 on PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* long long int[r3, r4] __llrint (double x[fp1]) */ -ENTRY (__llrint) - CALL_MCOUNT - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - fctid fp13,fp1 - stfd fp13,8(r1) -/* Insure the following load is in a different dispatch group by - inserting "group ending nop". */ - ori r1,r1,0 - lwz r3,8+HIWORD(r1) - lwz r4,8+LOWORD(r1) - addi r1,r1,16 - blr - END (__llrint) - -weak_alias (__llrint, llrint) - -#ifdef NO_LONG_DOUBLE -strong_alias (__llrint, __llrintl) -weak_alias (__llrint, llrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llrint, llrintl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/power6/fpu/s_llrintf.S b/sysdeps/powerpc/powerpc32/power6/fpu/s_llrintf.S deleted file mode 100644 index 0950e7e7c7..0000000000 --- a/sysdeps/powerpc/powerpc32/power6/fpu/s_llrintf.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Round float to long int. PowerPC32 on PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* long long int[r3, r4] __llrintf (float x[fp1]) */ -ENTRY (__llrintf) - CALL_MCOUNT - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - fctid fp13,fp1 - stfd fp13,8(r1) -/* Insure the following load is in a different dispatch group by - inserting "group ending nop". */ - ori r1,r1,0 - lwz r3,8+HIWORD(r1) - lwz r4,8+LOWORD(r1) - addi r1,r1,16 - blr - END (__llrintf) - -weak_alias (__llrintf, llrintf) - diff --git a/sysdeps/powerpc/powerpc32/power6/fpu/s_llround.S b/sysdeps/powerpc/powerpc32/power6/fpu/s_llround.S deleted file mode 100644 index 83ba999a39..0000000000 --- a/sysdeps/powerpc/powerpc32/power6/fpu/s_llround.S +++ /dev/null @@ -1,59 +0,0 @@ -/* lround function. POWER5+, PowerPC32 version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* long [r3] llround (float x [fp1]) - IEEE 1003.1 lround function. IEEE specifies "round to the nearest - integer value, rounding halfway cases away from zero, regardless of - the current rounding mode." However PowerPC Architecture defines - "round to Nearest" as "Choose the best approximation. In case of a - tie, choose the one that is even (least significant bit o).". - So we pre-round using the V2.02 Floating Round to Integer Nearest - instruction before we use the Floating Convert to Integer Word with - round to zero instruction. */ - - .machine "power5" -ENTRY (__llround) - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - frin fp2,fp1 - fctidz fp3,fp2 /* Convert To Integer Word lround toward 0. */ - stfd fp3,8(r1) -/* Insure the following load is in a different dispatch group by - inserting "group ending nop". */ - ori r1,r1,0 - lwz r3,8+HIWORD(r1) - lwz r4,8+LOWORD(r1) - addi r1,r1,16 - blr - END (__llround) - -weak_alias (__llround, llround) - -strong_alias (__llround, __llroundf) -weak_alias (__llround, llroundf) - -#ifdef NO_LONG_DOUBLE -weak_alias (__llround, llroundl) -strong_alias (__llround, __llroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llround, llroundl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/power6/fpu/s_llroundf.S b/sysdeps/powerpc/powerpc32/power6/fpu/s_llroundf.S deleted file mode 100644 index 030d2fdff8..0000000000 --- a/sysdeps/powerpc/powerpc32/power6/fpu/s_llroundf.S +++ /dev/null @@ -1 +0,0 @@ -/* __llroundf is in s_llround.S */ diff --git a/sysdeps/powerpc/powerpc32/power6/memcpy.S b/sysdeps/powerpc/powerpc32/power6/memcpy.S deleted file mode 100644 index 81b62cba21..0000000000 --- a/sysdeps/powerpc/powerpc32/power6/memcpy.S +++ /dev/null @@ -1,907 +0,0 @@ -/* Optimized memcpy implementation for PowerPC32 on POWER6. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); - Returns 'dst'. - - Memcpy handles short copies (< 32-bytes) using a binary move blocks - (no loops) of lwz/stw. The tail (remaining 1-3) bytes is handled - with the appropriate combination of byte and halfword load/stores. - There is minimal effort to optimize the alignment of short moves. - - Longer moves (>= 32-bytes) justify the effort to get at least the - destination word (4-byte) aligned. Further optimization is - possible when both source and destination are word aligned. - Each case has an optimized unrolled loop. */ - - .machine power6 -EALIGN (memcpy, 5, 0) - CALL_MCOUNT - - stwu 1,-32(1) - cfi_adjust_cfa_offset(32) - cmplwi cr1,5,31 /* check for short move. */ - neg 0,3 - cmplwi cr1,5,31 - clrlwi 10,4,30 /* check alignment of src. */ - andi. 11,3,3 /* check alignment of dst. */ - clrlwi 0,0,30 /* Number of bytes until the 1st word of dst. */ - ble- cr1,L(word_unaligned_short) /* If move < 32 bytes. */ - cmplw cr6,10,11 - stw 31,24(1) - stw 30,20(1) - cfi_offset(31,(24-32)) - cfi_offset(30,(20-32)) - mr 30,3 - beq .L0 - mtcrf 0x01,0 - subf 31,0,5 /* Length after alignment. */ - add 12,4,0 /* Compute src addr after alignment. */ - /* Move 0-3 bytes as needed to get the destination word aligned. */ -1: bf 31,2f - lbz 6,0(4) - bf 30,3f - lhz 7,1(4) - stb 6,0(3) - sth 7,1(3) - addi 3,3,3 - b 0f -3: - stb 6,0(3) - addi 3,3,1 - b 0f -2: bf 30,0f - lhz 6,0(4) - sth 6,0(3) - addi 3,3,2 -0: - clrlwi 10,12,30 /* check alignment of src again. */ - srwi 9,31,2 /* Number of full words remaining. */ - bne- cr6,L(wdu) /* If source is not word aligned. .L6 */ - clrlwi 11,31,30 /* calculate the number of tail bytes */ - b L(word_aligned) - /* Copy words from source to destination, assuming the destination is - aligned on a word boundary. - - At this point we know there are at least 29 bytes left (32-3) to copy. - The next step is to determine if the source is also word aligned. - If not branch to the unaligned move code at .L6. which uses - a load, shift, store strategy. - - Otherwise source and destination are word aligned, and we can use - the optimized word copy loop. */ - .align 4 -.L0: - mr 31,5 - mr 12,4 - bne- cr6,L(wdu) /* If source is not word aligned. .L6 */ - srwi 9,5,2 /* Number of full words remaining. */ - clrlwi 11,5,30 /* calculate the number of tail bytes */ - - /* Move words where destination and source are word aligned. - Use an unrolled loop to copy 4 words (16-bytes) per iteration. - If the copy is not an exact multiple of 16 bytes, 1-3 - words are copied as needed to set up the main loop. After - the main loop exits there may be a tail of 1-3 bytes. These bytes are - copied a halfword/byte at a time as needed to preserve alignment. */ -L(word_aligned): - mtcrf 0x01,9 - srwi 8,31,4 /* calculate the 16 byte loop count */ - cmplwi cr1,9,4 - cmplwi cr6,11,0 - mr 11,12 - - bf 30,1f - lwz 6,0(12) - lwz 7,4(12) - addi 11,12,8 - mtctr 8 - stw 6,0(3) - stw 7,4(3) - addi 10,3,8 - bf 31,4f - lwz 0,8(12) - stw 0,8(3) - blt cr1,3f - addi 11,12,12 - addi 10,3,12 - b 4f - .align 4 -1: - mr 10,3 - mtctr 8 - bf 31,4f - lwz 6,0(12) - addi 11,12,4 - stw 6,0(3) - addi 10,3,4 - - .align 4 -4: - lwz 6,0(11) - lwz 7,4(11) - lwz 8,8(11) - lwz 0,12(11) - stw 6,0(10) - stw 7,4(10) - stw 8,8(10) - stw 0,12(10) - addi 11,11,16 - addi 10,10,16 - bdnz 4b -3: - clrrwi 0,31,2 - mtcrf 0x01,31 - beq cr6,0f -.L9: - add 3,3,0 - add 12,12,0 - -/* At this point we have a tail of 0-3 bytes and we know that the - destination is word aligned. */ -2: bf 30,1f - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -1: bf 31,0f - lbz 6,0(12) - stb 6,0(3) -0: - /* Return original dst pointer. */ - mr 3,30 - lwz 30,20(1) - lwz 31,24(1) - addi 1,1,32 - blr - -/* Copy up to 31 bytes. This divided into two cases 0-8 bytes and 9-31 - bytes. Each case is handled without loops, using binary (1,2,4,8) - tests. - - In the short (0-8 byte) case no attempt is made to force alignment - of either source or destination. The hardware will handle the - unaligned load/stores with small delays for crossing 32- 128-byte, - and 4096-byte boundaries. Since these short moves are unlikely to be - unaligned or cross these boundaries, the overhead to force - alignment is not justified. - - The longer (9-31 byte) move is more likely to cross 32- or 128-byte - boundaries. Since only loads are sensitive to the 32-/128-byte - boundaries it is more important to align the source then the - destination. If the source is not already word aligned, we first - move 1-3 bytes as needed. Since we are only word aligned we don't - use double word load/stores to insure that all loads are aligned. - While the destination and stores may still be unaligned, this - is only an issue for page (4096 byte boundary) crossing, which - should be rare for these short moves. The hardware handles this - case automatically with a small (~20 cycle) delay. */ - .align 4 - - cfi_same_value (31) - cfi_same_value (30) -L(word_unaligned_short): - mtcrf 0x01,5 - cmplwi cr6,5,8 - neg 8,4 - clrrwi 9,4,2 - andi. 0,8,3 - beq cr6,L(wus_8) /* Handle moves of 8 bytes. */ -/* At least 9 bytes left. Get the source word aligned. */ - cmplwi cr1,5,16 - mr 12,4 - ble cr6,L(wus_4) /* Handle moves of 0-8 bytes. */ - mr 11,3 - mr 10,5 - cmplwi cr6,0,2 - beq L(wus_tail) /* If the source is already word aligned skip this. */ -/* Copy 1-3 bytes to get source address word aligned. */ - lwz 6,0(9) - subf 10,0,5 - add 12,4,0 - blt cr6,5f - srwi 7,6,16 - bgt cr6,3f -#ifdef __LITTLE_ENDIAN__ - sth 7,0(3) -#else - sth 6,0(3) -#endif - b 7f - .align 4 -3: -#ifdef __LITTLE_ENDIAN__ - rotlwi 6,6,24 - stb 6,0(3) - sth 7,1(3) -#else - stb 7,0(3) - sth 6,1(3) -#endif - b 7f - .align 4 -5: -#ifdef __LITTLE_ENDIAN__ - rotlwi 6,6,8 -#endif - stb 6,0(3) -7: - cmplwi cr1,10,16 - add 11,3,0 - mtcrf 0x01,10 - .align 4 -L(wus_tail): -/* At least 6 bytes left and the source is word aligned. This allows - some speculative loads up front. */ -/* We need to special case the fall-through because the biggest delays - are due to address computation not being ready in time for the - AGEN. */ - lwz 6,0(12) - lwz 7,4(12) - blt cr1,L(wus_tail8) - cmplwi cr0,10,24 -L(wus_tail16): /* Move 16 bytes. */ - stw 6,0(11) - stw 7,4(11) - lwz 6,8(12) - lwz 7,12(12) - stw 6,8(11) - stw 7,12(11) -/* Move 8 bytes more. */ - bf 28,L(wus_tail16p8) - cmplwi cr1,10,28 - lwz 6,16(12) - lwz 7,20(12) - stw 6,16(11) - stw 7,20(11) -/* Move 4 bytes more. */ - bf 29,L(wus_tail16p4) - lwz 6,24(12) - stw 6,24(11) - addi 12,12,28 - addi 11,11,28 - bgt cr1,L(wus_tail2) - /* exactly 28 bytes. Return original dst pointer and exit. */ - addi 1,1,32 - blr - .align 4 -L(wus_tail16p8): /* less than 8 bytes left. */ - beq cr1,L(wus_tailX) /* exactly 16 bytes, early exit. */ - cmplwi cr1,10,20 - bf 29,L(wus_tail16p2) -/* Move 4 bytes more. */ - lwz 6,16(12) - stw 6,16(11) - addi 12,12,20 - addi 11,11,20 - bgt cr1,L(wus_tail2) - /* exactly 20 bytes. Return original dst pointer and exit. */ - addi 1,1,32 - blr - .align 4 -L(wus_tail16p4): /* less than 4 bytes left. */ - addi 12,12,24 - addi 11,11,24 - bgt cr0,L(wus_tail2) - /* exactly 24 bytes. Return original dst pointer and exit. */ - addi 1,1,32 - blr - .align 4 -L(wus_tail16p2): /* 16 bytes moved, less than 4 bytes left. */ - addi 12,12,16 - addi 11,11,16 - b L(wus_tail2) - - .align 4 -L(wus_tail8): /* Move 8 bytes. */ -/* r6, r7 already loaded speculatively. */ - cmplwi cr1,10,8 - cmplwi cr0,10,12 - bf 28,L(wus_tail4) - stw 6,0(11) - stw 7,4(11) -/* Move 4 bytes more. */ - bf 29,L(wus_tail8p4) - lwz 6,8(12) - stw 6,8(11) - addi 12,12,12 - addi 11,11,12 - bgt cr0,L(wus_tail2) - /* exactly 12 bytes. Return original dst pointer and exit. */ - addi 1,1,32 - blr - .align 4 -L(wus_tail8p4): /* less than 4 bytes left. */ - addi 12,12,8 - addi 11,11,8 - bgt cr1,L(wus_tail2) - /* exactly 8 bytes. Return original dst pointer and exit. */ - addi 1,1,32 - blr - - .align 4 -L(wus_tail4): /* Move 4 bytes. */ -/* r6 already loaded speculatively. If we are here we know there is - more than 4 bytes left. So there is no need to test. */ - addi 12,12,4 - stw 6,0(11) - addi 11,11,4 -L(wus_tail2): /* Move 2-3 bytes. */ - bf 30,L(wus_tail1) - lhz 6,0(12) - sth 6,0(11) - bf 31,L(wus_tailX) - lbz 7,2(12) - stb 7,2(11) - addi 1,1,32 - blr -L(wus_tail1): /* Move 1 byte. */ - bf 31,L(wus_tailX) - lbz 6,0(12) - stb 6,0(11) -L(wus_tailX): - /* Return original dst pointer. */ - addi 1,1,32 - blr - -/* Special case to copy 0-8 bytes. */ - .align 4 -L(wus_8): - lwz 6,0(4) - lwz 7,4(4) - stw 6,0(3) - stw 7,4(3) - /* Return original dst pointer. */ - addi 1,1,32 - blr - .align 4 -L(wus_4): - bf 29,L(wus_2) - lwz 6,0(4) - stw 6,0(3) - bf 30,L(wus_5) - lhz 7,4(4) - sth 7,4(3) - bf 31,L(wus_0) - lbz 8,6(4) - stb 8,6(3) - addi 1,1,32 - blr - .align 4 -L(wus_5): - bf 31,L(wus_0) - lbz 6,4(4) - stb 6,4(3) - /* Return original dst pointer. */ - addi 1,1,32 - blr - .align 4 -L(wus_2): /* Move 2-3 bytes. */ - bf 30,L(wus_1) - lhz 6,0(4) - sth 6,0(3) - bf 31,L(wus_0) - lbz 7,2(4) - stb 7,2(3) - addi 1,1,32 - blr - .align 4 -L(wus_1): /* Move 1 byte. */ - bf 31,L(wus_0) - lbz 6,0(4) - stb 6,0(3) - .align 3 -L(wus_0): - /* Return original dst pointer. */ - addi 1,1,32 - blr - - .align 4 - cfi_offset(31,(24-32)) - cfi_offset(30,(20-32)) -L(wdu): - - /* Copy words where the destination is aligned but the source is - not. For power4, power5 and power6 machines there is penalty for - unaligned loads (src) that cross 32-byte, cacheline, or page - boundaries. So we want to use simple (unaligned) loads where - possible but avoid them where we know the load would span a 32-byte - boundary. - - At this point we know we have at least 29 (32-3) bytes to copy - the src is unaligned. and we may cross at least one 32-byte - boundary. Also we have the following register values: - r3 == adjusted dst, word aligned - r4 == unadjusted src - r5 == unadjusted len - r9 == adjusted Word length - r10 == src alignment (1-3) - r12 == adjusted src, not aligned - r31 == adjusted len - - First we need to copy word up to but not crossing the next 32-byte - boundary. Then perform aligned loads just before and just after - the boundary and use shifts and or to generate the next aligned - word for dst. If more than 32 bytes remain we copy (unaligned src) - the next 7 words and repeat the loop until less than 32-bytes - remain. - - Then if more than 4 bytes remain we again use aligned loads, - shifts and or to generate the next dst word. We then process the - remaining words using unaligned loads as needed. Finally we check - if there are more than 0 bytes (1-3) bytes remaining and use - halfword and or byte load/stores to complete the copy. -*/ - mr 4,12 /* restore unaligned adjusted src ptr */ - clrlwi 0,12,27 /* Find dist from previous 32-byte boundary. */ - slwi 10,10,3 /* calculate number of bits to shift 1st word left */ - cmplwi cr5,0,16 - subfic 8,0,32 /* Number of bytes to next 32-byte boundary. */ - - mtcrf 0x01,8 - cmplwi cr1,10,16 - subfic 9,10,32 /* number of bits to shift 2nd word right */ -/* This test is reversed because the timing to compare the bytes to - 32-byte boundary could not be meet. So we compare the bytes from - previous 32-byte boundary and invert the test. */ - bge cr5,L(wdu_h32_8) - .align 4 - lwz 6,0(4) - lwz 7,4(4) - addi 12,4,16 /* generate alternate pointers to avoid agen */ - addi 11,3,16 /* timing issues downstream. */ - stw 6,0(3) - stw 7,4(3) - subi 31,31,16 - lwz 6,8(4) - lwz 7,12(4) - addi 4,4,16 - stw 6,8(3) - stw 7,12(3) - addi 3,3,16 - bf 28,L(wdu_h32_4) - lwz 6,0(12) - lwz 7,4(12) - subi 31,31,8 - addi 4,4,8 - stw 6,0(11) - stw 7,4(11) - addi 3,3,8 - bf 29,L(wdu_h32_0) - lwz 6,8(12) - addi 4,4,4 - subi 31,31,4 - stw 6,8(11) - addi 3,3,4 - b L(wdu_h32_0) - .align 4 -L(wdu_h32_8): - bf 28,L(wdu_h32_4) - lwz 6,0(4) - lwz 7,4(4) - subi 31,31,8 - bf 29,L(wdu_h32_8x) - stw 6,0(3) - stw 7,4(3) - lwz 6,8(4) - addi 4,4,12 - subi 31,31,4 - stw 6,8(3) - addi 3,3,12 - b L(wdu_h32_0) - .align 4 -L(wdu_h32_8x): - addi 4,4,8 - stw 6,0(3) - stw 7,4(3) - addi 3,3,8 - b L(wdu_h32_0) - .align 4 -L(wdu_h32_4): - bf 29,L(wdu_h32_0) - lwz 6,0(4) - subi 31,31,4 - addi 4,4,4 - stw 6,0(3) - addi 3,3,4 - .align 4 -L(wdu_h32_0): -/* set up for 32-byte boundary crossing word move and possibly 32-byte - move loop. */ - clrrwi 12,4,2 - cmplwi cr5,31,32 - bge cr1,L(wdu2_32) -#if 0 - b L(wdu1_32) -/* - cmplwi cr1,10,8 - beq cr1,L(wdu1_32) - cmplwi cr1,10,16 - beq cr1,L(wdu2_32) - cmplwi cr1,10,24 - beq cr1,L(wdu3_32) -*/ -L(wdu_32): - lwz 6,0(12) - cmplwi cr6,31,4 - srwi 8,31,5 /* calculate the 32 byte loop count */ - slw 0,6,10 - clrlwi 31,31,27 /* The remaining bytes, < 32. */ - blt cr5,L(wdu_32tail) - mtctr 8 - cmplwi cr6,31,4 - .align 4 -L(wdu_loop32): - /* copy 32 bytes at a time */ - lwz 8,4(12) - addi 12,12,32 - lwz 7,4(4) - srw 8,8,9 - or 0,0,8 - stw 0,0(3) - stw 7,4(3) - lwz 6,8(4) - lwz 7,12(4) - stw 6,8(3) - stw 7,12(3) - lwz 6,16(4) - lwz 7,20(4) - stw 6,16(3) - stw 7,20(3) - lwz 6,24(4) - lwz 7,28(4) - lwz 8,0(12) - addi 4,4,32 - stw 6,24(3) - stw 7,28(3) - addi 3,3,32 - slw 0,8,10 - bdnz+ L(wdu_loop32) - -L(wdu_32tail): - mtcrf 0x01,31 - cmplwi cr5,31,16 - blt cr6,L(wdu_4tail) - /* calculate and store the final word */ - lwz 8,4(12) - srw 8,8,9 - or 6,0,8 - b L(wdu_32tailx) -#endif - .align 4 -L(wdu1_32): - lwz 6,-1(4) - cmplwi cr6,31,4 - srwi 8,31,5 /* calculate the 32 byte loop count */ -#ifdef __LITTLE_ENDIAN__ - srwi 6,6,8 -#else - slwi 6,6,8 -#endif - clrlwi 31,31,27 /* The remaining bytes, < 32. */ - blt cr5,L(wdu1_32tail) - mtctr 8 - cmplwi cr6,31,4 - - lwz 8,3(4) - lwz 7,4(4) -#ifdef __LITTLE_ENDIAN__ - rldimi 6,8,24,32 -#else -/* Equivalent to: srwi 8,8,32-8; or 6,6,8 */ - rlwimi 6,8,8,(32-8),31 -#endif - b L(wdu1_loop32x) - .align 4 -L(wdu1_loop32): - /* copy 32 bytes at a time */ - lwz 8,3(4) - lwz 7,4(4) - stw 10,-8(3) - stw 11,-4(3) -#ifdef __LITTLE_ENDIAN__ - rldimi 6,8,24,32 -#else -/* Equivalent to srwi 8,8,32-8; or 6,6,8 */ - rlwimi 6,8,8,(32-8),31 -#endif -L(wdu1_loop32x): - lwz 10,8(4) - lwz 11,12(4) - stw 6,0(3) - stw 7,4(3) - lwz 6,16(4) - lwz 7,20(4) - stw 10,8(3) - stw 11,12(3) - lwz 10,24(4) - lwz 11,28(4) - lwz 8,32-1(4) - addi 4,4,32 - stw 6,16(3) - stw 7,20(3) - addi 3,3,32 -#ifdef __LITTLE_ENDIAN__ - srwi 6,8,8 -#else - slwi 6,8,8 -#endif - bdnz+ L(wdu1_loop32) - stw 10,-8(3) - stw 11,-4(3) - -L(wdu1_32tail): - mtcrf 0x01,31 - cmplwi cr5,31,16 - blt cr6,L(wdu_4tail) - /* calculate and store the final word */ - lwz 8,3(4) -#ifdef __LITTLE_ENDIAN__ - rldimi 6,8,24,32 -#else -/* Equivalent to: srwi 8,8,32-8; or 6,6,8 */ - rlwimi 6,8,8,(32-8),31 -#endif - b L(wdu_32tailx) - -L(wdu2_32): - bgt cr1,L(wdu3_32) - lwz 6,-2(4) - cmplwi cr6,31,4 - srwi 8,31,5 /* calculate the 32 byte loop count */ -#ifdef __LITTLE_ENDIAN__ - srwi 6,6,16 -#else - slwi 6,6,16 -#endif - clrlwi 31,31,27 /* The remaining bytes, < 32. */ - blt cr5,L(wdu2_32tail) - mtctr 8 - cmplwi cr6,31,4 - - lwz 8,2(4) - lwz 7,4(4) -#ifdef __LITTLE_ENDIAN__ - rldimi 6,8,16,32 -#else - rlwimi 6,8,16,(32-16),31 -#endif - b L(wdu2_loop32x) - .align 4 -L(wdu2_loop32): - /* copy 32 bytes at a time */ - lwz 8,2(4) - lwz 7,4(4) - stw 10,-8(3) - stw 11,-4(3) -#ifdef __LITTLE_ENDIAN__ - rldimi 6,8,16,32 -#else - rlwimi 6,8,16,(32-16),31 -#endif -L(wdu2_loop32x): - lwz 10,8(4) - lwz 11,12(4) - stw 6,0(3) - stw 7,4(3) - lwz 6,16(4) - lwz 7,20(4) - stw 10,8(3) - stw 11,12(3) - lwz 10,24(4) - lwz 11,28(4) -/* lwz 8,0(12) */ - lwz 8,32-2(4) - addi 4,4,32 - stw 6,16(3) - stw 7,20(3) - addi 3,3,32 -#ifdef __LITTLE_ENDIAN__ - srwi 6,8,16 -#else - slwi 6,8,16 -#endif - bdnz+ L(wdu2_loop32) - stw 10,-8(3) - stw 11,-4(3) - -L(wdu2_32tail): - mtcrf 0x01,31 - cmplwi cr5,31,16 - blt cr6,L(wdu_4tail) - /* calculate and store the final word */ - lwz 8,2(4) -#ifdef __LITTLE_ENDIAN__ - rldimi 6,8,16,32 -#else - rlwimi 6,8,16,(32-16),31 -#endif - b L(wdu_32tailx) - -L(wdu3_32): -/* lwz 6,0(12) */ - lwz 6,-3(4) - cmplwi cr6,31,4 - srwi 8,31,5 /* calculate the 32 byte loop count */ -#ifdef __LITTLE_ENDIAN__ - srwi 6,6,24 -#else - slwi 6,6,24 -#endif - clrlwi 31,31,27 /* The remaining bytes, < 32. */ - blt cr5,L(wdu3_32tail) - mtctr 8 - cmplwi cr6,31,4 - - lwz 8,1(4) - lwz 7,4(4) -#ifdef __LITTLE_ENDIAN__ - rldimi 6,8,8,32 -#else - rlwimi 6,8,24,(32-24),31 -#endif - b L(wdu3_loop32x) - .align 4 -L(wdu3_loop32): - /* copy 32 bytes at a time */ - lwz 8,1(4) - lwz 7,4(4) - stw 10,-8(3) - stw 11,-4(3) -#ifdef __LITTLE_ENDIAN__ - rldimi 6,8,8,32 -#else - rlwimi 6,8,24,(32-24),31 -#endif -L(wdu3_loop32x): - lwz 10,8(4) - lwz 11,12(4) - stw 6,0(3) - stw 7,4(3) - lwz 6,16(4) - lwz 7,20(4) - stw 10,8(3) - stw 11,12(3) - lwz 10,24(4) - lwz 11,28(4) - lwz 8,32-3(4) - addi 4,4,32 - stw 6,16(3) - stw 7,20(3) - addi 3,3,32 -#ifdef __LITTLE_ENDIAN__ - srwi 6,8,24 -#else - slwi 6,8,24 -#endif - bdnz+ L(wdu3_loop32) - stw 10,-8(3) - stw 11,-4(3) - -L(wdu3_32tail): - mtcrf 0x01,31 - cmplwi cr5,31,16 - blt cr6,L(wdu_4tail) - /* calculate and store the final word */ - lwz 8,1(4) -#ifdef __LITTLE_ENDIAN__ - rldimi 6,8,8,32 -#else - rlwimi 6,8,24,(32-24),31 -#endif - b L(wdu_32tailx) - .align 4 -L(wdu_32tailx): - blt cr5,L(wdu_t32_8) - lwz 7,4(4) - addi 12,4,16 /* generate alternate pointers to avoid agen */ - addi 11,3,16 /* timing issues downstream. */ - stw 6,0(3) - stw 7,4(3) - subi 31,31,16 - lwz 6,8(4) - lwz 7,12(4) - addi 4,4,16 - stw 6,8(3) - stw 7,12(3) - addi 3,3,16 - bf 28,L(wdu_t32_4x) - lwz 6,0(12) - lwz 7,4(12) - addi 4,4,8 - subi 31,31,8 - stw 6,0(11) - stw 7,4(11) - addi 3,3,8 - bf 29,L(wdu_t32_0) - lwz 6,8(12) - addi 4,4,4 - subi 31,31,4 - stw 6,8(11) - addi 3,3,4 - b L(wdu_t32_0) - .align 4 -L(wdu_t32_4x): - bf 29,L(wdu_t32_0) - lwz 6,0(4) - addi 4,4,4 - subi 31,31,4 - stw 6,0(3) - addi 3,3,4 - b L(wdu_t32_0) - .align 4 -L(wdu_t32_8): - bf 28,L(wdu_t32_4) - lwz 7,4(4) - subi 31,31,8 - bf 29,L(wdu_t32_8x) - stw 6,0(3) - stw 7,4(3) - lwz 6,8(4) - subi 31,31,4 - addi 4,4,12 - stw 6,8(3) - addi 3,3,12 - b L(wdu_t32_0) - .align 4 -L(wdu_t32_8x): - addi 4,4,8 - stw 6,0(3) - stw 7,4(3) - addi 3,3,8 - b L(wdu_t32_0) - .align 4 -L(wdu_t32_4): - subi 31,31,4 - stw 6,0(3) - addi 4,4,4 - addi 3,3,4 - .align 4 -L(wdu_t32_0): -L(wdu_4tail): - cmplwi cr6,31,0 - beq cr6,L(wdus_0) /* If the tail is 0 bytes we are done! */ - bf 30,L(wdus_3) - lhz 7,0(4) - sth 7,0(3) - bf 31,L(wdus_0) - lbz 8,2(4) - stb 8,2(3) - mr 3,30 - lwz 30,20(1) - lwz 31,24(1) - addi 1,1,32 - blr - .align 4 -L(wdus_3): - bf 31,L(wus_0) - lbz 6,0(4) - stb 6,0(3) - .align 4 -L(wdus_0): - /* Return original dst pointer. */ - mr 3,30 - lwz 30,20(1) - lwz 31,24(1) - addi 1,1,32 - blr -END (memcpy) - -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/powerpc/powerpc32/power6/memset.S b/sysdeps/powerpc/powerpc32/power6/memset.S deleted file mode 100644 index f221c32d2f..0000000000 --- a/sysdeps/powerpc/powerpc32/power6/memset.S +++ /dev/null @@ -1,539 +0,0 @@ -/* Optimized 32-bit memset implementation for POWER6. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); - Returns 's'. - - The memset is done in three sizes: byte (8 bits), word (32 bits), - cache line (1024 bits). There is a special case for setting cache lines - to 0, to take advantage of the dcbz instruction. */ - - .machine power6 -EALIGN (memset, 7, 0) - CALL_MCOUNT - -#define rTMP r0 -#define rRTN r3 /* Initial value of 1st argument. */ -#define rMEMP0 r3 /* Original value of 1st arg. */ -#define rCHR r4 /* Char to set in each byte. */ -#define rLEN r5 /* Length of region to set. */ -#define rMEMP r6 /* Address at which we are storing. */ -#define rALIGN r7 /* Number of bytes we are setting now (when aligning). */ -#define rMEMP2 r8 - -#define rNEG64 r8 /* Constant -64 for clearing with dcbz. */ -#define rMEMP3 r9 /* Alt mem pointer. */ -L(_memset): -/* Take care of case for size <= 4. */ - cmplwi cr1, rLEN, 4 - andi. rALIGN, rMEMP0, 3 - mr rMEMP, rMEMP0 - ble- cr1, L(small) -/* Align to word boundary. */ - cmplwi cr5, rLEN, 31 - insrwi rCHR, rCHR, 8, 16 /* Replicate byte to halfword. */ - beq+ L(aligned) - mtcrf 0x01, rMEMP0 - subfic rALIGN, rALIGN, 4 - add rMEMP, rMEMP, rALIGN - sub rLEN, rLEN, rALIGN - bf+ 31, L(g0) - stb rCHR, 0(rMEMP0) - bt 30, L(aligned) -L(g0): - sth rCHR, -2(rMEMP) - - .align 4 -/* Handle the case of size < 31. */ -L(aligned): - mtcrf 0x01, rLEN - insrwi rCHR, rCHR, 16, 0 /* Replicate halfword to word. */ - ble cr5, L(medium) -/* Align to 32-byte boundary. */ - andi. rALIGN, rMEMP, 0x1C - subfic rALIGN, rALIGN, 0x20 - beq L(caligned) - mtcrf 0x01, rALIGN - add rMEMP, rMEMP, rALIGN - sub rLEN, rLEN, rALIGN - cmplwi cr1, rALIGN, 0x10 - mr rMEMP2, rMEMP - bf 28, L(a1) - stw rCHR, -4(rMEMP2) - stwu rCHR, -8(rMEMP2) - nop -L(a1): blt cr1, L(a2) - stw rCHR, -4(rMEMP2) - stw rCHR, -8(rMEMP2) - stw rCHR, -12(rMEMP2) - stwu rCHR, -16(rMEMP2) -L(a2): bf 29, L(caligned) - stw rCHR, -4(rMEMP2) - - .align 3 -/* Now aligned to a 32 byte boundary. */ -L(caligned): - cmplwi cr1, rCHR, 0 - clrrwi. rALIGN, rLEN, 5 - mtcrf 0x01, rLEN - beq cr1, L(zloopstart) /* Special case for clearing memory using dcbz. */ -L(nondcbz): - beq L(medium) /* We may not actually get to do a full line. */ - nop -/* Storing a non-zero "c" value. We are aligned at a sector (32-byte) - boundary may not be at cache line (128-byte) boundary. */ -L(nzloopstart): -/* memset in 32-byte chunks until we get to a cache line boundary. - If rLEN is less than the distance to the next cache-line boundary use - cacheAligned1 code to finish the tail. */ - cmplwi cr1,rLEN,128 - - andi. rTMP,rMEMP,127 - blt cr1,L(cacheAligned1) - addi rMEMP3,rMEMP,32 - beq L(nzCacheAligned) - addi rLEN,rLEN,-32 - stw rCHR,0(rMEMP) - stw rCHR,4(rMEMP) - stw rCHR,8(rMEMP) - stw rCHR,12(rMEMP) - stw rCHR,16(rMEMP) - stw rCHR,20(rMEMP) - addi rMEMP,rMEMP,32 - andi. rTMP,rMEMP3,127 - stw rCHR,-8(rMEMP3) - stw rCHR,-4(rMEMP3) - - beq L(nzCacheAligned) - addi rLEN,rLEN,-32 - stw rCHR,0(rMEMP3) - stw rCHR,4(rMEMP3) - addi rMEMP,rMEMP,32 - stw rCHR,8(rMEMP3) - stw rCHR,12(rMEMP3) - andi. rTMP,rMEMP,127 - stw rCHR,16(rMEMP3) - stw rCHR,20(rMEMP3) - stw rCHR,24(rMEMP3) - stw rCHR,28(rMEMP3) - - beq L(nzCacheAligned) - addi rLEN,rLEN,-32 -/* At this point we can overrun the store queue (pipe reject) so it is - time to slow things down. The store queue can merge two adjacent - stores into a single L1/L2 op, but the L2 is clocked at 1/2 the CPU. - So we add "group ending nops" to guarantee that we dispatch only two - stores every other cycle. */ - ori r1,r1,0 - ori r1,r1,0 - stw rCHR,32(rMEMP3) - stw rCHR,36(rMEMP3) - addi rMEMP,rMEMP,32 - cmplwi cr1,rLEN,128 - ori r1,r1,0 - ori r1,r1,0 - stw rCHR,40(rMEMP3) - stw rCHR,44(rMEMP3) - ori r1,r1,0 - ori r1,r1,0 - stw rCHR,48(rMEMP3) - stw rCHR,52(rMEMP3) - ori r1,r1,0 - ori r1,r1,0 - stw rCHR,56(rMEMP3) - stw rCHR,60(rMEMP3) - blt cr1,L(cacheAligned1) - b L(nzCacheAligned) - -/* Now we are aligned to the cache line and can use dcbtst. */ - .align 5 -L(nzCacheAligned): - cmplwi cr1,rLEN,128 - cmplwi cr6,rLEN,256 - blt cr1,L(cacheAligned1) - blt cr6,L(nzCacheAligned128) - .align 4 -L(nzCacheAligned128): - nop - addi rMEMP3,rMEMP,64 - stw rCHR,0(rMEMP) - stw rCHR,4(rMEMP) - stw rCHR,8(rMEMP) - stw rCHR,12(rMEMP) - stw rCHR,16(rMEMP) - stw rCHR,20(rMEMP) - stw rCHR,24(rMEMP) - stw rCHR,28(rMEMP) - stw rCHR,32(rMEMP) - stw rCHR,36(rMEMP) - stw rCHR,40(rMEMP) - stw rCHR,44(rMEMP) - stw rCHR,48(rMEMP) - stw rCHR,52(rMEMP) - stw rCHR,56(rMEMP) - stw rCHR,60(rMEMP) - addi rMEMP,rMEMP3,64 - addi rLEN,rLEN,-128 -/* At this point we can overrun the store queue (pipe reject) so it is - time to slow things down. The store queue can merge two adjacent - stores into a single L1/L2 op, but the L2 is clocked at 1/2 the CPU. - So we add "group ending nops" to guarantee that we dispatch only one - store per cycle. */ - stw rCHR,0(rMEMP3) - ori r1,r1,0 - stw rCHR,4(rMEMP3) - ori r1,r1,0 - stw rCHR,8(rMEMP3) - ori r1,r1,0 - stw rCHR,12(rMEMP3) - ori r1,r1,0 - stw rCHR,16(rMEMP3) - ori r1,r1,0 - stw rCHR,20(rMEMP3) - ori r1,r1,0 - stw rCHR,24(rMEMP3) - ori r1,r1,0 - stw rCHR,28(rMEMP3) - ori r1,r1,0 - stw rCHR,32(rMEMP3) - ori r1,r1,0 - stw rCHR,36(rMEMP3) - ori r1,r1,0 - stw rCHR,40(rMEMP3) - ori r1,r1,0 - stw rCHR,44(rMEMP3) - ori r1,r1,0 - stw rCHR,48(rMEMP3) - ori r1,r1,0 - stw rCHR,52(rMEMP3) - ori r1,r1,0 - stw rCHR,56(rMEMP3) - ori r1,r1,0 - stw rCHR,60(rMEMP3) - blt cr6,L(cacheAligned1) -#if IS_IN (libc) - lfd 0,-128(rMEMP) -#endif - b L(nzCacheAligned256) - .align 5 -L(nzCacheAligned256): - cmplwi cr1,rLEN,256 - addi rMEMP3,rMEMP,64 -#if !IS_IN (libc) -/* When we are not in libc we should use only GPRs to avoid the FPU lock - interrupt. */ - stw rCHR,0(rMEMP) - stw rCHR,4(rMEMP) - stw rCHR,8(rMEMP) - stw rCHR,12(rMEMP) - stw rCHR,16(rMEMP) - stw rCHR,20(rMEMP) - stw rCHR,24(rMEMP) - stw rCHR,28(rMEMP) - stw rCHR,32(rMEMP) - stw rCHR,36(rMEMP) - stw rCHR,40(rMEMP) - stw rCHR,44(rMEMP) - stw rCHR,48(rMEMP) - stw rCHR,52(rMEMP) - stw rCHR,56(rMEMP) - stw rCHR,60(rMEMP) - addi rMEMP,rMEMP3,64 - addi rLEN,rLEN,-128 - stw rCHR,0(rMEMP3) - stw rCHR,4(rMEMP3) - stw rCHR,8(rMEMP3) - stw rCHR,12(rMEMP3) - stw rCHR,16(rMEMP3) - stw rCHR,20(rMEMP3) - stw rCHR,24(rMEMP3) - stw rCHR,28(rMEMP3) - stw rCHR,32(rMEMP3) - stw rCHR,36(rMEMP3) - stw rCHR,40(rMEMP3) - stw rCHR,44(rMEMP3) - stw rCHR,48(rMEMP3) - stw rCHR,52(rMEMP3) - stw rCHR,56(rMEMP3) - stw rCHR,60(rMEMP3) -#else -/* We are in libc and this is a long memset so we can use FPRs and can afford - occasional FPU locked interrupts. */ - stfd 0,0(rMEMP) - stfd 0,8(rMEMP) - stfd 0,16(rMEMP) - stfd 0,24(rMEMP) - stfd 0,32(rMEMP) - stfd 0,40(rMEMP) - stfd 0,48(rMEMP) - stfd 0,56(rMEMP) - addi rMEMP,rMEMP3,64 - addi rLEN,rLEN,-128 - stfd 0,0(rMEMP3) - stfd 0,8(rMEMP3) - stfd 0,16(rMEMP3) - stfd 0,24(rMEMP3) - stfd 0,32(rMEMP3) - stfd 0,40(rMEMP3) - stfd 0,48(rMEMP3) - stfd 0,56(rMEMP3) -#endif - bge cr1,L(nzCacheAligned256) - dcbtst 0,rMEMP - b L(cacheAligned1) - - .align 4 -/* Storing a zero "c" value. We are aligned at a sector (32-byte) - boundary but may not be at cache line (128-byte) boundary. If the - remaining length spans a full cache line we can use the Data cache - block zero instruction. */ -L(zloopstart): -/* memset in 32-byte chunks until we get to a cache line boundary. - If rLEN is less than the distance to the next cache-line boundary use - cacheAligned1 code to finish the tail. */ - cmplwi cr1,rLEN,128 - beq L(medium) -L(getCacheAligned): - andi. rTMP,rMEMP,127 - blt cr1,L(cacheAligned1) - addi rMEMP3,rMEMP,32 - beq L(cacheAligned) - addi rLEN,rLEN,-32 - stw rCHR,0(rMEMP) - stw rCHR,4(rMEMP) - stw rCHR,8(rMEMP) - stw rCHR,12(rMEMP) - stw rCHR,16(rMEMP) - stw rCHR,20(rMEMP) - addi rMEMP,rMEMP,32 - andi. rTMP,rMEMP3,127 - stw rCHR,-8(rMEMP3) - stw rCHR,-4(rMEMP3) -L(getCacheAligned2): - beq L(cacheAligned) - addi rLEN,rLEN,-32 - addi rMEMP,rMEMP,32 - stw rCHR,0(rMEMP3) - stw rCHR,4(rMEMP3) - stw rCHR,8(rMEMP3) - stw rCHR,12(rMEMP3) - andi. rTMP,rMEMP,127 - nop - stw rCHR,16(rMEMP3) - stw rCHR,20(rMEMP3) - stw rCHR,24(rMEMP3) - stw rCHR,28(rMEMP3) -L(getCacheAligned3): - beq L(cacheAligned) -/* At this point we can overrun the store queue (pipe reject) so it is - time to slow things down. The store queue can merge two adjacent - stores into a single L1/L2 op, but the L2 is clocked at 1/2 the CPU. - So we add "group ending nops" to guarantee that we dispatch only two - stores every other cycle. */ - addi rLEN,rLEN,-32 - ori r1,r1,0 - ori r1,r1,0 - stw rCHR,32(rMEMP3) - stw rCHR,36(rMEMP3) - addi rMEMP,rMEMP,32 - cmplwi cr1,rLEN,128 - ori r1,r1,0 - stw rCHR,40(rMEMP3) - stw rCHR,44(rMEMP3) - cmplwi cr6,rLEN,256 - li rMEMP2,128 - ori r1,r1,0 - stw rCHR,48(rMEMP3) - stw rCHR,52(rMEMP3) - ori r1,r1,0 - ori r1,r1,0 - stw rCHR,56(rMEMP3) - stw rCHR,60(rMEMP3) - blt cr1,L(cacheAligned1) - blt cr6,L(cacheAligned128) - b L(cacheAlignedx) - -/* Now we are aligned to the cache line and can use dcbz. */ - .align 4 -L(cacheAligned): - cmplwi cr1,rLEN,128 - cmplwi cr6,rLEN,256 - blt cr1,L(cacheAligned1) - li rMEMP2,128 -L(cacheAlignedx): - cmplwi cr5,rLEN,640 - blt cr6,L(cacheAligned128) - bgt cr5,L(cacheAligned512) - cmplwi cr6,rLEN,512 - dcbz 0,rMEMP - cmplwi cr1,rLEN,384 - dcbz rMEMP2,rMEMP - addi rMEMP,rMEMP,256 - addi rLEN,rLEN,-256 - blt cr1,L(cacheAligned1) - blt cr6,L(cacheAligned128) - b L(cacheAligned256) - .align 5 -/* A simple loop for the longer (>640 bytes) lengths. This form limits - the branch miss-predicted to exactly 1 at loop exit.*/ -L(cacheAligned512): - cmplwi cr1,rLEN,128 - blt cr1,L(cacheAligned1) - dcbz 0,rMEMP - addi rLEN,rLEN,-128 - addi rMEMP,rMEMP,128 - b L(cacheAligned512) - .align 5 -L(cacheAligned256): - cmplwi cr6,rLEN,512 - dcbz 0,rMEMP - cmplwi cr1,rLEN,384 - dcbz rMEMP2,rMEMP - addi rMEMP,rMEMP,256 - addi rLEN,rLEN,-256 - bge cr6,L(cacheAligned256) - blt cr1,L(cacheAligned1) - .align 4 -L(cacheAligned128): - dcbz 0,rMEMP - addi rMEMP,rMEMP,128 - addi rLEN,rLEN,-128 - .align 4 -L(cacheAligned1): - cmplwi cr1,rLEN,32 - blt cr1,L(handletail32) - addi rMEMP3,rMEMP,32 - addi rLEN,rLEN,-32 - stw rCHR,0(rMEMP) - stw rCHR,4(rMEMP) - stw rCHR,8(rMEMP) - stw rCHR,12(rMEMP) - stw rCHR,16(rMEMP) - stw rCHR,20(rMEMP) - addi rMEMP,rMEMP,32 - cmplwi cr1,rLEN,32 - stw rCHR,-8(rMEMP3) - stw rCHR,-4(rMEMP3) -L(cacheAligned2): - blt cr1,L(handletail32) - addi rLEN,rLEN,-32 - stw rCHR,0(rMEMP3) - stw rCHR,4(rMEMP3) - stw rCHR,8(rMEMP3) - stw rCHR,12(rMEMP3) - addi rMEMP,rMEMP,32 - cmplwi cr1,rLEN,32 - stw rCHR,16(rMEMP3) - stw rCHR,20(rMEMP3) - stw rCHR,24(rMEMP3) - stw rCHR,28(rMEMP3) - nop -L(cacheAligned3): - blt cr1,L(handletail32) -/* At this point we can overrun the store queue (pipe reject) so it is - time to slow things down. The store queue can merge two adjacent - stores into a single L1/L2 op, but the L2 is clocked at 1/2 the CPU. - So we add "group ending nops" to guarantee that we dispatch only two - stores every other cycle. */ - ori r1,r1,0 - ori r1,r1,0 - addi rMEMP,rMEMP,32 - addi rLEN,rLEN,-32 - ori r1,r1,0 - ori r1,r1,0 - stw rCHR,32(rMEMP3) - stw rCHR,36(rMEMP3) - ori r1,r1,0 - ori r1,r1,0 - stw rCHR,40(rMEMP3) - stw rCHR,44(rMEMP3) - ori r1,r1,0 - ori r1,r1,0 - stw rCHR,48(rMEMP3) - stw rCHR,52(rMEMP3) - ori r1,r1,0 - ori r1,r1,0 - stw rCHR,56(rMEMP3) - stw rCHR,60(rMEMP3) - -/* We are here because the length or remainder (rLEN) is less than the - cache line/sector size and does not justify aggressive loop unrolling. - So set up the preconditions for L(medium) and go there. */ - .align 3 -L(handletail32): - cmplwi cr1,rLEN,0 - beqlr cr1 - b L(medium) - - .align 4 -L(small): -/* Memset of 4 bytes or less. */ - cmplwi cr5, rLEN, 1 - cmplwi cr1, rLEN, 3 - bltlr cr5 - stb rCHR, 0(rMEMP) - beqlr cr5 - stb rCHR, 1(rMEMP) - bltlr cr1 - stb rCHR, 2(rMEMP) - beqlr cr1 - stb rCHR, 3(rMEMP) - blr - -/* Memset of 0-31 bytes. */ - .align 5 -L(medium): - cmplwi cr1, rLEN, 16 -L(medium_tail2): - add rMEMP, rMEMP, rLEN -L(medium_tail): - bt- 31, L(medium_31t) - bt- 30, L(medium_30t) -L(medium_30f): - bt 29, L(medium_29t) -L(medium_29f): - bge cr1, L(medium_27t) - bflr 28 - stw rCHR, -4(rMEMP) - stw rCHR, -8(rMEMP) - blr - -L(medium_31t): - stbu rCHR, -1(rMEMP) - bf- 30, L(medium_30f) -L(medium_30t): - sthu rCHR, -2(rMEMP) - bf- 29, L(medium_29f) -L(medium_29t): - stwu rCHR, -4(rMEMP) - blt cr1, L(medium_27f) -L(medium_27t): - stw rCHR, -4(rMEMP) - stw rCHR, -8(rMEMP) - stw rCHR, -12(rMEMP) - stwu rCHR, -16(rMEMP) -L(medium_27f): - bflr 28 -L(medium_28t): - stw rCHR, -4(rMEMP) - stw rCHR, -8(rMEMP) - blr -END (memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/powerpc/powerpc32/power6/multiarch/Implies b/sysdeps/powerpc/powerpc32/power6/multiarch/Implies deleted file mode 100644 index ff9f999749..0000000000 --- a/sysdeps/powerpc/powerpc32/power6/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power5+/multiarch diff --git a/sysdeps/powerpc/powerpc32/power6x/Implies b/sysdeps/powerpc/powerpc32/power6x/Implies deleted file mode 100644 index c0e1bea435..0000000000 --- a/sysdeps/powerpc/powerpc32/power6x/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/power6/fpu -powerpc/powerpc32/power6 diff --git a/sysdeps/powerpc/powerpc32/power6x/fpu/Implies b/sysdeps/powerpc/powerpc32/power6x/fpu/Implies deleted file mode 100644 index d53ce2573c..0000000000 --- a/sysdeps/powerpc/powerpc32/power6x/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power6/fpu diff --git a/sysdeps/powerpc/powerpc32/power6x/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc32/power6x/fpu/multiarch/Implies deleted file mode 100644 index c66805ee63..0000000000 --- a/sysdeps/powerpc/powerpc32/power6x/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power5+/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc32/power6x/fpu/s_lrint.S b/sysdeps/powerpc/powerpc32/power6x/fpu/s_lrint.S deleted file mode 100644 index cb780516b5..0000000000 --- a/sysdeps/powerpc/powerpc32/power6x/fpu/s_lrint.S +++ /dev/null @@ -1,41 +0,0 @@ -/* Round double to long int. POWER6x PowerPC32 version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .machine "power6" -/* long int[r3] __lrint (double x[fp1]) */ -ENTRY (__lrint) - fctiw fp13,fp1 - mftgpr r3,fp13 - blr - END (__lrint) - -weak_alias (__lrint, lrint) - -strong_alias (__lrint, __lrintf) -weak_alias (__lrint, lrintf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__lrint, __lrintl) -weak_alias (__lrint, lrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lrint, lrintl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/power6x/fpu/s_lround.S b/sysdeps/powerpc/powerpc32/power6x/fpu/s_lround.S deleted file mode 100644 index 05b13cd34c..0000000000 --- a/sysdeps/powerpc/powerpc32/power6x/fpu/s_lround.S +++ /dev/null @@ -1,51 +0,0 @@ -/* lround function. POWER6x, PowerPC32 version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* long [r3] lround (float x [fp1]) - IEEE 1003.1 lround function. IEEE specifies "round to the nearest - integer value, rounding halfway cases away from zero, regardless of - the current rounding mode." However PowerPC Architecture defines - "round to Nearest" as "Choose the best approximation. In case of a - tie, choose the one that is even (least significant bit o).". - So we pre-round using the V2.02 Floating Round to Integer Nearest - instruction before we use the Floating Convert to Integer Word with - round to zero instruction. */ - - .machine "power6" -ENTRY (__lround) - frin fp2,fp1 /* Pre-round +-0.5. */ - fctiwz fp3,fp2 /* Convert To Integer Word lround toward 0. */ - mftgpr r3,fp3 /* Transfer fpr3 to r3. */ - blr - END (__lround) - -weak_alias (__lround, lround) - -strong_alias (__lround, __lroundf) -weak_alias (__lround, lroundf) - -#ifdef NO_LONG_DOUBLE -weak_alias (__lround, lroundl) -strong_alias (__lround, __lroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lround, lroundl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc32/power6x/multiarch/Implies b/sysdeps/powerpc/powerpc32/power6x/multiarch/Implies deleted file mode 100644 index ff9f999749..0000000000 --- a/sysdeps/powerpc/powerpc32/power6x/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power5+/multiarch diff --git a/sysdeps/powerpc/powerpc32/power7/Implies b/sysdeps/powerpc/powerpc32/power7/Implies deleted file mode 100644 index c0e1bea435..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/power6/fpu -powerpc/powerpc32/power6 diff --git a/sysdeps/powerpc/powerpc32/power7/Makefile b/sysdeps/powerpc/powerpc32/power7/Makefile deleted file mode 100644 index 5e8f4a28ba..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -ifeq ($(subdir),string) -CFLAGS-strncase.c += -funroll-loops -CFLAGS-strncase_l.c += -funroll-loops -endif diff --git a/sysdeps/powerpc/powerpc32/power7/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc32/power7/fpu/multiarch/Implies deleted file mode 100644 index 45cbaede9f..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power6/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S b/sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S deleted file mode 100644 index da4efa0fb9..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S +++ /dev/null @@ -1,93 +0,0 @@ -/* finite(). PowerPC32/POWER7 version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __finite(x) */ - .section .rodata.cst8,"aM",@progbits,8 - .align 3 -.LC0: /* 1.0 */ - .quad 0x3ff0000000000000 - - .section ".text" - .type __finite, @function - .machine power7 -ENTRY (__finite) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,.LC0-got_label@ha - lfd fp0,.LC0-got_label@l(r9) - - mtlr r11 - cfi_same_value (lr) -#else - lis r9,.LC0@ha - lfd fp0,.LC0@l(r9) -#endif - ftdiv cr7,fp1,fp0 - li r3,1 - bflr 30 - - /* We have -INF/+INF/NaN or a denormal. */ - - stwu r1,-16(r1) /* Allocate stack space. */ - stfd fp1,8(r1) /* Transfer FP to GPR's. */ - - ori 2,2,0 /* Force a new dispatch group. */ - lhz r0,8+HISHORT(r1) /* Fetch the upper 16 bits of the FP value - (biased exponent and sign bit). */ - clrlwi r0,r0,17 /* r0 = abs(r0). */ - addi r1,r1,16 /* Reset the stack pointer. */ - cmpwi cr7,r0,0x7ff0 /* r4 == 0x7ff0?. */ - bltlr cr7 /* LT means we have a denormal. */ - li r3,0 - blr - END (__finite) - -hidden_def (__finite) -weak_alias (__finite, finite) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__finite, __finitef) -hidden_def (__finitef) -weak_alias (__finitef, finitef) - -#ifdef NO_LONG_DOUBLE -strong_alias (__finite, __finitel) -weak_alias (__finite, finitel) -#endif - -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT (libm, GLIBC_2_0) -compat_symbol (libm, finite, finitel, GLIBC_2_0) -# endif -# if LONG_DOUBLE_COMPAT (libm, GLIBC_2_1) -compat_symbol (libm, __finite, __finitel, GLIBC_2_1) -# endif -#else -# if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) -compat_symbol (libc, __finite, __finitel, GLIBC_2_0); -compat_symbol (libc, finite, finitel, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc32/power7/fpu/s_finitef.S b/sysdeps/powerpc/powerpc32/power7/fpu/s_finitef.S deleted file mode 100644 index 54bd94176d..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/fpu/s_finitef.S +++ /dev/null @@ -1 +0,0 @@ -/* This function uses the same code as s_finite.S. */ diff --git a/sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S b/sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S deleted file mode 100644 index 668815761a..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S +++ /dev/null @@ -1,85 +0,0 @@ -/* isinf(). PowerPC32/POWER7 version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __isinf(x) */ - .section .rodata.cst8,"aM",@progbits,8 - .align 3 -.LC0: /* 1.0 */ - .quad 0x3ff0000000000000 - - .section ".text" - .type __isinf, @function - .machine power7 -ENTRY (__isinf) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,.LC0-got_label@ha - lfd fp0,.LC0-got_label@l(r9) - - mtlr r11 - cfi_same_value (lr) -#else - lis r9,.LC0@ha - lfd fp0,.LC0@l(r9) -#endif - ftdiv cr7,fp1,fp0 - li r3,0 - bflr 29 /* If not INF, return. */ - - /* Either we have +INF or -INF. */ - - stwu r1,-16(r1) /* Allocate stack space. */ - stfd fp1,8(r1) /* Transfer FP to GPR's. */ - ori 2,2,0 /* Force a new dispatch group. */ - lhz r4,8+HISHORT(r1) /* Fetch the upper 16 bits of the FP value - (biased exponent and sign bit). */ - addi r1,r1,16 /* Reset the stack pointer. */ - cmpwi cr7,r4,0x7ff0 /* r4 == 0x7ff0? */ - li r3,1 - beqlr cr7 /* EQ means INF, otherwise -INF. */ - li r3,-1 - blr - END (__isinf) - -hidden_def (__isinf) -weak_alias (__isinf, isinf) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__isinf, __isinff) -hidden_def (__isinff) -weak_alias (__isinff, isinff) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isinf, __isinfl) -weak_alias (__isinf, isinfl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isinf, __isinfl, GLIBC_2_0); -compat_symbol (libc, isinf, isinfl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc32/power7/fpu/s_isinff.S b/sysdeps/powerpc/powerpc32/power7/fpu/s_isinff.S deleted file mode 100644 index be759e091e..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/fpu/s_isinff.S +++ /dev/null @@ -1 +0,0 @@ -/* This function uses the same code as s_isinf.S. */ diff --git a/sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S b/sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S deleted file mode 100644 index 433137f1c4..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S +++ /dev/null @@ -1,90 +0,0 @@ -/* isnan(). PowerPC32/POWER7 version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __isnan(x) */ - .section .rodata.cst8,"aM",@progbits,8 - .align 3 -.LC0: /* 1.0 */ - .quad 0x3ff0000000000000 - - .section ".text" - .type __isnan, @function - .machine power7 -ENTRY (__isnan) -#ifdef SHARED - mflr r11 - cfi_register(lr,r11) - - SETUP_GOT_ACCESS(r9,got_label) - addis r9,r9,.LC0-got_label@ha - lfd fp0,.LC0-got_label@l(r9) - - mtlr r11 - cfi_same_value (lr) -#else - lis r9,.LC0@ha - lfd fp0,.LC0@l(r9) -#endif - ftdiv cr7,fp1,fp0 - li r3,0 - bflr 30 /* If not NaN or Inf, finish. */ - - /* We have -INF/+INF/NaN or a denormal. */ - - stwu r1,-16(r1) /* Allocate stack space. */ - stfd fp1,8(r1) /* Transfer FP to GPR's. */ - ori 2,2,0 /* Force a new dispatch group. */ - lwz r4,8+HIWORD(r1) /* Load the upper half of the FP value. */ - lwz r5,8+LOWORD(r1) /* Load the lower half of the FP value. */ - addi r1,r1,16 /* Reset the stack pointer. */ - lis r0,0x7ff0 /* Load the upper portion for an INF/NaN. */ - clrlwi r4,r4,1 /* r4 = abs(r4). */ - cmpw cr7,r4,r0 /* if (abs(r4) <= inf). */ - cmpwi cr6,r5,0 /* r5 == 0x00000000? */ - bltlr cr7 /* LT means we have a denormal. */ - bgt cr7,L(NaN) /* GT means we have a NaN. */ - beqlr cr6 /* EQ means we have +/-INF. */ -L(NaN): - li r3,1 /* x == NaN? */ - blr - END (__isnan) - -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__isnan, __isnanf) -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc32/power7/fpu/s_isnanf.S b/sysdeps/powerpc/powerpc32/power7/fpu/s_isnanf.S deleted file mode 100644 index b48c85e0d3..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/fpu/s_isnanf.S +++ /dev/null @@ -1 +0,0 @@ -/* This function uses the same code as s_isnan.S. */ diff --git a/sysdeps/powerpc/powerpc32/power7/memchr.S b/sysdeps/powerpc/powerpc32/power7/memchr.S deleted file mode 100644 index 9ce8507a82..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/memchr.S +++ /dev/null @@ -1,193 +0,0 @@ -/* Optimized memchr implementation for PowerPC32/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] memchr (char *s [r3], int byte [r4], int size [r5]) */ - .machine power7 -ENTRY (__memchr) - CALL_MCOUNT - dcbt 0,r3 - clrrwi r8,r3,2 - insrwi r4,r4,8,16 /* Replicate byte to word. */ - - /* Calculate the last acceptable address and check for possible - addition overflow by using satured math: - r7 = r3 + r5 - r7 |= -(r7 < x) */ - add r7,r3,r5 - subfc r6,r3,r7 - subfe r9,r9,r9 - or r7,r7,r9 - - insrwi r4,r4,16,0 - cmplwi r5,16 - li r9, -1 - rlwinm r6,r3,3,27,28 /* Calculate padding. */ - addi r7,r7,-1 -#ifdef __LITTLE_ENDIAN__ - slw r9,r9,r6 -#else - srw r9,r9,r6 -#endif - ble L(small_range) - - lwz r12,0(r8) /* Load word from memory. */ - cmpb r3,r12,r4 /* Check for BYTEs in WORD1. */ - and r3,r3,r9 - clrlwi r5,r7,30 /* Byte count - 1 in last word. */ - clrrwi r7,r7,2 /* Address of last word. */ - cmplwi cr7,r3,0 /* If r3 == 0, no BYTEs have been found. */ - bne cr7,L(done) - - mtcrf 0x01,r8 - /* Are we now aligned to a doubleword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - bt 29,L(loop_setup) - - /* Handle WORD2 of pair. */ - lwzu r12,4(r8) - cmpb r3,r12,r4 - cmplwi cr7,r3,0 - bne cr7,L(done) - -L(loop_setup): - /* The last word we want to read in the loop below is the one - containing the last byte of the string, ie. the word at - (s + size - 1) & ~3, or r7. The first word read is at - r8 + 4, we read 2 * cnt words, so the last word read will - be at r8 + 4 + 8 * cnt - 4. Solving for cnt gives - cnt = (r7 - r8) / 8 */ - sub r6,r7,r8 - srwi r6,r6,3 /* Number of loop iterations. */ - mtctr r6 /* Setup the counter. */ - - /* Main loop to look for BYTE in the string. Since - it's a small loop (8 instructions), align it to 32-bytes. */ - .align 5 -L(loop): - /* Load two words, compare and merge in a - single register for speed. This is an attempt - to speed up the byte-checking process for bigger strings. */ - lwz r12,4(r8) - lwzu r11,8(r8) - cmpb r3,r12,r4 - cmpb r9,r11,r4 - or r6,r9,r3 /* Merge everything in one word. */ - cmplwi cr7,r6,0 - bne cr7,L(found) - bdnz L(loop) - - /* We may have one more dword to read. */ - cmplw r8,r7 - beqlr - - lwzu r12,4(r8) - cmpb r3,r12,r4 - cmplwi cr6,r3,0 - bne cr6,L(done) - blr - - .align 4 -L(found): - /* OK, one (or both) of the words contains BYTE. Check - the first word and decrement the address in case the first - word really contains BYTE. */ - cmplwi cr6,r3,0 - addi r8,r8,-4 - bne cr6,L(done) - - /* BYTE must be in the second word. Adjust the address - again and move the result of cmpb to r3 so we can calculate the - pointer. */ - - mr r3,r9 - addi r8,r8,4 - - /* r3 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as BYTE in the original - word from the string. Use that to calculate the pointer. - We need to make sure BYTE is *before* the end of the range. */ -L(done): -#ifdef __LITTLE_ENDIAN__ - addi r0,r3,-1 - andc r0,r0,r3 - popcntw r0,r0 /* Count trailing zeros. */ -#else - cntlzw r0,r3 /* Count leading zeros before the match. */ -#endif - cmplw r8,r7 /* Are we on the last word? */ - srwi r0,r0,3 /* Convert leading/trailing zeros to bytes. */ - add r3,r8,r0 - cmplw cr7,r0,r5 /* If on the last dword, check byte offset. */ - bnelr - blelr cr7 - li r3,0 - blr - - .align 4 -L(null): - li r3,0 - blr - -/* Deals with size <= 16. */ - .align 4 -L(small_range): - cmplwi r5,0 - beq L(null) - lwz r12,0(r8) /* Load word from memory. */ - cmpb r3,r12,r4 /* Check for BYTE in DWORD1. */ - and r3,r3,r9 - cmplwi cr7,r3,0 - clrlwi r5,r7,30 /* Byte count - 1 in last word. */ - clrrwi r7,r7,2 /* Address of last word. */ - cmplw r8,r7 /* Are we done already? */ - bne cr7,L(done) - beqlr - - lwzu r12,4(r8) - cmpb r3,r12,r4 - cmplwi cr6,r3,0 - cmplw r8,r7 - bne cr6,L(done) - beqlr - - lwzu r12,4(r8) - cmpb r3,r12,r4 - cmplwi cr6,r3,0 - cmplw r8,r7 - bne cr6,L(done) - beqlr - - lwzu r12,4(r8) - cmpb r3,r12,r4 - cmplwi cr6,r3,0 - cmplw r8,r7 - bne cr6,L(done) - beqlr - - lwzu r12,4(r8) - cmpb r3,r12,r4 - cmplwi cr6,r3,0 - bne cr6,L(done) - blr - -END (__memchr) -weak_alias (__memchr, memchr) -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/powerpc/powerpc32/power7/memcmp.S b/sysdeps/powerpc/powerpc32/power7/memcmp.S deleted file mode 100644 index 09c9b9bf4d..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/memcmp.S +++ /dev/null @@ -1,1375 +0,0 @@ -/* Optimized memcmp implementation for POWER7/PowerPC32. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] memcmp (const char *s1 [r3], - const char *s2 [r4], - size_t size [r5]) */ - - .machine power7 -EALIGN (memcmp, 4, 0) - CALL_MCOUNT - -#define rRTN r3 -#define rSTR1 r3 /* first string arg */ -#define rSTR2 r4 /* second string arg */ -#define rN r5 /* max string length */ -#define rWORD1 r6 /* current word in s1 */ -#define rWORD2 r7 /* current word in s2 */ -#define rWORD3 r8 /* next word in s1 */ -#define rWORD4 r9 /* next word in s2 */ -#define rWORD5 r10 /* next word in s1 */ -#define rWORD6 r11 /* next word in s2 */ -#define rWORD7 r30 /* next word in s1 */ -#define rWORD8 r31 /* next word in s2 */ - - xor r0, rSTR2, rSTR1 - cmplwi cr6, rN, 0 - cmplwi cr1, rN, 12 - clrlwi. r0, r0, 30 - clrlwi r12, rSTR1, 30 - cmplwi cr5, r12, 0 - beq- cr6, L(zeroLength) - dcbt 0, rSTR1 - dcbt 0, rSTR2 -/* If less than 8 bytes or not aligned, use the unaligned - byte loop. */ - blt cr1, L(bytealigned) - stwu 1, -64(r1) - cfi_adjust_cfa_offset(64) - stw rWORD8, 48(r1) - stw rWORD7, 44(r1) - cfi_offset(rWORD8, (48-64)) - cfi_offset(rWORD7, (44-64)) - bne L(unaligned) -/* At this point we know both strings have the same alignment and the - compare length is at least 8 bytes. r12 contains the low order - 2 bits of rSTR1 and cr5 contains the result of the logical compare - of r12 to 0. If r12 == 0 then we are already word - aligned and can perform the word aligned loop. - - Otherwise we know the two strings have the same alignment (but not - yet word aligned). So we force the string addresses to the next lower - word boundary and special case this first word using shift left to - eliminate bits preceding the first byte. Since we want to join the - normal (word aligned) compare loop, starting at the second word, - we need to adjust the length (rN) and special case the loop - versioning for the first word. This ensures that the loop count is - correct and the first word (shifted) is in the expected register pair. */ - .align 4 -L(samealignment): - clrrwi rSTR1, rSTR1, 2 - clrrwi rSTR2, rSTR2, 2 - beq cr5, L(Waligned) - add rN, rN, r12 - slwi rWORD6, r12, 3 - srwi r0, rN, 4 /* Divide by 16 */ - andi. r12, rN, 12 /* Get the word remainder */ -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 0(rSTR1) - lwz rWORD2, 0(rSTR2) -#endif - cmplwi cr1, r12, 8 - cmplwi cr7, rN, 16 - clrlwi rN, rN, 30 - beq L(dPs4) - mtctr r0 - bgt cr1, L(dPs3) - beq cr1, L(dPs2) - -/* Remainder is 4 */ - .align 3 -L(dsP1): - slw rWORD5, rWORD1, rWORD6 - slw rWORD6, rWORD2, rWORD6 - cmplw cr5, rWORD5, rWORD6 - blt cr7, L(dP1x) -/* Do something useful in this cycle since we have to branch anyway. */ -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 4(rSTR1) - lwz rWORD2, 4(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 - b L(dP1e) -/* Remainder is 8 */ - .align 4 -L(dPs2): - slw rWORD5, rWORD1, rWORD6 - slw rWORD6, rWORD2, rWORD6 - cmplw cr6, rWORD5, rWORD6 - blt cr7, L(dP2x) -/* Do something useful in this cycle since we have to branch anyway. */ -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD7, 4(rSTR1) - lwz rWORD8, 4(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 - b L(dP2e) -/* Remainder is 12 */ - .align 4 -L(dPs3): - slw rWORD3, rWORD1, rWORD6 - slw rWORD4, rWORD2, rWORD6 - cmplw cr1, rWORD3, rWORD4 - b L(dP3e) -/* Count is a multiple of 16, remainder is 0 */ - .align 4 -L(dPs4): - mtctr r0 - slw rWORD1, rWORD1, rWORD6 - slw rWORD2, rWORD2, rWORD6 - cmplw cr7, rWORD1, rWORD2 - b L(dP4e) - -/* At this point we know both strings are word aligned and the - compare length is at least 8 bytes. */ - .align 4 -L(Waligned): - andi. r12, rN, 12 /* Get the word remainder */ - srwi r0, rN, 4 /* Divide by 16 */ - cmplwi cr1, r12, 8 - cmplwi cr7, rN, 16 - clrlwi rN, rN, 30 - beq L(dP4) - bgt cr1, L(dP3) - beq cr1, L(dP2) - -/* Remainder is 4 */ - .align 4 -L(dP1): - mtctr r0 -/* Normally we'd use rWORD7/rWORD8 here, but since we might exit early - (8-15 byte compare), we want to use only volatile registers. This - means we can avoid restoring non-volatile registers since we did not - change any on the early exit path. The key here is the non-early - exit path only cares about the condition code (cr5), not about which - register pair was used. */ -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 0(rSTR1) - lwz rWORD6, 0(rSTR2) -#endif - cmplw cr5, rWORD5, rWORD6 - blt cr7, L(dP1x) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 4(rSTR1) - lwz rWORD2, 4(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 -L(dP1e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 8(rSTR1) - lwz rWORD4, 8(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 12(rSTR1) - lwz rWORD6, 12(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5x) - bne cr7, L(dLcr7x) - -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwzu rWORD7, 16(rSTR1) - lwzu rWORD8, 16(rSTR2) -#endif - bne cr1, L(dLcr1) - cmplw cr5, rWORD7, rWORD8 - bdnz L(dLoop) - bne cr6, L(dLcr6) - lwz rWORD7, 44(r1) - lwz rWORD8, 48(r1) - .align 3 -L(dP1x): - slwi. r12, rN, 3 - bne cr5, L(dLcr5x) - subfic rN, r12, 32 /* Shift count is 32 - (rN * 8). */ - addi r1, r1, 64 - cfi_adjust_cfa_offset(-64) - bne L(d00) - li rRTN, 0 - blr - -/* Remainder is 8 */ - .align 4 - cfi_adjust_cfa_offset(64) -L(dP2): - mtctr r0 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 0(rSTR1) - lwz rWORD6, 0(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - blt cr7, L(dP2x) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD7, 4(rSTR1) - lwz rWORD8, 4(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 -L(dP2e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 8(rSTR1) - lwz rWORD2, 8(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 12(rSTR1) - lwz rWORD4, 12(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#endif - bne cr6, L(dLcr6) - bne cr5, L(dLcr5) - b L(dLoop2) -/* Again we are on a early exit path (16-23 byte compare), we want to - only use volatile registers and avoid restoring non-volatile - registers. */ - .align 4 -L(dP2x): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 4(rSTR1) - lwz rWORD4, 4(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 - slwi. r12, rN, 3 - bne cr6, L(dLcr6x) -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#endif - bne cr1, L(dLcr1x) - subfic rN, r12, 32 /* Shift count is 32 - (rN * 8). */ - addi r1, r1, 64 - cfi_adjust_cfa_offset(-64) - bne L(d00) - li rRTN, 0 - blr - -/* Remainder is 12 */ - .align 4 - cfi_adjust_cfa_offset(64) -L(dP3): - mtctr r0 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 0(rSTR1) - lwz rWORD4, 0(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 -L(dP3e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 4(rSTR1) - lwz rWORD6, 4(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - blt cr7, L(dP3x) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD7, 8(rSTR1) - lwz rWORD8, 8(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 12(rSTR1) - lwz rWORD2, 12(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#endif - bne cr1, L(dLcr1) - bne cr6, L(dLcr6) - b L(dLoop1) -/* Again we are on a early exit path (24-31 byte compare), we want to - only use volatile registers and avoid restoring non-volatile - registers. */ - .align 4 -L(dP3x): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 8(rSTR1) - lwz rWORD2, 8(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 - slwi. r12, rN, 3 - bne cr1, L(dLcr1x) -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#endif - bne cr6, L(dLcr6x) - subfic rN, r12, 32 /* Shift count is 32 - (rN * 8). */ - bne cr7, L(dLcr7x) - addi r1, r1, 64 - cfi_adjust_cfa_offset(-64) - bne L(d00) - li rRTN, 0 - blr - -/* Count is a multiple of 16, remainder is 0 */ - .align 4 - cfi_adjust_cfa_offset(64) -L(dP4): - mtctr r0 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 0(rSTR1) - lwz rWORD2, 0(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 -L(dP4e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 4(rSTR1) - lwz rWORD4, 4(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 8(rSTR1) - lwz rWORD6, 8(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwzu rWORD7, 12(rSTR1) - lwzu rWORD8, 12(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 - bne cr7, L(dLcr7) - bne cr1, L(dLcr1) - bdz- L(d24) /* Adjust CTR as we start with +4 */ -/* This is the primary loop */ - .align 4 -L(dLoop): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 4(rSTR1) - lwz rWORD2, 4(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 - bne cr6, L(dLcr6) -L(dLoop1): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 8(rSTR1) - lwz rWORD4, 8(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5) -L(dLoop2): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 12(rSTR1) - lwz rWORD6, 12(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 - bne cr7, L(dLcr7) -L(dLoop3): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwzu rWORD7, 16(rSTR1) - lwzu rWORD8, 16(rSTR2) -#endif - bne cr1, L(dLcr1) - cmplw cr7, rWORD1, rWORD2 - bdnz L(dLoop) - -L(dL4): - cmplw cr1, rWORD3, rWORD4 - bne cr6, L(dLcr6) - cmplw cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5) - cmplw cr5, rWORD7, rWORD8 -L(d44): - bne cr7, L(dLcr7) -L(d34): - bne cr1, L(dLcr1) -L(d24): - bne cr6, L(dLcr6) -L(d14): - slwi. r12, rN, 3 - bne cr5, L(dLcr5) -L(d04): - lwz rWORD7, 44(r1) - lwz rWORD8, 48(r1) - addi r1, r1, 64 - cfi_adjust_cfa_offset(-64) - subfic rN, r12, 32 /* Shift count is 32 - (rN * 8). */ - beq L(zeroLength) -/* At this point we have a remainder of 1 to 3 bytes to compare. Since - we are aligned it is safe to load the whole word, and use - shift right to eliminate bits beyond the compare length. */ -L(d00): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 4(rSTR1) - lwz rWORD2, 4(rSTR2) -#endif - srw rWORD1, rWORD1, rN - srw rWORD2, rWORD2, rN - sub rRTN, rWORD1, rWORD2 - blr - - .align 4 - cfi_adjust_cfa_offset(64) -L(dLcr7): - lwz rWORD7, 44(r1) - lwz rWORD8, 48(r1) -L(dLcr7x): - li rRTN, 1 - addi r1, r1, 64 - cfi_adjust_cfa_offset(-64) - bgtlr cr7 - li rRTN, -1 - blr - .align 4 - cfi_adjust_cfa_offset(64) -L(dLcr1): - lwz rWORD7, 44(r1) - lwz rWORD8, 48(r1) -L(dLcr1x): - li rRTN, 1 - addi r1, r1, 64 - cfi_adjust_cfa_offset(-64) - bgtlr cr1 - li rRTN, -1 - blr - .align 4 - cfi_adjust_cfa_offset(64) -L(dLcr6): - lwz rWORD7, 44(r1) - lwz rWORD8, 48(r1) -L(dLcr6x): - li rRTN, 1 - addi r1, r1, 64 - cfi_adjust_cfa_offset(-64) - bgtlr cr6 - li rRTN, -1 - blr - .align 4 - cfi_adjust_cfa_offset(64) -L(dLcr5): - lwz rWORD7, 44(r1) - lwz rWORD8, 48(r1) -L(dLcr5x): - li rRTN, 1 - addi r1, r1, 64 - cfi_adjust_cfa_offset(-64) - bgtlr cr5 - li rRTN, -1 - blr - - .align 4 -L(bytealigned): - mtctr rN - -/* We need to prime this loop. This loop is swing modulo scheduled - to avoid pipe delays. The dependent instruction latencies (load to - compare to conditional branch) is 2 to 3 cycles. In this loop each - dispatch group ends in a branch and takes 1 cycle. Effectively - the first iteration of the loop only serves to load operands and - branches based on compares are delayed until the next loop. - - So we must precondition some registers and condition codes so that - we don't exit the loop early on the first iteration. */ - - lbz rWORD1, 0(rSTR1) - lbz rWORD2, 0(rSTR2) - bdz L(b11) - cmplw cr7, rWORD1, rWORD2 - lbz rWORD3, 1(rSTR1) - lbz rWORD4, 1(rSTR2) - bdz L(b12) - cmplw cr1, rWORD3, rWORD4 - lbzu rWORD5, 2(rSTR1) - lbzu rWORD6, 2(rSTR2) - bdz L(b13) - .align 4 -L(bLoop): - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) - bne cr7, L(bLcr7) - - cmplw cr6, rWORD5, rWORD6 - bdz L(b3i) - - lbzu rWORD3, 1(rSTR1) - lbzu rWORD4, 1(rSTR2) - bne cr1, L(bLcr1) - - cmplw cr7, rWORD1, rWORD2 - bdz L(b2i) - - lbzu rWORD5, 1(rSTR1) - lbzu rWORD6, 1(rSTR2) - bne cr6, L(bLcr6) - - cmplw cr1, rWORD3, rWORD4 - bdnz L(bLoop) - -/* We speculatively loading bytes before we have tested the previous - bytes. But we must avoid overrunning the length (in the ctr) to - prevent these speculative loads from causing a segfault. In this - case the loop will exit early (before the all pending bytes are - tested. In this case we must complete the pending operations - before returning. */ -L(b1i): - bne cr7, L(bLcr7) - bne cr1, L(bLcr1) - b L(bx56) - .align 4 -L(b2i): - bne cr6, L(bLcr6) - bne cr7, L(bLcr7) - b L(bx34) - .align 4 -L(b3i): - bne cr1, L(bLcr1) - bne cr6, L(bLcr6) - b L(bx12) - .align 4 -L(bLcr7): - li rRTN, 1 - bgtlr cr7 - li rRTN, -1 - blr -L(bLcr1): - li rRTN, 1 - bgtlr cr1 - li rRTN, -1 - blr -L(bLcr6): - li rRTN, 1 - bgtlr cr6 - li rRTN, -1 - blr - -L(b13): - bne cr7, L(bx12) - bne cr1, L(bx34) -L(bx56): - sub rRTN, rWORD5, rWORD6 - blr - nop -L(b12): - bne cr7, L(bx12) -L(bx34): - sub rRTN, rWORD3, rWORD4 - blr -L(b11): -L(bx12): - sub rRTN, rWORD1, rWORD2 - blr - .align 4 -L(zeroLength): - li rRTN, 0 - blr - - .align 4 -/* At this point we know the strings have different alignment and the - compare length is at least 8 bytes. r12 contains the low order - 2 bits of rSTR1 and cr5 contains the result of the logical compare - of r12 to 0. If r12 == 0 then rStr1 is word aligned and can - perform the Wunaligned loop. - - Otherwise we know that rSTR1 is not already word aligned yet. - So we can force the string addresses to the next lower word - boundary and special case this first word using shift left to - eliminate bits preceding the first byte. Since we want to join the - normal (Wualigned) compare loop, starting at the second word, - we need to adjust the length (rN) and special case the loop - versioning for the first W. This ensures that the loop count is - correct and the first W (shifted) is in the expected resister pair. */ -#define rSHL r29 /* Unaligned shift left count. */ -#define rSHR r28 /* Unaligned shift right count. */ -#define rWORD8_SHIFT r27 /* Left rotation temp for rWORD2. */ -#define rWORD2_SHIFT r26 /* Left rotation temp for rWORD4. */ -#define rWORD4_SHIFT r25 /* Left rotation temp for rWORD6. */ -#define rWORD6_SHIFT r24 /* Left rotation temp for rWORD8. */ - cfi_adjust_cfa_offset(64) -L(unaligned): - stw rSHL, 40(r1) - cfi_offset(rSHL, (40-64)) - clrlwi rSHL, rSTR2, 30 - stw rSHR, 36(r1) - cfi_offset(rSHR, (36-64)) - beq cr5, L(Wunaligned) - stw rWORD8_SHIFT, 32(r1) - cfi_offset(rWORD8_SHIFT, (32-64)) -/* Adjust the logical start of rSTR2 to compensate for the extra bits - in the 1st rSTR1 W. */ - sub rWORD8_SHIFT, rSTR2, r12 -/* But do not attempt to address the W before that W that contains - the actual start of rSTR2. */ - clrrwi rSTR2, rSTR2, 2 - stw rWORD2_SHIFT, 28(r1) -/* Compute the left/right shift counts for the unaligned rSTR2, - compensating for the logical (W aligned) start of rSTR1. */ - clrlwi rSHL, rWORD8_SHIFT, 30 - clrrwi rSTR1, rSTR1, 2 - stw rWORD4_SHIFT, 24(r1) - slwi rSHL, rSHL, 3 - cmplw cr5, rWORD8_SHIFT, rSTR2 - add rN, rN, r12 - slwi rWORD6, r12, 3 - stw rWORD6_SHIFT, 20(r1) - cfi_offset(rWORD2_SHIFT, (28-64)) - cfi_offset(rWORD4_SHIFT, (24-64)) - cfi_offset(rWORD6_SHIFT, (20-64)) - subfic rSHR, rSHL, 32 - srwi r0, rN, 4 /* Divide by 16 */ - andi. r12, rN, 12 /* Get the W remainder */ -/* We normally need to load 2 Ws to start the unaligned rSTR2, but in - this special case those bits may be discarded anyway. Also we - must avoid loading a W where none of the bits are part of rSTR2 as - this may cross a page boundary and cause a page fault. */ - li rWORD8, 0 - blt cr5, L(dus0) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD8, 0, rSTR2 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD8, 0(rSTR2) - addi rSTR2, rSTR2, 4 -#endif - slw rWORD8, rWORD8, rSHL - -L(dus0): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 0(rSTR1) - lwz rWORD2, 0(rSTR2) -#endif - cmplwi cr1, r12, 8 - cmplwi cr7, rN, 16 - srw r12, rWORD2, rSHR - clrlwi rN, rN, 30 - beq L(duPs4) - mtctr r0 - or rWORD8, r12, rWORD8 - bgt cr1, L(duPs3) - beq cr1, L(duPs2) - -/* Remainder is 4 */ - .align 4 -L(dusP1): - slw rWORD8_SHIFT, rWORD2, rSHL - slw rWORD7, rWORD1, rWORD6 - slw rWORD8, rWORD8, rWORD6 - bge cr7, L(duP1e) -/* At this point we exit early with the first word compare - complete and remainder of 0 to 3 bytes. See L(du14) for details on - how we handle the remaining bytes. */ - cmplw cr5, rWORD7, rWORD8 - slwi. rN, rN, 3 - bne cr5, L(duLcr5) - cmplw cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD2, 4(rSTR2) -#endif - srw r0, rWORD2, rSHR - b L(dutrim) -/* Remainder is 8 */ - .align 4 -L(duPs2): - slw rWORD6_SHIFT, rWORD2, rSHL - slw rWORD5, rWORD1, rWORD6 - slw rWORD6, rWORD8, rWORD6 - b L(duP2e) -/* Remainder is 12 */ - .align 4 -L(duPs3): - slw rWORD4_SHIFT, rWORD2, rSHL - slw rWORD3, rWORD1, rWORD6 - slw rWORD4, rWORD8, rWORD6 - b L(duP3e) -/* Count is a multiple of 16, remainder is 0 */ - .align 4 -L(duPs4): - mtctr r0 - or rWORD8, r12, rWORD8 - slw rWORD2_SHIFT, rWORD2, rSHL - slw rWORD1, rWORD1, rWORD6 - slw rWORD2, rWORD8, rWORD6 - b L(duP4e) - -/* At this point we know rSTR1 is word aligned and the - compare length is at least 8 bytes. */ - .align 4 -L(Wunaligned): - stw rWORD8_SHIFT, 32(r1) - clrrwi rSTR2, rSTR2, 2 - stw rWORD2_SHIFT, 28(r1) - srwi r0, rN, 4 /* Divide by 16 */ - stw rWORD4_SHIFT, 24(r1) - andi. r12, rN, 12 /* Get the W remainder */ - stw rWORD6_SHIFT, 20(r1) - cfi_offset(rWORD8_SHIFT, (32-64)) - cfi_offset(rWORD2_SHIFT, (28-64)) - cfi_offset(rWORD4_SHIFT, (24-64)) - cfi_offset(rWORD6_SHIFT, (20-64)) - slwi rSHL, rSHL, 3 -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD6, 0, rSTR2 - addi rSTR2, rSTR2, 4 - lwbrx rWORD8, 0, rSTR2 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD6, 0(rSTR2) - lwzu rWORD8, 4(rSTR2) -#endif - cmplwi cr1, r12, 8 - cmplwi cr7, rN, 16 - clrlwi rN, rN, 30 - subfic rSHR, rSHL, 32 - slw rWORD6_SHIFT, rWORD6, rSHL - beq L(duP4) - mtctr r0 - bgt cr1, L(duP3) - beq cr1, L(duP2) - -/* Remainder is 4 */ - .align 4 -L(duP1): - srw r12, rWORD8, rSHR -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - addi rSTR1, rSTR1, 4 -#else - lwz rWORD7, 0(rSTR1) -#endif - slw rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP1x) -L(duP1e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 4(rSTR1) - lwz rWORD2, 4(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 - srw r0, rWORD2, rSHR - slw rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 8(rSTR1) - lwz rWORD4, 8(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 - srw r12, rWORD4, rSHR - slw rWORD4_SHIFT, rWORD4, rSHL - bne cr5, L(duLcr5) - or rWORD4, r12, rWORD2_SHIFT -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 12(rSTR1) - lwz rWORD6, 12(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 - srw r0, rWORD6, rSHR - slw rWORD6_SHIFT, rWORD6, rSHL - bne cr7, L(duLcr7) - or rWORD6, r0, rWORD4_SHIFT - cmplw cr6, rWORD5, rWORD6 - b L(duLoop3) - .align 4 -/* At this point we exit early with the first word compare - complete and remainder of 0 to 3 bytes. See L(du14) for details on - how we handle the remaining bytes. */ -L(duP1x): - cmplw cr5, rWORD7, rWORD8 - slwi. rN, rN, 3 - bne cr5, L(duLcr5) - cmplw cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD2, 8(rSTR2) -#endif - srw r0, rWORD2, rSHR - b L(dutrim) -/* Remainder is 8 */ - .align 4 -L(duP2): - srw r0, rWORD8, rSHR -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - addi rSTR1, rSTR1, 4 -#else - lwz rWORD5, 0(rSTR1) -#endif - or rWORD6, r0, rWORD6_SHIFT - slw rWORD6_SHIFT, rWORD8, rSHL -L(duP2e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD7, 4(rSTR1) - lwz rWORD8, 4(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - srw r12, rWORD8, rSHR - slw rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP2x) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 8(rSTR1) - lwz rWORD2, 8(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - srw r0, rWORD2, rSHR - slw rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 12(rSTR1) - lwz rWORD4, 12(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 - bne cr5, L(duLcr5) - srw r12, rWORD4, rSHR - slw rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#endif - cmplw cr1, rWORD3, rWORD4 - b L(duLoop2) - .align 4 -L(duP2x): - cmplw cr5, rWORD7, rWORD8 -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#endif - bne cr6, L(duLcr6) - slwi. rN, rN, 3 - bne cr5, L(duLcr5) - cmplw cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD2, 4(rSTR2) -#endif - srw r0, rWORD2, rSHR - b L(dutrim) - -/* Remainder is 12 */ - .align 4 -L(duP3): - srw r12, rWORD8, rSHR -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - addi rSTR1, rSTR1, 4 -#else - lwz rWORD3, 0(rSTR1) -#endif - slw rWORD4_SHIFT, rWORD8, rSHL - or rWORD4, r12, rWORD6_SHIFT -L(duP3e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 4(rSTR1) - lwz rWORD6, 4(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 - srw r0, rWORD6, rSHR - slw rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD7, 8(rSTR1) - lwz rWORD8, 8(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - bne cr1, L(duLcr1) - srw r12, rWORD8, rSHR - slw rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP3x) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 12(rSTR1) - lwz rWORD2, 12(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - srw r0, rWORD2, rSHR - slw rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#endif - cmplw cr7, rWORD1, rWORD2 - b L(duLoop1) - .align 4 -L(duP3x): -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#endif -#if 0 -/* Huh? We've already branched on cr1! */ - bne cr1, L(duLcr1) -#endif - cmplw cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - slwi. rN, rN, 3 - bne cr5, L(duLcr5) - cmplw cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD2, 4(rSTR2) -#endif - srw r0, rWORD2, rSHR - b L(dutrim) - -/* Count is a multiple of 16, remainder is 0 */ - .align 4 -L(duP4): - mtctr r0 - srw r0, rWORD8, rSHR -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - addi rSTR1, rSTR1, 4 -#else - lwz rWORD1, 0(rSTR1) -#endif - slw rWORD2_SHIFT, rWORD8, rSHL - or rWORD2, r0, rWORD6_SHIFT -L(duP4e): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 4(rSTR1) - lwz rWORD4, 4(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 - srw r12, rWORD4, rSHR - slw rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 8(rSTR1) - lwz rWORD6, 8(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 - bne cr7, L(duLcr7) - srw r0, rWORD6, rSHR - slw rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwzu rWORD7, 12(rSTR1) - lwzu rWORD8, 12(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - bne cr1, L(duLcr1) - srw r12, rWORD8, rSHR - slw rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - cmplw cr5, rWORD7, rWORD8 - bdz L(du24) /* Adjust CTR as we start with +4 */ -/* This is the primary loop */ - .align 4 -L(duLoop): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 - lwbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD1, 4(rSTR1) - lwz rWORD2, 4(rSTR2) -#endif - cmplw cr1, rWORD3, rWORD4 - bne cr6, L(duLcr6) - srw r0, rWORD2, rSHR - slw rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT -L(duLoop1): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD3, 0, rSTR1 - lwbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD3, 8(rSTR1) - lwz rWORD4, 8(rSTR2) -#endif - cmplw cr6, rWORD5, rWORD6 - bne cr5, L(duLcr5) - srw r12, rWORD4, rSHR - slw rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT -L(duLoop2): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD5, 0, rSTR1 - lwbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD5, 12(rSTR1) - lwz rWORD6, 12(rSTR2) -#endif - cmplw cr5, rWORD7, rWORD8 - bne cr7, L(duLcr7) - srw r0, rWORD6, rSHR - slw rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT -L(duLoop3): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD7, 0, rSTR1 - lwbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 -#else - lwzu rWORD7, 16(rSTR1) - lwzu rWORD8, 16(rSTR2) -#endif - cmplw cr7, rWORD1, rWORD2 - bne cr1, L(duLcr1) - srw r12, rWORD8, rSHR - slw rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - bdnz L(duLoop) - -L(duL4): -#if 0 -/* Huh? We've already branched on cr1! */ - bne cr1, L(duLcr1) -#endif - cmplw cr1, rWORD3, rWORD4 - bne cr6, L(duLcr6) - cmplw cr6, rWORD5, rWORD6 - bne cr5, L(duLcr5) - cmplw cr5, rWORD7, rWORD8 -L(du44): - bne cr7, L(duLcr7) -L(du34): - bne cr1, L(duLcr1) -L(du24): - bne cr6, L(duLcr6) -L(du14): - slwi. rN, rN, 3 - bne cr5, L(duLcr5) -/* At this point we have a remainder of 1 to 3 bytes to compare. We use - shift right to eliminate bits beyond the compare length. - This allows the use of word subtract to compute the final result. - - However it may not be safe to load rWORD2 which may be beyond the - string length. So we compare the bit length of the remainder to - the right shift count (rSHR). If the bit count is less than or equal - we do not need to load rWORD2 (all significant bits are already in - rWORD8_SHIFT). */ - cmplw cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 4 -#else - lwz rWORD2, 4(rSTR2) -#endif - srw r0, rWORD2, rSHR - .align 4 -L(dutrim): -#ifdef __LITTLE_ENDIAN__ - lwbrx rWORD1, 0, rSTR1 -#else - lwz rWORD1, 4(rSTR1) -#endif - lwz rWORD8, 48(r1) - subfic rN, rN, 32 /* Shift count is 32 - (rN * 8). */ - or rWORD2, r0, rWORD8_SHIFT - lwz rWORD7, 44(r1) - lwz rSHL, 40(r1) - srw rWORD1, rWORD1, rN - srw rWORD2, rWORD2, rN - lwz rSHR, 36(r1) - lwz rWORD8_SHIFT, 32(r1) - sub rRTN, rWORD1, rWORD2 - b L(dureturn26) - .align 4 -L(duLcr7): - lwz rWORD8, 48(r1) - lwz rWORD7, 44(r1) - li rRTN, 1 - bgt cr7, L(dureturn29) - lwz rSHL, 40(r1) - lwz rSHR, 36(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr1): - lwz rWORD8, 48(r1) - lwz rWORD7, 44(r1) - li rRTN, 1 - bgt cr1, L(dureturn29) - lwz rSHL, 40(r1) - lwz rSHR, 36(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr6): - lwz rWORD8, 48(r1) - lwz rWORD7, 44(r1) - li rRTN, 1 - bgt cr6, L(dureturn29) - lwz rSHL, 40(r1) - lwz rSHR, 36(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr5): - lwz rWORD8, 48(r1) - lwz rWORD7, 44(r1) - li rRTN, 1 - bgt cr5, L(dureturn29) - lwz rSHL, 40(r1) - lwz rSHR, 36(r1) - li rRTN, -1 - b L(dureturn27) - .align 3 -L(duZeroReturn): - li rRTN, 0 - .align 4 -L(dureturn): - lwz rWORD8, 48(r1) - lwz rWORD7, 44(r1) -L(dureturn29): - lwz rSHL, 40(r1) - lwz rSHR, 36(r1) -L(dureturn27): - lwz rWORD8_SHIFT, 32(r1) -L(dureturn26): - lwz rWORD2_SHIFT, 28(r1) -L(dureturn25): - lwz rWORD4_SHIFT, 24(r1) - lwz rWORD6_SHIFT, 20(r1) - addi r1, r1, 64 - cfi_adjust_cfa_offset(-64) - blr -END (memcmp) - -libc_hidden_builtin_def (memcmp) -weak_alias (memcmp, bcmp) diff --git a/sysdeps/powerpc/powerpc32/power7/memcpy.S b/sysdeps/powerpc/powerpc32/power7/memcpy.S deleted file mode 100644 index 8e33c1d733..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/memcpy.S +++ /dev/null @@ -1,538 +0,0 @@ -/* Optimized memcpy implementation for PowerPC32/POWER7. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); - Returns 'dst'. */ - - .machine power7 -EALIGN (memcpy, 5, 0) - CALL_MCOUNT - - stwu 1,-32(1) - cfi_adjust_cfa_offset(32) - stw 30,20(1) - cfi_offset(30,(20-32)) - stw 31,24(1) - mr 30,3 - cmplwi cr1,5,31 - neg 0,3 - cfi_offset(31,-8) - ble cr1, L(copy_LT_32) /* If move < 32 bytes use short move - code. */ - - andi. 11,3,15 /* Check alignment of DST. */ - clrlwi 10,4,28 /* Check alignment of SRC. */ - cmplw cr6,10,11 /* SRC and DST alignments match? */ - mr 12,4 - mr 31,5 - bne cr6,L(copy_GE_32_unaligned) - - srwi 9,5,3 /* Number of full quadwords remaining. */ - - beq L(copy_GE_32_aligned_cont) - - clrlwi 0,0,29 - mtcrf 0x01,0 - subf 31,0,5 - - /* Get the SRC aligned to 8 bytes. */ - -1: bf 31,2f - lbz 6,0(12) - addi 12,12,1 - stb 6,0(3) - addi 3,3,1 -2: bf 30,4f - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -4: bf 29,0f - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -0: - clrlwi 10,12,29 /* Check alignment of SRC again. */ - srwi 9,31,3 /* Number of full doublewords remaining. */ - -L(copy_GE_32_aligned_cont): - - clrlwi 11,31,29 - mtcrf 0x01,9 - - srwi 8,31,5 - cmplwi cr1,9,4 - cmplwi cr6,11,0 - mr 11,12 - - /* Copy 1~3 doublewords so the main loop starts - at a multiple of 32 bytes. */ - - bf 30,1f - lfd 6,0(12) - lfd 7,8(12) - addi 11,12,16 - mtctr 8 - stfd 6,0(3) - stfd 7,8(3) - addi 10,3,16 - bf 31,4f - lfd 0,16(12) - stfd 0,16(3) - blt cr1,3f - addi 11,12,24 - addi 10,3,24 - b 4f - - .align 4 -1: /* Copy 1 doubleword and set the counter. */ - mr 10,3 - mtctr 8 - bf 31,4f - lfd 6,0(12) - addi 11,12,8 - stfd 6,0(3) - addi 10,3,8 - -L(aligned_copy): - /* Main aligned copy loop. Copies up to 128-bytes at a time. */ - .align 4 -4: - /* check for any 32-byte or 64-byte lumps that are outside of a - nice 128-byte range. R8 contains the number of 32-byte - lumps, so drop this into the CR, and use the SO/EQ bits to help - handle the 32- or 64- byte lumps. Then handle the rest with an - unrolled 128-bytes-at-a-time copy loop. */ - mtocrf 1,8 - li 6,16 # 16() index - li 7,32 # 32() index - li 8,48 # 48() index - -L(aligned_32byte): - /* if the SO bit (indicating a 32-byte lump) is not set, move along. */ - bns cr7,L(aligned_64byte) - lxvd2x 6,0,11 - lxvd2x 7,11,6 - addi 11,11,32 - stxvd2x 6,0,10 - stxvd2x 7,10,6 - addi 10,10,32 - -L(aligned_64byte): - /* if the EQ bit (indicating a 64-byte lump) is not set, move along. */ - bne cr7,L(aligned_128setup) - lxvd2x 6,0,11 - lxvd2x 7,11,6 - lxvd2x 8,11,7 - lxvd2x 9,11,8 - addi 11,11,64 - stxvd2x 6,0,10 - stxvd2x 7,10,6 - stxvd2x 8,10,7 - stxvd2x 9,10,8 - addi 10,10,64 - -L(aligned_128setup): - /* Set up for the 128-byte at a time copy loop. */ - srwi 8,31,7 - cmpwi 8,0 # Any 4x lumps left? - beq 3f # if not, move along. - lxvd2x 6,0,11 - lxvd2x 7,11,6 - mtctr 8 # otherwise, load the ctr and begin. - li 8,48 # 48() index - b L(aligned_128loop) - -L(aligned_128head): - /* for the 2nd + iteration of this loop. */ - lxvd2x 6,0,11 - lxvd2x 7,11,6 -L(aligned_128loop): - lxvd2x 8,11,7 - lxvd2x 9,11,8 - stxvd2x 6,0,10 - addi 11,11,64 - stxvd2x 7,10,6 - stxvd2x 8,10,7 - stxvd2x 9,10,8 - lxvd2x 6,0,11 - lxvd2x 7,11,6 - addi 10,10,64 - lxvd2x 8,11,7 - lxvd2x 9,11,8 - addi 11,11,64 - stxvd2x 6,0,10 - stxvd2x 7,10,6 - stxvd2x 8,10,7 - stxvd2x 9,10,8 - addi 10,10,64 - bdnz L(aligned_128head) - -3: - /* Check for tail bytes. */ - clrrwi 0,31,3 - mtcrf 0x01,31 - beq cr6,0f - -.L9: - add 3,3,0 - add 12,12,0 - - /* At this point we have a tail of 0-7 bytes and we know that the - destination is doubleword-aligned. */ -4: /* Copy 4 bytes. */ - bf 29,2f - - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: /* Copy 2 bytes. */ - bf 30,1f - - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -1: /* Copy 1 byte. */ - bf 31,0f - - lbz 6,0(12) - stb 6,0(3) -0: /* Return original DST pointer. */ - mr 3,30 - lwz 30,20(1) - lwz 31,24(1) - addi 1,1,32 - blr - - /* Handle copies of 0~31 bytes. */ - .align 4 -L(copy_LT_32): - cmplwi cr6,5,8 - mr 12,4 - mtcrf 0x01,5 - ble cr6,L(copy_LE_8) - - /* At least 9 bytes to go. */ - neg 8,4 - clrrwi 11,4,2 - andi. 0,8,3 - cmplwi cr1,5,16 - mr 10,5 - beq L(copy_LT_32_aligned) - - /* Force 4-bytes alignment for SRC. */ - mtocrf 0x01,0 - subf 10,0,5 -2: bf 30,1f - - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -1: bf 31,L(end_4bytes_alignment) - - lbz 6,0(12) - addi 12,12,1 - stb 6,0(3) - addi 3,3,1 - - .align 4 -L(end_4bytes_alignment): - cmplwi cr1,10,16 - mtcrf 0x01,10 - -L(copy_LT_32_aligned): - /* At least 6 bytes to go, and SRC is word-aligned. */ - blt cr1,8f - - /* Copy 16 bytes. */ - lwz 6,0(12) - lwz 7,4(12) - stw 6,0(3) - lwz 8,8(12) - stw 7,4(3) - lwz 6,12(12) - addi 12,12,16 - stw 8,8(3) - stw 6,12(3) - addi 3,3,16 -8: /* Copy 8 bytes. */ - bf 28,4f - - lwz 6,0(12) - lwz 7,4(12) - addi 12,12,8 - stw 6,0(3) - stw 7,4(3) - addi 3,3,8 -4: /* Copy 4 bytes. */ - bf 29,2f - - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: /* Copy 2-3 bytes. */ - bf 30,1f - - lhz 6,0(12) - sth 6,0(3) - bf 31,0f - lbz 7,2(12) - stb 7,2(3) - - /* Return original DST pointer. */ - mr 3,30 - lwz 30,20(1) - addi 1,1,32 - blr - - .align 4 -1: /* Copy 1 byte. */ - bf 31,0f - - lbz 6,0(12) - stb 6,0(3) -0: /* Return original DST pointer. */ - mr 3,30 - lwz 30,20(1) - addi 1,1,32 - blr - - /* Handles copies of 0~8 bytes. */ - .align 4 -L(copy_LE_8): - bne cr6,4f - - /* Though we could've used lfd/stfd here, they are still - slow for unaligned cases. */ - - lwz 6,0(4) - lwz 7,4(4) - stw 6,0(3) - stw 7,4(3) - - /* Return original DST pointer. */ - mr 3,30 - lwz 30,20(1) - addi 1,1,32 - blr - - .align 4 -4: /* Copies 4~7 bytes. */ - bf 29,2b - - lwz 6,0(4) - stw 6,0(3) - bf 30,5f - lhz 7,4(4) - sth 7,4(3) - bf 31,0f - lbz 8,6(4) - stb 8,6(3) - - /* Return original DST pointer. */ - mr 3,30 - lwz 30,20(1) - addi 1,1,32 - blr - - .align 4 -5: /* Copy 1 byte. */ - bf 31,0f - - lbz 6,4(4) - stb 6,4(3) - -0: /* Return original DST pointer. */ - mr 3,30 - lwz 30,20(1) - addi 1,1,32 - blr - - /* Handle copies of 32+ bytes where DST is aligned (to quadword) but - SRC is not. Use aligned quadword loads from SRC, shifted to realign - the data, allowing for aligned DST stores. */ - .align 4 -L(copy_GE_32_unaligned): - andi. 11,3,15 /* Check alignment of DST. */ - clrlwi 0,0,28 /* Number of bytes until the 1st - quadword of DST. */ - srwi 9,5,4 /* Number of full quadwords remaining. */ - - beq L(copy_GE_32_unaligned_cont) - - /* DST is not quadword aligned, get it aligned. */ - - mtcrf 0x01,0 - subf 31,0,5 - - /* Vector instructions work best when proper alignment (16-bytes) - is present. Move 0~15 bytes as needed to get DST quadword-aligned. */ -1: /* Copy 1 byte. */ - bf 31,2f - - lbz 6,0(12) - addi 12,12,1 - stb 6,0(3) - addi 3,3,1 -2: /* Copy 2 bytes. */ - bf 30,4f - - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -4: /* Copy 4 bytes. */ - bf 29,8f - - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -8: /* Copy 8 bytes. */ - bf 28,0f - - lfd 6,0(12) - addi 12,12,8 - stfd 6,0(3) - addi 3,3,8 -0: - clrlwi 10,12,28 /* Check alignment of SRC. */ - srwi 9,31,4 /* Number of full quadwords remaining. */ - - /* The proper alignment is present, it is OK to copy the bytes now. */ -L(copy_GE_32_unaligned_cont): - - /* Setup two indexes to speed up the indexed vector operations. */ - clrlwi 11,31,28 - li 6,16 /* Index for 16-bytes offsets. */ - li 7,32 /* Index for 32-bytes offsets. */ - cmplwi cr1,11,0 - srwi 8,31,5 /* Setup the loop counter. */ - mr 10,3 - mr 11,12 - mtcrf 0x01,9 - cmplwi cr6,9,1 -#ifdef __LITTLE_ENDIAN__ - lvsr 5,0,12 -#else - lvsl 5,0,12 -#endif - lvx 3,0,12 - bf 31,L(setup_unaligned_loop) - - /* Copy another 16 bytes to align to 32-bytes due to the loop . */ - lvx 4,12,6 -#ifdef __LITTLE_ENDIAN__ - vperm 6,4,3,5 -#else - vperm 6,3,4,5 -#endif - addi 11,12,16 - addi 10,3,16 - stvx 6,0,3 - vor 3,4,4 - -L(setup_unaligned_loop): - mtctr 8 - ble cr6,L(end_unaligned_loop) - - /* Copy 32 bytes at a time using vector instructions. */ - .align 4 -L(unaligned_loop): - - /* Note: vr6/vr10 may contain data that was already copied, - but in order to get proper alignment, we may have to copy - some portions again. This is faster than having unaligned - vector instructions though. */ - - lvx 4,11,6 /* vr4 = r11+16. */ -#ifdef __LITTLE_ENDIAN__ - vperm 6,4,3,5 -#else - vperm 6,3,4,5 -#endif - lvx 3,11,7 /* vr3 = r11+32. */ -#ifdef __LITTLE_ENDIAN__ - vperm 10,3,4,5 -#else - vperm 10,4,3,5 -#endif - addi 11,11,32 - stvx 6,0,10 - stvx 10,10,6 - addi 10,10,32 - - bdnz L(unaligned_loop) - - .align 4 -L(end_unaligned_loop): - - /* Check for tail bytes. */ - clrrwi 0,31,4 - mtcrf 0x01,31 - beq cr1,0f - - add 3,3,0 - add 12,12,0 - - /* We have 1~15 tail bytes to copy, and DST is quadword aligned. */ -8: /* Copy 8 bytes. */ - bf 28,4f - - lwz 6,0(12) - lwz 7,4(12) - addi 12,12,8 - stw 6,0(3) - stw 7,4(3) - addi 3,3,8 -4: /* Copy 4 bytes. */ - bf 29,2f - - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: /* Copy 2~3 bytes. */ - bf 30,1f - - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -1: /* Copy 1 byte. */ - bf 31,0f - - lbz 6,0(12) - stb 6,0(3) -0: /* Return original DST pointer. */ - mr 3,30 - lwz 30,20(1) - lwz 31,24(1) - addi 1,1,32 - blr - -END (memcpy) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/powerpc/powerpc32/power7/mempcpy.S b/sysdeps/powerpc/powerpc32/power7/mempcpy.S deleted file mode 100644 index 1682fbcd2a..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/mempcpy.S +++ /dev/null @@ -1,482 +0,0 @@ -/* Optimized mempcpy implementation for POWER7. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* __ptr_t [r3] __mempcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); - Returns 'dst' + 'len'. */ - - .machine power7 -EALIGN (__mempcpy, 5, 0) - CALL_MCOUNT - - stwu 1,-32(1) - cfi_adjust_cfa_offset(32) - stw 30,20(1) - cfi_offset(30,(20-32)) - stw 31,24(1) - mr 30,3 - cmplwi cr1,5,31 - neg 0,3 - cfi_offset(31,-8) - ble cr1,L(copy_LT_32) /* If move < 32 bytes use short move - code. */ - - andi. 11,3,7 /* Check alignment of DST. */ - clrlwi 10,4,29 /* Check alignment of SRC. */ - cmplw cr6,10,11 /* SRC and DST alignments match? */ - mr 12,4 - mr 31,5 - bne cr6,L(copy_GE_32_unaligned) - - srwi 9,5,3 /* Number of full quadwords remaining. */ - - beq L(copy_GE_32_aligned_cont) - - clrlwi 0,0,29 - mtcrf 0x01,0 - subf 31,0,5 - - /* Get the SRC aligned to 8 bytes. */ - -1: bf 31,2f - lbz 6,0(12) - addi 12,12,1 - stb 6,0(3) - addi 3,3,1 -2: bf 30,4f - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -4: bf 29,0f - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -0: - clrlwi 10,12,29 /* Check alignment of SRC again. */ - srwi 9,31,3 /* Number of full doublewords remaining. */ - -L(copy_GE_32_aligned_cont): - - clrlwi 11,31,29 - mtcrf 0x01,9 - - srwi 8,31,5 - cmplwi cr1,9,4 - cmplwi cr6,11,0 - mr 11,12 - - /* Copy 1~3 doublewords so the main loop starts - at a multiple of 32 bytes. */ - - bf 30,1f - lfd 6,0(12) - lfd 7,8(12) - addi 11,12,16 - mtctr 8 - stfd 6,0(3) - stfd 7,8(3) - addi 10,3,16 - bf 31,4f - lfd 0,16(12) - stfd 0,16(3) - blt cr1,3f - addi 11,12,24 - addi 10,3,24 - b 4f - - .align 4 -1: /* Copy 1 doubleword and set the counter. */ - mr 10,3 - mtctr 8 - bf 31,4f - lfd 6,0(12) - addi 11,12,8 - stfd 6,0(3) - addi 10,3,8 - - .align 4 -4: /* Main aligned copy loop. Copies 32-bytes at a time. */ - lfd 6,0(11) - lfd 7,8(11) - lfd 8,16(11) - lfd 0,24(11) - addi 11,11,32 - - stfd 6,0(10) - stfd 7,8(10) - stfd 8,16(10) - stfd 0,24(10) - addi 10,10,32 - bdnz 4b -3: - - /* Check for tail bytes. */ - - clrrwi 0,31,3 - mtcrf 0x01,31 - beq cr6,0f - -.L9: - add 3,3,0 - add 12,12,0 - - /* At this point we have a tail of 0-7 bytes and we know that the - destination is doubleword-aligned. */ -4: /* Copy 4 bytes. */ - bf 29,2f - - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: /* Copy 2 bytes. */ - bf 30,1f - - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -1: /* Copy 1 byte. */ - bf 31,0f - - lbz 6,0(12) - stb 6,0(3) -0: /* Return DST + LEN pointer. */ - add 3,30,5 - lwz 30,20(1) - lwz 31,24(1) - addi 1,1,32 - blr - - /* Handle copies of 0~31 bytes. */ - .align 4 -L(copy_LT_32): - cmplwi cr6,5,8 - mr 12,4 - mtcrf 0x01,5 - ble cr6,L(copy_LE_8) - - /* At least 9 bytes to go. */ - neg 8,4 - clrrwi 11,4,2 - andi. 0,8,3 - cmplwi cr1,5,16 - mr 10,5 - beq L(copy_LT_32_aligned) - - /* Force 4-bytes alignment for SRC. */ - mtocrf 0x01,0 - subf 10,0,5 -2: bf 30,1f - - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -1: bf 31,L(end_4bytes_alignment) - - lbz 6,0(12) - addi 12,12,1 - stb 6,0(3) - addi 3,3,1 - - .align 4 -L(end_4bytes_alignment): - cmplwi cr1,10,16 - mtcrf 0x01,10 - -L(copy_LT_32_aligned): - /* At least 6 bytes to go, and SRC is word-aligned. */ - blt cr1,8f - - /* Copy 16 bytes. */ - lwz 6,0(12) - lwz 7,4(12) - stw 6,0(3) - lwz 8,8(12) - stw 7,4(3) - lwz 6,12(12) - addi 12,12,16 - stw 8,8(3) - stw 6,12(3) - addi 3,3,16 -8: /* Copy 8 bytes. */ - bf 28,4f - - lwz 6,0(12) - lwz 7,4(12) - addi 12,12,8 - stw 6,0(3) - stw 7,4(3) - addi 3,3,8 -4: /* Copy 4 bytes. */ - bf 29,2f - - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: /* Copy 2-3 bytes. */ - bf 30,1f - - lhz 6,0(12) - sth 6,0(3) - bf 31,0f - lbz 7,2(12) - stb 7,2(3) - - /* Return DST + LEN pointer. */ - add 3,30,5 - lwz 30,20(1) - addi 1,1,32 - blr - - .align 4 -1: /* Copy 1 byte. */ - bf 31,0f - - lbz 6,0(12) - stb 6,0(3) -0: /* Return DST + LEN pointer. */ - add 3,30,5 - lwz 30,20(1) - addi 1,1,32 - blr - - /* Handles copies of 0~8 bytes. */ - .align 4 -L(copy_LE_8): - bne cr6,4f - - /* Though we could've used lfd/stfd here, they are still - slow for unaligned cases. */ - - lwz 6,0(4) - lwz 7,4(4) - stw 6,0(3) - stw 7,4(3) - - /* Return DST + LEN pointer. */ - add 3,30,5 - lwz 30,20(1) - addi 1,1,32 - blr - - .align 4 -4: /* Copies 4~7 bytes. */ - bf 29,2b - - lwz 6,0(4) - stw 6,0(3) - bf 30,5f - lhz 7,4(4) - sth 7,4(3) - bf 31,0f - lbz 8,6(4) - stb 8,6(3) - - /* Return DST + LEN pointer. */ - add 3,30,5 - lwz 30,20(1) - addi 1,1,32 - blr - - .align 4 -5: /* Copy 1 byte. */ - bf 31,0f - - lbz 6,4(4) - stb 6,4(3) - -0: /* Return DST + LEN pointer. */ - add 3,30,5 - lwz 30,20(1) - addi 1,1,32 - blr - - /* Handle copies of 32+ bytes where DST is aligned (to quadword) but - SRC is not. Use aligned quadword loads from SRC, shifted to realign - the data, allowing for aligned DST stores. */ - .align 4 -L(copy_GE_32_unaligned): - andi. 11,3,15 /* Check alignment of DST. */ - clrlwi 0,0,28 /* Number of bytes until the 1st - quadword of DST. */ - srwi 9,5,4 /* Number of full quadwords remaining. */ - - beq L(copy_GE_32_unaligned_cont) - - /* DST is not quadword aligned, get it aligned. */ - - mtcrf 0x01,0 - subf 31,0,5 - - /* Vector instructions work best when proper alignment (16-bytes) - is present. Move 0~15 bytes as needed to get DST quadword-aligned. */ -1: /* Copy 1 byte. */ - bf 31,2f - - lbz 6,0(12) - addi 12,12,1 - stb 6,0(3) - addi 3,3,1 -2: /* Copy 2 bytes. */ - bf 30,4f - - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -4: /* Copy 4 bytes. */ - bf 29,8f - - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -8: /* Copy 8 bytes. */ - bf 28,0f - - lfd 6,0(12) - addi 12,12,8 - stfd 6,0(3) - addi 3,3,8 -0: - clrlwi 10,12,28 /* Check alignment of SRC. */ - srwi 9,31,4 /* Number of full quadwords remaining. */ - - /* The proper alignment is present, it is OK to copy the bytes now. */ -L(copy_GE_32_unaligned_cont): - - /* Setup two indexes to speed up the indexed vector operations. */ - clrlwi 11,31,28 - li 6,16 /* Index for 16-bytes offsets. */ - li 7,32 /* Index for 32-bytes offsets. */ - cmplwi cr1,11,0 - srwi 8,31,5 /* Setup the loop counter. */ - mr 10,3 - mr 11,12 - mtcrf 0x01,9 - cmplwi cr6,9,1 -#ifdef __LITTLE_ENDIAN__ - lvsr 5,0,12 -#else - lvsl 5,0,12 -#endif - lvx 3,0,12 - bf 31,L(setup_unaligned_loop) - - /* Copy another 16 bytes to align to 32-bytes due to the loop . */ - lvx 4,12,6 -#ifdef __LITTLE_ENDIAN__ - vperm 6,4,3,5 -#else - vperm 6,3,4,5 -#endif - addi 11,12,16 - addi 10,3,16 - stvx 6,0,3 - vor 3,4,4 - -L(setup_unaligned_loop): - mtctr 8 - ble cr6,L(end_unaligned_loop) - - /* Copy 32 bytes at a time using vector instructions. */ - .align 4 -L(unaligned_loop): - - /* Note: vr6/vr10 may contain data that was already copied, - but in order to get proper alignment, we may have to copy - some portions again. This is faster than having unaligned - vector instructions though. */ - - lvx 4,11,6 /* vr4 = r11+16. */ -#ifdef __LITTLE_ENDIAN__ - vperm 6,4,3,5 -#else - vperm 6,3,4,5 -#endif - lvx 3,11,7 /* vr3 = r11+32. */ -#ifdef __LITTLE_ENDIAN__ - vperm 10,3,4,5 -#else - vperm 10,4,3,5 -#endif - addi 11,11,32 - stvx 6,0,10 - stvx 10,10,6 - addi 10,10,32 - - bdnz L(unaligned_loop) - - .align 4 -L(end_unaligned_loop): - - /* Check for tail bytes. */ - clrrwi 0,31,4 - mtcrf 0x01,31 - beq cr1,0f - - add 3,3,0 - add 12,12,0 - - /* We have 1~15 tail bytes to copy, and DST is quadword aligned. */ -8: /* Copy 8 bytes. */ - bf 28,4f - - lwz 6,0(12) - lwz 7,4(12) - addi 12,12,8 - stw 6,0(3) - stw 7,4(3) - addi 3,3,8 -4: /* Copy 4 bytes. */ - bf 29,2f - - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: /* Copy 2~3 bytes. */ - bf 30,1f - - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -1: /* Copy 1 byte. */ - bf 31,0f - - lbz 6,0(12) - stb 6,0(3) -0: /* Return DST + LEN pointer. */ - add 3,30,5 - lwz 30,20(1) - lwz 31,24(1) - addi 1,1,32 - blr - -END (__mempcpy) -libc_hidden_def (__mempcpy) -weak_alias (__mempcpy, mempcpy) -libc_hidden_builtin_def (mempcpy) diff --git a/sysdeps/powerpc/powerpc32/power7/memrchr.S b/sysdeps/powerpc/powerpc32/power7/memrchr.S deleted file mode 100644 index eb0c1bb8eb..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/memrchr.S +++ /dev/null @@ -1,196 +0,0 @@ -/* Optimized memrchr implementation for PowerPC32/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] memrchr (char *s [r3], int byte [r4], int size [r5]) */ - .machine power7 -ENTRY (__memrchr) - CALL_MCOUNT - add r7,r3,r5 /* Calculate the last acceptable address. */ - neg r0,r7 - addi r7,r7,-1 - mr r10,r3 - clrrwi r6,r7,7 - li r9,3<<5 - dcbt r9,r6,16 /* Stream hint, decreasing addresses. */ - - /* Replicate BYTE to word. */ - insrwi r4,r4,8,16 - insrwi r4,r4,16,0 - li r6,-4 - li r9,-1 - rlwinm r0,r0,3,27,28 /* Calculate padding. */ - clrrwi r8,r7,2 - srw r9,r9,r0 - cmplwi r5,16 - clrrwi r0,r10,2 - ble L(small_range) - -#ifdef __LITTLE_ENDIAN__ - lwzx r12,0,r8 -#else - lwbrx r12,0,r8 /* Load reversed word from memory. */ -#endif - cmpb r3,r12,r4 /* Check for BYTE in WORD1. */ - and r3,r3,r9 - cmplwi cr7,r3,0 /* If r3 == 0, no BYTEs have been found. */ - bne cr7,L(done) - - mtcrf 0x01,r8 - /* Are we now aligned to a doubleword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - bf 29,L(loop_setup) - - /* Handle WORD2 of pair. */ -#ifdef __LITTLE_ENDIAN__ - lwzx r12,r8,r6 -#else - lwbrx r12,r8,r6 -#endif - addi r8,r8,-4 - cmpb r3,r12,r4 - cmplwi cr7,r3,0 - bne cr7,L(done) - -L(loop_setup): - /* The last word we want to read in the loop below is the one - containing the first byte of the string, ie. the word at - s & ~3, or r0. The first word read is at r8 - 4, we - read 2 * cnt words, so the last word read will be at - r8 - 4 - 8 * cnt + 4. Solving for cnt gives - cnt = (r8 - r0) / 8 */ - sub r5,r8,r0 - addi r8,r8,-4 - srwi r9,r5,3 /* Number of loop iterations. */ - mtctr r9 /* Setup the counter. */ - - /* Main loop to look for BYTE backwards in the string. - FIXME: Investigate whether 32 byte align helps with this - 9 instruction loop. */ - .align 5 -L(loop): - /* Load two words, compare and merge in a - single register for speed. This is an attempt - to speed up the byte-checking process for bigger strings. */ - -#ifdef __LITTLE_ENDIAN__ - lwzx r12,0,r8 - lwzx r11,r8,r6 -#else - lwbrx r12,0,r8 - lwbrx r11,r8,r6 -#endif - cmpb r3,r12,r4 - cmpb r9,r11,r4 - or r5,r9,r3 /* Merge everything in one word. */ - cmplwi cr7,r5,0 - bne cr7,L(found) - addi r8,r8,-8 - bdnz L(loop) - - /* We may have one more word to read. */ - cmplw r8,r0 - bnelr - -#ifdef __LITTLE_ENDIAN__ - lwzx r12,0,r8 -#else - lwbrx r12,0,r8 -#endif - cmpb r3,r12,r4 - cmplwi cr7,r3,0 - bne cr7,L(done) - blr - - .align 4 -L(found): - /* OK, one (or both) of the words contains BYTE. Check - the first word. */ - cmplwi cr6,r3,0 - bne cr6,L(done) - - /* BYTE must be in the second word. Adjust the address - again and move the result of cmpb to r3 so we can calculate the - pointer. */ - - mr r3,r9 - addi r8,r8,-4 - - /* r3 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as BYTE in the original - word from the string. Use that to calculate the pointer. - We need to make sure BYTE is *before* the end of the - range. */ -L(done): - cntlzw r9,r3 /* Count leading zeros before the match. */ - cmplw r8,r0 /* Are we on the last word? */ - srwi r6,r9,3 /* Convert leading zeros to bytes. */ - addi r0,r6,-3 - sub r3,r8,r0 - cmplw cr7,r3,r10 - bnelr - bgelr cr7 - li r3,0 - blr - - .align 4 -L(null): - li r3,0 - blr - -/* Deals with size <= 16. */ - .align 4 -L(small_range): - cmplwi r5,0 - beq L(null) - -#ifdef __LITTLE_ENDIAN__ - lwzx r12,0,r8 -#else - lwbrx r12,0,r8 /* Load reversed word from memory. */ -#endif - cmpb r3,r12,r4 /* Check for BYTE in WORD1. */ - and r3,r3,r9 - cmplwi cr7,r3,0 - bne cr7,L(done) - - /* Are we done already? */ - cmplw r8,r0 - addi r8,r8,-4 - beqlr - - .align 5 -L(loop_small): -#ifdef __LITTLE_ENDIAN__ - lwzx r12,0,r8 -#else - lwbrx r12,0,r8 -#endif - cmpb r3,r12,r4 - cmplw r8,r0 - cmplwi cr7,r3,0 - bne cr7,L(done) - addi r8,r8,-4 - bne L(loop_small) - blr - -END (__memrchr) -weak_alias (__memrchr, memrchr) -libc_hidden_builtin_def (memrchr) diff --git a/sysdeps/powerpc/powerpc32/power7/memset.S b/sysdeps/powerpc/powerpc32/power7/memset.S deleted file mode 100644 index b431f5086d..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/memset.S +++ /dev/null @@ -1,431 +0,0 @@ -/* Optimized memset implementation for PowerPC32/POWER7. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); - Returns 's'. */ - - .machine power7 -EALIGN (memset, 5, 0) - CALL_MCOUNT - - .align 4 -L(_memset): - cmplwi cr7,5,31 - cmplwi cr6,5,8 - mr 10,3 /* Save original argument for later. */ - mr 7,1 /* Save original r1 for later. */ - cfi_offset(31,-8) - - /* Replicate byte to word. */ - insrwi 4,4,8,16 - insrwi 4,4,16,0 - - ble cr6,L(small) /* If length <= 8, use short copy code. */ - - neg 0,3 - ble cr7,L(medium) /* If length < 32, use medium copy code. */ - - /* Save our word twice to create a doubleword that we will later - copy to a FPR. */ - stwu 1,-32(1) - andi. 11,10,7 /* Check alignment of DST. */ - mr 12,5 - stw 4,24(1) - stw 4,28(1) - beq L(big_aligned) - - clrlwi 0,0,29 - mtocrf 0x01,0 - subf 5,0,5 - - /* Get DST aligned to 8 bytes. */ -1: bf 31,2f - - stb 4,0(10) - addi 10,10,1 -2: bf 30,4f - - sth 4,0(10) - addi 10,10,2 -4: bf 29,L(big_aligned) - - stw 4,0(10) - addi 10,10,4 - - .align 4 -L(big_aligned): - cmplwi cr5,5,255 - li 0,32 - cmplwi cr1,5,160 - dcbtst 0,10 - cmplwi cr6,4,0 - srwi 9,5,3 /* Number of full doublewords remaining. */ - crand 27,26,21 - mtocrf 0x01,9 - bt 27,L(huge) - - /* From this point on, we'll copy 32+ bytes and the value - isn't 0 (so we can't use dcbz). */ - - srwi 8,5,5 - clrlwi 11,5,29 - cmplwi cr6,11,0 - cmplwi cr1,9,4 - mtctr 8 - - /* Copy 1~3 doublewords so the main loop starts - at a multiple of 32 bytes. */ - - bf 30,1f - - stw 4,0(10) - stw 4,4(10) - stw 4,8(10) - stw 4,12(10) - addi 10,10,16 - bf 31,L(big_loop) - - stw 4,0(10) - stw 4,4(10) - addi 10,10,8 - mr 12,10 - blt cr1,L(tail_bytes) - - b L(big_loop) - - .align 4 -1: /* Copy 1 doubleword. */ - bf 31,L(big_loop) - - stw 4,0(10) - stw 4,4(10) - addi 10,10,8 - - /* First use a 32-bytes loop with stw's to try and avoid the LHS due - to the lfd we will do next. Also, ping-pong through r10 and r12 - to avoid AGEN delays. */ - .align 4 -L(big_loop): - addi 12,10,32 - stw 4,0(10) - stw 4,4(10) - stw 4,8(10) - stw 4,12(10) - stw 4,16(10) - stw 4,20(10) - stw 4,24(10) - stw 4,28(10) - bdz L(tail_bytes) - - addi 10,10,64 - stw 4,0(12) - stw 4,4(12) - stw 4,8(12) - stw 4,12(12) - stw 4,16(12) - stw 4,20(12) - stw 4,24(12) - stw 4,28(12) - bdnz L(big_loop_fast_setup) - - mr 12,10 - b L(tail_bytes) - - /* Now that we're probably past the LHS window, use the VSX to - speed up the loop. */ -L(big_loop_fast_setup): - li 11,24 - li 6,16 - lxvdsx 4,1,11 - - .align 4 -L(big_loop_fast): - addi 12,10,32 - stxvd2x 4,0,10 - stxvd2x 4,10,6 - bdz L(tail_bytes) - - addi 10,10,64 - stxvd2x 4,0,12 - stxvd2x 4,12,6 - bdnz L(big_loop_fast) - - mr 12,10 - - .align 4 -L(tail_bytes): - - /* Check for tail bytes. */ - mr 1,7 /* Restore r1. */ - beqlr cr6 - - clrlwi 0,5,29 - mtocrf 0x01,0 - - /* At this point we have a tail of 0-7 bytes and we know that the - destination is doubleword-aligned. */ -4: /* Copy 4 bytes. */ - bf 29,2f - - stw 4,0(12) - addi 12,12,4 -2: /* Copy 2 bytes. */ - bf 30,1f - - sth 4,0(12) - addi 12,12,2 -1: /* Copy 1 byte. */ - bflr 31 - - stb 4,0(12) - blr - - - /* Special case when value is 0 and we have a long length to deal - with. Use dcbz to zero out 128-bytes at a time. Before using - dcbz though, we need to get the destination 128-bytes aligned. */ - .align 4 -L(huge): - lfd 4,24(1) - andi. 11,10,127 - neg 0,10 - beq L(huge_aligned) - - clrlwi 0,0,25 - subf 5,0,5 - srwi 0,0,3 - mtocrf 0x01,0 - - /* Get DST aligned to 128 bytes. */ -8: bf 28,4f - - stfd 4,0(10) - stfd 4,8(10) - stfd 4,16(10) - stfd 4,24(10) - stfd 4,32(10) - stfd 4,40(10) - stfd 4,48(10) - stfd 4,56(10) - addi 10,10,64 - .align 4 -4: bf 29,2f - - stfd 4,0(10) - stfd 4,8(10) - stfd 4,16(10) - stfd 4,24(10) - addi 10,10,32 - .align 4 -2: bf 30,1f - - stfd 4,0(10) - stfd 4,8(10) - addi 10,10,16 - .align 4 -1: bf 31,L(huge_aligned) - - stfd 4,0(10) - addi 10,10,8 - -L(huge_aligned): - srwi 8,5,7 - clrlwi 11,5,25 - cmplwi cr6,11,0 - mtctr 8 - - /* Copies 128-bytes at a time. */ - .align 4 -L(huge_loop): - dcbz 0,10 - addi 10,10,128 - bdnz L(huge_loop) - - /* We have a tail of 0~127 bytes to handle. */ - mr 1,7 /* Restore r1. */ - beqlr cr6 - - subf 9,3,10 - subf 5,9,12 - srwi 8,5,3 - cmplwi cr6,8,0 - mtocrf 0x01,8 - - /* We have a tail o 1~127 bytes. Copy up to 15 doublewords for - speed. We'll handle the resulting tail bytes later. */ - beq cr6,L(tail) - -8: bf 28,4f - - stfd 4,0(10) - stfd 4,8(10) - stfd 4,16(10) - stfd 4,24(10) - stfd 4,32(10) - stfd 4,40(10) - stfd 4,48(10) - stfd 4,56(10) - addi 10,10,64 - .align 4 -4: bf 29,2f - - stfd 4,0(10) - stfd 4,8(10) - stfd 4,16(10) - stfd 4,24(10) - addi 10,10,32 - .align 4 -2: bf 30,1f - - stfd 4,0(10) - stfd 4,8(10) - addi 10,10,16 - .align 4 -1: bf 31,L(tail) - - stfd 4,0(10) - addi 10,10,8 - - /* Handle the rest of the tail bytes here. */ -L(tail): - mtocrf 0x01,5 - - .align 4 -4: bf 29,2f - - stw 4,0(10) - addi 10,10,4 - .align 4 -2: bf 30,1f - - sth 4,0(10) - addi 10,10,2 - .align 4 -1: bflr 31 - - stb 4,0(10) - blr - - - /* Expanded tree to copy tail bytes without increments. */ - .align 4 -L(copy_tail): - bf 29,L(FXX) - - stw 4,0(10) - bf 30,L(TFX) - - sth 4,4(10) - bflr 31 - - stb 4,6(10) - blr - - .align 4 -L(FXX): bf 30,L(FFX) - - sth 4,0(10) - bflr 31 - - stb 4,2(10) - blr - - .align 4 -L(TFX): bflr 31 - - stb 4,4(10) - blr - - .align 4 -L(FFX): bflr 31 - - stb 4,0(10) - blr - - /* Handle copies of 9~31 bytes. */ - .align 4 -L(medium): - /* At least 9 bytes to go. */ - andi. 11,10,3 - clrlwi 0,0,30 - beq L(medium_aligned) - - /* Force 4-bytes alignment for DST. */ - mtocrf 0x01,0 - subf 5,0,5 -1: /* Copy 1 byte. */ - bf 31,2f - - stb 4,0(10) - addi 10,10,1 -2: /* Copy 2 bytes. */ - bf 30,L(medium_aligned) - - sth 4,0(10) - addi 10,10,2 - - .align 4 -L(medium_aligned): - /* At least 6 bytes to go, and DST is word-aligned. */ - cmplwi cr1,5,16 - mtocrf 0x01,5 - blt cr1,8f - - /* Copy 16 bytes. */ - stw 4,0(10) - stw 4,4(10) - stw 4,8(10) - stw 4,12(10) - addi 10,10,16 -8: /* Copy 8 bytes. */ - bf 28,4f - - stw 4,0(10) - stw 4,4(10) - addi 10,10,8 -4: /* Copy 4 bytes. */ - bf 29,2f - - stw 4,0(10) - addi 10,10,4 -2: /* Copy 2-3 bytes. */ - bf 30,1f - - sth 4,0(10) - addi 10,10,2 -1: /* Copy 1 byte. */ - bflr 31 - - stb 4,0(10) - blr - - /* Handles copies of 0~8 bytes. */ - .align 4 -L(small): - mtocrf 0x01,5 - bne cr6,L(copy_tail) - - stw 4,0(10) - stw 4,4(10) - blr - -END (memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/powerpc/powerpc32/power7/multiarch/Implies b/sysdeps/powerpc/powerpc32/power7/multiarch/Implies deleted file mode 100644 index 22c12fd393..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power6/multiarch diff --git a/sysdeps/powerpc/powerpc32/power7/rawmemchr.S b/sysdeps/powerpc/powerpc32/power7/rawmemchr.S deleted file mode 100644 index 22edcfb209..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/rawmemchr.S +++ /dev/null @@ -1,110 +0,0 @@ -/* Optimized rawmemchr implementation for PowerPC32/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] rawmemchr (void *s [r3], int c [r4]) */ - .machine power7 -ENTRY (__rawmemchr) - CALL_MCOUNT - dcbt 0,r3 - clrrwi r8,r3,2 /* Align the address to word boundary. */ - - /* Replicate byte to word. */ - insrwi r4,r4,8,16 - insrwi r4,r4,16,0 - - /* Now r4 has a word of c bytes. */ - - rlwinm r6,r3,3,27,28 /* Calculate padding. */ - lwz r12,0(r8) /* Load word from memory. */ - cmpb r5,r12,r4 /* Compare each byte against c byte. */ -#ifdef __LITTLE_ENDIAN__ - srw r5,r5,r6 - slw r5,r5,r6 -#else - slw r5,r5,r6 /* Move left to discard ignored bits. */ - srw r5,r5,r6 /* Bring the bits back as zeros. */ -#endif - cmpwi cr7,r5,0 /* If r5 == 0, no c bytes have been found. */ - bne cr7,L(done) - - mtcrf 0x01,r8 - - /* Are we now aligned to a doubleword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 29,L(loop) - - /* Handle WORD2 of pair. */ - lwzu r12,4(r8) - cmpb r5,r12,r4 - cmpwi cr7,r5,0 - bne cr7,L(done) - b L(loop) /* We branch here (rather than falling through) - to skip the nops due to heavy alignment - of the loop below. */ - - /* Main loop to look for the end of the string. Since it's a - small loop (< 8 instructions), align it to 32-bytes. */ - .p2align 5 -L(loop): - /* Load two words, compare and merge in a - single register for speed. This is an attempt - to speed up the byte-checking process for bigger strings. */ - lwz r12,4(r8) - lwzu r11,8(r8) - cmpb r5,r12,r4 - cmpb r6,r11,r4 - or r7,r5,r6 - cmpwi cr7,r7,0 - beq cr7,L(loop) - - /* OK, one (or both) of the words contains a 'c' byte. Check - the first word and decrement the address in case the first - word really contains a c byte. */ - - cmpwi cr6,r5,0 - addi r8,r8,-4 - bne cr6,L(done) - - /* The 'c' byte must be in the second word. Adjust the address - again and move the result of cmpb to r10 so we can calculate the - pointer. */ - mr r5,r6 - addi r8,r8,4 - - /* r5 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as the 'c' byte in the original - word from the string. Use that fact to find out what is - the position of the byte inside the string. */ -L(done): -#ifdef __LITTLE_ENDIAN__ - addi r0,r5,-1 - andc r0,r0,r5 - popcntw r0,r0 -#else - cntlzw r0,r5 /* Count leading zeros before the match. */ -#endif - srwi r0,r0,3 /* Convert leading zeros to bytes. */ - add r3,r8,r0 /* Return address of the matching char. */ - blr -END (__rawmemchr) -weak_alias (__rawmemchr,rawmemchr) -libc_hidden_builtin_def (__rawmemchr) diff --git a/sysdeps/powerpc/powerpc32/power7/strcasecmp.S b/sysdeps/powerpc/powerpc32/power7/strcasecmp.S deleted file mode 100644 index 964875a13b..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/strcasecmp.S +++ /dev/null @@ -1,129 +0,0 @@ -/* Optimized strcasecmp implementation for PowerPC32. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int [r3] strcasecmp (const char *s1 [r3], const char *s2 [r4] ) - - or if defined USE_IN_EXTENDED_LOCALE_MODEL: - - int [r3] strcasecmp_l (const char *s1 [r3], const char *s2 [r4], - __locale_t loc [r5]) */ - -#ifndef STRCMP -# define __STRCMP __strcasecmp -# define STRCMP strcasecmp -#endif - -ENTRY (__STRCMP) - -#define rRTN r3 /* Return value */ -#define rSTR1 r5 /* 1st string */ -#define rSTR2 r4 /* 2nd string */ -#define rLOCARG r5 /* 3rd argument: locale_t */ -#define rCHAR1 r6 /* Byte read from 1st string */ -#define rCHAR2 r7 /* Byte read from 2nd string */ -#define rADDR1 r8 /* Address of tolower(rCHAR1) */ -#define rADDR2 r12 /* Address of tolower(rCHAR2) */ -#define rLWR1 r8 /* Byte tolower(rCHAR1) */ -#define rLWR2 r12 /* Byte tolower(rCHAR2) */ -#define rTMP r0 -#define rGOT r9 /* Address of the Global Offset Table */ -#define rLOC r11 /* Default locale address */ - - cmpw cr7, r3, r4 -#ifndef USE_IN_EXTENDED_LOCALE_MODEL -# ifdef SHARED - mflr rTMP - bcl 20,31,.L1 -.L1: mflr rGOT - addis rGOT, rGOT, _GLOBAL_OFFSET_TABLE_-.L1@ha - addi rGOT, rGOT, _GLOBAL_OFFSET_TABLE_-.L1@l - lwz rLOC, __libc_tsd_LOCALE@got@tprel(rGOT) - add rLOC, rLOC, __libc_tsd_LOCALE@tls - lwz rLOC, 0(rLOC) - mtlr rTMP -# else - lis rTMP,_GLOBAL_OFFSET_TABLE_@ha - la rLOC,_GLOBAL_OFFSET_TABLE_@l(rTMP) - lwz rLOC, __libc_tsd_LOCALE@got@tprel(rGOT) - add rLOC, rLOC, __libc_tsd_LOCALE@tls - lwz rLOC, 0(rLOC) -# endif /* SHARED */ -#else - mr rLOC, rLOCARG -#endif - mr rSTR1, rRTN - lwz rLOC, LOCALE_CTYPE_TOLOWER(rLOC) - li rRTN, 0 - beqlr cr7 - - /* Unrolling loop for POWER: loads are done with 'lbz' plus - offset and string descriptors are only updated in the end - of loop unrolling. */ - -L(loop): - lbz rCHAR1, 0(rSTR1) /* Load char from s1 */ - lbz rCHAR2, 0(rSTR2) /* Load char from s2 */ - sldi rADDR1, rCHAR1, 2 /* Calculate address for tolower(*s1) */ - sldi rADDR2, rCHAR2, 2 /* Calculate address for tolower(*s2) */ - lwzx rLWR1, rLOC, rADDR1 /* Load tolower(*s1) */ - lwzx rLWR2, rLOC, rADDR2 /* Load tolower(*s2) */ - cmpwi cr7, rCHAR1, 0 /* *s1 == '\0' ? */ - subf. r3, rLWR2, rLWR1 - bnelr - beqlr cr7 - lbz rCHAR1, 1(rSTR1) - lbz rCHAR2, 1(rSTR2) - sldi rADDR1, rCHAR1, 2 - sldi rADDR2, rCHAR2, 2 - lwzx rLWR1, rLOC, rADDR1 - lwzx rLWR2, rLOC, rADDR2 - cmpwi cr7, rCHAR1, 0 - subf. r3, rLWR2, rLWR1 - bnelr - beqlr cr7 - lbz rCHAR1, 2(rSTR1) - lbz rCHAR2, 2(rSTR2) - sldi rADDR1, rCHAR1, 2 - sldi rADDR2, rCHAR2, 2 - lwzx rLWR1, rLOC, rADDR1 - lwzx rLWR2, rLOC, rADDR2 - cmpwi cr7, rCHAR1, 0 - subf. r3, rLWR2, rLWR1 - bnelr - beqlr cr7 - lbz rCHAR1, 3(rSTR1) - lbz rCHAR2, 3(rSTR2) - /* Increment both string descriptors */ - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 - sldi rADDR1, rCHAR1, 2 - sldi rADDR2, rCHAR2, 2 - lwzx rLWR1, rLOC, rADDR1 - lwzx rLWR2, rLOC, rADDR2 - cmpwi cr7, rCHAR1, 0 - subf. r3, rLWR2, rLWR1 - bnelr - bne cr7,L(loop) - blr -END (__STRCMP) - -weak_alias (__STRCMP, STRCMP) -libc_hidden_builtin_def (__STRCMP) diff --git a/sysdeps/powerpc/powerpc32/power7/strcasecmp_l.S b/sysdeps/powerpc/powerpc32/power7/strcasecmp_l.S deleted file mode 100644 index c13c4ebcb8..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/strcasecmp_l.S +++ /dev/null @@ -1,5 +0,0 @@ -#define USE_IN_EXTENDED_LOCALE_MODEL -#define STRCMP strcasecmp_l -#define __STRCMP __strcasecmp_l - -#include "strcasecmp.S" diff --git a/sysdeps/powerpc/powerpc32/power7/strchr.S b/sysdeps/powerpc/powerpc32/power7/strchr.S deleted file mode 100644 index 75ca6acb98..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/strchr.S +++ /dev/null @@ -1,225 +0,0 @@ -/* Optimized strchr implementation for PowerPC32/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] strchr (char *s [r3], int c [r4]) */ - .machine power7 -ENTRY (strchr) - CALL_MCOUNT - dcbt 0,r3 - clrrwi r8,r3,2 /* Align the address to word boundary. */ - cmpwi cr7,r4,0 - lwz r12,0(r8) /* Load word from memory. */ - li r0,0 /* Word with null chars to use - with cmpb. */ - - rlwinm r6,r3,3,27,28 /* Calculate padding. */ - - beq cr7,L(null_match) - - /* Replicate byte to word. */ - insrwi r4,r4,8,16 - insrwi r4,r4,16,0 - - /* Now r4 has a word of c bytes and r0 has - a word of null bytes. */ - - cmpb r10,r12,r4 /* Compare each byte against c byte. */ - cmpb r11,r12,r0 /* Compare each byte against null byte. */ - - /* Move the words left and right to discard the bits that are - not part of the string and to bring them back as zeros. */ -#ifdef __LITTLE_ENDIAN__ - srw r10,r10,r6 - srw r11,r11,r6 - slw r10,r10,r6 - slw r11,r11,r6 -#else - slw r10,r10,r6 - slw r11,r11,r6 - srw r10,r10,r6 - srw r11,r11,r6 -#endif - or r5,r10,r11 /* OR the results to speed things up. */ - cmpwi cr7,r5,0 /* If r5 == 0, no c or null bytes - have been found. */ - bne cr7,L(done) - - mtcrf 0x01,r8 - - /* Are we now aligned to a doubleword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 29,L(loop) - - /* Handle WORD2 of pair. */ - lwzu r12,4(r8) - cmpb r10,r12,r4 - cmpb r11,r12,r0 - or r5,r10,r11 - cmpwi cr7,r5,0 - bne cr7,L(done) - b L(loop) /* We branch here (rather than falling through) - to skip the nops due to heavy alignment - of the loop below. */ - - .p2align 5 -L(loop): - /* Load two words, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - lwz r12,4(r8) - lwzu r9,8(r8) - cmpb r10,r12,r4 - cmpb r11,r12,r0 - cmpb r6,r9,r4 - cmpb r7,r9,r0 - or r12,r10,r11 - or r9,r6,r7 - or r5,r12,r9 - cmpwi cr7,r5,0 - beq cr7,L(loop) - - /* OK, one (or both) of the words contains a c/null byte. Check - the first word and decrement the address in case the first - word really contains a c/null byte. */ - - cmpwi cr6,r12,0 - addi r8,r8,-4 - bne cr6,L(done) - - /* The c/null byte must be in the second word. Adjust the address - again and move the result of cmpb to r10/r11 so we can calculate - the pointer. */ - - mr r10,r6 - mr r11,r7 - addi r8,r8,4 - - /* r10/r11 have the output of the cmpb instructions, that is, - 0xff in the same position as the c/null byte in the original - word from the string. Use that to calculate the pointer. */ -L(done): -#ifdef __LITTLE_ENDIAN__ - addi r3,r10,-1 - andc r3,r3,r10 - popcntw r0,r3 - addi r4,r11,-1 - andc r4,r4,r11 - cmplw cr7,r3,r4 - bgt cr7,L(no_match) -#else - cntlzw r0,r10 /* Count leading zeros before c matches. */ - cmplw cr7,r11,r10 - bgt cr7,L(no_match) -#endif - srwi r0,r0,3 /* Convert leading zeros to bytes. */ - add r3,r8,r0 /* Return address of the matching c byte - or null in case c was not found. */ - blr - - .align 4 -L(no_match): - li r3,0 - blr - -/* We are here because strchr was called with a null byte. */ - .align 4 -L(null_match): - /* r0 has a word of null bytes. */ - - cmpb r5,r12,r0 /* Compare each byte against null bytes. */ - - /* Move the words left and right to discard the bits that are - not part of the string and bring them back as zeros. */ -#ifdef __LITTLE_ENDIAN__ - srw r5,r5,r6 - slw r5,r5,r6 -#else - slw r5,r5,r6 - srw r5,r5,r6 -#endif - cmpwi cr7,r5,0 /* If r10 == 0, no c or null bytes - have been found. */ - bne cr7,L(done_null) - - mtcrf 0x01,r8 - - /* Are we now aligned to a doubleword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 29,L(loop_null) - - /* Handle WORD2 of pair. */ - lwzu r12,4(r8) - cmpb r5,r12,r0 - cmpwi cr7,r5,0 - bne cr7,L(done_null) - b L(loop_null) /* We branch here (rather than falling through) - to skip the nops due to heavy alignment - of the loop below. */ - - /* Main loop to look for the end of the string. Since it's a - small loop (< 8 instructions), align it to 32-bytes. */ - .p2align 5 -L(loop_null): - /* Load two words, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - lwz r12,4(r8) - lwzu r11,8(r8) - cmpb r5,r12,r0 - cmpb r10,r11,r0 - or r6,r5,r10 - cmpwi cr7,r6,0 - beq cr7,L(loop_null) - - /* OK, one (or both) of the words contains a null byte. Check - the first word and decrement the address in case the first - word really contains a null byte. */ - - cmpwi cr6,r5,0 - addi r8,r8,-4 - bne cr6,L(done_null) - - /* The null byte must be in the second word. Adjust the address - again and move the result of cmpb to r10 so we can calculate the - pointer. */ - - mr r5,r10 - addi r8,r8,4 - - /* r5 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as the null byte in the original - word from the string. Use that to calculate the pointer. */ -L(done_null): -#ifdef __LITTLE_ENDIAN__ - addi r0,r5,-1 - andc r0,r0,r5 - popcntw r0,r0 -#else - cntlzw r0,r5 /* Count leading zeros before the match. */ -#endif - srwi r0,r0,3 /* Convert leading zeros to bytes. */ - add r3,r8,r0 /* Return address of the matching null byte. */ - blr -END (strchr) -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/powerpc/powerpc32/power7/strchrnul.S b/sysdeps/powerpc/powerpc32/power7/strchrnul.S deleted file mode 100644 index 426137e11d..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/strchrnul.S +++ /dev/null @@ -1,127 +0,0 @@ -/* Optimized strchrnul implementation for PowerPC32/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] strchrnul (char *s [r3], int c [r4]) */ - .machine power7 -ENTRY (__strchrnul) - CALL_MCOUNT - dcbt 0,r3 - clrrwi r8,r3,2 /* Align the address to word boundary. */ - - /* Replicate byte to word. */ - insrwi r4,r4,8,16 - insrwi r4,r4,16,0 - - rlwinm r6,r3,3,27,28 /* Calculate padding. */ - lwz r12,0(r8) /* Load word from memory. */ - li r0,0 /* Word with null chars to use - with cmpb. */ - - /* Now r4 has a word of c bytes and r0 has - a word of null bytes. */ - - cmpb r10,r12,r0 /* Compare each byte against c byte. */ - cmpb r9,r12,r4 /* Compare each byte against null byte. */ - - /* Move the words left and right to discard the bits that are - not part of the string and bring them back as zeros. */ -#ifdef __LITTLE_ENDIAN__ - srw r10,r10,r6 - srw r9,r9,r6 - slw r10,r10,r6 - slw r9,r9,r6 -#else - slw r10,r10,r6 - slw r9,r9,r6 - srw r10,r10,r6 - srw r9,r9,r6 -#endif - or r5,r9,r10 /* OR the results to speed things up. */ - cmpwi cr7,r5,0 /* If r5 == 0, no c or null bytes - have been found. */ - bne cr7,L(done) - - mtcrf 0x01,r8 - - /* Are we now aligned to a doubleword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 29,L(loop) - - /* Handle WORD2 of pair. */ - lwzu r12,4(r8) - cmpb r10,r12,r0 - cmpb r9,r12,r4 - or r5,r9,r10 - cmpwi cr7,r5,0 - bne cr7,L(done) - b L(loop) /* We branch here (rather than falling through) - to skip the nops due to heavy alignment - of the loop below. */ - - .p2align 5 -L(loop): - /* Load two words, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - lwz r12,4(r8) - lwzu r11,8(r8) - cmpb r10,r12,r0 - cmpb r9,r12,r4 - cmpb r6,r11,r0 - cmpb r7,r11,r4 - or r5,r9,r10 - or r10,r6,r7 - or r11,r5,r10 - cmpwi cr7,r11,0 - beq cr7,L(loop) - - /* OK, one (or both) of the words contains a c/null byte. Check - the first word and decrement the address in case the first - word really contains a c/null byte. */ - - cmpwi cr6,r5,0 - addi r8,r8,-4 - bne cr6,L(done) - - /* The c/null byte must be in the second word. Adjust the address - again and move the result of cmpb to r5 so we can calculate the - pointer. */ - mr r5,r10 - addi r8,r8,4 - - /* r5 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as the c/null byte in the original - word from the string. Use that to calculate the pointer. */ -L(done): -#ifdef __LITTLE_ENDIAN__ - addi r0,r5,-1 - andc r0,r0,r5 - popcntw r0,r0 -#else - cntlzw r0,r5 /* Count leading zeros before the match. */ -#endif - srwi r0,r0,3 /* Convert leading zeros to bytes. */ - add r3,r8,r0 /* Return address of matching c/null byte. */ - blr -END (__strchrnul) -weak_alias (__strchrnul,strchrnul) -libc_hidden_builtin_def (__strchrnul) diff --git a/sysdeps/powerpc/powerpc32/power7/strlen.S b/sysdeps/powerpc/powerpc32/power7/strlen.S deleted file mode 100644 index 3699791fa6..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/strlen.S +++ /dev/null @@ -1,102 +0,0 @@ -/* Optimized strlen implementation for PowerPC32/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] strlen (char *s [r3]) */ - .machine power7 -ENTRY (strlen) - CALL_MCOUNT - dcbt 0,r3 - clrrwi r4,r3,2 /* Align the address to word boundary. */ - rlwinm r6,r3,3,27,28 /* Calculate padding. */ - li r0,0 /* Word with null chars to use with cmpb. */ - li r5,-1 /* MASK = 0xffffffffffffffff. */ - lwz r12,0(r4) /* Load word from memory. */ -#ifdef __LITTLE_ENDIAN__ - slw r5,r5,r6 -#else - srw r5,r5,r6 /* MASK = MASK >> padding. */ -#endif - orc r9,r12,r5 /* Mask bits that are not part of the string. */ - cmpb r10,r9,r0 /* Check for null bytes in WORD1. */ - cmpwi cr7,r10,0 /* If r10 == 0, no null's have been found. */ - bne cr7,L(done) - - mtcrf 0x01,r4 - - /* Are we now aligned to a doubleword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 29,L(loop) - - /* Handle WORD2 of pair. */ - lwzu r12,4(r4) - cmpb r10,r12,r0 - cmpwi cr7,r10,0 - bne cr7,L(done) - - /* Main loop to look for the end of the string. Since it's a - small loop (< 8 instructions), align it to 32-bytes. */ - .p2align 5 -L(loop): - /* Load two words, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - - lwz r12, 4(r4) - lwzu r11, 8(r4) - cmpb r10,r12,r0 - cmpb r9,r11,r0 - or r8,r9,r10 /* Merge everything in one word. */ - cmpwi cr7,r8,0 - beq cr7,L(loop) - - /* OK, one (or both) of the words contains a null byte. Check - the first word and decrement the address in case the first - word really contains a null byte. */ - - cmpwi cr6,r10,0 - addi r4,r4,-4 - bne cr6,L(done) - - /* The null byte must be in the second word. Adjust the address - again and move the result of cmpb to r10 so we can calculate the - length. */ - - mr r10,r9 - addi r4,r4,4 - - /* r10 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as the null byte in the original - word from the string. Use that to calculate the length. */ -L(done): -#ifdef __LITTLE_ENDIAN__ - addi r9, r10, -1 /* Form a mask from trailing zeros. */ - andc r9, r9, r10 - popcntw r0, r9 /* Count the bits in the mask. */ -#else - cntlzw r0,r10 /* Count leading zeros before the match. */ -#endif - subf r5,r3,r4 - srwi r0,r0,3 /* Convert leading zeros to bytes. */ - add r3,r5,r0 /* Compute final length. */ - blr -END (strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/powerpc/powerpc32/power7/strncmp.S b/sysdeps/powerpc/powerpc32/power7/strncmp.S deleted file mode 100644 index d4598e1930..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/strncmp.S +++ /dev/null @@ -1,199 +0,0 @@ -/* Optimized strcmp implementation for POWER7/PowerPC32. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* See strlen.s for comments on how the end-of-string testing works. */ - -/* int [r3] strncmp (const char *s1 [r3], - const char *s2 [r4], - size_t size [r5]) */ - -EALIGN (strncmp,5,0) - -#define rTMP2 r0 -#define rRTN r3 -#define rSTR1 r3 /* first string arg */ -#define rSTR2 r4 /* second string arg */ -#define rN r5 /* max string length */ -#define rWORD1 r6 /* current word in s1 */ -#define rWORD2 r7 /* current word in s2 */ -#define rWORD3 r10 -#define rWORD4 r11 -#define rFEFE r8 /* constant 0xfefefeff (-0x01010101) */ -#define r7F7F r9 /* constant 0x7f7f7f7f */ -#define rNEG r10 /* ~(word in s1 | 0x7f7f7f7f) */ -#define rBITDIF r11 /* bits that differ in s1 & s2 words */ -#define rTMP r12 - - dcbt 0,rSTR1 - nop - or rTMP,rSTR2,rSTR1 - lis r7F7F,0x7f7f - dcbt 0,rSTR2 - nop - clrlwi. rTMP,rTMP,30 - cmplwi cr1,rN,0 - lis rFEFE,-0x101 - bne L(unaligned) -/* We are word aligned so set up for two loops. first a word - loop, then fall into the byte loop if any residual. */ - srwi. rTMP,rN,2 - clrlwi rN,rN,30 - addi rFEFE,rFEFE,-0x101 - addi r7F7F,r7F7F,0x7f7f - cmplwi cr1,rN,0 - beq L(unaligned) - - mtctr rTMP - lwz rWORD1,0(rSTR1) - lwz rWORD2,0(rSTR2) - b L(g1) - -L(g0): - lwzu rWORD1,4(rSTR1) - bne cr1,L(different) - lwzu rWORD2,4(rSTR2) -L(g1): add rTMP,rFEFE,rWORD1 - nor rNEG,r7F7F,rWORD1 - bdz L(tail) - and. rTMP,rTMP,rNEG - cmpw cr1,rWORD1,rWORD2 - beq L(g0) - -/* OK. We've hit the end of the string. We need to be careful that - we don't compare two strings as different because of gunk beyond - the end of the strings... */ -#ifdef __LITTLE_ENDIAN__ -L(endstring): - slwi rTMP, rTMP, 1 - addi rTMP2, rTMP, -1 - andc rTMP2, rTMP2, rTMP - and rWORD2, rWORD2, rTMP2 /* Mask off gunk. */ - and rWORD1, rWORD1, rTMP2 - rlwinm rTMP2, rWORD2, 8, 0xffffffff /* Byte reverse word. */ - rlwinm rTMP, rWORD1, 8, 0xffffffff - rldimi rTMP2, rWORD2, 24, 32 - rldimi rTMP, rWORD1, 24, 32 - rlwimi rTMP2, rWORD2, 24, 16, 23 - rlwimi rTMP, rWORD1, 24, 16, 23 - xor. rBITDIF, rTMP, rTMP2 - sub rRTN, rTMP, rTMP2 - bgelr - ori rRTN, rTMP2, 1 - blr - -L(different): - lwz rWORD1, -4(rSTR1) - rlwinm rTMP2, rWORD2, 8, 0xffffffff /* Byte reverse word. */ - rlwinm rTMP, rWORD1, 8, 0xffffffff - rldimi rTMP2, rWORD2, 24, 32 - rldimi rTMP, rWORD1, 24, 32 - rlwimi rTMP2, rWORD2, 24, 16, 23 - rlwimi rTMP, rWORD1, 24, 16, 23 - xor. rBITDIF, rTMP, rTMP2 - sub rRTN, rTMP, rTMP2 - bgelr - ori rRTN, rTMP2, 1 - blr - -#else -L(endstring): - and rTMP,r7F7F,rWORD1 - beq cr1,L(equal) - add rTMP,rTMP,r7F7F - xor. rBITDIF,rWORD1,rWORD2 - andc rNEG,rNEG,rTMP - blt L(highbit) - cntlzw rBITDIF,rBITDIF - cntlzw rNEG,rNEG - addi rNEG,rNEG,7 - cmpw cr1,rNEG,rBITDIF - sub rRTN,rWORD1,rWORD2 - bgelr cr1 -L(equal): - li rRTN,0 - blr - -L(different): - lwz rWORD1,-4(rSTR1) - xor. rBITDIF,rWORD1,rWORD2 - sub rRTN,rWORD1,rWORD2 - bgelr -L(highbit): - ori rRTN, rWORD2, 1 - blr -#endif - -/* Oh well. In this case, we just do a byte-by-byte comparison. */ - .align 4 -L(tail): - and. rTMP,rTMP,rNEG - cmpw cr1,rWORD1,rWORD2 - bne L(endstring) - addi rSTR1,rSTR1,4 - bne cr1,L(different) - addi rSTR2,rSTR2,4 - cmplwi cr1,rN,0 -L(unaligned): - mtctr rN - ble cr1,L(ux) -L(uz): - lbz rWORD1,0(rSTR1) - lbz rWORD2,0(rSTR2) - .align 4 -L(u1): - cmpwi cr1,rWORD1,0 - bdz L(u4) - cmpw rWORD1,rWORD2 - beq cr1,L(u4) - bne L(u4) - lbzu rWORD3,1(rSTR1) - lbzu rWORD4,1(rSTR2) - cmpwi cr1,rWORD3,0 - bdz L(u3) - cmpw rWORD3,rWORD4 - beq cr1,L(u3) - bne L(u3) - lbzu rWORD1,1(rSTR1) - lbzu rWORD2,1(rSTR2) - cmpwi cr1,rWORD1,0 - bdz L(u4) - cmpw rWORD1,rWORD2 - beq cr1,L(u4) - bne L(u4) - lbzu rWORD3,1(rSTR1) - lbzu rWORD4,1(rSTR2) - cmpwi cr1,rWORD3,0 - bdz L(u3) - cmpw rWORD3,rWORD4 - beq cr1,L(u3) - bne L(u3) - lbzu rWORD1,1(rSTR1) - lbzu rWORD2,1(rSTR2) - b L(u1) - -L(u3): sub rRTN,rWORD3,rWORD4 - blr -L(u4): sub rRTN,rWORD1,rWORD2 - blr -L(ux): - li rRTN,0 - blr -END (strncmp) -libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/powerpc/powerpc32/power7/strnlen.S b/sysdeps/powerpc/powerpc32/power7/strnlen.S deleted file mode 100644 index 6019d5be5b..0000000000 --- a/sysdeps/powerpc/powerpc32/power7/strnlen.S +++ /dev/null @@ -1,176 +0,0 @@ -/* Optimized strnlen implementation for PowerPC32/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] strnlen (char *s [r3], int size [r4]) */ - .machine power7 -ENTRY (__strnlen) - CALL_MCOUNT - dcbt 0,r3 - clrrwi r8,r3,2 /* Align the address to word boundary. */ - add r7,r3,r4 /* Calculate the last acceptable address. */ - cmplwi r4,16 - li r0,0 /* Word with null chars. */ - addi r7,r7,-1 - ble L(small_range) - - rlwinm r6,r3,3,27,28 /* Calculate padding. */ - lwz r12,0(r8) /* Load word from memory. */ - cmpb r10,r12,r0 /* Check for null bytes in DWORD1. */ -#ifdef __LITTLE_ENDIAN__ - srw r10,r10,r6 - slw r10,r10,r6 -#else - slw r10,r10,r6 - srw r10,r10,r6 -#endif - cmplwi cr7,r10,0 /* If r10 == 0, no null's have been found. */ - bne cr7,L(done) - - clrrwi r7,r7,2 /* Address of last word. */ - mtcrf 0x01,r8 - /* Are we now aligned to a doubleword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 29,L(loop_setup) - - /* Handle WORD2 of pair. */ - lwzu r12,4(r8) - cmpb r10,r12,r0 - cmplwi cr7,r10,0 - bne cr7,L(done) - -L(loop_setup): - /* The last word we want to read in the loop below is the one - containing the last byte of the string, ie. the word at - (s + size - 1) & ~3, or r7. The first word read is at - r8 + 4, we read 2 * cnt words, so the last word read will - be at r8 + 4 + 8 * cnt - 4. Solving for cnt gives - cnt = (r7 - r8) / 8 */ - sub r5,r7,r8 - srwi r6,r5,3 /* Number of loop iterations. */ - mtctr r6 /* Setup the counter. */ - - /* Main loop to look for the null byte in the string. Since - it's a small loop (< 8 instructions), align it to 32-bytes. */ - .p2align 5 -L(loop): - /* Load two words, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - - lwz r12,4(r8) - lwzu r11,8(r8) - cmpb r10,r12,r0 - cmpb r9,r11,r0 - or r5,r9,r10 /* Merge everything in one word. */ - cmplwi cr7,r5,0 - bne cr7,L(found) - bdnz L(loop) - - /* We may have one more word to read. */ - cmplw cr6,r8,r7 - beq cr6,L(end_max) - - lwzu r12,4(r8) - cmpb r10,r12,r0 - cmplwi cr6,r10,0 - bne cr6,L(done) - -L(end_max): - mr r3,r4 - blr - - /* OK, one (or both) of the words contains a null byte. Check - the first word and decrement the address in case the first - word really contains a null byte. */ - .align 4 -L(found): - cmplwi cr6,r10,0 - addi r8,r8,-4 - bne cr6,L(done) - - /* The null byte must be in the second word. Adjust the address - again and move the result of cmpb to r10 so we can calculate the - length. */ - - mr r10,r9 - addi r8,r8,4 - - /* r10 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as the null byte in the original - word from the string. Use that to calculate the length. - We need to make sure the null char is *before* the end of the - range. */ -L(done): -#ifdef __LITTLE_ENDIAN__ - addi r0,r10,-1 - andc r0,r0,r10 - popcntw r0,r0 -#else - cntlzw r0,r10 /* Count leading zeros before the match. */ -#endif - sub r3,r8,r3 - srwi r0,r0,3 /* Convert leading/trailing zeros to bytes. */ - add r3,r3,r0 /* Length until the match. */ - cmplw r3,r4 - blelr - mr r3,r4 - blr - -/* Deals with size <= 16. */ - .align 4 -L(small_range): - cmplwi r4,0 - beq L(end_max) - - clrrwi r7,r7,2 /* Address of last word. */ - - rlwinm r6,r3,3,27,28 /* Calculate padding. */ - lwz r12,0(r8) /* Load word from memory. */ - cmpb r10,r12,r0 /* Check for null bytes in WORD1. */ -#ifdef __LITTLE_ENDIAN__ - srw r10,r10,r6 - slw r10,r10,r6 -#else - slw r10,r10,r6 - srw r10,r10,r6 -#endif - cmplwi cr7,r10,0 - bne cr7,L(done) - - cmplw r8,r7 - beq L(end_max) - - .p2align 5 -L(loop_small): - lwzu r12,4(r8) - cmpb r10,r12,r0 - cmplwi cr6,r10,0 - bne cr6,L(done) - cmplw r8,r7 - bne L(loop_small) - mr r3,r4 - blr - -END (__strnlen) -libc_hidden_def (__strnlen) -weak_alias (__strnlen, strnlen) -libc_hidden_builtin_def (strnlen) diff --git a/sysdeps/powerpc/powerpc32/power8/Implies b/sysdeps/powerpc/powerpc32/power8/Implies deleted file mode 100644 index 083f3e950a..0000000000 --- a/sysdeps/powerpc/powerpc32/power8/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/power7/fpu -powerpc/powerpc32/power7 diff --git a/sysdeps/powerpc/powerpc32/power8/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc32/power8/fpu/multiarch/Implies deleted file mode 100644 index 43a3b83e2a..0000000000 --- a/sysdeps/powerpc/powerpc32/power8/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power7/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc32/power8/multiarch/Implies b/sysdeps/powerpc/powerpc32/power8/multiarch/Implies deleted file mode 100644 index f18504408f..0000000000 --- a/sysdeps/powerpc/powerpc32/power8/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power7/multiarch diff --git a/sysdeps/powerpc/powerpc32/power9/Implies b/sysdeps/powerpc/powerpc32/power9/Implies deleted file mode 100644 index 066dea2798..0000000000 --- a/sysdeps/powerpc/powerpc32/power9/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/power8/fpu -powerpc/powerpc32/power8 diff --git a/sysdeps/powerpc/powerpc32/power9/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc32/power9/fpu/multiarch/Implies deleted file mode 100644 index 4393b56872..0000000000 --- a/sysdeps/powerpc/powerpc32/power9/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power8/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc32/power9/multiarch/Implies b/sysdeps/powerpc/powerpc32/power9/multiarch/Implies deleted file mode 100644 index 1a46ef0035..0000000000 --- a/sysdeps/powerpc/powerpc32/power9/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc32/power8/multiarch diff --git a/sysdeps/powerpc/powerpc32/ppc-mcount.S b/sysdeps/powerpc/powerpc32/ppc-mcount.S deleted file mode 100644 index 8a6b205c37..0000000000 --- a/sysdeps/powerpc/powerpc32/ppc-mcount.S +++ /dev/null @@ -1,104 +0,0 @@ -/* PowerPC-specific implementation of profiling support. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This would be bad. */ -#ifdef PROF -#undef PROF -#endif - -#include - -/* We do profiling as described in the SYSV ELF ABI, except that glibc - _mcount manages its own counters. The caller has put the address the - caller will return to in the usual place on the stack, 4(r1). _mcount - is responsible for ensuring that when it returns no argument-passing - registers are disturbed, and that the LR is set back to (what the - caller sees as) 4(r1). - - This is intended so that the following code can be inserted at the - front of any routine without changing the routine: - - .data - mflr r0 - stw r0,4(r1) - bl _mcount -*/ - -ENTRY(_mcount) -#if defined PIC && !defined SHARED -# define CALLER_LR_OFFSET 68 - stwu r1,-64(r1) - cfi_adjust_cfa_offset (64) - stw r30, 48(r1) - cfi_rel_offset (r30, 48) -#else -# define CALLER_LR_OFFSET 52 - stwu r1,-48(r1) - cfi_adjust_cfa_offset (48) -#endif -/* We need to save the parameter-passing registers. */ - stw r3, 12(r1) - stw r4, 16(r1) - stw r5, 20(r1) - stw r6, 24(r1) - mflr r4 -#if defined PIC && !defined SHARED - bcl 20,31,0f -0: - mflr r30 - addis r30, r30, _GLOBAL_OFFSET_TABLE_-0b@ha - addi r30, r30, _GLOBAL_OFFSET_TABLE_-0b@l -#endif - lwz r3, CALLER_LR_OFFSET(r1) - mfcr r5 - stw r7, 28(r1) - stw r8, 32(r1) - stw r9, 36(r1) - stw r10,40(r1) - stw r4, 44(r1) - cfi_rel_offset (lr, 44) - stw r5, 8(r1) -#ifndef SHARED - bl JUMPTARGET(__mcount_internal) -#else - bl __mcount_internal@local -#endif - /* Restore the registers... */ - lwz r6, 8(r1) - lwz r0, 44(r1) - lwz r3, 12(r1) - mtctr r0 - lwz r4, 16(r1) - mtcrf 0xff,r6 - lwz r5, 20(r1) - lwz r6, 24(r1) - lwz r0, CALLER_LR_OFFSET(r1) - lwz r7, 28(r1) - lwz r8, 32(r1) - mtlr r0 - lwz r9, 36(r1) - lwz r10,40(r1) - /* ...unwind the stack frame, and return to your usual programming. */ -#if defined PIC && !defined SHARED - lwz r30, 48(r1) - addi r1,r1,64 -#else - addi r1,r1,48 -#endif - bctr -END(_mcount) diff --git a/sysdeps/powerpc/powerpc32/register-dump.h b/sysdeps/powerpc/powerpc32/register-dump.h deleted file mode 100644 index 6e533a75a3..0000000000 --- a/sysdeps/powerpc/powerpc32/register-dump.h +++ /dev/null @@ -1,120 +0,0 @@ -/* Dump registers. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include <_itoa.h> - -/* This prints out the information in the following form: */ -static const char dumpform[] = "\ -Register dump:\n\ -fp0-3: 0000030%0000031% 0000032%0000033% 0000034%0000035% 0000036%0000037%\n\ -fp4-7: 0000038%0000039% 000003a%000003b% 000003c%000003d% 000003e%000003f%\n\ -fp8-11: 0000040%0000041% 0000042%0000043% 0000044%0000045% 0000046%0000047%\n\ -fp12-15: 0000048%0000049% 000004a%000004b% 000004c%000004d% 000004e%000004f%\n\ -fp16-19: 0000050%0000051% 0000052%0000053% 0000054%0000055% 0000056%0000057%\n\ -fp20-23: 0000058%0000059% 000005a%000005b% 000005c%000005d% 000005e%000005f%\n\ -fp24-27: 0000060%0000061% 0000062%0000063% 0000064%0000065% 0000066%0000067%\n\ -fp28-31: 0000068%0000069% 000006a%000006b% 000006c%000006d% 000006e%000006f%\n\ -r0 =0000000% sp =0000001% r2 =0000002% r3 =0000003% trap=0000028%\n\ -r4 =0000004% r5 =0000005% r6 =0000006% r7 =0000007% sr0=0000020% sr1=0000021%\n\ -r8 =0000008% r9 =0000009% r10=000000a% r11=000000b% dar=0000029% dsi=000002a%\n\ -r12=000000c% r13=000000d% r14=000000e% r15=000000f% r3*=0000022%\n\ -r16=0000010% r17=0000011% r18=0000012% r19=0000013%\n\ -r20=0000014% r21=0000015% r22=0000016% r23=0000017% lr=0000024% xer=0000025%\n\ -r24=0000018% r25=0000019% r26=000001a% r27=000001b% mq=0000027% ctr=0000023%\n\ -r28=000001c% r29=000001d% r30=000001e% r31=000001f% fscr=0000071% ccr=0000026%\n\ -"; - -/* Most of the fields are self-explanatory. 'sr0' is the next - instruction to execute, from SRR0, which may have some relationship - with the instruction that caused the exception. 'r3*' is the value - that will be returned in register 3 when the current system call - returns. 'sr1' is SRR1, bits 16-31 of which are copied from the MSR: - - 16 - External interrupt enable - 17 - Privilege level (1=user, 0=supervisor) - 18 - FP available - 19 - Machine check enable (if clear, processor locks up on machine check) - 20 - FP exception mode bit 0 (FP exceptions recoverable) - 21 - Single-step trace enable - 22 - Branch trace enable - 23 - FP exception mode bit 1 - 25 - exception prefix (if set, exceptions are taken from 0xFFFnnnnn, - otherwise from 0x000nnnnn). - 26 - Instruction address translation enabled. - 27 - Data address translation enabled. - 30 - Exception is recoverable (otherwise, don't try to return). - 31 - Little-endian mode enable. - - 'Trap' is the address of the exception: - - 00200 - Machine check exception (memory parity error, for instance) - 00300 - Data access exception (memory not mapped, see dsisr for why) - 00400 - Instruction access exception (memory not mapped) - 00500 - External interrupt - 00600 - Alignment exception (see dsisr for more information) - 00700 - Program exception (illegal/trap instruction, FP exception) - 00800 - FP unavailable (should not be seen by user code) - 00900 - Decrementer exception (for instance, SIGALRM) - 00A00 - I/O controller interface exception - 00C00 - System call exception (for instance, kill(3)). - 00E00 - FP assist exception (optional FP instructions, etc.) - - 'dar' is the memory location, for traps 00300, 00400, 00600, 00A00. - 'dsisr' has the following bits under trap 00300: - 0 - direct-store error exception - 1 - no page table entry for page - 4 - memory access not permitted - 5 - trying to access I/O controller space or using lwarx/stwcx on - non-write-cached memory - 6 - access was store - 9 - data access breakpoint hit - 10 - segment table search failed to find translation (64-bit ppcs only) - 11 - I/O controller instruction not permitted - For trap 00400, the same bits are set in SRR1 instead. - For trap 00600, bits 12-31 of the DSISR set to allow emulation of - the instruction without actually having to read it from memory. -*/ - -#define xtoi(x) (x >= 'a' ? x + 10 - 'a' : x - '0') - -static void -register_dump (int fd, struct sigcontext *ctx) -{ - char buffer[sizeof(dumpform)]; - char *bufferpos; - unsigned regno; - unsigned *regs = (unsigned *)(ctx->regs); - - memcpy(buffer, dumpform, sizeof(dumpform)); - - /* Generate the output. */ - while ((bufferpos = memchr (buffer, '%', sizeof(dumpform)))) - { - regno = xtoi (bufferpos[-1]) | xtoi (bufferpos[-2]) << 4; - memset (bufferpos-2, '0', 3); - _itoa_word (regs[regno], bufferpos+1, 16, 0); - } - - /* Write the output. */ - write (fd, buffer, sizeof(buffer) - 1); -} - - -#define REGISTER_DUMP \ - register_dump (fd, ctx) diff --git a/sysdeps/powerpc/powerpc32/rshift.S b/sysdeps/powerpc/powerpc32/rshift.S deleted file mode 100644 index 58abdcad59..0000000000 --- a/sysdeps/powerpc/powerpc32/rshift.S +++ /dev/null @@ -1,55 +0,0 @@ -/* Shift a limb right, low level routine. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* INPUT PARAMETERS - res_ptr r3 - s1_ptr r4 - size r5 - cnt r6 */ - -ENTRY (__mpn_rshift) - mtctr r5 # copy size into CTR - addi r7,r3,-4 # move adjusted res_ptr to free return reg - subfic r8,r6,32 - lwz r11,0(r4) # load first s1 limb - slw r3,r11,r8 # compute function return value - bdz L(1) - -L(0): lwzu r10,4(r4) - srw r9,r11,r6 - slw r12,r10,r8 - or r9,r9,r12 - stwu r9,4(r7) - bdz L(2) - lwzu r11,4(r4) - srw r9,r10,r6 - slw r12,r11,r8 - or r9,r9,r12 - stwu r9,4(r7) - bdnz L(0) - -L(1): srw r0,r11,r6 - stw r0,4(r7) - blr - -L(2): srw r0,r10,r6 - stw r0,4(r7) - blr -END (__mpn_rshift) diff --git a/sysdeps/powerpc/powerpc32/rtld-memset.c b/sysdeps/powerpc/powerpc32/rtld-memset.c deleted file mode 100644 index f3ed8ad1e7..0000000000 --- a/sysdeps/powerpc/powerpc32/rtld-memset.c +++ /dev/null @@ -1,4 +0,0 @@ -/* PPCA2 has a different cache-line size than the usual 128 bytes. To avoid - using code that assumes cache-line size to be 128 bytes (with dcbz - instructions) we use the generic code instead. */ -#include diff --git a/sysdeps/powerpc/powerpc32/setjmp-common.S b/sysdeps/powerpc/powerpc32/setjmp-common.S deleted file mode 100644 index c74c492cec..0000000000 --- a/sysdeps/powerpc/powerpc32/setjmp-common.S +++ /dev/null @@ -1,78 +0,0 @@ -/* setjmp for PowerPC. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#define _ASM -#ifdef __NO_VMX__ -# include -#else -# include -#endif - -#if defined __SPE__ || (defined __NO_FPRS__ && !defined _SOFT_FLOAT) -# define SAVE_GP(N) evstdd r##N,((JB_FPRS+((N)-14)*2)*4)(3) -#else -# define SAVE_GP(N) stw r##N,((JB_GPRS+(N)-14)*4)(3) -#endif - -ENTRY (__sigsetjmp_symbol) - -#ifdef PTR_MANGLE - mr r5,r1 - PTR_MANGLE(r5, r10) - stw r5,(JB_GPR1*4)(3) -#else - stw r1,(JB_GPR1*4)(3) -#endif - mflr r0 - /* setjmp probe expects longjmp first argument (4@3), second argument - (-4@4), and target address (4@0), respectively. */ - LIBC_PROBE (setjmp, 3, 4@3, -4@4, 4@0) - SAVE_GP (14) -#ifdef PTR_MANGLE - PTR_MANGLE2 (r0, r10) - li r10,0 -#endif - stw r0,(JB_LR*4)(3) - SAVE_GP (15) - mfcr r0 - SAVE_GP (16) - stw r0,(JB_CR*4)(3) - SAVE_GP (17) - SAVE_GP (18) - SAVE_GP (19) - SAVE_GP (20) - SAVE_GP (21) - SAVE_GP (22) - SAVE_GP (23) - SAVE_GP (24) - SAVE_GP (25) - SAVE_GP (26) - SAVE_GP (27) - SAVE_GP (28) - SAVE_GP (29) - SAVE_GP (30) - SAVE_GP (31) -#if IS_IN (rtld) - li r3,0 - blr -#else - b __sigjmp_save_symbol@local -#endif -END (__sigsetjmp_symbol) diff --git a/sysdeps/powerpc/powerpc32/setjmp.S b/sysdeps/powerpc/powerpc32/setjmp.S deleted file mode 100644 index 2800466276..0000000000 --- a/sysdeps/powerpc/powerpc32/setjmp.S +++ /dev/null @@ -1,46 +0,0 @@ -/* non altivec (old) version of setjmp for PowerPC. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if !IS_IN (libc) -/* Build a non-versioned object for rtld-*. */ -# define __sigsetjmp_symbol __sigsetjmp -# define __sigjmp_save_symbol __sigjmp_save -# include "setjmp-common.S" - -#else /* IS_IN (libc) */ -/* Build a versioned object for libc. */ -versioned_symbol (libc, __vmx__sigsetjmp, __sigsetjmp, GLIBC_2_3_4) -# define __sigsetjmp_symbol __vmx__sigsetjmp -# define __sigjmp_save_symbol __vmx__sigjmp_save -# include "setjmp-common.S" -libc_hidden_ver (__vmx__sigsetjmp, __sigsetjmp) - -# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) -# define __NO_VMX__ -# undef __sigsetjmp_symbol -# undef __sigjmp_save_symbol -# undef JB_SIZE -compat_symbol (libc, __novmx__sigsetjmp, __sigsetjmp, GLIBC_2_0) -# define __sigsetjmp_symbol __novmx__sigsetjmp -# define __sigjmp_save_symbol __novmx__sigjmp_save -# include "setjmp-common.S" -# endif -#endif /* IS_IN (libc) */ diff --git a/sysdeps/powerpc/powerpc32/stackguard-macros.h b/sysdeps/powerpc/powerpc32/stackguard-macros.h deleted file mode 100644 index b3d0af830f..0000000000 --- a/sysdeps/powerpc/powerpc32/stackguard-macros.h +++ /dev/null @@ -1,14 +0,0 @@ -#include - -#define STACK_CHK_GUARD \ - ({ uintptr_t x; asm ("lwz %0,-28680(2)" : "=r" (x)); x; }) - -#define POINTER_CHK_GUARD \ - ({ \ - uintptr_t x; \ - asm ("lwz %0,%1(2)" \ - : "=r" (x) \ - : "i" (offsetof (tcbhead_t, pointer_guard) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) \ - ); \ - x; \ - }) diff --git a/sysdeps/powerpc/powerpc32/start.S b/sysdeps/powerpc/powerpc32/start.S deleted file mode 100644 index d510a56c0f..0000000000 --- a/sysdeps/powerpc/powerpc32/start.S +++ /dev/null @@ -1,95 +0,0 @@ -/* Startup code for programs linked with GNU libc. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* We do not want .eh_frame info for crt1.o since crt1.o is linked - before crtbegin.o, the file defining __EH_FRAME_BEGIN__. */ -#undef cfi_startproc -#define cfi_startproc -#undef cfi_endproc -#define cfi_endproc - - /* These are the various addresses we require. */ -#ifdef PIC - .section ".data" -#else - .section ".rodata" -#endif - .align 2 -L(start_addresses): - .long _SDA_BASE_ - .long main - .long __libc_csu_init - .long __libc_csu_fini - ASM_SIZE_DIRECTIVE(L(start_addresses)) - - .section ".text" -ENTRY(_start) - /* Save the stack pointer, in case we're statically linked under Linux. */ - mr r9,r1 - /* Set up an initial stack frame, and clear the LR. */ - clrrwi r1,r1,4 -#ifdef PIC - SETUP_GOT_ACCESS(r13,got_label) - li r0,0 -#else - li r0,0 -#endif - stwu r1,-16(r1) - mtlr r0 - stw r0,0(r1) - /* Set r13 to point at the 'small data area', and put the address of - start_addresses in r8. Also load the GOT pointer so that new PLT - calls work, like the one to __libc_start_main. */ -#ifdef PIC - addis r30,r13,_GLOBAL_OFFSET_TABLE_-got_label@ha - addis r8,r13,L(start_addresses)-got_label@ha - addi r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@l - lwzu r13, L(start_addresses)-got_label@l(r8) -#else - lis r8,L(start_addresses)@ha - lwzu r13,L(start_addresses)@l(r8) -#endif - /* and continue in libc-start, in glibc. */ - b JUMPTARGET(__libc_start_main) -END(_start) - -/* Define a symbol for the first piece of initialized data. */ - .section ".data" - .globl __data_start -__data_start: - .long 0 -weak_alias (__data_start, data_start) diff --git a/sysdeps/powerpc/powerpc32/stpcpy.S b/sysdeps/powerpc/powerpc32/stpcpy.S deleted file mode 100644 index 6ef249f80d..0000000000 --- a/sysdeps/powerpc/powerpc32/stpcpy.S +++ /dev/null @@ -1,119 +0,0 @@ -/* Optimized stpcpy implementation for PowerPC. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* See strlen.s for comments on how the end-of-string testing works. */ - -/* char * [r3] stpcpy (char *dest [r3], const char *src [r4]) */ - -EALIGN (__stpcpy, 4, 0) - -#define rTMP r0 -#define rRTN r3 -#define rDEST r3 /* pointer to previous word in dest */ -#define rSRC r4 /* pointer to previous word in src */ -#define rWORD r6 /* current word from src */ -#define rFEFE r7 /* 0xfefefeff */ -#define r7F7F r8 /* 0x7f7f7f7f */ -#define rNEG r9 /* ~(word in src | 0x7f7f7f7f) */ -#define rALT r10 /* alternate word from src */ - - - or rTMP, rSRC, rDEST - clrlwi. rTMP, rTMP, 30 - addi rDEST, rDEST, -4 - bne L(unaligned) - - lis rFEFE, -0x101 - lis r7F7F, 0x7f7f - lwz rWORD, 0(rSRC) - addi rFEFE, rFEFE, -0x101 - addi r7F7F, r7F7F, 0x7f7f - b L(g2) - -L(g0): lwzu rALT, 4(rSRC) - stwu rWORD, 4(rDEST) - add rTMP, rFEFE, rALT - nor rNEG, r7F7F, rALT - and. rTMP, rTMP, rNEG - bne- L(g1) - lwzu rWORD, 4(rSRC) - stwu rALT, 4(rDEST) -L(g2): add rTMP, rFEFE, rWORD - nor rNEG, r7F7F, rWORD - and. rTMP, rTMP, rNEG - beq+ L(g0) - - mr rALT, rWORD -/* We've hit the end of the string. Do the rest byte-by-byte. */ -L(g1): -#ifdef __LITTLE_ENDIAN__ - rlwinm. rTMP, rALT, 0, 24, 31 - stbu rALT, 4(rDEST) - beqlr- - rlwinm. rTMP, rALT, 24, 24, 31 - stbu rTMP, 1(rDEST) - beqlr- - rlwinm. rTMP, rALT, 16, 24, 31 - stbu rTMP, 1(rDEST) - beqlr- - rlwinm rTMP, rALT, 8, 24, 31 - stbu rTMP, 1(rDEST) - blr -#else - rlwinm. rTMP, rALT, 8, 24, 31 - stbu rTMP, 4(rDEST) - beqlr- - rlwinm. rTMP, rALT, 16, 24, 31 - stbu rTMP, 1(rDEST) - beqlr- - rlwinm. rTMP, rALT, 24, 24, 31 - stbu rTMP, 1(rDEST) - beqlr- - stbu rALT, 1(rDEST) - blr -#endif - -/* Oh well. In this case, we just do a byte-by-byte copy. */ - .align 4 - nop -L(unaligned): - lbz rWORD, 0(rSRC) - addi rDEST, rDEST, 3 - cmpwi rWORD, 0 - beq- L(u2) - -L(u0): lbzu rALT, 1(rSRC) - stbu rWORD, 1(rDEST) - cmpwi rALT, 0 - beq- L(u1) - nop /* Let 601 load start of loop. */ - lbzu rWORD, 1(rSRC) - stbu rALT, 1(rDEST) - cmpwi rWORD, 0 - bne+ L(u0) -L(u2): stbu rWORD, 1(rDEST) - blr -L(u1): stbu rALT, 1(rDEST) - blr -END (__stpcpy) - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/powerpc/powerpc32/strchr.S b/sysdeps/powerpc/powerpc32/strchr.S deleted file mode 100644 index 868cbd46aa..0000000000 --- a/sysdeps/powerpc/powerpc32/strchr.S +++ /dev/null @@ -1,146 +0,0 @@ -/* Optimized strchr implementation for PowerPC. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* See strlen.s for comments on how this works. */ - -/* char * [r3] strchr (const char *s [r3] , int c [r4] ) */ - -ENTRY (strchr) - -#define rTMP1 r0 -#define rRTN r3 /* outgoing result */ -#define rSTR r8 /* current word pointer */ -#define rCHR r4 /* byte we're looking for, spread over the whole word */ -#define rWORD r5 /* the current word */ -#define rCLZB rCHR /* leading zero byte count */ -#define rFEFE r6 /* constant 0xfefefeff (-0x01010101) */ -#define r7F7F r7 /* constant 0x7f7f7f7f */ -#define rTMP2 r9 -#define rIGN r10 /* number of bits we should ignore in the first word */ -#define rMASK r11 /* mask with the bits to ignore set to 0 */ -#define rTMP3 r12 -#define rTMP4 rIGN -#define rTMP5 rMASK - - - rlwimi rCHR, rCHR, 8, 16, 23 - li rMASK, -1 - rlwimi rCHR, rCHR, 16, 0, 15 - rlwinm rIGN, rRTN, 3, 27, 28 - lis rFEFE, -0x101 - lis r7F7F, 0x7f7f - clrrwi rSTR, rRTN, 2 - addi rFEFE, rFEFE, -0x101 - addi r7F7F, r7F7F, 0x7f7f -/* Test the first (partial?) word. */ - lwz rWORD, 0(rSTR) -#ifdef __LITTLE_ENDIAN__ - slw rMASK, rMASK, rIGN -#else - srw rMASK, rMASK, rIGN -#endif - orc rWORD, rWORD, rMASK - add rTMP1, rFEFE, rWORD - nor rTMP2, r7F7F, rWORD - and. rTMP4, rTMP1, rTMP2 - xor rTMP3, rCHR, rWORD - orc rTMP3, rTMP3, rMASK - b L(loopentry) - -/* The loop. */ - -L(loop): - lwzu rWORD, 4(rSTR) - and. rTMP5, rTMP1, rTMP2 -/* Test for 0. */ - add rTMP1, rFEFE, rWORD /* x - 0x01010101. */ - nor rTMP2, r7F7F, rWORD /* ~(x | 0x7f7f7f7f) == ~x & 0x80808080. */ - bne L(foundit) - and. rTMP4, rTMP1, rTMP2 /* (x - 0x01010101) & ~x & 0x80808080. */ -/* Start test for the bytes we're looking for. */ - xor rTMP3, rCHR, rWORD -L(loopentry): - add rTMP1, rFEFE, rTMP3 - nor rTMP2, r7F7F, rTMP3 - beq L(loop) - -/* There is a zero byte in the word, but may also be a matching byte (either - before or after the zero byte). In fact, we may be looking for a - zero byte, in which case we return a match. */ - and. rTMP5, rTMP1, rTMP2 - li rRTN, 0 - beqlr -/* At this point: - rTMP5 bytes are 0x80 for each match of c, 0 otherwise. - rTMP4 bytes are 0x80 for each match of 0, 0 otherwise. - But there may be false matches in the next most significant byte from - a true match due to carries. This means we need to recalculate the - matches using a longer method for big-endian. */ -#ifdef __LITTLE_ENDIAN__ - addi rTMP1, rTMP5, -1 - andc rTMP1, rTMP1, rTMP5 - cntlzw rCLZB, rTMP1 - addi rTMP2, rTMP4, -1 - andc rTMP2, rTMP2, rTMP4 - cmplw rTMP1, rTMP2 - bgtlr - subfic rCLZB, rCLZB, 32-7 -#else -/* I think we could reduce this by two instructions by keeping the "nor" - results from the loop for reuse here. See strlen.S tail. Similarly - one instruction could be pruned from L(foundit). */ - and rFEFE, r7F7F, rWORD - or rTMP5, r7F7F, rWORD - and rTMP1, r7F7F, rTMP3 - or rTMP4, r7F7F, rTMP3 - add rFEFE, rFEFE, r7F7F - add rTMP1, rTMP1, r7F7F - nor rWORD, rTMP5, rFEFE - nor rTMP2, rTMP4, rTMP1 - cntlzw rCLZB, rTMP2 - cmplw rWORD, rTMP2 - bgtlr -#endif - srwi rCLZB, rCLZB, 3 - add rRTN, rSTR, rCLZB - blr - -L(foundit): -#ifdef __LITTLE_ENDIAN__ - addi rTMP1, rTMP5, -1 - andc rTMP1, rTMP1, rTMP5 - cntlzw rCLZB, rTMP1 - subfic rCLZB, rCLZB, 32-7-32 - srawi rCLZB, rCLZB, 3 -#else - and rTMP1, r7F7F, rTMP3 - or rTMP4, r7F7F, rTMP3 - add rTMP1, rTMP1, r7F7F - nor rTMP2, rTMP4, rTMP1 - cntlzw rCLZB, rTMP2 - subi rSTR, rSTR, 4 - srwi rCLZB, rCLZB, 3 -#endif - add rRTN, rSTR, rCLZB - blr -END (strchr) - -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/powerpc/powerpc32/strcmp.S b/sysdeps/powerpc/powerpc32/strcmp.S deleted file mode 100644 index 52c4bbc1f2..0000000000 --- a/sysdeps/powerpc/powerpc32/strcmp.S +++ /dev/null @@ -1,150 +0,0 @@ -/* Optimized strcmp implementation for PowerPC. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* See strlen.s for comments on how the end-of-string testing works. */ - -/* int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) */ - -EALIGN (strcmp, 4, 0) - -#define rTMP2 r0 -#define rRTN r3 -#define rSTR1 r3 /* first string arg */ -#define rSTR2 r4 /* second string arg */ -#define rWORD1 r5 /* current word in s1 */ -#define rWORD2 r6 /* current word in s2 */ -#define rFEFE r7 /* constant 0xfefefeff (-0x01010101) */ -#define r7F7F r8 /* constant 0x7f7f7f7f */ -#define rNEG r9 /* ~(word in s1 | 0x7f7f7f7f) */ -#define rBITDIF r10 /* bits that differ in s1 & s2 words */ -#define rTMP r11 - - - or rTMP, rSTR2, rSTR1 - clrlwi. rTMP, rTMP, 30 - lis rFEFE, -0x101 - bne L(unaligned) - - lwz rWORD1, 0(rSTR1) - lwz rWORD2, 0(rSTR2) - lis r7F7F, 0x7f7f - addi rFEFE, rFEFE, -0x101 - addi r7F7F, r7F7F, 0x7f7f - b L(g1) - -L(g0): lwzu rWORD1, 4(rSTR1) - bne cr1, L(different) - lwzu rWORD2, 4(rSTR2) -L(g1): add rTMP, rFEFE, rWORD1 - nor rNEG, r7F7F, rWORD1 - and. rTMP, rTMP, rNEG - cmpw cr1, rWORD1, rWORD2 - beq+ L(g0) - -/* OK. We've hit the end of the string. We need to be careful that - we don't compare two strings as different because of gunk beyond - the end of the strings... */ -#ifdef __LITTLE_ENDIAN__ -L(endstring): - addi rTMP2, rTMP, -1 - andc rTMP2, rTMP2, rTMP - rlwimi rTMP2, rTMP2, 1, 0, 30 - and rWORD2, rWORD2, rTMP2 /* Mask off gunk. */ - and rWORD1, rWORD1, rTMP2 - rlwinm rTMP2, rWORD2, 8, 0xffffffff /* Byte reverse word. */ - rlwinm rTMP, rWORD1, 8, 0xffffffff - rlwimi rTMP2, rWORD2, 24, 0, 7 - rlwimi rTMP, rWORD1, 24, 0, 7 - rlwimi rTMP2, rWORD2, 24, 16, 23 - rlwimi rTMP, rWORD1, 24, 16, 23 - xor. rBITDIF, rTMP, rTMP2 - sub rRTN, rTMP, rTMP2 - bgelr+ - ori rRTN, rTMP2, 1 - blr - -L(different): - lwz rWORD1, -4(rSTR1) - rlwinm rTMP2, rWORD2, 8, 0xffffffff /* Byte reverse word. */ - rlwinm rTMP, rWORD1, 8, 0xffffffff - rlwimi rTMP2, rWORD2, 24, 0, 7 - rlwimi rTMP, rWORD1, 24, 0, 7 - rlwimi rTMP2, rWORD2, 24, 16, 23 - rlwimi rTMP, rWORD1, 24, 16, 23 - xor. rBITDIF, rTMP, rTMP2 - sub rRTN, rTMP, rTMP2 - bgelr+ - ori rRTN, rTMP2, 1 - blr - -#else -L(endstring): - and rTMP, r7F7F, rWORD1 - beq cr1, L(equal) - add rTMP, rTMP, r7F7F - xor. rBITDIF, rWORD1, rWORD2 - andc rNEG, rNEG, rTMP - blt- L(highbit) - cntlzw rBITDIF, rBITDIF - cntlzw rNEG, rNEG - addi rNEG, rNEG, 7 - cmpw cr1, rNEG, rBITDIF - sub rRTN, rWORD1, rWORD2 - bgelr+ cr1 -L(equal): - li rRTN, 0 - blr - -L(different): - lwz rWORD1, -4(rSTR1) - xor. rBITDIF, rWORD1, rWORD2 - sub rRTN, rWORD1, rWORD2 - bgelr+ -L(highbit): - ori rRTN, rWORD2, 1 - blr -#endif - -/* Oh well. In this case, we just do a byte-by-byte comparison. */ - .align 4 -L(unaligned): - lbz rWORD1, 0(rSTR1) - lbz rWORD2, 0(rSTR2) - b L(u1) - -L(u0): lbzu rWORD1, 1(rSTR1) - bne- L(u4) - lbzu rWORD2, 1(rSTR2) -L(u1): cmpwi cr1, rWORD1, 0 - beq- cr1, L(u3) - cmpw rWORD1, rWORD2 - bne- L(u3) - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) - cmpwi cr1, rWORD1, 0 - cmpw rWORD1, rWORD2 - bne+ cr1, L(u0) -L(u3): sub rRTN, rWORD1, rWORD2 - blr -L(u4): lbz rWORD1, -1(rSTR1) - sub rRTN, rWORD1, rWORD2 - blr -END (strcmp) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/powerpc/powerpc32/strcpy.S b/sysdeps/powerpc/powerpc32/strcpy.S deleted file mode 100644 index c7af830dda..0000000000 --- a/sysdeps/powerpc/powerpc32/strcpy.S +++ /dev/null @@ -1,117 +0,0 @@ -/* Optimized strcpy implementation for PowerPC. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* See strlen.s for comments on how the end-of-string testing works. */ - -/* char * [r3] strcpy (char *dest [r3], const char *src [r4]) */ - -EALIGN (strcpy, 4, 0) - -#define rTMP r0 -#define rRTN r3 /* incoming DEST arg preserved as result */ -#define rSRC r4 /* pointer to previous word in src */ -#define rDEST r5 /* pointer to previous word in dest */ -#define rWORD r6 /* current word from src */ -#define rFEFE r7 /* constant 0xfefefeff (-0x01010101) */ -#define r7F7F r8 /* constant 0x7f7f7f7f */ -#define rNEG r9 /* ~(word in s1 | 0x7f7f7f7f) */ -#define rALT r10 /* alternate word from src */ - - - or rTMP, rSRC, rRTN - clrlwi. rTMP, rTMP, 30 - addi rDEST, rRTN, -4 - bne L(unaligned) - - lis rFEFE, -0x101 - lis r7F7F, 0x7f7f - lwz rWORD, 0(rSRC) - addi rFEFE, rFEFE, -0x101 - addi r7F7F, r7F7F, 0x7f7f - b L(g2) - -L(g0): lwzu rALT, 4(rSRC) - stwu rWORD, 4(rDEST) - add rTMP, rFEFE, rALT - nor rNEG, r7F7F, rALT - and. rTMP, rTMP, rNEG - bne- L(g1) - lwzu rWORD, 4(rSRC) - stwu rALT, 4(rDEST) -L(g2): add rTMP, rFEFE, rWORD - nor rNEG, r7F7F, rWORD - and. rTMP, rTMP, rNEG - beq+ L(g0) - - mr rALT, rWORD -/* We've hit the end of the string. Do the rest byte-by-byte. */ -L(g1): -#ifdef __LITTLE_ENDIAN__ - rlwinm. rTMP, rALT, 0, 24, 31 - stb rALT, 4(rDEST) - beqlr- - rlwinm. rTMP, rALT, 24, 24, 31 - stb rTMP, 5(rDEST) - beqlr- - rlwinm. rTMP, rALT, 16, 24, 31 - stb rTMP, 6(rDEST) - beqlr- - rlwinm rTMP, rALT, 8, 24, 31 - stb rTMP, 7(rDEST) - blr -#else - rlwinm. rTMP, rALT, 8, 24, 31 - stb rTMP, 4(rDEST) - beqlr- - rlwinm. rTMP, rALT, 16, 24, 31 - stb rTMP, 5(rDEST) - beqlr- - rlwinm. rTMP, rALT, 24, 24, 31 - stb rTMP, 6(rDEST) - beqlr- - stb rALT, 7(rDEST) - blr -#endif - -/* Oh well. In this case, we just do a byte-by-byte copy. */ - .align 4 - nop -L(unaligned): - lbz rWORD, 0(rSRC) - addi rDEST, rRTN, -1 - cmpwi rWORD, 0 - beq- L(u2) - -L(u0): lbzu rALT, 1(rSRC) - stbu rWORD, 1(rDEST) - cmpwi rALT, 0 - beq- L(u1) - nop /* Let 601 load start of loop. */ - lbzu rWORD, 1(rSRC) - stbu rALT, 1(rDEST) - cmpwi rWORD, 0 - bne+ L(u0) -L(u2): stb rWORD, 1(rDEST) - blr -L(u1): stb rALT, 1(rDEST) - blr - -END (strcpy) -libc_hidden_builtin_def (strcpy) diff --git a/sysdeps/powerpc/powerpc32/strlen.S b/sysdeps/powerpc/powerpc32/strlen.S deleted file mode 100644 index fa245f0760..0000000000 --- a/sysdeps/powerpc/powerpc32/strlen.S +++ /dev/null @@ -1,190 +0,0 @@ -/* Optimized strlen implementation for PowerPC. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* The algorithm here uses the following techniques: - - 1) Given a word 'x', we can test to see if it contains any 0 bytes - by subtracting 0x01010101, and seeing if any of the high bits of each - byte changed from 0 to 1. This works because the least significant - 0 byte must have had no incoming carry (otherwise it's not the least - significant), so it is 0x00 - 0x01 == 0xff. For all other - byte values, either they have the high bit set initially, or when - 1 is subtracted you get a value in the range 0x00-0x7f, none of which - have their high bit set. The expression here is - (x + 0xfefefeff) & ~(x | 0x7f7f7f7f), which gives 0x00000000 when - there were no 0x00 bytes in the word. You get 0x80 in bytes that - match, but possibly false 0x80 matches in the next more significant - byte to a true match due to carries. For little-endian this is - of no consequence since the least significant match is the one - we're interested in, but big-endian needs method 2 to find which - byte matches. - - 2) Given a word 'x', we can test to see _which_ byte was zero by - calculating ~(((x & 0x7f7f7f7f) + 0x7f7f7f7f) | x | 0x7f7f7f7f). - This produces 0x80 in each byte that was zero, and 0x00 in all - the other bytes. The '| 0x7f7f7f7f' clears the low 7 bits in each - byte, and the '| x' part ensures that bytes with the high bit set - produce 0x00. The addition will carry into the high bit of each byte - iff that byte had one of its low 7 bits set. We can then just see - which was the most significant bit set and divide by 8 to find how - many to add to the index. - This is from the book 'The PowerPC Compiler Writer's Guide', - by Steve Hoxey, Faraydon Karim, Bill Hay and Hank Warren. - - We deal with strings not aligned to a word boundary by taking the - first word and ensuring that bytes not part of the string - are treated as nonzero. To allow for memory latency, we unroll the - loop a few times, being careful to ensure that we do not read ahead - across cache line boundaries. - - Questions to answer: - 1) How long are strings passed to strlen? If they're often really long, - we should probably use cache management instructions and/or unroll the - loop more. If they're often quite short, it might be better to use - fact (2) in the inner loop than have to recalculate it. - 2) How popular are bytes with the high bit set? If they are very rare, - on some processors it might be useful to use the simpler expression - ~((x - 0x01010101) | 0x7f7f7f7f) (that is, on processors with only one - ALU), but this fails when any character has its high bit set. */ - -/* Some notes on register usage: Under the SVR4 ABI, we can use registers - 0 and 3 through 12 (so long as we don't call any procedures) without - saving them. We can also use registers 14 through 31 if we save them. - We can't use r1 (it's the stack pointer), r2 nor r13 because the user - program may expect them to hold their usual value if we get sent - a signal. Integer parameters are passed in r3 through r10. - We can use condition registers cr0, cr1, cr5, cr6, and cr7 without saving - them, the others we must save. */ - -/* int [r3] strlen (char *s [r3]) */ - -ENTRY (strlen) - -#define rTMP4 r0 -#define rRTN r3 /* incoming STR arg, outgoing result */ -#define rSTR r4 /* current string position */ -#define rPADN r5 /* number of padding bits we prepend to the - string to make it start at a word boundary */ -#define rFEFE r6 /* constant 0xfefefeff (-0x01010101) */ -#define r7F7F r7 /* constant 0x7f7f7f7f */ -#define rWORD1 r8 /* current string word */ -#define rWORD2 r9 /* next string word */ -#define rMASK r9 /* mask for first string word */ -#define rTMP1 r10 -#define rTMP2 r11 -#define rTMP3 r12 - - - clrrwi rSTR, rRTN, 2 - lis r7F7F, 0x7f7f - rlwinm rPADN, rRTN, 3, 27, 28 - lwz rWORD1, 0(rSTR) - li rMASK, -1 - addi r7F7F, r7F7F, 0x7f7f -/* We use method (2) on the first two words, because rFEFE isn't - required which reduces setup overhead. Also gives a faster return - for small strings on big-endian due to needing to recalculate with - method (2) anyway. */ -#ifdef __LITTLE_ENDIAN__ - slw rMASK, rMASK, rPADN -#else - srw rMASK, rMASK, rPADN -#endif - and rTMP1, r7F7F, rWORD1 - or rTMP2, r7F7F, rWORD1 - add rTMP1, rTMP1, r7F7F - nor rTMP3, rTMP2, rTMP1 - and. rTMP3, rTMP3, rMASK - mtcrf 0x01, rRTN - bne L(done0) - lis rFEFE, -0x101 - addi rFEFE, rFEFE, -0x101 -/* Are we now aligned to a doubleword boundary? */ - bt 29, L(loop) - -/* Handle second word of pair. */ -/* Perhaps use method (1) here for little-endian, saving one instruction? */ - lwzu rWORD1, 4(rSTR) - and rTMP1, r7F7F, rWORD1 - or rTMP2, r7F7F, rWORD1 - add rTMP1, rTMP1, r7F7F - nor. rTMP3, rTMP2, rTMP1 - bne L(done0) - -/* The loop. */ - -L(loop): - lwz rWORD1, 4(rSTR) - lwzu rWORD2, 8(rSTR) - add rTMP1, rFEFE, rWORD1 - nor rTMP2, r7F7F, rWORD1 - and. rTMP1, rTMP1, rTMP2 - add rTMP3, rFEFE, rWORD2 - nor rTMP4, r7F7F, rWORD2 - bne L(done1) - and. rTMP3, rTMP3, rTMP4 - beq L(loop) - -#ifndef __LITTLE_ENDIAN__ - and rTMP1, r7F7F, rWORD2 - add rTMP1, rTMP1, r7F7F - andc rTMP3, rTMP4, rTMP1 - b L(done0) - -L(done1): - and rTMP1, r7F7F, rWORD1 - subi rSTR, rSTR, 4 - add rTMP1, rTMP1, r7F7F - andc rTMP3, rTMP2, rTMP1 - -/* When we get to here, rSTR points to the first word in the string that - contains a zero byte, and rTMP3 has 0x80 for bytes that are zero, - and 0x00 otherwise. */ -L(done0): - cntlzw rTMP3, rTMP3 - subf rTMP1, rRTN, rSTR - srwi rTMP3, rTMP3, 3 - add rRTN, rTMP1, rTMP3 - blr -#else - -L(done0): - addi rTMP1, rTMP3, -1 /* Form a mask from trailing zeros. */ - andc rTMP1, rTMP1, rTMP3 - cntlzw rTMP1, rTMP1 /* Count bits not in the mask. */ - subf rTMP3, rRTN, rSTR - subfic rTMP1, rTMP1, 32-7 - srwi rTMP1, rTMP1, 3 - add rRTN, rTMP1, rTMP3 - blr - -L(done1): - addi rTMP3, rTMP1, -1 - andc rTMP3, rTMP3, rTMP1 - cntlzw rTMP3, rTMP3 - subf rTMP1, rRTN, rSTR - subfic rTMP3, rTMP3, 32-7-32 - srawi rTMP3, rTMP3, 3 - add rRTN, rTMP1, rTMP3 - blr -#endif - -END (strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/powerpc/powerpc32/strncmp.S b/sysdeps/powerpc/powerpc32/strncmp.S deleted file mode 100644 index dadc90d661..0000000000 --- a/sysdeps/powerpc/powerpc32/strncmp.S +++ /dev/null @@ -1,181 +0,0 @@ -/* Optimized strcmp implementation for PowerPC32. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* See strlen.s for comments on how the end-of-string testing works. */ - -/* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */ - -EALIGN (strncmp, 4, 0) - -#define rTMP2 r0 -#define rRTN r3 -#define rSTR1 r3 /* first string arg */ -#define rSTR2 r4 /* second string arg */ -#define rN r5 /* max string length */ -#define rWORD1 r6 /* current word in s1 */ -#define rWORD2 r7 /* current word in s2 */ -#define rFEFE r8 /* constant 0xfefefeff (-0x01010101) */ -#define r7F7F r9 /* constant 0x7f7f7f7f */ -#define rNEG r10 /* ~(word in s1 | 0x7f7f7f7f) */ -#define rBITDIF r11 /* bits that differ in s1 & s2 words */ -#define rTMP r12 - - dcbt 0,rSTR1 - or rTMP, rSTR2, rSTR1 - lis r7F7F, 0x7f7f - dcbt 0,rSTR2 - clrlwi. rTMP, rTMP, 30 - cmplwi cr1, rN, 0 - lis rFEFE, -0x101 - bne L(unaligned) -/* We are word aligned so set up for two loops. first a word - loop, then fall into the byte loop if any residual. */ - srwi. rTMP, rN, 2 - clrlwi rN, rN, 30 - addi rFEFE, rFEFE, -0x101 - addi r7F7F, r7F7F, 0x7f7f - cmplwi cr1, rN, 0 - beq L(unaligned) - - mtctr rTMP /* Power4 wants mtctr 1st in dispatch group. */ - lwz rWORD1, 0(rSTR1) - lwz rWORD2, 0(rSTR2) - b L(g1) - -L(g0): - lwzu rWORD1, 4(rSTR1) - bne- cr1, L(different) - lwzu rWORD2, 4(rSTR2) -L(g1): add rTMP, rFEFE, rWORD1 - nor rNEG, r7F7F, rWORD1 - bdz L(tail) - and. rTMP, rTMP, rNEG - cmpw cr1, rWORD1, rWORD2 - beq+ L(g0) - -/* OK. We've hit the end of the string. We need to be careful that - we don't compare two strings as different because of gunk beyond - the end of the strings... */ - -#ifdef __LITTLE_ENDIAN__ -L(endstring): - slwi rTMP, rTMP, 1 - addi rTMP2, rTMP, -1 - andc rTMP2, rTMP2, rTMP - and rWORD2, rWORD2, rTMP2 /* Mask off gunk. */ - and rWORD1, rWORD1, rTMP2 - rlwinm rTMP2, rWORD2, 8, 0xffffffff /* Byte reverse word. */ - rlwinm rTMP, rWORD1, 8, 0xffffffff - rlwimi rTMP2, rWORD2, 24, 0, 7 - rlwimi rTMP, rWORD1, 24, 0, 7 - rlwimi rTMP2, rWORD2, 24, 16, 23 - rlwimi rTMP, rWORD1, 24, 16, 23 - xor. rBITDIF, rTMP, rTMP2 - sub rRTN, rTMP, rTMP2 - bgelr+ - ori rRTN, rTMP2, 1 - blr - -L(different): - lwz rWORD1, -4(rSTR1) - rlwinm rTMP2, rWORD2, 8, 0xffffffff /* Byte reverse word. */ - rlwinm rTMP, rWORD1, 8, 0xffffffff - rlwimi rTMP2, rWORD2, 24, 0, 7 - rlwimi rTMP, rWORD1, 24, 0, 7 - rlwimi rTMP2, rWORD2, 24, 16, 23 - rlwimi rTMP, rWORD1, 24, 16, 23 - xor. rBITDIF, rTMP, rTMP2 - sub rRTN, rTMP, rTMP2 - bgelr+ - ori rRTN, rTMP2, 1 - blr - -#else -L(endstring): - and rTMP, r7F7F, rWORD1 - beq cr1, L(equal) - add rTMP, rTMP, r7F7F - xor. rBITDIF, rWORD1, rWORD2 - andc rNEG, rNEG, rTMP - blt- L(highbit) - cntlzw rBITDIF, rBITDIF - cntlzw rNEG, rNEG - addi rNEG, rNEG, 7 - cmpw cr1, rNEG, rBITDIF - sub rRTN, rWORD1, rWORD2 - bgelr+ cr1 -L(equal): - li rRTN, 0 - blr - -L(different): - lwz rWORD1, -4(rSTR1) - xor. rBITDIF, rWORD1, rWORD2 - sub rRTN, rWORD1, rWORD2 - bgelr+ -L(highbit): - ori rRTN, rWORD2, 1 - blr -#endif - -/* Oh well. In this case, we just do a byte-by-byte comparison. */ - .align 4 -L(tail): - and. rTMP, rTMP, rNEG - cmpw cr1, rWORD1, rWORD2 - bne- L(endstring) - addi rSTR1, rSTR1, 4 - bne- cr1, L(different) - addi rSTR2, rSTR2, 4 - cmplwi cr1, rN, 0 -L(unaligned): - mtctr rN /* Power4 wants mtctr 1st in dispatch group */ - bgt cr1, L(uz) -L(ux): - li rRTN, 0 - blr - .align 4 -L(uz): - lbz rWORD1, 0(rSTR1) - lbz rWORD2, 0(rSTR2) - nop - b L(u1) -L(u0): - lbzu rWORD2, 1(rSTR2) -L(u1): - bdz L(u3) - cmpwi cr1, rWORD1, 0 - cmpw rWORD1, rWORD2 - beq- cr1, L(u3) - lbzu rWORD1, 1(rSTR1) - bne- L(u2) - lbzu rWORD2, 1(rSTR2) - bdz L(u3) - cmpwi cr1, rWORD1, 0 - cmpw rWORD1, rWORD2 - bne- L(u3) - lbzu rWORD1, 1(rSTR1) - bne+ cr1, L(u0) - -L(u2): lbzu rWORD1, -1(rSTR1) -L(u3): sub rRTN, rWORD1, rWORD2 - blr -END (strncmp) -libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/powerpc/powerpc32/sub_n.S b/sysdeps/powerpc/powerpc32/sub_n.S deleted file mode 100644 index 659f348079..0000000000 --- a/sysdeps/powerpc/powerpc32/sub_n.S +++ /dev/null @@ -1,68 +0,0 @@ -/* Subtract two limb vectors of equal, non-zero length for PowerPC. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* mp_limb_t mpn_sub_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr, - mp_size_t size) - Calculate s1-s2 and put result in res_ptr; return borrow, 0 or 1. */ - -/* Note on optimisation: This code is optimal for the 601. Almost every other - possible 2-unrolled inner loop will not be. Also, watch out for the - alignment... */ - -EALIGN (__mpn_sub_n, 3, 1) - -/* Set up for loop below. */ - mtcrf 0x01,r6 - srwi. r7,r6,1 - mtctr r7 - bt 31,L(2) - -/* Set the carry (clear the borrow). */ - subfc r0,r0,r0 -/* Adjust pointers for loop. */ - addi r3,r3,-4 - addi r4,r4,-4 - addi r5,r5,-4 - b L(0) - -L(2): lwz r7,0(r5) - lwz r6,0(r4) - subfc r6,r7,r6 - stw r6,0(r3) - beq L(1) - -/* Align start of loop to an odd word boundary to guarantee that the - last two words can be fetched in one access (for 601). This turns - out to be important. */ -L(0): - lwz r9,4(r4) - lwz r8,4(r5) - lwzu r6,8(r4) - lwzu r7,8(r5) - subfe r8,r8,r9 - stw r8,4(r3) - subfe r6,r7,r6 - stwu r6,8(r3) - bdnz L(0) -/* Return the borrow. */ -L(1): subfe r3,r3,r3 - neg r3,r3 - blr -END (__mpn_sub_n) diff --git a/sysdeps/powerpc/powerpc32/submul_1.S b/sysdeps/powerpc/powerpc32/submul_1.S deleted file mode 100644 index c1183c40f9..0000000000 --- a/sysdeps/powerpc/powerpc32/submul_1.S +++ /dev/null @@ -1,51 +0,0 @@ -/* Multiply a limb vector by a single limb, for PowerPC. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* mp_limb_t mpn_submul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr, - mp_size_t s1_size, mp_limb_t s2_limb) - Calculate res-s1*s2 and put result back in res; return carry. */ - -ENTRY (__mpn_submul_1) - mtctr r5 - - lwz r0,0(r4) - mullw r7,r0,r6 - mulhwu r10,r0,r6 - lwz r9,0(r3) - subf r8,r7,r9 - addc r7,r7,r8 # invert cy (r7 is junk) - addi r3,r3,-4 # adjust res_ptr - bdz L(1) - -L(0): lwzu r0,4(r4) - stwu r8,4(r3) - mullw r8,r0,r6 - adde r7,r8,r10 - mulhwu r10,r0,r6 - lwz r9,4(r3) - addze r10,r10 - subf r8,r7,r9 - addc r7,r7,r8 # invert cy (r7 is junk) - bdnz L(0) - -L(1): stw r8,4(r3) - addze r3,r10 - blr -END (__mpn_submul_1) diff --git a/sysdeps/powerpc/powerpc32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h deleted file mode 100644 index dbb3141621..0000000000 --- a/sysdeps/powerpc/powerpc32/symbol-hacks.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Hacks needed for symbol manipulation. powerpc version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include_next "symbol-hacks.h" diff --git a/sysdeps/powerpc/powerpc32/sysdep.h b/sysdeps/powerpc/powerpc32/sysdep.h deleted file mode 100644 index f92ab2cded..0000000000 --- a/sysdeps/powerpc/powerpc32/sysdep.h +++ /dev/null @@ -1,174 +0,0 @@ -/* Assembly macros for 32-bit PowerPC. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef __ASSEMBLER__ - -/* If compiled for profiling, call `_mcount' at the start of each - function. */ -#ifdef PROF -/* The mcount code relies on a the return address being on the stack - to locate our caller and so it can restore it; so store one just - for its benefit. */ -# define CALL_MCOUNT \ - mflr r0; \ - stw r0,4(r1); \ - cfi_offset (lr, 4); \ - bl JUMPTARGET(_mcount); -#else /* PROF */ -# define CALL_MCOUNT /* Do nothing. */ -#endif /* PROF */ - -#define ENTRY(name) \ - .globl C_SYMBOL_NAME(name); \ - .type C_SYMBOL_NAME(name),@function; \ - .align ALIGNARG(2); \ - C_LABEL(name) \ - cfi_startproc; \ - CALL_MCOUNT - -/* helper macro for accessing the 32-bit powerpc GOT. */ - -#define SETUP_GOT_ACCESS(regname,GOT_LABEL) \ - bcl 20,31,GOT_LABEL ; \ -GOT_LABEL: ; \ - mflr (regname) - -#define EALIGN_W_0 /* No words to insert. */ -#define EALIGN_W_1 nop -#define EALIGN_W_2 nop;nop -#define EALIGN_W_3 nop;nop;nop -#define EALIGN_W_4 EALIGN_W_3;nop -#define EALIGN_W_5 EALIGN_W_4;nop -#define EALIGN_W_6 EALIGN_W_5;nop -#define EALIGN_W_7 EALIGN_W_6;nop - -/* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes - past a 2^align boundary. */ -#ifdef PROF -# define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(name); \ - .type C_SYMBOL_NAME(name),@function; \ - .align ALIGNARG(2); \ - C_LABEL(name) \ - cfi_startproc; \ - CALL_MCOUNT \ - b 0f; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - 0: -#else /* PROF */ -# define EALIGN(name, alignt, words) \ - .globl C_SYMBOL_NAME(name); \ - .type C_SYMBOL_NAME(name),@function; \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ - C_LABEL(name) \ - cfi_startproc; -#endif - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(name) - -#if ! IS_IN(rtld) && defined (ENABLE_LOCK_ELISION) -# define ABORT_TRANSACTION \ - cmpwi 2,0; \ - beq 1f; \ - lwz 0,TM_CAPABLE(2); \ - cmpwi 0,0; \ - beq 1f; \ - li 11,_ABORT_SYSCALL; \ - tabort. 11; \ - .align 4; \ -1: -#else -# define ABORT_TRANSACTION -#endif - -#define DO_CALL(syscall) \ - ABORT_TRANSACTION \ - li 0,syscall; \ - sc - -#undef JUMPTARGET -#ifdef PIC -# define JUMPTARGET(name) name##@plt -#else -# define JUMPTARGET(name) name -#endif - -#if defined SHARED && defined PIC && !defined NO_HIDDEN -# undef HIDDEN_JUMPTARGET -# define HIDDEN_JUMPTARGET(name) __GI_##name##@local -#endif - -#define PSEUDO(name, syscall_name, args) \ - .section ".text"; \ - ENTRY (name) \ - DO_CALL (SYS_ify (syscall_name)); - -#define PSEUDO_RET \ - bnslr+; \ - b __syscall_error@local -#define ret PSEUDO_RET - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - END (name) - -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - .section ".text"; \ - ENTRY (name) \ - DO_CALL (SYS_ify (syscall_name)); - -#define PSEUDO_RET_NOERRNO \ - blr -#define ret_NOERRNO PSEUDO_RET_NOERRNO - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ - END (name) - -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .section ".text"; \ - ENTRY (name) \ - DO_CALL (SYS_ify (syscall_name)); - -#define PSEUDO_RET_ERRVAL \ - blr -#define ret_ERRVAL PSEUDO_RET_ERRVAL - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) \ - END (name) - -/* Local labels stripped out by the linker. */ -#undef L -#define L(x) .L##x - -#define XGLUE(a,b) a##b -#define GLUE(a,b) XGLUE (a,b) -#define GENERATE_GOT_LABEL(name) GLUE (.got_label, name) - -/* Label in text section. */ -#define C_TEXT(name) name - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/powerpc/powerpc32/tls-macros.h b/sysdeps/powerpc/powerpc32/tls-macros.h deleted file mode 100644 index ee0eac4858..0000000000 --- a/sysdeps/powerpc/powerpc32/tls-macros.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Include sysdeps/powerpc/tls-macros.h for __TLS_CALL_CLOBBERS */ -#include_next "tls-macros.h" - -/* PowerPC32 Local Exec TLS access. */ -#define TLS_LE(x) \ - ({ int *__result; \ - asm ("addi %0,2," #x "@tprel" \ - : "=r" (__result)); \ - __result; }) - -/* PowerPC32 Initial Exec TLS access. */ -#define TLS_IE(x) \ - ({ int *__result; \ - asm ("bcl 20,31,1f\n1:\t" \ - "mflr %0\n\t" \ - "addis %0,%0,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t" \ - "addi %0,%0,_GLOBAL_OFFSET_TABLE_-1b@l\n\t" \ - "lwz %0," #x "@got@tprel(%0)\n\t" \ - "add %0,%0," #x "@tls" \ - : "=b" (__result) : \ - : "lr"); \ - __result; }) - -/* PowerPC32 Local Dynamic TLS access. */ -#define TLS_LD(x) \ - ({ int *__result; \ - asm ("bcl 20,31,1f\n1:\t" \ - "mflr 3\n\t" \ - "addis 3,3,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t" \ - "addi 3,3,_GLOBAL_OFFSET_TABLE_-1b@l\n\t" \ - "addi 3,3," #x "@got@tlsld\n\t" \ - "bl __tls_get_addr@plt\n\t" \ - "addi %0,3," #x "@dtprel" \ - : "=r" (__result) : \ - : "3", __TLS_CALL_CLOBBERS); \ - __result; }) - -/* PowerPC32 General Dynamic TLS access. */ -#define TLS_GD(x) \ - ({ register int *__result __asm__ ("r3"); \ - asm ("bcl 20,31,1f\n1:\t" \ - "mflr 3\n\t" \ - "addis 3,3,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t" \ - "addi 3,3,_GLOBAL_OFFSET_TABLE_-1b@l\n\t" \ - "addi 3,3," #x "@got@tlsgd\n\t" \ - "bl __tls_get_addr@plt" \ - : "=r" (__result) : \ - : __TLS_CALL_CLOBBERS); \ - __result; }) diff --git a/sysdeps/powerpc/powerpc32/tst-audit.h b/sysdeps/powerpc/powerpc32/tst-audit.h deleted file mode 100644 index 2e5e0c91d5..0000000000 --- a/sysdeps/powerpc/powerpc32/tst-audit.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. PowerPC32 version. - - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define pltenter la_ppc32_gnu_pltenter -#define pltexit la_ppc32_gnu_pltexit -#define La_regs La_ppc32_regs -#define La_retval La_ppc32_retval -#define int_retval lrv_r3 diff --git a/sysdeps/powerpc/powerpc64/970/Implies b/sysdeps/powerpc/powerpc64/970/Implies deleted file mode 100644 index bedb20b65c..0000000000 --- a/sysdeps/powerpc/powerpc64/970/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc64/power4/fpu -powerpc/powerpc64/power4 diff --git a/sysdeps/powerpc/powerpc64/Implies b/sysdeps/powerpc/powerpc64/Implies deleted file mode 100644 index a8cae95f9d..0000000000 --- a/sysdeps/powerpc/powerpc64/Implies +++ /dev/null @@ -1 +0,0 @@ -wordsize-64 diff --git a/sysdeps/powerpc/powerpc64/Makefile b/sysdeps/powerpc/powerpc64/Makefile deleted file mode 100644 index 9d15db0328..0000000000 --- a/sysdeps/powerpc/powerpc64/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -# Powerpc64 specific build options. -# this is ./sysdeps/powerpc/powerpc64/Makefile - -# Each TOC entry takes 8 bytes and the TOC holds up to 2^16 bytes, -# or 8192 entries. -# If -fpic is not specified, the latest gcc-3.2.1 now generates -# different code for call stubs (without the TOC reload). -# Shared objects need the TOC reload so specify -fpic. -ifeq (yes,$(build-shared)) -pic-ccflag = -fpic -endif - -# These flags prevent FPU or Altivec registers from being used, -# for code called in contexts that is not allowed to touch those registers. -# Stupid GCC requires us to pass all these ridiculous switches. We need to -# pass the -mno-* switches as well to prevent the compiler from attempting -# to emit altivec or vsx instructions, especially when the registers aren't -# available. -no-special-regs := $(sort $(foreach n,40 41 50 51 60 61 62 63 \ - $(foreach m,2 3 4 5 6 7 8 9, \ - 3$m 4$m 5$m),\ - -ffixed-$n)) \ - $(sort $(foreach n,$(foreach m,0 1 2 3 4 5 6 7 8 9,\ - $m 1$m 2$m) 30 31,\ - -ffixed-v$n)) \ - -ffixed-vrsave -ffixed-vscr -mno-altivec -mno-vsx - -# Need to prevent gcc from using fprs in code used during dynamic linking. - -CFLAGS-dl-runtime.os = $(no-special-regs) -CFLAGS-dl-lookup.os = $(no-special-regs) -CFLAGS-dl-misc.os = $(no-special-regs) -CFLAGS-rtld-mempcpy.os = $(no-special-regs) -CFLAGS-rtld-memmove.os = $(no-special-regs) -CFLAGS-rtld-memchr.os = $(no-special-regs) -CFLAGS-rtld-strnlen.os = $(no-special-regs) - -ifeq ($(subdir),elf) -# help gcc inline asm code from dl-machine.h -+cflags += -finline-limit=2000 -endif - -ifeq ($(subdir),gmon) -# The assembly functions assume that fp arg regs are not trashed. -# Compiling with -msoft-float ensures that fp regs are not used -# for moving memory around. -CFLAGS-mcount.c += $(no-special-regs) -sysdep_routines += ppc-mcount -endif diff --git a/sysdeps/powerpc/powerpc64/__longjmp-common.S b/sysdeps/powerpc/powerpc64/__longjmp-common.S deleted file mode 100644 index efda025b41..0000000000 --- a/sysdeps/powerpc/powerpc64/__longjmp-common.S +++ /dev/null @@ -1,183 +0,0 @@ -/* longjmp for PowerPC64. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#define _ASM -#define _SETJMP_H -#ifdef __NO_VMX__ -# include -#else -# include -#endif - -#ifndef __NO_VMX__ - .section ".toc","aw" -.LC__dl_hwcap: -# ifdef SHARED -# if IS_IN (rtld) - /* Inside ld.so we use the local alias to avoid runtime GOT - relocations. */ - .tc _rtld_local_ro[TC],_rtld_local_ro -# else - .tc _rtld_global_ro[TC],_rtld_global_ro -# endif -# else - .tc _dl_hwcap[TC],_dl_hwcap -# endif - .section ".text" -#endif - - .machine "altivec" -ENTRY (__longjmp) - CALL_MCOUNT 2 -#ifndef __NO_VMX__ - ld r5,.LC__dl_hwcap@toc(r2) -# ifdef SHARED - /* Load _rtld-global._dl_hwcap. */ - ld r5,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET(r5) -# else - ld r5,0(r5) /* Load extern _dl_hwcap. */ -# endif - andis. r5,r5,(PPC_FEATURE_HAS_ALTIVEC >> 16) - beq L(no_vmx) - la r5,((JB_VRS)*8)(3) - andi. r6,r5,0xf - lwz r0,((JB_VRSAVE)*8)(3) /* 32-bit VRSAVE. */ - mtspr VRSAVE,r0 - beq+ L(aligned_restore_vmx) - addi r6,r5,16 - lvsl v0,0,r5 - lvx v1,0,r5 - addi r5,r5,32 - lvx v21,0,r6 - vperm v20,v1,v21,v0 -# define load_misaligned_vmx_lo_loaded(loadvr,lovr,shiftvr,loadgpr,addgpr) \ - addi addgpr,addgpr,32; \ - lvx lovr,0,loadgpr; \ - vperm loadvr,loadvr,lovr,shiftvr; - load_misaligned_vmx_lo_loaded(v21,v22,v0,r5,r6) - load_misaligned_vmx_lo_loaded(v22,v23,v0,r6,r5) - load_misaligned_vmx_lo_loaded(v23,v24,v0,r5,r6) - load_misaligned_vmx_lo_loaded(v24,v25,v0,r6,r5) - load_misaligned_vmx_lo_loaded(v25,v26,v0,r5,r6) - load_misaligned_vmx_lo_loaded(v26,v27,v0,r6,r5) - load_misaligned_vmx_lo_loaded(v27,v28,v0,r5,r6) - load_misaligned_vmx_lo_loaded(v28,v29,v0,r6,r5) - load_misaligned_vmx_lo_loaded(v29,v30,v0,r5,r6) - load_misaligned_vmx_lo_loaded(v30,v31,v0,r6,r5) - lvx v1,0,r5 - vperm v31,v31,v1,v0 - b L(no_vmx) -L(aligned_restore_vmx): - addi r6,r5,16 - lvx v20,0,r5 - addi r5,r5,32 - lvx v21,0,r6 - addi r6,r6,32 - lvx v22,0,r5 - addi r5,r5,32 - lvx v23,0,r6 - addi r6,r6,32 - lvx v24,0,r5 - addi r5,r5,32 - lvx v25,0,r6 - addi r6,r6,32 - lvx v26,0,r5 - addi r5,r5,32 - lvx v27,0,r6 - addi r6,r6,32 - lvx v28,0,r5 - addi r5,r5,32 - lvx v29,0,r6 - addi r6,r6,32 - lvx v30,0,r5 - lvx v31,0,r6 -L(no_vmx): -#endif -#if defined PTR_DEMANGLE || defined CHECK_SP - ld r22,(JB_GPR1*8)(r3) -#else - ld r1,(JB_GPR1*8)(r3) -#endif -#ifdef PTR_DEMANGLE -# ifdef CHECK_SP - PTR_DEMANGLE3 (r22, r22, r25) -# else - PTR_DEMANGLE3 (r1, r22, r25) -# endif -#endif -#ifdef CHECK_SP - CHECK_SP (r22) - mr r1,r22 -#endif - ld r2,(JB_GPR2*8)(r3) - ld r0,(JB_LR*8)(r3) - ld r14,((JB_GPRS+0)*8)(r3) - lfd fp14,((JB_FPRS+0)*8)(r3) -#if defined SHARED && !IS_IN (rtld) - std r2,FRAME_TOC_SAVE(r1) /* Restore the callers TOC save area. */ -#endif - ld r15,((JB_GPRS+1)*8)(r3) - lfd fp15,((JB_FPRS+1)*8)(r3) - ld r16,((JB_GPRS+2)*8)(r3) - lfd fp16,((JB_FPRS+2)*8)(r3) - ld r17,((JB_GPRS+3)*8)(r3) - lfd fp17,((JB_FPRS+3)*8)(r3) - ld r18,((JB_GPRS+4)*8)(r3) - lfd fp18,((JB_FPRS+4)*8)(r3) - ld r19,((JB_GPRS+5)*8)(r3) - lfd fp19,((JB_FPRS+5)*8)(r3) - ld r20,((JB_GPRS+6)*8)(r3) - lfd fp20,((JB_FPRS+6)*8)(r3) -#ifdef PTR_DEMANGLE - PTR_DEMANGLE2 (r0, r25) -#endif - /* longjmp/longjmp_target probe expects longjmp first argument (8@3), - second argument (-4@4), and target address (8@0), respectively. */ - LIBC_PROBE (longjmp, 3, 8@3, -4@4, 8@0) - mtlr r0 -/* std r2,FRAME_TOC_SAVE(r1) Restore the TOC save area. */ - ld r21,((JB_GPRS+7)*8)(r3) - lfd fp21,((JB_FPRS+7)*8)(r3) - ld r22,((JB_GPRS+8)*8)(r3) - lfd fp22,((JB_FPRS+8)*8)(r3) - lwz r5,((JB_CR*8)+4)(r3) /* 32-bit CR. */ - ld r23,((JB_GPRS+9)*8)(r3) - lfd fp23,((JB_FPRS+9)*8)(r3) - ld r24,((JB_GPRS+10)*8)(r3) - lfd fp24,((JB_FPRS+10)*8)(r3) - ld r25,((JB_GPRS+11)*8)(r3) - lfd fp25,((JB_FPRS+11)*8)(r3) - mtcrf 0xFF,r5 - ld r26,((JB_GPRS+12)*8)(r3) - lfd fp26,((JB_FPRS+12)*8)(r3) - ld r27,((JB_GPRS+13)*8)(r3) - lfd fp27,((JB_FPRS+13)*8)(r3) - ld r28,((JB_GPRS+14)*8)(r3) - lfd fp28,((JB_FPRS+14)*8)(r3) - ld r29,((JB_GPRS+15)*8)(r3) - lfd fp29,((JB_FPRS+15)*8)(r3) - ld r30,((JB_GPRS+16)*8)(r3) - lfd fp30,((JB_FPRS+16)*8)(r3) - ld r31,((JB_GPRS+17)*8)(r3) - lfd fp31,((JB_FPRS+17)*8)(r3) - LIBC_PROBE (longjmp_target, 3, 8@3, -4@4, 8@0) - mr r3,r4 - blr -END (__longjmp) diff --git a/sysdeps/powerpc/powerpc64/__longjmp.S b/sysdeps/powerpc/powerpc64/__longjmp.S deleted file mode 100644 index 78659d012f..0000000000 --- a/sysdeps/powerpc/powerpc64/__longjmp.S +++ /dev/null @@ -1,39 +0,0 @@ -/* AltiVec/VMX (new) version of __longjmp for PowerPC64. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#if !IS_IN (libc) -/* Build a non-versioned object for rtld-*. */ -# include "__longjmp-common.S" - -#else /* IS_IN (libc) */ -strong_alias (__vmx__longjmp, __longjmp) -# define __longjmp __vmx__longjmp -# include "__longjmp-common.S" - -# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4) -# define __NO_VMX__ -# undef __longjmp -# undef JB_SIZE -# define __longjmp __novmx__longjmp -# include "__longjmp-common.S" -# endif -#endif /* IS_IN (libc) */ diff --git a/sysdeps/powerpc/powerpc64/a2/memcpy.S b/sysdeps/powerpc/powerpc64/a2/memcpy.S deleted file mode 100644 index ff30898df5..0000000000 --- a/sysdeps/powerpc/powerpc64/a2/memcpy.S +++ /dev/null @@ -1,528 +0,0 @@ -/* Optimized memcpy implementation for PowerPC A2. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Michael Brutman . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef MEMCPY -# define MEMCPY memcpy -#endif - -#define PREFETCH_AHEAD 4 /* no cache lines SRC prefetching ahead */ -#define ZERO_AHEAD 2 /* no cache lines DST zeroing ahead */ - - .section ".toc","aw" -.LC0: - .tc __cache_line_size[TC],__cache_line_size - .section ".text" - .align 2 - - - .machine a2 -EALIGN (MEMCPY, 5, 0) - CALL_MCOUNT 3 - - dcbt 0,r4 /* Prefetch ONE SRC cacheline */ - cmpldi cr1,r5,16 /* is size < 16 ? */ - mr r6,r3 /* Copy dest reg to r6; */ - blt+ cr1,L(shortcopy) - - - /* Big copy (16 bytes or more) - - Figure out how far to the nearest quadword boundary, or if we are - on one already. Also get the cache line size. - - r3 - return value (always) - r4 - current source addr - r5 - copy length - r6 - current dest addr - */ - - neg r8,r3 /* LS 4 bits = # bytes to 8-byte dest bdry */ - ld r9,.LC0@toc(r2) /* Get cache line size (part 1) */ - clrldi r8,r8,64-4 /* align to 16byte boundary */ - sub r7,r4,r3 /* compute offset to src from dest */ - lwz r9,0(r9) /* Get cache line size (part 2) */ - cmpldi cr0,r8,0 /* Were we aligned on a 16 byte bdy? */ - addi r10,r9,-1 /* Cache line mask */ - beq+ L(dst_aligned) - - - - /* Destination is not aligned on quadword boundary. Get us to one. - - r3 - return value (always) - r4 - current source addr - r5 - copy length - r6 - current dest addr - r7 - offset to src from dest - r8 - number of bytes to quadword boundary - */ - - mtcrf 0x01,r8 /* put #bytes to boundary into cr7 */ - subf r5,r8,r5 /* adjust remaining len */ - - bf cr7*4+3,1f - lbzx r0,r7,r6 /* copy 1 byte addr */ - stb r0,0(r6) - addi r6,r6,1 -1: - bf cr7*4+2,2f - lhzx r0,r7,r6 /* copy 2 byte addr */ - sth r0,0(r6) - addi r6,r6,2 -2: - bf cr7*4+1,4f - lwzx r0,r7,r6 /* copy 4 byte addr */ - stw r0,0(r6) - addi r6,r6,4 -4: - bf cr7*4+0,8f - ldx r0,r7,r6 /* copy 8 byte addr */ - std r0,0(r6) - addi r6,r6,8 -8: - add r4,r7,r6 /* update src addr */ - - - - /* Dest is quadword aligned now. - - Lots of decisions to make. If we are copying less than a cache - line we won't be here long. If we are not on a cache line - boundary we need to get there. And then we need to figure out - how many cache lines ahead to pre-touch. - - r3 - return value (always) - r4 - current source addr - r5 - copy length - r6 - current dest addr - */ - - - .align 4 -L(dst_aligned): - cmpdi cr0,r9,0 /* Cache line size set? */ - bne+ cr0,L(cachelineset) - -/* __cache_line_size not set: generic byte copy without much optimization */ - clrldi. r0,r5,63 /* If length is odd copy one byte */ - beq L(cachelinenotset_align) - lbz r7,0(r4) /* Read one byte from source */ - addi r5,r5,-1 /* Update length */ - addi r4,r4,1 /* Update source pointer address */ - stb r7,0(r6) /* Store one byte at dest */ - addi r6,r6,1 /* Update dest pointer address */ -L(cachelinenotset_align): - cmpdi cr7,r5,0 /* If length is 0 return */ - beqlr cr7 - ori r2,r2,0 /* Force a new dispatch group */ -L(cachelinenotset_loop): - addic. r5,r5,-2 /* Update length */ - lbz r7,0(r4) /* Load 2 bytes from source */ - lbz r8,1(r4) - addi r4,r4,2 /* Update source pointer address */ - stb r7,0(r6) /* Store 2 bytes on dest */ - stb r8,1(r6) - addi r6,r6,2 /* Update dest pointer address */ - bne L(cachelinenotset_loop) - blr - - -L(cachelineset): - cmpd cr5,r5,r10 /* Less than a cacheline to go? */ - - neg r7,r6 /* How far to next cacheline bdy? */ - - addi r6,r6,-8 /* prepare for stdu */ - cmpdi cr0,r9,128 - addi r4,r4,-8 /* prepare for ldu */ - - - ble+ cr5,L(lessthancacheline) - - beq- cr0,L(big_lines) /* 128 byte line code */ - - - - /* More than a cacheline left to go, and using 64 byte cachelines */ - - clrldi r7,r7,64-6 /* How far to next cacheline bdy? */ - - cmpldi cr6,r7,0 /* Are we on a cacheline bdy already? */ - - /* Reduce total len by what it takes to get to the next cache line */ - subf r5,r7,r5 - srdi r7,r7,4 /* How many qws to get to the line bdy? */ - - /* How many full cache lines to copy after getting to a line bdy? */ - srdi r10,r5,6 - - cmpldi r10,0 /* If no full cache lines to copy ... */ - li r11,0 /* number cachelines to copy with prefetch */ - beq L(nocacheprefetch) - - - /* We are here because we have at least one full cache line to copy, - and therefore some pre-touching to do. */ - - cmpldi r10,PREFETCH_AHEAD - li r12,64+8 /* prefetch distance */ - ble L(lessthanmaxprefetch) - - /* We can only do so much pre-fetching. R11 will have the count of - lines left to prefetch after the initial batch of prefetches - are executed. */ - - subi r11,r10,PREFETCH_AHEAD - li r10,PREFETCH_AHEAD - -L(lessthanmaxprefetch): - mtctr r10 - - /* At this point r10/ctr hold the number of lines to prefetch in this - initial batch, and r11 holds any remainder. */ - -L(prefetchSRC): - dcbt r12,r4 - addi r12,r12,64 - bdnz L(prefetchSRC) - - - /* Prefetching is done, or was not needed. - - cr6 - are we on a cacheline boundary already? - r7 - number of quadwords to the next cacheline boundary - */ - -L(nocacheprefetch): - mtctr r7 - - cmpldi cr1,r5,64 /* Less than a cache line to copy? */ - - /* How many bytes are left after we copy whatever full - cache lines we can get? */ - clrldi r5,r5,64-6 - - beq cr6,L(cachelinealigned) - - - /* Copy quadwords up to the next cacheline boundary */ - -L(aligntocacheline): - ld r9,0x08(r4) - ld r7,0x10(r4) - addi r4,r4,0x10 - std r9,0x08(r6) - stdu r7,0x10(r6) - bdnz L(aligntocacheline) - - - .align 4 -L(cachelinealigned): /* copy while cache lines */ - - blt- cr1,L(lessthancacheline) /* size <64 */ - -L(outerloop): - cmpdi r11,0 - mtctr r11 - beq- L(endloop) - - li r11,64*ZERO_AHEAD +8 /* DCBZ dist */ - - .align 4 - /* Copy whole cachelines, optimized by prefetching SRC cacheline */ -L(loop): /* Copy aligned body */ - dcbt r12,r4 /* PREFETCH SOURCE some cache lines ahead */ - ld r9, 0x08(r4) - dcbz r11,r6 - ld r7, 0x10(r4) - ld r8, 0x18(r4) - ld r0, 0x20(r4) - std r9, 0x08(r6) - std r7, 0x10(r6) - std r8, 0x18(r6) - std r0, 0x20(r6) - ld r9, 0x28(r4) - ld r7, 0x30(r4) - ld r8, 0x38(r4) - ld r0, 0x40(r4) - addi r4, r4,0x40 - std r9, 0x28(r6) - std r7, 0x30(r6) - std r8, 0x38(r6) - stdu r0, 0x40(r6) - - bdnz L(loop) - - -L(endloop): - cmpdi r10,0 - beq- L(endloop2) - mtctr r10 - -L(loop2): /* Copy aligned body */ - ld r9, 0x08(r4) - ld r7, 0x10(r4) - ld r8, 0x18(r4) - ld r0, 0x20(r4) - std r9, 0x08(r6) - std r7, 0x10(r6) - std r8, 0x18(r6) - std r0, 0x20(r6) - ld r9, 0x28(r4) - ld r7, 0x30(r4) - ld r8, 0x38(r4) - ld r0, 0x40(r4) - addi r4, r4,0x40 - std r9, 0x28(r6) - std r7, 0x30(r6) - std r8, 0x38(r6) - stdu r0, 0x40(r6) - - bdnz L(loop2) -L(endloop2): - - - .align 4 -L(lessthancacheline): /* Was there less than cache to do ? */ - cmpldi cr0,r5,16 - srdi r7,r5,4 /* divide size by 16 */ - blt- L(do_lt16) - mtctr r7 - -L(copy_remaining): - ld r8,0x08(r4) - ld r7,0x10(r4) - addi r4,r4,0x10 - std r8,0x08(r6) - stdu r7,0x10(r6) - bdnz L(copy_remaining) - -L(do_lt16): /* less than 16 ? */ - cmpldi cr0,r5,0 /* copy remaining bytes (0-15) */ - beqlr+ /* no rest to copy */ - addi r4,r4,8 - addi r6,r6,8 - -L(shortcopy): /* SIMPLE COPY to handle size =< 15 bytes */ - mtcrf 0x01,r5 - sub r7,r4,r6 - bf- cr7*4+0,8f - ldx r0,r7,r6 /* copy 8 byte */ - std r0,0(r6) - addi r6,r6,8 -8: - bf cr7*4+1,4f - lwzx r0,r7,r6 /* copy 4 byte */ - stw r0,0(r6) - addi r6,r6,4 -4: - bf cr7*4+2,2f - lhzx r0,r7,r6 /* copy 2 byte */ - sth r0,0(r6) - addi r6,r6,2 -2: - bf cr7*4+3,1f - lbzx r0,r7,r6 /* copy 1 byte */ - stb r0,0(r6) -1: - blr - - - - - - /* Similar to above, but for use with 128 byte lines. */ - - -L(big_lines): - - clrldi r7,r7,64-7 /* How far to next cacheline bdy? */ - - cmpldi cr6,r7,0 /* Are we on a cacheline bdy already? */ - - /* Reduce total len by what it takes to get to the next cache line */ - subf r5,r7,r5 - srdi r7,r7,4 /* How many qws to get to the line bdy? */ - - /* How many full cache lines to copy after getting to a line bdy? */ - srdi r10,r5,7 - - cmpldi r10,0 /* If no full cache lines to copy ... */ - li r11,0 /* number cachelines to copy with prefetch */ - beq L(nocacheprefetch_128) - - - /* We are here because we have at least one full cache line to copy, - and therefore some pre-touching to do. */ - - cmpldi r10,PREFETCH_AHEAD - li r12,128+8 /* prefetch distance */ - ble L(lessthanmaxprefetch_128) - - /* We can only do so much pre-fetching. R11 will have the count of - lines left to prefetch after the initial batch of prefetches - are executed. */ - - subi r11,r10,PREFETCH_AHEAD - li r10,PREFETCH_AHEAD - -L(lessthanmaxprefetch_128): - mtctr r10 - - /* At this point r10/ctr hold the number of lines to prefetch in this - initial batch, and r11 holds any remainder. */ - -L(prefetchSRC_128): - dcbt r12,r4 - addi r12,r12,128 - bdnz L(prefetchSRC_128) - - - /* Prefetching is done, or was not needed. - - cr6 - are we on a cacheline boundary already? - r7 - number of quadwords to the next cacheline boundary - */ - -L(nocacheprefetch_128): - mtctr r7 - - cmpldi cr1,r5,128 /* Less than a cache line to copy? */ - - /* How many bytes are left after we copy whatever full - cache lines we can get? */ - clrldi r5,r5,64-7 - - beq cr6,L(cachelinealigned_128) - - - /* Copy quadwords up to the next cacheline boundary */ - -L(aligntocacheline_128): - ld r9,0x08(r4) - ld r7,0x10(r4) - addi r4,r4,0x10 - std r9,0x08(r6) - stdu r7,0x10(r6) - bdnz L(aligntocacheline_128) - - -L(cachelinealigned_128): /* copy while cache lines */ - - blt- cr1,L(lessthancacheline) /* size <128 */ - -L(outerloop_128): - cmpdi r11,0 - mtctr r11 - beq- L(endloop_128) - - li r11,128*ZERO_AHEAD +8 /* DCBZ dist */ - - .align 4 - /* Copy whole cachelines, optimized by prefetching SRC cacheline */ -L(loop_128): /* Copy aligned body */ - dcbt r12,r4 /* PREFETCH SOURCE some cache lines ahead */ - ld r9, 0x08(r4) - dcbz r11,r6 - ld r7, 0x10(r4) - ld r8, 0x18(r4) - ld r0, 0x20(r4) - std r9, 0x08(r6) - std r7, 0x10(r6) - std r8, 0x18(r6) - std r0, 0x20(r6) - ld r9, 0x28(r4) - ld r7, 0x30(r4) - ld r8, 0x38(r4) - ld r0, 0x40(r4) - std r9, 0x28(r6) - std r7, 0x30(r6) - std r8, 0x38(r6) - std r0, 0x40(r6) - ld r9, 0x48(r4) - ld r7, 0x50(r4) - ld r8, 0x58(r4) - ld r0, 0x60(r4) - std r9, 0x48(r6) - std r7, 0x50(r6) - std r8, 0x58(r6) - std r0, 0x60(r6) - ld r9, 0x68(r4) - ld r7, 0x70(r4) - ld r8, 0x78(r4) - ld r0, 0x80(r4) - addi r4, r4,0x80 - std r9, 0x68(r6) - std r7, 0x70(r6) - std r8, 0x78(r6) - stdu r0, 0x80(r6) - - bdnz L(loop_128) - - -L(endloop_128): - cmpdi r10,0 - beq- L(endloop2_128) - mtctr r10 - -L(loop2_128): /* Copy aligned body */ - ld r9, 0x08(r4) - ld r7, 0x10(r4) - ld r8, 0x18(r4) - ld r0, 0x20(r4) - std r9, 0x08(r6) - std r7, 0x10(r6) - std r8, 0x18(r6) - std r0, 0x20(r6) - ld r9, 0x28(r4) - ld r7, 0x30(r4) - ld r8, 0x38(r4) - ld r0, 0x40(r4) - std r9, 0x28(r6) - std r7, 0x30(r6) - std r8, 0x38(r6) - std r0, 0x40(r6) - ld r9, 0x48(r4) - ld r7, 0x50(r4) - ld r8, 0x58(r4) - ld r0, 0x60(r4) - std r9, 0x48(r6) - std r7, 0x50(r6) - std r8, 0x58(r6) - std r0, 0x60(r6) - ld r9, 0x68(r4) - ld r7, 0x70(r4) - ld r8, 0x78(r4) - ld r0, 0x80(r4) - addi r4, r4,0x80 - std r9, 0x68(r6) - std r7, 0x70(r6) - std r8, 0x78(r6) - stdu r0, 0x80(r6) - - bdnz L(loop2_128) -L(endloop2_128): - - b L(lessthancacheline) - - -END_GEN_TB (MEMCPY,TB_TOCLESS) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/powerpc/powerpc64/addmul_1.S b/sysdeps/powerpc/powerpc64/addmul_1.S deleted file mode 100644 index b4b052141d..0000000000 --- a/sysdeps/powerpc/powerpc64/addmul_1.S +++ /dev/null @@ -1,208 +0,0 @@ -/* PowerPC64 __mpn_addmul_1 -- Multiply a limb vector with a limb and add - the result to a second limb vector. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef USE_AS_SUBMUL -# define FUNC __mpn_submul_1 -# define ADDSUBC subfe -# define ADDSUB subfc -#else -# define FUNC __mpn_addmul_1 -# define ADDSUBC adde -# define ADDSUB addc -#endif - -#define RP r3 -#define UP r4 -#define N r5 -#define VL r6 - -EALIGN(FUNC, 5, 0) - std r31, -8(r1) - rldicl. r0, N, 0, 62 - std r30, -16(r1) - cmpdi VL, r0, 2 - std r29, -24(r1) - addi N, N, 3 - std r28, -32(r1) - srdi N, N, 2 - std r27, -40(r1) - mtctr N - beq cr0, L(b00) - blt cr6, L(b01) - beq cr6, L(b10) - -L(b11): ld r9, 0(UP) - ld r28, 0(RP) - mulld r0, r9, VL - mulhdu r12, r9, VL - ADDSUB r0, r0, r28 - std r0, 0(RP) - addi RP, RP, 8 - ld r9, 8(UP) - ld r27, 16(UP) - addi UP, UP, 24 -#ifdef USE_AS_SUBMUL - subfe r11, r11, r11 -#endif - b L(bot) - - .align 4 -L(b00): ld r9, 0(UP) - ld r27, 8(UP) - ld r28, 0(RP) - ld r29, 8(RP) - mulld r0, r9, VL - mulhdu N, r9, VL - mulld r7, r27, VL - mulhdu r8, r27, VL - addc r7, r7, N - addze r12, r8 - ADDSUB r0, r0, r28 - std r0, 0(RP) - ADDSUBC r7, r7, r29 - std r7, 8(RP) - addi RP, RP, 16 - ld r9, 16(UP) - ld r27, 24(UP) - addi UP, UP, 32 -#ifdef USE_AS_SUBMUL - subfe r11, r11, r11 -#endif - b L(bot) - - .align 4 -L(b01): bdnz L(gt1) - ld r9, 0(UP) - ld r11, 0(RP) - mulld r0, r9, VL - mulhdu r8, r9, VL - ADDSUB r0, r0, r11 - std r0, 0(RP) -#ifdef USE_AS_SUBMUL - subfe r11, r11, r11 - addic r11, r11, 1 -#endif - addze RP, r8 - blr - -L(gt1): ld r9, 0(UP) - ld r27, 8(UP) - mulld r0, r9, VL - mulhdu N, r9, VL - mulld r7, r27, VL - mulhdu r8, r27, VL - ld r9, 16(UP) - ld r28, 0(RP) - ld r29, 8(RP) - ld r30, 16(RP) - mulld r11, r9, VL - mulhdu r10, r9, VL - addc r7, r7, N - adde r11, r11, r8 - addze r12, r10 - ADDSUB r0, r0, r28 - std r0, 0(RP) - ADDSUBC r7, r7, r29 - std r7, 8(RP) - ADDSUBC r11, r11, r30 - std r11, 16(RP) - addi RP, RP, 24 - ld r9, 24(UP) - ld r27, 32(UP) - addi UP, UP, 40 -#ifdef USE_AS_SUBMUL - subfe r11, r11, r11 -#endif - b L(bot) - -L(b10): addic r0, r0, r0 - li r12, 0 - ld r9, 0(UP) - ld r27, 8(UP) - bdz L(end) - addi UP, UP, 16 - - .align 4 -L(top): mulld r0, r9, VL - mulhdu N, r9, VL - mulld r7, r27, VL - mulhdu r8, r27, VL - ld r9, 0(UP) - ld r28, 0(RP) - ld r27, 8(UP) - ld r29, 8(RP) - adde r0, r0, r12 - adde r7, r7, N - mulld N, r9, VL - mulhdu r10, r9, VL - mulld r11, r27, VL - mulhdu r12, r27, VL - ld r9, 16(UP) - ld r30, 16(RP) - ld r27, 24(UP) - ld r31, 24(RP) - adde N, N, r8 - adde r11, r11, r10 - addze r12, r12 - ADDSUB r0, r0, r28 - std r0, 0(RP) - ADDSUBC r7, r7, r29 - std r7, 8(RP) - ADDSUBC N, N, r30 - std N, 16(RP) - ADDSUBC r11, r11, r31 - std r11, 24(RP) - addi UP, UP, 32 -#ifdef USE_AS_SUBMUL - subfe r11, r11, r11 -#endif - addi RP, RP, 32 -L(bot): -#ifdef USE_AS_SUBMUL - addic r11, r11, 1 -#endif - bdnz L(top) - -L(end): mulld r0, r9, VL - mulhdu N, r9, VL - mulld r7, r27, VL - mulhdu r8, r27, VL - ld r28, 0(RP) - ld r29, 8(RP) - adde r0, r0, r12 - adde r7, r7, N - addze r8, r8 - ADDSUB r0, r0, r28 - std r0, 0(RP) - ADDSUBC r7, r7, r29 - std r7, 8(RP) -#ifdef USE_AS_SUBMUL - subfe r11, r11, r11 - addic r11, r11, 1 -#endif - addze RP, r8 - ld r31, -8(r1) - ld r30, -16(r1) - ld r29, -24(r1) - ld r28, -32(r1) - ld r27, -40(r1) - blr -END(FUNC) diff --git a/sysdeps/powerpc/powerpc64/atomic-machine.h b/sysdeps/powerpc/powerpc64/atomic-machine.h deleted file mode 100644 index 46df488b3c..0000000000 --- a/sysdeps/powerpc/powerpc64/atomic-machine.h +++ /dev/null @@ -1,242 +0,0 @@ -/* Atomic operations. PowerPC64 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Paul Mackerras , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* POWER6 adds a "Mutex Hint" to the Load and Reserve instruction. - This is a hint to the hardware to expect additional updates adjacent - to the lock word or not. If we are acquiring a Mutex, the hint - should be true. Otherwise we releasing a Mutex or doing a simple - atomic operation. In that case we don't expect additional updates - adjacent to the lock word after the Store Conditional and the hint - should be false. */ - -#if defined _ARCH_PWR6 || defined _ARCH_PWR6X -# define MUTEX_HINT_ACQ ",1" -# define MUTEX_HINT_REL ",0" -#else -# define MUTEX_HINT_ACQ -# define MUTEX_HINT_REL -#endif - -#define __HAVE_64B_ATOMICS 1 -#define USE_ATOMIC_COMPILER_BUILTINS 0 -#define ATOMIC_EXCHANGE_USES_CAS 1 - -/* The 32-bit exchange_bool is different on powerpc64 because the subf - does signed 64-bit arithmetic while the lwarx is 32-bit unsigned - (a load word and zero (high 32) form) load. - In powerpc64 register values are 64-bit by default, including oldval. - The value in old val unknown sign extension, lwarx loads the 32-bit - value as unsigned. So we explicitly clear the high 32 bits in oldval. */ -#define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval) \ -({ \ - unsigned int __tmp, __tmp2; \ - __asm __volatile (" clrldi %1,%1,32\n" \ - "1: lwarx %0,0,%2" MUTEX_HINT_ACQ "\n" \ - " subf. %0,%1,%0\n" \ - " bne 2f\n" \ - " stwcx. %4,0,%2\n" \ - " bne- 1b\n" \ - "2: " __ARCH_ACQ_INSTR \ - : "=&r" (__tmp), "=r" (__tmp2) \ - : "b" (mem), "1" (oldval), "r" (newval) \ - : "cr0", "memory"); \ - __tmp != 0; \ -}) - -/* - * Only powerpc64 processors support Load doubleword and reserve index (ldarx) - * and Store doubleword conditional indexed (stdcx) instructions. So here - * we define the 64-bit forms. - */ -#define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \ -({ \ - unsigned long __tmp; \ - __asm __volatile ( \ - "1: ldarx %0,0,%1" MUTEX_HINT_ACQ "\n" \ - " subf. %0,%2,%0\n" \ - " bne 2f\n" \ - " stdcx. %3,0,%1\n" \ - " bne- 1b\n" \ - "2: " __ARCH_ACQ_INSTR \ - : "=&r" (__tmp) \ - : "b" (mem), "r" (oldval), "r" (newval) \ - : "cr0", "memory"); \ - __tmp != 0; \ -}) - -#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - ({ \ - __typeof (*(mem)) __tmp; \ - __typeof (mem) __memp = (mem); \ - __asm __volatile ( \ - "1: ldarx %0,0,%1" MUTEX_HINT_ACQ "\n" \ - " cmpd %0,%2\n" \ - " bne 2f\n" \ - " stdcx. %3,0,%1\n" \ - " bne- 1b\n" \ - "2: " __ARCH_ACQ_INSTR \ - : "=&r" (__tmp) \ - : "b" (__memp), "r" (oldval), "r" (newval) \ - : "cr0", "memory"); \ - __tmp; \ - }) - -#define __arch_compare_and_exchange_val_64_rel(mem, newval, oldval) \ - ({ \ - __typeof (*(mem)) __tmp; \ - __typeof (mem) __memp = (mem); \ - __asm __volatile (__ARCH_REL_INSTR "\n" \ - "1: ldarx %0,0,%1" MUTEX_HINT_REL "\n" \ - " cmpd %0,%2\n" \ - " bne 2f\n" \ - " stdcx. %3,0,%1\n" \ - " bne- 1b\n" \ - "2: " \ - : "=&r" (__tmp) \ - : "b" (__memp), "r" (oldval), "r" (newval) \ - : "cr0", "memory"); \ - __tmp; \ - }) - -#define __arch_atomic_exchange_64_acq(mem, value) \ - ({ \ - __typeof (*mem) __val; \ - __asm __volatile (__ARCH_REL_INSTR "\n" \ - "1: ldarx %0,0,%2" MUTEX_HINT_ACQ "\n" \ - " stdcx. %3,0,%2\n" \ - " bne- 1b\n" \ - " " __ARCH_ACQ_INSTR \ - : "=&r" (__val), "=m" (*mem) \ - : "b" (mem), "r" (value), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define __arch_atomic_exchange_64_rel(mem, value) \ - ({ \ - __typeof (*mem) __val; \ - __asm __volatile (__ARCH_REL_INSTR "\n" \ - "1: ldarx %0,0,%2" MUTEX_HINT_REL "\n" \ - " stdcx. %3,0,%2\n" \ - " bne- 1b" \ - : "=&r" (__val), "=m" (*mem) \ - : "b" (mem), "r" (value), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define __arch_atomic_exchange_and_add_64(mem, value) \ - ({ \ - __typeof (*mem) __val, __tmp; \ - __asm __volatile ("1: ldarx %0,0,%3\n" \ - " add %1,%0,%4\n" \ - " stdcx. %1,0,%3\n" \ - " bne- 1b" \ - : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \ - : "b" (mem), "r" (value), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define __arch_atomic_exchange_and_add_64_acq(mem, value) \ - ({ \ - __typeof (*mem) __val, __tmp; \ - __asm __volatile ("1: ldarx %0,0,%3" MUTEX_HINT_ACQ "\n" \ - " add %1,%0,%4\n" \ - " stdcx. %1,0,%3\n" \ - " bne- 1b\n" \ - __ARCH_ACQ_INSTR \ - : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \ - : "b" (mem), "r" (value), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define __arch_atomic_exchange_and_add_64_rel(mem, value) \ - ({ \ - __typeof (*mem) __val, __tmp; \ - __asm __volatile (__ARCH_REL_INSTR "\n" \ - "1: ldarx %0,0,%3" MUTEX_HINT_REL "\n" \ - " add %1,%0,%4\n" \ - " stdcx. %1,0,%3\n" \ - " bne- 1b" \ - : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \ - : "b" (mem), "r" (value), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define __arch_atomic_increment_val_64(mem) \ - ({ \ - __typeof (*(mem)) __val; \ - __asm __volatile ("1: ldarx %0,0,%2\n" \ - " addi %0,%0,1\n" \ - " stdcx. %0,0,%2\n" \ - " bne- 1b" \ - : "=&b" (__val), "=m" (*mem) \ - : "b" (mem), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define __arch_atomic_decrement_val_64(mem) \ - ({ \ - __typeof (*(mem)) __val; \ - __asm __volatile ("1: ldarx %0,0,%2\n" \ - " subi %0,%0,1\n" \ - " stdcx. %0,0,%2\n" \ - " bne- 1b" \ - : "=&b" (__val), "=m" (*mem) \ - : "b" (mem), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -#define __arch_atomic_decrement_if_positive_64(mem) \ - ({ int __val, __tmp; \ - __asm __volatile ("1: ldarx %0,0,%3\n" \ - " cmpdi 0,%0,0\n" \ - " addi %1,%0,-1\n" \ - " ble 2f\n" \ - " stdcx. %1,0,%3\n" \ - " bne- 1b\n" \ - "2: " __ARCH_ACQ_INSTR \ - : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \ - : "b" (mem), "m" (*mem) \ - : "cr0", "memory"); \ - __val; \ - }) - -/* - * All powerpc64 processors support the new "light weight" sync (lwsync). - */ -#define atomic_read_barrier() __asm ("lwsync" ::: "memory") -/* - * "light weight" sync can also be used for the release barrier. - */ -#ifndef UP -# define __ARCH_REL_INSTR "lwsync" -#endif -#define atomic_write_barrier() __asm ("lwsync" ::: "memory") - -/* - * Include the rest of the atomic ops macros which are common to both - * powerpc32 and powerpc64. - */ -#include_next diff --git a/sysdeps/powerpc/powerpc64/backtrace.c b/sysdeps/powerpc/powerpc64/backtrace.c deleted file mode 100644 index 723948d78f..0000000000 --- a/sysdeps/powerpc/powerpc64/backtrace.c +++ /dev/null @@ -1,104 +0,0 @@ -/* Return backtrace of current program state. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include - -#include -#include - -/* This is the stack layout we see with every stack frame. - Note that every routine is required by the ABI to lay out the stack - like this. - - +----------------+ +-----------------+ - %r1 -> | %r1 last frame--------> | %r1 last frame--->... --> NULL - | | | | - | cr save | | cr save | - | | | | - | (unused) | | return address | - +----------------+ +-----------------+ -*/ -struct layout -{ - struct layout *next; - long int condition_register; - void *return_address; -}; - -/* Since the signal handler is just like any other function it needs to - save/restore its LR and it will save it into callers stack frame. - Since a signal handler doesn't have a caller, the kernel creates a - dummy frame to make it look like it has a caller. */ -struct signal_frame_64 { -#define SIGNAL_FRAMESIZE 128 - char dummy[SIGNAL_FRAMESIZE]; - struct ucontext uc; - /* We don't care about the rest, since the IP value is at 'uc' field. */ -}; - -static inline int -is_sigtramp_address (void *nip) -{ -#ifdef SHARED - if (nip == VDSO_SYMBOL (sigtramp_rt64)) - return 1; -#endif - return 0; -} - -int -__backtrace (void **array, int size) -{ - struct layout *current; - int count; - - /* Force gcc to spill LR. */ - asm volatile ("" : "=l"(current)); - - /* Get the address on top-of-stack. */ - asm volatile ("ld %0,0(1)" : "=r"(current)); - - for ( count = 0; - current != NULL && count < size; - current = current->next, count++) - { - array[count] = current->return_address; - - /* Check if the symbol is the signal trampoline and get the interrupted - * symbol address from the trampoline saved area. */ - if (is_sigtramp_address (current->return_address)) - { - struct signal_frame_64 *sigframe = (struct signal_frame_64*) current; - array[++count] = (void*) sigframe->uc.uc_mcontext.gp_regs[PT_NIP]; - current = (void*) sigframe->uc.uc_mcontext.gp_regs[PT_R1]; - } - } - - /* It's possible the second-last stack frame can't return - (that is, it's __libc_start_main), in which case - the CRT startup code will have set its LR to 'NULL'. */ - if (count > 0 && array[count-1] == NULL) - count--; - - return count; -} -weak_alias (__backtrace, backtrace) -libc_hidden_def (__backtrace) diff --git a/sysdeps/powerpc/powerpc64/bits/wordsize.h b/sysdeps/powerpc/powerpc64/bits/wordsize.h deleted file mode 100644 index 04ca9debf0..0000000000 --- a/sysdeps/powerpc/powerpc64/bits/wordsize.h +++ /dev/null @@ -1,11 +0,0 @@ -/* Determine the wordsize from the preprocessor defines. */ - -#if defined __powerpc64__ -# define __WORDSIZE 64 -# define __WORDSIZE_TIME64_COMPAT32 1 -#else -# define __WORDSIZE 32 -# define __WORDSIZE_TIME64_COMPAT32 0 -# define __WORDSIZE32_SIZE_ULONG 0 -# define __WORDSIZE32_PTRDIFF_LONG 0 -#endif diff --git a/sysdeps/powerpc/powerpc64/bsd-_setjmp.S b/sysdeps/powerpc/powerpc64/bsd-_setjmp.S deleted file mode 100644 index 86d49b1c6e..0000000000 --- a/sysdeps/powerpc/powerpc64/bsd-_setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* _setjmp moved to setjmp-common.S */ diff --git a/sysdeps/powerpc/powerpc64/bsd-setjmp.S b/sysdeps/powerpc/powerpc64/bsd-setjmp.S deleted file mode 100644 index 38b734fcb4..0000000000 --- a/sysdeps/powerpc/powerpc64/bsd-setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* setjmp moved to setjmp-common.S */ diff --git a/sysdeps/powerpc/powerpc64/bzero.S b/sysdeps/powerpc/powerpc64/bzero.S deleted file mode 100644 index 41cfac5127..0000000000 --- a/sysdeps/powerpc/powerpc64/bzero.S +++ /dev/null @@ -1,20 +0,0 @@ -/* Optimized bzero `implementation' for PowerPC64. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This code was moved into memset.S to solve a double stub call problem. - @local would have worked but it is not supported in PowerPC64 asm. */ diff --git a/sysdeps/powerpc/powerpc64/cell/memcpy.S b/sysdeps/powerpc/powerpc64/cell/memcpy.S deleted file mode 100644 index 1cc66456e3..0000000000 --- a/sysdeps/powerpc/powerpc64/cell/memcpy.S +++ /dev/null @@ -1,246 +0,0 @@ -/* Optimized memcpy implementation for CELL BE PowerPC. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef MEMCPY -# define MEMCPY memcpy -#endif - -#define PREFETCH_AHEAD 6 /* no cache lines SRC prefetching ahead */ -#define ZERO_AHEAD 4 /* no cache lines DST zeroing ahead */ - -/* memcpy routine optimized for CELL-BE-PPC v2.0 - * - * The CELL PPC core has 1 integer unit and 1 load/store unit - * CELL: - * 1st level data cache = 32K - * 2nd level data cache = 512K - * 3rd level data cache = 0K - * With 3.2 GHz clockrate the latency to 2nd level cache is >36 clocks, - * latency to memory is >400 clocks - * To improve copy performance we need to prefetch source data - * far ahead to hide this latency - * For best performance instruction forms ending in "." like "andi." - * should be avoided as the are implemented in microcode on CELL. - * The below code is loop unrolled for the CELL cache line of 128 bytes - */ - -.align 7 - -EALIGN (MEMCPY, 5, 0) - CALL_MCOUNT 3 - - dcbt 0,r4 /* Prefetch ONE SRC cacheline */ - cmpldi cr1,r5,16 /* is size < 16 ? */ - mr r6,r3 - blt+ cr1,.Lshortcopy - -.Lbigcopy: - neg r8,r3 /* LS 3 bits = # bytes to 8-byte dest bdry */ - clrldi r8,r8,64-4 /* align to 16byte boundary */ - sub r7,r4,r3 - cmpldi cr0,r8,0 - beq+ .Ldst_aligned - -.Ldst_unaligned: - mtcrf 0x01,r8 /* put #bytes to boundary into cr7 */ - subf r5,r8,r5 - - bf cr7*4+3,1f - lbzx r0,r7,r6 /* copy 1 byte */ - stb r0,0(r6) - addi r6,r6,1 -1: bf cr7*4+2,2f - lhzx r0,r7,r6 /* copy 2 byte */ - sth r0,0(r6) - addi r6,r6,2 -2: bf cr7*4+1,4f - lwzx r0,r7,r6 /* copy 4 byte */ - stw r0,0(r6) - addi r6,r6,4 -4: bf cr7*4+0,8f - ldx r0,r7,r6 /* copy 8 byte */ - std r0,0(r6) - addi r6,r6,8 -8: - add r4,r7,r6 - -.Ldst_aligned: - - cmpdi cr5,r5,128-1 - - neg r7,r6 - addi r6,r6,-8 /* prepare for stdu */ - addi r4,r4,-8 /* prepare for ldu */ - - clrldi r7,r7,64-7 /* align to cacheline boundary */ - ble+ cr5,.Llessthancacheline - - cmpldi cr6,r7,0 - subf r5,r7,r5 - srdi r7,r7,4 /* divide size by 16 */ - srdi r10,r5,7 /* number of cache lines to copy */ - - cmpldi r10,0 - li r11,0 /* number cachelines to copy with prefetch */ - beq .Lnocacheprefetch - - cmpldi r10,PREFETCH_AHEAD - li r12,128+8 /* prefetch distance */ - ble .Llessthanmaxprefetch - - subi r11,r10,PREFETCH_AHEAD - li r10,PREFETCH_AHEAD - -.Llessthanmaxprefetch: - mtctr r10 - -.LprefetchSRC: - dcbt r12,r4 - addi r12,r12,128 - bdnz .LprefetchSRC - -.Lnocacheprefetch: - mtctr r7 - cmpldi cr1,r5,128 - clrldi r5,r5,64-7 - beq cr6,.Lcachelinealigned - -.Laligntocacheline: - ld r9,0x08(r4) - ldu r7,0x10(r4) - std r9,0x08(r6) - stdu r7,0x10(r6) - bdnz .Laligntocacheline - - -.Lcachelinealigned: /* copy while cache lines */ - - blt- cr1,.Llessthancacheline /* size <128 */ - -.Louterloop: - cmpdi r11,0 - mtctr r11 - beq- .Lendloop - - li r11,128*ZERO_AHEAD +8 /* DCBZ dist */ - -.align 4 - /* Copy whole cachelines, optimized by prefetching SRC cacheline */ -.Lloop: /* Copy aligned body */ - dcbt r12,r4 /* PREFETCH SOURCE some cache lines ahead */ - ld r9, 0x08(r4) - dcbz r11,r6 - ld r7, 0x10(r4) /* 4 register stride copy is optimal */ - ld r8, 0x18(r4) /* to hide 1st level cache latency. */ - ld r0, 0x20(r4) - std r9, 0x08(r6) - std r7, 0x10(r6) - std r8, 0x18(r6) - std r0, 0x20(r6) - ld r9, 0x28(r4) - ld r7, 0x30(r4) - ld r8, 0x38(r4) - ld r0, 0x40(r4) - std r9, 0x28(r6) - std r7, 0x30(r6) - std r8, 0x38(r6) - std r0, 0x40(r6) - ld r9, 0x48(r4) - ld r7, 0x50(r4) - ld r8, 0x58(r4) - ld r0, 0x60(r4) - std r9, 0x48(r6) - std r7, 0x50(r6) - std r8, 0x58(r6) - std r0, 0x60(r6) - ld r9, 0x68(r4) - ld r7, 0x70(r4) - ld r8, 0x78(r4) - ldu r0, 0x80(r4) - std r9, 0x68(r6) - std r7, 0x70(r6) - std r8, 0x78(r6) - stdu r0, 0x80(r6) - - bdnz .Lloop - -.Lendloop: - cmpdi r10,0 - sldi r10,r10,2 /* adjust from 128 to 32 byte stride */ - beq- .Lendloop2 - mtctr r10 - -.Lloop2: /* Copy aligned body */ - ld r9, 0x08(r4) - ld r7, 0x10(r4) - ld r8, 0x18(r4) - ldu r0, 0x20(r4) - std r9, 0x08(r6) - std r7, 0x10(r6) - std r8, 0x18(r6) - stdu r0, 0x20(r6) - - bdnz .Lloop2 -.Lendloop2: - -.Llessthancacheline: /* less than cache to do ? */ - cmpldi cr0,r5,16 - srdi r7,r5,4 /* divide size by 16 */ - blt- .Ldo_lt16 - mtctr r7 - -.Lcopy_remaining: - ld r8,0x08(r4) - ldu r7,0x10(r4) - std r8,0x08(r6) - stdu r7,0x10(r6) - bdnz .Lcopy_remaining - -.Ldo_lt16: /* less than 16 ? */ - cmpldi cr0,r5,0 /* copy remaining bytes (0-15) */ - beqlr+ /* no rest to copy */ - addi r4,r4,8 - addi r6,r6,8 - -.Lshortcopy: /* SIMPLE COPY to handle size =< 15 bytes */ - mtcrf 0x01,r5 - sub r7,r4,r6 - bf- cr7*4+0,8f - ldx r0,r7,r6 /* copy 8 byte */ - std r0,0(r6) - addi r6,r6,8 -8: - bf cr7*4+1,4f - lwzx r0,r7,r6 /* copy 4 byte */ - stw r0,0(r6) - addi r6,r6,4 -4: - bf cr7*4+2,2f - lhzx r0,r7,r6 /* copy 2 byte */ - sth r0,0(r6) - addi r6,r6,2 -2: - bf cr7*4+3,1f - lbzx r0,r7,r6 /* copy 1 byte */ - stb r0,0(r6) -1: blr - -END_GEN_TB (MEMCPY,TB_TOCLESS) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/powerpc/powerpc64/configure b/sysdeps/powerpc/powerpc64/configure deleted file mode 100644 index 7632a7be04..0000000000 --- a/sysdeps/powerpc/powerpc64/configure +++ /dev/null @@ -1,33 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/powerpc/powerpc64. - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for support for overlapping .opd entries" >&5 -$as_echo_n "checking for support for overlapping .opd entries... " >&6; } -if ${libc_cv_overlapping_opd+:} false; then : - $as_echo_n "(cached) " >&6 -else - libc_cv_overlapping_opd=no -echo 'void foo (void) {}' > conftest.c -if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -S conftest.c -o conftest.s 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - if grep '\.TOC\.@tocbase' conftest.s > /dev/null; then - if grep '\.TOC\.@tocbase[ ]*,[ ]*0' conftest.s > /dev/null; then - : - else - libc_cv_overlapping_opd=yes - fi - fi -fi -rm -f conftest.c conftest.s - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_overlapping_opd" >&5 -$as_echo "$libc_cv_overlapping_opd" >&6; } -if test x$libc_cv_overlapping_opd = xyes; then - $as_echo "#define USE_PPC64_OVERLAPPING_OPD 1" >>confdefs.h - -fi diff --git a/sysdeps/powerpc/powerpc64/configure.ac b/sysdeps/powerpc/powerpc64/configure.ac deleted file mode 100644 index f309ba35a8..0000000000 --- a/sysdeps/powerpc/powerpc64/configure.ac +++ /dev/null @@ -1,23 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/powerpc/powerpc64. - -AC_CACHE_CHECK(for support for overlapping .opd entries, -libc_cv_overlapping_opd, [dnl -libc_cv_overlapping_opd=no -echo 'void foo (void) {}' > conftest.c -if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then -changequote(,)dnl - if grep '\.TOC\.@tocbase' conftest.s > /dev/null; then - if grep '\.TOC\.@tocbase[ ]*,[ ]*0' conftest.s > /dev/null; then - : - else - libc_cv_overlapping_opd=yes - fi - fi -changequote([,])dnl -fi -rm -f conftest.c conftest.s -]) -if test x$libc_cv_overlapping_opd = xyes; then - AC_DEFINE(USE_PPC64_OVERLAPPING_OPD) -fi diff --git a/sysdeps/powerpc/powerpc64/crti.S b/sysdeps/powerpc/powerpc64/crti.S deleted file mode 100644 index fa4f5833ef..0000000000 --- a/sysdeps/powerpc/powerpc64/crti.S +++ /dev/null @@ -1,88 +0,0 @@ -/* Special .init and .fini section support for PowerPC64. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - -#if PREINIT_FUNCTION_WEAK - .section ".toc", "aw" -.LC0: - .tc PREINIT_FUNCTION[TC], PREINIT_FUNCTION -#endif - .section ".init", "ax", @progbits - ENTRY_2(_init) - .align ALIGNARG (2) -BODY_LABEL (_init): - LOCALENTRY(_init) - mflr 0 - std 0, FRAME_LR_SAVE(r1) - stdu r1, -FRAME_MIN_SIZE_PARM(r1) -#if PREINIT_FUNCTION_WEAK - addis r9, r2, .LC0@toc@ha - ld r0, .LC0@toc@l(r9) - cmpdi cr7, r0, 0 - beq+ cr7, 1f -#endif - bl JUMPTARGET (PREINIT_FUNCTION) - nop -1: - - .section ".fini", "ax", @progbits - ENTRY_2(_fini) - .align ALIGNARG (2) -BODY_LABEL (_fini): - LOCALENTRY(_fini) - mflr 0 - std 0, FRAME_LR_SAVE(r1) - stdu r1, -FRAME_MIN_SIZE_PARM(r1) diff --git a/sysdeps/powerpc/powerpc64/crtn.S b/sysdeps/powerpc/powerpc64/crtn.S deleted file mode 100644 index a8906aa16c..0000000000 --- a/sysdeps/powerpc/powerpc64/crtn.S +++ /dev/null @@ -1,51 +0,0 @@ -/* Special .init and .fini section support for PowerPC64. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - -#include - - .section .init,"ax",@progbits - addi r1, r1, FRAME_MIN_SIZE_PARM - ld r0, FRAME_LR_SAVE(r1) - mtlr r0 - blr - - .section .fini,"ax",@progbits - addi r1, r1, FRAME_MIN_SIZE_PARM - ld r0, FRAME_LR_SAVE(r1) - mtlr r0 - blr diff --git a/sysdeps/powerpc/powerpc64/dl-dtprocnum.h b/sysdeps/powerpc/powerpc64/dl-dtprocnum.h deleted file mode 100644 index 142714b421..0000000000 --- a/sysdeps/powerpc/powerpc64/dl-dtprocnum.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Configuration of lookup functions. PowerPC64 version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Number of extra dynamic section entries for this architecture. By - default there are none. */ -#define DT_THISPROCNUM DT_PPC64_NUM diff --git a/sysdeps/powerpc/powerpc64/dl-irel.h b/sysdeps/powerpc/powerpc64/dl-irel.h deleted file mode 100644 index d8f5988bc9..0000000000 --- a/sysdeps/powerpc/powerpc64/dl-irel.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Machine-dependent ELF indirect relocation inline functions. - PowerPC64 version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_IREL_H -#define _DL_IREL_H - -#include -#include -#include -#include - -#define ELF_MACHINE_IRELA 1 - -static inline Elf64_Addr -__attribute ((always_inline)) -elf_ifunc_invoke (Elf64_Addr addr) -{ - return ((Elf64_Addr (*) (unsigned long int)) (addr)) (GLRO(dl_hwcap)); -} - -static inline void -__attribute ((always_inline)) -elf_irela (const Elf64_Rela *reloc) -{ - unsigned int r_type = ELF64_R_TYPE (reloc->r_info); - - if (__glibc_likely (r_type == R_PPC64_IRELATIVE)) - { - Elf64_Addr *const reloc_addr = (void *) reloc->r_offset; - Elf64_Addr value = elf_ifunc_invoke(reloc->r_addend); - *reloc_addr = value; - } - else if (__glibc_likely (r_type == R_PPC64_JMP_IREL)) - { - Elf64_Addr *const reloc_addr = (void *) reloc->r_offset; - Elf64_Addr value = elf_ifunc_invoke(reloc->r_addend); -#if _CALL_ELF != 2 - *(Elf64_FuncDesc *) reloc_addr = *(Elf64_FuncDesc *) value; -#else - *reloc_addr = value; -#endif - } - else - __libc_fatal ("unexpected reloc type in static binary"); -} - -#endif /* dl-irel.h */ diff --git a/sysdeps/powerpc/powerpc64/dl-machine.c b/sysdeps/powerpc/powerpc64/dl-machine.c deleted file mode 100644 index 0eccc6621a..0000000000 --- a/sysdeps/powerpc/powerpc64/dl-machine.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Machine-dependent ELF dynamic relocation functions. PowerPC64 version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include <_itoa.h> -#include - -void -_dl_reloc_overflow (struct link_map *map, - const char *name, - Elf64_Addr *const reloc_addr, - const Elf64_Sym *refsym) -{ - char buffer[128]; - char *t; - t = stpcpy (buffer, name); - t = stpcpy (t, " reloc at 0x"); - _itoa_word ((unsigned long) reloc_addr, t, 16, 0); - if (refsym) - { - const char *strtab; - - strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - t = stpcpy (t, " for symbol `"); - t = stpcpy (t, strtab + refsym->st_name); - t = stpcpy (t, "'"); - } - t = stpcpy (t, " out of range"); - _dl_signal_error (0, map->l_name, NULL, buffer); -} diff --git a/sysdeps/powerpc/powerpc64/dl-machine.h b/sysdeps/powerpc/powerpc64/dl-machine.h deleted file mode 100644 index 6391b3a558..0000000000 --- a/sysdeps/powerpc/powerpc64/dl-machine.h +++ /dev/null @@ -1,1036 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. - PowerPC64 version. - Copyright 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "powerpc64" - -#include -#include -#include -#include -#include - -/* Translate a processor specific dynamic tag to the index - in l_info array. */ -#define DT_PPC64(x) (DT_PPC64_##x - DT_LOPROC + DT_NUM) - -#if _CALL_ELF != 2 -/* A PowerPC64 function descriptor. The .plt (procedure linkage - table) and .opd (official procedure descriptor) sections are - arrays of these. */ -typedef struct -{ - Elf64_Addr fd_func; - Elf64_Addr fd_toc; - Elf64_Addr fd_aux; -} Elf64_FuncDesc; -#endif - -#define ELF_MULT_MACHINES_SUPPORTED - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf64_Ehdr *ehdr) -{ - /* Verify that the binary matches our ABI version. */ - if ((ehdr->e_flags & EF_PPC64_ABI) != 0) - { -#if _CALL_ELF != 2 - if ((ehdr->e_flags & EF_PPC64_ABI) != 1) - return 0; -#else - if ((ehdr->e_flags & EF_PPC64_ABI) != 2) - return 0; -#endif - } - - return ehdr->e_machine == EM_PPC64; -} - -/* Return nonzero iff ELF header is compatible with the running host, - but not this loader. */ -static inline int -elf_host_tolerates_machine (const Elf64_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_PPC; -} - -/* Return nonzero iff ELF header is compatible with the running host, - but not this loader. */ -static inline int -elf_host_tolerates_class (const Elf64_Ehdr *ehdr) -{ - return ehdr->e_ident[EI_CLASS] == ELFCLASS32; -} - - -/* Return the run-time load address of the shared object, assuming it - was originally linked at zero. */ -static inline Elf64_Addr -elf_machine_load_address (void) __attribute__ ((const)); - -static inline Elf64_Addr -elf_machine_load_address (void) -{ - Elf64_Addr ret; - - /* The first entry in .got (and thus the first entry in .toc) is the - link-time TOC_base, ie. r2. So the difference between that and - the current r2 set by the kernel is how far the shared lib has - moved. */ - asm ( " ld %0,-32768(2)\n" - " subf %0,%0,2\n" - : "=r" (ret)); - return ret; -} - -/* Return the link-time address of _DYNAMIC. */ -static inline Elf64_Addr -elf_machine_dynamic (void) -{ - Elf64_Addr runtime_dynamic; - /* It's easier to get the run-time address. */ - asm ( " addis %0,2,_DYNAMIC@toc@ha\n" - " addi %0,%0,_DYNAMIC@toc@l\n" - : "=b" (runtime_dynamic)); - /* Then subtract off the load address offset. */ - return runtime_dynamic - elf_machine_load_address() ; -} - -#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) /* nothing */ - -/* The PLT uses Elf64_Rela relocs. */ -#define elf_machine_relplt elf_machine_rela - - -#ifdef HAVE_INLINED_SYSCALLS -/* We do not need _dl_starting_up. */ -# define DL_STARTING_UP_DEF -#else -# define DL_STARTING_UP_DEF \ -".LC__dl_starting_up:\n" \ -" .tc __GI__dl_starting_up[TC],__GI__dl_starting_up\n" -#endif - - -/* Initial entry point code for the dynamic linker. The C function - `_dl_start' is the real entry point; its return value is the user - program's entry point. */ -#define RTLD_START \ - asm (".pushsection \".text\"\n" \ -" .align 2\n" \ -" " ENTRY_2(_start) "\n" \ -BODY_PREFIX "_start:\n" \ -" " LOCALENTRY(_start) "\n" \ -/* We start with the following on the stack, from top: \ - argc (4 bytes); \ - arguments for program (terminated by NULL); \ - environment variables (terminated by NULL); \ - arguments for the program loader. */ \ -" mr 3,1\n" \ -" li 4,0\n" \ -" stdu 4,-128(1)\n" \ -/* Call _dl_start with one parameter pointing at argc. */ \ -" bl " DOT_PREFIX "_dl_start\n" \ -" nop\n" \ -/* Transfer control to _dl_start_user! */ \ -" b " DOT_PREFIX "_dl_start_user\n" \ -".LT__start:\n" \ -" .long 0\n" \ -" .byte 0x00,0x0c,0x24,0x40,0x00,0x00,0x00,0x00\n" \ -" .long .LT__start-" BODY_PREFIX "_start\n" \ -" .short .LT__start_name_end-.LT__start_name_start\n" \ -".LT__start_name_start:\n" \ -" .ascii \"_start\"\n" \ -".LT__start_name_end:\n" \ -" .align 2\n" \ -" " END_2(_start) "\n" \ -" .pushsection \".toc\",\"aw\"\n" \ -DL_STARTING_UP_DEF \ -".LC__rtld_local:\n" \ -" .tc _rtld_local[TC],_rtld_local\n" \ -".LC__dl_argc:\n" \ -" .tc _dl_argc[TC],_dl_argc\n" \ -".LC__dl_argv:\n" \ -" .tc __GI__dl_argv[TC],__GI__dl_argv\n" \ -".LC__dl_fini:\n" \ -" .tc _dl_fini[TC],_dl_fini\n" \ -" .popsection\n" \ -" " ENTRY_2(_dl_start_user) "\n" \ -/* Now, we do our main work of calling initialisation procedures. \ - The ELF ABI doesn't say anything about parameters for these, \ - so we just pass argc, argv, and the environment. \ - Changing these is strongly discouraged (not least because argc is \ - passed by value!). */ \ -BODY_PREFIX "_dl_start_user:\n" \ -" " LOCALENTRY(_dl_start_user) "\n" \ -/* the address of _start in r30. */ \ -" mr 30,3\n" \ -/* &_dl_argc in 29, &_dl_argv in 27, and _dl_loaded in 28. */ \ -" ld 28,.LC__rtld_local@toc(2)\n" \ -" ld 29,.LC__dl_argc@toc(2)\n" \ -" ld 27,.LC__dl_argv@toc(2)\n" \ -/* _dl_init (_dl_loaded, _dl_argc, _dl_argv, _dl_argv+_dl_argc+1). */ \ -" ld 3,0(28)\n" \ -" lwa 4,0(29)\n" \ -" ld 5,0(27)\n" \ -" sldi 6,4,3\n" \ -" add 6,5,6\n" \ -" addi 6,6,8\n" \ -" bl " DOT_PREFIX "_dl_init\n" \ -" nop\n" \ -/* Now, to conform to the ELF ABI, we have to: \ - Pass argc (actually _dl_argc) in r3; */ \ -" lwa 3,0(29)\n" \ -/* Pass argv (actually _dl_argv) in r4; */ \ -" ld 4,0(27)\n" \ -/* Pass argv+argc+1 in r5; */ \ -" sldi 5,3,3\n" \ -" add 6,4,5\n" \ -" addi 5,6,8\n" \ -/* Pass the auxiliary vector in r6. This is passed to us just after \ - _envp. */ \ -"2: ldu 0,8(6)\n" \ -" cmpdi 0,0\n" \ -" bne 2b\n" \ -" addi 6,6,8\n" \ -/* Pass a termination function pointer (in this case _dl_fini) in \ - r7. */ \ -" ld 7,.LC__dl_fini@toc(2)\n" \ -/* Pass the stack pointer in r1 (so far so good), pointing to a NULL \ - value. This lets our startup code distinguish between a program \ - linked statically, which linux will call with argc on top of the \ - stack which will hopefully never be zero, and a dynamically linked \ - program which will always have a NULL on the top of the stack. \ - Take the opportunity to clear LR, so anyone who accidentally \ - returns from _start gets SEGV. Also clear the next few words of \ - the stack. */ \ -" li 31,0\n" \ -" std 31,0(1)\n" \ -" mtlr 31\n" \ -" std 31,8(1)\n" \ -" std 31,16(1)\n" \ -" std 31,24(1)\n" \ -/* Now, call the start function descriptor at r30... */ \ -" .globl ._dl_main_dispatch\n" \ -"._dl_main_dispatch:\n" \ -" " PPC64_LOAD_FUNCPTR(30) "\n" \ -" bctr\n" \ -".LT__dl_start_user:\n" \ -" .long 0\n" \ -" .byte 0x00,0x0c,0x24,0x40,0x00,0x00,0x00,0x00\n" \ -" .long .LT__dl_start_user-" BODY_PREFIX "_dl_start_user\n" \ -" .short .LT__dl_start_user_name_end-.LT__dl_start_user_name_start\n" \ -".LT__dl_start_user_name_start:\n" \ -" .ascii \"_dl_start_user\"\n" \ -".LT__dl_start_user_name_end:\n" \ -" .align 2\n" \ -" " END_2(_dl_start_user) "\n" \ -" .popsection"); - -/* ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to - one of the main executable's symbols, as for a COPY reloc. - - To make function pointer comparisons work on most targets, the - relevant ABI states that the address of a non-local function in a - dynamically linked executable is the address of the PLT entry for - that function. This is quite reasonable since using the real - function address in a non-PIC executable would typically require - dynamic relocations in .text, something to be avoided. For such - functions, the linker emits a SHN_UNDEF symbol in the executable - with value equal to the PLT entry address. Normally, SHN_UNDEF - symbols have a value of zero, so this is a clue to ld.so that it - should treat these symbols specially. For relocations not in - ELF_RTYPE_CLASS_PLT (eg. those on function pointers), ld.so should - use the value of the executable SHN_UNDEF symbol, ie. the PLT entry - address. For relocations in ELF_RTYPE_CLASS_PLT (eg. the relocs in - the PLT itself), ld.so should use the value of the corresponding - defined symbol in the object that defines the function, ie. the - real function address. This complicates ld.so in that there are - now two possible values for a given symbol, and it gets even worse - because protected symbols need yet another set of rules. - - On PowerPC64 we don't need any of this. The linker won't emit - SHN_UNDEF symbols with non-zero values. ld.so can make all - relocations behave "normally", ie. always use the real address - like PLT relocations. So always set ELF_RTYPE_CLASS_PLT. */ - -#if _CALL_ELF != 2 -#define elf_machine_type_class(type) \ - (ELF_RTYPE_CLASS_PLT | (((type) == R_PPC64_COPY) * ELF_RTYPE_CLASS_COPY)) -#else -/* And now that you have read that large comment, you can disregard it - all for ELFv2. ELFv2 does need the special SHN_UNDEF treatment. */ -#define IS_PPC64_TLS_RELOC(R) \ - (((R) >= R_PPC64_TLS && (R) <= R_PPC64_DTPREL16_HIGHESTA) \ - || ((R) >= R_PPC64_TPREL16_HIGH && (R) <= R_PPC64_DTPREL16_HIGHA)) - -#define elf_machine_type_class(type) \ - ((((type) == R_PPC64_JMP_SLOT \ - || (type) == R_PPC64_ADDR24 \ - || IS_PPC64_TLS_RELOC (type)) * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_PPC64_COPY) * ELF_RTYPE_CLASS_COPY)) -#endif - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_PPC64_JMP_SLOT - -/* The PowerPC never uses REL relocations. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -/* We define an initialization function to initialize HWCAP/HWCAP2 and - platform data so it can be copied into the TCB later. This is called - very early in _dl_sysdep_start for dynamically linked binaries. */ -#ifdef SHARED -# define DL_PLATFORM_INIT dl_platform_init () - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ - __tcb_parse_hwcap_and_convert_at_platform (); -} -#endif - -/* Stuff for the PLT. */ -#if _CALL_ELF != 2 -#define PLT_INITIAL_ENTRY_WORDS 3 -#define PLT_ENTRY_WORDS 3 -#define GLINK_INITIAL_ENTRY_WORDS 8 -/* The first 32k entries of glink can set an index and branch using two - instructions; past that point, glink uses three instructions. */ -#define GLINK_ENTRY_WORDS(I) (((I) < 0x8000)? 2 : 3) -#else -#define PLT_INITIAL_ENTRY_WORDS 2 -#define PLT_ENTRY_WORDS 1 -#define GLINK_INITIAL_ENTRY_WORDS 8 -#define GLINK_ENTRY_WORDS(I) 1 -#endif - -#define PPC_DCBST(where) asm volatile ("dcbst 0,%0" : : "r"(where) : "memory") -#define PPC_DCBT(where) asm volatile ("dcbt 0,%0" : : "r"(where) : "memory") -#define PPC_DCBF(where) asm volatile ("dcbf 0,%0" : : "r"(where) : "memory") -#define PPC_SYNC asm volatile ("sync" : : : "memory") -#define PPC_ISYNC asm volatile ("sync; isync" : : : "memory") -#define PPC_ICBI(where) asm volatile ("icbi 0,%0" : : "r"(where) : "memory") -#define PPC_DIE asm volatile ("tweq 0,0") -/* Use this when you've modified some code, but it won't be in the - instruction fetch queue (or when it doesn't matter if it is). */ -#define MODIFIED_CODE_NOQUEUE(where) \ - do { PPC_DCBST(where); PPC_SYNC; PPC_ICBI(where); } while (0) -/* Use this when it might be in the instruction queue. */ -#define MODIFIED_CODE(where) \ - do { PPC_DCBST(where); PPC_SYNC; PPC_ICBI(where); PPC_ISYNC; } while (0) - -/* Set up the loaded object described by MAP so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ -static inline int __attribute__ ((always_inline)) -elf_machine_runtime_setup (struct link_map *map, int lazy, int profile) -{ - if (map->l_info[DT_JMPREL]) - { - Elf64_Word i; - Elf64_Word *glink = NULL; - Elf64_Xword *plt = (Elf64_Xword *) D_PTR (map, l_info[DT_PLTGOT]); - Elf64_Word num_plt_entries = (map->l_info[DT_PLTRELSZ]->d_un.d_val - / sizeof (Elf64_Rela)); - Elf64_Addr l_addr = map->l_addr; - Elf64_Dyn **info = map->l_info; - char *p; - - extern void _dl_runtime_resolve (void); - extern void _dl_profile_resolve (void); - - /* Relocate the DT_PPC64_GLINK entry in the _DYNAMIC section. - elf_get_dynamic_info takes care of the standard entries but - doesn't know exactly what to do with processor specific - entries. */ - if (info[DT_PPC64(GLINK)] != NULL) - info[DT_PPC64(GLINK)]->d_un.d_ptr += l_addr; - - if (lazy) - { - Elf64_Word glink_offset; - Elf64_Word offset; - Elf64_Addr dlrr; - - dlrr = (Elf64_Addr) (profile ? _dl_profile_resolve - : _dl_runtime_resolve); - if (profile && GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), map)) - /* This is the object we are looking for. Say that we really - want profiling and the timers are started. */ - GL(dl_profile_map) = map; - -#if _CALL_ELF != 2 - /* We need to stuff the address/TOC of _dl_runtime_resolve - into doublewords 0 and 1 of plt_reserve. Then we need to - stuff the map address into doubleword 2 of plt_reserve. - This allows the GLINK0 code to transfer control to the - correct trampoline which will transfer control to fixup - in dl-machine.c. */ - { - /* The plt_reserve area is the 1st 3 doublewords of the PLT. */ - Elf64_FuncDesc *plt_reserve = (Elf64_FuncDesc *) plt; - Elf64_FuncDesc *resolve_fd = (Elf64_FuncDesc *) dlrr; - plt_reserve->fd_func = resolve_fd->fd_func; - plt_reserve->fd_toc = resolve_fd->fd_toc; - plt_reserve->fd_aux = (Elf64_Addr) map; -#ifdef RTLD_BOOTSTRAP - /* When we're bootstrapping, the opd entry will not have - been relocated yet. */ - plt_reserve->fd_func += l_addr; - plt_reserve->fd_toc += l_addr; -#endif - } -#else - /* When we don't have function descriptors, the first doubleword - of the PLT holds the address of _dl_runtime_resolve, and the - second doubleword holds the map address. */ - plt[0] = dlrr; - plt[1] = (Elf64_Addr) map; -#endif - - /* Set up the lazy PLT entries. */ - glink = (Elf64_Word *) D_PTR (map, l_info[DT_PPC64(GLINK)]); - offset = PLT_INITIAL_ENTRY_WORDS; - glink_offset = GLINK_INITIAL_ENTRY_WORDS; - for (i = 0; i < num_plt_entries; i++) - { - - plt[offset] = (Elf64_Xword) &glink[glink_offset]; - offset += PLT_ENTRY_WORDS; - glink_offset += GLINK_ENTRY_WORDS (i); - } - - /* Now, we've modified data. We need to write the changes from - the data cache to a second-level unified cache, then make - sure that stale data in the instruction cache is removed. - (In a multiprocessor system, the effect is more complex.) - Most of the PLT shouldn't be in the instruction cache, but - there may be a little overlap at the start and the end. - - Assumes that dcbst and icbi apply to lines of 16 bytes or - more. Current known line sizes are 16, 32, and 128 bytes. */ - - for (p = (char *) plt; p < (char *) &plt[offset]; p += 16) - PPC_DCBST (p); - PPC_SYNC; - } - } - return lazy; -} - -#if _CALL_ELF == 2 -/* If the PLT entry whose reloc is 'reloc' resolves to a function in - the same object, return the target function's local entry point - offset if usable. */ -static inline Elf64_Addr __attribute__ ((always_inline)) -ppc64_local_entry_offset (struct link_map *map, lookup_t sym_map, - const Elf64_Rela *reloc) -{ - const Elf64_Sym *symtab; - const Elf64_Sym *sym; - - /* If the target function is in a different object, we cannot - use the local entry point. */ - if (sym_map != map) - return 0; - - /* If the linker inserted multiple TOCs, we cannot use the - local entry point. */ - if (map->l_info[DT_PPC64(OPT)] - && (map->l_info[DT_PPC64(OPT)]->d_un.d_val & PPC64_OPT_MULTI_TOC)) - return 0; - - /* Otherwise, we can use the local entry point. Retrieve its offset - from the symbol's ELF st_other field. */ - symtab = (const void *) D_PTR (map, l_info[DT_SYMTAB]); - sym = &symtab[ELFW(R_SYM) (reloc->r_info)]; - - /* If the target function is an ifunc then the local entry offset is - for the resolver, not the final destination. */ - if (__builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0)) - return 0; - - return PPC64_LOCAL_ENTRY_OFFSET (sym->st_other); -} -#endif - -/* Change the PLT entry whose reloc is 'reloc' to call the actual - routine. */ -static inline Elf64_Addr __attribute__ ((always_inline)) -elf_machine_fixup_plt (struct link_map *map, lookup_t sym_map, - const Elf64_Rela *reloc, - Elf64_Addr *reloc_addr, Elf64_Addr finaladdr) -{ -#if _CALL_ELF != 2 - Elf64_FuncDesc *plt = (Elf64_FuncDesc *) reloc_addr; - Elf64_FuncDesc *rel = (Elf64_FuncDesc *) finaladdr; - Elf64_Addr offset = 0; - Elf64_FuncDesc zero_fd = {0, 0, 0}; - - PPC_DCBT (&plt->fd_aux); - PPC_DCBT (&plt->fd_func); - - /* If sym_map is NULL, it's a weak undefined sym; Set the plt to - zero. finaladdr should be zero already in this case, but guard - against invalid plt relocations with non-zero addends. */ - if (sym_map == NULL) - finaladdr = 0; - - /* Don't die here if finaladdr is zero, die if this plt entry is - actually called. Makes a difference when LD_BIND_NOW=1. - finaladdr may be zero for a weak undefined symbol, or when an - ifunc resolver returns zero. */ - if (finaladdr == 0) - rel = &zero_fd; - else - { - PPC_DCBT (&rel->fd_aux); - PPC_DCBT (&rel->fd_func); - } - - /* If the opd entry is not yet relocated (because it's from a shared - object that hasn't been processed yet), then manually reloc it. */ - if (finaladdr != 0 && map != sym_map && !sym_map->l_relocated -#if !defined RTLD_BOOTSTRAP && defined SHARED - /* Bootstrap map doesn't have l_relocated set for it. */ - && sym_map != &GL(dl_rtld_map) -#endif - ) - offset = sym_map->l_addr; - - /* For PPC64, fixup_plt copies the function descriptor from opd - over the corresponding PLT entry. - Initially, PLT Entry[i] is set up for lazy linking, or is zero. - For lazy linking, the fd_toc and fd_aux entries are irrelevant, - so for thread safety we write them before changing fd_func. */ - - plt->fd_aux = rel->fd_aux + offset; - plt->fd_toc = rel->fd_toc + offset; - PPC_DCBF (&plt->fd_toc); - PPC_ISYNC; - - plt->fd_func = rel->fd_func + offset; - PPC_DCBST (&plt->fd_func); - PPC_ISYNC; -#else - finaladdr += ppc64_local_entry_offset (map, sym_map, reloc); - *reloc_addr = finaladdr; -#endif - - return finaladdr; -} - -static inline void __attribute__ ((always_inline)) -elf_machine_plt_conflict (struct link_map *map, lookup_t sym_map, - const Elf64_Rela *reloc, - Elf64_Addr *reloc_addr, Elf64_Addr finaladdr) -{ -#if _CALL_ELF != 2 - Elf64_FuncDesc *plt = (Elf64_FuncDesc *) reloc_addr; - Elf64_FuncDesc *rel = (Elf64_FuncDesc *) finaladdr; - Elf64_FuncDesc zero_fd = {0, 0, 0}; - - if (sym_map == NULL) - finaladdr = 0; - - if (finaladdr == 0) - rel = &zero_fd; - - plt->fd_func = rel->fd_func; - plt->fd_aux = rel->fd_aux; - plt->fd_toc = rel->fd_toc; - PPC_DCBST (&plt->fd_func); - PPC_DCBST (&plt->fd_aux); - PPC_DCBST (&plt->fd_toc); - PPC_SYNC; -#else - finaladdr += ppc64_local_entry_offset (map, sym_map, reloc); - *reloc_addr = finaladdr; -#endif -} - -/* Return the final value of a plt relocation. */ -static inline Elf64_Addr -elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc, - Elf64_Addr value) -{ - return value + reloc->r_addend; -} - - -/* Names of the architecture-specific auditing callback functions. */ -#if _CALL_ELF != 2 -#define ARCH_LA_PLTENTER ppc64_gnu_pltenter -#define ARCH_LA_PLTEXIT ppc64_gnu_pltexit -#else -#define ARCH_LA_PLTENTER ppc64v2_gnu_pltenter -#define ARCH_LA_PLTEXIT ppc64v2_gnu_pltexit -#endif - -#endif /* dl_machine_h */ - -#ifdef RESOLVE_MAP - -#define PPC_LO(v) ((v) & 0xffff) -#define PPC_HI(v) (((v) >> 16) & 0xffff) -#define PPC_HA(v) PPC_HI ((v) + 0x8000) -#define PPC_HIGHER(v) (((v) >> 32) & 0xffff) -#define PPC_HIGHERA(v) PPC_HIGHER ((v) + 0x8000) -#define PPC_HIGHEST(v) (((v) >> 48) & 0xffff) -#define PPC_HIGHESTA(v) PPC_HIGHEST ((v) + 0x8000) -#define BIT_INSERT(var, val, mask) \ - ((var) = ((var) & ~(Elf64_Addr) (mask)) | ((val) & (mask))) - -#define dont_expect(X) __builtin_expect ((X), 0) - -extern void _dl_reloc_overflow (struct link_map *map, - const char *name, - Elf64_Addr *const reloc_addr, - const Elf64_Sym *refsym) - attribute_hidden; - -auto inline void __attribute__ ((always_inline)) -elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, - void *const reloc_addr_arg) -{ - Elf64_Addr *const reloc_addr = reloc_addr_arg; - *reloc_addr = l_addr + reloc->r_addend; -} - -/* This computes the value used by TPREL* relocs. */ -auto inline Elf64_Addr __attribute__ ((always_inline, const)) -elf_machine_tprel (struct link_map *map, - struct link_map *sym_map, - const Elf64_Sym *sym, - const Elf64_Rela *reloc) -{ -#ifndef RTLD_BOOTSTRAP - if (sym_map) - { - CHECK_STATIC_TLS (map, sym_map); -#endif - return TLS_TPREL_VALUE (sym_map, sym, reloc); -#ifndef RTLD_BOOTSTRAP - } -#endif - return 0; -} - -/* Call function at address VALUE (an OPD entry) to resolve ifunc relocs. */ -auto inline Elf64_Addr __attribute__ ((always_inline)) -resolve_ifunc (Elf64_Addr value, - const struct link_map *map, const struct link_map *sym_map) -{ -#if _CALL_ELF != 2 -#ifndef RESOLVE_CONFLICT_FIND_MAP - /* The function we are calling may not yet have its opd entry relocated. */ - Elf64_FuncDesc opd; - if (map != sym_map -# if !defined RTLD_BOOTSTRAP && defined SHARED - /* Bootstrap map doesn't have l_relocated set for it. */ - && sym_map != &GL(dl_rtld_map) -# endif - && !sym_map->l_relocated) - { - Elf64_FuncDesc *func = (Elf64_FuncDesc *) value; - opd.fd_func = func->fd_func + sym_map->l_addr; - opd.fd_toc = func->fd_toc + sym_map->l_addr; - opd.fd_aux = func->fd_aux; - /* GCC 4.9+ eliminates the branch as dead code, force the odp set - dependency. */ - asm ("" : "=r" (value) : "0" (&opd), "X" (opd)); - } -#endif -#endif - return ((Elf64_Addr (*) (unsigned long int)) value) (GLRO(dl_hwcap)); -} - -/* Perform the relocation specified by RELOC and SYM (which is fully - resolved). MAP is the object containing the reloc. */ -auto inline void __attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, - const Elf64_Rela *reloc, - const Elf64_Sym *sym, - const struct r_found_version *version, - void *const reloc_addr_arg, - int skip_ifunc) -{ - Elf64_Addr *const reloc_addr = reloc_addr_arg; - const int r_type = ELF64_R_TYPE (reloc->r_info); - const Elf64_Sym *const refsym = sym; - union unaligned - { - uint16_t u2; - uint32_t u4; - uint64_t u8; - } __attribute__ ((__packed__)); - - if (r_type == R_PPC64_RELATIVE) - { - *reloc_addr = map->l_addr + reloc->r_addend; - return; - } - - if (__glibc_unlikely (r_type == R_PPC64_NONE)) - return; - - /* We need SYM_MAP even in the absence of TLS, for elf_machine_fixup_plt - and STT_GNU_IFUNC. */ - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - Elf64_Addr value = ((sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value) - + reloc->r_addend); - - if (sym != NULL - && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0) - && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) - && __builtin_expect (!skip_ifunc, 1)) - value = resolve_ifunc (value, map, sym_map); - - /* For relocs that don't edit code, return. - For relocs that might edit instructions, break from the switch. */ - switch (r_type) - { - case R_PPC64_ADDR64: - case R_PPC64_GLOB_DAT: - *reloc_addr = value; - return; - - case R_PPC64_IRELATIVE: - if (__glibc_likely (!skip_ifunc)) - value = resolve_ifunc (value, map, sym_map); - *reloc_addr = value; - return; - - case R_PPC64_JMP_IREL: - if (__glibc_likely (!skip_ifunc)) - value = resolve_ifunc (value, map, sym_map); - /* Fall thru */ - case R_PPC64_JMP_SLOT: -#ifdef RESOLVE_CONFLICT_FIND_MAP - elf_machine_plt_conflict (map, sym_map, reloc, reloc_addr, value); -#else - elf_machine_fixup_plt (map, sym_map, reloc, reloc_addr, value); -#endif - return; - - case R_PPC64_DTPMOD64: - if (map->l_info[DT_PPC64(OPT)] - && (map->l_info[DT_PPC64(OPT)]->d_un.d_val & PPC64_OPT_TLS)) - { -#ifdef RTLD_BOOTSTRAP - reloc_addr[0] = 0; - reloc_addr[1] = (sym_map->l_tls_offset - TLS_TP_OFFSET - + TLS_DTV_OFFSET); - return; -#else - if (sym_map != NULL) - { -# ifndef SHARED - CHECK_STATIC_TLS (map, sym_map); -# else - if (TRY_STATIC_TLS (map, sym_map)) -# endif - { - reloc_addr[0] = 0; - /* Set up for local dynamic. */ - reloc_addr[1] = (sym_map->l_tls_offset - TLS_TP_OFFSET - + TLS_DTV_OFFSET); - return; - } - } -#endif - } -#ifdef RTLD_BOOTSTRAP - /* During startup the dynamic linker is always index 1. */ - *reloc_addr = 1; -#else - /* Get the information from the link map returned by the - resolve function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; -#endif - return; - - case R_PPC64_DTPREL64: - if (map->l_info[DT_PPC64(OPT)] - && (map->l_info[DT_PPC64(OPT)]->d_un.d_val & PPC64_OPT_TLS)) - { -#ifdef RTLD_BOOTSTRAP - *reloc_addr = TLS_TPREL_VALUE (sym_map, sym, reloc); - return; -#else - if (sym_map != NULL) - { - /* This reloc is always preceded by R_PPC64_DTPMOD64. */ -# ifndef SHARED - assert (HAVE_STATIC_TLS (map, sym_map)); -# else - if (HAVE_STATIC_TLS (map, sym_map)) -# endif - { - *reloc_addr = TLS_TPREL_VALUE (sym_map, sym, reloc); - return; - } - } -#endif - } - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ -#ifndef RTLD_BOOTSTRAP - if (sym_map != NULL) - *reloc_addr = TLS_DTPREL_VALUE (sym, reloc); -#endif - return; - - case R_PPC64_TPREL64: - *reloc_addr = elf_machine_tprel (map, sym_map, sym, reloc); - return; - - case R_PPC64_TPREL16_LO_DS: - value = elf_machine_tprel (map, sym_map, sym, reloc); - if (dont_expect ((value & 3) != 0)) - _dl_reloc_overflow (map, "R_PPC64_TPREL16_LO_DS", reloc_addr, refsym); - BIT_INSERT (*(Elf64_Half *) reloc_addr, value, 0xfffc); - break; - - case R_PPC64_TPREL16_DS: - value = elf_machine_tprel (map, sym_map, sym, reloc); - if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0)) - _dl_reloc_overflow (map, "R_PPC64_TPREL16_DS", reloc_addr, refsym); - BIT_INSERT (*(Elf64_Half *) reloc_addr, value, 0xfffc); - break; - - case R_PPC64_TPREL16: - value = elf_machine_tprel (map, sym_map, sym, reloc); - if (dont_expect ((value + 0x8000) >= 0x10000)) - _dl_reloc_overflow (map, "R_PPC64_TPREL16", reloc_addr, refsym); - *(Elf64_Half *) reloc_addr = PPC_LO (value); - break; - - case R_PPC64_TPREL16_LO: - value = elf_machine_tprel (map, sym_map, sym, reloc); - *(Elf64_Half *) reloc_addr = PPC_LO (value); - break; - - case R_PPC64_TPREL16_HI: - value = elf_machine_tprel (map, sym_map, sym, reloc); - if (dont_expect (value + 0x80000000 >= 0x100000000LL)) - _dl_reloc_overflow (map, "R_PPC64_TPREL16_HI", reloc_addr, refsym); - *(Elf64_Half *) reloc_addr = PPC_HI (value); - break; - - case R_PPC64_TPREL16_HIGH: - value = elf_machine_tprel (map, sym_map, sym, reloc); - *(Elf64_Half *) reloc_addr = PPC_HI (value); - break; - - case R_PPC64_TPREL16_HA: - value = elf_machine_tprel (map, sym_map, sym, reloc); - if (dont_expect (value + 0x80008000 >= 0x100000000LL)) - _dl_reloc_overflow (map, "R_PPC64_TPREL16_HA", reloc_addr, refsym); - *(Elf64_Half *) reloc_addr = PPC_HA (value); - break; - - case R_PPC64_TPREL16_HIGHA: - value = elf_machine_tprel (map, sym_map, sym, reloc); - *(Elf64_Half *) reloc_addr = PPC_HA (value); - break; - - case R_PPC64_TPREL16_HIGHER: - value = elf_machine_tprel (map, sym_map, sym, reloc); - *(Elf64_Half *) reloc_addr = PPC_HIGHER (value); - break; - - case R_PPC64_TPREL16_HIGHEST: - value = elf_machine_tprel (map, sym_map, sym, reloc); - *(Elf64_Half *) reloc_addr = PPC_HIGHEST (value); - break; - - case R_PPC64_TPREL16_HIGHERA: - value = elf_machine_tprel (map, sym_map, sym, reloc); - *(Elf64_Half *) reloc_addr = PPC_HIGHERA (value); - break; - - case R_PPC64_TPREL16_HIGHESTA: - value = elf_machine_tprel (map, sym_map, sym, reloc); - *(Elf64_Half *) reloc_addr = PPC_HIGHESTA (value); - break; - -#ifndef RTLD_BOOTSTRAP /* None of the following appear in ld.so */ - case R_PPC64_ADDR16_LO_DS: - if (dont_expect ((value & 3) != 0)) - _dl_reloc_overflow (map, "R_PPC64_ADDR16_LO_DS", reloc_addr, refsym); - BIT_INSERT (*(Elf64_Half *) reloc_addr, value, 0xfffc); - break; - - case R_PPC64_ADDR16_LO: - *(Elf64_Half *) reloc_addr = PPC_LO (value); - break; - - case R_PPC64_ADDR16_HI: - if (dont_expect (value + 0x80000000 >= 0x100000000LL)) - _dl_reloc_overflow (map, "R_PPC64_ADDR16_HI", reloc_addr, refsym); - case R_PPC64_ADDR16_HIGH: - *(Elf64_Half *) reloc_addr = PPC_HI (value); - break; - - case R_PPC64_ADDR16_HA: - if (dont_expect (value + 0x80008000 >= 0x100000000LL)) - _dl_reloc_overflow (map, "R_PPC64_ADDR16_HA", reloc_addr, refsym); - case R_PPC64_ADDR16_HIGHA: - *(Elf64_Half *) reloc_addr = PPC_HA (value); - break; - - case R_PPC64_ADDR30: - { - Elf64_Addr delta = value - (Elf64_Xword) reloc_addr; - if (dont_expect ((delta + 0x80000000) >= 0x100000000LL - || (delta & 3) != 0)) - _dl_reloc_overflow (map, "R_PPC64_ADDR30", reloc_addr, refsym); - BIT_INSERT (*(Elf64_Word *) reloc_addr, delta, 0xfffffffc); - } - break; - - case R_PPC64_COPY: - if (dont_expect (sym == NULL)) - /* This can happen in trace mode when an object could not be found. */ - return; - if (dont_expect (sym->st_size > refsym->st_size - || (GLRO(dl_verbose) - && sym->st_size < refsym->st_size))) - { - const char *strtab; - - strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("%s: Symbol `%s' has different size" \ - " in shared object," \ - " consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (char *) value, - MIN (sym->st_size, refsym->st_size)); - return; - - case R_PPC64_UADDR64: - ((union unaligned *) reloc_addr)->u8 = value; - return; - - case R_PPC64_UADDR32: - ((union unaligned *) reloc_addr)->u4 = value; - return; - - case R_PPC64_ADDR32: - if (dont_expect ((value + 0x80000000) >= 0x100000000LL)) - _dl_reloc_overflow (map, "R_PPC64_ADDR32", reloc_addr, refsym); - *(Elf64_Word *) reloc_addr = value; - return; - - case R_PPC64_ADDR24: - if (dont_expect ((value + 0x2000000) >= 0x4000000 || (value & 3) != 0)) - _dl_reloc_overflow (map, "R_PPC64_ADDR24", reloc_addr, refsym); - BIT_INSERT (*(Elf64_Word *) reloc_addr, value, 0x3fffffc); - break; - - case R_PPC64_ADDR16: - if (dont_expect ((value + 0x8000) >= 0x10000)) - _dl_reloc_overflow (map, "R_PPC64_ADDR16", reloc_addr, refsym); - *(Elf64_Half *) reloc_addr = value; - break; - - case R_PPC64_UADDR16: - if (dont_expect ((value + 0x8000) >= 0x10000)) - _dl_reloc_overflow (map, "R_PPC64_UADDR16", reloc_addr, refsym); - ((union unaligned *) reloc_addr)->u2 = value; - return; - - case R_PPC64_ADDR16_DS: - if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0)) - _dl_reloc_overflow (map, "R_PPC64_ADDR16_DS", reloc_addr, refsym); - BIT_INSERT (*(Elf64_Half *) reloc_addr, value, 0xfffc); - break; - - case R_PPC64_ADDR16_HIGHER: - *(Elf64_Half *) reloc_addr = PPC_HIGHER (value); - break; - - case R_PPC64_ADDR16_HIGHEST: - *(Elf64_Half *) reloc_addr = PPC_HIGHEST (value); - break; - - case R_PPC64_ADDR16_HIGHERA: - *(Elf64_Half *) reloc_addr = PPC_HIGHERA (value); - break; - - case R_PPC64_ADDR16_HIGHESTA: - *(Elf64_Half *) reloc_addr = PPC_HIGHESTA (value); - break; - - case R_PPC64_ADDR14: - case R_PPC64_ADDR14_BRTAKEN: - case R_PPC64_ADDR14_BRNTAKEN: - { - if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0)) - _dl_reloc_overflow (map, "R_PPC64_ADDR14", reloc_addr, refsym); - Elf64_Word insn = *(Elf64_Word *) reloc_addr; - BIT_INSERT (insn, value, 0xfffc); - if (r_type != R_PPC64_ADDR14) - { - insn &= ~(1 << 21); - if (r_type == R_PPC64_ADDR14_BRTAKEN) - insn |= 1 << 21; - if ((insn & (0x14 << 21)) == (0x04 << 21)) - insn |= 0x02 << 21; - else if ((insn & (0x14 << 21)) == (0x10 << 21)) - insn |= 0x08 << 21; - } - *(Elf64_Word *) reloc_addr = insn; - } - break; - - case R_PPC64_REL32: - *(Elf64_Word *) reloc_addr = value - (Elf64_Addr) reloc_addr; - return; - - case R_PPC64_REL64: - *reloc_addr = value - (Elf64_Addr) reloc_addr; - return; -#endif /* !RTLD_BOOTSTRAP */ - - default: - _dl_reloc_bad_type (map, r_type, 0); - return; - } - MODIFIED_CODE_NOQUEUE (reloc_addr); -} - -auto inline void __attribute__ ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf64_Addr l_addr, const Elf64_Rela *reloc, - int skip_ifunc) -{ - /* elf_machine_runtime_setup handles this. */ -} - - -#endif /* RESOLVE */ diff --git a/sysdeps/powerpc/powerpc64/dl-trampoline.S b/sysdeps/powerpc/powerpc64/dl-trampoline.S deleted file mode 100644 index 5ec729d1f4..0000000000 --- a/sysdeps/powerpc/powerpc64/dl-trampoline.S +++ /dev/null @@ -1,500 +0,0 @@ -/* PLT trampolines. PPC64 version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - - .section ".text" -/* On entry r0 contains the index of the PLT entry we need to fixup - and r11 contains the link_map (from PLT0+16). The link_map becomes - parm1 (r3) and the index (r0) need to be converted to an offset - (index * 24) in parm2 (r4). */ - -#define FRAME_SIZE (FRAME_MIN_SIZE+64) -/* We need to save the registers used to pass parameters, ie. r3 thru - r10; Use local var space rather than the parameter save area, - because gcc as of 2010/05 doesn't allocate a proper stack frame for - a function that makes no calls except for __tls_get_addr and we - might be here resolving the __tls_get_addr call. */ -#define INT_PARMS FRAME_MIN_SIZE -EALIGN(_dl_runtime_resolve, 4, 0) - stdu r1,-FRAME_SIZE(r1) - cfi_adjust_cfa_offset (FRAME_SIZE) - std r3,INT_PARMS+0(r1) - mr r3,r11 - std r4,INT_PARMS+8(r1) - sldi r4,r0,1 - std r5,INT_PARMS+16(r1) - add r4,r4,r0 - std r6,INT_PARMS+24(r1) - sldi r4,r4,3 - std r7,INT_PARMS+32(r1) - mflr r0 - std r8,INT_PARMS+40(r1) -/* Store the LR in the LR Save area. */ - std r0,FRAME_SIZE+FRAME_LR_SAVE(r1) - cfi_offset (lr, FRAME_LR_SAVE) - std r9,INT_PARMS+48(r1) - std r10,INT_PARMS+56(r1) - bl JUMPTARGET(_dl_fixup) -#ifndef SHARED - nop -#endif -/* Put the registers back. */ - ld r0,FRAME_SIZE+FRAME_LR_SAVE(r1) - ld r10,INT_PARMS+56(r1) - ld r9,INT_PARMS+48(r1) - ld r8,INT_PARMS+40(r1) - ld r7,INT_PARMS+32(r1) - mtlr r0 - ld r6,INT_PARMS+24(r1) - ld r5,INT_PARMS+16(r1) - ld r4,INT_PARMS+8(r1) -/* Prepare for calling the function returned by fixup. */ - PPC64_LOAD_FUNCPTR r3 - ld r3,INT_PARMS+0(r1) -#if _CALL_ELF == 2 -/* Restore the caller's TOC in case we jump to a local entry point. */ - ld r2,FRAME_SIZE+FRAME_TOC_SAVE(r1) -#endif -/* Unwind the stack frame, and jump. */ - addi r1,r1,FRAME_SIZE - bctr -END(_dl_runtime_resolve) -#undef FRAME_SIZE -#undef INT_PARMS - - /* Stack layout: ELFv2 ABI. - +752 previous backchain - +744 spill_r31 - +736 spill_r30 - +720 v8 - +704 v7 - +688 v6 - +672 v5 - +656 v4 - +640 v3 - +624 v2 - +608 v1 - +600 fp10 - ELFv1 ABI +592 fp9 - +592 previous backchain +584 fp8 - +584 spill_r31 +576 fp7 - +576 spill_r30 +568 fp6 - +560 v1 +560 fp5 - +552 fp4 +552 fp4 - +544 fp3 +544 fp3 - +536 fp2 +536 fp2 - +528 fp1 +528 fp1 - +520 r4 +520 r4 - +512 r3 +512 r3 - return values - +504 free - +496 stackframe - +488 lr - +480 r1 - +464 v13 - +448 v12 - +432 v11 - +416 v10 - +400 v9 - +384 v8 - +368 v7 - +352 v6 - +336 v5 - +320 v4 - +304 v3 - +288 v2 - * VMX Parms in V2-V13, V0-V1 are scratch - +284 vrsave - +280 free - +272 fp13 - +264 fp12 - +256 fp11 - +248 fp10 - +240 fp9 - +232 fp8 - +224 fp7 - +216 fp6 - +208 fp5 - +200 fp4 - +192 fp3 - +184 fp2 - +176 fp1 - * FP Parms in FP1-FP13, FP0 is a scratch register - +168 r10 - +160 r9 - +152 r8 - +144 r7 - +136 r6 - +128 r5 - +120 r4 - +112 r3 - * Integer parms in R3-R10, R0 is scratch, R1 SP, R2 is TOC - +104 parm8 - +96 parm7 - +88 parm6 - +80 parm5 - +72 parm4 - +64 parm3 - +56 parm2 - +48 parm1 - * Parameter save area - * (v1 ABI: Allocated by the call, at least 8 double words) - +40 v1 ABI: TOC save area - +32 v1 ABI: Reserved for linker - +24 v1 ABI: Reserved for compiler / v2 ABI: TOC save area - +16 LR save area - +8 CR save area - r1+0 stack back chain - */ -#if _CALL_ELF == 2 -# define FRAME_SIZE 752 -# define VR_RTN 608 -#else -# define FRAME_SIZE 592 -# define VR_RTN 560 -#endif -#define INT_RTN 512 -#define FPR_RTN 528 -#define STACK_FRAME 496 -#define CALLING_LR 488 -#define CALLING_SP 480 -#define INT_PARMS 112 -#define FPR_PARMS 176 -#define VR_PARMS 288 -#define VR_VRSAVE 284 - .section ".toc","aw" -.LC__dl_hwcap: -# ifdef SHARED - .tc _rtld_local_ro[TC],_rtld_local_ro -# else - .tc _dl_hwcap[TC],_dl_hwcap -# endif - .section ".text" - - .machine "altivec" -/* On entry r0 contains the index of the PLT entry we need to fixup - and r11 contains the link_map (from PLT0+16). The link_map becomes - parm1 (r3) and the index (r0) needs to be converted to an offset - (index * 24) in parm2 (r4). */ -#ifndef PROF -EALIGN(_dl_profile_resolve, 4, 0) -/* Spill r30, r31 to preserve the link_map* and reloc_addr, in case we - need to call _dl_call_pltexit. */ - std r31,-8(r1) - std r30,-16(r1) -/* We need to save the registers used to pass parameters, ie. r3 thru - r10; the registers are saved in a stack frame. */ - stdu r1,-FRAME_SIZE(r1) - cfi_adjust_cfa_offset (FRAME_SIZE) - cfi_offset(r31,-8) - cfi_offset(r30,-16) - std r3,INT_PARMS+0(r1) - mr r3,r11 - std r4,INT_PARMS+8(r1) - sldi r4,r0,1 /* index * 2 */ - std r5,INT_PARMS+16(r1) - add r4,r4,r0 /* index * 3 */ - std r6,INT_PARMS+24(r1) - sldi r4,r4,3 /* index * 24 == PLT offset */ - mflr r5 - std r7,INT_PARMS+32(r1) - std r8,INT_PARMS+40(r1) -/* Store the LR in the LR Save area. */ - la r8,FRAME_SIZE(r1) - std r5,FRAME_SIZE+FRAME_LR_SAVE(r1) - cfi_offset (lr, FRAME_LR_SAVE) - std r5,CALLING_LR(r1) - std r9,INT_PARMS+48(r1) - std r10,INT_PARMS+56(r1) - std r8,CALLING_SP(r1) - ld r12,.LC__dl_hwcap@toc(r2) -#ifdef SHARED - /* Load _rtld_local_ro._dl_hwcap. */ - ld r12,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET(r12) -#else - ld r12,0(r12) /* Load extern _dl_hwcap. */ -#endif - andis. r0,r12,(PPC_FEATURE_HAS_ALTIVEC >> 16) - beq L(saveFP) - la r10,(VR_PARMS+0)(r1) - la r9,(VR_PARMS+16)(r1) - li r11,32 - li r12,64 - stvx v2,0,r10 - stvx v3,0,r9 - - stvx v4,r11,r10 - stvx v5,r11,r9 - addi r11,r11,64 - - stvx v6,r12,r10 - stvx v7,r12,r9 - addi r12,r12,64 - - stvx v8,r11,r10 - stvx v9,r11,r9 - addi r11,r11,64 - - stvx v10,r12,r10 - stvx v11,r12,r9 - mfspr r0,VRSAVE - - stvx v12,r11,r10 - stvx v13,r11,r9 -L(saveFP): - stw r0,VR_VRSAVE(r1) -/* Save floating registers. */ - stfd fp1,FPR_PARMS+0(r1) - stfd fp2,FPR_PARMS+8(r1) - stfd fp3,FPR_PARMS+16(r1) - stfd fp4,FPR_PARMS+24(r1) - stfd fp5,FPR_PARMS+32(r1) - stfd fp6,FPR_PARMS+40(r1) - stfd fp7,FPR_PARMS+48(r1) - stfd fp8,FPR_PARMS+56(r1) - stfd fp9,FPR_PARMS+64(r1) - stfd fp10,FPR_PARMS+72(r1) - stfd fp11,FPR_PARMS+80(r1) - li r0,-1 - stfd fp12,FPR_PARMS+88(r1) - stfd fp13,FPR_PARMS+96(r1) -/* Load the extra parameters. */ - addi r6,r1,INT_PARMS - addi r7,r1,STACK_FRAME -/* Save link_map* and reloc_addr parms for later. */ - mr r31,r3 - mr r30,r4 - std r0,0(r7) - bl JUMPTARGET(_dl_profile_fixup) -#ifndef SHARED - nop -#endif -/* Test *framesizep > 0 to see if need to do pltexit processing. */ - ld r0,STACK_FRAME(r1) -/* Put the registers back. */ - lwz r12,VR_VRSAVE(r1) - cmpdi cr1,r0,0 - cmpdi cr0,r12,0 - bgt cr1,L(do_pltexit) - la r10,(VR_PARMS+0)(r1) - la r9,(VR_PARMS+16)(r1) -/* VRSAVE must be non-zero if VMX is present and VRs are in use. */ - beq L(restoreFXR) - li r11,32 - li r12,64 - lvx v2,0,r10 - lvx v3,0,r9 - - lvx v4,r11,r10 - lvx v5,r11,r9 - addi r11,r11,64 - - lvx v6,r12,r10 - lvx v7,r12,r9 - addi r12,r12,64 - - lvx v8,r11,r10 - lvx v9,r11,r9 - addi r11,r11,64 - - lvx v10,r12,r10 - lvx v11,r12,r9 - - lvx v12,r11,r10 - lvx v13,r11,r9 -L(restoreFXR): - ld r0,FRAME_SIZE+FRAME_LR_SAVE(r1) - ld r10,INT_PARMS+56(r1) - ld r9,INT_PARMS+48(r1) - ld r8,INT_PARMS+40(r1) - ld r7,INT_PARMS+32(r1) - mtlr r0 - ld r6,INT_PARMS+24(r1) - ld r5,INT_PARMS+16(r1) - ld r4,INT_PARMS+8(r1) -/* Prepare for calling the function returned by fixup. */ - PPC64_LOAD_FUNCPTR r3 - ld r3,INT_PARMS+0(r1) -#if _CALL_ELF == 2 -/* Restore the caller's TOC in case we jump to a local entry point. */ - ld r2,FRAME_SIZE+FRAME_TOC_SAVE(r1) -#endif -/* Load the floating point registers. */ - lfd fp1,FPR_PARMS+0(r1) - lfd fp2,FPR_PARMS+8(r1) - lfd fp3,FPR_PARMS+16(r1) - lfd fp4,FPR_PARMS+24(r1) - lfd fp5,FPR_PARMS+32(r1) - lfd fp6,FPR_PARMS+40(r1) - lfd fp7,FPR_PARMS+48(r1) - lfd fp8,FPR_PARMS+56(r1) - lfd fp9,FPR_PARMS+64(r1) - lfd fp10,FPR_PARMS+72(r1) - lfd fp11,FPR_PARMS+80(r1) - lfd fp12,FPR_PARMS+88(r1) - lfd fp13,FPR_PARMS+96(r1) -/* Unwind the stack frame, and jump. */ - ld r31,FRAME_SIZE-8(r1) - ld r30,FRAME_SIZE-16(r1) - addi r1,r1,FRAME_SIZE - bctr - -L(do_pltexit): - la r10,(VR_PARMS+0)(r1) - la r9,(VR_PARMS+16)(r1) - beq L(restoreFXR2) - li r11,32 - li r12,64 - lvx v2,0,r10 - lvx v3,0,r9 - - lvx v4,r11,r10 - lvx v5,r11,r9 - addi r11,r11,64 - - lvx v6,r12,r10 - lvx v7,r12,r9 - addi r12,r12,64 - - lvx v8,r11,r10 - lvx v9,r11,r9 - addi r11,r11,64 - - lvx v10,r12,r10 - lvx v11,r12,r9 - - lvx v12,r11,r10 - lvx v13,r11,r9 -L(restoreFXR2): - ld r0,FRAME_SIZE+FRAME_LR_SAVE(r1) - ld r10,INT_PARMS+56(r1) - ld r9,INT_PARMS+48(r1) - ld r8,INT_PARMS+40(r1) - ld r7,INT_PARMS+32(r1) - mtlr r0 - ld r6,INT_PARMS+24(r1) - ld r5,INT_PARMS+16(r1) - ld r4,INT_PARMS+8(r1) -/* Prepare for calling the function returned by fixup. */ - std r2,FRAME_TOC_SAVE(r1) - PPC64_LOAD_FUNCPTR r3 - ld r3,INT_PARMS+0(r1) -/* Load the floating point registers. */ - lfd fp1,FPR_PARMS+0(r1) - lfd fp2,FPR_PARMS+8(r1) - lfd fp3,FPR_PARMS+16(r1) - lfd fp4,FPR_PARMS+24(r1) - lfd fp5,FPR_PARMS+32(r1) - lfd fp6,FPR_PARMS+40(r1) - lfd fp7,FPR_PARMS+48(r1) - lfd fp8,FPR_PARMS+56(r1) - lfd fp9,FPR_PARMS+64(r1) - lfd fp10,FPR_PARMS+72(r1) - lfd fp11,FPR_PARMS+80(r1) - lfd fp12,FPR_PARMS+88(r1) - lfd fp13,FPR_PARMS+96(r1) -/* Call the target function. */ - bctrl - ld r2,FRAME_TOC_SAVE(r1) - lwz r12,VR_VRSAVE(r1) -/* But return here and store the return values. */ - std r3,INT_RTN(r1) - std r4,INT_RTN+8(r1) - stfd fp1,FPR_RTN+0(r1) - stfd fp2,FPR_RTN+8(r1) - cmpdi cr0,r12,0 - la r10,VR_RTN(r1) - stfd fp3,FPR_RTN+16(r1) - stfd fp4,FPR_RTN+24(r1) -#if _CALL_ELF == 2 - la r12,VR_RTN+16(r1) - stfd fp5,FPR_RTN+32(r1) - stfd fp6,FPR_RTN+40(r1) - li r5,32 - li r6,64 - stfd fp7,FPR_RTN+48(r1) - stfd fp8,FPR_RTN+56(r1) - stfd fp9,FPR_RTN+64(r1) - stfd fp10,FPR_RTN+72(r1) -#endif - mr r3,r31 - mr r4,r30 - beq L(callpltexit) - stvx v2,0,r10 -#if _CALL_ELF == 2 - stvx v3,0,r12 - stvx v4,r5,r10 - stvx v5,r5,r12 - addi r5,r5,64 - stvx v6,r6,r10 - stvx v7,r6,r12 - stvx v8,r5,r10 - stvx v9,r5,r12 -#endif -L(callpltexit): - addi r5,r1,INT_PARMS - addi r6,r1,INT_RTN - bl JUMPTARGET(_dl_call_pltexit) -#ifndef SHARED - nop -#endif -/* Restore the return values from target function. */ - lwz r12,VR_VRSAVE(r1) - ld r3,INT_RTN(r1) - ld r4,INT_RTN+8(r1) - lfd fp1,FPR_RTN+0(r1) - lfd fp2,FPR_RTN+8(r1) - cmpdi cr0,r12,0 - la r11,VR_RTN(r1) - lfd fp3,FPR_RTN+16(r1) - lfd fp4,FPR_RTN+24(r1) -#if _CALL_ELF == 2 - la r12,VR_RTN+16(r1) - lfd fp5,FPR_RTN+32(r1) - lfd fp6,FPR_RTN+40(r1) - li r30,32 - li r31,64 - lfd fp7,FPR_RTN+48(r1) - lfd fp8,FPR_RTN+56(r1) - lfd fp9,FPR_RTN+64(r1) - lfd fp10,FPR_RTN+72(r1) -#endif - beq L(pltexitreturn) - lvx v2,0,r11 -#if _CALL_ELF == 2 - lvx v3,0,r12 - lvx v4,r30,r11 - lvx v5,r30,r12 - addi r30,r30,64 - lvx v6,r31,r11 - lvx v7,r31,r12 - lvx v8,r30,r11 - lvx v9,r30,r12 -#endif -L(pltexitreturn): - ld r0,FRAME_SIZE+FRAME_LR_SAVE(r1) - ld r31,FRAME_SIZE-8(r1) - ld r30,FRAME_SIZE-16(r1) - mtlr r0 - ld r1,0(r1) - blr -END(_dl_profile_resolve) -#endif diff --git a/sysdeps/powerpc/powerpc64/entry.h b/sysdeps/powerpc/powerpc64/entry.h deleted file mode 100644 index 9131d9ceb6..0000000000 --- a/sysdeps/powerpc/powerpc64/entry.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Finding the entry point and start of text. PowerPC64 version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#ifndef __ASSEMBLY__ -extern void _start (void); -#endif - -#define ENTRY_POINT _start - -#if _CALL_ELF != 2 -/* We have to provide a special declaration. */ -#define ENTRY_POINT_DECL(class) class void _start (void); - -/* Use the address of ._start as the lowest address for which we need - to keep profiling records. We can't copy the ia64 scheme as our - entry poiny address is really the address of the function - descriptor, not the actual function entry. */ -#define TEXT_START \ - ({ extern unsigned long int _start_as_data[] asm ("_start"); \ - _start_as_data[0]; }) -#endif diff --git a/sysdeps/powerpc/powerpc64/ffsll.c b/sysdeps/powerpc/powerpc64/ffsll.c deleted file mode 100644 index ae18f127a0..0000000000 --- a/sysdeps/powerpc/powerpc64/ffsll.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Find first set bit in a word, counted from least significant end. - For PowerPC. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Torbjorn Granlund (tege@sics.se). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define ffsl __something_else -#include -#include - -#undef ffs - -int -__ffsll (long long int x) -{ - int cnt; - - asm ("cntlzd %0,%1" : "=r" (cnt) : "r" (x & -x)); - return 64 - cnt; -} -weak_alias (__ffsll, ffsll) -#undef ffsl -weak_alias (__ffsll, ffsl) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile deleted file mode 100644 index 317a988854..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -ifeq ($(subdir),math) -sysdep_routines += s_isnan-power7 s_isnan-power6x s_isnan-power6 \ - s_isnan-power5 s_isnan-ppc64 s_copysign-power6 \ - s_copysign-ppc64 s_finite-power7 s_finite-ppc64 \ - s_finitef-ppc64 s_isinff-ppc64 s_isinf-power7 \ - s_isinf-ppc64 s_modf-power5+ s_modf-ppc64 \ - s_modff-power5+ s_modff-ppc64 s_isnan-power8 \ - s_isinf-power8 s_finite-power8 - -libm-sysdep_routines += s_isnan-power7 s_isnan-power6x s_isnan-power6 \ - s_isnan-power5 s_isnan-ppc64 s_llround-power6x \ - s_llround-power5+ s_llround-ppc64 s_ceil-power5+ \ - s_ceil-ppc64 s_ceilf-power5+ s_ceilf-ppc64 \ - s_floor-power5+ s_floor-ppc64 s_floorf-power5+ \ - s_floorf-ppc64 s_round-power5+ s_round-ppc64 \ - s_roundf-power5+ s_roundf-ppc64 s_trunc-power5+ \ - s_trunc-ppc64 s_truncf-power5+ s_truncf-ppc64 \ - s_copysign-power6 s_copysign-ppc64 s_llrint-power6x \ - s_llrint-ppc64 s_finite-power7 s_finite-ppc64 \ - s_finitef-ppc64 s_isinff-ppc64 s_isinf-power7 \ - s_isinf-ppc64 s_logb-power7 s_logbf-power7 \ - s_logbl-power7 s_logb-ppc64 s_logbf-ppc64 \ - s_logbl-ppc64 s_modf-power5+ s_modf-ppc64 \ - s_modff-power5+ s_modff-ppc64 e_hypot-ppc64 \ - e_hypot-power7 e_hypotf-ppc64 e_hypotf-power7 \ - s_isnan-power8 s_isinf-power8 s_finite-power8 \ - s_llrint-power8 s_llround-power8 \ - e_expf-power8 e_expf-ppc64 \ - s_sinf-ppc64 s_sinf-power8 \ - s_cosf-ppc64 s_cosf-power8 - -CFLAGS-s_logbf-power7.c = -mcpu=power7 -CFLAGS-s_logbl-power7.c = -mcpu=power7 -CFLAGS-s_logb-power7.c = -mcpu=power7 -CFLAGS-s_modf-power5+.c = -mcpu=power5+ -CFLAGS-s_modff-power5+.c = -mcpu=power5+ -CFLAGS-e_hypot-power7.c = -mcpu=power7 -CFLAGS-e_hypotf-power7.c = -mcpu=power7 - -# These files quiet sNaNs in a way that is optimized away without -# -fsignaling-nans. -CFLAGS-s_modf-ppc64.c += -fsignaling-nans -CFLAGS-s_modff-ppc64.c += -fsignaling-nans -endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-power8.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-power8.S deleted file mode 100644 index 1e6cc51d9e..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-power8.S +++ /dev/null @@ -1,26 +0,0 @@ -/* __ieee754_expf() POWER8 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef strong_alias -#define strong_alias(a, b) - -#define __ieee754_expf __ieee754_expf_power8 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c deleted file mode 100644 index b236290ea2..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c +++ /dev/null @@ -1,24 +0,0 @@ -/* __ieee_expf() PowerPC64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#undef strong_alias -#define strong_alias(a, b) - -#define __ieee754_expf __ieee754_expf_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c deleted file mode 100644 index 577093675c..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Multiple versions of ieee754_expf. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "init-arch.h" - -extern __typeof (__ieee754_expf) __ieee754_expf_ppc64 attribute_hidden; -extern __typeof (__ieee754_expf) __ieee754_expf_power8 attribute_hidden; - -libc_ifunc (__ieee754_expf, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __ieee754_expf_power8 - : __ieee754_expf_ppc64); - -strong_alias (__ieee754_expf, __expf_finite) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-power7.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-power7.c deleted file mode 100644 index dbe9b33e2e..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-power7.c +++ /dev/null @@ -1,19 +0,0 @@ -/* __ieee_hypot() POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-ppc64.c deleted file mode 100644 index baebb36ae3..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-ppc64.c +++ /dev/null @@ -1,26 +0,0 @@ -/* __ieee_hypot() PowerPC64 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef strong_alias -#define strong_alias(a, b) - -#define __ieee754_hypot __ieee754_hypot_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c deleted file mode 100644 index 6a3d60a830..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of ieee754_hypot. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__ieee754_hypot) __ieee754_hypot_ppc64 attribute_hidden; -extern __typeof (__ieee754_hypot) __ieee754_hypot_power7 attribute_hidden; - -libc_ifunc (__ieee754_hypot, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __ieee754_hypot_power7 - : __ieee754_hypot_ppc64); - -strong_alias (__ieee754_hypot, __hypot_finite) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-power7.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-power7.c deleted file mode 100644 index 70584863f7..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-power7.c +++ /dev/null @@ -1,19 +0,0 @@ -/* __ieee_hypotf() POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-ppc64.c deleted file mode 100644 index 839e94e56c..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-ppc64.c +++ /dev/null @@ -1,26 +0,0 @@ -/* __ieee_hypot() PowerPC64 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef strong_alias -#define strong_alias(a, b) - -#define __ieee754_hypotf __ieee754_hypotf_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf.c deleted file mode 100644 index 2c8112d3b2..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of ieee754_hypot. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__ieee754_hypotf) __ieee754_hypotf_ppc64 attribute_hidden; -extern __typeof (__ieee754_hypotf) __ieee754_hypotf_power7 attribute_hidden; - -libc_ifunc (__ieee754_hypotf, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __ieee754_hypotf_power7 - : __ieee754_hypotf_ppc64); - -strong_alias (__ieee754_hypotf, __hypotf_finite) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil-power5+.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil-power5+.S deleted file mode 100644 index bbea647da7..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil-power5+.S +++ /dev/null @@ -1,31 +0,0 @@ -/* ceil function. PowerPC64/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __ceil __ceil_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil-ppc64.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil-ppc64.S deleted file mode 100644 index c19bb42329..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil-ppc64.S +++ /dev/null @@ -1,31 +0,0 @@ -/* ceil function. PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __ceil __ceil_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil.c deleted file mode 100644 index 968e8cb17e..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceil.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of ceil. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__ceil) __ceil_ppc64 attribute_hidden; -extern __typeof (__ceil) __ceil_power5plus attribute_hidden; - -libc_ifunc (__ceil, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __ceil_power5plus - : __ceil_ppc64); - -weak_alias (__ceil, ceil) - -#ifdef NO_LONG_DOUBLE -strong_alias (__ceil, __ceill) -weak_alias (__ceil, ceill) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __ceil, ceill, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceilf-power5+.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceilf-power5+.S deleted file mode 100644 index 8e875ce679..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceilf-power5+.S +++ /dev/null @@ -1,26 +0,0 @@ -/* ceilf function. PowerPC64/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __ceilf __ceilf_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceilf-ppc64.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceilf-ppc64.S deleted file mode 100644 index c9d31da2a7..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceilf-ppc64.S +++ /dev/null @@ -1,26 +0,0 @@ -/* ceilf function. PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __ceilf __ceilf_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceilf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceilf.c deleted file mode 100644 index 7d4a028fe5..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_ceilf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of ceilf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__ceilf) __ceilf_ppc64 attribute_hidden; -extern __typeof (__ceilf) __ceilf_power5plus attribute_hidden; - -libc_ifunc (__ceilf, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __ceilf_power5plus - : __ceilf_ppc64); - -weak_alias (__ceilf, ceilf) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign-power6.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign-power6.S deleted file mode 100644 index d59fbfae73..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign-power6.S +++ /dev/null @@ -1,33 +0,0 @@ -/* copysign(). PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a, b, c, d) -#undef hidden_def -#define hidden_def(name) - -#define __copysign __copysign_power6 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign-ppc64.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign-ppc64.S deleted file mode 100644 index 3f4fbc96ad..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign-ppc64.S +++ /dev/null @@ -1,35 +0,0 @@ -/* copysign(). PowerPC64 default version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a, b, c, d) - -#define __copysign __copysign_ppc64 -#undef hidden_def -#define hidden_def(name) \ - strong_alias (__copysign_ppc64, __GI___copysign) - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign.c deleted file mode 100644 index 2bfb625bf7..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysign.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Multiple versions of copysign. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Redefine copysign so that the compiler won't complain about the type - mismatch with the IFUNC selector in strong_alias below. */ -#undef __copysign -#define __copysign __redirect_copysign -#include -#include -#undef __copysign -#include -#include "init-arch.h" - -extern __typeof (__redirect_copysign) __copysign_ppc64 attribute_hidden; -extern __typeof (__redirect_copysign) __copysign_power6 attribute_hidden; - -extern __typeof (__redirect_copysign) __libm_copysign; -libc_ifunc (__libm_copysign, - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __copysign_power6 - : __copysign_ppc64); - -strong_alias (__libm_copysign, __copysign) -weak_alias (__copysign, copysign) - -#ifdef NO_LONG_DOUBLE -weak_alias (__copysign,copysignl) -strong_alias(__copysign,__copysignl) -#endif -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __copysign, copysignl, GLIBC_2_0); -# endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __copysign, copysignl, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysignf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysignf.c deleted file mode 100644 index c9be2b6811..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_copysignf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of copysignf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "init-arch.h" - -/* It's safe to use double-precision implementation for single-precision. */ -extern __typeof (__copysignf) __copysign_ppc64 attribute_hidden; -extern __typeof (__copysignf) __copysign_power6 attribute_hidden; - -libc_ifunc (__copysignf, - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __copysign_power6 - : __copysign_ppc64); - -weak_alias (__copysignf, copysignf) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf-power8.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf-power8.S deleted file mode 100644 index ee00a2c43a..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf-power8.S +++ /dev/null @@ -1,26 +0,0 @@ -/* cosf function. PowerPC64/power8 version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __cosf __cosf_power8 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf-ppc64.c deleted file mode 100644 index 635624c538..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf-ppc64.c +++ /dev/null @@ -1,26 +0,0 @@ -/* cosf function. PowerPC64 default version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) - -#define __cosf __cosf_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf.c deleted file mode 100644 index acf2a59d69..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_cosf.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Multiple versions of cosf. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "init-arch.h" - -extern __typeof (__cosf) __cosf_ppc64 attribute_hidden; -extern __typeof (__cosf) __cosf_power8 attribute_hidden; - -libc_ifunc (__cosf, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __cosf_power8 - : __cosf_ppc64); - -weak_alias (__cosf, cosf) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-power7.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-power7.S deleted file mode 100644 index 9220383ee6..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-power7.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isnan(). PowerPC64/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, symbol, ver) - -#define __finite __finite_power7 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-power8.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-power8.S deleted file mode 100644 index fa878ab3e1..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-power8.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isnan(). PowerPC64/POWER7 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, symbol, ver) - -#define __finite __finite_power8 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-ppc64.c deleted file mode 100644 index fabd9b0e3d..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite-ppc64.c +++ /dev/null @@ -1,34 +0,0 @@ -/* finite(). PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) -#undef strong_alias -#define strong_alias(a, b) - -#define FINITE __finite_ppc64 -#ifdef SHARED -# undef hidden_def -# define hidden_def(a) \ - __hidden_ver1 (__finite_ppc64, __GI___finite, __finite_ppc64); -#endif - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c deleted file mode 100644 index a5ec36b72f..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Multiple versions of finite. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __finite __redirect___finite -#define __finitef __redirect___finitef -#define __finitel __redirect___finitel -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__finite) __finite_ppc64 attribute_hidden; -extern __typeof (__finite) __finite_power7 attribute_hidden; -extern __typeof (__finite) __finite_power8 attribute_hidden; -#undef __finite -#undef __finitef -#undef __finitel - -libc_ifunc_redirected (__redirect___finite, __finite, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __finite_power8 - : (hwcap & PPC_FEATURE_ARCH_2_06) - ? __finite_power7 - : __finite_ppc64); - -weak_alias (__finite, finite) - -#ifdef NO_LONG_DOUBLE -strong_alias (__finite, __finitel) -weak_alias (__finite, finitel) -#endif - -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT (libm, GLIBC_2_0) -compat_symbol (libm, finite, finitel, GLIBC_2_0); -# endif -# if LONG_DOUBLE_COMPAT (libm, GLIBC_2_1) -compat_symbol (libm, __finite, __finitel, GLIBC_2_1); -# endif -#else -# if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) -compat_symbol (libc, __finite, __finitel, GLIBC_2_0); -compat_symbol (libc, finite, finitel, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef-ppc64.c deleted file mode 100644 index c6f8033e6e..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef-ppc64.c +++ /dev/null @@ -1,32 +0,0 @@ -/* finitef(). PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) - -#define FINITEF __finitef_ppc64 -#ifdef SHARED -# undef hidden_def -# define hidden_def(a) \ - __hidden_ver1 (__finitef_ppc64, __GI___finitef, __finitef_ppc64); -#endif - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef.c deleted file mode 100644 index cdd7824efb..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of finitef. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __finitef __redirect___finitef -#include -#include -#include "init-arch.h" - -extern __typeof (__finitef) __finitef_ppc64 attribute_hidden; -/* The double-precision version also works for single-precision. */ -extern __typeof (__finitef) __finite_power7 attribute_hidden; -extern __typeof (__finitef) __finite_power8 attribute_hidden; -#undef __finitef - -libc_ifunc_redirected (__redirect___finitef, __finitef, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __finite_power8 - : (hwcap & PPC_FEATURE_ARCH_2_06) - ? __finite_power7 - : __finitef_ppc64); - -weak_alias (__finitef, finitef) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor-power5+.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor-power5+.S deleted file mode 100644 index 24f2460693..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor-power5+.S +++ /dev/null @@ -1,31 +0,0 @@ -/* floor function. PowerPC64/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __floor __floor_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor-ppc64.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor-ppc64.S deleted file mode 100644 index 5ec9a33d89..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor-ppc64.S +++ /dev/null @@ -1,31 +0,0 @@ -/* floor function. PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __floor __floor_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor.c deleted file mode 100644 index 6ab7a35490..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floor.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of floor. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__floor) __floor_ppc64 attribute_hidden; -extern __typeof (__floor) __floor_power5plus attribute_hidden; - -libc_ifunc (__floor, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __floor_power5plus - : __floor_ppc64); - -weak_alias (__floor, floor) - -#ifdef NO_LONG_DOUBLE -strong_alias (__floor, __floorl) -weak_alias (__floor, floorl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __floor, floorl, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floorf-power5+.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floorf-power5+.S deleted file mode 100644 index 8b621de68e..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floorf-power5+.S +++ /dev/null @@ -1,26 +0,0 @@ -/* floorf function. PowerPC64/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __floorf __floorf_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floorf-ppc64.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floorf-ppc64.S deleted file mode 100644 index 3feea6e162..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floorf-ppc64.S +++ /dev/null @@ -1,27 +0,0 @@ -/* floorf function. PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __floorf __floorf_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floorf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floorf.c deleted file mode 100644 index ee96536247..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_floorf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of floorf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__floorf) __floorf_ppc64 attribute_hidden; -extern __typeof (__floorf) __floorf_power5plus attribute_hidden; - -libc_ifunc (__floorf, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __floorf_power5plus - : __floorf_ppc64); - -weak_alias (__floorf, floorf) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf-power7.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf-power7.S deleted file mode 100644 index 33a7e3de1a..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf-power7.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isinf(). PowerPC64/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __isinf __isinf_power7 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf-power8.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf-power8.S deleted file mode 100644 index b630696927..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf-power8.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isinf(). PowerPC64/POWER8 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __isinf __isinf_power8 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf-ppc64.c deleted file mode 100644 index e7f64438b4..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf-ppc64.c +++ /dev/null @@ -1,33 +0,0 @@ -/* isinf(). PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) -#undef strong_alias -#define strong_alias(a, b) - -#define __isinf __isinf_ppc64 -#ifdef SHARED -# undef hidden_def -# define hidden_def(a) \ - __hidden_ver1 (__isinf_ppc64, __GI___isinf, __isinf_ppc64); -#endif - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf.c deleted file mode 100644 index 9c6789c7bd..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Multiple versions of isinf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __isinf __redirect___isinf -#define __isinff __redirect___isinff -#define __isinfl __redirect___isinfl -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__isinf) __isinf_ppc64 attribute_hidden; -extern __typeof (__isinf) __isinf_power7 attribute_hidden; -extern __typeof (__isinf) __isinf_power8 attribute_hidden; -#undef __isinf -#undef __isinff -#undef __isinfl - -libc_ifunc_redirected (__redirect___isinf, __isinf, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __isinf_power8 - : (hwcap & PPC_FEATURE_ARCH_2_06) - ? __isinf_power7 - : __isinf_ppc64); - -weak_alias (__isinf, isinf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isinf, __isinfl) -weak_alias (__isinf, isinfl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) -compat_symbol (libc, __isinf, __isinfl, GLIBC_2_0); -compat_symbol (libc, isinf, isinfl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinff-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinff-ppc64.c deleted file mode 100644 index e58e0b53be..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinff-ppc64.c +++ /dev/null @@ -1,31 +0,0 @@ -/* isinff(). PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) - -#define __isinff __isinff_ppc64 -#ifdef SHARED -# undef hidden_def -# define hidden_def(a) \ - __hidden_ver1 (__isinff_ppc64, __GI___isinff, __isinff_ppc64); -#endif - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinff.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinff.c deleted file mode 100644 index 439e0b80d1..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinff.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Multiple versions of isinf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __isinff __redirect___isinff -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__isinff) __isinff_ppc64 attribute_hidden; -/* The double-precision version also works for single-precision. */ -extern __typeof (__isinff) __isinf_power7 attribute_hidden; -extern __typeof (__isinff) __isinf_power8 attribute_hidden; -#undef __isinff - -libc_ifunc_redirected (__redirect___isinff, __isinff, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __isinf_power8 - : (hwcap & PPC_FEATURE_ARCH_2_06) - ? __isinf_power7 - : __isinff_ppc64); - -weak_alias (__isinff, isinff) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power5.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power5.S deleted file mode 100644 index 18d368a63b..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power5.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isnan(). PowerPC64/POWER5 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, symbol, ver) - -#define __isnan __isnan_power5 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power6.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power6.S deleted file mode 100644 index 7f0eae0430..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power6.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isnan(). PowerPC64/POWER6 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, symbol, ver) - -#define __isnan __isnan_power6 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power6x.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power6x.S deleted file mode 100644 index aa283096ae..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power6x.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isnan(). PowerPC64/POWER6X version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, symbol, ver) - -#define __isnan __isnan_power6x - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power7.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power7.S deleted file mode 100644 index b67d58e2ea..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power7.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isnan(). PowerPC64/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, symbol, ver) - -#define __isnan __isnan_power7 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power8.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power8.S deleted file mode 100644 index 03151b3087..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-power8.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isnan(). PowerPC64/POWER7 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef hidden_def -#define hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, symbol, ver) - -#define __isnan __isnan_power8 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-ppc64.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-ppc64.S deleted file mode 100644 index ee219c14be..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-ppc64.S +++ /dev/null @@ -1,32 +0,0 @@ -/* isnan(). PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) - -#define __isnan __isnan_ppc64 -#undef hidden_def -#define hidden_def(name) \ - .globl __GI___isnan ; .set __GI___isnan,__isnan_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan.c deleted file mode 100644 index 3cfe1793da..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Multiple versions of isnan. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __isnan __redirect___isnan -#define __isnanf __redirect___isnanf -#define __isnanl __redirect___isnanl -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__isnan) __isnan_ppc64 attribute_hidden; -extern __typeof (__isnan) __isnan_power5 attribute_hidden; -extern __typeof (__isnan) __isnan_power6 attribute_hidden; -extern __typeof (__isnan) __isnan_power6x attribute_hidden; -extern __typeof (__isnan) __isnan_power7 attribute_hidden; -extern __typeof (__isnan) __isnan_power8 attribute_hidden; -#undef __isnan -#undef __isnanf -#undef __isnanl - -libc_ifunc_redirected (__redirect___isnan, __isnan, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __isnan_power8 - : (hwcap & PPC_FEATURE_ARCH_2_06) - ? __isnan_power7 - : (hwcap & PPC_FEATURE_POWER6_EXT) - ? __isnan_power6x - : (hwcap & PPC_FEATURE_ARCH_2_05) - ? __isnan_power6 - : (hwcap & PPC_FEATURE_POWER5) - ? __isnan_power5 - : __isnan_ppc64); - -weak_alias (__isnan, isnan) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnanf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnanf.c deleted file mode 100644 index 958c373245..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnanf.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Multiple versions of isnan. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "init-arch.h" - -/* The double-precision implementation also works for the single one. */ -extern __typeof (__isnanf) __isnan_ppc64 attribute_hidden; -extern __typeof (__isnanf) __isnan_power5 attribute_hidden; -extern __typeof (__isnanf) __isnan_power6 attribute_hidden; -extern __typeof (__isnanf) __isnan_power6x attribute_hidden; -extern __typeof (__isnanf) __isnan_power7 attribute_hidden; -extern __typeof (__isnanf) __isnan_power8 attribute_hidden; - -libc_ifunc_hidden (__isnanf, __isnanf, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __isnan_power8 - : (hwcap & PPC_FEATURE_ARCH_2_06) - ? __isnan_power7 - : (hwcap & PPC_FEATURE_POWER6_EXT) - ? __isnan_power6x - : (hwcap & PPC_FEATURE_ARCH_2_05) - ? __isnan_power6 - : (hwcap & PPC_FEATURE_POWER5) - ? __isnan_power5 - : __isnan_ppc64); - -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint-power6x.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint-power6x.S deleted file mode 100644 index f9b1616be3..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint-power6x.S +++ /dev/null @@ -1,31 +0,0 @@ -/* Round double to long int. PowerPC64/POWER6X default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __llrint __llrint_power6x - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint-power8.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint-power8.S deleted file mode 100644 index b7f5276a66..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint-power8.S +++ /dev/null @@ -1,31 +0,0 @@ -/* Round double to long int. PowerPC64/POWER6X default version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __llrint __llrint_power8 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint-ppc64.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint-ppc64.S deleted file mode 100644 index b92dafbcdb..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint-ppc64.S +++ /dev/null @@ -1,31 +0,0 @@ -/* Round double to long int. PowerPC32 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __llrint __llrint_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint.c deleted file mode 100644 index 8db494cfde..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llrint.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Multiple versions of llrint. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Redefine lrint/__lrint so that the compiler won't complain about the type - mismatch with the IFUNC selector in strong_alias below. */ -#define lrint __hidden_lrint -#define __lrint __hidden___lrint - -#include -#include -#undef lrint -#undef __lrint -#include -#include "init-arch.h" - -extern __typeof (__llrint) __llrint_ppc64 attribute_hidden; -extern __typeof (__llrint) __llrint_power6x attribute_hidden; -extern __typeof (__llrint) __llrint_power8 attribute_hidden; - -libc_ifunc (__llrint, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __llrint_power8 : - (hwcap & PPC_FEATURE_POWER6_EXT) - ? __llrint_power6x - : __llrint_ppc64); - -weak_alias (__llrint, llrint) -#ifdef NO_LONG_DOUBLE -strong_alias (__llrint, __llrintl) -weak_alias (__llrint, llrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llrint, llrintl, GLIBC_2_1); -#endif - -/* long has the same width as long long on PowerPC64. */ -strong_alias (__llrint, __lrint) -weak_alias (__lrint, lrint) -#ifdef NO_LONG_DOUBLE -strong_alias (__lrint, __lrintl) -weak_alias (__lrint, lrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lrint, lrintl, GLIBC_2_1); -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-power5+.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-power5+.S deleted file mode 100644 index b8305ce968..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-power5+.S +++ /dev/null @@ -1,32 +0,0 @@ -/* llround(). PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __llround __llround_power5plus -#define __lround __lround_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-power6x.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-power6x.S deleted file mode 100644 index 1145aff2a8..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-power6x.S +++ /dev/null @@ -1,32 +0,0 @@ -/* llround(). PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __llround __llround_power6x -#define __lround __lround_power6x - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-power8.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-power8.S deleted file mode 100644 index 8d6190df89..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-power8.S +++ /dev/null @@ -1,31 +0,0 @@ -/* llround(). PowerPC64 default version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(name, alias) -#undef strong_alias -#define strong_alias(name, alias) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - -#define __llround __llround_power8 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-ppc64.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-ppc64.S deleted file mode 100644 index 8e6f9aed78..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround-ppc64.S +++ /dev/null @@ -1,28 +0,0 @@ -/* llround(). PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __llround __llround_ppc64 -#define __lround __lround_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround.c deleted file mode 100644 index cb1a446158..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_llround.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Multiple versions of llround. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define lround __hidden_lround -#define __lround __hidden___lround - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__llround) __llround_ppc64 attribute_hidden; -extern __typeof (__llround) __llround_power5plus attribute_hidden; -extern __typeof (__llround) __llround_power6x attribute_hidden; -extern __typeof (__llround) __llround_power8 attribute_hidden; - -libc_ifunc (__llround, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __llround_power8 : - (hwcap & PPC_FEATURE_POWER6_EXT) - ? __llround_power6x : - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __llround_power5plus - : __llround_ppc64); - -weak_alias (__llround, llround) - -#ifdef NO_LONG_DOUBLE -weak_alias (__llround, llroundl) -strong_alias (__llround, __llroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llround, llroundl, GLIBC_2_1); -compat_symbol (libm, llround, lroundl, GLIBC_2_1); -#endif - -/* long has the same width as long long on PPC64. */ -#undef lround -#undef __lround -strong_alias (__llround, __lround) -weak_alias (__llround, lround) -#ifdef NO_LONG_DOUBLE -strong_alias (__llround, __llroundl) -weak_alias (__llround, llroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __lround, lroundl, GLIBC_2_1); -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-power7.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-power7.c deleted file mode 100644 index 73b5e2d48c..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-power7.c +++ /dev/null @@ -1,19 +0,0 @@ -/* logb(). PowerPC64/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c deleted file mode 100644 index e428b9a29a..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c +++ /dev/null @@ -1,28 +0,0 @@ -/* logb(). PowerPC32/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) -#undef strong_alias -#define strong_alias(a, b) - -#define __logb __logb_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c deleted file mode 100644 index d70919e3d4..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Multiple versions of logb. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__logb) __logb_ppc64 attribute_hidden; -extern __typeof (__logb) __logb_power7 attribute_hidden; - -libc_ifunc (__logb, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __logb_power7 - : __logb_ppc64); - -weak_alias (__logb, logb) - -#ifdef NO_LONG_DOUBLE -strong_alias (__logb, __logbl) -weak_alias (__logb, logbl) -#endif - -#if LONG_DOUBLE_COMPAT (libm, GLIBC_2_0) -compat_symbol (libm, logb, logbl, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-power7.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-power7.c deleted file mode 100644 index 02e04318e5..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-power7.c +++ /dev/null @@ -1,19 +0,0 @@ -/* logb(). PowerPC64/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-ppc64.c deleted file mode 100644 index 147b710c73..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-ppc64.c +++ /dev/null @@ -1,26 +0,0 @@ -/* logbf(). PowerPC64 default implementation. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) - -#define __logbf __logbf_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c deleted file mode 100644 index 1cacc8a950..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of logbf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__logbf) __logbf_ppc64 attribute_hidden; -extern __typeof (__logbf) __logbf_power7 attribute_hidden; - -libc_ifunc (__logbf, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __logbf_power7 - : __logbf_ppc64); - -weak_alias (__logbf, logbf) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-power7.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-power7.c deleted file mode 100644 index 60ec533b8e..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-power7.c +++ /dev/null @@ -1,19 +0,0 @@ -/* logb(). PowerPC64/POWER7 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-ppc64.c deleted file mode 100644 index 502410f877..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-ppc64.c +++ /dev/null @@ -1,21 +0,0 @@ -/* logbl(). PowerPC64/POWER7 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __logbl __logbl_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c deleted file mode 100644 index 63b9c812e2..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of logbl. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__logbl) __logbl_ppc64 attribute_hidden; -extern __typeof (__logbl) __logbl_power7 attribute_hidden; - -libc_ifunc (__logbl, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __logbl_power7 - : __logbl_ppc64); - -long_double_symbol (libm, __logbl, logbl); diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_lrint.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_lrint.c deleted file mode 100644 index d09286267b..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_lrint.c +++ /dev/null @@ -1 +0,0 @@ - /* __lrint is in s_llrint.c */ diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_lround.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_lround.c deleted file mode 100644 index 0dab5443e2..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_lround.c +++ /dev/null @@ -1 +0,0 @@ -/* __lround is in s_llround.c */ diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf-power5+.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf-power5+.c deleted file mode 100644 index c923f84d97..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf-power5+.c +++ /dev/null @@ -1,19 +0,0 @@ -/* PowerPC/POWER5+ implementation for modf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf-ppc64.c deleted file mode 100644 index 43318ee4dd..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf-ppc64.c +++ /dev/null @@ -1,29 +0,0 @@ -/* PowerPC64 default implementation for modf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) - -#define __modf __modf_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf.c deleted file mode 100644 index 3e79b2bd5a..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Multiple versions of modf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__modf) __modf_ppc64 attribute_hidden; -extern __typeof (__modf) __modf_power5plus attribute_hidden; - -libc_ifunc (__modf, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __modf_power5plus - : __modf_ppc64); - -weak_alias (__modf, modf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__modf, __modfl) -weak_alias (__modf, modfl) -#endif -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __modf, modfl, GLIBC_2_0); -# endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __modf, modfl, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff-power5+.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff-power5+.c deleted file mode 100644 index 22dbf5341e..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff-power5+.c +++ /dev/null @@ -1,19 +0,0 @@ -/* PowerPC/POWER5+ implementation for modff. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff-ppc64.c deleted file mode 100644 index 6fc97f0114..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff-ppc64.c +++ /dev/null @@ -1,26 +0,0 @@ -/* PowerPC64 default implementation for modff. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __modff __modff_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff.c deleted file mode 100644 index f57939cc66..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Multiple versions of modff. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "init-arch.h" - -extern __typeof (__modff) __modff_ppc64 attribute_hidden; -extern __typeof (__modff) __modff_power5plus attribute_hidden; - -libc_ifunc (__modff, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __modff_power5plus - : __modff_ppc64); - -weak_alias (__modff, modff) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_round-power5+.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_round-power5+.S deleted file mode 100644 index a7c7492f21..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_round-power5+.S +++ /dev/null @@ -1,31 +0,0 @@ -/* round function. PowerPC64/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __round __round_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_round-ppc64.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_round-ppc64.S deleted file mode 100644 index 44a2b0105a..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_round-ppc64.S +++ /dev/null @@ -1,31 +0,0 @@ -/* round function. PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __round __round_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_round.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_round.c deleted file mode 100644 index d440f6f45c..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_round.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of round. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__round) __round_ppc64 attribute_hidden; -extern __typeof (__round) __round_power5plus attribute_hidden; - -libc_ifunc (__round, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __round_power5plus - : __round_ppc64); - -weak_alias (__round, round) - -#ifdef NO_LONG_DOUBLE -strong_alias (__round, __roundl) -weak_alias (__round, roundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __round, roundl, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_roundf-power5+.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_roundf-power5+.S deleted file mode 100644 index 81501a1547..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_roundf-power5+.S +++ /dev/null @@ -1,26 +0,0 @@ -/* roundf function. PowerPC64/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __roundf __roundf_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_roundf-ppc64.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_roundf-ppc64.S deleted file mode 100644 index 8f3b24c556..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_roundf-ppc64.S +++ /dev/null @@ -1,26 +0,0 @@ -/* roundf function. PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __roundf __roundf_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_roundf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_roundf.c deleted file mode 100644 index 09609d3e91..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_roundf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of roundf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__roundf) __roundf_ppc64 attribute_hidden; -extern __typeof (__roundf) __roundf_power5plus attribute_hidden; - -libc_ifunc (__roundf, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __roundf_power5plus - : __roundf_ppc64); - -weak_alias (__roundf, roundf) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf-power8.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf-power8.S deleted file mode 100644 index 3d01533da8..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf-power8.S +++ /dev/null @@ -1,26 +0,0 @@ -/* sinf(). PowerPC64/POWER8 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) - -#define __sinf __sinf_power8 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf-ppc64.c deleted file mode 100644 index 83e37f92c6..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf-ppc64.c +++ /dev/null @@ -1,26 +0,0 @@ -/* sinf(). PowerPC64 default version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) - -#define __sinf __sinf_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf.c deleted file mode 100644 index 6d7d6ce50d..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Multiple versions of sinf. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "init-arch.h" - -extern __typeof (__sinf) __sinf_ppc64 attribute_hidden; -extern __typeof (__sinf) __sinf_power8 attribute_hidden; - -libc_ifunc (__sinf, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __sinf_power8 - : __sinf_ppc64); - -weak_alias (__sinf, sinf) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_trunc-power5+.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_trunc-power5+.S deleted file mode 100644 index 53d8cd5013..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_trunc-power5+.S +++ /dev/null @@ -1,31 +0,0 @@ -/* trunc function. PowerPC64/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __trunc __trunc_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_trunc-ppc64.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_trunc-ppc64.S deleted file mode 100644 index 36e8fd05c2..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_trunc-ppc64.S +++ /dev/null @@ -1,31 +0,0 @@ -/* trunc function. PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef weak_alias -#define weak_alias(a,b) -#undef strong_alias -#define strong_alias(a,b) -#undef compat_symbol -#define compat_symbol(a,b,c,d) - -#define __trunc __trunc_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_trunc.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_trunc.c deleted file mode 100644 index 54844d5ff2..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_trunc.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of trunc. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__trunc) __trunc_ppc64 attribute_hidden; -extern __typeof (__trunc) __trunc_power5plus attribute_hidden; - -libc_ifunc (__trunc, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __trunc_power5plus - : __trunc_ppc64); - -weak_alias (__trunc, trunc) - -#ifdef NO_LONG_DOUBLE -strong_alias (__trunc, __truncl) -weak_alias (__trunc, truncl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __trunc, truncl, GLIBC_2_0); -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_truncf-power5+.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_truncf-power5+.S deleted file mode 100644 index e28de7cb1e..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_truncf-power5+.S +++ /dev/null @@ -1,26 +0,0 @@ -/* truncf function. PowerPC64/power5+ version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __truncf __truncf_power5plus - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_truncf-ppc64.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_truncf-ppc64.S deleted file mode 100644 index b60242d83b..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_truncf-ppc64.S +++ /dev/null @@ -1,26 +0,0 @@ -/* truncf function. PowerPC64 default version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef weak_alias -#define weak_alias(a,b) - -#define __truncf __truncf_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_truncf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_truncf.c deleted file mode 100644 index 2c46525235..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_truncf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of truncf. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__truncf) __truncf_ppc64 attribute_hidden; -extern __typeof (__truncf) __truncf_power5plus attribute_hidden; - -libc_ifunc (__truncf, - (hwcap & PPC_FEATURE_POWER5_PLUS) - ? __truncf_power5plus - : __truncf_ppc64); - -weak_alias (__truncf, truncf) diff --git a/sysdeps/powerpc/powerpc64/fpu/s_ceil.S b/sysdeps/powerpc/powerpc64/fpu/s_ceil.S deleted file mode 100644 index 78d7feefed..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_ceil.S +++ /dev/null @@ -1,72 +0,0 @@ -/* ceil function. PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section ".toc","aw" -.LC0: /* 2**52 */ - .tc FD_43300000_0[TC],0x4330000000000000 - .section ".text" - -EALIGN (__ceil, 4, 0) - CALL_MCOUNT 0 - lfd fp13,.LC0@toc(2) - fabs fp0,fp1 - fsub fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO52) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,2 /* Set rounding mode toward +inf. */ - ble- cr6,.L4 - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - bge- cr6,.L9 /* if (x < 0.0) */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadd fp1,fp1,fp1 - blr - END (__ceil) - -weak_alias (__ceil, ceil) - -#ifdef NO_LONG_DOUBLE -weak_alias (__ceil, ceill) -strong_alias (__ceil, __ceill) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __ceil, ceill, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_ceilf.S b/sysdeps/powerpc/powerpc64/fpu/s_ceilf.S deleted file mode 100644 index bc5ab02cb0..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_ceilf.S +++ /dev/null @@ -1,66 +0,0 @@ -/* float ceil function. PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section ".toc","aw" - .p2align 3 -.LC0: /* 2**23 */ - .long 0x4b000000 - .long 0x0 - .section ".text" - -EALIGN (__ceilf, 4, 0) - CALL_MCOUNT 0 - lfs fp13,.LC0@toc(2) - fabs fp0,fp1 - fsubs fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO23) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,2 /* Set rounding mode toward +inf. */ - ble- cr6,.L4 - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - bge- cr6,.L9 /* if (x < 0.0) */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadds fp1,fp1,fp1 - blr - END (__ceilf) - -weak_alias (__ceilf, ceilf) - diff --git a/sysdeps/powerpc/powerpc64/fpu/s_copysign.S b/sysdeps/powerpc/powerpc64/fpu/s_copysign.S deleted file mode 100644 index 59472816c7..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_copysign.S +++ /dev/null @@ -1,59 +0,0 @@ -/* Copy a sign bit between floating-point values. PowerPC64 version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This has been coded in assembler because GCC makes such a mess of it - when it's coded in C. */ - -#include -#include - -ENTRY(__copysign) - CALL_MCOUNT 0 -/* double [f1] copysign (double [f1] x, double [f2] y); - copysign(x,y) returns a value with the magnitude of x and - with the sign bit of y. */ - stfd fp2,-8(r1) - nop - nop - nop - ld r3,-8(r1) - cmpdi r3,0 - blt L(0) - fabs fp1,fp1 - blr -L(0): fnabs fp1,fp1 - blr - END (__copysign) - -weak_alias (__copysign,copysign) - -/* It turns out that it's safe to use this code even for single-precision. */ -weak_alias (__copysign,copysignf) -strong_alias(__copysign,__copysignf) - -#ifdef NO_LONG_DOUBLE -weak_alias (__copysign,copysignl) -strong_alias(__copysign,__copysignl) -#endif -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __copysign, copysignl, GLIBC_2_0) -# endif -#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __copysign, copysignl, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_copysignf.S b/sysdeps/powerpc/powerpc64/fpu/s_copysignf.S deleted file mode 100644 index e05438ae7d..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_copysignf.S +++ /dev/null @@ -1 +0,0 @@ -/* __copysignf is in s_copysign.S */ diff --git a/sysdeps/powerpc/powerpc64/fpu/s_copysignl.S b/sysdeps/powerpc/powerpc64/fpu/s_copysignl.S deleted file mode 100644 index b33ea6e256..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_copysignl.S +++ /dev/null @@ -1,48 +0,0 @@ -/* Copy a sign bit between floating-point values. - IBM extended format long double version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ENTRY(__copysignl) -/* long double [f1,f2] copysign (long double [f1,f2] x, long double [f3,f4] y); - copysign(x,y) returns a value with the magnitude of x and - with the sign bit of y. */ - stfd fp3,-16(r1) - ld r3,-16(r1) - cmpdi r3,0 - blt L(0) - fmr fp0,fp1 - fabs fp1,fp1 - fneg fp3,fp2 - fsel fp2,fp0,fp2,fp3 - blr -L(0): - fmr fp0,fp1 - fnabs fp1,fp1 - fneg fp3,fp2 - fsel fp2,fp0,fp3,fp2 - blr -END (__copysignl) - -#if IS_IN (libm) -long_double_symbol (libm, __copysignl, copysignl) -#else -long_double_symbol (libc, __copysignl, copysignl) -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_fabs.S b/sysdeps/powerpc/powerpc64/fpu/s_fabs.S deleted file mode 100644 index 53d21301ee..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_fabs.S +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __fabs, fabsl, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_fabsl.S b/sysdeps/powerpc/powerpc64/fpu/s_fabsl.S deleted file mode 100644 index 7603abba5d..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_fabsl.S +++ /dev/null @@ -1,34 +0,0 @@ -/* Copy a sign bit between floating-point values. - IBM extended format long double version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ENTRY(__fabsl) -/* long double [f1,f2] fabs (long double [f1,f2] x); - fabs(x,y) returns a value with the magnitude of x and - with the sign bit of y. */ - fmr fp0,fp1 - fabs fp1,fp1 - fneg fp3,fp2 - fsel fp2,fp0,fp2,fp3 - blr -END (__fabsl) - -long_double_symbol (libm, __fabsl, fabsl) diff --git a/sysdeps/powerpc/powerpc64/fpu/s_floor.S b/sysdeps/powerpc/powerpc64/fpu/s_floor.S deleted file mode 100644 index 4a6cc0ebba..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_floor.S +++ /dev/null @@ -1,72 +0,0 @@ -/* Floor function. PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section ".toc","aw" -.LC0: /* 2**52 */ - .tc FD_43300000_0[TC],0x4330000000000000 - .section ".text" - -EALIGN (__floor, 4, 0) - CALL_MCOUNT 0 - lfd fp13,.LC0@toc(2) - fabs fp0,fp1 - fsub fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO52) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,3 /* Set rounding mode toward -inf. */ - ble- cr6,.L4 - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - bge- cr6,.L9 /* if (x < 0.0) */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadd fp1,fp1,fp1 - blr - END (__floor) - -weak_alias (__floor, floor) - -#ifdef NO_LONG_DOUBLE -weak_alias (__floor, floorl) -strong_alias (__floor, __floorl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __floor, floorl, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_floorf.S b/sysdeps/powerpc/powerpc64/fpu/s_floorf.S deleted file mode 100644 index d8b5e21248..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_floorf.S +++ /dev/null @@ -1,66 +0,0 @@ -/* float Floor function. PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section ".toc","aw" - .p2align 3 -.LC0: /* 2**23 */ - .long 0x4b000000 - .long 0x0 - .section ".text" - -EALIGN (__floorf, 4, 0) - CALL_MCOUNT 0 - lfs fp13,.LC0@toc(2) - fabs fp0,fp1 - fsubs fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO23) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,3 /* Set rounding mode toward -inf. */ - ble- cr6,.L4 - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - bge- cr6,.L9 /* if (x < 0.0) */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadds fp1,fp1,fp1 - blr - END (__floorf) - -weak_alias (__floorf, floorf) - diff --git a/sysdeps/powerpc/powerpc64/fpu/s_fma.S b/sysdeps/powerpc/powerpc64/fpu/s_fma.S deleted file mode 100644 index d40695c633..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_fma.S +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fma, fmal, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_isnan.S b/sysdeps/powerpc/powerpc64/fpu/s_isnan.S deleted file mode 100644 index 6cba2d4408..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_isnan.S +++ /dev/null @@ -1,56 +0,0 @@ -/* isnan(). PowerPC64 version. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __isnan(x) */ - .machine power4 -EALIGN (__isnan, 4, 0) - CALL_MCOUNT 0 - mffs fp0 - mtfsb0 4*cr6+lt /* reset_fpscr_bit (FPSCR_VE) */ - fcmpu cr7,fp1,fp1 - mtfsf 255,fp0 - li r3,0 - beqlr+ cr7 /* (x == x) then not a NAN */ - li r3,1 /* else must be a NAN */ - blr - END (__isnan) - -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__isnan, __isnanf) -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -# endif -#endif - diff --git a/sysdeps/powerpc/powerpc64/fpu/s_llrint.S b/sysdeps/powerpc/powerpc64/fpu/s_llrint.S deleted file mode 100644 index 39e765434a..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_llrint.S +++ /dev/null @@ -1,47 +0,0 @@ -/* Round double to long int. PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* long long int[r3] __llrint (double x[fp1]) */ -ENTRY (__llrint) - CALL_MCOUNT 0 - fctid fp13,fp1 - stfd fp13,-16(r1) - nop /* Insure the following load is in a different dispatch group */ - nop /* to avoid pipe stall on POWER4&5. */ - nop - ld r3,-16(r1) - blr - END (__llrint) - -strong_alias (__llrint, __lrint) -weak_alias (__llrint, llrint) -weak_alias (__lrint, lrint) - -#ifdef NO_LONG_DOUBLE -strong_alias (__llrint, __llrintl) -weak_alias (__llrint, llrintl) -strong_alias (__lrint, __lrintl) -weak_alias (__lrint, lrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llrint, llrintl, GLIBC_2_1) -compat_symbol (libm, __lrint, lrintl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_llrintf.S b/sysdeps/powerpc/powerpc64/fpu/s_llrintf.S deleted file mode 100644 index 4050be6437..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_llrintf.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Round double to long int. PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* long long int[r3] __llrintf (float x[fp1]) */ -ENTRY (__llrintf) - CALL_MCOUNT 0 - fctid fp13,fp1 - stfd fp13,-16(r1) - nop /* Insure the following load is in a different dispatch group */ - nop /* to avoid pipe stall on POWER4&5. */ - nop - ld r3,-16(r1) - blr - END (__llrintf) - -strong_alias (__llrintf, __lrintf) -weak_alias (__llrintf, llrintf) -weak_alias (__lrintf, lrintf) - diff --git a/sysdeps/powerpc/powerpc64/fpu/s_llround.S b/sysdeps/powerpc/powerpc64/fpu/s_llround.S deleted file mode 100644 index 0803ba1eb3..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_llround.S +++ /dev/null @@ -1,96 +0,0 @@ -/* llround function. PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section ".toc","aw" -.LC0: /* 2^52 */ - .tc FD_43300000_0[TC],0x4330000000000000 -.LC1: /* 0.5 */ - .tc FD_3fe00000_0[TC],0x3fe0000000000000 - .section ".text" - -/* long long [r3] llround (double x [fp1]) - IEEE 1003.1 llround function. IEEE specifies "round to the nearest - integer value, rounding halfway cases away from zero, regardless of - the current rounding mode." However PowerPC Architecture defines - "round to Nearest" as "Choose the best approximation. In case of a - tie, choose the one that is even (least significant bit o).". - So we can't use the PowerPC "round to Nearest" mode. Instead we set - "round toward Zero" mode and round by adding +-0.5 before rounding - to the integer value. - - It is necessary to detect when x is (+-)0x1.fffffffffffffp-2 - because adding +-0.5 in this case will cause an erroneous shift, - carry and round. We simply return 0 if 0.5 > x > -0.5. Likewise - if x is and odd number between +-(2^52 and 2^53-1) a shift and - carry will erroneously round if biased with +-0.5. Therefore if x - is greater/less than +-2^52 we don't need to bias the number with - +-0.5. */ - -ENTRY (__llround) - CALL_MCOUNT 0 - lfd fp9,.LC0@toc(2) /* Load 2^52 into fpr9. */ - lfd fp10,.LC1@toc(2)/* Load 0.5 into fpr10. */ - fabs fp2,fp1 /* Get the absolute value of x. */ - fsub fp12,fp10,fp10 /* Compute 0.0 into fp12. */ - fcmpu cr6,fp2,fp10 /* if |x| < 0.5 */ - fcmpu cr7,fp2,fp9 /* if |x| >= 2^52 */ - fcmpu cr1,fp1,fp12 /* x is negative? x < 0.0 */ - blt- cr6,.Lretzero /* 0.5 > x < -0.5 so just return 0. */ - bge- cr7,.Lnobias /* 2^52 > x < -2^52 just convert with no bias. */ - /* Test whether an integer to avoid spurious "inexact". */ - fadd fp3,fp2,fp9 - fsub fp3,fp3,fp9 - fcmpu cr5,fp2,fp3 - beq cr5,.Lnobias - fadd fp3,fp2,fp10 /* |x|+=0.5 bias to prepare to round. */ - bge cr1,.Lconvert /* x is positive so don't negate x. */ - fnabs fp3,fp3 /* -(|x|+=0.5) */ -.Lconvert: - fctidz fp4,fp3 /* Convert to Integer double word round toward 0. */ - stfd fp4,-16(r1) - nop - nop - nop - ld r3,-16(r1) /* Load return as integer. */ -.Lout: - blr -.Lretzero: /* 0.5 > x > -0.5 */ - li r3,0 /* return 0. */ - b .Lout -.Lnobias: - fmr fp3,fp1 - b .Lconvert - END (__llround) - -strong_alias (__llround, __lround) -weak_alias (__llround, llround) -weak_alias (__lround, lround) - -#ifdef NO_LONG_DOUBLE -weak_alias (__llround, llroundl) -strong_alias (__llround, __llroundl) -weak_alias (__lround, lroundl) -strong_alias (__lround, __lroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llround, llroundl, GLIBC_2_1) -compat_symbol (libm, __lround, lroundl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_llroundf.S b/sysdeps/powerpc/powerpc64/fpu/s_llroundf.S deleted file mode 100644 index 3e910ac322..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_llroundf.S +++ /dev/null @@ -1,88 +0,0 @@ -/* llroundf function. PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section ".toc","aw" -.LC0: /* 2^23 */ - .tc FD_41600000_0[TC],0x4160000000000000 -.LC1: /* 0.5 */ - .tc FD_3fe00000_0[TC],0x3fe0000000000000 -.LC2: /* 2^52 */ - .tc FD_43300000_0[TC],0x4330000000000000 - .section ".text" - -/* long long [r3] llroundf (float x [fp1]) - IEEE 1003.1 llroundf function. IEEE specifies "roundf to the nearest - integer value, rounding halfway cases away from zero, regardless of - the current rounding mode." However PowerPC Architecture defines - "roundf to Nearest" as "Choose the best approximation. In case of a - tie, choose the one that is even (least significant bit o).". - So we can't use the PowerPC "round to Nearest" mode. Instead we set - "round toward Zero" mode and round by adding +-0.5 before rounding - to the integer value. - - It is necessary to detect when x is (+-)0x1.fffffffffffffp-2 - because adding +-0.5 in this case will cause an erroneous shift, - carry and round. We simply return 0 if 0.5 > x > -0.5. Likewise - if x is and odd number between +-(2^23 and 2^24-1) a shift and - carry will erroneously round if biased with +-0.5. Therefore if x - is greater/less than +-2^23 we don't need to bias the number with - +-0.5. */ - -ENTRY (__llroundf) - CALL_MCOUNT 0 - lfd fp9,.LC0@toc(2) /* Load 2^23 into fpr9. */ - lfd fp10,.LC1@toc(2)/* Load 0.5 into fpr10. */ - lfd fp11,.LC2@toc(2) /* Load 2^52 into fpr11. */ - fabs fp2,fp1 /* Get the absolute value of x. */ - fsub fp12,fp10,fp10 /* Compute 0.0 into fp12. */ - fcmpu cr6,fp2,fp10 /* if |x| < 0.5 */ - fcmpu cr7,fp2,fp9 /* if |x| >= 2^23 */ - fcmpu cr1,fp1,fp12 /* x is negative? x < 0.0 */ - blt- cr6,.Lretzero /* 0.5 > x < -0.5 so just return 0. */ - bge- cr7,.Lnobias /* 2^23 > x < -2^23 just convert with no bias. */ - /* Test whether an integer to avoid spurious "inexact". */ - fadd fp3,fp2,fp11 - fsub fp3,fp3,fp11 - fcmpu cr5,fp2,fp3 - beq cr5,.Lnobias - fadd fp3,fp2,fp10 /* |x|+=0.5 bias to prepare to round. */ - bge cr1,.Lconvert /* x is positive so don't negate x. */ - fnabs fp3,fp3 /* -(|x|+=0.5) */ -.Lconvert: - fctidz fp4,fp3 /* Convert to Integer double word round toward 0. */ - stfd fp4,-16(r1) - nop - nop - nop - ld r3,-16(r1) /* Load return as integer. */ -.Lout: - blr -.Lretzero: /* 0.5 > x > -0.5 */ - li r3,0 /* return 0. */ - b .Lout -.Lnobias: - fmr fp3,fp1 - b .Lconvert - END (__llroundf) - -strong_alias (__llroundf, __lroundf) -weak_alias (__llroundf, llroundf) -weak_alias (__lroundf, lroundf) - diff --git a/sysdeps/powerpc/powerpc64/fpu/s_lrint.S b/sysdeps/powerpc/powerpc64/fpu/s_lrint.S deleted file mode 100644 index d3c2fff581..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_lrint.S +++ /dev/null @@ -1 +0,0 @@ -/* __lrint is in s_llrint.c */ diff --git a/sysdeps/powerpc/powerpc64/fpu/s_lround.S b/sysdeps/powerpc/powerpc64/fpu/s_lround.S deleted file mode 100644 index 4306c405c4..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_lround.S +++ /dev/null @@ -1 +0,0 @@ -/* __lround is in s_llround.S */ diff --git a/sysdeps/powerpc/powerpc64/fpu/s_lroundf.S b/sysdeps/powerpc/powerpc64/fpu/s_lroundf.S deleted file mode 100644 index 6b2a4e37a6..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_lroundf.S +++ /dev/null @@ -1 +0,0 @@ -/* __lroundf is in s_llroundf.S */ diff --git a/sysdeps/powerpc/powerpc64/fpu/s_nearbyint.S b/sysdeps/powerpc/powerpc64/fpu/s_nearbyint.S deleted file mode 100644 index 3dcd04b1f3..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_nearbyint.S +++ /dev/null @@ -1,75 +0,0 @@ -/* Round to int floating-point values. PowerPC64 version. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Adhemerval Zanella , 2011 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This has been coded in assembler because GCC makes such a mess of it - when it's coded in C. */ - -#include -#include - - -/* double [fp1] nearbyint(double [fp1] x) */ - - .section ".toc","aw" -.LC0: /* 2**52 */ - .tc FD_43300000_0[TC],0x4330000000000000 - .section ".text" - -EALIGN (__nearbyint, 4, 0) - CALL_MCOUNT 0 - fabs fp0,fp1 - lfd fp13,.LC0@toc(2) - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO52) */ - bge cr7,.L10 - fsub fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp1,fp12 /* if (x > 0.0) */ - ble cr7, L(lessthanzero) - mffs fp11 - mtfsb0 4*cr7+lt /* Disable FE_INEXACT exception */ - fadd fp1,fp1,fp13 /* x+= TWO52 */ - fsub fp1,fp1,fp13 /* x-= TWO52 */ - fabs fp1,fp1 /* if (x == 0.0) */ - mtfsf 0xff,fp11 /* Restore FE_INEXACT state. */ - blr /* x = 0.0; */ -L(lessthanzero): - bgelr cr7 /* if (x < 0.0) */ - mffs fp11 - mtfsb0 4*cr7+lt - fsub fp1,fp1,fp13 /* x -= TWO52 */ - fadd fp1,fp1,fp13 /* x += TWO52 */ - fnabs fp1,fp1 /* if (x == 0.0) */ - mtfsf 0xff,fp11 /* Restore FE_INEXACT state. */ - blr /* x = -0.0; */ -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadd fp1,fp1,fp1 - blr -END (__nearbyint) - -weak_alias (__nearbyint, nearbyint) - -#ifdef NO_LONG_DOUBLE -weak_alias (__nearbyint, nearbyint) -strong_alias (__nearbyint, __nearbyintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __nearbyint, nearbyintl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_nearbyintf.S b/sysdeps/powerpc/powerpc64/fpu/s_nearbyintf.S deleted file mode 100644 index 11be35f94e..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_nearbyintf.S +++ /dev/null @@ -1,68 +0,0 @@ -/* Round to int floating-point values. PowerPC64 version. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Adhemerval Zanella , 2011 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This has been coded in assembler because GCC makes such a mess of it - when it's coded in C. */ - -#include - - -/* float [fp1] nearbyintf(float [fp1]) */ - - .section ".toc","aw" - .p2align 3 -.LC0: /* 2**23 */ - .long 0x4b000000 - .long 0x0 - .section ".text" - -EALIGN (__nearbyintf, 4, 0) - CALL_MCOUNT 0 - fabs fp0,fp1 - lfs fp13,.LC0@toc(2) - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO52) */ - bge cr7,.L10 - fsubs fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp1,fp12 /* if (x > 0.0) */ - ble cr7, L(lessthanzero) - mffs fp11 - mtfsb0 4*cr7+lt /* Disable FE_INEXACT exception */ - fadds fp1,fp1,fp13 /* x += TWO23 */ - fsubs fp1,fp1,fp13 /* x -= TWO23 */ - fabs fp1,fp1 /* if (x == 0.0) */ - mtfsf 0xff,fp11 /* Restore FE_INEXACT state. */ - blr /* x = 0.0; */ -L(lessthanzero): - bgelr cr7 /* if (x < 0.0) */ - mffs fp11 - mtfsb0 4*cr7+lt /* Disable FE_INEXACT exception */ - fsubs fp1,fp1,fp13 /* x -= TWO23 */ - fadds fp1,fp1,fp13 /* x += TWO23 */ - fnabs fp1,fp1 /* if (x == 0.0) */ - mtfsf 0xff,fp11 /* Restore FE_INEXACT state. */ - blr /* x = -0.0; */ -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadds fp1,fp1,fp1 - blr -END (__nearbyintf) - -weak_alias (__nearbyintf, nearbyintf) diff --git a/sysdeps/powerpc/powerpc64/fpu/s_rint.S b/sysdeps/powerpc/powerpc64/fpu/s_rint.S deleted file mode 100644 index 7ba0adff84..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_rint.S +++ /dev/null @@ -1,65 +0,0 @@ -/* Round to int floating-point values. PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This has been coded in assembler because GCC makes such a mess of it - when it's coded in C. */ - -#include -#include - - .section ".toc","aw" -.LC0: /* 2**52 */ - .tc FD_43300000_0[TC],0x4330000000000000 - .section ".text" - -EALIGN (__rint, 4, 0) - CALL_MCOUNT 0 - lfd fp13,.LC0@toc(2) - fabs fp0,fp1 - fsub fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO52) */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl cr7,.L10 - bng cr6,.L4 - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fabs fp1,fp1 /* if (x == 0.0) */ - blr /* x = 0.0; */ -.L4: - bnllr cr6 /* if (x < 0.0) */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - blr /* x = -0.0; */ -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadd fp1,fp1,fp1 - blr - END (__rint) - -weak_alias (__rint, rint) - -#ifdef NO_LONG_DOUBLE -weak_alias (__rint, rintl) -strong_alias (__rint, __rintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __rint, rintl, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_rintf.S b/sysdeps/powerpc/powerpc64/fpu/s_rintf.S deleted file mode 100644 index b1d1e158c0..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_rintf.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Round float to int floating-point values. PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section ".toc","aw" - .p2align 3 -.LC0: /* 2**23 */ - .long 0x4b000000 - .long 0x0 - .section ".text" - -EALIGN (__rintf, 4, 0) - CALL_MCOUNT 0 - lfs fp13,.LC0@toc(2) - fabs fp0,fp1 - fsubs fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO23) */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl cr7,.L10 - bng cr6,.L4 - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fabs fp1,fp1 /* if (x == 0.0) */ - blr /* x = 0.0; */ -.L4: - bnllr cr6 /* if (x < 0.0) */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - blr /* x = -0.0; */ -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadds fp1,fp1,fp1 - blr - END (__rintf) - -weak_alias (__rintf, rintf) - diff --git a/sysdeps/powerpc/powerpc64/fpu/s_round.S b/sysdeps/powerpc/powerpc64/fpu/s_round.S deleted file mode 100644 index fe315af51d..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_round.S +++ /dev/null @@ -1,87 +0,0 @@ -/* round function. PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section ".toc","aw" -.LC0: /* 2**52 */ - .tc FD_43300000_0[TC],0x4330000000000000 -.LC1: /* 0.5 */ - .tc FD_3fe00000_0[TC],0x3fe0000000000000 - .section ".text" - -/* double [fp1] round (double x [fp1]) - IEEE 1003.1 round function. IEEE specifies "round to the nearest - integer value, rounding halfway cases away from zero, regardless of - the current rounding mode." However PowerPC Architecture defines - "Round to Nearest" as "Choose the best approximation. In case of a - tie, choose the one that is even (least significant bit o).". - So we can't use the PowerPC "Round to Nearest" mode. Instead we set - "Round toward Zero" mode and round by adding +-0.5 before rounding - to the integer value. */ - -EALIGN (__round, 4, 0) - CALL_MCOUNT 0 - lfd fp13,.LC0@toc(2) - fabs fp0,fp1 - fsub fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO52) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,1 /* Set rounding mode toward 0. */ - lfd fp10,.LC1@toc(2) - ble- cr6,.L4 - fadd fp1,fp1,fp10 /* x+= 0.5; */ - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - fsub fp9,fp1,fp10 /* x+= 0.5; */ - bge- cr6,.L9 /* if (x < 0.0) */ - fsub fp1,fp9,fp13 /* x-= TWO52; */ - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadd fp1,fp1,fp1 - blr - END (__round) - -weak_alias (__round, round) - -#ifdef NO_LONG_DOUBLE -weak_alias (__round, roundl) -strong_alias (__round, __roundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __round, roundl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_roundf.S b/sysdeps/powerpc/powerpc64/fpu/s_roundf.S deleted file mode 100644 index d213f43566..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_roundf.S +++ /dev/null @@ -1,81 +0,0 @@ -/* roundf function. PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section ".toc","aw" - .p2align 3 -.LC0: /* 2**23 */ - .long 0x4b000000 -.LC1: /* 0.5 */ - .long 0x3f000000 - - .section ".text" - -/* float [fp1] roundf (float x [fp1]) - IEEE 1003.1 round function. IEEE specifies "round to the nearest - integer value, rounding halfway cases away from zero, regardless of - the current rounding mode." However PowerPC Architecture defines - "Round to Nearest" as "Choose the best approximation. In case of a - tie, choose the one that is even (least significant bit o).". - So we can't use the PowerPC "Round to Nearest" mode. Instead we set - "Round toward Zero" mode and round by adding +-0.5 before rounding - to the integer value. */ - -EALIGN (__roundf, 4, 0) - CALL_MCOUNT 0 - lfs fp13,.LC0@toc(2) - fabs fp0,fp1 - fsubs fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO23) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,1 /* Set rounding mode toward 0. */ - lfs fp10,.LC1@toc(2) - ble- cr6,.L4 - fadds fp1,fp1,fp10 /* x+= 0.5; */ - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - fsubs fp9,fp1,fp10 /* x+= 0.5; */ - bge- cr6,.L9 /* if (x < 0.0) */ - fsubs fp1,fp9,fp13 /* x-= TWO23; */ - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadds fp1,fp1,fp1 - blr - END (__roundf) - -weak_alias (__roundf, roundf) - diff --git a/sysdeps/powerpc/powerpc64/fpu/s_trunc.S b/sysdeps/powerpc/powerpc64/fpu/s_trunc.S deleted file mode 100644 index 890eb21c54..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_trunc.S +++ /dev/null @@ -1,79 +0,0 @@ -/* trunc function. PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section ".toc","aw" -.LC0: /* 2**52 */ - .tc FD_43300000_0[TC],0x4330000000000000 - .section ".text" - -/* double [fp1] trunc (double x [fp1]) - IEEE 1003.1 trunc function. IEEE specifies "trunc to the integer - value, in floating format, nearest to but no larger in magnitude - then the argument." - We set "round toward Zero" mode and trunc by adding +-2**52 then - subtracting +-2**52. */ - -EALIGN (__trunc, 4, 0) - CALL_MCOUNT 0 - lfd fp13,.LC0@toc(2) - fabs fp0,fp1 - fsub fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO52) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,1 /* Set rounding toward 0 mode. */ - ble- cr6,.L4 - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - bge- cr6,.L9 /* if (x < 0.0) */ - fsub fp1,fp1,fp13 /* x-= TWO52; */ - fadd fp1,fp1,fp13 /* x+= TWO52; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadd fp1,fp1,fp1 - blr - END (__trunc) - -weak_alias (__trunc, trunc) - -#ifdef NO_LONG_DOUBLE -weak_alias (__trunc, truncl) -strong_alias (__trunc, __truncl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __trunc, truncl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/fpu/s_truncf.S b/sysdeps/powerpc/powerpc64/fpu/s_truncf.S deleted file mode 100644 index cfcff80bf7..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/s_truncf.S +++ /dev/null @@ -1,73 +0,0 @@ -/* truncf function. PowerPC64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section ".toc","aw" - .p2align 3 -.LC0: /* 2**23 */ - .long 0x4b000000 - .long 0x0 - .section ".text" - -/* float [fp1] truncf (float x [fp1]) - IEEE 1003.1 trunc function. IEEE specifies "trunc to the integer - value, in floating format, nearest to but no larger in magnitude - then the argument." - We set "round toward Zero" mode and trunc by adding +-2**23 then - subtracting +-2**23. */ - -EALIGN (__truncf, 4, 0) - CALL_MCOUNT 0 - lfs fp13,.LC0@toc(2) - fabs fp0,fp1 - fsubs fp12,fp13,fp13 /* generate 0.0 */ - fcmpu cr7,fp0,fp13 /* if (fabs(x) > TWO23) */ - mffs fp11 /* Save current FPU rounding mode and - "inexact" state. */ - fcmpu cr6,fp1,fp12 /* if (x > 0.0) */ - bnl- cr7,.L10 - mtfsfi 7,1 /* Set rounding toward 0 mode. */ - ble- cr6,.L4 - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fabs fp1,fp1 /* if (x == 0.0) */ - /* x = 0.0; */ - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L4: - bge- cr6,.L9 /* if (x < 0.0) */ - fsubs fp1,fp1,fp13 /* x-= TWO23; */ - fadds fp1,fp1,fp13 /* x+= TWO23; */ - fnabs fp1,fp1 /* if (x == 0.0) */ - /* x = -0.0; */ -.L9: - mtfsf 0xff,fp11 /* Restore previous rounding mode and - "inexact" state. */ - blr -.L10: - /* Ensure sNaN input is converted to qNaN. */ - fcmpu cr7,fp1,fp1 - beqlr cr7 - fadds fp1,fp1,fp1 - blr - END (__truncf) - -weak_alias (__truncf, truncf) - diff --git a/sysdeps/powerpc/powerpc64/hp-timing.h b/sysdeps/powerpc/powerpc64/hp-timing.h deleted file mode 100644 index 33064c6781..0000000000 --- a/sysdeps/powerpc/powerpc64/hp-timing.h +++ /dev/null @@ -1,46 +0,0 @@ -/* High precision, low overhead timing functions. powerpc64 version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _HP_TIMING_H -#define _HP_TIMING_H 1 - -/* We always assume having the timestamp register. */ -#define HP_TIMING_AVAIL (1) -#define HP_SMALL_TIMING_AVAIL (1) - -/* We indeed have inlined functions. */ -#define HP_TIMING_INLINE (1) - -/* We use 64bit values for the times. */ -typedef unsigned long long int hp_timing_t; - -/* That's quite simple. Use the `mftb' instruction. Note that the value - might not be 100% accurate since there might be some more instructions - running in this moment. This could be changed by using a barrier like - 'lwsync' right before the `mftb' instruction. But we are not interested - in accurate clock cycles here so we don't do this. */ -#ifdef _ARCH_PWR4 -#define HP_TIMING_NOW(Var) __asm__ __volatile__ ("mfspr %0,268" : "=r" (Var)) -#else -#define HP_TIMING_NOW(Var) __asm__ __volatile__ ("mftb %0" : "=r" (Var)) -#endif - -#include - -#endif /* hp-timing.h */ diff --git a/sysdeps/powerpc/powerpc64/lshift.S b/sysdeps/powerpc/powerpc64/lshift.S deleted file mode 100644 index 480e38688b..0000000000 --- a/sysdeps/powerpc/powerpc64/lshift.S +++ /dev/null @@ -1,177 +0,0 @@ -/* PowerPC64 mpn_lshift -- rp[] = up[] << cnt - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define RP r3 -#define UP r4 -#define N r5 -#define CNT r6 - -#define TNC r0 -#define U0 r30 -#define U1 r31 -#define RETVAL r5 - -EALIGN(__mpn_lshift, 5, 0) - std U1, -8(r1) - std U0, -16(r1) - subfic TNC, CNT, 64 - sldi r7, N, RP - add UP, UP, r7 - add RP, RP, r7 - rldicl. U0, N, 0, 62 - cmpdi CNT, U0, 2 - addi U1, N, RP - ld r10, -8(UP) - srd RETVAL, r10, TNC - - srdi U1, U1, 2 - mtctr U1 - beq cr0, L(b00) - blt cr6, L(b01) - ld r11, -16(UP) - beq cr6, L(b10) - - .align 4 -L(b11): sld r8, r10, CNT - srd r9, r11, TNC - ld U1, -24(UP) - addi UP, UP, -24 - sld r12, r11, CNT - srd r7, U1, TNC - addi RP, RP, 16 - bdnz L(gt3) - - or r11, r8, r9 - sld r8, U1, CNT - b L(cj3) - - .align 4 -L(gt3): ld U0, -8(UP) - or r11, r8, r9 - sld r8, U1, CNT - srd r9, U0, TNC - ld U1, -16(UP) - or r10, r12, r7 - b L(L11) - - .align 5 -L(b10): sld r12, r10, CNT - addi RP, RP, 24 - srd r7, r11, TNC - bdnz L(gt2) - - sld r8, r11, CNT - or r10, r12, r7 - b L(cj2) - -L(gt2): ld U0, -24(UP) - sld r8, r11, CNT - srd r9, U0, TNC - ld U1, -32(UP) - or r10, r12, r7 - sld r12, U0, CNT - srd r7, U1, 0 - ld U0, -40(UP) - or r11, r8, r9 - addi UP, UP, -16 - b L(L10) - - .align 4 -L(b00): ld U1, -16(UP) - sld r12, r10, CNT - srd r7, U1, TNC - ld U0, -24(UP) - sld r8, U1, CNT - srd r9, U0, TNC - ld U1, -32(UP) - or r10, r12, r7 - sld r12, U0, CNT - srd r7, U1, TNC - addi RP, RP, r8 - bdz L(cj4) - -L(gt4): addi UP, UP, -32 - ld U0, -8(UP) - or r11, r8, r9 - b L(L00) - - .align 4 -L(b01): bdnz L(gt1) - sld r8, r10, CNT - std r8, -8(RP) - b L(ret) - -L(gt1): ld U0, -16(UP) - sld r8, r10, CNT - srd r9, U0, TNC - ld U1, -24(UP) - sld r12, U0, CNT - srd r7, U1, TNC - ld U0, -32(UP) - or r11, r8, r9 - sld r8, U1, CNT - srd r9, U0, TNC - ld U1, -40(UP) - addi UP, UP, -40 - or r10, r12, r7 - bdz L(end) - - .align 5 -L(top): sld r12, U0, CNT - srd r7, U1, TNC - ld U0, -8(UP) - std r11, -8(RP) - or r11, r8, r9 -L(L00): sld r8, U1, CNT - srd r9, U0, TNC - ld U1, -16(UP) - std r10, -16(RP) - or r10, r12, r7 -L(L11): sld r12, U0, CNT - srd r7, U1, TNC - ld U0, -24(UP) - std r11, -24(RP) - or r11, r8, r9 -L(L10): sld r8, U1, CNT - srd r9, U0, TNC - ld U1, -32(UP) - addi UP, UP, -32 - std r10, -32(RP) - addi RP, RP, -32 - or r10, r12, r7 - bdnz L(top) - - .align 5 -L(end): sld r12, U0, CNT - srd r7, U1, TNC - std r11, -8(RP) -L(cj4): or r11, r8, r9 - sld r8, U1, CNT - std r10, -16(RP) -L(cj3): or r10, r12, r7 - std r11, -24(RP) -L(cj2): std r10, -32(RP) - std r8, -40(RP) - -L(ret): ld U1, -8(r1) - ld U0, -16(r1) - mr RP, RETVAL - blr -END(__mpn_lshift) diff --git a/sysdeps/powerpc/powerpc64/memcpy.S b/sysdeps/powerpc/powerpc64/memcpy.S deleted file mode 100644 index a4c82c31ef..0000000000 --- a/sysdeps/powerpc/powerpc64/memcpy.S +++ /dev/null @@ -1,397 +0,0 @@ -/* Optimized memcpy implementation for PowerPC64. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); - Returns 'dst'. - - Memcpy handles short copies (< 32-bytes) using a binary move blocks - (no loops) of lwz/stw. The tail (remaining 1-3) bytes is handled - with the appropriate combination of byte and halfword load/stores. - There is minimal effort to optimize the alignment of short moves. - The 64-bit implementations of POWER3 and POWER4 do a reasonable job - of handling unaligned load/stores that do not cross 32-byte boundaries. - - Longer moves (>= 32-bytes) justify the effort to get at least the - destination doubleword (8-byte) aligned. Further optimization is - possible when both source and destination are doubleword aligned. - Each case has a optimized unrolled loop. */ - -#ifndef MEMCPY -# define MEMCPY memcpy -#endif - -EALIGN (MEMCPY, 5, 0) - CALL_MCOUNT 3 - - cmpldi cr1,5,31 - neg 0,3 - std 3,-16(1) - std 31,-8(1) - cfi_offset(31,-8) - andi. 11,3,7 /* check alignment of dst. */ - clrldi 0,0,61 /* Number of bytes until the 1st doubleword of dst. */ - clrldi 10,4,61 /* check alignment of src. */ - cmpldi cr6,5,8 - ble- cr1,.L2 /* If move < 32 bytes use short move code. */ - cmpld cr6,10,11 - mr 12,4 - srdi 9,5,3 /* Number of full double words remaining. */ - mtcrf 0x01,0 - mr 31,5 - beq .L0 - - subf 31,0,5 - /* Move 0-7 bytes as needed to get the destination doubleword aligned. */ -1: bf 31,2f - lbz 6,0(12) - addi 12,12,1 - stb 6,0(3) - addi 3,3,1 -2: bf 30,4f - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -4: bf 29,0f - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -0: - clrldi 10,12,61 /* check alignment of src again. */ - srdi 9,31,3 /* Number of full double words remaining. */ - - /* Copy doublewords from source to destination, assuming the - destination is aligned on a doubleword boundary. - - At this point we know there are at least 25 bytes left (32-7) to copy. - The next step is to determine if the source is also doubleword aligned. - If not branch to the unaligned move code at .L6. which uses - a load, shift, store strategy. - - Otherwise source and destination are doubleword aligned, and we can - the optimized doubleword copy loop. */ -.L0: - clrldi 11,31,61 - mtcrf 0x01,9 - bne- cr6,.L6 /* If source is not DW aligned. */ - - /* Move doublewords where destination and source are DW aligned. - Use a unrolled loop to copy 4 doubleword (32-bytes) per iteration. - If the copy is not an exact multiple of 32 bytes, 1-3 - doublewords are copied as needed to set up the main loop. After - the main loop exits there may be a tail of 1-7 bytes. These byte are - copied a word/halfword/byte at a time as needed to preserve alignment. */ - - srdi 8,31,5 - cmpldi cr1,9,4 - cmpldi cr6,11,0 - mr 11,12 - - bf 30,1f - ld 6,0(12) - ld 7,8(12) - addi 11,12,16 - mtctr 8 - std 6,0(3) - std 7,8(3) - addi 10,3,16 - bf 31,4f - ld 0,16(12) - std 0,16(3) - blt cr1,3f - addi 11,12,24 - addi 10,3,24 - b 4f - .align 4 -1: - mr 10,3 - mtctr 8 - bf 31,4f - ld 6,0(12) - addi 11,12,8 - std 6,0(3) - addi 10,3,8 - - .align 4 -4: - ld 6,0(11) - ld 7,8(11) - ld 8,16(11) - ld 0,24(11) - addi 11,11,32 -2: - std 6,0(10) - std 7,8(10) - std 8,16(10) - std 0,24(10) - addi 10,10,32 - bdnz 4b -3: - - rldicr 0,31,0,60 - mtcrf 0x01,31 - beq cr6,0f -.L9: - add 3,3,0 - add 12,12,0 - -/* At this point we have a tail of 0-7 bytes and we know that the - destination is double word aligned. */ -4: bf 29,2f - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: bf 30,1f - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -1: bf 31,0f - lbz 6,0(12) - stb 6,0(3) -0: - /* Return original dst pointer. */ - ld 31,-8(1) - ld 3,-16(1) - blr - -/* Copy up to 31 bytes. This divided into two cases 0-8 bytes and 9-31 - bytes. Each case is handled without loops, using binary (1,2,4,8) - tests. - - In the short (0-8 byte) case no attempt is made to force alignment - of either source or destination. The hardware will handle the - unaligned load/stores with small delays for crossing 32- 64-byte, and - 4096-byte boundaries. Since these short moves are unlikely to be - unaligned or cross these boundaries, the overhead to force - alignment is not justified. - - The longer (9-31 byte) move is more likely to cross 32- or 64-byte - boundaries. Since only loads are sensitive to the 32-/64-byte - boundaries it is more important to align the source then the - destination. If the source is not already word aligned, we first - move 1-3 bytes as needed. Since we are only word aligned we don't - use double word load/stores to insure that all loads are aligned. - While the destination and stores may still be unaligned, this - is only an issue for page (4096 byte boundary) crossing, which - should be rare for these short moves. The hardware handles this - case automatically with a small delay. */ - - .align 4 -.L2: - mtcrf 0x01,5 - neg 8,4 - clrrdi 11,4,2 - andi. 0,8,3 - ble cr6,.LE8 /* Handle moves of 0-8 bytes. */ -/* At least 9 bytes left. Get the source word aligned. */ - cmpldi cr1,5,16 - mr 10,5 - mr 12,4 - cmpldi cr6,0,2 - beq .L3 /* If the source is already word aligned skip this. */ -/* Copy 1-3 bytes to get source address word aligned. */ - lwz 6,0(11) - subf 10,0,5 - add 12,4,0 - blt cr6,5f - srdi 7,6,16 - bgt cr6,3f -#ifdef __LITTLE_ENDIAN__ - sth 7,0(3) -#else - sth 6,0(3) -#endif - b 7f - .align 4 -3: -#ifdef __LITTLE_ENDIAN__ - rotlwi 6,6,24 - stb 6,0(3) - sth 7,1(3) -#else - stb 7,0(3) - sth 6,1(3) -#endif - b 7f - .align 4 -5: -#ifdef __LITTLE_ENDIAN__ - rotlwi 6,6,8 -#endif - stb 6,0(3) -7: - cmpldi cr1,10,16 - add 3,3,0 - mtcrf 0x01,10 - .align 4 -.L3: -/* At least 6 bytes left and the source is word aligned. */ - blt cr1,8f -16: /* Move 16 bytes. */ - lwz 6,0(12) - lwz 7,4(12) - stw 6,0(3) - lwz 6,8(12) - stw 7,4(3) - lwz 7,12(12) - addi 12,12,16 - stw 6,8(3) - stw 7,12(3) - addi 3,3,16 -8: /* Move 8 bytes. */ - bf 28,4f - lwz 6,0(12) - lwz 7,4(12) - addi 12,12,8 - stw 6,0(3) - stw 7,4(3) - addi 3,3,8 -4: /* Move 4 bytes. */ - bf 29,2f - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: /* Move 2-3 bytes. */ - bf 30,1f - lhz 6,0(12) - sth 6,0(3) - bf 31,0f - lbz 7,2(12) - stb 7,2(3) - ld 3,-16(1) - blr -1: /* Move 1 byte. */ - bf 31,0f - lbz 6,0(12) - stb 6,0(3) -0: - /* Return original dst pointer. */ - ld 3,-16(1) - blr - -/* Special case to copy 0-8 bytes. */ - .align 4 -.LE8: - mr 12,4 - bne cr6,4f -/* Would have liked to use use ld/std here but the 630 processors are - slow for load/store doubles that are not at least word aligned. - Unaligned Load/Store word execute with only a 1 cycle penalty. */ - lwz 6,0(4) - lwz 7,4(4) - stw 6,0(3) - stw 7,4(3) - /* Return original dst pointer. */ - ld 3,-16(1) - blr - .align 4 -4: bf 29,2b - lwz 6,0(4) - stw 6,0(3) -6: - bf 30,5f - lhz 7,4(4) - sth 7,4(3) - bf 31,0f - lbz 8,6(4) - stb 8,6(3) - ld 3,-16(1) - blr - .align 4 -5: - bf 31,0f - lbz 6,4(4) - stb 6,4(3) - .align 4 -0: - /* Return original dst pointer. */ - ld 3,-16(1) - blr - - .align 4 -.L6: - - /* Copy doublewords where the destination is aligned but the source is - not. Use aligned doubleword loads from the source, shifted to realign - the data, to allow aligned destination stores. */ - subf 5,10,12 - andi. 0,9,1 - cmpldi cr6,11,0 - sldi 10,10,3 - mr 11,9 - mr 4,3 - ld 6,0(5) - ld 7,8(5) - subfic 9,10,64 - beq 2f -#ifdef __LITTLE_ENDIAN__ - srd 0,6,10 -#else - sld 0,6,10 -#endif - cmpldi 11,1 - mr 6,7 - addi 4,4,-8 - addi 11,11,-1 - b 1f -2: addi 5,5,8 - .align 4 -#ifdef __LITTLE_ENDIAN__ -0: srd 0,6,10 - sld 8,7,9 -#else -0: sld 0,6,10 - srd 8,7,9 -#endif - cmpldi 11,2 - ld 6,8(5) - or 0,0,8 - addi 11,11,-2 - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srd 0,7,10 -1: sld 8,6,9 -#else - sld 0,7,10 -1: srd 8,6,9 -#endif - or 0,0,8 - beq 8f - ld 7,16(5) - std 0,8(4) - addi 5,5,16 - addi 4,4,16 - b 0b - .align 4 -8: - std 0,8(4) - rldicr 0,31,0,60 - mtcrf 0x01,31 - bne cr6,.L9 /* If the tail is 0 bytes we are done! */ - /* Return original dst pointer. */ - ld 31,-8(1) - ld 3,-16(1) - blr -END_GEN_TB (MEMCPY,TB_TOCLESS) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/powerpc/powerpc64/memset.S b/sysdeps/powerpc/powerpc64/memset.S deleted file mode 100644 index f6581b50f7..0000000000 --- a/sysdeps/powerpc/powerpc64/memset.S +++ /dev/null @@ -1,265 +0,0 @@ -/* Optimized memset implementation for PowerPC64. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section ".toc","aw" -.LC0: - .tc __cache_line_size[TC],__cache_line_size - .section ".text" - .align 2 - -/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); - Returns 's'. - - The memset is done in three sizes: byte (8 bits), word (32 bits), - cache line (256 bits). There is a special case for setting cache lines - to 0, to take advantage of the dcbz instruction. */ - -#ifndef MEMSET -# define MEMSET memset -#endif - -EALIGN (MEMSET, 5, 0) - CALL_MCOUNT 3 - -#define rTMP r0 -#define rRTN r3 /* Initial value of 1st argument. */ -#define rMEMP0 r3 /* Original value of 1st arg. */ -#define rCHR r4 /* Char to set in each byte. */ -#define rLEN r5 /* Length of region to set. */ -#define rMEMP r6 /* Address at which we are storing. */ -#define rALIGN r7 /* Number of bytes we are setting now (when aligning). */ -#define rMEMP2 r8 - -#define rNEG64 r8 /* Constant -64 for clearing with dcbz. */ -#define rCLS r8 /* Cache line size obtained from static. */ -#define rCLM r9 /* Cache line size mask to check for cache alignment. */ -L(_memset): -/* Take care of case for size <= 4. */ - cmpldi cr1, rLEN, 8 - andi. rALIGN, rMEMP0, 7 - mr rMEMP, rMEMP0 - ble- cr1, L(small) - -/* Align to doubleword boundary. */ - cmpldi cr5, rLEN, 31 - insrdi rCHR, rCHR, 8, 48 /* Replicate byte to halfword. */ - beq+ L(aligned2) - mtcrf 0x01, rMEMP0 - subfic rALIGN, rALIGN, 8 - cror 28,30,31 /* Detect odd word aligned. */ - add rMEMP, rMEMP, rALIGN - sub rLEN, rLEN, rALIGN - insrdi rCHR, rCHR, 16, 32 /* Replicate halfword to word. */ - bt 29, L(g4) -/* Process the even word of doubleword. */ - bf+ 31, L(g2) - stb rCHR, 0(rMEMP0) - bt 30, L(g4x) -L(g2): - sth rCHR, -6(rMEMP) -L(g4x): - stw rCHR, -4(rMEMP) - b L(aligned) -/* Process the odd word of doubleword. */ -L(g4): - bf 28, L(g4x) /* If false, word aligned on odd word. */ - bf+ 31, L(g0) - stb rCHR, 0(rMEMP0) - bt 30, L(aligned) -L(g0): - sth rCHR, -2(rMEMP) - -/* Handle the case of size < 31. */ -L(aligned2): - insrdi rCHR, rCHR, 16, 32 /* Replicate halfword to word. */ -L(aligned): - mtcrf 0x01, rLEN - ble cr5, L(medium) -/* Align to 32-byte boundary. */ - andi. rALIGN, rMEMP, 0x18 - subfic rALIGN, rALIGN, 0x20 - insrdi rCHR, rCHR, 32, 0 /* Replicate word to double word. */ - beq L(caligned) - mtcrf 0x01, rALIGN - add rMEMP, rMEMP, rALIGN - sub rLEN, rLEN, rALIGN - cmplwi cr1, rALIGN, 0x10 - mr rMEMP2, rMEMP - bf 28, L(a1) - stdu rCHR, -8(rMEMP2) -L(a1): blt cr1, L(a2) - std rCHR, -8(rMEMP2) - stdu rCHR, -16(rMEMP2) -L(a2): - -/* Now aligned to a 32 byte boundary. */ -L(caligned): - cmpldi cr1, rCHR, 0 - clrrdi. rALIGN, rLEN, 5 - mtcrf 0x01, rLEN - beq cr1, L(zloopstart) /* Special case for clearing memory using dcbz. */ -L(nondcbz): - srdi rTMP, rALIGN, 5 - mtctr rTMP - beq L(medium) /* We may not actually get to do a full line. */ - clrldi. rLEN, rLEN, 59 - add rMEMP, rMEMP, rALIGN - li rNEG64, -0x40 - bdz L(cloopdone) - -L(c3): dcbtst rNEG64, rMEMP - std rCHR, -8(rMEMP) - std rCHR, -16(rMEMP) - std rCHR, -24(rMEMP) - stdu rCHR, -32(rMEMP) - bdnz L(c3) -L(cloopdone): - std rCHR, -8(rMEMP) - std rCHR, -16(rMEMP) - cmpldi cr1, rLEN, 16 - std rCHR, -24(rMEMP) - stdu rCHR, -32(rMEMP) - beqlr - add rMEMP, rMEMP, rALIGN - b L(medium_tail2) - - .align 5 -/* Clear lines of memory in 128-byte chunks. */ -L(zloopstart): -/* If the remaining length is less the 32 bytes, don't bother getting - the cache line size. */ - beq L(medium) - ld rCLS,.LC0@toc(r2) - lwz rCLS,0(rCLS) -/* If the cache line size was not set just goto to L(nondcbz) which is - safe for any cache line size. */ - cmpldi cr1,rCLS,0 - beq cr1,L(nondcbz) - - -/* Now we know the cache line size, and it is not 32-bytes, but - we may not yet be aligned to the cache line. May have a partial - line to fill, so touch it 1st. */ - dcbt 0,rMEMP - addi rCLM,rCLS,-1 -L(getCacheAligned): - cmpldi cr1,rLEN,32 - and. rTMP,rCLM,rMEMP - blt cr1,L(handletail32) - beq L(cacheAligned) - addi rMEMP,rMEMP,32 - addi rLEN,rLEN,-32 - std rCHR,-32(rMEMP) - std rCHR,-24(rMEMP) - std rCHR,-16(rMEMP) - std rCHR,-8(rMEMP) - b L(getCacheAligned) - -/* Now we are aligned to the cache line and can use dcbz. */ -L(cacheAligned): - cmpld cr1,rLEN,rCLS - blt cr1,L(handletail32) - dcbz 0,rMEMP - subf rLEN,rCLS,rLEN - add rMEMP,rMEMP,rCLS - b L(cacheAligned) - -/* We are here because the cache line size was set and was not 32-bytes - and the remainder (rLEN) is less than the actual cache line size. - So set up the preconditions for L(nondcbz) and go there. */ -L(handletail32): - clrrwi. rALIGN, rLEN, 5 - b L(nondcbz) - - .align 5 -L(small): -/* Memset of 8 bytes or less. */ - cmpldi cr6, rLEN, 4 - cmpldi cr5, rLEN, 1 - ble cr6,L(le4) - subi rLEN, rLEN, 4 - stb rCHR,0(rMEMP) - stb rCHR,1(rMEMP) - stb rCHR,2(rMEMP) - stb rCHR,3(rMEMP) - addi rMEMP,rMEMP, 4 - cmpldi cr5, rLEN, 1 -L(le4): - cmpldi cr1, rLEN, 3 - bltlr cr5 - stb rCHR, 0(rMEMP) - beqlr cr5 - stb rCHR, 1(rMEMP) - bltlr cr1 - stb rCHR, 2(rMEMP) - beqlr cr1 - stb rCHR, 3(rMEMP) - blr - -/* Memset of 0-31 bytes. */ - .align 5 -L(medium): - insrdi rCHR, rCHR, 32, 0 /* Replicate word to double word. */ - cmpldi cr1, rLEN, 16 -L(medium_tail2): - add rMEMP, rMEMP, rLEN -L(medium_tail): - bt- 31, L(medium_31t) - bt- 30, L(medium_30t) -L(medium_30f): - bt- 29, L(medium_29t) -L(medium_29f): - bge- cr1, L(medium_27t) - bflr- 28 - std rCHR, -8(rMEMP) - blr - -L(medium_31t): - stbu rCHR, -1(rMEMP) - bf- 30, L(medium_30f) -L(medium_30t): - sthu rCHR, -2(rMEMP) - bf- 29, L(medium_29f) -L(medium_29t): - stwu rCHR, -4(rMEMP) - blt- cr1, L(medium_27f) -L(medium_27t): - std rCHR, -8(rMEMP) - stdu rCHR, -16(rMEMP) -L(medium_27f): - bflr- 28 -L(medium_28t): - std rCHR, -8(rMEMP) - blr -END_GEN_TB (MEMSET,TB_TOCLESS) -libc_hidden_builtin_def (memset) - -#ifndef NO_BZERO_IMPL -/* Copied from bzero.S to prevent the linker from inserting a stub - between bzero and memset. */ -ENTRY (__bzero) - CALL_MCOUNT 3 - mr r5,r4 - li r4,0 - b L(_memset) -END_GEN_TB (__bzero,TB_TOCLESS) - -weak_alias (__bzero, bzero) -#endif diff --git a/sysdeps/powerpc/powerpc64/mul_1.S b/sysdeps/powerpc/powerpc64/mul_1.S deleted file mode 100644 index 68e85cbdc8..0000000000 --- a/sysdeps/powerpc/powerpc64/mul_1.S +++ /dev/null @@ -1,135 +0,0 @@ -/* PowerPC64 __mpn_mul_1 -- Multiply a limb vector with a limb and store - the result in a second limb vector. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define RP r3 -#define UP r4 -#define N r5 -#define VL r6 - -EALIGN(__mpn_mul_1, 5, 0) - std r27, -40(r1) - std r26, -48(r1) - li r12, 0 - ld r26, 0(UP) - - rldicl. r0, N, 0, 62 - cmpdi VL, r0, 2 - addic N, N, RP - srdi N, N, 2 - mtctr N - beq cr0, L(b00) - blt cr6, L(b01) - beq cr6, L(b10) - -L(b11): mr cr7, r12 - mulld cr0, r26, VL - mulhdu r12, r26, VL - addi UP, UP, 8 - addc r0, r0, r7 - std r0, 0(RP) - addi RP, RP, 8 - b L(fic) - -L(b00): ld r27, r8(UP) - addi UP, UP, 16 - mulld r0, r26, VL - mulhdu N, r26, VL - mulld r7, r27, VL - mulhdu r8, r27, VL - addc r0, r0, r12 - adde r7, r7, N - addze r12, r8 - std r0, 0(RP) - std r7, 8(RP) - addi RP, RP, 16 - b L(fic) - - nop -L(b01): bdnz L(gt1) - mulld r0, r26, VL - mulhdu r8, r26, VL - addc r0, r0, r12 - std r0, 0(RP) - b L(ret) -L(gt1): ld r27, 8(UP) - nop - mulld r0, r26, VL - mulhdu N, r26, VL - ld r26, 16(UP) - mulld r7, r27, VL - mulhdu r8, r27, VL - mulld r9, r26, VL - mulhdu r10, r26, VL - addc r0, r0, r12 - adde r7, r7, N - adde r9, r9, r8 - addze r12, r10 - std r0, 0(RP) - std r7, 8(RP) - std r9, 16(RP) - addi UP, UP, 24 - addi RP, RP, 24 - b L(fic) - - nop -L(fic): ld r26, 0(UP) -L(b10): ld r27, 8(UP) - addi UP, UP, 16 - bdz L(end) - -L(top): mulld r0, r26, VL - mulhdu N, r26, VL - mulld r7, r27, VL - mulhdu r8, r27, VL - ld r26, 0(UP) - ld r27, 8(UP) - adde r0, r0, r12 - adde r7, r7, N - mulld r9, r26, VL - mulhdu r10, r26, VL - mulld r11, r27, VL - mulhdu r12, r27, VL - ld r26, 16(UP) - ld r27, 24(UP) - std r0, 0(RP) - adde r9, r9, r8 - std r7, 8(RP) - adde r11, r11, r10 - std r9, 16(RP) - addi UP, UP, 32 - std r11, 24(RP) - - addi RP, RP, 32 - bdnz L(top) - -L(end): mulld r0, r26, VL - mulhdu N, r26, VL - mulld r7, r27, VL - mulhdu r8, r27, VL - adde r0, r0, r12 - adde r7, r7, N - std r0, 0(RP) - std r7, 8(RP) -L(ret): addze RP, r8 - ld r27, -40(r1) - ld r26, -48(r1) - blr -END(__mpn_mul_1) diff --git a/sysdeps/powerpc/powerpc64/multiarch/Makefile b/sysdeps/powerpc/powerpc64/multiarch/Makefile deleted file mode 100644 index 5da9052993..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -ifeq ($(subdir),string) -sysdep_routines += memcpy-power7 memcpy-a2 memcpy-power6 memcpy-cell \ - memcpy-power4 memcpy-ppc64 \ - memcmp-power8 memcmp-power7 memcmp-power4 memcmp-ppc64 \ - memset-power7 memset-power6 memset-power4 \ - memset-ppc64 memset-power8 \ - mempcpy-power7 mempcpy-ppc64 memchr-power7 memchr-ppc64 \ - memrchr-power7 memrchr-ppc64 rawmemchr-power7 \ - rawmemchr-ppc64 strlen-power7 strlen-ppc64 \ - strnlen-power8 strnlen-power7 strnlen-ppc64 \ - strcasecmp-power7 strcasecmp_l-power7 \ - strncase-power7 strncase_l-power7 \ - strncmp-power9 strncmp-power8 strncmp-power7 \ - strncmp-power4 strncmp-ppc64 \ - strchr-power8 strchr-power7 strchr-ppc64 \ - strchrnul-power8 strchrnul-power7 strchrnul-ppc64 \ - strcpy-power8 strcpy-power7 strcpy-ppc64 stpcpy-power8 \ - stpcpy-power7 stpcpy-ppc64 \ - strrchr-power8 strrchr-power7 strrchr-ppc64 \ - strncat-power8 strncat-power7 strncat-ppc64 \ - strncpy-power7 strncpy-ppc64 \ - stpncpy-power8 stpncpy-power7 stpncpy-ppc64 \ - strcmp-power9 strcmp-power8 strcmp-power7 strcmp-ppc64 \ - strcat-power8 strcat-power7 strcat-ppc64 \ - memmove-power7 memmove-ppc64 wordcopy-ppc64 bcopy-ppc64 \ - strncpy-power8 strstr-power7 strstr-ppc64 \ - strspn-power8 strspn-ppc64 strcspn-power8 strcspn-ppc64 \ - strlen-power8 strcasestr-power8 strcasestr-ppc64 \ - strcasecmp-ppc64 strcasecmp-power8 strncase-ppc64 \ - strncase-power8 - -CFLAGS-strncase-power7.c += -mcpu=power7 -funroll-loops -CFLAGS-strncase_l-power7.c += -mcpu=power7 -funroll-loops -endif - -ifeq ($(subdir),wcsmbs) -sysdep_routines += wcschr-power7 wcschr-power6 wcschr-ppc64 \ - wcsrchr-power7 wcsrchr-power6 wcsrchr-ppc64 \ - wcscpy-power7 wcscpy-power6 wcscpy-ppc64 \ - -CFLAGS-wcschr-power7.c += -mcpu=power7 -CFLAGS-wcschr-power6.c += -mcpu=power6 -CFLAGS-wcsrchr-power7.c += -mcpu=power7 -CFLAGS-wcsrchr-power6.c += -mcpu=power6 -CFLAGS-wcscpy-power7.c += -mcpu=power7 -CFLAGS-wcscpy-power6.c += -mcpu=power6 -endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/bcopy-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/bcopy-ppc64.c deleted file mode 100644 index a8a097a614..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/bcopy-ppc64.c +++ /dev/null @@ -1,27 +0,0 @@ -/* PowerPC64 default bcopy. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -extern __typeof (bcopy) __bcopy_ppc attribute_hidden; -extern __typeof (memmove) __memmove_ppc attribute_hidden; - -void __bcopy_ppc (const void *src, void *dest, size_t n) -{ - __memmove_ppc (dest, src, n); -} diff --git a/sysdeps/powerpc/powerpc64/multiarch/bcopy.c b/sysdeps/powerpc/powerpc64/multiarch/bcopy.c deleted file mode 100644 index 05d46e2b48..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/bcopy.c +++ /dev/null @@ -1,29 +0,0 @@ -/* PowerPC64 multiarch bcopy. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "init-arch.h" - -extern __typeof (bcopy) __bcopy_ppc attribute_hidden; -/* __bcopy_power7 symbol is implemented at memmove-power7.S */ -extern __typeof (bcopy) __bcopy_power7 attribute_hidden; - -libc_ifunc (bcopy, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __bcopy_power7 - : __bcopy_ppc); diff --git a/sysdeps/powerpc/powerpc64/multiarch/bzero.c b/sysdeps/powerpc/powerpc64/multiarch/bzero.c deleted file mode 100644 index 83b224b8d3..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/bzero.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Multiple versions of bzero. PowerPC64 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for definition in libc. */ -#if IS_IN (libc) -# include -# include -# include "init-arch.h" - -extern __typeof (bzero) __bzero_ppc attribute_hidden; -extern __typeof (bzero) __bzero_power4 attribute_hidden; -extern __typeof (bzero) __bzero_power6 attribute_hidden; -extern __typeof (bzero) __bzero_power7 attribute_hidden; -extern __typeof (bzero) __bzero_power8 attribute_hidden; - -libc_ifunc (__bzero, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __bzero_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __bzero_power7 : - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __bzero_power6 : - (hwcap & PPC_FEATURE_POWER4) - ? __bzero_power4 - : __bzero_ppc); - -weak_alias (__bzero, bzero) -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c deleted file mode 100644 index eb173f8b05..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c +++ /dev/null @@ -1,389 +0,0 @@ -/* Enumerate available IFUNC implementations of a function. PowerPC64 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Maximum number of IFUNC implementations. */ -#define MAX_IFUNC 6 - -size_t -__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, - size_t max) -{ - assert (max >= MAX_IFUNC); - - size_t i = 0; - - unsigned long int hwcap = GLRO(dl_hwcap); - unsigned long int hwcap2 = GLRO(dl_hwcap2); - - /* hwcap contains only the latest supported ISA, the code checks which is - and fills the previous supported ones. */ - if (hwcap & PPC_FEATURE_ARCH_2_06) - hwcap |= PPC_FEATURE_ARCH_2_05 | PPC_FEATURE_POWER5_PLUS | - PPC_FEATURE_POWER5 | PPC_FEATURE_POWER4; - else if (hwcap & PPC_FEATURE_ARCH_2_05) - hwcap |= PPC_FEATURE_POWER5_PLUS | PPC_FEATURE_POWER5 | PPC_FEATURE_POWER4; - else if (hwcap & PPC_FEATURE_POWER5_PLUS) - hwcap |= PPC_FEATURE_POWER5 | PPC_FEATURE_POWER4; - else if (hwcap & PPC_FEATURE_POWER5) - hwcap |= PPC_FEATURE_POWER4; - -#ifdef SHARED - /* Support sysdeps/powerpc/powerpc64/multiarch/memcpy.c. */ - IFUNC_IMPL (i, name, memcpy, - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_HAS_VSX, - __memcpy_power7) - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_ARCH_2_06, - __memcpy_a2) - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_ARCH_2_05, - __memcpy_power6) - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_CELL_BE, - __memcpy_cell) - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_POWER4, - __memcpy_power4) - IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/memmove.c. */ - IFUNC_IMPL (i, name, memmove, - IFUNC_IMPL_ADD (array, i, memmove, hwcap & PPC_FEATURE_HAS_VSX, - __memmove_power7) - IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/memset.c. */ - IFUNC_IMPL (i, name, memset, - IFUNC_IMPL_ADD (array, i, memset, hwcap2 & PPC_FEATURE2_ARCH_2_07, - __memset_power8) - IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_HAS_VSX, - __memset_power7) - IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_ARCH_2_05, - __memset_power6) - IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_POWER4, - __memset_power4) - IFUNC_IMPL_ADD (array, i, memset, 1, __memset_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strcpy.c. */ - IFUNC_IMPL (i, name, strcpy, - IFUNC_IMPL_ADD (array, i, strcpy, hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strcpy_power8) - IFUNC_IMPL_ADD (array, i, strcpy, hwcap & PPC_FEATURE_HAS_VSX, - __strcpy_power7) - IFUNC_IMPL_ADD (array, i, strcpy, 1, - __strcpy_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/stpcpy.c. */ - IFUNC_IMPL (i, name, stpcpy, - IFUNC_IMPL_ADD (array, i, stpcpy, hwcap2 & PPC_FEATURE2_ARCH_2_07, - __stpcpy_power8) - IFUNC_IMPL_ADD (array, i, stpcpy, hwcap & PPC_FEATURE_HAS_VSX, - __stpcpy_power7) - IFUNC_IMPL_ADD (array, i, stpcpy, 1, - __stpcpy_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strlen.c. */ - IFUNC_IMPL (i, name, strlen, - IFUNC_IMPL_ADD (array, i, strlen, hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strlen_power8) - IFUNC_IMPL_ADD (array, i, strlen, hwcap & PPC_FEATURE_HAS_VSX, - __strlen_power7) - IFUNC_IMPL_ADD (array, i, strlen, 1, - __strlen_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strncmp.c. */ - IFUNC_IMPL (i, name, strncmp, - IFUNC_IMPL_ADD (array, i, strncmp, hwcap2 & PPC_FEATURE2_ARCH_3_00, - __strncmp_power9) - IFUNC_IMPL_ADD (array, i, strncmp, hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strncmp_power8) - IFUNC_IMPL_ADD (array, i, strncmp, hwcap & PPC_FEATURE_HAS_VSX, - __strncmp_power7) - IFUNC_IMPL_ADD (array, i, strncmp, hwcap & PPC_FEATURE_POWER4, - __strncmp_power4) - IFUNC_IMPL_ADD (array, i, strncmp, 1, - __strncmp_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strchr.c. */ - IFUNC_IMPL (i, name, strchr, - IFUNC_IMPL_ADD (array, i, strchr, - hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strchr_power8) - IFUNC_IMPL_ADD (array, i, strchr, - hwcap & PPC_FEATURE_HAS_VSX, - __strchr_power7) - IFUNC_IMPL_ADD (array, i, strchr, 1, - __strchr_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strchrnul.c. */ - IFUNC_IMPL (i, name, strchrnul, - IFUNC_IMPL_ADD (array, i, strchrnul, - hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strchrnul_power8) - IFUNC_IMPL_ADD (array, i, strchrnul, - hwcap & PPC_FEATURE_HAS_VSX, - __strchrnul_power7) - IFUNC_IMPL_ADD (array, i, strchrnul, 1, - __strchrnul_ppc)) -#endif - - /* Support sysdeps/powerpc/powerpc64/multiarch/memcmp.c. */ - IFUNC_IMPL (i, name, memcmp, - IFUNC_IMPL_ADD (array, i, memcmp, hwcap2 & PPC_FEATURE2_ARCH_2_07, - __memcmp_power8) - IFUNC_IMPL_ADD (array, i, memcmp, hwcap & PPC_FEATURE_HAS_VSX, - __memcmp_power7) - IFUNC_IMPL_ADD (array, i, memcmp, hwcap & PPC_FEATURE_POWER4, - __memcmp_power4) - IFUNC_IMPL_ADD (array, i, memcmp, 1, __memcmp_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/bzero.c. */ - IFUNC_IMPL (i, name, bzero, - IFUNC_IMPL_ADD (array, i, bzero, hwcap2 & PPC_FEATURE2_ARCH_2_07, - __bzero_power8) - IFUNC_IMPL_ADD (array, i, bzero, hwcap & PPC_FEATURE_HAS_VSX, - __bzero_power7) - IFUNC_IMPL_ADD (array, i, bzero, hwcap & PPC_FEATURE_ARCH_2_05, - __bzero_power6) - IFUNC_IMPL_ADD (array, i, bzero, hwcap & PPC_FEATURE_POWER4, - __bzero_power4) - IFUNC_IMPL_ADD (array, i, bzero, 1, __bzero_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/bcopy.c. */ - IFUNC_IMPL (i, name, bcopy, - IFUNC_IMPL_ADD (array, i, bcopy, hwcap & PPC_FEATURE_HAS_VSX, - __bcopy_power7) - IFUNC_IMPL_ADD (array, i, bcopy, 1, __bcopy_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/mempcpy.c. */ - IFUNC_IMPL (i, name, mempcpy, - IFUNC_IMPL_ADD (array, i, mempcpy, - hwcap & PPC_FEATURE_HAS_VSX, - __mempcpy_power7) - IFUNC_IMPL_ADD (array, i, mempcpy, 1, - __mempcpy_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/memchr.c. */ - IFUNC_IMPL (i, name, memchr, - IFUNC_IMPL_ADD (array, i, memchr, - hwcap & PPC_FEATURE_HAS_VSX, - __memchr_power7) - IFUNC_IMPL_ADD (array, i, memchr, 1, - __memchr_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/memrchr.c. */ - IFUNC_IMPL (i, name, memrchr, - IFUNC_IMPL_ADD (array, i, memrchr, - hwcap & PPC_FEATURE_HAS_VSX, - __memrchr_power7) - IFUNC_IMPL_ADD (array, i, memrchr, 1, - __memrchr_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c. */ - IFUNC_IMPL (i, name, rawmemchr, - IFUNC_IMPL_ADD (array, i, rawmemchr, - hwcap & PPC_FEATURE_HAS_VSX, - __rawmemchr_power7) - IFUNC_IMPL_ADD (array, i, rawmemchr, 1, - __rawmemchr_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strnlen.c. */ - IFUNC_IMPL (i, name, strnlen, - IFUNC_IMPL_ADD (array, i, strnlen, - hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strnlen_power8) - IFUNC_IMPL_ADD (array, i, strnlen, hwcap & PPC_FEATURE_HAS_VSX, - __strnlen_power7) - IFUNC_IMPL_ADD (array, i, strnlen, 1, - __strnlen_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c. */ - IFUNC_IMPL (i, name, strcasecmp, - IFUNC_IMPL_ADD (array, i, strcasecmp, - hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strcasecmp_power8) - IFUNC_IMPL_ADD (array, i, strcasecmp, - hwcap & PPC_FEATURE_HAS_VSX, - __strcasecmp_power7) - IFUNC_IMPL_ADD (array, i, strcasecmp, 1, __strcasecmp_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c. */ - IFUNC_IMPL (i, name, strcasecmp_l, - IFUNC_IMPL_ADD (array, i, strcasecmp_l, - hwcap & PPC_FEATURE_HAS_VSX, - __strcasecmp_l_power7) - IFUNC_IMPL_ADD (array, i, strcasecmp_l, 1, - __strcasecmp_l_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strncase.c. */ - IFUNC_IMPL (i, name, strncasecmp, - IFUNC_IMPL_ADD (array, i, strncasecmp, - hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strncasecmp_power8) - IFUNC_IMPL_ADD (array, i, strncasecmp, - hwcap & PPC_FEATURE_HAS_VSX, - __strncasecmp_power7) - IFUNC_IMPL_ADD (array, i, strncasecmp, 1, __strncasecmp_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strncase_l.c. */ - IFUNC_IMPL (i, name, strncasecmp_l, - IFUNC_IMPL_ADD (array, i, strncasecmp_l, - hwcap & PPC_FEATURE_HAS_VSX, - __strncasecmp_l_power7) - IFUNC_IMPL_ADD (array, i, strncasecmp_l, 1, - __strncasecmp_l_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/wcschr.c. */ - IFUNC_IMPL (i, name, wcschr, - IFUNC_IMPL_ADD (array, i, wcschr, - hwcap & PPC_FEATURE_HAS_VSX, - __wcschr_power7) - IFUNC_IMPL_ADD (array, i, wcschr, - hwcap & PPC_FEATURE_ARCH_2_05, - __wcschr_power6) - IFUNC_IMPL_ADD (array, i, wcschr, 1, - __wcschr_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/wcschr.c. */ - IFUNC_IMPL (i, name, wcsrchr, - IFUNC_IMPL_ADD (array, i, wcsrchr, - hwcap & PPC_FEATURE_HAS_VSX, - __wcsrchr_power7) - IFUNC_IMPL_ADD (array, i, wcsrchr, - hwcap & PPC_FEATURE_ARCH_2_05, - __wcsrchr_power6) - IFUNC_IMPL_ADD (array, i, wcsrchr, 1, - __wcsrchr_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/wcscpy.c. */ - IFUNC_IMPL (i, name, wcscpy, - IFUNC_IMPL_ADD (array, i, wcscpy, - hwcap & PPC_FEATURE_HAS_VSX, - __wcscpy_power7) - IFUNC_IMPL_ADD (array, i, wcscpy, - hwcap & PPC_FEATURE_ARCH_2_05, - __wcscpy_power6) - IFUNC_IMPL_ADD (array, i, wcscpy, 1, - __wcscpy_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strrchr.c. */ - IFUNC_IMPL (i, name, strrchr, - IFUNC_IMPL_ADD (array, i, strrchr, - hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strrchr_power8) - IFUNC_IMPL_ADD (array, i, strrchr, - hwcap & PPC_FEATURE_HAS_VSX, - __strrchr_power7) - IFUNC_IMPL_ADD (array, i, strrchr, 1, - __strrchr_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strncat.c. */ - IFUNC_IMPL (i, name, strncat, - IFUNC_IMPL_ADD (array, i, strncat, - hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strncat_power8) - IFUNC_IMPL_ADD (array, i, strncat, - hwcap & PPC_FEATURE_HAS_VSX, - __strncat_power7) - IFUNC_IMPL_ADD (array, i, strncat, 1, - __strncat_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strncpy.c. */ - IFUNC_IMPL (i, name, strncpy, - IFUNC_IMPL_ADD (array, i, strncpy, - hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strncpy_power8) - IFUNC_IMPL_ADD (array, i, strncpy, - hwcap & PPC_FEATURE_HAS_VSX, - __strncpy_power7) - IFUNC_IMPL_ADD (array, i, strncpy, 1, - __strncpy_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/stpncpy.c. */ - IFUNC_IMPL (i, name, stpncpy, - IFUNC_IMPL_ADD (array, i, stpncpy, - hwcap2 & PPC_FEATURE2_ARCH_2_07, - __stpncpy_power8) - IFUNC_IMPL_ADD (array, i, stpncpy, - hwcap & PPC_FEATURE_HAS_VSX, - __stpncpy_power7) - IFUNC_IMPL_ADD (array, i, stpncpy, 1, - __stpncpy_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strcmp.c. */ - IFUNC_IMPL (i, name, strcmp, - IFUNC_IMPL_ADD (array, i, strcmp, - hwcap2 & PPC_FEATURE2_ARCH_3_00, - __strcmp_power9) - IFUNC_IMPL_ADD (array, i, strcmp, - hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strcmp_power8) - IFUNC_IMPL_ADD (array, i, strcmp, - hwcap & PPC_FEATURE_HAS_VSX, - __strcmp_power7) - IFUNC_IMPL_ADD (array, i, strcmp, 1, - __strcmp_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strcat.c. */ - IFUNC_IMPL (i, name, strcat, - IFUNC_IMPL_ADD (array, i, strcat, - hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strcat_power8) - IFUNC_IMPL_ADD (array, i, strcat, - hwcap & PPC_FEATURE_HAS_VSX, - __strcat_power7) - IFUNC_IMPL_ADD (array, i, strcat, 1, - __strcat_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strspn.c. */ - IFUNC_IMPL (i, name, strspn, - IFUNC_IMPL_ADD (array, i, strspn, - hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strspn_power8) - IFUNC_IMPL_ADD (array, i, strspn, 1, - __strspn_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strcspn.c. */ - IFUNC_IMPL (i, name, strcspn, - IFUNC_IMPL_ADD (array, i, strcspn, - hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strcspn_power8) - IFUNC_IMPL_ADD (array, i, strcspn, 1, - __strcspn_ppc)) - - /* Support sysdeps/powerpc/powerpc64/multiarch/strstr.c. */ - IFUNC_IMPL (i, name, strstr, - IFUNC_IMPL_ADD (array, i, strstr, - hwcap & PPC_FEATURE_HAS_VSX, - __strstr_power7) - IFUNC_IMPL_ADD (array, i, strstr, 1, - __strstr_ppc)) - - - /* Support sysdeps/powerpc/powerpc64/multiarch/strcasestr.c. */ - IFUNC_IMPL (i, name, strcasestr, - IFUNC_IMPL_ADD (array, i, strcasestr, - hwcap2 & PPC_FEATURE2_ARCH_2_07, - __strcasestr_power8) - IFUNC_IMPL_ADD (array, i, strcasestr, 1, - __strcasestr_ppc)) - - return i; -} diff --git a/sysdeps/powerpc/powerpc64/multiarch/init-arch.h b/sysdeps/powerpc/powerpc64/multiarch/init-arch.h deleted file mode 100644 index dbbe83c67c..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/init-arch.h +++ /dev/null @@ -1,18 +0,0 @@ -/* This file is part of the GNU C Library. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memchr-power7.S b/sysdeps/powerpc/powerpc64/multiarch/memchr-power7.S deleted file mode 100644 index fedca9c997..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memchr-power7.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Optimized memchr implementation for PowerPC64/POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMCHR __memchr_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) -#undef weak_alias -#define weak_alias(name,alias) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memchr-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/memchr-ppc64.c deleted file mode 100644 index b67631f017..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memchr-ppc64.c +++ /dev/null @@ -1,31 +0,0 @@ -/* PowerPC64 default implementation of memchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMCHR __memchr_ppc - -#undef weak_alias -#define weak_alias(a, b) - -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) - -extern __typeof (memchr) __memchr_ppc attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memchr.c b/sysdeps/powerpc/powerpc64/multiarch/memchr.c deleted file mode 100644 index f6f4babc09..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memchr.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Multiple versions of memchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# include -# include "init-arch.h" - -extern __typeof (__memchr) __memchr_ppc attribute_hidden; -extern __typeof (__memchr) __memchr_power7 attribute_hidden; - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc (__memchr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __memchr_power7 - : __memchr_ppc); - -weak_alias (__memchr, memchr) -libc_hidden_builtin_def (memchr) -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp-power4.S b/sysdeps/powerpc/powerpc64/multiarch/memcmp-power4.S deleted file mode 100644 index e38b2a9c44..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memcmp-power4.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Optimized memcmp implementation for PowerPC64/POWER4. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMCMP __memcmp_power4 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) -#undef weak_alias -#define weak_alias(name,alias) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp-power7.S b/sysdeps/powerpc/powerpc64/multiarch/memcmp-power7.S deleted file mode 100644 index a9cc979b92..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memcmp-power7.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Optimized memcmp implementation for PowerPC64/POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMCMP __memcmp_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) -#undef weak_alias -#define weak_alias(name,alias) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp-power8.S b/sysdeps/powerpc/powerpc64/multiarch/memcmp-power8.S deleted file mode 100644 index b7837035b1..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memcmp-power8.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Optimized memcmp implementation for PowerPC64/POWER8. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMCMP __memcmp_power8 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) -#undef weak_alias -#define weak_alias(name,alias) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/memcmp-ppc64.c deleted file mode 100644 index 3bd035dc49..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memcmp-ppc64.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMCMP __memcmp_ppc -#undef weak_alias -#define weak_alias(name, aliasname) \ - extern __typeof (__memcmp_ppc) aliasname \ - __attribute__ ((weak, alias ("__memcmp_ppc"))); -#if IS_IN (libc) && defined(SHARED) -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1(__memcmp_ppc, __GI_memcmp, __memcmp_ppc); -#endif - -extern __typeof (memcmp) __memcmp_ppc attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp.c b/sysdeps/powerpc/powerpc64/multiarch/memcmp.c deleted file mode 100644 index 0d315d5e70..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memcmp.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Multiple versions of memcmp. PowerPC64 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for definition in libc. */ -#if IS_IN (libc) -# define memcmp __redirect_memcmp -# include -# include -# include "init-arch.h" - -extern __typeof (memcmp) __memcmp_ppc attribute_hidden; -extern __typeof (memcmp) __memcmp_power4 attribute_hidden; -extern __typeof (memcmp) __memcmp_power7 attribute_hidden; -extern __typeof (memcmp) __memcmp_power8 attribute_hidden; -# undef memcmp - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect_memcmp, memcmp, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __memcmp_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __memcmp_power7 - : (hwcap & PPC_FEATURE_POWER4) - ? __memcmp_power4 - : __memcmp_ppc); -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcpy-a2.S b/sysdeps/powerpc/powerpc64/multiarch/memcpy-a2.S deleted file mode 100644 index a942287900..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memcpy-a2.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized memcpy implementation for PowerPC A2. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMCPY __memcpy_a2 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcpy-cell.S b/sysdeps/powerpc/powerpc64/multiarch/memcpy-cell.S deleted file mode 100644 index 39aa30c729..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memcpy-cell.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized memcpy implementation for PowerPC/CELL. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMCPY __memcpy_cell - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcpy-power4.S b/sysdeps/powerpc/powerpc64/multiarch/memcpy-power4.S deleted file mode 100644 index 6e7fea382b..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memcpy-power4.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized memcpy implementation for PowerPC64/POWER4. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMCPY __memcpy_power4 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcpy-power6.S b/sysdeps/powerpc/powerpc64/multiarch/memcpy-power6.S deleted file mode 100644 index 40bcdb1161..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memcpy-power6.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized memcpy implementation for PowerPC/POWER6. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMCPY __memcpy_power6 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcpy-power7.S b/sysdeps/powerpc/powerpc64/multiarch/memcpy-power7.S deleted file mode 100644 index 222936af63..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memcpy-power7.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized memcpy implementation for PowerPC/POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMCPY __memcpy_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcpy-ppc64.S b/sysdeps/powerpc/powerpc64/multiarch/memcpy-ppc64.S deleted file mode 100644 index 2dc644c809..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memcpy-ppc64.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Default memcpy implementation for PowerPC64. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if defined SHARED && IS_IN (libc) -# define MEMCPY __memcpy_ppc - -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) -#endif - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcpy.c b/sysdeps/powerpc/powerpc64/multiarch/memcpy.c deleted file mode 100644 index 9f4286c4fe..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memcpy.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Multiple versions of memcpy. PowerPC64 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for the definition in lib and for - DSO. In static binaries we need memcpy before the initialization - happened. */ -#if defined SHARED && IS_IN (libc) -/* Redefine memcpy so that the compiler won't complain about the type - mismatch with the IFUNC selector in strong_alias, below. */ -# undef memcpy -# define memcpy __redirect_memcpy -# include -# include "init-arch.h" - -extern __typeof (__redirect_memcpy) __libc_memcpy; - -extern __typeof (__redirect_memcpy) __memcpy_ppc attribute_hidden; -extern __typeof (__redirect_memcpy) __memcpy_power4 attribute_hidden; -extern __typeof (__redirect_memcpy) __memcpy_cell attribute_hidden; -extern __typeof (__redirect_memcpy) __memcpy_power6 attribute_hidden; -extern __typeof (__redirect_memcpy) __memcpy_a2 attribute_hidden; -extern __typeof (__redirect_memcpy) __memcpy_power7 attribute_hidden; - -libc_ifunc (__libc_memcpy, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __memcpy_power7 : - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __memcpy_a2 : - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __memcpy_power6 : - (hwcap & PPC_FEATURE_CELL_BE) - ? __memcpy_cell : - (hwcap & PPC_FEATURE_POWER4) - ? __memcpy_power4 - : __memcpy_ppc); - -#undef memcpy -strong_alias (__libc_memcpy, memcpy); -libc_hidden_ver (__libc_memcpy, memcpy); -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/memmove-power7.S b/sysdeps/powerpc/powerpc64/multiarch/memmove-power7.S deleted file mode 100644 index a9435fa654..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memmove-power7.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Optimized memmove implementation for PowerPC64/POWER7. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMMOVE __memmove_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#undef bcopy -#define bcopy __bcopy_power7 - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memmove-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/memmove-ppc64.c deleted file mode 100644 index 80353c5332..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memmove-ppc64.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -extern __typeof (_wordcopy_fwd_aligned) _wordcopy_fwd_aligned_ppc; -extern __typeof (_wordcopy_fwd_dest_aligned) _wordcopy_fwd_dest_aligned_ppc; -extern __typeof (_wordcopy_bwd_aligned) _wordcopy_bwd_aligned_ppc; -extern __typeof (_wordcopy_bwd_dest_aligned) _wordcopy_bwd_dest_aligned_ppc; - -#define _wordcopy_fwd_aligned _wordcopy_fwd_aligned_ppc -#define _wordcopy_fwd_dest_aligned _wordcopy_fwd_dest_aligned_ppc -#define _wordcopy_bwd_aligned _wordcopy_bwd_aligned_ppc -#define _wordcopy_bwd_dest_aligned _wordcopy_bwd_dest_aligned_ppc - -extern __typeof (memmove) __memmove_ppc attribute_hidden; -#define MEMMOVE __memmove_ppc - -extern __typeof (memcpy) __memcpy_ppc attribute_hidden; -#ifdef SHARED -# define memcpy __memcpy_ppc -#endif - -#if IS_IN (libc) && defined(SHARED) -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) -#endif - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memmove.c b/sysdeps/powerpc/powerpc64/multiarch/memmove.c deleted file mode 100644 index db2bbc7837..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memmove.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Multiple versions of memmove. PowerPC64 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for the definition in lib and for - DSO. In static binaries we need memmove before the initialization - happened. */ -#if defined SHARED && IS_IN (libc) -/* Redefine memmove so that the compiler won't complain about the type - mismatch with the IFUNC selector in strong_alias, below. */ -# undef memmove -# define memmove __redirect_memmove -# include -# include "init-arch.h" - -extern __typeof (__redirect_memmove) __libc_memmove; - -extern __typeof (__redirect_memmove) __memmove_ppc attribute_hidden; -extern __typeof (__redirect_memmove) __memmove_power7 attribute_hidden; - -libc_ifunc (__libc_memmove, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __memmove_power7 - : __memmove_ppc); - -#undef memmove -strong_alias (__libc_memmove, memmove); -libc_hidden_ver (__libc_memmove, memmove); -#else -# include -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/mempcpy-power7.S b/sysdeps/powerpc/powerpc64/multiarch/mempcpy-power7.S deleted file mode 100644 index 08f133644a..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/mempcpy-power7.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Optimized mempcpy implementation for PowerPC/POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMPCPY __mempcpy_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) -#undef weak_alias -#define weak_alias(name, alias) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/mempcpy-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/mempcpy-ppc64.c deleted file mode 100644 index d0741fe318..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/mempcpy-ppc64.c +++ /dev/null @@ -1,19 +0,0 @@ -/* PowerPC64 default implementation of mempcpy. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c b/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c deleted file mode 100644 index 430557ee0a..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Multiple versions of mempcpy. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define mempcpy __redirect_mempcpy -# define __mempcpy __redirect___mempcpy -# define NO_MEMPCPY_STPCPY_REDIRECT -/* Omit the mempcpy inline definitions because it would redefine mempcpy. */ -# define _HAVE_STRING_ARCH_mempcpy 1 -# include -# include -# include "init-arch.h" - -extern __typeof (__mempcpy) __mempcpy_ppc attribute_hidden; -extern __typeof (__mempcpy) __mempcpy_power7 attribute_hidden; -# undef mempcpy -# undef __mempcpy - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect___mempcpy, __mempcpy, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __mempcpy_power7 - : __mempcpy_ppc); - -weak_alias (__mempcpy, mempcpy) -#else -# include -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/memrchr-power7.S b/sysdeps/powerpc/powerpc64/multiarch/memrchr-power7.S deleted file mode 100644 index 052aa732ba..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memrchr-power7.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Optimized memrchr implementation for PowerPC64/POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMRCHR __memrchr_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) -#undef weak_alias -#define weak_alias(name,alias) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memrchr-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/memrchr-ppc64.c deleted file mode 100644 index 2fc706db71..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memrchr-ppc64.c +++ /dev/null @@ -1,19 +0,0 @@ -/* PowerPC64 default implementation of memrchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memrchr.c b/sysdeps/powerpc/powerpc64/multiarch/memrchr.c deleted file mode 100644 index fb09fdf89c..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memrchr.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of memrchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# include -# include "init-arch.h" - -extern __typeof (__memrchr) __memrchr_ppc attribute_hidden; -extern __typeof (__memrchr) __memrchr_power7 attribute_hidden; - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc (__memrchr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __memrchr_power7 - : __memrchr_ppc); - -weak_alias (__memrchr, memrchr) -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/memset-power4.S b/sysdeps/powerpc/powerpc64/multiarch/memset-power4.S deleted file mode 100644 index 3908e8e412..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memset-power4.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Optimized memset implementation for PowerPC64/POWER4. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMSET __memset_power4 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#undef __bzero -#define __bzero __bzero_power4 - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memset-power6.S b/sysdeps/powerpc/powerpc64/multiarch/memset-power6.S deleted file mode 100644 index 4ddbd2e274..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memset-power6.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Optimized memset implementation for PowerPC64/POWER6. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMSET __memset_power6 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#undef __bzero -#define __bzero __bzero_power6 - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memset-power7.S b/sysdeps/powerpc/powerpc64/multiarch/memset-power7.S deleted file mode 100644 index 97f686b35d..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memset-power7.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Optimized memset implementation for PowerPC64/POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMSET __memset_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#undef __bzero -#define __bzero __bzero_power7 -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memset-power8.S b/sysdeps/powerpc/powerpc64/multiarch/memset-power8.S deleted file mode 100644 index ea303533f4..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memset-power8.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Optimized memset implementation for PowerPC64/POWER8. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MEMSET __memset_power8 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#undef __bzero -#define __bzero __bzero_power8 - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S b/sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S deleted file mode 100644 index 0f16e21c61..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S +++ /dev/null @@ -1,42 +0,0 @@ -/* Default memset/bzero implementation for PowerPC64. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Copied from bzero.S to prevent the linker from inserting a stub - between bzero and memset. NOTE: this code should be positioned - before ENTRY/END_GEN_TB redefinition. */ -ENTRY (__bzero_ppc) - CALL_MCOUNT 3 - mr r5,r4 - li r4,0 - b L(_memset) -END_GEN_TB (__bzero_ppc,TB_TOCLESS) - - -#if defined SHARED && IS_IN (libc) -# define MEMSET __memset_ppc - -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) -#endif - -/* Do not implement __bzero at powerpc64/memset.S. */ -#define NO_BZERO_IMPL - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/memset.c b/sysdeps/powerpc/powerpc64/multiarch/memset.c deleted file mode 100644 index a5d9b3e60e..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/memset.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Multiple versions of memset. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for definition in libc. */ -#if defined SHARED && IS_IN (libc) -/* Redefine memset so that the compiler won't complain about the type - mismatch with the IFUNC selector in strong_alias, below. */ -# undef memset -# define memset __redirect_memset -# include -# include -# include "init-arch.h" - -extern __typeof (__redirect_memset) __libc_memset; - -extern __typeof (__redirect_memset) __memset_ppc attribute_hidden; -extern __typeof (__redirect_memset) __memset_power4 attribute_hidden; -extern __typeof (__redirect_memset) __memset_power6 attribute_hidden; -extern __typeof (__redirect_memset) __memset_power7 attribute_hidden; -extern __typeof (__redirect_memset) __memset_power8 attribute_hidden; - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc (__libc_memset, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __memset_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __memset_power7 : - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __memset_power6 : - (hwcap & PPC_FEATURE_POWER4) - ? __memset_power4 - : __memset_ppc); - -#undef memset -strong_alias (__libc_memset, memset); -libc_hidden_ver (__libc_memset, memset); -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr-power7.S b/sysdeps/powerpc/powerpc64/multiarch/rawmemchr-power7.S deleted file mode 100644 index d79d72820c..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr-power7.S +++ /dev/null @@ -1,23 +0,0 @@ -/* Optimized rawmemchr implementation for PowerPC64/POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define RAWMEMCHR __rawmemchr_power7 - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/rawmemchr-ppc64.c deleted file mode 100644 index cb55dbcc50..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr-ppc64.c +++ /dev/null @@ -1,19 +0,0 @@ -/* PowerPC64 default implementation of rawmemchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c b/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c deleted file mode 100644 index 8bfd58dd47..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Multiple versions of rawmemchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define __rawmemchr __redirect___rawmemchr -# include -# include -# include "init-arch.h" - -extern __typeof (__rawmemchr) __rawmemchr_ppc attribute_hidden; -extern __typeof (__rawmemchr) __rawmemchr_power7 attribute_hidden; -# undef __rawmemchr - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect___rawmemchr, __rawmemchr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __rawmemchr_power7 - : __rawmemchr_ppc); - -weak_alias (__rawmemchr, rawmemchr) -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/rtld-memset.c b/sysdeps/powerpc/powerpc64/multiarch/rtld-memset.c deleted file mode 100644 index 7fb4b733e4..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/rtld-memset.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/rtld-strchr.S b/sysdeps/powerpc/powerpc64/multiarch/rtld-strchr.S deleted file mode 100644 index 16ba7264c4..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/rtld-strchr.S +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpcpy-power7.c b/sysdeps/powerpc/powerpc64/multiarch/stpcpy-power7.c deleted file mode 100644 index e4b9ce9b6f..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/stpcpy-power7.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiarch stpcpy for POWER7/PPC64. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -extern __typeof (memcpy) __memcpy_power7 attribute_hidden; -extern __typeof (strlen) __strlen_power7 attribute_hidden; -extern __typeof (stpcpy) __stpcpy_power7 attribute_hidden; - -#define STPCPY __stpcpy_power7 -#define memcpy __memcpy_power7 -#define strlen __strlen_power7 - -#undef libc_hidden_def -#define libc_hidden_def(name) -#undef weak_alias -#define weak_alias(name, alias) -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpcpy-power8.S b/sysdeps/powerpc/powerpc64/multiarch/stpcpy-power8.S deleted file mode 100644 index 935347115a..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/stpcpy-power8.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized stpcpy implementation for POWER8/PPC64. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STPCPY __stpcpy_power8 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpcpy-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/stpcpy-ppc64.c deleted file mode 100644 index b5a3b12c05..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/stpcpy-ppc64.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiarch stpcpy for PPC64. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -extern __typeof (memcpy) __memcpy_ppc attribute_hidden; -extern __typeof (strlen) __strlen_ppc attribute_hidden; -extern __typeof (stpcpy) __stpcpy_ppc attribute_hidden; - -#define STPCPY __stpcpy_ppc -#define memcpy __memcpy_ppc -#define strlen __strlen_ppc - -#undef weak_alias -#define weak_alias(name, aliasname) - -#undef libc_hidden_def -#define libc_hidden_def(name) -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c b/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c deleted file mode 100644 index 3e34e3cafe..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Multiple versions of stpcpy. PowerPC64 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined SHARED && IS_IN (libc) -# define NO_MEMPCPY_STPCPY_REDIRECT -# include -# include -# include "init-arch.h" - -extern __typeof (__stpcpy) __stpcpy_ppc attribute_hidden; -extern __typeof (__stpcpy) __stpcpy_power7 attribute_hidden; -extern __typeof (__stpcpy) __stpcpy_power8 attribute_hidden; - -libc_ifunc_hidden (__stpcpy, __stpcpy, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __stpcpy_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) - ? __stpcpy_power7 - : __stpcpy_ppc); - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_def (stpcpy) -#else -# include -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpncpy-power7.S b/sysdeps/powerpc/powerpc64/multiarch/stpncpy-power7.S deleted file mode 100644 index 6636b01d07..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/stpncpy-power7.S +++ /dev/null @@ -1,30 +0,0 @@ -/* Optimized stpncpy implementation for POWER7. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define USE_AS_STPNCPY - -#define STPNCPY __stpncpy_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#define MEMSET __memset_power7 - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpncpy-power8.S b/sysdeps/powerpc/powerpc64/multiarch/stpncpy-power8.S deleted file mode 100644 index 6ce706a879..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/stpncpy-power8.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Optimized stpncpy implementation for POWER8. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define USE_AS_STPNCPY - -#define STPNCPY __stpncpy_power8 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpncpy-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/stpncpy-ppc64.c deleted file mode 100644 index 22186166a0..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/stpncpy-ppc64.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Default stpncpy implementation for PowerPC64. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define STPNCPY __stpncpy_ppc -#ifdef SHARED -#undef libc_hidden_def -#define libc_hidden_def(name) \ - __hidden_ver1 (__stpncpy_ppc, __GI___stpncpy, __stpncpy_ppc); -#endif - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c b/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c deleted file mode 100644 index e9b37dcc9a..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Multiple versions of stpncpy. PowerPC64 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define stpncpy __redirect_stpncpy -# define __stpncpy __redirect___stpncpy -# include -# include -# include "init-arch.h" - -extern __typeof (__stpncpy) __stpncpy_ppc attribute_hidden; -extern __typeof (__stpncpy) __stpncpy_power7 attribute_hidden; -extern __typeof (__stpncpy) __stpncpy_power8 attribute_hidden; -# undef stpncpy -# undef __stpncpy - -libc_ifunc_redirected (__redirect___stpncpy, __stpncpy, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __stpncpy_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) - ? __stpncpy_power7 - : __stpncpy_ppc); -weak_alias (__stpncpy, stpncpy) -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp-power7.S deleted file mode 100644 index 025c5a9f13..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp-power7.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Optimized strcasecmp implementation for POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __strcasecmp __strcasecmp_power7 -#undef weak_alias -#define weak_alias(name, alias) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp-power8.S deleted file mode 100644 index 9b62476e09..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp-power8.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Optimized strcasecmp implementation for POWER8. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __strcasecmp __strcasecmp_power8 -#undef weak_alias -#define weak_alias(name, alias) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp-ppc64.c deleted file mode 100644 index cbf91755da..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp-ppc64.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Multiarch strcasecmp for PPC64. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define strcasecmp __strcasecmp_ppc - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c deleted file mode 100644 index dcb4ef4125..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of strcasecmp - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "init-arch.h" - -extern __typeof (__strcasecmp) __libc_strcasecmp; - -extern __typeof (__strcasecmp) __strcasecmp_ppc attribute_hidden; -extern __typeof (__strcasecmp) __strcasecmp_power7 attribute_hidden; -extern __typeof (__strcasecmp) __strcasecmp_power8 attribute_hidden; - -libc_ifunc (__libc_strcasecmp, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strcasecmp_power8: - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strcasecmp_power7 - : __strcasecmp_ppc); - -weak_alias (__libc_strcasecmp, strcasecmp) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l-power7.S deleted file mode 100644 index da4c4054c3..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l-power7.S +++ /dev/null @@ -1,31 +0,0 @@ -/* Optimized strcasecmp_l implementation for POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __strcasecmp __strcasecmp_l_power7 - -#undef weak_alias -#define weak_alias(name, alias) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#define USE_IN_EXTENDED_LOCALE_MODEL - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c b/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c deleted file mode 100644 index 10b8f2e84d..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of strcasecmp_l. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# define strcasecmp_l __strcasecmp_l_ppc -extern __typeof (__strcasecmp_l) __strcasecmp_l_ppc attribute_hidden; -extern __typeof (__strcasecmp_l) __strcasecmp_l_power7 attribute_hidden; -#endif - -#include -#undef strcasecmp_l - -#if IS_IN (libc) -# include -# include "init-arch.h" - -extern __typeof (__strcasecmp_l) __libc_strcasecmp_l; -libc_ifunc (__libc_strcasecmp_l, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strcasecmp_l_power7 - : __strcasecmp_l_ppc); - -weak_alias (__libc_strcasecmp_l, strcasecmp_l) -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasestr-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strcasestr-power8.S deleted file mode 100644 index 2cfb5ae77a..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasestr-power8.S +++ /dev/null @@ -1,35 +0,0 @@ -/* Optimized strcasestr implementation for POWER8. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCASESTR __strcasestr_power8 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -/* The following definitions are used in strcasestr optimization. */ - -/* strlen is used to calculate len of r4. */ -#define STRLEN __strlen_power8 -/* strnlen is used to check if len of r3 is more than r4. */ -#define STRNLEN __strnlen_power7 -/* strchr is used to check if first char of r4 is present in r3. */ -#define STRCHR __strchr_power8 - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasestr-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strcasestr-ppc64.c deleted file mode 100644 index 61f278f697..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasestr-ppc64.c +++ /dev/null @@ -1,34 +0,0 @@ -/* PowerPC64 default implementation of strcasestr. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCASESTR __strcasestr_ppc -#if IS_IN (libc) && defined(SHARED) -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1(__strcasestr_ppc, __GI_strcasestr, __strcasestr_ppc); -#endif - - -#undef weak_alias -#define weak_alias(a,b) - -extern __typeof (strcasestr) __strcasestr_ppc attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcasestr.c b/sysdeps/powerpc/powerpc64/multiarch/strcasestr.c deleted file mode 100644 index 9e6a16d6a9..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcasestr.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of strcasestr. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# include -# include "init-arch.h" - -extern __typeof (__strcasestr) __strcasestr_ppc attribute_hidden; -extern __typeof (__strcasestr) __strcasestr_power8 attribute_hidden; - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc (__strcasestr, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strcasestr_power8 - : __strcasestr_ppc); - -weak_alias (__strcasestr, strcasestr) -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcat-power7.c b/sysdeps/powerpc/powerpc64/multiarch/strcat-power7.c deleted file mode 100644 index 22d2caaec3..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcat-power7.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCAT __strcat_power7 - -#undef libc_hidden_def -#define libc_hidden_def(name) - -extern typeof (strcpy) __strcpy_power7; -extern typeof (strlen) __strlen_power7; - -#define strcpy __strcpy_power7 -#define strlen __strlen_power7 -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcat-power8.c b/sysdeps/powerpc/powerpc64/multiarch/strcat-power8.c deleted file mode 100644 index f138beec67..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcat-power8.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCAT __strcat_power8 - -#undef libc_hidden_def -#define libc_hidden_def(name) - -extern typeof (strcpy) __strcpy_power8; -extern typeof (strlen) __strlen_power8; - -#define strcpy __strcpy_power8 -#define strlen __strlen_power8 -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcat-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strcat-ppc64.c deleted file mode 100644 index 5049fc03f4..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcat-ppc64.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCAT __strcat_ppc -#ifdef SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strcat_ppc, __GI_strcat, __strcat_ppc); -#endif - -extern __typeof (strcat) __strcat_ppc attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcat.c b/sysdeps/powerpc/powerpc64/multiarch/strcat.c deleted file mode 100644 index 3336aedcec..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcat.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of strcat. PowerPC64 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define strcat __redirect_strcat -# include -# include -# include "init-arch.h" - -extern __typeof (strcat) __strcat_ppc attribute_hidden; -extern __typeof (strcat) __strcat_power7 attribute_hidden; -extern __typeof (strcat) __strcat_power8 attribute_hidden; -# undef strcat - -libc_ifunc_redirected (__redirect_strcat, strcat, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strcat_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) - ? __strcat_power7 - : __strcat_ppc); -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchr-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strchr-power7.S deleted file mode 100644 index e64c0b7c82..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strchr-power7.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized strchr implementation for POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCHR __strchr_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchr-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strchr-power8.S deleted file mode 100644 index bbda7b0505..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strchr-power8.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized strchr implementation for POWER8. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCHR __strchr_power8 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchr-ppc64.S b/sysdeps/powerpc/powerpc64/multiarch/strchr-ppc64.S deleted file mode 100644 index 769f9f07d4..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strchr-ppc64.S +++ /dev/null @@ -1,29 +0,0 @@ -/* PowerPC64 default implementation of strchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef SHARED -# define STRCHR __strchr_ppc - -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - .globl __GI_strchr; __GI_strchr = __strchr_ppc -#endif - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchr.c b/sysdeps/powerpc/powerpc64/multiarch/strchr.c deleted file mode 100644 index 573105818f..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strchr.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Multiple versions of strchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for definition in libc. */ -#if defined SHARED && IS_IN (libc) -# define strchr __redirect_strchr -/* Omit the strchr inline definitions because it would redefine strchr. */ -# define __NO_STRING_INLINES -# include -# include -# include "init-arch.h" - -extern __typeof (strchr) __strchr_ppc attribute_hidden; -extern __typeof (strchr) __strchr_power7 attribute_hidden; -extern __typeof (strchr) __strchr_power8 attribute_hidden; -# undef strchr - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect_strchr, strchr, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strchr_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strchr_power7 - : __strchr_ppc); -weak_alias (strchr, index) -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchrnul-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strchrnul-power7.S deleted file mode 100644 index c8e28721fd..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strchrnul-power7.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized strchrnul implementation for POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCHRNUL __strchrnul_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchrnul-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strchrnul-power8.S deleted file mode 100644 index 1cd39fc1b3..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strchrnul-power8.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized strchrnul implementation for POWER8. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCHRNUL __strchrnul_power8 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchrnul-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strchrnul-ppc64.c deleted file mode 100644 index 8d313c3e1d..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strchrnul-ppc64.c +++ /dev/null @@ -1,19 +0,0 @@ -/* PowerPC64 default implementation of strchrnul. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c b/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c deleted file mode 100644 index 1e9018f88a..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strchrnul.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of strchrnul. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# include -# include "init-arch.h" - -extern __typeof (__strchrnul) __strchrnul_ppc attribute_hidden; -extern __typeof (__strchrnul) __strchrnul_power7 attribute_hidden; -extern __typeof (__strchrnul) __strchrnul_power8 attribute_hidden; - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc (__strchrnul, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strchrnul_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strchrnul_power7 - : __strchrnul_ppc); - -weak_alias (__strchrnul, strchrnul) -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strcmp-power7.S deleted file mode 100644 index 82d1b63af9..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power7.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized strcmp implementation for POWER7. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCMP __strcmp_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strcmp-power8.S deleted file mode 100644 index b2464a8018..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power8.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized strcmp implementation for POWER8/PPC64. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCMP __strcmp_power8 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power9.S b/sysdeps/powerpc/powerpc64/multiarch/strcmp-power9.S deleted file mode 100644 index 48ea05d2c5..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcmp-power9.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized strcmp implementation for POWER9/PPC64. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCMP __strcmp_power9 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp-ppc64.S b/sysdeps/powerpc/powerpc64/multiarch/strcmp-ppc64.S deleted file mode 100644 index 085e74758f..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcmp-ppc64.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Default strcmp implementation for PowerPC64. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if defined SHARED && IS_IN (libc) -# define STRCMP __strcmp_ppc - -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - .globl __GI_strcmp; __GI_strcmp = __strcmp_ppc -#endif /* SHARED && IS_IN */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c deleted file mode 100644 index fc10205b00..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Multiple versions of strcmp. PowerPC64 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined SHARED && IS_IN (libc) -# define strcmp __redirect_strcmp -/* Omit the strcmp inline definitions because it would redefine strcmp. */ -# define __NO_STRING_INLINES -# include -# include -# include "init-arch.h" - -extern __typeof (strcmp) __strcmp_ppc attribute_hidden; -extern __typeof (strcmp) __strcmp_power7 attribute_hidden; -extern __typeof (strcmp) __strcmp_power8 attribute_hidden; -extern __typeof (strcmp) __strcmp_power9 attribute_hidden; - -# undef strcmp - -libc_ifunc_redirected (__redirect_strcmp, strcmp, - (hwcap2 & PPC_FEATURE2_ARCH_3_00) - ? __strcmp_power9 : - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strcmp_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) - ? __strcmp_power7 - : __strcmp_ppc); -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcpy-power7.c b/sysdeps/powerpc/powerpc64/multiarch/strcpy-power7.c deleted file mode 100644 index 892a551183..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcpy-power7.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiarch strcpy for POWER7/PPC64. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -extern __typeof (memcpy) __memcpy_power7 attribute_hidden; -extern __typeof (strlen) __strlen_power7 attribute_hidden; -extern __typeof (strcpy) __strcpy_power7 attribute_hidden; - -#define STRCPY __strcpy_power7 -#define memcpy __memcpy_power7 -#define strlen __strlen_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcpy-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strcpy-power8.S deleted file mode 100644 index 6c753b5d1a..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcpy-power8.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized strcpy implementation for POWER8/PPC64. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCPY __strcpy_power8 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcpy-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strcpy-ppc64.c deleted file mode 100644 index cd6dd09541..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcpy-ppc64.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Multiarch strcpy for PPC64. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if defined SHARED && IS_IN (libc) -extern __typeof (memcpy) __memcpy_ppc attribute_hidden; -extern __typeof (strlen) __strlen_ppc attribute_hidden; -extern __typeof (strcpy) __strcpy_ppc attribute_hidden; - -# define STRCPY __strcpy_ppc -# define memcpy __memcpy_ppc -# define strlen __strlen_ppc - -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strcpy_ppc, __GI_strcpy, __strcpy_ppc); -#endif - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcpy.c b/sysdeps/powerpc/powerpc64/multiarch/strcpy.c deleted file mode 100644 index 0da53e30b0..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcpy.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of strcpy. PowerPC64 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined SHARED && IS_IN (libc) -# define strcpy __redirect_strcpy -# include -# include -# include "init-arch.h" - -extern __typeof (strcpy) __strcpy_ppc attribute_hidden; -extern __typeof (strcpy) __strcpy_power7 attribute_hidden; -extern __typeof (strcpy) __strcpy_power8 attribute_hidden; -#undef strcpy - -libc_ifunc_redirected (__redirect_strcpy, strcpy, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strcpy_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) - ? __strcpy_power7 - : __strcpy_ppc); -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcspn-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strcspn-power8.S deleted file mode 100644 index 39b4cd8239..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcspn-power8.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Optimized strcspn implementation for POWER8. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRSPN __strcspn_power8 -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcspn-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strcspn-ppc64.c deleted file mode 100644 index 96396af125..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcspn-ppc64.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Default strcspn implementation for PowerPC64. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define STRCSPN __strcspn_ppc - -#ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) -#endif - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcspn.c b/sysdeps/powerpc/powerpc64/multiarch/strcspn.c deleted file mode 100644 index a6df885181..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strcspn.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Multiple versions of strcspn. PowerPC64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "init-arch.h" - -#undef strcspn -extern __typeof (strcspn) __libc_strcspn; - -extern __typeof (strcspn) __strcspn_ppc attribute_hidden; -extern __typeof (strcspn) __strcspn_power8 attribute_hidden; - -libc_ifunc (__libc_strcspn, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strcspn_power8 - : __strcspn_ppc); - -weak_alias (__libc_strcspn, strcspn) -libc_hidden_builtin_def (strcspn) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strlen-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strlen-power7.S deleted file mode 100644 index 333496efa5..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strlen-power7.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized strlen implementation for POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRLEN __strlen_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strlen-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strlen-power8.S deleted file mode 100644 index b4deea5f93..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strlen-power8.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized strlen implementation for POWER8. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRLEN __strlen_power8 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strlen-ppc64.S b/sysdeps/powerpc/powerpc64/multiarch/strlen-ppc64.S deleted file mode 100644 index 13231b8c64..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strlen-ppc64.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Default strlen implementation for PowerPC64. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if defined SHARED && IS_IN (libc) -# define STRLEN __strlen_ppc - -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) -#endif - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strlen.c b/sysdeps/powerpc/powerpc64/multiarch/strlen.c deleted file mode 100644 index a5a7b59558..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strlen.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Multiple versions of strlen. PowerPC64 version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined SHARED && IS_IN (libc) -/* Redefine strlen so that the compiler won't complain about the type - mismatch with the IFUNC selector in strong_alias, below. */ -# undef strlen -# define strlen __redirect_strlen -# include -# include -# include "init-arch.h" - -extern __typeof (__redirect_strlen) __libc_strlen; - -extern __typeof (__redirect_strlen) __strlen_ppc attribute_hidden; -extern __typeof (__redirect_strlen) __strlen_power7 attribute_hidden; -extern __typeof (__redirect_strlen) __strlen_power8 attribute_hidden; - -libc_ifunc (__libc_strlen, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strlen_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strlen_power7 - : __strlen_ppc); - -#undef strlen -strong_alias (__libc_strlen, strlen) -libc_hidden_ver (__libc_strlen, strlen) -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncase-power7.c b/sysdeps/powerpc/powerpc64/multiarch/strncase-power7.c deleted file mode 100644 index 177da4a2f0..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncase-power7.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __strncasecmp __strncasecmp_power7 - -extern __typeof (strncasecmp) __strncasecmp_power7 attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncase-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strncase-power8.S deleted file mode 100644 index 8a24c34719..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncase-power8.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Optimized strncasecmp implementation for POWER8. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __strncasecmp __strncasecmp_power8 -#undef weak_alias -#define weak_alias(name, alias) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncase-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strncase-ppc64.c deleted file mode 100644 index 0a75f75745..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncase-ppc64.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Multiarch strncasecmp for PPC64. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define strncasecmp __strncasecmp_ppc - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncase.c b/sysdeps/powerpc/powerpc64/multiarch/strncase.c deleted file mode 100644 index 197f7133e4..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncase.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of strncasecmp - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "init-arch.h" - -extern __typeof (__strncasecmp) __libc_strncasecmp; - -extern __typeof (__strncasecmp) __strncasecmp_ppc attribute_hidden; -extern __typeof (__strncasecmp) __strncasecmp_power7 attribute_hidden; -extern __typeof (__strncasecmp) __strncasecmp_power8 attribute_hidden; - -libc_ifunc (__libc_strncasecmp, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strncasecmp_power8: - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strncasecmp_power7 - : __strncasecmp_ppc); - -weak_alias (__libc_strncasecmp, strncasecmp) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncase_l-power7.c b/sysdeps/powerpc/powerpc64/multiarch/strncase_l-power7.c deleted file mode 100644 index f87ff6c640..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncase_l-power7.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __strncasecmp_l __strncasecmp_l_power7 -#define USE_IN_EXTENDED_LOCALE_MODEL 1 - -extern __typeof (strncasecmp_l) __strncasecmp_l_power7 attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncase_l.c b/sysdeps/powerpc/powerpc64/multiarch/strncase_l.c deleted file mode 100644 index 6c2429c58a..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncase_l.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Multiple versions of strncasecmp_l - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# define strncasecmp_l __strncasecmp_l_ppc -extern __typeof (__strncasecmp_l) __strncasecmp_l_ppc attribute_hidden; -extern __typeof (__strncasecmp_l) __strncasecmp_l_power7 attribute_hidden; -#endif - -#include -#undef strncasecmp_l - -#if IS_IN (libc) -# include -# include "init-arch.h" - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -extern __typeof (__strncasecmp_l) __libc_strncasecmp_l; -libc_ifunc (__libc_strncasecmp_l, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strncasecmp_l_power7 - : __strncasecmp_l_ppc); - -weak_alias (__libc_strncasecmp_l, strncasecmp_l) -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncat-power7.c b/sysdeps/powerpc/powerpc64/multiarch/strncat-power7.c deleted file mode 100644 index f695f834a0..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncat-power7.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRNCAT __strncat_power7 - -extern __typeof (strncat) __strncat_power7 attribute_hidden; -extern __typeof (strlen) __strlen_power7 attribute_hidden; -extern __typeof (strnlen) __strnlen_power7 attribute_hidden; -extern __typeof (memcpy) __memcpy_power7 attribute_hidden; - -#define strlen __strlen_power7 -#define __strnlen __strnlen_power7 -#define memcpy __memcpy_power7 - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncat-power8.c b/sysdeps/powerpc/powerpc64/multiarch/strncat-power8.c deleted file mode 100644 index 1ec1259b95..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncat-power8.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRNCAT __strncat_power8 - -extern __typeof (strncat) __strncat_power8 attribute_hidden; -extern __typeof (strlen) __strlen_power8 attribute_hidden; -extern __typeof (strnlen) __strnlen_power8 attribute_hidden; -extern __typeof (memcpy) __memcpy_power7 attribute_hidden; - -#define strlen __strlen_power8 -#define __strnlen __strnlen_power8 -#define memcpy __memcpy_power7 - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncat-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strncat-ppc64.c deleted file mode 100644 index e4c8c01105..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncat-ppc64.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRNCAT __strncat_ppc -#ifdef SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strncat_ppc, __GI_strncat, __strncat_ppc); -#endif - -extern __typeof (strncat) __strncat_ppc attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncat.c b/sysdeps/powerpc/powerpc64/multiarch/strncat.c deleted file mode 100644 index 72f283354e..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncat.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Multiple versions of strncat. PowerPC64 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# include -# include "init-arch.h" - -extern __typeof (strncat) __strncat_ppc attribute_hidden; -extern __typeof (strncat) __strncat_power7 attribute_hidden; -extern __typeof (strncat) __strncat_power8 attribute_hidden; - -libc_ifunc (strncat, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strncat_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) - ? __strncat_power7 - : __strncat_ppc); -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power4.S b/sysdeps/powerpc/powerpc64/multiarch/strncmp-power4.S deleted file mode 100644 index 01729a3bba..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power4.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRNCMP __strncmp_power4 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strncmp-power7.S deleted file mode 100644 index a069d4b21c..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power7.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRNCMP __strncmp_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strncmp-power8.S deleted file mode 100644 index 3cbcaada62..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power8.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRNCMP __strncmp_power8 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power9.S b/sysdeps/powerpc/powerpc64/multiarch/strncmp-power9.S deleted file mode 100644 index 6d0deaa6e6..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp-power9.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRNCMP __strncmp_power9 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp-ppc64.S b/sysdeps/powerpc/powerpc64/multiarch/strncmp-ppc64.S deleted file mode 100644 index e4b93ae8f2..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp-ppc64.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if defined SHARED && IS_IN (libc) -# define STRNCMP __strncmp_ppc - -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - .globl __GI_strncmp; __GI_strncmp = __strncmp_ppc -#endif - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c deleted file mode 100644 index 14122c65a4..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Multiple versions of strncmp. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for definition in libc. */ -#if defined SHARED && IS_IN (libc) -# define strncmp __redirect_strncmp -/* Omit the strncmp inline definitions because it would redefine strncmp. */ -# define __NO_STRING_INLINES -# include -# include -# include "init-arch.h" - -extern __typeof (strncmp) __strncmp_ppc attribute_hidden; -extern __typeof (strncmp) __strncmp_power4 attribute_hidden; -extern __typeof (strncmp) __strncmp_power7 attribute_hidden; -extern __typeof (strncmp) __strncmp_power8 attribute_hidden; -extern __typeof (strncmp) __strncmp_power9 attribute_hidden; -# undef strncmp - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect_strncmp, strncmp, - (hwcap2 & PPC_FEATURE2_ARCH_3_00) - ? __strncmp_power9 : - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strncmp_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) - ? __strncmp_power7 - : (hwcap & PPC_FEATURE_POWER4) - ? __strncmp_power4 - : __strncmp_ppc); -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncpy-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strncpy-power7.S deleted file mode 100644 index 03f7f83448..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncpy-power7.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Optimized strncpy implementation for POWER7. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRNCPY __strncpy_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#define MEMSET __memset_power7 - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncpy-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strncpy-power8.S deleted file mode 100644 index 17117eb7ec..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncpy-power8.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Optimized strncpy implementation for POWER8. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRNCPY __strncpy_power8 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -/* memset is used to pad the end of the string. */ -#define MEMSET __memset_power8 - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncpy-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strncpy-ppc64.c deleted file mode 100644 index 32412974aa..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncpy-ppc64.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRNCPY __strncpy_ppc -#undef weak_alias -#define weak_alias(name, aliasname) \ - extern __typeof (__strncpy_ppc) aliasname \ - __attribute__ ((weak, alias ("__strncpy_ppc"))); -#if IS_IN (libc) && defined(SHARED) -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1(__strncpy_ppc, __GI_strncpy, __strncpy_ppc); -#endif - -extern __typeof (strncpy) __strncpy_ppc attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncpy.c b/sysdeps/powerpc/powerpc64/multiarch/strncpy.c deleted file mode 100644 index bb63c185e6..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strncpy.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Multiple versions of strncpy. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for definition in libc. */ -#if IS_IN (libc) -# define strncpy __redirect_strncpy -/* Omit the strncpy inline definitions because it would redefine strncpy. */ -# define __NO_STRING_INLINES -# include -# include -# include "init-arch.h" - -extern __typeof (strncpy) __strncpy_ppc attribute_hidden; -extern __typeof (strncpy) __strncpy_power7 attribute_hidden; -extern __typeof (strncpy) __strncpy_power8 attribute_hidden; -# undef strncpy - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect_strncpy, strncpy, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strncpy_power8 - : (hwcap & PPC_FEATURE_HAS_VSX) - ? __strncpy_power7 - : __strncpy_ppc); - -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strnlen-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strnlen-power7.S deleted file mode 100644 index 2f0a183e31..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strnlen-power7.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Optimized strnlen version for POWER7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRNLEN __strnlen_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) -#undef weak_alias -#define weak_alias(name, alias) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strnlen-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strnlen-power8.S deleted file mode 100644 index ccea15df10..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strnlen-power8.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Optimized strnlen version for POWER8. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __strnlen __strnlen_power8 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) -#undef weak_alias -#define weak_alias(name, alias) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strnlen-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strnlen-ppc64.c deleted file mode 100644 index 708455a156..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strnlen-ppc64.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strnlen.c b/sysdeps/powerpc/powerpc64/multiarch/strnlen.c deleted file mode 100644 index 7f89132aa5..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strnlen.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Multiple versions of strnlen. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define strnlen __redirect_strnlen -# define __strnlen __redirect___strnlen -# include -# include -# include "init-arch.h" - -extern __typeof (__strnlen) __strnlen_ppc attribute_hidden; -extern __typeof (__strnlen) __strnlen_power7 attribute_hidden; -extern __typeof (__strnlen) __strnlen_power8 attribute_hidden; -# undef strnlen -# undef __strnlen -libc_ifunc_redirected (__redirect___strnlen, __strnlen, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strnlen_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strnlen_power7 - : __strnlen_ppc); -weak_alias (__strnlen, strnlen) - -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strrchr-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strrchr-power7.S deleted file mode 100644 index 10bab2ec54..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strrchr-power7.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Optimized strrchr implementation for POWER7. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRRCHR __strrchr_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strrchr-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strrchr-power8.S deleted file mode 100644 index 23365a1446..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strrchr-power8.S +++ /dev/null @@ -1,39 +0,0 @@ -/* Optimized strrchr implementation for POWER8. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef ENTRY -#define ENTRY(name) \ - .section ".text"; \ - ENTRY_2(__strrchr_power8) \ - .align ALIGNARG(2); \ - BODY_LABEL(__strrchr_power8): \ - cfi_startproc; \ - LOCALENTRY(__strrchr_power8) - -#undef END -#define END(name) \ - cfi_endproc; \ - TRACEBACK(__strrchr_power8) \ - END_2(__strrchr_power8) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strrchr-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strrchr-ppc64.c deleted file mode 100644 index 62b77a0bbe..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strrchr-ppc64.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRRCHR __strrchr_ppc - -#undef weak_alias -#define weak_alias(name, aliasname) - -#if IS_IN (libc) && defined(SHARED) -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1(__strrchr_ppc, __GI_strrchr, __strrchr_ppc); -#endif - -extern __typeof (strrchr) __strrchr_ppc attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strrchr.c b/sysdeps/powerpc/powerpc64/multiarch/strrchr.c deleted file mode 100644 index 0f94c9d6a1..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strrchr.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of strrchr. PowerPC64 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for definition in libc. */ -#if IS_IN (libc) -# define strrchr __redirect_strrchr -# include -# include -# include "init-arch.h" - -extern __typeof (strrchr) __strrchr_ppc attribute_hidden; -extern __typeof (strrchr) __strrchr_power7 attribute_hidden; -extern __typeof (strrchr) __strrchr_power8 attribute_hidden; -#undef strrchr - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect_strrchr, strrchr, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strrchr_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strrchr_power7 - : __strrchr_ppc); -weak_alias (strrchr, rindex) -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strspn-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strspn-power8.S deleted file mode 100644 index f8487f1cbc..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strspn-power8.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Optimized strspn implementation for POWER8. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRSPN __strspn_power8 -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strspn-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strspn-ppc64.c deleted file mode 100644 index 53d3d61651..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strspn-ppc64.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Default strspn implementation for PowerPC64. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define STRSPN __strspn_ppc -#ifdef SHARED -#undef libc_hidden_def -#define libc_hidden_def(name) -#endif - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strspn.c b/sysdeps/powerpc/powerpc64/multiarch/strspn.c deleted file mode 100644 index 0957482766..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strspn.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Multiple versions of strspn. PowerPC64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -# include -# include -# include "init-arch.h" - -#undef strspn -extern __typeof (strspn) __libc_strspn; - -extern __typeof (strspn) __strspn_ppc attribute_hidden; -extern __typeof (strspn) __strspn_power8 attribute_hidden; - -libc_ifunc (__libc_strspn, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strspn_power8 - : __strspn_ppc); - -weak_alias (__libc_strspn, strspn) -libc_hidden_builtin_def (strspn) diff --git a/sysdeps/powerpc/powerpc64/multiarch/strstr-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strstr-power7.S deleted file mode 100644 index 3991df74a8..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strstr-power7.S +++ /dev/null @@ -1,30 +0,0 @@ -/* Optimized strstr implementation for POWER7. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRSTR __strstr_power7 - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#define STRLEN __strlen_power7 -#define STRNLEN __strnlen_power7 -#define STRCHR __strchr_power7 - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strstr-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strstr-ppc64.c deleted file mode 100644 index 37add12c87..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strstr-ppc64.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRSTR __strstr_ppc -#if IS_IN (libc) && defined(SHARED) -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1(__strstr_ppc, __GI_strstr, __strstr_ppc); -#endif - -extern __typeof (strstr) __strstr_ppc attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/strstr.c b/sysdeps/powerpc/powerpc64/multiarch/strstr.c deleted file mode 100644 index d903b2702b..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/strstr.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of strstr. PowerPC64 version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for definition in libc. */ -#if IS_IN (libc) -# define strstr __redirect_strstr -# include -# include -# include "init-arch.h" - -extern __typeof (strstr) __strstr_ppc attribute_hidden; -extern __typeof (strstr) __strstr_power7 attribute_hidden; -# undef strstr - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -libc_ifunc_redirected (__redirect_strstr, strstr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strstr_power7 - : __strstr_ppc); -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcschr-power6.c b/sysdeps/powerpc/powerpc64/multiarch/wcschr-power6.c deleted file mode 100644 index 080cb696a7..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcschr-power6.c +++ /dev/null @@ -1,19 +0,0 @@ -/* wcschr.c - Wide Character Search for powerpc64/power6. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcschr-power7.c b/sysdeps/powerpc/powerpc64/multiarch/wcschr-power7.c deleted file mode 100644 index 8f4de0e857..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcschr-power7.c +++ /dev/null @@ -1,19 +0,0 @@ -/* wcschr.c - Wide Character Search for powerpc64/power7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcschr-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/wcschr-ppc64.c deleted file mode 100644 index e781e947fe..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcschr-ppc64.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcschr.c b/sysdeps/powerpc/powerpc64/multiarch/wcschr.c deleted file mode 100644 index ca373e096f..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcschr.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Multiple versions of wcschr - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define wcschr __redirect_wcschr -# define __wcschr __redirect___wcschr -# include -# include -# include "init-arch.h" - -extern __typeof (wcschr) __wcschr_ppc attribute_hidden; -extern __typeof (wcschr) __wcschr_power6 attribute_hidden; -extern __typeof (wcschr) __wcschr_power7 attribute_hidden; -# undef wcschr -# undef __wcschr - -libc_ifunc_redirected (__redirect___wcschr, __wcschr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __wcschr_power7 - : (hwcap & PPC_FEATURE_ARCH_2_05) - ? __wcschr_power6 - : __wcschr_ppc); -weak_alias (__wcschr, wcschr) -#else -#undef libc_hidden_def -#define libc_hidden_def(a) -#include -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcscpy-power6.c b/sysdeps/powerpc/powerpc64/multiarch/wcscpy-power6.c deleted file mode 100644 index 89d8a39640..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcscpy-power6.c +++ /dev/null @@ -1,19 +0,0 @@ -/* wcscpy.c - Wide Character Search for powerpc64/power6. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcscpy-power7.c b/sysdeps/powerpc/powerpc64/multiarch/wcscpy-power7.c deleted file mode 100644 index 47ba73b2cc..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcscpy-power7.c +++ /dev/null @@ -1,19 +0,0 @@ -/* wcscpy.c - Wide Character Search for powerpc64/power7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcscpy-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/wcscpy-ppc64.c deleted file mode 100644 index 1924b235ef..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcscpy-ppc64.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcscpy.c b/sysdeps/powerpc/powerpc64/multiarch/wcscpy.c deleted file mode 100644 index 13e44afb09..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcscpy.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of wcscpy. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# include -# include "init-arch.h" - -extern __typeof (wcscpy) __wcscpy_ppc attribute_hidden; -extern __typeof (wcscpy) __wcscpy_power6 attribute_hidden; -extern __typeof (wcscpy) __wcscpy_power7 attribute_hidden; - -libc_ifunc (wcscpy, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __wcscpy_power7 : - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __wcscpy_power6 - : __wcscpy_ppc); -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcsrchr-power6.c b/sysdeps/powerpc/powerpc64/multiarch/wcsrchr-power6.c deleted file mode 100644 index 5dc448b339..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcsrchr-power6.c +++ /dev/null @@ -1,19 +0,0 @@ -/* wcsrchr.c - Wide Character Search for powerpc64/power6. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcsrchr-power7.c b/sysdeps/powerpc/powerpc64/multiarch/wcsrchr-power7.c deleted file mode 100644 index fa25aa0475..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcsrchr-power7.c +++ /dev/null @@ -1,19 +0,0 @@ -/* wcsrchr.c - Wide Character Search for powerpc64/power7. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcsrchr-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/wcsrchr-ppc64.c deleted file mode 100644 index 8a913412a0..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcsrchr-ppc64.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcsrchr.c b/sysdeps/powerpc/powerpc64/multiarch/wcsrchr.c deleted file mode 100644 index 07590f5a90..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wcsrchr.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of wcsrchr. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include -# include -# include "init-arch.h" - -extern __typeof (wcsrchr) __wcsrchr_ppc attribute_hidden; -extern __typeof (wcsrchr) __wcsrchr_power6 attribute_hidden; -extern __typeof (wcsrchr) __wcsrchr_power7 attribute_hidden; - -libc_ifunc (wcsrchr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __wcsrchr_power7 : - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __wcsrchr_power6 - : __wcsrchr_ppc); -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/wordcopy-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/wordcopy-ppc64.c deleted file mode 100644 index 078156f5d9..0000000000 --- a/sysdeps/powerpc/powerpc64/multiarch/wordcopy-ppc64.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/power4/Implies b/sysdeps/powerpc/powerpc64/power4/Implies deleted file mode 100644 index a372141bb7..0000000000 --- a/sysdeps/powerpc/powerpc64/power4/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/power4/fpu -powerpc/power4 diff --git a/sysdeps/powerpc/powerpc64/power4/Makefile b/sysdeps/powerpc/powerpc64/power4/Makefile deleted file mode 100644 index ba06adb5d0..0000000000 --- a/sysdeps/powerpc/powerpc64/power4/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# Makefile fragment for POWER4/5/5+. - -ifeq ($(subdir),string) -CFLAGS-wordcopy.c += --param max-variable-expansions-in-unroller=2 --param max-unroll-times=2 -funroll-loops -fpeel-loops -CFLAGS-memmove.c += --param max-variable-expansions-in-unroller=2 --param max-unroll-times=2 -funroll-loops -fpeel-loops -endif diff --git a/sysdeps/powerpc/powerpc64/power4/fpu/Implies b/sysdeps/powerpc/powerpc64/power4/fpu/Implies deleted file mode 100644 index c1f617b7da..0000000000 --- a/sysdeps/powerpc/powerpc64/power4/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/fpu diff --git a/sysdeps/powerpc/powerpc64/power4/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc64/power4/fpu/multiarch/Implies deleted file mode 100644 index 8d6531a174..0000000000 --- a/sysdeps/powerpc/powerpc64/power4/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc64/power4/memcmp.S b/sysdeps/powerpc/powerpc64/power4/memcmp.S deleted file mode 100644 index 6ca98e909c..0000000000 --- a/sysdeps/powerpc/powerpc64/power4/memcmp.S +++ /dev/null @@ -1,1369 +0,0 @@ -/* Optimized memcmp implementation for PowerPC64. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] memcmp (const char *s1 [r3], - const char *s2 [r4], - size_t size [r5]) */ - -#ifndef MEMCMP -# define MEMCMP memcmp -#endif - - .machine power4 -EALIGN (MEMCMP, 4, 0) - CALL_MCOUNT 3 - -#define rRTN r3 -#define rSTR1 r3 /* first string arg */ -#define rSTR2 r4 /* second string arg */ -#define rN r5 /* max string length */ -#define rWORD1 r6 /* current word in s1 */ -#define rWORD2 r7 /* current word in s2 */ -#define rWORD3 r8 /* next word in s1 */ -#define rWORD4 r9 /* next word in s2 */ -#define rWORD5 r10 /* next word in s1 */ -#define rWORD6 r11 /* next word in s2 */ -#define rWORD7 r30 /* next word in s1 */ -#define rWORD8 r31 /* next word in s2 */ - - xor r0, rSTR2, rSTR1 - cmpldi cr6, rN, 0 - cmpldi cr1, rN, 12 - clrldi. r0, r0, 61 - clrldi r12, rSTR1, 61 - cmpldi cr5, r12, 0 - beq- cr6, L(zeroLength) - dcbt 0, rSTR1 - dcbt 0, rSTR2 -/* If less than 8 bytes or not aligned, use the unaligned - byte loop. */ - blt cr1, L(bytealigned) - std rWORD8, -8(r1) - std rWORD7, -16(r1) - cfi_offset(rWORD8, -8) - cfi_offset(rWORD7, -16) - bne L(unaligned) -/* At this point we know both strings have the same alignment and the - compare length is at least 8 bytes. r12 contains the low order - 3 bits of rSTR1 and cr5 contains the result of the logical compare - of r12 to 0. If r12 == 0 then we are already double word - aligned and can perform the DW aligned loop. - - Otherwise we know the two strings have the same alignment (but not - yet DW). So we force the string addresses to the next lower DW - boundary and special case this first DW using shift left to - eliminate bits preceding the first byte. Since we want to join the - normal (DW aligned) compare loop, starting at the second double word, - we need to adjust the length (rN) and special case the loop - versioning for the first DW. This ensures that the loop count is - correct and the first DW (shifted) is in the expected register pair. */ - .align 4 -L(samealignment): - clrrdi rSTR1, rSTR1, 3 - clrrdi rSTR2, rSTR2, 3 - beq cr5, L(DWaligned) - add rN, rN, r12 - sldi rWORD6, r12, 3 - srdi r0, rN, 5 /* Divide by 32 */ - andi. r12, rN, 24 /* Get the DW remainder */ -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - ldbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD1, 0(rSTR1) - ld rWORD2, 0(rSTR2) -#endif - cmpldi cr1, r12, 16 - cmpldi cr7, rN, 32 - clrldi rN, rN, 61 - beq L(dPs4) - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ - bgt cr1, L(dPs3) - beq cr1, L(dPs2) - -/* Remainder is 8 */ - .align 3 -L(dsP1): - sld rWORD5, rWORD1, rWORD6 - sld rWORD6, rWORD2, rWORD6 - cmpld cr5, rWORD5, rWORD6 - blt cr7, L(dP1x) -/* Do something useful in this cycle since we have to branch anyway. */ -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - ldbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD1, 8(rSTR1) - ld rWORD2, 8(rSTR2) -#endif - cmpld cr7, rWORD1, rWORD2 - b L(dP1e) -/* Remainder is 16 */ - .align 4 -L(dPs2): - sld rWORD5, rWORD1, rWORD6 - sld rWORD6, rWORD2, rWORD6 - cmpld cr6, rWORD5, rWORD6 - blt cr7, L(dP2x) -/* Do something useful in this cycle since we have to branch anyway. */ -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD7, 0, rSTR1 - ldbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD7, 8(rSTR1) - ld rWORD8, 8(rSTR2) -#endif - cmpld cr5, rWORD7, rWORD8 - b L(dP2e) -/* Remainder is 24 */ - .align 4 -L(dPs3): - sld rWORD3, rWORD1, rWORD6 - sld rWORD4, rWORD2, rWORD6 - cmpld cr1, rWORD3, rWORD4 - b L(dP3e) -/* Count is a multiple of 32, remainder is 0 */ - .align 4 -L(dPs4): - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ - sld rWORD1, rWORD1, rWORD6 - sld rWORD2, rWORD2, rWORD6 - cmpld cr7, rWORD1, rWORD2 - b L(dP4e) - -/* At this point we know both strings are double word aligned and the - compare length is at least 8 bytes. */ - .align 4 -L(DWaligned): - andi. r12, rN, 24 /* Get the DW remainder */ - srdi r0, rN, 5 /* Divide by 32 */ - cmpldi cr1, r12, 16 - cmpldi cr7, rN, 32 - clrldi rN, rN, 61 - beq L(dP4) - bgt cr1, L(dP3) - beq cr1, L(dP2) - -/* Remainder is 8 */ - .align 4 -L(dP1): - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ -/* Normally we'd use rWORD7/rWORD8 here, but since we might exit early - (8-15 byte compare), we want to use only volatile registers. This - means we can avoid restoring non-volatile registers since we did not - change any on the early exit path. The key here is the non-early - exit path only cares about the condition code (cr5), not about which - register pair was used. */ -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD5, 0, rSTR1 - ldbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD5, 0(rSTR1) - ld rWORD6, 0(rSTR2) -#endif - cmpld cr5, rWORD5, rWORD6 - blt cr7, L(dP1x) -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - ldbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD1, 8(rSTR1) - ld rWORD2, 8(rSTR2) -#endif - cmpld cr7, rWORD1, rWORD2 -L(dP1e): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD3, 0, rSTR1 - ldbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD3, 16(rSTR1) - ld rWORD4, 16(rSTR2) -#endif - cmpld cr1, rWORD3, rWORD4 -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD5, 0, rSTR1 - ldbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD5, 24(rSTR1) - ld rWORD6, 24(rSTR2) -#endif - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5x) - bne cr7, L(dLcr7x) - -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD7, 0, rSTR1 - ldbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ldu rWORD7, 32(rSTR1) - ldu rWORD8, 32(rSTR2) -#endif - bne cr1, L(dLcr1) - cmpld cr5, rWORD7, rWORD8 - bdnz L(dLoop) - bne cr6, L(dLcr6) - ld rWORD8, -8(r1) - ld rWORD7, -16(r1) - .align 3 -L(dP1x): - sldi. r12, rN, 3 - bne cr5, L(dLcr5x) - subfic rN, r12, 64 /* Shift count is 64 - (rN * 8). */ - bne L(d00) - li rRTN, 0 - blr - -/* Remainder is 16 */ - .align 4 -L(dP2): - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD5, 0, rSTR1 - ldbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD5, 0(rSTR1) - ld rWORD6, 0(rSTR2) -#endif - cmpld cr6, rWORD5, rWORD6 - blt cr7, L(dP2x) -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD7, 0, rSTR1 - ldbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD7, 8(rSTR1) - ld rWORD8, 8(rSTR2) -#endif - cmpld cr5, rWORD7, rWORD8 -L(dP2e): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - ldbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD1, 16(rSTR1) - ld rWORD2, 16(rSTR2) -#endif - cmpld cr7, rWORD1, rWORD2 -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD3, 0, rSTR1 - ldbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD3, 24(rSTR1) - ld rWORD4, 24(rSTR2) -#endif - cmpld cr1, rWORD3, rWORD4 -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#endif - bne cr6, L(dLcr6) - bne cr5, L(dLcr5) - b L(dLoop2) -/* Again we are on a early exit path (16-23 byte compare), we want to - only use volatile registers and avoid restoring non-volatile - registers. */ - .align 4 -L(dP2x): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD3, 0, rSTR1 - ldbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD3, 8(rSTR1) - ld rWORD4, 8(rSTR2) -#endif - cmpld cr1, rWORD3, rWORD4 - sldi. r12, rN, 3 - bne cr6, L(dLcr6x) -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#endif - bne cr1, L(dLcr1x) - subfic rN, r12, 64 /* Shift count is 64 - (rN * 8). */ - bne L(d00) - li rRTN, 0 - blr - -/* Remainder is 24 */ - .align 4 -L(dP3): - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD3, 0, rSTR1 - ldbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD3, 0(rSTR1) - ld rWORD4, 0(rSTR2) -#endif - cmpld cr1, rWORD3, rWORD4 -L(dP3e): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD5, 0, rSTR1 - ldbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD5, 8(rSTR1) - ld rWORD6, 8(rSTR2) -#endif - cmpld cr6, rWORD5, rWORD6 - blt cr7, L(dP3x) -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD7, 0, rSTR1 - ldbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD7, 16(rSTR1) - ld rWORD8, 16(rSTR2) -#endif - cmpld cr5, rWORD7, rWORD8 -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - ldbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD1, 24(rSTR1) - ld rWORD2, 24(rSTR2) -#endif - cmpld cr7, rWORD1, rWORD2 -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 16 - addi rSTR2, rSTR2, 16 -#endif - bne cr1, L(dLcr1) - bne cr6, L(dLcr6) - b L(dLoop1) -/* Again we are on a early exit path (24-31 byte compare), we want to - only use volatile registers and avoid restoring non-volatile - registers. */ - .align 4 -L(dP3x): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - ldbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD1, 16(rSTR1) - ld rWORD2, 16(rSTR2) -#endif - cmpld cr7, rWORD1, rWORD2 - sldi. r12, rN, 3 - bne cr1, L(dLcr1x) -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 16 - addi rSTR2, rSTR2, 16 -#endif - bne cr6, L(dLcr6x) - subfic rN, r12, 64 /* Shift count is 64 - (rN * 8). */ - bne cr7, L(dLcr7x) - bne L(d00) - li rRTN, 0 - blr - -/* Count is a multiple of 32, remainder is 0 */ - .align 4 -L(dP4): - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - ldbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD1, 0(rSTR1) - ld rWORD2, 0(rSTR2) -#endif - cmpld cr7, rWORD1, rWORD2 -L(dP4e): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD3, 0, rSTR1 - ldbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD3, 8(rSTR1) - ld rWORD4, 8(rSTR2) -#endif - cmpld cr1, rWORD3, rWORD4 -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD5, 0, rSTR1 - ldbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD5, 16(rSTR1) - ld rWORD6, 16(rSTR2) -#endif - cmpld cr6, rWORD5, rWORD6 -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD7, 0, rSTR1 - ldbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ldu rWORD7, 24(rSTR1) - ldu rWORD8, 24(rSTR2) -#endif - cmpld cr5, rWORD7, rWORD8 - bne cr7, L(dLcr7) - bne cr1, L(dLcr1) - bdz- L(d24) /* Adjust CTR as we start with +4 */ -/* This is the primary loop */ - .align 4 -L(dLoop): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - ldbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD1, 8(rSTR1) - ld rWORD2, 8(rSTR2) -#endif - cmpld cr1, rWORD3, rWORD4 - bne cr6, L(dLcr6) -L(dLoop1): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD3, 0, rSTR1 - ldbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD3, 16(rSTR1) - ld rWORD4, 16(rSTR2) -#endif - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5) -L(dLoop2): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD5, 0, rSTR1 - ldbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD5, 24(rSTR1) - ld rWORD6, 24(rSTR2) -#endif - cmpld cr5, rWORD7, rWORD8 - bne cr7, L(dLcr7) -L(dLoop3): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD7, 0, rSTR1 - ldbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ldu rWORD7, 32(rSTR1) - ldu rWORD8, 32(rSTR2) -#endif - bne- cr1, L(dLcr1) - cmpld cr7, rWORD1, rWORD2 - bdnz+ L(dLoop) - -L(dL4): - cmpld cr1, rWORD3, rWORD4 - bne cr6, L(dLcr6) - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5) - cmpld cr5, rWORD7, rWORD8 -L(d44): - bne cr7, L(dLcr7) -L(d34): - bne cr1, L(dLcr1) -L(d24): - bne cr6, L(dLcr6) -L(d14): - sldi. r12, rN, 3 - bne cr5, L(dLcr5) -L(d04): - ld rWORD8, -8(r1) - ld rWORD7, -16(r1) - subfic rN, r12, 64 /* Shift count is 64 - (rN * 8). */ - beq L(zeroLength) -/* At this point we have a remainder of 1 to 7 bytes to compare. Since - we are aligned it is safe to load the whole double word, and use - shift right double to eliminate bits beyond the compare length. */ -L(d00): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - ldbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD1, 8(rSTR1) - ld rWORD2, 8(rSTR2) -#endif - srd rWORD1, rWORD1, rN - srd rWORD2, rWORD2, rN - cmpld cr7, rWORD1, rWORD2 - bne cr7, L(dLcr7x) - li rRTN, 0 - blr - - .align 4 -L(dLcr7): - ld rWORD8, -8(r1) - ld rWORD7, -16(r1) -L(dLcr7x): - li rRTN, 1 - bgtlr cr7 - li rRTN, -1 - blr - .align 4 -L(dLcr1): - ld rWORD8, -8(r1) - ld rWORD7, -16(r1) -L(dLcr1x): - li rRTN, 1 - bgtlr cr1 - li rRTN, -1 - blr - .align 4 -L(dLcr6): - ld rWORD8, -8(r1) - ld rWORD7, -16(r1) -L(dLcr6x): - li rRTN, 1 - bgtlr cr6 - li rRTN, -1 - blr - .align 4 -L(dLcr5): - ld rWORD8, -8(r1) - ld rWORD7, -16(r1) -L(dLcr5x): - li rRTN, 1 - bgtlr cr5 - li rRTN, -1 - blr - - .align 4 -L(bytealigned): - mtctr rN /* Power4 wants mtctr 1st in dispatch group */ -#if 0 -/* Huh? We've already branched on cr6! */ - beq- cr6, L(zeroLength) -#endif - -/* We need to prime this loop. This loop is swing modulo scheduled - to avoid pipe delays. The dependent instruction latencies (load to - compare to conditional branch) is 2 to 3 cycles. In this loop each - dispatch group ends in a branch and takes 1 cycle. Effectively - the first iteration of the loop only serves to load operands and - branches based on compares are delayed until the next loop. - - So we must precondition some registers and condition codes so that - we don't exit the loop early on the first iteration. */ - - lbz rWORD1, 0(rSTR1) - lbz rWORD2, 0(rSTR2) - bdz- L(b11) - cmpld cr7, rWORD1, rWORD2 - lbz rWORD3, 1(rSTR1) - lbz rWORD4, 1(rSTR2) - bdz- L(b12) - cmpld cr1, rWORD3, rWORD4 - lbzu rWORD5, 2(rSTR1) - lbzu rWORD6, 2(rSTR2) - bdz- L(b13) - .align 4 -L(bLoop): - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) - bne- cr7, L(bLcr7) - - cmpld cr6, rWORD5, rWORD6 - bdz- L(b3i) - - lbzu rWORD3, 1(rSTR1) - lbzu rWORD4, 1(rSTR2) - bne- cr1, L(bLcr1) - - cmpld cr7, rWORD1, rWORD2 - bdz- L(b2i) - - lbzu rWORD5, 1(rSTR1) - lbzu rWORD6, 1(rSTR2) - bne- cr6, L(bLcr6) - - cmpld cr1, rWORD3, rWORD4 - bdnz+ L(bLoop) - -/* We speculatively loading bytes before we have tested the previous - bytes. But we must avoid overrunning the length (in the ctr) to - prevent these speculative loads from causing a segfault. In this - case the loop will exit early (before the all pending bytes are - tested. In this case we must complete the pending operations - before returning. */ -L(b1i): - bne- cr7, L(bLcr7) - bne- cr1, L(bLcr1) - b L(bx56) - .align 4 -L(b2i): - bne- cr6, L(bLcr6) - bne- cr7, L(bLcr7) - b L(bx34) - .align 4 -L(b3i): - bne- cr1, L(bLcr1) - bne- cr6, L(bLcr6) - b L(bx12) - .align 4 -L(bLcr7): - li rRTN, 1 - bgtlr cr7 - li rRTN, -1 - blr -L(bLcr1): - li rRTN, 1 - bgtlr cr1 - li rRTN, -1 - blr -L(bLcr6): - li rRTN, 1 - bgtlr cr6 - li rRTN, -1 - blr - -L(b13): - bne- cr7, L(bx12) - bne- cr1, L(bx34) -L(bx56): - sub rRTN, rWORD5, rWORD6 - blr - nop -L(b12): - bne- cr7, L(bx12) -L(bx34): - sub rRTN, rWORD3, rWORD4 - blr -L(b11): -L(bx12): - sub rRTN, rWORD1, rWORD2 - blr - .align 4 -L(zeroLength): - li rRTN, 0 - blr - - .align 4 -/* At this point we know the strings have different alignment and the - compare length is at least 8 bytes. r12 contains the low order - 3 bits of rSTR1 and cr5 contains the result of the logical compare - of r12 to 0. If r12 == 0 then rStr1 is double word - aligned and can perform the DWunaligned loop. - - Otherwise we know that rSTR1 is not already DW aligned yet. - So we can force the string addresses to the next lower DW - boundary and special case this first DW using shift left to - eliminate bits preceding the first byte. Since we want to join the - normal (DWaligned) compare loop, starting at the second double word, - we need to adjust the length (rN) and special case the loop - versioning for the first DW. This ensures that the loop count is - correct and the first DW (shifted) is in the expected resister pair. */ -#define rSHL r29 /* Unaligned shift left count. */ -#define rSHR r28 /* Unaligned shift right count. */ -#define rWORD8_SHIFT r27 /* Left rotation temp for rWORD2. */ -#define rWORD2_SHIFT r26 /* Left rotation temp for rWORD4. */ -#define rWORD4_SHIFT r25 /* Left rotation temp for rWORD6. */ -#define rWORD6_SHIFT r24 /* Left rotation temp for rWORD8. */ -L(unaligned): - std rSHL, -24(r1) - cfi_offset(rSHL, -24) - clrldi rSHL, rSTR2, 61 - beq- cr6, L(duzeroLength) - std rSHR, -32(r1) - cfi_offset(rSHR, -32) - beq cr5, L(DWunaligned) - std rWORD8_SHIFT, -40(r1) - cfi_offset(rWORD8_SHIFT, -40) -/* Adjust the logical start of rSTR2 to compensate for the extra bits - in the 1st rSTR1 DW. */ - sub rWORD8_SHIFT, rSTR2, r12 -/* But do not attempt to address the DW before that DW that contains - the actual start of rSTR2. */ - clrrdi rSTR2, rSTR2, 3 - std rWORD2_SHIFT, -48(r1) -/* Compute the left/right shift counts for the unaligned rSTR2, - compensating for the logical (DW aligned) start of rSTR1. */ - clrldi rSHL, rWORD8_SHIFT, 61 - clrrdi rSTR1, rSTR1, 3 - std rWORD4_SHIFT, -56(r1) - sldi rSHL, rSHL, 3 - cmpld cr5, rWORD8_SHIFT, rSTR2 - add rN, rN, r12 - sldi rWORD6, r12, 3 - std rWORD6_SHIFT, -64(r1) - cfi_offset(rWORD2_SHIFT, -48) - cfi_offset(rWORD4_SHIFT, -56) - cfi_offset(rWORD6_SHIFT, -64) - subfic rSHR, rSHL, 64 - srdi r0, rN, 5 /* Divide by 32 */ - andi. r12, rN, 24 /* Get the DW remainder */ -/* We normally need to load 2 DWs to start the unaligned rSTR2, but in - this special case those bits may be discarded anyway. Also we - must avoid loading a DW where none of the bits are part of rSTR2 as - this may cross a page boundary and cause a page fault. */ - li rWORD8, 0 - blt cr5, L(dus0) -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD8, 0, rSTR2 - addi rSTR2, rSTR2, 8 -#else - ld rWORD8, 0(rSTR2) - addi rSTR2, rSTR2, 8 -#endif - sld rWORD8, rWORD8, rSHL - -L(dus0): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - ldbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD1, 0(rSTR1) - ld rWORD2, 0(rSTR2) -#endif - cmpldi cr1, r12, 16 - cmpldi cr7, rN, 32 - srd r12, rWORD2, rSHR - clrldi rN, rN, 61 - beq L(duPs4) - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ - or rWORD8, r12, rWORD8 - bgt cr1, L(duPs3) - beq cr1, L(duPs2) - -/* Remainder is 8 */ - .align 4 -L(dusP1): - sld rWORD8_SHIFT, rWORD2, rSHL - sld rWORD7, rWORD1, rWORD6 - sld rWORD8, rWORD8, rWORD6 - bge cr7, L(duP1e) -/* At this point we exit early with the first double word compare - complete and remainder of 0 to 7 bytes. See L(du14) for details on - how we handle the remaining bytes. */ - cmpld cr5, rWORD7, rWORD8 - sldi. rN, rN, 3 - bne cr5, L(duLcr5) - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 8 -#else - ld rWORD2, 8(rSTR2) -#endif - srd r0, rWORD2, rSHR - b L(dutrim) -/* Remainder is 16 */ - .align 4 -L(duPs2): - sld rWORD6_SHIFT, rWORD2, rSHL - sld rWORD5, rWORD1, rWORD6 - sld rWORD6, rWORD8, rWORD6 - b L(duP2e) -/* Remainder is 24 */ - .align 4 -L(duPs3): - sld rWORD4_SHIFT, rWORD2, rSHL - sld rWORD3, rWORD1, rWORD6 - sld rWORD4, rWORD8, rWORD6 - b L(duP3e) -/* Count is a multiple of 32, remainder is 0 */ - .align 4 -L(duPs4): - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ - or rWORD8, r12, rWORD8 - sld rWORD2_SHIFT, rWORD2, rSHL - sld rWORD1, rWORD1, rWORD6 - sld rWORD2, rWORD8, rWORD6 - b L(duP4e) - -/* At this point we know rSTR1 is double word aligned and the - compare length is at least 8 bytes. */ - .align 4 -L(DWunaligned): - std rWORD8_SHIFT, -40(r1) - clrrdi rSTR2, rSTR2, 3 - std rWORD2_SHIFT, -48(r1) - srdi r0, rN, 5 /* Divide by 32 */ - std rWORD4_SHIFT, -56(r1) - andi. r12, rN, 24 /* Get the DW remainder */ - std rWORD6_SHIFT, -64(r1) - cfi_offset(rWORD8_SHIFT, -40) - cfi_offset(rWORD2_SHIFT, -48) - cfi_offset(rWORD4_SHIFT, -56) - cfi_offset(rWORD6_SHIFT, -64) - sldi rSHL, rSHL, 3 -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD6, 0, rSTR2 - addi rSTR2, rSTR2, 8 - ldbrx rWORD8, 0, rSTR2 - addi rSTR2, rSTR2, 8 -#else - ld rWORD6, 0(rSTR2) - ldu rWORD8, 8(rSTR2) -#endif - cmpldi cr1, r12, 16 - cmpldi cr7, rN, 32 - clrldi rN, rN, 61 - subfic rSHR, rSHL, 64 - sld rWORD6_SHIFT, rWORD6, rSHL - beq L(duP4) - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ - bgt cr1, L(duP3) - beq cr1, L(duP2) - -/* Remainder is 8 */ - .align 4 -L(duP1): - srd r12, rWORD8, rSHR -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD7, 0, rSTR1 - addi rSTR1, rSTR1, 8 -#else - ld rWORD7, 0(rSTR1) -#endif - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP1x) -L(duP1e): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - ldbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD1, 8(rSTR1) - ld rWORD2, 8(rSTR2) -#endif - cmpld cr5, rWORD7, rWORD8 - srd r0, rWORD2, rSHR - sld rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD3, 0, rSTR1 - ldbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD3, 16(rSTR1) - ld rWORD4, 16(rSTR2) -#endif - cmpld cr7, rWORD1, rWORD2 - srd r12, rWORD4, rSHR - sld rWORD4_SHIFT, rWORD4, rSHL - bne cr5, L(duLcr5) - or rWORD4, r12, rWORD2_SHIFT -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD5, 0, rSTR1 - ldbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD5, 24(rSTR1) - ld rWORD6, 24(rSTR2) -#endif - cmpld cr1, rWORD3, rWORD4 - srd r0, rWORD6, rSHR - sld rWORD6_SHIFT, rWORD6, rSHL - bne cr7, L(duLcr7) - or rWORD6, r0, rWORD4_SHIFT - cmpld cr6, rWORD5, rWORD6 - b L(duLoop3) - .align 4 -/* At this point we exit early with the first double word compare - complete and remainder of 0 to 7 bytes. See L(du14) for details on - how we handle the remaining bytes. */ -L(duP1x): - cmpld cr5, rWORD7, rWORD8 - sldi. rN, rN, 3 - bne cr5, L(duLcr5) - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 8 -#else - ld rWORD2, 8(rSTR2) -#endif - srd r0, rWORD2, rSHR - b L(dutrim) -/* Remainder is 16 */ - .align 4 -L(duP2): - srd r0, rWORD8, rSHR -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD5, 0, rSTR1 - addi rSTR1, rSTR1, 8 -#else - ld rWORD5, 0(rSTR1) -#endif - or rWORD6, r0, rWORD6_SHIFT - sld rWORD6_SHIFT, rWORD8, rSHL -L(duP2e): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD7, 0, rSTR1 - ldbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD7, 8(rSTR1) - ld rWORD8, 8(rSTR2) -#endif - cmpld cr6, rWORD5, rWORD6 - srd r12, rWORD8, rSHR - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP2x) -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - ldbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD1, 16(rSTR1) - ld rWORD2, 16(rSTR2) -#endif - cmpld cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - srd r0, rWORD2, rSHR - sld rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD3, 0, rSTR1 - ldbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD3, 24(rSTR1) - ld rWORD4, 24(rSTR2) -#endif - cmpld cr7, rWORD1, rWORD2 - bne cr5, L(duLcr5) - srd r12, rWORD4, rSHR - sld rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#endif - cmpld cr1, rWORD3, rWORD4 - b L(duLoop2) - .align 4 -L(duP2x): - cmpld cr5, rWORD7, rWORD8 -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#endif - bne cr6, L(duLcr6) - sldi. rN, rN, 3 - bne cr5, L(duLcr5) - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 8 -#else - ld rWORD2, 8(rSTR2) -#endif - srd r0, rWORD2, rSHR - b L(dutrim) - -/* Remainder is 24 */ - .align 4 -L(duP3): - srd r12, rWORD8, rSHR -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD3, 0, rSTR1 - addi rSTR1, rSTR1, 8 -#else - ld rWORD3, 0(rSTR1) -#endif - sld rWORD4_SHIFT, rWORD8, rSHL - or rWORD4, r12, rWORD6_SHIFT -L(duP3e): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD5, 0, rSTR1 - ldbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD5, 8(rSTR1) - ld rWORD6, 8(rSTR2) -#endif - cmpld cr1, rWORD3, rWORD4 - srd r0, rWORD6, rSHR - sld rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD7, 0, rSTR1 - ldbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD7, 16(rSTR1) - ld rWORD8, 16(rSTR2) -#endif - cmpld cr6, rWORD5, rWORD6 - bne cr1, L(duLcr1) - srd r12, rWORD8, rSHR - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP3x) -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - ldbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD1, 24(rSTR1) - ld rWORD2, 24(rSTR2) -#endif - cmpld cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - srd r0, rWORD2, rSHR - sld rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 16 - addi rSTR2, rSTR2, 16 -#endif - cmpld cr7, rWORD1, rWORD2 - b L(duLoop1) - .align 4 -L(duP3x): -#ifndef __LITTLE_ENDIAN__ - addi rSTR1, rSTR1, 16 - addi rSTR2, rSTR2, 16 -#endif -#if 0 -/* Huh? We've already branched on cr1! */ - bne cr1, L(duLcr1) -#endif - cmpld cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - sldi. rN, rN, 3 - bne cr5, L(duLcr5) - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 8 -#else - ld rWORD2, 8(rSTR2) -#endif - srd r0, rWORD2, rSHR - b L(dutrim) - -/* Count is a multiple of 32, remainder is 0 */ - .align 4 -L(duP4): - mtctr r0 /* Power4 wants mtctr 1st in dispatch group */ - srd r0, rWORD8, rSHR -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - addi rSTR1, rSTR1, 8 -#else - ld rWORD1, 0(rSTR1) -#endif - sld rWORD2_SHIFT, rWORD8, rSHL - or rWORD2, r0, rWORD6_SHIFT -L(duP4e): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD3, 0, rSTR1 - ldbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD3, 8(rSTR1) - ld rWORD4, 8(rSTR2) -#endif - cmpld cr7, rWORD1, rWORD2 - srd r12, rWORD4, rSHR - sld rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD5, 0, rSTR1 - ldbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD5, 16(rSTR1) - ld rWORD6, 16(rSTR2) -#endif - cmpld cr1, rWORD3, rWORD4 - bne cr7, L(duLcr7) - srd r0, rWORD6, rSHR - sld rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD7, 0, rSTR1 - ldbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ldu rWORD7, 24(rSTR1) - ldu rWORD8, 24(rSTR2) -#endif - cmpld cr6, rWORD5, rWORD6 - bne cr1, L(duLcr1) - srd r12, rWORD8, rSHR - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - cmpld cr5, rWORD7, rWORD8 - bdz- L(du24) /* Adjust CTR as we start with +4 */ -/* This is the primary loop */ - .align 4 -L(duLoop): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 - ldbrx rWORD2, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD1, 8(rSTR1) - ld rWORD2, 8(rSTR2) -#endif - cmpld cr1, rWORD3, rWORD4 - bne cr6, L(duLcr6) - srd r0, rWORD2, rSHR - sld rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT -L(duLoop1): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD3, 0, rSTR1 - ldbrx rWORD4, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD3, 16(rSTR1) - ld rWORD4, 16(rSTR2) -#endif - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(duLcr5) - srd r12, rWORD4, rSHR - sld rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT -L(duLoop2): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD5, 0, rSTR1 - ldbrx rWORD6, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ld rWORD5, 24(rSTR1) - ld rWORD6, 24(rSTR2) -#endif - cmpld cr5, rWORD7, rWORD8 - bne cr7, L(duLcr7) - srd r0, rWORD6, rSHR - sld rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT -L(duLoop3): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD7, 0, rSTR1 - ldbrx rWORD8, 0, rSTR2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 -#else - ldu rWORD7, 32(rSTR1) - ldu rWORD8, 32(rSTR2) -#endif - cmpld cr7, rWORD1, rWORD2 - bne- cr1, L(duLcr1) - srd r12, rWORD8, rSHR - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - bdnz+ L(duLoop) - -L(duL4): -#if 0 -/* Huh? We've already branched on cr1! */ - bne cr1, L(duLcr1) -#endif - cmpld cr1, rWORD3, rWORD4 - bne cr6, L(duLcr6) - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(duLcr5) - cmpld cr5, rWORD7, rWORD8 -L(du44): - bne cr7, L(duLcr7) -L(du34): - bne cr1, L(duLcr1) -L(du24): - bne cr6, L(duLcr6) -L(du14): - sldi. rN, rN, 3 - bne cr5, L(duLcr5) -/* At this point we have a remainder of 1 to 7 bytes to compare. We use - shift right double to eliminate bits beyond the compare length. - - However it may not be safe to load rWORD2 which may be beyond the - string length. So we compare the bit length of the remainder to - the right shift count (rSHR). If the bit count is less than or equal - we do not need to load rWORD2 (all significant bits are already in - rWORD8_SHIFT). */ - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD2, 0, rSTR2 - addi rSTR2, rSTR2, 8 -#else - ld rWORD2, 8(rSTR2) -#endif - srd r0, rWORD2, rSHR - .align 4 -L(dutrim): -#ifdef __LITTLE_ENDIAN__ - ldbrx rWORD1, 0, rSTR1 -#else - ld rWORD1, 8(rSTR1) -#endif - ld rWORD8, -8(r1) - subfic rN, rN, 64 /* Shift count is 64 - (rN * 8). */ - or rWORD2, r0, rWORD8_SHIFT - ld rWORD7, -16(r1) - ld rSHL, -24(r1) - srd rWORD1, rWORD1, rN - srd rWORD2, rWORD2, rN - ld rSHR, -32(r1) - ld rWORD8_SHIFT, -40(r1) - li rRTN, 0 - cmpld cr7, rWORD1, rWORD2 - ld rWORD2_SHIFT, -48(r1) - ld rWORD4_SHIFT, -56(r1) - beq cr7, L(dureturn24) - li rRTN, 1 - ld rWORD6_SHIFT, -64(r1) - bgtlr cr7 - li rRTN, -1 - blr - .align 4 -L(duLcr7): - ld rWORD8, -8(r1) - ld rWORD7, -16(r1) - li rRTN, 1 - bgt cr7, L(dureturn29) - ld rSHL, -24(r1) - ld rSHR, -32(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr1): - ld rWORD8, -8(r1) - ld rWORD7, -16(r1) - li rRTN, 1 - bgt cr1, L(dureturn29) - ld rSHL, -24(r1) - ld rSHR, -32(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr6): - ld rWORD8, -8(r1) - ld rWORD7, -16(r1) - li rRTN, 1 - bgt cr6, L(dureturn29) - ld rSHL, -24(r1) - ld rSHR, -32(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr5): - ld rWORD8, -8(r1) - ld rWORD7, -16(r1) - li rRTN, 1 - bgt cr5, L(dureturn29) - ld rSHL, -24(r1) - ld rSHR, -32(r1) - li rRTN, -1 - b L(dureturn27) - .align 3 -L(duZeroReturn): - li rRTN, 0 - .align 4 -L(dureturn): - ld rWORD8, -8(r1) - ld rWORD7, -16(r1) -L(dureturn29): - ld rSHL, -24(r1) - ld rSHR, -32(r1) -L(dureturn27): - ld rWORD8_SHIFT, -40(r1) -L(dureturn26): - ld rWORD2_SHIFT, -48(r1) -L(dureturn25): - ld rWORD4_SHIFT, -56(r1) -L(dureturn24): - ld rWORD6_SHIFT, -64(r1) - blr -L(duzeroLength): - li rRTN, 0 - blr - -END (MEMCMP) -libc_hidden_builtin_def (memcmp) -weak_alias (memcmp, bcmp) diff --git a/sysdeps/powerpc/powerpc64/power4/memcopy.h b/sysdeps/powerpc/powerpc64/power4/memcopy.h deleted file mode 100644 index 9a4ff79f4a..0000000000 --- a/sysdeps/powerpc/powerpc64/power4/memcopy.h +++ /dev/null @@ -1 +0,0 @@ -#include "../../powerpc32/power4/memcopy.h" diff --git a/sysdeps/powerpc/powerpc64/power4/memcpy.S b/sysdeps/powerpc/powerpc64/power4/memcpy.S deleted file mode 100644 index 2e96376b9f..0000000000 --- a/sysdeps/powerpc/powerpc64/power4/memcpy.S +++ /dev/null @@ -1,477 +0,0 @@ -/* Optimized memcpy implementation for PowerPC64. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); - Returns 'dst'. - - Memcpy handles short copies (< 32-bytes) using a binary move blocks - (no loops) of lwz/stw. The tail (remaining 1-3) bytes is handled - with the appropriate combination of byte and halfword load/stores. - There is minimal effort to optimize the alignment of short moves. - The 64-bit implementations of POWER3 and POWER4 do a reasonable job - of handling unaligned load/stores that do not cross 32-byte boundaries. - - Longer moves (>= 32-bytes) justify the effort to get at least the - destination doubleword (8-byte) aligned. Further optimization is - possible when both source and destination are doubleword aligned. - Each case has a optimized unrolled loop. */ - -#ifndef MEMCPY -# define MEMCPY memcpy -#endif - .machine power4 -EALIGN (MEMCPY, 5, 0) - CALL_MCOUNT 3 - - cmpldi cr1,5,31 - neg 0,3 - std 3,-16(1) - std 31,-8(1) - cfi_offset(31,-8) - andi. 11,3,7 /* check alignment of dst. */ - clrldi 0,0,61 /* Number of bytes until the 1st doubleword of dst. */ - clrldi 10,4,61 /* check alignment of src. */ - cmpldi cr6,5,8 - ble- cr1,.L2 /* If move < 32 bytes use short move code. */ - cmpld cr6,10,11 - mr 12,4 - srdi 9,5,3 /* Number of full double words remaining. */ - mtcrf 0x01,0 - mr 31,5 - beq .L0 - - subf 31,0,5 - /* Move 0-7 bytes as needed to get the destination doubleword aligned. */ -1: bf 31,2f - lbz 6,0(12) - addi 12,12,1 - stb 6,0(3) - addi 3,3,1 -2: bf 30,4f - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -4: bf 29,0f - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -0: - clrldi 10,12,61 /* check alignment of src again. */ - srdi 9,31,3 /* Number of full double words remaining. */ - - /* Copy doublewords from source to destination, assuming the - destination is aligned on a doubleword boundary. - - At this point we know there are at least 25 bytes left (32-7) to copy. - The next step is to determine if the source is also doubleword aligned. - If not branch to the unaligned move code at .L6. which uses - a load, shift, store strategy. - - Otherwise source and destination are doubleword aligned, and we can - the optimized doubleword copy loop. */ -.L0: - clrldi 11,31,61 - mtcrf 0x01,9 - cmpldi cr1,11,0 - bne- cr6,.L6 /* If source is not DW aligned. */ - - /* Move doublewords where destination and source are DW aligned. - Use a unrolled loop to copy 4 doubleword (32-bytes) per iteration. - If the copy is not an exact multiple of 32 bytes, 1-3 - doublewords are copied as needed to set up the main loop. After - the main loop exits there may be a tail of 1-7 bytes. These byte are - copied a word/halfword/byte at a time as needed to preserve alignment. */ - - srdi 8,31,5 - cmpldi cr1,9,4 - cmpldi cr6,11,0 - mr 11,12 - - bf 30,1f - ld 6,0(12) - ld 7,8(12) - addi 11,12,16 - mtctr 8 - std 6,0(3) - std 7,8(3) - addi 10,3,16 - bf 31,4f - ld 0,16(12) - std 0,16(3) - blt cr1,3f - addi 11,12,24 - addi 10,3,24 - b 4f - .align 4 -1: - mr 10,3 - mtctr 8 - bf 31,4f - ld 6,0(12) - addi 11,12,8 - std 6,0(3) - addi 10,3,8 - - .align 4 -4: - ld 6,0(11) - ld 7,8(11) - ld 8,16(11) - ld 0,24(11) - addi 11,11,32 -2: - std 6,0(10) - std 7,8(10) - std 8,16(10) - std 0,24(10) - addi 10,10,32 - bdnz 4b -3: - - rldicr 0,31,0,60 - mtcrf 0x01,31 - beq cr6,0f -.L9: - add 3,3,0 - add 12,12,0 - -/* At this point we have a tail of 0-7 bytes and we know that the - destination is double word aligned. */ -4: bf 29,2f - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: bf 30,1f - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -1: bf 31,0f - lbz 6,0(12) - stb 6,0(3) -0: - /* Return original dst pointer. */ - ld 31,-8(1) - ld 3,-16(1) - blr - -/* Copy up to 31 bytes. This divided into two cases 0-8 bytes and 9-31 - bytes. Each case is handled without loops, using binary (1,2,4,8) - tests. - - In the short (0-8 byte) case no attempt is made to force alignment - of either source or destination. The hardware will handle the - unaligned load/stores with small delays for crossing 32- 64-byte, and - 4096-byte boundaries. Since these short moves are unlikely to be - unaligned or cross these boundaries, the overhead to force - alignment is not justified. - - The longer (9-31 byte) move is more likely to cross 32- or 64-byte - boundaries. Since only loads are sensitive to the 32-/64-byte - boundaries it is more important to align the source then the - destination. If the source is not already word aligned, we first - move 1-3 bytes as needed. Since we are only word aligned we don't - use double word load/stores to insure that all loads are aligned. - While the destination and stores may still be unaligned, this - is only an issue for page (4096 byte boundary) crossing, which - should be rare for these short moves. The hardware handles this - case automatically with a small delay. */ - - .align 4 -.L2: - mtcrf 0x01,5 - neg 8,4 - clrrdi 11,4,2 - andi. 0,8,3 - ble cr6,.LE8 /* Handle moves of 0-8 bytes. */ -/* At least 9 bytes left. Get the source word aligned. */ - cmpldi cr1,5,16 - mr 10,5 - mr 12,4 - cmpldi cr6,0,2 - beq .L3 /* If the source is already word aligned skip this. */ -/* Copy 1-3 bytes to get source address word aligned. */ - lwz 6,0(11) - subf 10,0,5 - add 12,4,0 - blt cr6,5f - srdi 7,6,16 - bgt cr6,3f -#ifdef __LITTLE_ENDIAN__ - sth 7,0(3) -#else - sth 6,0(3) -#endif - b 7f - .align 4 -3: -#ifdef __LITTLE_ENDIAN__ - rotlwi 6,6,24 - stb 6,0(3) - sth 7,1(3) -#else - stb 7,0(3) - sth 6,1(3) -#endif - b 7f - .align 4 -5: -#ifdef __LITTLE_ENDIAN__ - rotlwi 6,6,8 -#endif - stb 6,0(3) -7: - cmpldi cr1,10,16 - add 3,3,0 - mtcrf 0x01,10 - .align 4 -.L3: -/* At least 6 bytes left and the source is word aligned. */ - blt cr1,8f -16: /* Move 16 bytes. */ - lwz 6,0(12) - lwz 7,4(12) - stw 6,0(3) - lwz 6,8(12) - stw 7,4(3) - lwz 7,12(12) - addi 12,12,16 - stw 6,8(3) - stw 7,12(3) - addi 3,3,16 -8: /* Move 8 bytes. */ - bf 28,4f - lwz 6,0(12) - lwz 7,4(12) - addi 12,12,8 - stw 6,0(3) - stw 7,4(3) - addi 3,3,8 -4: /* Move 4 bytes. */ - bf 29,2f - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: /* Move 2-3 bytes. */ - bf 30,1f - lhz 6,0(12) - sth 6,0(3) - bf 31,0f - lbz 7,2(12) - stb 7,2(3) - ld 3,-16(1) - blr -1: /* Move 1 byte. */ - bf 31,0f - lbz 6,0(12) - stb 6,0(3) -0: - /* Return original dst pointer. */ - ld 3,-16(1) - blr - -/* Special case to copy 0-8 bytes. */ - .align 4 -.LE8: - mr 12,4 - bne cr6,4f -/* Would have liked to use use ld/std here but the 630 processors are - slow for load/store doubles that are not at least word aligned. - Unaligned Load/Store word execute with only a 1 cycle penalty. */ - lwz 6,0(4) - lwz 7,4(4) - stw 6,0(3) - stw 7,4(3) - /* Return original dst pointer. */ - ld 3,-16(1) - blr - .align 4 -4: bf 29,2b - lwz 6,0(4) - stw 6,0(3) -6: - bf 30,5f - lhz 7,4(4) - sth 7,4(3) - bf 31,0f - lbz 8,6(4) - stb 8,6(3) - ld 3,-16(1) - blr - .align 4 -5: - bf 31,0f - lbz 6,4(4) - stb 6,4(3) - .align 4 -0: - /* Return original dst pointer. */ - ld 3,-16(1) - blr - - .align 4 -.L6: - - /* Copy doublewords where the destination is aligned but the source is - not. Use aligned doubleword loads from the source, shifted to realign - the data, to allow aligned destination stores. */ - addi 11,9,-1 /* loop DW count is one less than total */ - subf 5,10,12 - sldi 10,10,3 - mr 4,3 - srdi 8,11,2 /* calculate the 32 byte loop count */ - ld 6,0(5) - mtcrf 0x01,11 - cmpldi cr6,9,4 - mtctr 8 - ld 7,8(5) - subfic 9,10,64 - bf 30,1f - - /* there are at least two DWs to copy */ -#ifdef __LITTLE_ENDIAN__ - srd 0,6,10 - sld 8,7,9 -#else - sld 0,6,10 - srd 8,7,9 -#endif - or 0,0,8 - ld 6,16(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srd 0,7,10 - sld 8,6,9 -#else - sld 0,7,10 - srd 8,6,9 -#endif - or 0,0,8 - ld 7,24(5) - std 0,8(4) - addi 4,4,16 - addi 5,5,32 - blt cr6,8f /* if total DWs = 3, then bypass loop */ - bf 31,4f - /* there is a third DW to copy */ -#ifdef __LITTLE_ENDIAN__ - srd 0,6,10 - sld 8,7,9 -#else - sld 0,6,10 - srd 8,7,9 -#endif - or 0,0,8 - std 0,0(4) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - addi 4,4,8 - beq cr6,8f /* if total DWs = 4, then bypass loop */ - b 4f - .align 4 -1: -#ifdef __LITTLE_ENDIAN__ - srd 0,6,10 - sld 8,7,9 -#else - sld 0,6,10 - srd 8,7,9 -#endif - addi 5,5,16 - or 0,0,8 - bf 31,4f - mr 6,7 - ld 7,0(5) - addi 5,5,8 - std 0,0(4) - addi 4,4,8 - .align 4 -/* copy 32 bytes at a time */ -4: -#ifdef __LITTLE_ENDIAN__ - srd 0,6,10 - sld 8,7,9 -#else - sld 0,6,10 - srd 8,7,9 -#endif - or 0,0,8 - ld 6,0(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srd 0,7,10 - sld 8,6,9 -#else - sld 0,7,10 - srd 8,6,9 -#endif - or 0,0,8 - ld 7,8(5) - std 0,8(4) -#ifdef __LITTLE_ENDIAN__ - srd 0,6,10 - sld 8,7,9 -#else - sld 0,6,10 - srd 8,7,9 -#endif - or 0,0,8 - ld 6,16(5) - std 0,16(4) -#ifdef __LITTLE_ENDIAN__ - srd 0,7,10 - sld 8,6,9 -#else - sld 0,7,10 - srd 8,6,9 -#endif - or 0,0,8 - ld 7,24(5) - std 0,24(4) - addi 5,5,32 - addi 4,4,32 - bdnz+ 4b - .align 4 -8: - /* calculate and store the final DW */ -#ifdef __LITTLE_ENDIAN__ - srd 0,6,10 - sld 8,7,9 -#else - sld 0,6,10 - srd 8,7,9 -#endif - or 0,0,8 - std 0,0(4) -3: - rldicr 0,31,0,60 - mtcrf 0x01,31 - bne cr1,.L9 /* If the tail is 0 bytes we are done! */ - /* Return original dst pointer. */ - ld 31,-8(1) - ld 3,-16(1) - blr -END_GEN_TB (MEMCPY,TB_TOCLESS) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/powerpc/powerpc64/power4/memset.S b/sysdeps/powerpc/powerpc64/power4/memset.S deleted file mode 100644 index a57214e0b0..0000000000 --- a/sysdeps/powerpc/powerpc64/power4/memset.S +++ /dev/null @@ -1,251 +0,0 @@ -/* Optimized memset implementation for PowerPC64. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); - Returns 's'. - - The memset is done in three sizes: byte (8 bits), word (32 bits), - cache line (256 bits). There is a special case for setting cache lines - to 0, to take advantage of the dcbz instruction. */ - -#ifndef MEMSET -# define MEMSET memset -#endif - .machine power4 -EALIGN (MEMSET, 5, 0) - CALL_MCOUNT 3 - -#define rTMP r0 -#define rRTN r3 /* Initial value of 1st argument. */ -#define rMEMP0 r3 /* Original value of 1st arg. */ -#define rCHR r4 /* Char to set in each byte. */ -#define rLEN r5 /* Length of region to set. */ -#define rMEMP r6 /* Address at which we are storing. */ -#define rALIGN r7 /* Number of bytes we are setting now (when aligning). */ -#define rMEMP2 r8 - -#define rNEG64 r8 /* Constant -64 for clearing with dcbz. */ -#define rCLS r8 /* Cache line size obtained from static. */ -#define rCLM r9 /* Cache line size mask to check for cache alignment. */ -L(_memset): -/* Take care of case for size <= 4. */ - cmpldi cr1, rLEN, 8 - andi. rALIGN, rMEMP0, 7 - mr rMEMP, rMEMP0 - ble- cr1, L(small) - -/* Align to doubleword boundary. */ - cmpldi cr5, rLEN, 31 - insrdi rCHR, rCHR, 8, 48 /* Replicate byte to halfword. */ - beq+ L(aligned2) - mtcrf 0x01, rMEMP0 - subfic rALIGN, rALIGN, 8 - cror 28,30,31 /* Detect odd word aligned. */ - add rMEMP, rMEMP, rALIGN - sub rLEN, rLEN, rALIGN - insrdi rCHR, rCHR, 16, 32 /* Replicate halfword to word. */ - bt 29, L(g4) -/* Process the even word of doubleword. */ - bf+ 31, L(g2) - stb rCHR, 0(rMEMP0) - bt 30, L(g4x) -L(g2): - sth rCHR, -6(rMEMP) -L(g4x): - stw rCHR, -4(rMEMP) - b L(aligned) -/* Process the odd word of doubleword. */ -L(g4): - bf 28, L(g4x) /* If false, word aligned on odd word. */ - bf+ 31, L(g0) - stb rCHR, 0(rMEMP0) - bt 30, L(aligned) -L(g0): - sth rCHR, -2(rMEMP) - -/* Handle the case of size < 31. */ -L(aligned2): - insrdi rCHR, rCHR, 16, 32 /* Replicate halfword to word. */ -L(aligned): - mtcrf 0x01, rLEN - ble cr5, L(medium) -/* Align to 32-byte boundary. */ - andi. rALIGN, rMEMP, 0x18 - subfic rALIGN, rALIGN, 0x20 - insrdi rCHR, rCHR, 32, 0 /* Replicate word to double word. */ - beq L(caligned) - mtcrf 0x01, rALIGN - add rMEMP, rMEMP, rALIGN - sub rLEN, rLEN, rALIGN - cmplwi cr1, rALIGN, 0x10 - mr rMEMP2, rMEMP - bf 28, L(a1) - stdu rCHR, -8(rMEMP2) -L(a1): blt cr1, L(a2) - std rCHR, -8(rMEMP2) - stdu rCHR, -16(rMEMP2) -L(a2): - -/* Now aligned to a 32 byte boundary. */ -L(caligned): - cmpldi cr1, rCHR, 0 - clrrdi. rALIGN, rLEN, 5 - mtcrf 0x01, rLEN - beq cr1, L(zloopstart) /* Special case for clearing memory using dcbz. */ -L(nondcbz): - srdi rTMP, rALIGN, 5 - mtctr rTMP - beq L(medium) /* We may not actually get to do a full line. */ - clrldi. rLEN, rLEN, 59 - add rMEMP, rMEMP, rALIGN - li rNEG64, -0x40 - bdz L(cloopdone) - -L(c3): dcbtst rNEG64, rMEMP - std rCHR, -8(rMEMP) - std rCHR, -16(rMEMP) - std rCHR, -24(rMEMP) - stdu rCHR, -32(rMEMP) - bdnz L(c3) -L(cloopdone): - std rCHR, -8(rMEMP) - std rCHR, -16(rMEMP) - cmpldi cr1, rLEN, 16 - std rCHR, -24(rMEMP) - stdu rCHR, -32(rMEMP) - beqlr - add rMEMP, rMEMP, rALIGN - b L(medium_tail2) - - .align 5 -/* Clear lines of memory in 128-byte chunks. */ -L(zloopstart): -/* If the remaining length is less the 32 bytes, don't bother getting - the cache line size. */ - beq L(medium) - li rCLS,128 /* cache line size is 128 */ - -/* Now we know the cache line size, and it is not 32-bytes, but - we may not yet be aligned to the cache line. May have a partial - line to fill, so touch it 1st. */ - dcbt 0,rMEMP -L(getCacheAligned): - cmpldi cr1,rLEN,32 - andi. rTMP,rMEMP,127 - blt cr1,L(handletail32) - beq L(cacheAligned) - addi rMEMP,rMEMP,32 - addi rLEN,rLEN,-32 - std rCHR,-32(rMEMP) - std rCHR,-24(rMEMP) - std rCHR,-16(rMEMP) - std rCHR,-8(rMEMP) - b L(getCacheAligned) - -/* Now we are aligned to the cache line and can use dcbz. */ -L(cacheAligned): - cmpld cr1,rLEN,rCLS - blt cr1,L(handletail32) - dcbz 0,rMEMP - subf rLEN,rCLS,rLEN - add rMEMP,rMEMP,rCLS - b L(cacheAligned) - -/* We are here because the cache line size was set and was not 32-bytes - and the remainder (rLEN) is less than the actual cache line size. - So set up the preconditions for L(nondcbz) and go there. */ -L(handletail32): - clrrwi. rALIGN, rLEN, 5 - b L(nondcbz) - - .align 5 -L(small): -/* Memset of 8 bytes or less. */ - cmpldi cr6, rLEN, 4 - cmpldi cr5, rLEN, 1 - ble cr6,L(le4) - subi rLEN, rLEN, 4 - stb rCHR,0(rMEMP) - stb rCHR,1(rMEMP) - stb rCHR,2(rMEMP) - stb rCHR,3(rMEMP) - addi rMEMP,rMEMP, 4 - cmpldi cr5, rLEN, 1 -L(le4): - cmpldi cr1, rLEN, 3 - bltlr cr5 - stb rCHR, 0(rMEMP) - beqlr cr5 - stb rCHR, 1(rMEMP) - bltlr cr1 - stb rCHR, 2(rMEMP) - beqlr cr1 - stb rCHR, 3(rMEMP) - blr - -/* Memset of 0-31 bytes. */ - .align 5 -L(medium): - insrdi rCHR, rCHR, 32, 0 /* Replicate word to double word. */ - cmpldi cr1, rLEN, 16 -L(medium_tail2): - add rMEMP, rMEMP, rLEN -L(medium_tail): - bt- 31, L(medium_31t) - bt- 30, L(medium_30t) -L(medium_30f): - bt- 29, L(medium_29t) -L(medium_29f): - bge- cr1, L(medium_27t) - bflr- 28 - std rCHR, -8(rMEMP) - blr - -L(medium_31t): - stbu rCHR, -1(rMEMP) - bf- 30, L(medium_30f) -L(medium_30t): - sthu rCHR, -2(rMEMP) - bf- 29, L(medium_29f) -L(medium_29t): - stwu rCHR, -4(rMEMP) - blt- cr1, L(medium_27f) -L(medium_27t): - std rCHR, -8(rMEMP) - stdu rCHR, -16(rMEMP) -L(medium_27f): - bflr- 28 -L(medium_28t): - std rCHR, -8(rMEMP) - blr -END_GEN_TB (MEMSET,TB_TOCLESS) -libc_hidden_builtin_def (memset) - -/* Copied from bzero.S to prevent the linker from inserting a stub - between bzero and memset. */ -ENTRY (__bzero) - CALL_MCOUNT 3 - mr r5,r4 - li r4,0 - b L(_memset) -END (__bzero) -#ifndef __bzero -weak_alias (__bzero, bzero) -#endif diff --git a/sysdeps/powerpc/powerpc64/power4/multiarch/Implies b/sysdeps/powerpc/powerpc64/power4/multiarch/Implies deleted file mode 100644 index 30edcf7f9d..0000000000 --- a/sysdeps/powerpc/powerpc64/power4/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/multiarch diff --git a/sysdeps/powerpc/powerpc64/power4/strncmp.S b/sysdeps/powerpc/powerpc64/power4/strncmp.S deleted file mode 100644 index 2b0c00dfb2..0000000000 --- a/sysdeps/powerpc/powerpc64/power4/strncmp.S +++ /dev/null @@ -1,225 +0,0 @@ -/* Optimized strcmp implementation for PowerPC64. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef STRNCMP -# define STRNCMP strncmp -#endif - -/* See strlen.s for comments on how the end-of-string testing works. */ - -/* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */ - -EALIGN (STRNCMP, 4, 0) - CALL_MCOUNT 3 - -#define rTMP2 r0 -#define rRTN r3 -#define rSTR1 r3 /* first string arg */ -#define rSTR2 r4 /* second string arg */ -#define rN r5 /* max string length */ -#define rWORD1 r6 /* current word in s1 */ -#define rWORD2 r7 /* current word in s2 */ -#define rWORD3 r10 -#define rWORD4 r11 -#define rFEFE r8 /* constant 0xfefefefefefefeff (-0x0101010101010101) */ -#define r7F7F r9 /* constant 0x7f7f7f7f7f7f7f7f */ -#define rNEG r10 /* ~(word in s1 | 0x7f7f7f7f7f7f7f7f) */ -#define rBITDIF r11 /* bits that differ in s1 & s2 words */ -#define rTMP r12 - - dcbt 0,rSTR1 - or rTMP, rSTR2, rSTR1 - lis r7F7F, 0x7f7f - dcbt 0,rSTR2 - clrldi. rTMP, rTMP, 61 - cmpldi cr1, rN, 0 - lis rFEFE, -0x101 - bne L(unaligned) -/* We are doubleword aligned so set up for two loops. first a double word - loop, then fall into the byte loop if any residual. */ - srdi. rTMP, rN, 3 - clrldi rN, rN, 61 - addi rFEFE, rFEFE, -0x101 - addi r7F7F, r7F7F, 0x7f7f - cmpldi cr1, rN, 0 - beq L(unaligned) - - mtctr rTMP /* Power4 wants mtctr 1st in dispatch group. */ - ld rWORD1, 0(rSTR1) - ld rWORD2, 0(rSTR2) - sldi rTMP, rFEFE, 32 - insrdi r7F7F, r7F7F, 32, 0 - add rFEFE, rFEFE, rTMP - b L(g1) - -L(g0): - ldu rWORD1, 8(rSTR1) - bne- cr1, L(different) - ldu rWORD2, 8(rSTR2) -L(g1): add rTMP, rFEFE, rWORD1 - nor rNEG, r7F7F, rWORD1 - bdz L(tail) - and. rTMP, rTMP, rNEG - cmpd cr1, rWORD1, rWORD2 - beq+ L(g0) - -/* OK. We've hit the end of the string. We need to be careful that - we don't compare two strings as different because of gunk beyond - the end of the strings... */ - -#ifdef __LITTLE_ENDIAN__ -L(endstring): - addi rTMP2, rTMP, -1 - beq cr1, L(equal) - andc rTMP2, rTMP2, rTMP - rldimi rTMP2, rTMP2, 1, 0 - and rWORD2, rWORD2, rTMP2 /* Mask off gunk. */ - and rWORD1, rWORD1, rTMP2 - cmpd cr1, rWORD1, rWORD2 - beq cr1, L(equal) - xor rBITDIF, rWORD1, rWORD2 /* rBITDIF has bits that differ. */ - neg rNEG, rBITDIF - and rNEG, rNEG, rBITDIF /* rNEG has LS bit that differs. */ - cntlzd rNEG, rNEG /* bitcount of the bit. */ - andi. rNEG, rNEG, 56 /* bitcount to LS byte that differs. */ - sld rWORD1, rWORD1, rNEG /* shift left to clear MS bytes. */ - sld rWORD2, rWORD2, rNEG - xor. rBITDIF, rWORD1, rWORD2 - sub rRTN, rWORD1, rWORD2 - blt- L(highbit) - sradi rRTN, rRTN, 63 /* must return an int. */ - ori rRTN, rRTN, 1 - blr -L(equal): - li rRTN, 0 - blr - -L(different): - ld rWORD1, -8(rSTR1) - xor rBITDIF, rWORD1, rWORD2 /* rBITDIF has bits that differ. */ - neg rNEG, rBITDIF - and rNEG, rNEG, rBITDIF /* rNEG has LS bit that differs. */ - cntlzd rNEG, rNEG /* bitcount of the bit. */ - andi. rNEG, rNEG, 56 /* bitcount to LS byte that differs. */ - sld rWORD1, rWORD1, rNEG /* shift left to clear MS bytes. */ - sld rWORD2, rWORD2, rNEG - xor. rBITDIF, rWORD1, rWORD2 - sub rRTN, rWORD1, rWORD2 - blt- L(highbit) - sradi rRTN, rRTN, 63 - ori rRTN, rRTN, 1 - blr -L(highbit): - sradi rRTN, rWORD2, 63 - ori rRTN, rRTN, 1 - blr - -#else -L(endstring): - and rTMP, r7F7F, rWORD1 - beq cr1, L(equal) - add rTMP, rTMP, r7F7F - xor. rBITDIF, rWORD1, rWORD2 - andc rNEG, rNEG, rTMP - blt- L(highbit) - cntlzd rBITDIF, rBITDIF - cntlzd rNEG, rNEG - addi rNEG, rNEG, 7 - cmpd cr1, rNEG, rBITDIF - sub rRTN, rWORD1, rWORD2 - blt- cr1, L(equal) - sradi rRTN, rRTN, 63 /* must return an int. */ - ori rRTN, rRTN, 1 - blr -L(equal): - li rRTN, 0 - blr - -L(different): - ld rWORD1, -8(rSTR1) - xor. rBITDIF, rWORD1, rWORD2 - sub rRTN, rWORD1, rWORD2 - blt- L(highbit) - sradi rRTN, rRTN, 63 - ori rRTN, rRTN, 1 - blr -L(highbit): - sradi rRTN, rWORD2, 63 - ori rRTN, rRTN, 1 - blr -#endif - -/* Oh well. In this case, we just do a byte-by-byte comparison. */ - .align 4 -L(tail): - and. rTMP, rTMP, rNEG - cmpd cr1, rWORD1, rWORD2 - bne- L(endstring) - addi rSTR1, rSTR1, 8 - bne- cr1, L(different) - addi rSTR2, rSTR2, 8 - cmpldi cr1, rN, 0 -L(unaligned): - mtctr rN /* Power4 wants mtctr 1st in dispatch group */ - ble cr1, L(ux) -L(uz): - lbz rWORD1, 0(rSTR1) - lbz rWORD2, 0(rSTR2) - .align 4 -L(u1): - cmpdi cr1, rWORD1, 0 - bdz L(u4) - cmpd rWORD1, rWORD2 - beq- cr1, L(u4) - bne- L(u4) - lbzu rWORD3, 1(rSTR1) - lbzu rWORD4, 1(rSTR2) - cmpdi cr1, rWORD3, 0 - bdz L(u3) - cmpd rWORD3, rWORD4 - beq- cr1, L(u3) - bne- L(u3) - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) - cmpdi cr1, rWORD1, 0 - bdz L(u4) - cmpd rWORD1, rWORD2 - beq- cr1, L(u4) - bne- L(u4) - lbzu rWORD3, 1(rSTR1) - lbzu rWORD4, 1(rSTR2) - cmpdi cr1, rWORD3, 0 - bdz L(u3) - cmpd rWORD3, rWORD4 - beq- cr1, L(u3) - bne- L(u3) - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) - b L(u1) - -L(u3): sub rRTN, rWORD3, rWORD4 - blr -L(u4): sub rRTN, rWORD1, rWORD2 - blr -L(ux): - li rRTN, 0 - blr -END (STRNCMP) -libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/powerpc/powerpc64/power5+/Implies b/sysdeps/powerpc/powerpc64/power5+/Implies deleted file mode 100644 index 565bc94471..0000000000 --- a/sysdeps/powerpc/powerpc64/power5+/Implies +++ /dev/null @@ -1,4 +0,0 @@ -powerpc/power5+/fpu -powerpc/power5+ -powerpc/powerpc64/power5/fpu -powerpc/powerpc64/power5 diff --git a/sysdeps/powerpc/powerpc64/power5+/fpu/Implies b/sysdeps/powerpc/powerpc64/power5+/fpu/Implies deleted file mode 100644 index f00c50fb49..0000000000 --- a/sysdeps/powerpc/powerpc64/power5+/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power5/fpu diff --git a/sysdeps/powerpc/powerpc64/power5+/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc64/power5+/fpu/multiarch/Implies deleted file mode 100644 index c0e67848e2..0000000000 --- a/sysdeps/powerpc/powerpc64/power5+/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power5/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc64/power5+/fpu/s_ceil.S b/sysdeps/powerpc/powerpc64/power5+/fpu/s_ceil.S deleted file mode 100644 index 39b7ee78e5..0000000000 --- a/sysdeps/powerpc/powerpc64/power5+/fpu/s_ceil.S +++ /dev/null @@ -1,37 +0,0 @@ -/* ceil function. PowerPC64/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .machine "power5" -EALIGN (__ceil, 4, 0) - CALL_MCOUNT 0 - frip fp1, fp1 - blr - END (__ceil) - -weak_alias (__ceil, ceil) - -#ifdef NO_LONG_DOUBLE -weak_alias (__ceil, ceill) -strong_alias (__ceil, __ceill) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __ceil, ceill, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc64/power5+/fpu/s_ceilf.S b/sysdeps/powerpc/powerpc64/power5+/fpu/s_ceilf.S deleted file mode 100644 index d1c6f26d6d..0000000000 --- a/sysdeps/powerpc/powerpc64/power5+/fpu/s_ceilf.S +++ /dev/null @@ -1,30 +0,0 @@ -/* ceilf function. PowerPC64/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .machine "power5" -EALIGN (__ceilf, 4, 0) - CALL_MCOUNT 0 - frip fp1, fp1 /* The rounding instructions are double. */ - frsp fp1, fp1 /* But we need to set ooverflow for float. */ - blr - END (__ceilf) - -weak_alias (__ceilf, ceilf) - diff --git a/sysdeps/powerpc/powerpc64/power5+/fpu/s_floor.S b/sysdeps/powerpc/powerpc64/power5+/fpu/s_floor.S deleted file mode 100644 index 6411f15633..0000000000 --- a/sysdeps/powerpc/powerpc64/power5+/fpu/s_floor.S +++ /dev/null @@ -1,37 +0,0 @@ -/* floor function. PowerPC64/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .machine "power5" -EALIGN (__floor, 4, 0) - CALL_MCOUNT 0 - frim fp1, fp1 - blr - END (__floor) - -weak_alias (__floor, floor) - -#ifdef NO_LONG_DOUBLE -weak_alias (__floor, floorl) -strong_alias (__floor, __floorl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __floor, floorl, GLIBC_2_0) -#endif diff --git a/sysdeps/powerpc/powerpc64/power5+/fpu/s_floorf.S b/sysdeps/powerpc/powerpc64/power5+/fpu/s_floorf.S deleted file mode 100644 index 26c3b2594b..0000000000 --- a/sysdeps/powerpc/powerpc64/power5+/fpu/s_floorf.S +++ /dev/null @@ -1,30 +0,0 @@ -/* floorf function. PowerPC64/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .machine "power5" -EALIGN (__floorf, 4, 0) - CALL_MCOUNT 0 - frim fp1, fp1 /* The rounding instructions are double. */ - frsp fp1, fp1 /* But we need to set ooverflow for float. */ - blr - END (__floorf) - -weak_alias (__floorf, floorf) - diff --git a/sysdeps/powerpc/powerpc64/power5+/fpu/s_llround.S b/sysdeps/powerpc/powerpc64/power5+/fpu/s_llround.S deleted file mode 100644 index 909714b449..0000000000 --- a/sysdeps/powerpc/powerpc64/power5+/fpu/s_llround.S +++ /dev/null @@ -1,58 +0,0 @@ -/* llround function. POWER5+, PowerPC64 version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* long long [r3] llround (float x [fp1]) - IEEE 1003.1 llround function. IEEE specifies "round to the nearest - integer value, rounding halfway cases away from zero, regardless of - the current rounding mode." However PowerPC Architecture defines - "round to Nearest" as "Choose the best approximation. In case of a - tie, choose the one that is even (least significant bit o).". - So we pre-round using the V2.02 Floating Round to Integer Nearest - instruction before we use Floating Convert to Integer Word with - round to zero instruction. */ - - .machine "power5" -EALIGN (__llround, 4, 0) - CALL_MCOUNT 0 - frin fp2, fp1 /* Round to nearest +-0.5. */ - fctidz fp3, fp2 /* Convert To Integer DW round toward 0. */ - stfd fp3, -16(r1) - nop /* Insure the following load is in a different dispatch group */ - nop /* to avoid pipe stall on POWER4&5. */ - nop - ld r3, -16(r1) - blr - END (__llround) - -strong_alias (__llround, __lround) -weak_alias (__llround, llround) -weak_alias (__lround, lround) - -#ifdef NO_LONG_DOUBLE -weak_alias (__llround, llroundl) -strong_alias (__llround, __llroundl) -weak_alias (__lround, lroundl) -strong_alias (__lround, __lroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llround, llroundl, GLIBC_2_1) -compat_symbol (libm, __lround, lroundl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/power5+/fpu/s_round.S b/sysdeps/powerpc/powerpc64/power5+/fpu/s_round.S deleted file mode 100644 index dc46d20f4f..0000000000 --- a/sysdeps/powerpc/powerpc64/power5+/fpu/s_round.S +++ /dev/null @@ -1,37 +0,0 @@ -/* round function. PowerPC64/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .machine "power5" -EALIGN (__round, 4, 0) - CALL_MCOUNT 0 - frin fp1, fp1 - blr - END (__round) - -weak_alias (__round, round) - -#ifdef NO_LONG_DOUBLE -weak_alias (__round, roundl) -strong_alias (__round, __roundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __round, roundl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/power5+/fpu/s_roundf.S b/sysdeps/powerpc/powerpc64/power5+/fpu/s_roundf.S deleted file mode 100644 index 0a587843ad..0000000000 --- a/sysdeps/powerpc/powerpc64/power5+/fpu/s_roundf.S +++ /dev/null @@ -1,30 +0,0 @@ -/* roundf function. PowerPC64/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .machine "power5" -EALIGN (__roundf, 4, 0) - CALL_MCOUNT 0 - frin fp1, fp1 /* The rounding instructions are double. */ - frsp fp1, fp1 /* But we need to set ooverflow for float. */ - blr - END (__roundf) - -weak_alias (__roundf, roundf) - diff --git a/sysdeps/powerpc/powerpc64/power5+/fpu/s_trunc.S b/sysdeps/powerpc/powerpc64/power5+/fpu/s_trunc.S deleted file mode 100644 index 7f8290e408..0000000000 --- a/sysdeps/powerpc/powerpc64/power5+/fpu/s_trunc.S +++ /dev/null @@ -1,37 +0,0 @@ -/* trunc function. PowerPC64/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .machine "power5" -EALIGN (__trunc, 4, 0) - CALL_MCOUNT 0 - friz fp1, fp1 - blr - END (__trunc) - -weak_alias (__trunc, trunc) - -#ifdef NO_LONG_DOUBLE -weak_alias (__trunc, truncl) -strong_alias (__trunc, __truncl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __trunc, truncl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/power5+/fpu/s_truncf.S b/sysdeps/powerpc/powerpc64/power5+/fpu/s_truncf.S deleted file mode 100644 index 07f5d33127..0000000000 --- a/sysdeps/powerpc/powerpc64/power5+/fpu/s_truncf.S +++ /dev/null @@ -1,30 +0,0 @@ -/* truncf function. PowerPC64/power5+ version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .machine "power5" -EALIGN (__truncf, 4, 0) - CALL_MCOUNT 0 - friz fp1, fp1 /* The rounding instructions are double. */ - frsp fp1, fp1 /* But we need to set ooverflow for float. */ - blr - END (__truncf) - -weak_alias (__truncf, truncf) - diff --git a/sysdeps/powerpc/powerpc64/power5+/multiarch/Implies b/sysdeps/powerpc/powerpc64/power5+/multiarch/Implies deleted file mode 100644 index 0851b19fa2..0000000000 --- a/sysdeps/powerpc/powerpc64/power5+/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power5/multiarch diff --git a/sysdeps/powerpc/powerpc64/power5/Implies b/sysdeps/powerpc/powerpc64/power5/Implies deleted file mode 100644 index bedb20b65c..0000000000 --- a/sysdeps/powerpc/powerpc64/power5/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc64/power4/fpu -powerpc/powerpc64/power4 diff --git a/sysdeps/powerpc/powerpc64/power5/fpu/Implies b/sysdeps/powerpc/powerpc64/power5/fpu/Implies deleted file mode 100644 index 6b8c23efa6..0000000000 --- a/sysdeps/powerpc/powerpc64/power5/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power4/fpu/ diff --git a/sysdeps/powerpc/powerpc64/power5/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc64/power5/fpu/multiarch/Implies deleted file mode 100644 index 3740d050a6..0000000000 --- a/sysdeps/powerpc/powerpc64/power5/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power4/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc64/power5/fpu/s_isnan.S b/sysdeps/powerpc/powerpc64/power5/fpu/s_isnan.S deleted file mode 100644 index d6a829ea37..0000000000 --- a/sysdeps/powerpc/powerpc64/power5/fpu/s_isnan.S +++ /dev/null @@ -1,60 +0,0 @@ -/* isnan(). PowerPC64 version. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __isnan(x) */ - .machine power5 -EALIGN (__isnan, 4, 0) - CALL_MCOUNT 0 - stfd fp1,-8(r1) /* copy FPR to GPR */ - lis r0,0x7ff0 - nop /* insure the following is in a different */ - nop /* dispatch group */ - ld r4,-8(r1) - sldi r0,r0,32 /* const long r0 0x7ff00000 00000000 */ - clrldi r4,r4,1 /* x = fabs(x) */ - cmpd cr7,r4,r0 /* if (fabs(x) <= inf) */ - li r3,0 /* then return 0 */ - blelr+ cr7 - li r3,1 /* else return 1 */ - blr - END (__isnan) - -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__isnan, __isnanf) -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -# endif -#endif - diff --git a/sysdeps/powerpc/powerpc64/power5/multiarch/Implies b/sysdeps/powerpc/powerpc64/power5/multiarch/Implies deleted file mode 100644 index 9a3cbb0938..0000000000 --- a/sysdeps/powerpc/powerpc64/power5/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power4/multiarch diff --git a/sysdeps/powerpc/powerpc64/power6/Implies b/sysdeps/powerpc/powerpc64/power6/Implies deleted file mode 100644 index 4c782d4122..0000000000 --- a/sysdeps/powerpc/powerpc64/power6/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc64/power5+/fpu -powerpc/powerpc64/power5+ diff --git a/sysdeps/powerpc/powerpc64/power6/fpu/Implies b/sysdeps/powerpc/powerpc64/power6/fpu/Implies deleted file mode 100644 index f09854edb6..0000000000 --- a/sysdeps/powerpc/powerpc64/power6/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power5+/fpu diff --git a/sysdeps/powerpc/powerpc64/power6/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc64/power6/fpu/multiarch/Implies deleted file mode 100644 index fca8a4ef0f..0000000000 --- a/sysdeps/powerpc/powerpc64/power6/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power5+/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc64/power6/fpu/s_copysign.S b/sysdeps/powerpc/powerpc64/power6/fpu/s_copysign.S deleted file mode 100644 index ec36d1be5b..0000000000 --- a/sysdeps/powerpc/powerpc64/power6/fpu/s_copysign.S +++ /dev/null @@ -1,58 +0,0 @@ -/* copysign(). PowerPC64/POWER6 version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* double [f1] copysign (double [f1] x, double [f2] y); - copysign(x,y) returns a value with the magnitude of x and - with the sign bit of y. */ - - .section ".text" - .type __copysign, @function - .machine power6 -EALIGN (__copysign, 4, 0) - CALL_MCOUNT 0 - fcpsgn fp1,fp2,fp1 - blr -END (__copysign) - -hidden_def (__copysign) -weak_alias (__copysign, copysign) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__copysign, __copysignf) -hidden_def (__copysignf) -weak_alias (__copysignf, copysignf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__copysign, __copysignl) -weak_alias (__copysign, copysignl) -#endif - -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT (libm, GLIBC_2_0) -compat_symbol (libm, copysign, copysignl, GLIBC_2_0) -# endif -#else -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, copysign, copysignl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc64/power6/fpu/s_copysignf.S b/sysdeps/powerpc/powerpc64/power6/fpu/s_copysignf.S deleted file mode 100644 index d4aa702d07..0000000000 --- a/sysdeps/powerpc/powerpc64/power6/fpu/s_copysignf.S +++ /dev/null @@ -1 +0,0 @@ -/* This function uses the same code as s_copysign.S. */ diff --git a/sysdeps/powerpc/powerpc64/power6/fpu/s_isnan.S b/sysdeps/powerpc/powerpc64/power6/fpu/s_isnan.S deleted file mode 100644 index 85187b45f3..0000000000 --- a/sysdeps/powerpc/powerpc64/power6/fpu/s_isnan.S +++ /dev/null @@ -1,59 +0,0 @@ -/* isnan(). PowerPC64 version. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __isnan(x) */ - .machine power6 -EALIGN (__isnan, 4, 0) - CALL_MCOUNT 0 - stfd fp1,-8(r1) /* copy FPR to GPR */ - ori r1,r1,0 - ld r4,-8(r1) - lis r0,0x7ff0 - sldi r0,r0,32 /* const long r0 0x7ff00000 00000000 */ - clrldi r4,r4,1 /* x = fabs(x) */ - cmpd cr7,r4,r0 /* if (fabs(x) <= inf) */ - li r3,0 /* then return 0 */ - blelr+ cr7 - li r3,1 /* else return 1 */ - blr - END (__isnan) - -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__isnan, __isnanf) -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -# endif -#endif - diff --git a/sysdeps/powerpc/powerpc64/power6/memcpy.S b/sysdeps/powerpc/powerpc64/power6/memcpy.S deleted file mode 100644 index 1f7294b8ed..0000000000 --- a/sysdeps/powerpc/powerpc64/power6/memcpy.S +++ /dev/null @@ -1,1499 +0,0 @@ -/* Optimized memcpy implementation for PowerPC64. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); - Returns 'dst'. - - Memcpy handles short copies (< 32-bytes) using a binary move blocks - (no loops) of lwz/stw. The tail (remaining 1-3) bytes is handled - with the appropriate combination of byte and halfword load/stores. - There is minimal effort to optimize the alignment of short moves. - The 64-bit implementations of POWER3 and POWER4 do a reasonable job - of handling unaligned load/stores that do not cross 32-byte boundaries. - - Longer moves (>= 32-bytes) justify the effort to get at least the - destination doubleword (8-byte) aligned. Further optimization is - possible when both source and destination are doubleword aligned. - Each case has a optimized unrolled loop. - - For POWER6 unaligned loads will take a 20+ cycle hiccup for any - L1 cache miss that crosses a 32- or 128-byte boundary. Store - is more forgiving and does not take a hiccup until page or - segment boundaries. So we require doubleword alignment for - the source but may take a risk and only require word alignment - for the destination. */ - -#ifndef MEMCPY -# define MEMCPY memcpy -#endif - .machine "power6" -EALIGN (MEMCPY, 7, 0) - CALL_MCOUNT 3 - - cmpldi cr1,5,31 - neg 0,3 - std 3,-16(1) - std 31,-8(1) - andi. 11,3,7 /* check alignment of dst. */ - clrldi 0,0,61 /* Number of bytes until the 1st doubleword of dst. */ - clrldi 10,4,61 /* check alignment of src. */ - cmpldi cr6,5,8 - ble- cr1,.L2 /* If move < 32 bytes use short move code. */ - mtcrf 0x01,0 - cmpld cr6,10,11 - srdi 9,5,3 /* Number of full double words remaining. */ - beq .L0 - - subf 5,0,5 - /* Move 0-7 bytes as needed to get the destination doubleword aligned. - Duplicate some code to maximize fall-through and minimize agen delays. */ -1: bf 31,2f - lbz 6,0(4) - stb 6,0(3) - bf 30,5f - lhz 6,1(4) - sth 6,1(3) - bf 29,0f - lwz 6,3(4) - stw 6,3(3) - b 0f -5: - bf 29,0f - lwz 6,1(4) - stw 6,1(3) - b 0f - -2: bf 30,4f - lhz 6,0(4) - sth 6,0(3) - bf 29,0f - lwz 6,2(4) - stw 6,2(3) - b 0f - -4: bf 29,0f - lwz 6,0(4) - stw 6,0(3) -0: -/* Add the number of bytes until the 1st doubleword of dst to src and dst. */ - add 4,4,0 - add 3,3,0 - - clrldi 10,4,61 /* check alignment of src again. */ - srdi 9,5,3 /* Number of full double words remaining. */ - - /* Copy doublewords from source to destination, assuming the - destination is aligned on a doubleword boundary. - - At this point we know there are at least 25 bytes left (32-7) to copy. - The next step is to determine if the source is also doubleword aligned. - If not branch to the unaligned move code at .L6. which uses - a load, shift, store strategy. - - Otherwise source and destination are doubleword aligned, and we can - the optimized doubleword copy loop. */ - .align 4 -.L0: - clrldi 11,5,61 - andi. 0,5,0x78 - srdi 12,5,7 /* Number of 128-byte blocks to move. */ - cmpldi cr1,11,0 /* If the tail is 0 bytes */ - bne- cr6,.L6 /* If source is not DW aligned. */ - - /* Move doublewords where destination and source are DW aligned. - Use a unrolled loop to copy 16 doublewords (128-bytes) per iteration. - If the copy is not an exact multiple of 128 bytes, 1-15 - doublewords are copied as needed to set up the main loop. After - the main loop exits there may be a tail of 1-7 bytes. These byte - are copied a word/halfword/byte at a time as needed to preserve - alignment. - - For POWER6 the L1 is store-through and the L2 is store-in. The - L2 is clocked at half CPU clock so we can store 16 bytes every - other cycle. POWER6 also has a load/store bypass so we can do - load, load, store, store every 2 cycles. - - The following code is sensitive to cache line alignment. Do not - make any change with out first making sure they don't result in - splitting ld/std pairs across a cache line. */ - - mtcrf 0x02,5 - mtcrf 0x01,5 - cmpldi cr5,12,1 - beq L(das_loop) - - bf 25,4f - .align 3 - ld 6,0(4) - ld 7,8(4) - mr 11,4 - mr 10,3 - std 6,0(3) - std 7,8(3) - ld 6,16(4) - ld 7,24(4) - std 6,16(3) - std 7,24(3) - ld 6,0+32(4) - ld 7,8+32(4) - addi 4,4,64 - addi 3,3,64 - std 6,0+32(10) - std 7,8+32(10) - ld 6,16+32(11) - ld 7,24+32(11) - std 6,16+32(10) - std 7,24+32(10) -4: - mr 10,3 - bf 26,2f - ld 6,0(4) - ld 7,8(4) - mr 11,4 - nop - std 6,0(3) - std 7,8(3) - ld 6,16(4) - ld 7,24(4) - addi 4,4,32 - std 6,16(3) - std 7,24(3) - addi 3,3,32 -6: - nop - bf 27,5f - ld 6,0+32(11) - ld 7,8+32(11) - addi 4,4,16 - addi 3,3,16 - std 6,0+32(10) - std 7,8+32(10) - bf 28,L(das_loop_s) - ld 0,16+32(11) - addi 4,4,8 - addi 3,3,8 - std 0,16+32(10) - blt cr5,L(das_tail) - b L(das_loop) - .align 3 -5: - nop - bf 28,L(das_loop_s) - ld 6,32(11) - addi 4,4,8 - addi 3,3,8 - std 6,32(10) - blt cr5,L(das_tail) - b L(das_loop) - .align 3 -2: - mr 11,4 - bf 27,1f - ld 6,0(4) - ld 7,8(4) - addi 4,4,16 - addi 3,3,16 - std 6,0(10) - std 7,8(10) - bf 28,L(das_loop_s) - ld 0,16(11) - addi 4,11,24 - addi 3,10,24 - std 0,16(10) - blt cr5,L(das_tail) - b L(das_loop) - .align 3 -1: - nop - bf 28,L(das_loop_s) - ld 6,0(4) - addi 4,4,8 - addi 3,3,8 - std 6,0(10) -L(das_loop_s): - nop - blt cr5,L(das_tail) - .align 4 -L(das_loop): - ld 6,0(4) - ld 7,8(4) - mr 10,3 - mr 11,4 - std 6,0(3) - std 7,8(3) - addi 12,12,-1 - nop - ld 8,16(4) - ld 0,24(4) - std 8,16(3) - std 0,24(3) - - ld 6,0+32(4) - ld 7,8+32(4) - std 6,0+32(3) - std 7,8+32(3) - ld 8,16+32(4) - ld 0,24+32(4) - std 8,16+32(3) - std 0,24+32(3) - - ld 6,0+64(11) - ld 7,8+64(11) - std 6,0+64(10) - std 7,8+64(10) - ld 8,16+64(11) - ld 0,24+64(11) - std 8,16+64(10) - std 0,24+64(10) - - ld 6,0+96(11) - ld 7,8+96(11) - addi 4,4,128 - addi 3,3,128 - std 6,0+96(10) - std 7,8+96(10) - ld 8,16+96(11) - ld 0,24+96(11) - std 8,16+96(10) - std 0,24+96(10) - ble cr5,L(das_loop_e) - - mtctr 12 - .align 4 -L(das_loop2): - ld 6,0(4) - ld 7,8(4) - mr 10,3 - mr 11,4 - std 6,0(3) - std 7,8(3) - ld 8,16(4) - ld 0,24(4) - std 8,16(3) - std 0,24(3) - - ld 6,0+32(4) - ld 7,8+32(4) - std 6,0+32(3) - std 7,8+32(3) - ld 8,16+32(4) - ld 0,24+32(4) - std 8,16+32(3) - std 0,24+32(3) - - ld 6,0+64(11) - ld 7,8+64(11) - std 6,0+64(10) - std 7,8+64(10) - ld 8,16+64(11) - ld 0,24+64(11) - std 8,16+64(10) - std 0,24+64(10) - - ld 6,0+96(11) - ld 7,8+96(11) - addi 4,4,128 - addi 3,3,128 - std 6,0+96(10) - std 7,8+96(10) - ld 8,16+96(11) - ld 0,24+96(11) - std 8,16+96(10) - std 0,24+96(10) - bdnz L(das_loop2) -L(das_loop_e): -/* Check of a 1-7 byte tail, return if none. */ - bne cr1,L(das_tail2) -/* Return original dst pointer. */ - ld 3,-16(1) - blr - .align 4 -L(das_tail): - beq cr1,0f - -L(das_tail2): -/* At this point we have a tail of 0-7 bytes and we know that the - destination is double word aligned. */ -4: bf 29,2f - lwz 6,0(4) - stw 6,0(3) - bf 30,5f - lhz 6,4(4) - sth 6,4(3) - bf 31,0f - lbz 6,6(4) - stb 6,6(3) - b 0f -5: bf 31,0f - lbz 6,4(4) - stb 6,4(3) - b 0f - -2: bf 30,1f - lhz 6,0(4) - sth 6,0(3) - bf 31,0f - lbz 6,2(4) - stb 6,2(3) - b 0f - -1: bf 31,0f - lbz 6,0(4) - stb 6,0(3) -0: - /* Return original dst pointer. */ - ld 3,-16(1) - blr - -/* Copy up to 31 bytes. This divided into two cases 0-8 bytes and 9-31 - bytes. Each case is handled without loops, using binary (1,2,4,8) - tests. - - In the short (0-8 byte) case no attempt is made to force alignment - of either source or destination. The hardware will handle the - unaligned load/stores with small delays for crossing 32- 128-byte, - and 4096-byte boundaries. Since these short moves are unlikely to be - unaligned or cross these boundaries, the overhead to force - alignment is not justified. - - The longer (9-31 byte) move is more likely to cross 32- or 128-byte - boundaries. Since only loads are sensitive to the 32-/128-byte - boundaries it is more important to align the source then the - destination. If the source is not already word aligned, we first - move 1-3 bytes as needed. Since we are only word aligned we don't - use double word load/stores to insure that all loads are aligned. - While the destination and stores may still be unaligned, this - is only an issue for page (4096 byte boundary) crossing, which - should be rare for these short moves. The hardware handles this - case automatically with a small (~20 cycle) delay. */ - .align 4 -.L2: - mtcrf 0x01,5 - neg 8,4 - clrrdi 11,4,2 - andi. 0,8,3 - ble cr6,.LE8 /* Handle moves of 0-8 bytes. */ -/* At least 9 bytes left. Get the source word aligned. */ - cmpldi cr1,5,16 - mr 10,5 - mr 12,4 - cmpldi cr6,0,2 - beq L(dus_tail) /* If the source is already word aligned skip this. */ -/* Copy 1-3 bytes to get source address word aligned. */ - lwz 6,0(11) - subf 10,0,5 - add 12,4,0 - blt cr6,5f - srdi 7,6,16 - bgt cr6,3f -#ifdef __LITTLE_ENDIAN__ - sth 7,0(3) -#else - sth 6,0(3) -#endif - b 7f - .align 4 -3: -#ifdef __LITTLE_ENDIAN__ - rotlwi 6,6,24 - stb 6,0(3) - sth 7,1(3) -#else - stb 7,0(3) - sth 6,1(3) -#endif - b 7f - .align 4 -5: -#ifdef __LITTLE_ENDIAN__ - rotlwi 6,6,8 -#endif - stb 6,0(3) -7: - cmpldi cr1,10,16 - add 3,3,0 - mtcrf 0x01,10 - .align 4 -L(dus_tail): -/* At least 6 bytes left and the source is word aligned. This allows - some speculative loads up front. */ -/* We need to special case the fall-through because the biggest delays - are due to address computation not being ready in time for the - AGEN. */ - lwz 6,0(12) - lwz 7,4(12) - blt cr1,L(dus_tail8) - cmpldi cr0,10,24 -L(dus_tail16): /* Move 16 bytes. */ - stw 6,0(3) - stw 7,4(3) - lwz 6,8(12) - lwz 7,12(12) - stw 6,8(3) - stw 7,12(3) -/* Move 8 bytes more. */ - bf 28,L(dus_tail16p8) - cmpldi cr1,10,28 - lwz 6,16(12) - lwz 7,20(12) - stw 6,16(3) - stw 7,20(3) -/* Move 4 bytes more. */ - bf 29,L(dus_tail16p4) - lwz 6,24(12) - stw 6,24(3) - addi 12,12,28 - addi 3,3,28 - bgt cr1,L(dus_tail2) - /* exactly 28 bytes. Return original dst pointer and exit. */ - ld 3,-16(1) - blr - .align 4 -L(dus_tail16p8): /* less than 8 bytes left. */ - beq cr1,L(dus_tailX) /* exactly 16 bytes, early exit. */ - cmpldi cr1,10,20 - bf 29,L(dus_tail16p2) -/* Move 4 bytes more. */ - lwz 6,16(12) - stw 6,16(3) - addi 12,12,20 - addi 3,3,20 - bgt cr1,L(dus_tail2) - /* exactly 20 bytes. Return original dst pointer and exit. */ - ld 3,-16(1) - blr - .align 4 -L(dus_tail16p4): /* less than 4 bytes left. */ - addi 12,12,24 - addi 3,3,24 - bgt cr0,L(dus_tail2) - /* exactly 24 bytes. Return original dst pointer and exit. */ - ld 3,-16(1) - blr - .align 4 -L(dus_tail16p2): /* 16 bytes moved, less than 4 bytes left. */ - addi 12,12,16 - addi 3,3,16 - b L(dus_tail2) - - .align 4 -L(dus_tail8): /* Move 8 bytes. */ -/* r6, r7 already loaded speculatively. */ - cmpldi cr1,10,8 - cmpldi cr0,10,12 - bf 28,L(dus_tail4) - .align 2 - stw 6,0(3) - stw 7,4(3) -/* Move 4 bytes more. */ - bf 29,L(dus_tail8p4) - lwz 6,8(12) - stw 6,8(3) - addi 12,12,12 - addi 3,3,12 - bgt cr0,L(dus_tail2) - /* exactly 12 bytes. Return original dst pointer and exit. */ - ld 3,-16(1) - blr - .align 4 -L(dus_tail8p4): /* less than 4 bytes left. */ - addi 12,12,8 - addi 3,3,8 - bgt cr1,L(dus_tail2) - /* exactly 8 bytes. Return original dst pointer and exit. */ - ld 3,-16(1) - blr - - .align 4 -L(dus_tail4): /* Move 4 bytes. */ -/* r6 already loaded speculatively. If we are here we know there is - more than 4 bytes left. So there is no need to test. */ - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -L(dus_tail2): /* Move 2-3 bytes. */ - bf 30,L(dus_tail1) - lhz 6,0(12) - sth 6,0(3) - bf 31,L(dus_tailX) - lbz 7,2(12) - stb 7,2(3) - ld 3,-16(1) - blr -L(dus_tail1): /* Move 1 byte. */ - bf 31,L(dus_tailX) - lbz 6,0(12) - stb 6,0(3) -L(dus_tailX): - /* Return original dst pointer. */ - ld 3,-16(1) - blr - -/* Special case to copy 0-8 bytes. */ - .align 4 -.LE8: - mr 12,4 - bne cr6,L(dus_4) -/* Exactly 8 bytes. We may cross a 32-/128-byte boundary and take a ~20 - cycle delay. This case should be rare and any attempt to avoid this - would take most of 20 cycles any way. */ - ld 6,0(4) - std 6,0(3) - /* Return original dst pointer. */ - ld 3,-16(1) - blr - .align 4 -L(dus_4): - bf 29,L(dus_tail2) - lwz 6,0(4) - stw 6,0(3) - bf 30,L(dus_5) - lhz 7,4(4) - sth 7,4(3) - bf 31,L(dus_0) - lbz 8,6(4) - stb 8,6(3) - ld 3,-16(1) - blr - .align 4 -L(dus_5): - bf 31,L(dus_0) - lbz 6,4(4) - stb 6,4(3) -L(dus_0): - /* Return original dst pointer. */ - ld 3,-16(1) - blr - - .align 4 -.L6: - cfi_offset(31,-8) - mr 12,4 - mr 31,5 - /* Copy doublewords where the destination is aligned but the source is - not. Use aligned doubleword loads from the source, shifted to realign - the data, to allow aligned destination stores. */ - addi 11,9,-1 /* loop DW count is one less than total */ - subf 5,10,12 /* Move source addr to previous full double word. */ - cmpldi cr5, 10, 2 - cmpldi cr0, 10, 4 - mr 4,3 - srdi 8,11,2 /* calculate the 32 byte loop count */ - ld 6,0(5) /* pre load 1st full doubleword. */ - mtcrf 0x01,11 - cmpldi cr6,9,4 - mtctr 8 - ld 7,8(5) /* pre load 2nd full doubleword. */ - bge cr0, L(du4_do) - blt cr5, L(du1_do) - beq cr5, L(du2_do) - b L(du3_do) - - .align 4 -L(du1_do): - bf 30,L(du1_1dw) - - /* there are at least two DWs to copy */ - /* FIXME: can combine last shift and "or" into "rldimi" */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 8 - sldi 8,7, 64-8 -#else - sldi 0,6, 8 - srdi 8,7, 64-8 -#endif - or 0,0,8 - ld 6,16(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 8 - sldi 8,6, 64-8 -#else - sldi 0,7, 8 - srdi 8,6, 64-8 -#endif - or 0,0,8 - ld 7,24(5) - std 0,8(4) - addi 4,4,16 - addi 5,5,32 - blt cr6,L(du1_fini) /* if total DWs = 3, then bypass loop */ - bf 31,L(du1_loop) - /* there is a third DW to copy */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 8 - sldi 8,7, 64-8 -#else - sldi 0,6, 8 - srdi 8,7, 64-8 -#endif - or 0,0,8 - std 0,0(4) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - addi 4,4,8 - beq cr6,L(du1_fini) /* if total DWs = 4, then bypass loop */ - b L(du1_loop) - .align 4 -L(du1_1dw): -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 8 - sldi 8,7, 64-8 -#else - sldi 0,6, 8 - srdi 8,7, 64-8 -#endif - addi 5,5,16 - or 0,0,8 - bf 31,L(du1_loop) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - std 0,0(4) - addi 4,4,8 - .align 4 -/* copy 32 bytes at a time */ -L(du1_loop): -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 8 - sldi 8,7, 64-8 -#else - sldi 0,6, 8 - srdi 8,7, 64-8 -#endif - or 0,0,8 - ld 6,0(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 8 - sldi 8,6, 64-8 -#else - sldi 0,7, 8 - srdi 8,6, 64-8 -#endif - or 0,0,8 - ld 7,8(5) - std 0,8(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 8 - sldi 8,7, 64-8 -#else - sldi 0,6, 8 - srdi 8,7, 64-8 -#endif - or 0,0,8 - ld 6,16(5) - std 0,16(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 8 - sldi 8,6, 64-8 -#else - sldi 0,7, 8 - srdi 8,6, 64-8 -#endif - or 0,0,8 - ld 7,24(5) - std 0,24(4) - addi 5,5,32 - addi 4,4,32 - bdnz+ L(du1_loop) - .align 4 -L(du1_fini): - /* calculate and store the final DW */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 8 - sldi 8,7, 64-8 -#else - sldi 0,6, 8 - srdi 8,7, 64-8 -#endif - or 0,0,8 - std 0,0(4) - b L(du_done) - - .align 4 -L(du2_do): - bf 30,L(du2_1dw) - - /* there are at least two DWs to copy */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 16 - sldi 8,7, 64-16 -#else - sldi 0,6, 16 - srdi 8,7, 64-16 -#endif - or 0,0,8 - ld 6,16(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 16 - sldi 8,6, 64-16 -#else - sldi 0,7, 16 - srdi 8,6, 64-16 -#endif - or 0,0,8 - ld 7,24(5) - std 0,8(4) - addi 4,4,16 - addi 5,5,32 - blt cr6,L(du2_fini) /* if total DWs = 3, then bypass loop */ - bf 31,L(du2_loop) - /* there is a third DW to copy */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 16 - sldi 8,7, 64-16 -#else - sldi 0,6, 16 - srdi 8,7, 64-16 -#endif - or 0,0,8 - std 0,0(4) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - addi 4,4,8 - beq cr6,L(du2_fini) /* if total DWs = 4, then bypass loop */ - b L(du2_loop) - .align 4 -L(du2_1dw): -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 16 - sldi 8,7, 64-16 -#else - sldi 0,6, 16 - srdi 8,7, 64-16 -#endif - addi 5,5,16 - or 0,0,8 - bf 31,L(du2_loop) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - std 0,0(4) - addi 4,4,8 - .align 4 -/* copy 32 bytes at a time */ -L(du2_loop): -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 16 - sldi 8,7, 64-16 -#else - sldi 0,6, 16 - srdi 8,7, 64-16 -#endif - or 0,0,8 - ld 6,0(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 16 - sldi 8,6, 64-16 -#else - sldi 0,7, 16 - srdi 8,6, 64-16 -#endif - or 0,0,8 - ld 7,8(5) - std 0,8(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 16 - sldi 8,7, 64-16 -#else - sldi 0,6, 16 - srdi 8,7, 64-16 -#endif - or 0,0,8 - ld 6,16(5) - std 0,16(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 16 - sldi 8,6, 64-16 -#else - sldi 0,7, 16 - srdi 8,6, 64-16 -#endif - or 0,0,8 - ld 7,24(5) - std 0,24(4) - addi 5,5,32 - addi 4,4,32 - bdnz+ L(du2_loop) - .align 4 -L(du2_fini): - /* calculate and store the final DW */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 16 - sldi 8,7, 64-16 -#else - sldi 0,6, 16 - srdi 8,7, 64-16 -#endif - or 0,0,8 - std 0,0(4) - b L(du_done) - - .align 4 -L(du3_do): - bf 30,L(du3_1dw) - - /* there are at least two DWs to copy */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 24 - sldi 8,7, 64-24 -#else - sldi 0,6, 24 - srdi 8,7, 64-24 -#endif - or 0,0,8 - ld 6,16(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 24 - sldi 8,6, 64-24 -#else - sldi 0,7, 24 - srdi 8,6, 64-24 -#endif - or 0,0,8 - ld 7,24(5) - std 0,8(4) - addi 4,4,16 - addi 5,5,32 - blt cr6,L(du3_fini) /* if total DWs = 3, then bypass loop */ - bf 31,L(du3_loop) - /* there is a third DW to copy */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 24 - sldi 8,7, 64-24 -#else - sldi 0,6, 24 - srdi 8,7, 64-24 -#endif - or 0,0,8 - std 0,0(4) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - addi 4,4,8 - beq cr6,L(du3_fini) /* if total DWs = 4, then bypass loop */ - b L(du3_loop) - .align 4 -L(du3_1dw): -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 24 - sldi 8,7, 64-24 -#else - sldi 0,6, 24 - srdi 8,7, 64-24 -#endif - addi 5,5,16 - or 0,0,8 - bf 31,L(du3_loop) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - std 0,0(4) - addi 4,4,8 - .align 4 -/* copy 32 bytes at a time */ -L(du3_loop): -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 24 - sldi 8,7, 64-24 -#else - sldi 0,6, 24 - srdi 8,7, 64-24 -#endif - or 0,0,8 - ld 6,0(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 24 - sldi 8,6, 64-24 -#else - sldi 0,7, 24 - srdi 8,6, 64-24 -#endif - or 0,0,8 - ld 7,8(5) - std 0,8(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 24 - sldi 8,7, 64-24 -#else - sldi 0,6, 24 - srdi 8,7, 64-24 -#endif - or 0,0,8 - ld 6,16(5) - std 0,16(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 24 - sldi 8,6, 64-24 -#else - sldi 0,7, 24 - srdi 8,6, 64-24 -#endif - or 0,0,8 - ld 7,24(5) - std 0,24(4) - addi 5,5,32 - addi 4,4,32 - bdnz+ L(du3_loop) - .align 4 -L(du3_fini): - /* calculate and store the final DW */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 24 - sldi 8,7, 64-24 -#else - sldi 0,6, 24 - srdi 8,7, 64-24 -#endif - or 0,0,8 - std 0,0(4) - b L(du_done) - - .align 4 -L(du4_do): - cmpldi cr5, 10, 6 - beq cr0, L(du4_dox) - blt cr5, L(du5_do) - beq cr5, L(du6_do) - b L(du7_do) -L(du4_dox): - bf 30,L(du4_1dw) - - /* there are at least two DWs to copy */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 32 - sldi 8,7, 64-32 -#else - sldi 0,6, 32 - srdi 8,7, 64-32 -#endif - or 0,0,8 - ld 6,16(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 32 - sldi 8,6, 64-32 -#else - sldi 0,7, 32 - srdi 8,6, 64-32 -#endif - or 0,0,8 - ld 7,24(5) - std 0,8(4) - addi 4,4,16 - addi 5,5,32 - blt cr6,L(du4_fini) /* if total DWs = 3, then bypass loop */ - bf 31,L(du4_loop) - /* there is a third DW to copy */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 32 - sldi 8,7, 64-32 -#else - sldi 0,6, 32 - srdi 8,7, 64-32 -#endif - or 0,0,8 - std 0,0(4) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - addi 4,4,8 - beq cr6,L(du4_fini) /* if total DWs = 4, then bypass loop */ - b L(du4_loop) - .align 4 -L(du4_1dw): -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 32 - sldi 8,7, 64-32 -#else - sldi 0,6, 32 - srdi 8,7, 64-32 -#endif - addi 5,5,16 - or 0,0,8 - bf 31,L(du4_loop) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - std 0,0(4) - addi 4,4,8 - .align 4 -/* copy 32 bytes at a time */ -L(du4_loop): -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 32 - sldi 8,7, 64-32 -#else - sldi 0,6, 32 - srdi 8,7, 64-32 -#endif - or 0,0,8 - ld 6,0(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 32 - sldi 8,6, 64-32 -#else - sldi 0,7, 32 - srdi 8,6, 64-32 -#endif - or 0,0,8 - ld 7,8(5) - std 0,8(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 32 - sldi 8,7, 64-32 -#else - sldi 0,6, 32 - srdi 8,7, 64-32 -#endif - or 0,0,8 - ld 6,16(5) - std 0,16(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 32 - sldi 8,6, 64-32 -#else - sldi 0,7, 32 - srdi 8,6, 64-32 -#endif - or 0,0,8 - ld 7,24(5) - std 0,24(4) - addi 5,5,32 - addi 4,4,32 - bdnz+ L(du4_loop) - .align 4 -L(du4_fini): - /* calculate and store the final DW */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 32 - sldi 8,7, 64-32 -#else - sldi 0,6, 32 - srdi 8,7, 64-32 -#endif - or 0,0,8 - std 0,0(4) - b L(du_done) - - .align 4 -L(du5_do): - bf 30,L(du5_1dw) - - /* there are at least two DWs to copy */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 40 - sldi 8,7, 64-40 -#else - sldi 0,6, 40 - srdi 8,7, 64-40 -#endif - or 0,0,8 - ld 6,16(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 40 - sldi 8,6, 64-40 -#else - sldi 0,7, 40 - srdi 8,6, 64-40 -#endif - or 0,0,8 - ld 7,24(5) - std 0,8(4) - addi 4,4,16 - addi 5,5,32 - blt cr6,L(du5_fini) /* if total DWs = 3, then bypass loop */ - bf 31,L(du5_loop) - /* there is a third DW to copy */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 40 - sldi 8,7, 64-40 -#else - sldi 0,6, 40 - srdi 8,7, 64-40 -#endif - or 0,0,8 - std 0,0(4) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - addi 4,4,8 - beq cr6,L(du5_fini) /* if total DWs = 4, then bypass loop */ - b L(du5_loop) - .align 4 -L(du5_1dw): -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 40 - sldi 8,7, 64-40 -#else - sldi 0,6, 40 - srdi 8,7, 64-40 -#endif - addi 5,5,16 - or 0,0,8 - bf 31,L(du5_loop) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - std 0,0(4) - addi 4,4,8 - .align 4 -/* copy 32 bytes at a time */ -L(du5_loop): -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 40 - sldi 8,7, 64-40 -#else - sldi 0,6, 40 - srdi 8,7, 64-40 -#endif - or 0,0,8 - ld 6,0(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 40 - sldi 8,6, 64-40 -#else - sldi 0,7, 40 - srdi 8,6, 64-40 -#endif - or 0,0,8 - ld 7,8(5) - std 0,8(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 40 - sldi 8,7, 64-40 -#else - sldi 0,6, 40 - srdi 8,7, 64-40 -#endif - or 0,0,8 - ld 6,16(5) - std 0,16(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 40 - sldi 8,6, 64-40 -#else - sldi 0,7, 40 - srdi 8,6, 64-40 -#endif - or 0,0,8 - ld 7,24(5) - std 0,24(4) - addi 5,5,32 - addi 4,4,32 - bdnz+ L(du5_loop) - .align 4 -L(du5_fini): - /* calculate and store the final DW */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 40 - sldi 8,7, 64-40 -#else - sldi 0,6, 40 - srdi 8,7, 64-40 -#endif - or 0,0,8 - std 0,0(4) - b L(du_done) - - .align 4 -L(du6_do): - bf 30,L(du6_1dw) - - /* there are at least two DWs to copy */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 48 - sldi 8,7, 64-48 -#else - sldi 0,6, 48 - srdi 8,7, 64-48 -#endif - or 0,0,8 - ld 6,16(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 48 - sldi 8,6, 64-48 -#else - sldi 0,7, 48 - srdi 8,6, 64-48 -#endif - or 0,0,8 - ld 7,24(5) - std 0,8(4) - addi 4,4,16 - addi 5,5,32 - blt cr6,L(du6_fini) /* if total DWs = 3, then bypass loop */ - bf 31,L(du6_loop) - /* there is a third DW to copy */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 48 - sldi 8,7, 64-48 -#else - sldi 0,6, 48 - srdi 8,7, 64-48 -#endif - or 0,0,8 - std 0,0(4) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - addi 4,4,8 - beq cr6,L(du6_fini) /* if total DWs = 4, then bypass loop */ - b L(du6_loop) - .align 4 -L(du6_1dw): -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 48 - sldi 8,7, 64-48 -#else - sldi 0,6, 48 - srdi 8,7, 64-48 -#endif - addi 5,5,16 - or 0,0,8 - bf 31,L(du6_loop) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - std 0,0(4) - addi 4,4,8 - .align 4 -/* copy 32 bytes at a time */ -L(du6_loop): -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 48 - sldi 8,7, 64-48 -#else - sldi 0,6, 48 - srdi 8,7, 64-48 -#endif - or 0,0,8 - ld 6,0(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 48 - sldi 8,6, 64-48 -#else - sldi 0,7, 48 - srdi 8,6, 64-48 -#endif - or 0,0,8 - ld 7,8(5) - std 0,8(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 48 - sldi 8,7, 64-48 -#else - sldi 0,6, 48 - srdi 8,7, 64-48 -#endif - or 0,0,8 - ld 6,16(5) - std 0,16(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 48 - sldi 8,6, 64-48 -#else - sldi 0,7, 48 - srdi 8,6, 64-48 -#endif - or 0,0,8 - ld 7,24(5) - std 0,24(4) - addi 5,5,32 - addi 4,4,32 - bdnz+ L(du6_loop) - .align 4 -L(du6_fini): - /* calculate and store the final DW */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 48 - sldi 8,7, 64-48 -#else - sldi 0,6, 48 - srdi 8,7, 64-48 -#endif - or 0,0,8 - std 0,0(4) - b L(du_done) - - .align 4 -L(du7_do): - bf 30,L(du7_1dw) - - /* there are at least two DWs to copy */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 56 - sldi 8,7, 64-56 -#else - sldi 0,6, 56 - srdi 8,7, 64-56 -#endif - or 0,0,8 - ld 6,16(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 56 - sldi 8,6, 64-56 -#else - sldi 0,7, 56 - srdi 8,6, 64-56 -#endif - or 0,0,8 - ld 7,24(5) - std 0,8(4) - addi 4,4,16 - addi 5,5,32 - blt cr6,L(du7_fini) /* if total DWs = 3, then bypass loop */ - bf 31,L(du7_loop) - /* there is a third DW to copy */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 56 - sldi 8,7, 64-56 -#else - sldi 0,6, 56 - srdi 8,7, 64-56 -#endif - or 0,0,8 - std 0,0(4) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - addi 4,4,8 - beq cr6,L(du7_fini) /* if total DWs = 4, then bypass loop */ - b L(du7_loop) - .align 4 -L(du7_1dw): -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 56 - sldi 8,7, 64-56 -#else - sldi 0,6, 56 - srdi 8,7, 64-56 -#endif - addi 5,5,16 - or 0,0,8 - bf 31,L(du7_loop) - mr 6,7 - ld 7,0(5) - addi 5,5,8 - std 0,0(4) - addi 4,4,8 - .align 4 -/* copy 32 bytes at a time */ -L(du7_loop): -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 56 - sldi 8,7, 64-56 -#else - sldi 0,6, 56 - srdi 8,7, 64-56 -#endif - or 0,0,8 - ld 6,0(5) - std 0,0(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 56 - sldi 8,6, 64-56 -#else - sldi 0,7, 56 - srdi 8,6, 64-56 -#endif - or 0,0,8 - ld 7,8(5) - std 0,8(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 56 - sldi 8,7, 64-56 -#else - sldi 0,6, 56 - srdi 8,7, 64-56 -#endif - or 0,0,8 - ld 6,16(5) - std 0,16(4) -#ifdef __LITTLE_ENDIAN__ - srdi 0,7, 56 - sldi 8,6, 64-56 -#else - sldi 0,7, 56 - srdi 8,6, 64-56 -#endif - or 0,0,8 - ld 7,24(5) - std 0,24(4) - addi 5,5,32 - addi 4,4,32 - bdnz+ L(du7_loop) - .align 4 -L(du7_fini): - /* calculate and store the final DW */ -#ifdef __LITTLE_ENDIAN__ - srdi 0,6, 56 - sldi 8,7, 64-56 -#else - sldi 0,6, 56 - srdi 8,7, 64-56 -#endif - or 0,0,8 - std 0,0(4) - b L(du_done) - - .align 4 -L(du_done): - rldicr 0,31,0,60 - mtcrf 0x01,31 - beq cr1,0f /* If the tail is 0 bytes we are done! */ - - add 3,3,0 - add 12,12,0 -/* At this point we have a tail of 0-7 bytes and we know that the - destination is double word aligned. */ -4: bf 29,2f - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: bf 30,1f - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -1: bf 31,0f - lbz 6,0(12) - stb 6,0(3) -0: - /* Return original dst pointer. */ - ld 31,-8(1) - ld 3,-16(1) - blr -END_GEN_TB (MEMCPY,TB_TOCLESS) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/powerpc/powerpc64/power6/memset.S b/sysdeps/powerpc/powerpc64/power6/memset.S deleted file mode 100644 index aee1c8eabb..0000000000 --- a/sysdeps/powerpc/powerpc64/power6/memset.S +++ /dev/null @@ -1,395 +0,0 @@ -/* Optimized 64-bit memset implementation for POWER6. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); - Returns 's'. - - The memset is done in three sizes: byte (8 bits), word (32 bits), - cache line (256 bits). There is a special case for setting cache lines - to 0, to take advantage of the dcbz instruction. */ - -#ifndef MEMSET -# define MEMSET memset -#endif - .machine power6 -EALIGN (MEMSET, 7, 0) - CALL_MCOUNT 3 - -#define rTMP r0 -#define rRTN r3 /* Initial value of 1st argument. */ -#define rMEMP0 r3 /* Original value of 1st arg. */ -#define rCHR r4 /* Char to set in each byte. */ -#define rLEN r5 /* Length of region to set. */ -#define rMEMP r6 /* Address at which we are storing. */ -#define rALIGN r7 /* Number of bytes we are setting now (when aligning). */ -#define rMEMP2 r8 -#define rMEMP3 r9 /* Alt mem pointer. */ -L(_memset): -/* Take care of case for size <= 4. */ - cmpldi cr1, rLEN, 8 - andi. rALIGN, rMEMP0, 7 - mr rMEMP, rMEMP0 - ble cr1, L(small) - -/* Align to doubleword boundary. */ - cmpldi cr5, rLEN, 31 - insrdi rCHR, rCHR, 8, 48 /* Replicate byte to halfword. */ - beq+ L(aligned2) - mtcrf 0x01, rMEMP0 - subfic rALIGN, rALIGN, 8 - cror 28,30,31 /* Detect odd word aligned. */ - add rMEMP, rMEMP, rALIGN - sub rLEN, rLEN, rALIGN - insrdi rCHR, rCHR, 16, 32 /* Replicate halfword to word. */ - bt 29, L(g4) -/* Process the even word of doubleword. */ - bf+ 31, L(g2) - stb rCHR, 0(rMEMP0) - bt 30, L(g4x) -L(g2): - sth rCHR, -6(rMEMP) -L(g4x): - stw rCHR, -4(rMEMP) - b L(aligned) -/* Process the odd word of doubleword. */ -L(g4): - bf 28, L(g4x) /* If false, word aligned on odd word. */ - bf+ 31, L(g0) - stb rCHR, 0(rMEMP0) - bt 30, L(aligned) -L(g0): - sth rCHR, -2(rMEMP) - -/* Handle the case of size < 31. */ -L(aligned2): - insrdi rCHR, rCHR, 16, 32 /* Replicate halfword to word. */ -L(aligned): - mtcrf 0x01, rLEN - ble cr5, L(medium) -/* Align to 32-byte boundary. */ - andi. rALIGN, rMEMP, 0x18 - subfic rALIGN, rALIGN, 0x20 - insrdi rCHR, rCHR, 32, 0 /* Replicate word to double word. */ - beq L(caligned) - mtcrf 0x01, rALIGN - add rMEMP, rMEMP, rALIGN - sub rLEN, rLEN, rALIGN - cmplwi cr1, rALIGN, 0x10 - mr rMEMP2, rMEMP - bf 28, L(a1) - stdu rCHR, -8(rMEMP2) -L(a1): blt cr1, L(a2) - std rCHR, -8(rMEMP2) - stdu rCHR, -16(rMEMP2) -L(a2): - -/* Now aligned to a 32 byte boundary. */ - .align 4 -L(caligned): - cmpldi cr1, rCHR, 0 - clrrdi. rALIGN, rLEN, 5 - mtcrf 0x01, rLEN - beq cr1, L(zloopstart) /* Special case for clearing memory using dcbz. */ - beq L(medium) /* We may not actually get to do a full line. */ - .align 4 -/* Storing a non-zero "c" value. We are aligned at a sector (32-byte) - boundary may not be at cache line (128-byte) boundary. */ -L(nzloopstart): -/* memset in 32-byte chunks until we get to a cache line boundary. - If rLEN is less than the distance to the next cache-line boundary use - cacheAligned1 code to finish the tail. */ - cmpldi cr1,rLEN,128 - - andi. rTMP,rMEMP,127 - blt cr1,L(cacheAligned1) - addi rMEMP3,rMEMP,32 - beq L(nzCacheAligned) - addi rLEN,rLEN,-32 - std rCHR,0(rMEMP) - std rCHR,8(rMEMP) - std rCHR,16(rMEMP) - addi rMEMP,rMEMP,32 - andi. rTMP,rMEMP3,127 - std rCHR,-8(rMEMP3) - - beq L(nzCacheAligned) - addi rLEN,rLEN,-32 - std rCHR,0(rMEMP3) - addi rMEMP,rMEMP,32 - std rCHR,8(rMEMP3) - andi. rTMP,rMEMP,127 - std rCHR,16(rMEMP3) - std rCHR,24(rMEMP3) - - beq L(nzCacheAligned) - addi rLEN,rLEN,-32 - std rCHR,32(rMEMP3) - addi rMEMP,rMEMP,32 - cmpldi cr1,rLEN,128 - std rCHR,40(rMEMP3) - cmpldi cr6,rLEN,256 - li rMEMP2,128 - std rCHR,48(rMEMP3) - std rCHR,56(rMEMP3) - blt cr1,L(cacheAligned1) - b L(nzCacheAligned128) - -/* Now we are aligned to the cache line and can use dcbtst. */ - .align 4 -L(nzCacheAligned): - cmpldi cr1,rLEN,128 - blt cr1,L(cacheAligned1) - b L(nzCacheAligned128) - .align 5 -L(nzCacheAligned128): - cmpldi cr1,rLEN,256 - addi rMEMP3,rMEMP,64 - std rCHR,0(rMEMP) - std rCHR,8(rMEMP) - std rCHR,16(rMEMP) - std rCHR,24(rMEMP) - std rCHR,32(rMEMP) - std rCHR,40(rMEMP) - std rCHR,48(rMEMP) - std rCHR,56(rMEMP) - addi rMEMP,rMEMP3,64 - addi rLEN,rLEN,-128 - std rCHR,0(rMEMP3) - std rCHR,8(rMEMP3) - std rCHR,16(rMEMP3) - std rCHR,24(rMEMP3) - std rCHR,32(rMEMP3) - std rCHR,40(rMEMP3) - std rCHR,48(rMEMP3) - std rCHR,56(rMEMP3) - bge cr1,L(nzCacheAligned128) - dcbtst 0,rMEMP - b L(cacheAligned1) - .align 5 -/* Storing a zero "c" value. We are aligned at a sector (32-byte) - boundary but may not be at cache line (128-byte) boundary. If the - remaining length spans a full cache line we can use the Data cache - block zero instruction. */ -L(zloopstart): -/* memset in 32-byte chunks until we get to a cache line boundary. - If rLEN is less than the distance to the next cache-line boundary use - cacheAligned1 code to finish the tail. */ - cmpldi cr1,rLEN,128 - beq L(medium) -L(getCacheAligned): - andi. rTMP,rMEMP,127 - nop - blt cr1,L(cacheAligned1) - addi rMEMP3,rMEMP,32 - beq L(cacheAligned) - addi rLEN,rLEN,-32 - std rCHR,0(rMEMP) - std rCHR,8(rMEMP) - std rCHR,16(rMEMP) - addi rMEMP,rMEMP,32 - andi. rTMP,rMEMP3,127 - std rCHR,-8(rMEMP3) -L(getCacheAligned2): - beq L(cacheAligned) - addi rLEN,rLEN,-32 - std rCHR,0(rMEMP3) - std rCHR,8(rMEMP3) - addi rMEMP,rMEMP,32 - andi. rTMP,rMEMP,127 - std rCHR,16(rMEMP3) - std rCHR,24(rMEMP3) -L(getCacheAligned3): - beq L(cacheAligned) - addi rLEN,rLEN,-32 - std rCHR,32(rMEMP3) - addi rMEMP,rMEMP,32 - cmpldi cr1,rLEN,128 - std rCHR,40(rMEMP3) - cmpldi cr6,rLEN,256 - li rMEMP2,128 - std rCHR,48(rMEMP3) - std rCHR,56(rMEMP3) - blt cr1,L(cacheAligned1) - blt cr6,L(cacheAligned128) - b L(cacheAlignedx) - -/* Now we are aligned to the cache line and can use dcbz. */ - .align 5 -L(cacheAligned): - cmpldi cr1,rLEN,128 - cmpldi cr6,rLEN,256 - blt cr1,L(cacheAligned1) - li rMEMP2,128 -L(cacheAlignedx): - cmpldi cr5,rLEN,640 - blt cr6,L(cacheAligned128) - bgt cr5,L(cacheAligned512) - cmpldi cr6,rLEN,512 - dcbz 0,rMEMP - cmpldi cr1,rLEN,384 - dcbz rMEMP2,rMEMP - addi rMEMP,rMEMP,256 - addi rLEN,rLEN,-256 - blt cr1,L(cacheAligned1) - blt cr6,L(cacheAligned128) - b L(cacheAligned256) - .align 5 -/* A simple loop for the longer (>640 bytes) lengths. This form limits - the branch miss-predicted to exactly 1 at loop exit.*/ -L(cacheAligned512): - cmpldi cr1,rLEN,128 - blt cr1,L(cacheAligned1) - dcbz 0,rMEMP - addi rLEN,rLEN,-128 - addi rMEMP,rMEMP,128 - b L(cacheAligned512) - .align 5 -L(cacheAligned256): - - cmpldi cr6,rLEN,512 - - dcbz 0,rMEMP - cmpldi cr1,rLEN,384 - dcbz rMEMP2,rMEMP - addi rMEMP,rMEMP,256 - addi rLEN,rLEN,-256 - - bge cr6,L(cacheAligned256) - - blt cr1,L(cacheAligned1) - .align 4 -L(cacheAligned128): - dcbz 0,rMEMP - addi rMEMP,rMEMP,128 - addi rLEN,rLEN,-128 - nop -L(cacheAligned1): - cmpldi cr1,rLEN,32 - blt cr1,L(handletail32) - addi rMEMP3,rMEMP,32 - addi rLEN,rLEN,-32 - std rCHR,0(rMEMP) - std rCHR,8(rMEMP) - std rCHR,16(rMEMP) - addi rMEMP,rMEMP,32 - cmpldi cr1,rLEN,32 - std rCHR,-8(rMEMP3) -L(cacheAligned2): - blt cr1,L(handletail32) - addi rLEN,rLEN,-32 - std rCHR,0(rMEMP3) - std rCHR,8(rMEMP3) - addi rMEMP,rMEMP,32 - cmpldi cr1,rLEN,32 - std rCHR,16(rMEMP3) - std rCHR,24(rMEMP3) - nop -L(cacheAligned3): - blt cr1,L(handletail32) - addi rMEMP,rMEMP,32 - addi rLEN,rLEN,-32 - std rCHR,32(rMEMP3) - std rCHR,40(rMEMP3) - std rCHR,48(rMEMP3) - std rCHR,56(rMEMP3) - -/* We are here because the length or remainder (rLEN) is less than the - cache line/sector size and does not justify aggressive loop unrolling. - So set up the preconditions for L(medium) and go there. */ - .align 3 -L(handletail32): - cmpldi cr1,rLEN,0 - beqlr cr1 - b L(medium) - - .align 5 -L(small): -/* Memset of 8 bytes or less. */ - cmpldi cr6, rLEN, 4 - cmpldi cr5, rLEN, 1 - ble cr6,L(le4) - subi rLEN, rLEN, 4 - stb rCHR,0(rMEMP) - stb rCHR,1(rMEMP) - stb rCHR,2(rMEMP) - stb rCHR,3(rMEMP) - addi rMEMP,rMEMP, 4 - cmpldi cr5, rLEN, 1 -L(le4): - cmpldi cr1, rLEN, 3 - bltlr cr5 - stb rCHR, 0(rMEMP) - beqlr cr5 - stb rCHR, 1(rMEMP) - bltlr cr1 - stb rCHR, 2(rMEMP) - beqlr cr1 - stb rCHR, 3(rMEMP) - blr - -/* Memset of 0-31 bytes. */ - .align 5 -L(medium): - insrdi rCHR, rCHR, 32, 0 /* Replicate word to double word. */ - cmpldi cr1, rLEN, 16 -L(medium_tail2): - add rMEMP, rMEMP, rLEN -L(medium_tail): - bt- 31, L(medium_31t) - bt- 30, L(medium_30t) -L(medium_30f): - bt 29, L(medium_29t) -L(medium_29f): - bge cr1, L(medium_27t) - bflr 28 - std rCHR, -8(rMEMP) - blr - -L(medium_31t): - stbu rCHR, -1(rMEMP) - bf- 30, L(medium_30f) -L(medium_30t): - sthu rCHR, -2(rMEMP) - bf- 29, L(medium_29f) -L(medium_29t): - stwu rCHR, -4(rMEMP) - blt cr1, L(medium_27f) -L(medium_27t): - std rCHR, -8(rMEMP) - stdu rCHR, -16(rMEMP) -L(medium_27f): - bflr 28 -L(medium_28t): - std rCHR, -8(rMEMP) - blr -END_GEN_TB (MEMSET,TB_TOCLESS) -libc_hidden_builtin_def (memset) - -/* Copied from bzero.S to prevent the linker from inserting a stub - between bzero and memset. */ -ENTRY (__bzero) - CALL_MCOUNT 3 - mr r5,r4 - li r4,0 - b L(_memset) -END (__bzero) -#ifndef __bzero -weak_alias (__bzero, bzero) -#endif diff --git a/sysdeps/powerpc/powerpc64/power6/multiarch/Implies b/sysdeps/powerpc/powerpc64/power6/multiarch/Implies deleted file mode 100644 index 2ebe304fa6..0000000000 --- a/sysdeps/powerpc/powerpc64/power6/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power5+/multiarch diff --git a/sysdeps/powerpc/powerpc64/power6/wcschr.c b/sysdeps/powerpc/powerpc64/power6/wcschr.c deleted file mode 100644 index ae04a130cc..0000000000 --- a/sysdeps/powerpc/powerpc64/power6/wcschr.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/powerpc/powerpc64/power6/wcscpy.c b/sysdeps/powerpc/powerpc64/power6/wcscpy.c deleted file mode 100644 index 722c8f995b..0000000000 --- a/sysdeps/powerpc/powerpc64/power6/wcscpy.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/powerpc/powerpc64/power6/wcsrchr.c b/sysdeps/powerpc/powerpc64/power6/wcsrchr.c deleted file mode 100644 index b86472d7bd..0000000000 --- a/sysdeps/powerpc/powerpc64/power6/wcsrchr.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/powerpc/powerpc64/power6x/Implies b/sysdeps/powerpc/powerpc64/power6x/Implies deleted file mode 100644 index 9d68f39d22..0000000000 --- a/sysdeps/powerpc/powerpc64/power6x/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc64/power6/fpu -powerpc/powerpc64/power6 diff --git a/sysdeps/powerpc/powerpc64/power6x/fpu/Implies b/sysdeps/powerpc/powerpc64/power6x/fpu/Implies deleted file mode 100644 index 30fa17646e..0000000000 --- a/sysdeps/powerpc/powerpc64/power6x/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power6/fpu diff --git a/sysdeps/powerpc/powerpc64/power6x/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc64/power6x/fpu/multiarch/Implies deleted file mode 100644 index 410d289a6d..0000000000 --- a/sysdeps/powerpc/powerpc64/power6x/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power6/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc64/power6x/fpu/s_isnan.S b/sysdeps/powerpc/powerpc64/power6x/fpu/s_isnan.S deleted file mode 100644 index b6e11ba0c3..0000000000 --- a/sysdeps/powerpc/powerpc64/power6x/fpu/s_isnan.S +++ /dev/null @@ -1,58 +0,0 @@ -/* isnan(). PowerPC64 version. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __isnan(x) */ - .machine power6 -EALIGN (__isnan, 4, 0) - CALL_MCOUNT 0 - mftgpr r4,fp1 /* copy FPR to GPR */ - lis r0,0x7ff0 - ori r1,r1,0 - clrldi r4,r4,1 /* x = fabs(x) */ - sldi r0,r0,32 /* const long r0 0x7ff00000 00000000 */ - cmpd cr7,r4,r0 /* if (fabs(x) <= inf) */ - li r3,0 /* then return 0 */ - blelr+ cr7 - li r3,1 /* else return 1 */ - blr - END (__isnan) - -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__isnan, __isnanf) -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -# endif -#endif - diff --git a/sysdeps/powerpc/powerpc64/power6x/fpu/s_llrint.S b/sysdeps/powerpc/powerpc64/power6x/fpu/s_llrint.S deleted file mode 100644 index 37aa69061c..0000000000 --- a/sysdeps/powerpc/powerpc64/power6x/fpu/s_llrint.S +++ /dev/null @@ -1,44 +0,0 @@ -/* Round double to long int. POWER6x PowerPC64 version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .machine "power6" -/* long long int[r3] __llrint (double x[fp1]) */ -ENTRY (__llrint) - CALL_MCOUNT 0 - fctid fp13,fp1 - mftgpr r3,fp13 - blr - END (__llrint) - -strong_alias (__llrint, __lrint) -weak_alias (__llrint, llrint) -weak_alias (__lrint, lrint) - -#ifdef NO_LONG_DOUBLE -strong_alias (__llrint, __llrintl) -weak_alias (__llrint, llrintl) -strong_alias (__lrint, __lrintl) -weak_alias (__lrint, lrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llrint, llrintl, GLIBC_2_1) -compat_symbol (libm, __lrint, lrintl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/power6x/fpu/s_llround.S b/sysdeps/powerpc/powerpc64/power6x/fpu/s_llround.S deleted file mode 100644 index 62e1798785..0000000000 --- a/sysdeps/powerpc/powerpc64/power6x/fpu/s_llround.S +++ /dev/null @@ -1,54 +0,0 @@ -/* llround function. POWER6x PowerPC64 version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* long long [r3] llround (float x [fp1]) - IEEE 1003.1 llround function. IEEE specifies "round to the nearest - integer value, rounding halfway cases away from zero, regardless of - the current rounding mode." However PowerPC Architecture defines - "round to Nearest" as "Choose the best approximation. In case of a - tie, choose the one that is even (least significant bit o).". - So we pre-round using the V2.02 Floating Round to Integer Nearest - instruction before we use Floating Convert to Integer Word with - round to zero instruction. */ - - .machine "power6" -ENTRY (__llround) - CALL_MCOUNT 0 - frin fp2,fp1 /* Round to nearest +-0.5. */ - fctidz fp3,fp2 /* Convert To Integer DW round toward 0. */ - mftgpr r3,fp3 /* Transfer integer to R3. */ - blr - END (__llround) - -strong_alias (__llround, __lround) -weak_alias (__llround, llround) -weak_alias (__lround, lround) - -#ifdef NO_LONG_DOUBLE -weak_alias (__llround, llroundl) -strong_alias (__llround, __llroundl) -weak_alias (__lround, lroundl) -strong_alias (__lround, __lroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llround, llroundl, GLIBC_2_1) -compat_symbol (libm, __lround, lroundl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/power6x/multiarch/Implies b/sysdeps/powerpc/powerpc64/power6x/multiarch/Implies deleted file mode 100644 index bf5d6171a5..0000000000 --- a/sysdeps/powerpc/powerpc64/power6x/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power6/multiarch diff --git a/sysdeps/powerpc/powerpc64/power7/Implies b/sysdeps/powerpc/powerpc64/power7/Implies deleted file mode 100644 index 9d68f39d22..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc64/power6/fpu -powerpc/powerpc64/power6 diff --git a/sysdeps/powerpc/powerpc64/power7/Makefile b/sysdeps/powerpc/powerpc64/power7/Makefile deleted file mode 100644 index 89a2296085..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -ifeq ($(subdir),elf) -# Prevent the use of VSX registers and insns in _dl_start, which under -O3 -# optimization may require a TOC reference before relocations are resolved. -CFLAGS-rtld.c += -mno-vsx -endif - -ifeq ($(subdir),string) -sysdep_routines += strstr-ppc64 -CFLAGS-strncase.c += -funroll-loops -CFLAGS-strncase_l.c += -funroll-loops -endif diff --git a/sysdeps/powerpc/powerpc64/power7/add_n.S b/sysdeps/powerpc/powerpc64/power7/add_n.S deleted file mode 100644 index 6425afbc9f..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/add_n.S +++ /dev/null @@ -1,98 +0,0 @@ -/* PowerPC64 mpn_lshift -- mpn_add_n/mpn_sub_n -- mpn addition and - subtraction. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* cycles/limb - * POWER7 2.18 - */ - -#ifdef USE_AS_SUB -# define FUNC __mpn_sub_n -# define ADDSUBC subfe -#else -# define FUNC __mpn_add_n -# define ADDSUBC adde -#endif - -#define RP r3 -#define UP r4 -#define VP r5 -#define N r6 - -EALIGN(FUNC, 5, 0) -#ifdef USE_AS_SUB - addic r0, r0, 0 -#else - addic r0, r1, -1 -#endif - andi. r7, N, 1 - beq L(bx0) - - ld r7, 0(UP) - ld r9, r0(VP) - ADDSUBC r11, r9, r7 - std r11, r0(RP) - cmpldi N, N, 1 - beq N, L(end) - addi UP, UP, 8 - addi VP, VP, 8 - addi RP, RP, 8 - -L(bx0): addi r0, N, 2 - srdi r0, r0, 2 - mtctr r0 - - andi. r7, N, 2 - bne L(mid) - - addi UP, UP, 16 - addi VP, VP, 16 - addi RP, RP, 16 - - .align 5 -L(top): ld r6, -16(UP) - ld r7, -8(UP) - ld r8, -16(VP) - ld r9, -8(VP) - ADDSUBC r10, r8, N - ADDSUBC r11, r9, r7 - std r10, -16(RP) - std r11, -8(RP) -L(mid): ld r6, 0(UP) - ld r7, 8(UP) - ld r8, 0(VP) - ld r9, 8(VP) - ADDSUBC r10, r8, N - ADDSUBC r11, r9, r7 - std r10, 0(RP) - std r11, 8(RP) - addi UP, UP, 32 - addi VP, VP, 32 - addi RP, RP, 32 - bdnz L(top) - -L(end): subfe r3, r0, r0 -#ifdef USE_AS_SUB - neg r3, r3 -#else - addi r3, r3, 1 -#endif - blr -END(FUNC) diff --git a/sysdeps/powerpc/powerpc64/power7/bcopy.c b/sysdeps/powerpc/powerpc64/power7/bcopy.c deleted file mode 100644 index 4a6a400e7a..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/bcopy.c +++ /dev/null @@ -1 +0,0 @@ -/* Implemented at memmove.S */ diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/Implies b/sysdeps/powerpc/powerpc64/power7/fpu/Implies deleted file mode 100644 index 30fa17646e..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power6/fpu diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc64/power7/fpu/multiarch/Implies deleted file mode 100644 index 410d289a6d..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power6/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S b/sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S deleted file mode 100644 index 9ccc758c9e..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S +++ /dev/null @@ -1,70 +0,0 @@ -/* finite(). PowerPC64/POWER7 version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __finite(x) */ - .section ".toc","aw" -.LC0: /* 1.0 */ - .tc FD_ONE[TC],0x3ff0000000000000 - .section ".text" - .type __finite, @function - .machine power7 -EALIGN (__finite, 4, 0) - CALL_MCOUNT 0 - lfd fp0,.LC0@toc(r2) - ftdiv cr7,fp1,fp0 - li r3,1 - bflr 30 - - /* If we are here, we either have +/-INF, - NaN or denormal. */ - - stfd fp1,-16(r1) /* Transfer FP to GPR's. */ - ori 2,2,0 /* Force a new dispatch group. */ - lhz r4,-16+HISHORT(r1) /* Fetch the upper 16 bits of the FP value - (biased exponent and sign bit). */ - clrlwi r4,r4,17 /* r4 = abs(r4). */ - cmpwi cr7,r4,0x7ff0 /* r4 == 0x7ff0? */ - bltlr cr7 /* LT means finite, other non-finite. */ - li r3,0 - blr - END (__finite) - -hidden_def (__finite) -weak_alias (__finite, finite) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__finite, __finitef) -hidden_def (__finitef) -weak_alias (__finitef, finitef) - -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT (libm, GLIBC_2_0) -compat_symbol (libm, __finite, __finitel, GLIBC_2_0) -compat_symbol (libm, finite, finitel, GLIBC_2_0) -# endif -#else -# if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) -compat_symbol (libc, __finite, __finitel, GLIBC_2_0); -compat_symbol (libc, finite, finitel, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_finitef.S b/sysdeps/powerpc/powerpc64/power7/fpu/s_finitef.S deleted file mode 100644 index 54bd94176d..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_finitef.S +++ /dev/null @@ -1 +0,0 @@ -/* This function uses the same code as s_finite.S. */ diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S b/sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S deleted file mode 100644 index 4482cddcfa..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S +++ /dev/null @@ -1,69 +0,0 @@ -/* isinf(). PowerPC64/POWER7 version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __isinf(x) */ - .section ".toc","aw" -.LC0: /* 1.0 */ - .tc FD_ONE[TC],0x3ff0000000000000 - .section ".text" - .type __isinf, @function - .machine power7 -EALIGN (__isinf, 4, 0) - CALL_MCOUNT 0 - lfd fp0,.LC0@toc(r2) - ftdiv cr7,fp1,fp0 - li r3,0 - bflr 29 /* If not INF, return. */ - - /* Either we have -INF/+INF or a denormal. */ - - stfd fp1,-16(r1) /* Transfer FP to GPR's. */ - ori 2,2,0 /* Force a new dispatch group. */ - lhz r4,-16+HISHORT(r1) /* Fetch the upper 16 bits of the FP value - (biased exponent and sign bit). */ - cmpwi cr7,r4,0x7ff0 /* r4 == 0x7ff0? */ - li r3,1 - beqlr cr7 /* EQ means INF, otherwise -INF. */ - li r3,-1 - blr - END (__isinf) - -hidden_def (__isinf) -weak_alias (__isinf, isinf) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__isinf, __isinff) -hidden_def (__isinff) -weak_alias (__isinff, isinff) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isinf, __isinfl) -weak_alias (__isinf, isinfl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isinf, __isinfl, GLIBC_2_0); -compat_symbol (libc, isinf, isinfl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_isinff.S b/sysdeps/powerpc/powerpc64/power7/fpu/s_isinff.S deleted file mode 100644 index be759e091e..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_isinff.S +++ /dev/null @@ -1 +0,0 @@ -/* This function uses the same code as s_isinf.S. */ diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_isnan.S b/sysdeps/powerpc/powerpc64/power7/fpu/s_isnan.S deleted file mode 100644 index 46b08a0d37..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_isnan.S +++ /dev/null @@ -1,68 +0,0 @@ -/* isnan(). PowerPC64/POWER7 version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int __isnan(x) */ - .section ".toc","aw" -.LC0: /* 1.0 */ - .tc FD_ONE[TC],0x3ff0000000000000 - .section ".text" - .type __isnan, @function - .machine power7 -EALIGN (__isnan, 4, 0) - CALL_MCOUNT 0 - lfd fp0,.LC0@toc(r2) - ftdiv cr7,fp1,fp0 - li r3,0 - bflr 30 /* If not NaN, finish. */ - - stfd fp1,-16(r1) /* Transfer FP to GPR's. */ - ori 2,2,0 /* Force a new dispatch group. */ - ld r4,-16(r1) /* Load FP into GPR. */ - lis r0,0x7ff0 - sldi r0,r0,32 /* const long r0 0x7ff00000 00000000. */ - clrldi r4,r4,1 /* x = fabs(x) */ - cmpd cr7,r4,r0 /* if (fabs(x) <= inf) */ - blelr cr7 /* LE means not NaN. */ - li r3,1 /* else return 1 */ - blr - END (__isnan) - -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__isnan, __isnanf) -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_isnanf.S b/sysdeps/powerpc/powerpc64/power7/fpu/s_isnanf.S deleted file mode 100644 index b48c85e0d3..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_isnanf.S +++ /dev/null @@ -1 +0,0 @@ -/* This function uses the same code as s_isnan.S. */ diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c b/sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c deleted file mode 100644 index 2599c771d9..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c b/sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c deleted file mode 100644 index 7a5a8032e0..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c b/sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c deleted file mode 100644 index 524ae2c78d..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/powerpc/powerpc64/power7/memchr.S b/sysdeps/powerpc/powerpc64/power7/memchr.S deleted file mode 100644 index 5e9707aa02..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/memchr.S +++ /dev/null @@ -1,199 +0,0 @@ -/* Optimized memchr implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] memchr (char *s [r3], int byte [r4], int size [r5]) */ - -#ifndef MEMCHR -# define MEMCHR __memchr -#endif - .machine power7 -ENTRY (MEMCHR) - CALL_MCOUNT 3 - dcbt 0,r3 - clrrdi r8,r3,3 - insrdi r4,r4,8,48 - - /* Calculate the last acceptable address and check for possible - addition overflow by using satured math: - r7 = r3 + r5 - r7 |= -(r7 < x) */ - add r7,r3,r5 - subfc r6,r3,r7 - subfe r9,r9,r9 - extsw r6,r9 - or r7,r7,r6 - - insrdi r4,r4,16,32 - cmpldi r5,32 - li r9, -1 - rlwinm r6,r3,3,26,28 /* Calculate padding. */ - insrdi r4,r4,32,0 - addi r7,r7,-1 -#ifdef __LITTLE_ENDIAN__ - sld r9,r9,r6 -#else - srd r9,r9,r6 -#endif - ble L(small_range) - - ld r12,0(r8) /* Load doubleword from memory. */ - cmpb r3,r12,r4 /* Check for BYTEs in DWORD1. */ - and r3,r3,r9 - clrldi r5,r7,61 /* Byte count - 1 in last dword. */ - clrrdi r7,r7,3 /* Address of last doubleword. */ - cmpldi cr7,r3,0 /* Does r3 indicate we got a hit? */ - bne cr7,L(done) - - mtcrf 0x01,r8 - /* Are we now aligned to a quadword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - bt 28,L(loop_setup) - - /* Handle DWORD2 of pair. */ - ldu r12,8(r8) - cmpb r3,r12,r4 - cmpldi cr7,r3,0 - bne cr7,L(done) - -L(loop_setup): - /* The last dword we want to read in the loop below is the one - containing the last byte of the string, ie. the dword at - (s + size - 1) & ~7, or r7. The first dword read is at - r8 + 8, we read 2 * cnt dwords, so the last dword read will - be at r8 + 8 + 16 * cnt - 8. Solving for cnt gives - cnt = (r7 - r8) / 16 */ - sub r6,r7,r8 - srdi r6,r6,4 /* Number of loop iterations. */ - mtctr r6 /* Setup the counter. */ - - /* Main loop to look for BYTE in the string. Since - it's a small loop (8 instructions), align it to 32-bytes. */ - .align 5 -L(loop): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the byte-checking process for bigger strings. */ - ld r12,8(r8) - ldu r11,16(r8) - cmpb r3,r12,r4 - cmpb r9,r11,r4 - or r6,r9,r3 /* Merge everything in one doubleword. */ - cmpldi cr7,r6,0 - bne cr7,L(found) - bdnz L(loop) - - /* We may have one more dword to read. */ - cmpld r8,r7 - beqlr - - ldu r12,8(r8) - cmpb r3,r12,r4 - cmpldi cr6,r3,0 - bne cr6,L(done) - blr - - .align 4 -L(found): - /* OK, one (or both) of the doublewords contains BYTE. Check - the first doubleword and decrement the address in case the first - doubleword really contains BYTE. */ - cmpldi cr6,r3,0 - addi r8,r8,-8 - bne cr6,L(done) - - /* BYTE must be in the second doubleword. Adjust the address - again and move the result of cmpb to r3 so we can calculate the - pointer. */ - - mr r3,r9 - addi r8,r8,8 - - /* r3 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as BYTE in the original - doubleword from the string. Use that to calculate the pointer. - We need to make sure BYTE is *before* the end of the range. */ -L(done): -#ifdef __LITTLE_ENDIAN__ - addi r0,r3,-1 - andc r0,r0,r3 - popcntd r0,r0 /* Count trailing zeros. */ -#else - cntlzd r0,r3 /* Count leading zeros before the match. */ -#endif - cmpld r8,r7 /* Are we on the last dword? */ - srdi r0,r0,3 /* Convert leading/trailing zeros to bytes. */ - add r3,r8,r0 - cmpld cr7,r0,r5 /* If on the last dword, check byte offset. */ - bnelr - blelr cr7 - li r3,0 - blr - - .align 4 -L(null): - li r3,0 - blr - -/* Deals with size <= 32. */ - .align 4 -L(small_range): - cmpldi r5,0 - beq L(null) - ld r12,0(r8) /* Load word from memory. */ - cmpb r3,r12,r4 /* Check for BYTE in DWORD1. */ - and r3,r3,r9 - cmpldi cr7,r3,0 - clrldi r5,r7,61 /* Byte count - 1 in last dword. */ - clrrdi r7,r7,3 /* Address of last doubleword. */ - cmpld r8,r7 /* Are we done already? */ - bne cr7,L(done) - beqlr - - ldu r12,8(r8) - cmpb r3,r12,r4 - cmpldi cr6,r3,0 - cmpld r8,r7 - bne cr6,L(done) /* Found something. */ - beqlr /* Hit end of string (length). */ - - ldu r12,8(r8) - cmpb r3,r12,r4 - cmpldi cr6,r3,0 - cmpld r8,r7 - bne cr6,L(done) - beqlr - - ldu r12,8(r8) - cmpb r3,r12,r4 - cmpldi cr6,r3,0 - cmpld r8,r7 - bne cr6,L(done) - beqlr - - ldu r12,8(r8) - cmpb r3,r12,r4 - cmpldi cr6,r3,0 - bne cr6,L(done) - blr - -END (MEMCHR) -weak_alias (__memchr, memchr) -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/powerpc/powerpc64/power7/memcmp.S b/sysdeps/powerpc/powerpc64/power7/memcmp.S deleted file mode 100644 index 96ce8cee25..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/memcmp.S +++ /dev/null @@ -1,1061 +0,0 @@ -/* Optimized memcmp implementation for POWER7/PowerPC64. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] memcmp (const char *s1 [r3], - const char *s2 [r4], - size_t size [r5]) */ -#ifndef MEMCMP -# define MEMCMP memcmp -#endif - .machine power7 -EALIGN (MEMCMP, 4, 0) - CALL_MCOUNT 3 - -#define rRTN r3 -#define rSTR1 r3 /* first string arg */ -#define rSTR2 r4 /* second string arg */ -#define rN r5 /* max string length */ -#define rWORD1 r6 /* current word in s1 */ -#define rWORD2 r7 /* current word in s2 */ -#define rWORD3 r8 /* next word in s1 */ -#define rWORD4 r9 /* next word in s2 */ -#define rWORD5 r10 /* next word in s1 */ -#define rWORD6 r11 /* next word in s2 */ - -#define rOFF8 r20 /* 8 bytes offset. */ -#define rOFF16 r21 /* 16 bytes offset. */ -#define rOFF24 r22 /* 24 bytes offset. */ -#define rOFF32 r23 /* 24 bytes offset. */ -#define rWORD6_SHIFT r24 /* Left rotation temp for rWORD8. */ -#define rWORD4_SHIFT r25 /* Left rotation temp for rWORD6. */ -#define rWORD2_SHIFT r26 /* Left rotation temp for rWORD4. */ -#define rWORD8_SHIFT r27 /* Left rotation temp for rWORD2. */ -#define rSHR r28 /* Unaligned shift right count. */ -#define rSHL r29 /* Unaligned shift left count. */ -#define rWORD7 r30 /* next word in s1 */ -#define rWORD8 r31 /* next word in s2 */ - -#define rWORD8SAVE (-8) -#define rWORD7SAVE (-16) -#define rOFF8SAVE (-24) -#define rOFF16SAVE (-32) -#define rOFF24SAVE (-40) -#define rOFF32SAVE (-48) -#define rSHRSAVE (-56) -#define rSHLSAVE (-64) -#define rWORD8SHIFTSAVE (-72) -#define rWORD2SHIFTSAVE (-80) -#define rWORD4SHIFTSAVE (-88) -#define rWORD6SHIFTSAVE (-96) - -#ifdef __LITTLE_ENDIAN__ -# define LD ldbrx -#else -# define LD ldx -#endif - - xor r0, rSTR2, rSTR1 - cmpldi cr6, rN, 0 - cmpldi cr1, rN, 12 - clrldi. r0, r0, 61 - clrldi r12, rSTR1, 61 - cmpldi cr5, r12, 0 - beq- cr6, L(zeroLength) - dcbt 0, rSTR1 - dcbt 0, rSTR2 -/* If less than 8 bytes or not aligned, use the unaligned - byte loop. */ - blt cr1, L(bytealigned) - std rWORD8, rWORD8SAVE(r1) - std rWORD7, rWORD7SAVE(r1) - std rOFF8, rOFF8SAVE(r1) - std rOFF16, rOFF16SAVE(r1) - std rOFF24, rOFF24SAVE(r1) - std rOFF32, rOFF32SAVE(r1) - cfi_offset(rWORD8, rWORD8SAVE) - cfi_offset(rWORD7, rWORD7SAVE) - cfi_offset(rOFF8, rOFF8SAVE) - cfi_offset(rOFF16, rOFF16SAVE) - cfi_offset(rOFF24, rOFF24SAVE) - cfi_offset(rOFF32, rOFF32SAVE) - - li rOFF8,8 - li rOFF16,16 - li rOFF24,24 - li rOFF32,32 - - bne L(unaligned) -/* At this point we know both strings have the same alignment and the - compare length is at least 8 bytes. r12 contains the low order - 3 bits of rSTR1 and cr5 contains the result of the logical compare - of r12 to 0. If r12 == 0 then we are already double word - aligned and can perform the DW aligned loop. - - Otherwise we know the two strings have the same alignment (but not - yet DW). So we force the string addresses to the next lower DW - boundary and special case this first DW using shift left to - eliminate bits preceding the first byte. Since we want to join the - normal (DW aligned) compare loop, starting at the second double word, - we need to adjust the length (rN) and special case the loop - versioning for the first DW. This ensures that the loop count is - correct and the first DW (shifted) is in the expected register pair. */ - .align 4 -L(samealignment): - clrrdi rSTR1, rSTR1, 3 - clrrdi rSTR2, rSTR2, 3 - beq cr5, L(DWaligned) - add rN, rN, r12 - sldi rWORD6, r12, 3 - srdi r0, rN, 5 /* Divide by 32 */ - andi. r12, rN, 24 /* Get the DW remainder */ - LD rWORD1, 0, rSTR1 - LD rWORD2, 0, rSTR2 - cmpldi cr1, r12, 16 - cmpldi cr7, rN, 32 - clrldi rN, rN, 61 - beq L(dPs4) - mtctr r0 - bgt cr1, L(dPs3) - beq cr1, L(dPs2) - -/* Remainder is 8 */ - .align 3 -L(dsP1): - sld rWORD5, rWORD1, rWORD6 - sld rWORD6, rWORD2, rWORD6 - cmpld cr5, rWORD5, rWORD6 - blt cr7, L(dP1x) -/* Do something useful in this cycle since we have to branch anyway. */ - LD rWORD1, rOFF8, rSTR1 - LD rWORD2, rOFF8, rSTR2 - cmpld cr7, rWORD1, rWORD2 - b L(dP1e) -/* Remainder is 16 */ - .align 4 -L(dPs2): - sld rWORD5, rWORD1, rWORD6 - sld rWORD6, rWORD2, rWORD6 - cmpld cr6, rWORD5, rWORD6 - blt cr7, L(dP2x) -/* Do something useful in this cycle since we have to branch anyway. */ - LD rWORD7, rOFF8, rSTR1 - LD rWORD8, rOFF8, rSTR2 - cmpld cr5, rWORD7, rWORD8 - b L(dP2e) -/* Remainder is 24 */ - .align 4 -L(dPs3): - sld rWORD3, rWORD1, rWORD6 - sld rWORD4, rWORD2, rWORD6 - cmpld cr1, rWORD3, rWORD4 - b L(dP3e) -/* Count is a multiple of 32, remainder is 0 */ - .align 4 -L(dPs4): - mtctr r0 - sld rWORD1, rWORD1, rWORD6 - sld rWORD2, rWORD2, rWORD6 - cmpld cr7, rWORD1, rWORD2 - b L(dP4e) - -/* At this point we know both strings are double word aligned and the - compare length is at least 8 bytes. */ - .align 4 -L(DWaligned): - andi. r12, rN, 24 /* Get the DW remainder */ - srdi r0, rN, 5 /* Divide by 32 */ - cmpldi cr1, r12, 16 - cmpldi cr7, rN, 32 - clrldi rN, rN, 61 - beq L(dP4) - bgt cr1, L(dP3) - beq cr1, L(dP2) - -/* Remainder is 8 */ - .align 4 -L(dP1): - mtctr r0 -/* Normally we'd use rWORD7/rWORD8 here, but since we might exit early - (8-15 byte compare), we want to use only volatile registers. This - means we can avoid restoring non-volatile registers since we did not - change any on the early exit path. The key here is the non-early - exit path only cares about the condition code (cr5), not about which - register pair was used. */ - LD rWORD5, 0, rSTR1 - LD rWORD6, 0, rSTR2 - cmpld cr5, rWORD5, rWORD6 - blt cr7, L(dP1x) - LD rWORD1, rOFF8, rSTR1 - LD rWORD2, rOFF8, rSTR2 - cmpld cr7, rWORD1, rWORD2 -L(dP1e): - LD rWORD3, rOFF16, rSTR1 - LD rWORD4, rOFF16, rSTR2 - cmpld cr1, rWORD3, rWORD4 - LD rWORD5, rOFF24, rSTR1 - LD rWORD6, rOFF24, rSTR2 - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5x) - bne cr7, L(dLcr7x) - - LD rWORD7, rOFF32, rSTR1 - LD rWORD8, rOFF32, rSTR2 - addi rSTR1, rSTR1, 32 - addi rSTR2, rSTR2, 32 - bne cr1, L(dLcr1) - cmpld cr5, rWORD7, rWORD8 - bdnz L(dLoop) - bne cr6, L(dLcr6) - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) - .align 3 -L(dP1x): - sldi. r12, rN, 3 - bne cr5, L(dLcr5x) - subfic rN, r12, 64 /* Shift count is 64 - (rN * 8). */ - bne L(d00) - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 0 - blr - -/* Remainder is 16 */ - .align 4 -L(dP2): - mtctr r0 - LD rWORD5, 0, rSTR1 - LD rWORD6, 0, rSTR2 - cmpld cr6, rWORD5, rWORD6 - blt cr7, L(dP2x) - LD rWORD7, rOFF8, rSTR1 - LD rWORD8, rOFF8, rSTR2 - cmpld cr5, rWORD7, rWORD8 -L(dP2e): - LD rWORD1, rOFF16, rSTR1 - LD rWORD2, rOFF16, rSTR2 - cmpld cr7, rWORD1, rWORD2 - LD rWORD3, rOFF24, rSTR1 - LD rWORD4, rOFF24, rSTR2 - cmpld cr1, rWORD3, rWORD4 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 - bne cr6, L(dLcr6) - bne cr5, L(dLcr5) - b L(dLoop2) - .align 4 -L(dP2x): - LD rWORD3, rOFF8, rSTR1 - LD rWORD4, rOFF8, rSTR2 - cmpld cr1, rWORD3, rWORD4 - sldi. r12, rN, 3 - bne cr6, L(dLcr6x) - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 - bne cr1, L(dLcr1x) - subfic rN, r12, 64 /* Shift count is 64 - (rN * 8). */ - bne L(d00) - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 0 - blr - -/* Remainder is 24 */ - .align 4 -L(dP3): - mtctr r0 - LD rWORD3, 0, rSTR1 - LD rWORD4, 0, rSTR2 - cmpld cr1, rWORD3, rWORD4 -L(dP3e): - LD rWORD5, rOFF8, rSTR1 - LD rWORD6, rOFF8, rSTR2 - cmpld cr6, rWORD5, rWORD6 - blt cr7, L(dP3x) - LD rWORD7, rOFF16, rSTR1 - LD rWORD8, rOFF16, rSTR2 - cmpld cr5, rWORD7, rWORD8 - LD rWORD1, rOFF24, rSTR1 - LD rWORD2, rOFF24, rSTR2 - cmpld cr7, rWORD1, rWORD2 - addi rSTR1, rSTR1, 16 - addi rSTR2, rSTR2, 16 - bne cr1, L(dLcr1) - bne cr6, L(dLcr6) - b L(dLoop1) -/* Again we are on a early exit path (24-31 byte compare), we want to - only use volatile registers and avoid restoring non-volatile - registers. */ - .align 4 -L(dP3x): - LD rWORD1, rOFF16, rSTR1 - LD rWORD2, rOFF16, rSTR2 - cmpld cr7, rWORD1, rWORD2 - sldi. r12, rN, 3 - bne cr1, L(dLcr1x) - addi rSTR1, rSTR1, 16 - addi rSTR2, rSTR2, 16 - bne cr6, L(dLcr6x) - subfic rN, r12, 64 /* Shift count is 64 - (rN * 8). */ - bne cr7, L(dLcr7x) - bne L(d00) - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 0 - blr - -/* Count is a multiple of 32, remainder is 0 */ - .align 4 -L(dP4): - mtctr r0 - LD rWORD1, 0, rSTR1 - LD rWORD2, 0, rSTR2 - cmpld cr7, rWORD1, rWORD2 -L(dP4e): - LD rWORD3, rOFF8, rSTR1 - LD rWORD4, rOFF8, rSTR2 - cmpld cr1, rWORD3, rWORD4 - LD rWORD5, rOFF16, rSTR1 - LD rWORD6, rOFF16, rSTR2 - cmpld cr6, rWORD5, rWORD6 - LD rWORD7, rOFF24, rSTR1 - LD rWORD8, rOFF24, rSTR2 - addi rSTR1, rSTR1, 24 - addi rSTR2, rSTR2, 24 - cmpld cr5, rWORD7, rWORD8 - bne cr7, L(dLcr7) - bne cr1, L(dLcr1) - bdz- L(d24) /* Adjust CTR as we start with +4 */ -/* This is the primary loop */ - .align 4 -L(dLoop): - LD rWORD1, rOFF8, rSTR1 - LD rWORD2, rOFF8, rSTR2 - cmpld cr1, rWORD3, rWORD4 - bne cr6, L(dLcr6) -L(dLoop1): - LD rWORD3, rOFF16, rSTR1 - LD rWORD4, rOFF16, rSTR2 - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5) -L(dLoop2): - LD rWORD5, rOFF24, rSTR1 - LD rWORD6, rOFF24, rSTR2 - cmpld cr5, rWORD7, rWORD8 - bne cr7, L(dLcr7) -L(dLoop3): - LD rWORD7, rOFF32, rSTR1 - LD rWORD8, rOFF32, rSTR2 - addi rSTR1, rSTR1, 32 - addi rSTR2, rSTR2, 32 - bne cr1, L(dLcr1) - cmpld cr7, rWORD1, rWORD2 - bdnz L(dLoop) - -L(dL4): - cmpld cr1, rWORD3, rWORD4 - bne cr6, L(dLcr6) - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5) - cmpld cr5, rWORD7, rWORD8 -L(d44): - bne cr7, L(dLcr7) -L(d34): - bne cr1, L(dLcr1) -L(d24): - bne cr6, L(dLcr6) -L(d14): - sldi. r12, rN, 3 - bne cr5, L(dLcr5) -L(d04): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) - subfic rN, r12, 64 /* Shift count is 64 - (rN * 8). */ - beq L(duzeroLength) -/* At this point we have a remainder of 1 to 7 bytes to compare. Since - we are aligned it is safe to load the whole double word, and use - shift right double to eliminate bits beyond the compare length. */ -L(d00): - LD rWORD1, rOFF8, rSTR1 - LD rWORD2, rOFF8, rSTR2 - srd rWORD1, rWORD1, rN - srd rWORD2, rWORD2, rN - cmpld cr7, rWORD1, rWORD2 - bne cr7, L(dLcr7x) - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 0 - blr - - .align 4 -L(dLcr7): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) -L(dLcr7x): - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 1 - bgtlr cr7 - li rRTN, -1 - blr - .align 4 -L(dLcr1): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) -L(dLcr1x): - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 1 - bgtlr cr1 - li rRTN, -1 - blr - .align 4 -L(dLcr6): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) -L(dLcr6x): - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 1 - bgtlr cr6 - li rRTN, -1 - blr - .align 4 -L(dLcr5): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) -L(dLcr5x): - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 1 - bgtlr cr5 - li rRTN, -1 - blr - - .align 4 -L(bytealigned): - mtctr rN - -/* We need to prime this loop. This loop is swing modulo scheduled - to avoid pipe delays. The dependent instruction latencies (load to - compare to conditional branch) is 2 to 3 cycles. In this loop each - dispatch group ends in a branch and takes 1 cycle. Effectively - the first iteration of the loop only serves to load operands and - branches based on compares are delayed until the next loop. - - So we must precondition some registers and condition codes so that - we don't exit the loop early on the first iteration. */ - - lbz rWORD1, 0(rSTR1) - lbz rWORD2, 0(rSTR2) - bdz L(b11) - cmpld cr7, rWORD1, rWORD2 - lbz rWORD3, 1(rSTR1) - lbz rWORD4, 1(rSTR2) - bdz L(b12) - cmpld cr1, rWORD3, rWORD4 - lbzu rWORD5, 2(rSTR1) - lbzu rWORD6, 2(rSTR2) - bdz L(b13) - .align 4 -L(bLoop): - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) - bne cr7, L(bLcr7) - - cmpld cr6, rWORD5, rWORD6 - bdz L(b3i) - - lbzu rWORD3, 1(rSTR1) - lbzu rWORD4, 1(rSTR2) - bne cr1, L(bLcr1) - - cmpld cr7, rWORD1, rWORD2 - bdz L(b2i) - - lbzu rWORD5, 1(rSTR1) - lbzu rWORD6, 1(rSTR2) - bne cr6, L(bLcr6) - - cmpld cr1, rWORD3, rWORD4 - bdnz L(bLoop) - -/* We speculatively loading bytes before we have tested the previous - bytes. But we must avoid overrunning the length (in the ctr) to - prevent these speculative loads from causing a segfault. In this - case the loop will exit early (before the all pending bytes are - tested. In this case we must complete the pending operations - before returning. */ -L(b1i): - bne cr7, L(bLcr7) - bne cr1, L(bLcr1) - b L(bx56) - .align 4 -L(b2i): - bne cr6, L(bLcr6) - bne cr7, L(bLcr7) - b L(bx34) - .align 4 -L(b3i): - bne cr1, L(bLcr1) - bne cr6, L(bLcr6) - b L(bx12) - .align 4 -L(bLcr7): - li rRTN, 1 - bgtlr cr7 - li rRTN, -1 - blr -L(bLcr1): - li rRTN, 1 - bgtlr cr1 - li rRTN, -1 - blr -L(bLcr6): - li rRTN, 1 - bgtlr cr6 - li rRTN, -1 - blr - -L(b13): - bne cr7, L(bx12) - bne cr1, L(bx34) -L(bx56): - sub rRTN, rWORD5, rWORD6 - blr - nop -L(b12): - bne cr7, L(bx12) -L(bx34): - sub rRTN, rWORD3, rWORD4 - blr -L(b11): -L(bx12): - sub rRTN, rWORD1, rWORD2 - blr - - .align 4 -L(zeroLength): - li rRTN, 0 - blr - - .align 4 -/* At this point we know the strings have different alignment and the - compare length is at least 8 bytes. r12 contains the low order - 3 bits of rSTR1 and cr5 contains the result of the logical compare - of r12 to 0. If r12 == 0 then rStr1 is double word - aligned and can perform the DWunaligned loop. - - Otherwise we know that rSTR1 is not already DW aligned yet. - So we can force the string addresses to the next lower DW - boundary and special case this first DW using shift left to - eliminate bits preceding the first byte. Since we want to join the - normal (DWaligned) compare loop, starting at the second double word, - we need to adjust the length (rN) and special case the loop - versioning for the first DW. This ensures that the loop count is - correct and the first DW (shifted) is in the expected resister pair. */ -L(unaligned): - std rSHL, rSHLSAVE(r1) - cfi_offset(rSHL, rSHLSAVE) - clrldi rSHL, rSTR2, 61 - beq cr6, L(duzeroLength) - std rSHR, rSHRSAVE(r1) - cfi_offset(rSHR, rSHRSAVE) - beq cr5, L(DWunaligned) - std rWORD8_SHIFT, rWORD8SHIFTSAVE(r1) - cfi_offset(rWORD8_SHIFT, rWORD8SHIFTSAVE) -/* Adjust the logical start of rSTR2 to compensate for the extra bits - in the 1st rSTR1 DW. */ - sub rWORD8_SHIFT, rSTR2, r12 -/* But do not attempt to address the DW before that DW that contains - the actual start of rSTR2. */ - clrrdi rSTR2, rSTR2, 3 - std rWORD2_SHIFT, rWORD2SHIFTSAVE(r1) -/* Compute the left/right shift counts for the unaligned rSTR2, - compensating for the logical (DW aligned) start of rSTR1. */ - clrldi rSHL, rWORD8_SHIFT, 61 - clrrdi rSTR1, rSTR1, 3 - std rWORD4_SHIFT, rWORD4SHIFTSAVE(r1) - sldi rSHL, rSHL, 3 - cmpld cr5, rWORD8_SHIFT, rSTR2 - add rN, rN, r12 - sldi rWORD6, r12, 3 - std rWORD6_SHIFT, rWORD6SHIFTSAVE(r1) - cfi_offset(rWORD2_SHIFT, rWORD2SHIFTSAVE) - cfi_offset(rWORD4_SHIFT, rWORD4SHIFTSAVE) - cfi_offset(rWORD6_SHIFT, rWORD6SHIFTSAVE) - subfic rSHR, rSHL, 64 - srdi r0, rN, 5 /* Divide by 32 */ - andi. r12, rN, 24 /* Get the DW remainder */ -/* We normally need to load 2 DWs to start the unaligned rSTR2, but in - this special case those bits may be discarded anyway. Also we - must avoid loading a DW where none of the bits are part of rSTR2 as - this may cross a page boundary and cause a page fault. */ - li rWORD8, 0 - blt cr5, L(dus0) - LD rWORD8, 0, rSTR2 - addi rSTR2, rSTR2, 8 - sld rWORD8, rWORD8, rSHL - -L(dus0): - LD rWORD1, 0, rSTR1 - LD rWORD2, 0, rSTR2 - cmpldi cr1, r12, 16 - cmpldi cr7, rN, 32 - srd r12, rWORD2, rSHR - clrldi rN, rN, 61 - beq L(duPs4) - mtctr r0 - or rWORD8, r12, rWORD8 - bgt cr1, L(duPs3) - beq cr1, L(duPs2) - -/* Remainder is 8 */ - .align 4 -L(dusP1): - sld rWORD8_SHIFT, rWORD2, rSHL - sld rWORD7, rWORD1, rWORD6 - sld rWORD8, rWORD8, rWORD6 - bge cr7, L(duP1e) -/* At this point we exit early with the first double word compare - complete and remainder of 0 to 7 bytes. See L(du14) for details on - how we handle the remaining bytes. */ - cmpld cr5, rWORD7, rWORD8 - sldi. rN, rN, 3 - bne cr5, L(duLcr5) - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) - LD rWORD2, rOFF8, rSTR2 - srd r0, rWORD2, rSHR - b L(dutrim) -/* Remainder is 16 */ - .align 4 -L(duPs2): - sld rWORD6_SHIFT, rWORD2, rSHL - sld rWORD5, rWORD1, rWORD6 - sld rWORD6, rWORD8, rWORD6 - b L(duP2e) -/* Remainder is 24 */ - .align 4 -L(duPs3): - sld rWORD4_SHIFT, rWORD2, rSHL - sld rWORD3, rWORD1, rWORD6 - sld rWORD4, rWORD8, rWORD6 - b L(duP3e) -/* Count is a multiple of 32, remainder is 0 */ - .align 4 -L(duPs4): - mtctr r0 - or rWORD8, r12, rWORD8 - sld rWORD2_SHIFT, rWORD2, rSHL - sld rWORD1, rWORD1, rWORD6 - sld rWORD2, rWORD8, rWORD6 - b L(duP4e) - -/* At this point we know rSTR1 is double word aligned and the - compare length is at least 8 bytes. */ - .align 4 -L(DWunaligned): - std rWORD8_SHIFT, rWORD8SHIFTSAVE(r1) - clrrdi rSTR2, rSTR2, 3 - std rWORD2_SHIFT, rWORD2SHIFTSAVE(r1) - srdi r0, rN, 5 /* Divide by 32 */ - std rWORD4_SHIFT, rWORD4SHIFTSAVE(r1) - andi. r12, rN, 24 /* Get the DW remainder */ - std rWORD6_SHIFT, rWORD6SHIFTSAVE(r1) - cfi_offset(rWORD8_SHIFT, rWORD8SHIFTSAVE) - cfi_offset(rWORD2_SHIFT, rWORD2SHIFTSAVE) - cfi_offset(rWORD4_SHIFT, rWORD4SHIFTSAVE) - cfi_offset(rWORD6_SHIFT, rWORD6SHIFTSAVE) - sldi rSHL, rSHL, 3 - LD rWORD6, 0, rSTR2 - LD rWORD8, rOFF8, rSTR2 - addi rSTR2, rSTR2, 8 - cmpldi cr1, r12, 16 - cmpldi cr7, rN, 32 - clrldi rN, rN, 61 - subfic rSHR, rSHL, 64 - sld rWORD6_SHIFT, rWORD6, rSHL - beq L(duP4) - mtctr r0 - bgt cr1, L(duP3) - beq cr1, L(duP2) - -/* Remainder is 8 */ - .align 4 -L(duP1): - srd r12, rWORD8, rSHR - LD rWORD7, 0, rSTR1 - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP1x) -L(duP1e): - LD rWORD1, rOFF8, rSTR1 - LD rWORD2, rOFF8, rSTR2 - cmpld cr5, rWORD7, rWORD8 - srd r0, rWORD2, rSHR - sld rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT - LD rWORD3, rOFF16, rSTR1 - LD rWORD4, rOFF16, rSTR2 - cmpld cr7, rWORD1, rWORD2 - srd r12, rWORD4, rSHR - sld rWORD4_SHIFT, rWORD4, rSHL - bne cr5, L(duLcr5) - or rWORD4, r12, rWORD2_SHIFT - LD rWORD5, rOFF24, rSTR1 - LD rWORD6, rOFF24, rSTR2 - cmpld cr1, rWORD3, rWORD4 - srd r0, rWORD6, rSHR - sld rWORD6_SHIFT, rWORD6, rSHL - bne cr7, L(duLcr7) - or rWORD6, r0, rWORD4_SHIFT - cmpld cr6, rWORD5, rWORD6 - b L(duLoop3) - .align 4 -/* At this point we exit early with the first double word compare - complete and remainder of 0 to 7 bytes. See L(du14) for details on - how we handle the remaining bytes. */ -L(duP1x): - cmpld cr5, rWORD7, rWORD8 - sldi. rN, rN, 3 - bne cr5, L(duLcr5) - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) - LD rWORD2, rOFF8, rSTR2 - srd r0, rWORD2, rSHR - b L(dutrim) -/* Remainder is 16 */ - .align 4 -L(duP2): - srd r0, rWORD8, rSHR - LD rWORD5, 0, rSTR1 - or rWORD6, r0, rWORD6_SHIFT - sld rWORD6_SHIFT, rWORD8, rSHL -L(duP2e): - LD rWORD7, rOFF8, rSTR1 - LD rWORD8, rOFF8, rSTR2 - cmpld cr6, rWORD5, rWORD6 - srd r12, rWORD8, rSHR - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP2x) - LD rWORD1, rOFF16, rSTR1 - LD rWORD2, rOFF16, rSTR2 - cmpld cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - srd r0, rWORD2, rSHR - sld rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT - LD rWORD3, rOFF24, rSTR1 - LD rWORD4, rOFF24, rSTR2 - cmpld cr7, rWORD1, rWORD2 - bne cr5, L(duLcr5) - srd r12, rWORD4, rSHR - sld rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 - cmpld cr1, rWORD3, rWORD4 - b L(duLoop2) - .align 4 -L(duP2x): - cmpld cr5, rWORD7, rWORD8 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 - bne cr6, L(duLcr6) - sldi. rN, rN, 3 - bne cr5, L(duLcr5) - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) - LD rWORD2, rOFF8, rSTR2 - srd r0, rWORD2, rSHR - b L(dutrim) - -/* Remainder is 24 */ - .align 4 -L(duP3): - srd r12, rWORD8, rSHR - LD rWORD3, 0, rSTR1 - sld rWORD4_SHIFT, rWORD8, rSHL - or rWORD4, r12, rWORD6_SHIFT -L(duP3e): - LD rWORD5, rOFF8, rSTR1 - LD rWORD6, rOFF8, rSTR2 - cmpld cr1, rWORD3, rWORD4 - srd r0, rWORD6, rSHR - sld rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT - LD rWORD7, rOFF16, rSTR1 - LD rWORD8, rOFF16, rSTR2 - cmpld cr6, rWORD5, rWORD6 - bne cr1, L(duLcr1) - srd r12, rWORD8, rSHR - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP3x) - LD rWORD1, rOFF24, rSTR1 - LD rWORD2, rOFF24, rSTR2 - cmpld cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - srd r0, rWORD2, rSHR - sld rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT - addi rSTR1, rSTR1, 16 - addi rSTR2, rSTR2, 16 - cmpld cr7, rWORD1, rWORD2 - b L(duLoop1) - .align 4 -L(duP3x): - addi rSTR1, rSTR1, 16 - addi rSTR2, rSTR2, 16 - cmpld cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - sldi. rN, rN, 3 - bne cr5, L(duLcr5) - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) - LD rWORD2, rOFF8, rSTR2 - srd r0, rWORD2, rSHR - b L(dutrim) - -/* Count is a multiple of 32, remainder is 0 */ - .align 4 -L(duP4): - mtctr r0 - srd r0, rWORD8, rSHR - LD rWORD1, 0, rSTR1 - sld rWORD2_SHIFT, rWORD8, rSHL - or rWORD2, r0, rWORD6_SHIFT -L(duP4e): - LD rWORD3, rOFF8, rSTR1 - LD rWORD4, rOFF8, rSTR2 - cmpld cr7, rWORD1, rWORD2 - srd r12, rWORD4, rSHR - sld rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT - LD rWORD5, rOFF16, rSTR1 - LD rWORD6, rOFF16, rSTR2 - cmpld cr1, rWORD3, rWORD4 - bne cr7, L(duLcr7) - srd r0, rWORD6, rSHR - sld rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT - LD rWORD7, rOFF24, rSTR1 - LD rWORD8, rOFF24, rSTR2 - addi rSTR1, rSTR1, 24 - addi rSTR2, rSTR2, 24 - cmpld cr6, rWORD5, rWORD6 - bne cr1, L(duLcr1) - srd r12, rWORD8, rSHR - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - cmpld cr5, rWORD7, rWORD8 - bdz L(du24) /* Adjust CTR as we start with +4 */ -/* This is the primary loop */ - .align 4 -L(duLoop): - LD rWORD1, rOFF8, rSTR1 - LD rWORD2, rOFF8, rSTR2 - cmpld cr1, rWORD3, rWORD4 - bne cr6, L(duLcr6) - srd r0, rWORD2, rSHR - sld rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT -L(duLoop1): - LD rWORD3, rOFF16, rSTR1 - LD rWORD4, rOFF16, rSTR2 - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(duLcr5) - srd r12, rWORD4, rSHR - sld rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT -L(duLoop2): - LD rWORD5, rOFF24, rSTR1 - LD rWORD6, rOFF24, rSTR2 - cmpld cr5, rWORD7, rWORD8 - bne cr7, L(duLcr7) - srd r0, rWORD6, rSHR - sld rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT -L(duLoop3): - LD rWORD7, rOFF32, rSTR1 - LD rWORD8, rOFF32, rSTR2 - addi rSTR1, rSTR1, 32 - addi rSTR2, rSTR2, 32 - cmpld cr7, rWORD1, rWORD2 - bne cr1, L(duLcr1) - srd r12, rWORD8, rSHR - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - bdnz L(duLoop) - -L(duL4): - cmpld cr1, rWORD3, rWORD4 - bne cr6, L(duLcr6) - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(duLcr5) - cmpld cr5, rWORD7, rWORD8 -L(du44): - bne cr7, L(duLcr7) -L(du34): - bne cr1, L(duLcr1) -L(du24): - bne cr6, L(duLcr6) -L(du14): - sldi. rN, rN, 3 - bne cr5, L(duLcr5) -/* At this point we have a remainder of 1 to 7 bytes to compare. We use - shift right double to eliminate bits beyond the compare length. - - However it may not be safe to load rWORD2 which may be beyond the - string length. So we compare the bit length of the remainder to - the right shift count (rSHR). If the bit count is less than or equal - we do not need to load rWORD2 (all significant bits are already in - rWORD8_SHIFT). */ - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) - LD rWORD2, rOFF8, rSTR2 - srd r0, rWORD2, rSHR - .align 4 -L(dutrim): - LD rWORD1, rOFF8, rSTR1 - ld rWORD8, -8(r1) - subfic rN, rN, 64 /* Shift count is 64 - (rN * 8). */ - or rWORD2, r0, rWORD8_SHIFT - ld rWORD7, rWORD7SAVE(r1) - ld rSHL, rSHLSAVE(r1) - srd rWORD1, rWORD1, rN - srd rWORD2, rWORD2, rN - ld rSHR, rSHRSAVE(r1) - ld rWORD8_SHIFT, rWORD8SHIFTSAVE(r1) - li rRTN, 0 - cmpld cr7, rWORD1, rWORD2 - ld rWORD2_SHIFT, rWORD2SHIFTSAVE(r1) - ld rWORD4_SHIFT, rWORD4SHIFTSAVE(r1) - beq cr7, L(dureturn24) - li rRTN, 1 - ld rWORD6_SHIFT, rWORD6SHIFTSAVE(r1) - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - bgtlr cr7 - li rRTN, -1 - blr - .align 4 -L(duLcr7): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) - li rRTN, 1 - bgt cr7, L(dureturn29) - ld rSHL, rSHLSAVE(r1) - ld rSHR, rSHRSAVE(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr1): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) - li rRTN, 1 - bgt cr1, L(dureturn29) - ld rSHL, rSHLSAVE(r1) - ld rSHR, rSHRSAVE(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr6): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) - li rRTN, 1 - bgt cr6, L(dureturn29) - ld rSHL, rSHLSAVE(r1) - ld rSHR, rSHRSAVE(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr5): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) - li rRTN, 1 - bgt cr5, L(dureturn29) - ld rSHL, rSHLSAVE(r1) - ld rSHR, rSHRSAVE(r1) - li rRTN, -1 - b L(dureturn27) - - .align 3 -L(duZeroReturn): - li rRTN, 0 - .align 4 -L(dureturn): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) -L(dureturn29): - ld rSHL, rSHLSAVE(r1) - ld rSHR, rSHRSAVE(r1) -L(dureturn27): - ld rWORD8_SHIFT, rWORD8SHIFTSAVE(r1) - ld rWORD2_SHIFT, rWORD2SHIFTSAVE(r1) - ld rWORD4_SHIFT, rWORD4SHIFTSAVE(r1) -L(dureturn24): - ld rWORD6_SHIFT, rWORD6SHIFTSAVE(r1) - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - blr - -L(duzeroLength): - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 0 - blr - -END (MEMCMP) -libc_hidden_builtin_def (memcmp) -weak_alias (memcmp, bcmp) diff --git a/sysdeps/powerpc/powerpc64/power7/memcpy.S b/sysdeps/powerpc/powerpc64/power7/memcpy.S deleted file mode 100644 index e08993cbc3..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/memcpy.S +++ /dev/null @@ -1,430 +0,0 @@ -/* Optimized memcpy implementation for PowerPC64/POWER7. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - -/* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); - Returns 'dst'. */ - -#ifndef MEMCPY -# define MEMCPY memcpy -#endif - -#define dst 11 /* Use r11 so r3 kept unchanged. */ -#define src 4 -#define cnt 5 - - .machine power7 -EALIGN (MEMCPY, 5, 0) - CALL_MCOUNT 3 - - cmpldi cr1,cnt,31 - neg 0,3 - ble cr1, L(copy_LT_32) /* If move < 32 bytes use short move - code. */ - -/* Align copies using VSX instructions to quadword. It is to avoid alignment - traps when memcpy is used on non-cacheable memory (for instance, memory - mapped I/O). */ - andi. 10,3,15 - clrldi 11,4,60 - cmpld cr6,10,11 /* SRC and DST alignments match? */ - - mr dst,3 - bne cr6,L(copy_GE_32_unaligned) - beq L(aligned_copy) - - mtocrf 0x01,0 - clrldi 0,0,60 - -/* Get the DST and SRC aligned to 16 bytes. */ -1: - bf 31,2f - lbz 6,0(src) - addi src,src,1 - stb 6,0(dst) - addi dst,dst,1 -2: - bf 30,4f - lhz 6,0(src) - addi src,src,2 - sth 6,0(dst) - addi dst,dst,2 -4: - bf 29,8f - lwz 6,0(src) - addi src,src,4 - stw 6,0(dst) - addi dst,dst,4 -8: - bf 28,16f - ld 6,0(src) - addi src,src,8 - std 6,0(dst) - addi dst,dst,8 -16: - subf cnt,0,cnt - -/* Main aligned copy loop. Copies 128 bytes at a time. */ -L(aligned_copy): - li 6,16 - li 7,32 - li 8,48 - mtocrf 0x02,cnt - srdi 12,cnt,7 - cmpdi 12,0 - beq L(aligned_tail) - lxvd2x 6,0,src - lxvd2x 7,src,6 - mtctr 12 - b L(aligned_128loop) - - .align 4 -L(aligned_128head): - /* for the 2nd + iteration of this loop. */ - lxvd2x 6,0,src - lxvd2x 7,src,6 -L(aligned_128loop): - lxvd2x 8,src,7 - lxvd2x 9,src,8 - stxvd2x 6,0,dst - addi src,src,64 - stxvd2x 7,dst,6 - stxvd2x 8,dst,7 - stxvd2x 9,dst,8 - lxvd2x 6,0,src - lxvd2x 7,src,6 - addi dst,dst,64 - lxvd2x 8,src,7 - lxvd2x 9,src,8 - addi src,src,64 - stxvd2x 6,0,dst - stxvd2x 7,dst,6 - stxvd2x 8,dst,7 - stxvd2x 9,dst,8 - addi dst,dst,64 - bdnz L(aligned_128head) - -L(aligned_tail): - mtocrf 0x01,cnt - bf 25,32f - lxvd2x 6,0,src - lxvd2x 7,src,6 - lxvd2x 8,src,7 - lxvd2x 9,src,8 - addi src,src,64 - stxvd2x 6,0,dst - stxvd2x 7,dst,6 - stxvd2x 8,dst,7 - stxvd2x 9,dst,8 - addi dst,dst,64 -32: - bf 26,16f - lxvd2x 6,0,src - lxvd2x 7,src,6 - addi src,src,32 - stxvd2x 6,0,dst - stxvd2x 7,dst,6 - addi dst,dst,32 -16: - bf 27,8f - lxvd2x 6,0,src - addi src,src,16 - stxvd2x 6,0,dst - addi dst,dst,16 -8: - bf 28,4f - ld 6,0(src) - addi src,src,8 - std 6,0(dst) - addi dst,dst,8 -4: /* Copies 4~7 bytes. */ - bf 29,L(tail2) - lwz 6,0(src) - stw 6,0(dst) - bf 30,L(tail5) - lhz 7,4(src) - sth 7,4(dst) - bflr 31 - lbz 8,6(src) - stb 8,6(dst) - /* Return original DST pointer. */ - blr - - -/* Handle copies of 0~31 bytes. */ - .align 4 -L(copy_LT_32): - mr dst,3 - cmpldi cr6,cnt,8 - mtocrf 0x01,cnt - ble cr6,L(copy_LE_8) - - /* At least 9 bytes to go. */ - neg 8,4 - andi. 0,8,3 - cmpldi cr1,cnt,16 - beq L(copy_LT_32_aligned) - - /* Force 4-byte alignment for SRC. */ - mtocrf 0x01,0 - subf cnt,0,cnt -2: - bf 30,1f - lhz 6,0(src) - addi src,src,2 - sth 6,0(dst) - addi dst,dst,2 -1: - bf 31,L(end_4bytes_alignment) - lbz 6,0(src) - addi src,src,1 - stb 6,0(dst) - addi dst,dst,1 - - .align 4 -L(end_4bytes_alignment): - cmpldi cr1,cnt,16 - mtocrf 0x01,cnt - -L(copy_LT_32_aligned): - /* At least 6 bytes to go, and SRC is word-aligned. */ - blt cr1,8f - - /* Copy 16 bytes. */ - lwz 6,0(src) - lwz 7,4(src) - stw 6,0(dst) - lwz 8,8(src) - stw 7,4(dst) - lwz 6,12(src) - addi src,src,16 - stw 8,8(dst) - stw 6,12(dst) - addi dst,dst,16 -8: /* Copy 8 bytes. */ - bf 28,L(tail4) - lwz 6,0(src) - lwz 7,4(src) - addi src,src,8 - stw 6,0(dst) - stw 7,4(dst) - addi dst,dst,8 - - .align 4 -/* Copies 4~7 bytes. */ -L(tail4): - bf 29,L(tail2) - lwz 6,0(src) - stw 6,0(dst) - bf 30,L(tail5) - lhz 7,4(src) - sth 7,4(dst) - bflr 31 - lbz 8,6(src) - stb 8,6(dst) - /* Return original DST pointer. */ - blr - - .align 4 -/* Copies 2~3 bytes. */ -L(tail2): - bf 30,1f - lhz 6,0(src) - sth 6,0(dst) - bflr 31 - lbz 7,2(src) - stb 7,2(dst) - blr - - .align 4 -L(tail5): - bflr 31 - lbz 6,4(src) - stb 6,4(dst) - blr - - .align 4 -1: - bflr 31 - lbz 6,0(src) - stb 6,0(dst) - /* Return original DST pointer. */ - blr - - -/* Handles copies of 0~8 bytes. */ - .align 4 -L(copy_LE_8): - bne cr6,L(tail4) - - /* Though we could've used ld/std here, they are still - slow for unaligned cases. */ - - lwz 6,0(src) - lwz 7,4(src) - stw 6,0(dst) - stw 7,4(dst) - blr - - -/* Handle copies of 32+ bytes where DST is aligned (to quadword) but - SRC is not. Use aligned quadword loads from SRC, shifted to realign - the data, allowing for aligned DST stores. */ - .align 4 -L(copy_GE_32_unaligned): - clrldi 0,0,60 /* Number of bytes until the 1st dst quadword. */ - srdi 9,cnt,4 /* Number of full quadwords remaining. */ - - beq L(copy_GE_32_unaligned_cont) - - /* DST is not quadword aligned, get it aligned. */ - - mtocrf 0x01,0 - subf cnt,0,cnt - - /* Vector instructions work best when proper alignment (16-bytes) - is present. Move 0~15 bytes as needed to get DST quadword-aligned. */ -1: - bf 31,2f - lbz 6,0(src) - addi src,src,1 - stb 6,0(dst) - addi dst,dst,1 -2: - bf 30,4f - lhz 6,0(src) - addi src,src,2 - sth 6,0(dst) - addi dst,dst,2 -4: - bf 29,8f - lwz 6,0(src) - addi src,src,4 - stw 6,0(dst) - addi dst,dst,4 -8: - bf 28,0f - ld 6,0(src) - addi src,src,8 - std 6,0(dst) - addi dst,dst,8 -0: - srdi 9,cnt,4 /* Number of full quadwords remaining. */ - - /* The proper alignment is present, it is OK to copy the bytes now. */ -L(copy_GE_32_unaligned_cont): - - /* Setup two indexes to speed up the indexed vector operations. */ - clrldi 10,cnt,60 - li 6,16 /* Index for 16-bytes offsets. */ - li 7,32 /* Index for 32-bytes offsets. */ - cmpldi cr1,10,0 - srdi 8,cnt,5 /* Setup the loop counter. */ - mtocrf 0x01,9 - cmpldi cr6,9,1 -#ifdef __LITTLE_ENDIAN__ - lvsr 5,0,src -#else - lvsl 5,0,src -#endif - lvx 3,0,src - li 0,0 - bf 31,L(setup_unaligned_loop) - - /* Copy another 16 bytes to align to 32-bytes due to the loop. */ - lvx 4,src,6 -#ifdef __LITTLE_ENDIAN__ - vperm 6,4,3,5 -#else - vperm 6,3,4,5 -#endif - addi src,src,16 - stvx 6,0,dst - addi dst,dst,16 - vor 3,4,4 - clrrdi 0,src,60 - -L(setup_unaligned_loop): - mtctr 8 - ble cr6,L(end_unaligned_loop) - - /* Copy 32 bytes at a time using vector instructions. */ - .align 4 -L(unaligned_loop): - - /* Note: vr6/vr10 may contain data that was already copied, - but in order to get proper alignment, we may have to copy - some portions again. This is faster than having unaligned - vector instructions though. */ - - lvx 4,src,6 -#ifdef __LITTLE_ENDIAN__ - vperm 6,4,3,5 -#else - vperm 6,3,4,5 -#endif - lvx 3,src,7 -#ifdef __LITTLE_ENDIAN__ - vperm 10,3,4,5 -#else - vperm 10,4,3,5 -#endif - addi src,src,32 - stvx 6,0,dst - stvx 10,dst,6 - addi dst,dst,32 - bdnz L(unaligned_loop) - - clrrdi 0,src,60 - - .align 4 -L(end_unaligned_loop): - - /* Check for tail bytes. */ - mtocrf 0x01,cnt - beqlr cr1 - - add src,src,0 - - /* We have 1~15 tail bytes to copy, and DST is quadword aligned. */ - /* Copy 8 bytes. */ - bf 28,4f - lwz 6,0(src) - lwz 7,4(src) - addi src,src,8 - stw 6,0(dst) - stw 7,4(dst) - addi dst,dst,8 -4: /* Copy 4~7 bytes. */ - bf 29,L(tail2) - lwz 6,0(src) - stw 6,0(dst) - bf 30,L(tail5) - lhz 7,4(src) - sth 7,4(dst) - bflr 31 - lbz 8,6(src) - stb 8,6(dst) - /* Return original DST pointer. */ - blr - -END_GEN_TB (MEMCPY,TB_TOCLESS) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/powerpc/powerpc64/power7/memmove.S b/sysdeps/powerpc/powerpc64/power7/memmove.S deleted file mode 100644 index 4c0f7c3571..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/memmove.S +++ /dev/null @@ -1,835 +0,0 @@ -/* Optimized memmove implementation for PowerPC64/POWER7. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - -/* void* [r3] memmove (void *dest [r3], const void *src [r4], size_t len [r5]) - - This optimization check if memory 'dest' overlaps with 'src'. If it does - not then it calls an optimized memcpy call (similar to memcpy for POWER7, - embedded here to gain some cycles). - If source and destiny overlaps, a optimized backwards memcpy is used - instead. */ - -#ifndef MEMMOVE -# define MEMMOVE memmove -#endif - .machine power7 -EALIGN (MEMMOVE, 5, 0) - CALL_MCOUNT 3 - -L(_memmove): - subf r9,r4,r3 - cmpld cr7,r9,r5 - blt cr7,L(memmove_bwd) - - cmpldi cr1,r5,31 - neg 0,3 - ble cr1, L(copy_LT_32) /* If move < 32 bytes use short move - code. */ - - andi. 10,3,15 - clrldi 11,4,60 - cmpld cr6,10,11 /* SRC and DST alignments match? */ - - mr r11,3 - bne cr6,L(copy_GE_32_unaligned) - beq L(aligned_copy) - - mtocrf 0x01,0 - clrldi 0,0,60 - -/* Get the DST and SRC aligned to 8 bytes (16 for little-endian). */ -1: - bf 31,2f - lbz 6,0(r4) - addi r4,r4,1 - stb 6,0(r11) - addi r11,r11,1 -2: - bf 30,4f - lhz 6,0(r4) - addi r4,r4,2 - sth 6,0(r11) - addi r11,r11,2 -4: - bf 29,8f - lwz 6,0(r4) - addi r4,r4,4 - stw 6,0(r11) - addi r11,r11,4 -8: - bf 28,16f - ld 6,0(r4) - addi r4,r4,8 - std 6,0(r11) - addi r11,r11,8 -16: - subf r5,0,r5 - -/* Main aligned copy loop. Copies 128 bytes at a time. */ -L(aligned_copy): - li 6,16 - li 7,32 - li 8,48 - mtocrf 0x02,r5 - srdi 12,r5,7 - cmpdi 12,0 - beq L(aligned_tail) - lxvd2x 6,0,r4 - lxvd2x 7,r4,6 - mtctr 12 - b L(aligned_128loop) - - .align 4 -L(aligned_128head): - /* for the 2nd + iteration of this loop. */ - lxvd2x 6,0,r4 - lxvd2x 7,r4,6 -L(aligned_128loop): - lxvd2x 8,r4,7 - lxvd2x 9,r4,8 - stxvd2x 6,0,r11 - addi r4,r4,64 - stxvd2x 7,r11,6 - stxvd2x 8,r11,7 - stxvd2x 9,r11,8 - lxvd2x 6,0,r4 - lxvd2x 7,r4,6 - addi r11,r11,64 - lxvd2x 8,r4,7 - lxvd2x 9,r4,8 - addi r4,r4,64 - stxvd2x 6,0,r11 - stxvd2x 7,r11,6 - stxvd2x 8,r11,7 - stxvd2x 9,r11,8 - addi r11,r11,64 - bdnz L(aligned_128head) - -L(aligned_tail): - mtocrf 0x01,r5 - bf 25,32f - lxvd2x 6,0,r4 - lxvd2x 7,r4,6 - lxvd2x 8,r4,7 - lxvd2x 9,r4,8 - addi r4,r4,64 - stxvd2x 6,0,r11 - stxvd2x 7,r11,6 - stxvd2x 8,r11,7 - stxvd2x 9,r11,8 - addi r11,r11,64 -32: - bf 26,16f - lxvd2x 6,0,r4 - lxvd2x 7,r4,6 - addi r4,r4,32 - stxvd2x 6,0,r11 - stxvd2x 7,r11,6 - addi r11,r11,32 -16: - bf 27,8f - lxvd2x 6,0,r4 - addi r4,r4,16 - stxvd2x 6,0,r11 - addi r11,r11,16 -8: - bf 28,4f - ld 6,0(r4) - addi r4,r4,8 - std 6,0(r11) - addi r11,r11,8 -4: /* Copies 4~7 bytes. */ - bf 29,L(tail2) - lwz 6,0(r4) - stw 6,0(r11) - bf 30,L(tail5) - lhz 7,4(r4) - sth 7,4(r11) - bflr 31 - lbz 8,6(r4) - stb 8,6(r11) - /* Return original DST pointer. */ - blr - -/* Handle copies of 0~31 bytes. */ - .align 4 -L(copy_LT_32): - mr r11,3 - cmpldi cr6,r5,8 - mtocrf 0x01,r5 - ble cr6,L(copy_LE_8) - - /* At least 9 bytes to go. */ - neg 8,4 - andi. 0,8,3 - cmpldi cr1,r5,16 - beq L(copy_LT_32_aligned) - - /* Force 4-byte alignment for SRC. */ - mtocrf 0x01,0 - subf r5,0,r5 -2: - bf 30,1f - lhz 6,0(r4) - addi r4,r4,2 - sth 6,0(r11) - addi r11,r11,2 -1: - bf 31,L(end_4bytes_alignment) - lbz 6,0(r4) - addi r4,r4,1 - stb 6,0(r11) - addi r11,r11,1 - - .align 4 -L(end_4bytes_alignment): - cmpldi cr1,r5,16 - mtocrf 0x01,r5 - -L(copy_LT_32_aligned): - /* At least 6 bytes to go, and SRC is word-aligned. */ - blt cr1,8f - - /* Copy 16 bytes. */ - lwz 6,0(r4) - lwz 7,4(r4) - stw 6,0(r11) - lwz 8,8(r4) - stw 7,4(r11) - lwz 6,12(r4) - addi r4,r4,16 - stw 8,8(r11) - stw 6,12(r11) - addi r11,r11,16 -8: /* Copy 8 bytes. */ - bf 28,L(tail4) - lwz 6,0(r4) - lwz 7,4(r4) - addi r4,r4,8 - stw 6,0(r11) - stw 7,4(r11) - addi r11,r11,8 - - .align 4 -/* Copies 4~7 bytes. */ -L(tail4): - bf 29,L(tail2) - lwz 6,0(r4) - stw 6,0(r11) - bf 30,L(tail5) - lhz 7,4(r4) - sth 7,4(r11) - bflr 31 - lbz 8,6(r4) - stb 8,6(r11) - /* Return original DST pointer. */ - blr - - .align 4 -/* Copies 2~3 bytes. */ -L(tail2): - bf 30,1f - lhz 6,0(r4) - sth 6,0(r11) - bflr 31 - lbz 7,2(r4) - stb 7,2(r11) - blr - - .align 4 -L(tail5): - bflr 31 - lbz 6,4(r4) - stb 6,4(r11) - blr - - .align 4 -1: - bflr 31 - lbz 6,0(r4) - stb 6,0(r11) - /* Return original DST pointer. */ - blr - -/* Handles copies of 0~8 bytes. */ - .align 4 -L(copy_LE_8): - bne cr6,L(tail4) - - /* Though we could've used ld/std here, they are still - slow for unaligned cases. */ - - lwz 6,0(r4) - lwz 7,4(r4) - stw 6,0(r11) - stw 7,4(r11) - blr - - -/* Handle copies of 32+ bytes where DST is aligned (to quadword) but - SRC is not. Use aligned quadword loads from SRC, shifted to realign - the data, allowing for aligned DST stores. */ - .align 4 -L(copy_GE_32_unaligned): - clrldi 0,0,60 /* Number of bytes until the 1st r11 quadword. */ - srdi 9,r5,4 /* Number of full quadwords remaining. */ - - beq L(copy_GE_32_unaligned_cont) - - /* DST is not quadword aligned, get it aligned. */ - - mtocrf 0x01,0 - subf r5,0,r5 - - /* Vector instructions work best when proper alignment (16-bytes) - is present. Move 0~15 bytes as needed to get DST quadword-aligned. */ -1: - bf 31,2f - lbz 6,0(r4) - addi r4,r4,1 - stb 6,0(r11) - addi r11,r11,1 -2: - bf 30,4f - lhz 6,0(r4) - addi r4,r4,2 - sth 6,0(r11) - addi r11,r11,2 -4: - bf 29,8f - lwz 6,0(r4) - addi r4,r4,4 - stw 6,0(r11) - addi r11,r11,4 -8: - bf 28,0f - ld 6,0(r4) - addi r4,r4,8 - std 6,0(r11) - addi r11,r11,8 -0: - srdi 9,r5,4 /* Number of full quadwords remaining. */ - - /* The proper alignment is present, it is OK to copy the bytes now. */ -L(copy_GE_32_unaligned_cont): - - /* Setup two indexes to speed up the indexed vector operations. */ - clrldi 10,r5,60 - li 6,16 /* Index for 16-bytes offsets. */ - li 7,32 /* Index for 32-bytes offsets. */ - cmpldi cr1,10,0 - srdi 8,r5,5 /* Setup the loop counter. */ - mtocrf 0x01,9 - cmpldi cr6,9,1 -#ifdef __LITTLE_ENDIAN__ - lvsr 5,0,r4 -#else - lvsl 5,0,r4 -#endif - lvx 3,0,r4 - li 0,0 - bf 31,L(setup_unaligned_loop) - - /* Copy another 16 bytes to align to 32-bytes due to the loop. */ - lvx 4,r4,6 -#ifdef __LITTLE_ENDIAN__ - vperm 6,4,3,5 -#else - vperm 6,3,4,5 -#endif - addi r4,r4,16 - stvx 6,0,r11 - addi r11,r11,16 - vor 3,4,4 - clrrdi 0,r4,60 - -L(setup_unaligned_loop): - mtctr 8 - ble cr6,L(end_unaligned_loop) - - /* Copy 32 bytes at a time using vector instructions. */ - .align 4 -L(unaligned_loop): - - /* Note: vr6/vr10 may contain data that was already copied, - but in order to get proper alignment, we may have to copy - some portions again. This is faster than having unaligned - vector instructions though. */ - - lvx 4,r4,6 -#ifdef __LITTLE_ENDIAN__ - vperm 6,4,3,5 -#else - vperm 6,3,4,5 -#endif - lvx 3,r4,7 -#ifdef __LITTLE_ENDIAN__ - vperm 10,3,4,5 -#else - vperm 10,4,3,5 -#endif - addi r4,r4,32 - stvx 6,0,r11 - stvx 10,r11,6 - addi r11,r11,32 - bdnz L(unaligned_loop) - - clrrdi 0,r4,60 - - .align 4 -L(end_unaligned_loop): - - /* Check for tail bytes. */ - mtocrf 0x01,r5 - beqlr cr1 - - add r4,r4,0 - - /* We have 1~15 tail bytes to copy, and DST is quadword aligned. */ - /* Copy 8 bytes. */ - bf 28,4f - lwz 6,0(r4) - lwz 7,4(r4) - addi r4,r4,8 - stw 6,0(r11) - stw 7,4(r11) - addi r11,r11,8 -4: /* Copy 4~7 bytes. */ - bf 29,L(tail2) - lwz 6,0(r4) - stw 6,0(r11) - bf 30,L(tail5) - lhz 7,4(r4) - sth 7,4(r11) - bflr 31 - lbz 8,6(r4) - stb 8,6(r11) - /* Return original DST pointer. */ - blr - - /* Start to memcpy backward implementation: the algorith first check if - src and dest have the same alignment and if it does align both to 16 - bytes and copy using VSX instructions. - If does not, align dest to 16 bytes and use VMX (altivec) instruction - to read two 16 bytes at time, shift/permute the bytes read and write - aligned to dest. */ -L(memmove_bwd): - cmpldi cr1,r5,31 - /* Copy is done backwards: update the pointers and check alignment. */ - add r11,r3,r5 - add r4,r4,r5 - mr r0,r11 - ble cr1, L(copy_LT_32_bwd) /* If move < 32 bytes use short move - code. */ - - andi. r10,r11,15 /* Check if r11 is aligned to 16 bytes */ - clrldi r9,r4,60 /* Check if r4 is aligned to 16 bytes */ - cmpld cr6,r10,r9 /* SRC and DST alignments match? */ - - bne cr6,L(copy_GE_32_unaligned_bwd) - beq L(aligned_copy_bwd) - - mtocrf 0x01,r0 - clrldi r0,r0,60 - -/* Get the DST and SRC aligned to 16 bytes. */ -1: - bf 31,2f - lbz r6,-1(r4) - subi r4,r4,1 - stb r6,-1(r11) - subi r11,r11,1 -2: - bf 30,4f - lhz r6,-2(r4) - subi r4,r4,2 - sth r6,-2(r11) - subi r11,r11,2 -4: - bf 29,8f - lwz r6,-4(r4) - subi r4,r4,4 - stw r6,-4(r11) - subi r11,r11,4 -8: - bf 28,16f - ld r6,-8(r4) - subi r4,r4,8 - std r6,-8(r11) - subi r11,r11,8 -16: - subf r5,0,r5 - -/* Main aligned copy loop. Copies 128 bytes at a time. */ -L(aligned_copy_bwd): - li r6,-16 - li r7,-32 - li r8,-48 - li r9,-64 - mtocrf 0x02,r5 - srdi r12,r5,7 - cmpdi r12,0 - beq L(aligned_tail_bwd) - lxvd2x v6,r4,r6 - lxvd2x v7,r4,r7 - mtctr 12 - b L(aligned_128loop_bwd) - - .align 4 -L(aligned_128head_bwd): - /* for the 2nd + iteration of this loop. */ - lxvd2x v6,r4,r6 - lxvd2x v7,r4,r7 -L(aligned_128loop_bwd): - lxvd2x v8,r4,r8 - lxvd2x v9,r4,r9 - stxvd2x v6,r11,r6 - subi r4,r4,64 - stxvd2x v7,r11,r7 - stxvd2x v8,r11,r8 - stxvd2x v9,r11,r9 - lxvd2x v6,r4,r6 - lxvd2x v7,r4,7 - subi r11,r11,64 - lxvd2x v8,r4,r8 - lxvd2x v9,r4,r9 - subi r4,r4,64 - stxvd2x v6,r11,r6 - stxvd2x v7,r11,r7 - stxvd2x v8,r11,r8 - stxvd2x v9,r11,r9 - subi r11,r11,64 - bdnz L(aligned_128head_bwd) - -L(aligned_tail_bwd): - mtocrf 0x01,r5 - bf 25,32f - lxvd2x v6,r4,r6 - lxvd2x v7,r4,r7 - lxvd2x v8,r4,r8 - lxvd2x v9,r4,r9 - subi r4,r4,64 - stxvd2x v6,r11,r6 - stxvd2x v7,r11,r7 - stxvd2x v8,r11,r8 - stxvd2x v9,r11,r9 - subi r11,r11,64 -32: - bf 26,16f - lxvd2x v6,r4,r6 - lxvd2x v7,r4,r7 - subi r4,r4,32 - stxvd2x v6,r11,r6 - stxvd2x v7,r11,r7 - subi r11,r11,32 -16: - bf 27,8f - lxvd2x v6,r4,r6 - subi r4,r4,16 - stxvd2x v6,r11,r6 - subi r11,r11,16 -8: - bf 28,4f - ld r6,-8(r4) - subi r4,r4,8 - std r6,-8(r11) - subi r11,r11,8 -4: /* Copies 4~7 bytes. */ - bf 29,L(tail2_bwd) - lwz r6,-4(r4) - stw r6,-4(r11) - bf 30,L(tail5_bwd) - lhz r7,-6(r4) - sth r7,-6(r11) - bflr 31 - lbz r8,-7(r4) - stb r8,-7(r11) - /* Return original DST pointer. */ - blr - -/* Handle copies of 0~31 bytes. */ - .align 4 -L(copy_LT_32_bwd): - cmpldi cr6,r5,8 - mtocrf 0x01,r5 - ble cr6,L(copy_LE_8_bwd) - - /* At least 9 bytes to go. */ - neg r8,r4 - andi. r0,r8,3 - cmpldi cr1,r5,16 - beq L(copy_LT_32_aligned_bwd) - - /* Force 4-byte alignment for SRC. */ - mtocrf 0x01,0 - subf r5,0,r5 -2: - bf 30,1f - lhz r6,-2(r4) - subi r4,r4,2 - sth r6,-2(r11) - subi r11,r11,2 -1: - bf 31,L(end_4bytes_alignment_bwd) - lbz 6,-1(r4) - subi r4,r4,1 - stb 6,-1(r11) - subi r11,r11,1 - - .align 4 -L(end_4bytes_alignment_bwd): - cmpldi cr1,r5,16 - mtocrf 0x01,r5 - -L(copy_LT_32_aligned_bwd): - /* At least 6 bytes to go, and SRC is word-aligned. */ - blt cr1,8f - - /* Copy 16 bytes. */ - lwz r6,-4(r4) - lwz r7,-8(r4) - stw r6,-4(r11) - lwz r8,-12(r4) - stw r7,-8(r11) - lwz r6,-16(r4) - subi r4,r4,16 - stw r8,-12(r11) - stw r6,-16(r11) - subi r11,r11,16 -8: /* Copy 8 bytes. */ - bf 28,L(tail4_bwd) - lwz r6,-4(r4) - lwz r7,-8(r4) - subi r4,r4,8 - stw r6,-4(r11) - stw r7,-8(r11) - subi r11,r11,8 - - .align 4 -/* Copies 4~7 bytes. */ -L(tail4_bwd): - bf 29,L(tail2_bwd) - lwz 6,-4(r4) - stw 6,-4(r11) - bf 30,L(tail5_bwd) - lhz 7,-6(r4) - sth 7,-6(r11) - bflr 31 - lbz 8,-7(r4) - stb 8,-7(r11) - /* Return original DST pointer. */ - blr - - .align 4 -/* Copies 2~3 bytes. */ -L(tail2_bwd): - bf 30,1f - lhz 6,-2(r4) - sth 6,-2(r11) - bflr 31 - lbz 7,-3(r4) - stb 7,-3(r11) - blr - - .align 4 -L(tail5_bwd): - bflr 31 - lbz 6,-5(r4) - stb 6,-5(r11) - blr - - .align 4 -1: - bflr 31 - lbz 6,-1(r4) - stb 6,-1(r11) - /* Return original DST pointer. */ - blr - - -/* Handles copies of 0~8 bytes. */ - .align 4 -L(copy_LE_8_bwd): - bne cr6,L(tail4_bwd) - - /* Though we could've used ld/std here, they are still - slow for unaligned cases. */ - lwz 6,-8(r4) - lwz 7,-4(r4) - stw 6,-8(r11) - stw 7,-4(r11) - blr - - -/* Handle copies of 32+ bytes where DST is aligned (to quadword) but - SRC is not. Use aligned quadword loads from SRC, shifted to realign - the data, allowing for aligned DST stores. */ - .align 4 -L(copy_GE_32_unaligned_bwd): - andi. r10,r11,15 /* Check alignment of DST against 16 bytes.. */ - srdi r9,r5,4 /* Number of full quadwords remaining. */ - - beq L(copy_GE_32_unaligned_cont_bwd) - - /* DST is not quadword aligned and r10 holds the address masked to - compare alignments. */ - mtocrf 0x01,r10 - subf r5,r10,r5 - - /* Vector instructions work best when proper alignment (16-bytes) - is present. Move 0~15 bytes as needed to get DST quadword-aligned. */ -1: - bf 31,2f - lbz r6,-1(r4) - subi r4,r4,1 - stb r6,-1(r11) - subi r11,r11,1 -2: - bf 30,4f - lhz r6,-2(r4) - subi r4,r4,2 - sth r6,-2(r11) - subi r11,r11,2 -4: - bf 29,8f - lwz r6,-4(r4) - subi r4,r4,4 - stw r6,-4(r11) - subi r11,r11,4 -8: - bf 28,0f - ld r6,-8(r4) - subi r4,r4,8 - std r6,-8(r11) - subi r11,r11,8 -0: - srdi r9,r5,4 /* Number of full quadwords remaining. */ - - /* The proper alignment is present, it is OK to copy the bytes now. */ -L(copy_GE_32_unaligned_cont_bwd): - - /* Setup two indexes to speed up the indexed vector operations. */ - clrldi r10,r5,60 - li r6,-16 /* Index for 16-bytes offsets. */ - li r7,-32 /* Index for 32-bytes offsets. */ - cmpldi cr1,10,0 - srdi r8,r5,5 /* Setup the loop counter. */ - mtocrf 0x01,9 - cmpldi cr6,r9,1 -#ifdef __LITTLE_ENDIAN__ - lvsr v5,r0,r4 -#else - lvsl v5,r0,r4 -#endif - lvx v3,0,r4 - li r0,0 - bf 31,L(setup_unaligned_loop_bwd) - - /* Copy another 16 bytes to align to 32-bytes due to the loop. */ - lvx v4,r4,r6 -#ifdef __LITTLE_ENDIAN__ - vperm v6,v3,v4,v5 -#else - vperm v6,v4,v3,v5 -#endif - subi r4,r4,16 - stvx v6,r11,r6 - subi r11,r11,16 - vor v3,v4,v4 - clrrdi r0,r4,60 - -L(setup_unaligned_loop_bwd): - mtctr r8 - ble cr6,L(end_unaligned_loop_bwd) - - /* Copy 32 bytes at a time using vector instructions. */ - .align 4 -L(unaligned_loop_bwd): - - /* Note: vr6/vr10 may contain data that was already copied, - but in order to get proper alignment, we may have to copy - some portions again. This is faster than having unaligned - vector instructions though. */ - - lvx v4,r4,r6 -#ifdef __LITTLE_ENDIAN__ - vperm v6,v3,v4,v5 -#else - vperm v6,v4,v3,v5 -#endif - lvx v3,r4,r7 -#ifdef __LITTLE_ENDIAN__ - vperm v10,v4,v3,v5 -#else - vperm v10,v3,v4,v5 -#endif - subi r4,r4,32 - stvx v6,r11,r6 - stvx v10,r11,r7 - subi r11,r11,32 - bdnz L(unaligned_loop_bwd) - - clrrdi r0,r4,60 - - .align 4 -L(end_unaligned_loop_bwd): - - /* Check for tail bytes. */ - mtocrf 0x01,r5 - beqlr cr1 - - add r4,r4,0 - - /* We have 1~15 tail bytes to copy, and DST is quadword aligned. */ - /* Copy 8 bytes. */ - bf 28,4f - lwz r6,-4(r4) - lwz r7,-8(r4) - subi r4,r4,8 - stw r6,-4(r11) - stw r7,-8(r11) - subi r11,r11,8 -4: /* Copy 4~7 bytes. */ - bf 29,L(tail2_bwd) - lwz r6,-4(r4) - stw r6,-4(r11) - bf 30,L(tail5_bwd) - lhz r7,-6(r4) - sth r7,-6(r11) - bflr 31 - lbz r8,-7(r4) - stb r8,-7(r11) - /* Return original DST pointer. */ - blr -END_GEN_TB (MEMMOVE, TB_TOCLESS) -libc_hidden_builtin_def (memmove) - - -/* void bcopy(const void *src [r3], void *dest [r4], size_t n [r5]) - Implemented in this file to avoid linker create a stub function call - in the branch to '_memmove'. */ -ENTRY (__bcopy) - mr r6,r3 - mr r3,r4 - mr r4,r6 - b L(_memmove) -END (__bcopy) -weak_alias (__bcopy, bcopy) diff --git a/sysdeps/powerpc/powerpc64/power7/mempcpy.S b/sysdeps/powerpc/powerpc64/power7/mempcpy.S deleted file mode 100644 index 4e15d1e40c..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/mempcpy.S +++ /dev/null @@ -1,472 +0,0 @@ -/* Optimized mempcpy implementation for POWER7. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - -/* __ptr_t [r3] __mempcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]); - Returns 'dst' + 'len'. */ - -#ifndef MEMPCPY -# define MEMPCPY __mempcpy -#endif - .machine power7 -EALIGN (MEMPCPY, 5, 0) - CALL_MCOUNT 3 - - cmpldi cr1,5,31 - neg 0,3 - std 3,-16(1) - std 31,-8(1) - cfi_offset(31,-8) - ble cr1,L(copy_LT_32) /* If move < 32 bytes use short move - code. */ - - andi. 11,3,7 /* Check alignment of DST. */ - - - clrldi 10,4,61 /* Check alignment of SRC. */ - cmpld cr6,10,11 /* SRC and DST alignments match? */ - mr 12,4 - mr 31,5 - bne cr6,L(copy_GE_32_unaligned) - - srdi 9,5,3 /* Number of full quadwords remaining. */ - - beq L(copy_GE_32_aligned_cont) - - clrldi 0,0,61 - mtcrf 0x01,0 - subf 31,0,5 - - /* Get the SRC aligned to 8 bytes. */ - -1: bf 31,2f - lbz 6,0(12) - addi 12,12,1 - stb 6,0(3) - addi 3,3,1 -2: bf 30,4f - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -4: bf 29,0f - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -0: - clrldi 10,12,61 /* Check alignment of SRC again. */ - srdi 9,31,3 /* Number of full doublewords remaining. */ - -L(copy_GE_32_aligned_cont): - - clrldi 11,31,61 - mtcrf 0x01,9 - - srdi 8,31,5 - cmpldi cr1,9,4 - cmpldi cr6,11,0 - mr 11,12 - - /* Copy 1~3 doublewords so the main loop starts - at a multiple of 32 bytes. */ - - bf 30,1f - ld 6,0(12) - ld 7,8(12) - addi 11,12,16 - mtctr 8 - std 6,0(3) - std 7,8(3) - addi 10,3,16 - bf 31,4f - ld 0,16(12) - std 0,16(3) - blt cr1,3f - addi 11,12,24 - addi 10,3,24 - b 4f - - .align 4 -1: /* Copy 1 doubleword and set the counter. */ - mr 10,3 - mtctr 8 - bf 31,4f - ld 6,0(12) - addi 11,12,8 - std 6,0(3) - addi 10,3,8 - - /* Main aligned copy loop. Copies 32-bytes at a time. */ - .align 4 -4: - ld 6,0(11) - ld 7,8(11) - ld 8,16(11) - ld 0,24(11) - addi 11,11,32 - - std 6,0(10) - std 7,8(10) - std 8,16(10) - std 0,24(10) - addi 10,10,32 - bdnz 4b -3: - - /* Check for tail bytes. */ - rldicr 0,31,0,60 - mtcrf 0x01,31 - beq cr6,0f - -.L9: - add 3,3,0 - add 12,12,0 - - /* At this point we have a tail of 0-7 bytes and we know that the - destination is doubleword-aligned. */ -4: /* Copy 4 bytes. */ - bf 29,2f - - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: /* Copy 2 bytes. */ - bf 30,1f - - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -1: /* Copy 1 byte. */ - bf 31,0f - - lbz 6,0(12) - stb 6,0(3) -0: /* Return DST + LEN pointer. */ - ld 31,-8(1) - ld 3,-16(1) - add 3,3,5 - blr - - /* Handle copies of 0~31 bytes. */ - .align 4 -L(copy_LT_32): - cmpldi cr6,5,8 - mr 12,4 - mtcrf 0x01,5 - ble cr6,L(copy_LE_8) - - /* At least 9 bytes to go. */ - neg 8,4 - clrrdi 11,4,2 - andi. 0,8,3 - cmpldi cr1,5,16 - mr 10,5 - beq L(copy_LT_32_aligned) - - /* Force 4-bytes alignment for SRC. */ - mtocrf 0x01,0 - subf 10,0,5 -2: bf 30,1f - - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -1: bf 31,L(end_4bytes_alignment) - - lbz 6,0(12) - addi 12,12,1 - stb 6,0(3) - addi 3,3,1 - - .align 4 -L(end_4bytes_alignment): - cmpldi cr1,10,16 - mtcrf 0x01,10 - -L(copy_LT_32_aligned): - /* At least 6 bytes to go, and SRC is word-aligned. */ - blt cr1,8f - - /* Copy 16 bytes. */ - lwz 6,0(12) - lwz 7,4(12) - stw 6,0(3) - lwz 8,8(12) - stw 7,4(3) - lwz 6,12(12) - addi 12,12,16 - stw 8,8(3) - stw 6,12(3) - addi 3,3,16 -8: /* Copy 8 bytes. */ - bf 28,4f - - lwz 6,0(12) - lwz 7,4(12) - addi 12,12,8 - stw 6,0(3) - stw 7,4(3) - addi 3,3,8 -4: /* Copy 4 bytes. */ - bf 29,2f - - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: /* Copy 2-3 bytes. */ - bf 30,1f - - lhz 6,0(12) - sth 6,0(3) - bf 31,0f - lbz 7,2(12) - stb 7,2(3) - ld 3,-16(1) - add 3,3,5 - blr - - .align 4 -1: /* Copy 1 byte. */ - bf 31,0f - - lbz 6,0(12) - stb 6,0(3) -0: /* Return DST + LEN pointer. */ - ld 3,-16(1) - add 3,3,5 - blr - - /* Handles copies of 0~8 bytes. */ - .align 4 -L(copy_LE_8): - bne cr6,4f - - /* Though we could've used ld/std here, they are still - slow for unaligned cases. */ - - lwz 6,0(4) - lwz 7,4(4) - stw 6,0(3) - stw 7,4(3) - ld 3,-16(1) /* Return DST + LEN pointer. */ - add 3,3,5 - blr - - .align 4 -4: /* Copies 4~7 bytes. */ - bf 29,2b - - lwz 6,0(4) - stw 6,0(3) - bf 30,5f - lhz 7,4(4) - sth 7,4(3) - bf 31,0f - lbz 8,6(4) - stb 8,6(3) - ld 3,-16(1) - add 3,3,5 - blr - - .align 4 -5: /* Copy 1 byte. */ - bf 31,0f - - lbz 6,4(4) - stb 6,4(3) - -0: /* Return DST + LEN pointer. */ - ld 3,-16(1) - add 3,3,5 - blr - - /* Handle copies of 32+ bytes where DST is aligned (to quadword) but - SRC is not. Use aligned quadword loads from SRC, shifted to realign - the data, allowing for aligned DST stores. */ - .align 4 -L(copy_GE_32_unaligned): - clrldi 0,0,60 /* Number of bytes until the 1st - quadword. */ - andi. 11,3,15 /* Check alignment of DST (against - quadwords). */ - srdi 9,5,4 /* Number of full quadwords remaining. */ - - beq L(copy_GE_32_unaligned_cont) - - /* SRC is not quadword aligned, get it aligned. */ - - mtcrf 0x01,0 - subf 31,0,5 - - /* Vector instructions work best when proper alignment (16-bytes) - is present. Move 0~15 bytes as needed to get DST quadword-aligned. */ -1: /* Copy 1 byte. */ - bf 31,2f - - lbz 6,0(12) - addi 12,12,1 - stb 6,0(3) - addi 3,3,1 -2: /* Copy 2 bytes. */ - bf 30,4f - - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -4: /* Copy 4 bytes. */ - bf 29,8f - - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -8: /* Copy 8 bytes. */ - bf 28,0f - - ld 6,0(12) - addi 12,12,8 - std 6,0(3) - addi 3,3,8 -0: - clrldi 10,12,60 /* Check alignment of SRC. */ - srdi 9,31,4 /* Number of full quadwords remaining. */ - - /* The proper alignment is present, it is OK to copy the bytes now. */ -L(copy_GE_32_unaligned_cont): - - /* Setup two indexes to speed up the indexed vector operations. */ - clrldi 11,31,60 - li 6,16 /* Index for 16-bytes offsets. */ - li 7,32 /* Index for 32-bytes offsets. */ - cmpldi cr1,11,0 - srdi 8,31,5 /* Setup the loop counter. */ - mr 10,3 - mr 11,12 - mtcrf 0x01,9 - cmpldi cr6,9,1 -#ifdef __LITTLE_ENDIAN__ - lvsr 5,0,12 -#else - lvsl 5,0,12 -#endif - lvx 3,0,12 - bf 31,L(setup_unaligned_loop) - - /* Copy another 16 bytes to align to 32-bytes due to the loop . */ - lvx 4,12,6 -#ifdef __LITTLE_ENDIAN__ - vperm 6,4,3,5 -#else - vperm 6,3,4,5 -#endif - addi 11,12,16 - addi 10,3,16 - stvx 6,0,3 - vor 3,4,4 - -L(setup_unaligned_loop): - mtctr 8 - ble cr6,L(end_unaligned_loop) - - /* Copy 32 bytes at a time using vector instructions. */ - .align 4 -L(unaligned_loop): - - /* Note: vr6/vr10 may contain data that was already copied, - but in order to get proper alignment, we may have to copy - some portions again. This is faster than having unaligned - vector instructions though. */ - - lvx 4,11,6 /* vr4 = r11+16. */ -#ifdef __LITTLE_ENDIAN__ - vperm 6,4,3,5 -#else - vperm 6,3,4,5 -#endif - lvx 3,11,7 /* vr3 = r11+32. */ -#ifdef __LITTLE_ENDIAN__ - vperm 10,3,4,5 -#else - vperm 10,4,3,5 -#endif - addi 11,11,32 - stvx 6,0,10 - stvx 10,10,6 - addi 10,10,32 - - bdnz L(unaligned_loop) - - .align 4 -L(end_unaligned_loop): - - /* Check for tail bytes. */ - rldicr 0,31,0,59 - mtcrf 0x01,31 - beq cr1,0f - - add 3,3,0 - add 12,12,0 - - /* We have 1~15 tail bytes to copy, and DST is quadword aligned. */ -8: /* Copy 8 bytes. */ - bf 28,4f - - lwz 6,0(12) - lwz 7,4(12) - addi 12,12,8 - stw 6,0(3) - stw 7,4(3) - addi 3,3,8 -4: /* Copy 4 bytes. */ - bf 29,2f - - lwz 6,0(12) - addi 12,12,4 - stw 6,0(3) - addi 3,3,4 -2: /* Copy 2~3 bytes. */ - bf 30,1f - - lhz 6,0(12) - addi 12,12,2 - sth 6,0(3) - addi 3,3,2 -1: /* Copy 1 byte. */ - bf 31,0f - - lbz 6,0(12) - stb 6,0(3) -0: /* Return DST + LEN pointer. */ - ld 31,-8(1) - ld 3,-16(1) - add 3,3,5 - blr - -END_GEN_TB (MEMPCPY,TB_TOCLESS) -libc_hidden_def (__mempcpy) -weak_alias (__mempcpy, mempcpy) -libc_hidden_builtin_def (mempcpy) diff --git a/sysdeps/powerpc/powerpc64/power7/memrchr.S b/sysdeps/powerpc/powerpc64/power7/memrchr.S deleted file mode 100644 index 4276768915..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/memrchr.S +++ /dev/null @@ -1,201 +0,0 @@ -/* Optimized memrchr implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] memrchr (char *s [r3], int byte [r4], int size [r5]) */ - -#ifndef MEMRCHR -# define MEMRCHR __memrchr -#endif - .machine power7 -ENTRY (MEMRCHR) - CALL_MCOUNT 3 - add r7,r3,r5 /* Calculate the last acceptable address. */ - neg r0,r7 - addi r7,r7,-1 - mr r10,r3 - clrrdi r6,r7,7 - li r9,3<<5 - dcbt r9,r6,8 /* Stream hint, decreasing addresses. */ - - /* Replicate BYTE to doubleword. */ - insrdi r4,r4,8,48 - insrdi r4,r4,16,32 - insrdi r4,r4,32,0 - li r6,-8 - li r9,-1 - rlwinm r0,r0,3,26,28 /* Calculate padding. */ - clrrdi r8,r7,3 - srd r9,r9,r0 - cmpldi r5,32 - clrrdi r0,r10,3 - ble L(small_range) - -#ifdef __LITTLE_ENDIAN__ - ldx r12,0,r8 -#else - ldbrx r12,0,r8 /* Load reversed doubleword from memory. */ -#endif - cmpb r3,r12,r4 /* Check for BYTE in DWORD1. */ - and r3,r3,r9 - cmpldi cr7,r3,0 /* If r3 == 0, no BYTEs have been found. */ - bne cr7,L(done) - - mtcrf 0x01,r8 - /* Are we now aligned to a quadword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - bf 28,L(loop_setup) - - /* Handle DWORD2 of pair. */ -#ifdef __LITTLE_ENDIAN__ - ldx r12,r8,r6 -#else - ldbrx r12,r8,r6 -#endif - addi r8,r8,-8 - cmpb r3,r12,r4 - cmpldi cr7,r3,0 - bne cr7,L(done) - -L(loop_setup): - /* The last dword we want to read in the loop below is the one - containing the first byte of the string, ie. the dword at - s & ~7, or r0. The first dword read is at r8 - 8, we - read 2 * cnt dwords, so the last dword read will be at - r8 - 8 - 16 * cnt + 8. Solving for cnt gives - cnt = (r8 - r0) / 16 */ - sub r5,r8,r0 - addi r8,r8,-8 - srdi r9,r5,4 /* Number of loop iterations. */ - mtctr r9 /* Setup the counter. */ - - /* Main loop to look for BYTE backwards in the string. - FIXME: Investigate whether 32 byte align helps with this - 9 instruction loop. */ - .align 5 -L(loop): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the byte-checking process for bigger strings. */ - -#ifdef __LITTLE_ENDIAN__ - ldx r12,0,r8 - ldx r11,r8,r6 -#else - ldbrx r12,0,r8 - ldbrx r11,r8,r6 -#endif - cmpb r3,r12,r4 - cmpb r9,r11,r4 - or r5,r9,r3 /* Merge everything in one doubleword. */ - cmpldi cr7,r5,0 - bne cr7,L(found) - addi r8,r8,-16 - bdnz L(loop) - - /* We may have one more word to read. */ - cmpld r8,r0 - bnelr - -#ifdef __LITTLE_ENDIAN__ - ldx r12,0,r8 -#else - ldbrx r12,0,r8 -#endif - cmpb r3,r12,r4 - cmpldi cr7,r3,0 - bne cr7,L(done) - blr - - .align 4 -L(found): - /* OK, one (or both) of the dwords contains BYTE. Check - the first dword. */ - cmpldi cr6,r3,0 - bne cr6,L(done) - - /* BYTE must be in the second word. Adjust the address - again and move the result of cmpb to r3 so we can calculate the - pointer. */ - - mr r3,r9 - addi r8,r8,-8 - - /* r3 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as BYTE in the original - word from the string. Use that to calculate the pointer. - We need to make sure BYTE is *before* the end of the - range. */ -L(done): - cntlzd r9,r3 /* Count leading zeros before the match. */ - cmpld r8,r0 /* Are we on the last word? */ - srdi r6,r9,3 /* Convert leading zeros to bytes. */ - addi r0,r6,-7 - sub r3,r8,r0 - cmpld cr7,r3,r10 - bnelr - bgelr cr7 - li r3,0 - blr - - .align 4 -L(null): - li r3,0 - blr - -/* Deals with size <= 32. */ - .align 4 -L(small_range): - cmpldi r5,0 - beq L(null) - -#ifdef __LITTLE_ENDIAN__ - ldx r12,0,r8 -#else - ldbrx r12,0,r8 /* Load reversed doubleword from memory. */ -#endif - cmpb r3,r12,r4 /* Check for BYTE in DWORD1. */ - and r3,r3,r9 - cmpldi cr7,r3,0 - bne cr7,L(done) - - /* Are we done already? */ - cmpld r8,r0 - addi r8,r8,-8 - beqlr - - .align 5 -L(loop_small): -#ifdef __LITTLE_ENDIAN__ - ldx r12,0,r8 -#else - ldbrx r12,0,r8 -#endif - cmpb r3,r12,r4 - cmpld r8,r0 - cmpldi cr7,r3,0 - bne cr7,L(done) - addi r8,r8,-8 - bne L(loop_small) - blr - -END (MEMRCHR) -weak_alias (__memrchr, memrchr) -libc_hidden_builtin_def (memrchr) diff --git a/sysdeps/powerpc/powerpc64/power7/memset.S b/sysdeps/powerpc/powerpc64/power7/memset.S deleted file mode 100644 index 21933c0672..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/memset.S +++ /dev/null @@ -1,399 +0,0 @@ -/* Optimized memset implementation for PowerPC64/POWER7. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); - Returns 's'. */ - -#ifndef MEMSET -# define MEMSET memset -#endif - .machine power7 -EALIGN (MEMSET, 5, 0) - CALL_MCOUNT 3 - -L(_memset): - cmpldi cr7,5,31 - cmpldi cr6,5,8 - mr 10,3 - - /* Replicate byte to word. */ - insrdi 4,4,8,48 - insrdi 4,4,16,32 - ble cr6,L(small) /* If length <= 8, use short copy code. */ - - neg 0,3 - ble cr7,L(medium) /* If length < 32, use medium copy code. */ - - andi. 11,10,7 /* Check alignment of SRC. */ - insrdi 4,4,32,0 /* Replicate word to double word. */ - - mr 12,5 - beq L(big_aligned) - - clrldi 0,0,61 - mtocrf 0x01,0 - subf 5,0,5 - - /* Get DST aligned to 8 bytes. */ -1: bf 31,2f - - stb 4,0(10) - addi 10,10,1 -2: bf 30,4f - - sth 4,0(10) - addi 10,10,2 -4: bf 29,L(big_aligned) - - stw 4,0(10) - addi 10,10,4 - - .align 4 -L(big_aligned): - - cmpldi cr5,5,255 - li 0,32 - dcbtst 0,10 - cmpldi cr6,4,0 - srdi 9,5,3 /* Number of full doublewords remaining. */ - crand 27,26,21 - mtocrf 0x01,9 - bt 27,L(huge) - - /* From this point on, we'll copy 32+ bytes and the value - isn't 0 (so we can't use dcbz). */ - - srdi 8,5,5 - clrldi 11,5,61 - cmpldi cr6,11,0 - cmpldi cr1,9,4 - mtctr 8 - - /* Copy 1~3 doublewords so the main loop starts - at a multiple of 32 bytes. */ - - bf 30,1f - - std 4,0(10) - std 4,8(10) - addi 10,10,16 - bf 31,L(big_loop) - - std 4,0(10) - addi 10,10,8 - mr 12,10 - blt cr1,L(tail_bytes) - b L(big_loop) - - .align 4 -1: /* Copy 1 doubleword. */ - bf 31,L(big_loop) - - std 4,0(10) - addi 10,10,8 - - /* Main aligned copy loop. Copies 32-bytes at a time and - ping-pong through r10 and r12 to avoid AGEN delays. */ - .align 4 -L(big_loop): - addi 12,10,32 - std 4,0(10) - std 4,8(10) - std 4,16(10) - std 4,24(10) - bdz L(tail_bytes) - - addi 10,10,64 - std 4,0(12) - std 4,8(12) - std 4,16(12) - std 4,24(12) - bdnz L(big_loop) - - mr 12,10 - b L(tail_bytes) - - .align 4 -L(tail_bytes): - - /* Check for tail bytes. */ - beqlr cr6 - - clrldi 0,5,61 - mtocrf 0x01,0 - - /* At this point we have a tail of 0-7 bytes and we know that the - destination is doubleword-aligned. */ -4: /* Copy 4 bytes. */ - bf 29,2f - - stw 4,0(12) - addi 12,12,4 -2: /* Copy 2 bytes. */ - bf 30,1f - - sth 4,0(12) - addi 12,12,2 -1: /* Copy 1 byte. */ - bflr 31 - - stb 4,0(12) - blr - - /* Special case when value is 0 and we have a long length to deal - with. Use dcbz to zero out 128-bytes at a time. Before using - dcbz though, we need to get the destination 128-bytes aligned. */ - .align 4 -L(huge): - andi. 11,10,127 - neg 0,10 - beq L(huge_aligned) - - clrldi 0,0,57 - subf 5,0,5 - srdi 0,0,3 - mtocrf 0x01,0 - - /* Get DST aligned to 128 bytes. */ -8: bf 28,4f - - std 4,0(10) - std 4,8(10) - std 4,16(10) - std 4,24(10) - std 4,32(10) - std 4,40(10) - std 4,48(10) - std 4,56(10) - addi 10,10,64 - .align 4 -4: bf 29,2f - - std 4,0(10) - std 4,8(10) - std 4,16(10) - std 4,24(10) - addi 10,10,32 - .align 4 -2: bf 30,1f - - std 4,0(10) - std 4,8(10) - addi 10,10,16 - .align 4 -1: bf 31,L(huge_aligned) - - std 4,0(10) - addi 10,10,8 - - -L(huge_aligned): - srdi 8,5,7 - clrldi 11,5,57 - cmpldi cr6,11,0 - mtctr 8 - - .align 4 -L(huge_loop): - dcbz 0,10 - addi 10,10,128 - bdnz L(huge_loop) - - /* Check how many bytes are still left. */ - beqlr cr6 - - subf 9,3,10 - subf 5,9,12 - srdi 8,5,3 - cmpldi cr6,8,0 - mtocrf 0x01,8 - - /* We have a tail o 1~127 bytes. Copy up to 15 doublewords for - speed. We'll handle the resulting tail bytes later. */ - beq cr6,L(tail) - -8: bf 28,4f - - std 4,0(10) - std 4,8(10) - std 4,16(10) - std 4,24(10) - std 4,32(10) - std 4,40(10) - std 4,48(10) - std 4,56(10) - addi 10,10,64 - .align 4 -4: bf 29,2f - - std 4,0(10) - std 4,8(10) - std 4,16(10) - std 4,24(10) - addi 10,10,32 - .align 4 -2: bf 30,1f - - std 4,0(10) - std 4,8(10) - addi 10,10,16 - .align 4 -1: bf 31,L(tail) - - std 4,0(10) - addi 10,10,8 - - /* Handle the rest of the tail bytes here. */ -L(tail): - mtocrf 0x01,5 - - .align 4 -4: bf 29,2f - - stw 4,0(10) - addi 10,10,4 - .align 4 -2: bf 30,1f - - sth 4,0(10) - addi 10,10,2 - .align 4 -1: bflr 31 - - stb 4,0(10) - blr - - /* Expanded tree to copy tail bytes without increments. */ - .align 4 -L(copy_tail): - bf 29,L(FXX) - - stw 4,0(10) - bf 30,L(TFX) - - sth 4,4(10) - bflr 31 - - stb 4,6(10) - blr - - .align 4 -L(FXX): bf 30,L(FFX) - - sth 4,0(10) - bflr 31 - - stb 4,2(10) - blr - - .align 4 -L(TFX): bflr 31 - - stb 4,4(10) - blr - - .align 4 -L(FFX): bflr 31 - - stb 4,0(10) - blr - - /* Handle copies of 9~31 bytes. */ - .align 4 -L(medium): - /* At least 9 bytes to go. */ - andi. 11,10,3 - clrldi 0,0,62 - beq L(medium_aligned) - - /* Force 4-bytes alignment for DST. */ - mtocrf 0x01,0 - subf 5,0,5 -1: /* Copy 1 byte. */ - bf 31,2f - - stb 4,0(10) - addi 10,10,1 -2: /* Copy 2 bytes. */ - bf 30,L(medium_aligned) - - sth 4,0(10) - addi 10,10,2 - - .align 4 -L(medium_aligned): - /* At least 6 bytes to go, and DST is word-aligned. */ - cmpldi cr1,5,16 - mtocrf 0x01,5 - blt cr1,8f - - /* Copy 16 bytes. */ - stw 4,0(10) - stw 4,4(10) - stw 4,8(10) - stw 4,12(10) - addi 10,10,16 -8: /* Copy 8 bytes. */ - bf 28,4f - - stw 4,0(10) - stw 4,4(10) - addi 10,10,8 -4: /* Copy 4 bytes. */ - bf 29,2f - - stw 4,0(10) - addi 10,10,4 -2: /* Copy 2-3 bytes. */ - bf 30,1f - - sth 4,0(10) - addi 10,10,2 -1: /* Copy 1 byte. */ - bflr 31 - - stb 4,0(10) - blr - - /* Handles copies of 0~8 bytes. */ - .align 4 -L(small): - mtocrf 0x01,5 - bne cr6,L(copy_tail) - - stw 4,0(10) - stw 4,4(10) - blr - -END_GEN_TB (MEMSET,TB_TOCLESS) -libc_hidden_builtin_def (memset) - -/* Copied from bzero.S to prevent the linker from inserting a stub - between bzero and memset. */ -ENTRY (__bzero) - CALL_MCOUNT 3 - mr r5,r4 - li r4,0 - b L(_memset) -END (__bzero) -#ifndef __bzero -weak_alias (__bzero, bzero) -#endif diff --git a/sysdeps/powerpc/powerpc64/power7/multiarch/Implies b/sysdeps/powerpc/powerpc64/power7/multiarch/Implies deleted file mode 100644 index bf5d6171a5..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power6/multiarch diff --git a/sysdeps/powerpc/powerpc64/power7/rawmemchr.S b/sysdeps/powerpc/powerpc64/power7/rawmemchr.S deleted file mode 100644 index 48afb75943..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/rawmemchr.S +++ /dev/null @@ -1,115 +0,0 @@ -/* Optimized rawmemchr implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] rawmemchr (void *s [r3], int c [r4]) */ - -#ifndef RAWMEMCHR -# define RAWMEMCHR __rawmemchr -#endif - .machine power7 -ENTRY (RAWMEMCHR) - CALL_MCOUNT 2 - dcbt 0,r3 - clrrdi r8,r3,3 /* Align the address to doubleword boundary. */ - - /* Replicate byte to doubleword. */ - insrdi r4,r4,8,48 - insrdi r4,r4,16,32 - insrdi r4,r4,32,0 - - /* Now r4 has a doubleword of c bytes. */ - - rlwinm r6,r3,3,26,28 /* Calculate padding. */ - ld r12,0(r8) /* Load doubleword from memory. */ - cmpb r5,r12,r4 /* Compare each byte against c byte. */ -#ifdef __LITTLE_ENDIAN__ - srd r5,r5,r6 - sld r5,r5,r6 -#else - sld r5,r5,r6 /* Move left to discard ignored bits. */ - srd r5,r5,r6 /* Bring the bits back as zeros. */ -#endif - cmpdi cr7,r5,0 /* If r5 == 0, no c bytes have been found. */ - bne cr7,L(done) - - mtcrf 0x01,r8 - - /* Are we now aligned to a quadword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 28,L(loop) - - /* Handle DWORD2 of pair. */ - ldu r12,8(r8) - cmpb r5,r12,r4 - cmpdi cr7,r5,0 - bne cr7,L(done) - b L(loop) /* We branch here (rather than falling through) - to skip the nops due to heavy alignment - of the loop below. */ - - /* Main loop to look for the end of the string. Since it's a - small loop (< 8 instructions), align it to 32-bytes. */ - .p2align 5 -L(loop): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the byte-checking process for bigger strings. */ - ld r12,8(r8) - ldu r11,16(r8) - cmpb r5,r12,r4 - cmpb r6,r11,r4 - or r7,r5,r6 - cmpdi cr7,r7,0 - beq cr7,L(loop) - - /* OK, one (or both) of the doublewords contains a 'c' byte. Check - the first doubleword and decrement the address in case the first - doubleword really contains a c byte. */ - - cmpdi cr6,r5,0 - addi r8,r8,-8 - bne cr6,L(done) - - /* The 'c' byte must be in the second doubleword. Adjust the address - again and move the result of cmpb to r10 so we can calculate the - pointer. */ - mr r5,r6 - addi r8,r8,8 - - /* r5 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as the 'c' byte in the original - doubleword from the string. Use that fact to find out what is - the position of the byte inside the string. */ -L(done): -#ifdef __LITTLE_ENDIAN__ - addi r0,r5,-1 - andc r0,r0,r5 - popcntd r0,r0 /* Count trailing zeros. */ -#else - cntlzd r0,r5 /* Count leading zeros before the match. */ -#endif - srdi r0,r0,3 /* Convert leading zeros to bytes. */ - add r3,r8,r0 /* Return address of the matching char. */ - blr -END (RAWMEMCHR) -weak_alias (__rawmemchr,rawmemchr) -libc_hidden_builtin_def (__rawmemchr) diff --git a/sysdeps/powerpc/powerpc64/power7/stpncpy.S b/sysdeps/powerpc/powerpc64/power7/stpncpy.S deleted file mode 100644 index a346dd7e28..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/stpncpy.S +++ /dev/null @@ -1,24 +0,0 @@ -/* Optimized stpncpy implementation for PowerPC64/POWER7. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define USE_AS_STPNCPY -#include - -weak_alias (__stpncpy, stpncpy) -libc_hidden_def (__stpncpy) -libc_hidden_builtin_def (stpncpy) diff --git a/sysdeps/powerpc/powerpc64/power7/strcasecmp.S b/sysdeps/powerpc/powerpc64/power7/strcasecmp.S deleted file mode 100644 index e856b8a593..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/strcasecmp.S +++ /dev/null @@ -1,126 +0,0 @@ -/* Optimized strcasecmp implementation for PowerPC64. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int [r3] strcasecmp (const char *s1 [r3], const char *s2 [r4] ) - - or if defined USE_IN_EXTENDED_LOCALE_MODEL: - - int [r3] strcasecmp_l (const char *s1 [r3], const char *s2 [r4], - __locale_t loc [r5]) */ - -#ifndef STRCMP -# define __STRCMP __strcasecmp -# define STRCMP strcasecmp -#endif - -ENTRY (__STRCMP) -#ifndef USE_IN_EXTENDED_LOCALE_MODEL - CALL_MCOUNT 2 -#else - CALL_MCOUNT 3 -#endif - -#define rRTN r3 /* Return value */ -#define rSTR1 r5 /* 1st string */ -#define rSTR2 r4 /* 2nd string */ -#define rLOCARG r5 /* 3rd argument: locale_t */ -#define rCHAR1 r6 /* Byte read from 1st string */ -#define rCHAR2 r7 /* Byte read from 2nd string */ -#define rADDR1 r8 /* Address of tolower(rCHAR1) */ -#define rADDR2 r12 /* Address of tolower(rCHAR2) */ -#define rLWR1 r8 /* Word tolower(rCHAR1) */ -#define rLWR2 r12 /* Word tolower(rCHAR2) */ -#define rTMP r9 -#define rLOC r11 /* Default locale address */ - - cmpd cr7, r3, r4 -#ifndef USE_IN_EXTENDED_LOCALE_MODEL - ld rTMP, __libc_tsd_LOCALE@got@tprel(r2) - add rLOC, rTMP, __libc_tsd_LOCALE@tls - ld rLOC, 0(rLOC) -#else - mr rLOC, rLOCARG -#endif - ld rLOC, LOCALE_CTYPE_TOLOWER(rLOC) - mr rSTR1, rRTN - li rRTN, 0 - beqlr cr7 - - - /* Unrolling loop for POWER: loads are done with 'lbz' plus - offset and string descriptors are only updated in the end - of loop unrolling. */ - - lbz rCHAR1, 0(rSTR1) /* Load char from s1 */ - lbz rCHAR2, 0(rSTR2) /* Load char from s2 */ -L(loop): - cmpdi rCHAR1, 0 /* *s1 == '\0' ? */ - sldi rADDR1, rCHAR1, 2 /* Calculate address for tolower(*s1) */ - sldi rADDR2, rCHAR2, 2 /* Calculate address for tolower(*s2) */ - lwzx rLWR1, rLOC, rADDR1 /* Load tolower(*s1) */ - lwzx rLWR2, rLOC, rADDR2 /* Load tolower(*s2) */ - cmpw cr1, rLWR1, rLWR2 /* r = tolower(*s1) == tolower(*s2) ? */ - crorc 4*cr1+eq,eq,4*cr1+eq /* (*s1 != '\0') || (r == 1) */ - beq cr1, L(done) - lbz rCHAR1, 1(rSTR1) - lbz rCHAR2, 1(rSTR2) - cmpdi rCHAR1, 0 - sldi rADDR1, rCHAR1, 2 - sldi rADDR2, rCHAR2, 2 - lwzx rLWR1, rLOC, rADDR1 - lwzx rLWR2, rLOC, rADDR2 - cmpw cr1, rLWR1, rLWR2 - crorc 4*cr1+eq,eq,4*cr1+eq - beq cr1, L(done) - lbz rCHAR1, 2(rSTR1) - lbz rCHAR2, 2(rSTR2) - cmpdi rCHAR1, 0 - sldi rADDR1, rCHAR1, 2 - sldi rADDR2, rCHAR2, 2 - lwzx rLWR1, rLOC, rADDR1 - lwzx rLWR2, rLOC, rADDR2 - cmpw cr1, rLWR1, rLWR2 - crorc 4*cr1+eq,eq,4*cr1+eq - beq cr1, L(done) - lbz rCHAR1, 3(rSTR1) - lbz rCHAR2, 3(rSTR2) - cmpdi rCHAR1, 0 - /* Increment both string descriptors */ - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 - sldi rADDR1, rCHAR1, 2 - sldi rADDR2, rCHAR2, 2 - lwzx rLWR1, rLOC, rADDR1 - lwzx rLWR2, rLOC, rADDR2 - cmpw cr1, rLWR1, rLWR2 - crorc 4*cr1+eq,eq,4*cr1+eq - beq cr1,L(done) - lbz rCHAR1, 0(rSTR1) /* Load char from s1 */ - lbz rCHAR2, 0(rSTR2) /* Load char from s2 */ - b L(loop) -L(done): - subf r0, rLWR2, rLWR1 - extsw rRTN, r0 - blr -END (__STRCMP) - -weak_alias (__STRCMP, STRCMP) -libc_hidden_builtin_def (__STRCMP) diff --git a/sysdeps/powerpc/powerpc64/power7/strcasecmp_l.S b/sysdeps/powerpc/powerpc64/power7/strcasecmp_l.S deleted file mode 100644 index c13c4ebcb8..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/strcasecmp_l.S +++ /dev/null @@ -1,5 +0,0 @@ -#define USE_IN_EXTENDED_LOCALE_MODEL -#define STRCMP strcasecmp_l -#define __STRCMP __strcasecmp_l - -#include "strcasecmp.S" diff --git a/sysdeps/powerpc/powerpc64/power7/strchr.S b/sysdeps/powerpc/powerpc64/power7/strchr.S deleted file mode 100644 index a18e2e101c..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/strchr.S +++ /dev/null @@ -1,230 +0,0 @@ -/* Optimized strchr implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef STRCHR -# define STRCHR strchr -#endif - -/* int [r3] strchr (char *s [r3], int c [r4]) */ - .machine power7 -ENTRY (STRCHR) - CALL_MCOUNT 2 - dcbt 0,r3 - clrrdi r8,r3,3 /* Align the address to doubleword boundary. */ - cmpdi cr7,r4,0 - ld r12,0(r8) /* Load doubleword from memory. */ - li r0,0 /* Doubleword with null chars to use - with cmpb. */ - - rlwinm r6,r3,3,26,28 /* Calculate padding. */ - - beq cr7,L(null_match) - - /* Replicate byte to doubleword. */ - insrdi r4,r4,8,48 - insrdi r4,r4,16,32 - insrdi r4,r4,32,0 - - /* Now r4 has a doubleword of c bytes and r0 has - a doubleword of null bytes. */ - - cmpb r10,r12,r4 /* Compare each byte against c byte. */ - cmpb r11,r12,r0 /* Compare each byte against null byte. */ - - /* Move the doublewords left and right to discard the bits that are - not part of the string and bring them back as zeros. */ -#ifdef __LITTLE_ENDIAN__ - srd r10,r10,r6 - srd r11,r11,r6 - sld r10,r10,r6 - sld r11,r11,r6 -#else - sld r10,r10,r6 - sld r11,r11,r6 - srd r10,r10,r6 - srd r11,r11,r6 -#endif - or r5,r10,r11 /* OR the results to speed things up. */ - cmpdi cr7,r5,0 /* If r5 == 0, no c or null bytes - have been found. */ - bne cr7,L(done) - - mtcrf 0x01,r8 - - /* Are we now aligned to a doubleword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 28,L(loop) - - /* Handle WORD2 of pair. */ - ldu r12,8(r8) - cmpb r10,r12,r4 - cmpb r11,r12,r0 - or r5,r10,r11 - cmpdi cr7,r5,0 - bne cr7,L(done) - b L(loop) /* We branch here (rather than falling through) - to skip the nops due to heavy alignment - of the loop below. */ - - .p2align 5 -L(loop): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - ld r12,8(r8) - ldu r9,16(r8) - cmpb r10,r12,r4 - cmpb r11,r12,r0 - cmpb r6,r9,r4 - cmpb r7,r9,r0 - or r12,r10,r11 - or r9,r6,r7 - or r5,r12,r9 - cmpdi cr7,r5,0 - beq cr7,L(loop) - - /* OK, one (or both) of the doublewords contains a c/null byte. Check - the first doubleword and decrement the address in case the first - doubleword really contains a c/null byte. */ - - cmpdi cr6,r12,0 - addi r8,r8,-8 - bne cr6,L(done) - - /* The c/null byte must be in the second doubleword. Adjust the - address again and move the result of cmpb to r10 so we can calculate - the pointer. */ - - mr r10,r6 - mr r11,r7 - addi r8,r8,8 - - /* r10/r11 have the output of the cmpb instructions, that is, - 0xff in the same position as the c/null byte in the original - doubleword from the string. Use that to calculate the pointer. */ -L(done): -#ifdef __LITTLE_ENDIAN__ - addi r3,r10,-1 - andc r3,r3,r10 - popcntd r0,r3 - addi r4,r11,-1 - andc r4,r4,r11 - cmpld cr7,r3,r4 - bgt cr7,L(no_match) -#else - cntlzd r0,r10 /* Count leading zeros before c matches. */ - cmpld cr7,r11,r10 - bgt cr7,L(no_match) -#endif - srdi r0,r0,3 /* Convert leading zeros to bytes. */ - add r3,r8,r0 /* Return address of the matching c byte - or null in case c was not found. */ - blr - - .align 4 -L(no_match): - li r3,0 - blr - -/* We are here because strchr was called with a null byte. */ - .align 4 -L(null_match): - /* r0 has a doubleword of null bytes. */ - - cmpb r5,r12,r0 /* Compare each byte against null bytes. */ - - /* Move the doublewords left and right to discard the bits that are - not part of the string and bring them back as zeros. */ -#ifdef __LITTLE_ENDIAN__ - srd r5,r5,r6 - sld r5,r5,r6 -#else - sld r5,r5,r6 - srd r5,r5,r6 -#endif - cmpdi cr7,r5,0 /* If r10 == 0, no c or null bytes - have been found. */ - bne cr7,L(done_null) - - mtcrf 0x01,r8 - - /* Are we now aligned to a quadword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 28,L(loop_null) - - /* Handle WORD2 of pair. */ - ldu r12,8(r8) - cmpb r5,r12,r0 - cmpdi cr7,r5,0 - bne cr7,L(done_null) - b L(loop_null) /* We branch here (rather than falling through) - to skip the nops due to heavy alignment - of the loop below. */ - - /* Main loop to look for the end of the string. Since it's a - small loop (< 8 instructions), align it to 32-bytes. */ - .p2align 5 -L(loop_null): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - ld r12,8(r8) - ldu r11,16(r8) - cmpb r5,r12,r0 - cmpb r10,r11,r0 - or r6,r5,r10 - cmpdi cr7,r6,0 - beq cr7,L(loop_null) - - /* OK, one (or both) of the doublewords contains a null byte. Check - the first doubleword and decrement the address in case the first - doubleword really contains a null byte. */ - - cmpdi cr6,r5,0 - addi r8,r8,-8 - bne cr6,L(done_null) - - /* The null byte must be in the second doubleword. Adjust the address - again and move the result of cmpb to r10 so we can calculate the - pointer. */ - - mr r5,r10 - addi r8,r8,8 - - /* r5 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as the null byte in the original - doubleword from the string. Use that to calculate the pointer. */ -L(done_null): -#ifdef __LITTLE_ENDIAN__ - addi r0,r5,-1 - andc r0,r0,r5 - popcntd r0,r0 -#else - cntlzd r0,r5 /* Count leading zeros before the match. */ -#endif - srdi r0,r0,3 /* Convert leading zeros to bytes. */ - add r3,r8,r0 /* Return address of the matching null byte. */ - blr -END (STRCHR) -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/powerpc/powerpc64/power7/strchrnul.S b/sysdeps/powerpc/powerpc64/power7/strchrnul.S deleted file mode 100644 index 27bc1f0682..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/strchrnul.S +++ /dev/null @@ -1,131 +0,0 @@ -/* Optimized strchrnul implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef STRCHRNUL -# define STRCHRNUL __strchrnul -#endif -/* int [r3] strchrnul (char *s [r3], int c [r4]) */ - .machine power7 -ENTRY (STRCHRNUL) - CALL_MCOUNT 2 - dcbt 0,r3 - clrrdi r8,r3,3 /* Align the address to doubleword boundary. */ - - /* Replicate byte to doubleword. */ - insrdi r4,r4,8,48 - insrdi r4,r4,16,32 - insrdi r4,r4,32,0 - - rlwinm r6,r3,3,26,28 /* Calculate padding. */ - ld r12,0(r8) /* Load doubleword from memory. */ - li r0,0 /* Doubleword with null chars to use - with cmpb. */ - - /* Now r4 has a doubleword of c bytes and r0 has - a doubleword of null bytes. */ - - cmpb r10,r12,r0 /* Compare each byte against c byte. */ - cmpb r9,r12,r4 /* Compare each byte against null byte. */ - - /* Move the doublewords left and right to discard the bits that are - not part of the string and to bring them back as zeros. */ -#ifdef __LITTLE_ENDIAN__ - srd r10,r10,r6 - srd r9,r9,r6 - sld r10,r10,r6 - sld r9,r9,r6 -#else - sld r10,r10,r6 - sld r9,r9,r6 - srd r10,r10,r6 - srd r9,r9,r6 -#endif - or r5,r9,r10 /* OR the results to speed things up. */ - cmpdi cr7,r5,0 /* If r5 == 0, no c or null bytes - have been found. */ - bne cr7,L(done) - - mtcrf 0x01,r8 - - /* Are we now aligned to a quadword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 28,L(loop) - - /* Handle DWORD2 of pair. */ - ldu r12,8(r8) - cmpb r10,r12,r0 - cmpb r9,r12,r4 - or r5,r9,r10 - cmpdi cr7,r5,0 - bne cr7,L(done) - b L(loop) /* We branch here (rather than falling through) - to skip the nops due to heavy alignment - of the loop below. */ - - .p2align 5 -L(loop): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - ld r12,8(r8) - ldu r11,16(r8) - cmpb r10,r12,r0 - cmpb r9,r12,r4 - cmpb r6,r11,r0 - cmpb r7,r11,r4 - or r5,r9,r10 - or r10,r6,r7 - or r11,r5,r10 - cmpdi cr7,r11,0 - beq cr7,L(loop) - - /* OK, one (or both) of the doublewords contains a c/null byte. Check - the first doubleword and decrement the address in case the first - doubleword really contains a c/null byte. */ - - cmpdi cr6,r5,0 - addi r8,r8,-8 - bne cr6,L(done) - - /* The c/null byte must be in the second doubleword. Adjust the - address again and move the result of cmpb to r5 so we can calculate - the pointer. */ - mr r5,r10 - addi r8,r8,8 - - /* r5 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as the c/null byte in the original - doubleword from the string. Use that to calculate the pointer. */ -L(done): -#ifdef __LITTLE_ENDIAN__ - addi r0,r5,-1 - andc r0,r0,r5 - popcntd r0,r0 -#else - cntlzd r0,r5 /* Count leading zeros before the match. */ -#endif - srdi r0,r0,3 /* Convert leading zeros to bytes. */ - add r3,r8,r0 /* Return address of matching c/null byte. */ - blr -END (STRCHRNUL) -weak_alias (STRCHRNUL, strchrnul) -libc_hidden_builtin_def (STRCHRNUL) diff --git a/sysdeps/powerpc/powerpc64/power7/strcmp.S b/sysdeps/powerpc/powerpc64/power7/strcmp.S deleted file mode 100644 index 14e14f457e..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/strcmp.S +++ /dev/null @@ -1,168 +0,0 @@ -/* Optimized strcmp implementation for Power7 using 'cmpb' instruction - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The optimization is achieved here through cmpb instruction. - 8byte aligned strings are processed with double word comparision - and unaligned strings are handled effectively with loop unrolling - technique */ - -#include - -#ifndef STRCMP -# define STRCMP strcmp -#endif - -/* int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) */ - - .machine power7 -EALIGN (STRCMP, 4, 0) - CALL_MCOUNT 2 - - or r9, r3, r4 - rldicl. r10, r9, 0, 61 /* are s1 and s2 8 byte aligned..? */ - bne cr0, L(process_unaligned_bytes) - li r5, 0 - - .align 4 -/* process input parameters on double word aligned boundary */ -L(unrollDword): - ld r8,0(r3) - ld r10,0(r4) - cmpb r7,r8,r5 - cmpdi cr7,r7,0 - mr r9,r7 - bne cr7,L(null_found) - cmpld cr7,r8,r10 - bne cr7,L(different) - - ld r8,8(r3) - ld r10,8(r4) - cmpb r7,r8,r5 - cmpdi cr7,r7,0 - mr r9,r7 - bne cr7,L(null_found) - cmpld cr7,r8,r10 - bne cr7,L(different) - - ld r8,16(r3) - ld r10,16(r4) - cmpb r7,r8,r5 - cmpdi cr7,r7,0 - mr r9,r7 - bne cr7,L(null_found) - cmpld cr7,r8,r10 - bne cr7,L(different) - - ld r8,24(r3) - ld r10,24(r4) - cmpb r7,r8,r5 - cmpdi cr7,r7,0 - mr r9,r7 - bne cr7,L(null_found) - cmpld cr7,r8,r10 - bne cr7,L(different) - - addi r3, r3, 32 - addi r4, r4, 32 - beq cr7, L(unrollDword) - - .align 4 -L(null_found): -#ifdef __LITTLE_ENDIAN__ - neg r7,r9 - and r9,r9,r7 - li r7,-1 - cntlzd r9,r9 - subfic r9,r9,71 - sld r9,r7,r9 -#else - cntlzd r9,r9 - li r7,-1 - addi r9,r9,8 - srd r9,r7,r9 -#endif - or r8,r8,r9 - or r10,r10,r9 - -L(different): - cmpb r9,r8,r10 -#ifdef __LITTLE_ENDIAN__ - addi r7,r9,1 - andc r9,r7,r9 - cntlzd r9,r9 - subfic r9,r9,63 -#else - not r9,r9 - cntlzd r9,r9 - subfic r9,r9,56 -#endif - srd r3,r8,r9 - srd r10,r10,r9 - rldicl r10,r10,0,56 - rldicl r3,r3,0,56 - subf r3,r10,r3 - blr - - .align 4 -L(process_unaligned_bytes): - lbz r9, 0(r3) /* load byte from s1 */ - lbz r10, 0(r4) /* load byte from s2 */ - cmpdi cr7, r9, 0 /* compare *s1 with NULL */ - beq cr7, L(diffOfNULL) /* if *s1 is NULL , return *s1 - *s2 */ - cmplw cr7, r9, r10 /* compare *s1 and *s2 */ - bne cr7, L(ComputeDiff) /* branch to compute difference and return */ - - lbz r9, 1(r3) /* load next byte from s1 */ - lbz r10, 1(r4) /* load next byte from s2 */ - cmpdi cr7, r9, 0 /* compare *s1 with NULL */ - beq cr7, L(diffOfNULL) /* if *s1 is NULL , return *s1 - *s2 */ - cmplw cr7, r9, r10 /* compare *s1 and *s2 */ - bne cr7, L(ComputeDiff) /* branch to compute difference and return */ - - lbz r9, 2(r3) /* unroll 3rd byte here */ - lbz r10, 2(r4) - cmpdi cr7, r9, 0 - beq cr7, L(diffOfNULL) - cmplw cr7, r9, r10 - bne 7, L(ComputeDiff) - - lbz r9, 3(r3) /* unroll 4th byte now */ - lbz r10, 3(r4) - addi r3, r3, 4 /* increment s1 by unroll factor */ - cmpdi cr7, r9, 0 - cmplw cr6, 9, r10 - beq cr7, L(diffOfNULL) - addi r4, r4, 4 /* increment s2 by unroll factor */ - beq cr6, L(process_unaligned_bytes) /* unroll byte processing */ - - .align 4 -L(ComputeDiff): - extsw r9, r9 - subf r10, r10, r9 /* compute s1 - s2 */ - extsw r3, r10 - blr /* return */ - - .align 4 -L(diffOfNULL): - li r9, 0 - subf r10, r10, r9 /* compute s1 - s2 */ - extsw r3, r10 /* sign extend result */ - blr /* return */ - -END (STRCMP) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/powerpc/powerpc64/power7/strlen.S b/sysdeps/powerpc/powerpc64/power7/strlen.S deleted file mode 100644 index 63848c460c..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/strlen.S +++ /dev/null @@ -1,107 +0,0 @@ -/* Optimized strlen implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] strlen (char *s [r3]) */ - -#ifndef STRLEN -# define STRLEN strlen -#endif - .machine power7 -ENTRY (STRLEN) - CALL_MCOUNT 1 - dcbt 0,r3 - clrrdi r4,r3,3 /* Align the address to doubleword boundary. */ - rlwinm r6,r3,3,26,28 /* Calculate padding. */ - li r0,0 /* Doubleword with null chars to use - with cmpb. */ - li r5,-1 /* MASK = 0xffffffffffffffff. */ - ld r12,0(r4) /* Load doubleword from memory. */ -#ifdef __LITTLE_ENDIAN__ - sld r5,r5,r6 -#else - srd r5,r5,r6 /* MASK = MASK >> padding. */ -#endif - orc r9,r12,r5 /* Mask bits that are not part of the string. */ - cmpb r10,r9,r0 /* Check for null bytes in DWORD1. */ - cmpdi cr7,r10,0 /* If r10 == 0, no null's have been found. */ - bne cr7,L(done) - - mtcrf 0x01,r4 - - /* Are we now aligned to a quadword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 28,L(loop) - - /* Handle DWORD2 of pair. */ - ldu r12,8(r4) - cmpb r10,r12,r0 - cmpdi cr7,r10,0 - bne cr7,L(done) - - /* Main loop to look for the end of the string. Since it's a - small loop (< 8 instructions), align it to 32-bytes. */ - .p2align 5 -L(loop): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - - ld r12, 8(r4) - ldu r11, 16(r4) - cmpb r10,r12,r0 - cmpb r9,r11,r0 - or r8,r9,r10 /* Merge everything in one doubleword. */ - cmpdi cr7,r8,0 - beq cr7,L(loop) - - /* OK, one (or both) of the doublewords contains a null byte. Check - the first doubleword and decrement the address in case the first - doubleword really contains a null byte. */ - - cmpdi cr6,r10,0 - addi r4,r4,-8 - bne cr6,L(done) - - /* The null byte must be in the second doubleword. Adjust the address - again and move the result of cmpb to r10 so we can calculate the - length. */ - - mr r10,r9 - addi r4,r4,8 - - /* r10 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as the null byte in the original - doubleword from the string. Use that to calculate the length. */ -L(done): -#ifdef __LITTLE_ENDIAN__ - addi r9, r10, -1 /* Form a mask from trailing zeros. */ - andc r9, r9, r10 - popcntd r0, r9 /* Count the bits in the mask. */ -#else - cntlzd r0,r10 /* Count leading zeros before the match. */ -#endif - subf r5,r3,r4 - srdi r0,r0,3 /* Convert leading/trailing zeros to bytes. */ - add r3,r5,r0 /* Compute final length. */ - blr -END (STRLEN) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/powerpc/powerpc64/power7/strncmp.S b/sysdeps/powerpc/powerpc64/power7/strncmp.S deleted file mode 100644 index d53b31be8e..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/strncmp.S +++ /dev/null @@ -1,227 +0,0 @@ -/* Optimized strcmp implementation for POWER7/PowerPC64. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef STRNCMP -# define STRNCMP strncmp -#endif - -/* See strlen.s for comments on how the end-of-string testing works. */ - -/* int [r3] strncmp (const char *s1 [r3], - const char *s2 [r4], - size_t size [r5]) */ - -EALIGN (STRNCMP,5,0) - CALL_MCOUNT 3 - -#define rTMP2 r0 -#define rRTN r3 -#define rSTR1 r3 /* first string arg */ -#define rSTR2 r4 /* second string arg */ -#define rN r5 /* max string length */ -#define rWORD1 r6 /* current word in s1 */ -#define rWORD2 r7 /* current word in s2 */ -#define rWORD3 r10 -#define rWORD4 r11 -#define rFEFE r8 /* constant 0xfefefefefefefeff (-0x0101010101010101) */ -#define r7F7F r9 /* constant 0x7f7f7f7f7f7f7f7f */ -#define rNEG r10 /* ~(word in s1 | 0x7f7f7f7f7f7f7f7f) */ -#define rBITDIF r11 /* bits that differ in s1 & s2 words */ -#define rTMP r12 - - dcbt 0,rSTR1 - nop - or rTMP,rSTR2,rSTR1 - lis r7F7F,0x7f7f - dcbt 0,rSTR2 - nop - clrldi. rTMP,rTMP,61 - cmpldi cr1,rN,0 - lis rFEFE,-0x101 - bne L(unaligned) -/* We are doubleword aligned so set up for two loops. first a double word - loop, then fall into the byte loop if any residual. */ - srdi. rTMP,rN,3 - clrldi rN,rN,61 - addi rFEFE,rFEFE,-0x101 - addi r7F7F,r7F7F,0x7f7f - cmpldi cr1,rN,0 - beq L(unaligned) - - mtctr rTMP - ld rWORD1,0(rSTR1) - ld rWORD2,0(rSTR2) - sldi rTMP,rFEFE,32 - insrdi r7F7F,r7F7F,32,0 - add rFEFE,rFEFE,rTMP - b L(g1) - -L(g0): - ldu rWORD1,8(rSTR1) - bne cr1,L(different) - ldu rWORD2,8(rSTR2) -L(g1): add rTMP,rFEFE,rWORD1 - nor rNEG,r7F7F,rWORD1 - bdz L(tail) - and. rTMP,rTMP,rNEG - cmpd cr1,rWORD1,rWORD2 - beq L(g0) - -/* OK. We've hit the end of the string. We need to be careful that - we don't compare two strings as different because of gunk beyond - the end of the strings... */ - -#ifdef __LITTLE_ENDIAN__ -L(endstring): - addi rTMP2, rTMP, -1 - beq cr1, L(equal) - andc rTMP2, rTMP2, rTMP - rldimi rTMP2, rTMP2, 1, 0 - and rWORD2, rWORD2, rTMP2 /* Mask off gunk. */ - and rWORD1, rWORD1, rTMP2 - cmpd cr1, rWORD1, rWORD2 - beq cr1, L(equal) - cmpb rBITDIF, rWORD1, rWORD2 /* 0xff on equal bytes. */ - addi rNEG, rBITDIF, 1 - orc rNEG, rNEG, rBITDIF /* 0's below LS differing byte. */ - sldi rNEG, rNEG, 8 /* 1's above LS differing byte. */ - andc rWORD1, rWORD1, rNEG /* mask off MS bytes. */ - andc rWORD2, rWORD2, rNEG - xor. rBITDIF, rWORD1, rWORD2 - sub rRTN, rWORD1, rWORD2 - blt L(highbit) - sradi rRTN, rRTN, 63 /* must return an int. */ - ori rRTN, rRTN, 1 - blr -L(equal): - li rRTN, 0 - blr - -L(different): - ld rWORD1, -8(rSTR1) - cmpb rBITDIF, rWORD1, rWORD2 /* 0xff on equal bytes. */ - addi rNEG, rBITDIF, 1 - orc rNEG, rNEG, rBITDIF /* 0's below LS differing byte. */ - sldi rNEG, rNEG, 8 /* 1's above LS differing byte. */ - andc rWORD1, rWORD1, rNEG /* mask off MS bytes. */ - andc rWORD2, rWORD2, rNEG - xor. rBITDIF, rWORD1, rWORD2 - sub rRTN, rWORD1, rWORD2 - blt L(highbit) - sradi rRTN, rRTN, 63 - ori rRTN, rRTN, 1 - blr -L(highbit): - sradi rRTN, rWORD2, 63 - ori rRTN, rRTN, 1 - blr - -#else -L(endstring): - and rTMP,r7F7F,rWORD1 - beq cr1,L(equal) - add rTMP,rTMP,r7F7F - xor. rBITDIF,rWORD1,rWORD2 - andc rNEG,rNEG,rTMP - blt L(highbit) - cntlzd rBITDIF,rBITDIF - cntlzd rNEG,rNEG - addi rNEG,rNEG,7 - cmpd cr1,rNEG,rBITDIF - sub rRTN,rWORD1,rWORD2 - blt cr1,L(equal) - sradi rRTN,rRTN,63 /* must return an int. */ - ori rRTN,rRTN,1 - blr -L(equal): - li rRTN,0 - blr - -L(different): - ld rWORD1,-8(rSTR1) - xor. rBITDIF,rWORD1,rWORD2 - sub rRTN,rWORD1,rWORD2 - blt L(highbit) - sradi rRTN,rRTN,63 - ori rRTN,rRTN,1 - blr -L(highbit): - sradi rRTN,rWORD2,63 - ori rRTN,rRTN,1 - blr -#endif - -/* Oh well. In this case, we just do a byte-by-byte comparison. */ - .align 4 -L(tail): - and. rTMP,rTMP,rNEG - cmpd cr1,rWORD1,rWORD2 - bne L(endstring) - addi rSTR1,rSTR1,8 - bne cr1,L(different) - addi rSTR2,rSTR2,8 - cmpldi cr1,rN,0 -L(unaligned): - mtctr rN - ble cr1,L(ux) -L(uz): - lbz rWORD1,0(rSTR1) - lbz rWORD2,0(rSTR2) - .align 4 -L(u1): - cmpdi cr1,rWORD1,0 - bdz L(u4) - cmpd rWORD1,rWORD2 - beq cr1,L(u4) - bne L(u4) - lbzu rWORD3,1(rSTR1) - lbzu rWORD4,1(rSTR2) - cmpdi cr1,rWORD3,0 - bdz L(u3) - cmpd rWORD3,rWORD4 - beq cr1,L(u3) - bne L(u3) - lbzu rWORD1,1(rSTR1) - lbzu rWORD2,1(rSTR2) - cmpdi cr1,rWORD1,0 - bdz L(u4) - cmpd rWORD1,rWORD2 - beq cr1,L(u4) - bne L(u4) - lbzu rWORD3,1(rSTR1) - lbzu rWORD4,1(rSTR2) - cmpdi cr1,rWORD3,0 - bdz L(u3) - cmpd rWORD3,rWORD4 - beq cr1,L(u3) - bne L(u3) - lbzu rWORD1,1(rSTR1) - lbzu rWORD2,1(rSTR2) - b L(u1) - -L(u3): sub rRTN,rWORD3,rWORD4 - blr -L(u4): sub rRTN,rWORD1,rWORD2 - blr -L(ux): - li rRTN,0 - blr -END (STRNCMP) -libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/powerpc/powerpc64/power7/strncpy.S b/sysdeps/powerpc/powerpc64/power7/strncpy.S deleted file mode 100644 index 0224f74898..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/strncpy.S +++ /dev/null @@ -1,722 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Implements the functions - - char * [r3] strncpy (char *dst [r3], const char *src [r4], size_t n [r5]) - - AND - - char * [r3] stpncpy (char *dst [r3], const char *src [r4], size_t n [r5]) - - The algorithm is as follows: - > if src and dest are 8 byte aligned, perform double word copy - else - > copy byte by byte on unaligned addresses. - - The aligned comparison are made using cmpb instructions. */ - -/* The focus on optimization for performance improvements are as follows: - 1. data alignment [gain from aligned memory access on read/write] - 2. POWER7 gains performance with loop unrolling/unwinding - [gain by reduction of branch penalty]. - 3. The final pad with null bytes is done by calling an optimized - memset. */ - -#ifdef USE_AS_STPNCPY -# ifndef STPNCPY -# define FUNC_NAME __stpncpy -# else -# define FUNC_NAME STPNCPY -# endif -#else -# ifndef STRNCPY -# define FUNC_NAME strncpy -# else -# define FUNC_NAME STRNCPY -# endif -#endif /* !USE_AS_STPNCPY */ - -#define FRAMESIZE (FRAME_MIN_SIZE+32) - -#ifndef MEMSET -/* For builds with no IFUNC support, local calls should be made to internal - GLIBC symbol (created by libc_hidden_builtin_def). */ -# ifdef SHARED -# define MEMSET __GI_memset -# else -# define MEMSET memset -# endif -#endif - - .machine power7 -EALIGN(FUNC_NAME, 4, 0) - CALL_MCOUNT 3 - - mflr r0 /* load link register LR to r0 */ - or r10, r3, r4 /* to verify source and destination */ - rldicl. r8, r10, 0, 61 /* is double word aligned .. ? */ - - std r19, -8(r1) /* save callers register , r19 */ - std r18, -16(r1) /* save callers register , r18 */ - std r0, 16(r1) /* store the link register */ - stdu r1, -FRAMESIZE(r1) /* create the stack frame */ - - mr r9, r3 /* save r3 into r9 for use */ - mr r18, r3 /* save r3 for retCode of strncpy */ - bne 0, L(unaligned) - -L(aligned): - srdi r11, r5, 3 /* compute count for CTR ; count = n/8 */ - cmpldi cr7, r11, 3 /* if count > 4 ; perform unrolling 4 times */ - ble 7, L(update1) - - ld r10, 0(r4) /* load doubleWord from src */ - cmpb r8, r10, r8 /* compare src with NULL ,we read just now */ - cmpdi cr7, r8, 0 /* if cmpb returned NULL ; we continue */ - bne cr7, L(update3) - - std r10, 0(r3) /* copy doubleword at offset=0 */ - ld r10, 8(r4) /* load next doubleword from offset=8 */ - cmpb r8, r10, r8 /* compare src with NULL , we read just now */ - cmpdi cr7, r8, 0 /* if cmpb returned NULL ; we continue */ - bne 7,L(HopBy8) - - addi r8, r11, -4 - mr r7, r3 - srdi r8, r8, 2 - mr r6, r4 - addi r8, r8, 1 - li r12, 0 - mtctr r8 - b L(dwordCopy) - - .p2align 4 -L(dWordUnroll): - std r8, 16(r9) - ld r8, 24(r4) /* load dword,perform loop unrolling again */ - cmpb r10, r8, r10 - cmpdi cr7, r10, 0 - bne cr7, L(HopBy24) - - std r8, 24(r7) /* copy dword at offset=24 */ - addi r9, r9, 32 - addi r4, r4, 32 - bdz L(leftDwords) /* continue with loop on counter */ - - ld r3, 32(r6) - cmpb r8, r3, r10 - cmpdi cr7, r8, 0 - bne cr7, L(update2) - - std r3, 32(r7) - ld r10, 40(r6) - cmpb r8, r10, r8 - cmpdi cr7, r8, 0 - bne cr7, L(HopBy40) - - mr r6, r4 /* update values */ - mr r7, r9 - mr r11, r0 - mr r5, r19 - -L(dwordCopy): - std r10, 8(r9) /* copy dword at offset=8 */ - addi r19, r5, -32 - addi r0, r11, -4 - ld r8, 16(r4) - cmpb r10, r8, r12 - cmpdi cr7, r10, 0 - beq cr7, L(dWordUnroll) - - addi r9, r9, 16 /* increment dst by 16 */ - addi r4, r4, 16 /* increment src by 16 */ - addi r5, r5, -16 /* decrement length 'n' by 16 */ - addi r0, r11, -2 /* decrement loop counter */ - -L(dWordUnrollOFF): - ld r10, 0(r4) /* load first dword */ - li r8, 0 /* load mask */ - cmpb r8, r10, r8 - cmpdi cr7, r8, 0 - bne cr7, L(byte_by_byte) - mtctr r0 - li r7, 0 - b L(CopyDword) - - .p2align 4 -L(loadDWordandCompare): - ld r10, 0(r4) - cmpb r8, r10, r7 - cmpdi cr7, r8, 0 - bne cr7, L(byte_by_byte) - -L(CopyDword): - addi r9, r9, 8 - std r10, -8(r9) - addi r4, r4, 8 - addi r5, r5, -8 - bdnz L(loadDWordandCompare) - -L(byte_by_byte): - cmpldi cr7, r5, 3 - ble cr7, L(verifyByte) - srdi r10, r5, 2 - mr r19, r9 - mtctr r10 - b L(firstByteUnroll) - - .p2align 4 -L(bytes_unroll): - lbz r10, 1(r4) /* load byte from src */ - cmpdi cr7, r10, 0 /* compare for NULL */ - stb r10, 1(r19) /* store byte to dst */ - beq cr7, L(updtDestComputeN2ndByte) - - addi r4, r4, 4 /* advance src */ - - lbz r10, -2(r4) /* perform loop unrolling for byte r/w */ - cmpdi cr7, r10, 0 - stb r10, 2(r19) - beq cr7, L(updtDestComputeN3rdByte) - - lbz r10, -1(r4) /* perform loop unrolling for byte r/w */ - addi r19, r19, 4 - cmpdi cr7, r10, 0 - stb r10, -1(r19) - beq cr7, L(ComputeNByte) - - bdz L(update0) - -L(firstByteUnroll): - lbz r10, 0(r4) /* perform loop unrolling for byte r/w */ - cmpdi cr7, 10, 0 - stb r10, 0(r19) - bne cr7, L(bytes_unroll) - addi r19, r19, 1 - -L(ComputeNByte): - subf r9, r19, r9 /* compute 'n'n bytes to fill */ - add r8, r9, r5 - -L(zeroFill): - cmpdi cr7, r8, 0 /* compare if length is zero */ - beq cr7, L(update3return) - - mr r3, r19 /* fill buffer with */ - li r4, 0 /* zero fill buffer */ - mr r5, r8 /* how many bytes to fill buffer with */ - bl MEMSET /* call optimized memset */ - nop - -L(update3return): -#ifdef USE_AS_STPNCPY - addi r3, r19, -1 /* update return value */ -#endif - -L(hop2return): -#ifndef USE_AS_STPNCPY - mr r3, r18 /* set return value */ -#endif - addi r1, r1, FRAMESIZE /* restore stack pointer */ - ld r0, 16(r1) /* read the saved link register */ - ld r18, -16(r1) /* restore callers save register, r18 */ - ld r19, -8(r1) /* restore callers save register, r19 */ - mtlr r0 /* branch to link register */ - blr /* return */ - - .p2align 4 -L(update0): - mr r9, r19 - - .p2align 4 -L(verifyByte): - rldicl. r8, r5, 0, 62 -#ifdef USE_AS_STPNCPY - mr r3, r9 -#endif - beq cr0, L(hop2return) - mtctr r8 - addi r4, r4, -1 - mr r19, r9 - b L(oneBYone) - - .p2align 4 -L(proceed): - bdz L(done) - -L(oneBYone): - lbzu r10, 1(r4) /* copy byte */ - addi r19, r19, 1 - addi r8, r8, -1 - cmpdi cr7, r10, 0 - stb r10, -1(r19) - bne cr7, L(proceed) - b L(zeroFill) - - .p2align 4 -L(done): - addi r1, r1, FRAMESIZE /* restore stack pointer */ -#ifdef USE_AS_STPNCPY - mr r3, r19 /* set the return value */ -#else - mr r3, r18 /* set the return value */ -#endif - ld r0, 16(r1) /* read the saved link register */ - ld r18, -16(r1) /* restore callers save register, r18 */ - ld r19, -8(r1) /* restore callers save register, r19 */ - mtlr r0 /* branch to link register */ - blr /* return */ - -L(update1): - mr r0, r11 - mr r19, r5 - - .p2align 4 -L(leftDwords): - cmpdi cr7, r0, 0 - mr r5, r19 - bne cr7, L(dWordUnrollOFF) - b L(byte_by_byte) - - .p2align 4 -L(updtDestComputeN2ndByte): - addi r19, r19, 2 /* update dst by 2 */ - subf r9, r19, r9 /* compute distance covered */ - add r8, r9, r5 - b L(zeroFill) - - .p2align 4 -L(updtDestComputeN3rdByte): - addi r19, r19, 3 /* update dst by 3 */ - subf r9, r19, r9 /* compute distance covered */ - add r8, r9, r5 - b L(zeroFill) - - .p2align 4 -L(HopBy24): - addi r9, r9, 24 /* increment dst by 24 */ - addi r4, r4, 24 /* increment src by 24 */ - addi r5, r5, -24 /* decrement length 'n' by 24 */ - addi r0, r11, -3 /* decrement loop counter */ - b L(dWordUnrollOFF) - - .p2align 4 -L(update2): - mr r5, r19 - b L(dWordUnrollOFF) - - .p2align 4 -L(HopBy40): - addi r9, r7, 40 /* increment dst by 40 */ - addi r4, r6, 40 /* increment src by 40 */ - addi r5, r5, -40 /* decrement length 'n' by 40 */ - addi r0, r11, -5 /* decrement loop counter */ - b L(dWordUnrollOFF) - -L(update3): - mr r0, r11 - b L(dWordUnrollOFF) - -L(HopBy8): - addi r9, r3, 8 /* increment dst by 8 */ - addi r4, r4, 8 /* increment src by 8 */ - addi r5, r5, -8 /* decrement length 'n' by 8 */ - addi r0, r11, -1 /* decrement loop counter */ - b L(dWordUnrollOFF) - -L(unaligned): - cmpdi r5, 16 /* Proceed byte by byte for less than 16 */ - ble L(byte_by_byte) - rldicl r7, r3, 0, 61 - rldicl r6, r4, 0, 61 - cmpdi r6, 0 /* Check src alignment */ - beq L(srcaligndstunalign) - /* src is unaligned */ - rlwinm r10, r4, 3,26,28 /* Calculate padding. */ - clrrdi r4, r4, 3 /* Align the addr to dw boundary */ - ld r8, 0(r4) /* Load doubleword from memory. */ - li r0, 0 - /* Discard bits not part of the string */ -#ifdef __LITTLE_ENDIAN__ - srd r7, r8, r10 -#else - sld r7, r8, r10 -#endif - cmpb r0, r7, r0 /* Compare each byte against null */ - /* Discard bits not part of the string */ -#ifdef __LITTLE_ENDIAN__ - sld r0, r0, r10 -#else - srd r0, r0, r10 -#endif - cmpdi r0, 0 - bne L(bytebybyte) /* if it has null, copy byte by byte */ - subfic r6, r6, 8 - rlwinm r12, r3, 3,26,28 /* Calculate padding in bits. */ - rldicl r9, r3, 0, 61 /* Calculate padding in bytes. */ - addi r3, r3, -1 - - cmpdi r12, 0 /* check dest alignment */ - beq L(srcunaligndstalign) - - /* both src and dst unaligned */ -#ifdef __LITTLE_ENDIAN__ - sld r8, r7, r10 - mr r11, r10 - addi r11, r11, -8 /* Adjust byte pointer on loaded dw */ -#else - srd r8, r7, r10 - subfic r11, r10, 64 -#endif - /* dst alignment is greater then src alignment? */ - cmpd cr7, r12, r10 - ble cr7, L(dst_align_small) - /* src alignment is less than dst */ - - /* Calculate the dst alignment difference */ - subfic r7, r9, 8 - mtctr r7 - - /* Write until dst is aligned */ - cmpdi r0, r7, 4 - blt L(storebyte1) /* less than 4, store byte by byte */ - beq L(equal1) /* if its 4, store word */ - addi r0, r7, -4 /* greater than 4, so stb and stw */ - mtctr r0 -L(storebyte1): -#ifdef __LITTLE_ENDIAN__ - addi r11, r11, 8 /* Adjust byte pointer on loaded dw */ -#else - addi r11, r11, -8 -#endif - srd r7, r8, r11 - stbu r7, 1(r3) - addi r5, r5, -1 - bdnz L(storebyte1) - - subfic r7, r9, 8 /* Check the remaining bytes */ - cmpdi r0, r7, 4 - blt L(proceed1) - - .align 4 -L(equal1): -#ifdef __LITTLE_ENDIAN__ - addi r11, r11, 8 /* Adjust byte pointer on loaded dw */ - srd r7, r8, r11 -#else - subfic r11, r11, 64 - sld r7, r8, r11 - srdi r7, r7, 32 -#endif - stw r7, 1(r3) - addi r3, r3, 4 - addi r5, r5, -4 - -L(proceed1): - mr r7, r8 - /* calculate the Left over bytes to be written */ - subfic r11, r10, 64 - subfic r12, r12, 64 - subf r12, r12, r11 /* remaining bytes on second dw */ - subfic r10, r12, 64 /* remaining bytes on first dw */ - subfic r9, r9, 8 - subf r6, r9, r6 /* recalculate padding */ -L(srcunaligndstalign): - addi r3, r3, 1 - subfic r12, r10, 64 /* remaining bytes on second dw */ - addi r4, r4, 8 - li r0,0 - b L(storedouble) - - .align 4 -L(dst_align_small): - mtctr r6 - /* Write until src is aligned */ -L(storebyte2): -#ifdef __LITTLE_ENDIAN__ - addi r11, r11, 8 /* Adjust byte pointer on dw */ -#else - addi r11, r11, -8 -#endif - srd r7, r8, r11 - stbu r7, 1(r3) - addi r5, r5, -1 - bdnz L(storebyte2) - - addi r4, r4, 8 /* Increment src pointer */ - addi r3, r3, 1 /* Increment dst pointer */ - mr r9, r3 - li r8, 0 - cmpd cr7, r12, r10 - beq cr7, L(aligned) - rldicl r6, r3, 0, 61 /* Recalculate padding */ - mr r7, r6 - - /* src is algined */ -L(srcaligndstunalign): - mr r9, r3 - mr r6, r7 - ld r8, 0(r4) - subfic r10, r7, 8 - mr r7, r8 - li r0, 0 /* Check null */ - cmpb r0, r8, r0 - cmpdi r0, 0 - bne L(byte_by_byte) /* Do byte by byte if there is NULL */ - rlwinm r12, r3, 3,26,28 /* Calculate padding */ - addi r3, r3, -1 - /* write byte by byte until aligned */ -#ifdef __LITTLE_ENDIAN__ - li r11, -8 -#else - li r11, 64 -#endif - mtctr r10 - cmpdi r0, r10, 4 - blt L(storebyte) - beq L(equal) - addi r0, r10, -4 - mtctr r0 -L(storebyte): -#ifdef __LITTLE_ENDIAN__ - addi r11, r11, 8 /* Adjust byte pointer on dw */ -#else - addi r11, r11, -8 -#endif - srd r7, r8, r11 - stbu r7, 1(r3) - addi r5, r5, -1 - bdnz L(storebyte) - - cmpdi r0, r10, 4 - blt L(align) - - .align 4 -L(equal): -#ifdef __LITTLE_ENDIAN__ - addi r11, r11, 8 - srd r7, r8, r11 -#else - subfic r11, r11, 64 - sld r7, r8, r11 - srdi r7, r7, 32 -#endif - stw r7, 1(r3) - addi r5, r5, -4 - addi r3, r3, 4 -L(align): - addi r3, r3, 1 - addi r4, r4, 8 /* Increment src pointer */ - subfic r10, r12, 64 - li r0, 0 - /* dst addr aligned to 8 */ -L(storedouble): - cmpdi r5, 8 - ble L(null1) - ld r7, 0(r4) /* load next dw */ - cmpb r0, r7, r0 - cmpdi r0, 0 /* check for null on each new dw */ - bne L(null) -#ifdef __LITTLE_ENDIAN__ - srd r9, r8, r10 /* bytes from first dw */ - sld r11, r7, r12 /* bytes from second dw */ -#else - sld r9, r8, r10 - srd r11, r7, r12 -#endif - or r11, r9, r11 /* make as a single dw */ - std r11, 0(r3) /* store as std on aligned addr */ - mr r8, r7 /* still few bytes left to be written */ - addi r3, r3, 8 /* increment dst addr */ - addi r4, r4, 8 /* increment src addr */ - addi r5, r5, -8 - b L(storedouble) /* Loop until NULL */ - - .align 4 - -/* We've hit the end of the string. Do the rest byte-by-byte. */ -L(null): - addi r3, r3, -1 - mr r10, r12 - mtctr r6 -#ifdef __LITTLE_ENDIAN__ - subfic r10, r10, 64 - addi r10, r10, -8 -#endif - cmpdi r0, r5, 4 - blt L(loop) - cmpdi r0, r6, 4 - blt L(loop) - - /* we can still use stw if leftover >= 4 */ -#ifdef __LITTLE_ENDIAN__ - addi r10, r10, 8 - srd r11, r8, r10 -#else - subfic r10, r10, 64 - sld r11, r8, r10 - srdi r11, r11, 32 -#endif - stw r11, 1(r3) - addi r5, r5, -4 - addi r3, r3, 4 - cmpdi r0, r5, 0 - beq L(g1) - cmpdi r0, r6, 4 - beq L(bytebybyte1) - addi r10, r10, 32 -#ifdef __LITTLE_ENDIAN__ - addi r10, r10, -8 -#else - subfic r10, r10, 64 -#endif - addi r0, r6, -4 - mtctr r0 - /* remaining byte by byte part of first dw */ -L(loop): -#ifdef __LITTLE_ENDIAN__ - addi r10, r10, 8 -#else - addi r10, r10, -8 -#endif - srd r0, r8, r10 - stbu r0, 1(r3) - addi r5, r5, -1 - cmpdi r0, r5, 0 - beq L(g1) - bdnz L(loop) -L(bytebybyte1): - addi r3, r3, 1 - /* remaining byte by byte part of second dw */ -L(bytebybyte): - addi r3, r3, -8 - addi r4, r4, -1 - -#ifdef __LITTLE_ENDIAN__ - extrdi. r0, r7, 8, 56 - stbu r7, 8(r3) - addi r5, r5, -1 - beq L(g2) - cmpdi r5, 0 - beq L(g1) - extrdi. r0, r7, 8, 48 - stbu r0, 1(r3) - addi r5, r5, -1 - beq L(g2) - cmpdi r5, 0 - beq L(g1) - extrdi. r0, r7, 8, 40 - stbu r0, 1(r3) - addi r5, r5, -1 - beq L(g2) - cmpdi r5, 0 - beq L(g1) - extrdi. r0, r7, 8, 32 - stbu r0, 1(r3) - addi r5, r5, -1 - beq L(g2) - cmpdi r5, 0 - beq L(g1) - extrdi. r0, r7, 8, 24 - stbu r0, 1(r3) - addi r5, r5, -1 - beq L(g2) - cmpdi r5, 0 - beq L(g1) - extrdi. r0, r7, 8, 16 - stbu r0, 1(r3) - addi r5, r5, -1 - beq L(g2) - cmpdi r5, 0 - beq L(g1) - extrdi. r0, r7, 8, 8 - stbu r0, 1(r3) - addi r5, r5, -1 - beq L(g2) - cmpdi r5, 0 - beq L(g1) - extrdi r0, r7, 8, 0 - stbu r0, 1(r3) - addi r5, r5, -1 - b L(g2) -#else - extrdi. r0, r7, 8, 0 - stbu r0, 8(r3) - addi r5, r5, -1 - beq L(g2) - cmpdi r5, 0 - beq L(g1) - extrdi. r0, r7, 8, 8 - stbu r0, 1(r3) - addi r5, r5, -1 - beq L(g2) - cmpdi r5, 0 - beq L(g1) - extrdi. r0, r7, 8, 16 - stbu r0, 1(r3) - addi r5, r5, -1 - beq L(g2) - cmpdi r5, 0 - beq L(g1) - extrdi. r0, r7, 8, 24 - stbu r0, 1(r3) - addi r5, r5, -1 - beq L(g2) - cmpdi r5, 0 - beq L(g1) - extrdi. r0, r7, 8, 32 - stbu r0, 1(r3) - addi r5, r5, -1 - beq L(g2) - cmpdi r5, 0 - beq L(g1) - extrdi. r0, r7, 8, 40 - stbu r0, 1(r3) - addi r5, r5, -1 - beq L(g2) - cmpdi r5, 0 - beq L(g1) - extrdi. r0, r7, 8, 48 - stbu r0, 1(r3) - addi r5, r5, -1 - beq L(g2) - cmpdi r5, 0 - beq L(g1) - stbu r7, 1(r3) - addi r5, r5, -1 - b L(g2) -#endif -L(g1): -#ifdef USE_AS_STPNCPY - addi r3, r3, 1 -#endif -L(g2): - addi r3, r3, 1 - mr r19, r3 - mr r8, r5 - b L(zeroFill) -L(null1): - mr r9, r3 - subf r4, r6, r4 - b L(byte_by_byte) -END(FUNC_NAME) -#ifndef USE_AS_STPNCPY -libc_hidden_builtin_def (strncpy) -#endif diff --git a/sysdeps/powerpc/powerpc64/power7/strnlen.S b/sysdeps/powerpc/powerpc64/power7/strnlen.S deleted file mode 100644 index a970b6ce30..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/strnlen.S +++ /dev/null @@ -1,182 +0,0 @@ -/* Optimized strnlen implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Luis Machado . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef STRNLEN -# define STRNLEN __strnlen -#endif - -/* int [r3] strnlen (char *s [r3], int size [r4]) */ - .machine power7 -ENTRY (STRNLEN) - CALL_MCOUNT 2 - dcbt 0,r3 - clrrdi r8,r3,3 - add r7,r3,r4 /* Calculate the last acceptable address. */ - cmpldi r4,32 - li r0,0 /* Doubleword with null chars. */ - addi r7,r7,-1 - - /* If we have less than 33 bytes to search, skip to a faster code. */ - ble L(small_range) - - rlwinm r6,r3,3,26,28 /* Calculate padding. */ - ld r12,0(r8) /* Load doubleword from memory. */ - cmpb r10,r12,r0 /* Check for null bytes in DWORD1. */ -#ifdef __LITTLE_ENDIAN__ - srd r10,r10,r6 - sld r10,r10,r6 -#else - sld r10,r10,r6 - srd r10,r10,r6 -#endif - cmpldi cr7,r10,0 /* If r10 == 0, no null's have been found. */ - bne cr7,L(done) - - clrrdi r7,r7,3 /* Address of last doubleword. */ - mtcrf 0x01,r8 - /* Are we now aligned to a quadword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 28,L(loop_setup) - - /* Handle DWORD2 of pair. */ - ldu r12,8(r8) - cmpb r10,r12,r0 - cmpldi cr7,r10,0 - bne cr7,L(done) - -L(loop_setup): - /* The last dword we want to read in the loop below is the one - containing the last byte of the string, ie. the dword at - (s + size - 1) & ~7, or r7. The first dword read is at - r8 + 8, we read 2 * cnt dwords, so the last dword read will - be at r8 + 8 + 16 * cnt - 8. Solving for cnt gives - cnt = (r7 - r8) / 16 */ - sub r5,r7,r8 - srdi r6,r5,4 /* Number of loop iterations. */ - mtctr r6 /* Setup the counter. */ - - /* Main loop to look for the null byte in the string. Since - it's a small loop (< 8 instructions), align it to 32-bytes. */ - .p2align 5 -L(loop): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - - ld r12,8(r8) - ldu r11,16(r8) - cmpb r10,r12,r0 - cmpb r9,r11,r0 - or r5,r9,r10 /* Merge everything in one doubleword. */ - cmpldi cr7,r5,0 - bne cr7,L(found) - bdnz L(loop) - - /* We may have one more dword to read. */ - cmpld cr6,r8,r7 - beq cr6,L(end_max) - - ldu r12,8(r8) - cmpb r10,r12,r0 - cmpldi cr6,r10,0 - bne cr6,L(done) - -L(end_max): - mr r3,r4 - blr - - /* OK, one (or both) of the doublewords contains a null byte. Check - the first doubleword and decrement the address in case the first - doubleword really contains a null byte. */ - .align 4 -L(found): - cmpldi cr6,r10,0 - addi r8,r8,-8 - bne cr6,L(done) - - /* The null byte must be in the second doubleword. Adjust the address - again and move the result of cmpb to r10 so we can calculate the - length. */ - - mr r10,r9 - addi r8,r8,8 - - /* r10 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as the null byte in the original - doubleword from the string. Use that to calculate the length. - We need to make sure the null char is *before* the end of the - range. */ -L(done): -#ifdef __LITTLE_ENDIAN__ - addi r0,r10,-1 - andc r0,r0,r10 - popcntd r0,r0 -#else - cntlzd r0,r10 /* Count leading zeros before the match. */ -#endif - sub r3,r8,r3 - srdi r0,r0,3 /* Convert leading/trailing zeros to bytes. */ - add r3,r3,r0 /* Length until the match. */ - cmpld r3,r4 - blelr - mr r3,r4 - blr - -/* Deals with size <= 32. */ - .align 4 -L(small_range): - cmpldi r4,0 - beq L(end_max) - - clrrdi r7,r7,3 /* Address of last doubleword. */ - - rlwinm r6,r3,3,26,28 /* Calculate padding. */ - ld r12,0(r8) /* Load doubleword from memory. */ - cmpb r10,r12,r0 /* Check for null bytes in DWORD1. */ -#ifdef __LITTLE_ENDIAN__ - srd r10,r10,r6 - sld r10,r10,r6 -#else - sld r10,r10,r6 - srd r10,r10,r6 -#endif - cmpldi cr7,r10,0 - bne cr7,L(done) - - cmpld r8,r7 - beq L(end_max) - - .p2align 5 -L(loop_small): - ldu r12,8(r8) - cmpb r10,r12,r0 - cmpldi cr6,r10,0 - bne cr6,L(done) - cmpld r8,r7 - bne L(loop_small) - mr r3,r4 - blr - -END (STRNLEN) -libc_hidden_def (__strnlen) -weak_alias (__strnlen, strnlen) -libc_hidden_def (strnlen) diff --git a/sysdeps/powerpc/powerpc64/power7/strrchr.S b/sysdeps/powerpc/powerpc64/power7/strrchr.S deleted file mode 100644 index c22393deb5..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/strrchr.S +++ /dev/null @@ -1,260 +0,0 @@ -/* Optimized strrchr implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] strrchr (char *s [r3], int c [r4]) */ - -#ifndef STRRCHR -# define STRRCHR strrchr -#endif - - .machine power7 -ENTRY (STRRCHR) - CALL_MCOUNT 2 - dcbt 0,r3 - clrrdi r8,r3,3 /* Align the address to doubleword boundary. */ - cmpdi cr7,r4,0 - ld r12,0(r8) /* Load doubleword from memory. */ - li r9,0 /* used to store last occurence */ - li r0,0 /* Doubleword with null chars to use - with cmpb. */ - - rlwinm r6,r3,3,26,28 /* Calculate padding. */ - - beq cr7,L(null_match) - - /* Replicate byte to doubleword. */ - insrdi r4,r4,8,48 - insrdi r4,r4,16,32 - insrdi r4,r4,32,0 - - /* r4 is changed now ,if its passed as more chars - check for null again */ - cmpdi cr7,r4,0 - beq cr7,L(null_match) - /* Now r4 has a doubleword of c bytes and r0 has - a doubleword of null bytes. */ - - cmpb r10,r12,r4 /* Compare each byte against c byte. */ - cmpb r11,r12,r0 /* Compare each byte against null byte. */ - - /* Move the doublewords left and right to discard the bits that are - not part of the string and bring them back as zeros. */ -#ifdef __LITTLE_ENDIAN__ - srd r10,r10,r6 - srd r11,r11,r6 - sld r10,r10,r6 - sld r11,r11,r6 -#else - sld r10,r10,r6 - sld r11,r11,r6 - srd r10,r10,r6 - srd r11,r11,r6 -#endif - or r5,r10,r11 /* OR the results to speed things up. */ - cmpdi cr7,r5,0 /* If r5 == 0, no c or null bytes - have been found. */ - bne cr7,L(done) - -L(align): - mtcrf 0x01,r8 - - /* Are we now aligned to a doubleword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 28,L(loop) - - /* Handle WORD2 of pair. */ - ldu r12,8(r8) - cmpb r10,r12,r4 - cmpb r11,r12,r0 - or r5,r10,r11 - cmpdi cr7,r5,0 - bne cr7,L(done) - b L(loop) /* We branch here (rather than falling through) - to skip the nops due to heavy alignment - of the loop below. */ - .p2align 5 -L(loop): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - ld r12,8(r8) - ldu r7,16(r8) - cmpb r10,r12,r4 - cmpb r11,r12,r0 - cmpb r6,r7,r4 - cmpb r7,r7,r0 - or r12,r10,r11 - or r5,r6,r7 - or r5,r12,r5 - cmpdi cr7,r5,0 - beq cr7,L(loop) - - /* OK, one (or both) of the doublewords contains a c/null byte. Check - the first doubleword and decrement the address in case the first - doubleword really contains a c/null byte. */ - cmpdi cr6,r12,0 - addi r8,r8,-8 - bne cr6,L(done) - - /* The c/null byte must be in the second doubleword. Adjust the - address again and move the result of cmpb to r10 so we can calculate - the pointer. */ - - mr r10,r6 - mr r11,r7 - addi r8,r8,8 - - /* r10/r11 have the output of the cmpb instructions, that is, - 0xff in the same position as the c/null byte in the original - doubleword from the string. Use that to calculate the pointer. */ - -L(done): - /* if there are more than one 0xff in r11, find the first pos of ff - in r11 and fill r10 with 0 from that position */ - cmpdi cr7,r11,0 - beq cr7,L(no_null) -#ifdef __LITTLE_ENDIAN__ - addi r3,r11,-1 - andc r3,r3,r11 - popcntd r0,r3 -#else - cntlzd r0,r11 -#endif - subfic r0,r0,63 - li r6,-1 -#ifdef __LITTLE_ENDIAN__ - srd r0,r6,r0 -#else - sld r0,r6,r0 -#endif - and r10,r0,r10 -L(no_null): -#ifdef __LITTLE_ENDIAN__ - cntlzd r0,r10 /* Count leading zeros before c matches. */ - addi r3,r10,-1 - andc r3,r3,r10 - addi r10,r11,-1 - andc r10,r10,r11 - cmpld cr7,r3,r10 - bgt cr7,L(no_match) -#else - addi r3,r10,-1 /* Count trailing zeros before c matches. */ - andc r3,r3,r10 - popcntd r0,r3 - cmpld cr7,r11,r10 - bgt cr7,L(no_match) -#endif - srdi r0,r0,3 /* Convert trailing zeros to bytes. */ - subfic r0,r0,7 - add r9,r8,r0 /* Return address of the matching c byte - or null in case c was not found. */ - li r0,0 - cmpdi cr7,r11,0 /* If r11 == 0, no null's have been found. */ - beq cr7,L(align) - - .align 4 -L(no_match): - mr r3,r9 - blr - -/* We are here because strrchr was called with a null byte. */ - .align 4 -L(null_match): - /* r0 has a doubleword of null bytes. */ - - cmpb r5,r12,r0 /* Compare each byte against null bytes. */ - - /* Move the doublewords left and right to discard the bits that are - not part of the string and bring them back as zeros. */ -#ifdef __LITTLE_ENDIAN__ - srd r5,r5,r6 - sld r5,r5,r6 -#else - sld r5,r5,r6 - srd r5,r5,r6 -#endif - cmpdi cr7,r5,0 /* If r10 == 0, no c or null bytes - have been found. */ - bne cr7,L(done_null) - - mtcrf 0x01,r8 - - /* Are we now aligned to a quadword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 28,L(loop_null) - - /* Handle WORD2 of pair. */ - ldu r12,8(r8) - cmpb r5,r12,r0 - cmpdi cr7,r5,0 - bne cr7,L(done_null) - b L(loop_null) /* We branch here (rather than falling through) - to skip the nops due to heavy alignment - of the loop below. */ - - /* Main loop to look for the end of the string. Since it's a - small loop (< 8 instructions), align it to 32-bytes. */ - .p2align 5 -L(loop_null): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - ld r12,8(r8) - ldu r11,16(r8) - cmpb r5,r12,r0 - cmpb r10,r11,r0 - or r6,r5,r10 - cmpdi cr7,r6,0 - beq cr7,L(loop_null) - - /* OK, one (or both) of the doublewords contains a null byte. Check - the first doubleword and decrement the address in case the first - doubleword really contains a null byte. */ - - cmpdi cr6,r5,0 - addi r8,r8,-8 - bne cr6,L(done_null) - - /* The null byte must be in the second doubleword. Adjust the address - again and move the result of cmpb to r10 so we can calculate the - pointer. */ - - mr r5,r10 - addi r8,r8,8 - - /* r5 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as the null byte in the original - doubleword from the string. Use that to calculate the pointer. */ -L(done_null): -#ifdef __LITTLE_ENDIAN__ - addi r0,r5,-1 - andc r0,r0,r5 - popcntd r0,r0 -#else - cntlzd r0,r5 /* Count leading zeros before the match. */ -#endif - srdi r0,r0,3 /* Convert trailing zeros to bytes. */ - add r3,r8,r0 /* Return address of the matching null byte. */ - blr -END (STRRCHR) -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/powerpc/powerpc64/power7/strstr-ppc64.c b/sysdeps/powerpc/powerpc64/power7/strstr-ppc64.c deleted file mode 100644 index a917b2157e..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/strstr-ppc64.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Optimized strstr implementation for PowerPC64/POWER7. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRSTR __strstr_ppc -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(__name) - -extern __typeof (strstr) __strstr_ppc attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc64/power7/strstr.S b/sysdeps/powerpc/powerpc64/power7/strstr.S deleted file mode 100644 index 260db2ed6d..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/strstr.S +++ /dev/null @@ -1,521 +0,0 @@ -/* Optimized strstr implementation for PowerPC64/POWER7. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Char * [r3] strstr (char *s [r3], char * pat[r4]) */ - -/* The performance gain is obtained using aligned memory access, load - * doubleword and usage of cmpb instruction for quicker comparison. */ - -#define ITERATIONS 64 - -#ifndef STRSTR -# define STRSTR strstr -#endif - -#ifndef STRLEN -/* For builds with no IFUNC support, local calls should be made to internal - GLIBC symbol (created by libc_hidden_builtin_def). */ -# ifdef SHARED -# define STRLEN __GI_strlen -# else -# define STRLEN strlen -# endif -#endif - -#ifndef STRNLEN -/* For builds with no IFUNC support, local calls should be made to internal - GLIBC symbol (created by libc_hidden_builtin_def). */ -# ifdef SHARED -# define STRNLEN __GI_strnlen -# else -# define STRNLEN __strnlen -# endif -#endif - -#ifndef STRCHR -# ifdef SHARED -# define STRCHR __GI_strchr -# else -# define STRCHR strchr -# endif -#endif - -#define FRAMESIZE (FRAME_MIN_SIZE+32) - .machine power7 -EALIGN (STRSTR, 4, 0) - CALL_MCOUNT 2 - mflr r0 /* Load link register LR to r0. */ - std r31, -8(r1) /* Save callers register r31. */ - std r30, -16(r1) /* Save callers register r30. */ - std r29, -24(r1) /* Save callers register r29. */ - std r28, -32(r1) /* Save callers register r28. */ - std r0, 16(r1) /* Store the link register. */ - cfi_offset(r31, -8) - cfi_offset(r30, -16) - cfi_offset(r28, -32) - cfi_offset(r29, -24) - cfi_offset(lr, 16) - stdu r1, -FRAMESIZE(r1) /* Create the stack frame. */ - cfi_adjust_cfa_offset(FRAMESIZE) - - dcbt 0, r3 - dcbt 0, r4 - cmpdi cr7, r3, 0 - beq cr7, L(retnull) - cmpdi cr7, r4, 0 - beq cr7, L(retnull) - - mr r29, r3 - mr r30, r4 - mr r3, r4 - bl STRLEN - nop - - cmpdi cr7, r3, 0 /* If search str is null. */ - beq cr7, L(ret_r3) - - mr r31, r3 - mr r4, r3 - mr r3, r29 - bl STRNLEN - nop - - cmpd cr7, r3, r31 /* If len(r3) < len(r4). */ - blt cr7, L(retnull) - mr r3, r29 - lbz r4, 0(r30) - bl STRCHR - nop - - mr r11, r3 - /* If first char of search str is not present. */ - cmpdi cr7, r3, 0 - ble cr7, L(end) - /* Reg r28 is used to count the number of iterations. */ - li r28, 0 - rldicl r8, r3, 0, 52 /* Page cross check. */ - cmpldi cr7, r8, 4096-16 - bgt cr7, L(bytebybyte) - - rldicl r8, r30, 0, 52 - cmpldi cr7, r8, 4096-16 - bgt cr7, L(bytebybyte) - - /* If len(r4) < 8 handle in a different way. */ - /* Shift position based on null and use cmpb. */ - cmpdi cr7, r31, 8 - blt cr7, L(lessthan8) - - /* Len(r4) >= 8 reaches here. */ - mr r8, r3 /* Save r3 for future use. */ - mr r4, r30 /* Restore r4. */ - li r0, 0 - rlwinm r10, r30, 3, 26, 28 /* Calculate padding in bits. */ - clrrdi r4, r4, 3 /* Make r4 aligned to 8. */ - ld r6, 0(r4) - addi r4, r4, 8 - cmpdi cr7, r10, 0 /* Check if its already aligned? */ - beq cr7, L(begin1) -#ifdef __LITTLE_ENDIAN__ - srd r6, r6, r10 /* Discard unwanted bits. */ -#else - sld r6, r6, r10 -#endif - ld r9, 0(r4) - subfic r10, r10, 64 -#ifdef __LITTLE_ENDIAN__ - sld r9, r9, r10 /* Discard unwanted bits. */ -#else - srd r9, r9, r10 -#endif - or r6, r6, r9 /* Form complete search str. */ -L(begin1): - mr r29, r6 - rlwinm r10, r3, 3, 26, 28 - clrrdi r3, r3, 3 - ld r5, 0(r3) - cmpb r9, r0, r6 /* Check if input has null. */ - cmpdi cr7, r9, 0 - bne cr7, L(return3) - cmpb r9, r0, r5 /* Check if input has null. */ -#ifdef __LITTLE_ENDIAN__ - srd r9, r9, r10 -#else - sld r9, r9, r10 -#endif - cmpdi cr7, r9, 0 - bne cr7, L(retnull) - - li r12, -8 /* Shift values. */ - li r11, 72 /* Shift values. */ - cmpdi cr7, r10, 0 - beq cr7, L(nextbyte1) - mr r12, r10 - addi r12, r12, -8 - subfic r11, r12, 64 - -L(nextbyte1): - ldu r7, 8(r3) /* Load next dw. */ - addi r12, r12, 8 /* Shift one byte and compare. */ - addi r11, r11, -8 -#ifdef __LITTLE_ENDIAN__ - srd r9, r5, r12 /* Rotate based on mask. */ - sld r10, r7, r11 -#else - sld r9, r5, r12 - srd r10, r7, r11 -#endif - /* Form single dw from few bytes on first load and second load. */ - or r10, r9, r10 - /* Check for null in the formed dw. */ - cmpb r9, r0, r10 - cmpdi cr7, r9, 0 - bne cr7, L(retnull) - /* Cmpb search str and input str. */ - cmpb r9, r10, r6 - cmpdi cr7, r9, -1 - beq cr7, L(match) - addi r8, r8, 1 - b L(begin) - - .align 4 -L(match): - /* There is a match of 8 bytes, check next bytes. */ - cmpdi cr7, r31, 8 - beq cr7, L(return) - /* Update next starting point r8. */ - srdi r9, r11, 3 - subf r9, r9, r3 - mr r8, r9 - -L(secondmatch): - mr r5, r7 - rlwinm r10, r30, 3, 26, 28 /* Calculate padding in bits. */ - ld r6, 0(r4) - addi r4, r4, 8 - cmpdi cr7, r10, 0 /* Check if its already aligned? */ - beq cr7, L(proceed3) -#ifdef __LITTLE_ENDIAN__ - srd r6, r6, r10 /* Discard unwanted bits. */ - cmpb r9, r0, r6 - sld r9, r9, r10 -#else - sld r6, r6, r10 - cmpb r9, r0, r6 - srd r9, r9, r10 -#endif - cmpdi cr7, r9, 0 - bne cr7, L(proceed3) - ld r9, 0(r4) - subfic r10, r10, 64 -#ifdef __LITTLE_ENDIAN__ - sld r9, r9, r10 /* Discard unwanted bits. */ -#else - srd r9, r9, r10 -#endif - or r6, r6, r9 /* Form complete search str. */ - -L(proceed3): - li r7, 0 - addi r3, r3, 8 - cmpb r9, r0, r5 - cmpdi cr7, r9, 0 - bne cr7, L(proceed4) - ld r7, 0(r3) -L(proceed4): -#ifdef __LITTLE_ENDIAN__ - srd r9, r5, r12 - sld r10, r7, r11 -#else - sld r9, r5, r12 - srd r10, r7, r11 -#endif - /* Form single dw with few bytes from first and second load. */ - or r10, r9, r10 - cmpb r9, r0, r6 - cmpdi cr7, r9, 0 - bne cr7, L(return4) - /* Check for null in the formed dw. */ - cmpb r9, r0, r10 - cmpdi cr7, r9, 0 - bne cr7, L(retnull) - /* If the next 8 bytes dont match, start search again. */ - cmpb r9, r10, r6 - cmpdi cr7, r9, -1 - bne cr7, L(reset) - /* If the next 8 bytes match, load and compare next 8. */ - b L(secondmatch) - - .align 4 -L(reset): - /* Start the search again. */ - addi r8, r8, 1 - b L(begin) - - .align 4 -L(return3): - /* Count leading zeros and compare partial dw. */ -#ifdef __LITTLE_ENDIAN__ - addi r7, r9, -1 - andc r7, r7, r9 - popcntd r7, r7 - subfic r7, r7, 64 - sld r10, r5, r7 - sld r6, r6, r7 -#else - cntlzd r7, r9 - subfic r7, r7, 64 - srd r10, r5, r7 - srd r6, r6, r7 -#endif - cmpb r9, r10, r6 - cmpdi cr7, r9, -1 - addi r8, r8, 1 - /* Start search again if there is no match. */ - bne cr7, L(begin) - /* If the words match, update return values. */ - subfic r7, r7, 64 - srdi r7, r7, 3 - add r3, r3, r7 - subf r3, r31, r3 - b L(end) - - .align 4 -L(return4): - /* Count leading zeros and compare partial dw. */ -#ifdef __LITTLE_ENDIAN__ - addi r7, r9, -1 - andc r7, r7, r9 - popcntd r7, r7 - subfic r7, r7, 64 - sld r10, r10, r7 - sld r6, r6, r7 -#else - cntlzd r7, r9 - subfic r7, r7, 64 - srd r10, r10, r7 - srd r6, r6, r7 -#endif - cmpb r9, r10, r6 - cmpdi cr7, r9, -1 - addi r8, r8, 1 - bne cr7, L(begin) - subfic r7, r7, 64 - srdi r11, r11, 3 - subf r3, r11, r3 - srdi r7, r7, 3 - add r3, r3, r7 - subf r3, r31, r3 - b L(end) - - .align 4 -L(begin): - mr r3, r8 - /* When our iterations exceed ITERATIONS,fall back to default. */ - addi r28, r28, 1 - cmpdi cr7, r28, ITERATIONS - beq cr7, L(default) - lbz r4, 0(r30) - bl STRCHR - nop - /* If first char of search str is not present. */ - cmpdi cr7, r3, 0 - ble cr7, L(end) - mr r8, r3 - mr r4, r30 /* Restore r4. */ - li r0, 0 - mr r6, r29 - clrrdi r4, r4, 3 - addi r4, r4, 8 - b L(begin1) - - /* Handle less than 8 search string. */ - .align 4 -L(lessthan8): - mr r4, r3 - mr r9, r30 - li r0, 0 - - rlwinm r10, r9, 3, 26, 28 /* Calculate padding in bits. */ - srdi r8, r10, 3 /* Padding in bytes. */ - clrrdi r9, r9, 3 /* Make r4 aligned to 8. */ - ld r6, 0(r9) - cmpdi cr7, r10, 0 /* Check if its already aligned? */ - beq cr7, L(proceed2) -#ifdef __LITTLE_ENDIAN__ - srd r6, r6, r10 /* Discard unwanted bits. */ -#else - sld r6, r6, r10 -#endif - subfic r8, r8, 8 - cmpd cr7, r8, r31 /* Next load needed? */ - bge cr7, L(proceed2) - ld r7, 8(r9) - subfic r10, r10, 64 -#ifdef __LITTLE_ENDIAN__ - sld r7, r7, r10 /* Discard unwanted bits. */ -#else - srd r7, r7, r10 -#endif - or r6, r6, r7 /* Form complete search str. */ -L(proceed2): - mr r29, r6 - rlwinm r10, r3, 3, 26, 28 - clrrdi r7, r3, 3 /* Make r3 aligned. */ - ld r5, 0(r7) - sldi r8, r31, 3 - subfic r8, r8, 64 -#ifdef __LITTLE_ENDIAN__ - sld r6, r6, r8 - cmpb r9, r0, r5 - srd r9, r9, r10 -#else - srd r6, r6, r8 - cmpb r9, r0, r5 - sld r9, r9, r10 -#endif - cmpdi cr7, r9, 0 - bne cr7, L(noload) - cmpdi cr7, r10, 0 - beq cr7, L(continue) - ld r7, 8(r7) -L(continue1): - mr r12, r10 - addi r12, r12, -8 - subfic r11, r12, 64 - b L(nextbyte) - - .align 4 -L(continue): - ld r7, 8(r7) - li r12, -8 /* Shift values. */ - li r11, 72 /* Shift values. */ -L(nextbyte): - addi r12, r12, 8 /* Mask for rotation. */ - addi r11, r11, -8 -#ifdef __LITTLE_ENDIAN__ - srd r9, r5, r12 - sld r10, r7, r11 - or r10, r9, r10 - sld r10, r10, r8 - cmpb r9, r0, r10 - srd r9, r9, r8 -#else - sld r9, r5, r12 - srd r10, r7, r11 - or r10, r9, r10 - srd r10, r10, r8 - cmpb r9, r0, r10 - sld r9, r9, r8 -#endif - cmpdi cr7, r9, 0 - bne cr7, L(retnull) - cmpb r9, r10, r6 - cmpdi cr7, r9, -1 - beq cr7, L(end) - addi r3, r4, 1 - /* When our iterations exceed ITERATIONS,fall back to default. */ - addi r28, r28, 1 - cmpdi cr7, r28, ITERATIONS - beq cr7, L(default) - lbz r4, 0(r30) - bl STRCHR - nop - /* If first char of search str is not present. */ - cmpdi cr7, r3, 0 - ble cr7, L(end) - mr r4, r3 - mr r6, r29 - li r0, 0 - b L(proceed2) - - .align 4 -L(noload): - /* Reached null in r3, so skip next load. */ - li r7, 0 - b L(continue1) - - .align 4 -L(return): - /* Update return values. */ - srdi r9, r11, 3 - subf r3, r9, r3 - b L(end) - - /* Handling byte by byte. */ - .align 4 -L(bytebybyte): - mr r8, r3 - addi r8, r8, -1 -L(loop1): - addi r8, r8, 1 - mr r3, r8 - mr r4, r30 - lbz r6, 0(r4) - cmpdi cr7, r6, 0 - beq cr7, L(updater3) -L(loop): - lbz r5, 0(r3) - cmpdi cr7, r5, 0 - beq cr7, L(retnull) - cmpld cr7, r6, r5 - bne cr7, L(loop1) - addi r3, r3, 1 - addi r4, r4, 1 - lbz r6, 0(r4) - cmpdi cr7, r6, 0 - beq cr7, L(updater3) - b L(loop) - - /* Handling return values. */ - .align 4 -L(updater3): - subf r3, r31, r3 /* Reduce len of r4 from r3. */ - b L(end) - - .align 4 -L(ret_r3): - mr r3, r29 /* Return r3. */ - b L(end) - - .align 4 -L(retnull): - li r3, 0 /* Return NULL. */ - b L(end) - - .align 4 -L(default): - mr r4, r30 - bl __strstr_ppc - nop - - .align 4 -L(end): - addi r1, r1, FRAMESIZE /* Restore stack pointer. */ - cfi_adjust_cfa_offset(-FRAMESIZE) - ld r0, 16(r1) /* Restore the saved link register. */ - ld r28, -32(r1) /* Restore callers save register r28. */ - ld r29, -24(r1) /* Restore callers save register r29. */ - ld r30, -16(r1) /* Restore callers save register r30. */ - ld r31, -8(r1) /* Restore callers save register r31. */ - mtlr r0 /* Branch to link register. */ - blr -END (STRSTR) -libc_hidden_builtin_def (strstr) diff --git a/sysdeps/powerpc/powerpc64/power7/sub_n.S b/sysdeps/powerpc/powerpc64/power7/sub_n.S deleted file mode 100644 index 848dad5718..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/sub_n.S +++ /dev/null @@ -1,23 +0,0 @@ -/* PowerPC64 mpn_lshift -- mpn_add_n/mpn_sub_n -- mpn addition and - subtraction. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define USE_AS_SUB -#include "add_n.S" diff --git a/sysdeps/powerpc/powerpc64/power8/Implies b/sysdeps/powerpc/powerpc64/power8/Implies deleted file mode 100644 index 9a5e3c7277..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc64/power7/fpu -powerpc/powerpc64/power7 diff --git a/sysdeps/powerpc/powerpc64/power8/Makefile b/sysdeps/powerpc/powerpc64/power8/Makefile deleted file mode 100644 index 71a59529f3..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),string) -sysdep_routines += strcasestr-ppc64 -endif diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/Implies b/sysdeps/powerpc/powerpc64/power8/fpu/Implies deleted file mode 100644 index 1187cdfb0a..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power7/fpu/ diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S b/sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S deleted file mode 100644 index 4c42926a74..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S +++ /dev/null @@ -1,303 +0,0 @@ -/* Optimized expf(). PowerPC64/POWER8 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Short algorithm description: - * - * Let K = 64 (table size). - * e^x = 2^(x/log(2)) = 2^n * T[j] * (1 + P(y)) - * where: - * x = m*log(2)/K + y, y in [0.0..log(2)/K] - * m = n*K + j, m,n,j - signed integer, j in [0..K-1] - * values of 2^(j/K) are tabulated as T[j]. - * - * P(y) is a minimax polynomial approximation of expf(y)-1 - * on small interval [0.0..log(2)/K]. - * - * P(y) = P3*y*y*y*y + P2*y*y*y + P1*y*y + P0*y, calculated as - * z = y*y; P(y) = (P3*z + P1)*z + (P2*z + P0)*y - * - * Special cases: - * expf(NaN) = NaN - * expf(+INF) = +INF - * expf(-INF) = 0 - * expf(x) = 1 for subnormals - * for finite argument, only expf(0)=1 is exact - * expf(x) overflows if x>88.7228317260742190 - * expf(x) underflows if x<-103.972076416015620 - */ - -#define C1 0x42ad496b /* Single precision 125*log(2). */ -#define C2 0x31800000 /* Single precision 2^(-28). */ -#define SP_INF 0x7f800000 /* Single precision Inf. */ -#define SP_EXP_BIAS 0x1fc0 /* Single precision exponent bias. */ - -#define DATA_OFFSET r9 - -/* Implements the function - - float [fp1] expf (float [fp1] x) */ - - .machine power8 -EALIGN(__ieee754_expf, 4, 0) - addis DATA_OFFSET,r2,.Lanchor@toc@ha - addi DATA_OFFSET,DATA_OFFSET,.Lanchor@toc@l - - xscvdpspn v0,v1 - mfvsrd r8,v0 /* r8 = x */ - lfd fp2,(.KLN2-.Lanchor)(DATA_OFFSET) - lfd fp3,(.P2-.Lanchor)(DATA_OFFSET) - rldicl r3,r8,32,33 /* r3 = |x| */ - lis r4,C1@ha /* r4 = 125*log(2) */ - ori r4,r4,C1@l - cmpw r3,r4 - lfd fp5,(.P3-.Lanchor)(DATA_OFFSET) - lfd fp4,(.RS-.Lanchor)(DATA_OFFSET) - fmadd fp2,fp1,fp2,fp4 /* fp2 = x * K/log(2) + (2^23 + 2^22) */ - bge L(special_paths) /* |x| >= 125*log(2) ? */ - - lis r4,C2@ha - ori r4,r4,C2@l - cmpw r3,r4 - blt L(small_args) /* |x| < 2^(-28) ? */ - - /* Main path: here if 2^(-28) <= |x| < 125*log(2) */ - frsp fp6,fp2 - xscvdpsp v2,v2 - mfvsrd r8,v2 - mr r3,r8 /* r3 = m */ - rldicl r8,r8,32,58 /* r8 = j */ - lfs fp4,(.SP_RS-.Lanchor)(DATA_OFFSET) - fsubs fp2,fp6,fp4 /* fp2 = m = x * K/log(2) */ - srdi r3,r3,32 - clrrwi r3,r3,6 /* r3 = n */ - lfd fp6,(.NLN2K-.Lanchor)(DATA_OFFSET) - fmadd fp0,fp2,fp6,fp1 /* fp0 = y = x - m*log(2)/K */ - fmul fp2,fp0,fp0 /* fp2 = z = y^2 */ - lfd fp4,(.P1-.Lanchor)(DATA_OFFSET) - lfd fp6,(.P0-.Lanchor)(DATA_OFFSET) - lis r4,SP_EXP_BIAS@ha - ori r4,r4,SP_EXP_BIAS@l - add r3,r3,r4 - rldic r3,r3,49,1 /* r3 = 2^n */ - fmadd fp4,fp5,fp2,fp4 /* fp4 = P3 * z + P1 */ - fmadd fp6,fp3,fp2,fp6 /* fp6 = P2 * z + P0 */ - mtvsrd v1,r3 - xscvspdp v1,v1 - fmul fp4,fp4,fp2 /* fp4 = (P3 * z + P1)*z */ - fmadd fp0,fp0,fp6,fp4 /* fp0 = P(y) */ - sldi r8,r8,3 /* Access doublewords from T[j]. */ - addi r6,DATA_OFFSET,(.Ttable-.Lanchor) - lfdx fp3,r6,r8 - fmadd fp0,fp0,fp3,fp3 /* fp0 = T[j] * (1 + P(y)) */ - fmul fp1,fp1,fp0 /* fp1 = 2^n * T[j] * (1 + P(y)) */ - frsp fp1,fp1 - blr - - .align 4 -/* x is either underflow, overflow, infinite or NaN. */ -L(special_paths): - srdi r8,r8,32 - rlwinm r8,r8,3,29,29 /* r8 = 0, if x positive. - r8 = 4, otherwise. */ - addi r6,DATA_OFFSET,(.SPRANGE-.Lanchor) - lwzx r4,r6,r8 /* r4 = .SPRANGE[signbit(x)] */ - cmpw r3,r4 - /* |x| <= .SPRANGE[signbit(x)] */ - ble L(near_under_or_overflow) - - lis r4,SP_INF@ha - ori r4,r4,SP_INF@l - cmpw r3,r4 - bge L(arg_inf_or_nan) /* |x| > Infinite ? */ - - addi r6,DATA_OFFSET,(.SPLARGE_SMALL-.Lanchor) - lfsx fp1,r6,r8 - fmuls fp1,fp1,fp1 - blr - - - .align 4 -L(small_args): - /* expf(x) = 1.0, where |x| < |2^(-28)| */ - lfs fp2,(.SPone-.Lanchor)(DATA_OFFSET) - fadds fp1,fp1,fp2 - blr - - - .align 4 -L(arg_inf_or_nan:) - bne L(arg_nan) - - /* expf(+INF) = +INF - expf(-INF) = 0 */ - addi r6,DATA_OFFSET,(.INF_ZERO-.Lanchor) - lfsx fp1,r6,r8 - blr - - - .align 4 -L(arg_nan): - /* expf(NaN) = NaN */ - fadd fp1,fp1,fp1 - frsp fp1,fp1 - blr - - .align 4 -L(near_under_or_overflow): - frsp fp6,fp2 - xscvdpsp v2,v2 - mfvsrd r8,v2 - mr r3,r8 /* r3 = m */ - rldicl r8,r8,32,58 /* r8 = j */ - lfs fp4,(.SP_RS-.Lanchor)(DATA_OFFSET) - fsubs fp2,fp6,fp4 /* fp2 = m = x * K/log(2) */ - srdi r3,r3,32 - clrrwi r3,r3,6 /* r3 = n */ - lfd fp6,(.NLN2K-.Lanchor)(DATA_OFFSET) - fmadd fp0,fp2,fp6,fp1 /* fp0 = y = x - m*log(2)/K */ - fmul fp2,fp0,fp0 /* fp2 = z = y^2 */ - lfd fp4,(.P1-.Lanchor)(DATA_OFFSET) - lfd fp6,(.P0-.Lanchor)(DATA_OFFSET) - ld r4,(.DP_EXP_BIAS-.Lanchor)(DATA_OFFSET) - add r3,r3,r4 - rldic r3,r3,46,1 /* r3 = 2 */ - fmadd fp4,fp5,fp2,fp4 /* fp4 = P3 * z + P1 */ - fmadd fp6,fp3,fp2,fp6 /* fp6 = P2 * z + P0 */ - mtvsrd v1,r3 - fmul fp4,fp4,fp2 /* fp4 = (P3*z + P1)*z */ - fmadd fp0,fp0,fp6,fp4 /* fp0 = P(y) */ - sldi r8,r8,3 /* Access doublewords from T[j]. */ - addi r6,DATA_OFFSET,(.Ttable-.Lanchor) - lfdx fp3,r6,r8 - fmadd fp0,fp0,fp3,fp3 /* fp0 = T[j] * (1 + T[j]) */ - fmul fp1,fp1,fp0 /* fp1 = 2^n * T[j] * (1 + T[j]) */ - frsp fp1,fp1 - blr -END(__ieee754_expf) - - .section .rodata, "a",@progbits -.Lanchor: - .balign 8 -/* Table T[j] = 2^(j/K). Double precision. */ -.Ttable: - .8byte 0x3ff0000000000000 - .8byte 0x3ff02c9a3e778061 - .8byte 0x3ff059b0d3158574 - .8byte 0x3ff0874518759bc8 - .8byte 0x3ff0b5586cf9890f - .8byte 0x3ff0e3ec32d3d1a2 - .8byte 0x3ff11301d0125b51 - .8byte 0x3ff1429aaea92de0 - .8byte 0x3ff172b83c7d517b - .8byte 0x3ff1a35beb6fcb75 - .8byte 0x3ff1d4873168b9aa - .8byte 0x3ff2063b88628cd6 - .8byte 0x3ff2387a6e756238 - .8byte 0x3ff26b4565e27cdd - .8byte 0x3ff29e9df51fdee1 - .8byte 0x3ff2d285a6e4030b - .8byte 0x3ff306fe0a31b715 - .8byte 0x3ff33c08b26416ff - .8byte 0x3ff371a7373aa9cb - .8byte 0x3ff3a7db34e59ff7 - .8byte 0x3ff3dea64c123422 - .8byte 0x3ff4160a21f72e2a - .8byte 0x3ff44e086061892d - .8byte 0x3ff486a2b5c13cd0 - .8byte 0x3ff4bfdad5362a27 - .8byte 0x3ff4f9b2769d2ca7 - .8byte 0x3ff5342b569d4f82 - .8byte 0x3ff56f4736b527da - .8byte 0x3ff5ab07dd485429 - .8byte 0x3ff5e76f15ad2148 - .8byte 0x3ff6247eb03a5585 - .8byte 0x3ff6623882552225 - .8byte 0x3ff6a09e667f3bcd - .8byte 0x3ff6dfb23c651a2f - .8byte 0x3ff71f75e8ec5f74 - .8byte 0x3ff75feb564267c9 - .8byte 0x3ff7a11473eb0187 - .8byte 0x3ff7e2f336cf4e62 - .8byte 0x3ff82589994cce13 - .8byte 0x3ff868d99b4492ed - .8byte 0x3ff8ace5422aa0db - .8byte 0x3ff8f1ae99157736 - .8byte 0x3ff93737b0cdc5e5 - .8byte 0x3ff97d829fde4e50 - .8byte 0x3ff9c49182a3f090 - .8byte 0x3ffa0c667b5de565 - .8byte 0x3ffa5503b23e255d - .8byte 0x3ffa9e6b5579fdbf - .8byte 0x3ffae89f995ad3ad - .8byte 0x3ffb33a2b84f15fb - .8byte 0x3ffb7f76f2fb5e47 - .8byte 0x3ffbcc1e904bc1d2 - .8byte 0x3ffc199bdd85529c - .8byte 0x3ffc67f12e57d14b - .8byte 0x3ffcb720dcef9069 - .8byte 0x3ffd072d4a07897c - .8byte 0x3ffd5818dcfba487 - .8byte 0x3ffda9e603db3285 - .8byte 0x3ffdfc97337b9b5f - .8byte 0x3ffe502ee78b3ff6 - .8byte 0x3ffea4afa2a490da - .8byte 0x3ffefa1bee615a27 - .8byte 0x3fff50765b6e4540 - .8byte 0x3fffa7c1819e90d8 - -.KLN2: - .8byte 0x40571547652b82fe /* Double precision K/log(2). */ - -/* Double precision polynomial coefficients. */ -.P0: - .8byte 0x3fefffffffffe7c6 -.P1: - .8byte 0x3fe00000008d6118 -.P2: - .8byte 0x3fc55550da752d4f -.P3: - .8byte 0x3fa56420eb78fa85 - -.RS: - .8byte 0x4168000000000000 /* Double precision 2^23 + 2^22. */ -.NLN2K: - .8byte 0xbf862e42fefa39ef /* Double precision -log(2)/K. */ -.DP_EXP_BIAS: - .8byte 0x000000000000ffc0 /* Double precision exponent bias. */ - - .balign 4 -.SPone: - .4byte 0x3f800000 /* Single precision 1.0. */ -.SP_RS: - .4byte 0x4b400000 /* Single precision 2^23 + 2^22. */ - -.SPRANGE: /* Single precision overflow/underflow bounds. */ - .4byte 0x42b17217 /* if x>this bound, then result overflows. */ - .4byte 0x42cff1b4 /* if x. */ - -#include -#define _ERRNO_H 1 -#include - -#define FRAMESIZE (FRAME_MIN_SIZE+16) - -#define FLOAT_EXPONENT_SHIFT 23 -#define FLOAT_EXPONENT_BIAS 127 -#define INTEGER_BITS 3 - -#define PI_4 0x3f490fdb /* PI/4 */ -#define NINEPI_4 0x40e231d6 /* 9 * PI/4 */ -#define TWO_PN5 0x3d000000 /* 2^-5 */ -#define TWO_PN27 0x32000000 /* 2^-27 */ -#define INFINITY 0x7f800000 -#define TWO_P23 0x4b000000 /* 2^23 */ -#define FX_FRACTION_1_28 0x9249250 /* 0x100000000 / 28 + 1 */ - - /* Implements the function - - float [fp1] cosf (float [fp1] x) */ - - .machine power8 -EALIGN(__cosf, 4, 0) - addis r9,r2,L(anchor)@toc@ha - addi r9,r9,L(anchor)@toc@l - - lis r4,PI_4@h - ori r4,r4,PI_4@l - - xscvdpspn v0,v1 - mfvsrd r8,v0 - rldicl r3,r8,32,33 /* Remove sign bit. */ - - cmpw r3,r4 - bge L(greater_or_equal_pio4) - - lis r4,TWO_PN5@h - ori r4,r4,TWO_PN5@l - - cmpw r3,r4 - blt L(less_2pn5) - - /* Chebyshev polynomial of the form: - * 1.0+x^2*(C0+x^2*(C1+x^2*(C2+x^2*(C3+x^2*C4)))). */ - - lfd fp9,(L(C0)-L(anchor))(r9) - lfd fp10,(L(C1)-L(anchor))(r9) - lfd fp11,(L(C2)-L(anchor))(r9) - lfd fp12,(L(C3)-L(anchor))(r9) - lfd fp13,(L(C4)-L(anchor))(r9) - - fmul fp2,fp1,fp1 /* x^2 */ - lfd fp3,(L(DPone)-L(anchor))(r9) - - fmadd fp4,fp2,fp13,fp12 /* C3+x^2*C4 */ - fmadd fp4,fp2,fp4,fp11 /* C2+x^2*(C3+x^2*C4) */ - fmadd fp4,fp2,fp4,fp10 /* C1+x^2*(C2+x^2*(C3+x^2*C4)) */ - fmadd fp4,fp2,fp4,fp9 /* C0+x^2*(C1+x^2*(C2+x^2*(C3+x^2*C4))) */ - fmadd fp1,fp2,fp4,fp3 /* 1.0+x^2*(C0+x^2*(C1+x^2*(C2+x^2*(C3+x^2*C4)))) */ - frsp fp1,fp1 /* Round to single precision. */ - - blr - - .balign 16 -L(greater_or_equal_pio4): - lis r4,NINEPI_4@h - ori r4,r4,NINEPI_4@l - cmpw r3,r4 - bge L(greater_or_equal_9pio4) - - /* Calculate quotient of |x|/(PI/4). */ - lfd fp2,(L(invpio4)-L(anchor))(r9) - fabs fp1,fp1 /* |x| */ - fmul fp2,fp1,fp2 /* |x|/(PI/4) */ - fctiduz fp2,fp2 - mfvsrd r3,v2 /* n = |x| mod PI/4 */ - - /* Now use that quotient to find |x| mod (PI/2). */ - addi r7,r3,1 - rldicr r5,r7,2,60 /* ((n+1) >> 1) << 3 */ - addi r6,r9,(L(pio2_table)-L(anchor)) - lfdx fp4,r5,r6 - fsub fp1,fp1,fp4 - - .balign 16 -L(reduced): - /* Now we are in the range -PI/4 to PI/4. */ - - /* Work out if we are in a positive or negative primary interval. */ - addi r7,r7,2 - rldicl r4,r7,62,63 /* ((n+3) >> 2) & 1 */ - - /* Load a 1.0 or -1.0. */ - addi r5,r9,(L(ones)-L(anchor)) - sldi r4,r4,3 - lfdx fp0,r4,r5 - - /* Are we in the primary interval of sin or cos? */ - andi. r4,r7,0x2 - bne L(cos) - - /* Chebyshev polynomial of the form: - x+x^3*(S0+x^2*(S1+x^2*(S2+x^2*(S3+x^2*S4)))). */ - - lfd fp9,(L(S0)-L(anchor))(r9) - lfd fp10,(L(S1)-L(anchor))(r9) - lfd fp11,(L(S2)-L(anchor))(r9) - lfd fp12,(L(S3)-L(anchor))(r9) - lfd fp13,(L(S4)-L(anchor))(r9) - - fmul fp2,fp1,fp1 /* x^2 */ - fmul fp3,fp2,fp1 /* x^3 */ - - fmadd fp4,fp2,fp13,fp12 /* S3+x^2*S4 */ - fmadd fp4,fp2,fp4,fp11 /* S2+x^2*(S3+x^2*S4) */ - fmadd fp4,fp2,fp4,fp10 /* S1+x^2*(S2+x^2*(S3+x^2*S4)) */ - fmadd fp4,fp2,fp4,fp9 /* S0+x^2*(S1+x^2*(S2+x^2*(S3+x^2*S4))) */ - fmadd fp4,fp3,fp4,fp1 /* x+x^3*(S0+x^2*(S1+x^2*(S2+x^2*(S3+x^2*S4)))) */ - fmul fp4,fp4,fp0 /* Add in the sign. */ - frsp fp1,fp4 /* Round to single precision. */ - - blr - - .balign 16 -L(cos): - /* Chebyshev polynomial of the form: - 1.0+x^2*(C0+x^2*(C1+x^2*(C2+x^2*(C3+x^2*C4)))). */ - - lfd fp9,(L(C0)-L(anchor))(r9) - lfd fp10,(L(C1)-L(anchor))(r9) - lfd fp11,(L(C2)-L(anchor))(r9) - lfd fp12,(L(C3)-L(anchor))(r9) - lfd fp13,(L(C4)-L(anchor))(r9) - - fmul fp2,fp1,fp1 /* x^2 */ - lfd fp3,(L(DPone)-L(anchor))(r9) - - fmadd fp4,fp2,fp13,fp12 /* C3+x^2*C4 */ - fmadd fp4,fp2,fp4,fp11 /* C2+x^2*(C3+x^2*C4) */ - fmadd fp4,fp2,fp4,fp10 /* C1+x^2*(C2+x^2*(C3+x^2*C4)) */ - fmadd fp4,fp2,fp4,fp9 /* C0+x^2*(C1+x^2*(C2+x^2*(C3+x^2*C4))) */ - fmadd fp4,fp2,fp4,fp3 /* 1.0 + x^2*(C0+x^2*(C1+x^2*(C2+x^2*(C3+x^2*C4)))) */ - fmul fp4,fp4,fp0 /* Add in the sign. */ - frsp fp1,fp4 /* Round to single precision. */ - - blr - - .balign 16 -L(greater_or_equal_9pio4): - lis r4,INFINITY@h - ori r4,r4,INFINITY@l - cmpw r3,r4 - bge L(inf_or_nan) - - lis r4,TWO_P23@h - ori r4,r4,TWO_P23@l - cmpw r3,r4 - bge L(greater_or_equal_2p23) - - fabs fp1,fp1 /* |x| */ - - /* Calculate quotient of |x|/(PI/4). */ - lfd fp2,(L(invpio4)-L(anchor))(r9) - - lfd fp3,(L(DPone)-L(anchor))(r9) - lfd fp4,(L(DPhalf)-L(anchor))(r9) - fmul fp2,fp1,fp2 /* |x|/(PI/4) */ - friz fp2,fp2 /* n = floor(|x|/(PI/4)) */ - - /* Calculate (n + 1) / 2. */ - fadd fp2,fp2,fp3 /* n + 1 */ - fmul fp3,fp2,fp4 /* (n + 1) / 2 */ - friz fp3,fp3 - - lfd fp4,(L(pio2hi)-L(anchor))(r9) - lfd fp5,(L(pio2lo)-L(anchor))(r9) - - fmul fp6,fp4,fp3 - fadd fp6,fp6,fp1 - fmadd fp1,fp5,fp3,fp6 - - fctiduz fp2,fp2 - mfvsrd r7,v2 /* n + 1 */ - - b L(reduced) - - .balign 16 -L(inf_or_nan): - bne L(skip_errno_setting) /* Is a NAN? */ - - /* We delayed the creation of the stack frame, as well as the saving of - the link register, because only at this point, we are sure that - doing so is actually needed. */ - - stfd fp1,-8(r1) - - /* Save the link register. */ - mflr r0 - std r0,16(r1) - cfi_offset(lr, 16) - - /* Create the stack frame. */ - stdu r1,-FRAMESIZE(r1) - cfi_adjust_cfa_offset(FRAMESIZE) - - bl JUMPTARGET(__errno_location) - nop - - /* Restore the stack frame. */ - addi r1,r1,FRAMESIZE - cfi_adjust_cfa_offset(-FRAMESIZE) - /* Restore the link register. */ - ld r0,16(r1) - mtlr r0 - - lfd fp1,-8(r1) - - /* errno = EDOM */ - li r4,EDOM - stw r4,0(r3) - -L(skip_errno_setting): - fsub fp1,fp1,fp1 /* x - x */ - blr - - .balign 16 -L(greater_or_equal_2p23): - fabs fp1,fp1 - - srwi r4,r3,FLOAT_EXPONENT_SHIFT - subi r4,r4,FLOAT_EXPONENT_BIAS - - /* We reduce the input modulo pi/4, so we need 3 bits of integer - to determine where in 2*pi we are. Index into our array - accordingly. */ - addi r4,r4,INTEGER_BITS - - /* To avoid an expensive divide, for the range we care about (0 - 127) - we can transform x/28 into: - - x/28 = (x * ((0x100000000 / 28) + 1)) >> 32 - - mulhwu returns the top 32 bits of the 64 bit result, doing the - shift for us in the same instruction. The top 32 bits are undefined, - so we have to mask them. */ - - lis r6,FX_FRACTION_1_28@h - ori r6,r6,FX_FRACTION_1_28@l - mulhwu r5,r4,r6 - clrldi r5,r5,32 - - /* Get our pointer into the invpio4_table array. */ - sldi r4,r5,3 - addi r6,r9,(L(invpio4_table)-L(anchor)) - add r4,r4,r6 - - lfd fp2,0(r4) - lfd fp3,8(r4) - lfd fp4,16(r4) - lfd fp5,24(r4) - - fmul fp6,fp2,fp1 - fmul fp7,fp3,fp1 - fmul fp8,fp4,fp1 - fmul fp9,fp5,fp1 - - /* Mask off larger integer bits in highest double word that we don't - care about to avoid losing precision when combining with smaller - values. */ - fctiduz fp10,fp6 - mfvsrd r7,v10 - rldicr r7,r7,0,(63-INTEGER_BITS) - mtvsrd v10,r7 - fcfidu fp10,fp10 /* Integer bits. */ - - fsub fp6,fp6,fp10 /* highest -= integer bits */ - - /* Work out the integer component, rounded down. Use the top two - limbs for this. */ - fadd fp10,fp6,fp7 /* highest + higher */ - - fctiduz fp10,fp10 - mfvsrd r7,v10 - andi. r0,r7,1 - fcfidu fp10,fp10 - - /* Subtract integer component from highest limb. */ - fsub fp12,fp6,fp10 - - beq L(even_integer) - - /* Our integer component is odd, so we are in the -PI/4 to 0 primary - region. We need to shift our result down by PI/4, and to do this - in the mod (4/PI) space we simply subtract 1. */ - lfd fp11,(L(DPone)-L(anchor))(r9) - fsub fp12,fp12,fp11 - - /* Now add up all the limbs in order. */ - fadd fp12,fp12,fp7 - fadd fp12,fp12,fp8 - fadd fp12,fp12,fp9 - - /* And finally multiply by pi/4. */ - lfd fp13,(L(pio4)-L(anchor))(r9) - fmul fp1,fp12,fp13 - - addi r7,r7,1 - b L(reduced) - -L(even_integer): - lfd fp11,(L(DPone)-L(anchor))(r9) - - /* Now add up all the limbs in order. */ - fadd fp12,fp12,fp7 - fadd fp12,r12,fp8 - fadd fp12,r12,fp9 - - /* We need to check if the addition of all the limbs resulted in us - overflowing 1.0. */ - fcmpu 0,fp12,fp11 - bgt L(greater_than_one) - - /* And finally multiply by pi/4. */ - lfd fp13,(L(pio4)-L(anchor))(r9) - fmul fp1,fp12,fp13 - - addi r7,r7,1 - b L(reduced) - -L(greater_than_one): - /* We did overflow 1.0 when adding up all the limbs. Add 1.0 to our - integer, and subtract 1.0 from our result. Since that makes the - integer component odd, we need to subtract another 1.0 as - explained above. */ - addi r7,r7,1 - - lfd fp11,(L(DPtwo)-L(anchor))(r9) - fsub fp12,fp12,fp11 - - /* And finally multiply by pi/4. */ - lfd fp13,(L(pio4)-L(anchor))(r9) - fmul fp1,fp12,fp13 - - addi r7,r7,1 - b L(reduced) - - .balign 16 -L(less_2pn5): - lis r4,TWO_PN27@h - ori r4,r4,TWO_PN27@l - - cmpw r3,r4 - blt L(less_2pn27) - - /* A simpler Chebyshev approximation is close enough for this range: - 1.0+x^2*(CC0+x^3*CC1). */ - - lfd fp10,(L(CC0)-L(anchor))(r9) - lfd fp11,(L(CC1)-L(anchor))(r9) - - fmul fp2,fp1,fp1 /* x^2 */ - fmul fp3,fp2,fp1 /* x^3 */ - lfd fp1,(L(DPone)-L(anchor))(r9) - - fmadd fp4,fp3,fp11,fp10 /* CC0+x^3*CC1 */ - fmadd fp1,fp2,fp4,fp1 /* 1.0+x^2*(CC0+x^3*CC1) */ - - frsp fp1,fp1 /* Round to single precision. */ - - blr - - .balign 16 -L(less_2pn27): - /* Handle some special cases: - - cosf(subnormal) raises inexact - cosf(min_normalized) raises inexact - cosf(normalized) raises inexact. */ - - lfd fp2,(L(DPone)-L(anchor))(r9) - - fabs fp1,fp1 /* |x| */ - fsub fp1,fp2,fp1 /* 1.0-|x| */ - - frsp fp1,fp1 - - blr - -END (__cosf) - - .section .rodata, "a" - - .balign 8 - -L(anchor): - - /* Chebyshev constants for sin, range -PI/4 - PI/4. */ -L(S0): .8byte 0xbfc5555555551cd9 -L(S1): .8byte 0x3f81111110c2688b -L(S2): .8byte 0xbf2a019f8b4bd1f9 -L(S3): .8byte 0x3ec71d7264e6b5b4 -L(S4): .8byte 0xbe5a947e1674b58a - - /* Chebyshev constants for cos, range 2^-27 - 2^-5. */ -L(CC0): .8byte 0xbfdfffffff5cc6fd -L(CC1): .8byte 0x3fa55514b178dac5 - - /* Chebyshev constants for cos, range -PI/4 - PI/4. */ -L(C0): .8byte 0xbfdffffffffe98ae -L(C1): .8byte 0x3fa55555545c50c7 -L(C2): .8byte 0xbf56c16b348b6874 -L(C3): .8byte 0x3efa00eb9ac43cc0 -L(C4): .8byte 0xbe923c97dd8844d7 - -L(invpio2): - .8byte 0x3fe45f306dc9c883 /* 2/PI */ - -L(invpio4): - .8byte 0x3ff45f306dc9c883 /* 4/PI */ - -L(invpio4_table): - .8byte 0x0000000000000000 - .8byte 0x3ff45f306c000000 - .8byte 0x3e3c9c882a000000 - .8byte 0x3c54fe13a8000000 - .8byte 0x3aaf47d4d0000000 - .8byte 0x38fbb81b6c000000 - .8byte 0x3714acc9e0000000 - .8byte 0x3560e4107c000000 - .8byte 0x33bca2c756000000 - .8byte 0x31fbd778ac000000 - .8byte 0x300b7246e0000000 - .8byte 0x2e5d2126e8000000 - .8byte 0x2c97003248000000 - .8byte 0x2ad77504e8000000 - .8byte 0x290921cfe0000000 - .8byte 0x274deb1cb0000000 - .8byte 0x25829a73e0000000 - .8byte 0x23fd1046be000000 - .8byte 0x2224baed10000000 - .8byte 0x20709d338e000000 - .8byte 0x1e535a2f80000000 - .8byte 0x1cef904e64000000 - .8byte 0x1b0d639830000000 - .8byte 0x1964ce7d24000000 - .8byte 0x17b908bf16000000 - -L(pio4): - .8byte 0x3fe921fb54442d18 /* PI/4 */ - -/* PI/2 as a sum of two doubles. We only use 32 bits of the upper limb - to avoid losing significant bits when multiplying with up to - (2^22)/(pi/2). */ -L(pio2hi): - .8byte 0xbff921fb54400000 - -L(pio2lo): - .8byte 0xbdd0b4611a626332 - -L(pio2_table): - .8byte 0 - .8byte 0x3ff921fb54442d18 /* 1 * PI/2 */ - .8byte 0x400921fb54442d18 /* 2 * PI/2 */ - .8byte 0x4012d97c7f3321d2 /* 3 * PI/2 */ - .8byte 0x401921fb54442d18 /* 4 * PI/2 */ - .8byte 0x401f6a7a2955385e /* 5 * PI/2 */ - .8byte 0x4022d97c7f3321d2 /* 6 * PI/2 */ - .8byte 0x4025fdbbe9bba775 /* 7 * PI/2 */ - .8byte 0x402921fb54442d18 /* 8 * PI/2 */ - .8byte 0x402c463abeccb2bb /* 9 * PI/2 */ - .8byte 0x402f6a7a2955385e /* 10 * PI/2 */ - -L(small): - .8byte 0x3cd0000000000000 /* 2^-50 */ - -L(ones): - .8byte 0x3ff0000000000000 /* +1.0 */ - .8byte 0xbff0000000000000 /* -1.0 */ - -L(DPhalf): - .8byte 0x3fe0000000000000 /* 0.5 */ - -L(DPone): - .8byte 0x3ff0000000000000 /* 1.0 */ - -L(DPtwo): - .8byte 0x4000000000000000 /* 2.0 */ - -weak_alias(__cosf, cosf) diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/s_finite.S b/sysdeps/powerpc/powerpc64/power8/fpu/s_finite.S deleted file mode 100644 index fcdcb60293..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/fpu/s_finite.S +++ /dev/null @@ -1,56 +0,0 @@ -/* isfinite(). PowerPC64/POWER8 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define MFVSRD_R3_V1 .long 0x7c230066 /* mfvsrd r3,vs1 */ - -/* int [r3] __finite ([fp1] x) */ - -EALIGN (__finite, 4, 0) - CALL_MCOUNT 0 - MFVSRD_R3_V1 - lis r9,0x8010 - clrldi r3,r3,1 /* r3 = r3 & 0x8000000000000000 */ - rldicr r9,r9,32,31 /* r9 = (r9 << 32) & 0xffffffff */ - add r3,r3,r9 - rldicl r3,r3,1,63 - blr -END (__finite) - -hidden_def (__finite) -weak_alias (__finite, finite) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__finite, __finitef) -hidden_def (__finitef) -weak_alias (__finitef, finitef) - -#if IS_IN (libm) -# if LONG_DOUBLE_COMPAT (libm, GLIBC_2_0) -compat_symbol (libm, __finite, __finitel, GLIBC_2_0) -compat_symbol (libm, finite, finitel, GLIBC_2_0) -# endif -#else -# if LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) -compat_symbol (libc, __finite, __finitel, GLIBC_2_0); -compat_symbol (libc, finite, finitel, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/s_finitef.S b/sysdeps/powerpc/powerpc64/power8/fpu/s_finitef.S deleted file mode 100644 index 54bd94176d..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/fpu/s_finitef.S +++ /dev/null @@ -1 +0,0 @@ -/* This function uses the same code as s_finite.S. */ diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/s_isinf.S b/sysdeps/powerpc/powerpc64/power8/fpu/s_isinf.S deleted file mode 100644 index 32814e4525..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/fpu/s_isinf.S +++ /dev/null @@ -1,61 +0,0 @@ -/* isinf(). PowerPC64/POWER8 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define MFVSRD_R3_V1 .long 0x7c230066 /* mfvsrd r3,vs1 */ - -/* int [r3] __isinf([fp1] x) */ - -EALIGN (__isinf, 4, 0) - CALL_MCOUNT 0 - MFVSRD_R3_V1 - lis r9,0x7ff0 /* r9 = 0x7ff0 */ - rldicl r10,r3,0,1 /* r10 = r3 & (0x8000000000000000) */ - sldi r9,r9,32 /* r9 = r9 << 52 */ - cmpd cr7,r10,r9 /* fp1 & 0x7ff0000000000000 ? */ - beq cr7,L(inf) - li r3,0 /* Not inf */ - blr -L(inf): - sradi r3,r3,63 /* r3 = r3 >> 63 */ - ori r3,r3,1 /* r3 = r3 | 0x1 */ - blr -END (__isinf) - -hidden_def (__isinf) -weak_alias (__isinf, isinf) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__isinf, __isinff) -hidden_def (__isinff) -weak_alias (__isinff, isinff) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isinf, __isinfl) -weak_alias (__isinf, isinfl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isinf, __isinfl, GLIBC_2_0); -compat_symbol (libc, isinf, isinfl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/s_isinff.S b/sysdeps/powerpc/powerpc64/power8/fpu/s_isinff.S deleted file mode 100644 index be759e091e..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/fpu/s_isinff.S +++ /dev/null @@ -1 +0,0 @@ -/* This function uses the same code as s_isinf.S. */ diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/s_isnan.S b/sysdeps/powerpc/powerpc64/power8/fpu/s_isnan.S deleted file mode 100644 index af52e502b7..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/fpu/s_isnan.S +++ /dev/null @@ -1,56 +0,0 @@ -/* isnan(). PowerPC64/POWER8 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define MFVSRD_R3_V1 .long 0x7c230066 /* mfvsrd r3,vs1 */ - -/* int [r3] __isnan([f1] x) */ - -EALIGN (__isnan, 4, 0) - CALL_MCOUNT 0 - MFVSRD_R3_V1 - lis r9,0x7ff0 - clrldi r3,r3,1 /* r3 = r3 & 0x8000000000000000 */ - rldicr r9,r9,32,31 /* r9 = (r9 << 32) & 0xffffffff */ - subf r3,r3,r9 - rldicl r3,r3,1,63 - blr -END (__isnan) - -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -/* It turns out that the 'double' version will also always work for - single-precision. */ -strong_alias (__isnan, __isnanf) -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) - -#ifdef NO_LONG_DOUBLE -strong_alias (__isnan, __isnanl) -weak_alias (__isnan, isnanl) -#endif - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/s_isnanf.S b/sysdeps/powerpc/powerpc64/power8/fpu/s_isnanf.S deleted file mode 100644 index b48c85e0d3..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/fpu/s_isnanf.S +++ /dev/null @@ -1 +0,0 @@ -/* This function uses the same code as s_isnan.S. */ diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/s_llrint.S b/sysdeps/powerpc/powerpc64/power8/fpu/s_llrint.S deleted file mode 100644 index aa180b6901..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/fpu/s_llrint.S +++ /dev/null @@ -1,45 +0,0 @@ -/* Round double to long int. POWER8 PowerPC64 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define MFVSRD_R3_V1 .long 0x7c230066 /* mfvsrd r3,vs1 */ - -/* long long int[r3] __llrint (double x[fp1]) */ -ENTRY (__llrint) - CALL_MCOUNT 0 - fctid fp1,fp1 - MFVSRD_R3_V1 - blr -END (__llrint) - -strong_alias (__llrint, __lrint) -weak_alias (__llrint, llrint) -weak_alias (__lrint, lrint) - -#ifdef NO_LONG_DOUBLE -strong_alias (__llrint, __llrintl) -weak_alias (__llrint, llrintl) -strong_alias (__lrint, __lrintl) -weak_alias (__lrint, lrintl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llrint, llrintl, GLIBC_2_1) -compat_symbol (libm, __lrint, lrintl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/s_llround.S b/sysdeps/powerpc/powerpc64/power8/fpu/s_llround.S deleted file mode 100644 index 043fc6a089..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/fpu/s_llround.S +++ /dev/null @@ -1,48 +0,0 @@ -/* llround function. POWER8 PowerPC64 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define MFVSRD_R3_V1 .long 0x7c230066 /* mfvsrd r3,vs1 */ - -/* long long [r3] llround (float x [fp1]) */ - -ENTRY (__llround) - CALL_MCOUNT 0 - frin fp1,fp1 /* Round to nearest +-0.5. */ - fctidz fp1,fp1 /* Convert To Integer DW round toward 0. */ - MFVSRD_R3_V1 - blr -END (__llround) - -strong_alias (__llround, __lround) -weak_alias (__llround, llround) -weak_alias (__lround, lround) - -#ifdef NO_LONG_DOUBLE -weak_alias (__llround, llroundl) -strong_alias (__llround, __llroundl) -weak_alias (__lround, lroundl) -strong_alias (__lround, __lroundl) -#endif -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llround, llroundl, GLIBC_2_1) -compat_symbol (libm, __lround, lroundl, GLIBC_2_1) -#endif diff --git a/sysdeps/powerpc/powerpc64/power8/fpu/s_sinf.S b/sysdeps/powerpc/powerpc64/power8/fpu/s_sinf.S deleted file mode 100644 index fb0add3462..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/fpu/s_sinf.S +++ /dev/null @@ -1,519 +0,0 @@ -/* Optimized sinf(). PowerPC64/POWER8 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include - -#define FRAMESIZE (FRAME_MIN_SIZE+16) - -#define FLOAT_EXPONENT_SHIFT 23 -#define FLOAT_EXPONENT_BIAS 127 -#define INTEGER_BITS 3 - -#define PI_4 0x3f490fdb /* PI/4 */ -#define NINEPI_4 0x40e231d6 /* 9 * PI/4 */ -#define TWO_PN5 0x3d000000 /* 2^-5 */ -#define TWO_PN27 0x32000000 /* 2^-27 */ -#define INFINITY 0x7f800000 -#define TWO_P23 0x4b000000 /* 2^27 */ -#define FX_FRACTION_1_28 0x9249250 /* 0x100000000 / 28 + 1 */ - - /* Implements the function - - float [fp1] sinf (float [fp1] x) */ - - .machine power8 -EALIGN(__sinf, 4, 0) - addis r9,r2,L(anchor)@toc@ha - addi r9,r9,L(anchor)@toc@l - - lis r4,PI_4@h - ori r4,r4,PI_4@l - - xscvdpspn v0,v1 - mfvsrd r8,v0 - rldicl r3,r8,32,33 /* Remove sign bit. */ - - cmpw r3,r4 - bge L(greater_or_equal_pio4) - - lis r4,TWO_PN5@h - ori r4,r4,TWO_PN5@l - - cmpw r3,r4 - blt L(less_2pn5) - - /* Chebyshev polynomial of the form: - * x+x^3*(S0+x^2*(S1+x^2*(S2+x^2*(S3+x^2*S4)))). */ - - lfd fp9,(L(S0)-L(anchor))(r9) - lfd fp10,(L(S1)-L(anchor))(r9) - lfd fp11,(L(S2)-L(anchor))(r9) - lfd fp12,(L(S3)-L(anchor))(r9) - lfd fp13,(L(S4)-L(anchor))(r9) - - fmul fp2,fp1,fp1 /* x^2 */ - fmul fp3,fp2,fp1 /* x^3 */ - - fmadd fp4,fp2,fp13,fp12 /* S3+x^2*S4 */ - fmadd fp4,fp2,fp4,fp11 /* S2+x^2*(S3+x^2*S4) */ - fmadd fp4,fp2,fp4,fp10 /* S1+x^2*(S2+x^2*(S3+x^2*S4)) */ - fmadd fp4,fp2,fp4,fp9 /* S0+x^2*(S1+x^2*(S2+x^2*(S3+x^2*S4))) */ - fmadd fp1,fp3,fp4,fp1 /* x+x^3*(S0+x^2*(S1+x^2*(S2+x^2*(S3+x^2*S4)))) */ - frsp fp1,fp1 /* Round to single precision. */ - - blr - - .balign 16 -L(greater_or_equal_pio4): - lis r4,NINEPI_4@h - ori r4,r4,NINEPI_4@l - cmpw r3,r4 - bge L(greater_or_equal_9pio4) - - /* Calculate quotient of |x|/(PI/4). */ - lfd fp2,(L(invpio4)-L(anchor))(r9) - fabs fp1,fp1 /* |x| */ - fmul fp2,fp1,fp2 /* |x|/(PI/4) */ - fctiduz fp2,fp2 - mfvsrd r3,v2 /* n = |x| mod PI/4 */ - - /* Now use that quotient to find |x| mod (PI/2). */ - addi r7,r3,1 - rldicr r5,r7,2,60 /* ((n+1) >> 1) << 3 */ - addi r6,r9,(L(pio2_table)-L(anchor)) - lfdx fp4,r5,r6 - fsub fp1,fp1,fp4 - - .balign 16 -L(reduced): - /* Now we are in the range -PI/4 to PI/4. */ - - /* Work out if we are in a positive or negative primary interval. */ - rldicl r4,r7,62,63 /* ((n+1) >> 2) & 1 */ - - /* We are operating on |x|, so we need to add back the original - sign. */ - rldicl r8,r8,33,63 /* (x >> 31) & 1, ie the sign bit. */ - xor r4,r4,r8 /* 0 if result should be positive, - 1 if negative. */ - - /* Load a 1.0 or -1.0. */ - addi r5,r9,(L(ones)-L(anchor)) - sldi r4,r4,3 - lfdx fp0,r4,r5 - - /* Are we in the primary interval of sin or cos? */ - andi. r4,r7,0x2 - bne L(cos) - - /* Chebyshev polynomial of the form: - x+x^3*(S0+x^2*(S1+x^2*(S2+x^2*(S3+x^2*S4)))). */ - - lfd fp9,(L(S0)-L(anchor))(r9) - lfd fp10,(L(S1)-L(anchor))(r9) - lfd fp11,(L(S2)-L(anchor))(r9) - lfd fp12,(L(S3)-L(anchor))(r9) - lfd fp13,(L(S4)-L(anchor))(r9) - - fmul fp2,fp1,fp1 /* x^2 */ - fmul fp3,fp2,fp1 /* x^3 */ - - fmadd fp4,fp2,fp13,fp12 /* S3+x^2*S4 */ - fmadd fp4,fp2,fp4,fp11 /* S2+x^2*(S3+x^2*S4) */ - fmadd fp4,fp2,fp4,fp10 /* S1+x^2*(S2+x^2*(S3+x^2*S4)) */ - fmadd fp4,fp2,fp4,fp9 /* S0+x^2*(S1+x^2*(S2+x^2*(S3+x^2*S4))) */ - fmadd fp4,fp3,fp4,fp1 /* x+x^3*(S0+x^2*(S1+x^2*(S2+x^2*(S3+x^2*S4)))) */ - fmul fp4,fp4,fp0 /* Add in the sign. */ - frsp fp1,fp4 /* Round to single precision. */ - - blr - - .balign 16 -L(cos): - /* Chebyshev polynomial of the form: - 1.0+x^2*(C0+x^2*(C1+x^2*(C2+x^2*(C3+x^2*C4)))). */ - - lfd fp9,(L(C0)-L(anchor))(r9) - lfd fp10,(L(C1)-L(anchor))(r9) - lfd fp11,(L(C2)-L(anchor))(r9) - lfd fp12,(L(C3)-L(anchor))(r9) - lfd fp13,(L(C4)-L(anchor))(r9) - - fmul fp2,fp1,fp1 /* x^2 */ - lfd fp3,(L(DPone)-L(anchor))(r9) - - fmadd fp4,fp2,fp13,fp12 /* C3+x^2*C4 */ - fmadd fp4,fp2,fp4,fp11 /* C2+x^2*(C3+x^2*C4) */ - fmadd fp4,fp2,fp4,fp10 /* C1+x^2*(C2+x^2*(C3+x^2*C4)) */ - fmadd fp4,fp2,fp4,fp9 /* C0+x^2*(C1+x^2*(C2+x^2*(C3+x^2*C4))) */ - fmadd fp4,fp2,fp4,fp3 /* 1.0 + x^2*(C0+x^2*(C1+x^2*(C2+x^2*(C3+x^2*C4)))) */ - fmul fp4,fp4,fp0 /* Add in the sign. */ - frsp fp1,fp4 /* Round to single precision. */ - - blr - - .balign 16 -L(greater_or_equal_9pio4): - lis r4,INFINITY@h - ori r4,r4,INFINITY@l - cmpw r3,r4 - bge L(inf_or_nan) - - lis r4,TWO_P23@h - ori r4,r4,TWO_P23@l - cmpw r3,r4 - bge L(greater_or_equal_2p23) - - fabs fp1,fp1 /* |x| */ - - /* Calculate quotient of |x|/(PI/4). */ - lfd fp2,(L(invpio4)-L(anchor))(r9) - - lfd fp3,(L(DPone)-L(anchor))(r9) - lfd fp4,(L(DPhalf)-L(anchor))(r9) - fmul fp2,fp1,fp2 /* |x|/(PI/4) */ - friz fp2,fp2 /* n = floor(|x|/(PI/4)) */ - - /* Calculate (n + 1) / 2. */ - fadd fp2,fp2,fp3 /* n + 1 */ - fmul fp3,fp2,fp4 /* (n + 1) / 2 */ - friz fp3,fp3 - - lfd fp4,(L(pio2hi)-L(anchor))(r9) - lfd fp5,(L(pio2lo)-L(anchor))(r9) - - fmul fp6,fp4,fp3 - fadd fp6,fp6,fp1 - fmadd fp1,fp5,fp3,fp6 - - fctiduz fp2,fp2 - mfvsrd r7,v2 /* n + 1 */ - - b L(reduced) - - .balign 16 -L(inf_or_nan): - bne L(skip_errno_setting) /* Is a NAN? */ - - /* We delayed the creation of the stack frame, as well as the saving of - the link register, because only at this point, we are sure that - doing so is actually needed. */ - - stfd fp1,-8(r1) - - /* Save the link register. */ - mflr r0 - std r0,16(r1) - cfi_offset(lr, 16) - - /* Create the stack frame. */ - stdu r1,-FRAMESIZE(r1) - cfi_adjust_cfa_offset(FRAMESIZE) - - bl JUMPTARGET(__errno_location) - nop - - /* Restore the stack frame. */ - addi r1,r1,FRAMESIZE - cfi_adjust_cfa_offset(-FRAMESIZE) - /* Restore the link register. */ - ld r0,16(r1) - mtlr r0 - - lfd fp1,-8(r1) - - /* errno = EDOM */ - li r4,EDOM - stw r4,0(r3) - -L(skip_errno_setting): - fsub fp1,fp1,fp1 /* x - x */ - blr - - .balign 16 -L(greater_or_equal_2p23): - fabs fp1,fp1 - - srwi r4,r3,FLOAT_EXPONENT_SHIFT - subi r4,r4,FLOAT_EXPONENT_BIAS - - /* We reduce the input modulo pi/4, so we need 3 bits of integer - to determine where in 2*pi we are. Index into our array - accordingly. */ - addi r4,r4,INTEGER_BITS - - /* To avoid an expensive divide, for the range we care about (0 - 127) - we can transform x/28 into: - - x/28 = (x * ((0x100000000 / 28) + 1)) >> 32 - - mulhwu returns the top 32 bits of the 64 bit result, doing the - shift for us in the same instruction. The top 32 bits are undefined, - so we have to mask them. */ - - lis r6,FX_FRACTION_1_28@h - ori r6,r6,FX_FRACTION_1_28@l - mulhwu r5,r4,r6 - clrldi r5,r5,32 - - /* Get our pointer into the invpio4_table array. */ - sldi r4,r5,3 - addi r6,r9,(L(invpio4_table)-L(anchor)) - add r4,r4,r6 - - lfd fp2,0(r4) - lfd fp3,8(r4) - lfd fp4,16(r4) - lfd fp5,24(r4) - - fmul fp6,fp2,fp1 - fmul fp7,fp3,fp1 - fmul fp8,fp4,fp1 - fmul fp9,fp5,fp1 - - /* Mask off larger integer bits in highest double word that we don't - care about to avoid losing precision when combining with smaller - values. */ - fctiduz fp10,fp6 - mfvsrd r7,v10 - rldicr r7,r7,0,(63-INTEGER_BITS) - mtvsrd v10,r7 - fcfidu fp10,fp10 /* Integer bits. */ - - fsub fp6,fp6,fp10 /* highest -= integer bits */ - - /* Work out the integer component, rounded down. Use the top two - limbs for this. */ - fadd fp10,fp6,fp7 /* highest + higher */ - - fctiduz fp10,fp10 - mfvsrd r7,v10 - andi. r0,r7,1 - fcfidu fp10,fp10 - - /* Subtract integer component from highest limb. */ - fsub fp12,fp6,fp10 - - beq L(even_integer) - - /* Our integer component is odd, so we are in the -PI/4 to 0 primary - region. We need to shift our result down by PI/4, and to do this - in the mod (4/PI) space we simply subtract 1. */ - lfd fp11,(L(DPone)-L(anchor))(r9) - fsub fp12,fp12,fp11 - - /* Now add up all the limbs in order. */ - fadd fp12,fp12,fp7 - fadd fp12,fp12,fp8 - fadd fp12,fp12,fp9 - - /* And finally multiply by pi/4. */ - lfd fp13,(L(pio4)-L(anchor))(r9) - fmul fp1,fp12,fp13 - - addi r7,r7,1 - b L(reduced) - -L(even_integer): - lfd fp11,(L(DPone)-L(anchor))(r9) - - /* Now add up all the limbs in order. */ - fadd fp12,fp12,fp7 - fadd fp12,r12,fp8 - fadd fp12,r12,fp9 - - /* We need to check if the addition of all the limbs resulted in us - overflowing 1.0. */ - fcmpu 0,fp12,fp11 - bgt L(greater_than_one) - - /* And finally multiply by pi/4. */ - lfd fp13,(L(pio4)-L(anchor))(r9) - fmul fp1,fp12,fp13 - - addi r7,r7,1 - b L(reduced) - -L(greater_than_one): - /* We did overflow 1.0 when adding up all the limbs. Add 1.0 to our - integer, and subtract 1.0 from our result. Since that makes the - integer component odd, we need to subtract another 1.0 as - explained above. */ - addi r7,r7,1 - - lfd fp11,(L(DPtwo)-L(anchor))(r9) - fsub fp12,fp12,fp11 - - /* And finally multiply by pi/4. */ - lfd fp13,(L(pio4)-L(anchor))(r9) - fmul fp1,fp12,fp13 - - addi r7,r7,1 - b L(reduced) - - .balign 16 -L(less_2pn5): - lis r4,TWO_PN27@h - ori r4,r4,TWO_PN27@l - - cmpw r3,r4 - blt L(less_2pn27) - - /* A simpler Chebyshev approximation is close enough for this range: - x+x^3*(SS0+x^2*SS1). */ - - lfd fp10,(L(SS0)-L(anchor))(r9) - lfd fp11,(L(SS1)-L(anchor))(r9) - - fmul fp2,fp1,fp1 /* x^2 */ - fmul fp3,fp2,fp1 /* x^3 */ - - fmadd fp4,fp2,fp11,fp10 /* SS0+x^2*SS1 */ - fmadd fp1,fp3,fp4,fp1 /* x+x^3*(SS0+x^2*SS1) */ - - frsp fp1,fp1 /* Round to single precision. */ - - blr - - .balign 16 -L(less_2pn27): - cmpwi r3,0 - beq L(zero) - - /* Handle some special cases: - - sinf(subnormal) raises inexact/underflow - sinf(min_normalized) raises inexact/underflow - sinf(normalized) raises inexact. */ - - lfd fp2,(L(small)-L(anchor))(r9) - - fmul fp2,fp1,fp2 /* x * small */ - fsub fp1,fp1,fp2 /* x - x * small */ - - frsp fp1,fp1 - - blr - - .balign 16 -L(zero): - blr - -END (__sinf) - - .section .rodata, "a" - - .balign 8 - -L(anchor): - - /* Chebyshev constants for sin, range -PI/4 - PI/4. */ -L(S0): .8byte 0xbfc5555555551cd9 -L(S1): .8byte 0x3f81111110c2688b -L(S2): .8byte 0xbf2a019f8b4bd1f9 -L(S3): .8byte 0x3ec71d7264e6b5b4 -L(S4): .8byte 0xbe5a947e1674b58a - - /* Chebyshev constants for sin, range 2^-27 - 2^-5. */ -L(SS0): .8byte 0xbfc555555543d49d -L(SS1): .8byte 0x3f8110f475cec8c5 - - /* Chebyshev constants for cos, range -PI/4 - PI/4. */ -L(C0): .8byte 0xbfdffffffffe98ae -L(C1): .8byte 0x3fa55555545c50c7 -L(C2): .8byte 0xbf56c16b348b6874 -L(C3): .8byte 0x3efa00eb9ac43cc0 -L(C4): .8byte 0xbe923c97dd8844d7 - -L(invpio2): - .8byte 0x3fe45f306dc9c883 /* 2/PI */ - -L(invpio4): - .8byte 0x3ff45f306dc9c883 /* 4/PI */ - -L(invpio4_table): - .8byte 0x0000000000000000 - .8byte 0x3ff45f306c000000 - .8byte 0x3e3c9c882a000000 - .8byte 0x3c54fe13a8000000 - .8byte 0x3aaf47d4d0000000 - .8byte 0x38fbb81b6c000000 - .8byte 0x3714acc9e0000000 - .8byte 0x3560e4107c000000 - .8byte 0x33bca2c756000000 - .8byte 0x31fbd778ac000000 - .8byte 0x300b7246e0000000 - .8byte 0x2e5d2126e8000000 - .8byte 0x2c97003248000000 - .8byte 0x2ad77504e8000000 - .8byte 0x290921cfe0000000 - .8byte 0x274deb1cb0000000 - .8byte 0x25829a73e0000000 - .8byte 0x23fd1046be000000 - .8byte 0x2224baed10000000 - .8byte 0x20709d338e000000 - .8byte 0x1e535a2f80000000 - .8byte 0x1cef904e64000000 - .8byte 0x1b0d639830000000 - .8byte 0x1964ce7d24000000 - .8byte 0x17b908bf16000000 - -L(pio4): - .8byte 0x3fe921fb54442d18 /* PI/4 */ - -/* PI/2 as a sum of two doubles. We only use 32 bits of the upper limb - to avoid losing significant bits when multiplying with up to - (2^22)/(pi/2). */ -L(pio2hi): - .8byte 0xbff921fb54400000 - -L(pio2lo): - .8byte 0xbdd0b4611a626332 - -L(pio2_table): - .8byte 0 - .8byte 0x3ff921fb54442d18 /* 1 * PI/2 */ - .8byte 0x400921fb54442d18 /* 2 * PI/2 */ - .8byte 0x4012d97c7f3321d2 /* 3 * PI/2 */ - .8byte 0x401921fb54442d18 /* 4 * PI/2 */ - .8byte 0x401f6a7a2955385e /* 5 * PI/2 */ - .8byte 0x4022d97c7f3321d2 /* 6 * PI/2 */ - .8byte 0x4025fdbbe9bba775 /* 7 * PI/2 */ - .8byte 0x402921fb54442d18 /* 8 * PI/2 */ - .8byte 0x402c463abeccb2bb /* 9 * PI/2 */ - .8byte 0x402f6a7a2955385e /* 10 * PI/2 */ - -L(small): - .8byte 0x3cd0000000000000 /* 2^-50 */ - -L(ones): - .8byte 0x3ff0000000000000 /* +1.0 */ - .8byte 0xbff0000000000000 /* -1.0 */ - -L(DPhalf): - .8byte 0x3fe0000000000000 /* 0.5 */ - -L(DPone): - .8byte 0x3ff0000000000000 /* 1.0 */ - -L(DPtwo): - .8byte 0x4000000000000000 /* 2.0 */ - -weak_alias(__sinf, sinf) diff --git a/sysdeps/powerpc/powerpc64/power8/memcmp.S b/sysdeps/powerpc/powerpc64/power8/memcmp.S deleted file mode 100644 index 46b9c0067a..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/memcmp.S +++ /dev/null @@ -1,1447 +0,0 @@ -/* Optimized memcmp implementation for POWER7/PowerPC64. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* int [r3] memcmp (const char *s1 [r3], - const char *s2 [r4], - size_t size [r5]) */ - -/* TODO: change these to the actual instructions when the minimum required - binutils allows it. */ -#define MFVRD(r,v) .long (0x7c000067 | ((v)<<(32-11)) | ((r)<<(32-16))) -#ifndef MEMCMP -# define MEMCMP memcmp -#endif - .machine power7 -EALIGN (MEMCMP, 4, 0) - CALL_MCOUNT 3 - -#define rRTN r3 -#define rSTR1 r3 /* First string arg. */ -#define rSTR2 r4 /* Second string arg. */ -#define rN r5 /* Max string length. */ -#define rWORD1 r6 /* Current word in s1. */ -#define rWORD2 r7 /* Current word in s2. */ -#define rWORD3 r8 /* Next word in s1. */ -#define rWORD4 r9 /* Next word in s2. */ -#define rWORD5 r10 /* Next word in s1. */ -#define rWORD6 r11 /* Next word in s2. */ - -#define rOFF8 r20 /* 8 bytes offset. */ -#define rOFF16 r21 /* 16 bytes offset. */ -#define rOFF24 r22 /* 24 bytes offset. */ -#define rOFF32 r23 /* 24 bytes offset. */ -#define rWORD6_SHIFT r24 /* Left rotation temp for rWORD8. */ -#define rWORD4_SHIFT r25 /* Left rotation temp for rWORD6. */ -#define rWORD2_SHIFT r26 /* Left rotation temp for rWORD4. */ -#define rWORD8_SHIFT r27 /* Left rotation temp for rWORD2. */ -#define rSHR r28 /* Unaligned shift right count. */ -#define rSHL r29 /* Unaligned shift left count. */ -#define rWORD7 r30 /* Next word in s1. */ -#define rWORD8 r31 /* Next word in s2. */ - -#define rWORD8SAVE (-8) -#define rWORD7SAVE (-16) -#define rOFF8SAVE (-24) -#define rOFF16SAVE (-32) -#define rOFF24SAVE (-40) -#define rOFF32SAVE (-48) -#define rSHRSAVE (-56) -#define rSHLSAVE (-64) -#define rWORD8SHIFTSAVE (-72) -#define rWORD2SHIFTSAVE (-80) -#define rWORD4SHIFTSAVE (-88) -#define rWORD6SHIFTSAVE (-96) - -#ifdef __LITTLE_ENDIAN__ -# define LD ldbrx -#else -# define LD ldx -#endif - - xor r10, rSTR2, rSTR1 - cmpldi cr6, rN, 0 - cmpldi cr1, rN, 8 - clrldi. r0, r10, 61 - clrldi r12, rSTR1, 61 - cmpldi cr5, r12, 0 - beq- cr6, L(zeroLength) - dcbt 0, rSTR1 - dcbt 0, rSTR2 - /* If less than 8 bytes or not aligned, use the unaligned - byte loop. */ - blt cr1, L(bytealigned) - bne L(unalignedqw) -/* At this point we know both strings have the same alignment and the - compare length is at least 8 bytes. r12 contains the low order - 3 bits of rSTR1 and cr5 contains the result of the logical compare - of r12 to 0. If r12 == 0 then we are already double word - aligned and can perform the DW aligned loop. */ - - .align 4 -L(samealignment): - or r11, rSTR2, rSTR1 - clrldi. r11, r11, 60 - beq L(qw_align) - /* Try to align to QW else proceed to DW loop. */ - clrldi. r10, r10, 60 - bne L(DW) - /* For the difference to reach QW alignment, load as DW. */ - clrrdi rSTR1, rSTR1, 3 - clrrdi rSTR2, rSTR2, 3 - subfic r10, r12, 8 - LD rWORD1, 0, rSTR1 - LD rWORD2, 0, rSTR2 - sldi r9, r10, 3 - subfic r9, r9, 64 - sld rWORD1, rWORD1, r9 - sld rWORD2, rWORD2, r9 - cmpld cr6, rWORD1, rWORD2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 - bne cr6, L(ret_diff) - subf rN, r10, rN - - cmpld cr6, r11, r12 - bgt cr6, L(qw_align) - LD rWORD1, 0, rSTR1 - LD rWORD2, 0, rSTR2 - cmpld cr6, rWORD1, rWORD2 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 - bne cr6, L(different) - cmpldi cr6, rN, 8 - ble cr6, L(zeroLength) - addi rN, rN, -8 - /* Now both rSTR1 and rSTR2 are aligned to QW. */ - .align 4 -L(qw_align): - vspltisb v0, 0 - srdi. r6, rN, 6 - li r8, 16 - li r10, 32 - li r11, 48 - ble cr0, L(lessthan64) - mtctr r6 - vspltisb v8, 0 - vspltisb v6, 0 - /* Aligned vector loop. */ - .align 4 -L(aligned_loop): - lvx v4, 0, rSTR1 - lvx v5, 0, rSTR2 - vcmpequb. v7, v6, v8 - bnl cr6, L(different3) - lvx v6, rSTR1, r8 - lvx v8, rSTR2, r8 - vcmpequb. v7, v5, v4 - bnl cr6, L(different2) - lvx v4, rSTR1, r10 - lvx v5, rSTR2, r10 - vcmpequb. v7, v6, v8 - bnl cr6, L(different3) - lvx v6, rSTR1, r11 - lvx v8, rSTR2, r11 - vcmpequb. v7, v5, v4 - bnl cr6, L(different2) - addi rSTR1, rSTR1, 64 - addi rSTR2, rSTR2, 64 - bdnz L(aligned_loop) - vcmpequb. v7, v6, v8 - bnl cr6, L(different3) - clrldi rN, rN, 58 - /* Handle remainder for aligned loop. */ - .align 4 -L(lessthan64): - mr r9, rSTR1 - cmpdi cr6, rN, 0 - li rSTR1, 0 - blelr cr6 - lvx v4, 0, r9 - lvx v5, 0, rSTR2 - vcmpequb. v7, v5, v4 - bnl cr6, L(different1) - addi rN, rN, -16 - - cmpdi cr6, rN, 0 - blelr cr6 - lvx v4, r9, r8 - lvx v5, rSTR2, r8 - vcmpequb. v7, v5, v4 - bnl cr6, L(different1) - addi rN, rN, -16 - - cmpdi cr6, rN, 0 - blelr cr6 - lvx v4, r9, r10 - lvx v5, rSTR2, r10 - vcmpequb. v7, v5, v4 - bnl cr6, L(different1) - addi rN, rN, -16 - - cmpdi cr6, rN, 0 - blelr cr6 - lvx v4, r9, r11 - lvx v5, rSTR2, r11 - vcmpequb. v7, v5, v4 - bnl cr6, L(different1) - blr - - /* Calculate and return the difference. */ - .align 4 -L(different1): - cmpdi cr6, rN, 16 - bge cr6, L(different2) - /* Discard unwanted bytes. */ -#ifdef __LITTLE_ENDIAN__ - lvsr v1, 0, rN - vperm v4, v4, v0, v1 - vperm v5, v5, v0, v1 -#else - lvsl v1, 0, rN - vperm v4, v0, v4, v1 - vperm v5, v0, v5, v1 -#endif - vcmpequb. v7, v4, v5 - li rRTN, 0 - bltlr cr6 - .align 4 -L(different2): -#ifdef __LITTLE_ENDIAN__ - /* Reverse bytes for direct comparison. */ - lvsl v10, r0, r0 - vspltisb v8, 15 - vsububm v9, v8, v10 - vperm v4, v4, v0, v9 - vperm v5, v5, v0, v9 -#endif - MFVRD(r7, v4) - MFVRD(r9, v5) - cmpld cr6, r7, r9 - bne cr6, L(ret_diff) - /* Difference in second DW. */ - vsldoi v4, v4, v4, 8 - vsldoi v5, v5, v5, 8 - MFVRD(r7, v4) - MFVRD(r9, v5) - cmpld cr6, r7, r9 -L(ret_diff): - li rRTN, 1 - bgtlr cr6 - li rRTN, -1 - blr - .align 4 -L(different3): -#ifdef __LITTLE_ENDIAN__ - /* Reverse bytes for direct comparison. */ - vspltisb v9, 15 - lvsl v10, r0, r0 - vsububm v9, v9, v10 - vperm v6, v6, v0, v9 - vperm v8, v8, v0, v9 -#endif - MFVRD(r7, v6) - MFVRD(r9, v8) - cmpld cr6, r7, r9 - bne cr6, L(ret_diff) - /* Difference in second DW. */ - vsldoi v6, v6, v6, 8 - vsldoi v8, v8, v8, 8 - MFVRD(r7, v6) - MFVRD(r9, v8) - cmpld cr6, r7, r9 - li rRTN, 1 - bgtlr cr6 - li rRTN, -1 - blr - - .align 4 -L(different): - cmpldi cr7, rN, 8 - bgt cr7, L(end) - /* Skip unwanted bytes. */ - sldi r8, rN, 3 - subfic r8, r8, 64 - srd rWORD1, rWORD1, r8 - srd rWORD2, rWORD2, r8 - cmpld cr6, rWORD1, rWORD2 - li rRTN, 0 - beqlr cr6 -L(end): - li rRTN, 1 - bgtlr cr6 - li rRTN, -1 - blr - - .align 4 -L(unalignedqw): - /* Proceed to DW unaligned loop,if there is a chance of pagecross. */ - rldicl r9, rSTR1, 0, 52 - add r9, r9, rN - cmpldi cr0, r9, 4096-16 - bgt cr0, L(unaligned) - rldicl r9, rSTR2, 0, 52 - add r9, r9, rN - cmpldi cr0, r9, 4096-16 - bgt cr0, L(unaligned) - li r0, 0 - li r8, 16 - vspltisb v0, 0 - /* Check if rSTR1 is aligned to QW. */ - andi. r11, rSTR1, 0xF - beq L(s1_align) - - /* Compare 16B and align S1 to QW. */ -#ifdef __LITTLE_ENDIAN__ - lvsr v10, 0, rSTR1 /* Compute mask. */ - lvsr v6, 0, rSTR2 /* Compute mask. */ -#else - lvsl v10, 0, rSTR1 /* Compute mask. */ - lvsl v6, 0, rSTR2 /* Compute mask. */ -#endif - lvx v5, 0, rSTR2 - lvx v9, rSTR2, r8 -#ifdef __LITTLE_ENDIAN__ - vperm v5, v9, v5, v6 -#else - vperm v5, v5, v9, v6 -#endif - lvx v4, 0, rSTR1 - lvx v9, rSTR1, r8 -#ifdef __LITTLE_ENDIAN__ - vperm v4, v9, v4, v10 -#else - vperm v4, v4, v9, v10 -#endif - vcmpequb. v7, v5, v4 - bnl cr6, L(different1) - cmpldi cr6, rN, 16 - ble cr6, L(zeroLength) - subfic r11, r11, 16 - subf rN, r11, rN - add rSTR1, rSTR1, r11 - add rSTR2, rSTR2, r11 - - /* As s1 is QW aligned prepare for unaligned loop. */ - .align 4 -L(s1_align): -#ifdef __LITTLE_ENDIAN__ - lvsr v6, 0, rSTR2 -#else - lvsl v6, 0, rSTR2 -#endif - lvx v5, 0, rSTR2 - srdi. r6, rN, 6 - li r10, 32 - li r11, 48 - ble cr0, L(lessthan64_unalign) - mtctr r6 - li r9, 64 - /* Unaligned vector loop. */ - .align 4 -L(unalign_qwloop): - lvx v4, 0, rSTR1 - lvx v10, rSTR2, r8 -#ifdef __LITTLE_ENDIAN__ - vperm v5, v10, v5, v6 -#else - vperm v5, v5, v10, v6 -#endif - vcmpequb. v7, v5, v4 - bnl cr6, L(different2) - vor v5, v10, v10 - lvx v4, rSTR1, r8 - lvx v10, rSTR2, r10 -#ifdef __LITTLE_ENDIAN__ - vperm v5, v10, v5, v6 -#else - vperm v5, v5, v10, v6 -#endif - vcmpequb. v7, v5, v4 - bnl cr6, L(different2) - vor v5, v10, v10 - lvx v4, rSTR1, r10 - lvx v10, rSTR2, r11 -#ifdef __LITTLE_ENDIAN__ - vperm v5, v10, v5, v6 -#else - vperm v5, v5, v10, v6 -#endif - vcmpequb. v7, v5, v4 - bnl cr6, L(different2) - vor v5, v10, v10 - lvx v4, rSTR1, r11 - lvx v10, rSTR2, r9 -#ifdef __LITTLE_ENDIAN__ - vperm v5, v10, v5, v6 -#else - vperm v5, v5, v10, v6 -#endif - vcmpequb. v7, v5, v4 - bnl cr6, L(different2) - vor v5, v10, v10 - addi rSTR1, rSTR1, 64 - addi rSTR2, rSTR2, 64 - bdnz L(unalign_qwloop) - clrldi rN, rN, 58 - /* Handle remainder for unaligned loop. */ - .align 4 -L(lessthan64_unalign): - mr r9, rSTR1 - cmpdi cr6, rN, 0 - li rSTR1, 0 - blelr cr6 - lvx v4, 0, r9 - lvx v10, rSTR2, r8 -#ifdef __LITTLE_ENDIAN__ - vperm v5, v10, v5, v6 -#else - vperm v5, v5, v10, v6 -#endif - vcmpequb. v7, v5, v4 - bnl cr6, L(different1) - vor v5, v10, v10 - addi rN, rN, -16 - - cmpdi cr6, rN, 0 - blelr cr6 - lvx v4, r9, r8 - lvx v10, rSTR2, r10 -#ifdef __LITTLE_ENDIAN__ - vperm v5, v10, v5, v6 -#else - vperm v5, v5, v10, v6 -#endif - vcmpequb. v7, v5, v4 - bnl cr6, L(different1) - vor v5, v10, v10 - addi rN, rN, -16 - - cmpdi cr6, rN, 0 - blelr cr6 - lvx v4, r9, r10 - lvx v10, rSTR2, r11 -#ifdef __LITTLE_ENDIAN__ - vperm v5, v10, v5, v6 -#else - vperm v5, v5, v10, v6 -#endif - vcmpequb. v7, v5, v4 - bnl cr6, L(different1) - vor v5, v10, v10 - addi rN, rN, -16 - - cmpdi cr6, rN, 0 - blelr cr6 - lvx v4, r9, r11 - addi r11, r11, 16 - lvx v10, rSTR2, r11 -#ifdef __LITTLE_ENDIAN__ - vperm v5, v10, v5, v6 -#else - vperm v5, v5, v10, v6 -#endif - vcmpequb. v7, v5, v4 - bnl cr6, L(different1) - blr - -/* Otherwise we know the two strings have the same alignment (but not - yet DW). So we force the string addresses to the next lower DW - boundary and special case this first DW using shift left to - eliminate bits preceding the first byte. Since we want to join the - normal (DW aligned) compare loop, starting at the second double word, - we need to adjust the length (rN) and special case the loop - versioning for the first DW. This ensures that the loop count is - correct and the first DW (shifted) is in the expected register pair. */ - .align 4 -L(DW): - std rWORD8, rWORD8SAVE(r1) - std rWORD7, rWORD7SAVE(r1) - std rOFF8, rOFF8SAVE(r1) - std rOFF16, rOFF16SAVE(r1) - std rOFF24, rOFF24SAVE(r1) - std rOFF32, rOFF32SAVE(r1) - cfi_offset(rWORD8, rWORD8SAVE) - cfi_offset(rWORD7, rWORD7SAVE) - cfi_offset(rOFF8, rOFF8SAVE) - cfi_offset(rOFF16, rOFF16SAVE) - cfi_offset(rOFF24, rOFF24SAVE) - cfi_offset(rOFF32, rOFF32SAVE) - - li rOFF8,8 - li rOFF16,16 - li rOFF24,24 - li rOFF32,32 - clrrdi rSTR1, rSTR1, 3 - clrrdi rSTR2, rSTR2, 3 - beq cr5, L(DWaligned) - add rN, rN, r12 - sldi rWORD6, r12, 3 - srdi r0, rN, 5 /* Divide by 32. */ - andi. r12, rN, 24 /* Get the DW remainder. */ - LD rWORD1, 0, rSTR1 - LD rWORD2, 0, rSTR2 - cmpldi cr1, r12, 16 - cmpldi cr7, rN, 32 - clrldi rN, rN, 61 - beq L(dPs4) - mtctr r0 - bgt cr1, L(dPs3) - beq cr1, L(dPs2) - -/* Remainder is 8. */ - .align 3 -L(dsP1): - sld rWORD5, rWORD1, rWORD6 - sld rWORD6, rWORD2, rWORD6 - cmpld cr5, rWORD5, rWORD6 - blt cr7, L(dP1x) -/* Do something useful in this cycle since we have to branch anyway. */ - LD rWORD1, rOFF8, rSTR1 - LD rWORD2, rOFF8, rSTR2 - cmpld cr7, rWORD1, rWORD2 - b L(dP1e) -/* Remainder is 16. */ - .align 4 -L(dPs2): - sld rWORD5, rWORD1, rWORD6 - sld rWORD6, rWORD2, rWORD6 - cmpld cr6, rWORD5, rWORD6 - blt cr7, L(dP2x) -/* Do something useful in this cycle since we have to branch anyway. */ - LD rWORD7, rOFF8, rSTR1 - LD rWORD8, rOFF8, rSTR2 - cmpld cr5, rWORD7, rWORD8 - b L(dP2e) -/* Remainder is 24. */ - .align 4 -L(dPs3): - sld rWORD3, rWORD1, rWORD6 - sld rWORD4, rWORD2, rWORD6 - cmpld cr1, rWORD3, rWORD4 - b L(dP3e) -/* Count is a multiple of 32, remainder is 0. */ - .align 4 -L(dPs4): - mtctr r0 - sld rWORD1, rWORD1, rWORD6 - sld rWORD2, rWORD2, rWORD6 - cmpld cr7, rWORD1, rWORD2 - b L(dP4e) - -/* At this point we know both strings are double word aligned and the - compare length is at least 8 bytes. */ - .align 4 -L(DWaligned): - andi. r12, rN, 24 /* Get the DW remainder. */ - srdi r0, rN, 5 /* Divide by 32. */ - cmpldi cr1, r12, 16 - cmpldi cr7, rN, 32 - clrldi rN, rN, 61 - beq L(dP4) - bgt cr1, L(dP3) - beq cr1, L(dP2) - -/* Remainder is 8. */ - .align 4 -L(dP1): - mtctr r0 -/* Normally we'd use rWORD7/rWORD8 here, but since we might exit early - (8-15 byte compare), we want to use only volatile registers. This - means we can avoid restoring non-volatile registers since we did not - change any on the early exit path. The key here is the non-early - exit path only cares about the condition code (cr5), not about which - register pair was used. */ - LD rWORD5, 0, rSTR1 - LD rWORD6, 0, rSTR2 - cmpld cr5, rWORD5, rWORD6 - blt cr7, L(dP1x) - LD rWORD1, rOFF8, rSTR1 - LD rWORD2, rOFF8, rSTR2 - cmpld cr7, rWORD1, rWORD2 -L(dP1e): - LD rWORD3, rOFF16, rSTR1 - LD rWORD4, rOFF16, rSTR2 - cmpld cr1, rWORD3, rWORD4 - LD rWORD5, rOFF24, rSTR1 - LD rWORD6, rOFF24, rSTR2 - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5x) - bne cr7, L(dLcr7x) - - LD rWORD7, rOFF32, rSTR1 - LD rWORD8, rOFF32, rSTR2 - addi rSTR1, rSTR1, 32 - addi rSTR2, rSTR2, 32 - bne cr1, L(dLcr1) - cmpld cr5, rWORD7, rWORD8 - bdnz L(dLoop) - bne cr6, L(dLcr6) - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) - .align 3 -L(dP1x): - sldi. r12, rN, 3 - bne cr5, L(dLcr5x) - subfic rN, r12, 64 /* Shift count is 64 - (rN * 8). */ - bne L(d00) - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 0 - blr - -/* Remainder is 16. */ - .align 4 -L(dP2): - mtctr r0 - LD rWORD5, 0, rSTR1 - LD rWORD6, 0, rSTR2 - cmpld cr6, rWORD5, rWORD6 - blt cr7, L(dP2x) - LD rWORD7, rOFF8, rSTR1 - LD rWORD8, rOFF8, rSTR2 - cmpld cr5, rWORD7, rWORD8 -L(dP2e): - LD rWORD1, rOFF16, rSTR1 - LD rWORD2, rOFF16, rSTR2 - cmpld cr7, rWORD1, rWORD2 - LD rWORD3, rOFF24, rSTR1 - LD rWORD4, rOFF24, rSTR2 - cmpld cr1, rWORD3, rWORD4 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 - bne cr6, L(dLcr6) - bne cr5, L(dLcr5) - b L(dLoop2) - .align 4 -L(dP2x): - LD rWORD3, rOFF8, rSTR1 - LD rWORD4, rOFF8, rSTR2 - cmpld cr1, rWORD3, rWORD4 - sldi. r12, rN, 3 - bne cr6, L(dLcr6x) - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 - bne cr1, L(dLcr1x) - subfic rN, r12, 64 /* Shift count is 64 - (rN * 8). */ - bne L(d00) - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 0 - blr - -/* Remainder is 24. */ - .align 4 -L(dP3): - mtctr r0 - LD rWORD3, 0, rSTR1 - LD rWORD4, 0, rSTR2 - cmpld cr1, rWORD3, rWORD4 -L(dP3e): - LD rWORD5, rOFF8, rSTR1 - LD rWORD6, rOFF8, rSTR2 - cmpld cr6, rWORD5, rWORD6 - blt cr7, L(dP3x) - LD rWORD7, rOFF16, rSTR1 - LD rWORD8, rOFF16, rSTR2 - cmpld cr5, rWORD7, rWORD8 - LD rWORD1, rOFF24, rSTR1 - LD rWORD2, rOFF24, rSTR2 - cmpld cr7, rWORD1, rWORD2 - addi rSTR1, rSTR1, 16 - addi rSTR2, rSTR2, 16 - bne cr1, L(dLcr1) - bne cr6, L(dLcr6) - b L(dLoop1) -/* Again we are on a early exit path (24-31 byte compare), we want to - only use volatile registers and avoid restoring non-volatile - registers. */ - .align 4 -L(dP3x): - LD rWORD1, rOFF16, rSTR1 - LD rWORD2, rOFF16, rSTR2 - cmpld cr7, rWORD1, rWORD2 - sldi. r12, rN, 3 - bne cr1, L(dLcr1x) - addi rSTR1, rSTR1, 16 - addi rSTR2, rSTR2, 16 - bne cr6, L(dLcr6x) - subfic rN, r12, 64 /* Shift count is 64 - (rN * 8). */ - bne cr7, L(dLcr7x) - bne L(d00) - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 0 - blr - -/* Count is a multiple of 32, remainder is 0. */ - .align 4 -L(dP4): - mtctr r0 - LD rWORD1, 0, rSTR1 - LD rWORD2, 0, rSTR2 - cmpld cr7, rWORD1, rWORD2 -L(dP4e): - LD rWORD3, rOFF8, rSTR1 - LD rWORD4, rOFF8, rSTR2 - cmpld cr1, rWORD3, rWORD4 - LD rWORD5, rOFF16, rSTR1 - LD rWORD6, rOFF16, rSTR2 - cmpld cr6, rWORD5, rWORD6 - LD rWORD7, rOFF24, rSTR1 - LD rWORD8, rOFF24, rSTR2 - addi rSTR1, rSTR1, 24 - addi rSTR2, rSTR2, 24 - cmpld cr5, rWORD7, rWORD8 - bne cr7, L(dLcr7) - bne cr1, L(dLcr1) - bdz- L(d24) /* Adjust CTR as we start with +4. */ -/* This is the primary loop. */ - .align 4 -L(dLoop): - LD rWORD1, rOFF8, rSTR1 - LD rWORD2, rOFF8, rSTR2 - cmpld cr1, rWORD3, rWORD4 - bne cr6, L(dLcr6) -L(dLoop1): - LD rWORD3, rOFF16, rSTR1 - LD rWORD4, rOFF16, rSTR2 - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5) -L(dLoop2): - LD rWORD5, rOFF24, rSTR1 - LD rWORD6, rOFF24, rSTR2 - cmpld cr5, rWORD7, rWORD8 - bne cr7, L(dLcr7) -L(dLoop3): - LD rWORD7, rOFF32, rSTR1 - LD rWORD8, rOFF32, rSTR2 - addi rSTR1, rSTR1, 32 - addi rSTR2, rSTR2, 32 - bne cr1, L(dLcr1) - cmpld cr7, rWORD1, rWORD2 - bdnz L(dLoop) - -L(dL4): - cmpld cr1, rWORD3, rWORD4 - bne cr6, L(dLcr6) - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(dLcr5) - cmpld cr5, rWORD7, rWORD8 -L(d44): - bne cr7, L(dLcr7) -L(d34): - bne cr1, L(dLcr1) -L(d24): - bne cr6, L(dLcr6) -L(d14): - sldi. r12, rN, 3 - bne cr5, L(dLcr5) -L(d04): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) - subfic rN, r12, 64 /* Shift count is 64 - (rN * 8). */ - beq L(duzeroLength) -/* At this point we have a remainder of 1 to 7 bytes to compare. Since - we are aligned it is safe to load the whole double word, and use - shift right double to eliminate bits beyond the compare length. */ -L(d00): - LD rWORD1, rOFF8, rSTR1 - LD rWORD2, rOFF8, rSTR2 - srd rWORD1, rWORD1, rN - srd rWORD2, rWORD2, rN - cmpld cr7, rWORD1, rWORD2 - bne cr7, L(dLcr7x) - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 0 - blr - - .align 4 -L(dLcr7): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) -L(dLcr7x): - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 1 - bgtlr cr7 - li rRTN, -1 - blr - .align 4 -L(dLcr1): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) -L(dLcr1x): - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 1 - bgtlr cr1 - li rRTN, -1 - blr - .align 4 -L(dLcr6): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) -L(dLcr6x): - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 1 - bgtlr cr6 - li rRTN, -1 - blr - .align 4 -L(dLcr5): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) -L(dLcr5x): - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 1 - bgtlr cr5 - li rRTN, -1 - blr - - .align 4 -L(bytealigned): - mtctr rN - -/* We need to prime this loop. This loop is swing modulo scheduled - to avoid pipe delays. The dependent instruction latencies (load to - compare to conditional branch) is 2 to 3 cycles. In this loop each - dispatch group ends in a branch and takes 1 cycle. Effectively - the first iteration of the loop only serves to load operands and - branches based on compares are delayed until the next loop. - - So we must precondition some registers and condition codes so that - we don't exit the loop early on the first iteration. */ - - lbz rWORD1, 0(rSTR1) - lbz rWORD2, 0(rSTR2) - bdz L(b11) - cmpld cr7, rWORD1, rWORD2 - lbz rWORD3, 1(rSTR1) - lbz rWORD4, 1(rSTR2) - bdz L(b12) - cmpld cr1, rWORD3, rWORD4 - lbzu rWORD5, 2(rSTR1) - lbzu rWORD6, 2(rSTR2) - bdz L(b13) - .align 4 -L(bLoop): - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) - bne cr7, L(bLcr7) - - cmpld cr6, rWORD5, rWORD6 - bdz L(b3i) - - lbzu rWORD3, 1(rSTR1) - lbzu rWORD4, 1(rSTR2) - bne cr1, L(bLcr1) - - cmpld cr7, rWORD1, rWORD2 - bdz L(b2i) - - lbzu rWORD5, 1(rSTR1) - lbzu rWORD6, 1(rSTR2) - bne cr6, L(bLcr6) - - cmpld cr1, rWORD3, rWORD4 - bdnz L(bLoop) - -/* We speculatively loading bytes before we have tested the previous - bytes. But we must avoid overrunning the length (in the ctr) to - prevent these speculative loads from causing a segfault. In this - case the loop will exit early (before the all pending bytes are - tested. In this case we must complete the pending operations - before returning. */ -L(b1i): - bne cr7, L(bLcr7) - bne cr1, L(bLcr1) - b L(bx56) - .align 4 -L(b2i): - bne cr6, L(bLcr6) - bne cr7, L(bLcr7) - b L(bx34) - .align 4 -L(b3i): - bne cr1, L(bLcr1) - bne cr6, L(bLcr6) - b L(bx12) - .align 4 -L(bLcr7): - li rRTN, 1 - bgtlr cr7 - li rRTN, -1 - blr -L(bLcr1): - li rRTN, 1 - bgtlr cr1 - li rRTN, -1 - blr -L(bLcr6): - li rRTN, 1 - bgtlr cr6 - li rRTN, -1 - blr - -L(b13): - bne cr7, L(bx12) - bne cr1, L(bx34) -L(bx56): - sub rRTN, rWORD5, rWORD6 - blr - nop -L(b12): - bne cr7, L(bx12) -L(bx34): - sub rRTN, rWORD3, rWORD4 - blr -L(b11): -L(bx12): - sub rRTN, rWORD1, rWORD2 - blr - - .align 4 -L(zeroLength): - li rRTN, 0 - blr - - .align 4 -/* At this point we know the strings have different alignment and the - compare length is at least 8 bytes. r12 contains the low order - 3 bits of rSTR1 and cr5 contains the result of the logical compare - of r12 to 0. If r12 == 0 then rStr1 is double word - aligned and can perform the DWunaligned loop. - - Otherwise we know that rSTR1 is not already DW aligned yet. - So we can force the string addresses to the next lower DW - boundary and special case this first DW using shift left to - eliminate bits preceding the first byte. Since we want to join the - normal (DWaligned) compare loop, starting at the second double word, - we need to adjust the length (rN) and special case the loop - versioning for the first DW. This ensures that the loop count is - correct and the first DW (shifted) is in the expected resister pair. */ -L(unaligned): - std rWORD8, rWORD8SAVE(r1) - std rWORD7, rWORD7SAVE(r1) - std rOFF8, rOFF8SAVE(r1) - std rOFF16, rOFF16SAVE(r1) - std rOFF24, rOFF24SAVE(r1) - std rOFF32, rOFF32SAVE(r1) - cfi_offset(rWORD8, rWORD8SAVE) - cfi_offset(rWORD7, rWORD7SAVE) - cfi_offset(rOFF8, rOFF8SAVE) - cfi_offset(rOFF16, rOFF16SAVE) - cfi_offset(rOFF24, rOFF24SAVE) - cfi_offset(rOFF32, rOFF32SAVE) - li rOFF8,8 - li rOFF16,16 - li rOFF24,24 - li rOFF32,32 - std rSHL, rSHLSAVE(r1) - cfi_offset(rSHL, rSHLSAVE) - clrldi rSHL, rSTR2, 61 - beq cr6, L(duzeroLength) - std rSHR, rSHRSAVE(r1) - cfi_offset(rSHR, rSHRSAVE) - beq cr5, L(DWunaligned) - std rWORD8_SHIFT, rWORD8SHIFTSAVE(r1) - cfi_offset(rWORD8_SHIFT, rWORD8SHIFTSAVE) -/* Adjust the logical start of rSTR2 to compensate for the extra bits - in the 1st rSTR1 DW. */ - sub rWORD8_SHIFT, rSTR2, r12 -/* But do not attempt to address the DW before that DW that contains - the actual start of rSTR2. */ - clrrdi rSTR2, rSTR2, 3 - std rWORD2_SHIFT, rWORD2SHIFTSAVE(r1) -/* Compute the left/right shift counts for the unaligned rSTR2, - compensating for the logical (DW aligned) start of rSTR1. */ - clrldi rSHL, rWORD8_SHIFT, 61 - clrrdi rSTR1, rSTR1, 3 - std rWORD4_SHIFT, rWORD4SHIFTSAVE(r1) - sldi rSHL, rSHL, 3 - cmpld cr5, rWORD8_SHIFT, rSTR2 - add rN, rN, r12 - sldi rWORD6, r12, 3 - std rWORD6_SHIFT, rWORD6SHIFTSAVE(r1) - cfi_offset(rWORD2_SHIFT, rWORD2SHIFTSAVE) - cfi_offset(rWORD4_SHIFT, rWORD4SHIFTSAVE) - cfi_offset(rWORD6_SHIFT, rWORD6SHIFTSAVE) - subfic rSHR, rSHL, 64 - srdi r0, rN, 5 /* Divide by 32. */ - andi. r12, rN, 24 /* Get the DW remainder. */ -/* We normally need to load 2 DWs to start the unaligned rSTR2, but in - this special case those bits may be discarded anyway. Also we - must avoid loading a DW where none of the bits are part of rSTR2 as - this may cross a page boundary and cause a page fault. */ - li rWORD8, 0 - blt cr5, L(dus0) - LD rWORD8, 0, rSTR2 - addi rSTR2, rSTR2, 8 - sld rWORD8, rWORD8, rSHL - -L(dus0): - LD rWORD1, 0, rSTR1 - LD rWORD2, 0, rSTR2 - cmpldi cr1, r12, 16 - cmpldi cr7, rN, 32 - srd r12, rWORD2, rSHR - clrldi rN, rN, 61 - beq L(duPs4) - mtctr r0 - or rWORD8, r12, rWORD8 - bgt cr1, L(duPs3) - beq cr1, L(duPs2) - -/* Remainder is 8. */ - .align 4 -L(dusP1): - sld rWORD8_SHIFT, rWORD2, rSHL - sld rWORD7, rWORD1, rWORD6 - sld rWORD8, rWORD8, rWORD6 - bge cr7, L(duP1e) -/* At this point we exit early with the first double word compare - complete and remainder of 0 to 7 bytes. See L(du14) for details on - how we handle the remaining bytes. */ - cmpld cr5, rWORD7, rWORD8 - sldi. rN, rN, 3 - bne cr5, L(duLcr5) - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) - LD rWORD2, rOFF8, rSTR2 - srd r0, rWORD2, rSHR - b L(dutrim) -/* Remainder is 16. */ - .align 4 -L(duPs2): - sld rWORD6_SHIFT, rWORD2, rSHL - sld rWORD5, rWORD1, rWORD6 - sld rWORD6, rWORD8, rWORD6 - b L(duP2e) -/* Remainder is 24. */ - .align 4 -L(duPs3): - sld rWORD4_SHIFT, rWORD2, rSHL - sld rWORD3, rWORD1, rWORD6 - sld rWORD4, rWORD8, rWORD6 - b L(duP3e) -/* Count is a multiple of 32, remainder is 0. */ - .align 4 -L(duPs4): - mtctr r0 - or rWORD8, r12, rWORD8 - sld rWORD2_SHIFT, rWORD2, rSHL - sld rWORD1, rWORD1, rWORD6 - sld rWORD2, rWORD8, rWORD6 - b L(duP4e) - -/* At this point we know rSTR1 is double word aligned and the - compare length is at least 8 bytes. */ - .align 4 -L(DWunaligned): - std rWORD8_SHIFT, rWORD8SHIFTSAVE(r1) - clrrdi rSTR2, rSTR2, 3 - std rWORD2_SHIFT, rWORD2SHIFTSAVE(r1) - srdi r0, rN, 5 /* Divide by 32. */ - std rWORD4_SHIFT, rWORD4SHIFTSAVE(r1) - andi. r12, rN, 24 /* Get the DW remainder. */ - std rWORD6_SHIFT, rWORD6SHIFTSAVE(r1) - cfi_offset(rWORD8_SHIFT, rWORD8SHIFTSAVE) - cfi_offset(rWORD2_SHIFT, rWORD2SHIFTSAVE) - cfi_offset(rWORD4_SHIFT, rWORD4SHIFTSAVE) - cfi_offset(rWORD6_SHIFT, rWORD6SHIFTSAVE) - sldi rSHL, rSHL, 3 - LD rWORD6, 0, rSTR2 - LD rWORD8, rOFF8, rSTR2 - addi rSTR2, rSTR2, 8 - cmpldi cr1, r12, 16 - cmpldi cr7, rN, 32 - clrldi rN, rN, 61 - subfic rSHR, rSHL, 64 - sld rWORD6_SHIFT, rWORD6, rSHL - beq L(duP4) - mtctr r0 - bgt cr1, L(duP3) - beq cr1, L(duP2) - -/* Remainder is 8. */ - .align 4 -L(duP1): - srd r12, rWORD8, rSHR - LD rWORD7, 0, rSTR1 - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP1x) -L(duP1e): - LD rWORD1, rOFF8, rSTR1 - LD rWORD2, rOFF8, rSTR2 - cmpld cr5, rWORD7, rWORD8 - srd r0, rWORD2, rSHR - sld rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT - LD rWORD3, rOFF16, rSTR1 - LD rWORD4, rOFF16, rSTR2 - cmpld cr7, rWORD1, rWORD2 - srd r12, rWORD4, rSHR - sld rWORD4_SHIFT, rWORD4, rSHL - bne cr5, L(duLcr5) - or rWORD4, r12, rWORD2_SHIFT - LD rWORD5, rOFF24, rSTR1 - LD rWORD6, rOFF24, rSTR2 - cmpld cr1, rWORD3, rWORD4 - srd r0, rWORD6, rSHR - sld rWORD6_SHIFT, rWORD6, rSHL - bne cr7, L(duLcr7) - or rWORD6, r0, rWORD4_SHIFT - cmpld cr6, rWORD5, rWORD6 - b L(duLoop3) - .align 4 -/* At this point we exit early with the first double word compare - complete and remainder of 0 to 7 bytes. See L(du14) for details on - how we handle the remaining bytes. */ -L(duP1x): - cmpld cr5, rWORD7, rWORD8 - sldi. rN, rN, 3 - bne cr5, L(duLcr5) - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) - LD rWORD2, rOFF8, rSTR2 - srd r0, rWORD2, rSHR - b L(dutrim) -/* Remainder is 16. */ - .align 4 -L(duP2): - srd r0, rWORD8, rSHR - LD rWORD5, 0, rSTR1 - or rWORD6, r0, rWORD6_SHIFT - sld rWORD6_SHIFT, rWORD8, rSHL -L(duP2e): - LD rWORD7, rOFF8, rSTR1 - LD rWORD8, rOFF8, rSTR2 - cmpld cr6, rWORD5, rWORD6 - srd r12, rWORD8, rSHR - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP2x) - LD rWORD1, rOFF16, rSTR1 - LD rWORD2, rOFF16, rSTR2 - cmpld cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - srd r0, rWORD2, rSHR - sld rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT - LD rWORD3, rOFF24, rSTR1 - LD rWORD4, rOFF24, rSTR2 - cmpld cr7, rWORD1, rWORD2 - bne cr5, L(duLcr5) - srd r12, rWORD4, rSHR - sld rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 - cmpld cr1, rWORD3, rWORD4 - b L(duLoop2) - .align 4 -L(duP2x): - cmpld cr5, rWORD7, rWORD8 - addi rSTR1, rSTR1, 8 - addi rSTR2, rSTR2, 8 - bne cr6, L(duLcr6) - sldi. rN, rN, 3 - bne cr5, L(duLcr5) - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) - LD rWORD2, rOFF8, rSTR2 - srd r0, rWORD2, rSHR - b L(dutrim) - -/* Remainder is 24. */ - .align 4 -L(duP3): - srd r12, rWORD8, rSHR - LD rWORD3, 0, rSTR1 - sld rWORD4_SHIFT, rWORD8, rSHL - or rWORD4, r12, rWORD6_SHIFT -L(duP3e): - LD rWORD5, rOFF8, rSTR1 - LD rWORD6, rOFF8, rSTR2 - cmpld cr1, rWORD3, rWORD4 - srd r0, rWORD6, rSHR - sld rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT - LD rWORD7, rOFF16, rSTR1 - LD rWORD8, rOFF16, rSTR2 - cmpld cr6, rWORD5, rWORD6 - bne cr1, L(duLcr1) - srd r12, rWORD8, rSHR - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - blt cr7, L(duP3x) - LD rWORD1, rOFF24, rSTR1 - LD rWORD2, rOFF24, rSTR2 - cmpld cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - srd r0, rWORD2, rSHR - sld rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT - addi rSTR1, rSTR1, 16 - addi rSTR2, rSTR2, 16 - cmpld cr7, rWORD1, rWORD2 - b L(duLoop1) - .align 4 -L(duP3x): - addi rSTR1, rSTR1, 16 - addi rSTR2, rSTR2, 16 - cmpld cr5, rWORD7, rWORD8 - bne cr6, L(duLcr6) - sldi. rN, rN, 3 - bne cr5, L(duLcr5) - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) - LD rWORD2, rOFF8, rSTR2 - srd r0, rWORD2, rSHR - b L(dutrim) - -/* Count is a multiple of 32, remainder is 0. */ - .align 4 -L(duP4): - mtctr r0 - srd r0, rWORD8, rSHR - LD rWORD1, 0, rSTR1 - sld rWORD2_SHIFT, rWORD8, rSHL - or rWORD2, r0, rWORD6_SHIFT -L(duP4e): - LD rWORD3, rOFF8, rSTR1 - LD rWORD4, rOFF8, rSTR2 - cmpld cr7, rWORD1, rWORD2 - srd r12, rWORD4, rSHR - sld rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT - LD rWORD5, rOFF16, rSTR1 - LD rWORD6, rOFF16, rSTR2 - cmpld cr1, rWORD3, rWORD4 - bne cr7, L(duLcr7) - srd r0, rWORD6, rSHR - sld rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT - LD rWORD7, rOFF24, rSTR1 - LD rWORD8, rOFF24, rSTR2 - addi rSTR1, rSTR1, 24 - addi rSTR2, rSTR2, 24 - cmpld cr6, rWORD5, rWORD6 - bne cr1, L(duLcr1) - srd r12, rWORD8, rSHR - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - cmpld cr5, rWORD7, rWORD8 - bdz L(du24) /* Adjust CTR as we start with +4. */ -/* This is the primary loop. */ - .align 4 -L(duLoop): - LD rWORD1, rOFF8, rSTR1 - LD rWORD2, rOFF8, rSTR2 - cmpld cr1, rWORD3, rWORD4 - bne cr6, L(duLcr6) - srd r0, rWORD2, rSHR - sld rWORD2_SHIFT, rWORD2, rSHL - or rWORD2, r0, rWORD8_SHIFT -L(duLoop1): - LD rWORD3, rOFF16, rSTR1 - LD rWORD4, rOFF16, rSTR2 - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(duLcr5) - srd r12, rWORD4, rSHR - sld rWORD4_SHIFT, rWORD4, rSHL - or rWORD4, r12, rWORD2_SHIFT -L(duLoop2): - LD rWORD5, rOFF24, rSTR1 - LD rWORD6, rOFF24, rSTR2 - cmpld cr5, rWORD7, rWORD8 - bne cr7, L(duLcr7) - srd r0, rWORD6, rSHR - sld rWORD6_SHIFT, rWORD6, rSHL - or rWORD6, r0, rWORD4_SHIFT -L(duLoop3): - LD rWORD7, rOFF32, rSTR1 - LD rWORD8, rOFF32, rSTR2 - addi rSTR1, rSTR1, 32 - addi rSTR2, rSTR2, 32 - cmpld cr7, rWORD1, rWORD2 - bne cr1, L(duLcr1) - srd r12, rWORD8, rSHR - sld rWORD8_SHIFT, rWORD8, rSHL - or rWORD8, r12, rWORD6_SHIFT - bdnz L(duLoop) - -L(duL4): - cmpld cr1, rWORD3, rWORD4 - bne cr6, L(duLcr6) - cmpld cr6, rWORD5, rWORD6 - bne cr5, L(duLcr5) - cmpld cr5, rWORD7, rWORD8 -L(du44): - bne cr7, L(duLcr7) -L(du34): - bne cr1, L(duLcr1) -L(du24): - bne cr6, L(duLcr6) -L(du14): - sldi. rN, rN, 3 - bne cr5, L(duLcr5) -/* At this point we have a remainder of 1 to 7 bytes to compare. We use - shift right double to eliminate bits beyond the compare length. - - However it may not be safe to load rWORD2 which may be beyond the - string length. So we compare the bit length of the remainder to - the right shift count (rSHR). If the bit count is less than or equal - we do not need to load rWORD2 (all significant bits are already in - rWORD8_SHIFT). */ - cmpld cr7, rN, rSHR - beq L(duZeroReturn) - li r0, 0 - ble cr7, L(dutrim) - LD rWORD2, rOFF8, rSTR2 - srd r0, rWORD2, rSHR - .align 4 -L(dutrim): - LD rWORD1, rOFF8, rSTR1 - ld rWORD8, -8(r1) - subfic rN, rN, 64 /* Shift count is 64 - (rN * 8). */ - or rWORD2, r0, rWORD8_SHIFT - ld rWORD7, rWORD7SAVE(r1) - ld rSHL, rSHLSAVE(r1) - srd rWORD1, rWORD1, rN - srd rWORD2, rWORD2, rN - ld rSHR, rSHRSAVE(r1) - ld rWORD8_SHIFT, rWORD8SHIFTSAVE(r1) - li rRTN, 0 - cmpld cr7, rWORD1, rWORD2 - ld rWORD2_SHIFT, rWORD2SHIFTSAVE(r1) - ld rWORD4_SHIFT, rWORD4SHIFTSAVE(r1) - beq cr7, L(dureturn24) - li rRTN, 1 - ld rWORD6_SHIFT, rWORD6SHIFTSAVE(r1) - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - bgtlr cr7 - li rRTN, -1 - blr - .align 4 -L(duLcr7): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) - li rRTN, 1 - bgt cr7, L(dureturn29) - ld rSHL, rSHLSAVE(r1) - ld rSHR, rSHRSAVE(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr1): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) - li rRTN, 1 - bgt cr1, L(dureturn29) - ld rSHL, rSHLSAVE(r1) - ld rSHR, rSHRSAVE(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr6): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) - li rRTN, 1 - bgt cr6, L(dureturn29) - ld rSHL, rSHLSAVE(r1) - ld rSHR, rSHRSAVE(r1) - li rRTN, -1 - b L(dureturn27) - .align 4 -L(duLcr5): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) - li rRTN, 1 - bgt cr5, L(dureturn29) - ld rSHL, rSHLSAVE(r1) - ld rSHR, rSHRSAVE(r1) - li rRTN, -1 - b L(dureturn27) - - .align 3 -L(duZeroReturn): - li rRTN, 0 - .align 4 -L(dureturn): - ld rWORD8, rWORD8SAVE(r1) - ld rWORD7, rWORD7SAVE(r1) -L(dureturn29): - ld rSHL, rSHLSAVE(r1) - ld rSHR, rSHRSAVE(r1) -L(dureturn27): - ld rWORD8_SHIFT, rWORD8SHIFTSAVE(r1) - ld rWORD2_SHIFT, rWORD2SHIFTSAVE(r1) - ld rWORD4_SHIFT, rWORD4SHIFTSAVE(r1) -L(dureturn24): - ld rWORD6_SHIFT, rWORD6SHIFTSAVE(r1) - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - blr - -L(duzeroLength): - ld rOFF8, rOFF8SAVE(r1) - ld rOFF16, rOFF16SAVE(r1) - ld rOFF24, rOFF24SAVE(r1) - ld rOFF32, rOFF32SAVE(r1) - li rRTN, 0 - blr - -END (MEMCMP) -libc_hidden_builtin_def (memcmp) -weak_alias (memcmp, bcmp) diff --git a/sysdeps/powerpc/powerpc64/power8/memset.S b/sysdeps/powerpc/powerpc64/power8/memset.S deleted file mode 100644 index bc734c9f4f..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/memset.S +++ /dev/null @@ -1,458 +0,0 @@ -/* Optimized memset implementation for PowerPC64/POWER8. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define MTVSRD_V1_R4 .long 0x7c240166 /* mtvsrd v1,r4 */ - -/* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); - Returns 's'. */ - -#ifndef MEMSET -# define MEMSET memset -#endif - - /* No need to use .machine power8 since mtvsrd is already - handled by the define. It avoid breakage on binutils - that does not support this machine specifier. */ - .machine power7 -EALIGN (MEMSET, 5, 0) - CALL_MCOUNT 3 - -L(_memset): - cmpldi cr7,r5,31 - neg r0,r3 - mr r10,r3 - - insrdi r4,r4,8,48 - insrdi r4,r4,16,32 /* Replicate byte to word. */ - ble cr7,L(write_LT_32) - - andi. r11,r10,15 /* Check alignment of DST. */ - insrdi r4,r4,32,0 /* Replicate word to double word. */ - - beq L(big_aligned) - - mtocrf 0x01,r0 - clrldi r0,r0,60 - - /* Get DST aligned to 16 bytes. */ -1: bf 31,2f - stb r4,0(r10) - addi r10,r10,1 - -2: bf 30,4f - sth r4,0(r10) - addi r10,r10,2 - -4: bf 29,8f - stw r4,0(r10) - addi r10,r10,4 - -8: bf 28,16f - std r4,0(r10) - addi r10,r10,8 - -16: subf r5,r0,r5 - - .align 4 -L(big_aligned): - /* For sizes larger than 255 two possible paths: - - if constant is '0', zero full cache lines with dcbz - - otherwise uses vector instructions. */ - cmpldi cr5,r5,255 - dcbtst 0,r10 - cmpldi cr6,r4,0 - crand 27,26,21 - bt 27,L(huge_dcbz) - bge cr5,L(huge_vector) - - - /* Size between 32 and 255 bytes with constant different than 0, use - doubleword store instruction to achieve best throughput. */ - srdi r8,r5,5 - clrldi r11,r5,59 - cmpldi cr6,r11,0 - cmpdi r8,0 - beq L(tail_bytes) - mtctr r8 - - /* Main aligned write loop, writes 32-bytes at a time. */ - .align 4 -L(big_loop): - std r4,0(r10) - std r4,8(r10) - std r4,16(r10) - std r4,24(r10) - addi r10,r10,32 - bdz L(tail_bytes) - - std r4,0(r10) - std r4,8(r10) - std r4,16(r10) - std r4,24(r10) - addi r10,10,32 - bdnz L(big_loop) - - b L(tail_bytes) - - /* Write remaining 1~31 bytes. */ - .align 4 -L(tail_bytes): - beqlr cr6 - - srdi r7,r11,4 - clrldi r8,r11,60 - mtocrf 0x01,r7 - - .align 4 - bf 31,8f - std r4,0(r10) - std r4,8(r10) - addi r10,r10,16 - - .align 4 -8: mtocrf 0x1,r8 - bf 28,4f - std r4,0(r10) - addi r10,r10,8 - - .align 4 -4: bf 29,2f - stw 4,0(10) - addi 10,10,4 - - .align 4 -2: bf 30,1f - sth 4,0(10) - addi 10,10,2 - - .align 4 -1: bflr 31 - stb 4,0(10) - blr - - /* Size larger than 255 bytes with constant different than 0, use - vector instruction to achieve best throughput. */ -L(huge_vector): - /* Replicate set byte to quadword in VMX register. */ - MTVSRD_V1_R4 - xxpermdi 32,v0,v1,0 - vspltb v2,v0,15 - - /* Main aligned write loop: 128 bytes at a time. */ - li r6,16 - li r7,32 - li r8,48 - mtocrf 0x02,r5 - srdi r12,r5,7 - cmpdi r12,0 - beq L(aligned_tail) - mtctr r12 - b L(aligned_128loop) - - .align 4 -L(aligned_128loop): - stvx v2,0,r10 - stvx v2,r10,r6 - stvx v2,r10,r7 - stvx v2,r10,r8 - addi r10,r10,64 - stvx v2,0,r10 - stvx v2,r10,r6 - stvx v2,r10,r7 - stvx v2,r10,r8 - addi r10,r10,64 - bdnz L(aligned_128loop) - - /* Write remaining 1~127 bytes. */ -L(aligned_tail): - mtocrf 0x01,r5 - bf 25,32f - stvx v2,0,r10 - stvx v2,r10,r6 - stvx v2,r10,r7 - stvx v2,r10,r8 - addi r10,r10,64 - -32: bf 26,16f - stvx v2,0,r10 - stvx v2,r10,r6 - addi r10,r10,32 - -16: bf 27,8f - stvx v2,0,r10 - addi r10,r10,16 - -8: bf 28,4f - std r4,0(r10) - addi r10,r10,8 - - /* Copies 4~7 bytes. */ -4: bf 29,L(tail2) - stw r4,0(r10) - bf 30,L(tail5) - sth r4,4(r10) - bflr 31 - stb r4,6(r10) - /* Return original DST pointer. */ - blr - - /* Special case when value is 0 and we have a long length to deal - with. Use dcbz to zero out a full cacheline of 128 bytes at a time. - Before using dcbz though, we need to get the destination 128-byte - aligned. */ - .align 4 -L(huge_dcbz): - andi. r11,r10,127 - neg r0,r10 - beq L(huge_dcbz_aligned) - - clrldi r0,r0,57 - subf r5,r0,r5 - srdi r0,r0,3 - mtocrf 0x01,r0 - - /* Write 1~128 bytes until DST is aligned to 128 bytes. */ -8: bf 28,4f - - std r4,0(r10) - std r4,8(r10) - std r4,16(r10) - std r4,24(r10) - std r4,32(r10) - std r4,40(r10) - std r4,48(r10) - std r4,56(r10) - addi r10,r10,64 - - .align 4 -4: bf 29,2f - std r4,0(r10) - std r4,8(r10) - std r4,16(r10) - std r4,24(r10) - addi r10,r10,32 - - .align 4 -2: bf 30,1f - std r4,0(r10) - std r4,8(r10) - addi r10,r10,16 - - .align 4 -1: bf 31,L(huge_dcbz_aligned) - std r4,0(r10) - addi r10,r10,8 - -L(huge_dcbz_aligned): - /* Setup dcbz unroll offsets and count numbers. */ - srdi r8,r5,9 - clrldi r11,r5,55 - cmpldi cr6,r11,0 - li r9,128 - cmpdi r8,0 - beq L(huge_tail) - li r7,256 - li r6,384 - mtctr r8 - - .align 4 -L(huge_loop): - /* Sets 512 bytes to zero in each iteration, the loop unrolling shows - a throughput boost for large sizes (2048 bytes or higher). */ - dcbz 0,r10 - dcbz r9,r10 - dcbz r7,r10 - dcbz r6,r10 - addi r10,r10,512 - bdnz L(huge_loop) - - beqlr cr6 - -L(huge_tail): - srdi r6,r11,8 - srdi r7,r11,4 - clrldi r8,r11,4 - cmpldi cr6,r8,0 - mtocrf 0x01,r6 - - beq cr6,L(tail) - - /* We have 1~511 bytes remaining. */ - .align 4 -32: bf 31,16f - dcbz 0,r10 - dcbz r9,r10 - addi r10,r10,256 - - .align 4 -16: mtocrf 0x01,r7 - bf 28,8f - dcbz 0,r10 - addi r10,r10,128 - - .align 4 -8: bf 29,4f - std r4,0(r10) - std r4,8(r10) - std r4,16(r10) - std r4,24(r10) - std r4,32(r10) - std r4,40(r10) - std r4,48(r10) - std r4,56(r10) - addi r10,r10,64 - - .align 4 -4: bf 30,2f - std r4,0(r10) - std r4,8(r10) - std r4,16(r10) - std r4,24(r10) - addi r10,r10,32 - - .align 4 -2: bf 31,L(tail) - std r4,0(r10) - std r4,8(r10) - addi r10,r10,16 - .align 4 - - /* Remaining 1~15 bytes. */ -L(tail): - mtocrf 0x01,r8 - - .align -8: bf 28,4f - std r4,0(r10) - addi r10,r10,8 - - .align 4 -4: bf 29,2f - stw r4,0(r10) - addi r10,r10,4 - - .align 4 -2: bf 30,1f - sth r4,0(r10) - addi r10,r10,2 - - .align 4 -1: bflr 31 - stb r4,0(r10) - blr - - /* Handle short copies of 0~31 bytes. Best throughput is achieved - by just unrolling all operations. */ - .align 4 -L(write_LT_32): - cmpldi cr6,5,8 - mtocrf 0x01,r5 - ble cr6,L(write_LE_8) - - /* At least 9 bytes to go. */ - neg r8,r4 - andi. r0,r8,3 - cmpldi cr1,r5,16 - beq L(write_LT_32_aligned) - - /* Force 4-byte alignment for SRC. */ - mtocrf 0x01,r0 - subf r5,r0,r5 - -2: bf 30,1f - sth r4,0(r10) - addi r10,r10,2 - -1: bf 31,L(end_4bytes_alignment) - stb r4,0(r10) - addi r10,r10,1 - - .align 4 -L(end_4bytes_alignment): - cmpldi cr1,r5,16 - mtocrf 0x01,r5 - -L(write_LT_32_aligned): - blt cr1,8f - - stw r4,0(r10) - stw r4,4(r10) - stw r4,8(r10) - stw r4,12(r10) - addi r10,r10,16 - -8: bf 28,L(tail4) - stw r4,0(r10) - stw r4,4(r10) - addi r10,r10,8 - - .align 4 - /* Copies 4~7 bytes. */ -L(tail4): - bf 29,L(tail2) - stw r4,0(r10) - bf 30,L(tail5) - sth r4,4(r10) - bflr 31 - stb r4,6(r10) - blr - - .align 4 - /* Copies 2~3 bytes. */ -L(tail2): - bf 30,1f - sth r4,0(r10) - bflr 31 - stb r4,2(r10) - blr - - .align 4 -L(tail5): - bflr 31 - stb r4,4(r10) - blr - - .align 4 -1: bflr 31 - stb r4,0(r10) - blr - - /* Handles copies of 0~8 bytes. */ - .align 4 -L(write_LE_8): - bne cr6,L(tail4) - - stw r4,0(r10) - stw r4,4(r10) - blr -END_GEN_TB (MEMSET,TB_TOCLESS) -libc_hidden_builtin_def (memset) - -/* Copied from bzero.S to prevent the linker from inserting a stub - between bzero and memset. */ -ENTRY (__bzero) - CALL_MCOUNT 3 - mr r5,r4 - li r4,0 - b L(_memset) -END (__bzero) -#ifndef __bzero -weak_alias (__bzero, bzero) -#endif diff --git a/sysdeps/powerpc/powerpc64/power8/multiarch/Implies b/sysdeps/powerpc/powerpc64/power8/multiarch/Implies deleted file mode 100644 index 1fc7b7cd39..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power7/multiarch diff --git a/sysdeps/powerpc/powerpc64/power8/stpcpy.S b/sysdeps/powerpc/powerpc64/power8/stpcpy.S deleted file mode 100644 index 955e738cee..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/stpcpy.S +++ /dev/null @@ -1,24 +0,0 @@ -/* Optimized stpcpy implementation for PowerPC64/POWER8. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define USE_AS_STPCPY -#include - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/powerpc/powerpc64/power8/stpncpy.S b/sysdeps/powerpc/powerpc64/power8/stpncpy.S deleted file mode 100644 index c14d984dd0..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/stpncpy.S +++ /dev/null @@ -1,24 +0,0 @@ -/* Optimized stpncpy implementation for PowerPC64/POWER8. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define USE_AS_STPNCPY -#include - -weak_alias (__stpncpy, stpncpy) -libc_hidden_def (__stpncpy) -libc_hidden_builtin_def (stpncpy) diff --git a/sysdeps/powerpc/powerpc64/power8/strcasecmp.S b/sysdeps/powerpc/powerpc64/power8/strcasecmp.S deleted file mode 100644 index 88b17a6eb1..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strcasecmp.S +++ /dev/null @@ -1,457 +0,0 @@ -/* Optimized strcasecmp implementation for PowerPC64. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* int [r3] strcasecmp (const char *s1 [r3], const char *s2 [r4] ) */ - -#ifndef USE_AS_STRNCASECMP -# define __STRCASECMP __strcasecmp -# define STRCASECMP strcasecmp -#else -# define __STRCASECMP __strncasecmp -# define STRCASECMP strncasecmp -#endif -/* Convert 16 bytes to lowercase and compare */ -#define TOLOWER() \ - vaddubm v8, v4, v1; \ - vaddubm v7, v4, v3; \ - vcmpgtub v8, v8, v2; \ - vsel v4, v7, v4, v8; \ - vaddubm v8, v5, v1; \ - vaddubm v7, v5, v3; \ - vcmpgtub v8, v8, v2; \ - vsel v5, v7, v5, v8; \ - vcmpequb. v7, v5, v4; - -/* - * Get 16 bytes for unaligned case. - * reg1: Vector to hold next 16 bytes. - * reg2: Address to read from. - * reg3: Permute control vector. - * v8: Tmp vector used to mask unwanted bytes. - * v9: Tmp vector,0 when null is found on first 16 bytes - */ -#ifdef __LITTLE_ENDIAN__ -#define GET16BYTES(reg1, reg2, reg3) \ - lvx reg1, 0, reg2; \ - vspltisb v8, -1; \ - vperm v8, v8, reg1, reg3; \ - vcmpequb. v8, v0, v8; \ - beq cr6, 1f; \ - vspltisb v9, 0; \ - b 2f; \ - .align 4; \ -1: \ - addi r6, reg2, 16; \ - lvx v9, 0, r6; \ -2: \ - vperm reg1, v9, reg1, reg3; -#else -#define GET16BYTES(reg1, reg2, reg3) \ - lvx reg1, 0, reg2; \ - vspltisb v8, -1; \ - vperm v8, reg1, v8, reg3; \ - vcmpequb. v8, v0, v8; \ - beq cr6, 1f; \ - vspltisb v9, 0; \ - b 2f; \ - .align 4; \ -1: \ - addi r6, reg2, 16; \ - lvx v9, 0, r6; \ -2: \ - vperm reg1, reg1, v9, reg3; -#endif - -/* Check null in v4, v5 and convert to lower. */ -#define CHECKNULLANDCONVERT() \ - vcmpequb. v7, v0, v5; \ - beq cr6, 3f; \ - vcmpequb. v7, v0, v4; \ - beq cr6, 3f; \ - b L(null_found); \ - .align 4; \ -3: \ - TOLOWER() - -#ifdef _ARCH_PWR8 -# define VCLZD_V8_v7 vclzd v8, v7; -# define MFVRD_R3_V1 mfvrd r3, v1; -# define VSUBUDM_V9_V8 vsubudm v9, v9, v8; -# define VPOPCNTD_V8_V8 vpopcntd v8, v8; -# define VADDUQM_V7_V8 vadduqm v9, v7, v8; -#else -# define VCLZD_V8_v7 .long 0x11003fc2 -# define MFVRD_R3_V1 .long 0x7c230067 -# define VSUBUDM_V9_V8 .long 0x112944c0 -# define VPOPCNTD_V8_V8 .long 0x110047c3 -# define VADDUQM_V7_V8 .long 0x11274100 -#endif - - .machine power7 - -ENTRY (__STRCASECMP) -#ifdef USE_AS_STRNCASECMP - CALL_MCOUNT 3 -#else - CALL_MCOUNT 2 -#endif -#define rRTN r3 /* Return value */ -#define rSTR1 r10 /* 1st string */ -#define rSTR2 r4 /* 2nd string */ -#define rCHAR1 r6 /* Byte read from 1st string */ -#define rCHAR2 r7 /* Byte read from 2nd string */ -#define rADDR1 r8 /* Address of tolower(rCHAR1) */ -#define rADDR2 r12 /* Address of tolower(rCHAR2) */ -#define rLWR1 r8 /* Word tolower(rCHAR1) */ -#define rLWR2 r12 /* Word tolower(rCHAR2) */ -#define rTMP r9 -#define rLOC r11 /* Default locale address */ - - cmpd cr7, rRTN, rSTR2 - - /* Get locale address. */ - ld rTMP, __libc_tsd_LOCALE@got@tprel(r2) - add rLOC, rTMP, __libc_tsd_LOCALE@tls - ld rLOC, 0(rLOC) - - mr rSTR1, rRTN - li rRTN, 0 - beqlr cr7 -#ifdef USE_AS_STRNCASECMP - cmpdi cr7, r5, 0 - beq cr7, L(retnull) - cmpdi cr7, r5, 16 - blt cr7, L(bytebybyte) -#endif - vspltisb v0, 0 - vspltisb v8, -1 - /* Check for null in initial characters. - Check max of 16 char depending on the alignment. - If null is present, proceed byte by byte. */ - lvx v4, 0, rSTR1 -#ifdef __LITTLE_ENDIAN__ - lvsr v10, 0, rSTR1 /* Compute mask. */ - vperm v9, v8, v4, v10 /* Mask bits that are not part of string. */ -#else - lvsl v10, 0, rSTR1 - vperm v9, v4, v8, v10 -#endif - vcmpequb. v9, v0, v9 /* Check for null bytes. */ - bne cr6, L(bytebybyte) - lvx v5, 0, rSTR2 - /* Calculate alignment. */ -#ifdef __LITTLE_ENDIAN__ - lvsr v6, 0, rSTR2 - vperm v9, v8, v5, v6 /* Mask bits that are not part of string. */ -#else - lvsl v6, 0, rSTR2 - vperm v9, v5, v8, v6 -#endif - vcmpequb. v9, v0, v9 /* Check for null bytes. */ - bne cr6, L(bytebybyte) - /* Check if locale has non ascii characters. */ - ld rTMP, 0(rLOC) - addi r6, rTMP,LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES - lwz rTMP, 0(r6) - cmpdi cr7, rTMP, 1 - beq cr7, L(bytebybyte) - - /* Load vector registers with values used for TOLOWER. */ - /* Load v1 = 0xbf, v2 = 0x19 v3 = 0x20 in each byte. */ - vspltisb v3, 2 - vspltisb v9, 4 - vsl v3, v3, v9 - vaddubm v1, v3, v3 - vnor v1, v1, v1 - vspltisb v2, 7 - vsububm v2, v3, v2 - - andi. rADDR1, rSTR1, 0xF - beq cr0, L(align) - addi r6, rSTR1, 16 - lvx v9, 0, r6 - /* Compute 16 bytes from previous two loads. */ -#ifdef __LITTLE_ENDIAN__ - vperm v4, v9, v4, v10 -#else - vperm v4, v4, v9, v10 -#endif -L(align): - andi. rADDR2, rSTR2, 0xF - beq cr0, L(align1) - addi r6, rSTR2, 16 - lvx v9, 0, r6 - /* Compute 16 bytes from previous two loads. */ -#ifdef __LITTLE_ENDIAN__ - vperm v5, v9, v5, v6 -#else - vperm v5, v5, v9, v6 -#endif -L(align1): - CHECKNULLANDCONVERT() - blt cr6, L(match) - b L(different) - .align 4 -L(match): - clrldi r6, rSTR1, 60 - subfic r7, r6, 16 -#ifdef USE_AS_STRNCASECMP - sub r5, r5, r7 -#endif - add rSTR1, rSTR1, r7 - add rSTR2, rSTR2, r7 - andi. rADDR2, rSTR2, 0xF - addi rSTR1, rSTR1, -16 - addi rSTR2, rSTR2, -16 - beq cr0, L(aligned) -#ifdef __LITTLE_ENDIAN__ - lvsr v6, 0, rSTR2 -#else - lvsl v6, 0, rSTR2 -#endif - /* There are 2 loops depending on the input alignment. - Each loop gets 16 bytes from s1 and s2, check for null, - convert to lowercase and compare. Loop till difference - or null occurs. */ -L(s1_align): - addi rSTR1, rSTR1, 16 - addi rSTR2, rSTR2, 16 -#ifdef USE_AS_STRNCASECMP - cmpdi cr7, r5, 16 - blt cr7, L(bytebybyte) - addi r5, r5, -16 -#endif - lvx v4, 0, rSTR1 - GET16BYTES(v5, rSTR2, v6) - CHECKNULLANDCONVERT() - blt cr6, L(s1_align) - b L(different) - .align 4 -L(aligned): - addi rSTR1, rSTR1, 16 - addi rSTR2, rSTR2, 16 -#ifdef USE_AS_STRNCASECMP - cmpdi cr7, r5, 16 - blt cr7, L(bytebybyte) - addi r5, r5, -16 -#endif - lvx v4, 0, rSTR1 - lvx v5, 0, rSTR2 - CHECKNULLANDCONVERT() - blt cr6, L(aligned) - - /* Calculate and return the difference. */ -L(different): - vaddubm v1, v3, v3 - vcmpequb v7, v0, v7 -#ifdef __LITTLE_ENDIAN__ - /* Count trailing zero. */ - vspltisb v8, -1 - VADDUQM_V7_V8 - vandc v8, v9, v7 - VPOPCNTD_V8_V8 - vspltb v6, v8, 15 - vcmpequb. v6, v6, v1 - blt cr6, L(shift8) -#else - /* Count leading zero. */ - VCLZD_V8_v7 - vspltb v6, v8, 7 - vcmpequb. v6, v6, v1 - blt cr6, L(shift8) - vsro v8, v8, v1 -#endif - b L(skipsum) - .align 4 -L(shift8): - vsumsws v8, v8, v0 -L(skipsum): -#ifdef __LITTLE_ENDIAN__ - /* Shift registers based on leading zero count. */ - vsro v6, v5, v8 - vsro v7, v4, v8 - /* Merge and move to GPR. */ - vmrglb v6, v6, v7 - vslo v1, v6, v1 - MFVRD_R3_V1 - /* Place the characters that are different in first position. */ - sldi rSTR2, rRTN, 56 - srdi rSTR2, rSTR2, 56 - sldi rSTR1, rRTN, 48 - srdi rSTR1, rSTR1, 56 -#else - vslo v6, v5, v8 - vslo v7, v4, v8 - vmrghb v1, v6, v7 - MFVRD_R3_V1 - srdi rSTR2, rRTN, 48 - sldi rSTR2, rSTR2, 56 - srdi rSTR2, rSTR2, 56 - srdi rSTR1, rRTN, 56 -#endif - subf rRTN, rSTR1, rSTR2 - extsw rRTN, rRTN - blr - - .align 4 - /* OK. We've hit the end of the string. We need to be careful that - we don't compare two strings as different because of junk beyond - the end of the strings... */ -L(null_found): - vaddubm v10, v3, v3 -#ifdef __LITTLE_ENDIAN__ - /* Count trailing zero. */ - vspltisb v8, -1 - VADDUQM_V7_V8 - vandc v8, v9, v7 - VPOPCNTD_V8_V8 - vspltb v6, v8, 15 - vcmpequb. v6, v6, v10 - blt cr6, L(shift_8) -#else - /* Count leading zero. */ - VCLZD_V8_v7 - vspltb v6, v8, 7 - vcmpequb. v6, v6, v10 - blt cr6, L(shift_8) - vsro v8, v8, v10 -#endif - b L(skipsum1) - .align 4 -L(shift_8): - vsumsws v8, v8, v0 -L(skipsum1): - /* Calculate shift count based on count of zero. */ - vspltisb v10, 7 - vslb v10, v10, v10 - vsldoi v9, v0, v10, 1 - VSUBUDM_V9_V8 - vspltisb v8, 8 - vsldoi v8, v0, v8, 1 - VSUBUDM_V9_V8 - /* Shift and remove junk after null character. */ -#ifdef __LITTLE_ENDIAN__ - vslo v5, v5, v9 - vslo v4, v4, v9 -#else - vsro v5, v5, v9 - vsro v4, v4, v9 -#endif - /* Convert and compare 16 bytes. */ - TOLOWER() - blt cr6, L(retnull) - b L(different) - .align 4 -L(retnull): - li rRTN, 0 - blr - .align 4 -L(bytebybyte): - /* Unrolling loop for POWER: loads are done with 'lbz' plus - offset and string descriptors are only updated in the end - of loop unrolling. */ - ld rLOC, LOCALE_CTYPE_TOLOWER(rLOC) - lbz rCHAR1, 0(rSTR1) /* Load char from s1 */ - lbz rCHAR2, 0(rSTR2) /* Load char from s2 */ -#ifdef USE_AS_STRNCASECMP - rldicl rTMP, r5, 62, 2 - cmpdi cr7, rTMP, 0 - beq cr7, L(lessthan4) - mtctr rTMP -#endif -L(loop): - cmpdi rCHAR1, 0 /* *s1 == '\0' ? */ - sldi rADDR1, rCHAR1, 2 /* Calculate address for tolower(*s1) */ - sldi rADDR2, rCHAR2, 2 /* Calculate address for tolower(*s2) */ - lwzx rLWR1, rLOC, rADDR1 /* Load tolower(*s1) */ - lwzx rLWR2, rLOC, rADDR2 /* Load tolower(*s2) */ - cmpw cr1, rLWR1, rLWR2 /* r = tolower(*s1) == tolower(*s2) ? */ - crorc 4*cr1+eq,eq,4*cr1+eq /* (*s1 != '\0') || (r == 1) */ - beq cr1, L(done) - lbz rCHAR1, 1(rSTR1) - lbz rCHAR2, 1(rSTR2) - cmpdi rCHAR1, 0 - sldi rADDR1, rCHAR1, 2 - sldi rADDR2, rCHAR2, 2 - lwzx rLWR1, rLOC, rADDR1 - lwzx rLWR2, rLOC, rADDR2 - cmpw cr1, rLWR1, rLWR2 - crorc 4*cr1+eq,eq,4*cr1+eq - beq cr1, L(done) - lbz rCHAR1, 2(rSTR1) - lbz rCHAR2, 2(rSTR2) - cmpdi rCHAR1, 0 - sldi rADDR1, rCHAR1, 2 - sldi rADDR2, rCHAR2, 2 - lwzx rLWR1, rLOC, rADDR1 - lwzx rLWR2, rLOC, rADDR2 - cmpw cr1, rLWR1, rLWR2 - crorc 4*cr1+eq,eq,4*cr1+eq - beq cr1, L(done) - lbz rCHAR1, 3(rSTR1) - lbz rCHAR2, 3(rSTR2) - cmpdi rCHAR1, 0 - /* Increment both string descriptors */ - addi rSTR1, rSTR1, 4 - addi rSTR2, rSTR2, 4 - sldi rADDR1, rCHAR1, 2 - sldi rADDR2, rCHAR2, 2 - lwzx rLWR1, rLOC, rADDR1 - lwzx rLWR2, rLOC, rADDR2 - cmpw cr1, rLWR1, rLWR2 - crorc 4*cr1+eq,eq,4*cr1+eq - beq cr1, L(done) - lbz rCHAR1, 0(rSTR1) /* Load char from s1 */ - lbz rCHAR2, 0(rSTR2) /* Load char from s2 */ -#ifdef USE_AS_STRNCASECMP - bdnz L(loop) -#else - b L(loop) -#endif -#ifdef USE_AS_STRNCASECMP -L(lessthan4): - clrldi r5, r5, 62 - cmpdi cr7, r5, 0 - beq cr7, L(retnull) - mtctr r5 -L(loop1): - cmpdi rCHAR1, 0 - sldi rADDR1, rCHAR1, 2 - sldi rADDR2, rCHAR2, 2 - lwzx rLWR1, rLOC, rADDR1 - lwzx rLWR2, rLOC, rADDR2 - cmpw cr1, rLWR1, rLWR2 - crorc 4*cr1+eq,eq,4*cr1+eq - beq cr1, L(done) - addi rSTR1, rSTR1, 1 - addi rSTR2, rSTR2, 1 - lbz rCHAR1, 0(rSTR1) - lbz rCHAR2, 0(rSTR2) - bdnz L(loop1) -#endif -L(done): - subf r0, rLWR2, rLWR1 - extsw rRTN, r0 - blr -END (__STRCASECMP) - -weak_alias (__STRCASECMP, STRCASECMP) -libc_hidden_builtin_def (__STRCASECMP) diff --git a/sysdeps/powerpc/powerpc64/power8/strcasestr-ppc64.c b/sysdeps/powerpc/powerpc64/power8/strcasestr-ppc64.c deleted file mode 100644 index 0e746b7718..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strcasestr-ppc64.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Optimized strcasestr implementation for PowerPC64/POWER8. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define STRCASESTR __strcasestr_ppc -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(__name) - -#undef weak_alias -#define weak_alias(a,b) -extern __typeof (strcasestr) __strcasestr_ppc attribute_hidden; - -#include diff --git a/sysdeps/powerpc/powerpc64/power8/strcasestr.S b/sysdeps/powerpc/powerpc64/power8/strcasestr.S deleted file mode 100644 index 6ac6572f3b..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strcasestr.S +++ /dev/null @@ -1,538 +0,0 @@ -/* Optimized strcasestr implementation for PowerPC64/POWER8. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Char * [r3] strcasestr (char *s [r3], char * pat[r4]) */ - -/* The performance gain is obtained by comparing 16 bytes. */ - -/* When the first char of r4 is hit ITERATIONS times in r3 - fallback to default. */ -#define ITERATIONS 64 - -#ifndef STRCASESTR -# define STRCASESTR __strcasestr -#endif - -#ifndef STRLEN -/* For builds without IFUNC support, local calls should be made to internal - GLIBC symbol (created by libc_hidden_builtin_def). */ -# ifdef SHARED -# define STRLEN __GI_strlen -# else -# define STRLEN strlen -# endif -#endif - -#ifndef STRNLEN -/* For builds without IFUNC support, local calls should be made to internal - GLIBC symbol (created by libc_hidden_builtin_def). */ -# ifdef SHARED -# define STRNLEN __GI_strnlen -# else -# define STRNLEN __strnlen -# endif -#endif - -#ifndef STRCHR -# ifdef SHARED -# define STRCHR __GI_strchr -# else -# define STRCHR strchr -# endif -#endif - -/* Convert 16 bytes of v4 and reg to lowercase and compare. */ -#define TOLOWER(reg) \ - vcmpgtub v6, v4, v1; \ - vcmpgtub v7, v2, v4; \ - vand v8, v7, v6; \ - vand v8, v8, v3; \ - vor v4, v8, v4; \ - vcmpgtub v6, reg, v1; \ - vcmpgtub v7, v2, reg; \ - vand v8, v7, v6; \ - vand v8, v8, v3; \ - vor reg, v8, reg; \ - vcmpequb. v6, reg, v4; - -/* TODO: change these to the actual instructions when the minimum required - binutils allows it. */ -#ifdef _ARCH_PWR8 -#define VCLZD_V8_v7 vclzd v8, v7; -#else -#define VCLZD_V8_v7 .long 0x11003fc2 -#endif - -#define FRAMESIZE (FRAME_MIN_SIZE+48) -/* TODO: change this to .machine power8 when the minimum required binutils - allows it. */ - .machine power7 -EALIGN (STRCASESTR, 4, 0) - CALL_MCOUNT 2 - mflr r0 /* Load link register LR to r0. */ - std r31, -8(r1) /* Save callers register r31. */ - std r30, -16(r1) /* Save callers register r30. */ - std r29, -24(r1) /* Save callers register r29. */ - std r28, -32(r1) /* Save callers register r28. */ - std r27, -40(r1) /* Save callers register r27. */ - std r0, 16(r1) /* Store the link register. */ - cfi_offset(r31, -8) - cfi_offset(r30, -16) - cfi_offset(r29, -24) - cfi_offset(r28, -32) - cfi_offset(r27, -40) - cfi_offset(lr, 16) - stdu r1, -FRAMESIZE(r1) /* Create the stack frame. */ - cfi_adjust_cfa_offset(FRAMESIZE) - - dcbt 0, r3 - dcbt 0, r4 - cmpdi cr7, r3, 0 /* Input validation. */ - beq cr7, L(retnull) - cmpdi cr7, r4, 0 - beq cr7, L(retnull) - - mr r29, r3 - mr r30, r4 - /* Load first byte from r4 and check if its null. */ - lbz r6, 0(r4) - cmpdi cr7, r6, 0 - beq cr7, L(ret_r3) - - ld r10, __libc_tsd_LOCALE@got@tprel(r2) - add r9, r10, __libc_tsd_LOCALE@tls - ld r9, 0(r9) - ld r9, LOCALE_CTYPE_TOUPPER(r9) - sldi r10, r6, 2 /* Convert to upper case. */ - lwzx r28, r9, r10 - - ld r10, __libc_tsd_LOCALE@got@tprel(r2) - add r11, r10, __libc_tsd_LOCALE@tls - ld r11, 0(r11) - ld r11, LOCALE_CTYPE_TOLOWER(r11) - sldi r10, r6, 2 /* Convert to lower case. */ - lwzx r27, r11, r10 - - /* Check if the first char is present. */ - mr r4, r27 - bl STRCHR - nop - mr r5, r3 - mr r3, r29 - mr r29, r5 - mr r4, r28 - bl STRCHR - nop - cmpdi cr7, r29, 0 - beq cr7, L(firstpos) - cmpdi cr7, r3, 0 - beq cr7, L(skipcheck) - cmpw cr7, r3, r29 - ble cr7, L(firstpos) - /* Move r3 to the first occurence. */ -L(skipcheck): - mr r3, r29 -L(firstpos): - mr r29, r3 - - sldi r9, r27, 8 - or r28, r9, r28 - /* Reg r27 is used to count the number of iterations. */ - li r27, 0 - /* If first char of search str is not present. */ - cmpdi cr7, r3, 0 - ble cr7, L(end) - - /* Find the length of pattern. */ - mr r3, r30 - bl STRLEN - nop - - cmpdi cr7, r3, 0 /* If search str is null. */ - beq cr7, L(ret_r3) - - mr r31, r3 - mr r4, r3 - mr r3, r29 - bl STRNLEN - nop - - cmpd cr7, r3, r31 /* If len(r3) < len(r4). */ - blt cr7, L(retnull) - - mr r3, r29 - - /* Locales not matching ASCII for single bytes. */ - ld r10, __libc_tsd_LOCALE@got@tprel(r2) - add r9, r10, __libc_tsd_LOCALE@tls - ld r9, 0(r9) - ld r7, 0(r9) - addi r7, r7, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES - lwz r8, 0(r7) - cmpdi cr7, r8, 1 - beq cr7, L(bytebybyte) - - /* If len(r4) < 16 handle byte by byte. */ - /* For shorter strings we will not use vector registers. */ - cmpdi cr7, r31, 16 - blt cr7, L(bytebybyte) - - /* Comparison values used for TOLOWER. */ - /* Load v1 = 64('A' - 1), v2 = 91('Z' + 1), v3 = 32 in each byte. */ - vspltish v0, 0 - vspltisb v5, 2 - vspltisb v4, 4 - vsl v3, v5, v4 - vaddubm v1, v3, v3 - vspltisb v5, 15 - vaddubm v2, v5, v5 - vaddubm v2, v1, v2 - vspltisb v4, -3 - vaddubm v2, v2, v4 - - /* - 1. Load 16 bytes from r3 and r4 - 2. Check if there is null, If yes, proceed byte by byte path. - 3. Else,Convert both to lowercase and compare. - 4. If they are same proceed to 1. - 5. If they dont match, find if first char of r4 is present in the - loaded 16 byte of r3. - 6. If yes, move position, load next 16 bytes of r3 and proceed to 2. - */ - - mr r8, r3 /* Save r3 for future use. */ - mr r4, r30 /* Restore r4. */ - clrldi r10, r4, 60 - lvx v5, 0, r4 /* Load 16 bytes from r4. */ - cmpdi cr7, r10, 0 - beq cr7, L(begin2) - /* If r4 is unaligned, load another 16 bytes. */ -#ifdef __LITTLE_ENDIAN__ - lvsr v7, 0, r4 -#else - lvsl v7, 0, r4 -#endif - addi r5, r4, 16 - lvx v9, 0, r5 -#ifdef __LITTLE_ENDIAN__ - vperm v5, v9, v5, v7 -#else - vperm v5, v5, v9, v7 -#endif -L(begin2): - lvx v4, 0, r3 - vcmpequb. v7, v0, v4 /* Check for null. */ - beq cr6, L(nullchk6) - b L(trailcheck) - - .align 4 -L(nullchk6): - clrldi r10, r3, 60 - cmpdi cr7, r10, 0 - beq cr7, L(next16) -#ifdef __LITTLE_ENDIAN__ - lvsr v7, 0, r3 -#else - lvsl v7, 0, r3 -#endif - addi r5, r3, 16 - /* If r3 is unaligned, load another 16 bytes. */ - lvx v10, 0, r5 -#ifdef __LITTLE_ENDIAN__ - vperm v4, v10, v4, v7 -#else - vperm v4, v4, v10, v7 -#endif -L(next16): - vcmpequb. v6, v0, v5 /* Check for null. */ - beq cr6, L(nullchk) - b L(trailcheck) - - .align 4 -L(nullchk): - vcmpequb. v6, v0, v4 - beq cr6, L(nullchk1) - b L(retnull) - - .align 4 -L(nullchk1): - /* Convert both v3 and v4 to lower. */ - TOLOWER(v5) - /* If both are same, branch to match. */ - blt cr6, L(match) - /* Find if the first char is present in next 15 bytes. */ -#ifdef __LITTLE_ENDIAN__ - vspltb v6, v5, 15 - vsldoi v7, v0, v4, 15 -#else - vspltb v6, v5, 0 - vspltisb v7, 8 - vslo v7, v4, v7 -#endif - vcmpequb v7, v6, v7 - vcmpequb. v6, v0, v7 - /* Shift r3 by 16 bytes and proceed. */ - blt cr6, L(shift16) - VCLZD_V8_v7 -#ifdef __LITTLE_ENDIAN__ - vspltb v6, v8, 15 -#else - vspltb v6, v8, 7 -#endif - vcmpequb. v6, v6, v1 - /* Shift r3 by 8 bytes and proceed. */ - blt cr6, L(shift8) - b L(begin) - - .align 4 -L(match): - /* There is a match of 16 bytes, check next bytes. */ - cmpdi cr7, r31, 16 - mr r29, r3 - beq cr7, L(ret_r3) - -L(secondmatch): - addi r3, r3, 16 - addi r4, r4, 16 - /* Load next 16 bytes of r3 and r4 and compare. */ - clrldi r10, r4, 60 - cmpdi cr7, r10, 0 - beq cr7, L(nextload) - /* Handle unaligned case. */ - vor v6, v9, v9 - vcmpequb. v7, v0, v6 - beq cr6, L(nullchk2) - b L(trailcheck) - - .align 4 -L(nullchk2): -#ifdef __LITTLE_ENDIAN__ - lvsr v7, 0, r4 -#else - lvsl v7, 0, r4 -#endif - addi r5, r4, 16 - /* If r4 is unaligned, load another 16 bytes. */ - lvx v9, 0, r5 -#ifdef __LITTLE_ENDIAN__ - vperm v11, v9, v6, v7 -#else - vperm v11, v6, v9, v7 -#endif - b L(compare) - - .align 4 -L(nextload): - lvx v11, 0, r4 -L(compare): - vcmpequb. v7, v0, v11 - beq cr6, L(nullchk3) - b L(trailcheck) - - .align 4 -L(nullchk3): - clrldi r10, r3, 60 - cmpdi cr7, r10, 0 - beq cr7, L(nextload1) - /* Handle unaligned case. */ - vor v4, v10, v10 - vcmpequb. v7, v0, v4 - beq cr6, L(nullchk4) - b L(retnull) - - .align 4 -L(nullchk4): -#ifdef __LITTLE_ENDIAN__ - lvsr v7, 0, r3 -#else - lvsl v7, 0, r3 -#endif - addi r5, r3, 16 - /* If r3 is unaligned, load another 16 bytes. */ - lvx v10, 0, r5 -#ifdef __LITTLE_ENDIAN__ - vperm v4, v10, v4, v7 -#else - vperm v4, v4, v10, v7 -#endif - b L(compare1) - - .align 4 -L(nextload1): - lvx v4, 0, r3 -L(compare1): - vcmpequb. v7, v0, v4 - beq cr6, L(nullchk5) - b L(retnull) - - .align 4 -L(nullchk5): - /* Convert both v3 and v4 to lower. */ - TOLOWER(v11) - /* If both are same, branch to secondmatch. */ - blt cr6, L(secondmatch) - /* Continue the search. */ - b L(begin) - - .align 4 -L(trailcheck): - ld r10, __libc_tsd_LOCALE@got@tprel(r2) - add r11, r10, __libc_tsd_LOCALE@tls - ld r11, 0(r11) - ld r11, LOCALE_CTYPE_TOLOWER(r11) -L(loop2): - lbz r5, 0(r3) /* Load byte from r3. */ - lbz r6, 0(r4) /* Load next byte from r4. */ - cmpdi cr7, r6, 0 /* Is it null? */ - beq cr7, L(updater3) - cmpdi cr7, r5, 0 /* Is it null? */ - beq cr7, L(retnull) /* If yes, return. */ - addi r3, r3, 1 - addi r4, r4, 1 /* Increment r4. */ - sldi r10, r5, 2 /* Convert to lower case. */ - lwzx r10, r11, r10 - sldi r7, r6, 2 /* Convert to lower case. */ - lwzx r7, r11, r7 - cmpw cr7, r7, r10 /* Compare with byte from r4. */ - bne cr7, L(begin) - b L(loop2) - - .align 4 -L(shift8): - addi r8, r8, 7 - b L(begin) - .align 4 -L(shift16): - addi r8, r8, 15 - .align 4 -L(begin): - addi r8, r8, 1 - mr r3, r8 - /* When our iterations exceed ITERATIONS,fall back to default. */ - addi r27, r27, 1 - cmpdi cr7, r27, ITERATIONS - beq cr7, L(default) - mr r4, r30 /* Restore r4. */ - b L(begin2) - - /* Handling byte by byte. */ - .align 4 -L(loop1): - mr r3, r8 - addi r27, r27, 1 - cmpdi cr7, r27, ITERATIONS - beq cr7, L(default) - mr r29, r8 - srdi r4, r28, 8 - /* Check if the first char is present. */ - bl STRCHR - nop - mr r5, r3 - mr r3, r29 - mr r29, r5 - sldi r4, r28, 56 - srdi r4, r4, 56 - bl STRCHR - nop - cmpdi cr7, r29, 0 - beq cr7, L(nextpos) - cmpdi cr7, r3, 0 - beq cr7, L(skipcheck1) - cmpw cr7, r3, r29 - ble cr7, L(nextpos) - /* Move r3 to first occurence. */ -L(skipcheck1): - mr r3, r29 -L(nextpos): - mr r29, r3 - cmpdi cr7, r3, 0 - ble cr7, L(retnull) -L(bytebybyte): - ld r10, __libc_tsd_LOCALE@got@tprel(r2) - add r11, r10, __libc_tsd_LOCALE@tls - ld r11, 0(r11) - ld r11, LOCALE_CTYPE_TOLOWER(r11) - mr r4, r30 /* Restore r4. */ - mr r8, r3 /* Save r3. */ - addi r8, r8, 1 - -L(loop): - addi r3, r3, 1 - lbz r5, 0(r3) /* Load byte from r3. */ - addi r4, r4, 1 /* Increment r4. */ - lbz r6, 0(r4) /* Load next byte from r4. */ - cmpdi cr7, r6, 0 /* Is it null? */ - beq cr7, L(updater3) - cmpdi cr7, r5, 0 /* Is it null? */ - beq cr7, L(retnull) /* If yes, return. */ - sldi r10, r5, 2 /* Convert to lower case. */ - lwzx r10, r11, r10 - sldi r7, r6, 2 /* Convert to lower case. */ - lwzx r7, r11, r7 - cmpw cr7, r7, r10 /* Compare with byte from r4. */ - bne cr7, L(loop1) - b L(loop) - - /* Handling return values. */ - .align 4 -L(updater3): - subf r3, r31, r3 /* Reduce r31 (len of r4) from r3. */ - b L(end) - - .align 4 -L(ret_r3): - mr r3, r29 /* Return point of match. */ - b L(end) - - .align 4 -L(retnull): - li r3, 0 /* Substring was not found. */ - b L(end) - - .align 4 -L(default): - mr r4, r30 - bl __strcasestr_ppc - nop - - .align 4 -L(end): - addi r1, r1, FRAMESIZE /* Restore stack pointer. */ - cfi_adjust_cfa_offset(-FRAMESIZE) - ld r0, 16(r1) /* Restore the saved link register. */ - ld r27, -40(r1) - ld r28, -32(r1) - ld r29, -24(r1) /* Restore callers save register r29. */ - ld r30, -16(r1) /* Restore callers save register r30. */ - ld r31, -8(r1) /* Restore callers save register r31. */ - cfi_restore(lr) - cfi_restore(r27) - cfi_restore(r28) - cfi_restore(r29) - cfi_restore(r30) - cfi_restore(r31) - mtlr r0 /* Branch to link register. */ - blr -END (STRCASESTR) - -weak_alias (__strcasestr, strcasestr) -libc_hidden_def (__strcasestr) -libc_hidden_builtin_def (strcasestr) diff --git a/sysdeps/powerpc/powerpc64/power8/strchr.S b/sysdeps/powerpc/powerpc64/power8/strchr.S deleted file mode 100644 index e0c185c162..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strchr.S +++ /dev/null @@ -1,377 +0,0 @@ -/* Optimized strchr implementation for PowerPC64/POWER8. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef USE_AS_STRCHRNUL -# ifndef STRCHRNUL -# define FUNC_NAME __strchrnul -# else -# define FUNC_NAME STRCHRNUL -# endif -#else -# ifndef STRCHR -# define FUNC_NAME strchr -# else -# define FUNC_NAME STRCHR -# endif -#endif /* !USE_AS_STRCHRNUL */ - -/* int [r3] strchr (char *s [r3], int c [r4]) */ -/* TODO: change these to the actual instructions when the minimum required - binutils allows it. */ -#define MTVRD(v,r) .long (0x7c000167 | ((v)<<(32-11)) | ((r)<<(32-16))) -#define MFVRD(r,v) .long (0x7c000067 | ((v)<<(32-11)) | ((r)<<(32-16))) -#define VBPERMQ(t,a,b) .long (0x1000054c \ - | ((t)<<(32-11)) \ - | ((a)<<(32-16)) \ - | ((b)<<(32-21)) ) -/* TODO: change this to .machine power8 when the minimum required binutils - allows it. */ - .machine power7 -ENTRY (FUNC_NAME) - CALL_MCOUNT 2 - dcbt 0,r3 - clrrdi r8,r3,3 /* Align the address to doubleword boundary. */ - cmpdi cr7,r4,0 - ld r12,0(r8) /* Load doubleword from memory. */ - li r0,0 /* Doubleword with null chars to use - with cmpb. */ - - rlwinm r6,r3,3,26,28 /* Calculate padding. */ - - beq cr7,L(null_match) - - /* Replicate byte to doubleword. */ - insrdi r4,r4,8,48 - insrdi r4,r4,16,32 - insrdi r4,r4,32,0 - - /* Now r4 has a doubleword of c bytes and r0 has - a doubleword of null bytes. */ - - cmpb r10,r12,r4 /* Compare each byte against c byte. */ - cmpb r11,r12,r0 /* Compare each byte against null byte. */ - - /* Move the doublewords left and right to discard the bits that are - not part of the string and bring them back as zeros. */ -#ifdef __LITTLE_ENDIAN__ - srd r10,r10,r6 - srd r11,r11,r6 - sld r10,r10,r6 - sld r11,r11,r6 -#else - sld r10,r10,r6 - sld r11,r11,r6 - srd r10,r10,r6 - srd r11,r11,r6 -#endif - or r5,r10,r11 /* OR the results to speed things up. */ - cmpdi cr7,r5,0 /* If r5 == 0, no c or null bytes - have been found. */ - bne cr7,L(done) - - mtcrf 0x01,r8 - - /* Are we now aligned to a doubleword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 28,L(loop) - - /* Handle WORD2 of pair. */ - ldu r12,8(r8) - cmpb r10,r12,r4 - cmpb r11,r12,r0 - or r5,r10,r11 - cmpdi cr7,r5,0 - bne cr7,L(done) - b L(loop) /* We branch here (rather than falling through) - to skip the nops due to heavy alignment - of the loop below. */ - - .p2align 5 -L(loop): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - ld r12,8(r8) - ldu r9,16(r8) - cmpb r10,r12,r4 - cmpb r11,r12,r0 - cmpb r6,r9,r4 - cmpb r7,r9,r0 - or r5,r10,r11 - or r9,r6,r7 - or r12,r5,r9 - cmpdi cr7,r12,0 - beq cr7,L(vector) - /* OK, one (or both) of the doublewords contains a c/null byte. Check - the first doubleword and decrement the address in case the first - doubleword really contains a c/null byte. */ - - cmpdi cr6,r5,0 - addi r8,r8,-8 - bne cr6,L(done) - - /* The c/null byte must be in the second doubleword. Adjust the - address again and move the result of cmpb to r10 so we can calculate - the pointer. */ - - mr r10,r6 - mr r11,r7 - addi r8,r8,8 -#ifdef USE_AS_STRCHRNUL - mr r5, r9 -#endif - /* r10/r11 have the output of the cmpb instructions, that is, - 0xff in the same position as the c/null byte in the original - doubleword from the string. Use that to calculate the pointer. */ -L(done): -#ifdef USE_AS_STRCHRNUL - mr r10, r5 -#endif -#ifdef __LITTLE_ENDIAN__ - addi r3,r10,-1 - andc r3,r3,r10 - popcntd r0,r3 -# ifndef USE_AS_STRCHRNUL - addi r4,r11,-1 - andc r4,r4,r11 - cmpld cr7,r3,r4 - bgt cr7,L(no_match) -# endif -#else - cntlzd r0,r10 /* Count leading zeros before c matches. */ -# ifndef USE_AS_STRCHRNUL - cmpld cr7,r11,r10 - bgt cr7,L(no_match) -# endif -#endif - srdi r0,r0,3 /* Convert leading zeros to bytes. */ - add r3,r8,r0 /* Return address of the matching c byte - or null in case c was not found. */ - blr - - /* Check the first 32B in GPR's and move to vectorized loop. */ - .p2align 5 -L(vector): - addi r3, r8, 8 - andi. r10, r3, 31 - bne cr0, L(loop) - vspltisb v0, 0 - /* Precompute vbpermq constant. */ - vspltisb v10, 3 - lvsl v11, r0, r0 - vslb v10, v11, v10 - MTVRD(v1,r4) - li r5, 16 - vspltb v1, v1, 7 - /* Compare 32 bytes in each loop. */ -L(continue): - lvx v4, 0, r3 - lvx v5, r3, r5 - vcmpequb v2, v0, v4 - vcmpequb v3, v0, v5 - vcmpequb v6, v1, v4 - vcmpequb v7, v1, v5 - vor v8, v2, v3 - vor v9, v6, v7 - vor v11, v8, v9 - vcmpequb. v11, v0, v11 - addi r3, r3, 32 - blt cr6, L(continue) - /* One (or both) of the quadwords contains a c/null byte. */ - addi r3, r3, -32 -#ifndef USE_AS_STRCHRNUL - vcmpequb. v11, v0, v9 - blt cr6, L(no_match) -#endif - /* Permute the first bit of each byte into bits 48-63. */ - VBPERMQ(v2, v2, v10) - VBPERMQ(v3, v3, v10) - VBPERMQ(v6, v6, v10) - VBPERMQ(v7, v7, v10) - /* Shift each component into its correct position for merging. */ -#ifdef __LITTLE_ENDIAN__ - vsldoi v3, v3, v3, 2 - vsldoi v7, v7, v7, 2 -#else - vsldoi v2, v2, v2, 6 - vsldoi v3, v3, v3, 4 - vsldoi v6, v6, v6, 6 - vsldoi v7, v7, v7, 4 -#endif - - /* Merge the results and move to a GPR. */ - vor v1, v3, v2 - vor v2, v6, v7 - vor v4, v1, v2 - MFVRD(r5, v4) -#ifdef __LITTLE_ENDIAN__ - addi r6, r5, -1 - andc r6, r6, r5 - popcntd r6, r6 -#else - cntlzd r6, r5 /* Count leading zeros before the match. */ -#endif - add r3, r3, r6 /* Compute final length. */ - /* Return NULL if null found before c. */ -#ifndef USE_AS_STRCHRNUL - lbz r4, 0(r3) - cmpdi cr7, r4, 0 - beq cr7, L(no_match) -#endif - blr - -#ifndef USE_AS_STRCHRNUL - .align 4 -L(no_match): - li r3,0 - blr -#endif - -/* We are here because strchr was called with a null byte. */ - .align 4 -L(null_match): - /* r0 has a doubleword of null bytes. */ - - cmpb r5,r12,r0 /* Compare each byte against null bytes. */ - - /* Move the doublewords left and right to discard the bits that are - not part of the string and bring them back as zeros. */ -#ifdef __LITTLE_ENDIAN__ - srd r5,r5,r6 - sld r5,r5,r6 -#else - sld r5,r5,r6 - srd r5,r5,r6 -#endif - cmpdi cr7,r5,0 /* If r10 == 0, no c or null bytes - have been found. */ - bne cr7,L(done_null) - - mtcrf 0x01,r8 - - /* Are we now aligned to a quadword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bt 28,L(loop_null) - - /* Handle WORD2 of pair. */ - ldu r12,8(r8) - cmpb r5,r12,r0 - cmpdi cr7,r5,0 - bne cr7,L(done_null) - b L(loop_null) /* We branch here (rather than falling through) - to skip the nops due to heavy alignment - of the loop below. */ - - /* Main loop to look for the end of the string. Since it's a - small loop (< 8 instructions), align it to 32-bytes. */ - .p2align 5 -L(loop_null): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - ld r12,8(r8) - ldu r11,16(r8) - cmpb r5,r12,r0 - cmpb r10,r11,r0 - or r6,r5,r10 - cmpdi cr7,r6,0 - beq cr7,L(vector1) - - /* OK, one (or both) of the doublewords contains a null byte. Check - the first doubleword and decrement the address in case the first - doubleword really contains a null byte. */ - - cmpdi cr6,r5,0 - addi r8,r8,-8 - bne cr6,L(done_null) - - /* The null byte must be in the second doubleword. Adjust the address - again and move the result of cmpb to r10 so we can calculate the - pointer. */ - - mr r5,r10 - addi r8,r8,8 - - /* r5 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as the null byte in the original - doubleword from the string. Use that to calculate the pointer. */ -L(done_null): -#ifdef __LITTLE_ENDIAN__ - addi r0,r5,-1 - andc r0,r0,r5 - popcntd r0,r0 -#else - cntlzd r0,r5 /* Count leading zeros before the match. */ -#endif - srdi r0,r0,3 /* Convert leading zeros to bytes. */ - add r3,r8,r0 /* Return address of the matching null byte. */ - blr - .p2align 5 -L(vector1): - addi r3, r8, 8 - andi. r10, r3, 31 - bne cr0, L(loop_null) - vspltisb v8, -1 - vspltisb v0, 0 - vspltisb v10, 3 - lvsl v11, r0, r0 - vslb v10, v11, v10 - li r5, 16 -L(continue1): - lvx v4, 0, r3 - lvx v5, r3, r5 - vcmpequb v2, v0, v4 - vcmpequb v3, v0, v5 - vor v8, v2, v3 - vcmpequb. v11, v0, v8 - addi r3, r3, 32 - blt cr6, L(continue1) - addi r3, r3, -32 -L(end1): - VBPERMQ(v2, v2, v10) - VBPERMQ(v3, v3, v10) - /* Shift each component into its correct position for merging. */ -#ifdef __LITTLE_ENDIAN__ - vsldoi v3, v3, v3, 2 -#else - vsldoi v2, v2, v2, 6 - vsldoi v3, v3, v3, 4 -#endif - - /* Merge the results and move to a GPR. */ - vor v4, v3, v2 - MFVRD(r5, v4) -#ifdef __LITTLE_ENDIAN__ - addi r6, r5, -1 - andc r6, r6, r5 - popcntd r6, r6 -#else - cntlzd r6, r5 /* Count leading zeros before the match. */ -#endif - add r3, r3, r6 /* Compute final length. */ - blr -END (FUNC_NAME) - -#ifndef USE_AS_STRCHRNUL -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) -#endif diff --git a/sysdeps/powerpc/powerpc64/power8/strchrnul.S b/sysdeps/powerpc/powerpc64/power8/strchrnul.S deleted file mode 100644 index 3bf4b275dd..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strchrnul.S +++ /dev/null @@ -1,23 +0,0 @@ -/* Optimized strchrnul implementation for PowerPC64/POWER8. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define USE_AS_STRCHRNUL 1 -#include - -weak_alias (__strchrnul,strchrnul) -libc_hidden_builtin_def (__strchrnul) diff --git a/sysdeps/powerpc/powerpc64/power8/strcmp.S b/sysdeps/powerpc/powerpc64/power8/strcmp.S deleted file mode 100644 index 770484f1e1..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strcmp.S +++ /dev/null @@ -1,247 +0,0 @@ -/* Optimized strcmp implementation for PowerPC64/POWER8. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef STRCMP -# define STRCMP strcmp -#endif - -/* Implements the function - - size_t [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) - - The implementation uses unaligned doubleword access to avoid specialized - code paths depending of data alignment. Although recent powerpc64 uses - 64K as default, the page cross handling assumes minimum page size of - 4k. */ - -EALIGN (STRCMP, 4, 0) - li r0,0 - - /* Check if [s1]+16 or [s2]+16 will cross a 4K page boundary using - the code: - - (((size_t) s1) % PAGE_SIZE > (PAGE_SIZE - ITER_SIZE)) - - with PAGE_SIZE being 4096 and ITER_SIZE begin 16. */ - - rldicl r7,r3,0,52 - rldicl r9,r4,0,52 - cmpldi cr7,r7,4096-16 - bgt cr7,L(pagecross_check) - cmpldi cr5,r9,4096-16 - bgt cr5,L(pagecross_check) - - /* For short string up to 16 bytes, load both s1 and s2 using - unaligned dwords and compare. */ - ld r8,0(r3) - ld r10,0(r4) - cmpb r12,r8,r0 - cmpb r11,r8,r10 - orc. r9,r12,r11 - bne cr0,L(different_nocmpb) - - ld r8,8(r3) - ld r10,8(r4) - cmpb r12,r8,r0 - cmpb r11,r8,r10 - orc. r9,r12,r11 - bne cr0,L(different_nocmpb) - - addi r7,r3,16 - addi r4,r4,16 - -L(align_8b): - /* Now it has checked for first 16 bytes, align source1 to doubleword - and adjust source2 address. */ - rldicl r9,r7,0,61 /* source1 alignment to doubleword */ - subf r4,r9,r4 /* Adjust source2 address based on source1 - alignment. */ - rldicr r7,r7,0,60 /* Align source1 to doubleword. */ - - /* At this point, source1 alignment is 0 and source2 alignment is - between 0 and 7. Check is source2 alignment is 0, meaning both - sources have the same alignment. */ - andi. r9,r4,0x7 - bne cr0,L(loop_diff_align) - - /* If both source1 and source2 are doubleword aligned, there is no - need for page boundary cross checks. */ - - ld r8,0(r7) - ld r10,0(r4) - cmpb r12,r8,r0 - cmpb r11,r8,r10 - orc. r9,r12,r11 - bne cr0,L(different_nocmpb) - - .align 4 -L(loop_equal_align): - ld r8,8(r7) - ld r10,8(r4) - cmpb r12,r8,r0 - cmpb r11,r8,r10 - orc. r9,r12,r11 - bne cr0,L(different_nocmpb) - - ld r8,16(r7) - ld r10,16(r4) - cmpb r12,r8,r0 - cmpb r11,r8,r10 - orc. r9,r12,r11 - bne cr0,L(different_nocmpb) - - ldu r8,24(r7) - ldu r10,24(r4) - cmpb r12,r8,r0 - cmpb r11,r8,r10 - orc. r9,r12,r11 - bne cr0,L(different_nocmpb) - - b L(loop_equal_align) - - /* A zero byte was found in r8 (s1 dword), r9 contains the cmpb - result and r10 the dword from s2. To code isolate the byte - up to end (including the '\0'), masking with 0xFF the remaining - ones: - - #if __LITTLE_ENDIAN__ - (__builtin_ffsl (x) - 1) = counting trailing zero bits - r9 = (__builtin_ffsl (r9) - 1) + 8; - r9 = -1UL << r9 - #else - r9 = __builtin_clzl (r9) + 8; - r9 = -1UL >> r9 - #endif - r8 = r8 | r9 - r10 = r10 | r9 */ - -#ifdef __LITTLE_ENDIAN__ - nor r9,r9,r9 -L(different_nocmpb): - neg r3,r9 - and r9,r9,r3 - cntlzd r9,r9 - subfic r9,r9,63 -#else - not r9,r9 -L(different_nocmpb): - cntlzd r9,r9 - subfic r9,r9,56 -#endif - srd r3,r8,r9 - srd r10,r10,r9 - rldicl r10,r10,0,56 - rldicl r3,r3,0,56 - subf r3,r10,r3 - extsw r3,r3 - blr - - .align 4 -L(pagecross_check): - subfic r9,r9,4096 - subfic r7,r7,4096 - cmpld cr7,r7,r9 - bge cr7,L(pagecross) - mr r7,r9 - - /* If unaligned 16 bytes reads across a 4K page boundary, it uses - a simple byte a byte comparison until the page alignment for s1 - is reached. */ -L(pagecross): - add r7,r3,r7 - subf r9,r3,r7 - mtctr r9 - - .align 4 -L(pagecross_loop): - /* Loads a byte from s1 and s2, compare if *s1 is equal to *s2 - and if *s1 is '\0'. */ - lbz r9,0(r3) - lbz r10,0(r4) - addi r3,r3,1 - addi r4,r4,1 - cmplw cr7,r9,r10 - cmpdi cr5,r9,r0 - bne cr7,L(pagecross_ne) - beq cr5,L(pagecross_nullfound) - bdnz L(pagecross_loop) - b L(align_8b) - - .align 4 - /* The unaligned read of source2 will cross a 4K page boundary, - and the different byte or NULL maybe be in the remaining page - bytes. Since it can not use the unaligned load, the algorithm - reads and compares 8 bytes to keep source1 doubleword aligned. */ -L(check_source2_byte): - li r9,8 - mtctr r9 - - .align 4 -L(check_source2_byte_loop): - lbz r9,0(r7) - lbz r10,0(r4) - addi r7,r7,1 - addi r4,r4,1 - cmplw cr7,r9,10 - cmpdi r5,r9,0 - bne cr7,L(pagecross_ne) - beq cr5,L(pagecross_nullfound) - bdnz L(check_source2_byte_loop) - - /* If source2 is unaligned to doubleword, the code needs to check - on each interation if the unaligned doubleword access will cross - a 4k page boundary. */ - .align 5 -L(loop_unaligned): - ld r8,0(r7) - ld r10,0(r4) - cmpb r12,r8,r0 - cmpb r11,r8,r10 - orc. r9,r12,r11 - bne cr0,L(different_nocmpb) - addi r7,r7,8 - addi r4,r4,8 - -L(loop_diff_align): - /* Check if [src2]+8 cross a 4k page boundary: - - srcin2 % PAGE_SIZE > (PAGE_SIZE - 8) - - with PAGE_SIZE being 4096. */ - rldicl r9,r4,0,52 - cmpldi cr7,r9,4088 - ble cr7,L(loop_unaligned) - b L(check_source2_byte) - - .align 4 -L(pagecross_ne): - extsw r3,r9 - mr r9,r10 -L(pagecross_retdiff): - subf r9,r9,r3 - extsw r3,r9 - blr - - .align 4 -L(pagecross_nullfound): - li r3,0 - b L(pagecross_retdiff) -END (STRCMP) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/powerpc/powerpc64/power8/strcpy.S b/sysdeps/powerpc/powerpc64/power8/strcpy.S deleted file mode 100644 index 7f2cee4b1b..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strcpy.S +++ /dev/null @@ -1,270 +0,0 @@ -/* Optimized strcpy/stpcpy implementation for PowerPC64/POWER8. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef USE_AS_STPCPY -# ifndef STPCPY -# define FUNC_NAME __stpcpy -# else -# define FUNC_NAME STPCPY -# endif -#else -# ifndef STRCPY -# define FUNC_NAME strcpy -# else -# define FUNC_NAME STRCPY -# endif -#endif /* !USE_AS_STPCPY */ - -/* Implements the function - - char * [r3] strcpy (char *dest [r3], const char *src [r4]) - - or - - char * [r3] stpcpy (char *dest [r3], const char *src [r4]) - - if USE_AS_STPCPY is defined. - - The implementation uses unaligned doubleword access to avoid specialized - code paths depending of data alignment. Although recent powerpc64 uses - 64K as default, the page cross handling assumes minimum page size of - 4k. */ - - .machine power7 -EALIGN (FUNC_NAME, 4, 0) - li r0,0 /* Doubleword with null chars to use - with cmpb. */ - - /* Check if the [src]+15 will cross a 4K page by checking if the bit - indicating the page size changes. Basically: - - uint64_t srcin = (uint64_t)src; - uint64_t ob = srcin & 4096UL; - uint64_t nb = (srcin+15UL) & 4096UL; - if (ob ^ nb) - goto pagecross; */ - - addi r9,r4,15 - xor r9,r9,r4 - rlwinm. r9,r9,0,19,19 - bne L(pagecross) - - /* For short string (less than 16 bytes), just calculate its size as - strlen and issues a memcpy if null is found. */ - mr r7,r4 - ld r12,0(r7) /* Load doubleword from memory. */ - cmpb r10,r12,r0 /* Check for null bytes in DWORD1. */ - cmpdi cr7,r10,0 /* If r10 == 0, no null's have been found. */ - bne cr7,L(done) - - ldu r8,8(r7) - cmpb r10,r8,r0 - cmpdi cr7,r10,0 - bne cr7,L(done) - - b L(loop_before) - - .align 4 -L(pagecross): - clrrdi r7,r4,3 /* Align the address to doubleword boundary. */ - rlwinm r6,r4,3,26,28 /* Calculate padding. */ - li r5,-1 /* MASK = 0xffffffffffffffff. */ - ld r12,0(r7) /* Load doubleword from memory. */ -#ifdef __LITTLE_ENDIAN__ - sld r5,r5,r6 -#else - srd r5,r5,r6 /* MASK = MASK >> padding. */ -#endif - orc r9,r12,r5 /* Mask bits that are not part of the string. */ - cmpb r10,r9,r0 /* Check for null bytes in DWORD1. */ - cmpdi cr7,r10,0 /* If r10 == 0, no null's have been found. */ - bne cr7,L(done) - - ldu r6,8(r7) - cmpb r10,r6,r0 - cmpdi cr7,r10,0 - bne cr7,L(done) - - ld r12,0(r7) - cmpb r10,r12,r0 - cmpdi cr7,r10,0 - bne cr7,L(done) - - ldu r6,8(r7) - cmpb r10,r6,r0 - cmpdi cr7,r10,0 - bne cr7,L(done) - - /* We checked for 24 - x bytes, with x being the source alignment - (0 <= x <= 16), and no zero has been found. Start the loop - copy with doubleword aligned address. */ - mr r7,r4 - ld r12, 0(r7) - ldu r8, 8(r7) - -L(loop_before): - /* Save the two doublewords readed from source and align the source - to 16 bytes for the loop. */ - mr r11,r3 - std r12,0(r11) - std r8,8(r11) - addi r11,r11,16 - rldicl r9,r4,0,60 - subf r7,r9,r7 - subf r11,r9,r11 - b L(loop_start) - - .align 5 -L(loop): - std r12, 0(r11) - std r6, 8(r11) - addi r11,r11,16 -L(loop_start): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - - ld r12, 8(r7) - ldu r6, 16(r7) - cmpb r10,r12,r0 - cmpb r9,r6,r0 - or r8,r9,r10 /* Merge everything in one doubleword. */ - cmpdi cr7,r8,0 - beq cr7,L(loop) - - - /* OK, one (or both) of the doublewords contains a null byte. Check - the first doubleword and decrement the address in case the first - doubleword really contains a null byte. */ - - addi r4,r7,-8 - cmpdi cr6,r10,0 - addi r7,r7,-8 - bne cr6,L(done2) - - /* The null byte must be in the second doubleword. Adjust the address - again and move the result of cmpb to r10 so we can calculate the - length. */ - - mr r10,r9 - addi r7,r7,8 - b L(done2) - - /* r10 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as the null byte in the original - doubleword from the string. Use that to calculate the length. */ -L(done): - mr r11,r3 -L(done2): -#ifdef __LITTLE_ENDIAN__ - addi r9, r10, -1 /* Form a mask from trailing zeros. */ - andc r9, r9, r10 - popcntd r6, r9 /* Count the bits in the mask. */ -#else - cntlzd r6,r10 /* Count leading zeros before the match. */ -#endif - subf r5,r4,r7 - srdi r6,r6,3 /* Convert leading/trailing zeros to bytes. */ - add r8,r5,r6 /* Compute final length. */ -#ifdef USE_AS_STPCPY - /* stpcpy returns the dest address plus the size not counting the - final '\0'. */ - add r3,r11,r8 -#endif - addi r8,r8,1 /* Final '/0'. */ - - cmpldi cr6,r8,8 - mtocrf 0x01,r8 - ble cr6,L(copy_LE_8) - - cmpldi cr1,r8,16 - blt cr1,8f - - /* Handle copies of 0~31 bytes. */ - .align 4 -L(copy_LT_32): - /* At least 6 bytes to go. */ - blt cr1,8f - - /* Copy 16 bytes. */ - ld r6,0(r4) - ld r8,8(r4) - addi r4,r4,16 - std r6,0(r11) - std r8,8(r11) - addi r11,r11,16 -8: /* Copy 8 bytes. */ - bf 28,L(tail4) - ld r6,0(r4) - addi r4,r4,8 - std r6,0(r11) - addi r11,r11,8 - - .align 4 -/* Copies 4~7 bytes. */ -L(tail4): - bf 29,L(tail2) - lwz r6,0(r4) - stw r6,0(r11) - bf 30,L(tail5) - lhz r7,4(r4) - sth r7,4(r11) - bflr 31 - lbz r8,6(r4) - stb r8,6(r11) - blr - - .align 4 -/* Copies 2~3 bytes. */ -L(tail2): - bf 30,1f - lhz r6,0(r4) - sth r6,0(r11) - bflr 31 - lbz r7,2(r4) - stb r7,2(r11) - blr - - .align 4 -L(tail5): - bf 31,1f - lbz r6,4(r4) - stb r6,4(r11) - blr - - .align 4 -1: - bflr 31 - lbz r6,0(r4) - stb r6,0(r11) - blr - -/* Handles copies of 0~8 bytes. */ - .align 4 -L(copy_LE_8): - bne cr6,L(tail4) - ld r6,0(r4) - std r6,0(r11) - blr -END (FUNC_NAME) - -#ifndef USE_AS_STPCPY -libc_hidden_builtin_def (strcpy) -#endif diff --git a/sysdeps/powerpc/powerpc64/power8/strcspn.S b/sysdeps/powerpc/powerpc64/power8/strcspn.S deleted file mode 100644 index c9a7a2e3c3..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strcspn.S +++ /dev/null @@ -1,20 +0,0 @@ -/* Optimized strcspn implementation for PowerPC64/POWER8. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define USE_AS_STRCSPN 1 -#include diff --git a/sysdeps/powerpc/powerpc64/power8/strlen.S b/sysdeps/powerpc/powerpc64/power8/strlen.S deleted file mode 100644 index 8f4a1fc1dc..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strlen.S +++ /dev/null @@ -1,301 +0,0 @@ -/* Optimized strlen implementation for PowerPC64/POWER8 using a vectorized - loop. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* TODO: change these to the actual instructions when the minimum required - binutils allows it. */ -#define MFVRD(r,v) .long (0x7c000067 | ((v)<<(32-11)) | ((r)<<(32-16))) -#define VBPERMQ(t,a,b) .long (0x1000054c \ - | ((t)<<(32-11)) \ - | ((a)<<(32-16)) \ - | ((b)<<(32-21)) ) - -/* int [r3] strlen (char *s [r3]) */ - -#ifndef STRLEN -# define STRLEN strlen -#endif - -/* TODO: change this to .machine power8 when the minimum required binutils - allows it. */ - .machine power7 -EALIGN (STRLEN, 4, 0) - CALL_MCOUNT 1 - dcbt 0,r3 - clrrdi r4,r3,3 /* Align the address to doubleword boundary. */ - rlwinm r6,r3,3,26,28 /* Calculate padding. */ - li r0,0 /* Doubleword with null chars to use - with cmpb. */ - li r5,-1 /* MASK = 0xffffffffffffffff. */ - ld r12,0(r4) /* Load doubleword from memory. */ -#ifdef __LITTLE_ENDIAN__ - sld r5,r5,r6 -#else - srd r5,r5,r6 /* MASK = MASK >> padding. */ -#endif - orc r9,r12,r5 /* Mask bits that are not part of the string. */ - cmpb r10,r9,r0 /* Check for null bytes in DWORD1. */ - cmpdi cr7,r10,0 /* If r10 == 0, no null's have been found. */ - bne cr7,L(done) - - /* For shorter strings (< 64 bytes), we will not use vector registers, - as the overhead isn't worth it. So, let's use GPRs instead. This - will be done the same way as we do in the POWER7 implementation. - Let's see if we are aligned to a quadword boundary. If so, we can - jump to the first (non-vectorized) loop. Otherwise, we have to - handle the next DWORD first. */ - mtcrf 0x01,r4 - mr r9,r4 - addi r9,r9,8 - bt 28,L(align64) - - /* Handle the next 8 bytes so we are aligned to a quadword - boundary. */ - ldu r5,8(r4) - cmpb r10,r5,r0 - cmpdi cr7,r10,0 - addi r9,r9,8 - bne cr7,L(done) - -L(align64): - /* Proceed to the old (POWER7) implementation, checking two doublewords - per iteraction. For the first 56 bytes, we will just check for null - characters. After that, we will also check if we are 64-byte aligned - so we can jump to the vectorized implementation. We will unroll - these loops to avoid excessive branching. */ - ld r6,8(r4) - ldu r5,16(r4) - cmpb r10,r6,r0 - cmpb r11,r5,r0 - or r5,r10,r11 - cmpdi cr7,r5,0 - addi r9,r9,16 - bne cr7,L(dword_zero) - - ld r6,8(r4) - ldu r5,16(r4) - cmpb r10,r6,r0 - cmpb r11,r5,r0 - or r5,r10,r11 - cmpdi cr7,r5,0 - addi r9,r9,16 - bne cr7,L(dword_zero) - - ld r6,8(r4) - ldu r5,16(r4) - cmpb r10,r6,r0 - cmpb r11,r5,r0 - or r5,r10,r11 - cmpdi cr7,r5,0 - addi r9,r9,16 - bne cr7,L(dword_zero) - - /* Are we 64-byte aligned? If so, jump to the vectorized loop. - Note: aligning to 64-byte will necessarily slow down performance for - strings around 64 bytes in length due to the extra comparisons - required to check alignment for the vectorized loop. This is a - necessary tradeoff we are willing to take in order to speed up the - calculation for larger strings. */ - andi. r10,r9,63 - beq cr0,L(preloop) - ld r6,8(r4) - ldu r5,16(r4) - cmpb r10,r6,r0 - cmpb r11,r5,r0 - or r5,r10,r11 - cmpdi cr7,r5,0 - addi r9,r9,16 - bne cr7,L(dword_zero) - - andi. r10,r9,63 - beq cr0,L(preloop) - ld r6,8(r4) - ldu r5,16(r4) - cmpb r10,r6,r0 - cmpb r11,r5,r0 - or r5,r10,r11 - cmpdi cr7,r5,0 - addi r9,r9,16 - bne cr7,L(dword_zero) - - andi. r10,r9,63 - beq cr0,L(preloop) - ld r6,8(r4) - ldu r5,16(r4) - cmpb r10,r6,r0 - cmpb r11,r5,r0 - or r5,r10,r11 - cmpdi cr7,r5,0 - addi r9,r9,16 - bne cr7,L(dword_zero) - - andi. r10,r9,63 - beq cr0,L(preloop) - ld r6,8(r4) - ldu r5,16(r4) - cmpb r10,r6,r0 - cmpb r11,r5,r0 - or r5,r10,r11 - cmpdi cr7,r5,0 - addi r9,r9,16 - - /* At this point, we are necessarily 64-byte aligned. If no zeroes were - found, jump to the vectorized loop. */ - beq cr7,L(preloop) - -L(dword_zero): - /* OK, one (or both) of the doublewords contains a null byte. Check - the first doubleword and decrement the address in case the first - doubleword really contains a null byte. */ - - cmpdi cr6,r10,0 - addi r4,r4,-8 - bne cr6,L(done) - - /* The null byte must be in the second doubleword. Adjust the address - again and move the result of cmpb to r10 so we can calculate the - length. */ - - mr r10,r11 - addi r4,r4,8 - - /* If the null byte was found in the non-vectorized code, compute the - final length. r10 has the output of the cmpb instruction, that is, - it contains 0xff in the same position as the null byte in the - original doubleword from the string. Use that to calculate the - length. */ -L(done): -#ifdef __LITTLE_ENDIAN__ - addi r9, r10,-1 /* Form a mask from trailing zeros. */ - andc r9, r9,r10 - popcntd r0, r9 /* Count the bits in the mask. */ -#else - cntlzd r0,r10 /* Count leading zeros before the match. */ -#endif - subf r5,r3,r4 - srdi r0,r0,3 /* Convert leading/trailing zeros to bytes. */ - add r3,r5,r0 /* Compute final length. */ - blr - - /* Vectorized implementation starts here. */ - .p2align 4 -L(preloop): - /* Set up for the loop. */ - mr r4,r9 - li r7, 16 /* Load required offsets. */ - li r8, 32 - li r9, 48 - li r12, 8 - vxor v0,v0,v0 /* VR with null chars to use with - vcmpequb. */ - - /* Main loop to look for the end of the string. We will read in - 64-byte chunks. Align it to 32 bytes and unroll it 3 times to - leverage the icache performance. */ - .p2align 5 -L(loop): - lvx v1,r4,r0 /* Load 4 quadwords. */ - lvx v2,r4,r7 - lvx v3,r4,r8 - lvx v4,r4,r9 - vminub v5,v1,v2 /* Compare and merge into one VR for speed. */ - vminub v6,v3,v4 - vminub v7,v5,v6 - vcmpequb. v7,v7,v0 /* Check for NULLs. */ - addi r4,r4,64 /* Adjust address for the next iteration. */ - bne cr6,L(vmx_zero) - - lvx v1,r4,r0 /* Load 4 quadwords. */ - lvx v2,r4,r7 - lvx v3,r4,r8 - lvx v4,r4,r9 - vminub v5,v1,v2 /* Compare and merge into one VR for speed. */ - vminub v6,v3,v4 - vminub v7,v5,v6 - vcmpequb. v7,v7,v0 /* Check for NULLs. */ - addi r4,r4,64 /* Adjust address for the next iteration. */ - bne cr6,L(vmx_zero) - - lvx v1,r4,r0 /* Load 4 quadwords. */ - lvx v2,r4,r7 - lvx v3,r4,r8 - lvx v4,r4,r9 - vminub v5,v1,v2 /* Compare and merge into one VR for speed. */ - vminub v6,v3,v4 - vminub v7,v5,v6 - vcmpequb. v7,v7,v0 /* Check for NULLs. */ - addi r4,r4,64 /* Adjust address for the next iteration. */ - beq cr6,L(loop) - -L(vmx_zero): - /* OK, we found a null byte. Let's look for it in the current 64-byte - block and mark it in its corresponding VR. */ - vcmpequb v1,v1,v0 - vcmpequb v2,v2,v0 - vcmpequb v3,v3,v0 - vcmpequb v4,v4,v0 - - /* We will now 'compress' the result into a single doubleword, so it - can be moved to a GPR for the final calculation. First, we - generate an appropriate mask for vbpermq, so we can permute bits into - the first halfword. */ - vspltisb v10,3 - lvsl v11,r0,r0 - vslb v10,v11,v10 - - /* Permute the first bit of each byte into bits 48-63. */ - VBPERMQ(v1,v1,v10) - VBPERMQ(v2,v2,v10) - VBPERMQ(v3,v3,v10) - VBPERMQ(v4,v4,v10) - - /* Shift each component into its correct position for merging. */ -#ifdef __LITTLE_ENDIAN__ - vsldoi v2,v2,v2,2 - vsldoi v3,v3,v3,4 - vsldoi v4,v4,v4,6 -#else - vsldoi v1,v1,v1,6 - vsldoi v2,v2,v2,4 - vsldoi v3,v3,v3,2 -#endif - - /* Merge the results and move to a GPR. */ - vor v1,v2,v1 - vor v2,v3,v4 - vor v4,v1,v2 - MFVRD(r10,v4) - - /* Adjust address to the begninning of the current 64-byte block. */ - addi r4,r4,-64 - -#ifdef __LITTLE_ENDIAN__ - addi r9, r10,-1 /* Form a mask from trailing zeros. */ - andc r9, r9,r10 - popcntd r0, r9 /* Count the bits in the mask. */ -#else - cntlzd r0,r10 /* Count leading zeros before the match. */ -#endif - subf r5,r3,r4 - add r3,r5,r0 /* Compute final length. */ - blr - -END (STRLEN) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/powerpc/powerpc64/power8/strncase.S b/sysdeps/powerpc/powerpc64/power8/strncase.S deleted file mode 100644 index 32e09e4d94..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strncase.S +++ /dev/null @@ -1,20 +0,0 @@ -/* Optimized strncasecmp implementation for POWER8. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define USE_AS_STRNCASECMP 1 -#include diff --git a/sysdeps/powerpc/powerpc64/power8/strncmp.S b/sysdeps/powerpc/powerpc64/power8/strncmp.S deleted file mode 100644 index 3d8df90538..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strncmp.S +++ /dev/null @@ -1,327 +0,0 @@ -/* Optimized strncmp implementation for PowerPC64/POWER8. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef STRNCMP -# define STRNCMP strncmp -#endif - -/* Implements the function - - int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t [r5] n) - - The implementation uses unaligned doubleword access to avoid specialized - code paths depending of data alignment. Although recent powerpc64 uses - 64K as default, the page cross handling assumes minimum page size of - 4k. */ - - .machine power7 -EALIGN (STRNCMP, 4, 0) - /* Check if size is 0. */ - mr. r10,r5 - beq cr0,L(ret0) - - /* Check if [s1]+16 or [s2]+16 will cross a 4K page boundary using - the code: - - (((size_t) s1) % PAGE_SIZE > (PAGE_SIZE - ITER_SIZE)) - - with PAGE_SIZE being 4096 and ITER_SIZE begin 16. */ - rldicl r8,r3,0,52 - cmpldi cr7,r8,4096-16 - bgt cr7,L(pagecross) - rldicl r9,r4,0,52 - cmpldi cr7,r9,4096-16 - bgt cr7,L(pagecross) - - /* For short string up to 16 bytes, load both s1 and s2 using - unaligned dwords and compare. */ - ld r7,0(r3) - ld r9,0(r4) - li r8,0 - cmpb r8,r7,r8 - cmpb r6,r7,r9 - orc. r8,r8,r6 - bne cr0,L(different1) - - /* If the string compared are equal, but size is less or equal - to 8, return 0. */ - cmpldi cr7,r10,8 - li r9,0 - ble cr7,L(ret1) - addi r5,r10,-8 - - ld r7,8(r3) - ld r9,8(r4) - cmpb r8,r7,r8 - cmpb r6,r7,r9 - orc. r8,r8,r6 - bne cr0,L(different0) - - cmpldi cr7,r5,8 - mr r9,r8 - ble cr7,L(ret1) - - /* Update pointers and size. */ - addi r10,r10,-16 - addi r3,r3,16 - addi r4,r4,16 - - /* Now it has checked for first 16 bytes, align source1 to doubleword - and adjust source2 address. */ -L(align_8b): - rldicl r5,r3,0,61 - rldicr r3,r3,0,60 - subf r4,r5,r4 - add r10,r10,r5 - - /* At this point, source1 alignment is 0 and source2 alignment is - between 0 and 7. Check is source2 alignment is 0, meaning both - sources have the same alignment. */ - andi. r8,r4,0x7 - beq cr0,L(loop_eq_align_0) - - li r5,0 - b L(loop_ne_align_1) - - /* If source2 is unaligned to doubleword, the code needs to check - on each interation if the unaligned doubleword access will cross - a 4k page boundary. */ - .align 4 -L(loop_ne_align_0): - ld r7,0(r3) - ld r9,0(r4) - cmpb r8,r7,r5 - cmpb r6,r7,r9 - orc. r8,r8,r6 - bne cr0,L(different1) - - cmpldi cr7,r10,8 - ble cr7,L(ret0) - addi r10,r10,-8 - addi r3,r3,8 - addi r4,r4,8 -L(loop_ne_align_1): - rldicl r9,r4,0,52 - cmpldi r7,r9,4088 - ble cr7,L(loop_ne_align_0) - cmpdi cr7,r10,0 - beq cr7,L(ret0) - - lbz r9,0(r3) - lbz r8,0(r4) - cmplw cr7,r9,r8 - bne cr7,L(byte_ne_4) - cmpdi cr7,r9,0 - beq cr7,L(size_reached_0) - - li r9,r7 - addi r8,r3,1 - mtctr r9 - addi r4,r4,1 - addi r10,r10,-1 - addi r3,r3,8 - - /* The unaligned read of source2 will cross a 4K page boundary, - and the different byte or NULL maybe be in the remaining page - bytes. Since it can not use the unaligned load the algorithm - reads and compares 8 bytes to keep source1 doubleword aligned. */ - .align 4 -L(loop_ne_align_byte): - cmpdi cr7,r10,0 - addi r10,r10,-1 - beq cr7,L(ret0) - lbz r9,0(r8) - lbz r7,0(r4) - addi r8,r8,1 - addi r4,r4,1 - cmplw cr7,r9,r7 - cmpdi cr5,r9,0 - bne cr7,L(size_reached_2) - beq cr5,L(size_reached_0) - bdnz L(loop_ne_align_byte) - - cmpdi cr7,r10,0 - bne+ cr7,L(loop_ne_align_0) - - .align 4 -L(ret0): - li r9,0 -L(ret1): - mr r3,r9 - blr - - /* The code now check if r8 and r10 are different by issuing a - cmpb and shift the result based on its output: - - #ifdef __LITTLE_ENDIAN__ - leadzero = (__builtin_ffsl (z1) - 1); - leadzero = leadzero > (n-1)*8 ? (n-1)*8 : leadzero; - r1 = (r1 >> leadzero) & 0xFFUL; - r2 = (r2 >> leadzero) & 0xFFUL; - #else - leadzero = __builtin_clzl (z1); - leadzero = leadzero > (n-1)*8 ? (n-1)*8 : leadzero; - r1 = (r1 >> (56 - leadzero)) & 0xFFUL; - r2 = (r2 >> (56 - leadzero)) & 0xFFUL; - #endif - return r1 - r2; */ - - .align 4 -L(different0): - mr r10,r5 -#ifdef __LITTLE_ENDIAN__ -L(different1): - neg r11,r8 - sldi r10,r10,3 - and r8,r11,r8 - addi r10,r10,-8 - cntlzd r8,r8 - subfic r8,r8,63 - extsw r8,r8 - cmpld cr7,r8,r10 - ble cr7,L(different2) - mr r8,r10 -L(different2): - extsw r8,r8 -#else -L(different1): - addi r10,r10,-1 - cntlzd r8,r8 - sldi r10,r10,3 - cmpld cr7,r8,r10 - blt cr7,L(different2) - mr r8,r10 -L(different2): - subfic r8,r8,56 -#endif - srd r7,r7,r8 - srd r9,r9,r8 - rldicl r3,r7,0,56 - rldicl r9,r9,0,56 - subf r9,r9,3 - extsw r9,r9 - mr r3,r9 - blr - - /* If unaligned 16 bytes reads across a 4K page boundary, it uses - a simple byte a byte comparison until the page alignment for s1 - is reached. */ - .align 4 -L(pagecross): - lbz r7,0(r3) - lbz r9,0(r4) - subfic r8,r8,4095 - cmplw cr7,r9,r7 - bne cr7,L(byte_ne_3) - cmpdi cr7,r9,0 - beq cr7,L(byte_ne_0) - addi r10,r10,-1 - subf r7,r8,r10 - subf r9,r7,r10 - addi r9,r9,1 - mtctr r9 - b L(pagecross_loop1) - - .align 4 -L(pagecross_loop0): - beq cr7,L(ret0) - lbz r9,0(r3) - lbz r8,0(r4) - addi r10,r10,-1 - cmplw cr7,r9,r8 - cmpdi cr5,r9,0 - bne r7,L(byte_ne_2) - beq r5,L(byte_ne_0) -L(pagecross_loop1): - cmpdi cr7,r10,0 - addi r3,r3,1 - addi r4,r4,1 - bdnz L(pagecross_loop0) - cmpdi cr7,r7,0 - li r9,0 - bne+ cr7,L(align_8b) - b L(ret1) - - /* If both source1 and source2 are doubleword aligned, there is no - need for page boundary cross checks. */ - .align 4 -L(loop_eq_align_0): - ld r7,0(r3) - ld r9,0(r4) - cmpb r8,r7,r8 - cmpb r6,r7,r9 - orc. r8,r8,r6 - bne cr0,L(different1) - - cmpldi cr7,r10,8 - ble cr7,L(ret0) - addi r9,r10,-9 - - li r5,0 - srdi r9,r9,3 - addi r9,r9,1 - mtctr r9 - b L(loop_eq_align_2) - - .align 4 -L(loop_eq_align_1): - bdz L(ret0) -L(loop_eq_align_2): - ldu r7,8(r3) - addi r10,r10,-8 - ldu r9,8(r4) - cmpb r8,r7,r5 - cmpb r6,r7,r9 - orc. r8,r8,r6 - beq cr0,L(loop_eq_align_1) - b L(different1) - - .align 4 -L(byte_ne_0): - li r7,0 -L(byte_ne_1): - subf r9,r9,r7 - extsw r9,r9 - b L(ret1) - - .align 4 -L(byte_ne_2): - extsw r7,r9 - mr r9,r8 - b L(byte_ne_1) -L(size_reached_0): - li r10,0 -L(size_reached_1): - subf r9,r9,r10 - extsw r9,r9 - b L(ret1) -L(size_reached_2): - extsw r10,r9 - mr r9,r7 - b L(size_reached_1) -L(byte_ne_3): - extsw r7,r7 - b L(byte_ne_1) -L(byte_ne_4): - extsw r10,r9 - mr r9,r8 - b L(size_reached_1) -END(STRNCMP) -libc_hidden_builtin_def(strncmp) diff --git a/sysdeps/powerpc/powerpc64/power8/strncpy.S b/sysdeps/powerpc/powerpc64/power8/strncpy.S deleted file mode 100644 index 6d40f30ff7..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strncpy.S +++ /dev/null @@ -1,465 +0,0 @@ -/* Optimized strncpy/stpncpy implementation for PowerPC64/POWER8. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef USE_AS_STPNCPY -# ifndef STPNCPY -# define FUNC_NAME __stpncpy -# else -# define FUNC_NAME STPNCPY -# endif -#else -# ifndef STRNCPY -# define FUNC_NAME strncpy -# else -# define FUNC_NAME STRNCPY -# endif -#endif /* !USE_AS_STPNCPY */ - -#ifndef MEMSET -/* For builds without IFUNC support, local calls should be made to internal - GLIBC symbol (created by libc_hidden_builtin_def). */ -# ifdef SHARED -# define MEMSET __GI_memset -# else -# define MEMSET memset -# endif -#endif - -#define FRAMESIZE (FRAME_MIN_SIZE+48) - -/* Implements the function - - char * [r3] strncpy (char *dest [r3], const char *src [r4], size_t n [r5]) - - or - - char * [r3] stpncpy (char *dest [r3], const char *src [r4], size_t n [r5]) - - if USE_AS_STPCPY is defined. - - The implementation uses unaligned doubleword access to avoid specialized - code paths depending of data alignment. Although recent powerpc64 uses - 64K as default, the page cross handling assumes minimum page size of - 4k. */ - - .machine power7 -EALIGN (FUNC_NAME, 4, 0) - - /* Check if the [src]+15 will cross a 4K page by checking if the bit - indicating the page size changes. Basically: - - uint64_t srcin = (uint64_t)src; - uint64_t ob = srcin & 4096UL; - uint64_t nb = (srcin+15UL) & 4096UL; - if (ob ^ nb) - goto pagecross; */ - - addi r10,r4,16 - rlwinm r9,r4,0,19,19 - - /* Save some non-volatile registers on the stack. */ - std r26,-48(r1) - std r27,-40(r1) - - rlwinm r8,r10,0,19,19 - - std r28,-32(r1) - std r29,-24(r1) - - cmpld cr7,r9,r8 - - std r30,-16(r1) - std r31,-8(r1) - - /* Update CFI. */ - cfi_offset(r26, -48) - cfi_offset(r27, -40) - cfi_offset(r28, -32) - cfi_offset(r29, -24) - cfi_offset(r30, -16) - cfi_offset(r31, -8) - - beq cr7,L(unaligned_lt_16) - rldicl r9,r4,0,61 - subfic r8,r9,8 - cmpld cr7,r5,r8 - bgt cr7,L(pagecross) - - /* At this points there is 1 to 15 bytes to check and write. Since it could - be either from first unaligned 16 bytes access or from bulk copy, the code - uses an unrolled byte read/write instead of trying to analyze the cmpb - results. */ -L(short_path): - mr r9,r3 -L(short_path_1): - /* Return if there are no more bytes to be written. */ - cmpdi cr7,r5,0 - beq cr7,L(short_path_loop_end_1) -L(short_path_2): - /* Copy one char from src (r4) and write it to dest (r9). If it is the - end-of-string, start the null padding. Continue, otherwise. */ - lbz r10,0(r4) - cmpdi cr7,r10,0 - stb r10,0(r9) - beq cr7,L(zero_pad_start_1) - /* If there are no more bytes to be written, return. */ - cmpdi cr0,r5,1 - addi r8,r9,1 - addi r6,r5,-1 - beq cr0,L(short_path_loop_end_0) - /* Copy another char from src (r4) to dest (r9). Check again if it is - the end-of-string. If so, start the null padding. */ - lbz r10,1(r4) - cmpdi cr7,r10,0 - stb r10,1(r9) - beq cr7,L(zero_pad_start_prepare_1) - /* Eagerly decrement r5 by 3, which is the number of bytes already - written, plus one write that will be performed later on. */ - addi r10,r5,-3 - b L(short_path_loop_1) - - .align 4 -L(short_path_loop): - /* At this point, the induction variable, r5, as well as the pointers - to dest and src (r9 and r4, respectivelly) have been updated. - - Note: The registers r7 and r10 are induction variables derived from - r5. They are used to determine if the total number of writes has - been reached at every other write. - - Copy one char from src (r4) and write it to dest (r9). If it is the - end-of-string, start the null padding. Continue, otherwise. */ - lbz r8,0(r4) - addi r7,r10,-2 - cmpdi cr5,r8,0 - stb r8,0(r9) - beq cr5,L(zero_pad_start_1) - beq cr7,L(short_path_loop_end_0) - /* Copy another char from src (r4) to dest (r9). Check again if it is - the end-of-string. If so, start the null padding. */ - lbz r8,1(r4) - cmpdi cr7,r8,0 - stb r8,1(r9) - beq cr7,L(zero_pad_start) - mr r10,r7 -L(short_path_loop_1): - /* This block is reached after two chars have been already written to - dest. Nevertheless, r5 (the induction variable), r9 (the pointer to - dest), and r4 (the pointer to src) have not yet been updated. - - At this point: - r5 holds the count of bytes yet to be written plus 2. - r9 points to the last two chars that were already written to dest. - r4 points to the last two chars that were already copied from src. - - The algorithm continues by decrementing r5, the induction variable, - so that it reflects the last two writes. The pointers to dest (r9) - and to src (r4) are increment by two, for the same reason. - - Note: Register r10 is another induction variable, derived from r5, - which determines if the total number of writes has been reached. */ - addic. r5,r5,-2 - addi r9,r9,2 - cmpdi cr7,r10,0 /* Eagerly check if the next write is the last. */ - addi r4,r4,2 - addi r6,r9,1 - bne cr0,L(short_path_loop) /* Check if the total number of writes - has been reached at every other - write. */ -#ifdef USE_AS_STPNCPY - mr r3,r9 - b L(short_path_loop_end) -#endif - -L(short_path_loop_end_0): -#ifdef USE_AS_STPNCPY - addi r3,r9,1 - b L(short_path_loop_end) -#endif -L(short_path_loop_end_1): -#ifdef USE_AS_STPNCPY - mr r3,r9 -#endif -L(short_path_loop_end): - /* Restore non-volatile registers. */ - ld r26,-48(r1) - ld r27,-40(r1) - ld r28,-32(r1) - ld r29,-24(r1) - ld r30,-16(r1) - ld r31,-8(r1) - blr - - /* This code pads the remainder of dest with NULL bytes. The algorithm - calculates the remaining size and calls memset. */ - .align 4 -L(zero_pad_start): - mr r5,r10 - mr r9,r6 -L(zero_pad_start_1): - /* At this point: - - r5 holds the number of bytes that still have to be written to - dest. - - r9 points to the position, in dest, where the first null byte - will be written. - The above statements are true both when control reaches this label - from a branch or when falling through the previous lines. */ -#ifndef USE_AS_STPNCPY - mr r30,r3 /* Save the return value of strncpy. */ -#endif - /* Prepare the call to memset. */ - mr r3,r9 /* Pointer to the area to be zero-filled. */ - li r4,0 /* Byte to be written (zero). */ - - /* We delayed the creation of the stack frame, as well as the saving of - the link register, because only at this point, we are sure that - doing so is actually needed. */ - - /* Save the link register. */ - mflr r0 - std r0,16(r1) - cfi_offset(lr, 16) - - /* Create the stack frame. */ - stdu r1,-FRAMESIZE(r1) - cfi_adjust_cfa_offset(FRAMESIZE) - - bl MEMSET - nop - - /* Restore the stack frame. */ - addi r1,r1,FRAMESIZE - cfi_adjust_cfa_offset(-FRAMESIZE) - /* Restore the link register. */ - ld r0,16(r1) - mtlr r0 - -#ifndef USE_AS_STPNCPY - mr r3,r30 /* Restore the return value of strncpy, i.e.: - dest. For stpncpy, the return value is the - same as return value of memset. */ -#endif - - /* Restore non-volatile registers and return. */ - ld r26,-48(r1) - ld r27,-40(r1) - ld r28,-32(r1) - ld r29,-24(r1) - ld r30,-16(r1) - ld r31,-8(r1) - blr - - /* The common case where [src]+16 will not cross a 4K page boundary. - In this case the code fast check the first 16 bytes by using doubleword - read/compares and update destiny if neither total size or null byte - is found in destiny. */ - .align 4 -L(unaligned_lt_16): - cmpldi cr7,r5,7 - ble cr7,L(short_path) - ld r7,0(r4) - li r8,0 - cmpb r8,r7,r8 - cmpdi cr7,r8,0 - bne cr7,L(short_path_prepare_2) - addi r6,r5,-8 - std r7,0(r3) - addi r9,r3,8 - cmpldi cr7,r6,7 - addi r7,r4,8 - ble cr7,L(short_path_prepare_1_1) - ld r4,8(r4) - cmpb r8,r4,r8 - cmpdi cr7,r8,0 - bne cr7,L(short_path_prepare_2_1) - std r4,8(r3) - addi r29,r3,16 - addi r5,r5,-16 - /* Neither the null byte was found or total length was reached, - align to 16 bytes and issue a bulk copy/compare. */ - b L(align_to_16b) - - /* In the case of 4k page boundary cross, the algorithm first align - the address to a doubleword, calculate a mask based on alignment - to ignore the bytes and continue using doubleword. */ - .align 4 -L(pagecross): - rldicr r11,r4,0,59 /* Align the address to 8 bytes boundary. */ - li r6,-1 /* MASK = 0xffffffffffffffffUL. */ - sldi r9,r9,3 /* Calculate padding. */ - ld r7,0(r11) /* Load doubleword from memory. */ -#ifdef __LITTLE_ENDIAN__ - sld r9,r6,r9 /* MASK = MASK << padding. */ -#else - srd r9,r6,r9 /* MASK = MASK >> padding. */ -#endif - orc r9,r7,r9 /* Mask bits that are not part of the - string. */ - li r7,0 - cmpb r9,r9,r7 /* Check for null bytes in DWORD1. */ - cmpdi cr7,r9,0 - bne cr7,L(short_path_prepare_2) - subf r8,r8,r5 /* Adjust total length. */ - cmpldi cr7,r8,8 /* Check if length was reached. */ - ble cr7,L(short_path_prepare_2) - - /* For next checks we have aligned address, so we check for more - three doublewords to make sure we can read 16 unaligned bytes - to start the bulk copy with 16 aligned addresses. */ - ld r7,8(r11) - cmpb r9,r7,r9 - cmpdi cr7,r9,0 - bne cr7,L(short_path_prepare_2) - addi r7,r8,-8 - cmpldi cr7,r7,8 - ble cr7,L(short_path_prepare_2) - ld r7,16(r11) - cmpb r9,r7,r9 - cmpdi cr7,r9,0 - bne cr7,L(short_path_prepare_2) - addi r8,r8,-16 - cmpldi cr7,r8,8 - ble cr7,L(short_path_prepare_2) - ld r8,24(r11) - cmpb r9,r8,r9 - cmpdi cr7,r9,0 - bne cr7,L(short_path_prepare_2) - - /* No null byte found in the 32 bytes readed and length not reached, - read source again using unaligned loads and store them. */ - ld r9,0(r4) - addi r29,r3,16 - addi r5,r5,-16 - std r9,0(r3) - ld r9,8(r4) - std r9,8(r3) - - /* Align source to 16 bytes and adjust destiny and size. */ -L(align_to_16b): - rldicl r9,r10,0,60 - rldicr r28,r10,0,59 - add r12,r5,r9 - subf r29,r9,r29 - - /* The bulk read/compare/copy loads two doublewords, compare and merge - in a single register for speed. This is an attempt to speed up the - null-checking process for bigger strings. */ - - cmpldi cr7,r12,15 - ble cr7,L(short_path_prepare_1_2) - - /* Main loop for large sizes, unrolled 2 times to get better use of - pipeline. */ - ld r8,0(28) - ld r10,8(28) - li r9,0 - cmpb r7,r8,r9 - cmpb r9,r10,r9 - or. r6,r9,r7 - bne cr0,L(short_path_prepare_2_3) - addi r5,r12,-16 - addi r4,r28,16 - std r8,0(r29) - std r10,8(r29) - cmpldi cr7,r5,15 - addi r9,r29,16 - ble cr7,L(short_path_1) - mr r11,r28 - mr r6,r29 - li r30,0 - subfic r26,r4,48 - subfic r27,r9,48 - - b L(loop_16b) - - .align 4 -L(loop_start): - ld r31,0(r11) - ld r10,8(r11) - cmpb r0,r31,r7 - cmpb r8,r10,r7 - or. r7,r0,r8 - addi r5,r5,-32 - cmpldi cr7,r5,15 - add r4,r4,r26 - add r9,r9,r27 - bne cr0,L(short_path_prepare_2_2) - add r4,r28,r4 - std r31,0(r6) - add r9,r29,r9 - std r10,8(r6) - ble cr7,L(short_path_1) - -L(loop_16b): - ld r10,16(r11) - ld r0,24(r11) - cmpb r8,r10,r30 - cmpb r7,r0,r30 - or. r7,r8,r7 - addi r12,r12,-32 - cmpldi cr7,r12,15 - addi r11,r11,32 - bne cr0,L(short_path_2) - std r10,16(r6) - addi r6,r6,32 - std r0,-8(r6) - bgt cr7,L(loop_start) - - mr r5,r12 - mr r4,r11 - mr r9,r6 - b L(short_path_1) - - .align 4 -L(short_path_prepare_1_1): - mr r5,r6 - mr r4,r7 - b L(short_path_1) -L(short_path_prepare_1_2): - mr r5,r12 - mr r4,r28 - mr r9,r29 - b L(short_path_1) -L(short_path_prepare_2): - mr r9,r3 - b L(short_path_2) -L(short_path_prepare_2_1): - mr r5,r6 - mr r4,r7 - b L(short_path_2) -L(short_path_prepare_2_2): - mr r5,r12 - mr r4,r11 - mr r9,r6 - b L(short_path_2) -L(short_path_prepare_2_3): - mr r5,r12 - mr r4,r28 - mr r9,r29 - b L(short_path_2) -L(zero_pad_start_prepare_1): - mr r5,r6 - mr r9,r8 - b L(zero_pad_start_1) -END (FUNC_NAME) - -#ifndef USE_AS_STPNCPY -libc_hidden_builtin_def (strncpy) -#endif diff --git a/sysdeps/powerpc/powerpc64/power8/strnlen.S b/sysdeps/powerpc/powerpc64/power8/strnlen.S deleted file mode 100644 index 3eadbfb09e..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strnlen.S +++ /dev/null @@ -1,433 +0,0 @@ -/* Optimized strnlen implementation for POWER8 using a vmx loop. - - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* It is implemented the following heuristic: - 1. Case maxlen <= 32: align the pointer to 8 bytes to loop through - reading doublewords. Uses the POWER7 algorithm. - 2. Case maxlen > 32: check for null bytes in the first 16 bytes using - unaligned accesses. Return length if found. Otherwise: - 2.1 Case maxlen < 64: deduct the bytes previously read, align - the pointer to 16 bytes and loop through reading quadwords - until find null bytes or reach maxlen. - 2.2 Case maxlen > 64: deduct the bytes previously read, align - the pointer to 64 bytes and set up a counter to loop through - reading in strides of 64 bytes. In case it finished the loop - with null bytes not found, process the remainder bytes by - switching to the loop to heuristic in 2.1. */ - -#include - -/* Define default page size to 4KB. */ -#define PAGE_SIZE 4096 - -/* The following macros implement Power ISA v2.07 opcodes - that could not be used directly into this code to the keep - compatibility with older binutils versions. */ - -/* Move from vector register doubleword. */ -#define MFVRD(r,v) .long (0x7c000067 | ((v)<<(32-11)) | ((r)<<(32-16))) - -/* Move to vector register doubleword. */ -#define MTVRD(v,r) .long (0x7c000167 | ((v)<<(32-11)) | ((r)<<(32-16))) - -/* Vector Bit Permute Quadword. */ -#define VBPERMQ(t,a,b) .long (0x1000054c \ - | ((t)<<(32-11)) \ - | ((a)<<(32-16)) \ - | ((b)<<(32-21)) ) - -/* Vector Population Count Halfword. */ -#define VPOPCNTH(t,b) .long (0x10000743 | ((t)<<(32-11)) | ((b)<<(32-21))) - -/* Vector Count Leading Zeros Halfword. */ -#define VCLZH(t,b) .long (0x10000742 | ((t)<<(32-11)) | ((b)<<(32-21))) - - -/* int [r3] strnlen (char *s [r3], size_t maxlen [r4]) */ -/* TODO: change to power8 when minimum required binutils allows it. */ - .machine power7 -ENTRY (__strnlen) - CALL_MCOUNT 2 - dcbt 0,r3 - - cmpldi r4,32 /* Check if maxlen <= 32. */ - ble L(small_range) /* If maxlen <= 32. */ - - /* Upcoming 16 bytes unaligned accesses cannot cross the page boundary - otherwise the processor throws an memory access error. - Use following code to check there is room for such as accesses: - (((size_t) s) % PAGE_SIZE > (PAGE_SIZE - 16) - If it is disallowed then switch to the code that handles - the string when maxlen <= 32. */ - clrldi r10,r3,52 - cmpldi cr7,r10,PAGE_SIZE-16 - bgt cr7,L(small_range) /* If less than 16B of page end. */ - - /* Compute our permute constant r8. */ - li r7,0 - /* Compute a bpermd constant to move bit 0 of each word into - a halfword value, and count trailing zeros. */ -#ifdef __LITTLE_ENDIAN__ - li r8,0x2820 - oris r8,r8,0x3830 - sldi r8,r8,32 - ori r8,r8,0x0800 - oris r8,r8,0x1810 -#else - li r8,0x1018 - oris r8,r8,0x0008 - sldi r8,r8,32 - ori r8,r8,0x3038 - oris r8,r8,0x2028 -#endif - - /* maxlen > 32. Optimistically check for null bytes in the first - 16 bytes of the string using unaligned accesses. */ - ld r5,0(r3) - ld r6,8(r3) - cmpb r10,r7,r5 /* Check for null bytes in DWORD1. */ - cmpb r11,r7,r6 /* Check for null bytes in DWORD2. */ - or. r7,r10,r11 - bne cr0, L(early_find) /* If found null bytes. */ - - /* At this point maxlen > 32 and null bytes were not found at first - 16 bytes. Prepare for loop using VMX. */ - - /* r3 == s, r4 == maxlen. All other volatile regs are unused now. */ - - addi r5,r3,16 /* Align up, or just add the 16B we - already checked. */ - li r0,15 - and r7,r5,r0 /* Find offset into 16B alignment. */ - andc r5,r5,r0 /* Quadword align up s to the next quadword. */ - li r0,16 - subf r0,r7,r0 - subf r4,r0,r4 /* Deduct unaligned bytes from maxlen. */ - - - /* Compute offsets for vmx loads, and precompute the vbpermq - constants for both the 64B and 16B loops. */ - li r6,0 - vspltisb v0,0 - vspltisb v10,3 - lvsl v11,r6,r6 - vslb v10,v11,v10 - - cmpldi r4,64 /* Check maxlen < 64. */ - blt L(smaller) /* If maxlen < 64 */ - - /* In order to begin the 64B loop, it needs to be 64 - bytes aligned. So read quadwords until it is aligned or found null - bytes. At worst case it will be aligned after the fourth iteration, - so unroll the loop to avoid counter checking. */ - andi. r7,r5,63 /* Check if is 64 bytes aligned. */ - beq cr0,L(preloop_64B) /* If it is already 64B aligned. */ - lvx v1,r5,r6 - vcmpequb. v1,v1,v0 - addi r5,r5,16 - addi r4,r4,-16 /* Decrement maxlen in 16 bytes. */ - bne cr6,L(found_aligning64B) /* If found null bytes. */ - - /* Unroll 3x above code block until aligned or find null bytes. */ - andi. r7,r5,63 - beq cr0,L(preloop_64B) - lvx v1,r5,r6 - vcmpequb. v1,v1,v0 - addi r5,r5,16 - addi r4,r4,-16 - bne cr6,L(found_aligning64B) - - andi. r7,r5,63 - beq cr0,L(preloop_64B) - lvx v1,r5,r6 - vcmpequb. v1,v1,v0 - addi r5,r5,16 - addi r4,r4,-16 - bne cr6,L(found_aligning64B) - - andi. r7,r5,63 - beq cr0,L(preloop_64B) - lvx v1,r5,r6 - vcmpequb. v1,v1,v0 - addi r5,r5,16 - addi r4,r4,-16 - bne cr6,L(found_aligning64B) - - /* At this point it should be 16 bytes aligned. - Prepare for the 64B loop. */ - .p2align 4 -L(preloop_64B): - /* Check if maxlen became is less than 64, therefore disallowing the - 64B loop. If it happened switch to the 16B loop code. */ - cmpldi r4,64 /* Check if maxlen < 64. */ - blt L(smaller) /* If maxlen < 64. */ - /* Set some constant values. */ - li r7,16 - li r10,32 - li r9,48 - - /* Compute the number of 64 bytes iterations needed. */ - srdi r11,r4,6 /* Compute loop count (maxlen / 64). */ - andi. r4,r4,63 /* Set maxlen the remainder (maxlen % 64). */ - mtctr r11 /* Move loop count to counter register. */ - - /* Handle maxlen > 64. Loop over the bytes in strides of 64B. */ - .p2align 4 -L(loop_64B): - lvx v1,r5,r6 /* r5 is the pointer to s. */ - lvx v2,r5,r7 - lvx v3,r5,r10 - lvx v4,r5,r9 - /* Compare the four 16B vectors to obtain the least 16 values. - Null bytes should emerge into v7, then check for null bytes. */ - vminub v5,v1,v2 - vminub v6,v3,v4 - vminub v7,v5,v6 - vcmpequb. v7,v7,v0 /* Check for null bytes. */ - addi r5,r5,64 /* Add pointer to next iteraction. */ - bne cr6,L(found_64B) /* If found null bytes. */ - bdnz L(loop_64B) /* Continue the loop if count > 0. */ - -/* Hit loop end without null match. So branch to handle the remainder. */ - - /* Prepare a 16B loop to handle two cases: - 1. If 32 > maxlen < 64. - 2. If maxlen >= 64, and reached end of the 64B loop with null - bytes not found. Thus handle the remainder bytes here. */ - .p2align 4 -L(smaller): - cmpldi r4,0 /* Check maxlen is zero. */ - beq L(done) /* If maxlen is zero. */ - - /* Place rounded up number of qw's to check into a vmx - register, and use some vector tricks to minimize - branching. */ - MTVRD(v7,r4) /* Copy maxlen from GPR to vector register. */ - vspltisb v5,1 - vspltisb v6,15 - vspltb v2,v7,7 - vaddubs v3,v5,v6 - -#ifdef __LITTLE_ENDIAN__ - vspltish v5,1 /* Compute 16 in each byte. */ -#endif - - /* Loop in 16B aligned incremements now. */ - .p2align 4 -L(loop_16B): - lvx v1,r5,r6 /* Load quadword into vector register. */ - addi r5,r5,16 /* Increment address to next 16B block. */ - vor v7,v2,v2 /* Save loop count (v2) into v7. */ - vsububs v2,v2,v3 /* Subtract 16B from count, saturate at 0. */ - vminub v4,v1,v2 - vcmpequb. v4,v4,v0 /* Checking for null bytes. */ - beq cr6,L(loop_16B) /* If null bytes not found. */ - - vcmpequb v1,v1,v0 - VBPERMQ(v1,v1,v10) -#ifdef __LITTLE_ENDIAN__ - vsubuhm v2,v1,v5 /* Form a mask of trailing zeros. */ - vandc v2,v2,v1 - VPOPCNTH(v1,v2) /* Count of trailing zeros, 16 if none. */ -#else - VCLZH(v1,v1) /* Count the leading zeros, 16 if none. */ -#endif - /* Truncate to maximum allowable offset. */ - vcmpgtub v2,v1,v7 /* Compare and truncate for matches beyond - maxlen. */ - vsel v1,v1,v7,v2 /* 0-16 is now in byte 7. */ - - MFVRD(r0,v1) - addi r5,r5,-16 /* Undo speculative bump. */ - extsb r0,r0 /* Clear whatever gunk is in the high 56b. */ - add r5,r5,r0 /* Add the offset of whatever was found. */ -L(done): - subf r3,r3,r5 /* Length is equal to the offset of null byte - matched minus the pointer to s. */ - blr /* Done. */ - - /* Handle case of maxlen > 64 and found null bytes in last block - of 64 bytes read. */ - .p2align 4 -L(found_64B): - /* A zero was found. Reduce the result. */ - vcmpequb v1,v1,v0 - vcmpequb v2,v2,v0 - vcmpequb v3,v3,v0 - vcmpequb v4,v4,v0 - - /* Permute the first bit of each byte into bits 48-63. */ - VBPERMQ(v1,v1,v10) - VBPERMQ(v2,v2,v10) - VBPERMQ(v3,v3,v10) - VBPERMQ(v4,v4,v10) - - /* Shift each component into its correct position for merging. */ -#ifdef __LITTLE_ENDIAN__ - vsldoi v2,v2,v2,2 - vsldoi v3,v3,v3,4 - vsldoi v4,v4,v4,6 -#else - vsldoi v1,v1,v1,6 - vsldoi v2,v2,v2,4 - vsldoi v3,v3,v3,2 -#endif - - /* Merge the results and move to a GPR. */ - vor v1,v2,v1 - vor v2,v3,v4 - vor v4,v1,v2 - - /* Adjust address to the start of the current 64B block. */ - addi r5,r5,-64 - - MFVRD(r10,v4) -#ifdef __LITTLE_ENDIAN__ - addi r9,r10,-1 /* Form a mask from trailing zeros. */ - andc r9,r9,r10 - popcntd r0,r9 /* Count the bits in the mask. */ -#else - cntlzd r0,r10 /* Count leading zeros before the match. */ -#endif - subf r5,r3,r5 - add r3,r5,r0 /* Compute final length. */ - blr /* Done. */ - - /* Handle case where null bytes were found while aligning - as a preparation for the 64B loop. */ - .p2align 4 -L(found_aligning64B): - VBPERMQ(v1,v1,v10) -#ifdef __LITTLE_ENDIAN__ - MFVRD(r10,v1) - addi r9,r10,-1 /* Form a mask from trailing zeros. */ - andc r9,r9,r10 - popcntd r0,r9 /* Count the bits in the mask. */ -#else - vsldoi v1,v1,v1,6 - MFVRD(r10,v1) - cntlzd r0,r10 /* Count leading zeros before the match. */ -#endif - addi r5,r5,-16 /* Adjust address to offset of last 16 bytes - read. */ - /* Calculate length as subtracted the pointer to s of last 16 bytes - offset, added with the bytes before the match. */ - subf r5,r3,r5 - add r3,r5,r0 - blr /* Done. */ - - /* Handle case of maxlen > 32 and found a null bytes within the first - 16 bytes of s. */ - .p2align 4 -L(early_find): - bpermd r5,r8,r10 /* r8 contains the bit permute constants. */ - bpermd r6,r8,r11 - sldi r5,r5,8 - or r5,r5,r6 /* r5 should hold a 16B mask of - a potential 0. */ - cntlzd r5,r5 /* Count leading zeros. */ - addi r3,r5,-48 /* Deduct the 48 leading zeros always - present. */ - blr /* Done. */ - - /* Handle case of maxlen <= 32. Use the POWER7 algorithm. */ - .p2align 4 -L(small_range): - clrrdi r8,r3,3 /* Align the pointer to 8B. */ - li r0,0 - /* Register's content at this point: - r3 == pointer to s, r4 == maxlen, r8 == pointer to s aligned to 8B, - r7 == last acceptable address. */ - cmpldi r4,0 /* Check if maxlen is zero. */ - beq L(end_max) /* If maxlen is zero. */ - - /* Calculate the last acceptable address and check for possible - addition overflow by using satured math: - r7 = r3 + r4 - r7 |= -(r7 < x) */ - add r7,r3,r4 - subfc r6,r3,r7 - subfe r9,r9,r9 - extsw r6,r9 - or r7,r7,r6 - addi r7,r7,-1 - - clrrdi r7,r7,3 /* Align to 8B address of last - acceptable address. */ - - rlwinm r6,r3,3,26,28 /* Calculate padding. */ - ld r12,0(r8) /* Load aligned doubleword. */ - cmpb r10,r12,r0 /* Check for null bytes. */ -#ifdef __LITTLE_ENDIAN__ - srd r10,r10,r6 - sld r10,r10,r6 -#else - sld r10,r10,r6 - srd r10,r10,r6 -#endif /* __LITTLE_ENDIAN__ */ - cmpldi cr7,r10,0 - bne cr7,L(done_small) /* If found null byte. */ - - cmpld r8,r7 /* Check if reached maxlen. */ - beq L(end_max) /* If reached maxlen. */ - - /* Still handling case of maxlen <= 32. Read doubleword aligned until - find null bytes or reach maxlen. */ - .p2align 4 -L(loop_small): - ldu r12,8(r8) /* Load next doubleword and update r8. */ - cmpb r10,r12,r0 /* Check for null bytes. */ - cmpldi cr6,r10,0 - bne cr6,L(done_small) /* If found null bytes. */ - cmpld r8,r7 /* Check if reached maxlen. */ - bne L(loop_small) /* If it has more bytes to read. */ - mr r3,r4 /* Reached maxlen with null bytes not found. - Length is equal to maxlen. */ - blr /* Done. */ - - /* Still handling case of maxlen <= 32. Found null bytes. - Registers: r10 == match bits within doubleword, r8 == address of - last doubleword read, r3 == pointer to s, r4 == maxlen. */ - .p2align 4 -L(done_small): -#ifdef __LITTLE_ENDIAN__ - /* Count trailing zeros. */ - addi r0,r10,-1 - andc r0,r0,r10 - popcntd r0,r0 -#else - cntlzd r0,r10 /* Count leading zeros before the match. */ -#endif - sub r3,r8,r3 /* Calculate total of bytes before the match. */ - srdi r0,r0,3 /* Convert leading/trailing zeros to bytes. */ - add r3,r3,r0 /* Length until the match. */ - cmpld r3,r4 /* Check length is greater than maxlen. */ - blelr - mr r3,r4 /* If length is greater than maxlen, return - maxlen. */ - blr - - /* Handle case of reached maxlen with null bytes not found. */ - .p2align 4 -L(end_max): - mr r3,r4 /* Length is equal to maxlen. */ - blr /* Done. */ - - -END (__strnlen) -libc_hidden_def (__strnlen) -weak_alias (__strnlen, strnlen) -libc_hidden_def (strnlen) diff --git a/sysdeps/powerpc/powerpc64/power8/strrchr.S b/sysdeps/powerpc/powerpc64/power8/strrchr.S deleted file mode 100644 index 8eb74853c3..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strrchr.S +++ /dev/null @@ -1,464 +0,0 @@ -/* Optimized strrchr implementation for PowerPC64/POWER7 using cmpb insn. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* char *[r3] strrchr (char *s [r3], int c [r4]) */ -/* TODO: change these to the actual instructions when the minimum required - binutils allows it. */ -#define MTVRD(v,r) .long (0x7c000167 | ((v)<<(32-11)) | ((r)<<(32-16))) -#define MFVRD(r,v) .long (0x7c000067 | ((v)<<(32-11)) | ((r)<<(32-16))) -#define VBPERMQ(t,a,b) .long (0x1000054c \ - | ((t)<<(32-11)) \ - | ((a)<<(32-16)) \ - | ((b)<<(32-21)) ) -#define VCLZD(r,v) .long (0x100007c2 | ((r)<<(32-11)) | ((v)<<(32-21))) -#define VPOPCNTD(r,v) .long (0x100007c3 | ((r)<<(32-11)) | ((v)<<(32-21))) -#define VADDUQM(t,a,b) .long (0x10000100 \ - | ((t)<<(32-11)) \ - | ((a)<<(32-16)) \ - | ((b)<<(32-21)) ) -#ifdef __LITTLE_ENDIAN__ -/* Find the match position from v6 and place result in r6. */ -# define CALCULATE_MATCH() \ - VBPERMQ(v6, v6, v10); \ - vsldoi v6, v6, v6, 6; \ - MFVRD(r7, v6); \ - cntlzd r6, r7; \ - subfic r6, r6, 15; -/* - * Find the first null position to mask bytes after null. - * (reg): vcmpequb result: v2 for 1st qw v3 for 2nd qw. - * Result placed at v2. - */ -# define FIND_NULL_POS(reg) \ - vspltisb v11, -1; \ - VADDUQM(v11, reg, v11); \ - vandc v11, v11, reg; \ - VPOPCNTD(v2, v11); \ - vspltb v11, v2, 15; \ - vcmpequb. v11, v11, v9; \ - blt cr6, 1f; \ - vsldoi v9, v0, v9, 1; \ - vslo v2, v2, v9; \ -1: \ - vsumsws v2, v2, v0; -#else -# define CALCULATE_MATCH() \ - VBPERMQ(v6, v6, v10); \ - MFVRD(r7, v6); \ - addi r6, r7, -1; \ - andc r6, r6, r7; \ - popcntd r6, r6; \ - subfic r6, r6, 15; -# define FIND_NULL_POS(reg) \ - VCLZD(v2, reg); \ - vspltb v11, v2, 7; \ - vcmpequb. v11, v11, v9; \ - blt cr6, 1f; \ - vsldoi v9, v0, v9, 1; \ - vsro v2, v2, v9; \ -1: \ - vsumsws v2, v2, v0; -#endif /* !__LITTLE_ENDIAN__ */ - .machine power7 -ENTRY (strrchr) - CALL_MCOUNT 2 - dcbt 0,r3 - clrrdi r8,r3,3 /* Align the address to doubleword boundary. */ - cmpdi cr7,r4,0 - ld r12,0(r8) /* Load doubleword from memory. */ - li r9,0 /* Used to store last occurence. */ - li r0,0 /* Doubleword with null chars to use - with cmpb. */ - - rlwinm r6,r3,3,26,28 /* Calculate padding. */ - - beq cr7,L(null_match) - - /* Replicate byte to doubleword. */ - insrdi r4,r4,8,48 - insrdi r4,r4,16,32 - insrdi r4,r4,32,0 - - /* r4 is changed now. If it's passed more chars, then - check for null again. */ - cmpdi cr7,r4,0 - beq cr7,L(null_match) - /* Now r4 has a doubleword of c bytes and r0 has - a doubleword of null bytes. */ - - cmpb r10,r12,r4 /* Compare each byte against c byte. */ - cmpb r11,r12,r0 /* Compare each byte against null byte. */ - - /* Move the doublewords left and right to discard the bits that are - not part of the string and bring them back as zeros. */ -#ifdef __LITTLE_ENDIAN__ - srd r10,r10,r6 - srd r11,r11,r6 - sld r10,r10,r6 - sld r11,r11,r6 -#else - sld r10,r10,r6 - sld r11,r11,r6 - srd r10,r10,r6 - srd r11,r11,r6 -#endif - or r5,r10,r11 /* OR the results to speed things up. */ - cmpdi cr7,r5,0 /* If r5 == 0, no c or null bytes - have been found. */ - bne cr7,L(done) - -L(align): - andi. r12, r8, 15 - - /* Are we now aligned to a doubleword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bne cr0, L(loop) - - /* Handle WORD2 of pair. */ - ldu r12,8(r8) - cmpb r10,r12,r4 - cmpb r11,r12,r0 - or r5,r10,r11 - cmpdi cr7,r5,0 - bne cr7,L(done) - b L(loop) /* We branch here (rather than falling through) - to skip the nops due to heavy alignment - of the loop below. */ - .p2align 5 -L(loop): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - ld r12,8(r8) - ldu r7,16(r8) - cmpb r10,r12,r4 - cmpb r11,r12,r0 - cmpb r6,r7,r4 - cmpb r7,r7,r0 - or r12,r10,r11 - or r5,r6,r7 - or r5,r12,r5 - cmpdi cr7,r5,0 - beq cr7,L(vector) - - /* OK, one (or both) of the doublewords contains a c/null byte. Check - the first doubleword and decrement the address in case the first - doubleword really contains a c/null byte. */ - cmpdi cr6,r12,0 - addi r8,r8,-8 - bne cr6,L(done) - - /* The c/null byte must be in the second doubleword. Adjust the - address again and move the result of cmpb to r10 so we can calculate - the pointer. */ - - mr r10,r6 - mr r11,r7 - addi r8,r8,8 - - /* r10/r11 have the output of the cmpb instructions, that is, - 0xff in the same position as the c/null byte in the original - doubleword from the string. Use that to calculate the pointer. */ - -L(done): - /* If there are more than one 0xff in r11, find the first position of - 0xff in r11 and fill r10 with 0 from that position. */ - cmpdi cr7,r11,0 - beq cr7,L(no_null) -#ifdef __LITTLE_ENDIAN__ - addi r3,r11,-1 - andc r3,r3,r11 - popcntd r0,r3 -#else - cntlzd r0,r11 -#endif - subfic r0,r0,63 - li r6,-1 -#ifdef __LITTLE_ENDIAN__ - srd r0,r6,r0 -#else - sld r0,r6,r0 -#endif - and r10,r0,r10 -L(no_null): -#ifdef __LITTLE_ENDIAN__ - cntlzd r0,r10 /* Count leading zeros before c matches. */ - addi r3,r10,-1 - andc r3,r3,r10 - addi r10,r11,-1 - andc r10,r10,r11 - cmpld cr7,r3,r10 - bgt cr7,L(no_match) -#else - addi r3,r10,-1 /* Count trailing zeros before c matches. */ - andc r3,r3,r10 - popcntd r0,r3 - cmpld cr7,r11,r10 - bgt cr7,L(no_match) -#endif - srdi r0,r0,3 /* Convert trailing zeros to bytes. */ - subfic r0,r0,7 - add r9,r8,r0 /* Return address of the matching c byte - or null in case c was not found. */ - li r0,0 - cmpdi cr7,r11,0 /* If r11 == 0, no null's have been found. */ - beq cr7,L(align) - - .align 4 -L(no_match): - mr r3,r9 - blr - -/* Check the first 32B in GPR's and move to vectorized loop. */ - .p2align 5 -L(vector): - addi r3, r8, 8 - /* Make sure 32B aligned. */ - andi. r10, r3, 31 - bne cr0, L(loop) - vspltisb v0, 0 - /* Precompute vbpermq constant. */ - vspltisb v10, 3 - lvsl v11, r0, r0 - vslb v10, v11, v10 - MTVRD(v1, r4) - li r5, 16 - vspltb v1, v1, 7 - /* Compare 32 bytes in each loop. */ -L(continue): - lvx v4, 0, r3 - lvx v5, r3, r5 - vcmpequb v2, v0, v4 - vcmpequb v3, v0, v5 - vcmpequb v6, v1, v4 - vcmpequb v7, v1, v5 - vor v8, v2, v3 - vor v9, v6, v7 - vor v11, v8, v9 - vcmpequb. v11, v0, v11 - addi r3, r3, 32 - blt cr6, L(continue) - vcmpequb. v8, v0, v8 - blt cr6, L(match) - - /* One (or both) of the quadwords contains c/null. */ - vspltisb v8, 2 - vspltisb v9, 5 - /* Precompute values used for comparison. */ - vsl v9, v8, v9 /* v9 = 0x4040404040404040. */ - vaddubm v8, v9, v9 - vsldoi v8, v0, v8, 1 /* v8 = 0x80. */ - - /* Check if null is in second qw. */ - vcmpequb. v11, v0, v2 - blt cr6, L(secondqw) - - /* Null found in first qw. */ - addi r8, r3, -32 - /* Calculate the null position. */ - FIND_NULL_POS(v2) - /* Check if null is in the first byte. */ - vcmpequb. v11, v0, v2 - blt cr6, L(no_match) - vsububm v2, v8, v2 - /* Mask unwanted bytes after null. */ -#ifdef __LITTLE_ENDIAN__ - vslo v6, v6, v2 - vsro v6, v6, v2 -#else - vsro v6, v6, v2 - vslo v6, v6, v2 -#endif - vcmpequb. v11, v0, v6 - blt cr6, L(no_match) - /* Found a match before null. */ - CALCULATE_MATCH() - add r3, r8, r6 - blr - -L(secondqw): - addi r8, r3, -16 - FIND_NULL_POS(v3) - vcmpequb. v11, v0, v2 - blt cr6, L(no_match1) - vsububm v2, v8, v2 - /* Mask unwanted bytes after null. */ -#ifdef __LITTLE_ENDIAN__ - vslo v7, v7, v2 - vsro v7, v7, v2 -#else - vsro v7, v7, v2 - vslo v7, v7, v2 -#endif - vcmpequb. v11, v0, v7 - blt cr6, L(no_match1) - addi r8, r8, 16 - vor v6, v0, v7 -L(no_match1): - addi r8, r8, -16 - vcmpequb. v11, v0, v6 - blt cr6, L(no_match) - /* Found a match before null. */ - CALCULATE_MATCH() - add r3, r8, r6 - blr - -L(match): - /* One (or both) of the quadwords contains a match. */ - mr r8, r3 - vcmpequb. v8, v0, v7 - blt cr6, L(firstqw) - /* Match found in second qw. */ - addi r8, r8, 16 - vor v6, v0, v7 -L(firstqw): - addi r8, r8, -32 - CALCULATE_MATCH() - add r9, r8, r6 /* Compute final length. */ - b L(continue) -/* We are here because strrchr was called with a null byte. */ - .align 4 -L(null_match): - /* r0 has a doubleword of null bytes. */ - - cmpb r5,r12,r0 /* Compare each byte against null bytes. */ - - /* Move the doublewords left and right to discard the bits that are - not part of the string and bring them back as zeros. */ -#ifdef __LITTLE_ENDIAN__ - srd r5,r5,r6 - sld r5,r5,r6 -#else - sld r5,r5,r6 - srd r5,r5,r6 -#endif - cmpdi cr7,r5,0 /* If r5 == 0, no c or null bytes - have been found. */ - bne cr7,L(done_null) - - andi. r12, r8, 15 - - /* Are we now aligned to a quadword boundary? If so, skip to - the main loop. Otherwise, go through the alignment code. */ - - bne cr0, L(loop_null) - - /* Handle WORD2 of pair. */ - ldu r12,8(r8) - cmpb r5,r12,r0 - cmpdi cr7,r5,0 - bne cr7,L(done_null) - b L(loop_null) /* We branch here (rather than falling through) - to skip the nops due to heavy alignment - of the loop below. */ - - /* Main loop to look for the end of the string. Since it's a - small loop (< 8 instructions), align it to 32-bytes. */ - .p2align 5 -L(loop_null): - /* Load two doublewords, compare and merge in a - single register for speed. This is an attempt - to speed up the null-checking process for bigger strings. */ - ld r12,8(r8) - ldu r11,16(r8) - cmpb r5,r12,r0 - cmpb r10,r11,r0 - or r6,r5,r10 - cmpdi cr7,r6,0 - beq cr7,L(vector1) - - /* OK, one (or both) of the doublewords contains a null byte. Check - the first doubleword and decrement the address in case the first - doubleword really contains a null byte. */ - - cmpdi cr6,r5,0 - addi r8,r8,-8 - bne cr6,L(done_null) - - /* The null byte must be in the second doubleword. Adjust the address - again and move the result of cmpb to r10 so we can calculate the - pointer. */ - - mr r5,r10 - addi r8,r8,8 - - /* r5 has the output of the cmpb instruction, that is, it contains - 0xff in the same position as the null byte in the original - doubleword from the string. Use that to calculate the pointer. */ -L(done_null): -#ifdef __LITTLE_ENDIAN__ - addi r0,r5,-1 - andc r0,r0,r5 - popcntd r0,r0 -#else - cntlzd r0,r5 /* Count leading zeros before the match. */ -#endif - srdi r0,r0,3 /* Convert trailing zeros to bytes. */ - add r3,r8,r0 /* Return address of the matching null byte. */ - blr -/* Check the first 32B in GPR's and move to vectorized loop. */ - .p2align 5 -L(vector1): - addi r3, r8, 8 - /* Make sure 32B aligned. */ - andi. r10, r3, 31 - bne cr0, L(loop_null) - vspltisb v0, 0 - /* Precompute vbpermq constant. */ - vspltisb v10, 3 - lvsl v11, r0, r0 - vslb v10, v11, v10 - li r5, 16 - /* Compare 32 bytes in each loop. */ -L(continue1): - lvx v4, 0, r3 - lvx v5, r3, r5 - vcmpequb v2, v0, v4 - vcmpequb v3, v0, v5 - vor v8, v2, v3 - vcmpequb. v11, v0, v8 - addi r3, r3, 32 - blt cr6, L(continue1) - addi r3, r3, -32 - VBPERMQ(v2, v2, v10) - VBPERMQ(v3, v3, v10) - /* Shift each component into its correct position for merging. */ -#ifdef __LITTLE_ENDIAN__ - vsldoi v3, v3, v3, 2 -#else - vsldoi v2, v2, v2, 6 - vsldoi v3, v3, v3, 4 -#endif - /* Merge the results and move to a GPR. */ - vor v4, v3, v2 - MFVRD(r5, v4) -#ifdef __LITTLE_ENDIAN__ - addi r6, r5, -1 - andc r6, r6, r5 - popcntd r6, r6 -#else - cntlzd r6, r5 /* Count leading zeros before the match. */ -#endif - add r3, r3, r6 /* Compute final length. */ - blr -END (strrchr) -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/powerpc/powerpc64/power8/strspn.S b/sysdeps/powerpc/powerpc64/power8/strspn.S deleted file mode 100644 index e9271898f2..0000000000 --- a/sysdeps/powerpc/powerpc64/power8/strspn.S +++ /dev/null @@ -1,202 +0,0 @@ -/* Optimized strspn implementation for Power8. - - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* size_t [r3] strspn (const char *string [r3], - const char *needleAccept [r4]) */ - -/* This takes a novel approach by computing a 256 bit mask whereby - each set bit implies the byte is "accepted". P8 vector hardware - has extremely efficient hardware for selecting bits from a mask. - - One might ask "why not use bpermd for short strings"? It is - so slow that its performance about matches the generic PPC64 - variant without any fancy masking, with the added expense of - making the mask. That was the first variant of this. */ - - - -#include "sysdep.h" - -#ifndef USE_AS_STRCSPN -# define USE_AS_STRCSPN 0 -# ifndef STRSPN -# define STRSPN strspn -# endif -# define INITIAL_MASK 0 -# define UPDATE_MASK(RA, RS, RB) or RA, RS, RB -#else -# ifndef STRSPN -# define STRSPN strcspn -# endif -# define INITIAL_MASK -1 -# define UPDATE_MASK(RA, RS, RB) andc RA, RS, RB -#endif - -/* Simple macro to use VSX instructions in overlapping VR's. */ -#define XXVR(insn, vrt, vra, vrb) \ - insn 32+vrt, 32+vra, 32+vrb - -/* ISA 2.07B instructions are not all defined for older binutils. - Macros are defined below for these newer instructions in order - to maintain compatibility. */ - -/* Note, TX/SX is always set as VMX regs are the high 32 VSX regs. */ -#define MTVRD(v,r) .long (0x7c000167 | ((v)<<(32-11)) | ((r)<<(32-16))) -#define MFVRD(r,v) .long (0x7c000067 | ((v)<<(32-11)) | ((r)<<(32-16))) - -#define VBPERMQ(t,a,b) .long (0x1000054c \ - | ((t)<<(32-11)) \ - | ((a)<<(32-16)) \ - | ((b)<<(32-21)) ) - - /* This can be updated to power8 once the minimum version of - binutils supports power8 and the above instructions. */ - .machine power7 -EALIGN(STRSPN, 4, 0) - CALL_MCOUNT 2 - - /* Generate useful constants for later on. */ - vspltisb v1, 7 - vspltisb v2, -1 - vslb v1, v1, v1 /* 0x80 to swap high bit for vbpermq. */ - vspltisb v10, 0 - vsldoi v4, v10, v2, 2 /* 0xFFFF into vr4. */ - XXVR(xxmrgld, v4, v4, v10) /* Mask for checking matches. */ - - /* Prepare to compute 256b mask. */ - addi r4, r4, -1 - li r5, INITIAL_MASK - li r6, INITIAL_MASK - li r7, INITIAL_MASK - li r8, INITIAL_MASK - -#if USE_AS_STRCSPN - /* Ensure the null character never matches by clearing ISA bit 0 in - in r5 which is the bit which will check for it in the later usage - of vbpermq. */ - srdi r5, r5, 1 -#endif - - li r11, 1 - sldi r11, r11, 63 - - /* Start interleaved Mask computation. - This will eventually or 1's into ignored bits from vbpermq. */ - lvsr v11, 0, r3 - vspltb v11, v11, 0 /* Splat shift constant. */ - - /* Build a 256b mask in r5-r8. */ - .align 4 -L(next_needle): - lbzu r9, 1(r4) - - cmpldi cr0, r9, 0 - cmpldi cr1, r9, 128 - - /* This is a little tricky. srd only uses the first 7 bits, - and if bit 7 is set, value is always 0. So, we can - effectively shift 128b in this case. */ - xori r12, r9, 0x40 /* Invert bit 6. */ - srd r10, r11, r9 /* Mask for bits 0-63. */ - srd r12, r11, r12 /* Mask for bits 64-127. */ - - beq cr0, L(start_cmp) - - /* Now, or the value into the correct GPR. */ - bge cr1,L(needle_gt128) - UPDATE_MASK (r5, r5, r10) /* 0 - 63. */ - UPDATE_MASK (r6, r6, r12) /* 64 - 127. */ - b L(next_needle) - - .align 4 -L(needle_gt128): - UPDATE_MASK (r7, r7, r10) /* 128 - 191. */ - UPDATE_MASK (r8, r8, r12) /* 192 - 255. */ - b L(next_needle) - - - .align 4 -L(start_cmp): - /* Move and merge bitmap into 2 VRs. bpermd is slower on P8. */ - mr r0, r3 /* Save r3 for final length computation. */ - MTVRD (v5, r5) - MTVRD (v6, r6) - MTVRD (v7, r7) - MTVRD (v8, r8) - - /* Continue interleaved mask generation. */ -#ifdef __LITTLE_ENDIAN__ - vsrw v11, v2, v11 /* Note, shift ignores higher order bits. */ - vsplth v11, v11, 0 /* Only care about the high 16 bits of v10. */ -#else - vslw v11, v2, v11 /* Note, shift ignores higher order bits. */ - vsplth v11, v11, 1 /* Only care about the low 16 bits of v10. */ -#endif - lvx v0, 0, r3 /* Note, unaligned load ignores lower bits. */ - - /* Do the merging of the bitmask. */ - XXVR(xxmrghd, v5, v5, v6) - XXVR(xxmrghd, v6, v7, v8) - - /* Finish mask generation. */ - vand v11, v11, v4 /* Throwaway bits not in the mask. */ - - /* Compare the first 1-16B, while masking unwanted bytes. */ - clrrdi r3, r3, 4 /* Note, counts from qw boundaries. */ - vxor v9, v0, v1 /* Swap high bit. */ - VBPERMQ (v8, v5, v0) - VBPERMQ (v7, v6, v9) - vor v7, v7, v8 - vor v7, v7, v11 /* Ignore non-participating bytes. */ - vcmpequh. v8, v7, v4 - bnl cr6, L(done) - - addi r3, r3, 16 - - .align 4 -L(vec): - lvx v0, 0, r3 - addi r3, r3, 16 - vxor v9, v0, v1 /* Swap high bit. */ - VBPERMQ (v8, v5, v0) - VBPERMQ (v7, v6, v9) - vor v7, v7, v8 - vcmpequh. v8, v7, v4 - blt cr6, L(vec) - - addi r3, r3, -16 -L(done): - subf r3, r0, r3 - MFVRD (r10, v7) - -#ifdef __LITTLE_ENDIAN__ - addi r0, r10, 1 /* Count the trailing 1's. */ - andc r10, r10, r0 - popcntd r10, r10 -#else - xori r10, r10, 0xffff /* Count leading 1's by inverting. */ - addi r3, r3, -48 /* Account for the extra leading zeros. */ - cntlzd r10, r10 -#endif - - add r3, r3, r10 - blr - -END(STRSPN) -libc_hidden_builtin_def (STRSPN) diff --git a/sysdeps/powerpc/powerpc64/power9/Implies b/sysdeps/powerpc/powerpc64/power9/Implies deleted file mode 100644 index fad2505ab9..0000000000 --- a/sysdeps/powerpc/powerpc64/power9/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc64/power8/fpu -powerpc/powerpc64/power8 diff --git a/sysdeps/powerpc/powerpc64/power9/fpu/Implies b/sysdeps/powerpc/powerpc64/power9/fpu/Implies deleted file mode 100644 index ae0dbaf857..0000000000 --- a/sysdeps/powerpc/powerpc64/power9/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power8/fpu diff --git a/sysdeps/powerpc/powerpc64/power9/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc64/power9/fpu/multiarch/Implies deleted file mode 100644 index f11e1bdba2..0000000000 --- a/sysdeps/powerpc/powerpc64/power9/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power8/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc64/power9/multiarch/Implies b/sysdeps/powerpc/powerpc64/power9/multiarch/Implies deleted file mode 100644 index dd6bca4b36..0000000000 --- a/sysdeps/powerpc/powerpc64/power9/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power8/multiarch diff --git a/sysdeps/powerpc/powerpc64/power9/strcmp.S b/sysdeps/powerpc/powerpc64/power9/strcmp.S deleted file mode 100644 index 2dc4f6c722..0000000000 --- a/sysdeps/powerpc/powerpc64/power9/strcmp.S +++ /dev/null @@ -1,268 +0,0 @@ -/* Optimized strcmp implementation for PowerPC64/POWER9. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ -#ifdef __LITTLE_ENDIAN__ -#include - -#ifndef STRCMP -# define STRCMP strcmp -#endif - -/* Implements the function - - int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) - - The implementation uses unaligned doubleword access for first 32 bytes - as in POWER8 patch and uses vectorised loops after that. */ - -/* TODO: Change this to actual instructions when minimum binutils is upgraded - to 2.27. Macros are defined below for these newer instructions in order - to maintain compatibility. */ -# define VCTZLSBB(r,v) .long (0x10010602 | ((r)<<(32-11)) | ((v)<<(32-21))) - -# define VEXTUBRX(t,a,b) .long (0x1000070d \ - | ((t)<<(32-11)) \ - | ((a)<<(32-16)) \ - | ((b)<<(32-21)) ) - -# define VCMPNEZB(t,a,b) .long (0x10000507 \ - | ((t)<<(32-11)) \ - | ((a)<<(32-16)) \ - | ((b)<<(32-21)) ) - -/* Get 16 bytes for unaligned case. - reg1: Vector to hold next 16 bytes. - reg2: Address to read from. - reg3: Permute control vector. */ -# define GET16BYTES(reg1, reg2, reg3) \ - lvx reg1, 0, reg2; \ - vperm v8, v2, reg1, reg3; \ - vcmpequb. v8, v0, v8; \ - beq cr6, 1f; \ - vspltisb v9, 0; \ - b 2f; \ - .align 4; \ -1: \ - addi r6, reg2, 16; \ - lvx v9, 0, r6; \ -2: \ - vperm reg1, v9, reg1, reg3; - -/* TODO: change this to .machine power9 when the minimum required binutils - allows it. */ - - .machine power7 -EALIGN (STRCMP, 4, 0) - li r0, 0 - - /* Check if [s1]+16 or [s2]+16 will cross a 4K page boundary using - the code: - - (((size_t) s1) % PAGE_SIZE > (PAGE_SIZE - ITER_SIZE)) - - with PAGE_SIZE being 4096 and ITER_SIZE begin 16. */ - - rldicl r7, r3, 0, 52 - rldicl r9, r4, 0, 52 - cmpldi cr7, r7, 4096-16 - bgt cr7, L(pagecross_check) - cmpldi cr5, r9, 4096-16 - bgt cr5, L(pagecross_check) - - /* For short strings up to 16 bytes, load both s1 and s2 using - unaligned dwords and compare. */ - ld r8, 0(r3) - ld r10, 0(r4) - cmpb r12, r8, r0 - cmpb r11, r8, r10 - orc. r9, r12, r11 - bne cr0, L(different_nocmpb) - - ld r8, 8(r3) - ld r10, 8(r4) - cmpb r12, r8, r0 - cmpb r11, r8, r10 - orc. r9, r12, r11 - bne cr0, L(different_nocmpb) - - addi r7, r3, 16 - addi r4, r4, 16 - -L(align): - /* Now it has checked for first 16 bytes. */ - vspltisb v0, 0 - vspltisb v2, -1 - lvsr v6, 0, r4 /* Compute mask. */ - or r5, r4, r7 - andi. r5, r5, 0xF - beq cr0, L(aligned) - andi. r5, r7, 0xF - beq cr0, L(s1_align) - lvsr v10, 0, r7 /* Compute mask. */ - - /* Both s1 and s2 are unaligned. */ - GET16BYTES(v4, r7, v10) - GET16BYTES(v5, r4, v6) - VCMPNEZB(v7, v5, v4) - beq cr6, L(match) - b L(different) - - /* Align s1 to qw and adjust s2 address. */ - .align 4 -L(match): - clrldi r6, r7, 60 - subfic r5, r6, 16 - add r7, r7, r5 - add r4, r4, r5 - andi. r5, r4, 0xF - beq cr0, L(aligned) - lvsr v6, 0, r4 - /* There are 2 loops depending on the input alignment. - Each loop gets 16 bytes from s1 and s2 and compares. - Loop until a mismatch or null occurs. */ -L(s1_align): - lvx v4, r7, r0 - GET16BYTES(v5, r4, v6) - VCMPNEZB(v7, v5, v4) - addi r7, r7, 16 - addi r4, r4, 16 - bne cr6, L(different) - - lvx v4, r7, r0 - GET16BYTES(v5, r4, v6) - VCMPNEZB(v7, v5, v4) - addi r7, r7, 16 - addi r4, r4, 16 - bne cr6, L(different) - - lvx v4, r7, r0 - GET16BYTES(v5, r4, v6) - VCMPNEZB(v7, v5, v4) - addi r7, r7, 16 - addi r4, r4, 16 - bne cr6, L(different) - - lvx v4, r7, r0 - GET16BYTES(v5, r4, v6) - VCMPNEZB(v7, v5, v4) - addi r7, r7, 16 - addi r4, r4, 16 - beq cr6, L(s1_align) - b L(different) - - .align 4 -L(aligned): - lvx v4, 0, r7 - lvx v5, 0, r4 - VCMPNEZB(v7, v5, v4) - addi r7, r7, 16 - addi r4, r4, 16 - bne cr6, L(different) - - lvx v4, 0, r7 - lvx v5, 0, r4 - VCMPNEZB(v7, v5, v4) - addi r7, r7, 16 - addi r4, r4, 16 - bne cr6, L(different) - - lvx v4, 0, r7 - lvx v5, 0, r4 - VCMPNEZB(v7, v5, v4) - addi r7, r7, 16 - addi r4, r4, 16 - bne cr6, L(different) - - lvx v4, 0, r7 - lvx v5, 0, r4 - VCMPNEZB(v7, v5, v4) - addi r7, r7, 16 - addi r4, r4, 16 - beq cr6, L(aligned) - - /* Calculate and return the difference. */ -L(different): - VCTZLSBB(r6, v7) - VEXTUBRX(r5, r6, v4) - VEXTUBRX(r4, r6, v5) - subf r3, r4, r5 - extsw r3, r3 - blr - - .align 4 -L(different_nocmpb): - neg r3, r9 - and r9, r9, r3 - cntlzd r9, r9 - subfic r9, r9, 63 - srd r3, r8, r9 - srd r10, r10, r9 - rldicl r10, r10, 0, 56 - rldicl r3, r3, 0, 56 - subf r3, r10, r3 - extsw r3, r3 - blr - - .align 4 -L(pagecross_check): - subfic r9, r9, 4096 - subfic r7, r7, 4096 - cmpld cr7, r7, r9 - bge cr7, L(pagecross) - mr r7, r9 - - /* If unaligned 16 bytes reads across a 4K page boundary, it uses - a simple byte a byte comparison until the page alignment for s1 - is reached. */ -L(pagecross): - add r7, r3, r7 - subf r9, r3, r7 - mtctr r9 - - .align 4 -L(pagecross_loop): - /* Loads a byte from s1 and s2, compare if *s1 is equal to *s2 - and if *s1 is '\0'. */ - lbz r9, 0(r3) - lbz r10, 0(r4) - addi r3, r3, 1 - addi r4, r4, 1 - cmplw cr7, r9, r10 - cmpdi cr5, r9, r0 - bne cr7, L(pagecross_ne) - beq cr5, L(pagecross_nullfound) - bdnz L(pagecross_loop) - b L(align) - - .align 4 -L(pagecross_ne): - extsw r3, r9 - mr r9, r10 -L(pagecross_retdiff): - subf r9, r9, r3 - extsw r3, r9 - blr - - .align 4 -L(pagecross_nullfound): - li r3, 0 - b L(pagecross_retdiff) -END (STRCMP) -libc_hidden_builtin_def (strcmp) -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc64/power9/strncmp.S b/sysdeps/powerpc/powerpc64/power9/strncmp.S deleted file mode 100644 index c946a5c638..0000000000 --- a/sysdeps/powerpc/powerpc64/power9/strncmp.S +++ /dev/null @@ -1,379 +0,0 @@ -/* Optimized strncmp implementation for PowerPC64/POWER9. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ -#ifdef __LITTLE_ENDIAN__ -#include - -/* Implements the function - - int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t [r5] n) - - The implementation uses unaligned doubleword access to avoid specialized - code paths depending of data alignment for first 32 bytes and uses - vectorised loops after that. */ - -#ifndef STRNCMP -# define STRNCMP strncmp -#endif - -/* TODO: Change this to actual instructions when minimum binutils is upgraded - to 2.27. Macros are defined below for these newer instructions in order - to maintain compatibility. */ -# define VCTZLSBB(r,v) .long (0x10010602 | ((r)<<(32-11)) | ((v)<<(32-21))) - -# define VEXTUBRX(t,a,b) .long (0x1000070d \ - | ((t)<<(32-11)) \ - | ((a)<<(32-16)) \ - | ((b)<<(32-21)) ) - -# define VCMPNEZB(t,a,b) .long (0x10000507 \ - | ((t)<<(32-11)) \ - | ((a)<<(32-16)) \ - | ((b)<<(32-21)) ) - -/* Get 16 bytes for unaligned case. - reg1: Vector to hold next 16 bytes. - reg2: Address to read from. - reg3: Permute control vector. */ -# define GET16BYTES(reg1, reg2, reg3) \ - lvx reg1, 0, reg2; \ - vperm v8, v2, reg1, reg3; \ - vcmpequb. v8, v0, v8; \ - beq cr6, 1f; \ - vspltisb v9, 0; \ - b 2f; \ - .align 4; \ -1: \ - cmplw cr6, r5, r11; \ - ble cr6, 2f; \ - addi r6, reg2, 16; \ - lvx v9, 0, r6; \ -2: \ - vperm reg1, v9, reg1, reg3; - -/* TODO: change this to .machine power9 when minimum binutils - is upgraded to 2.27. */ - .machine power7 -EALIGN (STRNCMP, 4, 0) - /* Check if size is 0. */ - cmpdi cr0, r5, 0 - beq cr0, L(ret0) - li r0, 0 - - /* Check if [s1]+32 or [s2]+32 will cross a 4K page boundary using - the code: - - (((size_t) s1) % PAGE_SIZE > (PAGE_SIZE - ITER_SIZE)) - - with PAGE_SIZE being 4096 and ITER_SIZE begin 32. */ - rldicl r8, r3, 0, 52 - cmpldi cr7, r8, 4096-32 - bgt cr7, L(pagecross) - rldicl r9, r4, 0, 52 - cmpldi cr7, r9, 4096-32 - bgt cr7, L(pagecross) - - /* For short strings up to 32 bytes, load both s1 and s2 using - unaligned dwords and compare. */ - - ld r7, 0(r3) - ld r9, 0(r4) - li r8, 0 - cmpb r8, r7, r8 - cmpb r6, r7, r9 - orc. r8, r8, r6 - bne cr0, L(different1) - - /* If the strings compared are equal, but size is less or equal - to 8, return 0. */ - cmpldi cr7, r5, 8 - li r9, 0 - ble cr7, L(ret1) - addi r5, r5, -8 - - ld r7, 8(r3) - ld r9, 8(r4) - cmpb r8, r7, r8 - cmpb r6, r7, r9 - orc. r8, r8, r6 - bne cr0, L(different1) - cmpldi cr7, r5, 8 - mr r9, r8 - ble cr7, L(ret1) - /* Update pointers and size. */ - addi r5, r5, -8 - addi r3, r3, 16 - addi r4, r4, 16 - - ld r7, 0(r3) - ld r9, 0(r4) - li r8, 0 - cmpb r8, r7, r8 - cmpb r6, r7, r9 - orc. r8, r8, r6 - bne cr0, L(different1) - cmpldi cr7, r5, 8 - li r9, 0 - ble cr7, L(ret1) - addi r5, r5, -8 - - ld r7, 8(r3) - ld r9, 8(r4) - cmpb r8, r7, r8 - cmpb r6, r7, r9 - orc. r8, r8, r6 - bne cr0, L(different1) - cmpldi cr7, r5, 8 - mr r9, r8 - ble cr7, L(ret1) - - /* Update pointers and size. */ - addi r5, r5, -8 - addi r3, r3, 16 - addi r4, r4, 16 -L(align): - /* Now it has checked for first 32 bytes, align source1 to doubleword - and adjust source2 address. */ - vspltisb v0, 0 - vspltisb v2, -1 - or r6, r4, r3 - andi. r6, r6, 0xF - beq cr0, L(aligned) - lvsr v6, 0, r4 /* Compute mask. */ - clrldi r6, r4, 60 - subfic r11, r6, 16 - andi. r6, r3, 0xF - beq cr0, L(s1_align) - /* Both s1 and s2 are unaligned. */ - GET16BYTES(v5, r4, v6) - lvsr v10, 0, r3 /* Compute mask. */ - clrldi r6, r3, 60 - subfic r11, r6, 16 - GET16BYTES(v4, r3, v10) - VCMPNEZB(v7, v5, v4) - beq cr6, L(match) - b L(different) - - /* Align s1 to qw and adjust s2 address. */ - .align 4 -L(match): - cmpldi cr7, r5, 16 - ble cr7, L(ret0) - subf r5, r11, r5 - add r3, r3, r11 - add r4, r4, r11 - andi. r11, r4, 0xF - beq cr0, L(aligned) - lvsr v6, 0, r4 - clrldi r6, r4, 60 - subfic r11, r6, 16 - /* There are 2 loops depending on the input alignment. - Each loop gets 16 bytes from s1 and s2, checks for null - and compares them. Loops until a mismatch or null occurs. */ -L(s1_align): - lvx v4, 0, r3 - GET16BYTES(v5, r4, v6) - VCMPNEZB(v7, v5, v4) - bne cr6, L(different) - cmpldi cr7, r5, 16 - ble cr7, L(ret0) - addi r5, r5, -16 - addi r3, r3, 16 - addi r4, r4, 16 - - lvx v4, 0, r3 - GET16BYTES(v5, r4, v6) - VCMPNEZB(v7, v5, v4) - bne cr6, L(different) - cmpldi cr7, r5, 16 - ble cr7, L(ret0) - addi r5, r5, -16 - addi r3, r3, 16 - addi r4, r4, 16 - - lvx v4, 0, r3 - GET16BYTES(v5, r4, v6) - VCMPNEZB(v7, v5, v4) - bne cr6, L(different) - cmpldi cr7, r5, 16 - ble cr7, L(ret0) - addi r5, r5, -16 - addi r3, r3, 16 - addi r4, r4, 16 - - lvx v4, 0, r3 - GET16BYTES(v5, r4, v6) - VCMPNEZB(v7, v5, v4) - bne cr6, L(different) - cmpldi cr7, r5, 16 - ble cr7, L(ret0) - addi r5, r5, -16 - addi r3, r3, 16 - addi r4, r4, 16 - b L(s1_align) - .align 4 -L(aligned): - lvx v4, 0, r3 - lvx v5, 0, r4 - VCMPNEZB(v7, v5, v4) - bne cr6, L(different) - cmpldi cr7, r5, 16 - ble cr7, L(ret0) - addi r5, r5, -16 - addi r3, r3, 16 - addi r4, r4, 16 - - lvx v4, 0, r3 - lvx v5, 0, r4 - VCMPNEZB(v7, v5, v4) - bne cr6, L(different) - cmpldi cr7, r5, 16 - ble cr7, L(ret0) - addi r5, r5, -16 - addi r3, r3, 16 - addi r4, r4, 16 - - lvx v4, 0, r3 - lvx v5, 0, r4 - VCMPNEZB(v7, v5, v4) - bne cr6, L(different) - cmpldi cr7, r5, 16 - ble cr7, L(ret0) - addi r5, r5, -16 - addi r3, r3, 16 - addi r4, r4, 16 - - lvx v4, 0, r3 - lvx v5, 0, r4 - VCMPNEZB(v7, v5, v4) - bne cr6, L(different) - cmpldi cr7, r5, 16 - ble cr7, L(ret0) - addi r5, r5, -16 - addi r3, r3, 16 - addi r4, r4, 16 - b L(aligned) - /* Calculate and return the difference. */ -L(different): - VCTZLSBB(r6, v7) - cmplw cr7, r5, r6 - ble cr7, L(ret0) - VEXTUBRX(r5, r6, v4) - VEXTUBRX(r4, r6, v5) - subf r3, r4, r5 - extsw r3, r3 - blr - - .align 4 -L(ret0): - li r9, 0 -L(ret1): - mr r3, r9 - blr - - /* The code now checks if r8 and r5 are different by issuing a - cmpb and shifts the result based on its output: - - leadzero = (__builtin_ffsl (z1) - 1); - leadzero = leadzero > (n-1)*8 ? (n-1)*8 : leadzero; - r1 = (r1 >> leadzero) & 0xFFUL; - r2 = (r2 >> leadzero) & 0xFFUL; - return r1 - r2; */ - - .align 4 -L(different1): - neg r11, r8 - sldi r5, r5, 3 - and r8, r11, r8 - addi r5, r5, -8 - cntlzd r8, r8 - subfic r8, r8, 63 - extsw r8, r8 - cmpld cr7, r8, r5 - ble cr7, L(different2) - mr r8, r5 -L(different2): - extsw r8, r8 - srd r7, r7, r8 - srd r9, r9, r8 - rldicl r3, r7, 0, 56 - rldicl r9, r9, 0, 56 - subf r9, r9, 3 - extsw r9, r9 - mr r3, r9 - blr - - /* If unaligned 16 bytes reads across a 4K page boundary, it uses - a simple byte a byte comparison until the page alignment for s1 - is reached. */ - .align 4 -L(pagecross): - lbz r7, 0(r3) - lbz r9, 0(r4) - subfic r8, r8,4095 - cmplw cr7, r9, r7 - bne cr7, L(byte_ne_3) - cmpdi cr7, r9, 0 - beq cr7, L(byte_ne_0) - addi r5, r5, -1 - subf r7, r8, r5 - subf r9, r7, r5 - addi r9, r9, 1 - mtctr r9 - b L(pagecross_loop1) - - .align 4 -L(pagecross_loop0): - beq cr7, L(ret0) - lbz r9, 0(r3) - lbz r8, 0(r4) - addi r5, r5, -1 - cmplw cr7, r9, r8 - cmpdi cr5, r9, 0 - bne cr7, L(byte_ne_2) - beq cr5, L(byte_ne_0) -L(pagecross_loop1): - cmpdi cr7, r5, 0 - addi r3, r3, 1 - addi r4, r4, 1 - bdnz L(pagecross_loop0) - cmpdi cr7, r7, 0 - li r9, 0 - bne+ cr7, L(align) - b L(ret1) - - .align 4 -L(byte_ne_0): - li r7, 0 -L(byte_ne_1): - subf r9, r9, r7 - extsw r9, r9 - b L(ret1) - - .align 4 -L(byte_ne_2): - extsw r7, r9 - mr r9, r8 - b L(byte_ne_1) -L(byte_ne_3): - extsw r7, r7 - b L(byte_ne_1) -END(STRNCMP) -libc_hidden_builtin_def(strncmp) -#else -#include -#endif diff --git a/sysdeps/powerpc/powerpc64/ppc-mcount.S b/sysdeps/powerpc/powerpc64/ppc-mcount.S deleted file mode 100644 index 8312f46644..0000000000 --- a/sysdeps/powerpc/powerpc64/ppc-mcount.S +++ /dev/null @@ -1,39 +0,0 @@ -/* PowerPC64-specific implementation of profiling support. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -/* We don't need to save the parameter-passing registers as gcc takes - care of that for us. Thus this function looks fairly normal. - In fact, the generic code would work for us. */ - -ENTRY(_mcount) - mflr r4 - ld r11, 0(r1) - stdu r1,-FRAME_MIN_SIZE(r1) - cfi_adjust_cfa_offset (FRAME_MIN_SIZE) - std r4, FRAME_MIN_SIZE+FRAME_LR_SAVE(r1) - cfi_offset (lr, FRAME_LR_SAVE) - ld r3, FRAME_LR_SAVE(r11) - bl JUMPTARGET(__mcount_internal) - nop - ld r0, FRAME_MIN_SIZE+FRAME_LR_SAVE(r1) - mtlr r0 - addi r1,r1,FRAME_MIN_SIZE - blr -END(_mcount) - diff --git a/sysdeps/powerpc/powerpc64/register-dump.h b/sysdeps/powerpc/powerpc64/register-dump.h deleted file mode 100644 index 215e42b63f..0000000000 --- a/sysdeps/powerpc/powerpc64/register-dump.h +++ /dev/null @@ -1,124 +0,0 @@ -/* Dump registers. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include <_itoa.h> - -/* This prints out the information in the following form: */ -static const char dumpform[] = "\ -Register dump:\n\ -sr0=000000000000020% sr1=000000000000021% dar=000000000000029% dsi=000002a%\n\ -lr=000000000000024% ctr=000000000000023% gr3*=000000000000022% trap=0000028%\n\ -ccr=0000026% xer=0000025%\n\ -gr0-3: 000000000000000% 000000000000001% 000000000000002% 000000000000003%\n\ -gr4-7: 000000000000004% 000000000000005% 000000000000006% 000000000000007%\n\ -gr8-11: 000000000000008% 000000000000009% 00000000000000a% 00000000000000b%\n\ -gr12-15: 00000000000000c% 00000000000000d% 00000000000000e% 00000000000000f%\n\ -gr16-19: 000000000000010% 000000000000011% 000000000000012% 000000000000013%\n\ -gr20-23: 000000000000014% 000000000000015% 000000000000016% 000000000000017%\n\ -gr24-27: 000000000000018% 000000000000019% 00000000000001a% 00000000000001b%\n\ -gr28-31: 00000000000001c% 00000000000001d% 00000000000001e% 00000000000001f%\n\ -fscr=000000000000050%\n\ -fp0-3: 000000000000030% 000000000000031% 000000000000032% 000000000000033%\n\ -fp4-7: 000000000000034% 000000000000035% 000000000000036% 000000000000037%\n\ -fp8-11: 000000000000038% 000000000000038% 00000000000003a% 00000000000003b%\n\ -fp12-15: 00000000000003c% 00000000000003d% 00000000000003e% 00000000000003f%\n\ -fp16-19: 000000000000040% 000000000000041% 000000000000042% 000000000000043%\n\ -fp20-23: 000000000000044% 000000000000045% 000000000000046% 000000000000047%\n\ -fp24-27: 000000000000048% 000000000000049% 00000000000004a% 00000000000004b%\n\ -fp28-31: 00000000000004c% 00000000000004d% 00000000000004e% 00000000000004f%\n\ -"; - -/* Most of the fields are self-explanatory. 'sr0' is the next - instruction to execute, from SRR0, which may have some relationship - with the instruction that caused the exception. 'r3*' is the value - that will be returned in register 3 when the current system call - returns. 'sr1' is SRR1, bits 16-31 of which are copied from the MSR: - - 16 - External interrupt enable - 17 - Privilege level (1=user, 0=supervisor) - 18 - FP available - 19 - Machine check enable (if clear, processor locks up on machine check) - 20 - FP exception mode bit 0 (FP exceptions recoverable) - 21 - Single-step trace enable - 22 - Branch trace enable - 23 - FP exception mode bit 1 - 25 - exception prefix (if set, exceptions are taken from 0xFFFnnnnn, - otherwise from 0x000nnnnn). - 26 - Instruction address translation enabled. - 27 - Data address translation enabled. - 30 - Exception is recoverable (otherwise, don't try to return). - 31 - Little-endian mode enable. - - 'Trap' is the address of the exception: - - 00200 - Machine check exception (memory parity error, for instance) - 00300 - Data access exception (memory not mapped, see dsisr for why) - 00400 - Instruction access exception (memory not mapped) - 00500 - External interrupt - 00600 - Alignment exception (see dsisr for more information) - 00700 - Program exception (illegal/trap instruction, FP exception) - 00800 - FP unavailable (should not be seen by user code) - 00900 - Decrementer exception (for instance, SIGALRM) - 00A00 - I/O controller interface exception - 00C00 - System call exception (for instance, kill(3)). - 00E00 - FP assist exception (optional FP instructions, etc.) - - 'dar' is the memory location, for traps 00300, 00400, 00600, 00A00. - 'dsisr' has the following bits under trap 00300: - 0 - direct-store error exception - 1 - no page table entry for page - 4 - memory access not permitted - 5 - trying to access I/O controller space or using lwarx/stwcx on - non-write-cached memory - 6 - access was store - 9 - data access breakpoint hit - 10 - segment table search failed to find translation (64-bit ppcs only) - 11 - I/O controller instruction not permitted - For trap 00400, the same bits are set in SRR1 instead. - For trap 00600, bits 12-31 of the DSISR set to allow emulation of - the instruction without actually having to read it from memory. -*/ - -#define xtoi(x) (x >= 'a' ? x + 10 - 'a' : x - '0') - -static void -register_dump (int fd, struct sigcontext *ctx) -{ - char buffer[sizeof(dumpform)]; - char *bufferpos; - unsigned regno; - unsigned long *regs = (unsigned long *)(ctx->regs); - - memcpy(buffer, dumpform, sizeof(dumpform)); - - /* Generate the output. */ - while ((bufferpos = memchr (buffer, '%', sizeof(dumpform)))) - { - regno = xtoi (bufferpos[-1]) | xtoi (bufferpos[-2]) << 4; - memset (bufferpos-2, '0', 3); - _itoa_word (regs[regno], bufferpos+1, 16, 0); - } - - /* Write the output. */ - write (fd, buffer, sizeof(buffer) - 1); -} - - -#define REGISTER_DUMP \ - register_dump (fd, ctx) diff --git a/sysdeps/powerpc/powerpc64/rtld-memset.c b/sysdeps/powerpc/powerpc64/rtld-memset.c deleted file mode 100644 index f3ed8ad1e7..0000000000 --- a/sysdeps/powerpc/powerpc64/rtld-memset.c +++ /dev/null @@ -1,4 +0,0 @@ -/* PPCA2 has a different cache-line size than the usual 128 bytes. To avoid - using code that assumes cache-line size to be 128 bytes (with dcbz - instructions) we use the generic code instead. */ -#include diff --git a/sysdeps/powerpc/powerpc64/setjmp-common.S b/sysdeps/powerpc/powerpc64/setjmp-common.S deleted file mode 100644 index 20f6cf364c..0000000000 --- a/sysdeps/powerpc/powerpc64/setjmp-common.S +++ /dev/null @@ -1,245 +0,0 @@ -/* setjmp for PowerPC64. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#define _ASM -#ifdef __NO_VMX__ -#include -#else -#include -#endif - -#ifndef __NO_VMX__ - .section ".toc","aw" -.LC__dl_hwcap: -# ifdef SHARED -# if IS_IN (rtld) - /* Inside ld.so we use the local alias to avoid runtime GOT - relocations. */ - .tc _rtld_local_ro[TC],_rtld_local_ro -# else - .tc _rtld_global_ro[TC],_rtld_global_ro -# endif -# else - .tc _dl_hwcap[TC],_dl_hwcap -# endif - .section ".text" -#endif - - .machine "altivec" -ENTRY (setjmp_symbol) - CALL_MCOUNT 1 - li r4,1 /* Set second argument to 1. */ - b JUMPTARGET (GLUE(__sigsetjmp_symbol,_ent)) -END (setjmp_symbol) - -#if defined SHARED && !IS_IN (rtld) && !defined __NO_VMX__ -/* When called from within libc we need a special version of _setjmp - that saves r2 since the call won't go via a plt call stub. See - bugz #269. __GI__setjmp is used in csu/libc-start.c when - HAVE_CLEANUP_JMP_BUF is defined. */ -ENTRY (__GI__setjmp) - std r2,FRAME_TOC_SAVE(r1) /* Save the callers TOC in the save area. */ - CALL_MCOUNT 1 - li r4,0 /* Set second argument to 0. */ - b JUMPTARGET (GLUE(__sigsetjmp_symbol,_ent)) -END (__GI__setjmp) -#endif - -ENTRY (_setjmp_symbol) - CALL_MCOUNT 1 - li r4,0 /* Set second argument to 0. */ - b JUMPTARGET (GLUE(__sigsetjmp_symbol,_ent)) -END (_setjmp_symbol) -libc_hidden_def (_setjmp_symbol) - -ENTRY (__sigsetjmp_symbol) - CALL_MCOUNT 2 -JUMPTARGET(GLUE(__sigsetjmp_symbol,_ent)): -#ifdef PTR_MANGLE - mr r5, r1 - PTR_MANGLE (r5, r6) - std r5,(JB_GPR1*8)(3) -#else - std r1,(JB_GPR1*8)(3) -#endif - mflr r0 -#if defined SHARED && !IS_IN (rtld) - ld r5,FRAME_TOC_SAVE(r1) /* Retrieve the callers TOC. */ - std r5,(JB_GPR2*8)(3) -#else - std r2,(JB_GPR2*8)(3) -#endif - /* setjmp probe expects longjmp first argument (8@3), second argument - (-4@4), and target address (8@0), respectively. */ - LIBC_PROBE (setjmp, 3, 8@3, -4@4, 8@0) - std r14,((JB_GPRS+0)*8)(3) - stfd fp14,((JB_FPRS+0)*8)(3) -#ifdef PTR_MANGLE - PTR_MANGLE2 (r0, r6) -#endif - std r0,(JB_LR*8)(3) - std r15,((JB_GPRS+1)*8)(3) - stfd fp15,((JB_FPRS+1)*8)(3) - mfcr r0 - std r16,((JB_GPRS+2)*8)(3) - stfd fp16,((JB_FPRS+2)*8)(3) - stw r0,((JB_CR*8)+4)(3) /* 32-bit CR. */ - std r17,((JB_GPRS+3)*8)(3) - stfd fp17,((JB_FPRS+3)*8)(3) - std r18,((JB_GPRS+4)*8)(3) - stfd fp18,((JB_FPRS+4)*8)(3) - std r19,((JB_GPRS+5)*8)(3) - stfd fp19,((JB_FPRS+5)*8)(3) - std r20,((JB_GPRS+6)*8)(3) - stfd fp20,((JB_FPRS+6)*8)(3) - std r21,((JB_GPRS+7)*8)(3) - stfd fp21,((JB_FPRS+7)*8)(3) - std r22,((JB_GPRS+8)*8)(3) - stfd fp22,((JB_FPRS+8)*8)(3) - std r23,((JB_GPRS+9)*8)(3) - stfd fp23,((JB_FPRS+9)*8)(3) - std r24,((JB_GPRS+10)*8)(3) - stfd fp24,((JB_FPRS+10)*8)(3) - std r25,((JB_GPRS+11)*8)(3) - stfd fp25,((JB_FPRS+11)*8)(3) - std r26,((JB_GPRS+12)*8)(3) - stfd fp26,((JB_FPRS+12)*8)(3) - std r27,((JB_GPRS+13)*8)(3) - stfd fp27,((JB_FPRS+13)*8)(3) - std r28,((JB_GPRS+14)*8)(3) - stfd fp28,((JB_FPRS+14)*8)(3) - std r29,((JB_GPRS+15)*8)(3) - stfd fp29,((JB_FPRS+15)*8)(3) - std r30,((JB_GPRS+16)*8)(3) - stfd fp30,((JB_FPRS+16)*8)(3) - std r31,((JB_GPRS+17)*8)(3) - stfd fp31,((JB_FPRS+17)*8)(3) -#ifndef __NO_VMX__ - ld r6,.LC__dl_hwcap@toc(r2) -# ifdef SHARED - /* Load _rtld-global._dl_hwcap. */ - ld r6,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET(r6) -# else - ld r6,0(r6) /* Load extern _dl_hwcap. */ -# endif - andis. r6,r6,(PPC_FEATURE_HAS_ALTIVEC >> 16) - beq L(no_vmx) - la r5,((JB_VRS)*8)(3) - andi. r6,r5,0xf - mfspr r0,VRSAVE - stw r0,((JB_VRSAVE)*8)(3) /* 32-bit VRSAVE. */ - addi r6,r5,16 - beq+ L(aligned_save_vmx) - - lvsr v0,0,r5 - lvsl v1,0,r5 - addi r6,r5,-16 - -# define save_misaligned_vmx(savevr,prevvr,shiftvr,tmpvr,savegpr,addgpr) \ - addi addgpr,addgpr,32; \ - vperm tmpvr,prevvr,savevr,shiftvr; \ - stvx tmpvr,0,savegpr - - /* - * We have to be careful not to corrupt the data below v20 and - * above v31. To keep things simple we just rotate both ends in - * the opposite direction to our main permute so we can use - * the common macro. - */ - - /* load and rotate data below v20 */ - lvx v2,0,r5 - vperm v2,v2,v2,v1 - save_misaligned_vmx(v20,v2,v0,v3,r5,r6) - save_misaligned_vmx(v21,v20,v0,v3,r6,r5) - save_misaligned_vmx(v22,v21,v0,v3,r5,r6) - save_misaligned_vmx(v23,v22,v0,v3,r6,r5) - save_misaligned_vmx(v24,v23,v0,v3,r5,r6) - save_misaligned_vmx(v25,v24,v0,v3,r6,r5) - save_misaligned_vmx(v26,v25,v0,v3,r5,r6) - save_misaligned_vmx(v27,v26,v0,v3,r6,r5) - save_misaligned_vmx(v28,v27,v0,v3,r5,r6) - save_misaligned_vmx(v29,v28,v0,v3,r6,r5) - save_misaligned_vmx(v30,v29,v0,v3,r5,r6) - save_misaligned_vmx(v31,v30,v0,v3,r6,r5) - /* load and rotate data above v31 */ - lvx v2,0,r6 - vperm v2,v2,v2,v1 - save_misaligned_vmx(v2,v31,v0,v3,r5,r6) - - b L(no_vmx) - -L(aligned_save_vmx): - stvx 20,0,r5 - addi r5,r5,32 - stvx 21,0,r6 - addi r6,r6,32 - stvx 22,0,r5 - addi r5,r5,32 - stvx 23,0,r6 - addi r6,r6,32 - stvx 24,0,r5 - addi r5,r5,32 - stvx 25,0,r6 - addi r6,r6,32 - stvx 26,0,r5 - addi r5,r5,32 - stvx 27,0,r6 - addi r6,r6,32 - stvx 28,0,r5 - addi r5,r5,32 - stvx 29,0,r6 - addi r6,r6,32 - stvx 30,0,r5 - stvx 31,0,r6 -L(no_vmx): -#else - li r6,0 -#endif -#if IS_IN (rtld) - li r3,0 - blr -#elif defined SHARED - b JUMPTARGET (__sigjmp_save_symbol) -#else - mflr r0 - std r0,FRAME_LR_SAVE(r1) - stdu r1,-FRAME_MIN_SIZE(r1) - cfi_adjust_cfa_offset(FRAME_MIN_SIZE) - cfi_offset(lr,FRAME_LR_SAVE) - bl JUMPTARGET (__sigjmp_save_symbol) - nop - ld r0,FRAME_MIN_SIZE+FRAME_LR_SAVE(r1) - addi r1,r1,FRAME_MIN_SIZE - mtlr r0 - blr -#endif -END (__sigsetjmp_symbol) - -#if defined SHARED && !IS_IN (rtld) && !defined __NO_VMX__ -/* When called from within libc we need a special version of __sigsetjmp - that saves r2 since the call won't go via a plt call stub. See - bugz #269. */ -ENTRY (__GI___sigsetjmp) - std r2,FRAME_TOC_SAVE(r1) /* Save the callers TOC in the save area. */ - CALL_MCOUNT 1 - b JUMPTARGET (GLUE(__sigsetjmp_symbol,_ent)) -END (__GI___sigsetjmp) -#endif diff --git a/sysdeps/powerpc/powerpc64/setjmp.S b/sysdeps/powerpc/powerpc64/setjmp.S deleted file mode 100644 index 3f61d28203..0000000000 --- a/sysdeps/powerpc/powerpc64/setjmp.S +++ /dev/null @@ -1,61 +0,0 @@ -/* AltiVec (new) version of setjmp for PowerPC. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#if !IS_IN (libc) -/* Build a non-versioned object for rtld-*. */ -# define setjmp_symbol setjmp -# define _setjmp_symbol _setjmp -# define __sigsetjmp_symbol __sigsetjmp -# define __sigjmp_save_symbol __sigjmp_save -# include "setjmp-common.S" - -#else /* IS_IN (libc) */ -/* Build a versioned object for libc. */ -versioned_symbol (libc, __vmxsetjmp, setjmp, GLIBC_2_3_4) -versioned_symbol (libc, __vmx_setjmp, _setjmp, GLIBC_2_3_4) -versioned_symbol (libc, __vmx__sigsetjmp, __sigsetjmp, GLIBC_2_3_4) -# define setjmp_symbol __vmxsetjmp -# define _setjmp_symbol __vmx_setjmp -# define __sigsetjmp_symbol __vmx__sigsetjmp -# define __sigjmp_save_symbol __vmx__sigjmp_save -# include "setjmp-common.S" -strong_alias (__vmxsetjmp, __vmx__setjmp) -strong_alias (__vmx__sigsetjmp, __setjmp) - -# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4) -# undef setjmp_symbol -# undef _setjmp_symbol -# undef __sigsetjmp_symbol -# undef __sigjmp_save_symbol -# undef JB_SIZE -# define __NO_VMX__ -compat_symbol (libc, __novmxsetjmp, setjmp, GLIBC_2_3) -compat_symbol (libc, __novmx_setjmp,_setjmp, GLIBC_2_3); -compat_symbol (libc, __novmx__sigsetjmp,__sigsetjmp, GLIBC_2_3) -# define setjmp_symbol __novmxsetjmp -# define _setjmp_symbol __novmx_setjmp -# define __sigsetjmp_symbol __novmx__sigsetjmp -# define __sigjmp_save_symbol __novmx__sigjmp_save -# include "setjmp-common.S" -strong_alias (__novmxsetjmp, __novmx__setjmp) -# endif -#endif /* IS_IN (libc) */ diff --git a/sysdeps/powerpc/powerpc64/stackguard-macros.h b/sysdeps/powerpc/powerpc64/stackguard-macros.h deleted file mode 100644 index e80a683e64..0000000000 --- a/sysdeps/powerpc/powerpc64/stackguard-macros.h +++ /dev/null @@ -1,14 +0,0 @@ -#include - -#define STACK_CHK_GUARD \ - ({ uintptr_t x; asm ("ld %0,-28688(13)" : "=r" (x)); x; }) - -#define POINTER_CHK_GUARD \ - ({ \ - uintptr_t x; \ - asm ("ld %0,%1(13)" \ - : "=r" (x) \ - : "i" (offsetof (tcbhead_t, pointer_guard) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) \ - ); \ - x; \ - }) diff --git a/sysdeps/powerpc/powerpc64/start.S b/sysdeps/powerpc/powerpc64/start.S deleted file mode 100644 index 937c39a740..0000000000 --- a/sysdeps/powerpc/powerpc64/start.S +++ /dev/null @@ -1,92 +0,0 @@ -/* Startup code for programs linked with GNU libc. PowerPC64 version. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* We do not want .eh_frame info for crt1.o since crt1.o is linked - before crtbegin.o, the file defining __EH_FRAME_BEGIN__. */ -#undef cfi_startproc -#define cfi_startproc -#undef cfi_endproc -#define cfi_endproc - - /* These are the various addresses we require. */ -#ifdef PIC - .section ".data.rel.ro.local","aw" -#else - .section ".rodata" -#endif - .align 3 -L(start_addresses): - .quad 0 /* was _SDA_BASE_ but not in 64-bit ABI*/ -/* function descriptors so don't need JUMPTARGET */ - .quad main - .quad __libc_csu_init - .quad __libc_csu_fini - - ASM_SIZE_DIRECTIVE(L(start_addresses)) - - .section ".toc","aw" -.L01: - .tc L(start_addresses)[TC],L(start_addresses) - .section ".text" -ENTRY(_start) - /* Save the stack pointer, in case we're statically linked under Linux. */ - mr r9,r1 - /* Set up an initial stack frame, and clear the LR. */ - clrrdi r1,r1,4 - li r0,0 - stdu r1,-128(r1) - mtlr r0 - std r0,0(r1) - - /* put the address of start_addresses in r8... ** -** PPC64 ABI uses R13 for thread local, so we leave it alone */ - ld r8,.L01@toc(r2) - - /* and continue in libc-start, in glibc. */ - b JUMPTARGET(__libc_start_main) -/* The linker needs this nop to recognize that it's OK to call via a - TOC adjusting stub. */ - nop - -END(_start) - -/* Define a symbol for the first piece of initialized data. */ - .section ".data" - .globl __data_start -__data_start: - .long 0 -weak_alias (__data_start, data_start) diff --git a/sysdeps/powerpc/powerpc64/strchr.S b/sysdeps/powerpc/powerpc64/strchr.S deleted file mode 100644 index cbfcc14cfe..0000000000 --- a/sysdeps/powerpc/powerpc64/strchr.S +++ /dev/null @@ -1,155 +0,0 @@ -/* Optimized strchr implementation for PowerPC64. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* See strlen.s for comments on how this works. */ - -/* char * [r3] strchr (const char *s [r3] , int c [r4] ) */ - -#ifndef STRCHR -# define STRCHR strchr -#endif - -ENTRY (STRCHR) - CALL_MCOUNT 2 - -#define rTMP1 r0 -#define rRTN r3 /* outgoing result */ -#define rSTR r8 /* current word pointer */ -#define rCHR r4 /* byte we're looking for, spread over the whole word */ -#define rWORD r5 /* the current word */ -#define rCLZB rCHR /* leading zero byte count */ -#define rFEFE r6 /* constant 0xfefefefefefefeff (-0x0101010101010101) */ -#define r7F7F r7 /* constant 0x7f7f7f7f7f7f7f7f */ -#define rTMP2 r9 -#define rIGN r10 /* number of bits we should ignore in the first word */ -#define rMASK r11 /* mask with the bits to ignore set to 0 */ -#define rTMP3 r12 -#define rTMP4 rIGN -#define rTMP5 rMASK - - dcbt 0,rRTN - insrdi rCHR, rCHR, 8, 48 - li rMASK, -1 - insrdi rCHR, rCHR, 16, 32 - rlwinm rIGN, rRTN, 3, 26, 28 - insrdi rCHR, rCHR, 32, 0 - lis rFEFE, -0x101 - lis r7F7F, 0x7f7f - clrrdi rSTR, rRTN, 3 - addi rFEFE, rFEFE, -0x101 - addi r7F7F, r7F7F, 0x7f7f - sldi rTMP1, rFEFE, 32 - insrdi r7F7F, r7F7F, 32, 0 - add rFEFE, rFEFE, rTMP1 -/* Test the first (partial?) word. */ - ld rWORD, 0(rSTR) -#ifdef __LITTLE_ENDIAN__ - sld rMASK, rMASK, rIGN -#else - srd rMASK, rMASK, rIGN -#endif - orc rWORD, rWORD, rMASK - add rTMP1, rFEFE, rWORD - nor rTMP2, r7F7F, rWORD - and. rTMP4, rTMP1, rTMP2 - xor rTMP3, rCHR, rWORD - orc rTMP3, rTMP3, rMASK - b L(loopentry) - -/* The loop. */ - -L(loop): - ldu rWORD, 8(rSTR) - and. rTMP5, rTMP1, rTMP2 -/* Test for 0. */ - add rTMP1, rFEFE, rWORD /* x - 0x01010101. */ - nor rTMP2, r7F7F, rWORD /* ~(x | 0x7f7f7f7f) == ~x & 0x80808080. */ - bne L(foundit) - and. rTMP4, rTMP1, rTMP2 /* (x - 0x01010101) & ~x & 0x80808080. */ -/* Start test for the bytes we're looking for. */ - xor rTMP3, rCHR, rWORD -L(loopentry): - add rTMP1, rFEFE, rTMP3 - nor rTMP2, r7F7F, rTMP3 - beq L(loop) - -/* There is a zero byte in the word, but may also be a matching byte (either - before or after the zero byte). In fact, we may be looking for a - zero byte, in which case we return a match. */ - and. rTMP5, rTMP1, rTMP2 - li rRTN, 0 - beqlr -/* At this point: - rTMP5 bytes are 0x80 for each match of c, 0 otherwise. - rTMP4 bytes are 0x80 for each match of 0, 0 otherwise. - But there may be false matches in the next most significant byte from - a true match due to carries. This means we need to recalculate the - matches using a longer method for big-endian. */ -#ifdef __LITTLE_ENDIAN__ - addi rTMP1, rTMP5, -1 - andc rTMP1, rTMP1, rTMP5 - cntlzd rCLZB, rTMP1 - addi rTMP2, rTMP4, -1 - andc rTMP2, rTMP2, rTMP4 - cmpld rTMP1, rTMP2 - bgtlr - subfic rCLZB, rCLZB, 64-7 -#else -/* I think we could reduce this by two instructions by keeping the "nor" - results from the loop for reuse here. See strlen.S tail. Similarly - one instruction could be pruned from L(foundit). */ - and rFEFE, r7F7F, rWORD - or rTMP5, r7F7F, rWORD - and rTMP1, r7F7F, rTMP3 - or rTMP4, r7F7F, rTMP3 - add rFEFE, rFEFE, r7F7F - add rTMP1, rTMP1, r7F7F - nor rWORD, rTMP5, rFEFE - nor rTMP2, rTMP4, rTMP1 - cntlzd rCLZB, rTMP2 - cmpld rWORD, rTMP2 - bgtlr -#endif - srdi rCLZB, rCLZB, 3 - add rRTN, rSTR, rCLZB - blr - -L(foundit): -#ifdef __LITTLE_ENDIAN__ - addi rTMP1, rTMP5, -1 - andc rTMP1, rTMP1, rTMP5 - cntlzd rCLZB, rTMP1 - subfic rCLZB, rCLZB, 64-7-64 - sradi rCLZB, rCLZB, 3 -#else - and rTMP1, r7F7F, rTMP3 - or rTMP4, r7F7F, rTMP3 - add rTMP1, rTMP1, r7F7F - nor rTMP2, rTMP4, rTMP1 - cntlzd rCLZB, rTMP2 - subi rSTR, rSTR, 8 - srdi rCLZB, rCLZB, 3 -#endif - add rRTN, rSTR, rCLZB - blr -END (STRCHR) - -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/powerpc/powerpc64/strcmp.S b/sysdeps/powerpc/powerpc64/strcmp.S deleted file mode 100644 index ab5f8c231c..0000000000 --- a/sysdeps/powerpc/powerpc64/strcmp.S +++ /dev/null @@ -1,180 +0,0 @@ -/* Optimized strcmp implementation for PowerPC64. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* See strlen.s for comments on how the end-of-string testing works. */ - -/* int [r3] strcmp (const char *s1 [r3], const char *s2 [r4]) */ - -#ifndef STRCMP -# define STRCMP strcmp -#endif - -EALIGN (STRCMP, 4, 0) - CALL_MCOUNT 2 - -#define rTMP2 r0 -#define rRTN r3 -#define rSTR1 r3 /* first string arg */ -#define rSTR2 r4 /* second string arg */ -#define rWORD1 r5 /* current word in s1 */ -#define rWORD2 r6 /* current word in s2 */ -#define rFEFE r7 /* constant 0xfefefefefefefeff (-0x0101010101010101) */ -#define r7F7F r8 /* constant 0x7f7f7f7f7f7f7f7f */ -#define rNEG r9 /* ~(word in s1 | 0x7f7f7f7f7f7f7f7f) */ -#define rBITDIF r10 /* bits that differ in s1 & s2 words */ -#define rTMP r11 - - dcbt 0,rSTR1 - or rTMP, rSTR2, rSTR1 - dcbt 0,rSTR2 - clrldi. rTMP, rTMP, 61 - lis rFEFE, -0x101 - bne L(unaligned) - - ld rWORD1, 0(rSTR1) - ld rWORD2, 0(rSTR2) - lis r7F7F, 0x7f7f - addi rFEFE, rFEFE, -0x101 - addi r7F7F, r7F7F, 0x7f7f - sldi rTMP, rFEFE, 32 - insrdi r7F7F, r7F7F, 32, 0 - add rFEFE, rFEFE, rTMP - b L(g1) - -L(g0): ldu rWORD1, 8(rSTR1) - bne cr1, L(different) - ldu rWORD2, 8(rSTR2) -L(g1): add rTMP, rFEFE, rWORD1 - nor rNEG, r7F7F, rWORD1 - and. rTMP, rTMP, rNEG - cmpd cr1, rWORD1, rWORD2 - beq+ L(g0) - -/* OK. We've hit the end of the string. We need to be careful that - we don't compare two strings as different because of gunk beyond - the end of the strings... */ -#ifdef __LITTLE_ENDIAN__ -L(endstring): - addi rTMP2, rTMP, -1 - beq cr1, L(equal) - andc rTMP2, rTMP2, rTMP - rldimi rTMP2, rTMP2, 1, 0 - and rWORD2, rWORD2, rTMP2 /* Mask off gunk. */ - and rWORD1, rWORD1, rTMP2 - cmpd cr1, rWORD1, rWORD2 - beq cr1, L(equal) - xor rBITDIF, rWORD1, rWORD2 /* rBITDIF has bits that differ. */ - neg rNEG, rBITDIF - and rNEG, rNEG, rBITDIF /* rNEG has LS bit that differs. */ - cntlzd rNEG, rNEG /* bitcount of the bit. */ - andi. rNEG, rNEG, 56 /* bitcount to LS byte that differs. */ - sld rWORD1, rWORD1, rNEG /* shift left to clear MS bytes. */ - sld rWORD2, rWORD2, rNEG - xor. rBITDIF, rWORD1, rWORD2 - sub rRTN, rWORD1, rWORD2 - blt- L(highbit) - sradi rRTN, rRTN, 63 /* must return an int. */ - ori rRTN, rRTN, 1 - blr -L(equal): - li rRTN, 0 - blr - -L(different): - ld rWORD1, -8(rSTR1) - xor rBITDIF, rWORD1, rWORD2 /* rBITDIF has bits that differ. */ - neg rNEG, rBITDIF - and rNEG, rNEG, rBITDIF /* rNEG has LS bit that differs. */ - cntlzd rNEG, rNEG /* bitcount of the bit. */ - andi. rNEG, rNEG, 56 /* bitcount to LS byte that differs. */ - sld rWORD1, rWORD1, rNEG /* shift left to clear MS bytes. */ - sld rWORD2, rWORD2, rNEG - xor. rBITDIF, rWORD1, rWORD2 - sub rRTN, rWORD1, rWORD2 - blt- L(highbit) - sradi rRTN, rRTN, 63 - ori rRTN, rRTN, 1 - blr -L(highbit): - sradi rRTN, rWORD2, 63 - ori rRTN, rRTN, 1 - blr - -#else -L(endstring): - and rTMP, r7F7F, rWORD1 - beq cr1, L(equal) - add rTMP, rTMP, r7F7F - xor. rBITDIF, rWORD1, rWORD2 - andc rNEG, rNEG, rTMP - blt- L(highbit) - cntlzd rBITDIF, rBITDIF - cntlzd rNEG, rNEG - addi rNEG, rNEG, 7 - cmpd cr1, rNEG, rBITDIF - sub rRTN, rWORD1, rWORD2 - blt- cr1, L(equal) - sradi rRTN, rRTN, 63 /* must return an int. */ - ori rRTN, rRTN, 1 - blr -L(equal): - li rRTN, 0 - blr - -L(different): - ld rWORD1, -8(rSTR1) - xor. rBITDIF, rWORD1, rWORD2 - sub rRTN, rWORD1, rWORD2 - blt- L(highbit) - sradi rRTN, rRTN, 63 - ori rRTN, rRTN, 1 - blr -L(highbit): - sradi rRTN, rWORD2, 63 - ori rRTN, rRTN, 1 - blr -#endif - -/* Oh well. In this case, we just do a byte-by-byte comparison. */ - .align 4 -L(unaligned): - lbz rWORD1, 0(rSTR1) - lbz rWORD2, 0(rSTR2) - b L(u1) - -L(u0): lbzu rWORD1, 1(rSTR1) - bne- L(u4) - lbzu rWORD2, 1(rSTR2) -L(u1): cmpwi cr1, rWORD1, 0 - beq- cr1, L(u3) - cmpd rWORD1, rWORD2 - bne- L(u3) - lbzu rWORD1, 1(rSTR1) - lbzu rWORD2, 1(rSTR2) - cmpdi cr1, rWORD1, 0 - cmpd rWORD1, rWORD2 - bne+ cr1, L(u0) -L(u3): sub rRTN, rWORD1, rWORD2 - blr -L(u4): lbz rWORD1, -1(rSTR1) - sub rRTN, rWORD1, rWORD2 - blr -END (STRCMP) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/powerpc/powerpc64/strlen.S b/sysdeps/powerpc/powerpc64/strlen.S deleted file mode 100644 index 1466624c6a..0000000000 --- a/sysdeps/powerpc/powerpc64/strlen.S +++ /dev/null @@ -1,203 +0,0 @@ -/* Optimized strlen implementation for PowerPC64. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* The algorithm here uses the following techniques: - - 1) Given a word 'x', we can test to see if it contains any 0 bytes - by subtracting 0x01010101, and seeing if any of the high bits of each - byte changed from 0 to 1. This works because the least significant - 0 byte must have had no incoming carry (otherwise it's not the least - significant), so it is 0x00 - 0x01 == 0xff. For all other - byte values, either they have the high bit set initially, or when - 1 is subtracted you get a value in the range 0x00-0x7f, none of which - have their high bit set. The expression here is - (x + 0xfefefeff) & ~(x | 0x7f7f7f7f), which gives 0x00000000 when - there were no 0x00 bytes in the word. You get 0x80 in bytes that - match, but possibly false 0x80 matches in the next more significant - byte to a true match due to carries. For little-endian this is - of no consequence since the least significant match is the one - we're interested in, but big-endian needs method 2 to find which - byte matches. - - 2) Given a word 'x', we can test to see _which_ byte was zero by - calculating ~(((x & 0x7f7f7f7f) + 0x7f7f7f7f) | x | 0x7f7f7f7f). - This produces 0x80 in each byte that was zero, and 0x00 in all - the other bytes. The '| 0x7f7f7f7f' clears the low 7 bits in each - byte, and the '| x' part ensures that bytes with the high bit set - produce 0x00. The addition will carry into the high bit of each byte - iff that byte had one of its low 7 bits set. We can then just see - which was the most significant bit set and divide by 8 to find how - many to add to the index. - This is from the book 'The PowerPC Compiler Writer's Guide', - by Steve Hoxey, Faraydon Karim, Bill Hay and Hank Warren. - - We deal with strings not aligned to a word boundary by taking the - first word and ensuring that bytes not part of the string - are treated as nonzero. To allow for memory latency, we unroll the - loop a few times, being careful to ensure that we do not read ahead - across cache line boundaries. - - Questions to answer: - 1) How long are strings passed to strlen? If they're often really long, - we should probably use cache management instructions and/or unroll the - loop more. If they're often quite short, it might be better to use - fact (2) in the inner loop than have to recalculate it. - 2) How popular are bytes with the high bit set? If they are very rare, - on some processors it might be useful to use the simpler expression - ~((x - 0x01010101) | 0x7f7f7f7f) (that is, on processors with only one - ALU), but this fails when any character has its high bit set. - - Answer: - 1) Added a Data Cache Block Touch early to prefetch the first 128 - byte cache line. Adding dcbt instructions to the loop would not be - effective since most strings will be shorter than the cache line. */ - -/* Some notes on register usage: Under the SVR4 ABI, we can use registers - 0 and 3 through 12 (so long as we don't call any procedures) without - saving them. We can also use registers 14 through 31 if we save them. - We can't use r1 (it's the stack pointer), r2 nor r13 because the user - program may expect them to hold their usual value if we get sent - a signal. Integer parameters are passed in r3 through r10. - We can use condition registers cr0, cr1, cr5, cr6, and cr7 without saving - them, the others we must save. */ - -/* int [r3] strlen (char *s [r3]) */ - -#ifndef STRLEN -# define STRLEN strlen -#endif - -ENTRY (STRLEN) - CALL_MCOUNT 1 - -#define rTMP4 r0 -#define rRTN r3 /* incoming STR arg, outgoing result */ -#define rSTR r4 /* current string position */ -#define rPADN r5 /* number of padding bits we prepend to the - string to make it start at a word boundary */ -#define rFEFE r6 /* constant 0xfefefefefefefeff (-0x0101010101010101) */ -#define r7F7F r7 /* constant 0x7f7f7f7f7f7f7f7f */ -#define rWORD1 r8 /* current string doubleword */ -#define rWORD2 r9 /* next string doubleword */ -#define rMASK r9 /* mask for first string doubleword */ -#define rTMP1 r10 -#define rTMP2 r11 -#define rTMP3 r12 - - dcbt 0,rRTN - clrrdi rSTR, rRTN, 3 - lis r7F7F, 0x7f7f - rlwinm rPADN, rRTN, 3, 26, 28 - ld rWORD1, 0(rSTR) - addi r7F7F, r7F7F, 0x7f7f - li rMASK, -1 - insrdi r7F7F, r7F7F, 32, 0 -/* We use method (2) on the first two doublewords, because rFEFE isn't - required which reduces setup overhead. Also gives a faster return - for small strings on big-endian due to needing to recalculate with - method (2) anyway. */ -#ifdef __LITTLE_ENDIAN__ - sld rMASK, rMASK, rPADN -#else - srd rMASK, rMASK, rPADN -#endif - and rTMP1, r7F7F, rWORD1 - or rTMP2, r7F7F, rWORD1 - lis rFEFE, -0x101 - add rTMP1, rTMP1, r7F7F - addi rFEFE, rFEFE, -0x101 - nor rTMP3, rTMP2, rTMP1 - and. rTMP3, rTMP3, rMASK - mtcrf 0x01, rRTN - bne L(done0) - sldi rTMP1, rFEFE, 32 - add rFEFE, rFEFE, rTMP1 -/* Are we now aligned to a doubleword boundary? */ - bt 28, L(loop) - -/* Handle second doubleword of pair. */ -/* Perhaps use method (1) here for little-endian, saving one instruction? */ - ldu rWORD1, 8(rSTR) - and rTMP1, r7F7F, rWORD1 - or rTMP2, r7F7F, rWORD1 - add rTMP1, rTMP1, r7F7F - nor. rTMP3, rTMP2, rTMP1 - bne L(done0) - -/* The loop. */ - -L(loop): - ld rWORD1, 8(rSTR) - ldu rWORD2, 16(rSTR) - add rTMP1, rFEFE, rWORD1 - nor rTMP2, r7F7F, rWORD1 - and. rTMP1, rTMP1, rTMP2 - add rTMP3, rFEFE, rWORD2 - nor rTMP4, r7F7F, rWORD2 - bne L(done1) - and. rTMP3, rTMP3, rTMP4 - beq L(loop) - -#ifndef __LITTLE_ENDIAN__ - and rTMP1, r7F7F, rWORD2 - add rTMP1, rTMP1, r7F7F - andc rTMP3, rTMP4, rTMP1 - b L(done0) - -L(done1): - and rTMP1, r7F7F, rWORD1 - subi rSTR, rSTR, 8 - add rTMP1, rTMP1, r7F7F - andc rTMP3, rTMP2, rTMP1 - -/* When we get to here, rSTR points to the first doubleword in the string that - contains a zero byte, and rTMP3 has 0x80 for bytes that are zero, and 0x00 - otherwise. */ -L(done0): - cntlzd rTMP3, rTMP3 - subf rTMP1, rRTN, rSTR - srdi rTMP3, rTMP3, 3 - add rRTN, rTMP1, rTMP3 - blr -#else - -L(done0): - addi rTMP1, rTMP3, -1 /* Form a mask from trailing zeros. */ - andc rTMP1, rTMP1, rTMP3 - cntlzd rTMP1, rTMP1 /* Count bits not in the mask. */ - subf rTMP3, rRTN, rSTR - subfic rTMP1, rTMP1, 64-7 - srdi rTMP1, rTMP1, 3 - add rRTN, rTMP1, rTMP3 - blr - -L(done1): - addi rTMP3, rTMP1, -1 - andc rTMP3, rTMP3, rTMP1 - cntlzd rTMP3, rTMP3 - subf rTMP1, rRTN, rSTR - subfic rTMP3, rTMP3, 64-7-64 - sradi rTMP3, rTMP3, 3 - add rRTN, rTMP1, rTMP3 - blr -#endif - -END (STRLEN) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/powerpc/powerpc64/strncmp.S b/sysdeps/powerpc/powerpc64/strncmp.S deleted file mode 100644 index 076599804a..0000000000 --- a/sysdeps/powerpc/powerpc64/strncmp.S +++ /dev/null @@ -1,210 +0,0 @@ -/* Optimized strcmp implementation for PowerPC64. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* See strlen.s for comments on how the end-of-string testing works. */ - -/* int [r3] strncmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */ - -#ifndef STRNCMP -# define STRNCMP strncmp -#endif - -EALIGN (STRNCMP, 4, 0) - CALL_MCOUNT 3 - -#define rTMP2 r0 -#define rRTN r3 -#define rSTR1 r3 /* first string arg */ -#define rSTR2 r4 /* second string arg */ -#define rN r5 /* max string length */ -#define rWORD1 r6 /* current word in s1 */ -#define rWORD2 r7 /* current word in s2 */ -#define rFEFE r8 /* constant 0xfefefefefefefeff (-0x0101010101010101) */ -#define r7F7F r9 /* constant 0x7f7f7f7f7f7f7f7f */ -#define rNEG r10 /* ~(word in s1 | 0x7f7f7f7f7f7f7f7f) */ -#define rBITDIF r11 /* bits that differ in s1 & s2 words */ -#define rTMP r12 - - dcbt 0,rSTR1 - or rTMP, rSTR2, rSTR1 - lis r7F7F, 0x7f7f - dcbt 0,rSTR2 - clrldi. rTMP, rTMP, 61 - cmpldi cr1, rN, 0 - lis rFEFE, -0x101 - bne L(unaligned) -/* We are doubleword aligned so set up for two loops. first a double word - loop, then fall into the byte loop if any residual. */ - srdi. rTMP, rN, 3 - clrldi rN, rN, 61 - addi rFEFE, rFEFE, -0x101 - addi r7F7F, r7F7F, 0x7f7f - cmpldi cr1, rN, 0 - beq L(unaligned) - - mtctr rTMP /* Power4 wants mtctr 1st in dispatch group. */ - ld rWORD1, 0(rSTR1) - ld rWORD2, 0(rSTR2) - sldi rTMP, rFEFE, 32 - insrdi r7F7F, r7F7F, 32, 0 - add rFEFE, rFEFE, rTMP - b L(g1) - -L(g0): - ldu rWORD1, 8(rSTR1) - bne- cr1, L(different) - ldu rWORD2, 8(rSTR2) -L(g1): add rTMP, rFEFE, rWORD1 - nor rNEG, r7F7F, rWORD1 - bdz L(tail) - and. rTMP, rTMP, rNEG - cmpd cr1, rWORD1, rWORD2 - beq+ L(g0) - -/* OK. We've hit the end of the string. We need to be careful that - we don't compare two strings as different because of gunk beyond - the end of the strings... */ - -#ifdef __LITTLE_ENDIAN__ -L(endstring): - addi rTMP2, rTMP, -1 - beq cr1, L(equal) - andc rTMP2, rTMP2, rTMP - rldimi rTMP2, rTMP2, 1, 0 - and rWORD2, rWORD2, rTMP2 /* Mask off gunk. */ - and rWORD1, rWORD1, rTMP2 - cmpd cr1, rWORD1, rWORD2 - beq cr1, L(equal) - xor rBITDIF, rWORD1, rWORD2 /* rBITDIF has bits that differ. */ - neg rNEG, rBITDIF - and rNEG, rNEG, rBITDIF /* rNEG has LS bit that differs. */ - cntlzd rNEG, rNEG /* bitcount of the bit. */ - andi. rNEG, rNEG, 56 /* bitcount to LS byte that differs. */ - sld rWORD1, rWORD1, rNEG /* shift left to clear MS bytes. */ - sld rWORD2, rWORD2, rNEG - xor. rBITDIF, rWORD1, rWORD2 - sub rRTN, rWORD1, rWORD2 - blt- L(highbit) - sradi rRTN, rRTN, 63 /* must return an int. */ - ori rRTN, rRTN, 1 - blr -L(equal): - li rRTN, 0 - blr - -L(different): - ld rWORD1, -8(rSTR1) - xor rBITDIF, rWORD1, rWORD2 /* rBITDIF has bits that differ. */ - neg rNEG, rBITDIF - and rNEG, rNEG, rBITDIF /* rNEG has LS bit that differs. */ - cntlzd rNEG, rNEG /* bitcount of the bit. */ - andi. rNEG, rNEG, 56 /* bitcount to LS byte that differs. */ - sld rWORD1, rWORD1, rNEG /* shift left to clear MS bytes. */ - sld rWORD2, rWORD2, rNEG - xor. rBITDIF, rWORD1, rWORD2 - sub rRTN, rWORD1, rWORD2 - blt- L(highbit) - sradi rRTN, rRTN, 63 - ori rRTN, rRTN, 1 - blr -L(highbit): - sradi rRTN, rWORD2, 63 - ori rRTN, rRTN, 1 - blr - -#else -L(endstring): - and rTMP, r7F7F, rWORD1 - beq cr1, L(equal) - add rTMP, rTMP, r7F7F - xor. rBITDIF, rWORD1, rWORD2 - andc rNEG, rNEG, rTMP - blt- L(highbit) - cntlzd rBITDIF, rBITDIF - cntlzd rNEG, rNEG - addi rNEG, rNEG, 7 - cmpd cr1, rNEG, rBITDIF - sub rRTN, rWORD1, rWORD2 - blt- cr1, L(equal) - sradi rRTN, rRTN, 63 /* must return an int. */ - ori rRTN, rRTN, 1 - blr -L(equal): - li rRTN, 0 - blr - -L(different): - ld rWORD1, -8(rSTR1) - xor. rBITDIF, rWORD1, rWORD2 - sub rRTN, rWORD1, rWORD2 - blt- L(highbit) - sradi rRTN, rRTN, 63 - ori rRTN, rRTN, 1 - blr -L(highbit): - sradi rRTN, rWORD2, 63 - ori rRTN, rRTN, 1 - blr -#endif - -/* Oh well. In this case, we just do a byte-by-byte comparison. */ - .align 4 -L(tail): - and. rTMP, rTMP, rNEG - cmpd cr1, rWORD1, rWORD2 - bne- L(endstring) - addi rSTR1, rSTR1, 8 - bne- cr1, L(different) - addi rSTR2, rSTR2, 8 - cmpldi cr1, rN, 0 -L(unaligned): - mtctr rN /* Power4 wants mtctr 1st in dispatch group */ - bgt cr1, L(uz) -L(ux): - li rRTN, 0 - blr - .align 4 -L(uz): - lbz rWORD1, 0(rSTR1) - lbz rWORD2, 0(rSTR2) - nop - b L(u1) -L(u0): - lbzu rWORD2, 1(rSTR2) -L(u1): - bdz L(u3) - cmpdi cr1, rWORD1, 0 - cmpd rWORD1, rWORD2 - beq- cr1, L(u3) - lbzu rWORD1, 1(rSTR1) - bne- L(u2) - lbzu rWORD2, 1(rSTR2) - bdz L(u3) - cmpdi cr1, rWORD1, 0 - cmpd rWORD1, rWORD2 - bne- L(u3) - lbzu rWORD1, 1(rSTR1) - bne+ cr1, L(u0) - -L(u2): lbzu rWORD1, -1(rSTR1) -L(u3): sub rRTN, rWORD1, rWORD2 - blr -END (STRNCMP) -libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/powerpc/powerpc64/submul_1.S b/sysdeps/powerpc/powerpc64/submul_1.S deleted file mode 100644 index df93b4c3f4..0000000000 --- a/sysdeps/powerpc/powerpc64/submul_1.S +++ /dev/null @@ -1,21 +0,0 @@ -/* PowerPC64 __mpn_addmul_1 -- Multiply a limb vector with a limb and subtract - the result to a second limb vector. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define USE_AS_SUBMUL -#include "addmul_1.S" diff --git a/sysdeps/powerpc/powerpc64/sysdep.h b/sysdeps/powerpc/powerpc64/sysdep.h deleted file mode 100644 index db7c1d78b5..0000000000 --- a/sysdeps/powerpc/powerpc64/sysdep.h +++ /dev/null @@ -1,425 +0,0 @@ -/* Assembly macros for 64-bit PowerPC. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef __ASSEMBLER__ - -/* Stack frame offsets. */ -#if _CALL_ELF != 2 -#define FRAME_MIN_SIZE 112 -#define FRAME_MIN_SIZE_PARM 112 -#define FRAME_BACKCHAIN 0 -#define FRAME_CR_SAVE 8 -#define FRAME_LR_SAVE 16 -#define FRAME_TOC_SAVE 40 -#define FRAME_PARM_SAVE 48 -#define FRAME_PARM1_SAVE 48 -#define FRAME_PARM2_SAVE 56 -#define FRAME_PARM3_SAVE 64 -#define FRAME_PARM4_SAVE 72 -#define FRAME_PARM5_SAVE 80 -#define FRAME_PARM6_SAVE 88 -#define FRAME_PARM7_SAVE 96 -#define FRAME_PARM8_SAVE 104 -#define FRAME_PARM9_SAVE 112 -#else -#define FRAME_MIN_SIZE 32 -#define FRAME_MIN_SIZE_PARM 96 -#define FRAME_BACKCHAIN 0 -#define FRAME_CR_SAVE 8 -#define FRAME_LR_SAVE 16 -#define FRAME_TOC_SAVE 24 -#define FRAME_PARM_SAVE 32 -#define FRAME_PARM1_SAVE 32 -#define FRAME_PARM2_SAVE 40 -#define FRAME_PARM3_SAVE 48 -#define FRAME_PARM4_SAVE 56 -#define FRAME_PARM5_SAVE 64 -#define FRAME_PARM6_SAVE 72 -#define FRAME_PARM7_SAVE 80 -#define FRAME_PARM8_SAVE 88 -#define FRAME_PARM9_SAVE 96 -#endif - -/* Support macros for CALL_MCOUNT. */ -#if _CALL_ELF == 2 -#define call_mcount_parm_offset (-64) -#else -#define call_mcount_parm_offset FRAME_PARM_SAVE -#endif - .macro SAVE_ARG NARG - .if \NARG - SAVE_ARG \NARG-1 - std 2+\NARG,call_mcount_parm_offset-8+8*(\NARG)(1) - .endif - .endm - - .macro REST_ARG NARG - .if \NARG - REST_ARG \NARG-1 - ld 2+\NARG,FRAME_MIN_SIZE_PARM+call_mcount_parm_offset-8+8*(\NARG)(1) - .endif - .endm - - .macro CFI_SAVE_ARG NARG - .if \NARG - CFI_SAVE_ARG \NARG-1 - cfi_offset(2+\NARG,call_mcount_parm_offset-8+8*(\NARG)) - .endif - .endm - - .macro CFI_REST_ARG NARG - .if \NARG - CFI_REST_ARG \NARG-1 - cfi_restore(2+\NARG) - .endif - .endm - -/* If compiled for profiling, call `_mcount' at the start of each function. - see ppc-mcount.S for more details. */ - .macro CALL_MCOUNT NARG -#ifdef PROF - mflr r0 - SAVE_ARG \NARG - std r0,FRAME_LR_SAVE(r1) - stdu r1,-FRAME_MIN_SIZE_PARM(r1) - cfi_adjust_cfa_offset(FRAME_MIN_SIZE_PARM) - cfi_offset(lr,FRAME_LR_SAVE) - CFI_SAVE_ARG \NARG - bl JUMPTARGET (_mcount) -#ifndef SHARED - nop -#endif - ld r0,FRAME_MIN_SIZE_PARM+FRAME_LR_SAVE(r1) - REST_ARG \NARG - mtlr r0 - addi r1,r1,FRAME_MIN_SIZE_PARM - cfi_adjust_cfa_offset(-FRAME_MIN_SIZE_PARM) - cfi_restore(lr) - CFI_REST_ARG \NARG -#endif - .endm - -#if _CALL_ELF != 2 - -/* Macro to prepare for calling via a function pointer. */ - .macro PPC64_LOAD_FUNCPTR PTR - ld r12,0(\PTR) - ld r2,8(\PTR) - mtctr r12 - ld r11,16(\PTR) - .endm - -#ifdef USE_PPC64_OVERLAPPING_OPD -# define OPD_ENT(name) .quad BODY_LABEL (name), .TOC.@tocbase -#else -# define OPD_ENT(name) .quad BODY_LABEL (name), .TOC.@tocbase, 0 -#endif - -#define ENTRY_1(name) \ - .type BODY_LABEL(name),@function; \ - .globl name; \ - .section ".opd","aw"; \ - .align 3; \ -name##: OPD_ENT (name); \ - .previous; - -#define DOT_LABEL(X) X -#define BODY_LABEL(X) .LY##X -#define ENTRY_2(name) \ - .type name,@function; \ - ENTRY_1(name) -#define END_2(name) \ - .size name,.-BODY_LABEL(name); \ - .size BODY_LABEL(name),.-BODY_LABEL(name); -#define LOCALENTRY(name) - -#else /* _CALL_ELF */ - -/* Macro to prepare for calling via a function pointer. */ - .macro PPC64_LOAD_FUNCPTR PTR - mr r12,\PTR - mtctr r12 - .endm - -#define DOT_LABEL(X) X -#define BODY_LABEL(X) X -#define ENTRY_2(name) \ - .globl name; \ - .type name,@function; -#define END_2(name) \ - .size name,.-name; -#define LOCALENTRY(name) \ -1: addis r2,r12,.TOC.-1b@ha; \ - addi r2,r2,.TOC.-1b@l; \ - .localentry name,.-name; - -#endif /* _CALL_ELF */ - -#define ENTRY(name) \ - .section ".text"; \ - ENTRY_2(name) \ - .align ALIGNARG(2); \ -BODY_LABEL(name): \ - cfi_startproc; \ - LOCALENTRY(name) - -#define EALIGN_W_0 /* No words to insert. */ -#define EALIGN_W_1 nop -#define EALIGN_W_2 nop;nop -#define EALIGN_W_3 nop;nop;nop -#define EALIGN_W_4 EALIGN_W_3;nop -#define EALIGN_W_5 EALIGN_W_4;nop -#define EALIGN_W_6 EALIGN_W_5;nop -#define EALIGN_W_7 EALIGN_W_6;nop - -/* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes - past a 2^alignt boundary. */ -#define EALIGN(name, alignt, words) \ - .section ".text"; \ - ENTRY_2(name) \ - .align ALIGNARG(alignt); \ - EALIGN_W_##words; \ -BODY_LABEL(name): \ - cfi_startproc; \ - LOCALENTRY(name) - -/* Local labels stripped out by the linker. */ -#undef L -#define L(x) .L##x - -#define tostring(s) #s -#define stringify(s) tostring(s) -#define XGLUE(a,b) a##b -#define GLUE(a,b) XGLUE(a,b) -#define LT_LABEL(name) GLUE(.LT,name) -#define LT_LABELSUFFIX(name,suffix) GLUE(GLUE(.LT,name),suffix) - -/* Support Traceback tables */ -#define TB_ASM 0x000c000000000000 -#define TB_GLOBALLINK 0x0000800000000000 -#define TB_IS_EPROL 0x0000400000000000 -#define TB_HAS_TBOFF 0x0000200000000000 -#define TB_INT_PROC 0x0000100000000000 -#define TB_HAS_CTL 0x0000080000000000 -#define TB_TOCLESS 0x0000040000000000 -#define TB_FP_PRESENT 0x0000020000000000 -#define TB_LOG_ABORT 0x0000010000000000 -#define TB_INT_HANDL 0x0000008000000000 -#define TB_NAME_PRESENT 0x0000004000000000 -#define TB_USES_ALLOCA 0x0000002000000000 -#define TB_SAVES_CR 0x0000000200000000 -#define TB_SAVES_LR 0x0000000100000000 -#define TB_STORES_BC 0x0000000080000000 -#define TB_FIXUP 0x0000000040000000 -#define TB_FP_SAVED(fprs) (((fprs) & 0x3f) << 24) -#define TB_GPR_SAVED(gprs) (((fprs) & 0x3f) << 16) -#define TB_FIXEDPARMS(parms) (((parms) & 0xff) << 8) -#define TB_FLOATPARMS(parms) (((parms) & 0x7f) << 1) -#define TB_PARMSONSTK 0x0000000000000001 - -#define PPC_HIGHER(v) (((v) >> 32) & 0xffff) -#define TB_DEFAULT TB_ASM | TB_HAS_TBOFF | TB_NAME_PRESENT - -#define TRACEBACK(name) \ -LT_LABEL(name): ; \ - .long 0 ; \ - .quad TB_DEFAULT ; \ - .long LT_LABEL(name)-BODY_LABEL(name) ; \ - .short LT_LABELSUFFIX(name,_name_end)-LT_LABELSUFFIX(name,_name_start) ; \ -LT_LABELSUFFIX(name,_name_start): ;\ - .ascii stringify(name) ; \ -LT_LABELSUFFIX(name,_name_end): ; \ - .align 2 ; - -#define TRACEBACK_MASK(name,mask) \ -LT_LABEL(name): ; \ - .long 0 ; \ - .quad TB_DEFAULT | mask ; \ - .long LT_LABEL(name)-BODY_LABEL(name) ; \ - .short LT_LABELSUFFIX(name,_name_end)-LT_LABELSUFFIX(name,_name_start) ; \ -LT_LABELSUFFIX(name,_name_start): ;\ - .ascii stringify(name) ; \ -LT_LABELSUFFIX(name,_name_end): ; \ - .align 2 ; - -/* END generates Traceback tables */ -#undef END -#define END(name) \ - cfi_endproc; \ - TRACEBACK(name) \ - END_2(name) - -/* This form supports more informative traceback tables */ -#define END_GEN_TB(name,mask) \ - cfi_endproc; \ - TRACEBACK_MASK(name,mask) \ - END_2(name) - -#if !IS_IN(rtld) && defined (ENABLE_LOCK_ELISION) -# define ABORT_TRANSACTION \ - cmpdi 13,0; \ - beq 1f; \ - lwz 0,TM_CAPABLE(13); \ - cmpwi 0,0; \ - beq 1f; \ - li 11,_ABORT_SYSCALL; \ - tabort. 11; \ - .align 4; \ -1: -#else -# define ABORT_TRANSACTION -#endif - -#define DO_CALL(syscall) \ - ABORT_TRANSACTION \ - li 0,syscall; \ - sc - -/* ppc64 is always PIC */ -#undef JUMPTARGET -#define JUMPTARGET(name) DOT_LABEL(name) - -#define PSEUDO(name, syscall_name, args) \ - .section ".text"; \ - ENTRY (name) \ - DO_CALL (SYS_ify (syscall_name)); - -#ifdef SHARED -#define TAIL_CALL_SYSCALL_ERROR \ - b JUMPTARGET(__syscall_error) -#else -/* Static version might be linked into a large app with a toc exceeding - 64k. We can't put a toc adjusting stub on a plain branch, so can't - tail call __syscall_error. */ -#define TAIL_CALL_SYSCALL_ERROR \ - .ifdef .Local_syscall_error; \ - b .Local_syscall_error; \ - .else; \ -.Local_syscall_error: \ - mflr 0; \ - std 0,FRAME_LR_SAVE(1); \ - stdu 1,-FRAME_MIN_SIZE(1); \ - cfi_adjust_cfa_offset(FRAME_MIN_SIZE); \ - cfi_offset(lr,FRAME_LR_SAVE); \ - bl JUMPTARGET(__syscall_error); \ - nop; \ - ld 0,FRAME_MIN_SIZE+FRAME_LR_SAVE(1); \ - addi 1,1,FRAME_MIN_SIZE; \ - cfi_adjust_cfa_offset(-FRAME_MIN_SIZE); \ - mtlr 0; \ - cfi_restore(lr); \ - blr; \ - .endif -#endif - -#define PSEUDO_RET \ - bnslr+; \ - TAIL_CALL_SYSCALL_ERROR - -#define ret PSEUDO_RET - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - END (name) - -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - .section ".text"; \ - ENTRY (name) \ - DO_CALL (SYS_ify (syscall_name)); - -#define PSEUDO_RET_NOERRNO \ - blr - -#define ret_NOERRNO PSEUDO_RET_NOERRNO - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ - END (name) - -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .section ".text"; \ - ENTRY (name) \ - DO_CALL (SYS_ify (syscall_name)); - -#define PSEUDO_RET_ERRVAL \ - blr - -#define ret_ERRVAL PSEUDO_RET_ERRVAL - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) \ - END (name) - -#else /* !__ASSEMBLER__ */ - -#if _CALL_ELF != 2 - -#define PPC64_LOAD_FUNCPTR(ptr) \ - "ld 12,0(" #ptr ");\n" \ - "ld 2,8(" #ptr ");\n" \ - "mtctr 12;\n" \ - "ld 11,16(" #ptr ");" - -#ifdef USE_PPC64_OVERLAPPING_OPD -# define OPD_ENT(name) ".quad " BODY_PREFIX #name ", .TOC.@tocbase;" -#else -# define OPD_ENT(name) ".quad " BODY_PREFIX #name ", .TOC.@tocbase, 0;" -#endif - -#define ENTRY_1(name) \ - ".type " BODY_PREFIX #name ",@function;\n" \ - ".globl " #name ";\n" \ - ".pushsection \".opd\",\"aw\";\n" \ - ".align 3;\n" \ -#name ":\n" \ - OPD_ENT (name) "\n" \ - ".popsection;" - -#define DOT_PREFIX "" -#define BODY_PREFIX ".LY" -#define ENTRY_2(name) \ - ".type " #name ",@function;\n" \ - ENTRY_1(name) -#define END_2(name) \ - ".size " #name ",.-" BODY_PREFIX #name ";\n" \ - ".size " BODY_PREFIX #name ",.-" BODY_PREFIX #name ";" -#define LOCALENTRY(name) - -#else /* _CALL_ELF */ - -#define PPC64_LOAD_FUNCPTR(ptr) \ - "mr 12," #ptr ";\n" \ - "mtctr 12;" - -#define DOT_PREFIX "" -#define BODY_PREFIX "" -#define ENTRY_2(name) \ - ".type " #name ",@function;\n" \ - ".globl " #name ";" -#define END_2(name) \ - ".size " #name ",.-" #name ";" -#define LOCALENTRY(name) \ - "1: addis 2,12,.TOC.-1b@ha;\n" \ - "addi 2,2,.TOC.-1b@l;\n" \ - ".localentry " #name ",.-" #name ";" - -#endif /* _CALL_ELF */ - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/powerpc/powerpc64/tls-macros.h b/sysdeps/powerpc/powerpc64/tls-macros.h deleted file mode 100644 index 42a95ec5c1..0000000000 --- a/sysdeps/powerpc/powerpc64/tls-macros.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Include sysdeps/powerpc/tls-macros.h for __TLS_CALL_CLOBBERS */ -#include_next "tls-macros.h" - -/* PowerPC64 Local Exec TLS access. */ -#define TLS_LE(x) \ - ({ int * __result; \ - asm ("addis %0,13," #x "@tprel@ha\n\t" \ - "addi %0,%0," #x "@tprel@l" \ - : "=b" (__result) ); \ - __result; \ - }) -/* PowerPC64 Initial Exec TLS access. */ -#define TLS_IE(x) \ - ({ int * __result; \ - asm ("ld %0," #x "@got@tprel(2)\n\t" \ - "add %0,%0," #x "@tls" \ - : "=r" (__result) ); \ - __result; \ - }) - -#define __TLS_GET_ADDR "__tls_get_addr" - -/* PowerPC64 Local Dynamic TLS access. */ -#define TLS_LD(x) \ - ({ int * __result; \ - asm ("addi 3,2," #x "@got@tlsld\n\t" \ - "bl " __TLS_GET_ADDR "\n\t" \ - "nop \n\t" \ - "addis %0,3," #x "@dtprel@ha\n\t" \ - "addi %0,%0," #x "@dtprel@l" \ - : "=b" (__result) : \ - : "3", __TLS_CALL_CLOBBERS); \ - __result; \ - }) -/* PowerPC64 General Dynamic TLS access. */ -#define TLS_GD(x) \ - ({ register int *__result __asm__ ("r3"); \ - asm ("addi 3,2," #x "@got@tlsgd\n\t" \ - "bl " __TLS_GET_ADDR "\n\t" \ - "nop " \ - : "=r" (__result) : \ - : __TLS_CALL_CLOBBERS); \ - __result; \ - }) diff --git a/sysdeps/powerpc/powerpc64/tst-audit.h b/sysdeps/powerpc/powerpc64/tst-audit.h deleted file mode 100644 index b25040b9f0..0000000000 --- a/sysdeps/powerpc/powerpc64/tst-audit.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. PowerPC64 version. - - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#if _CALL_ELF != 2 -#define pltenter la_ppc64_gnu_pltenter -#define pltexit la_ppc64_gnu_pltexit -#define La_regs La_ppc64_regs -#define La_retval La_ppc64_retval -#define int_retval lrv_r3 -#else -#define pltenter la_ppc64v2_gnu_pltenter -#define pltexit la_ppc64v2_gnu_pltexit -#define La_regs La_ppc64v2_regs -#define La_retval La_ppc64v2_retval -#define int_retval lrv_r3 -#endif diff --git a/sysdeps/powerpc/powerpc64le/Implies b/sysdeps/powerpc/powerpc64le/Implies deleted file mode 100644 index a105a325f7..0000000000 --- a/sysdeps/powerpc/powerpc64le/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64 diff --git a/sysdeps/powerpc/powerpc64le/fpu/Implies b/sysdeps/powerpc/powerpc64le/fpu/Implies deleted file mode 100644 index c1f617b7da..0000000000 --- a/sysdeps/powerpc/powerpc64le/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/fpu diff --git a/sysdeps/powerpc/powerpc64le/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc64le/fpu/multiarch/Implies deleted file mode 100644 index 8d6531a174..0000000000 --- a/sysdeps/powerpc/powerpc64le/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc64le/multiarch/Implies b/sysdeps/powerpc/powerpc64le/multiarch/Implies deleted file mode 100644 index 30edcf7f9d..0000000000 --- a/sysdeps/powerpc/powerpc64le/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/multiarch diff --git a/sysdeps/powerpc/powerpc64le/power7/Implies b/sysdeps/powerpc/powerpc64le/power7/Implies deleted file mode 100644 index eedef823d5..0000000000 --- a/sysdeps/powerpc/powerpc64le/power7/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power7 diff --git a/sysdeps/powerpc/powerpc64le/power7/fpu/Implies b/sysdeps/powerpc/powerpc64le/power7/fpu/Implies deleted file mode 100644 index 8447198fbc..0000000000 --- a/sysdeps/powerpc/powerpc64le/power7/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power7/fpu diff --git a/sysdeps/powerpc/powerpc64le/power7/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc64le/power7/fpu/multiarch/Implies deleted file mode 100644 index 7fd86fdf87..0000000000 --- a/sysdeps/powerpc/powerpc64le/power7/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power7/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc64le/power7/multiarch/Implies b/sysdeps/powerpc/powerpc64le/power7/multiarch/Implies deleted file mode 100644 index 1fc7b7cd39..0000000000 --- a/sysdeps/powerpc/powerpc64le/power7/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power7/multiarch diff --git a/sysdeps/powerpc/powerpc64le/power8/Implies b/sysdeps/powerpc/powerpc64le/power8/Implies deleted file mode 100644 index 3c37351dcc..0000000000 --- a/sysdeps/powerpc/powerpc64le/power8/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power8 diff --git a/sysdeps/powerpc/powerpc64le/power8/fpu/Implies b/sysdeps/powerpc/powerpc64le/power8/fpu/Implies deleted file mode 100644 index ae0dbaf857..0000000000 --- a/sysdeps/powerpc/powerpc64le/power8/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power8/fpu diff --git a/sysdeps/powerpc/powerpc64le/power8/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc64le/power8/fpu/multiarch/Implies deleted file mode 100644 index f11e1bdba2..0000000000 --- a/sysdeps/powerpc/powerpc64le/power8/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power8/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc64le/power8/multiarch/Implies b/sysdeps/powerpc/powerpc64le/power8/multiarch/Implies deleted file mode 100644 index dd6bca4b36..0000000000 --- a/sysdeps/powerpc/powerpc64le/power8/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power8/multiarch diff --git a/sysdeps/powerpc/powerpc64le/power9/Implies b/sysdeps/powerpc/powerpc64le/power9/Implies deleted file mode 100644 index efe5d4193c..0000000000 --- a/sysdeps/powerpc/powerpc64le/power9/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power9 diff --git a/sysdeps/powerpc/powerpc64le/power9/fpu/Implies b/sysdeps/powerpc/powerpc64le/power9/fpu/Implies deleted file mode 100644 index 3633114b47..0000000000 --- a/sysdeps/powerpc/powerpc64le/power9/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power9/fpu/ diff --git a/sysdeps/powerpc/powerpc64le/power9/fpu/multiarch/Implies b/sysdeps/powerpc/powerpc64le/power9/fpu/multiarch/Implies deleted file mode 100644 index 105948092d..0000000000 --- a/sysdeps/powerpc/powerpc64le/power9/fpu/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power9/fpu/multiarch diff --git a/sysdeps/powerpc/powerpc64le/power9/multiarch/Implies b/sysdeps/powerpc/powerpc64le/power9/multiarch/Implies deleted file mode 100644 index 02be30cfd0..0000000000 --- a/sysdeps/powerpc/powerpc64le/power9/multiarch/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/power9/multiarch diff --git a/sysdeps/powerpc/preconfigure b/sysdeps/powerpc/preconfigure deleted file mode 100644 index 7de2eafd52..0000000000 --- a/sysdeps/powerpc/preconfigure +++ /dev/null @@ -1,20 +0,0 @@ -# preconfigure fragment for powerpc. - -case "$machine" in -powerpc64le) - base_machine=powerpc machine=powerpc/powerpc64le - ;; -powerpc64*) - base_machine=powerpc machine=powerpc/powerpc64 - ;; -powerpc*) - # Check for e500. - $CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null > conftest.i - if grep -q __NO_FPRS__ conftest.i && ! grep -q _SOFT_FLOAT conftest.i; then - base_machine=powerpc machine=powerpc/powerpc32/e500 - else - base_machine=powerpc machine=powerpc/powerpc32 - fi - rm -f conftest.i - ;; -esac diff --git a/sysdeps/powerpc/rtld-global-offsets.sym b/sysdeps/powerpc/rtld-global-offsets.sym deleted file mode 100644 index f5ea5a1466..0000000000 --- a/sysdeps/powerpc/rtld-global-offsets.sym +++ /dev/null @@ -1,8 +0,0 @@ -#define SHARED 1 - -#include - -#define rtld_global_ro_offsetof(mem) offsetof (struct rtld_global_ro, mem) - -RTLD_GLOBAL_RO_DL_HWCAP_OFFSET rtld_global_ro_offsetof (_dl_hwcap) -RTLD_GLOBAL_RO_DL_HWCAP2_OFFSET rtld_global_ro_offsetof (_dl_hwcap2) diff --git a/sysdeps/powerpc/sched_cpucount.c b/sysdeps/powerpc/sched_cpucount.c deleted file mode 100644 index 13d17ac555..0000000000 --- a/sysdeps/powerpc/sched_cpucount.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef _ARCH_PWR5 -# define POPCNT(l) __builtin_popcountl (l) -#endif - -#include diff --git a/sysdeps/powerpc/sigjmp.c b/sysdeps/powerpc/sigjmp.c deleted file mode 100644 index 6d593a0992..0000000000 --- a/sysdeps/powerpc/sigjmp.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Versioned copy of sysdeps/generic/sigjmp.c modified for AltiVec support. */ - -#include -#include -#include -#include - -/* This function is called by the `sigsetjmp' macro - before doing a `__setjmp' on ENV[0].__jmpbuf. - Always return zero. */ - -int -__vmx__sigjmp_save (sigjmp_buf env, int savemask) -{ - env[0].__mask_was_saved = (savemask && - __sigprocmask (SIG_BLOCK, (sigset_t *) NULL, - &env[0].__saved_mask) == 0); - - return 0; -} - -strong_alias (__vmx__sigjmp_save,__sigjmp_save) diff --git a/sysdeps/powerpc/soft-fp/sfp-machine.h b/sysdeps/powerpc/soft-fp/sfp-machine.h deleted file mode 100644 index d92a90e3e2..0000000000 --- a/sysdeps/powerpc/soft-fp/sfp-machine.h +++ /dev/null @@ -1,114 +0,0 @@ -#define _FP_W_TYPE_SIZE 32 -#define _FP_W_TYPE unsigned long -#define _FP_WS_TYPE signed long -#define _FP_I_TYPE long - -#define _FP_MUL_MEAT_S(R,X,Y) \ - _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_D(R,X,Y) \ - _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) - -#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) -#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 -#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 -#define _FP_NANSIGN_S 0 -#define _FP_NANSIGN_D 0 -#define _FP_NANSIGN_Q 0 - -#define _FP_KEEPNANFRACP 1 -#define _FP_QNANNEGATEDP 0 - -/* Someone please check this. */ -#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \ - && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \ - { \ - R##_s = Y##_s; \ - _FP_FRAC_COPY_##wc(R,Y); \ - } \ - else \ - { \ - R##_s = X##_s; \ - _FP_FRAC_COPY_##wc(R,X); \ - } \ - R##_c = FP_CLS_NAN; \ - } while (0) - -#define _FP_TININESS_AFTER_ROUNDING 0 - -#if defined __NO_FPRS__ && !defined _SOFT_FLOAT - -/* Exception flags. We use the bit positions of the appropriate bits - in the FPEFSCR. */ - -# include -# include -# include - -int __feraiseexcept_soft (int); -libc_hidden_proto (__feraiseexcept_soft) - -# define FP_EX_INEXACT SPEFSCR_FINXS -# define FP_EX_INVALID SPEFSCR_FINVS -# define FP_EX_DIVZERO SPEFSCR_FDBZS -# define FP_EX_UNDERFLOW SPEFSCR_FUNFS -# define FP_EX_OVERFLOW SPEFSCR_FOVFS - -# define _FP_DECL_EX \ - int _spefscr __attribute__ ((unused)), _ftrapex __attribute__ ((unused)) = 0 -# define FP_INIT_ROUNDMODE \ - do \ - { \ - int _r; \ - INTERNAL_SYSCALL_DECL (_err); \ - \ - _spefscr = fegetenv_register (); \ - _r = INTERNAL_SYSCALL (prctl, _err, 2, PR_GET_FPEXC, &_ftrapex); \ - if (INTERNAL_SYSCALL_ERROR_P (_r, _err)) \ - _ftrapex = 0; \ - } \ - while (0) -# define FP_INIT_EXCEPTIONS /* Empty. */ - -# define FP_HANDLE_EXCEPTIONS __feraiseexcept_soft (_fex) -# define FP_ROUNDMODE (_spefscr & 0x3) - -/* Not correct in general, but sufficient for the uses in soft-fp. */ -# define FP_TRAPPING_EXCEPTIONS (_ftrapex & PR_FP_EXC_UND \ - ? FP_EX_UNDERFLOW \ - : 0) - -#else - -/* Exception flags. We use the bit positions of the appropriate bits - in the FPSCR, which also correspond to the FE_* bits. This makes - everything easier ;-). */ -# define FP_EX_INVALID (1 << (31 - 2)) -# define FP_EX_OVERFLOW (1 << (31 - 3)) -# define FP_EX_UNDERFLOW (1 << (31 - 4)) -# define FP_EX_DIVZERO (1 << (31 - 5)) -# define FP_EX_INEXACT (1 << (31 - 6)) - -# define FP_HANDLE_EXCEPTIONS __simulate_exceptions (_fex) -# define FP_ROUNDMODE __sim_round_mode_thread -# define FP_TRAPPING_EXCEPTIONS \ - (~__sim_disabled_exceptions_thread & 0x3e000000) - -#endif - -extern __thread int __sim_exceptions_thread attribute_tls_model_ie; -libc_hidden_tls_proto (__sim_exceptions_thread, tls_model ("initial-exec")); -extern __thread int __sim_disabled_exceptions_thread attribute_tls_model_ie; -libc_hidden_tls_proto (__sim_disabled_exceptions_thread, - tls_model ("initial-exec")); -extern __thread int __sim_round_mode_thread attribute_tls_model_ie; -libc_hidden_tls_proto (__sim_round_mode_thread, tls_model ("initial-exec")); - -extern void __simulate_exceptions (int x) attribute_hidden; diff --git a/sysdeps/powerpc/sotruss-lib.c b/sysdeps/powerpc/sotruss-lib.c deleted file mode 100644 index e5274241a5..0000000000 --- a/sysdeps/powerpc/sotruss-lib.c +++ /dev/null @@ -1,69 +0,0 @@ -/* PowerPC specific sotruss-lib functions. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define HAVE_ARCH_PLTENTER -#define HAVE_ARCH_PLTEXIT - -#include - -#ifdef __powerpc64__ -# if _CALL_ELF != 2 -# define LA_PPC_REGS La_ppc64_regs -# define LA_PPC_RETVAL La_ppc64_retval -# define LA_PPC_GNU_PLTENTER la_ppc64_gnu_pltenter -# define LA_PPC_GNU_PLTEXIT la_ppc64_gnu_pltexit -# else -# define LA_PPC_REGS La_ppc64v2_regs -# define LA_PPC_RETVAL La_ppc64v2_retval -# define LA_PPC_GNU_PLTENTER la_ppc64v2_gnu_pltenter -# define LA_PPC_GNU_PLTEXIT la_ppc64v2_gnu_pltexit -# endif -# else -# define LA_PPC_REGS La_ppc32_regs -# define LA_PPC_RETVAL La_ppc32_retval -# define LA_PPC_GNU_PLTENTER la_ppc32_gnu_pltenter -# define LA_PPC_GNU_PLTEXIT la_ppc32_gnu_pltexit -#endif - -ElfW(Addr) -LA_PPC_GNU_PLTENTER (ElfW(Sym) *sym __attribute__ ((unused)), - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - LA_PPC_REGS *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - print_enter (refcook, defcook, symname, - regs->lr_reg[0], regs->lr_reg[1], regs->lr_reg[2], *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -LA_PPC_GNU_PLTEXIT (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, - const struct LA_PPC_REGS *inregs, - struct LA_PPC_RETVAL *outregs, const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_r3); - - return 0; -} diff --git a/sysdeps/powerpc/stackinfo.h b/sysdeps/powerpc/stackinfo.h deleted file mode 100644 index 964ab77d56..0000000000 --- a/sysdeps/powerpc/stackinfo.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* On PPC the stack grows down. */ -#define _STACK_GROWS_DOWN 1 - -#if __WORDSIZE == 64 -/* PPC64 doesn't need an executable stack and doesn't need PT_GNU_STACK - * to make the stack nonexecutable. */ -# define DEFAULT_STACK_PERMS (PF_R|PF_W) -#else -/* PF_X can be overridden if PT_GNU_STACK is present but is presumed absent. */ -# define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X) -#endif - -#endif /* stackinfo.h */ diff --git a/sysdeps/powerpc/sys/platform/ppc.h b/sysdeps/powerpc/sys/platform/ppc.h deleted file mode 100644 index 4a0c015766..0000000000 --- a/sysdeps/powerpc/sys/platform/ppc.h +++ /dev/null @@ -1,146 +0,0 @@ -/* Facilities specific to the PowerPC architecture - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PLATFORM_PPC_H -#define _SYS_PLATFORM_PPC_H 1 - -#include -#include -#include - -/* Read the Time Base Register. */ -static __inline__ uint64_t -__ppc_get_timebase (void) -{ -#if __GNUC_PREREQ (4, 8) - return __builtin_ppc_get_timebase (); -#else -# ifdef __powerpc64__ - uint64_t __tb; - /* "volatile" is necessary here, because the user expects this assembly - isn't moved after an optimization. */ - __asm__ volatile ("mfspr %0, 268" : "=r" (__tb)); - return __tb; -# else /* not __powerpc64__ */ - uint32_t __tbu, __tbl, __tmp; \ - __asm__ volatile ("0:\n\t" - "mftbu %0\n\t" - "mftbl %1\n\t" - "mftbu %2\n\t" - "cmpw %0, %2\n\t" - "bne- 0b" - : "=r" (__tbu), "=r" (__tbl), "=r" (__tmp)); - return (((uint64_t) __tbu << 32) | __tbl); -# endif /* not __powerpc64__ */ -#endif -} - -/* The following functions provide hints about the usage of shared processor - resources, as defined in ISA 2.06 and newer. */ - -/* Provides a hint that performance will probably be improved if shared - resources dedicated to the executing processor are released for use by other - processors. */ -static __inline__ void -__ppc_yield (void) -{ - __asm__ volatile ("or 27,27,27"); -} - -/* Provides a hint that performance will probably be improved if shared - resources dedicated to the executing processor are released until - all outstanding storage accesses to caching-inhibited storage have been - completed. */ -static __inline__ void -__ppc_mdoio (void) -{ - __asm__ volatile ("or 29,29,29"); -} - -/* Provides a hint that performance will probably be improved if shared - resources dedicated to the executing processor are released until all - outstanding storage accesses to cacheable storage for which the data is not - in the cache have been completed. */ -static __inline__ void -__ppc_mdoom (void) -{ - __asm__ volatile ("or 30,30,30"); -} - - -/* ISA 2.05 and beyond support the Program Priority Register (PPR) to adjust - thread priorities based on lock acquisition, wait and release. The ISA - defines the use of form 'or Rx,Rx,Rx' as the way to modify the PRI field. - The unprivileged priorities are: - Rx = 1 (low) - Rx = 2 (medium) - Rx = 6 (medium-low/normal) - The 'or' instruction form is a nop in previous hardware, so it is safe to - use unguarded. The default value is 'medium'. - */ - -static __inline__ void -__ppc_set_ppr_med (void) -{ - __asm__ volatile ("or 2,2,2"); -} - -static __inline__ void -__ppc_set_ppr_med_low (void) -{ - __asm__ volatile ("or 6,6,6"); -} - -static __inline__ void -__ppc_set_ppr_low (void) -{ - __asm__ volatile ("or 1,1,1"); -} - -/* Power ISA 2.07 (Book II, Chapter 3) extends the priorities that can be set - to the Program Priority Register (PPR). The form 'or Rx,Rx,Rx' is used to - modify the PRI field of the PPR, the same way as described above. - The new priority levels are: - Rx = 31 (very low) - Rx = 5 (medium high) - Any program can set the priority to very low, low, medium low, and medium, - as these are unprivileged. - The medium high priority, on the other hand, is privileged, and may only be - set during certain time intervals by problem-state programs. If the program - priority is medium high when the time interval expires or if an attempt is - made to set the priority to medium high when it is not allowed, the PRI - field is set to medium. - */ - -#ifdef _ARCH_PWR8 - -static __inline__ void -__ppc_set_ppr_very_low (void) -{ - __asm__ volatile ("or 31,31,31"); -} - -static __inline__ void -__ppc_set_ppr_med_high (void) -{ - __asm__ volatile ("or 5,5,5"); -} - -#endif - -#endif /* sys/platform/ppc.h */ diff --git a/sysdeps/powerpc/sysdep.h b/sysdeps/powerpc/sysdep.h deleted file mode 100644 index f07b959eee..0000000000 --- a/sysdeps/powerpc/sysdep.h +++ /dev/null @@ -1,189 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * Powerpc Feature masks for the Aux Vector Hardware Capabilities (AT_HWCAP). - * This entry is copied to _dl_hwcap or rtld_global._dl_hwcap during startup. - */ -#define _SYSDEPS_SYSDEP_H 1 -#include -#ifdef ENABLE_LOCK_ELISION -#include -#include -#endif - -#define PPC_FEATURE_970 (PPC_FEATURE_POWER4 + PPC_FEATURE_HAS_ALTIVEC) - -#ifdef __ASSEMBLER__ - -/* Symbolic names for the registers. The only portable way to write asm - code is to use number but this produces really unreadable code. - Therefore these symbolic names. */ - -/* Integer registers. */ -#define r0 0 -#define r1 1 -#define r2 2 -#define r3 3 -#define r4 4 -#define r5 5 -#define r6 6 -#define r7 7 -#define r8 8 -#define r9 9 -#define r10 10 -#define r11 11 -#define r12 12 -#define r13 13 -#define r14 14 -#define r15 15 -#define r16 16 -#define r17 17 -#define r18 18 -#define r19 19 -#define r20 20 -#define r21 21 -#define r22 22 -#define r23 23 -#define r24 24 -#define r25 25 -#define r26 26 -#define r27 27 -#define r28 28 -#define r29 29 -#define r30 30 -#define r31 31 - -/* Floating-point registers. */ -#define fp0 0 -#define fp1 1 -#define fp2 2 -#define fp3 3 -#define fp4 4 -#define fp5 5 -#define fp6 6 -#define fp7 7 -#define fp8 8 -#define fp9 9 -#define fp10 10 -#define fp11 11 -#define fp12 12 -#define fp13 13 -#define fp14 14 -#define fp15 15 -#define fp16 16 -#define fp17 17 -#define fp18 18 -#define fp19 19 -#define fp20 20 -#define fp21 21 -#define fp22 22 -#define fp23 23 -#define fp24 24 -#define fp25 25 -#define fp26 26 -#define fp27 27 -#define fp28 28 -#define fp29 29 -#define fp30 30 -#define fp31 31 - -/* Condition code registers. */ -#define cr0 0 -#define cr1 1 -#define cr2 2 -#define cr3 3 -#define cr4 4 -#define cr5 5 -#define cr6 6 -#define cr7 7 - -/* Vector registers. */ -#define v0 0 -#define v1 1 -#define v2 2 -#define v3 3 -#define v4 4 -#define v5 5 -#define v6 6 -#define v7 7 -#define v8 8 -#define v9 9 -#define v10 10 -#define v11 11 -#define v12 12 -#define v13 13 -#define v14 14 -#define v15 15 -#define v16 16 -#define v17 17 -#define v18 18 -#define v19 19 -#define v20 20 -#define v21 21 -#define v22 22 -#define v23 23 -#define v24 24 -#define v25 25 -#define v26 26 -#define v27 27 -#define v28 28 -#define v29 29 -#define v30 30 -#define v31 31 - -#define VRSAVE 256 - -/* The 32-bit words of a 64-bit dword are at these offsets in memory. */ -#if defined __LITTLE_ENDIAN__ || defined _LITTLE_ENDIAN -# define LOWORD 0 -# define HIWORD 4 -#else -# define LOWORD 4 -# define HIWORD 0 -#endif - -/* The high 16-bit word of a 64-bit dword is at this offset in memory. */ -#if defined __LITTLE_ENDIAN__ || defined _LITTLE_ENDIAN -# define HISHORT 6 -#else -# define HISHORT 0 -#endif - -/* This seems to always be the case on PPC. */ -#define ALIGNARG(log2) log2 -#define ASM_SIZE_DIRECTIVE(name) .size name,.-name - -#else - -/* Linux kernel powerpc documentation [1] states issuing a syscall inside a - transaction is not recommended and may lead to undefined behavior. It - also states syscalls do not abort transactions. To avoid such traps, - we abort transaction just before syscalls. - - [1] Documentation/powerpc/transactional_memory.txt [Syscalls] */ -#if !IS_IN(rtld) && defined (ENABLE_LOCK_ELISION) -# define ABORT_TRANSACTION \ - ({ \ - if (THREAD_GET_TM_CAPABLE ()) \ - __libc_tabort (_ABORT_SYSCALL); \ - }) -#else -# define ABORT_TRANSACTION -#endif - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/powerpc/test-arith.c b/sysdeps/powerpc/test-arith.c deleted file mode 100644 index aa1568d4d7..0000000000 --- a/sysdeps/powerpc/test-arith.c +++ /dev/null @@ -1,604 +0,0 @@ -/* Test floating-point arithmetic operations. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif -#include -#include -#include -#include -#include -#include - -#ifndef ESIZE -typedef double tocheck_t; -#define ESIZE 11 -#define MSIZE 52 -#define FUNC(x) x -#endif - -#define R_NEAREST 1 -#define R_ZERO 2 -#define R_UP 4 -#define R_DOWN 8 -#define R_ALL (R_NEAREST|R_ZERO|R_UP|R_DOWN) -static fenv_t rmodes[4]; -static const char * const rmnames[4] = -{ "nearest","zero","+Inf","-Inf" }; - -typedef union { - tocheck_t tc; - unsigned char c[sizeof(tocheck_t)]; -} union_t; - -/* Don't try reading these in a font that doesn't distinguish - O and zero. */ -typedef enum { - P_Z = 0x0, /* 00000...0 */ - P_000O = 0x1, /* 00011...1 */ - P_001Z = 0x2, /* 00100...0 */ - P_00O = 0x3, /* 00111...1 */ - P_01Z = 0x4, /* 01000...0 */ - P_010O = 0x5, /* 01011...1 */ - P_011Z = 0x6, /* 01100...0 */ - P_0O = 0x7, /* 01111...1 */ - P_1Z = 0x8, /* 10000...0 */ - P_100O = 0x9, /* 10011...1 */ - P_101Z = 0xa, /* 10100...0 */ - P_10O = 0xb, /* 10111...1 */ - P_11Z = 0xc, /* 11000...0 */ - P_110O = 0xd, /* 11011...1 */ - P_111Z = 0xe, /* 11100...0 */ - P_O = 0xf, /* 11111...1 */ - P_Z1 = 0x11, /* 000...001 */ - P_Z10 = 0x12, /* 000...010 */ - P_Z11 = 0x13, /* 000...011 */ - P_0O00 = 0x14, /* 011...100 */ - P_0O01 = 0x15, /* 011...101 */ - P_0O0 = 0x16, /* 011...110 */ - P_1Z1 = 0x19, /* 100...001 */ - P_1Z10 = 0x1a, /* 100...010 */ - P_1Z11 = 0x1b, /* 100...011 */ - P_O00 = 0x1c, /* 111...100 */ - P_O01 = 0x1d, /* 111...101 */ - P_O0 = 0x1e, /* 111...110 */ - P_R = 0x20, /* rrr...rrr */ /* ('r' means random. ) */ - P_Ro = 0x21, /* rrr...rrr, with odd parity. */ - P_0R = 0x22, /* 0rr...rrr */ - P_1R = 0x23, /* 1rr...rrr */ - P_Rno = 0x24, /* rrr...rrr, but not all ones. */ -} pattern_t; - -static void -pattern_fill(pattern_t ptn, unsigned char *start, int bitoffset, int count) -{ -#define bitset(count, value) \ - start[(count)/8] = (start[(count)/8] & ~(1 << 7-(count)%8) \ - | (value) << 7-(count)%8) - int i; - - if (ptn >= 0 && ptn <= 0xf) - { - /* Patterns between 0 and 0xF have the following format: - The LSBit is used to fill the last n-3 bits of the pattern; - The next 3 bits are the first 3 bits of the pattern. */ - for (i = 0; i < count; i++) - if (i < 3) - bitset((bitoffset+i), ptn >> (3-i) & 1); - else - bitset((bitoffset+i), ptn >> 0 & 1); - } - else if (ptn <= 0x1f) - { - /* Patterns between 0x10 and 0x1F have the following format: - The two LSBits are the last two bits of the pattern; - The 0x8 bit is the first bit of the pattern; - The 0x4 bit is used to fill the remainder. */ - for (i = 0; i < count; i++) - if (i == 0) - bitset((bitoffset+i), ptn >> 3 & 1); - else if (i >= count-2) - bitset((bitoffset+i), ptn >> (count-1-i) & 1); - else - bitset((bitoffset+i), ptn >> 2 & 1); - } - else switch (ptn) - { - case P_0R: case P_1R: - assert(count > 0); - bitset(bitoffset, ptn & 1); - count--; - bitoffset++; - case P_R: - for (; count > 0; count--, bitoffset++) - bitset(bitoffset, rand() & 1); - break; - case P_Ro: - { - int op = 1; - assert(count > 0); - for (; count > 1; count--, bitoffset++) - bitset(bitoffset, op ^= (rand() & 1)); - bitset(bitoffset, op); - break; - } - case P_Rno: - { - int op = 1; - assert(count > 0); - for (; count > 1; count--, bitoffset++) - { - int r = rand() & 1; - op &= r; - bitset(bitoffset, r); - } - bitset(bitoffset, rand() & (op ^ 1)); - break; - } - - default: - assert(0); - } -#undef bitset -} - -static tocheck_t -pattern(int negative, pattern_t exp, pattern_t mant) -{ - union_t result; -#if 0 - int i; -#endif - - pattern_fill(negative ? P_O : P_Z, result.c, 0, 1); - pattern_fill(exp, result.c, 1, ESIZE); - pattern_fill(mant, result.c, ESIZE+1, MSIZE); -#if 0 - printf("neg=%d exp=%02x mant=%02x: ", negative, exp, mant); - for (i = 0; i < sizeof(tocheck_t); i++) - printf("%02x", result.c[i]); - printf("\n"); -#endif - return result.tc; -} - -/* Return the closest different tocheck_t to 'x' in the direction of - 'direction', or 'x' if there is no such value. Assumes 'x' is not - a NaN. */ -static tocheck_t -delta(tocheck_t x, int direction) -{ - union_t xx; - int i; - - xx.tc = x; - if (xx.c[0] & 0x80) - direction = -direction; - if (direction == +1) - { - union_t tx; - tx.tc = pattern(xx.c[0] >> 7, P_O, P_Z); - if (memcmp(tx.c, xx.c, sizeof(tocheck_t)) == 0) - return x; - } - for (i = sizeof(tocheck_t)-1; i > 0; i--) - { - xx.c[i] += direction; - if (xx.c[i] != (direction > 0 ? 0 : 0xff)) - return xx.tc; - } - if (direction < 0 && (xx.c[0] & 0x7f) == 0) - return pattern(~(xx.c[0] >> 7) & 1, P_Z, P_Z1); - else - { - xx.c[0] += direction; - return xx.tc; - } -} - -static int nerrors = 0; - -#ifdef FE_ALL_INVALID -static const int all_exceptions = FE_ALL_INVALID | FE_ALL_EXCEPT; -#else -static const int all_exceptions = FE_ALL_EXCEPT; -#endif - -static void -check_result(int line, const char *rm, tocheck_t expected, tocheck_t actual) -{ - if (memcmp(&expected, &actual, sizeof(tocheck_t)) != 0) - { - unsigned char *ex, *ac; - size_t i; - - printf("%s:%d:round %s:result failed\n" - " expected result 0x", __FILE__, line, rm); - ex = (unsigned char *)&expected; - ac = (unsigned char *)&actual; - for (i = 0; i < sizeof(tocheck_t); i++) - printf("%02x", ex[i]); - printf(" got 0x"); - for (i = 0; i < sizeof(tocheck_t); i++) - printf("%02x", ac[i]); - printf("\n"); - nerrors++; - } -} - -static const struct { - int except; - const char *name; -} excepts[] = { -#define except_entry(ex) { ex, #ex } , -#ifdef FE_INEXACT - except_entry(FE_INEXACT) -#else -# define FE_INEXACT 0 -#endif -#ifdef FE_DIVBYZERO - except_entry(FE_DIVBYZERO) -#else -# define FE_DIVBYZERO 0 -#endif -#ifdef FE_UNDERFLOW - except_entry(FE_UNDERFLOW) -#else -# define FE_UNDERFLOW 0 -#endif -#ifdef FE_OVERFLOW - except_entry(FE_OVERFLOW) -#else -# define FE_OVERFLOW 0 -#endif -#ifdef FE_INVALID - except_entry(FE_INVALID) -#else -# define FE_INVALID 0 -#endif -#ifdef FE_INVALID_SNAN - except_entry(FE_INVALID_SNAN) -#else -# define FE_INVALID_SNAN FE_INVALID -#endif -#ifdef FE_INVALID_ISI - except_entry(FE_INVALID_ISI) -#else -# define FE_INVALID_ISI FE_INVALID -#endif -#ifdef FE_INVALID_IDI - except_entry(FE_INVALID_IDI) -#else -# define FE_INVALID_IDI FE_INVALID -#endif -#ifdef FE_INVALID_ZDZ - except_entry(FE_INVALID_ZDZ) -#else -# define FE_INVALID_ZDZ FE_INVALID -#endif -#ifdef FE_INVALID_COMPARE - except_entry(FE_INVALID_COMPARE) -#else -# define FE_INVALID_COMPARE FE_INVALID -#endif -#ifdef FE_INVALID_SOFTWARE - except_entry(FE_INVALID_SOFTWARE) -#else -# define FE_INVALID_SOFTWARE FE_INVALID -#endif -#ifdef FE_INVALID_SQRT - except_entry(FE_INVALID_SQRT) -#else -# define FE_INVALID_SQRT FE_INVALID -#endif -#ifdef FE_INVALID_INTEGER_CONVERSION - except_entry(FE_INVALID_INTEGER_CONVERSION) -#else -# define FE_INVALID_INTEGER_CONVERSION FE_INVALID -#endif -}; - -static int excepts_missing = 0; - -static void -check_excepts(int line, const char *rm, int expected, int actual) -{ - if (expected & excepts_missing) - expected = expected & ~excepts_missing | FE_INVALID_SNAN; - if ((expected & all_exceptions) != actual) - { - size_t i; - printf("%s:%d:round %s:exceptions failed\n" - " expected exceptions ", __FILE__, line,rm); - for (i = 0; i < sizeof(excepts)/sizeof(excepts[0]); i++) - if (expected & excepts[i].except) - printf("%s ",excepts[i].name); - if ((expected & all_exceptions) == 0) - printf("- "); - printf("got"); - for (i = 0; i < sizeof(excepts)/sizeof(excepts[0]); i++) - if (actual & excepts[i].except) - printf(" %s",excepts[i].name); - if ((actual & all_exceptions) == 0) - printf("- "); - printf(".\n"); - nerrors++; - } -} - -typedef enum { - B_ADD, B_SUB, B_MUL, B_DIV, B_NEG, B_ABS, B_SQRT -} op_t; -typedef struct { - int line; - op_t op; - int a_sgn; - pattern_t a_exp, a_mant; - int b_sgn; - pattern_t b_exp, b_mant; - int rmode; - int excepts; - int x_sgn; - pattern_t x_exp, x_mant; -} optest_t; -static const optest_t optests[] = { - /* Additions of zero. */ - {__LINE__,B_ADD, 0,P_Z,P_Z, 0,P_Z,P_Z, R_ALL,0, 0,P_Z,P_Z }, - {__LINE__,B_ADD, 1,P_Z,P_Z, 0,P_Z,P_Z, R_ALL & ~R_DOWN,0, 0,P_Z,P_Z }, - {__LINE__,B_ADD, 1,P_Z,P_Z, 0,P_Z,P_Z, R_DOWN,0, 1,P_Z,P_Z }, - {__LINE__,B_ADD, 1,P_Z,P_Z, 1,P_Z,P_Z, R_ALL,0, 1,P_Z,P_Z }, - - /* Additions with NaN. */ - {__LINE__,B_ADD, 0,P_O,P_101Z, 0,P_Z,P_Z, R_ALL,0, 0,P_O,P_101Z }, - {__LINE__,B_ADD, 0,P_O,P_01Z, 0,P_Z,P_Z, R_ALL, - FE_INVALID | FE_INVALID_SNAN, 0,P_O,P_11Z }, - {__LINE__,B_ADD, 0,P_O,P_Z, 0,P_O,P_0O, R_ALL, - FE_INVALID | FE_INVALID_SNAN, 0,P_O,P_O }, - {__LINE__,B_ADD, 0,P_Z,P_Z, 0,P_O,P_11Z, R_ALL,0, 0,P_O,P_11Z }, - {__LINE__,B_ADD, 0,P_O,P_001Z, 0,P_O,P_001Z, R_ALL, - FE_INVALID | FE_INVALID_SNAN, 0,P_O,P_101Z }, - {__LINE__,B_ADD, 0,P_O,P_1Z, 0,P_Z,P_Z, R_ALL,0, 0,P_O,P_1Z }, - {__LINE__,B_ADD, 0,P_0O,P_Z, 0,P_O,P_10O, R_ALL,0, 0,P_O,P_10O }, - - /* Additions with infinity. */ - {__LINE__,B_ADD, 0,P_O,P_Z, 0,P_Z,P_Z, R_ALL,0, 0,P_O,P_Z }, - {__LINE__,B_ADD, 0,P_O,P_Z, 1,P_Z,P_Z, R_ALL,0, 0,P_O,P_Z }, - {__LINE__,B_ADD, 1,P_O,P_Z, 0,P_Z,P_Z, R_ALL,0, 1,P_O,P_Z }, - {__LINE__,B_ADD, 1,P_O,P_Z, 1,P_Z,P_Z, R_ALL,0, 1,P_O,P_Z }, - {__LINE__,B_ADD, 0,P_O,P_Z, 0,P_O,P_Z, R_ALL,0, 0,P_O,P_Z }, - {__LINE__,B_ADD, 1,P_O,P_Z, 1,P_O,P_Z, R_ALL,0, 1,P_O,P_Z }, - {__LINE__,B_ADD, 0,P_O,P_Z, 1,P_O,P_Z, R_ALL, - FE_INVALID | FE_INVALID_ISI, 0,P_O,P_1Z }, - {__LINE__,B_ADD, 1,P_O,P_Z, 0,P_O,P_Z, R_ALL, - FE_INVALID | FE_INVALID_ISI, 0,P_O,P_1Z }, - {__LINE__,B_ADD, 0,P_O,P_Z, 0,P_0O,P_Z, R_ALL,0, 0,P_O,P_Z }, - {__LINE__,B_ADD, 1,P_O,P_Z, 0,P_0O,P_Z, R_ALL,0, 1,P_O,P_Z }, - {__LINE__,B_ADD, 0,P_O,P_Z, 1,P_0O,P_Z, R_ALL,0, 0,P_O,P_Z }, - {__LINE__,B_ADD, 1,P_O,P_Z, 1,P_0O,P_Z, R_ALL,0, 1,P_O,P_Z }, - - /* Overflow (and zero). */ - {__LINE__,B_ADD, 0,P_O0,P_Z, 0,P_O0,P_Z, R_NEAREST | R_UP, - FE_INEXACT | FE_OVERFLOW, 0,P_O,P_Z }, - {__LINE__,B_ADD, 0,P_O0,P_Z, 0,P_O0,P_Z, R_ZERO | R_DOWN, - FE_INEXACT | FE_OVERFLOW, 0,P_O0,P_O }, - {__LINE__,B_ADD, 1,P_O0,P_Z, 1,P_O0,P_Z, R_NEAREST | R_DOWN, - FE_INEXACT | FE_OVERFLOW, 1,P_O,P_Z }, - {__LINE__,B_ADD, 1,P_O0,P_Z, 1,P_O0,P_Z, R_ZERO | R_UP, - FE_INEXACT | FE_OVERFLOW, 1,P_O0,P_O }, - {__LINE__,B_ADD, 0,P_O0,P_Z, 1,P_O0,P_Z, R_ALL & ~R_DOWN, - 0, 0,P_Z,P_Z }, - {__LINE__,B_ADD, 0,P_O0,P_Z, 1,P_O0,P_Z, R_DOWN, - 0, 1,P_Z,P_Z }, - - /* Negation. */ - {__LINE__,B_NEG, 0,P_Z,P_Z, 0,0,0, R_ALL, 0, 1,P_Z,P_Z }, - {__LINE__,B_NEG, 1,P_Z,P_Z, 0,0,0, R_ALL, 0, 0,P_Z,P_Z }, - {__LINE__,B_NEG, 0,P_O,P_Z, 0,0,0, R_ALL, 0, 1,P_O,P_Z }, - {__LINE__,B_NEG, 1,P_O,P_Z, 0,0,0, R_ALL, 0, 0,P_O,P_Z }, - {__LINE__,B_NEG, 0,P_O,P_1Z, 0,0,0, R_ALL, 0, 1,P_O,P_1Z }, - {__LINE__,B_NEG, 1,P_O,P_1Z, 0,0,0, R_ALL, 0, 0,P_O,P_1Z }, - {__LINE__,B_NEG, 0,P_O,P_01Z, 0,0,0, R_ALL, 0, 1,P_O,P_01Z }, - {__LINE__,B_NEG, 1,P_O,P_01Z, 0,0,0, R_ALL, 0, 0,P_O,P_01Z }, - {__LINE__,B_NEG, 0,P_1Z,P_1Z1, 0,0,0, R_ALL, 0, 1,P_1Z,P_1Z1 }, - {__LINE__,B_NEG, 1,P_1Z,P_1Z1, 0,0,0, R_ALL, 0, 0,P_1Z,P_1Z1 }, - {__LINE__,B_NEG, 0,P_Z,P_Z1, 0,0,0, R_ALL, 0, 1,P_Z,P_Z1 }, - {__LINE__,B_NEG, 1,P_Z,P_Z1, 0,0,0, R_ALL, 0, 0,P_Z,P_Z1 }, - - /* Absolute value. */ - {__LINE__,B_ABS, 0,P_Z,P_Z, 0,0,0, R_ALL, 0, 0,P_Z,P_Z }, - {__LINE__,B_ABS, 1,P_Z,P_Z, 0,0,0, R_ALL, 0, 0,P_Z,P_Z }, - {__LINE__,B_ABS, 0,P_O,P_Z, 0,0,0, R_ALL, 0, 0,P_O,P_Z }, - {__LINE__,B_ABS, 1,P_O,P_Z, 0,0,0, R_ALL, 0, 0,P_O,P_Z }, - {__LINE__,B_ABS, 0,P_O,P_1Z, 0,0,0, R_ALL, 0, 0,P_O,P_1Z }, - {__LINE__,B_ABS, 1,P_O,P_1Z, 0,0,0, R_ALL, 0, 0,P_O,P_1Z }, - {__LINE__,B_ABS, 0,P_O,P_01Z, 0,0,0, R_ALL, 0, 0,P_O,P_01Z }, - {__LINE__,B_ABS, 1,P_O,P_01Z, 0,0,0, R_ALL, 0, 0,P_O,P_01Z }, - {__LINE__,B_ABS, 0,P_1Z,P_1Z1, 0,0,0, R_ALL, 0, 0,P_1Z,P_1Z1 }, - {__LINE__,B_ABS, 1,P_1Z,P_1Z1, 0,0,0, R_ALL, 0, 0,P_1Z,P_1Z1 }, - {__LINE__,B_ABS, 0,P_Z,P_Z1, 0,0,0, R_ALL, 0, 0,P_Z,P_Z1 }, - {__LINE__,B_ABS, 1,P_Z,P_Z1, 0,0,0, R_ALL, 0, 0,P_Z,P_Z1 }, - - /* Square root. */ - {__LINE__,B_SQRT, 0,P_Z,P_Z, 0,0,0, R_ALL, 0, 0,P_Z,P_Z }, - {__LINE__,B_SQRT, 1,P_Z,P_Z, 0,0,0, R_ALL, 0, 1,P_Z,P_Z }, - {__LINE__,B_SQRT, 0,P_O,P_1Z, 0,0,0, R_ALL, 0, 0,P_O,P_1Z }, - {__LINE__,B_SQRT, 1,P_O,P_1Z, 0,0,0, R_ALL, 0, 1,P_O,P_1Z }, - {__LINE__,B_SQRT, 0,P_O,P_01Z, 0,0,0, R_ALL, - FE_INVALID | FE_INVALID_SNAN, 0,P_O,P_11Z }, - {__LINE__,B_SQRT, 1,P_O,P_01Z, 0,0,0, R_ALL, - FE_INVALID | FE_INVALID_SNAN, 1,P_O,P_11Z }, - - {__LINE__,B_SQRT, 0,P_O,P_Z, 0,0,0, R_ALL, 0, 0,P_O,P_Z }, - {__LINE__,B_SQRT, 0,P_0O,P_Z, 0,0,0, R_ALL, 0, 0,P_0O,P_Z }, - - {__LINE__,B_SQRT, 1,P_O,P_Z, 0,0,0, R_ALL, - FE_INVALID | FE_INVALID_SQRT, 0,P_O,P_1Z }, - {__LINE__,B_SQRT, 1,P_1Z,P_1Z1, 0,0,0, R_ALL, - FE_INVALID | FE_INVALID_SQRT, 0,P_O,P_1Z }, - {__LINE__,B_SQRT, 1,P_Z,P_Z1, 0,0,0, R_ALL, - FE_INVALID | FE_INVALID_SQRT, 0,P_O,P_1Z }, - -}; - -static void -check_op(void) -{ - size_t i; - int j; - tocheck_t r, a, b, x; - int raised; - - for (i = 0; i < sizeof(optests)/sizeof(optests[0]); i++) - { - a = pattern(optests[i].a_sgn, optests[i].a_exp, - optests[i].a_mant); - b = pattern(optests[i].b_sgn, optests[i].b_exp, - optests[i].b_mant); - x = pattern(optests[i].x_sgn, optests[i].x_exp, - optests[i].x_mant); - for (j = 0; j < 4; j++) - if (optests[i].rmode & 1<= fabs(x1) && fabs(x1) <= fabs(x2); - break; - case R_ZERO: case R_DOWN: - x2 = r2 * r2 - a; - ok = x1 <= 0 && x2 >= 0; - break; - case R_UP: - x0 = r0 * r0 - a; - ok = x1 >= 0 && x0 <= 0; - break; - default: - assert(0); - } - } - else - ok = x1 == 0; - if (!ok) - fail_xr(__LINE__,rmnames[j],a,r1,x1,excepts&FE_INEXACT); - } - check_excepts(__LINE__,"all",0,raised); -} - -int main(int argc, char **argv) -{ - int i; - - _LIB_VERSION = _IEEE_; - - /* Set up environments for rounding modes. */ - fesetenv(FE_DFL_ENV); - fesetround(FE_TONEAREST); - fegetenv(rmodes+0); - fesetround(FE_TOWARDZERO); - fegetenv(rmodes+1); - fesetround(FE_UPWARD); - fegetenv(rmodes+2); - fesetround(FE_DOWNWARD); - fegetenv(rmodes+3); - -#if defined(FE_INVALID_SOFTWARE) || defined(FE_INVALID_SQRT) - /* There's this really stupid feature of the 601... */ - fesetenv(FE_DFL_ENV); - feraiseexcept(FE_INVALID_SOFTWARE); - if (!fetestexcept(FE_INVALID_SOFTWARE)) - excepts_missing |= FE_INVALID_SOFTWARE; - fesetenv(FE_DFL_ENV); - feraiseexcept(FE_INVALID_SQRT); - if (!fetestexcept(FE_INVALID_SQRT)) - excepts_missing |= FE_INVALID_SQRT; -#endif - - check_op(); - for (i = 0; i < 100000; i++) - check_sqrt(pattern(0, P_Rno, P_R)); - for (i = 0; i < 100; i++) - check_sqrt(pattern(0, P_Z, P_R)); - check_sqrt(pattern(0,P_Z,P_Z1)); - - printf("%d errors.\n", nerrors); - return nerrors == 0 ? 0 : 1; -} diff --git a/sysdeps/powerpc/test-arithf.c b/sysdeps/powerpc/test-arithf.c deleted file mode 100644 index d78ec49009..0000000000 --- a/sysdeps/powerpc/test-arithf.c +++ /dev/null @@ -1,6 +0,0 @@ -typedef float tocheck_t; -#define ESIZE 8 -#define MSIZE 23 -#define FUNC(x) x##f - -#include "test-arith.c" diff --git a/sysdeps/powerpc/test-get_hwcap-static.c b/sysdeps/powerpc/test-get_hwcap-static.c deleted file mode 100644 index 86d1ca355b..0000000000 --- a/sysdeps/powerpc/test-get_hwcap-static.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Check __ppc_get_hwcap() and __ppc_get_at_plaftorm() functionality. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Tests if the hwcap, hwcap2 and platform data are stored in the TCB. */ - -#define STATIC_TST_HWCAP 1 - -#include "test-get_hwcap.c" diff --git a/sysdeps/powerpc/test-get_hwcap.c b/sysdeps/powerpc/test-get_hwcap.c deleted file mode 100644 index d776310734..0000000000 --- a/sysdeps/powerpc/test-get_hwcap.c +++ /dev/null @@ -1,177 +0,0 @@ -/* Check __ppc_get_hwcap() and __ppc_get_at_plaftorm() functionality. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Tests if the hwcap, hwcap2 and platform data are stored in the TCB. */ - -#include -#include -#include -#include - -#include -#include - -#include - -#include - -#ifndef STATIC_TST_HWCAP -#undef PROCINFO_DECL -#include -#endif - -/* Offsets copied from tcb-offsets.h. */ - -#ifdef __powerpc64__ -# define __TPREG "r13" -# define __HWCAPOFF -28776 -# define __ATPLATOFF -28764 -#else -# define __TPREG "r2" -# define __HWCAPOFF -28736 -# define __HWCAP2OFF -28732 -# define __ATPLATOFF -28724 -#endif - -uint64_t check_tcbhwcap (long tid) -{ - - uint32_t tcb_at_platform, at_platform; - uint64_t hwcap, hwcap2, tcb_hwcap; - const char *at_platform_string; - - /* Testing if the hwcap/hwcap2 data is correctly initialized by - TLS_TP_INIT. */ - - register unsigned long __tp __asm__ (__TPREG); - -#ifdef __powerpc64__ - __asm__ ("ld %0,%1(%2)\n" - : "=r" (tcb_hwcap) - : "i" (__HWCAPOFF), "b" (__tp)); -#else - uint64_t h1, h2; - - __asm__ ("lwz %0,%1(%2)\n" - : "=r" (h1) - : "i" (__HWCAPOFF), "b" (__tp)); - __asm__ ("lwz %0,%1(%2)\n" - : "=r" (h2) - : "i" (__HWCAP2OFF), "b" (__tp)); - tcb_hwcap = (h1 >> 32) << 32 | (h2 >> 32); -#endif - - hwcap = getauxval (AT_HWCAP); - hwcap2 = getauxval (AT_HWCAP2); - - /* hwcap contains only the latest supported ISA, the code checks which is - and fills the previous supported ones. This is necessary because the - same is done in hwcapinfo.c when setting the values that are copied to - the TCB. */ - - if (hwcap2 & PPC_FEATURE2_ARCH_2_07) - hwcap |= PPC_FEATURE_ARCH_2_06 - | PPC_FEATURE_ARCH_2_05 - | PPC_FEATURE_POWER5_PLUS - | PPC_FEATURE_POWER5 - | PPC_FEATURE_POWER4; - else if (hwcap & PPC_FEATURE_ARCH_2_06) - hwcap |= PPC_FEATURE_ARCH_2_05 - | PPC_FEATURE_POWER5_PLUS - | PPC_FEATURE_POWER5 - | PPC_FEATURE_POWER4; - else if (hwcap & PPC_FEATURE_ARCH_2_05) - hwcap |= PPC_FEATURE_POWER5_PLUS - | PPC_FEATURE_POWER5 - | PPC_FEATURE_POWER4; - else if (hwcap & PPC_FEATURE_POWER5_PLUS) - hwcap |= PPC_FEATURE_POWER5 - | PPC_FEATURE_POWER4; - else if (hwcap & PPC_FEATURE_POWER5) - hwcap |= PPC_FEATURE_POWER4; - - hwcap = (hwcap << 32) + hwcap2; - - if ( tcb_hwcap != hwcap ) - { - printf ("FAIL: __ppc_get_hwcap() - HWCAP is %" PRIx64 ". Should be %" - PRIx64 " for thread %ld.\n", tcb_hwcap, hwcap, tid); - return 1; - } - - /* Same test for the platform number. */ - __asm__ ("lwz %0,%1(%2)\n" - : "=r" (tcb_at_platform) - : "i" (__ATPLATOFF), "b" (__tp)); - - at_platform_string = (const char *) getauxval (AT_PLATFORM); - at_platform = _dl_string_platform (at_platform_string); - - if ( tcb_at_platform != at_platform ) - { - printf ("FAIL: __ppc_get_at_platform() - AT_PLATFORM is %x. Should be %x" - " for thread %ld\n", tcb_at_platform, at_platform, tid); - return 1; - } - - return 0; -} - -void *t1 (void *tid) -{ - if (check_tcbhwcap ((long) tid)) - { - pthread_exit (tid); - } - - pthread_exit (NULL); - -} - -static int -do_test (void) -{ - - pthread_t threads[2]; - pthread_attr_t attr; - pthread_attr_init (&attr); - pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_JOINABLE); - - long i = 0; - - /* Check for main. */ - if (check_tcbhwcap (i)) - { - return 1; - } - - /* Check for other thread. */ - i++; - threads[i] = xpthread_create (&attr, t1, (void *)i); - - pthread_attr_destroy (&attr); - TEST_VERIFY_EXIT (xpthread_join (threads[i]) == NULL); - - printf("PASS: HWCAP, HWCAP2 and AT_PLATFORM are correctly set in the TCB for" - " all threads.\n"); - - pthread_exit (NULL); - -} - -#include diff --git a/sysdeps/powerpc/test-gettimebase.c b/sysdeps/powerpc/test-gettimebase.c deleted file mode 100644 index 0e8e2f00fc..0000000000 --- a/sysdeps/powerpc/test-gettimebase.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Check __ppc_get_timebase() for architecture changes - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Test if __ppc_get_timebase() is compatible with the current processor and if - it's changing between reads. A read failure might indicate a Power ISA or - binutils change. */ - -#include -#include -#include - -#include - -static int -do_test (void) -{ - uint64_t t1, t2, t3; - t1 = __ppc_get_timebase (); - printf ("Time Base = %"PRIu64"\n", t1); - t2 = __ppc_get_timebase (); - printf ("Time Base = %"PRIu64"\n", t2); - t3 = __ppc_get_timebase (); - printf ("Time Base = %"PRIu64"\n", t3); - if (t1 != t2 && t1 != t3 && t2 != t3) - return 0; - - printf ("Fail: timebase reads should always be different.\n"); - return 1; -} - -#include diff --git a/sysdeps/powerpc/tls-macros.h b/sysdeps/powerpc/tls-macros.h deleted file mode 100644 index 809ef5cea1..0000000000 --- a/sysdeps/powerpc/tls-macros.h +++ /dev/null @@ -1,3 +0,0 @@ -#define __TLS_CALL_CLOBBERS \ - "0", "4", "5", "6", "7", "8", "9", "10", "11", "12", \ - "lr", "ctr", "cr0", "cr1", "cr5", "cr6", "cr7" diff --git a/sysdeps/powerpc/tst-set_ppr.c b/sysdeps/powerpc/tst-set_ppr.c deleted file mode 100644 index df8dda78e8..0000000000 --- a/sysdeps/powerpc/tst-set_ppr.c +++ /dev/null @@ -1,102 +0,0 @@ -/* Test the implementation of __ppc_set_ppr_* functions. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include - -#include - -#ifdef __powerpc64__ - typedef uint64_t ppr_t; -# define MFPPR "mfppr" - /* The thread priority value is obtained from bits 11:13. */ -# define EXTRACT_THREAD_PRIORITY(x) ((x >> 50) & 7) -#else - typedef uint32_t ppr_t; -# define MFPPR "mfppr32" - /* For 32-bit, the upper 32 bits of the Program Priority Register (PPR) - are used, so the thread priority value is obtained from bits 43:46. */ -# define EXTRACT_THREAD_PRIORITY(x) ((x >> 18) & 7) -#endif /* !__powerpc64__ */ - -/* Read the thread priority value set in the PPR. */ -static __inline__ ppr_t -get_thread_priority (void) -{ - /* Read the PPR. */ - ppr_t ppr; - asm volatile (MFPPR" %0" : "=r"(ppr)); - /* Return the thread priority value. */ - return EXTRACT_THREAD_PRIORITY (ppr); -} - -/* Check the thread priority bits of PPR are set as expected. */ -uint8_t -check_thread_priority (uint8_t expected) -{ - ppr_t actual = get_thread_priority (); - - if (actual != expected) - { - printf ("FAIL: Expected %"PRIu8" got %"PRIuMAX".\n", expected, - (uintmax_t) actual); - return 1; - } - printf ("PASS: Thread priority set to %"PRIu8" correctly.\n", expected); - return 0; -} - -/* The Power ISA 2.06 allows the following thread priorities for any - problem state program: low (2), medium low (3), and medium (4). - Power ISA 2.07b added very low (1). - Check whether the values set by __ppc_set_ppr_* are correct. */ -static int -do_test (void) -{ - /* Check for the minimum required Power ISA to run these tests. */ - if ((getauxval (AT_HWCAP) & PPC_FEATURE_ARCH_2_06) == 0) - { - printf ("Requires an environment that implements the Power ISA version" - " 2.06 or greater.\n"); - return EXIT_UNSUPPORTED; - } - - uint8_t rc = 0; - -#ifdef _ARCH_PWR8 - __ppc_set_ppr_very_low (); - rc |= check_thread_priority (1); -#endif /* _ARCH_PWR8 */ - - __ppc_set_ppr_low (); - rc |= check_thread_priority (2); - - __ppc_set_ppr_med_low (); - rc |= check_thread_priority (3); - - __ppc_set_ppr_med (); - rc |= check_thread_priority (4); - - return rc; -} - -#include diff --git a/sysdeps/powerpc/tst-stack-align.h b/sysdeps/powerpc/tst-stack-align.h deleted file mode 100644 index c01d0793ff..0000000000 --- a/sysdeps/powerpc/tst-stack-align.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define TEST_STACK_ALIGN() \ - ({ \ - /* Altivec __vector int etc. needs 16byte aligned stack. \ - Instead of using altivec.h here, use aligned attribute instead. */ \ - struct _S \ - { \ - int _i __attribute__((aligned (16))); \ - int _j[3]; \ - } _s = { ._i = 18, ._j[0] = 19, ._j[1] = 20, ._j[2] = 21 }; \ - double _d = 12.0; \ - long double _ld = 15.0; \ - int _ret = 0; \ - printf ("__vector int: { %d, %d, %d, %d } %p %zu\n", _s._i, _s._j[0], \ - _s._j[1], _s._j[2], &_s, __alignof (_s)); \ - if ((((uintptr_t) &_s) & (__alignof (_s) - 1)) != 0) \ - _ret = 1; \ - \ - printf ("double: %g %p %zu\n", _d, &_d, __alignof (double)); \ - if ((((uintptr_t) &_d) & (__alignof (double) - 1)) != 0) \ - _ret = 1; \ - \ - printf ("ldouble: %Lg %p %zu\n", _ld, &_ld, __alignof (long double)); \ - if ((((uintptr_t) &_ld) & (__alignof (long double) - 1)) != 0) \ - _ret = 1; \ - _ret; \ - }) diff --git a/sysdeps/powerpc/tst-tlsopt-powerpc.c b/sysdeps/powerpc/tst-tlsopt-powerpc.c deleted file mode 100644 index 8ae928a3f4..0000000000 --- a/sysdeps/powerpc/tst-tlsopt-powerpc.c +++ /dev/null @@ -1,51 +0,0 @@ -/* glibc test for __tls_get_addr optimization. */ -#include - -#include "../../elf/tls-macros.h" -#include "dl-tls.h" - -/* common 'int' variable in TLS. */ -COMMON_INT_DEF(foo); - - -static int -do_test (void) -{ - int result = 0; - - /* Get variable using general dynamic model. */ - int *ap = TLS_GD (foo); - if (*ap != 0) - { - printf ("foo = %d\n", *ap); - result = 1; - } - - tls_index *tls_arg; -#ifdef __powerpc64__ - register unsigned long thread_pointer __asm__ ("r13"); - asm ("addi %0,2,foo@got@tlsgd" : "=r" (tls_arg)); -#else - register unsigned long thread_pointer __asm__ ("r2"); - asm ("bcl 20,31,1f\n1:\t" - "mflr %0\n\t" - "addis %0,%0,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t" - "addi %0,%0,_GLOBAL_OFFSET_TABLE_-1b@l\n\t" - "addi %0,%0,foo@got@tlsgd" : "=b" (tls_arg)); -#endif - - if (tls_arg->ti_module != 0) - { - printf ("tls_index not optimized, binutils too old?\n"); - result = 1; - } - else if (tls_arg->ti_offset + thread_pointer != (unsigned long) ap) - { - printf ("tls_index->ti_offset wrong value\n"); - result = 1; - } - - return result; -} - -#include diff --git a/sysdeps/pthread/Makeconfig b/sysdeps/pthread/Makeconfig deleted file mode 100644 index 2b564eae5d..0000000000 --- a/sysdeps/pthread/Makeconfig +++ /dev/null @@ -1,2 +0,0 @@ -# Compile libc code to do internal locking. -libc-reentrant = yes diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile deleted file mode 100644 index c4eed0cbd4..0000000000 --- a/sysdeps/pthread/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -# sysdeps makefile fragment for all pthread-supporting configurations. -# Copyright (C) 2014-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifeq ($(subdir),rt) - -ifeq (yes,$(build-shared)) -$(objpfx)tst-timer: $(objpfx)librt.so $(shared-thread-library) -else -$(objpfx)tst-timer: $(objpfx)librt.a $(static-thread-library) -endif - -endif diff --git a/sysdeps/pthread/Versions b/sysdeps/pthread/Versions deleted file mode 100644 index a71cffbed4..0000000000 --- a/sysdeps/pthread/Versions +++ /dev/null @@ -1,5 +0,0 @@ -librt { - GLIBC_2.4 { - lio_listio; lio_listio64; - } -} diff --git a/sysdeps/pthread/aio_cancel.c b/sysdeps/pthread/aio_cancel.c deleted file mode 100644 index d3e9493d80..0000000000 --- a/sysdeps/pthread/aio_cancel.c +++ /dev/null @@ -1,157 +0,0 @@ -/* Cancel requests associated with given file descriptor. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* We use an UGLY hack to prevent gcc from finding us cheating. The - implementation of aio_cancel and aio_cancel64 are identical and so - we want to avoid code duplication by using aliases. But gcc sees - the different parameter lists and prints a warning. We define here - a function so that aio_cancel64 has no prototype. */ -#ifndef aio_cancel -#define aio_cancel64 XXX -#include -/* And undo the hack. */ -#undef aio_cancel64 -#endif - -#include -#include -#include - -#include - - -int -aio_cancel (int fildes, struct aiocb *aiocbp) -{ - struct requestlist *req = NULL; - int result = AIO_ALLDONE; - - /* If fildes is invalid, error. */ - if (fcntl (fildes, F_GETFL) < 0) - { - __set_errno (EBADF); - return -1; - } - - /* Request the mutex. */ - pthread_mutex_lock (&__aio_requests_mutex); - - /* We are asked to cancel a specific AIO request. */ - if (aiocbp != NULL) - { - /* If the AIO request is not for this descriptor it has no value - to look for the request block. */ - if (aiocbp->aio_fildes != fildes) - { - pthread_mutex_unlock (&__aio_requests_mutex); - __set_errno (EINVAL); - return -1; - } - else if (aiocbp->__error_code == EINPROGRESS) - { - struct requestlist *last = NULL; - - req = __aio_find_req_fd (fildes); - - if (req == NULL) - { - not_found: - pthread_mutex_unlock (&__aio_requests_mutex); - __set_errno (EINVAL); - return -1; - } - - while (req->aiocbp != (aiocb_union *) aiocbp) - { - last = req; - req = req->next_prio; - if (req == NULL) - goto not_found; - } - - /* Don't remove the entry if a thread is already working on it. */ - if (req->running == allocated) - { - result = AIO_NOTCANCELED; - req = NULL; - } - else - { - /* We can remove the entry. */ - __aio_remove_request (last, req, 0); - - result = AIO_CANCELED; - - req->next_prio = NULL; - } - } - } - else - { - /* Find the beginning of the list of all requests for this - desriptor. */ - req = __aio_find_req_fd (fildes); - - /* If any request is worked on by a thread it must be the first. - So either we can delete all requests or all but the first. */ - if (req != NULL) - { - if (req->running == allocated) - { - struct requestlist *old = req; - req = req->next_prio; - old->next_prio = NULL; - - result = AIO_NOTCANCELED; - - if (req != NULL) - __aio_remove_request (old, req, 1); - } - else - { - result = AIO_CANCELED; - - /* We can remove the entry. */ - __aio_remove_request (NULL, req, 1); - } - } - } - - /* Mark requests as canceled and send signal. */ - while (req != NULL) - { - struct requestlist *old = req; - assert (req->running == yes || req->running == queued); - req->aiocbp->aiocb.__error_code = ECANCELED; - req->aiocbp->aiocb.__return_value = -1; - __aio_notify (req); - req = req->next_prio; - __aio_free_request (old); - } - - /* Release the mutex. */ - pthread_mutex_unlock (&__aio_requests_mutex); - - return result; -} - -#ifndef aio_cancel -weak_alias (aio_cancel, aio_cancel64) -#endif diff --git a/sysdeps/pthread/aio_error.c b/sysdeps/pthread/aio_error.c deleted file mode 100644 index 0f6cfc9688..0000000000 --- a/sysdeps/pthread/aio_error.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Return error status of asynchronous I/O request. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* We use an UGLY hack to prevent gcc from finding us cheating. The - implementation of aio_error and aio_error64 are identical and so - we want to avoid code duplication by using aliases. But gcc sees - the different parameter lists and prints a warning. We define here - a function so that aio_error64 has no prototype. */ -#define aio_error64 XXX -#include -/* And undo the hack. */ -#undef aio_error64 - -#include - - -int -aio_error (const struct aiocb *aiocbp) -{ - int ret; - - /* Acquire the mutex to make sure all operations for this request are - complete. */ - pthread_mutex_lock(&__aio_requests_mutex); - ret = aiocbp->__error_code; - pthread_mutex_unlock(&__aio_requests_mutex); - - return ret; -} - -weak_alias (aio_error, aio_error64) diff --git a/sysdeps/pthread/aio_fsync.c b/sysdeps/pthread/aio_fsync.c deleted file mode 100644 index c2e8ec03f9..0000000000 --- a/sysdeps/pthread/aio_fsync.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Synchronize I/O in given file descriptor. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* We use an UGLY hack to prevent gcc from finding us cheating. The - implementation of aio_fsync and aio_fsync64 are identical and so - we want to avoid code duplication by using aliases. But gcc sees - the different parameter lists and prints a warning. We define here - a function so that aio_fsync64 has no prototype. */ -#define aio_fsync64 XXX -#include -/* And undo the hack. */ -#undef aio_fsync64 -#include -#include - -#include - - -int -aio_fsync (int op, struct aiocb *aiocbp) -{ - if (op != O_DSYNC && __builtin_expect (op != O_SYNC, 0)) - { - __set_errno (EINVAL); - return -1; - } - - /* Verify that this is an open file descriptor. */ - if (__glibc_unlikely (fcntl (aiocbp->aio_fildes, F_GETFL) == -1)) - { - __set_errno (EBADF); - return -1; - } - - return (__aio_enqueue_request ((aiocb_union *) aiocbp, - op == O_SYNC ? LIO_SYNC : LIO_DSYNC) == NULL - ? -1 : 0); -} - -weak_alias (aio_fsync, aio_fsync64) diff --git a/sysdeps/pthread/aio_misc.c b/sysdeps/pthread/aio_misc.c deleted file mode 100644 index 98fdc66e80..0000000000 --- a/sysdeps/pthread/aio_misc.c +++ /dev/null @@ -1,730 +0,0 @@ -/* Handle general operations. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef aio_create_helper_thread -# define aio_create_helper_thread __aio_create_helper_thread - -extern inline int -__aio_create_helper_thread (pthread_t *threadp, void *(*tf) (void *), void *arg) -{ - pthread_attr_t attr; - - /* Make sure the thread is created detached. */ - pthread_attr_init (&attr); - pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); - - int ret = pthread_create (threadp, &attr, tf, arg); - - (void) pthread_attr_destroy (&attr); - return ret; -} -#endif - -static void add_request_to_runlist (struct requestlist *newrequest); - -/* Pool of request list entries. */ -static struct requestlist **pool; - -/* Number of total and allocated pool entries. */ -static size_t pool_max_size; -static size_t pool_size; - -/* We implement a two dimensional array but allocate each row separately. - The macro below determines how many entries should be used per row. - It should better be a power of two. */ -#define ENTRIES_PER_ROW 32 - -/* How many rows we allocate at once. */ -#define ROWS_STEP 8 - -/* List of available entries. */ -static struct requestlist *freelist; - -/* List of request waiting to be processed. */ -static struct requestlist *runlist; - -/* Structure list of all currently processed requests. */ -static struct requestlist *requests; - -/* Number of threads currently running. */ -static int nthreads; - -/* Number of threads waiting for work to arrive. */ -static int idle_thread_count; - - -/* These are the values used to optimize the use of AIO. The user can - overwrite them by using the `aio_init' function. */ -static struct aioinit optim = -{ - 20, /* int aio_threads; Maximal number of threads. */ - 64, /* int aio_num; Number of expected simultaneous requests. */ - 0, - 0, - 0, - 0, - 1, - 0 -}; - - -/* Since the list is global we need a mutex protecting it. */ -pthread_mutex_t __aio_requests_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; - -/* When you add a request to the list and there are idle threads present, - you signal this condition variable. When a thread finishes work, it waits - on this condition variable for a time before it actually exits. */ -pthread_cond_t __aio_new_request_notification = PTHREAD_COND_INITIALIZER; - - -/* Functions to handle request list pool. */ -static struct requestlist * -get_elem (void) -{ - struct requestlist *result; - - if (freelist == NULL) - { - struct requestlist *new_row; - int cnt; - - assert (sizeof (struct aiocb) == sizeof (struct aiocb64)); - - if (pool_size + 1 >= pool_max_size) - { - size_t new_max_size = pool_max_size + ROWS_STEP; - struct requestlist **new_tab; - - new_tab = (struct requestlist **) - realloc (pool, new_max_size * sizeof (struct requestlist *)); - - if (new_tab == NULL) - return NULL; - - pool_max_size = new_max_size; - pool = new_tab; - } - - /* Allocate the new row. */ - cnt = pool_size == 0 ? optim.aio_num : ENTRIES_PER_ROW; - new_row = (struct requestlist *) calloc (cnt, - sizeof (struct requestlist)); - if (new_row == NULL) - return NULL; - - pool[pool_size++] = new_row; - - /* Put all the new entries in the freelist. */ - do - { - new_row->next_prio = freelist; - freelist = new_row++; - } - while (--cnt > 0); - } - - result = freelist; - freelist = freelist->next_prio; - - return result; -} - - -void -internal_function -__aio_free_request (struct requestlist *elem) -{ - elem->running = no; - elem->next_prio = freelist; - freelist = elem; -} - - -struct requestlist * -internal_function -__aio_find_req (aiocb_union *elem) -{ - struct requestlist *runp = requests; - int fildes = elem->aiocb.aio_fildes; - - while (runp != NULL && runp->aiocbp->aiocb.aio_fildes < fildes) - runp = runp->next_fd; - - if (runp != NULL) - { - if (runp->aiocbp->aiocb.aio_fildes != fildes) - runp = NULL; - else - while (runp != NULL && runp->aiocbp != elem) - runp = runp->next_prio; - } - - return runp; -} - - -struct requestlist * -internal_function -__aio_find_req_fd (int fildes) -{ - struct requestlist *runp = requests; - - while (runp != NULL && runp->aiocbp->aiocb.aio_fildes < fildes) - runp = runp->next_fd; - - return (runp != NULL && runp->aiocbp->aiocb.aio_fildes == fildes - ? runp : NULL); -} - - -void -internal_function -__aio_remove_request (struct requestlist *last, struct requestlist *req, - int all) -{ - assert (req->running == yes || req->running == queued - || req->running == done); - - if (last != NULL) - last->next_prio = all ? NULL : req->next_prio; - else - { - if (all || req->next_prio == NULL) - { - if (req->last_fd != NULL) - req->last_fd->next_fd = req->next_fd; - else - requests = req->next_fd; - if (req->next_fd != NULL) - req->next_fd->last_fd = req->last_fd; - } - else - { - if (req->last_fd != NULL) - req->last_fd->next_fd = req->next_prio; - else - requests = req->next_prio; - - if (req->next_fd != NULL) - req->next_fd->last_fd = req->next_prio; - - req->next_prio->last_fd = req->last_fd; - req->next_prio->next_fd = req->next_fd; - - /* Mark this entry as runnable. */ - req->next_prio->running = yes; - } - - if (req->running == yes) - { - struct requestlist *runp = runlist; - - last = NULL; - while (runp != NULL) - { - if (runp == req) - { - if (last == NULL) - runlist = runp->next_run; - else - last->next_run = runp->next_run; - break; - } - last = runp; - runp = runp->next_run; - } - } - } -} - - -/* The thread handler. */ -static void *handle_fildes_io (void *arg); - - -/* User optimization. */ -void -__aio_init (const struct aioinit *init) -{ - /* Get the mutex. */ - pthread_mutex_lock (&__aio_requests_mutex); - - /* Only allow writing new values if the table is not yet allocated. */ - if (pool == NULL) - { - optim.aio_threads = init->aio_threads < 1 ? 1 : init->aio_threads; - assert (powerof2 (ENTRIES_PER_ROW)); - optim.aio_num = (init->aio_num < ENTRIES_PER_ROW - ? ENTRIES_PER_ROW - : init->aio_num & ~(ENTRIES_PER_ROW - 1)); - } - - if (init->aio_idle_time != 0) - optim.aio_idle_time = init->aio_idle_time; - - /* Release the mutex. */ - pthread_mutex_unlock (&__aio_requests_mutex); -} -weak_alias (__aio_init, aio_init) - - -/* The main function of the async I/O handling. It enqueues requests - and if necessary starts and handles threads. */ -struct requestlist * -internal_function -__aio_enqueue_request (aiocb_union *aiocbp, int operation) -{ - int result = 0; - int policy, prio; - struct sched_param param; - struct requestlist *last, *runp, *newp; - int running = no; - - if (operation == LIO_SYNC || operation == LIO_DSYNC) - aiocbp->aiocb.aio_reqprio = 0; - else if (aiocbp->aiocb.aio_reqprio < 0 -#ifdef AIO_PRIO_DELTA_MAX - || aiocbp->aiocb.aio_reqprio > AIO_PRIO_DELTA_MAX -#endif - ) - { - /* Invalid priority value. */ - __set_errno (EINVAL); - aiocbp->aiocb.__error_code = EINVAL; - aiocbp->aiocb.__return_value = -1; - return NULL; - } - - /* Compute priority for this request. */ - pthread_getschedparam (pthread_self (), &policy, ¶m); - prio = param.sched_priority - aiocbp->aiocb.aio_reqprio; - - /* Get the mutex. */ - pthread_mutex_lock (&__aio_requests_mutex); - - last = NULL; - runp = requests; - /* First look whether the current file descriptor is currently - worked with. */ - while (runp != NULL - && runp->aiocbp->aiocb.aio_fildes < aiocbp->aiocb.aio_fildes) - { - last = runp; - runp = runp->next_fd; - } - - /* Get a new element for the waiting list. */ - newp = get_elem (); - if (newp == NULL) - { - pthread_mutex_unlock (&__aio_requests_mutex); - __set_errno (EAGAIN); - return NULL; - } - newp->aiocbp = aiocbp; -#ifdef BROKEN_THREAD_SIGNALS - newp->caller_pid = (aiocbp->aiocb.aio_sigevent.sigev_notify == SIGEV_SIGNAL - ? getpid () : 0); -#endif - newp->waiting = NULL; - - aiocbp->aiocb.__abs_prio = prio; - aiocbp->aiocb.__policy = policy; - aiocbp->aiocb.aio_lio_opcode = operation; - aiocbp->aiocb.__error_code = EINPROGRESS; - aiocbp->aiocb.__return_value = 0; - - if (runp != NULL - && runp->aiocbp->aiocb.aio_fildes == aiocbp->aiocb.aio_fildes) - { - /* The current file descriptor is worked on. It makes no sense - to start another thread since this new thread would fight - with the running thread for the resources. But we also cannot - say that the thread processing this desriptor shall immediately - after finishing the current job process this request if there - are other threads in the running queue which have a higher - priority. */ - - /* Simply enqueue it after the running one according to the - priority. */ - last = NULL; - while (runp->next_prio != NULL - && runp->next_prio->aiocbp->aiocb.__abs_prio >= prio) - { - last = runp; - runp = runp->next_prio; - } - - newp->next_prio = runp->next_prio; - runp->next_prio = newp; - - running = queued; - } - else - { - running = yes; - /* Enqueue this request for a new descriptor. */ - if (last == NULL) - { - newp->last_fd = NULL; - newp->next_fd = requests; - if (requests != NULL) - requests->last_fd = newp; - requests = newp; - } - else - { - newp->next_fd = last->next_fd; - newp->last_fd = last; - last->next_fd = newp; - if (newp->next_fd != NULL) - newp->next_fd->last_fd = newp; - } - - newp->next_prio = NULL; - last = NULL; - } - - if (running == yes) - { - /* We try to create a new thread for this file descriptor. The - function which gets called will handle all available requests - for this descriptor and when all are processed it will - terminate. - - If no new thread can be created or if the specified limit of - threads for AIO is reached we queue the request. */ - - /* See if we need to and are able to create a thread. */ - if (nthreads < optim.aio_threads && idle_thread_count == 0) - { - pthread_t thid; - - running = newp->running = allocated; - - /* Now try to start a thread. */ - result = aio_create_helper_thread (&thid, handle_fildes_io, newp); - if (result == 0) - /* We managed to enqueue the request. All errors which can - happen now can be recognized by calls to `aio_return' and - `aio_error'. */ - ++nthreads; - else - { - /* Reset the running flag. The new request is not running. */ - running = newp->running = yes; - - if (nthreads == 0) - { - /* We cannot create a thread in the moment and there is - also no thread running. This is a problem. `errno' is - set to EAGAIN if this is only a temporary problem. */ - __aio_remove_request (last, newp, 0); - } - else - result = 0; - } - } - } - - /* Enqueue the request in the run queue if it is not yet running. */ - if (running == yes && result == 0) - { - add_request_to_runlist (newp); - - /* If there is a thread waiting for work, then let it know that we - have just given it something to do. */ - if (idle_thread_count > 0) - pthread_cond_signal (&__aio_new_request_notification); - } - - if (result == 0) - newp->running = running; - else - { - /* Something went wrong. */ - __aio_free_request (newp); - aiocbp->aiocb.__error_code = result; - __set_errno (result); - newp = NULL; - } - - /* Release the mutex. */ - pthread_mutex_unlock (&__aio_requests_mutex); - - return newp; -} - - -static void * -handle_fildes_io (void *arg) -{ - pthread_t self = pthread_self (); - struct sched_param param; - struct requestlist *runp = (struct requestlist *) arg; - aiocb_union *aiocbp; - int policy; - int fildes; - - pthread_getschedparam (self, &policy, ¶m); - - do - { - /* If runp is NULL, then we were created to service the work queue - in general, not to handle any particular request. In that case we - skip the "do work" stuff on the first pass, and go directly to the - "get work off the work queue" part of this loop, which is near the - end. */ - if (runp == NULL) - pthread_mutex_lock (&__aio_requests_mutex); - else - { - /* Hopefully this request is marked as running. */ - assert (runp->running == allocated); - - /* Update our variables. */ - aiocbp = runp->aiocbp; - fildes = aiocbp->aiocb.aio_fildes; - - /* Change the priority to the requested value (if necessary). */ - if (aiocbp->aiocb.__abs_prio != param.sched_priority - || aiocbp->aiocb.__policy != policy) - { - param.sched_priority = aiocbp->aiocb.__abs_prio; - policy = aiocbp->aiocb.__policy; - pthread_setschedparam (self, policy, ¶m); - } - - /* Process request pointed to by RUNP. We must not be disturbed - by signals. */ - if ((aiocbp->aiocb.aio_lio_opcode & 127) == LIO_READ) - { - if (sizeof (off_t) != sizeof (off64_t) - && aiocbp->aiocb.aio_lio_opcode & 128) - aiocbp->aiocb.__return_value = - TEMP_FAILURE_RETRY (__pread64 (fildes, (void *) - aiocbp->aiocb64.aio_buf, - aiocbp->aiocb64.aio_nbytes, - aiocbp->aiocb64.aio_offset)); - else - aiocbp->aiocb.__return_value = - TEMP_FAILURE_RETRY (__libc_pread (fildes, - (void *) - aiocbp->aiocb.aio_buf, - aiocbp->aiocb.aio_nbytes, - aiocbp->aiocb.aio_offset)); - - if (aiocbp->aiocb.__return_value == -1 && errno == ESPIPE) - /* The Linux kernel is different from others. It returns - ESPIPE if using pread on a socket. Other platforms - simply ignore the offset parameter and behave like - read. */ - aiocbp->aiocb.__return_value = - TEMP_FAILURE_RETRY (read (fildes, - (void *) aiocbp->aiocb64.aio_buf, - aiocbp->aiocb64.aio_nbytes)); - } - else if ((aiocbp->aiocb.aio_lio_opcode & 127) == LIO_WRITE) - { - if (sizeof (off_t) != sizeof (off64_t) - && aiocbp->aiocb.aio_lio_opcode & 128) - aiocbp->aiocb.__return_value = - TEMP_FAILURE_RETRY (__pwrite64 (fildes, (const void *) - aiocbp->aiocb64.aio_buf, - aiocbp->aiocb64.aio_nbytes, - aiocbp->aiocb64.aio_offset)); - else - aiocbp->aiocb.__return_value = - TEMP_FAILURE_RETRY (__libc_pwrite (fildes, (const void *) - aiocbp->aiocb.aio_buf, - aiocbp->aiocb.aio_nbytes, - aiocbp->aiocb.aio_offset)); - - if (aiocbp->aiocb.__return_value == -1 && errno == ESPIPE) - /* The Linux kernel is different from others. It returns - ESPIPE if using pwrite on a socket. Other platforms - simply ignore the offset parameter and behave like - write. */ - aiocbp->aiocb.__return_value = - TEMP_FAILURE_RETRY (write (fildes, - (void *) aiocbp->aiocb64.aio_buf, - aiocbp->aiocb64.aio_nbytes)); - } - else if (aiocbp->aiocb.aio_lio_opcode == LIO_DSYNC) - aiocbp->aiocb.__return_value = - TEMP_FAILURE_RETRY (fdatasync (fildes)); - else if (aiocbp->aiocb.aio_lio_opcode == LIO_SYNC) - aiocbp->aiocb.__return_value = - TEMP_FAILURE_RETRY (fsync (fildes)); - else - { - /* This is an invalid opcode. */ - aiocbp->aiocb.__return_value = -1; - __set_errno (EINVAL); - } - - /* Get the mutex. */ - pthread_mutex_lock (&__aio_requests_mutex); - - if (aiocbp->aiocb.__return_value == -1) - aiocbp->aiocb.__error_code = errno; - else - aiocbp->aiocb.__error_code = 0; - - /* Send the signal to notify about finished processing of the - request. */ - __aio_notify (runp); - - /* For debugging purposes we reset the running flag of the - finished request. */ - assert (runp->running == allocated); - runp->running = done; - - /* Now dequeue the current request. */ - __aio_remove_request (NULL, runp, 0); - if (runp->next_prio != NULL) - add_request_to_runlist (runp->next_prio); - - /* Free the old element. */ - __aio_free_request (runp); - } - - runp = runlist; - - /* If the runlist is empty, then we sleep for a while, waiting for - something to arrive in it. */ - if (runp == NULL && optim.aio_idle_time >= 0) - { - struct timeval now; - struct timespec wakeup_time; - - ++idle_thread_count; - __gettimeofday (&now, NULL); - wakeup_time.tv_sec = now.tv_sec + optim.aio_idle_time; - wakeup_time.tv_nsec = now.tv_usec * 1000; - if (wakeup_time.tv_nsec >= 1000000000) - { - wakeup_time.tv_nsec -= 1000000000; - ++wakeup_time.tv_sec; - } - pthread_cond_timedwait (&__aio_new_request_notification, - &__aio_requests_mutex, - &wakeup_time); - --idle_thread_count; - runp = runlist; - } - - if (runp == NULL) - --nthreads; - else - { - assert (runp->running == yes); - runp->running = allocated; - runlist = runp->next_run; - - /* If we have a request to process, and there's still another in - the run list, then we need to either wake up or create a new - thread to service the request that is still in the run list. */ - if (runlist != NULL) - { - /* There are at least two items in the work queue to work on. - If there are other idle threads, then we should wake them - up for these other work elements; otherwise, we should try - to create a new thread. */ - if (idle_thread_count > 0) - pthread_cond_signal (&__aio_new_request_notification); - else if (nthreads < optim.aio_threads) - { - pthread_t thid; - pthread_attr_t attr; - - /* Make sure the thread is created detached. */ - pthread_attr_init (&attr); - pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); - - /* Now try to start a thread. If we fail, no big deal, - because we know that there is at least one thread (us) - that is working on AIO operations. */ - if (pthread_create (&thid, &attr, handle_fildes_io, NULL) - == 0) - ++nthreads; - } - } - } - - /* Release the mutex. */ - pthread_mutex_unlock (&__aio_requests_mutex); - } - while (runp != NULL); - - return NULL; -} - - -/* Free allocated resources. */ -libc_freeres_fn (free_res) -{ - size_t row; - - for (row = 0; row < pool_max_size; ++row) - free (pool[row]); - - free (pool); -} - - -/* Add newrequest to the runlist. The __abs_prio flag of newrequest must - be correctly set to do this. Also, you had better set newrequest's - "running" flag to "yes" before you release your lock or you'll throw an - assertion. */ -static void -add_request_to_runlist (struct requestlist *newrequest) -{ - int prio = newrequest->aiocbp->aiocb.__abs_prio; - struct requestlist *runp; - - if (runlist == NULL || runlist->aiocbp->aiocb.__abs_prio < prio) - { - newrequest->next_run = runlist; - runlist = newrequest; - } - else - { - runp = runlist; - - while (runp->next_run != NULL - && runp->next_run->aiocbp->aiocb.__abs_prio >= prio) - runp = runp->next_run; - - newrequest->next_run = runp->next_run; - runp->next_run = newrequest; - } -} diff --git a/sysdeps/pthread/aio_misc.h b/sysdeps/pthread/aio_misc.h deleted file mode 100644 index 3315d82400..0000000000 --- a/sysdeps/pthread/aio_misc.h +++ /dev/null @@ -1,143 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _AIO_MISC_H -#define _AIO_MISC_H 1 - -#include -#include - - -/* Extend the operation enum. */ -enum -{ - LIO_DSYNC = LIO_NOP + 1, - LIO_SYNC, - LIO_READ64 = LIO_READ | 128, - LIO_WRITE64 = LIO_WRITE | 128 -}; - - -/* Union of the two request types. */ -typedef union - { - struct aiocb aiocb; - struct aiocb64 aiocb64; - } aiocb_union; - - -/* Used to synchronize. */ -struct waitlist - { - struct waitlist *next; - - /* The next two fields is used in synchronous `lio_listio' operations. */ -#ifndef DONT_NEED_AIO_MISC_COND - pthread_cond_t *cond; -#endif - int *result; - - volatile unsigned int *counterp; - /* The next field is used in asynchronous `lio_listio' operations. */ - struct sigevent *sigevp; -#ifdef BROKEN_THREAD_SIGNALS - /* XXX See requestlist, it's used to work around the broken signal - handling in Linux. */ - pid_t caller_pid; -#endif - }; - - -/* Status of a request. */ -enum -{ - no, - queued, - yes, - allocated, - done -}; - - -/* Used to queue requests.. */ -struct requestlist - { - int running; - - struct requestlist *last_fd; - struct requestlist *next_fd; - struct requestlist *next_prio; - struct requestlist *next_run; - - /* Pointer to the actual data. */ - aiocb_union *aiocbp; - -#ifdef BROKEN_THREAD_SIGNALS - /* PID of the initiator thread. - XXX This is only necessary for the broken signal handling on Linux. */ - pid_t caller_pid; -#endif - - /* List of waiting processes. */ - struct waitlist *waiting; - }; - - -/* Lock for global I/O list of requests. */ -extern pthread_mutex_t __aio_requests_mutex attribute_hidden; - - -/* Enqueue request. */ -extern struct requestlist *__aio_enqueue_request (aiocb_union *aiocbp, - int operation) - attribute_hidden internal_function; - -/* Find request entry for given AIO control block. */ -extern struct requestlist *__aio_find_req (aiocb_union *elem) - attribute_hidden internal_function; - -/* Find request entry for given file descriptor. */ -extern struct requestlist *__aio_find_req_fd (int fildes) - attribute_hidden internal_function; - -/* Remove request from the list. */ -extern void __aio_remove_request (struct requestlist *last, - struct requestlist *req, int all) - attribute_hidden internal_function; - -/* Release the entry for the request. */ -extern void __aio_free_request (struct requestlist *req) - attribute_hidden internal_function; - -/* Notify initiator of request and tell this everybody listening. */ -extern void __aio_notify (struct requestlist *req) - attribute_hidden internal_function; - -/* Notify initiator of request. */ -#ifdef BROKEN_THREAD_SIGNALS -extern int __aio_notify_only (struct sigevent *sigev, pid_t caller_pid) - attribute_hidden internal_function; -#else -extern int __aio_notify_only (struct sigevent *sigev) - attribute_hidden internal_function; -#endif - -/* Send the signal. */ -extern int __aio_sigqueue (int sig, const union sigval val, pid_t caller_pid) - attribute_hidden internal_function; - -#endif /* aio_misc.h */ diff --git a/sysdeps/pthread/aio_notify.c b/sysdeps/pthread/aio_notify.c deleted file mode 100644 index 03f4e001ef..0000000000 --- a/sysdeps/pthread/aio_notify.c +++ /dev/null @@ -1,177 +0,0 @@ -/* Notify initiator of AIO request. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#ifndef aio_start_notify_thread -# define aio_start_notify_thread() do { } while (0) -#endif - -struct notify_func - { - void (*func) (sigval_t); - sigval_t value; - }; - -static void * -notify_func_wrapper (void *arg) -{ - aio_start_notify_thread (); - struct notify_func *const n = arg; - void (*func) (sigval_t) = n->func; - sigval_t value = n->value; - free (n); - (*func) (value); - return NULL; -} - - -int -internal_function -#ifdef BROKEN_THREAD_SIGNALS -__aio_notify_only (struct sigevent *sigev, pid_t caller_pid) -#else -__aio_notify_only (struct sigevent *sigev) -#endif -{ - int result = 0; - - /* Send the signal to notify about finished processing of the request. */ - if (__glibc_unlikely (sigev->sigev_notify == SIGEV_THREAD)) - { - /* We have to start a thread. */ - pthread_t tid; - pthread_attr_t attr, *pattr; - - pattr = (pthread_attr_t *) sigev->sigev_notify_attributes; - if (pattr == NULL) - { - pthread_attr_init (&attr); - pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); - pattr = &attr; - } - - /* SIGEV may be freed as soon as we return, so we cannot let the - notification thread use that pointer. Even though a sigval_t is - only one word and the same size as a void *, we cannot just pass - the value through pthread_create as the argument and have the new - thread run the user's function directly, because on some machines - the calling convention for a union like sigval_t is different from - that for a pointer type like void *. */ - struct notify_func *nf = malloc (sizeof *nf); - if (nf == NULL) - result = -1; - else - { - nf->func = sigev->sigev_notify_function; - nf->value = sigev->sigev_value; - if (pthread_create (&tid, pattr, notify_func_wrapper, nf) < 0) - { - free (nf); - result = -1; - } - } - } - else if (sigev->sigev_notify == SIGEV_SIGNAL) - { - /* We have to send a signal. */ -#if _POSIX_REALTIME_SIGNALS > 0 - /* Note that the standard gives us the option of using a plain - non-queuing signal here when SA_SIGINFO is not set for the signal. */ -# ifdef BROKEN_THREAD_SIGNALS - if (__aio_sigqueue (sigev->sigev_signo, sigev->sigev_value, caller_pid) - < 0) - result = -1; -# else - if (__aio_sigqueue (sigev->sigev_signo, sigev->sigev_value, getpid ()) - < 0) - result = -1; -# endif -#else - /* There are no queued signals on this system at all. */ - result = raise (sigev->sigev_signo); -#endif - } - - return result; -} - - -void -internal_function -__aio_notify (struct requestlist *req) -{ - struct waitlist *waitlist; - struct aiocb *aiocbp = &req->aiocbp->aiocb; - -#ifdef BROKEN_THREAD_SIGNALS - if (__aio_notify_only (&aiocbp->aio_sigevent, req->caller_pid) != 0) -#else - if (__aio_notify_only (&aiocbp->aio_sigevent) != 0) -#endif - { - /* XXX What shall we do if already an error is set by - read/write/fsync? */ - aiocbp->__error_code = errno; - aiocbp->__return_value = -1; - } - - /* Now also notify possibly waiting threads. */ - waitlist = req->waiting; - while (waitlist != NULL) - { - struct waitlist *next = waitlist->next; - - if (waitlist->sigevp == NULL) - { - if (waitlist->result != NULL && aiocbp->__return_value == -1) - *waitlist->result = -1; - -#ifdef DONT_NEED_AIO_MISC_COND - AIO_MISC_NOTIFY (waitlist); -#else - /* Decrement the counter. */ - --*waitlist->counterp; - - pthread_cond_signal (waitlist->cond); -#endif - } - else - /* This is part of an asynchronous `lio_listio' operation. If - this request is the last one, send the signal. */ - if (--*waitlist->counterp == 0) - { -#ifdef BROKEN_THREAD_SIGNALS - __aio_notify_only (waitlist->sigevp, waitlist->caller_pid); -#else - __aio_notify_only (waitlist->sigevp); -#endif - /* This is tricky. See lio_listio.c for the reason why - this works. */ - free ((void *) waitlist->counterp); - } - - waitlist = next; - } -} diff --git a/sysdeps/pthread/aio_read.c b/sysdeps/pthread/aio_read.c deleted file mode 100644 index 8ef23a6e08..0000000000 --- a/sysdeps/pthread/aio_read.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Asynchronous read. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -int -aio_read (struct aiocb *aiocbp) -{ - return (__aio_enqueue_request ((aiocb_union *) aiocbp, LIO_READ) == NULL - ? -1 : 0); -} diff --git a/sysdeps/pthread/aio_read64.c b/sysdeps/pthread/aio_read64.c deleted file mode 100644 index 982b2586f4..0000000000 --- a/sysdeps/pthread/aio_read64.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Asynchronous read, 64bit offset version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -int -aio_read64 (struct aiocb64 *aiocbp) -{ - return (__aio_enqueue_request ((aiocb_union *) aiocbp, LIO_READ64) == NULL - ? -1 : 0); -} diff --git a/sysdeps/pthread/aio_suspend.c b/sysdeps/pthread/aio_suspend.c deleted file mode 100644 index c739285c6a..0000000000 --- a/sysdeps/pthread/aio_suspend.c +++ /dev/null @@ -1,256 +0,0 @@ -/* Suspend until termination of a requests. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* We use an UGLY hack to prevent gcc from finding us cheating. The - implementations of aio_suspend and aio_suspend64 are identical and so - we want to avoid code duplication by using aliases. But gcc sees - the different parameter lists and prints a warning. We define here - a function so that aio_suspend64 has no prototype. */ -#define aio_suspend64 XXX -#include -/* And undo the hack. */ -#undef aio_suspend64 - -#include -#include -#include -#include -#include - -#include -#include - - -struct clparam -{ - const struct aiocb *const *list; - struct waitlist *waitlist; - struct requestlist **requestlist; -#ifndef DONT_NEED_AIO_MISC_COND - pthread_cond_t *cond; -#endif - int nent; -}; - - -static void -cleanup (void *arg) -{ -#ifdef DONT_NEED_AIO_MISC_COND - /* Acquire the mutex. If pthread_cond_*wait is used this would - happen implicitly. */ - pthread_mutex_lock (&__aio_requests_mutex); -#endif - - const struct clparam *param = (const struct clparam *) arg; - - /* Now remove the entry in the waiting list for all requests - which didn't terminate. */ - int cnt = param->nent; - while (cnt-- > 0) - if (param->list[cnt] != NULL - && param->list[cnt]->__error_code == EINPROGRESS) - { - struct waitlist **listp; - - assert (param->requestlist[cnt] != NULL); - - /* There is the chance that we cannot find our entry anymore. This - could happen if the request terminated and restarted again. */ - listp = ¶m->requestlist[cnt]->waiting; - while (*listp != NULL && *listp != ¶m->waitlist[cnt]) - listp = &(*listp)->next; - - if (*listp != NULL) - *listp = (*listp)->next; - } - -#ifndef DONT_NEED_AIO_MISC_COND - /* Release the conditional variable. */ - (void) pthread_cond_destroy (param->cond); -#endif - - /* Release the mutex. */ - pthread_mutex_unlock (&__aio_requests_mutex); -} - -#ifdef DONT_NEED_AIO_MISC_COND -static int -__attribute__ ((noinline)) -do_aio_misc_wait (unsigned int *cntr, const struct timespec *timeout) -{ - int result = 0; - - AIO_MISC_WAIT (result, *cntr, timeout, 1); - - return result; -} -#endif - -int -aio_suspend (const struct aiocb *const list[], int nent, - const struct timespec *timeout) -{ - if (__glibc_unlikely (nent < 0)) - { - __set_errno (EINVAL); - return -1; - } - - struct waitlist waitlist[nent]; - struct requestlist *requestlist[nent]; -#ifndef DONT_NEED_AIO_MISC_COND - pthread_cond_t cond = PTHREAD_COND_INITIALIZER; -#endif - int cnt; - bool any = false; - int result = 0; - unsigned int cntr = 1; - - /* Request the mutex. */ - pthread_mutex_lock (&__aio_requests_mutex); - - /* There is not yet a finished request. Signal the request that - we are working for it. */ - for (cnt = 0; cnt < nent; ++cnt) - if (list[cnt] != NULL) - { - if (list[cnt]->__error_code == EINPROGRESS) - { - requestlist[cnt] = __aio_find_req ((aiocb_union *) list[cnt]); - - if (requestlist[cnt] != NULL) - { -#ifndef DONT_NEED_AIO_MISC_COND - waitlist[cnt].cond = &cond; -#endif - waitlist[cnt].result = NULL; - waitlist[cnt].next = requestlist[cnt]->waiting; - waitlist[cnt].counterp = &cntr; - waitlist[cnt].sigevp = NULL; -#ifdef BROKEN_THREAD_SIGNALS - waitlist[cnt].caller_pid = 0; /* Not needed. */ -#endif - requestlist[cnt]->waiting = &waitlist[cnt]; - any = true; - } - else - /* We will never suspend. */ - break; - } - else - /* We will never suspend. */ - break; - } - - - /* Only if none of the entries is NULL or finished to be wait. */ - if (cnt == nent && any) - { - struct clparam clparam = - { - .list = list, - .waitlist = waitlist, - .requestlist = requestlist, -#ifndef DONT_NEED_AIO_MISC_COND - .cond = &cond, -#endif - .nent = nent - }; - - pthread_cleanup_push (cleanup, &clparam); - -#ifdef DONT_NEED_AIO_MISC_COND - result = do_aio_misc_wait (&cntr, timeout); -#else - if (timeout == NULL) - result = pthread_cond_wait (&cond, &__aio_requests_mutex); - else - { - /* We have to convert the relative timeout value into an - absolute time value with pthread_cond_timedwait expects. */ - struct timeval now; - struct timespec abstime; - - __gettimeofday (&now, NULL); - abstime.tv_nsec = timeout->tv_nsec + now.tv_usec * 1000; - abstime.tv_sec = timeout->tv_sec + now.tv_sec; - if (abstime.tv_nsec >= 1000000000) - { - abstime.tv_nsec -= 1000000000; - abstime.tv_sec += 1; - } - - result = pthread_cond_timedwait (&cond, &__aio_requests_mutex, - &abstime); - } -#endif - - pthread_cleanup_pop (0); - } - - /* Now remove the entry in the waiting list for all requests - which didn't terminate. */ - while (cnt-- > 0) - if (list[cnt] != NULL && list[cnt]->__error_code == EINPROGRESS) - { - struct waitlist **listp; - - assert (requestlist[cnt] != NULL); - - /* There is the chance that we cannot find our entry anymore. This - could happen if the request terminated and restarted again. */ - listp = &requestlist[cnt]->waiting; - while (*listp != NULL && *listp != &waitlist[cnt]) - listp = &(*listp)->next; - - if (*listp != NULL) - *listp = (*listp)->next; - } - -#ifndef DONT_NEED_AIO_MISC_COND - /* Release the conditional variable. */ - if (__glibc_unlikely (pthread_cond_destroy (&cond) != 0)) - /* This must never happen. */ - abort (); -#endif - - if (result != 0) - { -#ifndef DONT_NEED_AIO_MISC_COND - /* An error occurred. Possibly it's ETIMEDOUT. We have to translate - the timeout error report of `pthread_cond_timedwait' to the - form expected from `aio_suspend'. */ - if (result == ETIMEDOUT) - __set_errno (EAGAIN); - else -#endif - __set_errno (result); - - result = -1; - } - - /* Release the mutex. */ - pthread_mutex_unlock (&__aio_requests_mutex); - - return result; -} - -weak_alias (aio_suspend, aio_suspend64) diff --git a/sysdeps/pthread/aio_write.c b/sysdeps/pthread/aio_write.c deleted file mode 100644 index 45d66e6ac6..0000000000 --- a/sysdeps/pthread/aio_write.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Asynchronous write. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -int -aio_write (struct aiocb *aiocbp) -{ - return (__aio_enqueue_request ((aiocb_union *) aiocbp, LIO_WRITE) == NULL - ? -1 : 0); -} diff --git a/sysdeps/pthread/aio_write64.c b/sysdeps/pthread/aio_write64.c deleted file mode 100644 index 716561d430..0000000000 --- a/sysdeps/pthread/aio_write64.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Asynchronous write, 64bit offset version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - -int -aio_write64 (struct aiocb64 *aiocbp) -{ - return (__aio_enqueue_request ((aiocb_union *) aiocbp, LIO_WRITE64) == NULL - ? -1 : 0); -} diff --git a/sysdeps/pthread/allocalim.h b/sysdeps/pthread/allocalim.h deleted file mode 100644 index 2621eb4d77..0000000000 --- a/sysdeps/pthread/allocalim.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Determine whether block of given size can be allocated on the stack or not. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include - - -extern __always_inline -int -__libc_use_alloca (size_t size) -{ - return (__builtin_expect (size <= PTHREAD_STACK_MIN / 4, 1) - || __builtin_expect (__libc_alloca_cutoff (size), 1)); -} diff --git a/sysdeps/pthread/bits/sigthread.h b/sysdeps/pthread/bits/sigthread.h deleted file mode 100644 index a7a861c9b7..0000000000 --- a/sysdeps/pthread/bits/sigthread.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Signal handling function for threaded programs. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#ifndef _BITS_SIGTHREAD_H -#define _BITS_SIGTHREAD_H 1 - -#if !defined _SIGNAL_H && !defined _PTHREAD_H -# error "Never include this file directly. Use instead" -#endif - -/* Functions for handling signals. */ -#include - -/* Modify the signal mask for the calling thread. The arguments have - the same meaning as for sigprocmask(2). */ -extern int pthread_sigmask (int __how, - const __sigset_t *__restrict __newmask, - __sigset_t *__restrict __oldmask)__THROW; - -/* Send signal SIGNO to the given thread. */ -extern int pthread_kill (pthread_t __threadid, int __signo) __THROW; - -#ifdef __USE_GNU -/* Queue signal and data to a thread. */ -extern int pthread_sigqueue (pthread_t __threadid, int __signo, - const union sigval __value) __THROW; -#endif - -#endif /* bits/sigthread.h */ diff --git a/sysdeps/pthread/flockfile.c b/sysdeps/pthread/flockfile.c deleted file mode 100644 index 7fe8e99161..0000000000 --- a/sysdeps/pthread/flockfile.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -void -__flockfile (FILE *stream) -{ - _IO_lock_lock (*stream->_lock); -} -strong_alias (__flockfile, _IO_flockfile) -weak_alias (__flockfile, flockfile) diff --git a/sysdeps/pthread/ftrylockfile.c b/sysdeps/pthread/ftrylockfile.c deleted file mode 100644 index c1d9da662c..0000000000 --- a/sysdeps/pthread/ftrylockfile.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -int -__ftrylockfile (FILE *stream) -{ - return _IO_lock_trylock (*stream->_lock); -} -strong_alias (__ftrylockfile, _IO_ftrylockfile) -weak_alias (__ftrylockfile, ftrylockfile) diff --git a/sysdeps/pthread/funlockfile.c b/sysdeps/pthread/funlockfile.c deleted file mode 100644 index 2389ad4fbf..0000000000 --- a/sysdeps/pthread/funlockfile.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -void -__funlockfile (FILE *stream) -{ - _IO_lock_unlock (*stream->_lock); -} -strong_alias (__funlockfile, _IO_funlockfile) -weak_alias (__funlockfile, funlockfile) diff --git a/sysdeps/pthread/lio_listio.c b/sysdeps/pthread/lio_listio.c deleted file mode 100644 index e30858ac23..0000000000 --- a/sysdeps/pthread/lio_listio.c +++ /dev/null @@ -1,264 +0,0 @@ -/* Enqueue and list of read or write requests. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef lio_listio -#include -#include -#include -#include -#include - -#include - -#define LIO_OPCODE_BASE 0 -#endif - -#include - - -/* We need this special structure to handle asynchronous I/O. */ -struct async_waitlist - { - unsigned int counter; - struct sigevent sigev; - struct waitlist list[0]; - }; - - -/* The code in glibc 2.1 to glibc 2.4 issued only one event when all - requests submitted with lio_listio finished. The existing practice - is to issue events for the individual requests as well. This is - what the new code does. */ -#if SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_4) -# define LIO_MODE(mode) ((mode) & 127) -# define NO_INDIVIDUAL_EVENT_P(mode) ((mode) & 128) -#else -# define LIO_MODE(mode) mode -# define NO_INDIVIDUAL_EVENT_P(mode) 0 -#endif - - -static int -lio_listio_internal (int mode, struct aiocb *const list[], int nent, - struct sigevent *sig) -{ - struct sigevent defsigev; - struct requestlist *requests[nent]; - int cnt; - volatile unsigned int total = 0; - int result = 0; - - if (sig == NULL) - { - defsigev.sigev_notify = SIGEV_NONE; - sig = &defsigev; - } - - /* Request the mutex. */ - pthread_mutex_lock (&__aio_requests_mutex); - - /* Now we can enqueue all requests. Since we already acquired the - mutex the enqueue function need not do this. */ - for (cnt = 0; cnt < nent; ++cnt) - if (list[cnt] != NULL && list[cnt]->aio_lio_opcode != LIO_NOP) - { - if (NO_INDIVIDUAL_EVENT_P (mode)) - list[cnt]->aio_sigevent.sigev_notify = SIGEV_NONE; - - requests[cnt] = __aio_enqueue_request ((aiocb_union *) list[cnt], - (list[cnt]->aio_lio_opcode - | LIO_OPCODE_BASE)); - - if (requests[cnt] != NULL) - /* Successfully enqueued. */ - ++total; - else - /* Signal that we've seen an error. `errno' and the error code - of the aiocb will tell more. */ - result = -1; - } - else - requests[cnt] = NULL; - - if (total == 0) - { - /* We don't have anything to do except signalling if we work - asynchronously. */ - - /* Release the mutex. We do this before raising a signal since the - signal handler might do a `siglongjmp' and then the mutex is - locked forever. */ - pthread_mutex_unlock (&__aio_requests_mutex); - - if (LIO_MODE (mode) == LIO_NOWAIT) - { -#ifdef BROKEN_THREAD_SIGNALS - __aio_notify_only (sig, - sig->sigev_notify == SIGEV_SIGNAL ? getpid () : 0); -#else - __aio_notify_only (sig); -#endif - } - - return result; - } - else if (LIO_MODE (mode) == LIO_WAIT) - { -#ifndef DONT_NEED_AIO_MISC_COND - pthread_cond_t cond = PTHREAD_COND_INITIALIZER; - int oldstate; -#endif - struct waitlist waitlist[nent]; - - total = 0; - for (cnt = 0; cnt < nent; ++cnt) - { - assert (requests[cnt] == NULL || list[cnt] != NULL); - - if (requests[cnt] != NULL && list[cnt]->aio_lio_opcode != LIO_NOP) - { -#ifndef DONT_NEED_AIO_MISC_COND - waitlist[cnt].cond = &cond; -#endif - waitlist[cnt].result = &result; - waitlist[cnt].next = requests[cnt]->waiting; - waitlist[cnt].counterp = &total; - waitlist[cnt].sigevp = NULL; -#ifdef BROKEN_THREAD_SIGNALS - waitlist[cnt].caller_pid = 0; /* Not needed. */ -#endif - requests[cnt]->waiting = &waitlist[cnt]; - ++total; - } - } - -#ifdef DONT_NEED_AIO_MISC_COND - AIO_MISC_WAIT (result, total, NULL, 0); -#else - /* Since `pthread_cond_wait'/`pthread_cond_timedwait' are cancellation - points we must be careful. We added entries to the waiting lists - which we must remove. So defer cancellation for now. */ - pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &oldstate); - - while (total > 0) - pthread_cond_wait (&cond, &__aio_requests_mutex); - - /* Now it's time to restore the cancellation state. */ - pthread_setcancelstate (oldstate, NULL); - - /* Release the conditional variable. */ - if (pthread_cond_destroy (&cond) != 0) - /* This must never happen. */ - abort (); -#endif - - /* If any of the I/O requests failed, return -1 and set errno. */ - if (result != 0) - { - __set_errno (result == EINTR ? EINTR : EIO); - result = -1; - } - } - else - { - struct async_waitlist *waitlist; - - waitlist = (struct async_waitlist *) - malloc (sizeof (struct async_waitlist) - + (nent * sizeof (struct waitlist))); - - if (waitlist == NULL) - { - __set_errno (EAGAIN); - result = -1; - } - else - { -#ifdef BROKEN_THREAD_SIGNALS - pid_t caller_pid = sig->sigev_notify == SIGEV_SIGNAL ? getpid () : 0; -#endif - total = 0; - - for (cnt = 0; cnt < nent; ++cnt) - { - assert (requests[cnt] == NULL || list[cnt] != NULL); - - if (requests[cnt] != NULL - && list[cnt]->aio_lio_opcode != LIO_NOP) - { -#ifndef DONT_NEED_AIO_MISC_COND - waitlist->list[cnt].cond = NULL; -#endif - waitlist->list[cnt].result = NULL; - waitlist->list[cnt].next = requests[cnt]->waiting; - waitlist->list[cnt].counterp = &waitlist->counter; - waitlist->list[cnt].sigevp = &waitlist->sigev; -#ifdef BROKEN_THREAD_SIGNALS - waitlist->list[cnt].caller_pid = caller_pid; -#endif - requests[cnt]->waiting = &waitlist->list[cnt]; - ++total; - } - } - - waitlist->counter = total; - waitlist->sigev = *sig; - } - } - - /* Release the mutex. */ - pthread_mutex_unlock (&__aio_requests_mutex); - - return result; -} - - -#if SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_4) -int -attribute_compat_text_section -__lio_listio_21 (int mode, struct aiocb *const list[], int nent, - struct sigevent *sig) -{ - /* Check arguments. */ - if (mode != LIO_WAIT && mode != LIO_NOWAIT) - { - __set_errno (EINVAL); - return -1; - } - - return lio_listio_internal (mode | LIO_NO_INDIVIDUAL_EVENT, list, nent, sig); -} -compat_symbol (librt, __lio_listio_21, lio_listio, GLIBC_2_1); -#endif - - -int -__lio_listio_item_notify (int mode, struct aiocb *const list[], int nent, - struct sigevent *sig) -{ - /* Check arguments. */ - if (mode != LIO_WAIT && mode != LIO_NOWAIT) - { - __set_errno (EINVAL); - return -1; - } - - return lio_listio_internal (mode, list, nent, sig); -} -versioned_symbol (librt, __lio_listio_item_notify, lio_listio, GLIBC_2_4); diff --git a/sysdeps/pthread/lio_listio64.c b/sysdeps/pthread/lio_listio64.c deleted file mode 100644 index 2c01f23447..0000000000 --- a/sysdeps/pthread/lio_listio64.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Enqueue and list of read or write requests, 64bit offset version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#include - -#define lio_listio lio_listio64 -#define __lio_listio_21 __lio_listio64_21 -#define __lio_listio_item_notify __lio_listio64_item_notify -#define aiocb aiocb64 -#define LIO_OPCODE_BASE 128 -#include diff --git a/sysdeps/pthread/posix-timer.h b/sysdeps/pthread/posix-timer.h deleted file mode 100644 index d5b43cac4c..0000000000 --- a/sysdeps/pthread/posix-timer.h +++ /dev/null @@ -1,190 +0,0 @@ -/* Definitions for POSIX timer implementation on top of NPTL. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Kaz Kylheku . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include - - -/* Forward declaration. */ -struct timer_node; - - -/* Definitions for an internal thread of the POSIX timer implementation. */ -struct thread_node -{ - struct list_head links; - pthread_attr_t attr; - pthread_t id; - unsigned int exists; - struct list_head timer_queue; - pthread_cond_t cond; - struct timer_node *current_timer; - pthread_t captured; - clockid_t clock_id; -}; - - -/* Internal representation of a timer. */ -struct timer_node -{ - struct list_head links; - struct sigevent event; - clockid_t clock; - struct itimerspec value; - struct timespec expirytime; - pthread_attr_t attr; - unsigned int abstime; - unsigned int armed; - enum { - TIMER_FREE, TIMER_INUSE, TIMER_DELETED - } inuse; - struct thread_node *thread; - pid_t creator_pid; - int refcount; - int overrun_count; -}; - - -/* The limit is not published if we are compiled with kernel timer support. - But we still compiled in this implementation with its limit unless built - to require the kernel support. */ -#ifndef TIMER_MAX -# define TIMER_MAX 256 -#endif - -/* Static array with the structures for all the timers. */ -extern struct timer_node __timer_array[TIMER_MAX]; - -/* Global lock to protect operation on the lists. */ -extern pthread_mutex_t __timer_mutex; - -/* Variable to protext initialization. */ -extern pthread_once_t __timer_init_once_control; - -/* Nonzero if initialization of timer implementation failed. */ -extern int __timer_init_failed; - -/* Node for the thread used to deliver signals. */ -extern struct thread_node __timer_signal_thread_rclk; - - -/* Return pointer to timer structure corresponding to ID. */ -#define timer_id2ptr(timerid) ((struct timer_node *) timerid) -#define timer_ptr2id(timerid) ((void *) timerid) - -/* Check whether timer is valid; global mutex must be held. */ -static inline int -timer_valid (struct timer_node *timer) -{ - return timer && timer->inuse == TIMER_INUSE; -} - -/* Timer refcount functions; need global mutex. */ -extern void __timer_dealloc (struct timer_node *timer); - -static inline void -timer_addref (struct timer_node *timer) -{ - timer->refcount++; -} - -static inline void -timer_delref (struct timer_node *timer) -{ - if (--timer->refcount == 0) - __timer_dealloc (timer); -} - -/* Timespec helper routines. */ -static inline int -__attribute ((always_inline)) -timespec_compare (const struct timespec *left, const struct timespec *right) -{ - if (left->tv_sec < right->tv_sec) - return -1; - if (left->tv_sec > right->tv_sec) - return 1; - - if (left->tv_nsec < right->tv_nsec) - return -1; - if (left->tv_nsec > right->tv_nsec) - return 1; - - return 0; -} - -static inline void -timespec_add (struct timespec *sum, const struct timespec *left, - const struct timespec *right) -{ - sum->tv_sec = left->tv_sec + right->tv_sec; - sum->tv_nsec = left->tv_nsec + right->tv_nsec; - - if (sum->tv_nsec >= 1000000000) - { - ++sum->tv_sec; - sum->tv_nsec -= 1000000000; - } -} - -static inline void -timespec_sub (struct timespec *diff, const struct timespec *left, - const struct timespec *right) -{ - diff->tv_sec = left->tv_sec - right->tv_sec; - diff->tv_nsec = left->tv_nsec - right->tv_nsec; - - if (diff->tv_nsec < 0) - { - --diff->tv_sec; - diff->tv_nsec += 1000000000; - } -} - - -/* We need one of the list functions in the other modules. */ -static inline void -list_unlink_ip (struct list_head *list) -{ - struct list_head *lnext = list->next, *lprev = list->prev; - - lnext->prev = lprev; - lprev->next = lnext; - - /* The suffix ip means idempotent; list_unlink_ip can be called - * two or more times on the same node. - */ - - list->next = list; - list->prev = list; -} - - -/* Functions in the helper file. */ -extern void __timer_mutex_cancel_handler (void *arg); -extern void __timer_init_once (void); -extern struct timer_node *__timer_alloc (void); -extern int __timer_thread_start (struct thread_node *thread); -extern struct thread_node *__timer_thread_find_matching (const pthread_attr_t *desired_attr, clockid_t); -extern struct thread_node *__timer_thread_alloc (const pthread_attr_t *desired_attr, clockid_t); -extern void __timer_thread_dealloc (struct thread_node *thread); -extern int __timer_thread_queue_timer (struct thread_node *thread, - struct timer_node *insert); -extern void __timer_thread_wakeup (struct thread_node *thread); diff --git a/sysdeps/pthread/semaphore.h b/sysdeps/pthread/semaphore.h deleted file mode 100644 index 0b095a8891..0000000000 --- a/sysdeps/pthread/semaphore.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SEMAPHORE_H -#define _SEMAPHORE_H 1 - -#include -#include -#ifdef __USE_XOPEN2K -# include -#endif - -/* Get the definition for sem_t. */ -#include - - -__BEGIN_DECLS - -/* Initialize semaphore object SEM to VALUE. If PSHARED then share it - with other processes. */ -extern int sem_init (sem_t *__sem, int __pshared, unsigned int __value) - __THROW; -/* Free resources associated with semaphore object SEM. */ -extern int sem_destroy (sem_t *__sem) __THROW; - -/* Open a named semaphore NAME with open flags OFLAG. */ -extern sem_t *sem_open (const char *__name, int __oflag, ...) __THROW; - -/* Close descriptor for named semaphore SEM. */ -extern int sem_close (sem_t *__sem) __THROW; - -/* Remove named semaphore NAME. */ -extern int sem_unlink (const char *__name) __THROW; - -/* Wait for SEM being posted. - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int sem_wait (sem_t *__sem); - -#ifdef __USE_XOPEN2K -/* Similar to `sem_wait' but wait only until ABSTIME. - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int sem_timedwait (sem_t *__restrict __sem, - const struct timespec *__restrict __abstime); -#endif - -/* Test whether SEM is posted. */ -extern int sem_trywait (sem_t *__sem) __THROWNL; - -/* Post SEM. */ -extern int sem_post (sem_t *__sem) __THROWNL; - -/* Get current value of SEM and store it in *SVAL. */ -extern int sem_getvalue (sem_t *__restrict __sem, int *__restrict __sval) - __THROW; - - -__END_DECLS - -#endif /* semaphore.h */ diff --git a/sysdeps/pthread/timer_create.c b/sysdeps/pthread/timer_create.c deleted file mode 100644 index ddc48450a9..0000000000 --- a/sysdeps/pthread/timer_create.c +++ /dev/null @@ -1,166 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Kaz Kylheku . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include - -#include "posix-timer.h" - - -/* Create new per-process timer using CLOCK. */ -int -timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid) -{ - int retval = -1; - struct timer_node *newtimer = NULL; - struct thread_node *thread = NULL; - - if (0 -#if defined _POSIX_CPUTIME && _POSIX_CPUTIME >= 0 - || clock_id == CLOCK_PROCESS_CPUTIME_ID -#endif -#if defined _POSIX_THREAD_CPUTIME && _POSIX_THREAD_CPUTIME >= 0 - || clock_id == CLOCK_THREAD_CPUTIME_ID -#endif - ) - { - /* We don't allow timers for CPU clocks. At least not in the - moment. */ - __set_errno (ENOTSUP); - return -1; - } - - if (clock_id != CLOCK_REALTIME) - { - __set_errno (EINVAL); - return -1; - } - - pthread_once (&__timer_init_once_control, __timer_init_once); - - if (__timer_init_failed) - { - __set_errno (ENOMEM); - return -1; - } - - pthread_mutex_lock (&__timer_mutex); - - newtimer = __timer_alloc (); - if (__glibc_unlikely (newtimer == NULL)) - { - __set_errno (EAGAIN); - goto unlock_bail; - } - - if (evp != NULL) - newtimer->event = *evp; - else - { - newtimer->event.sigev_notify = SIGEV_SIGNAL; - newtimer->event.sigev_signo = SIGALRM; - newtimer->event.sigev_value.sival_ptr = timer_ptr2id (newtimer); - newtimer->event.sigev_notify_function = 0; - } - - newtimer->event.sigev_notify_attributes = &newtimer->attr; - newtimer->creator_pid = getpid (); - - switch (__builtin_expect (newtimer->event.sigev_notify, SIGEV_SIGNAL)) - { - case SIGEV_NONE: - case SIGEV_SIGNAL: - /* We have a global thread for delivering timed signals. - If it is not running, try to start it up. */ - thread = &__timer_signal_thread_rclk; - if (! thread->exists) - { - if (__builtin_expect (__timer_thread_start (thread), - 1) < 0) - { - __set_errno (EAGAIN); - goto unlock_bail; - } - } - break; - - case SIGEV_THREAD: - /* Copy over thread attributes or set up default ones. */ - if (evp->sigev_notify_attributes) - newtimer->attr = *(pthread_attr_t *) evp->sigev_notify_attributes; - else - pthread_attr_init (&newtimer->attr); - - /* Ensure thread attributes call for deatched thread. */ - pthread_attr_setdetachstate (&newtimer->attr, PTHREAD_CREATE_DETACHED); - - /* Try to find existing thread having the right attributes. */ - thread = __timer_thread_find_matching (&newtimer->attr, clock_id); - - /* If no existing thread has these attributes, try to allocate one. */ - if (thread == NULL) - thread = __timer_thread_alloc (&newtimer->attr, clock_id); - - /* Out of luck; no threads are available. */ - if (__glibc_unlikely (thread == NULL)) - { - __set_errno (EAGAIN); - goto unlock_bail; - } - - /* If the thread is not running already, try to start it. */ - if (! thread->exists - && __builtin_expect (! __timer_thread_start (thread), 0)) - { - __set_errno (EAGAIN); - goto unlock_bail; - } - break; - - default: - __set_errno (EINVAL); - goto unlock_bail; - } - - newtimer->clock = clock_id; - newtimer->abstime = 0; - newtimer->armed = 0; - newtimer->thread = thread; - - *timerid = timer_ptr2id (newtimer); - retval = 0; - - if (__builtin_expect (retval, 0) == -1) - { - unlock_bail: - if (thread != NULL) - __timer_thread_dealloc (thread); - if (newtimer != NULL) - { - timer_delref (newtimer); - __timer_dealloc (newtimer); - } - } - - pthread_mutex_unlock (&__timer_mutex); - - return retval; -} diff --git a/sysdeps/pthread/timer_delete.c b/sysdeps/pthread/timer_delete.c deleted file mode 100644 index cb1169fa21..0000000000 --- a/sysdeps/pthread/timer_delete.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Kaz Kylheku . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include - -#include "posix-timer.h" - - -/* Delete timer TIMERID. */ -int -timer_delete (timer_t timerid) -{ - struct timer_node *timer; - int retval = -1; - - pthread_mutex_lock (&__timer_mutex); - - timer = timer_id2ptr (timerid); - if (! timer_valid (timer)) - /* Invalid timer ID or the timer is not in use. */ - __set_errno (EINVAL); - else - { - if (timer->armed && timer->thread != NULL) - { - struct thread_node *thread = timer->thread; - assert (thread != NULL); - - /* If thread is cancelled while waiting for handler to terminate, - the mutex is unlocked and timer_delete is aborted. */ - pthread_cleanup_push (__timer_mutex_cancel_handler, &__timer_mutex); - - /* If timer is currently being serviced, wait for it to finish. */ - while (thread->current_timer == timer) - pthread_cond_wait (&thread->cond, &__timer_mutex); - - pthread_cleanup_pop (0); - } - - /* Remove timer from whatever queue it may be on and deallocate it. */ - timer->inuse = TIMER_DELETED; - list_unlink_ip (&timer->links); - timer_delref (timer); - retval = 0; - } - - pthread_mutex_unlock (&__timer_mutex); - - return retval; -} diff --git a/sysdeps/pthread/timer_getoverr.c b/sysdeps/pthread/timer_getoverr.c deleted file mode 100644 index 334c2ee0c4..0000000000 --- a/sysdeps/pthread/timer_getoverr.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Kaz Kylheku . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include - -#include "posix-timer.h" - - -/* Get expiration overrun for timer TIMERID. */ -int -timer_getoverrun (timer_t timerid) -{ - struct timer_node *timer; - int retval = -1; - - pthread_mutex_lock (&__timer_mutex); - - if (! timer_valid (timer = timer_id2ptr (timerid))) - __set_errno (EINVAL); - else - retval = timer->overrun_count; - - pthread_mutex_unlock (&__timer_mutex); - - return retval; -} diff --git a/sysdeps/pthread/timer_gettime.c b/sysdeps/pthread/timer_gettime.c deleted file mode 100644 index 3e6b97c94f..0000000000 --- a/sysdeps/pthread/timer_gettime.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Kaz Kylheku . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include - -#include "posix-timer.h" - - -/* Get current value of timer TIMERID and store it in VLAUE. */ -int -timer_gettime (timer_t timerid, struct itimerspec *value) -{ - struct timer_node *timer; - struct timespec now, expiry; - int retval = -1, armed = 0, valid; - clock_t clock = 0; - - pthread_mutex_lock (&__timer_mutex); - - timer = timer_id2ptr (timerid); - valid = timer_valid (timer); - - if (valid) { - armed = timer->armed; - expiry = timer->expirytime; - clock = timer->clock; - value->it_interval = timer->value.it_interval; - } - - pthread_mutex_unlock (&__timer_mutex); - - if (valid) - { - if (armed) - { - clock_gettime (clock, &now); - if (timespec_compare (&now, &expiry) < 0) - timespec_sub (&value->it_value, &expiry, &now); - else - { - value->it_value.tv_sec = 0; - value->it_value.tv_nsec = 0; - } - } - else - { - value->it_value.tv_sec = 0; - value->it_value.tv_nsec = 0; - } - - retval = 0; - } - else - __set_errno (EINVAL); - - return retval; -} diff --git a/sysdeps/pthread/timer_routines.c b/sysdeps/pthread/timer_routines.c deleted file mode 100644 index 1c0988a4ba..0000000000 --- a/sysdeps/pthread/timer_routines.c +++ /dev/null @@ -1,571 +0,0 @@ -/* Helper code for POSIX timer implementation on NPTL. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Kaz Kylheku . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "posix-timer.h" -#include - - -/* Number of threads used. */ -#define THREAD_MAXNODES 16 - -/* Array containing the descriptors for the used threads. */ -static struct thread_node thread_array[THREAD_MAXNODES]; - -/* Static array with the structures for all the timers. */ -struct timer_node __timer_array[TIMER_MAX]; - -/* Global lock to protect operation on the lists. */ -pthread_mutex_t __timer_mutex = PTHREAD_MUTEX_INITIALIZER; - -/* Variable to protext initialization. */ -pthread_once_t __timer_init_once_control = PTHREAD_ONCE_INIT; - -/* Nonzero if initialization of timer implementation failed. */ -int __timer_init_failed; - -/* Node for the thread used to deliver signals. */ -struct thread_node __timer_signal_thread_rclk; - -/* Lists to keep free and used timers and threads. */ -static struct list_head timer_free_list; -static struct list_head thread_free_list; -static struct list_head thread_active_list; - - -#ifdef __NR_rt_sigqueueinfo -extern int __syscall_rt_sigqueueinfo (int, int, siginfo_t *); -#endif - - -/* List handling functions. */ -static inline void -list_append (struct list_head *list, struct list_head *newp) -{ - newp->prev = list->prev; - newp->next = list; - list->prev->next = newp; - list->prev = newp; -} - -static inline void -list_insbefore (struct list_head *list, struct list_head *newp) -{ - list_append (list, newp); -} - -/* - * Like list_unlink_ip, except that calling it on a node that - * is already unlinked is disastrous rather than a noop. - */ - -static inline void -list_unlink (struct list_head *list) -{ - struct list_head *lnext = list->next, *lprev = list->prev; - - lnext->prev = lprev; - lprev->next = lnext; -} - -static inline struct list_head * -list_first (struct list_head *list) -{ - return list->next; -} - -static inline struct list_head * -list_null (struct list_head *list) -{ - return list; -} - -static inline struct list_head * -list_next (struct list_head *list) -{ - return list->next; -} - -static inline int -list_isempty (struct list_head *list) -{ - return list->next == list; -} - - -/* Functions build on top of the list functions. */ -static inline struct thread_node * -thread_links2ptr (struct list_head *list) -{ - return (struct thread_node *) ((char *) list - - offsetof (struct thread_node, links)); -} - -static inline struct timer_node * -timer_links2ptr (struct list_head *list) -{ - return (struct timer_node *) ((char *) list - - offsetof (struct timer_node, links)); -} - - -/* Initialize a newly allocated thread structure. */ -static void -thread_init (struct thread_node *thread, const pthread_attr_t *attr, clockid_t clock_id) -{ - if (attr != NULL) - thread->attr = *attr; - else - { - pthread_attr_init (&thread->attr); - pthread_attr_setdetachstate (&thread->attr, PTHREAD_CREATE_DETACHED); - } - - thread->exists = 0; - INIT_LIST_HEAD (&thread->timer_queue); - pthread_cond_init (&thread->cond, 0); - thread->current_timer = 0; - thread->captured = pthread_self (); - thread->clock_id = clock_id; -} - - -/* Initialize the global lists, and acquire global resources. Error - reporting is done by storing a non-zero value to the global variable - timer_init_failed. */ -static void -init_module (void) -{ - int i; - - INIT_LIST_HEAD (&timer_free_list); - INIT_LIST_HEAD (&thread_free_list); - INIT_LIST_HEAD (&thread_active_list); - - for (i = 0; i < TIMER_MAX; ++i) - { - list_append (&timer_free_list, &__timer_array[i].links); - __timer_array[i].inuse = TIMER_FREE; - } - - for (i = 0; i < THREAD_MAXNODES; ++i) - list_append (&thread_free_list, &thread_array[i].links); - - thread_init (&__timer_signal_thread_rclk, 0, CLOCK_REALTIME); -} - - -/* This is a handler executed in a child process after a fork() - occurs. It reinitializes the module, resetting all of the data - structures to their initial state. The mutex is initialized in - case it was locked in the parent process. */ -static void -reinit_after_fork (void) -{ - init_module (); - pthread_mutex_init (&__timer_mutex, 0); -} - - -/* Called once form pthread_once in timer_init. This initializes the - module and ensures that reinit_after_fork will be executed in any - child process. */ -void -__timer_init_once (void) -{ - init_module (); - pthread_atfork (0, 0, reinit_after_fork); -} - - -/* Deinitialize a thread that is about to be deallocated. */ -static void -thread_deinit (struct thread_node *thread) -{ - assert (list_isempty (&thread->timer_queue)); - pthread_cond_destroy (&thread->cond); -} - - -/* Allocate a thread structure from the global free list. Global - mutex lock must be held by caller. The thread is moved to - the active list. */ -struct thread_node * -__timer_thread_alloc (const pthread_attr_t *desired_attr, clockid_t clock_id) -{ - struct list_head *node = list_first (&thread_free_list); - - if (node != list_null (&thread_free_list)) - { - struct thread_node *thread = thread_links2ptr (node); - list_unlink (node); - thread_init (thread, desired_attr, clock_id); - list_append (&thread_active_list, node); - return thread; - } - - return 0; -} - - -/* Return a thread structure to the global free list. Global lock - must be held by caller. */ -void -__timer_thread_dealloc (struct thread_node *thread) -{ - thread_deinit (thread); - list_unlink (&thread->links); - list_append (&thread_free_list, &thread->links); -} - - -/* Each of our threads which terminates executes this cleanup - handler. We never terminate threads ourselves; if a thread gets here - it means that the evil application has killed it. If the thread has - timers, these require servicing and so we must hire a replacement - thread right away. We must also unblock another thread that may - have been waiting for this thread to finish servicing a timer (see - timer_delete()). */ - -static void -thread_cleanup (void *val) -{ - if (val != NULL) - { - struct thread_node *thread = val; - - /* How did the signal thread get killed? */ - assert (thread != &__timer_signal_thread_rclk); - - pthread_mutex_lock (&__timer_mutex); - - thread->exists = 0; - - /* We are no longer processing a timer event. */ - thread->current_timer = 0; - - if (list_isempty (&thread->timer_queue)) - __timer_thread_dealloc (thread); - else - (void) __timer_thread_start (thread); - - pthread_mutex_unlock (&__timer_mutex); - - /* Unblock potentially blocked timer_delete(). */ - pthread_cond_broadcast (&thread->cond); - } -} - - -/* Handle a timer which is supposed to go off now. */ -static void -thread_expire_timer (struct thread_node *self, struct timer_node *timer) -{ - self->current_timer = timer; /* Lets timer_delete know timer is running. */ - - pthread_mutex_unlock (&__timer_mutex); - - switch (__builtin_expect (timer->event.sigev_notify, SIGEV_SIGNAL)) - { - case SIGEV_NONE: - break; - - case SIGEV_SIGNAL: -#ifdef __NR_rt_sigqueueinfo - { - siginfo_t info; - - /* First, clear the siginfo_t structure, so that we don't pass our - stack content to other tasks. */ - memset (&info, 0, sizeof (siginfo_t)); - /* We must pass the information about the data in a siginfo_t - value. */ - info.si_signo = timer->event.sigev_signo; - info.si_code = SI_TIMER; - info.si_pid = timer->creator_pid; - info.si_uid = getuid (); - info.si_value = timer->event.sigev_value; - - INLINE_SYSCALL (rt_sigqueueinfo, 3, info.si_pid, info.si_signo, &info); - } -#else - if (pthread_kill (self->captured, timer->event.sigev_signo) != 0) - { - if (pthread_kill (self->id, timer->event.sigev_signo) != 0) - abort (); - } -#endif - break; - - case SIGEV_THREAD: - timer->event.sigev_notify_function (timer->event.sigev_value); - break; - - default: - assert (! "unknown event"); - break; - } - - pthread_mutex_lock (&__timer_mutex); - - self->current_timer = 0; - - pthread_cond_broadcast (&self->cond); -} - - -/* Thread function; executed by each timer thread. The job of this - function is to wait on the thread's timer queue and expire the - timers in chronological order as close to their scheduled time as - possible. */ -static void -__attribute__ ((noreturn)) -thread_func (void *arg) -{ - struct thread_node *self = arg; - - /* Register cleanup handler, in case rogue application terminates - this thread. (This cannot happen to __timer_signal_thread, which - doesn't invoke application callbacks). */ - - pthread_cleanup_push (thread_cleanup, self); - - pthread_mutex_lock (&__timer_mutex); - - while (1) - { - struct list_head *first; - struct timer_node *timer = NULL; - - /* While the timer queue is not empty, inspect the first node. */ - first = list_first (&self->timer_queue); - if (first != list_null (&self->timer_queue)) - { - struct timespec now; - - timer = timer_links2ptr (first); - - /* This assumes that the elements of the list of one thread - are all for the same clock. */ - clock_gettime (timer->clock, &now); - - while (1) - { - /* If the timer is due or overdue, remove it from the queue. - If it's a periodic timer, re-compute its new time and - requeue it. Either way, perform the timer expiry. */ - if (timespec_compare (&now, &timer->expirytime) < 0) - break; - - list_unlink_ip (first); - - if (__builtin_expect (timer->value.it_interval.tv_sec, 0) != 0 - || timer->value.it_interval.tv_nsec != 0) - { - timer->overrun_count = 0; - timespec_add (&timer->expirytime, &timer->expirytime, - &timer->value.it_interval); - while (timespec_compare (&timer->expirytime, &now) < 0) - { - timespec_add (&timer->expirytime, &timer->expirytime, - &timer->value.it_interval); - if (timer->overrun_count < DELAYTIMER_MAX) - ++timer->overrun_count; - } - __timer_thread_queue_timer (self, timer); - } - - thread_expire_timer (self, timer); - - first = list_first (&self->timer_queue); - if (first == list_null (&self->timer_queue)) - break; - - timer = timer_links2ptr (first); - } - } - - /* If the queue is not empty, wait until the expiry time of the - first node. Otherwise wait indefinitely. Insertions at the - head of the queue must wake up the thread by broadcasting - this condition variable. */ - if (timer != NULL) - pthread_cond_timedwait (&self->cond, &__timer_mutex, - &timer->expirytime); - else - pthread_cond_wait (&self->cond, &__timer_mutex); - } - /* This macro will never be executed since the while loop loops - forever - but we have to add it for proper nesting. */ - pthread_cleanup_pop (1); -} - - -/* Enqueue a timer in wakeup order in the thread's timer queue. - Returns 1 if the timer was inserted at the head of the queue, - causing the queue's next wakeup time to change. */ - -int -__timer_thread_queue_timer (struct thread_node *thread, - struct timer_node *insert) -{ - struct list_head *iter; - int athead = 1; - - for (iter = list_first (&thread->timer_queue); - iter != list_null (&thread->timer_queue); - iter = list_next (iter)) - { - struct timer_node *timer = timer_links2ptr (iter); - - if (timespec_compare (&insert->expirytime, &timer->expirytime) < 0) - break; - athead = 0; - } - - list_insbefore (iter, &insert->links); - return athead; -} - - -/* Start a thread and associate it with the given thread node. Global - lock must be held by caller. */ -int -__timer_thread_start (struct thread_node *thread) -{ - int retval = 1; - - assert (!thread->exists); - thread->exists = 1; - - if (pthread_create (&thread->id, &thread->attr, - (void *(*) (void *)) thread_func, thread) != 0) - { - thread->exists = 0; - retval = -1; - } - - return retval; -} - - -void -__timer_thread_wakeup (struct thread_node *thread) -{ - pthread_cond_broadcast (&thread->cond); -} - - -/* Compare two pthread_attr_t thread attributes for exact equality. - Returns 1 if they are equal, otherwise zero if they are not equal - or contain illegal values. This version is NPTL-specific for - performance reason. One could use the access functions to get the - values of all the fields of the attribute structure. */ -static int -thread_attr_compare (const pthread_attr_t *left, const pthread_attr_t *right) -{ - struct pthread_attr *ileft = (struct pthread_attr *) left; - struct pthread_attr *iright = (struct pthread_attr *) right; - - return (ileft->flags == iright->flags - && ileft->schedpolicy == iright->schedpolicy - && (ileft->schedparam.sched_priority - == iright->schedparam.sched_priority) - && ileft->guardsize == iright->guardsize - && ileft->stackaddr == iright->stackaddr - && ileft->stacksize == iright->stacksize - && ((ileft->cpuset == NULL && iright->cpuset == NULL) - || (ileft->cpuset != NULL && iright->cpuset != NULL - && ileft->cpusetsize == iright->cpusetsize - && memcmp (ileft->cpuset, iright->cpuset, - ileft->cpusetsize) == 0))); -} - - -/* Search the list of active threads and find one which has matching - attributes. Global mutex lock must be held by caller. */ -struct thread_node * -__timer_thread_find_matching (const pthread_attr_t *desired_attr, - clockid_t desired_clock_id) -{ - struct list_head *iter = list_first (&thread_active_list); - - while (iter != list_null (&thread_active_list)) - { - struct thread_node *candidate = thread_links2ptr (iter); - - if (thread_attr_compare (desired_attr, &candidate->attr) - && desired_clock_id == candidate->clock_id) - return candidate; - - iter = list_next (iter); - } - - return NULL; -} - - -/* Grab a free timer structure from the global free list. The global - lock must be held by the caller. */ -struct timer_node * -__timer_alloc (void) -{ - struct list_head *node = list_first (&timer_free_list); - - if (node != list_null (&timer_free_list)) - { - struct timer_node *timer = timer_links2ptr (node); - list_unlink_ip (node); - timer->inuse = TIMER_INUSE; - timer->refcount = 1; - return timer; - } - - return NULL; -} - - -/* Return a timer structure to the global free list. The global lock - must be held by the caller. */ -void -__timer_dealloc (struct timer_node *timer) -{ - assert (timer->refcount == 0); - timer->thread = NULL; /* Break association between timer and thread. */ - timer->inuse = TIMER_FREE; - list_append (&timer_free_list, &timer->links); -} - - -/* Thread cancellation handler which unlocks a mutex. */ -void -__timer_mutex_cancel_handler (void *arg) -{ - pthread_mutex_unlock (arg); -} diff --git a/sysdeps/pthread/timer_settime.c b/sysdeps/pthread/timer_settime.c deleted file mode 100644 index 02e8aa146c..0000000000 --- a/sysdeps/pthread/timer_settime.c +++ /dev/null @@ -1,133 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Kaz Kylheku . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include - -#include "posix-timer.h" - - -/* Set timer TIMERID to VALUE, returning old value in OVLAUE. */ -int -timer_settime (timer_t timerid, int flags, const struct itimerspec *value, - struct itimerspec *ovalue) -{ - struct timer_node *timer; - struct thread_node *thread = NULL; - struct timespec now; - int have_now = 0, need_wakeup = 0; - int retval = -1; - - timer = timer_id2ptr (timerid); - if (timer == NULL) - { - __set_errno (EINVAL); - goto bail; - } - - if (value->it_interval.tv_nsec < 0 - || value->it_interval.tv_nsec >= 1000000000 - || value->it_value.tv_nsec < 0 - || value->it_value.tv_nsec >= 1000000000) - { - __set_errno (EINVAL); - goto bail; - } - - /* Will need to know current time since this is a relative timer; - might as well make the system call outside of the lock now! */ - - if ((flags & TIMER_ABSTIME) == 0) - { - clock_gettime (timer->clock, &now); - have_now = 1; - } - - pthread_mutex_lock (&__timer_mutex); - timer_addref (timer); - - /* One final check of timer validity; this one is possible only - until we have the mutex, because it accesses the inuse flag. */ - - if (! timer_valid(timer)) - { - __set_errno (EINVAL); - goto unlock_bail; - } - - if (ovalue != NULL) - { - ovalue->it_interval = timer->value.it_interval; - - if (timer->armed) - { - if (! have_now) - { - pthread_mutex_unlock (&__timer_mutex); - clock_gettime (timer->clock, &now); - have_now = 1; - pthread_mutex_lock (&__timer_mutex); - timer_addref (timer); - } - - timespec_sub (&ovalue->it_value, &timer->expirytime, &now); - } - else - { - ovalue->it_value.tv_sec = 0; - ovalue->it_value.tv_nsec = 0; - } - } - - timer->value = *value; - - list_unlink_ip (&timer->links); - timer->armed = 0; - - thread = timer->thread; - - /* A value of { 0, 0 } causes the timer to be stopped. */ - if (value->it_value.tv_sec != 0 - || __builtin_expect (value->it_value.tv_nsec != 0, 1)) - { - if ((flags & TIMER_ABSTIME) != 0) - /* The user specified the expiration time. */ - timer->expirytime = value->it_value; - else - timespec_add (&timer->expirytime, &now, &value->it_value); - - /* Only need to wake up the thread if timer is inserted - at the head of the queue. */ - if (thread != NULL) - need_wakeup = __timer_thread_queue_timer (thread, timer); - timer->armed = 1; - } - - retval = 0; - -unlock_bail: - timer_delref (timer); - pthread_mutex_unlock (&__timer_mutex); - -bail: - if (thread != NULL && need_wakeup) - __timer_thread_wakeup (thread); - - return retval; -} diff --git a/sysdeps/pthread/tst-timer.c b/sysdeps/pthread/tst-timer.c deleted file mode 100644 index 6866180555..0000000000 --- a/sysdeps/pthread/tst-timer.c +++ /dev/null @@ -1,160 +0,0 @@ -/* Tests for POSIX timer implementation. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Kaz Kylheku . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include -#include -#include - - -static void -notify_func1 (union sigval sigval) -{ - puts ("notify_func1"); -} - - -static void -notify_func2 (union sigval sigval) -{ - puts ("notify_func2"); -} - - -static void -signal_func (int sig) -{ - static const char text[] = "signal_func\n"; - signal (sig, signal_func); - write (STDOUT_FILENO, text, sizeof text - 1); -} - -static void -intr_sleep (int sec) -{ - struct timespec ts; - - ts.tv_sec = sec; - ts.tv_nsec = 0; - - while (nanosleep (&ts, &ts) == -1 && errno == EINTR) - ; -} - -#define ZSIGALRM 14 - - -int -main (void) -{ - struct timespec ts; - timer_t timer_sig, timer_thr1, timer_thr2; - int retval; - struct sigevent sigev1 = - { - .sigev_notify = SIGEV_SIGNAL, - .sigev_signo = ZSIGALRM - }; - struct sigevent sigev2; - struct itimerspec itimer1 = { { 0, 200000000 }, { 0, 200000000 } }; - struct itimerspec itimer2 = { { 0, 100000000 }, { 0, 500000000 } }; - struct itimerspec itimer3 = { { 0, 150000000 }, { 0, 300000000 } }; - struct itimerspec old; - - retval = clock_gettime (CLOCK_REALTIME, &ts); - - sigev2.sigev_notify = SIGEV_THREAD; - sigev2.sigev_notify_function = notify_func1; - sigev2.sigev_notify_attributes = NULL; - /* It is unnecessary to do the following but to set a good example - we do it anyhow. */ - sigev2.sigev_value.sival_ptr = NULL; - - setvbuf (stdout, 0, _IOLBF, 0); - - printf ("clock_gettime returned %d, timespec = { %jd, %jd }\n", - retval, (intmax_t) ts.tv_sec, (intmax_t) ts.tv_nsec); - - retval = clock_getres (CLOCK_REALTIME, &ts); - - printf ("clock_getres returned %d, timespec = { %jd, %jd }\n", - retval, (intmax_t) ts.tv_sec, (intmax_t) ts.tv_nsec); - - if (timer_create (CLOCK_REALTIME, &sigev1, &timer_sig) != 0) - { - printf ("timer_create for timer_sig failed: %m\n"); - exit (1); - } - if (timer_create (CLOCK_REALTIME, &sigev2, &timer_thr1) != 0) - { - printf ("timer_create for timer_thr1 failed: %m\n"); - exit (1); - } - sigev2.sigev_notify_function = notify_func2; - if (timer_create (CLOCK_REALTIME, &sigev2, &timer_thr2) != 0) - { - printf ("timer_create for timer_thr2 failed: %m\n"); - exit (1); - } - - if (timer_settime (timer_thr1, 0, &itimer2, &old) != 0) - { - printf ("timer_settime for timer_thr1 failed: %m\n"); - exit (1); - } - if (timer_settime (timer_thr2, 0, &itimer3, &old) != 0) - { - printf ("timer_settime for timer_thr2 failed: %m\n"); - exit (1); - } - - signal (ZSIGALRM, signal_func); - - if (timer_settime (timer_sig, 0, &itimer1, &old) != 0) - { - printf ("timer_settime for timer_sig failed: %m\n"); - exit (1); - } - - intr_sleep (3); - - if (timer_delete (timer_sig) != 0) - { - printf ("timer_delete for timer_sig failed: %m\n"); - exit (1); - } - if (timer_delete (timer_thr1) != 0) - { - printf ("timer_delete for timer_thr1 failed: %m\n"); - exit (1); - } - - intr_sleep (3); - - if (timer_delete (timer_thr2) != 0) - { - printf ("timer_delete for timer_thr2 failed: %m\n"); - exit (1); - } - - return 0; -} diff --git a/sysdeps/s390/Implies b/sysdeps/s390/Implies deleted file mode 100644 index 1945b1f4bb..0000000000 --- a/sysdeps/s390/Implies +++ /dev/null @@ -1,3 +0,0 @@ -ieee754/ldbl-128 -ieee754/dbl-64 -ieee754/flt-32 diff --git a/sysdeps/s390/Makefile b/sysdeps/s390/Makefile deleted file mode 100644 index 8a54f88cd7..0000000000 --- a/sysdeps/s390/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -ifeq ($(subdir),iconvdata) -ISO-8859-1_CP037_Z900-routines := iso-8859-1_cp037_z900 -ISO-8859-1_CP037_Z900-map := gconv.map - -UTF8_UTF32_Z9-routines := utf8-utf32-z9 -UTF8_UTF32_Z9-map := gconv.map - -UTF16_UTF32_Z9-routines := utf16-utf32-z9 -UTF16_UTF32_Z9-map := gconv.map - -UTF8_UTF16_Z9-routines := utf8-utf16-z9 -UTF8_UTF16_Z9-map := gconv.map - -s390x-iconv-modules = ISO-8859-1_CP037_Z900 UTF8_UTF16_Z9 UTF16_UTF32_Z9 UTF8_UTF32_Z9 - -extra-modules-left += $(s390x-iconv-modules) -include extra-module.mk - -cpp-srcs-left := $(foreach mod,$(s390x-iconv-modules),$($(mod)-routines)) -lib := iconvdata -include $(patsubst %,$(..)libof-iterator.mk,$(cpp-srcs-left)) - -extra-objs += $(addsuffix .so, $(s390x-iconv-modules)) -install-others += $(patsubst %, $(inst_gconvdir)/%.so, $(s390x-iconv-modules)) - -$(patsubst %, $(inst_gconvdir)/%.so, $(s390x-iconv-modules)) : \ -$(inst_gconvdir)/%.so: $(objpfx)%.so $(+force) - $(do-install-program) - -sysdeps-gconv-modules = ../sysdeps/s390/gconv-modules -endif diff --git a/sysdeps/s390/Versions b/sysdeps/s390/Versions deleted file mode 100644 index 8417623353..0000000000 --- a/sysdeps/s390/Versions +++ /dev/null @@ -1,17 +0,0 @@ -libc { - GLIBC_2.19 { - setjmp; _setjmp; __sigsetjmp; - longjmp; _longjmp; siglongjmp; - } -} - -ld { - GLIBC_2.3 { - # runtime interface to TLS - __tls_get_offset; - } - GLIBC_PRIVATE { - # Exported by ld used by libc. - __tls_get_addr_internal; - } -} diff --git a/sysdeps/s390/abort-instr.h b/sysdeps/s390/abort-instr.h deleted file mode 100644 index 825601ad50..0000000000 --- a/sysdeps/s390/abort-instr.h +++ /dev/null @@ -1,2 +0,0 @@ -/* An op-code of 0 should crash any program. */ -#define ABORT_INSTRUCTION __asm__ (".word 0") diff --git a/sysdeps/s390/asm-syntax.h b/sysdeps/s390/asm-syntax.h deleted file mode 100644 index 00b6338a7b..0000000000 --- a/sysdeps/s390/asm-syntax.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Definitions for S/390 syntax variations. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in the GNU MP Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#undef ALIGN -#define ALIGN(log) .align 1<, 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int16_t atomic16_t; -typedef uint16_t uatomic16_t; -typedef int_fast16_t atomic_fast16_t; -typedef uint_fast16_t uatomic_fast16_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -/* Activate all C11 atomic builtins. - - Note: - E.g. in nptl/pthread_key_delete.c if compiled with GCCs 6 and before, - an extra stack-frame is generated and the old value is stored on stack - before cs instruction but it never loads this value from stack. - An unreleased GCC 7 omit those stack operations. - - E.g. in nptl/pthread_once.c the condition code of cs instruction is - evaluated by a sequence of ipm, sra, compare and jump instructions instead - of one conditional jump instruction. This also occurs with an unreleased - GCC 7. - - The atomic_fetch_abc_def C11 builtins are now using load-and-abc instructions - on z196 zarch and higher cpus instead of a loop with compare-and-swap - instruction. */ -#define USE_ATOMIC_COMPILER_BUILTINS 1 - -#ifdef __s390x__ -# define __HAVE_64B_ATOMICS 1 -#else -# define __HAVE_64B_ATOMICS 0 -#endif - -#define ATOMIC_EXCHANGE_USES_CAS 1 - -/* Implement some of the non-C11 atomic macros from include/atomic.h - with help of the C11 atomic builtins. The other non-C11 atomic macros - are using the macros defined here. */ - -/* Atomically store NEWVAL in *MEM if *MEM is equal to OLDVAL. - Return the old *MEM value. */ -#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ - ({ __atomic_check_size((mem)); \ - typeof ((__typeof (*(mem))) *(mem)) __atg1_oldval = (oldval); \ - __atomic_compare_exchange_n (mem, (void *) &__atg1_oldval, \ - newval, 1, __ATOMIC_ACQUIRE, \ - __ATOMIC_RELAXED); \ - __atg1_oldval; }) -#define atomic_compare_and_exchange_val_rel(mem, newval, oldval) \ - ({ __atomic_check_size((mem)); \ - typeof ((__typeof (*(mem))) *(mem)) __atg1_2_oldval = (oldval); \ - __atomic_compare_exchange_n (mem, (void *) &__atg1_2_oldval, \ - newval, 1, __ATOMIC_RELEASE, \ - __ATOMIC_RELAXED); \ - __atg1_2_oldval; }) - -/* Atomically store NEWVAL in *MEM if *MEM is equal to OLDVAL. - Return zero if *MEM was changed or non-zero if no exchange happened. */ -#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \ - ({ __atomic_check_size((mem)); \ - typeof ((__typeof (*(mem))) *(mem)) __atg2_oldval = (oldval); \ - !__atomic_compare_exchange_n (mem, (void *) &__atg2_oldval, newval, \ - 1, __ATOMIC_ACQUIRE, \ - __ATOMIC_RELAXED); }) -#define catomic_compare_and_exchange_bool_acq(mem, newval, oldval) \ - atomic_compare_and_exchange_bool_acq (mem, newval, oldval) - -/* Store NEWVALUE in *MEM and return the old value. */ -#define atomic_exchange_acq(mem, newvalue) \ - ({ __atomic_check_size((mem)); \ - __atomic_exchange_n (mem, newvalue, __ATOMIC_ACQUIRE); }) -#define atomic_exchange_rel(mem, newvalue) \ - ({ __atomic_check_size((mem)); \ - __atomic_exchange_n (mem, newvalue, __ATOMIC_RELEASE); }) - -/* Add VALUE to *MEM and return the old value of *MEM. */ -/* The gcc builtin uses load-and-add instruction on z196 zarch and higher cpus - instead of a loop with compare-and-swap instruction. */ -# define atomic_exchange_and_add_acq(mem, operand) \ - ({ __atomic_check_size((mem)); \ - __atomic_fetch_add ((mem), (operand), __ATOMIC_ACQUIRE); }) -# define atomic_exchange_and_add_rel(mem, operand) \ - ({ __atomic_check_size((mem)); \ - __atomic_fetch_add ((mem), (operand), __ATOMIC_RELEASE); }) -#define catomic_exchange_and_add(mem, value) \ - atomic_exchange_and_add (mem, value) - -/* Atomically *mem |= mask and return the old value of *mem. */ -/* The gcc builtin uses load-and-or instruction on z196 zarch and higher cpus - instead of a loop with compare-and-swap instruction. */ -#define atomic_or_val(mem, operand) \ - ({ __atomic_check_size((mem)); \ - __atomic_fetch_or ((mem), (operand), __ATOMIC_ACQUIRE); }) -/* Atomically *mem |= mask. */ -#define atomic_or(mem, mask) \ - do { \ - atomic_or_val (mem, mask); \ - } while (0) -#define catomic_or(mem, mask) \ - atomic_or (mem, mask) - -/* Atomically *mem |= 1 << bit and return true if the bit was set in old value - of *mem. */ -/* The load-and-or instruction is used on z196 zarch and higher cpus - instead of a loop with compare-and-swap instruction. */ -#define atomic_bit_test_set(mem, bit) \ - ({ __typeof (*(mem)) __atg14_old; \ - __typeof (mem) __atg14_memp = (mem); \ - __typeof (*(mem)) __atg14_mask = ((__typeof (*(mem))) 1 << (bit)); \ - __atg14_old = atomic_or_val (__atg14_memp, __atg14_mask); \ - __atg14_old & __atg14_mask; }) - -/* Atomically *mem &= mask and return the old value of *mem. */ -/* The gcc builtin uses load-and-and instruction on z196 zarch and higher cpus - instead of a loop with compare-and-swap instruction. */ -#define atomic_and_val(mem, operand) \ - ({ __atomic_check_size((mem)); \ - __atomic_fetch_and ((mem), (operand), __ATOMIC_ACQUIRE); }) -/* Atomically *mem &= mask. */ -#define atomic_and(mem, mask) \ - do { \ - atomic_and_val (mem, mask); \ - } while (0) -#define catomic_and(mem, mask) \ - atomic_and(mem, mask) diff --git a/sysdeps/s390/bits/byteswap-16.h b/sysdeps/s390/bits/byteswap-16.h deleted file mode 100644 index 85ae5f5505..0000000000 --- a/sysdeps/s390/bits/byteswap-16.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Macros to swap the order of bytes in 16-bit integer values. s390 version - Copyright (C) 2012-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_BYTESWAP_H -# error "Never use directly; include instead." -#endif - -#include - -/* Swap bytes in 16 bit value. */ -#if defined __GNUC__ && __GNUC__ >= 2 -# if __WORDSIZE == 64 -# define __bswap_16(x) \ - (__extension__ \ - ({ unsigned short int __v, __x = (unsigned short int) (x); \ - if (__builtin_constant_p (x)) \ - __v = __bswap_constant_16 (__x); \ - else { \ - unsigned short int __tmp = (unsigned short int) (__x); \ - __asm__ __volatile__ ( \ - "lrvh %0,%1" \ - : "=&d" (__v) : "m" (__tmp) ); \ - } \ - __v; })) -# else -# define __bswap_16(x) \ - (__extension__ \ - ({ unsigned short int __v, __x = (unsigned short int) (x); \ - if (__builtin_constant_p (x)) \ - __v = __bswap_constant_16 (__x); \ - else { \ - unsigned short int __tmp = (unsigned short int) (__x); \ - __asm__ __volatile__ ( \ - "sr %0,%0\n" \ - "la 1,%1\n" \ - "icm %0,2,1(1)\n" \ - "ic %0,0(1)" \ - : "=&d" (__v) : "m" (__tmp) : "1"); \ - } \ - __v; })) -# endif -#else -/* This is better than nothing. */ -static __inline unsigned short int -__bswap_16 (unsigned short int __bsx) -{ - return __bswap_constant_16 (__bsx); -} -#endif diff --git a/sysdeps/s390/bits/byteswap.h b/sysdeps/s390/bits/byteswap.h deleted file mode 100644 index 6d5f65e6f8..0000000000 --- a/sysdeps/s390/bits/byteswap.h +++ /dev/null @@ -1,134 +0,0 @@ -/* Macros to swap the order of bytes in integer values. s390 version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#include - -#ifndef _BITS_BYTESWAP_H -#define _BITS_BYTESWAP_H 1 - -#define __bswap_constant_16(x) \ - ((unsigned short int) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))) - -/* Get __bswap_16. */ -#include - -/* Swap bytes in 32 bit value. */ -#define __bswap_constant_32(x) \ - ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ - (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) - -#if defined __GNUC__ && __GNUC__ >= 2 -# if __WORDSIZE == 64 -# define __bswap_32(x) \ - (__extension__ \ - ({ unsigned int __v, __x = (x); \ - if (__builtin_constant_p (x)) \ - __v = __bswap_constant_32 (__x); \ - else { \ - unsigned int __tmp = (unsigned int) (__x); \ - __asm__ __volatile__ ( \ - "lrv %0,%1" \ - : "=&d" (__v) : "m" (__tmp)); \ - } \ - __v; })) -# else -# define __bswap_32(x) \ - (__extension__ \ - ({ unsigned int __v, __x = (x); \ - if (__builtin_constant_p (x)) \ - __v = __bswap_constant_32 (__x); \ - else { \ - unsigned int __tmp = (unsigned int) (__x); \ - __asm__ __volatile__ ( \ - "la 1,%1\n" \ - "icm %0,8,3(1)\n" \ - "icm %0,4,2(1)\n" \ - "icm %0,2,1(1)\n" \ - "ic %0,0(1)" \ - : "=&d" (__v) : "m" (__tmp) : "1"); \ - } \ - __v; })) -# endif -#else -static __inline unsigned int -__bswap_32 (unsigned int __bsx) -{ - return __bswap_constant_32 (__bsx); -} -#endif - -/* Swap bytes in 64 bit value. */ -#if defined __GNUC__ && __GNUC__ >= 2 -# define __bswap_constant_64(x) \ - (__extension__ ((((x) & 0xff00000000000000ul) >> 56) \ - | (((x) & 0x00ff000000000000ul) >> 40) \ - | (((x) & 0x0000ff0000000000ul) >> 24) \ - | (((x) & 0x000000ff00000000ul) >> 8) \ - | (((x) & 0x00000000ff000000ul) << 8) \ - | (((x) & 0x0000000000ff0000ul) << 24) \ - | (((x) & 0x000000000000ff00ul) << 40) \ - | (((x) & 0x00000000000000fful) << 56))) - -# if __WORDSIZE == 64 -# define __bswap_64(x) \ - (__extension__ \ - ({ unsigned long __w, __x = (x); \ - if (__builtin_constant_p (x)) \ - __w = __bswap_constant_64 (__x); \ - else { \ - unsigned long __tmp = (unsigned long) (__x); \ - __asm__ __volatile__ ( \ - "lrvg %0,%1" \ - : "=&d" (__w) : "m" (__tmp)); \ - } \ - __w; })) -# else -# define __bswap_64(x) \ - __extension__ \ - ({ union { unsigned long long int __ll; \ - unsigned long int __l[2]; } __w, __r; \ - __w.__ll = (x); \ - __r.__l[0] = __bswap_32 (__w.__l[1]); \ - __r.__l[1] = __bswap_32 (__w.__l[0]); \ - __r.__ll; }) -# endif -#else -# define __bswap_constant_64(x) \ - ((((x) & 0xff00000000000000ull) >> 56) \ - | (((x) & 0x00ff000000000000ull) >> 40) \ - | (((x) & 0x0000ff0000000000ull) >> 24) \ - | (((x) & 0x000000ff00000000ull) >> 8) \ - | (((x) & 0x00000000ff000000ull) << 8) \ - | (((x) & 0x0000000000ff0000ull) << 24) \ - | (((x) & 0x000000000000ff00ull) << 40) \ - | (((x) & 0x00000000000000ffull) << 56)) - -__extension__ -static __inline unsigned long long int -__bswap_64 (unsigned long long int __bsx) -{ - return __bswap_constant_64 (__bsx); -} -#endif - -#endif /* _BITS_BYTESWAP_H */ diff --git a/sysdeps/s390/bits/endian.h b/sysdeps/s390/bits/endian.h deleted file mode 100644 index ac27f0119a..0000000000 --- a/sysdeps/s390/bits/endian.h +++ /dev/null @@ -1,7 +0,0 @@ -/* s390 is big-endian */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#define __BYTE_ORDER __BIG_ENDIAN diff --git a/sysdeps/s390/bits/flt-eval-method.h b/sysdeps/s390/bits/flt-eval-method.h deleted file mode 100644 index c0fc68af06..0000000000 --- a/sysdeps/s390/bits/flt-eval-method.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Define __GLIBC_FLT_EVAL_METHOD. S/390 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -/* This value is used because of a historical mistake. */ -#define __GLIBC_FLT_EVAL_METHOD 1 diff --git a/sysdeps/s390/bits/link.h b/sysdeps/s390/bits/link.h deleted file mode 100644 index 5960b9642c..0000000000 --- a/sysdeps/s390/bits/link.h +++ /dev/null @@ -1,139 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - -#if defined HAVE_S390_VX_ASM_SUPPORT -typedef char La_s390_vr[16]; -#endif - -#if __ELF_NATIVE_CLASS == 32 - -/* Registers for entry into PLT on s390-32. */ -typedef struct La_s390_32_regs -{ - uint32_t lr_r2; - uint32_t lr_r3; - uint32_t lr_r4; - uint32_t lr_r5; - uint32_t lr_r6; - double lr_fp0; - double lr_fp2; -# if defined HAVE_S390_VX_ASM_SUPPORT - La_s390_vr lr_v24; - La_s390_vr lr_v25; - La_s390_vr lr_v26; - La_s390_vr lr_v27; - La_s390_vr lr_v28; - La_s390_vr lr_v29; - La_s390_vr lr_v30; - La_s390_vr lr_v31; -# endif -} La_s390_32_regs; - -/* Return values for calls from PLT on s390-32. */ -typedef struct La_s390_32_retval -{ - uint32_t lrv_r2; - uint32_t lrv_r3; - double lrv_fp0; -# if defined HAVE_S390_VX_ASM_SUPPORT - La_s390_vr lrv_v24; -# endif -} La_s390_32_retval; - - -__BEGIN_DECLS - -extern Elf32_Addr la_s390_32_gnu_pltenter (Elf32_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_s390_32_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_s390_32_gnu_pltexit (Elf32_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_s390_32_regs *__inregs, - La_s390_32_retval *__outregs, - const char *symname); - -__END_DECLS - -#else - -/* Registers for entry into PLT on s390-64. */ -typedef struct La_s390_64_regs -{ - uint64_t lr_r2; - uint64_t lr_r3; - uint64_t lr_r4; - uint64_t lr_r5; - uint64_t lr_r6; - double lr_fp0; - double lr_fp2; - double lr_fp4; - double lr_fp6; -# if defined HAVE_S390_VX_ASM_SUPPORT - La_s390_vr lr_v24; - La_s390_vr lr_v25; - La_s390_vr lr_v26; - La_s390_vr lr_v27; - La_s390_vr lr_v28; - La_s390_vr lr_v29; - La_s390_vr lr_v30; - La_s390_vr lr_v31; -# endif -} La_s390_64_regs; - -/* Return values for calls from PLT on s390-64. */ -typedef struct La_s390_64_retval -{ - uint64_t lrv_r2; - double lrv_fp0; -# if defined HAVE_S390_VX_ASM_SUPPORT - La_s390_vr lrv_v24; -# endif -} La_s390_64_retval; - - -__BEGIN_DECLS - -extern Elf64_Addr la_s390_64_gnu_pltenter (Elf64_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_s390_64_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_s390_64_gnu_pltexit (Elf64_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_s390_64_regs *__inregs, - La_s390_64_retval *__outregs, - const char *__symname); - -__END_DECLS - -#endif diff --git a/sysdeps/s390/bits/setjmp.h b/sysdeps/s390/bits/setjmp.h deleted file mode 100644 index 9aa3fe204f..0000000000 --- a/sysdeps/s390/bits/setjmp.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define the machine-dependent type `jmp_buf'. IBM s390 version. */ - -#ifndef __S390_SETJMP_H__ -#define __S390_SETJMP_H__ - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include directly; use instead." -#endif - -#include - -#ifndef _ASM - -typedef struct __s390_jmp_buf -{ - /* We save registers 6-15. */ - long int __gregs[10]; - -# if __WORDSIZE == 64 - /* We save fpu registers f8 - f15. */ - long __fpregs[8]; -# else - /* We save fpu registers 4 and 6. */ - long __fpregs[4]; -# endif -} __jmp_buf[1]; - -#endif - -#endif /* __S390_SETJMP_H__ */ diff --git a/sysdeps/s390/bits/string.h b/sysdeps/s390/bits/string.h deleted file mode 100644 index 1e794f925d..0000000000 --- a/sysdeps/s390/bits/string.h +++ /dev/null @@ -1,252 +0,0 @@ -/* Optimized, inlined string functions. S/390 version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _STRING_H -# error "Never use directly; include instead." -#endif - -/* Use the unaligned string inline ABI. */ -#define _STRING_INLINE_unaligned 1 - -/* We only provide optimizations if the user selects them and if - GNU CC is used. */ -#if !defined __NO_STRING_INLINES && defined __USE_STRING_INLINES \ - && defined __GNUC__ && __GNUC__ >= 2 - -#ifndef __STRING_INLINE -# ifndef __extern_inline -# define __STRING_INLINE inline -# else -# define __STRING_INLINE __extern_inline -# endif -#endif - -#define _HAVE_STRING_ARCH_strlen 1 -#ifndef _FORCE_INLINES -#define strlen(str) __strlen_g ((str)) - -__STRING_INLINE size_t __strlen_g (const char *) __asm__ ("strlen"); - -__STRING_INLINE size_t -__strlen_g (const char *__str) -{ - char *__ptr, *__tmp; - - __ptr = (char *) 0; - __tmp = (char *) __str; - __asm__ __volatile__ (" la 0,0\n" - "0: srst %0,%1\n" - " jo 0b\n" - : "+&a" (__ptr), "+&a" (__tmp) : - : "cc", "memory", "0" ); - return (size_t) (__ptr - __str); -} -#endif - -/* Copy SRC to DEST. */ -#define _HAVE_STRING_ARCH_strcpy 1 -#ifndef _FORCE_INLINES -#define strcpy(dest, src) __strcpy_g ((dest), (src)) - -__STRING_INLINE char *__strcpy_g (char *, const char *) __asm__ ("strcpy"); - -__STRING_INLINE char * -__strcpy_g (char *__dest, const char *__src) -{ - char *tmp = __dest; - - __asm__ __volatile__ (" la 0,0\n" - "0: mvst %0,%1\n" - " jo 0b" - : "+&a" (__dest), "+&a" (__src) : - : "cc", "memory", "0" ); - return tmp; -} -#endif - -#define _HAVE_STRING_ARCH_strncpy 1 -#ifndef _FORCE_INLINES -#define strncpy(dest, src, n) __strncpy_g ((dest), (src), (n)) - -__STRING_INLINE char *__strncpy_g (char *, const char *, size_t) - __asm__ ("strncpy"); - -__STRING_INLINE char * -__strncpy_g (char *__dest, const char *__src, size_t __n) -{ - char *__ret = __dest; - char *__ptr; - size_t __diff; - - if (__n > 0) { - __diff = (size_t) (__dest - __src); - __ptr = (char *) __src; - __asm__ __volatile__ (" j 1f\n" - "0: la %0,1(%0)\n" - "1: icm 0,1,0(%0)\n" - " stc 0,0(%2,%0)\n" - " jz 3f\n" -#if defined(__s390x__) - " brctg %1,0b\n" -#else - " brct %1,0b\n" -#endif - " j 4f\n" - "2: la %0,1(%0)\n" - " stc 0,0(%2,%0)\n" -#if defined(__s390x__) - "3: brctg %1,2b\n" -#else - "3: brct %1,2b\n" -#endif - "4:" - : "+&a" (__ptr), "+&a" (__n) : "a" (__diff) - : "cc", "memory", "0" ); - } - return __ret; -} -#endif - -/* Append SRC onto DEST. */ -#define _HAVE_STRING_ARCH_strcat 1 -#ifndef _FORCE_INLINES -#define strcat(dest, src) __strcat_g ((dest), (src)) - -__STRING_INLINE char *__strcat_g (char *, const char *) __asm__ ("strcat"); - -__STRING_INLINE char * -__strcat_g (char *__dest, const char *__src) -{ - char *__ret = __dest; - char *__ptr, *__tmp; - - /* Move __ptr to the end of __dest. */ - __ptr = (char *) 0; - __tmp = __dest; - __asm__ __volatile__ (" la 0,0\n" - "0: srst %0,%1\n" - " jo 0b\n" - : "+&a" (__ptr), "+&a" (__tmp) : - : "cc", "0" ); - - /* Now do the copy. */ - __asm__ __volatile__ (" la 0,0\n" - "0: mvst %0,%1\n" - " jo 0b" - : "+&a" (__ptr), "+&a" (__src) : - : "cc", "memory", "0" ); - return __ret; -} -#endif - -/* Append no more than N characters from SRC onto DEST. */ -#define _HAVE_STRING_ARCH_strncat 1 -#ifndef _FORCE_INLINES -#define strncat(dest, src, n) __strncat_g ((dest), (src), (n)) - -__STRING_INLINE char *__strncat_g (char *, const char *, size_t) - __asm__ ("strncat"); - -__STRING_INLINE char * -__strncat_g (char *__dest, const char *__src, size_t __n) -{ - char *__ret = __dest; - char *__ptr, *__tmp; - size_t __diff; - - if (__n > 0) { - /* Move __ptr to the end of __dest. */ - __ptr = (char *) 0; - __tmp = __dest; - __asm__ __volatile__ (" la 0,0\n" - "0: srst %0,%1\n" - " jo 0b\n" - : "+&a" (__ptr), "+&a" (__tmp) : - : "cc", "memory", "0" ); - - __diff = (size_t) (__ptr - __src); - __tmp = (char *) __src; - __asm__ __volatile__ (" j 1f\n" - "0: la %0,1(%0)\n" - "1: icm 0,1,0(%0)\n" - " stc 0,0(%2,%0)\n" - " jz 2f\n" -#if defined(__s390x__) - " brctg %1,0b\n" -#else - " brct %1,0b\n" -#endif - " slr 0,0\n" - " stc 0,1(%2,%0)\n" - "2:" - : "+&a" (__tmp), "+&a" (__n) : "a" (__diff) - : "cc", "memory", "0" ); - - } - return __ret; -} -#endif - -/* Search N bytes of S for C. */ -#define _HAVE_STRING_ARCH_memchr 1 -#ifndef _FORCE_INLINES -__STRING_INLINE void * -memchr (const void *__str, int __c, size_t __n) -{ - char *__ptr, *__tmp; - - __tmp = (char *) __str; - __ptr = (char *) __tmp + __n; - __asm__ __volatile__ (" lhi 0,0xff\n" - " nr 0,%2\n" - "0: srst %0,%1\n" - " jo 0b\n" - " brc 13,1f\n" - " la %0,0\n" - "1:" - : "+&a" (__ptr), "+&a" (__tmp) : "d" (__c) - : "cc", "memory", "0" ); - return __ptr; -} -#endif - -/* Compare S1 and S2. */ -#define _HAVE_STRING_ARCH_strcmp 1 -#ifndef _FORCE_INLINES -__STRING_INLINE int -strcmp (const char *__s1, const char *__s2) -{ - char *__p1, *__p2; - int __ret; - - __p1 = (char *) __s1; - __p2 = (char *) __s2; - __asm__ __volatile__ (" slr 0,0\n" - "0: clst %1,%2\n" - " jo 0b\n" - " ipm %0\n" - " srl %0,28" - : "=d" (__ret), "+&a" (__p1), "+&a" (__p2) : - : "cc", "memory", "0" ); - __ret = (__ret == 0) ? 0 : (__ret == 1) ? -1 : 1; - return __ret; -} -#endif - -#endif /* Use string inlines && GNU CC. */ diff --git a/sysdeps/s390/bits/xtitypes.h b/sysdeps/s390/bits/xtitypes.h deleted file mode 100644 index dd3fe43880..0000000000 --- a/sysdeps/s390/bits/xtitypes.h +++ /dev/null @@ -1,33 +0,0 @@ -/* bits/xtitypes.h -- Define some types used by . S390/S390x - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _STROPTS_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_XTITYPES_H -#define _BITS_XTITYPES_H 1 - -#include - -/* This type is used by some structs in . */ -typedef __S32_TYPE __t_scalar_t; -typedef __U32_TYPE __t_uscalar_t; - - -#endif /* bits/xtitypes.h */ diff --git a/sysdeps/s390/configure b/sysdeps/s390/configure deleted file mode 100644 index 347ac28528..0000000000 --- a/sysdeps/s390/configure +++ /dev/null @@ -1,217 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/s390. - -$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h - - -for ac_prog in $AS -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AS+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AS"; then - ac_cv_prog_AS="$AS" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AS="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AS=$ac_cv_prog_AS -if test -n "$AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 -$as_echo "$AS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AS" && break -done - -if test -z "$AS"; then - ac_verc_fail=yes -else - # Found it, now check the version. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of $AS" >&5 -$as_echo_n "checking version of $AS... " >&6; } - ac_prog_version=`$AS --version 2>&1 | sed -n 's/^.*GNU assembler.* \([0-9]*\.[0-9.]*\).*$/\1/p'` - case $ac_prog_version in - '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; - 2.2[4-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*) - ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; - *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; - - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5 -$as_echo "$ac_prog_version" >&6; } -fi -if test $ac_verc_fail = yes; then - critic_missing="$critic_missing The program AS is required in version >= 2.24 for target S390." -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_tbegin" >&5 -$as_echo_n "checking for __builtin_tbegin... " >&6; } -if ${libc_cv_gcc_builtin_tbegin+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.c <<\EOF -#include -void testtransaction () -{ - if (__builtin_tbegin (0) == _HTM_TBEGIN_STARTED) - { - __builtin_tend (); - } -} -EOF -if { ac_try='${CC-cc} -mhtm -O2 -S conftest.c -o - | grep -w tbegin > /dev/null' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } ; -then - libc_cv_gcc_builtin_tbegin=yes -else - libc_cv_gcc_builtin_tbegin=no -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_gcc_builtin_tbegin" >&5 -$as_echo "$libc_cv_gcc_builtin_tbegin" >&6; } - -if test "$enable_lock_elision" = yes && test "$libc_cv_gcc_builtin_tbegin" = no ; then - critic_missing="$critic_missing The used GCC has no support for __builtin_tbegin, which is needed for lock-elision on target S390." -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for S390 vector instruction support" >&5 -$as_echo_n "checking for S390 vector instruction support... " >&6; } -if ${libc_cv_asm_s390_vx+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.c <<\EOF -void testvecinsn () -{ - __asm__ (".machine \"z13\" \n\t" - ".machinemode \"zarch_nohighgprs\" \n\t" - "vistrbs %%v16,%%v17 \n\t" - "locghie %%r1,0" : :); -} -EOF -if { ac_try='${CC-cc} --shared conftest.c -o conftest.o &> /dev/null' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } ; -then - libc_cv_asm_s390_vx=yes -else - libc_cv_asm_s390_vx=no -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_s390_vx" >&5 -$as_echo "$libc_cv_asm_s390_vx" >&6; } - -if test "$libc_cv_asm_s390_vx" = yes ; -then - $as_echo "#define HAVE_S390_VX_ASM_SUPPORT 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Use binutils with vector-support in order to use optimized implementations." >&5 -$as_echo "$as_me: WARNING: Use binutils with vector-support in order to use optimized implementations." >&2;} -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for S390 vector support in gcc" >&5 -$as_echo_n "checking for S390 vector support in gcc... " >&6; } -if ${libc_cv_gcc_s390_vx+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.c <<\EOF -void testvecclobber () -{ - __asm__ ("" : : : "v16"); -} -EOF -if { ac_try='${CC-cc} --shared conftest.c -o conftest.o &> /dev/null' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } ; -then - libc_cv_gcc_s390_vx=yes -else - libc_cv_gcc_s390_vx=no -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_gcc_s390_vx" >&5 -$as_echo "$libc_cv_gcc_s390_vx" >&6; } - -if test "$libc_cv_gcc_s390_vx" = yes ; -then - $as_echo "#define HAVE_S390_VX_GCC_SUPPORT 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for S390 z196 zarch instruction support as default" >&5 -$as_echo_n "checking for S390 z196 zarch instruction support as default... " >&6; } -if ${libc_cv_asm_s390_min_z196_zarch+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.c <<\EOF -float testinsn (double e) -{ - float d; - __asm__ ("ledbra %0,5,%1,4" : "=f" (d) : "f" (e) ); - return d; -} -EOF -if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS --shared conftest.c - -o conftest.o &> /dev/null' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } ; -then - libc_cv_asm_s390_min_z196_zarch=yes -else - libc_cv_asm_s390_min_z196_zarch=no -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_s390_min_z196_zarch" >&5 -$as_echo "$libc_cv_asm_s390_min_z196_zarch" >&6; } - -if test "$libc_cv_asm_s390_min_z196_zarch" = yes ; -then - $as_echo "#define HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT 1" >>confdefs.h - -fi - -test -n "$critic_missing" && as_fn_error $? " -*** $critic_missing" "$LINENO" 5 diff --git a/sysdeps/s390/configure.ac b/sysdeps/s390/configure.ac deleted file mode 100644 index 8a782e7c3a..0000000000 --- a/sysdeps/s390/configure.ac +++ /dev/null @@ -1,116 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/s390. - -dnl It is always possible to access static and hidden symbols in an -dnl position independent way. -AC_DEFINE(PI_STATIC_AND_HIDDEN) - -dnl Accept as 2.24 or newer. -AC_CHECK_PROG_VER(AS, $AS, --version, - [GNU assembler.* \([0-9]*\.[0-9.]*\)], - [2.2[4-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*], critic_missing="$critic_missing The program AS is required in version >= 2.24 for target S390.") - - -AC_CACHE_CHECK(for __builtin_tbegin, libc_cv_gcc_builtin_tbegin, [dnl -cat > conftest.c <<\EOF -#include -void testtransaction () -{ - if (__builtin_tbegin (0) == _HTM_TBEGIN_STARTED) - { - __builtin_tend (); - } -} -EOF -dnl -dnl test, if the tbegin instruction is used by __builtin_tbegin -if AC_TRY_COMMAND([${CC-cc} -mhtm -O2 -S conftest.c -o - | grep -w tbegin > /dev/null]) ; -then - libc_cv_gcc_builtin_tbegin=yes -else - libc_cv_gcc_builtin_tbegin=no -fi -rm -f conftest* ]) - -if test "$enable_lock_elision" = yes && test "$libc_cv_gcc_builtin_tbegin" = no ; then - critic_missing="$critic_missing The used GCC has no support for __builtin_tbegin, which is needed for lock-elision on target S390." -fi - - -AC_CACHE_CHECK(for S390 vector instruction support, libc_cv_asm_s390_vx, [dnl -cat > conftest.c <<\EOF -void testvecinsn () -{ - __asm__ (".machine \"z13\" \n\t" - ".machinemode \"zarch_nohighgprs\" \n\t" - "vistrbs %%v16,%%v17 \n\t" - "locghie %%r1,0" : :); -} -EOF -dnl -dnl test, if assembler supports S390 vector instructions -if AC_TRY_COMMAND([${CC-cc} --shared conftest.c -o conftest.o &> /dev/null]) ; -then - libc_cv_asm_s390_vx=yes -else - libc_cv_asm_s390_vx=no -fi -rm -f conftest* ]) - -if test "$libc_cv_asm_s390_vx" = yes ; -then - AC_DEFINE(HAVE_S390_VX_ASM_SUPPORT) -else - AC_MSG_WARN([Use binutils with vector-support in order to use optimized implementations.]) -fi - -AC_CACHE_CHECK(for S390 vector support in gcc, libc_cv_gcc_s390_vx, [dnl -cat > conftest.c <<\EOF -void testvecclobber () -{ - __asm__ ("" : : : "v16"); -} -EOF -dnl -dnl test, if gcc supports S390 vector registers as clobber in inline assembly -if AC_TRY_COMMAND([${CC-cc} --shared conftest.c -o conftest.o &> /dev/null]) ; -then - libc_cv_gcc_s390_vx=yes -else - libc_cv_gcc_s390_vx=no -fi -rm -f conftest* ]) - -if test "$libc_cv_gcc_s390_vx" = yes ; -then - AC_DEFINE(HAVE_S390_VX_GCC_SUPPORT) -fi - -AC_CACHE_CHECK(for S390 z196 zarch instruction support as default, - libc_cv_asm_s390_min_z196_zarch, [dnl -cat > conftest.c <<\EOF -float testinsn (double e) -{ - float d; - __asm__ ("ledbra %0,5,%1,4" : "=f" (d) : "f" (e) ); - return d; -} -EOF -dnl -dnl test, if assembler supports S390 z196 zarch instructions as default -if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS --shared conftest.c - -o conftest.o &> /dev/null]) ; -then - libc_cv_asm_s390_min_z196_zarch=yes -else - libc_cv_asm_s390_min_z196_zarch=no -fi -rm -f conftest* ]) - -if test "$libc_cv_asm_s390_min_z196_zarch" = yes ; -then - AC_DEFINE(HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT) -fi - -test -n "$critic_missing" && AC_MSG_ERROR([ -*** $critic_missing]) diff --git a/sysdeps/s390/dl-irel.h b/sysdeps/s390/dl-irel.h deleted file mode 100644 index 731e3070f2..0000000000 --- a/sysdeps/s390/dl-irel.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Machine-dependent ELF indirect relocation inline functions. - Version for S/390 32 and 64 bit. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_IREL_H -#define _DL_IREL_H - -#include -#include -#include - -#define ELF_MACHINE_IRELA 1 - -static inline ElfW(Addr) -__attribute ((always_inline)) -elf_ifunc_invoke (ElfW(Addr) addr) -{ - return ((ElfW(Addr) (*) (unsigned long int)) (addr)) (GLRO(dl_hwcap)); -} - -static inline void -__attribute ((always_inline)) -elf_irela (const ElfW(Rela) *reloc) -{ - ElfW(Addr) *const reloc_addr = (void *) reloc->r_offset; - const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info); - - if (__glibc_likely (r_type == R_390_IRELATIVE)) - { - ElfW(Addr) value = elf_ifunc_invoke(reloc->r_addend); - *reloc_addr = value; - } - else - __libc_fatal ("unexpected reloc type in static binary"); -} - -#endif /* dl-irel.h */ diff --git a/sysdeps/s390/dl-procinfo.c b/sysdeps/s390/dl-procinfo.c deleted file mode 100644 index 4fcde8e889..0000000000 --- a/sysdeps/s390/dl-procinfo.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Data for s390 version of processor capability information. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky , 2006. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This information must be kept in sync with the _DL_HWCAP_COUNT and - _DL_PLATFORM_COUNT definitions in procinfo.h. - - If anything should be added here check whether the size of each string - is still ok with the given array size. - - All the #ifdefs in the definitions are quite irritating but - necessary if we want to avoid duplicating the information. There - are three different modes: - - - PROCINFO_DECL is defined. This means we are only interested in - declarations. - - - PROCINFO_DECL is not defined: - - + if SHARED is defined the file is included in an array - initializer. The .element = { ... } syntax is needed. - - + if SHARED is not defined a normal array initialization is - needed. - */ - -#ifndef PROCINFO_CLASS -# define PROCINFO_CLASS -#endif - -#if !defined PROCINFO_DECL && defined SHARED - ._dl_s390_cap_flags -#else -PROCINFO_CLASS const char _dl_s390_cap_flags[12][9] -#endif -#ifndef PROCINFO_DECL -= { - "esan3", "zarch", "stfle", "msa", "ldisp", "eimm", "dfp", "edat", "etf3eh", "highgprs", "te", "vx" - } -#endif -#if !defined SHARED || defined PROCINFO_DECL -; -#else -, -#endif - -#if !defined PROCINFO_DECL && defined SHARED - ._dl_s390_platforms -#else -PROCINFO_CLASS const char _dl_s390_platforms[8][7] -#endif -#ifndef PROCINFO_DECL -= { - "g5", "z900", "z990", "z9-109", "z10", "z196", "zEC12", "z13" - } -#endif -#if !defined SHARED || defined PROCINFO_DECL -; -#else -, -#endif - -#undef PROCINFO_DECL -#undef PROCINFO_CLASS diff --git a/sysdeps/s390/dl-procinfo.h b/sysdeps/s390/dl-procinfo.h deleted file mode 100644 index c99789629a..0000000000 --- a/sysdeps/s390/dl-procinfo.h +++ /dev/null @@ -1,98 +0,0 @@ -/* s390 version of processor capability information handling macros. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky , 2006. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_PROCINFO_H -#define _DL_PROCINFO_H 1 -#include - -#define _DL_HWCAP_COUNT 12 - -#define _DL_PLATFORMS_COUNT 8 - -/* The kernel provides up to 32 capability bits with elf_hwcap. */ -#define _DL_FIRST_PLATFORM 32 -/* Mask to filter out platforms. */ -#define _DL_HWCAP_PLATFORM (((1ULL << _DL_PLATFORMS_COUNT) - 1) \ - << _DL_FIRST_PLATFORM) - -/* Hardware capability bit numbers are derived directly from the - facility indications as stored by the "store facility list" (STFL) - instruction. - highgprs is an alien in that list. It describes a *kernel* - capability. */ - -enum -{ - HWCAP_S390_ESAN3 = 1 << 0, - HWCAP_S390_ZARCH = 1 << 1, - HWCAP_S390_STFLE = 1 << 2, - HWCAP_S390_MSA = 1 << 3, - HWCAP_S390_LDISP = 1 << 4, - HWCAP_S390_EIMM = 1 << 5, - HWCAP_S390_DFP = 1 << 6, - HWCAP_S390_HPAGE = 1 << 7, - HWCAP_S390_ETF3EH = 1 << 8, - HWCAP_S390_HIGH_GPRS = 1 << 9, - HWCAP_S390_TE = 1 << 10, - HWCAP_S390_VX = 1 << 11, -}; - -#define HWCAP_IMPORTANT (HWCAP_S390_ZARCH | HWCAP_S390_LDISP \ - | HWCAP_S390_EIMM | HWCAP_S390_DFP) - -/* We cannot provide a general printing function. */ -#define _dl_procinfo(type, word) -1 - -static inline const char * -__attribute__ ((unused)) -_dl_hwcap_string (int idx) -{ - return GLRO(dl_s390_cap_flags)[idx]; -}; - -static inline int -__attribute__ ((unused, always_inline)) -_dl_string_hwcap (const char *str) -{ - int i; - - for (i = 0; i < _DL_HWCAP_COUNT; i++) - { - if (strcmp (str, GLRO(dl_s390_cap_flags)[i]) == 0) - return i; - } - return -1; -}; - -static inline int -__attribute__ ((unused, always_inline)) -_dl_string_platform (const char *str) -{ - int i; - - if (str != NULL) - for (i = 0; i < _DL_PLATFORMS_COUNT; ++i) - { - if (strcmp (str, GLRO(dl_s390_platforms)[i]) == 0) - return _DL_FIRST_PLATFORM + i; - } - return -1; -}; - -#endif /* dl-procinfo.h */ diff --git a/sysdeps/s390/dl-tls.h b/sysdeps/s390/dl-tls.h deleted file mode 100644 index 3298acfbcf..0000000000 --- a/sysdeps/s390/dl-tls.h +++ /dev/null @@ -1,104 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. s390 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - - -#ifdef SHARED - -extern unsigned long __tls_get_offset (unsigned long got_offset); - -# if IS_IN (rtld) - -# include - -/* dl-tls.c declares __tls_get_addr as an exported symbol if it is not defined - as a macro. It seems suitable to do that in the generic code because all - architectures other than s390 export __tls_get_addr. The declaration causes - problems in s390 though, so we define __tls_get_addr here to avoid declaring - __tls_get_addr again. */ -# define __tls_get_addr __tls_get_addr - -extern void *__tls_get_addr (tls_index *ti) attribute_hidden; -/* Make a temporary alias of __tls_get_addr to remove the hidden - attribute. Then export __tls_get_addr as __tls_get_addr_internal - for use from libc. We do not want to export __tls_get_addr, but we - do need to use it from libc when looking up the address of a TLS - variable. We don't use __tls_get_offset because it requires r12 to - be setup and that might not always be true. Either way it's more - optimal to use __tls_get_addr directly (that's what - __tls_get_offset does anyways). */ -strong_alias (__tls_get_addr, __tls_get_addr_internal_tmp); -versioned_symbol (ld, __tls_get_addr_internal_tmp, - __tls_get_addr_internal, GLIBC_PRIVATE); - -/* The special thing about the s390 TLS ABI is that we do not have the - standard __tls_get_addr function but the __tls_get_offset function - which differs in two important aspects: - 1) __tls_get_offset gets a got offset instead of a pointer to the - tls_index structure - 2) __tls_get_offset returns the offset of the requested variable to - the thread descriptor instead of a pointer to the variable. - */ -# ifdef __s390x__ -__asm__("\n\ - .text\n\ - .globl __tls_get_offset\n\ - .type __tls_get_offset, @function\n\ - .align 4\n\ -__tls_get_offset:\n\ - la %r2,0(%r2,%r12)\n\ - jg __tls_get_addr\n\ -"); -# elif defined __s390__ -__asm__("\n\ - .text\n\ - .globl __tls_get_offset\n\ - .type __tls_get_offset, @function\n\ - .align 4\n\ -__tls_get_offset:\n\ - basr %r3,0\n\ -0: la %r2,0(%r2,%r12)\n\ - l %r4,1f-0b(%r3)\n\ - b 0(%r4,%r3)\n\ -1: .long __tls_get_addr - 0b\n\ -"); -# endif -# else /* IS_IN (rtld) */ -extern void *__tls_get_addr_internal (tls_index *ti); -# endif /* !IS_IN (rtld) */ - -# define GET_ADDR_OFFSET \ - (ti->ti_offset - (unsigned long) __builtin_thread_pointer ()) - -/* Use the privately exported __tls_get_addr_internal instead of - __tls_get_offset in order to avoid the __tls_get_offset special - linkage requiring the GOT pointer to be set up in r12. The - compiler will take care of setting up r12 only if itself issued the - __tls_get_offset call. */ -# define __TLS_GET_ADDR(__ti) \ - ({ __tls_get_addr_internal (__ti) \ - + (unsigned long) __builtin_thread_pointer (); }) - -#endif diff --git a/sysdeps/s390/ffs.c b/sysdeps/s390/ffs.c deleted file mode 100644 index c36f60045b..0000000000 --- a/sysdeps/s390/ffs.c +++ /dev/null @@ -1,70 +0,0 @@ -/* ffs -- find first set bit in a word, counted from least significant end. - S/390 version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define ffsl __something_else -#include - -#undef ffs - -/* ffs: find first bit set. This is defined the same way as - the libc and compiler builtin ffs routines, therefore - differs in spirit from the above ffz (man ffs). */ - -int -__ffs (int x) -{ - int r; - - if (x == 0) - return 0; - __asm__(" lr %%r1,%1\n" - " sr %0,%0\n" - " tml %%r1,0xFFFF\n" - " jnz 0f\n" - " ahi %0,16\n" - " srl %%r1,16\n" - "0: tml %%r1,0x00FF\n" - " jnz 1f\n" - " ahi %0,8\n" - " srl %%r1,8\n" - "1: tml %%r1,0x000F\n" - " jnz 2f\n" - " ahi %0,4\n" - " srl %%r1,4\n" - "2: tml %%r1,0x0003\n" - " jnz 3f\n" - " ahi %0,2\n" - " srl %%r1,2\n" - "3: tml %%r1,0x0001\n" - " jnz 4f\n" - " ahi %0,1\n" - "4:" - : "=&d" (r) : "d" (x) : "cc", "1" ); - return r+1; -} - -weak_alias (__ffs, ffs) -libc_hidden_def (__ffs) -libc_hidden_builtin_def (ffs) -#if ULONG_MAX == UINT_MAX -#undef ffsl -weak_alias (__ffs, ffsl) -#endif diff --git a/sysdeps/s390/fix-fp-int-convert-overflow.h b/sysdeps/s390/fix-fp-int-convert-overflow.h deleted file mode 100644 index cef804e259..0000000000 --- a/sysdeps/s390/fix-fp-int-convert-overflow.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Fix for conversion of floating point to integer overflow. S390 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef FIX_FP_INT_CONVERT_OVERFLOW_H -#define FIX_FP_INT_CONVERT_OVERFLOW_H 1 - -/* GCC emits "convert to fixed" instructions for casting floating point values - to integer values. These instructions raise invalid and inexact exceptions - if the floating point value exceeds the integer type ranges. */ -#define FIX_FLT_LLONG_CONVERT_OVERFLOW 1 -#define FIX_DBL_LLONG_CONVERT_OVERFLOW 1 -#define FIX_LDBL_LLONG_CONVERT_OVERFLOW 1 - -#define FIX_FLT_LONG_CONVERT_OVERFLOW 1 -#define FIX_DBL_LONG_CONVERT_OVERFLOW 1 -#define FIX_LDBL_LONG_CONVERT_OVERFLOW 1 - -#endif /* fix-fp-int-convert-overflow.h */ diff --git a/sysdeps/s390/fpu/bits/fenv.h b/sysdeps/s390/fpu/bits/fenv.h deleted file mode 100644 index 3110ed71d4..0000000000 --- a/sysdeps/s390/fpu/bits/fenv.h +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - -/* Define bits representing the exception. We use the bit positions - of the appropriate bits in the FPU control word. */ -enum - { - FE_INVALID = -#define FE_INVALID 0x80 - FE_INVALID, - FE_DIVBYZERO = -#define FE_DIVBYZERO 0x40 - FE_DIVBYZERO, - FE_OVERFLOW = -#define FE_OVERFLOW 0x20 - FE_OVERFLOW, - FE_UNDERFLOW = -#define FE_UNDERFLOW 0x10 - FE_UNDERFLOW, - FE_INEXACT = -#define FE_INEXACT 0x08 - FE_INEXACT - }; -/* We dont use the y bit of the DXC in the floating point control register - as glibc has no FE encoding for fe inexact incremented - or fe inexact truncated. - We currently use the flag bits in the fpc - as these are sticky for feholdenv & feupdatenv as it is defined - in the HP Manpages. */ - - -#define FE_ALL_EXCEPT \ - (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) - -enum - { - FE_TONEAREST = -#define FE_TONEAREST 0 - FE_TONEAREST, - FE_DOWNWARD = -#define FE_DOWNWARD 0x3 - FE_DOWNWARD, - FE_UPWARD = -#define FE_UPWARD 0x2 - FE_UPWARD, - FE_TOWARDZERO = -#define FE_TOWARDZERO 0x1 - FE_TOWARDZERO - }; - - -/* Type representing exception flags. */ -typedef unsigned int fexcept_t; /* size of fpc */ - - -/* Type representing floating-point environment. This function corresponds - to the layout of the block written by the `fstenv'. */ -typedef struct -{ - fexcept_t __fpc; - void *__unused; - /* The field __unused (formerly __ieee_instruction_pointer) is a relict from - commit "Remove PTRACE_PEEKUSER" (87b9b50f0d4b92248905e95a06a13c513dc45e59) - and isn´t used anymore. */ -} fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1) - -#ifdef __USE_GNU -/* Floating-point environment where none of the exceptions are masked. */ -# define FE_NOMASK_ENV ((const fenv_t *) -2) -#endif - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef unsigned int femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) -1L) -#endif diff --git a/sysdeps/s390/fpu/bits/mathinline.h b/sysdeps/s390/fpu/bits/mathinline.h deleted file mode 100644 index 52e21db98d..0000000000 --- a/sysdeps/s390/fpu/bits/mathinline.h +++ /dev/null @@ -1,100 +0,0 @@ -/* Inline math functions for s390. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#ifndef __extern_inline -# define __MATH_INLINE __inline -#else -# define __MATH_INLINE __extern_inline -#endif - -#if (!defined __NO_MATH_INLINES || defined __LIBC_INTERNAL_MATH_INLINES) \ - && defined __OPTIMIZE__ - -#ifdef __USE_ISOC99 - -/* Test for negative number. Used in the signbit() macro. */ -__MATH_INLINE int -__NTH (__signbitf (float __x)) -{ - __extension__ union { float __f; int __i; } __u = { __f: __x }; - return __u.__i < 0; -} - -__MATH_INLINE int -__NTH (__signbit (double __x)) -{ - __extension__ union { double __d; long __i; } __u = { __d: __x }; - return __u.__i < 0; -} - -# ifndef __NO_LONG_DOUBLE_MATH -__MATH_INLINE int -__NTH (__signbitl (long double __x)) -{ - __extension__ union { long double __l; int __i[4]; } __u = { __l: __x }; - return __u.__i[0] < 0; -} -# else -__MATH_INLINE int -__NTH (__signbitl (long double __x)) -{ - return __signbit ((double) __x); -} -# endif - -#endif /* C99 */ - -/* This code is used internally in the GNU libc. */ -#ifdef __LIBC_INTERNAL_MATH_INLINES - -__MATH_INLINE double -__NTH (__ieee754_sqrt (double x)) -{ - double res; - - __asm__ ( "sqdbr %0,%1" : "=f" (res) : "f" (x) ); - return res; -} - -__MATH_INLINE float -__NTH (__ieee754_sqrtf (float x)) -{ - float res; - - __asm__ ( "sqebr %0,%1" : "=f" (res) : "f" (x) ); - return res; -} - -# if !defined __NO_LONG_DOUBLE_MATH -__MATH_INLINE long double -__NTH (sqrtl (long double __x)) -{ - long double res; - - __asm__ ( "sqxbr %0,%1" : "=f" (res) : "f" (__x) ); - return res; -} -# endif /* !__NO_LONG_DOUBLE_MATH */ - -#endif /* __LIBC_INTERNAL_MATH_INLINES */ - -#endif /* __NO_MATH_INLINES */ diff --git a/sysdeps/s390/fpu/e_sqrt.c b/sysdeps/s390/fpu/e_sqrt.c deleted file mode 100644 index bcb93098c3..0000000000 --- a/sysdeps/s390/fpu/e_sqrt.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -double -__ieee754_sqrt (double x) -{ - double res; - - __asm__ ( "sqdbr %0,%1" : "=f" (res) : "f" (x) ); - return res; -} -strong_alias (__ieee754_sqrt, __sqrt_finite) diff --git a/sysdeps/s390/fpu/e_sqrtf.c b/sysdeps/s390/fpu/e_sqrtf.c deleted file mode 100644 index 42dad4389a..0000000000 --- a/sysdeps/s390/fpu/e_sqrtf.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -float -__ieee754_sqrtf (float x) -{ - float res; - - __asm__ ( "sqebr %0,%1" : "=f" (res) : "f" (x) ); - return res; -} -strong_alias (__ieee754_sqrtf, __sqrtf_finite) diff --git a/sysdeps/s390/fpu/e_sqrtl.c b/sysdeps/s390/fpu/e_sqrtl.c deleted file mode 100644 index 8eab5f0b6a..0000000000 --- a/sysdeps/s390/fpu/e_sqrtl.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Square root. S/390 FPU version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -long double -__ieee754_sqrtl (long double x) -{ - long double res; - - __asm__ ( "sqxbr %0,%1" : "=f" (res) : "f" (x) ); - return res; -} -strong_alias (__ieee754_sqrtl, __sqrtl_finite) diff --git a/sysdeps/s390/fpu/fclrexcpt.c b/sysdeps/s390/fpu/fclrexcpt.c deleted file mode 100644 index 06c66279ff..0000000000 --- a/sysdeps/s390/fpu/fclrexcpt.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -feclearexcept (int excepts) -{ - fexcept_t temp; - - /* Mask out unsupported bits/exceptions. */ - excepts &= FE_ALL_EXCEPT; - - _FPU_GETCW (temp); - /* Clear the relevant bits. */ - temp &= ~(excepts << FPC_FLAGS_SHIFT); - if ((temp & FPC_NOT_FPU_EXCEPTION) == 0) - /* Bits 6, 7 of dxc-byte are zero, - thus bits 0-5 of dxc-byte correspond to the flag-bits. - Clear the relevant bits in flags and dxc-field. */ - temp &= ~(excepts << FPC_DXC_SHIFT); - - /* Put the new data in effect. */ - _FPU_SETCW (temp); - - /* Success. */ - return 0; -} -libm_hidden_def (feclearexcept) diff --git a/sysdeps/s390/fpu/fedisblxcpt.c b/sysdeps/s390/fpu/fedisblxcpt.c deleted file mode 100644 index 2fdb413968..0000000000 --- a/sysdeps/s390/fpu/fedisblxcpt.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fedisableexcept (int excepts) -{ - fexcept_t temp, old_exc, new_flags; - - _FPU_GETCW (temp); - old_exc = (temp & FPC_EXCEPTION_MASK) >> FPC_EXCEPTION_MASK_SHIFT; - new_flags = (temp & (~((excepts & FE_ALL_EXCEPT) << FPC_EXCEPTION_MASK_SHIFT))); - _FPU_SETCW (new_flags); - - return old_exc; -} diff --git a/sysdeps/s390/fpu/feenablxcpt.c b/sysdeps/s390/fpu/feenablxcpt.c deleted file mode 100644 index 4a9e64dc30..0000000000 --- a/sysdeps/s390/fpu/feenablxcpt.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -feenableexcept (int excepts) -{ - fexcept_t temp, old_exc, new_flags; - - _FPU_GETCW (temp); - old_exc = (temp & FPC_EXCEPTION_MASK) >> FPC_EXCEPTION_MASK_SHIFT; - new_flags = (temp | ((excepts & FE_ALL_EXCEPT) << FPC_EXCEPTION_MASK_SHIFT)); - _FPU_SETCW (new_flags); - - return old_exc; -} diff --git a/sysdeps/s390/fpu/fegetenv.c b/sysdeps/s390/fpu/fegetenv.c deleted file mode 100644 index d3455a0df3..0000000000 --- a/sysdeps/s390/fpu/fegetenv.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__fegetenv (fenv_t *envp) -{ - _FPU_GETCW (envp->__fpc); - - /* Success. */ - return 0; -} -libm_hidden_def (__fegetenv) -weak_alias (__fegetenv, fegetenv) -libm_hidden_weak (fegetenv) diff --git a/sysdeps/s390/fpu/fegetexcept.c b/sysdeps/s390/fpu/fegetexcept.c deleted file mode 100644 index 95cd133c5b..0000000000 --- a/sysdeps/s390/fpu/fegetexcept.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Get enabled floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fegetexcept (void) -{ - fexcept_t exc; - - _FPU_GETCW (exc); - return ((exc & FPC_EXCEPTION_MASK) >> FPC_EXCEPTION_MASK_SHIFT); -} diff --git a/sysdeps/s390/fpu/fegetmode.c b/sysdeps/s390/fpu/fegetmode.c deleted file mode 100644 index 9286df3576..0000000000 --- a/sysdeps/s390/fpu/fegetmode.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Store current floating-point control modes. S/390 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fegetmode (femode_t *modep) -{ - _FPU_GETCW (*modep); - return 0; -} diff --git a/sysdeps/s390/fpu/fegetround.c b/sysdeps/s390/fpu/fegetround.c deleted file mode 100644 index 81d2ef6e41..0000000000 --- a/sysdeps/s390/fpu/fegetround.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__fegetround (void) -{ - fexcept_t cw; - - _FPU_GETCW (cw); - - return cw & FPC_RM_MASK; -} -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/s390/fpu/feholdexcpt.c b/sysdeps/s390/fpu/feholdexcpt.c deleted file mode 100644 index 1cd1d445c7..0000000000 --- a/sysdeps/s390/fpu/feholdexcpt.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int __feholdexcept (fenv_t *envp) -{ - fexcept_t fpc; - /* Store the environment. */ - fegetenv (envp); - /* Clear the current sticky bits as more than one exception - may be generated. */ - fpc = envp->__fpc & ~(FPC_FLAGS_MASK | FPC_DXC_MASK); - /* Hold from generating fpu exceptions temporarily. */ - _FPU_SETCW ((fpc & ~(FE_ALL_EXCEPT << FPC_EXCEPTION_MASK_SHIFT))); - return 0; -} -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/s390/fpu/fenv_libc.h b/sysdeps/s390/fpu/fenv_libc.h deleted file mode 100644 index 4d088e4613..0000000000 --- a/sysdeps/s390/fpu/fenv_libc.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FENV_LIBC_H -#define _FENV_LIBC_H 1 - -#include - -/* Definitions from asm/s390-regs-common.h that are needed in glibc. */ - - -#define FPC_EXCEPTION_MASK 0xF8000000 -#define FPC_FLAGS_MASK 0x00F80000 -#define FPC_DXC_MASK 0x0000FF00 -#define FPC_RM_MASK 0x00000003 -#define FPC_VALID_MASK ((FPC_EXCEPTION_MASK|FPC_FLAGS_MASK| \ - FPC_DXC_MASK|FPC_RM_MASK)) - -#define FPC_EXCEPTION_MASK_SHIFT 24 -#define FPC_FLAGS_SHIFT 16 -#define FPC_DXC_SHIFT 8 -#define FPC_NOT_FPU_EXCEPTION 0x300 - -#endif /* _FENV_LIBC_H */ diff --git a/sysdeps/s390/fpu/fesetenv.c b/sysdeps/s390/fpu/fesetenv.c deleted file mode 100644 index 4c9bcf0629..0000000000 --- a/sysdeps/s390/fpu/fesetenv.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -int -__fesetenv (const fenv_t *envp) -{ - fenv_t env; - - if (envp == FE_DFL_ENV) - { - env.__fpc = _FPU_DEFAULT; - } - else if (envp == FE_NOMASK_ENV) - { - env.__fpc = FPC_EXCEPTION_MASK; - } - else - env = (*envp); - - _FPU_SETCW (env.__fpc); - - /* Success. */ - return 0; -} -libm_hidden_def (__fesetenv) -weak_alias (__fesetenv, fesetenv) -libm_hidden_weak (fesetenv) diff --git a/sysdeps/s390/fpu/fesetexcept.c b/sysdeps/s390/fpu/fesetexcept.c deleted file mode 100644 index 0b4d1f33f3..0000000000 --- a/sysdeps/s390/fpu/fesetexcept.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Set given exception flags. S/390 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -fesetexcept (int excepts) -{ - fexcept_t temp; - - _FPU_GETCW (temp); - temp |= (excepts & FE_ALL_EXCEPT) << FPC_FLAGS_SHIFT; - _FPU_SETCW (temp); - - return 0; -} diff --git a/sysdeps/s390/fpu/fesetmode.c b/sysdeps/s390/fpu/fesetmode.c deleted file mode 100644 index 14b7457fa5..0000000000 --- a/sysdeps/s390/fpu/fesetmode.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Install given floating-point control modes. S/390 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define FPC_STATUS (FPC_FLAGS_MASK | FPC_DXC_MASK) - -int -fesetmode (const femode_t *modep) -{ - fpu_control_t fpc; - - _FPU_GETCW (fpc); - fpc &= FPC_STATUS; - if (modep == FE_DFL_MODE) - fpc |= _FPU_DEFAULT; - else - fpc |= *modep & ~FPC_STATUS; - _FPU_SETCW (fpc); - - return 0; -} diff --git a/sysdeps/s390/fpu/fesetround.c b/sysdeps/s390/fpu/fesetround.c deleted file mode 100644 index 5ed14fac06..0000000000 --- a/sysdeps/s390/fpu/fesetround.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__fesetround (int round) -{ - if ((round|FPC_RM_MASK) != FPC_RM_MASK) - { - /* ROUND is not a valid rounding mode. */ - return 1; - } - __asm__ __volatile__ ("srnm 0(%0)" - : - : "a" (round)); - - return 0; -} -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/s390/fpu/fetestexceptflag.c b/sysdeps/s390/fpu/fetestexceptflag.c deleted file mode 100644 index 21fe64de8a..0000000000 --- a/sysdeps/s390/fpu/fetestexceptflag.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Test exception in saved exception state. S/390 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fetestexceptflag (const fexcept_t *flagp, int excepts) -{ - /* As *flagp is obtained by an earlier call of fegetexceptflag the - bits 0-5 of dxc-byte are either zero or correspond to the - flag-bits. Evaluate flags and last dxc-exception-code. */ - return (((*flagp >> FPC_FLAGS_SHIFT) | (*flagp >> FPC_DXC_SHIFT)) - & excepts - & FE_ALL_EXCEPT); -} diff --git a/sysdeps/s390/fpu/feupdateenv.c b/sysdeps/s390/fpu/feupdateenv.c deleted file mode 100644 index de764b029e..0000000000 --- a/sysdeps/s390/fpu/feupdateenv.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include -#include - -int -__feupdateenv (const fenv_t *envp) -{ - fexcept_t temp; - - _FPU_GETCW (temp); - temp = (temp & FPC_FLAGS_MASK) >> FPC_FLAGS_SHIFT; - - /* Raise the exceptions since the last call to feholdenv */ - /* re install saved environment. */ - __fesetenv (envp); - __feraiseexcept ((int) temp); - - /* Success. */ - return 0; -} -libm_hidden_def (__feupdateenv) -weak_alias (__feupdateenv, feupdateenv) -libm_hidden_weak (feupdateenv) diff --git a/sysdeps/s390/fpu/fgetexcptflg.c b/sysdeps/s390/fpu/fgetexcptflg.c deleted file mode 100644 index f49410550e..0000000000 --- a/sysdeps/s390/fpu/fgetexcptflg.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fegetexceptflag (fexcept_t *flagp, int excepts) -{ - fexcept_t temp, newexcepts; - - /* Get the current exceptions. */ - _FPU_GETCW (temp); - newexcepts = excepts << FPC_FLAGS_SHIFT; - if ((temp & FPC_NOT_FPU_EXCEPTION) == 0) - /* Bits 6, 7 of dxc-byte are zero, - thus bits 0-5 of dxc-byte correspond to the flag-bits. - Evaluate flags and last dxc-exception-code. */ - newexcepts |= excepts << FPC_DXC_SHIFT; - - *flagp = temp & newexcepts; - - /* Success. */ - return 0; -} diff --git a/sysdeps/s390/fpu/fix-fp-int-compare-invalid.h b/sysdeps/s390/fpu/fix-fp-int-compare-invalid.h deleted file mode 100644 index bccdf8d56b..0000000000 --- a/sysdeps/s390/fpu/fix-fp-int-compare-invalid.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Fix for missing "invalid" exceptions from floating-point - comparisons. s390 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef FIX_FP_INT_COMPARE_INVALID_H -#define FIX_FP_INT_COMPARE_INVALID_H 1 - -/* GCC uses unordered comparison instructions like cebr (Short BFP COMPARE) - when it should use ordered comparison instructions like kebr - (Short BFP COMPARE AND SIGNAL) in order to raise invalid exceptions if - any operand is quiet (or signaling) NAN. See gcc bugzilla: - . - There exists an equivalent gcc bugzilla for Intel: - . - Once the s390 gcc bug is fixed, the definition of FIX_COMPARE_INVALID - should have a __GNUC_PREREQ conditional added so that e.g. the workaround - to call feraiseexcept (FE_INVALID) in math/s_iseqsig_template.c can be - avoided. */ -#define FIX_COMPARE_INVALID 1 - -#endif /* fix-fp-int-compare-invalid.h */ diff --git a/sysdeps/s390/fpu/fpu_control.h b/sysdeps/s390/fpu/fpu_control.h deleted file mode 100644 index c855b014cb..0000000000 --- a/sysdeps/s390/fpu/fpu_control.h +++ /dev/null @@ -1,43 +0,0 @@ -/* FPU control word definitions. Stub version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com) and - Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FPU_CONTROL_H -#define _FPU_CONTROL_H - -#include - -/* These bits are reserved are not changed. */ -#define _FPU_RESERVED 0x0707FFFC - -/* The fdlibm code requires no interrupts for exceptions. Don't - change the rounding mode, it would break long double I/O! */ -#define _FPU_DEFAULT 0x00000000 /* Default value. */ - -/* Type of the control word. */ -typedef unsigned int fpu_control_t; - -/* Macros for accessing the hardware control word. */ -#define _FPU_GETCW(cw) __asm__ __volatile__ ("efpc %0,0" : "=d" (cw)) -#define _FPU_SETCW(cw) __asm__ __volatile__ ("sfpc %0,0" : : "d" (cw)) - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#endif /* _FPU_CONTROL_H */ diff --git a/sysdeps/s390/fpu/fraiseexcpt.c b/sysdeps/s390/fpu/fraiseexcpt.c deleted file mode 100644 index d0d93dd5a9..0000000000 --- a/sysdeps/s390/fpu/fraiseexcpt.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Raise given exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com) and - Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -static __inline__ void -fexceptdiv (float d, float e) -{ - __asm__ __volatile__ ("debr %0,%1" : : "f" (d), "f" (e) ); -} - -static __inline__ void -fexceptadd (float d, float e) -{ - __asm__ __volatile__ ("aebr %0,%1" : : "f" (d), "f" (e) ); -} - -#ifdef HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT -static __inline__ void -fexceptround (double e) -{ - float d; - /* Load rounded from double to float with M3 = round toward 0, M4 = Suppress - IEEE-inexact exception. - In case of e=0x1p128 and the overflow-mask bit is zero, only the - IEEE-overflow flag is set. If overflow-mask bit is one, DXC field is set to - 0x20 "IEEE overflow, exact". - In case of e=0x1p-150 and the underflow-mask bit is zero, only the - IEEE-underflow flag is set. If underflow-mask bit is one, DXC field is set - to 0x10 "IEEE underflow, exact". - This instruction is available with a zarch machine >= z196. */ - __asm__ __volatile__ ("ledbra %0,5,%1,4" : "=f" (d) : "f" (e) ); -} -#endif - -int -__feraiseexcept (int excepts) -{ - /* Raise exceptions represented by EXPECTS. But we must raise only - one signal at a time. It is important that if the overflow/underflow - exception and the inexact exception are given at the same time, - the overflow/underflow exception follows the inexact exception. */ - - /* First: invalid exception. */ - if (FE_INVALID & excepts) - fexceptdiv (0.0, 0.0); - - /* Next: division by zero. */ - if (FE_DIVBYZERO & excepts) - fexceptdiv (1.0, 0.0); - - /* Next: overflow. */ - if (FE_OVERFLOW & excepts) - { -#ifdef HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT - fexceptround (0x1p128); -#else - /* If overflow-mask bit is zero, both IEEE-overflow and IEEE-inexact flags - are set. If overflow-mask bit is one, DXC field is set to 0x2C "IEEE - overflow, inexact and incremented". */ - fexceptadd (FLT_MAX, 1.0e32); -#endif - } - - /* Next: underflow. */ - if (FE_UNDERFLOW & excepts) - { -#ifdef HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT - fexceptround (0x1p-150); -#else - /* If underflow-mask bit is zero, both IEEE-underflow and IEEE-inexact - flags are set. If underflow-mask bit is one, DXC field is set to 0x1C - "IEEE underflow, inexact and incremented". */ - fexceptdiv (FLT_MIN, 3.0); -#endif - } - - /* Last: inexact. */ - if (FE_INEXACT & excepts) - fexceptdiv (2.0, 3.0); - - /* Success. */ - return 0; -} -libm_hidden_def (__feraiseexcept) -weak_alias (__feraiseexcept, feraiseexcept) -libm_hidden_weak (feraiseexcept) diff --git a/sysdeps/s390/fpu/fsetexcptflg.c b/sysdeps/s390/fpu/fsetexcptflg.c deleted file mode 100644 index 58e462fb5a..0000000000 --- a/sysdeps/s390/fpu/fsetexcptflg.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - fexcept_t temp, newexcepts; - - /* Get the current environment. We have to do this since we cannot - separately set the status word. */ - _FPU_GETCW (temp); - /* Install the new exception bits in the Accrued Exception Byte. */ - excepts = excepts & FE_ALL_EXCEPT; - newexcepts = excepts << FPC_FLAGS_SHIFT; - temp &= ~newexcepts; - if ((temp & FPC_NOT_FPU_EXCEPTION) == 0) - /* Bits 6, 7 of dxc-byte are zero, - thus bits 0-5 of dxc-byte correspond to the flag-bits. - Clear given exceptions in dxc-field. */ - temp &= ~(excepts << FPC_DXC_SHIFT); - - /* Integrate dxc-byte of flagp into flags. The dxc-byte of flagp contains - either an ieee-exception or 0 (see fegetexceptflag). */ - temp |= (*flagp | ((*flagp >> FPC_DXC_SHIFT) << FPC_FLAGS_SHIFT)) - & newexcepts; - - /* Store the new status word (along with the rest of the environment. - Possibly new exceptions are set but they won't get executed. */ - _FPU_SETCW (temp); - - /* Success. */ - return 0; -} diff --git a/sysdeps/s390/fpu/ftestexcept.c b/sysdeps/s390/fpu/ftestexcept.c deleted file mode 100644 index 8c56f78a40..0000000000 --- a/sysdeps/s390/fpu/ftestexcept.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fetestexcept (int excepts) -{ - fexcept_t temp, res; - - /* Get current exceptions. */ - _FPU_GETCW (temp); - res = temp >> FPC_FLAGS_SHIFT; - if ((temp & FPC_NOT_FPU_EXCEPTION) == 0) - /* Bits 6, 7 of dxc-byte are zero, - thus bits 0-5 of dxc-byte correspond to the flag-bits. - Evaluate flags and last dxc-exception-code. */ - res |= temp >> FPC_DXC_SHIFT; - - return res & excepts & FE_ALL_EXCEPT; -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/s390/fpu/get-rounding-mode.h b/sysdeps/s390/fpu/get-rounding-mode.h deleted file mode 100644 index 7fffa0a947..0000000000 --- a/sysdeps/s390/fpu/get-rounding-mode.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Determine floating-point rounding mode within libc. S/390 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _S390_GET_ROUNDING_MODE_H -#define _S390_GET_ROUNDING_MODE_H 1 - -#include -#include -#include - -/* Return the floating-point rounding mode. */ - -static inline int -get_rounding_mode (void) -{ - fpu_control_t fc; - - _FPU_GETCW (fc); - return fc & FPC_RM_MASK; -} - -#endif /* get-rounding-mode.h */ diff --git a/sysdeps/s390/fpu/libm-test-ulps b/sysdeps/s390/fpu/libm-test-ulps deleted file mode 100644 index dad5205ae7..0000000000 --- a/sysdeps/s390/fpu/libm-test-ulps +++ /dev/null @@ -1,2270 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "acosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "acosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "acosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "asin": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "asinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "asinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "asinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "atan": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atan2_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "atan2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "atan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "atanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "atanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "cabs": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacos_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cacos_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "cacos_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cacos_towardzero": -double: 4 -float: 2 -idouble: 4 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Real part of "cacos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cacos_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 7 -ldouble: 7 - -Function: Real part of "cacosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_downward": -double: 4 -float: 2 -idouble: 4 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cacosh_towardzero": -double: 4 -float: 2 -idouble: 4 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "cacosh_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cacosh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "carg": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "carg_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "carg_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "carg_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casin": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "casin_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_towardzero": -double: 4 -float: 2 -idouble: 4 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Real part of "casin_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 7 -ldouble: 7 - -Function: Real part of "casinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casinh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "casinh_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_towardzero": -double: 4 -float: 2 -idouble: 4 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casinh_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "casinh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catan_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catan_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catan_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catanh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catanh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catanh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cbrt": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_upward": -double: 5 -float: 1 -idouble: 5 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccosh_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cexp_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog10": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog10_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog10_downward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog10_towardzero": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_upward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog10_upward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog_towardzero": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "cos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "cos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 2 - -Function: "cosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 2 - -Function: "cosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 3 - -Function: Real part of "cpow": -double: 2 -float: 5 -idouble: 2 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cpow_downward": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cpow_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_towardzero": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cpow_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_upward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cpow_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csin": -ildouble: 1 -ldouble: 1 - -Function: Real part of "csin_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csinh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csinh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csinh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csinh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt_upward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctan_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctan_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_towardzero": -double: 5 -float: 2 -idouble: 5 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erf_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erfc": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "erfc_downward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "erfc_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "erfc_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "exp": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp10": -double: 2 -idouble: 2 -ildouble: 2 -ldouble: 2 - -Function: "exp10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp_downward": -double: 1 -idouble: 1 - -Function: "exp_towardzero": -double: 1 -idouble: 1 - -Function: "exp_upward": -double: 1 -idouble: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "expm1_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "expm1_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "gamma": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "gamma_downward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: "gamma_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "gamma_upward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "hypot": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j0_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "j0_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "j0_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "jn_downward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "jn_towardzero": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "jn_upward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "lgamma": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "lgamma_downward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: "lgamma_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "lgamma_upward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "log": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "log10_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log1p": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log1p_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "log1p_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "log1p_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log2_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "log2_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log2_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "log_downward": -float: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log_towardzero": -float: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "pow": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow10": -double: 2 -idouble: 2 -ildouble: 2 -ldouble: 2 - -Function: "pow10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sin": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sincos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sincos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sincos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sincos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "sinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "sinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "tan": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "tan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "tanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "tanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "tanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "tgamma": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "tgamma_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "y0_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "y0_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "y0_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "y1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_upward": -double: 5 -float: 2 -idouble: 5 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "yn_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -# end of automatic generation diff --git a/sysdeps/s390/fpu/libm-test-ulps-name b/sysdeps/s390/fpu/libm-test-ulps-name deleted file mode 100644 index 4a55100a0e..0000000000 --- a/sysdeps/s390/fpu/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -S/390 diff --git a/sysdeps/s390/fpu/s_fma.c b/sysdeps/s390/fpu/s_fma.c deleted file mode 100644 index fb7210b19a..0000000000 --- a/sysdeps/s390/fpu/s_fma.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Compute x * y + z as ternary operation. S/390 version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -double -__fma (double x, double y, double z) -{ - double r; - __asm__ ("madbr %0,%1,%2" : "=f" (r) : "%f" (x), "fR" (y), "0" (z)); - return r; -} -#ifndef __fma -weak_alias (__fma, fma) -#endif - -#ifdef NO_LONG_DOUBLE -strong_alias (__fma, __fmal) -weak_alias (__fmal, fmal) -#endif diff --git a/sysdeps/s390/fpu/s_fmaf.c b/sysdeps/s390/fpu/s_fmaf.c deleted file mode 100644 index c56cc040e8..0000000000 --- a/sysdeps/s390/fpu/s_fmaf.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Compute x * y + z as ternary operation. S/390 version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -float -__fmaf (float x, float y, float z) -{ - float r; - __asm__ ("maebr %0,%1,%2" : "=f" (r) : "%f" (x), "fR" (y), "0" (z)); - return r; -} -#ifndef __fmaf -weak_alias (__fmaf, fmaf) -#endif diff --git a/sysdeps/s390/gccframe.h b/sysdeps/s390/gccframe.h deleted file mode 100644 index 2a8b92fdeb..0000000000 --- a/sysdeps/s390/gccframe.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Definition of object in frame unwind info. s390 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FIRST_PSEUDO_REGISTER 34 - -#include diff --git a/sysdeps/s390/gconv-modules b/sysdeps/s390/gconv-modules deleted file mode 100644 index 16ab030626..0000000000 --- a/sysdeps/s390/gconv-modules +++ /dev/null @@ -1,50 +0,0 @@ -# GNU libc iconv configuration. -# Copyright (C) 1997-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -# All lines contain the following information: - -# If the lines start with `module' -# fromset: either a name triple or a regular expression triple. -# toset: a name triple or an expression with \N to get regular -# expression matching results. -# filename: filename of the module implementing the transformation. -# If it is not absolute the path is made absolute by prepending -# the directory the configuration file is found in. -# cost: optional cost of the transformation. Default is 1. - -# If the lines start with `alias' -# alias: alias name which is not really recognized. -# name: the real name of the character set - -# S/390 hardware accelerated modules -# from to module cost -module ISO-8859-1// IBM037// ISO-8859-1_CP037_Z900 1 -module IBM037// ISO-8859-1// ISO-8859-1_CP037_Z900 1 -module ISO-10646/UTF8/ UTF-32// UTF8_UTF32_Z9 1 -module UTF-32BE// ISO-10646/UTF8/ UTF8_UTF32_Z9 1 -module ISO-10646/UTF8/ UTF-32BE// UTF8_UTF32_Z9 1 -module UTF-16BE// UTF-32// UTF16_UTF32_Z9 1 -module UTF-32BE// UTF-16// UTF16_UTF32_Z9 1 -module INTERNAL UTF-16// UTF16_UTF32_Z9 1 -module UTF-32BE// UTF-16BE// UTF16_UTF32_Z9 1 -module INTERNAL UTF-16BE// UTF16_UTF32_Z9 1 -module UTF-16BE// UTF-32BE// UTF16_UTF32_Z9 1 -module UTF-16BE// INTERNAL UTF16_UTF32_Z9 1 -module UTF-16BE// ISO-10646/UTF8/ UTF8_UTF16_Z9 1 -module ISO-10646/UTF8/ UTF-16// UTF8_UTF16_Z9 1 -module ISO-10646/UTF8/ UTF-16BE// UTF8_UTF16_Z9 1 diff --git a/sysdeps/s390/gmp-mparam.h b/sysdeps/s390/gmp-mparam.h deleted file mode 100644 index ec0139ade8..0000000000 --- a/sysdeps/s390/gmp-mparam.h +++ /dev/null @@ -1,30 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include - -#define BITS_PER_MP_LIMB __WORDSIZE -#define BYTES_PER_MP_LIMB (__WORDSIZE / 8) -#define BITS_PER_LONGINT __WORDSIZE -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -#define IEEE_DOUBLE_BIG_ENDIAN 0 diff --git a/sysdeps/s390/iso-8859-1_cp037_z900.c b/sysdeps/s390/iso-8859-1_cp037_z900.c deleted file mode 100644 index f4a5b14fd7..0000000000 --- a/sysdeps/s390/iso-8859-1_cp037_z900.c +++ /dev/null @@ -1,262 +0,0 @@ -/* Conversion between ISO 8859-1 and IBM037. - - This module uses the translate instruction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - - Author: Andreas Krebbel - Based on the work by Ulrich Drepper , 1997. - - Thanks to Daniel Appich who covered the relevant performance work - in his diploma thesis. - - This is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -// conversion table from ISO-8859-1 to IBM037 -static const unsigned char table_iso8859_1_to_cp037[256] -__attribute__ ((aligned (8))) = -{ - [0x00] = 0x00, [0x01] = 0x01, [0x02] = 0x02, [0x03] = 0x03, - [0x04] = 0x37, [0x05] = 0x2D, [0x06] = 0x2E, [0x07] = 0x2F, - [0x08] = 0x16, [0x09] = 0x05, [0x0A] = 0x25, [0x0B] = 0x0B, - [0x0C] = 0x0C, [0x0D] = 0x0D, [0x0E] = 0x0E, [0x0F] = 0x0F, - [0x10] = 0x10, [0x11] = 0x11, [0x12] = 0x12, [0x13] = 0x13, - [0x14] = 0x3C, [0x15] = 0x3D, [0x16] = 0x32, [0x17] = 0x26, - [0x18] = 0x18, [0x19] = 0x19, [0x1A] = 0x3F, [0x1B] = 0x27, - [0x1C] = 0x1C, [0x1D] = 0x1D, [0x1E] = 0x1E, [0x1F] = 0x1F, - [0x20] = 0x40, [0x21] = 0x5A, [0x22] = 0x7F, [0x23] = 0x7B, - [0x24] = 0x5B, [0x25] = 0x6C, [0x26] = 0x50, [0x27] = 0x7D, - [0x28] = 0x4D, [0x29] = 0x5D, [0x2A] = 0x5C, [0x2B] = 0x4E, - [0x2C] = 0x6B, [0x2D] = 0x60, [0x2E] = 0x4B, [0x2F] = 0x61, - [0x30] = 0xF0, [0x31] = 0xF1, [0x32] = 0xF2, [0x33] = 0xF3, - [0x34] = 0xF4, [0x35] = 0xF5, [0x36] = 0xF6, [0x37] = 0xF7, - [0x38] = 0xF8, [0x39] = 0xF9, [0x3A] = 0x7A, [0x3B] = 0x5E, - [0x3C] = 0x4C, [0x3D] = 0x7E, [0x3E] = 0x6E, [0x3F] = 0x6F, - [0x40] = 0x7C, [0x41] = 0xC1, [0x42] = 0xC2, [0x43] = 0xC3, - [0x44] = 0xC4, [0x45] = 0xC5, [0x46] = 0xC6, [0x47] = 0xC7, - [0x48] = 0xC8, [0x49] = 0xC9, [0x4A] = 0xD1, [0x4B] = 0xD2, - [0x4C] = 0xD3, [0x4D] = 0xD4, [0x4E] = 0xD5, [0x4F] = 0xD6, - [0x50] = 0xD7, [0x51] = 0xD8, [0x52] = 0xD9, [0x53] = 0xE2, - [0x54] = 0xE3, [0x55] = 0xE4, [0x56] = 0xE5, [0x57] = 0xE6, - [0x58] = 0xE7, [0x59] = 0xE8, [0x5A] = 0xE9, [0x5B] = 0xBA, - [0x5C] = 0xE0, [0x5D] = 0xBB, [0x5E] = 0xB0, [0x5F] = 0x6D, - [0x60] = 0x79, [0x61] = 0x81, [0x62] = 0x82, [0x63] = 0x83, - [0x64] = 0x84, [0x65] = 0x85, [0x66] = 0x86, [0x67] = 0x87, - [0x68] = 0x88, [0x69] = 0x89, [0x6A] = 0x91, [0x6B] = 0x92, - [0x6C] = 0x93, [0x6D] = 0x94, [0x6E] = 0x95, [0x6F] = 0x96, - [0x70] = 0x97, [0x71] = 0x98, [0x72] = 0x99, [0x73] = 0xA2, - [0x74] = 0xA3, [0x75] = 0xA4, [0x76] = 0xA5, [0x77] = 0xA6, - [0x78] = 0xA7, [0x79] = 0xA8, [0x7A] = 0xA9, [0x7B] = 0xC0, - [0x7C] = 0x4F, [0x7D] = 0xD0, [0x7E] = 0xA1, [0x7F] = 0x07, - [0x80] = 0x20, [0x81] = 0x21, [0x82] = 0x22, [0x83] = 0x23, - [0x84] = 0x24, [0x85] = 0x15, [0x86] = 0x06, [0x87] = 0x17, - [0x88] = 0x28, [0x89] = 0x29, [0x8A] = 0x2A, [0x8B] = 0x2B, - [0x8C] = 0x2C, [0x8D] = 0x09, [0x8E] = 0x0A, [0x8F] = 0x1B, - [0x90] = 0x30, [0x91] = 0x31, [0x92] = 0x1A, [0x93] = 0x33, - [0x94] = 0x34, [0x95] = 0x35, [0x96] = 0x36, [0x97] = 0x08, - [0x98] = 0x38, [0x99] = 0x39, [0x9A] = 0x3A, [0x9B] = 0x3B, - [0x9C] = 0x04, [0x9D] = 0x14, [0x9E] = 0x3E, [0x9F] = 0xFF, - [0xA0] = 0x41, [0xA1] = 0xAA, [0xA2] = 0x4A, [0xA3] = 0xB1, - [0xA4] = 0x9F, [0xA5] = 0xB2, [0xA6] = 0x6A, [0xA7] = 0xB5, - [0xA8] = 0xBD, [0xA9] = 0xB4, [0xAA] = 0x9A, [0xAB] = 0x8A, - [0xAC] = 0x5F, [0xAD] = 0xCA, [0xAE] = 0xAF, [0xAF] = 0xBC, - [0xB0] = 0x90, [0xB1] = 0x8F, [0xB2] = 0xEA, [0xB3] = 0xFA, - [0xB4] = 0xBE, [0xB5] = 0xA0, [0xB6] = 0xB6, [0xB7] = 0xB3, - [0xB8] = 0x9D, [0xB9] = 0xDA, [0xBA] = 0x9B, [0xBB] = 0x8B, - [0xBC] = 0xB7, [0xBD] = 0xB8, [0xBE] = 0xB9, [0xBF] = 0xAB, - [0xC0] = 0x64, [0xC1] = 0x65, [0xC2] = 0x62, [0xC3] = 0x66, - [0xC4] = 0x63, [0xC5] = 0x67, [0xC6] = 0x9E, [0xC7] = 0x68, - [0xC8] = 0x74, [0xC9] = 0x71, [0xCA] = 0x72, [0xCB] = 0x73, - [0xCC] = 0x78, [0xCD] = 0x75, [0xCE] = 0x76, [0xCF] = 0x77, - [0xD0] = 0xAC, [0xD1] = 0x69, [0xD2] = 0xED, [0xD3] = 0xEE, - [0xD4] = 0xEB, [0xD5] = 0xEF, [0xD6] = 0xEC, [0xD7] = 0xBF, - [0xD8] = 0x80, [0xD9] = 0xFD, [0xDA] = 0xFE, [0xDB] = 0xFB, - [0xDC] = 0xFC, [0xDD] = 0xAD, [0xDE] = 0xAE, [0xDF] = 0x59, - [0xE0] = 0x44, [0xE1] = 0x45, [0xE2] = 0x42, [0xE3] = 0x46, - [0xE4] = 0x43, [0xE5] = 0x47, [0xE6] = 0x9C, [0xE7] = 0x48, - [0xE8] = 0x54, [0xE9] = 0x51, [0xEA] = 0x52, [0xEB] = 0x53, - [0xEC] = 0x58, [0xED] = 0x55, [0xEE] = 0x56, [0xEF] = 0x57, - [0xF0] = 0x8C, [0xF1] = 0x49, [0xF2] = 0xCD, [0xF3] = 0xCE, - [0xF4] = 0xCB, [0xF5] = 0xCF, [0xF6] = 0xCC, [0xF7] = 0xE1, - [0xF8] = 0x70, [0xF9] = 0xDD, [0xFA] = 0xDE, [0xFB] = 0xDB, - [0xFC] = 0xDC, [0xFD] = 0x8D, [0xFE] = 0x8E, [0xFF] = 0xDF -}; - -// conversion table from IBM037 to ISO-8859-1 -static const unsigned char table_cp037_iso8859_1[256] -__attribute__ ((aligned (8))) = -{ - [0x00] = 0x00, [0x01] = 0x01, [0x02] = 0x02, [0x03] = 0x03, - [0x04] = 0x9C, [0x05] = 0x09, [0x06] = 0x86, [0x07] = 0x7F, - [0x08] = 0x97, [0x09] = 0x8D, [0x0A] = 0x8E, [0x0B] = 0x0B, - [0x0C] = 0x0C, [0x0D] = 0x0D, [0x0E] = 0x0E, [0x0F] = 0x0F, - [0x10] = 0x10, [0x11] = 0x11, [0x12] = 0x12, [0x13] = 0x13, - [0x14] = 0x9D, [0x15] = 0x85, [0x16] = 0x08, [0x17] = 0x87, - [0x18] = 0x18, [0x19] = 0x19, [0x1A] = 0x92, [0x1B] = 0x8F, - [0x1C] = 0x1C, [0x1D] = 0x1D, [0x1E] = 0x1E, [0x1F] = 0x1F, - [0x20] = 0x80, [0x21] = 0x81, [0x22] = 0x82, [0x23] = 0x83, - [0x24] = 0x84, [0x25] = 0x0A, [0x26] = 0x17, [0x27] = 0x1B, - [0x28] = 0x88, [0x29] = 0x89, [0x2A] = 0x8A, [0x2B] = 0x8B, - [0x2C] = 0x8C, [0x2D] = 0x05, [0x2E] = 0x06, [0x2F] = 0x07, - [0x30] = 0x90, [0x31] = 0x91, [0x32] = 0x16, [0x33] = 0x93, - [0x34] = 0x94, [0x35] = 0x95, [0x36] = 0x96, [0x37] = 0x04, - [0x38] = 0x98, [0x39] = 0x99, [0x3A] = 0x9A, [0x3B] = 0x9B, - [0x3C] = 0x14, [0x3D] = 0x15, [0x3E] = 0x9E, [0x3F] = 0x1A, - [0x40] = 0x20, [0x41] = 0xA0, [0x42] = 0xE2, [0x43] = 0xE4, - [0x44] = 0xE0, [0x45] = 0xE1, [0x46] = 0xE3, [0x47] = 0xE5, - [0x48] = 0xE7, [0x49] = 0xF1, [0x4A] = 0xA2, [0x4B] = 0x2E, - [0x4C] = 0x3C, [0x4D] = 0x28, [0x4E] = 0x2B, [0x4F] = 0x7C, - [0x50] = 0x26, [0x51] = 0xE9, [0x52] = 0xEA, [0x53] = 0xEB, - [0x54] = 0xE8, [0x55] = 0xED, [0x56] = 0xEE, [0x57] = 0xEF, - [0x58] = 0xEC, [0x59] = 0xDF, [0x5A] = 0x21, [0x5B] = 0x24, - [0x5C] = 0x2A, [0x5D] = 0x29, [0x5E] = 0x3B, [0x5F] = 0xAC, - [0x60] = 0x2D, [0x61] = 0x2F, [0x62] = 0xC2, [0x63] = 0xC4, - [0x64] = 0xC0, [0x65] = 0xC1, [0x66] = 0xC3, [0x67] = 0xC5, - [0x68] = 0xC7, [0x69] = 0xD1, [0x6A] = 0xA6, [0x6B] = 0x2C, - [0x6C] = 0x25, [0x6D] = 0x5F, [0x6E] = 0x3E, [0x6F] = 0x3F, - [0x70] = 0xF8, [0x71] = 0xC9, [0x72] = 0xCA, [0x73] = 0xCB, - [0x74] = 0xC8, [0x75] = 0xCD, [0x76] = 0xCE, [0x77] = 0xCF, - [0x78] = 0xCC, [0x79] = 0x60, [0x7A] = 0x3A, [0x7B] = 0x23, - [0x7C] = 0x40, [0x7D] = 0x27, [0x7E] = 0x3D, [0x7F] = 0x22, - [0x80] = 0xD8, [0x81] = 0x61, [0x82] = 0x62, [0x83] = 0x63, - [0x84] = 0x64, [0x85] = 0x65, [0x86] = 0x66, [0x87] = 0x67, - [0x88] = 0x68, [0x89] = 0x69, [0x8A] = 0xAB, [0x8B] = 0xBB, - [0x8C] = 0xF0, [0x8D] = 0xFD, [0x8E] = 0xFE, [0x8F] = 0xB1, - [0x90] = 0xB0, [0x91] = 0x6A, [0x92] = 0x6B, [0x93] = 0x6C, - [0x94] = 0x6D, [0x95] = 0x6E, [0x96] = 0x6F, [0x97] = 0x70, - [0x98] = 0x71, [0x99] = 0x72, [0x9A] = 0xAA, [0x9B] = 0xBA, - [0x9C] = 0xE6, [0x9D] = 0xB8, [0x9E] = 0xC6, [0x9F] = 0xA4, - [0xA0] = 0xB5, [0xA1] = 0x7E, [0xA2] = 0x73, [0xA3] = 0x74, - [0xA4] = 0x75, [0xA5] = 0x76, [0xA6] = 0x77, [0xA7] = 0x78, - [0xA8] = 0x79, [0xA9] = 0x7A, [0xAA] = 0xA1, [0xAB] = 0xBF, - [0xAC] = 0xD0, [0xAD] = 0xDD, [0xAE] = 0xDE, [0xAF] = 0xAE, - [0xB0] = 0x5E, [0xB1] = 0xA3, [0xB2] = 0xA5, [0xB3] = 0xB7, - [0xB4] = 0xA9, [0xB5] = 0xA7, [0xB6] = 0xB6, [0xB7] = 0xBC, - [0xB8] = 0xBD, [0xB9] = 0xBE, [0xBA] = 0x5B, [0xBB] = 0x5D, - [0xBC] = 0xAF, [0xBD] = 0xA8, [0xBE] = 0xB4, [0xBF] = 0xD7, - [0xC0] = 0x7B, [0xC1] = 0x41, [0xC2] = 0x42, [0xC3] = 0x43, - [0xC4] = 0x44, [0xC5] = 0x45, [0xC6] = 0x46, [0xC7] = 0x47, - [0xC8] = 0x48, [0xC9] = 0x49, [0xCA] = 0xAD, [0xCB] = 0xF4, - [0xCC] = 0xF6, [0xCD] = 0xF2, [0xCE] = 0xF3, [0xCF] = 0xF5, - [0xD0] = 0x7D, [0xD1] = 0x4A, [0xD2] = 0x4B, [0xD3] = 0x4C, - [0xD4] = 0x4D, [0xD5] = 0x4E, [0xD6] = 0x4F, [0xD7] = 0x50, - [0xD8] = 0x51, [0xD9] = 0x52, [0xDA] = 0xB9, [0xDB] = 0xFB, - [0xDC] = 0xFC, [0xDD] = 0xF9, [0xDE] = 0xFA, [0xDF] = 0xFF, - [0xE0] = 0x5C, [0xE1] = 0xF7, [0xE2] = 0x53, [0xE3] = 0x54, - [0xE4] = 0x55, [0xE5] = 0x56, [0xE6] = 0x57, [0xE7] = 0x58, - [0xE8] = 0x59, [0xE9] = 0x5A, [0xEA] = 0xB2, [0xEB] = 0xD4, - [0xEC] = 0xD6, [0xED] = 0xD2, [0xEE] = 0xD3, [0xEF] = 0xD5, - [0xF0] = 0x30, [0xF1] = 0x31, [0xF2] = 0x32, [0xF3] = 0x33, - [0xF4] = 0x34, [0xF5] = 0x35, [0xF6] = 0x36, [0xF7] = 0x37, - [0xF8] = 0x38, [0xF9] = 0x39, [0xFA] = 0xB3, [0xFB] = 0xDB, - [0xFC] = 0xDC, [0xFD] = 0xD9, [0xFE] = 0xDA, [0xFF] = 0x9F -}; - -/* Definitions used in the body of the `gconv' function. */ -#define CHARSET_NAME "ISO-8859-1//" -#define FROM_LOOP iso8859_1_to_cp037_z900 -#define TO_LOOP cp037_to_iso8859_1_z900 -#define DEFINE_INIT 1 -#define DEFINE_FINI 1 -#define MIN_NEEDED_FROM 1 -#define MIN_NEEDED_TO 1 - -# if defined __s390x__ -# define BRANCH_ON_COUNT(REG,LBL) "brctg %" #REG "," #LBL "\n\t" -# else -# define BRANCH_ON_COUNT(REG,LBL) "brct %" #REG "," #LBL "\n\t" -# endif - -#define TR_LOOP(TABLE) \ - { \ - size_t length = (inend - inptr < outend - outptr \ - ? inend - inptr : outend - outptr); \ - \ - /* Process in 256 byte blocks. */ \ - if (__builtin_expect (length >= 256, 0)) \ - { \ - size_t blocks = length / 256; \ - __asm__ __volatile__("0: mvc 0(256,%[R_OUT]),0(%[R_IN])\n\t" \ - " tr 0(256,%[R_OUT]),0(%[R_TBL])\n\t" \ - " la %[R_IN],256(%[R_IN])\n\t" \ - " la %[R_OUT],256(%[R_OUT])\n\t" \ - BRANCH_ON_COUNT ([R_LI], 0b) \ - : /* outputs */ [R_IN] "+a" (inptr) \ - , [R_OUT] "+a" (outptr), [R_LI] "+d" (blocks) \ - : /* inputs */ [R_TBL] "a" (TABLE) \ - : /* clobber list */ "memory" \ - ); \ - length = length % 256; \ - } \ - \ - /* Process remaining 0...248 bytes in 8byte blocks. */ \ - if (length >= 8) \ - { \ - size_t blocks = length / 8; \ - for (int i = 0; i < blocks; i++) \ - { \ - outptr[0] = TABLE[inptr[0]]; \ - outptr[1] = TABLE[inptr[1]]; \ - outptr[2] = TABLE[inptr[2]]; \ - outptr[3] = TABLE[inptr[3]]; \ - outptr[4] = TABLE[inptr[4]]; \ - outptr[5] = TABLE[inptr[5]]; \ - outptr[6] = TABLE[inptr[6]]; \ - outptr[7] = TABLE[inptr[7]]; \ - inptr += 8; \ - outptr += 8; \ - } \ - length = length % 8; \ - } \ - \ - /* Process remaining 0...7 bytes. */ \ - switch (length) \ - { \ - case 7: outptr[6] = TABLE[inptr[6]]; \ - case 6: outptr[5] = TABLE[inptr[5]]; \ - case 5: outptr[4] = TABLE[inptr[4]]; \ - case 4: outptr[3] = TABLE[inptr[3]]; \ - case 3: outptr[2] = TABLE[inptr[2]]; \ - case 2: outptr[1] = TABLE[inptr[1]]; \ - case 1: outptr[0] = TABLE[inptr[0]]; \ - case 0: break; \ - } \ - inptr += length; \ - outptr += length; \ - } - - -/* First define the conversion function from ISO 8859-1 to CP037. */ -#define MIN_NEEDED_INPUT MIN_NEEDED_FROM -#define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -#define LOOPFCT FROM_LOOP -#define BODY TR_LOOP (table_iso8859_1_to_cp037) - -#include - - -/* Next, define the conversion function from CP037 to ISO 8859-1. */ -#define MIN_NEEDED_INPUT MIN_NEEDED_TO -#define MIN_NEEDED_OUTPUT MIN_NEEDED_FROM -#define LOOPFCT TO_LOOP -#define BODY TR_LOOP (table_cp037_iso8859_1); - -#include - - -/* Now define the toplevel functions. */ -#include diff --git a/sysdeps/s390/jmpbuf-offsets.h b/sysdeps/s390/jmpbuf-offsets.h deleted file mode 100644 index e175801ffa..0000000000 --- a/sysdeps/s390/jmpbuf-offsets.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Private macros for accessing __jmp_buf contents. S/390 version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __JB_GPR6 0 -#define __JB_GPR7 1 -#define __JB_GPR8 2 -#define __JB_GPR9 3 -#define __JB_GPR10 4 -#define __JB_GPR11 5 -#define __JB_GPR12 6 -#define __JB_GPR13 7 -#define __JB_GPR14 8 -#define __JB_GPR15 9 diff --git a/sysdeps/s390/jmpbuf-unwind.h b/sysdeps/s390/jmpbuf-unwind.h deleted file mode 100644 index 4c8e91cea7..0000000000 --- a/sysdeps/s390/jmpbuf-unwind.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((void *) (address) < (void *) demangle ((jmpbuf)->__gregs[__JB_GPR15])) - - -/* On s390{,x}, CFA is always 96 (resp. 160) bytes above actual - %r15. */ -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, \ - (void *) (_Unwind_GetCFA (_context) \ - - 32 - 2 * __WORDSIZE), _adj) - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf regs) -{ - void *sp = (void *) (uintptr_t) regs[0].__gregs[__JB_GPR15]; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return (uintptr_t) sp; -} - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/s390/ldsodefs.h b/sysdeps/s390/ldsodefs.h deleted file mode 100644 index 706f57dc9c..0000000000 --- a/sysdeps/s390/ldsodefs.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _S390_LDSODEFS_H -#define _S390_LDSODEFS_H 1 - -#include - -struct La_s390_32_regs; -struct La_s390_32_retval; -struct La_s390_64_regs; -struct La_s390_64_retval; - -#define ARCH_PLTENTER_MEMBERS \ - Elf32_Addr (*s390_32_gnu_pltenter) (Elf32_Sym *, unsigned int, \ - uintptr_t *, \ - uintptr_t *, \ - struct La_s390_32_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep); \ - Elf64_Addr (*s390_64_gnu_pltenter) (Elf64_Sym *, unsigned int, \ - uintptr_t *, \ - uintptr_t *, \ - struct La_s390_64_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep) - -#define ARCH_PLTEXIT_MEMBERS \ - unsigned int (*s390_32_gnu_pltexit) (Elf32_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - const struct La_s390_32_regs *, \ - struct La_s390_32_retval *, \ - const char *); \ - unsigned int (*s390_64_gnu_pltexit) (Elf64_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - const struct La_s390_64_regs *, \ - struct La_s390_64_retval *, \ - const char *) - -#include_next - -#endif diff --git a/sysdeps/s390/libc-tls.c b/sysdeps/s390/libc-tls.c deleted file mode 100644 index d19632f7fb..0000000000 --- a/sysdeps/s390/libc-tls.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. S390 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* On s390, the literal pool entry that refers to __tls_get_offset - is not removed, even if all branches that use the literal pool - entry gets removed by TLS optimizations. To get binaries - statically linked __tls_get_offset is defined here but - aborts if it is used. */ - -void * -__tls_get_offset (size_t m, size_t offset) -{ - abort (); -} diff --git a/sysdeps/s390/linkmap.h b/sysdeps/s390/linkmap.h deleted file mode 100644 index 283615b99a..0000000000 --- a/sysdeps/s390/linkmap.h +++ /dev/null @@ -1,13 +0,0 @@ -#if __WORDSIZE == 64 -struct link_map_machine - { - Elf64_Addr plt; /* Address of .plt + 0x2e */ - const Elf64_Rela *jmprel; /* Address of first JMP_SLOT reloc */ - }; -#else -struct link_map_machine - { - Elf32_Addr plt; /* Address of .plt + 0x2c */ - const Elf32_Rela *jmprel; /* Address of first JMP_SLOT reloc */ - }; -#endif diff --git a/sysdeps/s390/longjmp.c b/sysdeps/s390/longjmp.c deleted file mode 100644 index d108669ecc..0000000000 --- a/sysdeps/s390/longjmp.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . - - Versioned copy of setjmp/longjmp.c modified for versioning - the reverted jmpbuf extension. */ - -#include - -#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) -/* We don't want the weak alias to longjmp, _longjmp, siglongjmp here, - because we create the default/versioned symbols later. */ -# define __libc_siglongjmp __libc_siglongjmp -#endif /* SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) */ - -#include - -#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) -/* In glibc release 2.19 new versions of longjmp-functions were introduced, - but were reverted before 2.20. Thus both versions are the same function. */ - -strong_alias (__libc_siglongjmp, __libc_longjmp) -libc_hidden_def (__libc_longjmp) - -weak_alias (__libc_siglongjmp, __v1_longjmp) -weak_alias (__libc_siglongjmp, __v2_longjmp) -versioned_symbol (libc, __v1_longjmp, _longjmp, GLIBC_2_0); -compat_symbol (libc, __v2_longjmp, _longjmp, GLIBC_2_19); - -weak_alias (__libc_siglongjmp, __v1longjmp) -weak_alias (__libc_siglongjmp, __v2longjmp) -versioned_symbol (libc, __v1longjmp, longjmp, GLIBC_2_0); -compat_symbol (libc, __v2longjmp, longjmp, GLIBC_2_19); - -weak_alias (__libc_siglongjmp, __v1siglongjmp) -weak_alias (__libc_siglongjmp, __v2siglongjmp) -versioned_symbol (libc, __v1siglongjmp, siglongjmp, GLIBC_2_0); -compat_symbol (libc, __v2siglongjmp, siglongjmp, GLIBC_2_19); -#endif /* SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) */ diff --git a/sysdeps/s390/machine-gmon.h b/sysdeps/s390/machine-gmon.h deleted file mode 100644 index dac340cf7e..0000000000 --- a/sysdeps/s390/machine-gmon.h +++ /dev/null @@ -1,35 +0,0 @@ -/* s390-specific implementation of profiling support. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* We need a special version of the `mcount' function since for S/390 it - must not clobber any register. */ - -/* We must not pollute the global namespace. */ -#define mcount_internal __mcount_internal - -void mcount_internal (u_long frompc, u_long selfpc); - -#define _MCOUNT_DECL(frompc, selfpc) \ -void mcount_internal (u_long frompc, u_long selfpc) - - -/* Define MCOUNT as empty since we have the implementation in another - file. */ -#define MCOUNT diff --git a/sysdeps/s390/mempcpy.S b/sysdeps/s390/mempcpy.S deleted file mode 100644 index acb90bb260..0000000000 --- a/sysdeps/s390/mempcpy.S +++ /dev/null @@ -1,19 +0,0 @@ -/* CPU specific mempcpy without multiarch - 32/64 bit S/390 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* mempcpy is implemented in memcpy.S. */ diff --git a/sysdeps/s390/memusage.h b/sysdeps/s390/memusage.h deleted file mode 100644 index 347272c483..0000000000 --- a/sysdeps/s390/memusage.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define GETSP() ({ register uintptr_t stack_ptr __asm__ ("15"); stack_ptr; }) - -#include diff --git a/sysdeps/s390/multiarch/8bit-generic.c b/sysdeps/s390/multiarch/8bit-generic.c deleted file mode 100644 index 49f0ed8ae5..0000000000 --- a/sysdeps/s390/multiarch/8bit-generic.c +++ /dev/null @@ -1,398 +0,0 @@ -/* Generic conversion to and from 8bit charsets - S390 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT - -# if defined HAVE_S390_VX_GCC_SUPPORT -# define ASM_CLOBBER_VR(NR) , NR -# else -# define ASM_CLOBBER_VR(NR) -# endif - -/* Generate the conversion loop routines without vector instructions as - fallback, if vector instructions aren't available at runtime. */ -# define IGNORE_ICONV_SKELETON -# define from_generic __from_generic_c -# define to_generic __to_generic_c -# include "iconvdata/8bit-generic.c" -# undef IGNORE_ICONV_SKELETON -# undef from_generic -# undef to_generic - -/* Generate the converion routines with vector instructions. The vector - routines can only be used with charsets where the maximum UCS4 value - fits in 1 byte size. Then the hardware translate-instruction is used - to translate between multiple generic characters and "1 byte UCS4" - characters at once. The vector instructions are used to convert between - the "1 byte UCS4" and UCS4. */ -# include - -# undef FROM_LOOP -# undef TO_LOOP -# define FROM_LOOP __from_generic_vx -# define TO_LOOP __to_generic_vx - -# define MIN_NEEDED_FROM 1 -# define MIN_NEEDED_TO 4 -# define ONE_DIRECTION 0 - -/* First define the conversion function from the 8bit charset to UCS4. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_FROM -# define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -# define LOOPFCT FROM_LOOP -# define BODY_FROM_ORIG \ - { \ - uint32_t ch = to_ucs4[*inptr]; \ - \ - if (HAS_HOLES && __builtin_expect (ch == L'\0', 0) && *inptr != '\0') \ - { \ - /* This is an illegal character. */ \ - STANDARD_FROM_LOOP_ERR_HANDLER (1); \ - } \ - \ - put32 (outptr, ch); \ - outptr += 4; \ - ++inptr; \ - } - -# define BODY \ - { \ - if (__builtin_expect (inend - inptr < 16, 1) \ - || outend - outptr < 64) \ - /* Convert remaining bytes with c code. */ \ - BODY_FROM_ORIG \ - else \ - { \ - /* Convert 16 ... 256 bytes at once with tr-instruction. */ \ - size_t index; \ - char buf[256]; \ - size_t loop_count = (inend - inptr) / 16; \ - if (loop_count > (outend - outptr) / 64) \ - loop_count = (outend - outptr) / 64; \ - if (loop_count > 16) \ - loop_count = 16; \ - __asm__ volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - " sllk %[R_I],%[R_LI],4\n\t" \ - " ahi %[R_I],-1\n\t" \ - /* Execute mvc and tr with correct len. */ \ - " exrl %[R_I],21f\n\t" \ - " exrl %[R_I],22f\n\t" \ - /* Post-processing. */ \ - " lghi %[R_I],0\n\t" \ - " vzero %%v0\n\t" \ - "0: \n\t" \ - /* Find invalid character - value is zero. */ \ - " vl %%v16,0(%[R_I],%[R_BUF])\n\t" \ - " vceqbs %%v23,%%v0,%%v16\n\t" \ - " jle 10f\n\t" \ - "1: \n\t" \ - /* Enlarge to UCS4. */ \ - " vuplhb %%v17,%%v16\n\t" \ - " vupllb %%v18,%%v16\n\t" \ - " vuplhh %%v19,%%v17\n\t" \ - " vupllh %%v20,%%v17\n\t" \ - " vuplhh %%v21,%%v18\n\t" \ - " vupllh %%v22,%%v18\n\t" \ - /* Store 64bytes to buf_out. */ \ - " vstm %%v19,%%v22,0(%[R_OUT])\n\t" \ - " aghi %[R_I],16\n\t" \ - " la %[R_OUT],64(%[R_OUT])\n\t" \ - " brct %[R_LI],0b\n\t" \ - " la %[R_IN],0(%[R_I],%[R_IN])\n\t" \ - " j 20f\n\t" \ - "21: mvc 0(1,%[R_BUF]),0(%[R_IN])\n\t" \ - "22: tr 0(1,%[R_BUF]),0(%[R_TBL])\n\t" \ - /* Possibly invalid character found. */ \ - "10: \n\t" \ - /* Test if input was zero, too. */ \ - " vl %%v24,0(%[R_I],%[R_IN])\n\t" \ - " vceqb %%v24,%%v0,%%v24\n\t" \ - /* Zeros in buf (v23) and inptr (v24) are marked \ - with one bits. After xor, invalid characters \ - are marked as one bits. Proceed, if no \ - invalid characters are found. */ \ - " vx %%v24,%%v23,%%v24\n\t" \ - " vfenebs %%v24,%%v24,%%v0\n\t" \ - " jo 1b\n\t" \ - /* Found an invalid translation. \ - Store the preceding chars. */ \ - " la %[R_IN],0(%[R_I],%[R_IN])\n\t" \ - " vlgvb %[R_I],%%v24,7\n\t" \ - " la %[R_IN],0(%[R_I],%[R_IN])\n\t" \ - " sll %[R_I],2\n\t" \ - " ahi %[R_I],-1\n\t" \ - " jl 20f\n\t" \ - " lgr %[R_LI],%[R_I]\n\t" \ - " vuplhb %%v17,%%v16\n\t" \ - " vuplhh %%v19,%%v17\n\t" \ - " vstl %%v19,%[R_I],0(%[R_OUT])\n\t" \ - " ahi %[R_I],-16\n\t" \ - " jl 11f\n\t" \ - " vupllh %%v20,%%v17\n\t" \ - " vstl %%v20,%[R_I],16(%[R_OUT])\n\t" \ - " ahi %[R_I],-16\n\t" \ - " jl 11f\n\t" \ - " vupllb %%v18,%%v16\n\t" \ - " vuplhh %%v21,%%v18\n\t" \ - " vstl %%v21,%[R_I],32(%[R_OUT])\n\t" \ - " ahi %[R_I],-16\n\t" \ - " jl 11f\n\t" \ - " vupllh %%v22,%%v18\n\t" \ - " vstl %%v22,%[R_I],48(%[R_OUT])\n\t" \ - "11: \n\t" \ - " la %[R_OUT],1(%[R_LI],%[R_OUT])\n\t" \ - "20: \n\t" \ - ".machine pop" \ - : /* outputs */ [R_IN] "+a" (inptr) \ - , [R_OUT] "+a" (outptr), [R_I] "=&a" (index) \ - , [R_LI] "+a" (loop_count) \ - : /* inputs */ [R_BUF] "a" (buf) \ - , [R_TBL] "a" (to_ucs1) \ - : /* clobber list*/ "memory", "cc" \ - ASM_CLOBBER_VR ("v0") ASM_CLOBBER_VR ("v16") \ - ASM_CLOBBER_VR ("v17") ASM_CLOBBER_VR ("v18") \ - ASM_CLOBBER_VR ("v19") ASM_CLOBBER_VR ("v20") \ - ASM_CLOBBER_VR ("v21") ASM_CLOBBER_VR ("v22") \ - ASM_CLOBBER_VR ("v23") ASM_CLOBBER_VR ("v24") \ - ); \ - /* Error occured? */ \ - if (loop_count != 0) \ - { \ - /* Found an invalid character! */ \ - STANDARD_FROM_LOOP_ERR_HANDLER (1); \ - } \ - } \ - } - -# define LOOP_NEED_FLAGS -# include - -/* Next, define the other direction - from UCS4 to 8bit charset. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_TO -# define MIN_NEEDED_OUTPUT MIN_NEEDED_FROM -# define LOOPFCT TO_LOOP -# define BODY_TO_ORIG \ - { \ - uint32_t ch = get32 (inptr); \ - \ - if (__builtin_expect (ch >= sizeof (from_ucs4) / sizeof (from_ucs4[0]), 0)\ - || (__builtin_expect (from_ucs4[ch], '\1') == '\0' && ch != 0)) \ - { \ - UNICODE_TAG_HANDLER (ch, 4); \ - \ - /* This is an illegal character. */ \ - STANDARD_TO_LOOP_ERR_HANDLER (4); \ - } \ - \ - *outptr++ = from_ucs4[ch]; \ - inptr += 4; \ - } -# define BODY \ - { \ - if (__builtin_expect (inend - inptr < 64, 1) \ - || outend - outptr < 16) \ - /* Convert remaining bytes with c code. */ \ - BODY_TO_ORIG \ - else \ - { \ - /* Convert 64 ... 1024 bytes at once with tr-instruction. */ \ - size_t index, tmp; \ - char buf[256]; \ - size_t loop_count = (inend - inptr) / 64; \ - uint32_t max = sizeof (from_ucs4) / sizeof (from_ucs4[0]); \ - if (loop_count > (outend - outptr) / 16) \ - loop_count = (outend - outptr) / 16; \ - if (loop_count > 16) \ - loop_count = 16; \ - size_t remaining_loop_count = loop_count; \ - /* Step 1: Check for ch>=max, ch == 0 and shorten to bytes. \ - (ch == 0 is no error, but is handled differently) */ \ - __asm__ volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - /* Setup to check for ch >= max. */ \ - " vzero %%v21\n\t" \ - " vleih %%v21,-24576,0\n\t" /* element 0: > */ \ - " vleih %%v21,-8192,2\n\t" /* element 1: =<> */ \ - " vlvgf %%v20,%[R_MAX],0\n\t" /* element 0: val */ \ - /* Process in 64byte - 16 characters blocks. */ \ - " lghi %[R_I],0\n\t" \ - " lghi %[R_TMP],0\n\t" \ - "0: \n\t" \ - " vlm %%v16,%%v19,0(%[R_IN])\n\t" \ - /* Test for ch >= max and ch == 0. */ \ - " vstrczfs %%v22,%%v16,%%v20,%%v21\n\t" \ - " jno 10f\n\t" \ - " vstrczfs %%v22,%%v17,%%v20,%%v21\n\t" \ - " jno 11f\n\t" \ - " vstrczfs %%v22,%%v18,%%v20,%%v21\n\t" \ - " jno 12f\n\t" \ - " vstrczfs %%v22,%%v19,%%v20,%%v21\n\t" \ - " jno 13f\n\t" \ - /* Shorten to byte values. */ \ - " vpkf %%v16,%%v16,%%v17\n\t" \ - " vpkf %%v18,%%v18,%%v19\n\t" \ - " vpkh %%v16,%%v16,%%v18\n\t" \ - /* Store 16bytes to buf. */ \ - " vst %%v16,0(%[R_I],%[R_BUF])\n\t" \ - /* Loop until all blocks are processed. */ \ - " la %[R_IN],64(%[R_IN])\n\t" \ - " aghi %[R_I],16\n\t" \ - " brct %[R_LI],0b\n\t" \ - " j 20f\n\t" \ - /* Found error ch >= max or ch == 0. */ \ - "13: aghi %[R_TMP],4\n\t" \ - "12: aghi %[R_TMP],4\n\t" \ - "11: aghi %[R_TMP],4\n\t" \ - "10: vlgvb %[R_I],%%v22,7\n\t" \ - " srlg %[R_I],%[R_I],2\n\t" \ - " agr %[R_I],%[R_TMP]\n\t" \ - "20: \n\t" \ - ".machine pop" \ - : /* outputs */ [R_IN] "+a" (inptr) \ - , [R_I] "=&a" (index) \ - , [R_TMP] "=d" (tmp) \ - , [R_LI] "+d" (remaining_loop_count) \ - : /* inputs */ [R_BUF] "a" (buf) \ - , [R_MAX] "d" (max) \ - : /* clobber list*/ "memory", "cc" \ - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v17") \ - ASM_CLOBBER_VR ("v18") ASM_CLOBBER_VR ("v19") \ - ASM_CLOBBER_VR ("v20") ASM_CLOBBER_VR ("v21") \ - ASM_CLOBBER_VR ("v22") \ - ); \ - /* Error occured in step 1? An error (ch >= max || ch == 0) \ - occured, if remaining_loop_count > 0. The error occured \ - at character-index (index) after already processed blocks. */ \ - loop_count -= remaining_loop_count; \ - if (loop_count > 0) \ - { \ - /* Step 2: Translate already processed blocks in buf and \ - check for errors (from_ucs4[ch] == 0). */ \ - __asm__ volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - " sllk %[R_I],%[R_LI],4\n\t" \ - " ahi %[R_I],-1\n\t" \ - /* Execute tr with correct len. */ \ - " exrl %[R_I],21f\n\t" \ - /* Post-processing. */ \ - " lghi %[R_I],0\n\t" \ - "0: \n\t" \ - /* Find invalid character - value == 0. */ \ - " vl %%v16,0(%[R_I],%[R_BUF])\n\t" \ - " vfenezbs %%v17,%%v16,%%v16\n\t" \ - " je 10f\n\t" \ - /* Store 16bytes to buf_out. */ \ - " vst %%v16,0(%[R_I],%[R_OUT])\n\t" \ - " aghi %[R_I],16\n\t" \ - " brct %[R_LI],0b\n\t" \ - " la %[R_OUT],0(%[R_I],%[R_OUT])\n\t" \ - " j 20f\n\t" \ - "21: tr 0(1,%[R_BUF]),0(%[R_TBL])\n\t" \ - /* Found an error: from_ucs4[ch] == 0. */ \ - "10: la %[R_OUT],0(%[R_I],%[R_OUT])\n\t" \ - " vlgvb %[R_I],%%v17,7\n\t" \ - "20: \n\t" \ - ".machine pop" \ - : /* outputs */ [R_OUT] "+a" (outptr) \ - , [R_I] "=&a" (tmp) \ - , [R_LI] "+d" (loop_count) \ - : /* inputs */ [R_BUF] "a" (buf) \ - , [R_TBL] "a" (from_ucs4) \ - : /* clobber list*/ "memory", "cc" \ - ASM_CLOBBER_VR ("v16") \ - ASM_CLOBBER_VR ("v17") \ - ); \ - /* Error occured in processed bytes of step 2? \ - Thus possible error in step 1 is obselete.*/ \ - if (tmp < 16) \ - { \ - index = tmp; \ - inptr -= loop_count * 64; \ - } \ - } \ - /* Error occured in step 1/2? */ \ - if (index < 16) \ - { \ - /* Found an invalid character (see step 2) or zero \ - (see step 1) at index! Convert the chars before index \ - manually. If there is a zero at index detected by step 1, \ - there could be invalid characters before this zero. */ \ - int i; \ - uint32_t ch; \ - for (i = 0; i < index; i++) \ - { \ - ch = get32 (inptr); \ - if (__builtin_expect (from_ucs4[ch], '\1') == '\0') \ - break; \ - *outptr++ = from_ucs4[ch]; \ - inptr += 4; \ - } \ - if (i == index) \ - { \ - ch = get32 (inptr); \ - if (ch == 0) \ - { \ - /* This is no error, but handled differently. */ \ - *outptr++ = from_ucs4[ch]; \ - inptr += 4; \ - continue; \ - } \ - } \ - \ - UNICODE_TAG_HANDLER (ch, 4); \ - \ - /* This is an illegal character. */ \ - STANDARD_TO_LOOP_ERR_HANDLER (4); \ - } \ - } \ - } - -# define LOOP_NEED_FLAGS -# include - - -/* Generate ifunc'ed loop function. */ -s390_libc_ifunc_expr (__from_generic_c, __from_generic, - (sizeof (from_ucs4) / sizeof (from_ucs4[0]) <= 256 - && hwcap & HWCAP_S390_VX) - ? __from_generic_vx - : __from_generic_c); - -s390_libc_ifunc_expr (__to_generic_c, __to_generic, - (sizeof (from_ucs4) / sizeof (from_ucs4[0]) <= 256 - && hwcap & HWCAP_S390_VX) - ? __to_generic_vx - : __to_generic_c); - -strong_alias (__to_generic_c_single, __to_generic_single) - -# undef FROM_LOOP -# undef TO_LOOP -# define FROM_LOOP __from_generic -# define TO_LOOP __to_generic -# include - -#else -/* Generate this module without ifunc if build environment lacks vector - support. Instead the common 8bit-generic.c is used. */ -# include "iconvdata/8bit-generic.c" -#endif /* !defined HAVE_S390_VX_ASM_SUPPORT */ diff --git a/sysdeps/s390/multiarch/Makefile b/sysdeps/s390/multiarch/Makefile deleted file mode 100644 index c893ebc565..0000000000 --- a/sysdeps/s390/multiarch/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -ifeq ($(subdir),string) -sysdep_routines += strlen strlen-vx strlen-c \ - strnlen strnlen-vx strnlen-c \ - strcpy strcpy-vx \ - stpcpy stpcpy-vx stpcpy-c \ - strncpy strncpy-vx \ - stpncpy stpncpy-vx stpncpy-c \ - strcat strcat-vx strcat-c \ - strncat strncat-vx strncat-c \ - strcmp strcmp-vx \ - strncmp strncmp-vx strncmp-c \ - strchr strchr-vx strchr-c \ - strchrnul strchrnul-vx strchrnul-c \ - strrchr strrchr-vx strrchr-c \ - strspn strspn-vx strspn-c \ - strpbrk strpbrk-vx strpbrk-c \ - strcspn strcspn-vx strcspn-c \ - memchr memchr-vx \ - rawmemchr rawmemchr-vx rawmemchr-c \ - memccpy memccpy-vx memccpy-c \ - memrchr memrchr-vx memrchr-c \ - mempcpy -endif - -ifeq ($(subdir),wcsmbs) -sysdep_routines += wcslen wcslen-vx wcslen-c \ - wcsnlen wcsnlen-vx wcsnlen-c \ - wcscpy wcscpy-vx wcscpy-c \ - wcpcpy wcpcpy-vx wcpcpy-c \ - wcsncpy wcsncpy-vx wcsncpy-c \ - wcpncpy wcpncpy-vx wcpncpy-c \ - wcscat wcscat-vx wcscat-c \ - wcsncat wcsncat-vx wcsncat-c \ - wcscmp wcscmp-vx wcscmp-c \ - wcsncmp wcsncmp-vx wcsncmp-c \ - wcschr wcschr-vx wcschr-c \ - wcschrnul wcschrnul-vx wcschrnul-c \ - wcsrchr wcsrchr-vx wcsrchr-c \ - wcsspn wcsspn-vx wcsspn-c \ - wcspbrk wcspbrk-vx wcspbrk-c \ - wcscspn wcscspn-vx wcscspn-c \ - wmemchr wmemchr-vx wmemchr-c \ - wmemset wmemset-vx wmemset-c \ - wmemcmp wmemcmp-vx wmemcmp-c -endif - -ifeq ($(subdir),iconvdata) -override define generate-8bit-table -$(make-target-directory) -LC_ALL=C $(SHELL) ./gen-8bit.sh $< > $(@:stmp=T) -LC_ALL=C $(SHELL) ../sysdeps/s390/multiarch/gen-8bit.sh $< >> $(@:stmp=T) -$(move-if-change) $(@:stmp=T) $(@:stmp=h) -touch $@ -endef -endif - -ifeq ($(subdir),iconv) -sysdep_routines += gconv_simple -endif diff --git a/sysdeps/s390/multiarch/gconv_simple.c b/sysdeps/s390/multiarch/gconv_simple.c deleted file mode 100644 index 75632873e3..0000000000 --- a/sysdeps/s390/multiarch/gconv_simple.c +++ /dev/null @@ -1,1266 +0,0 @@ -/* Simple transformations functions - s390 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT -# include - -# if defined HAVE_S390_VX_GCC_SUPPORT -# define ASM_CLOBBER_VR(NR) , NR -# else -# define ASM_CLOBBER_VR(NR) -# endif - -# define ICONV_C_NAME(NAME) __##NAME##_c -# define ICONV_VX_NAME(NAME) __##NAME##_vx -# define ICONV_VX_IFUNC(FUNC) \ - extern __typeof (ICONV_C_NAME (FUNC)) __##FUNC; \ - s390_vx_libc_ifunc (__##FUNC) \ - int FUNC (struct __gconv_step *step, struct __gconv_step_data *data, \ - const unsigned char **inptrp, const unsigned char *inend, \ - unsigned char **outbufstart, size_t *irreversible, \ - int do_flush, int consume_incomplete) \ - { \ - return __##FUNC (step, data, inptrp, inend,outbufstart, \ - irreversible, do_flush, consume_incomplete); \ - } -# define ICONV_VX_SINGLE(NAME) \ - static __typeof (NAME##_single) __##NAME##_vx_single __attribute__((alias(#NAME "_single"))); - -/* Generate the transformations which are used, if the target machine does not - support vector instructions. */ -# define __gconv_transform_ascii_internal \ - ICONV_C_NAME (__gconv_transform_ascii_internal) -# define __gconv_transform_internal_ascii \ - ICONV_C_NAME (__gconv_transform_internal_ascii) -# define __gconv_transform_internal_ucs4le \ - ICONV_C_NAME (__gconv_transform_internal_ucs4le) -# define __gconv_transform_ucs4_internal \ - ICONV_C_NAME (__gconv_transform_ucs4_internal) -# define __gconv_transform_ucs4le_internal \ - ICONV_C_NAME (__gconv_transform_ucs4le_internal) -# define __gconv_transform_ucs2_internal \ - ICONV_C_NAME (__gconv_transform_ucs2_internal) -# define __gconv_transform_ucs2reverse_internal \ - ICONV_C_NAME (__gconv_transform_ucs2reverse_internal) -# define __gconv_transform_internal_ucs2 \ - ICONV_C_NAME (__gconv_transform_internal_ucs2) -# define __gconv_transform_internal_ucs2reverse \ - ICONV_C_NAME (__gconv_transform_internal_ucs2reverse) - - -# include - -# undef __gconv_transform_ascii_internal -# undef __gconv_transform_internal_ascii -# undef __gconv_transform_internal_ucs4le -# undef __gconv_transform_ucs4_internal -# undef __gconv_transform_ucs4le_internal -# undef __gconv_transform_ucs2_internal -# undef __gconv_transform_ucs2reverse_internal -# undef __gconv_transform_internal_ucs2 -# undef __gconv_transform_internal_ucs2reverse - -/* Now define the functions with vector support. */ -# if defined __s390x__ -# define CONVERT_32BIT_SIZE_T(REG) -# else -# define CONVERT_32BIT_SIZE_T(REG) "llgfr %" #REG ",%" #REG "\n\t" -# endif - -/* Convert from ISO 646-IRV to the internal (UCS4-like) format. */ -# define DEFINE_INIT 0 -# define DEFINE_FINI 0 -# define MIN_NEEDED_FROM 1 -# define MIN_NEEDED_TO 4 -# define FROM_DIRECTION 1 -# define FROM_LOOP ICONV_VX_NAME (ascii_internal_loop) -# define TO_LOOP ICONV_VX_NAME (ascii_internal_loop) /* This is not used. */ -# define FUNCTION_NAME ICONV_VX_NAME (__gconv_transform_ascii_internal) -# define ONE_DIRECTION 1 - -# define MIN_NEEDED_INPUT MIN_NEEDED_FROM -# define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -# define LOOPFCT FROM_LOOP -# define BODY_ORIG_ERROR \ - /* The value is too large. We don't try transliteration here since \ - this is not an error because of the lack of possibilities to \ - represent the result. This is a genuine bug in the input since \ - ASCII does not allow such values. */ \ - STANDARD_FROM_LOOP_ERR_HANDLER (1); - -# define BODY_ORIG \ - { \ - if (__glibc_unlikely (*inptr > '\x7f')) \ - { \ - BODY_ORIG_ERROR \ - } \ - else \ - { \ - /* It's an one byte sequence. */ \ - *((uint32_t *) outptr) = *inptr++; \ - outptr += sizeof (uint32_t); \ - } \ - } -# define BODY \ - { \ - size_t len = inend - inptr; \ - if (len > (outend - outptr) / 4) \ - len = (outend - outptr) / 4; \ - size_t loop_count, tmp; \ - __asm__ volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - CONVERT_32BIT_SIZE_T ([R_LEN]) \ - " vrepib %%v30,0x7f\n\t" /* For compare > 0x7f. */ \ - " srlg %[R_LI],%[R_LEN],4\n\t" \ - " vrepib %%v31,0x20\n\t" \ - " clgije %[R_LI],0,1f\n\t" \ - "0: \n\t" /* Handle 16-byte blocks. */ \ - " vl %%v16,0(%[R_IN])\n\t" \ - /* Checking for values > 0x7f. */ \ - " vstrcbs %%v17,%%v16,%%v30,%%v31\n\t" \ - " jno 10f\n\t" \ - /* Enlarge to UCS4. */ \ - " vuplhb %%v17,%%v16\n\t" \ - " vupllb %%v18,%%v16\n\t" \ - " vuplhh %%v19,%%v17\n\t" \ - " vupllh %%v20,%%v17\n\t" \ - " vuplhh %%v21,%%v18\n\t" \ - " vupllh %%v22,%%v18\n\t" \ - /* Store 64bytes to buf_out. */ \ - " vstm %%v19,%%v22,0(%[R_OUT])\n\t" \ - " la %[R_IN],16(%[R_IN])\n\t" \ - " la %[R_OUT],64(%[R_OUT])\n\t" \ - " brctg %[R_LI],0b\n\t" \ - " lghi %[R_LI],15\n\t" \ - " ngr %[R_LEN],%[R_LI]\n\t" \ - " je 20f\n\t" /* Jump away if no remaining bytes. */ \ - /* Handle remaining bytes. */ \ - "1: aghik %[R_LI],%[R_LEN],-1\n\t" \ - " jl 20f\n\t" /* Jump away if no remaining bytes. */ \ - " vll %%v16,%[R_LI],0(%[R_IN])\n\t" \ - /* Checking for values > 0x7f. */ \ - " vstrcbs %%v17,%%v16,%%v30,%%v31\n\t" \ - " vlgvb %[R_TMP],%%v17,7\n\t" \ - " clr %[R_TMP],%[R_LI]\n\t" \ - " locrh %[R_TMP],%[R_LEN]\n\t" \ - " locghih %[R_LEN],0\n\t" \ - " j 12f\n\t" \ - "10:\n\t" \ - /* Found a value > 0x7f. \ - Store the preceding chars. */ \ - " vlgvb %[R_TMP],%%v17,7\n\t" \ - "12: la %[R_IN],0(%[R_TMP],%[R_IN])\n\t" \ - " sllk %[R_TMP],%[R_TMP],2\n\t" \ - " ahi %[R_TMP],-1\n\t" \ - " jl 20f\n\t" \ - " lgr %[R_LI],%[R_TMP]\n\t" \ - " vuplhb %%v17,%%v16\n\t" \ - " vuplhh %%v19,%%v17\n\t" \ - " vstl %%v19,%[R_LI],0(%[R_OUT])\n\t" \ - " ahi %[R_LI],-16\n\t" \ - " jl 11f\n\t" \ - " vupllh %%v20,%%v17\n\t" \ - " vstl %%v20,%[R_LI],16(%[R_OUT])\n\t" \ - " ahi %[R_LI],-16\n\t" \ - " jl 11f\n\t" \ - " vupllb %%v18,%%v16\n\t" \ - " vuplhh %%v21,%%v18\n\t" \ - " vstl %%v21,%[R_LI],32(%[R_OUT])\n\t" \ - " ahi %[R_LI],-16\n\t" \ - " jl 11f\n\t" \ - " vupllh %%v22,%%v18\n\t" \ - " vstl %%v22,%[R_LI],48(%[R_OUT])\n\t" \ - "11:\n\t" \ - " la %[R_OUT],1(%[R_TMP],%[R_OUT])\n\t" \ - "20:\n\t" \ - ".machine pop" \ - : /* outputs */ [R_OUT] "+a" (outptr) \ - , [R_IN] "+a" (inptr) \ - , [R_LEN] "+d" (len) \ - , [R_LI] "=d" (loop_count) \ - , [R_TMP] "=a" (tmp) \ - : /* inputs */ \ - : /* clobber list*/ "memory", "cc" \ - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v17") \ - ASM_CLOBBER_VR ("v18") ASM_CLOBBER_VR ("v19") \ - ASM_CLOBBER_VR ("v20") ASM_CLOBBER_VR ("v21") \ - ASM_CLOBBER_VR ("v22") ASM_CLOBBER_VR ("v30") \ - ASM_CLOBBER_VR ("v31") \ - ); \ - if (len > 0) \ - { \ - /* Found an invalid character at the next input byte. */ \ - BODY_ORIG_ERROR \ - } \ - } - -# define LOOP_NEED_FLAGS -# include -# include -# undef BODY_ORIG -# undef BODY_ORIG_ERROR -ICONV_VX_IFUNC (__gconv_transform_ascii_internal) - -/* Convert from the internal (UCS4-like) format to ISO 646-IRV. */ -# define DEFINE_INIT 0 -# define DEFINE_FINI 0 -# define MIN_NEEDED_FROM 4 -# define MIN_NEEDED_TO 1 -# define FROM_DIRECTION 1 -# define FROM_LOOP ICONV_VX_NAME (internal_ascii_loop) -# define TO_LOOP ICONV_VX_NAME (internal_ascii_loop) /* This is not used. */ -# define FUNCTION_NAME ICONV_VX_NAME (__gconv_transform_internal_ascii) -# define ONE_DIRECTION 1 - -# define MIN_NEEDED_INPUT MIN_NEEDED_FROM -# define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -# define LOOPFCT FROM_LOOP -# define BODY_ORIG_ERROR \ - UNICODE_TAG_HANDLER (*((const uint32_t *) inptr), 4); \ - STANDARD_TO_LOOP_ERR_HANDLER (4); - -# define BODY_ORIG \ - { \ - if (__glibc_unlikely (*((const uint32_t *) inptr) > 0x7f)) \ - { \ - BODY_ORIG_ERROR \ - } \ - else \ - { \ - /* It's an one byte sequence. */ \ - *outptr++ = *((const uint32_t *) inptr); \ - inptr += sizeof (uint32_t); \ - } \ - } -# define BODY \ - { \ - size_t len = (inend - inptr) / 4; \ - if (len > outend - outptr) \ - len = outend - outptr; \ - size_t loop_count, tmp, tmp2; \ - __asm__ volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - CONVERT_32BIT_SIZE_T ([R_LEN]) \ - /* Setup to check for ch > 0x7f. */ \ - " vzero %%v21\n\t" \ - " srlg %[R_LI],%[R_LEN],4\n\t" \ - " vleih %%v21,8192,0\n\t" /* element 0: > */ \ - " vleih %%v21,-8192,2\n\t" /* element 1: =<> */ \ - " vleif %%v20,127,0\n\t" /* element 0: 127 */ \ - " lghi %[R_TMP],0\n\t" \ - " clgije %[R_LI],0,1f\n\t" \ - "0:\n\t" \ - " vlm %%v16,%%v19,0(%[R_IN])\n\t" \ - /* Shorten to byte values. */ \ - " vpkf %%v23,%%v16,%%v17\n\t" \ - " vpkf %%v24,%%v18,%%v19\n\t" \ - " vpkh %%v23,%%v23,%%v24\n\t" \ - /* Checking for values > 0x7f. */ \ - " vstrcfs %%v22,%%v16,%%v20,%%v21\n\t" \ - " jno 10f\n\t" \ - " vstrcfs %%v22,%%v17,%%v20,%%v21\n\t" \ - " jno 11f\n\t" \ - " vstrcfs %%v22,%%v18,%%v20,%%v21\n\t" \ - " jno 12f\n\t" \ - " vstrcfs %%v22,%%v19,%%v20,%%v21\n\t" \ - " jno 13f\n\t" \ - /* Store 16bytes to outptr. */ \ - " vst %%v23,0(%[R_OUT])\n\t" \ - " la %[R_IN],64(%[R_IN])\n\t" \ - " la %[R_OUT],16(%[R_OUT])\n\t" \ - " brctg %[R_LI],0b\n\t" \ - " lghi %[R_LI],15\n\t" \ - " ngr %[R_LEN],%[R_LI]\n\t" \ - " je 20f\n\t" /* Jump away if no remaining bytes. */ \ - /* Handle remaining bytes. */ \ - "1: sllg %[R_LI],%[R_LEN],2\n\t" \ - " aghi %[R_LI],-1\n\t" \ - " jl 20f\n\t" /* Jump away if no remaining bytes. */ \ - /* Load remaining 1...63 bytes. */ \ - " vll %%v16,%[R_LI],0(%[R_IN])\n\t" \ - " ahi %[R_LI],-16\n\t" \ - " jl 2f\n\t" \ - " vll %%v17,%[R_LI],16(%[R_IN])\n\t" \ - " ahi %[R_LI],-16\n\t" \ - " jl 2f\n\t" \ - " vll %%v18,%[R_LI],32(%[R_IN])\n\t" \ - " ahi %[R_LI],-16\n\t" \ - " jl 2f\n\t" \ - " vll %%v19,%[R_LI],48(%[R_IN])\n\t" \ - "2:\n\t" \ - /* Shorten to byte values. */ \ - " vpkf %%v23,%%v16,%%v17\n\t" \ - " vpkf %%v24,%%v18,%%v19\n\t" \ - " vpkh %%v23,%%v23,%%v24\n\t" \ - " sllg %[R_LI],%[R_LEN],2\n\t" \ - " aghi %[R_LI],-16\n\t" \ - " jl 3f\n\t" /* v16 is not fully loaded. */ \ - " vstrcfs %%v22,%%v16,%%v20,%%v21\n\t" \ - " jno 10f\n\t" \ - " aghi %[R_LI],-16\n\t" \ - " jl 4f\n\t" /* v17 is not fully loaded. */ \ - " vstrcfs %%v22,%%v17,%%v20,%%v21\n\t" \ - " jno 11f\n\t" \ - " aghi %[R_LI],-16\n\t" \ - " jl 5f\n\t" /* v18 is not fully loaded. */ \ - " vstrcfs %%v22,%%v18,%%v20,%%v21\n\t" \ - " jno 12f\n\t" \ - " aghi %[R_LI],-16\n\t" \ - /* v19 is not fully loaded. */ \ - " lghi %[R_TMP],12\n\t" \ - " vstrcfs %%v22,%%v19,%%v20,%%v21\n\t" \ - "6: vlgvb %[R_I],%%v22,7\n\t" \ - " aghi %[R_LI],16\n\t" \ - " clrjl %[R_I],%[R_LI],14f\n\t" \ - " lgr %[R_I],%[R_LEN]\n\t" \ - " lghi %[R_LEN],0\n\t" \ - " j 15f\n\t" \ - "3: vstrcfs %%v22,%%v16,%%v20,%%v21\n\t" \ - " j 6b\n\t" \ - "4: vstrcfs %%v22,%%v17,%%v20,%%v21\n\t" \ - " lghi %[R_TMP],4\n\t" \ - " j 6b\n\t" \ - "5: vstrcfs %%v22,%%v17,%%v20,%%v21\n\t" \ - " lghi %[R_TMP],8\n\t" \ - " j 6b\n\t" \ - /* Found a value > 0x7f. */ \ - "13: ahi %[R_TMP],4\n\t" \ - "12: ahi %[R_TMP],4\n\t" \ - "11: ahi %[R_TMP],4\n\t" \ - "10: vlgvb %[R_I],%%v22,7\n\t" \ - "14: srlg %[R_I],%[R_I],2\n\t" \ - " agr %[R_I],%[R_TMP]\n\t" \ - " je 20f\n\t" \ - /* Store characters before invalid one... */ \ - "15: aghi %[R_I],-1\n\t" \ - " vstl %%v23,%[R_I],0(%[R_OUT])\n\t" \ - /* ... and update pointers. */ \ - " la %[R_OUT],1(%[R_I],%[R_OUT])\n\t" \ - " sllg %[R_I],%[R_I],2\n\t" \ - " la %[R_IN],4(%[R_I],%[R_IN])\n\t" \ - "20:\n\t" \ - ".machine pop" \ - : /* outputs */ [R_OUT] "+a" (outptr) \ - , [R_IN] "+a" (inptr) \ - , [R_LEN] "+d" (len) \ - , [R_LI] "=d" (loop_count) \ - , [R_I] "=a" (tmp2) \ - , [R_TMP] "=d" (tmp) \ - : /* inputs */ \ - : /* clobber list*/ "memory", "cc" \ - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v17") \ - ASM_CLOBBER_VR ("v18") ASM_CLOBBER_VR ("v19") \ - ASM_CLOBBER_VR ("v20") ASM_CLOBBER_VR ("v21") \ - ASM_CLOBBER_VR ("v22") ASM_CLOBBER_VR ("v23") \ - ASM_CLOBBER_VR ("v24") \ - ); \ - if (len > 0) \ - { \ - /* Found an invalid character > 0x7f at next character. */ \ - BODY_ORIG_ERROR \ - } \ - } -# define LOOP_NEED_FLAGS -# include -# include -# undef BODY_ORIG -# undef BODY_ORIG_ERROR -ICONV_VX_IFUNC (__gconv_transform_internal_ascii) - - -/* Convert from internal UCS4 to UCS4 little endian form. */ -# define DEFINE_INIT 0 -# define DEFINE_FINI 0 -# define MIN_NEEDED_FROM 4 -# define MIN_NEEDED_TO 4 -# define FROM_DIRECTION 1 -# define FROM_LOOP ICONV_VX_NAME (internal_ucs4le_loop) -# define TO_LOOP ICONV_VX_NAME (internal_ucs4le_loop) /* This is not used. */ -# define FUNCTION_NAME ICONV_VX_NAME (__gconv_transform_internal_ucs4le) -# define ONE_DIRECTION 0 - -static inline int -__attribute ((always_inline)) -ICONV_VX_NAME (internal_ucs4le_loop) (struct __gconv_step *step, - struct __gconv_step_data *step_data, - const unsigned char **inptrp, - const unsigned char *inend, - unsigned char **outptrp, - unsigned char *outend, - size_t *irreversible) -{ - const unsigned char *inptr = *inptrp; - unsigned char *outptr = *outptrp; - int result; - size_t len = MIN (inend - inptr, outend - outptr) / 4; - size_t loop_count; - __asm__ volatile (".machine push\n\t" - ".machine \"z13\"\n\t" - ".machinemode \"zarch_nohighgprs\"\n\t" - CONVERT_32BIT_SIZE_T ([R_LEN]) - " bras %[R_LI],1f\n\t" - /* Vector permute mask: */ - " .long 0x03020100,0x7060504,0x0B0A0908,0x0F0E0D0C\n\t" - "1: vl %%v20,0(%[R_LI])\n\t" - /* Process 64byte (16char) blocks. */ - " srlg %[R_LI],%[R_LEN],4\n\t" - " clgije %[R_LI],0,10f\n\t" - "0: vlm %%v16,%%v19,0(%[R_IN])\n\t" - " vperm %%v16,%%v16,%%v16,%%v20\n\t" - " vperm %%v17,%%v17,%%v17,%%v20\n\t" - " vperm %%v18,%%v18,%%v18,%%v20\n\t" - " vperm %%v19,%%v19,%%v19,%%v20\n\t" - " vstm %%v16,%%v19,0(%[R_OUT])\n\t" - " la %[R_IN],64(%[R_IN])\n\t" - " la %[R_OUT],64(%[R_OUT])\n\t" - " brctg %[R_LI],0b\n\t" - " llgfr %[R_LEN],%[R_LEN]\n\t" - " nilf %[R_LEN],15\n\t" - /* Process 16byte (4char) blocks. */ - "10: srlg %[R_LI],%[R_LEN],2\n\t" - " clgije %[R_LI],0,20f\n\t" - "11: vl %%v16,0(%[R_IN])\n\t" - " vperm %%v16,%%v16,%%v16,%%v20\n\t" - " vst %%v16,0(%[R_OUT])\n\t" - " la %[R_IN],16(%[R_IN])\n\t" - " la %[R_OUT],16(%[R_OUT])\n\t" - " brctg %[R_LI],11b\n\t" - " nill %[R_LEN],3\n\t" - /* Process <16bytes. */ - "20: sll %[R_LEN],2\n\t" - " ahi %[R_LEN],-1\n\t" - " jl 30f\n\t" - " vll %%v16,%[R_LEN],0(%[R_IN])\n\t" - " vperm %%v16,%%v16,%%v16,%%v20\n\t" - " vstl %%v16,%[R_LEN],0(%[R_OUT])\n\t" - " la %[R_IN],1(%[R_LEN],%[R_IN])\n\t" - " la %[R_OUT],1(%[R_LEN],%[R_OUT])\n\t" - "30: \n\t" - ".machine pop" - : /* outputs */ [R_OUT] "+a" (outptr) - , [R_IN] "+a" (inptr) - , [R_LI] "=a" (loop_count) - , [R_LEN] "+a" (len) - : /* inputs */ - : /* clobber list*/ "memory", "cc" - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v17") - ASM_CLOBBER_VR ("v18") ASM_CLOBBER_VR ("v19") - ASM_CLOBBER_VR ("v20") - ); - *inptrp = inptr; - *outptrp = outptr; - - /* Determine the status. */ - if (*inptrp == inend) - result = __GCONV_EMPTY_INPUT; - else if (*outptrp + 4 > outend) - result = __GCONV_FULL_OUTPUT; - else - result = __GCONV_INCOMPLETE_INPUT; - - return result; -} - -ICONV_VX_SINGLE (internal_ucs4le_loop) -# include -ICONV_VX_IFUNC (__gconv_transform_internal_ucs4le) - - -/* Transform from UCS4 to the internal, UCS4-like format. Unlike - for the other direction we have to check for correct values here. */ -# define DEFINE_INIT 0 -# define DEFINE_FINI 0 -# define MIN_NEEDED_FROM 4 -# define MIN_NEEDED_TO 4 -# define FROM_DIRECTION 1 -# define FROM_LOOP ICONV_VX_NAME (ucs4_internal_loop) -# define TO_LOOP ICONV_VX_NAME (ucs4_internal_loop) /* This is not used. */ -# define FUNCTION_NAME ICONV_VX_NAME (__gconv_transform_ucs4_internal) -# define ONE_DIRECTION 0 - - -static inline int -__attribute ((always_inline)) -ICONV_VX_NAME (ucs4_internal_loop) (struct __gconv_step *step, - struct __gconv_step_data *step_data, - const unsigned char **inptrp, - const unsigned char *inend, - unsigned char **outptrp, - unsigned char *outend, - size_t *irreversible) -{ - int flags = step_data->__flags; - const unsigned char *inptr = *inptrp; - unsigned char *outptr = *outptrp; - int result; - size_t len, loop_count; - do - { - len = MIN (inend - inptr, outend - outptr) / 4; - __asm__ volatile (".machine push\n\t" - ".machine \"z13\"\n\t" - ".machinemode \"zarch_nohighgprs\"\n\t" - CONVERT_32BIT_SIZE_T ([R_LEN]) - /* Setup to check for ch > 0x7fffffff. */ - " larl %[R_LI],9f\n\t" - " vlm %%v20,%%v21,0(%[R_LI])\n\t" - " srlg %[R_LI],%[R_LEN],2\n\t" - " clgije %[R_LI],0,1f\n\t" - /* Process 16byte (4char) blocks. */ - "0: vl %%v16,0(%[R_IN])\n\t" - " vstrcfs %%v22,%%v16,%%v20,%%v21\n\t" - " jno 10f\n\t" - " vst %%v16,0(%[R_OUT])\n\t" - " la %[R_IN],16(%[R_IN])\n\t" - " la %[R_OUT],16(%[R_OUT])\n\t" - " brctg %[R_LI],0b\n\t" - " llgfr %[R_LEN],%[R_LEN]\n\t" - " nilf %[R_LEN],3\n\t" - /* Process <16bytes. */ - "1: sll %[R_LEN],2\n\t" - " ahik %[R_LI],%[R_LEN],-1\n\t" - " jl 20f\n\t" /* No further bytes available. */ - " vll %%v16,%[R_LI],0(%[R_IN])\n\t" - " vstrcfs %%v22,%%v16,%%v20,%%v21\n\t" - " vlgvb %[R_LI],%%v22,7\n\t" - " clr %[R_LI],%[R_LEN]\n\t" - " locgrhe %[R_LI],%[R_LEN]\n\t" - " locghihe %[R_LEN],0\n\t" - " j 11f\n\t" - /* v20: Vector string range compare values. */ - "9: .long 0x7fffffff,0x0,0x0,0x0\n\t" - /* v21: Vector string range compare control-bits. - element 0: >; element 1: =<> (always true) */ - " .long 0x20000000,0xE0000000,0x0,0x0\n\t" - /* Found a value > 0x7fffffff. */ - "10: vlgvb %[R_LI],%%v22,7\n\t" - /* Store characters before invalid one. */ - "11: aghi %[R_LI],-1\n\t" - " jl 20f\n\t" - " vstl %%v16,%[R_LI],0(%[R_OUT])\n\t" - " la %[R_IN],1(%[R_LI],%[R_IN])\n\t" - " la %[R_OUT],1(%[R_LI],%[R_OUT])\n\t" - "20:\n\t" - ".machine pop" - : /* outputs */ [R_OUT] "+a" (outptr) - , [R_IN] "+a" (inptr) - , [R_LI] "=a" (loop_count) - , [R_LEN] "+d" (len) - : /* inputs */ - : /* clobber list*/ "memory", "cc" - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v20") - ASM_CLOBBER_VR ("v21") ASM_CLOBBER_VR ("v22") - ); - if (len > 0) - { - /* The value is too large. We don't try transliteration here since - this is not an error because of the lack of possibilities to - represent the result. This is a genuine bug in the input since - UCS4 does not allow such values. */ - if (irreversible == NULL) - /* We are transliterating, don't try to correct anything. */ - return __GCONV_ILLEGAL_INPUT; - - if (flags & __GCONV_IGNORE_ERRORS) - { - /* Just ignore this character. */ - ++*irreversible; - inptr += 4; - continue; - } - - *inptrp = inptr; - *outptrp = outptr; - return __GCONV_ILLEGAL_INPUT; - } - } - while (len > 0); - - *inptrp = inptr; - *outptrp = outptr; - - /* Determine the status. */ - if (*inptrp == inend) - result = __GCONV_EMPTY_INPUT; - else if (*outptrp + 4 > outend) - result = __GCONV_FULL_OUTPUT; - else - result = __GCONV_INCOMPLETE_INPUT; - - return result; -} - -ICONV_VX_SINGLE (ucs4_internal_loop) -# include -ICONV_VX_IFUNC (__gconv_transform_ucs4_internal) - - -/* Transform from UCS4-LE to the internal encoding. */ -# define DEFINE_INIT 0 -# define DEFINE_FINI 0 -# define MIN_NEEDED_FROM 4 -# define MIN_NEEDED_TO 4 -# define FROM_DIRECTION 1 -# define FROM_LOOP ICONV_VX_NAME (ucs4le_internal_loop) -# define TO_LOOP ICONV_VX_NAME (ucs4le_internal_loop) /* This is not used. */ -# define FUNCTION_NAME ICONV_VX_NAME (__gconv_transform_ucs4le_internal) -# define ONE_DIRECTION 0 - -static inline int -__attribute ((always_inline)) -ICONV_VX_NAME (ucs4le_internal_loop) (struct __gconv_step *step, - struct __gconv_step_data *step_data, - const unsigned char **inptrp, - const unsigned char *inend, - unsigned char **outptrp, - unsigned char *outend, - size_t *irreversible) -{ - int flags = step_data->__flags; - const unsigned char *inptr = *inptrp; - unsigned char *outptr = *outptrp; - int result; - size_t len, loop_count; - do - { - len = MIN (inend - inptr, outend - outptr) / 4; - __asm__ volatile (".machine push\n\t" - ".machine \"z13\"\n\t" - ".machinemode \"zarch_nohighgprs\"\n\t" - CONVERT_32BIT_SIZE_T ([R_LEN]) - /* Setup to check for ch > 0x7fffffff. */ - " larl %[R_LI],9f\n\t" - " vlm %%v20,%%v22,0(%[R_LI])\n\t" - " srlg %[R_LI],%[R_LEN],2\n\t" - " clgije %[R_LI],0,1f\n\t" - /* Process 16byte (4char) blocks. */ - "0: vl %%v16,0(%[R_IN])\n\t" - " vperm %%v16,%%v16,%%v16,%%v22\n\t" - " vstrcfs %%v23,%%v16,%%v20,%%v21\n\t" - " jno 10f\n\t" - " vst %%v16,0(%[R_OUT])\n\t" - " la %[R_IN],16(%[R_IN])\n\t" - " la %[R_OUT],16(%[R_OUT])\n\t" - " brctg %[R_LI],0b\n\t" - " llgfr %[R_LEN],%[R_LEN]\n\t" - " nilf %[R_LEN],3\n\t" - /* Process <16bytes. */ - "1: sll %[R_LEN],2\n\t" - " ahik %[R_LI],%[R_LEN],-1\n\t" - " jl 20f\n\t" /* No further bytes available. */ - " vll %%v16,%[R_LI],0(%[R_IN])\n\t" - " vperm %%v16,%%v16,%%v16,%%v22\n\t" - " vstrcfs %%v23,%%v16,%%v20,%%v21\n\t" - " vlgvb %[R_LI],%%v23,7\n\t" - " clr %[R_LI],%[R_LEN]\n\t" - " locgrhe %[R_LI],%[R_LEN]\n\t" - " locghihe %[R_LEN],0\n\t" - " j 11f\n\t" - /* v20: Vector string range compare values. */ - "9: .long 0x7fffffff,0x0,0x0,0x0\n\t" - /* v21: Vector string range compare control-bits. - element 0: >; element 1: =<> (always true) */ - " .long 0x20000000,0xE0000000,0x0,0x0\n\t" - /* v22: Vector permute mask. */ - " .long 0x03020100,0x7060504,0x0B0A0908,0x0F0E0D0C\n\t" - /* Found a value > 0x7fffffff. */ - "10: vlgvb %[R_LI],%%v23,7\n\t" - /* Store characters before invalid one. */ - "11: aghi %[R_LI],-1\n\t" - " jl 20f\n\t" - " vstl %%v16,%[R_LI],0(%[R_OUT])\n\t" - " la %[R_IN],1(%[R_LI],%[R_IN])\n\t" - " la %[R_OUT],1(%[R_LI],%[R_OUT])\n\t" - "20:\n\t" - ".machine pop" - : /* outputs */ [R_OUT] "+a" (outptr) - , [R_IN] "+a" (inptr) - , [R_LI] "=a" (loop_count) - , [R_LEN] "+d" (len) - : /* inputs */ - : /* clobber list*/ "memory", "cc" - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v20") - ASM_CLOBBER_VR ("v21") ASM_CLOBBER_VR ("v22") - ASM_CLOBBER_VR ("v23") - ); - if (len > 0) - { - /* The value is too large. We don't try transliteration here since - this is not an error because of the lack of possibilities to - represent the result. This is a genuine bug in the input since - UCS4 does not allow such values. */ - if (irreversible == NULL) - /* We are transliterating, don't try to correct anything. */ - return __GCONV_ILLEGAL_INPUT; - - if (flags & __GCONV_IGNORE_ERRORS) - { - /* Just ignore this character. */ - ++*irreversible; - inptr += 4; - continue; - } - - *inptrp = inptr; - *outptrp = outptr; - return __GCONV_ILLEGAL_INPUT; - } - } - while (len > 0); - - *inptrp = inptr; - *outptrp = outptr; - - /* Determine the status. */ - if (*inptrp == inend) - result = __GCONV_EMPTY_INPUT; - else if (*inptrp + 4 > inend) - result = __GCONV_INCOMPLETE_INPUT; - else - { - assert (*outptrp + 4 > outend); - result = __GCONV_FULL_OUTPUT; - } - - return result; -} -ICONV_VX_SINGLE (ucs4le_internal_loop) -# include -ICONV_VX_IFUNC (__gconv_transform_ucs4le_internal) - -/* Convert from UCS2 to the internal (UCS4-like) format. */ -# define DEFINE_INIT 0 -# define DEFINE_FINI 0 -# define MIN_NEEDED_FROM 2 -# define MIN_NEEDED_TO 4 -# define FROM_DIRECTION 1 -# define FROM_LOOP ICONV_VX_NAME (ucs2_internal_loop) -# define TO_LOOP ICONV_VX_NAME (ucs2_internal_loop) /* This is not used. */ -# define FUNCTION_NAME ICONV_VX_NAME (__gconv_transform_ucs2_internal) -# define ONE_DIRECTION 1 - -# define MIN_NEEDED_INPUT MIN_NEEDED_FROM -# define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -# define LOOPFCT FROM_LOOP -# define BODY_ORIG_ERROR \ - /* Surrogate characters in UCS-2 input are not valid. Reject \ - them. (Catching this here is not security relevant.) */ \ - STANDARD_FROM_LOOP_ERR_HANDLER (2); -# define BODY_ORIG \ - { \ - uint16_t u1 = get16 (inptr); \ - \ - if (__glibc_unlikely (u1 >= 0xd800 && u1 < 0xe000)) \ - { \ - BODY_ORIG_ERROR \ - } \ - \ - *((uint32_t *) outptr) = u1; \ - outptr += sizeof (uint32_t); \ - inptr += 2; \ - } -# define BODY \ - { \ - size_t len, tmp, tmp2; \ - len = MIN ((inend - inptr) / 2, (outend - outptr) / 4); \ - __asm__ volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - CONVERT_32BIT_SIZE_T ([R_LEN]) \ - /* Setup to check for ch >= 0xd800 && ch < 0xe000. */ \ - " larl %[R_TMP],9f\n\t" \ - " vlm %%v20,%%v21,0(%[R_TMP])\n\t" \ - " srlg %[R_TMP],%[R_LEN],3\n\t" \ - " clgije %[R_TMP],0,1f\n\t" \ - /* Process 16byte (8char) blocks. */ \ - "0: vl %%v16,0(%[R_IN])\n\t" \ - " vstrchs %%v19,%%v16,%%v20,%%v21\n\t" \ - /* Enlarge UCS2 to UCS4. */ \ - " vuplhh %%v17,%%v16\n\t" \ - " vupllh %%v18,%%v16\n\t" \ - " jno 10f\n\t" \ - /* Store 32bytes to buf_out. */ \ - " vstm %%v17,%%v18,0(%[R_OUT])\n\t" \ - " la %[R_IN],16(%[R_IN])\n\t" \ - " la %[R_OUT],32(%[R_OUT])\n\t" \ - " brctg %[R_TMP],0b\n\t" \ - " llgfr %[R_LEN],%[R_LEN]\n\t" \ - " nilf %[R_LEN],7\n\t" \ - /* Process <16bytes. */ \ - "1: sll %[R_LEN],1\n\t" \ - " ahik %[R_TMP],%[R_LEN],-1\n\t" \ - " jl 20f\n\t" /* No further bytes available. */ \ - " vll %%v16,%[R_TMP],0(%[R_IN])\n\t" \ - " vstrchs %%v19,%%v16,%%v20,%%v21\n\t" \ - /* Enlarge UCS2 to UCS4. */ \ - " vuplhh %%v17,%%v16\n\t" \ - " vupllh %%v18,%%v16\n\t" \ - " vlgvb %[R_TMP],%%v19,7\n\t" \ - " clr %[R_TMP],%[R_LEN]\n\t" \ - " locgrhe %[R_TMP],%[R_LEN]\n\t" \ - " locghihe %[R_LEN],0\n\t" \ - " j 11f\n\t" \ - /* v20: Vector string range compare values. */ \ - "9: .short 0xd800,0xe000,0x0,0x0,0x0,0x0,0x0,0x0\n\t" \ - /* v21: Vector string range compare control-bits. \ - element 0: =>; element 1: < */ \ - " .short 0xa000,0x4000,0x0,0x0,0x0,0x0,0x0,0x0\n\t" \ - /* Found an element: ch >= 0xd800 && ch < 0xe000 */ \ - "10: vlgvb %[R_TMP],%%v19,7\n\t" \ - "11: la %[R_IN],0(%[R_TMP],%[R_IN])\n\t" \ - " sll %[R_TMP],1\n\t" \ - " lgr %[R_TMP2],%[R_TMP]\n\t" \ - " ahi %[R_TMP],-1\n\t" \ - " jl 20f\n\t" \ - " vstl %%v17,%[R_TMP],0(%[R_OUT])\n\t" \ - " ahi %[R_TMP],-16\n\t" \ - " jl 19f\n\t" \ - " vstl %%v18,%[R_TMP],16(%[R_OUT])\n\t" \ - "19: la %[R_OUT],0(%[R_TMP2],%[R_OUT])\n\t" \ - "20: \n\t" \ - ".machine pop" \ - : /* outputs */ [R_OUT] "+a" (outptr) \ - , [R_IN] "+a" (inptr) \ - , [R_TMP] "=a" (tmp) \ - , [R_TMP2] "=a" (tmp2) \ - , [R_LEN] "+d" (len) \ - : /* inputs */ \ - : /* clobber list*/ "memory", "cc" \ - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v17") \ - ASM_CLOBBER_VR ("v18") ASM_CLOBBER_VR ("v19") \ - ASM_CLOBBER_VR ("v20") ASM_CLOBBER_VR ("v21") \ - ); \ - if (len > 0) \ - { \ - /* Found an invalid character at next input-char. */ \ - BODY_ORIG_ERROR \ - } \ - } - -# define LOOP_NEED_FLAGS -# include -# include -# undef BODY_ORIG -# undef BODY_ORIG_ERROR -ICONV_VX_IFUNC (__gconv_transform_ucs2_internal) - -/* Convert from UCS2 in other endianness to the internal (UCS4-like) format. */ -# define DEFINE_INIT 0 -# define DEFINE_FINI 0 -# define MIN_NEEDED_FROM 2 -# define MIN_NEEDED_TO 4 -# define FROM_DIRECTION 1 -# define FROM_LOOP ICONV_VX_NAME (ucs2reverse_internal_loop) -# define TO_LOOP ICONV_VX_NAME (ucs2reverse_internal_loop) /* This is not used.*/ -# define FUNCTION_NAME ICONV_VX_NAME (__gconv_transform_ucs2reverse_internal) -# define ONE_DIRECTION 1 - -# define MIN_NEEDED_INPUT MIN_NEEDED_FROM -# define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -# define LOOPFCT FROM_LOOP -# define BODY_ORIG_ERROR \ - /* Surrogate characters in UCS-2 input are not valid. Reject \ - them. (Catching this here is not security relevant.) */ \ - if (! ignore_errors_p ()) \ - { \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ - } \ - inptr += 2; \ - ++*irreversible; \ - continue; - -# define BODY_ORIG \ - { \ - uint16_t u1 = bswap_16 (get16 (inptr)); \ - \ - if (__glibc_unlikely (u1 >= 0xd800 && u1 < 0xe000)) \ - { \ - BODY_ORIG_ERROR \ - } \ - \ - *((uint32_t *) outptr) = u1; \ - outptr += sizeof (uint32_t); \ - inptr += 2; \ - } -# define BODY \ - { \ - size_t len, tmp, tmp2; \ - len = MIN ((inend - inptr) / 2, (outend - outptr) / 4); \ - __asm__ volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - CONVERT_32BIT_SIZE_T ([R_LEN]) \ - /* Setup to check for ch >= 0xd800 && ch < 0xe000. */ \ - " larl %[R_TMP],9f\n\t" \ - " vlm %%v20,%%v22,0(%[R_TMP])\n\t" \ - " srlg %[R_TMP],%[R_LEN],3\n\t" \ - " clgije %[R_TMP],0,1f\n\t" \ - /* Process 16byte (8char) blocks. */ \ - "0: vl %%v16,0(%[R_IN])\n\t" \ - " vperm %%v16,%%v16,%%v16,%%v22\n\t" \ - " vstrchs %%v19,%%v16,%%v20,%%v21\n\t" \ - /* Enlarge UCS2 to UCS4. */ \ - " vuplhh %%v17,%%v16\n\t" \ - " vupllh %%v18,%%v16\n\t" \ - " jno 10f\n\t" \ - /* Store 32bytes to buf_out. */ \ - " vstm %%v17,%%v18,0(%[R_OUT])\n\t" \ - " la %[R_IN],16(%[R_IN])\n\t" \ - " la %[R_OUT],32(%[R_OUT])\n\t" \ - " brctg %[R_TMP],0b\n\t" \ - " llgfr %[R_LEN],%[R_LEN]\n\t" \ - " nilf %[R_LEN],7\n\t" \ - /* Process <16bytes. */ \ - "1: sll %[R_LEN],1\n\t" \ - " ahik %[R_TMP],%[R_LEN],-1\n\t" \ - " jl 20f\n\t" /* No further bytes available. */ \ - " vll %%v16,%[R_TMP],0(%[R_IN])\n\t" \ - " vperm %%v16,%%v16,%%v16,%%v22\n\t" \ - " vstrchs %%v19,%%v16,%%v20,%%v21\n\t" \ - /* Enlarge UCS2 to UCS4. */ \ - " vuplhh %%v17,%%v16\n\t" \ - " vupllh %%v18,%%v16\n\t" \ - " vlgvb %[R_TMP],%%v19,7\n\t" \ - " clr %[R_TMP],%[R_LEN]\n\t" \ - " locgrhe %[R_TMP],%[R_LEN]\n\t" \ - " locghihe %[R_LEN],0\n\t" \ - " j 11f\n\t" \ - /* v20: Vector string range compare values. */ \ - "9: .short 0xd800,0xe000,0x0,0x0,0x0,0x0,0x0,0x0\n\t" \ - /* v21: Vector string range compare control-bits. \ - element 0: =>; element 1: < */ \ - " .short 0xa000,0x4000,0x0,0x0,0x0,0x0,0x0,0x0\n\t" \ - /* v22: Vector permute mask. */ \ - " .short 0x0100,0x0302,0x0504,0x0706\n\t" \ - " .short 0x0908,0x0b0a,0x0d0c,0x0f0e\n\t" \ - /* Found an element: ch >= 0xd800 && ch < 0xe000 */ \ - "10: vlgvb %[R_TMP],%%v19,7\n\t" \ - "11: la %[R_IN],0(%[R_TMP],%[R_IN])\n\t" \ - " sll %[R_TMP],1\n\t" \ - " lgr %[R_TMP2],%[R_TMP]\n\t" \ - " ahi %[R_TMP],-1\n\t" \ - " jl 20f\n\t" \ - " vstl %%v17,%[R_TMP],0(%[R_OUT])\n\t" \ - " ahi %[R_TMP],-16\n\t" \ - " jl 19f\n\t" \ - " vstl %%v18,%[R_TMP],16(%[R_OUT])\n\t" \ - "19: la %[R_OUT],0(%[R_TMP2],%[R_OUT])\n\t" \ - "20: \n\t" \ - ".machine pop" \ - : /* outputs */ [R_OUT] "+a" (outptr) \ - , [R_IN] "+a" (inptr) \ - , [R_TMP] "=a" (tmp) \ - , [R_TMP2] "=a" (tmp2) \ - , [R_LEN] "+d" (len) \ - : /* inputs */ \ - : /* clobber list*/ "memory", "cc" \ - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v17") \ - ASM_CLOBBER_VR ("v18") ASM_CLOBBER_VR ("v19") \ - ASM_CLOBBER_VR ("v20") ASM_CLOBBER_VR ("v21") \ - ASM_CLOBBER_VR ("v22") \ - ); \ - if (len > 0) \ - { \ - /* Found an invalid character at next input-char. */ \ - BODY_ORIG_ERROR \ - } \ - } -# define LOOP_NEED_FLAGS -# include -# include -# undef BODY_ORIG -# undef BODY_ORIG_ERROR -ICONV_VX_IFUNC (__gconv_transform_ucs2reverse_internal) - -/* Convert from the internal (UCS4-like) format to UCS2. */ -#define DEFINE_INIT 0 -#define DEFINE_FINI 0 -#define MIN_NEEDED_FROM 4 -#define MIN_NEEDED_TO 2 -#define FROM_DIRECTION 1 -#define FROM_LOOP ICONV_VX_NAME (internal_ucs2_loop) -#define TO_LOOP ICONV_VX_NAME (internal_ucs2_loop) /* This is not used. */ -#define FUNCTION_NAME ICONV_VX_NAME (__gconv_transform_internal_ucs2) -#define ONE_DIRECTION 1 - -#define MIN_NEEDED_INPUT MIN_NEEDED_FROM -#define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -#define LOOPFCT FROM_LOOP -#define BODY_ORIG \ - { \ - uint32_t val = *((const uint32_t *) inptr); \ - \ - if (__glibc_unlikely (val >= 0x10000)) \ - { \ - UNICODE_TAG_HANDLER (val, 4); \ - STANDARD_TO_LOOP_ERR_HANDLER (4); \ - } \ - else if (__glibc_unlikely (val >= 0xd800 && val < 0xe000)) \ - { \ - /* Surrogate characters in UCS-4 input are not valid. \ - We must catch this, because the UCS-2 output might be \ - interpreted as UTF-16 by other programs. If we let \ - surrogates pass through, attackers could make a security \ - hole exploit by synthesizing any desired plane 1-16 \ - character. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - if (! ignore_errors_p ()) \ - break; \ - inptr += 4; \ - ++*irreversible; \ - continue; \ - } \ - else \ - { \ - put16 (outptr, val); \ - outptr += sizeof (uint16_t); \ - inptr += 4; \ - } \ - } -# define BODY \ - { \ - if (__builtin_expect (inend - inptr < 32, 1) \ - || outend - outptr < 16) \ - /* Convert remaining bytes with c code. */ \ - BODY_ORIG \ - else \ - { \ - /* Convert in 32 byte blocks. */ \ - size_t loop_count = (inend - inptr) / 32; \ - size_t tmp, tmp2; \ - if (loop_count > (outend - outptr) / 16) \ - loop_count = (outend - outptr) / 16; \ - __asm__ volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - CONVERT_32BIT_SIZE_T ([R_LI]) \ - " larl %[R_I],3f\n\t" \ - " vlm %%v20,%%v23,0(%[R_I])\n\t" \ - "0: \n\t" \ - " vlm %%v16,%%v17,0(%[R_IN])\n\t" \ - /* Shorten UCS4 to UCS2. */ \ - " vpkf %%v18,%%v16,%%v17\n\t" \ - " vstrcfs %%v19,%%v16,%%v20,%%v21\n\t" \ - " jno 11f\n\t" \ - "1: vstrcfs %%v19,%%v17,%%v20,%%v21\n\t" \ - " jno 10f\n\t" \ - /* Store 16bytes to buf_out. */ \ - "2: vst %%v18,0(%[R_OUT])\n\t" \ - " la %[R_IN],32(%[R_IN])\n\t" \ - " la %[R_OUT],16(%[R_OUT])\n\t" \ - " brctg %[R_LI],0b\n\t" \ - " j 20f\n\t" \ - /* Setup to check for ch >= 0xd800. (v20, v21) */ \ - "3: .long 0xd800,0xd800,0x0,0x0\n\t" \ - " .long 0xa0000000,0xa0000000,0x0,0x0\n\t" \ - /* Setup to check for ch >= 0xe000 \ - && ch < 0x10000. (v22,v23) */ \ - " .long 0xe000,0x10000,0x0,0x0\n\t" \ - " .long 0xa0000000,0x40000000,0x0,0x0\n\t" \ - /* v16 contains only valid chars. Check in v17: \ - ch >= 0xe000 && ch <= 0xffff. */ \ - "10: vstrcfs %%v19,%%v17,%%v22,%%v23,8\n\t" \ - " jo 2b\n\t" /* All ch's in this range, proceed. */ \ - " lghi %[R_TMP],16\n\t" \ - " j 12f\n\t" \ - /* Maybe v16 contains invalid chars. \ - Check ch >= 0xe000 && ch <= 0xffff. */ \ - "11: vstrcfs %%v19,%%v16,%%v22,%%v23,8\n\t" \ - " jo 1b\n\t" /* All ch's in this range, proceed. */ \ - " lghi %[R_TMP],0\n\t" \ - "12: vlgvb %[R_I],%%v19,7\n\t" \ - " agr %[R_I],%[R_TMP]\n\t" \ - " la %[R_IN],0(%[R_I],%[R_IN])\n\t" \ - " srl %[R_I],1\n\t" \ - " ahi %[R_I],-1\n\t" \ - " jl 20f\n\t" \ - " vstl %%v18,%[R_I],0(%[R_OUT])\n\t" \ - " la %[R_OUT],1(%[R_I],%[R_OUT])\n\t" \ - "20:\n\t" \ - ".machine pop" \ - : /* outputs */ [R_OUT] "+a" (outptr) \ - , [R_IN] "+a" (inptr) \ - , [R_LI] "+d" (loop_count) \ - , [R_I] "=a" (tmp2) \ - , [R_TMP] "=d" (tmp) \ - : /* inputs */ \ - : /* clobber list*/ "memory", "cc" \ - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v17") \ - ASM_CLOBBER_VR ("v18") ASM_CLOBBER_VR ("v19") \ - ASM_CLOBBER_VR ("v20") ASM_CLOBBER_VR ("v21") \ - ASM_CLOBBER_VR ("v22") ASM_CLOBBER_VR ("v23") \ - ); \ - if (loop_count > 0) \ - { \ - /* Found an invalid character at next character. */ \ - BODY_ORIG \ - } \ - } \ - } -#define LOOP_NEED_FLAGS -#include -#include -# undef BODY_ORIG -ICONV_VX_IFUNC (__gconv_transform_internal_ucs2) - -/* Convert from the internal (UCS4-like) format to UCS2 in other endianness. */ -#define DEFINE_INIT 0 -#define DEFINE_FINI 0 -#define MIN_NEEDED_FROM 4 -#define MIN_NEEDED_TO 2 -#define FROM_DIRECTION 1 -#define FROM_LOOP ICONV_VX_NAME (internal_ucs2reverse_loop) -#define TO_LOOP ICONV_VX_NAME (internal_ucs2reverse_loop)/* This is not used.*/ -#define FUNCTION_NAME ICONV_VX_NAME (__gconv_transform_internal_ucs2reverse) -#define ONE_DIRECTION 1 - -#define MIN_NEEDED_INPUT MIN_NEEDED_FROM -#define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -#define LOOPFCT FROM_LOOP -#define BODY_ORIG \ - { \ - uint32_t val = *((const uint32_t *) inptr); \ - if (__glibc_unlikely (val >= 0x10000)) \ - { \ - UNICODE_TAG_HANDLER (val, 4); \ - STANDARD_TO_LOOP_ERR_HANDLER (4); \ - } \ - else if (__glibc_unlikely (val >= 0xd800 && val < 0xe000)) \ - { \ - /* Surrogate characters in UCS-4 input are not valid. \ - We must catch this, because the UCS-2 output might be \ - interpreted as UTF-16 by other programs. If we let \ - surrogates pass through, attackers could make a security \ - hole exploit by synthesizing any desired plane 1-16 \ - character. */ \ - if (! ignore_errors_p ()) \ - { \ - result = __GCONV_ILLEGAL_INPUT; \ - break; \ - } \ - inptr += 4; \ - ++*irreversible; \ - continue; \ - } \ - else \ - { \ - put16 (outptr, bswap_16 (val)); \ - outptr += sizeof (uint16_t); \ - inptr += 4; \ - } \ - } -# define BODY \ - { \ - if (__builtin_expect (inend - inptr < 32, 1) \ - || outend - outptr < 16) \ - /* Convert remaining bytes with c code. */ \ - BODY_ORIG \ - else \ - { \ - /* Convert in 32 byte blocks. */ \ - size_t loop_count = (inend - inptr) / 32; \ - size_t tmp, tmp2; \ - if (loop_count > (outend - outptr) / 16) \ - loop_count = (outend - outptr) / 16; \ - __asm__ volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - CONVERT_32BIT_SIZE_T ([R_LI]) \ - " larl %[R_I],3f\n\t" \ - " vlm %%v20,%%v24,0(%[R_I])\n\t" \ - "0: \n\t" \ - " vlm %%v16,%%v17,0(%[R_IN])\n\t" \ - /* Shorten UCS4 to UCS2 and byteswap. */ \ - " vpkf %%v18,%%v16,%%v17\n\t" \ - " vperm %%v18,%%v18,%%v18,%%v24\n\t" \ - " vstrcfs %%v19,%%v16,%%v20,%%v21\n\t" \ - " jno 11f\n\t" \ - "1: vstrcfs %%v19,%%v17,%%v20,%%v21\n\t" \ - " jno 10f\n\t" \ - /* Store 16bytes to buf_out. */ \ - "2: vst %%v18,0(%[R_OUT])\n\t" \ - " la %[R_IN],32(%[R_IN])\n\t" \ - " la %[R_OUT],16(%[R_OUT])\n\t" \ - " brctg %[R_LI],0b\n\t" \ - " j 20f\n\t" \ - /* Setup to check for ch >= 0xd800. (v20, v21) */ \ - "3: .long 0xd800,0xd800,0x0,0x0\n\t" \ - " .long 0xa0000000,0xa0000000,0x0,0x0\n\t" \ - /* Setup to check for ch >= 0xe000 \ - && ch < 0x10000. (v22,v23) */ \ - " .long 0xe000,0x10000,0x0,0x0\n\t" \ - " .long 0xa0000000,0x40000000,0x0,0x0\n\t" \ - /* Vector permute mask (v24) */ \ - " .short 0x0100,0x0302,0x0504,0x0706\n\t" \ - " .short 0x0908,0x0b0a,0x0d0c,0x0f0e\n\t" \ - /* v16 contains only valid chars. Check in v17: \ - ch >= 0xe000 && ch <= 0xffff. */ \ - "10: vstrcfs %%v19,%%v17,%%v22,%%v23,8\n\t" \ - " jo 2b\n\t" /* All ch's in this range, proceed. */ \ - " lghi %[R_TMP],16\n\t" \ - " j 12f\n\t" \ - /* Maybe v16 contains invalid chars. \ - Check ch >= 0xe000 && ch <= 0xffff. */ \ - "11: vstrcfs %%v19,%%v16,%%v22,%%v23,8\n\t" \ - " jo 1b\n\t" /* All ch's in this range, proceed. */ \ - " lghi %[R_TMP],0\n\t" \ - "12: vlgvb %[R_I],%%v19,7\n\t" \ - " agr %[R_I],%[R_TMP]\n\t" \ - " la %[R_IN],0(%[R_I],%[R_IN])\n\t" \ - " srl %[R_I],1\n\t" \ - " ahi %[R_I],-1\n\t" \ - " jl 20f\n\t" \ - " vstl %%v18,%[R_I],0(%[R_OUT])\n\t" \ - " la %[R_OUT],1(%[R_I],%[R_OUT])\n\t" \ - "20:\n\t" \ - ".machine pop" \ - : /* outputs */ [R_OUT] "+a" (outptr) \ - , [R_IN] "+a" (inptr) \ - , [R_LI] "+d" (loop_count) \ - , [R_I] "=a" (tmp2) \ - , [R_TMP] "=d" (tmp) \ - : /* inputs */ \ - : /* clobber list*/ "memory", "cc" \ - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v17") \ - ASM_CLOBBER_VR ("v18") ASM_CLOBBER_VR ("v19") \ - ASM_CLOBBER_VR ("v20") ASM_CLOBBER_VR ("v21") \ - ASM_CLOBBER_VR ("v22") ASM_CLOBBER_VR ("v23") \ - ASM_CLOBBER_VR ("v24") \ - ); \ - if (loop_count > 0) \ - { \ - /* Found an invalid character at next character. */ \ - BODY_ORIG \ - } \ - } \ - } -#define LOOP_NEED_FLAGS -#include -#include -# undef BODY_ORIG -ICONV_VX_IFUNC (__gconv_transform_internal_ucs2reverse) - - -#else -/* Generate the internal transformations without ifunc if build environment - lacks vector support. Instead simply include the common version. */ -# include -#endif /* !defined HAVE_S390_VX_ASM_SUPPORT */ diff --git a/sysdeps/s390/multiarch/gen-8bit.sh b/sysdeps/s390/multiarch/gen-8bit.sh deleted file mode 100644 index 6f88c4bd9d..0000000000 --- a/sysdeps/s390/multiarch/gen-8bit.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -echo "static const uint8_t to_ucs1[256] = {" -sed -ne '/^[^[:space:]]*[[:space:]]*.x00/d;/^END/q' \ - -e 's/^[[:space:]]*.x\(..\).*/ [0x\2] = 0x\1,/p' \ - "$@" | sort -u -echo "};" diff --git a/sysdeps/s390/multiarch/iconv/skeleton.c b/sysdeps/s390/multiarch/iconv/skeleton.c deleted file mode 100644 index ca9ad1206f..0000000000 --- a/sysdeps/s390/multiarch/iconv/skeleton.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Skeleton for a conversion module - S390 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef IGNORE_ICONV_SKELETON -# include_next -#endif diff --git a/sysdeps/s390/multiarch/ifunc-impl-list.c b/sysdeps/s390/multiarch/ifunc-impl-list.c deleted file mode 100644 index 6210f50acb..0000000000 --- a/sysdeps/s390/multiarch/ifunc-impl-list.c +++ /dev/null @@ -1,152 +0,0 @@ -/* Enumerate available IFUNC implementations of a function. s390/s390x version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Maximum number of IFUNC implementations. */ -#define MAX_IFUNC 3 - -/* Fill ARRAY of MAX elements with IFUNC implementations for function - NAME supported on target machine and return the number of valid - entries. */ -size_t -__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, - size_t max) -{ - assert (max >= MAX_IFUNC); - - size_t i = 0; - - /* Get hardware information. */ - unsigned long int dl_hwcap = GLRO (dl_hwcap); - unsigned long long stfle_bits = 0ULL; - if ((dl_hwcap & HWCAP_S390_STFLE) - && (dl_hwcap & HWCAP_S390_ZARCH) - && (dl_hwcap & HWCAP_S390_HIGH_GPRS)) - { - S390_STORE_STFLE (stfle_bits); - } - - IFUNC_IMPL (i, name, memset, - IFUNC_IMPL_ADD (array, i, memset, - S390_IS_Z196 (stfle_bits), __memset_z196) - IFUNC_IMPL_ADD (array, i, memset, - S390_IS_Z10 (stfle_bits), __memset_z10) - IFUNC_IMPL_ADD (array, i, memset, 1, __memset_default)) - - IFUNC_IMPL (i, name, memcmp, - IFUNC_IMPL_ADD (array, i, memcmp, - S390_IS_Z196 (stfle_bits), __memcmp_z196) - IFUNC_IMPL_ADD (array, i, memcmp, - S390_IS_Z10 (stfle_bits), __memcmp_z10) - IFUNC_IMPL_ADD (array, i, memcmp, 1, __memcmp_default)) - -#ifdef SHARED - - IFUNC_IMPL (i, name, memcpy, - IFUNC_IMPL_ADD (array, i, memcpy, - S390_IS_Z196 (stfle_bits), __memcpy_z196) - IFUNC_IMPL_ADD (array, i, memcpy, - S390_IS_Z10 (stfle_bits), __memcpy_z10) - IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_default)) - - IFUNC_IMPL (i, name, mempcpy, - IFUNC_IMPL_ADD (array, i, mempcpy, - S390_IS_Z196 (stfle_bits), ____mempcpy_z196) - IFUNC_IMPL_ADD (array, i, mempcpy, - S390_IS_Z10 (stfle_bits), ____mempcpy_z10) - IFUNC_IMPL_ADD (array, i, mempcpy, 1, ____mempcpy_default)) - -#endif /* SHARED */ - -#ifdef HAVE_S390_VX_ASM_SUPPORT - -# define IFUNC_VX_IMPL(FUNC) \ - IFUNC_IMPL (i, name, FUNC, \ - IFUNC_IMPL_ADD (array, i, FUNC, dl_hwcap & HWCAP_S390_VX, \ - __##FUNC##_vx) \ - IFUNC_IMPL_ADD (array, i, FUNC, 1, __##FUNC##_c)) - - IFUNC_VX_IMPL (strlen); - IFUNC_VX_IMPL (wcslen); - - IFUNC_VX_IMPL (strnlen); - IFUNC_VX_IMPL (wcsnlen); - - IFUNC_VX_IMPL (strcpy); - IFUNC_VX_IMPL (wcscpy); - - IFUNC_VX_IMPL (stpcpy); - IFUNC_VX_IMPL (wcpcpy); - - IFUNC_VX_IMPL (strncpy); - IFUNC_VX_IMPL (wcsncpy); - - IFUNC_VX_IMPL (stpncpy); - IFUNC_VX_IMPL (wcpncpy); - - IFUNC_VX_IMPL (strcat); - IFUNC_VX_IMPL (wcscat); - - IFUNC_VX_IMPL (strncat); - IFUNC_VX_IMPL (wcsncat); - - IFUNC_VX_IMPL (strcmp); - IFUNC_VX_IMPL (wcscmp); - - IFUNC_VX_IMPL (strncmp); - IFUNC_VX_IMPL (wcsncmp); - - IFUNC_VX_IMPL (strchr); - IFUNC_VX_IMPL (wcschr); - - IFUNC_VX_IMPL (strchrnul); - IFUNC_VX_IMPL (wcschrnul); - - IFUNC_VX_IMPL (strrchr); - IFUNC_VX_IMPL (wcsrchr); - - IFUNC_VX_IMPL (strspn); - IFUNC_VX_IMPL (wcsspn); - - IFUNC_VX_IMPL (strpbrk); - IFUNC_VX_IMPL (wcspbrk); - - IFUNC_VX_IMPL (strcspn); - IFUNC_VX_IMPL (wcscspn); - - IFUNC_VX_IMPL (memchr); - IFUNC_VX_IMPL (wmemchr); - IFUNC_VX_IMPL (rawmemchr); - - IFUNC_VX_IMPL (memccpy); - - IFUNC_VX_IMPL (wmemset); - - IFUNC_VX_IMPL (wmemcmp); - - IFUNC_VX_IMPL (memrchr); - -#endif /* HAVE_S390_VX_ASM_SUPPORT */ - - return i; -} diff --git a/sysdeps/s390/multiarch/ifunc-resolve.h b/sysdeps/s390/multiarch/ifunc-resolve.h deleted file mode 100644 index adbd08a6ee..0000000000 --- a/sysdeps/s390/multiarch/ifunc-resolve.h +++ /dev/null @@ -1,90 +0,0 @@ -/* IFUNC resolver function for CPU specific functions. - 32/64 bit S/390 version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define S390_STFLE_BITS_Z10 34 /* General instructions extension */ -#define S390_STFLE_BITS_Z196 45 /* Distinct operands, pop ... */ - -#define S390_IS_Z196(STFLE_BITS) \ - ((STFLE_BITS & (1ULL << (63 - S390_STFLE_BITS_Z196))) != 0) - -#define S390_IS_Z10(STFLE_BITS) \ - ((STFLE_BITS & (1ULL << (63 - S390_STFLE_BITS_Z10))) != 0) - -#define S390_STORE_STFLE(STFLE_BITS) \ - /* We want just 1 double word to be returned. */ \ - register unsigned long reg0 __asm__("0") = 0; \ - \ - __asm__ __volatile__(".machine push" "\n\t" \ - ".machine \"z9-109\"" "\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - "stfle %0" "\n\t" \ - ".machine pop" "\n" \ - : "=QS" (STFLE_BITS), "+d" (reg0) \ - : : "cc"); -#define s390_libc_ifunc_init() \ - unsigned long long stfle_bits = 0ULL; \ - if (__glibc_likely((dl_hwcap & HWCAP_S390_STFLE) \ - && (dl_hwcap & HWCAP_S390_ZARCH) \ - && (dl_hwcap & HWCAP_S390_HIGH_GPRS))) \ - { \ - S390_STORE_STFLE (stfle_bits); \ - } - -#define s390_libc_ifunc(TYPE_FUNC, RESOLVERFUNC, FUNC) \ - /* Make the declarations of the optimized functions hidden in order - to prevent GOT slots being generated for them. */ \ - extern __typeof (TYPE_FUNC) RESOLVERFUNC##_z196 attribute_hidden; \ - extern __typeof (TYPE_FUNC) RESOLVERFUNC##_z10 attribute_hidden; \ - extern __typeof (TYPE_FUNC) RESOLVERFUNC##_default attribute_hidden; \ - __ifunc (TYPE_FUNC, FUNC, \ - __glibc_likely (S390_IS_Z196 (stfle_bits)) \ - ? RESOLVERFUNC##_z196 \ - : __glibc_likely (S390_IS_Z10 (stfle_bits)) \ - ? RESOLVERFUNC##_z10 \ - : RESOLVERFUNC##_default, \ - unsigned long int dl_hwcap, s390_libc_ifunc_init); - -#define s390_vx_libc_ifunc(FUNC) \ - s390_vx_libc_ifunc2_redirected(FUNC, FUNC, FUNC) - -#define s390_vx_libc_ifunc_redirected(TYPE_FUNC, FUNC) \ - s390_vx_libc_ifunc2_redirected(TYPE_FUNC, FUNC, FUNC) - -#define s390_vx_libc_ifunc2(RESOLVERFUNC, FUNC) \ - s390_vx_libc_ifunc2_redirected(FUNC, RESOLVERFUNC, FUNC) - -#define s390_vx_libc_ifunc_init() -#define s390_vx_libc_ifunc2_redirected(TYPE_FUNC, RESOLVERFUNC, FUNC) \ - /* Make the declarations of the optimized functions hidden in order - to prevent GOT slots being generated for them. */ \ - extern __typeof (TYPE_FUNC) RESOLVERFUNC##_vx attribute_hidden; \ - extern __typeof (TYPE_FUNC) RESOLVERFUNC##_c attribute_hidden; \ - __ifunc (TYPE_FUNC, FUNC, \ - (dl_hwcap & HWCAP_S390_VX) \ - ? RESOLVERFUNC##_vx \ - : RESOLVERFUNC##_c, \ - unsigned long int dl_hwcap, s390_vx_libc_ifunc_init); - -#define s390_libc_ifunc_expr_init() -#define s390_libc_ifunc_expr(TYPE_FUNC, FUNC, EXPR) \ - __ifunc (TYPE_FUNC, FUNC, EXPR, unsigned long int hwcap, \ - s390_libc_ifunc_expr_init); diff --git a/sysdeps/s390/multiarch/memccpy-c.c b/sysdeps/s390/multiarch/memccpy-c.c deleted file mode 100644 index 73069ae502..0000000000 --- a/sysdeps/s390/multiarch/memccpy-c.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Default memccpy implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define MEMCCPY __memccpy_c - -# include -extern __typeof (__memccpy) __memccpy_c; -# include -#endif diff --git a/sysdeps/s390/multiarch/memccpy-vx.S b/sysdeps/s390/multiarch/memccpy-vx.S deleted file mode 100644 index f60aecef77..0000000000 --- a/sysdeps/s390/multiarch/memccpy-vx.S +++ /dev/null @@ -1,156 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of memccpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* void *memccpy (void * dest, const void *src, int c, size_t n) - Copies no more than n bytes from src to dest, - stopping when the character c is found - and returns pointer next to c in dest or null if c not found. - - Register usage: - -r0=tmp - -r1=tmp - -r2=dest - -r3=src - -r4=c - -r5=n - -r6=current_len - -v16=part of s - -v17=index of found c - -v18=c replicated - -v19=part #2 of s - -v31=save area for r6 -*/ -ENTRY(__memccpy_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r5,%r5 -# endif /* !defined __s390x__ */ - - vlvgp %v31,%r6,%r7 /* Save registers. */ - clgije %r5,0,.Lnf_end /* If len == 0 then exit. */ - - vlbb %v16,0(%r3),6 /* Load s until next 4k-byte boundary. */ - lcbb %r0,0(%r3),6 /* Get bytes to 4k-byte boundary or 16. */ - llgfr %r0,%r0 /* Convert 32bit to 64bit. */ - - vlvgb %v18,%r4,0 /* Generate vector which elements are all c. - if c > 255, c will be truncated. */ - vrepb %v18,%v18,0 - lghi %r6,0 /* current_len = 0. */ - - clgrjle %r5,%r0,.Lremaining_v16 /* If maxlen <= loaded-bytes - -> Process remaining. */ - - vfeebs %v17,%v16,%v18 /* Find c. */ - vlgvb %r1,%v17,7 /* Load byte index of c. */ - clgrjl %r1,%r0,.Lfound_v16 /* Found c is within loaded bytes. */ - - /* Align s to 16 byte. */ - risbgn %r1,%r3,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r6,15 /* current_len = 15. */ - slr %r6,%r1 /* Compute highest index to 16byte boundary. */ - - vstl %v16,%r6,0(%r2) /* Store prcessed bytes */ - ahi %r6,1 - -.Lpreloop1: - /* Now we are 16byte aligned, so we can load - a full vreg without page fault. */ - vl %v16,0(%r6,%r3) /* Load s. */ - clgijl %r5,17,.Lremaining_v16 /* If n <= 16, - process remaining bytes. */ - lgr %r7,%r5 - slgfi %r7,16 /* border_len = n - 16. */ - j .Lloop1 - -.Lloop2: - vl %v16,16(%r6,%r3) - vst %v19,0(%r6,%r2) - aghi %r6,16 - -.Lloop1: - clgrjhe %r6,%r7,.Lremaining_v16 /* If current_len >= border - then process remaining bytes. */ - vfeebs %v17,%v16,%v18 /* Find c. */ - jl .Lfound_v16 /* Jump away if c was found. */ - vl %v19,16(%r6,%r3) /* Load next s part. */ - vst %v16,0(%r6,%r2) /* Store previous part without c. */ - aghi %r6,16 - - clgrjhe %r6,%r7,.Lremaining_v19 - vfeebs %v17,%v19,%v18 - jl .Lfound_v19 - vl %v16,16(%r6,%r3) - vst %v19,0(%r6,%r2) - aghi %r6,16 - - clgrjhe %r6,%r7,.Lremaining_v16 - vfeebs %v17,%v16,%v18 - jl .Lfound_v16 - vl %v19,16(%r6,%r3) - vst %v16,0(%r6,%r2) - aghi %r6,16 - - clgrjhe %r6,%r7,.Lremaining_v19 - vfeebs %v17,%v19,%v18 - jo .Lloop2 - -.Lfound_v19: - vlr %v16,%v19 -.Lfound_v16: - /* v16 contains c. Store remaining bytes to c. currlen hasn´t - reached border, thus checking for maxlen is not needed! */ - vlgvb %r1,%v17,7 /* Load byte index of c. */ - la %r2,0(%r6,%r2) /* vstl has no support for index-register. */ -.Lfound_v16_store: - vstl %v16,%r1,0(%r2) /* Copy bytes including c. */ - la %r2,1(%r1,%r2) /* Return pointer next to c in dest. */ - vlgvg %r6,%v31,0 - vlgvg %r7,%v31,1 - br %r14 - -.Lremaining_v19: - vlr %v16,%v19 -.Lremaining_v16: - /* v16 contains the remaining bytes [1...16]. - Check and store remaining bytes. */ - vfeebs %v17,%v16,%v18 - slgrk %r7,%r5,%r6 /* Remaining bytes = maxlen - current_len. */ - aghi %r7,-1 /* vstl needs highest index. */ - la %r2,0(%r6,%r2) /* vstl has no index register. */ - vlgvb %r1,%v17,7 /* Load index of c or 16 if not found. */ - /* c in remaining bytes? -> Jump away (c-index <= max-index) */ - clrjle %r1,%r7,.Lfound_v16_store - vstl %v16,%r7,0(%r2) /* Store remaining bytes. */ - -.Lnf_end: - vlgvg %r6,%v31,0 - vlgvg %r7,%v31,1 - lghi %r2,0 /* Return null. */ - br %r14 -END(__memccpy_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/memccpy.c b/sysdeps/s390/multiarch/memccpy.c deleted file mode 100644 index 5adc1a8063..0000000000 --- a/sysdeps/s390/multiarch/memccpy.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Multiple versions of memccpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc (__memccpy) -weak_alias (__memccpy, memccpy) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/memchr-vx.S b/sysdeps/s390/multiarch/memchr-vx.S deleted file mode 100644 index e9cb06f948..0000000000 --- a/sysdeps/s390/multiarch/memchr-vx.S +++ /dev/null @@ -1,159 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of memchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* void *memchr (const void *s, int c, size_t n) - Scans memory for character c - and returns pointer to first c. - - Register usage: - -r0=tmp - -r1=tmp - -r2=s - -r3=c - -r4=n - -r5=current_len - -v16=part of s - -v17=index of found c - -v18=c replicated -*/ -ENTRY(__memchr_vx) - - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r4,%r4 -# endif /* !defined __s390x__ */ - - clgije %r4,0,.Lnf_end /* If len == 0 then exit. */ - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r0,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - llgfr %r0,%r0 /* Convert 32bit to 64bit. */ - - vlvgb %v18,%r3,0 /* Generate vector which elements are all c. - if c > 255, c will be truncated. */ - vrepb %v18,%v18,0 - lghi %r5,16 /* current_len = 16. */ - - clgrjhe %r0,%r4,.Llastcmp /* If (bytes to boundary) >= n, - jump to lastcmp. */ - - vfeebs %v17,%v16,%v18 /* Find c. */ - vlgvb %r1,%v17,7 /* Load byte index of c. */ - clgrjl %r1,%r0,.Lfound2 /* Found c is within loaded bytes. */ - - /* Align s to 16 byte. */ - risbgn %r1,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - slr %r5,%r1 /* Compute bytes to 16bytes boundary. */ - - lgr %r0,%r5 /* If %r5 + 64 < n? -> loop64. */ - aghi %r0,64 - clgrjl %r0,%r4,.Lloop64 -.Llt64: - vl %v16,0(%r5,%r2) - aghi %r5,16 - clgrjhe %r5,%r4,.Llastcmp /* Do last compare if curr-len >= n. */ - vfeebs %v17,%v16,%v18 /* Find c. */ - jl .Lfound /* Jump away if c was found. */ - - vl %v16,0(%r5,%r2) - aghi %r5,16 - clgrjhe %r5,%r4,.Llastcmp - vfeebs %v17,%v16,%v18 - jl .Lfound - - vl %v16,0(%r5,%r2) - aghi %r5,16 - clgrjhe %r5,%r4,.Llastcmp - vfeebs %v17,%v16,%v18 - jl .Lfound - - vl %v16,0(%r5,%r2) - aghi %r5,16 - -.Llastcmp: - /* Use comparision result only if located within first n characters. - %r5: current_len; - %r4: n; - (current_len - n): [0...16[ - first ignored match index: vr-width - (current_len - n) ]0...16] - */ - vfeebs %v17,%v16,%v18 /* Find c. */ - slgrk %r4,%r5,%r4 /* %r5 = current_len - n. */ - lghi %r0,16 /* Register width = 16. */ - vlgvb %r1,%v17,7 /* Extract found index or 16 if all equal. */ - slr %r0,%r4 /* %r0 = first ignored match index. */ - clrjl %r1,%r0,.Lfound2 /* Go away if miscompare is below n bytes. */ - /* c not found within n-bytes. */ -.Lnf_end: - lghi %r2,0 /* Return null. */ - br %r14 - -.Lfound48: - aghi %r5,16 -.Lfound32: - aghi %r5,16 -.Lfound16: - aghi %r5,16 -.Lfound0: - aghi %r5,16 -.Lfound: - vlgvb %r1,%v17,7 /* Load byte index of c. */ -.Lfound2: - slgfi %r5,16 /* current_len -=16 */ - algr %r5,%r1 /* Zero byte index is added to current len. */ - la %r2,0(%r5,%r2) /* Return pointer to c. */ - br %r14 - - -.Lloop64: - vl %v16,0(%r5,%r2) - vfeebs %v17,%v16,%v18 /* Find c. */ - jl .Lfound0 /* Jump away if c was found. */ - vl %v16,16(%r5,%r2) - vfeebs %v17,%v16,%v18 - jl .Lfound16 - vl %v16,32(%r5,%r2) - vfeebs %v17,%v16,%v18 - jl .Lfound32 - vl %v16,48(%r5,%r2) - vfeebs %v17,%v16,%v18 - jl .Lfound48 - - aghi %r5,64 - lgr %r0,%r5 /* If %r5 + 64 < n? -> loop64. */ - aghi %r0,64 - clgrjl %r0,%r4,.Lloop64 - - j .Llt64 -END(__memchr_vx) - -# define memchr __memchr_c -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) strong_alias(__memchr_c, __GI_memchr) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ - -#include diff --git a/sysdeps/s390/multiarch/memchr.c b/sysdeps/s390/multiarch/memchr.c deleted file mode 100644 index f0bf41f8e4..0000000000 --- a/sysdeps/s390/multiarch/memchr.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Multiple versions of memchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define memchr __redirect_memchr -# include -# undef memchr -# include - -s390_vx_libc_ifunc2_redirected (__redirect_memchr, __memchr, memchr) - -#endif diff --git a/sysdeps/s390/multiarch/mempcpy.c b/sysdeps/s390/multiarch/mempcpy.c deleted file mode 100644 index bf111a3aea..0000000000 --- a/sysdeps/s390/multiarch/mempcpy.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of mempcpy. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#if defined SHARED && IS_IN (libc) -# define mempcpy __redirect_mempcpy -# define __mempcpy __redirect___mempcpy -/* Omit the mempcpy inline definitions because it would redefine mempcpy. */ -# define _HAVE_STRING_ARCH_mempcpy 1 -# include -# undef mempcpy -# undef __mempcpy -# include - -s390_libc_ifunc (__redirect___mempcpy, ____mempcpy, __mempcpy) -weak_alias (__mempcpy, mempcpy); -#endif diff --git a/sysdeps/s390/multiarch/memrchr-c.c b/sysdeps/s390/multiarch/memrchr-c.c deleted file mode 100644 index 7382b7ff05..0000000000 --- a/sysdeps/s390/multiarch/memrchr-c.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Default memrchr implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define MEMRCHR __memrchr_c - -# include -extern __typeof (__memrchr) __memrchr_c; -# include -#endif diff --git a/sysdeps/s390/multiarch/memrchr-vx.S b/sysdeps/s390/multiarch/memrchr-vx.S deleted file mode 100644 index c6b0d34692..0000000000 --- a/sysdeps/s390/multiarch/memrchr-vx.S +++ /dev/null @@ -1,160 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of memrchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* void *memrchr (const void *s, int c, size_t n) - Scans memory for character c backwards - and returns pointer to first c. - - Register usage: - -r0=tmp - -r1=tmp - -r2=s - -r3=c - -r4=n - -r5=s in loop - - -v16=part of s - -v17=index of found c - -v18=c replicated - -v20=permute pattern -*/ -ENTRY(__memrchr_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r4,%r4 -# endif /* !defined __s390x__ */ - clgije %r4,0,.Lnot_found - - vlvgb %v18,%r3,0 /* Generate vector which elements are all c. - If c > 255, c will be truncated. */ - vrepb %v18,%v18,0 - - llcr %r3,%r3 /* char c_char = (char) c. */ - - /* check byte n - 1. */ - llc %r0,-1(%r4,%r2) - slgfi %r4,1 - clrje %r0,%r3,.Lfound_end - jh .Lnot_found /* Return NULL if n is now 0. */ - - larl %r1,.Lpermute_mask /* Load permute mask. */ - vl %v20,0(%r1) - - /* check byte n - 2. */ - llc %r0,-1(%r4,%r2) - slgfi %r4,1 - clrje %r0,%r3,.Lfound_end - jh .Lnot_found /* Return NULL if n is now 0. */ - - clgijhe %r4,64,.Lloop64 /* If n >= 64 -> loop64. */ - -.Llt64: - /* Process n < 64 bytes. */ - clgijl %r4,16,.Llt16 /* Jump away if n < 16. */ - aghi %r4,-16 - vl %v16,0(%r4,%r2) - vfeebs %v17,%v16,%v18 - jno .Lfound0 - clgijl %r4,16,.Llt16 - aghi %r4,-16 - vl %v16,0(%r4,%r2) - vfeebs %v17,%v16,%v18 - jno .Lfound0 - clgijl %r4,16,.Llt16 - aghi %r4,-16 - vl %v16,0(%r4,%r2) - vfeebs %v17,%v16,%v18 - jno .Lfound0 -.Llt16: - clgfi %r4,0 /* if remaining bytes == 0, return NULL. */ - locghie %r2,0 - ber %r14 - - aghi %r4,-1 /* vll needs highest index. */ - vll %v16,%r4,0(%r2) /* Load remaining bytes. */ - - /* Right-shift of v16 to mask bytes after highest index. */ - lhi %r0,15 - slr %r0,%r4 /* Compute byte count for vector shift right. */ - sll %r0,3 /* Convert to bit count. */ - vlvgb %v17,%r0,7 - vsrlb %v16,%v16,%v17 /* Vector shift right by byte by number of bytes - specified in bits 1-4 of byte 7 in v17. */ - j .Lfound_permute - -.Lfound48: - aghi %r4,16 -.Lfound32: - aghi %r4,16 -.Lfound16: - aghi %r4,16 -.Lfound0: - la %r2,0(%r4,%r2) /* Set pointer to start of v16. */ - lghi %r4,15 /* Set highest index in v16 to last index. */ -.Lfound_permute: - /* Search for a c in v16 in reversed byte order. v16 contains %r4 + 1 - bytes. If v16 was not fully loaded, the bytes are already - right shifted, so that the bytes in v16 can simply be reversed. */ - vperm %v16,%v16,%v16,%v20 /* Permute v16 to reversed order. */ - vfeeb %v16,%v16,%v18 /* Find c in reversed v16. */ - vlgvb %r1,%v16,7 /* Index of c or 16 if not found. */ - - /* Return NULL if there is no c in loaded bytes. */ - clrjh %r1,%r4,.Lnot_found - - slgr %r4,%r1 -.Lfound_end: - la %r2,0(%r4,%r2) /* Return pointer to c. */ - br %r14 - -.Lnot_found: - lghi %r2,0 - br %r14 - -.Lpermute_mask: - .byte 0x0F,0x0E,0x0D,0x0C,0x0B,0x0A,0x09,0x08 - .byte 0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00 - -.Lloop64: - aghi %r4,-64 - vl %v16,48(%r4,%r2) /* Load 16bytes of memory area. */ - vfeebs %v17,%v16,%v18 /* Find c. */ - jno .Lfound48 /* Jump away if c was found. */ - vl %v16,32(%r4,%r2) - vfeebs %v17,%v16,%v18 - jno .Lfound32 - vl %v16,16(%r4,%r2) - vfeebs %v17,%v16,%v18 - jno .Lfound16 - vl %v16,0(%r4,%r2) - vfeebs %v17,%v16,%v18 - jno .Lfound0 - - clgijhe %r4,64,.Lloop64 /* If n >= 64 -> loop64. */ - j .Llt64 -END(__memrchr_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/memrchr.c b/sysdeps/s390/multiarch/memrchr.c deleted file mode 100644 index 3a76c62376..0000000000 --- a/sysdeps/s390/multiarch/memrchr.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Multiple versions of memrchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc (__memrchr) -weak_alias (__memrchr, memrchr) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/rawmemchr-c.c b/sysdeps/s390/multiarch/rawmemchr-c.c deleted file mode 100644 index 12a64d338d..0000000000 --- a/sysdeps/s390/multiarch/rawmemchr-c.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Default rawmemchr implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include - -# define RAWMEMCHR __rawmemchr_c -# undef weak_alias -# define weak_alias(a, b) -# ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__rawmemchr_c, __GI___rawmemchr, __rawmemchr_c); -# endif /* SHARED */ - -extern __typeof (rawmemchr) __rawmemchr_c attribute_hidden; - -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/rawmemchr-vx.S b/sysdeps/s390/multiarch/rawmemchr-vx.S deleted file mode 100644 index e2ac9a88e1..0000000000 --- a/sysdeps/s390/multiarch/rawmemchr-vx.S +++ /dev/null @@ -1,92 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of rawmemchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* void *rawmemchr (const void *s, int c) - Scans memory for character c - and returns pointer to first c. - - Register usage: - -r1=tmp - -r2=s - -r3=c - -r4=tmp - -r5=current_len - -v16=part of s - -v17=index of unequal - -v18=c replicated -*/ -ENTRY(__rawmemchr_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - vlvgb %v18,%r3,0 /* Generate vector which elements are all c. - If c > 255, c will be truncated. */ - vrepb %v18,%v18,0 - - vfeeb %v17,%v16,%v18 /* Vector find element equal. */ - vlgvb %r5,%v17,7 /* Load byte index of character or zero. */ - clrjl %r5,%r1,.Lend_found /* If found c is in loaded bytes, end. */ - - /* Align s to 16 byte. */ - risbgn %r1,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 - slr %r5,%r1 /* Compute bytes to 16bytes boundary. */ - - /* Find c in a 16byte aligned loop. */ -.Lloop: - vl %v16,0(%r5,%r2) /* Load s. */ - vfeebs %v17,%v16,%v18 /* Vector find element equal. */ - jno .Lcharacter /* Jump away if element found. */ - vl %v16,16(%r5,%r2) - vfeebs %v17,%v16,%v18 - jno .Lcharacter16 - vl %v16,32(%r5,%r2) - vfeebs %v17,%v16,%v18 - jno .Lcharacter32 - vl %v16,48(%r5,%r2) - vfeebs %v17,%v16,%v18 - jno .Lcharacter48 - - aghi %r5,64 - j .Lloop /* No character found -> loop. */ - - /* Found character. */ -.Lcharacter48: - aghi %r5,16 -.Lcharacter32: - aghi %r5,16 -.Lcharacter16: - aghi %r5,16 -.Lcharacter: - vlgvb %r1,%v17,7 /* Load byte index of character. */ - algr %r5,%r1 -.Lend_found: - la %r2,0(%r5,%r2) /* Return pointer to character. */ - br %r14 -END(__rawmemchr_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/rawmemchr.c b/sysdeps/s390/multiarch/rawmemchr.c deleted file mode 100644 index 74b0accb33..0000000000 --- a/sysdeps/s390/multiarch/rawmemchr.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Multiple versions of rawmemchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define __rawmemchr __redirect___rawmemchr -# include -# undef __rawmemchr -# include - -s390_vx_libc_ifunc2_redirected (__redirect___rawmemchr, __rawmemchr - , __rawmemchr) -weak_alias (__rawmemchr, rawmemchr) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/stpcpy-c.c b/sysdeps/s390/multiarch/stpcpy-c.c deleted file mode 100644 index 3818cfc24a..0000000000 --- a/sysdeps/s390/multiarch/stpcpy-c.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Default stpcpy implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define STPCPY __stpcpy_c -# undef weak_alias -# define weak_alias(a, b) -# ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__stpcpy_c, __GI___stpcpy, __stpcpy_c); -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - strong_alias (__stpcpy_c, __stpcpy_c_1); \ - __hidden_ver1 (__stpcpy_c_1, __GI_stpcpy, __stpcpy_c_1); -# endif /* SHARED */ - - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/stpcpy-vx.S b/sysdeps/s390/multiarch/stpcpy-vx.S deleted file mode 100644 index a9e5be2e68..0000000000 --- a/sysdeps/s390/multiarch/stpcpy-vx.S +++ /dev/null @@ -1,104 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of stpcpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* char * stpcpy (const char *dest, const char *src) - Copy string src to dest returning a pointer to its end. - - Register usage: - -r1=tmp - -r2=dest and return value - -r3=src - -r4=tmp - -r5=current_len - -v16=part of src - -v17=index of zero - -v18=part of src -*/ -ENTRY(__stpcpy_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - vlbb %v16,0(%r3),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r3),6 /* Get bytes to 4k-byte boundary or 16. */ - - vfenezb %v17,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r5,%v17,7 /* Load zero index or 16 if not found. */ - clrjl %r5,%r1,.Lfound_align /* If found zero within loaded bytes, - copy bytes before and return. */ - - /* Align s to 16 byte. */ - risbgn %r4,%r3,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,15 /* current_len = 15. */ - slr %r5,%r4 /* Compute highest index to 16byte boundary. */ - - vstl %v16,%r5,0(%r2) /* Copy loaded characters - no zero. */ - ahi %r5,1 /* Start loop at next character. */ - - /* Find zero in 16byte aligned loop. */ -.Lloop: - vl %v16,0(%r5,%r3) /* Load s. */ - vfenezbs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound_v16_0 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Store previous part without zero to dst. */ - vfenezbs %v17,%v18,%v18 - je .Lfound_v18_16 - vl %v16,32(%r5,%r3) - vst %v18,16(%r5,%r2) - vfenezbs %v17,%v16,%v16 - je .Lfound_v16_32 - vl %v18,48(%r5,%r3) - vst %v16,32(%r5,%r2) - vfenezbs %v17,%v18,%v18 - je .Lfound_v18_48 - vst %v18,48(%r5,%r2) - - aghi %r5,64 - j .Lloop /* No zero found -> loop. */ - -.Lfound_v16_32: - aghi %r5,32 -.Lfound_v16_0: - la %r3,0(%r5,%r2) - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - vstl %v16,%r1,0(%r3) /* Copy characters including zero. */ - la %r2,0(%r1,%r3) /* Return pointer to zero. */ - br %r14 - -.Lfound_v18_48: - aghi %r5,32 -.Lfound_v18_16: - la %r3,16(%r5,%r2) - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - vstl %v18,%r1,0(%r3) /* Copy characters including zero. */ - la %r2,0(%r1,%r3) /* Return pointer to zero. */ - br %r14 - -.Lfound_align: - vstl %v16,%r5,0(%r2) /* Copy characters including zero. */ - la %r2,0(%r5,%r2) /* Return pointer to zero. */ - br %r14 -END(__stpcpy_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/stpcpy.c b/sysdeps/s390/multiarch/stpcpy.c deleted file mode 100644 index 611cf0765e..0000000000 --- a/sysdeps/s390/multiarch/stpcpy.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Multiple versions of stpcpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define stpcpy __redirect_stpcpy -# define __stpcpy __redirect___stpcpy -/* Omit the stpcpy inline definitions because it would redefine stpcpy. */ -# define __NO_STRING_INLINES -# define NO_MEMPCPY_STPCPY_REDIRECT -# include -# undef stpcpy -# undef __stpcpy -# include - -s390_vx_libc_ifunc_redirected (__redirect___stpcpy, __stpcpy); -weak_alias (__stpcpy, stpcpy) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/stpncpy-c.c b/sysdeps/s390/multiarch/stpncpy-c.c deleted file mode 100644 index 95efa38895..0000000000 --- a/sysdeps/s390/multiarch/stpncpy-c.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Default stpncpy implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define STPNCPY __stpncpy_c -# ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__stpncpy_c, __GI___stpncpy, __stpncpy_c); -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/stpncpy-vx.S b/sysdeps/s390/multiarch/stpncpy-vx.S deleted file mode 100644 index 869e8f7aef..0000000000 --- a/sysdeps/s390/multiarch/stpncpy-vx.S +++ /dev/null @@ -1,200 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of stpncpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* char * stpncpy (char *dest, const char *src, size_t n) - Copies at most n characters of string src to dest - returning a pointer to its end or dest+n - if src is smaller than n. - - Register usage: - -%r0 = return value - -%r1 = zero byte index - -%r2 = curr dst pointer - -%r3 = curr src pointer - -%r4 = n - -%r5 = current_len - -%r6 = loaded bytes - -%r7 = border, tmp -*/ -ENTRY(__stpncpy_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r4,%r4 -# endif /* !defined __s390x__ */ - - clgfi %r4,0 - ber %r14 /* Nothing to do, if n == 0. */ - - la %r0,0(%r4,%r2) /* Save destination pointer + n for return. */ - vlvgp %v31,%r6,%r7 /* Save registers. */ - - vlbb %v16,0(%r3),6 /* Load s until next 4k-byte boundary. */ - lcbb %r6,0(%r3),6 /* Get bytes to 4k-byte boundary or 16. */ - llgfr %r6,%r6 /* Convert 32bit to 64bit. */ - - lghi %r5,0 /* current_len = 0. */ - - clgrjle %r4,%r6,.Lremaining_v16 /* If n <= loaded-bytes - -> process remaining. */ - - /* n > loaded-byte-count */ - vfenezb %v17,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r1,%v17,7 /* Load zero index or 16 if not found. */ - clrjl %r1,%r6,.Lfound_v16_store /* Found zero within loaded bytes, - copy and return. */ - - /* Align s to 16 byte. */ - risbgn %r7,%r3,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,15 /* current_len = 15. */ - slr %r5,%r7 /* Compute highest index to 16byte boundary. */ - - /* Zero not found and n > loaded-byte-count. */ - vstl %v16,%r5,0(%r2) /* Copy loaded characters - no zero. */ - ahi %r5,1 /* Start loop at next character. */ - - /* Now we are 16byte aligned, so we can load a full vreg - without page fault. */ - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r4,.Lloop64 - - vl %v16,0(%r5,%r3) /* Load s. */ - clgijl %r4,17,.Lremaining_v16 /* If n <= 16, process remaining - bytes. */ -.Llt64: - lgr %r7,%r4 - slgfi %r7,16 /* border_len = n - 16. */ - - clgrjhe %r5,%r7,.Lremaining_v16 /* If current_len >= border - then process remaining bytes. */ - vfenezbs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound_v16 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Save previous part without zero to dst. */ - aghi %r5,16 - - clgrjhe %r5,%r7,.Lremaining_v18 - vfenezbs %v17,%v18,%v18 - je .Lfound_v18 - vl %v16,16(%r5,%r3) - vst %v18,0(%r5,%r2) - aghi %r5,16 - - clgrjhe %r5,%r7,.Lremaining_v16 - vfenezbs %v17,%v16,%v16 - je .Lfound_v16 - vl %v18,16(%r5,%r3) - vst %v16,0(%r5,%r2) - aghi %r5,16 - -.Lremaining_v18: - vlr %v16,%v18 -.Lremaining_v16: - /* v16 contains the remaining bytes [1...16]. - Store remaining bytes and append string-termination. */ - vfenezb %v17,%v16,%v16 /* Find element not equal with zero search. */ - slgrk %r7,%r4,%r5 /* Remaining bytes = maxlen - current_len */ - aghi %r7,-1 /* vstl needs highest index. */ - la %r2,0(%r5,%r2) /* vstl has no index register. */ - vlgvb %r1,%v17,7 /* Load zero index or 16 if not found. */ - /* Zero in remaining bytes? -> jump away (zero-index <= max-index). */ - clrjle %r1,%r7,.Lfound_v16_store - vstl %v16,%r7,0(%r2) /* Store remaining bytes without null - termination! */ -.Lend: - /* Restore saved registers. */ - vlgvg %r6,%v31,0 - vlgvg %r7,%v31,1 - lgr %r2,%r0 /* Load saved dest-ptr. */ - br %r14 - -.Lfound_v16_32: - aghi %r5,32 - j .Lfound_v16 -.Lfound_v18_48: - aghi %r5,32 -.Lfound_v18_16: - aghi %r5,16 -.Lfound_v18: - vlr %v16,%v18 -.Lfound_v16: - /* v16 contains a zero. Store remaining bytes to zero. current_len - has not reached border, thus checking for n is not needed! */ - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - la %r2,0(%r5,%r2) /* vstl has no support for index-register. */ -.Lfound_v16_store: - vstl %v16,%r1,0(%r2) /* Copy characters including zero. */ - /* Fill remaining bytes with zero - remaining count always > 0. */ - algr %r5,%r1 /* Remaining bytes (=%r4) = ... */ - slgr %r4,%r5 /* = maxlen - (currlen + zero_index + 1) */ - la %r2,0(%r1,%r2) /* Pointer to zero. start filling beyond. */ - lgr %r0,%r2 /* Save return-pointer to found zero. */ - clgije %r4,1,.Lend /* Skip zero-filling, if found zero is last - possible character. - (1 is substracted from r4 below!). */ - aghi %r4,-2 /* mvc with exrl needs count - 1. - (additional -1, see remaining bytes above) */ - srlg %r6,%r4,8 /* Split into 256 byte blocks. */ - ltgr %r6,%r6 - je .Lzero_lt256 -.Lzero_loop256: - mvc 1(256,%r2),0(%r2) /* Fill 256 zeros at once. */ - la %r2,256(%r2) - brctg %r6,.Lzero_loop256 /* Loop until all blocks are processed. */ -.Lzero_lt256: - exrl %r4,.Lmvc_lt256 - j .Lend -.Lmvc_lt256: - mvc 1(1,%r2),0(%r2) - -.Lloop64: - vl %v16,0(%r5,%r3) - vfenezbs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound_v16 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Save previous part without zero to dst. */ - vfenezbs %v17,%v18,%v18 - je .Lfound_v18_16 - vl %v16,32(%r5,%r3) - vst %v18,16(%r5,%r2) - vfenezbs %v17,%v16,%v16 - je .Lfound_v16_32 - vl %v18,48(%r5,%r3) - vst %v16,32(%r5,%r2) - vfenezbs %v17,%v18,%v18 - je .Lfound_v18_48 - vst %v18,48(%r5,%r2) - - aghi %r5,64 - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r4,.Lloop64 - - vl %v16,0(%r5,%r3) /* Load s. */ - j .Llt64 -END(__stpncpy_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/stpncpy.c b/sysdeps/s390/multiarch/stpncpy.c deleted file mode 100644 index 74f5ddc25e..0000000000 --- a/sysdeps/s390/multiarch/stpncpy.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of stpncpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define stpncpy __redirect_stpncpy -# define __stpncpy __redirect___stpncpy -# include -# undef stpncpy -# undef __stpncpy -# include - -s390_vx_libc_ifunc_redirected (__redirect___stpncpy, __stpncpy) -weak_alias (__stpncpy, stpncpy) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/strcat-c.c b/sysdeps/s390/multiarch/strcat-c.c deleted file mode 100644 index 0b88c1fc28..0000000000 --- a/sysdeps/s390/multiarch/strcat-c.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Default strcat implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define STRCAT __strcat_c -# ifdef SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strcat_c, __GI_strcat, __strcat_c); -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strcat-vx.S b/sysdeps/s390/multiarch/strcat-vx.S deleted file mode 100644 index 65c19c21c8..0000000000 --- a/sysdeps/s390/multiarch/strcat-vx.S +++ /dev/null @@ -1,161 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of strcat. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* char * strcat (const char *dest, const char *src) - Concatenate two strings. - - Register usage: - -r0=saved dest pointer for return - -r1=tmp - -r2=dest - -r3=src - -r4=tmp - -r5=current_len - -v16=part of src - -v17=index of zero - -v18=part of src -*/ -ENTRY(__strcat_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - lgr %r0,%r2 /* Save destination pointer for return. */ - - /* STRLEN - r1 = loaded bytes (tmp) - r4 = zero byte index (tmp) - r2 = dst - */ - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - vfenezb %v16,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r5,%v16,7 /* Load zero index or 16 if not found. */ - clrjl %r5,%r1,.Llen_end /* Found zero within loaded bytes, end. */ - - /* Align s to 16 byte. */ - risbgn %r1,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 /* current_len = 16. */ - slr %r5,%r1 /* Compute bytes to 16bytes boundary. */ - - /* Find zero in 16byte aligned loop. */ -.Llen_loop: - vl %v16,0(%r5,%r2) /* Load s. */ - vfenezbs %v16,%v16,%v16 /* Find element not equal with zero search. */ - je .Llen_found /* Jump away if zero was found. */ - vl %v16,16(%r5,%r2) - vfenezbs %v16,%v16,%v16 - je .Llen_found16 - vl %v16,32(%r5,%r2) - vfenezbs %v16,%v16,%v16 - je .Llen_found32 - vl %v16,48(%r5,%r2) - vfenezbs %v16,%v16,%v16 - je .Llen_found48 - - aghi %r5,64 - j .Llen_loop /* No zero -> loop. */ - -.Llen_found48: - aghi %r5,16 -.Llen_found32: - aghi %r5,16 -.Llen_found16: - aghi %r5,16 -.Llen_found: - vlgvb %r4,%v16,7 /* Load byte index of zero. */ - algr %r5,%r4 - -.Llen_end: - /* STRCPY - %r1 = loaded bytes (tmp) - %r4 = zero byte index (tmp) - %r3 = curr src pointer - %r2 = curr dst pointer - */ - la %r2,0(%r5,%r2) /* strcpy at end of dst-string. */ - - vlbb %v16,0(%r3),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r3),6 /* Get bytes to 4k-byte boundary or 16. */ - - vfenezb %v17,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r5,%v17,7 /* Load zero index or 16 if not found. */ - clrjl %r5,%r1,.Lcpy_found_align /* If found zero within loaded bytes, - copy bytes before and return. */ - - /* Align s to 16 byte. */ - risbgn %r4,%r3,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,15 /* current_len = 15. */ - slr %r5,%r4 /* Compute highest index to 16byte boundary. */ - - vstl %v16,%r5,0(%r2) /* Copy loaded characters - no zero. */ - ahi %r5,1 /* Start loop at next character. */ - - /* Find zero in 16byte aligned loop. */ -.Lcpy_loop: - vl %v16,0(%r5,%r3) /* Load s. */ - vfenezbs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lcpy_found_v16_0 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3)/* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Store previous part without zero to dst. */ - vfenezbs %v17,%v18,%v18 - je .Lcpy_found_v18_16 - vl %v16,32(%r5,%r3) - vst %v18,16(%r5,%r2) - vfenezbs %v17,%v16,%v16 - je .Lcpy_found_v16_32 - vl %v18,48(%r5,%r3) - vst %v16,32(%r5,%r2) - vfenezbs %v17,%v18,%v18 - je .Lcpy_found_v18_48 - vst %v18,48(%r5,%r2) - - aghi %r5,64 - j .Lcpy_loop /* No zero -> loop. */ - -.Lcpy_found_v16_32: - aghi %r5,32 -.Lcpy_found_v16_0: - la %r4,0(%r5,%r2) - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - vstl %v16,%r1,0(%r4) /* Copy characters including zero. */ - lgr %r2,%r0 /* Load saved dest-ptr. */ - br %r14 - -.Lcpy_found_v18_48: - aghi %r5,32 -.Lcpy_found_v18_16: - la %r4,16(%r5,%r2) - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - vstl %v18,%r1,0(%r4) /* Copy characters including zero. */ - lgr %r2,%r0 /* Load saved dest-ptr. */ - br %r14 - -.Lcpy_found_align: - vstl %v16,%r5,0(%r2) /* Copy characters including zero. */ - lgr %r2,%r0 /* Load saved dest-ptr. */ - br %r14 -END(__strcat_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strcat.c b/sysdeps/s390/multiarch/strcat.c deleted file mode 100644 index d1c5d4c55e..0000000000 --- a/sysdeps/s390/multiarch/strcat.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Multiple versions of strcat. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define strcat __redirect_strcat -# include -# undef strcat -# include - -s390_vx_libc_ifunc2_redirected (__redirect_strcat, __strcat, strcat) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/strchr-c.c b/sysdeps/s390/multiarch/strchr-c.c deleted file mode 100644 index 636d8dd016..0000000000 --- a/sysdeps/s390/multiarch/strchr-c.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Default strchr implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define STRCHR __strchr_c -# undef weak_alias -# ifdef SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strchr_c, __GI_strchr, __strchr_c); -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strchr-vx.S b/sysdeps/s390/multiarch/strchr-vx.S deleted file mode 100644 index bd2109bc05..0000000000 --- a/sysdeps/s390/multiarch/strchr-vx.S +++ /dev/null @@ -1,100 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of strchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* char *strchr (const char *s, int c) - Locate character in string. - - Register usage: - -r1=tmp - -r2=s - -r3=c - -r4=tmp - -r5=current_len - -v16=part of s - -v17=index of unequal - -v18=replicated c -*/ -ENTRY(__strchr_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - lghi %r5,0 /* current_len = 0. */ - - vlvgb %v18,%r3,0 /* Generate vector which elements are all c. - If c > 255, c will be truncated. */ - vrepb %v18,%v18,0 - - vfeezbs %v16,%v16,%v18 /* Find element equal with zero search. */ - vlgvb %r4,%v16,7 /* Load byte index of character or zero. */ - clrjl %r4,%r1,.Lfound /* Return if c/zero is in loaded bytes. */ - - /* Align s to 16 byte. */ - risbgn %r4,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 /* current_len = 16. */ - slr %r5,%r4 /* Compute bytes to 16bytes boundary. */ - - /* Find c/zero in 16 byte aligned loop */ -.Lloop: - vl %v16,0(%r5,%r2) /* Load s. */ - vfeezbs %v16,%v16,%v18 /* Find element equal with zero search. */ - jno .Lfound /* Found c/zero (cc=0|1|2). */ - vl %v16,16(%r5,%r2) - vfeezbs %v16,%v16,%v18 - jno .Lfound16 - vl %v16,32(%r5,%r2) - vfeezbs %v16,%v16,%v18 - jno .Lfound32 - vl %v16,48(%r5,%r2) - vfeezbs %v16,%v16,%v18 - jno .Lfound48 - - aghi %r5,64 - j .Lloop /* No character and no zero -> loop. */ - -.Lfound48: - la %r5,16(%r5) /* Use la since aghi would clobber cc. */ -.Lfound32: - la %r5,16(%r5) -.Lfound16: - la %r5,16(%r5) -.Lfound: - je .Lzero /* Found zero, but no c before that zero. */ - -.Lcharacter: - vlgvb %r4,%v16,7 /* Load byte index of character. */ - algr %r5,%r4 - la %r2,0(%r5,%r2) /* Return pointer to character. */ - br %r14 - -.Lzero: - llgcr %r3,%r3 /* char c_char = (char) c. */ - clije %r3,0,.Lcharacter /* Found zero and c is zero. */ - lghi %r2,0 /* Return null if character not found. */ - br %r14 -END(__strchr_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strchr.c b/sysdeps/s390/multiarch/strchr.c deleted file mode 100644 index 3df90aff14..0000000000 --- a/sysdeps/s390/multiarch/strchr.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of strchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define strchr __redirect_strchr -/* Omit the strchr inline definitions because it would redefine strchr. */ -# define __NO_STRING_INLINES -# include -# undef strchr -# include - -s390_vx_libc_ifunc2_redirected (__redirect_strchr, __strchr, strchr) -weak_alias (strchr, index) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/strchrnul-c.c b/sysdeps/s390/multiarch/strchrnul-c.c deleted file mode 100644 index cd43d3a450..0000000000 --- a/sysdeps/s390/multiarch/strchrnul-c.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Default strchrnul implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define STRCHRNUL __strchrnul_c -# define __strchrnul STRCHRNUL -# undef weak_alias -# define weak_alias(name, alias) - -# include -#endif diff --git a/sysdeps/s390/multiarch/strchrnul-vx.S b/sysdeps/s390/multiarch/strchrnul-vx.S deleted file mode 100644 index cfc8cbf6e9..0000000000 --- a/sysdeps/s390/multiarch/strchrnul-vx.S +++ /dev/null @@ -1,93 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of strchrnul. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* char *strchrnul (const char *s, int c) - Returns pointer to first c or to \0 if c not found. - - Register usage: - -r1=tmp - -r2=s and return pointer - -r3=c - -r4=tmp - -r5=current_len - -v16=part of s - -v18=vector with c replicated in every byte -*/ -ENTRY(__strchrnul_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - lghi %r5,0 /* current_len = 0. */ - - vlvgb %v18,%r3,0 /* Generate vector which elements are all c. - If c > 255, c will be truncated. */ - vrepb %v18,%v18,0 - - vfeezbs %v16,%v16,%v18 /* Find element equal with zero search. */ - vlgvb %r4,%v16,7 /* Load byte index of character or zero. */ - clrjl %r4,%r1,.Lfound /* Return if c/zero is in loaded bytes. */ - - /* Align s to 16 byte. */ - risbgn %r4,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 /* current_len = 16. */ - slr %r5,%r4 /* Compute bytes to 16bytes boundary. */ - - /* Find c/zero in 16byte aligned loop */ -.Lloop: - vl %v16,0(%r5,%r2) /* Load s */ - vfeezbs %v16,%v16,%v18 /* Find element equal with zero search. */ - jno .Lfound /* Found c/zero (cc=0|1|2). */ - vl %v16,16(%r5,%r2) - vfeezbs %v16,%v16,%v18 - jno .Lfound16 - vl %v16,32(%r5,%r2) - vfeezbs %v16,%v16,%v18 - jno .Lfound32 - vl %v16,48(%r5,%r2) - vfeezbs %v16,%v16,%v18 - jno .Lfound48 - - aghi %r5,64 - j .Lloop /* No character and no zero -> loop. */ - - /* Found character or zero */ -.Lfound48: - aghi %r5,16 -.Lfound32: - aghi %r5,16 -.Lfound16: - aghi %r5,16 -.Lfound: - vlgvb %r1,%v16,7 /* Load byte index of character. */ - algr %r5,%r1 - la %r2,0(%r5,%r2) /* Return pointer to character. */ - -.Lend: - br %r14 -END(__strchrnul_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strchrnul.c b/sysdeps/s390/multiarch/strchrnul.c deleted file mode 100644 index 9447523f25..0000000000 --- a/sysdeps/s390/multiarch/strchrnul.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Multiple versions of strchrnul. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc (__strchrnul) -weak_alias (__strchrnul, strchrnul) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/strcmp-vx.S b/sysdeps/s390/multiarch/strcmp-vx.S deleted file mode 100644 index 640e4d6b4c..0000000000 --- a/sysdeps/s390/multiarch/strcmp-vx.S +++ /dev/null @@ -1,116 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of strcmp. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* int strcmp (const char *s1, const char *s2) - Compare two strings - - Register usage: - -r1=loaded byte count s1 - -r2=s1 - -r3=s2 - -r4=loaded byte coutn s2, tmp - -r5=current_len - -v16=part of s1 - -v17=part of s2 - -v18=index of unequal -*/ -ENTRY(__strcmp_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - lghi %r5,0 /* current_len = 0. */ - -.Lloop: - vlbb %v16,0(%r5,%r2),6 /* Load s1 to block boundary. */ - vlbb %v17,0(%r5,%r3),6 /* Load s2 to block boundary. */ - lcbb %r1,0(%r5,%r2),6 /* Get loaded byte count of s1. */ - jo .Llt16_1 /* Jump away if vr is not fully loaded. */ - lcbb %r4,0(%r5,%r3),6 - jo .Llt16_2 /* Jump away if vr is not fully loaded. */ - /* Both vrs are fully loaded. */ - aghi %r5,16 - vfenezbs %v18,%v16,%v17 /* Compare not equal with zero search. */ - jno .Lfound - - vlbb %v16,0(%r5,%r2),6 - vlbb %v17,0(%r5,%r3),6 - lcbb %r1,0(%r5,%r2),6 - jo .Llt16_1 - lcbb %r4,0(%r5,%r3),6 - jo .Llt16_2 - aghi %r5,16 - vfenezbs %v18,%v16,%v17 - jno .Lfound - - vlbb %v16,0(%r5,%r2),6 - vlbb %v17,0(%r5,%r3),6 - lcbb %r1,0(%r5,%r2),6 - jo .Llt16_1 - lcbb %r4,0(%r5,%r3),6 - jo .Llt16_2 - aghi %r5,16 - vfenezbs %v18,%v16,%v17 - jno .Lfound - - vlbb %v16,0(%r5,%r2),6 - vlbb %v17,0(%r5,%r3),6 - lcbb %r1,0(%r5,%r2),6 - jo .Llt16_1 - lcbb %r4,0(%r5,%r3),6 - jo .Llt16_2 - aghi %r5,16 - vfenezbs %v18,%v16,%v17 - jno .Lfound - j .Lloop - -.Llt16_1: - lcbb %r4,0(%r5,%r3),6 /* Get loaded byte count of s2. */ -.Llt16_2: - clr %r1,%r4 - locrh %r1,%r4 /* Get minimum of bytes loaded in s1/2. */ - algfr %r5,%r1 /* Add smallest loaded bytes to current_len. */ - vfenezbs %v18,%v16,%v17 /* Compare not equal with zero search. */ - vlgvb %r4,%v18,7 /* Get not equal index or 16 if all equal. */ - clrjl %r4,%r1,.Lfound /* Jump away if miscompare is within loaded - bytes. */ - j .Lloop - -.Lfound: - je .Lend_equal - lghi %r2,1 - lghi %r1,-1 - locgrl %r2,%r1 - br %r14 -.Lend_equal: - lghi %r2,0 - br %r14 -END(__strcmp_vx) - -# define strcmp __strcmp_c -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) strong_alias(__strcmp_c, __GI_strcmp) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ - -#include diff --git a/sysdeps/s390/multiarch/strcmp.c b/sysdeps/s390/multiarch/strcmp.c deleted file mode 100644 index 19e6d02597..0000000000 --- a/sysdeps/s390/multiarch/strcmp.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Multiple versions of strcmp. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define strcmp __redirect_strcmp -/* Omit the strcmp inline definitions because it would redefine strcmp. */ -# define __NO_STRING_INLINES -# include -# include -# undef strcmp - -s390_vx_libc_ifunc2_redirected (__redirect_strcmp, __strcmp, strcmp) - -#endif diff --git a/sysdeps/s390/multiarch/strcpy-vx.S b/sysdeps/s390/multiarch/strcpy-vx.S deleted file mode 100644 index 1ae9860a01..0000000000 --- a/sysdeps/s390/multiarch/strcpy-vx.S +++ /dev/null @@ -1,109 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of strcpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* char * strcpy (const char *dest, const char *src) - Copy string src to dest. - - Register usage: - -r1=tmp - -r2=dest and return_value - -r3=src - -r4=tmp - -r5=current_len - -v16=part of src - -v17=index of zero - -v18=part of src -*/ -ENTRY(__strcpy_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - vlbb %v16,0(%r3),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r3),6 /* Get bytes to 4k-byte boundary or 16. */ - - vfenezb %v17,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r5,%v17,7 /* Load zero index or 16 if not found. */ - clrjl %r5,%r1,.Lfound_align /* If found zero within loaded bytes, - copy bytes before and return. */ - - /* Align s to 16 byte. */ - risbgn %r4,%r3,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,15 /* current_len = 15. */ - slr %r5,%r4 /* Compute highest index to 16byte boundary. */ - - vstl %v16,%r5,0(%r2) /* Copy loaded characters - no zero. */ - ahi %r5,1 /* Start loop at next character. */ - - /* Find zero in 16byte aligned loop. */ -.Lloop: - vl %v16,0(%r5,%r3) /* Load s. */ - vfenezbs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound_v16_0 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3)/* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Store previous part without zero to dst. */ - vfenezbs %v17,%v18,%v18 - je .Lfound_v18_16 - vl %v16,32(%r5,%r3) - vst %v18,16(%r5,%r2) - vfenezbs %v17,%v16,%v16 - je .Lfound_v16_32 - vl %v18,48(%r5,%r3) - vst %v16,32(%r5,%r2) - vfenezbs %v17,%v18,%v18 - je .Lfound_v18_48 - vst %v18,48(%r5,%r2) - - aghi %r5,64 - j .Lloop /* No zero found -> loop. */ - -.Lfound_v16_32: - aghi %r5,32 -.Lfound_v16_0: - la %r3,0(%r5,%r2) - vlgvb %r4,%v17,7 /* Load byte index of zero. */ - vstl %v16,%r4,0(%r3) /* Store characters including zero. */ - br %r14 - -.Lfound_v18_48: - aghi %r5,32 -.Lfound_v18_16: - la %r3,16(%r5,%r2) - vlgvb %r4,%v17,7 /* Load byte index of zero. */ - vstl %v18,%r4,0(%r3) /* Store characters including zero. */ - br %r14 - -.Lfound_align: - vstl %v16,%r5,0(%r2) /* Copy characters including zero. */ - br %r14 -END(__strcpy_vx) - -/* Use mvst-strcpy-implementation as default implementation. */ -# define strcpy __strcpy_c -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) strong_alias(__strcpy_c, __GI_strcpy) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ - -/* Include mvst-strcpy-implementation in s390-32/s390-64 subdirectory. */ -#include diff --git a/sysdeps/s390/multiarch/strcpy.c b/sysdeps/s390/multiarch/strcpy.c deleted file mode 100644 index 5a5107690b..0000000000 --- a/sysdeps/s390/multiarch/strcpy.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Multiple versions of strcpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define strcpy __redirect_strcpy -# include -# undef strcpy -# include - -s390_vx_libc_ifunc2_redirected (__redirect_strcpy, __strcpy, strcpy) - -#endif diff --git a/sysdeps/s390/multiarch/strcspn-c.c b/sysdeps/s390/multiarch/strcspn-c.c deleted file mode 100644 index f67e30d031..0000000000 --- a/sysdeps/s390/multiarch/strcspn-c.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Default strcspn implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define STRCSPN __strcspn_c -# ifdef SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strcspn_c, __GI_strcspn, __strcspn_c); -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strcspn-vx.S b/sysdeps/s390/multiarch/strcspn-vx.S deleted file mode 100644 index 840d94ab10..0000000000 --- a/sysdeps/s390/multiarch/strcspn-vx.S +++ /dev/null @@ -1,281 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of strcspn. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* size_t strcspn (const char *s, const char * reject) - The strcspn() function calculates the length of the initial segment - of s which consists entirely of characters not in reject. - - This method checks the length of reject string. If it fits entirely - in one vector register, a fast algorithm is used, which does not need - to check multiple parts of accept-string. Otherwise a slower full - check of accept-string is used. - - register overview: - r3: pointer to start of reject-string - r2: pointer to start of search-string - r0: loaded byte count of vlbb search-string - r4: found byte index - r1: current return len - v16: search-string - v17: reject-string - v18: temp-vreg - - ONLY FOR SLOW: - v19: first reject-string - v20: zero for preparing acc-vector - v21: global mask; 1 indicates a match between - search-string-vreg and any reject-character - v22: current mask; 1 indicates a match between - search-string-vreg and any reject-character in current acc-vreg - v24: one for result-checking of former string-part - v30, v31: for re-/storing registers r6, r8, r9 - r5: current len of reject-string - r6: zero-index in search-string or 16 if no zero - or min(zero-index, loaded byte count) - r8: >0, if former reject-string-part contains a zero, - otherwise =0; - r9: loaded byte count of vlbb reject-string -*/ -ENTRY(__strcspn_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - /* - Check if reject-string fits in one vreg: - ---------------------------------------- - */ - vlbb %v17,0(%r3),6 /* Load reject. */ - lghi %r1,0 /* Zero out current len. */ - lcbb %r0,0(%r3),6 - jo .Lcheck_onbb /* Special case if reject - lays on block-boundary. */ -.Lcheck_notonbb: - vistrbs %v17,%v17 /* Fill with zeros after first zero. */ - je .Lfast /* Zero found -> reject fits in one vreg. */ - j .Lslow /* No zero -> reject exceeds one vreg. */ - - -.Lcheck_onbb: - /* Reject lays on block-boundary. */ - vfenezb %v18,%v17,%v17 /* Search zero in loaded reject bytes. */ - vlgvb %r4,%v18,7 /* Get index of zero or 16 if not found. */ - clrjl %r4,%r0,.Lcheck_notonbb /* Zero index < loaded bytes count -> - Reject fits in one vreg; - Fill with zeros and proceed - with FAST. */ - vl %v17,0(%r3) /* Load reject, which exceeds loaded bytes. */ - j .Lcheck_notonbb /* Check if reject fits in one vreg. */ - - - /* - Search s for reject in one vreg - ------------------------------- - */ -.Lfast: - /* Complete reject-string in v17 and remaining bytes are zero. */ - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r0,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - vfaezbs %v18,%v16,%v17,0 /* Find first element in v16 - unequal to any in v17 - or first zero element. */ - - vlgvb %r4,%v18,7 /* Load byte index of found element. */ - clrjl %r4,%r0,.Lfast_loop_found2 /* If found index is within loaded - bytes, return with found element - index (=equal count). */ - - /* Align s to 16 byte. */ - risbgn %r4,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r1,16 /* current_len = 16. */ - slr %r1,%r4 /* Compute bytes to 16bytes boundary. */ - - /* Process s in 16byte aligned loop. */ -.Lfast_loop: - vl %v16,0(%r1,%r2) /* Load search-string. */ - vfaezbs %v18,%v16,%v17,0 /* Find first element in v16 equal to any - in v17 or first zero element. */ - jno .Lfast_loop_found - - vl %v16,16(%r1,%r2) - vfaezbs %v18,%v16,%v17,0 - jno .Lfast_loop_found16 - - vl %v16,32(%r1,%r2) - vfaezbs %v18,%v16,%v17,0 - jno .Lfast_loop_found32 - - vl %v16,48(%r1,%r2) - vfaezbs %v18,%v16,%v17,0 - jno .Lfast_loop_found48 - - aghi %r1,64 - j .Lfast_loop /* Loop if no element was unequal to reject - and not zero. */ - - /* Found equal or zero element. */ -.Lfast_loop_found48: - aghi %r1,16 -.Lfast_loop_found32: - aghi %r1,16 -.Lfast_loop_found16: - aghi %r1,16 -.Lfast_loop_found: - vlgvb %r4,%v18,7 /* Load byte index of found element or zero. */ -.Lfast_loop_found2: - algrk %r2,%r1,%r4 /* Add found index to current len. */ - br %r14 - - - - /* - Search s for reject in multiple vregs - ------------------------------------- - */ -.Lslow: - /* Save registers. */ - vlvgg %v30,%r6,0 - vlvgp %v31,%r8,%r9 - - /* Reject in v17 without zero. */ - vlr %v19,%v17 /* Save first acc-part for a fast reload. */ - vzero %v20 /* Zero for preparing acc-vector. */ - vone %v24 /* One for checking result of former - string-part. */ - - /* Align s to 16 byte. */ - risbg %r4,%r2,60,128+63,0 /* Test if s is aligned and - %r4 = bits 60-63 'and' 15. */ - je .Lslow_loop_str /* If s is aligned, loop aligned. */ - lghi %r0,15 - slr %r0,%r4 /* Compute highest index to load (15-x). */ - vll %v16,%r0,0(%r2) /* Load up to 16 byte boundary (vll needs - highest index, remaining bytes are 0). */ - ahi %r0,1 /* Work with loaded byte count. */ - vzero %v21 /* Zero out global mask. */ - lghi %r5,0 /* Set current len of reject-string to zero. */ - vfenezb %v18,%v16,%v16 /* Find zero in current string-part. */ - lghi %r8,0 /* There is no zero in first reject-part. */ - vlgvb %r6,%v18,7 /* Load byte index of zero or 16 if no zero. */ - clije %r6,0,.Lslow_end /* If first element is zero -> return 0. */ - clr %r0,%r6 /* cc==1 if loaded byte count < zero-index. */ - locrl %r6,%r0 /* Load on cc==1; zero-index = lbc. */ - j .Lslow_loop_acc - - - /* Process s in 16byte aligned loop. */ -.Lslow_next_str: - /* Check results of former processed str-part. */ - vfeeb %v18,%v21,%v24 /* Find first equal match in global mask - (ones in element). */ - vlgvb %r4,%v18,7 /* Get index of first one (=equal) or 16. */ - /* Equal-index < min(zero-index, loaded byte count) - -> Return pointer to equal element. */ - clrjl %r4,%r6,.Lslow_index_found - /* Zero-index < loaded byte count - -> Former str-part was last str-part - -> Return null */ - clrjl %r6,%r0,.Lslow_end_not_found - - /* All elements are zero (=no match) -> Proceed with next str-part. */ - vlr %v17,%v19 /* Load first part of reject (no zero). */ - algfr %r1,%r0 /* Add loaded byte count to current len. */ - -.Lslow_loop_str: - vl %v16,0(%r1,%r2) /* Load search-string. */ - lghi %r0,16 /* Loaded byte count is 16. */ - vzero %v21 /* Zero out global mask. */ - lghi %r5,0 /* Set current len of reject to zero. */ - vfenezb %v18,%v16,%v16 /* Find zero in current string-part. */ - lghi %r8,0 /* There is no zero in first reject-part. */ - vlgvb %r6,%v18,7 /* Load byte index of zero or 16 if no zero. */ - clije %r6,0,.Lslow_end /* If first element is zero (end of string) - -> Return current length. */ - -.Lslow_loop_acc: - vfaeb %v22,%v16,%v17,4 /* Create matching-mask (1 in mask -> - Character matches any rejected character in - this reject-string-part) IN=0, RT=1. */ - vlgvb %r4,%v22,0 /* Get result of first element. */ - /* First element is equal to any rejected characters? - (all other parts of reject cannot lead to a match before this one) - -> Return current len, which is pointing to this element. */ - clijh %r4,0,.Lslow_end - vo %v21,%v21,%v22 /* Global-mask = global-|matching-mask. */ - /* Proceed with next acc until end of acc is reached. */ - - -.Lslow_next_acc: - clijh %r8,0,.Lslow_next_str /* There was a zero in last reject-part - -> Add found index to current len - and end. */ - vlbb %v17,16(%r5,%r3),6 /* Load next reject part. */ - aghi %r5,16 /* Increment current len of reject-string. */ - lcbb %r9,0(%r5,%r3),6 /* Get loaded byte count of reject-string. */ - jo .Lslow_next_acc_onbb /* Jump away if reject-string is - on block-boundary. */ -.Lslow_next_acc_notonbb: - vistrbs %v17,%v17 /* Fill with zeros after first zero. */ - jo .Lslow_loop_acc /* No zero found -> no preparation needed. */ - -.Lslow_next_acc_prepare_zero: - /* Zero in reject-part: fill zeros with first-reject-character. */ - vlgvb %r8,%v17,0 /* Load first element of reject-part. */ - clije %r8,0,.Lslow_next_str /* Process next str-part if first - character in this part of reject - is a zero. */ - /* r8>0 -> zero found in this acc-part. */ - vrepb %v18,%v17,0 /* Replicate first char accross all chars. */ - vceqb %v22,%v20,%v17 /* Create a mask (v22) of null chars - by comparing with 0 (v20). */ - vsel %v17,%v18,%v17,%v22 /* Replace null chars with first char. */ - j .Lslow_loop_acc /* Reject-string part is prepared. */ - -.Lslow_next_acc_onbb: - vfenezb %v18,%v17,%v17 /* Find zero in loaded bytes of reject part. */ - vlgvb %r8,%v18,7 /* Load byte index of zero. */ - clrjl %r8,%r9,.Lslow_next_acc_notonbb /* Found a zero in loaded bytes - -> Prepare vreg. */ - vl %v17,0(%r5,%r3) /* Load over boundary ... */ - lghi %r8,0 /* r8=0 -> no zero in this part of acc, - check for zero is in jump-target. */ - j .Lslow_next_acc_notonbb /* ... and search for zero in - fully loaded vreg again. */ - -.Lslow_end_not_found: - algfr %r1,%r6 /* Add zero-index to current len. */ - j .Lslow_end -.Lslow_index_found: - algfr %r1,%r4 /* Add found index of char to current len. */ -.Lslow_end: - lgr %r2,%r1 - /* Restore registers. */ - vlgvg %r6,%v30,0 - vlgvg %r8,%v31,0 - vlgvg %r9,%v31,1 - br %r14 -END(__strcspn_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strcspn.c b/sysdeps/s390/multiarch/strcspn.c deleted file mode 100644 index 414f313c75..0000000000 --- a/sysdeps/s390/multiarch/strcspn.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Multiple versions of strcspn. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define strcspn __redirect_strcspn -/* Omit the strcspn inline definitions because it would redefine strcspn. */ -# define __NO_STRING_INLINES -# include -# undef strcspn -# include - -s390_vx_libc_ifunc2_redirected (__redirect_strcspn, __strcspn, strcspn) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/strlen-c.c b/sysdeps/s390/multiarch/strlen-c.c deleted file mode 100644 index b72366920c..0000000000 --- a/sysdeps/s390/multiarch/strlen-c.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Default strlen implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define STRLEN __strlen_c -# ifdef SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strlen_c, __GI_strlen, __strlen_c); -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strlen-vx.S b/sysdeps/s390/multiarch/strlen-vx.S deleted file mode 100644 index a779d6521a..0000000000 --- a/sysdeps/s390/multiarch/strlen-vx.S +++ /dev/null @@ -1,84 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of strlen. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* size_t strlen (const char *s) - Returns length of string s. - - Register usage: - -r1=bytes to 4k-byte boundary - -r2=s - -r3=tmp - -r4=tmp - -r5=current_len and return_value - -v16=part of s -*/ -ENTRY(__strlen_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - vfenezb %v16,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r4,%v16,7 /* Load zero index or 16 if not found. */ - clr %r4,%r1 /* If found zero within loaded bytes? */ - locgrl %r2,%r4 /* Then copy return value. */ - blr %r14 /* And return. */ - - /* Align s to 16 byte. */ - risbgn %r3,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 /* current_len = 16. */ - slr %r5,%r3 /* Compute bytes to 16bytes boundary. */ - - /* Find zero in 16 byte aligned loop. */ -.Lloop: - vl %v16,0(%r5,%r2) /* Load s. */ - vfenezbs %v16,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound /* Jump away if zero was found. */ - vl %v16,16(%r5,%r2) - vfenezbs %v16,%v16,%v16 - je .Lfound16 - vl %v16,32(%r5,%r2) - vfenezbs %v16,%v16,%v16 - je .Lfound32 - vl %v16,48(%r5,%r2) - vfenezbs %v16,%v16,%v16 - je .Lfound48 - - aghi %r5,64 - j .Lloop /* No zero found -> loop. */ - -.Lfound48: - aghi %r5,16 -.Lfound32: - aghi %r5,16 -.Lfound16: - aghi %r5,16 -.Lfound: - vlgvb %r2,%v16,7 /* Load byte index of zero. */ - algr %r2,%r5 - br %r14 -END(__strlen_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strlen.c b/sysdeps/s390/multiarch/strlen.c deleted file mode 100644 index 615274e4b8..0000000000 --- a/sysdeps/s390/multiarch/strlen.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Multiple versions of strlen. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define strlen __redirect_strlen -# include -# include -# undef strlen - -s390_vx_libc_ifunc2_redirected (__redirect_strlen, __strlen, strlen) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/strncat-c.c b/sysdeps/s390/multiarch/strncat-c.c deleted file mode 100644 index e72d778fb4..0000000000 --- a/sysdeps/s390/multiarch/strncat-c.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Default strncat implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define STRNCAT __strncat_c - -# include -#endif diff --git a/sysdeps/s390/multiarch/strncat-vx.S b/sysdeps/s390/multiarch/strncat-vx.S deleted file mode 100644 index c41509ceb5..0000000000 --- a/sysdeps/s390/multiarch/strncat-vx.S +++ /dev/null @@ -1,239 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of strncat. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* char * strncat (const char *dest, const char *src, size_t n) - Concatenate two strings - at most n characters of src. - - Register usage: - -r0=saved dest pointer for return - -r1=tmp - -r2=dest - -r3=src - -r4=n - -r5=current_len - -r6=tmp - -r7=tmp - -v16=part of src - -v17=index of zero - -v18=part of src - -v31=register save area for r6, r7 -*/ -ENTRY(__strncat_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r4,%r4 -# endif /* !defined __s390x__ */ - - clgfi %r4,0 - ber %r14 /* Nothing to do, if n == 0. */ - lgr %r0,%r2 /* Save destination pointer for return. */ - vlvgp %v31,%r6,%r7 /* Save registers. */ - - /* STRLEN - %r1 = loaded bytes (tmp) - %r6 = zero byte index (tmp) - %r2 = dst - */ - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - vfenezb %v16,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r5,%v16,7 /* Load zero index or 16 if not found. */ - clrjl %r5,%r1,.Llen_end /* Found zero within loaded bytes, end. */ - - /* Align s to 16 byte. */ - risbgn %r1,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 /* current_len = 16. */ - slr %r5,%r1 /* Compute bytes to 16bytes boundary. */ - - /* Find zero in 16byte aligned loop. */ -.Llen_loop: - vl %v16,0(%r5,%r2) /* Load s. */ - vfenezbs %v16,%v16,%v16 /* Find element not equal with zero search. */ - je .Llen_found /* Jump away if zero was found. */ - vl %v16,16(%r5,%r2) - vfenezbs %v16,%v16,%v16 - je .Llen_found16 - vl %v16,32(%r5,%r2) - vfenezbs %v16,%v16,%v16 - je .Llen_found32 - vl %v16,48(%r5,%r2) - vfenezbs %v16,%v16,%v16 - je .Llen_found48 - - aghi %r5,64 - j .Llen_loop /* No zero -> loop. */ - -.Llen_found48: - aghi %r5,16 -.Llen_found32: - aghi %r5,16 -.Llen_found16: - aghi %r5,16 -.Llen_found: - vlgvb %r1,%v16,7 /* Load byte index of zero. */ - algr %r5,%r1 - -.Llen_end: - /* STRCPY - %r1 = zero byte index (tmp) - %r6 = loaded bytes (tmp) - %r3 = curr src pointer - %r2 = curr dst pointer - %r7 = border, tmp - */ - la %r2,0(%r5,%r2) /* strcpy at end of dst-string. */ - - vlbb %v16,0(%r3),6 /* Load s until next 4k-byte boundary. */ - lcbb %r6,0(%r3),6 /* Get bytes to 4k-byte boundary or 16. */ - llgfr %r6,%r6 /* Convert 32bit to 64bit. */ - - lghi %r5,0 /* current_len = 0. */ - - clgrjle %r4,%r6,.Lcpy_remaining_v16 /* If n <= loaded-bytes - -> process remaining. */ - - /* n > loaded-byte-count. */ - vfenezb %v17,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r1,%v17,7 /* Load zero index or 16 if not found. */ - clrjl %r1,%r6,.Lcpy_found_v16_store /* Found zero within loaded - bytes, copy and return. */ - - /* Align s to 16 byte. */ - risbgn %r7,%r3,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,15 /* current_len = 15. */ - slr %r5,%r7 /* Compute highest index to 16byte boundary. */ - - /* Zero not found and n > loaded-byte-count. */ - vstl %v16,%r5,0(%r2) /* Copy loaded characters - no zero. */ - ahi %r5,1 /* Start loop at next character. */ - - /* - Now we are 16byte aligned, so we can load a full vreg - without page fault. - */ - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r4,.Lcpy_loop64 - - vl %v16,0(%r5,%r3) /* Load s. */ - clgijl %r4,17,.Lcpy_remaining_v16 /* If n <=16, - process remaining bytes. */ -.Lcpy_lt64: - lgr %r7,%r4 - slgfi %r7,16 /* border_len = n - 16. */ - - /* If current_len >= border then process remaining bytes. */ - clgrjhe %r5,%r7,.Lcpy_remaining_v16 - vfenezbs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lcpy_found_v16 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Store previous part without zero to dst. */ - aghi %r5,16 - - clgrjhe %r5,%r7,.Lcpy_remaining_v18 - vfenezbs %v17,%v18,%v18 - je .Lcpy_found_v18 - vl %v16,16(%r5,%r3) - vst %v18,0(%r5,%r2) - aghi %r5,16 - - clgrjhe %r5,%r7,.Lcpy_remaining_v16 - vfenezbs %v17,%v16,%v16 - je .Lcpy_found_v16 - vl %v18,16(%r5,%r3) - vst %v16,0(%r5,%r2) - aghi %r5,16 - -.Lcpy_remaining_v18: - vlr %v16,%v18 -.Lcpy_remaining_v16: - /* v16 contains the remaining bytes [1...16]. - Store remaining bytes and append string-termination. */ - vfenezb %v17,%v16,%v16 /* Find element not equal with zero search. */ - slgrk %r7,%r4,%r5 /* Remaining bytes = maxlen - current_len. */ - aghi %r7,-1 /* vstl needs highest index. */ - vlgvb %r1,%v17,7 /* Load zero index or 16 if not found. */ - la %r2,0(%r5,%r2) /* vstl has no index register. */ - /* Zero-index within remaining-bytes, store up to zero and end. */ - clgrjle %r1,%r7,.Lcpy_found_v16_store - vstl %v16,%r7,0(%r2) /* Store remaining bytes. */ - lghi %r1,0 - stc %r1,1(%r7,%r2) /* Store string-null-termination beyond n. */ -.Lcpy_end: - /* Restore saved registers. */ - vlgvg %r6,%v31,0 - vlgvg %r7,%v31,1 - lgr %r2,%r0 /* Load saved dest-ptr. */ - br %r14 - -.Lcpy_found_v16_32: - aghi %r5,32 - j .Lcpy_found_v16 -.Lcpy_found_v18_48: - aghi %r5,32 -.Lcpy_found_v18_16: - aghi %r5,16 -.Lcpy_found_v18: - vlr %v16,%v18 -.Lcpy_found_v16: - /* v16 contains a zero. Store remaining bytes to zero. current_len - has not reached border, thus checking for n is not needed! */ - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - la %r2,0(%r5,%r2) -.Lcpy_found_v16_store: - vstl %v16,%r1,0(%r2) /* Copy characters including zero. */ - j .Lcpy_end - - /* Find zero in 16byte aligned loop. */ -.Lcpy_loop64: - vl %v16,0(%r5,%r3) /* Load s. */ - vfenezbs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lcpy_found_v16 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Store previous part without zero to dst. */ - vfenezbs %v17,%v18,%v18 - je .Lcpy_found_v18_16 - vl %v16,32(%r5,%r3) - vst %v18,16(%r5,%r2) - vfenezbs %v17,%v16,%v16 - je .Lcpy_found_v16_32 - vl %v18,48(%r5,%r3) - vst %v16,32(%r5,%r2) - vfenezbs %v17,%v18,%v18 - je .Lcpy_found_v18_48 - vst %v18,48(%r5,%r2) - - aghi %r5,64 - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r4,.Lcpy_loop64 - - vl %v16,0(%r5,%r3) /* Load s. */ - j .Lcpy_lt64 -END(__strncat_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strncat.c b/sysdeps/s390/multiarch/strncat.c deleted file mode 100644 index d931ca6c85..0000000000 --- a/sysdeps/s390/multiarch/strncat.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Multiple versions of strncat. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc2 (__strncat, strncat) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/strncmp-c.c b/sysdeps/s390/multiarch/strncmp-c.c deleted file mode 100644 index fddd5ed97e..0000000000 --- a/sysdeps/s390/multiarch/strncmp-c.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Default strncmp implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define STRNCMP __strncmp_c -# ifdef SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strncmp_c, __GI_strncmp, __strncmp_c); -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strncmp-vx.S b/sysdeps/s390/multiarch/strncmp-vx.S deleted file mode 100644 index ee35d2debf..0000000000 --- a/sysdeps/s390/multiarch/strncmp-vx.S +++ /dev/null @@ -1,137 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of strncmp. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* int strncmp (const char *s1, const char *s2, size_t n) - Compare at most n characters of two strings. - - Register usage: - -r0=tmp - -r1=tmp - -r2=s1 - -r3=s2 - -r4=n - -r5=current_len - -v16=part of s1 - -v17=part of s2 - -v18=index of unequal -*/ -ENTRY(__strncmp_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r4,%r4 -# endif /* !defined __s390x__ */ - - clgije %r4,0,.Lend_equal /* Nothing to do if n == 0, */ - lghi %r5,0 /* current_len = 0. */ - -.Lloop: - vlbb %v16,0(%r5,%r2),6 /* Load s1 to block boundary. */ - vlbb %v17,0(%r5,%r3),6 /* Load s2 to block boundary. */ - lcbb %r0,0(%r5,%r2),6 /* Get loaded byte count of s1. */ - jo .Llt16_1 /* Jump away if vr is not fully loaded. */ - lcbb %r1,0(%r5,%r3),6 /* Get loaded byte count of s2. */ - jo .Llt16_2 /* Jump away if vr is not fully loaded. */ - aghi %r5,16 /* Both vrs are fully loaded. */ - clgrjhe %r5,%r4,.Llastcmp /* If current_len >= n ->last compare. */ - vfenezbs %v18,%v16,%v17 /* Compare not equal with zero search. */ - jno .Lfound - - vlbb %v16,0(%r5,%r2),6 - vlbb %v17,0(%r5,%r3),6 - lcbb %r0,0(%r5,%r2),6 - jo .Llt16_1 - lcbb %r1,0(%r5,%r3),6 - jo .Llt16_2 - aghi %r5,16 - clgrjhe %r5,%r4,.Llastcmp - vfenezbs %v18,%v16,%v17 - jno .Lfound - - vlbb %v16,0(%r5,%r2),6 - vlbb %v17,0(%r5,%r3),6 - lcbb %r0,0(%r5,%r2),6 - jo .Llt16_1 - lcbb %r1,0(%r5,%r3),6 - jo .Llt16_2 - aghi %r5,16 - clgrjhe %r5,%r4,.Llastcmp - vfenezbs %v18,%v16,%v17 - jno .Lfound - - vlbb %v16,0(%r5,%r2),6 - vlbb %v17,0(%r5,%r3),6 - lcbb %r0,0(%r5,%r2),6 - jo .Llt16_1 - lcbb %r1,0(%r5,%r3),6 - jo .Llt16_2 - aghi %r5,16 - clgrjhe %r5,%r4,.Llastcmp - vfenezbs %v18,%v16,%v17 - jno .Lfound - j .Lloop - -.Llt16_1: - lcbb %r1,0(%r5,%r3),6 /* Get loaded byte count ofs2. */ -.Llt16_2: - clr %r0,%r1 /* Compare logical. */ - locrh %r0,%r1 /* Compute minimum of bytes loaded. */ - algfr %r5,%r0 /* Add smallest loaded bytes to current_len. */ - clgrj %r5,%r4,10,.Llastcmp /* If current_len >= n ->last compare. */ - vfenezbs %v18,%v16,%v17 /* Compare not equal with zero search. */ - vlgvb %r1,%v18,7 /* Get not equal index or 16 if all equal. */ - clrjl %r1,%r0,.Lfound /* Jump away if miscompare is within - loaded bytes (index < loaded-bytes) */ - j .Lloop - -.Llastcmp: - /* Use comparision result only if located within first n characters. - %r0: loaded byte count in vreg; - %r5: current_len; - %r4: n; - (current_len - n): [0...16[ - First ignored match index: loaded bytes - (current_len-n): ]0...16] - */ - slgr %r5,%r4 /* %r5 = current_len - n. */ - slr %r0,%r5 /* %r0 = first ignored match index. */ - vfenezbs %v18,%v16,%v17 /* Compare not equal with zero search. */ - vlgvb %r1,%v18,7 /* Get not equal index or 16 if all equal. */ - clrjl %r1,%r0,.Lfound /* Jump away if miscompare is within - loaded bytes and below n bytes. */ - j .Lend_equal /* Miscompare after n-bytes -> end equal. */ - -.Lfound: - /* Difference or end of string. */ - je .Lend_equal - lghi %r2,1 - lghi %r1,-1 - locgrl %r2,%r1 - br %r14 -.Lend_equal: - lghi %r2,0 - br %r14 -END(__strncmp_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strncmp.c b/sysdeps/s390/multiarch/strncmp.c deleted file mode 100644 index c97753cc70..0000000000 --- a/sysdeps/s390/multiarch/strncmp.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Multiple versions of strncmp. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define strncmp __redirect_strncmp -/* Omit the strncmp inline definitions because it would redefine strncmp. */ -# define __NO_STRING_INLINES -# include -# undef strncmp -# include - -s390_vx_libc_ifunc2_redirected (__redirect_strncmp, __strncmp, strncmp) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/strncpy-vx.S b/sysdeps/s390/multiarch/strncpy-vx.S deleted file mode 100644 index 4f58977b9b..0000000000 --- a/sysdeps/s390/multiarch/strncpy-vx.S +++ /dev/null @@ -1,207 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of strncpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* char * strncpy (const char *dest, const char *src, size_t n) - Copy at most n characters of string src to dest. - - Register usage: - -r0=dest pointer for return - -r1=tmp, zero byte index - -r2=dest - -r3=src - -r4=n - -r5=current_len - -r6=tmp, loaded bytes - -r7=tmp, border - -v16=part of src - -v17=index of zero - -v18=part of src - -v31=register save area for r6, r7 -*/ -ENTRY(__strncpy_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r4,%r4 -# endif /* !defined __s390x__ */ - - clgfi %r4,0 - ber %r14 /* Nothing to do, if n == 0. */ - lgr %r0,%r2 /* Save destination pointer for return. */ - vlvgp %v31,%r6,%r7 /* Save registers. */ - - vlbb %v16,0(%r3),6 /* Load s until next 4k-byte boundary. */ - lcbb %r6,0(%r3),6 /* Get bytes to 4k-byte boundary or 16. */ - llgfr %r6,%r6 /* Convert 32bit to 64bit. */ - - lghi %r5,0 /* current_len = 0. */ - - clgrjle %r4,%r6,.Lremaining_v16 /* If n <= loaded-bytes - -> process remaining. */ - - /* n > loaded-byte-count. */ - vfenezb %v17,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r1,%v17,7 /* Load zero index or 16 if not found. */ - clrjl %r1,%r6,.Lfound_v16_store /* Found zero within loaded bytes, - copy and return. */ - - /* Align s to 16 byte. */ - risbgn %r7,%r3,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,15 /* current_len = 15. */ - slr %r5,%r7 /* Compute highest index to 16byte boundary. */ - - /* Zero not found and n > loaded-byte-count. */ - vstl %v16,%r5,0(%r2) /* Copy loaded characters - no zero. */ - ahi %r5,1 /* Start loop at next character. */ - - /* Now we are 16byte aligned, so we can load - a full vreg without page fault. */ - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r4,.Lloop64 - - vl %v16,0(%r5,%r3) /* Load s. */ - clgijl %r4,17,.Lremaining_v16 /* If n <= 16, process remaining - bytes. */ -.Llt64: - lgr %r7,%r4 - slgfi %r7,16 /* border_len = n - 16. */ - - clgrjhe %r5,%r7,.Lremaining_v16 /* If current_len >= border - then process remaining bytes. */ - vfenezbs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound_v16 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Store previous part without zero to dst. */ - aghi %r5,16 - - clgrjhe %r5,%r7,.Lremaining_v18 - vfenezbs %v17,%v18,%v18 - je .Lfound_v18 - vl %v16,16(%r5,%r3) - vst %v18,0(%r5,%r2) - aghi %r5,16 - - clgrjhe %r5,%r7,.Lremaining_v16 - vfenezbs %v17,%v16,%v16 - je .Lfound_v16 - vl %v18,16(%r5,%r3) - vst %v16,0(%r5,%r2) - aghi %r5,16 - -.Lremaining_v18: - vlr %v16,%v18 -.Lremaining_v16: - /* v16 contains the remaining bytes [1...16]. - Store remaining bytes and append string-termination. */ - vfenezb %v17,%v16,%v16 /* Find element not equal with zero search. */ - slgrk %r7,%r4,%r5 /* Remaining bytes = maxlen - current_len. */ - aghi %r7,-1 /* vstl needs highest index. */ - la %r2,0(%r5,%r2) /* vstl has no index register. */ - vlgvb %r1,%v17,7 /* Load zero index or 16 if not found. */ - /* Zero in remaining bytes? -> jump away (zero-index < max-index) - Do not jump away if zero-index == max-index, - but simply copy zero with vstl below. */ - clrjl %r1,%r7,.Lfound_v16_store - vstl %v16,%r7,0(%r2) /* Store remaining bytes without null - termination!. */ -.Lend: - /* Restore saved registers. */ - vlgvg %r6,%v31,0 - vlgvg %r7,%v31,1 - lgr %r2,%r0 /* Load saved dest-ptr. */ - br %r14 - - -.Lfound_v16_32: - aghi %r5,32 - j .Lfound_v16 -.Lfound_v18_48: - aghi %r5,32 -.Lfound_v18_16: - aghi %r5,16 -.Lfound_v18: - vlr %v16,%v18 -.Lfound_v16: - /* v16 contains a zero. Store remaining bytes to zero. current_len - has not reached border, thus checking for n is not needed! */ - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - la %r2,0(%r5,%r2) /* vstl has no support for index-register. */ -.Lfound_v16_store: - vstl %v16,%r1,0(%r2) /* Copy characters including zero. */ - /* Fill remaining bytes with zero - remaining count always > 0. */ - algr %r5,%r1 /* Remaining bytes (=%r4) = ... */ - slgr %r4,%r5 /* = n - (current_len + zero_index + 1). */ - la %r2,0(%r1,%r2) /* Pointer to zero. start filling beyond. */ - aghi %r4,-2 /* mvc with exrl needs count - 1. - (additional -1, see remaining bytes above) */ - srlg %r6,%r4,8 /* Split into 256 byte blocks. */ - ltgr %r6,%r6 - je .Lzero_lt256 -.Lzero_loop256: - mvc 1(256,%r2),0(%r2) /* Fill 256 zeros at once. */ - la %r2,256(%r2) - brctg %r6,.Lzero_loop256 /* Loop until all blocks are processed. */ -.Lzero_lt256: - exrl %r4,.Lmvc_lt256 - j .Lend -.Lmvc_lt256: - mvc 1(1,%r2),0(%r2) - -.Lloop64: - vl %v16,0(%r5,%r3) /* Load s. */ - vfenezbs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound_v16 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Store previous part without zero to dst. */ - vfenezbs %v17,%v18,%v18 - je .Lfound_v18_16 - vl %v16,32(%r5,%r3) - vst %v18,16(%r5,%r2) - vfenezbs %v17,%v16,%v16 - je .Lfound_v16_32 - vl %v18,48(%r5,%r3) - vst %v16,32(%r5,%r2) - vfenezbs %v17,%v18,%v18 - je .Lfound_v18_48 - vst %v18,48(%r5,%r2) - - aghi %r5,64 - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r4,.Lloop64 - - vl %v16,0(%r5,%r3) /* Load s. */ - j .Llt64 -END(__strncpy_vx) - -# define strncpy __strncpy_c -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) strong_alias(__strncpy_c, __GI_strncpy) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ - -/* Include strncpy-implementation in s390-32/s390-64 subdirectory. */ -#include diff --git a/sysdeps/s390/multiarch/strncpy.c b/sysdeps/s390/multiarch/strncpy.c deleted file mode 100644 index d44b459093..0000000000 --- a/sysdeps/s390/multiarch/strncpy.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Multiple versions of strncpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define strncpy __redirect_strncpy -/* Omit the strncpy inline definitions because it would redefine strncpy. */ -# define __NO_STRING_INLINES -# include -# undef strncpy -# include - -s390_vx_libc_ifunc2_redirected (__redirect_strncpy, __strncpy, strncpy); - -#endif diff --git a/sysdeps/s390/multiarch/strnlen-c.c b/sysdeps/s390/multiarch/strnlen-c.c deleted file mode 100644 index 46e2cac342..0000000000 --- a/sysdeps/s390/multiarch/strnlen-c.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Default strnlen implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define STRNLEN __strnlen_c -# ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__strnlen_c, __GI_strnlen, __strnlen_c); \ - strong_alias (__strnlen_c, __strnlen_c_1); \ - __hidden_ver1 (__strnlen_c_1, __GI___strnlen, __strnlen_c_1); -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strnlen-vx.S b/sysdeps/s390/multiarch/strnlen-vx.S deleted file mode 100644 index da83a0d4f0..0000000000 --- a/sysdeps/s390/multiarch/strnlen-vx.S +++ /dev/null @@ -1,134 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of strnlen. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* size_t strnlen (const char *s, size_t maxlen) - Returns the number of characters in s or at most maxlen. - - Register usage: - -r1=tmp - -r2=address of string - -r3=maxlen (number of characters to be read) - -r4=tmp - -r5=current_len and return_value - -v16=part of s -*/ -ENTRY(__strnlen_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r3,%r3 -# endif /* !defined __s390x__ */ - - clgfi %r3,0 /* if maxlen == 0, return 0. */ - locgre %r2,%r3 - ber %r14 - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - llgfr %r1,%r1 /* Convert 32bit to 64bit. */ - - vfenezb %v16,%v16,%v16 /* Find element not equal with zero search. */ - clgr %r1,%r3 - locgrh %r1,%r3 /* loaded_byte_count - = min (loaded_byte_count, maxlen) */ - - vlgvb %r5,%v16,7 /* Load zero index or 16 if not found. */ - clr %r5,%r1 /* If found zero within loaded bytes? */ - locgrl %r2,%r5 /* Then copy return value. */ - blr %r14 /* And return. */ - - clgr %r1,%r3 /* If loaded_byte_count == maxlen? */ - locgre %r2,%r3 /* Then copy return value. */ - ber %r14 /* And return. */ - - /* Align s to 16 byte. */ - risbgn %r4,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 /* current_len = 16. */ - slr %r5,%r4 /* Compute bytes to 16bytes boundary. */ - - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r3,.Lloop64 - - /* Find zero in max 64byte with aligned s. */ -.Llt64: - vl %v16,0(%r5,%r2) /* Load s. */ - vfenezbs %v16,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound /* Jump away if zero was found. */ - aghi %r5,16 - clgrjhe %r5,%r3,.Lfound /* current_len >= maxlen -> end. */ - vl %v16,0(%r5,%r2) - vfenezbs %v16,%v16,%v16 - je .Lfound - aghi %r5,16 - clgrjhe %r5,%r3,.Lfound - vl %v16,0(%r5,%r2) - vfenezbs %v16,%v16,%v16 - je .Lfound - aghi %r5,16 - clgrjhe %r5,%r3,.Lfound - vl %v16,0(%r5,%r2) - vfenezbs %v16,%v16,%v16 - j .Lfound - -.Lfound48: - aghi %r5,16 -.Lfound32: - aghi %r5,16 -.Lfound16: - aghi %r5,16 -.Lfound: - vlgvb %r4,%v16,7 /* Load byte index of zero or 16 if no zero. */ - algr %r5,%r4 - - clgr %r5,%r3 - locgrh %r5,%r3 /* Return min (current_len, maxlen). */ - lgr %r2,%r5 - br %r14 - - /* Find zero in 16 byte aligned loop. */ -.Lloop64: - vl %v16,0(%r5,%r2) /* Load s. */ - vfenezbs %v16,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound /* Jump away if zero was found. */ - vl %v16,16(%r5,%r2) - vfenezbs %v16,%v16,%v16 - je .Lfound16 - vl %v16,32(%r5,%r2) - vfenezbs %v16,%v16,%v16 - je .Lfound32 - vl %v16,48(%r5,%r2) - vfenezbs %v16,%v16,%v16 - je .Lfound48 - - aghi %r5,64 - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r3,.Lloop64 - - j .Llt64 -END(__strnlen_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strnlen.c b/sysdeps/s390/multiarch/strnlen.c deleted file mode 100644 index 6ebcafbd16..0000000000 --- a/sysdeps/s390/multiarch/strnlen.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of strnlen. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define strnlen __redirect_strnlen -# define __strnlen __redirect___strnlen -# include -# undef strnlen -# undef __strnlen -# include - -s390_vx_libc_ifunc_redirected (__redirect___strnlen, __strnlen) -weak_alias (__strnlen, strnlen) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/strpbrk-c.c b/sysdeps/s390/multiarch/strpbrk-c.c deleted file mode 100644 index f099c0607f..0000000000 --- a/sysdeps/s390/multiarch/strpbrk-c.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Default strpbrk implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define STRPBRK __strpbrk_c -# ifdef SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strpbrk_c, __GI_strpbrk, __strpbrk_c); -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strpbrk-vx.S b/sysdeps/s390/multiarch/strpbrk-vx.S deleted file mode 100644 index dd24d5e9db..0000000000 --- a/sysdeps/s390/multiarch/strpbrk-vx.S +++ /dev/null @@ -1,302 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of strpbrk. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* char *strpbrk (const char *s, const char * accept) - The strpbrk() function locates the first occurrence in the string s - of any of the characters in the string accept and returns a pointer - to that character or NULL if not found. - - This method checks the length of accept string. If it fits entirely - in one vector register, a fast algorithm is used, which does not need - to check multiple parts of accept-string. Otherwise a slower full - check of accept-string is used. - - register overview: - r3: pointer to start of accept-string - r2: pointer to start of search-string - r0: loaded byte count of vlbb search-string (32bit unsigned) - r4: found byte index (32bit unsigned) - r1: current return len (64bit unsigned) - v16: search-string - v17: accept-string - v18: temp-vreg - - ONLY FOR SLOW: - v19: first accept-string - v20: zero for preparing acc-vector - v21: global mask; 1 indicates a match between - search-string-vreg and any accept-character - v22: current mask; 1 indicates a match between - search-string-vreg and any accept-character in current acc-vreg - v24: one for result-checking of former string-part - v30, v31: for re-/storing registers r6, r8, r9 - r5: current len of accept-string - r6: zero-index in search-string or 16 if no zero - or min(zero-index, loaded byte count) - r8: >0, if former accept-string-part contains a zero, - otherwise =0; - r9: loaded byte count of vlbb accept-string -*/ -ENTRY(__strpbrk_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - /* - Check if accept-string fits in one vreg: - ---------------------------------------- - */ - vlbb %v17,0(%r3),6 /* Load accept. */ - lghi %r1,0 /* Zero out current len. */ - vlgvb %r0,%v17,0 /* Get first element. */ - clije %r0,0,.Lfast_end_null /* Return null if accept is empty. */ - lcbb %r0,0(%r3),6 - jo .Lcheck_onbb /* Special case if accept lays - on block-boundary. */ -.Lcheck_notonbb: - vistrbs %v17,%v17 /* Fill with zeros after first zero. */ - je .Lfast /* Zero found -> accept fits in one vreg. */ - j .Lslow /* No zero -> accept exceeds one vreg */ - - -.Lcheck_onbb: - /* Accept lays on block-boundary. */ - vfenezb %v18,%v17,%v17 /* Search zero in loaded accept bytes. */ - vlgvb %r4,%v18,7 /* Get index of zero or 16 if not found. */ - clrjl %r4,%r0,.Lcheck_notonbb /* Zero index < loaded bytes count -> - Accept fits in one vreg; - Fill with zeros and proceed - with FAST. */ - vl %v17,0(%r3) /* Load accept, which exceeds loaded bytes. */ - j .Lcheck_notonbb /* Check if accept fits in one vreg. */ - - - /* - Search s for accept in one vreg - ------------------------------- - */ -.Lfast: - /* Complete accept-string in v17 and remaining bytes are zero. */ - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r0,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - vfaezbs %v18,%v16,%v17,0 /* Find first element in v16 unequal to any - in v17 or first zero element. */ - - vlgvb %r4,%v18,7 /* Load byte index of found element. */ - /* If found index is within loaded bytes, return with found - element index (=equal count). */ - clrjl %r4,%r0,.Lfast_loop_found2 - - /* Align s to 16 byte. */ - risbgn %r4,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r1,16 /* current_len = 16. */ - slr %r1,%r4 /* Compute bytes to 16bytes boundary. */ - - /* Process s in 16byte aligned loop. */ -.Lfast_loop: - vl %v16,0(%r1,%r2) /* Load search-string. */ - vfaezbs %v18,%v16,%v17,0 /* Find first element in v16 equal to any - in v17 or first zero element. */ - jno .Lfast_loop_found - - vl %v16,16(%r1,%r2) - vfaezbs %v18,%v16,%v17,0 - jno .Lfast_loop_found16 - - vl %v16,32(%r1,%r2) - vfaezbs %v18,%v16,%v17,0 - jno .Lfast_loop_found32 - - vl %v16,48(%r1,%r2) - vfaezbs %v18,%v16,%v17,0 - jno .Lfast_loop_found48 - - aghi %r1,64 - j .Lfast_loop /* Loop if no element was unequal to accept - and not zero. */ - - /* Found equal or zero element. */ -.Lfast_loop_found48: - aghi %r1,16 -.Lfast_loop_found32: - aghi %r1,16 -.Lfast_loop_found16: - aghi %r1,16 -.Lfast_loop_found: - vlgvb %r4,%v18,7 /* Load byte index of found element. */ -.Lfast_loop_found2: - vlgvb %r0,%v16,0(%r4) /* Get found element. */ - clije %r0,0,.Lfast_end_null /* Return null if no accept-char found */ - algfr %r1,%r4 /* Add found index of char to current len. */ - la %r2,0(%r1,%r2) /* And return pointer to first equal char. */ - br %r14 - -.Lfast_end_null: - lghi %r2,0 /* Return null if no character is equal. */ - br %r14 - - - - - /* - Search s for accept in multiple vregs - ------------------------------------- - */ -.Lslow: - /* Save registers. */ - vlvgg %v30,%r6,0 - vlvgp %v31,%r8,%r9 - - /* accept in v17 without zero. */ - vlr %v19,%v17 /* Save first acc-part for a fast reload. */ - vzero %v20 /* Zero for preparing acc-vector. */ - vone %v24 /* One for checking result of former string. */ - - /* Align s to 16 byte. */ - risbg %r4,%r2,60,128+63,0 /* Test if s is aligned and - %r4 = bits 60-63 'and' 15. */ - je .Lslow_loop_str /* If s is aligned, loop aligned. */ - lghi %r0,15 - slr %r0,%r4 /* Compute highest index to load (15-x). */ - vll %v16,%r0,0(%r2) /* Load up to 16 byte boundary (vll needs - highest index, remaining bytes are 0). */ - ahi %r0,1 /* Work with loaded byte count. */ - vzero %v21 /* Zero out global mask. */ - lghi %r5,0 /* Set current len of accept-string to zero. */ - vfenezb %v18,%v16,%v16 /* Find zero in current string-part. */ - lghi %r8,0 /* There is no zero in first accept-part. */ - vlgvb %r6,%v18,7 /* Load byte index of zero or 16 if no zero. */ - clije %r6,0,.Lslow_end_null /* If first element is zero - (end of string) -> return null */ - clr %r0,%r6 /* cc==1 if loaded byte count < zero-index. */ - locrl %r6,%r0 /* Load on cc==1; zero-index = lbc. */ - j .Lslow_loop_acc - - - /* Process s in 16byte aligned loop. */ -.Lslow_next_str: - /* Check results of former processed str-part. */ - vfeeb %v18,%v21,%v24 /* Find first equal match in global mask - (ones in element). */ - vlgvb %r4,%v18,7 /* Get index of first one (=equal) - or 16 if no match. */ - /* Equal-index < min(zero-index, loaded byte count) - -> return pointer to equal element. */ - clrjl %r4,%r6,.Lslow_index_found - /* Zero-index < loaded byte count - -> former str-part was last str-part - -> return null */ - clrjl %r6,%r0,.Lslow_end_null - /* All elements are zero (=no match) -> proceed with next str-part. */ - - vlr %v17,%v19 /* Load first part of accept (no zero). */ - algfr %r1,%r0 /* Add loaded byte count to current len. */ - -.Lslow_loop_str: - vl %v16,0(%r1,%r2) /* Load search-string */ - lghi %r0,16 /* Loaded byte count is 16. */ - vzero %v21 /* Zero out global mask. */ - lghi %r5,0 /* Set current len of accept to zero. */ - vfenezb %v18,%v16,%v16 /* Find zero in current string-part. */ - lghi %r8,0 /* There is no zero in first accept-part. */ - vlgvb %r6,%v18,7 /* Load byte index of zero or 16 if no zero. */ - clije %r6,0,.Lslow_end_null /* If first element is zero - (end of string) -> return null. */ - -.Lslow_loop_acc: - vfaeb %v22,%v16,%v17,4 /* Create matching-mask (1 in mask -> - Character matches any accepted character in - this accept-string-part) IN=0, RT=1. */ - vlgvb %r4,%v22,0 /* Get result of first element. */ - /* First element is equal to any accepted characters - (all other parts of accept cannot lead to a match before this one) - -> current len is pointing to first element - -> return found */ - clijh %r4,0,.Lslow_end_found - vo %v21,%v21,%v22 /* Global-mask = global-|matching-mask. */ - /* Proceed with next acc until end of acc is reached. */ - - -.Lslow_next_acc: - clijh %r8,0,.Lslow_next_str /* There was a zero in the last acc-part - -> add index to current_len and - end. */ - vlbb %v17,16(%r5,%r3),6 /* Load next accept part. */ - aghi %r5,16 /* Increment current len of accept-string. */ - lcbb %r9,0(%r5,%r3),6 /* Get loaded byte count of accept-string. */ - jo .Lslow_next_acc_onbb /* Jump away ifaccept-string is - on block-boundary. */ -.Lslow_next_acc_notonbb: - vistrbs %v17,%v17 /* Fill with zeros after first zero. */ - jo .Lslow_loop_acc /* No zero found -> no preparation needed. */ - -.Lslow_next_acc_prepare_zero: - /* Zero in accept-part: fill zeros with first-accept-character. */ - vlgvb %r8,%v17,0 /* Load first element of acc-part. */ - clije %r8,0,.Lslow_next_str /* Proceed with next string-part, - if first char in this part of accept - is a zero. */ - /* r8>0 -> zero found in this acc-part. */ - vrepb %v18,%v17,0 /* Replicate first char accross all chars. */ - vceqb %v22,%v20,%v17 /* Create a mask (v22) of null chars - by comparing with 0 (v20). */ - vsel %v17,%v18,%v17,%v22 /* Replace null chars with first char. */ - j .Lslow_loop_acc /* Accept part is prepared -> process. */ - -.Lslow_next_acc_onbb: - vfenezb %v18,%v17,%v17 /* Find zero in loaded bytes of accept part. */ - vlgvb %r8,%v18,7 /* Load byte index of zero. */ - clrjl %r8,%r9,.Lslow_next_acc_notonbb /* Found a zero in loaded bytes - -> Prepare vreg. */ - vl %v17,0(%r5,%r3) /* Load over boundary ... */ - lghi %r8,0 /* r8=0 -> no zero in this part of acc, - check for zero is in jump-target. */ - j .Lslow_next_acc_notonbb /* ... and search for zero in - fully loaded vreg again. */ - -.Lslow_end_null: - lghi %r1,0 /* Return null if no character is equal. */ - j .Lslow_end - -.Lslow_loop_found: - vlgvb %r4,%v18,7 /* Load byte index of found element. */ - vlgvb %r0,%v16,0(%r4) /* Get found element. */ - clije %r0,0,.Lslow_end_null /* Return null if no acc-char found. */ - -.Lslow_index_found: - algfr %r1,%r4 /* Add found index of char to current len. */ -.Lslow_end_found: - la %r1,0(%r1,%r2) /* And return pointer to first equal char. */ - -.Lslow_end: - /* Restore registers. */ - vlgvg %r6,%v30,0 - vlgvg %r8,%v31,0 - vlgvg %r9,%v31,1 - lgr %r2,%r1 - br %r14 -END(__strpbrk_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strpbrk.c b/sysdeps/s390/multiarch/strpbrk.c deleted file mode 100644 index 89bdb2b26c..0000000000 --- a/sysdeps/s390/multiarch/strpbrk.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Multiple versions of strpbrk. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define strpbrk __redirect_strpbrk -/* Omit the strpbrk inline definitions because it would redefine strpbrk. */ -# define __NO_STRING_INLINES -# include -# undef strpbrk -# include - -s390_vx_libc_ifunc2_redirected (__redirect_strpbrk, __strpbrk, strpbrk) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/strrchr-c.c b/sysdeps/s390/multiarch/strrchr-c.c deleted file mode 100644 index d1a8c4bd31..0000000000 --- a/sysdeps/s390/multiarch/strrchr-c.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Default strrchr implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define STRRCHR __strrchr_c -# undef weak_alias -# ifdef SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strrchr_c, __GI_strrchr, __strrchr_c); -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strrchr-vx.S b/sysdeps/s390/multiarch/strrchr-vx.S deleted file mode 100644 index 89a8f5f14c..0000000000 --- a/sysdeps/s390/multiarch/strrchr-vx.S +++ /dev/null @@ -1,180 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of strrchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* char *strrchr (const char *s, int c) - Locate the last character c in string. - - Register usage: - -r0=loaded bytes in first part of s. - -r1=pointer to last occurence of c or NULL if not found. - -r2=s - -r3=c - -r4=tmp - -r5=current_len - -v16=part of s - -v17=index of found element - -v18=replicated c - -v19=part of s with last occurence of c. - -v20=permute pattern -*/ -ENTRY(__strrchr_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r0,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - vlvgb %v18,%r3,0 /* Generate vector which elements are all c. - if c > 255, c will be truncated. */ - vrepb %v18,%v18,0 - - lghi %r1,-1 /* Currently no c found. */ - lghi %r5,0 /* current_len = 0. */ - - vfeezbs %v17,%v16,%v18 /* Find element equal or zero. */ - vlgvb %r4,%v17,7 /* Load byte index of c/zero or 16. */ - clrjl %r4,%r0,.Lfound_first_part /* Found c/zero in loaded bytes. */ -.Lalign: - /* Align s to 16 byte. */ - risbgn %r4,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 /* current_len = 16. */ - slr %r5,%r4 /* Compute bytes to 16bytes boundary. */ - -.Lloop: - vl %v16,0(%r5,%r2) /* Load s. */ - vfeezbs %v17,%v16,%v18 /* Find element equal with zero search. */ - jno .Lfound /* Found c/zero (cc=0|1|2). */ - vl %v16,16(%r5,%r2) - vfeezbs %v17,%v16,%v18 - jno .Lfound16 - vl %v16,32(%r5,%r2) - vfeezbs %v17,%v16,%v18 - jno .Lfound32 - vl %v16,48(%r5,%r2) - vfeezbs %v17,%v16,%v18 - jno .Lfound48 - - aghi %r5,64 - j .Lloop /* No character and no zero -> loop. */ - -.Lfound48: - la %r5,16(%r5) /* Use la since aghi would clobber cc. */ -.Lfound32: - la %r5,16(%r5) -.Lfound16: - la %r5,16(%r5) -.Lfound: - je .Lzero /* Found zero, but no c before that zero. */ - /* Save this part of s to check for further matches after reaching - the end of the complete string. */ - vlr %v19,%v16 - lgr %r1,%r5 - - jh .Lzero /* Found a zero after the found c. */ - aghi %r5,16 /* Start search of next part of s. */ - j .Lloop - -.Lfound_first_part: - /* This code is only executed if the found c/zero is whithin loaded - bytes. If no c/zero was found (cc==3) the found index = 16, thus - this code is not called. - Resulting condition code of vector find element equal: - cc==0: no c, found zero - cc==1: c found, no zero - cc==2: c found, found zero after c - cc==3: no c, no zero (this case can be ignored). */ - je .Lzero /* Found zero, but no c before that zero. */ - - locgrne %r1,%r5 /* Mark c as found in first part of s. */ - vlr %v19,%v16 - - jl .Lalign /* No zero (e.g. if vr was fully loaded) - -> Align and loop afterwards. */ - - /* Found a zero in vr. If vr was not fully loaded due to block - boundary, the remaining bytes are filled with zero and we can't - rely on zero indication of condition code here! */ - - vfenezb %v17,%v16,%v16 /* Find zero. */ - vlgvb %r4,%v17,7 /* Load byte index of zero or 16. */ - clrjl %r4,%r0,.Lzero /* Zero within loaded bytes -> end. */ - j .Lalign /* Align and loop afterwards. */ - -.Lend_searched_zero: - vlgvb %r4,%v17,7 /* Load byte index of zero. */ - algr %r5,%r4 - la %r2,0(%r5,%r2) /* Return pointer to zero. */ - br %r14 - -.Lzero: - /* Reached end of string. Check if one c was found before. */ - clije %r3,0,.Lend_searched_zero /* Found zero and c is zero. */ - - cgfi %r1,-1 /* No c found -> return NULL. */ - locghie %r2,0 - ber %r14 - - larl %r3,.Lpermute_mask /* Load permute mask. */ - vl %v20,0(%r3) - - /* c was found and is part of v19. */ - vfenezb %v17,%v19,%v19 /* Find zero. */ - vlgvb %r4,%v17,7 /* Load byte index of zero or 16. */ - - clgfi %r5,0 /* Loaded byte count in v19 is 16, ... */ - lochine %r0,16 /* ... if v19 is not the first part of s. */ - ahi %r0,-1 /* Convert byte count to highest index. */ - - clr %r0,%r4 - locrl %r4,%r0 /* r4 = min (zero-index, highest-index). */ - - /* Right-shift of v19 to mask bytes after zero. */ - clije %r4,15,.Lzero_permute /* No shift is needed if highest index - in vr is 15. */ - lhi %r0,15 - slr %r0,%r4 /* Compute byte count for vector shift right. */ - sll %r0,3 /* Convert to bit count. */ - vlvgb %v17,%r0,7 - vsrlb %v19,%v19,%v17 /* Vector shift right by byte by number of bytes - specified in bits 1-4 of byte 7 in v17. */ - - /* Reverse bytes in v19. */ -.Lzero_permute: - vperm %v19,%v19,%v19,%v20 /* Permute v19 to reversed order. */ - - /* Find c in reversed v19. */ - vfeeb %v19,%v19,%v18 /* Find c. */ - la %r2,0(%r1,%r2) - vlgvb %r3,%v19,7 /* Load byte index of c. */ - - /* Compute index in real s and return. */ - slgr %r4,%r3 - la %r2,0(%r4,%r2) /* Return pointer to zero. */ - br %r14 -.Lpermute_mask: - .byte 0x0F,0x0E,0x0D,0x0C,0x0B,0x0A,0x09,0x08 - .byte 0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00 -END(__strrchr_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strrchr.c b/sysdeps/s390/multiarch/strrchr.c deleted file mode 100644 index edb8ce6caf..0000000000 --- a/sysdeps/s390/multiarch/strrchr.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Multiple versions of strrchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define strrchr __redirect_strrchr -# include -# undef strrchr -# include - -s390_vx_libc_ifunc2_redirected (__redirect_strrchr, __strrchr, strrchr) -weak_alias (strrchr, rindex); - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/strspn-c.c b/sysdeps/s390/multiarch/strspn-c.c deleted file mode 100644 index 99e1f20da4..0000000000 --- a/sysdeps/s390/multiarch/strspn-c.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Default strspn implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define STRSPN __strspn_c -# ifdef SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strspn_c, __GI_strspn, __strspn_c); -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strspn-vx.S b/sysdeps/s390/multiarch/strspn-vx.S deleted file mode 100644 index 1cb3d0d598..0000000000 --- a/sysdeps/s390/multiarch/strspn-vx.S +++ /dev/null @@ -1,256 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of strspn. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* size_t strspn (const char *s, const char * accept) - The strspn() function calculates the length of the initial segment - of s which consists entirely of characters in accept. - - This method checks the length of accept string. If it fits entirely - in one vector register, a fast algorithm is used, which does not need - to check multiple parts of accept-string. Otherwise a slower full - check of accept-string is used. - - register overview: - r3: pointer to start of accept-string - r2: pointer to start of search-string - r4: loaded byte count of vl search-string - r0: found byte index - r1: current return len of s - v16: search-string - v17: accept-string - v18: temp-vreg - - ONLY FOR SLOW: - v19: first accept-string - v20: zero for preparing acc-vector - v21: global mask; 1 indicates a match between - search-string-vreg and any accept-character - v22: current mask; 1 indicates a match between - search-string-vreg and any accept-character in current acc-vreg - v30, v31: for re-/storing registers r6, r8, r9 - r5: current len of accept-string - r6: zero-index in search-string or 16 if no zero - or min(zero-index, loaded byte count) - r8: >0, if former accept-string-part contains a zero, - otherwise =0; - r9: loaded byte count of vlbb accept-string -*/ -ENTRY(__strspn_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - /* - Check if accept-string fits in one vreg: - ---------------------------------------- - */ - vlbb %v17,0(%r3),6 /* Load accept. */ - lcbb %r4,0(%r3),6 - jo .Lcheck_onbb /* Special case if accept lays - on block-boundary. */ -.Lcheck_notonbb: - vistrbs %v17,%v17 /* Fill with zeros after first zero. */ - je .Lfast /* Zero found -> accept fits in one vreg. */ - j .Lslow /* No zero -> accept exceeds one vreg. */ - -.Lcheck_onbb: - /* Accept lays on block-boundary. */ - vfenezb %v18,%v17,%v17 /* Search zero in loaded accept bytes. */ - vlgvb %r0,%v18,7 /* Get index of zero or 16 if not found. */ - clrjl %r0,%r4,.Lcheck_notonbb /* Zero index < loaded bytes count -> - Accept fits in one vreg; - Fill with zeros and proceed - with FAST. */ - vl %v17,0(%r3) /* Load accept, which exceeds loaded bytes. */ - j .Lcheck_notonbb /* Check if accept fits in one vreg. */ - - - /* - Search s for accept in one vreg - ------------------------------- - */ -.Lfast: - /* Complete accept-string is in v17 and remaining bytes are zero. */ - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - vfaezbs %v16,%v16,%v17,8 /* Find first element in v16 - unequal to any in v17 - or first zero element. */ - vlgvb %r0,%v16,7 /* Load byte index of found element. */ - /* If found index is within loaded bytes (%r0 < %r1), - return with found element index (=equal count). */ - clr %r0,%r1 - locgrl %r2,%r0 - blr %r14 - - /* Align s to 16 byte. */ - risbgn %r4,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r1,16 /* current_len = 16. */ - slr %r1,%r4 /* Compute bytes to 16bytes boundary. */ - -.Lfast_loop: - vl %v16,0(%r1,%r2) /* Load search-string. */ - vfaezbs %v16,%v16,%v17,8 /* Find first element in v16 - unequal to any in v17 - or first zero element. */ - jno .Lfast_loop_found - vl %v16,16(%r1,%r2) - vfaezbs %v16,%v16,%v17,8 - jno .Lfast_loop_found16 - vl %v16,32(%r1,%r2) - vfaezbs %v16,%v16,%v17,8 - jno .Lfast_loop_found32 - vl %v16,48(%r1,%r2) - vfaezbs %v16,%v16,%v17,8 - jno .Lfast_loop_found48 - - aghi %r1,64 - j .Lfast_loop /* Loop if no element was unequal to accept - and not zero. */ - - /* Found unequal or zero element. */ -.Lfast_loop_found48: - aghi %r1,16 -.Lfast_loop_found32: - aghi %r1,16 -.Lfast_loop_found16: - aghi %r1,16 -.Lfast_loop_found: - vlgvb %r0,%v16,7 /* Load byte index of found element. */ - algrk %r2,%r1,%r0 /* And add it to current len. */ - br %r14 - - - /* - Search s for accept in multiple vregs - ------------------------------------- - */ -.Lslow: - /* Save registers. */ - vlvgg %v30,%r6,0 - vlvgp %v31,%r8,%r9 - lghi %r1,0 /* current_len = 0. */ - - /* Accept in v17 without zero. */ - vlr %v19,%v17 /* Save first acc-part for a fast reload. */ - vzero %v20 /* Zero for preparing acc-vector. */ - - /* Align s to 16 byte. */ - risbg %r0,%r2,60,128+63,0 /* Test if s is aligned and - %r0 = bits 60-63 'and' 15 */ - je .Lslow_loop_str /* If s is aligned, loop aligned */ - lghi %r4,15 - slr %r4,%r0 /* Compute highest index to load (15-x). */ - vll %v16,%r4,0(%r2) /* Load up to 16byte boundary (vll needs - highest index, left bytes are 0). */ - ahi %r4,1 /* Work with loaded byte count. */ - vzero %v21 /* Zero out global mask. */ - lghi %r5,0 /* Set current len of accept-string to zero. */ - vfenezb %v18,%v16,%v16 /* Find zero in current string-part. */ - lghi %r8,0 /* There is no zero in first accept-part. */ - vlgvb %r6,%v18,7 /* Load byte index of zero or 16 - if there is no zero. */ - clr %r4,%r6 /* cc==1 if loaded byte count < zero-index. */ - locrl %r6,%r4 /* Load on cc==1. */ - j .Lslow_loop_acc - - /* Process s in 16byte aligned loop. */ -.Lslow_next_str: - vlr %v17,%v19 /* Load first part of accept (no zero). */ - algfr %r1,%r4 /* Add loaded byte count to current len. */ -.Lslow_loop_str: - vl %v16,0(%r1,%r2) /* Load search-string. */ - lghi %r4,16 /* Loaded byte count is 16. */ - vzero %v21 /* Zero out global mask. */ - lghi %r5,0 /* Set current len of accept-string to zero. */ - vfenezb %v18,%v16,%v16 /* Find zero in current string-part. */ - lghi %r8,0 /* There is no zero in first accept-part. */ - vlgvb %r6,%v18,7 /* Load byte index of zero or 16 if no zero. */ - -.Lslow_loop_acc: - vfaeb %v22,%v16,%v17,4 /* Create matching-mask (1 in mask -> - character matches any accepted character in - this accept-string-part) IN=0, RT=1. */ - vo %v21,%v21,%v22 /* global-mask = global- | matching-mask. */ - vfenezb %v18,%v21,%v21 /* Find first zero in global-mask. */ - vlgvb %r0,%v18,7 /* Get first found zero-index - (= first mismatch). */ - clrjl %r0,%r6,.Lslow_next_acc /* Mismatch-index < min(lbc,zero-index) - -> Process this string-part - with next acc-part. */ - clrjhe %r0,%r4,.Lslow_next_str /* Found-index >= loaded byte count - -> All loaded bytes are matching - any accept-character - and are not zero. */ - /* All bytes are matching any characters in accept-string - and search-string is fully processed (found-index == zero-index) */ -.Lslow_add_lbc_end: - algrk %r2,%r1,%r0 /* Add matching characters to current_len. */ - /* Restore registers. */ - vlgvg %r6,%v30,0 - vlgvg %r8,%v31,0 - vlgvg %r9,%v31,1 - br %r14 - - - -.Lslow_next_acc: - clijh %r8,0,.Lslow_add_lbc_end /* There was a zero in last acc-part - -> Add found index to current len - and end. */ - vlbb %v17,16(%r5,%r3),6 /* Load next accept part. */ - aghi %r5,16 /* Add current_len of accept-string. */ - lcbb %r9,0(%r5,%r3),6 /* Get loaded byte count of accept-string. */ - jo .Lslow_next_acc_onbb /* Jump away if accept-string is - on block-boundary. */ -.Lslow_next_acc_notonbb: - vistrbs %v17,%v17 /* Fill with zeros after first zero. */ - jo .Lslow_loop_acc /* No zero found -> no preparation needed. */ - -.Lslow_next_acc_prepare_zero: - /* Zero in accept-part: fill zeros with first-accept-character. */ - vlgvb %r8,%v17,0 /* Load first element of acc-part. */ - clije %r8,0,.Lslow_add_lbc_end /* End if zero is first character - in this part of accept-string. */ - /* r8>0 -> zero found in this acc-part. */ - vrepb %v18,%v17,0 /* Replicate first char accross all chars. */ - vceqb %v22,%v20,%v17 /* Create a mask (v22) of null chars - by comparing with 0 (v20). */ - vsel %v17,%v18,%v17,%v22 /* Replace null chars with first char. */ - j .Lslow_loop_acc /* Accept part is prepared -> process. */ - -.Lslow_next_acc_onbb: - vfenezb %v18,%v17,%v17 /* Find zero in loaded bytes of accept part. */ - vlgvb %r8,%v18,7 /* Load byte index of zero. */ - clrjl %r8,%r9,.Lslow_next_acc_notonbb /* Found a zero in loaded bytes - -> Prepare vr. */ - vl %v17,0(%r5,%r3) /* Load over boundary ... */ - lghi %r8,0 /* r8=0 -> no zero in this part of acc, - Check for zero is in jump-target. */ - j .Lslow_next_acc_notonbb /* ... and search for zero in - fully loaded vreg again. */ -END(__strspn_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/strspn.c b/sysdeps/s390/multiarch/strspn.c deleted file mode 100644 index b9cf295fb3..0000000000 --- a/sysdeps/s390/multiarch/strspn.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Multiple versions of strspn. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define strspn __redirect_strspn -/* Omit the strspn inline definitions because it would redefine strspn. */ -# define __NO_STRING_INLINES -# include -# undef strspn -# include - -s390_vx_libc_ifunc2_redirected (__redirect_strspn, __strspn, strspn) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/utf16-utf32-z9.c b/sysdeps/s390/multiarch/utf16-utf32-z9.c deleted file mode 100644 index 6e64169835..0000000000 --- a/sysdeps/s390/multiarch/utf16-utf32-z9.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Conversion between UTF-16 and UTF-32 BE/internal - multiarch s390 version. - - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef FROM_LOOP -#define FROM_LOOP __from_utf16_loop -#undef TO_LOOP -#define TO_LOOP __to_utf16_loop - -#define _SINGLE_NAME(NAME) NAME##_single -#define SINGLE_NAME(NAME) _SINGLE_NAME(NAME) -strong_alias (SINGLE_NAME (FROM_LOOP_DEFAULT), SINGLE_NAME (FROM_LOOP)) -strong_alias (SINGLE_NAME (TO_LOOP_DEFAULT), SINGLE_NAME (TO_LOOP)) - -/* Generate ifunc'ed loop functions for FROM/TO_LOOP. */ -s390_libc_ifunc_expr (FROM_LOOP_DEFAULT, FROM_LOOP, - (HAVE_FROM_VX && (hwcap & HWCAP_S390_VX)) - ? FROM_LOOP_VX - : FROM_LOOP_DEFAULT); - -s390_libc_ifunc_expr (TO_LOOP_DEFAULT, TO_LOOP, - (HAVE_TO_VX && (hwcap & HWCAP_S390_VX)) - ? TO_LOOP_VX - : TO_LOOP_DEFAULT); - -#include diff --git a/sysdeps/s390/multiarch/utf8-utf16-z9.c b/sysdeps/s390/multiarch/utf8-utf16-z9.c deleted file mode 100644 index b55ef1aaec..0000000000 --- a/sysdeps/s390/multiarch/utf8-utf16-z9.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Conversion between UTF-8 and UTF-16 - multiarch s390 version. - - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef FROM_LOOP -#define FROM_LOOP __from_utf8_loop -#undef TO_LOOP -#define TO_LOOP __to_utf8_loop - -#define _SINGLE_NAME(NAME) NAME##_single -#define SINGLE_NAME(NAME) _SINGLE_NAME(NAME) -strong_alias (SINGLE_NAME (FROM_LOOP_DEFAULT), SINGLE_NAME (FROM_LOOP)) -strong_alias (SINGLE_NAME (TO_LOOP_DEFAULT), SINGLE_NAME (TO_LOOP)) - -/* Generate ifunc'ed loop functions for FROM/TO_LOOP. */ -s390_libc_ifunc_expr (FROM_LOOP_DEFAULT, FROM_LOOP, - (HAVE_FROM_VX && (hwcap & HWCAP_S390_VX)) - ? FROM_LOOP_VX - : (HAVE_FROM_CU && (hwcap & HWCAP_S390_ZARCH - && hwcap & HWCAP_S390_HIGH_GPRS - && hwcap & HWCAP_S390_ETF3EH)) - ? FROM_LOOP_CU - : FROM_LOOP_DEFAULT); - -s390_libc_ifunc_expr (TO_LOOP_DEFAULT, TO_LOOP, - (HAVE_TO_VX && (hwcap & HWCAP_S390_VX)) - ? TO_LOOP_VX - : TO_LOOP_DEFAULT); - -#include diff --git a/sysdeps/s390/multiarch/utf8-utf32-z9.c b/sysdeps/s390/multiarch/utf8-utf32-z9.c deleted file mode 100644 index faf1f46aa9..0000000000 --- a/sysdeps/s390/multiarch/utf8-utf32-z9.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Conversion between UTF-8 and UTF-32 - multiarch s390 version. - - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef FROM_LOOP -#define FROM_LOOP __from_utf8_loop -#undef TO_LOOP -#define TO_LOOP __to_utf8_loop - -#define _SINGLE_NAME(NAME) NAME##_single -#define SINGLE_NAME(NAME) _SINGLE_NAME(NAME) -strong_alias (SINGLE_NAME (FROM_LOOP_DEFAULT), SINGLE_NAME (FROM_LOOP)) -strong_alias (SINGLE_NAME (TO_LOOP_DEFAULT), SINGLE_NAME (TO_LOOP)) - -/* Generate ifunc'ed loop functions for FROM/TO_LOOP. */ -s390_libc_ifunc_expr (FROM_LOOP_DEFAULT, FROM_LOOP, - (HAVE_FROM_VX && (hwcap & HWCAP_S390_VX)) - ? FROM_LOOP_VX - : (HAVE_FROM_CU && (hwcap & HWCAP_S390_ZARCH - && hwcap & HWCAP_S390_HIGH_GPRS - && hwcap & HWCAP_S390_ETF3EH)) - ? FROM_LOOP_CU - : FROM_LOOP_DEFAULT); - -s390_libc_ifunc_expr (TO_LOOP_DEFAULT, TO_LOOP, - (HAVE_TO_VX && (hwcap & HWCAP_S390_VX)) - ? TO_LOOP_VX - : TO_LOOP_DEFAULT); - -#include diff --git a/sysdeps/s390/multiarch/wcpcpy-c.c b/sysdeps/s390/multiarch/wcpcpy-c.c deleted file mode 100644 index 6eadde5441..0000000000 --- a/sysdeps/s390/multiarch/wcpcpy-c.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Default wcslen implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCPCPY __wcpcpy_c - -# include -extern __typeof (__wcpcpy) __wcpcpy_c; -# include -#endif diff --git a/sysdeps/s390/multiarch/wcpcpy-vx.S b/sysdeps/s390/multiarch/wcpcpy-vx.S deleted file mode 100644 index 73b2670786..0000000000 --- a/sysdeps/s390/multiarch/wcpcpy-vx.S +++ /dev/null @@ -1,114 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcpcpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* wchar_t * wcpcpy (const wchar_t *dest, const wchar_t *src) - Copy string src to dest returning a pointer to its end. - - Register usage: - -r0=border-len for switching to vector-instructions - -r1=tmp - -r2=dest and return value - -r3=src - -r4=tmp - -r5=current_len - -v16=part of src - -v17=index of zero - -v18=part of src -*/ -ENTRY(__wcpcpy_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - vlbb %v16,0(%r3),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r3),6 /* Get bytes to 4k-byte boundary or 16. */ - - tmll %r3,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - vfenezf %v17,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r5,%v17,7 /* Load zero index or 16 if not found. */ - clrjl %r5,%r1,.Lfound_align /* If found zero within loaded bytes, - copy bytes before and return. */ - - /* Align s to 16 byte. */ - risbgn %r4,%r3,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,15 /* current_len = 15. */ - slr %r5,%r4 /* Compute highest index to 16byte boundary. */ - - vstl %v16,%r5,0(%r2) /* Copy loaded characters - no zero. */ - ahi %r5,1 /* Start loop at next character. */ - - /* Find zero in 16byte aligned loop. */ -.Lloop: - vl %v16,0(%r5,%r3) /* Load s. */ - vfenezfs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound_v16_0 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Store previous part without zero to dst. */ - vfenezfs %v17,%v18,%v18 - je .Lfound_v18_16 - vl %v16,32(%r5,%r3) - vst %v18,16(%r5,%r2) - vfenezfs %v17,%v16,%v16 - je .Lfound_v16_32 - vl %v18,48(%r5,%r3) - vst %v16,32(%r5,%r2) - vfenezfs %v17,%v18,%v18 - je .Lfound_v18_48 - vst %v18,48(%r5,%r2) - - aghi %r5,64 - j .Lloop /* No zero found -> loop. */ - -.Lfound_v16_32: - aghi %r5,32 -.Lfound_v16_0: - la %r3,0(%r5,%r2) - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - aghi %r1,3 /* Also copy remaining bytes of zero. */ - vstl %v16,%r1,0(%r3) /* Copy characters including zero. */ - lay %r2,-3(%r1,%r3) /* Return pointer to zero. */ - br %r14 - -.Lfound_v18_48: - aghi %r5,32 -.Lfound_v18_16: - la %r3,16(%r5,%r2) - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - aghi %r1,3 /* Also copy remaining bytes of zero. */ - vstl %v18,%r1,0(%r3) /* Copy characters including zero. */ - lay %r2,-3(%r1,%r3) /* Return pointer to zero. */ - br %r14 - -.Lfound_align: - aghi %r5,3 /* Also copy remaining bytes of zero. */ - vstl %v16,%r5,0(%r2) /* Copy characters including zero. */ - lay %r2,-3(%r5,%r2) /* Return pointer to zero. */ - br %r14 - -.Lfallback: - jg __wcpcpy_c -END(__wcpcpy_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcpcpy.c b/sysdeps/s390/multiarch/wcpcpy.c deleted file mode 100644 index 79d1641606..0000000000 --- a/sysdeps/s390/multiarch/wcpcpy.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Multiple versions of wcpcpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc (__wcpcpy) -weak_alias (__wcpcpy, wcpcpy) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcpncpy-c.c b/sysdeps/s390/multiarch/wcpncpy-c.c deleted file mode 100644 index 7cb834bba8..0000000000 --- a/sysdeps/s390/multiarch/wcpncpy-c.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Default wcsncpy implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCPNCPY __wcpncpy_c - -# include -extern __typeof (__wcpncpy) __wcpncpy_c; -# include -#endif diff --git a/sysdeps/s390/multiarch/wcpncpy-vx.S b/sysdeps/s390/multiarch/wcpncpy-vx.S deleted file mode 100644 index 6a1b587f0e..0000000000 --- a/sysdeps/s390/multiarch/wcpncpy-vx.S +++ /dev/null @@ -1,222 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcpncpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* wchar_t * wcpncpy (wchar_t *dest, const wchar_t *src, size_t n) - Copies at most n characters of string src to dest - returning a pointer to its end or dest+n - if src is smaller than n. - - Register usage: - -%r0 = return value - -%r1 = zero byte index - -%r2 = curr dst pointer - -%r3 = curr src pointer - -%r4 = n - -%r5 = current_len - -%r6 = loaded bytes - -%r7 = border, tmp -*/ -ENTRY(__wcpncpy_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r4,%r4 -# endif /* !defined __s390x__ */ - - clgfi %r4,0 - ber %r14 /* Nothing to do, if n == 0. */ - - vlbb %v16,0(%r3),6 /* Load s until next 4k-byte boundary. */ - - tmll %r3,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - vlvgp %v31,%r6,%r7 /* Save registers. */ - lghi %r5,0 /* current_len = 0. */ - - lcbb %r6,0(%r3),6 /* Get bytes to 4k-byte boundary or 16. */ - llgfr %r6,%r6 /* Convert 32bit to 64bit. */ - - /* Check range of maxlen and convert to byte-count. */ -# ifdef __s390x__ - tmhh %r4,49152 /* Test bit 0 or 1 of maxlen. */ - lghi %r1,-4 /* Max byte-count is 18446744073709551612. */ -# else - tmlh %r4,49152 /* Test bit 0 or 1 of maxlen. */ - llilf %r1,4294967292 /* Max byte-count is 4294967292. */ -# endif /* !__s390x__ */ - sllg %r4,%r4,2 /* Convert character-count to byte-count. */ - locgrne %r4,%r1 /* Use max byte-count, if bit 0/1 was one. */ - - la %r0,0(%r4,%r2) /* Save destination pointer + n for return. */ - - clgrjle %r4,%r6,.Lremaining_v16 /* If n <= loaded-bytes - -> process remaining. */ - - /* n > loaded-byte-count */ - vfenezf %v17,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r1,%v17,7 /* Load zero index or 16 if not found. */ - aghi %r1,3 /* Also copy remaining bytes of zero. */ - clrjl %r1,%r6,.Lfound_v16_store /* Found zero within loaded bytes, - copy and return. */ - - /* Align s to 16 byte. */ - risbgn %r7,%r3,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,15 /* current_len = 15. */ - slr %r5,%r7 /* Compute highest index to 16byte boundary. */ - - /* Zero not found and n > loaded-byte-count. */ - vstl %v16,%r5,0(%r2) /* Copy loaded characters - no zero. */ - ahi %r5,1 /* Start loop at next character. */ - - /* Now we are 16byte aligned, so we can load a full vreg - without page fault. */ - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r4,.Lloop64 - - vl %v16,0(%r5,%r3) /* Load s. */ - clgijl %r4,17,.Lremaining_v16 /* If n <=16, - process remaining bytes. */ -.Llt64: - lgr %r7,%r4 - slgfi %r7,16 /* border_len = n - 16. */ - - clgrjhe %r5,%r7,.Lremaining_v16 /* If current_len >= border - then process remaining bytes. */ - vfenezfs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound_v16 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Store previous part without zero to dst. */ - aghi %r5,16 - - clgrjhe %r5,%r7,.Lremaining_v18 - vfenezfs %v17,%v18,%v18 - je .Lfound_v18 - vl %v16,16(%r5,%r3) - vst %v18,0(%r5,%r2) - aghi %r5,16 - - clgrjhe %r5,%r7,.Lremaining_v16 - vfenezfs %v17,%v16,%v16 - je .Lfound_v16 - vl %v18,16(%r5,%r3) - vst %v16,0(%r5,%r2) - aghi %r5,16 - -.Lremaining_v18: - vlr %v16,%v18 -.Lremaining_v16: - /* v16 contains the remaining bytes [1...16]. - Store remaining bytes and append string-termination. */ - vfenezf %v17,%v16,%v16 /* Find element not equal with zero search. */ - slgrk %r7,%r4,%r5 /* Remaining bytes = maxlen - current_len */ - aghi %r7,-1 /* vstl needs highest index. */ - la %r2,0(%r5,%r2) /* vstl has no index register. */ - vlgvb %r1,%v17,7 /* Load zero index or 16 if not found. */ - aghi %r1,3 /* Also copy remaining bytes of zero. */ - /* Zero in remaining bytes? -> jump away (zero-index <= max-index). */ - clrjle %r1,%r7,.Lfound_v16_store - vstl %v16,%r7,0(%r2) /* Store remaining bytes without null - termination! */ -.Lend: - /* Restore saved registers. */ - vlgvg %r6,%v31,0 - vlgvg %r7,%v31,1 - lgr %r2,%r0 /* Load saved dest-ptr. */ - br %r14 - -.Lfound_v16_32: - aghi %r5,32 - j .Lfound_v16 -.Lfound_v18_48: - aghi %r5,32 -.Lfound_v18_16: - aghi %r5,16 -.Lfound_v18: - vlr %v16,%v18 -.Lfound_v16: - /* v16 contains a zero. Store remaining bytes to zero. current_len - has not reached border, thus checking for n is not needed! */ - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - la %r2,0(%r5,%r2) /* vstl has no support for index-register. */ - aghi %r1,3 /* Also copy remaining bytes of zero. */ -.Lfound_v16_store: - vstl %v16,%r1,0(%r2) /* Copy characters including zero. */ - /* Fill remaining bytes with zero - remaining byte count always > 0. */ - algr %r5,%r1 /* Remaining bytes (=%r4) = ... */ - slgr %r4,%r5 /* = n - (currlen + zero_index + 1) */ - la %r2,0(%r1,%r2) /* Pointer to zero. start filling beyond. */ - lay %r0,-3(%r2) /* Save return-pointer to found zero. */ - clgije %r4,1,.Lend /* Skip zero-filling, if found-zero is last - possible character. - (1 is substracted from r4 below!). */ - aghi %r4,-2 /* mvc with exrl needs count - 1. - (additional -1, see remaining bytes above) */ - srlg %r6,%r4,8 /* Split into 256 byte blocks. */ - ltgr %r6,%r6 - je .Lzero_lt256 -.Lzero_loop256: - mvc 1(256,%r2),0(%r2) /* Fill 256 zeros at once. */ - la %r2,256(%r2) - brctg %r6,.Lzero_loop256 /* Loop until all blocks are processed. */ -.Lzero_lt256: - exrl %r4,.Lmvc_lt256 - j .Lend -.Lmvc_lt256: - mvc 1(1,%r2),0(%r2) - - /* Find zero in 16byte aligned loop. */ -.Lloop64: - vl %v16,0(%r5,%r3) - vfenezfs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound_v16 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Store previous part without zero to dst. */ - vfenezfs %v17,%v18,%v18 - je .Lfound_v18_16 - vl %v16,32(%r5,%r3) - vst %v18,16(%r5,%r2) - vfenezfs %v17,%v16,%v16 - je .Lfound_v16_32 - vl %v18,48(%r5,%r3) - vst %v16,32(%r5,%r2) - vfenezfs %v17,%v18,%v18 - je .Lfound_v18_48 - vst %v18,48(%r5,%r2) - - aghi %r5,64 - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r4,.Lloop64 - - vl %v16,0(%r5,%r3) /* Load s. */ - j .Llt64 - -.Lfallback: - jg __wcpncpy_c -END(__wcpncpy_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcpncpy.c b/sysdeps/s390/multiarch/wcpncpy.c deleted file mode 100644 index 1a19a9939a..0000000000 --- a/sysdeps/s390/multiarch/wcpncpy.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Multiple versions of wcpncpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc (__wcpncpy) -weak_alias (__wcpncpy, wcpncpy) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcscat-c.c b/sysdeps/s390/multiarch/wcscat-c.c deleted file mode 100644 index ef7c000455..0000000000 --- a/sysdeps/s390/multiarch/wcscat-c.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Default wcscat implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCSCAT __wcscat_c - -# include -extern __typeof (__wcscat) __wcscat_c; -# include -#endif diff --git a/sysdeps/s390/multiarch/wcscat-vx.S b/sysdeps/s390/multiarch/wcscat-vx.S deleted file mode 100644 index 604a849906..0000000000 --- a/sysdeps/s390/multiarch/wcscat-vx.S +++ /dev/null @@ -1,175 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcscat. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* wchar_t * wcscat (wchar_t *dest, const wchar_t *src) - Concatenate two strings. - - Register usage: - -r0=saved dest pointer for return - -r1=tmp - -r2=dest - -r3=src - -r4=tmp - -r5=current_len - -v16=part of src - -v17=index of zero - -v18=part of src -*/ -ENTRY(__wcscat_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - /* __wcslen_c can handle non 4byte aligned pointers, - but __wcscpy_c not. Thus if either src or dest is - not 4byte aligned, use __wcscat_c. */ - tmll %r2,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - tmll %r3,3 /* Test if src is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - lgr %r0,%r2 /* Save destination pointer for return. */ - - /* WCSLEN - r1 = loaded bytes (tmp) - r4 = zero byte index (tmp) - r2 = dst - */ - - vfenezf %v16,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r5,%v16,7 /* Load zero index or 16 if not found. */ - clrjl %r5,%r1,.Llen_end /* Found zero within loaded bytes, end. */ - - /* Align s to 16 byte. */ - risbgn %r1,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 /* current_len = 16. */ - slr %r5,%r1 /* Compute bytes to 16bytes boundary. */ - - /* Find zero in 16byte aligned loop. */ -.Llen_loop: - vl %v16,0(%r5,%r2) /* Load s. */ - vfenezfs %v16,%v16,%v16 /* Find element not equal with zero search. */ - je .Llen_found /* Jump away if zero was found. */ - vl %v16,16(%r5,%r2) - vfenezfs %v16,%v16,%v16 - je .Llen_found16 - vl %v16,32(%r5,%r2) - vfenezfs %v16,%v16,%v16 - je .Llen_found32 - vl %v16,48(%r5,%r2) - vfenezfs %v16,%v16,%v16 - je .Llen_found48 - - aghi %r5,64 - j .Llen_loop /* No zero -> loop. */ - -.Llen_found48: - aghi %r5,16 -.Llen_found32: - aghi %r5,16 -.Llen_found16: - aghi %r5,16 -.Llen_found: - vlgvb %r4,%v16,7 /* Load byte index of zero. */ - algr %r5,%r4 - -.Llen_end: - /* WCSCPY - %r1 = loaded bytes (tmp) - %r4 = zero byte index (tmp) - %r3 = curr src pointer - %r2 = curr dst pointer - */ - la %r2,0(%r5,%r2) /* strcpy at end of dst-string. */ - - vlbb %v16,0(%r3),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r3),6 /* Get bytes to 4k-byte boundary or 16. */ - - vfenezf %v17,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r5,%v17,7 /* Load zero index or 16 if not found. */ - clrjl %r5,%r1,.Lcpy_found_align /* If found zero within loaded bytes, - copy bytes before and return. */ - - /* Align s to 16 byte. */ - risbgn %r4,%r3,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,15 /* current_len = 15. */ - slr %r5,%r4 /* Compute highest index to 16byte boundary. */ - - vstl %v16,%r5,0(%r2) /* Copy loaded characters - no zero. */ - ahi %r5,1 /* Start loop at next character. */ - - /* Find zero in 16byte aligned loop. */ -.Lcpy_loop: - vl %v16,0(%r5,%r3) /* Load s. */ - vfenezfs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lcpy_found_v16_0 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Save previous part without zero to dst. */ - vfenezfs %v17,%v18,%v18 - je .Lcpy_found_v18_16 - vl %v16,32(%r5,%r3) - vst %v18,16(%r5,%r2) - vfenezfs %v17,%v16,%v16 - je .Lcpy_found_v16_32 - vl %v18,48(%r5,%r3) - vst %v16,32(%r5,%r2) - vfenezfs %v17,%v18,%v18 - je .Lcpy_found_v18_48 - vst %v18,48(%r5,%r2) - - aghi %r5,64 - j .Lcpy_loop /* No zero -> loop. */ - -.Lcpy_found_v16_32: - aghi %r5,32 -.Lcpy_found_v16_0: - la %r4,0(%r5,%r2) - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - aghi %r1,3 /* Also copy remaining bytes of zero. */ - vstl %v16,%r1,0(%r4) /* Copy characters including zero. */ - lgr %r2,%r0 /* Load saved dest-ptr. */ - br %r14 - -.Lcpy_found_v18_48: - aghi %r5,32 -.Lcpy_found_v18_16: - la %r4,16(%r5,%r2) - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - aghi %r1,3 /* Also copy remaining bytes of zero. */ - vstl %v18,%r1,0(%r4) /* Copy characters including zero. */ - lgr %r2,%r0 /* Load saved dest-ptr. */ - br %r14 - -.Lcpy_found_align: - aghi %r5,3 /* Also copy remaining bytes of found zero. */ - vstl %v16,%r5,0(%r2) /* Copy characters including zero. */ - lgr %r2,%r0 /* Load saved dest-ptr. */ - br %r14 -.Lfallback: - jg __wcscat_c -END(__wcscat_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcscat.c b/sysdeps/s390/multiarch/wcscat.c deleted file mode 100644 index 2e7fdedf22..0000000000 --- a/sysdeps/s390/multiarch/wcscat.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Multiple versions of wcscat. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc (__wcscat) -weak_alias (__wcscat, wcscat) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcschr-c.c b/sysdeps/s390/multiarch/wcschr-c.c deleted file mode 100644 index b084983dd8..0000000000 --- a/sysdeps/s390/multiarch/wcschr-c.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Default wcschr implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCSCHR __wcschr_c - -# include -extern __typeof (__wcschr) __wcschr_c; -# undef weak_alias -# define weak_alias(name, alias) -# ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__wcschr_c, __GI_wcschr, __wcschr_c); \ - strong_alias (__wcschr_c, __wcschr_c_1); \ - __hidden_ver1 (__wcschr_c_1, __GI___wcschr, __wcschr_c_1); -# undef libc_hidden_weak -# define libc_hidden_weak(name) -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcschr-vx.S b/sysdeps/s390/multiarch/wcschr-vx.S deleted file mode 100644 index 5a04d44dde..0000000000 --- a/sysdeps/s390/multiarch/wcschr-vx.S +++ /dev/null @@ -1,103 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcschr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* wchar_t *wcschr (const wchar_t *s, wchar_t c) - Locate character in string. - - Register usage: - -r1=tmp - -r2=s - -r3=c - -r4=tmp - -r5=current_len - -v16=part of s - -v17=index of unequal - -v18=replicated c -*/ -ENTRY(__wcschr_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - tmll %r2,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - lghi %r5,0 /* current_len = 0. */ - - vlvgf %v18,%r3,0 /* Generate vector which elements are all c. */ - vrepf %v18,%v18,0 - - vfeezfs %v16,%v16,%v18 /* Find element equal with zero search. */ - vlgvb %r4,%v16,7 /* Load byte index of character or zero. */ - clrjl %r4,%r1,.Lfound /* Return if c/zero is in loaded bytes. */ - - /* Align s to 16 byte. */ - risbgn %r4,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 /* current_len = 16. */ - slr %r5,%r4 /* Compute bytes to 16bytes boundary. */ - - /* Find c/zero in 16byte aligned loop */ -.Lloop: - vl %v16,0(%r5,%r2) /* Load s. */ - vfeezfs %v16,%v16,%v18 /* Find element equal with zero search. */ - jno .Lfound /* Found c/zero (cc=0|1|2). */ - vl %v16,16(%r5,%r2) - vfeezfs %v16,%v16,%v18 - jno .Lfound16 - vl %v16,32(%r5,%r2) - vfeezfs %v16,%v16,%v18 - jno .Lfound32 - vl %v16,48(%r5,%r2) - vfeezfs %v16,%v16,%v18 - jno .Lfound48 - - aghi %r5,64 - j .Lloop /* No character and no zero -> loop. */ - -.Lfound48: - la %r5,16(%r5) /* Use la since aghi would clobber cc. */ -.Lfound32: - la %r5,16(%r5) -.Lfound16: - la %r5,16(%r5) -.Lfound: - je .Lzero /* Found zero, but no c before that zero. */ - -.Lcharacter: - vlgvb %r4,%v16,7 /* Load byte index of character. */ - algr %r5,%r4 - la %r2,0(%r5,%r2) /* Return pointer to character. */ - br %r14 - -.Lzero: - clije %r3,0,.Lcharacter /* Found zero and c is zero. */ - lghi %r2,0 /* Return null if character not found. */ - br %r14 -.Lfallback: - jg __wcschr_c -END(__wcschr_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcschr.c b/sysdeps/s390/multiarch/wcschr.c deleted file mode 100644 index 59e5df5706..0000000000 --- a/sysdeps/s390/multiarch/wcschr.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of wcschr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define wcschr __redirect_wcschr -# define __wcschr __redirect___wcschr -# include -# undef wcschr -# undef __wcschr -# include - -s390_vx_libc_ifunc_redirected (__redirect___wcschr, __wcschr) -weak_alias (__wcschr, wcschr) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcschrnul-c.c b/sysdeps/s390/multiarch/wcschrnul-c.c deleted file mode 100644 index 095ea1202c..0000000000 --- a/sysdeps/s390/multiarch/wcschrnul-c.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Default wcschrnul implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCSCHRNUL __wcschrnul_c - -# include -extern __typeof (__wcschrnul) __wcschrnul_c; -# include -#endif diff --git a/sysdeps/s390/multiarch/wcschrnul-vx.S b/sysdeps/s390/multiarch/wcschrnul-vx.S deleted file mode 100644 index 6aa94823ab..0000000000 --- a/sysdeps/s390/multiarch/wcschrnul-vx.S +++ /dev/null @@ -1,97 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcschrnul. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* wchar_t* wcschrnul (const wchar_t *s, wchar_t c) - Returns pointer to first c or to \0 if c not found. - - Register usage: - -r1=tmp - -r2=s and return pointer - -r3=c - -r4=tmp - -r5=current_len - -v16=part of s - -v18=vector with c replicated in every byte -*/ -ENTRY(__wcschrnul_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - tmll %r2,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - lghi %r5,0 /* current_len = 0. */ - - vlvgf %v18,%r3,0 /* Generate vector which elements are all c. */ - vrepf %v18,%v18,0 - - vfeezfs %v16,%v16,%v18 /* Find element equal with zero search. */ - vlgvb %r4,%v16,7 /* Load byte index of character or zero. */ - clrjl %r4,%r1,.Lfound /* Return if c/zero is in loaded bytes. */ - - /* Align s to 16 byte. */ - risbgn %r4,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 /* current_len = 16. */ - slr %r5,%r4 /* Compute bytes to 16bytes boundary. */ - - /* Find c/zero in 16byte aligned loop */ -.Lloop: - vl %v16,0(%r5,%r2) /* Load s. */ - vfeezfs %v16,%v16,%v18 /* Find element equal with zero search. */ - jno .Lfound /* Found c/zero (cc=0|1|2). */ - vl %v16,16(%r5,%r2) - vfeezfs %v16,%v16,%v18 - jno .Lfound16 - vl %v16,32(%r5,%r2) - vfeezfs %v16,%v16,%v18 - jno .Lfound32 - vl %v16,48(%r5,%r2) - vfeezfs %v16,%v16,%v18 - jno .Lfound48 - - aghi %r5,64 - j .Lloop /* No character and no zero -> loop. */ - - /* Found character or zero */ -.Lfound48: - aghi %r5,16 -.Lfound32: - aghi %r5,16 -.Lfound16: - aghi %r5,16 -.Lfound: - vlgvb %r1,%v16,7 /* Load byte index of character. */ - algr %r5,%r1 - la %r2,0(%r5,%r2) /* Return pointer to character. */ - -.Lend: - br %r14 -.Lfallback: - jg __wcschrnul_c -END(__wcschrnul_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcschrnul.c b/sysdeps/s390/multiarch/wcschrnul.c deleted file mode 100644 index f01ea9f9ac..0000000000 --- a/sysdeps/s390/multiarch/wcschrnul.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Multiple versions of wcschrnul. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc (__wcschrnul) -weak_alias (__wcschrnul, wcschrnul) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcscmp-c.c b/sysdeps/s390/multiarch/wcscmp-c.c deleted file mode 100644 index 7a148f41bb..0000000000 --- a/sysdeps/s390/multiarch/wcscmp-c.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Default wcscmp implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCSCMP __wcscmp_c - -# include -extern __typeof (wcscmp) __wcscmp_c; -# undef weak_alias -# define weak_alias(name, alias) -# ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__wcscmp_c, __GI___wcscmp, __wcscmp_c); -# endif /* SHARED */ -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcscmp-vx.S b/sysdeps/s390/multiarch/wcscmp-vx.S deleted file mode 100644 index 3b92bbd515..0000000000 --- a/sysdeps/s390/multiarch/wcscmp-vx.S +++ /dev/null @@ -1,131 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcscmp. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* int wcscmp (const wchar_t *s1, const wchar_t *s2) - Compare two strings - - Register usage: - -r1=loaded byte count s1 - -r2=s1 - -r3=s2 - -r4=loaded byte coutn s2, tmp - -r5=current_len - -v16=part of s1 - -v17=part of s2 - -v18=index of unequal -*/ -ENTRY(__wcscmp_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - lghi %r5,0 /* current_len = 0. */ - -.Lloop: - vlbb %v16,0(%r5,%r2),6 /* Load s1 to block boundary. */ - vlbb %v17,0(%r5,%r3),6 /* Load s2 to block boundary. */ - lcbb %r1,0(%r5,%r2),6 /* Get loaded byte count of s1. */ - jo .Llt16_1 /* Jump away if vr is not fully loaded. */ - lcbb %r4,0(%r5,%r3),6 - jo .Llt16_2 /* Jump away if vr is not fully loaded. */ - /* Both vrs are fully loaded. */ - aghi %r5,16 - vfenezfs %v18,%v16,%v17 /* Compare not equal with zero search. */ - jno .Lfound - - vlbb %v16,0(%r5,%r2),6 - vlbb %v17,0(%r5,%r3),6 - lcbb %r1,0(%r5,%r2),6 - jo .Llt16_1 - lcbb %r4,0(%r5,%r3),6 - jo .Llt16_2 - aghi %r5,16 - vfenezfs %v18,%v16,%v17 - jno .Lfound - - vlbb %v16,0(%r5,%r2),6 - vlbb %v17,0(%r5,%r3),6 - lcbb %r1,0(%r5,%r2),6 - jo .Llt16_1 - lcbb %r4,0(%r5,%r3),6 - jo .Llt16_2 - aghi %r5,16 - vfenezfs %v18,%v16,%v17 - jno .Lfound - - vlbb %v16,0(%r5,%r2),6 - vlbb %v17,0(%r5,%r3),6 - lcbb %r1,0(%r5,%r2),6 - jo .Llt16_1 - lcbb %r4,0(%r5,%r3),6 - jo .Llt16_2 - aghi %r5,16 - vfenezfs %v18,%v16,%v17 - jno .Lfound - j .Lloop - -.Lcmp_one_char: - /* At least one of both strings is not 4-byte aligned - and there is no full character before next block-boundary. - Compare one character to get over the boundary and - proceed with normal loop! */ - vlef %v16,0(%r5,%r2),0 /* Load one character. */ - vlef %v17,0(%r5,%r3),0 - lghi %r1,4 /* Loaded byte count is 4. */ - j .Llt_cmp /* Proceed with comparision. */ - -.Llt16_1: - lcbb %r4,0(%r5,%r3),6 /* Get loaded byte count of s2. */ -.Llt16_2: - clr %r1,%r4 - locrh %r1,%r4 /* Get minimum of bytes loaded in s1/2. */ - nill %r1,65532 /* Align bytes loaded to full characters. */ - jz .Lcmp_one_char /* Jump away if no full char is available. */ -.Llt_cmp: - algfr %r5,%r1 /* Add smallest loaded bytes to current_len. */ - vfenezfs %v18,%v16,%v17 /* Compare not equal with zero search. */ - vlgvb %r4,%v18,7 /* Get not equal index or 16 if all equal. */ - clrjl %r4,%r1,.Lfound /* Jump away if miscompare is within loaded - bytes. */ - j .Lloop - -.Lfound: - /* vfenezf found an unequal element or zero. - This instruction compares unsigned words, but wchar_t is signed. - Thus we have to compare the found element again. */ - vlgvb %r4,%v18,7 /* Extract not equal byte-index, */ - srl %r4,2 /* Convert it to character-index. */ - vlgvf %r3,%v16,0(%r4) /* Load character-values. */ - vlgvf %r4,%v17,0(%r4) - cr %r3,%r4 - je .Lend_equal - lghi %r2,1 - lghi %r1,-1 - locgrl %r2,%r1 - br %r14 -.Lend_equal: - lghi %r2,0 - br %r14 -END(__wcscmp_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcscmp.c b/sysdeps/s390/multiarch/wcscmp.c deleted file mode 100644 index a5c2b69a29..0000000000 --- a/sysdeps/s390/multiarch/wcscmp.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Multiple versions of wcscmp. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define __wcscmp __redirect___wcscmp -# include -# undef __wcscmp -# include - -s390_vx_libc_ifunc_redirected (__redirect___wcscmp, __wcscmp) -weak_alias (__wcscmp, wcscmp) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcscpy-c.c b/sysdeps/s390/multiarch/wcscpy-c.c deleted file mode 100644 index 342c247a8f..0000000000 --- a/sysdeps/s390/multiarch/wcscpy-c.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Default wcscpy implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCSCPY __wcscpy_c - -# include -extern __typeof (wcscpy) __wcscpy_c; -# include -#endif diff --git a/sysdeps/s390/multiarch/wcscpy-vx.S b/sysdeps/s390/multiarch/wcscpy-vx.S deleted file mode 100644 index a8adc20dea..0000000000 --- a/sysdeps/s390/multiarch/wcscpy-vx.S +++ /dev/null @@ -1,111 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcscpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* char * wcscpy (const wchar_t *dest, const wchar_t *src) - Copy string src to dest. - - Register usage: - -r0=border-len for switching to vector-instructions - -r1=tmp - -r2=dest and return value - -r3=src - -r4=tmp - -r5=current_len - -v16=part of src - -v17=index of zero - -v18=part of src -*/ -ENTRY(__wcscpy_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - vlbb %v16,0(%r3),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r3),6 /* Get bytes to 4k-byte boundary or 16. */ - - tmll %r3,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - vfenezf %v17,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r5,%v17,7 /* Load zero index or 16 if not found. */ - clrjl %r5,%r1,.Lfound_align /* If found zero within loaded bytes, - copy bytes before and return. */ - - /* Align s to 16 byte. */ - risbgn %r4,%r3,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,15 /* current_len = 15. */ - slr %r5,%r4 /* Compute highest index to 16byte boundary. */ - - vstl %v16,%r5,0(%r2) /* Copy loaded characters - no zero. */ - ahi %r5,1 /* Start loop at next character. */ - - /* Find zero in 16byte aligned loop. */ -.Lloop: - vl %v16,0(%r5,%r3) /* Load s. */ - vfenezfs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound_v16_0 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Store previous part without zero to dst. */ - vfenezfs %v17,%v18,%v18 - je .Lfound_v18_16 - vl %v16,32(%r5,%r3) - vst %v18,16(%r5,%r2) - vfenezfs %v17,%v16,%v16 - je .Lfound_v16_32 - vl %v18,48(%r5,%r3) - vst %v16,32(%r5,%r2) - vfenezfs %v17,%v18,%v18 - je .Lfound_v18_48 - vst %v18,48(%r5,%r2) - - aghi %r5,64 - j .Lloop /* No zero found -> loop. */ - -.Lfound_v16_32: - aghi %r5,32 -.Lfound_v16_0: - la %r3,0(%r5,%r2) - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - aghi %r1,3 /* Also copy remaining bytes of zero. */ - vstl %v16,%r1,0(%r3) /* Copy characters including zero. */ - br %r14 - -.Lfound_v18_48: - aghi %r5,32 -.Lfound_v18_16: - la %r3,16(%r5,%r2) - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - aghi %r1,3 /* Also copy remaining bytes of zero. */ - vstl %v18,%r1,0(%r3) /* Copy characters including zero. */ - br %r14 - -.Lfound_align: - aghi %r5,3 /* Also copy remaining bytes of zero. */ - vstl %v16,%r5,0(%r2) /* Copy characters including zero. */ - br %r14 - -.Lfallback: - jg __wcscpy_c -END(__wcscpy_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcscpy.c b/sysdeps/s390/multiarch/wcscpy.c deleted file mode 100644 index bd68b1725d..0000000000 --- a/sysdeps/s390/multiarch/wcscpy.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Multiple versions of wcscpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc2 (__wcscpy, wcscpy) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcscspn-c.c b/sysdeps/s390/multiarch/wcscspn-c.c deleted file mode 100644 index 937e1d1963..0000000000 --- a/sysdeps/s390/multiarch/wcscspn-c.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Default wcscscpn implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCSCSPN __wcscspn_c - -# include -extern __typeof (wcscspn) __wcscspn_c; - -# include -#endif diff --git a/sysdeps/s390/multiarch/wcscspn-vx.S b/sysdeps/s390/multiarch/wcscspn-vx.S deleted file mode 100644 index cd528907d6..0000000000 --- a/sysdeps/s390/multiarch/wcscspn-vx.S +++ /dev/null @@ -1,293 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcscspn. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* size_t wcscspn (const wchar_t *s, const wchar_t * reject) - The wcscspn() function calculates the length of the initial segment - of s which consists entirely of characters not in reject. - - This method checks the length of reject string. If it fits entirely - in one vector register, a fast algorithm is used, which does not need - to check multiple parts of accept-string. Otherwise a slower full - check of accept-string is used. - - register overview: - r3: pointer to start of reject-string - r2: pointer to start of search-string - r0: loaded byte count of vlbb search-string - r4: found byte index - r1: current return len - v16: search-string - v17: reject-string - v18: temp-vreg - - ONLY FOR SLOW: - v19: first reject-string - v20: zero for preparing acc-vector - v21: global mask; 1 indicates a match between - search-string-vreg and any reject-character - v22: current mask; 1 indicates a match between - search-string-vreg and any reject-character in current acc-vreg - v30, v31: for re-/storing registers r6, r8, r9 - r5: current len of reject-string - r6: zero-index in search-string or 16 if no zero - or min(zero-index, loaded byte count) - r8: >0, if former reject-string-part contains a zero, - otherwise =0; - r9: loaded byte count of vlbb reject-string -*/ -ENTRY(__wcscspn_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - tmll %r2,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - /* - Check if reject-string fits in one vreg: - ---------------------------------------- - */ - vlbb %v17,0(%r3),0 /* Load reject. */ - lcbb %r0,0(%r3),0 - jo .Lcheck_onbb /* Special case if reject - lays on block-boundary. */ - -.Lcheck_notonbb: - lghi %r1,0 /* Zero out current len. */ - vistrfs %v17,%v17 /* Fill with zeros after first zero. */ - je .Lfast /* Zero found -> reject fits in one vreg. */ - j .Lslow /* No zero -> reject exceeds one vreg. */ - - -.Lcheck_onbb: - /* Reject lays on block-boundary. */ - nill %r0,65532 /* Recognize only fully loaded characters. */ - je .Lcheck_onbb2 /* Reload vr, if we loaded no full wchar_t. */ - vfenezf %v18,%v17,%v17 /* Search zero in loaded reject bytes. */ - vlgvb %r4,%v18,7 /* Get index of zero or 16 if not found. */ - clrjl %r4,%r0,.Lcheck_notonbb /* Zero index < loaded bytes count -> - Reject fits in one vreg; - Fill with zeros and proceed - with FAST. */ -.Lcheck_onbb2: - vl %v17,0(%r3) /* Load reject, which exceeds loaded bytes. */ - j .Lcheck_notonbb /* Check if reject fits in one vreg. */ - - - /* - Search s for reject in one vreg - ------------------------------- - */ -.Lfast: - /* Complete reject-string in v17 and remaining bytes are zero. */ - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r0,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - vfaezfs %v18,%v16,%v17,0 /* Find first element in v16 - unequal to any in v17 - or first zero element. */ - vlgvb %r4,%v18,7 /* Load byte index of found element. */ - clrjl %r4,%r0,.Lfast_loop_found2 /* If found index is within loaded - bytes, return with found element - index (=equal count). */ - - /* Align s to 16 byte. */ - risbgn %r4,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r1,16 /* current_len = 16. */ - slr %r1,%r4 /* Compute bytes to 16bytes boundary. */ - - /* Process s in 16byte aligned loop. */ -.Lfast_loop: - vl %v16,0(%r1,%r2) /* Load search-string. */ - vfaezfs %v18,%v16,%v17,0 /* Find first element in v16 equal to any - in v17 or first zero element. */ - jno .Lfast_loop_found - - vl %v16,16(%r1,%r2) - vfaezfs %v18,%v16,%v17,0 - jno .Lfast_loop_found16 - - vl %v16,32(%r1,%r2) - vfaezfs %v18,%v16,%v17,0 - jno .Lfast_loop_found32 - - vl %v16,48(%r1,%r2) - vfaezfs %v18,%v16,%v17,0 - jno .Lfast_loop_found48 - - aghi %r1,64 - j .Lfast_loop /* Loop if no element was unequal to reject - and not zero. */ - - /* Found equal or zero element. */ -.Lfast_loop_found48: - aghi %r1,16 -.Lfast_loop_found32: - aghi %r1,16 -.Lfast_loop_found16: - aghi %r1,16 -.Lfast_loop_found: - vlgvb %r4,%v18,7 /* Load byte index of found element or zero. */ -.Lfast_loop_found2: - algrk %r2,%r1,%r4 /* Add found index to current len. */ - srlg %r2,%r2,2 /* Convert byte-count to character-count. */ - br %r14 - - - - /* - Search s for reject in multiple vregs - ------------------------------------- - */ -.Lslow: - /* Save registers. */ - vlvgg %v30,%r6,0 - vlvgp %v31,%r8,%r9 - - /* Reject in v17 without zero. */ - vlr %v19,%v17 /* Save first acc-part for a fast reload. */ - vzero %v20 /* Zero for preparing acc-vector. */ - vone %v24 /* One for checking result of former - string-part. */ - - /* Align s to 16 byte. */ - risbg %r4,%r2,60,128+63,0 /* Test if s is aligned and - %r4 = bits 60-63 'and' 15. */ - je .Lslow_loop_str /* If s is aligned, loop aligned. */ - lghi %r0,15 - slr %r0,%r4 /* Compute highest index to load (15-x). */ - vll %v16,%r0,0(%r2) /* Load up to 16byte boundary (vll needs - highest index, remaining bytes are 0). */ - ahi %r0,1 /* Work with loaded byte count. */ - vzero %v21 /* Zero out global mask. */ - lghi %r5,0 /* Set current len of reject-string to zero. */ - vfenezf %v18,%v16,%v16 /* Find zero in current string-part. */ - lghi %r8,0 /* There is no zero in first reject-part. */ - vlgvb %r6,%v18,7 /* Load byte index of zero or 16 if no zero. */ - clije %r6,0,.Lslow_end /* If first element is zero -> return 0. */ - clr %r0,%r6 /* cc==1 if loaded byte count < zero-index. */ - locrl %r6,%r0 /* Load on cc==1; zero-index = lbc. */ - j .Lslow_loop_acc - - - /* Process s in 16byte aligned loop. */ -.Lslow_next_str: - /* Check results of former processed str-part. */ - vfeef %v18,%v21,%v24 /* Find first equal match in global mask - (ones in element). */ - vlgvb %r4,%v18,7 /* Get index of first one (=equal) or 16. */ - /* Equal-index < min(zero-index, loaded byte count) - -> Return pointer to equal element. */ - clrjl %r4,%r6,.Lslow_index_found - /* Zero-index < loaded byte count - -> Former str-part was last str-part - -> Return null */ - clrjl %r6,%r0,.Lslow_end_not_found - - /* All elements are zero (=no match) -> proceed with next str-part. */ - vlr %v17,%v19 /* Load first part of reject (no zero). */ - algfr %r1,%r0 /* Add loaded byte count to current len. */ - -.Lslow_loop_str: - vl %v16,0(%r1,%r2) /* Load search-string. */ - lghi %r0,16 /* Loaded byte count is 16. */ - vzero %v21 /* Zero out global mask. */ - lghi %r5,0 /* Set current len of reject to zero. */ - vfenezf %v18,%v16,%v16 /* Find zero in current string-part. */ - lghi %r8,0 /* There is no zero in first reject-part. */ - vlgvb %r6,%v18,7 /* Load byte index of zero or 16 if no zero. */ - clije %r6,0,.Lslow_end /* If first element is zero (end of string) - -> Return current length. */ - -.Lslow_loop_acc: - vfaef %v22,%v16,%v17,4 /* Create matching-mask (1 in mask -> - Character matches any rejected character in - this reject-string-part) IN=0, RT=1. */ - vlgvf %r4,%v22,0 /* Get result of first element. */ - /* First element is equal to any rejected characters? - (All other parts of reject cannot lead to a match before this one) - -> Return current len, which is pointing to this element. */ - clijh %r4,0,.Lslow_end - vo %v21,%v21,%v22 /* Global-mask = global-|matching-mask. */ - /* Proceed with next acc until end of acc is reached. */ - - -.Lslow_next_acc: - clijh %r8,0,.Lslow_next_str /* There was a zero in last reject-part - -> Add found index to current len - and end. */ - vlbb %v17,16(%r5,%r3),6 /* Load next reject part. */ - aghi %r5,16 /* Increment current len of reject-string. */ - lcbb %r9,0(%r5,%r3),6 /* Get loaded byte count of reject-string. */ - jo .Lslow_next_acc_onbb /* Jump away if reject-string is - on block-boundary. */ -.Lslow_next_acc_notonbb: - vistrfs %v17,%v17 /* Fill with zeros after first zero. */ - jo .Lslow_loop_acc /* No zero found -> no preparation needed. */ - -.Lslow_next_acc_prepare_zero: - /* Zero in reject-part: fill zeros with first-reject-character. */ - vlgvf %r8,%v17,0 /* Load first element of reject-part. */ - clije %r8,0,.Lslow_next_str /* Process next str-part if first - character in this part of reject - is a zero. */ - /* r8>0 -> zero found in this acc-part. */ - vrepf %v18,%v17,0 /* Replicate first char accross all chars. */ - vceqf %v22,%v20,%v17 /* Create a mask (v22) of null chars - by comparing with 0 (v20). */ - vsel %v17,%v18,%v17,%v22 /* Replace null chars with first char. */ - j .Lslow_loop_acc /* Reject-string part is prepared. */ - -.Lslow_next_acc_onbb: - nill %r9,65532 /* Recognize only fully loaded characters. */ - je .Lslow_next_acc_onbb2 /* Reload vr, if no full wchar_t - loaded. */ - vfenezf %v18,%v17,%v17 /* Find zero in loaded bytes of reject part. */ - vlgvb %r8,%v18,7 /* Load byte index of zero. */ - clrjl %r8,%r9,.Lslow_next_acc_notonbb /* Found a zero in loaded bytes - -> Prepare vreg. */ -.Lslow_next_acc_onbb2: - vl %v17,0(%r5,%r3) /* Load over boundary ... */ - lghi %r8,0 /* r8=0 -> no zero in this part of acc, - check for zero is in jump-target. */ - j .Lslow_next_acc_notonbb /* ... and search for zero in - fully loaded vreg again. */ - -.Lslow_end_not_found: - algfr %r1,%r6 /* Add zero-index to current len. */ - j .Lslow_end -.Lslow_index_found: - algfr %r1,%r4 /* Add found index of char to current len. */ -.Lslow_end: - srlg %r2,%r1,2 /* Convert byte-count to character-count. */ - /* Restore registers. */ - vlgvg %r6,%v30,0 - vlgvg %r8,%v31,0 - vlgvg %r9,%v31,1 - br %r14 -.Lfallback: - jg __wcscspn_c -END(__wcscspn_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcscspn.c b/sysdeps/s390/multiarch/wcscspn.c deleted file mode 100644 index f38ed9c7f4..0000000000 --- a/sysdeps/s390/multiarch/wcscspn.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Multiple versions of wcscspn. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc2 (__wcscspn, wcscspn) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcslen-c.c b/sysdeps/s390/multiarch/wcslen-c.c deleted file mode 100644 index 9626a76da5..0000000000 --- a/sysdeps/s390/multiarch/wcslen-c.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Default wcslen implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCSLEN __wcslen_c - -# include -extern __typeof (__wcslen) __wcslen_c; -# include -#endif diff --git a/sysdeps/s390/multiarch/wcslen-vx.S b/sysdeps/s390/multiarch/wcslen-vx.S deleted file mode 100644 index 7539303fbd..0000000000 --- a/sysdeps/s390/multiarch/wcslen-vx.S +++ /dev/null @@ -1,91 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcslen. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* size_t wcslen (const wchar_t *s) - Returns length of string s. - - Register usage: - -r1=bytes to 4k-byte boundary - -r2=s - -r3=tmp - -r4=tmp - -r5=current_len and return_value - -v16=part of s -*/ -ENTRY(__wcslen_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - tmll %r2,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - vfenezf %v16,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r4,%v16,7 /* Load zero index or 16 if not found. */ - clr %r4,%r1 /* If found zero within loaded bytes? */ - locgrl %r2,%r4 /* Then copy return value. */ - jl .Lend /* And return. */ - - /* Align s to 16 byte. */ - risbgn %r3,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 /* current_len = 16. */ - slr %r5,%r3 /* Compute bytes to 16bytes boundary. */ - - /* Find zero in 16byte aligned loop. */ -.Lloop: - vl %v16,0(%r5,%r2) /* Load s. */ - vfenezfs %v16,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound /* Jump away if zero was found. */ - vl %v16,16(%r5,%r2) - vfenezfs %v16,%v16,%v16 - je .Lfound16 - vl %v16,32(%r5,%r2) - vfenezfs %v16,%v16,%v16 - je .Lfound32 - vl %v16,48(%r5,%r2) - vfenezfs %v16,%v16,%v16 - je .Lfound48 - - aghi %r5,64 - j .Lloop /* No zero found -> loop. */ - -.Lfound48: - aghi %r5,16 -.Lfound32: - aghi %r5,16 -.Lfound16: - aghi %r5,16 -.Lfound: - vlgvb %r2,%v16,7 /* Load byte index of zero. */ - algr %r2,%r5 -.Lend: - srlg %r2,%r2,2 /* Convert byte-count to character-count. */ - br %r14 -.Lfallback: - jg __wcslen_c -END(__wcslen_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcslen.c b/sysdeps/s390/multiarch/wcslen.c deleted file mode 100644 index bfb577797e..0000000000 --- a/sysdeps/s390/multiarch/wcslen.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Multiple versions of wcslen. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc (__wcslen) -weak_alias (__wcslen, wcslen) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcsncat-c.c b/sysdeps/s390/multiarch/wcsncat-c.c deleted file mode 100644 index 84b3eb1124..0000000000 --- a/sysdeps/s390/multiarch/wcsncat-c.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Default wcsncat implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCSNCAT __wcsncat_c - -# include -extern __typeof (wcsncat) __wcsncat_c; -# include -#endif diff --git a/sysdeps/s390/multiarch/wcsncat-vx.S b/sysdeps/s390/multiarch/wcsncat-vx.S deleted file mode 100644 index 5c49a1e499..0000000000 --- a/sysdeps/s390/multiarch/wcsncat-vx.S +++ /dev/null @@ -1,265 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcsncat. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* wchar_t * wcsncat (wchar_t *dest, const wchar_t *src, size_t n) - Concatenate two strings - at most n characters of src. - - Register usage: - -r0=saved dest pointer for return - -r1=tmp - -r2=dest - -r3=src - -r4=n - -r5=current_len - -r6=tmp - -r7=tmp - -v16=part of src - -v17=index of zero - -v18=part of src - -v31=register save area for r6, r7 -*/ -ENTRY(__wcsncat_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r4,%r4 -# endif /* !defined __s390x__ */ - - clgfi %r4,0 - ber %r14 /* Nothing to do, if n == 0. */ - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - /* If either src or dest is not 4byte aligned, use __wcsncat_c. */ - tmll %r2,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - tmll %r3,3 /* Test if src is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - lgr %r0,%r2 /* Save destination pointer for return. */ - vlvgp %v31,%r6,%r7 /* Save registers. */ - - /* WCSLEN - %r1 = loaded bytes (tmp) - %r6 = zero byte index (tmp) - %r2 = dst - */ - vfenezf %v16,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r5,%v16,7 /* Load zero index or 16 if not found. */ - clrjl %r5,%r1,.Llen_end /* Found zero within loaded bytes, end. */ - - /* Align s to 16 byte. */ - risbgn %r1,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 /* current_len = 16. */ - slr %r5,%r1 /* Compute bytes to 16bytes boundary. */ - - /* Find zero in 16byte aligned loop. */ -.Llen_loop: - vl %v16,0(%r5,%r2) /* Load s. */ - vfenezfs %v16,%v16,%v16 /* Find element not equal with zero search. */ - je .Llen_found /* Jump away if zero was found. */ - vl %v16,16(%r5,%r2) - vfenezfs %v16,%v16,%v16 - je .Llen_found16 - vl %v16,32(%r5,%r2) - vfenezfs %v16,%v16,%v16 - je .Llen_found32 - vl %v16,48(%r5,%r2) - vfenezfs %v16,%v16,%v16 - je .Llen_found48 - - aghi %r5,64 - j .Llen_loop /* No zero -> loop. */ - -.Llen_found48: - aghi %r5,16 -.Llen_found32: - aghi %r5,16 -.Llen_found16: - aghi %r5,16 -.Llen_found: - vlgvb %r1,%v16,7 /* Load byte index of zero. */ - algr %r5,%r1 - -.Llen_end: - /* WCSNCPY - %r1 = zero byte index (tmp) - %r6 = loaded bytes (tmp) - %r3 = curr src pointer - %r2 = curr dst pointer - %r7 = border, tmp - */ - la %r2,0(%r5,%r2) /* strcpy at end of dst-string. */ - - vlbb %v16,0(%r3),6 /* Load s until next 4k-byte boundary. */ - lcbb %r6,0(%r3),6 /* Get bytes to 4k-byte boundary or 16. */ - llgfr %r6,%r6 /* Convert 32bit to 64bit. */ - - lghi %r5,0 /* current_len = 0. */ - - /* Check range of maxlen and convert to byte-count. */ -# ifdef __s390x__ - tmhh %r4,49152 /* Test bit 0 or 1 of maxlen. */ - lghi %r1,-4 /* Max byte-count is 18446744073709551612. */ -# else - tmlh %r4,49152 /* Test bit 0 or 1 of maxlen. */ - llilf %r1,4294967292 /* Max byte-count is 4294967292. */ -# endif /* !__s390x__ */ - sllg %r4,%r4,2 /* Convert character-count to byte-count. */ - locgrne %r4,%r1 /* Use max byte-count, if bit 0/1 was one. */ - - clgrjle %r4,%r6,.Lcpy_remaining_v16 /* If n <= loaded-bytes - -> process remaining. */ - - /* n > loaded-byte-count. */ - vfenezf %v17,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r1,%v17,7 /* Load zero index or 16 if not found. */ - clrjl %r1,%r6,.Lcpy_found_v16_store /* Found zero within loaded bytes, - copy and return. */ - - /* Align s to 16 byte. */ - risbgn %r1,%r3,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,15 /* current_len = 15. */ - slr %r5,%r1 /* Compute highest index to 16byte boundary. * - - /* Zero not found and maxlen > loaded-byte-count. */ - vstl %v16,%r5,0(%r2) /* Copy loaded characters - no zero. */ - ahi %r5,1 /* Start loop at next character. */ - - /* - Now we are 16byte aligned, so we can load a full vreg - without page fault. - */ - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r4,.Lcpy_loop64 - - vl %v16,0(%r5,%r3) /* Load s. */ - clgijl %r4,17,.Lcpy_remaining_v16 /* If n <=16, - process remaining bytes. */ -.Lcpy_lt64: - lgr %r7,%r4 - slgfi %r7,16 /* border_len = n - 16. */ - - clgrjhe %r5,%r7,.Lcpy_remaining_v16 - vfenezfs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lcpy_found_v16 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Save previous part without zero to dst. */ - aghi %r5,16 - - clgrjhe %r5,%r7,.Lcpy_remaining_v18 - vfenezfs %v17,%v18,%v18 - je .Lcpy_found_v18 - vl %v16,16(%r5,%r3) - vst %v18,0(%r5,%r2) - aghi %r5,16 - - clgrjhe %r5,%r7,.Lcpy_remaining_v16 - vfenezfs %v17,%v16,%v16 - je .Lcpy_found_v16 - vl %v18,16(%r5,%r3) - vst %v16,0(%r5,%r2) - aghi %r5,16 - -.Lcpy_remaining_v18: - vlr %v16,%v18 -.Lcpy_remaining_v16: - /* v16 contains the remaining bytes [1...16]. - Store remaining bytes and append string-termination. */ - vfenezf %v17,%v16,%v16 /* Find element not equal with zero search. */ - slgrk %r7,%r4,%r5 /* Remaining bytes = maxlen - current_len. */ - aghi %r7,-1 /* vstl needs highest index. */ - vlgvb %r1,%v17,7 /* Load zero index or 16 if not found. */ - la %r2,0(%r5,%r2) /* vstl has no index register. */ - /* Zero-index within remaining-bytes, store up to zero and end. */ - clgrjle %r1,%r7,.Lcpy_found_v16_store - vstl %v16,%r7,0(%r2) /* Store remaining bytes. */ - lghi %r1,0 - st %r1,1(%r7,%r2) /* Store string-null-termination beyond n. */ -.Lcpy_end: - /* Restore saved registers. */ - vlgvg %r6,%v31,0 - vlgvg %r7,%v31,1 - lgr %r2,%r0 /* Load saved dest-ptr. */ - br %r14 - -.Lcpy_found_v16_32: - aghi %r5,32 - j .Lcpy_found_v16 -.Lcpy_found_v18_48: - aghi %r5,32 -.Lcpy_found_v18_16: - aghi %r5,16 -.Lcpy_found_v18: - vlr %v16,%v18 -.Lcpy_found_v16: - /* v16 contains a zero. Store remaining bytes to zero. current_len - has not reached border, thus checking for n is not needed! */ - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - la %r2,0(%r5,%r2) -.Lcpy_found_v16_store: - aghi %r1,3 /* Also copy remaining bytes of zero. */ - vstl %v16,%r1,0(%r2) /* Copy characters including zero. */ - j .Lcpy_end - - /* Find zero in 16byte aligned loop. */ -.Lcpy_loop2: - vl %v16,16(%r5,%r3) - vst %v18,0(%r5,%r2) - aghi %r5,16 - -.Lcpy_loop64: - vl %v16,0(%r5,%r3) - vfenezfs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lcpy_found_v16 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Save previous part without zero to dst. */ - vfenezfs %v17,%v18,%v18 - je .Lcpy_found_v18_16 - vl %v16,32(%r5,%r3) - vst %v18,16(%r5,%r2) - vfenezfs %v17,%v16,%v16 - je .Lcpy_found_v16_32 - vl %v18,48(%r5,%r3) - vst %v16,32(%r5,%r2) - vfenezfs %v17,%v18,%v18 - je .Lcpy_found_v18_48 - vst %v18,48(%r5,%r2) - - aghi %r5,64 - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r4,.Lcpy_loop64 - - vl %v16,0(%r5,%r3) /* Load s. */ - j .Lcpy_lt64 - -.Lfallback: - jg __wcsncat_c -END(__wcsncat_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcsncat.c b/sysdeps/s390/multiarch/wcsncat.c deleted file mode 100644 index be545d091d..0000000000 --- a/sysdeps/s390/multiarch/wcsncat.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Multiple versions of wcsncat. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc2 (__wcsncat, wcsncat) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcsncmp-c.c b/sysdeps/s390/multiarch/wcsncmp-c.c deleted file mode 100644 index 72ee85ab7a..0000000000 --- a/sysdeps/s390/multiarch/wcsncmp-c.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Default wcsncmp implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCSNCMP __wcsncmp_c - -# include -extern __typeof (wcsncmp) __wcsncmp_c; -# include -#endif diff --git a/sysdeps/s390/multiarch/wcsncmp-vx.S b/sysdeps/s390/multiarch/wcsncmp-vx.S deleted file mode 100644 index e44c53a1a9..0000000000 --- a/sysdeps/s390/multiarch/wcsncmp-vx.S +++ /dev/null @@ -1,177 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcsncmp. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* int wcsncmp (const wchar_t *s1, const wchar_t *s2, size_t n) - Compare at most n characters of two strings. - - Register usage: - -r0=tmp - -r1=tmp - -r2=s1 - -r3=s2 - -r4=n - -r5=current_len - -v16=part of s1 - -v17=part of s2 - -v18=index of unequal -*/ -ENTRY(__wcsncmp_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r4,%r4 -# endif /* !defined __s390x__ */ - - clgije %r4,0,.Lend_equal /* Nothing to do if n == 0. */ - - /* Check range of n and convert to byte-count. */ -# ifdef __s390x__ - tmhh %r4,49152 /* Test bit 0 or 1 of maxlen. */ - lghi %r1,-4 /* Max byte-count is 18446744073709551612. */ -# else - tmlh %r4,49152 /* Test bit 0 or 1 of maxlen. */ - llilf %r1,4294967292 /* Max byte-count is 4294967292. */ -# endif /* !__s390x__ */ - sllg %r4,%r4,2 /* Convert character-count to byte-count. */ - locgrne %r4,%r1 /* Use max byte-count, if bit 0/1 was one. */ - - /* Check first character without vector load. */ - lghi %r5,4 /* current_len = 4 bytes. */ - /* Check s1/2[0]. */ - lt %r0,0(%r2) - l %r1,0(%r3) - je .Lend_cmp_one_char - crjne %r0,%r1,.Lend_cmp_one_char - -.Lloop: - vlbb %v17,0(%r5,%r3),6 /* Load s2 to block boundary. */ - vlbb %v16,0(%r5,%r2),6 /* Load s1 to block boundary. */ - lcbb %r0,0(%r5,%r2),6 /* Get loaded byte count of s1. */ - jo .Llt16_1 /* Jump away if vector not fully loaded. */ - lcbb %r1,0(%r5,%r3),6 /* Get loaded byte count of s2. */ - jo .Llt16_2 /* Jump away if vector not fully loaded. */ - aghi %r5,16 /* Both vectors are fully loaded. */ - vfenezfs %v18,%v16,%v17 /* Compare not equal with zero search. */ - clgrjhe %r5,%r4,.Llastcmp /* If current_len >= n ->last compare. */ - jno .Lfound - - vlbb %v17,0(%r5,%r3),6 - vlbb %v16,0(%r5,%r2),6 - lcbb %r0,0(%r5,%r2),6 - jo .Llt16_1 - lcbb %r1,0(%r5,%r3),6 - jo .Llt16_2 - aghi %r5,16 - vfenezfs %v18,%v16,%v17 - clgrjhe %r5,%r4,.Llastcmp - jno .Lfound - - vlbb %v17,0(%r5,%r3),6 - vlbb %v16,0(%r5,%r2),6 - lcbb %r0,0(%r5,%r2),6 - jo .Llt16_1 - lcbb %r1,0(%r5,%r3),6 - jo .Llt16_2 - aghi %r5,16 - vfenezfs %v18,%v16,%v17 - clgrjhe %r5,%r4,.Llastcmp - jno .Lfound - - vlbb %v17,0(%r5,%r3),6 - vlbb %v16,0(%r5,%r2),6 - lcbb %r0,0(%r5,%r2),6 - jo .Llt16_1 - lcbb %r1,0(%r5,%r3),6 - jo .Llt16_2 - aghi %r5,16 - vfenezfs %v18,%v16,%v17 - clgrjhe %r5,%r4,.Llastcmp - jno .Lfound - - j .Lloop - -.Llt16_1: - lcbb %r1,0(%r5,%r3),6 /* Get loaded byte count of s2. */ -.Llt16_2: - clr %r0,%r1 /* Compare logical. */ - locrh %r0,%r1 /* Compute minimum of bytes loaded. */ - nill %r0,65532 /* Align bytes loaded to full characters. */ - jz .Lcmp_one_char /* Jump away if no full char is available. */ -.Llt_cmp: - algfr %r5,%r0 /* Add smallest loaded bytes to current_len. */ - vfenezfs %v18,%v16,%v17 /* Compare not equal with zero search. */ - clgrj %r5,%r4,10,.Llastcmp /* If current_len >= n -> last compare */ - vlgvb %r1,%v18,7 /* Get not equal index or 16 if all equal. */ - clrjl %r1,%r0,.Lfound /* Jump away if miscompare is within - loaded bytes; (index < loaded-bytes) */ - j .Lloop - -.Lcmp_one_char: - /* At least one of both strings is not 4-byte aligned - and there is no full character before next block-boundary. - Compare one character to get over the boundary and - proceed with normal loop! */ - vlef %v16,0(%r5,%r2),0 /* Load one character. */ - lghi %r0,4 /* Loaded byte count is 4. */ - vlef %v17,0(%r5,%r3),0 - j .Llt_cmp /* Proceed with comparision. */ - -.Llastcmp: - /* Use comparision result only if located within first n characters. - %r0: loaded byte count in vreg; - %r5: current_len; - %r4: n; - (current_len - n): [0...16[ - First ignored match index: loaded bytes - (current_len-n): ]0...16] - */ - slgr %r5,%r4 /* %r5 = current_len - n. */ - slr %r0,%r5 /* %r0 = first ignored match index. */ - vlgvb %r4,%v18,7 /* Get not equal index or 16 if all equal. */ - clrjl %r4,%r0,.Lfound2 /* Jump away if miscompare is within - loaded bytes and below n bytes. */ -.Lend_equal: - lghi %r2,0 - br %r14 - -.Lfound: - /* Difference or end of string. */ - /* vfenezf found an unequal element or zero. - This instruction compares unsigned words, but wchar_t is signed. - Thus we have to compare the found element again. */ - vlgvb %r4,%v18,7 /* Extract not equal byte-index. */ -.Lfound2: - srl %r4,2 /* And convert it to character-index. */ - vlgvf %r0,%v16,0(%r4) /* Load character-values. */ - vlgvf %r1,%v17,0(%r4) -.Lend_cmp_one_char: - cr %r0,%r1 - je .Lend_equal - lghi %r2,1 - lghi %r1,-1 - locgrl %r2,%r1 - br %r14 -END(__wcsncmp_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcsncmp.c b/sysdeps/s390/multiarch/wcsncmp.c deleted file mode 100644 index 9b8e968d1f..0000000000 --- a/sysdeps/s390/multiarch/wcsncmp.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Multiple versions of wcsncmp. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc2 (__wcsncmp, wcsncmp) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcsncpy-c.c b/sysdeps/s390/multiarch/wcsncpy-c.c deleted file mode 100644 index 32ec8ffe64..0000000000 --- a/sysdeps/s390/multiarch/wcsncpy-c.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Default wcsncpy implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCSNCPY __wcsncpy_c - -# include -extern __typeof (__wcsncpy) __wcsncpy_c; -# include -#endif diff --git a/sysdeps/s390/multiarch/wcsncpy-vx.S b/sysdeps/s390/multiarch/wcsncpy-vx.S deleted file mode 100644 index 3d1a67e0d6..0000000000 --- a/sysdeps/s390/multiarch/wcsncpy-vx.S +++ /dev/null @@ -1,223 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcsncpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* wchar_t *wcsncpy (const wchar_t *dest, const wchar_t *src, size_t n) - Copy at most n characters of string src to dest. - - Register usage: - -r0=dest pointer for return - -r1=tmp, zero byte index - -r2=dest - -r3=src - -r4=n - -r5=current_len - -r6=tmp, loaded bytes - -r7=tmp, border - -v16=part of src - -v17=index of zero - -v18=part of src - -v31=register save area for r6, r7 -*/ -ENTRY(__wcsncpy_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r4,%r4 -# endif /* !defined __s390x__ */ - - clgfi %r4,0 - ber %r14 /* Nothing to do, if n == 0. */ - - vlbb %v16,0(%r3),6 /* Load s until next 4k-byte boundary. */ - - tmll %r3,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - vlvgp %v31,%r6,%r7 /* Save registers. */ - lgr %r0,%r2 /* Save destination pointer for return. */ - - lcbb %r6,0(%r3),6 /* Get bytes to 4k-byte boundary or 16. */ - llgfr %r6,%r6 /* Convert 32bit to 64bit. */ - - lghi %r5,0 /* current_len = 0. */ - - /* Check range of maxlen and convert to byte-count. */ -# ifdef __s390x__ - tmhh %r4,49152 /* Test bit 0 or 1 of n. */ - lghi %r1,-4 /* Max byte-count is 18446744073709551612. */ -# else - tmlh %r4,49152 /* Test bit 0 or 1 of n. */ - llilf %r1,4294967292 /* Max byte-count is 4294967292. */ -# endif /* !__s390x__ */ - sllg %r4,%r4,2 /* Convert character-count to byte-count. */ - locgrne %r4,%r1 /* Use max byte-count, if bit 0/1 was one. */ - - clgrjle %r4,%r6,.Lremaining_v16 /* If n <= loaded-bytes - -> process remaining. */ - - /* n > loaded-byte-count. */ - vfenezf %v17,%v16,%v16 /* Find element not equal with zero search. */ - vlgvb %r1,%v17,7 /* Load zero index or 16 if not found. */ - aghi %r1,3 /* Also copy remaining bytes of zero. */ - clrjl %r1,%r6,.Lfound_v16_store /* Found zero within loaded bytes, - copy and return. */ - - /* Align s to 16 byte. */ - risbgn %r7,%r3,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,15 /* current_len = 15. */ - slr %r5,%r7 /* Compute highest index to 16byte boundary. */ - - /* Zero not found and n > loaded-byte-count. */ - vstl %v16,%r5,0(%r2) /* Copy loaded characters - no zero. */ - ahi %r5,1 /* Start loop at next character. */ - - /* Now we are 16byte aligned, so we can load - a full vreg without page fault. */ - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r4,.Lloop64 - - vl %v16,0(%r5,%r3) /* Load s. */ - clgijl %r4,17,.Lremaining_v16 /* If n <=16, process remaining - bytes. */ -.Llt64: - lgr %r7,%r4 - slgfi %r7,16 /* border_len = maxlen - 16. */ - - clgrjhe %r5,%r7,.Lremaining_v16 /* If current_len >= border - then process remaining bytes. */ - vfenezfs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound_v16 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Store previous part without zero to dst. */ - aghi %r5,16 - - clgrjhe %r5,%r7,.Lremaining_v18 - vfenezfs %v17,%v18,%v18 - je .Lfound_v18 - vl %v16,16(%r5,%r3) - vst %v18,0(%r5,%r2) - aghi %r5,16 - - clgrjhe %r5,%r7,.Lremaining_v16 - vfenezfs %v17,%v16,%v16 - je .Lfound_v16 - vl %v18,16(%r5,%r3) - vst %v16,0(%r5,%r2) - aghi %r5,16 - -.Lremaining_v18: - vlr %v16,%v18 -.Lremaining_v16: - /* v16 contains the remaining bytes [1...16]. - Store remaining bytes and append string-termination. */ - vfenezf %v17,%v16,%v16 /* Find element not equal with zero search. */ - slgrk %r7,%r4,%r5 /* Remaining bytes = maxlen - current_len. */ - aghi %r7,-1 /* vstl needs highest index. */ - la %r2,0(%r5,%r2) /* vstl has no index register. */ - vlgvb %r1,%v17,7 /* Load zero index or 16 if not found. */ - aghi %r1,3 /* Also copy remaining bytes of zero. */ - /* Zero in remaining bytes? -> jump away (zero-index < max-index) - Do not jump away if zero-index == max-index, - but simply copy zero with vstl below. */ - clrjl %r1,%r7,.Lfound_v16_store - vstl %v16,%r7,0(%r2) /* Store remaining bytes without null - termination!. */ -.Lend: - /* Restore saved registers. */ - vlgvg %r6,%v31,0 - vlgvg %r7,%v31,1 - lgr %r2,%r0 /* Load saved dest-ptr. */ - br %r14 - -.Lfound_v16_32: - aghi %r5,32 - j .Lfound_v16 -.Lfound_v18_48: - aghi %r5,32 -.Lfound_v18_16: - aghi %r5,16 -.Lfound_v18: - vlr %v16,%v18 -.Lfound_v16: - /* v16 contains a zero. Store remaining bytes to zero. current_len - has not reached border, thus checking for n is not needed! */ - vlgvb %r1,%v17,7 /* Load byte index of zero. */ - la %r2,0(%r5,%r2) /* vstl has no support for index-register. */ - aghi %r1,3 /* Also copy remaining bytes of zero. */ -.Lfound_v16_store: - vstl %v16,%r1,0(%r2) /* Copy characters including zero. */ - /* Fill remaining bytes with zero - remaining count always > 0. */ - algr %r5,%r1 /* Remaining bytes (=%r4) = ... */ - slgr %r4,%r5 /* = maxlen - (currlen + zero_index + 1). */ - la %r2,0(%r1,%r2) /* Pointer to zero. start filling beyond. */ - aghi %r4,-2 /* mvc with exrl needs count - 1. - (additional -1, see remaining bytes above) */ - srlg %r6,%r4,8 /* Split into 256 byte blocks. */ - ltgr %r6,%r6 - je .Lzero_lt256 -.Lzero_loop256: - mvc 1(256,%r2),0(%r2) /* Fill 256 zeros at once. */ - la %r2,256(%r2) - brctg %r6,.Lzero_loop256 /* Loop until all blocks are processed. */ -.Lzero_lt256: - exrl %r4,.Lmvc_lt256 - j .Lend -.Lmvc_lt256: - mvc 1(1,%r2),0(%r2) - - /* Find zero in 16byte aligned loop. */ -.Lloop64: - vl %v16,0(%r5,%r3) /* Load s. */ - vfenezfs %v17,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound_v16 /* Jump away if zero was found. */ - vl %v18,16(%r5,%r3) /* Load next part of s. */ - vst %v16,0(%r5,%r2) /* Store previous part without zero to dst. */ - vfenezfs %v17,%v18,%v18 - je .Lfound_v18_16 - vl %v16,32(%r5,%r3) - vst %v18,16(%r5,%r2) - vfenezfs %v17,%v16,%v16 - je .Lfound_v16_32 - vl %v18,48(%r5,%r3) - vst %v16,32(%r5,%r2) - vfenezfs %v17,%v18,%v18 - je .Lfound_v18_48 - vst %v18,48(%r5,%r2) - - aghi %r5,64 - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r4,.Lloop64 - - vl %v16,0(%r5,%r3) /* Load s. */ - j .Llt64 - -.Lfallback: - jg __wcsncpy_c -END(__wcsncpy_vx) - -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcsncpy.c b/sysdeps/s390/multiarch/wcsncpy.c deleted file mode 100644 index 6e1e8f01fb..0000000000 --- a/sysdeps/s390/multiarch/wcsncpy.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Multiple versions of wcsncpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc (__wcsncpy) -weak_alias (__wcsncpy, wcsncpy) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcsnlen-c.c b/sysdeps/s390/multiarch/wcsnlen-c.c deleted file mode 100644 index e86ca654e0..0000000000 --- a/sysdeps/s390/multiarch/wcsnlen-c.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Default wcsnlen implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCSNLEN __wcsnlen_c - -# include -extern __typeof (__wcsnlen) __wcsnlen_c; -# include -#endif diff --git a/sysdeps/s390/multiarch/wcsnlen-vx.S b/sysdeps/s390/multiarch/wcsnlen-vx.S deleted file mode 100644 index c678b94cac..0000000000 --- a/sysdeps/s390/multiarch/wcsnlen-vx.S +++ /dev/null @@ -1,151 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcsnlen. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* size_t wcsnlen (const wchar_t *s, size_t maxlen) - Returns the number of characters in s or at most maxlen. - - Register usage: - -r1=tmp - -r2=address of string - -r3=maxlen (number of characters to be read) - -r4=tmp - -r5=current_len and return_value - -v16=part of s -*/ -ENTRY(__wcsnlen_vx) - - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r3,%r3 -# endif /* !defined __s390x__ */ - - clgfi %r3,0 /* if maxlen == 0, return 0. */ - locgre %r2,%r3 - ber %r14 - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - llgfr %r1,%r1 /* Convert 32bit to 64bit. */ - - tmll %r2,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - /* Check range of maxlen and convert to byte-count. */ -# ifdef __s390x__ - tmhh %r3,49152 /* Test bit 0 or 1 of maxlen. */ - lghi %r4,-4 /* Max byte-count is 18446744073709551612. */ -# else - tmlh %r3,49152 /* Test bit 0 or 1 of maxlen. */ - llilf %r4,4294967292 /* Max byte-count is 4294967292. */ -# endif /* !__s390x__ */ - sllg %r3,%r3,2 /* Convert character-count to byte-count. */ - locgrne %r3,%r4 /* Use max byte-count, if bit 0/1 was one. */ - - vfenezf %v16,%v16,%v16 /* Find element not equal with zero search. */ - clgr %r1,%r3 - locgrh %r1,%r3 /* loaded_byte_count - = min (loaded_byte_count, maxlen) */ - - vlgvb %r5,%v16,7 /* Load zero index or 16 if not found. */ - clrjl %r5,%r1,.Lend /* Found zero within loaded bytes -> return. */ - - clgr %r1,%r3 /* If loaded_byte_count == maxlen -> end. */ - locgre %r5,%r3 - je .Lend - - /* Align s to 16 byte. */ - risbgn %r4,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 /* current_len = 16. */ - slr %r5,%r4 /* Compute bytes to 16bytes boundary. */ - - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r3,.Lloop64 - - /* Find zero in max 64byte with aligned s. */ -.Llt64: - vl %v16,0(%r5,%r2) /* Load s. */ - vfenezfs %v16,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound /* Jump away if zero was found. */ - aghi %r5,16 - clgrjhe %r5,%r3,.Lfound /* If current_len >= maxlen -> end. */ - vl %v16,0(%r5,%r2) - vfenezfs %v16,%v16,%v16 - je .Lfound - aghi %r5,16 - clgrjhe %r5,%r3,.Lfound - vl %v16,0(%r5,%r2) - vfenezfs %v16,%v16,%v16 - je .Lfound - aghi %r5,16 - clgrjhe %r5,%r3,.Lfound - vl %v16,0(%r5,%r2) - vfenezfs %v16,%v16,%v16 - j .Lfound - -.Lfound48: - aghi %r5,16 -.Lfound32: - aghi %r5,16 -.Lfound16: - aghi %r5,16 -.Lfound: - vlgvb %r4,%v16,7 /* Load byte index of zero or 16 if no zero. */ - algr %r5,%r4 - - clgr %r5,%r3 - locgrh %r5,%r3 /* Return min (current_len, maxlen). */ -.Lend: - srlg %r2,%r5,2 /* Convert byte-count to character-count. */ - br %r14 - - /* Find zero in 16byte aligned loop. */ -.Lloop64: - vl %v16,0(%r5,%r2) /* Load s. */ - vfenezfs %v16,%v16,%v16 /* Find element not equal with zero search. */ - je .Lfound /* Jump away if zero was found. */ - vl %v16,16(%r5,%r2) - vfenezfs %v16,%v16,%v16 - je .Lfound16 - vl %v16,32(%r5,%r2) - vfenezfs %v16,%v16,%v16 - je .Lfound32 - vl %v16,48(%r5,%r2) - vfenezfs %v16,%v16,%v16 - je .Lfound48 - - aghi %r5,64 - lgr %r1,%r5 /* If %r5 + 64 < maxlen? -> loop64. */ - aghi %r1,64 - clgrjl %r1,%r3,.Lloop64 - - j .Llt64 - -.Lfallback: - jg __wcsnlen_c -END(__wcsnlen_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcsnlen.c b/sysdeps/s390/multiarch/wcsnlen.c deleted file mode 100644 index 54486b9158..0000000000 --- a/sysdeps/s390/multiarch/wcsnlen.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Multiple versions of wcsnlen. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc (__wcsnlen) -weak_alias (__wcsnlen, wcsnlen) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcspbrk-c.c b/sysdeps/s390/multiarch/wcspbrk-c.c deleted file mode 100644 index 0a2e4c8e4d..0000000000 --- a/sysdeps/s390/multiarch/wcspbrk-c.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Default wcspbrk implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCSPBRK __wcspbrk_c - -# include -extern __typeof (wcspbrk) __wcspbrk_c; -# ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__wcspbrk_c, __GI_wcspbrk, __wcspbrk_c); -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcspbrk-vx.S b/sysdeps/s390/multiarch/wcspbrk-vx.S deleted file mode 100644 index 267baf091d..0000000000 --- a/sysdeps/s390/multiarch/wcspbrk-vx.S +++ /dev/null @@ -1,315 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcspbrk. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* wchar_t *wcspbrk (const wchar_t *s, const wchar_t * accept) - The wcspbrk() function locates the first occurrence in the string s - of any of the characters in the string accept and returns a pointer - to that character or NULL if not found. - - This method checks the length of accept string. If it fits entirely - in one vector register, a fast algorithm is used, which does not need - to check multiple parts of accept-string. Otherwise a slower full - check of accept-string is used. - - register overview: - r3: pointer to start of accept-string - r2: pointer to start of search-string - r0: loaded byte count of vlbb search-string (32bit unsigned) - r4: found byte index (32bit unsigned) - r1: current return len (64bit unsigned) - v16: search-string - v17: accept-string - v18: temp-vreg - - ONLY FOR SLOW: - v19: first accept-string - v20: zero for preparing acc-vector - v21: global mask; 1 indicates a match between - search-string-vreg and any accept-character - v22: current mask; 1 indicates a match between - search-string-vreg and any accept-character in current acc-vreg - v24: one for result-checking of former string-part - v30, v31: for re-/storing registers r6, r8, r9 - r5: current len of accept-string - r6: zero-index in search-string or 16 if no zero - or min(zero-index, loaded byte count) - r8: >0, if former accept-string-part contains a zero, - otherwise =0; - r9: loaded byte count of vlbb accept-string -*/ -ENTRY(__wcspbrk_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - tmll %r2,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - /* - Check if accept-string fits in one vreg: - ---------------------------------------- - */ - vlbb %v17,0(%r3),6 /* Load accept. */ - lcbb %r0,0(%r3),6 - jo .Lcheck_onbb /* Special case if accept lays - on block-boundary. */ - -.Lcheck_notonbb: - lghi %r1,0 /* Zero out current len. */ - vlgvf %r0,%v17,0 /* Get first element. */ - clije %r0,0,.Lfast_end_null /* Return null if accept is empty. */ - - vistrfs %v17,%v17 /* Fill with zeros after first zero. */ - je .Lfast /* Zero found -> accept fits in one vreg. */ - j .Lslow /* No zero -> accept exceeds one vreg */ - - -.Lcheck_onbb: - /* Accept lays on block-boundary. */ - nill %r0,65532 /* Recognize only fully loaded characters. */ - je .Lcheck_onbb2 /* Reload vr, if we loaded no full wchar_t. */ - vfenezf %v18,%v17,%v17 /* Search zero in loaded accept bytes. */ - vlgvb %r4,%v18,7 /* Get index of zero or 16 if not found. */ - clrjl %r4,%r0,.Lcheck_notonbb /* Zero index < loaded bytes count -> - accept fits in one vreg; - Fill with zeros and proceed - with FAST. */ -.Lcheck_onbb2: - vl %v17,0(%r3) /* Load accept, which exceeds loaded bytes. */ - j .Lcheck_notonbb /* Check if accept fits in one vreg. */ - - - /* - Search s for accept in one vreg - ------------------------------- - */ -.Lfast: - /* Complete accept-string in v17 and remaining bytes are zero. */ - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r0,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - vfaezfs %v18,%v16,%v17,0 /* Find first element in v16 unequal to any - in v17 or first zero element. */ - vlgvb %r4,%v18,7 /* Load byte index of found element. */ - /* If found index is within loaded bytes, return with found - element index (=equal count). */ - clrjl %r4,%r0,.Lfast_loop_found2 - - /* Align s to 16 byte. */ - risbgn %r4,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r1,16 /* current_len = 16. */ - slr %r1,%r4 /* Compute bytes to 16bytes boundary. */ - -.Lfast_loop: - vl %v16,0(%r1,%r2) /* Load search-string. */ - vfaezfs %v18,%v16,%v17,0 /* Find first element in v16 equal to any - in v17 or first zero element. */ - jno .Lfast_loop_found - - vl %v16,16(%r1,%r2) - vfaezfs %v18,%v16,%v17,0 - jno .Lfast_loop_found16 - - vl %v16,32(%r1,%r2) - vfaezfs %v18,%v16,%v17,0 - jno .Lfast_loop_found32 - - vl %v16,48(%r1,%r2) - vfaezfs %v18,%v16,%v17,0 - jno .Lfast_loop_found48 - - aghi %r1,64 - j .Lfast_loop /* Loop if no element was unequal to accept - and not zero. */ - - /* Found equal or zero element. */ -.Lfast_loop_found48: - aghi %r1,16 -.Lfast_loop_found32: - aghi %r1,16 -.Lfast_loop_found16: - aghi %r1,16 -.Lfast_loop_found: - vlgvb %r4,%v18,7 /* Load byte index of found element. */ -.Lfast_loop_found2: - srlg %r5,%r4,2 /* Convert byte-index to character-index. */ - vlgvf %r0,%v16,0(%r5) /* Get found element. */ - clije %r0,0,.Lfast_end_null /* Return null if no accept-char found */ - algfr %r1,%r4 /* Add found index of char to current len. */ - la %r2,0(%r1,%r2) /* And return pointer to first equal char. */ - br %r14 - -.Lfast_end_null: - lghi %r2,0 /* Return null if no character is equal. */ - br %r14 - - - - - /* - Search s for accept in multiple vregs - ------------------------------------- - */ -.Lslow: - /* Save registers. */ - vlvgg %v30,%r6,0 - vlvgp %v31,%r8,%r9 - - /* Accept in v17 without zero */ - vlr %v19,%v17 /* Save first acc-part for a fast reload. */ - vzero %v20 /* Zero for preparing acc-vector. */ - vone %v24 /* One for checking result of former string. */ - - /* Align s to 16 byte. */ - risbg %r4,%r2,60,128+63,0 /* Test if s is aligned and - %r4 = bits 60-63 'and' 15. */ - je .Lslow_loop_str /* If s is aligned, loop aligned. */ - lghi %r0,15 - slr %r0,%r4 /* Compute highest index to load (15-x). */ - vll %v16,%r0,0(%r2) /* Load up to 16byte boundary; - needs highest index, left bytes are 0. */ - ahi %r0,1 /* Work with loaded byte count. */ - vzero %v21 /* Zero out global mask. */ - lghi %r5,0 /* Set current len of accept-string to zero. */ - vfenezf %v18,%v16,%v16 /* Find zero in current string-part. */ - lghi %r8,0 /* There is no zero in first accept-part. */ - vlgvb %r6,%v18,7 /* Load byte index of zero or 16 if no zero. */ - clije %r6,0,.Lslow_end_null /* If first element is zero - (end of string) -> return null */ - clr %r0,%r6 /* cc==1 if loaded byte count < zero-index. */ - locrl %r6,%r0 /* Load on cc==1; zero-index = lbc. */ - j .Lslow_loop_acc - - - /* Process s in 16byte aligned loop. */ -.Lslow_next_str: - /* Check results of former processed str-part. */ - vfeef %v18,%v21,%v24 /* Find first equal match in global mask - (ones in element). */ - vlgvb %r4,%v18,7 /* Get index of first one (=equal) - or 16 if no match. */ - /* Equal-index < min(zero-index, loaded byte count) - -> return pointer to equal element. */ - clrjl %r4,%r6,.Lslow_index_found - /* Zero-index < loaded byte count - -> former str-part was last str-part - -> return null */ - clrjl %r6,%r0,.Lslow_end_null - /* All elements are zero (=no match) -> proceed with next str-part. */ - - vlr %v17,%v19 /* Load first part of accept (no zero). */ - algfr %r1,%r0 /* Add loaded byte count to current len. */ - -.Lslow_loop_str: - vl %v16,0(%r1,%r2) /* Load search-string */ - lghi %r0,16 /* Loaded byte count is 16. */ - vzero %v21 /* Zero out global mask. */ - lghi %r5,0 /* Set current len of accept to zero. */ - vfenezf %v18,%v16,%v16 /* Find zero in current string-part. */ - lghi %r8,0 /* There is no zero in first accept-part. */ - vlgvb %r6,%v18,7 /* Load byte index of zero or 16 if no zero. */ - clije %r6,0,.Lslow_end_null /* If first element is zero - (end of string) -> return null. */ - -.Lslow_loop_acc: - vfaef %v22,%v16,%v17,4 /* Create matching-mask (1 in mask -> - Character matches any accepted character in - this accept-string-part) IN=0, RT=1. */ - vlgvf %r4,%v22,0 /* Get result of first element. */ - /* First element is equal to any accepted characters - (all other parts of accept cannot lead to a match before this one) - -> current len is pointing to first element - -> return found */ - clijh %r4,0,.Lslow_end_found - vo %v21,%v21,%v22 /* Global-mask = global-|matching-mask. */ - /* Proceed with next acc until end of acc is reached. */ - - -.Lslow_next_acc: - clijh %r8,0,.Lslow_next_str /* There was a zero in the last acc-part - -> add index to current len and - end. */ - vlbb %v17,16(%r5,%r3),6 /* Load next accept part. */ - aghi %r5,16 /* Increment current len of accept-string. */ - lcbb %r9,0(%r5,%r3),6 /* Get loaded byte count of accept-string. */ - jo .Lslow_next_acc_onbb /* Jump away ifaccept-string is - on block-boundary. */ -.Lslow_next_acc_notonbb: - vistrfs %v17,%v17 /* Fill with zeros after first zero. */ - jo .Lslow_loop_acc /* No zero found -> no preparation needed. */ - -.Lslow_next_acc_prepare_zero: - /* Zero in accept-part: fill zeros with first-accept-character. */ - vlgvf %r8,%v17,0 /* Load first element of acc-part. */ - clije %r8,0,.Lslow_next_str /* Proceed with next string-part, - If first char in this part of accept - is a zero. */ - /* r8>0 -> zero found in this acc-part. */ - vrepf %v18,%v17,0 /* Replicate first char accross all chars. */ - vceqf %v22,%v20,%v17 /* Create a mask (v22) of null chars - by comparing with 0 (v20). */ - vsel %v17,%v18,%v17,%v22 /* Replace null chars with first char. */ - j .Lslow_loop_acc /* Accept part is prepared -> process. */ - -.Lslow_next_acc_onbb: - nill %r9,65532 /* Recognize only fully loaded characters. */ - je .Lslow_next_acc_onbb2 /* Reload vr, if no full wchar_t. */ - vfenezf %v18,%v17,%v17 /* Find zero in loaded bytes of accept part. */ - vlgvb %r8,%v18,7 /* Load byte index of zero. */ - clrjl %r8,%r9,.Lslow_next_acc_notonbb /* Found a zero in loaded bytes - -> Prepare vreg. */ -.Lslow_next_acc_onbb2: - vl %v17,0(%r5,%r3) /* Load over boundary ... */ - lghi %r8,0 /* r8=0 -> no zero in this part of acc, - check for zero is in jump-target. */ - j .Lslow_next_acc_notonbb /* ... and search for zero in - fully loaded vreg again. */ - -.Lslow_end_null: - lghi %r1,0 /* Return null if no character is equal. */ - j .Lslow_end - -.Lslow_loop_found: - vlgvb %r4,%v18,7 /* Load byte index of found element. */ - srlg %r5,%r4,2 /* Convert byte-index to character-index. */ - vlgvf %r0,%v16,0(%r5) /* Get found element. */ - clije %r0,0,.Lslow_end_null /* Return null if no acc-char found. */ - -.Lslow_index_found: - algfr %r1,%r4 /* Add found index of char to current len. */ -.Lslow_end_found: - la %r1,0(%r1,%r2) /* And return pointer to first equal char. */ - -.Lslow_end: - /* Restore registers. */ - vlgvg %r6,%v30,0 - vlgvg %r8,%v31,0 - vlgvg %r9,%v31,1 - lgr %r2,%r1 - br %r14 -.Lfallback: - jg __wcspbrk_c -END(__wcspbrk_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcspbrk.c b/sysdeps/s390/multiarch/wcspbrk.c deleted file mode 100644 index 9f14f9a4f2..0000000000 --- a/sysdeps/s390/multiarch/wcspbrk.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Multiple versions of wcspbrk. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define wcspbrk __redirect_wcspbrk -# include -# undef wcspbrk -# include - -s390_vx_libc_ifunc2_redirected (__redirect_wcspbrk, __wcspbrk, wcspbrk) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcsrchr-c.c b/sysdeps/s390/multiarch/wcsrchr-c.c deleted file mode 100644 index bc462a7c71..0000000000 --- a/sysdeps/s390/multiarch/wcsrchr-c.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Default wcsrchr implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCSRCHR __wcsrchr_c - -# include -extern __typeof (wcsrchr) __wcsrchr_c; -# include -#endif diff --git a/sysdeps/s390/multiarch/wcsrchr-vx.S b/sysdeps/s390/multiarch/wcsrchr-vx.S deleted file mode 100644 index ba605f579d..0000000000 --- a/sysdeps/s390/multiarch/wcsrchr-vx.S +++ /dev/null @@ -1,190 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcsrchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* wchar_t *wcsrchr (const wchar_t *s, wchar_t c) - Locate the last character c in string. - - Register usage: - -r0=loaded bytes in first part of s. - -r1=pointer to last occurence of c or NULL if not found. - -r2=s - -r3=c - -r4=tmp - -r5=current_len - -v16=part of s - -v17=index of found element - -v18=replicated c - -v19=part of s with last occurence of c. - -v20=permute pattern -*/ -ENTRY(__wcsrchr_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r0,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - tmll %r2,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - vlvgf %v18,%r3,0 /* Generate vector which elements are all c. */ - vrepf %v18,%v18,0 - - lghi %r1,-1 /* Currently no c found. */ - lghi %r5,0 /* current_len = 0. */ - - vfeezfs %v17,%v16,%v18 /* Find element equal or zero. */ - vlgvb %r4,%v17,7 /* Load byte index of c/zero or 16. */ - clrjl %r4,%r0,.Lfound_first_part /* Found c/zero in loaded bytes. */ -.Lalign: - /* Align s to 16 byte. */ - risbgn %r4,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r5,16 /* current_len = 16. */ - slr %r5,%r4 /* Compute bytes to 16bytes boundary. */ - -.Lloop: - vl %v16,0(%r5,%r2) /* Load s. */ - vfeezfs %v17,%v16,%v18 /* Find element equal with zero search. */ - jno .Lfound /* Found c/zero (cc=0|1|2). */ - vl %v16,16(%r5,%r2) - vfeezfs %v17,%v16,%v18 - jno .Lfound16 - vl %v16,32(%r5,%r2) - vfeezfs %v17,%v16,%v18 - jno .Lfound32 - vl %v16,48(%r5,%r2) - vfeezfs %v17,%v16,%v18 - jno .Lfound48 - - aghi %r5,64 - j .Lloop /* No character and no zero -> loop. */ - -.Lfound48: - la %r5,16(%r5) /* Use la since aghi would clobber cc. */ -.Lfound32: - la %r5,16(%r5) -.Lfound16: - la %r5,16(%r5) -.Lfound: - je .Lzero /* Found zero, but no c before that zero. */ - /* Save this part of s to check for further matches after reaching - the end of the complete string. */ - vlr %v19,%v16 - lgr %r1,%r5 - - jh .Lzero /* Found a zero after the found c. */ - aghi %r5,16 /* Start search of next part of s. */ - j .Lloop - -.Lfound_first_part: - /* This code is only executed if the found c/zero is whithin loaded - bytes. If no c/zero was found (cc==3) the found index = 16, thus - this code is not called. - Resulting condition code of vector find element equal: - cc==0: no c, found zero - cc==1: c found, no zero - cc==2: c found, found zero after c - cc==3: no c, no zero (this case can be ignored). */ - je .Lzero /* Found zero, but no c before that zero. */ - - locgrne %r1,%r5 /* Mark c as found in first part of s. */ - vlr %v19,%v16 - - jl .Lalign /* No zero (e.g. if vr was fully loaded) - -> Align and loop afterwards. */ - - /* Found a zero in vr. If vr was not fully loaded due to block - boundary, the remaining bytes are filled with zero and we can't - rely on zero indication of condition code here! */ - - vfenezf %v17,%v16,%v16 - vlgvb %r4,%v17,7 /* Load byte index of zero or 16. */ - clrjl %r4,%r0,.Lzero /* Zero within loaded bytes -> end. */ - j .Lalign /* Align and loop afterwards. */ - -.Lend_searched_zero: - vlgvb %r4,%v17,7 /* Load byte index of zero. */ - algr %r5,%r4 - la %r2,0(%r5,%r2) /* Return pointer to zero. */ - br %r14 - -.Lzero: - /* Reached end of string. Check if one c was found before. */ - clije %r3,0,.Lend_searched_zero /* Found zero and c is zero. */ - - cgfi %r1,-1 /* No c found -> return NULL. */ - locghie %r2,0 - ber %r14 - - larl %r3,.Lpermute_mask /* Load permute mask. */ - vl %v20,0(%r3) - - /* c was found and is part of v19. */ - vfenezf %v17,%v19,%v19 /* Find zero. */ - vlgvb %r4,%v17,7 /* Load byte index of zero or 16. */ - ahi %r4,3 /* Found zero index is first byte, - thus highest byte index is last byte of - wchar_t zero. */ - - clgfi %r5,0 /* Loaded byte count in v19 is 16, ... */ - lochine %r0,16 /* ... if v19 is not the first part of s. */ - ahi %r0,-1 /* Convert byte count to highest index. */ - - clr %r0,%r4 - locrl %r4,%r0 /* r4 = min (zero-index, highest-index). */ - - /* Right-shift of v19 to mask bytes after zero. */ - clije %r4,15,.Lzero_permute /* No shift is needed if highest index - in vr is 15. */ - lhi %r0,15 - slr %r0,%r4 /* Compute byte count for vector shift left. */ - sll %r0,3 /* Convert to bit count. */ - vlvgb %v17,%r0,7 - vsrlb %v19,%v19,%v17 /* Vector shift right by byte by number of bytes - specified in bits 1-4 of byte 7 in v17. */ - - /* Reverse bytes in v19. */ -.Lzero_permute: - vperm %v19,%v19,%v19,%v20 /* Permute v19 to reversed order. */ - - /* Find c in reversed v19. */ - vfeef %v19,%v19,%v18 /* Find c. */ - la %r2,0(%r1,%r2) - vlgvb %r3,%v19,7 /* Load byte index of c. */ - - /* Compute index in real s and return. */ - slgr %r4,%r3 - lay %r2,-3(%r4,%r2) /* Return pointer to zero. -3 is needed, - because the found byte index is reversed in - vector-register. Thus point to first byte of - wchar_t. */ - br %r14 -.Lpermute_mask: - .byte 0x0C,0x0D,0x0E,0x0F,0x08,0x09,0x0A,0x0B - .byte 0x04,0x05,0x06,0x07,0x00,0x01,0x02,0x03 -.Lfallback: - jg __wcsrchr_c -END(__wcsrchr_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcsrchr.c b/sysdeps/s390/multiarch/wcsrchr.c deleted file mode 100644 index cd3f695117..0000000000 --- a/sysdeps/s390/multiarch/wcsrchr.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Multiple versions of wcsrchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc2 (__wcsrchr, wcsrchr) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wcsspn-c.c b/sysdeps/s390/multiarch/wcsspn-c.c deleted file mode 100644 index 7790556b0d..0000000000 --- a/sysdeps/s390/multiarch/wcsspn-c.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Default wcsspn implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WCSSPN __wcsspn_c - -# include -extern __typeof (wcsspn) __wcsspn_c; -# ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__wcsspn_c, __GI_wcsspn, __wcsspn_c); -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcsspn-vx.S b/sysdeps/s390/multiarch/wcsspn-vx.S deleted file mode 100644 index 77806c3a50..0000000000 --- a/sysdeps/s390/multiarch/wcsspn-vx.S +++ /dev/null @@ -1,270 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wcsspn. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* size_t wcsspn (const wchar_t *s, const wchar_t * accept) - The wcsspn() function calculates the length of the initial segment - of s which consists entirely of characters in accept. - - This method checks the length of accept string. If it fits entirely - in one vector register, a fast algorithm is used, which does not need - to check multiple parts of accept-string. Otherwise a slower full - check of accept-string is used. - - register overview: - r3: pointer to start of accept-string - r2: pointer to start of search-string - r4: loaded byte count of vl search-string - r0: found byte index - r1: current return len of s - v16: search-string - v17: accept-string - v18: temp-vreg - - ONLY FOR SLOW: - v19: first accept-string - v20: zero for preparing acc-vector - v21: global mask; 1 indicates a match between - search-string-vreg and any accept-character - v22: current mask; 1 indicates a match between - search-string-vreg and any accept-character in current acc-vreg - v30, v31: for re-/storing registers r6, r8, r9 - r5: current len of accept-string - r6: zero-index in search-string or 16 if no zero - or min(zero-index, loaded byte count) - r8: >0, if former accept-string-part contains a zero, - otherwise =0; - r9: loaded byte count of vlbb accept-string -*/ -ENTRY(__wcsspn_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - - tmll %r2,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - /* - Check if accept-string fits in one vreg: - ---------------------------------------- - */ - vlbb %v17,0(%r3),6 /* Load accept. */ - lcbb %r4,0(%r3),6 - jo .Lcheck_onbb /* Special case if accept lays - on block-boundary. */ -.Lcheck_notonbb: - vistrfs %v17,%v17 /* Fill with zeros after first zero. */ - je .Lfast /* Zero found -> accept fits in one vreg. */ - j .Lslow /* No zero -> accept exceeds one vreg. */ - -.Lcheck_onbb: - /* Accept lays on block-boundary. */ - nill %r4,65532 /* Recognize only fully loaded characters. */ - je .Lcheck_onbb2 /* Reload vr if no full wchar_t. */ - vfenezf %v18,%v17,%v17 /* Search zero in loaded accept bytes. */ - vlgvb %r0,%v18,7 /* Get index of zero or 16 if not found. */ - clrjl %r0,%r4,.Lcheck_notonbb /* Zero index < loaded bytes count -> - Accept fits in one vreg; - Fill with zeros and proceed - with FAST. */ -.Lcheck_onbb2: - vl %v17,0(%r3) /* Load accept, which exceeds loaded bytes. */ - j .Lcheck_notonbb /* Check if accept fits in one vreg. */ - - - /* - Search s for accept in one vreg - ------------------------------- - */ -.Lfast: - /* Complete accept-string in v17 and remaining bytes are zero. */ - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r1,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - - vfaezfs %v16,%v16,%v17,8 /* Find first element in v16 - unequal to any in v17 - or first zero element. */ - - vlgvb %r0,%v16,7 /* Load byte index of found element. */ - /* If found index is within loaded bytes (%r0 < %r1), - return with found element index (=equal count). */ - clr %r0,%r1 - srlg %r0,%r0,2 /* Convert byte-count to character-count. */ - locgrl %r2,%r0 - blr %r14 - - /* Align s to 16 byte. */ - risbgn %r4,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - lghi %r1,16 /* current_len = 16. */ - slr %r1,%r4 /* Compute bytes to 16bytes boundary. */ - -.Lfast_loop: - vl %v16,0(%r1,%r2) /* Load search-string. */ - vfaezfs %v16,%v16,%v17,8 /* Find first element in v16 - unequal to any in v17 - or first zero element. */ - jno .Lfast_loop_found - vl %v16,16(%r1,%r2) - vfaezfs %v16,%v16,%v17,8 - jno .Lfast_loop_found16 - vl %v16,32(%r1,%r2) - vfaezfs %v16,%v16,%v17,8 - jno .Lfast_loop_found32 - vl %v16,48(%r1,%r2) - vfaezfs %v16,%v16,%v17,8 - jno .Lfast_loop_found48 - - aghi %r1,64 - j .Lfast_loop /* Loop if no element was unequal to accept - and not zero. */ - - /* Found unequal or zero element. */ -.Lfast_loop_found48: - aghi %r1,16 -.Lfast_loop_found32: - aghi %r1,16 -.Lfast_loop_found16: - aghi %r1,16 -.Lfast_loop_found: - vlgvb %r0,%v16,7 /* Load byte index of found element. */ - algrk %r2,%r1,%r0 /* And add it to current len. */ - srlg %r2,%r2,2 /* Convert byte-count to character-count. */ - br %r14 - - - /* - Search s for accept in multiple vregs - ------------------------------------- - */ -.Lslow: - /* Save registers. */ - vlvgg %v30,%r6,0 - vlvgp %v31,%r8,%r9 - lghi %r1,0 /* Zero out current len. */ - - /* accept in v17 without zero. */ - vlr %v19,%v17 /* Save first acc-part for a fast reload. */ - vzero %v20 /* Zero for preparing acc-vector. */ - - /* Align s to 16 byte. */ - risbg %r0,%r2,60,128+63,0 /* Test if s is aligned and - %r0 = bits 60-63 'and' 15. */ - je .Lslow_loop_str /* If s is aligned, loop aligned */ - lghi %r4,15 - slr %r4,%r0 /* Compute highest index to load (15-x). */ - vll %v16,%r4,0(%r2) /* Load up to 16byte boundary (vll needs - highest index, remaining bytes are 0). */ - aghi %r4,1 /* Work with loaded byte count. */ - vzero %v21 /* Zero out global mask. */ - lghi %r5,0 /* Set current len of accept-string to zero. */ - vfenezf %v18,%v16,%v16 /* Find zero in current string-part. */ - lghi %r8,0 /* There is no zero in first accept-part. */ - vlgvb %r6,%v18,7 /* Load byte index of zero or 16 - if there is no zero. */ - clr %r4,%r6 /* cc==1 if loaded byte count < zero-index. */ - locrl %r6,%r4 /* Load on cc==1. */ - j .Lslow_loop_acc - - /* Process s in 16byte aligned loop. */ -.Lslow_next_str: - vlr %v17,%v19 /* Load first part of accept (no zero). */ - algfr %r1,%r4 /* Add loaded byte count to current len. */ -.Lslow_loop_str: - vl %v16,0(%r1,%r2) /* Load search-string. */ - lghi %r4,16 /* Loaded byte count is 16. */ - vzero %v21 /* Zero out global mask. */ - lghi %r5,0 /* Set current len of accept-string to zero. */ - vfenezf %v18,%v16,%v16 /* Find zero in current string-part. */ - lghi %r8,0 /* There is no zero in first accept-part. */ - vlgvb %r6,%v18,7 /* Load byte index of zero or 16 if no zero. */ - -.Lslow_loop_acc: - vfaef %v22,%v16,%v17,4 /* Create matching-mask (1 in mask -> - character matches any accepted character in - this accept-string-part) IN=0, RT=1. */ - vo %v21,%v21,%v22 /* global-mask = global- | matching-mask. */ - vfenezf %v18,%v21,%v21 /* Find first zero in global-mask. */ - vlgvb %r0,%v18,7 /* Get first found zero-index - (= first mismatch). */ - clrjl %r0,%r6,.Lslow_next_acc /* Mismatch-index < min(lbc,zero-index) - -> Process this string-part - with next acc-part. */ - clrjhe %r0,%r4,.Lslow_next_str /* Found-index >= loaded byte count - -> All loaded bytes are matching - any accept-character - and are not zero. */ - /* All bytes are matching any characters in accept-string - and search-string is fully processed (found-index == zero-index). */ -.Lslow_add_lbc_end: - algrk %r2,%r1,%r0 /* Add matching characters to current len. */ - srlg %r2,%r2,2 /* Convert byte-count to character-count. */ - /* Restore registers. */ - vlgvg %r6,%v30,0 - vlgvg %r8,%v31,0 - vlgvg %r9,%v31,1 - br %r14 - -.Lslow_next_acc: - clijh %r8,0,.Lslow_add_lbc_end /* There was a zero in last acc-part - -> Add found index to current len - and end. */ - vlbb %v17,16(%r5,%r3),6 /* Load next accept part. */ - aghi %r5,16 /* Increment current len of accept-string. */ - lcbb %r9,0(%r5,%r3),6 /* Get loaded byte count of accept-string. */ - jo .Lslow_next_acc_onbb /* Jump away if accept-string is - on block-boundary. */ -.Lslow_next_acc_notonbb: - vistrfs %v17,%v17 /* Fill with zeros after first zero. */ - jo .Lslow_loop_acc /* No zero found -> no preparation needed. */ - -.Lslow_next_acc_prepare_zero: - /* Zero in accept-part: fill zeros with first-accept-character. */ - vlgvf %r8,%v17,0 /* Load first element of acc-part. */ - clije %r8,0,.Lslow_add_lbc_end /* End if zero is first character - in this part of accept-string. */ - /* r8>0 -> zero found in this acc-part. */ - vrepf %v18,%v17,0 /* Replicate first char accross all chars. */ - vceqf %v22,%v20,%v17 /* Create a mask (v22) of null chars - by comparing with 0 (v20). */ - vsel %v17,%v18,%v17,%v22 /* Replace null chars with first char. */ - j .Lslow_loop_acc /* Accept part is prepared -> process. */ - -.Lslow_next_acc_onbb: - nill %r9,65532 /* Recognize only fully loaded characters. */ - je .Lslow_next_acc_onbb2 /* Reload vr, if we loaded no full - wchar_t. */ - vfenezf %v18,%v17,%v17 /* Find zero in loaded bytes of accept part. */ - vlgvb %r8,%v18,7 /* Load byte index of zero. */ - clrjl %r8,%r9,.Lslow_next_acc_notonbb /* Found a zero in loaded bytes - -> Prepare vreg. */ -.Lslow_next_acc_onbb2: - vl %v17,0(%r5,%r3) /* Load over boundary ... */ - lghi %r8,0 /* r8=0 -> no zero in this part of acc, - check for zero is in jump-target. */ - j .Lslow_next_acc_notonbb /* ... and search for zero in - fully loaded vreg again. */ -.Lfallback: - jg __wcsspn_c -END(__wcsspn_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wcsspn.c b/sysdeps/s390/multiarch/wcsspn.c deleted file mode 100644 index 6eaec7dd65..0000000000 --- a/sysdeps/s390/multiarch/wcsspn.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Multiple versions of wcsspn. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define wcsspn __redirect_wcsspn -# include -# undef wcsspn -# include - -s390_vx_libc_ifunc2_redirected (__redirect_wcsspn, __wcsspn, wcsspn) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wmemchr-c.c b/sysdeps/s390/multiarch/wmemchr-c.c deleted file mode 100644 index 0d04494ac8..0000000000 --- a/sysdeps/s390/multiarch/wmemchr-c.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Default wmemchr implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WMEMCHR __wmemchr_c - -# include -extern __typeof (wmemchr) __wmemchr_c; -# undef weak_alias -# define weak_alias(name, alias) -# ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__wmemchr_c, __GI___wmemchr, __wmemchr_c); -# undef libc_hidden_weak -# define libc_hidden_weak(name) \ - strong_alias (__wmemchr_c, __wmemchr_c_1); \ - __hidden_ver1 (__wmemchr_c_1, __GI_wmemchr, __wmemchr_c_1); -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wmemchr-vx.S b/sysdeps/s390/multiarch/wmemchr-vx.S deleted file mode 100644 index f5ab76e5bc..0000000000 --- a/sysdeps/s390/multiarch/wmemchr-vx.S +++ /dev/null @@ -1,166 +0,0 @@ -/* Vector optimized 32/64 bit S/390 version of wmemchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* wchar_t *wmemchr (const wchar_t *s, wchar_t c, size_t n) - Scans memory for character c - and returns pointer to first c. - - Register usage: - -r0=tmp - -r1=tmp - -r2=s - -r3=c - -r4=n - -r5=current_len - -v16=part of s - -v17=index of found c - -v18=c replicated -*/ -ENTRY(__wmemchr_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r4,%r4 -# endif /* !defined __s390x__ */ - - clgije %r4,0,.Lnf_end /* If len == 0 then exit. */ - - vlbb %v16,0(%r2),6 /* Load s until next 4k-byte boundary. */ - lcbb %r0,0(%r2),6 /* Get bytes to 4k-byte boundary or 16. */ - llgfr %r0,%r0 /* Convert 32bit to 64bit. */ - - tmll %r2,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - - vlvgf %v18,%r3,0 /* Generate vector which elements are all c. */ - vrepf %v18,%v18,0 - lghi %r5,16 /* current_len = 16. */ - - /* Check range of maxlen and convert to byte-count. */ -# ifdef __s390x__ - tmhh %r4,49152 /* Test bit 0 or 1 of maxlen. */ - lghi %r1,-4 /* Max byte-count is 18446744073709551612. */ -# else - tmlh %r4,49152 /* Test bit 0 or 1 of maxlen. */ - llilf %r1,4294967292 /* Max byte-count is 4294967292. */ -# endif /* !__s390x__ */ - sllg %r4,%r4,2 /* Convert character-count to byte-count. */ - locgrne %r4,%r1 /* Use max byte-count, if bit 0/1 was one. */ - - clgrjhe %r0,%r4,.Llastcmp /* If (bytes to boundary) >= n, - jump to lastcmp. */ - - vfeefs %v17,%v16,%v18 /* Find c. */ - vlgvb %r1,%v17,7 /* Load byte index of c. */ - clgrjl %r1,%r0,.Lfound2 /* Found c is within loaded bytes. */ - - /* Align s to 16 byte. */ - risbgn %r1,%r2,60,128+63,0 /* %r3 = bits 60-63 of %r2 'and' 15. */ - slr %r5,%r1 /* Compute bytes to 16bytes boundary. */ - - lgr %r0,%r5 /* If %r5 + 64 < n? -> loop64. */ - aghi %r0,64 - clgrjl %r0,%r4,.Lloop64 -.Llt64: - vl %v16,0(%r5,%r2) - aghi %r5,16 - clgrjhe %r5,%r4,.Llastcmp /* Do last compare if curr-len >= n. */ - vfeefs %v17,%v16,%v18 /* Find c. */ - jl .Lfound /* Jump away if c was found. */ - - vl %v16,0(%r5,%r2) - aghi %r5,16 - clgrjhe %r5,%r4,.Llastcmp - vfeefs %v17,%v16,%v18 - jl .Lfound - - vl %v16,0(%r5,%r2) - aghi %r5,16 - clgrjhe %r5,%r4,.Llastcmp - vfeefs %v17,%v16,%v18 - jl .Lfound - - vl %v16,0(%r5,%r2) - aghi %r5,16 - -.Llastcmp: - /* Use comparision result only if located within first n characters. - %r5: current_len; - %r4: n; - (current_len - n): [0...16[ - first ignored match index = vr-width - (current_len - n) ]0...16] - */ - vfeefs %v17,%v16,%v18 /* Find c. */ - slgrk %r4,%r5,%r4 /* %r5 = current_len - n. */ - lghi %r0,16 /* Register width = 16. */ - vlgvb %r1,%v17,7 /* Extract found index or 16 if all equal. */ - slr %r0,%r4 /* %r0 = first ignored match index. */ - clrjl %r1,%r0,.Lfound2 /* Go away if miscompare is below n bytes. */ - /* c not found within n-bytes. */ -.Lnf_end: - lghi %r2,0 /* Return null. */ - br %r14 - -.Lfound48: - aghi %r5,16 -.Lfound32: - aghi %r5,16 -.Lfound16: - aghi %r5,16 -.Lfound0: - aghi %r5,16 -.Lfound: - vlgvb %r1,%v17,7 /* Load byte index of c. */ -.Lfound2: - slgfi %r5,16 /* current_len -=16 */ - algr %r5,%r1 /* Zero byte index is added to current len. */ - la %r2,0(%r5,%r2) /* Return pointer to c. */ - br %r14 - -.Lloop64: - vl %v16,0(%r5,%r2) - vfeefs %v17,%v16,%v18 /* Find c. */ - jl .Lfound0 /* Jump away if c was found. */ - vl %v16,16(%r5,%r2) - vfeefs %v17,%v16,%v18 - jl .Lfound16 - vl %v16,32(%r5,%r2) - vfeefs %v17,%v16,%v18 - jl .Lfound32 - vl %v16,48(%r5,%r2) - vfeefs %v17,%v16,%v18 - jl .Lfound48 - - aghi %r5,64 - lgr %r0,%r5 /* If %r5 + 64 < n? -> loop64. */ - aghi %r0,64 - clgrjl %r0,%r4,.Lloop64 - - j .Llt64 -.Lfallback: - jg __wmemchr_c -END(__wmemchr_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wmemchr.c b/sysdeps/s390/multiarch/wmemchr.c deleted file mode 100644 index efb4d64e2b..0000000000 --- a/sysdeps/s390/multiarch/wmemchr.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of wmemchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define wmemchr __redirect_wmemchr -# define __wmemchr __redirect___wmemchr -# include -# undef wmemchr -# undef __wmemchr -# include - -s390_vx_libc_ifunc_redirected (__redirect___wmemchr, __wmemchr) -weak_alias (__wmemchr, wmemchr) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wmemcmp-c.c b/sysdeps/s390/multiarch/wmemcmp-c.c deleted file mode 100644 index bdd8995634..0000000000 --- a/sysdeps/s390/multiarch/wmemcmp-c.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Default wmemcmp implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WMEMCMP __wmemcmp_c - -# include -extern __typeof (wmemcmp) __wmemcmp_c; - -# include -#endif diff --git a/sysdeps/s390/multiarch/wmemcmp-vx.S b/sysdeps/s390/multiarch/wmemcmp-vx.S deleted file mode 100644 index 40e71e5a65..0000000000 --- a/sysdeps/s390/multiarch/wmemcmp-vx.S +++ /dev/null @@ -1,149 +0,0 @@ -/* Vector Optimized 32/64 bit S/390 version of wmemcmp. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* int wmemcmp (const wchar_t *s1, const wchar_t *s2, size_t n) - Compare at most n characters of two wchar_t-arrays. - - Register usage: - -r0=tmp - -r1=number of blocks - -r2=s1 - -r3=s2 - -r4=n - -r5=current_len - -v16=part of s1 - -v17=part of s2 - -v18=index of unequal -*/ -ENTRY(__wmemcmp_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r4,%r4 -# endif /* !defined __s390x__ */ - clgije %r4,0,.Lend_equal /* Nothing to do if n == 0. */ - - /* Check range of maxlen and convert to byte-count. */ -# ifdef __s390x__ - tmhh %r4,49152 /* Test bit 0 or 1 of maxlen. */ - lghi %r1,-4 /* Max byte-count is 18446744073709551612. */ -# else - tmlh %r4,49152 /* Test bit 0 or 1 of maxlen. */ - llilf %r1,4294967292 /* Max byte-count is 4294967292. */ -# endif /* !__s390x__ */ - sllg %r4,%r4,2 /* Convert character-count to byte-count. */ - locgrne %r4,%r1 /* Use max byte-count, if bit 0/1 was one. */ - - lghi %r5,0 /* current_len = 0. */ - - clgijh %r4,16,.Lgt16 - -.Lremaining: - aghi %r4,-1 /* vstl needs highest index. */ - vll %v16,%r4,0(%r2) - vll %v17,%r4,0(%r3) - vfenef %v18,%v16,%v17 /* Compare not equal. */ - vlgvb %r1,%v18,7 /* Load unequal index or 16 if not found. */ - clrj %r1,%r4,12,.Lfound2 /* r1 <= r4 -> unequal within loaded - bytes. */ - -.Lend_equal: - lghi %r2,0 - br %r14 - -.Lfound: - /* vfenezf found an unequal element or zero. - This instruction compares unsigned words, but wchar_t is signed. - Thus we have to compare the found element again. */ - vlgvb %r1,%v18,7 /* Extract not equal byte-index. */ -.Lfound2: - srl %r1,2 /* And convert it to character-index. */ - vlgvf %r0,%v16,0(%r1) /* Load character-values. */ - vlgvf %r1,%v17,0(%r1) - cr %r0,%r1 - je .Lend_equal - lghi %r2,1 - lghi %r1,-1 - locgrl %r2,%r1 - br %r14 - -.Lgt16: - clgijh %r4,64,.Lpreloop64 - -.Lpreloop16: - srlg %r1,%r4,4 /* Split into 16byte blocks */ -.Lloop16: - vl %v16,0(%r5,%r2) - vl %v17,0(%r5,%r3) - aghi %r5,16 - vfenefs %v18,%v16,%v17 /* Compare not equal. */ - jno .Lfound - brctg %r1,.Lloop16 /* Loop until all blocks are processed. */ - - llgfr %r4,%r4 - nilf %r4,15 /* Get remaining bytes */ - locgre %r2,%r4 - ber %r14 - la %r2,0(%r5,%r2) - la %r3,0(%r5,%r3) - j .Lremaining - -.Lpreloop64: - srlg %r1,%r4,6 /* Split into 64byte blocks */ -.Lloop64: - vl %v16,0(%r5,%r2) - vl %v17,0(%r5,%r3) - vfenefs %v18,%v16,%v17 /* Compare not equal. */ - jno .Lfound - - vl %v16,16(%r5,%r2) - vl %v17,16(%r5,%r3) - vfenefs %v18,%v16,%v17 - jno .Lfound - - vl %v16,32(%r5,%r2) - vl %v17,32(%r5,%r3) - vfenefs %v18,%v16,%v17 - jno .Lfound - - vl %v16,48(%r5,%r2) - vl %v17,48(%r5,%r3) - aghi %r5,64 - vfenefs %v18,%v16,%v17 - jno .Lfound - - brctg %r1,.Lloop64 /* Loop until all blocks are processed. */ - - llgfr %r4,%r4 - nilf %r4,63 /* Get remaining bytes */ - locgre %r2,%r4 - ber %r14 - clgijh %r4,16,.Lpreloop16 - la %r2,0(%r5,%r2) - la %r3,0(%r5,%r3) - j .Lremaining -END(__wmemcmp_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wmemcmp.c b/sysdeps/s390/multiarch/wmemcmp.c deleted file mode 100644 index 59471a36b2..0000000000 --- a/sysdeps/s390/multiarch/wmemcmp.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Multiple versions of wmemcmp. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# include -# include - -s390_vx_libc_ifunc2 (__wmemcmp, wmemcmp) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/multiarch/wmemset-c.c b/sysdeps/s390/multiarch/wmemset-c.c deleted file mode 100644 index 9d5a848ec8..0000000000 --- a/sysdeps/s390/multiarch/wmemset-c.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Default wmemset implementation for S/390. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define WMEMSET __wmemset_c - -# include -extern __typeof (__wmemset) __wmemset_c; -# undef weak_alias -# define weak_alias(name, alias) -# ifdef SHARED -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__wmemset_c, __GI___wmemset, __wmemset_c); -# undef libc_hidden_weak -# define libc_hidden_weak(name) \ - strong_alias (__wmemset_c, __wmemset_c_1); \ - __hidden_ver1 (__wmemset_c_1, __GI_wmemset, __wmemset_c_1); -# endif /* SHARED */ - -# include -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wmemset-vx.S b/sysdeps/s390/multiarch/wmemset-vx.S deleted file mode 100644 index 6b76dead18..0000000000 --- a/sysdeps/s390/multiarch/wmemset-vx.S +++ /dev/null @@ -1,142 +0,0 @@ -/* Vector Optimized 32/64 bit S/390 version of wmemset. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) - -# include "sysdep.h" -# include "asm-syntax.h" - - .text - -/* wchar_t *wmemset(wchar_t *dest, wchar_t wc, size_t n) - Fill an array of wide-characters with a constant wide character - and returns dest. - - Register usage: - -r0=tmp - -r1=tmp - -r2=dest or current-pointer - -r3=wc - -r4=n - -r5=tmp - -v16=replicated wc - -v17,v18,v19=copy of v16 for vstm - -v31=saved dest for return -*/ -ENTRY(__wmemset_vx) - .machine "z13" - .machinemode "zarch_nohighgprs" - -# if !defined __s390x__ - llgfr %r4,%r4 -# endif /* !defined __s390x__ */ - - vlvgg %v31,%r2,0 /* Save destination pointer for return. */ - clgije %r4,0,.Lend - - vlvgf %v16,%r3,0 /* Generate vector with wchar_t wc. */ - vrepf %v16,%v16,0 - - /* Check range of maxlen and convert to byte-count. */ -# ifdef __s390x__ - tmhh %r4,49152 /* Test bit 0 or 1 of maxlen. */ - lghi %r5,-4 /* Max byte-count is 18446744073709551612. */ -# else - tmlh %r4,49152 /* Test bit 0 or 1 of maxlen. */ - llilf %r5,4294967292 /* Max byte-count is 4294967292. */ -# endif /* !__s390x__ */ - sllg %r4,%r4,2 /* Convert character-count to byte-count. */ - locgrne %r4,%r5 /* Use max byte-count, if bit 0/1 was one. */ - - /* Align dest to 16 byte. */ - risbg %r0,%r2,60,128+63,0 /* Test if s is aligned and - %r3 = bits 60-63 'and' 15. */ - je .Lpreloop /* If s is aligned, loop aligned. */ - tmll %r2,3 /* Test if s is 4-byte aligned? */ - jne .Lfallback /* And use common-code variant if not. */ - lghi %r1,16 - slr %r1,%r0 /* Compute byte count to load (16-x). */ - clgr %r1,%r4 - locgrh %r1,%r4 /* min (byte count, n) */ - aghik %r5,%r1,-1 /* vstl needs highest index. */ - vstl %v16,%r5,0(%r2) /* Store remaining bytes. */ - clgrje %r1,%r4,.Lend /* Return if n bytes where set. */ - slgr %r4,%r1 /* Compute remaining byte count. */ - la %r2,0(%r1,%r2) - -.Lpreloop: - /* Now we are 16-byte aligned. */ - clgijl %r4,17,.Lremaining - srlg %r1,%r4,8 /* Split into 256byte blocks */ - clgije %r1,0,.Lpreloop64 - vlr %v17,%v16 - vlr %v18,%v16 - vlr %v19,%v16 - -.Lloop256: - vstm %v16,%v19,0(%r2) - vstm %v16,%v19,64(%r2) - vstm %v16,%v19,128(%r2) - vstm %v16,%v19,192(%r2) - la %r2,256(%r2) - brctg %r1,.Lloop256 /* Loop until all blocks are processed. */ - - llgfr %r4,%r4 - nilf %r4,255 /* Get remaining bytes */ - je .Lend /* Skip store remaining bytes if zero. */ - -.Lpreloop64: - clgijl %r4,17,.Lremaining - clgijl %r4,33,.Lpreloop16 - srlg %r1,%r4,5 /* Split into 32byte blocks */ - -.Lloop32: - vst %v16,0(%r2) - vst %v16,16(%r2) - la %r2,32(%r2) - brctg %r1,.Lloop32 /* Loop until all blocks are processed. */ - - llgfr %r4,%r4 - nilf %r4,31 /* Get remaining bytes */ - je .Lend /* Skip store remaining bytes if zero. */ - -.Lpreloop16: - clgijl %r4,17,.Lremaining - srlg %r1,%r4,4 /* Split into 16byte blocks */ - -.Lloop16: - vst %v16,0(%r2) - la %r2,16(%r2) - brctg %r1,.Lloop16 /* Loop until all blocks are processed. */ - - llgfr %r4,%r4 - nilf %r4,15 /* Get remaining bytes */ - je .Lend /* Skip store remaining bytes if zero. */ - -.Lremaining: - aghi %r4,-1 /* vstl needs highest index. */ - vstl %v16,%r4,0(%r2) - -.Lend: - vlgvg %r2,%v31,0 /* Load saved dest for return value. */ - br %r14 -.Lfallback: - srlg %r4,%r4,2 /* Convert byte-count to character-count. */ - jg __wmemset_c -END(__wmemset_vx) -#endif /* HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) */ diff --git a/sysdeps/s390/multiarch/wmemset.c b/sysdeps/s390/multiarch/wmemset.c deleted file mode 100644 index d3eea1cee0..0000000000 --- a/sysdeps/s390/multiarch/wmemset.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of wmemset. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc) -# define wmemset __redirect_wmemset -# define __wmemset __redirect___wmemset -# include -# undef wmemset -# undef __wmemset -# include - -s390_vx_libc_ifunc_redirected (__redirect___wmemset, __wmemset) -weak_alias (__wmemset, wmemset) - -#else -# include -#endif /* !(defined HAVE_S390_VX_ASM_SUPPORT && IS_IN (libc)) */ diff --git a/sysdeps/s390/nptl/Makefile b/sysdeps/s390/nptl/Makefile deleted file mode 100644 index f5957b9060..0000000000 --- a/sysdeps/s390/nptl/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (C) 2003-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif - -ifeq ($(subdir),nptl) -libpthread-routines += sysdep -libpthread-shared-only-routines += sysdep -endif diff --git a/sysdeps/s390/nptl/bits/pthreadtypes-arch.h b/sysdeps/s390/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index 3a9ac57625..0000000000 --- a/sysdeps/s390/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -#define _BITS_PTHREADTYPES_ARCH_H 1 - -#include - -#if __WORDSIZE == 64 -# define __SIZEOF_PTHREAD_ATTR_T 56 -# define __SIZEOF_PTHREAD_MUTEX_T 40 -# define __SIZEOF_PTHREAD_RWLOCK_T 56 -# define __SIZEOF_PTHREAD_BARRIER_T 32 -#else -# define __SIZEOF_PTHREAD_ATTR_T 36 -# define __SIZEOF_PTHREAD_MUTEX_T 24 -# define __SIZEOF_PTHREAD_RWLOCK_T 32 -# define __SIZEOF_PTHREAD_BARRIER_T 20 -#endif -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - -/* Definitions for internal mutex struct. */ -#define __PTHREAD_COMPAT_PADDING_MID -#define __PTHREAD_COMPAT_PADDING_END -#ifdef ENABLE_LOCK_ELISION -#define __PTHREAD_MUTEX_LOCK_ELISION 1 -#else -#define __PTHREAD_MUTEX_LOCK_ELISION 0 -#endif - -#define __LOCK_ALIGNMENT -#define __ONCE_ALIGNMENT - -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; -#if __WORDSIZE == 64 - int __cur_writer; - int __shared; - unsigned long int __pad1; - unsigned long int __pad2; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned int __flags; -# else - unsigned char __pad1; - unsigned char __pad2; - unsigned char __shared; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; - int __cur_writer; -#endif -}; - -#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/s390/nptl/bits/semaphore.h b/sysdeps/s390/nptl/bits/semaphore.h deleted file mode 100644 index 976a136fd2..0000000000 --- a/sysdeps/s390/nptl/bits/semaphore.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - -#include - -#if __WORDSIZE == 64 -# define __SIZEOF_SEM_T 32 -#else -# define __SIZEOF_SEM_T 16 -#endif - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/sysdeps/s390/nptl/pthreaddef.h b/sysdeps/s390/nptl/pthreaddef.h deleted file mode 100644 index a5ae960c7d..0000000000 --- a/sysdeps/s390/nptl/pthreaddef.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. SSE requires 16 - bytes. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 16 - - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME __builtin_frame_address (0) diff --git a/sysdeps/s390/nptl/tcb-offsets.sym b/sysdeps/s390/nptl/tcb-offsets.sym deleted file mode 100644 index 9c1c01f353..0000000000 --- a/sysdeps/s390/nptl/tcb-offsets.sym +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include - -MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads) -STACK_GUARD offsetof (tcbhead_t, stack_guard) -TID offsetof (struct pthread, tid) diff --git a/sysdeps/s390/nptl/tls.h b/sysdeps/s390/nptl/tls.h deleted file mode 100644 index 7bc6c897b3..0000000000 --- a/sysdeps/s390/nptl/tls.h +++ /dev/null @@ -1,196 +0,0 @@ -/* Definition for thread-local data handling. NPTL/s390 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TLS_H -#define _TLS_H 1 - -#include -#ifndef __ASSEMBLER__ -# include -# include -# include -# include -# include -# include -# include - -typedef struct -{ - void *tcb; /* Pointer to the TCB. Not necessary the - thread descriptor used by libpthread. */ - dtv_t *dtv; - void *self; /* Pointer to the thread descriptor. */ - int multiple_threads; - uintptr_t sysinfo; - uintptr_t stack_guard; - int gscope_flag; -#ifndef __ASSUME_PRIVATE_FUTEX - int private_futex; -#else - int __glibc_reserved1; -#endif - /* GCC split stack support. */ - void *__private_ss; -} tcbhead_t; - -# ifndef __s390x__ -# define TLS_MULTIPLE_THREADS_IN_TCB 1 -# endif - -#else /* __ASSEMBLER__ */ -# include -#endif - - -/* Alignment requirement for the stack. For IA-32 this is governed by - the SSE memory functions. */ -#define STACK_ALIGN 16 - -#ifndef __ASSEMBLER__ -/* Get system call information. */ -# include - -/* This is the size of the initial TCB. Can't be just sizeof (tcbhead_t), - because NPTL getpid, __libc_alloca_cutoff etc. need (almost) the whole - struct pthread even when not linked with -lpthread. */ -# define TLS_INIT_TCB_SIZE sizeof (struct pthread) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE sizeof (struct pthread) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* The TCB can have any size and the memory following the address the - thread pointer points to is unspecified. Allocate the TCB there. */ -# define TLS_TCB_AT_TP 1 -# define TLS_DTV_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include - - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(descr, dtvp) \ - ((tcbhead_t *) (descr))->dtv = (dtvp) + 1 - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtv) \ - (((tcbhead_t *) __builtin_thread_pointer ())->dtv = (dtv)) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(descr) \ - (((tcbhead_t *) (descr))->dtv) - -#if defined NEED_DL_SYSINFO && defined SHARED -# define INIT_SYSINFO \ - _head->sysinfo = GLRO(dl_sysinfo) -#else -# define INIT_SYSINFO -#endif - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(thrdescr) \ - ({ void *_thrdescr = (thrdescr); \ - tcbhead_t *_head = _thrdescr; \ - \ - _head->tcb = _thrdescr; \ - /* For now the thread descriptor is at the same address. */ \ - _head->self = _thrdescr; \ - /* New syscall handling support. */ \ - INIT_SYSINFO; \ - \ - __builtin_set_thread_pointer (_thrdescr); \ - NULL; \ - }) - -/* Value passed to 'clone' for initialization of the thread register. */ -# define TLS_DEFINE_INIT_TP(tp, pd) void *tp = (pd) - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - (((tcbhead_t *) __builtin_thread_pointer ())->dtv) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF ((struct pthread *) __builtin_thread_pointer ()) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF REGISTER (32, 32, 18 * 4, 0) \ - REGISTER (64, __WORDSIZE, 18 * 8, 0) - -/* Access to data in the thread descriptor is easy. */ -#define THREAD_GETMEM(descr, member) \ - descr->member -#define THREAD_GETMEM_NC(descr, member, idx) \ - descr->member[idx] -#define THREAD_SETMEM(descr, member, value) \ - descr->member = (value) -#define THREAD_SETMEM_NC(descr, member, idx, value) \ - descr->member[idx] = (value) - -/* Set the stack guard field in TCB head. */ -#define THREAD_SET_STACK_GUARD(value) \ - do \ - { \ - __asm__ __volatile__ ("" : : : "a0", "a1"); \ - THREAD_SETMEM (THREAD_SELF, header.stack_guard, value); \ - } \ - while (0) -#define THREAD_COPY_STACK_GUARD(descr) \ - ((descr)->header.stack_guard \ - = THREAD_GETMEM (THREAD_SELF, header.stack_guard)) - -/* s390 doesn't have HP_TIMING_*, so for the time being - use stack_guard as pointer_guard. */ -#define THREAD_GET_POINTER_GUARD() \ - THREAD_GETMEM (THREAD_SELF, header.stack_guard) -#define THREAD_SET_POINTER_GUARD(value) ((void) (value)) -#define THREAD_COPY_POINTER_GUARD(descr) - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/s390/preconfigure b/sysdeps/s390/preconfigure deleted file mode 100644 index d6302b0c15..0000000000 --- a/sysdeps/s390/preconfigure +++ /dev/null @@ -1,6 +0,0 @@ -# preconfigure fragment for s390. - -case "$machine" in -s390) base_machine=s390 machine=s390/s390-32 ;; -s390x) base_machine=s390 machine=s390/s390-64 ;; -esac diff --git a/sysdeps/s390/s390-32/Implies b/sysdeps/s390/s390-32/Implies deleted file mode 100644 index 39a34c5f57..0000000000 --- a/sysdeps/s390/s390-32/Implies +++ /dev/null @@ -1 +0,0 @@ -wordsize-32 diff --git a/sysdeps/s390/s390-32/Makefile b/sysdeps/s390/s390-32/Makefile deleted file mode 100644 index a07f2986ae..0000000000 --- a/sysdeps/s390/s390-32/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -ifeq ($(subdir),gmon) -sysdep_routines += s390-mcount -endif - -ifeq ($(subdir),elf) -CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused -CFLAGS-dl-load.c += -Wno-unused -CFLAGS-dl-reloc.c += -Wno-unused -endif diff --git a/sysdeps/s390/s390-32/Versions b/sysdeps/s390/s390-32/Versions deleted file mode 100644 index 2b020f8f58..0000000000 --- a/sysdeps/s390/s390-32/Versions +++ /dev/null @@ -1,6 +0,0 @@ -libc { - GLIBC_2.0 { - # Functions from libgcc. - __divdi3; __moddi3; __udivdi3; __umoddi3; - } -} diff --git a/sysdeps/s390/s390-32/__longjmp.c b/sysdeps/s390/s390-32/__longjmp.c deleted file mode 100644 index abdd9641e6..0000000000 --- a/sysdeps/s390/s390-32/__longjmp.c +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -/* Jump to the position specified by ENV, causing the - setjmp call there to return VAL, or 1 if VAL is 0. */ -void -__longjmp (__jmp_buf env, int val) -{ -#ifdef PTR_DEMANGLE - uintptr_t guard = THREAD_GET_POINTER_GUARD (); -# ifdef CHECK_SP - CHECK_SP (env, guard); -# endif -#elif defined CHECK_SP - CHECK_SP (env, 0); -#endif - register int r2 __asm__ ("%r2") = val == 0 ? 1 : val; -#ifdef PTR_DEMANGLE - register uintptr_t r3 __asm__ ("%r3") = guard; - register void *r1 __asm__ ("%r1") = (void *) env; -#endif - /* Restore registers and jump back. */ - __asm__ __volatile__ ( - /* longjmp probe expects longjmp first argument, second - argument and target address. */ -#ifdef PTR_DEMANGLE - "lm %%r4,%%r5,32(%1)\n\t" - "xr %%r4,%2\n\t" - "xr %%r5,%2\n\t" - LIBC_PROBE_ASM (longjmp, 4@%1 -4@%0 4@%%r4) -#else - LIBC_PROBE_ASM (longjmp, 4@%1 -4@%0 4@%%r14) -#endif - - /* restore fpregs */ - "ld %%f6,48(%1)\n\t" - "ld %%f4,40(%1)\n\t" - - /* restore gregs and return to jmp_buf target */ -#ifdef PTR_DEMANGLE - "lm %%r6,%%r13,0(%1)\n\t" - "lr %%r15,%%r5\n\t" - LIBC_PROBE_ASM (longjmp_target, 4@%1 -4@%0 4@%%r4) - "br %%r4" -#else - "lm %%r6,%%r15,0(%1)\n\t" - LIBC_PROBE_ASM (longjmp_target, 4@%1 -4@%0 4@%%r14) - "br %%r14" -#endif - : : "r" (r2), -#ifdef PTR_DEMANGLE - "r" (r1), "r" (r3) -#else - "a" (env) -#endif - ); - - /* Avoid `volatile function does return' warnings. */ - for (;;); -} diff --git a/sysdeps/s390/s390-32/add_n.S b/sysdeps/s390/s390-32/add_n.S deleted file mode 100644 index ed9cc27693..0000000000 --- a/sysdeps/s390/s390-32/add_n.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Add two limb vectors of the same length > 0 and store sum in a third - limb vector. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -/* - INPUT PARAMETERS - res_ptr %r2 - s1_ptr %r3 - s2_ptr %r4 - size %r5 -*/ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(__mpn_add_n) - st %r6,24(%r15) # save register 6 - cfi_offset (%r6, -72) - sr %r1,%r1 - lhi %r0,1 # cannot use ahi to add carry, use alr -.L0: l %r6,0(%r1,%r3) # .L0 -> no carry from last add - al %r6,0(%r1,%r4) - st %r6,0(%r1,%r2) - la %r1,4(0,%r1) - brc 3,.L3 -.L1: brct %r5,.L0 - slr %r2,%r2 # no last carry to return - j .Lexit -.L2: l %r6,0(%r1,%r3) # .L2 -> carry from last add - al %r6,0(%r1,%r4) - brc 3,.L4 - alr %r6,%r0 # no carry yet, add carry from last add - st %r6,0(%r1,%r2) - la %r1,4(0,%r1) - brc 12,.L1 # new carry ? -.L3: brct %r5,.L2 - lr %r2,%r0 # return last carry - j .Lexit -.L4: alr %r6,%r0 # already a carry, add carry from last add - st %r6,0(%r1,%r2) - la %r1,4(0,%r1) - brct %r5,.L2 - lr %r2,%r0 # return last carry -.Lexit: l %r6,24(%r15) # restore register 6 - br %r14 -END(__mpn_add_n) diff --git a/sysdeps/s390/s390-32/addmul_1.S b/sysdeps/s390/s390-32/addmul_1.S deleted file mode 100644 index 6a4318ce49..0000000000 --- a/sysdeps/s390/s390-32/addmul_1.S +++ /dev/null @@ -1,58 +0,0 @@ -/* S390 __mpn_addmul_1 -- Multiply a limb vector with a limb and add - the result to a second limb vector. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -/* - INPUT PARAMETERS - res_ptr %r2 - s1_ptr %r3 - sizeP %r4 - s2_limb %r5 -*/ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(__mpn_addmul_1) - st %r6,24(%r15) - cfi_offset (%r6, -72) - slr %r6,%r6 # cy_limb = 0 -.L0: icm %r1,15,0(%r3) # get s1_ptr[i] - mr %r0,%r5 # umul_ppmm(prod_high,prod_low,s1_ptr[j],s2_limb) - jnm .L1 - alr %r0,%r5 -.L1: ltr %r5,%r5 - jnm .L2 - al %r0,0(%r3) -.L2: alr %r1,%r6 # prod_low += cy_limb - lr %r6,%r0 # cy_limb = prod_high - brc 12,.L3 - ahi %r6,1 # + (prod_low < cy_limb) -.L3: al %r1,0(%r2) # prod_low += res_ptr[i] - brc 12,.L4 - ahi %r6,1 # cy_limb++ -.L4: st %r1,0(%r2) - la %r2,4(0,%r2) - la %r3,4(0,%r3) - brct %r4,.L0 - lr %r2,%r6 # return cy_limb - l %r6,24(%r15) -.Lexit: br %r14 -END(__mpn_addmul_1) diff --git a/sysdeps/s390/s390-32/backtrace.c b/sysdeps/s390/s390-32/backtrace.c deleted file mode 100644 index 705b05d139..0000000000 --- a/sysdeps/s390/s390-32/backtrace.c +++ /dev/null @@ -1,148 +0,0 @@ -/* Return backtrace of current program state. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* This is a global variable set at program start time. It marks the - highest used stack address. */ -extern void *__libc_stack_end; - - -/* This is the stack layout we see for every non-leaf function. - size offset - %r15 -> +------------------+ - 4 | back chain | 0 - 4 | end of stack | 4 - 8 | glue | 8 - 8 | scratch | 16 - 40 | save area r6-r15 | 24 - 16 | save area f4,f6 | 64 - 16 | empty | 80 - +------------------+ - r14 in the save area holds the return address. -*/ - -struct layout -{ - int back_chain; - int end_of_stack; - int glue[2]; - int scratch[2]; - int save_grps[10]; - int save_fp[4]; - int empty[2]; -}; - -struct trace_arg -{ - void **array; - int cnt, size; -}; - -#ifdef SHARED -static _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *); -static _Unwind_Ptr (*unwind_getip) (struct _Unwind_Context *); - -static void -init (void) -{ - void *handle = __libc_dlopen ("libgcc_s.so.1"); - - if (handle == NULL) - return; - - unwind_backtrace = __libc_dlsym (handle, "_Unwind_Backtrace"); - unwind_getip = __libc_dlsym (handle, "_Unwind_GetIP"); - if (unwind_getip == NULL) - unwind_backtrace = NULL; -} - -static int -__backchain_backtrace (void **array, int size) -{ - /* We assume that all the code is generated with frame pointers set. */ - struct layout *stack; - int cnt = 0; - - __asm__ ("LR %0,%%r15" : "=d" (stack) ); - /* We skip the call to this function, it makes no sense to record it. */ - stack = (struct layout *) stack->back_chain; - while (cnt < size) - { - if (stack == NULL || (void *) stack > __libc_stack_end) - /* This means the address is out of range. Note that for the - toplevel we see a frame pointer with value NULL which clearly is - out of range. */ - break; - - array[cnt++] = (void *) (stack->save_grps[8] & 0x7fffffff); - - stack = (struct layout *) stack->back_chain; - } - - return cnt; -} -#else -# define unwind_backtrace _Unwind_Backtrace -# define unwind_getip _Unwind_GetIP -#endif - -static _Unwind_Reason_Code -backtrace_helper (struct _Unwind_Context *ctx, void *a) -{ - struct trace_arg *arg = a; - - /* We are first called with address in the __backtrace function. - Skip it. */ - if (arg->cnt != -1) - arg->array[arg->cnt] = (void *) unwind_getip (ctx); - if (++arg->cnt == arg->size) - return _URC_END_OF_STACK; - return _URC_NO_REASON; -} - -int -__backtrace (void **array, int size) -{ - struct trace_arg arg = { .array = array, .size = size, .cnt = -1 }; - - if (size <= 0) - return 0; - -#ifdef SHARED - __libc_once_define (static, once); - - __libc_once (once, init); - - if (unwind_backtrace == NULL) - return __backchain_backtrace (array, size); -#endif - - unwind_backtrace (backtrace_helper, &arg); - - return arg.cnt != -1 ? arg.cnt : 0; -} - -weak_alias (__backtrace, backtrace) -libc_hidden_def (__backtrace) diff --git a/sysdeps/s390/s390-32/bcopy.S b/sysdeps/s390/s390-32/bcopy.S deleted file mode 100644 index 06f51f3aa7..0000000000 --- a/sysdeps/s390/s390-32/bcopy.S +++ /dev/null @@ -1,85 +0,0 @@ -/* bcopy -- copy a block from source to destination. S/390 version. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* INPUT PARAMETERS - %r2 = address of source - %r3 = address of destination - %r4 = number of bytes to copy. */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(__bcopy) - ltr %r1,%r4 # zero bcopy ? - jz .L4 - clr %r2,%r3 # check against destructive overlap - jnl .L0 - alr %r1,%r2 - clr %r1,%r3 - jh .L7 -.L0: ahi %r4,-1 # length - 1 - lr %r1,%r4 - srl %r1,8 - ltr %r1,%r1 # < 256 bytes to move ? - jz .L2 - chi %r1,255 # > 1MB to move ? - jh .L5 -.L1: mvc 0(256,%r3),0(%r2) # move in 256 byte chunks - la %r2,256(%r2) - la %r3,256(%r3) - brct %r1,.L1 -.L2: bras %r1,.L3 # setup base pointer for execute - mvc 0(1,%r3),0(%r2) # instruction for execute -.L3: ex %r4,0(%r1) # execute mvc with length ((%r4)&255)+1 -.L4: br %r14 - - # data copies > 1MB are faster with mvcle. -.L5: ahi %r4,1 # length + 1 - lr %r5,%r4 # source length - lr %r4,%r2 # source address - lr %r2,%r3 # set destination - lr %r3,%r5 # destination length = source length -.L6: mvcle %r2,%r4,0 # thats it, MVCLE is your friend - jo .L6 - br %r14 -.L7: # destructive overlay, can not use mvcle - lr %r1,%r2 # bcopy is called with source,dest - lr %r2,%r3 # memmove with dest,source! Oh, well... - lr %r3,%r1 - basr %r1,0 -.L8: -#ifdef PIC - al %r1,.L9-.L8(%r1) # get address of global offset table - # load address of memmove - l %r1,memmove@GOT(%r1) - br %r1 -.L9: .long _GLOBAL_OFFSET_TABLE_-.L8 -#else - al %r1,.L9-.L8(%r1) # load address of memmove - br %r1 # jump to memmove -.L9: .long memmove-.L8 -#endif - -END(__bcopy) - -#ifndef NO_WEAK_ALIAS -weak_alias (__bcopy, bcopy) -#endif - diff --git a/sysdeps/s390/s390-32/bits/wordsize.h b/sysdeps/s390/s390-32/bits/wordsize.h deleted file mode 100644 index 129e47182b..0000000000 --- a/sysdeps/s390/s390-32/bits/wordsize.h +++ /dev/null @@ -1,11 +0,0 @@ -/* Determine the wordsize from the preprocessor defines. */ - -#if defined __s390x__ -# define __WORDSIZE 64 -#else -# define __WORDSIZE 32 -# define __WORDSIZE32_SIZE_ULONG 1 -# define __WORDSIZE32_PTRDIFF_LONG 0 -#endif - -#define __WORDSIZE_TIME64_COMPAT32 0 diff --git a/sysdeps/s390/s390-32/bsd-_setjmp.S b/sysdeps/s390/s390-32/bsd-_setjmp.S deleted file mode 100644 index 1417270201..0000000000 --- a/sysdeps/s390/s390-32/bsd-_setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* We don't need any code here since the setjmp.S file contains it. */ diff --git a/sysdeps/s390/s390-32/bsd-setjmp.S b/sysdeps/s390/s390-32/bsd-setjmp.S deleted file mode 100644 index 1417270201..0000000000 --- a/sysdeps/s390/s390-32/bsd-setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* We don't need any code here since the setjmp.S file contains it. */ diff --git a/sysdeps/s390/s390-32/bzero.S b/sysdeps/s390/s390-32/bzero.S deleted file mode 100644 index b6f85e681f..0000000000 --- a/sysdeps/s390/s390-32/bzero.S +++ /dev/null @@ -1,42 +0,0 @@ -/* bzero -- set a block of memory to zero. IBM S390 version - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * R2 = address to memory area - * R3 = number of bytes to fill - */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(__bzero) - ltr %r3,%r3 - jz .L1 - sr %r1,%r1 # set pad byte to zero - sr %r4,%r4 # no source for MVCLE, only a pad byte - sr %r5,%r5 -.L0: mvcle %r2,%r4,0(%r1) # thats it, MVCLE is your friend - jo .L0 -.L1: br %r14 -END(__bzero) - -#ifndef NO_WEAK_ALIAS -weak_alias (__bzero, bzero) -#endif diff --git a/sysdeps/s390/s390-32/crti.S b/sysdeps/s390/s390-32/crti.S deleted file mode 100644 index 54bd4590c0..0000000000 --- a/sysdeps/s390/s390-32/crti.S +++ /dev/null @@ -1,102 +0,0 @@ -/* Special .init and .fini section support for S/390. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - - .section .init,"ax",@progbits - .globl _init - .type _init,@function - .align 4 -_init: - stm %r6,%r15,24(%r15) - bras %r13,1f -0: -#if PREINIT_FUNCTION_WEAK - .long PREINIT_FUNCTION@GOT -#else - .long PREINIT_FUNCTION-0b -#endif - .long _GLOBAL_OFFSET_TABLE_-0b -1: lr %r1,%r15 - ahi %r15,-96 - st %r1,0(%r15) - l %r12,4(%r13) - ar %r12,%r13 - l %r1,0(%r13) -#if PREINIT_FUNCTION_WEAK - l %r1,0(%r1,%r12) - ltr %r1,%r1 - je 2f -#else - la %r1,0(%r1,%r13) -#endif - basr %r14,%r1 - .align 4,0x07 -2: - - .section .fini,"ax",@progbits - .globl _fini - .type _fini,@function - .align 4 -_fini: - stm %r6,%r15,24(%r15) - bras %r13,1f -0: .long _GLOBAL_OFFSET_TABLE_-0b -1: lr %r1,%r15 - ahi %r15,-96 - st %r1,0(%r15) - l %r12,0(%r13) - ar %r12,%r13 - .align 4,0x07 diff --git a/sysdeps/s390/s390-32/crtn.S b/sysdeps/s390/s390-32/crtn.S deleted file mode 100644 index 3f5d85e2b2..0000000000 --- a/sysdeps/s390/s390-32/crtn.S +++ /dev/null @@ -1,47 +0,0 @@ -/* Special .init and .fini section support for S/390. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .section .init,"ax",@progbits - l %r4,152(%r15) - lm %r6,%r15,120(%r15) - br %r4 - - .section .fini,"ax",@progbits - l %r4,152(%r15) - lm %r6,%r15,120(%r15) - br %r4 diff --git a/sysdeps/s390/s390-32/dl-machine.h b/sysdeps/s390/s390-32/dl-machine.h deleted file mode 100644 index 2e3c77c58e..0000000000 --- a/sysdeps/s390/s390-32/dl-machine.h +++ /dev/null @@ -1,522 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. S390 Version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Carl Pederson & Martin Schwidefsky. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "s390" - -#include -#include -#include -#include -#include - -/* This is an older, now obsolete value. */ -#define EM_S390_OLD 0xA390 - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf32_Ehdr *ehdr) -{ - /* Check if the kernel provides the high gpr facility if needed by - the binary. */ - if ((ehdr->e_flags & EF_S390_HIGH_GPRS) - && !(GLRO (dl_hwcap) & HWCAP_S390_HIGH_GPRS)) - return 0; - - return (ehdr->e_machine == EM_S390 || ehdr->e_machine == EM_S390_OLD) - && ehdr->e_ident[EI_CLASS] == ELFCLASS32; -} - - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. This must be inlined in a function which - uses global data. */ - -static inline Elf32_Addr -elf_machine_dynamic (void) -{ - register Elf32_Addr *got; - - __asm__( " bras %0,2f\n" - "1: .long _GLOBAL_OFFSET_TABLE_-1b\n" - "2: al %0,0(%0)" - : "=&a" (got) : : "0" ); - - return *got; -} - - -/* Return the run-time load address of the shared object. */ -static inline Elf32_Addr -elf_machine_load_address (void) -{ - Elf32_Addr addr; - - __asm__( " bras 1,2f\n" - "1: .long _GLOBAL_OFFSET_TABLE_ - 1b\n" - " .long (_dl_start - 1b - 0x80000000) & 0x00000000ffffffff\n" - "2: l %0,4(1)\n" - " ar %0,1\n" - " al 1,0(1)\n" - " sl %0,_dl_start@GOT(1)" - : "=&d" (addr) : : "1" ); - return addr; -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int __attribute__ ((unused)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - extern void _dl_runtime_resolve (Elf32_Word); - extern void _dl_runtime_profile (Elf32_Word); -#if defined HAVE_S390_VX_ASM_SUPPORT - extern void _dl_runtime_resolve_vx (Elf32_Word); - extern void _dl_runtime_profile_vx (Elf32_Word); -#endif - - - if (l->l_info[DT_JMPREL] && lazy) - { - /* The GOT entries for functions in the PLT have not yet been filled - in. Their initial contents will arrange when called to push an - offset into the .rel.plt section, push _GLOBAL_OFFSET_TABLE_[1], - and then jump to _GLOBAL_OFFSET_TABLE[2]. */ - Elf32_Addr *got; - got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]); - /* If a library is prelinked but we have to relocate anyway, - we have to be able to undo the prelinking of .got.plt. - The prelinker saved us here address of .plt + 0x2c. */ - if (got[1]) - { - l->l_mach.plt = got[1] + l->l_addr; - l->l_mach.jmprel = (const Elf32_Rela *) D_PTR (l, l_info[DT_JMPREL]); - } - got[1] = (Elf32_Addr) l; /* Identify this shared object. */ - - /* The got[2] entry contains the address of a function which gets - called to get the address of a so far unresolved function and - jump to it. The profiling extension of the dynamic linker allows - to intercept the calls to collect information. In this case we - don't store the address in the GOT so that all future calls also - end in this function. */ - if (__glibc_unlikely (profile)) - { -#if defined HAVE_S390_VX_ASM_SUPPORT - if (GLRO(dl_hwcap) & HWCAP_S390_VX) - got[2] = (Elf32_Addr) &_dl_runtime_profile_vx; - else - got[2] = (Elf32_Addr) &_dl_runtime_profile; -#else - got[2] = (Elf32_Addr) &_dl_runtime_profile; -#endif - - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - /* This is the object we are looking for. Say that we really - want profiling and the timers are started. */ - GL(dl_profile_map) = l; - } - else - { - /* This function will get called to fix up the GOT entry indicated by - the offset on the stack, and then jump to the resolved address. */ -#if defined HAVE_S390_VX_ASM_SUPPORT - if (GLRO(dl_hwcap) & HWCAP_S390_VX) - got[2] = (Elf32_Addr) &_dl_runtime_resolve_vx; - else - got[2] = (Elf32_Addr) &_dl_runtime_resolve; -#else - got[2] = (Elf32_Addr) &_dl_runtime_resolve; -#endif - } - } - - return lazy; -} - -/* Mask identifying addresses reserved for the user program, - where the dynamic linker should not map anything. */ -#define ELF_MACHINE_USER_ADDRESS_MASK 0xf8000000UL - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START __asm__ ("\n\ -.text\n\ -.align 4\n\ -.globl _start\n\ -.globl _dl_start_user\n\ -_start:\n\ - basr %r13,0\n\ -0: ahi %r13,.Llit-0b\n\ - lr %r2,%r15\n\ - # Alloc stack frame\n\ - ahi %r15,-96\n\ - # Set the back chain to zero\n\ - xc 0(4,%r15),0(%r15)\n\ - # Call _dl_start with %r2 pointing to arg on stack\n\ - l %r14,.Ladr1-.Llit(%r13)\n\ - bas %r14,0(%r14,%r13) # call _dl_start\n\ -_dl_start_user:\n\ - # Save the user entry point address in %r8.\n\ - lr %r8,%r2\n\ - # Point %r12 at the GOT.\n\ - l %r12,.Ladr0-.Llit(%r13)\n\ - ar %r12,%r13\n\ - # See if we were run as a command with the executable file\n\ - # name as an extra leading argument.\n\ - l %r1,_dl_skip_args@GOT(%r12)\n\ - l %r1,0(%r1) # load _dl_skip_args\n\ - ltr %r1,%r1\n\ - je 4f # Skip the arg adjustment if there were none.\n\ - # Get the original argument count.\n\ - l %r0,96(%r15)\n\ - # Subtract _dl_skip_args from it.\n\ - sr %r0,%r1\n\ - # Store back the modified argument count.\n\ - st %r0,96(%r15)\n\ - # Copy argv and envp forward to account for skipped argv entries.\n\ - # We skipped at least one argument or we would not get here.\n\ - la %r6,100(%r15) # Destination pointer i.e. &argv[0]\n\ - lr %r5,%r6\n\ - lr %r0,%r1\n\ - sll %r0,2\n # Number of skipped bytes.\n\ - ar %r5,%r0 # Source pointer = Dest + Skipped args.\n\ - # argv copy loop:\n\ -1: l %r7,0(%r5) # Load a word from the source.\n\ - st %r7,0(%r6) # Store the word in the destination.\n\ - ahi %r5,4\n\ - ahi %r6,4\n\ - ltr %r7,%r7\n\ - jne 1b # Stop after copying the NULL.\n\ - # envp copy loop:\n\ -2: l %r7,0(%r5) # Load a word from the source.\n\ - st %r7,0(%r6) # Store the word in the destination.\n\ - ahi %r5,4\n\ - ahi %r6,4\n\ - ltr %r7,%r7\n\ - jne 2b # Stop after copying the NULL.\n\ - # Now we have to zero out the envp entries after NULL to allow\n\ - # start.S to properly find auxv by skipping zeroes.\n\ - # zero out loop:\n\ - lhi %r7,0\n\ -3: st %r7,0(%r6) # Store zero.\n\ - ahi %r6,4 # Advance dest pointer.\n\ - ahi %r1,-1 # Subtract one from the word count.\n\ - ltr %r1,%r1\n\ - jne 3b # Keep copying if the word count is non-zero.\n\ - # Adjust _dl_argv\n\ - la %r6,100(%r15)\n\ - l %r1,_dl_argv@GOT(%r12)\n\ - st %r6,0(%r1)\n\ - # The special initializer gets called with the stack just\n\ - # as the application's entry point will see it; it can\n\ - # switch stacks if it moves these contents over.\n\ -" RTLD_START_SPECIAL_INIT "\n\ - # Call the function to run the initializers.\n\ - # Load the parameters:\n\ - # (%r2, %r3, %r4, %r5) = (_dl_loaded, argc, argv, envp)\n\ -4: l %r2,_rtld_local@GOT(%r12)\n\ - l %r2,0(%r2)\n\ - l %r3,96(%r15)\n\ - la %r4,100(%r15)\n\ - lr %r5,%r3\n\ - sll %r5,2\n\ - la %r5,104(%r5,%r15)\n\ - l %r1,.Ladr4-.Llit(%r13)\n\ - bas %r14,0(%r1,%r13)\n\ - # Pass our finalizer function to the user in %r14, as per ELF ABI.\n\ - l %r14,_dl_fini@GOT(%r12)\n\ - # Free stack frame\n\ - ahi %r15,96\n\ - # Jump to the user's entry point (saved in %r8).\n\ - br %r8\n\ -.Llit:\n\ -.Ladr0: .long _GLOBAL_OFFSET_TABLE_-.Llit\n\ -.Ladr1: .long _dl_start-.Llit\n\ -.Ladr4: .long _dl_init@PLT-.Llit\n\ -"); - -#ifndef RTLD_START_SPECIAL_INIT -#define RTLD_START_SPECIAL_INIT /* nothing */ -#endif - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or - TLS variable, so undefined references should not be allowed to - define the value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. */ -#define elf_machine_type_class(type) \ - ((((type) == R_390_JMP_SLOT || (type) == R_390_TLS_DTPMOD \ - || (type) == R_390_TLS_DTPOFF || (type) == R_390_TLS_TPOFF) \ - * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_390_COPY) * ELF_RTYPE_CLASS_COPY)) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_390_JMP_SLOT - -/* The S390 never uses Elf32_Rel relocations. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -/* We define an initialization functions. This is called very early in - _dl_sysdep_start. */ -#define DL_PLATFORM_INIT dl_platform_init () - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ - if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') - /* Avoid an empty string which would disturb us. */ - GLRO(dl_platform) = NULL; -} - -static inline Elf32_Addr -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf32_Rela *reloc, - Elf32_Addr *reloc_addr, Elf32_Addr value) -{ - return *reloc_addr = value; -} - -/* Return the final value of a plt relocation. */ -static inline Elf32_Addr -elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, - Elf32_Addr value) -{ - return value; -} - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER s390_32_gnu_pltenter -#define ARCH_LA_PLTEXIT s390_32_gnu_pltexit - -#endif /* !dl_machine_h */ - - -#ifdef RESOLVE_MAP - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, - const Elf32_Sym *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC - if (__glibc_unlikely (r_type == R_390_RELATIVE)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; - make the reference weak so static programs can still link. - This declaration cannot be done when compiling rtld.c - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the - common defn for _dl_rtld_map, which is incompatible with a - weak decl in the same file. */ -# ifndef SHARED - weak_extern (GL(dl_rtld_map)); -# endif - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ -# endif - *reloc_addr = map->l_addr + reloc->r_addend; - } - else -#endif - if (__glibc_unlikely (r_type == R_390_NONE)) - return; - else - { -#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP - /* Only needed for R_390_COPY below. */ - const Elf32_Sym *const refsym = sym; -#endif - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value; - - if (sym != NULL - && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0) - && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) - && __builtin_expect (!skip_ifunc, 1)) - value = elf_ifunc_invoke (value); - - switch (r_type) - { - case R_390_IRELATIVE: - value = map->l_addr + reloc->r_addend; - if (__glibc_likely (!skip_ifunc)) - value = elf_ifunc_invoke (value); - *reloc_addr = value; - break; - - case R_390_GLOB_DAT: - case R_390_JMP_SLOT: - *reloc_addr = value + reloc->r_addend; - break; - -#ifndef RESOLVE_CONFLICT_FIND_MAP - case R_390_TLS_DTPMOD: -# ifdef RTLD_BOOTSTRAP - /* During startup the dynamic linker is always the module - with index 1. - XXX If this relocation is necessary move before RESOLVE - call. */ - *reloc_addr = 1; -# else - /* Get the information from the link map returned by the - resolv function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; -# endif - break; - case R_390_TLS_DTPOFF: -# ifndef RTLD_BOOTSTRAP - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ - if (sym != NULL) - *reloc_addr = sym->st_value + reloc->r_addend; -# endif - break; - case R_390_TLS_TPOFF: - /* The offset is negative, forward from the thread pointer. */ -# ifdef RTLD_BOOTSTRAP - *reloc_addr = sym->st_value + reloc->r_addend - map->l_tls_offset; -# else - /* We know the offset of the object the symbol is contained in. - It is a negative value which will be added to the - thread pointer. */ - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = (sym->st_value + reloc->r_addend - - sym_map->l_tls_offset); - } -#endif - break; -#endif /* use TLS */ - -#ifndef RTLD_BOOTSTRAP -# ifndef RESOLVE_CONFLICT_FIND_MAP - /* Not needed in dl-conflict.c. */ - case R_390_COPY: - if (sym == NULL) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (__builtin_expect (sym->st_size > refsym->st_size, 0) - || (__builtin_expect (sym->st_size < refsym->st_size, 0) - && __builtin_expect (GLRO(dl_verbose), 0))) - { - const char *strtab; - - strtab = (const char *) D_PTR(map,l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - break; -# endif - case R_390_32: - *reloc_addr = value + reloc->r_addend; - break; - case R_390_16: - *(unsigned short *) reloc_addr = value + reloc->r_addend; - break; - case R_390_8: - *(char *) reloc_addr = value + reloc->r_addend; - break; -# ifndef RESOLVE_CONFLICT_FIND_MAP - case R_390_PC32: - *reloc_addr = value + reloc->r_addend - (Elf32_Addr) reloc_addr; - break; - case R_390_PC16DBL: - *(unsigned short *) reloc_addr = (unsigned short) - ((short) (value + reloc->r_addend - (Elf32_Addr) reloc_addr) >> 1); - break; - case R_390_PC32DBL: - *(unsigned int *) reloc_addr = (unsigned int) - ((int) (value + reloc->r_addend - (Elf32_Addr) reloc_addr) >> 1); - break; - case R_390_PC16: - *(unsigned short *) reloc_addr = - value + reloc->r_addend - (Elf32_Addr) reloc_addr; - break; - case R_390_NONE: - break; -# endif -#endif -#if !defined(RTLD_BOOTSTRAP) || defined(_NDEBUG) - default: - /* We add these checks in the version to relocate ld.so only - if we are still debugging. */ - _dl_reloc_bad_type (map, r_type, 0); - break; -#endif - } - } -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, - void *const reloc_addr_arg) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - *reloc_addr = l_addr + reloc->r_addend; -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf32_Addr l_addr, const Elf32_Rela *reloc, - int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - /* Check for unexpected PLT reloc type. */ - if (__glibc_likely (r_type == R_390_JMP_SLOT)) - { - if (__builtin_expect (map->l_mach.plt, 0) == 0) - *reloc_addr += l_addr; - else - *reloc_addr = map->l_mach.plt + (reloc - map->l_mach.jmprel) * 32; - } - else if (__glibc_likely (r_type == R_390_IRELATIVE)) - { - Elf32_Addr value = map->l_addr + reloc->r_addend; - if (__glibc_likely (!skip_ifunc)) - value = elf_ifunc_invoke (value); - *reloc_addr = value; - } - else - _dl_reloc_bad_type (map, r_type, 1); -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/s390/s390-32/dl-sysdep.h b/sysdeps/s390/s390-32/dl-sysdep.h deleted file mode 100644 index f32114bf56..0000000000 --- a/sysdeps/s390/s390-32/dl-sysdep.h +++ /dev/null @@ -1,23 +0,0 @@ -/* System-specific settings for dynamic linker code. S/390 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include_next - -/* _dl_argv cannot be attribute_relro, because _dl_start_user - might write into it after _dl_start returns. */ -#define DL_ARGV_NOT_RELRO 1 diff --git a/sysdeps/s390/s390-32/dl-trampoline.S b/sysdeps/s390/s390-32/dl-trampoline.S deleted file mode 100644 index 34377e7c51..0000000000 --- a/sysdeps/s390/s390-32/dl-trampoline.S +++ /dev/null @@ -1,33 +0,0 @@ -/* PLT trampolines. s390 version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -/* Create variant of _dl_runtime_resolve/profile for machines before z13. - No vector registers are saved/restored. */ -#include - -#if defined HAVE_S390_VX_ASM_SUPPORT -/* Create variant of _dl_runtime_resolve/profile for z13 and newer. - The vector registers are saved/restored, too.*/ -# define _dl_runtime_resolve _dl_runtime_resolve_vx -# define _dl_runtime_profile _dl_runtime_profile_vx -# define RESTORE_VRS -# include -#endif diff --git a/sysdeps/s390/s390-32/dl-trampoline.h b/sysdeps/s390/s390-32/dl-trampoline.h deleted file mode 100644 index 19776eec8a..0000000000 --- a/sysdeps/s390/s390-32/dl-trampoline.h +++ /dev/null @@ -1,231 +0,0 @@ -/* PLT trampolines. s390 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This code is used in dl-runtime.c to call the `fixup' function - and then redirect to the address it returns. */ - -/* The PLT stubs will call _dl_runtime_resolve/_dl_runtime_profile - * with the following linkage: - * r2 - r6 : parameter registers - * f0, f2 : floating point parameter registers - * v24, v26, v28, v30, v25, v27, v29, v31 : vector parameter registers - * 24(r15), 28(r15) : PLT arguments PLT1, PLT2 - * 96(r15) : additional stack parameters - * The normal clobber rules for function calls apply: - * r0 - r5 : call clobbered - * r6 - r13 : call saved - * r14 : return address (call clobbered) - * r15 : stack pointer (call saved) - * f4, f6 : call saved - * f0 - f3, f5, f7 - f15 : call clobbered - * v0 - v3, v5, v7 - v15 : bytes 0-7 overlap with fprs: call clobbered - bytes 8-15: call clobbered - * v4, v6 : bytes 0-7 overlap with f4, f6: call saved - bytes 8-15: call clobbered - * v16 - v31 : call clobbered - */ - - - .globl _dl_runtime_resolve - .type _dl_runtime_resolve, @function - cfi_startproc - .align 16 -_dl_runtime_resolve: - stm %r2,%r5,32(%r15) # save registers - cfi_offset (r2, -64) - cfi_offset (r3, -60) - cfi_offset (r4, -56) - cfi_offset (r5, -52) - std %f0,56(%r15) - cfi_offset (f0, -40) - std %f2,64(%r15) - cfi_offset (f2, -32) - st %r14,8(%r15) - cfi_offset (r14, -88) - lr %r0,%r15 - lm %r2,%r3,24(%r15) # load args saved by PLT -#ifdef RESTORE_VRS - ahi %r15,-224 # create stack frame - cfi_adjust_cfa_offset (224) - .machine push - .machine "z13" - .machinemode "zarch_nohighgprs" - vstm %v24,%v31,96(%r15) # store call-clobbered vr arguments - cfi_offset (v24, -224) - cfi_offset (v25, -208) - cfi_offset (v26, -192) - cfi_offset (v27, -176) - cfi_offset (v28, -160) - cfi_offset (v29, -144) - cfi_offset (v30, -128) - cfi_offset (v31, -112) - .machine pop -#else - ahi %r15,-96 # create stack frame - cfi_adjust_cfa_offset (96) -#endif - st %r0,0(%r15) # write backchain - basr %r1,0 -0: l %r14,1f-0b(%r1) - bas %r14,0(%r14,%r1) # call _dl_fixup - lr %r1,%r2 # function addr returned in r2 -#ifdef RESTORE_VRS - .machine push - .machine "z13" - .machinemode "zarch_nohighgprs" - vlm %v24,%v31,96(%r15) # restore vector registers - .machine pop - ahi %r15,224 # remove stack frame - cfi_adjust_cfa_offset (-224) -#else - ahi %r15,96 # remove stack frame - cfi_adjust_cfa_offset (-96) -#endif - l %r14,8(15) # restore registers - ld %f0,56(%r15) - ld %f2,64(%r15) - lm %r2,%r5,32(%r15) - br %r1 -1: .long _dl_fixup - 0b - cfi_endproc - .size _dl_runtime_resolve, .-_dl_runtime_resolve - - -#ifndef PROF - .globl _dl_runtime_profile - .type _dl_runtime_profile, @function - cfi_startproc - .align 16 -_dl_runtime_profile: - st %r12,12(%r15) # r12 is used as backup of r15 - cfi_offset (r12, -84) - st %r14,16(%r15) - cfi_offset (r14, -80) - lr %r12,%r15 # backup stack pointer - cfi_def_cfa_register (12) - ahi %r15,-264 # create stack frame: - # 96 + sizeof(La_s390_32_regs) - st %r12,0(%r15) # save backchain - - stm %r2,%r6,96(%r15) # save registers - cfi_offset (r2, -264) # + r6 needed as arg for - cfi_offset (r3, -260) # _dl_profile_fixup - cfi_offset (r4, -256) - cfi_offset (r5, -252) - cfi_offset (r6, -248) - std %f0,120(%r15) - cfi_offset (f0, -240) - std %f2,128(%r15) - cfi_offset (f2, -232) -#ifdef RESTORE_VRS - .machine push - .machine "z13" - .machinemode "zarch_nohighgprs" - vstm %v24,%v31,136(%r15) # store call-clobbered vr arguments - cfi_offset (v24, -224) - cfi_offset (v25, -208) - cfi_offset (v26, -192) - cfi_offset (v27, -176) - cfi_offset (v28, -160) - cfi_offset (v29, -144) - cfi_offset (v30, -128) - cfi_offset (v31, -112) - .machine pop -#endif - - lm %r2,%r3,24(%r12) # load arguments saved by PLT - lr %r4,%r14 # return address as third parameter - basr %r1,0 -0: l %r14,6f-0b(%r1) - la %r5,96(%r15) # pointer to struct La_s390_32_regs - la %r6,20(%r12) # long int * framesize - bas %r14,0(%r14,%r1) # call resolver - lr %r1,%r2 # function addr returned in r2 - ld %f0,120(%r15) # restore call-clobbered arg fprs - ld %f2,128(%r15) -#ifdef RESTORE_VRS - .machine push - .machine "z13" - .machinemode "zarch_nohighgprs" - vlm %v24,%v31,136(%r15) # restore call-clobbered arg vrs - .machine pop -#endif - icm %r0,15,20(%r12) # load & test framesize - jnm 2f - - lm %r2,%r6,96(%r15) # framesize < 0 means no pltexit call - # so we can do a tail call without - # copying the arg overflow area - lr %r15,%r12 # remove stack frame - cfi_def_cfa_register (15) - l %r14,16(%r15) # restore registers - l %r12,12(%r15) - br %r1 # tail-call to the resolved function - - cfi_def_cfa_register (12) -2: la %r4,96(%r15) # pointer to struct La_s390_32_regs - st %r4,32(%r12) - jz 4f # framesize == 0 ? - ahi %r0,7 # align framesize to 8 - lhi %r2,-8 - nr %r0,%r2 - slr %r15,%r0 # make room for framesize bytes - st %r12,0(%r15) # save backchain - la %r2,96(%r15) - la %r3,96(%r12) - srl %r0,3 -3: mvc 0(8,%r2),0(%r3) # copy additional parameters - la %r2,8(%r2) - la %r3,8(%r3) - brct %r0,3b -4: lm %r2,%r6,0(%r4) # load register parameters - basr %r14,%r1 # call resolved function - stm %r2,%r3,40(%r12) # store return values r2, r3, f0 - std %f0,48(%r12) # to struct La_s390_32_retval -#ifdef RESTORE_VRS - .machine push - .machine "z13" - vst %v24,56(%r12) # store return value v24 - .machine pop -#endif - lm %r2,%r4,24(%r12) # r2, r3: load arguments saved by PLT - # r4: pointer to struct La_s390_32_regs - basr %r1,0 -5: l %r14,7f-5b(%r1) - la %r5,40(%r12) # pointer to struct La_s390_32_retval - bas %r14,0(%r14,%r1) # call _dl_call_pltexit - - lr %r15,%r12 # remove stack frame - cfi_def_cfa_register (15) - l %r14,16(%r15) # restore registers - l %r12,12(%r15) - lm %r2,%r3,40(%r15) # restore return values - ld %f0,48(%r15) -#ifdef RESTORE_VRS - .machine push - .machine "z13" - vl %v24,56(%r15) # restore return value v24 - .machine pop -#endif - br %r14 - -6: .long _dl_profile_fixup - 0b -7: .long _dl_call_pltexit - 5b - cfi_endproc - .size _dl_runtime_profile, .-_dl_runtime_profile -#endif diff --git a/sysdeps/s390/s390-32/memchr.S b/sysdeps/s390/s390-32/memchr.S deleted file mode 100644 index 4ffac6061c..0000000000 --- a/sysdeps/s390/s390-32/memchr.S +++ /dev/null @@ -1,41 +0,0 @@ -/* Search a character in a block of memory. For IBM S390 - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * R2 = address to memory area - * R3 = character to find - * R4 = number of bytes to search - */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(memchr) - lhi %r0,0xff - nr %r0,%r3 - lr %r1,%r2 - la %r2,0(%r4,%r1) -0: srst %r2,%r1 - jo 0b - brc 13,1f - slr %r2,%r2 -1: br %r14 -END(memchr) -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/s390/s390-32/memcmp.S b/sysdeps/s390/s390-32/memcmp.S deleted file mode 100644 index ca02144a4a..0000000000 --- a/sysdeps/s390/s390-32/memcmp.S +++ /dev/null @@ -1,66 +0,0 @@ -/* memcmp - compare two memory blocks. 32 bit S/390 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include "sysdep.h" -#include "asm-syntax.h" - -/* INPUT PARAMETERS - %r2 = address of first memory area - %r3 = address of second memory area - %r4 = number of bytes to compare. */ - - .text -#ifdef USE_MULTIARCH -ENTRY(__memcmp_default) -#else -ENTRY(memcmp) -#endif - .machine "g5" - basr %r5,0 -.L_G5_16: - ltr %r4,%r4 - je .L_G5_4 - ahi %r4,-1 - lr %r1,%r4 - srl %r1,8 - ltr %r1,%r1 - jne .L_G5_12 - ex %r4,.L_G5_17-.L_G5_16(%r5) -.L_G5_4: - ipm %r2 - sll %r2,2 - sra %r2,30 - br %r14 -.L_G5_12: - clc 0(256,%r3),0(%r2) - jne .L_G5_4 - la %r3,256(%r3) - la %r2,256(%r2) - brct %r1,.L_G5_12 - ex %r4,.L_G5_17-.L_G5_16(%r5) - j .L_G5_4 -.L_G5_17: - clc 0(1,%r3),0(%r2) -#ifdef USE_MULTIARCH -END(__memcmp_default) -#else -END(memcmp) -libc_hidden_builtin_def (memcmp) -weak_alias(memcmp, bcmp) -#endif diff --git a/sysdeps/s390/s390-32/memcpy.S b/sysdeps/s390/s390-32/memcpy.S deleted file mode 100644 index 0177f19431..0000000000 --- a/sysdeps/s390/s390-32/memcpy.S +++ /dev/null @@ -1,89 +0,0 @@ -/* memcpy - copy a block from source to destination. S/390 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include "sysdep.h" -#include "asm-syntax.h" - -/* INPUT PARAMETERS - %r2 = address of destination memory area - %r3 = address of source memory area - %r4 = number of bytes to copy. */ - - .text -ENTRY(__mempcpy) - .machine "g5" - lr %r1,%r2 # Use as dest - la %r2,0(%r4,%r2) # Return dest + n - j .L_G5_start -END(__mempcpy) -#ifndef USE_MULTIARCH -libc_hidden_def (__mempcpy) -weak_alias (__mempcpy, mempcpy) -libc_hidden_builtin_def (mempcpy) -#endif - -ENTRY(memcpy) - .machine "g5" - lr %r1,%r2 # r1: Use as dest ; r2: Return dest -.L_G5_start: - ltr %r4,%r4 - je .L_G5_99 - ahi %r4,-1 - lr %r5,%r4 - srl %r5,8 - ltr %r5,%r5 - jne .L_G5_13 -.L_G5_4: - basr %r5,0 -.L_G5_16: - ex %r4,.L_G5_17-.L_G5_16(%r5) -.L_G5_99: - br %r14 -.L_G5_13: - chi %r5,4096 # Switch to mvcle for copies >1MB - jh __memcpy_mvcle -.L_G5_12: - mvc 0(256,%r1),0(%r3) - la %r1,256(%r1) - la %r3,256(%r3) - brct %r5,.L_G5_12 - j .L_G5_4 -.L_G5_17: - mvc 0(1,%r1),0(%r3) -END(memcpy) -#ifndef USE_MULTIARCH -libc_hidden_builtin_def (memcpy) -#endif - -ENTRY(__memcpy_mvcle) - # Using as standalone function will result in unexpected - # results since the length field is incremented by 1 in order to - # compensate the changes already done in the functions above. - lr %r0,%r2 # backup return dest [ + n ] - ahi %r4,1 # length + 1 - lr %r5,%r4 # source length - lr %r4,%r3 # source address - lr %r2,%r1 # destination address - lr %r3,%r5 # destination length = source length -.L_MVCLE_1: - mvcle %r2,%r4,0 # thats it, MVCLE is your friend - jo .L_MVCLE_1 - lr %r2,%r0 # return destination address - br %r14 -END(__memcpy_mvcle) diff --git a/sysdeps/s390/s390-32/memset.S b/sysdeps/s390/s390-32/memset.S deleted file mode 100644 index 720f393c30..0000000000 --- a/sysdeps/s390/s390-32/memset.S +++ /dev/null @@ -1,65 +0,0 @@ -/* Set a block of memory to some byte value. For IBM S390 - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include "sysdep.h" -#include "asm-syntax.h" - -/* INPUT PARAMETERS - %r2 = address to memory area - %r3 = byte to fill memory with - %r4 = number of bytes to fill. */ - - .text - -#ifdef USE_MULTIARCH -ENTRY(__memset_default) -#else -ENTRY(memset) -#endif - .machine "g5" - basr %r5,0 -.L_G5_19: - ltr %r4,%r4 - je .L_G5_4 - stc %r3,0(%r2) - chi %r4,1 - lr %r1,%r2 - je .L_G5_4 - ahi %r4,-2 - lr %r3,%r4 - srl %r3,8 - ltr %r3,%r3 - jne .L_G5_14 - ex %r4,.L_G5_20-.L_G5_19(%r5) -.L_G5_4: - br %r14 -.L_G5_14: - mvc 1(256,%r1),0(%r1) - la %r1,256(%r1) - brct %r3,.L_G5_14 - ex %r4,.L_G5_20-.L_G5_19(%r5) - j .L_G5_4 -.L_G5_20: - mvc 1(1,%r1),0(%r1) -#ifdef USE_MULTIARCH -END(__memset_default) -#else -END(memset) -libc_hidden_builtin_def (memset) -#endif diff --git a/sysdeps/s390/s390-32/mul_1.S b/sysdeps/s390/s390-32/mul_1.S deleted file mode 100644 index 4f08fa2c80..0000000000 --- a/sysdeps/s390/s390-32/mul_1.S +++ /dev/null @@ -1,55 +0,0 @@ -/* __mpn_mul_1 -- Multiply a limb vector with a limb and store - the result in a second limb vector. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -/* - INPUT PARAMETERS - res_ptr %r2 - s1_ptr %r3 - size %r4 - s2_limb %r5 -*/ - -#include -#include "asm-syntax.h" - - .text -ENTRY(__mpn_mul_1) - st %r6,24(%r15) - cfi_offset (%r6, -72) - slr %r6,%r6 # cy_limb = 0 -.L0: icm %r1,15,0(%r3) # get s1_ptr[i] - mr %r0,%r5 # umul_ppmm(prod_high,prod_low,s1_ptr[j],s2_limb) - jnm .L1 - alr %r0,%r5 -.L1: ltr %r5,%r5 - jnm .L2 - al %r0,0(%r3) -.L2: alr %r1,%r6 # prod_low += cy_limb - lr %r6,%r0 # cy_limb = prod_high - brc 12,.L3 - ahi %r6,1 # + (prod_low < cy_limb) -.L3: st %r1,0(%r2) - la %r2,4(0,%r2) - la %r3,4(0,%r3) - brct %r4,.L0 - lr %r2,%r6 # return cy_limb - l %r6,24(%r15) -.Lexit: br %r14 -END(__mpn_mul_1) diff --git a/sysdeps/s390/s390-32/multiarch/Makefile b/sysdeps/s390/s390-32/multiarch/Makefile deleted file mode 100644 index f8aee14bbd..0000000000 --- a/sysdeps/s390/s390-32/multiarch/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -ifeq ($(subdir),string) -sysdep_routines += memset memset-s390 memcpy memcpy-s390 \ - memcmp memcmp-s390 -endif diff --git a/sysdeps/s390/s390-32/multiarch/memchr.c b/sysdeps/s390/s390-32/multiarch/memchr.c deleted file mode 100644 index 808c3b837a..0000000000 --- a/sysdeps/s390/s390-32/multiarch/memchr.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Multiple versions of memchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This wrapper-file is needed, because otherwise file - sysdeps/s390/s390-[32|64]/memchr.S will be used. */ -#include diff --git a/sysdeps/s390/s390-32/multiarch/memcmp-s390.S b/sysdeps/s390/s390-32/multiarch/memcmp-s390.S deleted file mode 100644 index 86a76b4c98..0000000000 --- a/sysdeps/s390/s390-32/multiarch/memcmp-s390.S +++ /dev/null @@ -1,107 +0,0 @@ -/* CPU specific memcmp implementations. 32 bit S/390 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include "sysdep.h" -#include "asm-syntax.h" - -/* INPUT PARAMETERS - %r2 = address of first memory area - %r3 = address of second memory area - %r4 = number of bytes to compare. */ - - .text - -#if IS_IN (libc) - -ENTRY(__memcmp_z196) - .machine "z196" - .machinemode "zarch_nohighgprs" - ltr %r4,%r4 - je .L_Z196_4 - ahi %r4,-1 - srlk %r1,%r4,8 - ltr %r1,%r1 - jne .L_Z196_2 -.L_Z196_3: - exrl %r4,.L_Z196_14 -.L_Z196_4: - ipm %r2 - sll %r2,2 - sra %r2,30 - br %r14 -.L_Z196_17: - la %r3,256(%r3) - la %r2,256(%r2) - ahi %r1,-1 - je .L_Z196_3 -.L_Z196_2: - pfd 1,512(%r3) - pfd 1,512(%r2) - clc 0(256,%r3),0(%r2) - je .L_Z196_17 - ipm %r2 - sll %r2,2 - sra %r2,30 - br %r14 -.L_Z196_14: - clc 0(1,%r3),0(%r2) -END(__memcmp_z196) - -ENTRY(__memcmp_z10) - .machine "z10" - .machinemode "zarch_nohighgprs" - ltr %r4,%r4 - je .L_Z10_4 - ahi %r4,-1 - lr %r1,%r4 - srl %r1,8 - cijlh %r1,0,.L_Z10_12 -.L_Z10_3: - exrl %r4,.L_Z10_15 -.L_Z10_4: - ipm %r2 - sll %r2,2 - sra %r2,30 - br %r14 -.L_Z10_12: - pfd 1,512(%r3) - pfd 1,512(%r2) - clc 0(256,%r3),0(%r2) - jne .L_Z10_4 - la %r3,256(%r3) - la %r2,256(%r2) - brct %r1,.L_Z10_12 - j .L_Z10_3 -.L_Z10_15: - clc 0(1,%r3),0(%r2) -END(__memcmp_z10) - -#endif /* IS_IN (libc) */ - -#include "../memcmp.S" - -#if !IS_IN (libc) -.globl memcmp -.set memcmp,__memcmp_default -.weak bcmp -.set bcmp,__memcmp_default -#elif defined SHARED && IS_IN (libc) -.globl __GI_memcmp -.set __GI_memcmp,__memcmp_default -#endif diff --git a/sysdeps/s390/s390-32/multiarch/memcmp.c b/sysdeps/s390/s390-32/multiarch/memcmp.c deleted file mode 100644 index 2d8d8f4d50..0000000000 --- a/sysdeps/s390/s390-32/multiarch/memcmp.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Multiple versions of memcmp. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define memcmp __redirect_memcmp -# include -# undef memcmp -# include - -s390_libc_ifunc (__redirect_memcmp, __memcmp, memcmp) -weak_alias (memcmp, bcmp); -#endif diff --git a/sysdeps/s390/s390-32/multiarch/memcpy-s390.S b/sysdeps/s390/s390-32/multiarch/memcpy-s390.S deleted file mode 100644 index bec51af110..0000000000 --- a/sysdeps/s390/s390-32/multiarch/memcpy-s390.S +++ /dev/null @@ -1,128 +0,0 @@ -/* CPU specific memcpy implementations. 32 bit S/390 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include "sysdep.h" -#include "asm-syntax.h" - -/* INPUT PARAMETERS - %r2 = target operands address - %r3 = source operands address - %r4 = number of bytes to copy. */ - - .text - -#if defined SHARED && IS_IN (libc) - -ENTRY(____mempcpy_z196) - .machine "z196" - .machinemode "zarch_nohighgprs" - lr %r1,%r2 # Use as dest - la %r2,0(%r4,%r2) # Return dest + n - j .L_Z196_start -END(____mempcpy_z196) - -ENTRY(__memcpy_z196) - .machine "z196" - .machinemode "zarch_nohighgprs" - lr %r1,%r2 # r1: Use as dest ; r2: Return dest -.L_Z196_start: - llgfr %r4,%r4 - ltgr %r4,%r4 - je .L_Z196_4 - aghi %r4,-1 - srlg %r5,%r4,8 - ltgr %r5,%r5 - jne .L_Z196_5 -.L_Z196_3: - exrl %r4,.L_Z196_14 -.L_Z196_4: - br %r14 -.L_Z196_5: - cgfi %r5,262144 # Switch to mvcle for copies >64MB - jh __memcpy_mvcle -.L_Z196_2: - pfd 1,768(%r3) - pfd 2,768(%r1) - mvc 0(256,%r1),0(%r3) - aghi %r5,-1 - la %r1,256(%r1) - la %r3,256(%r3) - jne .L_Z196_2 - j .L_Z196_3 -.L_Z196_14: - mvc 0(1,%r1),0(%r3) -END(__memcpy_z196) - -ENTRY(____mempcpy_z10) - .machine "z10" - .machinemode "zarch_nohighgprs" - lr %r1,%r2 # Use as dest - la %r2,0(%r4,%r2) # Return dest + n - j .L_Z10_start -END(____mempcpy_z10) - -ENTRY(__memcpy_z10) - .machine "z10" - .machinemode "zarch_nohighgprs" - lr %r1,%r2 # r1: Use as dest ; r2: Return dest -.L_Z10_start: - llgfr %r4,%r4 - cgije %r4,0,.L_Z10_4 - aghi %r4,-1 - srlg %r5,%r4,8 - cgijlh %r5,0,.L_Z10_13 -.L_Z10_3: - exrl %r4,.L_Z10_15 -.L_Z10_4: - br %r14 -.L_Z10_13: - cgfi %r5,65535 # Switch to mvcle for copies >16MB - jh __memcpy_mvcle -.L_Z10_12: - pfd 1,768(%r3) - pfd 2,768(%r1) - mvc 0(256,%r1),0(%r3) - la %r1,256(%r1) - la %r3,256(%r3) - brctg %r5,.L_Z10_12 - j .L_Z10_3 -.L_Z10_15: - mvc 0(1,%r1),0(%r3) -END(__memcpy_z10) - -# define __mempcpy ____mempcpy_default -#endif /* SHARED && IS_IN (libc) */ - -#define memcpy __memcpy_default -#include "../memcpy.S" -#undef memcpy - -#if defined SHARED && IS_IN (libc) -.globl __GI_memcpy -.set __GI_memcpy,__memcpy_default -.globl __GI_mempcpy -.set __GI_mempcpy,____mempcpy_default -.globl __GI___mempcpy -.set __GI___mempcpy,____mempcpy_default -#else -.globl memcpy -.set memcpy,__memcpy_default -.weak mempcpy -.set mempcpy,__mempcpy -#endif diff --git a/sysdeps/s390/s390-32/multiarch/memcpy.c b/sysdeps/s390/s390-32/multiarch/memcpy.c deleted file mode 100644 index 4b8e546fb0..0000000000 --- a/sysdeps/s390/s390-32/multiarch/memcpy.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Multiple versions of memcpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* In the static lib memcpy is needed before the reloc is resolved. */ -#if defined SHARED && IS_IN (libc) -# define memcpy __redirect_memcpy -# include -# undef memcpy -# include - -s390_libc_ifunc (__redirect_memcpy, __memcpy, memcpy) -#endif diff --git a/sysdeps/s390/s390-32/multiarch/memset-s390.S b/sysdeps/s390/s390-32/multiarch/memset-s390.S deleted file mode 100644 index 59660b2499..0000000000 --- a/sysdeps/s390/s390-32/multiarch/memset-s390.S +++ /dev/null @@ -1,116 +0,0 @@ -/* Set a block of memory to some byte value. 32 bit S/390 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include "sysdep.h" -#include "asm-syntax.h" - -/* INPUT PARAMETERS - %r2 = address of memory area - %r3 = byte to fill memory with - %r4 = number of bytes to fill. */ - - .text - -#if IS_IN (libc) - -ENTRY(__memset_z196) - .machine "z196" - .machinemode "zarch_nohighgprs" - llgfr %r4,%r4 - ltgr %r4,%r4 - je .L_Z196_4 - stc %r3,0(%r2) - lr %r1,%r2 - cghi %r4,1 - je .L_Z196_4 - aghi %r4,-2 - srlg %r5,%r4,8 - ltgr %r5,%r5 - jne .L_Z196_1 -.L_Z196_3: - exrl %r4,.L_Z196_17 -.L_Z196_4: - br %r14 -.L_Z196_1: - cgfi %r5,1048576 - jh __memset_mvcle # Switch to mvcle for >256MB -.L_Z196_2: - pfd 2,1024(%r1) - mvc 1(256,%r1),0(%r1) - aghi %r5,-1 - la %r1,256(%r1) - jne .L_Z196_2 - j .L_Z196_3 -.L_Z196_17: - mvc 1(1,%r1),0(%r1) -END(__memset_z196) - -ENTRY(__memset_z10) - .machine "z10" - .machinemode "zarch_nohighgprs" - llgfr %r4,%r4 - cgije %r4,0,.L_Z10_4 - stc %r3,0(%r2) - lr %r1,%r2 - cgije %r4,1,.L_Z10_4 - aghi %r4,-2 - srlg %r5,%r4,8 - cgijlh %r5,0,.L_Z10_15 -.L_Z10_3: - exrl %r4,.L_Z10_18 -.L_Z10_4: - br %r14 -.L_Z10_15: - cgfi %r5,163840 # Switch to mvcle for >40MB - jh __memset_mvcle -.L_Z10_14: - pfd 2,1024(%r1) - mvc 1(256,%r1),0(%r1) - la %r1,256(%r1) - brctg %r5,.L_Z10_14 - j .L_Z10_3 -.L_Z10_18: - mvc 1(1,%r1),0(%r1) -END(__memset_z10) - -ENTRY(__memset_mvcle) - ahi %r4,2 # take back the change done by the caller - lr %r0,%r2 # save source address - lr %r1,%r3 # move pad byte to R1 - lr %r3,%r4 - sr %r4,%r4 # no source for MVCLE, only a pad byte - sr %r5,%r5 -.L0: mvcle %r2,%r4,0(%r1) # thats it, MVCLE is your friend - jo .L0 - lr %r2,%r0 # return value is source address -.L1: - br %r14 -END(__memset_mvcle) - -#endif /* IS_IN (libc) */ - -#include "../memset.S" - -#if !IS_IN (libc) -.globl memset -.set memset,__memset_default -#elif defined SHARED && IS_IN (libc) -.globl __GI_memset -.set __GI_memset,__memset_default -#endif diff --git a/sysdeps/s390/s390-32/multiarch/memset.c b/sysdeps/s390/s390-32/multiarch/memset.c deleted file mode 100644 index 421c0854a0..0000000000 --- a/sysdeps/s390/s390-32/multiarch/memset.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Multiple versions of memset. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define memset __redirect_memset -# include -# undef memset -# include - -s390_libc_ifunc (__redirect_memset, __memset, memset) -#endif diff --git a/sysdeps/s390/s390-32/multiarch/strcmp.c b/sysdeps/s390/s390-32/multiarch/strcmp.c deleted file mode 100644 index 6a20a304cc..0000000000 --- a/sysdeps/s390/s390-32/multiarch/strcmp.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Multiple versions of strcmp. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This wrapper-file is needed, because otherwise file - sysdeps/s390/s390-[32|64]/strcmp.S will be used. */ -#include diff --git a/sysdeps/s390/s390-32/multiarch/strcpy.c b/sysdeps/s390/s390-32/multiarch/strcpy.c deleted file mode 100644 index 7f380a471d..0000000000 --- a/sysdeps/s390/s390-32/multiarch/strcpy.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Multiple versions of strcpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This wrapper-file is needed, because otherwise file - sysdeps/s390/s390-[32|64]/strcpy.S will be used. */ -#include diff --git a/sysdeps/s390/s390-32/multiarch/strncpy.c b/sysdeps/s390/s390-32/multiarch/strncpy.c deleted file mode 100644 index 15dacec974..0000000000 --- a/sysdeps/s390/s390-32/multiarch/strncpy.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Multiple versions of strncpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This wrapper-file is needed, because otherwise file - sysdeps/s390/s390-[32|64]/strncpy.S will be used. */ -#include diff --git a/sysdeps/s390/s390-32/s390-mcount.S b/sysdeps/s390/s390-32/s390-mcount.S deleted file mode 100644 index fe25c5506d..0000000000 --- a/sysdeps/s390/s390-32/s390-mcount.S +++ /dev/null @@ -1,89 +0,0 @@ -/* S/390-specific implementation of profiling support. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* - * How profiling works on S/390: - * On the start of each function _mcount is called with the address of a - * data word in %r1 (initialized to 0, used for counting). The compiler - * with the option -p generates code of the form: - * - * STM 6,15,24(15) - * BRAS 13,.LTN0_0 - * .LT0_0: - * .LC12: .long _mcount - * .LC13: .long .LP0 - * .data - * .align 4 - * .LP0: .long 0 - * .text - * # function profiler - * st 14,4(15) - * l 14,.LC12-.LT0_0(13) - * l 1,.LC13-.LT0_0(13) - * basr 14,14 - * l 14,4(15) - * - * The _mcount implementation now has to call __mcount_internal with the - * address of .LP0 as first parameter and the return address as second - * parameter. &.LP0 was loaded to %r1 and the return address is in %r14. - * _mcount may not modify any register. - */ - - .globl C_SYMBOL_NAME(_mcount) - .type C_SYMBOL_NAME(_mcount), @function - cfi_startproc - .align ALIGNARG(4) -C_LABEL(_mcount) - /* Save the caller-clobbered registers. */ - ahi %r15,-128 - cfi_adjust_cfa_offset (128) - stm %r14,%r5,96(%r15) - cfi_offset (r14, 0) - cfi_offset (r15, 4) - l %r2,132(%r15) # callers address = first parameter - la %r2,0(%r2) # clear bit 0 - la %r3,0(%r14) # callees address = second parameter - -#ifdef PIC - bras %r14,0f - .long _GLOBAL_OFFSET_TABLE_-. -0: al %r14,0(%r14) - l %r14,__mcount_internal@GOT(%r14) -#else - bras %r14,0f - .long __mcount_internal -0: l %r14,0(%r14) -#endif - basr %r14,%r14 - - /* - * Pop the saved registers. Please note that `mcount' has no - * return value. - */ - lm %r14,%r5,96(%r15) - ahi %r15,128 - cfi_adjust_cfa_offset (-128) - br %r14 - cfi_endproc - ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount)) - -#undef mcount -weak_alias (_mcount, mcount) diff --git a/sysdeps/s390/s390-32/setjmp.S b/sysdeps/s390/s390-32/setjmp.S deleted file mode 100644 index 1e240dbc83..0000000000 --- a/sysdeps/s390/s390-32/setjmp.S +++ /dev/null @@ -1,123 +0,0 @@ -/* setjmp for s390, ELF version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ASM -#define _SETJMP_H -#include -#include -#include - -#if !IS_IN (rtld) && defined SHARED \ - && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) -# define NEED_COMPAT_SYMBOLS 1 -/* We need a unique name in case of symbol versioning. */ -# define setjmp __v1setjmp -# define _setjmp __v1_setjmp -# define __sigsetjmp __v1__sigsetjmp -#else -# define NEED_COMPAT_SYMBOLS 0 -#endif - - /* We include the BSD entry points here as well. */ -ENTRY (setjmp) - lhi %r3,1 /* second argument of one */ - j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */ -END (setjmp) - - /* Binary compatibility entry point. */ -ENTRY(_setjmp) - lhi %r3,0 /* second argument of zero */ - j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */ -END (_setjmp) -#if NEED_COMPAT_SYMBOLS -strong_alias (_setjmp, __GI__setjmp) -#else -libc_hidden_def (_setjmp) -#endif - -ENTRY(__setjmp) - lhi %r3,0 /* second argument of zero */ - j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */ -END (__setjmp) - -ENTRY(__sigsetjmp) -.Linternal_sigsetjmp: - /* setjmp probe expects sig/setjmp first argument (4@%r2), second - argument (-4@%r3) and target address (4@%r14). */ - LIBC_PROBE (setjmp, 3, 4@%r2, -4@%r3, 4@%r14) -#ifdef PTR_MANGLE - stm %r6,%r13,0(%r2) /* store registers in jmp_buf */ - lr %r4,%r14 - lr %r5,%r15 - PTR_MANGLE (%r4, %r1) - PTR_MANGLE2 (%r5, %r1) - stm %r4,%r5,32(%r2) -#else - stm %r6,%r15,0(%r2) /* store registers in jmp_buf */ -#endif - std %f4,40(%r2) - std %f6,48(%r2) -#if IS_IN (rtld) - /* In ld.so we never save the signal mask. */ - lhi %r2,0 - br %r14 -#elif defined PIC - /* We cannot use the PLT, because it requires that %r12 be set, but - we can't save and restore our caller's value. Instead, we do an - indirect jump through the GOT. */ - basr %r1,0 -.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */ - /* get address of __sigjmp_save from got */ - l %r1,__sigjmp_save@GOT(%r1) - br %r1 -.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0 -#else - basr %r1,0 -.L0: l %r1,.L1-.L0(0,%r1) /* load address of __sigjmp_save */ - br %r1 /* tail-call __sigjmp_save */ -.L1: .long __sigjmp_save -#endif -END (__sigsetjmp) -#if NEED_COMPAT_SYMBOLS -strong_alias (__sigsetjmp, __GI___sigsetjmp) -#else -libc_hidden_def (__sigsetjmp) -#endif - -#if NEED_COMPAT_SYMBOLS -/* In glibc release 2.19 new versions of setjmp-functions were introduced, - but were reverted before 2.20. Thus both versions are the same function. */ - -# undef setjmp -# undef _setjmp -# undef __sigsetjmp - -strong_alias (__v1setjmp, __v2setjmp); -versioned_symbol (libc, __v1setjmp, setjmp, GLIBC_2_0); -compat_symbol (libc, __v2setjmp, setjmp, GLIBC_2_19); - -strong_alias (__v1_setjmp, __v2_setjmp); -versioned_symbol (libc, __v1_setjmp, _setjmp, GLIBC_2_0); -compat_symbol (libc, __v2_setjmp, _setjmp, GLIBC_2_19); - -strong_alias (__v1__sigsetjmp, __v2__sigsetjmp); -versioned_symbol (libc, __v1__sigsetjmp, __sigsetjmp, GLIBC_2_0); -compat_symbol (libc, __v2__sigsetjmp, __sigsetjmp, GLIBC_2_19); -#endif /* NEED_COMPAT_SYMBOLS */ diff --git a/sysdeps/s390/s390-32/stackguard-macros.h b/sysdeps/s390/s390-32/stackguard-macros.h deleted file mode 100644 index 46109744ed..0000000000 --- a/sysdeps/s390/s390-32/stackguard-macros.h +++ /dev/null @@ -1,15 +0,0 @@ -#include - -#define STACK_CHK_GUARD \ - ({ uintptr_t x; __asm__ ("ear %0,%%a0; l %0,0x14(%0)" : "=a" (x)); x; }) - -/* On s390/s390x there is no unique pointer guard, instead we use the - same value as the stack guard. */ -#define POINTER_CHK_GUARD \ - ({ \ - uintptr_t x; \ - __asm__ ("ear %0,%%a0; l %0,%1(%0)" \ - : "=a" (x) \ - : "i" (offsetof (tcbhead_t, stack_guard))); \ - x; \ - }) diff --git a/sysdeps/s390/s390-32/start.S b/sysdeps/s390/s390-32/start.S deleted file mode 100644 index 07400f1752..0000000000 --- a/sysdeps/s390/s390-32/start.S +++ /dev/null @@ -1,211 +0,0 @@ -/* Startup code compliant to the ELF s390 ABI. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - This is the canonical entry point, usually the first thing in the text - segment. Most registers' values are unspecified, except for: - - %r14 Contains a function pointer to be registered with `atexit'. - This is how the dynamic linker arranges to have DT_FINI - functions called for shared libraries that have been loaded - before this code runs. - - %r15 The stack contains the arguments and environment: - 0(%r15) argc - 4(%r15) argv[0] - ... - (4*argc)(%r15) NULL - (4*(argc+1))(%r15) envp[0] - ... - NULL -*/ - - .text - .globl _start - .type _start,@function -_start: - /* Check if the kernel provides highgprs facility if needed by - the binary. */ - - lr %r6,%r15 - la %r6,4(%r6) /* Skip the argument counter. */ - -.L11: l %r5,0(%r6) /* Skip the argument vector. */ - la %r6,4(%r6) - ltr %r5,%r5 - jne .L11 - -.L12: l %r5,0(%r6) /* Skip the environment vector. */ - la %r6,4(%r6) - ltr %r5,%r5 - jne .L12 - - /* Usually the auxiliary vector can be expected directly after - the environment variables. But we have to skip extra zeros - because the loader might have removed unsecure variables for - setuid programs. */ - -.L26: l %r5,0(%r6) - la %r6,4(%r6) - ltr %r5,%r5 - jz .L26 - - ahi %r6,-4 - - /* Obtain the needed values from the auxiliary vector. */ - - lhi %r7,16 /* AT_HWCAP */ - lhi %r8,3 /* AT_PHDR */ - lhi %r9,5 /* AT_PHNUM */ - lhi %r2,4 /* AT_PHENT */ -.L13: l %r5,0(%r6) - clr %r5,%r7 - jne .L15 - l %r10,4(%r6) /* r10 = AT_HWCAP value. */ -.L15: clr %r5,%r8 - jne .L16 - l %r11,4(%r6) /* r11 = AT_PHDR value. */ -.L16: clr %r5,%r9 - jne .L17 - l %r12,4(%r6) /* r12 = AT_PHNUM value. */ -.L17: clr %r5,%r2 - jne .L18 - l %r0,4(%r6) /* r0 = AT_PHENT value. */ -.L18: ltr %r5,%r5 - la %r6,8(%r6) - jnz .L13 - - /* Locate the ELF header by looking for the first PT_LOAD - segment with a p_offset of zero. */ - - lr %r4,%r11 /* Backup AT_PHDR. */ - lhi %r7,1 /* PT_LOAD id */ - lhi %r8,0 -.L19: cl %r7,0(%r4) /* p_type == PT_LOAD? */ - jne .L20 - cl %r8,4(%r4) /* p_offset == 0? */ - jne .L20 - l %r9,8(%r4) /* r9 = PT_LOAD.p_vaddr <- ELF header address */ - j .L24 -.L20: alr %r4,%r0 /* r4 += AT_PHENT value */ - brct %r12,.L19 - - j .+2 /* Trap, there must be such a phdr. */ - -.L24: lr %r4,%r11 /* Backup AT_PHDR. */ - lhi %r2,6 /* PT_PHDR id */ -.L23: cl %r2,0(%r4) - jne .L22 - l %r3,8(%r4) /* r3 = PT_PHDR p_vaddr */ - j .L25 -.L22: alr %r4,%r0 /* r4 += AT_PHENT value */ - brct %r12,.L23 - - j .L14 /* No PT_PHDR found - skip checking. */ - -.L25: slr %r11,%r3 /* AT_PHDR - PT_PHDR.p_vaddr (relocation offset)*/ - alr %r9,%r11 /* PT_LOAD.p_vaddr += relocation offset */ - - l %r5,36(%r9) /* Load the e_flags field. */ - tml %r5,1 - jz .L14 /* Binary does not require highgprs facility. */ - - tml %r10,512 /* Check the AT_HWCAP value. */ - jz 2 /* Trap if no highgprs facility available. */ -.L14: - - /* Setup pointer to literal pool of _start */ - basr %r13,0 -.L0: ahi %r13,.Llit-.L0 - - /* load argc and argv from stack */ - la %r4,4(%r15) # get argv - l %r3,0(%r15) # get argc - - /* align the stack to a double word boundary */ - lhi %r0,-8 - nr %r15,%r0 - - /* Setup a stack frame and a parameter area */ - ahi %r15,-104 # make room on stack - xc 0(4,%r15),0(%r15) # clear back-chain - - /* set up arguments for __libc_start_main: - main, argc, argv, envp, _init, _fini, rtld_fini, stack_end - Note that envp will be determined later in __libc_start_main - */ - stm %r14,%r15,96(%r15) # store rtld_fini/stack_end to parameter area - la %r7,96(%r15) - l %r6,.L2-.Llit(%r13) # load pointer to __libc_csu_fini - l %r5,.L1-.Llit(%r13) # load pointer to __libc_csu_init - l %r2,.L3-.Llit(%r13) # load pointer to main - l %r1,.L4-.Llit(%r13) # load pointer to __libc_start_main -#ifdef PIC - l %r12,.L5-.Llit(%r13) # load .got pointer - la %r6,0(%r13,%r6) - la %r5,0(%r13,%r5) - la %r12,0(%r13,%r12) - l %r2,0(%r12,%r2) - la %r1,0(%r13,%r1) -#endif - - /* ok, now branch to the libc main routine */ - basr %r14,%r1 - - /* crash if __libc_start_main returns */ - .word 0 - -.Llit: -#ifndef PIC -.L1: .long __libc_csu_init -.L2: .long __libc_csu_fini -.L3: .long main -.L4: .long __libc_start_main -#else -.L1: .long __libc_csu_init-.Llit -.L2: .long __libc_csu_fini-.Llit -.L3: .long main@GOT -.L4: .long __libc_start_main@plt-.Llit -.L5: .long _GLOBAL_OFFSET_TABLE_-.Llit -#endif - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start diff --git a/sysdeps/s390/s390-32/strcmp.S b/sysdeps/s390/s390-32/strcmp.S deleted file mode 100644 index 69754c5f5a..0000000000 --- a/sysdeps/s390/s390-32/strcmp.S +++ /dev/null @@ -1,41 +0,0 @@ -/* strcmp - compare two string. S/390 version. - This file is part of the GNU C Library. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* INPUT PARAMETERS - %r2 = address of string 1 - %r3 = address of string 2. */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(strcmp) - slr %r0,%r0 -0: clst %r2,%r3 - jo 0b - jp 1f - jm 2f - slr %r2,%r2 - br %r14 -1: lhi %r2,1 - br %r14 -2: lhi %r2,-1 - br %r14 -END(strcmp) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/s390/s390-32/strcpy.S b/sysdeps/s390/s390-32/strcpy.S deleted file mode 100644 index ab06ff8d72..0000000000 --- a/sysdeps/s390/s390-32/strcpy.S +++ /dev/null @@ -1,36 +0,0 @@ -/* strcpy - copy a string from source to destination. For IBM S390 - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * R2 = address of destination - * R3 = address of source - */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(strcpy) - slr %r0,%r0 - lr %r1,%r2 -0: mvst %r1,%r3 - jo 0b - br %r14 -END(strcpy) -libc_hidden_builtin_def (strcpy) diff --git a/sysdeps/s390/s390-32/strncpy.S b/sysdeps/s390/s390-32/strncpy.S deleted file mode 100644 index c642bce90d..0000000000 --- a/sysdeps/s390/s390-32/strncpy.S +++ /dev/null @@ -1,79 +0,0 @@ -/* strncpy - copy at most n characters from a string from source to - destination. For IBM S390 - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * R2 = address of destination (dst) - * R3 = address of source (src) - * R4 = max of bytes to copy - */ - -#include "sysdep.h" -#include "asm-syntax.h" - -ENTRY(strncpy) - .text - st %r2,24(%r15) # save dst pointer - slr %r2,%r3 # %r3 points to src, %r2+%r3 to dst - lhi %r1,3 - nr %r1,%r4 # last 2 bits of # bytes - srl %r4,2 - ltr %r4,%r4 # less than 4 bytes to copy ? - jz .L1 - bras %r5,.L0 # enter loop & load address of a 0 - .long 0 -.L0: icm %r0,8,0(%r3) # first byte - jz .L3 - icm %r0,4,1(%r3) # second byte - jz .L4 - icm %r0,2,2(%r3) # third byte - jz .L5 - icm %r0,1,3(%r3) # fourth byte - jz .L6 - st %r0,0(%r2,%r3) # store all four to dest. - la %r3,4(%r3) - brct %r4,.L0 -.L1: ltr %r1,%r1 - jz .Lexit -.L2: icm %r0,1,0(%r3) - stc %r0,0(%r2,%r3) - la %r3,1(%r3) - jz .L7 - brct %r1,.L2 - j .Lexit -.L3: icm %r0,4,0(%r5) -.L4: icm %r0,2,0(%r5) -.L5: icm %r0,1,0(%r5) -.L6: st %r0,0(%r2,%r3) - la %r3,4(%r3) - ahi %r4,-1 - j .L8 -.L7: ahi %r1,-1 -.L8: sll %r4,2 - alr %r4,%r1 - alr %r2,%r3 # start of dst area to be zeroed - lr %r3,%r4 - slr %r4,%r4 - slr %r5,%r5 -.L9: mvcle %r2,%r4,0 # pad dst with zeroes - jo .L9 -.Lexit: l %r2,24(%r15) # return dst pointer - br %r14 -END(strncpy) -libc_hidden_builtin_def (strncpy) diff --git a/sysdeps/s390/s390-32/sub_n.S b/sysdeps/s390/s390-32/sub_n.S deleted file mode 100644 index 358c8deddb..0000000000 --- a/sysdeps/s390/s390-32/sub_n.S +++ /dev/null @@ -1,62 +0,0 @@ -/* __mpn_sub_n -- Add two limb vectors of the same length > 0 and store - sum in a third limb vector. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -/* - INPUT PARAMETERS - res_ptr %r2 - s1_ptr %r3 - s2_ptr %r4 - size %r5 -*/ - -#include "sysdep.h" -#include "asm-syntax.h" - -ENTRY(__mpn_sub_n) - st %r6,24(%r15) # save register 6 - cfi_offset (%r6, -72) - sr %r1,%r1 - lhi %r0,1 # cannot use ahi to add carry, use slr -.L0: l %r6,0(%r1,%r3) # .L0 -> no carry from last sub - sl %r6,0(%r1,%r4) - st %r6,0(%r1,%r2) - la %r1,4(0,%r1) - brc 4,.L3 -.L1: brct %r5,.L0 - slr %r2,%r2 # no last carry to return - j .Lexit -.L2: l %r6,0(%r1,%r3) # .L2 -> carry from last sub - sl %r6,0(%r1,%r4) - brc 4,.L4 - slr %r6,%r0 # no carry yet, add carry from last sub - st %r6,0(%r1,%r2) - la %r1,4(0,%r1) - brc 11,.L1 # new carry ? -.L3: brct %r5,.L2 - lr %r2,%r0 # return last carry - j .Lexit -.L4: slr %r6,%r0 # already a carry, add carry from last sub - st %r6,0(%r1,%r2) - la %r1,4(0,%r1) - brct %r5,.L2 - lr %r2,%r0 # return last carry -.Lexit: l %r6,24(%r15) # restore register 6 - br %r14 -END(__mpn_sub_n) diff --git a/sysdeps/s390/s390-32/symbol-hacks.h b/sysdeps/s390/s390-32/symbol-hacks.h deleted file mode 100644 index 585c42365a..0000000000 --- a/sysdeps/s390/s390-32/symbol-hacks.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Hacks needed for symbol manipulation. s390 version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include_next "symbol-hacks.h" diff --git a/sysdeps/s390/s390-32/sysdep.h b/sysdeps/s390/s390-32/sysdep.h deleted file mode 100644 index 15a4e3e687..0000000000 --- a/sysdeps/s390/s390-32/sysdep.h +++ /dev/null @@ -1,101 +0,0 @@ -/* Assembler macros for s390. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef __ASSEMBLER__ - -/* Syntactic details of assembler. */ - -/* ELF uses byte-counts for .align, most others use log2 of count of bytes. */ -#define ALIGNARG(log2) 1<. */ - -#define pltenter la_s390_32_gnu_pltenter -#define pltexit la_s390_32_gnu_pltexit -#define La_regs La_s390_32_regs -#define La_retval La_s390_32_retval -#define int_retval lrv_r2 diff --git a/sysdeps/s390/s390-64/Implies b/sysdeps/s390/s390-64/Implies deleted file mode 100644 index a8cae95f9d..0000000000 --- a/sysdeps/s390/s390-64/Implies +++ /dev/null @@ -1 +0,0 @@ -wordsize-64 diff --git a/sysdeps/s390/s390-64/Makefile b/sysdeps/s390/s390-64/Makefile deleted file mode 100644 index b4d793bb3d..0000000000 --- a/sysdeps/s390/s390-64/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -ifeq ($(subdir),gmon) -sysdep_routines += s390x-mcount -endif - -ifeq ($(subdir),elf) -CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused -CFLAGS-dl-load.c += -Wno-unused -CFLAGS-dl-reloc.c += -Wno-unused -endif diff --git a/sysdeps/s390/s390-64/__longjmp.c b/sysdeps/s390/s390-64/__longjmp.c deleted file mode 100644 index f7be9ddb18..0000000000 --- a/sysdeps/s390/s390-64/__longjmp.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -/* Jump to the position specified by ENV, causing the - setjmp call there to return VAL, or 1 if VAL is 0. */ -void -__longjmp (__jmp_buf env, int val) -{ -#ifdef PTR_DEMANGLE - uintptr_t guard = THREAD_GET_POINTER_GUARD (); -# ifdef CHECK_SP - CHECK_SP (env, guard); -# endif -#elif defined CHECK_SP - CHECK_SP (env, 0); -#endif - register long int r2 __asm__ ("%r2") = val == 0 ? 1 : val; -#ifdef PTR_DEMANGLE - register uintptr_t r3 __asm__ ("%r3") = guard; - register void *r1 __asm__ ("%r1") = (void *) env; -#endif - /* Restore registers and jump back. */ - __asm__ __volatile__ ( - /* longjmp probe expects longjmp first argument, second - argument and target address. */ -#ifdef PTR_DEMANGLE - "lmg %%r4,%%r5,64(%1)\n\t" - "xgr %%r4,%2\n\t" - "xgr %%r5,%2\n\t" - LIBC_PROBE_ASM (longjmp, 8@%1 -4@%0 8@%%r4) -#else - LIBC_PROBE_ASM (longjmp, 8@%1 -4@%0 8@%%r14) -#endif - - /* restore fpregs */ - "ld %%f8,80(%1)\n\t" - "ld %%f9,88(%1)\n\t" - "ld %%f10,96(%1)\n\t" - "ld %%f11,104(%1)\n\t" - "ld %%f12,112(%1)\n\t" - "ld %%f13,120(%1)\n\t" - "ld %%f14,128(%1)\n\t" - "ld %%f15,136(%1)\n\t" - - /* restore gregs and return to jmp_buf target */ -#ifdef PTR_DEMANGLE - "lmg %%r6,%%r13,0(%1)\n\t" - "lgr %%r15,%%r5\n\t" - LIBC_PROBE_ASM (longjmp_target, 8@%1 -4@%0 8@%%r4) - "br %%r4" -#else - "lmg %%r6,%%r15,0(%1)\n\t" - LIBC_PROBE_ASM (longjmp_target, 8@%1 -4@%0 8@%%r14) - "br %%r14" -#endif - : : "r" (r2), -#ifdef PTR_DEMANGLE - "r" (r1), "r" (r3) -#else - "a" (env) -#endif - ); - - /* Avoid `volatile function does return' warnings. */ - for (;;); -} diff --git a/sysdeps/s390/s390-64/add_n.S b/sysdeps/s390/s390-64/add_n.S deleted file mode 100644 index 89197b2dbf..0000000000 --- a/sysdeps/s390/s390-64/add_n.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Add two limb vectors of the same length > 0 and store sum in a third - limb vector. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -/* - INPUT PARAMETERS - res_ptr %r2 - s1_ptr %r3 - s2_ptr %r4 - size %r5 -*/ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(__mpn_add_n) - stg %r6,48(%r15) # save register 6 - cfi_offset (%r6,-112) - slgr %r1,%r1 - lghi %r0,1 # cannot use ahi to add carry, use alr -.L0: lg %r6,0(%r1,%r3) # .L0 -> no carry from last add - alg %r6,0(%r1,%r4) - stg %r6,0(%r1,%r2) - la %r1,8(%r1) - brc 3,.L3 -.L1: brct %r5,.L0 - slgr %r2,%r2 # no last carry to return - j .Lexit -.L2: lg %r6,0(%r1,%r3) # .L2 -> carry from last add - alg %r6,0(%r1,%r4) - brc 3,.L4 - algr %r6,%r0 # no carry yet, add carry from last add - stg %r6,0(%r1,%r2) - la %r1,8(%r1) - brc 12,.L1 # new carry ? -.L3: brct %r5,.L2 - lgr %r2,%r0 # return last carry - j .Lexit -.L4: algr %r6,%r0 # already a carry, add carry from last add - stg %r6,0(%r1,%r2) - la %r1,8(%r1) - brct %r5,.L2 - lgr %r2,%r0 # return last carry -.Lexit: lg %r6,48(%r15) # restore register 6 - br %r14 -END(__mpn_add_n) diff --git a/sysdeps/s390/s390-64/backtrace.c b/sysdeps/s390/s390-64/backtrace.c deleted file mode 100644 index 4843db623a..0000000000 --- a/sysdeps/s390/s390-64/backtrace.c +++ /dev/null @@ -1,147 +0,0 @@ -/* Return backtrace of current program state. 64 bit S/390 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - -/* This is a global variable set at program start time. It marks the - highest used stack address. */ -extern void *__libc_stack_end; - - -/* This is the stack layout we see for every non-leaf function. - size offset - %r15 -> +------------------+ - 8 | back chain | 0 - 8 | end of stack | 8 - 32 | scratch | 16 - 80 | save area r6-r15 | 48 - 16 | save area f4,f6 | 128 - 16 | empty | 144 - +------------------+ - r14 in the save area holds the return address. -*/ - -struct layout -{ - long back_chain; - long end_of_stack; - long scratch[4]; - long save_grps[10]; - long save_fp[2]; - long empty[2]; -}; - -struct trace_arg -{ - void **array; - int cnt, size; -}; - -#ifdef SHARED -static _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *); -static _Unwind_Ptr (*unwind_getip) (struct _Unwind_Context *); - -static void -init (void) -{ - void *handle = __libc_dlopen ("libgcc_s.so.1"); - - if (handle == NULL) - return; - - unwind_backtrace = __libc_dlsym (handle, "_Unwind_Backtrace"); - unwind_getip = __libc_dlsym (handle, "_Unwind_GetIP"); - if (unwind_getip == NULL) - unwind_backtrace = NULL; -} - -static int -__backchain_backtrace (void **array, int size) -{ - /* We assume that all the code is generated with frame pointers set. */ - struct layout *stack; - int cnt = 0; - - __asm__ ("LGR %0,%%r15" : "=d" (stack) ); - /* We skip the call to this function, it makes no sense to record it. */ - stack = (struct layout *) stack->back_chain; - while (cnt < size) - { - if (stack == NULL || (void *) stack > __libc_stack_end) - /* This means the address is out of range. Note that for the - toplevel we see a frame pointer with value NULL which clearly is - out of range. */ - break; - - array[cnt++] = (void *) stack->save_grps[8]; - - stack = (struct layout *) stack->back_chain; - } - - return cnt; -} -#else -# define unwind_backtrace _Unwind_Backtrace -# define unwind_getip _Unwind_GetIP -#endif - -static _Unwind_Reason_Code -backtrace_helper (struct _Unwind_Context *ctx, void *a) -{ - struct trace_arg *arg = a; - - /* We are first called with address in the __backtrace function. - Skip it. */ - if (arg->cnt != -1) - arg->array[arg->cnt] = (void *) unwind_getip (ctx); - if (++arg->cnt == arg->size) - return _URC_END_OF_STACK; - return _URC_NO_REASON; -} - -int -__backtrace (void **array, int size) -{ - struct trace_arg arg = { .array = array, .size = size, .cnt = -1 }; - - if (size <= 0) - return 0; - -#ifdef SHARED - __libc_once_define (static, once); - - __libc_once (once, init); - - if (unwind_backtrace == NULL) - return __backchain_backtrace (array, size); -#endif - - unwind_backtrace (backtrace_helper, &arg); - - return arg.cnt != -1 ? arg.cnt : 0; -} - -weak_alias (__backtrace, backtrace) -libc_hidden_def (__backtrace) diff --git a/sysdeps/s390/s390-64/bcopy.S b/sysdeps/s390/s390-64/bcopy.S deleted file mode 100644 index 235fc85568..0000000000 --- a/sysdeps/s390/s390-64/bcopy.S +++ /dev/null @@ -1,71 +0,0 @@ -/* bcopy -- copy a block from source to destination. 64 bit S/390 version. - This file is part of the GNU C Library. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* INPUT PARAMETERS - %r2 = address of source - %r3 = address of destination - %r4 = number of bytes to copy. */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(__bcopy) - ltgr %r1,%r4 # zero bcopy ? - jz .L4 - clgr %r2,%r3 # check against destructive overlap - jnl .L0 - algr %r1,%r2 - clgr %r1,%r3 - jh .L7 -.L0: aghi %r4,-1 # length - 1 - srlg %r1,%r4,8 - ltgr %r1,%r1 # < 256 bytes to move ? - jz .L2 - cghi %r1,255 # > 1MB to move ? - jh .L5 -.L1: mvc 0(256,%r3),0(%r2) # move in 256 byte chunks - la %r2,256(%r2) - la %r3,256(%r3) - brctg %r1,.L1 -.L2: bras %r1,.L3 # setup base pointer for execute - mvc 0(1,%r3),0(%r2) # instruction for execute -.L3: ex %r4,0(%r1) # execute mvc with length ((%r4)&255)+1 -.L4: br %r14 - # data copies > 1MB are faster with mvcle. -.L5: aghi %r4,1 # length + 1 - lgr %r5,%r4 # source length - lgr %r4,%r2 # source address - lgr %r2,%r3 # set destination - lgr %r3,%r5 # destination length = source length -.L6: mvcle %r2,%r4,0 # thats it, MVCLE is your friend - jo .L6 - br %r14 -.L7: # destructive overlay, can not use mvcle - lgr %r1,%r2 # bcopy is called with source,dest - lgr %r2,%r3 # memmove with dest,source! Oh, well... - lgr %r3,%r1 - jg HIDDEN_BUILTIN_JUMPTARGET(memmove) - -END(__bcopy) - -#ifndef NO_WEAK_ALIAS -weak_alias (__bcopy, bcopy) -#endif - diff --git a/sysdeps/s390/s390-64/bits/wordsize.h b/sysdeps/s390/s390-64/bits/wordsize.h deleted file mode 100644 index 00e88b0628..0000000000 --- a/sysdeps/s390/s390-64/bits/wordsize.h +++ /dev/null @@ -1,11 +0,0 @@ -/* Determine the wordsize from the preprocessor defines. */ - -#if defined __s390x__ -# define __WORDSIZE 64 -#else -# define __WORDSIZE 32 -# define __WORDSIZE32_SIZE_ULONG 1 -# define __WORDSIZE32_PTRDIFF_LONG 0 -#endif - -#define __WORDSIZE_TIME64_COMPAT32 0 diff --git a/sysdeps/s390/s390-64/bsd-_setjmp.S b/sysdeps/s390/s390-64/bsd-_setjmp.S deleted file mode 100644 index 1417270201..0000000000 --- a/sysdeps/s390/s390-64/bsd-_setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* We don't need any code here since the setjmp.S file contains it. */ diff --git a/sysdeps/s390/s390-64/bsd-setjmp.S b/sysdeps/s390/s390-64/bsd-setjmp.S deleted file mode 100644 index 1417270201..0000000000 --- a/sysdeps/s390/s390-64/bsd-setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* We don't need any code here since the setjmp.S file contains it. */ diff --git a/sysdeps/s390/s390-64/bzero.S b/sysdeps/s390/s390-64/bzero.S deleted file mode 100644 index 119c20dcb9..0000000000 --- a/sysdeps/s390/s390-64/bzero.S +++ /dev/null @@ -1,41 +0,0 @@ -/* bzero -- set a block of memory to zero. 64 bit S/390 version. - This file is part of the GNU C Library. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* INPUT PARAMETERS - %r2 = address of memory area - %r3 = number of bytes to fill. */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(__bzero) - ltgr %r3,%r3 - jz .L1 - sgr %r1,%r1 # set pad byte to zero - sgr %r4,%r4 # no source for MVCLE, only a pad byte - sgr %r5,%r5 -.L0: mvcle %r2,%r4,0(%r1) # thats it, MVCLE is your friend - jo .L0 -.L1: br %r14 -END(__bzero) - -#ifndef NO_WEAK_ALIAS -weak_alias (__bzero, bzero) -#endif diff --git a/sysdeps/s390/s390-64/crti.S b/sysdeps/s390/s390-64/crti.S deleted file mode 100644 index c9583bb9c9..0000000000 --- a/sysdeps/s390/s390-64/crti.S +++ /dev/null @@ -1,91 +0,0 @@ -/* Special .init and .fini section support for 64 bit S/390. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - - .section .init,"ax",@progbits - .align 4 - .globl _init - .type _init,@function -_init: - stmg %r6,%r15,48(%r15) - lgr %r1,%r15 - aghi %r15,-160 - stg %r1,0(%r15) - larl %r12,_GLOBAL_OFFSET_TABLE_ -#if PREINIT_FUNCTION_WEAK - larl %r1,PREINIT_FUNCTION@GOTENT - lg %r1,0(%r1) - ltgr %r1,%r1 - je 1f - basr %r14,%r1 -#else - brasl %r14,PREINIT_FUNCTION -#endif - .align 4,0x07 -1: - - .section .fini,"ax",@progbits - .align 4 - .globl _fini - .type _fini,@function -_fini: - stmg %r6,%r15,48(%r15) - lgr %r1,%r15 - aghi %r15,-160 - stg %r1,0(%r15) - larl %r12,_GLOBAL_OFFSET_TABLE_ - .align 4,0x07 diff --git a/sysdeps/s390/s390-64/crtn.S b/sysdeps/s390/s390-64/crtn.S deleted file mode 100644 index 2bb3211e57..0000000000 --- a/sysdeps/s390/s390-64/crtn.S +++ /dev/null @@ -1,50 +0,0 @@ -/* Special .init and .fini section support for 64 bit S/390. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .section .init - .align 4 - lg %r4,272(%r15) - lmg %r6,%r15,208(%r15) - br %r4 - - .section .fini - .align 4 - lg %r4,272(%r15) - lmg %r6,%r15,208(%r15) - br %r4 diff --git a/sysdeps/s390/s390-64/dl-machine.h b/sysdeps/s390/s390-64/dl-machine.h deleted file mode 100644 index f2aeb1e78e..0000000000 --- a/sysdeps/s390/s390-64/dl-machine.h +++ /dev/null @@ -1,476 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. - 64 bit S/390 Version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "s390x" - -#include -#include -#include -#include -#include - -#define ELF_MACHINE_IRELATIVE R_390_IRELATIVE - -/* This is an older, now obsolete value. */ -#define EM_S390_OLD 0xA390 - -/* Return nonzero iff E_MACHINE is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf64_Ehdr *ehdr) -{ - return (ehdr->e_machine == EM_S390 || ehdr->e_machine == EM_S390_OLD) - && ehdr->e_ident[EI_CLASS] == ELFCLASS64; -} - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. This must be inlined in a function which - uses global data. */ - -static inline Elf64_Addr -elf_machine_dynamic (void) -{ - register Elf64_Addr *got; - - __asm__ ( " larl %0,_GLOBAL_OFFSET_TABLE_\n" - : "=&a" (got) : : "0" ); - - return *got; -} - -/* Return the run-time load address of the shared object. */ -static inline Elf64_Addr -elf_machine_load_address (void) -{ - Elf64_Addr addr; - - __asm__( " larl %0,_dl_start\n" - " larl 1,_GLOBAL_OFFSET_TABLE_\n" - " lghi 2,_dl_start@GOT\n" - " slg %0,0(2,1)" - : "=&d" (addr) : : "1", "2" ); - return addr; -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int __attribute__ ((unused)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - extern void _dl_runtime_resolve (Elf64_Word); - extern void _dl_runtime_profile (Elf64_Word); -#if defined HAVE_S390_VX_ASM_SUPPORT - extern void _dl_runtime_resolve_vx (Elf64_Word); - extern void _dl_runtime_profile_vx (Elf64_Word); -#endif - - if (l->l_info[DT_JMPREL] && lazy) - { - /* The GOT entries for functions in the PLT have not yet been filled - in. Their initial contents will arrange when called to push an - offset into the .rela.plt section, push _GLOBAL_OFFSET_TABLE_[1], - and then jump to _GLOBAL_OFFSET_TABLE[2]. */ - Elf64_Addr *got; - got = (Elf64_Addr *) D_PTR (l, l_info[DT_PLTGOT]); - /* If a library is prelinked but we have to relocate anyway, - we have to be able to undo the prelinking of .got.plt. - The prelinker saved us here address of .plt + 0x2e. */ - if (got[1]) - { - l->l_mach.plt = got[1] + l->l_addr; - l->l_mach.jmprel = (const Elf64_Rela *) D_PTR (l, l_info[DT_JMPREL]); - } - got[1] = (Elf64_Addr) l; /* Identify this shared object. */ - - /* The got[2] entry contains the address of a function which gets - called to get the address of a so far unresolved function and - jump to it. The profiling extension of the dynamic linker allows - to intercept the calls to collect information. In this case we - don't store the address in the GOT so that all future calls also - end in this function. */ - if (__glibc_unlikely (profile)) - { -#if defined HAVE_S390_VX_ASM_SUPPORT - if (GLRO(dl_hwcap) & HWCAP_S390_VX) - got[2] = (Elf64_Addr) &_dl_runtime_profile_vx; - else - got[2] = (Elf64_Addr) &_dl_runtime_profile; -#else - got[2] = (Elf64_Addr) &_dl_runtime_profile; -#endif - - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - /* This is the object we are looking for. Say that we really - want profiling and the timers are started. */ - GL(dl_profile_map) = l; - } - else - { - /* This function will get called to fix up the GOT entry indicated by - the offset on the stack, and then jump to the resolved address. */ -#if defined HAVE_S390_VX_ASM_SUPPORT - if (GLRO(dl_hwcap) & HWCAP_S390_VX) - got[2] = (Elf64_Addr) &_dl_runtime_resolve_vx; - else - got[2] = (Elf64_Addr) &_dl_runtime_resolve; -#else - got[2] = (Elf64_Addr) &_dl_runtime_resolve; -#endif - } - } - - return lazy; -} - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START __asm__ ("\n\ -.text\n\ -.align 4\n\ -.globl _start\n\ -.globl _dl_start_user\n\ -_start:\n\ - lgr %r2,%r15\n\ - # Alloc stack frame\n\ - aghi %r15,-160\n\ - # Set the back chain to zero\n\ - xc 0(8,%r15),0(%r15)\n\ - # Call _dl_start with %r2 pointing to arg on stack\n\ - brasl %r14,_dl_start # call _dl_start\n\ -_dl_start_user:\n\ - # Save the user entry point address in %r8.\n\ - lgr %r8,%r2\n\ - # Point %r12 at the GOT.\n\ - larl %r12,_GLOBAL_OFFSET_TABLE_\n\ - # See if we were run as a command with the executable file\n\ - # name as an extra leading argument.\n\ - lghi %r1,_dl_skip_args@GOT\n\ - lg %r1,0(%r1,%r12)\n\ - lgf %r1,0(%r1) # load _dl_skip_args\n\ - # Get the original argument count.\n\ - lg %r0,160(%r15)\n\ - # Subtract _dl_skip_args from it.\n\ - sgr %r0,%r1\n\ - # Adjust the stack pointer to skip _dl_skip_args words.\n\ - sllg %r1,%r1,3\n\ - agr %r15,%r1\n\ - # Set the back chain to zero again\n\ - xc 0(8,%r15),0(%r15)\n\ - # Store back the modified argument count.\n\ - stg %r0,160(%r15)\n\ - # The special initializer gets called with the stack just\n\ - # as the application's entry point will see it; it can\n\ - # switch stacks if it moves these contents over.\n\ -" RTLD_START_SPECIAL_INIT "\n\ - # Call the function to run the initializers.\n\ - # Load the parameters:\n\ - # (%r2, %r3, %r4, %r5) = (_dl_loaded, argc, argv, envp)\n\ - lghi %r2,_rtld_local@GOT\n\ - lg %r2,0(%r2,%r12)\n\ - lg %r2,0(%r2)\n\ - lg %r3,160(%r15)\n\ - la %r4,168(%r15)\n\ - lgr %r5,%r3\n\ - sllg %r5,%r5,3\n\ - la %r5,176(%r5,%r15)\n\ - brasl %r14,_dl_init@PLT\n\ - # Pass our finalizer function to the user in %r14, as per ELF ABI.\n\ - lghi %r14,_dl_fini@GOT\n\ - lg %r14,0(%r14,%r12)\n\ - # Free stack frame\n\ - aghi %r15,160\n\ - # Jump to the user's entry point (saved in %r8).\n\ - br %r8\n\ -"); - -#ifndef RTLD_START_SPECIAL_INIT -#define RTLD_START_SPECIAL_INIT /* nothing */ -#endif - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or - TLS variable, so undefined references should not be allowed to - define the value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. */ -#define elf_machine_type_class(type) \ - ((((type) == R_390_JMP_SLOT || (type) == R_390_TLS_DTPMOD \ - || (type) == R_390_TLS_DTPOFF || (type) == R_390_TLS_TPOFF) \ - * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_390_COPY) * ELF_RTYPE_CLASS_COPY)) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_390_JMP_SLOT - -/* The 64 bit S/390 never uses Elf64_Rel relocations. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -/* We define an initialization functions. This is called very early in - _dl_sysdep_start. */ -#define DL_PLATFORM_INIT dl_platform_init () - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ - if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') - /* Avoid an empty string which would disturb us. */ - GLRO(dl_platform) = NULL; -} - -static inline Elf64_Addr -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf64_Rela *reloc, - Elf64_Addr *reloc_addr, Elf64_Addr value) -{ - return *reloc_addr = value; -} - -/* Return the final value of a plt relocation. */ -static inline Elf64_Addr -elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc, - Elf64_Addr value) -{ - return value; -} - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER s390_64_gnu_pltenter -#define ARCH_LA_PLTEXIT s390_64_gnu_pltexit - -#endif /* !dl_machine_h */ - -#ifdef RESOLVE_MAP - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, - const Elf64_Sym *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - Elf64_Addr *const reloc_addr = reloc_addr_arg; - const unsigned int r_type = ELF64_R_TYPE (reloc->r_info); - -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC - if (__glibc_unlikely (r_type == R_390_RELATIVE)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; - make the reference weak so static programs can still link. - This declaration cannot be done when compiling rtld.c - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the - common defn for _dl_rtld_map, which is incompatible with a - weak decl in the same file. */ -# ifndef SHARED - weak_extern (GL(dl_rtld_map)); -# endif - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ -# endif - *reloc_addr = map->l_addr + reloc->r_addend; - } - else -#endif - if (__glibc_unlikely (r_type == R_390_NONE)) - return; - else - { -#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP - /* Only needed for R_390_COPY below. */ - const Elf64_Sym *const refsym = sym; -#endif - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - Elf64_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value; - - if (sym != NULL - && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, - 0) - && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) - && __builtin_expect (!skip_ifunc, 1)) - value = elf_ifunc_invoke (value); - - switch (r_type) - { - case R_390_IRELATIVE: - value = map->l_addr + reloc->r_addend; - if (__glibc_likely (!skip_ifunc)) - value = elf_ifunc_invoke (value); - *reloc_addr = value; - break; - case R_390_GLOB_DAT: - case R_390_JMP_SLOT: - *reloc_addr = value + reloc->r_addend; - break; - -#ifndef RESOLVE_CONFLICT_FIND_MAP - case R_390_TLS_DTPMOD: -# ifdef RTLD_BOOTSTRAP - /* During startup the dynamic linker is always the module - with index 1. - XXX If this relocation is necessary move before RESOLVE - call. */ - *reloc_addr = 1; -# else - /* Get the information from the link map returned by the - resolv function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; -# endif - break; - case R_390_TLS_DTPOFF: -# ifndef RTLD_BOOTSTRAP - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ - if (sym != NULL) - *reloc_addr = sym->st_value + reloc->r_addend; -# endif - break; - case R_390_TLS_TPOFF: - /* The offset is negative, forward from the thread pointer. */ -# ifdef RTLD_BOOTSTRAP - *reloc_addr = sym->st_value + reloc->r_addend - map->l_tls_offset; -# else - /* We know the offset of the object the symbol is contained in. - It is a negative value which will be added to the - thread pointer. */ - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = (sym->st_value + reloc->r_addend - - sym_map->l_tls_offset); - } -#endif - break; -#endif /* use TLS */ - -#ifndef RTLD_BOOTSTRAP -# ifndef RESOLVE_CONFLICT_FIND_MAP - /* Not needed for dl-conflict.c. */ - case R_390_COPY: - if (sym == NULL) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (__builtin_expect (sym->st_size > refsym->st_size, 0) - || (__builtin_expect (sym->st_size < refsym->st_size, 0) - && __builtin_expect (GLRO(dl_verbose), 0))) - { - const char *strtab; - - strtab = (const char *) D_PTR (map,l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - break; -# endif - case R_390_64: - *reloc_addr = value + reloc->r_addend; - break; - case R_390_32: - *(unsigned int *) reloc_addr = value + reloc->r_addend; - break; - case R_390_16: - *(unsigned short *) reloc_addr = value + reloc->r_addend; - break; - case R_390_8: - *(char *) reloc_addr = value + reloc->r_addend; - break; -# ifndef RESOLVE_CONFLICT_FIND_MAP - case R_390_PC64: - *reloc_addr = value +reloc->r_addend - (Elf64_Addr) reloc_addr; - break; - case R_390_PC32DBL: - *(unsigned int *) reloc_addr = (unsigned int) - ((int) (value + reloc->r_addend - (Elf64_Addr) reloc_addr) >> 1); - break; - case R_390_PC32: - *(unsigned int *) reloc_addr = - value + reloc->r_addend - (Elf64_Addr) reloc_addr; - break; - case R_390_PC16DBL: - *(unsigned short *) reloc_addr = (unsigned short) - ((short) (value + reloc->r_addend - (Elf64_Addr) reloc_addr) >> 1); - break; - case R_390_PC16: - *(unsigned short *) reloc_addr = - value + reloc->r_addend - (Elf64_Addr) reloc_addr; - break; - case R_390_NONE: - break; -# endif -#endif -#if !defined(RTLD_BOOTSTRAP) || defined(_NDEBUG) - default: - /* We add these checks in the version to relocate ld.so only - if we are still debugging. */ - _dl_reloc_bad_type (map, r_type, 0); - break; -#endif - } - } -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, - void *const reloc_addr_arg) -{ - Elf64_Addr *const reloc_addr = reloc_addr_arg; - *reloc_addr = l_addr + reloc->r_addend; -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf64_Addr l_addr, const Elf64_Rela *reloc, - int skip_ifunc) -{ - Elf64_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); - const unsigned int r_type = ELF64_R_TYPE (reloc->r_info); - /* Check for unexpected PLT reloc type. */ - if (__glibc_likely (r_type == R_390_JMP_SLOT)) - { - if (__builtin_expect (map->l_mach.plt, 0) == 0) - *reloc_addr += l_addr; - else - *reloc_addr = map->l_mach.plt + (reloc - map->l_mach.jmprel) * 32; - } - else if (__glibc_likely (r_type == R_390_IRELATIVE)) - { - Elf64_Addr value = map->l_addr + reloc->r_addend; - if (__glibc_likely (!skip_ifunc)) - value = elf_ifunc_invoke (value); - *reloc_addr = value; - } - else - _dl_reloc_bad_type (map, r_type, 1); -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/s390/s390-64/dl-trampoline.S b/sysdeps/s390/s390-64/dl-trampoline.S deleted file mode 100644 index 2e3b141e30..0000000000 --- a/sysdeps/s390/s390-64/dl-trampoline.S +++ /dev/null @@ -1,33 +0,0 @@ -/* PLT trampolines. s390x version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -/* Create variant of _dl_runtime_resolve/profile for machines before z13. - No vector registers are saved/restored. */ -#include - -#if defined HAVE_S390_VX_ASM_SUPPORT -/* Create variant of _dl_runtime_resolve/profile for z13 and newer. - The vector registers are saved/restored, too.*/ -# define _dl_runtime_resolve _dl_runtime_resolve_vx -# define _dl_runtime_profile _dl_runtime_profile_vx -# define RESTORE_VRS -# include -#endif diff --git a/sysdeps/s390/s390-64/dl-trampoline.h b/sysdeps/s390/s390-64/dl-trampoline.h deleted file mode 100644 index e1f95e2ecd..0000000000 --- a/sysdeps/s390/s390-64/dl-trampoline.h +++ /dev/null @@ -1,225 +0,0 @@ -/* PLT trampolines. s390x version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The PLT stubs will call _dl_runtime_resolve/_dl_runtime_profile - * with the following linkage: - * r2 - r6 : parameter registers - * f0, f2, f4, f6 : floating point parameter registers - * v24, v26, v28, v30, v25, v27, v29, v31 : vector parameter registers - * 48(r15), 56(r15) : PLT arguments PLT1, PLT2 - * 160(r15) : additional stack parameters - * The normal clobber rules for function calls apply: - * r0 - r5 : call clobbered - * r6 - r13 : call saved - * r14 : return address (call clobbered) - * r15 : stack pointer (call saved) - * f0 - f7 : call clobbered - * f8 - f15 : call saved - * v0 - v7 : bytes 0-7 overlap with f0-f7: call clobbered - bytes 8-15: call clobbered - * v8 - v15 : bytes 0-7 overlap with f8-f15: call saved - bytes 8-15: call clobbered - * v16 - v31 : call clobbered - */ - - .globl _dl_runtime_resolve - .type _dl_runtime_resolve, @function - cfi_startproc - .align 16 -_dl_runtime_resolve: - stmg %r2,%r5,64(%r15) # save call-clobbered argument registers - cfi_offset (r2, -96) - cfi_offset (r3, -88) - cfi_offset (r4, -80) - cfi_offset (r5, -72) - std %f0,104(%r15) - cfi_offset (f0, -56) - std %f2,112(%r15) - cfi_offset (f2, -48) - std %f4,120(%r15) - cfi_offset (f4, -40) - std %f6,128(%r15) - cfi_offset (f6, -32) - stg %r14,96(15) - cfi_offset (r14, -64) - lmg %r2,%r3,48(%r15) # load args for fixup saved by PLT - lgr %r0,%r15 -#ifdef RESTORE_VRS - aghi %r15,-288 # create stack frame - cfi_adjust_cfa_offset (288) - .machine push - .machine "z13" - vstm %v24,%v31,160(%r15)# store call-clobbered vector argument registers - cfi_offset (v24, -288) - cfi_offset (v25, -272) - cfi_offset (v26, -256) - cfi_offset (v27, -240) - cfi_offset (v28, -224) - cfi_offset (v29, -208) - cfi_offset (v30, -192) - cfi_offset (v31, -176) - .machine pop -#else - aghi %r15,-160 # create stack frame - cfi_adjust_cfa_offset (160) -#endif - stg %r0,0(%r15) # write backchain - brasl %r14,_dl_fixup # call _dl_fixup - lgr %r1,%r2 # function addr returned in r2 -#ifdef RESTORE_VRS - .machine push - .machine "z13" - vlm %v24,%v31,160(%r15)# restore vector registers - .machine pop - aghi %r15,288 # remove stack frame - cfi_adjust_cfa_offset (-288) -#else - aghi %r15,160 # remove stack frame - cfi_adjust_cfa_offset (-160) -#endif - lg %r14,96(%r15) # restore registers - ld %f0,104(%r15) - ld %f2,112(%r15) - ld %f4,120(%r15) - ld %f6,128(%r15) - lmg %r2,%r5,64(%r15) - br %r1 - cfi_endproc - .size _dl_runtime_resolve, .-_dl_runtime_resolve - - -#ifndef PROF - .globl _dl_runtime_profile - .type _dl_runtime_profile, @function - cfi_startproc - .align 16 -_dl_runtime_profile: - stg %r12,24(%r15) # r12 is used as backup of r15 - cfi_offset (r12, -136) - stg %r14,32(%r15) - cfi_offset (r14, -128) - lgr %r12,%r15 # backup stack pointer - cfi_def_cfa_register (12) - aghi %r15,-360 # create stack frame: - # 160 + sizeof(La_s390_64_regs) - stg %r12,0(%r15) # save backchain - - stmg %r2,%r6,160(%r15) # save call-clobbered arg regs - cfi_offset (r2, -360) # + r6 needed as arg for - cfi_offset (r3, -352) # _dl_profile_fixup - cfi_offset (r4, -344) - cfi_offset (r5, -336) - cfi_offset (r6, -328) - std %f0,200(%r15) - cfi_offset (f0, -320) - std %f2,208(%r15) - cfi_offset (f2, -312) - std %f4,216(%r15) - cfi_offset (f4, -304) - std %f6,224(%r15) - cfi_offset (f6, -296) -#ifdef RESTORE_VRS - .machine push - .machine "z13" - vstm %v24,%v31,232(%r15) # store call-clobbered vector arguments - cfi_offset (v24, -288) - cfi_offset (v25, -272) - cfi_offset (v26, -256) - cfi_offset (v27, -240) - cfi_offset (v28, -224) - cfi_offset (v29, -208) - cfi_offset (v30, -192) - cfi_offset (v31, -176) - .machine pop -#endif - lmg %r2,%r3,48(%r12) # load arguments saved by PLT - lgr %r4,%r14 # return address as third parameter - la %r5,160(%r15) # pointer to struct La_s390_64_regs - la %r6,40(%r12) # long int * framesize - brasl %r14,_dl_profile_fixup # call resolver - lgr %r1,%r2 # function addr returned in r2 - ld %f0,200(%r15) # restore call-clobbered arg fprs - ld %f2,208(%r15) - ld %f4,216(%r15) - ld %f6,224(%r15) -#ifdef RESTORE_VRS - .machine push - .machine "z13" - vlm %v24,%v31,232(%r15) # restore call-clobbered arg vrs - .machine pop -#endif - lg %r0,40(%r12) # load framesize - ltgr %r0,%r0 - jnm 1f - - lmg %r2,%r6,160(%r15) # framesize < 0 means no pltexit call - # so we can do a tail call without - # copying the arg overflow area - lgr %r15,%r12 # remove stack frame - cfi_def_cfa_register (15) - lg %r14,32(%r15) # restore registers - lg %r12,24(%r15) - br %r1 # tail-call to resolved function - - cfi_def_cfa_register (12) -1: la %r4,160(%r15) # pointer to struct La_s390_64_regs - stg %r4,64(%r12) - jz 4f # framesize == 0 ? - aghi %r0,7 # align framesize to 8 - nill %r0,0xfff8 - slgr %r15,%r0 # make room for framesize bytes - stg %r12,0(%r15) # save backchain - la %r2,160(%r15) - la %r3,160(%r12) - srlg %r0,%r0,3 -3: mvc 0(8,%r2),0(%r3) # copy additional parameters - la %r2,8(%r2) # depending on framesize - la %r3,8(%r3) - brctg %r0,3b -4: lmg %r2,%r6,0(%r4) # restore call-clobbered arg gprs - basr %r14,%r1 # call resolved function - stg %r2,72(%r12) # store return values r2, f0 - std %f0,80(%r12) # to struct La_s390_64_retval -#ifdef RESTORE_VRS - .machine push - .machine "z13" - vst %v24,88(%r12) # store return value v24 - .machine pop -#endif - lmg %r2,%r4,48(%r12) # r2, r3: load arguments saved by PLT - # r4: pointer to struct La_s390_64_regs - la %r5,72(%r12) # pointer to struct La_s390_64_retval - brasl %r14,_dl_call_pltexit - - lgr %r15,%r12 # remove stack frame - cfi_def_cfa_register (15) - lg %r14,32(%r15) # restore registers - lg %r12,24(%r15) - lg %r2,72(%r15) # restore return values - ld %f0,80(%r15) -#ifdef RESTORE_VRS - .machine push - .machine "z13" - vl %v24,88(%r15) # restore return value v24 - .machine pop -#endif - br %r14 # Jump back to caller - - cfi_endproc - .size _dl_runtime_profile, .-_dl_runtime_profile -#endif diff --git a/sysdeps/s390/s390-64/memchr.S b/sysdeps/s390/s390-64/memchr.S deleted file mode 100644 index 7deee3d6f3..0000000000 --- a/sysdeps/s390/s390-64/memchr.S +++ /dev/null @@ -1,40 +0,0 @@ -/* Search a character in a block of memory. 64 bit S/390 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* INPUT PARAMETERS - %r2 = address to memory area - %r3 = character to find - %r4 = number of bytes to search. */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(memchr) - lghi %r0,0xff - ngr %r0,%r3 - lgr %r1,%r2 - la %r2,0(%r4,%r1) -0: srst %r2,%r1 - jo 0b - brc 13,1f - slgr %r2,%r2 -1: br %r14 -END(memchr) -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/s390/s390-64/memcmp.S b/sysdeps/s390/s390-64/memcmp.S deleted file mode 100644 index cecffc39f9..0000000000 --- a/sysdeps/s390/s390-64/memcmp.S +++ /dev/null @@ -1,64 +0,0 @@ -/* memcmp - compare two memory blocks. 64 bit S/390 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include -#include "asm-syntax.h" - -/* INPUT PARAMETERS - %r2 = address of first memory area - %r3 = address of second memory area - %r4 = number of bytes to compare. */ - - .text -#ifdef USE_MULTIARCH -ENTRY(__memcmp_default) -#else -ENTRY(memcmp) -#endif - .machine "z900" - ltgr %r4,%r4 - je .L_Z900_4 - aghi %r4,-1 - srlg %r1,%r4,8 - ltgr %r1,%r1 - jne .L_Z900_12 -.L_Z900_3: - larl %r1,.L_Z900_15 - ex %r4,0(%r1) -.L_Z900_4: - ipm %r2 - sllg %r2,%r2,34 - srag %r2,%r2,62 - br %r14 -.L_Z900_12: - clc 0(256,%r3),0(%r2) - jne .L_Z900_4 - la %r3,256(%r3) - la %r2,256(%r2) - brctg %r1,.L_Z900_12 - j .L_Z900_3 -.L_Z900_15: - clc 0(1,%r3),0(%r2) -#ifdef USE_MULTIARCH -END(__memcmp_default) -#else -END(memcmp) -libc_hidden_builtin_def (memcmp) -weak_alias (memcmp, bcmp) -#endif diff --git a/sysdeps/s390/s390-64/memcpy.S b/sysdeps/s390/s390-64/memcpy.S deleted file mode 100644 index 3df07b5e23..0000000000 --- a/sysdeps/s390/s390-64/memcpy.S +++ /dev/null @@ -1,88 +0,0 @@ -/* memcpy - copy a block from source to destination. 64 bit S/390 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include -#include "asm-syntax.h" - -/* INPUT PARAMETERS - %r2 = address of destination memory area - %r3 = address of source memory area - %r4 = number of bytes to copy. */ - - - .text -ENTRY(__mempcpy) - .machine "z900" - lgr %r1,%r2 # Use as dest - la %r2,0(%r4,%r2) # Return dest + n - j .L_Z900_start -END(__mempcpy) -#ifndef USE_MULTIARCH -libc_hidden_def (__mempcpy) -weak_alias (__mempcpy, mempcpy) -libc_hidden_builtin_def (mempcpy) -#endif - -ENTRY(memcpy) - .machine "z900" - lgr %r1,%r2 # r1: Use as dest ; r2: Return dest -.L_Z900_start: - ltgr %r4,%r4 - je .L_Z900_4 - aghi %r4,-1 - srlg %r5,%r4,8 - ltgr %r5,%r5 - jne .L_Z900_13 -.L_Z900_3: - larl %r5,.L_Z900_15 - ex %r4,0(%r5) -.L_Z900_4: - br %r14 -.L_Z900_13: - cghi %r5,4096 # Switch to mvcle for copies >1MB - jh __memcpy_mvcle -.L_Z900_12: - mvc 0(256,%r1),0(%r3) - la %r1,256(%r1) - la %r3,256(%r3) - brctg %r5,.L_Z900_12 - j .L_Z900_3 -.L_Z900_15: - mvc 0(1,%r1),0(%r3) -END(memcpy) -#ifndef USE_MULTIARCH -libc_hidden_builtin_def (memcpy) -#endif - -ENTRY(__memcpy_mvcle) - # Using as standalone function will result in unexpected - # results since the length field is incremented by 1 in order to - # compensate the changes already done in the functions above. - lgr %r0,%r2 # backup return dest [ + n ] - aghi %r4,1 # length + 1 - lgr %r5,%r4 # source length - lgr %r4,%r3 # source address - lgr %r2,%r1 # destination address - lgr %r3,%r5 # destination length = source length -.L_MVCLE_1: - mvcle %r2,%r4,0 # thats it, MVCLE is your friend - jo .L_MVCLE_1 - lgr %r2,%r0 # return destination address - br %r14 -END(__memcpy_mvcle) diff --git a/sysdeps/s390/s390-64/memset.S b/sysdeps/s390/s390-64/memset.S deleted file mode 100644 index e653f12134..0000000000 --- a/sysdeps/s390/s390-64/memset.S +++ /dev/null @@ -1,64 +0,0 @@ -/* Set a block of memory to some byte value. 64 bit S/390 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include -#include "asm-syntax.h" - -/* INPUT PARAMETERS - %r2 = address of memory area - %r3 = byte to fill memory with - %r4 = number of bytes to fill. */ - - .text - -#ifdef USE_MULTIARCH -ENTRY(__memset_default) -#else -ENTRY(memset) -#endif - .machine "z900" - ltgr %r4,%r4 - je .L_Z900_4 - stc %r3,0(%r2) - cghi %r4,1 - lgr %r1,%r2 - je .L_Z900_4 - aghi %r4,-2 - srlg %r3,%r4,8 - ltgr %r3,%r3 - jne .L_Z900_14 -.L_Z900_3: - larl %r3,.L_Z900_18 - ex %r4,0(%r3) -.L_Z900_4: - br %r14 -.L_Z900_14: - mvc 1(256,%r1),0(%r1) - la %r1,256(%r1) - brctg %r3,.L_Z900_14 - j .L_Z900_3 -.L_Z900_18: - mvc 1(1,%r1),0(%r1) -#ifdef USE_MULTIARCH -END(__memset_default) -#else -END(memset) -libc_hidden_builtin_def (memset) -#endif diff --git a/sysdeps/s390/s390-64/multiarch/Makefile b/sysdeps/s390/s390-64/multiarch/Makefile deleted file mode 100644 index 91053b5364..0000000000 --- a/sysdeps/s390/s390-64/multiarch/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -ifeq ($(subdir),string) -sysdep_routines += memset memset-s390x memcpy memcpy-s390x \ - memcmp memcmp-s390x -endif diff --git a/sysdeps/s390/s390-64/multiarch/memchr.c b/sysdeps/s390/s390-64/multiarch/memchr.c deleted file mode 100644 index 808c3b837a..0000000000 --- a/sysdeps/s390/s390-64/multiarch/memchr.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Multiple versions of memchr. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This wrapper-file is needed, because otherwise file - sysdeps/s390/s390-[32|64]/memchr.S will be used. */ -#include diff --git a/sysdeps/s390/s390-64/multiarch/memcmp-s390x.S b/sysdeps/s390/s390-64/multiarch/memcmp-s390x.S deleted file mode 100644 index da956d2568..0000000000 --- a/sysdeps/s390/s390-64/multiarch/memcmp-s390x.S +++ /dev/null @@ -1,104 +0,0 @@ -/* CPU specific memcmp implementations. 64 bit S/390 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include "sysdep.h" -#include "asm-syntax.h" - -/* INPUT PARAMETERS - %r2 = address of first memory area - %r3 = address of second memory area - %r4 = number of bytes to compare. */ - - .text - -#if IS_IN (libc) - -ENTRY(__memcmp_z196) - .machine "z196" - ltgr %r4,%r4 - je .L_Z196_4 - aghi %r4,-1 - srlg %r1,%r4,8 - ltgr %r1,%r1 - jne .L_Z196_2 -.L_Z196_3: - exrl %r4,.L_Z196_14 -.L_Z196_4: - ipm %r2 - sllg %r2,%r2,34 - srag %r2,%r2,62 - br %r14 -.L_Z196_17: - la %r3,256(%r3) - la %r2,256(%r2) - aghi %r1,-1 - je .L_Z196_3 -.L_Z196_2: - pfd 1,512(%r3) - pfd 1,512(%r2) - clc 0(256,%r3),0(%r2) - je .L_Z196_17 - ipm %r2 - sllg %r2,%r2,34 - srag %r2,%r2,62 - br %r14 -.L_Z196_14: - clc 0(1,%r3),0(%r2) -END(__memcmp_z196) - -ENTRY(__memcmp_z10) - .machine "z10" - ltgr %r4,%r4 - je .L_Z10_4 - aghi %r4,-1 - srlg %r1,%r4,8 - cgijlh %r1,0,.L_Z10_12 -.L_Z10_3: - exrl %r4,.L_Z10_15 -.L_Z10_4: - ipm %r2 - sllg %r2,%r2,34 - srag %r2,%r2,62 - br %r14 -.L_Z10_12: - pfd 1,512(%r3) - pfd 1,512(%r2) - clc 0(256,%r3),0(%r2) - jne .L_Z10_4 - la %r3,256(%r3) - la %r2,256(%r2) - brctg %r1,.L_Z10_12 - j .L_Z10_3 -.L_Z10_15: - clc 0(1,%r3),0(%r2) -END(__memcmp_z10) - -#endif /* IS_IN (libc) */ - -#include "../memcmp.S" - -#if !IS_IN (libc) -.globl memcmp -.set memcmp,__memcmp_default -.weak bcmp -.set bcmp,__memcmp_default -#elif defined SHARED && IS_IN (libc) -.globl __GI_memcmp -.set __GI_memcmp,__memcmp_default -#endif diff --git a/sysdeps/s390/s390-64/multiarch/memcmp.c b/sysdeps/s390/s390-64/multiarch/memcmp.c deleted file mode 100644 index 2d8d8f4d50..0000000000 --- a/sysdeps/s390/s390-64/multiarch/memcmp.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Multiple versions of memcmp. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define memcmp __redirect_memcmp -# include -# undef memcmp -# include - -s390_libc_ifunc (__redirect_memcmp, __memcmp, memcmp) -weak_alias (memcmp, bcmp); -#endif diff --git a/sysdeps/s390/s390-64/multiarch/memcpy-s390x.S b/sysdeps/s390/s390-64/multiarch/memcpy-s390x.S deleted file mode 100644 index a9ffa9cc98..0000000000 --- a/sysdeps/s390/s390-64/multiarch/memcpy-s390x.S +++ /dev/null @@ -1,122 +0,0 @@ -/* CPU specific memcpy implementations. 64 bit S/390 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include "sysdep.h" -#include "asm-syntax.h" - -/* INPUT PARAMETERS - %r2 = target operands address - %r3 = source operands address - %r4 = number of bytes to copy. */ - - .text - -#if defined SHARED && IS_IN (libc) - -ENTRY(____mempcpy_z196) - .machine "z196" - lgr %r1,%r2 # Use as dest - la %r2,0(%r4,%r2) # Return dest + n - j .L_Z196_start -END(____mempcpy_z196) - -ENTRY(__memcpy_z196) - .machine "z196" - lgr %r1,%r2 # r1: Use as dest ; r2: Return dest -.L_Z196_start: - ltgr %r4,%r4 - je .L_Z196_4 - aghi %r4,-1 - srlg %r5,%r4,8 - ltgr %r5,%r5 - jne .L_Z196_5 -.L_Z196_3: - exrl %r4,.L_Z196_14 -.L_Z196_4: - br %r14 -.L_Z196_5: - cgfi %r5,262144 # Switch to mvcle for copies >64MB - jh __memcpy_mvcle -.L_Z196_2: - pfd 1,768(%r3) - pfd 2,768(%r1) - mvc 0(256,%r1),0(%r3) - aghi %r5,-1 - la %r1,256(%r1) - la %r3,256(%r3) - jne .L_Z196_2 - j .L_Z196_3 -.L_Z196_14: - mvc 0(1,%r1),0(%r3) -END(__memcpy_z196) - -ENTRY(____mempcpy_z10) - .machine "z10" - lgr %r1,%r2 # Use as dest - la %r2,0(%r4,%r2) # Return dest + n - j .L_Z10_start -END(____mempcpy_z10) - -ENTRY(__memcpy_z10) - .machine "z10" - lgr %r1,%r2 # r1: Use as dest ; r2: Return dest -.L_Z10_start: - cgije %r4,0,.L_Z10_4 - aghi %r4,-1 - srlg %r5,%r4,8 - cgijlh %r5,0,.L_Z10_13 -.L_Z10_3: - exrl %r4,.L_Z10_15 -.L_Z10_4: - br %r14 -.L_Z10_13: - cgfi %r5,65535 # Switch to mvcle for copies >16MB - jh __memcpy_mvcle -.L_Z10_12: - pfd 1,768(%r3) - pfd 2,768(%r1) - mvc 0(256,%r1),0(%r3) - la %r1,256(%r1) - la %r3,256(%r3) - brctg %r5,.L_Z10_12 - j .L_Z10_3 -.L_Z10_15: - mvc 0(1,%r1),0(%r3) -END(__memcpy_z10) - -# define __mempcpy ____mempcpy_default -#endif /* SHARED && IS_IN (libc) */ - -#define memcpy __memcpy_default -#include "../memcpy.S" -#undef memcpy - -#if defined SHARED && IS_IN (libc) -.globl __GI_memcpy -.set __GI_memcpy,__memcpy_default -.globl __GI_mempcpy -.set __GI_mempcpy,____mempcpy_default -.globl __GI___mempcpy -.set __GI___mempcpy,____mempcpy_default -#else -.globl memcpy -.set memcpy,__memcpy_default -.weak mempcpy -.set mempcpy,__mempcpy -#endif diff --git a/sysdeps/s390/s390-64/multiarch/memcpy.c b/sysdeps/s390/s390-64/multiarch/memcpy.c deleted file mode 100644 index 4b8e546fb0..0000000000 --- a/sysdeps/s390/s390-64/multiarch/memcpy.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Multiple versions of memcpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* In the static lib memcpy is needed before the reloc is resolved. */ -#if defined SHARED && IS_IN (libc) -# define memcpy __redirect_memcpy -# include -# undef memcpy -# include - -s390_libc_ifunc (__redirect_memcpy, __memcpy, memcpy) -#endif diff --git a/sysdeps/s390/s390-64/multiarch/memset-s390x.S b/sysdeps/s390/s390-64/multiarch/memset-s390x.S deleted file mode 100644 index ca0c4326b1..0000000000 --- a/sysdeps/s390/s390-64/multiarch/memset-s390x.S +++ /dev/null @@ -1,112 +0,0 @@ -/* Set a block of memory to some byte value. 64 bit S/390 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include "sysdep.h" -#include "asm-syntax.h" - -/* INPUT PARAMETERS - %r2 = address of memory area - %r3 = byte to fill memory with - %r4 = number of bytes to fill. */ - - .text - -#if IS_IN (libc) - -ENTRY(__memset_z196) - .machine "z196" - ltgr %r4,%r4 - je .L_Z196_4 - stc %r3,0(%r2) - lgr %r1,%r2 - cghi %r4,1 - je .L_Z196_4 - aghi %r4,-2 - srlg %r5,%r4,8 - ltgr %r5,%r5 - jne .L_Z196_1 -.L_Z196_3: - exrl %r4,.L_Z196_17 -.L_Z196_4: - br %r14 -.L_Z196_1: - cgfi %r5,1048576 - jh __memset_mvcle # Switch to mvcle for >256MB -.L_Z196_2: - pfd 2,1024(%r1) - mvc 1(256,%r1),0(%r1) - aghi %r5,-1 - la %r1,256(%r1) - jne .L_Z196_2 - j .L_Z196_3 -.L_Z196_17: - mvc 1(1,%r1),0(%r1) -END(__memset_z196) - -ENTRY(__memset_z10) - .machine "z10" - cgije %r4,0,.L_Z10_4 - stc %r3,0(%r2) - lgr %r1,%r2 - cgije %r4,1,.L_Z10_4 - aghi %r4,-2 - srlg %r5,%r4,8 - cgijlh %r5,0,.L_Z10_15 -.L_Z10_3: - exrl %r4,.L_Z10_18 -.L_Z10_4: - br %r14 -.L_Z10_15: - cgfi %r5,163840 # Switch to mvcle for >40MB - jh __memset_mvcle -.L_Z10_14: - pfd 2,1024(%r1) - mvc 1(256,%r1),0(%r1) - la %r1,256(%r1) - brctg %r5,.L_Z10_14 - j .L_Z10_3 -.L_Z10_18: - mvc 1(1,%r1),0(%r1) -END(__memset_z10) - -ENTRY(__memset_mvcle) - aghi %r4,2 # take back the change done by the caller - lgr %r0,%r2 # save source address - lgr %r1,%r3 # move pad byte to R1 - lgr %r3,%r4 # move length to r3 - sgr %r4,%r4 # no source for MVCLE, only a pad byte - sgr %r5,%r5 -.L0: mvcle %r2,%r4,0(%r1) # thats it, MVCLE is your friend - jo .L0 - lgr %r2,%r0 # return value is source address -.L1: - br %r14 -END(__memset_mvcle) - -#endif /* IS_IN (libc) */ - -#include "../memset.S" - -#if !IS_IN (libc) -.globl memset -.set memset,__memset_default -#elif defined SHARED && IS_IN (libc) -.globl __GI_memset -.set __GI_memset,__memset_default -#endif diff --git a/sysdeps/s390/s390-64/multiarch/memset.c b/sysdeps/s390/s390-64/multiarch/memset.c deleted file mode 100644 index 421c0854a0..0000000000 --- a/sysdeps/s390/s390-64/multiarch/memset.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Multiple versions of memset. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# define memset __redirect_memset -# include -# undef memset -# include - -s390_libc_ifunc (__redirect_memset, __memset, memset) -#endif diff --git a/sysdeps/s390/s390-64/multiarch/strcmp.c b/sysdeps/s390/s390-64/multiarch/strcmp.c deleted file mode 100644 index 6a20a304cc..0000000000 --- a/sysdeps/s390/s390-64/multiarch/strcmp.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Multiple versions of strcmp. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This wrapper-file is needed, because otherwise file - sysdeps/s390/s390-[32|64]/strcmp.S will be used. */ -#include diff --git a/sysdeps/s390/s390-64/multiarch/strcpy.c b/sysdeps/s390/s390-64/multiarch/strcpy.c deleted file mode 100644 index 7f380a471d..0000000000 --- a/sysdeps/s390/s390-64/multiarch/strcpy.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Multiple versions of strcpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This wrapper-file is needed, because otherwise file - sysdeps/s390/s390-[32|64]/strcpy.S will be used. */ -#include diff --git a/sysdeps/s390/s390-64/multiarch/strncpy.c b/sysdeps/s390/s390-64/multiarch/strncpy.c deleted file mode 100644 index 15dacec974..0000000000 --- a/sysdeps/s390/s390-64/multiarch/strncpy.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Multiple versions of strncpy. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This wrapper-file is needed, because otherwise file - sysdeps/s390/s390-[32|64]/strncpy.S will be used. */ -#include diff --git a/sysdeps/s390/s390-64/s390x-mcount.S b/sysdeps/s390/s390-64/s390x-mcount.S deleted file mode 100644 index 510834aa05..0000000000 --- a/sysdeps/s390/s390-64/s390x-mcount.S +++ /dev/null @@ -1,77 +0,0 @@ -/* 64 bit S/390-specific implementation of profiling support. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* How profiling works on 64 bit S/390: - On the start of each function _mcount is called with the address of a - data word in %r1 (initialized to 0, used for counting). The compiler - with the option -p generates code of the form: - - STM 6,15,24(15) - BRAS 13,.LTN0_0 - .LT0_0: - .LC13: .long .LP0 - .data - .align 4 - .LP0: .long 0 - .text - # function profiler - stg 14,4(15) - lg 1,.LC13-.LT0_0(13) - brasl 14,_mcount - lg 14,4(15) - - The _mcount implementation now has to call __mcount_internal with the - address of .LP0 as first parameter and the return address as second - parameter. &.LP0 was loaded to %r1 and the return address is in %r14. - _mcount may not modify any register. */ - - .globl C_SYMBOL_NAME(_mcount) - .type C_SYMBOL_NAME(_mcount), @function - cfi_startproc - .align ALIGNARG(4) -C_LABEL(_mcount) - /* Save the caller-clobbered registers. */ - aghi %r15,-224 - cfi_adjust_cfa_offset (224) - stmg %r14,%r5,160(%r15) - cfi_offset (r14, 0) - cfi_offset (r15, 8) - lg %r2,232(%r15) # callers address = first parameter - la %r2,0(%r2) # clear bit 0 - la %r3,0(%r14) # callees address = second parameter - -#ifdef PIC - brasl %r14,__mcount_internal@PLT -#else - brasl %r14,__mcount_internal -#endif - - /* Pop the saved registers. Please note that `mcount' has no - return value. */ - lmg %r14,%r5,160(%r15) - aghi %r15,224 - cfi_adjust_cfa_offset (-224) - br %r14 - cfi_endproc - ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount)) - -#undef mcount -weak_alias (_mcount, mcount) diff --git a/sysdeps/s390/s390-64/setjmp.S b/sysdeps/s390/s390-64/setjmp.S deleted file mode 100644 index ac9c878346..0000000000 --- a/sysdeps/s390/s390-64/setjmp.S +++ /dev/null @@ -1,118 +0,0 @@ -/* setjmp for 64 bit S/390, ELF version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ASM -#define _SETJMP_H -#include -#include -#include - -#if !IS_IN (rtld) && defined SHARED \ - && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) -# define NEED_COMPAT_SYMBOLS 1 -/* We need a unique name in case of symbol versioning. */ -# define setjmp __v1setjmp -# define _setjmp __v1_setjmp -# define __sigsetjmp __v1__sigsetjmp -#else -# define NEED_COMPAT_SYMBOLS 0 -#endif - - /* We include the BSD entry points here as well. */ -ENTRY (setjmp) - lghi %r3,1 /* Second argument of one. */ - j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */ -END (setjmp) - - /* Binary compatibility entry point. */ -ENTRY(_setjmp) - slgr %r3,%r3 /* Second argument of zero. */ - j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */ -END (_setjmp) -#if NEED_COMPAT_SYMBOLS -strong_alias (_setjmp, __GI__setjmp) -#else -libc_hidden_def (_setjmp) -#endif - -ENTRY(__setjmp) - slgr %r3,%r3 /* Second argument of zero. */ - j .Linternal_sigsetjmp /* Branch relativ to __sigsetjmp. */ -END (__setjmp) - -ENTRY(__sigsetjmp) -.Linternal_sigsetjmp: - /* setjmp probe expects sig/setjmp first argument (8@%r2), second - argument (-8@%r3) and target address (8@%r14). */ - LIBC_PROBE (setjmp, 3, 8@%r2, -4@%r3, 8@%r14) -#ifdef PTR_MANGLE - stmg %r6,%r13,0(%r2) /* Store registers in jmp_buf. */ - lgr %r4,%r14 - lgr %r5,%r15 - PTR_MANGLE (%r4, %r1) - PTR_MANGLE2 (%r5, %r1) - stmg %r4,%r5,64(%r2) -#else - stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */ -#endif - std %f8,80(%r2) - std %f9,88(%r2) - std %f10,96(%r2) - std %f11,104(%r2) - std %f12,112(%r2) - std %f13,120(%r2) - std %f14,128(%r2) - std %f15,136(%r2) -#if IS_IN (rtld) - /* In ld.so we never save the signal mask. */ - lghi %r2,0 - br %r14 -#elif defined PIC - jg __sigjmp_save@PLT /* Branch to PLT of __sigsetjmp. */ -#else - jg __sigjmp_save -#endif -END (__sigsetjmp) -#if NEED_COMPAT_SYMBOLS -strong_alias (__sigsetjmp, __GI___sigsetjmp) -#else -libc_hidden_def (__sigsetjmp) -#endif - -#if NEED_COMPAT_SYMBOLS -/* In glibc release 2.19 new versions of setjmp-functions were introduced, - but were reverted before 2.20. Thus both versions are the same function. */ - -# undef setjmp -# undef _setjmp -# undef __sigsetjmp - -strong_alias (__v1setjmp, __v2setjmp); -versioned_symbol (libc, __v1setjmp, setjmp, GLIBC_2_0); -compat_symbol (libc, __v2setjmp, setjmp, GLIBC_2_19); - -strong_alias (__v1_setjmp, __v2_setjmp); -versioned_symbol (libc, __v1_setjmp, _setjmp, GLIBC_2_0); -compat_symbol (libc, __v2_setjmp, _setjmp, GLIBC_2_19); - -strong_alias (__v1__sigsetjmp, __v2__sigsetjmp); -versioned_symbol (libc, __v1__sigsetjmp, __sigsetjmp, GLIBC_2_0); -compat_symbol (libc, __v2__sigsetjmp, __sigsetjmp, GLIBC_2_19); -#endif /* NEED_COMPAT_SYMBOLS */ diff --git a/sysdeps/s390/s390-64/stackguard-macros.h b/sysdeps/s390/s390-64/stackguard-macros.h deleted file mode 100644 index 2c97d3824f..0000000000 --- a/sysdeps/s390/s390-64/stackguard-macros.h +++ /dev/null @@ -1,18 +0,0 @@ -#include - -#define STACK_CHK_GUARD \ - ({ uintptr_t x; __asm__ ("ear %0,%%a0; sllg %0,%0,32; ear %0,%%a1; lg %0,0x28(%0)" : "=a" (x)); x; }) - -/* On s390/s390x there is no unique pointer guard, instead we use the - same value as the stack guard. */ -#define POINTER_CHK_GUARD \ - ({ \ - uintptr_t x; \ - __asm__ ("ear %0,%%a0;" \ - "sllg %0,%0,32;" \ - "ear %0,%%a1;" \ - "lg %0,%1(%0)" \ - : "=a" (x) \ - : "i" (offsetof (tcbhead_t, stack_guard))); \ - x; \ - }) diff --git a/sysdeps/s390/s390-64/start.S b/sysdeps/s390/s390-64/start.S deleted file mode 100644 index d8e65450d8..0000000000 --- a/sysdeps/s390/s390-64/start.S +++ /dev/null @@ -1,100 +0,0 @@ -/* Startup code compliant to the 64 bit S/390 ELF ABI. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - This is the canonical entry point, usually the first thing in the text - segment. Most registers' values are unspecified, except for: - - %r14 Contains a function pointer to be registered with `atexit'. - This is how the dynamic linker arranges to have DT_FINI - functions called for shared libraries that have been loaded - before this code runs. - - %r15 The stack contains the arguments and environment: - 0(%r15) argc - 8(%r15) argv[0] - ... - (8*argc)(%r15) NULL - (8*(argc+1))(%r15) envp[0] - ... - NULL -*/ - - .text - .globl _start - .type _start,@function -_start: - /* Load argc and argv from stack. */ - la %r4,8(%r15) # get argv - lg %r3,0(%r15) # get argc - - /* Align the stack to a double word boundary. */ - lghi %r0,-16 - ngr %r15,%r0 - - /* Setup a stack frame and a parameter area. */ - aghi %r15,-176 # make room on stack - xc 0(8,%r15),0(%r15) # clear back-chain - - /* Set up arguments for __libc_start_main: - main, argc, argv, envp, _init, _fini, rtld_fini, stack_end - Note that envp will be determined later in __libc_start_main. - */ - stmg %r14,%r15,160(%r15) # store rtld_fini/stack_end to parameter area - la %r7,160(%r15) - larl %r6,__libc_csu_fini # load pointer to __libc_csu_fini - larl %r5,__libc_csu_init # load pointer to __libc_csu_init - - /* Ok, now branch to the libc main routine. */ -#ifdef PIC - larl %r2,main@GOTENT # load pointer to main - lg %r2,0(%r2) - brasl %r14,__libc_start_main@plt -#else - larl %r2,main # load pointer to main - brasl %r14,__libc_start_main -#endif - - /* Crash if __libc_start_main returns. */ - .word 0 - - /* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start diff --git a/sysdeps/s390/s390-64/strcmp.S b/sysdeps/s390/s390-64/strcmp.S deleted file mode 100644 index 640493b4df..0000000000 --- a/sysdeps/s390/s390-64/strcmp.S +++ /dev/null @@ -1,41 +0,0 @@ -/* strcmp - compare two string. 64 bit S/390 version. - This file is part of the GNU C Library. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* INPUT PARAMETERS - %r2 = address of string 1 - %r3 = address of string 2. */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(strcmp) - slr %r0,%r0 -0: clst %r2,%r3 - jo 0b - jp 1f - jm 2f - slgr %r2,%r2 - br %r14 -1: lghi %r2,1 - br %r14 -2: lghi %r2,-1 - br %r14 -END(strcmp) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/s390/s390-64/strcpy.S b/sysdeps/s390/s390-64/strcpy.S deleted file mode 100644 index fee1d3ede6..0000000000 --- a/sysdeps/s390/s390-64/strcpy.S +++ /dev/null @@ -1,35 +0,0 @@ -/* strcpy - copy a string from source to destination. 64 bit S/390 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* INPUT PARAMETERS - %r2 = address of destination - %r3 = address of source. */ - -#include "sysdep.h" -#include "asm-syntax.h" - - .text -ENTRY(strcpy) - slgr %r0,%r0 - lgr %r1,%r2 -0: mvst %r1,%r3 - jo 0b - br %r14 -END(strcpy) -libc_hidden_builtin_def (strcpy) diff --git a/sysdeps/s390/s390-64/strncpy.S b/sysdeps/s390/s390-64/strncpy.S deleted file mode 100644 index 80aee312e4..0000000000 --- a/sysdeps/s390/s390-64/strncpy.S +++ /dev/null @@ -1,90 +0,0 @@ -/* strncpy - copy at most n characters from a string from source to - destination. 64 bit S/390 version - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* INPUT PARAMETERS - %r2 = address of destination (dst) - %r3 = address of source (src) - %r4 = max of bytes to copy. */ - -#include "sysdep.h" -#include "asm-syntax.h" - -ENTRY(strncpy) - .text - stg %r2,48(%r15) # save dst pointer - slgr %r2,%r3 # %r3 points to src, %r2+%r3 to dst - lghi %r1,7 - ngr %r1,%r4 # last 3 bits of # bytes - srlg %r4,%r4,3 - ltgr %r4,%r4 # less than 8 bytes to copy ? - jz .L1 - bras %r5,.L0 # enter loop & load address of a 0 - .long 0 -.L0: icmh %r0,8,0(%r3) # first byte - jz .L3 - icmh %r0,4,1(%r3) # second byte - jz .L4 - icmh %r0,2,2(%r3) # third byte - jz .L5 - icmh %r0,1,3(%r3) # fourth byte - jz .L6 - icm %r0,8,4(%r3) # fifth byte - jz .L7 - icm %r0,4,5(%r3) # sixth byte - jz .L8 - icm %r0,2,6(%r3) # seventh byte - jz .L9 - icm %r0,1,7(%r3) # eigth byte - jz .L10 - stg %r0,0(%r2,%r3) # store all eight to dest. - la %r3,8(%r3) - brct %r4,.L0 -.L1: ltgr %r1,%r1 - jz .Lexit -.L2: icm %r0,1,0(%r3) - stc %r0,0(%r2,%r3) - la %r3,1(%r3) - jz .L11 - brct %r1,.L2 - j .Lexit -.L3: icmh %r0,4,0(%r5) -.L4: icmh %r0,2,0(%r5) -.L5: icmh %r0,1,0(%r5) -.L6: icm %r0,8,0(%r5) -.L7: icm %r0,4,0(%r5) -.L8: icm %r0,2,0(%r5) -.L9: icm %r0,1,0(%r5) -.L10: stg %r0,0(%r2,%r3) - la %r3,8(%r3) - aghi %r4,-1 - j .L12 -.L11: aghi %r1,-1 -.L12: sllg %r4,%r4,3 - algr %r4,%r1 - algr %r2,%r3 # start of dst area to be zeroed - lgr %r3,%r4 - slgr %r4,%r4 - slgr %r5,%r5 -.L13: mvcle %r2,%r4,0 # pad dst with zeroes - jo .L13 -.Lexit: lg %r2,48(%r15) # return dst pointer - br %r14 -END(strncpy) -libc_hidden_builtin_def (strncpy) diff --git a/sysdeps/s390/s390-64/sub_n.S b/sysdeps/s390/s390-64/sub_n.S deleted file mode 100644 index dc6572ca36..0000000000 --- a/sysdeps/s390/s390-64/sub_n.S +++ /dev/null @@ -1,60 +0,0 @@ -/* __mpn_sub_n -- Add two limb vectors of the same length > 0 and store - sum in a third limb vector. 64 bit S/390 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU MP Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - see . */ - -/* INPUT PARAMETERS - %r2 = res_ptr - %r3 = s1_ptr - %r4 = s2_ptr - %r5 = size. */ - -#include "sysdep.h" -#include "asm-syntax.h" - -ENTRY(__mpn_sub_n) - stg %r6,48(%r15) # save register 6 - cfi_offset (%r6,-112) - sgr %r1,%r1 - lghi %r0,1 # cannot use ahi to add carry, use slr -.L0: lg %r6,0(%r1,%r3) # .L0 -> no carry from last sub - slg %r6,0(%r1,%r4) - stg %r6,0(%r1,%r2) - la %r1,8(%r1) - brc 4,.L3 -.L1: brct %r5,.L0 - slgr %r2,%r2 # no last carry to return - j .Lexit -.L2: lg %r6,0(%r1,%r3) # .L2 -> carry from last sub - slg %r6,0(%r1,%r4) - brc 4,.L4 - slgr %r6,%r0 # no carry yet, add carry from last sub - stg %r6,0(%r1,%r2) - la %r1,8(%r1) - brc 11,.L1 # new carry ? -.L3: brct %r5,.L2 - lgr %r2,%r0 # return last carry - j .Lexit -.L4: slgr %r6,%r0 # already a carry, add carry from last sub - stg %r6,0(%r1,%r2) - la %r1,8(%r1) - brct %r5,.L2 - lgr %r2,%r0 # return last carry -.Lexit: lg %r6,48(%r15) # restore register 6 - br %r14 -END(__mpn_sub_n) diff --git a/sysdeps/s390/s390-64/sysdep.h b/sysdeps/s390/s390-64/sysdep.h deleted file mode 100644 index a4dfc67178..0000000000 --- a/sysdeps/s390/s390-64/sysdep.h +++ /dev/null @@ -1,94 +0,0 @@ -/* Assembler macros for 64 bit S/390. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef __ASSEMBLER__ - -/* Syntactic details of assembler. */ - -/* ELF uses byte-counts for .align, most others use log2 of count of bytes. */ -#define ALIGNARG(log2) 1<. */ - -#define pltenter la_s390_64_gnu_pltenter -#define pltexit la_s390_64_gnu_pltexit -#define La_regs La_s390_64_regs -#define La_retval La_s390_64_retval -#define int_retval lrv_r2 diff --git a/sysdeps/s390/sotruss-lib.c b/sysdeps/s390/sotruss-lib.c deleted file mode 100644 index 2b9f1f31e6..0000000000 --- a/sysdeps/s390/sotruss-lib.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Override generic sotruss-lib.c to define actual functions for s390. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define HAVE_ARCH_PLTENTER -#define HAVE_ARCH_PLTEXIT - -#include - -#if __ELF_NATIVE_CLASS == 32 -# define la_s390_gnu_pltenter la_s390_32_gnu_pltenter -# define la_s390_gnu_pltexit la_s390_32_gnu_pltexit -# define La_s390_regs La_s390_32_regs -# define La_s390_retval La_s390_32_retval -#else -# define la_s390_gnu_pltenter la_s390_64_gnu_pltenter -# define la_s390_gnu_pltexit la_s390_64_gnu_pltexit -# define La_s390_regs La_s390_64_regs -# define La_s390_retval La_s390_64_retval -#endif - -ElfW(Addr) -la_s390_gnu_pltenter (ElfW(Sym) *sym, - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - La_s390_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - print_enter (refcook, defcook, symname, - regs->lr_r2, regs->lr_r3, regs->lr_r4, *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -la_s390_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, - const struct La_s390_regs *inregs, - struct La_s390_retval *outregs, const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_r2); - - return 0; -} diff --git a/sysdeps/s390/stackinfo.h b/sysdeps/s390/stackinfo.h deleted file mode 100644 index 39da94efff..0000000000 --- a/sysdeps/s390/stackinfo.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* On s390 the stack grows down. */ -#define _STACK_GROWS_DOWN 1 - -/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK is - * present, but it is presumed absent. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X) - -#endif /* stackinfo.h */ diff --git a/sysdeps/s390/string_private.h b/sysdeps/s390/string_private.h deleted file mode 100644 index 118db043f4..0000000000 --- a/sysdeps/s390/string_private.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Define _STRING_ARCH_unaligned. S/390 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The s390 processors can access unaligned multi-byte variables. */ -#define _STRING_ARCH_unaligned 1 diff --git a/sysdeps/s390/utf16-utf32-z9.c b/sysdeps/s390/utf16-utf32-z9.c deleted file mode 100644 index 7a174ea0e5..0000000000 --- a/sysdeps/s390/utf16-utf32-z9.c +++ /dev/null @@ -1,603 +0,0 @@ -/* Conversion between UTF-16 and UTF-32 BE/internal. - - This module uses the Z9-109 variants of the Convert Unicode - instructions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - - Author: Andreas Krebbel - Based on the work by Ulrich Drepper , 1997. - - Thanks to Daniel Appich who covered the relevant performance work - in his diploma thesis. - - This is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Select which versions should be defined depending on support - for multiarch, vector and used minimum architecture level. */ -#define HAVE_FROM_C 1 -#define FROM_LOOP_DEFAULT FROM_LOOP_C -#define HAVE_TO_C 1 -#define TO_LOOP_DEFAULT TO_LOOP_C - -#if defined HAVE_S390_VX_ASM_SUPPORT && defined USE_MULTIARCH -# define HAVE_FROM_VX 1 -# define HAVE_TO_VX 1 -#else -# define HAVE_FROM_VX 0 -# define HAVE_TO_VX 0 -#endif - -#if defined HAVE_S390_VX_GCC_SUPPORT -# define ASM_CLOBBER_VR(NR) , NR -#else -# define ASM_CLOBBER_VR(NR) -#endif - -#if defined __s390x__ -# define CONVERT_32BIT_SIZE_T(REG) -#else -# define CONVERT_32BIT_SIZE_T(REG) "llgfr %" #REG ",%" #REG "\n\t" -#endif - -/* UTF-32 big endian byte order mark. */ -#define BOM_UTF32 0x0000feffu - -/* UTF-16 big endian byte order mark. */ -#define BOM_UTF16 0xfeff - -#define DEFINE_INIT 0 -#define DEFINE_FINI 0 -#define MIN_NEEDED_FROM 2 -#define MAX_NEEDED_FROM 4 -#define MIN_NEEDED_TO 4 -#define FROM_LOOP FROM_LOOP_DEFAULT -#define TO_LOOP TO_LOOP_DEFAULT -#define FROM_DIRECTION (dir == from_utf16) -#define ONE_DIRECTION 0 - -/* Direction of the transformation. */ -enum direction -{ - illegal_dir, - to_utf16, - from_utf16 -}; - -struct utf16_data -{ - enum direction dir; - int emit_bom; -}; - - -extern int gconv_init (struct __gconv_step *step); -int -gconv_init (struct __gconv_step *step) -{ - /* Determine which direction. */ - struct utf16_data *new_data; - enum direction dir = illegal_dir; - int emit_bom; - int result; - - emit_bom = (__strcasecmp (step->__to_name, "UTF-32//") == 0 - || __strcasecmp (step->__to_name, "UTF-16//") == 0); - - if (__strcasecmp (step->__from_name, "UTF-16BE//") == 0 - && (__strcasecmp (step->__to_name, "UTF-32//") == 0 - || __strcasecmp (step->__to_name, "UTF-32BE//") == 0 - || __strcasecmp (step->__to_name, "INTERNAL") == 0)) - { - dir = from_utf16; - } - else if ((__strcasecmp (step->__to_name, "UTF-16//") == 0 - || __strcasecmp (step->__to_name, "UTF-16BE//") == 0) - && (__strcasecmp (step->__from_name, "UTF-32BE//") == 0 - || __strcasecmp (step->__from_name, "INTERNAL") == 0)) - { - dir = to_utf16; - } - - result = __GCONV_NOCONV; - if (dir != illegal_dir) - { - new_data = (struct utf16_data *) malloc (sizeof (struct utf16_data)); - - result = __GCONV_NOMEM; - if (new_data != NULL) - { - new_data->dir = dir; - new_data->emit_bom = emit_bom; - step->__data = new_data; - - if (dir == from_utf16) - { - step->__min_needed_from = MIN_NEEDED_FROM; - step->__max_needed_from = MIN_NEEDED_FROM; - step->__min_needed_to = MIN_NEEDED_TO; - step->__max_needed_to = MIN_NEEDED_TO; - } - else - { - step->__min_needed_from = MIN_NEEDED_TO; - step->__max_needed_from = MIN_NEEDED_TO; - step->__min_needed_to = MIN_NEEDED_FROM; - step->__max_needed_to = MIN_NEEDED_FROM; - } - - step->__stateful = 0; - - result = __GCONV_OK; - } - } - - return result; -} - - -extern void gconv_end (struct __gconv_step *data); -void -gconv_end (struct __gconv_step *data) -{ - free (data->__data); -} - -#define PREPARE_LOOP \ - enum direction dir = ((struct utf16_data *) step->__data)->dir; \ - int emit_bom = ((struct utf16_data *) step->__data)->emit_bom; \ - \ - if (emit_bom && !data->__internal_use \ - && data->__invocation_counter == 0) \ - { \ - if (dir == to_utf16) \ - { \ - /* Emit the UTF-16 Byte Order Mark. */ \ - if (__glibc_unlikely (outbuf + 2 > outend)) \ - return __GCONV_FULL_OUTPUT; \ - \ - put16u (outbuf, BOM_UTF16); \ - outbuf += 2; \ - } \ - else \ - { \ - /* Emit the UTF-32 Byte Order Mark. */ \ - if (__glibc_unlikely (outbuf + 4 > outend)) \ - return __GCONV_FULL_OUTPUT; \ - \ - put32u (outbuf, BOM_UTF32); \ - outbuf += 4; \ - } \ - } - -/* Conversion function from UTF-16 to UTF-32 internal/BE. */ - -#if HAVE_FROM_C == 1 -/* The software routine is copied from utf-16.c (minus bytes - swapping). */ -# define BODY_FROM_C \ - { \ - uint16_t u1 = get16 (inptr); \ - \ - if (__builtin_expect (u1 < 0xd800, 1) || u1 > 0xdfff) \ - { \ - /* No surrogate. */ \ - put32 (outptr, u1); \ - inptr += 2; \ - } \ - else \ - { \ - /* An isolated low-surrogate was found. This has to be \ - considered ill-formed. */ \ - if (__glibc_unlikely (u1 >= 0xdc00)) \ - { \ - STANDARD_FROM_LOOP_ERR_HANDLER (2); \ - } \ - /* It's a surrogate character. At least the first word says \ - it is. */ \ - if (__glibc_unlikely (inptr + 4 > inend)) \ - { \ - /* We don't have enough input for another complete input \ - character. */ \ - result = __GCONV_INCOMPLETE_INPUT; \ - break; \ - } \ - \ - inptr += 2; \ - uint16_t u2 = get16 (inptr); \ - if (__builtin_expect (u2 < 0xdc00, 0) \ - || __builtin_expect (u2 > 0xdfff, 0)) \ - { \ - /* This is no valid second word for a surrogate. */ \ - inptr -= 2; \ - STANDARD_FROM_LOOP_ERR_HANDLER (2); \ - } \ - \ - put32 (outptr, ((u1 - 0xd7c0) << 10) + (u2 - 0xdc00)); \ - inptr += 2; \ - } \ - outptr += 4; \ - } - - -/* Generate loop-function with software routing. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_FROM -# define MAX_NEEDED_INPUT MAX_NEEDED_FROM -# define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -# define FROM_LOOP_C __from_utf16_loop_c -# define LOOPFCT FROM_LOOP_C -# define LOOP_NEED_FLAGS -# define BODY BODY_FROM_C -# include -#else -# define FROM_LOOP_C NULL -#endif /* HAVE_FROM_C != 1 */ - -#if HAVE_FROM_VX == 1 -# define BODY_FROM_VX \ - { \ - size_t inlen = inend - inptr; \ - size_t outlen = outend - outptr; \ - unsigned long tmp, tmp2, tmp3; \ - asm volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - /* Setup to check for surrogates. */ \ - " larl %[R_TMP],9f\n\t" \ - " vlm %%v30,%%v31,0(%[R_TMP])\n\t" \ - CONVERT_32BIT_SIZE_T ([R_INLEN]) \ - CONVERT_32BIT_SIZE_T ([R_OUTLEN]) \ - /* Loop which handles UTF-16 chars <0xd800, >0xdfff. */ \ - "0: clgijl %[R_INLEN],16,2f\n\t" \ - " clgijl %[R_OUTLEN],32,2f\n\t" \ - "1: vl %%v16,0(%[R_IN])\n\t" \ - /* Check for surrogate chars. */ \ - " vstrchs %%v19,%%v16,%%v30,%%v31\n\t" \ - " jno 10f\n\t" \ - /* Enlarge to UTF-32. */ \ - " vuplhh %%v17,%%v16\n\t" \ - " la %[R_IN],16(%[R_IN])\n\t" \ - " vupllh %%v18,%%v16\n\t" \ - " aghi %[R_INLEN],-16\n\t" \ - /* Store 32 bytes to buf_out. */ \ - " vstm %%v17,%%v18,0(%[R_OUT])\n\t" \ - " aghi %[R_OUTLEN],-32\n\t" \ - " la %[R_OUT],32(%[R_OUT])\n\t" \ - " clgijl %[R_INLEN],16,2f\n\t" \ - " clgijl %[R_OUTLEN],32,2f\n\t" \ - " j 1b\n\t" \ - /* Setup to check for ch >= 0xd800 && ch <= 0xdfff. (v30, v31) */ \ - "9: .short 0xd800,0xdfff,0x0,0x0,0x0,0x0,0x0,0x0\n\t" \ - " .short 0xa000,0xc000,0x0,0x0,0x0,0x0,0x0,0x0\n\t" \ - /* At least one uint16_t is in range of surrogates. \ - Store the preceding chars. */ \ - "10: vlgvb %[R_TMP],%%v19,7\n\t" \ - " vuplhh %%v17,%%v16\n\t" \ - " sllg %[R_TMP3],%[R_TMP],1\n\t" /* Number of out bytes. */ \ - " ahik %[R_TMP2],%[R_TMP3],-1\n\t" /* Highest index to store. */ \ - " jl 12f\n\t" \ - " vstl %%v17,%[R_TMP2],0(%[R_OUT])\n\t" \ - " vupllh %%v18,%%v16\n\t" \ - " ahi %[R_TMP2],-16\n\t" \ - " jl 11f\n\t" \ - " vstl %%v18,%[R_TMP2],16(%[R_OUT])\n\t" \ - "11: \n\t" /* Update pointers. */ \ - " la %[R_IN],0(%[R_TMP],%[R_IN])\n\t" \ - " slgr %[R_INLEN],%[R_TMP]\n\t" \ - " la %[R_OUT],0(%[R_TMP3],%[R_OUT])\n\t" \ - " slgr %[R_OUTLEN],%[R_TMP3]\n\t" \ - /* Calculate remaining uint16_t values in loaded vrs. */ \ - "12: lghi %[R_TMP2],16\n\t" \ - " slgr %[R_TMP2],%[R_TMP]\n\t" \ - " srl %[R_TMP2],1\n\t" \ - " llh %[R_TMP],0(%[R_IN])\n\t" \ - " aghi %[R_OUTLEN],-4\n\t" \ - " j 16f\n\t" \ - /* Handle remaining bytes. */ \ - "2: \n\t" \ - /* Zero, one or more bytes available? */ \ - " clgfi %[R_INLEN],1\n\t" \ - " je 97f\n\t" /* Only one byte available. */ \ - " jl 99f\n\t" /* End if no bytes available. */ \ - /* Calculate remaining uint16_t values in inptr. */ \ - " srlg %[R_TMP2],%[R_INLEN],1\n\t" \ - /* Handle remaining uint16_t values. */ \ - "13: llh %[R_TMP],0(%[R_IN])\n\t" \ - " slgfi %[R_OUTLEN],4\n\t" \ - " jl 96f \n\t" \ - " clfi %[R_TMP],0xd800\n\t" \ - " jhe 15f\n\t" \ - "14: st %[R_TMP],0(%[R_OUT])\n\t" \ - " la %[R_IN],2(%[R_IN])\n\t" \ - " aghi %[R_INLEN],-2\n\t" \ - " la %[R_OUT],4(%[R_OUT])\n\t" \ - " brctg %[R_TMP2],13b\n\t" \ - " j 0b\n\t" /* Switch to vx-loop. */ \ - /* Handle UTF-16 surrogate pair. */ \ - "15: clfi %[R_TMP],0xdfff\n\t" \ - " jh 14b\n\t" /* Jump away if ch > 0xdfff. */ \ - "16: clfi %[R_TMP],0xdc00\n\t" \ - " jhe 98f\n\t" /* Jump away in case of low-surrogate. */ \ - " slgfi %[R_INLEN],4\n\t" \ - " jl 97f\n\t" /* Big enough input? */ \ - " llh %[R_TMP3],2(%[R_IN])\n\t" /* Load low surrogate. */ \ - " slfi %[R_TMP],0xd7c0\n\t" \ - " sll %[R_TMP],10\n\t" \ - " risbgn %[R_TMP],%[R_TMP3],54,63,0\n\t" /* Insert klmnopqrst. */ \ - " nilf %[R_TMP3],0xfc00\n\t" \ - " clfi %[R_TMP3],0xdc00\n\t" /* Check if it starts with 0xdc00. */ \ - " jne 98f\n\t" \ - " st %[R_TMP],0(%[R_OUT])\n\t" \ - " la %[R_IN],4(%[R_IN])\n\t" \ - " la %[R_OUT],4(%[R_OUT])\n\t" \ - " aghi %[R_TMP2],-2\n\t" \ - " jh 13b\n\t" /* Handle remaining uint16_t values. */ \ - " j 0b\n\t" /* Switch to vx-loop. */ \ - "96: \n\t" /* Return full output. */ \ - " lghi %[R_RES],%[RES_OUT_FULL]\n\t" \ - " j 99f\n\t" \ - "97: \n\t" /* Return incomplete input. */ \ - " lghi %[R_RES],%[RES_IN_FULL]\n\t" \ - " j 99f\n\t" \ - "98:\n\t" /* Return Illegal character. */ \ - " lghi %[R_RES],%[RES_IN_ILL]\n\t" \ - "99:\n\t" \ - ".machine pop" \ - : /* outputs */ [R_IN] "+a" (inptr) \ - , [R_INLEN] "+d" (inlen), [R_OUT] "+a" (outptr) \ - , [R_OUTLEN] "+d" (outlen), [R_TMP] "=a" (tmp) \ - , [R_TMP2] "=d" (tmp2), [R_TMP3] "=a" (tmp3) \ - , [R_RES] "+d" (result) \ - : /* inputs */ \ - [RES_OUT_FULL] "i" (__GCONV_FULL_OUTPUT) \ - , [RES_IN_ILL] "i" (__GCONV_ILLEGAL_INPUT) \ - , [RES_IN_FULL] "i" (__GCONV_INCOMPLETE_INPUT) \ - : /* clobber list */ "memory", "cc" \ - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v17") \ - ASM_CLOBBER_VR ("v18") ASM_CLOBBER_VR ("v19") \ - ASM_CLOBBER_VR ("v30") ASM_CLOBBER_VR ("v31") \ - ); \ - if (__glibc_likely (inptr == inend) \ - || result != __GCONV_ILLEGAL_INPUT) \ - break; \ - \ - STANDARD_FROM_LOOP_ERR_HANDLER (2); \ - } - - -/* Generate loop-function with hardware vector instructions. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_FROM -# define MAX_NEEDED_INPUT MAX_NEEDED_FROM -# define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -# define FROM_LOOP_VX __from_utf16_loop_vx -# define LOOPFCT FROM_LOOP_VX -# define LOOP_NEED_FLAGS -# define BODY BODY_FROM_VX -# include -#else -# define FROM_LOOP_VX NULL -#endif /* HAVE_FROM_VX != 1 */ - - -/* Conversion from UTF-32 internal/BE to UTF-16. */ - -#if HAVE_TO_C == 1 -/* The software routine is copied from utf-16.c (minus bytes - swapping). */ -# define BODY_TO_C \ - { \ - uint32_t c = get32 (inptr); \ - \ - if (__builtin_expect (c <= 0xd7ff, 1) \ - || (c > 0xdfff && c <= 0xffff)) \ - { \ - /* Two UTF-16 chars. */ \ - put16 (outptr, c); \ - } \ - else if (__builtin_expect (c >= 0x10000, 1) \ - && __builtin_expect (c <= 0x10ffff, 1)) \ - { \ - /* Four UTF-16 chars. */ \ - uint16_t zabcd = ((c & 0x1f0000) >> 16) - 1; \ - uint16_t out; \ - \ - /* Generate a surrogate character. */ \ - if (__glibc_unlikely (outptr + 4 > outend)) \ - { \ - /* Overflow in the output buffer. */ \ - result = __GCONV_FULL_OUTPUT; \ - break; \ - } \ - \ - out = 0xd800; \ - out |= (zabcd & 0xff) << 6; \ - out |= (c >> 10) & 0x3f; \ - put16 (outptr, out); \ - outptr += 2; \ - \ - out = 0xdc00; \ - out |= c & 0x3ff; \ - put16 (outptr, out); \ - } \ - else \ - { \ - STANDARD_TO_LOOP_ERR_HANDLER (4); \ - } \ - outptr += 2; \ - inptr += 4; \ - } - -/* Generate loop-function with software routing. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_TO -# define MIN_NEEDED_OUTPUT MIN_NEEDED_FROM -# define MAX_NEEDED_OUTPUT MAX_NEEDED_FROM -# define TO_LOOP_C __to_utf16_loop_c -# define LOOPFCT TO_LOOP_C -# define LOOP_NEED_FLAGS -# define BODY BODY_TO_C -# include -#else -# define TO_LOOP_C NULL -#endif /* HAVE_TO_C != 1 */ - -#if HAVE_TO_VX == 1 -# define BODY_TO_VX \ - { \ - size_t inlen = inend - inptr; \ - size_t outlen = outend - outptr; \ - unsigned long tmp, tmp2, tmp3; \ - asm volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - /* Setup to check for surrogates. */ \ - " larl %[R_TMP],9f\n\t" \ - " vlm %%v30,%%v31,0(%[R_TMP])\n\t" \ - CONVERT_32BIT_SIZE_T ([R_INLEN]) \ - CONVERT_32BIT_SIZE_T ([R_OUTLEN]) \ - /* Loop which handles UTF-16 chars \ - ch < 0xd800 || (ch > 0xdfff && ch < 0x10000). */ \ - "0: clgijl %[R_INLEN],32,2f\n\t" \ - " clgijl %[R_OUTLEN],16,2f\n\t" \ - "1: vlm %%v16,%%v17,0(%[R_IN])\n\t" \ - " lghi %[R_TMP2],0\n\t" \ - /* Shorten to UTF-16. */ \ - " vpkf %%v18,%%v16,%%v17\n\t" \ - /* Check for surrogate chars. */ \ - " vstrcfs %%v19,%%v16,%%v30,%%v31\n\t" \ - " jno 10f\n\t" \ - " vstrcfs %%v19,%%v17,%%v30,%%v31\n\t" \ - " jno 11f\n\t" \ - /* Store 16 bytes to buf_out. */ \ - " vst %%v18,0(%[R_OUT])\n\t" \ - " la %[R_IN],32(%[R_IN])\n\t" \ - " aghi %[R_INLEN],-32\n\t" \ - " aghi %[R_OUTLEN],-16\n\t" \ - " la %[R_OUT],16(%[R_OUT])\n\t" \ - " clgijl %[R_INLEN],32,2f\n\t" \ - " clgijl %[R_OUTLEN],16,2f\n\t" \ - " j 1b\n\t" \ - /* Calculate remaining uint32_t values in inptr. */ \ - "2: \n\t" \ - " clgije %[R_INLEN],0,99f\n\t" \ - " clgijl %[R_INLEN],4,92f\n\t" \ - " srlg %[R_TMP2],%[R_INLEN],2\n\t" \ - " j 20f\n\t" \ - /* Setup to check for ch >= 0xd800 && ch <= 0xdfff \ - and check for ch >= 0x10000. (v30, v31) */ \ - "9: .long 0xd800,0xdfff,0x10000,0x10000\n\t" \ - " .long 0xa0000000,0xc0000000, 0xa0000000,0xa0000000\n\t" \ - /* At least on UTF32 char is in range of surrogates. \ - Store the preceding characters. */ \ - "11: ahi %[R_TMP2],16\n\t" \ - "10: vlgvb %[R_TMP],%%v19,7\n\t" \ - " agr %[R_TMP],%[R_TMP2]\n\t" \ - " srlg %[R_TMP3],%[R_TMP],1\n\t" /* Number of out bytes. */ \ - " ahik %[R_TMP2],%[R_TMP3],-1\n\t" /* Highest index to store. */ \ - " jl 12f\n\t" \ - " vstl %%v18,%[R_TMP2],0(%[R_OUT])\n\t" \ - /* Update pointers. */ \ - " la %[R_IN],0(%[R_TMP],%[R_IN])\n\t" \ - " slgr %[R_INLEN],%[R_TMP]\n\t" \ - " la %[R_OUT],0(%[R_TMP3],%[R_OUT])\n\t" \ - " slgr %[R_OUTLEN],%[R_TMP3]\n\t" \ - /* Calculate remaining uint32_t values in vrs. */ \ - "12: lghi %[R_TMP2],8\n\t" \ - " srlg %[R_TMP3],%[R_TMP3],1\n\t" \ - " slgr %[R_TMP2],%[R_TMP3]\n\t" \ - /* Handle remaining UTF-32 characters. */ \ - "20: l %[R_TMP],0(%[R_IN])\n\t" \ - " aghi %[R_INLEN],-4\n\t" \ - /* Test if ch is 2byte UTF-16 char. */ \ - " clfi %[R_TMP],0xffff\n\t" \ - " jh 21f\n\t" \ - /* Handle 2 byte UTF16 char. */ \ - " lgr %[R_TMP3],%[R_TMP]\n\t" \ - " nilf %[R_TMP],0xf800\n\t" \ - " clfi %[R_TMP],0xd800\n\t" \ - " je 91f\n\t" /* Do not accept UTF-16 surrogates. */ \ - " slgfi %[R_OUTLEN],2\n\t" \ - " jl 90f \n\t" \ - " sth %[R_TMP3],0(%[R_OUT])\n\t" \ - " la %[R_IN],4(%[R_IN])\n\t" \ - " la %[R_OUT],2(%[R_OUT])\n\t" \ - " brctg %[R_TMP2],20b\n\t" \ - " j 0b\n\t" /* Switch to vx-loop. */ \ - /* Test if ch is 4byte UTF-16 char. */ \ - "21: clfi %[R_TMP],0x10ffff\n\t" \ - " jh 91f\n\t" /* ch > 0x10ffff is not allowed! */ \ - /* Handle 4 byte UTF16 char. */ \ - " slgfi %[R_OUTLEN],4\n\t" \ - " jl 90f \n\t" \ - " slfi %[R_TMP],0x10000\n\t" /* zabcd = uvwxy - 1. */ \ - " llilf %[R_TMP3],0xd800dc00\n\t" \ - " la %[R_IN],4(%[R_IN])\n\t" \ - " risbgn %[R_TMP3],%[R_TMP],38,47,6\n\t" /* High surrogate. */ \ - " risbgn %[R_TMP3],%[R_TMP],54,63,0\n\t" /* Low surrogate. */ \ - " st %[R_TMP3],0(%[R_OUT])\n\t" \ - " la %[R_OUT],4(%[R_OUT])\n\t" \ - " brctg %[R_TMP2],20b\n\t" \ - " j 0b\n\t" /* Switch to vx-loop. */ \ - "92: lghi %[R_RES],%[RES_IN_FULL]\n\t" \ - " j 99f\n\t" \ - "91: lghi %[R_RES],%[RES_IN_ILL]\n\t" \ - " j 99f\n\t" \ - "90: lghi %[R_RES],%[RES_OUT_FULL]\n\t" \ - "99: \n\t" \ - ".machine pop" \ - : /* outputs */ [R_IN] "+a" (inptr) \ - , [R_INLEN] "+d" (inlen), [R_OUT] "+a" (outptr) \ - , [R_OUTLEN] "+d" (outlen), [R_TMP] "=a" (tmp) \ - , [R_TMP2] "=d" (tmp2), [R_TMP3] "=a" (tmp3) \ - , [R_RES] "+d" (result) \ - : /* inputs */ \ - [RES_OUT_FULL] "i" (__GCONV_FULL_OUTPUT) \ - , [RES_IN_ILL] "i" (__GCONV_ILLEGAL_INPUT) \ - , [RES_IN_FULL] "i" (__GCONV_INCOMPLETE_INPUT) \ - : /* clobber list */ "memory", "cc" \ - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v17") \ - ASM_CLOBBER_VR ("v18") ASM_CLOBBER_VR ("v19") \ - ASM_CLOBBER_VR ("v30") ASM_CLOBBER_VR ("v31") \ - ); \ - if (__glibc_likely (inptr == inend) \ - || result != __GCONV_ILLEGAL_INPUT) \ - break; \ - \ - STANDARD_TO_LOOP_ERR_HANDLER (4); \ - } - -/* Generate loop-function with hardware vector instructions. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_TO -# define MIN_NEEDED_OUTPUT MIN_NEEDED_FROM -# define MAX_NEEDED_OUTPUT MAX_NEEDED_FROM -# define TO_LOOP_VX __to_utf16_loop_vx -# define LOOPFCT TO_LOOP_VX -# define LOOP_NEED_FLAGS -# define BODY BODY_TO_VX -# include -#else -# define TO_LOOP_VX NULL -#endif /* HAVE_TO_VX != 1 */ - -/* This file also exists in sysdeps/s390/multiarch/ which - generates ifunc resolvers for FROM/TO_LOOP functions - and includes iconv/skeleton.c afterwards. */ -#if ! defined USE_MULTIARCH -# include -#endif diff --git a/sysdeps/s390/utf8-utf16-z9.c b/sysdeps/s390/utf8-utf16-z9.c deleted file mode 100644 index 42163e7a19..0000000000 --- a/sysdeps/s390/utf8-utf16-z9.c +++ /dev/null @@ -1,825 +0,0 @@ -/* Conversion between UTF-8 and UTF-16 - s390 version. - - This module uses the Z9-109 variants of the Convert Unicode - instructions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - - Author: Andreas Krebbel - Based on the work by Ulrich Drepper , 1997. - - Thanks to Daniel Appich who covered the relevant performance work - in his diploma thesis. - - This is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Select which versions should be defined depending on support - for multiarch, vector and used minimum architecture level. */ -#ifdef HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT -# define HAVE_FROM_C 0 -# define FROM_LOOP_DEFAULT FROM_LOOP_CU -#else -# define HAVE_FROM_C 1 -# define FROM_LOOP_DEFAULT FROM_LOOP_C -#endif - -#define HAVE_TO_C 1 -#define TO_LOOP_DEFAULT TO_LOOP_C - -#if defined HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT || defined USE_MULTIARCH -# define HAVE_FROM_CU 1 -#else -# define HAVE_FROM_CU 0 -#endif - -#if defined HAVE_S390_VX_ASM_SUPPORT && defined USE_MULTIARCH -# define HAVE_FROM_VX 1 -# define HAVE_TO_VX 1 -#else -# define HAVE_FROM_VX 0 -# define HAVE_TO_VX 0 -#endif - -#if defined HAVE_S390_VX_GCC_SUPPORT -# define ASM_CLOBBER_VR(NR) , NR -#else -# define ASM_CLOBBER_VR(NR) -#endif - -#if defined __s390x__ -# define CONVERT_32BIT_SIZE_T(REG) -#else -# define CONVERT_32BIT_SIZE_T(REG) "llgfr %" #REG ",%" #REG "\n\t" -#endif - -/* Defines for skeleton.c. */ -#define DEFINE_INIT 0 -#define DEFINE_FINI 0 -#define MIN_NEEDED_FROM 1 -#define MAX_NEEDED_FROM 4 -#define MIN_NEEDED_TO 2 -#define MAX_NEEDED_TO 4 -#define FROM_LOOP FROM_LOOP_DEFAULT -#define TO_LOOP TO_LOOP_DEFAULT -#define FROM_DIRECTION (dir == from_utf8) -#define ONE_DIRECTION 0 - - -/* UTF-16 big endian byte order mark. */ -#define BOM_UTF16 0xfeff - -/* Direction of the transformation. */ -enum direction -{ - illegal_dir, - to_utf8, - from_utf8 -}; - -struct utf8_data -{ - enum direction dir; - int emit_bom; -}; - - -extern int gconv_init (struct __gconv_step *step); -int -gconv_init (struct __gconv_step *step) -{ - /* Determine which direction. */ - struct utf8_data *new_data; - enum direction dir = illegal_dir; - int emit_bom; - int result; - - emit_bom = (__strcasecmp (step->__to_name, "UTF-16//") == 0); - - if (__strcasecmp (step->__from_name, "ISO-10646/UTF8/") == 0 - && (__strcasecmp (step->__to_name, "UTF-16//") == 0 - || __strcasecmp (step->__to_name, "UTF-16BE//") == 0)) - { - dir = from_utf8; - } - else if (__strcasecmp (step->__from_name, "UTF-16BE//") == 0 - && __strcasecmp (step->__to_name, "ISO-10646/UTF8/") == 0) - { - dir = to_utf8; - } - - result = __GCONV_NOCONV; - if (dir != illegal_dir) - { - new_data = (struct utf8_data *) malloc (sizeof (struct utf8_data)); - - result = __GCONV_NOMEM; - if (new_data != NULL) - { - new_data->dir = dir; - new_data->emit_bom = emit_bom; - step->__data = new_data; - - if (dir == from_utf8) - { - step->__min_needed_from = MIN_NEEDED_FROM; - step->__max_needed_from = MIN_NEEDED_FROM; - step->__min_needed_to = MIN_NEEDED_TO; - step->__max_needed_to = MIN_NEEDED_TO; - } - else - { - step->__min_needed_from = MIN_NEEDED_TO; - step->__max_needed_from = MIN_NEEDED_TO; - step->__min_needed_to = MIN_NEEDED_FROM; - step->__max_needed_to = MIN_NEEDED_FROM; - } - - step->__stateful = 0; - - result = __GCONV_OK; - } - } - - return result; -} - - -extern void gconv_end (struct __gconv_step *data); -void -gconv_end (struct __gconv_step *data) -{ - free (data->__data); -} - -/* The macro for the hardware loop. This is used for both - directions. */ -#define HARDWARE_CONVERT(INSTRUCTION) \ - { \ - register const unsigned char* pInput __asm__ ("8") = inptr; \ - register size_t inlen __asm__ ("9") = inend - inptr; \ - register unsigned char* pOutput __asm__ ("10") = outptr; \ - register size_t outlen __asm__("11") = outend - outptr; \ - unsigned long cc = 0; \ - \ - __asm__ __volatile__ (".machine push \n\t" \ - ".machine \"z9-109\" \n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - "0: " INSTRUCTION " \n\t" \ - ".machine pop \n\t" \ - " jo 0b \n\t" \ - " ipm %2 \n" \ - : "+a" (pOutput), "+a" (pInput), "+d" (cc), \ - "+d" (outlen), "+d" (inlen) \ - : \ - : "cc", "memory"); \ - \ - inptr = pInput; \ - outptr = pOutput; \ - cc >>= 28; \ - \ - if (cc == 1) \ - { \ - result = __GCONV_FULL_OUTPUT; \ - } \ - else if (cc == 2) \ - { \ - result = __GCONV_ILLEGAL_INPUT; \ - } \ - } - -#define PREPARE_LOOP \ - enum direction dir = ((struct utf8_data *) step->__data)->dir; \ - int emit_bom = ((struct utf8_data *) step->__data)->emit_bom; \ - \ - if (emit_bom && !data->__internal_use \ - && data->__invocation_counter == 0) \ - { \ - /* Emit the UTF-16 Byte Order Mark. */ \ - if (__glibc_unlikely (outbuf + 2 > outend)) \ - return __GCONV_FULL_OUTPUT; \ - \ - put16u (outbuf, BOM_UTF16); \ - outbuf += 2; \ - } - -/* Conversion function from UTF-8 to UTF-16. */ -#define BODY_FROM_HW(ASM) \ - { \ - ASM; \ - if (__glibc_likely (inptr == inend) \ - || result == __GCONV_FULL_OUTPUT) \ - break; \ - \ - int i; \ - for (i = 1; inptr + i < inend && i < 5; ++i) \ - if ((inptr[i] & 0xc0) != 0x80) \ - break; \ - \ - if (__glibc_likely (inptr + i == inend \ - && result == __GCONV_EMPTY_INPUT)) \ - { \ - result = __GCONV_INCOMPLETE_INPUT; \ - break; \ - } \ - STANDARD_FROM_LOOP_ERR_HANDLER (i); \ - } - -#if HAVE_FROM_VX == 1 -# define HW_FROM_VX \ - { \ - register const unsigned char* pInput asm ("8") = inptr; \ - register size_t inlen asm ("9") = inend - inptr; \ - register unsigned char* pOutput asm ("10") = outptr; \ - register size_t outlen asm("11") = outend - outptr; \ - unsigned long tmp, tmp2, tmp3; \ - asm volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - " vrepib %%v30,0x7f\n\t" /* For compare > 0x7f. */ \ - " vrepib %%v31,0x20\n\t" \ - CONVERT_32BIT_SIZE_T ([R_INLEN]) \ - CONVERT_32BIT_SIZE_T ([R_OUTLEN]) \ - /* Loop which handles UTF-8 chars <=0x7f. */ \ - "0: clgijl %[R_INLEN],16,20f\n\t" \ - " clgijl %[R_OUTLEN],32,20f\n\t" \ - "1: vl %%v16,0(%[R_IN])\n\t" \ - " vstrcbs %%v17,%%v16,%%v30,%%v31\n\t" \ - " jno 10f\n\t" /* Jump away if not all bytes are 1byte \ - UTF8 chars. */ \ - /* Enlarge to UTF-16. */ \ - " vuplhb %%v18,%%v16\n\t" \ - " la %[R_IN],16(%[R_IN])\n\t" \ - " vupllb %%v19,%%v16\n\t" \ - " aghi %[R_INLEN],-16\n\t" \ - /* Store 32 bytes to buf_out. */ \ - " vstm %%v18,%%v19,0(%[R_OUT])\n\t" \ - " aghi %[R_OUTLEN],-32\n\t" \ - " la %[R_OUT],32(%[R_OUT])\n\t" \ - " clgijl %[R_INLEN],16,20f\n\t" \ - " clgijl %[R_OUTLEN],32,20f\n\t" \ - " j 1b\n\t" \ - "10:\n\t" \ - /* At least one byte is > 0x7f. \ - Store the preceding 1-byte chars. */ \ - " vlgvb %[R_TMP],%%v17,7\n\t" \ - " sllk %[R_TMP2],%[R_TMP],1\n\t" /* Compute highest \ - index to store. */ \ - " llgfr %[R_TMP3],%[R_TMP2]\n\t" \ - " ahi %[R_TMP2],-1\n\t" \ - " jl 20f\n\t" \ - " vuplhb %%v18,%%v16\n\t" \ - " vstl %%v18,%[R_TMP2],0(%[R_OUT])\n\t" \ - " ahi %[R_TMP2],-16\n\t" \ - " jl 11f\n\t" \ - " vupllb %%v19,%%v16\n\t" \ - " vstl %%v19,%[R_TMP2],16(%[R_OUT])\n\t" \ - "11: \n\t" /* Update pointers. */ \ - " la %[R_IN],0(%[R_TMP],%[R_IN])\n\t" \ - " slgr %[R_INLEN],%[R_TMP]\n\t" \ - " la %[R_OUT],0(%[R_TMP3],%[R_OUT])\n\t" \ - " slgr %[R_OUTLEN],%[R_TMP3]\n\t" \ - /* Handle multibyte utf8-char with convert instruction. */ \ - "20: cu12 %[R_OUT],%[R_IN],1\n\t" \ - " jo 0b\n\t" /* Try vector implemenation again. */ \ - " lochil %[R_RES],%[RES_OUT_FULL]\n\t" /* cc == 1. */ \ - " lochih %[R_RES],%[RES_IN_ILL]\n\t" /* cc == 2. */ \ - ".machine pop" \ - : /* outputs */ [R_IN] "+a" (pInput) \ - , [R_INLEN] "+d" (inlen), [R_OUT] "+a" (pOutput) \ - , [R_OUTLEN] "+d" (outlen), [R_TMP] "=a" (tmp) \ - , [R_TMP2] "=d" (tmp2), [R_TMP3] "=a" (tmp3) \ - , [R_RES] "+d" (result) \ - : /* inputs */ \ - [RES_OUT_FULL] "i" (__GCONV_FULL_OUTPUT) \ - , [RES_IN_ILL] "i" (__GCONV_ILLEGAL_INPUT) \ - : /* clobber list */ "memory", "cc" \ - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v17") \ - ASM_CLOBBER_VR ("v18") ASM_CLOBBER_VR ("v19") \ - ASM_CLOBBER_VR ("v30") ASM_CLOBBER_VR ("v31") \ - ); \ - inptr = pInput; \ - outptr = pOutput; \ - } -# define BODY_FROM_VX BODY_FROM_HW (HW_FROM_VX) - -/* Generate loop-function with hardware vector and utf-convert instructions. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_FROM -# define MAX_NEEDED_INPUT MAX_NEEDED_FROM -# define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -# define MAX_NEEDED_OUTPUT MAX_NEEDED_TO -# define FROM_LOOP_VX __from_utf8_loop_vx -# define LOOPFCT FROM_LOOP_VX -# define LOOP_NEED_FLAGS -# define BODY BODY_FROM_VX -# include -#else -# define FROM_LOOP_VX NULL -#endif /* HAVE_FROM_VX != 1 */ - -#if HAVE_FROM_CU == 1 -# define BODY_FROM_ETF3EH BODY_FROM_HW (HARDWARE_CONVERT ("cu12 %0, %1, 1")) - -/* Generate loop-function with hardware utf-convert instruction. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_FROM -# define MAX_NEEDED_INPUT MAX_NEEDED_FROM -# define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -# define MAX_NEEDED_OUTPUT MAX_NEEDED_TO -# define FROM_LOOP_CU __from_utf8_loop_etf3eh -# define LOOPFCT FROM_LOOP_CU -# define LOOP_NEED_FLAGS -# define BODY BODY_FROM_ETF3EH -# include -#else -# define FROM_LOOP_CU NULL -#endif /* HAVE_FROM_CU != 1 */ - -#if HAVE_FROM_C == 1 -/* The software implementation is based on the code in gconv_simple.c. */ -# define BODY_FROM_C \ - { \ - /* Next input byte. */ \ - uint16_t ch = *inptr; \ - \ - if (__glibc_likely (ch < 0x80)) \ - { \ - /* One byte sequence. */ \ - ++inptr; \ - } \ - else \ - { \ - uint_fast32_t cnt; \ - uint_fast32_t i; \ - \ - if (ch >= 0xc2 && ch < 0xe0) \ - { \ - /* We expect two bytes. The first byte cannot be 0xc0 \ - or 0xc1, otherwise the wide character could have been \ - represented using a single byte. */ \ - cnt = 2; \ - ch &= 0x1f; \ - } \ - else if (__glibc_likely ((ch & 0xf0) == 0xe0)) \ - { \ - /* We expect three bytes. */ \ - cnt = 3; \ - ch &= 0x0f; \ - } \ - else if (__glibc_likely ((ch & 0xf8) == 0xf0)) \ - { \ - /* We expect four bytes. */ \ - cnt = 4; \ - ch &= 0x07; \ - } \ - else \ - { \ - /* Search the end of this ill-formed UTF-8 character. This \ - is the next byte with (x & 0xc0) != 0x80. */ \ - i = 0; \ - do \ - ++i; \ - while (inptr + i < inend \ - && (*(inptr + i) & 0xc0) == 0x80 \ - && i < 5); \ - \ - errout: \ - STANDARD_FROM_LOOP_ERR_HANDLER (i); \ - } \ - \ - if (__glibc_unlikely (inptr + cnt > inend)) \ - { \ - /* We don't have enough input. But before we report \ - that check that all the bytes are correct. */ \ - for (i = 1; inptr + i < inend; ++i) \ - if ((inptr[i] & 0xc0) != 0x80) \ - break; \ - \ - if (__glibc_likely (inptr + i == inend)) \ - { \ - result = __GCONV_INCOMPLETE_INPUT; \ - break; \ - } \ - \ - goto errout; \ - } \ - \ - if (cnt == 4) \ - { \ - /* For 4 byte UTF-8 chars two UTF-16 chars (high and \ - low) are needed. */ \ - uint16_t zabcd, high, low; \ - \ - if (__glibc_unlikely (outptr + 4 > outend)) \ - { \ - /* Overflow in the output buffer. */ \ - result = __GCONV_FULL_OUTPUT; \ - break; \ - } \ - \ - /* Check if tail-bytes >= 0x80, < 0xc0. */ \ - for (i = 1; i < cnt; ++i) \ - { \ - if ((inptr[i] & 0xc0) != 0x80) \ - /* This is an illegal encoding. */ \ - goto errout; \ - } \ - \ - /* See Principles of Operations cu12. */ \ - zabcd = (((inptr[0] & 0x7) << 2) | \ - ((inptr[1] & 0x30) >> 4)) - 1; \ - \ - /* z-bit must be zero after subtracting 1. */ \ - if (zabcd & 0x10) \ - STANDARD_FROM_LOOP_ERR_HANDLER (4) \ - \ - high = (uint16_t)(0xd8 << 8); /* high surrogate id */ \ - high |= zabcd << 6; /* abcd bits */ \ - high |= (inptr[1] & 0xf) << 2; /* efgh bits */ \ - high |= (inptr[2] & 0x30) >> 4; /* ij bits */ \ - \ - low = (uint16_t)(0xdc << 8); /* low surrogate id */ \ - low |= ((uint16_t)inptr[2] & 0xc) << 6; /* kl bits */ \ - low |= (inptr[2] & 0x3) << 6; /* mn bits */ \ - low |= inptr[3] & 0x3f; /* opqrst bits */ \ - \ - put16 (outptr, high); \ - outptr += 2; \ - put16 (outptr, low); \ - outptr += 2; \ - inptr += 4; \ - continue; \ - } \ - else \ - { \ - /* Read the possible remaining bytes. */ \ - for (i = 1; i < cnt; ++i) \ - { \ - uint16_t byte = inptr[i]; \ - \ - if ((byte & 0xc0) != 0x80) \ - /* This is an illegal encoding. */ \ - break; \ - \ - ch <<= 6; \ - ch |= byte & 0x3f; \ - } \ - \ - /* If i < cnt, some trail byte was not >= 0x80, < 0xc0. \ - If cnt > 2 and ch < 2^(5*cnt-4), the wide character ch could \ - have been represented with fewer than cnt bytes. */ \ - if (i < cnt || (cnt > 2 && (ch >> (5 * cnt - 4)) == 0) \ - /* Do not accept UTF-16 surrogates. */ \ - || (ch >= 0xd800 && ch <= 0xdfff)) \ - { \ - /* This is an illegal encoding. */ \ - goto errout; \ - } \ - \ - inptr += cnt; \ - } \ - } \ - /* Now adjust the pointers and store the result. */ \ - *((uint16_t *) outptr) = ch; \ - outptr += sizeof (uint16_t); \ - } - -/* Generate loop-function with software implementation. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_FROM -# define MAX_NEEDED_INPUT MAX_NEEDED_FROM -# define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -# define MAX_NEEDED_OUTPUT MAX_NEEDED_TO -# define FROM_LOOP_C __from_utf8_loop_c -# define LOOPFCT FROM_LOOP_C -# define LOOP_NEED_FLAGS -# define BODY BODY_FROM_C -# include -#else -# define FROM_LOOP_C NULL -#endif /* HAVE_FROM_C != 1 */ - -/* Conversion from UTF-16 to UTF-8. */ - -#if HAVE_TO_C == 1 -/* The software routine is based on the functionality of the S/390 - hardware instruction (cu21) as described in the Principles of - Operation. */ -# define BODY_TO_C \ - { \ - uint16_t c = get16 (inptr); \ - \ - if (__glibc_likely (c <= 0x007f)) \ - { \ - /* Single byte UTF-8 char. */ \ - *outptr = c & 0xff; \ - outptr++; \ - } \ - else if (c >= 0x0080 && c <= 0x07ff) \ - { \ - /* Two byte UTF-8 char. */ \ - \ - if (__glibc_unlikely (outptr + 2 > outend)) \ - { \ - /* Overflow in the output buffer. */ \ - result = __GCONV_FULL_OUTPUT; \ - break; \ - } \ - \ - outptr[0] = 0xc0; \ - outptr[0] |= c >> 6; \ - \ - outptr[1] = 0x80; \ - outptr[1] |= c & 0x3f; \ - \ - outptr += 2; \ - } \ - else if ((c >= 0x0800 && c <= 0xd7ff) || c > 0xdfff) \ - { \ - /* Three byte UTF-8 char. */ \ - \ - if (__glibc_unlikely (outptr + 3 > outend)) \ - { \ - /* Overflow in the output buffer. */ \ - result = __GCONV_FULL_OUTPUT; \ - break; \ - } \ - outptr[0] = 0xe0; \ - outptr[0] |= c >> 12; \ - \ - outptr[1] = 0x80; \ - outptr[1] |= (c >> 6) & 0x3f; \ - \ - outptr[2] = 0x80; \ - outptr[2] |= c & 0x3f; \ - \ - outptr += 3; \ - } \ - else if (c >= 0xd800 && c <= 0xdbff) \ - { \ - /* Four byte UTF-8 char. */ \ - uint16_t low, uvwxy; \ - \ - if (__glibc_unlikely (outptr + 4 > outend)) \ - { \ - /* Overflow in the output buffer. */ \ - result = __GCONV_FULL_OUTPUT; \ - break; \ - } \ - if (__glibc_unlikely (inptr + 4 > inend)) \ - { \ - result = __GCONV_INCOMPLETE_INPUT; \ - break; \ - } \ - \ - inptr += 2; \ - low = get16 (inptr); \ - \ - if ((low & 0xfc00) != 0xdc00) \ - { \ - inptr -= 2; \ - STANDARD_TO_LOOP_ERR_HANDLER (2); \ - } \ - uvwxy = ((c >> 6) & 0xf) + 1; \ - outptr[0] = 0xf0; \ - outptr[0] |= uvwxy >> 2; \ - \ - outptr[1] = 0x80; \ - outptr[1] |= (uvwxy << 4) & 0x30; \ - outptr[1] |= (c >> 2) & 0x0f; \ - \ - outptr[2] = 0x80; \ - outptr[2] |= (c & 0x03) << 4; \ - outptr[2] |= (low >> 6) & 0x0f; \ - \ - outptr[3] = 0x80; \ - outptr[3] |= low & 0x3f; \ - \ - outptr += 4; \ - } \ - else \ - { \ - STANDARD_TO_LOOP_ERR_HANDLER (2); \ - } \ - inptr += 2; \ - } - -/* Generate loop-function with software implementation. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_TO -# define MAX_NEEDED_INPUT MAX_NEEDED_TO -# define MIN_NEEDED_OUTPUT MIN_NEEDED_FROM -# define MAX_NEEDED_OUTPUT MAX_NEEDED_FROM -# define TO_LOOP_C __to_utf8_loop_c -# define LOOPFCT TO_LOOP_C -# define BODY BODY_TO_C -# define LOOP_NEED_FLAGS -# include -#else -# define TO_LOOP_C NULL -#endif /* HAVE_TO_C != 1 */ - -#if HAVE_TO_VX == 1 -# define BODY_TO_VX \ - { \ - size_t inlen = inend - inptr; \ - size_t outlen = outend - outptr; \ - unsigned long tmp, tmp2, tmp3; \ - asm volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - /* Setup to check for values <= 0x7f. */ \ - " larl %[R_TMP],9f\n\t" \ - " vlm %%v30,%%v31,0(%[R_TMP])\n\t" \ - CONVERT_32BIT_SIZE_T ([R_INLEN]) \ - CONVERT_32BIT_SIZE_T ([R_OUTLEN]) \ - /* Loop which handles UTF-16 chars <=0x7f. */ \ - "0: clgijl %[R_INLEN],32,2f\n\t" \ - " clgijl %[R_OUTLEN],16,2f\n\t" \ - "1: vlm %%v16,%%v17,0(%[R_IN])\n\t" \ - " lghi %[R_TMP2],0\n\t" \ - /* Check for > 1byte UTF-8 chars. */ \ - " vstrchs %%v19,%%v16,%%v30,%%v31\n\t" \ - " jno 10f\n\t" /* Jump away if not all bytes are 1byte \ - UTF8 chars. */ \ - " vstrchs %%v19,%%v17,%%v30,%%v31\n\t" \ - " jno 11f\n\t" /* Jump away if not all bytes are 1byte \ - UTF8 chars. */ \ - /* Shorten to UTF-8. */ \ - " vpkh %%v18,%%v16,%%v17\n\t" \ - " la %[R_IN],32(%[R_IN])\n\t" \ - " aghi %[R_INLEN],-32\n\t" \ - /* Store 16 bytes to buf_out. */ \ - " vst %%v18,0(%[R_OUT])\n\t" \ - " aghi %[R_OUTLEN],-16\n\t" \ - " la %[R_OUT],16(%[R_OUT])\n\t" \ - " clgijl %[R_INLEN],32,2f\n\t" \ - " clgijl %[R_OUTLEN],16,2f\n\t" \ - " j 1b\n\t" \ - /* Setup to check for ch > 0x7f. (v30, v31) */ \ - "9: .short 0x7f,0x7f,0x0,0x0,0x0,0x0,0x0,0x0\n\t" \ - " .short 0x2000,0x2000,0x0,0x0,0x0,0x0,0x0,0x0\n\t" \ - /* At least one byte is > 0x7f. \ - Store the preceding 1-byte chars. */ \ - "11: lghi %[R_TMP2],16\n\t" /* match was found in v17. */ \ - "10:\n\t" \ - " vlgvb %[R_TMP],%%v19,7\n\t" \ - /* Shorten to UTF-8. */ \ - " vpkh %%v18,%%v16,%%v17\n\t" \ - " ar %[R_TMP],%[R_TMP2]\n\t" /* Number of in bytes. */ \ - " srlg %[R_TMP3],%[R_TMP],1\n\t" /* Number of out bytes. */ \ - " ahik %[R_TMP2],%[R_TMP3],-1\n\t" /* Highest index to store. */ \ - " jl 13f\n\t" \ - " vstl %%v18,%[R_TMP2],0(%[R_OUT])\n\t" \ - /* Update pointers. */ \ - " la %[R_IN],0(%[R_TMP],%[R_IN])\n\t" \ - " slgr %[R_INLEN],%[R_TMP]\n\t" \ - " la %[R_OUT],0(%[R_TMP3],%[R_OUT])\n\t" \ - " slgr %[R_OUTLEN],%[R_TMP3]\n\t" \ - "13: \n\t" \ - /* Calculate remaining uint16_t values in loaded vrs. */ \ - " lghi %[R_TMP2],16\n\t" \ - " slgr %[R_TMP2],%[R_TMP3]\n\t" \ - " llh %[R_TMP],0(%[R_IN])\n\t" \ - " aghi %[R_INLEN],-2\n\t" \ - " j 22f\n\t" \ - /* Handle remaining bytes. */ \ - "2: \n\t" \ - /* Zero, one or more bytes available? */ \ - " clgfi %[R_INLEN],1\n\t" \ - " locghie %[R_RES],%[RES_IN_FULL]\n\t" /* Only one byte. */ \ - " jle 99f\n\t" /* End if less than two bytes. */ \ - /* Calculate remaining uint16_t values in inptr. */ \ - " srlg %[R_TMP2],%[R_INLEN],1\n\t" \ - /* Handle multibyte utf8-char. */ \ - "20: llh %[R_TMP],0(%[R_IN])\n\t" \ - " aghi %[R_INLEN],-2\n\t" \ - /* Test if ch is 1-byte UTF-8 char. */ \ - "21: clijh %[R_TMP],0x7f,22f\n\t" \ - /* Handle 1-byte UTF-8 char. */ \ - "31: slgfi %[R_OUTLEN],1\n\t" \ - " jl 90f \n\t" \ - " stc %[R_TMP],0(%[R_OUT])\n\t" \ - " la %[R_IN],2(%[R_IN])\n\t" \ - " la %[R_OUT],1(%[R_OUT])\n\t" \ - " brctg %[R_TMP2],20b\n\t" \ - " j 0b\n\t" /* Switch to vx-loop. */ \ - /* Test if ch is 2-byte UTF-8 char. */ \ - "22: clfi %[R_TMP],0x7ff\n\t" \ - " jh 23f\n\t" \ - /* Handle 2-byte UTF-8 char. */ \ - "32: slgfi %[R_OUTLEN],2\n\t" \ - " jl 90f \n\t" \ - " llill %[R_TMP3],0xc080\n\t" \ - " la %[R_IN],2(%[R_IN])\n\t" \ - " risbgn %[R_TMP3],%[R_TMP],51,55,2\n\t" /* 1. byte. */ \ - " risbgn %[R_TMP3],%[R_TMP],58,63,0\n\t" /* 2. byte. */ \ - " sth %[R_TMP3],0(%[R_OUT])\n\t" \ - " la %[R_OUT],2(%[R_OUT])\n\t" \ - " brctg %[R_TMP2],20b\n\t" \ - " j 0b\n\t" /* Switch to vx-loop. */ \ - /* Test if ch is 3-byte UTF-8 char. */ \ - "23: clfi %[R_TMP],0xd7ff\n\t" \ - " jh 24f\n\t" \ - /* Handle 3-byte UTF-8 char. */ \ - "33: slgfi %[R_OUTLEN],3\n\t" \ - " jl 90f \n\t" \ - " llilf %[R_TMP3],0xe08080\n\t" \ - " la %[R_IN],2(%[R_IN])\n\t" \ - " risbgn %[R_TMP3],%[R_TMP],44,47,4\n\t" /* 1. byte. */ \ - " risbgn %[R_TMP3],%[R_TMP],50,55,2\n\t" /* 2. byte. */ \ - " risbgn %[R_TMP3],%[R_TMP],58,63,0\n\t" /* 3. byte. */ \ - " stcm %[R_TMP3],7,0(%[R_OUT])\n\t" \ - " la %[R_OUT],3(%[R_OUT])\n\t" \ - " brctg %[R_TMP2],20b\n\t" \ - " j 0b\n\t" /* Switch to vx-loop. */ \ - /* Test if ch is 4-byte UTF-8 char. */ \ - "24: clfi %[R_TMP],0xdfff\n\t" \ - " jh 33b\n\t" /* Handle this 3-byte UTF-8 char. */ \ - " clfi %[R_TMP],0xdbff\n\t" \ - " locghih %[R_RES],%[RES_IN_ILL]\n\t" \ - " jh 99f\n\t" /* Jump away if this is a low surrogate \ - without a preceding high surrogate. */ \ - /* Handle 4-byte UTF-8 char. */ \ - "34: slgfi %[R_OUTLEN],4\n\t" \ - " jl 90f \n\t" \ - " slgfi %[R_INLEN],2\n\t" \ - " locghil %[R_RES],%[RES_IN_FULL]\n\t" \ - " jl 99f\n\t" /* Jump away if low surrogate is missing. */ \ - " llilf %[R_TMP3],0xf0808080\n\t" \ - " aghi %[R_TMP],0x40\n\t" \ - " risbgn %[R_TMP3],%[R_TMP],37,39,16\n\t" /* 1. byte: uvw */ \ - " risbgn %[R_TMP3],%[R_TMP],42,43,14\n\t" /* 2. byte: xy */ \ - " risbgn %[R_TMP3],%[R_TMP],44,47,14\n\t" /* 2. byte: efgh */ \ - " risbgn %[R_TMP3],%[R_TMP],50,51,12\n\t" /* 3. byte: ij */ \ - " llh %[R_TMP],2(%[R_IN])\n\t" /* Load low surrogate. */ \ - " risbgn %[R_TMP3],%[R_TMP],52,55,2\n\t" /* 3. byte: klmn */ \ - " risbgn %[R_TMP3],%[R_TMP],58,63,0\n\t" /* 4. byte: opqrst */ \ - " nilf %[R_TMP],0xfc00\n\t" \ - " clfi %[R_TMP],0xdc00\n\t" /* Check if it starts with 0xdc00. */ \ - " locghine %[R_RES],%[RES_IN_ILL]\n\t" \ - " jne 99f\n\t" /* Jump away if low surrogate is invalid. */ \ - " st %[R_TMP3],0(%[R_OUT])\n\t" \ - " la %[R_IN],4(%[R_IN])\n\t" \ - " la %[R_OUT],4(%[R_OUT])\n\t" \ - " aghi %[R_TMP2],-2\n\t" \ - " jh 20b\n\t" \ - " j 0b\n\t" /* Switch to vx-loop. */ \ - /* Exit with __GCONV_FULL_OUTPUT. */ \ - "90: lghi %[R_RES],%[RES_OUT_FULL]\n\t" \ - "99: \n\t" \ - ".machine pop" \ - : /* outputs */ [R_IN] "+a" (inptr) \ - , [R_INLEN] "+d" (inlen), [R_OUT] "+a" (outptr) \ - , [R_OUTLEN] "+d" (outlen), [R_TMP] "=a" (tmp) \ - , [R_TMP2] "=d" (tmp2), [R_TMP3] "=a" (tmp3) \ - , [R_RES] "+d" (result) \ - : /* inputs */ \ - [RES_OUT_FULL] "i" (__GCONV_FULL_OUTPUT) \ - , [RES_IN_ILL] "i" (__GCONV_ILLEGAL_INPUT) \ - , [RES_IN_FULL] "i" (__GCONV_INCOMPLETE_INPUT) \ - : /* clobber list */ "memory", "cc" \ - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v17") \ - ASM_CLOBBER_VR ("v18") ASM_CLOBBER_VR ("v19") \ - ASM_CLOBBER_VR ("v30") ASM_CLOBBER_VR ("v31") \ - ); \ - if (__glibc_likely (inptr == inend) \ - || result != __GCONV_ILLEGAL_INPUT) \ - break; \ - \ - STANDARD_TO_LOOP_ERR_HANDLER (2); \ - } - -/* Generate loop-function with vector implementation. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_TO -# define MAX_NEEDED_INPUT MAX_NEEDED_TO -# define MIN_NEEDED_OUTPUT MIN_NEEDED_FROM -# define MAX_NEEDED_OUTPUT MAX_NEEDED_FROM -# define TO_LOOP_VX __to_utf8_loop_vx -# define LOOPFCT TO_LOOP_VX -# define BODY BODY_TO_VX -# define LOOP_NEED_FLAGS -# include -#else -# define TO_LOOP_VX NULL -#endif /* HAVE_TO_VX != 1 */ - -/* This file also exists in sysdeps/s390/multiarch/ which - generates ifunc resolvers for FROM/TO_LOOP functions - and includes iconv/skeleton.c afterwards. */ -#if ! defined USE_MULTIARCH -# include -#endif diff --git a/sysdeps/s390/utf8-utf32-z9.c b/sysdeps/s390/utf8-utf32-z9.c deleted file mode 100644 index 57572fa44a..0000000000 --- a/sysdeps/s390/utf8-utf32-z9.c +++ /dev/null @@ -1,871 +0,0 @@ -/* Conversion between UTF-8 and UTF-32 BE/internal. - - This module uses the Z9-109 variants of the Convert Unicode - instructions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - - Author: Andreas Krebbel - Based on the work by Ulrich Drepper , 1997. - - Thanks to Daniel Appich who covered the relevant performance work - in his diploma thesis. - - This is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Select which versions should be defined depending on support - for multiarch, vector and used minimum architecture level. */ -#ifdef HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT -# define HAVE_FROM_C 0 -# define FROM_LOOP_DEFAULT FROM_LOOP_CU -#else -# define HAVE_FROM_C 1 -# define FROM_LOOP_DEFAULT FROM_LOOP_C -#endif - -#define HAVE_TO_C 1 -#define TO_LOOP_DEFAULT TO_LOOP_C - -#if defined HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT || defined USE_MULTIARCH -# define HAVE_FROM_CU 1 -#else -# define HAVE_FROM_CU 0 -#endif - -#if defined HAVE_S390_VX_ASM_SUPPORT && defined USE_MULTIARCH -# define HAVE_FROM_VX 1 -# define HAVE_TO_VX 1 -#else -# define HAVE_FROM_VX 0 -# define HAVE_TO_VX 0 -#endif - -#if defined HAVE_S390_VX_GCC_SUPPORT -# define ASM_CLOBBER_VR(NR) , NR -#else -# define ASM_CLOBBER_VR(NR) -#endif - -#if defined __s390x__ -# define CONVERT_32BIT_SIZE_T(REG) -#else -# define CONVERT_32BIT_SIZE_T(REG) "llgfr %" #REG ",%" #REG "\n\t" -#endif - -/* Defines for skeleton.c. */ -#define DEFINE_INIT 0 -#define DEFINE_FINI 0 -#define MIN_NEEDED_FROM 1 -#define MAX_NEEDED_FROM 6 -#define MIN_NEEDED_TO 4 -#define FROM_LOOP FROM_LOOP_DEFAULT -#define TO_LOOP TO_LOOP_DEFAULT -#define FROM_DIRECTION (dir == from_utf8) -#define ONE_DIRECTION 0 - -/* UTF-32 big endian byte order mark. */ -#define BOM 0x0000feffu - -/* Direction of the transformation. */ -enum direction -{ - illegal_dir, - to_utf8, - from_utf8 -}; - -struct utf8_data -{ - enum direction dir; - int emit_bom; -}; - - -extern int gconv_init (struct __gconv_step *step); -int -gconv_init (struct __gconv_step *step) -{ - /* Determine which direction. */ - struct utf8_data *new_data; - enum direction dir = illegal_dir; - int emit_bom; - int result; - - emit_bom = (__strcasecmp (step->__to_name, "UTF-32//") == 0); - - if (__strcasecmp (step->__from_name, "ISO-10646/UTF8/") == 0 - && (__strcasecmp (step->__to_name, "UTF-32//") == 0 - || __strcasecmp (step->__to_name, "UTF-32BE//") == 0 - || __strcasecmp (step->__to_name, "INTERNAL") == 0)) - { - dir = from_utf8; - } - else if (__strcasecmp (step->__to_name, "ISO-10646/UTF8/") == 0 - && (__strcasecmp (step->__from_name, "UTF-32BE//") == 0 - || __strcasecmp (step->__from_name, "INTERNAL") == 0)) - { - dir = to_utf8; - } - - result = __GCONV_NOCONV; - if (dir != illegal_dir) - { - new_data = (struct utf8_data *) malloc (sizeof (struct utf8_data)); - - result = __GCONV_NOMEM; - if (new_data != NULL) - { - new_data->dir = dir; - new_data->emit_bom = emit_bom; - step->__data = new_data; - - if (dir == from_utf8) - { - step->__min_needed_from = MIN_NEEDED_FROM; - step->__max_needed_from = MIN_NEEDED_FROM; - step->__min_needed_to = MIN_NEEDED_TO; - step->__max_needed_to = MIN_NEEDED_TO; - } - else - { - step->__min_needed_from = MIN_NEEDED_TO; - step->__max_needed_from = MIN_NEEDED_TO; - step->__min_needed_to = MIN_NEEDED_FROM; - step->__max_needed_to = MIN_NEEDED_FROM; - } - - step->__stateful = 0; - - result = __GCONV_OK; - } - } - - return result; -} - - -extern void gconv_end (struct __gconv_step *data); -void -gconv_end (struct __gconv_step *data) -{ - free (data->__data); -} - -/* The macro for the hardware loop. This is used for both - directions. */ -#define HARDWARE_CONVERT(INSTRUCTION) \ - { \ - register const unsigned char* pInput __asm__ ("8") = inptr; \ - register size_t inlen __asm__ ("9") = inend - inptr; \ - register unsigned char* pOutput __asm__ ("10") = outptr; \ - register size_t outlen __asm__("11") = outend - outptr; \ - unsigned long cc = 0; \ - \ - __asm__ __volatile__ (".machine push \n\t" \ - ".machine \"z9-109\" \n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - "0: " INSTRUCTION " \n\t" \ - ".machine pop \n\t" \ - " jo 0b \n\t" \ - " ipm %2 \n" \ - : "+a" (pOutput), "+a" (pInput), "+d" (cc), \ - "+d" (outlen), "+d" (inlen) \ - : \ - : "cc", "memory"); \ - \ - inptr = pInput; \ - outptr = pOutput; \ - cc >>= 28; \ - \ - if (cc == 1) \ - { \ - result = __GCONV_FULL_OUTPUT; \ - } \ - else if (cc == 2) \ - { \ - result = __GCONV_ILLEGAL_INPUT; \ - } \ - } - -#define PREPARE_LOOP \ - enum direction dir = ((struct utf8_data *) step->__data)->dir; \ - int emit_bom = ((struct utf8_data *) step->__data)->emit_bom; \ - \ - if (emit_bom && !data->__internal_use \ - && data->__invocation_counter == 0) \ - { \ - /* Emit the Byte Order Mark. */ \ - if (__glibc_unlikely (outbuf + 4 > outend)) \ - return __GCONV_FULL_OUTPUT; \ - \ - put32u (outbuf, BOM); \ - outbuf += 4; \ - } - -/* Conversion function from UTF-8 to UTF-32 internal/BE. */ - -#define STORE_REST_COMMON \ - { \ - /* We store the remaining bytes while converting them into the UCS4 \ - format. We can assume that the first byte in the buffer is \ - correct and that it requires a larger number of bytes than there \ - are in the input buffer. */ \ - wint_t ch = **inptrp; \ - size_t cnt, r; \ - \ - state->__count = inend - *inptrp; \ - \ - assert (ch != 0xc0 && ch != 0xc1); \ - if (ch >= 0xc2 && ch < 0xe0) \ - { \ - /* We expect two bytes. The first byte cannot be 0xc0 or \ - 0xc1, otherwise the wide character could have been \ - represented using a single byte. */ \ - cnt = 2; \ - ch &= 0x1f; \ - } \ - else if (__glibc_likely ((ch & 0xf0) == 0xe0)) \ - { \ - /* We expect three bytes. */ \ - cnt = 3; \ - ch &= 0x0f; \ - } \ - else if (__glibc_likely ((ch & 0xf8) == 0xf0)) \ - { \ - /* We expect four bytes. */ \ - cnt = 4; \ - ch &= 0x07; \ - } \ - else if (__glibc_likely ((ch & 0xfc) == 0xf8)) \ - { \ - /* We expect five bytes. */ \ - cnt = 5; \ - ch &= 0x03; \ - } \ - else \ - { \ - /* We expect six bytes. */ \ - cnt = 6; \ - ch &= 0x01; \ - } \ - \ - /* The first byte is already consumed. */ \ - r = cnt - 1; \ - while (++(*inptrp) < inend) \ - { \ - ch <<= 6; \ - ch |= **inptrp & 0x3f; \ - --r; \ - } \ - \ - /* Shift for the so far missing bytes. */ \ - ch <<= r * 6; \ - \ - /* Store the number of bytes expected for the entire sequence. */ \ - state->__count |= cnt << 8; \ - \ - /* Store the value. */ \ - state->__value.__wch = ch; \ - } - -#define UNPACK_BYTES_COMMON \ - { \ - static const unsigned char inmask[5] = { 0xc0, 0xe0, 0xf0, 0xf8, 0xfc }; \ - wint_t wch = state->__value.__wch; \ - size_t ntotal = state->__count >> 8; \ - \ - inlen = state->__count & 255; \ - \ - bytebuf[0] = inmask[ntotal - 2]; \ - \ - do \ - { \ - if (--ntotal < inlen) \ - bytebuf[ntotal] = 0x80 | (wch & 0x3f); \ - wch >>= 6; \ - } \ - while (ntotal > 1); \ - \ - bytebuf[0] |= wch; \ - } - -#define CLEAR_STATE_COMMON \ - state->__count = 0 - -#define BODY_FROM_HW(ASM) \ - { \ - ASM; \ - if (__glibc_likely (inptr == inend) \ - || result == __GCONV_FULL_OUTPUT) \ - break; \ - \ - int i; \ - for (i = 1; inptr + i < inend && i < 5; ++i) \ - if ((inptr[i] & 0xc0) != 0x80) \ - break; \ - \ - if (__glibc_likely (inptr + i == inend \ - && result == __GCONV_EMPTY_INPUT)) \ - { \ - result = __GCONV_INCOMPLETE_INPUT; \ - break; \ - } \ - STANDARD_FROM_LOOP_ERR_HANDLER (i); \ - } - -#if HAVE_FROM_C == 1 -/* The software routine is copied from gconv_simple.c. */ -# define BODY_FROM_C \ - { \ - /* Next input byte. */ \ - uint32_t ch = *inptr; \ - \ - if (__glibc_likely (ch < 0x80)) \ - { \ - /* One byte sequence. */ \ - ++inptr; \ - } \ - else \ - { \ - uint_fast32_t cnt; \ - uint_fast32_t i; \ - \ - if (ch >= 0xc2 && ch < 0xe0) \ - { \ - /* We expect two bytes. The first byte cannot be 0xc0 or \ - 0xc1, otherwise the wide character could have been \ - represented using a single byte. */ \ - cnt = 2; \ - ch &= 0x1f; \ - } \ - else if (__glibc_likely ((ch & 0xf0) == 0xe0)) \ - { \ - /* We expect three bytes. */ \ - cnt = 3; \ - ch &= 0x0f; \ - } \ - else if (__glibc_likely ((ch & 0xf8) == 0xf0)) \ - { \ - /* We expect four bytes. */ \ - cnt = 4; \ - ch &= 0x07; \ - } \ - else \ - { \ - /* Search the end of this ill-formed UTF-8 character. This \ - is the next byte with (x & 0xc0) != 0x80. */ \ - i = 0; \ - do \ - ++i; \ - while (inptr + i < inend \ - && (*(inptr + i) & 0xc0) == 0x80 \ - && i < 5); \ - \ - errout: \ - STANDARD_FROM_LOOP_ERR_HANDLER (i); \ - } \ - \ - if (__glibc_unlikely (inptr + cnt > inend)) \ - { \ - /* We don't have enough input. But before we report \ - that check that all the bytes are correct. */ \ - for (i = 1; inptr + i < inend; ++i) \ - if ((inptr[i] & 0xc0) != 0x80) \ - break; \ - \ - if (__glibc_likely (inptr + i == inend)) \ - { \ - result = __GCONV_INCOMPLETE_INPUT; \ - break; \ - } \ - \ - goto errout; \ - } \ - \ - /* Read the possible remaining bytes. */ \ - for (i = 1; i < cnt; ++i) \ - { \ - uint32_t byte = inptr[i]; \ - \ - if ((byte & 0xc0) != 0x80) \ - /* This is an illegal encoding. */ \ - break; \ - \ - ch <<= 6; \ - ch |= byte & 0x3f; \ - } \ - \ - /* If i < cnt, some trail byte was not >= 0x80, < 0xc0. \ - If cnt > 2 and ch < 2^(5*cnt-4), the wide character ch could \ - have been represented with fewer than cnt bytes. */ \ - if (i < cnt || (cnt > 2 && (ch >> (5 * cnt - 4)) == 0) \ - /* Do not accept UTF-16 surrogates. */ \ - || (ch >= 0xd800 && ch <= 0xdfff) \ - || (ch > 0x10ffff)) \ - { \ - /* This is an illegal encoding. */ \ - goto errout; \ - } \ - \ - inptr += cnt; \ - } \ - \ - /* Now adjust the pointers and store the result. */ \ - *((uint32_t *) outptr) = ch; \ - outptr += sizeof (uint32_t); \ - } - -/* These definitions apply to the UTF-8 to UTF-32 direction. The - software implementation for UTF-8 still supports multibyte - characters up to 6 bytes whereas the hardware variant does not. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_FROM -# define MAX_NEEDED_INPUT MAX_NEEDED_FROM -# define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -# define FROM_LOOP_C __from_utf8_loop_c -# define LOOPFCT FROM_LOOP_C - -# define LOOP_NEED_FLAGS - -# define STORE_REST STORE_REST_COMMON -# define UNPACK_BYTES UNPACK_BYTES_COMMON -# define CLEAR_STATE CLEAR_STATE_COMMON -# define BODY BODY_FROM_C -# include -#else -# define FROM_LOOP_C NULL -#endif /* HAVE_FROM_C != 1 */ - -#if HAVE_FROM_CU == 1 -/* This hardware routine uses the Convert UTF8 to UTF32 (cu14) instruction. */ -# define BODY_FROM_ETF3EH BODY_FROM_HW (HARDWARE_CONVERT ("cu14 %0, %1, 1")) - -/* Generate loop-function with hardware utf-convert instruction. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_FROM -# define MAX_NEEDED_INPUT MAX_NEEDED_FROM -# define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -# define FROM_LOOP_CU __from_utf8_loop_etf3eh -# define LOOPFCT FROM_LOOP_CU - -# define LOOP_NEED_FLAGS - -# define STORE_REST STORE_REST_COMMON -# define UNPACK_BYTES UNPACK_BYTES_COMMON -# define CLEAR_STATE CLEAR_STATE_COMMON -# define BODY BODY_FROM_ETF3EH -# include -#else -# define FROM_LOOP_CU NULL -#endif /* HAVE_FROM_CU != 1 */ - -#if HAVE_FROM_VX == 1 -# define HW_FROM_VX \ - { \ - register const unsigned char* pInput asm ("8") = inptr; \ - register size_t inlen asm ("9") = inend - inptr; \ - register unsigned char* pOutput asm ("10") = outptr; \ - register size_t outlen asm("11") = outend - outptr; \ - unsigned long tmp, tmp2, tmp3; \ - asm volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - " vrepib %%v30,0x7f\n\t" /* For compare > 0x7f. */ \ - " vrepib %%v31,0x20\n\t" \ - CONVERT_32BIT_SIZE_T ([R_INLEN]) \ - CONVERT_32BIT_SIZE_T ([R_OUTLEN]) \ - /* Loop which handles UTF-8 chars <=0x7f. */ \ - "0: clgijl %[R_INLEN],16,20f\n\t" \ - " clgijl %[R_OUTLEN],64,20f\n\t" \ - "1: vl %%v16,0(%[R_IN])\n\t" \ - " vstrcbs %%v17,%%v16,%%v30,%%v31\n\t" \ - " jno 10f\n\t" /* Jump away if not all bytes are 1byte \ - UTF8 chars. */ \ - /* Enlarge to UCS4. */ \ - " vuplhb %%v18,%%v16\n\t" \ - " vupllb %%v19,%%v16\n\t" \ - " la %[R_IN],16(%[R_IN])\n\t" \ - " vuplhh %%v20,%%v18\n\t" \ - " aghi %[R_INLEN],-16\n\t" \ - " vupllh %%v21,%%v18\n\t" \ - " aghi %[R_OUTLEN],-64\n\t" \ - " vuplhh %%v22,%%v19\n\t" \ - " vupllh %%v23,%%v19\n\t" \ - /* Store 64 bytes to buf_out. */ \ - " vstm %%v20,%%v23,0(%[R_OUT])\n\t" \ - " la %[R_OUT],64(%[R_OUT])\n\t" \ - " clgijl %[R_INLEN],16,20f\n\t" \ - " clgijl %[R_OUTLEN],64,20f\n\t" \ - " j 1b\n\t" \ - "10: \n\t" \ - /* At least one byte is > 0x7f. \ - Store the preceding 1-byte chars. */ \ - " vlgvb %[R_TMP],%%v17,7\n\t" \ - " sllk %[R_TMP2],%[R_TMP],2\n\t" /* Compute highest \ - index to store. */ \ - " llgfr %[R_TMP3],%[R_TMP2]\n\t" \ - " ahi %[R_TMP2],-1\n\t" \ - " jl 20f\n\t" \ - " vuplhb %%v18,%%v16\n\t" \ - " vuplhh %%v20,%%v18\n\t" \ - " vstl %%v20,%[R_TMP2],0(%[R_OUT])\n\t" \ - " ahi %[R_TMP2],-16\n\t" \ - " jl 11f\n\t" \ - " vupllh %%v21,%%v18\n\t" \ - " vstl %%v21,%[R_TMP2],16(%[R_OUT])\n\t" \ - " ahi %[R_TMP2],-16\n\t" \ - " jl 11f\n\t" \ - " vupllb %%v19,%%v16\n\t" \ - " vuplhh %%v22,%%v19\n\t" \ - " vstl %%v22,%[R_TMP2],32(%[R_OUT])\n\t" \ - " ahi %[R_TMP2],-16\n\t" \ - " jl 11f\n\t" \ - " vupllh %%v23,%%v19\n\t" \ - " vstl %%v23,%[R_TMP2],48(%[R_OUT])\n\t" \ - "11: \n\t" \ - /* Update pointers. */ \ - " la %[R_IN],0(%[R_TMP],%[R_IN])\n\t" \ - " slgr %[R_INLEN],%[R_TMP]\n\t" \ - " la %[R_OUT],0(%[R_TMP3],%[R_OUT])\n\t" \ - " slgr %[R_OUTLEN],%[R_TMP3]\n\t" \ - /* Handle multibyte utf8-char with convert instruction. */ \ - "20: cu14 %[R_OUT],%[R_IN],1\n\t" \ - " jo 0b\n\t" /* Try vector implemenation again. */ \ - " lochil %[R_RES],%[RES_OUT_FULL]\n\t" /* cc == 1. */ \ - " lochih %[R_RES],%[RES_IN_ILL]\n\t" /* cc == 2. */ \ - ".machine pop" \ - : /* outputs */ [R_IN] "+a" (pInput) \ - , [R_INLEN] "+d" (inlen), [R_OUT] "+a" (pOutput) \ - , [R_OUTLEN] "+d" (outlen), [R_TMP] "=a" (tmp) \ - , [R_TMP2] "=d" (tmp2), [R_TMP3] "=a" (tmp3) \ - , [R_RES] "+d" (result) \ - : /* inputs */ \ - [RES_OUT_FULL] "i" (__GCONV_FULL_OUTPUT) \ - , [RES_IN_ILL] "i" (__GCONV_ILLEGAL_INPUT) \ - : /* clobber list */ "memory", "cc" \ - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v17") \ - ASM_CLOBBER_VR ("v18") ASM_CLOBBER_VR ("v19") \ - ASM_CLOBBER_VR ("v20") ASM_CLOBBER_VR ("v21") \ - ASM_CLOBBER_VR ("v22") ASM_CLOBBER_VR ("v30") \ - ASM_CLOBBER_VR ("v31") \ - ); \ - inptr = pInput; \ - outptr = pOutput; \ - } -# define BODY_FROM_VX BODY_FROM_HW (HW_FROM_VX) - -/* Generate loop-function with hardware vector and utf-convert instructions. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_FROM -# define MAX_NEEDED_INPUT MAX_NEEDED_FROM -# define MIN_NEEDED_OUTPUT MIN_NEEDED_TO -# define FROM_LOOP_VX __from_utf8_loop_vx -# define LOOPFCT FROM_LOOP_VX - -# define LOOP_NEED_FLAGS - -# define STORE_REST STORE_REST_COMMON -# define UNPACK_BYTES UNPACK_BYTES_COMMON -# define CLEAR_STATE CLEAR_STATE_COMMON -# define BODY BODY_FROM_VX -# include -#else -# define FROM_LOOP_VX NULL -#endif /* HAVE_FROM_VX != 1 */ - -#if HAVE_TO_C == 1 -/* The software routine mimics the S/390 cu41 instruction. */ -# define BODY_TO_C \ - { \ - uint32_t wc = *((const uint32_t *) inptr); \ - \ - if (__glibc_likely (wc <= 0x7f)) \ - { \ - /* Single UTF-8 char. */ \ - *outptr = (uint8_t)wc; \ - outptr++; \ - } \ - else if (wc <= 0x7ff) \ - { \ - /* Two UTF-8 chars. */ \ - if (__glibc_unlikely (outptr + 2 > outend)) \ - { \ - /* Overflow in the output buffer. */ \ - result = __GCONV_FULL_OUTPUT; \ - break; \ - } \ - \ - outptr[0] = 0xc0; \ - outptr[0] |= wc >> 6; \ - \ - outptr[1] = 0x80; \ - outptr[1] |= wc & 0x3f; \ - \ - outptr += 2; \ - } \ - else if (wc <= 0xffff) \ - { \ - /* Three UTF-8 chars. */ \ - if (__glibc_unlikely (outptr + 3 > outend)) \ - { \ - /* Overflow in the output buffer. */ \ - result = __GCONV_FULL_OUTPUT; \ - break; \ - } \ - if (wc >= 0xd800 && wc <= 0xdfff) \ - { \ - /* Do not accept UTF-16 surrogates. */ \ - result = __GCONV_ILLEGAL_INPUT; \ - STANDARD_TO_LOOP_ERR_HANDLER (4); \ - } \ - outptr[0] = 0xe0; \ - outptr[0] |= wc >> 12; \ - \ - outptr[1] = 0x80; \ - outptr[1] |= (wc >> 6) & 0x3f; \ - \ - outptr[2] = 0x80; \ - outptr[2] |= wc & 0x3f; \ - \ - outptr += 3; \ - } \ - else if (wc <= 0x10ffff) \ - { \ - /* Four UTF-8 chars. */ \ - if (__glibc_unlikely (outptr + 4 > outend)) \ - { \ - /* Overflow in the output buffer. */ \ - result = __GCONV_FULL_OUTPUT; \ - break; \ - } \ - outptr[0] = 0xf0; \ - outptr[0] |= wc >> 18; \ - \ - outptr[1] = 0x80; \ - outptr[1] |= (wc >> 12) & 0x3f; \ - \ - outptr[2] = 0x80; \ - outptr[2] |= (wc >> 6) & 0x3f; \ - \ - outptr[3] = 0x80; \ - outptr[3] |= wc & 0x3f; \ - \ - outptr += 4; \ - } \ - else \ - { \ - STANDARD_TO_LOOP_ERR_HANDLER (4); \ - } \ - inptr += 4; \ - } - -/* Generate loop-function with software routing. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_TO -# define MIN_NEEDED_OUTPUT MIN_NEEDED_FROM -# define MAX_NEEDED_OUTPUT MAX_NEEDED_FROM -# define TO_LOOP_C __to_utf8_loop_c -# define LOOPFCT TO_LOOP_C -# define BODY BODY_TO_C -# define LOOP_NEED_FLAGS -# include -#else -# define TO_LOOP_C NULL -#endif /* HAVE_TO_C != 1 */ - -#if HAVE_TO_VX == 1 -/* The hardware routine uses the S/390 vector instructions. */ -# define BODY_TO_VX \ - { \ - size_t inlen = inend - inptr; \ - size_t outlen = outend - outptr; \ - unsigned long tmp, tmp2, tmp3; \ - asm volatile (".machine push\n\t" \ - ".machine \"z13\"\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - " vleif %%v20,127,0\n\t" /* element 0: 127 */ \ - " vzero %%v21\n\t" \ - " vleih %%v21,8192,0\n\t" /* element 0: > */ \ - " vleih %%v21,-8192,2\n\t" /* element 1: =<> */ \ - CONVERT_32BIT_SIZE_T ([R_INLEN]) \ - CONVERT_32BIT_SIZE_T ([R_OUTLEN]) \ - /* Loop which handles UTF-32 chars <=0x7f. */ \ - "0: clgijl %[R_INLEN],64,2f\n\t" \ - " clgijl %[R_OUTLEN],16,2f\n\t" \ - "1: vlm %%v16,%%v19,0(%[R_IN])\n\t" \ - " lghi %[R_TMP2],0\n\t" \ - /* Shorten to byte values. */ \ - " vpkf %%v23,%%v16,%%v17\n\t" \ - " vpkf %%v24,%%v18,%%v19\n\t" \ - " vpkh %%v23,%%v23,%%v24\n\t" \ - /* Checking for values > 0x7f. */ \ - " vstrcfs %%v22,%%v16,%%v20,%%v21\n\t" \ - " jno 10f\n\t" \ - " vstrcfs %%v22,%%v17,%%v20,%%v21\n\t" \ - " jno 11f\n\t" \ - " vstrcfs %%v22,%%v18,%%v20,%%v21\n\t" \ - " jno 12f\n\t" \ - " vstrcfs %%v22,%%v19,%%v20,%%v21\n\t" \ - " jno 13f\n\t" \ - /* Store 16bytes to outptr. */ \ - " vst %%v23,0(%[R_OUT])\n\t" \ - " aghi %[R_INLEN],-64\n\t" \ - " aghi %[R_OUTLEN],-16\n\t" \ - " la %[R_IN],64(%[R_IN])\n\t" \ - " la %[R_OUT],16(%[R_OUT])\n\t" \ - " clgijl %[R_INLEN],64,2f\n\t" \ - " clgijl %[R_OUTLEN],16,2f\n\t" \ - " j 1b\n\t" \ - /* Found a value > 0x7f. */ \ - "13: ahi %[R_TMP2],4\n\t" \ - "12: ahi %[R_TMP2],4\n\t" \ - "11: ahi %[R_TMP2],4\n\t" \ - "10: vlgvb %[R_TMP],%%v22,7\n\t" \ - " srlg %[R_TMP],%[R_TMP],2\n\t" \ - " agr %[R_TMP],%[R_TMP2]\n\t" \ - " je 16f\n\t" \ - /* Store characters before invalid one... */ \ - " slgr %[R_OUTLEN],%[R_TMP]\n\t" \ - "15: aghi %[R_TMP],-1\n\t" \ - " vstl %%v23,%[R_TMP],0(%[R_OUT])\n\t" \ - /* ... and update pointers. */ \ - " aghi %[R_TMP],1\n\t" \ - " la %[R_OUT],0(%[R_TMP],%[R_OUT])\n\t" \ - " sllg %[R_TMP2],%[R_TMP],2\n\t" \ - " la %[R_IN],0(%[R_TMP2],%[R_IN])\n\t" \ - " slgr %[R_INLEN],%[R_TMP2]\n\t" \ - /* Calculate remaining uint32_t values in loaded vrs. */ \ - "16: lghi %[R_TMP2],16\n\t" \ - " sgr %[R_TMP2],%[R_TMP]\n\t" \ - " l %[R_TMP],0(%[R_IN])\n\t" \ - " aghi %[R_INLEN],-4\n\t" \ - " j 22f\n\t" \ - /* Handle remaining bytes. */ \ - "2: clgije %[R_INLEN],0,99f\n\t" \ - " clgijl %[R_INLEN],4,92f\n\t" \ - /* Calculate remaining uint32_t values in inptr. */ \ - " srlg %[R_TMP2],%[R_INLEN],2\n\t" \ - /* Handle multibyte utf8-char. */ \ - "20: l %[R_TMP],0(%[R_IN])\n\t" \ - " aghi %[R_INLEN],-4\n\t" \ - /* Test if ch is 1byte UTF-8 char. */ \ - "21: clijh %[R_TMP],0x7f,22f\n\t" \ - /* Handle 1-byte UTF-8 char. */ \ - "31: slgfi %[R_OUTLEN],1\n\t" \ - " jl 90f \n\t" \ - " stc %[R_TMP],0(%[R_OUT])\n\t" \ - " la %[R_IN],4(%[R_IN])\n\t" \ - " la %[R_OUT],1(%[R_OUT])\n\t" \ - " brctg %[R_TMP2],20b\n\t" \ - " j 0b\n\t" /* Switch to vx-loop. */ \ - /* Test if ch is 2byte UTF-8 char. */ \ - "22: clfi %[R_TMP],0x7ff\n\t" \ - " jh 23f\n\t" \ - /* Handle 2-byte UTF-8 char. */ \ - "32: slgfi %[R_OUTLEN],2\n\t" \ - " jl 90f \n\t" \ - " llill %[R_TMP3],0xc080\n\t" \ - " risbgn %[R_TMP3],%[R_TMP],51,55,2\n\t" /* 1. byte. */ \ - " risbgn %[R_TMP3],%[R_TMP],58,63,0\n\t" /* 2. byte. */ \ - " sth %[R_TMP3],0(%[R_OUT])\n\t" \ - " la %[R_IN],4(%[R_IN])\n\t" \ - " la %[R_OUT],2(%[R_OUT])\n\t" \ - " brctg %[R_TMP2],20b\n\t" \ - " j 0b\n\t" /* Switch to vx-loop. */ \ - /* Test if ch is 3-byte UTF-8 char. */ \ - "23: clfi %[R_TMP],0xffff\n\t" \ - " jh 24f\n\t" \ - /* Handle 3-byte UTF-8 char. */ \ - "33: slgfi %[R_OUTLEN],3\n\t" \ - " jl 90f \n\t" \ - " llilf %[R_TMP3],0xe08080\n\t" \ - " risbgn %[R_TMP3],%[R_TMP],44,47,4\n\t" /* 1. byte. */ \ - " risbgn %[R_TMP3],%[R_TMP],50,55,2\n\t" /* 2. byte. */ \ - " risbgn %[R_TMP3],%[R_TMP],58,63,0\n\t" /* 3. byte. */ \ - /* Test if ch is a UTF-16 surrogate: ch & 0xf800 == 0xd800 */ \ - " nilf %[R_TMP],0xf800\n\t" \ - " clfi %[R_TMP],0xd800\n\t" \ - " je 91f\n\t" /* Do not accept UTF-16 surrogates. */ \ - " stcm %[R_TMP3],7,0(%[R_OUT])\n\t" \ - " la %[R_IN],4(%[R_IN])\n\t" \ - " la %[R_OUT],3(%[R_OUT])\n\t" \ - " brctg %[R_TMP2],20b\n\t" \ - " j 0b\n\t" /* Switch to vx-loop. */ \ - /* Test if ch is 4-byte UTF-8 char. */ \ - "24: clfi %[R_TMP],0x10ffff\n\t" \ - " jh 91f\n\t" /* ch > 0x10ffff is not allowed! */ \ - /* Handle 4-byte UTF-8 char. */ \ - "34: slgfi %[R_OUTLEN],4\n\t" \ - " jl 90f \n\t" \ - " llilf %[R_TMP3],0xf0808080\n\t" \ - " risbgn %[R_TMP3],%[R_TMP],37,39,6\n\t" /* 1. byte. */ \ - " risbgn %[R_TMP3],%[R_TMP],42,47,4\n\t" /* 2. byte. */ \ - " risbgn %[R_TMP3],%[R_TMP],50,55,2\n\t" /* 3. byte. */ \ - " risbgn %[R_TMP3],%[R_TMP],58,63,0\n\t" /* 4. byte. */ \ - " st %[R_TMP3],0(%[R_OUT])\n\t" \ - " la %[R_IN],4(%[R_IN])\n\t" \ - " la %[R_OUT],4(%[R_OUT])\n\t" \ - " brctg %[R_TMP2],20b\n\t" \ - " j 0b\n\t" /* Switch to vx-loop. */ \ - "92: lghi %[R_RES],%[RES_IN_FULL]\n\t" \ - " j 99f\n\t" \ - "91: lghi %[R_RES],%[RES_IN_ILL]\n\t" \ - " j 99f\n\t" \ - "90: lghi %[R_RES],%[RES_OUT_FULL]\n\t" \ - "99: \n\t" \ - ".machine pop" \ - : /* outputs */ [R_IN] "+a" (inptr) \ - , [R_INLEN] "+d" (inlen), [R_OUT] "+a" (outptr) \ - , [R_OUTLEN] "+d" (outlen), [R_TMP] "=a" (tmp) \ - , [R_TMP2] "=a" (tmp2), [R_TMP3] "=d" (tmp3) \ - , [R_RES] "+d" (result) \ - : /* inputs */ \ - [RES_OUT_FULL] "i" (__GCONV_FULL_OUTPUT) \ - , [RES_IN_ILL] "i" (__GCONV_ILLEGAL_INPUT) \ - , [RES_IN_FULL] "i" (__GCONV_INCOMPLETE_INPUT) \ - : /* clobber list */ "memory", "cc" \ - ASM_CLOBBER_VR ("v16") ASM_CLOBBER_VR ("v17") \ - ASM_CLOBBER_VR ("v18") ASM_CLOBBER_VR ("v19") \ - ASM_CLOBBER_VR ("v20") ASM_CLOBBER_VR ("v21") \ - ASM_CLOBBER_VR ("v22") ASM_CLOBBER_VR ("v23") \ - ASM_CLOBBER_VR ("v24") \ - ); \ - if (__glibc_likely (inptr == inend) \ - || result != __GCONV_ILLEGAL_INPUT) \ - break; \ - \ - STANDARD_TO_LOOP_ERR_HANDLER (4); \ - } - -/* Generate loop-function with hardware vector instructions. */ -# define MIN_NEEDED_INPUT MIN_NEEDED_TO -# define MIN_NEEDED_OUTPUT MIN_NEEDED_FROM -# define MAX_NEEDED_OUTPUT MAX_NEEDED_FROM -# define TO_LOOP_VX __to_utf8_loop_vx -# define LOOPFCT TO_LOOP_VX -# define BODY BODY_TO_VX -# define LOOP_NEED_FLAGS -# include -#else -# define TO_LOOP_VX NULL -#endif /* HAVE_TO_VX != 1 */ - -/* This file also exists in sysdeps/s390/multiarch/ which - generates ifunc resolvers for FROM/TO_LOOP functions - and includes iconv/skeleton.c afterwards. */ -#if ! defined USE_MULTIARCH -# include -#endif diff --git a/sysdeps/sh/Implies b/sysdeps/sh/Implies deleted file mode 100644 index 1fdc53d034..0000000000 --- a/sysdeps/sh/Implies +++ /dev/null @@ -1,4 +0,0 @@ -sh/soft-fp -wordsize-32 -ieee754/flt-32 -ieee754/dbl-64 diff --git a/sysdeps/sh/Makefile b/sysdeps/sh/Makefile deleted file mode 100644 index 0c6db9a9d4..0000000000 --- a/sysdeps/sh/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif - -ifeq ($(subdir),gmon) -sysdep_routines += _mcount -endif - -ifeq ($(subdir),debug) -CFLAGS-backtrace.c += -funwind-tables -endif diff --git a/sysdeps/sh/____longjmp_chk.S b/sysdeps/sh/____longjmp_chk.S deleted file mode 100644 index e49c08f027..0000000000 --- a/sysdeps/sh/____longjmp_chk.S +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - .section .rodata.str1.1,"aMS",@progbits,1 - .type longjmp_msg,@object -longjmp_msg: - .string "longjmp causes uninitialized stack frame" - .size longjmp_msg, .-longjmp_msg - .text - -#define __longjmp ____longjmp_chk - -#ifdef PIC -# define CALL_FAIL \ - mov.l .Lfail, r1; \ - mov.l .Lstr, r4; \ - mov.l r12, @-r15; \ - cfi_remember_state; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (r12, 0); \ - mova .Lgot, r0; \ - mov.l .Lgot, r12; \ - add r0, r12; \ - sts.l pr, @-r15; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (pr, 0); \ - bsrf r1; \ - add r12, r4; \ - /* Unreachable. */ \ -.Lfail0: \ - .align 2; \ -.Lgot: \ - .long _GLOBAL_OFFSET_TABLE_; \ -.Lstr: \ - .long longjmp_msg@GOTOFF; \ -.Lfail: \ - .long __GI___fortify_fail@PLT-(.Lfail0-.); \ - cfi_restore_state; -#else -# define CALL_FAIL \ - mov.l .Lfail, r1; \ - mov.l .Lstr, r4; \ - sts.l pr, @-r15; \ - cfi_remember_state; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (pr, 0); \ - jsr @r1; \ - nop; \ - /* Unreachable. */ \ - .align 2; \ -.Lstr: \ - .long longjmp_msg; \ -.Lfail: \ - .long __fortify_fail; \ - cfi_restore_state; -#endif - -#define CHECK_SP(reg) \ - cmp/hs r15, reg; \ - bt .Lok; \ - CALL_FAIL \ -.Lok: - -#include <__longjmp.S> diff --git a/sysdeps/sh/_mcount.S b/sysdeps/sh/_mcount.S deleted file mode 100644 index 1deee2ddad..0000000000 --- a/sysdeps/sh/_mcount.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Machine-specific calling sequence for `mcount' profiling function. SuperH - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by NIIBE Yutaka - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .globl C_SYMBOL_NAME(_mcount) - .type C_SYMBOL_NAME(_mcount),@function - cfi_startproc - .align 5 -C_LABEL(_mcount) - /* Save registers. */ - mov.l r4,@-r15 - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r4, 0) - mov.l r5,@-r15 - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r5, 0) - mov.l r6,@-r15 - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r6, 0) - mov.l r7,@-r15 - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r7, 0) - sts.l pr,@-r15 - cfi_adjust_cfa_offset (4) - cfi_rel_offset (pr, 0) - - mov.l @(20,r15),r4 - sts pr,r5 - -#ifdef SHARED - mov.l 0f,r1 - mova 0f,r0 - add r1,r0 - mov.l 1f,r1 - mov.l @(r0,r1),r1 -#else - mov.l 1f,r1 -#endif - jsr @r1 - nop - - /* Pop the saved registers. */ - lds.l @r15+,pr - cfi_adjust_cfa_offset (-4) - cfi_restore (pr) - mov.l @r15+,r7 - cfi_adjust_cfa_offset (-4) - cfi_restore (r7) - mov.l @r15+,r6 - cfi_adjust_cfa_offset (-4) - cfi_restore (r6) - mov.l @r15+,r5 - cfi_adjust_cfa_offset (-4) - cfi_restore (r5) - rts - mov.l @r15+,r4 - /* Omit CFI for restore in delay slot. */ - - .align 2 -#ifdef SHARED -0: .long _GLOBAL_OFFSET_TABLE_ -1: .long C_SYMBOL_NAME(__mcount_internal)@GOT -#else -1: .long C_SYMBOL_NAME(__mcount_internal) -#endif - cfi_endproc -ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount)) - -#undef mcount -weak_alias (_mcount, mcount) diff --git a/sysdeps/sh/abort-instr.h b/sysdeps/sh/abort-instr.h deleted file mode 100644 index 69381aec8e..0000000000 --- a/sysdeps/sh/abort-instr.h +++ /dev/null @@ -1,3 +0,0 @@ -/* An instruction which should crash any program is `sleep'. */ -#define ABORT_INSTRUCTION_ASM sleep -#define ABORT_INSTRUCTION asm ("sleep") diff --git a/sysdeps/sh/backtrace.c b/sysdeps/sh/backtrace.c deleted file mode 100644 index 4f3eafb09c..0000000000 --- a/sysdeps/sh/backtrace.c +++ /dev/null @@ -1 +0,0 @@ -#include "../x86_64/backtrace.c" diff --git a/sysdeps/sh/bits/endian.h b/sysdeps/sh/bits/endian.h deleted file mode 100644 index 1fef1ff938..0000000000 --- a/sysdeps/sh/bits/endian.h +++ /dev/null @@ -1,13 +0,0 @@ -/* SH is bi-endian but with a big-endian FPU. */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#ifdef __LITTLE_ENDIAN__ -#define __BYTE_ORDER __LITTLE_ENDIAN -#define __FLOAT_WORD_ORDER __LITTLE_ENDIAN -#else -#define __BYTE_ORDER __BIG_ENDIAN -#define __FLOAT_WORD_ORDER __BIG_ENDIAN -#endif diff --git a/sysdeps/sh/bits/fenv.h b/sysdeps/sh/bits/fenv.h deleted file mode 100644 index a121efb101..0000000000 --- a/sysdeps/sh/bits/fenv.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - - -/* Define bits representing the exception. We use the bit positions - of the appropriate bits in the FPU control word. */ -enum - { - FE_INEXACT = -#define FE_INEXACT 0x04 - FE_INEXACT, - FE_UNDERFLOW = -#define FE_UNDERFLOW 0x08 - FE_UNDERFLOW, - FE_OVERFLOW = -#define FE_OVERFLOW 0x10 - FE_OVERFLOW, - FE_DIVBYZERO = -#define FE_DIVBYZERO 0x20 - FE_DIVBYZERO, - FE_INVALID = -#define FE_INVALID 0x40 - FE_INVALID, - }; - -#define FE_ALL_EXCEPT \ - (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) - -/* The SH FPU supports two of the four defined rounding modes: round to nearest - and round to zero. We use again the bit positions in the FPU control word - as the values for the appropriate macros. */ -enum - { - __FE_UNDEFINED = -1, - - FE_TONEAREST = -#define FE_TONEAREST 0x0 - FE_TONEAREST, - FE_TOWARDZERO = -#define FE_TOWARDZERO 0x1 - FE_TOWARDZERO, - }; - - -/* Type representing exception flags. */ -typedef unsigned short int fexcept_t; - - -/* Type representing floating-point environment. This function corresponds - to the layout of the block written by the `fstenv'. */ -typedef struct - { - unsigned int __fpscr; - } -fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1) - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef unsigned int femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) -1L) -#endif diff --git a/sysdeps/sh/bits/huge_val.h b/sysdeps/sh/bits/huge_val.h deleted file mode 100644 index aab7a23b17..0000000000 --- a/sysdeps/sh/bits/huge_val.h +++ /dev/null @@ -1,54 +0,0 @@ -/* `HUGE_VAL' constants for IEEE 754 machines (where it is infinity). - Used by and functions for overflow. - SH version. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -/* IEEE positive infinity (-HUGE_VAL is negative infinity). */ - -#if __GNUC_PREREQ(3,3) -# define HUGE_VAL (__builtin_huge_val()) -#elif __GNUC_PREREQ(2,96) -# define HUGE_VAL (__extension__ 0x1.0p2047) -#elif defined __GNUC__ - -# define HUGE_VAL \ - (__extension__ \ - ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; }) \ - { __l: 0x000000007ff00000ULL }).__d) - -#else /* not GCC */ - -# include - -typedef union { unsigned char __c[8]; double __d; } __huge_val_t; - -# if __BYTE_ORDER == __BIG_ENDIAN -# define __HUGE_VAL_bytes { 0, 0, 0, 0, 0x7f, 0xf0, 0, 0 } -# endif -# if __BYTE_ORDER == __LITTLE_ENDIAN -# define __HUGE_VAL_bytes { 0, 0, 0xf0, 0x7f, 0, 0, 0, 0 } -# endif - -static __huge_val_t __huge_val = { __HUGE_VAL_bytes }; -# define HUGE_VAL (__huge_val.__d) - -#endif /* GCC. */ diff --git a/sysdeps/sh/bits/link.h b/sysdeps/sh/bits/link.h deleted file mode 100644 index 0427ebc961..0000000000 --- a/sysdeps/sh/bits/link.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - - -/* Registers for entry into PLT on SH. */ -typedef struct La_sh_regs -{ - uint32_t lr_r2; - uint32_t lr_r3; - uint32_t lr_r4; - uint32_t lr_r5; - uint32_t lr_r6; - uint32_t lr_r7; - uint32_t lr_fpscr; - float lr_fr4; - float lr_fr5; - float lr_fr6; - float lr_fr7; - float lr_fr8; - float lr_fr9; - float lr_fr10; - float lr_fr11; -} La_sh_regs; - -/* Return values for calls from PLT on SH. */ -typedef struct La_sh_retval -{ - uint32_t lrv_r0; - uint32_t lrv_r1; - float lrv_fr0; - float lrv_fr1; -} La_sh_retval; - - -__BEGIN_DECLS - -extern Elf32_Addr la_sh_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_sh_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_sh_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_sh_regs *__inregs, - La_sh_retval *__outregs, - const char *__symname); - -__END_DECLS diff --git a/sysdeps/sh/bits/setjmp.h b/sysdeps/sh/bits/setjmp.h deleted file mode 100644 index 11617d7c8a..0000000000 --- a/sysdeps/sh/bits/setjmp.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define the machine-dependent type `jmp_buf'. SH version. */ -#ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include directly; use instead." -#endif - -#ifndef _ASM -typedef struct __jmp_buf_internal_tag - { - /* Callee-saved registers r8 through r15. */ - int __regs[8]; - - /* Program counter. */ - void * __pc; - - /* The global pointer. */ - void * __gbr; - - /* Floating point status register. */ - int __fpscr; - - /* Callee-saved floating point registers fr12 through fr15. */ - int __fpregs[4]; - } __jmp_buf[1]; -#endif - -#endif /* bits/setjmp.h */ diff --git a/sysdeps/sh/bsd-_setjmp.S b/sysdeps/sh/bsd-_setjmp.S deleted file mode 100644 index d5d011ec6c..0000000000 --- a/sysdeps/sh/bsd-_setjmp.S +++ /dev/null @@ -1,51 +0,0 @@ -/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. SH version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 0)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include - -ENTRY (_setjmp) -#ifdef SHARED - mova 1f, r0 - mov.l 1f, r1 - bra 2f - add r1, r0 - .align 2 -1: - .long _GLOBAL_OFFSET_TABLE_ -2: - mov.l 3f, r1 - mov.l @(r0,r1), r1 - jmp @r1 - mov #0, r5 - .align 2 -3: - .long C_SYMBOL_NAME(__sigsetjmp@GOT) -#else - mov.l 1f, r1 - jmp @r1 - mov #0, r5 - .align 2 -1: - .long C_SYMBOL_NAME(__sigsetjmp) -#endif -END (_setjmp) -libc_hidden_def (_setjmp) diff --git a/sysdeps/sh/bsd-setjmp.S b/sysdeps/sh/bsd-setjmp.S deleted file mode 100644 index 73e4209e73..0000000000 --- a/sysdeps/sh/bsd-setjmp.S +++ /dev/null @@ -1,50 +0,0 @@ -/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. SH version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include - -ENTRY (setjmp) -#ifdef SHARED - mova 1f, r0 - mov.l 1f, r1 - bra 2f - add r1, r0 - .align 2 -1: - .long _GLOBAL_OFFSET_TABLE_ -2: - mov.l 3f, r1 - mov.l @(r0,r1), r1 - jmp @r1 - mov #1, r5 - .align 2 -3: - .long C_SYMBOL_NAME(__sigsetjmp@GOT) -#else - mov.l 1f, r1 - jmp @r1 - mov #1, r5 - .align 2 -1: - .long C_SYMBOL_NAME(__sigsetjmp) -#endif -END (setjmp) diff --git a/sysdeps/sh/configure b/sysdeps/sh/configure deleted file mode 100644 index 110eb65b06..0000000000 --- a/sysdeps/sh/configure +++ /dev/null @@ -1,5 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/sh. - -$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h - diff --git a/sysdeps/sh/configure.ac b/sysdeps/sh/configure.ac deleted file mode 100644 index 21400c447d..0000000000 --- a/sysdeps/sh/configure.ac +++ /dev/null @@ -1,6 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/sh. - -dnl It is always possible to access static and hidden symbols in an -dnl position independent way. -AC_DEFINE(PI_STATIC_AND_HIDDEN) diff --git a/sysdeps/sh/crti.S b/sysdeps/sh/crti.S deleted file mode 100644 index d19de956a6..0000000000 --- a/sysdeps/sh/crti.S +++ /dev/null @@ -1,120 +0,0 @@ -/* Special .init and .fini section support for SH. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - - .section .init,"ax",@progbits - .align 5 - .global _init - .type _init, @function -_init: - mov.l r12,@-r15 - mova .L12,r0 - mov.l .L12,r12 - mov.l r14,@-r15 - add r0,r12 - sts.l pr,@-r15 -#if PREINIT_FUNCTION_WEAK - mov.l .L13,r0 - mov.l @(r0,r12),r1 - tst r1,r1 - bt/s .L8 - mov r15,r14 - mov.l .L14,r1 - bsrf r1 -.LPCS0: - nop -.L8: -#else - mova .L13,r0 - mov.l .L13,r1 - add r0,r1 - jsr @r1 - mov r15,r14 -#endif - bra 1f - nop - .align 2 -.L12: - .long _GLOBAL_OFFSET_TABLE_ -#if PREINIT_FUNCTION_WEAK -.L13: - .long PREINIT_FUNCTION@GOT -.L14: - .long PREINIT_FUNCTION@PLT-(.LPCS0+2-(.)) -#else -.L13: - .long PREINIT_FUNCTION@PLT -#endif -1: - - .section .fini,"ax",@progbits - .align 5 - .global _fini - .type _fini, @function -_fini: - mov.l r12,@-r15 - mova .L19,r0 - mov.l r14,@-r15 - sts.l pr,@-r15 - mov.l .L19,r12 - mov r15,r14 - add r0,r12 - bra 0f - nop - .align 2 -.L19: - .long _GLOBAL_OFFSET_TABLE_ -0: diff --git a/sysdeps/sh/crtn.S b/sysdeps/sh/crtn.S deleted file mode 100644 index 128f951e90..0000000000 --- a/sysdeps/sh/crtn.S +++ /dev/null @@ -1,53 +0,0 @@ -/* Special .init and .fini section support for SH. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .section .init,"ax",@progbits - mov r14,r15 - lds.l @r15+,pr - mov.l @r15+,r14 - mov.l @r15+,r12 - rts - nop - - .section .fini,"ax",@progbits - mov r14,r15 - lds.l @r15+,pr - mov.l @r15+,r14 - mov.l @r15+,r12 - rts - nop diff --git a/sysdeps/sh/dl-machine.h b/sysdeps/sh/dl-machine.h deleted file mode 100644 index 2b468af6fa..0000000000 --- a/sysdeps/sh/dl-machine.h +++ /dev/null @@ -1,466 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. SH version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "SH" - -#include -#include -#include - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int __attribute__ ((unused)) -elf_machine_matches_host (const Elf32_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_SH; -} - - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. This must be inlined in a function which - uses global data. */ -static inline Elf32_Addr __attribute__ ((unused)) -elf_machine_dynamic (void) -{ - register Elf32_Addr *got; - asm ("mov r12,%0" :"=r" (got)); - return *got; -} - - -/* Return the run-time load address of the shared object. */ -static inline Elf32_Addr __attribute__ ((unused)) -elf_machine_load_address (void) -{ - Elf32_Addr addr; - asm ("mov.l 1f,r0\n\ - mov.l 3f,r2\n\ - add r12,r2\n\ - mov.l @(r0,r12),r0\n\ - bra 2f\n\ - sub r0,r2\n\ - .align 2\n\ - 1: .long _dl_start@GOT\n\ - 3: .long _dl_start@GOTOFF\n\ - 2: mov r2,%0" - : "=r" (addr) : : "r0", "r1", "r2"); - return addr; -} - - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int __attribute__ ((unused, always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - Elf32_Addr *got; - extern void _dl_runtime_resolve (Elf32_Word); - extern void _dl_runtime_profile (Elf32_Word); - - if (l->l_info[DT_JMPREL] && lazy) - { - /* The GOT entries for functions in the PLT have not yet been filled - in. Their initial contents will arrange when called to load an - offset into the .rela.plt section and _GLOBAL_OFFSET_TABLE_[1], - and then jump to _GLOBAL_OFFSET_TABLE[2]. */ - got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]); - /* If a library is prelinked but we have to relocate anyway, - we have to be able to undo the prelinking of .got.plt. - The prelinker saved us here address of .plt + 36. */ - if (got[1]) - { - l->l_mach.plt = got[1] + l->l_addr; - l->l_mach.gotplt = (Elf32_Addr) &got[3]; - } - got[1] = (Elf32_Addr) l; /* Identify this shared object. */ - - /* The got[2] entry contains the address of a function which gets - called to get the address of a so far unresolved function and - jump to it. The profiling extension of the dynamic linker allows - to intercept the calls to collect information. In this case we - don't store the address in the GOT so that all future calls also - end in this function. */ - if (profile) - { - got[2] = (Elf32_Addr) &_dl_runtime_profile; - /* Say that we really want profiling and the timers are started. */ - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - GL(dl_profile_map) = l; - } - else - /* This function will get called to fix up the GOT entry indicated by - the offset on the stack, and then jump to the resolved address. */ - got[2] = (Elf32_Addr) &_dl_runtime_resolve; - } - return lazy; -} - -#define ELF_MACHINE_RUNTIME_FIXUP_ARGS int plt_type -#define ELF_MACHINE_RUNTIME_FIXUP_PARAMS plt_type - -/* Mask identifying addresses reserved for the user program, - where the dynamic linker should not map anything. */ -#define ELF_MACHINE_USER_ADDRESS_MASK 0x80000000UL - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START asm ("\ -.text\n\ -.globl _start\n\ -.globl _dl_start_user\n\ -_start:\n\ - mov r15,r4\n\ - mov.l .L_dl_start,r1\n\ - mova .L_dl_start,r0\n\ - add r1,r0\n\ - jsr @r0\n\ - nop\n\ -_dl_start_user:\n\ - ! Save the user entry point address in r8.\n\ - mov r0,r8\n\ - ! Point r12 at the GOT.\n\ - mov.l 1f,r12\n\ - mova 1f,r0\n\ - bra 2f\n\ - add r0,r12\n\ - .align 2\n\ -1: .long _GLOBAL_OFFSET_TABLE_\n\ -2: ! See if we were run as a command with the executable file\n\ - ! name as an extra leading argument.\n\ - mov.l .L_dl_skip_args,r0\n\ - mov.l @(r0,r12),r0\n\ - mov.l @r0,r0\n\ - ! Get the original argument count.\n\ - mov.l @r15,r5\n\ - ! Subtract _dl_skip_args from it.\n\ - sub r0,r5\n\ - ! Adjust the stack pointer to skip _dl_skip_args words.\n\ - shll2 r0\n\ - add r0,r15\n\ - ! Store back the modified argument count.\n\ - mov.l r5,@r15\n\ - ! Compute argv address and envp.\n\ - mov r15,r6\n\ - add #4,r6\n\ - mov r5,r7\n\ - shll2 r7\n\ - add r15,r7\n\ - add #8,r7\n\ - mov.l .L_dl_loaded,r0\n\ - mov.l @(r0,r12),r0\n\ - mov.l @r0,r4\n\ - ! Call _dl_init.\n\ - mov.l .L_dl_init,r1\n\ - mova .L_dl_init,r0\n\ - add r1,r0\n\ - jsr @r0\n\ - nop\n\ -1: ! Pass our finalizer function to the user in r4, as per ELF ABI.\n\ - mov.l .L_dl_fini,r0\n\ - mov.l @(r0,r12),r4\n\ - ! Jump to the user's entry point.\n\ - jmp @r8\n\ - nop\n\ - .align 2\n\ -.L_dl_start:\n\ - .long _dl_start@PLT\n\ -.L_dl_skip_args:\n\ - .long _dl_skip_args@GOT\n\ -.L_dl_init:\n\ - .long _dl_init@PLT\n\ -.L_dl_loaded:\n\ - .long _rtld_local@GOT\n\ -.L_dl_fini:\n\ - .long _dl_fini@GOT\n\ - .type __fpscr_values,@object\n\ - .global __fpscr_values\n\ -__fpscr_values:\n\ - .long 0\n\ - .long 0x80000\n\ - .weak __fpscr_values\n\ -.previous\n\ -"); - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or - TLS variable, so undefined references should not be allowed to - define the value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. */ -#define elf_machine_type_class(type) \ - ((((type) == R_SH_JMP_SLOT || (type) == R_SH_TLS_DTPMOD32 \ - || (type) == R_SH_TLS_DTPOFF32 || (type) == R_SH_TLS_TPOFF32) \ - * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_SH_COPY) * ELF_RTYPE_CLASS_COPY)) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_SH_JMP_SLOT - -/* We define an initialization functions. This is called very early in - _dl_sysdep_start. */ -#define DL_PLATFORM_INIT dl_platform_init () - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ - if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') - /* Avoid an empty string which would disturb us. */ - GLRO(dl_platform) = NULL; -} - -static inline Elf32_Addr -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf32_Rela *reloc, - Elf32_Addr *reloc_addr, Elf32_Addr value) -{ - return *reloc_addr = value; -} - -/* Return the final value of a plt relocation. */ -static inline Elf32_Addr -elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, - Elf32_Addr value) -{ - return value + reloc->r_addend; -} - -#define ARCH_LA_PLTENTER sh_gnu_pltenter -#define ARCH_LA_PLTEXIT sh_gnu_pltexit - -#endif /* !dl_machine_h */ - -/* SH never uses Elf32_Rel relocations. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -#ifdef RESOLVE_MAP - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ - -auto inline void -__attribute ((always_inline)) -elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, - const Elf32_Sym *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - Elf32_Addr value; - -#define COPY_UNALIGNED_WORD(swp, twp, align) \ - { \ - void *__s = (swp), *__t = (twp); \ - unsigned char *__s1 = __s, *__t1 = __t; \ - unsigned short *__s2 = __s, *__t2 = __t; \ - unsigned long *__s4 = __s, *__t4 = __t; \ - switch ((align)) \ - { \ - case 0: \ - *__t4 = *__s4; \ - break; \ - case 2: \ - *__t2++ = *__s2++; \ - *__t2 = *__s2; \ - break; \ - default: \ - *__t1++ = *__s1++; \ - *__t1++ = *__s1++; \ - *__t1++ = *__s1++; \ - *__t1 = *__s1; \ - break; \ - } \ - } - - if (__glibc_unlikely (r_type == R_SH_RELATIVE)) - { -#ifndef RTLD_BOOTSTRAP - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ -#endif - { - if (reloc->r_addend) - value = map->l_addr + reloc->r_addend; - else - { - COPY_UNALIGNED_WORD (reloc_addr_arg, &value, - (int) reloc_addr_arg & 3); - value += map->l_addr; - } - COPY_UNALIGNED_WORD (&value, reloc_addr_arg, - (int) reloc_addr_arg & 3); - } - } -#ifndef RTLD_BOOTSTRAP - else if (__glibc_unlikely (r_type == R_SH_NONE)) - return; -#endif - else - { - const Elf32_Sym *const refsym = sym; - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - - value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; - value += reloc->r_addend; - - switch (r_type) - { - case R_SH_COPY: - if (sym == NULL) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (sym->st_size > refsym->st_size - || (sym->st_size < refsym->st_size && GLRO(dl_verbose))) - { - const char *strtab; - - strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - break; - case R_SH_GLOB_DAT: - case R_SH_JMP_SLOT: - /* These addresses are always aligned. */ - *reloc_addr = value; - break; - /* XXX Remove TLS relocations which are not needed. */ - case R_SH_TLS_DTPMOD32: -#ifdef RTLD_BOOTSTRAP - /* During startup the dynamic linker is always the module - with index 1. - XXX If this relocation is necessary move before RESOLVE - call. */ - *reloc_addr = 1; -#else - /* Get the information from the link map returned by the - resolv function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; -#endif - break; - case R_SH_TLS_DTPOFF32: -#ifndef RTLD_BOOTSTRAP - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ - if (sym != NULL) - *reloc_addr = sym->st_value; -#endif - break; - case R_SH_TLS_TPOFF32: - /* The offset is positive, afterward from the thread pointer. */ -#ifdef RTLD_BOOTSTRAP - *reloc_addr = map->l_tls_offset + sym->st_value + reloc->r_addend; -#else - /* We know the offset of object the symbol is contained in. - It is a positive value which will be added to the thread - pointer. To get the variable position in the TLS block - we add the offset from that of the TLS block. */ - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = sym_map->l_tls_offset + sym->st_value - + reloc->r_addend; - } -#endif - break; - case R_SH_DIR32: - { -#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP - /* This is defined in rtld.c, but nowhere in the static - libc.a; make the reference weak so static programs can - still link. This declaration cannot be done when - compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) because - rtld.c contains the common defn for _dl_rtld_map, which - is incompatible with a weak decl in the same file. */ -# ifndef SHARED - weak_extern (_dl_rtld_map); -# endif - if (map == &GL(dl_rtld_map)) - /* Undo the relocation done here during bootstrapping. - Now we will relocate it anew, possibly using a - binding found in the user program or a loaded library - rather than the dynamic linker's built-in definitions - used while loading those libraries. */ - value -= map->l_addr + refsym->st_value + reloc->r_addend; -#endif - COPY_UNALIGNED_WORD (&value, reloc_addr_arg, - (int) reloc_addr_arg & 3); - break; - } - case R_SH_REL32: - value = (value - (Elf32_Addr) reloc_addr); - COPY_UNALIGNED_WORD (&value, reloc_addr_arg, - (int) reloc_addr_arg & 3); - break; - default: - _dl_reloc_bad_type (map, r_type, 0); - break; - } - } -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, - void *const reloc_addr_arg) -{ - Elf32_Addr value; - - if (reloc->r_addend) - value = l_addr + reloc->r_addend; - else - { - COPY_UNALIGNED_WORD (reloc_addr_arg, &value, (int) reloc_addr_arg & 3); - value += l_addr; - } - COPY_UNALIGNED_WORD (&value, reloc_addr_arg, (int) reloc_addr_arg & 3); - -#undef COPY_UNALIGNED_WORD -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf32_Addr l_addr, const Elf32_Rela *reloc, - int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); - /* Check for unexpected PLT reloc type. */ - if (ELF32_R_TYPE (reloc->r_info) == R_SH_JMP_SLOT) - { - if (__builtin_expect (map->l_mach.plt, 0) == 0) - *reloc_addr += l_addr; - else - *reloc_addr = - map->l_mach.plt - + (((Elf32_Addr) reloc_addr) - map->l_mach.gotplt) * 7; - } - else - _dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 1); -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/sh/dl-tls.h b/sysdeps/sh/dl-tls.h deleted file mode 100644 index 3f094a77a0..0000000000 --- a/sysdeps/sh/dl-tls.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. SH version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - - -extern void *__tls_get_addr (tls_index *ti); diff --git a/sysdeps/sh/dl-trampoline.S b/sysdeps/sh/dl-trampoline.S deleted file mode 100644 index 3dfed100b2..0000000000 --- a/sysdeps/sh/dl-trampoline.S +++ /dev/null @@ -1,430 +0,0 @@ -/* PLT trampolines. SH version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text - .globl _dl_runtime_resolve - .type _dl_runtime_resolve, @function - cfi_startproc - .align 5 -_dl_runtime_resolve: - mov.l r2,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r3,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r4,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r5,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r6,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r7,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r12,@-r15 - cfi_adjust_cfa_offset (4) - sts.l macl,@-r15 - cfi_adjust_cfa_offset (4) - sts.l mach,@-r15 - cfi_adjust_cfa_offset (4) - movt r3 ! Save T flag. - mov.l r3,@-r15 - cfi_adjust_cfa_offset (4) -#ifdef HAVE_FPU - sts.l fpscr,@-r15 - cfi_adjust_cfa_offset (4) - mov #8,r3 - swap.w r3,r3 - lds r3,fpscr - fmov.s fr11,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr10,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr9,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr8,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr7,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr6,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr5,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr4,@-r15 - cfi_adjust_cfa_offset (4) -#endif - sts.l pr,@-r15 - cfi_adjust_cfa_offset (4) - tst r0,r0 - bt 1f - mov r0,r2 -1: - mov r0,r4 ! PLT type - mov r2,r5 ! link map address -#ifdef SHARED - mov.l 2f,r2 - mova 2f,r0 - add r0,r2 ! Get GOT address in r2 - mov.l 3f,r0 - add r2,r0 -#else - mov.l 3f,r0 -#endif - jsr @r0 ! Call resolver. - mov r1,r6 ! reloc offset - lds.l @r15+,pr ! Get register content back. - cfi_adjust_cfa_offset (-4) -#ifdef HAVE_FPU - fmov.s @r15+,fr4 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr5 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr6 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr7 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr8 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr9 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr10 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr11 - cfi_adjust_cfa_offset (-4) - lds.l @r15+,fpscr - cfi_adjust_cfa_offset (-4) -#endif - mov.l @r15+,r3 - cfi_adjust_cfa_offset (-4) - shal r3 ! Lode T flag. - lds.l @r15+,mach - cfi_adjust_cfa_offset (-4) - lds.l @r15+,macl - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r12 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r7 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r6 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r5 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r4 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r3 - cfi_adjust_cfa_offset (-4) - jmp @r0 ! Jump to function address. - mov.l @r15+,r2 - cfi_adjust_cfa_offset (-4) - .align 2 -#ifdef SHARED -2: .long _GLOBAL_OFFSET_TABLE_ -3: .long _dl_fixup@GOTOFF -#else -3: .long _dl_fixup -#endif - cfi_endproc - .size _dl_runtime_resolve, .-_dl_runtime_resolve - - - .globl _dl_runtime_profile - .type _dl_runtime_profile,@function - cfi_startproc - .align 5 -_dl_runtime_profile: - mov.l r12,@-r15 - cfi_adjust_cfa_offset (4) -#ifdef HAVE_FPU - sts.l fpscr,@-r15 - cfi_adjust_cfa_offset (4) - mov #8,r12 - swap.w r12,r12 - lds r12,fpscr - fmov.s fr11,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr10,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr9,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr8,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr7,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr6,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr5,@-r15 - cfi_adjust_cfa_offset (4) - fmov.s fr4,@-r15 - cfi_adjust_cfa_offset (4) -#else - add #-36,r15 - cfi_adjust_cfa_offset (36) -#endif - mov.l r7,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r6,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r5,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r4,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r3,@-r15 - cfi_adjust_cfa_offset (4) - mov.l r2,@-r15 - cfi_adjust_cfa_offset (4) - sts.l macl,@-r15 - cfi_adjust_cfa_offset (4) - sts.l mach,@-r15 - cfi_adjust_cfa_offset (4) - movt r3 ! Save T flag. - mov.l r3,@-r15 - cfi_adjust_cfa_offset (4) - sts.l pr,@-r15 - cfi_adjust_cfa_offset (4) - tst r0,r0 - bt 1f - mov r0,r2 -1: - mov r0,r4 ! PLT type - mov r2,r5 ! link map address - sts pr,r7 ! return address - add #-24,r15 - cfi_adjust_cfa_offset (24) - mov #40,r0 - add r15,r0 - mov.l r0,@r15 ! Address of the register structure - mov #-1,r0 - mov.l r0,@(8,r15) - mov #8,r0 - add r15,r0 - mov.l r0,@(4,r15) - mov.l r5,@(12,r15) - mov.l r1,@(16,r15) -#ifdef SHARED - mov.l 2f,r12 - mova 2f,r0 - add r0,r12 ! Get GOT address in r12 - mov.l 3f,r0 - add r12,r0 -#else - mov.l 3f,r0 -#endif - jsr @r0 ! Call resolver. - mov r1,r6 ! reloc offset - mov.l @(8,r15),r1 - cmp/pz r1 - bt 4f - add #24,r15 - cfi_adjust_cfa_offset (-24) - lds.l @r15+,pr ! Get register content back. - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r3 - cfi_adjust_cfa_offset (-4) - shal r3 ! Lode T flag. - lds.l @r15+,mach - cfi_adjust_cfa_offset (-4) - lds.l @r15+,macl - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r2 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r3 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r4 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r5 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r6 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r7 - cfi_adjust_cfa_offset (-4) -#ifdef HAVE_FPU - fmov.s @r15+,fr4 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr5 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr6 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr7 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr8 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr9 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr10 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr11 - cfi_adjust_cfa_offset (-4) - lds.l @r15+,fpscr - cfi_adjust_cfa_offset (-4) -#else - add #36,r15 - cfi_adjust_cfa_offset (-36) -#endif - jmp @r0 ! Jump to function address. - mov.l @r15+,r12 - cfi_adjust_cfa_offset (-4) - .align 2 -#ifdef SHARED -2: .long _GLOBAL_OFFSET_TABLE_ -3: .long _dl_profile_fixup@GOTOFF -#else -3: .long _dl_profile_fixup -#endif - - cfi_adjust_cfa_offset (104) -4: - mov #104,r3 - add r15,r3 ! Original stack - mov.l r8,@(20,r15) - cfi_rel_offset (r8, 20) - mov r15,r8 - sub r1,r15 - shlr2 r15 - shll2 r15 - mov r15,r4 - shlr2 r1 - tst r1,r1 -5: - bt/s 6f - dt r1 - mov.l @r3+,r2 - mov.l r2,@r4 - bra 5b - add #4,r4 -6: - mov.l @r8,r12 - mov.l @r12+,r2 - mov.l @r12+,r3 - mov.l @r12+,r4 - mov.l @r12+,r5 - mov.l @r12+,r6 - mov.l @r12+,r7 -#ifdef HAVE_FPU - fmov.s @r12+,fr4 - fmov.s @r12+,fr5 - fmov.s @r12+,fr6 - fmov.s @r12+,fr7 - fmov.s @r12+,fr8 - fmov.s @r12+,fr9 - fmov.s @r12+,fr10 - fmov.s @r12+,fr11 - lds.l @r12+,fpscr -#else - add #36,r2 -#endif - jsr @r0 ! Call function. - nop - mov r8,r15 - mov.l @(12,r15),r4 ! link map address - mov.l @(16,r15),r5 ! reloc offset - mov.l @r15,r6 ! input registers -#ifdef HAVE_FPU - mov #16,r8 - add r15,r8 - fmov.s fr1,@-r8 - fmov.s fr0,@-r8 -#else - mov #8,r8 - add r15,r8 -#endif - mov.l r1,@-r8 - mov.l r0,@-r8 - mov.l @(20,r15),r8 - cfi_restore (r8) -#ifdef SHARED - mov.l 7f,r12 - mova 7f,r0 - add r0,r12 ! Get GOT address in r12 - mov.l 8f,r0 - add r12,r0 -#else - mov.l 8f,r0 -#endif - jsr @r0 - mov r15,r7 ! output registers - mov.l @r15+,r0 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r1 - cfi_adjust_cfa_offset (-4) -#ifdef HAVE_FPU - fmov.s @r15+,fr0 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr1 - cfi_adjust_cfa_offset (-4) - add #8,r15 - cfi_adjust_cfa_offset (-8) -#else - add #16,r15 - cfi_adjust_cfa_offset (-16) -#endif - lds.l @r15+,pr ! Get register content back. - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r3 - cfi_adjust_cfa_offset (-4) - shal r3 ! Lode T flag. - lds.l @r15+,mach - cfi_adjust_cfa_offset (-4) - lds.l @r15+,macl - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r2 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r3 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r4 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r5 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r6 - cfi_adjust_cfa_offset (-4) - mov.l @r15+,r7 - cfi_adjust_cfa_offset (-4) -#ifdef HAVE_FPU - fmov.s @r15+,fr4 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr5 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr6 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr7 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr8 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr9 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr10 - cfi_adjust_cfa_offset (-4) - fmov.s @r15+,fr11 - cfi_adjust_cfa_offset (-4) - lds.l @r15+,fpscr - cfi_adjust_cfa_offset (-4) -#else - add #36,r15 - cfi_adjust_cfa_offset (-36) -#endif - rts ! Jump to function address. - mov.l @r15+,r12 - cfi_adjust_cfa_offset (-4) - cfi_endproc - .align 2 -#ifdef SHARED -7: .long _GLOBAL_OFFSET_TABLE_ -8: .long _dl_call_pltexit@GOTOFF -#else -8: .long _dl_call_pltexit -#endif - .size _dl_runtime_profile, .-_dl_runtime_profile diff --git a/sysdeps/sh/fpu_control.h b/sysdeps/sh/fpu_control.h deleted file mode 100644 index df2627ad1e..0000000000 --- a/sysdeps/sh/fpu_control.h +++ /dev/null @@ -1,76 +0,0 @@ -/* FPU control word definitions. SH version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FPU_CONTROL_H -#define _FPU_CONTROL_H - -#if !defined(__SH_FPU_ANY__) - -#define _FPU_RESERVED 0xffffffff -#define _FPU_DEFAULT 0x00000000 -typedef unsigned int fpu_control_t; -#define _FPU_GETCW(cw) (cw) = 0 -#define _FPU_SETCW(cw) (void) (cw) -extern fpu_control_t __fpu_control; - -#else - -#include - -/* masking of interrupts */ -#define _FPU_MASK_VM 0x0800 /* Invalid operation */ -#define _FPU_MASK_ZM 0x0400 /* Division by zero */ -#define _FPU_MASK_OM 0x0200 /* Overflow */ -#define _FPU_MASK_UM 0x0100 /* Underflow */ -#define _FPU_MASK_IM 0x0080 /* Inexact operation */ - -/* rounding control */ -#define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */ -#define _FPU_RC_ZERO 0x1 - -#define _FPU_RESERVED 0xffc00000 /* These bits are reserved. */ - -/* The fdlibm code requires strict IEEE double precision arithmetic, - and no interrupts for exceptions, rounding to nearest. */ -#define _FPU_DEFAULT 0x00080000 /* Default value. */ -#define _FPU_IEEE 0x00080f80 /* Default + exceptions enabled. */ - -/* Type of the control word. */ -typedef unsigned int fpu_control_t; - -/* Macros for accessing the hardware control word. */ -#define _FPU_GETCW(cw) __asm__ ("sts fpscr,%0" : "=r" (cw)) - -#if defined __GNUC__ -__BEGIN_DECLS - -/* GCC provides this function. */ -extern void __set_fpscr (unsigned long); -#define _FPU_SETCW(cw) __set_fpscr ((cw)) -#else -#define _FPU_SETCW(cw) __asm__ ("lds %0,fpscr" : : "r" (cw)) -#endif - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -__END_DECLS - -#endif /* __SH_FPU_ANY__ */ - -#endif /* _FPU_CONTROL_H */ diff --git a/sysdeps/sh/gccframe.h b/sysdeps/sh/gccframe.h deleted file mode 100644 index e12a845e22..0000000000 --- a/sysdeps/sh/gccframe.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Definition of object in frame unwind info. sh version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define DWARF_FRAME_REGISTERS 49 - -#include diff --git a/sysdeps/sh/gmp-mparam.h b/sysdeps/sh/gmp-mparam.h deleted file mode 100644 index a579b48787..0000000000 --- a/sysdeps/sh/gmp-mparam.h +++ /dev/null @@ -1,29 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, see -. */ - -#define BITS_PER_MP_LIMB 32 -#define BYTES_PER_MP_LIMB 4 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -#define IEEE_DOUBLE_BIG_ENDIAN 0 -#define IEEE_DOUBLE_MIXED_ENDIAN 1 diff --git a/sysdeps/sh/jmpbuf-offsets.h b/sysdeps/sh/jmpbuf-offsets.h deleted file mode 100644 index fc5fae92c1..0000000000 --- a/sysdeps/sh/jmpbuf-offsets.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Private macros for accessing __jmp_buf contents. SH version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define JB_SIZE (4 * 15) diff --git a/sysdeps/sh/jmpbuf-unwind.h b/sysdeps/sh/jmpbuf-unwind.h deleted file mode 100644 index 8af8d0d44f..0000000000 --- a/sysdeps/sh/jmpbuf-unwind.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((void *) (address) < (void *) demangle ((jmpbuf)[0].__regs[7])) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf regs) -{ - void *sp = (void *) regs[0].__regs[7]; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return (uintptr_t) sp; -} - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/sh/ldsodefs.h b/sysdeps/sh/ldsodefs.h deleted file mode 100644 index 68fd828aed..0000000000 --- a/sysdeps/sh/ldsodefs.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SH_LDSODEFS_H -#define _SH_LDSODEFS_H 1 - -#include - -struct La_sh_regs; -struct La_sh_retval; - -#define ARCH_PLTENTER_MEMBERS \ - uintptr_t (*sh_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *, \ - uintptr_t *, struct La_sh_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep) - -#define ARCH_PLTEXIT_MEMBERS \ - unsigned int (*sh_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *, \ - uintptr_t *, const struct La_sh_regs *, \ - struct La_sh_retval *, const char *) - -#include_next - -#endif diff --git a/sysdeps/sh/libc-tls.c b/sysdeps/sh/libc-tls.c deleted file mode 100644 index 3fb6f057ee..0000000000 --- a/sysdeps/sh/libc-tls.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. SH version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* On SH, linker optimizations are not required, so __tls_get_addr - can be called even in statically linked binaries. In this case module - must be always 1 and PT_TLS segment exist in the binary, otherwise it - would not link. */ - -void * -__tls_get_addr (tls_index *ti) -{ - dtv_t *dtv = THREAD_DTV (); - return (char *) dtv[1].pointer.val + ti->ti_offset; -} diff --git a/sysdeps/sh/libm-test-ulps b/sysdeps/sh/libm-test-ulps deleted file mode 100644 index a00f04e2a3..0000000000 --- a/sysdeps/sh/libm-test-ulps +++ /dev/null @@ -1,417 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos_towardzero": -float: 1 -ifloat: 1 - -Function: "acosh": -double: 1 -idouble: 1 - -Function: "asin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asinh": -double: 1 -float: 1 -ifloat: 1 - -Function: "atan2": -float: 1 -ifloat: 1 - -Function: "atanh": -float: 1 -ifloat: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "casin": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "casinh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catan": -float: 1 -ifloat: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "catanh": -float: 1 -ifloat: 1 - -Function: "cbrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "clog": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 - -Function: Real part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "clog10": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cos": -float: 1 -ifloat: 1 - -Function: "cos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "cpow": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csqrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "csqrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Real part of "ctan_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "ctanh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: "erf": -double: 1 -idouble: 1 - -Function: "erfc": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp10": -double: 1 -idouble: 1 - -Function: "exp10_towardzero": -double: 1 -idouble: 1 - -Function: "exp_towardzero": -double: 1 -idouble: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "fma_towardzero": -double: 1 -idouble: 1 - -Function: "gamma": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "hypot": -double: 1 -idouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "lgamma": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "log": -float: 1 -ifloat: 1 - -Function: "log10": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "log1p": -float: 1 -ifloat: 1 - -Function: "pow": -float: 1 -ifloat: 1 - -Function: "pow10": -double: 1 -idouble: 1 - -Function: "pow_towardzero": -float: 1 -ifloat: 1 - -Function: "sin": -float: 1 -ifloat: 1 - -Function: "sin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "sincos": -float: 1 -ifloat: 1 - -Function: "sinh_towardzero": -double: 1 -idouble: 1 - -Function: "tan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "tgamma": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -# end of automatic generation diff --git a/sysdeps/sh/libm-test-ulps-name b/sysdeps/sh/libm-test-ulps-name deleted file mode 100644 index b6c67c9520..0000000000 --- a/sysdeps/sh/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -SH diff --git a/sysdeps/sh/linkmap.h b/sysdeps/sh/linkmap.h deleted file mode 100644 index bb2fbb5f16..0000000000 --- a/sysdeps/sh/linkmap.h +++ /dev/null @@ -1,5 +0,0 @@ -struct link_map_machine - { - Elf32_Addr plt; /* Address of .plt + 36 */ - Elf32_Addr gotplt; /* Address of .got + 0x0c */ - }; diff --git a/sysdeps/sh/machine-gmon.h b/sysdeps/sh/machine-gmon.h deleted file mode 100644 index 56e45bcdb4..0000000000 --- a/sysdeps/sh/machine-gmon.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Machine-dependent definitions for profiling support. SH version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* We must not pollute the global namespace. */ -#define mcount_internal __mcount_internal - -void mcount_internal (u_long frompc, u_long selfpc); - -#define _MCOUNT_DECL(frompc, selfpc) \ -void mcount_internal (u_long frompc, u_long selfpc) - - -/* Define MCOUNT as empty since we have the implementation in another - file. */ -#define MCOUNT diff --git a/sysdeps/sh/math_private.h b/sysdeps/sh/math_private.h deleted file mode 100644 index d13f2d49d3..0000000000 --- a/sysdeps/sh/math_private.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef SH_MATH_PRIVATE_H -#define SH_MATH_PRIVATE_H 1 - -/* Enable __finitel, __isinfl, and __isnanl for binary compatibility - when built without long double support. */ -#define LDBL_CLASSIFY_COMPAT 1 - -#include_next - -#endif diff --git a/sysdeps/sh/memcpy.S b/sysdeps/sh/memcpy.S deleted file mode 100644 index c13afeaf24..0000000000 --- a/sysdeps/sh/memcpy.S +++ /dev/null @@ -1,198 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Kazumoto Kojima - Optimized by Toshiyasu Morita - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* void *memcpy(void *dst, const void *src, size_t n); - No overlap between the memory of DST and of SRC are assumed. */ - -ENTRY(memcpy) - mov r4,r3 /* Save destination. */ - - /* If less than 11 bytes, just do a byte copy. */ - mov #11,r0 - cmp/gt r6,r0 - bt L_byteloop_init - - /* Check if we need to word-align source. */ - mov r5,r0 - tst #1,r0 - bt L_wordalign - - mov.b @r0+,r1 /* Copy one byte. */ - add #-1,r6 - mov.b r1,@r4 - add #1,r4 - - .balignw 4,0x0009 -L_wordalign: - /* Check if we need to longword-align source. */ - tst #2,r0 - bt L_copy - - mov.w @r0+,r1 /* Copy one word. */ - add #-2,r6 -#ifdef __BIG_ENDIAN__ - add #1,r4 - mov.b r1,@r4 - shlr8 r1 - mov.b r1,@-r4 - add #2,r4 -#else - mov.b r1,@r4 - add #1,r4 - shlr8 r1 - mov.b r1,@r4 - add #1,r4 -#endif -L_copy: - mov r0,r5 - - /* Calculate the correct routine to handle the destination - alignment and simultaneously calculate the loop counts for - both the 2 word copy loop and byte copy loop. */ - mova L_jumptable,r0 - mov r0,r1 - mov r4,r0 - mov r6,r7 - and #3,r0 - shlr2 r7 - shll r0 - shlr r7 - mov.w @(r0,r1),r2 - mov #7,r0 - braf r2 - and r0,r6 -L_base: - - .balign 4 -L_jumptable: - .word L_copydest0 - L_base - .word L_copydest1_or_3 - L_base - .word L_copydest2 - L_base - .word L_copydest1_or_3 - L_base - - .balign 4 - /* Copy routine for (dest mod 4) == 1 or == 3. */ -L_copydest1_or_3: - add #-1,r4 - .balignw 4,0x0009 -L_copydest1_or_3_loop: - mov.l @r5+,r0 /* Read first longword. */ - dt r7 - mov.l @r5+,r1 /* Read second longword. */ -#ifdef __BIG_ENDIAN__ - /* Write first longword as byte, word, byte. */ - mov.b r0,@(4,r4) - shlr8 r0 - mov.w r0,@(2,r4) - shlr16 r0 - mov.b r0,@(1,r4) - mov r1,r0 - /* Write second longword as byte, word, byte. */ - mov.b r0,@(8,r4) - shlr8 r0 - mov.w r0,@(6,r4) - shlr16 r0 - mov.b r0,@(5,r4) -#else - /* Write first longword as byte, word, byte. */ - mov.b r0,@(1,r4) - shlr8 r0 - mov.w r0,@(2,r4) - shlr16 r0 - mov.b r0,@(4,r4) - mov r1,r0 - /* Write second longword as byte, word, byte. */ - mov.b r0,@(5,r4) - shlr8 r0 - mov.w r0,@(6,r4) - shlr16 r0 - mov.b r0,@(8,r4) -#endif - bf/s L_copydest1_or_3_loop - add #8,r4 - - bra L_byteloop_init - add #1,r4 - - .balign 4 - /* Copy routine for (dest mod 4) == 2. */ -L_copydest2: -L_copydest2_loop: - mov.l @r5+,r0 - dt r7 - mov.l @r5+,r1 -#ifdef __BIG_ENDIAN__ - mov.w r0,@(2,r4) - shlr16 r0 - mov.w r0,@r4 - mov r1,r0 - mov.w r0,@(6,r4) - shlr16 r0 - mov.w r0,@(4,r4) -#else - mov.w r0,@r4 - shlr16 r0 - mov.w r0,@(2,r4) - mov r1,r0 - mov.w r0,@(4,r4) - shlr16 r0 - mov.w r0,@(6,r4) -#endif - bf/s L_copydest2_loop - add #8,r4 - - bra L_byteloop_init - nop - - .balign 4 - /* Copy routine for (dest mod 4) == 0. */ -L_copydest0: - add #-8,r4 - .balignw 4,0x0009 -L_copydest0_loop: - mov.l @r5+,r0 - dt r7 - mov.l @r5+,r1 - add #8,r4 - mov.l r0,@r4 - bf/s L_copydest0_loop - mov.l r1,@(4,r4) - - add #8,r4 /* Fall through. */ - -L_byteloop_init: - tst r6,r6 - bt L_exit - - .balignw 4,0x0009 - /* Copy remaining bytes. */ -L_byteloop: - mov.b @r5+,r0 - dt r6 - mov.b r0,@r4 - bf/s L_byteloop - add #1,r4 - -L_exit: - rts - mov r3,r0 /* Return destination. */ -END(memcpy) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/sh/memset.S b/sysdeps/sh/memset.S deleted file mode 100644 index cb47e0c709..0000000000 --- a/sysdeps/sh/memset.S +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Kazumoto Kojima - Optimized by Toshiyasu Morita - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* void *memset (t, c, len); */ - -ENTRY(memset) - mov #12,r0 - cmp/gt r6,r0 - bt.s L_byte_loop_init - mov r4,r7 - - extu.b r5,r5 - swap.b r5,r1 - or r1,r5 - swap.w r5,r1 - or r1,r5 - - mov r4,r0 - tst #1,r0 - bt L_wordalign - - mov.b r5,@r4 - add #-1,r6 - add #1,r4 - mov r4,r0 - - .balignw 4,0x0009 -L_wordalign: - tst #2,r0 - bt L_word_loop_init - - mov.w r5,@r4 - add #-2,r6 - add #2,r4 - mov r4,r0 - - .balignw 4,0x0009 -L_word_loop_init: - mov r6,r3 - shlr2 r3 - mov #7,r0 - shlr r3 - and r0,r6 - - .balignw 4,0x0009 -L_2word_loop: - mov.l r5,@r4 - dt r3 - mov.l r5,@(4,r4) - bf.s L_2word_loop - add #8,r4 - - .balignw 4,0x0009 -L_byte_loop_init: - tst r6,r6 - bt L_byte_exit - - .balignw 4,0x0009 -L_byte_loop: - mov.b r5,@r4 - dt r6 - bf.s L_byte_loop - add #1,r4 - - .balignw 4,0x0009 -L_byte_exit: - rts - mov r7,r0 -END(memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/sh/memusage.h b/sysdeps/sh/memusage.h deleted file mode 100644 index 1821c69485..0000000000 --- a/sysdeps/sh/memusage.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("r15"); stack_ptr; }) - -#include diff --git a/sysdeps/sh/nptl/bits/pthreadtypes-arch.h b/sysdeps/sh/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index b2615fe314..0000000000 --- a/sysdeps/sh/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -#define _BITS_PTHREADTYPES_ARCH_H 1 - -#include - -#define __SIZEOF_PTHREAD_ATTR_T 36 -#define __SIZEOF_PTHREAD_MUTEX_T 24 -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_RWLOCK_T 32 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -#define __SIZEOF_PTHREAD_BARRIER_T 20 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - -/* Definitions for internal mutex struct. */ -#define __PTHREAD_COMPAT_PADDING_MID -#define __PTHREAD_COMPAT_PADDING_END -#define __PTHREAD_MUTEX_LOCK_ELISION 0 - -#define __LOCK_ALIGNMENT -#define __ONCE_ALIGNMENT - -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned char __pad1; - unsigned char __pad2; - unsigned char __shared; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; -#else - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; - unsigned char __shared; - unsigned char __pad1; - unsigned char __pad2; -#endif - unsigned long int __cur_writer; -}; - -#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/sh/nptl/bits/semaphore.h b/sysdeps/sh/nptl/bits/semaphore.h deleted file mode 100644 index 42a0836285..0000000000 --- a/sysdeps/sh/nptl/bits/semaphore.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - - -#define __SIZEOF_SEM_T 16 - - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/sysdeps/sh/nptl/pthread_spin_init.c b/sysdeps/sh/nptl/pthread_spin_init.c deleted file mode 100644 index a1205b9698..0000000000 --- a/sysdeps/sh/nptl/pthread_spin_init.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Not needed. pthread_spin_init is an alias for pthread_spin_unlock. */ diff --git a/sysdeps/sh/nptl/pthread_spin_lock.c b/sysdeps/sh/nptl/pthread_spin_lock.c deleted file mode 100644 index 3daa19d3f9..0000000000 --- a/sysdeps/sh/nptl/pthread_spin_lock.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "pthreadP.h" - -int -pthread_spin_lock (pthread_spinlock_t *lock) -{ - unsigned int val; - - do - asm volatile ("tas.b @%1; movt %0" - : "=&r" (val) - : "r" (lock) - : "memory"); - while (val == 0); - - return 0; -} diff --git a/sysdeps/sh/nptl/pthread_spin_trylock.S b/sysdeps/sh/nptl/pthread_spin_trylock.S deleted file mode 100644 index 524dbf9533..0000000000 --- a/sysdeps/sh/nptl/pthread_spin_trylock.S +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .globl pthread_spin_trylock - .type pthread_spin_trylock,@function - .align 5 -pthread_spin_trylock: - tas.b @r4 - bf/s 1f - mov #EBUSY, r0 - mov #0, r0 -1: - rts - nop - .size pthread_spin_trylock,.-pthread_spin_trylock diff --git a/sysdeps/sh/nptl/pthread_spin_unlock.S b/sysdeps/sh/nptl/pthread_spin_unlock.S deleted file mode 100644 index aabf1e463d..0000000000 --- a/sysdeps/sh/nptl/pthread_spin_unlock.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - .globl pthread_spin_unlock - .type pthread_spin_unlock,@function - .align 5 -pthread_spin_unlock: - mov #0,r0 - rts - mov.l r0,@r4 - .size pthread_spin_unlock,.-pthread_spin_unlock - - /* The implementation of pthread_spin_init is identical. */ - .globl pthread_spin_init -pthread_spin_init = pthread_spin_unlock diff --git a/sysdeps/sh/nptl/pthreaddef.h b/sysdeps/sh/nptl/pthreaddef.h deleted file mode 100644 index 327f090788..0000000000 --- a/sysdeps/sh/nptl/pthreaddef.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. */ -#define STACK_ALIGN 8 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 8 - - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME __builtin_frame_address (0) diff --git a/sysdeps/sh/nptl/tcb-offsets.sym b/sysdeps/sh/nptl/tcb-offsets.sym deleted file mode 100644 index 4963e1506f..0000000000 --- a/sysdeps/sh/nptl/tcb-offsets.sym +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include -#include - -RESULT offsetof (struct pthread, result) -TID offsetof (struct pthread, tid) -CANCELHANDLING offsetof (struct pthread, cancelhandling) -CLEANUP_JMP_BUF offsetof (struct pthread, cleanup_jmp_buf) -MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) -TLS_PRE_TCB_SIZE sizeof (struct pthread) -MUTEX_FUTEX offsetof (pthread_mutex_t, __data.__lock) -POINTER_GUARD offsetof (tcbhead_t, pointer_guard) -#ifndef __ASSUME_PRIVATE_FUTEX -PRIVATE_FUTEX offsetof (struct pthread, header.private_futex) -#endif diff --git a/sysdeps/sh/nptl/tls.h b/sysdeps/sh/nptl/tls.h deleted file mode 100644 index 547cff179f..0000000000 --- a/sysdeps/sh/nptl/tls.h +++ /dev/null @@ -1,168 +0,0 @@ -/* Definition for thread-local data handling. NPTL/SH version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TLS_H -#define _TLS_H - -# include - -#ifndef __ASSEMBLER__ -# include -# include -# include -# include -# include -# include -# include - -typedef struct -{ - dtv_t *dtv; - uintptr_t pointer_guard; -} tcbhead_t; - -# define TLS_MULTIPLE_THREADS_IN_TCB 1 - -#else /* __ASSEMBLER__ */ -# include -#endif /* __ASSEMBLER__ */ - - -#ifndef __ASSEMBLER__ - -/* Get system call information. */ -# include - -/* This is the size of the initial TCB. */ -# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t) - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE sizeof (tcbhead_t) - -/* This is the size we need before TCB. */ -# define TLS_PRE_TCB_SIZE sizeof (struct pthread) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* The TLS blocks start right after the TCB. */ -# define TLS_DTV_AT_TP 1 -# define TLS_TCB_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(tcbp, dtvp) \ - ((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1 - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtv) \ - ({ tcbhead_t *__tcbp; \ - __asm __volatile ("stc gbr,%0" : "=r" (__tcbp)); \ - __tcbp->dtv = (dtv);}) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(tcbp) \ - (((tcbhead_t *) (tcbp))->dtv) - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(tcbp) \ - ({ __asm __volatile ("ldc %0,gbr" : : "r" (tcbp)); NULL; }) - -# define TLS_DEFINE_INIT_TP(tp, pd) void *tp = (pd) + 1 - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - ({ tcbhead_t *__tcbp; \ - __asm __volatile ("stc gbr,%0" : "=r" (__tcbp)); \ - __tcbp->dtv;}) - -/* Return the thread descriptor for the current thread. - The contained asm must *not* be marked volatile since otherwise - assignments like - struct pthread *self = thread_self(); - do not get optimized away. */ -# define THREAD_SELF \ - ({ struct pthread *__self; \ - __asm ("stc gbr,%0" : "=r" (__self)); \ - __self - 1;}) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF \ - REGISTER (32, 32, REG_GBR * 4, -sizeof (struct pthread)) - -/* Read member of the thread descriptor directly. */ -# define THREAD_GETMEM(descr, member) (descr->member) - -/* Same as THREAD_GETMEM, but the member offset can be non-constant. */ -# define THREAD_GETMEM_NC(descr, member, idx) (descr->member[idx]) - -/* Set member of the thread descriptor directly. */ -# define THREAD_SETMEM(descr, member, value) \ - descr->member = (value) - -/* Same as THREAD_SETMEM, but the member offset can be non-constant. */ -# define THREAD_SETMEM_NC(descr, member, idx, value) \ - descr->member[idx] = (value) - -#define THREAD_GET_POINTER_GUARD() \ - ({ tcbhead_t *__tcbp; \ - __asm __volatile ("stc gbr,%0" : "=r" (__tcbp)); \ - __tcbp->pointer_guard;}) - #define THREAD_SET_POINTER_GUARD(value) \ - ({ tcbhead_t *__tcbp; \ - __asm __volatile ("stc gbr,%0" : "=r" (__tcbp)); \ - __tcbp->pointer_guard = (value);}) -#define THREAD_COPY_POINTER_GUARD(descr) \ - ({ tcbhead_t *__tcbp; \ - __asm __volatile ("stc gbr,%0" : "=r" (__tcbp)); \ - ((tcbhead_t *) (descr + 1))->pointer_guard = __tcbp->pointer_guard;}) - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/sh/preconfigure b/sysdeps/sh/preconfigure deleted file mode 100644 index c1f6537797..0000000000 --- a/sysdeps/sh/preconfigure +++ /dev/null @@ -1,6 +0,0 @@ -# preconfigure fragment for sh. - -case "$machine" in -sh3*) base_machine=sh machine=sh/sh3 ;; -sh4*) base_machine=sh machine=sh/sh4 ;; -esac diff --git a/sysdeps/sh/s_fma.c b/sysdeps/sh/s_fma.c deleted file mode 100644 index d92438d448..0000000000 --- a/sysdeps/sh/s_fma.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __SH_FPU_ANY__ -# include -#else -# include -#endif diff --git a/sysdeps/sh/s_fmaf.c b/sysdeps/sh/s_fmaf.c deleted file mode 100644 index 3b811ae6da..0000000000 --- a/sysdeps/sh/s_fmaf.c +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __SH_FPU_ANY__ -# include -#else -# include -#endif diff --git a/sysdeps/sh/sh3/__longjmp.S b/sysdeps/sh/sh3/__longjmp.S deleted file mode 100644 index 27d6141a98..0000000000 --- a/sysdeps/sh/sh3/__longjmp.S +++ /dev/null @@ -1,63 +0,0 @@ -/* longjmp for SH. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _SETJMP_H -#define _ASM -#include - -/* __longjmp(jmpbuf, val) */ - -ENTRY (__longjmp) - mov.l @r4+, r8 - mov.l @r4+, r9 - mov.l @r4+, r10 - mov.l @r4+, r11 - mov.l @r4+, r12 - mov r5, r0 /* get the return value in place */ - tst r0, r0 - bf.s 1f - mov.l @r4+, r13 - mov #1,r0 /* can't let setjmp() return zero! */ -1: -#ifdef PTR_DEMANGLE - mov.l @r4+, r2 - PTR_DEMANGLE (r2, r1) - mov r2, r14 - mov.l @r4+, r2 - PTR_DEMANGLE2 (r2, r1) -# ifdef CHECK_SP - CHECK_SP (r2) -# endif - mov r2, r15 - mov.l @r4+, r2 - PTR_DEMANGLE2 (r2, r1) - lds r2, pr - mov #0, r1 -#else - mov.l @r4+, r14 -# ifdef CHECK_SP - mov.l @r4, r2 - CHECK_SP (r2) -# endif - mov.l @r4+, r15 - lds.l @r4+, pr -#endif - rts - ldc.l @r4+, gbr -END (__longjmp) diff --git a/sysdeps/sh/sh3/setjmp.S b/sysdeps/sh/sh3/setjmp.S deleted file mode 100644 index ef039a2114..0000000000 --- a/sysdeps/sh/sh3/setjmp.S +++ /dev/null @@ -1,81 +0,0 @@ -/* setjmp for SH3. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ENTRY (__sigsetjmp) - /* Save registers */ - add #(JB_SIZE - 4 * 5), r4 - stc.l gbr, @-r4 -#ifdef PTR_MANGLE - sts pr, r2 - PTR_MANGLE (r2, r1) - mov.l r2, @-r4 - mov r15, r2 - PTR_MANGLE2 (r2, r1) - mov.l r2, @-r4 - mov r14, r2 - PTR_MANGLE2 (r2, r1) - mov.l r2, @-r4 - mov #0, r1 -#else - sts.l pr, @-r4 - mov.l r15, @-r4 - mov.l r14, @-r4 -#endif - mov.l r13, @-r4 - mov.l r12, @-r4 - mov.l r11, @-r4 - mov.l r10, @-r4 - mov.l r9, @-r4 - mov.l r8, @-r4 - -#if IS_IN (rtld) - /* In ld.so we never save the signal mask. */ - rts - mov #0, r0 -#else - /* Make a tail call to __sigjmp_save; it takes the same args. */ -# ifdef SHARED - mov.l 1f, r1 - mova 1f, r0 - bra 2f - add r1, r0 - .align 2 -1: - .long _GLOBAL_OFFSET_TABLE_ -2: - mov.l .L1, r1 - mov.l @(r0,r1), r1 - jmp @r1 - nop - .align 2 -.L1: - .long C_SYMBOL_NAME(__sigjmp_save@GOT) -# else - mov.l .L1, r1 - jmp @r1 - nop - .align 2 -.L1: - .long C_SYMBOL_NAME(__sigjmp_save) -# endif -#endif -END (__sigsetjmp) -hidden_def (__sigsetjmp) diff --git a/sysdeps/sh/sh4/Makefile b/sysdeps/sh/sh4/Makefile deleted file mode 100644 index ccac91432a..0000000000 --- a/sysdeps/sh/sh4/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -# Build everything with full IEEE math support. -mieee isn't -# default for the older SH compilers. -sysdep-CFLAGS += -mieee diff --git a/sysdeps/sh/sh4/Versions b/sysdeps/sh/sh4/Versions deleted file mode 100644 index 8cc1c7b7d4..0000000000 --- a/sysdeps/sh/sh4/Versions +++ /dev/null @@ -1,5 +0,0 @@ -ld { - GLIBC_PRIVATE { - __fpscr_values; - } -} diff --git a/sysdeps/sh/sh4/__longjmp.S b/sysdeps/sh/sh4/__longjmp.S deleted file mode 100644 index 2a5c25da32..0000000000 --- a/sysdeps/sh/sh4/__longjmp.S +++ /dev/null @@ -1,73 +0,0 @@ -/* longjmp for SH. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _SETJMP_H -#define _ASM -#include - -/* __longjmp(jmpbuf, val) */ - -ENTRY (__longjmp) - mov.l @r4+, r8 - mov.l @r4+, r9 - mov.l @r4+, r10 - mov.l @r4+, r11 - mov.l @r4+, r12 - mov r5, r0 /* get the return value in place */ - tst r0, r0 - bf.s 1f - mov.l @r4+, r13 - mov #1,r0 /* can't let setjmp() return zero! */ -1: -#ifdef PTR_DEMANGLE - mov.l @r4+, r2 - PTR_DEMANGLE (r2, r1) - mov r2, r14 - mov.l @r4+, r2 - PTR_DEMANGLE2 (r2, r1) -# ifdef CHECK_SP - CHECK_SP (r2) -# endif - mov r2, r15 - mov.l @r4+, r2 - PTR_DEMANGLE2 (r2, r1) - lds r2, pr - mov #0, r1 -#else - mov.l @r4+, r14 -# ifdef CHECK_SP - mov.l @r4, r2 - CHECK_SP (r2) -# endif - mov.l @r4+, r15 - lds.l @r4+, pr -#endif -#ifdef __SH_FPU_ANY__ - ldc.l @r4+, gbr - lds.l @r4+, fpscr - fmov.s @r4+, fr12 - fmov.s @r4+, fr13 - fmov.s @r4+, fr14 - rts - fmov.s @r4+, fr15 -#else - rts - ldc.l @r4+, gbr -#endif /* !__SH_FPU_ANY__ */ -END (__longjmp) diff --git a/sysdeps/sh/sh4/dl-trampoline.S b/sysdeps/sh/sh4/dl-trampoline.S deleted file mode 100644 index bd9bb7e5bd..0000000000 --- a/sysdeps/sh/sh4/dl-trampoline.S +++ /dev/null @@ -1,4 +0,0 @@ -#ifdef __SH_FPU_ANY__ -# define HAVE_FPU -#endif -#include diff --git a/sysdeps/sh/sh4/fpu/fclrexcpt.c b/sysdeps/sh/sh4/fpu/fclrexcpt.c deleted file mode 100644 index 5a430f6655..0000000000 --- a/sysdeps/sh/sh4/fpu/fclrexcpt.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -feclearexcept (int excepts) -{ - fpu_control_t cw; - - /* Mask out unsupported bits/exceptions. */ - excepts &= FE_ALL_EXCEPT; - - /* Read the complete control word. */ - _FPU_GETCW (cw); - - /* Clear exception bits. */ - cw &= ~excepts; - - /* Put the new data in effect. */ - _FPU_SETCW (cw); - - return 0; -} -libm_hidden_def (feclearexcept) diff --git a/sysdeps/sh/sh4/fpu/fedisblxcpt.c b/sysdeps/sh/sh4/fpu/fedisblxcpt.c deleted file mode 100644 index 718ae70899..0000000000 --- a/sysdeps/sh/sh4/fpu/fedisblxcpt.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Nobuhiro Iwamatsu , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fedisableexcept (int excepts) -{ - fpu_control_t temp, old_exc; - - /* Get the current control register contents. */ - _FPU_GETCW (temp); - - old_exc = (temp >> 5) & FE_ALL_EXCEPT; - - excepts &= FE_ALL_EXCEPT; - - temp &= ~(excepts << 5); - _FPU_SETCW (temp); - - return old_exc; -} diff --git a/sysdeps/sh/sh4/fpu/feenablxcpt.c b/sysdeps/sh/sh4/fpu/feenablxcpt.c deleted file mode 100644 index d638714149..0000000000 --- a/sysdeps/sh/sh4/fpu/feenablxcpt.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Nobuhiro Iwamatsu , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -feenableexcept (int excepts) -{ - fpu_control_t temp, old_flag; - - /* Get current exceptions. */ - _FPU_GETCW (temp); - - old_flag = (temp >> 5) & FE_ALL_EXCEPT; - excepts &= FE_ALL_EXCEPT; - - temp |= excepts << 5; - _FPU_SETCW (temp); - - return old_flag; -} diff --git a/sysdeps/sh/sh4/fpu/fegetenv.c b/sysdeps/sh/sh4/fpu/fegetenv.c deleted file mode 100644 index 00945f1072..0000000000 --- a/sysdeps/sh/sh4/fpu/fegetenv.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__fegetenv (fenv_t *envp) -{ - fpu_control_t temp; - _FPU_GETCW (temp); - - envp->__fpscr = temp; - - return 0; -} -libm_hidden_def (__fegetenv) -weak_alias (__fegetenv, fegetenv) -libm_hidden_weak (fegetenv) diff --git a/sysdeps/sh/sh4/fpu/fegetexcept.c b/sysdeps/sh/sh4/fpu/fegetexcept.c deleted file mode 100644 index 4d1299e310..0000000000 --- a/sysdeps/sh/sh4/fpu/fegetexcept.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Get enabled floating-point exceptions. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Nobuhiro Iwamatsu , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fegetexcept (void) -{ - fpu_control_t temp; - - /* Get current exceptions. */ - _FPU_GETCW (temp); - - return (temp >> 5) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/sh/sh4/fpu/fegetmode.c b/sysdeps/sh/sh4/fpu/fegetmode.c deleted file mode 100644 index e839a9b25f..0000000000 --- a/sysdeps/sh/sh4/fpu/fegetmode.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Store current floating-point control modes. SH4 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fegetmode (femode_t *modep) -{ - _FPU_GETCW (*modep); - return 0; -} diff --git a/sysdeps/sh/sh4/fpu/fegetround.c b/sysdeps/sh/sh4/fpu/fegetround.c deleted file mode 100644 index 4c97d23e12..0000000000 --- a/sysdeps/sh/sh4/fpu/fegetround.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__fegetround (void) -{ - fpu_control_t cw; - - /* Get control word. */ - _FPU_GETCW (cw); - - return cw & 0x1; -} -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/sh/sh4/fpu/feholdexcpt.c b/sysdeps/sh/sh4/fpu/feholdexcpt.c deleted file mode 100644 index b905e594cd..0000000000 --- a/sysdeps/sh/sh4/fpu/feholdexcpt.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__feholdexcept (fenv_t *envp) -{ - fpu_control_t temp; - - /* Store the environment. */ - _FPU_GETCW (temp); - envp->__fpscr = temp; - - /* Clear the status flags. */ - temp &= ~FE_ALL_EXCEPT; - - /* Now set all exceptions to non-stop. */ - temp &= ~(FE_ALL_EXCEPT << 5); - - _FPU_SETCW (temp); - - /* Success. */ - return 0; -} -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/sh/sh4/fpu/fesetenv.c b/sysdeps/sh/sh4/fpu/fesetenv.c deleted file mode 100644 index 8628c508e5..0000000000 --- a/sysdeps/sh/sh4/fpu/fesetenv.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__fesetenv (const fenv_t *envp) -{ - if (envp == FE_DFL_ENV) - _FPU_SETCW (_FPU_DEFAULT); - else - { - fpu_control_t temp = envp->__fpscr; - _FPU_SETCW (temp); - } - return 0; -} -libm_hidden_def (__fesetenv) -weak_alias (__fesetenv, fesetenv) -libm_hidden_weak (fesetenv) diff --git a/sysdeps/sh/sh4/fpu/fesetexcept.c b/sysdeps/sh/sh4/fpu/fesetexcept.c deleted file mode 100644 index ecfad75fff..0000000000 --- a/sysdeps/sh/sh4/fpu/fesetexcept.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Set given exception flags. SH4 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fesetexcept (int excepts) -{ - fpu_control_t temp; - - _FPU_GETCW (temp); - temp |= (excepts & FE_ALL_EXCEPT); - _FPU_SETCW (temp); - - return 0; -} diff --git a/sysdeps/sh/sh4/fpu/fesetmode.c b/sysdeps/sh/sh4/fpu/fesetmode.c deleted file mode 100644 index d2b9e05128..0000000000 --- a/sysdeps/sh/sh4/fpu/fesetmode.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Install given floating-point control modes. SH4 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define FPU_STATUS 0x3f07c - -int -fesetmode (const femode_t *modep) -{ - fpu_control_t fpscr; - - _FPU_GETCW (fpscr); - fpscr &= FPU_STATUS; - if (modep == FE_DFL_MODE) - fpscr |= _FPU_DEFAULT; - else - fpscr |= *modep & ~FPU_STATUS; - _FPU_SETCW (fpscr); - - return 0; -} diff --git a/sysdeps/sh/sh4/fpu/fesetround.c b/sysdeps/sh/sh4/fpu/fesetround.c deleted file mode 100644 index 20acb7c5e9..0000000000 --- a/sysdeps/sh/sh4/fpu/fesetround.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__fesetround (int round) -{ - fpu_control_t cw; - - if ((round & ~0x1) != 0) - /* ROUND is no valid rounding mode. */ - return 1; - - /* Get current state. */ - _FPU_GETCW (cw); - - /* Set rounding bits. */ - cw &= ~0x1; - cw |= round; - /* Set new state. */ - _FPU_SETCW (cw); - - return 0; -} -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/sh/sh4/fpu/feupdateenv.c b/sysdeps/sh/sh4/fpu/feupdateenv.c deleted file mode 100644 index 3b886a2235..0000000000 --- a/sysdeps/sh/sh4/fpu/feupdateenv.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Nobuhiro Iwamatsu , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__feupdateenv (const fenv_t *envp) -{ - fpu_control_t temp; - - _FPU_GETCW (temp); - temp = (temp & FE_ALL_EXCEPT); - - /* Raise the saved exception. Incidently for us the implementation - defined format of the values in objects of type fexcept_t is the - same as the ones specified using the FE_* constants. */ - __fesetenv (envp); - __feraiseexcept ((int) temp); - - return 0; -} -libm_hidden_def (__feupdateenv) -weak_alias (__feupdateenv, feupdateenv) -libm_hidden_weak (feupdateenv) diff --git a/sysdeps/sh/sh4/fpu/fgetexcptflg.c b/sysdeps/sh/sh4/fpu/fgetexcptflg.c deleted file mode 100644 index 02fc3948bc..0000000000 --- a/sysdeps/sh/sh4/fpu/fgetexcptflg.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int -fegetexceptflag (fexcept_t *flagp, int excepts) -{ - fpu_control_t temp; - - /* Get the current exceptions. */ - _FPU_GETCW (temp); - - /* We only save the relevant bits here. In particular, care has to be - taken with the CAUSE bits, as an inadvertent restore later on could - generate unexpected exceptions. */ - - *flagp = temp & excepts & FE_ALL_EXCEPT; - - /* Success. */ - return 0; -} diff --git a/sysdeps/sh/sh4/fpu/fraiseexcpt.c b/sysdeps/sh/sh4/fpu/fraiseexcpt.c deleted file mode 100644 index 4bd0eb9ef5..0000000000 --- a/sysdeps/sh/sh4/fpu/fraiseexcpt.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Raise given exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Nobuhiro Iwamatsu , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -__feraiseexcept (int excepts) -{ - if (excepts == 0) - return 0; - - /* Raise exceptions represented by EXPECTS. */ - - if (excepts & FE_INEXACT) - { - double d = 1.0, x = 3.0; - __asm__ __volatile__ ("fdiv %1, %0" : "+d" (d) : "d" (x)); - } - - if (excepts & FE_UNDERFLOW) - { - long double d = LDBL_MIN, x = 10; - __asm__ __volatile__ ("fdiv %1, %0" : "+d" (d) : "d" (x)); - } - - if (excepts & FE_OVERFLOW) - { - long double d = LDBL_MAX; - __asm__ __volatile__ ("fmul %0, %0" : "+d" (d) : "d" (d)); - } - - if (excepts & FE_DIVBYZERO) - { - double d = 1.0, x = 0.0; - __asm__ __volatile__ ("fdiv %1, %0" : "+d" (d) : "d" (x)); - } - - if (excepts & FE_INVALID) - { - double d = HUGE_VAL, x = 0.0; - __asm__ __volatile__ ("fmul %1, %0" : "+d" (d) : "d" (x)); - } - - { - /* Restore flag fields. */ - fpu_control_t cw; - _FPU_GETCW (cw); - cw |= (excepts & FE_ALL_EXCEPT); - _FPU_SETCW (cw); - } - - return 0; -} -libm_hidden_def (__feraiseexcept) -weak_alias (__feraiseexcept, feraiseexcept) -libm_hidden_weak (feraiseexcept) diff --git a/sysdeps/sh/sh4/fpu/fsetexcptflg.c b/sysdeps/sh/sh4/fpu/fsetexcptflg.c deleted file mode 100644 index 3a6ea33c26..0000000000 --- a/sysdeps/sh/sh4/fpu/fsetexcptflg.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - fpu_control_t temp; - - /* Get the current environment. */ - _FPU_GETCW (temp); - - /* Set the desired exception mask. */ - temp &= ~(excepts & FE_ALL_EXCEPT); - temp |= (*flagp & excepts & FE_ALL_EXCEPT); - - /* Save state back to the FPU. */ - _FPU_SETCW (temp); - - return 0; -} diff --git a/sysdeps/sh/sh4/fpu/ftestexcept.c b/sysdeps/sh/sh4/fpu/ftestexcept.c deleted file mode 100644 index fa2c011825..0000000000 --- a/sysdeps/sh/sh4/fpu/ftestexcept.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fetestexcept (int excepts) -{ - fpu_control_t temp; - - /* Get current exceptions. */ - _FPU_GETCW (temp); - - return temp & excepts & FE_ALL_EXCEPT; -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/sh/sh4/setjmp.S b/sysdeps/sh/sh4/setjmp.S deleted file mode 100644 index a09ffab627..0000000000 --- a/sysdeps/sh/sh4/setjmp.S +++ /dev/null @@ -1,90 +0,0 @@ -/* setjmp for SH4. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ENTRY (__sigsetjmp) - /* Save registers */ -#ifdef __SH_FPU_ANY__ - add #JB_SIZE, r4 - fmov.s fr15, @-r4 - fmov.s fr14, @-r4 - fmov.s fr13, @-r4 - fmov.s fr12, @-r4 - sts.l fpscr, @-r4 -#else - add #(JB_SIZE - 4 * 5), r4 -#endif /* __SH_FPU_ANY__ */ - stc.l gbr, @-r4 -#ifdef PTR_MANGLE - sts pr, r2 - PTR_MANGLE (r2, r1) - mov.l r2, @-r4 - mov r15, r2 - PTR_MANGLE2 (r2, r1) - mov.l r2, @-r4 - mov r14, r2 - PTR_MANGLE2 (r2, r1) - mov.l r2, @-r4 - mov #0, r1 -#else - sts.l pr, @-r4 - mov.l r15, @-r4 - mov.l r14, @-r4 -#endif - mov.l r13, @-r4 - mov.l r12, @-r4 - mov.l r11, @-r4 - mov.l r10, @-r4 - mov.l r9, @-r4 - mov.l r8, @-r4 - -#if IS_IN (rtld) - /* In ld.so we never save the signal mask. */ - rts - mov #0, r0 -#else - /* Make a tail call to __sigjmp_save; it takes the same args. */ -# ifdef SHARED - mov.l 1f, r1 - mova 1f, r0 - bra 2f - add r1, r0 - .align 2 -1: - .long _GLOBAL_OFFSET_TABLE_ -2: - mov.l .L1, r1 - mov.l @(r0,r1), r1 - jmp @r1 - nop - .align 2 -.L1: - .long C_SYMBOL_NAME(__sigjmp_save@GOT) -# else - mov.l .L1, r1 - jmp @r1 - nop - .align 2 -.L1: - .long C_SYMBOL_NAME(__sigjmp_save) -# endif -#endif -END (__sigsetjmp) -hidden_def (__sigsetjmp) diff --git a/sysdeps/sh/soft-fp/sfp-machine.h b/sysdeps/sh/soft-fp/sfp-machine.h deleted file mode 100644 index 81474e8a7c..0000000000 --- a/sysdeps/sh/soft-fp/sfp-machine.h +++ /dev/null @@ -1,57 +0,0 @@ -#define _FP_W_TYPE_SIZE 32 -#define _FP_W_TYPE unsigned long -#define _FP_WS_TYPE signed long -#define _FP_I_TYPE long - -#define _FP_MUL_MEAT_S(R,X,Y) \ - _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_D(R,X,Y) \ - _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_MUL_MEAT_DW_S(R,X,Y) \ - _FP_MUL_MEAT_DW_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_DW_D(R,X,Y) \ - _FP_MUL_MEAT_DW_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_DW_Q(R,X,Y) \ - _FP_MUL_MEAT_DW_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) - -#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) -#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 -#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 -#define _FP_NANSIGN_S 0 -#define _FP_NANSIGN_D 0 -#define _FP_NANSIGN_Q 0 - -#define _FP_KEEPNANFRACP 1 -#define _FP_QNANNEGATEDP 0 - -/* Someone please check this. */ -#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \ - && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \ - { \ - R##_s = Y##_s; \ - _FP_FRAC_COPY_##wc(R,Y); \ - } \ - else \ - { \ - R##_s = X##_s; \ - _FP_FRAC_COPY_##wc(R,X); \ - } \ - R##_c = FP_CLS_NAN; \ - } while (0) - -#define FP_EX_INVALID (1 << 6) -#define FP_EX_DIVZERO (1 << 5) -#define FP_EX_OVERFLOW (1 << 4) -#define FP_EX_UNDERFLOW (1 << 3) -#define FP_EX_INEXACT (1 << 2) - -#define _FP_TININESS_AFTER_ROUNDING 1 diff --git a/sysdeps/sh/sotruss-lib.c b/sysdeps/sh/sotruss-lib.c deleted file mode 100644 index 152e502113..0000000000 --- a/sysdeps/sh/sotruss-lib.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Override generic sotruss-lib.c to define actual functions for SH. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define HAVE_ARCH_PLTENTER -#define HAVE_ARCH_PLTEXIT - -#include - -ElfW(Addr) -la_sh_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - La_sh_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - print_enter (refcook, defcook, symname, - regs->lr_r4, regs->lr_r5, regs->lr_r6, *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -la_sh_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, - const struct La_sh_regs *inregs, - struct La_sh_retval *outregs, const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_r0); - - return 0; -} diff --git a/sysdeps/sh/stackguard-macros.h b/sysdeps/sh/stackguard-macros.h deleted file mode 100644 index 55a5771b62..0000000000 --- a/sysdeps/sh/stackguard-macros.h +++ /dev/null @@ -1,6 +0,0 @@ -#include - -extern uintptr_t __stack_chk_guard; -#define STACK_CHK_GUARD __stack_chk_guard - -#define POINTER_CHK_GUARD THREAD_GET_POINTER_GUARD() diff --git a/sysdeps/sh/stackinfo.h b/sysdeps/sh/stackinfo.h deleted file mode 100644 index cdbb27113d..0000000000 --- a/sysdeps/sh/stackinfo.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* On SH the stack grows down. */ -#define _STACK_GROWS_DOWN 1 - -/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK is - * present, but it is presumed absent. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X) - -#endif /* stackinfo.h */ diff --git a/sysdeps/sh/start.S b/sysdeps/sh/start.S deleted file mode 100644 index 0e6b90df9b..0000000000 --- a/sysdeps/sh/start.S +++ /dev/null @@ -1,111 +0,0 @@ -/* Startup code for SH & ELF. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This is the canonical entry point, usually the first thing in the text - segment. - - Note that the code in the .init section has already been run. - This includes _init and _libc_init - - - At this entry point, most registers' values are unspecified, except: - - r4 Contains a function pointer to be registered with `atexit'. - This is how the dynamic linker arranges to have DT_FINI - functions called for shared libraries that have been loaded - before this code runs. - - sp The stack contains the arguments and environment: - 0(sp) argc - 4(sp) argv[0] - ... - (4*argc)(sp) NULL - (4*(argc+1))(sp) envp[0] - ... - NULL -*/ - - .text - .globl _start - .type _start,@function -_start: - /* Clear the frame pointer since this is the outermost frame. */ - mov #0, r14 - - /* Pop argc off the stack and save a pointer to argv */ - mov.l @r15+,r5 - mov r15, r6 - - /* Push the last arguments to main() onto the stack */ - mov.l r4,@-r15 - mov.l L_fini,r0 - mov.l r0,@-r15 - - /* Set up the other arguments for main() that go in registers */ - mov.l L_main,r4 - mov.l L_init,r7 - - /* __libc_start_main (main, argc, argv, init, fini, rtld_fini) */ - - /* Let the libc call main and exit with its return code. */ - mov.l L_libc_start_main,r1 - jsr @r1 - nop - /* should never get here....*/ - mov.l L_abort,r1 - jsr @r1 - nop - .align 2 -L_main: - .long main -L_init: - .long __libc_csu_init -L_fini: - .long __libc_csu_fini -L_libc_start_main: - .long __libc_start_main -L_abort: - .long abort -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start - .global __fpscr_values -__fpscr_values: - .long 0 - .long 0x80000 diff --git a/sysdeps/sh/strlen.S b/sysdeps/sh/strlen.S deleted file mode 100644 index 8e0d53c471..0000000000 --- a/sysdeps/sh/strlen.S +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Kazumoto Kojima - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* size_t strlen (const char *s) */ - -ENTRY(strlen) - mov r4, r0 - and #3, r0 - tst r0, r0 - bt/s 1f - mov #0, r2 - - add #-1, r0 - shll2 r0 - shll r0 - braf r0 - nop - - mov.b @r4+, r1 - tst r1, r1 - bt 8f - add #1, r2 - - mov.b @r4+, r1 - tst r1, r1 - bt 8f - add #1, r2 - - mov.b @r4+, r1 - tst r1, r1 - bt 8f - add #1, r2 - -1: - mov #0, r3 -2: - mov.l @r4+, r1 - cmp/str r3, r1 - bf/s 2b - add #4, r2 - - add #-4, r2 -#ifdef __BIG_ENDIAN__ - swap.b r1, r1 - swap.w r1, r1 - swap.b r1, r1 -#endif - extu.b r1, r0 - tst r0, r0 - bt/s 8f - shlr8 r1 - add #1, r2 - extu.b r1, r0 - tst r0, r0 - bt/s 8f - shlr8 r1 - add #1, r2 - extu.b r1, r0 - tst r0, r0 - bt 8f - add #1, r2 -8: - rts - mov r2, r0 -END(strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/sh/sysdep.h b/sysdeps/sh/sysdep.h deleted file mode 100644 index 939c93144e..0000000000 --- a/sysdeps/sh/sysdep.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Assembler macros for SH. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef __ASSEMBLER__ - -/* Syntactic details of assembler. */ - -#define ALIGNARG(log2) log2 -#define ASM_SIZE_DIRECTIVE(name) .size name,.-name - -#ifdef SHARED -#define PLTJMP(_x) _x##@PLT -#else -#define PLTJMP(_x) _x -#endif - - -/* Define an entry point visible from C. */ -#define ENTRY(name) \ - .globl C_SYMBOL_NAME(name); \ - .type C_SYMBOL_NAME(name),@function; \ - .align ALIGNARG(5); \ - C_LABEL(name) \ - cfi_startproc; \ - CALL_MCOUNT - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(name)) - -/* If compiled for profiling, call `mcount' at the start of each function. */ -#ifdef PROF -#define CALL_MCOUNT \ - mov.l 1f,r1; \ - sts.l pr,@-r15; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (pr, 0); \ - mova 2f,r0; \ - jmp @r1; \ - lds r0,pr; \ - .align 2; \ -1: .long mcount; \ -2: lds.l @r15+,pr; \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (pr) - -#else -#define CALL_MCOUNT /* Do nothing. */ -#endif - -/* Since C identifiers are not normally prefixed with an underscore - on this system, the asm identifier `syscall_error' intrudes on the - C name space. Make sure we use an innocuous name. */ -#define syscall_error __syscall_error -#define mcount _mcount - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/sh/tininess.h b/sysdeps/sh/tininess.h deleted file mode 100644 index 1db37790f8..0000000000 --- a/sysdeps/sh/tininess.h +++ /dev/null @@ -1 +0,0 @@ -#define TININESS_AFTER_ROUNDING 1 diff --git a/sysdeps/sh/tls-macros.h b/sysdeps/sh/tls-macros.h deleted file mode 100644 index aa56b0a01f..0000000000 --- a/sysdeps/sh/tls-macros.h +++ /dev/null @@ -1,143 +0,0 @@ -#define TLS_LE(x) \ - ({ int *__l; void *__tp; \ - asm ("stc gbr,%1\n\t" \ - "mov.l 1f,%0\n\t" \ - "bra 2f\n\t" \ - " add %1,%0\n\t" \ - ".align 2\n\t" \ - "1: .long " #x "@tpoff\n\t" \ - "2:" \ - : "=r" (__l), "=r" (__tp)); \ - __l; }) - -#ifdef PIC -# define TLS_IE(x) \ - ({ int *__l; void *__tp; \ - register void *__gp __asm__("r12"); \ - asm ("mov.l 1f,r0\n\t" \ - "stc gbr,%1\n\t" \ - "mov.l @(r0,r12),%0\n\t" \ - "bra 2f\n\t" \ - " add %1,%0\n\t" \ - ".align 2\n\t" \ - "1: .long " #x "@gottpoff\n\t" \ - "2:" \ - : "=r" (__l), "=r" (__tp) : "r" (__gp) : "r0"); \ - __l; }) -#else -# define TLS_IE(x) \ - ({ int *__l; void *__tp; \ - asm ("mov.l r12,@-r15\n\t" \ - "mova 0f,r0\n\t" \ - "mov.l 0f,r12\n\t" \ - "add r0,r12\n\t" \ - "mov.l 1f,r0\n\t" \ - "stc gbr,%1\n\t" \ - "mov.l @(r0,r12),%0\n\t" \ - "bra 2f\n\t" \ - " add %1,%0\n\t" \ - ".align 2\n\t" \ - "1: .long " #x "@gottpoff\n\t" \ - "0: .long _GLOBAL_OFFSET_TABLE_\n\t" \ - "2: mov.l @r15+,r12" \ - : "=r" (__l), "=r" (__tp) : : "r0"); \ - __l; }) -#endif - -#ifdef PIC -# define TLS_LD(x) \ - ({ int *__l; \ - register void *__gp __asm__("r12"); \ - asm ("mov.l 1f,r4\n\t" \ - "mova 2f,r0\n\t" \ - "mov.l 2f,r1\n\t" \ - "add r0,r1\n\t" \ - "jsr @r1\n\t" \ - " add r12,r4\n\t" \ - "bra 4f\n\t" \ - " nop\n\t" \ - ".align 2\n\t" \ - "1: .long " #x "@tlsldm\n\t" \ - "2: .long __tls_get_addr@plt\n\t" \ - "4: mov.l 3f,%0\n\t" \ - "bra 5f\n\t" \ - " add r0,%0\n\t" \ - ".align 2\n\t" \ - "3: .long " #x "@dtpoff\n\t" \ - "5:" \ - : "=r" (__l) : "r" (__gp) : "r0", "r1", "r2", "r3", "r4", "r5", \ - "r6", "r7", "pr", "t"); \ - __l; }) -#else -# define TLS_LD(x) \ - ({ int *__l; \ - asm ("mov.l r12,@-r15\n\t" \ - "mova 0f,r0\n\t" \ - "mov.l 0f,r12\n\t" \ - "add r0,r12\n\t" \ - "mov.l 1f,r4\n\t" \ - "mova 2f,r0\n\t" \ - "mov.l 2f,r1\n\t" \ - "add r0,r1\n\t" \ - "jsr @r1\n\t" \ - " add r12,r4\n\t" \ - "bra 4f\n\t" \ - " nop\n\t" \ - ".align 2\n\t" \ - "1: .long " #x "@tlsldm\n\t" \ - "2: .long __tls_get_addr@plt\n\t" \ - "0: .long _GLOBAL_OFFSET_TABLE_\n\t" \ - "4: mov.l 3f,%0\n\t" \ - "bra 5f\n\t" \ - " add r0,%0\n\t" \ - ".align 2\n\t" \ - "3: .long " #x "@dtpoff\n\t" \ - "5: mov.l @r15+,r12" \ - : "=r" (__l) : : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \ - "pr", "t"); \ - __l; }) -#endif - -#ifdef PIC -# define TLS_GD(x) \ - ({ int *__l; \ - register void *__gp __asm__("r12"); \ - asm ("mov.l 1f,r4\n\t" \ - "mova 2f,r0\n\t" \ - "mov.l 2f,r1\n\t" \ - "add r0,r1\n\t" \ - "jsr @r1\n\t" \ - " add r12,r4\n\t" \ - "bra 3f\n\t" \ - " mov r0,%0\n\t" \ - ".align 2\n\t" \ - "1: .long " #x "@tlsgd\n\t" \ - "2: .long __tls_get_addr@plt\n\t" \ - "3:" \ - : "=r" (__l) : "r" (__gp) : "r0", "r1", "r2", "r3", "r4", "r5", \ - "r6", "r7", "pr", "t"); \ - __l; }) -#else -# define TLS_GD(x) \ - ({ int *__l; \ - asm ("mov.l r12,@-r15\n\t" \ - "mova 0f,r0\n\t" \ - "mov.l 0f,r12\n\t" \ - "add r0,r12\n\t" \ - "mov.l 1f,r4\n\t" \ - "mova 2f,r0\n\t" \ - "mov.l 2f,r1\n\t" \ - "add r0,r1\n\t" \ - "jsr @r1\n\t" \ - " add r12,r4\n\t" \ - "bra 3f\n\t" \ - " mov r0,%0\n\t" \ - ".align 2\n\t" \ - "1: .long " #x "@tlsgd\n\t" \ - "2: .long __tls_get_addr@plt\n\t" \ - "0: .long _GLOBAL_OFFSET_TABLE_\n\t" \ - "3: mov.l @r15+,r12" \ - : "=r" (__l) : : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \ - "pr", "t"); \ - __l; }) -#endif diff --git a/sysdeps/sh/tst-audit.h b/sysdeps/sh/tst-audit.h deleted file mode 100644 index a7250a9817..0000000000 --- a/sysdeps/sh/tst-audit.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. SH version. - - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define pltenter la_sh_gnu_pltenter -#define pltexit la_sh_gnu_pltexit -#define La_regs La_sh_regs -#define La_retval La_sh_retval -#define int_retval lrv_r0 diff --git a/sysdeps/sparc/Makefile b/sysdeps/sparc/Makefile deleted file mode 100644 index 31aaeaed8f..0000000000 --- a/sysdeps/sparc/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -# The Sparc `long double' is a distinct type we support. -long-double-fcts = yes - -pie-ccflag = -fPIE - -ifeq ($(subdir),debug) -CFLAGS-backtrace.c += -funwind-tables -endif - -ifeq ($(subdir),gmon) -sysdep_routines += sparc-mcount -endif - -ifeq ($(subdir),db2) -CPPFLAGS += -DHAVE_SPINLOCKS=1 -DHAVE_ASSEM_SPARC_GCC=1 -endif - -ifeq ($(subdir),csu) -CPPFLAGS-crti.S += -fPIC -CPPFLAGS-crtn.S += -fPIC -endif - -# The assembler on SPARC needs the -fPIC flag even when it's assembler code. -ASFLAGS-.os += -fPIC diff --git a/sysdeps/sparc/Subdirs b/sysdeps/sparc/Subdirs deleted file mode 100644 index 87eadf3024..0000000000 --- a/sysdeps/sparc/Subdirs +++ /dev/null @@ -1 +0,0 @@ -soft-fp diff --git a/sysdeps/sparc/abort-instr.h b/sysdeps/sparc/abort-instr.h deleted file mode 100644 index ea92dfe866..0000000000 --- a/sysdeps/sparc/abort-instr.h +++ /dev/null @@ -1,2 +0,0 @@ -/* An instruction which should crash any program is an unimp. */ -#define ABORT_INSTRUCTION asm ("unimp 0xf00") diff --git a/sysdeps/sparc/backtrace.c b/sysdeps/sparc/backtrace.c deleted file mode 100644 index 2887031c72..0000000000 --- a/sysdeps/sparc/backtrace.c +++ /dev/null @@ -1,159 +0,0 @@ -/* Return backtrace of current program state. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include -#include -#include - -struct layout -{ - unsigned long locals[8]; - unsigned long ins[6]; - unsigned long next; - void *return_address; -}; - -struct trace_arg -{ - void **array; - _Unwind_Word cfa; - int cnt; - int size; -}; - -#ifdef SHARED -static _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *); -static _Unwind_Ptr (*unwind_getip) (struct _Unwind_Context *); -static _Unwind_Word (*unwind_getcfa) (struct _Unwind_Context *); -static void *libgcc_handle; - -/* Dummy version in case libgcc_s does not contain the real code. */ -static _Unwind_Word -dummy_getcfa (struct _Unwind_Context *ctx __attribute__ ((unused))) -{ - return 0; -} - -static void -init (void) -{ - libgcc_handle = __libc_dlopen ("libgcc_s.so.1"); - - if (libgcc_handle == NULL) - return; - - unwind_backtrace = __libc_dlsym (libgcc_handle, "_Unwind_Backtrace"); - unwind_getip = __libc_dlsym (libgcc_handle, "_Unwind_GetIP"); - if (unwind_getip == NULL) - unwind_backtrace = NULL; - unwind_getcfa = (__libc_dlsym (libgcc_handle, "_Unwind_GetCFA") - ?: dummy_getcfa); -} -#else -# define unwind_backtrace _Unwind_Backtrace -# define unwind_getip _Unwind_GetIP -# define unwind_getcfa _Unwind_GetCFA -#endif - -static _Unwind_Reason_Code -backtrace_helper (struct _Unwind_Context *ctx, void *a) -{ - struct trace_arg *arg = a; - _Unwind_Ptr ip; - - /* We are first called with address in the __backtrace function. - Skip it. */ - if (arg->cnt != -1) - { - ip = unwind_getip (ctx); - arg->array[arg->cnt] = (void *) ip; - - /* Check whether we make any progress. */ - _Unwind_Word cfa = unwind_getcfa (ctx); - - if (arg->cnt > 0 && arg->array[arg->cnt - 1] == arg->array[arg->cnt] - && cfa == arg->cfa) - return _URC_END_OF_STACK; - arg->cfa = cfa; - } - if (++arg->cnt == arg->size) - return _URC_END_OF_STACK; - return _URC_NO_REASON; -} - -int -__backtrace (void **array, int size) -{ - struct trace_arg arg = { .array = array, .cfa = 0, .size = size, .cnt = -1 }; - bool use_unwinder; - int count; - - if (size <= 0) - return 0; - - use_unwinder = true; -#ifdef SHARED - __libc_once_define (static, once); - - __libc_once (once, init); - if (unwind_backtrace == NULL) - use_unwinder = false; -#endif - - if (use_unwinder == false) - { - struct layout *current; - unsigned long fp, i7; - - asm volatile ("mov %%fp, %0" : "=r"(fp)); - asm volatile ("mov %%i7, %0" : "=r"(i7)); - current = (struct layout *) (fp + BACKTRACE_STACK_BIAS); - - array[0] = (void *) i7; - - if (size == 1) - return 1; - - backtrace_flush_register_windows(); - for (count = 1; count < size; count++) - { - array[count] = current->return_address; - if (!current->next) - break; - current = (struct layout *) (current->next + BACKTRACE_STACK_BIAS); - } - } - else - { - unwind_backtrace (backtrace_helper, &arg); - - /* _Unwind_Backtrace seems to put NULL address above - _start. Fix it up here. */ - if (arg.cnt > 1 && arg.array[arg.cnt - 1] == NULL) - --arg.cnt; - count = arg.cnt != -1 ? arg.cnt : 0; - } - return count; -} -weak_alias (__backtrace, backtrace) -libc_hidden_def (__backtrace) diff --git a/sysdeps/sparc/bits/endian.h b/sysdeps/sparc/bits/endian.h deleted file mode 100644 index 8acfdf5df6..0000000000 --- a/sysdeps/sparc/bits/endian.h +++ /dev/null @@ -1,12 +0,0 @@ -/* Sparc is big-endian, but v9 supports endian conversion on loads/stores - and GCC supports such a mode. Be prepared. */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#ifdef __LITTLE_ENDIAN__ -# define __BYTE_ORDER __LITTLE_ENDIAN -#else -# define __BYTE_ORDER __BIG_ENDIAN -#endif diff --git a/sysdeps/sparc/bits/huge_vall.h b/sysdeps/sparc/bits/huge_vall.h deleted file mode 100644 index 6704bc0528..0000000000 --- a/sysdeps/sparc/bits/huge_vall.h +++ /dev/null @@ -1,47 +0,0 @@ -/* `HUGE_VALL' constant for IEEE 754 machines (where it is infinity). - Used by and functions for overflow. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#if __GNUC_PREREQ(3,3) -# define HUGE_VALL (__builtin_huge_vall()) -#else -# include -# if __WORDSIZE == 32 -# define HUGE_VALL ((long double) HUGE_VAL) -# elif __GNUC_PREREQ(2,96) -# define HUGE_VALL (__extension__ 0x1.0p32767L) -# elif defined __GNUC__ - -# define HUGE_VALL \ - (__extension__ \ - ((union { struct { unsigned long __h, __l; } __i; long double __d; }) \ - { __i: { __h: 0x7fff000000000000UL, __l: 0 } }).__d) - -# else /* not GCC */ - -typedef union { unsigned char __c[16]; long double __d; } __huge_vall_t; -# define __HUGE_VALL_bytes { 0x7f, 0xff, 0,0,0,0,0,0,0,0,0,0,0,0,0,0 } -static __huge_vall_t __huge_vall = { __HUGE_VALL_bytes }; -# define HUGE_VALL (__huge_vall.__d) - -# endif /* GCC. */ -#endif /* GCC 3.3. */ diff --git a/sysdeps/sparc/bits/hwcap.h b/sysdeps/sparc/bits/hwcap.h deleted file mode 100644 index e0907239d7..0000000000 --- a/sysdeps/sparc/bits/hwcap.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Defines for bits in AT_HWCAP. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined(_SYS_AUXV_H) && !defined(_SYSDEPS_SYSDEP_H) -# error "Never include directly; use instead." -#endif - -#define HWCAP_SPARC_FLUSH 0x00000001 -#define HWCAP_SPARC_STBAR 0x00000002 -#define HWCAP_SPARC_SWAP 0x00000004 -#define HWCAP_SPARC_MULDIV 0x00000008 -#define HWCAP_SPARC_V9 0x00000010 -#define HWCAP_SPARC_ULTRA3 0x00000020 -#define HWCAP_SPARC_BLKINIT 0x00000040 -#define HWCAP_SPARC_N2 0x00000080 -#define HWCAP_SPARC_MUL32 0x00000100 -#define HWCAP_SPARC_DIV32 0x00000200 -#define HWCAP_SPARC_FSMULD 0x00000400 -#define HWCAP_SPARC_V8PLUS 0x00000800 -#define HWCAP_SPARC_POPC 0x00001000 -#define HWCAP_SPARC_VIS 0x00002000 -#define HWCAP_SPARC_VIS2 0x00004000 -#define HWCAP_SPARC_ASI_BLK_INIT 0x00008000 -#define HWCAP_SPARC_FMAF 0x00010000 -#define HWCAP_SPARC_VIS3 0x00020000 -#define HWCAP_SPARC_HPC 0x00040000 -#define HWCAP_SPARC_RANDOM 0x00080000 -#define HWCAP_SPARC_TRANS 0x00100000 -#define HWCAP_SPARC_FJFMAU 0x00200000 -#define HWCAP_SPARC_IMA 0x00400000 -#define HWCAP_SPARC_ASI_CACHE_SPARING \ - 0x00800000 -#define HWCAP_SPARC_PAUSE 0x01000000 -#define HWCAP_SPARC_CBCOND 0x02000000 -#define HWCAP_SPARC_CRYPTO 0x04000000 diff --git a/sysdeps/sparc/bits/link.h b/sysdeps/sparc/bits/link.h deleted file mode 100644 index 74e260f8f4..0000000000 --- a/sysdeps/sparc/bits/link.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Machine-specific audit interfaces for dynamic linker. SPARC version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - -#if __WORDSIZE == 32 - -typedef struct La_sparc32_regs -{ - uint32_t lr_lreg[8]; /* %l0 through %l7 */ - uint32_t lr_reg[6]; /* %o0 through %o5 */ - uint32_t lr_sp; /* %o6 */ - uint32_t lr_ra; /* %o7 */ - uint32_t lr_struct; /* Pass-by-reference struct pointer */ -} La_sparc32_regs; - -typedef struct La_sparc32_retval -{ - uint32_t lrv_reg[2]; /* %o0 and %o1 */ - double lrv_fpreg[2]; /* %f0 and %f2 */ -} La_sparc32_retval; - -#else - -typedef struct La_sparc64_regs -{ - uint64_t lr_lreg[8]; /* %l0 through %l7 */ - uint64_t lr_reg[6]; /* %o0 through %o5 */ - uint64_t lr_sp; /* %o6 */ - uint64_t lr_ra; /* %o7 */ - double lr_fpreg[16]; /* %f0 through %f30 */ -} La_sparc64_regs; - -typedef struct La_sparc64_retval -{ - uint64_t lrv_reg[4]; /* %o0 through %o3 */ - double lrv_fprev[4]; /* %f0 through %f8 */ -} La_sparc64_retval; - -#endif - -__BEGIN_DECLS - -#if __WORDSIZE == 32 - -extern Elf32_Addr la_sparc32_gnu_pltenter (Elf32_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_sparc32_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_sparc32_gnu_pltexit (Elf32_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_sparc32_regs *__inregs, - La_sparc32_retval *__outregs, - const char *__symname); - -#else - -extern Elf64_Addr la_sparc64_gnu_pltenter (Elf64_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_sparc64_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_sparc64_gnu_pltexit (Elf64_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_sparc64_regs *__inregs, - La_sparc64_retval *__outregs, - const char *__symname); - -#endif - -__END_DECLS diff --git a/sysdeps/sparc/bits/string.h b/sysdeps/sparc/bits/string.h deleted file mode 100644 index 4fd4e8d1de..0000000000 --- a/sysdeps/sparc/bits/string.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Optimized, inlined string functions. SPARC version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _STRING_H -# error "Never use directly; include instead." -#endif - -/* sparc uses the aligned string inline ABI. */ -#define _STRING_INLINE_unaligned 0 - -/* sparc32 and sparc64 strchr(x, '\0') perform better than - __rawmemchr(x, '\0'). */ -#define _HAVE_STRING_ARCH_strchr 1 - -/* Don't inline mempcpy into memcpy as sparc has an optimized mempcpy. */ -#define _HAVE_STRING_ARCH_mempcpy 1 diff --git a/sysdeps/sparc/configure b/sysdeps/sparc/configure deleted file mode 100644 index 90a86f6da3..0000000000 --- a/sysdeps/sparc/configure +++ /dev/null @@ -1,83 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/sparc. - -# Check for support of VIS3 et al. instructions in the assembler. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sparc assembler VIS3 support" >&5 -$as_echo_n "checking for sparc assembler VIS3 support... " >&6; } -if ${libc_cv_sparc_as_vis3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.S <<\EOF - .text -foo: fmadds %f1, %f2, %f3, %f5 - fmaddd %f2, %f4, %f8, %f10 - fhadds %f2, %f3, %f5 - fhaddd %f4, %f8, %f10 - pdistn %f2, %f4, %g1 - movdtox %f10, %o0 - movstouw %f9, %o1 - movstosw %f7, %o2 - movxtod %o3, %f18 - movwtos %o4, %f15 - flcmps %fcc0, %f3, %f5 - flcmpd %fcc1, %f4, %f6 -EOF -if { ac_try='${CC-cc} -c $CFLAGS -Wa,-Av9d conftest.S' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - libc_cv_sparc_as_vis3=yes -else - libc_cv_sparc_as_vis3=no -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_sparc_as_vis3" >&5 -$as_echo "$libc_cv_sparc_as_vis3" >&6; } -if test $libc_cv_sparc_as_vis3 = yes; then - $as_echo "#define HAVE_AS_VIS3_SUPPORT 1" >>confdefs.h - -fi -config_vars="$config_vars -have-as-vis3 = $libc_cv_sparc_as_vis3" - -# Check for a GCC emitting GOTDATA relocations. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sparc gcc GOTDATA reloc support" >&5 -$as_echo_n "checking for sparc gcc GOTDATA reloc support... " >&6; } -if ${libc_cv_sparc_gcc_gotdata+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.c <<\EOF -int data; -int foo(void) -{ - return data; -} -EOF -libc_cv_sparc_gcc_gotdata=no -if { ac_try='${CC-cc} -S $CFLAGS -O2 -fPIC conftest.c 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - if grep -q 'gdop_hix22' conftest.s \ - && grep -q 'gdop_lox10' conftest.s; then - libc_cv_sparc_gcc_gotdata=yes - fi -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_sparc_gcc_gotdata" >&5 -$as_echo "$libc_cv_sparc_gcc_gotdata" >&6; } -if test $libc_cv_sparc_gcc_gotdata = yes; then - $as_echo "#define HAVE_GCC_GOTDATA 1" >>confdefs.h - -fi - -if test $libc_cv_sparc_gcc_gotdata = yes; then - $as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h - -fi diff --git a/sysdeps/sparc/configure.ac b/sysdeps/sparc/configure.ac deleted file mode 100644 index 982077c9b9..0000000000 --- a/sysdeps/sparc/configure.ac +++ /dev/null @@ -1,59 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/sparc. - -# Check for support of VIS3 et al. instructions in the assembler. -AC_CACHE_CHECK(for sparc assembler VIS3 support, libc_cv_sparc_as_vis3, [dnl -cat > conftest.S <<\EOF - .text -foo: fmadds %f1, %f2, %f3, %f5 - fmaddd %f2, %f4, %f8, %f10 - fhadds %f2, %f3, %f5 - fhaddd %f4, %f8, %f10 - pdistn %f2, %f4, %g1 - movdtox %f10, %o0 - movstouw %f9, %o1 - movstosw %f7, %o2 - movxtod %o3, %f18 - movwtos %o4, %f15 - flcmps %fcc0, %f3, %f5 - flcmpd %fcc1, %f4, %f6 -EOF -dnl -if AC_TRY_COMMAND([${CC-cc} -c $CFLAGS -Wa,-Av9d conftest.S]); then - libc_cv_sparc_as_vis3=yes -else - libc_cv_sparc_as_vis3=no -fi -rm -f conftest*]) -if test $libc_cv_sparc_as_vis3 = yes; then - AC_DEFINE(HAVE_AS_VIS3_SUPPORT) -fi -LIBC_CONFIG_VAR([have-as-vis3], [$libc_cv_sparc_as_vis3]) - -# Check for a GCC emitting GOTDATA relocations. -AC_CACHE_CHECK(for sparc gcc GOTDATA reloc support, libc_cv_sparc_gcc_gotdata, [dnl -changequote(,)dnl -cat > conftest.c <<\EOF -int data; -int foo(void) -{ - return data; -} -EOF -changequote([,])dnl -dnl -libc_cv_sparc_gcc_gotdata=no -if AC_TRY_COMMAND(${CC-cc} -S $CFLAGS -O2 -fPIC conftest.c 1>&AS_MESSAGE_LOG_FD); then - if grep -q 'gdop_hix22' conftest.s \ - && grep -q 'gdop_lox10' conftest.s; then - libc_cv_sparc_gcc_gotdata=yes - fi -fi -rm -f conftest*]) -if test $libc_cv_sparc_gcc_gotdata = yes; then - AC_DEFINE(HAVE_GCC_GOTDATA) -fi - -if test $libc_cv_sparc_gcc_gotdata = yes; then - AC_DEFINE(PI_STATIC_AND_HIDDEN) -fi diff --git a/sysdeps/sparc/crti.S b/sysdeps/sparc/crti.S deleted file mode 100644 index 1afd816ee7..0000000000 --- a/sysdeps/sparc/crti.S +++ /dev/null @@ -1,93 +0,0 @@ -/* Special .init and .fini section support for sparc. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - -#ifdef __arch64__ -#define STACKFRAME_SIZE 176 -#define GOT_LOAD ldx -#else -#define STACKFRAME_SIZE 96 -#define GOT_LOAD ld -#endif - - .section .init,"ax",@progbits - .p2align 2 - .globl _init - .type _init, @function -_init: - save %sp, -STACKFRAME_SIZE, %sp -#if PREINIT_FUNCTION_WEAK - SETUP_PIC_REG(l7) - sethi %gdop_hix22(PREINIT_FUNCTION), %g1 - xor %g1, %gdop_lox10(PREINIT_FUNCTION), %g1 - GOT_LOAD [%l7 + %g1], %g1, %gdop(PREINIT_FUNCTION) - cmp %g1, 0 - be 1f - nop - call PREINIT_FUNCTION - nop -1: -#else - call PREINIT_FUNCTION - nop -#endif - - .section .fini,"ax",@progbits - .p2align 2 - .globl _fini - .type _fini, @function -_fini: - save %sp, -STACKFRAME_SIZE, %sp diff --git a/sysdeps/sparc/crtn.S b/sysdeps/sparc/crtn.S deleted file mode 100644 index 7c2cc96727..0000000000 --- a/sysdeps/sparc/crtn.S +++ /dev/null @@ -1,45 +0,0 @@ -/* Special .init and .fini section support for sparc. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .section .init,"ax",@progbits - jmp %i7 + 8 - restore - - .section .fini,"ax",@progbits - jmp %i7 + 8 - restore diff --git a/sysdeps/sparc/dl-dtprocnum.h b/sysdeps/sparc/dl-dtprocnum.h deleted file mode 100644 index 90e956d646..0000000000 --- a/sysdeps/sparc/dl-dtprocnum.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Configuration of lookup functions. SPARC version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Number of extra dynamic section entries for this architecture. By - default there are none. */ -#define DT_THISPROCNUM DT_SPARC_NUM diff --git a/sysdeps/sparc/dl-procinfo.c b/sysdeps/sparc/dl-procinfo.c deleted file mode 100644 index 653bdfb546..0000000000 --- a/sysdeps/sparc/dl-procinfo.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Data for Linux/sparc version of processor capability information. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This information must be kept in sync with the _DL_HWCAP_COUNT - definition in procinfo.h. - - If anything should be added here check whether the size of each string - is still ok with the given array size. - - All the #ifdefs in the definitions ar equite irritating but - necessary if we want to avoid duplicating the information. There - are three different modes: - - - PROCINFO_DECL is defined. This means we are only interested in - declarations. - - - PROCINFO_DECL is not defined: - - + if SHARED is defined the file is included in an array - initializer. The .element = { ... } syntax is needed. - - + if SHARED is not defined a normal array initialization is - needed. - */ - -#ifndef PROCINFO_CLASS -#define PROCINFO_CLASS -#endif - -#if !defined PROCINFO_DECL && defined SHARED - ._dl_sparc_cap_flags -#else -PROCINFO_CLASS const char _dl_sparc_cap_flags[27][11] -#endif -#ifndef PROCINFO_DECL - = { "flush", "stbar", "swap", "muldiv", "v9", "ultra3", "v9v", "v9v2", - "mul32", "div32", "fsmuld", "v8plus", "popc", "vis", "vis2", - "ASIBlkInit", "fmaf", "vis3", "hpc", "random", "trans", "fjfmau", - "ima", "cspare", "pause", "cbcond", "crypto" } -#endif -#if !defined SHARED || defined PROCINFO_DECL -; -#else -, -#endif - -#undef PROCINFO_DECL -#undef PROCINFO_CLASS diff --git a/sysdeps/sparc/dl-procinfo.h b/sysdeps/sparc/dl-procinfo.h deleted file mode 100644 index 456dde6c9e..0000000000 --- a/sysdeps/sparc/dl-procinfo.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Linux/sparc version of processor capability information handling macros. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_PROCINFO_H -#define _DL_PROCINFO_H 1 - -#include -#include - -#define _DL_HWCAP_COUNT 27 - -static inline int -__attribute__ ((unused)) -_dl_procinfo (unsigned int type, unsigned long int word) -{ - int i; - - /* Fallback to unknown output mechanism. */ - if (type == AT_HWCAP2) - return -1; - - _dl_printf ("AT_HWCAP: "); - - for (i = 0; i < _DL_HWCAP_COUNT; ++i) - if (word & (1 << i)) - _dl_printf (" %s", GLRO(dl_sparc_cap_flags)[i]); - - _dl_printf ("\n"); - - return 0; -} - -static inline const char * -__attribute__ ((unused)) -_dl_hwcap_string (int idx) -{ - return GLRO(dl_sparc_cap_flags)[idx]; -}; - -static inline int -__attribute__ ((unused, always_inline)) -_dl_string_hwcap (const char *str) -{ - int i; - for (i = 0; i < _DL_HWCAP_COUNT; i++) - { - if (strcmp (str, GLRO(dl_sparc_cap_flags) [i]) == 0) - return i; - } - return -1; -}; - -#include -#define HWCAP_IMPORTANT_V9 (__WORDSIZE == 64 ? 0 : HWCAP_SPARC_V9) -#define HWCAP_IMPORTANT (HWCAP_IMPORTANT_V9 | HWCAP_SPARC_ULTRA3 \ - | HWCAP_SPARC_BLKINIT | HWCAP_SPARC_N2) - -/* There're no platforms to filter out. */ -#define _DL_HWCAP_PLATFORM 0 - -#define _dl_string_platform(str) (-1) - -#endif /* dl-procinfo.h */ diff --git a/sysdeps/sparc/dl-sysdep.h b/sysdeps/sparc/dl-sysdep.h deleted file mode 100644 index caf5c5fb32..0000000000 --- a/sysdeps/sparc/dl-sysdep.h +++ /dev/null @@ -1,23 +0,0 @@ -/* System-specific settings for dynamic linker code. SPARC version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include_next - -/* _dl_argv cannot be attribute_relro, because _dl_start_user - might write into it after _dl_start returns. */ -#define DL_ARGV_NOT_RELRO 1 diff --git a/sysdeps/sparc/dl-tls.h b/sysdeps/sparc/dl-tls.h deleted file mode 100644 index bee27e267b..0000000000 --- a/sysdeps/sparc/dl-tls.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. SPARC version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - - -extern void *__tls_get_addr (tls_index *ti); diff --git a/sysdeps/sparc/fpu/bits/fenv.h b/sysdeps/sparc/fpu/bits/fenv.h deleted file mode 100644 index 95e37d0b2c..0000000000 --- a/sysdeps/sparc/fpu/bits/fenv.h +++ /dev/null @@ -1,101 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - -#include - - -/* Define bits representing the exception. We use the bit positions - of the appropriate accrued exception bits from the FSR. */ -enum - { - FE_INVALID = -#define FE_INVALID (1 << 9) - FE_INVALID, - FE_OVERFLOW = -#define FE_OVERFLOW (1 << 8) - FE_OVERFLOW, - FE_UNDERFLOW = -#define FE_UNDERFLOW (1 << 7) - FE_UNDERFLOW, - FE_DIVBYZERO = -#define FE_DIVBYZERO (1 << 6) - FE_DIVBYZERO, - FE_INEXACT = -#define FE_INEXACT (1 << 5) - FE_INEXACT - }; - -#define FE_ALL_EXCEPT \ - (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) - -/* The Sparc FPU supports all of the four defined rounding modes. We - use again the bit positions in the FPU control word as the values - for the appropriate macros. */ -enum - { - FE_TONEAREST = -#define FE_TONEAREST (0 << 30) - FE_TONEAREST, - FE_TOWARDZERO = -#define FE_TOWARDZERO (1 << 30) - FE_TOWARDZERO, - FE_UPWARD = -#define FE_UPWARD (-0x7fffffff - 1) /* (2 << 30) */ - FE_UPWARD, - FE_DOWNWARD = -#define FE_DOWNWARD (-0x40000000) /* (3 << 30) */ - FE_DOWNWARD - }; - -#define __FE_ROUND_MASK (3U << 30) - - -/* Type representing exception flags. */ -typedef unsigned long int fexcept_t; - - -/* Type representing floating-point environment. */ -typedef unsigned long int fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1) - -#ifdef __USE_GNU -/* Floating-point environment where none of the exception is masked. */ -# define FE_NOMASK_ENV ((const fenv_t *) -2) -#endif - -/* For internal use only: access the fp state register. */ -#if __WORDSIZE == 64 -# define __fenv_stfsr(X) __asm__ __volatile__ ("stx %%fsr,%0" : "=m" (X)) -# define __fenv_ldfsr(X) __asm__ __volatile__ ("ldx %0,%%fsr" : : "m" (X)) -#else -# define __fenv_stfsr(X) __asm__ __volatile__ ("st %%fsr,%0" : "=m" (X)) -# define __fenv_ldfsr(X) __asm__ __volatile__ ("ld %0,%%fsr" : : "m" (X)) -#endif - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef unsigned long int femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) -1L) -#endif diff --git a/sysdeps/sparc/fpu/bits/mathinline.h b/sysdeps/sparc/fpu/bits/mathinline.h deleted file mode 100644 index 60a2028f2c..0000000000 --- a/sysdeps/sparc/fpu/bits/mathinline.h +++ /dev/null @@ -1,290 +0,0 @@ -/* Inline math functions for SPARC. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#include - -#ifdef __GNUC__ - -#if defined __USE_ISOC99 && !__GNUC_PREREQ (3, 0) -# undef isgreater -# undef isgreaterequal -# undef isless -# undef islessequal -# undef islessgreater -# undef isunordered - -# if __WORDSIZE == 32 - -# ifndef __NO_LONG_DOUBLE_MATH - -# define __unordered_cmp(x, y) \ - (__extension__ \ - ({ unsigned __r; \ - if (sizeof (x) == 4 && sizeof (y) == 4) \ - { \ - float __x = (x); float __y = (y); \ - __asm__ ("fcmps %1,%2; st %%fsr, %0" : "=m" (__r) : "f" (__x), \ - "f" (__y) : "cc"); \ - } \ - else if (sizeof (x) <= 8 && sizeof (y) <= 8) \ - { \ - double __x = (x); double __y = (y); \ - __asm__ ("fcmpd\t%1,%2\n\tst\t%%fsr,%0" : "=m" (__r) : "f" (__x), \ - "f" (__y) : "cc"); \ - } \ - else \ - { \ - long double __x = (x); long double __y = (y); \ - extern int _Q_cmp (const long double a, const long double b); \ - __r = _Q_cmp (__x, __y) << 10; \ - } \ - __r; })) - -# else - -# define __unordered_cmp(x, y) \ - (__extension__ \ - ({ unsigned __r; \ - if (sizeof (x) == 4 && sizeof (y) == 4) \ - { \ - float __x = (x); float __y = (y); \ - __asm__ ("fcmps %1,%2; st %%fsr, %0" : "=m" (__r) : "f" (__x), \ - "f" (__y) : "cc"); \ - } \ - else \ - { \ - double __x = (x); double __y = (y); \ - __asm__ ("fcmpd\t%1,%2\n\tst\t%%fsr,%0" : "=m" (__r) : "f" (__x), \ - "f" (__y) : "cc"); \ - } \ - __r; })) - -# endif - -# define isgreater(x, y) ((__unordered_cmp (x, y) & (3 << 10)) == (2 << 10)) -# define isgreaterequal(x, y) ((__unordered_cmp (x, y) & (1 << 10)) == 0) -# define isless(x, y) ((__unordered_cmp (x, y) & (3 << 10)) == (1 << 10)) -# define islessequal(x, y) ((__unordered_cmp (x, y) & (2 << 10)) == 0) -# define islessgreater(x, y) (((__unordered_cmp (x, y) + (1 << 10)) & (2 << 10)) != 0) -# define isunordered(x, y) ((__unordered_cmp (x, y) & (3 << 10)) == (3 << 10)) - -# else /* sparc64 */ - -# define __unordered_v9cmp(x, y, op, qop) \ - (__extension__ \ - ({ unsigned __r; \ - if (sizeof (x) == 4 && sizeof (y) == 4) \ - { \ - float __x = (x); float __y = (y); \ - __asm__ ("fcmps\t%%fcc3,%1,%2\n\tmov" op "\t%%fcc3,1,%0" \ - : "=r" (__r) : "f" (__x), "f" (__y), "0" (0) : "cc"); \ - } \ - else if (sizeof (x) <= 8 && sizeof (y) <= 8) \ - { \ - double __x = (x); double __y = (y); \ - __asm__ ("fcmpd\t%%fcc3,%1,%2\n\tmov" op "\t%%fcc3,1,%0" \ - : "=r" (__r) : "f" (__x), "f" (__y), "0" (0) : "cc"); \ - } \ - else \ - { \ - long double __x = (x); long double __y = (y); \ - extern int _Qp_cmp (const long double *a, const long double *b); \ - __r = qop; \ - } \ - __r; })) - -# define isgreater(x, y) __unordered_v9cmp(x, y, "g", _Qp_cmp (&__x, &__y) == 2) -# define isgreaterequal(x, y) __unordered_v9cmp(x, y, "ge", (_Qp_cmp (&__x, &__y) & 1) == 0) -# define isless(x, y) __unordered_v9cmp(x, y, "l", _Qp_cmp (&__x, &__y) == 1) -# define islessequal(x, y) __unordered_v9cmp(x, y, "le", (_Qp_cmp (&__x, &__y) & 2) == 0) -# define islessgreater(x, y) __unordered_v9cmp(x, y, "lg", ((_Qp_cmp (&__x, &__y) + 1) & 2) != 0) -# define isunordered(x, y) __unordered_v9cmp(x, y, "u", _Qp_cmp (&__x, &__y) == 3) - -# endif /* sparc64 */ - -#endif /* __USE_ISOC99 */ - -#if (!defined __NO_MATH_INLINES || defined __LIBC_INTERNAL_MATH_INLINES) && defined __OPTIMIZE__ - -# ifndef __extern_inline -# define __MATH_INLINE __inline -# else -# define __MATH_INLINE __extern_inline -# endif /* __cplusplus */ - -/* The gcc, version 2.7 or below, has problems with all this inlining - code. So disable it for this version of the compiler. */ -# if __GNUC_PREREQ (2, 8) - -# ifdef __USE_ISOC99 - -/* Test for negative number. Used in the signbit() macro. */ -__MATH_INLINE int -__NTH (__signbitf (float __x)) -{ - __extension__ union { float __f; int __i; } __u = { __f: __x }; - return __u.__i < 0; -} - -# if __WORDSIZE == 32 - -__MATH_INLINE int -__NTH (__signbit (double __x)) -{ - __extension__ union { double __d; int __i[2]; } __u = { __d: __x }; - return __u.__i[0] < 0; -} - -# ifndef __NO_LONG_DOUBLE_MATH -__MATH_INLINE int -__NTH (__signbitl (long double __x)) -{ - __extension__ union { long double __l; int __i[4]; } __u = { __l: __x }; - return __u.__i[0] < 0; -} -# else -__MATH_INLINE int -__NTH (__signbitl (long double __x)) -{ - return __signbit ((double)__x); -} -# endif - -# else /* sparc64 */ - -__MATH_INLINE int -__NTH (__signbit (double __x)) -{ - __extension__ union { double __d; long int __i; } __u = { __d: __x }; - return __u.__i < 0; -} - -__MATH_INLINE int -__NTH (__signbitl (long double __x)) -{ - __extension__ union { long double __l; long int __i[2]; } __u = { __l: __x }; - return __u.__i[0] < 0; -} - -# endif /* sparc64 */ - -# endif /* __USE_ISOC99 */ - -# if !defined __NO_MATH_INLINES && !__GNUC_PREREQ (3, 2) - -__MATH_INLINE double -__NTH (sqrt (double __x)) -{ - register double __r; - __asm ("fsqrtd %1,%0" : "=f" (__r) : "f" (__x)); - return __r; -} - -__MATH_INLINE float -__NTH (sqrtf (float __x)) -{ - register float __r; - __asm ("fsqrts %1,%0" : "=f" (__r) : "f" (__x)); - return __r; -} - -# if __WORDSIZE == 64 -__MATH_INLINE long double -__NTH (sqrtl (long double __x)) -{ - long double __r; - extern void _Qp_sqrt (long double *, const long double *); - _Qp_sqrt (&__r, &__x); - return __r; -} -# elif !defined __NO_LONG_DOUBLE_MATH -__MATH_INLINE long double -sqrtl (long double __x) __THROW -{ - extern long double _Q_sqrt (const long double); - return _Q_sqrt (__x); -} -# endif /* sparc64 */ - -# endif /* !__NO_MATH_INLINES && !GCC 3.2+ */ - -/* This code is used internally in the GNU libc. */ -# ifdef __LIBC_INTERNAL_MATH_INLINES -__MATH_INLINE double -__ieee754_sqrt (double __x) -{ - register double __r; - __asm ("fsqrtd %1,%0" : "=f" (__r) : "f" (__x)); - return __r; -} - -__MATH_INLINE float -__ieee754_sqrtf (float __x) -{ - register float __r; - __asm ("fsqrts %1,%0" : "=f" (__r) : "f" (__x)); - return __r; -} - -# if __WORDSIZE == 64 -__MATH_INLINE long double -__ieee754_sqrtl (long double __x) -{ - long double __r; - extern void _Qp_sqrt (long double *, const long double *); - _Qp_sqrt(&__r, &__x); - return __r; -} -# elif !defined __NO_LONG_DOUBLE_MATH -__MATH_INLINE long double -__ieee754_sqrtl (long double __x) -{ - extern long double _Q_sqrt (const long double); - return _Q_sqrt (__x); -} -# endif /* sparc64 */ -# endif /* __LIBC_INTERNAL_MATH_INLINES */ -# endif /* gcc 2.8+ */ - -# ifdef __USE_ISOC99 - -# ifndef __NO_MATH_INLINES - -__MATH_INLINE double __NTH (fdim (double __x, double __y)); -__MATH_INLINE double -__NTH (fdim (double __x, double __y)) -{ - return __x <= __y ? 0 : __x - __y; -} - -__MATH_INLINE float __NTH (fdimf (float __x, float __y)); -__MATH_INLINE float -__NTH (fdimf (float __x, float __y)) -{ - return __x <= __y ? 0 : __x - __y; -} - -# endif /* !__NO_MATH_INLINES */ -# endif /* __USE_ISOC99 */ -#endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */ -#endif /* __GNUC__ */ diff --git a/sysdeps/sparc/fpu/fclrexcpt.c b/sysdeps/sparc/fpu/fclrexcpt.c deleted file mode 100644 index 16ca6b64fc..0000000000 --- a/sysdeps/sparc/fpu/fclrexcpt.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__feclearexcept (int excepts) -{ - fenv_t tmp; - - __fenv_stfsr (tmp); - - tmp &= ~(excepts & FE_ALL_EXCEPT); - - __fenv_ldfsr (tmp); - - /* Success. */ - return 0; -} - -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feclearexcept, __old_feclearexcept) -compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1); -#endif - -libm_hidden_ver (__feclearexcept, feclearexcept) -versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2); diff --git a/sysdeps/sparc/fpu/fedisblxcpt.c b/sysdeps/sparc/fpu/fedisblxcpt.c deleted file mode 100644 index 74d1722093..0000000000 --- a/sysdeps/sparc/fpu/fedisblxcpt.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fedisableexcept (int excepts) -{ - fenv_t new_exc, old_exc; - - __fenv_stfsr (new_exc); - - old_exc = (new_exc >> 18) & FE_ALL_EXCEPT; - new_exc &= ~(((fenv_t)excepts & FE_ALL_EXCEPT) << 18); - - __fenv_ldfsr (new_exc); - - return old_exc; -} diff --git a/sysdeps/sparc/fpu/feenablxcpt.c b/sysdeps/sparc/fpu/feenablxcpt.c deleted file mode 100644 index 64e2f04eaf..0000000000 --- a/sysdeps/sparc/fpu/feenablxcpt.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -feenableexcept (int excepts) -{ - fenv_t new_exc, old_exc; - - __fenv_stfsr (new_exc); - - old_exc = (new_exc >> 18) & FE_ALL_EXCEPT; - new_exc |= (((fenv_t)excepts & FE_ALL_EXCEPT) << 18); - - __fenv_ldfsr (new_exc); - - return old_exc; -} diff --git a/sysdeps/sparc/fpu/fegetenv.c b/sysdeps/sparc/fpu/fegetenv.c deleted file mode 100644 index c497d2d72c..0000000000 --- a/sysdeps/sparc/fpu/fegetenv.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__fegetenv (fenv_t *envp) -{ - __fenv_stfsr (*envp); - - /* Success. */ - return 0; -} - -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetenv, __old_fegetenv) -compat_symbol (libm, __old_fegetenv, fegetenv, GLIBC_2_1); -#endif - -libm_hidden_def (__fegetenv) -libm_hidden_ver (__fegetenv, fegetenv) -versioned_symbol (libm, __fegetenv, fegetenv, GLIBC_2_2); diff --git a/sysdeps/sparc/fpu/fegetexcept.c b/sysdeps/sparc/fpu/fegetexcept.c deleted file mode 100644 index 77afc73e0f..0000000000 --- a/sysdeps/sparc/fpu/fegetexcept.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Get enabled floating-point exceptions. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fegetexcept (void) -{ - fenv_t exc; - __fenv_stfsr (exc); - - return (exc >> 18) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/sparc/fpu/fegetmode.c b/sysdeps/sparc/fpu/fegetmode.c deleted file mode 100644 index 53294dd542..0000000000 --- a/sysdeps/sparc/fpu/fegetmode.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Store current floating-point control modes. SPARC version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fegetmode (femode_t *modep) -{ - __fenv_stfsr (*modep); - return 0; -} diff --git a/sysdeps/sparc/fpu/fegetround.c b/sysdeps/sparc/fpu/fegetround.c deleted file mode 100644 index d1225df652..0000000000 --- a/sysdeps/sparc/fpu/fegetround.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fegetround (void) -{ - fenv_t tmp; - - __fenv_stfsr (tmp); - - return tmp & __FE_ROUND_MASK; -} -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/sparc/fpu/feholdexcpt.c b/sysdeps/sparc/fpu/feholdexcpt.c deleted file mode 100644 index 8a712d892f..0000000000 --- a/sysdeps/sparc/fpu/feholdexcpt.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__feholdexcept (fenv_t *envp) -{ - fenv_t tmp; - - __fenv_stfsr (*envp); - - /* Set all exceptions to non-stop and clear all exceptions. */ - tmp = *envp & ~((0x1f << 23) | FE_ALL_EXCEPT); - - __fenv_ldfsr (tmp); - - return 0; -} -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/sparc/fpu/fenv_private.h b/sysdeps/sparc/fpu/fenv_private.h deleted file mode 100644 index 29b5d123cf..0000000000 --- a/sysdeps/sparc/fpu/fenv_private.h +++ /dev/null @@ -1,182 +0,0 @@ -#ifndef FENV_PRIVATE_H -#define FENV_PRIVATE_H 1 - -#include - -static __always_inline void -libc_feholdexcept (fenv_t *e) -{ - fenv_t etmp; - __fenv_stfsr(etmp); - *(e) = etmp; - etmp = etmp & ~((0x1f << 23) | FE_ALL_EXCEPT); - __fenv_ldfsr(etmp); -} - -static __always_inline void -libc_fesetround (int r) -{ - fenv_t etmp; - __fenv_stfsr(etmp); - etmp = (etmp & ~__FE_ROUND_MASK) | (r); - __fenv_ldfsr(etmp); -} - -static __always_inline void -libc_feholdexcept_setround (fenv_t *e, int r) -{ - fenv_t etmp; - __fenv_stfsr(etmp); - *(e) = etmp; - etmp = etmp & ~((0x1f << 23) | FE_ALL_EXCEPT); - etmp = (etmp & ~__FE_ROUND_MASK) | (r); - __fenv_ldfsr(etmp); -} - -static __always_inline int -libc_fetestexcept (int e) -{ - fenv_t etmp; - __fenv_stfsr(etmp); - return etmp & (e) & FE_ALL_EXCEPT; -} - -static __always_inline void -libc_fesetenv (fenv_t *e) -{ - __fenv_ldfsr(*e); -} - -static __always_inline int -libc_feupdateenv_test (fenv_t *e, int ex) -{ - fenv_t etmp; - - __fenv_stfsr(etmp); - etmp &= FE_ALL_EXCEPT; - - __fenv_ldfsr(*e); - - __feraiseexcept (etmp); - - return etmp & ex; -} - -static __always_inline void -libc_feupdateenv (fenv_t *e) -{ - libc_feupdateenv_test (e, 0); -} - -static __always_inline void -libc_feholdsetround (fenv_t *e, int r) -{ - fenv_t etmp; - __fenv_stfsr(etmp); - *(e) = etmp; - etmp = (etmp & ~__FE_ROUND_MASK) | (r); - __fenv_ldfsr(etmp); -} - -static __always_inline void -libc_feresetround (fenv_t *e) -{ - fenv_t etmp; - __fenv_stfsr(etmp); - etmp = (etmp & ~__FE_ROUND_MASK) | (*e & __FE_ROUND_MASK); - __fenv_ldfsr(etmp); -} - -#define libc_feholdexceptf libc_feholdexcept -#define libc_fesetroundf libc_fesetround -#define libc_feholdexcept_setroundf libc_feholdexcept_setround -#define libc_fetestexceptf libc_fetestexcept -#define libc_fesetenvf libc_fesetenv -#define libc_feupdateenv_testf libc_feupdateenv_test -#define libc_feupdateenvf libc_feupdateenv -#define libc_feholdsetroundf libc_feholdsetround -#define libc_feresetroundf libc_feresetround -#define libc_feholdexcept libc_feholdexcept -#define libc_fesetround libc_fesetround -#define libc_feholdexcept_setround libc_feholdexcept_setround -#define libc_fetestexcept libc_fetestexcept -#define libc_fesetenv libc_fesetenv -#define libc_feupdateenv_test libc_feupdateenv_test -#define libc_feupdateenv libc_feupdateenv -#define libc_feholdsetround libc_feholdsetround -#define libc_feresetround libc_feresetround -#define libc_feholdexceptl libc_feholdexcept -#define libc_fesetroundl libc_fesetround -#define libc_feholdexcept_setroundl libc_feholdexcept_setround -#define libc_fetestexceptl libc_fetestexcept -#define libc_fesetenvl libc_fesetenv -#define libc_feupdateenv_testl libc_feupdateenv_test -#define libc_feupdateenvl libc_feupdateenv -#define libc_feholdsetroundl libc_feholdsetround -#define libc_feresetroundl libc_feresetround - -/* We have support for rounding mode context. */ -#define HAVE_RM_CTX 1 - -static __always_inline void -libc_feholdexcept_setround_sparc_ctx (struct rm_ctx *ctx, int round) -{ - fenv_t new; - - __fenv_stfsr(ctx->env); - new = ctx->env & ~((0x1f << 23) | FE_ALL_EXCEPT); - new = (new & ~__FE_ROUND_MASK) | round; - if (__glibc_unlikely (new != ctx->env)) - { - __fenv_ldfsr(new); - ctx->updated_status = true; - } - else - ctx->updated_status = false; -} - -static __always_inline void -libc_fesetenv_sparc_ctx (struct rm_ctx *ctx) -{ - libc_fesetenv(&ctx->env); -} - -static __always_inline void -libc_feupdateenv_sparc_ctx (struct rm_ctx *ctx) -{ - if (__glibc_unlikely (ctx->updated_status)) - libc_feupdateenv_test (&ctx->env, 0); -} - -static __always_inline void -libc_feholdsetround_sparc_ctx (struct rm_ctx *ctx, int round) -{ - fenv_t new; - - __fenv_stfsr(ctx->env); - new = (ctx->env & ~__FE_ROUND_MASK) | round; - if (__glibc_unlikely (new != ctx->env)) - { - __fenv_ldfsr(new); - ctx->updated_status = true; - } - else - ctx->updated_status = false; -} -#define libc_feholdexcept_setround_ctx libc_feholdexcept_setround_sparc_ctx -#define libc_feholdexcept_setroundf_ctx libc_feholdexcept_setround_sparc_ctx -#define libc_feholdexcept_setroundl_ctx libc_feholdexcept_setround_sparc_ctx -#define libc_fesetenv_ctx libc_fesetenv_sparc_ctx -#define libc_fesetenvf_ctx libc_fesetenv_sparc_ctx -#define libc_fesetenvl_ctx libc_fesetenv_sparc_ctx -#define libc_feupdateenv_ctx libc_feupdateenv_sparc_ctx -#define libc_feupdateenvf_ctx libc_feupdateenv_sparc_ctx -#define libc_feupdateenvl_ctx libc_feupdateenv_sparc_ctx -#define libc_feresetround_ctx libc_feupdateenv_sparc_ctx -#define libc_feresetroundf_ctx libc_feupdateenv_sparc_ctx -#define libc_feresetroundl_ctx libc_feupdateenv_sparc_ctx -#define libc_feholdsetround_ctx libc_feholdsetround_sparc_ctx -#define libc_feholdsetroundf_ctx libc_feholdsetround_sparc_ctx -#define libc_feholdsetroundl_ctx libc_feholdsetround_sparc_ctx - -#endif /* FENV_PRIVATE_H */ diff --git a/sysdeps/sparc/fpu/fesetenv.c b/sysdeps/sparc/fpu/fesetenv.c deleted file mode 100644 index 22b80e22ea..0000000000 --- a/sysdeps/sparc/fpu/fesetenv.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__fesetenv (const fenv_t *envp) -{ - fenv_t dummy; - - /* Put these constants in memory explicitly, so as to cope with a - -fPIC bug as of gcc 970624. Making them automatic is quicker - than loading up the pic register in this instance. */ - - if (envp == FE_DFL_ENV) - { - dummy = 0; - envp = &dummy; - } - else if (envp == FE_NOMASK_ENV) - { - dummy = 0x1f << 23; - envp = &dummy; - } - - __fenv_ldfsr (*envp); - - /* Success. */ - return 0; -} - -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetenv, __old_fesetenv) -compat_symbol (libm, __old_fesetenv, fesetenv, GLIBC_2_1); -#endif - -libm_hidden_def (__fesetenv) -libm_hidden_ver (__fesetenv, fesetenv) -versioned_symbol (libm, __fesetenv, fesetenv, GLIBC_2_2); diff --git a/sysdeps/sparc/fpu/fesetexcept.c b/sysdeps/sparc/fpu/fesetexcept.c deleted file mode 100644 index 42ff865c07..0000000000 --- a/sysdeps/sparc/fpu/fesetexcept.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Set given exception flags. SPARC version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fesetexcept (int excepts) -{ - fenv_t tmp; - - __fenv_stfsr (tmp); - tmp |= excepts & FE_ALL_EXCEPT; - __fenv_ldfsr (tmp); - - return 0; -} diff --git a/sysdeps/sparc/fpu/fesetmode.c b/sysdeps/sparc/fpu/fesetmode.c deleted file mode 100644 index c678c8b8d9..0000000000 --- a/sysdeps/sparc/fpu/fesetmode.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Install given floating-point control modes. SPARC version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define FPU_CONTROL_BITS 0xcfc00000UL - -int -fesetmode (const femode_t *modep) -{ - femode_t fsr; - - __fenv_stfsr (fsr); - fsr &= ~FPU_CONTROL_BITS; - if (modep == FE_DFL_MODE) - fsr |= _FPU_DEFAULT; - else - fsr |= *modep & FPU_CONTROL_BITS; - __fenv_ldfsr (fsr); - - return 0; -} diff --git a/sysdeps/sparc/fpu/fesetround.c b/sysdeps/sparc/fpu/fesetround.c deleted file mode 100644 index e2a528a4c5..0000000000 --- a/sysdeps/sparc/fpu/fesetround.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fesetround (int round) -{ - fenv_t tmp; - - if ((round & ~__FE_ROUND_MASK) != 0) - /* ROUND is no valid rounding mode. */ - return 1; - - __fenv_stfsr (tmp); - tmp &= ~__FE_ROUND_MASK; - tmp |= round; - __fenv_ldfsr (tmp); - - return 0; -} -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/sparc/fpu/feupdateenv.c b/sysdeps/sparc/fpu/feupdateenv.c deleted file mode 100644 index 08615640d7..0000000000 --- a/sysdeps/sparc/fpu/feupdateenv.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__feupdateenv (const fenv_t *envp) -{ - fexcept_t tmp; - - /* Save current exceptions. */ - __fenv_stfsr (tmp); - tmp &= FE_ALL_EXCEPT; - - /* Install new environment. */ - __fesetenv (envp); - - /* Raise the safed exception. Incidently for us the implementation - defined format of the values in objects of type fexcept_t is the - same as the ones specified using the FE_* constants. */ - __feraiseexcept ((int) tmp); - - /* Success. */ - return 0; -} - -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feupdateenv, __old_feupdateenv) -compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1); -#endif - -libm_hidden_def (__feupdateenv) -libm_hidden_ver (__feupdateenv, feupdateenv) -versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2); diff --git a/sysdeps/sparc/fpu/fgetexcptflg.c b/sysdeps/sparc/fpu/fgetexcptflg.c deleted file mode 100644 index ab05a3caf8..0000000000 --- a/sysdeps/sparc/fpu/fgetexcptflg.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__fegetexceptflag (fexcept_t *flagp, int excepts) -{ - fexcept_t tmp; - - /* Get the current exceptions. */ - __fenv_stfsr (tmp); - - *flagp = tmp & excepts & FE_ALL_EXCEPT; - - /* Success. */ - return 0; -} - -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetexceptflag, __old_fegetexceptflag) -compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2); diff --git a/sysdeps/sparc/fpu/fpu_control.h b/sysdeps/sparc/fpu/fpu_control.h deleted file mode 100644 index 77acde9253..0000000000 --- a/sysdeps/sparc/fpu/fpu_control.h +++ /dev/null @@ -1,72 +0,0 @@ -/* FPU control word bits. SPARC version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Miguel de Icaza - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FPU_CONTROL_H -#define _FPU_CONTROL_H 1 - - -#include -#include - -/* masking of interrupts */ -#define _FPU_MASK_IM 0x08000000 -#define _FPU_MASK_OM 0x04000000 -#define _FPU_MASK_UM 0x02000000 -#define _FPU_MASK_ZM 0x01000000 -#define _FPU_MASK_PM 0x00800000 - -/* precision control */ -#define _FPU_EXTENDED 0x00000000 /* RECOMMENDED */ -#define _FPU_DOUBLE 0x20000000 -#define _FPU_80BIT 0x30000000 -#define _FPU_SINGLE 0x10000000 /* DO NOT USE */ - -/* rounding control / Sparc */ -#define _FPU_RC_DOWN 0xc0000000 -#define _FPU_RC_UP 0x80000000 -#define _FPU_RC_ZERO 0x40000000 -#define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */ - -#define _FPU_RESERVED 0x30300000 /* Reserved bits in cw */ - - -/* Now two recommended cw */ - -/* Linux and IEEE default: - - extended precision - - rounding to nearest - - no exceptions */ -#define _FPU_DEFAULT 0x0 -#define _FPU_IEEE 0x0 - -/* Type of the control word. */ -typedef unsigned long int fpu_control_t; - -#if __WORDSIZE == 64 -# define _FPU_GETCW(cw) __asm__ __volatile__ ("stx %%fsr,%0" : "=m" (*&cw)) -# define _FPU_SETCW(cw) __asm__ __volatile__ ("ldx %0,%%fsr" : : "m" (*&cw)) -#else -# define _FPU_GETCW(cw) __asm__ __volatile__ ("st %%fsr,%0" : "=m" (*&cw)) -# define _FPU_SETCW(cw) __asm__ __volatile__ ("ld %0,%%fsr" : : "m" (*&cw)) -#endif - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#endif /* fpu_control.h */ diff --git a/sysdeps/sparc/fpu/fraiseexcpt.c b/sysdeps/sparc/fpu/fraiseexcpt.c deleted file mode 100644 index 954166ed64..0000000000 --- a/sysdeps/sparc/fpu/fraiseexcpt.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Raise given exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -__feraiseexcept (int excepts) -{ - static const struct { - double zero, one, max, min, pi; - } c = { - 0.0, 1.0, DBL_MAX, DBL_MIN, M_PI - }; - double d; - - /* Raise exceptions represented by EXPECTS. But we must raise only - one signal at a time. It is important the if the overflow/underflow - exception and the inexact exception are given at the same time, - the overflow/underflow exception follows the inexact exception. */ - - /* First: invalid exception. */ - if ((FE_INVALID & excepts) != 0) - { - /* One example of an invalid operation is 0/0. */ - __asm ("" : "=e" (d) : "0" (c.zero)); - d /= c.zero; - __asm __volatile ("" : : "e" (d)); - } - - /* Next: division by zero. */ - if ((FE_DIVBYZERO & excepts) != 0) - { - __asm ("" : "=e" (d) : "0" (c.one)); - d /= c.zero; - __asm __volatile ("" : : "e" (d)); - } - - /* Next: overflow. */ - if ((FE_OVERFLOW & excepts) != 0) - { - __asm ("" : "=e" (d) : "0" (c.max)); - d *= d; - __asm __volatile ("" : : "e" (d)); - } - - /* Next: underflow. */ - if ((FE_UNDERFLOW & excepts) != 0) - { - __asm ("" : "=e" (d) : "0" (c.min)); - d *= d; - __asm __volatile ("" : : "e" (d)); - } - - /* Last: inexact. */ - if ((FE_INEXACT & excepts) != 0) - { - __asm ("" : "=e" (d) : "0" (c.one)); - d /= c.pi; - __asm __volatile ("" : : "e" (d)); - } - - /* Success. */ - return 0; -} - -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feraiseexcept, __old_feraiseexcept) -compat_symbol (libm, __old_feraiseexcept, feraiseexcept, GLIBC_2_1); -#endif - -libm_hidden_def (__feraiseexcept) -libm_hidden_ver (__feraiseexcept, feraiseexcept) -versioned_symbol (libm, __feraiseexcept, feraiseexcept, GLIBC_2_2); diff --git a/sysdeps/sparc/fpu/fsetexcptflg.c b/sysdeps/sparc/fpu/fsetexcptflg.c deleted file mode 100644 index 3546fbf996..0000000000 --- a/sysdeps/sparc/fpu/fsetexcptflg.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - fenv_t tmp; - - __fenv_stfsr (tmp); - - tmp &= ~(excepts & FE_ALL_EXCEPT); - tmp |= *flagp & excepts & FE_ALL_EXCEPT; - - __fenv_ldfsr (tmp); - - /* Success. */ - return 0; -} - -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetexceptflag, __old_fesetexceptflag) -compat_symbol (libm, __old_fesetexceptflag, fesetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fesetexceptflag, fesetexceptflag, GLIBC_2_2); diff --git a/sysdeps/sparc/fpu/ftestexcept.c b/sysdeps/sparc/fpu/ftestexcept.c deleted file mode 100644 index f2b51f4b12..0000000000 --- a/sysdeps/sparc/fpu/ftestexcept.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fetestexcept (int excepts) -{ - fenv_t tmp; - - __fenv_stfsr (tmp); - - return tmp & excepts & FE_ALL_EXCEPT; -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/sparc/fpu/libm-test-ulps b/sysdeps/sparc/fpu/libm-test-ulps deleted file mode 100644 index cf6a2929d3..0000000000 --- a/sysdeps/sparc/fpu/libm-test-ulps +++ /dev/null @@ -1,2262 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "acosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "acosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "acosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "asin": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "asinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "asinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "asinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "atan": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atan2_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "atan2_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "atanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "atanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "atanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "cabs": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacos_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "cacos_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "cacos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cacos_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: Real part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "carg": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "carg_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "carg_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "carg_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casin": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin_downward": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "casin_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "casin_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: Real part of "casinh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casinh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casinh_downward": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casinh_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casinh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catan_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catan_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "catan_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan_upward": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catanh": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "catanh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catanh_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "catanh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catanh_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_upward": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_upward": -double: 5 -float: 1 -idouble: 5 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccosh_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cexp_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog10": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog10_downward": -double: 6 -float: 6 -idouble: 6 -ifloat: 6 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "clog10_downward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "clog10_towardzero": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_upward": -double: 8 -float: 5 -idouble: 8 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "clog10_upward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog_downward": -double: 7 -float: 5 -idouble: 7 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "clog_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog_towardzero": -double: 7 -float: 5 -idouble: 7 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "clog_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog_upward": -double: 8 -float: 5 -idouble: 8 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "clog_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "cos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "cos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 2 - -Function: "cosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 2 - -Function: "cosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 3 - -Function: Real part of "cpow": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cpow_downward": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cpow_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_towardzero": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "cpow_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_upward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cpow_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csin": -ildouble: 1 -ldouble: 1 - -Function: Real part of "csin_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csin_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csin_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csin_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csinh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt_upward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctan_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctan_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erf_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "erfc": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "erfc_downward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 -ildouble: 5 -ldouble: 5 - -Function: "erfc_towardzero": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "erfc_upward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 -ildouble: 5 -ldouble: 5 - -Function: "exp": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp10": -double: 2 -idouble: 2 -ildouble: 2 -ldouble: 2 - -Function: "exp10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "exp2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp_downward": -double: 1 -idouble: 1 - -Function: "exp_towardzero": -double: 1 -idouble: 1 - -Function: "exp_upward": -double: 1 -idouble: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "expm1_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "expm1_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "gamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "gamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: "gamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "gamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "hypot": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j0_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "j0_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j0_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_upward": -double: 3 -float: 5 -idouble: 3 -ifloat: 5 -ildouble: 3 -ldouble: 3 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "jn_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "jn_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "jn_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 7 -ldouble: 7 - -Function: "lgamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "lgamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: "lgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "lgamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: "log": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "log10_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log1p": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log1p_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "log1p_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "log1p_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log2": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log2_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "log2_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log2_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "log_downward": -float: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log_towardzero": -float: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "pow": -float: 3 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: "pow10": -double: 2 -idouble: 2 -ildouble: 2 -ldouble: 2 - -Function: "pow10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "pow_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: "pow_towardzero": -double: 1 -float: 4 -idouble: 1 -ifloat: 4 -ildouble: 2 -ldouble: 2 - -Function: "pow_upward": -double: 1 -float: 4 -idouble: 1 -ifloat: 4 -ildouble: 2 -ldouble: 2 - -Function: "sin": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sincos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sincos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sincos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "sincos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "sinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "sinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "sinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "tan": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "tan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "tanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "tanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "tanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "tanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "tgamma": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: "tgamma_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_upward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "y0_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "y0_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "y0_upward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "y1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_upward": -double: 7 -float: 2 -idouble: 7 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "yn_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "yn_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -# end of automatic generation diff --git a/sysdeps/sparc/fpu/libm-test-ulps-name b/sysdeps/sparc/fpu/libm-test-ulps-name deleted file mode 100644 index 71240543c4..0000000000 --- a/sysdeps/sparc/fpu/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -Sparc diff --git a/sysdeps/sparc/fpu/math_private.h b/sysdeps/sparc/fpu/math_private.h deleted file mode 100644 index 27946cec7b..0000000000 --- a/sysdeps/sparc/fpu/math_private.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef SPARC_MATH_PRIVATE_H -#define SPARC_MATH_PRIVATE_H 1 - -#include "fenv_private.h" -#include_next - -#endif /* SPARC_MATH_PRIVATE_H */ diff --git a/sysdeps/sparc/gccframe.h b/sysdeps/sparc/gccframe.h deleted file mode 100644 index 30228602e2..0000000000 --- a/sysdeps/sparc/gccframe.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Definition of object in frame unwind info. sparc version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FIRST_PSEUDO_REGISTER 101 - -#include diff --git a/sysdeps/sparc/ldsodefs.h b/sysdeps/sparc/ldsodefs.h deleted file mode 100644 index ad6c3ffe74..0000000000 --- a/sysdeps/sparc/ldsodefs.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SPARC_LDSODEFS_H -#define _SPARC_LDSODEFS_H 1 - -#include - -struct La_sparc32_regs; -struct La_sparc32_retval; -struct La_sparc64_regs; -struct La_sparc64_retval; - -#define ARCH_PLTENTER_MEMBERS \ - Elf32_Addr (*sparc32_gnu_pltenter) (Elf32_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - struct La_sparc32_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep); \ - Elf64_Addr (*sparc64_gnu_pltenter) (Elf64_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - struct La_sparc64_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep) - -#define ARCH_PLTEXIT_MEMBERS \ - unsigned int (*sparc32_gnu_pltexit) (Elf32_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - const struct La_sparc32_regs *, \ - struct La_sparc32_retval *, \ - const char *); \ - unsigned int (*sparc64_gnu_pltexit) (Elf64_Sym *, unsigned int, \ - uintptr_t *, uintptr_t *, \ - const struct La_sparc32_regs *, \ - struct La_sparc32_retval *, \ - const char *) - -#include_next - -#endif diff --git a/sysdeps/sparc/machine-gmon.h b/sysdeps/sparc/machine-gmon.h deleted file mode 100644 index 361d98bb97..0000000000 --- a/sysdeps/sparc/machine-gmon.h +++ /dev/null @@ -1,32 +0,0 @@ -/* sparc-specific implementation of profiling support. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2008 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* We must not pollute the global namespace. */ -#define mcount_internal __mcount_internal - -extern void mcount_internal (u_long frompc, u_long selfpc) internal_function; - -#define _MCOUNT_DECL(frompc, selfpc) \ -void internal_function mcount_internal (u_long frompc, u_long selfpc) - -/* Define MCOUNT as empty since we have the implementation in another - file. */ -#define MCOUNT diff --git a/sysdeps/sparc/mempcpy.S b/sysdeps/sparc/mempcpy.S deleted file mode 100644 index 4c98013757..0000000000 --- a/sysdeps/sparc/mempcpy.S +++ /dev/null @@ -1 +0,0 @@ -/* mempcpy is in memcpy.S */ diff --git a/sysdeps/sparc/memusage.h b/sysdeps/sparc/memusage.h deleted file mode 100644 index 529e966de4..0000000000 --- a/sysdeps/sparc/memusage.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("%sp"); stack_ptr; }) - -#include diff --git a/sysdeps/sparc/nptl/Makefile b/sysdeps/sparc/nptl/Makefile deleted file mode 100644 index 5372867dbd..0000000000 --- a/sysdeps/sparc/nptl/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif - -ifeq ($(subdir),nptl) -CPPFLAGS-pt-crti.S += -fPIC -CPPFLAGS-crtn.S += -fPIC -endif diff --git a/sysdeps/sparc/nptl/bits/pthreadtypes-arch.h b/sysdeps/sparc/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index 1e188cf91f..0000000000 --- a/sysdeps/sparc/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Machine-specific pthread type layouts. SPARC version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -#define _BITS_PTHREADTYPES_ARCH_H 1 - -#include - -#if __WORDSIZE == 64 -# define __SIZEOF_PTHREAD_ATTR_T 56 -# define __SIZEOF_PTHREAD_MUTEX_T 40 -# define __SIZEOF_PTHREAD_CONDATTR_T 4 -# define __SIZEOF_PTHREAD_RWLOCK_T 56 -# define __SIZEOF_PTHREAD_BARRIER_T 32 -#else -# define __SIZEOF_PTHREAD_ATTR_T 36 -# define __SIZEOF_PTHREAD_MUTEX_T 24 -# define __SIZEOF_PTHREAD_CONDATTR_T 4 -# define __SIZEOF_PTHREAD_RWLOCK_T 32 -# define __SIZEOF_PTHREAD_BARRIER_T 20 -#endif -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - -/* Definitions for internal mutex struct. */ -#define __PTHREAD_COMPAT_PADDING_MID -#define __PTHREAD_COMPAT_PADDING_END -#define __PTHREAD_MUTEX_LOCK_ELISION 0 - -#define __LOCK_ALIGNMENT -#define __ONCE_ALIGNMENT - -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; -#if __WORDSIZE == 64 - int __cur_writer; - int __shared; - unsigned long int __pad1; - unsigned long int __pad2; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned int __flags; -#else - unsigned char __pad1; - unsigned char __pad2; - unsigned char __shared; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; - int __cur_writer; -#endif -}; - -#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/sparc/nptl/bits/semaphore.h b/sysdeps/sparc/nptl/bits/semaphore.h deleted file mode 100644 index 6f2e0155a2..0000000000 --- a/sysdeps/sparc/nptl/bits/semaphore.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Machine-specific POSIX semaphore type layouts. SPARC version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - -#include - -#if __WORDSIZE == 64 -# define __SIZEOF_SEM_T 32 -#else -# define __SIZEOF_SEM_T 16 -#endif - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/sysdeps/sparc/nptl/sparc-nptl.h b/sysdeps/sparc/nptl/sparc-nptl.h deleted file mode 100644 index baff918288..0000000000 --- a/sysdeps/sparc/nptl/sparc-nptl.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef _SPARC_NPTL_H - -union sparc_pthread_barrier -{ - struct pthread_barrier b; - struct sparc_pthread_barrier_s - { - unsigned int curr_event; - int lock; - unsigned int left; - unsigned int init_count; - unsigned char left_lock; - unsigned char pshared; - } s; -}; - -struct sparc_new_sem -{ - unsigned int value; - unsigned char lock; - unsigned char private; - unsigned char pad[2]; - unsigned long int nwaiters; -}; - -struct sparc_old_sem -{ - unsigned int value; - unsigned char lock; - unsigned char private; -}; - -#endif diff --git a/sysdeps/sparc/nptl/tcb-offsets.sym b/sysdeps/sparc/nptl/tcb-offsets.sym deleted file mode 100644 index f75d02065e..0000000000 --- a/sysdeps/sparc/nptl/tcb-offsets.sym +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include - -MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads) -POINTER_GUARD offsetof (tcbhead_t, pointer_guard) -TID offsetof (struct pthread, tid) diff --git a/sysdeps/sparc/nptl/tls.h b/sysdeps/sparc/nptl/tls.h deleted file mode 100644 index f363b1958f..0000000000 --- a/sysdeps/sparc/nptl/tls.h +++ /dev/null @@ -1,168 +0,0 @@ -/* Definitions for thread-local data handling. NPTL/sparc version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TLS_H -#define _TLS_H - -#include -#ifndef __ASSEMBLER__ -# include -# include -# include -# include -# include -# include -# include - -typedef struct -{ - void *tcb; /* Pointer to the TCB. Not necessary the - thread descriptor used by libpthread. */ - dtv_t *dtv; - void *self; - int multiple_threads; -#if __WORDSIZE == 64 - int gscope_flag; -#endif - uintptr_t sysinfo; - uintptr_t stack_guard; - uintptr_t pointer_guard; -#if __WORDSIZE != 64 - int gscope_flag; -#endif -#ifndef __ASSUME_PRIVATE_FUTEX - int private_futex; -#endif -} tcbhead_t; - -#else /* __ASSEMBLER__ */ -# include -#endif /* __ASSEMBLER__ */ - - -#ifndef __ASSEMBLER__ -/* Get system call information. */ -# include - -register struct pthread *__thread_self __asm__("%g7"); - -/* This is the size of the initial TCB. Can't be just sizeof (tcbhead_t), - because NPTL getpid, __libc_alloca_cutoff etc. need (almost) the whole - struct pthread even when not linked with -lpthread. */ -# define TLS_INIT_TCB_SIZE sizeof (struct pthread) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE sizeof (struct pthread) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* The TCB can have any size and the memory following the address the - thread pointer points to is unspecified. Allocate the TCB there. */ -# define TLS_TCB_AT_TP 1 -# define TLS_DTV_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(descr, dtvp) \ - ((tcbhead_t *) (descr))->dtv = (dtvp) + 1 - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(DTV) \ - (((tcbhead_t *) __thread_self)->dtv = (DTV)) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(descr) \ - (((tcbhead_t *) (descr))->dtv) - -/* Code to initially initialize the thread pointer. */ -# define TLS_INIT_TP(descr) \ - (__thread_self = (__typeof (__thread_self)) (descr), NULL) - -/* Value passed to 'clone' for initialization of the thread register. */ -# define TLS_DEFINE_INIT_TP(tp, pd) void *tp = (pd) - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - (((tcbhead_t *) __thread_self)->dtv) - -/* Return the thread descriptor for the current thread. */ -#define THREAD_SELF __thread_self - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF \ - REGISTER (32, 32, 10 * 4, 0) \ - REGISTER (64, __WORDSIZE, (6 * 8) + (__WORDSIZE==64?0:4), 0) - -/* Access to data in the thread descriptor is easy. */ -#define THREAD_GETMEM(descr, member) \ - descr->member -#define THREAD_GETMEM_NC(descr, member, idx) \ - descr->member[idx] -#define THREAD_SETMEM(descr, member, value) \ - descr->member = (value) -#define THREAD_SETMEM_NC(descr, member, idx, value) \ - descr->member[idx] = (value) - -/* Set the stack guard field in TCB head. */ -#define THREAD_SET_STACK_GUARD(value) \ - THREAD_SETMEM (THREAD_SELF, header.stack_guard, value) -# define THREAD_COPY_STACK_GUARD(descr) \ - ((descr)->header.stack_guard \ - = THREAD_GETMEM (THREAD_SELF, header.stack_guard)) - -/* Get/set the stack guard field in TCB head. */ -#define THREAD_GET_POINTER_GUARD() \ - THREAD_GETMEM (THREAD_SELF, header.pointer_guard) -#define THREAD_SET_POINTER_GUARD(value) \ - THREAD_SETMEM (THREAD_SELF, header.pointer_guard, value) -# define THREAD_COPY_POINTER_GUARD(descr) \ - ((descr)->header.pointer_guard = THREAD_GET_POINTER_GUARD ()) - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* !ASSEMBLER */ - -#endif /* tls.h */ diff --git a/sysdeps/sparc/preconfigure b/sysdeps/sparc/preconfigure deleted file mode 100644 index de86749573..0000000000 --- a/sysdeps/sparc/preconfigure +++ /dev/null @@ -1,24 +0,0 @@ -# preconfigure fragment for sparc. - -case "$machine" in -sparc | sparcv[67]) - base_machine=sparc machine=sparc/sparc32 ;; -sparcv8 | supersparc | hypersparc) - base_machine=sparc machine=sparc/sparc32/sparcv8 ;; -sparcv8plus | sparcv8plusa | sparcv9) - base_machine=sparc machine=sparc/sparc32/sparcv9 ;; -sparcv8plusb | sparcv9b) - base_machine=sparc machine=sparc/sparc32/sparcv9/sparcv9b ;; -sparcv9v) - base_machine=sparc machine=sparc/sparc32/sparcv9/sparcv9v ;; -sparcv9v2) - base_machine=sparc machine=sparc/sparc32/sparcv9/sparcv9v2 ;; -sparc64) - base_machine=sparc machine=sparc/sparc64 ;; -sparc64b) - base_machine=sparc machine=sparc/sparc64/sparcv9b ;; -sparc64v) - base_machine=sparc machine=sparc/sparc64/sparcv9v ;; -sparc64v2) - base_machine=sparc machine=sparc/sparc64/sparcv9v2 ;; -esac diff --git a/sysdeps/sparc/sparc-ifunc.h b/sysdeps/sparc/sparc-ifunc.h deleted file mode 100644 index 8cc86ff5e1..0000000000 --- a/sysdeps/sparc/sparc-ifunc.h +++ /dev/null @@ -1,176 +0,0 @@ -/* This file is part of the GNU C Library. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef __ASSEMBLER__ - -# ifdef SHARED - -# define SPARC_ASM_IFUNC_DFLT(name, dflt) \ -ENTRY (__##name) \ - .type __##name, @gnu_indirect_function; \ - SETUP_PIC_REG_LEAF(o3, o5); \ - sethi %gdop_hix22(dflt), %o1; \ - xor %o1, %gdop_lox10(dflt), %o1; \ - add %o3, %o1, %o1; \ - retl; \ - mov %o1, %o0; \ -END (__##name) - -# define SPARC_ASM_IFUNC1(name, m1, f1, dflt) \ -ENTRY (__##name) \ - .type __##name, @gnu_indirect_function; \ - SETUP_PIC_REG_LEAF(o3, o5); \ - set m1, %o1; \ - andcc %o0, %o1, %g0; \ - be 9f; \ - nop; \ - sethi %gdop_hix22(f1), %o1; \ - xor %o1, %gdop_lox10(f1), %o1; \ - ba 10f; \ - nop; \ -9: sethi %gdop_hix22(dflt), %o1; \ - xor %o1, %gdop_lox10(dflt), %o1; \ -10: add %o3, %o1, %o1; \ - retl; \ - mov %o1, %o0; \ -END (__##name) - -# define SPARC_ASM_IFUNC2(name, m1, f1, m2, f2, dflt) \ -ENTRY (__##name) \ - .type __##name, @gnu_indirect_function; \ - SETUP_PIC_REG_LEAF(o3, o5); \ - set m1, %o1; \ - andcc %o0, %o1, %g0; \ - be 8f; \ - nop; \ - sethi %gdop_hix22(f1), %o1; \ - xor %o1, %gdop_lox10(f1), %o1; \ - ba 10f; \ - nop; \ -8: set m2, %o1; \ - andcc %o0, %o1, %g0; \ - be 9f; \ - nop; \ - sethi %gdop_hix22(f2), %o1; \ - xor %o1, %gdop_lox10(f2), %o1; \ - ba 10f; \ - nop; \ -9: sethi %gdop_hix22(dflt), %o1; \ - xor %o1, %gdop_lox10(dflt), %o1; \ -10: add %o3, %o1, %o1; \ - retl; \ - mov %o1, %o0; \ -END (__##name) - -# else /* SHARED */ - -# ifdef __arch64__ -# define SET(SYM, TMP, REG) setx SYM, TMP, REG -# else -# define SET(SYM, TMP, REG) set SYM, REG -# endif - -# define SPARC_ASM_IFUNC_DFLT(name, dflt) \ -ENTRY (__##name) \ - .type __##name, @gnu_indirect_function; \ - SET(dflt, %g1, %o1); \ - retl; \ - mov %o1, %o0; \ -END (__##name) - -# define SPARC_ASM_IFUNC1(name, m1, f1, dflt) \ -ENTRY (__##name) \ - .type __##name, @gnu_indirect_function; \ - set m1, %o1; \ - andcc %o0, %o1, %g0; \ - be 9f; \ - nop; \ - SET(f1, %g1, %o1); \ - ba 10f; \ - nop; \ -9: SET(dflt, %g1, %o1); \ -10: retl; \ - mov %o1, %o0; \ -END (__##name) - -# define SPARC_ASM_IFUNC2(name, m1, f1, m2, f2, dflt) \ -ENTRY (__##name) \ - .type __##name, @gnu_indirect_function; \ - set m1, %o1; \ - andcc %o0, %o1, %g0; \ - be 8f; \ - nop; \ - SET(f1, %g1, %o1); \ - ba 10f; \ - nop; \ -8: set m2, %o1; \ - andcc %o0, %o1, %g0; \ - be 9f; \ - nop; \ - SET(f2, %g1, %o1); \ - ba 10f; \ - nop; \ -9: SET(dflt, %g1, %o1); \ -10: retl; \ - mov %o1, %o0; \ -END (__##name) - -# endif /* SHARED */ - -#define SPARC_ASM_VIS2_IFUNC(name) \ - SPARC_ASM_IFUNC1(name, HWCAP_SPARC_VIS2, \ - __##name##_vis2, __##name##_generic) - -# ifdef HAVE_AS_VIS3_SUPPORT - -#define SPARC_ASM_VIS3_IFUNC(name) \ - SPARC_ASM_IFUNC1(name, HWCAP_SPARC_VIS3, \ - __##name##_vis3, __##name##_generic) - -#define SPARC_ASM_VIS3_VIS2_IFUNC(name) \ - SPARC_ASM_IFUNC2(name, HWCAP_SPARC_VIS3, \ - __##name##_vis3, \ - HWCAP_SPARC_VIS2, \ - __##name##_vis2, __##name##_generic) - -# else /* HAVE_AS_VIS3_SUPPORT */ - -#define SPARC_ASM_VIS3_IFUNC(name) \ - SPARC_ASM_IFUNC_DFLT(name, __##name##_generic) - -#define SPARC_ASM_VIS3_VIS2_IFUNC(name) \ - SPARC_ASM_VIS2_IFUNC(name) - -# endif /* HAVE_AS_VIS3_SUPPORT */ - - -#else /* __ASSEMBLER__ */ - -# define sparc_libm_ifunc(name, expr) \ - extern void *name##_ifunc (int) __asm__ (#name); \ - void *name##_ifunc (int hwcap) \ - { \ - __typeof (name) *res = expr; \ - return res; \ - } \ - __asm__ (".type " #name ", %gnu_indirect_function"); - -# define sparc_libc_ifunc(name, expr) sparc_libm_ifunc (name, expr) - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/sparc/sparc-mcount.S b/sysdeps/sparc/sparc-mcount.S deleted file mode 100644 index 9564a5548c..0000000000 --- a/sysdeps/sparc/sparc-mcount.S +++ /dev/null @@ -1,28 +0,0 @@ -/* sparc-specific implementation of profiling support. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(_mcount) - mov %i7, %o0 - ba __mcount_internal - mov %o7, %o1 -END(_mcount) - -weak_alias (_mcount, mcount) diff --git a/sysdeps/sparc/sparc32/Implies b/sysdeps/sparc/sparc32/Implies deleted file mode 100644 index 436436a651..0000000000 --- a/sysdeps/sparc/sparc32/Implies +++ /dev/null @@ -1,6 +0,0 @@ -wordsize-32 -# SPARC uses IEEE 754 floating point. -ieee754/ldbl-128 -ieee754/dbl-64 -ieee754/flt-32 -sparc/sparc32/soft-fp diff --git a/sysdeps/sparc/sparc32/Makefile b/sysdeps/sparc/sparc32/Makefile deleted file mode 100644 index 14d6e03c6f..0000000000 --- a/sysdeps/sparc/sparc32/Makefile +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright (C) 1991-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifeq ($(subdir),gnulib) -sysdep_routines = dotmul umul $(divrem) alloca -endif # gnulib - -# We distribute these files, even though they are generated, -# so as to avoid the need for a functioning m4 to build the library. -divrem := sdiv udiv rem urem - -+divrem-NAME-sdiv := div -+divrem-NAME-udiv := udiv -+divrem-NAME-rem := rem -+divrem-NAME-urem := urem -+divrem-NAME = $(+divrem-NAME-$(basename $(notdir $@))) -+divrem-OP-div := div -+divrem-OP-udiv := div -+divrem-OP-rem := rem -+divrem-OP-urem := rem -+divrem-S-div := true -+divrem-S-rem := true -+divrem-S-udiv := false -+divrem-S-urem := false -$(divrem:%=$(sysdep_dir)/sparc/sparc32/%.S): $(sysdep_dir)/sparc/sparc32/divrem.m4 - (echo "define(NAME,\`.$(+divrem-NAME)')\ - define(OP,\`$(+divrem-OP-$(+divrem-NAME))')\ - define(S,\`$(+divrem-S-$(+divrem-NAME))')\ - /* This file is generated from divrem.m4; DO NOT EDIT! */"; \ - cat $<) | $(M4) > $@-tmp -# Make it unwritable so noone will edit it by mistake. - -chmod a-w $@-tmp - mv -f $@-tmp $@ - -sysdep-realclean := $(sysdep-realclean) $(divrem:%=sysdeps/sparc/sparc32/%.S) - -# libgcc __divdi3 and __moddi3 uses .udiv and since it is also exported by -# libc.so linker will create PLTs for the symbol. To avoid it we strong alias -# the exported libc one to __wrap_.udiv and use linker option --wrap to make any -# call to .udiv to call the wrapper symbol. -libc.so-gnulib += -Wl,--wrap=.udiv diff --git a/sysdeps/sparc/sparc32/Versions b/sysdeps/sparc/sparc32/Versions deleted file mode 100644 index 6d3bfe880e..0000000000 --- a/sysdeps/sparc/sparc32/Versions +++ /dev/null @@ -1,10 +0,0 @@ -libc { - GLIBC_2.0 { - .div; .mul; .rem; .udiv; .umul; .urem; - } -} -libm { - GLIBC_2.23 { - __sqrtl_finite; - } -} diff --git a/sysdeps/sparc/sparc32/__longjmp.S b/sysdeps/sparc/sparc32/__longjmp.S deleted file mode 100644 index 2cfb6c23e7..0000000000 --- a/sysdeps/sparc/sparc32/__longjmp.S +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include -#define ENV(base,reg) [%base + (reg * 4)] -#define ST_FLUSH_WINDOWS 3 - -ENTRY(__longjmp) - /* Store our arguments in global registers so we can still - use them while unwinding frames and their register windows. */ - - ld ENV(o0,JB_FP), %g3 /* Cache target FP in register %g3. */ -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (%g3, %g3, %g4) -#endif - mov %o0, %g1 /* ENV in %g1 */ - orcc %o1, %g0, %g2 /* VAL in %g2 */ - be,a 0f /* Branch if zero; else skip delay slot. */ - mov 1, %g2 /* Delay slot only hit if zero: VAL = 1. */ -0: - xor %fp, %g3, %o0 - add %fp, 512, %o1 - andncc %o0, 4095, %o0 - bne LOC(thread) - cmp %o1, %g3 - bl LOC(thread) - - /* Now we will loop, unwinding the register windows up the stack - until the restored %fp value matches the target value in %g3. */ - -LOC(loop): - cmp %fp, %g3 /* Have we reached the target frame? */ - bl,a LOC(loop) /* Loop while current fp is below target. */ - restore /* Unwind register window in delay slot. */ - be,a LOC(found) /* Better have hit it exactly. */ - ld ENV(g1,JB_SP), %o0 /* Delay slot: extract target SP. */ - -LOC(thread): - save %sp, -96, %sp - /* - * Do a "flush register windows trap". The trap handler in the - * kernel writes all the register windows to their stack slots, and - * marks them all as invalid (needing to be sucked up from the - * stack when used). This ensures that all information needed to - * unwind to these callers is in memory, not in the register - * windows. - */ - ta ST_FLUSH_WINDOWS -#ifdef PTR_DEMANGLE - ld ENV(g1,JB_PC), %g5 /* Set return PC. */ - ld ENV(g1,JB_SP), %g1 /* Set saved SP on restore below. */ - PTR_DEMANGLE2 (%i7, %g5, %g4) - PTR_DEMANGLE2 (%fp, %g1, %g4) -#else - ld ENV(g1,JB_PC), %i7 /* Set return PC. */ - ld ENV(g1,JB_SP), %fp /* Set saved SP on restore below. */ -#endif - jmp %i7 + 8 - restore %g2, 0, %o0 /* Restore values from above register frame. */ - -LOC(found): - /* We have unwound register windows so %fp matches the target. */ -#ifdef PTR_DEMANGLE - PTR_DEMANGLE2 (%sp, %o0, %g4) -#else - mov %o0, %sp /* OK, install new SP. */ -#endif - -LOC(sp_ok): - ld ENV(g1,JB_PC), %o0 /* Extract target return PC. */ -#ifdef PTR_DEMANGLE - PTR_DEMANGLE2 (%o0, %o0, %g4) -#endif - jmp %o0 + 8 /* Return there. */ - mov %g2, %o0 /* Delay slot: set return value. */ - -END(__longjmp) diff --git a/sysdeps/sparc/sparc32/add_n.S b/sysdeps/sparc/sparc32/add_n.S deleted file mode 100644 index 75289af5f9..0000000000 --- a/sysdeps/sparc/sparc32/add_n.S +++ /dev/null @@ -1,237 +0,0 @@ -! SPARC __mpn_add_n -- Add two limb vectors of the same length > 0 and store -! sum in a third limb vector. -! -! Copyright (C) 1995-2017 Free Software Foundation, Inc. -! -! This file is part of the GNU MP Library. -! -! The GNU MP Library is free software; you can redistribute it and/or modify -! it under the terms of the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. -! -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. -! -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, -! see . - - -! INPUT PARAMETERS -#define RES_PTR %o0 -#define S1_PTR %o1 -#define S2_PTR %o2 -#define SIZE %o3 - -#include - -ENTRY(__mpn_add_n) - xor S2_PTR,RES_PTR,%g1 - andcc %g1,4,%g0 - bne LOC(1) ! branch if alignment differs - nop -! ** V1a ** -LOC(0): andcc RES_PTR,4,%g0 ! RES_PTR unaligned? Side effect: cy=0 - be LOC(v1) ! if no, branch - nop -/* Add least significant limb separately to align RES_PTR and S2_PTR */ - ld [S1_PTR],%g4 - add S1_PTR,4,S1_PTR - ld [S2_PTR],%g2 - add S2_PTR,4,S2_PTR - add SIZE,-1,SIZE - addcc %g4,%g2,%o4 - st %o4,[RES_PTR] - add RES_PTR,4,RES_PTR -LOC(v1): - addx %g0,%g0,%o4 ! save cy in register - cmp SIZE,2 ! if SIZE < 2 ... - bl LOC(end2) ! ... branch to tail code - subcc %g0,%o4,%g0 ! restore cy - - ld [S1_PTR+0],%g4 - addcc SIZE,-10,SIZE - ld [S1_PTR+4],%g1 - ldd [S2_PTR+0],%g2 - blt LOC(fin1) - subcc %g0,%o4,%g0 ! restore cy -/* Add blocks of 8 limbs until less than 8 limbs remain */ -LOC(loop1): - addxcc %g4,%g2,%o4 - ld [S1_PTR+8],%g4 - addxcc %g1,%g3,%o5 - ld [S1_PTR+12],%g1 - ldd [S2_PTR+8],%g2 - std %o4,[RES_PTR+0] - addxcc %g4,%g2,%o4 - ld [S1_PTR+16],%g4 - addxcc %g1,%g3,%o5 - ld [S1_PTR+20],%g1 - ldd [S2_PTR+16],%g2 - std %o4,[RES_PTR+8] - addxcc %g4,%g2,%o4 - ld [S1_PTR+24],%g4 - addxcc %g1,%g3,%o5 - ld [S1_PTR+28],%g1 - ldd [S2_PTR+24],%g2 - std %o4,[RES_PTR+16] - addxcc %g4,%g2,%o4 - ld [S1_PTR+32],%g4 - addxcc %g1,%g3,%o5 - ld [S1_PTR+36],%g1 - ldd [S2_PTR+32],%g2 - std %o4,[RES_PTR+24] - addx %g0,%g0,%o4 ! save cy in register - addcc SIZE,-8,SIZE - add S1_PTR,32,S1_PTR - add S2_PTR,32,S2_PTR - add RES_PTR,32,RES_PTR - bge LOC(loop1) - subcc %g0,%o4,%g0 ! restore cy - -LOC(fin1): - addcc SIZE,8-2,SIZE - blt LOC(end1) - subcc %g0,%o4,%g0 ! restore cy -/* Add blocks of 2 limbs until less than 2 limbs remain */ -LOC(loope1): - addxcc %g4,%g2,%o4 - ld [S1_PTR+8],%g4 - addxcc %g1,%g3,%o5 - ld [S1_PTR+12],%g1 - ldd [S2_PTR+8],%g2 - std %o4,[RES_PTR+0] - addx %g0,%g0,%o4 ! save cy in register - addcc SIZE,-2,SIZE - add S1_PTR,8,S1_PTR - add S2_PTR,8,S2_PTR - add RES_PTR,8,RES_PTR - bge LOC(loope1) - subcc %g0,%o4,%g0 ! restore cy -LOC(end1): - addxcc %g4,%g2,%o4 - addxcc %g1,%g3,%o5 - std %o4,[RES_PTR+0] - addx %g0,%g0,%o4 ! save cy in register - - andcc SIZE,1,%g0 - be LOC(ret1) - subcc %g0,%o4,%g0 ! restore cy -/* Add last limb */ - ld [S1_PTR+8],%g4 - ld [S2_PTR+8],%g2 - addxcc %g4,%g2,%o4 - st %o4,[RES_PTR+8] - -LOC(ret1): - retl - addx %g0,%g0,%o0 ! return carry-out from most sign. limb - -LOC(1): xor S1_PTR,RES_PTR,%g1 - andcc %g1,4,%g0 - bne LOC(2) - nop -! ** V1b ** - mov S2_PTR,%g1 - mov S1_PTR,S2_PTR - b LOC(0) - mov %g1,S1_PTR - -! ** V2 ** -/* If we come here, the alignment of S1_PTR and RES_PTR as well as the - alignment of S2_PTR and RES_PTR differ. Since there are only two ways - things can be aligned (that we care about) we now know that the alignment - of S1_PTR and S2_PTR are the same. */ - -LOC(2): cmp SIZE,1 - be LOC(jone) - nop - andcc S1_PTR,4,%g0 ! S1_PTR unaligned? Side effect: cy=0 - be LOC(v2) ! if no, branch - nop -/* Add least significant limb separately to align S1_PTR and S2_PTR */ - ld [S1_PTR],%g4 - add S1_PTR,4,S1_PTR - ld [S2_PTR],%g2 - add S2_PTR,4,S2_PTR - add SIZE,-1,SIZE - addcc %g4,%g2,%o4 - st %o4,[RES_PTR] - add RES_PTR,4,RES_PTR - -LOC(v2): - addx %g0,%g0,%o4 ! save cy in register - addcc SIZE,-8,SIZE - blt LOC(fin2) - subcc %g0,%o4,%g0 ! restore cy -/* Add blocks of 8 limbs until less than 8 limbs remain */ -LOC(loop2): - ldd [S1_PTR+0],%g2 - ldd [S2_PTR+0],%o4 - addxcc %g2,%o4,%g2 - st %g2,[RES_PTR+0] - addxcc %g3,%o5,%g3 - st %g3,[RES_PTR+4] - ldd [S1_PTR+8],%g2 - ldd [S2_PTR+8],%o4 - addxcc %g2,%o4,%g2 - st %g2,[RES_PTR+8] - addxcc %g3,%o5,%g3 - st %g3,[RES_PTR+12] - ldd [S1_PTR+16],%g2 - ldd [S2_PTR+16],%o4 - addxcc %g2,%o4,%g2 - st %g2,[RES_PTR+16] - addxcc %g3,%o5,%g3 - st %g3,[RES_PTR+20] - ldd [S1_PTR+24],%g2 - ldd [S2_PTR+24],%o4 - addxcc %g2,%o4,%g2 - st %g2,[RES_PTR+24] - addxcc %g3,%o5,%g3 - st %g3,[RES_PTR+28] - addx %g0,%g0,%o4 ! save cy in register - addcc SIZE,-8,SIZE - add S1_PTR,32,S1_PTR - add S2_PTR,32,S2_PTR - add RES_PTR,32,RES_PTR - bge LOC(loop2) - subcc %g0,%o4,%g0 ! restore cy - -LOC(fin2): - addcc SIZE,8-2,SIZE - blt LOC(end2) - subcc %g0,%o4,%g0 ! restore cy -LOC(loope2): - ldd [S1_PTR+0],%g2 - ldd [S2_PTR+0],%o4 - addxcc %g2,%o4,%g2 - st %g2,[RES_PTR+0] - addxcc %g3,%o5,%g3 - st %g3,[RES_PTR+4] - addx %g0,%g0,%o4 ! save cy in register - addcc SIZE,-2,SIZE - add S1_PTR,8,S1_PTR - add S2_PTR,8,S2_PTR - add RES_PTR,8,RES_PTR - bge LOC(loope2) - subcc %g0,%o4,%g0 ! restore cy -LOC(end2): - andcc SIZE,1,%g0 - be LOC(ret2) - subcc %g0,%o4,%g0 ! restore cy -/* Add last limb */ -LOC(jone): - ld [S1_PTR],%g4 - ld [S2_PTR],%g2 - addxcc %g4,%g2,%o4 - st %o4,[RES_PTR] - -LOC(ret2): - retl - addx %g0,%g0,%o0 ! return carry-out from most sign. limb - -END(__mpn_add_n) diff --git a/sysdeps/sparc/sparc32/addmul_1.S b/sysdeps/sparc/sparc32/addmul_1.S deleted file mode 100644 index 080e5f3d06..0000000000 --- a/sysdeps/sparc/sparc32/addmul_1.S +++ /dev/null @@ -1,146 +0,0 @@ -! SPARC __mpn_addmul_1 -- Multiply a limb vector with a limb and add -! the result to a second limb vector. -! -! Copyright (C) 1992-2017 Free Software Foundation, Inc. -! -! This file is part of the GNU MP Library. -! -! The GNU MP Library is free software; you can redistribute it and/or modify -! it under the terms of the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. -! -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. -! -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, -! see . - - -! INPUT PARAMETERS -! RES_PTR o0 -! S1_PTR o1 -! SIZE o2 -! S2_LIMB o3 - -#include - -ENTRY(__mpn_addmul_1) - ! Make S1_PTR and RES_PTR point at the end of their blocks - ! and put (- 4 x SIZE) in index/loop counter. - sll %o2,2,%o2 - add %o0,%o2,%o4 ! RES_PTR in o4 since o0 is retval - add %o1,%o2,%o1 - sub %g0,%o2,%o2 - - cmp %o3,0xfff - bgu LOC(large) - nop - - ld [%o1+%o2],%o5 - mov 0,%o0 - b LOC(0) - add %o4,-4,%o4 -LOC(loop0): - addcc %o5,%g1,%g1 - ld [%o1+%o2],%o5 - addx %o0,%g0,%o0 - st %g1,[%o4+%o2] -LOC(0): wr %g0,%o3,%y - sra %o5,31,%g2 - and %o3,%g2,%g2 - andcc %g1,0,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,0,%g1 - sra %g1,20,%g4 - sll %g1,12,%g1 - rd %y,%g3 - srl %g3,20,%g3 - or %g1,%g3,%g1 - - addcc %g1,%o0,%g1 - addx %g2,%g4,%o0 ! add sign-compensation and cy to hi limb - addcc %o2,4,%o2 ! loop counter - bne LOC(loop0) - ld [%o4+%o2],%o5 - - addcc %o5,%g1,%g1 - addx %o0,%g0,%o0 - retl - st %g1,[%o4+%o2] - - -LOC(large): - ld [%o1+%o2],%o5 - mov 0,%o0 - sra %o3,31,%g4 ! g4 = mask of ones iff S2_LIMB < 0 - b LOC(1) - add %o4,-4,%o4 -LOC(loop): - addcc %o5,%g3,%g3 - ld [%o1+%o2],%o5 - addx %o0,%g0,%o0 - st %g3,[%o4+%o2] -LOC(1): wr %g0,%o5,%y - and %o5,%g4,%g2 - andcc %g0,%g0,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%g0,%g1 - rd %y,%g3 - addcc %g3,%o0,%g3 - addx %g2,%g1,%o0 - addcc %o2,4,%o2 - bne LOC(loop) - ld [%o4+%o2],%o5 - - addcc %o5,%g3,%g3 - addx %o0,%g0,%o0 - retl - st %g3,[%o4+%o2] - -END(__mpn_addmul_1) diff --git a/sysdeps/sparc/sparc32/alloca.S b/sysdeps/sparc/sparc32/alloca.S deleted file mode 100644 index 60cd800800..0000000000 --- a/sysdeps/sparc/sparc32/alloca.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Code produced by Sun's C compiler calls this function with two extra - arguments which it makes relocatable symbols but seem always to be - the constant 96; I have no idea what they are for. */ - -ENTRY (__builtin_alloca) - sub %sp, %o0, %sp /* Push some stack space. */ - retl /* Return; the returned buffer leaves 96 */ - add %sp, 96, %o0 /* bytes of register save area at the top. */ -END (__builtin_alloca) diff --git a/sysdeps/sparc/sparc32/atomic-machine.h b/sysdeps/sparc/sparc32/atomic-machine.h deleted file mode 100644 index a2fe8485b4..0000000000 --- a/sysdeps/sparc/sparc32/atomic-machine.h +++ /dev/null @@ -1,363 +0,0 @@ -/* Atomic operations. sparc32 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _ATOMIC_MACHINE_H -#define _ATOMIC_MACHINE_H 1 - -#include - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int16_t atomic16_t; -typedef uint16_t uatomic16_t; -typedef int_fast16_t atomic_fast16_t; -typedef uint_fast16_t uatomic_fast16_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#define __HAVE_64B_ATOMICS 0 -#define USE_ATOMIC_COMPILER_BUILTINS 0 - -/* XXX Is this actually correct? */ -#define ATOMIC_EXCHANGE_USES_CAS 1 - - -/* We have no compare and swap, just test and set. - The following implementation contends on 64 global locks - per library and assumes no variable will be accessed using atomic.h - macros from two different libraries. */ - -__make_section_unallocated - (".gnu.linkonce.b.__sparc32_atomic_locks, \"aw\", %nobits"); - -volatile unsigned char __sparc32_atomic_locks[64] - __attribute__ ((nocommon, section (".gnu.linkonce.b.__sparc32_atomic_locks" - __sec_comment), - visibility ("hidden"))); - -#define __sparc32_atomic_do_lock(addr) \ - do \ - { \ - unsigned int __old_lock; \ - unsigned int __idx = (((long) addr >> 2) ^ ((long) addr >> 12)) \ - & 63; \ - do \ - __asm __volatile ("ldstub %1, %0" \ - : "=r" (__old_lock), \ - "=m" (__sparc32_atomic_locks[__idx]) \ - : "m" (__sparc32_atomic_locks[__idx]) \ - : "memory"); \ - while (__old_lock); \ - } \ - while (0) - -#define __sparc32_atomic_do_unlock(addr) \ - do \ - { \ - __sparc32_atomic_locks[(((long) addr >> 2) \ - ^ ((long) addr >> 12)) & 63] = 0; \ - __asm __volatile ("" ::: "memory"); \ - } \ - while (0) - -#define __sparc32_atomic_do_lock24(addr) \ - do \ - { \ - unsigned int __old_lock; \ - do \ - __asm __volatile ("ldstub %1, %0" \ - : "=r" (__old_lock), "=m" (*(addr)) \ - : "m" (*(addr)) \ - : "memory"); \ - while (__old_lock); \ - } \ - while (0) - -#define __sparc32_atomic_do_unlock24(addr) \ - do \ - { \ - __asm __volatile ("" ::: "memory"); \ - *(char *) (addr) = 0; \ - } \ - while (0) - - -#ifndef SHARED -# define __v9_compare_and_exchange_val_32_acq(mem, newval, oldval) \ -({union { __typeof (oldval) a; uint32_t v; } oldval_arg = { .a = (oldval) }; \ - union { __typeof (newval) a; uint32_t v; } newval_arg = { .a = (newval) }; \ - register uint32_t __acev_tmp __asm ("%g6"); \ - register __typeof (mem) __acev_mem __asm ("%g1") = (mem); \ - register uint32_t __acev_oldval __asm ("%g5"); \ - __acev_tmp = newval_arg.v; \ - __acev_oldval = oldval_arg.v; \ - /* .word 0xcde05005 is cas [%g1], %g5, %g6. Can't use cas here though, \ - because as will then mark the object file as V8+ arch. */ \ - __asm __volatile (".word 0xcde05005" \ - : "+r" (__acev_tmp), "=m" (*__acev_mem) \ - : "r" (__acev_oldval), "m" (*__acev_mem), \ - "r" (__acev_mem) : "memory"); \ - (__typeof (oldval)) __acev_tmp; }) -#endif - -/* The only basic operation needed is compare and exchange. */ -#define __v7_compare_and_exchange_val_acq(mem, newval, oldval) \ - ({ __typeof (mem) __acev_memp = (mem); \ - __typeof (*mem) __acev_ret; \ - __typeof (*mem) __acev_newval = (newval); \ - \ - __sparc32_atomic_do_lock (__acev_memp); \ - __acev_ret = *__acev_memp; \ - if (__acev_ret == (oldval)) \ - *__acev_memp = __acev_newval; \ - __sparc32_atomic_do_unlock (__acev_memp); \ - __acev_ret; }) - -#define __v7_compare_and_exchange_bool_acq(mem, newval, oldval) \ - ({ __typeof (mem) __aceb_memp = (mem); \ - int __aceb_ret; \ - __typeof (*mem) __aceb_newval = (newval); \ - \ - __sparc32_atomic_do_lock (__aceb_memp); \ - __aceb_ret = 0; \ - if (*__aceb_memp == (oldval)) \ - *__aceb_memp = __aceb_newval; \ - else \ - __aceb_ret = 1; \ - __sparc32_atomic_do_unlock (__aceb_memp); \ - __aceb_ret; }) - -#define __v7_exchange_acq(mem, newval) \ - ({ __typeof (mem) __acev_memp = (mem); \ - __typeof (*mem) __acev_ret; \ - __typeof (*mem) __acev_newval = (newval); \ - \ - __sparc32_atomic_do_lock (__acev_memp); \ - __acev_ret = *__acev_memp; \ - *__acev_memp = __acev_newval; \ - __sparc32_atomic_do_unlock (__acev_memp); \ - __acev_ret; }) - -#define __v7_exchange_and_add(mem, value) \ - ({ __typeof (mem) __acev_memp = (mem); \ - __typeof (*mem) __acev_ret; \ - \ - __sparc32_atomic_do_lock (__acev_memp); \ - __acev_ret = *__acev_memp; \ - *__acev_memp = __acev_ret + (value); \ - __sparc32_atomic_do_unlock (__acev_memp); \ - __acev_ret; }) - -/* Special versions, which guarantee that top 8 bits of all values - are cleared and use those bits as the ldstub lock. */ -#define __v7_compare_and_exchange_val_24_acq(mem, newval, oldval) \ - ({ __typeof (mem) __acev_memp = (mem); \ - __typeof (*mem) __acev_ret; \ - __typeof (*mem) __acev_newval = (newval); \ - \ - __sparc32_atomic_do_lock24 (__acev_memp); \ - __acev_ret = *__acev_memp & 0xffffff; \ - if (__acev_ret == (oldval)) \ - *__acev_memp = __acev_newval; \ - else \ - __sparc32_atomic_do_unlock24 (__acev_memp); \ - __asm __volatile ("" ::: "memory"); \ - __acev_ret; }) - -#define __v7_exchange_24_rel(mem, newval) \ - ({ __typeof (mem) __acev_memp = (mem); \ - __typeof (*mem) __acev_ret; \ - __typeof (*mem) __acev_newval = (newval); \ - \ - __sparc32_atomic_do_lock24 (__acev_memp); \ - __acev_ret = *__acev_memp & 0xffffff; \ - *__acev_memp = __acev_newval; \ - __asm __volatile ("" ::: "memory"); \ - __acev_ret; }) - -#ifdef SHARED - -/* When dynamically linked, we assume pre-v9 libraries are only ever - used on pre-v9 CPU. */ -# define __atomic_is_v9 0 - -# define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ - __v7_compare_and_exchange_val_acq (mem, newval, oldval) - -# define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \ - __v7_compare_and_exchange_bool_acq (mem, newval, oldval) - -# define atomic_exchange_acq(mem, newval) \ - __v7_exchange_acq (mem, newval) - -# define atomic_exchange_and_add(mem, value) \ - __v7_exchange_and_add (mem, value) - -# define atomic_compare_and_exchange_val_24_acq(mem, newval, oldval) \ - ({ \ - if (sizeof (*mem) != 4) \ - abort (); \ - __v7_compare_and_exchange_val_24_acq (mem, newval, oldval); }) - -# define atomic_exchange_24_rel(mem, newval) \ - ({ \ - if (sizeof (*mem) != 4) \ - abort (); \ - __v7_exchange_24_rel (mem, newval); }) - -# define atomic_full_barrier() __asm ("" ::: "memory") -# define atomic_read_barrier() atomic_full_barrier () -# define atomic_write_barrier() atomic_full_barrier () - -#else - -/* In libc.a/libpthread.a etc. we don't know if we'll be run on - pre-v9 or v9 CPU. To be interoperable with dynamically linked - apps on v9 CPUs e.g. with process shared primitives, use cas insn - on v9 CPUs and ldstub on pre-v9. */ - -extern uint64_t _dl_hwcap __attribute__((weak)); -# define __atomic_is_v9 \ - (__builtin_expect (&_dl_hwcap != 0, 1) \ - && __builtin_expect (_dl_hwcap & HWCAP_SPARC_V9, HWCAP_SPARC_V9)) - -# define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ - ({ \ - __typeof (*mem) __acev_wret; \ - if (sizeof (*mem) != 4) \ - abort (); \ - if (__atomic_is_v9) \ - __acev_wret \ - = __v9_compare_and_exchange_val_32_acq (mem, newval, oldval);\ - else \ - __acev_wret \ - = __v7_compare_and_exchange_val_acq (mem, newval, oldval); \ - __acev_wret; }) - -# define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \ - ({ \ - int __acev_wret; \ - if (sizeof (*mem) != 4) \ - abort (); \ - if (__atomic_is_v9) \ - { \ - __typeof (oldval) __acev_woldval = (oldval); \ - __acev_wret \ - = __v9_compare_and_exchange_val_32_acq (mem, newval, \ - __acev_woldval) \ - != __acev_woldval; \ - } \ - else \ - __acev_wret \ - = __v7_compare_and_exchange_bool_acq (mem, newval, oldval); \ - __acev_wret; }) - -# define atomic_exchange_rel(mem, newval) \ - ({ \ - __typeof (*mem) __acev_wret; \ - if (sizeof (*mem) != 4) \ - abort (); \ - if (__atomic_is_v9) \ - { \ - __typeof (mem) __acev_wmemp = (mem); \ - __typeof (*(mem)) __acev_wval = (newval); \ - do \ - __acev_wret = *__acev_wmemp; \ - while (__builtin_expect \ - (__v9_compare_and_exchange_val_32_acq (__acev_wmemp,\ - __acev_wval, \ - __acev_wret) \ - != __acev_wret, 0)); \ - } \ - else \ - __acev_wret = __v7_exchange_acq (mem, newval); \ - __acev_wret; }) - -# define atomic_compare_and_exchange_val_24_acq(mem, newval, oldval) \ - ({ \ - __typeof (*mem) __acev_wret; \ - if (sizeof (*mem) != 4) \ - abort (); \ - if (__atomic_is_v9) \ - __acev_wret \ - = __v9_compare_and_exchange_val_32_acq (mem, newval, oldval);\ - else \ - __acev_wret \ - = __v7_compare_and_exchange_val_24_acq (mem, newval, oldval);\ - __acev_wret; }) - -# define atomic_exchange_24_rel(mem, newval) \ - ({ \ - __typeof (*mem) __acev_w24ret; \ - if (sizeof (*mem) != 4) \ - abort (); \ - if (__atomic_is_v9) \ - __acev_w24ret = atomic_exchange_rel (mem, newval); \ - else \ - __acev_w24ret = __v7_exchange_24_rel (mem, newval); \ - __acev_w24ret; }) - -#define atomic_full_barrier() \ - do { \ - if (__atomic_is_v9) \ - /* membar #LoadLoad | #LoadStore | #StoreLoad | #StoreStore */ \ - __asm __volatile (".word 0x8143e00f" : : : "memory"); \ - else \ - __asm __volatile ("" : : : "memory"); \ - } while (0) - -#define atomic_read_barrier() \ - do { \ - if (__atomic_is_v9) \ - /* membar #LoadLoad | #LoadStore */ \ - __asm __volatile (".word 0x8143e005" : : : "memory"); \ - else \ - __asm __volatile ("" : : : "memory"); \ - } while (0) - -#define atomic_write_barrier() \ - do { \ - if (__atomic_is_v9) \ - /* membar #LoadStore | #StoreStore */ \ - __asm __volatile (".word 0x8143e00c" : : : "memory"); \ - else \ - __asm __volatile ("" : : : "memory"); \ - } while (0) - -#endif - -#include - -#endif /* atomic-machine.h */ diff --git a/sysdeps/sparc/sparc32/backtrace.h b/sysdeps/sparc/sparc32/backtrace.h deleted file mode 100644 index 089f8b4d28..0000000000 --- a/sysdeps/sparc/sparc32/backtrace.h +++ /dev/null @@ -1,7 +0,0 @@ -/* Private macros for guiding the backtrace implementation, sparc32 - version. */ - -#define backtrace_flush_register_windows() \ - asm volatile ("ta %0" : : "i" (ST_FLUSH_WINDOWS)) - -#define BACKTRACE_STACK_BIAS 0 diff --git a/sysdeps/sparc/sparc32/bits/setjmp.h b/sysdeps/sparc/sparc32/bits/setjmp.h deleted file mode 100644 index fbab934d6b..0000000000 --- a/sysdeps/sparc/sparc32/bits/setjmp.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define the machine-dependent type `jmp_buf'. SPARC version. */ - -#ifndef _SETJMP_H -# error "Never include directly; use instead." -#endif - -#ifndef _ASM -typedef int __jmp_buf[3]; -#endif diff --git a/sysdeps/sparc/sparc32/bits/wordsize.h b/sysdeps/sparc/sparc32/bits/wordsize.h deleted file mode 100644 index 2f66f10d72..0000000000 --- a/sysdeps/sparc/sparc32/bits/wordsize.h +++ /dev/null @@ -1,11 +0,0 @@ -/* Determine the wordsize from the preprocessor defines. */ - -#if defined __arch64__ || defined __sparcv9 -# define __WORDSIZE 64 -# define __WORDSIZE_TIME64_COMPAT32 1 -#else -# define __WORDSIZE 32 -# define __WORDSIZE_TIME64_COMPAT32 0 -# define __WORDSIZE32_SIZE_ULONG 0 -# define __WORDSIZE32_PTRDIFF_LONG 0 -#endif diff --git a/sysdeps/sparc/sparc32/bsd-_setjmp.S b/sysdeps/sparc/sparc32/bsd-_setjmp.S deleted file mode 100644 index 4e6a2da560..0000000000 --- a/sysdeps/sparc/sparc32/bsd-_setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* _setjmp is in setjmp.S */ diff --git a/sysdeps/sparc/sparc32/bsd-setjmp.S b/sysdeps/sparc/sparc32/bsd-setjmp.S deleted file mode 100644 index 1da848d2f1..0000000000 --- a/sysdeps/sparc/sparc32/bsd-setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* setjmp is in setjmp.S */ diff --git a/sysdeps/sparc/sparc32/bzero.c b/sysdeps/sparc/sparc32/bzero.c deleted file mode 100644 index 37f0f6f993..0000000000 --- a/sysdeps/sparc/sparc32/bzero.c +++ /dev/null @@ -1 +0,0 @@ -/* bzero is in memset.S */ diff --git a/sysdeps/sparc/sparc32/divrem.m4 b/sysdeps/sparc/sparc32/divrem.m4 deleted file mode 100644 index 30d532ad77..0000000000 --- a/sysdeps/sparc/sparc32/divrem.m4 +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Division and remainder, from Appendix E of the Sparc Version 8 - * Architecture Manual, with fixes from Gordon Irlam. - */ - -/* - * Input: dividend and divisor in %o0 and %o1 respectively. - * - * m4 parameters: - * NAME name of function to generate - * OP OP=div => %o0 / %o1; OP=rem => %o0 % %o1 - * S S=true => signed; S=false => unsigned - * - * Algorithm parameters: - * N how many bits per iteration we try to get (4) - * WORDSIZE total number of bits (32) - * - * Derived constants: - * TOPBITS number of bits in the top `decade' of a number - * - * Important variables: - * Q the partial quotient under development (initially 0) - * R the remainder so far, initially the dividend - * ITER number of main division loop iterations required; - * equal to ceil(log2(quotient) / N). Note that this - * is the log base (2^N) of the quotient. - * V the current comparand, initially divisor*2^(ITER*N-1) - * - * Cost: - * Current estimate for non-large dividend is - * ceil(log2(quotient) / N) * (10 + 7N/2) + C - * A large dividend is one greater than 2^(31-TOPBITS) and takes a - * different path, as the upper bits of the quotient must be developed - * one bit at a time. - */ - -define(N, `4')dnl -define(WORDSIZE, `32')dnl -define(TOPBITS, eval(WORDSIZE - N*((WORDSIZE-1)/N)))dnl -dnl -define(dividend, `%o0')dnl -define(divisor, `%o1')dnl -define(Q, `%o2')dnl -define(R, `%o3')dnl -define(ITER, `%o4')dnl -define(V, `%o5')dnl -dnl -dnl m4 reminder: ifelse(a,b,c,d) => if a is b, then c, else d -define(T, `%g1')dnl -define(SC, `%g2')dnl -ifelse(S, `true', `define(SIGN, `%g3')')dnl - -dnl -dnl This is the recursive definition for developing quotient digits. -dnl -dnl Parameters: -dnl $1 the current depth, 1 <= $1 <= N -dnl $2 the current accumulation of quotient bits -dnl N max depth -dnl -dnl We add a new bit to $2 and either recurse or insert the bits in -dnl the quotient. R, Q, and V are inputs and outputs as defined above; -dnl the condition codes are expected to reflect the input R, and are -dnl modified to reflect the output R. -dnl -define(DEVELOP_QUOTIENT_BITS, -` ! depth $1, accumulated bits $2 - bl LOC($1.eval(2**N+$2)) - srl V,1,V - ! remainder is positive - subcc R,V,R - ifelse($1, N, - ` b 9f - add Q, ($2*2+1), Q - ', ` DEVELOP_QUOTIENT_BITS(incr($1), `eval(2*$2+1)')') -LOC($1.eval(2**N+$2)): - ! remainder is negative - addcc R,V,R - ifelse($1, N, - ` b 9f - add Q, ($2*2-1), Q - ', ` DEVELOP_QUOTIENT_BITS(incr($1), `eval(2*$2-1)')') - ifelse($1, 1, `9:')')dnl - -#include -#include - -ENTRY(NAME) -ifelse(S, `true', -` ! compute sign of result; if neither is negative, no problem - orcc divisor, dividend, %g0 ! either negative? - bge 2f ! no, go do the divide -ifelse(OP, `div', -` xor divisor, dividend, SIGN ! compute sign in any case', -` mov dividend, SIGN ! sign of remainder matches dividend') - tst divisor - bge 1f - tst dividend - ! divisor is definitely negative; dividend might also be negative - bge 2f ! if dividend not negative... - sub %g0, divisor, divisor ! in any case, make divisor nonneg -1: ! dividend is negative, divisor is nonnegative - sub %g0, dividend, dividend ! make dividend nonnegative -2: -') - ! Ready to divide. Compute size of quotient; scale comparand. - orcc divisor, %g0, V - bne 1f - mov dividend, R - - ! Divide by zero trap. If it returns, return 0 (about as - ! wrong as possible, but that is what SunOS does...). - ta ST_DIV0 - retl - clr %o0 - -1: - cmp R, V ! if divisor exceeds dividend, done - blu LOC(got_result) ! (and algorithm fails otherwise) - clr Q - sethi %hi(1 << (WORDSIZE - TOPBITS - 1)), T - cmp R, T - blu LOC(not_really_big) - clr ITER - - ! `Here the dividend is >= 2**(31-N) or so. We must be careful here, - ! as our usual N-at-a-shot divide step will cause overflow and havoc. - ! The number of bits in the result here is N*ITER+SC, where SC <= N. - ! Compute ITER in an unorthodox manner: know we need to shift V into - ! the top decade: so do not even bother to compare to R.' - 1: - cmp V, T - bgeu 3f - mov 1, SC - sll V, N, V - b 1b - add ITER, 1, ITER - - ! Now compute SC. - 2: addcc V, V, V - bcc LOC(not_too_big) - add SC, 1, SC - - ! We get here if the divisor overflowed while shifting. - ! This means that R has the high-order bit set. - ! Restore V and subtract from R. - sll T, TOPBITS, T ! high order bit - srl V, 1, V ! rest of V - add V, T, V - b LOC(do_single_div) - sub SC, 1, SC - - LOC(not_too_big): - 3: cmp V, R - blu 2b - nop - be LOC(do_single_div) - nop - /* NB: these are commented out in the V8-Sparc manual as well */ - /* (I do not understand this) */ - ! V > R: went too far: back up 1 step - ! srl V, 1, V - ! dec SC - ! do single-bit divide steps - ! - ! We have to be careful here. We know that R >= V, so we can do the - ! first divide step without thinking. BUT, the others are conditional, - ! and are only done if R >= 0. Because both R and V may have the high- - ! order bit set in the first step, just falling into the regular - ! division loop will mess up the first time around. - ! So we unroll slightly... - LOC(do_single_div): - subcc SC, 1, SC - bl LOC(end_regular_divide) - nop - sub R, V, R - mov 1, Q - b LOC(end_single_divloop) - nop - LOC(single_divloop): - sll Q, 1, Q - bl 1f - srl V, 1, V - ! R >= 0 - sub R, V, R - b 2f - add Q, 1, Q - 1: ! R < 0 - add R, V, R - sub Q, 1, Q - 2: - LOC(end_single_divloop): - subcc SC, 1, SC - bge LOC(single_divloop) - tst R - b,a LOC(end_regular_divide) - -LOC(not_really_big): -1: - sll V, N, V - cmp V, R - bleu 1b - addcc ITER, 1, ITER - be LOC(got_result) - sub ITER, 1, ITER - - tst R ! set up for initial iteration -LOC(divloop): - sll Q, N, Q - DEVELOP_QUOTIENT_BITS(1, 0) -LOC(end_regular_divide): - subcc ITER, 1, ITER - bge LOC(divloop) - tst R - bl,a LOC(got_result) - ! non-restoring fixup here (one instruction only!) -ifelse(OP, `div', -` sub Q, 1, Q -', ` add R, divisor, R -') - -LOC(got_result): -ifelse(S, `true', -` ! check to see if answer should be < 0 - tst SIGN - bl,a 1f - ifelse(OP, `div', `sub %g0, Q, Q', `sub %g0, R, R') -1:') - retl - ifelse(OP, `div', `mov Q, %o0', `mov R, %o0') - -END(NAME) diff --git a/sysdeps/sparc/sparc32/dl-irel.h b/sysdeps/sparc/sparc32/dl-irel.h deleted file mode 100644 index 56c155e4d5..0000000000 --- a/sysdeps/sparc/sparc32/dl-irel.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Machine-dependent ELF indirect relocation inline functions. - SPARC 32-bit version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_IREL_H -#define _DL_IREL_H - -#include -#include -#include -#include - -#define ELF_MACHINE_IRELA 1 - -static inline Elf32_Addr -__attribute ((always_inline)) -elf_ifunc_invoke (Elf32_Addr addr) -{ - return ((Elf32_Addr (*) (int)) (addr)) (GLRO(dl_hwcap)); -} - -static inline void -__attribute ((always_inline)) -elf_irela (const Elf32_Rela *reloc) -{ - unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - - if (__glibc_likely (r_type == R_SPARC_IRELATIVE)) - { - Elf32_Addr *const reloc_addr = (void *) reloc->r_offset; - Elf32_Addr value = elf_ifunc_invoke(reloc->r_addend); - *reloc_addr = value; - } - else if (__glibc_likely (r_type == R_SPARC_JMP_IREL)) - { - Elf32_Addr *const reloc_addr = (void *) reloc->r_offset; - Elf32_Addr value = elf_ifunc_invoke(reloc->r_addend); - - sparc_fixup_plt (reloc, reloc_addr, value, 0, 1); - } - else if (r_type == R_SPARC_NONE) - ; - else - __libc_fatal ("unexpected reloc type in static binary"); -} - -#endif /* dl-irel.h */ diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h deleted file mode 100644 index 95f673270e..0000000000 --- a/sysdeps/sparc/sparc32/dl-machine.h +++ /dev/null @@ -1,568 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. SPARC version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "sparc" - -#include -#include -#include -#include -#include -#include -#include - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf32_Ehdr *ehdr) -{ - if (ehdr->e_machine == EM_SPARC) - return 1; - else if (ehdr->e_machine == EM_SPARC32PLUS) - { -#if HAVE_TUNABLES || defined SHARED - uint64_t hwcap_mask = GET_HWCAP_MASK(); - return GLRO(dl_hwcap) & hwcap_mask & HWCAP_SPARC_V9; -#else - return GLRO(dl_hwcap) & HWCAP_SPARC_V9; -#endif - } - else - return 0; -} - -/* We have to do this because elf_machine_{dynamic,load_address} can be - invoked from functions that have no GOT references, and thus the compiler - has no obligation to load the PIC register. */ -#define LOAD_PIC_REG(PIC_REG) \ -do { register Elf32_Addr pc __asm("o7"); \ - __asm("sethi %%hi(_GLOBAL_OFFSET_TABLE_-4), %1\n\t" \ - "call 1f\n\t" \ - "add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n" \ - "1:\tadd %1, %0, %1" \ - : "=r" (pc), "=r" (PIC_REG)); \ -} while (0) - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. This must be inlined in a function which - uses global data. */ -static inline Elf32_Addr -elf_machine_dynamic (void) -{ - register Elf32_Addr *got asm ("%l7"); - - LOAD_PIC_REG (got); - - return *got; -} - -/* Return the run-time load address of the shared object. */ -static inline Elf32_Addr -elf_machine_load_address (void) -{ - register Elf32_Addr *pc __asm ("%o7"), *got __asm ("%l7"); - - __asm ("sethi %%hi(_GLOBAL_OFFSET_TABLE_-4), %1\n\t" - "call 1f\n\t" - " add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n\t" - "call _DYNAMIC\n\t" - "call _GLOBAL_OFFSET_TABLE_\n" - "1:\tadd %1, %0, %1\n\t" : "=r" (pc), "=r" (got)); - - /* got is now l_addr + _GLOBAL_OFFSET_TABLE_ - *got is _DYNAMIC - pc[2]*4 is l_addr + _DYNAMIC - (long)pc - 8 - pc[3]*4 is l_addr + _GLOBAL_OFFSET_TABLE_ - (long)pc - 12 */ - return (Elf32_Addr) got - *got + (pc[2] - pc[3]) * 4 - 4; -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - Elf32_Addr *plt; - extern void _dl_runtime_resolve (Elf32_Word); - extern void _dl_runtime_profile (Elf32_Word); - - if (l->l_info[DT_JMPREL] && lazy) - { - Elf32_Addr rfunc; - - /* The entries for functions in the PLT have not yet been filled in. - Their initial contents will arrange when called to set the high 22 - bits of %g1 with an offset into the .rela.plt section and jump to - the beginning of the PLT. */ - plt = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]); - if (__builtin_expect(profile, 0)) - { - rfunc = (Elf32_Addr) &_dl_runtime_profile; - - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - GL(dl_profile_map) = l; - } - else - { - rfunc = (Elf32_Addr) &_dl_runtime_resolve; - } - - /* The beginning of the PLT does: - - sethi %hi(_dl_runtime_{resolve,profile}), %g2 - pltpc: jmpl %g2 + %lo(_dl_runtime_{resolve,profile}), %g2 - nop - .word MAP - - The PC value (pltpc) saved in %g2 by the jmpl points near the - location where we store the link_map pointer for this object. */ - - plt[0] = 0x05000000 | ((rfunc >> 10) & 0x003fffff); - plt[1] = 0x85c0a000 | (rfunc & 0x3ff); - plt[2] = OPCODE_NOP; /* Fill call delay slot. */ - plt[3] = (Elf32_Addr) l; - if (__builtin_expect (l->l_info[VALIDX(DT_GNU_PRELINKED)] != NULL, 0) - || __builtin_expect (l->l_info [VALIDX (DT_GNU_LIBLISTSZ)] != NULL, 0)) - { - /* Need to reinitialize .plt to undo prelinking. */ - Elf32_Rela *rela = (Elf32_Rela *) D_PTR (l, l_info[DT_JMPREL]); - Elf32_Rela *relaend - = (Elf32_Rela *) ((char *) rela - + l->l_info[DT_PLTRELSZ]->d_un.d_val); -#if !defined RTLD_BOOTSTRAP && !defined __sparc_v9__ - /* Note that we don't mask the hwcap here, as the flush is - essential to functionality on those cpu's that implement it. - For sparcv9 we can assume flush is present. */ - const int do_flush = GLRO(dl_hwcap) & HWCAP_SPARC_FLUSH; -#else - const int do_flush = 1; -#endif - - /* prelink must ensure there are no R_SPARC_NONE relocs left - in .rela.plt. */ - while (rela < relaend) - { - *(unsigned int *) (rela->r_offset + l->l_addr) - = OPCODE_SETHI_G1 | (rela->r_offset + l->l_addr - - (Elf32_Addr) plt); - *(unsigned int *) (rela->r_offset + l->l_addr + 4) - = OPCODE_BA | ((((Elf32_Addr) plt - - rela->r_offset - l->l_addr - 4) >> 2) - & 0x3fffff); - if (do_flush) - { - __asm __volatile ("flush %0" : : "r" (rela->r_offset - + l->l_addr)); - __asm __volatile ("flush %0+4" : : "r" (rela->r_offset - + l->l_addr)); - } - ++rela; - } - } - } - - return lazy; -} - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so - PLT entries should not be allowed to define the value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. */ -#define elf_machine_type_class(type) \ - ((((type) == R_SPARC_JMP_SLOT \ - || ((type) >= R_SPARC_TLS_GD_HI22 && (type) <= R_SPARC_TLS_TPOFF64)) \ - * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_SPARC_COPY) * ELF_RTYPE_CLASS_COPY)) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_SPARC_JMP_SLOT - -/* The SPARC never uses Elf32_Rel relocations. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -/* Undo the sub %sp, 6*4, %sp; add %sp, 22*4, %o0 below to get at the - value we want in __libc_stack_end. */ -#define DL_STACK_END(cookie) \ - ((void *) (((long) (cookie)) - (22 - 6) * 4)) - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_GOT_ADDRESS(pic_reg, reg, symbol) \ - "sethi %gdop_hix22(" #symbol "), " #reg "\n\t" \ - "xor " #reg ", %gdop_lox10(" #symbol "), " #reg "\n\t" \ - "ld [" #pic_reg " + " #reg "], " #reg ", %gdop(" #symbol ")" - -#define RTLD_START __asm__ ("\ - .text\n\ - .globl _start\n\ - .type _start, @function\n\ - .align 32\n\ -_start:\n\ - /* Allocate space for functions to drop their arguments. */\n\ - sub %sp, 6*4, %sp\n\ - /* Pass pointer to argument block to _dl_start. */\n\ - call _dl_start\n\ - add %sp, 22*4, %o0\n\ - /* FALTHRU */\n\ - .globl _dl_start_user\n\ - .type _dl_start_user, @function\n\ -_dl_start_user:\n\ - /* Load the PIC register. */\n\ -1: call 2f\n\ - sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n\ -2: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n\ - add %l7, %o7, %l7\n\ - /* Save the user entry point address in %l0 */\n\ - mov %o0, %l0\n\ - /* See if we were run as a command with the executable file name as an\n\ - extra leading argument. If so, adjust the contents of the stack. */\n\ - " RTLD_GOT_ADDRESS(%l7, %g2, _dl_skip_args) "\n\ - ld [%g2], %i0\n\ - tst %i0\n\ - beq 3f\n\ - ld [%sp+22*4], %i5 /* load argc */\n\ - /* Find out how far to shift. */\n\ - " RTLD_GOT_ADDRESS(%l7, %l3, _dl_argv) "\n\ - sub %i5, %i0, %i5\n\ - ld [%l3], %l4\n\ - sll %i0, 2, %i2\n\ - st %i5, [%sp+22*4]\n\ - sub %l4, %i2, %l4\n\ - add %sp, 23*4, %i1\n\ - add %i1, %i2, %i2\n\ - st %l4, [%l3]\n\ - /* Copy down argv */\n\ -21: ld [%i2], %i3\n\ - add %i2, 4, %i2\n\ - tst %i3\n\ - st %i3, [%i1]\n\ - bne 21b\n\ - add %i1, 4, %i1\n\ - /* Copy down env */\n\ -22: ld [%i2], %i3\n\ - add %i2, 4, %i2\n\ - tst %i3\n\ - st %i3, [%i1]\n\ - bne 22b\n\ - add %i1, 4, %i1\n\ - /* Copy down auxiliary table. */\n\ -23: ld [%i2], %i3\n\ - ld [%i2+4], %i4\n\ - add %i2, 8, %i2\n\ - tst %i3\n\ - st %i3, [%i1]\n\ - st %i4, [%i1+4]\n\ - bne 23b\n\ - add %i1, 8, %i1\n\ - /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */\n\ -3: " RTLD_GOT_ADDRESS(%l7, %o0, _rtld_local) "\n\ - add %sp, 23*4, %o2\n\ - sll %i5, 2, %o3\n\ - add %o3, 4, %o3\n\ - mov %i5, %o1\n\ - add %o2, %o3, %o3\n\ - call _dl_init\n\ - ld [%o0], %o0\n\ - /* Pass our finalizer function to the user in %g1. */\n\ - " RTLD_GOT_ADDRESS(%l7, %g1, _dl_fini) "\n\ - /* Jump to the user's entry point and deallocate the extra stack we got. */\n\ - jmp %l0\n\ - add %sp, 6*4, %sp\n\ - .size _dl_start_user, . - _dl_start_user\n\ - .previous"); - -static inline Elf32_Addr -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf32_Rela *reloc, - Elf32_Addr *reloc_addr, Elf32_Addr value) -{ -#ifdef __sparc_v9__ - /* Sparc v9 can assume flush is always present. */ - const int do_flush = 1; -#else - /* Note that we don't mask the hwcap here, as the flush is essential to - functionality on those cpu's that implement it. */ - const int do_flush = GLRO(dl_hwcap) & HWCAP_SPARC_FLUSH; -#endif - return sparc_fixup_plt (reloc, reloc_addr, value, 1, do_flush); -} - -/* Return the final value of a plt relocation. */ -static inline Elf32_Addr -elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, - Elf32_Addr value) -{ - return value + reloc->r_addend; -} - -#endif /* dl_machine_h */ - -#define ARCH_LA_PLTENTER sparc32_gnu_pltenter -#define ARCH_LA_PLTEXIT sparc32_gnu_pltexit - -#ifdef RESOLVE_MAP - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, - const Elf32_Sym *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; -#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP - const Elf32_Sym *const refsym = sym; -#endif - Elf32_Addr value; - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); -#if !defined RESOLVE_CONFLICT_FIND_MAP - struct link_map *sym_map = NULL; -#endif - -#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; make the - reference weak so static programs can still link. This declaration - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) - because rtld.c contains the common defn for _dl_rtld_map, which is - incompatible with a weak decl in the same file. */ - weak_extern (_dl_rtld_map); -#endif - - if (__glibc_unlikely (r_type == R_SPARC_NONE)) - return; - - if (__glibc_unlikely (r_type == R_SPARC_SIZE32)) - { - *reloc_addr = sym->st_size + reloc->r_addend; - return; - } - -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC - if (__glibc_unlikely (r_type == R_SPARC_RELATIVE)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - if (map != &_dl_rtld_map) /* Already done in rtld itself. */ -# endif - *reloc_addr += map->l_addr + reloc->r_addend; - return; - } -#endif - -#ifndef RESOLVE_CONFLICT_FIND_MAP - if (__builtin_expect (ELF32_ST_BIND (sym->st_info) == STB_LOCAL, 0) - && sym->st_shndx != SHN_UNDEF) - { - value = map->l_addr; - } - else - { - sym_map = RESOLVE_MAP (&sym, version, r_type); - value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; - } -#else - value = 0; -#endif - - value += reloc->r_addend; /* Assume copy relocs have zero addend. */ - - if (sym != NULL - && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0) - && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) - && __builtin_expect (!skip_ifunc, 1)) - { - value = ((Elf32_Addr (*) (int)) value) (GLRO(dl_hwcap)); - } - - switch (r_type) - { -#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP - case R_SPARC_COPY: - if (sym == NULL) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (sym->st_size > refsym->st_size - || (GLRO(dl_verbose) && sym->st_size < refsym->st_size)) - { - const char *strtab; - - strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - break; -#endif - case R_SPARC_GLOB_DAT: - case R_SPARC_32: - *reloc_addr = value; - break; - case R_SPARC_IRELATIVE: - value = ((Elf32_Addr (*) (int)) value) (GLRO(dl_hwcap)); - *reloc_addr = value; - break; - case R_SPARC_JMP_IREL: - value = ((Elf32_Addr (*) (int)) value) (GLRO(dl_hwcap)); - /* Fall thru */ - case R_SPARC_JMP_SLOT: - { -#if !defined RTLD_BOOTSTRAP && !defined __sparc_v9__ - /* Note that we don't mask the hwcap here, as the flush is - essential to functionality on those cpu's that implement - it. For sparcv9 we can assume flush is present. */ - const int do_flush = GLRO(dl_hwcap) & HWCAP_SPARC_FLUSH; -#else - /* Unfortunately, this is necessary, so that we can ensure - ld.so will not execute corrupt PLT entry instructions. */ - const int do_flush = 1; -#endif - /* At this point we don't need to bother with thread safety, - so we can optimize the first instruction of .plt out. */ - sparc_fixup_plt (reloc, reloc_addr, value, 0, do_flush); - } - break; -#ifndef RESOLVE_CONFLICT_FIND_MAP - case R_SPARC_TLS_DTPMOD32: - /* Get the information from the link map returned by the - resolv function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; - break; - case R_SPARC_TLS_DTPOFF32: - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ - *reloc_addr = (sym == NULL ? 0 : sym->st_value) + reloc->r_addend; - break; - case R_SPARC_TLS_TPOFF32: - /* The offset is negative, forward from the thread pointer. */ - /* We know the offset of object the symbol is contained in. - It is a negative value which will be added to the - thread pointer. */ - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = sym->st_value - sym_map->l_tls_offset - + reloc->r_addend; - } - break; -# ifndef RTLD_BOOTSTRAP - case R_SPARC_TLS_LE_HIX22: - case R_SPARC_TLS_LE_LOX10: - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - value = sym->st_value - sym_map->l_tls_offset - + reloc->r_addend; - if (r_type == R_SPARC_TLS_LE_HIX22) - *reloc_addr = (*reloc_addr & 0xffc00000) | ((~value) >> 10); - else - *reloc_addr = (*reloc_addr & 0xffffe000) | (value & 0x3ff) - | 0x1c00; - } - break; -# endif -#endif -#ifndef RTLD_BOOTSTRAP - case R_SPARC_8: - *(char *) reloc_addr = value; - break; - case R_SPARC_16: - *(short *) reloc_addr = value; - break; - case R_SPARC_DISP8: - *(char *) reloc_addr = (value - (Elf32_Addr) reloc_addr); - break; - case R_SPARC_DISP16: - *(short *) reloc_addr = (value - (Elf32_Addr) reloc_addr); - break; - case R_SPARC_DISP32: - *reloc_addr = (value - (Elf32_Addr) reloc_addr); - break; - case R_SPARC_LO10: - *reloc_addr = (*reloc_addr & ~0x3ff) | (value & 0x3ff); - break; - case R_SPARC_WDISP30: - *reloc_addr = ((*reloc_addr & 0xc0000000) - | ((value - (unsigned int) reloc_addr) >> 2)); - break; - case R_SPARC_HI22: - *reloc_addr = (*reloc_addr & 0xffc00000) | (value >> 10); - break; - case R_SPARC_UA16: - ((unsigned char *) reloc_addr_arg) [0] = value >> 8; - ((unsigned char *) reloc_addr_arg) [1] = value; - break; - case R_SPARC_UA32: - ((unsigned char *) reloc_addr_arg) [0] = value >> 24; - ((unsigned char *) reloc_addr_arg) [1] = value >> 16; - ((unsigned char *) reloc_addr_arg) [2] = value >> 8; - ((unsigned char *) reloc_addr_arg) [3] = value; - break; -#endif -#if !defined RTLD_BOOTSTRAP || defined _NDEBUG - default: - _dl_reloc_bad_type (map, r_type, 0); - break; -#endif - } -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, - void *const reloc_addr_arg) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - *reloc_addr += l_addr + reloc->r_addend; -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf32_Addr l_addr, const Elf32_Rela *reloc, - int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - - if (__glibc_likely (r_type == R_SPARC_JMP_SLOT)) - ; - else if (r_type == R_SPARC_JMP_IREL) - { - Elf32_Addr value = map->l_addr + reloc->r_addend; - if (__glibc_likely (!skip_ifunc)) - value = ((Elf32_Addr (*) (int)) value) (GLRO(dl_hwcap)); - sparc_fixup_plt (reloc, reloc_addr, value, 1, 1); - } - else if (r_type == R_SPARC_NONE) - ; - else - _dl_reloc_bad_type (map, r_type, 1); -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/sparc/sparc32/dl-plt.h b/sysdeps/sparc/sparc32/dl-plt.h deleted file mode 100644 index 0a583713d7..0000000000 --- a/sysdeps/sparc/sparc32/dl-plt.h +++ /dev/null @@ -1,100 +0,0 @@ -/* PLT fixups. Sparc 32-bit version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_PLT_H -#define _DL_PLT_H - -/* Some SPARC opcodes we need to use for self-modifying code. */ -#define OPCODE_NOP 0x01000000 /* nop */ -#define OPCODE_CALL 0x40000000 /* call ?; add PC-rel word address */ -#define OPCODE_SETHI_G1 0x03000000 /* sethi ?, %g1; add value>>10 */ -#define OPCODE_JMP_G1 0x81c06000 /* jmp %g1+?; add lo 10 bits of value */ -#define OPCODE_SAVE_SP 0x9de3bfa8 /* save %sp, -(16+6)*4, %sp */ -#define OPCODE_BA 0x30800000 /* b,a ?; add PC-rel word address */ -#define OPCODE_BA_PT 0x30480000 /* ba,a,pt %icc, ?; add PC-rel word address */ - -static inline __attribute__ ((always_inline)) Elf32_Addr -sparc_fixup_plt (const Elf32_Rela *reloc, Elf32_Addr *reloc_addr, - Elf32_Addr value, int t, int do_flush) -{ - Elf32_Sword disp; - - /* 't' is '0' if we are resolving this PLT entry for RTLD bootstrap, - in which case we'll be resolving all PLT entries and thus can - optimize by overwriting instructions starting at the first PLT entry - instruction and we need not be mindful of thread safety. - - Otherwise, 't' is '1'. */ - reloc_addr += t; - disp = value - (Elf32_Addr) reloc_addr; - - if (disp >= -0x800000 && disp < 0x800000) - { - unsigned int insn = OPCODE_BA | ((disp >> 2) & 0x3fffff); - -#ifdef __sparc_v9__ - /* On V9 we can do even better by using a branch with - prediction if we fit into the even smaller 19-bit - displacement field. */ - if (disp >= -0x100000 && disp < 0x100000) - insn = OPCODE_BA_PT | ((disp >> 2) & 0x07ffff); -#endif - - /* Even if we are writing just a single branch, we must not - ignore the 't' offset. Consider a case where we have some - PLT slots which can be optimized into a single branch and - some which cannot. Then we can end up with a PLT which looks - like: - - PLT4.0: sethi %(PLT_4_INDEX), %g1 - sethi %(fully_resolved_sym_4), %g1 - jmp %g1 + %lo(fully_resolved_sym_4) - PLT5.0: ba,a fully_resolved_sym_5 - ba,a PLT0.0 - ... - - The delay slot of that jmp must always be either a sethi to - %g1 or a nop. But if we try to place this displacement - branch there, PLT4.0 will jump to fully_resolved_sym_4 for 1 - instruction and then go immediately to - fully_resolved_sym_5. */ - - reloc_addr[0] = insn; - if (do_flush) - __asm __volatile ("flush %0" : : "r"(reloc_addr)); - } - else - { - /* For thread safety, write the instructions from the bottom and - flush before we overwrite the critical "b,a". This of course - need not be done during bootstrapping, since there are no threads. - But we also can't tell if we _can_ use flush, so don't. */ - - reloc_addr[1] = OPCODE_JMP_G1 | (value & 0x3ff); - if (do_flush) - __asm __volatile ("flush %0+4" : : "r"(reloc_addr)); - - reloc_addr[0] = OPCODE_SETHI_G1 | (value >> 10); - if (do_flush) - __asm __volatile ("flush %0" : : "r"(reloc_addr)); - } - - return value; -} - -#endif /* dl-plt.h */ diff --git a/sysdeps/sparc/sparc32/dl-trampoline.S b/sysdeps/sparc/sparc32/dl-trampoline.S deleted file mode 100644 index acfc9d9208..0000000000 --- a/sysdeps/sparc/sparc32/dl-trampoline.S +++ /dev/null @@ -1,187 +0,0 @@ -/* PLT trampolines. Sparc 32-bit version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text - .align 32 - - /* %g1: PLT offset loaded by PLT entry - * %g2: callers PC, which is PLT0 + 4, and we store the - * link map at PLT0 + 12, therefore we add 8 to get - * the address of the link map - */ - .globl _dl_runtime_resolve - .type _dl_runtime_resolve, @function -_dl_runtime_resolve: - cfi_startproc - - save %sp, -104, %sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register (%o7, %i7) - - ld [%g2 + 8], %o0 - srl %g1, 10, %o1 - call _dl_fixup - sub %o1, 4*12, %o1 - jmp %o0 - restore - - cfi_endproc - - .size _dl_runtime_resolve, .-_dl_runtime_resolve - - /* For the profiling cases we pass in our stack frame - * as the base of the La_sparc32_regs, so it looks - * like: - * %l0 %sp + (0 * 8) - * %l1 %sp + (0 * 8) + 4 - * ... - * %l6 %sp + (3 * 8) - * %l7 %sp + (3 * 8) + 4 - * %i0 %sp + (4 * 8) - * %i1 %sp + (4 * 8) + 4 - * ... - * %i6 %sp + (7 * 8) - * %i7 %sp + (7 * 8) + 4 - * struct_ret_ptr %sp + (8 * 8) - * framesize %sp + (9 * 8) - */ - - .globl _dl_profile_save_regs - .type _dl_profile_save_regs, @function -_dl_profile_save_regs: - cfi_startproc - - std %l0, [%sp + ( 0 * 8)] - std %l2, [%sp + ( 1 * 8)] - std %l4, [%sp + ( 2 * 8)] - std %l6, [%sp + ( 3 * 8)] - std %i0, [%sp + ( 4 * 8)] - std %i2, [%sp + ( 5 * 8)] - std %i4, [%sp + ( 6 * 8)] - std %i6, [%sp + ( 7 * 8)] - ld [%fp + (8 * 8)], %l4 - retl - st %l4, [%sp + (8 * 8)] - - cfi_endproc - - .size _dl_profile_save_regs, .-_dl_profile_save_regs - - /* If we are going to call pltexit, then we must replicate - * the caller's stack frame. - * %o0: PLT resolved function address - */ - .globl _dl_profile_invoke - .type _dl_profile_invoke, @function -_dl_profile_invoke: - cfi_startproc - - add %l0, 7, %l0 - andn %l0, 7, %l0 - add %l0, 2 * 8, %g1 - - sub %sp, %g1, %sp - srl %l0, 3, %l7 - mov %o0, %l1 - mov %i0, %o0 - mov %i1, %o1 - mov %i2, %o2 - mov %i3, %o3 - mov %i4, %o4 - mov %i5, %o5 - cmp %l0, 0 - mov %fp, %l2 - be 2f - add %sp, (11 * 8), %l3 -1: ldd [%l2], %g2 - add %l2, 0x8, %l2 - subcc %l7, 1, %l7 - std %g2, [%l3] - bne 1b - add %l3, 0x8, %l3 - -2: jmpl %l1, %o7 - nop - - std %o0, [%sp + ( 9 * 8)] - std %f0, [%sp + (10 * 8)] - - mov %l5, %o0 - mov %l6, %o1 - add %sp, (11 * 8), %o2 - call _dl_call_pltexit - add %sp, ( 9 * 8), %o3 - - ldd [%sp + ( 9 * 8)], %i0 - ldd [%sp + (10 * 8)], %f0 - - jmpl %i7 + 8, %g0 - restore - - cfi_endproc - - .size _dl_profile_invoke, .-_dl_profile_invoke - - /* %g1: PLT offset loaded by PLT entry - * %g2: callers PC, which is PLT0 + 4, and we store the - * link map at PLT0 + 12, therefore we add 8 to get - * the address of the link map - */ - .align 32 - .globl _dl_runtime_profile - .type _dl_runtime_profile, @function -_dl_runtime_profile: - cfi_startproc - - save %sp, -104, %sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) - - ld [%g2 + 8], %o0 - srl %g1, 10, %o1 - mov %i7, %o2 - sub %o1, 4*12, %o1 - - mov %o0, %l5 - mov %o1, %l6 - - call _dl_profile_save_regs - nop - - mov %sp, %o3 - call _dl_profile_fixup - add %sp, (9 * 8), %o4 - - ld [%sp + (9 * 8)], %l0 - cmp %l0, 0 - bl 1f - nop - - call _dl_profile_invoke - nop - -1: jmp %o0 - restore - - cfi_endproc - - .size _dl_runtime_profile, .-_dl_runtime_profile diff --git a/sysdeps/sparc/sparc32/dotmul.S b/sysdeps/sparc/sparc32/dotmul.S deleted file mode 100644 index d497ca672d..0000000000 --- a/sysdeps/sparc/sparc32/dotmul.S +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Signed multiply, from Appendix E of the Sparc Version 8 - * Architecture Manual. - */ - -/* - * Returns %o0 * %o1 in %o1%o0 (i.e., %o1 holds the upper 32 bits of - * the 64-bit product). - * - * This code optimizes short (less than 13-bit) multiplies. - */ - -#include - - -ENTRY(.mul) - mov %o0, %y ! multiplier -> Y - andncc %o0, 0xfff, %g0 ! test bits 12..31 - be LOC(mul_shortway) ! if zero, can do it the short way - andcc %g0, %g0, %o4 ! zero the partial product and clear N and V - - /* - * Long multiply. 32 steps, followed by a final shift step. - */ - mulscc %o4, %o1, %o4 ! 1 - mulscc %o4, %o1, %o4 ! 2 - mulscc %o4, %o1, %o4 ! 3 - mulscc %o4, %o1, %o4 ! 4 - mulscc %o4, %o1, %o4 ! 5 - mulscc %o4, %o1, %o4 ! 6 - mulscc %o4, %o1, %o4 ! 7 - mulscc %o4, %o1, %o4 ! 8 - mulscc %o4, %o1, %o4 ! 9 - mulscc %o4, %o1, %o4 ! 10 - mulscc %o4, %o1, %o4 ! 11 - mulscc %o4, %o1, %o4 ! 12 - mulscc %o4, %o1, %o4 ! 13 - mulscc %o4, %o1, %o4 ! 14 - mulscc %o4, %o1, %o4 ! 15 - mulscc %o4, %o1, %o4 ! 16 - mulscc %o4, %o1, %o4 ! 17 - mulscc %o4, %o1, %o4 ! 18 - mulscc %o4, %o1, %o4 ! 19 - mulscc %o4, %o1, %o4 ! 20 - mulscc %o4, %o1, %o4 ! 21 - mulscc %o4, %o1, %o4 ! 22 - mulscc %o4, %o1, %o4 ! 23 - mulscc %o4, %o1, %o4 ! 24 - mulscc %o4, %o1, %o4 ! 25 - mulscc %o4, %o1, %o4 ! 26 - mulscc %o4, %o1, %o4 ! 27 - mulscc %o4, %o1, %o4 ! 28 - mulscc %o4, %o1, %o4 ! 29 - mulscc %o4, %o1, %o4 ! 30 - mulscc %o4, %o1, %o4 ! 31 - mulscc %o4, %o1, %o4 ! 32 - mulscc %o4, %g0, %o4 ! final shift - - ! If %o0 was negative, the result is - ! (%o0 * %o1) + (%o1 << 32)) - ! We fix that here. - -#if 0 - tst %o0 - bge 1f - rd %y, %o0 - - ! %o0 was indeed negative; fix upper 32 bits of result by subtracting - ! %o1 (i.e., return %o4 - %o1 in %o1). - retl - sub %o4, %o1, %o1 - -1: - retl - mov %o4, %o1 -#else - /* Faster code adapted from tege@sics.se's code for umul.S. */ - sra %o0, 31, %o2 ! make mask from sign bit - and %o1, %o2, %o2 ! %o2 = 0 or %o1, depending on sign of %o0 - rd %y, %o0 ! get lower half of product - retl - sub %o4, %o2, %o1 ! subtract compensation - ! and put upper half in place -#endif - -LOC(mul_shortway): - /* - * Short multiply. 12 steps, followed by a final shift step. - * The resulting bits are off by 12 and (32-12) = 20 bit positions, - * but there is no problem with %o0 being negative (unlike above). - */ - mulscc %o4, %o1, %o4 ! 1 - mulscc %o4, %o1, %o4 ! 2 - mulscc %o4, %o1, %o4 ! 3 - mulscc %o4, %o1, %o4 ! 4 - mulscc %o4, %o1, %o4 ! 5 - mulscc %o4, %o1, %o4 ! 6 - mulscc %o4, %o1, %o4 ! 7 - mulscc %o4, %o1, %o4 ! 8 - mulscc %o4, %o1, %o4 ! 9 - mulscc %o4, %o1, %o4 ! 10 - mulscc %o4, %o1, %o4 ! 11 - mulscc %o4, %o1, %o4 ! 12 - mulscc %o4, %g0, %o4 ! final shift - - /* - * %o4 has 20 of the bits that should be in the low part of the - * result; %y has the bottom 12 (as %y's top 12). That is: - * - * %o4 %y - * +----------------+----------------+ - * | -12- | -20- | -12- | -20- | - * +------(---------+------)---------+ - * --hi-- ----low-part---- - * - * The upper 12 bits of %o4 should be sign-extended to form the - * high part of the product (i.e., highpart = %o4 >> 20). - */ - - rd %y, %o5 - sll %o4, 12, %o0 ! shift middle bits left 12 - srl %o5, 20, %o5 ! shift low bits right 20, zero fill at left - or %o5, %o0, %o0 ! construct low part of result - retl - sra %o4, 20, %o1 ! ... and extract high part of result - -END(.mul) diff --git a/sysdeps/sparc/sparc32/e_sqrt.c b/sysdeps/sparc/sparc32/e_sqrt.c deleted file mode 100644 index 4886b0a615..0000000000 --- a/sysdeps/sparc/sparc32/e_sqrt.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef __GNUC__ - #error This file uses GNU C extensions; you must compile with GCC. -#endif - -/* Return the square root of X. */ -double -__ieee754_sqrt (double x) -{ - register double result; - asm ("fsqrtd %1, %0" : "=f" (result) : "f" (x)); - return result; -} -strong_alias (__ieee754_sqrt, __sqrt_finite) diff --git a/sysdeps/sparc/sparc32/fpu/e_sqrtl.c b/sysdeps/sparc/sparc32/fpu/e_sqrtl.c deleted file mode 100644 index 1592d58849..0000000000 --- a/sysdeps/sparc/sparc32/fpu/e_sqrtl.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Long double square root, sparc32 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -extern long double _Q_sqrt(const long double a); - -long double -__ieee754_sqrtl (long double x) -{ - return _Q_sqrt (x); -} - -#include -versioned_symbol (libm, __ieee754_sqrtl, __sqrtl_finite, GLIBC_2_23); diff --git a/sysdeps/sparc/sparc32/fpu/s_copysign.S b/sysdeps/sparc/sparc32/fpu/s_copysign.S deleted file mode 100644 index bddbfb2386..0000000000 --- a/sysdeps/sparc/sparc32/fpu/s_copysign.S +++ /dev/null @@ -1,31 +0,0 @@ -/* copysign function, sparc32 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__copysign) - sethi %hi(0x80000000), %g1 - and %o2, %g1, %o4 - andn %o0, %g1, %o0 - or %o0, %o4, %o0 - std %o0, [%sp + 72] - retl - ldd [%sp + 72], %f0 -END (__copysign) -weak_alias (__copysign, copysign) \ No newline at end of file diff --git a/sysdeps/sparc/sparc32/fpu/s_copysignf.S b/sysdeps/sparc/sparc32/fpu/s_copysignf.S deleted file mode 100644 index f2e78962a9..0000000000 --- a/sysdeps/sparc/sparc32/fpu/s_copysignf.S +++ /dev/null @@ -1,31 +0,0 @@ -/* float copysign function, sparc32 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__copysignf) - sethi %hi(0x80000000), %g1 - and %o1, %g1, %o4 - andn %o0, %g1, %o0 - or %o0, %o4, %o0 - st %o0, [%sp + 68] - retl - ld [%sp + 68], %f0 -END (__copysignf) -weak_alias (__copysignf, copysignf) \ No newline at end of file diff --git a/sysdeps/sparc/sparc32/fpu/s_fabs.S b/sysdeps/sparc/sparc32/fpu/s_fabs.S deleted file mode 100644 index fdeda68898..0000000000 --- a/sysdeps/sparc/sparc32/fpu/s_fabs.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Float absolute value, sparc32 version. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__fabs) - st %o0, [%sp+72] - st %o1, [%sp+76] - ldd [%sp+72], %f0 - retl - fabss %f0, %f0 -END (__fabs) -weak_alias (__fabs, fabs) diff --git a/sysdeps/sparc/sparc32/fpu/s_fabsf.S b/sysdeps/sparc/sparc32/fpu/s_fabsf.S deleted file mode 100644 index 12ac9de5c8..0000000000 --- a/sysdeps/sparc/sparc32/fpu/s_fabsf.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Float absolute value, sparc32 version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2006. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__fabsf) - st %o0, [%sp+68] - ld [%sp+68], %f0 - retl - fabss %f0, %f0 -END (__fabsf) -weak_alias (__fabsf, fabsf) diff --git a/sysdeps/sparc/sparc32/fpu/s_fabsl.c b/sysdeps/sparc/sparc32/fpu/s_fabsl.c deleted file mode 100644 index 3c03b92828..0000000000 --- a/sysdeps/sparc/sparc32/fpu/s_fabsl.c +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include - -long double __fabsl (long double x) -{ - return __builtin_fabsl (x); -} -long_double_symbol (libm, __fabsl, fabsl); diff --git a/sysdeps/sparc/sparc32/fpu/s_fma.c b/sysdeps/sparc/sparc32/fpu/s_fma.c deleted file mode 100644 index 8f62605870..0000000000 --- a/sysdeps/sparc/sparc32/fpu/s_fma.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Always use dbl-64 version because long double is emulated in software. */ -#include diff --git a/sysdeps/sparc/sparc32/fpu/s_signbit.S b/sysdeps/sparc/sparc32/fpu/s_signbit.S deleted file mode 100644 index 956517022f..0000000000 --- a/sysdeps/sparc/sparc32/fpu/s_signbit.S +++ /dev/null @@ -1,30 +0,0 @@ -/* signbit(). sparc32 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__signbit) - retl - srl %o0, 31, %o0 -END (__signbit) - -/* On 32-bit the double version will also always work for - single-precision since in both cases the word with the - sign bit in it is passed always in register %o0. */ -strong_alias (__signbit, __signbitf) -hidden_def (__signbitf) diff --git a/sysdeps/sparc/sparc32/fpu/s_signbitf.S b/sysdeps/sparc/sparc32/fpu/s_signbitf.S deleted file mode 100644 index 91886af6d5..0000000000 --- a/sysdeps/sparc/sparc32/fpu/s_signbitf.S +++ /dev/null @@ -1 +0,0 @@ -/* signbitf is implemented in s_signbit.S */ \ No newline at end of file diff --git a/sysdeps/sparc/sparc32/fpu/s_signbitl.S b/sysdeps/sparc/sparc32/fpu/s_signbitl.S deleted file mode 100644 index 5688186d39..0000000000 --- a/sysdeps/sparc/sparc32/fpu/s_signbitl.S +++ /dev/null @@ -1,32 +0,0 @@ -/* signbitl(). sparc32 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ENTRY (___signbitl) - ld [%o0], %o1 - retl - srl %o1, 31, %o0 -END (___signbitl) - -#if IS_IN (libm) -long_double_symbol (libm, ___signbitl, __signbitl); -#else -long_double_symbol (libc, ___signbitl, __signbitl); -#endif diff --git a/sysdeps/sparc/sparc32/fpu/w_sqrt_compat.S b/sysdeps/sparc/sparc32/fpu/w_sqrt_compat.S deleted file mode 100644 index 703f228766..0000000000 --- a/sysdeps/sparc/sparc32/fpu/w_sqrt_compat.S +++ /dev/null @@ -1,53 +0,0 @@ -/* sqrt function. sparc32 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__sqrt) - clr %g1 - std %g0, [%sp + 72] - std %o0, [%sp + 80] - ldd [%sp + 72], %f8 - ldd [%sp + 80], %f0 - fcmpd %f0, %f8 - fbl 1f - nop -8: retl - fsqrtd %f0, %f0 -1: -#ifdef SHARED - SETUP_PIC_REG_LEAF(o5, g1) - sethi %gdop_hix22(_LIB_VERSION), %g1 - xor %g1, %gdop_lox10(_LIB_VERSION), %g1 - ld [%o5 + %g1], %g1, %gdop(_LIB_VERSION) -#else - sethi %hi(_LIB_VERSION), %g1 - or %g1, %lo(_LIB_VERSION), %g1 -#endif - ld [%g1], %g1 - cmp %g1, -1 - be 8b - mov %o0, %o2 - mov %o1, %o3 - mov 26, %o4 - mov %o7, %g1 - call __kernel_standard - mov %g1, %o7 -END (__sqrt) - -weak_alias (__sqrt, sqrt) diff --git a/sysdeps/sparc/sparc32/fpu/w_sqrtf_compat.S b/sysdeps/sparc/sparc32/fpu/w_sqrtf_compat.S deleted file mode 100644 index 05d1160378..0000000000 --- a/sysdeps/sparc/sparc32/fpu/w_sqrtf_compat.S +++ /dev/null @@ -1,51 +0,0 @@ -/* sqrtf function. sparc32 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__sqrtf) - st %g0, [%sp + 68] - st %o0, [%sp + 72] - ld [%sp + 68], %f8 - ld [%sp + 72], %f0 - fcmps %f0, %f8 - fbl 1f - nop -8: retl - fsqrts %f0, %f0 -1: -#ifdef SHARED - SETUP_PIC_REG_LEAF(o5, g1) - sethi %gdop_hix22(_LIB_VERSION), %g1 - xor %g1, %gdop_lox10(_LIB_VERSION), %g1 - ld [%o5 + %g1], %g1, %gdop(_LIB_VERSION) -#else - sethi %hi(_LIB_VERSION), %g1 - or %g1, %lo(_LIB_VERSION), %g1 -#endif - ld [%g1], %g1 - cmp %g1, -1 - be 8b - mov %o0, %o1 - mov 126, %o2 - mov %o7, %g1 - call __kernel_standard_f - mov %g1, %o7 -END (__sqrtf) - -weak_alias (__sqrtf, sqrtf) diff --git a/sysdeps/sparc/sparc32/ieee754.h b/sysdeps/sparc/sparc32/ieee754.h deleted file mode 100644 index 94662a350f..0000000000 --- a/sysdeps/sparc/sparc32/ieee754.h +++ /dev/null @@ -1,170 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _IEEE754_H - -#define _IEEE754_H 1 -#include - -#include - -__BEGIN_DECLS - -union ieee754_float - { - float f; - - /* This is the IEEE 754 single-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int mantissa:23; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:23; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:8; - unsigned int quiet_nan:1; - unsigned int mantissa:22; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - unsigned int mantissa:22; - unsigned int quiet_nan:1; - unsigned int exponent:8; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee_nan; - }; - -#define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */ - - -union ieee754_double - { - double d; - - /* This is the IEEE 754 double-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:20; - unsigned int mantissa1:32; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:11; - unsigned int quiet_nan:1; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:19; - unsigned int mantissa1:32; -#else - /* Together these comprise the mantissa. */ - unsigned int mantissa1:32; - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; -#endif - } ieee_nan; - }; - -#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */ - - -union ieee854_long_double - { - long double d; - - /* This is the IEEE 854 quad-precision format. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:15; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:16; - unsigned int mantissa1:32; - unsigned int mantissa2:32; - unsigned int mantissa3:32; -#endif /* Big endian. */ -#if __BYTE_ORDER == __LITTLE_ENDIAN - /* Together these comprise the mantissa. */ - unsigned int mantissa3:32; - unsigned int mantissa2:32; - unsigned int mantissa1:32; - unsigned int mantissa0:16; - unsigned int exponent:15; - unsigned int negative:1; -#endif /* Little endian. */ - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { -#if __BYTE_ORDER == __BIG_ENDIAN - unsigned int negative:1; - unsigned int exponent:15; - unsigned int quiet_nan:1; - /* Together these comprise the mantissa. */ - unsigned int mantissa0:15; - unsigned int mantissa1:32; - unsigned int mantissa2:32; - unsigned int mantissa3:32; -#else - /* Together these comprise the mantissa. */ - unsigned int mantissa3:32; - unsigned int mantissa2:32; - unsigned int mantissa1:32; - unsigned int mantissa0:15; - unsigned int quiet_nan:1; - unsigned int exponent:15; - unsigned int negative:1; -#endif - } ieee_nan; - }; - -#define IEEE854_LONG_DOUBLE_BIAS 0x3fff /* Added to exponent. */ - -__END_DECLS - -#endif /* ieee754.h */ diff --git a/sysdeps/sparc/sparc32/jmpbuf-offsets.h b/sysdeps/sparc/sparc32/jmpbuf-offsets.h deleted file mode 100644 index 679c1fa595..0000000000 --- a/sysdeps/sparc/sparc32/jmpbuf-offsets.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Private macros for accessing __jmp_buf contents. SPARC version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define JB_SP 0 -#define JB_FP 1 -#define JB_PC 2 diff --git a/sysdeps/sparc/sparc32/jmpbuf-unwind.h b/sysdeps/sparc/sparc32/jmpbuf-unwind.h deleted file mode 100644 index b497febd91..0000000000 --- a/sysdeps/sparc/sparc32/jmpbuf-unwind.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((int) (address) < demangle ((jmpbuf)[JB_SP])) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf regs) -{ - uintptr_t sp = regs[JB_SP]; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return sp; -} - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) - -/* We use the normal lobngjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/sparc/sparc32/lll_timedlock_wait.c b/sysdeps/sparc/sparc32/lll_timedlock_wait.c deleted file mode 100644 index c2c93faf1b..0000000000 --- a/sysdeps/sparc/sparc32/lll_timedlock_wait.c +++ /dev/null @@ -1 +0,0 @@ -/* __lll_timedlock_wait is in lowlevellock.c. */ diff --git a/sysdeps/sparc/sparc32/lll_timedwait_tid.c b/sysdeps/sparc/sparc32/lll_timedwait_tid.c deleted file mode 100644 index 511608ead9..0000000000 --- a/sysdeps/sparc/sparc32/lll_timedwait_tid.c +++ /dev/null @@ -1 +0,0 @@ -/* __lll_timedwait_tid is in lowlevellock.c. */ diff --git a/sysdeps/sparc/sparc32/lowlevellock.c b/sysdeps/sparc/sparc32/lowlevellock.c deleted file mode 100644 index e502bf6f25..0000000000 --- a/sysdeps/sparc/sparc32/lowlevellock.c +++ /dev/null @@ -1,131 +0,0 @@ -/* low level locking for pthread library. SPARC version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Paul Mackerras , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -void -__lll_lock_wait_private (int *futex) -{ - do - { - int oldval = atomic_compare_and_exchange_val_24_acq (futex, 2, 1); - if (oldval != 0) - lll_futex_wait (futex, 2, LLL_PRIVATE); - } - while (atomic_compare_and_exchange_val_24_acq (futex, 2, 0) != 0); -} - - -/* These functions don't get included in libc.so */ -#if IS_IN (libpthread) -void -__lll_lock_wait (int *futex, int private) -{ - do - { - int oldval = atomic_compare_and_exchange_val_24_acq (futex, 2, 1); - if (oldval != 0) - lll_futex_wait (futex, 2, private); - } - while (atomic_compare_and_exchange_val_24_acq (futex, 2, 0) != 0); -} - - -int -__lll_timedlock_wait (int *futex, const struct timespec *abstime, int private) -{ - /* Reject invalid timeouts. */ - if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) - return EINVAL; - - do - { - struct timeval tv; - struct timespec rt; - - /* Get the current time. */ - (void) __gettimeofday (&tv, NULL); - - /* Compute relative timeout. */ - rt.tv_sec = abstime->tv_sec - tv.tv_sec; - rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000; - if (rt.tv_nsec < 0) - { - rt.tv_nsec += 1000000000; - --rt.tv_sec; - } - - /* Already timed out? */ - if (rt.tv_sec < 0) - return ETIMEDOUT; - - /* Wait. */ - int oldval = atomic_compare_and_exchange_val_24_acq (futex, 2, 1); - if (oldval != 0) - lll_futex_timed_wait (futex, 2, &rt, private); - } - while (atomic_compare_and_exchange_val_24_acq (futex, 2, 0) != 0); - - return 0; -} - - -int -__lll_timedwait_tid (int *tidp, const struct timespec *abstime) -{ - int tid; - - if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) - return EINVAL; - - /* Repeat until thread terminated. */ - while ((tid = *tidp) != 0) - { - struct timeval tv; - struct timespec rt; - - /* Get the current time. */ - (void) __gettimeofday (&tv, NULL); - - /* Compute relative timeout. */ - rt.tv_sec = abstime->tv_sec - tv.tv_sec; - rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000; - if (rt.tv_nsec < 0) - { - rt.tv_nsec += 1000000000; - --rt.tv_sec; - } - - /* Already timed out? */ - if (rt.tv_sec < 0) - return ETIMEDOUT; - - /* Wait until thread terminates. The kernel so far does not use - the private futex operations for this. */ - if (lll_futex_timed_wait (tidp, tid, &rt, LLL_SHARED) == -ETIMEDOUT) - return ETIMEDOUT; - } - - return 0; -} -#endif diff --git a/sysdeps/sparc/sparc32/lshift.S b/sysdeps/sparc/sparc32/lshift.S deleted file mode 100644 index 5deebdba41..0000000000 --- a/sysdeps/sparc/sparc32/lshift.S +++ /dev/null @@ -1,96 +0,0 @@ -! Sparc __mpn_lshift -- -! -! Copyright (C) 1995-2017 Free Software Foundation, Inc. -! -! This file is part of the GNU MP Library. -! -! The GNU MP Library is free software; you can redistribute it and/or modify -! it under the terms of the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. -! -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. -! -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, -! see . - - -! INPUT PARAMETERS -! RES_PTR %o0 -! SRC_PTR %o1 -! SIZE %o2 -! CNT %o3 - -#include - -ENTRY(__mpn_lshift) - sll %o2,2,%g1 - add %o1,%g1,%o1 ! make %o1 point at end of src - ld [%o1-4],%g2 ! load first limb - sub %g0,%o3,%o5 ! negate shift count - add %o0,%g1,%o0 ! make %o0 point at end of res - add %o2,-1,%o2 - andcc %o2,4-1,%g4 ! number of limbs in first loop - srl %g2,%o5,%g1 ! compute function result - be LOC(0) ! if multiple of 4 limbs, skip first loop - st %g1,[%sp+80] - - sub %o2,%g4,%o2 ! adjust count for main loop - -LOC(loop0): - ld [%o1-8],%g3 - add %o0,-4,%o0 - add %o1,-4,%o1 - addcc %g4,-1,%g4 - sll %g2,%o3,%o4 - srl %g3,%o5,%g1 - mov %g3,%g2 - or %o4,%g1,%o4 - bne LOC(loop0) - st %o4,[%o0+0] - -LOC(0): tst %o2 - be LOC(end) - nop - -LOC(loop): - ld [%o1-8],%g3 - add %o0,-16,%o0 - addcc %o2,-4,%o2 - sll %g2,%o3,%o4 - srl %g3,%o5,%g1 - - ld [%o1-12],%g2 - sll %g3,%o3,%g4 - or %o4,%g1,%o4 - st %o4,[%o0+12] - srl %g2,%o5,%g1 - - ld [%o1-16],%g3 - sll %g2,%o3,%o4 - or %g4,%g1,%g4 - st %g4,[%o0+8] - srl %g3,%o5,%g1 - - ld [%o1-20],%g2 - sll %g3,%o3,%g4 - or %o4,%g1,%o4 - st %o4,[%o0+4] - srl %g2,%o5,%g1 - - add %o1,-16,%o1 - or %g4,%g1,%g4 - bne LOC(loop) - st %g4,[%o0+0] - -LOC(end): - sll %g2,%o3,%g2 - st %g2,[%o0-4] - retl - ld [%sp+80],%o0 - -END(__mpn_lshift) diff --git a/sysdeps/sparc/sparc32/memchr.S b/sysdeps/sparc/sparc32/memchr.S deleted file mode 100644 index d00e2fef46..0000000000 --- a/sysdeps/sparc/sparc32/memchr.S +++ /dev/null @@ -1,142 +0,0 @@ -/* memchr (str, ch, n) -- Return pointer to first occurrence of CH in STR less - than N. - For SPARC v7. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek and - David S. Miller . - This version is developed using the same algorithm as the fast C - version which carries the following introduction: - Based on strlen implementation by Torbjorn Granlund (tege@sics.se), - with help from Dan Sahlin (dan@sics.se) and - commentary by Jim Blandy (jimb@ai.mit.edu); - adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), - and implemented by Roland McGrath (roland@ai.mit.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text - .align 4 -ENTRY(__memchr) - andcc %o1, 0xff, %o1 - sll %o1, 8, %g6 - andcc %o0, 3, %g0 - or %o1, %g6, %g6 - sll %g6, 16, %o3 - be 10f - or %o3, %g6, %g2 - cmp %o2, 0 - be 9f - sethi %hi(0x80808080), %o4 - ldub [%o0], %g4 - cmp %g4, %o1 - be 1f - add %o0, 1, %o0 - subcc %o2, 1, %o2 - be 9f - andcc %o0, 3, %g0 - be 4f - or %o4, %lo(0x80808080), %o3 - ldub [%o0], %g4 - cmp %g4, %o1 - be 1f - add %o0, 1, %o0 - subcc %o2, 1, %o2 - be 9f - andcc %o0, 3, %g0 - be 5f - sethi %hi(0x01010101), %o5 - ldub [%o0], %g4 - cmp %g4, %o1 - be 1f - add %o0, 1, %o0 - subcc %o2, 1, %o2 - bne,a 7f - and %o2, 3, %g1 - retl - clr %o0 -1: retl - sub %o0, 1, %o0 -10: sethi %hi(0x80808080), %o4 - or %o4, %lo(0x80808080), %o3 -4: sethi %hi(0x01010101), %o5 -5: and %o2, 3, %g1 -7: andcc %o2, 0xfffffffc, %o2 - be 0f - or %o5, %lo(0x01010101), %g6 - ld [%o0], %g4 -6: xor %g4, %g2, %g5 - add %o0, 4, %o0 - sub %g5, %g6, %g5 - andcc %g5, %o3, %g0 - bne 8f - subcc %o2, 4, %o2 - bne,a 6b - ld [%o0], %g4 -0: cmp %g1, 0 -1: be 9f - add %o0, 4, %o0 - ldub [%o0 - 4], %g4 - cmp %g4, %o1 - be 4f - cmp %g1, 1 - be 9f - ldub [%o0 - 3], %g4 - cmp %g4, %o1 - be 3f - cmp %g1, 2 - be 9f - ldub [%o0 - 2], %g4 - cmp %g4, %o1 - be 2f - nop -9: retl - clr %o0 - - /* Check every byte. */ -8: srl %g4, 24, %g5 - and %g5, 0xff, %g5 - cmp %g5, %o1 - be 4f - srl %g4, 16, %g5 - and %g5, 0xff, %g5 - cmp %g5, %o1 - be 3f - srl %g4, 8, %g5 - and %g5, 0xff, %g5 - cmp %g5, %o1 - be 2f - and %g4, 0xff, %g5 - cmp %g5, %o1 - be 1f - cmp %o2, 0 - bne,a 6b - ld [%o0], %g4 - b 1b - cmp %g1, 0 -1: retl - sub %o0, 1, %o0 -2: retl - sub %o0, 2, %o0 -3: retl - sub %o0, 3, %o0 -4: retl - sub %o0, 4, %o0 -END(__memchr) - -weak_alias (__memchr, memchr) -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/sparc/sparc32/memcpy.S b/sysdeps/sparc/sparc32/memcpy.S deleted file mode 100644 index da672bd120..0000000000 --- a/sysdeps/sparc/sparc32/memcpy.S +++ /dev/null @@ -1,653 +0,0 @@ -/* Copy SIZE bytes from SRC to DEST. - For SPARC v7. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , - Eddie C. Dost and - Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Both these macros have to start with exactly the same insn */ -#define MOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7) \ - ldd [%src + offset + 0x00], %t0; \ - ldd [%src + offset + 0x08], %t2; \ - ldd [%src + offset + 0x10], %t4; \ - ldd [%src + offset + 0x18], %t6; \ - st %t0, [%dst + offset + 0x00]; \ - st %t1, [%dst + offset + 0x04]; \ - st %t2, [%dst + offset + 0x08]; \ - st %t3, [%dst + offset + 0x0c]; \ - st %t4, [%dst + offset + 0x10]; \ - st %t5, [%dst + offset + 0x14]; \ - st %t6, [%dst + offset + 0x18]; \ - st %t7, [%dst + offset + 0x1c]; - -#define MOVE_BIGALIGNCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7) \ - ldd [%src + offset + 0x00], %t0; \ - ldd [%src + offset + 0x08], %t2; \ - ldd [%src + offset + 0x10], %t4; \ - ldd [%src + offset + 0x18], %t6; \ - std %t0, [%dst + offset + 0x00]; \ - std %t2, [%dst + offset + 0x08]; \ - std %t4, [%dst + offset + 0x10]; \ - std %t6, [%dst + offset + 0x18]; - -#define MOVE_LASTCHUNK(src, dst, offset, t0, t1, t2, t3) \ - ldd [%src - offset - 0x10], %t0; \ - ldd [%src - offset - 0x08], %t2; \ - st %t0, [%dst - offset - 0x10]; \ - st %t1, [%dst - offset - 0x0c]; \ - st %t2, [%dst - offset - 0x08]; \ - st %t3, [%dst - offset - 0x04]; - -#define MOVE_LASTALIGNCHUNK(src, dst, offset, t0, t1, t2, t3) \ - ldd [%src - offset - 0x10], %t0; \ - ldd [%src - offset - 0x08], %t2; \ - std %t0, [%dst - offset - 0x10]; \ - std %t2, [%dst - offset - 0x08]; - -#define MOVE_SHORTCHUNK(src, dst, offset, t0, t1) \ - ldub [%src - offset - 0x02], %t0; \ - ldub [%src - offset - 0x01], %t1; \ - stb %t0, [%dst - offset - 0x02]; \ - stb %t1, [%dst - offset - 0x01]; - -#define SMOVE_CHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, prev, shil, shir, offset2) \ - ldd [%src + offset + 0x00], %t0; \ - ldd [%src + offset + 0x08], %t2; \ - srl %t0, shir, %t5; \ - srl %t1, shir, %t6; \ - sll %t0, shil, %t0; \ - or %t5, %prev, %t5; \ - sll %t1, shil, %prev; \ - or %t6, %t0, %t0; \ - srl %t2, shir, %t1; \ - srl %t3, shir, %t6; \ - sll %t2, shil, %t2; \ - or %t1, %prev, %t1; \ - std %t4, [%dst + offset + offset2 - 0x04]; \ - std %t0, [%dst + offset + offset2 + 0x04]; \ - sll %t3, shil, %prev; \ - or %t6, %t2, %t4; - -#define SMOVE_ALIGNCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, prev, shil, shir, offset2) \ - ldd [%src + offset + 0x00], %t0; \ - ldd [%src + offset + 0x08], %t2; \ - srl %t0, shir, %t4; \ - srl %t1, shir, %t5; \ - sll %t0, shil, %t6; \ - or %t4, %prev, %t0; \ - sll %t1, shil, %prev; \ - or %t5, %t6, %t1; \ - srl %t2, shir, %t4; \ - srl %t3, shir, %t5; \ - sll %t2, shil, %t6; \ - or %t4, %prev, %t2; \ - sll %t3, shil, %prev; \ - or %t5, %t6, %t3; \ - std %t0, [%dst + offset + offset2 + 0x00]; \ - std %t2, [%dst + offset + offset2 + 0x08]; - - .text -ENTRY(__mempcpy) - add %o0, %o2, %g1 - ba 101f - st %g1, [%sp + 64] -END(__mempcpy) - - .align 4 -ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ - st %o0, [%sp + 64] -101: - sub %o0, %o1, %o4 -9: andcc %o4, 3, %o5 -0: bne 86f - cmp %o2, 15 - - bleu 90f - andcc %o1, 3, %g0 - - be 78f - andcc %o1, 4, %g0 - - andcc %o1, 1, %g0 - be 4f - andcc %o1, 2, %g0 - - ldub [%o1], %g2 - add %o1, 1, %o1 - stb %g2, [%o0] - sub %o2, 1, %o2 - bne 77f - add %o0, 1, %o0 -4: lduh [%o1], %g2 - add %o1, 2, %o1 - sth %g2, [%o0] - sub %o2, 2, %o2 - add %o0, 2, %o0 - -77: andcc %o1, 4, %g0 -78: be 2f - mov %o2, %g1 - - ld [%o1], %o4 - sub %g1, 4, %g1 - st %o4, [%o0] - add %o1, 4, %o1 - add %o0, 4, %o0 -2: andcc %g1, 0xffffff80, %g6 - be 3f - andcc %o0, 4, %g0 - - be 82f + 4 -5: MOVE_BIGCHUNK(o1, o0, 0x00, o2, o3, o4, o5, g2, g3, g4, g5) - MOVE_BIGCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5) - MOVE_BIGCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) - MOVE_BIGCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) - subcc %g6, 128, %g6 - add %o1, 128, %o1 - bne 5b - add %o0, 128, %o0 -3: andcc %g1, 0x70, %g6 - be 80f - andcc %g1, 8, %g0 - - srl %g6, 1, %o4 - mov %o7, %g2 - add %g6, %o4, %o4 - add %o1, %g6, %o1 -104: call 100f - add %o0, %g6, %o0 - jmpl %o5 + (80f - 104b), %g0 - mov %g2, %o7 - -79: MOVE_LASTCHUNK(o1, o0, 0x60, g2, g3, g4, g5) - MOVE_LASTCHUNK(o1, o0, 0x50, g2, g3, g4, g5) - MOVE_LASTCHUNK(o1, o0, 0x40, g2, g3, g4, g5) - MOVE_LASTCHUNK(o1, o0, 0x30, g2, g3, g4, g5) - MOVE_LASTCHUNK(o1, o0, 0x20, g2, g3, g4, g5) - MOVE_LASTCHUNK(o1, o0, 0x10, g2, g3, g4, g5) - MOVE_LASTCHUNK(o1, o0, 0x00, g2, g3, g4, g5) - -80: be 81f - andcc %g1, 4, %g0 - - ldd [%o1], %g2 - add %o0, 8, %o0 - st %g2, [%o0 - 0x08] - add %o1, 8, %o1 - st %g3, [%o0 - 0x04] - -81: be 1f - andcc %g1, 2, %g0 - - ld [%o1], %g2 - add %o1, 4, %o1 - st %g2, [%o0] - add %o0, 4, %o0 -1: be 1f - andcc %g1, 1, %g0 - - lduh [%o1], %g2 - add %o1, 2, %o1 - sth %g2, [%o0] - add %o0, 2, %o0 -1: be 1f - nop - - ldub [%o1], %g2 - stb %g2, [%o0] -1: retl - ld [%sp + 64], %o0 - -82: /* ldd_std */ - MOVE_BIGALIGNCHUNK(o1, o0, 0x00, o2, o3, o4, o5, g2, g3, g4, g5) - MOVE_BIGALIGNCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5) - MOVE_BIGALIGNCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) - MOVE_BIGALIGNCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) - subcc %g6, 128, %g6 - add %o1, 128, %o1 - bne 82b - add %o0, 128, %o0 - - andcc %g1, 0x70, %g6 - be 84f - andcc %g1, 8, %g0 - - mov %o7, %g2 -111: call 110f - add %o1, %g6, %o1 - mov %g2, %o7 - jmpl %o5 + (84f - 111b), %g0 - add %o0, %g6, %o0 - -83: MOVE_LASTALIGNCHUNK(o1, o0, 0x60, g2, g3, g4, g5) - MOVE_LASTALIGNCHUNK(o1, o0, 0x50, g2, g3, g4, g5) - MOVE_LASTALIGNCHUNK(o1, o0, 0x40, g2, g3, g4, g5) - MOVE_LASTALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5) - MOVE_LASTALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5) - MOVE_LASTALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5) - MOVE_LASTALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5) - -84: be 85f - andcc %g1, 4, %g0 - - ldd [%o1], %g2 - add %o0, 8, %o0 - std %g2, [%o0 - 0x08] - add %o1, 8, %o1 -85: be 1f - andcc %g1, 2, %g0 - - ld [%o1], %g2 - add %o1, 4, %o1 - st %g2, [%o0] - add %o0, 4, %o0 -1: be 1f - andcc %g1, 1, %g0 - - lduh [%o1], %g2 - add %o1, 2, %o1 - sth %g2, [%o0] - add %o0, 2, %o0 -1: be 1f - nop - - ldub [%o1], %g2 - stb %g2, [%o0] -1: retl - ld [%sp + 64], %o0 - -86: cmp %o2, 6 - bleu 88f - - cmp %o2, 256 - bcc 87f - - andcc %o0, 3, %g0 - be 61f - andcc %o0, 1, %g0 - be 60f - andcc %o0, 2, %g0 - - ldub [%o1], %g5 - add %o1, 1, %o1 - stb %g5, [%o0] - sub %o2, 1, %o2 - bne 61f - add %o0, 1, %o0 -60: ldub [%o1], %g3 - add %o1, 2, %o1 - stb %g3, [%o0] - sub %o2, 2, %o2 - ldub [%o1 - 1], %g3 - add %o0, 2, %o0 - stb %g3, [%o0 - 1] -61: and %o1, 3, %g2 - and %o2, 0xc, %g3 - and %o1, -4, %o1 - cmp %g3, 4 - sll %g2, 3, %g4 - mov 32, %g2 - be 4f - sub %g2, %g4, %g6 - - blu 3f - cmp %g3, 0x8 - - be 2f - srl %o2, 2, %g3 - - ld [%o1], %o3 - add %o0, -8, %o0 - ld [%o1 + 4], %o4 - b 8f - add %g3, 1, %g3 -2: ld [%o1], %o4 - add %o0, -12, %o0 - ld [%o1 + 4], %o5 - add %g3, 2, %g3 - b 9f - add %o1, -4, %o1 -3: ld [%o1], %g1 - add %o0, -4, %o0 - ld [%o1 + 4], %o3 - srl %o2, 2, %g3 - b 7f - add %o1, 4, %o1 -4: ld [%o1], %o5 - cmp %o2, 7 - ld [%o1 + 4], %g1 - srl %o2, 2, %g3 - bleu 10f - add %o1, 8, %o1 - - ld [%o1], %o3 - add %g3, -1, %g3 -5: sll %o5, %g4, %g2 - srl %g1, %g6, %g5 - or %g2, %g5, %g2 - st %g2, [%o0] -7: ld [%o1 + 4], %o4 - sll %g1, %g4, %g2 - srl %o3, %g6, %g5 - or %g2, %g5, %g2 - st %g2, [%o0 + 4] -8: ld [%o1 + 8], %o5 - sll %o3, %g4, %g2 - srl %o4, %g6, %g5 - or %g2, %g5, %g2 - st %g2, [%o0 + 8] -9: ld [%o1 + 12], %g1 - sll %o4, %g4, %g2 - srl %o5, %g6, %g5 - addcc %g3, -4, %g3 - or %g2, %g5, %g2 - add %o1, 16, %o1 - st %g2, [%o0 + 12] - add %o0, 16, %o0 - bne,a 5b - ld [%o1], %o3 -10: sll %o5, %g4, %g2 - srl %g1, %g6, %g5 - srl %g6, 3, %g3 - or %g2, %g5, %g2 - sub %o1, %g3, %o1 - andcc %o2, 2, %g0 - st %g2, [%o0] - be 1f - andcc %o2, 1, %g0 - - ldub [%o1], %g2 - add %o1, 2, %o1 - stb %g2, [%o0 + 4] - add %o0, 2, %o0 - ldub [%o1 - 1], %g2 - stb %g2, [%o0 + 3] -1: be 1f - nop - ldub [%o1], %g2 - stb %g2, [%o0 + 4] -1: retl - ld [%sp + 64], %o0 - -87: andcc %o1, 3, %g0 - be 3f - andcc %o1, 1, %g0 - - be 4f - andcc %o1, 2, %g0 - - ldub [%o1], %g2 - add %o1, 1, %o1 - stb %g2, [%o0] - sub %o2, 1, %o2 - bne 3f - add %o0, 1, %o0 -4: lduh [%o1], %g2 - add %o1, 2, %o1 - srl %g2, 8, %g3 - sub %o2, 2, %o2 - stb %g3, [%o0] - add %o0, 2, %o0 - stb %g2, [%o0 - 1] -3: andcc %o1, 4, %g0 - - bne 2f - cmp %o5, 1 - - ld [%o1], %o4 - srl %o4, 24, %g2 - stb %g2, [%o0] - srl %o4, 16, %g3 - stb %g3, [%o0 + 1] - srl %o4, 8, %g2 - stb %g2, [%o0 + 2] - sub %o2, 4, %o2 - stb %o4, [%o0 + 3] - add %o1, 4, %o1 - add %o0, 4, %o0 -2: be 33f - cmp %o5, 2 - be 32f - sub %o2, 4, %o2 -31: ld [%o1], %g2 - add %o1, 4, %o1 - srl %g2, 24, %g3 - and %o0, 7, %g5 - stb %g3, [%o0] - cmp %g5, 7 - sll %g2, 8, %g1 - add %o0, 4, %o0 - be 41f - and %o2, 0xffffffc0, %o3 - ld [%o0 - 7], %o4 -4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) - SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) - SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) - SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) - subcc %o3, 64, %o3 - add %o1, 64, %o1 - bne 4b - add %o0, 64, %o0 - - andcc %o2, 0x30, %o3 - be,a 1f - srl %g1, 16, %g2 -4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) - subcc %o3, 16, %o3 - add %o1, 16, %o1 - bne 4b - add %o0, 16, %o0 - - srl %g1, 16, %g2 -1: st %o4, [%o0 - 7] - sth %g2, [%o0 - 3] - srl %g1, 8, %g4 - b 88f - stb %g4, [%o0 - 1] -32: ld [%o1], %g2 - add %o1, 4, %o1 - srl %g2, 16, %g3 - and %o0, 7, %g5 - sth %g3, [%o0] - cmp %g5, 6 - sll %g2, 16, %g1 - add %o0, 4, %o0 - be 42f - and %o2, 0xffffffc0, %o3 - ld [%o0 - 6], %o4 -4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) - SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) - SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) - SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) - subcc %o3, 64, %o3 - add %o1, 64, %o1 - bne 4b - add %o0, 64, %o0 - - andcc %o2, 0x30, %o3 - be,a 1f - srl %g1, 16, %g2 -4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) - subcc %o3, 16, %o3 - add %o1, 16, %o1 - bne 4b - add %o0, 16, %o0 - - srl %g1, 16, %g2 -1: st %o4, [%o0 - 6] - b 88f - sth %g2, [%o0 - 2] -33: ld [%o1], %g2 - sub %o2, 4, %o2 - srl %g2, 24, %g3 - and %o0, 7, %g5 - stb %g3, [%o0] - cmp %g5, 5 - srl %g2, 8, %g4 - sll %g2, 24, %g1 - sth %g4, [%o0 + 1] - add %o1, 4, %o1 - be 43f - and %o2, 0xffffffc0, %o3 - - ld [%o0 - 1], %o4 - add %o0, 4, %o0 -4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) - SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) - SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) - SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) - subcc %o3, 64, %o3 - add %o1, 64, %o1 - bne 4b - add %o0, 64, %o0 - - andcc %o2, 0x30, %o3 - be,a 1f - srl %g1, 24, %g2 -4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) - subcc %o3, 16, %o3 - add %o1, 16, %o1 - bne 4b - add %o0, 16, %o0 - - srl %g1, 24, %g2 -1: st %o4, [%o0 - 5] - b 88f - stb %g2, [%o0 - 1] -41: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) - SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) - SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) - SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) - subcc %o3, 64, %o3 - add %o1, 64, %o1 - bne 41b - add %o0, 64, %o0 - - andcc %o2, 0x30, %o3 - be,a 1f - srl %g1, 16, %g2 -4: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) - subcc %o3, 16, %o3 - add %o1, 16, %o1 - bne 4b - add %o0, 16, %o0 - - srl %g1, 16, %g2 -1: sth %g2, [%o0 - 3] - srl %g1, 8, %g4 - b 88f - stb %g4, [%o0 - 1] -43: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) - SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) - SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) - SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) - subcc %o3, 64, %o3 - add %o1, 64, %o1 - bne 43b - add %o0, 64, %o0 - - andcc %o2, 0x30, %o3 - be,a 1f - srl %g1, 24, %g2 -4: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) - subcc %o3, 16, %o3 - add %o1, 16, %o1 - bne 4b - add %o0, 16, %o0 - - srl %g1, 24, %g2 -1: stb %g2, [%o0 + 3] - b 88f - add %o0, 4, %o0 -42: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) - SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) - SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) - SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) - subcc %o3, 64, %o3 - add %o1, 64, %o1 - bne 42b - add %o0, 64, %o0 - - andcc %o2, 0x30, %o3 - be,a 1f - srl %g1, 16, %g2 -4: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) - subcc %o3, 16, %o3 - add %o1, 16, %o1 - bne 4b - add %o0, 16, %o0 - - srl %g1, 16, %g2 -1: sth %g2, [%o0 - 2] - - /* Fall through */ - -88: and %o2, 0xe, %o3 - mov %o7, %g2 - sll %o3, 3, %o4 - add %o0, %o3, %o0 -106: call 100f - add %o1, %o3, %o1 - mov %g2, %o7 - jmpl %o5 + (89f - 106b), %g0 - andcc %o2, 1, %g0 - - MOVE_SHORTCHUNK(o1, o0, 0x0c, g2, g3) - MOVE_SHORTCHUNK(o1, o0, 0x0a, g2, g3) - MOVE_SHORTCHUNK(o1, o0, 0x08, g2, g3) - MOVE_SHORTCHUNK(o1, o0, 0x06, g2, g3) - MOVE_SHORTCHUNK(o1, o0, 0x04, g2, g3) - MOVE_SHORTCHUNK(o1, o0, 0x02, g2, g3) - MOVE_SHORTCHUNK(o1, o0, 0x00, g2, g3) - -89: be 1f - nop - - ldub [%o1], %g2 - stb %g2, [%o0] -1: retl - ld [%sp + 64], %o0 - -90: bne 88b - andcc %o2, 8, %g0 - - be 1f - andcc %o2, 4, %g0 - - ld [%o1 + 0x00], %g2 - ld [%o1 + 0x04], %g3 - add %o1, 8, %o1 - st %g2, [%o0 + 0x00] - st %g3, [%o0 + 0x04] - add %o0, 8, %o0 -1: b 81b - mov %o2, %g1 - -100: retl - sub %o7, %o4, %o5 -110: retl - sub %o7, %g6, %o5 -END(memcpy) - -libc_hidden_builtin_def (memcpy) - -libc_hidden_def (__mempcpy) -weak_alias (__mempcpy, mempcpy) -libc_hidden_builtin_def (mempcpy) diff --git a/sysdeps/sparc/sparc32/memset.S b/sysdeps/sparc/sparc32/memset.S deleted file mode 100644 index db44115047..0000000000 --- a/sysdeps/sparc/sparc32/memset.S +++ /dev/null @@ -1,154 +0,0 @@ -/* Set a block of memory to some byte value. - For SPARC v7. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller and - Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* Store 64 bytes at (BASE + OFFSET) using value SOURCE. */ -#define ZERO_BIG_BLOCK(base, offset, source) \ - std source, [base + offset + 0x00]; \ - std source, [base + offset + 0x08]; \ - std source, [base + offset + 0x10]; \ - std source, [base + offset + 0x18]; \ - std source, [base + offset + 0x20]; \ - std source, [base + offset + 0x28]; \ - std source, [base + offset + 0x30]; \ - std source, [base + offset + 0x38]; - -#define ZERO_LAST_BLOCKS(base, offset, source) \ - std source, [base - offset - 0x38]; \ - std source, [base - offset - 0x30]; \ - std source, [base - offset - 0x28]; \ - std source, [base - offset - 0x20]; \ - std source, [base - offset - 0x18]; \ - std source, [base - offset - 0x10]; \ - std source, [base - offset - 0x08]; \ - std source, [base - offset - 0x00]; - - .text - .align 4 -ENTRY(__bzero) - b 1f - mov %g0, %g3 - -3: cmp %o2, 3 - be 2f - stb %g3, [%o0] - - cmp %o2, 2 - be 2f - stb %g3, [%o0 + 0x01] - - stb %g3, [%o0 + 0x02] -2: sub %o2, 4, %o2 - add %o1, %o2, %o1 - b 4f - sub %o0, %o2, %o0 -END(__bzero) - -ENTRY(memset) - and %o1, 0xff, %g3 - sll %g3, 8, %g2 - or %g3, %g2, %g3 - sll %g3, 16, %g2 - or %g3, %g2, %g3 - orcc %o2, %g0, %o1 -1: cmp %o1, 7 - bleu 7f - mov %o0, %g1 - - andcc %o0, 3, %o2 - bne 3b -4: andcc %o0, 4, %g0 - - be 2f - mov %g3, %g2 - - st %g3, [%o0] - sub %o1, 4, %o1 - add %o0, 4, %o0 -2: andcc %o1, 0xffffff80, %o3 - be 9f - andcc %o1, 0x78, %o2 -4: ZERO_BIG_BLOCK (%o0, 0x00, %g2) - subcc %o3, 128, %o3 - ZERO_BIG_BLOCK (%o0, 0x40, %g2) - bne 4b - add %o0, 128, %o0 - - orcc %o2, %g0, %g0 -9: be 6f - andcc %o1, 7, %o1 - - mov %o7, %g4 -101: call 100f - srl %o2, 1, %o3 - mov %g4, %o7 - jmpl %o4 + (20f + 64 - 101b), %g0 - add %o0, %o2, %o0 - -100: retl - sub %o7, %o3, %o4 - -20: ZERO_LAST_BLOCKS(%o0, 0x48, %g2) - ZERO_LAST_BLOCKS(%o0, 0x08, %g2) - -6: be 8f - andcc %o1, 4, %g0 - be 1f - andcc %o1, 2, %g0 - st %g3, [%o0] - add %o0, 4, %o0 -1: be 1f - andcc %o1, 1, %g0 - sth %g3, [%o0] - add %o0, 2, %o0 -1: bne,a 8f - stb %g3, [%o0] -8: retl - mov %g1, %o0 -7: orcc %o1, 0, %g0 - be 0f - subcc %o1, 1, %o1 - stb %g3, [%o0] - be 0f - subcc %o1, 1, %o1 - stb %g3, [%o0 + 1] - be 0f - subcc %o1, 1, %o1 - stb %g3, [%o0 + 2] - be 0f - subcc %o1, 1, %o1 - stb %g3, [%o0 + 3] - be 0f - subcc %o1, 1, %o1 - stb %g3, [%o0 + 4] - be 0f - subcc %o1, 1, %o1 - stb %g3, [%o0 + 5] - be 0f - subcc %o1, 1, %o1 - stb %g3, [%o0 + 6] -0: retl - nop -END(memset) -libc_hidden_builtin_def (memset) - -weak_alias (__bzero, bzero) diff --git a/sysdeps/sparc/sparc32/mul_1.S b/sysdeps/sparc/sparc32/mul_1.S deleted file mode 100644 index 8f7cd752a4..0000000000 --- a/sysdeps/sparc/sparc32/mul_1.S +++ /dev/null @@ -1,198 +0,0 @@ -! SPARC __mpn_mul_1 -- Multiply a limb vector with a limb and store -! the result in a second limb vector. -! -! Copyright (C) 1992-2017 Free Software Foundation, Inc. -! -! This file is part of the GNU MP Library. -! -! The GNU MP Library is free software; you can redistribute it and/or modify -! it under the terms of the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. -! -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. -! -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, -! see . - - -! INPUT PARAMETERS -! RES_PTR o0 -! S1_PTR o1 -! SIZE o2 -! S2_LIMB o3 - -! ADD CODE FOR SMALL MULTIPLIERS! -!1: ld -! st -! -!2: ld ,a -! addxcc a,a,x -! st x, -! -!3_unrolled: -! ld ,a -! addxcc a,a,x1 ! 2a + cy -! addx %g0,%g0,x2 -! addcc a,x1,x ! 3a + c -! st x, -! -! ld ,a -! addxcc a,a,y1 -! addx %g0,%g0,y2 -! addcc a,y1,x -! st x, -! -!4_unrolled: -! ld ,a -! srl a,2,x1 ! 4a -! addxcc y2,x1,x -! sll a,30,x2 -! st x, -! -! ld ,a -! srl a,2,y1 -! addxcc x2,y1,y -! sll a,30,y2 -! st x, -! -!5_unrolled: -! ld ,a -! srl a,2,x1 ! 4a -! addxcc a,x1,x ! 5a + c -! sll a,30,x2 -! addx %g0,x2,x2 -! st x, -! -! ld ,a -! srl a,2,y1 -! addxcc a,y1,x -! sll a,30,y2 -! addx %g0,y2,y2 -! st x, -! -!8_unrolled: -! ld ,a -! srl a,3,x1 ! 8a -! addxcc y2,x1,x -! sll a,29,x2 -! st x, -! -! ld ,a -! srl a,3,y1 -! addxcc x2,y1,y -! sll a,29,y2 -! st x, - -#include - -ENTRY(__mpn_mul_1) - ! Make S1_PTR and RES_PTR point at the end of their blocks - ! and put (- 4 x SIZE) in index/loop counter. - sll %o2,2,%o2 - add %o0,%o2,%o4 ! RES_PTR in o4 since o0 is retval - add %o1,%o2,%o1 - sub %g0,%o2,%o2 - - cmp %o3,0xfff - bgu LOC(large) - nop - - ld [%o1+%o2],%o5 - mov 0,%o0 - b LOC(0) - add %o4,-4,%o4 -LOC(loop0): - st %g1,[%o4+%o2] -LOC(0): wr %g0,%o3,%y - sra %o5,31,%g2 - and %o3,%g2,%g2 - andcc %g1,0,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,0,%g1 - sra %g1,20,%g4 - sll %g1,12,%g1 - rd %y,%g3 - srl %g3,20,%g3 - or %g1,%g3,%g1 - - addcc %g1,%o0,%g1 - addx %g2,%g4,%o0 ! add sign-compensation and cy to hi limb - addcc %o2,4,%o2 ! loop counter - bne,a LOC(loop0) - ld [%o1+%o2],%o5 - - retl - st %g1,[%o4+%o2] - - -LOC(large): - ld [%o1+%o2],%o5 - mov 0,%o0 - sra %o3,31,%g4 ! g4 = mask of ones iff S2_LIMB < 0 - b LOC(1) - add %o4,-4,%o4 -LOC(loop): - st %g3,[%o4+%o2] -LOC(1): wr %g0,%o5,%y - and %o5,%g4,%g2 ! g2 = S1_LIMB iff S2_LIMB < 0, else 0 - andcc %g0,%g0,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%g0,%g1 - rd %y,%g3 - addcc %g3,%o0,%g3 - addx %g2,%g1,%o0 ! add sign-compensation and cy to hi limb - addcc %o2,4,%o2 ! loop counter - bne,a LOC(loop) - ld [%o1+%o2],%o5 - - retl - st %g3,[%o4+%o2] - -END(__mpn_mul_1) diff --git a/sysdeps/sparc/sparc32/pthread_barrier_wait.c b/sysdeps/sparc/sparc32/pthread_barrier_wait.c deleted file mode 100644 index e5ef911f62..0000000000 --- a/sysdeps/sparc/sparc32/pthread_barrier_wait.c +++ /dev/null @@ -1 +0,0 @@ -#error No support for pthread barriers on pre-v9 sparc. diff --git a/sysdeps/sparc/sparc32/pthread_spin_lock.S b/sysdeps/sparc/sparc32/pthread_spin_lock.S deleted file mode 100644 index 7d57c525b1..0000000000 --- a/sysdeps/sparc/sparc32/pthread_spin_lock.S +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(pthread_spin_lock) -1: ldstub [%o0], %g1 - orcc %g1, 0x0, %g0 - bne,a 2f - ldub [%o0], %g1 - retl - mov 0, %o0 -2: orcc %g1, 0x0, %g0 - bne,a 2b - ldub [%o0], %g1 - ba,a 1b -END(pthread_spin_lock) diff --git a/sysdeps/sparc/sparc32/pthread_spin_trylock.S b/sysdeps/sparc/sparc32/pthread_spin_trylock.S deleted file mode 100644 index 061b37a834..0000000000 --- a/sysdeps/sparc/sparc32/pthread_spin_trylock.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY(pthread_spin_trylock) - ldstub [%o0], %o0 - cmp %o0, 0 - bne,a 1f - mov EBUSY, %o0 -1: retl - nop -END(pthread_spin_trylock) diff --git a/sysdeps/sparc/sparc32/pthreaddef.h b/sysdeps/sparc/sparc32/pthreaddef.h deleted file mode 100644 index 720e183fde..0000000000 --- a/sysdeps/sparc/sparc32/pthreaddef.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 16 - - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME (stack_pointer + (2 * 64)) -register char *stack_pointer __asm__("%sp"); diff --git a/sysdeps/sparc/sparc32/rem.S b/sysdeps/sparc/sparc32/rem.S deleted file mode 100644 index 349d7c0115..0000000000 --- a/sysdeps/sparc/sparc32/rem.S +++ /dev/null @@ -1,363 +0,0 @@ - /* This file is generated from divrem.m4; DO NOT EDIT! */ -/* - * Division and remainder, from Appendix E of the Sparc Version 8 - * Architecture Manual, with fixes from Gordon Irlam. - */ - -/* - * Input: dividend and divisor in %o0 and %o1 respectively. - * - * m4 parameters: - * .rem name of function to generate - * rem rem=div => %o0 / %o1; rem=rem => %o0 % %o1 - * true true=true => signed; true=false => unsigned - * - * Algorithm parameters: - * N how many bits per iteration we try to get (4) - * WORDSIZE total number of bits (32) - * - * Derived constants: - * TOPBITS number of bits in the top decade of a number - * - * Important variables: - * Q the partial quotient under development (initially 0) - * R the remainder so far, initially the dividend - * ITER number of main division loop iterations required; - * equal to ceil(log2(quotient) / N). Note that this - * is the log base (2^N) of the quotient. - * V the current comparand, initially divisor*2^(ITER*N-1) - * - * Cost: - * Current estimate for non-large dividend is - * ceil(log2(quotient) / N) * (10 + 7N/2) + C - * A large dividend is one greater than 2^(31-TOPBITS) and takes a - * different path, as the upper bits of the quotient must be developed - * one bit at a time. - */ - - - -#include -#include - -ENTRY(.rem) - ! compute sign of result; if neither is negative, no problem - orcc %o1, %o0, %g0 ! either negative? - bge 2f ! no, go do the divide - mov %o0, %g3 ! sign of remainder matches %o0 - tst %o1 - bge 1f - tst %o0 - ! %o1 is definitely negative; %o0 might also be negative - bge 2f ! if %o0 not negative... - sub %g0, %o1, %o1 ! in any case, make %o1 nonneg -1: ! %o0 is negative, %o1 is nonnegative - sub %g0, %o0, %o0 ! make %o0 nonnegative -2: - - ! Ready to divide. Compute size of quotient; scale comparand. - orcc %o1, %g0, %o5 - bne 1f - mov %o0, %o3 - - ! Divide by zero trap. If it returns, return 0 (about as - ! wrong as possible, but that is what SunOS does...). - ta ST_DIV0 - retl - clr %o0 - -1: - cmp %o3, %o5 ! if %o1 exceeds %o0, done - blu LOC(got_result) ! (and algorithm fails otherwise) - clr %o2 - sethi %hi(1 << (32 - 4 - 1)), %g1 - cmp %o3, %g1 - blu LOC(not_really_big) - clr %o4 - - ! Here the dividend is >= 2**(31-N) or so. We must be careful here, - ! as our usual N-at-a-shot divide step will cause overflow and havoc. - ! The number of bits in the result here is N*ITER+SC, where SC <= N. - ! Compute ITER in an unorthodox manner: know we need to shift V into - ! the top decade: so do not even bother to compare to R. - 1: - cmp %o5, %g1 - bgeu 3f - mov 1, %g2 - sll %o5, 4, %o5 - b 1b - add %o4, 1, %o4 - - ! Now compute %g2. - 2: addcc %o5, %o5, %o5 - bcc LOC(not_too_big) - add %g2, 1, %g2 - - ! We get here if the %o1 overflowed while shifting. - ! This means that %o3 has the high-order bit set. - ! Restore %o5 and subtract from %o3. - sll %g1, 4, %g1 ! high order bit - srl %o5, 1, %o5 ! rest of %o5 - add %o5, %g1, %o5 - b LOC(do_single_div) - sub %g2, 1, %g2 - - LOC(not_too_big): - 3: cmp %o5, %o3 - blu 2b - nop - be LOC(do_single_div) - nop - /* NB: these are commented out in the V8-Sparc manual as well */ - /* (I do not understand this) */ - ! %o5 > %o3: went too far: back up 1 step - ! srl %o5, 1, %o5 - ! dec %g2 - ! do single-bit divide steps - ! - ! We have to be careful here. We know that %o3 >= %o5, so we can do the - ! first divide step without thinking. BUT, the others are conditional, - ! and are only done if %o3 >= 0. Because both %o3 and %o5 may have the high- - ! order bit set in the first step, just falling into the regular - ! division loop will mess up the first time around. - ! So we unroll slightly... - LOC(do_single_div): - subcc %g2, 1, %g2 - bl LOC(end_regular_divide) - nop - sub %o3, %o5, %o3 - mov 1, %o2 - b LOC(end_single_divloop) - nop - LOC(single_divloop): - sll %o2, 1, %o2 - bl 1f - srl %o5, 1, %o5 - ! %o3 >= 0 - sub %o3, %o5, %o3 - b 2f - add %o2, 1, %o2 - 1: ! %o3 < 0 - add %o3, %o5, %o3 - sub %o2, 1, %o2 - 2: - LOC(end_single_divloop): - subcc %g2, 1, %g2 - bge LOC(single_divloop) - tst %o3 - b,a LOC(end_regular_divide) - -LOC(not_really_big): -1: - sll %o5, 4, %o5 - cmp %o5, %o3 - bleu 1b - addcc %o4, 1, %o4 - be LOC(got_result) - sub %o4, 1, %o4 - - tst %o3 ! set up for initial iteration -LOC(divloop): - sll %o2, 4, %o2 - ! depth 1, accumulated bits 0 - bl LOC(1.16) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 2, accumulated bits 1 - bl LOC(2.17) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 3, accumulated bits 3 - bl LOC(3.19) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits 7 - bl LOC(4.23) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (7*2+1), %o2 - -LOC(4.23): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (7*2-1), %o2 - - -LOC(3.19): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits 5 - bl LOC(4.21) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (5*2+1), %o2 - -LOC(4.21): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (5*2-1), %o2 - - - -LOC(2.17): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 3, accumulated bits 1 - bl LOC(3.17) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits 3 - bl LOC(4.19) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (3*2+1), %o2 - -LOC(4.19): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (3*2-1), %o2 - - -LOC(3.17): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits 1 - bl LOC(4.17) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (1*2+1), %o2 - -LOC(4.17): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (1*2-1), %o2 - - - - -LOC(1.16): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 2, accumulated bits -1 - bl LOC(2.15) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 3, accumulated bits -1 - bl LOC(3.15) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits -1 - bl LOC(4.15) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-1*2+1), %o2 - -LOC(4.15): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-1*2-1), %o2 - - -LOC(3.15): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits -3 - bl LOC(4.13) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-3*2+1), %o2 - -LOC(4.13): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-3*2-1), %o2 - - - -LOC(2.15): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 3, accumulated bits -3 - bl LOC(3.13) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits -5 - bl LOC(4.11) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-5*2+1), %o2 - -LOC(4.11): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-5*2-1), %o2 - - -LOC(3.13): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits -7 - bl LOC(4.9) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-7*2+1), %o2 - -LOC(4.9): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-7*2-1), %o2 - - - - - 9: -LOC(end_regular_divide): - subcc %o4, 1, %o4 - bge LOC(divloop) - tst %o3 - bl,a LOC(got_result) - ! non-restoring fixup here (one instruction only!) - add %o3, %o1, %o3 - - -LOC(got_result): - ! check to see if answer should be < 0 - tst %g3 - bl,a 1f - sub %g0, %o3, %o3 -1: - retl - mov %o3, %o0 - -END(.rem) diff --git a/sysdeps/sparc/sparc32/rshift.S b/sysdeps/sparc/sparc32/rshift.S deleted file mode 100644 index 4185044168..0000000000 --- a/sysdeps/sparc/sparc32/rshift.S +++ /dev/null @@ -1,93 +0,0 @@ -! sparc __mpn_rshift -- -! -! Copyright (C) 1995-2017 Free Software Foundation, Inc. -! -! This file is part of the GNU MP Library. -! -! The GNU MP Library is free software; you can redistribute it and/or modify -! it under the terms of the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. -! -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. -! -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, -! see . - - -! INPUT PARAMETERS -! RES_PTR %o0 -! SRC_PTR %o1 -! SIZE %o2 -! CNT %o3 - -#include - -ENTRY(__mpn_rshift) - ld [%o1],%g2 ! load first limb - sub %g0,%o3,%o5 ! negate shift count - add %o2,-1,%o2 - andcc %o2,4-1,%g4 ! number of limbs in first loop - sll %g2,%o5,%g1 ! compute function result - be LOC(0) ! if multiple of 4 limbs, skip first loop - st %g1,[%sp+80] - - sub %o2,%g4,%o2 ! adjust count for main loop - -LOC(loop0): - ld [%o1+4],%g3 - add %o0,4,%o0 - add %o1,4,%o1 - addcc %g4,-1,%g4 - srl %g2,%o3,%o4 - sll %g3,%o5,%g1 - mov %g3,%g2 - or %o4,%g1,%o4 - bne LOC(loop0) - st %o4,[%o0-4] - -LOC(0): tst %o2 - be LOC(end) - nop - -LOC(loop): - ld [%o1+4],%g3 - add %o0,16,%o0 - addcc %o2,-4,%o2 - srl %g2,%o3,%o4 - sll %g3,%o5,%g1 - - ld [%o1+8],%g2 - srl %g3,%o3,%g4 - or %o4,%g1,%o4 - st %o4,[%o0-16] - sll %g2,%o5,%g1 - - ld [%o1+12],%g3 - srl %g2,%o3,%o4 - or %g4,%g1,%g4 - st %g4,[%o0-12] - sll %g3,%o5,%g1 - - ld [%o1+16],%g2 - srl %g3,%o3,%g4 - or %o4,%g1,%o4 - st %o4,[%o0-8] - sll %g2,%o5,%g1 - - add %o1,16,%o1 - or %g4,%g1,%g4 - bne LOC(loop) - st %g4,[%o0-4] - -LOC(end): - srl %g2,%o3,%g2 - st %g2,[%o0-0] - retl - ld [%sp+80],%o0 - -END(__mpn_rshift) diff --git a/sysdeps/sparc/sparc32/sdiv.S b/sysdeps/sparc/sparc32/sdiv.S deleted file mode 100644 index d1d4ee31f8..0000000000 --- a/sysdeps/sparc/sparc32/sdiv.S +++ /dev/null @@ -1,363 +0,0 @@ - /* This file is generated from divrem.m4; DO NOT EDIT! */ -/* - * Division and remainder, from Appendix E of the Sparc Version 8 - * Architecture Manual, with fixes from Gordon Irlam. - */ - -/* - * Input: dividend and divisor in %o0 and %o1 respectively. - * - * m4 parameters: - * .div name of function to generate - * div div=div => %o0 / %o1; div=rem => %o0 % %o1 - * true true=true => signed; true=false => unsigned - * - * Algorithm parameters: - * N how many bits per iteration we try to get (4) - * WORDSIZE total number of bits (32) - * - * Derived constants: - * TOPBITS number of bits in the top decade of a number - * - * Important variables: - * Q the partial quotient under development (initially 0) - * R the remainder so far, initially the dividend - * ITER number of main division loop iterations required; - * equal to ceil(log2(quotient) / N). Note that this - * is the log base (2^N) of the quotient. - * V the current comparand, initially divisor*2^(ITER*N-1) - * - * Cost: - * Current estimate for non-large dividend is - * ceil(log2(quotient) / N) * (10 + 7N/2) + C - * A large dividend is one greater than 2^(31-TOPBITS) and takes a - * different path, as the upper bits of the quotient must be developed - * one bit at a time. - */ - - - -#include -#include - -ENTRY(.div) - ! compute sign of result; if neither is negative, no problem - orcc %o1, %o0, %g0 ! either negative? - bge 2f ! no, go do the divide - xor %o1, %o0, %g3 ! compute sign in any case - tst %o1 - bge 1f - tst %o0 - ! %o1 is definitely negative; %o0 might also be negative - bge 2f ! if %o0 not negative... - sub %g0, %o1, %o1 ! in any case, make %o1 nonneg -1: ! %o0 is negative, %o1 is nonnegative - sub %g0, %o0, %o0 ! make %o0 nonnegative -2: - - ! Ready to divide. Compute size of quotient; scale comparand. - orcc %o1, %g0, %o5 - bne 1f - mov %o0, %o3 - - ! Divide by zero trap. If it returns, return 0 (about as - ! wrong as possible, but that is what SunOS does...). - ta ST_DIV0 - retl - clr %o0 - -1: - cmp %o3, %o5 ! if %o1 exceeds %o0, done - blu LOC(got_result) ! (and algorithm fails otherwise) - clr %o2 - sethi %hi(1 << (32 - 4 - 1)), %g1 - cmp %o3, %g1 - blu LOC(not_really_big) - clr %o4 - - ! Here the dividend is >= 2**(31-N) or so. We must be careful here, - ! as our usual N-at-a-shot divide step will cause overflow and havoc. - ! The number of bits in the result here is N*ITER+SC, where SC <= N. - ! Compute ITER in an unorthodox manner: know we need to shift V into - ! the top decade: so do not even bother to compare to R. - 1: - cmp %o5, %g1 - bgeu 3f - mov 1, %g2 - sll %o5, 4, %o5 - b 1b - add %o4, 1, %o4 - - ! Now compute %g2. - 2: addcc %o5, %o5, %o5 - bcc LOC(not_too_big) - add %g2, 1, %g2 - - ! We get here if the %o1 overflowed while shifting. - ! This means that %o3 has the high-order bit set. - ! Restore %o5 and subtract from %o3. - sll %g1, 4, %g1 ! high order bit - srl %o5, 1, %o5 ! rest of %o5 - add %o5, %g1, %o5 - b LOC(do_single_div) - sub %g2, 1, %g2 - - LOC(not_too_big): - 3: cmp %o5, %o3 - blu 2b - nop - be LOC(do_single_div) - nop - /* NB: these are commented out in the V8-Sparc manual as well */ - /* (I do not understand this) */ - ! %o5 > %o3: went too far: back up 1 step - ! srl %o5, 1, %o5 - ! dec %g2 - ! do single-bit divide steps - ! - ! We have to be careful here. We know that %o3 >= %o5, so we can do the - ! first divide step without thinking. BUT, the others are conditional, - ! and are only done if %o3 >= 0. Because both %o3 and %o5 may have the high- - ! order bit set in the first step, just falling into the regular - ! division loop will mess up the first time around. - ! So we unroll slightly... - LOC(do_single_div): - subcc %g2, 1, %g2 - bl LOC(end_regular_divide) - nop - sub %o3, %o5, %o3 - mov 1, %o2 - b LOC(end_single_divloop) - nop - LOC(single_divloop): - sll %o2, 1, %o2 - bl 1f - srl %o5, 1, %o5 - ! %o3 >= 0 - sub %o3, %o5, %o3 - b 2f - add %o2, 1, %o2 - 1: ! %o3 < 0 - add %o3, %o5, %o3 - sub %o2, 1, %o2 - 2: - LOC(end_single_divloop): - subcc %g2, 1, %g2 - bge LOC(single_divloop) - tst %o3 - b,a LOC(end_regular_divide) - -LOC(not_really_big): -1: - sll %o5, 4, %o5 - cmp %o5, %o3 - bleu 1b - addcc %o4, 1, %o4 - be LOC(got_result) - sub %o4, 1, %o4 - - tst %o3 ! set up for initial iteration -LOC(divloop): - sll %o2, 4, %o2 - ! depth 1, accumulated bits 0 - bl LOC(1.16) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 2, accumulated bits 1 - bl LOC(2.17) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 3, accumulated bits 3 - bl LOC(3.19) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits 7 - bl LOC(4.23) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (7*2+1), %o2 - -LOC(4.23): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (7*2-1), %o2 - - -LOC(3.19): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits 5 - bl LOC(4.21) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (5*2+1), %o2 - -LOC(4.21): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (5*2-1), %o2 - - - -LOC(2.17): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 3, accumulated bits 1 - bl LOC(3.17) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits 3 - bl LOC(4.19) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (3*2+1), %o2 - -LOC(4.19): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (3*2-1), %o2 - - -LOC(3.17): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits 1 - bl LOC(4.17) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (1*2+1), %o2 - -LOC(4.17): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (1*2-1), %o2 - - - - -LOC(1.16): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 2, accumulated bits -1 - bl LOC(2.15) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 3, accumulated bits -1 - bl LOC(3.15) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits -1 - bl LOC(4.15) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-1*2+1), %o2 - -LOC(4.15): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-1*2-1), %o2 - - -LOC(3.15): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits -3 - bl LOC(4.13) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-3*2+1), %o2 - -LOC(4.13): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-3*2-1), %o2 - - - -LOC(2.15): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 3, accumulated bits -3 - bl LOC(3.13) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits -5 - bl LOC(4.11) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-5*2+1), %o2 - -LOC(4.11): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-5*2-1), %o2 - - -LOC(3.13): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits -7 - bl LOC(4.9) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-7*2+1), %o2 - -LOC(4.9): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-7*2-1), %o2 - - - - - 9: -LOC(end_regular_divide): - subcc %o4, 1, %o4 - bge LOC(divloop) - tst %o3 - bl,a LOC(got_result) - ! non-restoring fixup here (one instruction only!) - sub %o2, 1, %o2 - - -LOC(got_result): - ! check to see if answer should be < 0 - tst %g3 - bl,a 1f - sub %g0, %o2, %o2 -1: - retl - mov %o2, %o0 - -END(.div) diff --git a/sysdeps/sparc/sparc32/sem_post.c b/sysdeps/sparc/sparc32/sem_post.c deleted file mode 100644 index ae8358dc11..0000000000 --- a/sysdeps/sparc/sparc32/sem_post.c +++ /dev/null @@ -1,82 +0,0 @@ -/* sem_post -- post to a POSIX semaphore. Generic futex-using version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -#include - - -/* See sem_wait for an explanation of the algorithm. */ -int -__new_sem_post (sem_t *sem) -{ - struct new_sem *isem = (struct new_sem *) sem; - int private = isem->private; - unsigned int v; - - __sparc32_atomic_do_lock24 (&isem->pad); - - v = isem->value; - if ((v >> SEM_VALUE_SHIFT) == SEM_VALUE_MAX) - { - __sparc32_atomic_do_unlock24 (&isem->pad); - - __set_errno (EOVERFLOW); - return -1; - } - isem->value = v + (1 << SEM_VALUE_SHIFT); - - __sparc32_atomic_do_unlock24 (&isem->pad); - - if ((v & SEM_NWAITERS_MASK) != 0) - futex_wake (&isem->value, 1, private); - - return 0; -} -versioned_symbol (libpthread, __new_sem_post, sem_post, GLIBC_2_1); - - -#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1) -int -attribute_compat_text_section -__old_sem_post (sem_t *sem) -{ - int *futex = (int *) sem; - - /* We must need to synchronize with consumers of this token, so the atomic - increment must have release MO semantics. */ - atomic_write_barrier (); - (void) atomic_increment_val (futex); - /* We always have to assume it is a shared semaphore. */ - int err = lll_futex_wake (futex, 1, LLL_SHARED); - if (__builtin_expect (err, 0) < 0) - { - __set_errno (-err); - return -1; - } - return 0; -} -compat_symbol (libpthread, __old_sem_post, sem_post, GLIBC_2_0); -#endif diff --git a/sysdeps/sparc/sparc32/sem_waitcommon.c b/sysdeps/sparc/sparc32/sem_waitcommon.c deleted file mode 100644 index 08fd12ce50..0000000000 --- a/sysdeps/sparc/sparc32/sem_waitcommon.c +++ /dev/null @@ -1,146 +0,0 @@ -/* sem_waitcommon -- wait on a semaphore, shared code. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Paul Mackerras , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - - -static void -__sem_wait_32_finish (struct new_sem *sem); - -static void -__sem_wait_cleanup (void *arg) -{ - struct new_sem *sem = (struct new_sem *) arg; - - __sem_wait_32_finish (sem); -} - -/* Wait until at least one token is available, possibly with a timeout. - This is in a separate function in order to make sure gcc - puts the call site into an exception region, and thus the - cleanups get properly run. TODO still necessary? Other futex_wait - users don't seem to need it. */ -static int -__attribute__ ((noinline)) -do_futex_wait (struct new_sem *sem, const struct timespec *abstime) -{ - int err; - - err = futex_abstimed_wait_cancelable (&sem->value, SEM_NWAITERS_MASK, - abstime, sem->private); - - return err; -} - -/* Fast path: Try to grab a token without blocking. */ -static int -__new_sem_wait_fast (struct new_sem *sem, int definitive_result) -{ - unsigned int v; - int ret = 0; - - __sparc32_atomic_do_lock24(&sem->pad); - - v = sem->value; - if ((v >> SEM_VALUE_SHIFT) == 0) - ret = -1; - else - sem->value = v - (1 << SEM_VALUE_SHIFT); - - __sparc32_atomic_do_unlock24(&sem->pad); - - return ret; -} - -/* Slow path that blocks. */ -static int -__attribute__ ((noinline)) -__new_sem_wait_slow (struct new_sem *sem, const struct timespec *abstime) -{ - unsigned int v; - int err = 0; - - __sparc32_atomic_do_lock24(&sem->pad); - - sem->nwaiters++; - - pthread_cleanup_push (__sem_wait_cleanup, sem); - - /* Wait for a token to be available. Retry until we can grab one. */ - v = sem->value; - do - { - if (!(v & SEM_NWAITERS_MASK)) - sem->value = v | SEM_NWAITERS_MASK; - - /* If there is no token, wait. */ - if ((v >> SEM_VALUE_SHIFT) == 0) - { - __sparc32_atomic_do_unlock24(&sem->pad); - - err = do_futex_wait(sem, abstime); - if (err == ETIMEDOUT || err == EINTR) - { - __set_errno (err); - err = -1; - goto error; - } - err = 0; - - __sparc32_atomic_do_lock24(&sem->pad); - - /* We blocked, so there might be a token now. */ - v = sem->value; - } - } - /* If there is no token, we must not try to grab one. */ - while ((v >> SEM_VALUE_SHIFT) == 0); - - sem->value = v - (1 << SEM_VALUE_SHIFT); - - __sparc32_atomic_do_unlock24(&sem->pad); - -error: - pthread_cleanup_pop (0); - - __sem_wait_32_finish (sem); - - return err; -} - -/* Stop being a registered waiter (non-64b-atomics code only). */ -static void -__sem_wait_32_finish (struct new_sem *sem) -{ - __sparc32_atomic_do_lock24(&sem->pad); - - if (--sem->nwaiters == 0) - sem->value &= ~SEM_NWAITERS_MASK; - - __sparc32_atomic_do_unlock24(&sem->pad); -} diff --git a/sysdeps/sparc/sparc32/setjmp.S b/sysdeps/sparc/sparc32/setjmp.S deleted file mode 100644 index 02cf17343b..0000000000 --- a/sysdeps/sparc/sparc32/setjmp.S +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include - -ENTRY(_setjmp) - b 1f - set 0, %o1 -END(_setjmp) -libc_hidden_def (_setjmp) - -ENTRY(setjmp) - set 1, %o1 -END(setjmp) - -ENTRY (__sigsetjmp) -1: - /* Save our PC, SP and FP. Save the signal mask if requested with - a tail-call for simplicity; it always returns zero. */ - ta ST_FLUSH_WINDOWS - -#ifdef PTR_MANGLE - PTR_MANGLE (%g1, %o7, %g4) - PTR_MANGLE2 (%g2, %sp, %g4) - PTR_MANGLE2 (%g3, %fp, %g4) - st %g1, [%o0 + (JB_PC * 4)] - st %g2, [%o0 + (JB_SP * 4)] - st %g3, [%o0 + (JB_FP * 4)] -#else - st %o7, [%o0 + (JB_PC * 4)] - st %sp, [%o0 + (JB_SP * 4)] - st %fp, [%o0 + (JB_FP * 4)] -#endif - - mov %o7, %g1 - call __sigjmp_save - mov %g1, %o7 -END(__sigsetjmp) -hidden_def (__sigsetjmp) - -weak_extern(_setjmp) -weak_extern(setjmp) diff --git a/sysdeps/sparc/sparc32/soft-fp/Makefile b/sysdeps/sparc/sparc32/soft-fp/Makefile deleted file mode 100644 index 137e26bee9..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# Software floating-point emulation. -# Makefile for SPARC v8 long double utility functions (_Q_*). -# Copyright (C) 1999-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# Contributed by Jakub Jelinek (jj@ultra.linux.cz). -# - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifeq ($(subdir),soft-fp) -sparc32-quad-routines := q_add q_cmp q_cmpe q_div q_dtoq q_feq q_fge \ - q_fgt q_fle q_flt q_fne q_itoq q_mul q_neg q_qtod q_qtoi \ - q_qtos q_qtou q_qtoull q_qtoll q_sqrt q_stoq q_sub q_utoq \ - q_ulltoq q_lltoq q_util -sysdep_routines += $(sparc32-quad-routines) - -endif diff --git a/sysdeps/sparc/sparc32/soft-fp/Versions b/sysdeps/sparc/sparc32/soft-fp/Versions deleted file mode 100644 index 6a09249c46..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/Versions +++ /dev/null @@ -1,8 +0,0 @@ -libc { - GLIBC_2.4 { - _Q_add; _Q_cmp; _Q_cmpe; _Q_div; _Q_dtoq; _Q_feq; _Q_fge; _Q_fgt; - _Q_fle; _Q_flt; _Q_fne; _Q_itoq; _Q_mul; _Q_neg; _Q_qtod; _Q_qtoi; - _Q_qtos; _Q_qtou; _Q_qtoull; _Q_qtoll; _Q_sqrt; _Q_stoq; _Q_sub; - _Q_utoq; _Q_ulltoq; _Q_lltoq; - } -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_add.c b/sysdeps/sparc/sparc32/soft-fp/q_add.c deleted file mode 100644 index 2a250dee37..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_add.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Software floating-point emulation. - Return a + b - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -long double _Q_add(const long double a, const long double b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - long double c; - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_Q(A, a); - FP_UNPACK_SEMIRAW_Q(B, b); - FP_ADD_Q(C, A, B); - FP_PACK_SEMIRAW_Q(c, C); - FP_HANDLE_EXCEPTIONS; - return c; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_cmp.c b/sysdeps/sparc/sparc32/soft-fp/q_cmp.c deleted file mode 100644 index 9269cf72ae..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_cmp.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Software floating-point emulation. - Compare a and b, return float condition code. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Q_cmp(const long double a, const long double b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_UNPACK_RAW_Q(A, a); - FP_UNPACK_RAW_Q(B, b); - FP_CMP_Q(r, B, A, 3, 1); - if (r == -1) r = 2; - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_cmpe.c b/sysdeps/sparc/sparc32/soft-fp/q_cmpe.c deleted file mode 100644 index 6a46441e8f..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_cmpe.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Software floating-point emulation. - Compare a and b, return float condition code. - Signal exception (unless masked) if unordered. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Q_cmpe(const long double a, const long double b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_UNPACK_RAW_Q(A, a); - FP_UNPACK_RAW_Q(B, b); - FP_CMP_Q(r, B, A, 3, 2); - if (r == -1) r = 2; - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_div.c b/sysdeps/sparc/sparc32/soft-fp/q_div.c deleted file mode 100644 index 4920219a4d..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_div.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Software floating-point emulation. - Return a / b - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -long double _Q_div(const long double a, const long double b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - long double c; - - FP_INIT_ROUNDMODE; - FP_UNPACK_Q(A, a); - FP_UNPACK_Q(B, b); - FP_DIV_Q(C, A, B); - FP_PACK_Q(c, C); - FP_HANDLE_EXCEPTIONS; - return c; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_dtoq.c b/sysdeps/sparc/sparc32/soft-fp/q_dtoq.c deleted file mode 100644 index 1d5426dfe9..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_dtoq.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Software floating-point emulation. - Return (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "double.h" -#include "quad.h" - -long double _Q_dtoq(const double a) -{ - FP_DECL_EX; - FP_DECL_D(A); - FP_DECL_Q(C); - long double c; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_D(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_EXTEND(Q,D,4,2,C,A); -#else - FP_EXTEND(Q,D,2,1,C,A); -#endif - FP_PACK_RAW_Q(c, C); - FP_HANDLE_EXCEPTIONS; - return c; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_feq.c b/sysdeps/sparc/sparc32/soft-fp/q_feq.c deleted file mode 100644 index 94ba005e61..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_feq.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Software floating-point emulation. - Return 1 if a == b - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Q_feq(const long double a, const long double b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_UNPACK_RAW_Q(A, a); - FP_UNPACK_RAW_Q(B, b); - FP_CMP_EQ_Q(r, A, B, 1); - FP_HANDLE_EXCEPTIONS; - - return !r; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_fge.c b/sysdeps/sparc/sparc32/soft-fp/q_fge.c deleted file mode 100644 index 09c45d7ef9..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_fge.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Software floating-point emulation. - Return 1 if a >= b - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Q_fge(const long double a, const long double b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_UNPACK_RAW_Q(A, a); - FP_UNPACK_RAW_Q(B, b); - FP_CMP_Q(r, B, A, 3, 2); - FP_HANDLE_EXCEPTIONS; - - return (r <= 0); -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_fgt.c b/sysdeps/sparc/sparc32/soft-fp/q_fgt.c deleted file mode 100644 index 1386b14434..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_fgt.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Software floating-point emulation. - Return 1 if a > b - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Q_fgt(const long double a, const long double b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_UNPACK_RAW_Q(A, a); - FP_UNPACK_RAW_Q(B, b); - FP_CMP_Q(r, B, A, 3, 2); - FP_HANDLE_EXCEPTIONS; - - return (r == -1); -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_fle.c b/sysdeps/sparc/sparc32/soft-fp/q_fle.c deleted file mode 100644 index 83b676ee44..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_fle.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Software floating-point emulation. - Return 1 if a <= b - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Q_fle(const long double a, const long double b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_UNPACK_RAW_Q(A, a); - FP_UNPACK_RAW_Q(B, b); - FP_CMP_Q(r, B, A, -2, 2); - FP_HANDLE_EXCEPTIONS; - - return (r >= 0); -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_flt.c b/sysdeps/sparc/sparc32/soft-fp/q_flt.c deleted file mode 100644 index f196393b44..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_flt.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Software floating-point emulation. - Return 1 if a < b - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Q_flt(const long double a, const long double b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_UNPACK_RAW_Q(A, a); - FP_UNPACK_RAW_Q(B, b); - FP_CMP_Q(r, B, A, 3, 2); - FP_HANDLE_EXCEPTIONS; - - return (r == 1); -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_fne.c b/sysdeps/sparc/sparc32/soft-fp/q_fne.c deleted file mode 100644 index b017d892c9..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_fne.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Software floating-point emulation. - Return 1 if a != b - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Q_fne(const long double a, const long double b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_UNPACK_RAW_Q(A, a); - FP_UNPACK_RAW_Q(B, b); - FP_CMP_EQ_Q(r, A, B, 1); - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_itoq.c b/sysdeps/sparc/sparc32/soft-fp/q_itoq.c deleted file mode 100644 index e11938cc43..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_itoq.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Software floating-point emulation. - Return (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FP_NO_EXCEPTIONS -#include "soft-fp.h" -#include "quad.h" - -long double _Q_itoq(const int a) -{ - FP_DECL_Q(C); - int b = a; - long double c; - - FP_FROM_INT_Q(C, b, 32, unsigned int); - FP_PACK_RAW_Q(c, C); - return c; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_lltoq.c b/sysdeps/sparc/sparc32/soft-fp/q_lltoq.c deleted file mode 100644 index b94443dd65..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_lltoq.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Software floating-point emulation. - Return (long double)a - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FP_NO_EXCEPTIONS -#include "soft-fp.h" -#include "quad.h" - -long double _Q_lltoq(const long long a) -{ - FP_DECL_Q(C); - long double c; - long long b = a; - - FP_FROM_INT_Q(C, b, 64, unsigned long long); - FP_PACK_RAW_Q(c, C); - return c; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_mul.c b/sysdeps/sparc/sparc32/soft-fp/q_mul.c deleted file mode 100644 index 8892f0ef93..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_mul.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Software floating-point emulation. - Return a * b - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -long double _Q_mul(const long double a, const long double b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - long double c; - - FP_INIT_ROUNDMODE; - FP_UNPACK_Q(A, a); - FP_UNPACK_Q(B, b); - FP_MUL_Q(C, A, B); - FP_PACK_Q(c, C); - FP_HANDLE_EXCEPTIONS; - return c; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_neg.c b/sysdeps/sparc/sparc32/soft-fp/q_neg.c deleted file mode 100644 index 9660d17eac..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_neg.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Return !a - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -long double _Q_neg(const long double a) -{ - union { - long double ldbl; - UWtype words[4]; - } c; - - c.ldbl = a; - -#if (__BYTE_ORDER == __BIG_ENDIAN) - c.words[0] ^= (((UWtype)1) << (W_TYPE_SIZE - 1)); -#elif (__BYTE_ORDER == __LITTLE_ENDIAN) && (W_TYPE_SIZE == 64) - c.words[1] ^= (((UWtype)1) << (W_TYPE_SIZE - 1)); -#elif (__BYTE_ORDER == __LITTLE_ENDIAN) && (W_TYPE_SIZE == 32) - c.words[3] ^= (((UWtype)1) << (W_TYPE_SIZE - 1)); -#else - FP_DECL_Q(A); FP_DECL_Q(C); - - FP_UNPACK_RAW_Q(A, a); - FP_NEG_Q(C, A); - FP_PACK_RAW_Q(c.ldbl, C); -#endif - return c.ldbl; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_qtod.c b/sysdeps/sparc/sparc32/soft-fp/q_qtod.c deleted file mode 100644 index 9d7b80ef3e..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_qtod.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Software floating-point emulation. - Return (double)a - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "double.h" -#include "quad.h" - -double _Q_qtod(const long double a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - FP_DECL_D(R); - double r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_Q(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_TRUNC(D,Q,2,4,R,A); -#else - FP_TRUNC(D,Q,1,2,R,A); -#endif - FP_PACK_SEMIRAW_D(r, R); - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_qtoi.c b/sysdeps/sparc/sparc32/soft-fp/q_qtoi.c deleted file mode 100644 index 5d362b70e4..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_qtoi.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Software floating-point emulation. - Return (int)a - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FP_ROUNDMODE FP_RND_ZERO -#include "soft-fp.h" -#include "quad.h" - -int _Q_qtoi(const long double a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - unsigned int r; - - FP_UNPACK_RAW_Q(A, a); - FP_TO_INT_Q(r, A, 32, 1); - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_qtoll.c b/sysdeps/sparc/sparc32/soft-fp/q_qtoll.c deleted file mode 100644 index bfaa64ac11..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_qtoll.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Software floating-point emulation. - Return (long long)a - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FP_ROUNDMODE FP_RND_ZERO -#include "soft-fp.h" -#include "quad.h" - -long long _Q_qtoll(const long double a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - unsigned long long r; - - FP_UNPACK_RAW_Q(A, a); - FP_TO_INT_Q(r, A, 64, 1); - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_qtos.c b/sysdeps/sparc/sparc32/soft-fp/q_qtos.c deleted file mode 100644 index b2642def3b..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_qtos.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Software floating-point emulation. - Return (float)a - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "single.h" -#include "quad.h" - -float _Q_qtos(const long double a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - FP_DECL_S(R); - float r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_Q(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_TRUNC(S,Q,1,4,R,A); -#else - FP_TRUNC(S,Q,1,2,R,A); -#endif - FP_PACK_SEMIRAW_S(r, R); - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_qtou.c b/sysdeps/sparc/sparc32/soft-fp/q_qtou.c deleted file mode 100644 index 3940a2f5b6..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_qtou.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Software floating-point emulation. - Return (unsigned int)a - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FP_ROUNDMODE FP_RND_ZERO -#include "soft-fp.h" -#include "quad.h" - -unsigned int _Q_qtou(const long double a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - unsigned int r; - - FP_UNPACK_RAW_Q(A, a); - FP_TO_INT_Q(r, A, 32, -1); - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_qtoull.c b/sysdeps/sparc/sparc32/soft-fp/q_qtoull.c deleted file mode 100644 index 83fabef05c..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_qtoull.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Software floating-point emulation. - Return (unsigned long long)a - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FP_ROUNDMODE FP_RND_ZERO -#include "soft-fp.h" -#include "quad.h" - -unsigned long long _Q_qtoull(const long double a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - unsigned long long r; - - FP_UNPACK_RAW_Q(A, a); - FP_TO_INT_Q(r, A, 64, -1); - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_sqrt.c b/sysdeps/sparc/sparc32/soft-fp/q_sqrt.c deleted file mode 100644 index c3939446fe..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_sqrt.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Software floating-point emulation. - Return sqrtl(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -long double _Q_sqrt(const long double a) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(C); - long double c; - - FP_INIT_ROUNDMODE; - FP_UNPACK_Q(A, a); - FP_SQRT_Q(C, A); - FP_PACK_Q(c, C); - FP_HANDLE_EXCEPTIONS; - return c; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_stoq.c b/sysdeps/sparc/sparc32/soft-fp/q_stoq.c deleted file mode 100644 index b011d801b4..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_stoq.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Software floating-point emulation. - c = (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "single.h" -#include "quad.h" - -long double _Q_stoq(const float a) -{ - FP_DECL_EX; - FP_DECL_S(A); - FP_DECL_Q(C); - long double c; - - FP_UNPACK_RAW_S(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_EXTEND(Q,S,4,1,C,A); -#else - FP_EXTEND(Q,S,2,1,C,A); -#endif - FP_PACK_RAW_Q(c, C); - FP_HANDLE_EXCEPTIONS; - return c; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_sub.c b/sysdeps/sparc/sparc32/soft-fp/q_sub.c deleted file mode 100644 index 69d78cd85a..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_sub.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Software floating-point emulation. - c = a - b - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -long double _Q_sub(const long double a, const long double b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - long double c; - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_Q(A, a); - FP_UNPACK_SEMIRAW_Q(B, b); - FP_SUB_Q(C, A, B); - FP_PACK_SEMIRAW_Q(c, C); - FP_HANDLE_EXCEPTIONS; - return c; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c b/sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c deleted file mode 100644 index 97586cb588..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Software floating-point emulation. - Return (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FP_NO_EXCEPTIONS -#include "soft-fp.h" -#include "quad.h" - -long double _Q_ulltoq(const unsigned long long a) -{ - FP_DECL_Q(C); - long double c; - unsigned long long b = a; - - FP_FROM_INT_Q(C, b, 64, unsigned long long); - FP_PACK_RAW_Q(c, C); - return c; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_util.c b/sysdeps/sparc/sparc32/soft-fp/q_util.c deleted file mode 100644 index 35de7ee791..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_util.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Software floating-point emulation. - Helper routine for _Q_* routines. - Simulate exceptions using double arithmetics. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "soft-fp.h" - -unsigned long long ___Q_zero = 0x0000000000000000ULL; - -void ___Q_simulate_exceptions(int exceptions) -{ - if (exceptions & FP_EX_INVALID) - { - float f = 0.0; - __asm__ __volatile__ ("fdivs %0, %0, %0" : "+f" (f)); - } - if (exceptions & FP_EX_DIVZERO) - { - float f = 1.0, g = 0.0; - __asm__ __volatile__ ("fdivs %0, %1, %0" - : "+f" (f) - : "f" (g)); - } - if (exceptions & FP_EX_OVERFLOW) - { - float f = FLT_MAX; - __asm__ __volatile__("fmuls %0, %0, %0" : "+f" (f)); - exceptions &= ~FP_EX_INEXACT; - } - if (exceptions & FP_EX_UNDERFLOW) - { - float f = FLT_MIN; - __asm__ __volatile__("fmuls %0, %0, %0" : "+f" (f)); - exceptions &= ~FP_EX_INEXACT; - } - if (exceptions & FP_EX_INEXACT) - { - double d = 1.0, e = M_PI; - __asm__ __volatile__ ("fdivd %0, %1, %0" - : "+f" (d) - : "f" (e)); - } -} diff --git a/sysdeps/sparc/sparc32/soft-fp/q_utoq.c b/sysdeps/sparc/sparc32/soft-fp/q_utoq.c deleted file mode 100644 index 48337ccb0e..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/q_utoq.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Software floating-point emulation. - c = (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FP_NO_EXCEPTIONS -#include "soft-fp.h" -#include "quad.h" - -long double _Q_utoq(const unsigned int a) -{ - FP_DECL_Q(C); - long double c; - unsigned int b = a; - - FP_FROM_INT_Q(C, b, 32, unsigned int); - FP_PACK_RAW_Q(c, C); - return c; -} diff --git a/sysdeps/sparc/sparc32/soft-fp/sfp-machine.h b/sysdeps/sparc/sparc32/soft-fp/sfp-machine.h deleted file mode 100644 index de9d56ec46..0000000000 --- a/sysdeps/sparc/sparc32/soft-fp/sfp-machine.h +++ /dev/null @@ -1,218 +0,0 @@ -/* Machine-dependent software floating-point definitions. - Sparc userland (_Q_*) version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com), - Jakub Jelinek (jj@ultra.linux.cz) and - David S. Miller (davem@redhat.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define _FP_W_TYPE_SIZE 32 -#define _FP_W_TYPE unsigned long -#define _FP_WS_TYPE signed long -#define _FP_I_TYPE long - -#define _FP_MUL_MEAT_S(R,X,Y) \ - _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_D(R,X,Y) \ - _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_udiv(S,R,X,Y) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) - -#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) -#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 -#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 -#define _FP_NANSIGN_S 0 -#define _FP_NANSIGN_D 0 -#define _FP_NANSIGN_Q 0 - -#define _FP_KEEPNANFRACP 1 -#define _FP_QNANNEGATEDP 0 - -/* If one NaN is signaling and the other is not, - * we choose that one, otherwise we choose X. - */ -/* For _Qp_* and _Q_*, this should prefer X, for - * CPU instruction emulation this should prefer Y. - * (see SPAMv9 B.2.2 section). - */ -#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \ - && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \ - { \ - R##_s = Y##_s; \ - _FP_FRAC_COPY_##wc(R,Y); \ - } \ - else \ - { \ - R##_s = X##_s; \ - _FP_FRAC_COPY_##wc(R,X); \ - } \ - R##_c = FP_CLS_NAN; \ - } while (0) - -/* Some assembly to speed things up. */ -#define __FP_FRAC_ADD_3(r2,r1,r0,x2,x1,x0,y2,y1,y0) \ - __asm__ ("addcc %r7,%8,%2\n\ - addxcc %r5,%6,%1\n\ - addx %r3,%4,%0" \ - : "=r" ((USItype)(r2)), \ - "=&r" ((USItype)(r1)), \ - "=&r" ((USItype)(r0)) \ - : "%rJ" ((USItype)(x2)), \ - "rI" ((USItype)(y2)), \ - "%rJ" ((USItype)(x1)), \ - "rI" ((USItype)(y1)), \ - "%rJ" ((USItype)(x0)), \ - "rI" ((USItype)(y0)) \ - : "cc") - -#define __FP_FRAC_SUB_3(r2,r1,r0,x2,x1,x0,y2,y1,y0) \ - __asm__ ("subcc %r7,%8,%2\n\ - subxcc %r5,%6,%1\n\ - subx %r3,%4,%0" \ - : "=r" ((USItype)(r2)), \ - "=&r" ((USItype)(r1)), \ - "=&r" ((USItype)(r0)) \ - : "%rJ" ((USItype)(x2)), \ - "rI" ((USItype)(y2)), \ - "%rJ" ((USItype)(x1)), \ - "rI" ((USItype)(y1)), \ - "%rJ" ((USItype)(x0)), \ - "rI" ((USItype)(y0)) \ - : "cc") - -#define __FP_FRAC_ADD_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \ - do { \ - /* We need to fool gcc, as we need to pass more than 10 \ - input/outputs. */ \ - register USItype _t1 __asm__ ("g1"), _t2 __asm__ ("g2"); \ - __asm__ __volatile__ ("\ - addcc %r8,%9,%1\n\ - addxcc %r6,%7,%0\n\ - addxcc %r4,%5,%%g2\n\ - addx %r2,%3,%%g1" \ - : "=&r" ((USItype)(r1)), \ - "=&r" ((USItype)(r0)) \ - : "%rJ" ((USItype)(x3)), \ - "rI" ((USItype)(y3)), \ - "%rJ" ((USItype)(x2)), \ - "rI" ((USItype)(y2)), \ - "%rJ" ((USItype)(x1)), \ - "rI" ((USItype)(y1)), \ - "%rJ" ((USItype)(x0)), \ - "rI" ((USItype)(y0)) \ - : "cc", "g1", "g2"); \ - __asm__ __volatile__ ("" : "=r" (_t1), "=r" (_t2)); \ - r3 = _t1; r2 = _t2; \ - } while (0) - -#define __FP_FRAC_SUB_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \ - do { \ - /* We need to fool gcc, as we need to pass more than 10 \ - input/outputs. */ \ - register USItype _t1 __asm__ ("g1"), _t2 __asm__ ("g2"); \ - __asm__ __volatile__ ("\ - subcc %r8,%9,%1\n\ - subxcc %r6,%7,%0\n\ - subxcc %r4,%5,%%g2\n\ - subx %r2,%3,%%g1" \ - : "=&r" ((USItype)(r1)), \ - "=&r" ((USItype)(r0)) \ - : "%rJ" ((USItype)(x3)), \ - "rI" ((USItype)(y3)), \ - "%rJ" ((USItype)(x2)), \ - "rI" ((USItype)(y2)), \ - "%rJ" ((USItype)(x1)), \ - "rI" ((USItype)(y1)), \ - "%rJ" ((USItype)(x0)), \ - "rI" ((USItype)(y0)) \ - : "cc", "g1", "g2"); \ - __asm__ __volatile__ ("" : "=r" (_t1), "=r" (_t2)); \ - r3 = _t1; r2 = _t2; \ - } while (0) - -#define __FP_FRAC_DEC_3(x2,x1,x0,y2,y1,y0) __FP_FRAC_SUB_3(x2,x1,x0,x2,x1,x0,y2,y1,y0) - -#define __FP_FRAC_DEC_4(x3,x2,x1,x0,y3,y2,y1,y0) __FP_FRAC_SUB_4(x3,x2,x1,x0,x3,x2,x1,x0,y3,y2,y1,y0) - -#define __FP_FRAC_ADDI_4(x3,x2,x1,x0,i) \ - __asm__ ("addcc %3,%4,%3\n\ - addxcc %2,%%g0,%2\n\ - addxcc %1,%%g0,%1\n\ - addx %0,%%g0,%0" \ - : "=&r" ((USItype)(x3)), \ - "=&r" ((USItype)(x2)), \ - "=&r" ((USItype)(x1)), \ - "=&r" ((USItype)(x0)) \ - : "rI" ((USItype)(i)), \ - "0" ((USItype)(x3)), \ - "1" ((USItype)(x2)), \ - "2" ((USItype)(x1)), \ - "3" ((USItype)(x0)) \ - : "cc") - -/* Obtain the current rounding mode. */ -#ifndef FP_ROUNDMODE -#define FP_ROUNDMODE ((_fcw >> 30) & 0x3) -#endif - -/* Exception flags. */ -#define FP_EX_INVALID (1 << 4) -#define FP_EX_OVERFLOW (1 << 3) -#define FP_EX_UNDERFLOW (1 << 2) -#define FP_EX_DIVZERO (1 << 1) -#define FP_EX_INEXACT (1 << 0) - -#define _FP_TININESS_AFTER_ROUNDING 0 - -#define _FP_DECL_EX \ - fpu_control_t _fcw __attribute__ ((unused)) = (FP_RND_NEAREST << 30) - -#define FP_INIT_ROUNDMODE \ -do { \ - _FPU_GETCW(_fcw); \ -} while (0) - -#define FP_TRAPPING_EXCEPTIONS ((_fcw >> 23) & 0x1f) -#define FP_INHIBIT_RESULTS ((_fcw >> 23) & _fex) - -/* Simulate exceptions using double arithmetics. */ -extern void ___Q_simulate_exceptions(int exc); - -#define FP_HANDLE_EXCEPTIONS \ -do { \ - if (!_fex) \ - { \ - /* This is the common case, so we do it inline. \ - * We need to clear cexc bits if any. \ - */ \ - extern unsigned long long ___Q_zero; \ - __asm__ __volatile__("ldd [%0], %%f30\n\t" \ - "faddd %%f30, %%f30, %%f30" \ - : : "r" (&___Q_zero) : "f30"); \ - } \ - else \ - ___Q_simulate_exceptions (_fex); \ -} while (0) diff --git a/sysdeps/sparc/sparc32/sparcv8/Makefile b/sysdeps/sparc/sparc32/sparcv8/Makefile deleted file mode 100644 index 2ff9853458..0000000000 --- a/sysdeps/sparc/sparc32/sparcv8/Makefile +++ /dev/null @@ -1 +0,0 @@ -sysdep-CFLAGS += -mcpu=v8 diff --git a/sysdeps/sparc/sparc32/sparcv8/addmul_1.S b/sysdeps/sparc/sparc32/sparcv8/addmul_1.S deleted file mode 100644 index 20e37c2d0b..0000000000 --- a/sysdeps/sparc/sparc32/sparcv8/addmul_1.S +++ /dev/null @@ -1,118 +0,0 @@ -! SPARC v8 __mpn_addmul_1 -- Multiply a limb vector with a limb and -! add the result to a second limb vector. - -! Copyright (C) 1992-2017 Free Software Foundation, Inc. - -! This file is part of the GNU MP Library. - -! The GNU MP Library is free software; you can redistribute it and/or modify -! it under the terms of the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, -! see . - - -! INPUT PARAMETERS -! res_ptr o0 -! s1_ptr o1 -! size o2 -! s2_limb o3 - -#include - -ENTRY(__mpn_addmul_1) - ld [%o1+0],%o4 ! 1 - sll %o2,4,%g1 - orcc %g0,%g0,%g2 - mov %o7,%g4 ! Save return address register - and %g1,(4-1)<<4,%g1 -1: call 2f - add %o7,3f-1b,%g3 -2: jmp %g3+%g1 - mov %g4,%o7 ! Restore return address register - - .align 4 -3: -LOC(00): - add %o0,-4,%o0 - b LOC(loop00) /* 4, 8, 12, ... */ - add %o1,-4,%o1 - nop -LOC(01): - b LOC(loop01) /* 1, 5, 9, ... */ - nop - nop - nop -LOC(10): - add %o0,-12,%o0 /* 2, 6, 10, ... */ - b LOC(loop10) - add %o1,4,%o1 - nop -LOC(11): - add %o0,-8,%o0 /* 3, 7, 11, ... */ - b LOC(loop11) - add %o1,-8,%o1 - nop - -LOC(loop): - addcc %g3,%g2,%g3 ! 1 - ld [%o1+4],%o4 ! 2 - rd %y,%g2 ! 1 - addx %g0,%g2,%g2 - ld [%o0+0],%g1 ! 2 - addcc %g1,%g3,%g3 - st %g3,[%o0+0] ! 1 -LOC(loop00): - umul %o4,%o3,%g3 ! 2 - ld [%o0+4],%g1 ! 2 - addxcc %g3,%g2,%g3 ! 2 - ld [%o1+8],%o4 ! 3 - rd %y,%g2 ! 2 - addx %g0,%g2,%g2 - nop - addcc %g1,%g3,%g3 - st %g3,[%o0+4] ! 2 -LOC(loop11): - umul %o4,%o3,%g3 ! 3 - addxcc %g3,%g2,%g3 ! 3 - ld [%o1+12],%o4 ! 4 - rd %y,%g2 ! 3 - add %o1,16,%o1 - addx %g0,%g2,%g2 - ld [%o0+8],%g1 ! 2 - addcc %g1,%g3,%g3 - st %g3,[%o0+8] ! 3 -LOC(loop10): - umul %o4,%o3,%g3 ! 4 - addxcc %g3,%g2,%g3 ! 4 - ld [%o1+0],%o4 ! 1 - rd %y,%g2 ! 4 - addx %g0,%g2,%g2 - ld [%o0+12],%g1 ! 2 - addcc %g1,%g3,%g3 - st %g3,[%o0+12] ! 4 - add %o0,16,%o0 - addx %g0,%g2,%g2 -LOC(loop01): - addcc %o2,-4,%o2 - bg LOC(loop) - umul %o4,%o3,%g3 ! 1 - - addcc %g3,%g2,%g3 ! 4 - rd %y,%g2 ! 4 - addx %g0,%g2,%g2 - ld [%o0+0],%g1 ! 2 - addcc %g1,%g3,%g3 - st %g3,[%o0+0] ! 4 - retl - addx %g0,%g2,%o0 - -END(__mpn_addmul_1) diff --git a/sysdeps/sparc/sparc32/sparcv8/dotmul.S b/sysdeps/sparc/sparc32/sparcv8/dotmul.S deleted file mode 100644 index 9b20cc3684..0000000000 --- a/sysdeps/sparc/sparc32/sparcv8/dotmul.S +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Sparc v8 has multiply. - */ - -#include - -ENTRY(.mul) - - smul %o0, %o1, %o0 - retl - rd %y, %o1 - -END(.mul) diff --git a/sysdeps/sparc/sparc32/sparcv8/mul_1.S b/sysdeps/sparc/sparc32/sparcv8/mul_1.S deleted file mode 100644 index 49a2213c0f..0000000000 --- a/sysdeps/sparc/sparc32/sparcv8/mul_1.S +++ /dev/null @@ -1,102 +0,0 @@ -! SPARC v8 __mpn_mul_1 -- Multiply a limb vector with a single limb and -! store the product in a second limb vector. - -! Copyright (C) 1992-2017 Free Software Foundation, Inc. - -! This file is part of the GNU MP Library. - -! The GNU MP Library is free software; you can redistribute it and/or modify -! it under the terms of the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, -! see . - - -! INPUT PARAMETERS -! res_ptr o0 -! s1_ptr o1 -! size o2 -! s2_limb o3 - -#include - -ENTRY(__mpn_mul_1) - sll %o2,4,%g1 - mov %o7,%g4 ! Save return address register - and %g1,(4-1)<<4,%g1 -1: call 2f - add %o7,3f-1b,%g3 -2: mov %g4,%o7 ! Restore return address register - jmp %g3+%g1 - ld [%o1+0],%o4 ! 1 - - .align 4 -3: -LOC(00): - add %o0,-4,%o0 - add %o1,-4,%o1 - b LOC(loop00) /* 4, 8, 12, ... */ - orcc %g0,%g0,%g2 -LOC(01): - b LOC(loop01) /* 1, 5, 9, ... */ - orcc %g0,%g0,%g2 - nop - nop -LOC(10): - add %o0,-12,%o0 /* 2, 6, 10, ... */ - add %o1,4,%o1 - b LOC(loop10) - orcc %g0,%g0,%g2 - nop -LOC(11): - add %o0,-8,%o0 /* 3, 7, 11, ... */ - add %o1,-8,%o1 - b LOC(loop11) - orcc %g0,%g0,%g2 - -LOC(loop): - addcc %g3,%g2,%g3 ! 1 - ld [%o1+4],%o4 ! 2 - st %g3,[%o0+0] ! 1 - rd %y,%g2 ! 1 -LOC(loop00): - umul %o4,%o3,%g3 ! 2 - addxcc %g3,%g2,%g3 ! 2 - ld [%o1+8],%o4 ! 3 - st %g3,[%o0+4] ! 2 - rd %y,%g2 ! 2 -LOC(loop11): - umul %o4,%o3,%g3 ! 3 - addxcc %g3,%g2,%g3 ! 3 - ld [%o1+12],%o4 ! 4 - add %o1,16,%o1 - st %g3,[%o0+8] ! 3 - rd %y,%g2 ! 3 -LOC(loop10): - umul %o4,%o3,%g3 ! 4 - addxcc %g3,%g2,%g3 ! 4 - ld [%o1+0],%o4 ! 1 - st %g3,[%o0+12] ! 4 - add %o0,16,%o0 - rd %y,%g2 ! 4 - addx %g0,%g2,%g2 -LOC(loop01): - addcc %o2,-4,%o2 - bg LOC(loop) - umul %o4,%o3,%g3 ! 1 - - addcc %g3,%g2,%g3 ! 4 - st %g3,[%o0+0] ! 4 - rd %y,%g2 ! 4 - retl - addx %g0,%g2,%o0 - -END(__mpn_mul_1) diff --git a/sysdeps/sparc/sparc32/sparcv8/rem.S b/sysdeps/sparc/sparc32/sparcv8/rem.S deleted file mode 100644 index a2694e699e..0000000000 --- a/sysdeps/sparc/sparc32/sparcv8/rem.S +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Sparc v8 has divide. - */ - -#include - -ENTRY(.rem) - - sra %o0, 31, %o2 - wr %o2, 0, %y - nop - nop - nop - sdivcc %o0, %o1, %o2 - bvs,a 1f - xnor %o2, %g0, %o2 -1: smul %o2, %o1, %o2 - retl - sub %o0, %o2, %o0 - -END(.rem) diff --git a/sysdeps/sparc/sparc32/sparcv8/sdiv.S b/sysdeps/sparc/sparc32/sparcv8/sdiv.S deleted file mode 100644 index bfc4acf2fa..0000000000 --- a/sysdeps/sparc/sparc32/sparcv8/sdiv.S +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Sparc v8 has divide. - */ - -#include - -ENTRY(.div) - - sra %o0, 31, %o2 - wr %o2, 0, %y - nop - nop - nop - sdivcc %o0, %o1, %o0 - bvs,a 1f - xnor %o0, %g0, %o0 -1: retl - nop - -END(.div) diff --git a/sysdeps/sparc/sparc32/sparcv8/submul_1.S b/sysdeps/sparc/sparc32/sparcv8/submul_1.S deleted file mode 100644 index b9cb561ef4..0000000000 --- a/sysdeps/sparc/sparc32/sparcv8/submul_1.S +++ /dev/null @@ -1,57 +0,0 @@ -! SPARC v8 __mpn_submul_1 -- Multiply a limb vector with a limb and -! subtract the result from a second limb vector. - -! Copyright (C) 1992-2017 Free Software Foundation, Inc. - -! This file is part of the GNU MP Library. - -! The GNU MP Library is free software; you can redistribute it and/or modify -! it under the terms of the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, -! see . - - -! INPUT PARAMETERS -! res_ptr o0 -! s1_ptr o1 -! size o2 -! s2_limb o3 - -#include - -ENTRY(__mpn_submul_1) - sub %g0,%o2,%o2 ! negate ... - sll %o2,2,%o2 ! ... and scale size - sub %o1,%o2,%o1 ! o1 is offset s1_ptr - sub %o0,%o2,%g1 ! g1 is offset res_ptr - - mov 0,%o0 ! clear cy_limb - -LOC(loop): - ld [%o1+%o2],%o4 - ld [%g1+%o2],%g2 - umul %o4,%o3,%o5 - rd %y,%g3 - addcc %o5,%o0,%o5 - addx %g3,0,%o0 - subcc %g2,%o5,%g2 - addx %o0,0,%o0 - st %g2,[%g1+%o2] - - addcc %o2,4,%o2 - bne LOC(loop) - nop - - retl - nop - -END(__mpn_submul_1) diff --git a/sysdeps/sparc/sparc32/sparcv8/udiv.S b/sysdeps/sparc/sparc32/sparcv8/udiv.S deleted file mode 100644 index e9cab4e4ef..0000000000 --- a/sysdeps/sparc/sparc32/sparcv8/udiv.S +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Sparc v8 has divide. - */ - -#include - -ENTRY(.udiv) - - wr %g0, 0, %y - nop - nop - retl - udiv %o0, %o1, %o0 - -END(.udiv) -strong_alias (.udiv, __wrap_.udiv) diff --git a/sysdeps/sparc/sparc32/sparcv8/umul.S b/sysdeps/sparc/sparc32/sparcv8/umul.S deleted file mode 100644 index cec454a7dd..0000000000 --- a/sysdeps/sparc/sparc32/sparcv8/umul.S +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Sparc v8 has multiply. - */ - -#include - -ENTRY(.umul) - - umul %o0, %o1, %o0 - retl - rd %y, %o1 - -END(.umul) diff --git a/sysdeps/sparc/sparc32/sparcv8/urem.S b/sysdeps/sparc/sparc32/sparcv8/urem.S deleted file mode 100644 index cc2689d514..0000000000 --- a/sysdeps/sparc/sparc32/sparcv8/urem.S +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Sparc v8 has divide. - */ - -#include - -ENTRY(.urem) - - wr %g0, 0, %y - nop - nop - nop - udiv %o0, %o1, %o2 - umul %o2, %o1, %o2 - retl - sub %o0, %o2, %o0 - -END(.urem) diff --git a/sysdeps/sparc/sparc32/sparcv9/Makefile b/sysdeps/sparc/sparc32/sparcv9/Makefile deleted file mode 100644 index 526673e7b4..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -sysdep-CFLAGS += -mcpu=ultrasparc -Wa,-Av9a -mvis - -ifeq ($(have-as-vis3),yes) -ASFLAGS-.o += -Wa,-Av9d -ASFLAGS-.os += -Wa,-Av9d -ASFLAGS-.op += -Wa,-Av9d -ASFLAGS-.oS += -Wa,-Av9d -else -ASFLAGS-.o += -Wa,-Av9a -ASFLAGS-.os += -Wa,-Av9a -ASFLAGS-.op += -Wa,-Av9a -ASFLAGS-.oS += -Wa,-Av9a -endif - -# nscd uses atomic_spin_nop which in turn requires cpu_relax -ifeq ($(subdir),nscd) -routines += cpu_relax -endif - -ifeq ($(subdir), nptl) -libpthread-routines += cpu_relax -endif diff --git a/sysdeps/sparc/sparc32/sparcv9/addmul_1.S b/sysdeps/sparc/sparc32/sparcv9/addmul_1.S deleted file mode 100644 index 7d3114a846..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/addmul_1.S +++ /dev/null @@ -1,81 +0,0 @@ -! SPARC v9 32-bit __mpn_addmul_1 -- Multiply a limb vector with a limb -! and add the result to a second limb vector. -! -! Copyright (C) 2013-2017 Free Software Foundation, Inc. -! This file is part of the GNU C Library. -! Contributed by David S. Miller -! -! The GNU C Library is free software; you can redistribute it and/or -! modify it under the terms of the GNU Lesser General Public -! License as published by the Free Software Foundation; either -! version 2.1 of the License, or (at your option) any later version. -! -! The GNU C Library is distributed in the hope that it will be useful, -! but WITHOUT ANY WARRANTY; without even the implied warranty of -! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -! Lesser General Public License for more details. -! -! You should have received a copy of the GNU Lesser General Public -! License along with the GNU C Library; if not, see -! . - -#include - -#define res_ptr %i0 -#define s1_ptr %i1 -#define sz_arg %i2 -#define s2l_arg %i3 -#define sz %o4 -#define carry %o5 -#define s2_limb %g1 -#define tmp1 %l0 -#define tmp2 %l1 -#define tmp3 %l2 -#define tmp4 %l3 -#define tmp64_1 %g3 -#define tmp64_2 %o3 - -ENTRY(__mpn_addmul_1) - save %sp, -96, %sp - srl sz_arg, 0, sz - srl s2l_arg, 0, s2_limb - subcc sz, 1, sz - be,pn %icc, .Lfinal_limb - clr carry - -.Lloop: - lduw [s1_ptr + 0x00], tmp1 - lduw [res_ptr + 0x00], tmp3 - lduw [s1_ptr + 0x04], tmp2 - lduw [res_ptr + 0x04], tmp4 - mulx tmp1, s2_limb, tmp64_1 - add s1_ptr, 8, s1_ptr - mulx tmp2, s2_limb, tmp64_2 - sub sz, 2, sz - add res_ptr, 8, res_ptr - add tmp3, tmp64_1, tmp64_1 - add carry, tmp64_1, tmp64_1 - stw tmp64_1, [res_ptr - 0x08] - srlx tmp64_1, 32, carry - add tmp4, tmp64_2, tmp64_2 - add carry, tmp64_2, tmp64_2 - stw tmp64_2, [res_ptr - 0x04] - brgz sz, .Lloop - srlx tmp64_2, 32, carry - - brlz,pt sz, .Lfinish - nop - -.Lfinal_limb: - lduw [s1_ptr + 0x00], tmp1 - lduw [res_ptr + 0x00], tmp3 - mulx tmp1, s2_limb, tmp64_1 - add tmp3, tmp64_1, tmp64_1 - add carry, tmp64_1, tmp64_1 - stw tmp64_1, [res_ptr + 0x00] - srlx tmp64_1, 32, carry - -.Lfinish: - jmpl %i7 + 0x8, %g0 - restore carry, 0, %o0 -END(__mpn_addmul_1) diff --git a/sysdeps/sparc/sparc32/sparcv9/atomic-machine.h b/sysdeps/sparc/sparc32/sparcv9/atomic-machine.h deleted file mode 100644 index 2b36dfc94d..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/atomic-machine.h +++ /dev/null @@ -1,108 +0,0 @@ -/* Atomic operations. sparcv9 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int16_t atomic16_t; -typedef uint16_t uatomic16_t; -typedef int_fast16_t atomic_fast16_t; -typedef uint_fast16_t uatomic_fast16_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#define __HAVE_64B_ATOMICS 0 -#define USE_ATOMIC_COMPILER_BUILTINS 0 - -/* XXX Is this actually correct? */ -#define ATOMIC_EXCHANGE_USES_CAS 0 - - -#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) - -#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) - -#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ -({ \ - __typeof (*(mem)) __acev_tmp; \ - __typeof (mem) __acev_mem = (mem); \ - if (__builtin_constant_p (oldval) && (oldval) == 0) \ - __asm __volatile ("cas [%3], %%g0, %0" \ - : "=r" (__acev_tmp), "=m" (*__acev_mem) \ - : "m" (*__acev_mem), "r" (__acev_mem), \ - "0" (newval) : "memory"); \ - else \ - __asm __volatile ("cas [%4], %2, %0" \ - : "=r" (__acev_tmp), "=m" (*__acev_mem) \ - : "r" (oldval), "m" (*__acev_mem), "r" (__acev_mem), \ - "0" (newval) : "memory"); \ - __acev_tmp; }) - -/* This can be implemented if needed. */ -#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) - -#define atomic_exchange_acq(mem, newvalue) \ - ({ __typeof (*(mem)) __oldval; \ - __typeof (mem) __memp = (mem); \ - __typeof (*(mem)) __value = (newvalue); \ - \ - if (sizeof (*(mem)) == 4) \ - __asm ("swap %0, %1" \ - : "=m" (*__memp), "=r" (__oldval) \ - : "m" (*__memp), "1" (__value) : "memory"); \ - else \ - abort (); \ - __oldval; }) - -#define atomic_compare_and_exchange_val_24_acq(mem, newval, oldval) \ - atomic_compare_and_exchange_val_acq (mem, newval, oldval) - -#define atomic_exchange_24_rel(mem, newval) \ - atomic_exchange_rel (mem, newval) - -#define atomic_full_barrier() \ - __asm __volatile ("membar #LoadLoad | #LoadStore" \ - " | #StoreLoad | #StoreStore" : : : "memory") -#define atomic_read_barrier() \ - __asm __volatile ("membar #LoadLoad | #LoadStore" : : : "memory") -#define atomic_write_barrier() \ - __asm __volatile ("membar #LoadStore | #StoreStore" : : : "memory") - -extern void __cpu_relax (void); -#define atomic_spin_nop() __cpu_relax () diff --git a/sysdeps/sparc/sparc32/sparcv9/backtrace.h b/sysdeps/sparc/sparc32/sparcv9/backtrace.h deleted file mode 100644 index 8d6c756717..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/backtrace.h +++ /dev/null @@ -1,7 +0,0 @@ -/* Private macros for guiding the backtrace implementation, sparc32 v9 - version. */ - -#define backtrace_flush_register_windows() \ - asm volatile ("flushw") - -#define BACKTRACE_STACK_BIAS 0 diff --git a/sysdeps/sparc/sparc32/sparcv9/bzero.c b/sysdeps/sparc/sparc32/sparcv9/bzero.c deleted file mode 100644 index 37f0f6f993..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/bzero.c +++ /dev/null @@ -1 +0,0 @@ -/* bzero is in memset.S */ diff --git a/sysdeps/sparc/sparc32/sparcv9/cpu_relax.S b/sysdeps/sparc/sparc32/sparcv9/cpu_relax.S deleted file mode 100644 index 41a5e72b25..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/cpu_relax.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/dotmul.S b/sysdeps/sparc/sparc32/sparcv9/dotmul.S deleted file mode 100644 index 811cf1e89e..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/dotmul.S +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Sparc v9 has multiply. - */ - -#include - - .text - .align 32 -ENTRY(.mul) - - sra %o0, 0, %o0 - sra %o1, 0, %o1 - mulx %o0, %o1, %o0 - retl - srax %o0, 32, %o1 - -END(.mul) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile deleted file mode 100644 index 322e300097..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -ifeq ($(subdir),math) -ifeq ($(have-as-vis3),yes) -libm-sysdep_routines += m_copysignf-vis3 m_copysign-vis3 s_fabs-vis3 \ - s_fabsf-vis3 s_llrintf-vis3 s_llrint-vis3 \ - s_rintf-vis3 s_rint-vis3 \ - w_sqrt_compat-vis3 w_sqrtf_compat-vis3 \ - s_fmaf-vis3 s_fma-vis3 s_nearbyint-vis3 \ - s_nearbyintf-vis3 s_fdimf-vis3 s_fdim-vis3 -sysdep_routines += s_copysignf-vis3 s_copysign-vis3 - -CFLAGS-s_fdimf-vis3.c += -Wa,-Av9d -mvis3 -CFLAGS-s_fdim-vis3.c += -Wa,-Av9d -mvis3 -endif -endif diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign-vis3.S deleted file mode 100644 index aa8b6169a1..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign-vis3.S +++ /dev/null @@ -1,30 +0,0 @@ -/* copysign function, sparc32 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__copysign_vis3) - sethi %hi(0x80000000), %g1 - and %o2, %g1, %o4 - andn %o0, %g1, %o0 - or %o0, %o4, %o0 - movwtos %o0, %f0 - retl - movwtos %o1, %f1 -END (__copysign_vis3) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S deleted file mode 100644 index cdd98c00f4..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysign.S +++ /dev/null @@ -1,12 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(copysign) - -weak_alias (__copysign, copysign) - -# undef weak_alias -# define weak_alias(a, b) - -#define __copysign __copysign_generic - -#include "../../../fpu/s_copysign.S" diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf-vis3.S deleted file mode 100644 index 0f702b32aa..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf-vis3.S +++ /dev/null @@ -1,29 +0,0 @@ -/* float copysign function, sparc32 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__copysignf_vis3) - sethi %hi(0x80000000), %g1 - and %o1, %g1, %o4 - andn %o0, %g1, %o0 - or %o0, %o4, %o0 - retl - movwtos %o0, %f0 -END (__copysignf_vis3) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf.S deleted file mode 100644 index cd409550de..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_copysignf.S +++ /dev/null @@ -1,12 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(copysignf) - -weak_alias (__copysignf, copysignf) - -# undef weak_alias -# define weak_alias(a, b) - -#define __copysignf __copysignf_generic - -#include "../../../fpu/s_copysignf.S" diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs-vis3.S deleted file mode 100644 index 21078eb00f..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs-vis3.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Float absolute value, sparc32+v9 vis3 version. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__fabs_vis3) - movwtos %o0, %f0 - movwtos %o1, %f1 - retl - fabsd %f0, %f0 -END (__fabs_vis3) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S deleted file mode 100644 index 86c63989a4..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabs.S +++ /dev/null @@ -1,12 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(fabs) - -weak_alias (__fabs, fabs) - -# undef weak_alias -# define weak_alias(a, b) - -#define __fabs __fabs_generic - -#include "../s_fabs.S" diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf-vis3.S deleted file mode 100644 index 82816a185e..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf-vis3.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Float absolute value, sparc32 vis3 version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2006. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__fabsf_vis3) - movwtos %o0, %f0 - retl - fabss %f0, %f0 -END (__fabsf_vis3) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf.S deleted file mode 100644 index 0f2e11e01f..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fabsf.S +++ /dev/null @@ -1,12 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(fabsf) - -weak_alias (__fabsf, fabsf) - -# undef weak_alias -# define weak_alias(a, b) - -#define __fabsf __fabsf_generic - -#include "../../../fpu/s_fabsf.S" diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c deleted file mode 100644 index 8c3666da7a..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Compute positive difference, sparc 32-bit+v9+vis3. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __fdim __fdim_vis3 -#define declare_mgen_alias(t, f) -#define M_LIBM_NEED_COMPAT(f) 0 - -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c deleted file mode 100644 index 417b8690d6..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Compute positive difference, sparc 32-bit. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef HAVE_AS_VIS3_SUPPORT -# include -# include - -extern double __fdim_vis3 (double, double); -extern double __fdim_generic (double, double); - -sparc_libm_ifunc(__fdim, hwcap & HWCAP_SPARC_VIS3 ? __fdim_vis3 : __fdim_generic); -weak_alias (__fdim, fdim) - -# define __fdim __fdim_generic -# define declare_mgen_alias(t, f) -#endif - -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.c deleted file mode 100644 index a8ae7fa3d9..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf-vis3.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Float compute positive difference, sparc 32-bit+v9+vis3. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __fdimf __fdimf_vis3 -#define declare_mgen_alias(t, f) - -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.c deleted file mode 100644 index cf1dc9ec6c..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdimf.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Float compute positive difference, sparc 32-bit. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef HAVE_AS_VIS3_SUPPORT -# include -# include - -extern float __fdimf_vis3 (float, float); -extern float __fdimf_generic (float, float); - -sparc_libm_ifunc(__fdimf, hwcap & HWCAP_SPARC_VIS3 ? __fdimf_vis3 : __fdimf_generic); -weak_alias (__fdimf, fdimf) - -# define __fdimf __fdimf_generic -# define declare_mgen_alias(t, f) - -#endif - -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma-vis3.S deleted file mode 100644 index 2e7d2111a3..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma-vis3.S +++ /dev/null @@ -1,31 +0,0 @@ -/* fma function, sparc32 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__fma_vis3) - movwtos %o0, %f0 - movwtos %o1, %f1 - movwtos %o2, %f2 - movwtos %o3, %f3 - movwtos %o4, %f4 - movwtos %o5, %f5 - retl - fmaddd %f0, %f2, %f4, %f0 -END (__fma_vis3) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c deleted file mode 100644 index 3f2f1622c8..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fma.c +++ /dev/null @@ -1,14 +0,0 @@ -#ifdef HAVE_AS_VIS3_SUPPORT -# include -# include - -extern double __fma_vis3 (double, double, double); -extern double __fma_generic (double, double, double); - -sparc_libm_ifunc(__fma, hwcap & HWCAP_SPARC_FMAF ? __fma_vis3 : __fma_generic); -weak_alias (__fma, fma) - -# define __fma __fma_generic -#endif - -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf-vis3.S deleted file mode 100644 index 0bd443a094..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf-vis3.S +++ /dev/null @@ -1,28 +0,0 @@ -/* fmaf function, sparc32 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__fmaf_vis3) - movwtos %o0, %f1 - movwtos %o1, %f3 - movwtos %o2, %f5 - retl - fmadds %f1, %f3, %f5, %f0 -END (__fmaf_vis3) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf.c b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf.c deleted file mode 100644 index 7a273a3b13..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaf.c +++ /dev/null @@ -1,14 +0,0 @@ -#ifdef HAVE_AS_VIS3_SUPPORT -# include -# include - -extern float __fmaf_vis3 (float, float, float); -extern float __fmaf_generic (float, float, float); - -sparc_libm_ifunc(__fmaf, hwcap & HWCAP_SPARC_FMAF ? __fmaf_vis3 : __fmaf_generic); -weak_alias (__fmaf, fmaf) - -# define __fmaf __fmaf_generic -#endif - -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint-vis3.S deleted file mode 100644 index 7b8616c97f..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint-vis3.S +++ /dev/null @@ -1,58 +0,0 @@ -/* llrint(), sparc32 v9 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__llrint_vis3) - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o0, 32, %o0 - - or %o0, %o1, %o0 - fzero ZERO - - movxtod %o0, %f0 - sllx %o2, 32, %o2 - fnegd ZERO, SIGN_BIT - - movxtod %o2, %f16 - fabsd %f0, %f14 - - fcmpd %fcc3, %f14, %f16 - - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - for %f0, SIGN_BIT, %f0 - fdtox %f0, %f4 - movstouw %f4, %o0 - retl - movstouw %f5, %o1 -END (__llrint_vis3) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint.S deleted file mode 100644 index fd23041404..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrint.S +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include - -SPARC_ASM_VIS3_IFUNC(llrint) - -weak_alias (__llrint, llrint) - -strong_alias (__llrint, __lllrint) -weak_alias (__lllrint, lllrint) - -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llrint, llrintl, GLIBC_2_1) -#endif - -# undef weak_alias -# define weak_alias(a, b) -# undef strong_alias -# define strong_alias(a, b) -# undef compat_symbol -# define compat_symbol(a, b, c, d) - -#define __llrint __llrint_generic - -#include "../s_llrint.S" diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf-vis3.S deleted file mode 100644 index a3801893c5..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf-vis3.S +++ /dev/null @@ -1,54 +0,0 @@ -/* llrintf(), sparc32 v9 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__llrintf_vis3) - movwtos %o0, %f1 - sethi %hi(TWO_TWENTYTHREE), %o2 - fzeros ZERO - - fnegs ZERO, SIGN_BIT - - movwtos %o2, %f16 - fabss %f1, %f14 - - fcmps %fcc3, %f14, %f16 - - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - fors %f0, SIGN_BIT, %f0 - fstox %f0, %f4 - movstouw %f4, %o0 - retl - movstouw %f5, %o1 -END (__llrintf_vis3) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf.S deleted file mode 100644 index 8af5244e7e..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_llrintf.S +++ /dev/null @@ -1,17 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(llrintf) - -weak_alias (__llrintf, llrintf) - -strong_alias (__llrintf, __lllrintf) -weak_alias (__lllrintf, lllrintf) - -# undef weak_alias -# define weak_alias(a, b) -# undef strong_alias -# define strong_alias(a, b) - -#define __llrintf __llrintf_generic - -#include "../s_llrintf.S" diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyint-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyint-vis3.S deleted file mode 100644 index 612446b4ae..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyint-vis3.S +++ /dev/null @@ -1,66 +0,0 @@ -/* Round float to int floating-point values without generating - an inexact exception, sparc32 v9 vis3 version. - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2013. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__nearbyint_vis3) - sllx %o0, 32, %o0 - or %o0, %o1, %o0 - movxtod %o0, %f0 - fcmpd %fcc3, %f0, %f0 /* Check for sNaN */ - st %fsr, [%sp + 88] - sethi %hi(TWO_FIFTYTWO), %o2 - sethi %hi(0xf8003e0), %o5 - ld [%sp + 88], %o4 - or %o5, %lo(0xf8003e0), %o5 - andn %o4, %o5, %o4 - fzero ZERO - st %o4, [%sp + 80] - sllx %o2, 32, %o2 - fnegd ZERO, SIGN_BIT - ld [%sp + 80], %fsr - movxtod %o2, %f16 - fabsd %f0, %f14 - fcmpd %fcc3, %f14, %f16 - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - for %f0, SIGN_BIT, %f0 - retl - ld [%sp + 88], %fsr -END (__nearbyint_vis3) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyint.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyint.S deleted file mode 100644 index 47da9eaafe..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyint.S +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include - -SPARC_ASM_VIS3_IFUNC(nearbyint) - -weak_alias (__nearbyint, nearbyint) - -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __nearbyint, nearbyintl, GLIBC_2_1) -#endif - -# undef weak_alias -# define weak_alias(a, b) -# undef compat_symbol -# define compat_symbol(a, b, c, d) - -#define __nearbyint __nearbyint_generic - -#include "../s_nearbyint.S" diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyintf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyintf-vis3.S deleted file mode 100644 index 2ac91a01c3..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyintf-vis3.S +++ /dev/null @@ -1,62 +0,0 @@ -/* Round float to int floating-point values without generating - an inexact exception, sparc32 v9 vis3 version. - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2013. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__nearbyintf_vis3) - movwtos %o0, %f1 - fcmps %fcc3, %f1, %f1 /* Check for sNaN */ - st %fsr, [%sp + 88] - sethi %hi(TWO_TWENTYTHREE), %o2 - sethi %hi(0xf8003e0), %o5 - ld [%sp + 88], %o4 - fzeros ZERO - or %o5, %lo(0xf8003e0), %o5 - fnegs ZERO, SIGN_BIT - andn %o4, %o5, %o4 - st %o4, [%sp + 80] - ld [%sp + 80], %fsr - movwtos %o2, %f16 - fabss %f1, %f14 - fcmps %fcc3, %f14, %f16 - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - fors %f0, SIGN_BIT, %f0 - retl - ld [%sp + 88], %fsr -END (__nearbyintf_vis3) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyintf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyintf.S deleted file mode 100644 index 95100c1bfc..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_nearbyintf.S +++ /dev/null @@ -1,12 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(nearbyintf) - -weak_alias (__nearbyintf, nearbyintf) - -# undef weak_alias -# define weak_alias(a, b) - -#define __nearbyintf __nearbyintf_generic - -#include "../s_nearbyintf.S" diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint-vis3.S deleted file mode 100644 index 39cb43706a..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint-vis3.S +++ /dev/null @@ -1,55 +0,0 @@ -/* Round float to int floating-point values, sparc32 v9 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__rint_vis3) - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o0, 32, %o0 - - or %o0, %o1, %o0 - fzero ZERO - - movxtod %o0, %f0 - sllx %o2, 32, %o2 - fnegd ZERO, SIGN_BIT - - movxtod %o2, %f16 - fabsd %f0, %f14 - - fcmpd %fcc3, %f14, %f16 - - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - retl - for %f0, SIGN_BIT, %f0 -END (__rint_vis3) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint.S deleted file mode 100644 index de893faebf..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rint.S +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include - -SPARC_ASM_VIS3_IFUNC(rint) - -weak_alias (__rint, rint) - -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __rint, rintl, GLIBC_2_0) -#endif - -# undef weak_alias -# define weak_alias(a, b) -# undef compat_symbol -# define compat_symbol(a, b, c, d) - -#define __rint __rint_generic - -#include "../s_rint.S" diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf-vis3.S deleted file mode 100644 index 26c9d82ede..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf-vis3.S +++ /dev/null @@ -1,51 +0,0 @@ -/* Round float to int floating-point values, sparc32 v9 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__rintf_vis3) - movwtos %o0, %f1 - sethi %hi(TWO_TWENTYTHREE), %o2 - fzeros ZERO - - fnegs ZERO, SIGN_BIT - - movwtos %o2, %f16 - fabss %f1, %f14 - - fcmps %fcc3, %f14, %f16 - - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - retl - fors %f0, SIGN_BIT, %f0 -END (__rintf_vis3) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf.S deleted file mode 100644 index 38fd936086..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_rintf.S +++ /dev/null @@ -1,12 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(rintf) - -weak_alias (__rintf, rintf) - -# undef weak_alias -# define weak_alias(a, b) - -#define __rintf __rintf_generic - -#include "../s_rintf.S" diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt_compat-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt_compat-vis3.S deleted file mode 100644 index 06ff449150..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt_compat-vis3.S +++ /dev/null @@ -1,49 +0,0 @@ -/* sqrt function. sparc32 v9 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__sqrt_vis3) - movwtos %o0, %f0 - fzero %f8 - movwtos %o1, %f1 - fcmpd %f0, %f8 - fbl 1f - nop -8: retl - fsqrtd %f0, %f0 -1: -#ifdef SHARED - SETUP_PIC_REG_LEAF(o5, g1) - sethi %gdop_hix22(_LIB_VERSION), %g1 - xor %g1, %gdop_lox10(_LIB_VERSION), %g1 - ld [%o5 + %g1], %g1, %gdop(_LIB_VERSION) -#else - sethi %hi(_LIB_VERSION), %g1 - or %g1, %lo(_LIB_VERSION), %g1 -#endif - ld [%g1], %g1 - cmp %g1, -1 - be 8b - mov %o0, %o2 - mov %o1, %o3 - mov 26, %o4 - mov %o7, %g1 - call __kernel_standard - mov %g1, %o7 -END (__sqrt_vis3) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt_compat.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt_compat.S deleted file mode 100644 index 1ccac19e29..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrt_compat.S +++ /dev/null @@ -1,12 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(sqrt) - -weak_alias (__sqrt, sqrt) - -# undef weak_alias -# define weak_alias(a, b) - -#define __sqrt __sqrt_generic - -#include "../w_sqrt_compat.S" diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf_compat-vis3.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf_compat-vis3.S deleted file mode 100644 index 5b21523fc0..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf_compat-vis3.S +++ /dev/null @@ -1,47 +0,0 @@ -/* sqrtf function. sparc32 v9 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__sqrtf_vis3) - movwtos %o0, %f0 - fzeros %f8 - fcmps %f0, %f8 - fbl 1f - nop -8: retl - fsqrts %f0, %f0 -1: -#ifdef SHARED - SETUP_PIC_REG_LEAF(o5, g1) - sethi %gdop_hix22(_LIB_VERSION), %g1 - xor %g1, %gdop_lox10(_LIB_VERSION), %g1 - ld [%o5 + %g1], %g1, %gdop(_LIB_VERSION) -#else - sethi %hi(_LIB_VERSION), %g1 - or %g1, %lo(_LIB_VERSION), %g1 -#endif - ld [%g1], %g1 - cmp %g1, -1 - be 8b - mov %o0, %o1 - mov 126, %o2 - mov %o7, %g1 - call __kernel_standard_f - mov %g1, %o7 -END (__sqrtf_vis3) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf_compat.S b/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf_compat.S deleted file mode 100644 index f0e759a2c8..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/w_sqrtf_compat.S +++ /dev/null @@ -1,12 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(sqrtf) - -weak_alias (__sqrtf, sqrtf) - -# undef weak_alias -# define weak_alias(a, b) - -#define __sqrtf __sqrtf_generic - -#include "../w_sqrtf_compat.S" diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_fabs.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_fabs.S deleted file mode 100644 index bf51739b5a..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/s_fabs.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Float absolute value, sparc32+v9 version. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__fabs) - st %o0, [%sp+72] - st %o1, [%sp+76] - ldd [%sp+72], %f0 - retl - fabsd %f0, %f0 -END (__fabs) -weak_alias (__fabs, fabs) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S deleted file mode 100644 index 62c4fc3593..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/s_isnan.S +++ /dev/null @@ -1,40 +0,0 @@ -/* isnan(). sparc32 v9 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ENTRY (__isnan) - sethi %hi(0x7ff00000), %g1 - sllx %o0, 33, %o0 - sllx %g1, 32, %g1 - srlx %o0, 1, %o0 - or %o0, %o1, %o0 - sub %g1, %o0, %o0 - retl - srlx %o0, 63, %o0 -END (__isnan) -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -#if !IS_IN (libm) -# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) -compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0); -compat_symbol (libc, isnan, isnanl, GLIBC_2_0); -# endif -#endif diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_llrint.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_llrint.S deleted file mode 100644 index 62bd9f50c7..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/s_llrint.S +++ /dev/null @@ -1,72 +0,0 @@ -/* llrint(), sparc32 v9 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__llrint) - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o0, 32, %o0 - - or %o0, %o1, %o0 - fzero ZERO - - stx %o0, [%sp + 72] - sllx %o2, 32, %o2 - fnegd ZERO, SIGN_BIT - - ldd [%sp + 72], %f0 - - stx %o2, [%sp + 72] - fabsd %f0, %f14 - - ldd [%sp + 72], %f16 - fcmpd %fcc3, %f14, %f16 - - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - for %f0, SIGN_BIT, %f0 - fdtox %f0, %f4 - std %f4, [%sp + 72] - retl - ldd [%sp + 72], %o0 -END (__llrint) -weak_alias (__llrint, llrint) - -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __llrint, llrintl, GLIBC_2_1) -#endif diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_llrintf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_llrintf.S deleted file mode 100644 index cda284b124..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/s_llrintf.S +++ /dev/null @@ -1,62 +0,0 @@ -/* llrintf(), sparc32 v9 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__llrintf) - st %o0, [%sp + 68] - sethi %hi(TWO_TWENTYTHREE), %o2 - fzeros ZERO - - ld [%sp + 68], %f1 - fnegs ZERO, SIGN_BIT - - st %o2, [%sp + 68] - fabss %f1, %f14 - - ld [%sp + 68], %f16 - fcmps %fcc3, %f14, %f16 - - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - fors %f0, SIGN_BIT, %f0 - fstox %f0, %f4 - std %f4, [%sp + 72] - retl - ldd [%sp + 72], %o0 -END (__llrintf) -weak_alias (__llrintf, llrintf) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_lrintf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_lrintf.S deleted file mode 100644 index a242b755d0..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/s_lrintf.S +++ /dev/null @@ -1,62 +0,0 @@ -/* lrintf(), sparc32 v9 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__lrintf) - st %o0, [%sp + 68] - sethi %hi(TWO_TWENTYTHREE), %o2 - fzeros ZERO - - ld [%sp + 68], %f1 - fnegs ZERO, SIGN_BIT - - st %o2, [%sp + 68] - fabss %f1, %f14 - - ld [%sp + 68], %f16 - fcmps %fcc3, %f14, %f16 - - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - fors %f0, SIGN_BIT, %f0 - fstoi %f0, %f3 - st %f3, [%sp + 68] - retl - ld [%sp + 68], %o0 -END (__lrintf) -weak_alias (__lrintf, lrintf) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_nearbyint.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_nearbyint.S deleted file mode 100644 index c26d2e3e44..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/s_nearbyint.S +++ /dev/null @@ -1,73 +0,0 @@ -/* Round float to int floating-point values without generating - an inexact exception, sparc32 v9 version. - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2013. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__nearbyint) - sllx %o0, 32, %o0 - or %o0, %o1, %o0 - stx %o0, [%sp + 72] - ldd [%sp + 72], %f0 - fcmpd %fcc3, %f0, %f0 /* Check for sNaN */ - st %fsr, [%sp + 88] - sethi %hi(TWO_FIFTYTWO), %o2 - sethi %hi(0xf8003e0), %o5 - ld [%sp + 88], %o4 - or %o5, %lo(0xf8003e0), %o5 - andn %o4, %o5, %o4 - fzero ZERO - st %o4, [%sp + 80] - sllx %o2, 32, %o2 - fnegd ZERO, SIGN_BIT - ld [%sp + 80], %fsr - stx %o2, [%sp + 72] - fabsd %f0, %f14 - ldd [%sp + 72], %f16 - fcmpd %fcc3, %f14, %f16 - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - for %f0, SIGN_BIT, %f0 - retl - ld [%sp + 88], %fsr -END (__nearbyint) -weak_alias (__nearbyint, nearbyint) - -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __nearbyint, nearbyintl, GLIBC_2_1) -#endif diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_nearbyintf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_nearbyintf.S deleted file mode 100644 index 1e65c79ee6..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/s_nearbyintf.S +++ /dev/null @@ -1,65 +0,0 @@ -/* Round float to int floating-point values without generating - an inexact exception, sparc32 v9 version. - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2013. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__nearbyintf) - st %o0, [%sp + 68] - ld [%sp + 68], %f1 - fcmps %fcc3, %f1, %f1 /* Check for sNaN */ - st %fsr, [%sp + 88] - sethi %hi(TWO_TWENTYTHREE), %o2 - sethi %hi(0xf8003e0), %o5 - ld [%sp + 88], %o4 - fzeros ZERO - or %o5, %lo(0xf8003e0), %o5 - fnegs ZERO, SIGN_BIT - andn %o4, %o5, %o4 - st %o4, [%sp + 80] - ld [%sp + 80], %fsr - st %o2, [%sp + 68] - fabss %f1, %f14 - ld [%sp + 68], %f16 - fcmps %fcc3, %f14, %f16 - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - fors %f0, SIGN_BIT, %f0 - retl - ld [%sp + 88], %fsr -END (__nearbyintf) -weak_alias (__nearbyintf, nearbyintf) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_rint.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_rint.S deleted file mode 100644 index f3560ccc79..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/s_rint.S +++ /dev/null @@ -1,69 +0,0 @@ -/* Round float to int floating-point values, sparc32 v9 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__rint) - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o0, 32, %o0 - - or %o0, %o1, %o0 - fzero ZERO - - stx %o0, [%sp + 72] - sllx %o2, 32, %o2 - fnegd ZERO, SIGN_BIT - - ldd [%sp + 72], %f0 - - stx %o2, [%sp + 72] - fabsd %f0, %f14 - - ldd [%sp + 72], %f16 - fcmpd %fcc3, %f14, %f16 - - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - retl - for %f0, SIGN_BIT, %f0 -END (__rint) -weak_alias (__rint, rint) - -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -compat_symbol (libm, __rint, rintl, GLIBC_2_0) -#endif diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/s_rintf.S b/sysdeps/sparc/sparc32/sparcv9/fpu/s_rintf.S deleted file mode 100644 index dfdae9dcdd..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/s_rintf.S +++ /dev/null @@ -1,59 +0,0 @@ -/* Round float to int floating-point values, sparc32 v9 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__rintf) - st %o0, [%sp + 68] - sethi %hi(TWO_TWENTYTHREE), %o2 - fzeros ZERO - - ld [%sp + 68], %f1 - fnegs ZERO, SIGN_BIT - - st %o2, [%sp + 68] - fabss %f1, %f14 - - ld [%sp + 68], %f16 - fcmps %fcc3, %f14, %f16 - - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - retl - fors %f0, SIGN_BIT, %f0 -END (__rintf) -weak_alias (__rintf, rintf) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt_compat.S b/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt_compat.S deleted file mode 100644 index 4415a82024..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrt_compat.S +++ /dev/null @@ -1,51 +0,0 @@ -/* sqrt function. sparc32 v9 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__sqrt) - std %o0, [%sp + 80] - fzero %f8 - ldd [%sp + 80], %f0 - fcmpd %f0, %f8 - fbl 1f - nop -8: retl - fsqrtd %f0, %f0 -1: -#ifdef SHARED - SETUP_PIC_REG_LEAF(o5, g1) - sethi %gdop_hix22(_LIB_VERSION), %g1 - xor %g1, %gdop_lox10(_LIB_VERSION), %g1 - ld [%o5 + %g1], %g1, %gdop(_LIB_VERSION) -#else - sethi %hi(_LIB_VERSION), %g1 - or %g1, %lo(_LIB_VERSION), %g1 -#endif - ld [%g1], %g1 - cmp %g1, -1 - be 8b - mov %o0, %o2 - mov %o1, %o3 - mov 26, %o4 - mov %o7, %g1 - call __kernel_standard - mov %g1, %o7 -END (__sqrt) - -weak_alias (__sqrt, sqrt) diff --git a/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf_compat.S b/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf_compat.S deleted file mode 100644 index 1c3c97f8e9..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/fpu/w_sqrtf_compat.S +++ /dev/null @@ -1,50 +0,0 @@ -/* sqrtf function. sparc32 v9 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__sqrtf) - st %o0, [%sp + 72] - fzeros %f8 - ld [%sp + 72], %f0 - fcmps %f0, %f8 - fbl 1f - nop -8: retl - fsqrts %f0, %f0 -1: -#ifdef SHARED - SETUP_PIC_REG_LEAF(o5, g1) - sethi %gdop_hix22(_LIB_VERSION), %g1 - xor %g1, %gdop_lox10(_LIB_VERSION), %g1 - ld [%o5 + %g1], %g1, %gdop(_LIB_VERSION) -#else - sethi %hi(_LIB_VERSION), %g1 - or %g1, %lo(_LIB_VERSION), %g1 -#endif - ld [%g1], %g1 - cmp %g1, -1 - be 8b - mov %o0, %o1 - mov 126, %o2 - mov %o7, %g1 - call __kernel_standard_f - mov %g1, %o7 -END (__sqrtf) - -weak_alias (__sqrtf, sqrtf) diff --git a/sysdeps/sparc/sparc32/sparcv9/hp-timing.h b/sysdeps/sparc/sparc32/sparcv9/hp-timing.h deleted file mode 100644 index 2dfa2d2265..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/hp-timing.h +++ /dev/null @@ -1,36 +0,0 @@ -/* High precision, low overhead timing functions. sparcv9 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _HP_TIMING_H -#define _HP_TIMING_H 1 - -#define HP_TIMING_AVAIL (1) -#define HP_SMALL_TIMING_AVAIL (1) -#define HP_TIMING_INLINE (1) - -typedef unsigned long long int hp_timing_t; - -#define HP_TIMING_NOW(Var) \ - __asm__ __volatile__ ("rd %%tick, %L0\n\t" \ - "srlx %L0, 32, %H0" \ - : "=r" (Var)) - -#include - -#endif /* hp-timing.h */ diff --git a/sysdeps/sparc/sparc32/sparcv9/memchr.S b/sysdeps/sparc/sparc32/sparcv9/memchr.S deleted file mode 100644 index c5dfbef184..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/memchr.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/memcmp.S b/sysdeps/sparc/sparc32/sparcv9/memcmp.S deleted file mode 100644 index 44878f4486..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/memcmp.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/memcpy.S b/sysdeps/sparc/sparc32/sparcv9/memcpy.S deleted file mode 100644 index 675ec496b9..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/memcpy.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/memset.S b/sysdeps/sparc/sparc32/sparcv9/memset.S deleted file mode 100644 index ac67b7ab7c..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/memset.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/mul_1.S b/sysdeps/sparc/sparc32/sparcv9/mul_1.S deleted file mode 100644 index ae4fc17325..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/mul_1.S +++ /dev/null @@ -1,70 +0,0 @@ -! SPARC v9 32-bit __mpn_mul_1 -- Multiply a limb vector with a single -! limb and store the product in a second limb vector. -! -! Copyright (C) 2013-2017 Free Software Foundation, Inc. -! This file is part of the GNU C Library. -! Contributed by David S. Miller -! -! The GNU C Library is free software; you can redistribute it and/or -! modify it under the terms of the GNU Lesser General Public -! License as published by the Free Software Foundation; either -! version 2.1 of the License, or (at your option) any later version. -! -! The GNU C Library is distributed in the hope that it will be useful, -! but WITHOUT ANY WARRANTY; without even the implied warranty of -! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -! Lesser General Public License for more details. -! -! You should have received a copy of the GNU Lesser General Public -! License along with the GNU C Library; if not, see -! . - -#include - -#define res_ptr %o0 -#define s1_ptr %o1 -#define sz %o2 -#define s2_limb %o3 -#define carry %o5 -#define tmp1 %g1 -#define tmp2 %g2 -#define tmp3 %g3 -#define tmp4 %o4 - -ENTRY(__mpn_mul_1) - srl sz, 0, sz - srl s2_limb, 0, s2_limb - subcc sz, 1, sz - be,pn %icc, .Lfinal_limb - clr carry - -.Lloop: - lduw [s1_ptr + 0x00], tmp1 - lduw [s1_ptr + 0x04], tmp2 - mulx tmp1, s2_limb, tmp3 - add s1_ptr, 8, s1_ptr - mulx tmp2, s2_limb, tmp4 - sub sz, 2, sz - add res_ptr, 8, res_ptr - add carry, tmp3, tmp3 - stw tmp3, [res_ptr - 0x08] - srlx tmp3, 32, carry - add carry, tmp4, tmp4 - stw tmp4, [res_ptr - 0x04] - brgz sz, .Lloop - srlx tmp4, 32, carry - - brlz,pt sz, .Lfinish - nop - -.Lfinal_limb: - lduw [s1_ptr + 0x00], tmp1 - mulx tmp1, s2_limb, tmp3 - add carry, tmp3, tmp3 - stw tmp3, [res_ptr + 0x00] - srlx tmp3, 32, carry - -.Lfinish: - retl - mov carry, %o0 -END(__mpn_mul_1) diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile b/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile deleted file mode 100644 index 4ad7aff914..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -ifeq ($(subdir),crypt) -libcrypt-sysdep_routines += md5-crop sha256-crop sha512-crop -endif - -ifeq ($(subdir),locale) -localedef-aux += md5-crop -endif - -ifeq ($(subdir),string) -sysdep_routines += memcpy-ultra3 memcpy-niagara1 memcpy-niagara2 \ - memset-niagara1 memcpy-niagara4 memset-niagara4 -endif diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c deleted file mode 100644 index a04aa0f674..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c deleted file mode 100644 index 3765cabae7..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-block.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S deleted file mode 100644 index 11a3a81482..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/md5-crop.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara1.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara1.S deleted file mode 100644 index 10aef85fe1..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara1.S +++ /dev/null @@ -1,2 +0,0 @@ -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara2.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara2.S deleted file mode 100644 index 6b1bf6ea70..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara2.S +++ /dev/null @@ -1,2 +0,0 @@ -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara4.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara4.S deleted file mode 100644 index 75ef9c017e..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara4.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-ultra3.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-ultra3.S deleted file mode 100644 index 77adf151aa..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-ultra3.S +++ /dev/null @@ -1,2 +0,0 @@ -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy.S deleted file mode 100644 index 14df91e005..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memset-niagara1.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memset-niagara1.S deleted file mode 100644 index b432420876..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/memset-niagara1.S +++ /dev/null @@ -1,2 +0,0 @@ -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memset-niagara4.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memset-niagara4.S deleted file mode 100644 index 6545019c46..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/memset-niagara4.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memset.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memset.S deleted file mode 100644 index 8f8264337d..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/memset.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c deleted file mode 100644 index 304ad4ef18..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memset.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memset.c deleted file mode 100644 index f24ae880a9..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memset.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c deleted file mode 100644 index 600c602b61..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-block.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S deleted file mode 100644 index 4895405853..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha256-crop.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c deleted file mode 100644 index 7c7c54e5a6..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-block.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S deleted file mode 100644 index cc74a99d3c..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/sha512-crop.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/pthread_barrier_wait.c b/sysdeps/sparc/sparc32/sparcv9/pthread_barrier_wait.c deleted file mode 100644 index 246c8d49de..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/pthread_barrier_wait.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/pthread_spin_init.c b/sysdeps/sparc/sparc32/sparcv9/pthread_spin_init.c deleted file mode 100644 index 1eede86abd..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/pthread_spin_init.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/pthread_spin_lock.S b/sysdeps/sparc/sparc32/sparcv9/pthread_spin_lock.S deleted file mode 100644 index ce53dfa396..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/pthread_spin_lock.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/pthread_spin_trylock.S b/sysdeps/sparc/sparc32/sparcv9/pthread_spin_trylock.S deleted file mode 100644 index ffd632da0a..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/pthread_spin_trylock.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/pthread_spin_unlock.S b/sysdeps/sparc/sparc32/sparcv9/pthread_spin_unlock.S deleted file mode 100644 index 983c80377a..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/pthread_spin_unlock.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/rawmemchr.S b/sysdeps/sparc/sparc32/sparcv9/rawmemchr.S deleted file mode 100644 index 05c269ecc8..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/rawmemchr.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/rem.S b/sysdeps/sparc/sparc32/sparcv9/rem.S deleted file mode 100644 index 5385bd8305..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/rem.S +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Sparc v9 has divide. - * As divx takes 68 cycles and sdivcc only 36, - * we use sdivcc eventhough it is deprecated. - */ - -#include - - .text - .align 32 -ENTRY(.rem) - - sra %o0, 31, %o2 - wr %o2, 0, %y - sdivcc %o0, %o1, %o2 - xnor %o2, %g0, %o3 - movvs %icc, %o3, %o2 - smul %o2, %o1, %o2 - retl - sub %o0, %o2, %o0 - -END(.rem) diff --git a/sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c b/sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c deleted file mode 100644 index 6f8386bc76..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/rtld-memset.c b/sysdeps/sparc/sparc32/sparcv9/rtld-memset.c deleted file mode 100644 index 49b29f5733..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/rtld-memset.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/sdiv.S b/sysdeps/sparc/sparc32/sparcv9/sdiv.S deleted file mode 100644 index d765514cea..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/sdiv.S +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Sparc v9 has divide. - * As divx takes 68 cycles and sdivcc only 36, - * we use sdivcc eventhough it is deprecated. - */ - -#include - - .text - .align 32 -ENTRY(.div) - - sra %o0, 31, %o2 - wr %o2, 0, %y - sdivcc %o0, %o1, %o0 - xnor %o0, %g0, %o2 - retl - movvs %icc, %o2, %o0 - -END(.div) diff --git a/sysdeps/sparc/sparc32/sparcv9/sem_post.c b/sysdeps/sparc/sparc32/sparcv9/sem_post.c deleted file mode 100644 index 6a2813caee..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/sem_post.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/sem_waitcommon.c b/sysdeps/sparc/sparc32/sparcv9/sem_waitcommon.c deleted file mode 100644 index d4a139572b..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/sem_waitcommon.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/stpcpy.S b/sysdeps/sparc/sparc32/sparcv9/stpcpy.S deleted file mode 100644 index 440ad7e215..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/stpcpy.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/stpncpy.S b/sysdeps/sparc/sparc32/sparcv9/stpncpy.S deleted file mode 100644 index 124136a0b2..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/stpncpy.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/strcat.S b/sysdeps/sparc/sparc32/sparcv9/strcat.S deleted file mode 100644 index 7a22235703..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/strcat.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/strchr.S b/sysdeps/sparc/sparc32/sparcv9/strchr.S deleted file mode 100644 index ddd32120d4..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/strchr.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/strcmp.S b/sysdeps/sparc/sparc32/sparcv9/strcmp.S deleted file mode 100644 index 5330f4359b..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/strcmp.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/strcpy.S b/sysdeps/sparc/sparc32/sparcv9/strcpy.S deleted file mode 100644 index 0b35c9be08..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/strcpy.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/strcspn.S b/sysdeps/sparc/sparc32/sparcv9/strcspn.S deleted file mode 100644 index f9d6beabe4..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/strcspn.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/strlen.S b/sysdeps/sparc/sparc32/sparcv9/strlen.S deleted file mode 100644 index 28a216c076..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/strlen.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/strncmp.S b/sysdeps/sparc/sparc32/sparcv9/strncmp.S deleted file mode 100644 index addd89e05b..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/strncmp.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/strncpy.S b/sysdeps/sparc/sparc32/sparcv9/strncpy.S deleted file mode 100644 index 688f9dfd65..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/strncpy.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/strpbrk.S b/sysdeps/sparc/sparc32/sparcv9/strpbrk.S deleted file mode 100644 index 62294c0af4..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/strpbrk.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/strrchr.c b/sysdeps/sparc/sparc32/sparcv9/strrchr.c deleted file mode 100644 index ec608d6ab3..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/strrchr.c +++ /dev/null @@ -1 +0,0 @@ -/* strrchr is in strchr.S */ diff --git a/sysdeps/sparc/sparc32/sparcv9/strspn.S b/sysdeps/sparc/sparc32/sparcv9/strspn.S deleted file mode 100644 index 291e798085..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/strspn.S +++ /dev/null @@ -1,4 +0,0 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 -#define XCC icc -#include diff --git a/sysdeps/sparc/sparc32/sparcv9/submul_1.S b/sysdeps/sparc/sparc32/sparcv9/submul_1.S deleted file mode 100644 index 52b7d35aa4..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/submul_1.S +++ /dev/null @@ -1,82 +0,0 @@ -! SPARC v9 32-bit __mpn_submul_1 -- Multiply a limb vector with a limb -! and subtract the result from a second limb vector. -! -! Copyright (C) 2013-2017 Free Software Foundation, Inc. -! This file is part of the GNU C Library. -! Contributed by David S. Miller -! -! The GNU C Library is free software; you can redistribute it and/or -! modify it under the terms of the GNU Lesser General Public -! License as published by the Free Software Foundation; either -! version 2.1 of the License, or (at your option) any later version. -! -! The GNU C Library is distributed in the hope that it will be useful, -! but WITHOUT ANY WARRANTY; without even the implied warranty of -! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -! Lesser General Public License for more details. -! -! You should have received a copy of the GNU Lesser General Public -! License along with the GNU C Library; if not, see -! . - -#include - -#define res_ptr %i0 -#define s1_ptr %i1 -#define sz_arg %i2 -#define s2l_arg %i3 -#define sz %o4 -#define carry %o5 -#define s2_limb %g1 -#define tmp1 %l0 -#define tmp2 %l1 -#define tmp3 %l2 -#define tmp4 %l3 -#define tmp64_1 %g3 -#define tmp64_2 %o3 - -ENTRY(__mpn_submul_1) - save %sp, -96, %sp - srl sz_arg, 0, sz - srl s2l_arg, 0, s2_limb - subcc sz, 1, sz - be,pn %icc, .Lfinal_limb - subcc %g0, 0, carry - -.Lloop: - lduw [s1_ptr + 0x00], tmp1 - lduw [res_ptr + 0x00], tmp3 - lduw [s1_ptr + 0x04], tmp2 - lduw [res_ptr + 0x04], tmp4 - mulx tmp1, s2_limb, tmp64_1 - add s1_ptr, 8, s1_ptr - mulx tmp2, s2_limb, tmp64_2 - sub sz, 2, sz - add res_ptr, 8, res_ptr - addx carry, tmp64_1, tmp64_1 - srlx tmp64_1, 32, carry - subcc tmp3, tmp64_1, tmp64_1 - stw tmp64_1, [res_ptr - 0x08] - addx carry, tmp64_2, tmp64_2 - srlx tmp64_2, 32, carry - subcc tmp4, tmp64_2, tmp64_2 - brgz sz, .Lloop - stw tmp64_2, [res_ptr - 0x04] - - brlz,pt sz, .Lfinish - nop - -.Lfinal_limb: - lduw [s1_ptr + 0x00], tmp1 - lduw [res_ptr + 0x00], tmp3 - mulx tmp1, s2_limb, tmp64_1 - addx carry, tmp64_1, tmp64_1 - srlx tmp64_1, 32, carry - subcc tmp3, tmp64_1, tmp64_1 - stw tmp64_1, [res_ptr + 0x00] - -.Lfinish: - addx carry, 0, carry - jmpl %i7 + 0x8, %g0 - restore carry, 0, %o0 -END(__mpn_submul_1) diff --git a/sysdeps/sparc/sparc32/sparcv9/udiv.S b/sysdeps/sparc/sparc32/sparcv9/udiv.S deleted file mode 100644 index 368f85ede2..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/udiv.S +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Sparc v9 has divide. - * As divx takes 68 cycles and udiv only 37, - * we use udiv eventhough it is deprecated. - */ - -#include - - .text - .align 32 -ENTRY(.udiv) - - wr %g0, 0, %y - retl - udiv %o0, %o1, %o0 - -END(.udiv) -strong_alias (.udiv, __wrap_.udiv) diff --git a/sysdeps/sparc/sparc32/sparcv9/umul.S b/sysdeps/sparc/sparc32/sparcv9/umul.S deleted file mode 100644 index 608b72aca1..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/umul.S +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Sparc v9 has multiply. - */ - -#include - - .text - .align 32 -ENTRY(.umul) - - srl %o0, 0, %o0 - srl %o1, 0, %o1 - mulx %o0, %o1, %o0 - retl - srlx %o0, 32, %o1 - -END(.umul) diff --git a/sysdeps/sparc/sparc32/sparcv9/urem.S b/sysdeps/sparc/sparc32/sparcv9/urem.S deleted file mode 100644 index cab16c9193..0000000000 --- a/sysdeps/sparc/sparc32/sparcv9/urem.S +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Sparc v9 has divide. - * As divx takes 68 cycles and udiv only 37, - * we use udiv eventhough it is deprecated. - */ - -#include - - .text - .align 32 -ENTRY(.urem) - - wr %g0, 0, %y - udiv %o0, %o1, %o2 - umul %o2, %o1, %o2 - retl - sub %o0, %o2, %o0 - -END(.urem) diff --git a/sysdeps/sparc/sparc32/stackguard-macros.h b/sysdeps/sparc/sparc32/stackguard-macros.h deleted file mode 100644 index 1eef0f19f0..0000000000 --- a/sysdeps/sparc/sparc32/stackguard-macros.h +++ /dev/null @@ -1,7 +0,0 @@ -#include - -#define STACK_CHK_GUARD \ - ({ uintptr_t x; asm ("ld [%%g7+0x14], %0" : "=r" (x)); x; }) - -#define POINTER_CHK_GUARD \ - ({ uintptr_t x; asm ("ld [%%g7+0x18], %0" : "=r" (x)); x; }) diff --git a/sysdeps/sparc/sparc32/start.S b/sysdeps/sparc/sparc32/start.S deleted file mode 100644 index a06568d0e9..0000000000 --- a/sysdeps/sparc/sparc32/start.S +++ /dev/null @@ -1,99 +0,0 @@ -/* Startup code for elf32-sparc - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - - .section ".text" - .align 4 - .global _start - .type _start,#function -_start: -#ifdef SHARED - SETUP_PIC_REG(l7) -#endif - - /* Terminate the stack frame, and reserve space for functions to - drop their arguments. */ - mov %g0, %fp - sub %sp, 6*4, %sp - - /* Extract the arguments and environment as encoded on the stack. The - argument info starts after one register window (16 words) past the SP. */ - ld [%sp+22*4], %o1 - add %sp, 23*4, %o2 - - /* Load the addresses of the user entry points. */ -#ifndef SHARED - sethi %hi(main), %o0 - sethi %hi(__libc_csu_init), %o3 - sethi %hi(__libc_csu_fini), %o4 - or %o0, %lo(main), %o0 - or %o3, %lo(__libc_csu_init), %o3 - or %o4, %lo(__libc_csu_fini), %o4 -#else - sethi %gdop_hix22(main), %o0 - sethi %gdop_hix22(__libc_csu_init), %o3 - sethi %gdop_hix22(__libc_csu_fini), %o4 - xor %o0, %gdop_lox10(main), %o0 - xor %o3, %gdop_lox10(__libc_csu_init), %o3 - xor %o4, %gdop_lox10(__libc_csu_fini), %o4 - ld [%l7 + %o0], %o0, %gdop(main) - ld [%l7 + %o3], %o3, %gdop(__libc_csu_init) - ld [%l7 + %o4], %o4, %gdop(__libc_csu_fini) -#endif - - /* When starting a binary via the dynamic linker, %g1 contains the - address of the shared library termination function, which will be - registered with atexit(). If we are statically linked, this will - be NULL. */ - mov %g1, %o5 - - /* Let libc do the rest of the initialization, and call main. */ - call __libc_start_main - nop - - /* Die very horribly if exit returns. */ - unimp - - .size _start, .-_start - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 -weak_alias (__data_start, data_start) diff --git a/sysdeps/sparc/sparc32/stpcpy.S b/sysdeps/sparc/sparc32/stpcpy.S deleted file mode 100644 index 2cbd69c3b4..0000000000 --- a/sysdeps/sparc/sparc32/stpcpy.S +++ /dev/null @@ -1,166 +0,0 @@ -/* Copy SRC to DEST returning the address of the terminating '\0' in DEST. - For SPARC v7. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* Normally, this uses ((xword - 0x01010101) & 0x80808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x01010101) & (~xword) & 0x80808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 4 - -ENTRY(__stpcpy) - andcc %o1, 3, %g0 - be 20f - sethi %hi(0x80808080), %o4 - - ldub [%o1], %o5 - stb %o5, [%o0] - cmp %o5, 0 - add %o0, 1, %o0 - be 1f - add %o1, 1, %o1 - andcc %o1, 3, %g0 - be 4f - or %o4, %lo(0x80808080), %o3 - ldub [%o1], %o5 - stb %o5, [%o0] - cmp %o5, 0 - add %o0, 1, %o0 - be 1f - add %o1, 1, %o1 - andcc %o1, 3, %g0 - be 5f - sethi %hi(0x01010101), %o4 - ldub [%o1], %o5 - stb %o5, [%o0] - cmp %o5, 0 - add %o0, 1, %o0 - be 1f - add %o1, 1, %o1 - b 6f - or %o4, %lo(0x01010101), %o2 -1: retl - add %o0, -1, %o0 - -20: or %o4, %lo(0x80808080), %o3 -4: sethi %hi(0x01010101), %o4 -5: or %o4, %lo(0x01010101), %o2 -6: andcc %o0, 3, %g0 - bne 16f - sub %g0, 4, %g1 - -11: add %g1, 4, %g1 - ld [%o1 + %g1], %o5 - sub %o5, %o2, %o4 -#ifdef EIGHTBIT_NOT_RARE - andn %o4, %o5, %o4 -#endif - andcc %o4, %o3, %g0 - be,a 11b - st %o5, [%o0 + %g1] - - /* Check every byte. */ - srl %o5, 24, %g5 - andcc %g5, 0xff, %g0 - be 14f - srl %o5, 16, %g5 - andcc %g5, 0xff, %g0 - be 13f - srl %o5, 8, %g5 - andcc %g5, 0xff, %g0 - be 12f - andcc %o5, 0xff, %g0 - bne 11b - st %o5, [%o0 + %g1] - add %o0, %g1, %o0 - retl - add %o0, 3, %o0 -12: srl %o5, 16, %o5 - sth %o5, [%o0 + %g1] - add %g1, 2, %g1 - stb %g0, [%o0 + %g1] - retl - add %o0, %g1, %o0 -13: srl %o5, 16, %o5 - sth %o5, [%o0 + %g1] - add %g1, 1, %g1 - retl - add %o0, %g1, %o0 -14: stb %g0, [%o0 + %g1] - retl - add %o0, %g1, %o0 - -15: srl %o5, 24, %o4 - srl %o5, 16, %g1 - stb %o4, [%o0] - srl %o5, 8, %g4 - stb %g1, [%o0 + 1] - stb %g4, [%o0 + 2] - stb %o5, [%o0 + 3] - add %o0, 4, %o0 -16: ld [%o1], %o5 - sub %o5, %o2, %o4 - andcc %o4, %o3, %g0 - be 15b - add %o1, 4, %o1 - - /* Check every byte. */ - srl %o5, 24, %g5 - andcc %g5, 0xff, %g4 - be 19f - stb %g4, [%o0] - srl %o5, 16, %g5 - andcc %g5, 0xff, %g4 - be 18f - stb %g4, [%o0 + 1] - srl %o5, 8, %g5 - andcc %g5, 0xff, %g4 - be 17f - stb %g4, [%o0 + 2] - andcc %o5, 0xff, %g4 - stb %g4, [%o0 + 3] - bne 16b - add %o0, 4, %o0 - retl - sub %o0, 1, %o0 -17: retl - add %o0, 2, %o0 -18: retl - add %o0, 1, %o0 -19: retl - nop -END(__stpcpy) - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/sparc/sparc32/strcat.S b/sysdeps/sparc/sparc32/strcat.S deleted file mode 100644 index cfa2bbd5b7..0000000000 --- a/sysdeps/sparc/sparc32/strcat.S +++ /dev/null @@ -1,352 +0,0 @@ -/* strcat (dest, src) -- Append SRC on the end of DEST. - For SPARC v7. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* Normally, this uses ((xword - 0x01010101) & 0x80808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x01010101) & (~xword) & 0x80808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 4 - -ENTRY(strcat) - mov %o0, %g2 - andcc %o0, 3, %g0 - be 30f - sethi %hi(0x80808080), %o4 - - ldub [%o0], %o5 - cmp %o5, 0 - be 1f - add %o0, 1, %o0 - andcc %o0, 3, %g0 - be 7f - or %o4, %lo(0x80808080), %o3 - ldub [%o0], %o5 - cmp %o5, 0 - be 2f - add %o0, 1, %o0 - andcc %o0, 3, %g0 - be 8f - sethi %hi(0x01010101), %o4 - ldub [%o0], %o5 - cmp %o5, 0 - be 3f - add %o0, 1, %o0 - b 9f - or %o4, %lo(0x01010101), %o2 -1: or %o4, %lo(0x80808080), %o3 -2: sethi %hi(0x01010101), %o4 -3: or %o4, %lo(0x01010101), %o2 - b 3f - sub %o0, 1, %o0 - -30: or %o4, %lo(0x80808080), %o3 -7: sethi %hi(0x01010101), %o4 -8: or %o4, %lo(0x01010101), %o2 -9: ld [%o0], %o5 -7: sub %o5, %o2, %o4 -#ifdef EIGHTBIT_NOT_RARE - andn %o4, %o5, %o4 -#endif - andcc %o4, %o3, %g0 - be 9b - add %o0, 4, %o0 - - srl %o5, 24, %g5 - andcc %g5, 0xff, %g0 - be 3f - add %o0, -4, %o0 - srl %o5, 16, %g5 - andcc %g5, 0xff, %g0 - be 3f - add %o0, 1, %o0 - srl %o5, 8, %g5 - andcc %g5, 0xff, %g0 - be 3f - add %o0, 1, %o0 - andcc %o5, 0xff, %g0 - add %o0, 2, %o0 - bne,a 7b - ld [%o0], %o5 - sub %o0, 1, %o0 -3: andcc %o1, 3, %o4 - be 4f - nop - - cmp %o4, 2 - be 11f - cmp %o4, 3 - ldub [%o1], %o5 - add %o1, 1, %o1 - stb %o5, [%o0] - be 13f - cmp %o5, 0 - be 0f - add %o0, 1, %o0 -11: lduh [%o1], %o5 - add %o1, 2, %o1 - srl %o5, 8, %o4 - cmp %o4, 0 - stb %o4, [%o0] - bne,a 12f - stb %o5, [%o0 + 1] - retl - mov %g2, %o0 -12: andcc %o5, 0xff, %o5 - bne 4f - add %o0, 2, %o0 - retl - mov %g2, %o0 -13: bne 4f - add %o0, 1, %o0 - retl - mov %g2, %o0 - -4: andcc %o0, 3, %g3 - bne 12f -1: ld [%o1], %o5 - add %o1, 4, %o1 - sub %o5, %o2, %o4 -#ifdef EIGHTBIT_NOT_RARE - andn %o4, %o5, %o4 -#endif - add %o0, 4, %o0 - andcc %o4, %o3, %g0 - be,a 1b - st %o5, [%o0 - 4] - - srl %o5, 24, %g5 - andcc %g5, 0xff, %g0 - be 1f - srl %o5, 16, %g5 - andcc %g5, 0xff, %g0 - be 2f - srl %o5, 8, %g5 - andcc %g5, 0xff, %g0 - be 3f - andcc %o5, 0xff, %g0 - bne 1b - st %o5, [%o0 - 4] - retl - mov %g2, %o0 -3: srl %o5, 16, %o5 - sth %o5, [%o0 - 4] - stb %g0, [%o0 - 2] - retl - mov %g2, %o0 -2: srl %o5, 16, %o5 - sth %o5, [%o0 - 4] - retl - mov %g2, %o0 -1: stb %g0, [%o0 - 4] - retl - mov %g2, %o0 - -12: add %o1, 4, %o1 - sub %o5, %o2, %o4 - cmp %g3, 2 - be 2f - cmp %g3, 3 - be 3f - andcc %o4, %o3, %g0 - bne 5f - srl %o5, 24, %g5 - stb %g5, [%o0] - sub %o0, 1, %o0 - srl %o5, 8, %g5 - sth %g5, [%o0 + 2] -1: add %o0, 4, %o0 -4: sll %o5, 24, %g6 - ld [%o1], %o5 - add %o1, 4, %o1 - srl %o5, 8, %g5 - sub %o5, %o2, %o4 -#ifdef EIGHTBIT_NOT_RARE - andn %o4, %o5, %o4 -#endif - or %g5, %g6, %g5 - andcc %o4, %o3, %g0 - be,a 1b - st %g5, [%o0] - srl %o5, 24, %o4 - andcc %o4, 0xff, %g0 - be 6f - srl %o5, 16, %o4 - andcc %o4, 0xff, %g0 - be 7f - srl %o5, 8, %o4 - st %g5, [%o0] - andcc %o4, 0xff, %g0 - be 0f - andcc %o5, 0xff, %g0 -1: bne 4b - add %o0, 4, %o0 -9: stb %g0, [%o0] -0: retl - mov %g2, %o0 - -6: srl %g5, 16, %g5 - sth %g5, [%o0] - retl - mov %g2, %o0 - -7: srl %g5, 16, %g5 - sth %g5, [%o0] - stb %g0, [%o0 + 2] - retl - mov %g2, %o0 - -5: andcc %g5, 0xff, %g4 - be 9b - srl %o5, 16, %g5 - andcc %g5, 0xff, %g0 - be 7f - srl %o5, 8, %g5 - andcc %g5, 0xff, %g0 - stb %g4, [%o0] - sth %g5, [%o0 + 1] - sub %o0, 1, %o0 - bne 1b - andcc %o5, 0xff, %g0 - retl - mov %g2, %o0 - -7: stb %g4, [%o0] - stb %g0, [%o0 + 1] - retl - mov %g2, %o0 - -2: andcc %o4, %o3, %g0 - bne 5f - srl %o5, 16, %g5 - sth %g5, [%o0] - sub %o0, 2, %o0 -1: add %o0, 4, %o0 -4: sll %o5, 16, %g6 - ld [%o1], %o5 - add %o1, 4, %o1 - srl %o5, 16, %g5 - sub %o5, %o2, %o4 -#ifdef EIGHTBIT_NOT_RARE - andn %o4, %o5, %o4 -#endif - or %g5, %g6, %g5 - andcc %o4, %o3, %g0 - be,a 1b - st %g5, [%o0] - srl %o5, 24, %o4 - andcc %o4, 0xff, %g0 - be 7f - srl %o5, 16, %o4 - st %g5, [%o0] - andcc %o4, 0xff, %g0 - be 0b - srl %o5, 8, %o4 -1: andcc %o4, 0xff, %g0 - be 8f - andcc %o5, 0xff, %g0 - bne 4b - add %o0, 4, %o0 - sth %o5, [%o0] - retl - mov %g2, %o0 - -7: srl %g5, 16, %g5 - sth %g5, [%o0] - stb %g0, [%o0 + 2] - retl - mov %g2, %o0 - -8: stb %g0, [%o0 + 4] - retl - mov %g2, %o0 - -5: srl %o5, 24, %g5 - andcc %g5, 0xff, %g0 - be 9b - srl %o5, 16, %g5 - andcc %g5, 0xff, %g0 - sth %g5, [%o0] - sub %o0, 2, %o0 - bne 1b - srl %o5, 8, %o4 - retl - mov %g2, %o0 - -3: bne 5f - srl %o5, 24, %g5 - stb %g5, [%o0] - sub %o0, 3, %o0 -1: add %o0, 4, %o0 -4: sll %o5, 8, %g6 - ld [%o1], %o5 - add %o1, 4, %o1 - srl %o5, 24, %g5 - sub %o5, %o2, %o4 -#ifdef EIGHTBIT_NOT_RARE - andn %o4, %o5, %o4 -#endif - or %g5, %g6, %g5 - andcc %o4, %o3, %g0 - be 1b - st %g5, [%o0] - srl %o5, 24, %o4 - andcc %o4, 0xff, %g0 - be 0b - srl %o5, 16, %o4 -1: andcc %o4, 0xff, %g0 - be 8b - srl %o5, 8, %o4 - andcc %o4, 0xff, %g0 - be 9f - andcc %o5, 0xff, %g0 - bne 4b - add %o0, 4, %o0 - srl %o5, 8, %o5 - sth %o5, [%o0] - stb %g0, [%o0 + 2] - retl - mov %g2, %o0 -9: srl %o5, 8, %o5 - sth %o5, [%o0 + 4] - retl - mov %g2, %o0 -5: andcc %g5, 0xff, %g0 - stb %g5, [%o0] - sub %o0, 3, %o0 - bne 1b - srl %o5, 16, %o4 - retl - mov %g2, %o0 -END(strcat) -libc_hidden_builtin_def (strcat) diff --git a/sysdeps/sparc/sparc32/strchr.S b/sysdeps/sparc/sparc32/strchr.S deleted file mode 100644 index f934473ea8..0000000000 --- a/sysdeps/sparc/sparc32/strchr.S +++ /dev/null @@ -1,284 +0,0 @@ -/* strchr (str, ch) -- Return pointer to first occurrence of CH in STR. - For SPARC v7. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek and - David S. Miller . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* Normally, this uses ((xword - 0x01010101) & 0x80808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x01010101) & (~xword) & 0x80808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 4 -ENTRY(strchr) - andcc %o1, 0xff, %o1 - be 12f - sll %o1, 8, %o2 - andcc %o0, 3, %g0 - or %o1, %o2, %o2 - sethi %hi(0x80808080), %o4 - sll %o2, 16, %o3 - be 13f - or %o3, %o2, %g2 - - ldub [%o0], %g4 - cmp %g4, %o1 - be 11f - add %o0, 1, %o0 - cmp %g4, 0 - be 9f - andcc %o0, 3, %g0 - be 4f - or %o4, %lo(0x80808080), %o3 - ldub [%o0], %g4 - cmp %g4, %o1 - be 11f - add %o0, 1, %o0 - cmp %g4, 0 - be 9f - andcc %o0, 3, %g0 - be 5f - sethi %hi(0x01010101), %o5 - ldub [%o0], %g4 - cmp %g4, %o1 - be 11f - add %o0, 1, %o0 - cmp %g4, 0 - be 9f - or %o5, %lo(0x01010101), %o2 - b 6f - ld [%o0], %g4 -11: retl - sub %o0, 1, %o0 - -13: or %o4, %lo(0x80808080), %o3 -4: sethi %hi(0x01010101), %o5 -5: or %o5, %lo(0x01010101), %o2 -7: ld [%o0], %g4 -6: xor %g4, %g2, %g5 - sub %g4, %o2, %o4 -#ifdef EIGHTBIT_NOT_RARE - sub %g5, %o2, %g6 - andn %o4, %g4, %o4 - andn %g6, %g5, %g5 -#else - sub %g5, %o2, %g5 -#endif - or %g5, %o4, %o4 - andcc %o4, %o3, %g0 - be 7b - add %o0, 4, %o0 - - /* Check every byte. */ -8: srl %g4, 24, %g5 -7: andcc %g5, 0xff, %g5 - be 9f - cmp %g5, %o1 - be 4f - srl %g4, 16, %g5 - andcc %g5, 0xff, %g5 - be 9f - cmp %g5, %o1 - be 3f - srl %g4, 8, %g5 - andcc %g5, 0xff, %g5 - be 9f - cmp %g5, %o1 - be 2f - andcc %g4, 0xff, %g5 - be 9f - cmp %g5, %o1 - bne,a 6b - ld [%o0], %g4 - retl - sub %o0, 1, %o0 -2: retl - sub %o0, 2, %o0 -3: retl - sub %o0, 3, %o0 -4: retl - sub %o0, 4, %o0 -9: retl - clr %o0 - -11: ldub [%o0], %o5 - cmp %o5, 0 - be 1f - add %o0, 1, %o0 - andcc %o0, 3, %g0 - be 4f - or %o4, %lo(0x80808080), %o3 - ldub [%o0], %o5 - cmp %o5, 0 - be 1f - add %o0, 1, %o0 - andcc %o0, 3, %g0 - be 5f - sethi %hi(0x01010101), %o4 - ldub [%o0], %o5 - cmp %o5, 0 - be 1f - add %o0, 1, %o0 - b 6f - or %o4, %lo(0x01010101), %o2 -1: retl - sub %o0, 1, %o0 - -12: andcc %o0, 3, %g0 - bne 11b - sethi %hi(0x80808080), %o4 - or %o4, %lo(0x80808080), %o3 -4: sethi %hi(0x01010101), %o4 -5: or %o4, %lo(0x01010101), %o2 -6: ld [%o0], %o5 -7: sub %o5, %o2, %o4 -#ifdef EIGHTBIT_NOT_RARE - andn %o4, %o5, %o4 -#endif - andcc %o4, %o3, %g0 - be 6b - add %o0, 4, %o0 - - /* Check every byte. */ - srl %o5, 24, %g5 - andcc %g5, 0xff, %g0 - be 8f - add %o0, -4, %o4 - srl %o5, 16, %g5 - andcc %g5, 0xff, %g0 - be 8f - add %o4, 1, %o4 - srl %o5, 8, %g5 - andcc %g5, 0xff, %g0 - be 8f - add %o4, 1, %o4 - andcc %o5, 0xff, %g0 - bne,a 7b - ld [%o0], %o5 - add %o4, 1, %o4 -8: retl - mov %o4, %o0 - -13: ldub [%o0], %g4 - cmp %g4, %o1 - add %o0, 1, %o0 - be,a 1f - sub %o0, 1, %o5 - cmp %g4, 0 - be 9f -1: andcc %o0, 3, %g0 - be 4f - or %o4, %lo(0x80808080), %o3 - ldub [%o0], %g4 - cmp %g4, %o1 - add %o0, 1, %o0 - be,a 1f - sub %o0, 1, %o5 - cmp %g4, 0 - be 9f -1: andcc %o0, 3, %g0 - be 5f - sethi %hi(0x01010101), %o4 - ldub [%o0], %g4 - cmp %g4, %o1 - add %o0, 1, %o0 - be,a 1f - sub %o0, 1, %o5 - cmp %g4, 0 - be 9f -1: or %o4, %lo(0x01010101), %o2 - b 7f - ld [%o0], %g4 -END(strchr) - -ENTRY(strrchr) - andcc %o1, 0xff, %o1 - clr %o5 - be 12b - sll %o1, 8, %o2 - andcc %o0, 3, %g0 - or %o1, %o2, %o2 - sethi %hi(0x80808080), %o4 - sll %o2, 16, %o3 - bne 13b - or %o3, %o2, %g2 - or %o4, %lo(0x80808080), %o3 -4: sethi %hi(0x01010101), %o4 -5: or %o4, %lo(0x01010101), %o2 -6: ld [%o0], %g4 -7: xor %g4, %g2, %g5 - sub %g4, %o2, %o4 -#ifdef EIGHTBIT_NOT_RARE - sub %g5, %o2, %g6 - andn %o4, %g4, %o4 - andn %g6, %g5, %g5 -#else - sub %g5, %o2, %g5 -#endif - or %g5, %o4, %o4 - andcc %o4, %o3, %g0 - be 6b - add %o0, 4, %o0 - - /* Check every byte. */ -3: srl %g4, 24, %g5 -8: andcc %g5, 0xff, %g5 - be 9f - cmp %g5, %o1 - be,a 1f - sub %o0, 4, %o5 -1: srl %g4, 16, %g5 - andcc %g5, 0xff, %g5 - be 9f - cmp %g5, %o1 - be,a 1f - sub %o0, 3, %o5 -1: srl %g4, 8, %g5 - andcc %g5, 0xff, %g5 - be 9f - cmp %g5, %o1 - be,a 1f - sub %o0, 2, %o5 -1: andcc %g4, 0xff, %g5 - be 9f - cmp %g5, %o1 - be,a 1f - sub %o0, 1, %o5 -1: b 7b - ld [%o0], %g4 -9: retl - mov %o5, %o0 -END(strrchr) - -weak_alias (strchr, index) -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strchr) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/sparc/sparc32/strcmp.S b/sysdeps/sparc/sparc32/strcmp.S deleted file mode 100644 index 18e3700dd2..0000000000 --- a/sysdeps/sparc/sparc32/strcmp.S +++ /dev/null @@ -1,259 +0,0 @@ -/* Compare two strings for differences. - For SPARC v7. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* Normally, this uses ((xword - 0x01010101) & 0x80808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x01010101) & (~xword) & 0x80808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 4 - -ENTRY(strcmp) - andcc %o0, 3, %g0 - be 13f - sethi %hi(0x80808080), %g1 - - ldub [%o0], %o4 - add %o0, 1, %o0 - ldub [%o1], %o5 - cmp %o4, 0 - add %o1, 1, %o1 - be 2f - subcc %o4, %o5, %o4 - bne 2f - andcc %o0, 3, %g0 - be 4f - or %g1, %lo(0x80808080), %o3 - ldub [%o0], %o4 - add %o0, 1, %o0 - ldub [%o1], %o5 - cmp %o4, 0 - add %o1, 1, %o1 - be 2f - subcc %o4, %o5, %o4 - bne 2f - andcc %o0, 3, %g0 - be 5f - sethi %hi(0x01010101), %g1 - ldub [%o0], %o4 - add %o0, 1, %o0 - ldub [%o1], %o5 - cmp %o4, 0 - add %o1, 1, %o1 - be 2f - subcc %o4, %o5, %o4 - bne 2f - andcc %o1, 3, %g2 - bne 12f - or %g1, %lo(0x01010101), %o2 - b 1f - ld [%o0], %o4 -2: retl - mov %o4, %o0 - -13: or %g1, %lo(0x80808080), %o3 -4: sethi %hi(0x01010101), %g1 -5: andcc %o1, 3, %g2 - bne 12f - or %g1, %lo(0x01010101), %o2 - -0: ld [%o0], %o4 -1: ld [%o1], %o5 - sub %o4, %o2, %g1 - add %o0, 4, %o0 - cmp %o4, %o5 -#ifdef EIGHTBIT_NOT_RARE - andn %g1, %o4, %g1 -#endif - bne 11f - andcc %g1, %o3, %g0 - be 0b - add %o1, 4, %o1 - - srl %o4, 24, %g4 - andcc %g4, 0xff, %g0 - be 2f - srl %o4, 16, %g4 - andcc %g4, 0xff, %g0 - be 2f - srl %o4, 8, %g4 - andcc %g4, 0xff, %g0 - be 2f - andcc %o4, 0xff, %g0 - bne,a 1b - ld [%o0], %o4 -2: retl - clr %o0 - -11: srl %o4, 24, %g4 - srl %o5, 24, %g5 - andcc %g4, 0xff, %g0 - be 3f - subcc %g4, %g5, %g4 - bne 3f - srl %o5, 16, %g5 - srl %o4, 16, %g4 - andcc %g4, 0xff, %g0 - be 3f - subcc %g4, %g5, %g4 - bne 3f - srl %o5, 8, %g5 - srl %o4, 8, %g4 - andcc %g4, 0xff, %g0 - be 3f - subcc %g4, %g5, %g4 - bne 3f - subcc %o4, %o5, %o4 - retl - mov %o4, %o0 -3: retl - mov %g4, %o0 - -12: save %sp, -64, %sp - ld [%i0], %i4 - sll %g2, 3, %g3 - andn %i1, 3, %i1 - mov 32, %l1 - ld [%i1], %l2 - mov -1, %g6 - add %i1, 4, %i1 - sub %l1, %g3, %l1 - sll %g6, %g3, %g6 - -1: sll %l2, %g3, %g5 - and %i4, %g6, %l3 - sub %i4, %i2, %g1 -#ifdef EIGHTBIT_NOT_RARE - andn %g1, %i4, %g1 -#endif - andcc %g1, %i3, %g1 - bne 3f - cmp %g5, %l3 - bne 2f - add %i0, 4, %i0 - ld [%i1], %l2 - add %i1, 4, %i1 - srl %l2, %l1, %l4 - or %l4, %g5, %l4 - cmp %l4, %i4 - be,a 1b - ld [%i0], %i4 - restore %l4, %g0, %o3 - retl - sub %o4, %o3, %o0 - -2: sll %l2, %g3, %i2 - srl %i4, %g3, %i3 - srl %i2, %g3, %i2 - restore - retl - sub %o3, %o2, %o0 - -3: srl %i4, 24, %g4 - srl %g5, 24, %l6 - andcc %g4, 0xff, %g0 - be 4f - subcc %g4, %l6, %g4 - bne 4f - cmp %g2, 3 - be 6f - srl %i4, 16, %g4 - srl %g5, 16, %l6 - andcc %g4, 0xff, %g0 - be 4f - subcc %g4, %l6, %g4 - bne 4f - cmp %g2, 2 - be 5f - srl %i4, 8, %g4 - srl %g5, 8, %l6 - andcc %g4, 0xff, %g0 - be 4f - subcc %g4, %l6, %g4 - bne 4f - add %i0, 4, %i0 - ld [%i1], %l2 - add %i1, 4, %i1 - srl %l2, 24, %g5 - andcc %i4, 0xff, %g4 - be 4f - subcc %g4, %g5, %g4 - be,a 1b - ld [%i0], %i4 -4: jmpl %i7 + 8, %g0 - restore %g4, %g0, %o0 - -5: ld [%i1], %l2 - add %i1, 4, %i1 - add %i0, 4, %i0 - srl %l2, 24, %l6 - andcc %g4, 0xff, %g4 - be 4b - subcc %g4, %l6, %g4 - bne 4b - srl %l2, 16, %l6 - andcc %i4, 0xff, %g4 - and %l6, 0xff, %l6 - be 4b - subcc %g4, %l6, %g4 - be,a 1b - ld [%i0], %i4 - jmpl %i7 + 8, %g0 - restore %g4, %g0, %o0 - -6: ld [%i1], %l2 - add %i1, 4, %i1 - add %i0, 4, %i0 - srl %l2, 24, %l6 - andcc %g4, 0xff, %g4 - be 4b - subcc %g4, %l6, %g4 - bne 4b - srl %l2, 16, %l6 - srl %i4, 8, %g4 - and %l6, 0xff, %l6 - andcc %g4, 0xff, %g4 - be 4b - subcc %g4, %l6, %g4 - bne 4b - srl %l2, 8, %l6 - andcc %i4, 0xff, %g4 - and %l6, 0xff, %l6 - be 4b - subcc %g4, %l6, %g4 - be,a 1b - ld [%i0], %i4 - jmpl %i7 + 8, %g0 - restore %g4, %g0, %o0 -END(strcmp) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/sparc/sparc32/strcpy.S b/sysdeps/sparc/sparc32/strcpy.S deleted file mode 100644 index 245b78d612..0000000000 --- a/sysdeps/sparc/sparc32/strcpy.S +++ /dev/null @@ -1,276 +0,0 @@ -/* Copy SRC to DEST returning DEST. - For SPARC v7. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* Normally, this uses ((xword - 0x01010101) & 0x80808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x01010101) & (~xword) & 0x80808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 4 - -ENTRY(strcpy) - mov %o0, %g2 - andcc %o1, 3, %g0 - be 10f - sethi %hi(0x80808080), %o4 - - ldub [%o1], %o5 - stb %o5, [%o0] - cmp %o5, 0 - add %o0, 1, %o0 - be 0f - add %o1, 1, %o1 - andcc %o1, 3, %g0 - be 4f - or %o4, %lo(0x80808080), %o3 - ldub [%o1], %o5 - stb %o5, [%o0] - cmp %o5, 0 - add %o0, 1, %o0 - be 0f - add %o1, 1, %o1 - andcc %o1, 3, %g0 - be 5f - sethi %hi(0x01010101), %o4 - ldub [%o1], %o5 - stb %o5, [%o0] - cmp %o5, 0 - add %o0, 1, %o0 - be 0f - add %o1, 1, %o1 - b 6f - andcc %o0, 3, %g3 - -10: or %o4, %lo(0x80808080), %o3 -4: sethi %hi(0x01010101), %o4 -5: andcc %o0, 3, %g3 -6: bne 10f - or %o4, %lo(0x01010101), %o2 -1: ld [%o1], %o5 - add %o1, 4, %o1 - sub %o5, %o2, %o4 - add %o0, 4, %o0 - andcc %o4, %o3, %g0 - be,a 1b - st %o5, [%o0 - 4] - - srl %o5, 24, %g5 - andcc %g5, 0xff, %g0 - be 1f - srl %o5, 16, %g5 - andcc %g5, 0xff, %g0 - be 2f - srl %o5, 8, %g5 - andcc %g5, 0xff, %g0 - be 3f - andcc %o5, 0xff, %g0 - bne 1b - st %o5, [%o0 - 4] - retl - mov %g2, %o0 -3: srl %o5, 16, %o5 - sth %o5, [%o0 - 4] - stb %g0, [%o0 - 2] - retl - mov %g2, %o0 -2: srl %o5, 16, %o5 - sth %o5, [%o0 - 4] - retl - mov %g2, %o0 -1: stb %g0, [%o0 - 4] - retl - mov %g2, %o0 - -10: ld [%o1], %o5 - add %o1, 4, %o1 - sub %o5, %o2, %o4 - cmp %g3, 2 - be 2f - cmp %g3, 3 - be 3f - andcc %o4, %o3, %g0 - bne 5f - srl %o5, 24, %g5 - stb %g5, [%o0] - sub %o0, 1, %o0 - srl %o5, 8, %g5 - sth %g5, [%o0 + 2] -1: add %o0, 4, %o0 -4: sll %o5, 24, %g6 - ld [%o1], %o5 - add %o1, 4, %o1 - srl %o5, 8, %g5 - sub %o5, %o2, %o4 - or %g5, %g6, %g5 - andcc %o4, %o3, %g0 - be,a 1b - st %g5, [%o0] - srl %o5, 24, %o4 - andcc %o4, 0xff, %g0 - be 6f - srl %o5, 16, %o4 - andcc %o4, 0xff, %g0 - be 7f - srl %o5, 8, %o4 - st %g5, [%o0] - andcc %o4, 0xff, %g0 - be 0f - andcc %o5, 0xff, %g0 -1: bne 4b - add %o0, 4, %o0 -9: stb %g0, [%o0] -0: retl - mov %g2, %o0 -6: srl %g5, 16, %g5 - sth %g5, [%o0] - retl - mov %g2, %o0 -7: srl %g5, 16, %g5 - sth %g5, [%o0] - stb %g0, [%o0 + 2] - retl - mov %g2, %o0 -5: andcc %g5, 0xff, %g4 - be 9b - srl %o5, 16, %g5 - andcc %g5, 0xff, %g0 - be 7f - srl %o5, 8, %g5 - andcc %g5, 0xff, %g0 - stb %g4, [%o0] - sth %g5, [%o0 + 1] - sub %o0, 1, %o0 - bne 1b - andcc %o5, 0xff, %g0 - retl - mov %g2, %o0 -7: stb %g4, [%o0] - stb %g0, [%o0 + 1] - retl - mov %g2, %o0 - -2: andcc %o4, %o3, %g0 - bne 5f - srl %o5, 16, %g5 - sth %g5, [%o0] - sub %o0, 2, %o0 -1: add %o0, 4, %o0 -4: sll %o5, 16, %g6 - ld [%o1], %o5 - add %o1, 4, %o1 - srl %o5, 16, %g5 - sub %o5, %o2, %o4 - or %g5, %g6, %g5 - andcc %o4, %o3, %g0 - be,a 1b - st %g5, [%o0] - srl %o5, 24, %o4 - andcc %o4, 0xff, %g0 - be 7f - srl %o5, 16, %o4 - st %g5, [%o0] - andcc %o4, 0xff, %g0 - be 0b - srl %o5, 8, %o4 -1: andcc %o4, 0xff, %g0 - be 8f - andcc %o5, 0xff, %g0 - bne 4b - add %o0, 4, %o0 - sth %o5, [%o0] - retl - mov %g2, %o0 -7: srl %g5, 16, %g5 - sth %g5, [%o0] - stb %g0, [%o0 + 2] - retl - mov %g2, %o0 -8: stb %g0, [%o0 + 4] - retl - mov %g2, %o0 -5: srl %o5, 24, %g5 - andcc %g5, 0xff, %g0 - be 9b - srl %o5, 16, %g5 - andcc %g5, 0xff, %g0 - sth %g5, [%o0] - sub %o0, 2, %o0 - bne 1b - srl %o5, 8, %o4 - retl - mov %g2, %o0 - -3: bne 5f - srl %o5, 24, %g5 - stb %g5, [%o0] - sub %o0, 3, %o0 -1: add %o0, 4, %o0 -4: sll %o5, 8, %g6 - ld [%o1], %o5 - add %o1, 4, %o1 - srl %o5, 24, %g5 - sub %o5, %o2, %o4 - or %g5, %g6, %g5 - andcc %o4, %o3, %g0 - be 1b - st %g5, [%o0] - srl %o5, 24, %o4 - andcc %o4, 0xff, %g0 - be 0b - srl %o5, 16, %o4 -1: andcc %o4, 0xff, %g0 - be 8b - srl %o5, 8, %o4 - andcc %o4, 0xff, %g0 - be 9f - andcc %o5, 0xff, %g0 - bne 4b - add %o0, 4, %o0 - srl %o5, 8, %o5 - sth %o5, [%o0] - stb %g0, [%o0 + 2] - retl - mov %g2, %o0 -9: srl %o5, 8, %o5 - sth %o5, [%o0 + 4] - retl - mov %g2, %o0 -5: andcc %g5, 0xff, %g0 - stb %g5, [%o0] - sub %o0, 3, %o0 - bne 1b - srl %o5, 16, %o4 - retl - mov %g2, %o0 -END(strcpy) -libc_hidden_builtin_def (strcpy) diff --git a/sysdeps/sparc/sparc32/strlen.S b/sysdeps/sparc/sparc32/strlen.S deleted file mode 100644 index 59baee884e..0000000000 --- a/sysdeps/sparc/sparc32/strlen.S +++ /dev/null @@ -1,75 +0,0 @@ -/* Determine the length of a string. - For SPARC v7. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek and - David S. Miller . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text - .align 4 - -ENTRY(strlen) - mov %o0, %o1 - andn %o0, 0x3, %o0 - - ld [%o0], %o5 - and %o1, 0x3, %g1 - mov -1, %g5 - - sethi %hi(0x01010101), %o2 - sll %g1, 3, %g1 - - or %o2, %lo(0x01010101), %o2 - srl %g5, %g1, %g2 - - orn %o5, %g2, %o5 - sll %o2, 7, %o3 -10: add %o0, 4, %o0 - - andn %o3, %o5, %g1 - sub %o5, %o2, %g2 - - andcc %g1, %g2, %g0 - be,a 10b - ld [%o0], %o5 - - srl %o5, 24, %g1 - - andcc %g1, 0xff, %g0 - be 90f - sub %o0, 4, %o0 - - srl %o5, 16, %g2 - - andcc %g2, 0xff, %g0 - be 90f - add %o0, 1, %o0 - - srl %o5, 8, %g1 - - andcc %g1, 0xff, %g0 - be 90f - add %o0, 1, %o0 - - add %o0, 1, %o0 - -90: retl - sub %o0, %o1, %o0 -END(strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/sparc/sparc32/strrchr.c b/sysdeps/sparc/sparc32/strrchr.c deleted file mode 100644 index ec608d6ab3..0000000000 --- a/sysdeps/sparc/sparc32/strrchr.c +++ /dev/null @@ -1 +0,0 @@ -/* strrchr is in strchr.S */ diff --git a/sysdeps/sparc/sparc32/sub_n.S b/sysdeps/sparc/sparc32/sub_n.S deleted file mode 100644 index 22ca71fa93..0000000000 --- a/sysdeps/sparc/sparc32/sub_n.S +++ /dev/null @@ -1,328 +0,0 @@ -! SPARC __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -! store difference in a third limb vector. -! -! Copyright (C) 1995-2017 Free Software Foundation, Inc. -! -! This file is part of the GNU MP Library. -! -! The GNU MP Library is free software; you can redistribute it and/or modify -! it under the terms of the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. -! -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. -! -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, -! see . - - -! INPUT PARAMETERS -#define RES_PTR %o0 -#define S1_PTR %o1 -#define S2_PTR %o2 -#define SIZE %o3 - -#include - -ENTRY(__mpn_sub_n) - xor S2_PTR,RES_PTR,%g1 - andcc %g1,4,%g0 - bne LOC(1) ! branch if alignment differs - nop -! ** V1a ** - andcc RES_PTR,4,%g0 ! RES_PTR unaligned? Side effect: cy=0 - be LOC(v1) ! if no, branch - nop -/* Add least significant limb separately to align RES_PTR and S2_PTR */ - ld [S1_PTR],%g4 - add S1_PTR,4,S1_PTR - ld [S2_PTR],%g2 - add S2_PTR,4,S2_PTR - add SIZE,-1,SIZE - subcc %g4,%g2,%o4 - st %o4,[RES_PTR] - add RES_PTR,4,RES_PTR -LOC(v1): - addx %g0,%g0,%o4 ! save cy in register - cmp SIZE,2 ! if SIZE < 2 ... - bl LOC(end2) ! ... branch to tail code - subcc %g0,%o4,%g0 ! restore cy - - ld [S1_PTR+0],%g4 - addcc SIZE,-10,SIZE - ld [S1_PTR+4],%g1 - ldd [S2_PTR+0],%g2 - blt LOC(fin1) - subcc %g0,%o4,%g0 ! restore cy -/* Add blocks of 8 limbs until less than 8 limbs remain */ -LOC(loop1): - subxcc %g4,%g2,%o4 - ld [S1_PTR+8],%g4 - subxcc %g1,%g3,%o5 - ld [S1_PTR+12],%g1 - ldd [S2_PTR+8],%g2 - std %o4,[RES_PTR+0] - subxcc %g4,%g2,%o4 - ld [S1_PTR+16],%g4 - subxcc %g1,%g3,%o5 - ld [S1_PTR+20],%g1 - ldd [S2_PTR+16],%g2 - std %o4,[RES_PTR+8] - subxcc %g4,%g2,%o4 - ld [S1_PTR+24],%g4 - subxcc %g1,%g3,%o5 - ld [S1_PTR+28],%g1 - ldd [S2_PTR+24],%g2 - std %o4,[RES_PTR+16] - subxcc %g4,%g2,%o4 - ld [S1_PTR+32],%g4 - subxcc %g1,%g3,%o5 - ld [S1_PTR+36],%g1 - ldd [S2_PTR+32],%g2 - std %o4,[RES_PTR+24] - addx %g0,%g0,%o4 ! save cy in register - addcc SIZE,-8,SIZE - add S1_PTR,32,S1_PTR - add S2_PTR,32,S2_PTR - add RES_PTR,32,RES_PTR - bge LOC(loop1) - subcc %g0,%o4,%g0 ! restore cy - -LOC(fin1): - addcc SIZE,8-2,SIZE - blt LOC(end1) - subcc %g0,%o4,%g0 ! restore cy -/* Add blocks of 2 limbs until less than 2 limbs remain */ -LOC(loope1): - subxcc %g4,%g2,%o4 - ld [S1_PTR+8],%g4 - subxcc %g1,%g3,%o5 - ld [S1_PTR+12],%g1 - ldd [S2_PTR+8],%g2 - std %o4,[RES_PTR+0] - addx %g0,%g0,%o4 ! save cy in register - addcc SIZE,-2,SIZE - add S1_PTR,8,S1_PTR - add S2_PTR,8,S2_PTR - add RES_PTR,8,RES_PTR - bge LOC(loope1) - subcc %g0,%o4,%g0 ! restore cy -LOC(end1): - subxcc %g4,%g2,%o4 - subxcc %g1,%g3,%o5 - std %o4,[RES_PTR+0] - addx %g0,%g0,%o4 ! save cy in register - - andcc SIZE,1,%g0 - be LOC(ret1) - subcc %g0,%o4,%g0 ! restore cy -/* Add last limb */ - ld [S1_PTR+8],%g4 - ld [S2_PTR+8],%g2 - subxcc %g4,%g2,%o4 - st %o4,[RES_PTR+8] - -LOC(ret1): - retl - addx %g0,%g0,%o0 ! return carry-out from most sign. limb - -LOC(1): xor S1_PTR,RES_PTR,%g1 - andcc %g1,4,%g0 - bne LOC(2) - nop -! ** V1b ** - andcc RES_PTR,4,%g0 ! RES_PTR unaligned? Side effect: cy=0 - be LOC(v1b) ! if no, branch - nop -/* Add least significant limb separately to align RES_PTR and S1_PTR */ - ld [S2_PTR],%g4 - add S2_PTR,4,S2_PTR - ld [S1_PTR],%g2 - add S1_PTR,4,S1_PTR - add SIZE,-1,SIZE - subcc %g2,%g4,%o4 - st %o4,[RES_PTR] - add RES_PTR,4,RES_PTR -LOC(v1b): - addx %g0,%g0,%o4 ! save cy in register - cmp SIZE,2 ! if SIZE < 2 ... - bl LOC(end2) ! ... branch to tail code - subcc %g0,%o4,%g0 ! restore cy - - ld [S2_PTR+0],%g4 - addcc SIZE,-10,SIZE - ld [S2_PTR+4],%g1 - ldd [S1_PTR+0],%g2 - blt LOC(fin1b) - subcc %g0,%o4,%g0 ! restore cy -/* Add blocks of 8 limbs until less than 8 limbs remain */ -LOC(loop1b): - subxcc %g2,%g4,%o4 - ld [S2_PTR+8],%g4 - subxcc %g3,%g1,%o5 - ld [S2_PTR+12],%g1 - ldd [S1_PTR+8],%g2 - std %o4,[RES_PTR+0] - subxcc %g2,%g4,%o4 - ld [S2_PTR+16],%g4 - subxcc %g3,%g1,%o5 - ld [S2_PTR+20],%g1 - ldd [S1_PTR+16],%g2 - std %o4,[RES_PTR+8] - subxcc %g2,%g4,%o4 - ld [S2_PTR+24],%g4 - subxcc %g3,%g1,%o5 - ld [S2_PTR+28],%g1 - ldd [S1_PTR+24],%g2 - std %o4,[RES_PTR+16] - subxcc %g2,%g4,%o4 - ld [S2_PTR+32],%g4 - subxcc %g3,%g1,%o5 - ld [S2_PTR+36],%g1 - ldd [S1_PTR+32],%g2 - std %o4,[RES_PTR+24] - addx %g0,%g0,%o4 ! save cy in register - addcc SIZE,-8,SIZE - add S1_PTR,32,S1_PTR - add S2_PTR,32,S2_PTR - add RES_PTR,32,RES_PTR - bge LOC(loop1b) - subcc %g0,%o4,%g0 ! restore cy - -LOC(fin1b): - addcc SIZE,8-2,SIZE - blt LOC(end1b) - subcc %g0,%o4,%g0 ! restore cy -/* Add blocks of 2 limbs until less than 2 limbs remain */ -LOC(loope1b): - subxcc %g2,%g4,%o4 - ld [S2_PTR+8],%g4 - subxcc %g3,%g1,%o5 - ld [S2_PTR+12],%g1 - ldd [S1_PTR+8],%g2 - std %o4,[RES_PTR+0] - addx %g0,%g0,%o4 ! save cy in register - addcc SIZE,-2,SIZE - add S1_PTR,8,S1_PTR - add S2_PTR,8,S2_PTR - add RES_PTR,8,RES_PTR - bge LOC(loope1b) - subcc %g0,%o4,%g0 ! restore cy -LOC(end1b): - subxcc %g2,%g4,%o4 - subxcc %g3,%g1,%o5 - std %o4,[RES_PTR+0] - addx %g0,%g0,%o4 ! save cy in register - - andcc SIZE,1,%g0 - be LOC(ret1b) - subcc %g0,%o4,%g0 ! restore cy -/* Add last limb */ - ld [S2_PTR+8],%g4 - ld [S1_PTR+8],%g2 - subxcc %g2,%g4,%o4 - st %o4,[RES_PTR+8] - -LOC(ret1b): - retl - addx %g0,%g0,%o0 ! return carry-out from most sign. limb - -! ** V2 ** -/* If we come here, the alignment of S1_PTR and RES_PTR as well as the - alignment of S2_PTR and RES_PTR differ. Since there are only two ways - things can be aligned (that we care about) we now know that the alignment - of S1_PTR and S2_PTR are the same. */ - -LOC(2): cmp SIZE,1 - be LOC(jone) - nop - andcc S1_PTR,4,%g0 ! S1_PTR unaligned? Side effect: cy=0 - be LOC(v2) ! if no, branch - nop -/* Add least significant limb separately to align S1_PTR and S2_PTR */ - ld [S1_PTR],%g4 - add S1_PTR,4,S1_PTR - ld [S2_PTR],%g2 - add S2_PTR,4,S2_PTR - add SIZE,-1,SIZE - subcc %g4,%g2,%o4 - st %o4,[RES_PTR] - add RES_PTR,4,RES_PTR - -LOC(v2): - addx %g0,%g0,%o4 ! save cy in register - addcc SIZE,-8,SIZE - blt LOC(fin2) - subcc %g0,%o4,%g0 ! restore cy -/* Add blocks of 8 limbs until less than 8 limbs remain */ -LOC(loop2): - ldd [S1_PTR+0],%g2 - ldd [S2_PTR+0],%o4 - subxcc %g2,%o4,%g2 - st %g2,[RES_PTR+0] - subxcc %g3,%o5,%g3 - st %g3,[RES_PTR+4] - ldd [S1_PTR+8],%g2 - ldd [S2_PTR+8],%o4 - subxcc %g2,%o4,%g2 - st %g2,[RES_PTR+8] - subxcc %g3,%o5,%g3 - st %g3,[RES_PTR+12] - ldd [S1_PTR+16],%g2 - ldd [S2_PTR+16],%o4 - subxcc %g2,%o4,%g2 - st %g2,[RES_PTR+16] - subxcc %g3,%o5,%g3 - st %g3,[RES_PTR+20] - ldd [S1_PTR+24],%g2 - ldd [S2_PTR+24],%o4 - subxcc %g2,%o4,%g2 - st %g2,[RES_PTR+24] - subxcc %g3,%o5,%g3 - st %g3,[RES_PTR+28] - addx %g0,%g0,%o4 ! save cy in register - addcc SIZE,-8,SIZE - add S1_PTR,32,S1_PTR - add S2_PTR,32,S2_PTR - add RES_PTR,32,RES_PTR - bge LOC(loop2) - subcc %g0,%o4,%g0 ! restore cy - -LOC(fin2): - addcc SIZE,8-2,SIZE - blt LOC(end2) - subcc %g0,%o4,%g0 ! restore cy -LOC(loope2): - ldd [S1_PTR+0],%g2 - ldd [S2_PTR+0],%o4 - subxcc %g2,%o4,%g2 - st %g2,[RES_PTR+0] - subxcc %g3,%o5,%g3 - st %g3,[RES_PTR+4] - addx %g0,%g0,%o4 ! save cy in register - addcc SIZE,-2,SIZE - add S1_PTR,8,S1_PTR - add S2_PTR,8,S2_PTR - add RES_PTR,8,RES_PTR - bge LOC(loope2) - subcc %g0,%o4,%g0 ! restore cy -LOC(end2): - andcc SIZE,1,%g0 - be LOC(ret2) - subcc %g0,%o4,%g0 ! restore cy -/* Add last limb */ -LOC(jone): - ld [S1_PTR],%g4 - ld [S2_PTR],%g2 - subxcc %g4,%g2,%o4 - st %o4,[RES_PTR] - -LOC(ret2): - retl - addx %g0,%g0,%o0 ! return carry-out from most sign. limb - -END(__mpn_sub_n) diff --git a/sysdeps/sparc/sparc32/submul_1.S b/sysdeps/sparc/sparc32/submul_1.S deleted file mode 100644 index 58dd2a3fc6..0000000000 --- a/sysdeps/sparc/sparc32/submul_1.S +++ /dev/null @@ -1,146 +0,0 @@ -! SPARC __mpn_submul_1 -- Multiply a limb vector with a limb and subtract -! the result from a second limb vector. -! -! Copyright (C) 1992-2017 Free Software Foundation, Inc. -! -! This file is part of the GNU MP Library. -! -! The GNU MP Library is free software; you can redistribute it and/or modify -! it under the terms of the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. -! -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. -! -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, -! see . - - -! INPUT PARAMETERS -! RES_PTR o0 -! S1_PTR o1 -! SIZE o2 -! S2_LIMB o3 - -#include - -ENTRY(__mpn_submul_1) - ! Make S1_PTR and RES_PTR point at the end of their blocks - ! and put (- 4 x SIZE) in index/loop counter. - sll %o2,2,%o2 - add %o0,%o2,%o4 ! RES_PTR in o4 since o0 is retval - add %o1,%o2,%o1 - sub %g0,%o2,%o2 - - cmp %o3,0xfff - bgu LOC(large) - nop - - ld [%o1+%o2],%o5 - mov 0,%o0 - b LOC(0) - add %o4,-4,%o4 -LOC(loop0): - subcc %o5,%g1,%g1 - ld [%o1+%o2],%o5 - addx %o0,%g0,%o0 - st %g1,[%o4+%o2] -LOC(0): wr %g0,%o3,%y - sra %o5,31,%g2 - and %o3,%g2,%g2 - andcc %g1,0,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,%o5,%g1 - mulscc %g1,0,%g1 - sra %g1,20,%g4 - sll %g1,12,%g1 - rd %y,%g3 - srl %g3,20,%g3 - or %g1,%g3,%g1 - - addcc %g1,%o0,%g1 - addx %g2,%g4,%o0 ! add sign-compensation and cy to hi limb - addcc %o2,4,%o2 ! loop counter - bne LOC(loop0) - ld [%o4+%o2],%o5 - - subcc %o5,%g1,%g1 - addx %o0,%g0,%o0 - retl - st %g1,[%o4+%o2] - - -LOC(large): - ld [%o1+%o2],%o5 - mov 0,%o0 - sra %o3,31,%g4 ! g4 = mask of ones iff S2_LIMB < 0 - b LOC(1) - add %o4,-4,%o4 -LOC(loop): - subcc %o5,%g3,%g3 - ld [%o1+%o2],%o5 - addx %o0,%g0,%o0 - st %g3,[%o4+%o2] -LOC(1): wr %g0,%o5,%y - and %o5,%g4,%g2 - andcc %g0,%g0,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%o3,%g1 - mulscc %g1,%g0,%g1 - rd %y,%g3 - addcc %g3,%o0,%g3 - addx %g2,%g1,%o0 - addcc %o2,4,%o2 - bne LOC(loop) - ld [%o4+%o2],%o5 - - subcc %o5,%g3,%g3 - addx %o0,%g0,%o0 - retl - st %g3,[%o4+%o2] - -END(__mpn_submul_1) diff --git a/sysdeps/sparc/sparc32/tls-macros.h b/sysdeps/sparc/sparc32/tls-macros.h deleted file mode 100644 index 152216e8a8..0000000000 --- a/sysdeps/sparc/sparc32/tls-macros.h +++ /dev/null @@ -1,66 +0,0 @@ -#define TLS_LE(x) \ - ({ int *__l; \ - asm ("sethi %%tle_hix22(" #x "), %0" : "=r" (__l)); \ - asm ("xor %1, %%tle_lox10(" #x "), %0" : "=r" (__l) : "r" (__l)); \ - asm ("add %%g7, %1, %0" : "=r" (__l) : "r" (__l)); \ - __l; }) - -#ifdef __PIC__ -# define TLS_LOAD_PIC \ - ({ register long pc __asm__ ("%o7"); \ - long got; \ - asm ("sethi %%hi(_GLOBAL_OFFSET_TABLE_-4), %1\n\t" \ - "call .+8\n\t" \ - "add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n\t" \ - "add %1, %0, %1\n\t" \ - : "=r" (pc), "=r" (got)); \ - got; }) -#else -# define TLS_LOAD_PIC \ - ({ long got; \ - asm (".hidden _GLOBAL_OFFSET_TABLE_\n\t" \ - "sethi %%hi(_GLOBAL_OFFSET_TABLE_), %0\n\t" \ - "or %0, %%lo(_GLOBAL_OFFSET_TABLE_), %0" \ - : "=r" (got)); \ - got; }) -#endif - -#define TLS_IE(x) \ - ({ int *__l; \ - asm ("sethi %%tie_hi22(" #x "), %0" : "=r" (__l)); \ - asm ("add %1, %%tie_lo10(" #x "), %0" : "=r" (__l) : "r" (__l)); \ - asm ("ld [%1 + %2], %0, %%tie_ld(" #x ")" \ - : "=r" (__l) : "r" (TLS_LOAD_PIC), "r" (__l)); \ - asm ("add %%g7, %1, %0, %%tie_add(" #x ")" : "=r" (__l) : "r" (__l)); \ - __l; }) - -#define TLS_LD(x) \ - ({ int *__l; register void *__o0 asm ("%o0"); \ - long __o; \ - asm ("sethi %%tldm_hi22(" #x "), %0" : "=r" (__l)); \ - asm ("add %1, %%tldm_lo10(" #x "), %0" : "=r" (__l) : "r" (__l)); \ - asm ("add %1, %2, %0, %%tldm_add(" #x ")" \ - : "=r" (__o0) : "r" (TLS_LOAD_PIC), "r" (__l)); \ - asm ("call __tls_get_addr, %%tgd_call(" #x ")\n\t" \ - " nop" \ - : "=r" (__o0) : "0" (__o0) \ - : "g1", "g2", "g3", "g4", "g5", "g6", "o1", "o2", "o3", "o4", \ - "o5", "o7", "cc"); \ - asm ("sethi %%tldo_hix22(" #x "), %0" : "=r" (__o)); \ - asm ("xor %1, %%tldo_lox10(" #x "), %0" : "=r" (__o) : "r" (__o)); \ - asm ("add %1, %2, %0, %%tldo_add(" #x ")" : "=r" (__l) \ - : "r" (__o0), "r" (__o)); \ - __l; }) - -#define TLS_GD(x) \ - ({ int *__l; register void *__o0 asm ("%o0"); \ - asm ("sethi %%tgd_hi22(" #x "), %0" : "=r" (__l)); \ - asm ("add %1, %%tgd_lo10(" #x "), %0" : "=r" (__l) : "r" (__l)); \ - asm ("add %1, %2, %0, %%tgd_add(" #x ")" \ - : "=r" (__o0) : "r" (TLS_LOAD_PIC), "r" (__l)); \ - asm ("call __tls_get_addr, %%tgd_call(" #x ")\n\t" \ - " nop" \ - : "=r" (__o0) : "0" (__o0) \ - : "g1", "g2", "g3", "g4", "g5", "g6", "o1", "o2", "o3", "o4", \ - "o5", "o7", "cc"); \ - __o0; }) diff --git a/sysdeps/sparc/sparc32/tst-audit.h b/sysdeps/sparc/sparc32/tst-audit.h deleted file mode 100644 index a437dade69..0000000000 --- a/sysdeps/sparc/sparc32/tst-audit.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. SPARC32 version. - - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define pltenter la_sparc32_gnu_pltenter -#define pltexit la_sparc32_gnu_pltexit -#define La_regs La_sparc32_regs -#define La_retval La_sparc32_retval -#define int_retval lrv_reg[0] diff --git a/sysdeps/sparc/sparc32/udiv.S b/sysdeps/sparc/sparc32/udiv.S deleted file mode 100644 index ade0afdf40..0000000000 --- a/sysdeps/sparc/sparc32/udiv.S +++ /dev/null @@ -1,347 +0,0 @@ - /* This file is generated from divrem.m4; DO NOT EDIT! */ -/* - * Division and remainder, from Appendix E of the Sparc Version 8 - * Architecture Manual, with fixes from Gordon Irlam. - */ - -/* - * Input: dividend and divisor in %o0 and %o1 respectively. - * - * m4 parameters: - * .udiv name of function to generate - * div div=div => %o0 / %o1; div=rem => %o0 % %o1 - * false false=true => signed; false=false => unsigned - * - * Algorithm parameters: - * N how many bits per iteration we try to get (4) - * WORDSIZE total number of bits (32) - * - * Derived constants: - * TOPBITS number of bits in the top decade of a number - * - * Important variables: - * Q the partial quotient under development (initially 0) - * R the remainder so far, initially the dividend - * ITER number of main division loop iterations required; - * equal to ceil(log2(quotient) / N). Note that this - * is the log base (2^N) of the quotient. - * V the current comparand, initially divisor*2^(ITER*N-1) - * - * Cost: - * Current estimate for non-large dividend is - * ceil(log2(quotient) / N) * (10 + 7N/2) + C - * A large dividend is one greater than 2^(31-TOPBITS) and takes a - * different path, as the upper bits of the quotient must be developed - * one bit at a time. - */ - - - -#include -#include - -ENTRY(.udiv) - - ! Ready to divide. Compute size of quotient; scale comparand. - orcc %o1, %g0, %o5 - bne 1f - mov %o0, %o3 - - ! Divide by zero trap. If it returns, return 0 (about as - ! wrong as possible, but that is what SunOS does...). - ta ST_DIV0 - retl - clr %o0 - -1: - cmp %o3, %o5 ! if %o1 exceeds %o0, done - blu LOC(got_result) ! (and algorithm fails otherwise) - clr %o2 - sethi %hi(1 << (32 - 4 - 1)), %g1 - cmp %o3, %g1 - blu LOC(not_really_big) - clr %o4 - - ! Here the dividend is >= 2**(31-N) or so. We must be careful here, - ! as our usual N-at-a-shot divide step will cause overflow and havoc. - ! The number of bits in the result here is N*ITER+SC, where SC <= N. - ! Compute ITER in an unorthodox manner: know we need to shift V into - ! the top decade: so do not even bother to compare to R. - 1: - cmp %o5, %g1 - bgeu 3f - mov 1, %g2 - sll %o5, 4, %o5 - b 1b - add %o4, 1, %o4 - - ! Now compute %g2. - 2: addcc %o5, %o5, %o5 - bcc LOC(not_too_big) - add %g2, 1, %g2 - - ! We get here if the %o1 overflowed while shifting. - ! This means that %o3 has the high-order bit set. - ! Restore %o5 and subtract from %o3. - sll %g1, 4, %g1 ! high order bit - srl %o5, 1, %o5 ! rest of %o5 - add %o5, %g1, %o5 - b LOC(do_single_div) - sub %g2, 1, %g2 - - LOC(not_too_big): - 3: cmp %o5, %o3 - blu 2b - nop - be LOC(do_single_div) - nop - /* NB: these are commented out in the V8-Sparc manual as well */ - /* (I do not understand this) */ - ! %o5 > %o3: went too far: back up 1 step - ! srl %o5, 1, %o5 - ! dec %g2 - ! do single-bit divide steps - ! - ! We have to be careful here. We know that %o3 >= %o5, so we can do the - ! first divide step without thinking. BUT, the others are conditional, - ! and are only done if %o3 >= 0. Because both %o3 and %o5 may have the high- - ! order bit set in the first step, just falling into the regular - ! division loop will mess up the first time around. - ! So we unroll slightly... - LOC(do_single_div): - subcc %g2, 1, %g2 - bl LOC(end_regular_divide) - nop - sub %o3, %o5, %o3 - mov 1, %o2 - b LOC(end_single_divloop) - nop - LOC(single_divloop): - sll %o2, 1, %o2 - bl 1f - srl %o5, 1, %o5 - ! %o3 >= 0 - sub %o3, %o5, %o3 - b 2f - add %o2, 1, %o2 - 1: ! %o3 < 0 - add %o3, %o5, %o3 - sub %o2, 1, %o2 - 2: - LOC(end_single_divloop): - subcc %g2, 1, %g2 - bge LOC(single_divloop) - tst %o3 - b,a LOC(end_regular_divide) - -LOC(not_really_big): -1: - sll %o5, 4, %o5 - cmp %o5, %o3 - bleu 1b - addcc %o4, 1, %o4 - be LOC(got_result) - sub %o4, 1, %o4 - - tst %o3 ! set up for initial iteration -LOC(divloop): - sll %o2, 4, %o2 - ! depth 1, accumulated bits 0 - bl LOC(1.16) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 2, accumulated bits 1 - bl LOC(2.17) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 3, accumulated bits 3 - bl LOC(3.19) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits 7 - bl LOC(4.23) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (7*2+1), %o2 - -LOC(4.23): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (7*2-1), %o2 - - -LOC(3.19): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits 5 - bl LOC(4.21) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (5*2+1), %o2 - -LOC(4.21): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (5*2-1), %o2 - - - -LOC(2.17): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 3, accumulated bits 1 - bl LOC(3.17) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits 3 - bl LOC(4.19) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (3*2+1), %o2 - -LOC(4.19): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (3*2-1), %o2 - - -LOC(3.17): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits 1 - bl LOC(4.17) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (1*2+1), %o2 - -LOC(4.17): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (1*2-1), %o2 - - - - -LOC(1.16): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 2, accumulated bits -1 - bl LOC(2.15) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 3, accumulated bits -1 - bl LOC(3.15) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits -1 - bl LOC(4.15) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-1*2+1), %o2 - -LOC(4.15): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-1*2-1), %o2 - - -LOC(3.15): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits -3 - bl LOC(4.13) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-3*2+1), %o2 - -LOC(4.13): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-3*2-1), %o2 - - - -LOC(2.15): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 3, accumulated bits -3 - bl LOC(3.13) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits -5 - bl LOC(4.11) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-5*2+1), %o2 - -LOC(4.11): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-5*2-1), %o2 - - -LOC(3.13): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits -7 - bl LOC(4.9) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-7*2+1), %o2 - -LOC(4.9): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-7*2-1), %o2 - - - - - 9: -LOC(end_regular_divide): - subcc %o4, 1, %o4 - bge LOC(divloop) - tst %o3 - bl,a LOC(got_result) - ! non-restoring fixup here (one instruction only!) - sub %o2, 1, %o2 - - -LOC(got_result): - - retl - mov %o2, %o0 - -END(.udiv) -strong_alias (.udiv, __wrap_.udiv) diff --git a/sysdeps/sparc/sparc32/umul.S b/sysdeps/sparc/sparc32/umul.S deleted file mode 100644 index 096554a2bc..0000000000 --- a/sysdeps/sparc/sparc32/umul.S +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Unsigned multiply. Returns %o0 * %o1 in %o1%o0 (i.e., %o1 holds the - * upper 32 bits of the 64-bit product). - * - * This code optimizes short (less than 13-bit) multiplies. Short - * multiplies require 25 instruction cycles, and long ones require - * 45 instruction cycles. - * - * On return, overflow has occurred (%o1 is not zero) if and only if - * the Z condition code is clear, allowing, e.g., the following: - * - * call .umul - * nop - * bnz overflow (or tnz) - */ - -#include - -ENTRY(.umul) - or %o0, %o1, %o4 - mov %o0, %y ! multiplier -> Y - andncc %o4, 0xfff, %g0 ! test bits 12..31 of *both* args - be LOC(mul_shortway) ! if zero, can do it the short way - andcc %g0, %g0, %o4 ! zero the partial product; clear N & V - - /* - * Long multiply. 32 steps, followed by a final shift step. - */ - mulscc %o4, %o1, %o4 ! 1 - mulscc %o4, %o1, %o4 ! 2 - mulscc %o4, %o1, %o4 ! 3 - mulscc %o4, %o1, %o4 ! 4 - mulscc %o4, %o1, %o4 ! 5 - mulscc %o4, %o1, %o4 ! 6 - mulscc %o4, %o1, %o4 ! 7 - mulscc %o4, %o1, %o4 ! 8 - mulscc %o4, %o1, %o4 ! 9 - mulscc %o4, %o1, %o4 ! 10 - mulscc %o4, %o1, %o4 ! 11 - mulscc %o4, %o1, %o4 ! 12 - mulscc %o4, %o1, %o4 ! 13 - mulscc %o4, %o1, %o4 ! 14 - mulscc %o4, %o1, %o4 ! 15 - mulscc %o4, %o1, %o4 ! 16 - mulscc %o4, %o1, %o4 ! 17 - mulscc %o4, %o1, %o4 ! 18 - mulscc %o4, %o1, %o4 ! 19 - mulscc %o4, %o1, %o4 ! 20 - mulscc %o4, %o1, %o4 ! 21 - mulscc %o4, %o1, %o4 ! 22 - mulscc %o4, %o1, %o4 ! 23 - mulscc %o4, %o1, %o4 ! 24 - mulscc %o4, %o1, %o4 ! 25 - mulscc %o4, %o1, %o4 ! 26 - mulscc %o4, %o1, %o4 ! 27 - mulscc %o4, %o1, %o4 ! 28 - mulscc %o4, %o1, %o4 ! 29 - mulscc %o4, %o1, %o4 ! 30 - mulscc %o4, %o1, %o4 ! 31 - mulscc %o4, %o1, %o4 ! 32 - mulscc %o4, %g0, %o4 ! final shift - - /* - * Normally, with the shift-and-add approach, if both numbers are - * positive you get the correct result. With 32-bit two's-complement - * numbers, -x is represented as - * - * x 32 - * ( 2 - ------ ) mod 2 * 2 - * 32 - * 2 - * - * (the `mod 2' subtracts 1 from 1.bbbb). To avoid lots of 2^32s, - * we can treat this as if the radix point were just to the left - * of the sign bit (multiply by 2^32), and get - * - * -x = (2 - x) mod 2 - * - * Then, ignoring the `mod 2's for convenience: - * - * x * y = xy - * -x * y = 2y - xy - * x * -y = 2x - xy - * -x * -y = 4 - 2x - 2y + xy - * - * For signed multiplies, we subtract (x << 32) from the partial - * product to fix this problem for negative multipliers (see mul.s). - * Because of the way the shift into the partial product is calculated - * (N xor V), this term is automatically removed for the multiplicand, - * so we don't have to adjust. - * - * But for unsigned multiplies, the high order bit wasn't a sign bit, - * and the correction is wrong. So for unsigned multiplies where the - * high order bit is one, we end up with xy - (y << 32). To fix it - * we add y << 32. - */ -#if 0 - tst %o1 - bl,a 1f ! if %o1 < 0 (high order bit = 1), - add %o4, %o0, %o4 ! %o4 += %o0 (add y to upper half) -1: rd %y, %o0 ! get lower half of product - retl - addcc %o4, %g0, %o1 ! put upper half in place and set Z for %o1==0 -#else - /* Faster code from tege@sics.se. */ - sra %o1, 31, %o2 ! make mask from sign bit - and %o0, %o2, %o2 ! %o2 = 0 or %o0, depending on sign of %o1 - rd %y, %o0 ! get lower half of product - retl - addcc %o4, %o2, %o1 ! add compensation and put upper half in place -#endif - -LOC(mul_shortway): - /* - * Short multiply. 12 steps, followed by a final shift step. - * The resulting bits are off by 12 and (32-12) = 20 bit positions, - * but there is no problem with %o0 being negative (unlike above), - * and overflow is impossible (the answer is at most 24 bits long). - */ - mulscc %o4, %o1, %o4 ! 1 - mulscc %o4, %o1, %o4 ! 2 - mulscc %o4, %o1, %o4 ! 3 - mulscc %o4, %o1, %o4 ! 4 - mulscc %o4, %o1, %o4 ! 5 - mulscc %o4, %o1, %o4 ! 6 - mulscc %o4, %o1, %o4 ! 7 - mulscc %o4, %o1, %o4 ! 8 - mulscc %o4, %o1, %o4 ! 9 - mulscc %o4, %o1, %o4 ! 10 - mulscc %o4, %o1, %o4 ! 11 - mulscc %o4, %o1, %o4 ! 12 - mulscc %o4, %g0, %o4 ! final shift - - /* - * %o4 has 20 of the bits that should be in the result; %y has - * the bottom 12 (as %y's top 12). That is: - * - * %o4 %y - * +----------------+----------------+ - * | -12- | -20- | -12- | -20- | - * +------(---------+------)---------+ - * -----result----- - * - * The 12 bits of %o4 left of the `result' area are all zero; - * in fact, all top 20 bits of %o4 are zero. - */ - - rd %y, %o5 - sll %o4, 12, %o0 ! shift middle bits left 12 - srl %o5, 20, %o5 ! shift low bits right 20 - or %o5, %o0, %o0 - retl - addcc %g0, %g0, %o1 ! %o1 = zero, and set Z - -END(.umul) diff --git a/sysdeps/sparc/sparc32/urem.S b/sysdeps/sparc/sparc32/urem.S deleted file mode 100644 index d3a1a441fd..0000000000 --- a/sysdeps/sparc/sparc32/urem.S +++ /dev/null @@ -1,346 +0,0 @@ - /* This file is generated from divrem.m4; DO NOT EDIT! */ -/* - * Division and remainder, from Appendix E of the Sparc Version 8 - * Architecture Manual, with fixes from Gordon Irlam. - */ - -/* - * Input: dividend and divisor in %o0 and %o1 respectively. - * - * m4 parameters: - * .urem name of function to generate - * rem rem=div => %o0 / %o1; rem=rem => %o0 % %o1 - * false false=true => signed; false=false => unsigned - * - * Algorithm parameters: - * N how many bits per iteration we try to get (4) - * WORDSIZE total number of bits (32) - * - * Derived constants: - * TOPBITS number of bits in the top decade of a number - * - * Important variables: - * Q the partial quotient under development (initially 0) - * R the remainder so far, initially the dividend - * ITER number of main division loop iterations required; - * equal to ceil(log2(quotient) / N). Note that this - * is the log base (2^N) of the quotient. - * V the current comparand, initially divisor*2^(ITER*N-1) - * - * Cost: - * Current estimate for non-large dividend is - * ceil(log2(quotient) / N) * (10 + 7N/2) + C - * A large dividend is one greater than 2^(31-TOPBITS) and takes a - * different path, as the upper bits of the quotient must be developed - * one bit at a time. - */ - - - -#include -#include - -ENTRY(.urem) - - ! Ready to divide. Compute size of quotient; scale comparand. - orcc %o1, %g0, %o5 - bne 1f - mov %o0, %o3 - - ! Divide by zero trap. If it returns, return 0 (about as - ! wrong as possible, but that is what SunOS does...). - ta ST_DIV0 - retl - clr %o0 - -1: - cmp %o3, %o5 ! if %o1 exceeds %o0, done - blu LOC(got_result) ! (and algorithm fails otherwise) - clr %o2 - sethi %hi(1 << (32 - 4 - 1)), %g1 - cmp %o3, %g1 - blu LOC(not_really_big) - clr %o4 - - ! Here the dividend is >= 2**(31-N) or so. We must be careful here, - ! as our usual N-at-a-shot divide step will cause overflow and havoc. - ! The number of bits in the result here is N*ITER+SC, where SC <= N. - ! Compute ITER in an unorthodox manner: know we need to shift V into - ! the top decade: so do not even bother to compare to R. - 1: - cmp %o5, %g1 - bgeu 3f - mov 1, %g2 - sll %o5, 4, %o5 - b 1b - add %o4, 1, %o4 - - ! Now compute %g2. - 2: addcc %o5, %o5, %o5 - bcc LOC(not_too_big) - add %g2, 1, %g2 - - ! We get here if the %o1 overflowed while shifting. - ! This means that %o3 has the high-order bit set. - ! Restore %o5 and subtract from %o3. - sll %g1, 4, %g1 ! high order bit - srl %o5, 1, %o5 ! rest of %o5 - add %o5, %g1, %o5 - b LOC(do_single_div) - sub %g2, 1, %g2 - - LOC(not_too_big): - 3: cmp %o5, %o3 - blu 2b - nop - be LOC(do_single_div) - nop - /* NB: these are commented out in the V8-Sparc manual as well */ - /* (I do not understand this) */ - ! %o5 > %o3: went too far: back up 1 step - ! srl %o5, 1, %o5 - ! dec %g2 - ! do single-bit divide steps - ! - ! We have to be careful here. We know that %o3 >= %o5, so we can do the - ! first divide step without thinking. BUT, the others are conditional, - ! and are only done if %o3 >= 0. Because both %o3 and %o5 may have the high- - ! order bit set in the first step, just falling into the regular - ! division loop will mess up the first time around. - ! So we unroll slightly... - LOC(do_single_div): - subcc %g2, 1, %g2 - bl LOC(end_regular_divide) - nop - sub %o3, %o5, %o3 - mov 1, %o2 - b LOC(end_single_divloop) - nop - LOC(single_divloop): - sll %o2, 1, %o2 - bl 1f - srl %o5, 1, %o5 - ! %o3 >= 0 - sub %o3, %o5, %o3 - b 2f - add %o2, 1, %o2 - 1: ! %o3 < 0 - add %o3, %o5, %o3 - sub %o2, 1, %o2 - 2: - LOC(end_single_divloop): - subcc %g2, 1, %g2 - bge LOC(single_divloop) - tst %o3 - b,a LOC(end_regular_divide) - -LOC(not_really_big): -1: - sll %o5, 4, %o5 - cmp %o5, %o3 - bleu 1b - addcc %o4, 1, %o4 - be LOC(got_result) - sub %o4, 1, %o4 - - tst %o3 ! set up for initial iteration -LOC(divloop): - sll %o2, 4, %o2 - ! depth 1, accumulated bits 0 - bl LOC(1.16) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 2, accumulated bits 1 - bl LOC(2.17) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 3, accumulated bits 3 - bl LOC(3.19) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits 7 - bl LOC(4.23) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (7*2+1), %o2 - -LOC(4.23): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (7*2-1), %o2 - - -LOC(3.19): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits 5 - bl LOC(4.21) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (5*2+1), %o2 - -LOC(4.21): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (5*2-1), %o2 - - - -LOC(2.17): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 3, accumulated bits 1 - bl LOC(3.17) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits 3 - bl LOC(4.19) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (3*2+1), %o2 - -LOC(4.19): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (3*2-1), %o2 - - -LOC(3.17): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits 1 - bl LOC(4.17) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (1*2+1), %o2 - -LOC(4.17): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (1*2-1), %o2 - - - - -LOC(1.16): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 2, accumulated bits -1 - bl LOC(2.15) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 3, accumulated bits -1 - bl LOC(3.15) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits -1 - bl LOC(4.15) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-1*2+1), %o2 - -LOC(4.15): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-1*2-1), %o2 - - -LOC(3.15): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits -3 - bl LOC(4.13) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-3*2+1), %o2 - -LOC(4.13): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-3*2-1), %o2 - - - -LOC(2.15): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 3, accumulated bits -3 - bl LOC(3.13) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - ! depth 4, accumulated bits -5 - bl LOC(4.11) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-5*2+1), %o2 - -LOC(4.11): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-5*2-1), %o2 - - -LOC(3.13): - ! remainder is negative - addcc %o3,%o5,%o3 - ! depth 4, accumulated bits -7 - bl LOC(4.9) - srl %o5,1,%o5 - ! remainder is positive - subcc %o3,%o5,%o3 - b 9f - add %o2, (-7*2+1), %o2 - -LOC(4.9): - ! remainder is negative - addcc %o3,%o5,%o3 - b 9f - add %o2, (-7*2-1), %o2 - - - - - 9: -LOC(end_regular_divide): - subcc %o4, 1, %o4 - bge LOC(divloop) - tst %o3 - bl,a LOC(got_result) - ! non-restoring fixup here (one instruction only!) - add %o3, %o1, %o3 - - -LOC(got_result): - - retl - mov %o3, %o0 - -END(.urem) diff --git a/sysdeps/sparc/sparc64/Implies b/sysdeps/sparc/sparc64/Implies deleted file mode 100644 index 7abc50efcc..0000000000 --- a/sysdeps/sparc/sparc64/Implies +++ /dev/null @@ -1,7 +0,0 @@ -wordsize-64 -# SPARC uses IEEE 754 floating point. -ieee754/ldbl-128 -ieee754/dbl-64/wordsize-64 -ieee754/dbl-64 -ieee754/flt-32 -sparc/sparc64/soft-fp diff --git a/sysdeps/sparc/sparc64/Makefile b/sysdeps/sparc/sparc64/Makefile deleted file mode 100644 index a5e403630e..0000000000 --- a/sysdeps/sparc/sparc64/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -sysdep-CFLAGS += -Wa,-Av9a -mvis - -ifeq ($(subdir),string) -sysdep_routines += align-cpy -endif - -ifeq ($(have-as-vis3),yes) -ASFLAGS-.o += -Wa,-Av9d -ASFLAGS-.os += -Wa,-Av9d -ASFLAGS-.op += -Wa,-Av9d -ASFLAGS-.oS += -Wa,-Av9d -endif - -# nscd uses atomic_spin_nop which in turn requires cpu_relax -ifeq ($(subdir),nscd) -routines += cpu_relax -endif - -ifeq ($(subdir),nptl) -libpthread-routines += cpu_relax -endif diff --git a/sysdeps/sparc/sparc64/Versions b/sysdeps/sparc/sparc64/Versions deleted file mode 100644 index 4cef7bcc71..0000000000 --- a/sysdeps/sparc/sparc64/Versions +++ /dev/null @@ -1,14 +0,0 @@ -libc { - GLIBC_2.1.1 { - # SPARC v9 SYSV ABI helper functions - __align_cpy_1; __align_cpy_2; __align_cpy_4; - __align_cpy_8; __align_cpy_16; - } -} -libm { - GLIBC_2.1 { - # A generic bug got this omitted from other configurations' version - # sets, but we always had it. - exp2l; - } -} diff --git a/sysdeps/sparc/sparc64/add_n.S b/sysdeps/sparc/sparc64/add_n.S deleted file mode 100644 index e7f7c46c42..0000000000 --- a/sysdeps/sparc/sparc64/add_n.S +++ /dev/null @@ -1,57 +0,0 @@ -/* SPARC v9 __mpn_add_n -- Add two limb vectors of the same length > 0 and - store sum in a third limb vector. - - Copyright (C) 1995-2017 Free Software Foundation, Inc. - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - - -#include - - -/* INPUT PARAMETERS - res_ptr %o0 - s1_ptr %o1 - s2_ptr %o2 - size %o3 */ - - -ENTRY(__mpn_add_n) - - sub %g0,%o3,%g5 - sllx %o3,3,%g1 - add %o1,%g1,%o1 ! make s1_ptr point at end - add %o2,%g1,%o2 ! make s2_ptr point at end - add %o0,%g1,%o0 ! make res_ptr point at end - mov 0,%o4 ! clear carry variable - sllx %g5,3,%o5 ! compute initial address index - -1: ldx [%o2+%o5],%g1 ! load s2 limb - add %g5,1,%g5 ! increment loop count - ldx [%o1+%o5],%o3 ! load s1 limb - addcc %g1,%o4,%g1 ! add s2 limb and carry variable - movcc %xcc,0,%o4 ! if carry-out, o4 was 1; clear it - addcc %g1,%o3,%g1 ! add s1 limb to sum - stx %g1,[%o0+%o5] ! store result - add %o5,8,%o5 ! increment address index - brnz,pt %g5,1b - movcs %xcc,1,%o4 ! if s1 add gave carry, record it - - retl - mov %o4,%o0 - -END(__mpn_add_n) diff --git a/sysdeps/sparc/sparc64/addmul_1.S b/sysdeps/sparc/sparc64/addmul_1.S deleted file mode 100644 index 96450cc4c8..0000000000 --- a/sysdeps/sparc/sparc64/addmul_1.S +++ /dev/null @@ -1,83 +0,0 @@ -/* SPARC v9 __mpn_addmul_1 -- Multiply a limb vector with a single limb and - add the product to a second limb vector. - - Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include - - -/* INPUT PARAMETERS - res_ptr o0 - s1_ptr o1 - size o2 - s2_limb o3 */ - - -ENTRY(__mpn_addmul_1) - save %sp,-192,%sp - - sub %g0,%i2,%o7 - mov 0,%o0 ! zero cy_limb - sllx %o7,3,%o7 - sethi %hi(0x80000000),%o2 - srl %i3,0,%o1 ! extract low 32 bits of s2_limb - sub %i1,%o7,%o3 - srlx %i3,32,%i3 ! extract high 32 bits of s2_limb - sub %i0,%o7,%o4 - add %o2,%o2,%o2 ! o2 = 0x100000000 - - ! hi ! - ! mid-1 ! - ! mid-2 ! - ! lo ! -1: - ldx [%o3+%o7],%g5 - srl %g5,0,%i0 ! zero hi bits - ldx [%o4+%o7],%l1 - srlx %g5,32,%g5 - mulx %o1,%i0,%i4 ! lo product - mulx %i3,%i0,%i1 ! mid-1 product - mulx %o1,%g5,%l2 ! mid-2 product - mulx %i3,%g5,%i5 ! hi product - srlx %i4,32,%i0 ! extract high 32 bits of lo product... - add %i1,%i0,%i1 ! ...and add it to the mid-1 product - addcc %i1,%l2,%i1 ! add mid products - mov 0,%l0 ! we need the carry from that add... - movcs %xcc,%o2,%l0 ! ...compute it and... - sllx %i1,32,%i0 ! align low bits of mid product - add %i5,%l0,%i5 ! ...add to bit 32 of the hi product - srl %i4,0,%g5 ! zero high 32 bits of lo product - add %i0,%g5,%i0 ! combine into low 64 bits of result - srlx %i1,32,%i1 ! extract high bits of mid product... - addcc %i0,%o0,%i0 ! add cy_limb to low 64 bits of result - add %i5,%i1,%i1 ! ...and add them to the high result - mov 0,%g5 - movcs %xcc,1,%g5 - addcc %l1,%i0,%i0 - stx %i0,[%o4+%o7] - add %g5,1,%l1 - movcs %xcc,%l1,%g5 - addcc %o7,8,%o7 - bne,pt %xcc,1b - add %i1,%g5,%o0 ! compute new cy_limb - - jmpl %i7+8, %g0 - restore %o0,%g0,%o0 - -END(__mpn_addmul_1) diff --git a/sysdeps/sparc/sparc64/align-cpy.S b/sysdeps/sparc/sparc64/align-cpy.S deleted file mode 100644 index e36799a405..0000000000 --- a/sysdeps/sparc/sparc64/align-cpy.S +++ /dev/null @@ -1,84 +0,0 @@ -/* Aligned copy routines specified by Sparc V9 ABI. - For 64-bit sparc. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text - .align 8 -ENTRY(__align_cpy_8) -10: cmp %o0, %o1 - be,pn %xcc, 9f - mov %o0, %o3 - subcc %o2, 0x08, %o2 - be,pn %xcc, 8f -1: ldx [%o1 + 0x00], %o5 - ldx [%o1 + 0x08], %o4 - subcc %o2, 0x10, %o2 - add %o1, 0x10, %o1 - stx %o5, [%o3 + 0x00] - stx %o4, [%o3 + 0x08] - bg,pt %xcc, 1b - add %o3, 0x10, %o3 - bne,pn %xcc, 9f - nop - ldx [%o1 + 0x00], %o5 -8: stx %o5, [%o3 + 0x00] -9: retl - nop -END(__align_cpy_8) - - .align 8 -ENTRY(__align_cpy_4) -20: cmp %o0, %o1 - be,pn %xcc, 9f - mov %o0, %o3 - subcc %o2, 0x04, %o2 - be,pn %xcc, 8f -1: lduw [%o1 + 0x00], %o5 - lduw [%o1 + 0x04], %o4 - subcc %o2, 0x08, %o2 - add %o1, 0x08, %o1 - stw %o5, [%o3 + 0x00] - stw %o4, [%o3 + 0x04] - bg,pt %xcc, 1b - add %o3, 0x08, %o3 - bne,pn %xcc, 9f - nop - lduw [%o1 + 0x00], %o5 -8: stw %o5, [%o3 + 0x00] -9: retl - nop -END(__align_cpy_4) - - .align 8 -ENTRY(__align_cpy_2) - or %o0, %o1, %o3 - or %o2, %o3, %o3 - andcc %o3, 0x7, %g0 - be,pt %xcc, 10b - andcc %o3, 0x3, %g0 - be,pt %xcc, 20b - mov %o7, %g1 - call HIDDEN_JUMPTARGET(memcpy) - mov %o7, %g1 -END(__align_cpy_2) - -weak_alias (__align_cpy_8, __align_cpy_16) -weak_alias (__align_cpy_2, __align_cpy_1) diff --git a/sysdeps/sparc/sparc64/atomic-machine.h b/sysdeps/sparc/sparc64/atomic-machine.h deleted file mode 100644 index 72009329c3..0000000000 --- a/sysdeps/sparc/sparc64/atomic-machine.h +++ /dev/null @@ -1,129 +0,0 @@ -/* Atomic operations. sparc64 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int16_t atomic16_t; -typedef uint16_t uatomic16_t; -typedef int_fast16_t atomic_fast16_t; -typedef uint_fast16_t uatomic_fast16_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#define __HAVE_64B_ATOMICS 1 -#define USE_ATOMIC_COMPILER_BUILTINS 0 - -/* XXX Is this actually correct? */ -#define ATOMIC_EXCHANGE_USES_CAS 1 - - -#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) - -#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) - -#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ -({ \ - __typeof (*(mem)) __acev_tmp; \ - __typeof (mem) __acev_mem = (mem); \ - if (__builtin_constant_p (oldval) && (oldval) == 0) \ - __asm __volatile ("cas [%3], %%g0, %0" \ - : "=r" (__acev_tmp), "=m" (*__acev_mem) \ - : "m" (*__acev_mem), "r" (__acev_mem), \ - "0" (newval) : "memory"); \ - else \ - __asm __volatile ("cas [%4], %2, %0" \ - : "=r" (__acev_tmp), "=m" (*__acev_mem) \ - : "r" (oldval), "m" (*__acev_mem), "r" (__acev_mem), \ - "0" (newval) : "memory"); \ - __acev_tmp; }) - -#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ -({ \ - __typeof (*(mem)) __acev_tmp; \ - __typeof (mem) __acev_mem = (mem); \ - if (__builtin_constant_p (oldval) && (oldval) == 0) \ - __asm __volatile ("casx [%3], %%g0, %0" \ - : "=r" (__acev_tmp), "=m" (*__acev_mem) \ - : "m" (*__acev_mem), "r" (__acev_mem), \ - "0" ((long) (newval)) : "memory"); \ - else \ - __asm __volatile ("casx [%4], %2, %0" \ - : "=r" (__acev_tmp), "=m" (*__acev_mem) \ - : "r" ((long) (oldval)), "m" (*__acev_mem), \ - "r" (__acev_mem), "0" ((long) (newval)) : "memory"); \ - __acev_tmp; }) - -#define atomic_exchange_acq(mem, newvalue) \ - ({ __typeof (*(mem)) __oldval, __val; \ - __typeof (mem) __memp = (mem); \ - __typeof (*(mem)) __value = (newvalue); \ - \ - if (sizeof (*(mem)) == 4) \ - __asm ("swap %0, %1" \ - : "=m" (*__memp), "=r" (__oldval) \ - : "m" (*__memp), "1" (__value) : "memory"); \ - else \ - { \ - __val = *__memp; \ - do \ - { \ - __oldval = __val; \ - __val = atomic_compare_and_exchange_val_acq (__memp, __value, \ - __oldval); \ - } \ - while (__builtin_expect (__val != __oldval, 0)); \ - } \ - __oldval; }) - -#define atomic_compare_and_exchange_val_24_acq(mem, newval, oldval) \ - atomic_compare_and_exchange_val_acq (mem, newval, oldval) - -#define atomic_exchange_24_rel(mem, newval) \ - atomic_exchange_rel (mem, newval) - -#define atomic_full_barrier() \ - __asm __volatile ("membar #LoadLoad | #LoadStore" \ - " | #StoreLoad | #StoreStore" : : : "memory") -#define atomic_read_barrier() \ - __asm __volatile ("membar #LoadLoad | #LoadStore" : : : "memory") -#define atomic_write_barrier() \ - __asm __volatile ("membar #LoadStore | #StoreStore" : : : "memory") - -extern void __cpu_relax (void); -#define atomic_spin_nop() __cpu_relax () diff --git a/sysdeps/sparc/sparc64/backtrace.h b/sysdeps/sparc/sparc64/backtrace.h deleted file mode 100644 index b9c95c51cf..0000000000 --- a/sysdeps/sparc/sparc64/backtrace.h +++ /dev/null @@ -1,7 +0,0 @@ -/* Private macros for guiding the backtrace implementation, sparc64 - version. */ - -#define backtrace_flush_register_windows() \ - asm volatile ("flushw") - -#define BACKTRACE_STACK_BIAS STACK_BIAS diff --git a/sysdeps/sparc/sparc64/bits/wordsize.h b/sysdeps/sparc/sparc64/bits/wordsize.h deleted file mode 100644 index 2f66f10d72..0000000000 --- a/sysdeps/sparc/sparc64/bits/wordsize.h +++ /dev/null @@ -1,11 +0,0 @@ -/* Determine the wordsize from the preprocessor defines. */ - -#if defined __arch64__ || defined __sparcv9 -# define __WORDSIZE 64 -# define __WORDSIZE_TIME64_COMPAT32 1 -#else -# define __WORDSIZE 32 -# define __WORDSIZE_TIME64_COMPAT32 0 -# define __WORDSIZE32_SIZE_ULONG 0 -# define __WORDSIZE32_PTRDIFF_LONG 0 -#endif diff --git a/sysdeps/sparc/sparc64/bzero.c b/sysdeps/sparc/sparc64/bzero.c deleted file mode 100644 index 37f0f6f993..0000000000 --- a/sysdeps/sparc/sparc64/bzero.c +++ /dev/null @@ -1 +0,0 @@ -/* bzero is in memset.S */ diff --git a/sysdeps/sparc/sparc64/cpu_relax.S b/sysdeps/sparc/sparc64/cpu_relax.S deleted file mode 100644 index 5271164607..0000000000 --- a/sysdeps/sparc/sparc64/cpu_relax.S +++ /dev/null @@ -1,67 +0,0 @@ -/* CPU strand yielding for busy loops. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -__cpu_relax_generic: - rd %ccr, %g0 - rd %ccr, %g0 - rd %ccr, %g0 - retl - nop - .size __cpu_relax_generic,.-__cpu_relax_generic - -__cpu_relax_pause: - wr %g0, 128, %asr27 - retl - nop - .size __cpu_relax_pause,.-__cpu_relax_pause - -ENTRY(__cpu_relax) - .type __cpu_relax, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_PAUSE, %o1 - andcc %o0, %o1, %g0 - be 1f - nop -# ifdef SHARED - sethi %gdop_hix22(__cpu_relax_pause), %o1 - xor %o1, %gdop_lox10(__cpu_relax_pause), %o1 -# else - set __cpu_relax_pause, %o1 -# endif - ba 10f - nop -1: -# ifdef SHARED - sethi %gdop_hix22(__cpu_relax_generic), %o1 - xor %o1, %gdop_lox10(__cpu_relax_generic), %o1 -# else - set __cpu_relax_generic, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__cpu_relax) diff --git a/sysdeps/sparc/sparc64/dl-irel.h b/sysdeps/sparc/sparc64/dl-irel.h deleted file mode 100644 index dfd4637557..0000000000 --- a/sysdeps/sparc/sparc64/dl-irel.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Machine-dependent ELF indirect relocation inline functions. - SPARC 64-bit version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_IREL_H -#define _DL_IREL_H - -#include -#include -#include -#include - -#define ELF_MACHINE_IRELA 1 - -static inline Elf64_Addr -__attribute ((always_inline)) -elf_ifunc_invoke (Elf64_Addr addr) -{ - return ((Elf64_Addr (*) (int)) (addr)) (GLRO(dl_hwcap)); -} - -static inline void -__attribute ((always_inline)) -elf_irela (const Elf64_Rela *reloc) -{ - unsigned int r_type = (reloc->r_info & 0xff); - - if (__glibc_likely (r_type == R_SPARC_IRELATIVE)) - { - Elf64_Addr *const reloc_addr = (void *) reloc->r_offset; - Elf64_Addr value = elf_ifunc_invoke(reloc->r_addend); - *reloc_addr = value; - } - else if (__glibc_likely (r_type == R_SPARC_JMP_IREL)) - { - Elf64_Addr *const reloc_addr = (void *) reloc->r_offset; - Elf64_Addr value = elf_ifunc_invoke(reloc->r_addend); - struct link_map map = { .l_addr = 0 }; - - /* 'high' is always zero, for large PLT entries the linker - emits an R_SPARC_IRELATIVE. */ - sparc64_fixup_plt (&map, reloc, reloc_addr, value, 0, 0); - } - else if (r_type == R_SPARC_NONE) - ; - else - __libc_fatal ("unexpected reloc type in static binary"); -} - -#endif /* dl-irel.h */ diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h deleted file mode 100644 index 1b59d78a25..0000000000 --- a/sysdeps/sparc/sparc64/dl-machine.h +++ /dev/null @@ -1,685 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. Sparc64 version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "sparc64" - -#include -#include -#include -#include -#include - -#define ELF64_R_TYPE_ID(info) ((info) & 0xff) -#define ELF64_R_TYPE_DATA(info) ((info) >> 8) - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf64_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_SPARCV9; -} - -/* We have to do this because elf_machine_{dynamic,load_address} can be - invoked from functions that have no GOT references, and thus the compiler - has no obligation to load the PIC register. */ -#define LOAD_PIC_REG(PIC_REG) \ -do { Elf64_Addr tmp; \ - __asm("sethi %%hi(_GLOBAL_OFFSET_TABLE_-4), %1\n\t" \ - "rd %%pc, %0\n\t" \ - "add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n\t" \ - "add %0, %1, %0" \ - : "=r" (PIC_REG), "=r" (tmp)); \ -} while (0) - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. This must be inlined in a function which - uses global data. */ -static inline Elf64_Addr -elf_machine_dynamic (void) -{ - register Elf64_Addr *elf_pic_register __asm__("%l7"); - - LOAD_PIC_REG (elf_pic_register); - - return *elf_pic_register; -} - -/* Return the run-time load address of the shared object. */ -static inline Elf64_Addr -elf_machine_load_address (void) -{ - register Elf32_Addr *pc __asm ("%o7"); - register Elf64_Addr *got __asm ("%l7"); - - __asm ("sethi %%hi(_GLOBAL_OFFSET_TABLE_-4), %1\n\t" - "call 1f\n\t" - " add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n\t" - "call _DYNAMIC\n\t" - "call _GLOBAL_OFFSET_TABLE_\n" - "1:\tadd %1, %0, %1\n\t" : "=r" (pc), "=r" (got)); - - /* got is now l_addr + _GLOBAL_OFFSET_TABLE_ - *got is _DYNAMIC - pc[2]*4 is l_addr + _DYNAMIC - (long)pc - 8 - pc[3]*4 is l_addr + _GLOBAL_OFFSET_TABLE_ - (long)pc - 12 */ - return (Elf64_Addr) got - *got + (Elf32_Sword) ((pc[2] - pc[3]) * 4) - 4; -} - -static inline Elf64_Addr __attribute__ ((always_inline)) -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf64_Rela *reloc, - Elf64_Addr *reloc_addr, Elf64_Addr value) -{ - sparc64_fixup_plt (map, reloc, reloc_addr, value + reloc->r_addend, - reloc->r_addend, 1); - return value; -} - -/* Return the final value of a plt relocation. */ -static inline Elf64_Addr -elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc, - Elf64_Addr value) -{ - /* Don't add addend here, but in elf_machine_fixup_plt instead. - value + reloc->r_addend is the value which should actually be - stored into .plt data slot. */ - return value; -} - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so - PLT entries should not be allowed to define the value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. */ -#define elf_machine_type_class(type) \ - ((((type) == R_SPARC_JMP_SLOT \ - || ((type) >= R_SPARC_TLS_GD_HI22 && (type) <= R_SPARC_TLS_TPOFF64)) \ - * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_SPARC_COPY) * ELF_RTYPE_CLASS_COPY)) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_SPARC_JMP_SLOT - -/* The SPARC never uses Elf64_Rel relocations. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - if (l->l_info[DT_JMPREL] && lazy) - { - extern void _dl_runtime_resolve_0 (void); - extern void _dl_runtime_resolve_1 (void); - extern void _dl_runtime_profile_0 (void); - extern void _dl_runtime_profile_1 (void); - Elf64_Addr res0_addr, res1_addr; - unsigned int *plt = (void *) D_PTR (l, l_info[DT_PLTGOT]); - - if (__builtin_expect(profile, 0)) - { - res0_addr = (Elf64_Addr) &_dl_runtime_profile_0; - res1_addr = (Elf64_Addr) &_dl_runtime_profile_1; - - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - GL(dl_profile_map) = l; - } - else - { - res0_addr = (Elf64_Addr) &_dl_runtime_resolve_0; - res1_addr = (Elf64_Addr) &_dl_runtime_resolve_1; - } - - /* PLT0 looks like: - - sethi %uhi(_dl_runtime_{resolve,profile}_0), %g4 - sethi %hi(_dl_runtime_{resolve,profile}_0), %g5 - or %g4, %ulo(_dl_runtime_{resolve,profile}_0), %g4 - or %g5, %lo(_dl_runtime_{resolve,profile}_0), %g5 - sllx %g4, 32, %g4 - add %g4, %g5, %g5 - jmpl %g5, %g4 - nop - */ - - plt[0] = 0x09000000 | (res0_addr >> (64 - 22)); - plt[1] = 0x0b000000 | ((res0_addr >> 10) & 0x003fffff); - plt[2] = 0x88112000 | ((res0_addr >> 32) & 0x3ff); - plt[3] = 0x8a116000 | (res0_addr & 0x3ff); - plt[4] = 0x89293020; - plt[5] = 0x8a010005; - plt[6] = 0x89c14000; - plt[7] = 0x01000000; - - /* PLT1 looks like: - - sethi %uhi(_dl_runtime_{resolve,profile}_1), %g4 - sethi %hi(_dl_runtime_{resolve,profile}_1), %g5 - or %g4, %ulo(_dl_runtime_{resolve,profile}_1), %g4 - or %g5, %lo(_dl_runtime_{resolve,profile}_1), %g5 - sllx %g4, 32, %g4 - add %g4, %g5, %g5 - jmpl %g5, %g4 - nop - */ - - plt[8] = 0x09000000 | (res1_addr >> (64 - 22)); - plt[9] = 0x0b000000 | ((res1_addr >> 10) & 0x003fffff); - plt[10] = 0x88112000 | ((res1_addr >> 32) & 0x3ff); - plt[11] = 0x8a116000 | (res1_addr & 0x3ff); - plt[12] = 0x89293020; - plt[13] = 0x8a010005; - plt[14] = 0x89c14000; - plt[15] = 0x01000000; - - /* Now put the magic cookie at the beginning of .PLT2 - Entry .PLT3 is unused by this implementation. */ - *((struct link_map **)(&plt[16])) = l; - - if (__builtin_expect (l->l_info[VALIDX(DT_GNU_PRELINKED)] != NULL, 0) - || __builtin_expect (l->l_info [VALIDX (DT_GNU_LIBLISTSZ)] != NULL, 0)) - { - /* Need to reinitialize .plt to undo prelinking. */ - Elf64_Rela *rela = (Elf64_Rela *) D_PTR (l, l_info[DT_JMPREL]); - Elf64_Rela *relaend - = (Elf64_Rela *) ((char *) rela - + l->l_info[DT_PLTRELSZ]->d_un.d_val); - - /* prelink must ensure there are no R_SPARC_NONE relocs left - in .rela.plt. */ - while (rela < relaend) - { - if (__builtin_expect (rela->r_addend, 0) != 0) - { - Elf64_Addr slot = ((rela->r_offset + l->l_addr + 0x400 - - (Elf64_Addr) plt) - / 0x1400) * 0x1400 - + (Elf64_Addr) plt - 0x400; - /* ldx [%o7 + X], %g1 */ - unsigned int first_ldx = *(unsigned int *)(slot + 12); - Elf64_Addr ptr = slot + (first_ldx & 0xfff) + 4; - - *(Elf64_Addr *) (rela->r_offset + l->l_addr) - = (Elf64_Addr) plt - - (slot + ((rela->r_offset + l->l_addr - ptr) / 8) * 24 - + 4); - ++rela; - continue; - } - - *(unsigned int *) (rela->r_offset + l->l_addr) - = 0x03000000 | (rela->r_offset + l->l_addr - (Elf64_Addr) plt); - *(unsigned int *) (rela->r_offset + l->l_addr + 4) - = 0x30680000 | ((((Elf64_Addr) plt + 32 - rela->r_offset - - l->l_addr - 4) >> 2) & 0x7ffff); - __asm __volatile ("flush %0" : : "r" (rela->r_offset - + l->l_addr)); - __asm __volatile ("flush %0+4" : : "r" (rela->r_offset - + l->l_addr)); - ++rela; - } - } - } - - return lazy; -} - -/* The PLT uses Elf64_Rela relocs. */ -#define elf_machine_relplt elf_machine_rela - -/* Undo the sub %sp, 6*8, %sp; add %sp, STACK_BIAS + 22*8, %o0 below - (but w/o STACK_BIAS) to get at the value we want in __libc_stack_end. */ -#define DL_STACK_END(cookie) \ - ((void *) (((long) (cookie)) - (22 - 6) * 8)) - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_GOT_ADDRESS(pic_reg, reg, symbol) \ - "sethi %gdop_hix22(" #symbol "), " #reg "\n\t" \ - "xor " #reg ", %gdop_lox10(" #symbol "), " #reg "\n\t" \ - "ldx [" #pic_reg " + " #reg "], " #reg ", %gdop(" #symbol ")\n" - -#define __S1(x) #x -#define __S(x) __S1(x) - -#define RTLD_START __asm__ ( "\n" \ -" .text\n" \ -" .global _start\n" \ -" .type _start, @function\n" \ -" .align 32\n" \ -"_start:\n" \ -" /* Make room for functions to drop their arguments on the stack. */\n" \ -" sub %sp, 6*8, %sp\n" \ -" /* Pass pointer to argument block to _dl_start. */\n" \ -" call _dl_start\n" \ -" add %sp," __S(STACK_BIAS) "+22*8,%o0\n" \ -" /* FALLTHRU */\n" \ -" .size _start, .-_start\n" \ -"\n" \ -" .global _dl_start_user\n" \ -" .type _dl_start_user, @function\n" \ -"_dl_start_user:\n" \ -" /* Load the GOT register. */\n" \ -"1: call 11f\n" \ -" sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n" \ -"11: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n" \ -" add %l7, %o7, %l7\n" \ -" /* Save the user entry point address in %l0. */\n" \ -" mov %o0, %l0\n" \ -" /* See if we were run as a command with the executable file name as an\n" \ -" extra leading argument. If so, we must shift things around since we\n" \ -" must keep the stack doubleword aligned. */\n" \ - RTLD_GOT_ADDRESS(%l7, %g5, _dl_skip_args) \ -" ld [%g5], %i0\n" \ -" brz,pt %i0, 2f\n" \ -" ldx [%sp + " __S(STACK_BIAS) " + 22*8], %i5\n" \ -" /* Find out how far to shift. */\n" \ -" sub %i5, %i0, %i5\n" \ -" sllx %i0, 3, %l6\n" \ - RTLD_GOT_ADDRESS(%l7, %l4, _dl_argv) \ -" stx %i5, [%sp + " __S(STACK_BIAS) " + 22*8]\n" \ -" add %sp, " __S(STACK_BIAS) " + 23*8, %i1\n" \ -" add %i1, %l6, %i2\n" \ -" ldx [%l4], %l5\n" \ -" /* Copy down argv. */\n" \ -"12: ldx [%i2], %i3\n" \ -" add %i2, 8, %i2\n" \ -" stx %i3, [%i1]\n" \ -" brnz,pt %i3, 12b\n" \ -" add %i1, 8, %i1\n" \ -" sub %l5, %l6, %l5\n" \ -" /* Copy down envp. */\n" \ -"13: ldx [%i2], %i3\n" \ -" add %i2, 8, %i2\n" \ -" stx %i3, [%i1]\n" \ -" brnz,pt %i3, 13b\n" \ -" add %i1, 8, %i1\n" \ -" /* Copy down auxiliary table. */\n" \ -"14: ldx [%i2], %i3\n" \ -" ldx [%i2 + 8], %i4\n" \ -" add %i2, 16, %i2\n" \ -" stx %i3, [%i1]\n" \ -" stx %i4, [%i1 + 8]\n" \ -" brnz,pt %i3, 14b\n" \ -" add %i1, 16, %i1\n" \ -" stx %l5, [%l4]\n" \ -" /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */\n" \ -"2:\t" RTLD_GOT_ADDRESS(%l7, %o0, _rtld_local) \ -" sllx %i5, 3, %o3\n" \ -" add %sp, " __S(STACK_BIAS) " + 23*8, %o2\n" \ -" add %o3, 8, %o3\n" \ -" mov %i5, %o1\n" \ -" add %o2, %o3, %o3\n" \ -" call _dl_init\n" \ -" ldx [%o0], %o0\n" \ -" /* Pass our finalizer function to the user in %g1. */\n" \ - RTLD_GOT_ADDRESS(%l7, %g1, _dl_fini) \ -" /* Jump to the user's entry point and deallocate the extra stack we got. */\n" \ -" jmp %l0\n" \ -" add %sp, 6*8, %sp\n" \ -" .size _dl_start_user, . - _dl_start_user\n" \ -" .previous\n"); - -#endif /* dl_machine_h */ - -#define ARCH_LA_PLTENTER sparc64_gnu_pltenter -#define ARCH_LA_PLTEXIT sparc64_gnu_pltexit - -#ifdef RESOLVE_MAP - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, - const Elf64_Sym *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - Elf64_Addr *const reloc_addr = reloc_addr_arg; -#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP - const Elf64_Sym *const refsym = sym; -#endif - Elf64_Addr value; - const unsigned long int r_type = ELF64_R_TYPE_ID (reloc->r_info); -#if !defined RESOLVE_CONFLICT_FIND_MAP - struct link_map *sym_map = NULL; -#endif - -#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; make the - reference weak so static programs can still link. This declaration - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) - because rtld.c contains the common defn for _dl_rtld_map, which is - incompatible with a weak decl in the same file. */ - weak_extern (_dl_rtld_map); -#endif - - if (__glibc_unlikely (r_type == R_SPARC_NONE)) - return; - - if (__glibc_unlikely (r_type == R_SPARC_SIZE64)) - { - *reloc_addr = sym->st_size + reloc->r_addend; - return; - } - -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC - if (__glibc_unlikely (r_type == R_SPARC_RELATIVE)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - if (map != &_dl_rtld_map) /* Already done in rtld itself. */ -# endif - *reloc_addr += map->l_addr + reloc->r_addend; - return; - } -#endif - -#ifndef RESOLVE_CONFLICT_FIND_MAP - if (__builtin_expect (ELF64_ST_BIND (sym->st_info) == STB_LOCAL, 0) - && sym->st_shndx != SHN_UNDEF) - { - value = map->l_addr; - } - else - { - sym_map = RESOLVE_MAP (&sym, version, r_type); - value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; - } -#else - value = 0; -#endif - - value += reloc->r_addend; /* Assume copy relocs have zero addend. */ - - if (sym != NULL - && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0) - && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) - && __builtin_expect (!skip_ifunc, 1)) - value = ((Elf64_Addr (*) (int)) value) (GLRO(dl_hwcap)); - - switch (r_type) - { -#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP - case R_SPARC_COPY: - if (sym == NULL) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (sym->st_size > refsym->st_size - || (GLRO(dl_verbose) && sym->st_size < refsym->st_size)) - { - const char *strtab; - - strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - break; -#endif - case R_SPARC_64: - case R_SPARC_GLOB_DAT: - *reloc_addr = value; - break; - case R_SPARC_IRELATIVE: - value = ((Elf64_Addr (*) (int)) value) (GLRO(dl_hwcap)); - *reloc_addr = value; - break; - case R_SPARC_JMP_IREL: - value = ((Elf64_Addr (*) (int)) value) (GLRO(dl_hwcap)); - /* 'high' is always zero, for large PLT entries the linker - emits an R_SPARC_IRELATIVE. */ -#ifdef RESOLVE_CONFLICT_FIND_MAP - sparc64_fixup_plt (NULL, reloc, reloc_addr, value, 0, 0); -#else - sparc64_fixup_plt (map, reloc, reloc_addr, value, 0, 0); -#endif - break; - case R_SPARC_JMP_SLOT: -#ifdef RESOLVE_CONFLICT_FIND_MAP - /* R_SPARC_JMP_SLOT conflicts against .plt[32768+] - relocs should be turned into R_SPARC_64 relocs - in .gnu.conflict section. - r_addend non-zero does not mean it is a .plt[32768+] - reloc, instead it is the actual address of the function - to call. */ - sparc64_fixup_plt (NULL, reloc, reloc_addr, value, 0, 0); -#else - sparc64_fixup_plt (map, reloc, reloc_addr, value, reloc->r_addend, 0); -#endif - break; -#ifndef RESOLVE_CONFLICT_FIND_MAP - case R_SPARC_TLS_DTPMOD64: - /* Get the information from the link map returned by the - resolv function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; - break; - case R_SPARC_TLS_DTPOFF64: - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ - *reloc_addr = (sym == NULL ? 0 : sym->st_value) + reloc->r_addend; - break; - case R_SPARC_TLS_TPOFF64: - /* The offset is negative, forward from the thread pointer. */ - /* We know the offset of object the symbol is contained in. - It is a negative value which will be added to the - thread pointer. */ - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = sym->st_value - sym_map->l_tls_offset - + reloc->r_addend; - } - break; -# ifndef RTLD_BOOTSTRAP - case R_SPARC_TLS_LE_HIX22: - case R_SPARC_TLS_LE_LOX10: - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - value = sym->st_value - sym_map->l_tls_offset - + reloc->r_addend; - if (r_type == R_SPARC_TLS_LE_HIX22) - *(unsigned int *)reloc_addr = - ((*(unsigned int *)reloc_addr & 0xffc00000) - | (((~value) >> 10) & 0x3fffff)); - else - *(unsigned int *)reloc_addr = - ((*(unsigned int *)reloc_addr & 0xffffe000) | (value & 0x3ff) - | 0x1c00); - } - break; -# endif -#endif -#ifndef RTLD_BOOTSTRAP - case R_SPARC_8: - *(char *) reloc_addr = value; - break; - case R_SPARC_16: - *(short *) reloc_addr = value; - break; - case R_SPARC_32: - *(unsigned int *) reloc_addr = value; - break; - case R_SPARC_DISP8: - *(char *) reloc_addr = (value - (Elf64_Addr) reloc_addr); - break; - case R_SPARC_DISP16: - *(short *) reloc_addr = (value - (Elf64_Addr) reloc_addr); - break; - case R_SPARC_DISP32: - *(unsigned int *) reloc_addr = (value - (Elf64_Addr) reloc_addr); - break; - case R_SPARC_DISP64: - *reloc_addr = (value - (Elf64_Addr) reloc_addr); - break; - case R_SPARC_REGISTER: - *reloc_addr = value; - break; - case R_SPARC_WDISP30: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & 0xc0000000) | - (((value - (Elf64_Addr) reloc_addr) >> 2) & 0x3fffffff)); - break; - - /* MEDLOW code model relocs */ - case R_SPARC_LO10: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & ~0x3ff) | - (value & 0x3ff)); - break; - case R_SPARC_HI22: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & 0xffc00000) | - ((value >> 10) & 0x3fffff)); - break; - case R_SPARC_OLO10: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & ~0x1fff) | - (((value & 0x3ff) + ELF64_R_TYPE_DATA (reloc->r_info)) & 0x1fff)); - break; - - /* ABS34 code model reloc */ - case R_SPARC_H34: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & 0xffc00000) | - ((value >> 12) & 0x3fffff)); - - /* MEDMID code model relocs */ - case R_SPARC_H44: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & 0xffc00000) | - ((value >> 22) & 0x3fffff)); - break; - case R_SPARC_M44: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & ~0x3ff) | - ((value >> 12) & 0x3ff)); - break; - case R_SPARC_L44: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & ~0xfff) | - (value & 0xfff)); - break; - - /* MEDANY code model relocs */ - case R_SPARC_HH22: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & 0xffc00000) | - (value >> 42)); - break; - case R_SPARC_HM10: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & ~0x3ff) | - ((value >> 32) & 0x3ff)); - break; - case R_SPARC_LM22: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & 0xffc00000) | - ((value >> 10) & 0x003fffff)); - break; - case R_SPARC_UA16: - ((unsigned char *) reloc_addr_arg) [0] = value >> 8; - ((unsigned char *) reloc_addr_arg) [1] = value; - break; - case R_SPARC_UA32: - ((unsigned char *) reloc_addr_arg) [0] = value >> 24; - ((unsigned char *) reloc_addr_arg) [1] = value >> 16; - ((unsigned char *) reloc_addr_arg) [2] = value >> 8; - ((unsigned char *) reloc_addr_arg) [3] = value; - break; - case R_SPARC_UA64: - if (! ((long) reloc_addr_arg & 3)) - { - /* Common in .eh_frame */ - ((unsigned int *) reloc_addr_arg) [0] = value >> 32; - ((unsigned int *) reloc_addr_arg) [1] = value; - break; - } - ((unsigned char *) reloc_addr_arg) [0] = value >> 56; - ((unsigned char *) reloc_addr_arg) [1] = value >> 48; - ((unsigned char *) reloc_addr_arg) [2] = value >> 40; - ((unsigned char *) reloc_addr_arg) [3] = value >> 32; - ((unsigned char *) reloc_addr_arg) [4] = value >> 24; - ((unsigned char *) reloc_addr_arg) [5] = value >> 16; - ((unsigned char *) reloc_addr_arg) [6] = value >> 8; - ((unsigned char *) reloc_addr_arg) [7] = value; - break; -#endif -#if !defined RTLD_BOOTSTRAP || defined _NDEBUG - default: - _dl_reloc_bad_type (map, r_type, 0); - break; -#endif - } -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, - void *const reloc_addr_arg) -{ - Elf64_Addr *const reloc_addr = reloc_addr_arg; - *reloc_addr = l_addr + reloc->r_addend; -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf64_Addr l_addr, const Elf64_Rela *reloc, - int skip_ifunc) -{ - Elf64_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); - const unsigned int r_type = ELF64_R_TYPE (reloc->r_info); - - if (__glibc_likely (r_type == R_SPARC_JMP_SLOT)) - ; - else if (r_type == R_SPARC_JMP_IREL - || r_type == R_SPARC_IRELATIVE) - { - Elf64_Addr value = map->l_addr + reloc->r_addend; - if (__glibc_likely (!skip_ifunc)) - value = ((Elf64_Addr (*) (int)) value) (GLRO(dl_hwcap)); - if (r_type == R_SPARC_JMP_IREL) - { - /* 'high' is always zero, for large PLT entries the linker - emits an R_SPARC_IRELATIVE. */ - sparc64_fixup_plt (map, reloc, reloc_addr, value, 0, 1); - } - else - *reloc_addr = value; - } - else if (r_type == R_SPARC_NONE) - ; - else - _dl_reloc_bad_type (map, r_type, 1); -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/sparc/sparc64/dl-plt.h b/sysdeps/sparc/sparc64/dl-plt.h deleted file mode 100644 index daad1063b3..0000000000 --- a/sysdeps/sparc/sparc64/dl-plt.h +++ /dev/null @@ -1,167 +0,0 @@ -/* PLT fixups. Sparc 64-bit version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_PLT_H -#define _DL_PLT_H - -/* We have 4 cases to handle. And we code different code sequences - for each one. I love V9 code models... */ -static inline void __attribute__ ((always_inline)) -sparc64_fixup_plt (struct link_map *map, const Elf64_Rela *reloc, - Elf64_Addr *reloc_addr, Elf64_Addr value, - Elf64_Addr high, int t) -{ - unsigned int *insns = (unsigned int *) reloc_addr; - Elf64_Addr plt_vaddr = (Elf64_Addr) reloc_addr; - Elf64_Sxword disp = value - plt_vaddr; - - /* 't' is '0' if we are resolving this PLT entry for RTLD bootstrap, - in which case we'll be resolving all PLT entries and thus can - optimize by overwriting instructions starting at the first PLT entry - instruction and we need not be mindful of thread safety. - - Otherwise, 't' is '1'. - - Now move plt_vaddr up to the call instruction. */ - plt_vaddr += ((t + 1) * 4); - - /* PLT entries .PLT32768 and above look always the same. */ - if (__builtin_expect (high, 0) != 0) - { - *reloc_addr = value - map->l_addr; - } - /* Near destination. */ - else if (disp >= -0x800000 && disp < 0x800000) - { - unsigned int insn; - - /* ba,a */ - insn = 0x30800000 | ((disp >> 2) & 0x3fffff); - - if (disp >= -0x100000 && disp < 0x100000) - { - /* ba,a,pt %icc */ - insn = 0x30480000 | ((disp >> 2) & 0x07ffff); - } - - /* As this is just one instruction, it is thread safe and so we - can avoid the unnecessary sethi FOO, %g1. Each 64-bit PLT - entry is 8 instructions long, so we can't run into the 'jmp' - delay slot problems 32-bit PLTs can. */ - insns[0] = insn; - __asm __volatile ("flush %0" : : "r" (insns)); - } - /* 32-bit Sparc style, the target is in the lower 32-bits of - address space. */ - else if (insns += t, (value >> 32) == 0) - { - /* sethi %hi(target), %g1 - jmpl %g1 + %lo(target), %g0 */ - - insns[1] = 0x81c06000 | (value & 0x3ff); - __asm __volatile ("flush %0 + 4" : : "r" (insns)); - - insns[0] = 0x03000000 | ((unsigned int)(value >> 10)); - __asm __volatile ("flush %0" : : "r" (insns)); - } - /* We can also get somewhat simple sequences if the distance between - the target and the PLT entry is within +/- 2GB. */ - else if ((plt_vaddr > value - && ((plt_vaddr - value) >> 31) == 0) - || (value > plt_vaddr - && ((value - plt_vaddr) >> 31) == 0)) - { - unsigned int displacement; - - if (plt_vaddr > value) - displacement = (0 - (plt_vaddr - value)); - else - displacement = value - plt_vaddr; - - /* mov %o7, %g1 - call displacement - mov %g1, %o7 */ - - insns[2] = 0x9e100001; - __asm __volatile ("flush %0 + 8" : : "r" (insns)); - - insns[1] = 0x40000000 | (displacement >> 2); - __asm __volatile ("flush %0 + 4" : : "r" (insns)); - - insns[0] = 0x8210000f; - __asm __volatile ("flush %0" : : "r" (insns)); - } - /* Worst case, ho hum... */ - else - { - unsigned int high32 = (value >> 32); - unsigned int low32 = (unsigned int) value; - - /* ??? Some tricks can be stolen from the sparc64 egcs backend - constant formation code I wrote. -DaveM */ - - if (__glibc_unlikely (high32 & 0x3ff)) - { - /* sethi %hh(value), %g1 - sethi %lm(value), %g5 - or %g1, %hm(value), %g1 - or %g5, %lo(value), %g5 - sllx %g1, 32, %g1 - jmpl %g1 + %g5, %g0 - nop */ - - insns[5] = 0x81c04005; - __asm __volatile ("flush %0 + 20" : : "r" (insns)); - - insns[4] = 0x83287020; - __asm __volatile ("flush %0 + 16" : : "r" (insns)); - - insns[3] = 0x8a116000 | (low32 & 0x3ff); - __asm __volatile ("flush %0 + 12" : : "r" (insns)); - - insns[2] = 0x82106000 | (high32 & 0x3ff); - } - else - { - /* sethi %hh(value), %g1 - sethi %lm(value), %g5 - sllx %g1, 32, %g1 - or %g5, %lo(value), %g5 - jmpl %g1 + %g5, %g0 - nop */ - - insns[4] = 0x81c04005; - __asm __volatile ("flush %0 + 16" : : "r" (insns)); - - insns[3] = 0x8a116000 | (low32 & 0x3ff); - __asm __volatile ("flush %0 + 12" : : "r" (insns)); - - insns[2] = 0x83287020; - } - - __asm __volatile ("flush %0 + 8" : : "r" (insns)); - - insns[1] = 0x0b000000 | (low32 >> 10); - __asm __volatile ("flush %0 + 4" : : "r" (insns)); - - insns[0] = 0x03000000 | (high32 >> 10); - __asm __volatile ("flush %0" : : "r" (insns)); - } -} - -#endif /* dl-plt.h */ diff --git a/sysdeps/sparc/sparc64/dl-trampoline.S b/sysdeps/sparc/sparc64/dl-trampoline.S deleted file mode 100644 index 8e1a6efb13..0000000000 --- a/sysdeps/sparc/sparc64/dl-trampoline.S +++ /dev/null @@ -1,325 +0,0 @@ -/* PLT trampolines. Sparc 64-bit version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text - .align 32 - - /* %g1: PLT offset loaded by PLT entry - * %g4: callers PC, which is PLT0 + 24, therefore we - * add (32 + 8) to get the address of PLT2 which - * is where the magic cookie is stored - */ - .globl _dl_runtime_resolve_0 - .type _dl_runtime_resolve_0, @function -_dl_runtime_resolve_0: - cfi_startproc - - save %sp, -192, %sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) - - sethi %hi(1047552), %l2 - ldx [%g4 + 32 + 8], %o0 - sub %g1, %g4, %l0 - xor %l2, -1016, %l2 - sethi %hi(5120), %l3 /* 160 * 32 */ - add %l0, %l2, %l0 - sethi %hi(32768), %l4 - udivx %l0, %l3, %l3 - sllx %l3, 2, %l1 - add %l1, %l3, %l1 - sllx %l1, 10, %l2 - sub %l4, 4, %l4 - sllx %l1, 5, %l1 - sub %l0, %l2, %l0 - udivx %l0, 24, %l0 - add %l0, %l4, %l0 - add %l1, %l0, %l1 - add %l1, %l1, %l0 - add %l0, %l1, %l0 - call _dl_fixup - sllx %l0, 3, %o1 - jmp %o0 - restore - - cfi_endproc - - .size _dl_runtime_resolve_0, .-_dl_runtime_resolve_0 - - /* %g1: PLT offset loaded by PLT entry - * %g4: callers PC, which is PLT1 + 24, therefore we - * add 8 to get the address of PLT2 which - * is where the magic cookie is stored - */ - .globl _dl_runtime_resolve_1 - .type _dl_runtime_resolve_1, @function -_dl_runtime_resolve_1: - cfi_startproc - - save %sp, -192, %sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) - - srlx %g1, 12, %o1 - ldx [%g4 + 8], %o0 - add %o1, %o1, %o3 - sub %o1, 96, %o1 - call _dl_fixup - add %o1, %o3, %o1 - jmp %o0 - restore - - cfi_endproc - - .size _dl_runtime_resolve_1, .-_dl_runtime_resolve_1 - - /* For the profiling cases we pass in our stack frame - * as the base of the La_sparc64_regs, so it looks - * like: - * %l0 %sp - * ... - * %l7 %sp + (7 * 8) - * %i0 %sp + (8 * 8) - * ... - * %i7 %sp + (15 * 8) - * %f0 %sp + (16 * 8) - * %f16 %sp + (31 * 8) - * framesize %sp + (32 * 8) - */ - - .globl _dl_profile_save_regs - .type _dl_profile_save_regs, @function -_dl_profile_save_regs: - cfi_startproc - - stx %l0, [%sp + STACK_BIAS + ( 0 * 8)] - stx %l1, [%sp + STACK_BIAS + ( 1 * 8)] - stx %l2, [%sp + STACK_BIAS + ( 2 * 8)] - stx %l3, [%sp + STACK_BIAS + ( 3 * 8)] - stx %l4, [%sp + STACK_BIAS + ( 4 * 8)] - stx %l5, [%sp + STACK_BIAS + ( 5 * 8)] - stx %l6, [%sp + STACK_BIAS + ( 6 * 8)] - stx %l7, [%sp + STACK_BIAS + ( 7 * 8)] - stx %i0, [%sp + STACK_BIAS + ( 8 * 8)] - stx %i1, [%sp + STACK_BIAS + ( 9 * 8)] - stx %i2, [%sp + STACK_BIAS + (10 * 8)] - stx %i3, [%sp + STACK_BIAS + (11 * 8)] - stx %i4, [%sp + STACK_BIAS + (12 * 8)] - stx %i5, [%sp + STACK_BIAS + (13 * 8)] - stx %i6, [%sp + STACK_BIAS + (14 * 8)] - stx %i7, [%sp + STACK_BIAS + (15 * 8)] - std %f0, [%sp + STACK_BIAS + (16 * 8)] - std %f2, [%sp + STACK_BIAS + (17 * 8)] - std %f4, [%sp + STACK_BIAS + (18 * 8)] - std %f6, [%sp + STACK_BIAS + (19 * 8)] - std %f8, [%sp + STACK_BIAS + (20 * 8)] - std %f10, [%sp + STACK_BIAS + (21 * 8)] - std %f12, [%sp + STACK_BIAS + (22 * 8)] - std %f14, [%sp + STACK_BIAS + (23 * 8)] - std %f16, [%sp + STACK_BIAS + (24 * 8)] - std %f18, [%sp + STACK_BIAS + (25 * 8)] - std %f20, [%sp + STACK_BIAS + (26 * 8)] - std %f22, [%sp + STACK_BIAS + (27 * 8)] - std %f24, [%sp + STACK_BIAS + (28 * 8)] - std %f26, [%sp + STACK_BIAS + (29 * 8)] - std %f28, [%sp + STACK_BIAS + (30 * 8)] - retl - std %f30, [%sp + STACK_BIAS + (31 * 8)] - - cfi_endproc - - .size _dl_profile_save_regs, .-_dl_profile_save_regs - - /* If we are going to call pltexit, then we must replicate - * the caller's stack frame. - * %o0: PLT resolved function address - */ - .globl _dl_profile_invoke - .type _dl_profile_invoke, @function -_dl_profile_invoke: - cfi_startproc - - add %l0, 7, %l0 - andn %l0, 7, %l0 - add %l0, (8 * 8), %g1 - - sub %sp, %g1, %sp - srlx %l0, 3, %l7 - mov %o0, %l1 - mov %i0, %o0 - mov %i1, %o1 - mov %i2, %o2 - mov %i3, %o3 - mov %i4, %o4 - mov %i5, %o5 - add %fp, STACK_BIAS, %l2 - brz %l0, 2f - add %sp, STACK_BIAS, %l3 -1: ldx [%l2], %l4 - add %l2, 0x8, %l2 - subcc %l7, 1, %l7 - stx %l4, [%l3] - bne,pt %xcc, 1b - add %l3, 0x8, %l3 - -2: jmpl %l1, %o7 - nop - - stx %o0, [%sp + STACK_BIAS + (16 * 8)] - stx %o1, [%sp + STACK_BIAS + (17 * 8)] - stx %o2, [%sp + STACK_BIAS + (18 * 8)] - stx %o3, [%sp + STACK_BIAS + (19 * 8)] - std %f0, [%sp + STACK_BIAS + (20 * 8)] - std %f2, [%sp + STACK_BIAS + (21 * 8)] - std %f4, [%sp + STACK_BIAS + (22 * 8)] - std %f8, [%sp + STACK_BIAS + (23 * 8)] - - mov %l5, %o0 - mov %l6, %o1 - add %sp, STACK_BIAS + (24 * 8), %o2 - call _dl_call_pltexit - add %sp, STACK_BIAS + (16 * 8), %o3 - - ldx [%sp + STACK_BIAS + (16 * 8)], %i0 - ldx [%sp + STACK_BIAS + (17 * 8)], %i1 - ldx [%sp + STACK_BIAS + (18 * 8)], %i2 - ldx [%sp + STACK_BIAS + (19 * 8)], %i3 - ldd [%sp + STACK_BIAS + (20 * 8)], %f0 - ldd [%sp + STACK_BIAS + (21 * 8)], %f2 - ldd [%sp + STACK_BIAS + (22 * 8)], %f4 - ldd [%sp + STACK_BIAS + (23 * 8)], %f8 - - jmpl %i7 + 8, %g0 - restore - - cfi_endproc - - .size _dl_profile_invoke, .-_dl_profile_invoke - - /* %g1: PLT offset loaded by PLT entry - * %g4: callers PC, which is PLT0 + 24, therefore we - * add (32 + 8) to get the address of PLT2 which - * is where the magic cookie is stored - */ - .align 32 - .globl _dl_runtime_profile_0 - .type _dl_runtime_profile_0, @function -_dl_runtime_profile_0: - cfi_startproc - - save %sp, -336, %sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) - - sethi %hi(1047552), %l2 - ldx [%g4 + 32 + 8], %o0 - sub %g1, %g4, %l0 - xor %l2, -1016, %l2 - sethi %hi(5120), %l3 /* 160 * 32 */ - add %l0, %l2, %l0 - sethi %hi(32768), %l4 - udivx %l0, %l3, %l3 - sllx %l3, 2, %l1 - add %l1, %l3, %l1 - sllx %l1, 10, %l2 - sub %l4, 4, %l4 - sllx %l1, 5, %l1 - sub %l0, %l2, %l0 - udivx %l0, 24, %l0 - add %l0, %l4, %l0 - add %l1, %l0, %l1 - add %l1, %l1, %l0 - add %l0, %l1, %l0 - - mov %i7, %o2 - sllx %l0, 3, %o1 - - mov %o0, %l5 - mov %o1, %l6 - - call _dl_profile_save_regs - nop - - add %sp, STACK_BIAS, %o3 - call _dl_profile_fixup - add %sp, (STACK_BIAS + (32 * 8)), %o4 - - ldx [%sp + STACK_BIAS + (32 * 8)], %l0 - brlz,pt %l0, 1f - nop - - call _dl_profile_invoke - nop - -1: jmp %o0 - restore - - cfi_endproc - - .size _dl_runtime_profile_0, .-_dl_runtime_profile_0 - - /* %g1: PLT offset loaded by PLT entry - * %g4: callers PC, which is PLT1 + 24, therefore we - * add 8 to get the address of PLT2 which - * is where the magic cookie is stored - */ - .globl _dl_runtime_profile_1 - .type _dl_runtime_profile_1, @function -_dl_runtime_profile_1: - cfi_startproc - - save %sp, -336, %sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) - - srlx %g1, 12, %o1 - ldx [%g4 + 8], %o0 - add %o1, %o1, %o3 - sub %o1, 96, %o1 - mov %i7, %o2 - add %o1, %o3, %o1 - - mov %o0, %l5 - mov %o1, %l6 - - call _dl_profile_save_regs - nop - - add %sp, STACK_BIAS, %o3 - call _dl_profile_fixup - add %sp, (STACK_BIAS + (32 * 8)), %o4 - - ldx [%sp + STACK_BIAS + (32 * 8)], %l0 - brlz,pt %l0, 1f - nop - - call _dl_profile_invoke - nop - -1: jmp %o0 - restore - - cfi_endproc - - .size _dl_runtime_resolve_1, .-_dl_runtime_resolve_1 diff --git a/sysdeps/sparc/sparc64/fpu/e_sqrtl.c b/sysdeps/sparc/sparc64/fpu/e_sqrtl.c deleted file mode 100644 index c540d05841..0000000000 --- a/sysdeps/sparc/sparc64/fpu/e_sqrtl.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Long double square root, sparc64 version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -extern void _Qp_sqrt(long double *, const long double *); - -long double -__ieee754_sqrtl (long double x) -{ - long double ret; - _Qp_sqrt (&ret, &x); - return ret; -} -strong_alias (__ieee754_sqrtl, __sqrtl_finite) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/Makefile b/sysdeps/sparc/sparc64/fpu/multiarch/Makefile deleted file mode 100644 index 03a271dfa4..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -ifeq ($(subdir),math) -ifeq ($(have-as-vis3),yes) -libm-sysdep_routines += m_signbitf-vis3 m_signbit-vis3 m_finitef-vis3 \ - m_finite-vis3 m_isinff-vis3 m_isinf-vis3 \ - m_isnanf-vis3 m_isnan-vis3 s_lrintf-vis3 \ - s_lrint-vis3 s_rintf-vis3 s_rint-vis3 \ - s_fmaf-vis3 s_fma-vis3 \ - s_nearbyint-vis3 s_nearbyintf-vis3 \ - s_ceilf-vis3 s_ceil-vis3 s_floorf-vis3 \ - s_floor-vis3 s_truncf-vis3 s_trunc-vis3 -sysdep_routines += s_signbitf-vis3 s_signbit-vis3 s_finitef-vis3 \ - s_finite-vis3 s_isinff-vis3 s_isinf-vis3 \ - s_isnanf-vis3 s_isnan-vis3 - -CFLAGS-s_ceilf-vis3.c += -Wa,-Av9d -mvis3 -CFLAGS-s_ceil-vis3.c += -Wa,-Av9d -mvis3 -CFLAGS-s_floorf-vis3.c += -Wa,-Av9d -mvis3 -CFLAGS-s_floor-vis3.c += -Wa,-Av9d -mvis3 -CFLAGS-s_truncf-vis3.c += -Wa,-Av9d -mvis3 -CFLAGS-s_trunc-vis3.c += -Wa,-Av9d -mvis3 -endif -endif diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil-vis3.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil-vis3.c deleted file mode 100644 index fa9c5d33ea..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil-vis3.c +++ /dev/null @@ -1,23 +0,0 @@ -/* ceil function, sparc64 vis3 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __ceil __ceil_vis3 - -#include diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.c deleted file mode 100644 index efa05e94df..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.c +++ /dev/null @@ -1,32 +0,0 @@ -/* ceil function, sparc64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef HAVE_AS_VIS3_SUPPORT -# include -# include - -extern double __ceil_vis3 (double); -extern double __ceil_generic (double); - -sparc_libm_ifunc(__ceil, hwcap & HWCAP_SPARC_VIS3 ? __ceil_vis3 : __ceil_generic); -weak_alias (__ceil, ceil) - -# define __ceil __ceil_generic -#endif - -#include diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf-vis3.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf-vis3.c deleted file mode 100644 index 1d918de7af..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf-vis3.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Float ceil function, sparc64 vis3 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __ceilf __ceilf_vis3 - -#include diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.c deleted file mode 100644 index 62ada7fd2a..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Float ceil function, sparc64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef HAVE_AS_VIS3_SUPPORT -# include -# include - -extern float __ceilf_vis3 (float); -extern float __ceilf_generic (float); - -sparc_libm_ifunc(__ceilf, hwcap & HWCAP_SPARC_VIS3 ? __ceilf_vis3 : __ceilf_generic); -weak_alias (__ceilf, ceilf) - -# define __ceilf __ceilf_generic -#endif - -#include diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_finite-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_finite-vis3.S deleted file mode 100644 index 0e2b5f6b00..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_finite-vis3.S +++ /dev/null @@ -1,28 +0,0 @@ -/* finite(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__finite_vis3) - fabsd %f0, %f0 - movstouw %f0, %o0 - sethi %hi(0x7ff00000), %o2 - sub %o0, %o2, %o0 - retl - srl %o0, 31, %o0 -END (__finite_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_finite.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_finite.S deleted file mode 100644 index 78406a62b1..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_finite.S +++ /dev/null @@ -1,15 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(finite) - -hidden_def (__finite) -weak_alias (__finite, finite) - -# undef weak_alias -# define weak_alias(a, b) -# undef hidden_def -# define hidden_def(a) - -#define __finite __finite_generic - -#include "../s_finite.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef-vis3.S deleted file mode 100644 index 59e17bc75c..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef-vis3.S +++ /dev/null @@ -1,28 +0,0 @@ -/* finitef(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__finitef_vis3) - fabss %f1, %f0 - movstouw %f0, %o0 - sethi %hi(0x7f800000), %o2 - sub %o0, %o2, %o0 - retl - srl %o0, 31, %o0 -END (__finitef_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef.S deleted file mode 100644 index cafd41fd92..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef.S +++ /dev/null @@ -1,15 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(finitef) - -hidden_def (__finitef) -weak_alias (__finitef, finitef) - -# undef weak_alias -# define weak_alias(a, b) -# undef hidden_def -# define hidden_def(a) - -#define __finitef __finitef_generic - -#include "../s_finitef.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_floor-vis3.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_floor-vis3.c deleted file mode 100644 index 04f6183664..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_floor-vis3.c +++ /dev/null @@ -1,23 +0,0 @@ -/* floor function, sparc64 vis3 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __floor __floor_vis3 - -#include diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_floor.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_floor.c deleted file mode 100644 index d097f68866..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_floor.c +++ /dev/null @@ -1,32 +0,0 @@ -/* floor function, sparc64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef HAVE_AS_VIS3_SUPPORT -# include -# include - -extern double __floor_vis3 (double); -extern double __floor_generic (double); - -sparc_libm_ifunc(__floor, hwcap & HWCAP_SPARC_VIS3 ? __floor_vis3 : __floor_generic); -weak_alias (__floor, floor) - -# define __floor __floor_generic -#endif - -#include diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf-vis3.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf-vis3.c deleted file mode 100644 index 0ff49e6802..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf-vis3.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Float floor function, sparc64 vis3 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __floorf __floorf_vis3 - -#include diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.c deleted file mode 100644 index 2a6c710349..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Float floor function, sparc64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef HAVE_AS_VIS3_SUPPORT -# include -# include - -extern float __floorf_vis3 (float); -extern float __floorf_generic (float); - -sparc_libm_ifunc(__floorf, hwcap & HWCAP_SPARC_VIS3 ? __floorf_vis3 : __floorf_generic); -weak_alias (__floorf, floorf) - -# define __floorf __floorf_generic -#endif - -#include diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fma-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_fma-vis3.S deleted file mode 100644 index 343ce37de9..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_fma-vis3.S +++ /dev/null @@ -1,25 +0,0 @@ -/* fma function, sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__fma_vis3) - retl - fmaddd %f0, %f2, %f4, %f0 -END (__fma_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fma.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_fma.c deleted file mode 100644 index 3f2f1622c8..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_fma.c +++ /dev/null @@ -1,14 +0,0 @@ -#ifdef HAVE_AS_VIS3_SUPPORT -# include -# include - -extern double __fma_vis3 (double, double, double); -extern double __fma_generic (double, double, double); - -sparc_libm_ifunc(__fma, hwcap & HWCAP_SPARC_FMAF ? __fma_vis3 : __fma_generic); -weak_alias (__fma, fma) - -# define __fma __fma_generic -#endif - -#include diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf-vis3.S deleted file mode 100644 index c2fa72a211..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf-vis3.S +++ /dev/null @@ -1,25 +0,0 @@ -/* fmaf function, sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__fmaf_vis3) - retl - fmadds %f1, %f3, %f5, %f0 -END (__fmaf_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf.c deleted file mode 100644 index 7a273a3b13..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf.c +++ /dev/null @@ -1,14 +0,0 @@ -#ifdef HAVE_AS_VIS3_SUPPORT -# include -# include - -extern float __fmaf_vis3 (float, float, float); -extern float __fmaf_generic (float, float, float); - -sparc_libm_ifunc(__fmaf, hwcap & HWCAP_SPARC_FMAF ? __fmaf_vis3 : __fmaf_generic); -weak_alias (__fmaf, fmaf) - -# define __fmaf __fmaf_generic -#endif - -#include diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf-vis3.S deleted file mode 100644 index 54ff556eb8..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf-vis3.S +++ /dev/null @@ -1,31 +0,0 @@ -/* isinf(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__isinf_vis3) - movdtox %f0, %g1 - sethi %hi(0x7ff00000), %o2 - sllx %o2, 32, %o2 - sllx %g1, 1, %o4 - srlx %o4, 1, %o5 - srax %g1, 62, %o0 - xor %o5, %o2, %o3 - retl - movrne %o3, %g0, %o0 -END (__isinf_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf.S deleted file mode 100644 index ed9b62640d..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf.S +++ /dev/null @@ -1,15 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(isinf) - -hidden_def (__isinf) -weak_alias (__isinf, isinf) - -# undef weak_alias -# define weak_alias(a, b) -# undef hidden_def -# define hidden_def(a) - -#define __isinf __isinf_generic - -#include "../s_isinf.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff-vis3.S deleted file mode 100644 index 853bfc64e4..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff-vis3.S +++ /dev/null @@ -1,30 +0,0 @@ -/* isinff(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__isinff_vis3) - movstouw %f1, %g1 - sethi %hi(0x7f800000), %o2 - sll %g1, 1, %o4 - srl %o4, 1, %o5 - sra %g1, 30, %o0 - xor %o5, %o2, %o3 - retl - movrne %o3, %g0, %o0 -END (__isinff_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff.S deleted file mode 100644 index 04517398f8..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff.S +++ /dev/null @@ -1,15 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(isinff) - -hidden_def (__isinff) -weak_alias (__isinff, isinff) - -# undef weak_alias -# define weak_alias(a, b) -# undef hidden_def -# define hidden_def(a) - -#define __isinff __isinff_generic - -#include "../s_isinff.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan-vis3.S deleted file mode 100644 index 6dbb8dee2c..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan-vis3.S +++ /dev/null @@ -1,30 +0,0 @@ -/* isnan(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__isnan_vis3) - movdtox %f0, %o0 - sethi %hi(0x7ff00000), %g1 - sllx %g1, 32, %g1 - sllx %o0, 1, %o0 - srlx %o0, 1, %o0 - sub %g1, %o0, %o0 - retl - srlx %o0, 63, %o0 -END (__isnan_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan.S deleted file mode 100644 index 40e985a5d4..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan.S +++ /dev/null @@ -1,15 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(isnan) - -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -# undef weak_alias -# define weak_alias(a, b) -# undef hidden_def -# define hidden_def(a) - -#define __isnan __isnan_generic - -#include "../s_isnan.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf-vis3.S deleted file mode 100644 index 46fbf6de9f..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf-vis3.S +++ /dev/null @@ -1,29 +0,0 @@ -/* isnanf(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__isnanf_vis3) - movstouw %f1, %o0 - sethi %hi(0x7f800000), %g1 - sll %o0, 1, %o0 - srl %o0, 1, %o0 - sub %g1, %o0, %o0 - retl - srl %o0, 31, %o0 -END (__isnanf_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf.S deleted file mode 100644 index 6b53b69d2e..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf.S +++ /dev/null @@ -1,15 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(isnanf) - -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) - -# undef weak_alias -# define weak_alias(a, b) -# undef hidden_def -# define hidden_def(a) - -#define __isnanf __isnanf_generic - -#include "../s_isnanf.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint-vis3.S deleted file mode 100644 index 87895371dd..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint-vis3.S +++ /dev/null @@ -1,52 +0,0 @@ -/* lrint(), sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__lrint_vis3) - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o2, 32, %o2 - fzero ZERO - - fnegd ZERO, SIGN_BIT - movxtod %o2, %f16 - fabsd %f0, %f14 - - fcmpd %fcc3, %f14, %f16 - - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - for %f0, SIGN_BIT, %f0 - fdtox %f0, %f4 - retl - movdtox %f4, %o0 -END (__lrint_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint.S deleted file mode 100644 index 94af8f028c..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint.S +++ /dev/null @@ -1,17 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(lrint) - -weak_alias (__lrint, lrint) - -strong_alias (__lrint, __llrint) -weak_alias (__llrint, llrint) - -# undef weak_alias -# define weak_alias(a, b) -# undef strong_alias -# define strong_alias(a, b) - -#define __lrint __lrint_generic - -#include "../s_lrint.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf-vis3.S deleted file mode 100644 index 3ef005d433..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf-vis3.S +++ /dev/null @@ -1,51 +0,0 @@ -/* lrintf(), sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__lrintf_vis3) - sethi %hi(TWO_TWENTYTHREE), %o2 - fzeros ZERO - - fnegs ZERO, SIGN_BIT - movwtos %o2, %f16 - fabss %f1, %f14 - - fcmps %fcc3, %f14, %f16 - - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - fors %f0, SIGN_BIT, %f0 - fstox %f0, %f4 - retl - movdtox %f4, %o0 -END (__lrintf_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf.S deleted file mode 100644 index e6ea4061c3..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf.S +++ /dev/null @@ -1,17 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(lrintf) - -weak_alias (__lrintf, lrintf) - -strong_alias (__lrintf, __llrintf) -weak_alias (__llrintf, llrintf) - -# undef weak_alias -# define weak_alias(a, b) -# undef strong_alias -# define strong_alias(a, b) - -#define __lrintf __lrintf_generic - -#include "../s_lrintf.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint-vis3.S deleted file mode 100644 index 67e570a800..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint-vis3.S +++ /dev/null @@ -1,62 +0,0 @@ -/* Round float to int floating-point values without generating - an inexact exception, sparc64 vis3 version. - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2013. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__nearbyint_vis3) - fcmpd %fcc3, %f0, %f0 /* Check for sNaN */ - stx %fsr, [%sp + STACK_BIAS + 144] - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o2, 32, %o2 - ldx [%sp + STACK_BIAS + 144], %o4 - sethi %hi(0xf8003e0), %o5 - fzero ZERO - or %o5, %lo(0xf8003e0), %o5 - fnegd ZERO, SIGN_BIT - andn %o4, %o5, %o4 - movxtod %o2, %f16 - stx %o4, [%sp + STACK_BIAS + 136] - ldx [%sp + STACK_BIAS + 136], %fsr - fabsd %f0, %f14 - fcmpd %fcc3, %f14, %f16 - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - for %f0, SIGN_BIT, %f0 - retl - ldx [%sp + STACK_BIAS + 144], %fsr -END (__nearbyint_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint.S deleted file mode 100644 index bb75ab3606..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint.S +++ /dev/null @@ -1,12 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(nearbyint) - -weak_alias (__nearbyint, nearbyint) - -# undef weak_alias -# define weak_alias(a, b) - -#define __nearbyint __nearbyint_generic - -#include "../s_nearbyint.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf-vis3.S deleted file mode 100644 index 208af37d0d..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf-vis3.S +++ /dev/null @@ -1,61 +0,0 @@ -/* Round float to int floating-point values without generating - an inexact exception, sparc64 vis3 version. - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2013. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__nearbyintf_vis3) - fcmps %fcc3, %f1, %f1 /* Check for sNaN */ - stx %fsr, [%sp + STACK_BIAS + 144] - sethi %hi(0xf8003e0), %o5 - sethi %hi(TWO_TWENTYTHREE), %o2 - ldx [%sp + STACK_BIAS + 144], %o4 - or %o5, %lo(0xf8003e0), %o5 - fzeros ZERO - andn %o4, %o5, %o4 - fnegs ZERO, SIGN_BIT - movwtos %o2, %f16 - stx %o4, [%sp + STACK_BIAS + 136] - ldx [%sp + STACK_BIAS + 136], %fsr - fabss %f1, %f14 - fcmps %fcc3, %f14, %f16 - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - fors %f0, SIGN_BIT, %f0 - retl - ldx [%sp + STACK_BIAS + 144], %fsr -END (__nearbyintf_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf.S deleted file mode 100644 index 95100c1bfc..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf.S +++ /dev/null @@ -1,12 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(nearbyintf) - -weak_alias (__nearbyintf, nearbyintf) - -# undef weak_alias -# define weak_alias(a, b) - -#define __nearbyintf __nearbyintf_generic - -#include "../s_nearbyintf.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_rint-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_rint-vis3.S deleted file mode 100644 index 495a02222e..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_rint-vis3.S +++ /dev/null @@ -1,50 +0,0 @@ -/* Round float to int floating-point values, sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__rint_vis3) - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o2, 32, %o2 - fzero ZERO - - fnegd ZERO, SIGN_BIT - movxtod %o2, %f16 - fabsd %f0, %f14 - - fcmpd %fcc3, %f14, %f16 - - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - retl - for %f0, SIGN_BIT, %f0 -END (__rint_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_rint.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_rint.S deleted file mode 100644 index cc980eb8c7..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_rint.S +++ /dev/null @@ -1,12 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(rint) - -weak_alias (__rint, rint) - -# undef weak_alias -# define weak_alias(a, b) - -#define __rint __rint_generic - -#include "../s_rint.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf-vis3.S deleted file mode 100644 index 521c0b21ec..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf-vis3.S +++ /dev/null @@ -1,49 +0,0 @@ -/* Round float to int floating-point values, sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__rintf_vis3) - sethi %hi(TWO_TWENTYTHREE), %o2 - fzeros ZERO - - fnegs ZERO, SIGN_BIT - movwtos %o2, %f16 - fabss %f1, %f14 - - fcmps %fcc3, %f14, %f16 - - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - retl - fors %f0, SIGN_BIT, %f0 -END (__rintf_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.S deleted file mode 100644 index 38fd936086..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.S +++ /dev/null @@ -1,12 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(rintf) - -weak_alias (__rintf, rintf) - -# undef weak_alias -# define weak_alias(a, b) - -#define __rintf __rintf_generic - -#include "../s_rintf.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit-vis3.S deleted file mode 100644 index bce7c9795a..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit-vis3.S +++ /dev/null @@ -1,25 +0,0 @@ -/* signbit(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__signbit_vis3) - movdtox %f0, %o0 - retl - srlx %o0, 63, %o0 -END (__signbit_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S deleted file mode 100644 index b8ff64a547..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S +++ /dev/null @@ -1,20 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(signbit) - -/* On 64-bit the double version will also always work for - long-double-precision since in both cases the word with the - sign bit in it is passed always in register %f0. */ -strong_alias (__signbit, __signbitl) -hidden_def (__signbitl) - -# undef weak_alias -# define weak_alias(a, b) -# undef strong_alias -# define strong_alias(a, b) -# undef hidden_def -# define hidden_def(a) - -#define __signbit __signbit_generic - -#include "../s_signbit.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf-vis3.S deleted file mode 100644 index 7833e725e6..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf-vis3.S +++ /dev/null @@ -1,25 +0,0 @@ -/* signbitf(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__signbitf_vis3) - movstouw %f1, %o0 - retl - srl %o0, 31, %o0 -END (__signbitf_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S deleted file mode 100644 index d57e999b90..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S +++ /dev/null @@ -1,10 +0,0 @@ -#include - -SPARC_ASM_VIS3_IFUNC(signbitf) - -# undef weak_alias -# define weak_alias(a, b) - -#define __signbitf __signbitf_generic - -#include "../s_signbitf.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.c deleted file mode 100644 index 38ee29a8d3..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.c +++ /dev/null @@ -1,23 +0,0 @@ -/* trunc function, sparc64 vis3 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __trunc __trunc_vis3 - -#include diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.c deleted file mode 100644 index dc67f423f1..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.c +++ /dev/null @@ -1,32 +0,0 @@ -/* trunc function, sparc64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef HAVE_AS_VIS3_SUPPORT -# include -# include - -extern double __trunc_vis3 (double); -extern double __trunc_generic (double); - -sparc_libm_ifunc(__trunc, hwcap & HWCAP_SPARC_VIS3 ? __trunc_vis3 : __trunc_generic); -weak_alias (__trunc, trunc) - -# define __trunc __trunc_generic -#endif - -#include diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf-vis3.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf-vis3.c deleted file mode 100644 index 302aa56047..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf-vis3.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Float trunc function, sparc64 vis3 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __truncf __truncf_vis3 - -#include diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.c deleted file mode 100644 index 980a313ae1..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Float trunc function, sparc64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef HAVE_AS_VIS3_SUPPORT -# include -# include - -extern float __truncf_vis3 (float); -extern float __truncf_generic (float); - -sparc_libm_ifunc(__truncf, hwcap & HWCAP_SPARC_VIS3 ? __truncf_vis3 : __truncf_generic); -weak_alias (__truncf, truncf) - -# define __truncf __truncf_generic -#endif - -#include diff --git a/sysdeps/sparc/sparc64/fpu/s_copysign.S b/sysdeps/sparc/sparc64/fpu/s_copysign.S deleted file mode 100644 index e50d8cd246..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_copysign.S +++ /dev/null @@ -1,30 +0,0 @@ -/* copysign function, sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__copysign) - fzeros %f7 - fnegs %f7, %f7 - fands %f2, %f7, %f9 - fandnot2s %f0, %f7, %f0 - retl - fors %f0, %f9, %f0 -END (__copysign) -weak_alias (__copysign, copysign) \ No newline at end of file diff --git a/sysdeps/sparc/sparc64/fpu/s_copysignf.S b/sysdeps/sparc/sparc64/fpu/s_copysignf.S deleted file mode 100644 index 2f24217274..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_copysignf.S +++ /dev/null @@ -1,30 +0,0 @@ -/* float copysign function, sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__copysignf) - fzeros %f7 - fnegs %f7, %f7 - fands %f3, %f7, %f9 - fandnot2s %f1, %f7, %f1 - retl - fors %f1, %f9, %f0 -END (__copysignf) -weak_alias (__copysignf, copysignf) \ No newline at end of file diff --git a/sysdeps/sparc/sparc64/fpu/s_fabs.c b/sysdeps/sparc/sparc64/fpu/s_fabs.c deleted file mode 100644 index db5ecf2162..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_fabs.c +++ /dev/null @@ -1,5 +0,0 @@ -double __fabs (double x) -{ - return __builtin_fabs (x); -} -weak_alias (__fabs, fabs) diff --git a/sysdeps/sparc/sparc64/fpu/s_fabsf.c b/sysdeps/sparc/sparc64/fpu/s_fabsf.c deleted file mode 100644 index 8a218e4942..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_fabsf.c +++ /dev/null @@ -1,5 +0,0 @@ -float __fabsf (float x) -{ - return __builtin_fabsf (x); -} -weak_alias (__fabsf, fabsf) diff --git a/sysdeps/sparc/sparc64/fpu/s_fabsl.c b/sysdeps/sparc/sparc64/fpu/s_fabsl.c deleted file mode 100644 index 67e9f47071..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_fabsl.c +++ /dev/null @@ -1,5 +0,0 @@ -long double __fabsl (long double x) -{ - return __builtin_fabsl (x); -} -weak_alias (__fabsl, fabsl) diff --git a/sysdeps/sparc/sparc64/fpu/s_finite.S b/sysdeps/sparc/sparc64/fpu/s_finite.S deleted file mode 100644 index 28ee074c1d..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_finite.S +++ /dev/null @@ -1,31 +0,0 @@ -/* finite(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__finite) - fabsd %f0, %f0 - st %f0, [%sp + STACK_BIAS + 128] - sethi %hi(0x7ff00000), %o2 - ld [%sp + STACK_BIAS + 128], %o0 - sub %o0, %o2, %o0 - retl - srl %o0, 31, %o0 -END (__finite) -hidden_def (__finite) -weak_alias (__finite, finite) diff --git a/sysdeps/sparc/sparc64/fpu/s_finitef.S b/sysdeps/sparc/sparc64/fpu/s_finitef.S deleted file mode 100644 index f3edca3c57..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_finitef.S +++ /dev/null @@ -1,31 +0,0 @@ -/* finitef(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__finitef) - fabss %f1, %f0 - st %f0, [%sp + STACK_BIAS + 128] - sethi %hi(0x7f800000), %o2 - ld [%sp + STACK_BIAS + 128], %o0 - sub %o0, %o2, %o0 - retl - srl %o0, 31, %o0 -END (__finitef) -hidden_def (__finitef) -weak_alias (__finitef, finitef) diff --git a/sysdeps/sparc/sparc64/fpu/s_fma.c b/sysdeps/sparc/sparc64/fpu/s_fma.c deleted file mode 100644 index 8f62605870..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_fma.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Always use dbl-64 version because long double is emulated in software. */ -#include diff --git a/sysdeps/sparc/sparc64/fpu/s_isinf.S b/sysdeps/sparc/sparc64/fpu/s_isinf.S deleted file mode 100644 index b333a99f54..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_isinf.S +++ /dev/null @@ -1,34 +0,0 @@ -/* isinf(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__isinf) - std %f0, [%sp + STACK_BIAS + 128] - sethi %hi(0x7ff00000), %o2 - ldx [%sp + STACK_BIAS + 128], %g1 - sllx %o2, 32, %o2 - sllx %g1, 1, %o4 - srlx %o4, 1, %o5 - srax %g1, 62, %o0 - xor %o5, %o2, %o3 - retl - movrne %o3, %g0, %o0 -END (__isinf) -hidden_def (__isinf) -weak_alias (__isinf, isinf) diff --git a/sysdeps/sparc/sparc64/fpu/s_isinff.S b/sysdeps/sparc/sparc64/fpu/s_isinff.S deleted file mode 100644 index a5ecf15a9f..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_isinff.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isinff(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__isinff) - st %f1, [%sp + STACK_BIAS + 128] - sethi %hi(0x7f800000), %o2 - lduw [%sp + STACK_BIAS + 128], %g1 - sll %g1, 1, %o4 - srl %o4, 1, %o5 - sra %g1, 30, %o0 - xor %o5, %o2, %o3 - retl - movrne %o3, %g0, %o0 -END (__isinff) -hidden_def (__isinff) -weak_alias (__isinff, isinff) diff --git a/sysdeps/sparc/sparc64/fpu/s_isnan.S b/sysdeps/sparc/sparc64/fpu/s_isnan.S deleted file mode 100644 index 21084ce379..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_isnan.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isnan(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__isnan) - std %f0, [%sp + STACK_BIAS + 128] - sethi %hi(0x7ff00000), %g1 - ldx [%sp + STACK_BIAS + 128], %o0 - sllx %g1, 32, %g1 - sllx %o0, 1, %o0 - srlx %o0, 1, %o0 - sub %g1, %o0, %o0 - retl - srlx %o0, 63, %o0 -END (__isnan) -hidden_def (__isnan) -weak_alias (__isnan, isnan) diff --git a/sysdeps/sparc/sparc64/fpu/s_isnanf.S b/sysdeps/sparc/sparc64/fpu/s_isnanf.S deleted file mode 100644 index a012f42746..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_isnanf.S +++ /dev/null @@ -1,32 +0,0 @@ -/* isnanf(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__isnanf) - st %f1, [%sp + STACK_BIAS + 128] - sethi %hi(0x7f800000), %g1 - lduw [%sp + STACK_BIAS + 128], %o0 - sll %o0, 1, %o0 - srl %o0, 1, %o0 - sub %g1, %o0, %o0 - retl - srl %o0, 31, %o0 -END (__isnanf) -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) diff --git a/sysdeps/sparc/sparc64/fpu/s_llrint.S b/sysdeps/sparc/sparc64/fpu/s_llrint.S deleted file mode 100644 index 7c8e941b77..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_llrint.S +++ /dev/null @@ -1 +0,0 @@ -/* llrint is implemented in s_lrint.S */ diff --git a/sysdeps/sparc/sparc64/fpu/s_llrintf.S b/sysdeps/sparc/sparc64/fpu/s_llrintf.S deleted file mode 100644 index abab3b9a2b..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_llrintf.S +++ /dev/null @@ -1 +0,0 @@ -/* llrintf is implemented in s_lrint.S */ diff --git a/sysdeps/sparc/sparc64/fpu/s_lrint.S b/sysdeps/sparc/sparc64/fpu/s_lrint.S deleted file mode 100644 index 0a3162f947..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_lrint.S +++ /dev/null @@ -1,63 +0,0 @@ -/* lrint(), sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__lrint) - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o2, 32, %o2 - fzero ZERO - - fnegd ZERO, SIGN_BIT - stx %o2, [%sp + STACK_BIAS + 128] - fabsd %f0, %f14 - - ldd [%sp + STACK_BIAS + 128], %f16 - fcmpd %fcc3, %f14, %f16 - - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - for %f0, SIGN_BIT, %f0 - fdtox %f0, %f4 - std %f4, [%sp + STACK_BIAS + 128] - retl - ldx [%sp + STACK_BIAS + 128], %o0 -END (__lrint) -weak_alias (__lrint, lrint) - -strong_alias (__lrint, __llrint) -weak_alias (__llrint, llrint) diff --git a/sysdeps/sparc/sparc64/fpu/s_lrintf.S b/sysdeps/sparc/sparc64/fpu/s_lrintf.S deleted file mode 100644 index 5f2405ad9e..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_lrintf.S +++ /dev/null @@ -1,62 +0,0 @@ -/* lrintf(), sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__lrintf) - sethi %hi(TWO_TWENTYTHREE), %o2 - fzeros ZERO - - fnegs ZERO, SIGN_BIT - st %o2, [%sp + STACK_BIAS + 128] - fabss %f1, %f14 - - ld [%sp + STACK_BIAS + 128], %f16 - fcmps %fcc3, %f14, %f16 - - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - fors %f0, SIGN_BIT, %f0 - fstox %f0, %f4 - std %f4, [%sp + STACK_BIAS + 128] - retl - ldx [%sp + STACK_BIAS + 128], %o0 -END (__lrintf) -weak_alias (__lrintf, lrintf) - -strong_alias (__lrintf, __llrintf) -weak_alias (__llrintf, llrintf) diff --git a/sysdeps/sparc/sparc64/fpu/s_nearbyint.S b/sysdeps/sparc/sparc64/fpu/s_nearbyint.S deleted file mode 100644 index 05ed2bce40..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_nearbyint.S +++ /dev/null @@ -1,64 +0,0 @@ -/* Round float to int floating-point values without generating - an inexact exception, sparc64 version. - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2013. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__nearbyint) - fcmpd %fcc3, %f0, %f0 /* Check for sNaN */ - stx %fsr, [%sp + STACK_BIAS + 144] - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o2, 32, %o2 - ldx [%sp + STACK_BIAS + 144], %o4 - sethi %hi(0xf8003e0), %o5 - fzero ZERO - or %o5, %lo(0xf8003e0), %o5 - fnegd ZERO, SIGN_BIT - andn %o4, %o5, %o4 - stx %o2, [%sp + STACK_BIAS + 128] - stx %o4, [%sp + STACK_BIAS + 136] - ldx [%sp + STACK_BIAS + 136], %fsr - fabsd %f0, %f14 - ldd [%sp + STACK_BIAS + 128], %f16 - fcmpd %fcc3, %f14, %f16 - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - for %f0, SIGN_BIT, %f0 - retl - ldx [%sp + STACK_BIAS + 144], %fsr -END (__nearbyint) -weak_alias (__nearbyint, nearbyint) diff --git a/sysdeps/sparc/sparc64/fpu/s_nearbyintf.S b/sysdeps/sparc/sparc64/fpu/s_nearbyintf.S deleted file mode 100644 index 55e3639a87..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_nearbyintf.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Round float to int floating-point values without generating - an inexact exception, sparc64 version. - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2013. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__nearbyintf) - fcmps %fcc3, %f1, %f1 /* Check for sNaN */ - stx %fsr, [%sp + STACK_BIAS + 144] - sethi %hi(0xf8003e0), %o5 - sethi %hi(TWO_TWENTYTHREE), %o2 - ldx [%sp + STACK_BIAS + 144], %o4 - or %o5, %lo(0xf8003e0), %o5 - fzeros ZERO - andn %o4, %o5, %o4 - fnegs ZERO, SIGN_BIT - st %o2, [%sp + STACK_BIAS + 128] - stx %o4, [%sp + STACK_BIAS + 136] - ldx [%sp + STACK_BIAS + 136], %fsr - fabss %f1, %f14 - ld [%sp + STACK_BIAS + 128], %f16 - fcmps %fcc3, %f14, %f16 - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - fors %f0, SIGN_BIT, %f0 - retl - ldx [%sp + STACK_BIAS + 144], %fsr -END (__nearbyintf) -weak_alias (__nearbyintf, nearbyintf) diff --git a/sysdeps/sparc/sparc64/fpu/s_rint.S b/sysdeps/sparc/sparc64/fpu/s_rint.S deleted file mode 100644 index 8d0134c90c..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_rint.S +++ /dev/null @@ -1,57 +0,0 @@ -/* Round float to int floating-point values, sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__rint) - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o2, 32, %o2 - fzero ZERO - - fnegd ZERO, SIGN_BIT - stx %o2, [%sp + STACK_BIAS + 128] - fabsd %f0, %f14 - - ldd [%sp + STACK_BIAS + 128], %f16 - fcmpd %fcc3, %f14, %f16 - - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - retl - for %f0, SIGN_BIT, %f0 -END (__rint) -weak_alias (__rint, rint) diff --git a/sysdeps/sparc/sparc64/fpu/s_rintf.S b/sysdeps/sparc/sparc64/fpu/s_rintf.S deleted file mode 100644 index a2f9261382..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_rintf.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Round float to int floating-point values, sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2012. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__rintf) - sethi %hi(TWO_TWENTYTHREE), %o2 - fzeros ZERO - - fnegs ZERO, SIGN_BIT - st %o2, [%sp + STACK_BIAS + 128] - fabss %f1, %f14 - - ld [%sp + STACK_BIAS + 128], %f16 - fcmps %fcc3, %f14, %f16 - - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - retl - fors %f0, SIGN_BIT, %f0 -END (__rintf) -weak_alias (__rintf, rintf) diff --git a/sysdeps/sparc/sparc64/fpu/s_signbit.S b/sysdeps/sparc/sparc64/fpu/s_signbit.S deleted file mode 100644 index 979917b5d0..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_signbit.S +++ /dev/null @@ -1,32 +0,0 @@ -/* signbit(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__signbit) - st %f0, [%sp + STACK_BIAS + 128] - ld [%sp + STACK_BIAS + 128], %o0 - retl - srl %o0, 31, %o0 -END (__signbit) - -/* On 64-bit the double version will also always work for - long-double-precision since in both cases the word with the - sign bit in it is passed always in register %f0. */ -strong_alias (__signbit, __signbitl) -hidden_def (__signbitl) diff --git a/sysdeps/sparc/sparc64/fpu/s_signbitf.S b/sysdeps/sparc/sparc64/fpu/s_signbitf.S deleted file mode 100644 index cb96983868..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_signbitf.S +++ /dev/null @@ -1,26 +0,0 @@ -/* signbitf(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__signbitf) - st %f1, [%sp + STACK_BIAS + 128] - ld [%sp + STACK_BIAS + 128], %o0 - retl - srl %o0, 31, %o0 -END (__signbitf) diff --git a/sysdeps/sparc/sparc64/fpu/s_signbitl.S b/sysdeps/sparc/sparc64/fpu/s_signbitl.S deleted file mode 100644 index f5e5fb9253..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_signbitl.S +++ /dev/null @@ -1 +0,0 @@ -/* signbitl is implemented in s_signbit.S */ diff --git a/sysdeps/sparc/sparc64/fpu/w_sqrt_compat.S b/sysdeps/sparc/sparc64/fpu/w_sqrt_compat.S deleted file mode 100644 index de95e52e8e..0000000000 --- a/sysdeps/sparc/sparc64/fpu/w_sqrt_compat.S +++ /dev/null @@ -1,48 +0,0 @@ -/* sqrt function. sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__sqrt) - fzero %f8 - fcmpd %fcc2, %f0, %f8 - fbl,pn %fcc2, 1f - nop -8: retl - fsqrtd %f0, %f0 -1: -#ifdef SHARED - SETUP_PIC_REG_LEAF(o5, g1) - sethi %gdop_hix22(_LIB_VERSION), %g1 - xor %g1, %gdop_lox10(_LIB_VERSION), %g1 - ldx [%o5 + %g1], %g1, %gdop(_LIB_VERSION) -#else - sethi %hi(_LIB_VERSION), %g1 - or %g1, %lo(_LIB_VERSION), %g1 -#endif - ld [%g1], %g1 - cmp %g1, -1 - be,pt %icc, 8b - fmovd %f0, %f2 - mov 26, %o2 - mov %o7, %g1 - call __kernel_standard - mov %g1, %o7 -END (__sqrt) - -weak_alias (__sqrt, sqrt) diff --git a/sysdeps/sparc/sparc64/fpu/w_sqrtf_compat.S b/sysdeps/sparc/sparc64/fpu/w_sqrtf_compat.S deleted file mode 100644 index 0c253fe43a..0000000000 --- a/sysdeps/sparc/sparc64/fpu/w_sqrtf_compat.S +++ /dev/null @@ -1,48 +0,0 @@ -/* sqrtf function. sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__sqrtf) - fzeros %f8 - fcmps %fcc2, %f1, %f8 - fbl,pn %fcc2, 1f - nop -8: retl - fsqrts %f1, %f0 -1: -#ifdef SHARED - SETUP_PIC_REG_LEAF(o5, g1) - sethi %gdop_hix22(_LIB_VERSION), %g1 - xor %g1, %gdop_lox10(_LIB_VERSION), %g1 - ldx [%o5 + %g1], %g1, %gdop(_LIB_VERSION) -#else - sethi %hi(_LIB_VERSION), %g1 - or %g1, %lo(_LIB_VERSION), %g1 -#endif - ld [%g1], %g1 - cmp %g1, -1 - be,pt %icc, 8b - fmovs %f1, %f3 - mov 126, %o2 - mov %o7, %g1 - call __kernel_standard_f - mov %g1, %o7 -END (__sqrtf) - -weak_alias (__sqrtf, sqrtf) diff --git a/sysdeps/sparc/sparc64/hp-timing.h b/sysdeps/sparc/sparc64/hp-timing.h deleted file mode 100644 index 433dd28d06..0000000000 --- a/sysdeps/sparc/sparc64/hp-timing.h +++ /dev/null @@ -1,33 +0,0 @@ -/* High precision, low overhead timing functions. sparc64 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _HP_TIMING_H -#define _HP_TIMING_H 1 - -#define HP_TIMING_AVAIL (1) -#define HP_SMALL_TIMING_AVAIL (1) -#define HP_TIMING_INLINE (1) - -typedef unsigned long int hp_timing_t; - -#define HP_TIMING_NOW(Var) __asm__ __volatile__ ("rd %%tick, %0" : "=r" (Var)) - -#include - -#endif /* hp-timing.h */ diff --git a/sysdeps/sparc/sparc64/jmpbuf-unwind.h b/sysdeps/sparc/sparc64/jmpbuf-unwind.h deleted file mode 100644 index eb2e2e2fb4..0000000000 --- a/sysdeps/sparc/sparc64/jmpbuf-unwind.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2005. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((unsigned long int) (address) \ - < (jmpbuf)->__uc_mcontext.__mc_gregs[MC_O6] + 2047) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) \ - < (uintptr_t) (_jmpbuf)[0].__uc_mcontext.__mc_gregs[MC_O6] + 2047 - (_adj)) - -/* We use the normal lobngjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/sparc/sparc64/lshift.S b/sysdeps/sparc/sparc64/lshift.S deleted file mode 100644 index 74ce43bb01..0000000000 --- a/sysdeps/sparc/sparc64/lshift.S +++ /dev/null @@ -1,95 +0,0 @@ -/* SPARC v9 __mpn_lshift -- - - Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include - -/* INPUT PARAMETERS - res_ptr %o0 - src_ptr %o1 - size %o2 - cnt %o3 */ - - .register %g2, #scratch - .register %g3, #scratch - -ENTRY(__mpn_lshift) - sllx %o2,3,%g1 - add %o1,%g1,%o1 ! make %o1 point at end of src - ldx [%o1-8],%g2 ! load first limb - sub %g0,%o3,%o5 ! negate shift count - add %o0,%g1,%o0 ! make %o0 point at end of res - add %o2,-1,%o2 - andcc %o2,4-1,%g4 ! number of limbs in first loop - srlx %g2,%o5,%g1 ! compute function result - be,pn %xcc,.L0 ! if multiple of 4 limbs, skip first loop - mov %g1,%g5 - - sub %o2,%g4,%o2 ! adjust count for main loop - -.Loop0: ldx [%o1-16],%g3 - add %o0,-8,%o0 - add %o1,-8,%o1 - sllx %g2,%o3,%o4 - addcc %g4,-1,%g4 - srlx %g3,%o5,%g1 - mov %g3,%g2 - or %o4,%g1,%o4 - bne,pt %xcc,.Loop0 - stx %o4,[%o0+0] - -.L0: brz,pn %o2,.Lend - nop - -.Loop: ldx [%o1-16],%g3 - add %o0,-32,%o0 - sllx %g2,%o3,%o4 - addcc %o2,-4,%o2 - srlx %g3,%o5,%g1 - - ldx [%o1-24],%g2 - sllx %g3,%o3,%g4 - or %o4,%g1,%o4 - stx %o4,[%o0+24] - srlx %g2,%o5,%g1 - - ldx [%o1-32],%g3 - sllx %g2,%o3,%o4 - or %g4,%g1,%g4 - stx %g4,[%o0+16] - srlx %g3,%o5,%g1 - - ldx [%o1-40],%g2 - sllx %g3,%o3,%g4 - or %o4,%g1,%o4 - stx %o4,[%o0+8] - srlx %g2,%o5,%g1 - - add %o1,-32,%o1 - or %g4,%g1,%g4 - bne,pt %xcc,.Loop - stx %g4,[%o0+0] - -.Lend: sllx %g2,%o3,%g2 - stx %g2,[%o0-8] - - jmpl %o7+8, %g0 - mov %g5,%o0 - -END(__mpn_lshift) diff --git a/sysdeps/sparc/sparc64/memchr.S b/sysdeps/sparc/sparc64/memchr.S deleted file mode 100644 index e82075510b..0000000000 --- a/sysdeps/sparc/sparc64/memchr.S +++ /dev/null @@ -1,260 +0,0 @@ -/* memchr (str, ch, n) -- Return pointer to first occurrence of CH in STR less - than N. - For SPARC v9. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jan Vondrak and - Jakub Jelinek . - This version is developed using the same algorithm as the fast C - version which carries the following introduction: - Based on strlen implementation by Torbjorn Granlund (tege@sics.se), - with help from Dan Sahlin (dan@sics.se) and - commentary by Jim Blandy (jimb@ai.mit.edu); - adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), - and implemented by Roland McGrath (roland@ai.mit.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC -#define XCC xcc -#define USE_BPR - .register %g2, #scratch - .register %g3, #scratch -#endif - - /* Normally, this uses - ((xword - 0x0101010101010101) & 0x8080808080808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 32 -ENTRY(__memchr) - and %o1, 0xff, %o1 /* IEU0 Group */ -#ifdef USE_BPR - brz,pn %o2, 12f /* CTI+IEU1 */ -#else - tst %o2 /* IEU1 */ - be,pn %XCC, 12f /* CTI */ -#endif - sll %o1, 8, %g3 /* IEU0 Group */ - addcc %o0, %o2, %o2 /* IEU1 */ - movcs %XCC, -1, %o2 /* IEU0 Group */ - - sethi %hi(0x01010101), %g1 /* IEU0 Group */ - or %g3, %o1, %g3 /* IEU1 */ - ldub [%o0], %o3 /* Load */ - sllx %g3, 16, %g5 /* IEU0 Group */ - - or %g1, %lo(0x01010101), %g1 /* IEU1 */ - sllx %g1, 32, %g2 /* IEU0 Group */ - or %g3, %g5, %g3 /* IEU1 */ - sllx %g3, 32, %g5 /* IEU0 Group */ - - cmp %o3, %o1 /* IEU1 */ - be,pn %xcc, 13f /* CTI */ - or %g1, %g2, %g1 /* IEU0 Group */ - andcc %o0, 7, %g0 /* IEU1 */ - - bne,a,pn %icc, 21f /* CTI */ - add %o0, 1, %o0 /* IEU0 Group */ - ldx [%o0], %o3 /* Load Group */ - sllx %g1, 7, %g2 /* IEU0 */ - - or %g3, %g5, %g3 /* IEU1 */ -1: add %o0, 8, %o0 /* IEU0 Group */ - xor %o3, %g3, %o4 /* IEU1 */ - /* %g1 = 0101010101010101 * - * %g2 = 8080088080808080 * - * %g3 = c c c c c c c c * - * %o3 = value * - * %o4 = value XOR c */ -2: cmp %o0, %o2 /* IEU1 Group */ - - bgu,pn %XCC, 11f /* CTI */ - ldxa [%o0] ASI_PNF, %o3 /* Load */ - sub %o4, %g1, %o5 /* IEU0 Group */ - add %o0, 8, %o0 /* IEU1 */ -#ifdef EIGHTBIT_NOT_RARE - andn %o5, %o4, %o5 /* IEU0 Group */ -#endif - - andcc %o5, %g2, %g0 /* IEU1 Group */ - be,a,pt %xcc, 2b /* CTI */ - xor %o3, %g3, %o4 /* IEU0 */ - srlx %o4, 56, %g5 /* IEU0 */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 3f /* CTI */ - srlx %o4, 48, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 4f /* CTI */ - srlx %o4, 40, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 5f /* CTI */ - - srlx %o4, 32, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 6f /* CTI */ - srlx %o4, 24, %g5 /* IEU0 */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 7f /* CTI */ - srlx %o4, 16, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 8f /* CTI */ - srlx %o4, 8, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 9f /* CTI */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - bne,pt %icc, 2b /* CTI */ - xor %o3, %g3, %o4 /* IEU0 */ - retl /* CTI+IEU1 Group */ - - add %o0, -9, %o0 /* IEU0 */ - - .align 16 -3: retl /* CTI+IEU1 Group */ - add %o0, -16, %o0 /* IEU0 */ -4: retl /* CTI+IEU1 Group */ - add %o0, -15, %o0 /* IEU0 */ - -5: retl /* CTI+IEU1 Group */ - add %o0, -14, %o0 /* IEU0 */ -6: retl /* CTI+IEU1 Group */ - add %o0, -13, %o0 /* IEU0 */ - -7: retl /* CTI+IEU1 Group */ - add %o0, -12, %o0 /* IEU0 */ -8: retl /* CTI+IEU1 Group */ - add %o0, -11, %o0 /* IEU0 */ - -9: retl /* CTI+IEU1 Group */ - add %o0, -10, %o0 /* IEU0 */ -11: sub %o4, %g1, %o5 /* IEU0 Group */ - sub %o0, 8, %o0 /* IEU1 */ - - andcc %o5, %g2, %g0 /* IEU1 Group */ - be,pt %xcc, 12f /* CTI */ - sub %o2, %o0, %o2 /* IEU0 */ - tst %o2 /* IEU1 Group */ - - be,pn %XCC, 12f /* CTI */ - srlx %o4, 56, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 13f /* CTI */ - - cmp %o2, 1 /* IEU0 */ - be,pn %XCC, 12f /* CTI Group */ - srlx %o4, 48, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 14f /* CTI */ - cmp %o2, 2 /* IEU1 Group */ - be,pn %XCC, 12f /* CTI */ - srlx %o4, 40, %g5 /* IEU0 */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 15f /* CTI */ - cmp %o2, 3 /* IEU1 Group */ - be,pn %XCC, 12f /* CTI */ - - srlx %o4, 32, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 16f /* CTI */ - cmp %o2, 4 /* IEU1 Group */ - - be,pn %XCC, 12f /* CTI */ - srlx %o4, 24, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 17f /* CTI */ - - cmp %o2, 5 /* IEU1 Group */ - be,pn %XCC, 12f /* CTI */ - srlx %o4, 16, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 18f /* CTI */ - cmp %o2, 6 /* IEU1 Group */ - be,pn %XCC, 12f /* CTI */ - srlx %o4, 8, %g5 /* IEU0 */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 19f /* CTI */ - nop /* IEU0 */ -12: retl /* CTI+IEU1 Group */ - - clr %o0 /* IEU0 */ - nop /* Stub */ -13: retl /* CTI+IEU1 Group */ - nop /* IEU0 */ - -14: retl /* CTI+IEU1 Group */ - add %o0, 1, %o0 /* IEU0 */ -15: retl /* CTI+IEU1 Group */ - add %o0, 2, %o0 /* IEU0 */ - -16: retl /* CTI+IEU1 Group */ - add %o0, 3, %o0 /* IEU0 */ -17: retl /* CTI+IEU1 Group */ - add %o0, 4, %o0 /* IEU0 */ - -18: retl /* CTI+IEU1 Group */ - add %o0, 5, %o0 /* IEU0 */ -19: retl /* CTI+IEU1 Group */ - add %o0, 6, %o0 /* IEU0 */ - -21: cmp %o0, %o2 /* IEU1 */ - be,pn %XCC, 12b /* CTI */ - sllx %g1, 7, %g2 /* IEU0 Group */ - ldub [%o0], %o3 /* Load */ - - or %g3, %g5, %g3 /* IEU1 */ -22: andcc %o0, 7, %g0 /* IEU1 Group */ - be,a,pn %icc, 1b /* CTI */ - ldx [%o0], %o3 /* Load */ - - cmp %o3, %o1 /* IEU1 Group */ - be,pn %xcc, 23f /* CTI */ - add %o0, 1, %o0 /* IEU0 */ - cmp %o0, %o2 /* IEU1 Group */ - - bne,a,pt %XCC, 22b /* CTI */ - ldub [%o0], %o3 /* Load */ - retl /* CTI+IEU1 Group */ - clr %o0 /* IEU0 */ - -23: retl /* CTI+IEU1 Group */ - add %o0, -1, %o0 /* IEU0 */ -END(__memchr) - -weak_alias (__memchr, memchr) -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/sparc/sparc64/memcmp.S b/sysdeps/sparc/sparc64/memcmp.S deleted file mode 100644 index 00ff2eec6b..0000000000 --- a/sysdeps/sparc/sparc64/memcmp.S +++ /dev/null @@ -1,142 +0,0 @@ -/* Compare two memory blocks for differences in the first COUNT bytes. - For SPARC v9. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jan Vondrak and - Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC -#define XCC xcc -#define USE_BPR - .register %g2, #scratch - .register %g3, #scratch -#endif - - .text - .align 32 -ENTRY(memcmp) -#ifdef USE_BPR - brz,pn %o2, 3f /* CTI+IEU1 Group */ -#else - tst %o2 /* IEU1 Group */ - be,pn %XCC, 3f /* CTI */ -#endif - andcc %o0, 7, %g0 /* IEU1 Group */ - bne,pn %icc, 8f /* CTI */ -1: andcc %o1, 7, %g1 /* IEU1 Group */ - - bne,pn %icc, 10f /* CTI */ - mov 64, %g3 /* IEU0 */ - ldx [%o0], %g1 /* Load Group */ - sub %o1, %o0, %o1 /* IEU0 */ - - ldx [%o0 + %o1], %g2 /* Load Group */ - add %o0, 8, %o0 /* IEU0 */ -2: mov %g1, %o3 /* IEU0 Group */ - subcc %o2, 8, %o2 /* IEU1 */ - - bcs,pn %XCC, 5f /* CTI */ - ldxa [%o0] ASI_PNF, %g1 /* Load Group */ - mov %g2, %o4 /* IEU0 */ - ldxa [%o0 + %o1] ASI_PNF, %g2 /* Load Group */ - - cmp %o3, %o4 /* IEU1 */ - be,pt %xcc, 2b /* CTI */ - add %o0, 8, %o0 /* IEU0 */ -7: mov -1, %o0 /* IEU1 */ - - retl /* CTI+IEU1 Group */ - movgu %xcc, 1, %o0 /* Single Group */ -3: retl /* CTI+IEU1 Group */ - clr %o0 /* IEU0 */ - - .align 16 -5: mov %g2, %o4 /* IEU0 */ -6: cmp %o2, -8 /* IEU1 */ - be,pn %XCC, 3b /* CTI */ - sub %g0, %o2, %o2 /* IEU0 Group */ - - sllx %o2, 3, %o2 /* IEU0 Group */ - srlx %o3, %o2, %o3 /* IEU0 Group */ - srlx %o4, %o2, %o4 /* IEU0 Group */ - clr %o0 /* IEU1 */ - - cmp %o3, %o4 /* IEU1 Group */ - movgu %xcc, 1, %o0 /* Single Group */ - retl /* CTI+IEU1 Group */ - movlu %xcc, -1, %o0 /* Single Group */ - -8: ldub [%o0], %o3 /* Load */ - add %o0, 1, %o0 /* IEU0 */ - ldub [%o1], %o4 /* Load Group */ - add %o1, 1, %o1 /* IEU0 */ - -9: cmp %o3, %o4 /* IEU1 Group */ - bne,pn %xcc, 12f /* CTI */ - subcc %o2, 1, %o2 /* IEU1 Group */ - be,pn %XCC, 3b /* CTI */ - - lduba [%o0] ASI_PNF, %o3 /* Load */ - andcc %o0, 7, %g0 /* IEU1 Group */ - be,pn %icc, 1b /* CTI */ - lduba [%o1] ASI_PNF, %o4 /* Load */ - - add %o0, 1, %o0 /* IEU0 Group */ - ba,pt %xcc, 9b /* CTI */ - add %o1, 1, %o1 /* IEU1 */ - - .align 16 -12: mov -1, %o0 /* IEU0 Group */ - cmp %o3, %o4 /* IEU1 */ - retl /* CTI+IEU1 Group */ - movgu %xcc, 1, %o0 /* Single Group */ - - .align 16 - nop /* Stub */ -10: sllx %g1, 3, %g2 /* IEU0 Group */ - sub %o1, %g1, %o1 /* IEU1 */ - sub %g3, %g2, %g3 /* IEU0 Group */ - - ldxa [%o0] ASI_PNF, %g5 /* Load */ - sub %o1, %o0, %o1 /* IEU1 */ - ldxa [%o0 + %o1] ASI_PNF, %g4 /* Load Group */ - add %o0, 8, %o0 /* IEU0 */ - -11: sllx %g4, %g2, %o4 /* IEU0 Group */ - ldxa [%o0 + %o1] ASI_PNF, %g4 /* Load */ - srlx %g4, %g3, %o5 /* IEU0 Group */ - mov %g5, %o3 /* IEU1 */ - - ldxa [%o0] ASI_PNF, %g5 /* Load */ - subcc %o2, 8, %o2 /* IEU1 Group */ - bcs,pn %XCC, 6b /* CTI */ - or %o4, %o5, %o4 /* IEU0 */ - - cmp %o3, %o4 /* IEU1 Group */ - be,pt %xcc, 11b /* CTI */ - add %o0, 8, %o0 /* IEU0 */ - mov -1, %o0 /* IEU0 */ - - retl /* CTI+IEU1 Group */ - movgu %xcc, 1, %o0 /* Single Group */ -END(memcmp) - -#undef bcmp -weak_alias (memcmp, bcmp) -libc_hidden_builtin_def (memcmp) diff --git a/sysdeps/sparc/sparc64/memcpy.S b/sysdeps/sparc/sparc64/memcpy.S deleted file mode 100644 index c1c0bf64d1..0000000000 --- a/sysdeps/sparc/sparc64/memcpy.S +++ /dev/null @@ -1,580 +0,0 @@ -/* Copy SIZE bytes from SRC to DEST. - For UltraSPARC. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@caip.rutgers.edu) and - Jakub Jelinek (jakub@redhat.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC -#define USE_BPR - .register %g2, #scratch - .register %g3, #scratch - .register %g6, #scratch -#define XCC xcc -#endif -#define FPRS_FEF 4 - -#define FREG_FROB(f1, f2, f3, f4, f5, f6, f7, f8, f9) \ - faligndata %f1, %f2, %f48; \ - faligndata %f2, %f3, %f50; \ - faligndata %f3, %f4, %f52; \ - faligndata %f4, %f5, %f54; \ - faligndata %f5, %f6, %f56; \ - faligndata %f6, %f7, %f58; \ - faligndata %f7, %f8, %f60; \ - faligndata %f8, %f9, %f62; - -#define MAIN_LOOP_CHUNK(src, dest, fdest, fsrc, len, jmptgt) \ - ldda [%src] %asi, %fdest; \ - add %src, 0x40, %src; \ - add %dest, 0x40, %dest; \ - subcc %len, 0x40, %len; \ - be,pn %xcc, jmptgt; \ - stda %fsrc, [%dest - 0x40] %asi; - -#define LOOP_CHUNK1(src, dest, len, branch_dest) \ - MAIN_LOOP_CHUNK(src, dest, f0, f48, len, branch_dest) -#define LOOP_CHUNK2(src, dest, len, branch_dest) \ - MAIN_LOOP_CHUNK(src, dest, f16, f48, len, branch_dest) -#define LOOP_CHUNK3(src, dest, len, branch_dest) \ - MAIN_LOOP_CHUNK(src, dest, f32, f48, len, branch_dest) - -#define STORE_SYNC(dest, fsrc) \ - stda %fsrc, [%dest] %asi; \ - add %dest, 0x40, %dest; - -#define STORE_JUMP(dest, fsrc, target) \ - stda %fsrc, [%dest] %asi; \ - add %dest, 0x40, %dest; \ - ba,pt %xcc, target; - -#define VISLOOP_PAD nop; nop; nop; nop; \ - nop; nop; nop; nop; \ - nop; nop; nop; nop; \ - nop; nop; nop; - -#define FINISH_VISCHUNK(dest, f0, f1, left) \ - subcc %left, 8, %left; \ - bl,pn %xcc, 205f; \ - faligndata %f0, %f1, %f48; \ - std %f48, [%dest]; \ - add %dest, 8, %dest; - -#define UNEVEN_VISCHUNK(dest, f0, f1, left) \ - subcc %left, 8, %left; \ - bl,pn %xcc, 205f; \ - fsrc2 %f0, %f1; \ - ba,a,pt %xcc, 204f; - - /* Macros for non-VIS memcpy code. */ -#define MOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3) \ - ldx [%src + offset + 0x00], %t0; \ - ldx [%src + offset + 0x08], %t1; \ - ldx [%src + offset + 0x10], %t2; \ - ldx [%src + offset + 0x18], %t3; \ - stw %t0, [%dst + offset + 0x04]; \ - srlx %t0, 32, %t0; \ - stw %t0, [%dst + offset + 0x00]; \ - stw %t1, [%dst + offset + 0x0c]; \ - srlx %t1, 32, %t1; \ - stw %t1, [%dst + offset + 0x08]; \ - stw %t2, [%dst + offset + 0x14]; \ - srlx %t2, 32, %t2; \ - stw %t2, [%dst + offset + 0x10]; \ - stw %t3, [%dst + offset + 0x1c]; \ - srlx %t3, 32, %t3; \ - stw %t3, [%dst + offset + 0x18]; - -#define MOVE_BIGALIGNCHUNK(src, dst, offset, t0, t1, t2, t3) \ - ldx [%src + offset + 0x00], %t0; \ - ldx [%src + offset + 0x08], %t1; \ - ldx [%src + offset + 0x10], %t2; \ - ldx [%src + offset + 0x18], %t3; \ - stx %t0, [%dst + offset + 0x00]; \ - stx %t1, [%dst + offset + 0x08]; \ - stx %t2, [%dst + offset + 0x10]; \ - stx %t3, [%dst + offset + 0x18]; \ - ldx [%src + offset + 0x20], %t0; \ - ldx [%src + offset + 0x28], %t1; \ - ldx [%src + offset + 0x30], %t2; \ - ldx [%src + offset + 0x38], %t3; \ - stx %t0, [%dst + offset + 0x20]; \ - stx %t1, [%dst + offset + 0x28]; \ - stx %t2, [%dst + offset + 0x30]; \ - stx %t3, [%dst + offset + 0x38]; - -#define MOVE_LASTCHUNK(src, dst, offset, t0, t1, t2, t3) \ - ldx [%src - offset - 0x10], %t0; \ - ldx [%src - offset - 0x08], %t1; \ - stw %t0, [%dst - offset - 0x0c]; \ - srlx %t0, 32, %t2; \ - stw %t2, [%dst - offset - 0x10]; \ - stw %t1, [%dst - offset - 0x04]; \ - srlx %t1, 32, %t3; \ - stw %t3, [%dst - offset - 0x08]; - -#define MOVE_LASTALIGNCHUNK(src, dst, offset, t0, t1) \ - ldx [%src - offset - 0x10], %t0; \ - ldx [%src - offset - 0x08], %t1; \ - stx %t0, [%dst - offset - 0x10]; \ - stx %t1, [%dst - offset - 0x08]; - - .text - .align 32 -ENTRY(__memcpy_large) -200: be,pt %xcc, 201f /* CTI */ - andcc %o0, 0x38, %g5 /* IEU1 Group */ - mov 8, %g1 /* IEU0 */ - sub %g1, %g2, %g2 /* IEU0 Group */ - andcc %o0, 1, %g0 /* IEU1 */ - be,pt %icc, 2f /* CTI */ - sub %o2, %g2, %o2 /* IEU0 Group */ -1: ldub [%o1], %o5 /* Load Group */ - add %o1, 1, %o1 /* IEU0 */ - add %o0, 1, %o0 /* IEU1 */ - subcc %g2, 1, %g2 /* IEU1 Group */ - be,pn %xcc, 3f /* CTI */ - stb %o5, [%o0 - 1] /* Store */ -2: ldub [%o1], %o5 /* Load Group */ - add %o0, 2, %o0 /* IEU0 */ - ldub [%o1 + 1], %g3 /* Load Group */ - subcc %g2, 2, %g2 /* IEU1 Group */ - stb %o5, [%o0 - 2] /* Store */ - add %o1, 2, %o1 /* IEU0 */ - bne,pt %xcc, 2b /* CTI Group */ - stb %g3, [%o0 - 1] /* Store */ -3: andcc %o0, 0x38, %g5 /* IEU1 Group */ -201: be,pt %icc, 202f /* CTI */ - mov 64, %g1 /* IEU0 */ - fsrc2 %f0, %f2 /* FPU */ - sub %g1, %g5, %g5 /* IEU0 Group */ - alignaddr %o1, %g0, %g1 /* GRU Group */ - ldd [%g1], %f4 /* Load Group */ - sub %o2, %g5, %o2 /* IEU0 */ -1: ldd [%g1 + 0x8], %f6 /* Load Group */ - add %g1, 0x8, %g1 /* IEU0 Group */ - subcc %g5, 8, %g5 /* IEU1 */ - faligndata %f4, %f6, %f0 /* GRU Group */ - std %f0, [%o0] /* Store */ - add %o1, 8, %o1 /* IEU0 Group */ - be,pn %xcc, 202f /* CTI */ - add %o0, 8, %o0 /* IEU1 */ - ldd [%g1 + 0x8], %f4 /* Load Group */ - add %g1, 8, %g1 /* IEU0 */ - subcc %g5, 8, %g5 /* IEU1 */ - faligndata %f6, %f4, %f0 /* GRU Group */ - std %f0, [%o0] /* Store */ - add %o1, 8, %o1 /* IEU0 */ - bne,pt %xcc, 1b /* CTI Group */ - add %o0, 8, %o0 /* IEU0 */ -202: membar #LoadStore | #StoreStore | #StoreLoad /* LSU Group */ - wr %g0, ASI_BLK_P, %asi /* LSU Group */ - subcc %o2, 0x40, %g6 /* IEU1 Group */ - mov %o1, %g1 /* IEU0 */ - andncc %g6, (0x40 - 1), %g6 /* IEU1 Group */ - srl %g1, 3, %g2 /* IEU0 */ - sub %o2, %g6, %g3 /* IEU0 Group */ - andn %o1, (0x40 - 1), %o1 /* IEU1 */ - and %g2, 7, %g2 /* IEU0 Group */ - andncc %g3, 0x7, %g3 /* IEU1 */ - fsrc2 %f0, %f2 /* FPU */ - sub %g3, 0x10, %g3 /* IEU0 Group */ - sub %o2, %g6, %o2 /* IEU1 */ - alignaddr %g1, %g0, %g0 /* GRU Group */ - add %g1, %g6, %g1 /* IEU0 Group */ - subcc %o2, %g3, %o2 /* IEU1 */ - ldda [%o1 + 0x00] %asi, %f0 /* LSU Group */ - add %g1, %g3, %g1 /* IEU0 */ - ldda [%o1 + 0x40] %asi, %f16 /* LSU Group */ - sub %g6, 0x80, %g6 /* IEU0 */ - ldda [%o1 + 0x80] %asi, %f32 /* LSU Group */ - /* Clk1 Group 8-( */ - /* Clk2 Group 8-( */ - /* Clk3 Group 8-( */ - /* Clk4 Group 8-( */ -203: rd %pc, %g5 /* PDU Group 8-( */ - addcc %g5, %lo(300f - 203b), %g5 /* IEU1 Group */ - sll %g2, 9, %g2 /* IEU0 */ - jmpl %g5 + %g2, %g0 /* CTI Group brk forced*/ - addcc %o1, 0xc0, %o1 /* IEU1 Group */ - - .align 512 /* OK, here comes the fun part... */ -300: FREG_FROB(f0, f2, f4, f6, f8, f10,f12,f14,f16) LOOP_CHUNK1(o1, o0, g6, 301f) - FREG_FROB(f16,f18,f20,f22,f24,f26,f28,f30,f32) LOOP_CHUNK2(o1, o0, g6, 302f) - FREG_FROB(f32,f34,f36,f38,f40,f42,f44,f46,f0) LOOP_CHUNK3(o1, o0, g6, 303f) - b,pt %xcc, 300b+4; faligndata %f0, %f2, %f48 -301: FREG_FROB(f16,f18,f20,f22,f24,f26,f28,f30,f32) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f32,f34,f36,f38,f40,f42,f44,f46,f0) STORE_JUMP(o0, f48, 400f) membar #Sync -302: FREG_FROB(f32,f34,f36,f38,f40,f42,f44,f46,f0) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f0, f2, f4, f6, f8, f10,f12,f14,f16) STORE_JUMP(o0, f48, 416f) membar #Sync -303: FREG_FROB(f0, f2, f4, f6, f8, f10,f12,f14,f16) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f16,f18,f20,f22,f24,f26,f28,f30,f32) STORE_JUMP(o0, f48, 432f) membar #Sync - VISLOOP_PAD -310: FREG_FROB(f2, f4, f6, f8, f10,f12,f14,f16,f18) LOOP_CHUNK1(o1, o0, g6, 311f) - FREG_FROB(f18,f20,f22,f24,f26,f28,f30,f32,f34) LOOP_CHUNK2(o1, o0, g6, 312f) - FREG_FROB(f34,f36,f38,f40,f42,f44,f46,f0, f2) LOOP_CHUNK3(o1, o0, g6, 313f) - b,pt %xcc, 310b+4; faligndata %f2, %f4, %f48 -311: FREG_FROB(f18,f20,f22,f24,f26,f28,f30,f32,f34) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f34,f36,f38,f40,f42,f44,f46,f0, f2) STORE_JUMP(o0, f48, 402f) membar #Sync -312: FREG_FROB(f34,f36,f38,f40,f42,f44,f46,f0, f2) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f2, f4, f6, f8, f10,f12,f14,f16,f18) STORE_JUMP(o0, f48, 418f) membar #Sync -313: FREG_FROB(f2, f4, f6, f8, f10,f12,f14,f16,f18) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f18,f20,f22,f24,f26,f28,f30,f32,f34) STORE_JUMP(o0, f48, 434f) membar #Sync - VISLOOP_PAD -320: FREG_FROB(f4, f6, f8, f10,f12,f14,f16,f18,f20) LOOP_CHUNK1(o1, o0, g6, 321f) - FREG_FROB(f20,f22,f24,f26,f28,f30,f32,f34,f36) LOOP_CHUNK2(o1, o0, g6, 322f) - FREG_FROB(f36,f38,f40,f42,f44,f46,f0, f2, f4) LOOP_CHUNK3(o1, o0, g6, 323f) - b,pt %xcc, 320b+4; faligndata %f4, %f6, %f48 -321: FREG_FROB(f20,f22,f24,f26,f28,f30,f32,f34,f36) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f36,f38,f40,f42,f44,f46,f0, f2, f4) STORE_JUMP(o0, f48, 404f) membar #Sync -322: FREG_FROB(f36,f38,f40,f42,f44,f46,f0, f2, f4) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f4, f6, f8, f10,f12,f14,f16,f18,f20) STORE_JUMP(o0, f48, 420f) membar #Sync -323: FREG_FROB(f4, f6, f8, f10,f12,f14,f16,f18,f20) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f20,f22,f24,f26,f28,f30,f32,f34,f36) STORE_JUMP(o0, f48, 436f) membar #Sync - VISLOOP_PAD -330: FREG_FROB(f6, f8, f10,f12,f14,f16,f18,f20,f22) LOOP_CHUNK1(o1, o0, g6, 331f) - FREG_FROB(f22,f24,f26,f28,f30,f32,f34,f36,f38) LOOP_CHUNK2(o1, o0, g6, 332f) - FREG_FROB(f38,f40,f42,f44,f46,f0, f2, f4, f6) LOOP_CHUNK3(o1, o0, g6, 333f) - b,pt %xcc, 330b+4; faligndata %f6, %f8, %f48 -331: FREG_FROB(f22,f24,f26,f28,f30,f32,f34,f36,f38) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f38,f40,f42,f44,f46,f0, f2, f4, f6) STORE_JUMP(o0, f48, 406f) membar #Sync -332: FREG_FROB(f38,f40,f42,f44,f46,f0, f2, f4, f6) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f6, f8, f10,f12,f14,f16,f18,f20,f22) STORE_JUMP(o0, f48, 422f) membar #Sync -333: FREG_FROB(f6, f8, f10,f12,f14,f16,f18,f20,f22) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f22,f24,f26,f28,f30,f32,f34,f36,f38) STORE_JUMP(o0, f48, 438f) membar #Sync - VISLOOP_PAD -340: FREG_FROB(f8, f10,f12,f14,f16,f18,f20,f22,f24) LOOP_CHUNK1(o1, o0, g6, 341f) - FREG_FROB(f24,f26,f28,f30,f32,f34,f36,f38,f40) LOOP_CHUNK2(o1, o0, g6, 342f) - FREG_FROB(f40,f42,f44,f46,f0, f2, f4, f6, f8) LOOP_CHUNK3(o1, o0, g6, 343f) - b,pt %xcc, 340b+4; faligndata %f8, %f10, %f48 -341: FREG_FROB(f24,f26,f28,f30,f32,f34,f36,f38,f40) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f40,f42,f44,f46,f0, f2, f4, f6, f8) STORE_JUMP(o0, f48, 408f) membar #Sync -342: FREG_FROB(f40,f42,f44,f46,f0, f2, f4, f6, f8) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f8, f10,f12,f14,f16,f18,f20,f22,f24) STORE_JUMP(o0, f48, 424f) membar #Sync -343: FREG_FROB(f8, f10,f12,f14,f16,f18,f20,f22,f24) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f24,f26,f28,f30,f32,f34,f36,f38,f40) STORE_JUMP(o0, f48, 440f) membar #Sync - VISLOOP_PAD -350: FREG_FROB(f10,f12,f14,f16,f18,f20,f22,f24,f26) LOOP_CHUNK1(o1, o0, g6, 351f) - FREG_FROB(f26,f28,f30,f32,f34,f36,f38,f40,f42) LOOP_CHUNK2(o1, o0, g6, 352f) - FREG_FROB(f42,f44,f46,f0, f2, f4, f6, f8, f10) LOOP_CHUNK3(o1, o0, g6, 353f) - b,pt %xcc, 350b+4; faligndata %f10, %f12, %f48 -351: FREG_FROB(f26,f28,f30,f32,f34,f36,f38,f40,f42) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f42,f44,f46,f0, f2, f4, f6, f8, f10) STORE_JUMP(o0, f48, 410f) membar #Sync -352: FREG_FROB(f42,f44,f46,f0, f2, f4, f6, f8, f10) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f10,f12,f14,f16,f18,f20,f22,f24,f26) STORE_JUMP(o0, f48, 426f) membar #Sync -353: FREG_FROB(f10,f12,f14,f16,f18,f20,f22,f24,f26) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f26,f28,f30,f32,f34,f36,f38,f40,f42) STORE_JUMP(o0, f48, 442f) membar #Sync - VISLOOP_PAD -360: FREG_FROB(f12,f14,f16,f18,f20,f22,f24,f26,f28) LOOP_CHUNK1(o1, o0, g6, 361f) - FREG_FROB(f28,f30,f32,f34,f36,f38,f40,f42,f44) LOOP_CHUNK2(o1, o0, g6, 362f) - FREG_FROB(f44,f46,f0, f2, f4, f6, f8, f10,f12) LOOP_CHUNK3(o1, o0, g6, 363f) - b,pt %xcc, 360b+4; faligndata %f12, %f14, %f48 -361: FREG_FROB(f28,f30,f32,f34,f36,f38,f40,f42,f44) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f44,f46,f0, f2, f4, f6, f8, f10,f12) STORE_JUMP(o0, f48, 412f) membar #Sync -362: FREG_FROB(f44,f46,f0, f2, f4, f6, f8, f10,f12) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f12,f14,f16,f18,f20,f22,f24,f26,f28) STORE_JUMP(o0, f48, 428f) membar #Sync -363: FREG_FROB(f12,f14,f16,f18,f20,f22,f24,f26,f28) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f28,f30,f32,f34,f36,f38,f40,f42,f44) STORE_JUMP(o0, f48, 444f) membar #Sync - VISLOOP_PAD -370: FREG_FROB(f14,f16,f18,f20,f22,f24,f26,f28,f30) LOOP_CHUNK1(o1, o0, g6, 371f) - FREG_FROB(f30,f32,f34,f36,f38,f40,f42,f44,f46) LOOP_CHUNK2(o1, o0, g6, 372f) - FREG_FROB(f46,f0, f2, f4, f6, f8, f10,f12,f14) LOOP_CHUNK3(o1, o0, g6, 373f) - b,pt %xcc, 370b+4; faligndata %f14, %f16, %f48 -371: FREG_FROB(f30,f32,f34,f36,f38,f40,f42,f44,f46) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f46,f0, f2, f4, f6, f8, f10,f12,f14) STORE_JUMP(o0, f48, 414f) membar #Sync -372: FREG_FROB(f46,f0, f2, f4, f6, f8, f10,f12,f14) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f14,f16,f18,f20,f22,f24,f26,f28,f30) STORE_JUMP(o0, f48, 430f) membar #Sync -373: FREG_FROB(f14,f16,f18,f20,f22,f24,f26,f28,f30) STORE_SYNC(o0, f48) membar #Sync - FREG_FROB(f30,f32,f34,f36,f38,f40,f42,f44,f46) STORE_JUMP(o0, f48, 446f) membar #Sync - VISLOOP_PAD -400: FINISH_VISCHUNK(o0, f0, f2, g3) -402: FINISH_VISCHUNK(o0, f2, f4, g3) -404: FINISH_VISCHUNK(o0, f4, f6, g3) -406: FINISH_VISCHUNK(o0, f6, f8, g3) -408: FINISH_VISCHUNK(o0, f8, f10, g3) -410: FINISH_VISCHUNK(o0, f10, f12, g3) -412: FINISH_VISCHUNK(o0, f12, f14, g3) -414: UNEVEN_VISCHUNK(o0, f14, f0, g3) -416: FINISH_VISCHUNK(o0, f16, f18, g3) -418: FINISH_VISCHUNK(o0, f18, f20, g3) -420: FINISH_VISCHUNK(o0, f20, f22, g3) -422: FINISH_VISCHUNK(o0, f22, f24, g3) -424: FINISH_VISCHUNK(o0, f24, f26, g3) -426: FINISH_VISCHUNK(o0, f26, f28, g3) -428: FINISH_VISCHUNK(o0, f28, f30, g3) -430: UNEVEN_VISCHUNK(o0, f30, f0, g3) -432: FINISH_VISCHUNK(o0, f32, f34, g3) -434: FINISH_VISCHUNK(o0, f34, f36, g3) -436: FINISH_VISCHUNK(o0, f36, f38, g3) -438: FINISH_VISCHUNK(o0, f38, f40, g3) -440: FINISH_VISCHUNK(o0, f40, f42, g3) -442: FINISH_VISCHUNK(o0, f42, f44, g3) -444: FINISH_VISCHUNK(o0, f44, f46, g3) -446: UNEVEN_VISCHUNK(o0, f46, f0, g3) -204: ldd [%o1], %f2 /* Load Group */ - add %o1, 8, %o1 /* IEU0 */ - subcc %g3, 8, %g3 /* IEU1 */ - faligndata %f0, %f2, %f8 /* GRU Group */ - std %f8, [%o0] /* Store */ - bl,pn %xcc, 205f /* CTI */ - add %o0, 8, %o0 /* IEU0 Group */ - ldd [%o1], %f0 /* Load Group */ - add %o1, 8, %o1 /* IEU0 */ - subcc %g3, 8, %g3 /* IEU1 */ - faligndata %f2, %f0, %f8 /* GRU Group */ - std %f8, [%o0] /* Store */ - bge,pt %xcc, 204b /* CTI */ - add %o0, 8, %o0 /* IEU0 Group */ -205: brz,pt %o2, 207f /* CTI Group */ - mov %g1, %o1 /* IEU0 */ -206: ldub [%o1], %g5 /* LOAD */ - add %o1, 1, %o1 /* IEU0 */ - add %o0, 1, %o0 /* IEU1 */ - subcc %o2, 1, %o2 /* IEU1 */ - bne,pt %xcc, 206b /* CTI */ - stb %g5, [%o0 - 1] /* Store Group */ -207: membar #StoreLoad | #StoreStore /* LSU Group */ - wr %g0, FPRS_FEF, %fprs - retl - mov %g4, %o0 - -208: andcc %o2, 1, %g0 /* IEU1 Group */ - be,pt %icc, 2f+4 /* CTI */ -1: ldub [%o1], %g5 /* LOAD Group */ - add %o1, 1, %o1 /* IEU0 */ - add %o0, 1, %o0 /* IEU1 */ - subcc %o2, 1, %o2 /* IEU1 Group */ - be,pn %xcc, 209f /* CTI */ - stb %g5, [%o0 - 1] /* Store */ -2: ldub [%o1], %g5 /* LOAD Group */ - add %o0, 2, %o0 /* IEU0 */ - ldub [%o1 + 1], %o5 /* LOAD Group */ - add %o1, 2, %o1 /* IEU0 */ - subcc %o2, 2, %o2 /* IEU1 Group */ - stb %g5, [%o0 - 2] /* Store */ - bne,pt %xcc, 2b /* CTI */ - stb %o5, [%o0 - 1] /* Store */ -209: retl - mov %g4, %o0 -END(__memcpy_large) - -ENTRY(__mempcpy) - ba,pt %xcc, 210f - add %o0, %o2, %g4 -END(__mempcpy) - - .align 32 -ENTRY(memcpy) - mov %o0, %g4 /* IEU0 Group */ -210: -#ifndef USE_BPR - srl %o2, 0, %o2 /* IEU1 */ -#endif - brz,pn %o2, 209b /* CTI Group */ -218: cmp %o2, 15 /* IEU1 */ - bleu,pn %xcc, 208b /* CTI Group */ - cmp %o2, (64 * 6) /* IEU1 */ - bgeu,pn %xcc, 200b /* CTI Group */ - andcc %o0, 7, %g2 /* IEU1 */ - sub %o0, %o1, %g5 /* IEU0 */ - andcc %g5, 3, %o5 /* IEU1 Group */ - bne,pn %xcc, 212f /* CTI */ - andcc %o1, 3, %g0 /* IEU1 Group */ - be,a,pt %xcc, 216f /* CTI */ - andcc %o1, 4, %g0 /* IEU1 Group */ - andcc %o1, 1, %g0 /* IEU1 Group */ - be,pn %xcc, 4f /* CTI */ - andcc %o1, 2, %g0 /* IEU1 Group */ - ldub [%o1], %g2 /* Load Group */ - add %o1, 1, %o1 /* IEU0 */ - add %o0, 1, %o0 /* IEU1 */ - sub %o2, 1, %o2 /* IEU0 Group */ - bne,pn %xcc, 5f /* CTI Group */ - stb %g2, [%o0 - 1] /* Store */ -4: lduh [%o1], %g2 /* Load Group */ - add %o1, 2, %o1 /* IEU0 */ - add %o0, 2, %o0 /* IEU1 */ - sub %o2, 2, %o2 /* IEU0 */ - sth %g2, [%o0 - 2] /* Store Group + bubble */ -5: andcc %o1, 4, %g0 /* IEU1 */ -216: be,a,pn %xcc, 2f /* CTI */ - andcc %o2, -128, %g6 /* IEU1 Group */ - lduw [%o1], %g5 /* Load Group */ - add %o1, 4, %o1 /* IEU0 */ - add %o0, 4, %o0 /* IEU1 */ - sub %o2, 4, %o2 /* IEU0 Group */ - stw %g5, [%o0 - 4] /* Store */ - andcc %o2, -128, %g6 /* IEU1 Group */ -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) - MOVE_BIGCHUNK(o1, o0, 0x20, g1, g3, g5, o5) - MOVE_BIGCHUNK(o1, o0, 0x40, g1, g3, g5, o5) - MOVE_BIGCHUNK(o1, o0, 0x60, g1, g3, g5, o5) -35: subcc %g6, 128, %g6 /* IEU1 Group */ - add %o1, 128, %o1 /* IEU0 */ - bne,pt %xcc, 5b /* CTI */ - add %o0, 128, %o0 /* IEU0 Group */ -215: andcc %o2, 0x70, %g6 /* IEU1 Group */ -41: be,pn %xcc, 80f /* CTI */ - andcc %o2, 8, %g0 /* IEU1 Group */ - /* Clk1 8-( */ - /* Clk2 8-( */ - /* Clk3 8-( */ - /* Clk4 8-( */ -79: rd %pc, %o5 /* PDU Group */ - sll %g6, 1, %g5 /* IEU0 Group */ - add %o1, %g6, %o1 /* IEU1 */ - sub %o5, %g5, %o5 /* IEU0 Group */ - jmpl %o5 + %lo(80f - 79b), %g0 /* CTI Group brk forced*/ - add %o0, %g6, %o0 /* IEU0 Group */ -36: MOVE_LASTCHUNK(o1, o0, 0x60, g2, g3, g5, o5) - MOVE_LASTCHUNK(o1, o0, 0x50, g2, g3, g5, o5) - MOVE_LASTCHUNK(o1, o0, 0x40, g2, g3, g5, o5) - MOVE_LASTCHUNK(o1, o0, 0x30, g2, g3, g5, o5) - MOVE_LASTCHUNK(o1, o0, 0x20, g2, g3, g5, o5) - MOVE_LASTCHUNK(o1, o0, 0x10, g2, g3, g5, o5) - MOVE_LASTCHUNK(o1, o0, 0x00, g2, g3, g5, o5) -80: be,pt %xcc, 81f /* CTI */ - andcc %o2, 4, %g0 /* IEU1 */ - ldx [%o1], %g2 /* Load Group */ - add %o0, 8, %o0 /* IEU0 */ - stw %g2, [%o0 - 0x4] /* Store Group */ - add %o1, 8, %o1 /* IEU1 */ - srlx %g2, 32, %g2 /* IEU0 Group */ - stw %g2, [%o0 - 0x8] /* Store */ -81: be,pt %xcc, 1f /* CTI */ - andcc %o2, 2, %g0 /* IEU1 Group */ - lduw [%o1], %g2 /* Load Group */ - add %o1, 4, %o1 /* IEU0 */ - stw %g2, [%o0] /* Store Group */ - add %o0, 4, %o0 /* IEU0 */ -1: be,pt %xcc, 1f /* CTI */ - andcc %o2, 1, %g0 /* IEU1 Group */ - lduh [%o1], %g2 /* Load Group */ - add %o1, 2, %o1 /* IEU0 */ - sth %g2, [%o0] /* Store Group */ - add %o0, 2, %o0 /* IEU0 */ -1: be,pt %xcc, 211f /* CTI */ - nop /* IEU1 */ - ldub [%o1], %g2 /* Load Group */ - stb %g2, [%o0] /* Store Group + bubble */ -211: retl - mov %g4, %o0 - -82: MOVE_BIGALIGNCHUNK(o1, o0, 0x00, g1, g3, g5, o5) - MOVE_BIGALIGNCHUNK(o1, o0, 0x40, g1, g3, g5, o5) -37: subcc %g6, 128, %g6 /* IEU1 Group */ - add %o1, 128, %o1 /* IEU0 */ - bne,pt %xcc, 82b /* CTI */ - add %o0, 128, %o0 /* IEU0 Group */ - andcc %o2, 0x70, %g6 /* IEU1 */ - be,pn %xcc, 84f /* CTI */ - andcc %o2, 8, %g0 /* IEU1 Group */ - /* Clk1 8-( */ - /* Clk2 8-( */ - /* Clk3 8-( */ - /* Clk4 8-( */ -83: rd %pc, %o5 /* PDU Group */ - add %o1, %g6, %o1 /* IEU0 Group */ - sub %o5, %g6, %o5 /* IEU1 */ - jmpl %o5 + %lo(84f - 83b), %g0 /* CTI Group brk forced*/ - add %o0, %g6, %o0 /* IEU0 Group */ -38: MOVE_LASTALIGNCHUNK(o1, o0, 0x60, g2, g3) - MOVE_LASTALIGNCHUNK(o1, o0, 0x50, g2, g3) - MOVE_LASTALIGNCHUNK(o1, o0, 0x40, g2, g3) - MOVE_LASTALIGNCHUNK(o1, o0, 0x30, g2, g3) - MOVE_LASTALIGNCHUNK(o1, o0, 0x20, g2, g3) - MOVE_LASTALIGNCHUNK(o1, o0, 0x10, g2, g3) - MOVE_LASTALIGNCHUNK(o1, o0, 0x00, g2, g3) -84: be,pt %xcc, 85f /* CTI Group */ - andcc %o2, 4, %g0 /* IEU1 */ - ldx [%o1], %g2 /* Load Group */ - add %o0, 8, %o0 /* IEU0 */ - add %o1, 8, %o1 /* IEU0 Group */ - stx %g2, [%o0 - 0x8] /* Store */ -85: be,pt %xcc, 1f /* CTI */ - andcc %o2, 2, %g0 /* IEU1 Group */ - lduw [%o1], %g2 /* Load Group */ - add %o0, 4, %o0 /* IEU0 */ - add %o1, 4, %o1 /* IEU0 Group */ - stw %g2, [%o0 - 0x4] /* Store */ -1: be,pt %xcc, 1f /* CTI */ - andcc %o2, 1, %g0 /* IEU1 Group */ - lduh [%o1], %g2 /* Load Group */ - add %o0, 2, %o0 /* IEU0 */ - add %o1, 2, %o1 /* IEU0 Group */ - sth %g2, [%o0 - 0x2] /* Store */ -1: be,pt %xcc, 1f /* CTI */ - nop /* IEU0 Group */ - ldub [%o1], %g2 /* Load Group */ - stb %g2, [%o0] /* Store Group + bubble */ -1: retl - mov %g4, %o0 - -212: brz,pt %g2, 2f /* CTI Group */ - mov 8, %g1 /* IEU0 */ - sub %g1, %g2, %g2 /* IEU0 Group */ - sub %o2, %g2, %o2 /* IEU0 Group */ -1: ldub [%o1], %g5 /* Load Group */ - add %o1, 1, %o1 /* IEU0 */ - add %o0, 1, %o0 /* IEU1 */ - subcc %g2, 1, %g2 /* IEU1 Group */ - bne,pt %xcc, 1b /* CTI */ - stb %g5, [%o0 - 1] /* Store */ -2: andn %o2, 7, %g5 /* IEU0 Group */ - and %o2, 7, %o2 /* IEU1 */ - fsrc2 %f0, %f2 /* FPU */ - alignaddr %o1, %g0, %g1 /* GRU Group */ - ldd [%g1], %f4 /* Load Group */ -1: ldd [%g1 + 0x8], %f6 /* Load Group */ - add %g1, 0x8, %g1 /* IEU0 Group */ - subcc %g5, 8, %g5 /* IEU1 */ - faligndata %f4, %f6, %f0 /* GRU Group */ - std %f0, [%o0] /* Store */ - add %o1, 8, %o1 /* IEU0 Group */ - be,pn %xcc, 213f /* CTI */ - add %o0, 8, %o0 /* IEU1 */ - ldd [%g1 + 0x8], %f4 /* Load Group */ - add %g1, 8, %g1 /* IEU0 */ - subcc %g5, 8, %g5 /* IEU1 */ - faligndata %f6, %f4, %f0 /* GRU Group */ - std %f0, [%o0] /* Store */ - add %o1, 8, %o1 /* IEU0 */ - bne,pn %xcc, 1b /* CTI Group */ - add %o0, 8, %o0 /* IEU0 */ -213: brz,pn %o2, 214f /* CTI Group */ - nop /* IEU0 */ - ldub [%o1], %g5 /* LOAD */ - add %o1, 1, %o1 /* IEU0 */ - add %o0, 1, %o0 /* IEU1 */ - subcc %o2, 1, %o2 /* IEU1 */ - bne,pt %xcc, 206b /* CTI */ - stb %g5, [%o0 - 1] /* Store Group */ -214: wr %g0, FPRS_FEF, %fprs - retl - mov %g4, %o0 -END(memcpy) - -libc_hidden_builtin_def (memcpy) - -libc_hidden_def (__mempcpy) -weak_alias (__mempcpy, mempcpy) -libc_hidden_builtin_def (mempcpy) diff --git a/sysdeps/sparc/sparc64/memset.S b/sysdeps/sparc/sparc64/memset.S deleted file mode 100644 index 5664436a51..0000000000 --- a/sysdeps/sparc/sparc64/memset.S +++ /dev/null @@ -1,314 +0,0 @@ -/* Set a block of memory to some byte value. - For UltraSPARC. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@caip.rutgers.edu) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC -#define XCC xcc -#define USE_BPR -#endif -#define FPRS_FEF 4 - -#define SET_BLOCKS(base, offset, source) \ - stx source, [base - offset - 0x18]; \ - stx source, [base - offset - 0x10]; \ - stx source, [base - offset - 0x08]; \ - stx source, [base - offset - 0x00]; - - /* Well, memset is a lot easier to get right than bcopy... */ - .text - .align 32 -ENTRY(memset) - andcc %o1, 0xff, %o1 - mov %o0, %o5 - be,a,pt %icc, 50f -#ifndef USE_BPR - srl %o2, 0, %o1 -#else - mov %o2, %o1 -#endif - cmp %o2, 7 -#ifndef USE_BPR - srl %o2, 0, %o2 -#endif - bleu,pn %XCC, 17f - andcc %o0, 3, %g5 - be,pt %xcc, 4f - and %o1, 0xff, %o1 - cmp %g5, 3 - be,pn %xcc, 2f - stb %o1, [%o0 + 0x00] - cmp %g5, 2 - be,pt %xcc, 2f - stb %o1, [%o0 + 0x01] - stb %o1, [%o0 + 0x02] -2: sub %g5, 4, %g5 - sub %o0, %g5, %o0 - add %o2, %g5, %o2 -4: sllx %o1, 8, %g1 - andcc %o0, 4, %g0 - or %o1, %g1, %o1 - sllx %o1, 16, %g1 - or %o1, %g1, %o1 - be,pt %xcc, 2f - sllx %o1, 32, %g1 - stw %o1, [%o0] - sub %o2, 4, %o2 - add %o0, 4, %o0 -2: cmp %o2, 128 - or %o1, %g1, %o1 - blu,pn %xcc, 9f - andcc %o0, 0x38, %g5 - be,pn %icc, 6f - mov 64, %o4 - andcc %o0, 8, %g0 - be,pn %icc, 1f - sub %o4, %g5, %o4 - stx %o1, [%o0] - add %o0, 8, %o0 -1: andcc %o4, 16, %g0 - be,pn %icc, 1f - sub %o2, %o4, %o2 - stx %o1, [%o0] - stx %o1, [%o0 + 8] - add %o0, 16, %o0 -1: andcc %o4, 32, %g0 - be,pn %icc, 7f - andncc %o2, 0x3f, %o3 - stw %o1, [%o0] - stw %o1, [%o0 + 4] - stw %o1, [%o0 + 8] - stw %o1, [%o0 + 12] - stw %o1, [%o0 + 16] - stw %o1, [%o0 + 20] - stw %o1, [%o0 + 24] - stw %o1, [%o0 + 28] - add %o0, 32, %o0 -7: be,pn %xcc, 9f - nop - ldd [%o0 - 8], %f0 -18: wr %g0, ASI_BLK_P, %asi - membar #StoreStore | #LoadStore - andcc %o3, 0xc0, %g5 - and %o2, 0x3f, %o2 - fsrc2 %f0, %f2 - fsrc2 %f0, %f4 - andn %o3, 0xff, %o3 - fsrc2 %f0, %f6 - cmp %g5, 64 - fsrc2 %f0, %f8 - fsrc2 %f0, %f10 - fsrc2 %f0, %f12 - brz,pn %g5, 10f - fsrc2 %f0, %f14 - be,pn %icc, 2f - stda %f0, [%o0 + 0x00] %asi - cmp %g5, 128 - be,pn %icc, 2f - stda %f0, [%o0 + 0x40] %asi - stda %f0, [%o0 + 0x80] %asi -2: brz,pn %o3, 12f - add %o0, %g5, %o0 -10: stda %f0, [%o0 + 0x00] %asi - stda %f0, [%o0 + 0x40] %asi - stda %f0, [%o0 + 0x80] %asi - stda %f0, [%o0 + 0xc0] %asi -11: subcc %o3, 256, %o3 - bne,pt %xcc, 10b - add %o0, 256, %o0 -12: wr %g0, FPRS_FEF, %fprs - membar #StoreLoad | #StoreStore -9: andcc %o2, 0x78, %g5 - be,pn %xcc, 13f - andcc %o2, 7, %o2 -14: rd %pc, %o4 - srl %g5, 1, %o3 - sub %o4, %o3, %o4 - jmpl %o4 + (13f - 14b), %g0 - add %o0, %g5, %o0 -12: SET_BLOCKS (%o0, 0x68, %o1) - SET_BLOCKS (%o0, 0x48, %o1) - SET_BLOCKS (%o0, 0x28, %o1) - SET_BLOCKS (%o0, 0x08, %o1) -13: be,pn %xcc, 8f - andcc %o2, 4, %g0 - be,pn %xcc, 1f - andcc %o2, 2, %g0 - stw %o1, [%o0] - add %o0, 4, %o0 -1: be,pn %xcc, 1f - andcc %o2, 1, %g0 - sth %o1, [%o0] - add %o0, 2, %o0 -1: bne,a,pn %xcc, 8f - stb %o1, [%o0] -8: retl - mov %o5, %o0 -17: brz,pn %o2, 0f -8: add %o0, 1, %o0 - subcc %o2, 1, %o2 - bne,pt %xcc, 8b - stb %o1, [%o0 - 1] -0: retl - mov %o5, %o0 - -6: stx %o1, [%o0] - andncc %o2, 0x3f, %o3 - be,pn %xcc, 9b - nop - ba,pt %xcc, 18b - ldd [%o0], %f0 -END(memset) -libc_hidden_builtin_def (memset) - -#define ZERO_BLOCKS(base, offset, source) \ - stx source, [base - offset - 0x38]; \ - stx source, [base - offset - 0x30]; \ - stx source, [base - offset - 0x28]; \ - stx source, [base - offset - 0x20]; \ - stx source, [base - offset - 0x18]; \ - stx source, [base - offset - 0x10]; \ - stx source, [base - offset - 0x08]; \ - stx source, [base - offset - 0x00]; - - .text - .align 32 -ENTRY(__bzero) -#ifndef USE_BPR - srl %o1, 0, %o1 -#endif - mov %o0, %o5 -50: cmp %o1, 7 - bleu,pn %xcc, 17f - andcc %o0, 3, %o2 - be,a,pt %xcc, 4f - andcc %o0, 4, %g0 - cmp %o2, 3 - be,pn %xcc, 2f - stb %g0, [%o0 + 0x00] - cmp %o2, 2 - be,pt %xcc, 2f - stb %g0, [%o0 + 0x01] - stb %g0, [%o0 + 0x02] -2: sub %o2, 4, %o2 - sub %o0, %o2, %o0 - add %o1, %o2, %o1 - andcc %o0, 4, %g0 -4: be,pt %xcc, 2f - cmp %o1, 128 - stw %g0, [%o0] - sub %o1, 4, %o1 - add %o0, 4, %o0 -2: blu,pn %xcc, 9f - andcc %o0, 0x38, %o2 - be,pn %icc, 6f - mov 64, %o4 - andcc %o0, 8, %g0 - be,pn %icc, 1f - sub %o4, %o2, %o4 - stx %g0, [%o0] - add %o0, 8, %o0 -1: andcc %o4, 16, %g0 - be,pn %icc, 1f - sub %o1, %o4, %o1 - stx %g0, [%o0] - stx %g0, [%o0 + 8] - add %o0, 16, %o0 -1: andcc %o4, 32, %g0 - be,pn %icc, 7f - andncc %o1, 0x3f, %o3 - stx %g0, [%o0] - stx %g0, [%o0 + 8] - stx %g0, [%o0 + 16] - stx %g0, [%o0 + 24] - add %o0, 32, %o0 -6: andncc %o1, 0x3f, %o3 -7: be,pn %xcc, 9f - wr %g0, ASI_BLK_P, %asi - membar #StoreLoad | #StoreStore | #LoadStore - fzero %f0 - andcc %o3, 0xc0, %o2 - and %o1, 0x3f, %o1 - fzero %f2 - andn %o3, 0xff, %o3 - faddd %f0, %f2, %f4 - fmuld %f0, %f2, %f6 - cmp %o2, 64 - faddd %f0, %f2, %f8 - fmuld %f0, %f2, %f10 - faddd %f0, %f2, %f12 - brz,pn %o2, 10f - fmuld %f0, %f2, %f14 - be,pn %icc, 2f - stda %f0, [%o0 + 0x00] %asi - cmp %o2, 128 - be,pn %icc, 2f - stda %f0, [%o0 + 0x40] %asi - stda %f0, [%o0 + 0x80] %asi -2: brz,pn %o3, 12f - add %o0, %o2, %o0 -10: stda %f0, [%o0 + 0x00] %asi - stda %f0, [%o0 + 0x40] %asi - stda %f0, [%o0 + 0x80] %asi - stda %f0, [%o0 + 0xc0] %asi -11: subcc %o3, 256, %o3 - bne,pt %xcc, 10b - add %o0, 256, %o0 -12: wr %g0, FPRS_FEF, %fprs - membar #StoreLoad | #StoreStore -9: andcc %o1, 0xf8, %o2 - be,pn %xcc, 13f - andcc %o1, 7, %o1 -14: rd %pc, %o4 - srl %o2, 1, %o3 - sub %o4, %o3, %o4 - jmpl %o4 + (13f - 14b), %g0 - add %o0, %o2, %o0 -12: ZERO_BLOCKS (%o0, 0xc8, %g0) - ZERO_BLOCKS (%o0, 0x88, %g0) - ZERO_BLOCKS (%o0, 0x48, %g0) - ZERO_BLOCKS (%o0, 0x08, %g0) -13: be,pn %xcc, 8f - andcc %o1, 4, %g0 - be,pn %xcc, 1f - andcc %o1, 2, %g0 - stw %g0, [%o0] - add %o0, 4, %o0 -1: be,pn %xcc, 1f - andcc %o1, 1, %g0 - sth %g0, [%o0] - add %o0, 2, %o0 -1: bne,a,pn %xcc, 8f - stb %g0, [%o0] -8: retl - mov %o5, %o0 -17: be,pn %xcc, 13b - orcc %o1, 0, %g0 - be,pn %xcc, 0f -8: add %o0, 1, %o0 - subcc %o1, 1, %o1 - bne,pt %xcc, 8b - stb %g0, [%o0 - 1] -0: retl - mov %o5, %o0 -END(__bzero) - -weak_alias (__bzero, bzero) diff --git a/sysdeps/sparc/sparc64/mul_1.S b/sysdeps/sparc/sparc64/mul_1.S deleted file mode 100644 index 0a32882c1c..0000000000 --- a/sysdeps/sparc/sparc64/mul_1.S +++ /dev/null @@ -1,82 +0,0 @@ -/* SPARC v9 __mpn_mul_1 -- Multiply a limb vector with a single limb and - store the product in a second limb vector. - - Copyright (C) 1995-2017 Free Software Foundation, Inc. - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include - - -/* INPUT PARAMETERS - res_ptr o0 - s1_ptr o1 - size o2 - s2_limb o3 */ - -ENTRY(__mpn_mul_1) - !#PROLOGUE# 0 - save %sp,-192,%sp - !#PROLOGUE# 1 - - sub %g0,%i2,%o7 - sllx %o7,3,%g5 - sub %i1,%g5,%o3 - sub %i0,%g5,%o4 - mov 0,%o0 ! zero cy_limb - - srl %i3,0,%o1 ! extract low 32 bits of s2_limb - srlx %i3,32,%i3 ! extract high 32 bits of s2_limb - mov 1,%o2 - sllx %o2,32,%o2 ! o2 = 0x100000000 - - ! hi ! - ! mid-1 ! - ! mid-2 ! - ! lo ! -.Loop: - sllx %o7,3,%g1 - ldx [%o3+%g1],%g5 - srl %g5,0,%i0 ! zero hi bits - srlx %g5,32,%g5 - mulx %o1,%i0,%i4 ! lo product - mulx %i3,%i0,%i1 ! mid-1 product - mulx %o1,%g5,%l2 ! mid-2 product - mulx %i3,%g5,%i5 ! hi product - srlx %i4,32,%i0 ! extract high 32 bits of lo product... - add %i1,%i0,%i1 ! ...and add it to the mid-1 product - addcc %i1,%l2,%i1 ! add mid products - mov 0,%l0 ! we need the carry from that add... - movcs %xcc,%o2,%l0 ! ...compute it and... - add %i5,%l0,%i5 ! ...add to bit 32 of the hi product - sllx %i1,32,%i0 ! align low bits of mid product - srl %i4,0,%g5 ! zero high 32 bits of lo product - add %i0,%g5,%i0 ! combine into low 64 bits of result - srlx %i1,32,%i1 ! extract high bits of mid product... - add %i5,%i1,%i1 ! ...and add them to the high result - addcc %i0,%o0,%i0 ! add cy_limb to low 64 bits of result - mov 0,%g5 - movcs %xcc,1,%g5 - addcc %o7,1,%o7 - stx %i0,[%o4+%g1] - bne,pt %xcc,.Loop - add %i1,%g5,%o0 ! compute new cy_limb - - jmpl %i7+8,%g0 - restore %o0,%g0,%o0 - -END(__mpn_mul_1) diff --git a/sysdeps/sparc/sparc64/multiarch/Makefile b/sysdeps/sparc/sparc64/multiarch/Makefile deleted file mode 100644 index 55b757f9ad..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -ifeq ($(subdir),crypt) -libcrypt-sysdep_routines += md5-crop sha256-crop sha512-crop -endif - -ifeq ($(subdir),locale) -localedef-aux += md5-crop -endif - -ifeq ($(subdir),string) -sysdep_routines += memcpy-ultra3 memcpy-niagara1 memcpy-niagara2 \ - memset-niagara1 memcpy-niagara4 memset-niagara4 -endif - -ifeq ($(subdir),stdlib) -sysdep_routines += mul_1-vis3 addmul_1-vis3 submul_1-vis3 add_n-vis3 sub_n-vis3 -endif - -ifeq ($(subdir),math) -gmp-sysdep_routines = mul_1-vis3 addmul_1-vis3 submul_1-vis3 add_n-vis3 \ - sub_n-vis3 -endif diff --git a/sysdeps/sparc/sparc64/multiarch/add_n-vis3.S b/sysdeps/sparc/sparc64/multiarch/add_n-vis3.S deleted file mode 100644 index c038bcbd6e..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/add_n-vis3.S +++ /dev/null @@ -1,67 +0,0 @@ -! SPARC v9 64-bit VIS3 __mpn_add_n -- Add two limb vectors of the same length > 0 and -! store sum in a third limb vector. -! -! Copyright (C) 2013-2017 Free Software Foundation, Inc. -! This file is part of the GNU C Library. -! Contributed by David S. Miller -! -! The GNU C Library is free software; you can redistribute it and/or -! modify it under the terms of the GNU Lesser General Public -! License as published by the Free Software Foundation; either -! version 2.1 of the License, or (at your option) any later version. -! -! The GNU C Library is distributed in the hope that it will be useful, -! but WITHOUT ANY WARRANTY; without even the implied warranty of -! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -! Lesser General Public License for more details. -! -! You should have received a copy of the GNU Lesser General Public -! License along with the GNU C Library; if not, see -! . - -#include - -#define res_ptr %o0 -#define s1_ptr %o1 -#define s2_ptr %o2 -#define sz %o3 -#define tmp1 %g1 -#define tmp2 %g2 -#define tmp3 %g3 -#define tmp4 %o4 - - .register %g2,#scratch - .register %g3,#scratch -ENTRY(__mpn_add_n_vis3) - subcc sz, 1, sz - be .Lfinal_limb - cmp %g0, 0 - -.Lloop: - ldx [s2_ptr + 0x00], tmp1 - add s2_ptr, 0x10, s2_ptr - ldx [s1_ptr + 0x00], tmp2 - add s1_ptr, 0x10, s1_ptr - ldx [s2_ptr - 0x08], tmp3 - add res_ptr, 0x10, res_ptr - ldx [s1_ptr - 0x08], tmp4 - sub sz, 2, sz - addxccc tmp1, tmp2, tmp1 - stx tmp1, [res_ptr - 0x10] - addxccc tmp3, tmp4, tmp3 - brgz sz, .Lloop - stx tmp3, [res_ptr - 0x08] - - brlz,pt sz, .Lfinish - nop - -.Lfinal_limb: - ldx [s2_ptr + 0x00], tmp1 - ldx [s1_ptr + 0x00], tmp2 - addxccc tmp1, tmp2, tmp1 - stx tmp1, [res_ptr + 0x00] - -.Lfinish: - retl - addxc %g0, %g0, %o0 -END(__mpn_add_n_vis3) diff --git a/sysdeps/sparc/sparc64/multiarch/add_n.S b/sysdeps/sparc/sparc64/multiarch/add_n.S deleted file mode 100644 index 9ffaf7865b..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/add_n.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Multiple versions of add_n - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__mpn_add_n) - .type __mpn_add_n, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_VIS3, %o1 - andcc %o0, %o1, %g0 - be 1f - nop -# ifdef SHARED - sethi %gdop_hix22(__mpn_add_n_vis3), %o1 - xor %o1, %gdop_lox10(__mpn_add_n_vis3), %o1 -# else - set __mpn_add_n_vis3, %o1 -# endif - ba 10f - nop -1: -# ifdef SHARED - sethi %gdop_hix22(__mpn_add_n_generic), %o1 - xor %o1, %gdop_lox10(__mpn_add_n_generic), %o1 -# else - set __mpn_add_n_generic, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__mpn_add_n) - -#define __mpn_add_n __mpn_add_n_generic -#include "../add_n.S" diff --git a/sysdeps/sparc/sparc64/multiarch/addmul_1-vis3.S b/sysdeps/sparc/sparc64/multiarch/addmul_1-vis3.S deleted file mode 100644 index 64671f5079..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/addmul_1-vis3.S +++ /dev/null @@ -1,87 +0,0 @@ -! SPARC v9 64-bit VIS3 __mpn_addmul_1 -- Multiply a limb vector with a -! limb and add the result to a second limb vector. -! -! Copyright (C) 2013-2017 Free Software Foundation, Inc. -! This file is part of the GNU C Library. -! Contributed by David S. Miller -! -! The GNU C Library is free software; you can redistribute it and/or -! modify it under the terms of the GNU Lesser General Public -! License as published by the Free Software Foundation; either -! version 2.1 of the License, or (at your option) any later version. -! -! The GNU C Library is distributed in the hope that it will be useful, -! but WITHOUT ANY WARRANTY; without even the implied warranty of -! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -! Lesser General Public License for more details. -! -! You should have received a copy of the GNU Lesser General Public -! License along with the GNU C Library; if not, see -! . - -#include - -#define res_ptr %i0 -#define s1_ptr %i1 -#define sz %i2 -#define s2_limb %i3 -#define carry %o5 -#define tmp1 %g1 -#define tmp2 %g2 -#define tmp3 %g3 -#define tmp4 %o4 -#define tmp5 %l0 -#define tmp6 %l1 -#define tmp7 %l2 -#define tmp8 %l3 - - .register %g2,#scratch - .register %g3,#scratch -ENTRY(__mpn_addmul_1_vis3) - save %sp, -176, %sp - subcc sz, 1, sz - be .Lfinal_limb - clr carry - -.Lloop: - ldx [s1_ptr + 0x00], tmp1 - ldx [res_ptr + 0x00], tmp3 - ldx [s1_ptr + 0x08], tmp2 - ldx [res_ptr + 0x08], tmp4 - mulx tmp1, s2_limb, tmp5 - add s1_ptr, 0x10, s1_ptr - umulxhi tmp1, s2_limb, tmp6 - add res_ptr, 0x10, res_ptr - mulx tmp2, s2_limb, tmp7 - sub sz, 2, sz - umulxhi tmp2, s2_limb, tmp8 - addcc carry, tmp5, tmp5 - addxc %g0, tmp6, carry - addcc tmp3, tmp5, tmp5 - addxc %g0, carry, carry - stx tmp5, [res_ptr - 0x10] - addcc carry, tmp7, tmp7 - addxc %g0, tmp8, carry - addcc tmp4, tmp7, tmp7 - addxc %g0, carry, carry - brgz sz, .Lloop - stx tmp7, [res_ptr - 0x08] - - brlz,pt sz, .Lfinish - nop - -.Lfinal_limb: - ldx [s1_ptr + 0x00], tmp1 - ldx [res_ptr + 0x00], tmp3 - mulx tmp1, s2_limb, tmp5 - umulxhi tmp1, s2_limb, tmp6 - addcc carry, tmp5, tmp5 - addxc %g0, tmp6, carry - addcc tmp3, tmp5, tmp5 - addxc %g0, carry, carry - stx tmp5, [res_ptr + 0x00] - -.Lfinish: - jmpl %i7 + 8, %g0 - restore carry, 0, %o0 -END(__mpn_addmul_1_vis3) diff --git a/sysdeps/sparc/sparc64/multiarch/addmul_1.S b/sysdeps/sparc/sparc64/multiarch/addmul_1.S deleted file mode 100644 index dcb1da184c..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/addmul_1.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Multiple versions of addmul_1 - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__mpn_addmul_1) - .type __mpn_addmul_1, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_VIS3, %o1 - andcc %o0, %o1, %g0 - be 1f - nop -# ifdef SHARED - sethi %gdop_hix22(__mpn_addmul_1_vis3), %o1 - xor %o1, %gdop_lox10(__mpn_addmul_1_vis3), %o1 -# else - set __mpn_addmul_1_vis3, %o1 -# endif - ba 10f - nop -1: -# ifdef SHARED - sethi %gdop_hix22(__mpn_addmul_1_generic), %o1 - xor %o1, %gdop_lox10(__mpn_addmul_1_generic), %o1 -# else - set __mpn_addmul_1_generic, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__mpn_addmul_1) - -#define __mpn_addmul_1 __mpn_addmul_1_generic -#include "../addmul_1.S" diff --git a/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c b/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c deleted file mode 100644 index a97bc455a8..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Enumerate available IFUNC implementations of a function. sparc version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Fill ARRAY of MAX elements with IFUNC implementations for function - NAME and return the number of valid entries. */ - -size_t -__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, - size_t max) -{ - size_t i = 0; - int hwcap; - - hwcap = GLRO(dl_hwcap); - - IFUNC_IMPL (i, name, memcpy, - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_CRYPTO, - __memcpy_niagara4) - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_N2, - __memcpy_niagara2) - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_BLKINIT, - __memcpy_niagara1) - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_ULTRA3, - __memcpy_ultra3) - IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_ultra1)); - - IFUNC_IMPL (i, name, mempcpy, - IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_CRYPTO, - __mempcpy_niagara4) - IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_N2, - __mempcpy_niagara2) - IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_BLKINIT, - __mempcpy_niagara1) - IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_ULTRA3, - __mempcpy_ultra3) - IFUNC_IMPL_ADD (array, i, mempcpy, 1, __mempcpy_ultra1)); - - IFUNC_IMPL (i, name, bzero, - IFUNC_IMPL_ADD (array, i, bzero, hwcap & HWCAP_SPARC_CRYPTO, - __bzero_niagara4) - IFUNC_IMPL_ADD (array, i, bzero, hwcap & HWCAP_SPARC_BLKINIT, - __bzero_niagara1) - IFUNC_IMPL_ADD (array, i, bzero, 1, __bzero_ultra1)); - - IFUNC_IMPL (i, name, memset, - IFUNC_IMPL_ADD (array, i, memset, hwcap & HWCAP_SPARC_CRYPTO, - __memset_niagara4) - IFUNC_IMPL_ADD (array, i, memset, hwcap & HWCAP_SPARC_BLKINIT, - __memset_niagara1) - IFUNC_IMPL_ADD (array, i, memset, 1, __memset_ultra1)); - - return i; -} diff --git a/sysdeps/sparc/sparc64/multiarch/md5-block.c b/sysdeps/sparc/sparc64/multiarch/md5-block.c deleted file mode 100644 index 7c1a3a368f..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/md5-block.c +++ /dev/null @@ -1,29 +0,0 @@ -#include - -#define __md5_process_block __md5_process_block_generic -extern void __md5_process_block_generic (const void *buffer, size_t len, - struct md5_ctx *ctx); - -#include - -#undef __md5_process_block - -extern void __md5_process_block_crop (const void *buffer, size_t len, - struct md5_ctx *ctx); -static bool cpu_supports_md5(int hwcap) -{ - unsigned long cfr; - - if (!(hwcap & HWCAP_SPARC_CRYPTO)) - return false; - - __asm__ ("rd %%asr26, %0" : "=r" (cfr)); - if (cfr & (1 << 4)) - return true; - - return false; -} - -extern void __md5_process_block (const void *buffer, size_t len, - struct md5_ctx *ctx); -sparc_libc_ifunc(__md5_process_block, cpu_supports_md5(hwcap) ? __md5_process_block_crop : __md5_process_block_generic); diff --git a/sysdeps/sparc/sparc64/multiarch/md5-crop.S b/sysdeps/sparc/sparc64/multiarch/md5-crop.S deleted file mode 100644 index e8810da83e..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/md5-crop.S +++ /dev/null @@ -1,110 +0,0 @@ -/* MD5 using sparc crypto opcodes. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define ASI_PL 0x88 - -#define MD5 \ - .word 0x81b02800; - - .text - .align 32 -ENTRY(__md5_process_block_crop) - /* %o0=buffer, %o1=len, %o2=CTX */ - ld [%o2 + 0x10], %g1 - add %g1, %o1, %o4 - st %o4, [%o2 + 0x10] - clr %o5 - cmp %o4, %g1 - movlu %icc, 1, %o5 -#ifdef __arch64__ - srlx %o1, 32, %o4 - add %o5, %o4, %o5 -#endif - ld [%o2 + 0x14], %o4 - add %o4, %o5, %o4 - st %o4, [%o2 + 0x14] - lda [%o2] ASI_PL, %f0 - add %o2, 0x4, %g1 - lda [%g1] ASI_PL, %f1 - add %o2, 0x8, %g1 - andcc %o0, 0x7, %g0 - lda [%g1] ASI_PL, %f2 - add %o2, 0xc, %g1 - bne,pn %xcc, 10f - lda [%g1] ASI_PL, %f3 - -1: - ldd [%o0 + 0x00], %f8 - ldd [%o0 + 0x08], %f10 - ldd [%o0 + 0x10], %f12 - ldd [%o0 + 0x18], %f14 - ldd [%o0 + 0x20], %f16 - ldd [%o0 + 0x28], %f18 - ldd [%o0 + 0x30], %f20 - ldd [%o0 + 0x38], %f22 - - MD5 - - subcc %o1, 64, %o1 - bne,pt %xcc, 1b - add %o0, 0x40, %o0 - -5: - sta %f0, [%o2] ASI_PL - add %o2, 0x4, %g1 - sta %f1, [%g1] ASI_PL - add %o2, 0x8, %g1 - sta %f2, [%g1] ASI_PL - add %o2, 0xc, %g1 - retl - sta %f3, [%g1] ASI_PL -10: - alignaddr %o0, %g0, %o0 - - ldd [%o0 + 0x00], %f10 -1: - ldd [%o0 + 0x08], %f12 - ldd [%o0 + 0x10], %f14 - ldd [%o0 + 0x18], %f16 - ldd [%o0 + 0x20], %f18 - ldd [%o0 + 0x28], %f20 - ldd [%o0 + 0x30], %f22 - ldd [%o0 + 0x38], %f24 - ldd [%o0 + 0x40], %f26 - - faligndata %f10, %f12, %f8 - faligndata %f12, %f14, %f10 - faligndata %f14, %f16, %f12 - faligndata %f16, %f18, %f14 - faligndata %f18, %f20, %f16 - faligndata %f20, %f22, %f18 - faligndata %f22, %f24, %f20 - faligndata %f24, %f26, %f22 - - MD5 - - subcc %o1, 64, %o1 - fsrc2 %f26, %f10 - bne,pt %xcc, 1b - add %o0, 0x40, %o0 - - ba,a,pt %xcc, 5b -END(__md5_process_block_crop) diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S b/sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S deleted file mode 100644 index ccf42446e8..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S +++ /dev/null @@ -1,347 +0,0 @@ -/* Copy SIZE bytes from SRC to DEST. For SUN4V Niagara. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define ASI_BLK_INIT_QUAD_LDD_P 0xe2 -#define ASI_P 0x80 -#define ASI_PNF 0x82 - -#define LOAD(type,addr,dest) type##a [addr] ASI_P, dest -#define LOAD_TWIN(addr_reg,dest0,dest1) \ - ldda [addr_reg] ASI_BLK_INIT_QUAD_LDD_P, dest0 - -#define STORE(type,src,addr) type src, [addr] -#define STORE_INIT(src,addr) stxa src, [addr] %asi - -#ifndef XCC -#define USE_BPR -#define XCC xcc -#endif - -#if IS_IN (libc) - - .register %g2,#scratch - .register %g3,#scratch - .register %g6,#scratch - - .text - -ENTRY(__mempcpy_niagara1) - ba,pt %XCC, 101f - add %o0, %o2, %g5 -END(__mempcpy_niagara1) - - .align 32 -ENTRY(__memcpy_niagara1) -100: /* %o0=dst, %o1=src, %o2=len */ - mov %o0, %g5 -101: -# ifndef USE_BPR - srl %o2, 0, %o2 -# endif - cmp %o2, 0 - be,pn %XCC, 85f -218: or %o0, %o1, %o3 - cmp %o2, 16 - blu,a,pn %XCC, 80f - or %o3, %o2, %o3 - - /* 2 blocks (128 bytes) is the minimum we can do the block - * copy with. We need to ensure that we'll iterate at least - * once in the block copy loop. At worst we'll need to align - * the destination to a 64-byte boundary which can chew up - * to (64 - 1) bytes from the length before we perform the - * block copy loop. - */ - cmp %o2, (2 * 64) - blu,pt %XCC, 70f - andcc %o3, 0x7, %g0 - - /* %o0: dst - * %o1: src - * %o2: len (known to be >= 128) - * - * The block copy loops will use %o4/%o5,%g2/%g3 as - * temporaries while copying the data. - */ - - LOAD(prefetch, %o1, #one_read) - wr %g0, ASI_BLK_INIT_QUAD_LDD_P, %asi - - /* Align destination on 64-byte boundary. */ - andcc %o0, (64 - 1), %o4 - be,pt %XCC, 2f - sub %o4, 64, %o4 - sub %g0, %o4, %o4 ! bytes to align dst - sub %o2, %o4, %o2 -1: subcc %o4, 1, %o4 - LOAD(ldub, %o1, %g1) - STORE(stb, %g1, %o0) - add %o1, 1, %o1 - bne,pt %XCC, 1b - add %o0, 1, %o0 - - /* If the source is on a 16-byte boundary we can do - * the direct block copy loop. If it is 8-byte aligned - * we can do the 16-byte loads offset by -8 bytes and the - * init stores offset by one register. - * - * If the source is not even 8-byte aligned, we need to do - * shifting and masking (basically integer faligndata). - * - * The careful bit with init stores is that if we store - * to any part of the cache line we have to store the whole - * cacheline else we can end up with corrupt L2 cache line - * contents. Since the loop works on 64-bytes of 64-byte - * aligned store data at a time, this is easy to ensure. - */ -2: - andcc %o1, (16 - 1), %o4 - andn %o2, (64 - 1), %g1 ! block copy loop iterator - sub %o2, %g1, %o2 ! final sub-block copy bytes - be,pt %XCC, 50f - cmp %o4, 8 - be,a,pt %XCC, 10f - sub %o1, 0x8, %o1 - - /* Neither 8-byte nor 16-byte aligned, shift and mask. */ - mov %g1, %o4 - and %o1, 0x7, %g1 - sll %g1, 3, %g1 - mov 64, %o3 - andn %o1, 0x7, %o1 - LOAD(ldx, %o1, %g2) - sub %o3, %g1, %o3 - sllx %g2, %g1, %g2 - -#define SWIVEL_ONE_DWORD(SRC, TMP1, TMP2, PRE_VAL, PRE_SHIFT, POST_SHIFT, DST)\ - LOAD(ldx, SRC, TMP1); \ - srlx TMP1, PRE_SHIFT, TMP2; \ - or TMP2, PRE_VAL, TMP2; \ - STORE_INIT(TMP2, DST); \ - sllx TMP1, POST_SHIFT, PRE_VAL; - -1: add %o1, 0x8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x00) - add %o1, 0x8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x08) - add %o1, 0x8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x10) - add %o1, 0x8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x18) - add %o1, 32, %o1 - LOAD(prefetch, %o1, #one_read) - sub %o1, 32 - 8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x20) - add %o1, 8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x28) - add %o1, 8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x30) - add %o1, 8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x38) - subcc %o4, 64, %o4 - bne,pt %XCC, 1b - add %o0, 64, %o0 - -#undef SWIVEL_ONE_DWORD - - srl %g1, 3, %g1 - ba,pt %XCC, 60f - add %o1, %g1, %o1 - -10: /* Destination is 64-byte aligned, source was only 8-byte - * aligned but it has been subtracted by 8 and we perform - * one twin load ahead, then add 8 back into source when - * we finish the loop. - */ - LOAD_TWIN(%o1, %o4, %o5) -1: add %o1, 16, %o1 - LOAD_TWIN(%o1, %g2, %g3) - add %o1, 16 + 32, %o1 - LOAD(prefetch, %o1, #one_read) - sub %o1, 32, %o1 - STORE_INIT(%o5, %o0 + 0x00) ! initializes cache line - STORE_INIT(%g2, %o0 + 0x08) - LOAD_TWIN(%o1, %o4, %o5) - add %o1, 16, %o1 - STORE_INIT(%g3, %o0 + 0x10) - STORE_INIT(%o4, %o0 + 0x18) - LOAD_TWIN(%o1, %g2, %g3) - add %o1, 16, %o1 - STORE_INIT(%o5, %o0 + 0x20) - STORE_INIT(%g2, %o0 + 0x28) - LOAD_TWIN(%o1, %o4, %o5) - STORE_INIT(%g3, %o0 + 0x30) - STORE_INIT(%o4, %o0 + 0x38) - subcc %g1, 64, %g1 - bne,pt %XCC, 1b - add %o0, 64, %o0 - - ba,pt %XCC, 60f - add %o1, 0x8, %o1 - -50: /* Destination is 64-byte aligned, and source is 16-byte - * aligned. - */ -1: LOAD_TWIN(%o1, %o4, %o5) - add %o1, 16, %o1 - LOAD_TWIN(%o1, %g2, %g3) - add %o1, 16 + 32, %o1 - LOAD(prefetch, %o1, #one_read) - sub %o1, 32, %o1 - STORE_INIT(%o4, %o0 + 0x00) ! initializes cache line - STORE_INIT(%o5, %o0 + 0x08) - LOAD_TWIN(%o1, %o4, %o5) - add %o1, 16, %o1 - STORE_INIT(%g2, %o0 + 0x10) - STORE_INIT(%g3, %o0 + 0x18) - LOAD_TWIN(%o1, %g2, %g3) - add %o1, 16, %o1 - STORE_INIT(%o4, %o0 + 0x20) - STORE_INIT(%o5, %o0 + 0x28) - STORE_INIT(%g2, %o0 + 0x30) - STORE_INIT(%g3, %o0 + 0x38) - subcc %g1, 64, %g1 - bne,pt %XCC, 1b - add %o0, 64, %o0 - /* fall through */ - -60: - /* %o2 contains any final bytes still needed to be copied - * over. If anything is left, we copy it one byte at a time. - */ - wr %g0, ASI_PNF, %asi - brz,pt %o2, 85f - sub %o0, %o1, %o3 - ba,a,pt %XCC, 90f - - .align 64 -70: /* 16 < len <= 64 */ - bne,pn %XCC, 75f - sub %o0, %o1, %o3 - -72: - andn %o2, 0xf, %o4 - and %o2, 0xf, %o2 -1: subcc %o4, 0x10, %o4 - LOAD(ldx, %o1, %o5) - add %o1, 0x08, %o1 - LOAD(ldx, %o1, %g1) - sub %o1, 0x08, %o1 - STORE(stx, %o5, %o1 + %o3) - add %o1, 0x8, %o1 - STORE(stx, %g1, %o1 + %o3) - bgu,pt %XCC, 1b - add %o1, 0x8, %o1 -73: andcc %o2, 0x8, %g0 - be,pt %XCC, 1f - nop - sub %o2, 0x8, %o2 - LOAD(ldx, %o1, %o5) - STORE(stx, %o5, %o1 + %o3) - add %o1, 0x8, %o1 -1: andcc %o2, 0x4, %g0 - be,pt %XCC, 1f - nop - sub %o2, 0x4, %o2 - LOAD(lduw, %o1, %o5) - STORE(stw, %o5, %o1 + %o3) - add %o1, 0x4, %o1 -1: cmp %o2, 0 - be,pt %XCC, 85f - nop - ba,pt %XCC, 90f - nop - -75: - andcc %o0, 0x7, %g1 - sub %g1, 0x8, %g1 - be,pn %icc, 2f - sub %g0, %g1, %g1 - sub %o2, %g1, %o2 - -1: subcc %g1, 1, %g1 - LOAD(ldub, %o1, %o5) - STORE(stb, %o5, %o1 + %o3) - bgu,pt %icc, 1b - add %o1, 1, %o1 - -2: add %o1, %o3, %o0 - andcc %o1, 0x7, %g1 - bne,pt %icc, 8f - sll %g1, 3, %g1 - - cmp %o2, 16 - bgeu,pt %icc, 72b - nop - ba,a,pt %XCC, 73b - -8: mov 64, %o3 - andn %o1, 0x7, %o1 - LOAD(ldx, %o1, %g2) - sub %o3, %g1, %o3 - andn %o2, 0x7, %o4 - sllx %g2, %g1, %g2 -1: add %o1, 0x8, %o1 - LOAD(ldx, %o1, %g3) - subcc %o4, 0x8, %o4 - srlx %g3, %o3, %o5 - or %o5, %g2, %o5 - STORE(stx, %o5, %o0) - add %o0, 0x8, %o0 - bgu,pt %icc, 1b - sllx %g3, %g1, %g2 - - srl %g1, 3, %g1 - andcc %o2, 0x7, %o2 - be,pn %icc, 85f - add %o1, %g1, %o1 - ba,pt %XCC, 90f - sub %o0, %o1, %o3 - - .align 64 -80: /* 0 < len <= 16 */ - andcc %o3, 0x3, %g0 - bne,pn %XCC, 90f - sub %o0, %o1, %o3 - -1: - subcc %o2, 4, %o2 - LOAD(lduw, %o1, %g1) - STORE(stw, %g1, %o1 + %o3) - bgu,pt %XCC, 1b - add %o1, 4, %o1 - -85: retl - mov %g5, %o0 - - .align 32 -90: - subcc %o2, 1, %o2 - LOAD(ldub, %o1, %g1) - STORE(stb, %g1, %o1 + %o3) - bgu,pt %XCC, 90b - add %o1, 1, %o1 - retl - mov %g5, %o0 - -END(__memcpy_niagara1) - -#endif diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S b/sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S deleted file mode 100644 index 798b3c80fe..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S +++ /dev/null @@ -1,498 +0,0 @@ -/* Copy SIZE bytes from SRC to DEST. For SUN4V Niagara-2. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define ASI_BLK_INIT_QUAD_LDD_P 0xe2 -#define ASI_BLK_P 0xf0 -#define ASI_P 0x80 -#define ASI_PNF 0x82 - -#define FPRS_FEF 0x04 - -#define VISEntryHalf \ - rd %fprs, %o5; \ - wr %g0, FPRS_FEF, %fprs - -#define VISExitHalf \ - and %o5, FPRS_FEF, %o5; \ - wr %o5, 0x0, %fprs - -#define STORE_ASI ASI_BLK_INIT_QUAD_LDD_P - -#define LOAD(type,addr,dest) type [addr], dest -#define LOAD_BLK(addr,dest) ldda [addr] ASI_BLK_P, dest -#define STORE(type,src,addr) type src, [addr] -#define STORE_BLK(src,addr) stda src, [addr] ASI_BLK_P -#define STORE_INIT(src,addr) stxa src, [addr] STORE_ASI - -#ifndef XCC -#define USE_BPR -#define XCC xcc -#endif - -#define FREG_FROB(x0, x1, x2, x3, x4, x5, x6, x7, x8) \ - faligndata %x0, %x1, %f0; \ - faligndata %x1, %x2, %f2; \ - faligndata %x2, %x3, %f4; \ - faligndata %x3, %x4, %f6; \ - faligndata %x4, %x5, %f8; \ - faligndata %x5, %x6, %f10; \ - faligndata %x6, %x7, %f12; \ - faligndata %x7, %x8, %f14; - -#define FREG_MOVE_1(x0) \ - fsrc2 %x0, %f0; -#define FREG_MOVE_2(x0, x1) \ - fsrc2 %x0, %f0; \ - fsrc2 %x1, %f2; -#define FREG_MOVE_3(x0, x1, x2) \ - fsrc2 %x0, %f0; \ - fsrc2 %x1, %f2; \ - fsrc2 %x2, %f4; -#define FREG_MOVE_4(x0, x1, x2, x3) \ - fsrc2 %x0, %f0; \ - fsrc2 %x1, %f2; \ - fsrc2 %x2, %f4; \ - fsrc2 %x3, %f6; -#define FREG_MOVE_5(x0, x1, x2, x3, x4) \ - fsrc2 %x0, %f0; \ - fsrc2 %x1, %f2; \ - fsrc2 %x2, %f4; \ - fsrc2 %x3, %f6; \ - fsrc2 %x4, %f8; -#define FREG_MOVE_6(x0, x1, x2, x3, x4, x5) \ - fsrc2 %x0, %f0; \ - fsrc2 %x1, %f2; \ - fsrc2 %x2, %f4; \ - fsrc2 %x3, %f6; \ - fsrc2 %x4, %f8; \ - fsrc2 %x5, %f10; -#define FREG_MOVE_7(x0, x1, x2, x3, x4, x5, x6) \ - fsrc2 %x0, %f0; \ - fsrc2 %x1, %f2; \ - fsrc2 %x2, %f4; \ - fsrc2 %x3, %f6; \ - fsrc2 %x4, %f8; \ - fsrc2 %x5, %f10; \ - fsrc2 %x6, %f12; -#define FREG_MOVE_8(x0, x1, x2, x3, x4, x5, x6, x7) \ - fsrc2 %x0, %f0; \ - fsrc2 %x1, %f2; \ - fsrc2 %x2, %f4; \ - fsrc2 %x3, %f6; \ - fsrc2 %x4, %f8; \ - fsrc2 %x5, %f10; \ - fsrc2 %x6, %f12; \ - fsrc2 %x7, %f14; -#define FREG_LOAD_1(base, x0) \ - LOAD(ldd, base + 0x00, %x0) -#define FREG_LOAD_2(base, x0, x1) \ - LOAD(ldd, base + 0x00, %x0); \ - LOAD(ldd, base + 0x08, %x1); -#define FREG_LOAD_3(base, x0, x1, x2) \ - LOAD(ldd, base + 0x00, %x0); \ - LOAD(ldd, base + 0x08, %x1); \ - LOAD(ldd, base + 0x10, %x2); -#define FREG_LOAD_4(base, x0, x1, x2, x3) \ - LOAD(ldd, base + 0x00, %x0); \ - LOAD(ldd, base + 0x08, %x1); \ - LOAD(ldd, base + 0x10, %x2); \ - LOAD(ldd, base + 0x18, %x3); -#define FREG_LOAD_5(base, x0, x1, x2, x3, x4) \ - LOAD(ldd, base + 0x00, %x0); \ - LOAD(ldd, base + 0x08, %x1); \ - LOAD(ldd, base + 0x10, %x2); \ - LOAD(ldd, base + 0x18, %x3); \ - LOAD(ldd, base + 0x20, %x4); -#define FREG_LOAD_6(base, x0, x1, x2, x3, x4, x5) \ - LOAD(ldd, base + 0x00, %x0); \ - LOAD(ldd, base + 0x08, %x1); \ - LOAD(ldd, base + 0x10, %x2); \ - LOAD(ldd, base + 0x18, %x3); \ - LOAD(ldd, base + 0x20, %x4); \ - LOAD(ldd, base + 0x28, %x5); -#define FREG_LOAD_7(base, x0, x1, x2, x3, x4, x5, x6) \ - LOAD(ldd, base + 0x00, %x0); \ - LOAD(ldd, base + 0x08, %x1); \ - LOAD(ldd, base + 0x10, %x2); \ - LOAD(ldd, base + 0x18, %x3); \ - LOAD(ldd, base + 0x20, %x4); \ - LOAD(ldd, base + 0x28, %x5); \ - LOAD(ldd, base + 0x30, %x6); - -#if IS_IN (libc) - - .register %g2,#scratch - .register %g3,#scratch - .register %g6,#scratch - - .text - -ENTRY(__mempcpy_niagara2) - ba,pt %XCC, 101f - add %o0, %o2, %g5 -END(__mempcpy_niagara2) - - .align 32 -ENTRY(__memcpy_niagara2) -100: /* %o0=dst, %o1=src, %o2=len */ - mov %o0, %g5 -101: -# ifndef USE_BPR - srl %o2, 0, %o2 -# endif - cmp %o2, 0 - be,pn %XCC, 85f -218: or %o0, %o1, %o3 - cmp %o2, 16 - blu,a,pn %XCC, 80f - or %o3, %o2, %o3 - - /* 2 blocks (128 bytes) is the minimum we can do the block - * copy with. We need to ensure that we'll iterate at least - * once in the block copy loop. At worst we'll need to align - * the destination to a 64-byte boundary which can chew up - * to (64 - 1) bytes from the length before we perform the - * block copy loop. - * - * However, the cut-off point, performance wise, is around - * 4 64-byte blocks. - */ - cmp %o2, (4 * 64) - blu,pt %XCC, 75f - andcc %o3, 0x7, %g0 - - /* %o0: dst - * %o1: src - * %o2: len (known to be >= 128) - * - * The block copy loops can use %o4, %g2, %g3 as - * temporaries while copying the data. %o5 must - * be preserved between VISEntryHalf and VISExitHalf - */ - - LOAD(prefetch, %o1 + 0x000, #one_read) - LOAD(prefetch, %o1 + 0x040, #one_read) - LOAD(prefetch, %o1 + 0x080, #one_read) - - /* Align destination on 64-byte boundary. */ - andcc %o0, (64 - 1), %o4 - be,pt %XCC, 2f - sub %o4, 64, %o4 - sub %g0, %o4, %o4 ! bytes to align dst - sub %o2, %o4, %o2 -1: subcc %o4, 1, %o4 - LOAD(ldub, %o1, %g1) - STORE(stb, %g1, %o0) - add %o1, 1, %o1 - bne,pt %XCC, 1b - add %o0, 1, %o0 - -2: - /* Clobbers o5/g1/g2/g3/g7/icc/xcc. We must preserve - * o5 from here until we hit VISExitHalf. - */ - VISEntryHalf - - membar #Sync - alignaddr %o1, %g0, %g0 - - add %o1, (64 - 1), %o4 - andn %o4, (64 - 1), %o4 - andn %o2, (64 - 1), %g1 - sub %o2, %g1, %o2 - - and %o1, (64 - 1), %g2 - add %o1, %g1, %o1 - sub %o0, %o4, %g3 - brz,pt %g2, 190f - cmp %g2, 32 - blu,a 5f - cmp %g2, 16 - cmp %g2, 48 - blu,a 4f - cmp %g2, 40 - cmp %g2, 56 - blu 170f - nop - ba,a,pt %xcc, 180f - -4: /* 32 <= low bits < 48 */ - blu 150f - nop - ba,a,pt %xcc, 160f -5: /* 0 < low bits < 32 */ - blu,a 6f - cmp %g2, 8 - cmp %g2, 24 - blu 130f - nop - ba,a,pt %xcc, 140f -6: /* 0 < low bits < 16 */ - bgeu 120f - nop - /* fall through for 0 < low bits < 8 */ -110: sub %o4, 64, %g2 - LOAD_BLK(%g2, %f0) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f2, f4, f6, f8, f10, f12, f14, f16) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_8(f16, f18, f20, f22, f24, f26, f28, f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -120: sub %o4, 56, %g2 - FREG_LOAD_7(%g2, f0, f2, f4, f6, f8, f10, f12) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f2, f4, f6, f8, f10, f12, f16, f18) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_7(f18, f20, f22, f24, f26, f28, f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -130: sub %o4, 48, %g2 - FREG_LOAD_6(%g2, f0, f2, f4, f6, f8, f10) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f2, f4, f6, f8, f10, f16, f18, f20) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_6(f20, f22, f24, f26, f28, f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -140: sub %o4, 40, %g2 - FREG_LOAD_5(%g2, f0, f2, f4, f6, f8) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f2, f4, f6, f8, f16, f18, f20, f22) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_5(f22, f24, f26, f28, f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -150: sub %o4, 32, %g2 - FREG_LOAD_4(%g2, f0, f2, f4, f6) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f2, f4, f6, f16, f18, f20, f22, f24) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_4(f24, f26, f28, f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -160: sub %o4, 24, %g2 - FREG_LOAD_3(%g2, f0, f2, f4) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f2, f4, f16, f18, f20, f22, f24, f26) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_3(f26, f28, f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -170: sub %o4, 16, %g2 - FREG_LOAD_2(%g2, f0, f2) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f2, f16, f18, f20, f22, f24, f26, f28) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_2(f28, f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -180: sub %o4, 8, %g2 - FREG_LOAD_1(%g2, f0) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f16, f18, f20, f22, f24, f26, f28, f30) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_1(f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -190: -1: STORE_INIT(%g0, %o4 + %g3) - subcc %g1, 64, %g1 - LOAD_BLK(%o4, %f0) - STORE_BLK(%f0, %o4 + %g3) - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - -195: - add %o4, %g3, %o0 - membar #Sync - - VISExitHalf - - /* %o2 contains any final bytes still needed to be copied - * over. If anything is left, we copy it one byte at a time. - */ - brz,pt %o2, 85f - sub %o0, %o1, %o3 - ba,a,pt %XCC, 90f - - .align 64 -75: /* 16 < len <= 64 */ - bne,pn %XCC, 75f - sub %o0, %o1, %o3 - -72: - andn %o2, 0xf, %o4 - and %o2, 0xf, %o2 -1: subcc %o4, 0x10, %o4 - LOAD(ldx, %o1, %o5) - add %o1, 0x08, %o1 - LOAD(ldx, %o1, %g1) - sub %o1, 0x08, %o1 - STORE(stx, %o5, %o1 + %o3) - add %o1, 0x8, %o1 - STORE(stx, %g1, %o1 + %o3) - bgu,pt %XCC, 1b - add %o1, 0x8, %o1 -73: andcc %o2, 0x8, %g0 - be,pt %XCC, 1f - nop - sub %o2, 0x8, %o2 - LOAD(ldx, %o1, %o5) - STORE(stx, %o5, %o1 + %o3) - add %o1, 0x8, %o1 -1: andcc %o2, 0x4, %g0 - be,pt %XCC, 1f - nop - sub %o2, 0x4, %o2 - LOAD(lduw, %o1, %o5) - STORE(stw, %o5, %o1 + %o3) - add %o1, 0x4, %o1 -1: cmp %o2, 0 - be,pt %XCC, 85f - nop - ba,pt %xcc, 90f - nop - -75: - andcc %o0, 0x7, %g1 - sub %g1, 0x8, %g1 - be,pn %icc, 2f - sub %g0, %g1, %g1 - sub %o2, %g1, %o2 - -1: subcc %g1, 1, %g1 - LOAD(ldub, %o1, %o5) - STORE(stb, %o5, %o1 + %o3) - bgu,pt %icc, 1b - add %o1, 1, %o1 - -2: add %o1, %o3, %o0 - andcc %o1, 0x7, %g1 - bne,pt %icc, 8f - sll %g1, 3, %g1 - - cmp %o2, 16 - bgeu,pt %icc, 72b - nop - ba,a,pt %xcc, 73b - -8: mov 64, %o3 - andn %o1, 0x7, %o1 - LOAD(ldx, %o1, %g2) - sub %o3, %g1, %o3 - andn %o2, 0x7, %o4 - sllx %g2, %g1, %g2 -1: add %o1, 0x8, %o1 - LOAD(ldx, %o1, %g3) - subcc %o4, 0x8, %o4 - srlx %g3, %o3, %o5 - or %o5, %g2, %o5 - STORE(stx, %o5, %o0) - add %o0, 0x8, %o0 - bgu,pt %icc, 1b - sllx %g3, %g1, %g2 - - srl %g1, 3, %g1 - andcc %o2, 0x7, %o2 - be,pn %icc, 85f - add %o1, %g1, %o1 - ba,pt %xcc, 90f - sub %o0, %o1, %o3 - - .align 64 -80: /* 0 < len <= 16 */ - andcc %o3, 0x3, %g0 - bne,pn %XCC, 90f - sub %o0, %o1, %o3 - -1: - subcc %o2, 4, %o2 - LOAD(lduw, %o1, %g1) - STORE(stw, %g1, %o1 + %o3) - bgu,pt %XCC, 1b - add %o1, 4, %o1 - -85: retl - mov %g5, %o0 - - .align 32 -90: - subcc %o2, 1, %o2 - LOAD(ldub, %o1, %g1) - STORE(stb, %g1, %o1 + %o3) - bgu,pt %XCC, 90b - add %o1, 1, %o1 - retl - mov %g5, %o0 - -END(__memcpy_niagara2) - -#endif diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara4.S b/sysdeps/sparc/sparc64/multiarch/memcpy-niagara4.S deleted file mode 100644 index 709b398364..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara4.S +++ /dev/null @@ -1,332 +0,0 @@ -/* Copy SIZE bytes from SRC to DEST. For SUN4V Niagara-4. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define ASI_BLK_INIT_QUAD_LDD_P 0xe2 - -#define FPRS_FEF 0x04 - -/* On T4 it is very expensive to access ASRs like %fprs and - * %asi, avoiding a read or a write can save ~50 cycles. - */ -#define FPU_ENTER \ - rd %fprs, %o5; \ - andcc %o5, FPRS_FEF, %g0; \ - be,a,pn %icc, 999f; \ - wr %g0, FPRS_FEF, %fprs; \ - 999: - -#define VISEntryHalf FPU_ENTER -#define VISExitHalf and %o5, FPRS_FEF, %o5; wr %o5, 0x0, %fprs - -#define GLOBAL_SPARE %g5 - -#define STORE_ASI ASI_BLK_INIT_QUAD_LDD_P -#define EX_LD(x) x -#define EX_ST(x) x -#define EX_RETVAL(x) x -#define LOAD(type,addr,dest) type [addr], dest -#define STORE(type,src,addr) type src, [addr] -#define STORE_INIT(src,addr) stxa src, [addr] STORE_ASI - -#if IS_IN (libc) - - .register %g2,#scratch - .register %g3,#scratch - .register %g6,#scratch - - .text - -ENTRY(__mempcpy_niagara4) - ba,pt %icc, 101f - add %o0, %o2, %o3 -END(__mempcpy_niagara4) - - .align 32 -ENTRY(__memcpy_niagara4) -100: /* %o0=dst, %o1=src, %o2=len */ - mov %o0, %o3 -101: -#ifndef __arch64__ - srl %o2, 0, %o2 -#endif - brz,pn %o2, .Lexit - cmp %o2, 3 - ble,pn %icc, .Ltiny - cmp %o2, 19 - ble,pn %icc, .Lsmall - or %o0, %o1, %g2 - cmp %o2, 128 - bl,pn %icc, .Lmedium - nop - -.Llarge:/* len >= 0x80 */ - /* First get dest 8 byte aligned. */ - sub %g0, %o0, %g1 - and %g1, 0x7, %g1 - brz,pt %g1, 51f - sub %o2, %g1, %o2 - -1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2)) - add %o1, 1, %o1 - subcc %g1, 1, %g1 - add %o0, 1, %o0 - bne,pt %icc, 1b - EX_ST(STORE(stb, %g2, %o0 - 0x01)) - -51: LOAD(prefetch, %o1 + 0x040, #n_reads_strong) - LOAD(prefetch, %o1 + 0x080, #n_reads_strong) - LOAD(prefetch, %o1 + 0x0c0, #n_reads_strong) - LOAD(prefetch, %o1 + 0x100, #n_reads_strong) - LOAD(prefetch, %o1 + 0x140, #n_reads_strong) - LOAD(prefetch, %o1 + 0x180, #n_reads_strong) - LOAD(prefetch, %o1 + 0x1c0, #n_reads_strong) - LOAD(prefetch, %o1 + 0x200, #n_reads_strong) - - /* Check if we can use the straight fully aligned - * loop, or we require the alignaddr/faligndata variant. - */ - andcc %o1, 0x7, %o5 - bne,pn %icc, .Llarge_src_unaligned - sub %g0, %o0, %g1 - - /* Legitimize the use of initializing stores by getting dest - * to be 64-byte aligned. - */ - and %g1, 0x3f, %g1 - brz,pt %g1, .Llarge_aligned - sub %o2, %g1, %o2 - -1: EX_LD(LOAD(ldx, %o1 + 0x00, %g2)) - add %o1, 8, %o1 - subcc %g1, 8, %g1 - add %o0, 8, %o0 - bne,pt %icc, 1b - EX_ST(STORE(stx, %g2, %o0 - 0x08)) - -.Llarge_aligned: - /* len >= 0x80 && src 8-byte aligned && dest 8-byte aligned */ - andn %o2, 0x3f, %o4 - sub %o2, %o4, %o2 - -1: EX_LD(LOAD(ldx, %o1 + 0x00, %g1)) - add %o1, 0x40, %o1 - EX_LD(LOAD(ldx, %o1 - 0x38, %g2)) - subcc %o4, 0x40, %o4 - EX_LD(LOAD(ldx, %o1 - 0x30, %g3)) - EX_LD(LOAD(ldx, %o1 - 0x28, GLOBAL_SPARE)) - EX_LD(LOAD(ldx, %o1 - 0x20, %o5)) - EX_ST(STORE_INIT(%g1, %o0)) - add %o0, 0x08, %o0 - EX_ST(STORE_INIT(%g2, %o0)) - add %o0, 0x08, %o0 - EX_LD(LOAD(ldx, %o1 - 0x18, %g2)) - EX_ST(STORE_INIT(%g3, %o0)) - add %o0, 0x08, %o0 - EX_LD(LOAD(ldx, %o1 - 0x10, %g3)) - EX_ST(STORE_INIT(GLOBAL_SPARE, %o0)) - add %o0, 0x08, %o0 - EX_LD(LOAD(ldx, %o1 - 0x08, GLOBAL_SPARE)) - EX_ST(STORE_INIT(%o5, %o0)) - add %o0, 0x08, %o0 - EX_ST(STORE_INIT(%g2, %o0)) - add %o0, 0x08, %o0 - EX_ST(STORE_INIT(%g3, %o0)) - add %o0, 0x08, %o0 - EX_ST(STORE_INIT(GLOBAL_SPARE, %o0)) - add %o0, 0x08, %o0 - bne,pt %icc, 1b - LOAD(prefetch, %o1 + 0x200, #n_reads_strong) - - membar #StoreLoad | #StoreStore - - brz,pn %o2, .Lexit - cmp %o2, 19 - ble,pn %icc, .Lsmall_unaligned - nop - ba,a,pt %icc, .Lmedium_noprefetch - -.Lexit: retl - mov EX_RETVAL(%o3), %o0 - -.Llarge_src_unaligned: - andn %o2, 0x3f, %o4 - sub %o2, %o4, %o2 - VISEntryHalf - alignaddr %o1, %g0, %g1 - add %o1, %o4, %o1 - EX_LD(LOAD(ldd, %g1 + 0x00, %f0)) -1: EX_LD(LOAD(ldd, %g1 + 0x08, %f2)) - subcc %o4, 0x40, %o4 - EX_LD(LOAD(ldd, %g1 + 0x10, %f4)) - EX_LD(LOAD(ldd, %g1 + 0x18, %f6)) - EX_LD(LOAD(ldd, %g1 + 0x20, %f8)) - EX_LD(LOAD(ldd, %g1 + 0x28, %f10)) - EX_LD(LOAD(ldd, %g1 + 0x30, %f12)) - EX_LD(LOAD(ldd, %g1 + 0x38, %f14)) - faligndata %f0, %f2, %f16 - EX_LD(LOAD(ldd, %g1 + 0x40, %f0)) - faligndata %f2, %f4, %f18 - add %g1, 0x40, %g1 - faligndata %f4, %f6, %f20 - faligndata %f6, %f8, %f22 - faligndata %f8, %f10, %f24 - faligndata %f10, %f12, %f26 - faligndata %f12, %f14, %f28 - faligndata %f14, %f0, %f30 - EX_ST(STORE(std, %f16, %o0 + 0x00)) - EX_ST(STORE(std, %f18, %o0 + 0x08)) - EX_ST(STORE(std, %f20, %o0 + 0x10)) - EX_ST(STORE(std, %f22, %o0 + 0x18)) - EX_ST(STORE(std, %f24, %o0 + 0x20)) - EX_ST(STORE(std, %f26, %o0 + 0x28)) - EX_ST(STORE(std, %f28, %o0 + 0x30)) - EX_ST(STORE(std, %f30, %o0 + 0x38)) - add %o0, 0x40, %o0 - bne,pt %icc, 1b - LOAD(prefetch, %g1 + 0x200, #n_reads_strong) - VISExitHalf - - brz,pn %o2, .Lexit - cmp %o2, 19 - ble,pn %icc, .Lsmall_unaligned - nop - ba,a,pt %icc, .Lmedium_unaligned - -.Lmedium: - LOAD(prefetch, %o1 + 0x40, #n_reads_strong) - andcc %g2, 0x7, %g0 - bne,pn %icc, .Lmedium_unaligned - nop -.Lmedium_noprefetch: - andncc %o2, 0x20 - 1, %o5 - be,pn %icc, 2f - sub %o2, %o5, %o2 -1: EX_LD(LOAD(ldx, %o1 + 0x00, %g1)) - EX_LD(LOAD(ldx, %o1 + 0x08, %g2)) - EX_LD(LOAD(ldx, %o1 + 0x10, GLOBAL_SPARE)) - EX_LD(LOAD(ldx, %o1 + 0x18, %o4)) - add %o1, 0x20, %o1 - subcc %o5, 0x20, %o5 - EX_ST(STORE(stx, %g1, %o0 + 0x00)) - EX_ST(STORE(stx, %g2, %o0 + 0x08)) - EX_ST(STORE(stx, GLOBAL_SPARE, %o0 + 0x10)) - EX_ST(STORE(stx, %o4, %o0 + 0x18)) - bne,pt %icc, 1b - add %o0, 0x20, %o0 -2: andcc %o2, 0x18, %o5 - be,pt %icc, 3f - sub %o2, %o5, %o2 -1: EX_LD(LOAD(ldx, %o1 + 0x00, %g1)) - add %o1, 0x08, %o1 - add %o0, 0x08, %o0 - subcc %o5, 0x08, %o5 - bne,pt %icc, 1b - EX_ST(STORE(stx, %g1, %o0 - 0x08)) -3: brz,pt %o2, .Lexit - cmp %o2, 0x04 - bl,pn %icc, .Ltiny - nop - EX_LD(LOAD(lduw, %o1 + 0x00, %g1)) - add %o1, 0x04, %o1 - add %o0, 0x04, %o0 - subcc %o2, 0x04, %o2 - bne,pn %icc, .Ltiny - EX_ST(STORE(stw, %g1, %o0 - 0x04)) - ba,a,pt %icc, .Lexit -.Lmedium_unaligned: - /* First get dest 8 byte aligned. */ - sub %g0, %o0, %g1 - and %g1, 0x7, %g1 - brz,pt %g1, 2f - sub %o2, %g1, %o2 - -1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2)) - add %o1, 1, %o1 - subcc %g1, 1, %g1 - add %o0, 1, %o0 - bne,pt %icc, 1b - EX_ST(STORE(stb, %g2, %o0 - 0x01)) -2: - and %o1, 0x7, %g1 - brz,pn %g1, .Lmedium_noprefetch - sll %g1, 3, %g1 - mov 64, %g2 - sub %g2, %g1, %g2 - andn %o1, 0x7, %o1 - EX_LD(LOAD(ldx, %o1 + 0x00, %o4)) - sllx %o4, %g1, %o4 - andn %o2, 0x08 - 1, %o5 - sub %o2, %o5, %o2 -1: EX_LD(LOAD(ldx, %o1 + 0x08, %g3)) - add %o1, 0x08, %o1 - subcc %o5, 0x08, %o5 - srlx %g3, %g2, GLOBAL_SPARE - or GLOBAL_SPARE, %o4, GLOBAL_SPARE - EX_ST(STORE(stx, GLOBAL_SPARE, %o0 + 0x00)) - add %o0, 0x08, %o0 - bne,pt %icc, 1b - sllx %g3, %g1, %o4 - srl %g1, 3, %g1 - add %o1, %g1, %o1 - brz,pn %o2, .Lexit - nop - ba,pt %icc, .Lsmall_unaligned - -.Ltiny: - EX_LD(LOAD(ldub, %o1 + 0x00, %g1)) - subcc %o2, 1, %o2 - be,pn %icc, .Lexit - EX_ST(STORE(stb, %g1, %o0 + 0x00)) - EX_LD(LOAD(ldub, %o1 + 0x01, %g1)) - subcc %o2, 1, %o2 - be,pn %icc, .Lexit - EX_ST(STORE(stb, %g1, %o0 + 0x01)) - EX_LD(LOAD(ldub, %o1 + 0x02, %g1)) - ba,pt %icc, .Lexit - EX_ST(STORE(stb, %g1, %o0 + 0x02)) - -.Lsmall: - andcc %g2, 0x3, %g0 - bne,pn %icc, .Lsmall_unaligned - andn %o2, 0x4 - 1, %o5 - sub %o2, %o5, %o2 -1: - EX_LD(LOAD(lduw, %o1 + 0x00, %g1)) - add %o1, 0x04, %o1 - subcc %o5, 0x04, %o5 - add %o0, 0x04, %o0 - bne,pt %icc, 1b - EX_ST(STORE(stw, %g1, %o0 - 0x04)) - brz,pt %o2, .Lexit - nop - ba,a,pt %icc, .Ltiny - -.Lsmall_unaligned: -1: EX_LD(LOAD(ldub, %o1 + 0x00, %g1)) - add %o1, 1, %o1 - add %o0, 1, %o0 - subcc %o2, 1, %o2 - bne,pt %icc, 1b - EX_ST(STORE(stb, %g1, %o0 - 0x01)) - ba,a,pt %icc, .Lexit -END(__memcpy_niagara4) - -#endif diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S b/sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S deleted file mode 100644 index b8f5c3cb8f..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S +++ /dev/null @@ -1,325 +0,0 @@ -/* Copy SIZE bytes from SRC to DEST. - For UltraSPARC-III. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@redhat.com) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define ASI_BLK_P 0xf0 -#define FPRS_FEF 0x04 -#define VISEntryHalf rd %fprs, %o5; wr %g0, FPRS_FEF, %fprs -#define VISExitHalf and %o5, FPRS_FEF, %o5; wr %o5, 0x0, %fprs - -#ifndef XCC -#define USE_BPR -#define XCC xcc -#endif - -#if IS_IN (libc) - - .register %g2,#scratch - .register %g3,#scratch - .register %g6,#scratch - - .text - -ENTRY(__mempcpy_ultra3) - ba,pt %XCC, 101f - add %o0, %o2, %g5 -END(__mempcpy_ultra3) - - /* Special/non-trivial issues of this code: - * - * 1) %o5 is preserved from VISEntryHalf to VISExitHalf - * 2) Only low 32 FPU registers are used so that only the - * lower half of the FPU register set is dirtied by this - * code. This is especially important in the kernel. - * 3) This code never prefetches cachelines past the end - * of the source buffer. - * - * The cheetah's flexible spine, oversized liver, enlarged heart, - * slender muscular body, and claws make it the swiftest hunter - * in Africa and the fastest animal on land. Can reach speeds - * of up to 2.4GB per second. - */ - .align 32 -ENTRY(__memcpy_ultra3) - -100: /* %o0=dst, %o1=src, %o2=len */ - mov %o0, %g5 -101: - cmp %o2, 0 - be,pn %XCC, out -218: or %o0, %o1, %o3 - cmp %o2, 16 - bleu,a,pn %XCC, small_copy - or %o3, %o2, %o3 - - cmp %o2, 256 - blu,pt %XCC, medium_copy - andcc %o3, 0x7, %g0 - - ba,pt %xcc, enter - andcc %o0, 0x3f, %g2 - - /* Here len >= 256 and condition codes reflect execution - * of "andcc %o0, 0x7, %g2", done by caller. - */ - .align 64 -enter: - /* Is 'dst' already aligned on an 64-byte boundary? */ - be,pt %XCC, 2f - - /* Compute abs((dst & 0x3f) - 0x40) into %g2. This is the number - * of bytes to copy to make 'dst' 64-byte aligned. We pre- - * subtract this from 'len'. - */ - sub %g2, 0x40, %g2 - sub %g0, %g2, %g2 - sub %o2, %g2, %o2 - - /* Copy %g2 bytes from src to dst, one byte at a time. */ -1: ldub [%o1 + 0x00], %o3 - add %o1, 0x1, %o1 - add %o0, 0x1, %o0 - subcc %g2, 0x1, %g2 - - bg,pt %XCC, 1b - stb %o3, [%o0 + -1] - -2: VISEntryHalf - and %o1, 0x7, %g1 - ba,pt %xcc, begin - alignaddr %o1, %g0, %o1 - - .align 64 -begin: - prefetch [%o1 + 0x000], #one_read - prefetch [%o1 + 0x040], #one_read - andn %o2, (0x40 - 1), %o4 - prefetch [%o1 + 0x080], #one_read - prefetch [%o1 + 0x0c0], #one_read - ldd [%o1 + 0x000], %f0 - prefetch [%o1 + 0x100], #one_read - ldd [%o1 + 0x008], %f2 - prefetch [%o1 + 0x140], #one_read - ldd [%o1 + 0x010], %f4 - prefetch [%o1 + 0x180], #one_read - faligndata %f0, %f2, %f16 - ldd [%o1 + 0x018], %f6 - faligndata %f2, %f4, %f18 - ldd [%o1 + 0x020], %f8 - faligndata %f4, %f6, %f20 - ldd [%o1 + 0x028], %f10 - faligndata %f6, %f8, %f22 - - ldd [%o1 + 0x030], %f12 - faligndata %f8, %f10, %f24 - ldd [%o1 + 0x038], %f14 - faligndata %f10, %f12, %f26 - ldd [%o1 + 0x040], %f0 - - sub %o4, 0x80, %o4 - add %o1, 0x40, %o1 - ba,pt %xcc, loop - srl %o4, 6, %o3 - - .align 64 -loop: - ldd [%o1 + 0x008], %f2 - faligndata %f12, %f14, %f28 - ldd [%o1 + 0x010], %f4 - faligndata %f14, %f0, %f30 - stda %f16, [%o0] ASI_BLK_P - ldd [%o1 + 0x018], %f6 - faligndata %f0, %f2, %f16 - - ldd [%o1 + 0x020], %f8 - faligndata %f2, %f4, %f18 - ldd [%o1 + 0x028], %f10 - faligndata %f4, %f6, %f20 - ldd [%o1 + 0x030], %f12 - faligndata %f6, %f8, %f22 - ldd [%o1 + 0x038], %f14 - faligndata %f8, %f10, %f24 - - ldd [%o1 + 0x040], %f0 - prefetch [%o1 + 0x180], #one_read - faligndata %f10, %f12, %f26 - subcc %o3, 0x01, %o3 - add %o1, 0x40, %o1 - bg,pt %XCC, loop - add %o0, 0x40, %o0 - - /* Finally we copy the last full 64-byte block. */ -loopfini: - ldd [%o1 + 0x008], %f2 - faligndata %f12, %f14, %f28 - ldd [%o1 + 0x010], %f4 - faligndata %f14, %f0, %f30 - stda %f16, [%o0] ASI_BLK_P - ldd [%o1 + 0x018], %f6 - faligndata %f0, %f2, %f16 - ldd [%o1 + 0x020], %f8 - faligndata %f2, %f4, %f18 - ldd [%o1 + 0x028], %f10 - faligndata %f4, %f6, %f20 - ldd [%o1 + 0x030], %f12 - faligndata %f6, %f8, %f22 - ldd [%o1 + 0x038], %f14 - faligndata %f8, %f10, %f24 - cmp %g1, 0 - be,pt %XCC, 1f - add %o0, 0x40, %o0 - ldd [%o1 + 0x040], %f0 -1: faligndata %f10, %f12, %f26 - faligndata %f12, %f14, %f28 - faligndata %f14, %f0, %f30 - stda %f16, [%o0] ASI_BLK_P - add %o0, 0x40, %o0 - add %o1, 0x40, %o1 - membar #Sync - - /* Now we copy the (len modulo 64) bytes at the end. - * Note how we borrow the %f0 loaded above. - * - * Also notice how this code is careful not to perform a - * load past the end of the src buffer. - */ -loopend: - and %o2, 0x3f, %o2 - andcc %o2, 0x38, %g2 - be,pn %XCC, endcruft - subcc %g2, 0x8, %g2 - be,pn %XCC, endcruft - cmp %g1, 0 - - be,a,pt %XCC, 1f - ldd [%o1 + 0x00], %f0 - -1: ldd [%o1 + 0x08], %f2 - add %o1, 0x8, %o1 - sub %o2, 0x8, %o2 - subcc %g2, 0x8, %g2 - faligndata %f0, %f2, %f8 - std %f8, [%o0 + 0x00] - be,pn %XCC, endcruft - add %o0, 0x8, %o0 - ldd [%o1 + 0x08], %f0 - add %o1, 0x8, %o1 - sub %o2, 0x8, %o2 - subcc %g2, 0x8, %g2 - faligndata %f2, %f0, %f8 - std %f8, [%o0 + 0x00] - bne,pn %XCC, 1b - add %o0, 0x8, %o0 - - /* If anything is left, we copy it one byte at a time. - * Note that %g1 is (src & 0x3) saved above before the - * alignaddr was performed. - */ -endcruft: - cmp %o2, 0 - add %o1, %g1, %o1 - VISExitHalf - be,pn %XCC, out - sub %o0, %o1, %o3 - - andcc %g1, 0x7, %g0 - bne,pn %icc, small_copy_unaligned - andcc %o2, 0x8, %g0 - be,pt %icc, 1f - nop - ldx [%o1], %o5 - stx %o5, [%o1 + %o3] - add %o1, 0x8, %o1 - -1: andcc %o2, 0x4, %g0 - be,pt %icc, 1f - nop - lduw [%o1], %o5 - stw %o5, [%o1 + %o3] - add %o1, 0x4, %o1 - -1: andcc %o2, 0x2, %g0 - be,pt %icc, 1f - nop - lduh [%o1], %o5 - sth %o5, [%o1 + %o3] - add %o1, 0x2, %o1 - -1: andcc %o2, 0x1, %g0 - be,pt %icc, out - nop - ldub [%o1], %o5 - ba,pt %xcc, out - stb %o5, [%o1 + %o3] - -medium_copy: /* 16 < len <= 64 */ - bne,pn %XCC, small_copy_unaligned - sub %o0, %o1, %o3 - -medium_copy_aligned: - andn %o2, 0x7, %o4 - and %o2, 0x7, %o2 -1: subcc %o4, 0x8, %o4 - ldx [%o1], %o5 - stx %o5, [%o1 + %o3] - bgu,pt %XCC, 1b - add %o1, 0x8, %o1 - andcc %o2, 0x4, %g0 - be,pt %XCC, 1f - nop - sub %o2, 0x4, %o2 - lduw [%o1], %o5 - stw %o5, [%o1 + %o3] - add %o1, 0x4, %o1 -1: cmp %o2, 0 - be,pt %XCC, out - nop - ba,pt %xcc, small_copy_unaligned - nop - -small_copy: /* 0 < len <= 16 */ - andcc %o3, 0x3, %g0 - bne,pn %XCC, small_copy_unaligned - sub %o0, %o1, %o3 - -small_copy_aligned: - subcc %o2, 4, %o2 - lduw [%o1], %g1 - stw %g1, [%o1 + %o3] - bgu,pt %XCC, small_copy_aligned - add %o1, 4, %o1 - -out: retl - mov %g5, %o0 - - .align 32 -small_copy_unaligned: - subcc %o2, 1, %o2 - ldub [%o1], %g1 - stb %g1, [%o1 + %o3] - bgu,pt %XCC, small_copy_unaligned - add %o1, 1, %o1 - retl - mov %g5, %o0 - -END(__memcpy_ultra3) - -#endif \ No newline at end of file diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy.S b/sysdeps/sparc/sparc64/multiarch/memcpy.S deleted file mode 100644 index b6396eeae5..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memcpy.S +++ /dev/null @@ -1,167 +0,0 @@ -/* Multiple versions of memcpy - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if IS_IN (libc) - .text -ENTRY(memcpy) - .type memcpy, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_CRYPTO, %o1 - andcc %o0, %o1, %g0 - be 1f - andcc %o0, HWCAP_SPARC_N2, %g0 -# ifdef SHARED - sethi %gdop_hix22(__memcpy_niagara4), %o1 - xor %o1, %gdop_lox10(__memcpy_niagara4), %o1 -# else - set __memcpy_niagara4, %o1 -# endif - ba 10f - nop -1: be 1f - andcc %o0, HWCAP_SPARC_BLKINIT, %g0 -# ifdef SHARED - sethi %gdop_hix22(__memcpy_niagara2), %o1 - xor %o1, %gdop_lox10(__memcpy_niagara2), %o1 -# else - set __memcpy_niagara2, %o1 -# endif - ba 10f - nop -1: be 1f - andcc %o0, HWCAP_SPARC_ULTRA3, %g0 -# ifdef SHARED - sethi %gdop_hix22(__memcpy_niagara1), %o1 - xor %o1, %gdop_lox10(__memcpy_niagara1), %o1 -# else - set __memcpy_niagara1, %o1 -# endif - ba 10f - nop -1: be 9f - nop -# ifdef SHARED - sethi %gdop_hix22(__memcpy_ultra3), %o1 - xor %o1, %gdop_lox10(__memcpy_ultra3), %o1 -# else - set __memcpy_ultra3, %o1 -# endif - ba 10f - nop -9: -# ifdef SHARED - sethi %gdop_hix22(__memcpy_ultra1), %o1 - xor %o1, %gdop_lox10(__memcpy_ultra1), %o1 -# else - set __memcpy_ultra1, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(memcpy) - -ENTRY(__mempcpy) - .type __mempcpy, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_CRYPTO, %o1 - andcc %o0, %o1, %g0 - be 1f - andcc %o0, HWCAP_SPARC_N2, %g0 -# ifdef SHARED - sethi %gdop_hix22(__mempcpy_niagara4), %o1 - xor %o1, %gdop_lox10(__mempcpy_niagara4), %o1 -# else - set __mempcpy_niagara4, %o1 -# endif - ba 10f - nop -1: be 1f - andcc %o0, HWCAP_SPARC_BLKINIT, %g0 -# ifdef SHARED - sethi %gdop_hix22(__mempcpy_niagara2), %o1 - xor %o1, %gdop_lox10(__mempcpy_niagara2), %o1 -# else - set __mempcpy_niagara2, %o1 -# endif - ba 10f - nop -1: be 1f - andcc %o0, HWCAP_SPARC_ULTRA3, %g0 -# ifdef SHARED - sethi %gdop_hix22(__mempcpy_niagara1), %o1 - xor %o1, %gdop_lox10(__mempcpy_niagara1), %o1 -# else - set __mempcpy_niagara1, %o1 -# endif - ba 10f - nop -1: be 9f - nop -# ifdef SHARED - sethi %gdop_hix22(__mempcpy_ultra3), %o1 - xor %o1, %gdop_lox10(__mempcpy_ultra3), %o1 -# else - set __mempcpy_ultra3, %o1 -# endif - ba 10f - nop -9: -# ifdef SHARED - sethi %gdop_hix22(__mempcpy_ultra1), %o1 - xor %o1, %gdop_lox10(__mempcpy_ultra1), %o1 -# else - set __mempcpy_ultra1, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__mempcpy) - -libc_hidden_builtin_def (memcpy) - -libc_hidden_def (__mempcpy) -weak_alias (__mempcpy, mempcpy) -libc_hidden_builtin_def (mempcpy) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) -#undef weak_alias -#define weak_alias(x, y) -#undef libc_hidden_def -#define libc_hidden_def(name) - -#define memcpy __memcpy_ultra1 -#define __mempcpy __mempcpy_ultra1 - -#endif - -#include "../memcpy.S" diff --git a/sysdeps/sparc/sparc64/multiarch/memset-niagara1.S b/sysdeps/sparc/sparc64/multiarch/memset-niagara1.S deleted file mode 100644 index 45b2251691..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memset-niagara1.S +++ /dev/null @@ -1,177 +0,0 @@ -/* Set a block of memory to some byte value. For SUN4V Niagara. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define ASI_BLK_INIT_QUAD_LDD_P 0xe2 -#define ASI_P 0x80 -#define ASI_PNF 0x82 - -#ifndef XCC -#define USE_BPR -#define XCC xcc -#endif - -#if IS_IN (libc) - - .register %g2,#scratch - - .text - .align 32 - -ENTRY(__memset_niagara1) - /* %o0=buf, %o1=pat, %o2=len */ - and %o1, 0xff, %o3 - mov %o2, %o1 - sllx %o3, 8, %g1 - or %g1, %o3, %o2 - sllx %o2, 16, %g1 - or %g1, %o2, %o2 - sllx %o2, 32, %g1 - ba,pt %XCC, 1f - or %g1, %o2, %o2 -END(__memset_niagara1) - -ENTRY(__bzero_niagara1) - clr %o2 -1: -# ifndef USE_BRP - srl %o1, 0, %o1 -# endif - brz,pn %o1, 90f - mov %o0, %o3 - - wr %g0, ASI_P, %asi - - cmp %o1, 15 - blu,pn %XCC, 70f - andcc %o0, 0x7, %g1 - be,pt %XCC, 2f - mov 8, %g2 - sub %g2, %g1, %g1 - sub %o1, %g1, %o1 -1: stba %o2, [%o0 + 0x00] %asi - subcc %g1, 1, %g1 - bne,pt %XCC, 1b - add %o0, 1, %o0 -2: cmp %o1, 128 - blu,pn %XCC, 60f - andcc %o0, (64 - 1), %g1 - be,pt %XCC, 40f - mov 64, %g2 - sub %g2, %g1, %g1 - sub %o1, %g1, %o1 -1: stxa %o2, [%o0 + 0x00] %asi - subcc %g1, 8, %g1 - bne,pt %XCC, 1b - add %o0, 8, %o0 - -40: - wr %g0, ASI_BLK_INIT_QUAD_LDD_P, %asi - andn %o1, (64 - 1), %g1 - sub %o1, %g1, %o1 - - andn %g1, (256 - 1), %g2 - brz,pt %g2, 50f - and %g1, (256 - 1), %g1 - -45: - stxa %o2, [%o0 + 0x00] %asi - stxa %o2, [%o0 + 0x08] %asi - stxa %o2, [%o0 + 0x10] %asi - stxa %o2, [%o0 + 0x18] %asi - stxa %o2, [%o0 + 0x20] %asi - stxa %o2, [%o0 + 0x28] %asi - stxa %o2, [%o0 + 0x30] %asi - stxa %o2, [%o0 + 0x38] %asi - stxa %o2, [%o0 + 0x40] %asi - stxa %o2, [%o0 + 0x48] %asi - stxa %o2, [%o0 + 0x50] %asi - stxa %o2, [%o0 + 0x58] %asi - stxa %o2, [%o0 + 0x60] %asi - stxa %o2, [%o0 + 0x68] %asi - stxa %o2, [%o0 + 0x70] %asi - stxa %o2, [%o0 + 0x78] %asi - stxa %o2, [%o0 + 0x80] %asi - stxa %o2, [%o0 + 0x88] %asi - stxa %o2, [%o0 + 0x90] %asi - stxa %o2, [%o0 + 0x98] %asi - stxa %o2, [%o0 + 0xa0] %asi - stxa %o2, [%o0 + 0xa8] %asi - stxa %o2, [%o0 + 0xb0] %asi - stxa %o2, [%o0 + 0xb8] %asi - stxa %o2, [%o0 + 0xc0] %asi - stxa %o2, [%o0 + 0xc8] %asi - stxa %o2, [%o0 + 0xd0] %asi - stxa %o2, [%o0 + 0xd8] %asi - stxa %o2, [%o0 + 0xe0] %asi - stxa %o2, [%o0 + 0xe8] %asi - stxa %o2, [%o0 + 0xf0] %asi - stxa %o2, [%o0 + 0xf8] %asi - subcc %g2, 256, %g2 - bne,pt %XCC, 45b - add %o0, 256, %o0 - - brz,pn %g1, 55f - nop - -50: - stxa %o2, [%o0 + 0x00] %asi - stxa %o2, [%o0 + 0x08] %asi - stxa %o2, [%o0 + 0x10] %asi - stxa %o2, [%o0 + 0x18] %asi - stxa %o2, [%o0 + 0x20] %asi - stxa %o2, [%o0 + 0x28] %asi - stxa %o2, [%o0 + 0x30] %asi - stxa %o2, [%o0 + 0x38] %asi - subcc %g1, 64, %g1 - bne,pt %XCC, 50b - add %o0, 64, %o0 - -55: - wr %g0, ASI_P, %asi - brz,pn %o1, 80f -60: - andncc %o1, 0x7, %g1 - be,pn %XCC, 2f - sub %o1, %g1, %o1 -1: stxa %o2, [%o0 + 0x00] %asi - subcc %g1, 8, %g1 - bne,pt %XCC, 1b - add %o0, 8, %o0 -2: brz,pt %o1, 80f - nop - -70: -1: stba %o2, [%o0 + 0x00] %asi - subcc %o1, 1, %o1 - bne,pt %XCC, 1b - add %o0, 1, %o0 - - /* fallthrough */ - -80: - wr %g0, ASI_PNF, %asi - -90: - retl - mov %o3, %o0 -END(__bzero_niagara1) - -#endif diff --git a/sysdeps/sparc/sparc64/multiarch/memset-niagara4.S b/sysdeps/sparc/sparc64/multiarch/memset-niagara4.S deleted file mode 100644 index c04a07a7f9..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memset-niagara4.S +++ /dev/null @@ -1,124 +0,0 @@ -/* Set a block of memory to some byte value. For SUN4V Niagara-4. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define ASI_BLK_INIT_QUAD_LDD_P 0xe2 - -#if IS_IN (libc) - - .register %g2, #scratch - .register %g3, #scratch - - .text - .align 32 - -ENTRY(__memset_niagara4) - andcc %o1, 0xff, %o4 - be,pt %icc, 1f - mov %o2, %o1 - sllx %o4, 8, %g1 - or %g1, %o4, %o2 - sllx %o2, 16, %g1 - or %g1, %o2, %o2 - sllx %o2, 32, %g1 - ba,pt %icc, 1f - or %g1, %o2, %o4 -END(__memset_niagara4) - - .align 32 -ENTRY(__bzero_niagara4) - clr %o4 -1: cmp %o1, 16 - ble %icc, .Ltiny - mov %o0, %o3 - sub %g0, %o0, %g1 - and %g1, 0x7, %g1 - brz,pt %g1, .Laligned8 - sub %o1, %g1, %o1 -1: stb %o4, [%o0 + 0x00] - subcc %g1, 1, %g1 - bne,pt %icc, 1b - add %o0, 1, %o0 -.Laligned8: - cmp %o1, 64 + (64 - 8) - ble .Lmedium - sub %g0, %o0, %g1 - andcc %g1, (64 - 1), %g1 - brz,pn %g1, .Laligned64 - sub %o1, %g1, %o1 -1: stx %o4, [%o0 + 0x00] - subcc %g1, 8, %g1 - bne,pt %icc, 1b - add %o0, 0x8, %o0 -.Laligned64: - andn %o1, 64 - 1, %g1 - sub %o1, %g1, %o1 - brnz,pn %o4, .Lnon_bzero_loop - mov 0x20, %g2 -1: stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P - subcc %g1, 0x40, %g1 - stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P - bne,pt %icc, 1b - add %o0, 0x40, %o0 -.Lpostloop: - cmp %o1, 8 - bl,pn %icc, .Ltiny - membar #StoreStore|#StoreLoad -.Lmedium: - andn %o1, 0x7, %g1 - sub %o1, %g1, %o1 -1: stx %o4, [%o0 + 0x00] - subcc %g1, 0x8, %g1 - bne,pt %icc, 1b - add %o0, 0x08, %o0 - andcc %o1, 0x4, %g1 - be,pt %icc, .Ltiny - sub %o1, %g1, %o1 - stw %o4, [%o0 + 0x00] - add %o0, 0x4, %o0 -.Ltiny: - cmp %o1, 0 - be,pn %icc, .Lexit -1: subcc %o1, 1, %o1 - stb %o4, [%o0 + 0x00] - bne,pt %icc, 1b - add %o0, 1, %o0 -.Lexit: - retl - mov %o3, %o0 -.Lnon_bzero_loop: - mov 0x08, %g3 - mov 0x28, %o5 -1: stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P - subcc %g1, 0x40, %g1 - stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P - stxa %o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P - stxa %o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P - add %o0, 0x10, %o0 - stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P - stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P - stxa %o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P - stxa %o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P - bne,pt %icc, 1b - add %o0, 0x30, %o0 - ba,a,pt %icc, .Lpostloop -END(__bzero_niagara4) - -#endif diff --git a/sysdeps/sparc/sparc64/multiarch/memset.S b/sysdeps/sparc/sparc64/multiarch/memset.S deleted file mode 100644 index 9469d5e7ce..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memset.S +++ /dev/null @@ -1,124 +0,0 @@ -/* Multiple versions of memset and bzero - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if IS_IN (libc) - .text -ENTRY(memset) - .type memset, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_CRYPTO, %o1 - andcc %o0, %o1, %g0 - be 1f - andcc %o0, HWCAP_SPARC_BLKINIT, %g0 -# ifdef SHARED - sethi %gdop_hix22(__memset_niagara4), %o1 - xor %o1, %gdop_lox10(__memset_niagara4), %o1 -# else - set __memset_niagara4, %o1 -# endif - ba 10f - nop -1: be 9f - nop -# ifdef SHARED - sethi %gdop_hix22(__memset_niagara1), %o1 - xor %o1, %gdop_lox10(__memset_niagara1), %o1 -# else - set __memset_niagara1, %o1 -# endif - ba 10f - nop -9: -# ifdef SHARED - sethi %gdop_hix22(__memset_ultra1), %o1 - xor %o1, %gdop_lox10(__memset_ultra1), %o1 -# else - set __memset_ultra1, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(memset) - -ENTRY(__bzero) - .type bzero, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_CRYPTO, %o1 - andcc %o0, %o1, %g0 - be 1f - andcc %o0, HWCAP_SPARC_BLKINIT, %g0 -# ifdef SHARED - sethi %gdop_hix22(__bzero_niagara4), %o1 - xor %o1, %gdop_lox10(__bzero_niagara4), %o1 -# else - set __bzero_niagara4, %o1 -# endif - ba 10f - nop -1: be 9f - nop -# ifdef SHARED - sethi %gdop_hix22(__bzero_niagara1), %o1 - xor %o1, %gdop_lox10(__bzero_niagara1), %o1 -# else - set __bzero_niagara1, %o1 -# endif - ba 10f - nop -9: -# ifdef SHARED - sethi %gdop_hix22(__bzero_ultra1), %o1 - xor %o1, %gdop_lox10(__bzero_ultra1), %o1 -# else - set __bzero_ultra1, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__bzero) - -weak_alias (__bzero, bzero) - -# undef weak_alias -# define weak_alias(a, b) - -libc_hidden_builtin_def (memset) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#define memset __memset_ultra1 -#define __bzero __bzero_ultra1 - -#endif - -#include "../memset.S" diff --git a/sysdeps/sparc/sparc64/multiarch/mul_1-vis3.S b/sysdeps/sparc/sparc64/multiarch/mul_1-vis3.S deleted file mode 100644 index 7c4fa49ce4..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/mul_1-vis3.S +++ /dev/null @@ -1,73 +0,0 @@ -! SPARC v9 64-bit VIS3 __mpn_mul_1 -- Multiply a limb vector with a single -! limb and store the product in a second limb vector. -! -! Copyright (C) 2013-2017 Free Software Foundation, Inc. -! This file is part of the GNU C Library. -! Contributed by David S. Miller -! -! The GNU C Library is free software; you can redistribute it and/or -! modify it under the terms of the GNU Lesser General Public -! License as published by the Free Software Foundation; either -! version 2.1 of the License, or (at your option) any later version. -! -! The GNU C Library is distributed in the hope that it will be useful, -! but WITHOUT ANY WARRANTY; without even the implied warranty of -! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -! Lesser General Public License for more details. -! -! You should have received a copy of the GNU Lesser General Public -! License along with the GNU C Library; if not, see -! . - -#include - -#define res_ptr %o0 -#define s1_ptr %o1 -#define sz %o2 -#define s2_limb %o3 -#define carry %o5 -#define tmp1 %g1 -#define tmp2 %g2 -#define tmp3 %g3 -#define tmp4 %o4 - - .register %g2,#scratch - .register %g3,#scratch -ENTRY(__mpn_mul_1_vis3) - subcc sz, 1, sz - be .Lfinal_limb - clr carry - -.Lloop: - ldx [s1_ptr + 0x00], tmp1 - ldx [s1_ptr + 0x08], tmp4 - mulx tmp1, s2_limb, tmp3 - add s1_ptr, 0x10, s1_ptr - umulxhi tmp1, s2_limb, tmp2 - sub sz, 2, sz - mulx tmp4, s2_limb, tmp1 - add res_ptr, 0x10, res_ptr - umulxhi tmp4, s2_limb, tmp4 - addcc carry, tmp3, tmp3 - stx tmp3, [res_ptr - 0x10] - addxc %g0, tmp2, carry - addcc carry, tmp1, tmp1 - addxc %g0, tmp4, carry - brgz sz, .Lloop - stx tmp1, [res_ptr - 0x08] - - brlz,pt sz, .Lfinish - nop - -.Lfinal_limb: - ldx [s1_ptr + 0x00], tmp1 - mulx tmp1, s2_limb, tmp3 - umulxhi tmp1, s2_limb, tmp2 - addcc carry, tmp3, tmp3 - addxc %g0, tmp2, carry - stx tmp3, [res_ptr + 0x00] - -.Lfinish: - retl - mov carry, %o0 -END(__mpn_mul_1_vis3) diff --git a/sysdeps/sparc/sparc64/multiarch/mul_1.S b/sysdeps/sparc/sparc64/multiarch/mul_1.S deleted file mode 100644 index 75fca932b7..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/mul_1.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Multiple versions of mul_1 - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__mpn_mul_1) - .type __mpn_mul_1, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_VIS3, %o1 - andcc %o0, %o1, %g0 - be 1f - nop -# ifdef SHARED - sethi %gdop_hix22(__mpn_mul_1_vis3), %o1 - xor %o1, %gdop_lox10(__mpn_mul_1_vis3), %o1 -# else - set __mpn_mul_1_vis3, %o1 -# endif - ba 10f - nop -1: -# ifdef SHARED - sethi %gdop_hix22(__mpn_mul_1_generic), %o1 - xor %o1, %gdop_lox10(__mpn_mul_1_generic), %o1 -# else - set __mpn_mul_1_generic, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__mpn_mul_1) - -#define __mpn_mul_1 __mpn_mul_1_generic -#include "../mul_1.S" diff --git a/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c b/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c deleted file mode 100644 index 2452575343..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c +++ /dev/null @@ -1 +0,0 @@ -#include "../rtld-memcpy.c" diff --git a/sysdeps/sparc/sparc64/multiarch/rtld-memset.c b/sysdeps/sparc/sparc64/multiarch/rtld-memset.c deleted file mode 100644 index c01eb0beb9..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/rtld-memset.c +++ /dev/null @@ -1 +0,0 @@ -#include "../rtld-memset.c" diff --git a/sysdeps/sparc/sparc64/multiarch/sha256-block.c b/sysdeps/sparc/sparc64/multiarch/sha256-block.c deleted file mode 100644 index 9d65315a5a..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/sha256-block.c +++ /dev/null @@ -1,32 +0,0 @@ -#include - -#define __sha256_process_block __sha256_process_block_generic -extern void __sha256_process_block_generic (const void *buffer, size_t len, - struct sha256_ctx *ctx); - -#include - -#undef __sha256_process_block - -extern void __sha256_process_block_crop (const void *buffer, size_t len, - struct sha256_ctx *ctx); - -static bool cpu_supports_sha256(int hwcap) -{ - unsigned long cfr; - - if (!(hwcap & HWCAP_SPARC_CRYPTO)) - return false; - - __asm__ ("rd %%asr26, %0" : "=r" (cfr)); - if (cfr & (1 << 6)) - return true; - - return false; -} - -extern void __sha256_process_block (const void *buffer, size_t len, - struct sha256_ctx *ctx); -sparc_libc_ifunc (__sha256_process_block, - cpu_supports_sha256(hwcap) ? __sha256_process_block_crop - : __sha256_process_block_generic); diff --git a/sysdeps/sparc/sparc64/multiarch/sha256-crop.S b/sysdeps/sparc/sparc64/multiarch/sha256-crop.S deleted file mode 100644 index 8f07e4245a..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/sha256-crop.S +++ /dev/null @@ -1,101 +0,0 @@ -/* SHA256 using sparc crypto opcodes. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define SHA256 \ - .word 0x81b02840; - - .text - .align 32 -ENTRY(__sha256_process_block_crop) - /* %o0=buffer, %o1=len, %o2=CTX */ - ldx [%o2 + 0x20], %g1 - add %g1, %o1, %g1 - stx %g1, [%o2 + 0x20] - - ld [%o2 + 0x00], %f0 - ld [%o2 + 0x04], %f1 - ld [%o2 + 0x08], %f2 - ld [%o2 + 0x0c], %f3 - ld [%o2 + 0x10], %f4 - ld [%o2 + 0x14], %f5 - andcc %o1, 0x7, %g0 - ld [%o2 + 0x18], %f6 - bne,pn %xcc, 10f - ld [%o2 + 0x1c], %f7 - -1: - ldd [%o0 + 0x00], %f8 - ldd [%o0 + 0x08], %f10 - ldd [%o0 + 0x10], %f12 - ldd [%o0 + 0x18], %f14 - ldd [%o0 + 0x20], %f16 - ldd [%o0 + 0x28], %f18 - ldd [%o0 + 0x30], %f20 - ldd [%o0 + 0x38], %f22 - - SHA256 - - subcc %o1, 0x40, %o1 - bne,pt %xcc, 1b - add %o0, 0x40, %o0 - -5: - st %f0, [%o2 + 0x00] - st %f1, [%o2 + 0x04] - st %f2, [%o2 + 0x08] - st %f3, [%o2 + 0x0c] - st %f4, [%o2 + 0x10] - st %f5, [%o2 + 0x14] - st %f6, [%o2 + 0x18] - retl - st %f7, [%o2 + 0x1c] -10: - alignaddr %o0, %g0, %o0 - - ldd [%o0 + 0x00], %f10 -1: - ldd [%o0 + 0x08], %f12 - ldd [%o0 + 0x10], %f14 - ldd [%o0 + 0x18], %f16 - ldd [%o0 + 0x20], %f18 - ldd [%o0 + 0x28], %f20 - ldd [%o0 + 0x30], %f22 - ldd [%o0 + 0x38], %f24 - ldd [%o0 + 0x40], %f26 - - faligndata %f10, %f12, %f8 - faligndata %f12, %f14, %f10 - faligndata %f14, %f16, %f12 - faligndata %f16, %f18, %f14 - faligndata %f18, %f20, %f16 - faligndata %f20, %f22, %f18 - faligndata %f22, %f24, %f20 - faligndata %f24, %f26, %f22 - - SHA256 - - subcc %o1, 0x40, %o1 - fsrc2 %f26, %f10 - bne,pt %xcc, 1b - add %o0, 0x40, %o0 - - ba,a,pt %xcc, 5b -END(__sha256_process_block_crop) diff --git a/sysdeps/sparc/sparc64/multiarch/sha512-block.c b/sysdeps/sparc/sparc64/multiarch/sha512-block.c deleted file mode 100644 index 2863e05d09..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/sha512-block.c +++ /dev/null @@ -1,32 +0,0 @@ -#include - -#define __sha512_process_block __sha512_process_block_generic -extern void __sha512_process_block_generic (const void *buffer, size_t len, - struct sha512_ctx *ctx); - -#include - -#undef __sha512_process_block - -extern void __sha512_process_block_crop (const void *buffer, size_t len, - struct sha512_ctx *ctx); - -static bool cpu_supports_sha512(int hwcap) -{ - unsigned long cfr; - - if (!(hwcap & HWCAP_SPARC_CRYPTO)) - return false; - - __asm__ ("rd %%asr26, %0" : "=r" (cfr)); - if (cfr & (1 << 6)) - return true; - - return false; -} - -extern void __sha512_process_block (const void *buffer, size_t len, - struct sha512_ctx *ctx); -sparc_libc_ifunc (__sha512_process_block, - cpu_supports_sha512(hwcap) ? __sha512_process_block_crop - : __sha512_process_block_generic); diff --git a/sysdeps/sparc/sparc64/multiarch/sha512-crop.S b/sysdeps/sparc/sparc64/multiarch/sha512-crop.S deleted file mode 100644 index f78354c485..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/sha512-crop.S +++ /dev/null @@ -1,131 +0,0 @@ -/* SHA512 using sparc crypto opcodes. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define SHA512 \ - .word 0x81b02860; - - .text - .align 32 -ENTRY(__sha512_process_block_crop) - /* %o0=buffer, %o1=len, %o2=CTX */ - ldx [%o2 + 0x48], %g1 - add %g1, %o1, %o4 - stx %o4, [%o2 + 0x48] - cmp %o4, %g1 - bgeu,pt %xcc, 1f - nop - ldx [%o2 + 0x40], %g1 - add %g1, 1, %g1 - stx %g1, [%o2 + 0x40] - -1: ldd [%o2 + 0x00], %f0 - ldd [%o2 + 0x08], %f2 - ldd [%o2 + 0x10], %f4 - ldd [%o2 + 0x18], %f6 - ldd [%o2 + 0x20], %f8 - ldd [%o2 + 0x28], %f10 - andcc %o1, 0x7, %g0 - ldd [%o2 + 0x30], %f12 - bne,pn %xcc, 10f - ldd [%o2 + 0x38], %f14 - -1: - ldd [%o0 + 0x00], %f16 - ldd [%o0 + 0x08], %f18 - ldd [%o0 + 0x10], %f20 - ldd [%o0 + 0x18], %f22 - ldd [%o0 + 0x20], %f24 - ldd [%o0 + 0x28], %f26 - ldd [%o0 + 0x30], %f28 - ldd [%o0 + 0x38], %f30 - ldd [%o0 + 0x40], %f32 - ldd [%o0 + 0x48], %f34 - ldd [%o0 + 0x50], %f36 - ldd [%o0 + 0x58], %f38 - ldd [%o0 + 0x60], %f40 - ldd [%o0 + 0x68], %f42 - ldd [%o0 + 0x70], %f44 - ldd [%o0 + 0x78], %f46 - - SHA512 - - subcc %o1, 0x80, %o1 - bne,pt %xcc, 1b - add %o0, 0x80, %o0 - -5: - std %f0, [%o2 + 0x00] - std %f2, [%o2 + 0x08] - std %f4, [%o2 + 0x10] - std %f6, [%o2 + 0x18] - std %f8, [%o2 + 0x20] - std %f10, [%o2 + 0x28] - std %f12, [%o2 + 0x30] - retl - std %f14, [%o2 + 0x38] -10: - alignaddr %o0, %g0, %o0 - - ldd [%o0 + 0x00], %f18 -1: - ldd [%o0 + 0x08], %f20 - ldd [%o0 + 0x10], %f22 - ldd [%o0 + 0x18], %f24 - ldd [%o0 + 0x20], %f26 - ldd [%o0 + 0x28], %f28 - ldd [%o0 + 0x30], %f30 - ldd [%o0 + 0x38], %f32 - ldd [%o0 + 0x40], %f34 - ldd [%o0 + 0x48], %f36 - ldd [%o0 + 0x50], %f38 - ldd [%o0 + 0x58], %f40 - ldd [%o0 + 0x60], %f42 - ldd [%o0 + 0x68], %f44 - ldd [%o0 + 0x70], %f46 - ldd [%o0 + 0x78], %f48 - ldd [%o0 + 0x80], %f50 - - faligndata %f18, %f20, %f16 - faligndata %f20, %f22, %f18 - faligndata %f22, %f24, %f20 - faligndata %f24, %f26, %f22 - faligndata %f26, %f28, %f24 - faligndata %f28, %f30, %f26 - faligndata %f30, %f32, %f28 - faligndata %f32, %f34, %f30 - faligndata %f34, %f36, %f32 - faligndata %f36, %f38, %f34 - faligndata %f38, %f40, %f36 - faligndata %f40, %f42, %f38 - faligndata %f42, %f44, %f40 - faligndata %f44, %f46, %f42 - faligndata %f46, %f48, %f44 - faligndata %f48, %f50, %f46 - - SHA512 - - subcc %o1, 0x80, %o1 - fsrc2 %f50, %f18 - bne,pt %xcc, 1b - add %o0, 0x80, %o0 - - ba,a,pt %xcc, 5b -END(__sha512_process_block_crop) diff --git a/sysdeps/sparc/sparc64/multiarch/sub_n-vis3.S b/sysdeps/sparc/sparc64/multiarch/sub_n-vis3.S deleted file mode 100644 index 2d2a75dff8..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/sub_n-vis3.S +++ /dev/null @@ -1,71 +0,0 @@ -! SPARC v9 64-bit VIS3 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 -! and store difference in a third limb vector. -! -! Copyright (C) 2013-2017 Free Software Foundation, Inc. -! This file is part of the GNU C Library. -! Contributed by David S. Miller -! -! The GNU C Library is free software; you can redistribute it and/or -! modify it under the terms of the GNU Lesser General Public -! License as published by the Free Software Foundation; either -! version 2.1 of the License, or (at your option) any later version. -! -! The GNU C Library is distributed in the hope that it will be useful, -! but WITHOUT ANY WARRANTY; without even the implied warranty of -! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -! Lesser General Public License for more details. -! -! You should have received a copy of the GNU Lesser General Public -! License along with the GNU C Library; if not, see -! . - -#include - -#define res_ptr %o0 -#define s1_ptr %o1 -#define s2_ptr %o2 -#define sz %o3 -#define tmp1 %g1 -#define tmp2 %g2 -#define tmp3 %g3 -#define tmp4 %o4 - - .register %g2,#scratch - .register %g3,#scratch -ENTRY(__mpn_sub_n_vis3) - subcc sz, 1, sz - be .Lfinal_limb - cmp %g0, 1 - -.Lloop: - ldx [s2_ptr + 0x00], tmp1 - add s2_ptr, 0x10, s2_ptr - ldx [s1_ptr + 0x00], tmp2 - add s1_ptr, 0x10, s1_ptr - ldx [s2_ptr - 0x08], tmp3 - add res_ptr, 0x10, res_ptr - ldx [s1_ptr - 0x08], tmp4 - sub sz, 2, sz - xnor tmp1, %g0, tmp1 - addxccc tmp1, tmp2, tmp1 - stx tmp1, [res_ptr - 0x10] - xnor tmp3, %g0, tmp3 - addxccc tmp3, tmp4, tmp3 - brgz sz, .Lloop - stx tmp3, [res_ptr - 0x08] - - brlz,pt sz, .Lfinish - nop - -.Lfinal_limb: - ldx [s2_ptr + 0x00], tmp1 - ldx [s1_ptr + 0x00], tmp2 - xnor tmp1, %g0, tmp1 - addxccc tmp1, tmp2, tmp1 - stx tmp1, [res_ptr + 0x00] - -.Lfinish: - clr %o0 - retl - movcc %xcc, 1, %o0 -END(__mpn_sub_n_vis3) diff --git a/sysdeps/sparc/sparc64/multiarch/sub_n.S b/sysdeps/sparc/sparc64/multiarch/sub_n.S deleted file mode 100644 index d20a286df1..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/sub_n.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Multiple versions of sub_n - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__mpn_sub_n) - .type __mpn_sub_n, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_VIS3, %o1 - andcc %o0, %o1, %g0 - be 1f - nop -# ifdef SHARED - sethi %gdop_hix22(__mpn_sub_n_vis3), %o1 - xor %o1, %gdop_lox10(__mpn_sub_n_vis3), %o1 -# else - set __mpn_sub_n_vis3, %o1 -# endif - ba 10f - nop -1: -# ifdef SHARED - sethi %gdop_hix22(__mpn_sub_n_generic), %o1 - xor %o1, %gdop_lox10(__mpn_sub_n_generic), %o1 -# else - set __mpn_sub_n_generic, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__mpn_sub_n) - -#define __mpn_sub_n __mpn_sub_n_generic -#include "../sub_n.S" diff --git a/sysdeps/sparc/sparc64/multiarch/submul_1-vis3.S b/sysdeps/sparc/sparc64/multiarch/submul_1-vis3.S deleted file mode 100644 index 99644491e7..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/submul_1-vis3.S +++ /dev/null @@ -1,87 +0,0 @@ -! SPARC v9 64-bit VIS3 __mpn_submul_1 -- Multiply a limb vector with a -! limb and subtract the result from a second limb vector. -! -! Copyright (C) 2013-2017 Free Software Foundation, Inc. -! This file is part of the GNU C Library. -! Contributed by David S. Miller -! -! The GNU C Library is free software; you can redistribute it and/or -! modify it under the terms of the GNU Lesser General Public -! License as published by the Free Software Foundation; either -! version 2.1 of the License, or (at your option) any later version. -! -! The GNU C Library is distributed in the hope that it will be useful, -! but WITHOUT ANY WARRANTY; without even the implied warranty of -! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -! Lesser General Public License for more details. -! -! You should have received a copy of the GNU Lesser General Public -! License along with the GNU C Library; if not, see -! . - -#include - -#define res_ptr %i0 -#define s1_ptr %i1 -#define sz %i2 -#define s2_limb %i3 -#define carry %o5 -#define tmp1 %g1 -#define tmp2 %g2 -#define tmp3 %g3 -#define tmp4 %o4 -#define tmp5 %l0 -#define tmp6 %l1 -#define tmp7 %l2 -#define tmp8 %l3 - - .register %g2,#scratch - .register %g3,#scratch -ENTRY(__mpn_submul_1_vis3) - save %sp, -176, %sp - subcc sz, 1, sz - be .Lfinal_limb - clr carry - -.Lloop: - ldx [s1_ptr + 0x00], tmp1 - ldx [res_ptr + 0x00], tmp3 - ldx [s1_ptr + 0x08], tmp2 - ldx [res_ptr + 0x08], tmp4 - mulx tmp1, s2_limb, tmp5 - add s1_ptr, 0x10, s1_ptr - umulxhi tmp1, s2_limb, tmp6 - add res_ptr, 0x10, res_ptr - mulx tmp2, s2_limb, tmp7 - sub sz, 2, sz - umulxhi tmp2, s2_limb, tmp8 - addcc carry, tmp5, tmp5 - addxc %g0, tmp6, carry - subcc tmp3, tmp5, tmp5 - addxc %g0, carry, carry - stx tmp5, [res_ptr - 0x10] - addcc carry, tmp7, tmp7 - addxc %g0, tmp8, carry - subcc tmp4, tmp7, tmp7 - addxc %g0, carry, carry - brgz sz, .Lloop - stx tmp7, [res_ptr - 0x08] - - brlz,pt sz, .Lfinish - nop - -.Lfinal_limb: - ldx [s1_ptr + 0x00], tmp1 - ldx [res_ptr + 0x00], tmp3 - mulx tmp1, s2_limb, tmp5 - umulxhi tmp1, s2_limb, tmp6 - addcc carry, tmp5, tmp5 - addxc %g0, tmp6, carry - subcc tmp3, tmp5, tmp5 - addxc %g0, carry, carry - stx tmp5, [res_ptr + 0x00] - -.Lfinish: - jmpl %i7 + 8, %g0 - restore carry, 0, %o0 -END(__mpn_submul_1_vis3) diff --git a/sysdeps/sparc/sparc64/multiarch/submul_1.S b/sysdeps/sparc/sparc64/multiarch/submul_1.S deleted file mode 100644 index 3c297d989b..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/submul_1.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Multiple versions of submul_1 - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__mpn_submul_1) - .type __mpn_submul_1, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_VIS3, %o1 - andcc %o0, %o1, %g0 - be 1f - nop -# ifdef SHARED - sethi %gdop_hix22(__mpn_submul_1_vis3), %o1 - xor %o1, %gdop_lox10(__mpn_submul_1_vis3), %o1 -# else - set __mpn_submul_1_vis3, %o1 -# endif - ba 10f - nop -1: -# ifdef SHARED - sethi %gdop_hix22(__mpn_submul_1_generic), %o1 - xor %o1, %gdop_lox10(__mpn_submul_1_generic), %o1 -# else - set __mpn_submul_1_generic, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__mpn_submul_1) - -#define __mpn_submul_1 __mpn_submul_1_generic -#include "../submul_1.S" diff --git a/sysdeps/sparc/sparc64/pthread_spin_init.c b/sysdeps/sparc/sparc64/pthread_spin_init.c deleted file mode 100644 index 58319ab62d..0000000000 --- a/sysdeps/sparc/sparc64/pthread_spin_init.c +++ /dev/null @@ -1 +0,0 @@ -/* pthread_spin_init is in pthread_spin_unlock.S */ diff --git a/sysdeps/sparc/sparc64/pthread_spin_lock.S b/sysdeps/sparc/sparc64/pthread_spin_lock.S deleted file mode 100644 index 0f41ccf4d5..0000000000 --- a/sysdeps/sparc/sparc64/pthread_spin_lock.S +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(pthread_spin_lock) -1: ldstub [%o0], %g1 - brnz,pn %g1, 2f - membar #StoreLoad | #StoreStore - retl - mov 0, %o0 -2: ldub [%o0], %g1 - brnz,pt %g1, 2b - membar #LoadLoad - ba,a,pt %xcc, 1b -END(pthread_spin_lock) diff --git a/sysdeps/sparc/sparc64/pthread_spin_trylock.S b/sysdeps/sparc/sparc64/pthread_spin_trylock.S deleted file mode 100644 index fa05cf8fdb..0000000000 --- a/sysdeps/sparc/sparc64/pthread_spin_trylock.S +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY(pthread_spin_trylock) - ldstub [%o0], %o0 - membar #StoreLoad | #StoreStore - retl - movrnz %o0, EBUSY, %o0 -END(pthread_spin_trylock) diff --git a/sysdeps/sparc/sparc64/pthread_spin_unlock.S b/sysdeps/sparc/sparc64/pthread_spin_unlock.S deleted file mode 100644 index c82f05d538..0000000000 --- a/sysdeps/sparc/sparc64/pthread_spin_unlock.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(pthread_spin_unlock) - membar #StoreStore | #LoadStore - stb %g0, [%o0] - retl - clr %o0 -END(pthread_spin_unlock) - -strong_alias (pthread_spin_unlock, pthread_spin_init) diff --git a/sysdeps/sparc/sparc64/pthreaddef.h b/sysdeps/sparc/sparc64/pthreaddef.h deleted file mode 100644 index df81791a65..0000000000 --- a/sysdeps/sparc/sparc64/pthreaddef.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (4 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 4096 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 16 - - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME (stack_pointer + (2 * 128)) -register char *stack_pointer __asm__("%sp"); diff --git a/sysdeps/sparc/sparc64/rawmemchr.S b/sysdeps/sparc/sparc64/rawmemchr.S deleted file mode 100644 index d3e7b5d4b4..0000000000 --- a/sysdeps/sparc/sparc64/rawmemchr.S +++ /dev/null @@ -1,178 +0,0 @@ -/* rawmemchr (str, ch) -- Return pointer to first occurrence of CH in STR. - For SPARC v9. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - This version is developed using the same algorithm as the fast C - version which carries the following introduction: - Based on strlen implementation by Torbjorn Granlund (tege@sics.se), - with help from Dan Sahlin (dan@sics.se) and - commentary by Jim Blandy (jimb@ai.mit.edu); - adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), - and implemented by Roland McGrath (roland@ai.mit.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC -#define XCC xcc -#define USE_BPR - .register %g2, #scratch - .register %g3, #scratch -#endif - - /* Normally, this uses - ((xword - 0x0101010101010101) & 0x8080808080808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 32 -ENTRY(__rawmemchr) - and %o1, 0xff, %o1 /* IEU0 Group */ - sethi %hi(0x01010101), %g1 /* IEU1 */ - ldub [%o0], %o3 /* Load */ - sll %o1, 8, %o4 /* IEU0 Group */ - - or %g1, %lo(0x01010101), %g1 /* IEU1 */ - sllx %g1, 32, %g2 /* IEU0 Group */ - or %o4, %o1, %o4 /* IEU1 */ - andcc %o0, 7, %g0 /* IEU1 Group */ - - sll %o4, 16, %g5 /* IEU0 */ - or %o4, %g5, %o4 /* IEU0 Group */ - or %g1, %g2, %g1 /* IEU1 */ - bne,pn %icc, 32f /* CTI */ - - sllx %o4, 32, %g5 /* IEU0 Group */ - cmp %o3, %o1 /* IEU1 */ - be,pn %icc, 30f /* CTI */ - sllx %g1, 7, %g2 /* IEU0 Group */ - -18: ldx [%o0], %o3 /* Load */ - or %o4, %g5, %o4 /* IEU1 */ - add %o0, 8, %o0 /* IEU0 Group */ -19: xor %o3, %o4, %o3 /* IEU0 Group */ - - sub %o3, %g1, %o2 /* IEU0 Group */ -#ifdef EIGHTBIT_NOT_RARE - andn %o2, %o3, %o5 /* IEU0 Group */ - ldxa [%o0] ASI_PNF, %o3 /* Load */ - andcc %o5, %g2, %g0 /* IEU1 Group */ -#else - ldxa [%o0] ASI_PNF, %o3 /* Load */ - andcc %o2, %g2, %g0 /* IEU1 Group */ -#endif - be,pt %xcc, 19b /* CTI */ - - add %o0, 8, %o0 /* IEU0 */ - addcc %o2, %g1, %g3 /* IEU1 Group */ - srlx %o2, 32, %o2 /* IEU0 */ -20: andcc %o2, %g2, %g0 /* IEU1 Group */ - - be,pn %xcc, 21f /* CTI */ - srlx %g3, 56, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 29f /* CTI */ - - srlx %g3, 48, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 28f /* CTI */ - srlx %g3, 40, %o2 /* IEU0 */ - - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 27f /* CTI */ - srlx %g3, 32, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 26f /* CTI */ -21: srlx %g3, 24, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 25f /* CTI */ - - srlx %g3, 16, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 24f /* CTI */ - srlx %g3, 8, %o2 /* IEU0 */ - - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 23f /* CTI */ - xor %o3, %o4, %o3 /* IEU0 */ - andcc %g3, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 22f /* CTI */ - sub %o3, %g1, %o2 /* IEU0 */ - ldxa [%o0] ASI_PNF, %o3 /* Load */ - andcc %o2, %g2, %g0 /* IEU1 Group */ - - be,pt %xcc, 19b /* CTI */ - add %o0, 8, %o0 /* IEU0 */ - addcc %o2, %g1, %g3 /* IEU1 Group */ - ba,pt %xcc, 20b /* CTI */ - - srlx %o2, 32, %o2 /* IEU0 */ - - .align 16 -22: retl /* CTI+IEU1 Group */ - add %o0, -9, %o0 /* IEU0 */ -23: retl /* CTI+IEU1 Group */ - add %o0, -10, %o0 /* IEU0 */ - -24: retl /* CTI+IEU1 Group */ - add %o0, -11, %o0 /* IEU0 */ -25: retl /* CTI+IEU1 Group */ - add %o0, -12, %o0 /* IEU0 */ - -26: retl /* CTI+IEU1 Group */ - add %o0, -13, %o0 /* IEU0 */ -27: retl /* CTI+IEU1 Group */ - add %o0, -14, %o0 /* IEU0 */ - -28: retl /* CTI+IEU1 Group */ - add %o0, -15, %o0 /* IEU0 */ -29: retl /* CTI+IEU1 Group */ - add %o0, -16, %o0 /* IEU0 */ - -30: retl /* CTI+IEU1 Group */ - nop /* IEU0 */ - - .align 16 -32: andcc %o0, 7, %g0 /* IEU1 Group */ - be,a,pn %icc, 18b /* CTI */ - sllx %g1, 7, %g2 /* IEU0 */ - add %o0, 1, %o0 /* IEU0 Group */ - - cmp %o3, %o1 /* IEU1 */ - bne,a,pt %icc, 32b /* CTI */ - lduba [%o0] ASI_PNF, %o3 /* Load */ - retl /* CTI+IEU1 Group */ - - add %o0, -1, %o0 /* IEU0 */ -END(__rawmemchr) - -libc_hidden_def (__rawmemchr) -weak_alias (__rawmemchr, rawmemchr) diff --git a/sysdeps/sparc/sparc64/rshift.S b/sysdeps/sparc/sparc64/rshift.S deleted file mode 100644 index f9319f2ec7..0000000000 --- a/sysdeps/sparc/sparc64/rshift.S +++ /dev/null @@ -1,92 +0,0 @@ -/* SPARC v9 __mpn_rshift -- - - Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include - -/* INPUT PARAMETERS - res_ptr %o0 - src_ptr %o1 - size %o2 - cnt %o3 */ - - .register %g2, #scratch - .register %g3, #scratch - -ENTRY(__mpn_rshift) - ldx [%o1],%g2 ! load first limb - sub %g0,%o3,%o5 ! negate shift count - add %o2,-1,%o2 - andcc %o2,4-1,%g4 ! number of limbs in first loop - sllx %g2,%o5,%g1 ! compute function result - be,pn %xcc,.L0 ! if multiple of 4 limbs, skip first loop - mov %g1,%g5 - - sub %o2,%g4,%o2 ! adjust count for main loop - -.Loop0: ldx [%o1+8],%g3 - add %o0,8,%o0 - add %o1,8,%o1 - srlx %g2,%o3,%o4 - addcc %g4,-1,%g4 - sllx %g3,%o5,%g1 - mov %g3,%g2 - or %o4,%g1,%o4 - bne,pt %xcc,.Loop0 - stx %o4,[%o0-8] - -.L0: brz,pn %o2,.Lend - nop - -.Loop: ldx [%o1+8],%g3 - add %o0,32,%o0 - srlx %g2,%o3,%o4 - addcc %o2,-4,%o2 - sllx %g3,%o5,%g1 - - ldx [%o1+16],%g2 - srlx %g3,%o3,%g4 - or %o4,%g1,%o4 - stx %o4,[%o0-32] - sllx %g2,%o5,%g1 - - ldx [%o1+24],%g3 - srlx %g2,%o3,%o4 - or %g4,%g1,%g4 - stx %g4,[%o0-24] - sllx %g3,%o5,%g1 - - ldx [%o1+32],%g2 - srlx %g3,%o3,%g4 - or %o4,%g1,%o4 - stx %o4,[%o0-16] - sllx %g2,%o5,%g1 - - add %o1,32,%o1 - or %g4,%g1,%g4 - bne,pt %xcc,.Loop - stx %g4,[%o0-8] - -.Lend: srlx %g2,%o3,%g2 - stx %g2,[%o0-0] - - jmpl %o7+8,%g0 - mov %g5,%o0 - -END(__mpn_rshift) diff --git a/sysdeps/sparc/sparc64/rtld-memcpy.c b/sysdeps/sparc/sparc64/rtld-memcpy.c deleted file mode 100644 index 52f8302f08..0000000000 --- a/sysdeps/sparc/sparc64/rtld-memcpy.c +++ /dev/null @@ -1,3 +0,0 @@ -#define NO_MEMPCPY_STPCPY_REDIRECT -#include -#include diff --git a/sysdeps/sparc/sparc64/rtld-memset.c b/sysdeps/sparc/sparc64/rtld-memset.c deleted file mode 100644 index 55f3835790..0000000000 --- a/sysdeps/sparc/sparc64/rtld-memset.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/sparc/sparc64/soft-fp/Makefile b/sysdeps/sparc/sparc64/soft-fp/Makefile deleted file mode 100644 index b145df283b..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# Software floating-point emulation. -# Makefile for SPARC v9 ABI mandated long double utility -# functions (_Qp_*). -# Copyright (C) 1999-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# Contributed by Jakub Jelinek (jj@ultra.linux.cz). -# - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifeq ($(subdir),soft-fp) -sparc64-quad-routines := qp_add qp_cmp qp_cmpe qp_div qp_dtoq qp_feq qp_fge \ - qp_fgt qp_fle qp_flt qp_fne qp_itoq qp_mul qp_neg qp_qtod qp_qtoi \ - qp_qtos qp_qtoui qp_qtoux qp_qtox qp_sqrt qp_stoq qp_sub qp_uitoq \ - qp_uxtoq qp_xtoq qp_util -sysdep_routines += $(sparc64-quad-routines) -endif - -ifeq ($(subdir),math) -CPPFLAGS += -I../soft-fp/ -endif diff --git a/sysdeps/sparc/sparc64/soft-fp/Versions b/sysdeps/sparc/sparc64/soft-fp/Versions deleted file mode 100644 index 9e89c3c3ef..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/Versions +++ /dev/null @@ -1,8 +0,0 @@ -libc { - GLIBC_2.2 { - _Qp_add; _Qp_cmp; _Qp_cmpe; _Qp_div; _Qp_dtoq; _Qp_feq; _Qp_fge; _Qp_fgt; - _Qp_fle; _Qp_flt; _Qp_fne; _Qp_itoq; _Qp_mul; _Qp_neg; _Qp_qtod; _Qp_qtoi; - _Qp_qtos; _Qp_qtoui; _Qp_qtoux; _Qp_qtox; _Qp_sqrt; _Qp_stoq; _Qp_sub; - _Qp_uitoq; _Qp_uxtoq; _Qp_xtoq; - } -} diff --git a/sysdeps/sparc/sparc64/soft-fp/e_ilogbl.c b/sysdeps/sparc/sparc64/soft-fp/e_ilogbl.c deleted file mode 100644 index 5b19d12a4e..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/e_ilogbl.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Software floating-point emulation. - ilogbl(x, exp) - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* ilogbl(long double x) - * return the binary exponent of non-zero x - * ilogbl(0) = 0x80000001 - * ilogbl(inf/NaN) = 0x7fffffff (no signal is raised) - */ - -#include "soft-fp.h" -#include "quad.h" -#include - -int __ieee754_ilogbl (long double x) -{ - FP_DECL_EX; - FP_DECL_Q(X); - -/* - FP_UNPACK_Q(X, x); - switch (X_c) - { - case FP_CLS_ZERO: - return FP_ILOGB0; - case FP_CLS_NAN: - case FP_CLS_INF: - return FP_ILOGBNAN; - default: - return X_e; - } - */ - FP_UNPACK_RAW_Q(X, x); - switch (X_e) - { - default: - return X_e - _FP_EXPBIAS_Q; - case 0: -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - if (_FP_FRAC_ZEROP_4(X)) - return FP_ILOGB0; - else - { - _FP_I_TYPE shift; - _FP_FRAC_CLZ_4(shift, X); - shift -= _FP_FRACXBITS_Q; - return X_e - _FP_EXPBIAS_Q - 1 + shift; - } -#else - if (_FP_FRAC_ZEROP_2(X)) - return FP_ILOGB0; - else - { - _FP_I_TYPE shift; - _FP_FRAC_CLZ_2(shift, X); - shift -= _FP_FRACXBITS_Q; - return X_e - _FP_EXPBIAS_Q - 1 + shift; - } -#endif - case _FP_EXPBIAS_Q: - return FP_ILOGBNAN; - } -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_add.c b/sysdeps/sparc/sparc64/soft-fp/qp_add.c deleted file mode 100644 index a67deab315..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_add.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Software floating-point emulation. - (*c) = (*a) + (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -void _Qp_add(long double *c, const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_QP(A, a); - FP_UNPACK_SEMIRAW_QP(B, b); - FP_ADD_Q(C, A, B); - FP_PACK_SEMIRAW_QP(c, C); - QP_HANDLE_EXCEPTIONS(__asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" ldd [%2], %%f56\n" -" ldd [%2+8], %%f58\n" -" faddq %%f52, %%f56, %%f60\n" -" std %%f60, [%0]\n" -" std %%f62, [%0+8]\n" -" " : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER)); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_cmp.c b/sysdeps/sparc/sparc64/soft-fp/qp_cmp.c deleted file mode 100644 index 5316157ec7..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_cmp.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Compare (*a) and (*b), return float condition code. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Qp_cmp(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_Q(r, B, A, 3, 1); - if (r == -1) r = 2; - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 3)); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_cmpe.c b/sysdeps/sparc/sparc64/soft-fp/qp_cmpe.c deleted file mode 100644 index e0a834c721..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_cmpe.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Software floating-point emulation. - Compare (*a) and (*b), return float condition code. - Signal exception (unless masked) if unordered. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Qp_cmpe(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_Q(r, B, A, 3, 2); - if (r == -1) r = 2; - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpeq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 3)); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_div.c b/sysdeps/sparc/sparc64/soft-fp/qp_div.c deleted file mode 100644 index 27d08f94dc..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_div.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Software floating-point emulation. - (*c) = (*a) / (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -void _Qp_div(long double *c, const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - - FP_INIT_ROUNDMODE; - FP_UNPACK_QP(A, a); - FP_UNPACK_QP(B, b); - FP_DIV_Q(C, A, B); - FP_PACK_QP(c, C); - QP_HANDLE_EXCEPTIONS(__asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" ldd [%2], %%f56\n" -" ldd [%2+8], %%f58\n" -" fdivq %%f52, %%f56, %%f60\n" -" std %%f60, [%0]\n" -" std %%f62, [%0+8]\n" -" " : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER)); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c b/sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c deleted file mode 100644 index 5a5c43b13c..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Software floating-point emulation. - (*c) = (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "double.h" -#include "quad.h" - -void _Qp_dtoq(long double *c, const double a) -{ - FP_DECL_EX; - FP_DECL_D(A); - FP_DECL_Q(C); - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_D(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_EXTEND(Q,D,4,2,C,A); -#else - FP_EXTEND(Q,D,2,1,C,A); -#endif - FP_PACK_RAW_QP(c, C); - QP_HANDLE_EXCEPTIONS(__asm ( -" fdtoq %1, %%f60\n" -" std %%f60, [%0]\n" -" std %%f62, [%0+8]\n" -" " : : "r" (c), "e" (a) : QP_CLOBBER)); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_feq.c b/sysdeps/sparc/sparc64/soft-fp/qp_feq.c deleted file mode 100644 index c7c6263782..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_feq.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Return 1 if (*a) == (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Qp_feq(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_EQ_Q(r, A, B, 1); - - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 3)); - - return !r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_fge.c b/sysdeps/sparc/sparc64/soft-fp/qp_fge.c deleted file mode 100644 index 19cacbb342..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_fge.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Return 1 if (*a) >= (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Qp_fge(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_Q(r, B, A, 3, 2); - - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpeq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 1)); - - return (r <= 0); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_fgt.c b/sysdeps/sparc/sparc64/soft-fp/qp_fgt.c deleted file mode 100644 index 70645d1cba..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_fgt.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Return 1 if (*a) > (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Qp_fgt(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_Q(r, B, A, 3, 2); - - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpeq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 3) - 3); - - return (r == -1); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_fle.c b/sysdeps/sparc/sparc64/soft-fp/qp_fle.c deleted file mode 100644 index 6293fcbcda..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_fle.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Return 1 if (*a) <= (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Qp_fle(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_Q(r, B, A, -2, 2); - - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpeq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 2) ? -1 : 0); - - return (r >= 0); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_flt.c b/sysdeps/sparc/sparc64/soft-fp/qp_flt.c deleted file mode 100644 index 7aa054697a..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_flt.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Return 1 if (*a) < (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Qp_flt(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_Q(r, B, A, 3, 2); - - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpeq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 3)); - - return (r == 1); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_fne.c b/sysdeps/sparc/sparc64/soft-fp/qp_fne.c deleted file mode 100644 index dd358eda0a..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_fne.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Software floating-point emulation. - Return 1 if (*a) != (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -int _Qp_fne(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_EQ_Q(r, A, B, 1); - - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 3) != 0); - - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_itoq.c b/sysdeps/sparc/sparc64/soft-fp/qp_itoq.c deleted file mode 100644 index 230fde365f..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_itoq.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Software floating-point emulation. - (*c) = (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -void _Qp_itoq(long double *c, const int a) -{ - FP_DECL_EX; - FP_DECL_Q(C); - int b = a; - - FP_FROM_INT_Q(C, b, 32, unsigned int); - FP_PACK_RAW_QP(c, C); - QP_NO_EXCEPTIONS; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_mul.c b/sysdeps/sparc/sparc64/soft-fp/qp_mul.c deleted file mode 100644 index 49a290af93..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_mul.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Software floating-point emulation. - (*c) = (*a) * (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* As QP_HANDLE_EXCEPTIONS reloads FPU control word anyway, - avoid doing it twice. */ -#define _FP_MUL_MEAT_RESET_FE do {} while (0) -#include "soft-fp.h" -#include "quad.h" - -void _Qp_mul(long double *c, const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - - FP_INIT_ROUNDMODE; - FP_UNPACK_QP(A, a); - FP_UNPACK_QP(B, b); - FP_MUL_Q(C, A, B); - FP_PACK_QP(c, C); - QP_HANDLE_EXCEPTIONS( - _FPU_SETCW(_fcw); - __asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" ldd [%2], %%f56\n" -" ldd [%2+8], %%f58\n" -" fmulq %%f52, %%f56, %%f60\n" -" std %%f60, [%0]\n" -" std %%f62, [%0+8]\n" -" " : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER)); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_neg.S b/sysdeps/sparc/sparc64/soft-fp/qp_neg.S deleted file mode 100644 index d2fd7f286f..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_neg.S +++ /dev/null @@ -1,30 +0,0 @@ -/* Quad floating-point emulation. - (*c) = !(*a) - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(_Qp_neg) - ldd [%o1], %f60 - ldd [%o1 + 8], %f62 - fnegd %f60, %f60 - std %f60, [%o0] - jmpl %o7 + 8, %g0 - std %f62, [%o0 + 8] -END(_Qp_neg) diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_qtod.c b/sysdeps/sparc/sparc64/soft-fp/qp_qtod.c deleted file mode 100644 index 7c3889da97..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_qtod.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Return (double)(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "double.h" -#include "quad.h" - -double _Qp_qtod(const long double *a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - FP_DECL_D(R); - double r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_QP(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_TRUNC(D,Q,2,4,R,A); -#else - FP_TRUNC(D,Q,1,2,R,A); -#endif - FP_PACK_SEMIRAW_D(r, R); - QP_HANDLE_EXCEPTIONS(__asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" fqtod %%f52, %0\n" -" " : "=&e" (r) : "r" (a) : QP_CLOBBER)); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c b/sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c deleted file mode 100644 index 99cd760acd..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Software floating-point emulation. - Return (int)(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FP_ROUNDMODE FP_RND_ZERO -#include "soft-fp.h" -#include "quad.h" - -int _Qp_qtoi(const long double *a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - unsigned int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_TO_INT_Q(r, A, 32, 1); - QP_HANDLE_EXCEPTIONS( - int rx; - __asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" fqtoi %%f52, %%f31\n" -" st %%f31, [%0]\n" -" " : : "r" (&rx), "r" (a) : QP_CLOBBER, "f31"); - r = rx); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_qtos.c b/sysdeps/sparc/sparc64/soft-fp/qp_qtos.c deleted file mode 100644 index dacd6c0620..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_qtos.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Software floating-point emulation. - Return (float)(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "single.h" -#include "quad.h" - -float _Qp_qtos(const long double *a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - FP_DECL_S(R); - float r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_QP(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_TRUNC(S,Q,1,4,R,A); -#else - FP_TRUNC(S,Q,1,2,R,A); -#endif - FP_PACK_SEMIRAW_S(r, R); - - QP_HANDLE_EXCEPTIONS(__asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" fqtos %%f52, %0\n" -" " : "=&f" (r) : "r" (a) : QP_CLOBBER)); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c b/sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c deleted file mode 100644 index 2d8fb52530..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Software floating-point emulation. - Return (unsigned int)(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FP_ROUNDMODE FP_RND_ZERO -#include "soft-fp.h" -#include "quad.h" - -unsigned int _Qp_qtoui(const long double *a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - unsigned int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_TO_INT_Q(r, A, 32, -1); - QP_HANDLE_EXCEPTIONS( - int rx; - __asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" fqtoi %%f52, %%f31\n" -" st %%f31, [%0]\n" -" " : : "r" (&rx), "r" (a) : QP_CLOBBER, "f31"); - r = rx); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c b/sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c deleted file mode 100644 index 2d74a6ee15..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Software floating-point emulation. - Return (unsigned long)(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FP_ROUNDMODE FP_RND_ZERO -#include "soft-fp.h" -#include "quad.h" - -unsigned long _Qp_qtoux(const long double *a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - unsigned long r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_TO_INT_Q(r, A, 64, -1); - QP_HANDLE_EXCEPTIONS( - unsigned long rx; - __asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" fqtox %%f52, %%f60\n" -" std %%f60, [%0]\n" -" " : : "r" (&rx), "r" (a) : QP_CLOBBER); - r = rx); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_qtox.c b/sysdeps/sparc/sparc64/soft-fp/qp_qtox.c deleted file mode 100644 index abfc666cde..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_qtox.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Software floating-point emulation. - Return (long)(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define FP_ROUNDMODE FP_RND_ZERO -#include "soft-fp.h" -#include "quad.h" - -long _Qp_qtox(const long double *a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - unsigned long r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_TO_INT_Q(r, A, 64, 1); - QP_HANDLE_EXCEPTIONS( - long rx; - __asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" fqtox %%f52, %%f60\n" -" std %%f60, [%0]\n" -" " : : "r" (&rx), "r" (a) : QP_CLOBBER); - r = rx); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_sqrt.c b/sysdeps/sparc/sparc64/soft-fp/qp_sqrt.c deleted file mode 100644 index 3d78b1fdbb..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_sqrt.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Software floating-point emulation. - (*c) = sqrtl(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -void _Qp_sqrt(long double *c, const long double *a) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(C); - - FP_INIT_ROUNDMODE; - FP_UNPACK_QP(A, a); - FP_SQRT_Q(C, A); - FP_PACK_QP(c, C); - QP_HANDLE_EXCEPTIONS(__asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" fsqrtq %%f52, %%f60\n" -" std %%f60, [%0]\n" -" std %%f62, [%0+8]\n" -" " : : "r" (c), "r" (a) : QP_CLOBBER)); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_stoq.c b/sysdeps/sparc/sparc64/soft-fp/qp_stoq.c deleted file mode 100644 index 9202a7269b..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_stoq.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Software floating-point emulation. - (*c) = (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "single.h" -#include "quad.h" - -void _Qp_stoq(long double *c, const float a) -{ - FP_DECL_EX; - FP_DECL_S(A); - FP_DECL_Q(C); - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_S(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_EXTEND(Q,S,4,1,C,A); -#else - FP_EXTEND(Q,S,2,1,C,A); -#endif - FP_PACK_RAW_QP(c, C); - QP_HANDLE_EXCEPTIONS(__asm ( -" fstoq %1, %%f60\n" -" std %%f60, [%0]\n" -" std %%f62, [%0+8]\n" -" " : : "r" (c), "f" (a) : QP_CLOBBER)); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_sub.c b/sysdeps/sparc/sparc64/soft-fp/qp_sub.c deleted file mode 100644 index 71b9890743..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_sub.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Software floating-point emulation. - (*c) = (*a) - (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -void _Qp_sub(long double *c, const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_QP(A, a); - FP_UNPACK_SEMIRAW_QP(B, b); - FP_SUB_Q(C, A, B); - FP_PACK_SEMIRAW_QP(c, C); - QP_HANDLE_EXCEPTIONS(__asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" ldd [%2], %%f56\n" -" ldd [%2+8], %%f58\n" -" fsubq %%f52, %%f56, %%f60\n" -" std %%f60, [%0]\n" -" std %%f62, [%0+8]\n" -" " : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER)); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c b/sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c deleted file mode 100644 index cc8603ad41..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Software floating-point emulation. - (*c) = (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -void _Qp_uitoq(long double *c, const unsigned int a) -{ - FP_DECL_EX; - FP_DECL_Q(C); - unsigned int b = a; - - FP_FROM_INT_Q(C, b, 32, unsigned int); - FP_PACK_RAW_QP(c, C); - QP_NO_EXCEPTIONS; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_util.c b/sysdeps/sparc/sparc64/soft-fp/qp_util.c deleted file mode 100644 index 7e1f2511e2..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_util.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Software floating-point emulation. - Helper routine for _Qp_* routines. - Simulate exceptions using double arithmetics. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "soft-fp.h" - -void __Qp_handle_exceptions(int exceptions) -{ - if (exceptions & FP_EX_INVALID) - { - float f = 0.0; - __asm__ __volatile__ ("fdivs %0, %0, %0" : "+f" (f)); - } - if (exceptions & FP_EX_DIVZERO) - { - float f = 1.0, g = 0.0; - __asm__ __volatile__ ("fdivs %0, %1, %0" - : "+f" (f) - : "f" (g)); - } - if (exceptions & FP_EX_OVERFLOW) - { - float f = FLT_MAX; - __asm__ __volatile__("fmuls %0, %0, %0" : "+f" (f)); - exceptions &= ~FP_EX_INEXACT; - } - if (exceptions & FP_EX_UNDERFLOW) - { - float f = FLT_MIN; - __asm__ __volatile__("fmuls %0, %0, %0" : "+f" (f)); - exceptions &= ~FP_EX_INEXACT; - } - if (exceptions & FP_EX_INEXACT) - { - double d = 1.0, e = M_PI; - __asm__ __volatile__ ("fdivd %0, %1, %0" - : "+f" (d) - : "f" (e)); - } -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c b/sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c deleted file mode 100644 index 766ca78872..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Software floating-point emulation. - (*c) = (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -void _Qp_uxtoq(long double *c, const unsigned long a) -{ - FP_DECL_EX; - FP_DECL_Q(C); - unsigned long b = a; - - FP_FROM_INT_Q(C, b, 64, unsigned long); - FP_PACK_RAW_QP(c, C); - QP_NO_EXCEPTIONS; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c b/sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c deleted file mode 100644 index 42c0bf1044..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Software floating-point emulation. - (*c) = (long double)(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) and - Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "soft-fp.h" -#include "quad.h" - -void _Qp_xtoq(long double *c, const long a) -{ - FP_DECL_EX; - FP_DECL_Q(C); - long b = a; - - FP_FROM_INT_Q(C, b, 64, unsigned long); - FP_PACK_RAW_QP(c, C); - QP_NO_EXCEPTIONS; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/s_frexpl.c b/sysdeps/sparc/sparc64/soft-fp/s_frexpl.c deleted file mode 100644 index 6f0baeb3fb..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/s_frexpl.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Software floating-point emulation. - frexpl(x, exp) - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * for non-zero x - * x = frexpl(arg,&exp); - * return a long double fp quantity x such that 0.5 <= |x| <1.0 - * and the corresponding binary exponent "exp". That is - * arg = x*2^exp. - * If arg is inf, 0.0, or NaN, then frexpl(arg,&exp) returns arg - * with *exp=0. - */ - -#include "soft-fp.h" -#include "quad.h" - -long double __frexpl(long double arg, int *exp) -{ - FP_DECL_EX; - FP_DECL_Q(A); - long double r; - - *exp = 0; - FP_UNPACK_Q(A, arg); - if (A_c != FP_CLS_NORMAL) - return arg; - *exp = A_e + 1; - A_e = -1; - FP_PACK_Q(r, A); - - return r; -} - -weak_alias (__frexpl, frexpl) diff --git a/sysdeps/sparc/sparc64/soft-fp/s_scalblnl.c b/sysdeps/sparc/sparc64/soft-fp/s_scalblnl.c deleted file mode 100644 index 250a8f4f0f..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/s_scalblnl.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Software floating-point emulation. - scalblnl(x, exp) - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * scalblnl (long double x, long int n) - * scalblnl(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include "soft-fp.h" -#include "quad.h" - -long double __scalblnl(long double arg, int exp) -{ - FP_DECL_EX; - FP_DECL_Q(A); - long double r; - - FP_UNPACK_Q(A, arg); - switch (A_c) - { - case FP_CLS_ZERO: - return arg; - case FP_CLS_NAN: - case FP_CLS_INF: - FP_HANDLE_EXCEPTIONS; - return arg; - } - A_e += exp; - FP_PACK_Q(r, A); - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/s_scalbnl.c b/sysdeps/sparc/sparc64/soft-fp/s_scalbnl.c deleted file mode 100644 index c686175e97..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/s_scalbnl.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Software floating-point emulation. - scalbnl(x, exp) - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek (jj@ultra.linux.cz). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * scalbnl (long double x, int n) - * scalbnl(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include "soft-fp.h" -#include "quad.h" - -long double __scalbnl(long double arg, int exp) -{ - FP_DECL_EX; - FP_DECL_Q(A); - long double r; - - FP_UNPACK_Q(A, arg); - switch (A_c) - { - case FP_CLS_ZERO: - return arg; - case FP_CLS_NAN: - case FP_CLS_INF: - FP_HANDLE_EXCEPTIONS; - return arg; - } - A_e += exp; - FP_PACK_Q(r, A); - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/sfp-machine.h b/sysdeps/sparc/sparc64/soft-fp/sfp-machine.h deleted file mode 100644 index c03a6d3764..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/sfp-machine.h +++ /dev/null @@ -1,147 +0,0 @@ -/* Machine-dependent software floating-point definitions. - Sparc64 userland (_Q_* and _Qp_*) version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com), - Jakub Jelinek (jj@ultra.linux.cz) and - David S. Miller (davem@redhat.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define _FP_W_TYPE_SIZE 64 -#define _FP_W_TYPE unsigned long -#define _FP_WS_TYPE signed long -#define _FP_I_TYPE long - -/* Helper macros for _FP_MUL_MEAT_2_120_240_double. */ -#define _FP_MUL_MEAT_SET_FE_TZ \ -do { \ - static fpu_control_t _fetz = _FPU_RC_DOWN; \ - _FPU_SETCW(_fetz); \ -} while (0) -#ifndef _FP_MUL_MEAT_RESET_FE -#define _FP_MUL_MEAT_RESET_FE _FPU_SETCW(_fcw) -#endif - -#define _FP_MUL_MEAT_S(R,X,Y) \ - _FP_MUL_MEAT_1_imm(_FP_WFRACBITS_S,R,X,Y) -#define _FP_MUL_MEAT_D(R,X,Y) \ - _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_2_120_240_double(_FP_WFRACBITS_Q,R,X,Y, \ - _FP_MUL_MEAT_SET_FE_TZ, \ - _FP_MUL_MEAT_RESET_FE) - -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y) -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) - -#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) -#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1) -#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1 -#define _FP_NANSIGN_S 0 -#define _FP_NANSIGN_D 0 -#define _FP_NANSIGN_Q 0 - -#define _FP_KEEPNANFRACP 1 -#define _FP_QNANNEGATEDP 0 - -/* If one NaN is signaling and the other is not, - * we choose that one, otherwise we choose Y. - */ -#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - if ((_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs) \ - && !(_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs)) \ - { \ - R##_s = X##_s; \ - _FP_FRAC_COPY_##wc(R,X); \ - } \ - else \ - { \ - R##_s = Y##_s; \ - _FP_FRAC_COPY_##wc(R,Y); \ - } \ - R##_c = FP_CLS_NAN; \ - } while (0) - -/* Obtain the current rounding mode. */ -#ifndef FP_ROUNDMODE -#define FP_ROUNDMODE ((_fcw >> 30) & 0x3) -#endif - -/* Exception flags. */ -#define FP_EX_INVALID (1 << 4) -#define FP_EX_OVERFLOW (1 << 3) -#define FP_EX_UNDERFLOW (1 << 2) -#define FP_EX_DIVZERO (1 << 1) -#define FP_EX_INEXACT (1 << 0) - -#define _FP_TININESS_AFTER_ROUNDING 0 - -#define _FP_DECL_EX \ - fpu_control_t _fcw __attribute__ ((unused)) = (FP_RND_NEAREST << 30) - -#define FP_INIT_ROUNDMODE \ -do { \ - _FPU_GETCW(_fcw); \ -} while (0) - -#define FP_TRAPPING_EXCEPTIONS ((_fcw >> 23) & 0x1f) -#define FP_INHIBIT_RESULTS ((_fcw >> 23) & _fex) - -/* Simulate exceptions using double arithmetics. */ -extern void __Qp_handle_exceptions(int exc); - -#define FP_HANDLE_EXCEPTIONS \ -do { \ - if (!_fex) \ - { \ - /* This is the common case, so we do it inline. \ - * We need to clear cexc bits if any. \ - */ \ - __asm__ __volatile__("fzero %%f62\n\t" \ - "faddd %%f62, %%f62, %%f62" \ - : : : "f62"); \ - } \ - else \ - { \ - __Qp_handle_exceptions (_fex); \ - } \ -} while (0) - -#define QP_HANDLE_EXCEPTIONS(_a) \ -do { \ - if ((_fcw >> 23) & _fex) \ - { \ - _a; \ - } \ - else \ - { \ - _fcw = (_fcw & ~0x1fL) | (_fex << 5) | _fex; \ - _FPU_SETCW(_fcw); \ - } \ -} while (0) - -#define QP_NO_EXCEPTIONS \ - __asm ("fzero %%f62\n\t" \ - "faddd %%f62, %%f62, %%f62" : : : "f62") - -#define QP_CLOBBER "memory", "f52", "f54", "f56", "f58", "f60", "f62" -#define QP_CLOBBER_CC QP_CLOBBER , "cc" diff --git a/sysdeps/sparc/sparc64/stackguard-macros.h b/sysdeps/sparc/sparc64/stackguard-macros.h deleted file mode 100644 index cc0c12c041..0000000000 --- a/sysdeps/sparc/sparc64/stackguard-macros.h +++ /dev/null @@ -1,7 +0,0 @@ -#include - -#define STACK_CHK_GUARD \ - ({ uintptr_t x; asm ("ldx [%%g7+0x28], %0" : "=r" (x)); x; }) - -#define POINTER_CHK_GUARD \ - ({ uintptr_t x; asm ("ldx [%%g7+0x30], %0" : "=r" (x)); x; }) diff --git a/sysdeps/sparc/sparc64/start.S b/sysdeps/sparc/sparc64/start.S deleted file mode 100644 index fcd4721463..0000000000 --- a/sysdeps/sparc/sparc64/start.S +++ /dev/null @@ -1,100 +0,0 @@ -/* Startup code for elf64-sparc - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - - .section ".text" - .align 4 - .global _start - .type _start,#function -_start: -#ifdef SHARED - SETUP_PIC_REG(l7) -#endif - - /* Terminate the stack frame, and reserve space for functions to - drop their arguments. */ - mov %g0, %fp - sub %sp, 6*8, %sp - - /* Extract the arguments and environment as encoded on the stack. The - argument info starts after one register window (16 words) past the SP, - plus the bias we added, plus the magic v9 STACK_BIAS. */ - ldx [%sp+STACK_BIAS+22*8], %o1 - add %sp, STACK_BIAS+23*8, %o2 - - /* Load the addresses of the user entry points. */ -#ifndef SHARED - sethi %hi(main), %o0 - sethi %hi(__libc_csu_init), %o3 - sethi %hi(__libc_csu_fini), %o4 - or %o0, %lo(main), %o0 - or %o3, %lo(__libc_csu_init), %o3 - or %o4, %lo(__libc_csu_fini), %o4 -#else - sethi %gdop_hix22(main), %o0 - sethi %gdop_hix22(__libc_csu_init), %o3 - sethi %gdop_hix22(__libc_csu_fini), %o4 - xor %o0, %gdop_lox10(main), %o0 - xor %o3, %gdop_lox10(__libc_csu_init), %o3 - xor %o4, %gdop_lox10(__libc_csu_fini), %o4 - ldx [%l7 + %o0], %o0, %gdop(main) - ldx [%l7 + %o3], %o3, %gdop(__libc_csu_init) - ldx [%l7 + %o4], %o4, %gdop(__libc_csu_fini) -#endif - - /* When starting a binary via the dynamic linker, %g1 contains the - address of the shared library termination function, which will be - registered with atexit(). If we are statically linked, this will - be NULL. */ - mov %g1, %o5 - - /* Let libc do the rest of the initialization, and call main. */ - call __libc_start_main - nop - - /* Die very horribly if exit returns. */ - illtrap 0 - - .size _start, .-_start - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 -weak_alias (__data_start, data_start) diff --git a/sysdeps/sparc/sparc64/stpcpy.S b/sysdeps/sparc/sparc64/stpcpy.S deleted file mode 100644 index b1593563a9..0000000000 --- a/sysdeps/sparc/sparc64/stpcpy.S +++ /dev/null @@ -1,274 +0,0 @@ -/* Copy SRC to DEST returning the address of the terminating '\0' in DEST. - For SPARC v9. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jan Vondrak and - Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC - .register %g2, #scratch - .register %g3, #scratch - .register %g6, #scratch -#endif - - /* Normally, this uses - ((xword - 0x0101010101010101) & 0x8080808080808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 32 -ENTRY(__stpcpy) - sethi %hi(0x01010101), %g1 /* IEU0 Group */ - or %g1, %lo(0x01010101), %g1 /* IEU0 Group */ - andcc %o0, 7, %g0 /* IEU1 */ - sllx %g1, 32, %g2 /* IEU0 Group */ - - bne,pn %icc, 12f /* CTI */ - andcc %o1, 7, %g3 /* IEU1 */ - or %g1, %g2, %g1 /* IEU0 Group */ - bne,pn %icc, 14f /* CTI */ - - sllx %g1, 7, %g2 /* IEU0 Group */ -1: ldx [%o1], %o3 /* Load */ - add %o1, 8, %o1 /* IEU1 */ -2: mov %o3, %g3 /* IEU0 Group */ - - sub %o3, %g1, %o2 /* IEU1 */ -3: ldxa [%o1] ASI_PNF, %o3 /* Load */ -#ifdef EIGHTBIT_NOT_RARE - andn %o2, %g3, %o2 /* IEU0 Group */ -#endif - add %o0, 8, %o0 /* IEU0 Group */ - andcc %o2, %g2, %g0 /* IEU1 */ - - add %o1, 8, %o1 /* IEU0 Group */ - be,a,pt %xcc, 2b /* CTI */ - stx %g3, [%o0 - 8] /* Store */ - srlx %g3, 56, %g5 /* IEU0 Group */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 11f /* CTI */ - srlx %g3, 48, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 10f /* CTI */ - srlx %g3, 40, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 9f /* CTI */ - - srlx %g3, 32, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 8f /* CTI */ - srlx %g3, 24, %g5 /* IEU0 */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 7f /* CTI */ - srlx %g3, 16, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 6f /* CTI */ - srlx %g3, 8, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 5f /* CTI */ - - sub %o3, %g1, %o2 /* IEU0 */ - stx %g3, [%o0 - 8] /* Store Group */ - andcc %g3, 0xff, %g0 /* IEU1 */ - bne,pt %icc, 3b /* CTI */ - - mov %o3, %g3 /* IEU0 Group */ -4: retl /* CTI+IEU1 Group */ - sub %o0, 1, %o0 /* IEU0 */ - - .align 16 -6: ba,pt %xcc, 23f /* CTI Group */ - sub %o0, 3, %g6 /* IEU0 */ -5: sub %o0, 2, %g6 /* IEU0 Group */ - stb %g5, [%o0 - 2] /* Store */ - - srlx %g3, 16, %g4 /* IEU0 Group */ -23: sth %g4, [%o0 - 4] /* Store */ - srlx %g3, 32, %g4 /* IEU0 Group */ - stw %g4, [%o0 - 8] /* Store */ - - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ -8: ba,pt %xcc, 24f /* CTI Group */ - sub %o0, 5, %g6 /* IEU0 */ - -7: sub %o0, 4, %g6 /* IEU0 Group */ - stb %g5, [%o0 - 4] /* Store */ - srlx %g3, 32, %g4 /* IEU0 Group */ -24: stw %g4, [%o0 - 8] /* Store */ - - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ -10: ba,pt %xcc, 25f /* CTI Group */ - sub %o0, 7, %g6 /* IEU0 */ - -9: sub %o0, 6, %g6 /* IEU0 Group */ - stb %g5, [%o0 - 6] /* Store */ - srlx %g3, 48, %g4 /* IEU0 */ -25: sth %g4, [%o0 - 8] /* Store Group */ - - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ -11: stb %g5, [%o0 - 8] /* Store Group */ - retl /* CTI+IEU1 Group */ - - sub %o0, 8, %o0 /* IEU0 */ - - .align 16 -12: or %g1, %g2, %g1 /* IEU0 Group */ - ldub [%o1], %o3 /* Load */ - sllx %g1, 7, %g2 /* IEU0 Group */ - stb %o3, [%o0] /* Store Group */ - -13: add %o0, 1, %o0 /* IEU0 */ - add %o1, 1, %o1 /* IEU1 */ - andcc %o3, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - - lduba [%o1] ASI_PNF, %o3 /* Load */ - andcc %o0, 7, %g0 /* IEU1 Group */ - bne,a,pt %icc, 13b /* CTI */ - stb %o3, [%o0] /* Store */ - - andcc %o1, 7, %g3 /* IEU1 Group */ - be,a,pt %icc, 1b /* CTI */ - ldx [%o1], %o3 /* Load */ -14: orcc %g0, 64, %g4 /* IEU1 Group */ - - sllx %g3, 3, %g5 /* IEU0 */ - sub %o1, %g3, %o1 /* IEU0 Group */ - sub %g4, %g5, %g4 /* IEU1 */ - /* %g1 = 0101010101010101 * - * %g2 = 8080808080808080 * - * %g3 = source alignment * - * %g5 = number of bits to shift left * - * %g4 = number of bits to shift right */ - ldxa [%o1] ASI_PNF, %o5 /* Load Group */ - - addcc %o1, 8, %o1 /* IEU1 */ -15: sllx %o5, %g5, %o3 /* IEU0 Group */ - ldxa [%o1] ASI_PNF, %o5 /* Load */ - srlx %o5, %g4, %o4 /* IEU0 Group */ - - add %o0, 8, %o0 /* IEU1 */ - or %o3, %o4, %o3 /* IEU0 Group */ - add %o1, 8, %o1 /* IEU1 */ - sub %o3, %g1, %o4 /* IEU0 Group */ - -#ifdef EIGHTBIT_NOT_RARE - andn %o4, %o3, %o4 /* IEU0 Group */ -#endif - andcc %o4, %g2, %g0 /* IEU1 Group */ - be,a,pt %xcc, 15b /* CTI */ - stx %o3, [%o0 - 8] /* Store */ - srlx %o3, 56, %o4 /* IEU0 Group */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 22f /* CTI */ - srlx %o3, 48, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 21f /* CTI */ - srlx %o3, 40, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - - srlx %o3, 32, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 19f /* CTI */ - srlx %o3, 24, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 18f /* CTI */ - srlx %o3, 16, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 17f /* CTI */ - srlx %o3, 8, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 16f /* CTI */ - - andcc %o3, 0xff, %g0 /* IEU1 Group */ - bne,pn %icc, 15b /* CTI */ - stx %o3, [%o0 - 8] /* Store */ - retl /* CTI+IEU1 Group */ - - sub %o0, 1, %o0 /* IEU0 */ - - .align 16 -17: ba,pt %xcc, 26f /* CTI Group */ - subcc %o0, 3, %g6 /* IEU1 */ -18: ba,pt %xcc, 27f /* CTI Group */ - subcc %o0, 4, %g6 /* IEU1 */ - -19: ba,pt %xcc, 28f /* CTI Group */ - subcc %o0, 5, %g6 /* IEU1 */ -16: subcc %o0, 2, %g6 /* IEU1 Group */ - srlx %o3, 8, %o4 /* IEU0 */ - - stb %o4, [%o0 - 2] /* Store */ -26: srlx %o3, 16, %o4 /* IEU0 Group */ - stb %o4, [%o0 - 3] /* Store */ -27: srlx %o3, 24, %o4 /* IEU0 Group */ - - stb %o4, [%o0 - 4] /* Store */ -28: srlx %o3, 32, %o4 /* IEU0 Group */ - stw %o4, [%o0 - 8] /* Store */ - retl /* CTI+IEU1 Group */ - - mov %g6, %o0 /* IEU0 */ - - .align 16 -21: ba,pt %xcc, 29f /* CTI Group */ - subcc %o0, 7, %g6 /* IEU1 */ -22: ba,pt %xcc, 30f /* CTI Group */ - subcc %o0, 8, %g6 /* IEU1 */ - -20: subcc %o0, 6, %g6 /* IEU1 Group */ - srlx %o3, 40, %o4 /* IEU0 */ - stb %o4, [%o0 - 6] /* Store */ -29: srlx %o3, 48, %o4 /* IEU0 Group */ - - stb %o4, [%o0 - 7] /* Store */ -30: srlx %o3, 56, %o4 /* IEU0 Group */ - stb %o4, [%o0 - 8] /* Store */ - retl /* CTI+IEU1 Group */ - - mov %g6, %o0 /* IEU0 */ -END(__stpcpy) - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/sparc/sparc64/stpncpy.S b/sysdeps/sparc/sparc64/stpncpy.S deleted file mode 100644 index 537d29257f..0000000000 --- a/sysdeps/sparc/sparc64/stpncpy.S +++ /dev/null @@ -1,424 +0,0 @@ -/* stpncpy(DST, SRC, COUNT) - Copy no more than N characters of - SRC to DEST, returning the address of the terminating '\0' in - DEST, if any, or else DEST + N. - For SPARC v9. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek and - Jan Vondrak . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC -#define XCC xcc -#define USE_BPR - .register %g2, #scratch - .register %g3, #scratch - .register %g6, #scratch -#endif - - /* Normally, this uses - ((xword - 0x0101010101010101) & 0x8080808080808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 32 -ENTRY(__stpncpy) - sethi %hi(0x01010101), %g1 /* IEU0 Group */ -#ifdef USE_BPR - brz,pn %o2, 19f /* CTI+IEU1 */ -#else - tst %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ -#endif - or %g1, %lo(0x01010101), %g1 /* IEU1 */ - andcc %o0, 7, %g0 /* IEU1 Group */ - - sllx %g1, 32, %g2 /* IEU0 */ - bne,pn %icc, 26f /* CTI */ - or %g1, %g2, %g1 /* IEU0 Group */ - andcc %o1, 7, %g3 /* IEU1 */ - - bne,pn %icc, 28f /* CTI */ - sllx %g1, 7, %g2 /* IEU0 Group */ - ldx [%o1], %o3 /* Load */ -1: add %o1, 8, %o1 /* IEU1 */ - -2: subcc %o2, 8, %o2 /* IEU1 Group */ - bl,pn %XCC, 18f /* CTI */ - sub %o3, %g1, %o4 /* IEU0 */ - add %o0, 8, %o0 /* IEU0 Group */ - -#ifdef EIGHTBIT_NOT_MORE - andn %o4, %o3, %o4 /* IEU1 */ -#endif - mov %o3, %g3 /* IEU1 */ - ldxa [%o1] ASI_PNF, %o3 /* Load */ - add %o1, 8, %o1 /* IEU0 Group */ - andcc %o4, %g2, %g0 /* IEU1 */ - - be,a,pt %xcc, 2b /* CTI */ - stx %g3, [%o0-8] /* Store Group */ - srlx %g3, 56, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 16f /* CTI */ - srlx %g3, 48, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 15f /* CTI */ - - srlx %g3, 40, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 14f /* CTI */ - srlx %g3, 32, %g4 /* IEU0 */ - - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 13f /* CTI */ - srlx %g3, 24, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 12f /* CTI */ - srlx %g3, 16, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 11f /* CTI */ - - srlx %g3, 8, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 10f /* CTI */ - sub %o0, 1, %g6 /* IEU0 */ - - andcc %g3, 0xff, %g0 /* IEU1 Group */ - bne,pt %icc, 2b /* CTI */ -3: stx %g3, [%o0-8] /* Store */ - andncc %o2, 31, %g3 /* IEU1 Group */ - -4: be,pn %XCC, 41f /* CTI */ - and %o2, 31, %o2 /* IEU1 Group */ -40: stx %g0, [%o0] /* Store */ - stx %g0, [%o0 + 8] /* Store Group */ - - subcc %g3, 32, %g3 /* IEU1 */ - stx %g0, [%o0 + 16] /* Store Group */ - stx %g0, [%o0 + 24] /* Store Group */ - bne,pt %XCC, 40b /* CTI */ - - add %o0, 32, %o0 /* IEU0 */ -41: subcc %o2, 8, %o2 /* IEU1 Group */ - bl,a,pn %XCC, 6f /* CTI */ - andcc %o2, 4, %g0 /* IEU1 Group */ - -5: stx %g0, [%o0] /* Store */ - subcc %o2, 8, %o2 /* IEU1 Group */ - bge,pt %XCC, 5b /* CTI */ - add %o0, 8, %o0 /* IEU0 */ - - andcc %o2, 4, %g0 /* IEU1 Group */ -6: be,a,pn %icc, 7f /* CTI */ - andcc %o2, 2, %g0 /* IEU1 Group */ - stw %g0, [%o0] /* Store */ - - add %o0, 4, %o0 /* IEU0 */ - andcc %o2, 2, %g0 /* IEU1 Group */ -7: be,a,pn %icc, 8f /* CTI */ - andcc %o2, 1, %g0 /* IEU1 Group */ - - sth %g0, [%o0] /* Store */ - add %o0, 2, %o0 /* IEU0 */ - andcc %o2, 1, %g0 /* IEU1 Group */ -8: bne,a,pn %icc, 9f /* CTI */ - - stb %g0, [%o0] /* Store */ -9: retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ -10: subcc %o0, 2, %g6 /* IEU1 Group */ - - ba,pt %xcc, 3b /* CTI */ - sllx %g5, 8, %g3 /* IEU0 */ -11: subcc %o0, 3, %g6 /* IEU1 Group */ - ba,pt %xcc, 3b /* CTI */ - - sllx %g4, 16, %g3 /* IEU0 */ -12: subcc %o0, 4, %g6 /* IEU1 Group */ - ba,pt %xcc, 3b /* CTI */ - sllx %g5, 24, %g3 /* IEU0 */ - -13: subcc %o0, 5, %g6 /* IEU1 Group */ - ba,pt %xcc, 3b /* CTI */ - sllx %g4, 32, %g3 /* IEU0 */ -14: subcc %o0, 6, %g6 /* IEU1 Group */ - - ba,pt %xcc, 3b /* CTI */ - sllx %g5, 40, %g3 /* IEU0 */ -15: subcc %o0, 7, %g6 /* IEU1 Group */ - ba,pt %xcc, 3b /* CTI */ - - sllx %g4, 48, %g3 /* IEU0 */ -16: subcc %o0, 8, %g6 /* IEU1 Group */ - ba,pt %xcc, 3b /* CTI */ - clr %g3 /* IEU0 */ - - .align 16 -17: or %o3, %o4, %o3 /* IEU0 Group */ - sub %o3, %g1, %o4 /* IEU1 */ -18: addcc %o2, 8, %o2 /* IEU1 Group */ - be,pn %XCC, 19f /* CTI */ - - andcc %o4, %g2, %g0 /* IEU1 Group */ - be,pt %xcc, 21f /* CTI */ - srlx %o3, 56, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - - be,pn %XCC, 19f /* CTI */ - srlx %o3, 48, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - - srlx %o3, 40, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - srlx %o3, 32, %g5 /* IEU0 Group */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - srlx %o3, 24, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - - be,pn %XCC, 19f /* CTI */ - srlx %o3, 16, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - - srlx %o3, 8, %o3 /* IEU0 Group */ - stb %o3, [%o0] /* Store */ -59: add %o0, 1, %o2 /* IEU1 */ - andcc %o3, 0xff, %g0 /* IEU1 Group */ - - retl /* CTI+IEU1 Group */ - movne %icc, %o2, %o0 /* Single Group */ -19: retl /* CTI+IEU1 Group */ - nop /* IEU0 */ - -20: mov %o0, %g6 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 51f /* CTI */ - add %o0, 1, %o0 /* IEU0 Group */ - -50: stb %g0, [%o0] /* Store Group */ - subcc %o2, 1, %o2 /* IEU1 Group */ - bne,pt %XCC, 50b /* CTI */ - add %o0, 1, %o0 /* IEU0 */ - -51: retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - - .align 16 -21: andcc %o2, 4, %g0 /* IEU1 Group */ - be,pn %icc, 22f /* CTI */ - srlx %o3, 32, %g5 /* IEU0 */ - stw %g5, [%o0] /* Store Group */ - - add %o0, 4, %o0 /* IEU0 */ - mov %o3, %g5 /* IEU1 */ -22: andcc %o2, 2, %g0 /* IEU1 Group */ - be,pn %icc, 23f /* CTI */ - - srlx %g5, 16, %g4 /* IEU0 */ - sth %g4, [%o0] /* Store Group */ - add %o0, 2, %o0 /* IEU0 */ - mov %g5, %g4 /* IEU1 */ - -23: srlx %g4, 8, %g4 /* IEU0 Group */ - andcc %o2, 1, %g0 /* IEU1 */ - bne,a,pn %icc, 24f /* CTI */ - stb %g4, [%o0] /* Store Group */ - - retl /* CTI+IEU1 Group */ - nop /* IEU0 */ -24: retl /* CTI+IEU1 Group */ - add %o0, 1, %o0 /* IEU0 */ - - .align 16 -55: sub %o0, 1, %g6 /* IEU0 Group */ -25: andcc %o0, 7, %g0 /* IEU1 */ - be,a,pn %icc, 4b /* CTI */ - andncc %o2, 31, %g3 /* IEU1 Group */ - - stb %g0, [%o0] /* Store Group */ - subcc %o2, 1, %o2 /* IEU1 */ - bne,pt %XCC, 25b /* CTI */ - add %o0, 1, %o0 /* IEU0 Group */ - - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - - .align 16 -26: ldub [%o1], %o3 /* Load */ - sllx %g1, 7, %g2 /* IEU0 Group */ - stb %o3, [%o0] /* Store */ -27: subcc %o2, 1, %o2 /* IEU1 */ - - be,pn %XCC, 59b /* CTI */ - add %o1, 1, %o1 /* IEU0 Group */ - add %o0, 1, %o0 /* IEU1 */ - andcc %o3, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 55b /* CTI */ - lduba [%o1] ASI_PNF, %o3 /* Load */ - andcc %o0, 7, %g0 /* IEU1 Group */ - bne,a,pt %icc, 27b /* CTI */ - - stb %o3, [%o0] /* Store */ - andcc %o1, 7, %g3 /* IEU1 Group */ - be,a,pt %icc, 1b /* CTI */ - ldx [%o1], %o3 /* Load */ - -28: orcc %g0, 64, %g4 /* IEU1 Group */ - sllx %g3, 3, %g5 /* IEU0 */ - sub %g4, %g5, %g4 /* IEU0 Group */ - sub %o1, %g3, %o1 /* IEU1 */ - /* %g1 = 0101010101010101 - %g2 = 8080808080808080 - %g3 = source alignment - %g5 = number of bits to shift left - %g4 = number of bits to shift right */ - - ldxa [%o1] ASI_PNF, %o5 /* Load Group */ - addcc %o1, 8, %o1 /* IEU1 */ -29: sllx %o5, %g5, %o3 /* IEU0 Group */ - ldxa [%o1] ASI_PNF, %o5 /* Load */ - - subcc %o2, 8, %o2 /* IEU1 */ - bl,pn %XCC, 17b /* CTI */ - srlx %o5, %g4, %o4 /* IEU0 Group */ - add %o1, 8, %o1 /* IEU1 */ - - or %o3, %o4, %o3 /* IEU0 Group */ - add %o0, 8, %o0 /* IEU1 */ - sub %o3, %g1, %o4 /* IEU0 Group */ -#ifdef EIGHTBIT_NOT_RARE - andn %o4, %o3, %o4 /* IEU0 Group */ -#endif - andcc %o4, %g2, %g0 /* IEU1 Group */ - - be,a,pt %xcc, 29b /* CTI */ - stx %o3, [%o0-8] /* Store */ - srlx %o3, 56, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 36f /* CTI */ - srlx %o3, 48, %g6 /* IEU0 */ - andcc %g6, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 35f /* CTI */ - - srlx %o3, 40, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 34f /* CTI */ - srlx %o3, 32, %g6 /* IEU0 */ - - andcc %g6, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 33f /* CTI */ - srlx %o3, 24, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 32f /* CTI */ - srlx %o3, 16, %g6 /* IEU0 */ - andcc %g6, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 31f /* CTI */ - - srlx %o3, 8, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 30f /* CTI */ - andcc %o3, 0xff, %g0 /* IEU1 Group */ - - bne,pn %icc, 29b /* CTI */ - stx %o3, [%o0-8] /* Store */ - sub %o0, 1, %g6 /* IEU0 Group */ - ba,pt %xcc, 4b /* CTI */ - - andncc %o2, 31, %g3 /* IEU1 */ -30: subcc %o0, 2, %g6 /* IEU0 */ - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 8, %g3 /* IEU0 Group */ - -31: sllx %g6, 16, %g3 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - sub %o0, 3, %g6 /* IEU1 */ -32: subcc %o0, 4, %g6 /* IEU1 Group */ - - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 24, %g3 /* IEU0 */ -33: sllx %g6, 32, %g3 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - - sub %o0, 5, %g6 /* IEU1 */ -34: subcc %o0, 6, %g6 /* IEU1 Group */ - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 40, %g3 /* IEU0 */ - -35: sllx %g6, 48, %g3 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - sub %o0, 7, %g6 /* IEU1 */ -36: subcc %o0, 8, %g6 /* IEU1 Group */ - - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 56, %g3 /* IEU0 */ -END(__stpncpy) - -libc_hidden_def (__stpncpy) -weak_alias (__stpncpy, stpncpy) diff --git a/sysdeps/sparc/sparc64/strcat.S b/sysdeps/sparc/sparc64/strcat.S deleted file mode 100644 index 151a4e8853..0000000000 --- a/sysdeps/sparc/sparc64/strcat.S +++ /dev/null @@ -1,339 +0,0 @@ -/* strcat (dest, src) -- Append SRC on the end of DEST. - For SPARC v9. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek and - Jan Vondrak . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC -#define XCC xcc -#define USE_BPR - .register %g2, #scratch - .register %g3, #scratch - .register %g6, #scratch -#endif - - /* Normally, this uses - ((xword - 0x0101010101010101) & 0x8080808080808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 32 -ENTRY(strcat) - sethi %hi(0x01010101), %g1 /* IEU0 Group */ - ldub [%o0], %o3 /* Load */ - or %g1, %lo(0x01010101), %g1 /* IEU0 Group */ - mov %o0, %g6 /* IEU1 */ - - sllx %g1, 32, %g2 /* IEU0 Group */ - andcc %o0, 7, %g0 /* IEU1 */ - or %g1, %g2, %g1 /* IEU0 Group */ - bne,pn %icc, 32f /* CTI */ - - sllx %g1, 7, %g2 /* IEU0 Group */ - brz,pn %o3, 30f /* CTI+IEU1 */ - ldx [%o0], %o3 /* Load */ -48: add %o0, 8, %o0 /* IEU0 Group */ - -49: sub %o3, %g1, %o2 /* IEU0 Group */ -#ifdef EIGHTBIT_NOT_RARE - andn %o2, %o3, %g5 /* IEU0 Group */ - ldxa [%o0] ASI_PNF, %o3 /* Load */ - andcc %g5, %g2, %g0 /* IEU1 Group */ -#else - ldxa [%o0] ASI_PNF, %o3 /* Load */ - andcc %o2, %g2, %g0 /* IEU1 Group */ -#endif - be,pt %xcc, 49b /* CTI */ - - add %o0, 8, %o0 /* IEU0 */ - addcc %o2, %g1, %g3 /* IEU1 Group */ - srlx %o2, 32, %o2 /* IEU0 */ -50: andcc %o2, %g2, %g0 /* IEU1 Group */ - - be,pn %xcc, 51f /* CTI */ - srlx %g3, 56, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 29f /* CTI */ - - srlx %g3, 48, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 28f /* CTI */ - srlx %g3, 40, %o2 /* IEU0 */ - - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 27f /* CTI */ - srlx %g3, 32, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 26f /* CTI */ -51: srlx %g3, 24, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 25f /* CTI */ - - srlx %g3, 16, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 24f /* CTI */ - srlx %g3, 8, %o2 /* IEU0 */ - - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 23f /* CTI */ - sub %o3, %g1, %o2 /* IEU0 */ - andcc %g3, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 52f /* CTI */ - ldxa [%o0] ASI_PNF, %o3 /* Load */ - andcc %o2, %g2, %g0 /* IEU1 Group */ - be,pt %xcc, 49b /* CTI */ - - add %o0, 8, %o0 /* IEU0 */ - addcc %o2, %g1, %g3 /* IEU1 Group */ - ba,pt %xcc, 50b /* CTI */ - srlx %o2, 32, %o2 /* IEU0 */ - - .align 16 -52: ba,pt %xcc, 12f /* CTI Group */ - add %o0, -9, %o0 /* IEU0 */ -23: ba,pt %xcc, 12f /* CTI Group */ - add %o0, -10, %o0 /* IEU0 */ - -24: ba,pt %xcc, 12f /* CTI Group */ - add %o0, -11, %o0 /* IEU0 */ -25: ba,pt %xcc, 12f /* CTI Group */ - add %o0, -12, %o0 /* IEU0 */ - -26: ba,pt %xcc, 12f /* CTI Group */ - add %o0, -13, %o0 /* IEU0 */ -27: ba,pt %xcc, 12f /* CTI Group */ - add %o0, -14, %o0 /* IEU0 */ - -28: ba,pt %xcc, 12f /* CTI Group */ - add %o0, -15, %o0 /* IEU0 */ -29: add %o0, -16, %o0 /* IEU0 Group */ -30: andcc %o1, 7, %g3 /* IEU1 */ - -31: bne,pn %icc, 14f /* CTI */ - orcc %g0, 64, %g4 /* IEU1 Group */ -1: ldx [%o1], %o3 /* Load */ - add %o1, 8, %o1 /* IEU1 */ - -2: mov %o3, %g3 /* IEU0 Group */ -3: sub %o3, %g1, %o2 /* IEU1 */ - ldxa [%o1] ASI_PNF, %o3 /* Load */ -#ifdef EIGHTBIT_NOT_RARE - andn %o2, %g3, %o2 /* IEU0 Group */ -#endif - add %o0, 8, %o0 /* IEU0 Group */ - - andcc %o2, %g2, %g0 /* IEU1 */ - add %o1, 8, %o1 /* IEU0 Group */ - be,a,pt %xcc, 2b /* CTI */ - stx %g3, [%o0 - 8] /* Store */ - - srlx %g3, 56, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 11f /* CTI */ - srlx %g3, 48, %g4 /* IEU0 */ - - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 10f /* CTI */ - srlx %g3, 40, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 9f /* CTI */ - srlx %g3, 32, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 8f /* CTI */ - - srlx %g3, 24, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 7f /* CTI */ - srlx %g3, 16, %g4 /* IEU0 */ - - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 6f /* CTI */ - srlx %g3, 8, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 5f /* CTI */ - sub %o3, %g1, %o2 /* IEU0 */ - stx %g3, [%o0 - 8] /* Store Group */ - andcc %g3, 0xff, %g0 /* IEU1 */ - - bne,pt %icc, 3b /* CTI */ - mov %o3, %g3 /* IEU0 Group */ -4: retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - - .align 16 -5: stb %g5, [%o0 - 2] /* Store Group */ - srlx %g3, 16, %g4 /* IEU0 */ -6: sth %g4, [%o0 - 4] /* Store Group */ - srlx %g3, 32, %g4 /* IEU0 */ - - stw %g4, [%o0 - 8] /* Store Group */ - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ -7: stb %g5, [%o0 - 4] /* Store Group */ - - srlx %g3, 32, %g4 /* IEU0 */ -8: stw %g4, [%o0 - 8] /* Store Group */ - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - -9: stb %g5, [%o0 - 6] /* Store Group */ - srlx %g3, 48, %g4 /* IEU0 */ -10: sth %g4, [%o0 - 8] /* Store Group */ - retl /* CTI+IEU1 Group */ - - mov %g6, %o0 /* IEU0 */ -11: stb %g5, [%o0 - 8] /* Store Group */ - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - - .align 16 -32: andcc %o0, 7, %g0 /* IEU1 Group */ - be,a,pn %icc, 48b /* CTI */ - ldx [%o0], %o3 /* Load */ - add %o0, 1, %o0 /* IEU0 Group */ - - brnz,a,pt %o3, 32b /* CTI+IEU1 */ - lduba [%o0] ASI_PNF, %o3 /* Load */ - add %o0, -1, %o0 /* IEU0 Group */ - andcc %o0, 7, %g0 /* IEU1 Group */ - - be,a,pn %icc, 31b /* CTI */ - andcc %o1, 7, %g3 /* IEU1 Group */ -12: ldub [%o1], %o3 /* Load */ - stb %o3, [%o0] /* Store Group */ - -13: add %o0, 1, %o0 /* IEU0 */ - add %o1, 1, %o1 /* IEU1 */ - andcc %o3, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - - lduba [%o1] ASI_PNF, %o3 /* Load */ - andcc %o0, 7, %g0 /* IEU1 Group */ - bne,a,pt %icc, 13b /* CTI */ - stb %o3, [%o0] /* Store */ - - andcc %o1, 7, %g3 /* IEU1 Group */ - be,a,pt %icc, 1b /* CTI */ - ldx [%o1], %o3 /* Load */ - orcc %g0, 64, %g4 /* IEU1 Group */ - -14: sllx %g3, 3, %g5 /* IEU0 */ - sub %o1, %g3, %o1 /* IEU0 Group */ - sub %g4, %g5, %g4 /* IEU1 */ - /* %g1 = 0101010101010101 * - * %g2 = 8080808080808080 * - * %g3 = source alignment * - * %g5 = number of bits to shift left * - * %g4 = number of bits to shift right */ - ldxa [%o1] ASI_PNF, %o5 /* Load Group */ - - addcc %o1, 8, %o1 /* IEU1 */ -15: sllx %o5, %g5, %o3 /* IEU0 Group */ - ldxa [%o1] ASI_PNF, %o5 /* Load */ - srlx %o5, %g4, %o4 /* IEU0 Group */ - - add %o0, 8, %o0 /* IEU1 */ - or %o3, %o4, %o3 /* IEU0 Group */ - add %o1, 8, %o1 /* IEU1 */ - sub %o3, %g1, %o4 /* IEU0 Group */ - -#ifdef EIGHTBIT_NOT_RARE - andn %o4, %o3, %o4 /* IEU0 Group */ -#endif - andcc %o4, %g2, %g0 /* IEU1 Group */ - be,a,pt %xcc, 15b /* CTI */ - stx %o3, [%o0 - 8] /* Store */ - srlx %o3, 56, %o4 /* IEU0 Group */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 22f /* CTI */ - srlx %o3, 48, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 21f /* CTI */ - srlx %o3, 40, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - - srlx %o3, 32, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 19f /* CTI */ - srlx %o3, 24, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 18f /* CTI */ - srlx %o3, 16, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 17f /* CTI */ - srlx %o3, 8, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 16f /* CTI */ - - andcc %o3, 0xff, %g0 /* IEU1 Group */ - bne,pn %icc, 15b /* CTI */ - stx %o3, [%o0 - 8] /* Store */ - retl /* CTI+IEU1 Group */ - - mov %g6, %o0 /* IEU0 */ - - .align 16 -16: srlx %o3, 8, %o4 /* IEU0 Group */ - stb %o4, [%o0 - 2] /* Store */ -17: srlx %o3, 16, %o4 /* IEU0 Group */ - stb %o4, [%o0 - 3] /* Store */ - -18: srlx %o3, 24, %o4 /* IEU0 Group */ - stb %o4, [%o0 - 4] /* Store */ -19: srlx %o3, 32, %o4 /* IEU0 Group */ - stw %o4, [%o0 - 8] /* Store */ - - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - nop - nop - -20: srlx %o3, 40, %o4 /* IEU0 Group */ - stb %o4, [%o0 - 6] /* Store */ -21: srlx %o3, 48, %o4 /* IEU0 Group */ - stb %o4, [%o0 - 7] /* Store */ - -22: srlx %o3, 56, %o4 /* IEU0 Group */ - stb %o4, [%o0 - 8] /* Store */ - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ -END(strcat) -libc_hidden_builtin_def (strcat) diff --git a/sysdeps/sparc/sparc64/strchr.S b/sysdeps/sparc/sparc64/strchr.S deleted file mode 100644 index 31b9e58d76..0000000000 --- a/sysdeps/sparc/sparc64/strchr.S +++ /dev/null @@ -1,482 +0,0 @@ -/* strchr (str, ch) -- Return pointer to first occurrence of CH in STR. - For SPARC v9. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jan Vondrak and - Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC -#define XCC xcc -#define USE_BPR - .register %g2, #scratch - .register %g3, #scratch - .register %g6, #scratch -#endif - - /* Normally, this uses - ((xword - 0x0101010101010101) & 0x8080808080808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 32 -ENTRY(strchr) - andcc %o1, 0xff, %o1 /* IEU1 Group */ - be,pn %icc, 17f /* CTI */ - sllx %o1, 8, %g3 /* IEU0 Group */ - sethi %hi(0x01010101), %g1 /* IEU1 */ - - or %g3, %o1, %g3 /* IEU0 Group */ - ldub [%o0], %o3 /* Load */ - sllx %g3, 16, %g5 /* IEU0 Group */ - or %g1, %lo(0x01010101), %g1 /* IEU1 */ - - sllx %g1, 32, %g2 /* IEU0 Group */ - brz,pn %o3, 5f /* CTI+IEU1 */ - orcc %g3, %g5, %g3 /* IEU1 Group */ - sllx %g3, 32, %g5 /* IEU0 */ - - cmp %o3, %o1 /* IEU1 Group */ - be,pn %xcc, 14f /* CTI */ - or %g1, %g2, %g1 /* IEU0 */ - andcc %o0, 7, %g0 /* IEU1 Group */ - - bne,a,pn %icc, 15f /* CTI */ - add %o0, 1, %o0 /* IEU0 */ - ldx [%o0], %o3 /* Load Group */ -1: sllx %g1, 7, %g2 /* IEU0 */ - - or %g3, %g5, %g3 /* IEU1 */ - add %o0, 8, %o0 /* IEU0 Group */ - xor %o3, %g3, %o4 /* IEU1 */ - /* %g1 = 0101010101010101 * - * %g2 = 8080088080808080 * - * %g3 = c c c c c c c c * - * %o3 = value * - * %o4 = value XOR c */ -2: sub %o3, %g1, %o2 /* IEU0 Group */ - - sub %o4, %g1, %o5 /* IEU1 */ -#ifdef EIGHTBIT_NOT_RARE - andn %o2, %o3, %g6 /* IEU0 Group */ - andn %o5, %o4, %o5 /* IEU1 */ - ldxa [%o0] ASI_PNF, %o3 /* Load */ - or %o5, %g6, %o5 /* IEU0 Group */ -#else - ldxa [%o0] ASI_PNF, %o3 /* Load */ - or %o5, %o2, %o5 /* IEU0 Group */ -#endif - add %o0, 8, %o0 /* IEU1 */ - - andcc %o5, %g2, %g0 /* IEU1 Group */ - be,a,pt %xcc, 2b /* CTI */ - xor %o3, %g3, %o4 /* IEU0 */ - srlx %o5, 32, %g5 /* IEU0 Group */ - - add %o2, %g1, %o2 /* IEU1 */ -3: andcc %g5, %g2, %g0 /* IEU1 Group */ - be,pn %xcc, 4f /* CTI */ - srlx %o2, 56, %g5 /* IEU0 */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 5f /* CTI */ - srlx %o4, 56, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 6f /* CTI */ - srlx %o2, 48, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 5f /* CTI */ - - srlx %o4, 48, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 7f /* CTI */ - srlx %o2, 40, %g5 /* IEU0 */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 5f /* CTI */ - srlx %o4, 40, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 8f /* CTI */ - srlx %o2, 32, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 5f /* CTI */ - - srlx %o4, 32, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 9f /* CTI */ -4: srlx %o2, 24, %g5 /* IEU0 */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 5f /* CTI */ - srlx %o4, 24, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 10f /* CTI */ - srlx %o2, 16, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 5f /* CTI */ - - srlx %o4, 16, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 11f /* CTI */ - srlx %o2, 8, %g5 /* IEU0 */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 5f /* CTI */ - srlx %o4, 8, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 12f /* CTI */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 5f /* CTI */ - sub %o3, %g1, %o2 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 13f /* CTI */ - xor %o3, %g3, %o4 /* IEU0 */ - ldxa [%o0] ASI_PNF, %o3 /* Load Group */ - - sub %o4, %g1, %o5 /* IEU0 */ - or %o5, %o2, %o5 /* IEU1 */ - add %o0, 8, %o0 /* IEU0 Group */ - andcc %o5, %g2, %g0 /* IEU1 */ - - be,a,pt %xcc, 2b /* CTI */ - xor %o3, %g3, %o4 /* IEU0 Group */ - srlx %o5, 32, %g5 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - - add %o2, %g1, %o2 /* IEU1 */ - - .align 16 -5: retl /* CTI+IEU1 Group */ - clr %o0 /* IEU0 */ -6: retl /* CTI+IEU1 Group */ - add %o0, -16, %o0 /* IEU0 */ - -7: retl /* CTI+IEU1 Group */ - add %o0, -15, %o0 /* IEU0 */ -8: retl /* CTI+IEU1 Group */ - add %o0, -14, %o0 /* IEU0 */ - -9: retl /* CTI+IEU1 Group */ - add %o0, -13, %o0 /* IEU0 */ -10: retl /* CTI+IEU1 Group */ - add %o0, -12, %o0 /* IEU0 */ - -11: retl /* CTI+IEU1 Group */ - add %o0, -11, %o0 /* IEU0 */ -12: retl /* CTI+IEU1 Group */ - add %o0, -10, %o0 /* IEU0 */ - -13: retl /* CTI+IEU1 Group */ - add %o0, -9, %o0 /* IEU0 */ -14: retl /* CTI+IEU1 Group */ - nop /* IEU0 */ - - .align 16 -15: ldub [%o0], %o3 /* Load Group */ -16: andcc %o0, 7, %g0 /* IEU1 */ - be,a,pn %icc, 1b /* CTI */ - ldx [%o0], %o3 /* Load Group */ - - andcc %o3, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 5b /* CTI */ - add %o0, 1, %o0 /* IEU0 */ - cmp %o3, %o1 /* IEU1 Group */ - - bne,a,pn %icc, 16b /* CTI */ - ldub [%o0], %o3 /* Load */ - retl /* CTI+IEU1 Group */ - add %o0, -1, %o0 /* IEU0 */ - - /* strchr (str, 0) */ - .align 32 - nop - .align 16 -17: sethi %hi(0x01010101), %g1 /* IEU0 Group */ - ldub [%o0], %o3 /* Load */ - or %g1, %lo(0x01010101), %g1 /* IEU0 Group */ - sllx %g1, 32, %g2 /* IEU0 Group */ - - andcc %o0, 7, %g0 /* IEU1 */ - or %g1, %g2, %g1 /* IEU0 Group */ - bne,pn %icc, 32f /* CTI */ - sllx %g1, 7, %g2 /* IEU0 Group */ - - brz,pn %o3, 30f /* CTI+IEU1 */ - ldx [%o0], %o3 /* Load */ -18: add %o0, 8, %o0 /* IEU0 Group */ -19: sub %o3, %g1, %o2 /* IEU0 Group */ - -#ifdef EIGHTBIT_NOT_RARE - andn %o2, %o3, %g6 /* IEU0 Group */ - ldxa [%o0] ASI_PNF, %o3 /* Load */ - andcc %g6, %g2, %g0 /* IEU1 Group */ -#else - ldxa [%o0] ASI_PNF, %o3 /* Load */ - andcc %o2, %g2, %g0 /* IEU1 Group */ -#endif - be,pt %xcc, 19b /* CTI */ - add %o0, 8, %o0 /* IEU0 */ - - addcc %o2, %g1, %g3 /* IEU1 Group */ - srlx %o2, 32, %o2 /* IEU0 */ -20: andcc %o2, %g2, %g0 /* IEU1 Group */ - be,pn %xcc, 21f /* CTI */ - - srlx %g3, 56, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 29f /* CTI */ - srlx %g3, 48, %o2 /* IEU0 */ - - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 28f /* CTI */ - srlx %g3, 40, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 27f /* CTI */ - srlx %g3, 32, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 26f /* CTI */ - -21: srlx %g3, 24, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 25f /* CTI */ - srlx %g3, 16, %o2 /* IEU0 */ - - andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 24f /* CTI */ - srlx %g3, 8, %o2 /* IEU0 */ - andcc %o2, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 23f /* CTI */ - sub %o3, %g1, %o2 /* IEU0 */ - andcc %g3, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 22f /* CTI */ - - ldxa [%o0] ASI_PNF, %o3 /* Load */ - andcc %o2, %g2, %g0 /* IEU1 Group */ - be,pt %xcc, 19b /* CTI */ - add %o0, 8, %o0 /* IEU0 */ - - addcc %o2, %g1, %g3 /* IEU1 Group */ - ba,pt %xcc, 20b /* CTI */ - srlx %o2, 32, %o2 /* IEU0 */ - - .align 16 -22: retl /* CTI+IEU1 Group */ - add %o0, -9, %o0 /* IEU0 */ -23: retl /* CTI+IEU1 Group */ - add %o0, -10, %o0 /* IEU0 */ - -24: retl /* CTI+IEU1 Group */ - add %o0, -11, %o0 /* IEU0 */ -25: retl /* CTI+IEU1 Group */ - add %o0, -12, %o0 /* IEU0 */ - -26: retl /* CTI+IEU1 Group */ - add %o0, -13, %o0 /* IEU0 */ -27: retl /* CTI+IEU1 Group */ - add %o0, -14, %o0 /* IEU0 */ - -28: retl /* CTI+IEU1 Group */ - add %o0, -15, %o0 /* IEU0 */ -29: retl /* CTI+IEU1 Group */ - add %o0, -16, %o0 /* IEU0 */ - -30: retl /* CTI+IEU1 Group */ - nop /* IEU0 */ - - .align 16 -32: andcc %o0, 7, %g0 /* IEU1 Group */ - be,a,pn %icc, 18b /* CTI */ - ldx [%o0], %o3 /* Load */ - add %o0, 1, %o0 /* IEU0 Group */ - - brnz,a,pt %o3, 32b /* CTI+IEU1 */ - lduba [%o0] ASI_PNF, %o3 /* Load */ - retl /* CTI+IEU1 Group */ - add %o0, -1, %o0 /* IEU0 */ -END(strchr) - - .align 32 -ENTRY(strrchr) - andcc %o1, 0xff, %o1 /* IEU1 Group */ - be,pn %icc, 17b /* CTI */ - clr %g4 /* IEU0 */ - andcc %o0, 7, %g0 /* IEU1 Group */ - - bne,pn %icc, 13f /* CTI */ - sllx %o1, 8, %g3 /* IEU0 */ - ldx [%o0], %o3 /* Load Group */ -1: sethi %hi(0x01010101), %g1 /* IEU0 */ - - or %g3, %o1, %g3 /* IEU1 */ - sllx %g3, 16, %g5 /* IEU0 Group */ - or %g1, %lo(0x01010101), %g1 /* IEU1 */ - sllx %g1, 32, %g2 /* IEU0 Group */ - - or %g3, %g5, %g3 /* IEU1 */ - sllx %g3, 32, %g5 /* IEU0 Group */ - or %g1, %g2, %g1 /* IEU1 */ - sllx %g1, 7, %g2 /* IEU0 Group */ - - or %g3, %g5, %g3 /* IEU1 */ - add %o0, 8, %o0 /* IEU0 Group */ - xor %o3, %g3, %o4 /* IEU1 */ - /* %g1 = 0101010101010101 * - * %g2 = 8080088080808080 * - * %g3 = c c c c c c c c * - * %o3 = value * - * %o4 = value XOR c */ -2: sub %o3, %g1, %o2 /* IEU0 Group */ - -3: sub %o4, %g1, %o5 /* IEU1 */ -#ifdef EIGHTBIT_NOT_RARE - andn %o2, %o3, %g6 /* IEU0 Group */ - andn %o5, %o4, %o5 /* IEU1 */ - ldxa [%o0] ASI_PNF, %o3 /* Load */ - - or %o5, %g6, %o5 /* IEU0 Group */ -#else - ldxa [%o0] ASI_PNF, %o3 /* Load */ - - or %o5, %o2, %o5 /* IEU0 Group */ -#endif - add %o0, 8, %o0 /* IEU1 */ - andcc %o5, %g2, %g0 /* IEU1 Group */ - be,a,pt %xcc, 2b /* CTI */ - - xor %o3, %g3, %o4 /* IEU0 */ - srlx %o5, 32, %g5 /* IEU0 Group */ - add %o2, %g1, %o2 /* IEU1 */ - andcc %g5, %g2, %g0 /* IEU1 Group */ - - be,pn %xcc, 7f /* CTI */ - srlx %o2, 56, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 12f /* CTI */ - - srlx %o4, 56, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - srlx %o2, 48, %g5 /* IEU0 */ - be,a,pn %icc, 4f /* CTI */ - - add %o0, -16, %g4 /* IEU0 Group */ -4: andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 12f /* CTI */ - srlx %o4, 48, %g5 /* IEU0 */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - srlx %o2, 40, %g5 /* IEU0 */ - be,a,pn %icc, 5f /* CTI */ - add %o0, -15, %g4 /* IEU0 Group */ - -5: andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 12f /* CTI */ - srlx %o4, 40, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - srlx %o2, 32, %g5 /* IEU0 */ - be,a,pn %icc, 6f /* CTI */ - add %o0, -14, %g4 /* IEU0 Group */ -6: andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 12f /* CTI */ - srlx %o4, 32, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,a,pn %icc, 7f /* CTI */ - - add %o0, -13, %g4 /* IEU0 */ -7: srlx %o2, 24, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 12f /* CTI */ - - srlx %o4, 24, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - srlx %o2, 16, %g5 /* IEU0 */ - be,a,pn %icc, 8f /* CTI */ - - add %o0, -12, %g4 /* IEU0 Group */ -8: andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 12f /* CTI */ - srlx %o4, 16, %g5 /* IEU0 */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - srlx %o2, 8, %g5 /* IEU0 */ - be,a,pn %icc, 9f /* CTI */ - add %o0, -11, %g4 /* IEU0 Group */ - -9: andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 12f /* CTI */ - srlx %o4, 8, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,a,pn %icc, 10f /* CTI */ - add %o0, -10, %g4 /* IEU0 */ -10: andcc %o2, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 12f /* CTI */ - - sub %o3, %g1, %o2 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,a,pn %icc, 11f /* CTI */ - add %o0, -9, %g4 /* IEU0 */ - -11: ba,pt %xcc, 3b /* CTI Group */ - xor %o3, %g3, %o4 /* IEU0 Group */ -12: retl /* CTI+IEU1 Group */ - mov %g4, %o0 /* IEU0 */ - - .align 16 -13: ldub [%o0], %o3 /* Load Group */ - add %o0, 1, %o0 /* IEU0 */ -14: andcc %o3, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 12b /* CTI */ - - cmp %o3, %o1 /* IEU1 Group */ - ldub [%o0], %o3 /* Load */ - be,a,pn %icc, 15f /* CTI */ - add %o0, -1, %g4 /* IEU0 Group */ - -15: andcc %o0, 7, %g0 /* IEU1 Group */ - bne,a,pt %icc, 14b /* CTI */ - add %o0, 1, %o0 /* IEU0 */ - ba,pt %xcc, 1b /* CTI Group */ - - ldx [%o0], %o3 /* Load */ -END(strrchr) - -weak_alias (strchr, index) -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strchr) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/sparc/sparc64/strcmp.S b/sysdeps/sparc/sparc64/strcmp.S deleted file mode 100644 index d4b0a22f18..0000000000 --- a/sysdeps/sparc/sparc64/strcmp.S +++ /dev/null @@ -1,232 +0,0 @@ -/* Compare two strings for differences. - For SPARC v9. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef XCC - .register %g2, #scratch - .register %g3, #scratch - .register %g6, #scratch -#endif - -#define rSTR1 %o0 -#define rSTR2 %o1 -#define r0101 %o2 /* 0x0101010101010101 */ -#define r8080 %o3 /* 0x8080808080808080 */ -#define rSTRXOR %o4 -#define rWORD1 %o5 -#define rTMP1 %g1 -#define rTMP2 %g2 -#define rWORD2 %g3 -#define rSLL %g4 -#define rSRL %g5 -#define rBARREL %g6 - - /* There are two cases, either the two pointers are aligned - * identically or they are not. If they have the same - * alignment we can use the normal full speed loop. Otherwise - * we have to use the barrel-shifter version. - */ - - .text - .align 32 -ENTRY(strcmp) - or rSTR2, rSTR1, rTMP1 - sethi %hi(0x80808080), r8080 - - andcc rTMP1, 0x7, %g0 - bne,pn %icc, .Lmaybe_barrel_shift - or r8080, %lo(0x80808080), r8080 - ldx [rSTR1], rWORD1 - - sub rSTR2, rSTR1, rSTR2 - sllx r8080, 32, rTMP1 - - ldx [rSTR1 + rSTR2], rWORD2 - or r8080, rTMP1, r8080 - - ba,pt %xcc, .Laligned_loop_entry - srlx r8080, 7, r0101 - - .align 32 -.Laligned_loop_entry: -.Laligned_loop: - add rSTR1, 8, rSTR1 - - sub rWORD1, r0101, rTMP2 - xorcc rWORD1, rWORD2, rSTRXOR - bne,pn %xcc, .Lcommon_endstring - - andn r8080, rWORD1, rTMP1 - - ldxa [rSTR1] ASI_PNF, rWORD1 - andcc rTMP1, rTMP2, %g0 - be,a,pt %xcc, .Laligned_loop - - ldxa [rSTR1 + rSTR2] ASI_PNF, rWORD2 - -.Lcommon_equal: - retl - mov 0, %o0 - - /* All loops terminate here once they find an unequal word. - * If a zero byte appears in the word before the first unequal - * byte, we must report zero. Otherwise we report '1' or '-1' - * depending upon whether the first mis-matching byte is larger - * in the first string or the second, respectively. - * - * First we compute a 64-bit mask value that has "0x01" in - * each byte where a zero exists in rWORD1. rSTRXOR holds the - * value (rWORD1 ^ rWORD2). Therefore, if considered as an - * unsigned quantity, our "0x01" mask value is "greater than" - * rSTRXOR then a zero terminating byte comes first and - * therefore we report '0'. - * - * The formula for this mask is: - * - * mask_tmp1 = ~rWORD1 & 0x8080808080808080; - * mask_tmp2 = ((rWORD1 & 0x7f7f7f7f7f7f7f7f) + - * 0x7f7f7f7f7f7f7f7f); - * - * mask = ((mask_tmp1 & ~mask_tmp2) >> 7); - */ -.Lcommon_endstring: - andn rWORD1, r8080, rTMP2 - or r8080, 1, %o1 - - mov 1, %o0 - sub rTMP2, %o1, rTMP2 - - cmp rWORD1, rWORD2 - andn rTMP1, rTMP2, rTMP1 - - movleu %xcc, -1, %o0 - srlx rTMP1, 7, rTMP1 - - /* In order not to be influenced by bytes after the zero byte, we - * have to retain only the highest bit in the mask for the comparison - * with rSTRXOR to work properly. - */ - mov 0, rTMP2 - andcc rTMP1, 0x0100, %g0 - - movne %xcc, 8, rTMP2 - sllx rTMP1, 63 - 16, %o1 - - movrlz %o1, 16, rTMP2 - sllx rTMP1, 63 - 24, %o1 - - movrlz %o1, 24, rTMP2 - sllx rTMP1, 63 - 32, %o1 - - movrlz %o1, 32, rTMP2 - sllx rTMP1, 63 - 40, %o1 - - movrlz %o1, 40, rTMP2 - sllx rTMP1, 63 - 48, %o1 - - movrlz %o1, 48, rTMP2 - sllx rTMP1, 63 - 56, %o1 - - movrlz %o1, 56, rTMP2 - - srlx rTMP1, rTMP2, rTMP1 - - sllx rTMP1, rTMP2, rTMP1 - - cmp rTMP1, rSTRXOR - retl - movgu %xcc, 0, %o0 - -.Lmaybe_barrel_shift: - sub rSTR2, rSTR1, rSTR2 - sllx r8080, 32, rTMP1 - - or r8080, rTMP1, r8080 - and rSTR1, 0x7, rTMP2 - - srlx r8080, 7, r0101 - andn rSTR1, 0x7, rSTR1 - - ldxa [rSTR1] ASI_PNF, rWORD1 - andcc rSTR2, 0x7, rSLL - sll rTMP2, 3, rSTRXOR - - bne,pn %icc, .Lneed_barrel_shift - mov -1, rTMP1 - ldxa [rSTR1 + rSTR2] ASI_PNF, rBARREL - - srlx rTMP1, rSTRXOR, rTMP2 - - orn rWORD1, rTMP2, rWORD1 - ba,pt %xcc, .Laligned_loop_entry - orn rBARREL, rTMP2, rWORD2 - -.Lneed_barrel_shift: - sllx rSLL, 3, rSLL - andn rSTR2, 0x7, rSTR2 - - ldxa [rSTR1 + rSTR2] ASI_PNF, rBARREL - mov 64, rTMP2 - sub rTMP2, rSLL, rSRL - - srlx rTMP1, rSTRXOR, rTMP1 - add rSTR2, 8, rSTR2 - - orn rWORD1, rTMP1, rWORD1 - sllx rBARREL, rSLL, rWORD2 - ldxa [rSTR1 + rSTR2] ASI_PNF, rBARREL - - add rSTR1, 8, rSTR1 - sub rWORD1, r0101, rTMP2 - - srlx rBARREL, rSRL, rSTRXOR - - or rWORD2, rSTRXOR, rWORD2 - - orn rWORD2, rTMP1, rWORD2 - ba,pt %xcc, .Lbarrel_shift_loop_entry - andn r8080, rWORD1, rTMP1 - -.Lbarrel_shift_loop: - sllx rBARREL, rSLL, rWORD2 - ldxa [rSTR1 + rSTR2] ASI_PNF, rBARREL - - add rSTR1, 8, rSTR1 - sub rWORD1, r0101, rTMP2 - - srlx rBARREL, rSRL, rSTRXOR - andn r8080, rWORD1, rTMP1 - - or rWORD2, rSTRXOR, rWORD2 - -.Lbarrel_shift_loop_entry: - xorcc rWORD1, rWORD2, rSTRXOR - bne,pn %xcc, .Lcommon_endstring - - andcc rTMP1, rTMP2, %g0 - be,a,pt %xcc, .Lbarrel_shift_loop - ldxa [rSTR1] ASI_PNF, rWORD1 - - retl - mov 0, %o0 -END(strcmp) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/sparc/sparc64/strcpy.S b/sysdeps/sparc/sparc64/strcpy.S deleted file mode 100644 index 8732809f2b..0000000000 --- a/sysdeps/sparc/sparc64/strcpy.S +++ /dev/null @@ -1,244 +0,0 @@ -/* Copy SRC to DEST returning DEST. - For SPARC v9. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jan Vondrak and - Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC - .register %g2, #scratch - .register %g3, #scratch - .register %g6, #scratch -#endif - - /* Normally, this uses - ((xword - 0x0101010101010101) & 0x8080808080808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 32 -ENTRY(strcpy) - sethi %hi(0x01010101), %g1 /* IEU0 Group */ - mov %o0, %g6 /* IEU1 */ - or %g1, %lo(0x01010101), %g1 /* IEU0 Group */ - andcc %o0, 7, %g0 /* IEU1 */ - - sllx %g1, 32, %g2 /* IEU0 Group */ - bne,pn %icc, 12f /* CTI */ - andcc %o1, 7, %g3 /* IEU1 */ - or %g1, %g2, %g1 /* IEU0 Group */ - - bne,pn %icc, 14f /* CTI */ - sllx %g1, 7, %g2 /* IEU0 Group */ -1: ldx [%o1], %o3 /* Load */ - add %o1, 8, %o1 /* IEU1 */ - -2: mov %o3, %g3 /* IEU0 Group */ -3: sub %o3, %g1, %o2 /* IEU1 */ - ldxa [%o1] ASI_PNF, %o3 /* Load */ -#ifdef EIGHTBIT_NOT_RARE - andn %o2, %g3, %o2 /* IEU0 Group */ -#endif - add %o0, 8, %o0 /* IEU0 Group */ - - andcc %o2, %g2, %g0 /* IEU1 */ - add %o1, 8, %o1 /* IEU0 Group */ - be,a,pt %xcc, 2b /* CTI */ - stx %g3, [%o0 - 8] /* Store */ - - srlx %g3, 56, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 11f /* CTI */ - srlx %g3, 48, %g4 /* IEU0 */ - - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 10f /* CTI */ - srlx %g3, 40, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 9f /* CTI */ - srlx %g3, 32, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 8f /* CTI */ - - srlx %g3, 24, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 7f /* CTI */ - srlx %g3, 16, %g4 /* IEU0 */ - - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 6f /* CTI */ - srlx %g3, 8, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 5f /* CTI */ - sub %o3, %g1, %o2 /* IEU0 */ - stx %g3, [%o0 - 8] /* Store Group */ - andcc %g3, 0xff, %g0 /* IEU1 */ - - bne,pt %icc, 3b /* CTI */ - mov %o3, %g3 /* IEU0 Group */ -4: retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - - .align 16 -5: stb %g5, [%o0 - 2] /* Store Group */ - srlx %g3, 16, %g4 /* IEU0 */ -6: sth %g4, [%o0 - 4] /* Store Group */ - srlx %g3, 32, %g4 /* IEU0 */ - - stw %g4, [%o0 - 8] /* Store Group */ - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ -7: stb %g5, [%o0 - 4] /* Store Group */ - - srlx %g3, 32, %g4 /* IEU0 */ -8: stw %g4, [%o0 - 8] /* Store Group */ - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - -9: stb %g5, [%o0 - 6] /* Store Group */ - srlx %g3, 48, %g4 /* IEU0 */ -10: sth %g4, [%o0 - 8] /* Store Group */ - retl /* CTI+IEU1 Group */ - - mov %g6, %o0 /* IEU0 */ -11: stb %g5, [%o0 - 8] /* Store Group */ - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - -12: or %g1, %g2, %g1 /* IEU0 Group */ - ldub [%o1], %o3 /* Load */ - sllx %g1, 7, %g2 /* IEU0 Group */ - stb %o3, [%o0] /* Store Group */ - -13: add %o0, 1, %o0 /* IEU0 */ - add %o1, 1, %o1 /* IEU1 */ - andcc %o3, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - - lduba [%o1] ASI_PNF, %o3 /* Load */ - andcc %o0, 7, %g0 /* IEU1 Group */ - bne,a,pt %icc, 13b /* CTI */ - stb %o3, [%o0] /* Store */ - - andcc %o1, 7, %g3 /* IEU1 Group */ - be,a,pt %icc, 1b /* CTI */ - ldx [%o1], %o3 /* Load */ -14: orcc %g0, 64, %g4 /* IEU1 Group */ - - sllx %g3, 3, %g5 /* IEU0 */ - sub %o1, %g3, %o1 /* IEU0 Group */ - sub %g4, %g5, %g4 /* IEU1 */ - /* %g1 = 0101010101010101 * - * %g2 = 8080808080808080 * - * %g3 = source alignment * - * %g5 = number of bits to shift left * - * %g4 = number of bits to shift right */ - ldxa [%o1] ASI_PNF, %o5 /* Load Group */ - - addcc %o1, 8, %o1 /* IEU1 */ -15: sllx %o5, %g5, %o3 /* IEU0 Group */ - ldxa [%o1] ASI_PNF, %o5 /* Load */ - srlx %o5, %g4, %o4 /* IEU0 Group */ - - add %o0, 8, %o0 /* IEU1 */ - or %o3, %o4, %o3 /* IEU0 Group */ - add %o1, 8, %o1 /* IEU1 */ - sub %o3, %g1, %o4 /* IEU0 Group */ - -#ifdef EIGHTBIT_NOT_RARE - andn %o4, %o3, %o4 /* IEU0 Group */ -#endif - andcc %o4, %g2, %g0 /* IEU1 Group */ - be,a,pt %xcc, 15b /* CTI */ - stx %o3, [%o0 - 8] /* Store */ - srlx %o3, 56, %o4 /* IEU0 Group */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 22f /* CTI */ - srlx %o3, 48, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 21f /* CTI */ - srlx %o3, 40, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - - srlx %o3, 32, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 19f /* CTI */ - srlx %o3, 24, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 18f /* CTI */ - srlx %o3, 16, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 17f /* CTI */ - srlx %o3, 8, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 16f /* CTI */ - - andcc %o3, 0xff, %g0 /* IEU1 Group */ - bne,pn %icc, 15b /* CTI */ - stx %o3, [%o0 - 8] /* Store */ - retl /* CTI+IEU1 Group */ - - mov %g6, %o0 /* IEU0 */ - - .align 16 -16: srlx %o3, 8, %o4 /* IEU0 Group */ - stb %o4, [%o0 - 2] /* Store */ -17: srlx %o3, 16, %o4 /* IEU0 Group */ - stb %o4, [%o0 - 3] /* Store */ - -18: srlx %o3, 24, %o4 /* IEU0 Group */ - stb %o4, [%o0 - 4] /* Store */ -19: srlx %o3, 32, %o4 /* IEU0 Group */ - stw %o4, [%o0 - 8] /* Store */ - - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - nop - nop - -20: srlx %o3, 40, %o4 /* IEU0 Group */ - stb %o4, [%o0 - 6] /* Store */ -21: srlx %o3, 48, %o4 /* IEU0 Group */ - stb %o4, [%o0 - 7] /* Store */ - -22: srlx %o3, 56, %o4 /* IEU0 Group */ - stb %o4, [%o0 - 8] /* Store */ - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ -END(strcpy) -libc_hidden_builtin_def (strcpy) diff --git a/sysdeps/sparc/sparc64/strcspn.S b/sysdeps/sparc/sparc64/strcspn.S deleted file mode 100644 index 8b448d16e7..0000000000 --- a/sysdeps/sparc/sparc64/strcspn.S +++ /dev/null @@ -1,212 +0,0 @@ -/* strcspn (str, ss) -- Return the length of the initial segment of STR - which contains no characters from SS. - For SPARC v9. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC -#define XCC xcc -#define STACK_SIZE 128 -#define STACK_OFFSET 128+0x7ff - .register %g2, #scratch -#else -#define STACK_SIZE 64 -#define STACK_OFFSET 64 -#endif - - .text - .align 32 -ENTRY(strcspn) - sub %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - mov 1, %o4 /* IEU1 */ - stx %o4, [%sp + STACK_OFFSET] /* Store Group */ - mov %o0, %g4 /* IEU0 */ - - stx %g0, [%sp + STACK_OFFSET + 8] /* Store Group */ - add %sp, STACK_OFFSET, %o5 /* IEU0 */ - stx %g0, [%sp + STACK_OFFSET + 16] /* Store Group */ - stx %g0, [%sp + STACK_OFFSET + 24] /* Store Group */ - -1: ldub [%o1], %o2 /* Load Group */ - brz,pn %o2, 2f /* CTI+IEU1 Group */ - srl %o2, 3, %o3 /* IEU0 */ - and %o3, 0x18, %o3 /* IEU0 Group */ - - and %o2, 0x3f, %o2 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %o2, %g1 /* IEU0 */ - add %o1, 1, %o1 /* IEU1 */ - - or %g2, %g1, %g2 /* IEU0 Group */ - ba,pt %xcc, 1b /* CTI */ - stx %g2, [%o5 + %o3] /* Store */ -2: andcc %o0, 7, %g0 /* IEU1 Group */ - - be,a,pt %xcc, 4f /* CTI */ - ldx [%o0], %o2 /* Load */ - ldub [%o0], %o2 /* Load Group */ -3: srl %o2, 3, %o3 /* IEU0 Group */ - - and %o2, 0x3f, %o2 /* IEU1 */ - and %o3, 0x18, %o3 /* IEU0 Group */ - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %o2, %g1 /* IEU0 */ - - add %o0, 1, %o0 /* IEU1 */ - andcc %g2, %g1, %g0 /* IEU1 Group */ - bne,pn %xcc, 12f /* CTI */ - andcc %o0, 7, %g0 /* IEU1 Group */ - - bne,a,pt %icc, 3b /* CTI */ - ldub [%o0], %o2 /* Load */ - ldx [%o0], %o2 /* Load Group */ -4: srlx %o2, 59, %o3 /* IEU0 Group */ - - srlx %o2, 56, %g5 /* IEU0 Group */ -5: and %o3, 0x18, %o3 /* IEU1 */ - andcc %g5, 0x3f, %g5 /* IEU1 Group */ - ldx [%o5 + %o3], %g2 /* Load */ - - srlx %o2, 51, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 48, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - bne,pn %xcc, 13f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 43, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 40, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - bne,pn %xcc, 14f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 35, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 32, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - bne,pn %xcc, 15f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 27, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 24, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - bne,pn %xcc, 16f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 19, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 16, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - bne,pn %xcc, 17f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 11, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - add %o0, 8, %o0 /* IEU1 */ - srlx %o2, 8, %g5 /* IEU0 Group */ - - andcc %g2, %g1, %g2 /* IEU1 */ - bne,pn %xcc, 18f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %g5, %g1 /* IEU0 */ - mov %o2, %g5 /* IEU1 */ - srlx %o2, 3, %o3 /* IEU0 Group */ - - ldxa [%o0] ASI_PNF, %o2 /* Load */ - andcc %g2, %g1, %g2 /* IEU1 Group */ - bne,pn %xcc, 19f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %g5, %g1 /* IEU0 */ - srlx %o2, 59, %o3 /* IEU0 Group */ - - andcc %g2, %g1, %g2 /* IEU1 Group */ - be,pt %xcc, 5b /* CTI */ - srlx %o2, 56, %g5 /* IEU0 Group */ - sub %o0, 1, %o0 /* IEU1 */ - - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - - .align 16 -19: sub %o0, 2, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -18: sub %o0, 3, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -17: add %o0, 4, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -16: add %o0, 3, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -15: add %o0, 2, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -14: add %o0, 1, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -13: add %sp, STACK_SIZE+32, %sp /* IEU1 */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - - .align 16 -12: sub %o0, 1, %o0 /* IEU0 Group */ - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ -END(strcspn) -libc_hidden_builtin_def (strcspn) diff --git a/sysdeps/sparc/sparc64/strlen.S b/sysdeps/sparc/sparc64/strlen.S deleted file mode 100644 index 25a63df03a..0000000000 --- a/sysdeps/sparc/sparc64/strlen.S +++ /dev/null @@ -1,85 +0,0 @@ -/* Determine the length of a string. For SPARC v9. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jan Vondrak , - Jakub Jelinek , and - David S. Miller . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .register %g2, #scratch - .register %g3, #scratch - - .text - .align 32 -ENTRY(strlen) - mov %o0, %o1 - andn %o0, 0x7, %o0 - - ldx [%o0], %o5 - and %o1, 0x7, %g1 - mov -1, %g5 - - sethi %hi(0x01010101), %o2 - sll %g1, 3, %g1 - - or %o2, %lo(0x01010101), %o2 - srlx %g5, %g1, %o3 - - sllx %o2, 32, %g1 - sethi %hi(0x0000ff00), %g5 - - orn %o5, %o3, %o5 - or %o2, %g1, %o2 - - sllx %o2, 7, %o3 -10: add %o0, 8, %o0 - - andn %o3, %o5, %g1 - sub %o5, %o2, %g2 - - andcc %g1, %g2, %g0 - be,a,pt %xcc, 10b - ldx [%o0], %o5 - srlx %o5, 32, %g1 - - andn %o3, %g1, %o4 - sub %g1, %o2, %g2 - - add %o0, 4, %g3 - andcc %o4, %g2, %g0 - movne %icc, %g1, %o5 - - move %icc, %g3, %o0 - or %g5, %lo(0x0000ff00), %g5 - mov 3 - 8, %g2 - - andcc %o5, %g5, %g0 - srlx %o5, 16, %g1 - move %icc, 2 - 8, %g2 - - andcc %g1, 0xff, %g0 - srl %o5, 24, %o5 - move %icc, 1 - 8, %g2 - - movrz %o5, 0 - 8, %g2 - sub %o0, %o1, %o0 - - retl - add %o0, %g2, %o0 -END(strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/sparc/sparc64/strncmp.S b/sysdeps/sparc/sparc64/strncmp.S deleted file mode 100644 index f0af16155b..0000000000 --- a/sysdeps/sparc/sparc64/strncmp.S +++ /dev/null @@ -1,363 +0,0 @@ -/* Compare no more than N characters of S1 and S2, returning less than, - equal to or greater than zero if S1 is lexicographically less than, - equal to or greater than S2. - For SPARC v9. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jan Vondrak and - Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC -#define XCC xcc -#define USE_BPR - .register %g2, #scratch - .register %g3, #scratch - .register %g6, #scratch -#endif - - /* Normally, this uses - ((xword - 0x0101010101010101) & 0x8080808080808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 32 -ENTRY(strncmp) -#ifdef USE_BPR - brz,pn %o2, 4f /* CTI+IEU1 Group */ -#else - tst %o2 /* IEU1 Group */ - be,pn %XCC, 4f /* CTI */ -#endif - sethi %hi(0x1010101), %g1 /* IEU0 */ - andcc %o0, 7, %g0 /* IEU1 Group */ - bne,pn %icc, 9f /* CTI */ - - or %g1, %lo(0x1010101), %g1 /* IEU0 */ - andcc %o1, 7, %g3 /* IEU1 Group */ - bne,pn %icc, 11f /* CTI */ - sllx %g1, 32, %g2 /* IEU0 */ - - ldx [%o0], %g4 /* Load Group */ - or %g1, %g2, %g1 /* IEU0 */ -1: ldx [%o1], %o3 /* Load Group */ - sllx %g1, 7, %g2 /* IEU0 */ - - add %o0, 8, %o0 /* IEU1 */ -2: subcc %o2, 8, %o2 /* IEU1 Group */ - bcs,pn %XCC, 5f /* CTI */ - add %o1, 8, %o1 /* IEU0 */ - - sub %g4, %g1, %g3 /* IEU0 Group */ - subcc %g4, %o3, %o4 /* IEU1 */ -#ifdef EIGHTBIT_NOT_RARE - andn %g3, %g4, %g6 /* IEU0 Group */ -#endif - bne,pn %xcc, 6f /* CTI */ - ldxa [%o0] ASI_PNF, %g4 /* Load Group */ - - add %o0, 8, %o0 /* IEU0 */ -#ifdef EIGHTBIT_NOT_RARE - andcc %g6, %g2, %g0 /* IEU1 */ -#else - andcc %g3, %g2, %g0 /* IEU1 */ -#endif - be,a,pt %xcc, 2b /* CTI */ - ldxa [%o1] ASI_PNF, %o3 /* Load Group */ - - addcc %g3, %g1, %o4 /* IEU1 */ -#ifdef EIGHTBIT_NOT_RARE - srlx %g6, 32, %g6 /* IEU0 */ - andcc %g6, %g2, %g0 /* IEU1 Group */ -#else - srlx %g3, 32, %g3 /* IEU0 */ - andcc %g3, %g2, %g0 /* IEU1 Group */ -#endif - be,pt %xcc, 3f /* CTI */ - - srlx %o4, 56, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4f /* CTI */ - srlx %o4, 48, %o5 /* IEU0 */ - - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4f /* CTI */ - srlx %o4, 40, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 4f /* CTI */ - srlx %o4, 32, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4f /* CTI */ - -3: srlx %o4, 24, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4f /* CTI */ - srlx %o4, 16, %o5 /* IEU0 */ - - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4f /* CTI */ - srlx %o4, 8, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 4f /* CTI */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - bne,a,pn %icc, 2b /* CTI */ - ldxa [%o1] ASI_PNF, %o3 /* Load */ - -4: retl /* CTI+IEU1 Group */ - clr %o0 /* IEU0 */ - - .align 16 -5: srlx %g4, 56, %o4 /* IEU0 Group */ - cmp %o2, -8 /* IEU1 */ - be,pn %XCC, 4b /* CTI */ - srlx %o3, 56, %o5 /* IEU0 Group */ - - andcc %o4, 0xff, %g0 /* IEU1 */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - - srlx %o3, 48, %o5 /* IEU0 */ - cmp %o2, -7 /* IEU1 Group */ - be,pn %XCC, 4b /* CTI */ - srlx %g4, 48, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - - srlx %o3, 40, %o5 /* IEU0 */ - cmp %o2, -6 /* IEU1 Group */ - be,pn %XCC, 4b /* CTI */ - srlx %g4, 40, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - - srlx %o3, 32, %o5 /* IEU0 */ - cmp %o2, -5 /* IEU1 Group */ - be,pn %XCC, 4b /* CTI */ - srlx %g4, 32, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - - srlx %o3, 24, %o5 /* IEU0 */ - cmp %o2, -4 /* IEU1 Group */ - be,pn %XCC, 4b /* CTI */ - srlx %g4, 24, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - - srlx %o3, 16, %o5 /* IEU0 */ - cmp %o2, -3 /* IEU1 Group */ - be,pn %XCC, 4b /* CTI */ - srlx %g4, 16, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - - srlx %o3, 8, %o5 /* IEU0 */ - cmp %o2, -2 /* IEU1 Group */ - be,pn %XCC, 4b /* CTI */ - srlx %g4, 8, %o4 /* IEU0 */ - - retl /* CTI+IEU1 Group */ - sub %o4, %o5, %o0 /* IEU0 */ -6: addcc %o3, %o4, %g4 /* IEU1 */ -7: srlx %o3, 56, %o5 /* IEU0 */ - - srlx %g4, 56, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - - bne,pn %xcc, 8f /* CTI */ - srlx %o3, 48, %o5 /* IEU0 */ - srlx %g4, 48, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - srlx %o3, 40, %o5 /* IEU0 */ - - srlx %g4, 40, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - - bne,pn %xcc, 8f /* CTI */ - srlx %o3, 32, %o5 /* IEU0 */ - srlx %g4, 32, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - srlx %o3, 24, %o5 /* IEU0 */ - - srlx %g4, 24, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - - bne,pn %xcc, 8f /* CTI */ - srlx %o3, 16, %o5 /* IEU0 */ - srlx %g4, 16, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - srlx %o3, 8, %o5 /* IEU0 */ - - srlx %g4, 8, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - - retl /* CTI+IEU1 Group */ - sub %g4, %o3, %o0 /* IEU0 */ -8: retl /* CTI+IEU1 Group */ - mov %o4, %o0 /* IEU0 */ - -9: ldub [%o0], %g4 /* Load Group */ - add %o0, 1, %o0 /* IEU0 */ - ldub [%o1], %o3 /* Load Group */ - sllx %g1, 32, %g2 /* IEU0 */ - -10: subcc %o2, 1, %o2 /* IEU1 Group */ - be,pn %XCC, 8b /* CTI */ - sub %g4, %o3, %o4 /* IEU0 */ - add %o1, 1, %o1 /* IEU0 Group */ - - cmp %g4, %o3 /* IEU1 */ - bne,pn %xcc, 8b /* CTI */ - lduba [%o0] ASI_PNF, %g4 /* Load Group */ - andcc %o3, 0xff, %g0 /* IEU1 */ - - be,pn %icc, 4b /* CTI */ - lduba [%o1] ASI_PNF, %o3 /* Load Group */ - andcc %o0, 7, %g0 /* IEU1 */ - bne,a,pn %icc, 10b /* CTI */ - - add %o0, 1, %o0 /* IEU0 Group */ - or %g1, %g2, %g1 /* IEU1 */ - andcc %o1, 7, %g3 /* IEU1 Group */ - be,pn %icc, 1b /* CTI */ - - ldxa [%o0] ASI_PNF, %g4 /* Load */ -11: sllx %g3, 3, %g5 /* IEU0 Group */ - mov 64, %g6 /* IEU1 */ - or %g1, %g2, %g1 /* IEU0 Group */ - sub %o1, %g3, %o1 /* IEU1 */ - - sub %g6, %g5, %g6 /* IEU0 Group */ - ldxa [%o1] ASI_PNF, %o4 /* Load */ - sllx %g1, 7, %g2 /* IEU1 */ - add %o1, 8, %o1 /* IEU0 Group */ - /* %g1 = 0101010101010101 - %g2 = 8080808080808080 - %g3 = %o1 alignment - %g5 = number of bits to shift left - %g6 = number of bits to shift right */ - -12: sllx %o4, %g5, %o3 /* IEU0 Group */ - ldxa [%o1] ASI_PNF, %o4 /* Load */ - add %o1, 8, %o1 /* IEU1 */ -13: ldxa [%o0] ASI_PNF, %g4 /* Load Group */ - - addcc %o0, 8, %o0 /* IEU1 */ - srlx %o4, %g6, %o5 /* IEU0 */ - subcc %o2, 8, %o2 /* IEU1 Group */ - bcs,pn %XCC, 5b /* CTI */ - - or %o3, %o5, %o3 /* IEU0 */ - cmp %g4, %o3 /* IEU1 Group */ - bne,pn %xcc, 7b /* CTI */ - sub %g4, %g1, %o5 /* IEU0 */ - -#ifdef EIGHTBIT_NOT_RARE - andn %o5, %g4, %o5 /* IEU0 Group */ -#endif - andcc %o5, %g2, %g0 /* IEU1 Group */ - be,pt %xcc, 12b /* CTI */ - srlx %o5, 32, %o5 /* IEU0 */ - andcc %o5, %g2, %g0 /* IEU1 Group */ - - be,pt %xcc, 14f /* CTI */ - srlx %g4, 56, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - - srlx %g4, 48, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - srlx %g4, 40, %o5 /* IEU0 */ - - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - srlx %g4, 32, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 4b /* CTI */ -14: srlx %g4, 24, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - - srlx %g4, 16, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - srlx %g4, 8, %o5 /* IEU0 */ - - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - - sllx %o4, %g5, %o3 /* IEU0 */ - ldxa [%o1] ASI_PNF, %o4 /* Load Group */ - ba,pt %xcc, 13b /* CTI */ - add %o1, 8, %o1 /* IEU0 */ -END(strncmp) -libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/sparc/sparc64/strncpy.S b/sysdeps/sparc/sparc64/strncpy.S deleted file mode 100644 index f8c801f552..0000000000 --- a/sysdeps/sparc/sparc64/strncpy.S +++ /dev/null @@ -1,396 +0,0 @@ -/* strncpy(DST, SRC, COUNT) - Copy no more than COUNT bytes of the - null-terminated string from SRC to DST. If SRC does not cover all of - COUNT, the balance is zeroed. - For SPARC v9. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jan Vondrak and - Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC -#define XCC xcc -#define USE_BPR - .register %g2, #scratch - .register %g3, #scratch - .register %g6, #scratch -#endif - - /* Normally, this uses - ((xword - 0x0101010101010101) & 0x8080808080808080) test - to find out if any byte in xword could be zero. This is fast, but - also gives false alarm for any byte in range 0x81-0xff. It does - not matter for correctness, as if this test tells us there could - be some zero byte, we check it byte by byte, but if bytes with - high bits set are common in the strings, then this will give poor - performance. You can #define EIGHTBIT_NOT_RARE and the algorithm - will use one tick slower, but more precise test - ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), - which does not give any false alarms (but if some bits are set, - one cannot assume from it which bytes are zero and which are not). - It is yet to be measured, what is the correct default for glibc - in these days for an average user. - */ - - .text - .align 32 -ENTRY(strncpy) - sethi %hi(0x01010101), %g1 /* IEU0 Group */ -#ifdef USE_BPR - brz,pn %o2, 19f /* CTI+IEU1 */ -#else - tst %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ -#endif - mov %o0, %g6 /* IEU0 Group */ - or %g1, %lo(0x01010101), %g1 /* IEU1 */ - - andcc %o0, 7, %g0 /* IEU1 Group */ - sllx %g1, 32, %g2 /* IEU0 */ - bne,pn %icc, 26f /* CTI */ - or %g1, %g2, %g1 /* IEU0 Group */ - - andcc %o1, 7, %g3 /* IEU1 */ - bne,pn %icc, 28f /* CTI */ - sllx %g1, 7, %g2 /* IEU0 Group */ - ldx [%o1], %o3 /* Load */ - -1: add %o1, 8, %o1 /* IEU1 */ -2: subcc %o2, 8, %o2 /* IEU1 Group */ - bl,pn %XCC, 18f /* CTI */ - sub %o3, %g1, %o4 /* IEU0 */ - - add %o0, 8, %o0 /* IEU0 Group */ -#ifdef EIGHTBIT_NOT_MORE - andn %o4, %o3, %o4 /* IEU1 */ -#endif - mov %o3, %g3 /* IEU1 */ - ldxa [%o1] ASI_PNF, %o3 /* Load */ - add %o1, 8, %o1 /* IEU0 Group */ - - andcc %o4, %g2, %g0 /* IEU1 */ - be,a,pt %xcc, 2b /* CTI */ - stx %g3, [%o0-8] /* Store Group */ - srlx %g3, 56, %g5 /* IEU0 Group */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 16f /* CTI */ - srlx %g3, 48, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 15f /* CTI */ - srlx %g3, 40, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 14f /* CTI */ - - srlx %g3, 32, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 13f /* CTI */ - srlx %g3, 24, %g5 /* IEU0 */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 12f /* CTI */ - srlx %g3, 16, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 11f /* CTI */ - srlx %g3, 8, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 10f /* CTI */ - - andcc %g3, 0xff, %g0 /* IEU1 Group */ - bne,pt %icc, 2b /* CTI */ -3: stx %g3, [%o0-8] /* Store */ - andncc %o2, 31, %g3 /* IEU1 Group */ - -4: be,pn %XCC, 41f /* CTI */ - and %o2, 31, %o2 /* IEU1 Group */ -40: stx %g0, [%o0] /* Store */ - stx %g0, [%o0 + 8] /* Store Group */ - - subcc %g3, 32, %g3 /* IEU1 */ - stx %g0, [%o0 + 16] /* Store Group */ - stx %g0, [%o0 + 24] /* Store Group */ - bne,pt %XCC, 40b /* CTI */ - - add %o0, 32, %o0 /* IEU0 */ -41: subcc %o2, 8, %o2 /* IEU1 Group */ - bl,a,pn %XCC, 6f /* CTI */ - andcc %o2, 4, %g0 /* IEU1 Group */ - -5: stx %g0, [%o0] /* Store */ - subcc %o2, 8, %o2 /* IEU1 Group */ - bge,pt %XCC, 5b /* CTI */ - add %o0, 8, %o0 /* IEU0 */ - - andcc %o2, 4, %g0 /* IEU1 Group */ -6: be,a,pn %icc, 7f /* CTI */ - andcc %o2, 2, %g0 /* IEU1 Group */ - stw %g0, [%o0] /* Store */ - - add %o0, 4, %o0 /* IEU0 */ - andcc %o2, 2, %g0 /* IEU1 Group */ -7: be,a,pn %icc, 8f /* CTI */ - andcc %o2, 1, %g0 /* IEU1 Group */ - - sth %g0, [%o0] /* Store */ - add %o0, 2, %o0 /* IEU0 */ - andcc %o2, 1, %g0 /* IEU1 Group */ -8: bne,a,pn %icc, 9f /* CTI */ - - stb %g0, [%o0] /* Store */ -9: retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - - .align 16 -10: ba,pt %xcc, 3b /* CTI */ - sllx %g5, 8, %g3 /* IEU0 */ -11: ba,pt %xcc, 3b /* CTI Group */ - sllx %g4, 16, %g3 /* IEU0 */ - -12: ba,pt %xcc, 3b /* CTI Group */ - sllx %g5, 24, %g3 /* IEU0 */ -13: ba,pt %xcc, 3b /* CTI Group */ - sllx %g4, 32, %g3 /* IEU0 */ - -14: ba,pt %xcc, 3b /* CTI Group */ - sllx %g5, 40, %g3 /* IEU0 */ -15: ba,pt %xcc, 3b /* CTI Group */ - sllx %g4, 48, %g3 /* IEU0 */ - -16: ba,pt %xcc, 3b /* CTI */ - sllx %g5, 56, %g3 /* IEU0 */ -17: or %o3, %o4, %o3 /* IEU0 Group */ - sub %o3, %g1, %o4 /* IEU1 */ - -18: addcc %o2, 8, %o2 /* IEU1 Group */ - be,pn %XCC, 19f /* CTI */ - andcc %o4, %g2, %g0 /* IEU1 Group */ - be,pt %xcc, 21f /* CTI */ - - srlx %o3, 56, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - srlx %o3, 48, %g5 /* IEU0 Group */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - srlx %o3, 40, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - - be,pn %XCC, 19f /* CTI */ - srlx %o3, 32, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - - srlx %o3, 24, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - srlx %o3, 16, %g5 /* IEU0 Group */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - srlx %o3, 8, %g5 /* IEU0 Group */ - stb %g5, [%o0] /* Store */ - -19: retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ -50: stb %g0, [%o0] /* Store Group */ -20: subcc %o2, 1, %o2 /* IEU1 Group */ - - bne,pt %XCC, 50b /* CTI */ - add %o0, 1, %o0 /* IEU0 */ - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - -21: andcc %o2, 4, %g0 /* IEU1 Group */ - be,pn %icc, 22f /* CTI */ - srlx %o3, 32, %g5 /* IEU0 */ - stw %g5, [%o0] /* Store Group */ - - add %o0, 4, %o0 /* IEU0 */ - mov %o3, %g5 /* IEU1 */ -22: andcc %o2, 2, %g0 /* IEU1 Group */ - be,pn %icc, 23f /* CTI */ - - srlx %g5, 16, %g4 /* IEU0 */ - sth %g4, [%o0] /* Store Group */ - add %o0, 2, %o0 /* IEU0 */ - mov %g5, %g4 /* IEU1 */ - -23: srlx %g4, 8, %g4 /* IEU0 Group */ - andcc %o2, 1, %g0 /* IEU1 */ - bne,a,pn %icc, 24f /* CTI */ - stb %g4, [%o0] /* Store Group */ - -24: retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ -25: andcc %o0, 7, %g0 /* IEU1 Group */ - be,a,pn %icc, 4b /* CTI */ - - andncc %o2, 31, %g3 /* IEU1 Group */ - stb %g0, [%o0] /* Store Group */ - subcc %o2, 1, %o2 /* IEU1 */ - bne,pt %XCC, 25b /* CTI */ - - add %o0, 1, %o0 /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - - .align 16 -26: ldub [%o1], %o3 /* Load */ - sllx %g1, 7, %g2 /* IEU0 Group */ - stb %o3, [%o0] /* Store */ -27: subcc %o2, 1, %o2 /* IEU1 */ - - be,pn %XCC, 9b /* CTI */ - add %o1, 1, %o1 /* IEU0 Group */ - add %o0, 1, %o0 /* IEU1 */ - andcc %o3, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 25b /* CTI */ - lduba [%o1] ASI_PNF, %o3 /* Load */ - andcc %o0, 7, %g0 /* IEU1 Group */ - bne,a,pt %icc, 27b /* CTI */ - - stb %o3, [%o0] /* Store */ - andcc %o1, 7, %g3 /* IEU1 Group */ - be,a,pt %icc, 1b /* CTI */ - ldx [%o1], %o3 /* Load */ - -28: orcc %g0, 64, %g4 /* IEU1 Group */ - sllx %g3, 3, %g5 /* IEU0 */ - sub %g4, %g5, %g4 /* IEU0 Group */ - sub %o1, %g3, %o1 /* IEU1 */ - /* %g1 = 0101010101010101 - %g2 = 8080808080808080 - %g3 = source alignment - %g5 = number of bits to shift left - %g4 = number of bits to shift right */ - - ldxa [%o1] ASI_PNF, %o5 /* Load Group */ - addcc %o1, 8, %o1 /* IEU1 */ - -29: sllx %o5, %g5, %o3 /* IEU0 Group */ - ldxa [%o1] ASI_PNF, %o5 /* Load */ - subcc %o2, 8, %o2 /* IEU1 */ - bl,pn %XCC, 17b /* CTI */ - - srlx %o5, %g4, %o4 /* IEU0 Group */ - add %o1, 8, %o1 /* IEU1 */ - or %o3, %o4, %o3 /* IEU0 Group */ - add %o0, 8, %o0 /* IEU1 */ - - sub %o3, %g1, %o4 /* IEU0 Group */ -#ifdef EIGHTBIT_NOT_RARE - andn %o4, %o3, %o4 /* IEU0 Group */ -#endif - andcc %o4, %g2, %g0 /* IEU1 Group */ - be,a,pt %xcc, 29b /* CTI */ - stx %o3, [%o0-8] /* Store */ - - srlx %o3, 56, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 36f /* CTI */ - srlx %o3, 48, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 35f /* CTI */ - srlx %o3, 40, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 34f /* CTI */ - srlx %o3, 32, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 33f /* CTI */ - - srlx %o3, 24, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 32f /* CTI */ - srlx %o3, 16, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 31f /* CTI */ - srlx %o3, 8, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 30f /* CTI */ - andcc %o3, 0xff, %g0 /* IEU1 Group */ - bne,pn %icc, 29b /* CTI */ - stx %o3, [%o0-8] /* Store */ - - ba,pt %xcc, 4b /* CTI Group */ - andncc %o2, 31, %g3 /* IEU1 */ -30: srlx %o3, 8, %o4 /* IEU0 */ - ba,pt %xcc, 3b /* CTI */ - - sllx %o4, 8, %g3 /* IEU0 Group */ -31: srlx %o3, 16, %o4 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 16, %g3 /* IEU0 Group */ - -32: srlx %o3, 24, %o4 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 24, %g3 /* IEU0 Group */ -33: srlx %o3, 32, %o4 /* IEU0 Group */ - - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 32, %g3 /* IEU0 Group */ -34: srlx %o3, 40, %o4 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - - sllx %o4, 40, %g3 /* IEU0 Group */ -35: srlx %o3, 48, %o4 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 48, %g3 /* IEU0 Group */ - -36: srlx %o3, 56, %o4 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 56, %g3 /* IEU0 Group */ -END(strncpy) -libc_hidden_builtin_def (strncpy) diff --git a/sysdeps/sparc/sparc64/strpbrk.S b/sysdeps/sparc/sparc64/strpbrk.S deleted file mode 100644 index 08e0c2f30f..0000000000 --- a/sysdeps/sparc/sparc64/strpbrk.S +++ /dev/null @@ -1,230 +0,0 @@ -/* strpbrk (s, accept) -- Find the first occurrence in S of any character in - ACCEPT. - For SPARC v9. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC -#define XCC xcc -#define STACK_SIZE 128 -#define STACK_OFFSET 128+0x7ff - .register %g2, #scratch -#else -#define STACK_SIZE 64 -#define STACK_OFFSET 64 -#endif - - .text - .align 32 -ENTRY(strpbrk) - sub %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - mov 1, %o4 /* IEU1 */ - stx %o4, [%sp + STACK_OFFSET] /* Store Group */ - stx %g0, [%sp + STACK_OFFSET + 8] /* Store Group */ - - add %sp, STACK_OFFSET, %o5 /* IEU0 */ - stx %g0, [%sp + STACK_OFFSET + 16] /* Store Group */ - stx %g0, [%sp + STACK_OFFSET + 24] /* Store Group */ -1: ldub [%o1], %o2 /* Load Group */ - - brz,pn %o2, 2f /* CTI+IEU1 Group */ - srl %o2, 3, %o3 /* IEU0 */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %o2, 0x3f, %o2 /* IEU1 */ - - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %o2, %g1 /* IEU0 */ - add %o1, 1, %o1 /* IEU1 */ - or %g2, %g1, %g2 /* IEU0 Group */ - - ba,pt %xcc, 1b /* CTI */ - stx %g2, [%o5 + %o3] /* Store */ -2: andcc %o0, 7, %g0 /* IEU1 Group */ - be,a,pt %xcc, 4f /* CTI */ - - ldx [%o0], %o2 /* Load */ - ldub [%o0], %o2 /* Load Group */ -3: srl %o2, 3, %o3 /* IEU0 Group */ - and %o2, 0x3f, %o2 /* IEU1 */ - - and %o3, 0x18, %o3 /* IEU0 Group */ - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %o2, %g1 /* IEU0 */ - add %o0, 1, %o0 /* IEU1 */ - - andcc %g2, %g1, %g0 /* IEU1 Group */ - bne,pn %xcc, 12f /* CTI */ - andcc %o0, 7, %g0 /* IEU1 Group */ - bne,a,pt %icc, 3b /* CTI */ - - ldub [%o0], %o2 /* Load */ - ldx [%o0], %o2 /* Load Group */ -4: srlx %o2, 59, %o3 /* IEU0 Group */ - srlx %o2, 56, %g4 /* IEU0 Group */ - -5: and %o3, 0x18, %o3 /* IEU1 */ - andcc %g4, 0x3f, %g4 /* IEU1 Group */ - ldx [%o5 + %o3], %g2 /* Load */ - srlx %o2, 51, %o3 /* IEU0 */ - - sllx %o4, %g4, %g1 /* IEU0 Group */ - srlx %o2, 48, %g4 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - bne,pn %xcc, 13f /* CTI */ - - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g4, 0x3f, %g4 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - srlx %o2, 43, %o3 /* IEU0 */ - - sllx %o4, %g4, %g1 /* IEU0 Group */ - srlx %o2, 40, %g4 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - bne,pn %xcc, 14f /* CTI */ - - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g4, 0x3f, %g4 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - srlx %o2, 35, %o3 /* IEU0 */ - - sllx %o4, %g4, %g1 /* IEU0 Group */ - srlx %o2, 32, %g4 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - bne,pn %xcc, 15f /* CTI */ - - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g4, 0x3f, %g4 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - srlx %o2, 27, %o3 /* IEU0 */ - - sllx %o4, %g4, %g1 /* IEU0 Group */ - srlx %o2, 24, %g4 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - bne,pn %xcc, 16f /* CTI */ - - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g4, 0x3f, %g4 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - srlx %o2, 19, %o3 /* IEU0 */ - - sllx %o4, %g4, %g1 /* IEU0 Group */ - srlx %o2, 16, %g4 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - bne,pn %xcc, 17f /* CTI */ - - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g4, 0x3f, %g4 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - srlx %o2, 11, %o3 /* IEU0 */ - - sllx %o4, %g4, %g1 /* IEU0 Group */ - add %o0, 8, %o0 /* IEU1 */ - srlx %o2, 8, %g4 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - bne,pn %xcc, 18f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g4, 0x3f, %g4 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - sllx %o4, %g4, %g1 /* IEU0 */ - mov %o2, %g5 /* IEU1 */ - srlx %o2, 3, %o3 /* IEU0 Group */ - ldxa [%o0] ASI_PNF, %o2 /* Load */ - - andcc %g2, %g1, %g2 /* IEU1 Group */ - bne,pn %xcc, 19f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g4 /* IEU1 */ - - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %g4, %g1 /* IEU0 */ - srlx %o2, 59, %o3 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 Group */ - - be,pt %xcc, 5b /* CTI */ - srlx %o2, 56, %g4 /* IEU0 Group */ - sub %o0, 1, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - - andcc %g5, 0xff, %g0 /* IEU1 */ - retl /* CTI+IEU1 Group */ - move %icc, 0, %o0 /* Single Group */ - - .align 16 -19: sub %o0, 2, %o0 /* IEU1 */ - srl %g5, 8, %g1 /* IEU0 Group */ - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - andcc %g1, 0xff, %g0 /* IEU1 Group */ - - retl /* CTI+IEU1 Group */ - move %icc, 0, %o0 /* Single Group */ -18: sub %o0, 3, %o0 /* IEU1 */ - srl %o2, 16, %g1 /* IEU0 Group */ - - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - andcc %g1, 0xff, %g0 /* IEU1 Group */ - retl /* CTI+IEU1 Group */ - move %icc, 0, %o0 /* Single Group */ - -17: add %o0, 4, %o0 /* IEU1 */ - srl %o2, 24, %g1 /* IEU0 Group */ - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - retl /* CTI+IEU1 Group */ - - movrz %g1, 0, %o0 /* Single Group */ -16: add %o0, 3, %o0 /* IEU1 */ - srlx %o2, 32, %g1 /* IEU0 Group */ - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - - andcc %g1, 0xff, %g0 /* IEU1 Group */ - retl /* CTI+IEU1 Group */ - move %icc, 0, %o0 /* Single Group */ - - .align 16 -15: add %o0, 2, %o0 /* IEU1 */ - srlx %o2, 40, %g1 /* IEU0 Group */ - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - andcc %g1, 0xff, %g0 /* IEU1 Group */ - - retl /* CTI+IEU1 Group */ - move %icc, 0, %o0 /* Single Group */ -14: add %o0, 1, %o0 /* IEU1 */ - srlx %o2, 48, %g1 /* IEU0 Group */ - - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - andcc %g1, 0xff, %g0 /* IEU1 Group */ - retl /* CTI+IEU1 Group */ - move %icc, 0, %o0 /* Single Group */ - -13: add %sp, STACK_SIZE+32, %sp /* IEU1 */ - srlx %o2, 56, %g1 /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - movrz %g1, 0, %o0 /* Single Group */ - - .align 16 -12: sub %o0, 1, %o0 /* IEU0 Group */ - or %o3, %o2, %g1 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - - movrz %g1, 0, %o0 /* Single Group */ -END(strpbrk) -libc_hidden_builtin_def (strpbrk) diff --git a/sysdeps/sparc/sparc64/strrchr.c b/sysdeps/sparc/sparc64/strrchr.c deleted file mode 100644 index ec608d6ab3..0000000000 --- a/sysdeps/sparc/sparc64/strrchr.c +++ /dev/null @@ -1 +0,0 @@ -/* strrchr is in strchr.S */ diff --git a/sysdeps/sparc/sparc64/strspn.S b/sysdeps/sparc/sparc64/strspn.S deleted file mode 100644 index 7c560b9bc2..0000000000 --- a/sysdeps/sparc/sparc64/strspn.S +++ /dev/null @@ -1,212 +0,0 @@ -/* strspn (str, ss) -- Return the length of the maximum initial segment - of S which contains only characters in ACCEPT. - For SPARC v9. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef XCC -#define XCC xcc -#define STACK_SIZE 128 -#define STACK_OFFSET 128+0x7ff - .register %g2, #scratch -#else -#define STACK_SIZE 64 -#define STACK_OFFSET 64 -#endif - - .text - .align 32 -ENTRY(strspn) - sub %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - mov 1, %o4 /* IEU1 */ - stx %g0, [%sp + STACK_OFFSET] /* Store Group */ - mov %o0, %g4 /* IEU0 */ - - stx %g0, [%sp + STACK_OFFSET + 8] /* Store Group */ - add %sp, STACK_OFFSET, %o5 /* IEU0 */ - stx %g0, [%sp + STACK_OFFSET + 16] /* Store Group */ - stx %g0, [%sp + STACK_OFFSET + 24] /* Store Group */ - -1: ldub [%o1], %o2 /* Load Group */ - brz,pn %o2, 2f /* CTI+IEU1 Group */ - srl %o2, 3, %o3 /* IEU0 */ - and %o3, 0x18, %o3 /* IEU0 Group */ - - and %o2, 0x3f, %o2 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %o2, %g1 /* IEU0 */ - add %o1, 1, %o1 /* IEU1 */ - - or %g2, %g1, %g2 /* IEU0 Group */ - ba,pt %xcc, 1b /* CTI */ - stx %g2, [%o5 + %o3] /* Store */ -2: andcc %o0, 7, %g0 /* IEU1 Group */ - - be,a,pt %xcc, 4f /* CTI */ - ldx [%o0], %o2 /* Load */ - ldub [%o0], %o2 /* Load Group */ -3: srl %o2, 3, %o3 /* IEU0 Group */ - - and %o2, 0x3f, %o2 /* IEU1 */ - and %o3, 0x18, %o3 /* IEU0 Group */ - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %o2, %g1 /* IEU0 */ - - add %o0, 1, %o0 /* IEU1 */ - andcc %g2, %g1, %g0 /* IEU1 Group */ - be,pn %xcc, 12f /* CTI */ - andcc %o0, 7, %g0 /* IEU1 Group */ - - bne,a,pt %icc, 3b /* CTI */ - ldub [%o0], %o2 /* Load */ - ldx [%o0], %o2 /* Load Group */ -4: srlx %o2, 59, %o3 /* IEU0 Group */ - - srlx %o2, 56, %g5 /* IEU0 Group */ -5: and %o3, 0x18, %o3 /* IEU1 */ - andcc %g5, 0x3f, %g5 /* IEU1 Group */ - ldx [%o5 + %o3], %g2 /* Load */ - - srlx %o2, 51, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 48, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - be,pn %xcc, 13f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 43, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 40, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - be,pn %xcc, 14f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 35, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 32, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - be,pn %xcc, 15f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 27, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 24, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - be,pn %xcc, 16f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 19, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 16, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - be,pn %xcc, 17f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 11, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - add %o0, 8, %o0 /* IEU1 */ - srlx %o2, 8, %g5 /* IEU0 Group */ - - andcc %g2, %g1, %g2 /* IEU1 */ - be,pn %xcc, 18f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %g5, %g1 /* IEU0 */ - mov %o2, %g5 /* IEU1 */ - srlx %o2, 3, %o3 /* IEU0 Group */ - - ldxa [%o0] ASI_PNF, %o2 /* Load */ - andcc %g2, %g1, %g2 /* IEU1 Group */ - be,pn %xcc, 19f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %g5, %g1 /* IEU0 */ - srlx %o2, 59, %o3 /* IEU0 Group */ - - andcc %g2, %g1, %g2 /* IEU1 Group */ - bne,pt %xcc, 5b /* CTI */ - srlx %o2, 56, %g5 /* IEU0 Group */ - sub %o0, 1, %o0 /* IEU1 */ - - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - - .align 16 -19: sub %o0, 2, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -18: sub %o0, 3, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -17: add %o0, 4, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -16: add %o0, 3, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -15: add %o0, 2, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -14: add %o0, 1, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -13: add %sp, STACK_SIZE+32, %sp /* IEU1 */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - - .align 16 -12: sub %o0, 1, %o0 /* IEU0 Group */ - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ -END(strspn) -libc_hidden_builtin_def (strspn) diff --git a/sysdeps/sparc/sparc64/sub_n.S b/sysdeps/sparc/sparc64/sub_n.S deleted file mode 100644 index 006ae809c8..0000000000 --- a/sysdeps/sparc/sparc64/sub_n.S +++ /dev/null @@ -1,54 +0,0 @@ -/* SPARC v9 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 - and store difference in a third limb vector. - - Copyright (C) 1995-2017 Free Software Foundation, Inc. - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include - -/* INPUT PARAMETERS - res_ptr %o0 - s1_ptr %o1 - s2_ptr %o2 - size %o3 */ - -ENTRY(__mpn_sub_n) - - sub %g0,%o3,%g5 - sllx %o3,3,%g1 - add %o1,%g1,%o1 ! make s1_ptr point at end - add %o2,%g1,%o2 ! make s2_ptr point at end - add %o0,%g1,%o0 ! make res_ptr point at end - mov 0,%o4 ! clear carry variable - sllx %g5,3,%o5 ! compute initial address index - -1: ldx [%o2+%o5],%g1 ! load s2 limb - add %g5,1,%g5 ! increment loop count - ldx [%o1+%o5],%o3 ! load s1 limb - addcc %g1,%o4,%g1 ! add s2 limb and carry variable - movcc %xcc,0,%o4 ! if carry-out, o4 was 1; clear it - subcc %o3,%g1,%g1 ! subtract s1 limb from sum - stx %g1,[%o0+%o5] ! store result - add %o5,8,%o5 ! increment address index - brnz,pt %g5,1b - movcs %xcc,1,%o4 ! if s1 subtract gave carry, record it - - retl - mov %o4,%o0 - -END(__mpn_sub_n) diff --git a/sysdeps/sparc/sparc64/submul_1.S b/sysdeps/sparc/sparc64/submul_1.S deleted file mode 100644 index 03e62b668b..0000000000 --- a/sysdeps/sparc/sparc64/submul_1.S +++ /dev/null @@ -1,82 +0,0 @@ -/* SPARC v9 __mpn_submul_1 -- Multiply a limb vector with a single limb and - subtract the product from a second limb vector. - - Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include - - -/* INPUT PARAMETERS - res_ptr o0 - s1_ptr o1 - size o2 - s2_limb o3 */ - -ENTRY(__mpn_submul_1) - save %sp,-192,%sp - - sub %g0,%i2,%o7 - mov 0,%o0 ! zero cy_limb - sllx %o7,3,%o7 - sethi %hi(0x80000000),%o2 - srl %i3,0,%o1 ! extract low 32 bits of s2_limb - sub %i1,%o7,%o3 - srlx %i3,32,%i3 ! extract high 32 bits of s2_limb - sub %i0,%o7,%o4 - add %o2,%o2,%o2 ! o2 = 0x100000000 - - ! hi ! - ! mid-1 ! - ! mid-2 ! - ! lo ! -1: - ldx [%o3+%o7],%g5 - srl %g5,0,%i0 ! zero hi bits - ldx [%o4+%o7],%l1 - srlx %g5,32,%g5 - mulx %o1,%i0,%i4 ! lo product - mulx %i3,%i0,%i1 ! mid-1 product - mulx %o1,%g5,%l2 ! mid-2 product - mulx %i3,%g5,%i5 ! hi product - srlx %i4,32,%i0 ! extract high 32 bits of lo product... - add %i1,%i0,%i1 ! ...and add it to the mid-1 product - addcc %i1,%l2,%i1 ! add mid products - mov 0,%l0 ! we need the carry from that add... - movcs %xcc,%o2,%l0 ! ...compute it and... - sllx %i1,32,%i0 ! align low bits of mid product - add %i5,%l0,%i5 ! ...add to bit 32 of the hi product - srl %i4,0,%g5 ! zero high 32 bits of lo product - add %i0,%g5,%i0 ! combine into low 64 bits of result - srlx %i1,32,%i1 ! extract high bits of mid product... - addcc %i0,%o0,%i0 ! add cy_limb to low 64 bits of result - add %i5,%i1,%i1 ! ...and add them to the high result - mov 0,%g5 - movcs %xcc,1,%g5 - subcc %l1,%i0,%i0 - stx %i0,[%o4+%o7] - add %g5,1,%l1 - movcs %xcc,%l1,%g5 - addcc %o7,8,%o7 - bne,pt %xcc,1b - add %i1,%g5,%o0 ! compute new cy_limb - - jmpl %i7+8, %g0 - restore %o0,%g0,%o0 - -END(__mpn_submul_1) diff --git a/sysdeps/sparc/sparc64/tls-macros.h b/sysdeps/sparc/sparc64/tls-macros.h deleted file mode 100644 index bb0d8035fc..0000000000 --- a/sysdeps/sparc/sparc64/tls-macros.h +++ /dev/null @@ -1,65 +0,0 @@ -#define TLS_LE(x) \ - ({ int *__l; \ - asm ("sethi %%tle_hix22(" #x "), %0" : "=r" (__l)); \ - asm ("xor %1, %%tle_lox10(" #x "), %0" : "=r" (__l) : "r" (__l)); \ - asm ("add %%g7, %1, %0" : "=r" (__l) : "r" (__l)); \ - __l; }) - -#ifdef __PIC__ -# define TLS_LOAD_PIC \ - ({ long pc, got; \ - asm ("sethi %%hi(_GLOBAL_OFFSET_TABLE_-4), %1\n\t" \ - "rd %%pc, %0\n\t" \ - "add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n\t" \ - "add %1, %0, %1\n\t" \ - : "=r" (pc), "=r" (got)); \ - got; }) -#else -# define TLS_LOAD_PIC \ - ({ long got; \ - asm (".hidden _GLOBAL_OFFSET_TABLE_\n\t" \ - "sethi %%hi(_GLOBAL_OFFSET_TABLE_), %0\n\t" \ - "or %0, %%lo(_GLOBAL_OFFSET_TABLE_), %0" \ - : "=r" (got)); \ - got; }) -#endif - -#define TLS_IE(x) \ - ({ int *__l; \ - asm ("sethi %%tie_hi22(" #x "), %0" : "=r" (__l)); \ - asm ("add %1, %%tie_lo10(" #x "), %0" : "=r" (__l) : "r" (__l)); \ - asm ("ldx [%1 + %2], %0, %%tie_ldx(" #x ")" \ - : "=r" (__l) : "r" (TLS_LOAD_PIC), "r" (__l)); \ - asm ("add %%g7, %1, %0, %%tie_add(" #x ")" : "=r" (__l) : "r" (__l)); \ - __l; }) - -#define TLS_LD(x) \ - ({ int *__l; register void *__o0 asm ("%o0"); \ - long __o; \ - asm ("sethi %%tldm_hi22(" #x "), %0" : "=r" (__l)); \ - asm ("add %1, %%tldm_lo10(" #x "), %0" : "=r" (__l) : "r" (__l)); \ - asm ("add %1, %2, %0, %%tldm_add(" #x ")" \ - : "=r" (__o0) : "r" (TLS_LOAD_PIC), "r" (__l)); \ - asm ("call __tls_get_addr, %%tgd_call(" #x ")\n\t" \ - " nop" \ - : "=r" (__o0) : "0" (__o0) \ - : "g1", "g2", "g3", "g4", "g5", "g6", "o1", "o2", "o3", "o4", \ - "o5", "o7", "cc"); \ - asm ("sethi %%tldo_hix22(" #x "), %0" : "=r" (__o)); \ - asm ("xor %1, %%tldo_lox10(" #x "), %0" : "=r" (__o) : "r" (__o)); \ - asm ("add %1, %2, %0, %%tldo_add(" #x ")" : "=r" (__l) \ - : "r" (__o0), "r" (__o)); \ - __l; }) - -#define TLS_GD(x) \ - ({ int *__l; register void *__o0 asm ("%o0"); \ - asm ("sethi %%tgd_hi22(" #x "), %0" : "=r" (__l)); \ - asm ("add %1, %%tgd_lo10(" #x "), %0" : "=r" (__l) : "r" (__l)); \ - asm ("add %1, %2, %0, %%tgd_add(" #x ")" \ - : "=r" (__o0) : "r" (TLS_LOAD_PIC), "r" (__l)); \ - asm ("call __tls_get_addr, %%tgd_call(" #x ")\n\t" \ - " nop" \ - : "=r" (__o0) : "0" (__o0) \ - : "g1", "g2", "g3", "g4", "g5", "g6", "o1", "o2", "o3", "o4", \ - "o5", "o7", "cc"); \ - __o0; }) diff --git a/sysdeps/sparc/sparc64/tst-audit.h b/sysdeps/sparc/sparc64/tst-audit.h deleted file mode 100644 index f7123e0ef1..0000000000 --- a/sysdeps/sparc/sparc64/tst-audit.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. SPARC64 version. - - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define pltenter la_sparc64_gnu_pltenter -#define pltexit la_sparc64_gnu_pltexit -#define La_regs La_sparc64_regs -#define La_retval La_sparc64_retval -#define int_retval lrv_reg[0] diff --git a/sysdeps/sparc/stackinfo.h b/sysdeps/sparc/stackinfo.h deleted file mode 100644 index c5c1e5224b..0000000000 --- a/sysdeps/sparc/stackinfo.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* On sparc the stack grows down. */ -#define _STACK_GROWS_DOWN 1 - -/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK is - * present, but it is presumed absent. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X) - -#endif /* stackinfo.h */ diff --git a/sysdeps/sparc/sys/trap.h b/sysdeps/sparc/sys/trap.h deleted file mode 100644 index 50be40668f..0000000000 --- a/sysdeps/sparc/sys/trap.h +++ /dev/null @@ -1,7 +0,0 @@ -/* Include trap definitions. */ -#ifndef _SYS_TRAP_H -#define _SYS_TRAP_H 1 - -#include - -#endif /* sys/trap.h */ diff --git a/sysdeps/sparc/sysdep.h b/sysdeps/sparc/sysdep.h deleted file mode 100644 index 245e5cc57f..0000000000 --- a/sysdeps/sparc/sysdep.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define _SYSDEPS_SYSDEP_H 1 -#include - -#ifdef __ASSEMBLER__ - -#define SPARC_PIC_THUNK(reg) \ - .ifndef __sparc_get_pc_thunk.reg; \ - .section .text.__sparc_get_pc_thunk.reg,"axG",@progbits,__sparc_get_pc_thunk.reg,comdat; \ - .align 32; \ - .weak __sparc_get_pc_thunk.reg; \ - .hidden __sparc_get_pc_thunk.reg; \ - .type __sparc_get_pc_thunk.reg, #function; \ -__sparc_get_pc_thunk.reg: \ - jmp %o7 + 8; \ - add %o7, %reg, %##reg; \ - .previous; \ - .endif; - -/* The "-4" and "+4" offsets against _GLOBAL_OFFSET_TABLE_ are - critical since they represent the offset from the thunk call to the - instruction containing the _GLOBAL_OFFSET_TABLE_ reference. - Therefore these instructions cannot be moved around without - appropriate adjustments to those offsets. - - Furthermore, these expressions are special in another regard. When - the assembler sees a reference to _GLOBAL_OFFSET_TABLE_ inside of - a %hi() or %lo(), it emits a PC-relative relocation. This causes - R_SPARC_HI22 to turn into R_SPARC_PC22, and R_SPARC_LO10 to turn into - R_SPARC_PC10, respectively. - - Even when v9 we use a call sequence instead of using "rd %pc" because - RDPC is extremely expensive and incurs a full pipeline flush. */ - -#define SPARC_PIC_THUNK_CALL(reg) \ - sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %##reg; \ - call __sparc_get_pc_thunk.reg; \ - or %##reg, %lo(_GLOBAL_OFFSET_TABLE_+4), %##reg; - -#define SETUP_PIC_REG(reg) \ - SPARC_PIC_THUNK(reg) \ - SPARC_PIC_THUNK_CALL(reg) - -#define SETUP_PIC_REG_LEAF(reg, tmp) \ - SPARC_PIC_THUNK(reg) \ - mov %o7, %##tmp; \ - SPARC_PIC_THUNK_CALL(reg); \ - mov %##tmp, %o7; - -#undef ENTRY -#define ENTRY(name) \ - .align 4; \ - .global C_SYMBOL_NAME(name); \ - .type name, @function; \ -C_LABEL(name) \ - cfi_startproc; - -#undef END -#define END(name) \ - cfi_endproc; \ - .size name, . - name - -#undef LOC -#define LOC(name) .L##name - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/tile/Implies b/sysdeps/tile/Implies deleted file mode 100644 index 5b29b26128..0000000000 --- a/sysdeps/tile/Implies +++ /dev/null @@ -1,2 +0,0 @@ -ieee754/dbl-64 -ieee754/flt-32 diff --git a/sysdeps/tile/Makefile b/sysdeps/tile/Makefile deleted file mode 100644 index 3cd4d1e752..0000000000 --- a/sysdeps/tile/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# We don't support long doubles as a distinct type. We don't need to set -# this variable; it's here mostly for documentational purposes. - -long-double-fcts = no - -ifeq ($(subdir),gmon) -sysdep_routines += _mcount -endif - -ifeq ($(subdir),elf) -# Extra shared linker files to link only into dl-allobjs.so. -sysdep-rtld-routines += dl-start __tls_get_addr -endif diff --git a/sysdeps/tile/Versions b/sysdeps/tile/Versions deleted file mode 100644 index b275d7ff3b..0000000000 --- a/sysdeps/tile/Versions +++ /dev/null @@ -1,6 +0,0 @@ -libc { - GLIBC_2.12 { - # name requested by gcc community. - __mcount; - } -} diff --git a/sysdeps/tile/__longjmp.S b/sysdeps/tile/__longjmp.S deleted file mode 100644 index c9902b1b31..0000000000 --- a/sysdeps/tile/__longjmp.S +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -/* PL to return to via iret in longjmp */ -#define RETURN_PL 0 - - .text -ENTRY (__longjmp) - FEEDBACK_ENTER(__longjmp) - -#define RESTORE(r) { LD r, r0 ; ADDI_PTR r0, r0, REGSIZE } - FOR_EACH_CALLEE_SAVED_REG(RESTORE) - - /* Make longjmp(buf, 0) return "1" instead. - At the same time, construct our iret context; we set ICS so - we can validly load EX_CONTEXT for iret without being - interrupted halfway through. */ - { - LD r2, r0 /* retrieve ICS bit from jmp_buf */ - movei r3, 1 - CMPEQI r0, r1, 0 - } - { - mtspr INTERRUPT_CRITICAL_SECTION, r3 - shli r2, r2, SPR_EX_CONTEXT_0_1__ICS_SHIFT - } - { - mtspr EX_CONTEXT_0_0, lr - ori r2, r2, RETURN_PL - } - { - or r0, r1, r0 - mtspr EX_CONTEXT_0_1, r2 - } - iret - jrp lr /* Keep the backtracer happy. */ -END (__longjmp) diff --git a/sysdeps/tile/__tls_get_addr.S b/sysdeps/tile/__tls_get_addr.S deleted file mode 100644 index 3b2b95522f..0000000000 --- a/sysdeps/tile/__tls_get_addr.S +++ /dev/null @@ -1,152 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -#if __WORDSIZE == 64 -#define LOG_SIZEOF_DTV_T 4 -#else -#define LOG_SIZEOF_DTV_T 3 -#endif - -/* On entry, r0 points to two words, the module and the offset. - On return, r0 holds the pointer to the relevant TLS memory. - Only registers r25..r29 are clobbered by the call. */ - - .text -ENTRY (__tls_get_addr) - { - lnk r25 - ADDI_PTR r27, tp, DTV_OFFSET - } -.Llnk: -#ifdef __tilegx__ - { - LD_PTR r27, r27 /* r27 = THREAD_DTV() */ - moveli r26, hw1_last(_rtld_local + TLS_GENERATION_OFFSET - .Llnk) - } - shl16insli r26, r26, hw0(_rtld_local + TLS_GENERATION_OFFSET - .Llnk) - { - ADD_PTR r25, r25, r26 - LD_PTR r26, r0 /* r26 = ti_module */ - } -#else - { - LD_PTR r27, r27 /* r27 = THREAD_DTV() */ - addli r25, r25, lo16(_rtld_local + TLS_GENERATION_OFFSET - .Llnk) - } - { - auli r25, r25, ha16(_rtld_local + TLS_GENERATION_OFFSET - .Llnk) - LD_PTR r26, r0 /* r26 = ti_module */ - } -#endif - LD_PTR r25, r25 /* r25 = DL(dl_tls_generation) */ - { - LD_PTR r28, r27 /* r28 = THREAD_DTV()->counter */ - ADDI_PTR r29, r0, __SIZEOF_POINTER__ - } - { - LD_PTR r29, r29 /* r29 = ti_offset */ - CMPEQ r25, r28, r25 /* r25 nonzero if generation OK */ - shli r28, r26, LOG_SIZEOF_DTV_T /* byte index into dtv array */ - } - { - BEQZ r25, .Lslowpath - CMPEQI r25, r26, -1 /* r25 nonzero if ti_module invalid */ - } - { - BNEZ r25, .Lslowpath - ADD_PTR r28, r28, r27 /* pointer into module array */ - } - LD_PTR r26, r28 /* r26 = module TLS pointer */ - CMPEQI r25, r26, -1 /* check r26 == TLS_DTV_UNALLOCATED */ - BNEZ r25, .Lslowpath - { - ADD_PTR r0, r26, r29 - jrp lr - } - -.Lslowpath: - { - ST sp, lr - ADDLI_PTR r29, sp, - (25 * REGSIZE) - } - cfi_offset (lr, 0) - { - ST r29, sp - ADDLI_PTR sp, sp, - (26 * REGSIZE) - } - cfi_def_cfa_offset (26 * REGSIZE) - ADDI_PTR r29, sp, (2 * REGSIZE) - { ST r29, r1; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r2; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r3; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r4; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r5; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r6; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r7; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r8; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r9; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r10; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r11; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r12; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r13; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r14; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r15; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r16; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r17; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r18; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r19; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r20; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r21; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r22; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r23; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r24; ADDI_PTR r29, r29, REGSIZE } - .hidden __tls_get_addr_slow - jal __tls_get_addr_slow - ADDI_PTR r29, sp, (2 * REGSIZE) - { LD r1, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r2, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r3, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r4, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r5, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r6, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r7, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r8, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r9, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r10, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r11, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r12, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r13, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r14, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r15, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r16, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r17, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r18, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r19, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r20, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r21, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r22, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r23, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r24, r29; ADDLI_PTR sp, sp, (26 * REGSIZE) } - cfi_def_cfa_offset (0) - LD lr, sp - jrp lr -END (__tls_get_addr) diff --git a/sysdeps/tile/_mcount.S b/sysdeps/tile/_mcount.S deleted file mode 100644 index c350084630..0000000000 --- a/sysdeps/tile/_mcount.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - Based on work contributed by David Mosberger (davidm@cs.arizona.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Assembly stub to invoke __mcount_internal(). Compiler-generated - code calls mcount after executing a function's prologue, placing - the "lr" register in "r10" for the call. As a result "lr" is the - function that invoked mcount, and "r10" is mcount's caller's - caller. However, we have to save all the parameter registers here - before invoking _mcount_internal. Callee-save and temporary - registers need no special attention. We save r10 and restore it to - lr on the way out, to properly handle the case of ENTRY() in - assembly code, before lr is saved. We use the name __mcount since - the gcc community prefers using the reserved namespace. */ - -#include - - .text -ENTRY(__mcount) - { - ST sp, lr - ADDI_PTR r29, sp, - (12 * REGSIZE) - } - cfi_offset (lr, 0) - { - ADDI_PTR sp, sp, - (13 * REGSIZE) - ST r29, sp - ADDI_PTR r29, r29, REGSIZE - } - cfi_def_cfa_offset (13 * REGSIZE) - { ST r29, r0; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r1; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r2; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r3; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r4; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r5; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r6; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r7; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r8; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r9; ADDI_PTR r29, r29, REGSIZE } - { ST r29, r10; ADDI_PTR r29, r29, REGSIZE; move r0, r10 } - { - move r1, lr - jal __mcount_internal - } - { - ADDI_PTR r29, sp, (2 * REGSIZE) - } - { LD r0, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r1, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r2, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r3, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r4, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r5, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r6, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r7, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r8, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r9, r29; ADDI_PTR r29, r29, REGSIZE } - { LD r10, r29; ADDI_PTR sp, sp, (13 * REGSIZE) } - cfi_def_cfa_offset (0) - { - LD lr, sp - } - { - move lr, r10 - jrp lr - } -END(__mcount) - -#undef mcount -weak_alias (__mcount, _mcount) /* exported in gmon/Versions */ -weak_alias (__mcount, mcount) /* exported in stdlib/Versions */ diff --git a/sysdeps/tile/abort-instr.h b/sysdeps/tile/abort-instr.h deleted file mode 100644 index 0f57da5198..0000000000 --- a/sysdeps/tile/abort-instr.h +++ /dev/null @@ -1,2 +0,0 @@ -/* An instruction which should crash any program is `hlt'. */ -#define ABORT_INSTRUCTION asm ("ill") diff --git a/sysdeps/tile/atomic-machine.h b/sysdeps/tile/atomic-machine.h deleted file mode 100644 index 32277c960f..0000000000 --- a/sysdeps/tile/atomic-machine.h +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* The sub-architecture headers provide definitions for these macros - that work for "int" and "long" size values only: - - atomic_compare_and_exchange_val_acq() - atomic_exchange_acq() - atomic_exchange_and_add() - atomic_and_val() - atomic_or_val() - atomic_decrement_if_positive() [tilegx only] - - Here we provide generic definitions true for all Tilera chips. */ - -#include -#include - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -/* Barrier macro. */ -#define atomic_full_barrier() __sync_synchronize() - -/* APIs with "release" semantics. */ -#define atomic_compare_and_exchange_val_rel(mem, n, o) \ - ({ \ - atomic_full_barrier (); \ - atomic_compare_and_exchange_val_acq ((mem), (n), (o)); \ - }) -#define atomic_exchange_rel(mem, n) \ - ({ \ - atomic_full_barrier (); \ - atomic_exchange_acq ((mem), (n)); \ - }) - -/* Various macros that should just be synonyms. */ -#define catomic_exchange_and_add atomic_exchange_and_add -#define atomic_and(mem, mask) ((void) atomic_and_val ((mem), (mask))) -#define catomic_and atomic_and -#define atomic_or(mem, mask) ((void) atomic_or_val ((mem), (mask))) -#define catomic_or atomic_or - -/* atomic_bit_test_set in terms of atomic_or_val. */ -#define atomic_bit_test_set(mem, bit) \ - ({ __typeof (*(mem)) __att0_mask = ((__typeof (*(mem))) 1 << (bit)); \ - atomic_or_val ((mem), __att0_mask) & __att0_mask; }) - -/* - * This non-existent symbol is called for unsupporrted sizes, - * indicating a bug in the caller. - */ -extern int __atomic_error_bad_argument_size(void) - __attribute__ ((warning ("bad sizeof atomic argument"))); diff --git a/sysdeps/tile/backtrace.c b/sysdeps/tile/backtrace.c deleted file mode 100644 index 27ce597b39..0000000000 --- a/sysdeps/tile/backtrace.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/tile/bits/byteswap.h b/sysdeps/tile/bits/byteswap.h deleted file mode 100644 index ffbbceaa11..0000000000 --- a/sysdeps/tile/bits/byteswap.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#ifndef _BITS_BYTESWAP_H -#define _BITS_BYTESWAP_H 1 - -#include - -/* gcc __builtin_bswap64() can constant-fold, etc, so always use it. */ -#define __bswap_16(x) ((unsigned short)(__builtin_bswap32(x) >> 16)) -#define __bswap_32(x) ((unsigned int)__builtin_bswap32(x)) -#define __bswap_64(x) ((__uint64_t)__builtin_bswap64(x)) - -#define __bswap_constant_16(x) __bswap_16(x) -#define __bswap_constant_32(x) __bswap_32(x) -#define __bswap_constant_64(x) __bswap_64(x) - -#endif /* _BITS_BYTESWAP_H */ diff --git a/sysdeps/tile/bits/endian.h b/sysdeps/tile/bits/endian.h deleted file mode 100644 index 835042a7ac..0000000000 --- a/sysdeps/tile/bits/endian.h +++ /dev/null @@ -1,11 +0,0 @@ -/* Set endianness for tile. */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#if defined __BIG_ENDIAN__ -# define __BYTE_ORDER __BIG_ENDIAN -#else -# define __BYTE_ORDER __LITTLE_ENDIAN -#endif diff --git a/sysdeps/tile/bits/fenv.h b/sysdeps/tile/bits/fenv.h deleted file mode 100644 index 6bbbffc3e4..0000000000 --- a/sysdeps/tile/bits/fenv.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - -/* The TILE-Gx hardware does not provide floating-point exception - handling, and TILEPro does not support any floating-point operations. */ -#define FE_ALL_EXCEPT 0 - -/* TILE-Gx supports only round-to-nearest. The software - floating-point support also acts this way. */ -enum - { - __FE_UNDEFINED = 0, - - FE_TONEAREST = -#define FE_TONEAREST 1 - FE_TONEAREST, - }; - -/* Type representing exception flags (if there were any). */ -typedef unsigned int fexcept_t; - -/* Type representing floating-point environment. */ -typedef unsigned int fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1l) - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef unsigned int femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) -1L) -#endif diff --git a/sysdeps/tile/bits/link.h b/sysdeps/tile/bits/link.h deleted file mode 100644 index d29725892e..0000000000 --- a/sysdeps/tile/bits/link.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - -#define __need_int_reg_t -#include - - -/* Registers for entry into PLT. */ -typedef struct La_tile_regs -{ - __uint_reg_t lr_reg[10]; -} La_tile_regs; - -/* Return values for calls from PLT. */ -typedef struct La_tile_retval -{ - /* Up to ten registers can be used for a return value (e.g. small struct). */ - __uint_reg_t lrv_reg[10]; -} La_tile_retval; - - -__BEGIN_DECLS - -extern ElfW(Addr) la_tile_gnu_pltenter (ElfW(Sym) *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_tile_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_tile_gnu_pltexit (ElfW(Sym) *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_tile_regs *__inregs, - La_tile_retval *__outregs, - const char *__symname); - -__END_DECLS diff --git a/sysdeps/tile/bits/mathinline.h b/sysdeps/tile/bits/mathinline.h deleted file mode 100644 index 5692d91004..0000000000 --- a/sysdeps/tile/bits/mathinline.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#ifndef __extern_always_inline -# define __MATH_INLINE __inline -#else -# define __MATH_INLINE __extern_always_inline -#endif - - -#if defined __USE_ISOC99 && defined __GNUC__ - -/* Test for negative number. Used in the signbit() macro. */ -__MATH_INLINE int -__NTH (__signbitf (float __x)) -{ - return __builtin_signbitf (__x); -} -__MATH_INLINE int -__NTH (__signbit (double __x)) -{ - return __builtin_signbit (__x); -} - -#endif diff --git a/sysdeps/tile/bits/setjmp.h b/sysdeps/tile/bits/setjmp.h deleted file mode 100644 index e9efc3b5ef..0000000000 --- a/sysdeps/tile/bits/setjmp.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Define the machine-dependent type `jmp_buf'. TILE version. */ -#ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include directly; use instead." -#endif - -#ifndef _ASM - -#define __need_int_reg_t -#include - -typedef __uint_reg_t __jmp_buf[32]; - -#endif - -#endif /* bits/setjmp.h */ diff --git a/sysdeps/tile/bsd-_setjmp.S b/sysdeps/tile/bsd-_setjmp.S deleted file mode 100644 index 4e6a2da560..0000000000 --- a/sysdeps/tile/bsd-_setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* _setjmp is in setjmp.S */ diff --git a/sysdeps/tile/bsd-setjmp.S b/sysdeps/tile/bsd-setjmp.S deleted file mode 100644 index 1da848d2f1..0000000000 --- a/sysdeps/tile/bsd-setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* setjmp is in setjmp.S */ diff --git a/sysdeps/tile/bzero.S b/sysdeps/tile/bzero.S deleted file mode 100644 index a2c3bd4661..0000000000 --- a/sysdeps/tile/bzero.S +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .text -ENTRY(__bzero) - FEEDBACK_ENTER(__bzero) - { - move r2, r1 - move r1, zero - } - j __memset -END(__bzero) -weak_alias (__bzero, bzero) diff --git a/sysdeps/tile/configure b/sysdeps/tile/configure deleted file mode 100644 index 534c7dbc5d..0000000000 --- a/sysdeps/tile/configure +++ /dev/null @@ -1,7 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/tile. - -# We can always access static and hidden symbols in a position independent way. -$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h - -# work around problem with autoconf and empty lines at the end of files diff --git a/sysdeps/tile/configure.ac b/sysdeps/tile/configure.ac deleted file mode 100644 index 6e246a3bc9..0000000000 --- a/sysdeps/tile/configure.ac +++ /dev/null @@ -1,6 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/tile. - -# We can always access static and hidden symbols in a position independent way. -AC_DEFINE(PI_STATIC_AND_HIDDEN) -# work around problem with autoconf and empty lines at the end of files diff --git a/sysdeps/tile/crti.S b/sysdeps/tile/crti.S deleted file mode 100644 index 522373aff5..0000000000 --- a/sysdeps/tile/crti.S +++ /dev/null @@ -1,124 +0,0 @@ -/* Special .init and .fini section support for tile. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - - .section .init,"ax",@progbits - .align 8 - .globl _init - .type _init, @function -_init: - { - move r29, sp - ADDI_PTR r28, sp, -REGSIZE - ST sp, lr - } - ADDI_PTR sp, sp, -(2 * REGSIZE) - ST r28, r29 -#if PREINIT_FUNCTION_WEAK - lnk r2 -0: -# ifdef __tilegx__ - moveli r1, hw2_last(_GLOBAL_OFFSET_TABLE_ - 0b) - { - shl16insli r1, r1, hw1(_GLOBAL_OFFSET_TABLE_ - 0b) - moveli r0, hw1_last_got(PREINIT_FUNCTION) - } - { - shl16insli r1, r1, hw0(_GLOBAL_OFFSET_TABLE_ - 0b) - shl16insli r0, r0, hw0_got(PREINIT_FUNCTION) - } -# else - { - moveli r1, lo16(_GLOBAL_OFFSET_TABLE_ - 0b) - moveli r0, got_lo16(PREINIT_FUNCTION) - } - { - auli r1, r1, ha16(_GLOBAL_OFFSET_TABLE_ - 0b) - auli r0, r0, got_ha16(PREINIT_FUNCTION) - } -# endif - ADD_PTR r0, r0, r1 - ADD_PTR r0, r0, r2 - LD_PTR r0, r0 - BEQZ r0, .Lno_weak_fn - jalr r0 -#elif defined(__tilegx__) && !defined(NO_PLT_PCREL) - /* Since we are calling from the start of the object to the PLT, - call by loading the full address into a register. */ - lnk r2 -0: - moveli r0, hw2_last_plt(PREINIT_FUNCTION - 0b) - shl16insli r0, r0, hw1_plt(PREINIT_FUNCTION - 0b) - shl16insli r0, r0, hw0_plt(PREINIT_FUNCTION - 0b) - add r0, r0, r2 - jalr r0 -#else - jal plt(PREINIT_FUNCTION) -#endif -.Lno_weak_fn: - - .section .fini,"ax",@progbits - .align 8 - .globl _fini - .type _fini, @function -_fini: - { - move r29, sp - ADDI_PTR r28, sp, -REGSIZE - ST sp, lr - } - ADDI_PTR sp, sp, -(2 * REGSIZE) - ST r28, r29 diff --git a/sysdeps/tile/crtn.S b/sysdeps/tile/crtn.S deleted file mode 100644 index 53c6e40d06..0000000000 --- a/sysdeps/tile/crtn.S +++ /dev/null @@ -1,55 +0,0 @@ -/* Special .init and .fini section support for tile. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - -#include - - .section .init,"ax",@progbits - ADDI_PTR r29, sp, (2 * REGSIZE) - { - ADDI_PTR sp, sp, (2 * REGSIZE) - LD lr, r29 - } - jrp lr - - .section .fini,"ax",@progbits - ADDI_PTR r29, sp, (2 * REGSIZE) - { - ADDI_PTR sp, sp, (2 * REGSIZE) - LD lr, r29 - } - jrp lr diff --git a/sysdeps/tile/dl-lookupcfg.h b/sysdeps/tile/dl-lookupcfg.h deleted file mode 100644 index 18a816ec89..0000000000 --- a/sysdeps/tile/dl-lookupcfg.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define DL_UNMAP_IS_SPECIAL - -#include_next - -struct link_map; - -void internal_function _dl_unmap (struct link_map *map); - -#define DL_UNMAP(map) _dl_unmap (map) diff --git a/sysdeps/tile/dl-machine.h b/sysdeps/tile/dl-machine.h deleted file mode 100644 index c1d784548c..0000000000 --- a/sysdeps/tile/dl-machine.h +++ /dev/null @@ -1,919 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - Based on work contributed by by Carl Pederson & Martin Schwidefsky. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#ifdef __tilegx__ -#define ELF_MACHINE_NAME "tilegx" -#else -#define ELF_MACHINE_NAME "tilepro" -#endif - -#include -#include -#include -#include -#include -#include - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const ElfW(Ehdr) *ehdr) -{ -#if defined __tilegx__ - if (ehdr->e_machine != EM_TILEGX) - return 0; -# if __WORDSIZE == 32 - return (ehdr->e_ident[EI_CLASS] == ELFCLASS32); -# else - return (ehdr->e_ident[EI_CLASS] == ELFCLASS64); -# endif -#elif defined __tilepro__ - return ehdr->e_machine == EM_TILEPRO; -#else -# error "Unknown tile architecture." -#endif -} - - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. This must be inlined in a function which - uses global data. */ - -static inline ElfW(Addr) -elf_machine_dynamic (void) -{ - ElfW(Addr) *got; - -#ifdef __tilegx__ - ElfW(Addr) tmp; - asm( " { lnk %0; moveli %1, hw2_last(_GLOBAL_OFFSET_TABLE_ - 1f) }\n" - "1: shl16insli %1, %1, hw1(_GLOBAL_OFFSET_TABLE_ - 1b)\n" - " shl16insli %1, %1, hw0(_GLOBAL_OFFSET_TABLE_ - 1b)\n" - " add %0, %0, %1" - : "=r" (got), "=r" (tmp)); -#else - asm( " lnk %0\n" - "1: addli %0, %0, lo16(_GLOBAL_OFFSET_TABLE_ - 1b)\n" - " auli %0, %0, ha16(_GLOBAL_OFFSET_TABLE_ - 1b)" - : "=r" (got)); -#endif - - return *got; -} - - -/* Return the run-time load address of the shared object. */ -static inline ElfW(Addr) -elf_machine_load_address (void) -{ - ElfW(Addr) *got; - ElfW(Addr) dynamic; - -#ifdef __tilegx__ - ElfW(Addr) tmp; - asm( " lnk %2\n" - "1: {\n" - " moveli %0, hw2_last(_GLOBAL_OFFSET_TABLE_ - 1b)\n" - " moveli %1, hw2_last(_DYNAMIC - 1b)\n" - " }\n" - " {\n" - " shl16insli %0, %0, hw1(_GLOBAL_OFFSET_TABLE_ - 1b)\n" - " shl16insli %1, %1, hw1(_DYNAMIC - 1b)\n" - " }\n" - " {\n" - " shl16insli %0, %0, hw0(_GLOBAL_OFFSET_TABLE_ - 1b)\n" - " shl16insli %1, %1, hw0(_DYNAMIC - 1b)\n" - " }\n" - " {\n" - " add %0, %0, %2\n" - " add %1, %1, %2\n" - " }" - : "=r" (got), "=r" (dynamic), "=r" (tmp)); -#else - asm( " lnk %0\n" - "1: {\n" - " addli %0, %0, lo16(_GLOBAL_OFFSET_TABLE_ - 1b)\n" - " addli %1, %0, lo16(_DYNAMIC - 1b)\n" - " }\n" - " {\n" - " auli %0, %0, ha16(_GLOBAL_OFFSET_TABLE_ - 1b)\n" - " auli %1, %1, ha16(_DYNAMIC - 1b)\n" - " }\n" - : "=r" (got), "=r" (dynamic)); -#endif - - return dynamic - *got; -} - -/* Flush some range of the instruction cache. If invoked prior to - actually setting dl_pagesize, we conservatively use 4KB, which - is the smallest page size we could plausibly be running with. */ -static inline void -_dl_flush_icache (const void *addr, unsigned long size) -{ - invalidate_icache (addr, size, GLRO(dl_pagesize) ? : 4096); -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int __attribute__ ((unused)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - ElfW(Addr) *gotplt; - extern void _dl_runtime_resolve (ElfW(Word)); - extern void _dl_runtime_profile (ElfW(Word)); - - if (l->l_info[DT_JMPREL] && lazy) - { - gotplt = (ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]); - - /* The GOT entries for functions in the PLT have not yet been filled - in. Their initial contents will arrange when called to put in - registers an offset into the .rel.plt section, and gotplt[0], then - jump to gotplt[1]. */ - - /* Identify this shared object. */ - gotplt[0] = (ElfW(Addr)) l; - - /* The gotplt[1] entry contains the address of a function which gets - called to get the address of a so far unresolved function and jump - to it. The profiling extension of the dynamic linker allows to - intercept the calls to collect information. In this case we don't - store the address in the GOTPLT so that all future calls also end - in this function. */ - if (__builtin_expect (profile, 0)) - { - gotplt[1] = (ElfW(Addr)) &_dl_runtime_profile; - - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - /* This is the object we are looking for. Say that we really - want profiling and the timers are started. */ - GL(dl_profile_map) = l; - } - else - /* This function will get called to fix up the GOTPLT entry - indicated by the offset on the stack, and then jump to the - resolved address. */ - gotplt[1] = (ElfW(Addr)) &_dl_runtime_resolve; - } - - return lazy; -} - -#if __WORDSIZE == 32 -/* Mask identifying addresses reserved for the user program, - where the dynamic linker should not map anything. */ -#define ELF_MACHINE_USER_ADDRESS_MASK 0xf8000000UL -#endif - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START asm (".globl _dl_start"); - -#ifndef RTLD_START_SPECIAL_INIT -#define RTLD_START_SPECIAL_INIT /* nothing */ -#endif - -/* Wrap a generic Tilera relocation type. */ -#ifdef __tilegx__ -#define R_TILE(x) R_TILEGX_##x -#define __R_TILE_TLS(x,c) R_TILEGX_TLS_##x##c -#define _R_TILE_TLS(x,c) __R_TILE_TLS(x,c) -#define R_TILE_TLS(x) _R_TILE_TLS(x,__ELF_NATIVE_CLASS) -#else -#define R_TILE(x) R_TILEPRO_##x -#define R_TILE_TLS(x) R_TILEPRO_TLS_##x##32 -#endif - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or - TLS variable, so undefined references should not be allowed to - define the value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. */ -#define elf_machine_type_class(type) \ - ((((type) == R_TILE(JMP_SLOT) || (type) == R_TILE_TLS(DTPMOD) \ - || (type) == R_TILE_TLS(DTPOFF) || (type) == R_TILE_TLS(TPOFF)) \ - * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_TILE(COPY)) * ELF_RTYPE_CLASS_COPY)) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_TILE(JMP_SLOT) - -/* TILE never uses Elf32_Rel relocations. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -/* We define an initialization functions. This is called very early in - _dl_sysdep_start. */ -#define DL_PLATFORM_INIT dl_platform_init () - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ - if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') - /* Avoid an empty string which would disturb us. */ - GLRO(dl_platform) = NULL; -} - -static inline ElfW(Addr) -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const ElfW(Rela) *reloc, - ElfW(Addr) *reloc_addr, ElfW(Addr) value) -{ - return *reloc_addr = value; -} - -/* Return the final value of a plt relocation. */ -static inline ElfW(Addr) -elf_machine_plt_value (struct link_map *map, const ElfW(Rela) *reloc, - ElfW(Addr) value) -{ - return value; -} - -/* Support notifying the simulator about new objects. */ -void internal_function _dl_after_load (struct link_map *l); -#define DL_AFTER_LOAD _dl_after_load - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER tile_gnu_pltenter -#define ARCH_LA_PLTEXIT tile_gnu_pltexit - -#endif /* !dl_machine_h */ - - -#ifdef RESOLVE_MAP - -struct reloc_howto -{ - /* Right shift operand by this number of bits. */ - unsigned char right_shift; - -#ifdef __tilegx__ - /* If nonzero, this is updating a code bundle. */ - unsigned char is_bundle_update; -#else - /* If nonzero, add 0x8000 to the value. */ - unsigned char add_0x8000; -#endif - - /* If nonzero, subtract the containing address from the address. */ - unsigned char is_pcrel; - - /* Size in bytes, or 0 if this table entry should be ignored. */ - unsigned char byte_size; -}; - -/* Relocation information. Cannot contain create_* function pointers - because then the table would not be position-independent. */ -static const struct reloc_howto howto[] = -{ -#ifdef __tilegx__ - -# if __WORDSIZE == 32 - /* The GX -m32 loader only handles 32-bit types, so it will be confused - by shifts larger than that. We convert them to just sign-extend; - they usually indicate a program bug or missed optimization, but we - have to handle them correctly anyway. */ -# define S32 31 -# define S48 31 -# else -# define S32 32 -# define S48 48 -# endif - - /* R_TILEGX_NONE */ { 0, 0, 0, 0 }, - /* R_TILEGX_64 */ { 0, 0, 0, 8 }, - /* R_TILEGX_32 */ { 0, 0, 0, 4 }, - /* R_TILEGX_16 */ { 0, 0, 0, 2 }, - /* R_TILEGX_8 */ { 0, 0, 0, 1 }, - /* R_TILEGX_64_PCREL */ { 0, 0, 1, 8 }, - /* R_TILEGX_32_PCREL */ { 0, 0, 1, 4 }, - /* R_TILEGX_16_PCREL */ { 0, 0, 1, 2 }, - /* R_TILEGX_8_PCREL */ { 0, 0, 1, 1 }, - /* R_TILEGX_HW0 */ { 0, 0, 0, 0 }, - /* R_TILEGX_HW1 */ { 16, 0, 0, 0 }, - /* R_TILEGX_HW2 */ { S32, 0, 0, 0 }, - /* R_TILEGX_HW3 */ { S48, 0, 0, 0 }, - /* R_TILEGX_HW0_LAST */ { 0, 0, 0, 0 }, - /* R_TILEGX_HW1_LAST */ { 16, 0, 0, 0 }, - /* R_TILEGX_HW2_LAST */ { S32, 0, 0, 0 }, - /* R_TILEGX_COPY */ { 0, 0, 0, 0 }, - /* R_TILEGX_GLOB_DAT */ { 0, 0, 0, 8 }, - /* R_TILEGX_JMP_SLOT */ { 0, 0, 0, 0 }, - /* R_TILEGX_RELATIVE */ { 0, 0, 0, 0 }, - /* R_TILEGX_BROFF_X1 */ { 3, 1, 1, 8 }, - /* R_TILEGX_JUMPOFF_X1 */ { 3, 1, 1, 8 }, - /* R_TILEGX_JUMPOFF_X1_PLT */ { 3, 1, 1, 8 }, - /* R_TILEGX_IMM8_X0 */ { 0, 1, 0, 8 }, - /* R_TILEGX_IMM8_Y0 */ { 0, 1, 0, 8 }, - /* R_TILEGX_IMM8_X1 */ { 0, 1, 0, 8 }, - /* R_TILEGX_IMM8_Y1 */ { 0, 1, 0, 8 }, - /* R_TILEGX_DEST_IMM8_X1 */ { 0, 1, 0, 8 }, - /* R_TILEGX_MT_IMM14_X1 */ { 0, 1, 0, 8 }, - /* R_TILEGX_MF_IMM14_X1 */ { 0, 1, 0, 8 }, - /* R_TILEGX_MMSTART_X0 */ { 0, 1, 0, 8 }, - /* R_TILEGX_MMEND_X0 */ { 0, 1, 0, 8 }, - /* R_TILEGX_SHAMT_X0 */ { 0, 1, 0, 8 }, - /* R_TILEGX_SHAMT_X1 */ { 0, 1, 0, 8 }, - /* R_TILEGX_SHAMT_Y0 */ { 0, 1, 0, 8 }, - /* R_TILEGX_SHAMT_Y1 */ { 0, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW0 */ { 0, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW0 */ { 0, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW1 */ { 16, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW1 */ { 16, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW2 */ { S32, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW2 */ { S32, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW3 */ { S48, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW3 */ { S48, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW0_LAST */ { 0, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW0_LAST */ { 0, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW1_LAST */ { 16, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW1_LAST */ { 16, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW2_LAST */ { S32, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW2_LAST */ { S32, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW0_PCREL */ { 0, 1, 1, 8 }, - /* R_TILEGX_IMM16_X1_HW0_PCREL */ { 0, 1, 1, 8 }, - /* R_TILEGX_IMM16_X0_HW1_PCREL */ { 16, 1, 1, 8 }, - /* R_TILEGX_IMM16_X1_HW1_PCREL */ { 16, 1, 1, 8 }, - /* R_TILEGX_IMM16_X0_HW2_PCREL */ { S32, 1, 1, 8 }, - /* R_TILEGX_IMM16_X1_HW2_PCREL */ { S32, 1, 1, 8 }, - /* R_TILEGX_IMM16_X0_HW3_PCREL */ { S48, 1, 1, 8 }, - /* R_TILEGX_IMM16_X1_HW3_PCREL */ { S48, 1, 1, 8 }, - /* R_TILEGX_IMM16_X0_HW0_LAST_PCREL */ { 0, 1, 1, 8 }, - /* R_TILEGX_IMM16_X1_HW0_LAST_PCREL */ { 0, 1, 1, 8 }, - /* R_TILEGX_IMM16_X0_HW1_LAST_PCREL */ { 16, 1, 1, 8 }, - /* R_TILEGX_IMM16_X1_HW1_LAST_PCREL */ { 16, 1, 1, 8 }, - /* R_TILEGX_IMM16_X0_HW2_LAST_PCREL */ { S32, 1, 1, 8 }, - /* R_TILEGX_IMM16_X1_HW2_LAST_PCREL */ { S32, 1, 1, 8 }, - /* R_TILEGX_IMM16_X0_HW0_GOT */ { 0, 1, 0, 0 }, - /* R_TILEGX_IMM16_X1_HW0_GOT */ { 0, 1, 0, 0 }, - /* R_TILEGX_IMM16_X0_HW1_GOT */ { 16, 1, 0, 0 }, - /* R_TILEGX_IMM16_X1_HW1_GOT */ { 16, 1, 0, 0 }, - /* R_TILEGX_IMM16_X0_HW2_GOT */ { S32, 1, 0, 0 }, - /* R_TILEGX_IMM16_X1_HW2_GOT */ { S32, 1, 0, 0 }, - /* R_TILEGX_IMM16_X0_HW3_GOT */ { S48, 1, 0, 0 }, - /* R_TILEGX_IMM16_X1_HW3_GOT */ { S48, 1, 0, 0 }, - /* R_TILEGX_IMM16_X0_HW0_LAST_GOT */ { 0, 1, 0, 0 }, - /* R_TILEGX_IMM16_X1_HW0_LAST_GOT */ { 0, 1, 0, 0 }, - /* R_TILEGX_IMM16_X0_HW1_LAST_GOT */ { 16, 1, 0, 0 }, - /* R_TILEGX_IMM16_X1_HW1_LAST_GOT */ { 16, 1, 0, 0 }, - /* R_TILEGX_IMM16_X0_HW2_LAST_GOT */ { S32, 1, 0, 0 }, - /* R_TILEGX_IMM16_X1_HW2_LAST_GOT */ { S32, 1, 0, 0 }, - /* R_TILEGX_IMM16_X0_HW0_TLS_GD */ { 0, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW0_TLS_GD */ { 0, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW1_TLS_GD */ { 16, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW1_TLS_GD */ { 16, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW2_TLS_GD */ { S32, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW2_TLS_GD */ { S32, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW3_TLS_GD */ { S48, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW3_TLS_GD */ { S48, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD */{ 0, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD */{ 0, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD */{ 16, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD */{ 16, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD */{ S32, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD */{ S32, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW0_TLS_IE */ { 0, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW0_TLS_IE */ { 0, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW1_TLS_IE */ { 16, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW1_TLS_IE */ { 16, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW2_TLS_IE */ { S32, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW2_TLS_IE */ { S32, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW3_TLS_IE */ { S48, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW3_TLS_IE */ { S48, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE */{ 0, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE */{ 0, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE */{ 16, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE */{ 16, 1, 0, 8 }, - /* R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE */{ S32, 1, 0, 8 }, - /* R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE */{ S32, 1, 0, 8 }, - /* R_TILEGX_TLS_DTPMOD64 */ { 0, 0, 0, 0 }, - /* R_TILEGX_TLS_DTPOFF64 */ { 0, 0, 0, 0 }, - /* R_TILEGX_TLS_TPOFF64 */ { 0, 0, 0, 0 }, - /* R_TILEGX_TLS_DTPMOD32 */ { 0, 0, 0, 0 }, - /* R_TILEGX_TLS_DTPOFF32 */ { 0, 0, 0, 0 }, - /* R_TILEGX_TLS_TPOFF32 */ { 0, 0, 0, 0 } -#else - /* R_TILEPRO_NONE */ { 0, 0, 0, 0 }, - /* R_TILEPRO_32 */ { 0, 0, 0, 4 }, - /* R_TILEPRO_16 */ { 0, 0, 0, 2 }, - /* R_TILEPRO_8 */ { 0, 0, 0, 1 }, - /* R_TILEPRO_32_PCREL */ { 0, 0, 1, 4 }, - /* R_TILEPRO_16_PCREL */ { 0, 0, 1, 2 }, - /* R_TILEPRO_8_PCREL */ { 0, 0, 1, 1 }, - /* R_TILEPRO_LO16 */ { 0, 0, 0, 2 }, - /* R_TILEPRO_HI16 */ { 16, 0, 0, 2 }, - /* R_TILEPRO_HA16 */ { 16, 1, 0, 2 }, - /* R_TILEPRO_COPY */ { 0, 0, 0, 0 }, - /* R_TILEPRO_GLOB_DAT */ { 0, 0, 0, 4 }, - /* R_TILEPRO_JMP_SLOT */ { 0, 0, 0, 0 }, - /* R_TILEPRO_RELATIVE */ { 0, 0, 0, 0 }, - /* R_TILEPRO_BROFF_X1 */ { 3, 0, 1, 8 }, - /* R_TILEPRO_JOFFLONG_X1 */ { 3, 0, 1, 8 }, - /* R_TILEPRO_JOFFLONG_X1_PLT */ { 3, 0, 1, 8 }, - /* R_TILEPRO_IMM8_X0 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM8_Y0 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM8_X1 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM8_Y1 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_MT_IMM15_X1 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_MF_IMM15_X1 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X0 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X1 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X0_LO */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X1_LO */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X0_HI */ { 16, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X1_HI */ { 16, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X0_HA */ { 16, 1, 0, 8 }, - /* R_TILEPRO_IMM16_X1_HA */ { 16, 1, 0, 8 }, - /* R_TILEPRO_IMM16_X0_PCREL */ { 0, 0, 1, 8 }, - /* R_TILEPRO_IMM16_X1_PCREL */ { 0, 0, 1, 8 }, - /* R_TILEPRO_IMM16_X0_LO_PCREL */ { 0, 0, 1, 8 }, - /* R_TILEPRO_IMM16_X1_LO_PCREL */ { 0, 0, 1, 8 }, - /* R_TILEPRO_IMM16_X0_HI_PCREL */ { 16, 0, 1, 8 }, - /* R_TILEPRO_IMM16_X1_HI_PCREL */ { 16, 0, 1, 8 }, - /* R_TILEPRO_IMM16_X0_HA_PCREL */ { 16, 1, 1, 8 }, - /* R_TILEPRO_IMM16_X1_HA_PCREL */ { 16, 1, 1, 8 }, - /* R_TILEPRO_IMM16_X0_GOT */ { 0, 0, 0, 0 }, - /* R_TILEPRO_IMM16_X1_GOT */ { 0, 0, 0, 0 }, - /* R_TILEPRO_IMM16_X0_GOT_LO */ { 0, 0, 0, 0 }, - /* R_TILEPRO_IMM16_X1_GOT_LO */ { 0, 0, 0, 0 }, - /* R_TILEPRO_IMM16_X0_GOT_HI */ { 0, 0, 0, 0 }, - /* R_TILEPRO_IMM16_X1_GOT_HI */ { 0, 0, 0, 0 }, - /* R_TILEPRO_IMM16_X0_GOT_HA */ { 0, 0, 0, 0 }, - /* R_TILEPRO_IMM16_X1_GOT_HA */ { 0, 0, 0, 0 }, - /* R_TILEPRO_MMSTART_X0 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_MMEND_X0 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_MMSTART_X1 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_MMEND_X1 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_SHAMT_X0 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_SHAMT_X1 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_SHAMT_Y0 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_SHAMT_Y1 */ { 0, 0, 0, 8 }, - /* R_TILEPRO_SN_BROFF */ { 0, 0, 0, 0 }, - /* R_TILEPRO_SN_IMM8 */ { 0, 0, 0, 0 }, - /* R_TILEPRO_SN_UIMM8 */ { 0, 0, 0, 0 }, - /* R_TILEPRO_SN_BYTE0 */ { 0, 0, 0, 0 }, - /* R_TILEPRO_SN_BYTE1 */ { 0, 0, 0, 0 }, - /* R_TILEPRO_SN_BYTE2 */ { 0, 0, 0, 0 }, - /* R_TILEPRO_SN_BYTE3 */ { 0, 0, 0, 0 }, - /* R_TILEPRO_SN_SPCREL0 */ { 0, 0, 0, 0 }, - /* R_TILEPRO_SN_SPCREL1 */ { 0, 0, 0, 0 }, - /* R_TILEPRO_SN_SPCREL2 */ { 0, 0, 0, 0 }, - /* R_TILEPRO_SN_SPCREL3 */ { 0, 0, 0, 0 }, - /* R_TILEPRO_IMM16_X0_TLS_GD */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X1_TLS_GD */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X0_TLS_GD_LO */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X1_TLS_GD_LO */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X0_TLS_GD_HI */ { 16, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X1_TLS_GD_HI */ { 16, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X0_TLS_GD_HA */ { 16, 1, 0, 8 }, - /* R_TILEPRO_IMM16_X1_TLS_GD_HA */ { 16, 1, 0, 8 }, - /* R_TILEPRO_IMM16_X0_TLS_IE */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X1_TLS_IE */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X0_TLS_IE_LO */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X1_TLS_IE_LO */ { 0, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X0_TLS_IE_HI */ { 16, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X1_TLS_IE_HI */ { 16, 0, 0, 8 }, - /* R_TILEPRO_IMM16_X0_TLS_IE_HA */ { 16, 1, 0, 8 }, - /* R_TILEPRO_IMM16_X1_TLS_IE_HA */ { 16, 1, 0, 8 }, - /* R_TILEPRO_TLS_DTPMOD32 */ { 0, 0, 0, 0 }, - /* R_TILEPRO_TLS_DTPOFF32 */ { 0, 0, 0, 0 }, - /* R_TILEPRO_TLS_TPOFF32 */ { 0, 0, 0, 0 }, -#endif -}; - -#if __ELF_NATIVE_CLASS == 32 -#define ELFW_R_TYPE ELF32_R_TYPE -#define ELFW_ST_TYPE ELF32_ST_TYPE -#else -#define ELFW_R_TYPE ELF64_R_TYPE -#define ELFW_ST_TYPE ELF64_ST_TYPE -#endif - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ - -auto inline void __attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, - const ElfW(Sym) *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - ElfW(Addr) *const reloc_addr = reloc_addr_arg; - const unsigned int r_type = ELFW_R_TYPE (reloc->r_info); - -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC - if (__builtin_expect (r_type == R_TILE(RELATIVE), 0)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; - make the reference weak so static programs can still link. - This declaration cannot be done when compiling rtld.c - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the - common defn for _dl_rtld_map, which is incompatible with a - weak decl in the same file. */ -# ifndef SHARED - weak_extern (GL(dl_rtld_map)); -# endif - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ -# endif - *reloc_addr = map->l_addr + reloc->r_addend; - return; - } -#endif - - if (__builtin_expect (r_type == R_TILE(NONE), 0)) - return; - -#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP - const ElfW(Sym) *const refsym = sym; -#endif - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - ElfW(Addr) value; - - if (sym == NULL) - value = 0; - else if (ELFW_ST_TYPE (sym->st_info) == STT_SECTION) - value = map->l_addr; /* like a RELATIVE reloc */ - else - value = sym_map->l_addr + sym->st_value; - - if (sym != NULL - && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0) - && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) - && __builtin_expect (!skip_ifunc, 1)) - value = ((Elf64_Addr (*) (void)) value) (); - - switch (r_type) - { - case R_TILE(JMP_SLOT): - elf_machine_fixup_plt (map, 0, reloc, reloc_addr, - value + reloc->r_addend); - return; - -#ifndef RESOLVE_CONFLICT_FIND_MAP - case R_TILE_TLS(DTPMOD): -# ifdef RTLD_BOOTSTRAP - /* During startup the dynamic linker is always the module - with index 1. - XXX If this relocation is necessary move before RESOLVE - call. */ - *reloc_addr = 1; -# else - /* Get the information from the link map returned by the - resolv function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; -# endif - return; - case R_TILE_TLS(DTPOFF): -# ifndef RTLD_BOOTSTRAP - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ - if (sym != NULL) - *reloc_addr = sym->st_value + reloc->r_addend; -# endif - return; - case R_TILE_TLS(TPOFF): -# ifdef RTLD_BOOTSTRAP - *reloc_addr = sym->st_value + reloc->r_addend + map->l_tls_offset; -# else - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = (sym->st_value + reloc->r_addend - + sym_map->l_tls_offset); - } -#endif - return; -#endif /* use TLS */ - -#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP - /* Not needed in dl-conflict.c. */ - case R_TILE(COPY): - if (sym == NULL) - /* This can happen in trace mode if an object could not be found. */ - return; - if (__builtin_expect (sym->st_size > refsym->st_size, 0) - || (__builtin_expect (sym->st_size < refsym->st_size, 0) - && __builtin_expect (GLRO(dl_verbose), 0))) - { - const char *strtab; - - strtab = (const char *) D_PTR (map,l_info[DT_STRTAB]); - _dl_error_printf ("%s: Symbol `%s' has different size in shared" - " object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - return; -#endif - } - - /* All remaining relocations must be in the lookup table. */ - const struct reloc_howto *h = &howto[r_type]; - if ((unsigned int) r_type >= sizeof howto / sizeof howto[0] || - h->byte_size == 0) - { -#if !defined RTLD_BOOTSTRAP || defined _NDEBUG - /* We add these checks in the version to relocate ld.so only - if we are still debugging. */ - _dl_reloc_bad_type (map, r_type, 0); -#endif - return; - } - - value += reloc->r_addend; - - /* The lookup table entry knows how to perform this reloc. */ - if (h->is_pcrel) - value -= (ElfW(Addr)) reloc_addr; - -#ifndef __tilegx__ - if (h->add_0x8000) - value += 0x8000; -#endif - - value = ((long) value) >> h->right_shift; - - switch (h->byte_size) - { - case 1: - *(char *) reloc_addr = value; - return; - case 2: - *(short *) reloc_addr = value; - return; - case 4: - *(int *) reloc_addr = value; - return; -#ifdef __tilegx__ - case 8: - if (!h->is_bundle_update) - { - *(ElfW(Addr) *) reloc_addr = value; - return; - } -#endif - } - - /* We are updating a bundle, so use the function pointer that - swizzles the operand bits into the right location. */ - - tile_bundle_bits *p = (tile_bundle_bits *) reloc_addr; - tile_bundle_bits bits = *p; - -#define MUNGE_SIGNED(func, length) do { \ - bits = ((bits & ~create_##func (-1)) | create_##func (value)); \ - ElfW(Addr) result = get_##func (bits); \ - int signbits = __WORDSIZE - length; \ - result = (long) (result << signbits) >> signbits; \ - if (result != value) \ - _dl_signal_error (0, map->l_name, NULL, \ - "relocation value too large for " #func); \ - } while (0) - -#define MUNGE(func) MUNGE_SIGNED(func, __WORDSIZE) - -#define MUNGE_NOCHECK(func) \ - bits = ((bits & ~create_##func (-1)) | create_##func (value)) - - switch (r_type) - { -#ifdef __tilegx__ - case R_TILEGX_BROFF_X1: - MUNGE_SIGNED (BrOff_X1, 17); - break; - case R_TILEGX_JUMPOFF_X1: - case R_TILEGX_JUMPOFF_X1_PLT: - MUNGE_SIGNED (JumpOff_X1, 27); - break; - case R_TILEGX_IMM8_X0: - MUNGE_SIGNED (Imm8_X0, 8); - break; - case R_TILEGX_IMM8_Y0: - MUNGE_SIGNED (Imm8_Y0, 8); - break; - case R_TILEGX_IMM8_X1: - MUNGE_SIGNED (Imm8_X1, 8); - break; - case R_TILEGX_IMM8_Y1: - MUNGE_SIGNED (Imm8_Y1, 8); - break; - case R_TILEGX_MT_IMM14_X1: - MUNGE (MT_Imm14_X1); - break; - case R_TILEGX_MF_IMM14_X1: - MUNGE (MF_Imm14_X1); - break; - case R_TILEGX_IMM16_X0_HW0: - case R_TILEGX_IMM16_X0_HW1: - case R_TILEGX_IMM16_X0_HW2: - case R_TILEGX_IMM16_X0_HW3: - case R_TILEGX_IMM16_X0_HW0_PCREL: - case R_TILEGX_IMM16_X0_HW1_PCREL: - case R_TILEGX_IMM16_X0_HW2_PCREL: - case R_TILEGX_IMM16_X0_HW3_PCREL: - case R_TILEGX_IMM16_X0_HW0_TLS_GD: - case R_TILEGX_IMM16_X0_HW0_TLS_IE: - MUNGE_NOCHECK (Imm16_X0); - break; - case R_TILEGX_IMM16_X0_HW0_LAST: - case R_TILEGX_IMM16_X0_HW1_LAST: - case R_TILEGX_IMM16_X0_HW2_LAST: - case R_TILEGX_IMM16_X0_HW0_LAST_PCREL: - case R_TILEGX_IMM16_X0_HW1_LAST_PCREL: - case R_TILEGX_IMM16_X0_HW2_LAST_PCREL: - case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD: - case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD: - case R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE: - case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE: - MUNGE_SIGNED (Imm16_X0, 16); - break; - case R_TILEGX_IMM16_X1_HW0: - case R_TILEGX_IMM16_X1_HW1: - case R_TILEGX_IMM16_X1_HW2: - case R_TILEGX_IMM16_X1_HW3: - case R_TILEGX_IMM16_X1_HW0_PCREL: - case R_TILEGX_IMM16_X1_HW1_PCREL: - case R_TILEGX_IMM16_X1_HW2_PCREL: - case R_TILEGX_IMM16_X1_HW3_PCREL: - case R_TILEGX_IMM16_X1_HW0_TLS_GD: - case R_TILEGX_IMM16_X1_HW0_TLS_IE: - MUNGE_NOCHECK (Imm16_X1); - break; - case R_TILEGX_IMM16_X1_HW0_LAST: - case R_TILEGX_IMM16_X1_HW1_LAST: - case R_TILEGX_IMM16_X1_HW2_LAST: - case R_TILEGX_IMM16_X1_HW0_LAST_PCREL: - case R_TILEGX_IMM16_X1_HW1_LAST_PCREL: - case R_TILEGX_IMM16_X1_HW2_LAST_PCREL: - case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD: - case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD: - case R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE: - case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE: - MUNGE_SIGNED (Imm16_X1, 16); - break; - case R_TILEGX_MMSTART_X0: - MUNGE (BFStart_X0); - break; - case R_TILEGX_MMEND_X0: - MUNGE (BFEnd_X0); - break; - case R_TILEGX_SHAMT_X0: - MUNGE (ShAmt_X0); - break; - case R_TILEGX_SHAMT_X1: - MUNGE (ShAmt_X1); - break; - case R_TILEGX_SHAMT_Y0: - MUNGE (ShAmt_Y0); - break; - case R_TILEGX_SHAMT_Y1: - MUNGE (ShAmt_Y1); - break; -#else - case R_TILEPRO_BROFF_X1: - MUNGE_SIGNED (BrOff_X1, 17); - break; - case R_TILEPRO_JOFFLONG_X1: - case R_TILEPRO_JOFFLONG_X1_PLT: - MUNGE_NOCHECK (JOffLong_X1); /* holds full 32-bit value */ - break; - case R_TILEPRO_IMM8_X0: - MUNGE_SIGNED (Imm8_X0, 8); - break; - case R_TILEPRO_IMM8_Y0: - MUNGE_SIGNED (Imm8_Y0, 8); - break; - case R_TILEPRO_IMM8_X1: - MUNGE_SIGNED (Imm8_X1, 8); - break; - case R_TILEPRO_IMM8_Y1: - MUNGE_SIGNED (Imm8_Y1, 8); - break; - case R_TILEPRO_MT_IMM15_X1: - MUNGE (MT_Imm15_X1); - break; - case R_TILEPRO_MF_IMM15_X1: - MUNGE (MF_Imm15_X1); - break; - case R_TILEPRO_IMM16_X0_LO: - case R_TILEPRO_IMM16_X0_HI: - case R_TILEPRO_IMM16_X0_HA: - case R_TILEPRO_IMM16_X0_LO_PCREL: - case R_TILEPRO_IMM16_X0_HI_PCREL: - case R_TILEPRO_IMM16_X0_HA_PCREL: - case R_TILEPRO_IMM16_X0_TLS_GD_LO: - case R_TILEPRO_IMM16_X0_TLS_GD_HI: - case R_TILEPRO_IMM16_X0_TLS_GD_HA: - case R_TILEPRO_IMM16_X0_TLS_IE_LO: - case R_TILEPRO_IMM16_X0_TLS_IE_HI: - case R_TILEPRO_IMM16_X0_TLS_IE_HA: - MUNGE_NOCHECK (Imm16_X0); - break; - case R_TILEPRO_IMM16_X0: - case R_TILEPRO_IMM16_X0_PCREL: - case R_TILEPRO_IMM16_X0_TLS_GD: - case R_TILEPRO_IMM16_X0_TLS_IE: - MUNGE_SIGNED (Imm16_X0, 16); - break; - case R_TILEPRO_IMM16_X1_LO: - case R_TILEPRO_IMM16_X1_HI: - case R_TILEPRO_IMM16_X1_HA: - case R_TILEPRO_IMM16_X1_LO_PCREL: - case R_TILEPRO_IMM16_X1_HI_PCREL: - case R_TILEPRO_IMM16_X1_HA_PCREL: - case R_TILEPRO_IMM16_X1_TLS_GD_LO: - case R_TILEPRO_IMM16_X1_TLS_GD_HI: - case R_TILEPRO_IMM16_X1_TLS_GD_HA: - case R_TILEPRO_IMM16_X1_TLS_IE_LO: - case R_TILEPRO_IMM16_X1_TLS_IE_HI: - case R_TILEPRO_IMM16_X1_TLS_IE_HA: - MUNGE_NOCHECK (Imm16_X1); - break; - case R_TILEPRO_IMM16_X1: - case R_TILEPRO_IMM16_X1_PCREL: - case R_TILEPRO_IMM16_X1_TLS_GD: - case R_TILEPRO_IMM16_X1_TLS_IE: - MUNGE_SIGNED (Imm16_X1, 16); - break; - case R_TILEPRO_MMSTART_X0: - MUNGE (MMStart_X0); - break; - case R_TILEPRO_MMEND_X0: - MUNGE (MMEnd_X0); - break; - case R_TILEPRO_MMSTART_X1: - MUNGE (MMStart_X1); - break; - case R_TILEPRO_MMEND_X1: - MUNGE (MMEnd_X1); - break; - case R_TILEPRO_SHAMT_X0: - MUNGE (ShAmt_X0); - break; - case R_TILEPRO_SHAMT_X1: - MUNGE (ShAmt_X1); - break; - case R_TILEPRO_SHAMT_Y0: - MUNGE (ShAmt_Y0); - break; - case R_TILEPRO_SHAMT_Y1: - MUNGE (ShAmt_Y1); - break; -#endif - } -#undef MUNGE - *p = bits; - _dl_flush_icache (p, sizeof (*p)); -} - -auto inline void __attribute__ ((always_inline)) -elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc, - void *const reloc_addr_arg) -{ - ElfW(Addr) *const reloc_addr = reloc_addr_arg; - *reloc_addr = l_addr + reloc->r_addend; -} - -auto inline void __attribute__ ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - ElfW(Addr) l_addr, const ElfW(Rela) *reloc, - int skip_ifunc) -{ - const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); - - /* Check for unexpected PLT reloc type. */ - if (__builtin_expect (r_type == R_TILE(JMP_SLOT), 1)) - { - *(ElfW(Addr) *) (l_addr + reloc->r_offset) += l_addr; - } - else - _dl_reloc_bad_type (map, r_type, 1); -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/tile/dl-runtime.c b/sysdeps/tile/dl-runtime.c deleted file mode 100644 index 3aced41643..0000000000 --- a/sysdeps/tile/dl-runtime.c +++ /dev/null @@ -1,159 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Like x86_64, we pass the index of the relocation and not its offset. - In _dl_profile_fixup and _dl_call_pltexit we also use the index. - Therefore it is wasteful to compute the offset in the trampoline - just to reverse the operation immediately afterwards. */ -#define reloc_offset reloc_arg * sizeof (PLTREL) -#define reloc_index reloc_arg - -#include - -#include -#include -#include - -/* Like realpath(), but simplified: no dynamic memory use, no lstat(), - no set_errno(), no valid "rpath" on error, etc. This handles some - simple cases where the simulator might not have a valid entry for - a loaded Elf object, in particular dlopen() with a relative path. - For this relatively rare case, one could also imagine using - link_map.l_origin to avoid the getcwd() here, but the simpler code - here seems like a better solution. */ -static char * -dl_realpath (const char *name, char *rpath) -{ - char *dest; - const char *start, *end; - - if (name[0] != '/') - { - if (!__getcwd (rpath, PATH_MAX)) - return NULL; - dest = __rawmemchr (rpath, '\0'); - } - else - { - rpath[0] = '/'; - dest = rpath + 1; - } - - for (start = end = name; *start; start = end) - { - /* Skip sequence of multiple path-separators. */ - while (*start == '/') - ++start; - - /* Find end of path component. */ - for (end = start; *end && *end != '/'; ++end) - /* Nothing. */; - - if (end - start == 0) - break; - else if (end - start == 1 && start[0] == '.') - /* nothing */; - else if (end - start == 2 && start[0] == '.' && start[1] == '.') - { - /* Back up to previous component, ignore if at root already. */ - if (dest > rpath + 1) - while ((--dest)[-1] != '/'); - } - else - { - if (dest[-1] != '/') - *dest++ = '/'; - - if (dest + (end - start) >= rpath + PATH_MAX) - return NULL; - - dest = __mempcpy (dest, start, end - start); - *dest = '\0'; - } - } - if (dest > rpath + 1 && dest[-1] == '/') - --dest; - *dest = '\0'; - - return rpath; -} - -/* Support notifying the simulator about new objects. */ -void internal_function -_dl_after_load (struct link_map *l) -{ - int shift; - char pathbuf[PATH_MAX]; - char *path; - - /* Don't bother if not in the simulator. */ - if (__insn_mfspr (SPR_SIM_CONTROL) == 0) - return; - -#define DLPUTC(c) __insn_mtspr (SPR_SIM_CONTROL, \ - (SIM_CONTROL_DLOPEN \ - | ((c) << _SIM_CONTROL_OPERATOR_BITS))) - - /* Write the library address in hex. */ - DLPUTC ('0'); - DLPUTC ('x'); - for (shift = (int) sizeof (unsigned long) * 8 - 4; shift >= 0; shift -= 4) - DLPUTC ("0123456789abcdef"[(l->l_map_start >> shift) & 0xF]); - DLPUTC (':'); - - /* Write the library path, including the terminating '\0'. */ - path = dl_realpath (l->l_name, pathbuf) ?: l->l_name; - for (size_t i = 0;; i++) - { - DLPUTC (path[i]); - if (path[i] == '\0') - break; - } -#undef DLPUTC -} - -/* Support notifying the simulator about removed objects prior to munmap(). */ -static void -sim_dlclose (ElfW(Addr) map_start) -{ - int shift; - - /* Don't bother if not in the simulator. */ - if (__insn_mfspr (SPR_SIM_CONTROL) == 0) - return; - -#define DLPUTC(c) __insn_mtspr (SPR_SIM_CONTROL, \ - (SIM_CONTROL_DLCLOSE \ - | ((c) << _SIM_CONTROL_OPERATOR_BITS))) - - /* Write the library address in hex. */ - DLPUTC ('0'); - DLPUTC ('x'); - for (shift = (int) sizeof (unsigned long) * 8 - 4; shift >= 0; shift -= 4) - DLPUTC ("0123456789abcdef"[(map_start >> shift) & 0xF]); - DLPUTC ('\0'); - -#undef DLPUTC -} - -void internal_function -_dl_unmap (struct link_map *map) -{ - sim_dlclose (map->l_map_start); - _dl_unmap_segments (map); -} diff --git a/sysdeps/tile/dl-start.S b/sysdeps/tile/dl-start.S deleted file mode 100644 index 4f807a9e64..0000000000 --- a/sysdeps/tile/dl-start.S +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - /* Get address of "sym" in "reg" assuming r51 holds ".Llink". */ - .macro pic_addr reg, sym -#ifdef __tilegx__ - moveli \reg, hw1_last(\sym - .Llink) - shl16insli \reg, \reg, hw0(\sym - .Llink) - ADD_PTR \reg, r51, \reg -#else - ADDLI_PTR \reg, r51, lo16(\sym - .Llink) - auli \reg, \reg, ha16(\sym - .Llink) -#endif - .endm - - .text -ENTRY (_start) - /* Linux starts us with sp pointing at the conventional Elf layout, - but we need to allow two 'caller' words for our ABI convention. */ - { - move r52, sp - andi sp, sp, -8 - } - cfi_def_cfa_register (r52) - { - /* Point sp at base of ABI area; point r4 to the caller-sp word. */ - ADDI_PTR sp, sp, -(2 * REGSIZE) - ADDI_PTR r4, sp, -REGSIZE - } - { - /* Save zero for caller sp in our 'caller' save area, and make - sure lr has a zero value, to limit backtraces. */ - move lr, zero - ST r4, zero - } - { - move r0, r52 - jal _dl_start - } - /* Save returned start of user program address for later. */ - move r50, r0 - - /* See if we were invoked explicitly with the dynamic loader, - in which case we have to adjust the argument vector. */ - lnk r51; .Llink: - pic_addr r4, _dl_skip_args - LD4U r4, r4 - BEQZT r4, .Lno_skip - - /* Load the argc word at the initial sp and adjust it. - We basically jump "sp" up over the first few argv entries - and write "argc" a little higher up in memory, to be the - base of the new kernel-initialized stack area. */ - LD_PTR r0, r52 - { - sub r0, r0, r4 - SHL_PTR_ADD r52, r4, r52 - } - { - ST_PTR r52, r0 - SHL_PTR_ADD sp, r4, sp - } - andi sp, sp, -8 - -.Lno_skip: - /* Call_dl_init (_dl_loaded, argc, argv, envp). See elf/start.s - for the layout of memory here; r52 is pointing to "+0". */ - pic_addr r0, _rtld_local - { - LD_PTR r1, r52 /* load argc in r1 */ - ADDLI_PTR r2, r52, __SIZEOF_POINTER__ /* point r2 at argv */ - } - { - LD_PTR r0, r0 /* yields _rtld_global._ns_loaded */ - addi r3, r1, 1 - move lr, zero - } - { - SHL_PTR_ADD r3, r3, r2 /* point r3 at envp */ - jal _dl_init - } - - /* Call user program whose address we saved in r50. - We invoke it just like a static binary, but with _dl_fini - in r0 so we can distinguish. */ - - pic_addr r0, _dl_fini - move lr, zero - { - move sp, r52 - jr r50 - } - - /* Tell backtracer to give up (_start has no caller). */ - info 2 /* INFO_OP_CANNOT_BACKTRACE */ - -END (_start) diff --git a/sysdeps/tile/dl-tls.c b/sysdeps/tile/dl-tls.c deleted file mode 100644 index eed83e2bb1..0000000000 --- a/sysdeps/tile/dl-tls.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifdef SHARED -/* We provide a fast-path version of __tls_get_addr to allow for - the normal case to be fast, both by coding the function tightly, - and more importantly by fixing its register clobber API so the - compiler can avoid having to set up frames, etc., unnecessarily. */ -#define __tls_get_addr __tls_get_addr_slow -#endif - -#include diff --git a/sysdeps/tile/dl-tls.h b/sysdeps/tile/dl-tls.h deleted file mode 100644 index 6456aa9319..0000000000 --- a/sysdeps/tile/dl-tls.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - -/* Fast-path function to get a TLS pointer. */ -extern void *__tls_get_addr (tls_index *ti); - -/* The thread pointer points to the first static TLS block. */ -#define TLS_TP_OFFSET 0 - -/* Dynamic thread vector pointers at the start of each TLS block. */ -#define TLS_DTV_OFFSET 0 - -/* Compute the value for a GOTTPREL reloc. */ -#define TLS_TPREL_VALUE(sym_map, sym) \ - ((sym_map)->l_tls_offset + (sym)->st_value - TLS_TP_OFFSET) - -/* Compute the value for a DTPREL reloc. */ -#define TLS_DTPREL_VALUE(sym) \ - ((sym)->st_value - TLS_DTV_OFFSET) diff --git a/sysdeps/tile/dl-trampoline.S b/sysdeps/tile/dl-trampoline.S deleted file mode 100644 index fd7d63d76b..0000000000 --- a/sysdeps/tile/dl-trampoline.S +++ /dev/null @@ -1,193 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* This function is called via the PLT header, which is called - from an individual PLT entry. - - At this point we have several values passed in: - - lr: return address to original user code - r28: the tpnt value to pass to _dl_runtime_resolver - r29: the PLT index of the invoked jump table entry. - - We set up a frame entry that looks like this (in int_reg_t units): - - +57: r25 return values from function... - +56: r24 - [...] - +33: r1 - +32: r0 - +31: PLT index - +30: tpnt - +29: stackframe - +28: caller lr - +27: r25 arguments to function... - +26: r24 - [...] - +3: r1 - +2: r0 - +1: standard ABI slot (sp) - +0: standard ABI slot (callee lr) - - The entries from "stackframe" up are only used in _dl_profile_resolve. - We save and restore r0 through r25, rather than the strictly - architected r0 through r9, to support unusual calling conventions; - for example, __tls_get_addr takes r0 and returns r0, but promises - not to clobber r1 through r24 to support its usual fast path. */ - -#define FRAME_SP (1 * REGSIZE) -#define FRAME_REGS (2 * REGSIZE) -#define FRAME_LR (28 * REGSIZE) /* Must follow FRAME_REGS */ -#define FRAME_STACKFRAME (29 * REGSIZE) -#define FRAME_TPNT (30 * REGSIZE) -#define FRAME_INDEX (31 * REGSIZE) -#define FRAME_RETVAL (32 * REGSIZE) - -#define FRAME_SIZE_SMALL (30 * REGSIZE) -#define FRAME_SIZE_LARGE (58 * REGSIZE) - -#define FOR_EACH_REG(f) \ - f(r0); f(r1); f(r2); f(r3); \ - f(r4); f(r5); f(r6); f(r7); \ - f(r8); f(r9); f(r10); f(r11); \ - f(r12); f(r13); f(r14); f(r15); \ - f(r16); f(r17); f(r18); f(r19); \ - f(r20); f(r21); f(r22); f(r23); \ - f(r24); f(r25) - -#define SAVE(REG) { ST r27, REG; ADDI_PTR r27, r27, REGSIZE } -#define RESTORE(REG) { LD REG, r27; ADDI_PTR r27, r27, REGSIZE } - - .macro dl_resolve, name, profile, framesize -.text -.global \name -.hidden \name -/* Note that cpp expands ENTRY(\name) incorrectly. */ -.type \name,@function -.align 8 -\name: - cfi_startproc - { - ST sp, lr - move r26, sp - } - { - ADDLI_PTR sp, sp, -\framesize - ADDLI_PTR r27, sp, FRAME_SP - \framesize - } - cfi_def_cfa_offset (\framesize) - { - ST r27, r26 - ADDI_PTR r27, r27, FRAME_REGS - FRAME_SP - } - FOR_EACH_REG(SAVE) - { - ST r27, lr - ADDLI_PTR r27, sp, FRAME_TPNT - } - cfi_offset (lr, FRAME_LR - \framesize) - .if \profile - { - move r0, r28 /* tpnt value */ - ST r27, r28 - ADDI_PTR r27, r27, FRAME_INDEX - FRAME_TPNT - } - { - move r1, r29 /* PLT index */ - ST r27, r29 - } - { - move r2, lr /* retaddr */ - ADDI_PTR r3, sp, FRAME_REGS /* La_tile_regs pointer */ - } - { - ADDLI_PTR r4, sp, FRAME_STACKFRAME /* framesize pointer */ - jal _dl_profile_fixup - } - ADDLI_PTR r28, sp, FRAME_STACKFRAME - LD_PTR r28, r28 - BGTZ r28, 1f - .else - { - move r0, r28 /* tpnt value 1 */ - move r1, r29 /* PLT index 2 */ - } - jal _dl_fixup - .endif - { - /* Copy aside the return value so we can restore r0 below. */ - move r29, r0 - /* Set up r27 to let us start restoring registers. */ - ADDLI_PTR r27, sp, FRAME_REGS - } - FOR_EACH_REG(RESTORE) - .if \profile - ADDLI_PTR r28, sp, FRAME_STACKFRAME - LD r28, r28 - BGTZ r28, 1f - .endif - { - /* Restore original user return address. */ - LD lr, r27 - /* Pop off our stack frame. */ - ADDLI_PTR sp, sp, \framesize - } - cfi_def_cfa_offset (0) - jr r29 /* Transfer control to freshly loaded code. */ - jrp lr /* Keep backtracer happy. */ - - .if \profile -1: jalr r29 /* Call resolved function. */ - { - ADDLI_PTR r28, sp, FRAME_TPNT - ADDLI_PTR r27, sp, FRAME_RETVAL - } - FOR_EACH_REG(SAVE) - { - LD r0, r28 - ADDI_PTR r28, r28, FRAME_INDEX - FRAME_TPNT - } - { - LD r1, r28 - ADDLI_PTR r2, sp, FRAME_REGS - } - { - ADDLI_PTR r3, sp, FRAME_RETVAL - jal _dl_call_pltexit - } - { - ADDLI_PTR lr, sp, FRAME_LR - ADDLI_PTR r27, sp, FRAME_RETVAL - } - FOR_EACH_REG(RESTORE) - { - LD lr, lr - ADDLI_PTR sp, sp, \framesize - } - jrp lr - .endif -END (\name) - .endm - - dl_resolve _dl_runtime_resolve, 0, FRAME_SIZE_SMALL -#ifndef PROF - dl_resolve _dl_runtime_profile, 1, FRAME_SIZE_LARGE -#endif diff --git a/sysdeps/tile/ffs.c b/sysdeps/tile/ffs.c deleted file mode 100644 index 90e65d799c..0000000000 --- a/sysdeps/tile/ffs.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#define ffsl __something_else -#include - -#undef ffs -int -__ffs (int x) -{ - return __builtin_ffs (x); -} -weak_alias (__ffs, ffs) -libc_hidden_def (__ffs) -libc_hidden_builtin_def (ffs) - -#if ULONG_MAX == UINT_MAX -#undef ffsl -weak_alias (__ffs, ffsl) -#endif diff --git a/sysdeps/tile/ffsll.c b/sysdeps/tile/ffsll.c deleted file mode 100644 index 5d2b8a0129..0000000000 --- a/sysdeps/tile/ffsll.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#define ffsl __something_else -#include - -#undef ffsll -int -ffsll (long long x) -{ - return __builtin_ffsll (x); -} - -#if ULONG_MAX > UINT_MAX -#undef ffsl -weak_alias (ffsll, ffsl) -#endif diff --git a/sysdeps/tile/gccframe.h b/sysdeps/tile/gccframe.h deleted file mode 100644 index de9b2b1c9b..0000000000 --- a/sysdeps/tile/gccframe.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define FIRST_PSEUDO_REGISTER 64 - -#include diff --git a/sysdeps/tile/jmpbuf-offsets.h b/sysdeps/tile/jmpbuf-offsets.h deleted file mode 100644 index b84dd05fa4..0000000000 --- a/sysdeps/tile/jmpbuf-offsets.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* We don't use most of these symbols; they are here for documentation. */ -#define JB_R30 0 -#define JB_R31 1 -#define JB_R32 2 -#define JB_R33 3 -#define JB_R34 4 -#define JB_R35 5 -#define JB_R36 6 -#define JB_R37 7 -#define JB_R38 8 -#define JB_R39 9 -#define JB_R40 10 -#define JB_R41 11 -#define JB_R42 12 -#define JB_R43 13 -#define JB_R44 14 -#define JB_R45 15 -#define JB_R46 16 -#define JB_R47 17 -#define JB_R48 18 -#define JB_R49 19 -#define JB_R50 20 -#define JB_R51 21 -#define JB_FP 22 /* r52 */ -#define JB_TP 23 /* r53 */ -#define JB_SP 24 /* r54 */ -#define JB_PC 25 /* normally LR, r55 */ -#define JB_ICS 26 /* interrupt critical section bit */ - -/* We save space for some extra state to accommodate future changes. */ -#define JB_LEN 32 /* number of words */ - -#define JB_SIZE (JB_LEN * REGSIZE) - -/* Helper macro used by all the setjmp/longjmp assembly code. */ -#define FOR_EACH_CALLEE_SAVED_REG(f) \ - .no_require_canonical_reg_names; f(r30); f(r31); \ - f(r32); f(r33); f(r34); f(r35); f(r36); f(r37); f(r38); f(r39); \ - f(r40); f(r41); f(r42); f(r43); f(r44); f(r45); f(r46); f(r47); \ - f(r48); f(r49); f(r50); f(r51); f(r52); f(r53); f(r54); f(r55) - -/* Helper for generic ____longjmp_chk(). */ -#define JB_FRAME_ADDRESS(buf) \ - ((void *) (unsigned long) (buf[JB_SP])) diff --git a/sysdeps/tile/jmpbuf-unwind.h b/sysdeps/tile/jmpbuf-unwind.h deleted file mode 100644 index eccb635d16..0000000000 --- a/sysdeps/tile/jmpbuf-unwind.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - Based on work contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((void *) (address) < (void *) demangle ((jmpbuf)[JB_SP])) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) (long) _Unwind_GetCFA (_context), _adj) - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf regs) -{ - uintptr_t sp = regs[JB_SP]; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return sp; -} - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/tile/ldsodefs.h b/sysdeps/tile/ldsodefs.h deleted file mode 100644 index f7c2a44c80..0000000000 --- a/sysdeps/tile/ldsodefs.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _TILE_LDSODEFS_H -#define _TILE_LDSODEFS_H 1 - -#include - -struct La_tile_regs; -struct La_tile_retval; - -#define ARCH_PLTENTER_MEMBERS \ - ElfW(Addr) (*tile_gnu_pltenter) (ElfW(Sym) *, unsigned int, uintptr_t *, \ - uintptr_t *, struct La_tile_regs *, \ - unsigned int *, const char *, \ - long int *) - -#define ARCH_PLTEXIT_MEMBERS \ - ElfW(Addr) (*tile_gnu_pltexit) (ElfW(Sym) *, unsigned int, uintptr_t *, \ - uintptr_t *, const struct La_tile_regs *, \ - struct La_tile_retval *, const char *) - -#include_next - -#endif diff --git a/sysdeps/tile/libm-test-ulps b/sysdeps/tile/libm-test-ulps deleted file mode 100644 index f1a01fdb30..0000000000 --- a/sysdeps/tile/libm-test-ulps +++ /dev/null @@ -1,394 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -float: 1 -ifloat: 1 - -Function: "acosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "asin": -float: 1 -ifloat: 1 - -Function: "asinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "atan": -float: 1 -ifloat: 1 - -Function: "atan2": -float: 1 -ifloat: 1 - -Function: "atanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "cabs": -double: 1 -idouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "carg": -float: 1 -ifloat: 1 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "casin": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "casinh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catan": -float: 1 -ifloat: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "catanh": -float: 1 -ifloat: 1 - -Function: "cbrt": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "clog": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 - -Function: Real part of "clog10": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 - -Function: Imaginary part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "cos": -float: 1 -ifloat: 1 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "cpow": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Real part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "erfc": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "exp": -float: 1 -ifloat: 1 - -Function: "exp10": -double: 2 -idouble: 2 - -Function: "exp2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "gamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "hypot": -double: 1 -idouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "lgamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "log": -float: 1 -ifloat: 1 - -Function: "log10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "log1p": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "log2": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "pow": -float: 3 -ifloat: 3 - -Function: "pow10": -double: 2 -idouble: 2 - -Function: "sin": -float: 1 -ifloat: 1 - -Function: "sincos": -float: 1 -ifloat: 1 - -Function: "sinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "tan": -float: 1 -ifloat: 1 - -Function: "tanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "tgamma": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -# end of automatic generation diff --git a/sysdeps/tile/libm-test-ulps-name b/sysdeps/tile/libm-test-ulps-name deleted file mode 100644 index 69673dcaa2..0000000000 --- a/sysdeps/tile/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -Tile diff --git a/sysdeps/tile/machine-gmon.h b/sysdeps/tile/machine-gmon.h deleted file mode 100644 index 105afd92e1..0000000000 --- a/sysdeps/tile/machine-gmon.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define _MCOUNT_DECL(from, self) \ - void __mcount_internal (u_long from, u_long self) - -/* Call __mcount_internal with our the return PC for our caller, and - the return PC our caller will return to. Empty since we use an - assembly stub instead. */ -#define MCOUNT diff --git a/sysdeps/tile/math-tests.h b/sysdeps/tile/math-tests.h deleted file mode 100644 index fb43494aa2..0000000000 --- a/sysdeps/tile/math-tests.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Configuration for math tests. Tile version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Tile hardware/softfloat does not support exceptions and rounding modes. */ -#define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST) -#define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST) -#define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST) -#define EXCEPTION_TESTS_float 0 -#define EXCEPTION_TESTS_double 0 -#define EXCEPTION_TESTS_long_double 0 - -/* Tile hardware/softfloat floating-point ops do not preserve NaN payloads. */ -#define SNAN_TESTS_PRESERVE_PAYLOAD 0 - -#include_next diff --git a/sysdeps/tile/math_private.h b/sysdeps/tile/math_private.h deleted file mode 100644 index 99daec4093..0000000000 --- a/sysdeps/tile/math_private.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef TILE_MATH_PRIVATE_H -#define TILE_MATH_PRIVATE_H 1 - -/* Internally, we suppress any use of exception or rounding other - than what is supported by the hardware. This does mean that some - code will silently fail to report exceptions, set rounding mode - as expected, etc., but it allows math code to compile that otherwise - wouldn't (such as math/s_fma.c) and so is valuable. - - We intentionally ignore the "exception" arguments of functions that - take an exception, since we can't even evaluate the argument - without causing a build failure. The extra level of statement - expression wrapping avoids "statement with no effect" warnings. - Since the callers don't check for errors anyway, we just claim - success in every case. - - The overrides for libc_ functions must happen before we include - the generic math_private.h, and the overrides for regular - functions must happen afterwards, to avoid clashing with - the declarations of those functions. */ - -#define libc_fesetround(rnd) ({ 0; }) -#define libc_fetestexcept(exc) ({ 0; }) -#define libc_feholdexcept_setround(env, exc) ({ (void) (env); 0; }) -#define libc_feupdateenv_test(env, exc) ({ (void) (env); 0; }) - -#include_next - -#define feraiseexcept(excepts) ({ 0; }) -#define __feraiseexcept(excepts) ({ 0; }) -#define feclearexcept(exc) ({ 0; }) -#define fetestexcept(exc) ({ 0; }) -extern inline int fegetenv (fenv_t *__e) { return 0; } -extern inline int __fegetenv (fenv_t *__e) { return 0; } -extern inline int fesetenv (const fenv_t *__e) { return 0; } -extern inline int __fesetenv (const fenv_t *__e) { return 0; } -extern inline int feupdateenv (const fenv_t *__e) { return 0; } -extern inline int __feupdateenv (const fenv_t *__e) { return 0; } -extern inline int fegetround (void) { return FE_TONEAREST; } -extern inline int __fegetround (void) { return FE_TONEAREST; } -extern inline int fesetround (int __d) { return 0; } -extern inline int __fesetround (int __d) { return 0; } - -#endif diff --git a/sysdeps/tile/memcmp.c b/sysdeps/tile/memcmp.c deleted file mode 100644 index 83c62be059..0000000000 --- a/sysdeps/tile/memcmp.c +++ /dev/null @@ -1,357 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#undef __ptr_t -#define __ptr_t void * - -#if defined HAVE_STRING_H || defined _LIBC -# include -#endif - -#undef memcmp - -#ifndef MEMCMP -# define MEMCMP memcmp -#endif - -#ifdef _LIBC - -# include -# include - -# if __BYTE_ORDER == __BIG_ENDIAN -# define WORDS_BIGENDIAN -# endif - -#else /* Not in the GNU C library. */ - -# include - -/* Type to use for aligned memory operations. - This should normally be the biggest type supported by a single load - and store. Must be an unsigned type. */ -# define op_t unsigned long int -# define OPSIZ (sizeof(op_t)) - -/* Threshold value for when to enter the unrolled loops. */ -# define OP_T_THRES 16 - -/* Type to use for unaligned operations. */ -typedef unsigned char byte; - -#endif /* In the GNU C library. */ - -/* Provide the appropriate builtins to shift two registers based on - the alignment of a pointer held in a third register, and to reverse - the bytes in a word. */ -#ifdef __tilegx__ -#define DBLALIGN __insn_dblalign -#define REVBYTES __insn_revbytes -#else -#define DBLALIGN __insn_dword_align -#define REVBYTES __insn_bytex -#endif - -#ifdef WORDS_BIGENDIAN -# define CMP_LT_OR_GT(a, b) ((a) > (b) ? 1 : -1) -#else -# define CMP_LT_OR_GT(a, b) (REVBYTES(a) > REVBYTES(b) ? 1 : -1) -#endif - -/* BE VERY CAREFUL IF YOU CHANGE THIS CODE! */ - -/* The strategy of this memcmp is: - - 1. Compare bytes until one of the block pointers is aligned. - - 2. Compare using memcmp_common_alignment or - memcmp_not_common_alignment, regarding the alignment of the other - block after the initial byte operations. The maximum number of - full words (of type op_t) are compared in this way. - - 3. Compare the few remaining bytes. */ - -static int memcmp_common_alignment (long, long, size_t) __THROW; - -/* memcmp_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN `op_t' - objects (not LEN bytes!). Both SRCP1 and SRCP2 should be aligned for - memory operations on `op_t's. */ -static int -memcmp_common_alignment (long int srcp1, long int srcp2, size_t len) -{ - op_t a0, a1; - op_t b0, b1; - - switch (len % 4) - { - default: /* Avoid warning about uninitialized local variables. */ - case 2: - a0 = ((op_t *) srcp1)[0]; - b0 = ((op_t *) srcp2)[0]; - srcp1 += OPSIZ; - srcp2 += OPSIZ; - len += 2; - goto do1; - case 3: - a1 = ((op_t *) srcp1)[0]; - b1 = ((op_t *) srcp2)[0]; - srcp1 += OPSIZ; - srcp2 += OPSIZ; - len += 1; - goto do2; - case 0: - if (OP_T_THRES <= 3 * OPSIZ && len == 0) - return 0; - a0 = ((op_t *) srcp1)[0]; - b0 = ((op_t *) srcp2)[0]; - srcp1 += OPSIZ; - srcp2 += OPSIZ; - goto do3; - case 1: - a1 = ((op_t *) srcp1)[0]; - b1 = ((op_t *) srcp2)[0]; - srcp1 += OPSIZ; - srcp2 += OPSIZ; - len -= 1; - if (OP_T_THRES <= 3 * OPSIZ && len == 0) - goto do0; - /* Fall through. */ - } - - do - { - a0 = ((op_t *) srcp1)[0]; - b0 = ((op_t *) srcp2)[0]; - srcp1 += OPSIZ; - srcp2 += OPSIZ; - if (__glibc_likely (a1 != b1)) - return CMP_LT_OR_GT (a1, b1); - - do3: - a1 = ((op_t *) srcp1)[0]; - b1 = ((op_t *) srcp2)[0]; - srcp1 += OPSIZ; - srcp2 += OPSIZ; - if (__glibc_likely (a0 != b0)) - return CMP_LT_OR_GT (a0, b0); - - do2: - a0 = ((op_t *) srcp1)[0]; - b0 = ((op_t *) srcp2)[0]; - srcp1 += OPSIZ; - srcp2 += OPSIZ; - if (__glibc_likely (a1 != b1)) - return CMP_LT_OR_GT (a1, b1); - - do1: - a1 = ((op_t *) srcp1)[0]; - b1 = ((op_t *) srcp2)[0]; - srcp1 += OPSIZ; - srcp2 += OPSIZ; - if (__glibc_likely (a0 != b0)) - return CMP_LT_OR_GT (a0, b0); - - len -= 4; - } - while (len != 0); - - /* This is the right position for do0. Please don't move - it into the loop. */ - do0: - if (__glibc_likely (a1 != b1)) - return CMP_LT_OR_GT (a1, b1); - return 0; -} - -static int memcmp_not_common_alignment (long, long, size_t) __THROW; - -/* memcmp_not_common_alignment -- Compare blocks at SRCP1 and SRCP2 with LEN - `op_t' objects (not LEN bytes!). SRCP2 should be aligned for memory - operations on `op_t', but SRCP1 *should be unaligned*. */ -static int -memcmp_not_common_alignment (long int srcp1, long int srcp2, size_t len) -{ - void * srcp1i; - op_t a0, a1, a2, a3; - op_t b0, b1, b2, b3; - op_t x; - - /* Calculate how to shift a word read at the memory operation - aligned srcp1 to make it aligned for comparison. */ - - srcp1i = (void *) srcp1; - - /* Make SRCP1 aligned by rounding it down to the beginning of the `op_t' - it points in the middle of. */ - srcp1 &= -OPSIZ; - - switch (len % 4) - { - default: /* Avoid warning about uninitialized local variables. */ - case 2: - a1 = ((op_t *) srcp1)[0]; - a2 = ((op_t *) srcp1)[1]; - b2 = ((op_t *) srcp2)[0]; - srcp1 += 2 * OPSIZ; - srcp2 += 1 * OPSIZ; - len += 2; - goto do1; - case 3: - a0 = ((op_t *) srcp1)[0]; - a1 = ((op_t *) srcp1)[1]; - b1 = ((op_t *) srcp2)[0]; - srcp1 += 2 * OPSIZ; - srcp2 += 1 * OPSIZ; - len += 1; - goto do2; - case 0: - if (OP_T_THRES <= 3 * OPSIZ && len == 0) - return 0; - a3 = ((op_t *) srcp1)[0]; - a0 = ((op_t *) srcp1)[1]; - b0 = ((op_t *) srcp2)[0]; - srcp1 += 2 * OPSIZ; - srcp2 += 1 * OPSIZ; - goto do3; - case 1: - a2 = ((op_t *) srcp1)[0]; - a3 = ((op_t *) srcp1)[1]; - b3 = ((op_t *) srcp2)[0]; - srcp1 += 2 * OPSIZ; - srcp2 += 1 * OPSIZ; - len -= 1; - if (OP_T_THRES <= 3 * OPSIZ && len == 0) - goto do0; - /* Fall through. */ - } - - do - { - a0 = ((op_t *) srcp1)[0]; - b0 = ((op_t *) srcp2)[0]; - x = DBLALIGN (a2, a3, srcp1i); - srcp1 += OPSIZ; - srcp2 += OPSIZ; - if (__glibc_likely (x != b3)) - return CMP_LT_OR_GT (x, b3); - - do3: - a1 = ((op_t *) srcp1)[0]; - b1 = ((op_t *) srcp2)[0]; - x = DBLALIGN (a3, a0, srcp1i); - srcp1 += OPSIZ; - srcp2 += OPSIZ; - if (__glibc_likely (x != b0)) - return CMP_LT_OR_GT (x, b0); - - do2: - a2 = ((op_t *) srcp1)[0]; - b2 = ((op_t *) srcp2)[0]; - x = DBLALIGN (a0, a1, srcp1i); - srcp1 += OPSIZ; - srcp2 += OPSIZ; - if (__glibc_likely (x != b1)) - return CMP_LT_OR_GT (x, b1); - - do1: - a3 = ((op_t *) srcp1)[0]; - b3 = ((op_t *) srcp2)[0]; - x = DBLALIGN (a1, a2, srcp1i); - srcp1 += OPSIZ; - srcp2 += OPSIZ; - if (__glibc_likely (x != b2)) - return CMP_LT_OR_GT (x, b2); - - len -= 4; - } - while (len != 0); - - /* This is the right position for do0. Please don't move - it into the loop. */ - do0: - x = DBLALIGN (a2, a3, srcp1i); - if (__glibc_likely (x != b3)) - return CMP_LT_OR_GT (x, b3); - return 0; -} - -int -MEMCMP (const __ptr_t s1, const __ptr_t s2, size_t len) -{ - op_t a0; - op_t b0; - long int srcp1 = (long int) s1; - long int srcp2 = (long int) s2; - int res; - - if (len >= OP_T_THRES) - { - /* There are at least some bytes to compare. No need to test - for LEN == 0 in this alignment loop. */ - while (srcp2 % OPSIZ != 0) - { - a0 = ((byte *) srcp1)[0]; - b0 = ((byte *) srcp2)[0]; - srcp1 += 1; - srcp2 += 1; - res = a0 - b0; - if (__glibc_likely (res != 0)) - return res; - len -= 1; - } - - /* SRCP2 is now aligned for memory operations on `op_t'. - SRCP1 alignment determines if we can do a simple, - aligned compare or need to shuffle bits. */ - - if (srcp1 % OPSIZ == 0) - res = memcmp_common_alignment (srcp1, srcp2, len / OPSIZ); - else - res = memcmp_not_common_alignment (srcp1, srcp2, len / OPSIZ); - if (res != 0) - return res; - - /* Number of bytes remaining in the interval [0..OPSIZ-1]. */ - srcp1 += len & -OPSIZ; - srcp2 += len & -OPSIZ; - len %= OPSIZ; - } - - /* There are just a few bytes to compare. Use byte memory operations. */ - while (len != 0) - { - a0 = ((byte *) srcp1)[0]; - b0 = ((byte *) srcp2)[0]; - srcp1 += 1; - srcp2 += 1; - res = a0 - b0; - if (__glibc_likely (res != 0)) - return res; - len -= 1; - } - - return 0; -} -libc_hidden_builtin_def(memcmp) -#ifdef weak_alias -# undef bcmp -weak_alias (memcmp, bcmp) -#endif diff --git a/sysdeps/tile/memcopy.h b/sysdeps/tile/memcopy.h deleted file mode 100644 index d934165d98..0000000000 --- a/sysdeps/tile/memcopy.h +++ /dev/null @@ -1,33 +0,0 @@ -/* memcopy.h -- definitions for memory copy functions. Tile version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* The tilegx implementation of memcpy is safe to use for memmove. */ -#ifdef __tilegx__ -# undef MEMCPY_OK_FOR_FWD_MEMMOVE -# define MEMCPY_OK_FOR_FWD_MEMMOVE 1 -#endif - -/* Support more efficient copying on tilegx32, which supports - long long as a native 64-bit type. */ -#if defined (__tilegx__) && __WORDSIZE == 32 -# undef op_t -# define op_t unsigned long long int -#endif diff --git a/sysdeps/tile/nptl/Makefile b/sysdeps/tile/nptl/Makefile deleted file mode 100644 index b013406abb..0000000000 --- a/sysdeps/tile/nptl/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (C) 2002-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# . - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif diff --git a/sysdeps/tile/nptl/bits/pthreadtypes-arch.h b/sysdeps/tile/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index 145ee42ddb..0000000000 --- a/sysdeps/tile/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Based on work contributed by Ulrich Drepper , 2002. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -#define _BITS_PTHREADTYPES_ARCH_H 1 - -#include - -#if __WORDSIZE == 64 -# define __SIZEOF_PTHREAD_MUTEX_T 40 -# define __SIZEOF_PTHREAD_ATTR_T 56 -# define __SIZEOF_PTHREAD_RWLOCK_T 56 -# define __SIZEOF_PTHREAD_BARRIER_T 32 -#else -# define __SIZEOF_PTHREAD_MUTEX_T 24 -# define __SIZEOF_PTHREAD_ATTR_T 36 -# define __SIZEOF_PTHREAD_RWLOCK_T 32 -# define __SIZEOF_PTHREAD_BARRIER_T 20 -#endif -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - -/* Data structure for mutex handling. */ -#define __PTHREAD_COMPAT_PADDING_MID -#define __PTHREAD_COMPAT_PADDING_END -#define __PTHREAD_MUTEX_LOCK_ELISION 0 - -#define __LOCK_ALIGNMENT -#define __ONCE_ALIGNMENT - -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; -#if __WORDSIZE == 64 - int __cur_writer; - int __shared; - unsigned long int __pad1; - unsigned long int __pad2; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned int __flags; -#else - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; - unsigned char __shared; - unsigned char __pad1; - unsigned char __pad2; - int __cur_writer; -#endif -}; - -#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/tile/nptl/bits/semaphore.h b/sysdeps/tile/nptl/bits/semaphore.h deleted file mode 100644 index 0728a0528a..0000000000 --- a/sysdeps/tile/nptl/bits/semaphore.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - Based on work contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - -#include - -#if __WORDSIZE == 64 -# define __SIZEOF_SEM_T 32 -#else -# define __SIZEOF_SEM_T 16 -#endif - - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/sysdeps/tile/nptl/pthread_spin_lock.c b/sysdeps/tile/nptl/pthread_spin_lock.c deleted file mode 100644 index 16ef021de0..0000000000 --- a/sysdeps/tile/nptl/pthread_spin_lock.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "pthreadP.h" -#include -#include - -/* Bound point for bounded exponential backoff */ -#define BACKOFF_MAX 2048 - -/* Initial cycle delay for exponential backoff */ -#define BACKOFF_START 32 - -#ifdef __tilegx__ -/* Use cmpexch() after the initial fast-path exch to avoid - invalidating the cache line of the lock holder. */ -# define TNS(p) atomic_exchange_acq((p), 1) -# define CMPTNS(p) atomic_compare_and_exchange_val_acq((p), 1, 0) -#else -# define TNS(p) __insn_tns(p) -# define CMPTNS(p) __insn_tns(p) -# define SPR_CYCLE SPR_CYCLE_LOW /* The low 32 bits are sufficient. */ -#endif - -int -pthread_spin_lock (pthread_spinlock_t *lock) -{ - if (__builtin_expect (TNS (lock) != 0, 0)) - { - unsigned int backoff = BACKOFF_START; - while (CMPTNS (lock) != 0) - { - unsigned int start = __insn_mfspr (SPR_CYCLE); - while (__insn_mfspr (SPR_CYCLE) - start < backoff) - ; - if (backoff < BACKOFF_MAX) - backoff *= 2; - } - } - return 0; -} diff --git a/sysdeps/tile/nptl/pthread_spin_trylock.c b/sysdeps/tile/nptl/pthread_spin_trylock.c deleted file mode 100644 index c2d6766fd1..0000000000 --- a/sysdeps/tile/nptl/pthread_spin_trylock.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "pthreadP.h" -#include - -#ifdef __tilegx__ -#define TNS(p) __insn_exch4((p), 1) -#else -#define TNS(p) __insn_tns(p) -#endif - -int -pthread_spin_trylock (pthread_spinlock_t *lock) -{ - return (TNS (lock) == 0) ? 0 : EBUSY; -} diff --git a/sysdeps/tile/nptl/pthread_spin_unlock.c b/sysdeps/tile/nptl/pthread_spin_unlock.c deleted file mode 100644 index 63bc814985..0000000000 --- a/sysdeps/tile/nptl/pthread_spin_unlock.c +++ /dev/null @@ -1,33 +0,0 @@ -/* pthread_spin_unlock -- unlock a spin lock. Tile version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "pthreadP.h" -#include - -int -pthread_spin_unlock (pthread_spinlock_t *lock) -{ -#ifdef __tilegx__ - /* Use exchange() to bypass the write buffer. */ - atomic_exchange_rel (lock, 0); -#else - atomic_full_barrier (); - *lock = 0; -#endif - return 0; -} diff --git a/sysdeps/tile/nptl/pthreaddef.h b/sysdeps/tile/nptl/pthreaddef.h deleted file mode 100644 index 791fa452e2..0000000000 --- a/sysdeps/tile/nptl/pthreaddef.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 16 - - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME __builtin_frame_address (0) diff --git a/sysdeps/tile/nptl/tcb-offsets.sym b/sysdeps/tile/nptl/tcb-offsets.sym deleted file mode 100644 index 0147ffafb7..0000000000 --- a/sysdeps/tile/nptl/tcb-offsets.sym +++ /dev/null @@ -1,16 +0,0 @@ -#define SHARED /* needed to get struct rtld_global from */ -#include -#include -#include - --- - --- Abuse tls.h macros to derive offsets relative to the thread register. -#define thread_offsetof(mem) (long)(offsetof(struct pthread, mem) - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE) - -MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) -TID_OFFSET thread_offsetof (tid) -POINTER_GUARD (offsetof (tcbhead_t, pointer_guard) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) -FEEDBACK_DATA_OFFSET (offsetof (tcbhead_t, feedback_data) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) -DTV_OFFSET (offsetof (tcbhead_t, dtv) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) -TLS_GENERATION_OFFSET offsetof (struct rtld_global, _dl_tls_generation) diff --git a/sysdeps/tile/nptl/tls.h b/sysdeps/tile/nptl/tls.h deleted file mode 100644 index 7314843cfb..0000000000 --- a/sysdeps/tile/nptl/tls.h +++ /dev/null @@ -1,189 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _TLS_H -#define _TLS_H 1 - -# include - -#ifndef __ASSEMBLER__ -# include -# include -# include -# include - -#else /* __ASSEMBLER__ */ -# include -#endif /* __ASSEMBLER__ */ - - -#ifndef __ASSEMBLER__ - -/* Get system call information. */ -# include - -/* The TP points to the start of the thread blocks. */ -# define TLS_DTV_AT_TP 1 -# define TLS_TCB_AT_TP 0 - -/* We use the multiple_threads field in the pthread struct */ -#define TLS_MULTIPLE_THREADS_IN_TCB 1 - -/* Get the thread descriptor definition. */ -# include - -/* The stack_guard is accessed directly by GCC -fstack-protector code, - so it is a part of public ABI. The dtv and pointer_guard fields - are private. */ -typedef struct -{ - void *feedback_data; - uintptr_t pointer_guard; - uintptr_t stack_guard; - dtv_t *dtv; -} tcbhead_t; - -/* This is the size of the initial TCB. Because our TCB is before the thread - pointer, we don't need this. */ -# define TLS_INIT_TCB_SIZE 0 - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size of the TCB. Because our TCB is before the thread - pointer, we don't need this. */ -# define TLS_TCB_SIZE 0 - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size we need before TCB - actually, it includes the TCB. */ -# define TLS_PRE_TCB_SIZE \ - (sizeof (struct pthread) \ - + ((sizeof (tcbhead_t) + TLS_TCB_ALIGN - 1) & ~(TLS_TCB_ALIGN - 1))) - -/* Return the thread descriptor (tp) for the current thread. */ -register void *__thread_pointer asm ("tp"); - -/* The thread pointer (in hardware register tp) points to the end of - the TCB. The pthread_descr structure is immediately in front of the TCB. */ -# define TLS_TCB_OFFSET 0 - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(tcbp, dtvp) \ - (((tcbhead_t *) (tcbp))[-1].dtv = (dtvp) + 1) - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtv) (THREAD_DTV() = (dtv)) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(tcbp) (((tcbhead_t *) (tcbp))[-1].dtv) - -/* Code to initially initialize the thread pointer (tp). */ -# define TLS_INIT_TP(tcbp) \ - (__thread_pointer = (char *)(tcbp) + TLS_TCB_OFFSET, NULL) - -/* Value passed to 'clone' for initialization of the thread register. */ -# define TLS_DEFINE_INIT_TP(tp, pd) \ - void *tp = (void *) (pd) + TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - (((tcbhead_t *) (__thread_pointer - TLS_TCB_OFFSET))[-1].dtv) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF \ - ((struct pthread *) (__thread_pointer \ - - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -#ifdef __tilegx__ -# define DB_THREAD_SELF \ - REGISTER (64, 64, REG_TP * 8, - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE) -#else -# define DB_THREAD_SELF \ - REGISTER (32, 32, REG_TP * 4, - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE) -#endif - -/* Read member of the thread descriptor directly. */ -# define THREAD_GETMEM(descr, member) (descr->member) - -/* Same as THREAD_GETMEM, but the member offset can be non-constant. */ -# define THREAD_GETMEM_NC(descr, member, idx) \ - (descr->member[idx]) - -/* Set member of the thread descriptor directly. */ -# define THREAD_SETMEM(descr, member, value) \ - (descr->member = (value)) - -/* Same as THREAD_SETMEM, but the member offset can be non-constant. */ -# define THREAD_SETMEM_NC(descr, member, idx, value) \ - (descr->member[idx] = (value)) - -/* Set the stack guard field in TCB head. */ -# define THREAD_SET_STACK_GUARD(value) \ - (((tcbhead_t *) ((char *) __thread_pointer \ - - TLS_TCB_OFFSET))[-1].stack_guard = (value)) -# define THREAD_COPY_STACK_GUARD(descr) \ - (((tcbhead_t *) ((char *) (descr) \ - + TLS_PRE_TCB_SIZE))[-1].stack_guard \ - = ((tcbhead_t *) ((char *) __thread_pointer \ - - TLS_TCB_OFFSET))[-1].stack_guard) - -/* Set the pointer guard field in TCB head. */ -# define THREAD_GET_POINTER_GUARD() \ - (((tcbhead_t *) ((char *) __thread_pointer \ - - TLS_TCB_OFFSET))[-1].pointer_guard) -# define THREAD_SET_POINTER_GUARD(value) \ - (THREAD_GET_POINTER_GUARD () = (value)) -# define THREAD_COPY_POINTER_GUARD(descr) \ - (((tcbhead_t *) ((char *) (descr) \ - + TLS_PRE_TCB_SIZE))[-1].pointer_guard \ - = THREAD_GET_POINTER_GUARD()) - -/* l_tls_offset == 0 is perfectly valid on Tile, so we have to use some - different value to mean unset l_tls_offset. */ -# define NO_TLS_OFFSET -1 - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/tile/preconfigure b/sysdeps/tile/preconfigure deleted file mode 100644 index f3e5d7edae..0000000000 --- a/sysdeps/tile/preconfigure +++ /dev/null @@ -1,12 +0,0 @@ -# This is a -*- sh -*- -case "$machine" in - tilepro) - base_machine=tile machine=tile/tilepro ;; - tilegx*) - base_machine=tile - if $CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | grep -q __LP64__; then - machine=tile/tilegx/tilegx64 - else - machine=tile/tilegx/tilegx32 - fi ;; -esac diff --git a/sysdeps/tile/s_fma.c b/sysdeps/tile/s_fma.c deleted file mode 100644 index d9613fa67c..0000000000 --- a/sysdeps/tile/s_fma.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/tile/s_fmaf.c b/sysdeps/tile/s_fmaf.c deleted file mode 100644 index aa5c9b2d91..0000000000 --- a/sysdeps/tile/s_fmaf.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/tile/setjmp.S b/sysdeps/tile/setjmp.S deleted file mode 100644 index 0321c10b43..0000000000 --- a/sysdeps/tile/setjmp.S +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - .text - - /* Keep traditional entry points in with sigsetjmp(). */ -ENTRY(setjmp) - { movei r1, 1; j 1f } -END(setjmp) - -ENTRY(_setjmp) - { movei r1, 0; j 1f } -END(_setjmp) -libc_hidden_def (_setjmp) - -ENTRY(__sigsetjmp) - FEEDBACK_ENTER(__sigsetjmp) -1: - move r2, r0 - -#define SAVE(r) { ST r2, r ; ADDI_PTR r2, r2, REGSIZE } - FOR_EACH_CALLEE_SAVED_REG(SAVE) - - mfspr r3, INTERRUPT_CRITICAL_SECTION - ST r2, r3 - j plt(__sigjmp_save) - jrp lr /* Keep the backtracer happy. */ -END(__sigsetjmp) -hidden_def (__sigsetjmp) diff --git a/sysdeps/tile/sfp-machine.h b/sysdeps/tile/sfp-machine.h deleted file mode 100644 index 1dc92cd4cf..0000000000 --- a/sysdeps/tile/sfp-machine.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Machine-dependent software floating-point definitions, tile version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#define _FP_W_TYPE_SIZE __WORDSIZE -#define _FP_W_TYPE unsigned long -#define _FP_WS_TYPE signed long -#define _FP_I_TYPE long - -#if _FP_W_TYPE_SIZE == 64 - -#define _FP_MUL_MEAT_S(R,X,Y) \ - _FP_MUL_MEAT_1_imm(_FP_WFRACBITS_S,R,X,Y) -#define _FP_MUL_MEAT_D(R,X,Y) \ - _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_MUL_MEAT_DW_S(R,X,Y) \ - _FP_MUL_MEAT_DW_1_imm(_FP_WFRACBITS_S,R,X,Y) -#define _FP_MUL_MEAT_DW_D(R,X,Y) \ - _FP_MUL_MEAT_DW_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_DW_Q(R,X,Y) \ - _FP_MUL_MEAT_DW_2_wide_3mul(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y) -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) - -#define _FP_NANFRAC_S _FP_QNANBIT_S -#define _FP_NANFRAC_D _FP_QNANBIT_D -#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0 - -#else /* _FP_W_TYPE_SIZE == 32 */ - -#define _FP_MUL_MEAT_S(R,X,Y) \ - _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_D(R,X,Y) \ - _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_MUL_MEAT_DW_S(R,X,Y) \ - _FP_MUL_MEAT_DW_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_DW_D(R,X,Y) \ - _FP_MUL_MEAT_DW_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_DW_Q(R,X,Y) \ - _FP_MUL_MEAT_DW_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) - -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) - -#define _FP_NANFRAC_S _FP_QNANBIT_S -#define _FP_NANFRAC_D _FP_QNANBIT_D, 0 -#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0 - -#endif - -#define _FP_NANSIGN_S 1 -#define _FP_NANSIGN_D 1 -#define _FP_NANSIGN_Q 1 - -#define _FP_KEEPNANFRACP 1 -#define _FP_QNANNEGATEDP 0 - -#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \ - && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \ - { \ - R##_s = Y##_s; \ - _FP_FRAC_COPY_##wc(R,Y); \ - } \ - else \ - { \ - R##_s = X##_s; \ - _FP_FRAC_COPY_##wc(R,X); \ - } \ - R##_c = FP_CLS_NAN; \ - } while (0) - -#define _FP_TININESS_AFTER_ROUNDING 0 diff --git a/sysdeps/tile/sotruss-lib.c b/sysdeps/tile/sotruss-lib.c deleted file mode 100644 index 67fdad84a6..0000000000 --- a/sysdeps/tile/sotruss-lib.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Override generic sotruss-lib.c to define actual functions for tile. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define HAVE_ARCH_PLTENTER -#define HAVE_ARCH_PLTEXIT - -#include - -ElfW(Addr) -la_tile_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), - unsigned int ndx __attribute__ ((unused)), - uintptr_t *refcook, uintptr_t *defcook, - La_tile_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - print_enter (refcook, defcook, symname, - regs->lr_reg[0], regs->lr_reg[1], regs->lr_reg[2], - *flags); - - /* No need to copy anything, we will not need the parameters in any case. */ - *framesizep = 0; - - return sym->st_value; -} - -unsigned int -la_tile_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, const struct La_tile_regs *inregs, - struct La_tile_retval *outregs, const char *symname) -{ - print_exit (refcook, defcook, symname, outregs->lrv_reg[0]); - - return 0; -} diff --git a/sysdeps/tile/stackguard-macros.h b/sysdeps/tile/stackguard-macros.h deleted file mode 100644 index f2e041b99b..0000000000 --- a/sysdeps/tile/stackguard-macros.h +++ /dev/null @@ -1,20 +0,0 @@ -#include - -#ifdef __tilegx__ -# if __WORDSIZE == 64 -# define STACK_CHK_GUARD \ - ({ uintptr_t x; asm ("addi %0, tp, -16; ld %0, %0" : "=r" (x)); x; }) -# define POINTER_CHK_GUARD \ - ({ uintptr_t x; asm ("addi %0, tp, -24; ld %0, %0" : "=r" (x)); x; }) -# else -# define STACK_CHK_GUARD \ - ({ uintptr_t x; asm ("addi %0, tp, -8; ld4s %0, %0" : "=r" (x)); x; }) -# define POINTER_CHK_GUARD \ - ({ uintptr_t x; asm ("addi %0, tp, -12; ld4s %0, %0" : "=r" (x)); x; }) -# endif -#else -# define STACK_CHK_GUARD \ - ({ uintptr_t x; asm ("addi %0, tp, -8; lw %0, %0" : "=r" (x)); x; }) -# define POINTER_CHK_GUARD \ - ({ uintptr_t x; asm ("addi %0, tp, -12; lw %0, %0" : "=r" (x)); x; }) -#endif diff --git a/sysdeps/tile/stackinfo.h b/sysdeps/tile/stackinfo.h deleted file mode 100644 index 0bef407941..0000000000 --- a/sysdeps/tile/stackinfo.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* On tile the stack grows down. */ -#define _STACK_GROWS_DOWN 1 - -/* Default to a non-executable stack. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W) - -/* Access to the stack pointer. The macros are used in alloca_account - for which they need to act as barriers as well, hence the additional - (unnecessary) parameters. */ -#define stackinfo_get_sp() \ - ({ void *p__; asm volatile ("move %0, sp" : "=r" (p__)); p__; }) -#if defined __tilegx__ && __WORDSIZE == 32 -#define __stackinfo_sub "subx" -#else -#define __stackinfo_sub "sub" -#endif -#define stackinfo_sub_sp(ptr) \ - ({ ptrdiff_t d__; \ - asm volatile (__stackinfo_sub " %0, %0, sp" : "=r" (d__) : "0" (ptr)); \ - d__; }) - -#endif /* stackinfo.h */ diff --git a/sysdeps/tile/start.S b/sysdeps/tile/start.S deleted file mode 100644 index c790c265e3..0000000000 --- a/sysdeps/tile/start.S +++ /dev/null @@ -1,203 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This is the canonical entry point, usually the first thing in the text - segment. The ELF standard tells us that the stack is set up like this on - entry (the left side is the offset from "sp"), in units of - __SIZEOF_POINTER__ entries: - - +0 argc - +1 argv[0] - ... - +(argc+1) NULL - +(argc+2) envp[0] - ... - NULL - ... ElfInfo - - The ElfInfo is pairs of key/value long words following the envp - pointers and terminated by a zero-valued key. - - Although not mandated by the standard, it happens to be the case - that we store the actual argv and envp strings immediately after - the ElfInfo data on the stack. - - On entry r0 points to the shared library termination function, or 0 - if there isn't one. -*/ - -#include -#include -#include - -/* Just create no-ops if we don't support PC-relative PLT relocations. */ -#ifdef NO_PLT_PCREL -# define hw2_last_plt(x) 0 -# define hw1_plt(x) 0 -# define hw0_plt(x) 0 -#endif - - .text - .global _start - .type _start,@function - .align 8 -_start: - /* Linux starts us with sp pointing at the conventional Elf layout, - but we need to allow two "caller" words for our ABI convention. */ - { - /* Load argc (stored as a "long", equivalent to a pointer type). */ - LD_PTR r1, sp - - /* Save incoming 'sp', which points to the Elf argument block. */ - move r52, sp - } - - { - /* Allocate stack frame callee space for __libc_start_main. */ - ADDI_PTR r12, sp, -(2 * REGSIZE) - } - - { - /* Get our PC. */ - lnk r13 - - /* sp is not necessarily properly aligned on startup because - of the way ld.so pops off leading argv elements. So align it. */ - andi sp, r12, -8 - } -.Lmy_pc: - - { - /* Pass the address of the shared library termination function. */ - move r5, r0 - - /* Compute location where __libc_start_main's caller is supposed to - store its frame pointer. */ - ADDI_PTR r12, sp, REGSIZE - - /* Zero out callee space for return address. Unnecessary but free. - This is just paranoia to help backtracing not go awry. */ - ST sp, zero - } - { - /* Zero out our frame pointer for __libc_start_main. */ - ST r12, zero - - /* Zero out lr to make __libc_start_main the end of backtrace. */ - move lr, zero - - /* Compute a pointer to argv. envp will be determined - later in __libc_start_main. We set up the first argument - (the address of main) below. */ - ADDI_PTR r2, r52, __SIZEOF_POINTER__ - } - { - /* Pass the highest stack address to user code. */ - ADDI_PTR r6, sp, (2 * REGSIZE) - - /* Pass address of main() in r0, and of our own entry - points to .fini and .init in r3 and r4. */ -#ifdef __tilegx__ - moveli r0, hw2_last(main - .Lmy_pc) - } - { - shl16insli r0, r0, hw1(main - .Lmy_pc) - moveli r3, hw2_last(__libc_csu_init - .Lmy_pc) - } - { - shl16insli r0, r0, hw0(main - .Lmy_pc) - shl16insli r3, r3, hw1(__libc_csu_init - .Lmy_pc) - } - { - ADD_PTR r0, r0, r13 - shl16insli r3, r3, hw0(__libc_csu_init - .Lmy_pc) - } - { - moveli r12, hw2_last_plt(__libc_start_main - .Lmy_pc) - ADD_PTR r3, r3, r13 - } - { - shl16insli r12, r12, hw1_plt(__libc_start_main - .Lmy_pc) - moveli r4, hw2_last(__libc_csu_fini - .Lmy_pc) - } - { - shl16insli r12, r12, hw0_plt(__libc_start_main - .Lmy_pc) - shl16insli r4, r4, hw1(__libc_csu_fini - .Lmy_pc) - } - { - ADD_PTR r12, r12, r13 - shl16insli r4, r4, hw0(__libc_csu_fini - .Lmy_pc) - } - { - ADD_PTR r4, r4, r13 -# ifdef NO_PLT_PCREL - j plt(__libc_start_main) -# else - jr r12 -# endif - } -#else - addli r0, r13, lo16(main - .Lmy_pc) - } - { - auli r0, r0, ha16(main - .Lmy_pc) - addli r3, r13, lo16(__libc_csu_init - .Lmy_pc) - } - { - auli r3, r3, ha16(__libc_csu_init - .Lmy_pc) - addli r4, r13, lo16(__libc_csu_fini - .Lmy_pc) - } - { - auli r4, r4, ha16(__libc_csu_fini - .Lmy_pc) - /* Call the user's main function, and exit with its value. - But let the libc call main. */ - j plt(__libc_start_main) - } -#endif - - { - /* Tell backtracer to give up (_start has no caller). */ - info INFO_OP_CANNOT_BACKTRACE - } -.size _start, .-_start - -/* Define a symbol for the first piece of initialized data. */ - .data - .global __data_start - .align 8 -__data_start: - .long 0 - .weak data_start - data_start = __data_start diff --git a/sysdeps/tile/sysdep.h b/sysdeps/tile/sysdep.h deleted file mode 100644 index cd94e7745b..0000000000 --- a/sysdeps/tile/sysdep.h +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -#if defined __ASSEMBLER__ || defined REQUEST_ASSEMBLER_MACROS - -#include - -/* Make use of .size directive. */ -#define ASM_SIZE_DIRECTIVE(name) .size name,.-name; - -/* Define an entry point visible from C. */ -#define ENTRY(name) \ - .globl C_SYMBOL_NAME(name); \ - .type C_SYMBOL_NAME(name),@function; \ - .align 8; \ - C_LABEL(name) \ - cfi_startproc; \ - CALL_MCOUNT - -#undef END -#define END(name) \ - cfi_endproc; \ - ASM_SIZE_DIRECTIVE(name) - -/* Since C identifiers are not normally prefixed with an underscore - on this system, the asm identifier `syscall_error' intrudes on the - C name space. Make sure we use an innocuous name. */ -#define syscall_error __syscall_error -#define mcount __mcount - -/* If compiled for profiling, call `mcount' at the start of each function. - The mcount code requires the caller PC in r10. The `mcount' function - sets lr back to the value r10 had on entry when it returns. */ -#ifdef PROF -#define CALL_MCOUNT { move r10, lr; jal mcount } -#else -#define CALL_MCOUNT /* Do nothing. */ -#endif - -/* Local label name for asm code. */ -#define L(name) .L##name - -/* Specify the size in bytes of a machine register. */ -#ifdef __tilegx__ -#define REGSIZE 8 -#else -#define REGSIZE 4 -#endif - -/* Support a limited form of shared assembly between tilepro and tilegx. - The presumption is that LD/ST are used for manipulating registers. - Since opcode parsing is case-insensitive, we don't need to provide - definitions for these on tilegx. */ -#ifndef __tilegx__ -#define LD lw -#define LD4U lw -#define ST sw -#define ST4 sw -#define BNEZ bnz -#define BEQZ bz -#define BEQZT bzt -#define BGTZ bgz -#define CMPEQI seqi -#define CMPEQ seq -#define CMOVEQZ mvz -#define CMOVNEZ mvnz -#endif - -/* Provide "pointer-oriented" instruction variants. These differ not - just for tilepro vs tilegx, but also for tilegx -m64 vs -m32. */ -#if defined __tilegx__ && __WORDSIZE == 32 -#define ADD_PTR addx -#define ADDI_PTR addxi -#define ADDLI_PTR addxli -#define LD_PTR ld4s -#define ST_PTR st4 -#define SHL_PTR_ADD shl2add -#else -#define ADD_PTR add -#define ADDI_PTR addi -#define ADDLI_PTR addli -#define LD_PTR LD -#define ST_PTR ST -#ifdef __tilegx__ -#define SHL_PTR_ADD shl3add -#else -#define SHL_PTR_ADD s2a -#endif -#endif - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/tile/tilegx/Implies b/sysdeps/tile/tilegx/Implies deleted file mode 100644 index ade71c1957..0000000000 --- a/sysdeps/tile/tilegx/Implies +++ /dev/null @@ -1 +0,0 @@ -ieee754/dbl-64/wordsize-64 diff --git a/sysdeps/tile/tilegx/Makefile b/sysdeps/tile/tilegx/Makefile deleted file mode 100644 index 4281dd98fc..0000000000 --- a/sysdeps/tile/tilegx/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -include $(common-objpfx)cflags-mcmodel-large.mk - -# Check for gcc to support the command-line switch, and for -# binutils to support the hwN_plt() assembly operators and relocations. -$(common-objpfx)cflags-mcmodel-large.mk: $(common-objpfx)config.make - mcmodel=no; \ - (echo 'int main() { return getuid(); }' | \ - $(CC) -o /dev/null -xc - -mcmodel=large -fpic) && mcmodel=yes; \ - echo "cflags-mcmodel-large = $$mcmodel" > $@ - -ifeq (yes,$(cflags-mcmodel-large)) - -ifeq ($(subdir),csu) -# elf-init.c is in libc_nonshared.o (the end of the shared object) but -# must reach the _init symbol at the very start of the shared object. -CFLAGS-elf-init.c += -mcmodel=large - -# __gmon_start__ is at the very start of the shared object when linked -# with profiling, but calls to libc.so via the PLT at the very end. -CFLAGS-gmon-start.c += -mcmodel=large -endif - -else - -# Don't try to compile assembly code with hwN_plt() directives if the -# toolchain doesn't support -mcmodel=large. -ifeq ($(subdir),csu) -CPPFLAGS-start.S += -DNO_PLT_PCREL -CPPFLAGS-crti.S += -DNO_PLT_PCREL -endif -ifeq ($(subdir),nptl) -CPPFLAGS-pt-crti.S += -DNO_PLT_PCREL -endif - -endif diff --git a/sysdeps/tile/tilegx/atomic-machine.h b/sysdeps/tile/tilegx/atomic-machine.h deleted file mode 100644 index e77f6707b0..0000000000 --- a/sysdeps/tile/tilegx/atomic-machine.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _ATOMIC_MACHINE_H -#define _ATOMIC_MACHINE_H 1 - -#include - -#ifdef _LP64 -# define __HAVE_64B_ATOMICS 1 -#else -/* tilegx32 does have 64-bit atomics, but assumptions in the semaphore - code mean that unaligned 64-bit atomics will be used if this symbol - is true, and unaligned atomics are not supported on tile. */ -# define __HAVE_64B_ATOMICS 0 -#endif - -#define USE_ATOMIC_COMPILER_BUILTINS 0 -#define ATOMIC_EXCHANGE_USES_CAS 0 - -/* Pick appropriate 8- or 4-byte instruction. */ -#define __atomic_update(mem, v, op) \ - ((__typeof (*(mem))) (__typeof (*(mem) - *(mem))) \ - ((sizeof (*(mem)) == 8) ? \ - __insn_##op ((void *) (mem), (int64_t) (__typeof((v) - (v))) (v)) : \ - (sizeof (*(mem)) == 4) ? \ - __insn_##op##4 ((void *) (mem), (int32_t) (__typeof ((v) - (v))) (v)) : \ - __atomic_error_bad_argument_size())) - -#define atomic_compare_and_exchange_val_acq(mem, n, o) \ - ({ __insn_mtspr (SPR_CMPEXCH_VALUE, (int64_t) (__typeof ((o) - (o))) (o)); \ - __atomic_update (mem, n, cmpexch); }) -#define atomic_exchange_acq(mem, newvalue) \ - __atomic_update (mem, newvalue, exch) -#define atomic_exchange_and_add(mem, value) \ - __atomic_update (mem, value, fetchadd) -#define atomic_and_val(mem, mask) \ - __atomic_update (mem, mask, fetchand) -#define atomic_or_val(mem, mask) \ - __atomic_update (mem, mask, fetchor) -#define atomic_decrement_if_positive(mem) \ - __atomic_update (mem, -1, fetchaddgez) - -#include - -#endif /* atomic-machine.h */ diff --git a/sysdeps/tile/tilegx/bits/wordsize.h b/sysdeps/tile/tilegx/bits/wordsize.h deleted file mode 100644 index 9dc4da5de9..0000000000 --- a/sysdeps/tile/tilegx/bits/wordsize.h +++ /dev/null @@ -1,11 +0,0 @@ -/* Determine the wordsize from the preprocessor defines. */ - -#ifdef __LP64__ -# define __WORDSIZE 64 -# define __WORDSIZE_TIME64_COMPAT32 1 -#else -# define __WORDSIZE 32 -# define __WORDSIZE_TIME64_COMPAT32 0 -# define __WORDSIZE32_SIZE_ULONG 0 -# define __WORDSIZE32_PTRDIFF_LONG 0 -#endif diff --git a/sysdeps/tile/tilegx/memchr.c b/sysdeps/tile/tilegx/memchr.c deleted file mode 100644 index 7da0f79da2..0000000000 --- a/sysdeps/tile/tilegx/memchr.c +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "string-endian.h" - -void * -__memchr (const void *s, int c, size_t n) -{ - const uint64_t *last_word_ptr; - const uint64_t *p; - const char *last_byte_ptr; - uintptr_t s_int; - uint64_t goal, before_mask, v, bits; - char *ret; - - if (__builtin_expect (n == 0, 0)) - { - /* Don't dereference any memory if the array is empty. */ - return NULL; - } - - /* Get an aligned pointer. */ - s_int = (uintptr_t) s; - p = (const uint64_t *) (s_int & -8); - - /* Create eight copies of the byte for which we are looking. */ - goal = copy_byte(c); - - /* Read the first word, but munge it so that bytes before the array - will not match goal. */ - before_mask = MASK (s_int); - v = (*p | before_mask) ^ (goal & before_mask); - - /* Compute the address of the last byte. */ - last_byte_ptr = (const char *) s + n - 1; - - /* Handle possible addition overflow. */ - if (__glibc_unlikely ((uintptr_t) last_byte_ptr < (uintptr_t) s)) - last_byte_ptr = (const char *) UINTPTR_MAX; - - /* Compute the address of the word containing the last byte. */ - last_word_ptr = (const uint64_t *) ((uintptr_t) last_byte_ptr & -8); - - while ((bits = __insn_v1cmpeq (v, goal)) == 0) - { - if (__builtin_expect (p == last_word_ptr, 0)) - { - /* We already read the last word in the array, so give up. */ - return NULL; - } - v = *++p; - } - - /* We found a match, but it might be in a byte past the end - of the array. */ - ret = ((char *) p) + (CFZ (bits) >> 3); - return (ret <= last_byte_ptr) ? ret : NULL; -} -weak_alias (__memchr, memchr) -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/tile/tilegx/memcpy.c b/sysdeps/tile/tilegx/memcpy.c deleted file mode 100644 index c1a2a29860..0000000000 --- a/sysdeps/tile/tilegx/memcpy.c +++ /dev/null @@ -1,272 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -/* How many cache lines ahead should we prefetch? */ -#define PREFETCH_LINES_AHEAD 3 - -void * inhibit_loop_to_libcall -__memcpy (void *__restrict dstv, const void *__restrict srcv, size_t n) -{ - char *__restrict dst1 = (char *) dstv; - const char *__restrict src1 = (const char *) srcv; - const char *__restrict src1_end; - const char *__restrict prefetch; - op_t *__restrict dst8; /* 8-byte pointer to destination memory. */ - op_t final; /* Final bytes to write to trailing word, if any */ - long i; - - if (n < 16) - { - for (; n; n--) - *dst1++ = *src1++; - return dstv; - } - - /* Locate the end of source memory we will copy. Don't prefetch - past this. */ - src1_end = src1 + n - 1; - - /* Prefetch ahead a few cache lines, but not past the end. */ - prefetch = src1; - for (i = 0; i < PREFETCH_LINES_AHEAD; i++) - { - __insn_prefetch (prefetch); - prefetch += CHIP_L2_LINE_SIZE (); - prefetch = (prefetch < src1_end) ? prefetch : src1; - } - - /* Copy bytes until dst is word-aligned. */ - for (; (uintptr_t) dst1 & (sizeof (op_t) - 1); n--) - *dst1++ = *src1++; - - /* 8-byte pointer to destination memory. */ - dst8 = (op_t *) dst1; - - if (__builtin_expect ((uintptr_t) src1 & (sizeof (op_t) - 1), 0)) - { - /* Misaligned copy. Use glibc's _wordcopy_fwd_dest_aligned, but - inline it to avoid prologue/epilogue. TODO: Consider - prefetching and using wh64 as well. */ - void * srci; - op_t a0, a1, a2, a3; - long int dstp = (long int) dst1; - long int srcp = (long int) src1; - long int len = n / OPSIZ; - - /* Save the initial source pointer so we know the number of - bytes to shift for merging two unaligned results. */ - srci = (void *) srcp; - - /* Make SRCP aligned by rounding it down to the beginning of the - `op_t' it points in the middle of. */ - srcp &= -OPSIZ; - - switch (len % 4) - { - case 2: - a1 = ((op_t *) srcp)[0]; - a2 = ((op_t *) srcp)[1]; - len += 2; - srcp += 2 * OPSIZ; - goto do1; - case 3: - a0 = ((op_t *) srcp)[0]; - a1 = ((op_t *) srcp)[1]; - len += 1; - srcp += 2 * OPSIZ; - goto do2; - case 0: - if (OP_T_THRES <= 3 * OPSIZ && len == 0) - return dstv; - a3 = ((op_t *) srcp)[0]; - a0 = ((op_t *) srcp)[1]; - len += 0; - srcp += 2 * OPSIZ; - goto do3; - case 1: - a2 = ((op_t *) srcp)[0]; - a3 = ((op_t *) srcp)[1]; - srcp += 2 * OPSIZ; - len -= 1; - if (OP_T_THRES <= 3 * OPSIZ && len == 0) - goto do0; - goto do4; /* No-op. */ - } - - do - { - do4: - a0 = ((op_t *) srcp)[0]; - a2 = __insn_dblalign (a2, a3, srci); - ((op_t *) dstp)[0] = a2; - srcp += OPSIZ; - dstp += OPSIZ; - do3: - a1 = ((op_t *) srcp)[0]; - a3 = __insn_dblalign (a3, a0, srci); - ((op_t *) dstp)[0] = a3; - srcp += OPSIZ; - dstp += OPSIZ; - do2: - a2 = ((op_t *) srcp)[0]; - a0 = __insn_dblalign (a0, a1, srci); - ((op_t *) dstp)[0] = a0; - srcp += OPSIZ; - dstp += OPSIZ; - do1: - a3 = ((op_t *) srcp)[0]; - a1 = __insn_dblalign (a1, a2, srci); - ((op_t *) dstp)[0] = a1; - srcp += OPSIZ; - dstp += OPSIZ; - len -= 4; - } - while (len != 0); - - /* This is the right position for do0. Please don't move - it into the loop. */ - do0: - ((op_t *) dstp)[0] = __insn_dblalign (a2, a3, srci); - - n = n % OPSIZ; - if (n == 0) - return dstv; - - a0 = ((const char *) srcp <= src1_end) ? ((op_t *) srcp)[0] : 0; - - final = __insn_dblalign (a3, a0, srci); - dst8 = (op_t *)(dstp + OPSIZ); - } - else - { - /* Aligned copy. */ - - const op_t *__restrict src8 = (const op_t *) src1; - - /* src8 and dst8 are both word-aligned. */ - if (n >= CHIP_L2_LINE_SIZE ()) - { - /* Copy until 'dst' is cache-line-aligned. */ - for (; (uintptr_t) dst8 & (CHIP_L2_LINE_SIZE () - 1); - n -= sizeof (op_t)) - *dst8++ = *src8++; - - for (; n >= CHIP_L2_LINE_SIZE ();) - { - op_t tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; - - /* Prefetch and advance to next line to prefetch, but - don't go past the end. */ - __insn_prefetch (prefetch); - prefetch += CHIP_L2_LINE_SIZE (); - prefetch = (prefetch < src1_end) ? prefetch : - (const char *) src8; - - /* Do all the loads before wh64. This is necessary if - [src8, src8+7] and [dst8, dst8+7] share the same - cache line and dst8 <= src8, as can be the case when - called from memmove, or with code tested on x86 whose - memcpy always works with forward copies. */ - tmp0 = *src8++; - tmp1 = *src8++; - tmp2 = *src8++; - tmp3 = *src8++; - tmp4 = *src8++; - tmp5 = *src8++; - tmp6 = *src8++; - tmp7 = *src8++; - - __insn_wh64 (dst8); - - *dst8++ = tmp0; - *dst8++ = tmp1; - *dst8++ = tmp2; - *dst8++ = tmp3; - *dst8++ = tmp4; - *dst8++ = tmp5; - *dst8++ = tmp6; - *dst8++ = tmp7; - - n -= 64; - } -#if CHIP_L2_LINE_SIZE() != 64 -# error "Fix code that assumes particular L2 cache line size." -#endif - } - - for (; n >= sizeof (op_t); n -= sizeof (op_t)) - *dst8++ = *src8++; - - if (__builtin_expect (n == 0, 1)) - return dstv; - - final = *src8; - } - - /* n != 0 if we get here. Write out any trailing bytes. */ - dst1 = (char *) dst8; -#ifndef __BIG_ENDIAN__ - if (n & 4) - { - *(uint32_t *) dst1 = final; - dst1 += 4; - final >>= 32; - n &= 3; - } - if (n & 2) - { - *(uint16_t *) dst1 = final; - dst1 += 2; - final >>= 16; - n &= 1; - } - if (n) - *(uint8_t *) dst1 = final; -#else - if (n & 4) - { - *(uint32_t *) dst1 = final >> 32; - dst1 += 4; - } - else - { - final >>= 32; - } - if (n & 2) - { - *(uint16_t *) dst1 = final >> 16; - dst1 += 2; - } - else - { - final >>= 16; - } - if (n & 1) - *(uint8_t *) dst1 = final >> 8; -#endif - - return dstv; -} -weak_alias (__memcpy, memcpy) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/tile/tilegx/memset.c b/sysdeps/tile/tilegx/memset.c deleted file mode 100644 index c6804a9dc6..0000000000 --- a/sysdeps/tile/tilegx/memset.c +++ /dev/null @@ -1,151 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include "string-endian.h" - -void * inhibit_loop_to_libcall -__memset (void *s, int c, size_t n) -{ - uint64_t *out64; - int n64, to_align64; - uint64_t v64; - uint8_t *out8 = s; - - /* Experimentation shows that a trivial tight loop is a win up until - around a size of 20, where writing a word at a time starts to win. */ -#define BYTE_CUTOFF 20 - -#if BYTE_CUTOFF < 7 - /* This must be at least at least this big, or some code later - on doesn't work. */ -# error "BYTE_CUTOFF is too small." -#endif - - if (n < BYTE_CUTOFF) - { - /* Strangely, this turns out to be the tightest way to write - this loop. */ - if (n != 0) - { - do - { - /* Strangely, combining these into one line performs worse. */ - *out8 = c; - out8++; - } - while (--n != 0); - } - - return s; - } - - /* Align 'out8'. We know n >= 7 so this won't write past the end. */ - while (((uintptr_t) out8 & 7) != 0) - { - *out8++ = c; - --n; - } - - /* Align 'n'. */ - while (n & 7) - out8[--n] = c; - - out64 = (uint64_t *) out8; - n64 = n >> 3; - - /* Tile input byte out to 64 bits. */ - v64 = copy_byte(c); - - /* This must be at least 8 or the following loop doesn't work. */ -#define CACHE_LINE_SIZE_IN_DOUBLEWORDS (CHIP_L2_LINE_SIZE() / 8) - - /* Determine how many words we need to emit before the 'out32' - pointer becomes aligned modulo the cache line size. */ - to_align64 = (-((uintptr_t) out64 >> 3)) & - (CACHE_LINE_SIZE_IN_DOUBLEWORDS - 1); - - /* Only bother aligning and using wh64 if there is at least - one full cache line to process. This check also prevents - overrunning the end of the buffer with alignment words. */ - if (to_align64 <= n64 - CACHE_LINE_SIZE_IN_DOUBLEWORDS) - { - int lines_left; - - /* Align out64 mod the cache line size so we can use wh64. */ - n64 -= to_align64; - for (; to_align64 != 0; to_align64--) - { - *out64 = v64; - out64++; - } - - /* Use unsigned divide to turn this into a right shift. */ - lines_left = (unsigned) n64 / CACHE_LINE_SIZE_IN_DOUBLEWORDS; - - do - { - /* Only wh64 a few lines at a time, so we don't exceed the - maximum number of victim lines. */ - int x = ((lines_left < CHIP_MAX_OUTSTANDING_VICTIMS ()) ? lines_left - : CHIP_MAX_OUTSTANDING_VICTIMS ()); - uint64_t *wh = out64; - int i = x; - int j; - - lines_left -= x; - - do - { - __insn_wh64 (wh); - wh += CACHE_LINE_SIZE_IN_DOUBLEWORDS; - } - while (--i); - - for (j = x * (CACHE_LINE_SIZE_IN_DOUBLEWORDS / 4); j != 0; j--) - { - *out64++ = v64; - *out64++ = v64; - *out64++ = v64; - *out64++ = v64; - } - } - while (lines_left != 0); - - /* We processed all full lines above, so only this many - words remain to be processed. */ - n64 &= CACHE_LINE_SIZE_IN_DOUBLEWORDS - 1; - } - - /* Now handle any leftover values. */ - if (n64 != 0) - { - do - { - *out64 = v64; - out64++; - } - while (--n64 != 0); - } - - return s; -} -weak_alias (__memset, memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/tile/tilegx/memusage.h b/sysdeps/tile/tilegx/memusage.h deleted file mode 100644 index c91371adcd..0000000000 --- a/sysdeps/tile/tilegx/memusage.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; }) - -#define GETTIME(low,high) \ - { \ - uint64_t cycles = __insn_mfspr (SPR_CYCLE); \ - low = cycles & 0xffffffff; \ - high = cycles >> 32; \ - } - -#include diff --git a/sysdeps/tile/tilegx/rawmemchr.c b/sysdeps/tile/tilegx/rawmemchr.c deleted file mode 100644 index 54b4a5c1b8..0000000000 --- a/sysdeps/tile/tilegx/rawmemchr.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "string-endian.h" - -void * -__rawmemchr (const void *s, int c) -{ - /* Get an aligned pointer. */ - const uintptr_t s_int = (uintptr_t) s; - const uint64_t *p = (const uint64_t *) (s_int & -8); - - /* Create eight copies of the byte for which we are looking. */ - const uint64_t goal = copy_byte(c); - - /* Read the first word, but munge it so that bytes before the array - will not match goal. */ - const uint64_t before_mask = MASK (s_int); - uint64_t v = (*p | before_mask) ^ (goal & before_mask); - - uint64_t bits; - while ((bits = __insn_v1cmpeq (v, goal)) == 0) - v = *++p; - - return ((char *) p) + (CFZ (bits) >> 3); -} -libc_hidden_def (__rawmemchr) -weak_alias (__rawmemchr, rawmemchr) diff --git a/sysdeps/tile/tilegx/strcasestr.c b/sysdeps/tile/tilegx/strcasestr.c deleted file mode 100644 index ecb3e623ca..0000000000 --- a/sysdeps/tile/tilegx/strcasestr.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Return the offset of one string within another. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if HAVE_CONFIG_H -# include -#endif - -/* Specification. */ -#include - -#include -#include -#include - -#define USE_AS_STRCASESTR -#define STRSTR __strcasestr -#define STRSTR2 strcasestr2 -#define STRCHR strcasechr -#define STRSTR_SCAN strcasestr_scan - -#undef strcasestr -#undef __strcasestr - -#ifndef STRCASESTR -#define STRCASESTR __strcasestr -#endif - -#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) - -#define CANON_ELEMENT(c) TOLOWER (c) -#define CMP_FUNC(p1, p2, l) \ - __strncasecmp ((const char *) (p1), (const char *) (p2), l) - -#include "strstr.c" - -#ifndef NO_ALIAS -weak_alias (__strcasestr, strcasestr) -#endif diff --git a/sysdeps/tile/tilegx/strchr.c b/sysdeps/tile/tilegx/strchr.c deleted file mode 100644 index 36dfd31391..0000000000 --- a/sysdeps/tile/tilegx/strchr.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "string-endian.h" - -#undef strchr - -char * -strchr (const char *s, int c) -{ - int z, g; - - /* Get an aligned pointer. */ - const uintptr_t s_int = (uintptr_t) s; - const uint64_t *p = (const uint64_t *) (s_int & -8); - - /* Create eight copies of the byte for which we are looking. */ - const uint64_t goal = copy_byte(c); - - /* Read the first aligned word, but force bytes before the string to - match neither zero nor goal (we make sure the high bit of each byte - is 1, and the low 7 bits are all the opposite of the goal byte). */ - const uint64_t before_mask = MASK (s_int); - uint64_t v = (*p | before_mask) ^ (goal & __insn_v1shrui (before_mask, 1)); - - uint64_t zero_matches, goal_matches; - while (1) - { - /* Look for a terminating '\0'. */ - zero_matches = __insn_v1cmpeqi (v, 0); - - /* Look for the goal byte. */ - goal_matches = __insn_v1cmpeq (v, goal); - - if (__builtin_expect ((zero_matches | goal_matches) != 0, 0)) - break; - - v = *++p; - } - - z = CFZ (zero_matches); - g = CFZ (goal_matches); - - /* If we found c before '\0' we got a match. Note that if c == '\0' - then g == z, and we correctly return the address of the '\0' - rather than NULL. */ - return (g <= z) ? ((char *) p) + (g >> 3) : NULL; -} -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/tile/tilegx/strchrnul.c b/sysdeps/tile/tilegx/strchrnul.c deleted file mode 100644 index e0f13b684e..0000000000 --- a/sysdeps/tile/tilegx/strchrnul.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "string-endian.h" - -char * -__strchrnul (const char *s, int c) -{ - int z, g; - - /* Get an aligned pointer. */ - const uintptr_t s_int = (uintptr_t) s; - const uint64_t *p = (const uint64_t *) (s_int & -8); - - /* Create eight copies of the byte for which we are looking. */ - const uint64_t goal = copy_byte(c); - - /* Read the first aligned word, but force bytes before the string to - match neither zero nor goal (we make sure the high bit of each byte - is 1, and the low 7 bits are all the opposite of the goal byte). */ - const uint64_t before_mask = MASK (s_int); - uint64_t v = (*p | before_mask) ^ (goal & __insn_v1shrui (before_mask, 1)); - - uint64_t zero_matches, goal_matches; - while (1) - { - /* Look for a terminating '\0'. */ - zero_matches = __insn_v1cmpeqi (v, 0); - - /* Look for the goal byte. */ - goal_matches = __insn_v1cmpeq (v, goal); - - if (__builtin_expect ((zero_matches | goal_matches) != 0, 0)) - break; - - v = *++p; - } - - z = CFZ (zero_matches); - g = CFZ (goal_matches); - - /* Return a pointer to the NUL or goal, whichever is first. */ - if (z < g) - g = z; - return ((char *) p) + (g >> 3); -} -weak_alias (__strchrnul, strchrnul) diff --git a/sysdeps/tile/tilegx/string-endian.h b/sysdeps/tile/tilegx/string-endian.h deleted file mode 100644 index fe9b073efb..0000000000 --- a/sysdeps/tile/tilegx/string-endian.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* Provide a set of macros to help keep endianness #ifdefs out of - the string functions. - - MASK: Provide a mask based on the pointer alignment that - sets up non-zero bytes before the beginning of the string. - The MASK expression works because shift counts are taken mod 64. - - NULMASK: Clear bytes beyond a given point in the string. - - CFZ: Find the first zero bit in the 8 string bytes in a long. - - REVCZ: Find the last zero bit in the 8 string bytes in a long. - - STRSHIFT: Shift N bits towards the start of the string. */ - -#if __BYTE_ORDER == __LITTLE_ENDIAN -#define MASK(x) (__insn_shl(1ULL, (x << 3)) - 1) -#define NULMASK(x) ((2ULL << x) - 1) -#define CFZ(x) __insn_ctz(x) -#define REVCZ(x) __insn_clz(x) -#define STRSHIFT(x,n) ((x) >> n) -#else -#define MASK(x) (__insn_shl(-2LL, ((-x << 3) - 1))) -#define NULMASK(x) (-2LL << (63 - x)) -#define CFZ(x) __insn_clz(x) -#define REVCZ(x) __insn_ctz(x) -#define STRSHIFT(x,n) ((x) << n) -#endif - -/* Create eight copies of the byte in a uint64_t. Byte Shuffle uses - the bytes of srcB as the index into the dest vector to select a - byte. With all indices of zero, the first byte is copied into all - the other bytes. */ -static inline uint64_t copy_byte(uint8_t byte) -{ - return __insn_shufflebytes(byte, 0, 0); -} diff --git a/sysdeps/tile/tilegx/strlen.c b/sysdeps/tile/tilegx/strlen.c deleted file mode 100644 index 5cd04acc59..0000000000 --- a/sysdeps/tile/tilegx/strlen.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "string-endian.h" - -size_t -strlen (const char *s) -{ - /* Get an aligned pointer. */ - const uintptr_t s_int = (uintptr_t) s; - const uint64_t *p = (const uint64_t *) (s_int & -8); - - /* Read and MASK the first word. */ - uint64_t v = *p | MASK (s_int); - - uint64_t bits; - while ((bits = __insn_v1cmpeqi (v, 0)) == 0) - v = *++p; - - return ((const char *) p) + (CFZ (bits) >> 3) - s; -} -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/tile/tilegx/strnlen.c b/sysdeps/tile/tilegx/strnlen.c deleted file mode 100644 index 5d73a14926..0000000000 --- a/sysdeps/tile/tilegx/strnlen.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "string-endian.h" - -/* Find the length of S, but scan at most MAXLEN characters. If no - '\0' terminator is found in that many characters, return MAXLEN. */ -size_t -__strnlen (const char *s, size_t maxlen) -{ - /* When maxlen is 0, can't read any bytes or it might cause a page fault. */ - if (maxlen == 0) - return 0; - - /* Get an aligned pointer. */ - const uintptr_t s_int = (uintptr_t) s; - const uint64_t *p = (const uint64_t *) (s_int & -8); - size_t bytes_read = sizeof (*p) - (s_int & (sizeof (*p) - 1)); - - /* Read and MASK the first word. */ - uint64_t v = *p | MASK (s_int); - - uint64_t bits; - while ((bits = __insn_v1cmpeqi (v, 0)) == 0) - { - if (bytes_read >= maxlen) - { - /* Read maxlen bytes and didn't find the terminator. */ - return maxlen; - } - v = *++p; - bytes_read += sizeof (v); - } - - /* Found '\0', check it is not larger than maxlen */ - size_t len = ((const char *) p) + (CFZ (bits) >> 3) - s; - return (len < maxlen ? len : maxlen); -} -libc_hidden_def (__strnlen) -weak_alias (__strnlen, strnlen) -libc_hidden_def (strnlen) diff --git a/sysdeps/tile/tilegx/strrchr.c b/sysdeps/tile/tilegx/strrchr.c deleted file mode 100644 index 5a9049e1b9..0000000000 --- a/sysdeps/tile/tilegx/strrchr.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include "string-endian.h" - -char * -strrchr (const char *s, int c) -{ - /* Get an aligned pointer. */ - const uintptr_t s_int = (uintptr_t) s; - const uint64_t *p = (const uint64_t *) (s_int & -8); - - /* Create eight copies of the byte for which we are looking. */ - const uint64_t goal = copy_byte(c); - - /* Read the first aligned word, but force bytes before the string to - match neither zero nor goal (we make sure the high bit of each byte - is 1, and the low 7 bits are all the opposite of the goal byte). */ - const uint64_t before_mask = MASK (s_int); - uint64_t v = (*p | before_mask) ^ (goal & __insn_v1shrui (before_mask, 1)); - const char *found = NULL; - uint64_t zero_matches, goal_matches; - while (1) - { - /* Look for a terminating '\0'. */ - zero_matches = __insn_v1cmpeqi (v, 0); - - /* Look for the goal byte. */ - goal_matches = __insn_v1cmpeq (v, goal); - - /* If we found the goal, record the last offset. */ - if (__builtin_expect (goal_matches != 0, 0)) - { - if (__builtin_expect (zero_matches != 0, 0)) - { - /* Clear any goal after the first zero. */ - int first_nul = CFZ (zero_matches); - goal_matches &= NULMASK (first_nul); - } - if (__builtin_expect (goal_matches != 0, 1)) - found = ((char *) p) + 7 - (REVCZ (goal_matches) >> 3); - } - - if (__builtin_expect (zero_matches != 0, 0)) - return (char *) found; - - v = *++p; - } -} -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/tile/tilegx/strstr.c b/sysdeps/tile/tilegx/strstr.c deleted file mode 100644 index 548a92045d..0000000000 --- a/sysdeps/tile/tilegx/strstr.c +++ /dev/null @@ -1,270 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* Specification of strstr. */ -#include - -#include -#include "string-endian.h" - -#define RETURN_TYPE char * -#define AVAILABLE(h, h_l, j, n_l) \ - (!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l)) \ - && ((h_l) = (j) + (n_l))) -#include "str-two-way.h" -typeof(two_way_short_needle) two_way_short_needle __attribute__((unused)); - -#undef strstr - -#ifndef STRSTR -#define STRSTR strstr -#endif - -#ifndef STRSTR2 -#define STRSTR2 strstr2 -#endif - -#ifndef STRCHR -#define STRCHR strchr -#endif - -#ifndef STRSTR_SCAN -#define STRSTR_SCAN strstr_scan -#endif - -#ifndef TOLOWER -# define TOLOWER(Ch) (Ch) -#endif - -#ifdef USE_AS_STRCASESTR - -static uint64_t -vec_tolower (uint64_t cc) -{ - /* For Uppercases letters, add 32 to convert to lower case. */ - uint64_t less_than_eq_Z = __insn_v1cmpltui (cc, 'Z' + 1); - uint64_t less_than_A = __insn_v1cmpltui (cc, 'A'); - uint64_t is_upper = __insn_v1cmpne (less_than_eq_Z, less_than_A); - return __insn_v1add (cc,__insn_v1shli (is_upper, 5)); -} - -/* There is no strcasechr() defined, but needed for 1 byte case - of strcasestr(), so create it here. */ - -static char * -strcasechr (const char *s, int c) -{ - int z, g; - - c = tolower (c); - - /* Get an aligned pointer. */ - const uintptr_t s_int = (uintptr_t) s; - const uint64_t *p = (const uint64_t *) (s_int & -8); - - /* Create eight copies of the byte for which we are looking. */ - const uint64_t goal = copy_byte(c); - - /* Read the first aligned word, but force bytes before the string to - match neither zero nor goal (we make sure the high bit of each byte - is 1, and the low 7 bits are all the opposite of the goal byte). */ - const uint64_t before_mask = MASK (s_int); - uint64_t v = - (vec_tolower (*p) | before_mask) ^ (goal & __insn_v1shrui (before_mask, 1)); - - uint64_t zero_matches, goal_matches; - while (1) - { - /* Look for a terminating '\0'. */ - zero_matches = __insn_v1cmpeqi (v, 0); - - /* Look for the goal byte. */ - goal_matches = __insn_v1cmpeq (v, goal); - - if (__builtin_expect ((zero_matches | goal_matches) != 0, 0)) - break; - - v = vec_tolower (*++p); - } - - z = CFZ (zero_matches); - g = CFZ (goal_matches); - - /* If we found c before '\0' we got a match. Note that if c == '\0' - then g == z, and we correctly return the address of the '\0' - rather than NULL. */ - return (g <= z) ? ((char *) p) + (g >> 3) : NULL; -} - -# define vec_load(p) vec_tolower (*(p)) -# define STRCHR strcasechr -# define CMP_FUNC __strncasecmp - -#else - -# define vec_load(p) (*(p)) -# define STRCHR strchr -# define CMP_FUNC memcmp - -#endif - - -/* Compare 2-character needle using SIMD. */ -static char * -STRSTR2 (const char *haystack_start, const char *needle) -{ - int z, g; - - __insn_prefetch (haystack_start + 64); - - /* Get an aligned pointer. */ - const uintptr_t s_int = (uintptr_t) haystack_start; - const uint64_t *p = (const uint64_t *) (s_int & -8); - - /* Create eight copies of the first byte for which we are looking. */ - const uint64_t byte1 = copy_byte (TOLOWER (*needle)); - /* Create eight copies of the second byte for which we are looking. */ - const uint64_t byte2 = copy_byte (TOLOWER (*(needle + 1))); - - /* Read the first aligned word, but force bytes before the string to - match neither zero nor goal (we make sure the high bit of each byte - is 1, and the low 7 bits are all the opposite of the goal byte). */ - const uint64_t before_mask = MASK (s_int); - uint64_t v = - (vec_load (p) | before_mask) ^ (byte1 & __insn_v1shrui (before_mask, 1)); - - uint64_t zero_matches, goal_matches; - while (1) - { - /* Look for a terminating '\0'. */ - zero_matches = __insn_v1cmpeqi (v, 0); - uint64_t byte1_matches = __insn_v1cmpeq (v, byte1); - if (__builtin_expect (zero_matches != 0, 0)) - { - /* This is the last vector. Don't worry about matches - crossing into the next vector. Shift the second byte - back 1 byte to align it with the first byte, then and to - check for both matching. Each vector has a 1 in the LSB - of the byte if there was match. */ - uint64_t byte2_matches = __insn_v1cmpeq (v, byte2); - goal_matches = byte1_matches & STRSHIFT (byte2_matches, 8); - break; - } - else - { - /* This is not the last vector, so load the next vector now. - And compare byte2 to the 8-bytes starting 1 byte shifted from v, - which goes 1-byte into the next vector. */ - uint64_t v2 = vec_load (p + 1); - if (byte1_matches) - { - /* 8-bytes starting 1 byte into v. */ - v = __insn_dblalign (v, v2, (void*)1); - uint64_t byte2_matches_shifted = __insn_v1cmpeq (v, byte2); - goal_matches = byte1_matches & byte2_matches_shifted; - if (__builtin_expect (goal_matches != 0, 0)) - break; - } - __insn_prefetch (p + 4); - /* Move to next vector. */ - v = v2; - p++; - } - } - - z = CFZ (zero_matches); - g = CFZ (goal_matches); - - /* If we found the match before '\0' we got a true match. Note that - if c == '\0' then g == z, and we correctly return the address of - the '\0' rather than NULL. */ - return (g <= z) ? ((char *) p) + (g >> 3) : NULL; -} - -/* Scan for NEEDLE, using the first two characters as a filter. */ -static char * -STRSTR_SCAN (const char *haystack, const char *needle, - unsigned int needle_len) -{ - char *match; - while (1) - { - match = STRSTR2 (haystack, needle); - if (match == NULL) - return NULL; - /* Found first two characters of needle, check for remainder. */ - if (CMP_FUNC (match + 2, needle + 2, needle_len - 2) == 0) - return match; - /* Move past the previous match. Could be +2 instead of +1 if - first two characters are different, but that tested slower. */ - haystack = match + 1; - } -} - -/* Return the first occurrence of NEEDLE in HAYSTACK. Return HAYSTACK - if NEEDLE is empty, otherwise NULL if NEEDLE is not found in - HAYSTACK. */ -char * -STRSTR (const char *haystack_start, const char *needle_start) -{ - const char *haystack = haystack_start; - const char *needle = needle_start; - __insn_prefetch (haystack); - size_t needle_len = strlen (needle_start); /* Length of NEEDLE. */ - size_t haystack_len; /* Known minimum length of HAYSTACK. */ - - if (needle_len <= 2) - { - if (needle_len == 1) - return STRCHR (haystack_start, *needle_start); - if (needle_len == 0) - return (char *) haystack_start; - else - return STRSTR2 (haystack_start, needle_start); - } - - /* Fail if NEEDLE is longer than HAYSTACK. */ - if (__strnlen (haystack, needle_len) < needle_len) - return NULL; - - /* Perform the search. Abstract memory is considered to be an array - of 'unsigned char' values, not an array of 'char' values. See - ISO C 99 section 6.2.6.1. */ - if (needle_len < 40) - return STRSTR_SCAN (haystack_start, needle_start, needle_len); - else - { - /* Reduce the size of haystack using STRSTR2, since it has a smaller - linear coefficient than the Two-Way algorithm. */ - haystack = STRSTR2 (haystack_start, needle_start); - if (haystack == NULL) - return NULL; - needle = needle_start; - haystack_len = (haystack > haystack_start + needle_len ? 1 - : needle_len + haystack_start - haystack); - - return two_way_long_needle ((const unsigned char *) haystack, - haystack_len, - (const unsigned char *) needle, needle_len); - } -} -#ifndef USE_AS_STRCASESTR -libc_hidden_builtin_def (STRSTR) -#endif - -#undef LONG_NEEDLE_THRESHOLD diff --git a/sysdeps/tile/tilegx/tilegx32/Implies b/sysdeps/tile/tilegx/tilegx32/Implies deleted file mode 100644 index 993b7f4cd1..0000000000 --- a/sysdeps/tile/tilegx/tilegx32/Implies +++ /dev/null @@ -1,3 +0,0 @@ -tile/tilegx -tile -wordsize-32 diff --git a/sysdeps/tile/tilegx/tilegx64/Implies b/sysdeps/tile/tilegx/tilegx64/Implies deleted file mode 100644 index eb0686e0e6..0000000000 --- a/sysdeps/tile/tilegx/tilegx64/Implies +++ /dev/null @@ -1,3 +0,0 @@ -tile/tilegx -tile -wordsize-64 diff --git a/sysdeps/tile/tilepro/Implies b/sysdeps/tile/tilepro/Implies deleted file mode 100644 index 709e1dc122..0000000000 --- a/sysdeps/tile/tilepro/Implies +++ /dev/null @@ -1,2 +0,0 @@ -tile -wordsize-32 diff --git a/sysdeps/tile/tilepro/atomic-machine.h b/sysdeps/tile/tilepro/atomic-machine.h deleted file mode 100644 index 45e36de1e4..0000000000 --- a/sysdeps/tile/tilepro/atomic-machine.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _ATOMIC_MACHINE_H -#define _ATOMIC_MACHINE_H 1 - -#include - -#define __HAVE_64B_ATOMICS 0 -#define USE_ATOMIC_COMPILER_BUILTINS 0 -#define ATOMIC_EXCHANGE_USES_CAS 0 - -/* 32-bit integer compare-and-exchange. */ -static __inline __attribute__ ((always_inline)) -int __atomic_cmpxchg_32 (volatile int *mem, int newval, int oldval) -{ - int result; - __asm__ __volatile__ ("swint1" - : "=R00" (result), "=m" (*mem) - : "R10" (__NR_FAST_cmpxchg), "R00" (mem), - "R01" (oldval), "R02" (newval), "m" (*mem) - : "r20", "r21", "r22", "r23", "r24", - "r25", "r26", "r27", "r28", "r29", "memory"); - return result; -} - -#define atomic_compare_and_exchange_val_acq(mem, n, o) \ - ({ \ - if (sizeof (*(mem)) != 4) \ - __atomic_error_bad_argument_size (); \ - (__typeof (*(mem))) \ - __atomic_cmpxchg_32 ((int *) (mem), (int) (n), (int) (o)); \ - }) - -/* Atomically compute: - int old = *ptr; - *ptr = (old & mask) + addend; - return old; */ - -static __inline __attribute__ ((always_inline)) -int __atomic_update_32 (volatile int *mem, int mask, int addend) -{ - int result; - __asm__ __volatile__ ("swint1" - : "=R00" (result), "=m" (*mem) - : "R10" (__NR_FAST_atomic_update), "R00" (mem), - "R01" (mask), "R02" (addend), "m" (*mem) - : "r20", "r21", "r22", "r23", "r24", - "r25", "r26", "r27", "r28", "r29", "memory"); - return result; -} - -/* Size-checked verson of __atomic_update_32. */ -#define __atomic_update(mem, mask, addend) \ - ({ \ - if (sizeof (*(mem)) != 4) \ - __atomic_error_bad_argument_size (); \ - (__typeof (*(mem))) \ - __atomic_update_32 ((int *) (mem), (int) (mask), (int) (addend)); \ - }) - -#define atomic_exchange_acq(mem, newvalue) \ - __atomic_update ((mem), 0, (newvalue)) -#define atomic_exchange_and_add(mem, value) \ - __atomic_update ((mem), -1, (value)) -#define atomic_and_val(mem, mask) \ - __atomic_update ((mem), (mask), 0) -#define atomic_or_val(mem, mask) \ - ({ __typeof (mask) __att1_v = (mask); \ - __atomic_update ((mem), ~__att1_v, __att1_v); }) - -/* - * We must use the kernel atomics for atomic_store, since otherwise an - * unsynchronized store could become visible after another core's - * kernel-atomic implementation had read the memory word in question, - * but before it had written the updated value to it, which would - * cause the unsynchronized store to be lost. - */ -#define atomic_store_relaxed(mem, val) atomic_exchange_acq (mem, val) -#define atomic_store_release(mem, val) atomic_exchange_rel (mem, val) - -#include - -#endif /* atomic-machine.h */ diff --git a/sysdeps/tile/tilepro/bits/wordsize.h b/sysdeps/tile/tilepro/bits/wordsize.h deleted file mode 100644 index d2c4a354a7..0000000000 --- a/sysdeps/tile/tilepro/bits/wordsize.h +++ /dev/null @@ -1,6 +0,0 @@ -/* Determine the wordsize from the preprocessor defines. */ - -#define __WORDSIZE 32 -#define __WORDSIZE_TIME64_COMPAT32 0 -#define __WORDSIZE32_SIZE_ULONG 0 -#define __WORDSIZE32_PTRDIFF_LONG 0 diff --git a/sysdeps/tile/tilepro/memchr.c b/sysdeps/tile/tilepro/memchr.c deleted file mode 100644 index fba1f70c2c..0000000000 --- a/sysdeps/tile/tilepro/memchr.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -void * -__memchr (const void *s, int c, size_t n) -{ - const uint32_t *last_word_ptr; - const uint32_t *p; - const char *last_byte_ptr; - uintptr_t s_int; - uint32_t goal, before_mask, v, bits; - char *ret; - - if (__builtin_expect (n == 0, 0)) - { - /* Don't dereference any memory if the array is empty. */ - return NULL; - } - - /* Get an aligned pointer. */ - s_int = (uintptr_t) s; - p = (const uint32_t *) (s_int & -4); - - /* Create four copies of the byte for which we are looking. */ - goal = 0x01010101 * (uint8_t) c; - - /* Read the first word, but munge it so that bytes before the array - will not match goal. Note that this shift count expression works - because we know shift counts are taken mod 32. */ - before_mask = (1 << (s_int << 3)) - 1; - v = (*p | before_mask) ^ (goal & before_mask); - - /* Compute the address of the last byte. */ - last_byte_ptr = (const char *) s + n - 1; - - /* Handle possible addition overflow. */ - if (__glibc_unlikely ((uintptr_t) last_byte_ptr < (uintptr_t) s)) - last_byte_ptr = (const char *) UINTPTR_MAX; - - /* Compute the address of the word containing the last byte. */ - last_word_ptr = (const uint32_t *) ((uintptr_t) last_byte_ptr & -4); - - while ((bits = __insn_seqb (v, goal)) == 0) - { - if (__builtin_expect (p == last_word_ptr, 0)) - { - /* We already read the last word in the array, so give up. */ - return NULL; - } - v = *++p; - } - - /* We found a match, but it might be in a byte past the end of the array. */ - ret = ((char *) p) + (__insn_ctz (bits) >> 3); - return (ret <= last_byte_ptr) ? ret : NULL; -} -weak_alias (__memchr, memchr) -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/tile/tilepro/memcpy.S b/sysdeps/tile/tilepro/memcpy.S deleted file mode 100644 index 0f73ccbc2f..0000000000 --- a/sysdeps/tile/tilepro/memcpy.S +++ /dev/null @@ -1,397 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - .text -ENTRY (__memcpy) - FEEDBACK_ENTER(__memcpy) - - /* r0 is the dest, r1 is the source, r2 is the size. */ - - /* Save aside original dest so we can return it at the end. */ - { sw sp, lr; move r23, r0; or r4, r0, r1 } - cfi_offset (lr, 0) - - /* Check for an empty size. */ - { bz r2, .Ldone; andi r4, r4, 3 } - - /* Check for an unaligned source or dest. */ - { bnz r4, .Lcopy_unaligned_maybe_many; addli r4, r2, -256 } - -.Lcheck_aligned_copy_size: - /* If we are copying < 256 bytes, branch to simple case. */ - { blzt r4, .Lcopy_8_check; slti_u r8, r2, 8 } - - /* Copying >= 256 bytes, so jump to complex prefetching loop. */ - { andi r6, r1, 63; j .Lcopy_many } - -/* Aligned 4 byte at a time copy loop. */ - -.Lcopy_8_loop: - /* Copy two words at a time to hide load latency. */ - { lw r3, r1; addi r1, r1, 4; slti_u r8, r2, 16 } - { lw r4, r1; addi r1, r1, 4 } - { sw r0, r3; addi r0, r0, 4; addi r2, r2, -4 } - { sw r0, r4; addi r0, r0, 4; addi r2, r2, -4 } -.Lcopy_8_check: - { bzt r8, .Lcopy_8_loop; slti_u r4, r2, 4 } - - /* Copy odd leftover word, if any. */ - { bnzt r4, .Lcheck_odd_stragglers } - { lw r3, r1; addi r1, r1, 4 } - { sw r0, r3; addi r0, r0, 4; addi r2, r2, -4 } - -.Lcheck_odd_stragglers: - { bnz r2, .Lcopy_unaligned_few } - -.Ldone: - { move r0, r23; jrp lr } - -/* Prefetching multiple cache line copy handler (for large transfers). */ - - /* Copy words until r1 is cache-line-aligned. */ -.Lalign_loop: - { lw r3, r1; addi r1, r1, 4 } - { andi r6, r1, 63 } - { sw r0, r3; addi r0, r0, 4; addi r2, r2, -4 } -.Lcopy_many: - { bnzt r6, .Lalign_loop; addi r9, r0, 63 } - - { addi r3, r1, 60; andi r9, r9, -64 } - - /* No need to prefetch dst, we'll just do the wh64 - right before we copy a line. */ - { lw r5, r3; addi r3, r3, 64; movei r4, 1 } - /* Intentionally stall for a few cycles to leave L2 cache alone. */ - { bnzt zero, .; move r27, lr } - { lw r6, r3; addi r3, r3, 64 } - /* Intentionally stall for a few cycles to leave L2 cache alone. */ - { bnzt zero, . } - { lw r7, r3; addi r3, r3, 64 } - /* Intentionally stall for a few cycles to leave L2 cache alone. */ - { bz zero, .Lbig_loop2 } - - /* On entry to this loop: - - r0 points to the start of dst line 0 - - r1 points to start of src line 0 - - r2 >= (256 - 60), only the first time the loop trips. - - r3 contains r1 + 128 + 60 [pointer to end of source line 2] - This is our prefetch address. When we get near the end - rather than prefetching off the end this is changed to point - to some "safe" recently loaded address. - - r5 contains *(r1 + 60) [i.e. last word of source line 0] - - r6 contains *(r1 + 64 + 60) [i.e. last word of source line 1] - - r9 contains ((r0 + 63) & -64) - [start of next dst cache line.] */ - -.Lbig_loop: - { jal .Lcopy_line2; add r15, r1, r2 } - -.Lbig_loop2: - /* Copy line 0, first stalling until r5 is ready. */ - { move r12, r5; lw r16, r1 } - { bz r4, .Lcopy_8_check; slti_u r8, r2, 8 } - /* Prefetch several lines ahead. */ - { lw r5, r3; addi r3, r3, 64 } - { jal .Lcopy_line } - - /* Copy line 1, first stalling until r6 is ready. */ - { move r12, r6; lw r16, r1 } - { bz r4, .Lcopy_8_check; slti_u r8, r2, 8 } - /* Prefetch several lines ahead. */ - { lw r6, r3; addi r3, r3, 64 } - { jal .Lcopy_line } - - /* Copy line 2, first stalling until r7 is ready. */ - { move r12, r7; lw r16, r1 } - { bz r4, .Lcopy_8_check; slti_u r8, r2, 8 } - /* Prefetch several lines ahead. */ - { lw r7, r3; addi r3, r3, 64 } - /* Use up a caches-busy cycle by jumping back to the top of the - loop. Might as well get it out of the way now. */ - { j .Lbig_loop } - - - /* On entry: - - r0 points to the destination line. - - r1 points to the source line. - - r3 is the next prefetch address. - - r9 holds the last address used for wh64. - - r12 = WORD_15 - - r16 = WORD_0. - - r17 == r1 + 16. - - r27 holds saved lr to restore. - - On exit: - - r0 is incremented by 64. - - r1 is incremented by 64, unless that would point to a word - beyond the end of the source array, in which case it is redirected - to point to an arbitrary word already in the cache. - - r2 is decremented by 64. - - r3 is unchanged, unless it points to a word beyond the - end of the source array, in which case it is redirected - to point to an arbitrary word already in the cache. - Redirecting is OK since if we are that close to the end - of the array we will not come back to this subroutine - and use the contents of the prefetched address. - - r4 is nonzero iff r2 >= 64. - - r9 is incremented by 64, unless it points beyond the - end of the last full destination cache line, in which - case it is redirected to a "safe address" that can be - clobbered (sp - 64) - - lr contains the value in r27. */ - -/* r26 unused */ - -.Lcopy_line: - /* TODO: when r3 goes past the end, we would like to redirect it - to prefetch the last partial cache line (if any) just once, for the - benefit of the final cleanup loop. But we don't want to - prefetch that line more than once, or subsequent prefetches - will go into the RTF. But then .Lbig_loop should unconditionally - branch to top of loop to execute final prefetch, and its - nop should become a conditional branch. */ - - /* We need two non-memory cycles here to cover the resources - used by the loads initiated by the caller. */ - { add r15, r1, r2 } -.Lcopy_line2: - { slt_u r13, r3, r15; addi r17, r1, 16 } - - /* NOTE: this will stall for one cycle as L1 is busy. */ - - /* Fill second L1D line. */ - { lw r17, r17; addi r1, r1, 48; mvz r3, r13, r1 } /* r17 = WORD_4 */ - - /* Prepare destination line for writing. */ - { wh64 r9; addi r9, r9, 64 } - - /* Load seven words that are L1D hits to cover wh64 L2 usage. */ - - /* Load the three remaining words from the last L1D line, which - we know has already filled the L1D. */ - { lw r4, r1; addi r1, r1, 4; addi r20, r1, 16 } /* r4 = WORD_12 */ - { lw r8, r1; addi r1, r1, 4; slt_u r13, r20, r15 }/* r8 = WORD_13 */ - { lw r11, r1; addi r1, r1, -52; mvz r20, r13, r1 } /* r11 = WORD_14 */ - - /* Load the three remaining words from the first L1D line, first - stalling until it has filled by "looking at" r16. */ - { lw r13, r1; addi r1, r1, 4; move zero, r16 } /* r13 = WORD_1 */ - { lw r14, r1; addi r1, r1, 4 } /* r14 = WORD_2 */ - { lw r15, r1; addi r1, r1, 8; addi r10, r0, 60 } /* r15 = WORD_3 */ - - /* Load second word from the second L1D line, first - stalling until it has filled by "looking at" r17. */ - { lw r19, r1; addi r1, r1, 4; move zero, r17 } /* r19 = WORD_5 */ - - /* Store last word to the destination line, potentially dirtying it - for the first time, which keeps the L2 busy for two cycles. */ - { sw r10, r12 } /* store(WORD_15) */ - - /* Use two L1D hits to cover the sw L2 access above. */ - { lw r10, r1; addi r1, r1, 4 } /* r10 = WORD_6 */ - { lw r12, r1; addi r1, r1, 4 } /* r12 = WORD_7 */ - - /* Fill third L1D line. */ - { lw r18, r1; addi r1, r1, 4 } /* r18 = WORD_8 */ - - /* Store first L1D line. */ - { sw r0, r16; addi r0, r0, 4; add r16, r0, r2 } /* store(WORD_0) */ - { sw r0, r13; addi r0, r0, 4; andi r16, r16, -64 } /* store(WORD_1) */ - { sw r0, r14; addi r0, r0, 4; slt_u r16, r9, r16 } /* store(WORD_2) */ - { sw r0, r15; addi r0, r0, 4; addi r13, sp, -64 } /* store(WORD_3) */ - - /* Store second L1D line. */ - { sw r0, r17; addi r0, r0, 4; mvz r9, r16, r13 }/* store(WORD_4) */ - { sw r0, r19; addi r0, r0, 4 } /* store(WORD_5) */ - { sw r0, r10; addi r0, r0, 4 } /* store(WORD_6) */ - { sw r0, r12; addi r0, r0, 4 } /* store(WORD_7) */ - - { lw r13, r1; addi r1, r1, 4; move zero, r18 } /* r13 = WORD_9 */ - { lw r14, r1; addi r1, r1, 4 } /* r14 = WORD_10 */ - { lw r15, r1; move r1, r20 } /* r15 = WORD_11 */ - - /* Store third L1D line. */ - { sw r0, r18; addi r0, r0, 4 } /* store(WORD_8) */ - { sw r0, r13; addi r0, r0, 4 } /* store(WORD_9) */ - { sw r0, r14; addi r0, r0, 4 } /* store(WORD_10) */ - { sw r0, r15; addi r0, r0, 4 } /* store(WORD_11) */ - - /* Store rest of fourth L1D line. */ - { sw r0, r4; addi r0, r0, 4 } /* store(WORD_12) */ - { - sw r0, r8 /* store(WORD_13) */ - addi r0, r0, 4 - /* Will r2 be > 64 after we subtract 64 below? */ - shri r4, r2, 7 - } - { - sw r0, r11 /* store(WORD_14) */ - addi r0, r0, 8 - /* Record 64 bytes successfully copied. */ - addi r2, r2, -64 - } - - { jrp lr; move lr, r27 } - - /* Convey to the backtrace library that the stack frame is - size zero, and the real return address is on the stack - rather than in 'lr'. */ - { info 8 } - - .align 64 -.Lcopy_unaligned_maybe_many: - /* Skip the setup overhead if we aren't copying many bytes. */ - { slti_u r8, r2, 20; sub r4, zero, r0 } - { bnzt r8, .Lcopy_unaligned_few; andi r4, r4, 3 } - { bz r4, .Ldest_is_word_aligned; add r18, r1, r2 } - -/* Unaligned 4 byte at a time copy handler. */ - - /* Copy single bytes until r0 == 0 mod 4, so we can store words. */ -.Lalign_dest_loop: - { lb_u r3, r1; addi r1, r1, 1; addi r4, r4, -1 } - { sb r0, r3; addi r0, r0, 1; addi r2, r2, -1 } - { bnzt r4, .Lalign_dest_loop; andi r3, r1, 3 } - - /* If source and dest are now *both* aligned, do an aligned copy. */ - { bz r3, .Lcheck_aligned_copy_size; addli r4, r2, -256 } - -.Ldest_is_word_aligned: - - { andi r8, r0, 63; lwadd_na r6, r1, 4} - { slti_u r9, r2, 64; bz r8, .Ldest_is_L2_line_aligned } - - /* This copies unaligned words until either there are fewer - than 4 bytes left to copy, or until the destination pointer - is cache-aligned, whichever comes first. - - On entry: - - r0 is the next store address. - - r1 points 4 bytes past the load address corresponding to r0. - - r2 >= 4 - - r6 is the next aligned word loaded. */ -.Lcopy_unaligned_src_words: - { lwadd_na r7, r1, 4; slti_u r8, r2, 4 + 4 } - /* stall */ - { dword_align r6, r7, r1; slti_u r9, r2, 64 + 4 } - { swadd r0, r6, 4; addi r2, r2, -4 } - { bnz r8, .Lcleanup_unaligned_words; andi r8, r0, 63 } - { bnzt r8, .Lcopy_unaligned_src_words; move r6, r7 } - - /* On entry: - - r0 is the next store address. - - r1 points 4 bytes past the load address corresponding to r0. - - r2 >= 4 (# of bytes left to store). - - r6 is the next aligned src word value. - - r9 = (r2 < 64U). - - r18 points one byte past the end of source memory. */ -.Ldest_is_L2_line_aligned: - - { - /* Not a full cache line remains. */ - bnz r9, .Lcleanup_unaligned_words - move r7, r6 - } - - /* r2 >= 64 */ - - /* Kick off two prefetches, but don't go past the end. */ - { addi r3, r1, 63 - 4; addi r8, r1, 64 + 63 - 4 } - { prefetch r3; move r3, r8; slt_u r8, r8, r18 } - { mvz r3, r8, r1; addi r8, r3, 64 } - { prefetch r3; move r3, r8; slt_u r8, r8, r18 } - { mvz r3, r8, r1; movei r17, 0 } - -.Lcopy_unaligned_line: - /* Prefetch another line. */ - { prefetch r3; addi r15, r1, 60; addi r3, r3, 64 } - /* Fire off a load of the last word we are about to copy. */ - { lw_na r15, r15; slt_u r8, r3, r18 } - - { mvz r3, r8, r1; wh64 r0 } - - /* This loop runs twice. - - On entry: - - r17 is even before the first iteration, and odd before - the second. It is incremented inside the loop. Encountering - an even value at the end of the loop makes it stop. */ -.Lcopy_half_an_unaligned_line: - { - /* Stall until the last byte is ready. In the steady state this - guarantees all words to load below will be in the L2 cache, which - avoids shunting the loads to the RTF. */ - move zero, r15 - lwadd_na r7, r1, 16 - } - { lwadd_na r11, r1, 12 } - { lwadd_na r14, r1, -24 } - { lwadd_na r8, r1, 4 } - { lwadd_na r9, r1, 4 } - { - lwadd_na r10, r1, 8 - /* r16 = (r2 < 64), after we subtract 32 from r2 below. */ - slti_u r16, r2, 64 + 32 - } - { lwadd_na r12, r1, 4; addi r17, r17, 1 } - { lwadd_na r13, r1, 8; dword_align r6, r7, r1 } - { swadd r0, r6, 4; dword_align r7, r8, r1 } - { swadd r0, r7, 4; dword_align r8, r9, r1 } - { swadd r0, r8, 4; dword_align r9, r10, r1 } - { swadd r0, r9, 4; dword_align r10, r11, r1 } - { swadd r0, r10, 4; dword_align r11, r12, r1 } - { swadd r0, r11, 4; dword_align r12, r13, r1 } - { swadd r0, r12, 4; dword_align r13, r14, r1 } - { swadd r0, r13, 4; addi r2, r2, -32 } - { move r6, r14; bbst r17, .Lcopy_half_an_unaligned_line } - - { bzt r16, .Lcopy_unaligned_line; move r7, r6 } - - /* On entry: - - r0 is the next store address. - - r1 points 4 bytes past the load address corresponding to r0. - - r2 >= 0 (# of bytes left to store). - - r7 is the next aligned src word value. */ -.Lcleanup_unaligned_words: - /* Handle any trailing bytes. */ - { bz r2, .Lcopy_unaligned_done; slti_u r8, r2, 4 } - { bzt r8, .Lcopy_unaligned_src_words; move r6, r7 } - - /* Move r1 back to the point where it corresponds to r0. */ - { addi r1, r1, -4 } - - /* Fall through */ - -/* 1 byte at a time copy handler. */ - -.Lcopy_unaligned_few: - { lb_u r3, r1; addi r1, r1, 1 } - { sb r0, r3; addi r0, r0, 1; addi r2, r2, -1 } - { bnzt r2, .Lcopy_unaligned_few } - -.Lcopy_unaligned_done: - - { move r0, r23; jrp lr } - -END (__memcpy) - -weak_alias (__memcpy, memcpy) -libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/tile/tilepro/memset.c b/sysdeps/tile/tilepro/memset.c deleted file mode 100644 index aaeaacaacc..0000000000 --- a/sysdeps/tile/tilepro/memset.c +++ /dev/null @@ -1,151 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -void * inhibit_loop_to_libcall -__memset (void *s, int c, size_t n) -{ - uint32_t *out32; - int n32; - uint32_t v16, v32; - uint8_t *out8 = s; - int to_align32; - - /* Experimentation shows that a trivial tight loop is a win up until - around a size of 20, where writing a word at a time starts to win. */ -#define BYTE_CUTOFF 20 - -#if BYTE_CUTOFF < 3 - /* This must be at least at least this big, or some code later - on doesn't work. */ -# error "BYTE_CUTOFF is too small." -#endif - - if (n < BYTE_CUTOFF) - { - /* Strangely, this turns out to be the tightest way to write - this loop. */ - if (n != 0) - { - do - { - /* Strangely, combining these into one line performs worse. */ - *out8 = c; - out8++; - } - while (--n != 0); - } - - return s; - } - - /* Align 'out8'. We know n >= 3 so this won't write past the end. */ - while (((uintptr_t) out8 & 3) != 0) - { - *out8++ = c; - --n; - } - - /* Align 'n'. */ - while (n & 3) - out8[--n] = c; - - out32 = (uint32_t *) out8; - n32 = n >> 2; - - /* Tile input byte out to 32 bits. */ - v16 = __insn_intlb (c, c); - v32 = __insn_intlh (v16, v16); - - /* This must be at least 8 or the following loop doesn't work. */ -#define CACHE_LINE_SIZE_IN_WORDS (CHIP_L2_LINE_SIZE() / 4) - - /* Determine how many words we need to emit before the 'out32' - pointer becomes aligned modulo the cache line size. */ - to_align32 = (-((uintptr_t) out32 >> 2)) & (CACHE_LINE_SIZE_IN_WORDS - 1); - - /* Only bother aligning and using wh64 if there is at least one full - cache line to process. This check also prevents overrunning the - end of the buffer with alignment words. */ - if (to_align32 <= n32 - CACHE_LINE_SIZE_IN_WORDS) - { - int lines_left; - - /* Align out32 mod the cache line size so we can use wh64. */ - n32 -= to_align32; - for (; to_align32 != 0; to_align32--) - { - *out32 = v32; - out32++; - } - - /* Use unsigned divide to turn this into a right shift. */ - lines_left = (unsigned) n32 / CACHE_LINE_SIZE_IN_WORDS; - - do - { - /* Only wh64 a few lines at a time, so we don't exceed the - maximum number of victim lines. */ - int x = ((lines_left < CHIP_MAX_OUTSTANDING_VICTIMS ())? lines_left - : CHIP_MAX_OUTSTANDING_VICTIMS ()); - uint32_t *wh = out32; - int i = x; - int j; - - lines_left -= x; - - do - { - __insn_wh64 (wh); - wh += CACHE_LINE_SIZE_IN_WORDS; - } - while (--i); - - for (j = x * (CACHE_LINE_SIZE_IN_WORDS / 4); j != 0; j--) - { - *out32++ = v32; - *out32++ = v32; - *out32++ = v32; - *out32++ = v32; - } - } - while (lines_left != 0); - - /* We processed all full lines above, so only this many words - remain to be processed. */ - n32 &= CACHE_LINE_SIZE_IN_WORDS - 1; - } - - /* Now handle any leftover values. */ - if (n32 != 0) - { - do - { - *out32 = v32; - out32++; - } - while (--n32 != 0); - } - - return s; -} -weak_alias (__memset, memset) -libc_hidden_builtin_def (memset) diff --git a/sysdeps/tile/tilepro/memusage.h b/sysdeps/tile/tilepro/memusage.h deleted file mode 100644 index 9ed4600f13..0000000000 --- a/sysdeps/tile/tilepro/memusage.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; }) - -#define GETTIME(low,high) \ - { \ - low = __insn_mfspr (SPR_CYCLE_LOW); \ - high = __insn_mfspr (SPR_CYCLE_HIGH); \ - } - -#include diff --git a/sysdeps/tile/tilepro/rawmemchr.c b/sysdeps/tile/tilepro/rawmemchr.c deleted file mode 100644 index a5e714407d..0000000000 --- a/sysdeps/tile/tilepro/rawmemchr.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -void * -__rawmemchr (const void *s, int c) -{ - /* Get an aligned pointer. */ - const uintptr_t s_int = (uintptr_t) s; - const uint32_t *p = (const uint32_t *) (s_int & -4); - - /* Create four copies of the byte for which we are looking. */ - const uint32_t goal = 0x01010101 * (uint8_t) c; - - /* Read the first word, but munge it so that bytes before the array - will not match goal. Note that this shift count expression works - because we know shift counts are taken mod 32. */ - const uint32_t before_mask = (1 << (s_int << 3)) - 1; - uint32_t v = (*p | before_mask) ^ (goal & before_mask); - - uint32_t bits; - while ((bits = __insn_seqb (v, goal)) == 0) - v = *++p; - - return ((char *) p) + (__insn_ctz (bits) >> 3); -} -libc_hidden_def (__rawmemchr) -weak_alias (__rawmemchr, rawmemchr) diff --git a/sysdeps/tile/tilepro/strchr.c b/sysdeps/tile/tilepro/strchr.c deleted file mode 100644 index 11f8cda418..0000000000 --- a/sysdeps/tile/tilepro/strchr.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -#undef strchr - -char * -strchr (const char *s, int c) -{ - int z, g; - - /* Get an aligned pointer. */ - const uintptr_t s_int = (uintptr_t) s; - const uint32_t *p = (const uint32_t *) (s_int & -4); - - /* Create four copies of the byte for which we are looking. */ - const uint32_t goal = 0x01010101 * (uint8_t) c; - - /* Read the first aligned word, but force bytes before the string to - match neither zero nor goal (we make sure the high bit of each - byte is 1, and the low 7 bits are all the opposite of the goal - byte). Note that this shift count expression works because we - know shift counts are taken mod 32. */ - const uint32_t before_mask = (1 << (s_int << 3)) - 1; - uint32_t v = (*p | before_mask) ^ (goal & __insn_shrib (before_mask, 1)); - - uint32_t zero_matches, goal_matches; - while (1) - { - /* Look for a terminating '\0'. */ - zero_matches = __insn_seqb (v, 0); - - /* Look for the goal byte. */ - goal_matches = __insn_seqb (v, goal); - - if (__builtin_expect ((zero_matches | goal_matches) != 0, 0)) - break; - - v = *++p; - } - - z = __insn_ctz (zero_matches); - g = __insn_ctz (goal_matches); - - /* If we found c before '\0' we got a match. Note that if c == '\0' - then g == z, and we correctly return the address of the '\0' - rather than NULL. */ - return (g <= z) ? ((char *) p) + (g >> 3) : NULL; -} -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) diff --git a/sysdeps/tile/tilepro/strchrnul.c b/sysdeps/tile/tilepro/strchrnul.c deleted file mode 100644 index 3220ad7970..0000000000 --- a/sysdeps/tile/tilepro/strchrnul.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -char * -__strchrnul (const char *s, int c) -{ - int z, g; - - /* Get an aligned pointer. */ - const uintptr_t s_int = (uintptr_t) s; - const uint32_t *p = (const uint32_t *) (s_int & -4); - - /* Create four copies of the byte for which we are looking. */ - const uint32_t goal = 0x01010101 * (uint8_t) c; - - /* Read the first aligned word, but force bytes before the string to - match neither zero nor goal (we make sure the high bit of each - byte is 1, and the low 7 bits are all the opposite of the goal - byte). Note that this shift count expression works because we - know shift counts are taken mod 32. */ - const uint32_t before_mask = (1 << (s_int << 3)) - 1; - uint32_t v = (*p | before_mask) ^ (goal & __insn_shrib (before_mask, 1)); - - uint32_t zero_matches, goal_matches; - while (1) - { - /* Look for a terminating '\0'. */ - zero_matches = __insn_seqb (v, 0); - - /* Look for the goal byte. */ - goal_matches = __insn_seqb (v, goal); - - if (__builtin_expect ((zero_matches | goal_matches) != 0, 0)) - break; - - v = *++p; - } - - z = __insn_ctz (zero_matches); - g = __insn_ctz (goal_matches); - - /* Return a pointer to the NUL or goal, whichever is first. */ - if (z < g) - g = z; - return ((char *) p) + (g >> 3); -} -weak_alias (__strchrnul, strchrnul) diff --git a/sysdeps/tile/tilepro/strlen.c b/sysdeps/tile/tilepro/strlen.c deleted file mode 100644 index adad3d80e4..0000000000 --- a/sysdeps/tile/tilepro/strlen.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -size_t -strlen (const char *s) -{ - /* Get an aligned pointer. */ - const uintptr_t s_int = (uintptr_t) s; - const uint32_t *p = (const uint32_t *) (s_int & -4); - - /* Read the first word, but force bytes before the string to be nonzero. - This expression works because we know shift counts are taken mod 32. */ - uint32_t v = *p | ((1 << (s_int << 3)) - 1); - - uint32_t bits; - while ((bits = __insn_seqb (v, 0)) == 0) - v = *++p; - - return ((const char *) p) + (__insn_ctz (bits) >> 3) - s; -} -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/tile/tilepro/strrchr.c b/sysdeps/tile/tilepro/strrchr.c deleted file mode 100644 index b30d259773..0000000000 --- a/sysdeps/tile/tilepro/strrchr.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -char * -strrchr (const char *s, int c) -{ - /* Get an aligned pointer. */ - const uintptr_t s_int = (uintptr_t) s; - const uint32_t *p = (const uint32_t *) (s_int & -4); - - /* Create four copies of the byte for which we are looking. */ - const uint32_t goal = 0x01010101 * (uint8_t) c; - - /* Read the first aligned word, but force bytes before the string to - match neither zero nor goal (we make sure the high bit of each - byte is 1, and the low 7 bits are all the opposite of the goal - byte). Note that this shift count expression works because we - know shift counts are taken mod 32. */ - const uint32_t before_mask = (1 << (s_int << 3)) - 1; - uint32_t v = (*p | before_mask) ^ (goal & __insn_shrib (before_mask, 1)); - const char *found = NULL; - uint32_t zero_matches, goal_matches; - while (1) - { - /* Look for a terminating '\0'. */ - zero_matches = __insn_seqb (v, 0); - - /* Look for the goal byte. */ - goal_matches = __insn_seqb (v, goal); - - /* If we found the goal, record the last offset. */ - if (__builtin_expect (goal_matches != 0, 0)) - { - if (__builtin_expect (zero_matches != 0, 0)) - { - /* Clear any goal after the first zero. */ - int first_nul = __insn_ctz (zero_matches); - /* The number of top bits we need to clear is - 32 - (first_nul + 8). */ - int shift_amt = (24 - first_nul); - goal_matches <<= shift_amt; - goal_matches >>= shift_amt; - } - if (__builtin_expect (goal_matches != 0, 1)) - found = ((char *) p) + 3 - (__insn_clz (goal_matches) >> 3); - } - - if (__builtin_expect (zero_matches != 0, 0)) - return (char *) found; - - v = *++p; - } -} -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/tile/tls-macros.h b/sysdeps/tile/tls-macros.h deleted file mode 100644 index 878358a731..0000000000 --- a/sysdeps/tile/tls-macros.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifdef __tilegx__ -#define TLS_GD_OFFSET(x) \ - "moveli r0, hw1_last_tls_gd(" #x ")\n\t" \ - "shl16insli r0, r0, hw0_tls_gd(" #x ")\n\t" \ - "addi r0, %1, tls_add(" #x ")\n\t" -#else -#define TLS_GD_OFFSET(x) \ - "auli r0, %1, tls_gd_ha16(" #x ")\n\t" \ - "addli r0, r0, tls_gd_lo16(" #x ")\n\t" -#endif - -#define TLS_GD(x) \ - ({ \ - int *__retval; \ - extern char _GLOBAL_OFFSET_TABLE_[]; \ - \ - asm (TLS_GD_OFFSET(x) \ - "jal tls_gd_call(" #x ")\n\t" \ - "addi %0, r0, tls_gd_add(" #x ")" : \ - "=&r" (__retval) : "r" (_GLOBAL_OFFSET_TABLE_) : \ - "r0", "r25", "r26", "r27", "r28", "r29"); \ - __retval; }) - -/* No special support for LD mode. */ -#define TLS_LD TLS_GD - -#ifdef __tilegx__ -#define TLS_IE_OFFSET(x) \ - "moveli %0, hw1_last_tls_ie(" #x ")\n\t" \ - "shl16insli %0, %0, hw0_tls_ie(" #x ")\n\t" \ - "addi %0, %1, tls_add(" #x ")\n\t" -#define LD_TLS "ld_tls" -#else -#define TLS_IE_OFFSET(x) \ - "auli %0, %1, tls_ie_ha16(" #x ")\n\t" \ - "addli %0, %0, tls_ie_lo16(" #x ")\n\t" -#define LD_TLS "lw_tls" -#endif - -#define TLS_IE(x) \ - ({ \ - int *__retval; \ - extern char _GLOBAL_OFFSET_TABLE_[]; \ - \ - asm (TLS_IE_OFFSET(x) \ - LD_TLS " %0, %0, tls_ie_load(" #x ")\n\t" \ - "add %0, %0, tp" : \ - "=&r" (__retval) : "r" (_GLOBAL_OFFSET_TABLE_)); \ - __retval; }) - -#ifdef __tilegx__ -#define _TLS_LE(x) \ - "moveli %0, hw1_last_tls_le(" #x ")\n\t" \ - "shl16insli %0, %0, hw0_tls_le(" #x ")\n\t" \ - "add %0, %0, tp" -#else -#define _TLS_LE(x) \ - "auli %0, tp, tls_le_ha16(" #x ")\n\t" \ - "addli %0, %0, tls_le_lo16(" #x ")\n\t" -#endif - -#define TLS_LE(x) \ - ({ \ - int *__retval; \ - asm (_TLS_LE(x) : "=r" (__retval)); \ - __retval; }) diff --git a/sysdeps/tile/tst-audit.h b/sysdeps/tile/tst-audit.h deleted file mode 100644 index 4adb73c8a2..0000000000 --- a/sysdeps/tile/tst-audit.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define pltenter la_tile_gnu_pltenter -#define pltexit la_tile_gnu_pltexit -#define La_regs La_tile_regs -#define La_retval La_tile_retval -#define int_retval lrv_reg[0] diff --git a/sysdeps/tile/wordcopy.c b/sysdeps/tile/wordcopy.c deleted file mode 100644 index 2f93e5a5d1..0000000000 --- a/sysdeps/tile/wordcopy.c +++ /dev/null @@ -1,437 +0,0 @@ -/* wordcopy.c -- subroutines for memory copy functions. Tile version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* To optimize for tile, we make the following changes from the - default glibc version: - - Use the double align instruction instead of the MERGE macro. - - Since we don't have offset addressing mode, make sure the loads / - stores in the inner loop always have indices of 0. - - Use post-increment addresses in the inner loops, which yields - better scheduling. */ - -/* BE VERY CAREFUL IF YOU CHANGE THIS CODE...! */ - -#include -#include - -/* Provide the appropriate dblalign builtin to shift two registers - based on the alignment of a pointer held in a third register. */ -#ifdef __tilegx__ -#define DBLALIGN __insn_dblalign -#else -#define DBLALIGN __insn_dword_align -#endif - -/* _wordcopy_fwd_aligned -- Copy block beginning at SRCP to - block beginning at DSTP with LEN `op_t' words (not LEN bytes!). - Both SRCP and DSTP should be aligned for memory operations on `op_t's. */ - -void -_wordcopy_fwd_aligned (long int dstp, long int srcp, size_t len) -{ - op_t a0, a1; - - switch (len % 8) - { - case 2: - a0 = ((op_t *) srcp)[0]; - srcp += OPSIZ; - len += 6; - goto do1; - case 3: - a1 = ((op_t *) srcp)[0]; - srcp += OPSIZ; - len += 5; - goto do2; - case 4: - a0 = ((op_t *) srcp)[0]; - srcp += OPSIZ; - len += 4; - goto do3; - case 5: - a1 = ((op_t *) srcp)[0]; - srcp += OPSIZ; - len += 3; - goto do4; - case 6: - a0 = ((op_t *) srcp)[0]; - srcp += OPSIZ; - len += 2; - goto do5; - case 7: - a1 = ((op_t *) srcp)[0]; - srcp += OPSIZ; - len += 1; - goto do6; - - case 0: - if (OP_T_THRES <= 3 * OPSIZ && len == 0) - return; - a0 = ((op_t *) srcp)[0]; - srcp += OPSIZ; - goto do7; - case 1: - a1 = ((op_t *) srcp)[0]; - srcp += OPSIZ; - len -= 1; - if (OP_T_THRES <= 3 * OPSIZ && len == 0) - goto do0; - goto do8; /* No-op. */ - } - - do - { - do8: - a0 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a1; - srcp += OPSIZ; - dstp += OPSIZ; - do7: - a1 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a0; - srcp += OPSIZ; - dstp += OPSIZ; - do6: - a0 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a1; - srcp += OPSIZ; - dstp += OPSIZ; - do5: - a1 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a0; - srcp += OPSIZ; - dstp += OPSIZ; - do4: - a0 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a1; - srcp += OPSIZ; - dstp += OPSIZ; - do3: - a1 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a0; - srcp += OPSIZ; - dstp += OPSIZ; - do2: - a0 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a1; - srcp += OPSIZ; - dstp += OPSIZ; - do1: - a1 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a0; - srcp += OPSIZ; - dstp += OPSIZ; - - len -= 8; - } - while (len != 0); - - /* This is the right position for do0. Please don't move - it into the loop. */ - do0: - ((op_t *) dstp)[0] = a1; -} - -/* _wordcopy_fwd_dest_aligned -- Copy block beginning at SRCP to - block beginning at DSTP with LEN `op_t' words (not LEN bytes!). - DSTP should be aligned for memory operations on `op_t's, but SRCP must - *not* be aligned. */ - -void -_wordcopy_fwd_dest_aligned (long int dstp, long int srcp, size_t len) -{ - void * srci; - op_t a0, a1, a2, a3; - - /* Save the initial source pointer so we know the number of bytes to - shift for merging two unaligned results. */ - srci = (void *) srcp; - - /* Make SRCP aligned by rounding it down to the beginning of the `op_t' - it points in the middle of. */ - srcp &= -OPSIZ; - - switch (len % 4) - { - case 2: - a1 = ((op_t *) srcp)[0]; - a2 = ((op_t *) srcp)[1]; - len += 2; - srcp += 2 * OPSIZ; - goto do1; - case 3: - a0 = ((op_t *) srcp)[0]; - a1 = ((op_t *) srcp)[1]; - len += 1; - srcp += 2 * OPSIZ; - goto do2; - case 0: - if (OP_T_THRES <= 3 * OPSIZ && len == 0) - return; - a3 = ((op_t *) srcp)[0]; - a0 = ((op_t *) srcp)[1]; - len += 0; - srcp += 2 * OPSIZ; - goto do3; - case 1: - a2 = ((op_t *) srcp)[0]; - a3 = ((op_t *) srcp)[1]; - srcp += 2 * OPSIZ; - len -= 1; - if (OP_T_THRES <= 3 * OPSIZ && len == 0) - goto do0; - goto do4; /* No-op. */ - } - - do - { - do4: - a0 = ((op_t *) srcp)[0]; - a2 = DBLALIGN (a2, a3, srci); - ((op_t *) dstp)[0] = a2; - srcp += OPSIZ; - dstp += OPSIZ; - do3: - a1 = ((op_t *) srcp)[0]; - a3 = DBLALIGN (a3, a0, srci); - ((op_t *) dstp)[0] = a3; - srcp += OPSIZ; - dstp += OPSIZ; - do2: - a2 = ((op_t *) srcp)[0]; - a0 = DBLALIGN (a0, a1, srci); - ((op_t *) dstp)[0] = a0; - srcp += OPSIZ; - dstp += OPSIZ; - do1: - a3 = ((op_t *) srcp)[0]; - a1 = DBLALIGN (a1, a2, srci); - ((op_t *) dstp)[0] = a1; - srcp += OPSIZ; - dstp += OPSIZ; - len -= 4; - } - while (len != 0); - - /* This is the right position for do0. Please don't move - it into the loop. */ - do0: - ((op_t *) dstp)[0] = DBLALIGN (a2, a3, srci); -} - -/* _wordcopy_bwd_aligned -- Copy block finishing right before - SRCP to block finishing right before DSTP with LEN `op_t' words - (not LEN bytes!). Both SRCP and DSTP should be aligned for memory - operations on `op_t's. */ - -void -_wordcopy_bwd_aligned (long int dstp, long int srcp, size_t len) -{ - op_t a0, a1; - long int srcp1; - - srcp1 = srcp - 1 * OPSIZ; - srcp -= 2 * OPSIZ; - dstp -= 1 * OPSIZ; - - switch (len % 8) - { - case 2: - a0 = ((op_t *) srcp1)[0]; - len += 6; - goto do1; - case 3: - a1 = ((op_t *) srcp1)[0]; - len += 5; - goto do2; - case 4: - a0 = ((op_t *) srcp1)[0]; - len += 4; - goto do3; - case 5: - a1 = ((op_t *) srcp1)[0]; - len += 3; - goto do4; - case 6: - a0 = ((op_t *) srcp1)[0]; - len += 2; - goto do5; - case 7: - a1 = ((op_t *) srcp1)[0]; - len += 1; - goto do6; - - case 0: - if (OP_T_THRES <= 3 * OPSIZ && len == 0) - return; - a0 = ((op_t *) srcp1)[0]; - goto do7; - case 1: - a1 = ((op_t *) srcp1)[0]; - len -= 1; - if (OP_T_THRES <= 3 * OPSIZ && len == 0) - goto do0; - goto do8; /* No-op. */ - } - - do - { - do8: - a0 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a1; - srcp -= OPSIZ; - dstp -= OPSIZ; - do7: - a1 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a0; - srcp -= OPSIZ; - dstp -= OPSIZ; - do6: - a0 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a1; - srcp -= OPSIZ; - dstp -= OPSIZ; - do5: - a1 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a0; - srcp -= OPSIZ; - dstp -= OPSIZ; - do4: - a0 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a1; - srcp -= OPSIZ; - dstp -= OPSIZ; - do3: - a1 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a0; - srcp -= OPSIZ; - dstp -= OPSIZ; - do2: - a0 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a1; - srcp -= OPSIZ; - dstp -= OPSIZ; - do1: - a1 = ((op_t *) srcp)[0]; - ((op_t *) dstp)[0] = a0; - srcp -= OPSIZ; - dstp -= OPSIZ; - - len -= 8; - } - while (len != 0); - - /* This is the right position for do0. Please don't move - it into the loop. */ - do0: - ((op_t *) dstp)[0] = a1; -} - -/* _wordcopy_bwd_dest_aligned -- Copy block finishing right - before SRCP to block finishing right before DSTP with LEN `op_t' - words (not LEN bytes!). DSTP should be aligned for memory - operations on `op_t', but SRCP must *not* be aligned. */ - -void -_wordcopy_bwd_dest_aligned (long int dstp, long int srcp, size_t len) -{ - void * srci; - op_t a0, a1, a2, a3; - op_t b0, b1, b2, b3; - - /* Save the initial source pointer so we know the number of bytes to - shift for merging two unaligned results. */ - srci = (void *) srcp; - - /* Make SRCP aligned by rounding it down to the beginning of the op_t - it points in the middle of. */ - srcp &= -OPSIZ; - srcp += OPSIZ; - - switch (len % 4) - { - case 2: - srcp -= 3 * OPSIZ; - dstp -= 1 * OPSIZ; - b2 = ((op_t *) srcp)[2]; - b1 = a1 = ((op_t *) srcp)[1]; - len += 2; - goto do1; - case 3: - srcp -= 3 * OPSIZ; - dstp -= 1 * OPSIZ; - b3 = ((op_t *) srcp)[2]; - b2 = a2 = ((op_t *) srcp)[1]; - len += 1; - goto do2; - case 0: - if (OP_T_THRES <= 3 * OPSIZ && len == 0) - return; - srcp -= 3 * OPSIZ; - dstp -= 1 * OPSIZ; - b0 = ((op_t *) srcp)[2]; - b3 = a3 = ((op_t *) srcp)[1]; - goto do3; - case 1: - srcp -= 3 * OPSIZ; - dstp -= 1 * OPSIZ; - b1 = ((op_t *) srcp)[2]; - b0 = a0 = ((op_t *) srcp)[1]; - len -= 1; - if (OP_T_THRES <= 3 * OPSIZ && len == 0) - goto do0; - goto do4; /* No-op. */ - } - - do - { - do4: - b3 = a3 = ((op_t *) srcp)[0]; - a0 = DBLALIGN (a0, b1, srci); - ((op_t *) dstp)[0] = a0; - srcp -= OPSIZ; - dstp -= OPSIZ; - do3: - b2 = a2 = ((op_t *) srcp)[0]; - a3 = DBLALIGN (a3, b0, srci); - ((op_t *) dstp)[0] = a3; - srcp -= OPSIZ; - dstp -= OPSIZ; - do2: - b1 = a1 = ((op_t *) srcp)[0]; - a2 = DBLALIGN (a2, b3, srci); - ((op_t *) dstp)[0] = a2; - srcp -= OPSIZ; - dstp -= OPSIZ; - do1: - b0 = a0 = ((op_t *) srcp)[0]; - a1 = DBLALIGN (a1, b2, srci); - ((op_t *) dstp)[0] = a1; - srcp -= OPSIZ; - dstp -= OPSIZ; - - len -= 4; - } - while (len != 0); - - /* This is the right position for do0. Please don't move - it into the loop. */ - do0: - a0 = DBLALIGN (a0, b1, srci); - ((op_t *) dstp)[0] = a0; -} diff --git a/sysdeps/unix/Implies b/sysdeps/unix/Implies deleted file mode 100644 index b3188f7428..0000000000 --- a/sysdeps/unix/Implies +++ /dev/null @@ -1 +0,0 @@ -posix diff --git a/sysdeps/unix/Makefile b/sysdeps/unix/Makefile deleted file mode 100644 index 750e32c4ed..0000000000 --- a/sysdeps/unix/Makefile +++ /dev/null @@ -1,112 +0,0 @@ -# Copyright (C) 1991-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifndef inhibit-unix-syscalls - -# Sysdep dirs unix/... can contain a file syscalls.list, -# which specifies objects to be compiled as simple Unix system calls. - --include $(common-objpfx)sysd-syscalls - -ifeq (misc,$(subdir)) -sysdep_routines += $(unix-extra-syscalls) - -ifdef unix-stub-syscalls -# The system call entry points in this list are supposed to be additional -# functions not overriding any other sysdeps/.../call.c implementation, but -# their system call numbers are unavailable in the kernel headers we're -# using. Instead of a system call stub, these get a function that fails -# with ENOSYS. We just generate a single module defining one function and -# making all these entry point names aliases for it. -sysdep_routines += stub-syscalls -$(objpfx)stub-syscalls.c: $(common-objpfx)sysd-syscalls \ - $(..)sysdeps/unix/Makefile - $(make-target-directory) - (for call in $(unix-stub-syscalls); do \ - call=$${call%%@*}; \ - echo "#define $$call RENAMED_$$call"; \ - done; \ - echo '#include '; \ - echo '#include '; \ - for call in $(unix-stub-syscalls); do \ - call=$${call%%@*}; \ - echo "#undef $$call"; \ - done; \ - echo 'long int _no_syscall (void)'; \ - echo '{ __set_errno (ENOSYS); return -1L; }'; \ - for call in $(unix-stub-syscalls); do \ - case $$call in \ - *@@*) \ - ver=$${call##*@}; call=$${call%%@*}; \ - ver=`echo "$$ver" | sed 's/\./_/g'`; \ - echo "strong_alias (_no_syscall, __$${call}_$${ver})"; \ - echo "versioned_symbol (libc, __$${call}_$${ver}, $$call, $$ver);"\ - ;; \ - *@*) \ - ver=$${call##*@}; call=$${call%%@*}; \ - ver=`echo "$$ver" | sed 's/\./_/g'`; \ - case $$ver in \ - *:*) \ - compat_ver=$${ver#*:}; \ - ver=$${ver%%:*}; \ - compat_cond="SHLIB_COMPAT (libc, $$ver, $$compat_ver)"; \ - ;; \ - *) \ - compat_cond=""; \ - ;; \ - esac; \ - if [ -n "$$compat_cond" ]; then echo "#if $$compat_cond"; fi; \ - echo "strong_alias (_no_syscall, __$${call}_$${ver})"; \ - echo "compat_symbol (libc, __$${call}_$${ver}, $$call, $$ver);"; \ - if [ -n "$$compat_cond" ]; then echo "#endif"; fi; \ - ;; \ - *) echo "weak_alias (_no_syscall, $$call)"; \ - echo "stub_warning ($$call)"; \ - echo "weak_alias (_no_syscall, __GI_$$call)" ;; \ - esac; \ - done) > $@T - mv -f $@T $@ -generated += stub-syscalls.c -endif -endif - -# This is the end of the pipeline for compiling the syscall stubs. -# The stdin is assembler with cpp using sysdep.h macros. -compile-syscall = $(COMPILE.S) -o $@ -x assembler-with-cpp - \ - $(compile-mkdep-flags) - -ifndef avoid-generated -$(common-objpfx)sysd-syscalls: $(..)sysdeps/unix/make-syscalls.sh \ - $(wildcard $(+sysdep_dirs:%=%/syscalls.list)) \ - $(common-objpfx)libc-modules.stmp - for dir in $(+sysdep_dirs); do \ - test -f $$dir/syscalls.list && \ - { sysdirs='$(sysdirs)' \ - asm_CPP='$(COMPILE.S) -E -x assembler-with-cpp' \ - $(SHELL) $(dir $<)$(notdir $<) $$dir || exit 1; }; \ - test $$dir = $(..)sysdeps/unix && break; \ - done > $@T - mv -f $@T $@ -endif - -$(common-objpfx)s-%.d: $(..)sysdeps/unix/s-%.S \ - $(wildcard $(+sysdep_dirs:%=%/syscalls.list)) - $(+make-deps) - -postclean-generated += sysd-syscalls - -endif diff --git a/sysdeps/unix/alpha/Makefile b/sysdeps/unix/alpha/Makefile deleted file mode 100644 index 0660847f15..0000000000 --- a/sysdeps/unix/alpha/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -ifeq ($(subdir),rt) -librt-sysdep_routines += rt-sysdep -librt-shared-only-routines += rt-sysdep -endif diff --git a/sysdeps/unix/alpha/getegid.S b/sysdeps/unix/alpha/getegid.S deleted file mode 100644 index a020b8985a..0000000000 --- a/sysdeps/unix/alpha/getegid.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - -PSEUDO (__getegid, getxgid, 0) - MOVE (r1, r0) - ret -PSEUDO_END (__getegid) - -weak_alias (__getegid, getegid) diff --git a/sysdeps/unix/alpha/geteuid.S b/sysdeps/unix/alpha/geteuid.S deleted file mode 100644 index b89c608bea..0000000000 --- a/sysdeps/unix/alpha/geteuid.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - -PSEUDO (__geteuid, getxuid, 0) - MOVE (r1, r0) - ret -PSEUDO_END (__geteuid) - -weak_alias (__geteuid, geteuid) diff --git a/sysdeps/unix/alpha/getppid.S b/sysdeps/unix/alpha/getppid.S deleted file mode 100644 index 3257f69b85..0000000000 --- a/sysdeps/unix/alpha/getppid.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - -PSEUDO (__getppid, getxpid, 0) - MOVE (r1, r0) - ret -PSEUDO_END (__getppid) - -weak_alias (__getppid, getppid) diff --git a/sysdeps/unix/alpha/pipe.S b/sysdeps/unix/alpha/pipe.S deleted file mode 100644 index 5610f03979..0000000000 --- a/sysdeps/unix/alpha/pipe.S +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger (davidm@cs.arizona.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* __pipe is a special syscall since it returns two values. */ - -#include - -PSEUDO (__pipe, pipe, 0) - stl r0, 0(a0) - stl r1, 4(a0) - mov zero, v0 - ret -PSEUDO_END(__pipe) - -libc_hidden_def (__pipe) -weak_alias (__pipe, pipe) diff --git a/sysdeps/unix/alpha/rt-sysdep.S b/sysdeps/unix/alpha/rt-sysdep.S deleted file mode 100644 index f966bf1e59..0000000000 --- a/sysdeps/unix/alpha/rt-sysdep.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/alpha/sysdep.S b/sysdeps/unix/alpha/sysdep.S deleted file mode 100644 index 9e5b58cb7c..0000000000 --- a/sysdeps/unix/alpha/sysdep.S +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe (brendan@zen.org). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -#if defined(PIC) - /* Put this at the end of libc's text segment so that all of - the direct branches from the syscalls are forward, and - thus predicted not taken. */ - .section .text.last, "ax", @progbits -#else - .text -#endif - -#if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -#else -# define SYSCALL_ERROR_ERRNO errno -#endif - - .align 4 - .globl __syscall_error - .ent __syscall_error -__syscall_error: - /* When building a shared library, we branch here without having - loaded the GP. Nor, since it was a direct branch, have we - loaded PV with our address. - - When building a static library, we tail call here from another - object file, possibly with a different GP, and must return with - the GP of our caller in place so that linker relaxation works. - - Both issues are solved by computing the GP into T1 instead of - clobbering the traditional GP register. */ - .prologue 0 - mov v0, t0 - br t1, 1f -1: ldah t1, 0(t1) !gpdisp!1 - call_pal PAL_rduniq - - lda t1, 0(t1) !gpdisp!1 - ldq t1, SYSCALL_ERROR_ERRNO(t1) !gottprel - addq v0, t1, t1 - lda v0, -1 - - stl t0, 0(t1) - ret - - .end __syscall_error diff --git a/sysdeps/unix/alpha/sysdep.h b/sysdeps/unix/alpha/sysdep.h deleted file mode 100644 index 776425d6b7..0000000000 --- a/sysdeps/unix/alpha/sysdep.h +++ /dev/null @@ -1,382 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe (brendan@zen.org). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include /* Defines RTLD_PRIVATE_ERRNO. */ - -#ifdef __ASSEMBLER__ - -#ifdef __linux__ -# include -#else -# include -#endif - -#define __LABEL(x) x##: - -#define LEAF(name, framesize) \ - .globl name; \ - .align 4; \ - .ent name, 0; \ - __LABEL(name) \ - .frame sp, framesize, ra - -#define ENTRY(name) \ - .globl name; \ - .align 4; \ - .ent name, 0; \ - __LABEL(name) \ - .frame sp, 0, ra - -/* Mark the end of function SYM. */ -#undef END -#define END(sym) .end sym - -#ifdef PROF -# define PSEUDO_PROF \ - .set noat; \ - lda AT, _mcount; \ - jsr AT, (AT), _mcount; \ - .set at -#else -# define PSEUDO_PROF -#endif - -#ifdef PROF -# define PSEUDO_PROLOGUE \ - .frame sp, 0, ra; \ - ldgp gp,0(pv); \ - PSEUDO_PROF; \ - .prologue 1 -#elif defined PIC -# define PSEUDO_PROLOGUE \ - .frame sp, 0, ra; \ - .prologue 0 -#else -# define PSEUDO_PROLOGUE \ - .frame sp, 0, ra; \ - ldgp gp,0(pv); \ - .prologue 1 -#endif /* PROF */ - -#ifdef PROF -# define USEPV_PROF std -#else -# define USEPV_PROF no -#endif - -#if RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_LABEL $syscall_error -# define SYSCALL_ERROR_HANDLER \ -$syscall_error: \ - stl v0, rtld_errno(gp) !gprel; \ - lda v0, -1; \ - ret -# define SYSCALL_ERROR_FALLTHRU -#elif defined(PIC) -# define SYSCALL_ERROR_LABEL __syscall_error !samegp -# define SYSCALL_ERROR_HANDLER -# define SYSCALL_ERROR_FALLTHRU br SYSCALL_ERROR_LABEL -#else -# define SYSCALL_ERROR_LABEL $syscall_error -# define SYSCALL_ERROR_HANDLER \ -$syscall_error: \ - jmp $31, __syscall_error -# define SYSCALL_ERROR_FALLTHRU -#endif /* RTLD_PRIVATE_ERRNO */ - -/* Overridden by specific syscalls. */ -#undef PSEUDO_PREPARE_ARGS -#define PSEUDO_PREPARE_ARGS /* Nothing. */ - -#define PSEUDO(name, syscall_name, args) \ - .globl name; \ - .align 4; \ - .ent name,0; \ -__LABEL(name) \ - PSEUDO_PROLOGUE; \ - PSEUDO_PREPARE_ARGS \ - lda v0, SYS_ify(syscall_name); \ - call_pal PAL_callsys; \ - bne a3, SYSCALL_ERROR_LABEL - -#undef PSEUDO_END -#define PSEUDO_END(sym) \ - SYSCALL_ERROR_HANDLER; \ - END(sym) - -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - .globl name; \ - .align 4; \ - .ent name,0; \ -__LABEL(name) \ - PSEUDO_PROLOGUE; \ - PSEUDO_PREPARE_ARGS \ - lda v0, SYS_ify(syscall_name); \ - call_pal PAL_callsys; - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(sym) END(sym) - -#define ret_NOERRNO ret - -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .globl name; \ - .align 4; \ - .ent name,0; \ -__LABEL(name) \ - PSEUDO_PROLOGUE; \ - PSEUDO_PREPARE_ARGS \ - lda v0, SYS_ify(syscall_name); \ - call_pal PAL_callsys; - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(sym) END(sym) - -#define ret_ERRVAL ret - -#define r0 v0 -#define r1 a4 - -#define MOVE(x,y) mov x,y - -#else /* !ASSEMBLER */ - -/* In order to get __set_errno() definition in INLINE_SYSCALL. */ -#include - -/* ??? Linux needs to be able to override INLINE_SYSCALL for one - particular special case. Make this easy. */ - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - INLINE_SYSCALL1(name, nr, args) - -#define INLINE_SYSCALL1(name, nr, args...) \ -({ \ - long _sc_ret, _sc_err; \ - inline_syscall##nr(__NR_##name, args); \ - if (__builtin_expect (_sc_err, 0)) \ - { \ - __set_errno (_sc_ret); \ - _sc_ret = -1L; \ - } \ - _sc_ret; \ -}) - -#define INTERNAL_SYSCALL(name, err_out, nr, args...) \ - INTERNAL_SYSCALL1(name, err_out, nr, args) - -#define INTERNAL_SYSCALL1(name, err_out, nr, args...) \ - INTERNAL_SYSCALL_NCS(__NR_##name, err_out, nr, args) - -#define INTERNAL_SYSCALL_NCS(name, err_out, nr, args...) \ -({ \ - long _sc_ret, _sc_err; \ - inline_syscall##nr(name, args); \ - err_out = _sc_err; \ - _sc_ret; \ -}) - -#define INTERNAL_SYSCALL_DECL(err) \ - long int err __attribute__((unused)) - -/* The normal Alpha calling convention sign-extends 32-bit quantties - no matter what the "real" sign of the 32-bit type. We want to - preserve that when filling in values for the kernel. */ -#define syscall_promote(arg) \ - (sizeof(arg) == 4 ? (long)(int)(long)(arg) : (long)(arg)) - -/* Make sure and "use" the variable that we're not returning, - in order to suppress unused variable warnings. */ -#define INTERNAL_SYSCALL_ERROR_P(val, err) ((void)val, err) -#define INTERNAL_SYSCALL_ERRNO(val, err) ((void)err, val) - -#define inline_syscall_clobbers \ - "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", \ - "$22", "$23", "$24", "$25", "$27", "$28", "memory" - -/* It is moderately important optimization-wise to limit the lifetime - of the hard-register variables as much as possible. Thus we copy - in/out as close to the asm as possible. */ - -#define inline_syscall0(name, args...) \ -{ \ - register long _sc_19 __asm__("$19"); \ - register long _sc_0 = name; \ - __asm__ __volatile__ \ - ("callsys # %0 %1 <= %2" \ - : "+v"(_sc_0), "=r"(_sc_19) \ - : : inline_syscall_clobbers, \ - "$16", "$17", "$18", "$20", "$21"); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} - -#define inline_syscall1(name,arg1) \ -{ \ - register long _tmp_16 = syscall_promote (arg1); \ - register long _sc_0 = name; \ - register long _sc_16 __asm__("$16") = _tmp_16; \ - register long _sc_19 __asm__("$19"); \ - __asm__ __volatile__ \ - ("callsys # %0 %1 <= %2 %3" \ - : "+v"(_sc_0), "=r"(_sc_19), "+r"(_sc_16) \ - : : inline_syscall_clobbers, \ - "$17", "$18", "$20", "$21"); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} - -#define inline_syscall2(name,arg1,arg2) \ -{ \ - register long _tmp_16 = syscall_promote (arg1); \ - register long _tmp_17 = syscall_promote (arg2); \ - register long _sc_0 = name; \ - register long _sc_16 __asm__("$16") = _tmp_16; \ - register long _sc_17 __asm__("$17") = _tmp_17; \ - register long _sc_19 __asm__("$19"); \ - __asm__ __volatile__ \ - ("callsys # %0 %1 <= %2 %3 %4" \ - : "+v"(_sc_0), "=r"(_sc_19), \ - "+r"(_sc_16), "+r"(_sc_17) \ - : : inline_syscall_clobbers, \ - "$18", "$20", "$21"); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} - -#define inline_syscall3(name,arg1,arg2,arg3) \ -{ \ - register long _tmp_16 = syscall_promote (arg1); \ - register long _tmp_17 = syscall_promote (arg2); \ - register long _tmp_18 = syscall_promote (arg3); \ - register long _sc_0 = name; \ - register long _sc_16 __asm__("$16") = _tmp_16; \ - register long _sc_17 __asm__("$17") = _tmp_17; \ - register long _sc_18 __asm__("$18") = _tmp_18; \ - register long _sc_19 __asm__("$19"); \ - __asm__ __volatile__ \ - ("callsys # %0 %1 <= %2 %3 %4 %5" \ - : "+v"(_sc_0), "=r"(_sc_19), "+r"(_sc_16), \ - "+r"(_sc_17), "+r"(_sc_18) \ - : : inline_syscall_clobbers, "$20", "$21"); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} - -#define inline_syscall4(name,arg1,arg2,arg3,arg4) \ -{ \ - register long _tmp_16 = syscall_promote (arg1); \ - register long _tmp_17 = syscall_promote (arg2); \ - register long _tmp_18 = syscall_promote (arg3); \ - register long _tmp_19 = syscall_promote (arg4); \ - register long _sc_0 = name; \ - register long _sc_16 __asm__("$16") = _tmp_16; \ - register long _sc_17 __asm__("$17") = _tmp_17; \ - register long _sc_18 __asm__("$18") = _tmp_18; \ - register long _sc_19 __asm__("$19") = _tmp_19; \ - __asm__ __volatile__ \ - ("callsys # %0 %1 <= %2 %3 %4 %5 %6" \ - : "+v"(_sc_0), "+r"(_sc_19), "+r"(_sc_16), \ - "+r"(_sc_17), "+r"(_sc_18) \ - : : inline_syscall_clobbers, "$20", "$21"); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} - -#define inline_syscall5(name,arg1,arg2,arg3,arg4,arg5) \ -{ \ - register long _tmp_16 = syscall_promote (arg1); \ - register long _tmp_17 = syscall_promote (arg2); \ - register long _tmp_18 = syscall_promote (arg3); \ - register long _tmp_19 = syscall_promote (arg4); \ - register long _tmp_20 = syscall_promote (arg5); \ - register long _sc_0 = name; \ - register long _sc_16 __asm__("$16") = _tmp_16; \ - register long _sc_17 __asm__("$17") = _tmp_17; \ - register long _sc_18 __asm__("$18") = _tmp_18; \ - register long _sc_19 __asm__("$19") = _tmp_19; \ - register long _sc_20 __asm__("$20") = _tmp_20; \ - __asm__ __volatile__ \ - ("callsys # %0 %1 <= %2 %3 %4 %5 %6 %7" \ - : "+v"(_sc_0), "+r"(_sc_19), "+r"(_sc_16), \ - "+r"(_sc_17), "+r"(_sc_18), "+r"(_sc_20) \ - : : inline_syscall_clobbers, "$21"); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} - -#define inline_syscall6(name,arg1,arg2,arg3,arg4,arg5,arg6) \ -{ \ - register long _tmp_16 = syscall_promote (arg1); \ - register long _tmp_17 = syscall_promote (arg2); \ - register long _tmp_18 = syscall_promote (arg3); \ - register long _tmp_19 = syscall_promote (arg4); \ - register long _tmp_20 = syscall_promote (arg5); \ - register long _tmp_21 = syscall_promote (arg6); \ - register long _sc_0 = name; \ - register long _sc_16 __asm__("$16") = _tmp_16; \ - register long _sc_17 __asm__("$17") = _tmp_17; \ - register long _sc_18 __asm__("$18") = _tmp_18; \ - register long _sc_19 __asm__("$19") = _tmp_19; \ - register long _sc_20 __asm__("$20") = _tmp_20; \ - register long _sc_21 __asm__("$21") = _tmp_21; \ - __asm__ __volatile__ \ - ("callsys # %0 %1 <= %2 %3 %4 %5 %6 %7 %8" \ - : "+v"(_sc_0), "+r"(_sc_19), "+r"(_sc_16), \ - "+r"(_sc_17), "+r"(_sc_18), "+r"(_sc_20), \ - "+r"(_sc_21) \ - : : inline_syscall_clobbers); \ - _sc_ret = _sc_0, _sc_err = _sc_19; \ -} -#endif /* ASSEMBLER */ - -/* Pointer mangling support. Note that tls access is slow enough that - we don't deoptimize things by placing the pointer check value there. */ - -#ifdef __ASSEMBLER__ -# if IS_IN (rtld) -# define PTR_MANGLE(dst, src, tmp) \ - ldah tmp, __pointer_chk_guard_local($29) !gprelhigh; \ - ldq tmp, __pointer_chk_guard_local(tmp) !gprellow; \ - xor src, tmp, dst -# define PTR_MANGLE2(dst, src, tmp) \ - xor src, tmp, dst -# elif defined SHARED -# define PTR_MANGLE(dst, src, tmp) \ - ldq tmp, __pointer_chk_guard; \ - xor src, tmp, dst -# else -# define PTR_MANGLE(dst, src, tmp) \ - ldq tmp, __pointer_chk_guard_local; \ - xor src, tmp, dst -# endif -# define PTR_MANGLE2(dst, src, tmp) \ - xor src, tmp, dst -# define PTR_DEMANGLE(dst, tmp) PTR_MANGLE(dst, dst, tmp) -# define PTR_DEMANGLE2(dst, tmp) PTR_MANGLE2(dst, dst, tmp) -#else -# include -# if (IS_IN (rtld) \ - || (!defined SHARED && (IS_IN (libc) \ - || IS_IN (libpthread)))) -extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden; -# define PTR_MANGLE(var) \ - (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local) -# else -extern uintptr_t __pointer_chk_guard attribute_relro; -# define PTR_MANGLE(var) \ - (var) = (__typeof(var)) ((uintptr_t) (var) ^ __pointer_chk_guard) -# endif -# define PTR_DEMANGLE(var) PTR_MANGLE(var) -#endif /* ASSEMBLER */ diff --git a/sysdeps/unix/arm/sysdep.S b/sysdeps/unix/arm/sysdep.S deleted file mode 100644 index 9250290eb9..0000000000 --- a/sysdeps/unix/arm/sysdep.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#define _ERRNO_H -#include - -#if IS_IN (rtld) -# include /* Defines RTLD_PRIVATE_ERRNO. */ -#endif - -#include - -#undef syscall_error -__syscall_error: -#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN - /* We translate the system's EWOULDBLOCK error into EAGAIN. - The GNU C library always defines EWOULDBLOCK==EAGAIN. - EWOULDBLOCK_sys is the original number. */ - cmp r0, $EWOULDBLOCK_sys /* Is it the old EWOULDBLOCK? */ - it eq - moveq r0, $EAGAIN /* Yes; translate it to EAGAIN. */ -#endif - -#if !IS_IN (rtld) - mov r1, r0 - GET_TLS (r2) - ldr r2, 1f -#ifdef __thumb__ -2: add r2, r2, pc - ldr r2, [r2] -#else -2: ldr r2, [pc, r2] -#endif - str r1, [r0, r2] - mvn r0, #0 - DO_RET(lr) - -1: .word errno(gottpoff) + (. - 2b - PC_OFS) -#elif RTLD_PRIVATE_ERRNO - LDST_PCREL(str, r0, r1, C_SYMBOL_NAME(rtld_errno)) - mvn r0, #0 - DO_RET(r14) -#else -#error "Unsupported non-TLS case" -#endif - -#undef __syscall_error -END (__syscall_error) diff --git a/sysdeps/unix/arm/sysdep.h b/sysdeps/unix/arm/sysdep.h deleted file mode 100644 index 6830c04605..0000000000 --- a/sysdeps/unix/arm/sysdep.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* Some definitions to allow the assembler in sysdeps/unix/ to build - without needing ARM-specific versions of all the files. */ - -#ifdef __ASSEMBLER__ - -#define ret DO_RET (r14) -#define MOVE(a,b) mov b,a - -#endif diff --git a/sysdeps/unix/bsd/Implies b/sysdeps/unix/bsd/Implies deleted file mode 100644 index c30979e17b..0000000000 --- a/sysdeps/unix/bsd/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# The directory unix/inet implements sockets and networking in the usual way. -unix/inet diff --git a/sysdeps/unix/bsd/Makefile b/sysdeps/unix/bsd/Makefile deleted file mode 100644 index 208fd24484..0000000000 --- a/sysdeps/unix/bsd/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),socket) -sysdep_routines += cmsg_nxthdr -endif diff --git a/sysdeps/unix/bsd/Versions b/sysdeps/unix/bsd/Versions deleted file mode 100644 index 99b386b670..0000000000 --- a/sysdeps/unix/bsd/Versions +++ /dev/null @@ -1,6 +0,0 @@ -libc { - GLIBC_2.2.5 { - # functions used in inline functions or macros - __cmsg_nxthdr; - } -} diff --git a/sysdeps/unix/bsd/bits/signum.h b/sysdeps/unix/bsd/bits/signum.h deleted file mode 100644 index 268c24a702..0000000000 --- a/sysdeps/unix/bsd/bits/signum.h +++ /dev/null @@ -1,73 +0,0 @@ -/* Signal number definitions. BSD version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef _SIGNAL_H - -/* This file defines the fake signal functions and signal - number constants for 4.2 or 4.3 BSD-derived Unix system. */ - -/* Fake signal functions. */ -#define SIG_ERR ((__sighandler_t) -1) /* Error return. */ -#define SIG_DFL ((__sighandler_t) 0) /* Default action. */ -#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */ - -#ifdef __USE_XOPEN -# define SIG_HOLD ((__sighandler_t) 2) /* Add signal to hold mask. */ -#endif - - -/* Signals. */ -#define SIGHUP 1 /* Hangup (POSIX). */ -#define SIGINT 2 /* Interrupt (ANSI). */ -#define SIGQUIT 3 /* Quit (POSIX). */ -#define SIGILL 4 /* Illegal instruction (ANSI). */ -#define SIGABRT SIGIOT /* Abort (ANSI). */ -#define SIGTRAP 5 /* Trace trap (POSIX). */ -#define SIGIOT 6 /* IOT trap (4.2 BSD). */ -#define SIGEMT 7 /* EMT trap (4.2 BSD). */ -#define SIGFPE 8 /* Floating-point exception (ANSI). */ -#define SIGKILL 9 /* Kill, unblockable (POSIX). */ -#define SIGBUS 10 /* Bus error (4.2 BSD). */ -#define SIGSEGV 11 /* Segmentation violation (ANSI). */ -#define SIGSYS 12 /* Bad argument to system call (4.2 BSD). */ -#define SIGPIPE 13 /* Broken pipe (POSIX). */ -#define SIGALRM 14 /* Alarm clock (POSIX). */ -#define SIGTERM 15 /* Termination (ANSI). */ -#define SIGURG 16 /* Urgent condition on socket (4.2 BSD). */ -#define SIGSTOP 17 /* Stop, unblockable (POSIX). */ -#define SIGTSTP 18 /* Keyboard stop (POSIX). */ -#define SIGCONT 19 /* Continue (POSIX). */ -#define SIGCHLD 20 /* Child status has changed (POSIX). */ -#define SIGCLD SIGCHLD /* Same as SIGCHLD (System V). */ -#define SIGTTIN 21 /* Background read from tty (POSIX). */ -#define SIGTTOU 22 /* Background write to tty (POSIX). */ -#define SIGIO 23 /* I/O now possible (4.2 BSD). */ -#define SIGPOLL SIGIO /* Same as SIGIO? (SVID). */ -#define SIGXCPU 24 /* CPU limit exceeded (4.2 BSD). */ -#define SIGXFSZ 25 /* File size limit exceeded (4.2 BSD). */ -#define SIGVTALRM 26 /* Virtual alarm clock (4.2 BSD). */ -#define SIGPROF 27 /* Profiling alarm clock (4.2 BSD). */ -#define SIGWINCH 28 /* Window size change (4.3 BSD, Sun). */ -#define SIGINFO 29 /* Information request (4.4 BSD). */ -#define SIGUSR1 30 /* User-defined signal 1 (POSIX). */ -#define SIGUSR2 31 /* User-defined signal 2 (POSIX). */ -#define SIGLOST 32 /* Resource lost (Sun); server died (GNU). */ - -#endif /* included. */ - -#define _NSIG 33 /* Biggest signal number + 1. */ diff --git a/sysdeps/unix/bsd/bits/sockaddr.h b/sysdeps/unix/bsd/bits/sockaddr.h deleted file mode 100644 index bb98f3a778..0000000000 --- a/sysdeps/unix/bsd/bits/sockaddr.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Definition of struct sockaddr_* common members and sizes, BSD version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * Never include this file directly; use instead. - */ - -#ifndef _BITS_SOCKADDR_H -#define _BITS_SOCKADDR_H 1 - - -/* POSIX.1g specifies this type name for the `sa_family' member. */ -typedef unsigned char sa_family_t; - -/* This macro is used to declare the initial common members - of the data types used for socket addresses, `struct sockaddr', - `struct sockaddr_in', `struct sockaddr_un', etc. */ - -#define __SOCKADDR_COMMON(sa_prefix) \ - unsigned char sa_prefix##len; \ - sa_family_t sa_prefix##family - -#define __SOCKADDR_COMMON_SIZE (2 * sizeof (unsigned char)) - -#define _HAVE_SA_LEN 1 /* We have the sa_len field. */ - -/* Size of struct sockaddr_storage. */ -#define _SS_SIZE 128 - -#endif /* bits/sockaddr.h */ diff --git a/sysdeps/unix/bsd/bsdtty.h b/sysdeps/unix/bsd/bsdtty.h deleted file mode 100644 index a1da8d5cc3..0000000000 --- a/sysdeps/unix/bsd/bsdtty.h +++ /dev/null @@ -1,218 +0,0 @@ -#undef B0 -#undef B50 -#undef B75 -#undef B110 -#undef B134 -#undef B150 -#undef B200 -#undef B300 -#undef B600 -#undef B1200 -#undef B1800 -#undef B2400 -#undef B4800 -#undef B9600 -#undef B19200 -#undef B38400 -#undef EXTA -#undef EXTB -#undef ECHO -#undef TOSTOP -#undef NOFLSH -#undef MDMBUF -#undef FLUSHO -#undef PENDIN -#undef CERASE -#undef CKILL -#undef CINTR -#undef CQUIT -#undef CSTART -#undef CSTOP -#undef CEOF -#undef CEOT -#undef CBRK -#undef CSUSP -#undef CDSUSP -#undef CRPRNT -#undef CFLUSH -#undef CWERASE -#undef CLNEXT -#undef CSTATUS -#undef CERASE -#undef CKILL -#undef CINTR -#undef CQUIT -#undef CSTART -#undef CSTOP -#undef CEOF -#undef CEOT -#undef CBRK -#undef CSUSP -#undef CDSUSP -#undef CRPRNT -#undef CFLUSH -#undef CWERASE -#undef CLNEXT -#undef CSTATUS -#undef CERASE -#undef CKILL -#undef CINTR -#undef CQUIT -#undef CSTART -#undef CSTOP -#undef CEOF -#undef CEOT -#undef CBRK -#undef CSUSP -#undef CDSUSP -#undef CRPRNT -#undef CFLUSH -#undef CWERASE -#undef CLNEXT -#undef CSTATUS -#undef CERASE -#undef CKILL -#undef CINTR -#undef CQUIT -#undef CSTART -#undef CSTOP -#undef CEOF -#undef CEOT -#undef CBRK -#undef CSUSP -#undef CDSUSP -#undef CRPRNT -#undef CFLUSH -#undef CWERASE -#undef CLNEXT -#undef CSTATUS -#undef CERASE -#undef CKILL -#undef CINTR -#undef CQUIT -#undef CSTART -#undef CSTOP -#undef CEOF -#undef CEOT -#undef CBRK -#undef CSUSP -#undef CDSUSP -#undef CRPRNT -#undef CFLUSH -#undef CWERASE -#undef CLNEXT -#undef CSTATUS -#undef CERASE -#undef CKILL -#undef CINTR -#undef CQUIT -#undef CSTART -#undef CSTOP -#undef CEOF -#undef CEOT -#undef CBRK -#undef CSUSP -#undef CDSUSP -#undef CRPRNT -#undef CFLUSH -#undef CWERASE -#undef CLNEXT -#undef CSTATUS -#undef CERASE -#undef CKILL -#undef CINTR -#undef CQUIT -#undef CSTART -#undef CSTOP -#undef CEOF -#undef CEOT -#undef CBRK -#undef CSUSP -#undef CDSUSP -#undef CRPRNT -#undef CFLUSH -#undef CWERASE -#undef CLNEXT -#undef CSTATUS -#undef CERASE -#undef CKILL -#undef CINTR -#undef CQUIT -#undef CSTART -#undef CSTOP -#undef CEOF -#undef CEOT -#undef CBRK -#undef CSUSP -#undef CDSUSP -#undef CRPRNT -#undef CFLUSH -#undef CWERASE -#undef CLNEXT -#undef CSTATUS -#undef CERASE -#undef CKILL -#undef CINTR -#undef CQUIT -#undef CSTART -#undef CSTOP -#undef CEOF -#undef CEOT -#undef CBRK -#undef CSUSP -#undef CDSUSP -#undef CRPRNT -#undef CFLUSH -#undef CWERASE -#undef CLNEXT -#undef CSTATUS -#undef CERASE -#undef CKILL -#undef CINTR -#undef CQUIT -#undef CSTART -#undef CSTOP -#undef CEOF -#undef CEOT -#undef CBRK -#undef CSUSP -#undef CDSUSP -#undef CRPRNT -#undef CFLUSH -#undef CWERASE -#undef CLNEXT -#undef CSTATUS -#undef CERASE -#undef CKILL -#undef CINTR -#undef CQUIT -#undef CSTART -#undef CSTOP -#undef CEOF -#undef CEOT -#undef CBRK -#undef CSUSP -#undef CDSUSP -#undef CRPRNT -#undef CFLUSH -#undef CWERASE -#undef CLNEXT -#undef CSTATUS -#undef CERASE -#undef CKILL -#undef CINTR -#undef CQUIT -#undef CSTART -#undef CSTOP -#undef CEOF -#undef CEOT -#undef CBRK -#undef CSUSP -#undef CDSUSP -#undef CRPRNT -#undef CFLUSH -#undef CWERASE -#undef CLNEXT -#undef CSTATUS - -#include diff --git a/sysdeps/unix/bsd/cmsg_nxthdr.c b/sysdeps/unix/bsd/cmsg_nxthdr.c deleted file mode 100644 index 1a542fa01a..0000000000 --- a/sysdeps/unix/bsd/cmsg_nxthdr.c +++ /dev/null @@ -1,2 +0,0 @@ -/* The Linux version is perfectly usable on 4.4 BSD. */ -#include diff --git a/sysdeps/unix/bsd/ftime.c b/sysdeps/unix/bsd/ftime.c deleted file mode 100644 index 0d093eea71..0000000000 --- a/sysdeps/unix/bsd/ftime.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -ftime (struct timeb *timebuf) -{ - struct timeval tv; - struct timezone tz; - - if (__gettimeofday (&tv, &tz) < 0) - return -1; - - timebuf->time = tv.tv_sec; - timebuf->millitm = (tv.tv_usec + 500) / 1000; - if (timebuf->millitm == 1000) - { - ++timebuf->time; - timebuf->millitm = 0; - } - timebuf->timezone = tz.tz_minuteswest; - timebuf->dstflag = tz.tz_dsttime; - return 0; -} diff --git a/sysdeps/unix/bsd/getpt.c b/sysdeps/unix/bsd/getpt.c deleted file mode 100644 index 99e7af15c2..0000000000 --- a/sysdeps/unix/bsd/getpt.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Zack Weinberg , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -/* Prefix for master pseudo terminal nodes. */ -#define _PATH_PTY "/dev/pty" - - -/* Letters indicating a series of pseudo terminals. */ -#ifndef PTYNAME1 -#define PTYNAME1 "pqrsPQRS" -#endif -const char __libc_ptyname1[] attribute_hidden = PTYNAME1; - -/* Letters indicating the position within a series. */ -#ifndef PTYNAME2 -#define PTYNAME2 "0123456789abcdefghijklmnopqrstuv"; -#endif -const char __libc_ptyname2[] attribute_hidden = PTYNAME2; - - -/* Open a master pseudo terminal and return its file descriptor. */ -int -__getpt (void) -{ - char buf[sizeof (_PATH_PTY) + 2]; - const char *p, *q; - char *s; - - s = __mempcpy (buf, _PATH_PTY, sizeof (_PATH_PTY) - 1); - /* s[0] and s[1] will be filled in the loop. */ - s[2] = '\0'; - - for (p = __libc_ptyname1; *p != '\0'; ++p) - { - s[0] = *p; - - for (q = __libc_ptyname2; *q != '\0'; ++q) - { - int fd; - - s[1] = *q; - - fd = __open (buf, O_RDWR); - if (fd != -1) - return fd; - - if (errno == ENOENT) - return -1; - } - } - - __set_errno (ENOENT); - return -1; -} - -#undef __getpt -weak_alias (__getpt, getpt) - -#ifndef HAVE_POSIX_OPENPT -/* We cannot define posix_openpt in general for BSD systems. */ -int -__posix_openpt (int oflag) -{ - __set_errno (ENOSYS); - return -1; -} -weak_alias (__posix_openpt, posix_openpt) - -stub_warning (posix_openpt) -#endif diff --git a/sysdeps/unix/bsd/gtty.c b/sysdeps/unix/bsd/gtty.c deleted file mode 100644 index 2c32136f32..0000000000 --- a/sysdeps/unix/bsd/gtty.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Fill in *PARAMS with terminal parameters associated with FD. */ -int -gtty (int fd, struct sgttyb *params) -{ - return ioctl (fd, TIOCGETP, (void *) params); -} diff --git a/sysdeps/unix/bsd/sigblock.c b/sysdeps/unix/bsd/sigblock.c deleted file mode 100644 index 2647327db0..0000000000 --- a/sysdeps/unix/bsd/sigblock.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/bsd/sigsetmask.c b/sysdeps/unix/bsd/sigsetmask.c deleted file mode 100644 index 47f1e36a7f..0000000000 --- a/sysdeps/unix/bsd/sigsetmask.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/bsd/stty.c b/sysdeps/unix/bsd/stty.c deleted file mode 100644 index 8593c0e5d8..0000000000 --- a/sysdeps/unix/bsd/stty.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Set the terminal parameters associated with FD to *PARAMS. */ -int -stty (int fd, const struct sgttyb *params) -{ - return ioctl (fd, TIOCSETP, (void *) params); -} diff --git a/sysdeps/unix/bsd/syscalls.list b/sysdeps/unix/bsd/syscalls.list deleted file mode 100644 index 0b4d5fcd54..0000000000 --- a/sysdeps/unix/bsd/syscalls.list +++ /dev/null @@ -1,15 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -chflags - chflags 2 chflags -fchflags - fchflags 2 fchflags -flock - flock 2 __flock flock -getdents - getdirentries 4 __getdirentries getdirentries -getdtsz - getdtablesize 0 __getdtablesize getdtablesize -getpagesize - getpagesize 0 __getpagesize getpagesize -killpg - killpg 2 killpg -revoke - revoke 1 revoke -setlogin - setlogin 2 setlogin -sigaltstack - sigaltstack 2 __sigaltstack sigaltstack -sigpause - sigpause 1 __sigpause sigpause -sigstack - sigstack 2 sigstack -wait4 - wait4 4 __wait4 wait4 diff --git a/sysdeps/unix/bsd/tcdrain.c b/sysdeps/unix/bsd/tcdrain.c deleted file mode 100644 index ac9d9803a6..0000000000 --- a/sysdeps/unix/bsd/tcdrain.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Wait for pending output to be written on FD. */ -int -__libc_tcdrain (int fd) -{ - return __ioctl (fd, TIOCDRAIN); -} -weak_alias (__libc_tcdrain, tcdrain) diff --git a/sysdeps/unix/bsd/tcflow.c b/sysdeps/unix/bsd/tcflow.c deleted file mode 100644 index 39a13f13ef..0000000000 --- a/sysdeps/unix/bsd/tcflow.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include "bsdtty.h" - -/* Suspend or restart transmission on FD. */ -int -tcflow (int fd, int action) -{ - switch (action) - { - case TCOOFF: - return __ioctl (fd, TIOCSTOP, (void *) NULL); - case TCOON: - return __ioctl (fd, TIOCSTART, (void *) NULL); - - case TCIOFF: - case TCION: - { - /* This just writes the START or STOP character with - `write'. Is there another way to do this? */ - struct termios attr; - unsigned char c; - if (tcgetattr (fd, &attr) < 0) - return -1; - c = attr.c_cc[action == TCIOFF ? VSTOP : VSTART]; - if (c != _POSIX_VDISABLE && write (fd, &c, 1) < 1) - return -1; - return 0; - } - - default: - __set_errno (EINVAL); - return -1; - } -} diff --git a/sysdeps/unix/bsd/tcflush.c b/sysdeps/unix/bsd/tcflush.c deleted file mode 100644 index 4d1e933b56..0000000000 --- a/sysdeps/unix/bsd/tcflush.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include "bsdtty.h" -#include - -/* Flush pending data on FD. */ -int -tcflush (int fd, int queue_selector) -{ - int arg; - - switch (queue_selector) - { - case TCIFLUSH: - arg = FREAD; - break; - case TCOFLUSH: - arg = FWRITE; - break; - case TCIOFLUSH: - arg = FREAD | FWRITE; - break; - default: - __set_errno (EINVAL); - return -1; - } - - return __ioctl (fd, TIOCFLUSH, (void *) &arg); -} diff --git a/sysdeps/unix/bsd/tcgetattr.c b/sysdeps/unix/bsd/tcgetattr.c deleted file mode 100644 index 1779bb9342..0000000000 --- a/sysdeps/unix/bsd/tcgetattr.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* These are defined both in and in . - They should have the same values, but perhaps not written the same way. */ -#undef ECHO -#undef MDMBUF -#undef TOSTOP -#undef FLUSHO -#undef PENDIN -#undef NOFLSH -#include - -/* Put the state of FD into *TERMIOS_P. */ -int -__tcgetattr (int fd, struct termios *termios_p) -{ - return __ioctl (fd, TIOCGETA, termios_p); -} - -weak_alias (__tcgetattr, tcgetattr) diff --git a/sysdeps/unix/bsd/tcgetpgrp.c b/sysdeps/unix/bsd/tcgetpgrp.c deleted file mode 100644 index 6ba19ed351..0000000000 --- a/sysdeps/unix/bsd/tcgetpgrp.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Return the foreground process group ID of FD. */ -pid_t -tcgetpgrp (int fd) -{ - int pgrp; - - if (__ioctl (fd, TIOCGPGRP, &pgrp) < 0) - return (pid_t) -1; - return (pid_t) pgrp; -} -libc_hidden_def (tcgetpgrp) diff --git a/sysdeps/unix/bsd/tcsendbrk.c b/sysdeps/unix/bsd/tcsendbrk.c deleted file mode 100644 index f074c7a065..0000000000 --- a/sysdeps/unix/bsd/tcsendbrk.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include "bsdtty.h" -#include -#include -#include - -/* Send zero bits on FD. */ -int -tcsendbreak (int fd, int duration) -{ - struct timeval delay; - - /* The break lasts 0.25 to 0.5 seconds if DURATION is zero, - and an implementation-defined period if DURATION is nonzero. - We define a positive DURATION to be number of microseconds to break. */ - if (duration <= 0) - duration = 400000; - - delay.tv_sec = 0; - delay.tv_usec = duration; - - /* Starting sending break. */ - if (__ioctl (fd, TIOCSBRK, (void *) NULL) < 0) - return -1; - - /* Wait DURATION microseconds. */ - (void) __select (0, (fd_set *) NULL, (fd_set *) NULL, (fd_set *) NULL, - &delay); - - /* Turn off the break. */ - return __ioctl (fd, TIOCCBRK, (void *) NULL); -} diff --git a/sysdeps/unix/bsd/tcsetattr.c b/sysdeps/unix/bsd/tcsetattr.c deleted file mode 100644 index c754e80cbe..0000000000 --- a/sysdeps/unix/bsd/tcsetattr.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* These are defined both in and in . - They should have the same values, but perhaps not written the same way. */ -#undef ECHO -#undef MDMBUF -#undef TOSTOP -#undef FLUSHO -#undef PENDIN -#undef NOFLSH -#include - - -/* Set the state of FD to *TERMIOS_P. */ -int -tcsetattr (int fd, int optional_actions, const struct termios *termios_p) -{ - struct termios myt; - - if (optional_actions & TCSASOFT) - { - myt = *termios_p; - myt.c_cflag |= CIGNORE; - termios_p = &myt; - optional_actions &= ~TCSASOFT; - } - - switch (optional_actions) - { - case TCSANOW: - return __ioctl (fd, TIOCSETA, termios_p); - - case TCSADRAIN: - return __ioctl (fd, TIOCSETAW, termios_p); - - default: - return __ioctl (fd, TIOCSETAF, termios_p); - } -} -libc_hidden_def (tcsetattr) diff --git a/sysdeps/unix/bsd/tcsetpgrp.c b/sysdeps/unix/bsd/tcsetpgrp.c deleted file mode 100644 index b99716adbe..0000000000 --- a/sysdeps/unix/bsd/tcsetpgrp.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Set the foreground process group ID of FD set PGRP_ID. */ -int -tcsetpgrp (int fd, pid_t pgrp_id) -{ - return __ioctl (fd, TIOCSPGRP, &pgrp_id); -} diff --git a/sysdeps/unix/bsd/ualarm.c b/sysdeps/unix/bsd/ualarm.c deleted file mode 100644 index 133ed86597..0000000000 --- a/sysdeps/unix/bsd/ualarm.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Set an alarm to go off (generating a SIGALRM signal) in VALUE microseconds. - If INTERVAL is nonzero, when the alarm goes off, the timer is reset to go - off every INTERVAL microseconds thereafter. - - Returns the number of microseconds remaining before the alarm. */ -useconds_t -ualarm (useconds_t value, useconds_t interval) -{ - struct itimerval timer, otimer; - - timer.it_value.tv_sec = 0; - timer.it_value.tv_usec = value; - timer.it_interval.tv_sec = 0; - timer.it_interval.tv_usec = interval; - - if (__setitimer (ITIMER_REAL, &timer, &otimer) < 0) - return -1; - - return (otimer.it_value.tv_sec * 1000000) + otimer.it_value.tv_usec; -} diff --git a/sysdeps/unix/bsd/unlockpt.c b/sysdeps/unix/bsd/unlockpt.c deleted file mode 100644 index 7388c98523..0000000000 --- a/sysdeps/unix/bsd/unlockpt.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Zack Weinberg , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -/* Unlock the slave pseudo terminal associated with the master pseudo - terminal specified by FD. */ -int -unlockpt (int fd) -{ - char buf[sizeof (_PATH_TTY) + 2]; - - /* BSD doesn't have a lock, but it does have `revoke'. */ - if (__ptsname_r (fd, buf, sizeof (buf))) - return -1; - return revoke (buf); -} diff --git a/sysdeps/unix/bsd/wait.c b/sysdeps/unix/bsd/wait.c deleted file mode 100644 index 3daed7ee05..0000000000 --- a/sysdeps/unix/bsd/wait.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Wait for a child to die. When one does, put its status in *STAT_LOC - and return its process ID. For errors, return (pid_t) -1. */ -__pid_t -__libc_wait (int *stat_loc) -{ - return __wait4 (WAIT_ANY, stat_loc, 0, (struct rusage *) NULL); -} - -weak_alias (__libc_wait, __wait) -weak_alias (__libc_wait, wait) diff --git a/sysdeps/unix/bsd/wait3.c b/sysdeps/unix/bsd/wait3.c deleted file mode 100644 index feb17e5187..0000000000 --- a/sysdeps/unix/bsd/wait3.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Wait for a child to exit. When one does, put its status in *STAT_LOC and - return its process ID. For errors return (pid_t) -1. If USAGE is not nil, - store information about the child's resource usage (as a `struct rusage') - there. If the WUNTRACED bit is set in OPTIONS, return status for stopped - children; otherwise don't. */ -pid_t -__wait3 (int *stat_loc, int options, struct rusage *usage) -{ - return __wait4 (WAIT_ANY, stat_loc, options, usage); -} - -weak_alias (__wait3, wait3) diff --git a/sysdeps/unix/bsd/waitpid.c b/sysdeps/unix/bsd/waitpid.c deleted file mode 100644 index 18f680e3c0..0000000000 --- a/sysdeps/unix/bsd/waitpid.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Wait for a child matching PID to die. - If PID is greater than 0, match any process whose process ID is PID. - If PID is (pid_t) -1, match any process. - If PID is (pid_t) 0, match any process with the - same process group as the current process. - If PID is less than -1, match any process whose - process group is the absolute value of PID. - If the WNOHANG bit is set in OPTIONS, and that child - is not already dead, return (pid_t) 0. If successful, - return PID and store the dead child's status in STAT_LOC. - Return (pid_t) -1 for errors. If the WUNTRACED bit is set in OPTIONS, - return status for stopped children; otherwise don't. */ -pid_t -__waitpid (pid_t pid, int *stat_loc, int options) -{ - return __wait4 (pid, stat_loc, options, NULL); -} - -libc_hidden_def (__waitpid) -weak_alias (__waitpid, waitpid) diff --git a/sysdeps/unix/clock_gettime.c b/sysdeps/unix/clock_gettime.c deleted file mode 100644 index 5262066f51..0000000000 --- a/sysdeps/unix/clock_gettime.c +++ /dev/null @@ -1,136 +0,0 @@ -/* clock_gettime -- Get the current time from a POSIX clockid_t. Unix version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - -#if HP_TIMING_AVAIL -/* Clock frequency of the processor. We make it a 64-bit variable - because some jokers are already playing with processors with more - than 4GHz. */ -static hp_timing_t freq; - - -/* This function is defined in the thread library. */ -extern int __pthread_clock_gettime (clockid_t clock_id, hp_timing_t freq, - struct timespec *tp) - __attribute__ ((__weak__)); - -static int -hp_timing_gettime (clockid_t clock_id, struct timespec *tp) -{ - hp_timing_t tsc; - - if (__glibc_unlikely (freq == 0)) - { - /* This can only happen if we haven't initialized the `freq' - variable yet. Do this now. We don't have to protect this - code against multiple execution since all of them should - lead to the same result. */ - freq = __get_clockfreq (); - if (__glibc_unlikely (freq == 0)) - /* Something went wrong. */ - return -1; - } - - if (clock_id != CLOCK_PROCESS_CPUTIME_ID - && __pthread_clock_gettime != NULL) - return __pthread_clock_gettime (clock_id, freq, tp); - - /* Get the current counter. */ - HP_TIMING_NOW (tsc); - - /* Compute the offset since the start time of the process. */ - tsc -= GL(dl_cpuclock_offset); - - /* Compute the seconds. */ - tp->tv_sec = tsc / freq; - - /* And the nanoseconds. This computation should be stable until - we get machines with about 16GHz frequency. */ - tp->tv_nsec = ((tsc % freq) * UINT64_C (1000000000)) / freq; - - return 0; -} -#endif - - -static inline int -realtime_gettime (struct timespec *tp) -{ - struct timeval tv; - int retval = gettimeofday (&tv, NULL); - if (retval == 0) - /* Convert into `timespec'. */ - TIMEVAL_TO_TIMESPEC (&tv, tp); - return retval; -} - - -/* Get current value of CLOCK and store it in TP. */ -int -__clock_gettime (clockid_t clock_id, struct timespec *tp) -{ - int retval = -1; - - switch (clock_id) - { -#ifdef SYSDEP_GETTIME - SYSDEP_GETTIME; -#endif - -#ifndef HANDLED_REALTIME - case CLOCK_REALTIME: - { - struct timeval tv; - retval = gettimeofday (&tv, NULL); - if (retval == 0) - TIMEVAL_TO_TIMESPEC (&tv, tp); - } - break; -#endif - - default: -#ifdef SYSDEP_GETTIME_CPU - SYSDEP_GETTIME_CPU (clock_id, tp); -#endif -#if HP_TIMING_AVAIL - if ((clock_id & ((1 << CLOCK_IDFIELD_SIZE) - 1)) - == CLOCK_THREAD_CPUTIME_ID) - retval = hp_timing_gettime (clock_id, tp); - else -#endif - __set_errno (EINVAL); - break; - -#if HP_TIMING_AVAIL && !defined HANDLED_CPUTIME - case CLOCK_PROCESS_CPUTIME_ID: - retval = hp_timing_gettime (clock_id, tp); - break; -#endif - } - - return retval; -} -weak_alias (__clock_gettime, clock_gettime) -libc_hidden_def (__clock_gettime) diff --git a/sysdeps/unix/clock_nanosleep.c b/sysdeps/unix/clock_nanosleep.c deleted file mode 100644 index 8f4d348810..0000000000 --- a/sysdeps/unix/clock_nanosleep.c +++ /dev/null @@ -1,101 +0,0 @@ -/* High-resolution sleep with the specified clock. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#if HP_TIMING_AVAIL -# define CPUCLOCK_P(clock) \ - ((clock) == CLOCK_PROCESS_CPUTIME_ID \ - || ((clock) & ((1 << CLOCK_IDFIELD_SIZE) - 1)) == CLOCK_THREAD_CPUTIME_ID) -#else -# define CPUCLOCK_P(clock) 0 -#endif - -#ifndef INVALID_CLOCK_P -# define INVALID_CLOCK_P(cl) \ - ((cl) < CLOCK_REALTIME || (cl) > CLOCK_THREAD_CPUTIME_ID) -#endif - - -/* This implementation assumes that these is only a `nanosleep' system - call. So we have to remap all other activities. */ -int -__clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, - struct timespec *rem) -{ - struct timespec now; - - if (__builtin_expect (req->tv_nsec, 0) < 0 - || __builtin_expect (req->tv_nsec, 0) >= 1000000000) - return EINVAL; - - if (clock_id == CLOCK_THREAD_CPUTIME_ID) - return EINVAL; /* POSIX specifies EINVAL for this case. */ - -#ifdef SYSDEP_NANOSLEEP - SYSDEP_NANOSLEEP; -#endif - - if (CPUCLOCK_P (clock_id)) - return ENOTSUP; - - if (INVALID_CLOCK_P (clock_id)) - return EINVAL; - - /* If we got an absolute time, remap it. */ - if (flags == TIMER_ABSTIME) - { - long int nsec; - long int sec; - - /* Make sure we use safe data types. */ - assert (sizeof (sec) >= sizeof (now.tv_sec)); - - /* Get the current time for this clock. */ - if (__builtin_expect (clock_gettime (clock_id, &now), 0) != 0) - return errno; - - /* Compute the difference. */ - nsec = req->tv_nsec - now.tv_nsec; - sec = req->tv_sec - now.tv_sec - (nsec < 0); - if (sec < 0) - /* The time has already elapsed. */ - return 0; - - now.tv_sec = sec; - now.tv_nsec = nsec + (nsec < 0 ? 1000000000 : 0); - - /* From now on this is our time. */ - req = &now; - - /* Make sure we are not modifying the struct pointed to by REM. */ - rem = NULL; - } - else if (__builtin_expect (flags, 0) != 0) - return EINVAL; - else if (clock_id != CLOCK_REALTIME) - /* Not supported. */ - return ENOTSUP; - - return __builtin_expect (nanosleep (req, rem), 0) ? errno : 0; -} -weak_alias (__clock_nanosleep, clock_nanosleep) diff --git a/sysdeps/unix/clock_settime.c b/sysdeps/unix/clock_settime.c deleted file mode 100644 index e744cae6a9..0000000000 --- a/sysdeps/unix/clock_settime.c +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -#if HP_TIMING_AVAIL && !defined HANDLED_CPUTIME -/* Clock frequency of the processor. We make it a 64-bit variable - because some jokers are already playing with processors with more - than 4GHz. */ -static hp_timing_t freq; - - -/* This function is defined in the thread library. */ -extern void __pthread_clock_settime (clockid_t clock_id, hp_timing_t offset) - __attribute__ ((__weak__)); - - -static int -hp_timing_settime (clockid_t clock_id, const struct timespec *tp) -{ - hp_timing_t tsc; - hp_timing_t usertime; - - /* First thing is to get the current time. */ - HP_TIMING_NOW (tsc); - - if (__glibc_unlikely (freq == 0)) - { - /* This can only happen if we haven't initialized the `freq' - variable yet. Do this now. We don't have to protect this - code against multiple execution since all of them should lead - to the same result. */ - freq = __get_clockfreq (); - if (__glibc_unlikely (freq == 0)) - /* Something went wrong. */ - return -1; - } - - /* Convert the user-provided time into CPU ticks. */ - usertime = tp->tv_sec * freq + (tp->tv_nsec * freq) / 1000000000ull; - - /* Determine the offset and use it as the new base value. */ - if (clock_id == CLOCK_PROCESS_CPUTIME_ID - || __pthread_clock_settime == NULL) - GL(dl_cpuclock_offset) = tsc - usertime; - else - __pthread_clock_settime (clock_id, tsc - usertime); - - return 0; -} -#endif - - -/* Set CLOCK to value TP. */ -int -__clock_settime (clockid_t clock_id, const struct timespec *tp) -{ - int retval; - - /* Make sure the time cvalue is OK. */ - if (tp->tv_nsec < 0 || tp->tv_nsec >= 1000000000) - { - __set_errno (EINVAL); - return -1; - } - - switch (clock_id) - { -#define HANDLE_REALTIME \ - do { \ - struct timeval tv; \ - TIMESPEC_TO_TIMEVAL (&tv, tp); \ - \ - retval = settimeofday (&tv, NULL); \ - } while (0) - -#ifdef SYSDEP_SETTIME - SYSDEP_SETTIME; -#endif - -#ifndef HANDLED_REALTIME - case CLOCK_REALTIME: - HANDLE_REALTIME; - break; -#endif - - default: -#ifdef SYSDEP_SETTIME_CPU - SYSDEP_SETTIME_CPU; -#endif -#ifndef HANDLED_CPUTIME -# if HP_TIMING_AVAIL - if (CPUCLOCK_WHICH (clock_id) == CLOCK_PROCESS_CPUTIME_ID - || CPUCLOCK_WHICH (clock_id) == CLOCK_THREAD_CPUTIME_ID) - retval = hp_timing_settime (clock_id, tp); - else -# endif - { - __set_errno (EINVAL); - retval = -1; - } -#endif - break; - } - - return retval; -} -weak_alias (__clock_settime, clock_settime) diff --git a/sysdeps/unix/confstr.h b/sysdeps/unix/confstr.h deleted file mode 100644 index 15859c3b27..0000000000 --- a/sysdeps/unix/confstr.h +++ /dev/null @@ -1 +0,0 @@ -#define CS_PATH "/bin:/usr/bin" diff --git a/sysdeps/unix/get_child_max.c b/sysdeps/unix/get_child_max.c deleted file mode 100644 index c587583086..0000000000 --- a/sysdeps/unix/get_child_max.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Get POSIX {CHILD_MAX} run-time limit value. Unix version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#ifndef CHILD_MAX -long int -__get_child_max (void) -{ -# ifdef RLIMIT_NPROC - struct rlimit limit; - if (__getrlimit (RLIMIT_NPROC, &limit) == 0 - && limit.rlim_cur != RLIM_INFINITY) - return limit.rlim_cur; -# endif - - return -1; -} -#endif diff --git a/sysdeps/unix/getlogin.c b/sysdeps/unix/getlogin.c deleted file mode 100644 index 7d4ff53ba4..0000000000 --- a/sysdeps/unix/getlogin.c +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#include - -static char name[UT_NAMESIZE + 1]; - -/* Return the login name of the user, or NULL if it can't be determined. - The returned pointer, if not NULL, is good only until the next call. */ - -#ifdef STATIC -STATIC -#endif -char * -getlogin (void) -{ - char tty_pathname[2 + 2 * NAME_MAX]; - char *real_tty_path = tty_pathname; - int err; - char *result = NULL; - struct utmp *ut, line, buffer; - - /* Get name of tty connected to fd 0. Return NULL if not a tty or - if fd 0 isn't open. Note that a lot of documentation says that - getlogin() is based on the controlling terminal---what they - really mean is "the terminal connected to standard input". The - getlogin() implementation of DEC Unix, SunOS, Solaris, HP-UX all - return NULL if fd 0 has been closed, so this is the compatible - thing to do. Note that ttyname(open("/dev/tty")) on those - systems returns /dev/tty, so that is not a possible solution for - getlogin(). */ - err = __ttyname_r (0, real_tty_path, sizeof (tty_pathname)); - if (err != 0) - { - __set_errno (err); - return NULL; - } - - real_tty_path += 5; /* Remove "/dev/". */ - - __setutent (); - strncpy (line.ut_line, real_tty_path, sizeof line.ut_line); - if (__getutline_r (&line, &buffer, &ut) < 0) - { - if (errno == ESRCH) - /* The caller expects ENOENT if nothing is found. */ - __set_errno (ENOENT); - result = NULL; - } - else - { - strncpy (name, ut->ut_user, UT_NAMESIZE); - name[UT_NAMESIZE] = '\0'; - result = name; - } - - __endutent (); - - return result; -} diff --git a/sysdeps/unix/getlogin_r.c b/sysdeps/unix/getlogin_r.c deleted file mode 100644 index 4a6a40eeb2..0000000000 --- a/sysdeps/unix/getlogin_r.c +++ /dev/null @@ -1,103 +0,0 @@ -/* Reentrant function to return the current login name. Unix version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#include -#include "../login/utmp-private.h" - -/* Return at most NAME_LEN characters of the login name of the user in NAME. - If it cannot be determined or some other error occurred, return the error - code. Otherwise return 0. */ - -#ifdef STATIC -STATIC -#endif -int -__getlogin_r (char *name, size_t name_len) -{ - char tty_pathname[2 + 2 * NAME_MAX]; - char *real_tty_path = tty_pathname; - int result; - struct utmp *ut, line, buffer; - - /* Get name of tty connected to fd 0. Return if not a tty or - if fd 0 isn't open. Note that a lot of documentation says that - getlogin() is based on the controlling terminal---what they - really mean is "the terminal connected to standard input". The - getlogin() implementation of DEC Unix, SunOS, Solaris, HP-UX all - return NULL if fd 0 has been closed, so this is the compatible - thing to do. Note that ttyname(open("/dev/tty")) on those - systems returns /dev/tty, so that is not a possible solution for - getlogin(). */ - - result = __ttyname_r (0, real_tty_path, sizeof (tty_pathname)); - - if (result != 0) - return result; - - real_tty_path += 5; /* Remove "/dev/". */ - strncpy (line.ut_line, real_tty_path, sizeof line.ut_line); - - /* We don't use the normal entry points __setutent et al, because we - want setutent + getutline_r + endutent all to happen with the lock - held so that our search is thread-safe. */ - - __libc_lock_lock (__libc_utmp_lock); - (*__libc_utmp_jump_table->setutent) (); - result = (*__libc_utmp_jump_table->getutline_r) (&line, &buffer, &ut); - if (result < 0) - { - if (errno == ESRCH) - /* The caller expects ENOENT if nothing is found. */ - result = ENOENT; - else - result = errno; - } - (*__libc_utmp_jump_table->endutent) (); - __libc_utmp_jump_table = &__libc_utmp_unknown_functions; - __libc_lock_unlock (__libc_utmp_lock); - - if (result == 0) - { - size_t needed = strlen (ut->ut_user) + 1; - - if (needed > name_len) - { - __set_errno (ERANGE); - result = ERANGE; - } - else - { - memcpy (name, ut->ut_user, needed); - result = 0; - } - } - - return result; -} -#ifndef STATIC -libc_hidden_def (__getlogin_r) -weak_alias (__getlogin_r, getlogin_r) -libc_hidden_weak (getlogin_r) -#endif diff --git a/sysdeps/unix/getpagesize.c b/sysdeps/unix/getpagesize.c deleted file mode 100644 index 59e1945742..0000000000 --- a/sysdeps/unix/getpagesize.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Return the system page size. */ -int -__getpagesize (void) -{ -#ifdef EXEC_PAGESIZE - return EXEC_PAGESIZE; -#else /* No EXEC_PAGESIZE. */ -#ifdef NBPG -#ifndef CLSIZE -#define CLSIZE 1 -#endif /* No CLSIZE. */ - return NBPG * CLSIZE; -#else /* No NBPG. */ - return NBPC; -#endif /* NBPG. */ -#endif /* EXEC_PAGESIZE. */ -} -libc_hidden_def (__getpagesize) -weak_alias (__getpagesize, getpagesize) diff --git a/sysdeps/unix/grantpt.c b/sysdeps/unix/grantpt.c deleted file mode 100644 index a73020e69a..0000000000 --- a/sysdeps/unix/grantpt.c +++ /dev/null @@ -1,260 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Zack Weinberg , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "pty-private.h" - - -/* Return the result of ptsname_r in the buffer pointed to by PTS, - which should be of length BUF_LEN. If it is too long to fit in - this buffer, a sufficiently long buffer is allocated using malloc, - and returned in PTS. 0 is returned upon success, -1 otherwise. */ -static int -pts_name (int fd, char **pts, size_t buf_len, struct stat64 *stp) -{ - int rv; - char *buf = *pts; - - for (;;) - { - char *new_buf; - - if (buf_len) - { - rv = __ptsname_internal (fd, buf, buf_len, stp); - if (rv != 0) - { - if (rv == ENOTTY) - /* ptsname_r returns with ENOTTY to indicate - a descriptor not referring to a pty master. - For this condition, grantpt must return EINVAL. */ - rv = EINVAL; - errno = rv; /* Not necessarily set by __ptsname_r. */ - break; - } - - if (memchr (buf, '\0', buf_len)) - /* We succeeded and the returned name fit in the buffer. */ - break; - - /* Try again with a longer buffer. */ - buf_len += buf_len; /* Double it */ - } - else - /* No initial buffer; start out by mallocing one. */ - buf_len = 128; /* First time guess. */ - - if (buf != *pts) - /* We've already malloced another buffer at least once. */ - new_buf = (char *) realloc (buf, buf_len); - else - new_buf = (char *) malloc (buf_len); - if (! new_buf) - { - rv = -1; - __set_errno (ENOMEM); - break; - } - buf = new_buf; - } - - if (rv == 0) - *pts = buf; /* Return buffer to the user. */ - else if (buf != *pts) - free (buf); /* Free what we malloced when returning an error. */ - - return rv; -} - -/* Change the ownership and access permission of the slave pseudo - terminal associated with the master pseudo terminal specified - by FD. */ -int -grantpt (int fd) -{ - int retval = -1; -#ifdef PATH_MAX - char _buf[PATH_MAX]; -#else - char _buf[512]; -#endif - char *buf = _buf; - struct stat64 st; - - if (__glibc_unlikely (pts_name (fd, &buf, sizeof (_buf), &st))) - { - int save_errno = errno; - - /* Check, if the file descriptor is valid. pts_name returns the - wrong errno number, so we cannot use that. */ - if (__libc_fcntl (fd, F_GETFD) == -1 && errno == EBADF) - return -1; - - /* If the filedescriptor is no TTY, grantpt has to set errno - to EINVAL. */ - if (save_errno == ENOTTY) - __set_errno (EINVAL); - else - __set_errno (save_errno); - - return -1; - } - - /* Make sure that we own the device. */ - uid_t uid = __getuid (); - if (st.st_uid != uid) - { - if (__chown (buf, uid, st.st_gid) < 0) - goto helper; - } - - static int tty_gid = -1; - if (__glibc_unlikely (tty_gid == -1)) - { - char *grtmpbuf; - struct group grbuf; - size_t grbuflen = __sysconf (_SC_GETGR_R_SIZE_MAX); - struct group *p; - - /* Get the group ID of the special `tty' group. */ - if (grbuflen == (size_t) -1L) - /* `sysconf' does not support _SC_GETGR_R_SIZE_MAX. - Try a moderate value. */ - grbuflen = 1024; - grtmpbuf = (char *) __alloca (grbuflen); - __getgrnam_r (TTY_GROUP, &grbuf, grtmpbuf, grbuflen, &p); - if (p != NULL) - tty_gid = p->gr_gid; - } - gid_t gid = tty_gid == -1 ? __getgid () : tty_gid; - -#if HAVE_PT_CHOWN - /* Make sure the group of the device is that special group. */ - if (st.st_gid != gid) - { - if (__chown (buf, uid, gid) < 0) - goto helper; - } - - /* Make sure the permission mode is set to readable and writable by - the owner, and writable by the group. */ - mode_t mode = S_IRUSR|S_IWUSR|S_IWGRP; -#else - /* When built without pt_chown, we have delegated the creation of the - pty node with the right group and permission mode to the kernel, and - non-root users are unlikely to be able to change it. Therefore let's - consider that POSIX enforcement is the responsibility of the whole - system and not only the GNU libc. Thus accept different group or - permission mode. */ - - /* Make sure the permission is set to readable and writable by the - owner. For security reasons, make it writable by the group only - when originally writable and when the group of the device is that - special group. */ - mode_t mode = S_IRUSR|S_IWUSR| - ((st.st_gid == gid) ? (st.st_mode & S_IWGRP) : 0); -#endif - - if ((st.st_mode & ACCESSPERMS) != mode) - { - if (__chmod (buf, mode) < 0) - goto helper; - } - - retval = 0; - goto cleanup; - - /* We have to use the helper program if it is available. */ - helper:; - -#if HAVE_PT_CHOWN - pid_t pid = __fork (); - if (pid == -1) - goto cleanup; - else if (pid == 0) - { - /* Disable core dumps. */ - struct rlimit rl = { 0, 0 }; - __setrlimit (RLIMIT_CORE, &rl); - - /* We pass the master pseudo terminal as file descriptor PTY_FILENO. */ - if (fd != PTY_FILENO) - if (__dup2 (fd, PTY_FILENO) < 0) - _exit (FAIL_EBADF); - -# ifdef CLOSE_ALL_FDS - CLOSE_ALL_FDS (); -# endif - - execle (_PATH_PT_CHOWN, __basename (_PATH_PT_CHOWN), NULL, NULL); - _exit (FAIL_EXEC); - } - else - { - int w; - - if (__waitpid (pid, &w, 0) == -1) - goto cleanup; - if (!WIFEXITED (w)) - __set_errno (ENOEXEC); - else - switch (WEXITSTATUS (w)) - { - case 0: - retval = 0; - break; - case FAIL_EBADF: - __set_errno (EBADF); - break; - case FAIL_EINVAL: - __set_errno (EINVAL); - break; - case FAIL_EACCES: - __set_errno (EACCES); - break; - case FAIL_EXEC: - __set_errno (ENOEXEC); - break; - case FAIL_ENOMEM: - __set_errno (ENOMEM); - break; - - default: - assert(! "grantpt: internal error: invalid exit code from pt_chown"); - } - } -#endif - - cleanup: - if (buf != _buf) - free (buf); - - return retval; -} diff --git a/sysdeps/unix/i386/sysdep.S b/sysdeps/unix/i386/sysdep.S deleted file mode 100644 index f5321e02aa..0000000000 --- a/sysdeps/unix/i386/sysdep.S +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H -#include - -#if IS_IN (rtld) -# include /* Defines RTLD_PRIVATE_ERRNO. */ -#endif - -.globl C_SYMBOL_NAME(errno) -.globl syscall_error - -__syscall_error: -#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN - /* We translate the system's EWOULDBLOCK error into EAGAIN. - The GNU C library always defines EWOULDBLOCK==EAGAIN. - EWOULDBLOCK_sys is the original number. */ - cmpl $EWOULDBLOCK_sys, %eax /* Is it the old EWOULDBLOCK? */ - jne notb /* Branch if not. */ - movl $EAGAIN, %eax /* Yes; translate it to EAGAIN. */ -notb: -#endif -#ifndef PIC -# ifndef NO_TLS_DIRECT_SEG_REFS - movl %eax, %gs:C_SYMBOL_NAME(errno@NTPOFF) -# else - movl %gs:0, %ecx - movl %eax, C_SYMBOL_NAME(errno@NTPOFF)(%ecx) -# endif -#else - /* The caller has pushed %ebx and then set it up to - point to the GOT before calling us through the PLT. */ - movl C_SYMBOL_NAME(errno@GOTNTPOFF)(%ebx), %ecx - - /* Pop %ebx value saved before jumping here. */ - popl %ebx -# ifndef NO_TLS_DIRECT_SEG_REFS - addl %gs:0, %ecx - movl %eax, (%ecx) -# else - movl %eax, %gs:0(%ecx) -# endif -#endif - movl $-1, %eax - ret - -#undef __syscall_error -END (__syscall_error) diff --git a/sysdeps/unix/i386/sysdep.h b/sysdeps/unix/i386/sysdep.h deleted file mode 100644 index b0aef3477d..0000000000 --- a/sysdeps/unix/i386/sysdep.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifdef __ASSEMBLER__ - -/* This is defined as a separate macro so that other sysdep.h files - can include this one and then redefine DO_CALL. */ - -#define DO_CALL(syscall_name, args) \ - lea SYS_ify (syscall_name), %eax; \ - lcall $7, $0 - -#define r0 %eax /* Normal return-value register. */ -#define r1 %edx /* Secondary return-value register. */ -#define scratch %ecx /* Call-clobbered register for random use. */ -#define MOVE(x,y) movl x, y - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/unix/ifreq.c b/sysdeps/unix/ifreq.c deleted file mode 100644 index 184afe1858..0000000000 --- a/sysdeps/unix/ifreq.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "ifreq.h" - - -void -__ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd) -{ - int fd = sockfd; - struct ifconf ifc; - int rq_len; - int nifs; -# define RQ_IFS 4 - - if (fd < 0) - fd = __opensock (); - if (fd < 0) - { - *num_ifs = 0; - *ifreqs = NULL; - return; - } - - ifc.ifc_buf = NULL; - rq_len = RQ_IFS * sizeof (struct ifreq) / 2; /* Doubled in the loop. */ - do - { - ifc.ifc_len = rq_len *= 2; - void *newp = realloc (ifc.ifc_buf, ifc.ifc_len); - if (newp == NULL || __ioctl (fd, SIOCGIFCONF, &ifc) < 0) - { - free (ifc.ifc_buf); - - if (fd != sockfd) - __close (fd); - *num_ifs = 0; - *ifreqs = NULL; - return; - } - ifc.ifc_buf = newp; - } - while (rq_len < sizeof (struct ifreq) + ifc.ifc_len); - - if (fd != sockfd) - __close (fd); - -#ifdef _HAVE_SA_LEN - struct ifreq *ifr = *ifreqs; - nifs = 0; - while ((char *) ifr < ifc.ifc_buf + ifc.ifc_len) - { - ++nifs; - ifr = __if_nextreq (ifr); - if (ifr == NULL) - break; - } -#else - nifs = ifc.ifc_len / sizeof (struct ifreq); -#endif - - *num_ifs = nifs; - *ifreqs = realloc (ifc.ifc_buf, nifs * sizeof (struct ifreq)); -} diff --git a/sysdeps/unix/inet/Subdirs b/sysdeps/unix/inet/Subdirs deleted file mode 100644 index 0a02dd4447..0000000000 --- a/sysdeps/unix/inet/Subdirs +++ /dev/null @@ -1,8 +0,0 @@ -inet -resolv -hesiod -sunrpc -nis -nscd -nss -streams diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh deleted file mode 100644 index 123553c1d9..0000000000 --- a/sysdeps/unix/make-syscalls.sh +++ /dev/null @@ -1,321 +0,0 @@ -#!/bin/sh - -# Usage: make-syscalls.sh ../sysdeps/unix/common -# Expects $sysdirs in environment. - -############################################################################## -# -# This script is used to process the syscall data encoded in the various -# syscalls.list files to produce thin assembly syscall wrappers around the -# appropriate OS syscall. See syscall-template.s for more details on the -# actual wrapper. -# -# Syscall Signature Prefixes: -# -# C: cancellable (i.e., this syscall is a cancellation point) -# E: errno and return value are not set by the call -# V: errno is not set, but errno or zero (success) is returned from the call -# -# Syscall Signature Key Letters: -# -# a: unchecked address (e.g., 1st arg to mmap) -# b: non-NULL buffer (e.g., 2nd arg to read; return value from mmap) -# B: optionally-NULL buffer (e.g., 4th arg to getsockopt) -# f: buffer of 2 ints (e.g., 4th arg to socketpair) -# F: 3rd arg to fcntl -# i: scalar (any signedness & size: int, long, long long, enum, whatever) -# I: 3rd arg to ioctl -# n: scalar buffer length (e.g., 3rd arg to read) -# N: pointer to value/return scalar buffer length (e.g., 6th arg to recvfrom) -# p: non-NULL pointer to typed object (e.g., any non-void* arg) -# P: optionally-NULL pointer to typed object (e.g., 2nd argument to gettimeofday) -# s: non-NULL string (e.g., 1st arg to open) -# S: optionally-NULL string (e.g., 1st arg to acct) -# v: vararg scalar (e.g., optional 3rd arg to open) -# V: byte-per-page vector (3rd arg to mincore) -# W: wait status, optionally-NULL pointer to int (e.g., 2nd arg of wait4) -# - -############################################################################## - -thisdir=$1; shift - -echo '' -echo \#### DIRECTORY = $thisdir -# Check each sysdep dir with higher priority than this one, -# and remove from $calls all the functions found in other dirs. -# Punt when we reach the directory defining these syscalls. -sysdirs=`for dir in $sysdirs; do - test $dir = $thisdir && break; echo $dir; done` -echo \#### SYSDIRS = $sysdirs - -# Get the list of system calls for this directory. -calls=`sed 's/#.*$// -/^[ ]*$/d' $thisdir/syscalls.list` - -calls=`echo "$calls" | -while read file caller rest; do - # Remove each syscall that is implemented by a file in $dir. - # If a syscall specified a "caller", then only compile that syscall - # if the caller function is also implemented in this directory. - srcfile=-; - for dir in $sysdirs; do - { test -f $dir/$file.c && srcfile=$dir/$file.c; } || - { test -f $dir/$file.S && srcfile=$dir/$file.S; } || - { test x$caller != x- && - { { test -f $dir/$caller.c && srcfile=$dir/$caller.c; } || - { test -f $dir/$caller.S && srcfile=$dir/$caller.S; }; }; } && break; - done; - echo $file $srcfile $caller $rest; -done` - -# Any calls left? -test -n "$calls" || exit 0 - -# This uses variables $weak, $strong, and $any_versioned. -emit_weak_aliases() -{ - # A shortcoming in the current gas is that it will only allow one - # version-alias per symbol. So we create new strong aliases as needed. - vcount="" - - # We use the macros to generate the versioned aliases - # so that the version sets can be mapped to the configuration's - # minimum version set as per shlib-versions DEFAULT lines. If an - # entry point is specified in the form NAME@VERSION:OBSOLETED, a - # SHLIB_COMPAT conditional is generated. - if [ $any_versioned = t ]; then - echo " echo '#include '; \\" - fi - - for name in $weak; do - case $name in - *@@*) - base=`echo $name | sed 's/@@.*//'` - ver=`echo $name | sed 's/.*@@//;s/\./_/g'` - echo " echo '#if IS_IN (libc)'; \\" - if test -z "$vcount" ; then - source=$strong - vcount=1 - else - source="${strong}_${vcount}" - vcount=`expr $vcount + 1` - echo " echo 'strong_alias ($strong, $source)'; \\" - fi - echo " echo 'versioned_symbol (libc, $source, $base, $ver)'; \\" - echo " echo '#else'; \\" - echo " echo 'strong_alias ($strong, $base)'; \\" - echo " echo '#endif'; \\" - ;; - *@*) - base=`echo $name | sed 's/@.*//'` - ver=`echo $name | sed 's/.*@//;s/\./_/g'` - case $ver in - *:*) - compat_ver=${ver#*:} - ver=${ver%%:*} - compat_cond=" && SHLIB_COMPAT (libc, $ver, $compat_ver)" - ;; - *) - compat_cond= - ;; - esac - echo " echo '#if defined SHARED && IS_IN (libc)$compat_cond'; \\" - if test -z "$vcount" ; then - source=$strong - vcount=1 - else - source="${strong}_${vcount}" - vcount=`expr $vcount + 1` - echo " echo 'strong_alias ($strong, $source)'; \\" - fi - echo " echo 'compat_symbol (libc, $source, $base, $ver)'; \\" - echo " echo '#endif'; \\" - ;; - !*) - name=`echo $name | sed 's/.//'` - echo " echo 'strong_alias ($strong, $name)'; \\" - echo " echo 'hidden_def ($name)'; \\" - ;; - *) - echo " echo 'weak_alias ($strong, $name)'; \\" - echo " echo 'hidden_weak ($name)'; \\" - ;; - esac - done -} - - -# Emit rules to compile the syscalls remaining in $calls. -echo "$calls" | -while read file srcfile caller syscall args strong weak; do - - vdso_syscall= - case x"$syscall" in - *:*@*) - vdso_syscall="${syscall#*:}" - syscall="${syscall%:*}" - ;; - esac - - case x"$syscall" in - x-) callnum=_ ;; - *) - # Figure out if $syscall is defined with a number in syscall.h. - callnum=- - eval `{ echo "#include "; - echo "callnum=SYS_ify ($syscall)"; } | - $asm_CPP -D__OPTIMIZE__ - | - sed -n -e "/^callnum=.*$syscall/d" \ - -e "/^\(callnum=\)[ ]*\(.*\)/s//\1'\2'/p"` - ;; - esac - - cancellable=0 - noerrno=0 - errval=0 - case $args in - C*) cancellable=1; args=`echo $args | sed 's/C:\?//'`;; - E*) noerrno=1; args=`echo $args | sed 's/E:\?//'`;; - V*) errval=1; args=`echo $args | sed 's/V:\?//'`;; - esac - - # Derive the number of arguments from the argument signature - case $args in - [0-9]) nargs=$args;; - ?:) nargs=0;; - ?:?) nargs=1;; - ?:??) nargs=2;; - ?:???) nargs=3;; - ?:????) nargs=4;; - ?:?????) nargs=5;; - ?:??????) nargs=6;; - ?:???????) nargs=7;; - ?:????????) nargs=8;; - ?:?????????) nargs=9;; - esac - - # Make sure only the first syscall rule is used, if multiple dirs - # define the same syscall. - echo '' - echo "#### CALL=$file NUMBER=$callnum ARGS=$args SOURCE=$srcfile" - - # If there are versioned aliases the entry is only generated for the - # shared library, unless it is a default version. - any_versioned=f - shared_only=f - case $weak in - *@@*) any_versioned=t ;; - *@*) any_versioned=t shared_only=t ;; - esac - - case x$srcfile"$callnum" in - x--) - # Undefined callnum for an extra syscall. - if [ x$caller != x- ]; then - if [ $noerrno != 0 ]; then - echo >&2 "$0: no number for $fileno, no-error syscall ($strong $weak)" - exit 2 - fi - echo "unix-stub-syscalls += $strong $weak" - fi - ;; - x*-) ;; ### Do nothing for undefined callnum - x-*) - echo "ifeq (,\$(filter $file,\$(unix-syscalls)))" - - if test $shared_only = t; then - # The versioned symbols are only in the shared library. - echo "ifneq (,\$(filter .os,\$(object-suffixes)))" - fi - # Accumulate the list of syscall files for this directory. - echo "unix-syscalls += $file" - test x$caller = x- || echo "unix-extra-syscalls += $file" - - # Emit a compilation rule for this syscall. - if test $shared_only = t; then - # The versioned symbols are only in the shared library. - echo "shared-only-routines += $file" - test -n "$vdso_syscall" || echo "\$(objpfx)${file}.os: \\" - else - object_suffixes='$(object-suffixes)' - test -z "$vdso_syscall" || object_suffixes='$(object-suffixes-noshared)' - echo "\ -\$(foreach p,\$(sysd-rules-targets),\ -\$(foreach o,${object_suffixes},\$(objpfx)\$(patsubst %,\$p,$file)\$o)): \\" - fi - - echo " \$(..)sysdeps/unix/make-syscalls.sh" - case x"$callnum" in - x_) - echo "\ - \$(make-target-directory) - (echo '/* Dummy module requested by syscalls.list */'; \\" - ;; - x*) - echo "\ - \$(make-target-directory) - (echo '#define SYSCALL_NAME $syscall'; \\ - echo '#define SYSCALL_NARGS $nargs'; \\ - echo '#define SYSCALL_SYMBOL $strong'; \\ - echo '#define SYSCALL_CANCELLABLE $cancellable'; \\ - echo '#define SYSCALL_NOERRNO $noerrno'; \\ - echo '#define SYSCALL_ERRVAL $errval'; \\ - echo '#include '; \\" - ;; - esac - - # Append any weak aliases or versions defined for this syscall function. - emit_weak_aliases - - # And finally, pipe this all into the compiler. - echo ' ) | $(compile-syscall) '"\ -\$(foreach p,\$(patsubst %$file,%,\$(basename \$(@F))),\$(\$(p)CPPFLAGS))" - - if test -n "$vdso_syscall"; then - # In the shared library, we're going to emit an IFUNC using a vDSO function. - # $vdso_syscall looks like "name@KERNEL_X.Y" where "name" is the symbol - # name in the vDSO and KERNEL_X.Y is its symbol version. - vdso_symbol="${vdso_syscall%@*}" - vdso_symver="${vdso_syscall#*@}" - vdso_symver=`echo "$vdso_symver" | sed 's/\./_/g'` - cat <'; \\ - echo 'extern void *${strong}_ifunc (void) __asm ("${strong}");'; \\ - echo 'void *'; \\ - echo 'inhibit_stack_protector'; \\ - echo '${strong}_ifunc (void)'; \\ - echo '{'; \\ - echo ' PREPARE_VERSION_KNOWN (symver, ${vdso_symver});'; \\ - echo ' return _dl_vdso_vsym ("${vdso_symbol}", &symver);'; \\ - echo '}'; \\ - echo 'asm (".type ${strong}, %gnu_indirect_function");'; \\ -EOF - # This is doing "hidden_def (${strong})", but the compiler - # doesn't know that we've defined ${strong} in the same file, so - # we can't do it the normal way. - cat <. */ - -#include - -/* Note that while it's better structurally, going back to call __syscall_error - can make things confusing if you're debugging---it looks like it's jumping - backwards into the previous fn. */ -#ifdef __PIC__ -#define PSEUDO(name, syscall_name, args) \ - .align 2; \ - .set nomips16; \ - cfi_startproc; \ - 99: la t9,__syscall_error; \ - jr t9; \ - cfi_endproc; \ - ENTRY(name) \ - .set noreorder; \ - .cpload t9; \ - li v0, SYS_ify(syscall_name); \ - syscall; \ - .set reorder; \ - bne a3, zero, 99b; \ -L(syse1): -#else -#define PSEUDO(name, syscall_name, args) \ - .set noreorder; \ - .set nomips16; \ - .align 2; \ - cfi_startproc; \ - 99: j __syscall_error; \ - nop; \ - cfi_endproc; \ - ENTRY(name) \ - .set noreorder; \ - li v0, SYS_ify(syscall_name); \ - syscall; \ - .set reorder; \ - bne a3, zero, 99b; \ -L(syse1): -#endif diff --git a/sysdeps/unix/mips/mips64/n32/sysdep.h b/sysdeps/unix/mips/mips64/n32/sysdep.h deleted file mode 100644 index 60f5a45073..0000000000 --- a/sysdeps/unix/mips/mips64/n32/sysdep.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Alexandre Oliva . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifdef __ASSEMBLER__ - -/* Note that while it's better structurally, going back to call __syscall_error - can make things confusing if you're debugging---it looks like it's jumping - backwards into the previous fn. */ -#ifdef __PIC__ -#define PSEUDO(name, syscall_name, args) \ - .align 2; \ - .set nomips16; \ - cfi_startproc; \ - 99:; \ - .set noat; \ - .cpsetup t9, $1, name; \ - cfi_register (gp, $1); \ - .set at; \ - la t9,__syscall_error; \ - .cpreturn; \ - cfi_restore (gp); \ - jr t9; \ - cfi_endproc; \ - ENTRY(name) \ - li v0, SYS_ify(syscall_name); \ - syscall; \ - bne a3, zero, 99b; \ -L(syse1): -#else -#define PSEUDO(name, syscall_name, args) \ - .set noreorder; \ - .align 2; \ - .set nomips16; \ - cfi_startproc; \ - 99: j __syscall_error; \ - nop; \ - cfi_endproc; \ - ENTRY(name) \ - .set noreorder; \ - li v0, SYS_ify(syscall_name); \ - syscall; \ - .set reorder; \ - bne a3, zero, 99b; \ -L(syse1): -#endif - -#endif diff --git a/sysdeps/unix/mips/mips64/n64/sysdep.h b/sysdeps/unix/mips/mips64/n64/sysdep.h deleted file mode 100644 index 9d5a142312..0000000000 --- a/sysdeps/unix/mips/mips64/n64/sysdep.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Alexandre Oliva . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifdef __ASSEMBLER__ - -/* Note that while it's better structurally, going back to call __syscall_error - can make things confusing if you're debugging---it looks like it's jumping - backwards into the previous fn. */ -#ifdef __PIC__ -#define PSEUDO(name, syscall_name, args) \ - .align 2; \ - .set nomips16; \ - cfi_startproc; \ - 99:; \ - .set noat; \ - .cpsetup t9, $1, name; \ - cfi_register (gp, $1); \ - .set at; \ - dla t9,__syscall_error; \ - .cpreturn; \ - cfi_restore (gp); \ - jr t9; \ - cfi_endproc; \ - ENTRY(name) \ - li v0, SYS_ify(syscall_name); \ - syscall; \ - bne a3, zero, 99b; \ -L(syse1): -#else -#define PSEUDO(name, syscall_name, args) \ - .set noreorder; \ - .align 2; \ - .set nomips16; \ - cfi_startproc; \ - 99: j __syscall_error; \ - nop; \ - cfi_endproc; \ - ENTRY(name) \ - .set noreorder; \ - li v0, SYS_ify(syscall_name); \ - syscall; \ - .set reorder; \ - bne a3, zero, 99b; \ -L(syse1): -#endif - -#endif diff --git a/sysdeps/unix/mips/pipe.S b/sysdeps/unix/mips/pipe.S deleted file mode 100644 index f51e55623d..0000000000 --- a/sysdeps/unix/mips/pipe.S +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe (brendan@zen.org). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -SYSCALL__ (pipe, 1) - /* Plop in the two descriptors. */ - sw v0, 0(a0) - sw v1, 4(a0) - - /* Go out with a clean status. */ - move v0, zero - j ra -PSEUDO_END(__pipe) - -libc_hidden_def (__pipe) -weak_alias (__pipe, pipe) diff --git a/sysdeps/unix/mips/rt-sysdep.S b/sysdeps/unix/mips/rt-sysdep.S deleted file mode 100644 index f966bf1e59..0000000000 --- a/sysdeps/unix/mips/rt-sysdep.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/mips/sysdep.S b/sysdeps/unix/mips/sysdep.S deleted file mode 100644 index 7735968d97..0000000000 --- a/sysdeps/unix/mips/sysdep.S +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe (brendan@zen.org). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#define _ERRNO_H -#include -#include - - .set nomips16 - -#ifdef _LIBC_REENTRANT - -LOCALSZ= 3 -FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK -RAOFF= FRAMESZ-(1*SZREG) -GPOFF= FRAMESZ-(2*SZREG) -V0OFF= FRAMESZ-(3*SZREG) - -ENTRY(__syscall_error) -#ifdef __PIC__ - .set noat - SETUP_GPX (AT) - .set at -#endif - PTR_SUBU sp, FRAMESZ - .set noat - SETUP_GPX64(GPOFF,AT) - .set at -#ifdef __PIC__ - SAVE_GP(GPOFF) -#endif - REG_S v0, V0OFF(sp) - REG_S ra, RAOFF(sp) - -#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN - /* We translate the system's EWOULDBLOCK error into EAGAIN. - The GNU C library always defines EWOULDBLOCK==EAGAIN. - EWOULDBLOCK_sys is the original number. */ - bne v0, EWOULDBLOCK_sys, L(skip) - nop - li v0, EAGAIN -L(skip): -#endif - /* Find our per-thread errno address */ - jal __errno_location - - /* Store the error value. */ - REG_L t0, V0OFF(sp) - sw t0, 0(v0) - - /* And just kick back a -1. */ - REG_L ra, RAOFF(sp) - RESTORE_GP64 - PTR_ADDU sp, FRAMESZ - li v0, -1 - j ra - END(__syscall_error) - -#else /* _LIBC_REENTRANT */ - - -ENTRY(__syscall_error) -#ifdef __PIC__ - SETUP_GPX (AT) -#endif - SETUP_GPX64 (t9, AT) - -#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN - /* We translate the system's EWOULDBLOCK error into EAGAIN. - The GNU C library always defines EWOULDBLOCK==EAGAIN. - EWOULDBLOCK_sys is the original number. */ - bne v0, EWOULDBLOCK_sys, L(skip) - li v0, EAGAIN -L(skip): -#endif - /* Store it in errno... */ - sw v0, errno - - /* And just kick back a -1. */ - li v0, -1 - - RESTORE_GP64 - j ra - END(__syscall_error) -#endif /* _LIBC_REENTRANT */ diff --git a/sysdeps/unix/mips/sysdep.h b/sysdeps/unix/mips/sysdep.h deleted file mode 100644 index 102f34a6a1..0000000000 --- a/sysdeps/unix/mips/sysdep.h +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe (brendan@zen.org). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -#ifndef __mips_isa_rev -# define __mips_isa_rev 0 -#endif - -#ifdef __ASSEMBLER__ - -#include - -#define ENTRY(name) \ - .globl name; \ - .align 2; \ - .ent name,0; \ - name##: \ - cfi_startproc; - -#undef END -#define END(function) \ - cfi_endproc; \ - .end function; \ - .size function,.-function - -#define ret j ra ; nop - -#undef PSEUDO_END -#define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym - -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - .align 2; \ - ENTRY(name) \ - .set nomips16; \ - .set noreorder; \ - li v0, SYS_ify(syscall_name); \ - syscall - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(sym) cfi_endproc; .end sym; .size sym,.-sym - -#define ret_NOERRNO ret - -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .align 2; \ - ENTRY(name) \ - .set nomips16; \ - .set noreorder; \ - li v0, SYS_ify(syscall_name); \ - syscall - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(sym) cfi_endproc; .end sym; .size sym,.-sym - -#define ret_ERRVAL ret - -#define r0 v0 -#define r1 v1 -/* The mips move insn is d,s. */ -#define MOVE(x,y) move y , x - -#if _MIPS_SIM == _ABIO32 -# define L(label) $L ## label -#else -# define L(label) .L ## label -#endif - -#endif diff --git a/sysdeps/unix/powerpc/sysdep.h b/sysdeps/unix/powerpc/sysdep.h deleted file mode 100644 index 2141593a2b..0000000000 --- a/sysdeps/unix/powerpc/sysdep.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#if __WORDSIZE == 64 -#include -#else -#include -#endif diff --git a/sysdeps/unix/s-proto-cancel.S b/sysdeps/unix/s-proto-cancel.S deleted file mode 100644 index 042be3c8df..0000000000 --- a/sysdeps/unix/s-proto-cancel.S +++ /dev/null @@ -1,5 +0,0 @@ -/* This file exists just to have its dependencies determined. - Those dependencies are then used for the objects of the cancellable - system calls. */ - -#include diff --git a/sysdeps/unix/s-proto.S b/sysdeps/unix/s-proto.S deleted file mode 100644 index 52a197036c..0000000000 --- a/sysdeps/unix/s-proto.S +++ /dev/null @@ -1,4 +0,0 @@ -/* This file exists just to have its dependencies determined. - Those dependencies are then used for the simple system call objects. */ - -#include diff --git a/sysdeps/unix/setxid.h b/sysdeps/unix/setxid.h deleted file mode 100644 index c18e2d4a6b..0000000000 --- a/sysdeps/unix/setxid.h +++ /dev/null @@ -1,4 +0,0 @@ -#include - -#define INLINE_SETXID_SYSCALL(name, nr, args...) \ - INLINE_SYSCALL (name, nr, args) diff --git a/sysdeps/unix/sh/sysdep.S b/sysdeps/unix/sh/sysdep.S deleted file mode 100644 index 85298581a0..0000000000 --- a/sysdeps/unix/sh/sysdep.S +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H -#include - -ENTRY(__syscall_error) -#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN - /* We translate the system's EWOULDBLOCK error into EAGAIN. - The GNU C library always defines EWOULDBLOCK==EAGAIN. - EWOULDBLOCK_sys is the original number. */ - mov.l .L1, r1 - cmp/eq r1, r0 - bf skip - nop - mov.l .L2, r0 -skip: -#endif - /* Store it in errno... */ -#ifndef SHARED -#ifndef _LIBC_REENTRANT - mov.l .L3, r1 - mov.l r0, @r1 -#else - mov.l .L3, r1 - sts.l pr, @-r15 - cfi_adjust_cfa_offset (4) - cfi_rel_offset (pr, 0) - mov.l r0, @-r15 - cfi_adjust_cfa_offset (4) - jsr @r1 - nop - mov.l @r15+, r1 - cfi_adjust_cfa_offset (-4) - lds.l @r15+, pr - cfi_adjust_cfa_offset (-4) - cfi_restore (pr) - mov.l r1, @r0 -#endif -#else - mov.l r12, @-r15 - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r12, 0) -#ifndef _LIBC_REENTRANT - mov r0, r2 - mov.l 0f, r12 - mova 0f, r0 - add r0, r12 - mov.l .L3, r0 - mov.l @(r0,r12), r1 - mov.l r2, @r1 -#else - mov.l r0, @-r15 - cfi_adjust_cfa_offset (4) - sts.l pr, @-r15 - cfi_adjust_cfa_offset (4) - cfi_rel_offset (pr, 0) - mov.l 0f, r12 - mova 0f, r0 - add r0, r12 - mov.l .L3, r1 - mova .L3, r0 - add r0, r1 - jsr @r1 - nop - lds.l @r15+, pr - cfi_adjust_cfa_offset (-4) - cfi_restore (pr) - mov.l @r15+, r1 - cfi_adjust_cfa_offset (-4) - mov.l r1, @r0 -#endif - mov.l @r15+, r12 - cfi_adjust_cfa_offset (-4) - cfi_restore (r12) -#endif - /* And just kick back a -1. */ - rts - mov #-1, r0 - - .align 2 -#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN -.L1: .long EWOULDBLOCK_sys -.L2: .long EAGAIN -#endif -#ifndef SHARED -#ifndef _LIBC_REENTRANT -.L3: .long C_SYMBOL_NAME(errno) -#else -.L3: .long C_SYMBOL_NAME(__errno_location) -#endif -#else -0: - .long _GLOBAL_OFFSET_TABLE_ -#ifndef _LIBC_REENTRANT -.L3: .long C_SYMBOL_NAME(errno@GOT) -#else -.L3: .long C_SYMBOL_NAME(__errno_location@PLT) -#endif -#endif -END(__syscall_error) diff --git a/sysdeps/unix/sh/sysdep.h b/sysdeps/unix/sh/sysdep.h deleted file mode 100644 index 52ff8adf5f..0000000000 --- a/sysdeps/unix/sh/sysdep.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifdef __ASSEMBLER__ - -#define ret rts ; nop - -/* The sh move insn is s, d. */ -#define MOVE(x,y) mov x , y - -#endif diff --git a/sysdeps/unix/sockatmark.c b/sysdeps/unix/sockatmark.c deleted file mode 100644 index 6ff3c479b6..0000000000 --- a/sysdeps/unix/sockatmark.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Determine wheter socket is at a out-of-band mark. */ -int -sockatmark (int fd) -{ - int answ; - - return __ioctl (fd, SIOCATMARK, &answ) == -1 ? -1 : answ; -} diff --git a/sysdeps/unix/stime.c b/sysdeps/unix/stime.c deleted file mode 100644 index 526ba13914..0000000000 --- a/sysdeps/unix/stime.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include /* For NULL. */ -#include -#include - -/* Set the system clock to *WHEN. */ - -int -stime (const time_t *when) -{ - struct timeval tv; - - if (when == NULL) - { - __set_errno (EINVAL); - return -1; - } - - tv.tv_sec = *when; - tv.tv_usec = 0; - return __settimeofday (&tv, (struct timezone *) 0); -} diff --git a/sysdeps/unix/syscall-template.S b/sysdeps/unix/syscall-template.S deleted file mode 100644 index 4993ff562d..0000000000 --- a/sysdeps/unix/syscall-template.S +++ /dev/null @@ -1,90 +0,0 @@ -/* Assembly code template for system call stubs. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The real guts of this work are in the macros defined in the - machine- and kernel-specific sysdep.h header file. When we - are defining a cancellable system call, the sysdep-cancel.h - versions of those macros are what we really use. - - Each system call's object is built by a rule in sysd-syscalls - generated by make-syscalls.sh that #include's this file after - defining a few macros: - SYSCALL_NAME syscall name - SYSCALL_NARGS number of arguments this call takes - SYSCALL_SYMBOL primary symbol name - SYSCALL_CANCELLABLE 1 if the call is a cancelation point - SYSCALL_NOERRNO 1 to define a no-errno version (see below) - SYSCALL_ERRVAL 1 to define an error-value version (see below) - - We used to simply pipe the correct three lines below through cpp into - the assembler. The main reason to have this file instead is so that - stub objects can be assembled with -g and get source line information - that leads a user back to a source file and these fine comments. The - average user otherwise has a hard time knowing which "syscall-like" - functions in libc are plain stubs and which have nontrivial C wrappers. - Some versions of the "plain" stub generation macros are more than a few - instructions long and the untrained eye might not distinguish them from - some compiled code that inexplicably lacks source line information. */ - -#if SYSCALL_CANCELLABLE -# include -#else -# include -#endif - -/* This indirection is needed so that SYMBOL gets macro-expanded. */ -#define syscall_hidden_def(SYMBOL) hidden_def (SYMBOL) - -#define T_PSEUDO(SYMBOL, NAME, N) PSEUDO (SYMBOL, NAME, N) -#define T_PSEUDO_NOERRNO(SYMBOL, NAME, N) PSEUDO_NOERRNO (SYMBOL, NAME, N) -#define T_PSEUDO_ERRVAL(SYMBOL, NAME, N) PSEUDO_ERRVAL (SYMBOL, NAME, N) -#define T_PSEUDO_END(SYMBOL) PSEUDO_END (SYMBOL) -#define T_PSEUDO_END_NOERRNO(SYMBOL) PSEUDO_END_NOERRNO (SYMBOL) -#define T_PSEUDO_END_ERRVAL(SYMBOL) PSEUDO_END_ERRVAL (SYMBOL) - -#if SYSCALL_NOERRNO - -/* This kind of system call stub never returns an error. - We return the return value register to the caller unexamined. */ - -T_PSEUDO_NOERRNO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS) - ret_NOERRNO -T_PSEUDO_END_NOERRNO (SYSCALL_SYMBOL) - -#elif SYSCALL_ERRVAL - -/* This kind of system call stub returns the errno code as its return - value, or zero for success. We may massage the kernel's return value - to meet that ABI, but we never set errno here. */ - -T_PSEUDO_ERRVAL (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS) - ret_ERRVAL -T_PSEUDO_END_ERRVAL (SYSCALL_SYMBOL) - -#else - -/* This is a "normal" system call stub: if there is an error, - it returns -1 and sets errno. */ - -T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS) - ret -T_PSEUDO_END (SYSCALL_SYMBOL) - -#endif - -syscall_hidden_def (SYSCALL_SYMBOL) diff --git a/sysdeps/unix/syscall.S b/sysdeps/unix/syscall.S deleted file mode 100644 index 2a7b9f9939..0000000000 --- a/sysdeps/unix/syscall.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef SYS_syscall -#define SYS_syscall 0 -#endif - -/* This works if the kernel does an "indirect system call" for system call 0, - taking the first argument word off the stack as the system call number. */ - -SYSCALL (syscall, 1) - ret -PSEUDO_END(syscall) diff --git a/sysdeps/unix/syscalls.list b/sysdeps/unix/syscalls.list deleted file mode 100644 index 61e5360b4d..0000000000 --- a/sysdeps/unix/syscalls.list +++ /dev/null @@ -1,100 +0,0 @@ -# File name Caller Syscall name Args Strong name Weak names - -accept - accept Ci:iBN __libc_accept accept -access - access i:si __access access -acct - acct i:S acct -adjtime - adjtime i:pp __adjtime adjtime -bind - bind i:ipi __bind bind -chdir - chdir i:s __chdir chdir -chmod - chmod i:si __chmod chmod -chown - chown i:sii __chown chown -chroot - chroot i:s chroot -close - close Ci:i __libc_close __close close -connect - connect Ci:ipi __libc_connect __connect connect -dup - dup i:i __dup dup -dup2 - dup2 i:ii __dup2 dup2 -dup3 - dup3 i:iii __dup3 dup3 -fchdir - fchdir i:i __fchdir fchdir -fchmod - fchmod i:ii __fchmod fchmod -fchown - fchown i:iii __fchown fchown -fcntl - fcntl Ci:iiF __libc_fcntl __fcntl fcntl -fstatfs - fstatfs i:ip __fstatfs fstatfs -ftruncate - ftruncate i:ii __ftruncate ftruncate -getdomain - getdomainname i:si getdomainname -getgid - getgid Ei: __getgid getgid -getgroups - getgroups i:ip __getgroups getgroups -gethostid - gethostid i: gethostid -gethostname - gethostname i:bn __gethostname gethostname -getitimer - getitimer i:ip __getitimer getitimer -getpeername - getpeername i:ibN __getpeername getpeername -getpid - getpid Ei: __getpid getpid -getpriority - getpriority i:ii __getpriority getpriority -getrlimit - getrlimit i:ip __getrlimit getrlimit -getrusage - getrusage i:ip __getrusage getrusage -getsockname - getsockname i:ibN __getsockname getsockname -getsockopt - getsockopt i:iiiBN getsockopt -gettimeofday - gettimeofday i:pP __gettimeofday gettimeofday -getuid - getuid Ei: __getuid getuid -ioctl - ioctl i:iiI __ioctl ioctl -kill - kill i:ii __kill kill -link - link i:ss __link link -listen - listen i:ii __listen listen -lseek - lseek i:iii __libc_lseek __lseek lseek -madvise - madvise i:pii __madvise madvise -mkdir - mkdir i:si __mkdir mkdir -mmap - mmap b:aniiii __mmap mmap -mprotect - mprotect i:aii __mprotect mprotect -munmap - munmap i:ai __munmap munmap -open - open Ci:siv __libc_open __open open -profil - profil i:piii __profil profil -ptrace - ptrace i:iiii ptrace -read - read Ci:ibn __libc_read __read read -readlink - readlink i:spi __readlink readlink -readv - readv Ci:ipi __readv readv -reboot - reboot i:i reboot -recv - recv Ci:ibni __libc_recv recv -recvfrom - recvfrom Ci:ibniBN __libc_recvfrom __recvfrom recvfrom -recvmsg - recvmsg Ci:ipi __libc_recvmsg __recvmsg recvmsg -rename - rename i:ss rename -rmdir - rmdir i:s __rmdir rmdir -select - select Ci:iPPPP __select __libc_select select -send - send Ci:ibni __libc_send __send send -sendmsg - sendmsg Ci:ipi __libc_sendmsg __sendmsg sendmsg -sendto - sendto Ci:ibnibn __libc_sendto __sendto sendto -setdomain - setdomainname i:si setdomainname -setegid - setegid i:i __setegid setegid -seteuid - seteuid i:i __seteuid seteuid -setgid - setgid i:i __setgid setgid -setgroups - setgroups i:ip setgroups -sethostid - sethostid i:i sethostid -sethostname - sethostname i:pi sethostname -setitimer - setitimer i:ipp __setitimer setitimer -setpgid - setpgrp i:ii __setpgid setpgid -setpriority - setpriority i:iii __setpriority setpriority -setregid - setregid i:ii __setregid setregid -setreuid - setreuid i:ii __setreuid setreuid -setrlimit - setrlimit i:ip __setrlimit setrlimit -setsid - setsid i: __setsid setsid -setsockopt - setsockopt i:iiibn setsockopt __setsockopt -settimeofday - settimeofday i:PP __settimeofday settimeofday -setuid - setuid i:i __setuid setuid -shutdown - shutdown i:ii shutdown -sigaction - sigaction i:ipp __sigaction sigaction -sigsuspend - sigsuspend Ci:p sigsuspend -socket - socket i:iii __socket socket -socketpair - socketpair i:iiif socketpair -sstk - sstk b:i sstk -statfs - statfs i:sp __statfs statfs -swapoff - swapoff i:s swapoff -swapon - swapon i:s swapon -symlink - symlink i:ss __symlink symlink -sync - sync i: sync -syncfs - syncfs i:i syncfs -truncate - truncate i:si __truncate truncate -umask - umask Ei:i __umask umask -uname - uname i:p __uname uname -unlink - unlink i:s __unlink unlink -utimes - utimes i:sp __utimes utimes -vhangup - vhangup i:i vhangup -write - write Ci:ibn __libc_write __write write -writev - writev Ci:ipi __writev writev diff --git a/sysdeps/unix/sysdep.h b/sysdeps/unix/sysdep.h deleted file mode 100644 index c308547dec..0000000000 --- a/sysdeps/unix/sysdep.h +++ /dev/null @@ -1,132 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include -#define HAVE_SYSCALLS - -/* Note that using a `PASTE' macro loses. */ -#define SYSCALL__(name, args) PSEUDO (__##name, name, args) -#define SYSCALL(name, args) PSEUDO (name, name, args) - -#define __SYSCALL_CONCAT_X(a,b) a##b -#define __SYSCALL_CONCAT(a,b) __SYSCALL_CONCAT_X (a, b) - - -#define __INTERNAL_SYSCALL0(name, err) \ - INTERNAL_SYSCALL (name, err, 0) -#define __INTERNAL_SYSCALL1(name, err, a1) \ - INTERNAL_SYSCALL (name, err, 1, a1) -#define __INTERNAL_SYSCALL2(name, err, a1, a2) \ - INTERNAL_SYSCALL (name, err, 2, a1, a2) -#define __INTERNAL_SYSCALL3(name, err, a1, a2, a3) \ - INTERNAL_SYSCALL (name, err, 3, a1, a2, a3) -#define __INTERNAL_SYSCALL4(name, err, a1, a2, a3, a4) \ - INTERNAL_SYSCALL (name, err, 4, a1, a2, a3, a4) -#define __INTERNAL_SYSCALL5(name, err, a1, a2, a3, a4, a5) \ - INTERNAL_SYSCALL (name, err, 5, a1, a2, a3, a4, a5) -#define __INTERNAL_SYSCALL6(name, err, a1, a2, a3, a4, a5, a6) \ - INTERNAL_SYSCALL (name, err, 6, a1, a2, a3, a4, a5, a6) -#define __INTERNAL_SYSCALL7(name, err, a1, a2, a3, a4, a5, a6, a7) \ - INTERNAL_SYSCALL (name, err, 7, a1, a2, a3, a4, a5, a6, a7) - -#define __INTERNAL_SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,o,...) o -#define __INTERNAL_SYSCALL_NARGS(...) \ - __INTERNAL_SYSCALL_NARGS_X (__VA_ARGS__,7,6,5,4,3,2,1,0,) -#define __INTERNAL_SYSCALL_DISP(b,...) \ - __SYSCALL_CONCAT (b,__INTERNAL_SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__) - -/* Issue a syscall defined by syscall number plus any other argument required. - It is similar to INTERNAL_SYSCALL macro, but without the need to pass the - expected argument number as second parameter. */ -#define INTERNAL_SYSCALL_CALL(...) \ - __INTERNAL_SYSCALL_DISP (__INTERNAL_SYSCALL, __VA_ARGS__) - -#define __INLINE_SYSCALL0(name) \ - INLINE_SYSCALL (name, 0) -#define __INLINE_SYSCALL1(name, a1) \ - INLINE_SYSCALL (name, 1, a1) -#define __INLINE_SYSCALL2(name, a1, a2) \ - INLINE_SYSCALL (name, 2, a1, a2) -#define __INLINE_SYSCALL3(name, a1, a2, a3) \ - INLINE_SYSCALL (name, 3, a1, a2, a3) -#define __INLINE_SYSCALL4(name, a1, a2, a3, a4) \ - INLINE_SYSCALL (name, 4, a1, a2, a3, a4) -#define __INLINE_SYSCALL5(name, a1, a2, a3, a4, a5) \ - INLINE_SYSCALL (name, 5, a1, a2, a3, a4, a5) -#define __INLINE_SYSCALL6(name, a1, a2, a3, a4, a5, a6) \ - INLINE_SYSCALL (name, 6, a1, a2, a3, a4, a5, a6) -#define __INLINE_SYSCALL7(name, a1, a2, a3, a4, a5, a6, a7) \ - INLINE_SYSCALL (name, 7, a1, a2, a3, a4, a5, a6, a7) - -#define __INLINE_SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n -#define __INLINE_SYSCALL_NARGS(...) \ - __INLINE_SYSCALL_NARGS_X (__VA_ARGS__,7,6,5,4,3,2,1,0,) -#define __INLINE_SYSCALL_DISP(b,...) \ - __SYSCALL_CONCAT (b,__INLINE_SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__) - -/* Issue a syscall defined by syscall number plus any other argument - required. Any error will be handled using arch defined macros and errno - will be set accordingly. - It is similar to INLINE_SYSCALL macro, but without the need to pass the - expected argument number as second parameter. */ -#define INLINE_SYSCALL_CALL(...) \ - __INLINE_SYSCALL_DISP (__INLINE_SYSCALL, __VA_ARGS__) - -#define SYSCALL_CANCEL(...) \ - ({ \ - long int sc_ret; \ - if (SINGLE_THREAD_P) \ - sc_ret = INLINE_SYSCALL_CALL (__VA_ARGS__); \ - else \ - { \ - int sc_cancel_oldtype = LIBC_CANCEL_ASYNC (); \ - sc_ret = INLINE_SYSCALL_CALL (__VA_ARGS__); \ - LIBC_CANCEL_RESET (sc_cancel_oldtype); \ - } \ - sc_ret; \ - }) - -/* Machine-dependent sysdep.h files are expected to define the macro - PSEUDO (function_name, syscall_name) to emit assembly code to define the - C-callable function FUNCTION_NAME to do system call SYSCALL_NAME. - r0 and r1 are the system call outputs. MOVE(x, y) should be defined as - an instruction such that "MOVE(r1, r0)" works. ret should be defined - as the return instruction. */ - -#ifndef SYS_ify -#define SYS_ify(syscall_name) SYS_##syscall_name -#endif - -/* Terminate a system call named SYM. This is used on some platforms - to generate correct debugging information. */ -#ifndef PSEUDO_END -#define PSEUDO_END(sym) -#endif -#ifndef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(sym) PSEUDO_END(sym) -#endif -#ifndef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(sym) PSEUDO_END(sym) -#endif - -/* Wrappers around system calls should normally inline the system call code. - But sometimes it is not possible or implemented and we use this code. */ -#ifndef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) __syscall_##name (args) -#endif diff --git a/sysdeps/unix/sysv/linux/Implies b/sysdeps/unix/sysv/linux/Implies deleted file mode 100644 index a579e634ae..0000000000 --- a/sysdeps/unix/sysv/linux/Implies +++ /dev/null @@ -1,9 +0,0 @@ -# All Linux builds use NPTL. -nptl - -# The gnu subdirectory exists for things common to both Linux-based and -# Hurd-based GNU systems. -gnu - -# Linux has network support in the kernel. -unix/inet diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile deleted file mode 100644 index 99b3f9d346..0000000000 --- a/sysdeps/unix/sysv/linux/Makefile +++ /dev/null @@ -1,212 +0,0 @@ -ifeq ($(subdir),csu) -sysdep_routines += errno-loc -endif - -ifeq ($(subdir),assert) -CFLAGS-assert.c += -DFATAL_PREPARE_INCLUDE='' -CFLAGS-assert-perr.c += -DFATAL_PREPARE_INCLUDE='' -endif - -ifeq ($(subdir),malloc) -CFLAGS-malloc.c += -DMORECORE_CLEARS=2 -endif - -ifeq ($(subdir),misc) -include $(firstword $(wildcard $(sysdirs:=/sysctl.mk))) - -sysdep_routines += clone umount umount2 readahead \ - setfsuid setfsgid epoll_pwait signalfd \ - eventfd eventfd_read eventfd_write prlimit \ - personality epoll_wait tee vmsplice splice \ - open_by_handle_at - -CFLAGS-gethostid.c = -fexceptions -CFLAGS-tee.c = -fexceptions -fasynchronous-unwind-tables -CFLAGS-vmsplice.c = -fexceptions -fasynchronous-unwind-tables -CFLAGS-splice.c = -fexceptions -fasynchronous-unwind-tables -CFLAGS-open_by_handle_at.c = -fexceptions -fasynchronous-unwind-tables -CFLAGS-tst-writev.c += "-DARTIFICIAL_LIMIT=(0x80000000-sysconf(_SC_PAGESIZE))" - -# Note that bits/mman-linux.h is listed here though the file lives in the -# top-level bits/ subdirectory instead of here in sysdeps/.../linux/bits/. -# That is just so that other (non-Linux) configurations for whom the -# bits/mman-linux.h definitions work well do not have to duplicate the -# contents of the file. The file must still be listed in sysdep_headers -# here and in any non-Linux configuration that uses it; other -# configurations will not install the file. -sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \ - sys/klog.h \ - sys/user.h sys/prctl.h \ - sys/kd.h sys/soundcard.h sys/vt.h \ - sys/quota.h sys/fsuid.h \ - scsi/sg.h scsi/scsi.h scsi/scsi_ioctl.h sys/pci.h \ - sys/raw.h sys/personality.h sys/epoll.h \ - bits/a.out.h sys/inotify.h sys/signalfd.h sys/eventfd.h \ - sys/timerfd.h sys/fanotify.h bits/eventfd.h bits/inotify.h \ - bits/signalfd.h bits/timerfd.h bits/epoll.h \ - bits/socket_type.h bits/syscall.h bits/sysctl.h \ - bits/mman-linux.h \ - bits/siginfo-arch.h bits/siginfo-consts-arch.h - -tests += tst-clone tst-clone2 tst-fanotify tst-personality tst-quota \ - tst-sync_file_range test-errno-linux - -# Generate the list of SYS_* macros for the system calls (__NR_* macros). - -# If there is more than one syscall list for different architecture -# variants, the CPU/Makefile defines abi-variants to be a list of names -# for those variants (e.g. 32 64), and, for each variant, defines -# abi-$(variant)-options to be compiler options to cause -# to define the desired list of syscalls and abi-$(variant)-condition to -# be the condition for those options to use in a C #if condition. -# abi-includes may be defined to a list of headers to include -# in the generated header, if the default does not suffice. -# -# The generated header is compiled with `-ffreestanding' to avoid any -# circular dependencies against the installed implementation headers. -# Such a dependency would require the implementation header to be -# installed before the generated header could be built (See bug 15711). -# In current practice the generated header dependencies do not include -# any of the implementation headers removed by the use of `-ffreestanding'. - -$(objpfx)bits/syscall%h $(objpfx)bits/syscall%d: ../sysdeps/unix/sysv/linux/sys/syscall.h - $(make-target-directory) - { \ - echo '/* Generated at libc build time from kernel syscall list. */';\ - echo ''; \ - echo '#ifndef _SYSCALL_H'; \ - echo '# error "Never use directly; include instead."'; \ - echo '#endif'; \ - echo ''; \ - $(foreach h,$(abi-includes), echo '#include <$(h)>';) \ - echo ''; \ - $(if $(abi-variants), \ - $(foreach v,$(abi-variants),\ - $(CC) -ffreestanding -E -MD -MP -MF $(@:.h=.d)-t$(v) -MT '$(@:.d=.h) $(@:.h=.d)' \ - -x c $(sysincludes) $< $(abi-$(v)-options) \ - -D_LIBC -dM | \ - sed -n 's@^#define __NR_\([^ ]*\) .*$$@#define SYS_\1 __NR_\1@p' | \ - LC_ALL=C sort > $(@:.d=.h).new$(v); \ - $(if $(abi-$(v)-condition),\ - echo '#if $(abi-$(v)-condition)';) \ - cat $(@:.d=.h).new$(v); \ - $(if $(abi-$(v)-condition),echo '#endif';) \ - rm -f $(@:.d=.h).new$(v); \ - ), \ - $(CC) -ffreestanding -E -MD -MP -MF $(@:.h=.d)-t$(v) -MT '$(@:.d=.h) $(@:.h=.d)' \ - -x c $(sysincludes) $< \ - -D_LIBC -dM | \ - sed -n 's@^#define __NR_\([^ ]*\) .*$$@#define SYS_\1 __NR_\1@p' | \ - LC_ALL=C sort;) \ - } > $(@:.d=.h).new - mv -f $(@:.d=.h).new $(@:.d=.h) -ifdef abi-variants -ifneq (,$(objpfx)) - sed $(sed-remove-objpfx) \ - $(foreach v,$(abi-variants),$(@:.h=.d)-t$(v)) > $(@:.h=.d)-t3 -else - cat $(foreach v,$(abi-variants),$(@:.h=.d)-t$(v)) \ - > $(@:.h=.d)-t3 -endif - rm -f $(foreach v,$(abi-variants),$(@:.h=.d)-t$(v)) - mv -f $(@:.h=.d)-t3 $(@:.h=.d) -else - mv -f $(@:.h=.d)-t $(@:.h=.d) -endif - -ifndef no_deps -# Get the generated list of dependencies (probably /usr/include/asm/unistd.h). --include $(objpfx)bits/syscall.d -endif -generated += bits/syscall.h bits/syscall.d -endif - -ifeq ($(subdir),time) -sysdep_headers += sys/timex.h bits/timex.h - -sysdep_routines += ntp_gettime ntp_gettimex -endif - -ifeq ($(subdir),socket) -sysdep_headers += net/if_ppp.h net/ppp-comp.h \ - net/ppp_defs.h net/if_arp.h net/route.h net/ethernet.h \ - net/if_slip.h net/if_packet.h net/if_shaper.h -sysdep_routines += cmsg_nxthdr -CFLAGS-recvmmsg.c = -fexceptions -fasynchronous-unwind-tables -CFLAGS-sendmmsg.c = -fexceptions -fasynchronous-unwind-tables -endif - -ifeq ($(subdir),sunrpc) -sysdep_headers += nfs/nfs.h -endif - -ifeq ($(subdir),termios) -sysdep_headers += termio.h -endif - -ifeq ($(subdir),posix) -sysdep_headers += bits/initspin.h - -sysdep_routines += sched_getcpu - -tests += tst-affinity tst-affinity-pid - -CFLAGS-fork.c = $(libio-mtsafe) -CFLAGS-getpid.o = -fomit-frame-pointer -CFLAGS-getpid.os = -fomit-frame-pointer -endif - -ifeq ($(subdir),inet) -sysdep_headers += netinet/if_fddi.h netinet/if_tr.h \ - netipx/ipx.h netash/ash.h netax25/ax25.h netatalk/at.h \ - netrom/netrom.h netpacket/packet.h netrose/rose.h \ - neteconet/ec.h netiucv/iucv.h -sysdep_routines += netlink_assert_response -endif - -# Don't compile the ctype glue code, since there is no old non-GNU C library. -inhibit-glue = yes - -ifeq ($(subdir),dirent) -sysdep_routines += getdirentries getdirentries64 -endif - -ifeq ($(subdir),nis) -CFLAGS-ypclnt.c = -DUSE_BINDINGDIR=1 -endif - -ifeq ($(subdir),io) -sysdep_routines += xstatconv internal_statvfs internal_statvfs64 \ - sync_file_range fallocate fallocate64 -sysdep_headers += bits/fcntl-linux.h - -tests += tst-fallocate tst-fallocate64 -endif - -ifeq ($(subdir),elf) -sysdep-rtld-routines += dl-brk dl-sbrk dl-getcwd dl-openat64 dl-opendir \ - dl-fxstatat64 - -libof-lddlibc4 = lddlibc4 - -others += pldd -install-bin += pldd -$(objpfx)pldd: $(objpfx)xmalloc.o -endif - -ifeq ($(subdir),rt) -CFLAGS-mq_send.c += -fexceptions -CFLAGS-mq_receive.c += -fexceptions -endif - -ifeq ($(subdir),nscd) -sysdep-CFLAGS += -DHAVE_EPOLL -DHAVE_SENDFILE -DHAVE_INOTIFY -DHAVE_NETLINK -CFLAGS-gai.c += -DNEED_NETLINK -endif - -ifeq ($(subdir),nptl) -tests += tst-align-clone tst-getpid1 \ - tst-thread-affinity-pthread tst-thread-affinity-pthread2 \ - tst-thread-affinity-sched -tests-internal += tst-setgetname -endif diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions deleted file mode 100644 index 202ffccc29..0000000000 --- a/sysdeps/unix/sysv/linux/Versions +++ /dev/null @@ -1,175 +0,0 @@ -libc { - # The comment lines with "#errlist-compat" are magic; see errlist-compat.awk. - # When you get an error from errlist-compat.awk, you need to add a new - # version here. Don't do this blindly, since this means changing the ABI - # for all GNU/Linux configurations. - - GLIBC_2.0 { - # functions used in inline functions or macros - __cmsg_nxthdr; - - # functions used in other libraries - __clone; - - # helper functions - __errno_location; - - # b* - bdflush; - - # c* - clone; create_module; - - # d* - delete_module; - - # g* - get_kernel_syms; getresgid; getresuid; - - # i* - init_module; - - # k* - klogctl; - - # l* - llseek; - - # m* - mremap; - - # n* - nfsservctl; - - # p* - personality; prctl; - - # q* - query_module; quotactl; - - # s* - setfsgid; setfsuid; - - # s* - setresgid; setresuid; swapoff; swapon; sysctl; sysinfo; - - # u* - umount; uselib; - - #errlist-compat 123 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.1 { - # functions used in inline functions or macros - __libc_sa_len; - - # Since we have new signals this structure changed. - _sys_siglist; sys_siglist; sys_sigabbrev; - - # New errlist. - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - - # chown interface change. - chown; - - # Change in pthread_attr_t. - pthread_attr_init; - - # c* - capget; capset; - - # n* - ntp_adjtime; ntp_gettime; - - # u* - umount2; - - #errlist-compat 125 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.2 { - # needed in other libraries. - __endmntent; __getmntent_r; __setmntent; __statfs; __sysctl; - - # ipc ctl interface change. - semctl; shmctl; msgctl; - } - GLIBC_2.2.1 { - # p* - pivot_root; - } - GLIBC_2.3 { - # r* - readahead; - - #errlist-compat 126 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.3.2 { - # New kernel interfaces. - epoll_create; epoll_ctl; epoll_wait; - } - GLIBC_2.3.3 { - gnu_dev_major; gnu_dev_minor; gnu_dev_makedev; - } - GLIBC_2.3.4 { - sched_getaffinity; sched_setaffinity; - } - GLIBC_2.4 { - inotify_init; inotify_add_watch; inotify_rm_watch; - - unshare; - - #errlist-compat 132 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.5 { - splice; tee; vmsplice; - } - GLIBC_2.6 { - epoll_pwait; sync_file_range; sched_getcpu; - } - GLIBC_2.7 { - eventfd; eventfd_read; eventfd_write; signalfd; - } - GLIBC_2.8 { - timerfd_create; timerfd_settime; timerfd_gettime; - } - GLIBC_2.9 { - epoll_create1; inotify_init1; - } - GLIBC_2.10 { - fallocate; - } - GLIBC_2.12 { - #errlist-compat 135 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - - ntp_gettimex; - - recvmmsg; - } - GLIBC_2.13 { - prlimit; prlimit64; - - fanotify_init; fanotify_mark; - } - GLIBC_2.14 { - clock_adjtime; - - name_to_handle_at; open_by_handle_at; - - setns; - - sendmmsg; - } - GLIBC_2.15 { - process_vm_readv; process_vm_writev; - } - GLIBC_PRIVATE { - # functions used in other libraries - __syscall_rt_sigqueueinfo; - # functions used by nscd - __netlink_assert_response; - } -} diff --git a/sysdeps/unix/sysv/linux/_G_config.h b/sysdeps/unix/sysv/linux/_G_config.h deleted file mode 100644 index 3bc6cfd595..0000000000 --- a/sysdeps/unix/sysv/linux/_G_config.h +++ /dev/null @@ -1,59 +0,0 @@ -/* This file is needed by libio to define various configuration parameters. - These are always the same in the GNU C library. */ - -#ifndef _G_config_h -#define _G_config_h 1 - -/* Define types for libio in terms of the standard internal type names. */ - -#include -#define __need_size_t -#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T -# define __need_wchar_t -#endif -#define __need_NULL -#include - -#include -#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T -# include -#endif - -typedef struct -{ - __off_t __pos; - __mbstate_t __state; -} _G_fpos_t; -typedef struct -{ - __off64_t __pos; - __mbstate_t __state; -} _G_fpos64_t; -#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T -# include -typedef union -{ - struct __gconv_info __cd; - struct - { - struct __gconv_info __cd; - struct __gconv_step_data __data; - } __combined; -} _G_iconv_t; -#endif - - -/* These library features are always available in the GNU C library. */ -#define _G_va_list __gnuc_va_list - -#define _G_HAVE_MMAP 1 -#define _G_HAVE_MREMAP 1 - -#define _G_IO_IO_FILE_VERSION 0x20001 - -/* This is defined by if `st_blksize' exists. */ -#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE) - -#define _G_BUFSIZ 8192 - -#endif /* _G_config.h */ diff --git a/sysdeps/unix/sysv/linux/_exit.c b/sysdeps/unix/sysv/linux/_exit.c deleted file mode 100644 index 0020ddb7e5..0000000000 --- a/sysdeps/unix/sysv/linux/_exit.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - -void -_exit (int status) -{ - while (1) - { -#ifdef __NR_exit_group - INLINE_SYSCALL (exit_group, 1, status); -#endif - INLINE_SYSCALL (exit, 1, status); - -#ifdef ABORT_INSTRUCTION - ABORT_INSTRUCTION; -#endif - } -} -libc_hidden_def (_exit) -rtld_hidden_def (_exit) -weak_alias (_exit, _Exit) diff --git a/sysdeps/unix/sysv/linux/a.out.h b/sysdeps/unix/sysv/linux/a.out.h deleted file mode 100644 index e3f4bdd08f..0000000000 --- a/sysdeps/unix/sysv/linux/a.out.h +++ /dev/null @@ -1,138 +0,0 @@ -#ifndef __A_OUT_GNU_H__ -#define __A_OUT_GNU_H__ - -#include - -#define __GNU_EXEC_MACROS__ - -struct exec -{ - unsigned long a_info; /* Use macros N_MAGIC, etc for access. */ - unsigned int a_text; /* Length of text, in bytes. */ - unsigned int a_data; /* Length of data, in bytes. */ - unsigned int a_bss; /* Length of uninitialized data area for file, in bytes. */ - unsigned int a_syms; /* Length of symbol table data in file, in bytes. */ - unsigned int a_entry; /* Start address. */ - unsigned int a_trsize;/* Length of relocation info for text, in bytes. */ - unsigned int a_drsize;/* Length of relocation info for data, in bytes. */ -}; - -enum machine_type -{ - M_OLDSUN2 = 0, - M_68010 = 1, - M_68020 = 2, - M_SPARC = 3, - M_386 = 100, - M_MIPS1 = 151, - M_MIPS2 = 152 -}; - -#define N_MAGIC(exec) ((exec).a_info & 0xffff) -#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff)) -#define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff) -#define N_SET_INFO(exec, magic, type, flags) \ - ((exec).a_info = ((magic) & 0xffff) \ - | (((int)(type) & 0xff) << 16) \ - | (((flags) & 0xff) << 24)) -#define N_SET_MAGIC(exec, magic) \ - ((exec).a_info = ((exec).a_info & 0xffff0000) | ((magic) & 0xffff)) -#define N_SET_MACHTYPE(exec, machtype) \ - ((exec).a_info = \ - ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16)) -#define N_SET_FLAGS(exec, flags) \ - ((exec).a_info = \ - ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24)) - -/* Code indicating object file or impure executable. */ -#define OMAGIC 0407 -/* Code indicating pure executable. */ -#define NMAGIC 0410 -/* Code indicating demand-paged executable. */ -#define ZMAGIC 0413 -/* This indicates a demand-paged executable with the header in the text. - The first page is unmapped to help trap NULL pointer references. */ -#define QMAGIC 0314 -/* Code indicating core file. */ -#define CMAGIC 0421 - -#define N_TRSIZE(a) ((a).a_trsize) -#define N_DRSIZE(a) ((a).a_drsize) -#define N_SYMSIZE(a) ((a).a_syms) -#define N_BADMAG(x) \ - (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \ - && N_MAGIC(x) != ZMAGIC && N_MAGIC(x) != QMAGIC) -#define _N_HDROFF(x) (1024 - sizeof (struct exec)) -#define N_TXTOFF(x) \ - (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : \ - (N_MAGIC(x) == QMAGIC ? 0 : sizeof (struct exec))) -#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text) -#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data) -#define N_DRELOFF(x) (N_TRELOFF(x) + N_TRSIZE(x)) -#define N_SYMOFF(x) (N_DRELOFF(x) + N_DRSIZE(x)) -#define N_STROFF(x) (N_SYMOFF(x) + N_SYMSIZE(x)) - -/* Address of text segment in memory after it is loaded. */ -#define N_TXTADDR(x) (N_MAGIC(x) == QMAGIC ? 4096 : 0) - -/* Address of data segment in memory after it is loaded. */ -#define SEGMENT_SIZE 1024 - -#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1)) -#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text) - -#define N_DATADDR(x) \ - (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \ - : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x)))) -#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data) - -#if !defined (N_NLIST_DECLARED) -struct nlist -{ - union - { - char *n_name; - struct nlist *n_next; - long n_strx; - } n_un; - unsigned char n_type; - char n_other; - short n_desc; - unsigned long n_value; -}; -#endif /* no N_NLIST_DECLARED. */ - -#define N_UNDF 0 -#define N_ABS 2 -#define N_TEXT 4 -#define N_DATA 6 -#define N_BSS 8 -#define N_FN 15 -#define N_EXT 1 -#define N_TYPE 036 -#define N_STAB 0340 -#define N_INDR 0xa -#define N_SETA 0x14 /* Absolute set element symbol. */ -#define N_SETT 0x16 /* Text set element symbol. */ -#define N_SETD 0x18 /* Data set element symbol. */ -#define N_SETB 0x1A /* Bss set element symbol. */ -#define N_SETV 0x1C /* Pointer to set vector in data area. */ - -#if !defined (N_RELOCATION_INFO_DECLARED) -/* This structure describes a single relocation to be performed. - The text-relocation section of the file is a vector of these structures, - all of which apply to the text section. - Likewise, the data-relocation section applies to the data section. */ - -struct relocation_info -{ - int r_address; - unsigned int r_symbolnum:24; - unsigned int r_pcrel:1; - unsigned int r_length:2; - unsigned int r_extern:1; - unsigned int r_pad:4; -}; -#endif /* no N_RELOCATION_INFO_DECLARED. */ - -#endif /* __A_OUT_GNU_H__ */ diff --git a/sysdeps/unix/sysv/linux/aarch64/Implies b/sysdeps/unix/sysv/linux/aarch64/Implies deleted file mode 100644 index 4409e19b92..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/Implies +++ /dev/null @@ -1,3 +0,0 @@ -aarch64/nptl -unix/sysv/linux/generic -unix/sysv/linux/wordsize-64 diff --git a/sysdeps/unix/sysv/linux/aarch64/Makefile b/sysdeps/unix/sysv/linux/aarch64/Makefile deleted file mode 100644 index 6b4e620896..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -ifeq ($(subdir),csu) -sysdep_routines += __read_tp libc-__read_tp -static-only-routines += __read_tp -shared-only-routines += libc-__read_tp -endif - -ifeq ($(subdir),elf) -sysdep_routines += dl-vdso -sysdep-rtld-routines += __read_tp -ifeq ($(build-shared),yes) -# This is needed for DSO loading from static binaries. -sysdep-dl-routines += dl-static -endif -endif - -ifeq ($(subdir),misc) -sysdep_headers += sys/elf.h -endif - -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext_i.sym -endif - -abi-variants := lp64 -abi-variants += lp64_be - -ifeq (,$(filter $(default-abi),$(abi-variants))) -Unknown ABI, must be one of $(abi-variants) -endif - -abi-lp64-options := -U__AARCH64EB__ -abi-lp64-condition := !defined __AARCH64EB__ - -abi-lp64_be-options := -D__AARCH64EB__ -abi-lp64_be-condition := defined __AARCH64EB__ diff --git a/sysdeps/unix/sysv/linux/aarch64/Versions b/sysdeps/unix/sysv/linux/aarch64/Versions deleted file mode 100644 index 9bd87fe2d0..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/Versions +++ /dev/null @@ -1,12 +0,0 @@ -ld { - GLIBC_PRIVATE { - # used for loading by static libraries - _dl_var_init; - } -} -libc { - GLIBC_PRIVATE { - __vdso_clock_gettime; - __vdso_clock_getres; - } -} diff --git a/sysdeps/unix/sysv/linux/aarch64/__read_tp.S b/sysdeps/unix/sysv/linux/aarch64/__read_tp.S deleted file mode 100644 index d355878b70..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/__read_tp.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .hidden __read_tp -ENTRY (__read_tp) - mrs x0, tpidr_el0 - RET -END (__read_tp) diff --git a/sysdeps/unix/sysv/linux/aarch64/arch-fork.h b/sysdeps/unix/sysv/linux/aarch64/arch-fork.h deleted file mode 100644 index 7b1f9bdd1f..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/arch-fork.h +++ /dev/null @@ -1,28 +0,0 @@ -/* ARCH_FORK definition for Linux fork implementation. AArch64 version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 5, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ - NULL, NULL, NULL, &THREAD_SELF->tid) diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h b/sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h deleted file mode 100644 index 6ba241c02c..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h +++ /dev/null @@ -1,61 +0,0 @@ -/* O_*, F_*, FD_* bit values for the AArch64 Linux ABI. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -#define __O_DIRECTORY 040000 -#define __O_NOFOLLOW 0100000 -#define __O_DIRECT 0200000 - -#ifdef __ILP32__ -# define __O_LARGEFILE 0400000 -#else -# define __O_LARGEFILE 0 -#endif - -#ifdef __LP64__ -# define F_GETLK64 5 -# define F_SETLK64 6 -# define F_SETLKW64 7 -#endif - -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/hwcap.h b/sysdeps/unix/sysv/linux/aarch64/bits/hwcap.h deleted file mode 100644 index 117852da1c..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/bits/hwcap.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Defines for bits in AT_HWCAP. AArch64 Linux version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined (_SYS_AUXV_H) -# error "Never include directly; use instead." -#endif - -/* The following must match the kernel's . */ -#define HWCAP_FP (1 << 0) -#define HWCAP_ASIMD (1 << 1) -#define HWCAP_EVTSTRM (1 << 2) -#define HWCAP_AES (1 << 3) -#define HWCAP_PMULL (1 << 4) -#define HWCAP_SHA1 (1 << 5) -#define HWCAP_SHA2 (1 << 6) -#define HWCAP_CRC32 (1 << 7) -#define HWCAP_ATOMICS (1 << 8) -#define HWCAP_FPHP (1 << 9) -#define HWCAP_ASIMDHP (1 << 10) -#define HWCAP_CPUID (1 << 11) -#define HWCAP_ASIMDRDM (1 << 12) diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/ipc.h b/sysdeps/unix/sysv/linux/aarch64/bits/ipc.h deleted file mode 100644 index cd1f06e370..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/bits/ipc.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IPC_H -# error "Never use directly; include instead." -#endif - -#include - -/* Mode bits for `msgget', `semget', and `shmget'. */ -#define IPC_CREAT 01000 /* Create key if key does not exist. */ -#define IPC_EXCL 02000 /* Fail if key exists. */ -#define IPC_NOWAIT 04000 /* Return error on wait. */ - -/* Control commands for `msgctl', `semctl', and `shmctl'. */ -#define IPC_RMID 0 /* Remove identifier. */ -#define IPC_SET 1 /* Set `ipc_perm' options. */ -#define IPC_STAT 2 /* Get `ipc_perm' options. */ -#ifdef __USE_GNU -# define IPC_INFO 3 /* See ipcs. */ -#endif - -/* Special key values. */ -#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ - - -/* Data structure used to pass permission information to IPC operations. */ -struct ipc_perm - { - __key_t __key; /* Key. */ - __uid_t uid; /* Owner's user ID. */ - __gid_t gid; /* Owner's group ID. */ - __uid_t cuid; /* Creator's user ID. */ - __gid_t cgid; /* Creator's group ID. */ - unsigned int mode; /* Read/write permission. */ - unsigned short int __seq; /* Sequence number. */ - unsigned short int __pad1; - __syscall_ulong_t __glibc_reserved1; - __syscall_ulong_t __glibc_reserved2; - }; diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/local_lim.h b/sysdeps/unix/sysv/linux/aarch64/bits/local_lim.h deleted file mode 100644 index 35a0326211..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/bits/local_lim.h +++ /dev/null @@ -1,101 +0,0 @@ -/* Minimum guaranteed maximum values for system limits. Linux version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* The kernel header pollutes the namespace with the NR_OPEN symbol - and defines LINK_MAX although filesystems have different maxima. A - similar thing is true for OPEN_MAX: the limit can be changed at - runtime and therefore the macro must not be defined. Remove this - after including the header if necessary. */ -#ifndef NR_OPEN -# define __undef_NR_OPEN -#endif -#ifndef LINK_MAX -# define __undef_LINK_MAX -#endif -#ifndef OPEN_MAX -# define __undef_OPEN_MAX -#endif -#ifndef ARG_MAX -# define __undef_ARG_MAX -#endif - -/* The kernel sources contain a file with all the needed information. */ -#include - -/* Have to remove NR_OPEN? */ -#ifdef __undef_NR_OPEN -# undef NR_OPEN -# undef __undef_NR_OPEN -#endif -/* Have to remove LINK_MAX? */ -#ifdef __undef_LINK_MAX -# undef LINK_MAX -# undef __undef_LINK_MAX -#endif -/* Have to remove OPEN_MAX? */ -#ifdef __undef_OPEN_MAX -# undef OPEN_MAX -# undef __undef_OPEN_MAX -#endif -/* Have to remove ARG_MAX? */ -#ifdef __undef_ARG_MAX -# undef ARG_MAX -# undef __undef_ARG_MAX -#endif - -/* The number of data keys per process. */ -#define _POSIX_THREAD_KEYS_MAX 128 -/* This is the value this implementation supports. */ -#define PTHREAD_KEYS_MAX 1024 - -/* Controlling the iterations of destructors for thread-specific data. */ -#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 -/* Number of iterations this implementation does. */ -#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS - -/* The number of threads per process. */ -#define _POSIX_THREAD_THREADS_MAX 64 -/* We have no predefined limit on the number of threads. */ -#undef PTHREAD_THREADS_MAX - -/* Maximum amount by which a process can descrease its asynchronous I/O - priority level. */ -#define AIO_PRIO_DELTA_MAX 20 - -/* Minimum size for a thread. At least two pages for systems with 64k - pages. */ -#define PTHREAD_STACK_MIN 131072 - -/* Maximum number of timer expiration overruns. */ -#define DELAYTIMER_MAX 2147483647 - -/* Maximum tty name length. */ -#define TTY_NAME_MAX 32 - -/* Maximum login name length. This is arbitrary. */ -#define LOGIN_NAME_MAX 256 - -/* Maximum host name length. */ -#define HOST_NAME_MAX 64 - -/* Maximum message queue priority level. */ -#define MQ_PRIO_MAX 32768 - -/* Maximum value the semaphore can have. */ -#define SEM_VALUE_MAX (2147483647) diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/mman.h b/sysdeps/unix/sysv/linux/aarch64/bits/mman.h deleted file mode 100644 index 7fc3ef3e86..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/bits/mman.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/AArch64 version. - - Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */ -# define MAP_DENYWRITE 0x00800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x02000 /* Lock the mapping. */ -# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */ -# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ -# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ -#endif - - - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/sigstack.h b/sysdeps/unix/sysv/linux/aarch64/bits/sigstack.h deleted file mode 100644 index 434b24e926..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/bits/sigstack.h +++ /dev/null @@ -1,32 +0,0 @@ -/* sigstack, sigaltstack definitions. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SIGSTACK_H -#define _BITS_SIGSTACK_H 1 - -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H -# error "Never include this file directly. Use instead" -#endif - -/* Minimum stack size for a signal handler. */ -#define MINSIGSTKSZ 5120 - -/* System default stack size. */ -#define SIGSTKSZ 16384 - -#endif /* bits/sigstack.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/c++-types.data b/sysdeps/unix/sysv/linux/aarch64/c++-types.data deleted file mode 100644 index ac925ccb36..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:l -blkcnt_t:l -blksize_t:i -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:m -fd_mask:l -fsblkcnt64_t:m -fsblkcnt_t:m -fsfilcnt64_t:m -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:m -ino_t:m -int16_t:s -int32_t:i -int64_t:l -int8_t:a -intptr_t:l -key_t:i -loff_t:l -mode_t:j -nlink_t:j -off64_t:l -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:l -register_t:l -rlim64_t:m -rlim_t:m -sigset_t:10__sigset_t -size_t:m -socklen_t:j -ssize_t:l -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:m -u_int8_t:h -ulong:m -u_long:m -u_quad_t:m -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/aarch64/clone.S b/sysdeps/unix/sysv/linux/aarch64/clone.S deleted file mode 100644 index 259ec073c5..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/clone.S +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#define _ERRNO_H 1 -#include - -#define CLONE_VM_BIT 8 -#define CLONE_VM (1 << CLONE_VM_BIT) - -#define CLONE_THREAD_BIT 16 -#define CLONE_THREAD (1 << CLONE_THREAD_BIT) - -/* int clone(int (*fn)(void *arg), x0 - void *child_stack, x1 - int flags, x2 - void *arg, x3 - pid_t *ptid, x4 - struct user_desc *tls, x5 - pid_t *ctid); x6 - */ - .text -ENTRY(__clone) - DELOUSE (0) - DELOUSE (1) - DELOUSE (2) - DELOUSE (3) - DELOUSE (4) - DELOUSE (5) - DELOUSE (6) - /* Save args for the child. */ - mov x10, x0 - mov x11, x2 - mov x12, x3 - - /* Sanity check args. */ - mov x0, #-EINVAL - cbz x10, .Lsyscall_error - cbz x1, .Lsyscall_error - - /* Do the system call. */ - /* X0:flags, x1:newsp, x2:parenttidptr, x3:newtls, x4:childtid. */ - mov x0, x2 /* flags */ - /* New sp is already in x1. */ - mov x2, x4 /* ptid */ - mov x3, x5 /* tls */ - mov x4, x6 /* ctid */ - mov x8, #SYS_ify(clone) - svc 0x0 - - cmp x0, #0 - beq thread_start - blt .Lsyscall_error - RET -PSEUDO_END (__clone) - - .align 4 - .type thread_start, %function -thread_start: - cfi_startproc - cfi_undefined (x30) - mov x29, 0 - - /* Pick the function arg and execute. */ - mov x0, x12 - blr x10 - - /* We are done, pass the return value through x0. */ - b HIDDEN_JUMPTARGET(_exit) - cfi_endproc - .size thread_start, .-thread_start - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/aarch64/configure b/sysdeps/unix/sysv/linux/aarch64/configure deleted file mode 100644 index f48472c5b6..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/configure +++ /dev/null @@ -1,17 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/aarch64. - -arch_minimum_kernel=3.7.0 - -test -n "$libc_cv_slibdir" || -case "$prefix" in -/usr | /usr/) - libc_cv_slibdir=/lib64 - libc_cv_rtlddir=/lib - if test "$libdir" = '${exec_prefix}/lib'; then - libdir='${exec_prefix}/lib64'; - # Locale data can be shared between 32-bit and 64-bit libraries. - libc_cv_complocaledir='${exec_prefix}/lib/locale' - fi - ;; -esac diff --git a/sysdeps/unix/sysv/linux/aarch64/configure.ac b/sysdeps/unix/sysv/linux/aarch64/configure.ac deleted file mode 100644 index 211fa9c317..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/configure.ac +++ /dev/null @@ -1,6 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/aarch64. - -arch_minimum_kernel=3.7.0 - -LIBC_SLIBDIR_RTLDDIR([lib64], [lib]) diff --git a/sysdeps/unix/sysv/linux/aarch64/cpu-features.c b/sysdeps/unix/sysv/linux/aarch64/cpu-features.c deleted file mode 100644 index ef6eecd17e..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/cpu-features.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Initialize CPU feature data. AArch64 version. - This file is part of the GNU C Library. - Copyright (C) 2017 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static inline void -init_cpu_features (struct cpu_features *cpu_features) -{ - uint64_t hwcap_mask = GET_HWCAP_MASK(); - uint64_t hwcap = GLRO (dl_hwcap) & hwcap_mask; - - if (hwcap & HWCAP_CPUID) - { - register uint64_t id = 0; - asm volatile ("mrs %0, midr_el1" : "=r"(id)); - cpu_features->midr_el1 = id; - } - else - cpu_features->midr_el1 = 0; -} diff --git a/sysdeps/unix/sysv/linux/aarch64/cpu-features.h b/sysdeps/unix/sysv/linux/aarch64/cpu-features.h deleted file mode 100644 index c92b650984..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/cpu-features.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Initialize CPU feature data. AArch64 version. - This file is part of the GNU C Library. - Copyright (C) 2017 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _CPU_FEATURES_AARCH64_H -#define _CPU_FEATURES_AARCH64_H - -#include - -#define MIDR_PARTNUM_SHIFT 4 -#define MIDR_PARTNUM_MASK (0xfff << MIDR_PARTNUM_SHIFT) -#define MIDR_PARTNUM(midr) \ - (((midr) & MIDR_PARTNUM_MASK) >> MIDR_PARTNUM_SHIFT) -#define MIDR_ARCHITECTURE_SHIFT 16 -#define MIDR_ARCHITECTURE_MASK (0xf << MIDR_ARCHITECTURE_SHIFT) -#define MIDR_ARCHITECTURE(midr) \ - (((midr) & MIDR_ARCHITECTURE_MASK) >> MIDR_ARCHITECTURE_SHIFT) -#define MIDR_VARIANT_SHIFT 20 -#define MIDR_VARIANT_MASK (0xf << MIDR_VARIANT_SHIFT) -#define MIDR_VARIANT(midr) \ - (((midr) & MIDR_VARIANT_MASK) >> MIDR_VARIANT_SHIFT) -#define MIDR_IMPLEMENTOR_SHIFT 24 -#define MIDR_IMPLEMENTOR_MASK (0xff << MIDR_IMPLEMENTOR_SHIFT) -#define MIDR_IMPLEMENTOR(midr) \ - (((midr) & MIDR_IMPLEMENTOR_MASK) >> MIDR_IMPLEMENTOR_SHIFT) - -#define IS_THUNDERX(midr) (MIDR_IMPLEMENTOR(midr) == 'C' \ - && MIDR_PARTNUM(midr) == 0x0a1) - -struct cpu_features -{ - uint64_t midr_el1; -}; - -#endif /* _CPU_FEATURES_AARCH64_H */ diff --git a/sysdeps/unix/sysv/linux/aarch64/dl-cache.h b/sysdeps/unix/sysv/linux/aarch64/dl-cache.h deleted file mode 100644 index 90e1734347..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/dl-cache.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifdef __LP64__ -# define _DL_CACHE_DEFAULT_ID (FLAG_AARCH64_LIB64 | FLAG_ELF_LIBC6) -#else -# define _DL_CACHE_DEFAULT_ID (FLAG_AARCH64_LIB32 | FLAG_ELF_LIBC6) -#endif - -#define _dl_cache_check_flags(flags) \ - ((flags) == _DL_CACHE_DEFAULT_ID) - -#define add_system_dir(dir) \ - do \ - { \ - size_t len = strlen (dir); \ - char path[len + 6]; \ - memcpy (path, dir, len + 1); \ - if (len >= 6 && ! memcmp (path + len - 6, "/lib64", 6)) \ - { \ - len -= 2; \ - path[len] = '\0'; \ - } \ - if (len >= 9 && ! memcmp (path + len - 9, "/libilp32", 9))\ - { \ - len -= 5; \ - path[len] = '\0'; \ - } \ - add_dir (path); \ - if (len >= 4 && ! memcmp (path + len - 4, "/lib", 4)) \ - { \ - memcpy (path + len, "64", 3); \ - add_dir (path); \ - memcpy (path + len, "ilp32", 6); \ - add_dir (path); \ - } \ - } while (0) - -#include_next diff --git a/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c b/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c deleted file mode 100644 index bc37bad782..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Data for AArch64 version of processor capability information. - Linux version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* If anything should be added here check whether the size of each string - is still ok with the given array size. - - All the #ifdefs in the definitions are quite irritating but - necessary if we want to avoid duplicating the information. There - are three different modes: - - - PROCINFO_DECL is defined. This means we are only interested in - declarations. - - - PROCINFO_DECL is not defined: - - + if SHARED is defined the file is included in an array - initializer. The .element = { ... } syntax is needed. - - + if SHARED is not defined a normal array initialization is - needed. - */ - -#ifndef PROCINFO_CLASS -# define PROCINFO_CLASS -#endif - -#if !IS_IN (ldconfig) -# if !defined PROCINFO_DECL && defined SHARED - ._dl_aarch64_cpu_features -# else -PROCINFO_CLASS struct cpu_features _dl_aarch64_cpu_features -# endif -# ifndef PROCINFO_DECL -= { } -# endif -# if !defined SHARED || defined PROCINFO_DECL -; -# else -, -# endif -#endif - -#if !defined PROCINFO_DECL && defined SHARED - ._dl_aarch64_cap_flags -#else -PROCINFO_CLASS const char _dl_aarch64_cap_flags[13][10] -#endif -#ifndef PROCINFO_DECL -= { "fp", "asimd", "evtstrm", "aes", "pmull", "sha1", "sha2", "crc32", - "atomics", "fphp", "asimdhp", "cpuid", "asimdrdm"} -#endif -#if !defined SHARED || defined PROCINFO_DECL -; -#else -, -#endif - -#undef PROCINFO_DECL -#undef PROCINFO_CLASS diff --git a/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h b/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h deleted file mode 100644 index cdb36d3316..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Processor capability information handling macros - aarch64 version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_PROCINFO_H -#define _DL_PROCINFO_H 1 - -#include -#include -#include -#include - -/* We cannot provide a general printing function. */ -static inline int -__attribute__ ((unused)) -_dl_procinfo (unsigned int type, unsigned long int word) -{ - /* This table should match the information from arch/arm64/kernel/cpuinfo.c - in the kernel sources. */ - int i; - - /* Fallback to unknown output mechanism. */ - if (type == AT_HWCAP2) - return -1; - - _dl_printf ("AT_HWCAP: "); - - for (i = 0; i < 32; ++i) - if (word & (1 << i)) - _dl_printf (" %s", GLRO(dl_aarch64_cap_flags)[i]); - - _dl_printf ("\n"); - - return 0; -} - -static inline const char * -__attribute__ ((unused)) -_dl_hwcap_string (int idx) -{ - return GLRO(dl_aarch64_cap_flags)[idx]; -}; - - -/* 13 HWCAP bits set. */ -#define _DL_HWCAP_COUNT 13 - -/* Low 13 bits are allocated in HWCAP. */ -#define _DL_HWCAP_LAST 12 - -/* HWCAP_CPUID should be available by default to influence IFUNC as well as - library search. */ -#define HWCAP_IMPORTANT HWCAP_CPUID - -static inline int -__attribute__ ((unused)) -_dl_string_hwcap (const char *str) -{ - for (int i = 0; i < _DL_HWCAP_COUNT; i++) - { - if (strcmp (str, _dl_hwcap_string (i)) == 0) - return i; - } - return -1; -}; - -/* There're no platforms to filter out. */ -#define _DL_HWCAP_PLATFORM 0 - -#define _dl_string_platform(str) (-1) - -#endif /* dl-procinfo.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/dl-static.c b/sysdeps/unix/sysv/linux/aarch64/dl-static.c deleted file mode 100644 index fcda0df16f..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/dl-static.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Variable initialization. AArch64 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifdef SHARED - -void -_dl_var_init (void *array[]) -{ - /* It has to match "variables" below. */ - enum - { - DL_PAGESIZE = 0 - }; - - GLRO(dl_pagesize) = *((size_t *) array[DL_PAGESIZE]); -} - -#else - -static void *variables[] = -{ - &GLRO(dl_pagesize) -}; - -static void -_dl_unprotect_relro (struct link_map *l) -{ - ElfW(Addr) start = ((l->l_addr + l->l_relro_addr) - & ~(GLRO(dl_pagesize) - 1)); - ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size) - & ~(GLRO(dl_pagesize) - 1)); - - if (start != end) - __mprotect ((void *) start, end - start, PROT_READ | PROT_WRITE); -} - -void -_dl_static_init (struct link_map *l) -{ - struct link_map *rtld_map = l; - struct r_scope_elem **scope; - const ElfW(Sym) *ref = NULL; - lookup_t loadbase; - void (*f) (void *[]); - size_t i; - - loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope, - NULL, 0, 1, NULL); - - for (scope = l->l_local_scope; *scope != NULL; scope++) - for (i = 0; i < (*scope)->r_nlist; i++) - if ((*scope)->r_list[i] == loadbase) - { - rtld_map = (*scope)->r_list[i]; - break; - } - - if (ref != NULL) - { - f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref); - _dl_unprotect_relro (rtld_map); - f (variables); - _dl_protect_relro (rtld_map); - } -} - -#endif diff --git a/sysdeps/unix/sysv/linux/aarch64/getcontext.S b/sysdeps/unix/sysv/linux/aarch64/getcontext.S deleted file mode 100644 index fa7074c590..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/getcontext.S +++ /dev/null @@ -1,109 +0,0 @@ -/* Save current context. - - Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "ucontext_i.h" -#include "ucontext-internal.h" - -/* int getcontext (ucontext_t *ucp) - - Returns 0 on success -1 and errno on failure. - */ - - .text - -ENTRY(__getcontext) - DELOUSE (0) - /* The saved context will return to the getcontext() call point - with a return value of 0 */ - str xzr, [x0, oX0 + 0 * SZREG] - - stp x18, x19, [x0, oX0 + 18 * SZREG] - stp x20, x21, [x0, oX0 + 20 * SZREG] - stp x22, x23, [x0, oX0 + 22 * SZREG] - stp x24, x25, [x0, oX0 + 24 * SZREG] - stp x26, x27, [x0, oX0 + 26 * SZREG] - stp x28, x29, [x0, oX0 + 28 * SZREG] - str x30, [x0, oX0 + 30 * SZREG] - - /* Place LR into the saved PC, this will ensure that when - switching to this saved context with setcontext() control - will pass back to the caller of getcontext(), we have - already arrange to return the appropriate return value in x0 - above. */ - str x30, [x0, oPC] - - /* Save the current SP */ - mov x2, sp - str x2, [x0, oSP] - - /* Initialize the pstate. */ - str xzr, [x0, oPSTATE] - - /* Figure out where to place the first context extension - block. */ - add x2, x0, #oEXTENSION - - /* Write the context extension fpsimd header. */ - mov w3, #(FPSIMD_MAGIC & 0xffff) - movk w3, #(FPSIMD_MAGIC >> 16), lsl #16 - str w3, [x2, #oHEAD + oMAGIC] - mov w3, #FPSIMD_CONTEXT_SIZE - str w3, [x2, #oHEAD + oSIZE] - - /* Fill in the FP SIMD context. */ - add x3, x2, #oV0 + 8 * SZVREG - stp q8, q9, [x3], # 2 * SZVREG - stp q10, q11, [x3], # 2 * SZVREG - stp q12, q13, [x3], # 2 * SZVREG - stp q14, q15, [x3], # 2 * SZVREG - - add x3, x2, oFPSR - - mrs x4, fpsr - str w4, [x3] - - mrs x4, fpcr - str w4, [x3, oFPCR - oFPSR] - - /* Write the termination context extension header. */ - add x2, x2, #FPSIMD_CONTEXT_SIZE - - str xzr, [x2, #oHEAD + oMAGIC] - str xzr, [x2, #oHEAD + oSIZE] - - /* Grab the signal mask */ - /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ - add PTR_REG (2), PTR_REG (0), #UCONTEXT_SIGMASK - mov x0, SIG_BLOCK - mov x1, 0 - mov x3, _NSIG8 - mov x8, SYS_ify (rt_sigprocmask) - svc 0 - cbnz x0, 1f - - /* Return 0 for success */ - mov x0, 0 - RET -1: - b C_SYMBOL_NAME(__syscall_error) - - PSEUDO_END (__getcontext) -weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/aarch64/init-first.c b/sysdeps/unix/sysv/linux/aarch64/init-first.c deleted file mode 100644 index 96f5338994..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/init-first.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef SHARED -# include -# include - -int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) attribute_hidden; -int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *); -int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *); - -static inline void -_libc_vdso_platform_setup (void) -{ -#ifdef __LP64__ - PREPARE_VERSION (linux_version, "LINUX_2.6.39", 123718537); -#else - PREPARE_VERSION (linux_version, "LINUX_4.9", 61765625); -#endif - - void *p = _dl_vdso_vsym ("__kernel_gettimeofday", &linux_version); - PTR_MANGLE (p); - VDSO_SYMBOL(gettimeofday) = p; - - p = _dl_vdso_vsym ("__kernel_clock_gettime", &linux_version); - PTR_MANGLE (p); - VDSO_SYMBOL(clock_gettime) = p; - - p = _dl_vdso_vsym ("__kernel_clock_getres", &linux_version); - PTR_MANGLE (p); - VDSO_SYMBOL(clock_getres) = p; -} - -# define VDSO_SETUP _libc_vdso_platform_setup -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/aarch64/ioctl.S b/sysdeps/unix/sysv/linux/aarch64/ioctl.S deleted file mode 100644 index 866d6ef12d..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/ioctl.S +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__ioctl) - mov x8, #__NR_ioctl - sxtw x0, w0 - svc #0x0 - cmn x0, #4095 - b.cs .Lsyscall_error - ret -PSEUDO_END (__ioctl) - -weak_alias (__ioctl, ioctl) diff --git a/sysdeps/unix/sysv/linux/aarch64/ipc_priv.h b/sysdeps/unix/sysv/linux/aarch64/ipc_priv.h deleted file mode 100644 index 8d12f31573..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/ipc_priv.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Old SysV permission definition for Linux. AArch64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include /* For __key_t */ - -#define __IPC_64 0x0 diff --git a/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h b/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h deleted file mode 100644 index e67ddfa91c..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This structure must have the same shape as the linux kernel - equivalent. */ -struct kernel_rt_sigframe -{ - siginfo_t info; - struct ucontext uc; -}; diff --git a/sysdeps/unix/sysv/linux/aarch64/ld.abilist b/sysdeps/unix/sysv/linux/aarch64/ld.abilist deleted file mode 100644 index ec7f6174c5..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/ld.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 __libc_stack_end D 0x8 -GLIBC_2.17 __stack_chk_guard D 0x8 -GLIBC_2.17 __tls_get_addr F -GLIBC_2.17 _dl_mcount F -GLIBC_2.17 _r_debug D 0x28 -GLIBC_2.17 calloc F -GLIBC_2.17 free F -GLIBC_2.17 malloc F -GLIBC_2.17 realloc F diff --git a/sysdeps/unix/sysv/linux/aarch64/ldconfig.h b/sysdeps/unix/sysv/linux/aarch64/ldconfig.h deleted file mode 100644 index e1c334c478..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/ldconfig.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld-linux-aarch64.so.1", FLAG_ELF_LIBC6 }, \ - { "/lib/ld-linux-aarch64_be.so.1", FLAG_ELF_LIBC6 }, \ - { "/lib/ld-linux-aarch64_ilp32.so.1", FLAG_ELF_LIBC6 }, \ - { "/lib/ld-linux-aarch64_be_ilp32.so.1", FLAG_ELF_LIBC6 }, \ - { "/lib/ld-linux.so.3", FLAG_ELF_LIBC6 }, \ - { "/lib/ld-linux-armhf.so.3", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/aarch64/ldsodefs.h b/sysdeps/unix/sysv/linux/aarch64/ldsodefs.h deleted file mode 100644 index 74ce6aa797..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/ldsodefs.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. Tile. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LDSODEFS_H - -/* Get the real definitions. */ -#include_next - -/* Now define our stuff. */ - -/* We need special support to initialize DSO loaded for statically linked - binaries. */ -extern void _dl_static_init (struct link_map *map); -#undef DL_STATIC_INIT -#define DL_STATIC_INIT(map) _dl_static_init (map) - -#endif /* ldsodefs.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/aarch64/libBrokenLocale.abilist deleted file mode 100644 index 5e54974368..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/aarch64/libanl.abilist b/sysdeps/unix/sysv/linux/aarch64/libanl.abilist deleted file mode 100644 index 21330fc8d5..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 gai_cancel F -GLIBC_2.17 gai_error F -GLIBC_2.17 gai_suspend F -GLIBC_2.17 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S b/sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S deleted file mode 100644 index 47df81abe6..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include <__read_tp.S> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc-start.c b/sysdeps/unix/sysv/linux/aarch64/libc-start.c deleted file mode 100644 index 089a728a87..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/libc-start.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Override csu/libc-start.c on AArch64. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef SHARED -# include -# include - -extern struct cpu_features _dl_aarch64_cpu_features; - -# define ARCH_INIT_CPU_FEATURES() init_cpu_features (&_dl_aarch64_cpu_features) - -#endif -#include diff --git a/sysdeps/unix/sysv/linux/aarch64/libc-vdso.h b/sysdeps/unix/sysv/linux/aarch64/libc-vdso.h deleted file mode 100644 index 599ae9852c..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/libc-vdso.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LIBC_VDSO_H -#define _LIBC_VDSO_H - -#ifdef SHARED - -# include - -extern int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) - attribute_hidden; -extern int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *); -extern int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *); - -#endif - -#endif /* _LIBC_VDSO_H */ diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist deleted file mode 100644 index 81e4fe9d9c..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist +++ /dev/null @@ -1,2105 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 _Exit F -GLIBC_2.17 _IO_2_1_stderr_ D 0xe0 -GLIBC_2.17 _IO_2_1_stdin_ D 0xe0 -GLIBC_2.17 _IO_2_1_stdout_ D 0xe0 -GLIBC_2.17 _IO_adjust_column F -GLIBC_2.17 _IO_adjust_wcolumn F -GLIBC_2.17 _IO_default_doallocate F -GLIBC_2.17 _IO_default_finish F -GLIBC_2.17 _IO_default_pbackfail F -GLIBC_2.17 _IO_default_uflow F -GLIBC_2.17 _IO_default_xsgetn F -GLIBC_2.17 _IO_default_xsputn F -GLIBC_2.17 _IO_do_write F -GLIBC_2.17 _IO_doallocbuf F -GLIBC_2.17 _IO_fclose F -GLIBC_2.17 _IO_fdopen F -GLIBC_2.17 _IO_feof F -GLIBC_2.17 _IO_ferror F -GLIBC_2.17 _IO_fflush F -GLIBC_2.17 _IO_fgetpos F -GLIBC_2.17 _IO_fgetpos64 F -GLIBC_2.17 _IO_fgets F -GLIBC_2.17 _IO_file_attach F -GLIBC_2.17 _IO_file_close F -GLIBC_2.17 _IO_file_close_it F -GLIBC_2.17 _IO_file_doallocate F -GLIBC_2.17 _IO_file_finish F -GLIBC_2.17 _IO_file_fopen F -GLIBC_2.17 _IO_file_init F -GLIBC_2.17 _IO_file_jumps D 0xa8 -GLIBC_2.17 _IO_file_open F -GLIBC_2.17 _IO_file_overflow F -GLIBC_2.17 _IO_file_read F -GLIBC_2.17 _IO_file_seek F -GLIBC_2.17 _IO_file_seekoff F -GLIBC_2.17 _IO_file_setbuf F -GLIBC_2.17 _IO_file_stat F -GLIBC_2.17 _IO_file_sync F -GLIBC_2.17 _IO_file_underflow F -GLIBC_2.17 _IO_file_write F -GLIBC_2.17 _IO_file_xsputn F -GLIBC_2.17 _IO_flockfile F -GLIBC_2.17 _IO_flush_all F -GLIBC_2.17 _IO_flush_all_linebuffered F -GLIBC_2.17 _IO_fopen F -GLIBC_2.17 _IO_fprintf F -GLIBC_2.17 _IO_fputs F -GLIBC_2.17 _IO_fread F -GLIBC_2.17 _IO_free_backup_area F -GLIBC_2.17 _IO_free_wbackup_area F -GLIBC_2.17 _IO_fsetpos F -GLIBC_2.17 _IO_fsetpos64 F -GLIBC_2.17 _IO_ftell F -GLIBC_2.17 _IO_ftrylockfile F -GLIBC_2.17 _IO_funlockfile F -GLIBC_2.17 _IO_fwrite F -GLIBC_2.17 _IO_getc F -GLIBC_2.17 _IO_getline F -GLIBC_2.17 _IO_getline_info F -GLIBC_2.17 _IO_gets F -GLIBC_2.17 _IO_init F -GLIBC_2.17 _IO_init_marker F -GLIBC_2.17 _IO_init_wmarker F -GLIBC_2.17 _IO_iter_begin F -GLIBC_2.17 _IO_iter_end F -GLIBC_2.17 _IO_iter_file F -GLIBC_2.17 _IO_iter_next F -GLIBC_2.17 _IO_least_wmarker F -GLIBC_2.17 _IO_link_in F -GLIBC_2.17 _IO_list_all D 0x8 -GLIBC_2.17 _IO_list_lock F -GLIBC_2.17 _IO_list_resetlock F -GLIBC_2.17 _IO_list_unlock F -GLIBC_2.17 _IO_marker_delta F -GLIBC_2.17 _IO_marker_difference F -GLIBC_2.17 _IO_padn F -GLIBC_2.17 _IO_peekc_locked F -GLIBC_2.17 _IO_popen F -GLIBC_2.17 _IO_printf F -GLIBC_2.17 _IO_proc_close F -GLIBC_2.17 _IO_proc_open F -GLIBC_2.17 _IO_putc F -GLIBC_2.17 _IO_puts F -GLIBC_2.17 _IO_remove_marker F -GLIBC_2.17 _IO_seekmark F -GLIBC_2.17 _IO_seekoff F -GLIBC_2.17 _IO_seekpos F -GLIBC_2.17 _IO_seekwmark F -GLIBC_2.17 _IO_setb F -GLIBC_2.17 _IO_setbuffer F -GLIBC_2.17 _IO_setvbuf F -GLIBC_2.17 _IO_sgetn F -GLIBC_2.17 _IO_sprintf F -GLIBC_2.17 _IO_sputbackc F -GLIBC_2.17 _IO_sputbackwc F -GLIBC_2.17 _IO_sscanf F -GLIBC_2.17 _IO_str_init_readonly F -GLIBC_2.17 _IO_str_init_static F -GLIBC_2.17 _IO_str_overflow F -GLIBC_2.17 _IO_str_pbackfail F -GLIBC_2.17 _IO_str_seekoff F -GLIBC_2.17 _IO_str_underflow F -GLIBC_2.17 _IO_sungetc F -GLIBC_2.17 _IO_sungetwc F -GLIBC_2.17 _IO_switch_to_get_mode F -GLIBC_2.17 _IO_switch_to_main_wget_area F -GLIBC_2.17 _IO_switch_to_wbackup_area F -GLIBC_2.17 _IO_switch_to_wget_mode F -GLIBC_2.17 _IO_un_link F -GLIBC_2.17 _IO_ungetc F -GLIBC_2.17 _IO_unsave_markers F -GLIBC_2.17 _IO_unsave_wmarkers F -GLIBC_2.17 _IO_vfprintf F -GLIBC_2.17 _IO_vfscanf F -GLIBC_2.17 _IO_vsprintf F -GLIBC_2.17 _IO_wdefault_doallocate F -GLIBC_2.17 _IO_wdefault_finish F -GLIBC_2.17 _IO_wdefault_pbackfail F -GLIBC_2.17 _IO_wdefault_uflow F -GLIBC_2.17 _IO_wdefault_xsgetn F -GLIBC_2.17 _IO_wdefault_xsputn F -GLIBC_2.17 _IO_wdo_write F -GLIBC_2.17 _IO_wdoallocbuf F -GLIBC_2.17 _IO_wfile_jumps D 0xa8 -GLIBC_2.17 _IO_wfile_overflow F -GLIBC_2.17 _IO_wfile_seekoff F -GLIBC_2.17 _IO_wfile_sync F -GLIBC_2.17 _IO_wfile_underflow F -GLIBC_2.17 _IO_wfile_xsputn F -GLIBC_2.17 _IO_wmarker_delta F -GLIBC_2.17 _IO_wsetb F -GLIBC_2.17 ___brk_addr D 0x8 -GLIBC_2.17 __adjtimex F -GLIBC_2.17 __after_morecore_hook D 0x8 -GLIBC_2.17 __argz_count F -GLIBC_2.17 __argz_next F -GLIBC_2.17 __argz_stringify F -GLIBC_2.17 __asprintf F -GLIBC_2.17 __asprintf_chk F -GLIBC_2.17 __assert F -GLIBC_2.17 __assert_fail F -GLIBC_2.17 __assert_perror_fail F -GLIBC_2.17 __backtrace F -GLIBC_2.17 __backtrace_symbols F -GLIBC_2.17 __backtrace_symbols_fd F -GLIBC_2.17 __bsd_getpgrp F -GLIBC_2.17 __bzero F -GLIBC_2.17 __check_rhosts_file D 0x4 -GLIBC_2.17 __chk_fail F -GLIBC_2.17 __clone F -GLIBC_2.17 __close F -GLIBC_2.17 __cmsg_nxthdr F -GLIBC_2.17 __confstr_chk F -GLIBC_2.17 __connect F -GLIBC_2.17 __ctype_b_loc F -GLIBC_2.17 __ctype_get_mb_cur_max F -GLIBC_2.17 __ctype_tolower_loc F -GLIBC_2.17 __ctype_toupper_loc F -GLIBC_2.17 __curbrk D 0x8 -GLIBC_2.17 __cxa_at_quick_exit F -GLIBC_2.17 __cxa_atexit F -GLIBC_2.17 __cxa_finalize F -GLIBC_2.17 __cyg_profile_func_enter F -GLIBC_2.17 __cyg_profile_func_exit F -GLIBC_2.17 __daylight D 0x4 -GLIBC_2.17 __dcgettext F -GLIBC_2.17 __default_morecore F -GLIBC_2.17 __dgettext F -GLIBC_2.17 __dprintf_chk F -GLIBC_2.17 __dup2 F -GLIBC_2.17 __duplocale F -GLIBC_2.17 __endmntent F -GLIBC_2.17 __environ D 0x8 -GLIBC_2.17 __errno_location F -GLIBC_2.17 __fbufsize F -GLIBC_2.17 __fcntl F -GLIBC_2.17 __fdelt_chk F -GLIBC_2.17 __fdelt_warn F -GLIBC_2.17 __ffs F -GLIBC_2.17 __fgets_chk F -GLIBC_2.17 __fgets_unlocked_chk F -GLIBC_2.17 __fgetws_chk F -GLIBC_2.17 __fgetws_unlocked_chk F -GLIBC_2.17 __finite F -GLIBC_2.17 __finitef F -GLIBC_2.17 __finitel F -GLIBC_2.17 __flbf F -GLIBC_2.17 __fork F -GLIBC_2.17 __fpending F -GLIBC_2.17 __fprintf_chk F -GLIBC_2.17 __fpu_control D 0x4 -GLIBC_2.17 __fpurge F -GLIBC_2.17 __fread_chk F -GLIBC_2.17 __fread_unlocked_chk F -GLIBC_2.17 __freadable F -GLIBC_2.17 __freading F -GLIBC_2.17 __free_hook D 0x8 -GLIBC_2.17 __freelocale F -GLIBC_2.17 __fsetlocking F -GLIBC_2.17 __fwprintf_chk F -GLIBC_2.17 __fwritable F -GLIBC_2.17 __fwriting F -GLIBC_2.17 __fxstat F -GLIBC_2.17 __fxstat64 F -GLIBC_2.17 __fxstatat F -GLIBC_2.17 __fxstatat64 F -GLIBC_2.17 __getauxval F -GLIBC_2.17 __getcwd_chk F -GLIBC_2.17 __getdelim F -GLIBC_2.17 __getdomainname_chk F -GLIBC_2.17 __getgroups_chk F -GLIBC_2.17 __gethostname_chk F -GLIBC_2.17 __getlogin_r_chk F -GLIBC_2.17 __getmntent_r F -GLIBC_2.17 __getpagesize F -GLIBC_2.17 __getpgid F -GLIBC_2.17 __getpid F -GLIBC_2.17 __gets_chk F -GLIBC_2.17 __gettimeofday F -GLIBC_2.17 __getwd_chk F -GLIBC_2.17 __gmtime_r F -GLIBC_2.17 __h_errno_location F -GLIBC_2.17 __isalnum_l F -GLIBC_2.17 __isalpha_l F -GLIBC_2.17 __isascii_l F -GLIBC_2.17 __isblank_l F -GLIBC_2.17 __iscntrl_l F -GLIBC_2.17 __isctype F -GLIBC_2.17 __isdigit_l F -GLIBC_2.17 __isgraph_l F -GLIBC_2.17 __isinf F -GLIBC_2.17 __isinff F -GLIBC_2.17 __isinfl F -GLIBC_2.17 __islower_l F -GLIBC_2.17 __isnan F -GLIBC_2.17 __isnanf F -GLIBC_2.17 __isnanl F -GLIBC_2.17 __isoc99_fscanf F -GLIBC_2.17 __isoc99_fwscanf F -GLIBC_2.17 __isoc99_scanf F -GLIBC_2.17 __isoc99_sscanf F -GLIBC_2.17 __isoc99_swscanf F -GLIBC_2.17 __isoc99_vfscanf F -GLIBC_2.17 __isoc99_vfwscanf F -GLIBC_2.17 __isoc99_vscanf F -GLIBC_2.17 __isoc99_vsscanf F -GLIBC_2.17 __isoc99_vswscanf F -GLIBC_2.17 __isoc99_vwscanf F -GLIBC_2.17 __isoc99_wscanf F -GLIBC_2.17 __isprint_l F -GLIBC_2.17 __ispunct_l F -GLIBC_2.17 __isspace_l F -GLIBC_2.17 __isupper_l F -GLIBC_2.17 __iswalnum_l F -GLIBC_2.17 __iswalpha_l F -GLIBC_2.17 __iswblank_l F -GLIBC_2.17 __iswcntrl_l F -GLIBC_2.17 __iswctype F -GLIBC_2.17 __iswctype_l F -GLIBC_2.17 __iswdigit_l F -GLIBC_2.17 __iswgraph_l F -GLIBC_2.17 __iswlower_l F -GLIBC_2.17 __iswprint_l F -GLIBC_2.17 __iswpunct_l F -GLIBC_2.17 __iswspace_l F -GLIBC_2.17 __iswupper_l F -GLIBC_2.17 __iswxdigit_l F -GLIBC_2.17 __isxdigit_l F -GLIBC_2.17 __ivaliduser F -GLIBC_2.17 __key_decryptsession_pk_LOCAL D 0x8 -GLIBC_2.17 __key_encryptsession_pk_LOCAL D 0x8 -GLIBC_2.17 __key_gendes_LOCAL D 0x8 -GLIBC_2.17 __libc_allocate_rtsig F -GLIBC_2.17 __libc_calloc F -GLIBC_2.17 __libc_current_sigrtmax F -GLIBC_2.17 __libc_current_sigrtmin F -GLIBC_2.17 __libc_free F -GLIBC_2.17 __libc_freeres F -GLIBC_2.17 __libc_init_first F -GLIBC_2.17 __libc_mallinfo F -GLIBC_2.17 __libc_malloc F -GLIBC_2.17 __libc_mallopt F -GLIBC_2.17 __libc_memalign F -GLIBC_2.17 __libc_pvalloc F -GLIBC_2.17 __libc_realloc F -GLIBC_2.17 __libc_sa_len F -GLIBC_2.17 __libc_start_main F -GLIBC_2.17 __libc_valloc F -GLIBC_2.17 __longjmp_chk F -GLIBC_2.17 __lseek F -GLIBC_2.17 __lxstat F -GLIBC_2.17 __lxstat64 F -GLIBC_2.17 __malloc_hook D 0x8 -GLIBC_2.17 __malloc_initialize_hook D 0x8 -GLIBC_2.17 __mbrlen F -GLIBC_2.17 __mbrtowc F -GLIBC_2.17 __mbsnrtowcs_chk F -GLIBC_2.17 __mbsrtowcs_chk F -GLIBC_2.17 __mbstowcs_chk F -GLIBC_2.17 __memalign_hook D 0x8 -GLIBC_2.17 __memcpy_chk F -GLIBC_2.17 __memmove_chk F -GLIBC_2.17 __mempcpy F -GLIBC_2.17 __mempcpy_chk F -GLIBC_2.17 __mempcpy_small F -GLIBC_2.17 __memset_chk F -GLIBC_2.17 __monstartup F -GLIBC_2.17 __morecore D 0x8 -GLIBC_2.17 __nanosleep F -GLIBC_2.17 __newlocale F -GLIBC_2.17 __nl_langinfo_l F -GLIBC_2.17 __nss_configure_lookup F -GLIBC_2.17 __nss_database_lookup F -GLIBC_2.17 __nss_group_lookup F -GLIBC_2.17 __nss_hostname_digits_dots F -GLIBC_2.17 __nss_hosts_lookup F -GLIBC_2.17 __nss_next F -GLIBC_2.17 __nss_passwd_lookup F -GLIBC_2.17 __obstack_printf_chk F -GLIBC_2.17 __obstack_vprintf_chk F -GLIBC_2.17 __open F -GLIBC_2.17 __open64 F -GLIBC_2.17 __open64_2 F -GLIBC_2.17 __open_2 F -GLIBC_2.17 __openat64_2 F -GLIBC_2.17 __openat_2 F -GLIBC_2.17 __overflow F -GLIBC_2.17 __pipe F -GLIBC_2.17 __poll F -GLIBC_2.17 __poll_chk F -GLIBC_2.17 __posix_getopt F -GLIBC_2.17 __ppoll_chk F -GLIBC_2.17 __pread64 F -GLIBC_2.17 __pread64_chk F -GLIBC_2.17 __pread_chk F -GLIBC_2.17 __printf_chk F -GLIBC_2.17 __printf_fp F -GLIBC_2.17 __profile_frequency F -GLIBC_2.17 __progname D 0x8 -GLIBC_2.17 __progname_full D 0x8 -GLIBC_2.17 __ptsname_r_chk F -GLIBC_2.17 __pwrite64 F -GLIBC_2.17 __rawmemchr F -GLIBC_2.17 __rcmd_errstr D 0x8 -GLIBC_2.17 __read F -GLIBC_2.17 __read_chk F -GLIBC_2.17 __readlink_chk F -GLIBC_2.17 __readlinkat_chk F -GLIBC_2.17 __realloc_hook D 0x8 -GLIBC_2.17 __realpath_chk F -GLIBC_2.17 __recv_chk F -GLIBC_2.17 __recvfrom_chk F -GLIBC_2.17 __register_atfork F -GLIBC_2.17 __res_init F -GLIBC_2.17 __res_nclose F -GLIBC_2.17 __res_ninit F -GLIBC_2.17 __res_randomid F -GLIBC_2.17 __res_state F -GLIBC_2.17 __rpc_thread_createerr F -GLIBC_2.17 __rpc_thread_svc_fdset F -GLIBC_2.17 __rpc_thread_svc_max_pollfd F -GLIBC_2.17 __rpc_thread_svc_pollfd F -GLIBC_2.17 __sbrk F -GLIBC_2.17 __sched_cpualloc F -GLIBC_2.17 __sched_cpucount F -GLIBC_2.17 __sched_cpufree F -GLIBC_2.17 __sched_get_priority_max F -GLIBC_2.17 __sched_get_priority_min F -GLIBC_2.17 __sched_getparam F -GLIBC_2.17 __sched_getscheduler F -GLIBC_2.17 __sched_setscheduler F -GLIBC_2.17 __sched_yield F -GLIBC_2.17 __select F -GLIBC_2.17 __setmntent F -GLIBC_2.17 __setpgid F -GLIBC_2.17 __sigaction F -GLIBC_2.17 __sigaddset F -GLIBC_2.17 __sigdelset F -GLIBC_2.17 __sigismember F -GLIBC_2.17 __signbit F -GLIBC_2.17 __signbitf F -GLIBC_2.17 __signbitl F -GLIBC_2.17 __sigpause F -GLIBC_2.17 __sigsetjmp F -GLIBC_2.17 __sigsuspend F -GLIBC_2.17 __snprintf_chk F -GLIBC_2.17 __sprintf_chk F -GLIBC_2.17 __stack_chk_fail F -GLIBC_2.17 __statfs F -GLIBC_2.17 __stpcpy F -GLIBC_2.17 __stpcpy_chk F -GLIBC_2.17 __stpcpy_small F -GLIBC_2.17 __stpncpy F -GLIBC_2.17 __stpncpy_chk F -GLIBC_2.17 __strcasecmp F -GLIBC_2.17 __strcasecmp_l F -GLIBC_2.17 __strcasestr F -GLIBC_2.17 __strcat_chk F -GLIBC_2.17 __strcoll_l F -GLIBC_2.17 __strcpy_chk F -GLIBC_2.17 __strcpy_small F -GLIBC_2.17 __strcspn_c1 F -GLIBC_2.17 __strcspn_c2 F -GLIBC_2.17 __strcspn_c3 F -GLIBC_2.17 __strdup F -GLIBC_2.17 __strerror_r F -GLIBC_2.17 __strfmon_l F -GLIBC_2.17 __strftime_l F -GLIBC_2.17 __strncasecmp_l F -GLIBC_2.17 __strncat_chk F -GLIBC_2.17 __strncpy_chk F -GLIBC_2.17 __strndup F -GLIBC_2.17 __strpbrk_c2 F -GLIBC_2.17 __strpbrk_c3 F -GLIBC_2.17 __strsep_1c F -GLIBC_2.17 __strsep_2c F -GLIBC_2.17 __strsep_3c F -GLIBC_2.17 __strsep_g F -GLIBC_2.17 __strspn_c1 F -GLIBC_2.17 __strspn_c2 F -GLIBC_2.17 __strspn_c3 F -GLIBC_2.17 __strtod_internal F -GLIBC_2.17 __strtod_l F -GLIBC_2.17 __strtof_internal F -GLIBC_2.17 __strtof_l F -GLIBC_2.17 __strtok_r F -GLIBC_2.17 __strtok_r_1c F -GLIBC_2.17 __strtol_internal F -GLIBC_2.17 __strtol_l F -GLIBC_2.17 __strtold_internal F -GLIBC_2.17 __strtold_l F -GLIBC_2.17 __strtoll_internal F -GLIBC_2.17 __strtoll_l F -GLIBC_2.17 __strtoul_internal F -GLIBC_2.17 __strtoul_l F -GLIBC_2.17 __strtoull_internal F -GLIBC_2.17 __strtoull_l F -GLIBC_2.17 __strverscmp F -GLIBC_2.17 __strxfrm_l F -GLIBC_2.17 __swprintf_chk F -GLIBC_2.17 __sysconf F -GLIBC_2.17 __syslog_chk F -GLIBC_2.17 __sysv_signal F -GLIBC_2.17 __timezone D 0x8 -GLIBC_2.17 __toascii_l F -GLIBC_2.17 __tolower_l F -GLIBC_2.17 __toupper_l F -GLIBC_2.17 __towctrans F -GLIBC_2.17 __towctrans_l F -GLIBC_2.17 __towlower_l F -GLIBC_2.17 __towupper_l F -GLIBC_2.17 __ttyname_r_chk F -GLIBC_2.17 __tzname D 0x10 -GLIBC_2.17 __uflow F -GLIBC_2.17 __underflow F -GLIBC_2.17 __uselocale F -GLIBC_2.17 __vasprintf_chk F -GLIBC_2.17 __vdprintf_chk F -GLIBC_2.17 __vfork F -GLIBC_2.17 __vfprintf_chk F -GLIBC_2.17 __vfscanf F -GLIBC_2.17 __vfwprintf_chk F -GLIBC_2.17 __vprintf_chk F -GLIBC_2.17 __vsnprintf F -GLIBC_2.17 __vsnprintf_chk F -GLIBC_2.17 __vsprintf_chk F -GLIBC_2.17 __vsscanf F -GLIBC_2.17 __vswprintf_chk F -GLIBC_2.17 __vsyslog_chk F -GLIBC_2.17 __vwprintf_chk F -GLIBC_2.17 __wait F -GLIBC_2.17 __waitpid F -GLIBC_2.17 __wcpcpy_chk F -GLIBC_2.17 __wcpncpy_chk F -GLIBC_2.17 __wcrtomb_chk F -GLIBC_2.17 __wcscasecmp_l F -GLIBC_2.17 __wcscat_chk F -GLIBC_2.17 __wcscoll_l F -GLIBC_2.17 __wcscpy_chk F -GLIBC_2.17 __wcsftime_l F -GLIBC_2.17 __wcsncasecmp_l F -GLIBC_2.17 __wcsncat_chk F -GLIBC_2.17 __wcsncpy_chk F -GLIBC_2.17 __wcsnrtombs_chk F -GLIBC_2.17 __wcsrtombs_chk F -GLIBC_2.17 __wcstod_internal F -GLIBC_2.17 __wcstod_l F -GLIBC_2.17 __wcstof_internal F -GLIBC_2.17 __wcstof_l F -GLIBC_2.17 __wcstol_internal F -GLIBC_2.17 __wcstol_l F -GLIBC_2.17 __wcstold_internal F -GLIBC_2.17 __wcstold_l F -GLIBC_2.17 __wcstoll_internal F -GLIBC_2.17 __wcstoll_l F -GLIBC_2.17 __wcstombs_chk F -GLIBC_2.17 __wcstoul_internal F -GLIBC_2.17 __wcstoul_l F -GLIBC_2.17 __wcstoull_internal F -GLIBC_2.17 __wcstoull_l F -GLIBC_2.17 __wcsxfrm_l F -GLIBC_2.17 __wctomb_chk F -GLIBC_2.17 __wctrans_l F -GLIBC_2.17 __wctype_l F -GLIBC_2.17 __wmemcpy_chk F -GLIBC_2.17 __wmemmove_chk F -GLIBC_2.17 __wmempcpy_chk F -GLIBC_2.17 __wmemset_chk F -GLIBC_2.17 __woverflow F -GLIBC_2.17 __wprintf_chk F -GLIBC_2.17 __write F -GLIBC_2.17 __wuflow F -GLIBC_2.17 __wunderflow F -GLIBC_2.17 __xmknod F -GLIBC_2.17 __xmknodat F -GLIBC_2.17 __xpg_basename F -GLIBC_2.17 __xpg_sigpause F -GLIBC_2.17 __xpg_strerror_r F -GLIBC_2.17 __xstat F -GLIBC_2.17 __xstat64 F -GLIBC_2.17 _authenticate F -GLIBC_2.17 _dl_mcount_wrapper F -GLIBC_2.17 _dl_mcount_wrapper_check F -GLIBC_2.17 _environ D 0x8 -GLIBC_2.17 _exit F -GLIBC_2.17 _flushlbf F -GLIBC_2.17 _libc_intl_domainname D 0x5 -GLIBC_2.17 _longjmp F -GLIBC_2.17 _mcleanup F -GLIBC_2.17 _nl_default_dirname D 0x12 -GLIBC_2.17 _nl_domain_bindings D 0x8 -GLIBC_2.17 _nl_msg_cat_cntr D 0x4 -GLIBC_2.17 _null_auth D 0x18 -GLIBC_2.17 _obstack_allocated_p F -GLIBC_2.17 _obstack_begin F -GLIBC_2.17 _obstack_begin_1 F -GLIBC_2.17 _obstack_free F -GLIBC_2.17 _obstack_memory_used F -GLIBC_2.17 _obstack_newchunk F -GLIBC_2.17 _res D 0x238 -GLIBC_2.17 _res_hconf D 0x48 -GLIBC_2.17 _rpc_dtablesize F -GLIBC_2.17 _seterr_reply F -GLIBC_2.17 _setjmp F -GLIBC_2.17 _sys_errlist D 0x438 -GLIBC_2.17 _sys_nerr D 0x4 -GLIBC_2.17 _sys_siglist D 0x208 -GLIBC_2.17 _tolower F -GLIBC_2.17 _toupper F -GLIBC_2.17 a64l F -GLIBC_2.17 abort F -GLIBC_2.17 abs F -GLIBC_2.17 accept F -GLIBC_2.17 accept4 F -GLIBC_2.17 access F -GLIBC_2.17 acct F -GLIBC_2.17 addmntent F -GLIBC_2.17 addseverity F -GLIBC_2.17 adjtime F -GLIBC_2.17 adjtimex F -GLIBC_2.17 advance F -GLIBC_2.17 alarm F -GLIBC_2.17 aligned_alloc F -GLIBC_2.17 alphasort F -GLIBC_2.17 alphasort64 F -GLIBC_2.17 argp_err_exit_status D 0x4 -GLIBC_2.17 argp_error F -GLIBC_2.17 argp_failure F -GLIBC_2.17 argp_help F -GLIBC_2.17 argp_parse F -GLIBC_2.17 argp_program_bug_address D 0x8 -GLIBC_2.17 argp_program_version D 0x8 -GLIBC_2.17 argp_program_version_hook D 0x8 -GLIBC_2.17 argp_state_help F -GLIBC_2.17 argp_usage F -GLIBC_2.17 argz_add F -GLIBC_2.17 argz_add_sep F -GLIBC_2.17 argz_append F -GLIBC_2.17 argz_count F -GLIBC_2.17 argz_create F -GLIBC_2.17 argz_create_sep F -GLIBC_2.17 argz_delete F -GLIBC_2.17 argz_extract F -GLIBC_2.17 argz_insert F -GLIBC_2.17 argz_next F -GLIBC_2.17 argz_replace F -GLIBC_2.17 argz_stringify F -GLIBC_2.17 asctime F -GLIBC_2.17 asctime_r F -GLIBC_2.17 asprintf F -GLIBC_2.17 atof F -GLIBC_2.17 atoi F -GLIBC_2.17 atol F -GLIBC_2.17 atoll F -GLIBC_2.17 authdes_create F -GLIBC_2.17 authdes_getucred F -GLIBC_2.17 authdes_pk_create F -GLIBC_2.17 authnone_create F -GLIBC_2.17 authunix_create F -GLIBC_2.17 authunix_create_default F -GLIBC_2.17 backtrace F -GLIBC_2.17 backtrace_symbols F -GLIBC_2.17 backtrace_symbols_fd F -GLIBC_2.17 basename F -GLIBC_2.17 bcmp F -GLIBC_2.17 bcopy F -GLIBC_2.17 bdflush F -GLIBC_2.17 bind F -GLIBC_2.17 bind_textdomain_codeset F -GLIBC_2.17 bindresvport F -GLIBC_2.17 bindtextdomain F -GLIBC_2.17 brk F -GLIBC_2.17 bsd_signal F -GLIBC_2.17 bsearch F -GLIBC_2.17 btowc F -GLIBC_2.17 bzero F -GLIBC_2.17 c16rtomb F -GLIBC_2.17 c32rtomb F -GLIBC_2.17 calloc F -GLIBC_2.17 callrpc F -GLIBC_2.17 canonicalize_file_name F -GLIBC_2.17 capget F -GLIBC_2.17 capset F -GLIBC_2.17 catclose F -GLIBC_2.17 catgets F -GLIBC_2.17 catopen F -GLIBC_2.17 cbc_crypt F -GLIBC_2.17 cfgetispeed F -GLIBC_2.17 cfgetospeed F -GLIBC_2.17 cfmakeraw F -GLIBC_2.17 cfree F -GLIBC_2.17 cfsetispeed F -GLIBC_2.17 cfsetospeed F -GLIBC_2.17 cfsetspeed F -GLIBC_2.17 chdir F -GLIBC_2.17 chflags F -GLIBC_2.17 chmod F -GLIBC_2.17 chown F -GLIBC_2.17 chroot F -GLIBC_2.17 clearenv F -GLIBC_2.17 clearerr F -GLIBC_2.17 clearerr_unlocked F -GLIBC_2.17 clnt_broadcast F -GLIBC_2.17 clnt_create F -GLIBC_2.17 clnt_pcreateerror F -GLIBC_2.17 clnt_perrno F -GLIBC_2.17 clnt_perror F -GLIBC_2.17 clnt_spcreateerror F -GLIBC_2.17 clnt_sperrno F -GLIBC_2.17 clnt_sperror F -GLIBC_2.17 clntraw_create F -GLIBC_2.17 clnttcp_create F -GLIBC_2.17 clntudp_bufcreate F -GLIBC_2.17 clntudp_create F -GLIBC_2.17 clntunix_create F -GLIBC_2.17 clock F -GLIBC_2.17 clock_adjtime F -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 clone F -GLIBC_2.17 close F -GLIBC_2.17 closedir F -GLIBC_2.17 closelog F -GLIBC_2.17 confstr F -GLIBC_2.17 connect F -GLIBC_2.17 copysign F -GLIBC_2.17 copysignf F -GLIBC_2.17 copysignl F -GLIBC_2.17 creat F -GLIBC_2.17 creat64 F -GLIBC_2.17 create_module F -GLIBC_2.17 ctermid F -GLIBC_2.17 ctime F -GLIBC_2.17 ctime_r F -GLIBC_2.17 cuserid F -GLIBC_2.17 daemon F -GLIBC_2.17 daylight D 0x4 -GLIBC_2.17 dcgettext F -GLIBC_2.17 dcngettext F -GLIBC_2.17 delete_module F -GLIBC_2.17 des_setparity F -GLIBC_2.17 dgettext F -GLIBC_2.17 difftime F -GLIBC_2.17 dirfd F -GLIBC_2.17 dirname F -GLIBC_2.17 div F -GLIBC_2.17 dl_iterate_phdr F -GLIBC_2.17 dngettext F -GLIBC_2.17 dprintf F -GLIBC_2.17 drand48 F -GLIBC_2.17 drand48_r F -GLIBC_2.17 dup F -GLIBC_2.17 dup2 F -GLIBC_2.17 dup3 F -GLIBC_2.17 duplocale F -GLIBC_2.17 dysize F -GLIBC_2.17 eaccess F -GLIBC_2.17 ecb_crypt F -GLIBC_2.17 ecvt F -GLIBC_2.17 ecvt_r F -GLIBC_2.17 endaliasent F -GLIBC_2.17 endfsent F -GLIBC_2.17 endgrent F -GLIBC_2.17 endhostent F -GLIBC_2.17 endmntent F -GLIBC_2.17 endnetent F -GLIBC_2.17 endnetgrent F -GLIBC_2.17 endprotoent F -GLIBC_2.17 endpwent F -GLIBC_2.17 endrpcent F -GLIBC_2.17 endservent F -GLIBC_2.17 endsgent F -GLIBC_2.17 endspent F -GLIBC_2.17 endttyent F -GLIBC_2.17 endusershell F -GLIBC_2.17 endutent F -GLIBC_2.17 endutxent F -GLIBC_2.17 environ D 0x8 -GLIBC_2.17 envz_add F -GLIBC_2.17 envz_entry F -GLIBC_2.17 envz_get F -GLIBC_2.17 envz_merge F -GLIBC_2.17 envz_remove F -GLIBC_2.17 envz_strip F -GLIBC_2.17 epoll_create F -GLIBC_2.17 epoll_create1 F -GLIBC_2.17 epoll_ctl F -GLIBC_2.17 epoll_pwait F -GLIBC_2.17 epoll_wait F -GLIBC_2.17 erand48 F -GLIBC_2.17 erand48_r F -GLIBC_2.17 err F -GLIBC_2.17 error F -GLIBC_2.17 error_at_line F -GLIBC_2.17 error_message_count D 0x4 -GLIBC_2.17 error_one_per_line D 0x4 -GLIBC_2.17 error_print_progname D 0x8 -GLIBC_2.17 errx F -GLIBC_2.17 ether_aton F -GLIBC_2.17 ether_aton_r F -GLIBC_2.17 ether_hostton F -GLIBC_2.17 ether_line F -GLIBC_2.17 ether_ntoa F -GLIBC_2.17 ether_ntoa_r F -GLIBC_2.17 ether_ntohost F -GLIBC_2.17 euidaccess F -GLIBC_2.17 eventfd F -GLIBC_2.17 eventfd_read F -GLIBC_2.17 eventfd_write F -GLIBC_2.17 execl F -GLIBC_2.17 execle F -GLIBC_2.17 execlp F -GLIBC_2.17 execv F -GLIBC_2.17 execve F -GLIBC_2.17 execvp F -GLIBC_2.17 execvpe F -GLIBC_2.17 exit F -GLIBC_2.17 faccessat F -GLIBC_2.17 fallocate F -GLIBC_2.17 fallocate64 F -GLIBC_2.17 fanotify_init F -GLIBC_2.17 fanotify_mark F -GLIBC_2.17 fattach F -GLIBC_2.17 fchdir F -GLIBC_2.17 fchflags F -GLIBC_2.17 fchmod F -GLIBC_2.17 fchmodat F -GLIBC_2.17 fchown F -GLIBC_2.17 fchownat F -GLIBC_2.17 fclose F -GLIBC_2.17 fcloseall F -GLIBC_2.17 fcntl F -GLIBC_2.17 fcvt F -GLIBC_2.17 fcvt_r F -GLIBC_2.17 fdatasync F -GLIBC_2.17 fdetach F -GLIBC_2.17 fdopen F -GLIBC_2.17 fdopendir F -GLIBC_2.17 feof F -GLIBC_2.17 feof_unlocked F -GLIBC_2.17 ferror F -GLIBC_2.17 ferror_unlocked F -GLIBC_2.17 fexecve F -GLIBC_2.17 fflush F -GLIBC_2.17 fflush_unlocked F -GLIBC_2.17 ffs F -GLIBC_2.17 ffsl F -GLIBC_2.17 ffsll F -GLIBC_2.17 fgetc F -GLIBC_2.17 fgetc_unlocked F -GLIBC_2.17 fgetgrent F -GLIBC_2.17 fgetgrent_r F -GLIBC_2.17 fgetpos F -GLIBC_2.17 fgetpos64 F -GLIBC_2.17 fgetpwent F -GLIBC_2.17 fgetpwent_r F -GLIBC_2.17 fgets F -GLIBC_2.17 fgets_unlocked F -GLIBC_2.17 fgetsgent F -GLIBC_2.17 fgetsgent_r F -GLIBC_2.17 fgetspent F -GLIBC_2.17 fgetspent_r F -GLIBC_2.17 fgetwc F -GLIBC_2.17 fgetwc_unlocked F -GLIBC_2.17 fgetws F -GLIBC_2.17 fgetws_unlocked F -GLIBC_2.17 fgetxattr F -GLIBC_2.17 fileno F -GLIBC_2.17 fileno_unlocked F -GLIBC_2.17 finite F -GLIBC_2.17 finitef F -GLIBC_2.17 finitel F -GLIBC_2.17 flistxattr F -GLIBC_2.17 flock F -GLIBC_2.17 flockfile F -GLIBC_2.17 fmemopen F -GLIBC_2.17 fmtmsg F -GLIBC_2.17 fnmatch F -GLIBC_2.17 fopen F -GLIBC_2.17 fopen64 F -GLIBC_2.17 fopencookie F -GLIBC_2.17 fork F -GLIBC_2.17 fpathconf F -GLIBC_2.17 fprintf F -GLIBC_2.17 fputc F -GLIBC_2.17 fputc_unlocked F -GLIBC_2.17 fputs F -GLIBC_2.17 fputs_unlocked F -GLIBC_2.17 fputwc F -GLIBC_2.17 fputwc_unlocked F -GLIBC_2.17 fputws F -GLIBC_2.17 fputws_unlocked F -GLIBC_2.17 fread F -GLIBC_2.17 fread_unlocked F -GLIBC_2.17 free F -GLIBC_2.17 freeaddrinfo F -GLIBC_2.17 freeifaddrs F -GLIBC_2.17 freelocale F -GLIBC_2.17 fremovexattr F -GLIBC_2.17 freopen F -GLIBC_2.17 freopen64 F -GLIBC_2.17 frexp F -GLIBC_2.17 frexpf F -GLIBC_2.17 frexpl F -GLIBC_2.17 fscanf F -GLIBC_2.17 fseek F -GLIBC_2.17 fseeko F -GLIBC_2.17 fseeko64 F -GLIBC_2.17 fsetpos F -GLIBC_2.17 fsetpos64 F -GLIBC_2.17 fsetxattr F -GLIBC_2.17 fstatfs F -GLIBC_2.17 fstatfs64 F -GLIBC_2.17 fstatvfs F -GLIBC_2.17 fstatvfs64 F -GLIBC_2.17 fsync F -GLIBC_2.17 ftell F -GLIBC_2.17 ftello F -GLIBC_2.17 ftello64 F -GLIBC_2.17 ftime F -GLIBC_2.17 ftok F -GLIBC_2.17 ftruncate F -GLIBC_2.17 ftruncate64 F -GLIBC_2.17 ftrylockfile F -GLIBC_2.17 fts_children F -GLIBC_2.17 fts_close F -GLIBC_2.17 fts_open F -GLIBC_2.17 fts_read F -GLIBC_2.17 fts_set F -GLIBC_2.17 ftw F -GLIBC_2.17 ftw64 F -GLIBC_2.17 funlockfile F -GLIBC_2.17 futimens F -GLIBC_2.17 futimes F -GLIBC_2.17 futimesat F -GLIBC_2.17 fwide F -GLIBC_2.17 fwprintf F -GLIBC_2.17 fwrite F -GLIBC_2.17 fwrite_unlocked F -GLIBC_2.17 fwscanf F -GLIBC_2.17 gai_strerror F -GLIBC_2.17 gcvt F -GLIBC_2.17 get_avphys_pages F -GLIBC_2.17 get_current_dir_name F -GLIBC_2.17 get_kernel_syms F -GLIBC_2.17 get_myaddress F -GLIBC_2.17 get_nprocs F -GLIBC_2.17 get_nprocs_conf F -GLIBC_2.17 get_phys_pages F -GLIBC_2.17 getaddrinfo F -GLIBC_2.17 getaliasbyname F -GLIBC_2.17 getaliasbyname_r F -GLIBC_2.17 getaliasent F -GLIBC_2.17 getaliasent_r F -GLIBC_2.17 getauxval F -GLIBC_2.17 getc F -GLIBC_2.17 getc_unlocked F -GLIBC_2.17 getchar F -GLIBC_2.17 getchar_unlocked F -GLIBC_2.17 getcontext F -GLIBC_2.17 getcwd F -GLIBC_2.17 getdate F -GLIBC_2.17 getdate_err D 0x4 -GLIBC_2.17 getdate_r F -GLIBC_2.17 getdelim F -GLIBC_2.17 getdirentries F -GLIBC_2.17 getdirentries64 F -GLIBC_2.17 getdomainname F -GLIBC_2.17 getdtablesize F -GLIBC_2.17 getegid F -GLIBC_2.17 getenv F -GLIBC_2.17 geteuid F -GLIBC_2.17 getfsent F -GLIBC_2.17 getfsfile F -GLIBC_2.17 getfsspec F -GLIBC_2.17 getgid F -GLIBC_2.17 getgrent F -GLIBC_2.17 getgrent_r F -GLIBC_2.17 getgrgid F -GLIBC_2.17 getgrgid_r F -GLIBC_2.17 getgrnam F -GLIBC_2.17 getgrnam_r F -GLIBC_2.17 getgrouplist F -GLIBC_2.17 getgroups F -GLIBC_2.17 gethostbyaddr F -GLIBC_2.17 gethostbyaddr_r F -GLIBC_2.17 gethostbyname F -GLIBC_2.17 gethostbyname2 F -GLIBC_2.17 gethostbyname2_r F -GLIBC_2.17 gethostbyname_r F -GLIBC_2.17 gethostent F -GLIBC_2.17 gethostent_r F -GLIBC_2.17 gethostid F -GLIBC_2.17 gethostname F -GLIBC_2.17 getifaddrs F -GLIBC_2.17 getipv4sourcefilter F -GLIBC_2.17 getitimer F -GLIBC_2.17 getline F -GLIBC_2.17 getloadavg F -GLIBC_2.17 getlogin F -GLIBC_2.17 getlogin_r F -GLIBC_2.17 getmntent F -GLIBC_2.17 getmntent_r F -GLIBC_2.17 getmsg F -GLIBC_2.17 getnameinfo F -GLIBC_2.17 getnetbyaddr F -GLIBC_2.17 getnetbyaddr_r F -GLIBC_2.17 getnetbyname F -GLIBC_2.17 getnetbyname_r F -GLIBC_2.17 getnetent F -GLIBC_2.17 getnetent_r F -GLIBC_2.17 getnetgrent F -GLIBC_2.17 getnetgrent_r F -GLIBC_2.17 getnetname F -GLIBC_2.17 getopt F -GLIBC_2.17 getopt_long F -GLIBC_2.17 getopt_long_only F -GLIBC_2.17 getpagesize F -GLIBC_2.17 getpass F -GLIBC_2.17 getpeername F -GLIBC_2.17 getpgid F -GLIBC_2.17 getpgrp F -GLIBC_2.17 getpid F -GLIBC_2.17 getpmsg F -GLIBC_2.17 getppid F -GLIBC_2.17 getpriority F -GLIBC_2.17 getprotobyname F -GLIBC_2.17 getprotobyname_r F -GLIBC_2.17 getprotobynumber F -GLIBC_2.17 getprotobynumber_r F -GLIBC_2.17 getprotoent F -GLIBC_2.17 getprotoent_r F -GLIBC_2.17 getpt F -GLIBC_2.17 getpublickey F -GLIBC_2.17 getpw F -GLIBC_2.17 getpwent F -GLIBC_2.17 getpwent_r F -GLIBC_2.17 getpwnam F -GLIBC_2.17 getpwnam_r F -GLIBC_2.17 getpwuid F -GLIBC_2.17 getpwuid_r F -GLIBC_2.17 getresgid F -GLIBC_2.17 getresuid F -GLIBC_2.17 getrlimit F -GLIBC_2.17 getrlimit64 F -GLIBC_2.17 getrpcbyname F -GLIBC_2.17 getrpcbyname_r F -GLIBC_2.17 getrpcbynumber F -GLIBC_2.17 getrpcbynumber_r F -GLIBC_2.17 getrpcent F -GLIBC_2.17 getrpcent_r F -GLIBC_2.17 getrpcport F -GLIBC_2.17 getrusage F -GLIBC_2.17 gets F -GLIBC_2.17 getsecretkey F -GLIBC_2.17 getservbyname F -GLIBC_2.17 getservbyname_r F -GLIBC_2.17 getservbyport F -GLIBC_2.17 getservbyport_r F -GLIBC_2.17 getservent F -GLIBC_2.17 getservent_r F -GLIBC_2.17 getsgent F -GLIBC_2.17 getsgent_r F -GLIBC_2.17 getsgnam F -GLIBC_2.17 getsgnam_r F -GLIBC_2.17 getsid F -GLIBC_2.17 getsockname F -GLIBC_2.17 getsockopt F -GLIBC_2.17 getsourcefilter F -GLIBC_2.17 getspent F -GLIBC_2.17 getspent_r F -GLIBC_2.17 getspnam F -GLIBC_2.17 getspnam_r F -GLIBC_2.17 getsubopt F -GLIBC_2.17 gettext F -GLIBC_2.17 gettimeofday F -GLIBC_2.17 getttyent F -GLIBC_2.17 getttynam F -GLIBC_2.17 getuid F -GLIBC_2.17 getusershell F -GLIBC_2.17 getutent F -GLIBC_2.17 getutent_r F -GLIBC_2.17 getutid F -GLIBC_2.17 getutid_r F -GLIBC_2.17 getutline F -GLIBC_2.17 getutline_r F -GLIBC_2.17 getutmp F -GLIBC_2.17 getutmpx F -GLIBC_2.17 getutxent F -GLIBC_2.17 getutxid F -GLIBC_2.17 getutxline F -GLIBC_2.17 getw F -GLIBC_2.17 getwc F -GLIBC_2.17 getwc_unlocked F -GLIBC_2.17 getwchar F -GLIBC_2.17 getwchar_unlocked F -GLIBC_2.17 getwd F -GLIBC_2.17 getxattr F -GLIBC_2.17 glob F -GLIBC_2.17 glob64 F -GLIBC_2.17 glob_pattern_p F -GLIBC_2.17 globfree F -GLIBC_2.17 globfree64 F -GLIBC_2.17 gmtime F -GLIBC_2.17 gmtime_r F -GLIBC_2.17 gnu_dev_major F -GLIBC_2.17 gnu_dev_makedev F -GLIBC_2.17 gnu_dev_minor F -GLIBC_2.17 gnu_get_libc_release F -GLIBC_2.17 gnu_get_libc_version F -GLIBC_2.17 grantpt F -GLIBC_2.17 group_member F -GLIBC_2.17 gsignal F -GLIBC_2.17 gtty F -GLIBC_2.17 h_errlist D 0x28 -GLIBC_2.17 h_nerr D 0x4 -GLIBC_2.17 hasmntopt F -GLIBC_2.17 hcreate F -GLIBC_2.17 hcreate_r F -GLIBC_2.17 hdestroy F -GLIBC_2.17 hdestroy_r F -GLIBC_2.17 herror F -GLIBC_2.17 host2netname F -GLIBC_2.17 hsearch F -GLIBC_2.17 hsearch_r F -GLIBC_2.17 hstrerror F -GLIBC_2.17 htonl F -GLIBC_2.17 htons F -GLIBC_2.17 iconv F -GLIBC_2.17 iconv_close F -GLIBC_2.17 iconv_open F -GLIBC_2.17 if_freenameindex F -GLIBC_2.17 if_indextoname F -GLIBC_2.17 if_nameindex F -GLIBC_2.17 if_nametoindex F -GLIBC_2.17 imaxabs F -GLIBC_2.17 imaxdiv F -GLIBC_2.17 in6addr_any D 0x10 -GLIBC_2.17 in6addr_loopback D 0x10 -GLIBC_2.17 index F -GLIBC_2.17 inet6_opt_append F -GLIBC_2.17 inet6_opt_find F -GLIBC_2.17 inet6_opt_finish F -GLIBC_2.17 inet6_opt_get_val F -GLIBC_2.17 inet6_opt_init F -GLIBC_2.17 inet6_opt_next F -GLIBC_2.17 inet6_opt_set_val F -GLIBC_2.17 inet6_option_alloc F -GLIBC_2.17 inet6_option_append F -GLIBC_2.17 inet6_option_find F -GLIBC_2.17 inet6_option_init F -GLIBC_2.17 inet6_option_next F -GLIBC_2.17 inet6_option_space F -GLIBC_2.17 inet6_rth_add F -GLIBC_2.17 inet6_rth_getaddr F -GLIBC_2.17 inet6_rth_init F -GLIBC_2.17 inet6_rth_reverse F -GLIBC_2.17 inet6_rth_segments F -GLIBC_2.17 inet6_rth_space F -GLIBC_2.17 inet_addr F -GLIBC_2.17 inet_aton F -GLIBC_2.17 inet_lnaof F -GLIBC_2.17 inet_makeaddr F -GLIBC_2.17 inet_netof F -GLIBC_2.17 inet_network F -GLIBC_2.17 inet_nsap_addr F -GLIBC_2.17 inet_nsap_ntoa F -GLIBC_2.17 inet_ntoa F -GLIBC_2.17 inet_ntop F -GLIBC_2.17 inet_pton F -GLIBC_2.17 init_module F -GLIBC_2.17 initgroups F -GLIBC_2.17 initstate F -GLIBC_2.17 initstate_r F -GLIBC_2.17 innetgr F -GLIBC_2.17 inotify_add_watch F -GLIBC_2.17 inotify_init F -GLIBC_2.17 inotify_init1 F -GLIBC_2.17 inotify_rm_watch F -GLIBC_2.17 insque F -GLIBC_2.17 ioctl F -GLIBC_2.17 iruserok F -GLIBC_2.17 iruserok_af F -GLIBC_2.17 isalnum F -GLIBC_2.17 isalnum_l F -GLIBC_2.17 isalpha F -GLIBC_2.17 isalpha_l F -GLIBC_2.17 isascii F -GLIBC_2.17 isastream F -GLIBC_2.17 isatty F -GLIBC_2.17 isblank F -GLIBC_2.17 isblank_l F -GLIBC_2.17 iscntrl F -GLIBC_2.17 iscntrl_l F -GLIBC_2.17 isctype F -GLIBC_2.17 isdigit F -GLIBC_2.17 isdigit_l F -GLIBC_2.17 isfdtype F -GLIBC_2.17 isgraph F -GLIBC_2.17 isgraph_l F -GLIBC_2.17 isinf F -GLIBC_2.17 isinff F -GLIBC_2.17 isinfl F -GLIBC_2.17 islower F -GLIBC_2.17 islower_l F -GLIBC_2.17 isnan F -GLIBC_2.17 isnanf F -GLIBC_2.17 isnanl F -GLIBC_2.17 isprint F -GLIBC_2.17 isprint_l F -GLIBC_2.17 ispunct F -GLIBC_2.17 ispunct_l F -GLIBC_2.17 isspace F -GLIBC_2.17 isspace_l F -GLIBC_2.17 isupper F -GLIBC_2.17 isupper_l F -GLIBC_2.17 iswalnum F -GLIBC_2.17 iswalnum_l F -GLIBC_2.17 iswalpha F -GLIBC_2.17 iswalpha_l F -GLIBC_2.17 iswblank F -GLIBC_2.17 iswblank_l F -GLIBC_2.17 iswcntrl F -GLIBC_2.17 iswcntrl_l F -GLIBC_2.17 iswctype F -GLIBC_2.17 iswctype_l F -GLIBC_2.17 iswdigit F -GLIBC_2.17 iswdigit_l F -GLIBC_2.17 iswgraph F -GLIBC_2.17 iswgraph_l F -GLIBC_2.17 iswlower F -GLIBC_2.17 iswlower_l F -GLIBC_2.17 iswprint F -GLIBC_2.17 iswprint_l F -GLIBC_2.17 iswpunct F -GLIBC_2.17 iswpunct_l F -GLIBC_2.17 iswspace F -GLIBC_2.17 iswspace_l F -GLIBC_2.17 iswupper F -GLIBC_2.17 iswupper_l F -GLIBC_2.17 iswxdigit F -GLIBC_2.17 iswxdigit_l F -GLIBC_2.17 isxdigit F -GLIBC_2.17 isxdigit_l F -GLIBC_2.17 jrand48 F -GLIBC_2.17 jrand48_r F -GLIBC_2.17 key_decryptsession F -GLIBC_2.17 key_decryptsession_pk F -GLIBC_2.17 key_encryptsession F -GLIBC_2.17 key_encryptsession_pk F -GLIBC_2.17 key_gendes F -GLIBC_2.17 key_get_conv F -GLIBC_2.17 key_secretkey_is_set F -GLIBC_2.17 key_setnet F -GLIBC_2.17 key_setsecret F -GLIBC_2.17 kill F -GLIBC_2.17 killpg F -GLIBC_2.17 klogctl F -GLIBC_2.17 l64a F -GLIBC_2.17 labs F -GLIBC_2.17 lchmod F -GLIBC_2.17 lchown F -GLIBC_2.17 lckpwdf F -GLIBC_2.17 lcong48 F -GLIBC_2.17 lcong48_r F -GLIBC_2.17 ldexp F -GLIBC_2.17 ldexpf F -GLIBC_2.17 ldexpl F -GLIBC_2.17 ldiv F -GLIBC_2.17 lfind F -GLIBC_2.17 lgetxattr F -GLIBC_2.17 link F -GLIBC_2.17 linkat F -GLIBC_2.17 listen F -GLIBC_2.17 listxattr F -GLIBC_2.17 llabs F -GLIBC_2.17 lldiv F -GLIBC_2.17 llistxattr F -GLIBC_2.17 llseek F -GLIBC_2.17 loc1 D 0x8 -GLIBC_2.17 loc2 D 0x8 -GLIBC_2.17 localeconv F -GLIBC_2.17 localtime F -GLIBC_2.17 localtime_r F -GLIBC_2.17 lockf F -GLIBC_2.17 lockf64 F -GLIBC_2.17 locs D 0x8 -GLIBC_2.17 longjmp F -GLIBC_2.17 lrand48 F -GLIBC_2.17 lrand48_r F -GLIBC_2.17 lremovexattr F -GLIBC_2.17 lsearch F -GLIBC_2.17 lseek F -GLIBC_2.17 lseek64 F -GLIBC_2.17 lsetxattr F -GLIBC_2.17 lutimes F -GLIBC_2.17 madvise F -GLIBC_2.17 makecontext F -GLIBC_2.17 mallinfo F -GLIBC_2.17 malloc F -GLIBC_2.17 malloc_get_state F -GLIBC_2.17 malloc_info F -GLIBC_2.17 malloc_set_state F -GLIBC_2.17 malloc_stats F -GLIBC_2.17 malloc_trim F -GLIBC_2.17 malloc_usable_size F -GLIBC_2.17 mallopt F -GLIBC_2.17 mallwatch D 0x8 -GLIBC_2.17 mblen F -GLIBC_2.17 mbrlen F -GLIBC_2.17 mbrtoc16 F -GLIBC_2.17 mbrtoc32 F -GLIBC_2.17 mbrtowc F -GLIBC_2.17 mbsinit F -GLIBC_2.17 mbsnrtowcs F -GLIBC_2.17 mbsrtowcs F -GLIBC_2.17 mbstowcs F -GLIBC_2.17 mbtowc F -GLIBC_2.17 mcheck F -GLIBC_2.17 mcheck_check_all F -GLIBC_2.17 mcheck_pedantic F -GLIBC_2.17 memalign F -GLIBC_2.17 memccpy F -GLIBC_2.17 memchr F -GLIBC_2.17 memcmp F -GLIBC_2.17 memcpy F -GLIBC_2.17 memfrob F -GLIBC_2.17 memmem F -GLIBC_2.17 memmove F -GLIBC_2.17 mempcpy F -GLIBC_2.17 memrchr F -GLIBC_2.17 memset F -GLIBC_2.17 mincore F -GLIBC_2.17 mkdir F -GLIBC_2.17 mkdirat F -GLIBC_2.17 mkdtemp F -GLIBC_2.17 mkfifo F -GLIBC_2.17 mkfifoat F -GLIBC_2.17 mkostemp F -GLIBC_2.17 mkostemp64 F -GLIBC_2.17 mkostemps F -GLIBC_2.17 mkostemps64 F -GLIBC_2.17 mkstemp F -GLIBC_2.17 mkstemp64 F -GLIBC_2.17 mkstemps F -GLIBC_2.17 mkstemps64 F -GLIBC_2.17 mktemp F -GLIBC_2.17 mktime F -GLIBC_2.17 mlock F -GLIBC_2.17 mlockall F -GLIBC_2.17 mmap F -GLIBC_2.17 mmap64 F -GLIBC_2.17 modf F -GLIBC_2.17 modff F -GLIBC_2.17 modfl F -GLIBC_2.17 moncontrol F -GLIBC_2.17 monstartup F -GLIBC_2.17 mount F -GLIBC_2.17 mprobe F -GLIBC_2.17 mprotect F -GLIBC_2.17 mrand48 F -GLIBC_2.17 mrand48_r F -GLIBC_2.17 mremap F -GLIBC_2.17 msgctl F -GLIBC_2.17 msgget F -GLIBC_2.17 msgrcv F -GLIBC_2.17 msgsnd F -GLIBC_2.17 msync F -GLIBC_2.17 mtrace F -GLIBC_2.17 munlock F -GLIBC_2.17 munlockall F -GLIBC_2.17 munmap F -GLIBC_2.17 muntrace F -GLIBC_2.17 name_to_handle_at F -GLIBC_2.17 nanosleep F -GLIBC_2.17 netname2host F -GLIBC_2.17 netname2user F -GLIBC_2.17 newlocale F -GLIBC_2.17 nfsservctl F -GLIBC_2.17 nftw F -GLIBC_2.17 nftw64 F -GLIBC_2.17 ngettext F -GLIBC_2.17 nice F -GLIBC_2.17 nl_langinfo F -GLIBC_2.17 nl_langinfo_l F -GLIBC_2.17 nrand48 F -GLIBC_2.17 nrand48_r F -GLIBC_2.17 ntohl F -GLIBC_2.17 ntohs F -GLIBC_2.17 ntp_adjtime F -GLIBC_2.17 ntp_gettime F -GLIBC_2.17 ntp_gettimex F -GLIBC_2.17 obstack_alloc_failed_handler D 0x8 -GLIBC_2.17 obstack_exit_failure D 0x4 -GLIBC_2.17 obstack_free F -GLIBC_2.17 obstack_printf F -GLIBC_2.17 obstack_vprintf F -GLIBC_2.17 on_exit F -GLIBC_2.17 open F -GLIBC_2.17 open64 F -GLIBC_2.17 open_by_handle_at F -GLIBC_2.17 open_memstream F -GLIBC_2.17 open_wmemstream F -GLIBC_2.17 openat F -GLIBC_2.17 openat64 F -GLIBC_2.17 opendir F -GLIBC_2.17 openlog F -GLIBC_2.17 optarg D 0x8 -GLIBC_2.17 opterr D 0x4 -GLIBC_2.17 optind D 0x4 -GLIBC_2.17 optopt D 0x4 -GLIBC_2.17 parse_printf_format F -GLIBC_2.17 passwd2des F -GLIBC_2.17 pathconf F -GLIBC_2.17 pause F -GLIBC_2.17 pclose F -GLIBC_2.17 perror F -GLIBC_2.17 personality F -GLIBC_2.17 pipe F -GLIBC_2.17 pipe2 F -GLIBC_2.17 pivot_root F -GLIBC_2.17 pmap_getmaps F -GLIBC_2.17 pmap_getport F -GLIBC_2.17 pmap_rmtcall F -GLIBC_2.17 pmap_set F -GLIBC_2.17 pmap_unset F -GLIBC_2.17 poll F -GLIBC_2.17 popen F -GLIBC_2.17 posix_fadvise F -GLIBC_2.17 posix_fadvise64 F -GLIBC_2.17 posix_fallocate F -GLIBC_2.17 posix_fallocate64 F -GLIBC_2.17 posix_madvise F -GLIBC_2.17 posix_memalign F -GLIBC_2.17 posix_openpt F -GLIBC_2.17 posix_spawn F -GLIBC_2.17 posix_spawn_file_actions_addclose F -GLIBC_2.17 posix_spawn_file_actions_adddup2 F -GLIBC_2.17 posix_spawn_file_actions_addopen F -GLIBC_2.17 posix_spawn_file_actions_destroy F -GLIBC_2.17 posix_spawn_file_actions_init F -GLIBC_2.17 posix_spawnattr_destroy F -GLIBC_2.17 posix_spawnattr_getflags F -GLIBC_2.17 posix_spawnattr_getpgroup F -GLIBC_2.17 posix_spawnattr_getschedparam F -GLIBC_2.17 posix_spawnattr_getschedpolicy F -GLIBC_2.17 posix_spawnattr_getsigdefault F -GLIBC_2.17 posix_spawnattr_getsigmask F -GLIBC_2.17 posix_spawnattr_init F -GLIBC_2.17 posix_spawnattr_setflags F -GLIBC_2.17 posix_spawnattr_setpgroup F -GLIBC_2.17 posix_spawnattr_setschedparam F -GLIBC_2.17 posix_spawnattr_setschedpolicy F -GLIBC_2.17 posix_spawnattr_setsigdefault F -GLIBC_2.17 posix_spawnattr_setsigmask F -GLIBC_2.17 posix_spawnp F -GLIBC_2.17 ppoll F -GLIBC_2.17 prctl F -GLIBC_2.17 pread F -GLIBC_2.17 pread64 F -GLIBC_2.17 preadv F -GLIBC_2.17 preadv64 F -GLIBC_2.17 printf F -GLIBC_2.17 printf_size F -GLIBC_2.17 printf_size_info F -GLIBC_2.17 prlimit F -GLIBC_2.17 prlimit64 F -GLIBC_2.17 process_vm_readv F -GLIBC_2.17 process_vm_writev F -GLIBC_2.17 profil F -GLIBC_2.17 program_invocation_name D 0x8 -GLIBC_2.17 program_invocation_short_name D 0x8 -GLIBC_2.17 pselect F -GLIBC_2.17 psiginfo F -GLIBC_2.17 psignal F -GLIBC_2.17 pthread_attr_destroy F -GLIBC_2.17 pthread_attr_getdetachstate F -GLIBC_2.17 pthread_attr_getinheritsched F -GLIBC_2.17 pthread_attr_getschedparam F -GLIBC_2.17 pthread_attr_getschedpolicy F -GLIBC_2.17 pthread_attr_getscope F -GLIBC_2.17 pthread_attr_init F -GLIBC_2.17 pthread_attr_setdetachstate F -GLIBC_2.17 pthread_attr_setinheritsched F -GLIBC_2.17 pthread_attr_setschedparam F -GLIBC_2.17 pthread_attr_setschedpolicy F -GLIBC_2.17 pthread_attr_setscope F -GLIBC_2.17 pthread_cond_broadcast F -GLIBC_2.17 pthread_cond_destroy F -GLIBC_2.17 pthread_cond_init F -GLIBC_2.17 pthread_cond_signal F -GLIBC_2.17 pthread_cond_timedwait F -GLIBC_2.17 pthread_cond_wait F -GLIBC_2.17 pthread_condattr_destroy F -GLIBC_2.17 pthread_condattr_init F -GLIBC_2.17 pthread_equal F -GLIBC_2.17 pthread_exit F -GLIBC_2.17 pthread_getschedparam F -GLIBC_2.17 pthread_mutex_destroy F -GLIBC_2.17 pthread_mutex_init F -GLIBC_2.17 pthread_mutex_lock F -GLIBC_2.17 pthread_mutex_unlock F -GLIBC_2.17 pthread_self F -GLIBC_2.17 pthread_setcancelstate F -GLIBC_2.17 pthread_setcanceltype F -GLIBC_2.17 pthread_setschedparam F -GLIBC_2.17 ptrace F -GLIBC_2.17 ptsname F -GLIBC_2.17 ptsname_r F -GLIBC_2.17 putc F -GLIBC_2.17 putc_unlocked F -GLIBC_2.17 putchar F -GLIBC_2.17 putchar_unlocked F -GLIBC_2.17 putenv F -GLIBC_2.17 putgrent F -GLIBC_2.17 putmsg F -GLIBC_2.17 putpmsg F -GLIBC_2.17 putpwent F -GLIBC_2.17 puts F -GLIBC_2.17 putsgent F -GLIBC_2.17 putspent F -GLIBC_2.17 pututline F -GLIBC_2.17 pututxline F -GLIBC_2.17 putw F -GLIBC_2.17 putwc F -GLIBC_2.17 putwc_unlocked F -GLIBC_2.17 putwchar F -GLIBC_2.17 putwchar_unlocked F -GLIBC_2.17 pvalloc F -GLIBC_2.17 pwrite F -GLIBC_2.17 pwrite64 F -GLIBC_2.17 pwritev F -GLIBC_2.17 pwritev64 F -GLIBC_2.17 qecvt F -GLIBC_2.17 qecvt_r F -GLIBC_2.17 qfcvt F -GLIBC_2.17 qfcvt_r F -GLIBC_2.17 qgcvt F -GLIBC_2.17 qsort F -GLIBC_2.17 qsort_r F -GLIBC_2.17 query_module F -GLIBC_2.17 quick_exit F -GLIBC_2.17 quotactl F -GLIBC_2.17 raise F -GLIBC_2.17 rand F -GLIBC_2.17 rand_r F -GLIBC_2.17 random F -GLIBC_2.17 random_r F -GLIBC_2.17 rawmemchr F -GLIBC_2.17 rcmd F -GLIBC_2.17 rcmd_af F -GLIBC_2.17 re_comp F -GLIBC_2.17 re_compile_fastmap F -GLIBC_2.17 re_compile_pattern F -GLIBC_2.17 re_exec F -GLIBC_2.17 re_match F -GLIBC_2.17 re_match_2 F -GLIBC_2.17 re_search F -GLIBC_2.17 re_search_2 F -GLIBC_2.17 re_set_registers F -GLIBC_2.17 re_set_syntax F -GLIBC_2.17 re_syntax_options D 0x8 -GLIBC_2.17 read F -GLIBC_2.17 readahead F -GLIBC_2.17 readdir F -GLIBC_2.17 readdir64 F -GLIBC_2.17 readdir64_r F -GLIBC_2.17 readdir_r F -GLIBC_2.17 readlink F -GLIBC_2.17 readlinkat F -GLIBC_2.17 readv F -GLIBC_2.17 realloc F -GLIBC_2.17 realpath F -GLIBC_2.17 reboot F -GLIBC_2.17 recv F -GLIBC_2.17 recvfrom F -GLIBC_2.17 recvmmsg F -GLIBC_2.17 recvmsg F -GLIBC_2.17 regcomp F -GLIBC_2.17 regerror F -GLIBC_2.17 regexec F -GLIBC_2.17 regfree F -GLIBC_2.17 register_printf_function F -GLIBC_2.17 register_printf_modifier F -GLIBC_2.17 register_printf_specifier F -GLIBC_2.17 register_printf_type F -GLIBC_2.17 registerrpc F -GLIBC_2.17 remap_file_pages F -GLIBC_2.17 remove F -GLIBC_2.17 removexattr F -GLIBC_2.17 remque F -GLIBC_2.17 rename F -GLIBC_2.17 renameat F -GLIBC_2.17 revoke F -GLIBC_2.17 rewind F -GLIBC_2.17 rewinddir F -GLIBC_2.17 rexec F -GLIBC_2.17 rexec_af F -GLIBC_2.17 rexecoptions D 0x4 -GLIBC_2.17 rindex F -GLIBC_2.17 rmdir F -GLIBC_2.17 rpc_createerr D 0x20 -GLIBC_2.17 rpmatch F -GLIBC_2.17 rresvport F -GLIBC_2.17 rresvport_af F -GLIBC_2.17 rtime F -GLIBC_2.17 ruserok F -GLIBC_2.17 ruserok_af F -GLIBC_2.17 ruserpass F -GLIBC_2.17 sbrk F -GLIBC_2.17 scalbn F -GLIBC_2.17 scalbnf F -GLIBC_2.17 scalbnl F -GLIBC_2.17 scandir F -GLIBC_2.17 scandir64 F -GLIBC_2.17 scandirat F -GLIBC_2.17 scandirat64 F -GLIBC_2.17 scanf F -GLIBC_2.17 sched_get_priority_max F -GLIBC_2.17 sched_get_priority_min F -GLIBC_2.17 sched_getaffinity F -GLIBC_2.17 sched_getcpu F -GLIBC_2.17 sched_getparam F -GLIBC_2.17 sched_getscheduler F -GLIBC_2.17 sched_rr_get_interval F -GLIBC_2.17 sched_setaffinity F -GLIBC_2.17 sched_setparam F -GLIBC_2.17 sched_setscheduler F -GLIBC_2.17 sched_yield F -GLIBC_2.17 secure_getenv F -GLIBC_2.17 seed48 F -GLIBC_2.17 seed48_r F -GLIBC_2.17 seekdir F -GLIBC_2.17 select F -GLIBC_2.17 semctl F -GLIBC_2.17 semget F -GLIBC_2.17 semop F -GLIBC_2.17 semtimedop F -GLIBC_2.17 send F -GLIBC_2.17 sendfile F -GLIBC_2.17 sendfile64 F -GLIBC_2.17 sendmmsg F -GLIBC_2.17 sendmsg F -GLIBC_2.17 sendto F -GLIBC_2.17 setaliasent F -GLIBC_2.17 setbuf F -GLIBC_2.17 setbuffer F -GLIBC_2.17 setcontext F -GLIBC_2.17 setdomainname F -GLIBC_2.17 setegid F -GLIBC_2.17 setenv F -GLIBC_2.17 seteuid F -GLIBC_2.17 setfsent F -GLIBC_2.17 setfsgid F -GLIBC_2.17 setfsuid F -GLIBC_2.17 setgid F -GLIBC_2.17 setgrent F -GLIBC_2.17 setgroups F -GLIBC_2.17 sethostent F -GLIBC_2.17 sethostid F -GLIBC_2.17 sethostname F -GLIBC_2.17 setipv4sourcefilter F -GLIBC_2.17 setitimer F -GLIBC_2.17 setjmp F -GLIBC_2.17 setlinebuf F -GLIBC_2.17 setlocale F -GLIBC_2.17 setlogin F -GLIBC_2.17 setlogmask F -GLIBC_2.17 setmntent F -GLIBC_2.17 setnetent F -GLIBC_2.17 setnetgrent F -GLIBC_2.17 setns F -GLIBC_2.17 setpgid F -GLIBC_2.17 setpgrp F -GLIBC_2.17 setpriority F -GLIBC_2.17 setprotoent F -GLIBC_2.17 setpwent F -GLIBC_2.17 setregid F -GLIBC_2.17 setresgid F -GLIBC_2.17 setresuid F -GLIBC_2.17 setreuid F -GLIBC_2.17 setrlimit F -GLIBC_2.17 setrlimit64 F -GLIBC_2.17 setrpcent F -GLIBC_2.17 setservent F -GLIBC_2.17 setsgent F -GLIBC_2.17 setsid F -GLIBC_2.17 setsockopt F -GLIBC_2.17 setsourcefilter F -GLIBC_2.17 setspent F -GLIBC_2.17 setstate F -GLIBC_2.17 setstate_r F -GLIBC_2.17 settimeofday F -GLIBC_2.17 setttyent F -GLIBC_2.17 setuid F -GLIBC_2.17 setusershell F -GLIBC_2.17 setutent F -GLIBC_2.17 setutxent F -GLIBC_2.17 setvbuf F -GLIBC_2.17 setxattr F -GLIBC_2.17 sgetsgent F -GLIBC_2.17 sgetsgent_r F -GLIBC_2.17 sgetspent F -GLIBC_2.17 sgetspent_r F -GLIBC_2.17 shmat F -GLIBC_2.17 shmctl F -GLIBC_2.17 shmdt F -GLIBC_2.17 shmget F -GLIBC_2.17 shutdown F -GLIBC_2.17 sigaction F -GLIBC_2.17 sigaddset F -GLIBC_2.17 sigaltstack F -GLIBC_2.17 sigandset F -GLIBC_2.17 sigblock F -GLIBC_2.17 sigdelset F -GLIBC_2.17 sigemptyset F -GLIBC_2.17 sigfillset F -GLIBC_2.17 siggetmask F -GLIBC_2.17 sighold F -GLIBC_2.17 sigignore F -GLIBC_2.17 siginterrupt F -GLIBC_2.17 sigisemptyset F -GLIBC_2.17 sigismember F -GLIBC_2.17 siglongjmp F -GLIBC_2.17 signal F -GLIBC_2.17 signalfd F -GLIBC_2.17 sigorset F -GLIBC_2.17 sigpause F -GLIBC_2.17 sigpending F -GLIBC_2.17 sigprocmask F -GLIBC_2.17 sigqueue F -GLIBC_2.17 sigrelse F -GLIBC_2.17 sigreturn F -GLIBC_2.17 sigset F -GLIBC_2.17 sigsetmask F -GLIBC_2.17 sigstack F -GLIBC_2.17 sigsuspend F -GLIBC_2.17 sigtimedwait F -GLIBC_2.17 sigvec F -GLIBC_2.17 sigwait F -GLIBC_2.17 sigwaitinfo F -GLIBC_2.17 sleep F -GLIBC_2.17 snprintf F -GLIBC_2.17 sockatmark F -GLIBC_2.17 socket F -GLIBC_2.17 socketpair F -GLIBC_2.17 splice F -GLIBC_2.17 sprintf F -GLIBC_2.17 sprofil F -GLIBC_2.17 srand F -GLIBC_2.17 srand48 F -GLIBC_2.17 srand48_r F -GLIBC_2.17 srandom F -GLIBC_2.17 srandom_r F -GLIBC_2.17 sscanf F -GLIBC_2.17 ssignal F -GLIBC_2.17 sstk F -GLIBC_2.17 statfs F -GLIBC_2.17 statfs64 F -GLIBC_2.17 statvfs F -GLIBC_2.17 statvfs64 F -GLIBC_2.17 stderr D 0x8 -GLIBC_2.17 stdin D 0x8 -GLIBC_2.17 stdout D 0x8 -GLIBC_2.17 step F -GLIBC_2.17 stime F -GLIBC_2.17 stpcpy F -GLIBC_2.17 stpncpy F -GLIBC_2.17 strcasecmp F -GLIBC_2.17 strcasecmp_l F -GLIBC_2.17 strcasestr F -GLIBC_2.17 strcat F -GLIBC_2.17 strchr F -GLIBC_2.17 strchrnul F -GLIBC_2.17 strcmp F -GLIBC_2.17 strcoll F -GLIBC_2.17 strcoll_l F -GLIBC_2.17 strcpy F -GLIBC_2.17 strcspn F -GLIBC_2.17 strdup F -GLIBC_2.17 strerror F -GLIBC_2.17 strerror_l F -GLIBC_2.17 strerror_r F -GLIBC_2.17 strfmon F -GLIBC_2.17 strfmon_l F -GLIBC_2.17 strfry F -GLIBC_2.17 strftime F -GLIBC_2.17 strftime_l F -GLIBC_2.17 strlen F -GLIBC_2.17 strncasecmp F -GLIBC_2.17 strncasecmp_l F -GLIBC_2.17 strncat F -GLIBC_2.17 strncmp F -GLIBC_2.17 strncpy F -GLIBC_2.17 strndup F -GLIBC_2.17 strnlen F -GLIBC_2.17 strpbrk F -GLIBC_2.17 strptime F -GLIBC_2.17 strptime_l F -GLIBC_2.17 strrchr F -GLIBC_2.17 strsep F -GLIBC_2.17 strsignal F -GLIBC_2.17 strspn F -GLIBC_2.17 strstr F -GLIBC_2.17 strtod F -GLIBC_2.17 strtod_l F -GLIBC_2.17 strtof F -GLIBC_2.17 strtof_l F -GLIBC_2.17 strtoimax F -GLIBC_2.17 strtok F -GLIBC_2.17 strtok_r F -GLIBC_2.17 strtol F -GLIBC_2.17 strtol_l F -GLIBC_2.17 strtold F -GLIBC_2.17 strtold_l F -GLIBC_2.17 strtoll F -GLIBC_2.17 strtoll_l F -GLIBC_2.17 strtoq F -GLIBC_2.17 strtoul F -GLIBC_2.17 strtoul_l F -GLIBC_2.17 strtoull F -GLIBC_2.17 strtoull_l F -GLIBC_2.17 strtoumax F -GLIBC_2.17 strtouq F -GLIBC_2.17 strverscmp F -GLIBC_2.17 strxfrm F -GLIBC_2.17 strxfrm_l F -GLIBC_2.17 stty F -GLIBC_2.17 svc_exit F -GLIBC_2.17 svc_fdset D 0x80 -GLIBC_2.17 svc_getreq F -GLIBC_2.17 svc_getreq_common F -GLIBC_2.17 svc_getreq_poll F -GLIBC_2.17 svc_getreqset F -GLIBC_2.17 svc_max_pollfd D 0x4 -GLIBC_2.17 svc_pollfd D 0x8 -GLIBC_2.17 svc_register F -GLIBC_2.17 svc_run F -GLIBC_2.17 svc_sendreply F -GLIBC_2.17 svc_unregister F -GLIBC_2.17 svcauthdes_stats D 0x18 -GLIBC_2.17 svcerr_auth F -GLIBC_2.17 svcerr_decode F -GLIBC_2.17 svcerr_noproc F -GLIBC_2.17 svcerr_noprog F -GLIBC_2.17 svcerr_progvers F -GLIBC_2.17 svcerr_systemerr F -GLIBC_2.17 svcerr_weakauth F -GLIBC_2.17 svcfd_create F -GLIBC_2.17 svcraw_create F -GLIBC_2.17 svctcp_create F -GLIBC_2.17 svcudp_bufcreate F -GLIBC_2.17 svcudp_create F -GLIBC_2.17 svcudp_enablecache F -GLIBC_2.17 svcunix_create F -GLIBC_2.17 svcunixfd_create F -GLIBC_2.17 swab F -GLIBC_2.17 swapcontext F -GLIBC_2.17 swapoff F -GLIBC_2.17 swapon F -GLIBC_2.17 swprintf F -GLIBC_2.17 swscanf F -GLIBC_2.17 symlink F -GLIBC_2.17 symlinkat F -GLIBC_2.17 sync F -GLIBC_2.17 sync_file_range F -GLIBC_2.17 syncfs F -GLIBC_2.17 sys_errlist D 0x438 -GLIBC_2.17 sys_nerr D 0x4 -GLIBC_2.17 sys_sigabbrev D 0x208 -GLIBC_2.17 sys_siglist D 0x208 -GLIBC_2.17 syscall F -GLIBC_2.17 sysconf F -GLIBC_2.17 sysctl F -GLIBC_2.17 sysinfo F -GLIBC_2.17 syslog F -GLIBC_2.17 system F -GLIBC_2.17 sysv_signal F -GLIBC_2.17 tcdrain F -GLIBC_2.17 tcflow F -GLIBC_2.17 tcflush F -GLIBC_2.17 tcgetattr F -GLIBC_2.17 tcgetpgrp F -GLIBC_2.17 tcgetsid F -GLIBC_2.17 tcsendbreak F -GLIBC_2.17 tcsetattr F -GLIBC_2.17 tcsetpgrp F -GLIBC_2.17 tdelete F -GLIBC_2.17 tdestroy F -GLIBC_2.17 tee F -GLIBC_2.17 telldir F -GLIBC_2.17 tempnam F -GLIBC_2.17 textdomain F -GLIBC_2.17 tfind F -GLIBC_2.17 time F -GLIBC_2.17 timegm F -GLIBC_2.17 timelocal F -GLIBC_2.17 timerfd_create F -GLIBC_2.17 timerfd_gettime F -GLIBC_2.17 timerfd_settime F -GLIBC_2.17 times F -GLIBC_2.17 timespec_get F -GLIBC_2.17 timezone D 0x8 -GLIBC_2.17 tmpfile F -GLIBC_2.17 tmpfile64 F -GLIBC_2.17 tmpnam F -GLIBC_2.17 tmpnam_r F -GLIBC_2.17 toascii F -GLIBC_2.17 tolower F -GLIBC_2.17 tolower_l F -GLIBC_2.17 toupper F -GLIBC_2.17 toupper_l F -GLIBC_2.17 towctrans F -GLIBC_2.17 towctrans_l F -GLIBC_2.17 towlower F -GLIBC_2.17 towlower_l F -GLIBC_2.17 towupper F -GLIBC_2.17 towupper_l F -GLIBC_2.17 tr_break F -GLIBC_2.17 truncate F -GLIBC_2.17 truncate64 F -GLIBC_2.17 tsearch F -GLIBC_2.17 ttyname F -GLIBC_2.17 ttyname_r F -GLIBC_2.17 ttyslot F -GLIBC_2.17 twalk F -GLIBC_2.17 tzname D 0x10 -GLIBC_2.17 tzset F -GLIBC_2.17 ualarm F -GLIBC_2.17 ulckpwdf F -GLIBC_2.17 ulimit F -GLIBC_2.17 umask F -GLIBC_2.17 umount F -GLIBC_2.17 umount2 F -GLIBC_2.17 uname F -GLIBC_2.17 ungetc F -GLIBC_2.17 ungetwc F -GLIBC_2.17 unlink F -GLIBC_2.17 unlinkat F -GLIBC_2.17 unlockpt F -GLIBC_2.17 unsetenv F -GLIBC_2.17 unshare F -GLIBC_2.17 updwtmp F -GLIBC_2.17 updwtmpx F -GLIBC_2.17 uselib F -GLIBC_2.17 uselocale F -GLIBC_2.17 user2netname F -GLIBC_2.17 usleep F -GLIBC_2.17 ustat F -GLIBC_2.17 utime F -GLIBC_2.17 utimensat F -GLIBC_2.17 utimes F -GLIBC_2.17 utmpname F -GLIBC_2.17 utmpxname F -GLIBC_2.17 valloc F -GLIBC_2.17 vasprintf F -GLIBC_2.17 vdprintf F -GLIBC_2.17 verr F -GLIBC_2.17 verrx F -GLIBC_2.17 versionsort F -GLIBC_2.17 versionsort64 F -GLIBC_2.17 vfork F -GLIBC_2.17 vfprintf F -GLIBC_2.17 vfscanf F -GLIBC_2.17 vfwprintf F -GLIBC_2.17 vfwscanf F -GLIBC_2.17 vhangup F -GLIBC_2.17 vlimit F -GLIBC_2.17 vmsplice F -GLIBC_2.17 vprintf F -GLIBC_2.17 vscanf F -GLIBC_2.17 vsnprintf F -GLIBC_2.17 vsprintf F -GLIBC_2.17 vsscanf F -GLIBC_2.17 vswprintf F -GLIBC_2.17 vswscanf F -GLIBC_2.17 vsyslog F -GLIBC_2.17 vtimes F -GLIBC_2.17 vwarn F -GLIBC_2.17 vwarnx F -GLIBC_2.17 vwprintf F -GLIBC_2.17 vwscanf F -GLIBC_2.17 wait F -GLIBC_2.17 wait3 F -GLIBC_2.17 wait4 F -GLIBC_2.17 waitid F -GLIBC_2.17 waitpid F -GLIBC_2.17 warn F -GLIBC_2.17 warnx F -GLIBC_2.17 wcpcpy F -GLIBC_2.17 wcpncpy F -GLIBC_2.17 wcrtomb F -GLIBC_2.17 wcscasecmp F -GLIBC_2.17 wcscasecmp_l F -GLIBC_2.17 wcscat F -GLIBC_2.17 wcschr F -GLIBC_2.17 wcschrnul F -GLIBC_2.17 wcscmp F -GLIBC_2.17 wcscoll F -GLIBC_2.17 wcscoll_l F -GLIBC_2.17 wcscpy F -GLIBC_2.17 wcscspn F -GLIBC_2.17 wcsdup F -GLIBC_2.17 wcsftime F -GLIBC_2.17 wcsftime_l F -GLIBC_2.17 wcslen F -GLIBC_2.17 wcsncasecmp F -GLIBC_2.17 wcsncasecmp_l F -GLIBC_2.17 wcsncat F -GLIBC_2.17 wcsncmp F -GLIBC_2.17 wcsncpy F -GLIBC_2.17 wcsnlen F -GLIBC_2.17 wcsnrtombs F -GLIBC_2.17 wcspbrk F -GLIBC_2.17 wcsrchr F -GLIBC_2.17 wcsrtombs F -GLIBC_2.17 wcsspn F -GLIBC_2.17 wcsstr F -GLIBC_2.17 wcstod F -GLIBC_2.17 wcstod_l F -GLIBC_2.17 wcstof F -GLIBC_2.17 wcstof_l F -GLIBC_2.17 wcstoimax F -GLIBC_2.17 wcstok F -GLIBC_2.17 wcstol F -GLIBC_2.17 wcstol_l F -GLIBC_2.17 wcstold F -GLIBC_2.17 wcstold_l F -GLIBC_2.17 wcstoll F -GLIBC_2.17 wcstoll_l F -GLIBC_2.17 wcstombs F -GLIBC_2.17 wcstoq F -GLIBC_2.17 wcstoul F -GLIBC_2.17 wcstoul_l F -GLIBC_2.17 wcstoull F -GLIBC_2.17 wcstoull_l F -GLIBC_2.17 wcstoumax F -GLIBC_2.17 wcstouq F -GLIBC_2.17 wcswcs F -GLIBC_2.17 wcswidth F -GLIBC_2.17 wcsxfrm F -GLIBC_2.17 wcsxfrm_l F -GLIBC_2.17 wctob F -GLIBC_2.17 wctomb F -GLIBC_2.17 wctrans F -GLIBC_2.17 wctrans_l F -GLIBC_2.17 wctype F -GLIBC_2.17 wctype_l F -GLIBC_2.17 wcwidth F -GLIBC_2.17 wmemchr F -GLIBC_2.17 wmemcmp F -GLIBC_2.17 wmemcpy F -GLIBC_2.17 wmemmove F -GLIBC_2.17 wmempcpy F -GLIBC_2.17 wmemset F -GLIBC_2.17 wordexp F -GLIBC_2.17 wordfree F -GLIBC_2.17 wprintf F -GLIBC_2.17 write F -GLIBC_2.17 writev F -GLIBC_2.17 wscanf F -GLIBC_2.17 xdecrypt F -GLIBC_2.17 xdr_accepted_reply F -GLIBC_2.17 xdr_array F -GLIBC_2.17 xdr_authdes_cred F -GLIBC_2.17 xdr_authdes_verf F -GLIBC_2.17 xdr_authunix_parms F -GLIBC_2.17 xdr_bool F -GLIBC_2.17 xdr_bytes F -GLIBC_2.17 xdr_callhdr F -GLIBC_2.17 xdr_callmsg F -GLIBC_2.17 xdr_char F -GLIBC_2.17 xdr_cryptkeyarg F -GLIBC_2.17 xdr_cryptkeyarg2 F -GLIBC_2.17 xdr_cryptkeyres F -GLIBC_2.17 xdr_des_block F -GLIBC_2.17 xdr_double F -GLIBC_2.17 xdr_enum F -GLIBC_2.17 xdr_float F -GLIBC_2.17 xdr_free F -GLIBC_2.17 xdr_getcredres F -GLIBC_2.17 xdr_hyper F -GLIBC_2.17 xdr_int F -GLIBC_2.17 xdr_int16_t F -GLIBC_2.17 xdr_int32_t F -GLIBC_2.17 xdr_int64_t F -GLIBC_2.17 xdr_int8_t F -GLIBC_2.17 xdr_key_netstarg F -GLIBC_2.17 xdr_key_netstres F -GLIBC_2.17 xdr_keybuf F -GLIBC_2.17 xdr_keystatus F -GLIBC_2.17 xdr_long F -GLIBC_2.17 xdr_longlong_t F -GLIBC_2.17 xdr_netnamestr F -GLIBC_2.17 xdr_netobj F -GLIBC_2.17 xdr_opaque F -GLIBC_2.17 xdr_opaque_auth F -GLIBC_2.17 xdr_pmap F -GLIBC_2.17 xdr_pmaplist F -GLIBC_2.17 xdr_pointer F -GLIBC_2.17 xdr_quad_t F -GLIBC_2.17 xdr_reference F -GLIBC_2.17 xdr_rejected_reply F -GLIBC_2.17 xdr_replymsg F -GLIBC_2.17 xdr_rmtcall_args F -GLIBC_2.17 xdr_rmtcallres F -GLIBC_2.17 xdr_short F -GLIBC_2.17 xdr_sizeof F -GLIBC_2.17 xdr_string F -GLIBC_2.17 xdr_u_char F -GLIBC_2.17 xdr_u_hyper F -GLIBC_2.17 xdr_u_int F -GLIBC_2.17 xdr_u_long F -GLIBC_2.17 xdr_u_longlong_t F -GLIBC_2.17 xdr_u_quad_t F -GLIBC_2.17 xdr_u_short F -GLIBC_2.17 xdr_uint16_t F -GLIBC_2.17 xdr_uint32_t F -GLIBC_2.17 xdr_uint64_t F -GLIBC_2.17 xdr_uint8_t F -GLIBC_2.17 xdr_union F -GLIBC_2.17 xdr_unixcred F -GLIBC_2.17 xdr_vector F -GLIBC_2.17 xdr_void F -GLIBC_2.17 xdr_wrapstring F -GLIBC_2.17 xdrmem_create F -GLIBC_2.17 xdrrec_create F -GLIBC_2.17 xdrrec_endofrecord F -GLIBC_2.17 xdrrec_eof F -GLIBC_2.17 xdrrec_skiprecord F -GLIBC_2.17 xdrstdio_create F -GLIBC_2.17 xencrypt F -GLIBC_2.17 xprt_register F -GLIBC_2.17 xprt_unregister F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.18 _mcount F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F diff --git a/sysdeps/unix/sysv/linux/aarch64/libcrypt.abilist b/sysdeps/unix/sysv/linux/aarch64/libcrypt.abilist deleted file mode 100644 index 58944b3d83..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 crypt F -GLIBC_2.17 crypt_r F -GLIBC_2.17 encrypt F -GLIBC_2.17 encrypt_r F -GLIBC_2.17 fcrypt F -GLIBC_2.17 setkey F -GLIBC_2.17 setkey_r F diff --git a/sysdeps/unix/sysv/linux/aarch64/libdl.abilist b/sysdeps/unix/sysv/linux/aarch64/libdl.abilist deleted file mode 100644 index 1b4b1f77ed..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/libdl.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 dladdr F -GLIBC_2.17 dladdr1 F -GLIBC_2.17 dlclose F -GLIBC_2.17 dlerror F -GLIBC_2.17 dlinfo F -GLIBC_2.17 dlmopen F -GLIBC_2.17 dlopen F -GLIBC_2.17 dlsym F -GLIBC_2.17 dlvsym F diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist deleted file mode 100644 index 6266864ea7..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ /dev/null @@ -1,462 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 _LIB_VERSION D 0x4 -GLIBC_2.17 __acos_finite F -GLIBC_2.17 __acosf_finite F -GLIBC_2.17 __acosh_finite F -GLIBC_2.17 __acoshf_finite F -GLIBC_2.17 __acoshl_finite F -GLIBC_2.17 __acosl_finite F -GLIBC_2.17 __asin_finite F -GLIBC_2.17 __asinf_finite F -GLIBC_2.17 __asinl_finite F -GLIBC_2.17 __atan2_finite F -GLIBC_2.17 __atan2f_finite F -GLIBC_2.17 __atan2l_finite F -GLIBC_2.17 __atanh_finite F -GLIBC_2.17 __atanhf_finite F -GLIBC_2.17 __atanhl_finite F -GLIBC_2.17 __clog10 F -GLIBC_2.17 __clog10f F -GLIBC_2.17 __clog10l F -GLIBC_2.17 __cosh_finite F -GLIBC_2.17 __coshf_finite F -GLIBC_2.17 __coshl_finite F -GLIBC_2.17 __exp10_finite F -GLIBC_2.17 __exp10f_finite F -GLIBC_2.17 __exp10l_finite F -GLIBC_2.17 __exp2_finite F -GLIBC_2.17 __exp2f_finite F -GLIBC_2.17 __exp2l_finite F -GLIBC_2.17 __exp_finite F -GLIBC_2.17 __expf_finite F -GLIBC_2.17 __expl_finite F -GLIBC_2.17 __finite F -GLIBC_2.17 __finitef F -GLIBC_2.17 __finitel F -GLIBC_2.17 __fmod_finite F -GLIBC_2.17 __fmodf_finite F -GLIBC_2.17 __fmodl_finite F -GLIBC_2.17 __fpclassify F -GLIBC_2.17 __fpclassifyf F -GLIBC_2.17 __fpclassifyl F -GLIBC_2.17 __gamma_r_finite F -GLIBC_2.17 __gammaf_r_finite F -GLIBC_2.17 __gammal_r_finite F -GLIBC_2.17 __hypot_finite F -GLIBC_2.17 __hypotf_finite F -GLIBC_2.17 __hypotl_finite F -GLIBC_2.17 __j0_finite F -GLIBC_2.17 __j0f_finite F -GLIBC_2.17 __j0l_finite F -GLIBC_2.17 __j1_finite F -GLIBC_2.17 __j1f_finite F -GLIBC_2.17 __j1l_finite F -GLIBC_2.17 __jn_finite F -GLIBC_2.17 __jnf_finite F -GLIBC_2.17 __jnl_finite F -GLIBC_2.17 __lgamma_r_finite F -GLIBC_2.17 __lgammaf_r_finite F -GLIBC_2.17 __lgammal_r_finite F -GLIBC_2.17 __log10_finite F -GLIBC_2.17 __log10f_finite F -GLIBC_2.17 __log10l_finite F -GLIBC_2.17 __log2_finite F -GLIBC_2.17 __log2f_finite F -GLIBC_2.17 __log2l_finite F -GLIBC_2.17 __log_finite F -GLIBC_2.17 __logf_finite F -GLIBC_2.17 __logl_finite F -GLIBC_2.17 __pow_finite F -GLIBC_2.17 __powf_finite F -GLIBC_2.17 __powl_finite F -GLIBC_2.17 __remainder_finite F -GLIBC_2.17 __remainderf_finite F -GLIBC_2.17 __remainderl_finite F -GLIBC_2.17 __scalb_finite F -GLIBC_2.17 __scalbf_finite F -GLIBC_2.17 __scalbl_finite F -GLIBC_2.17 __signbit F -GLIBC_2.17 __signbitf F -GLIBC_2.17 __signbitl F -GLIBC_2.17 __sinh_finite F -GLIBC_2.17 __sinhf_finite F -GLIBC_2.17 __sinhl_finite F -GLIBC_2.17 __sqrt_finite F -GLIBC_2.17 __sqrtf_finite F -GLIBC_2.17 __sqrtl_finite F -GLIBC_2.17 __y0_finite F -GLIBC_2.17 __y0f_finite F -GLIBC_2.17 __y0l_finite F -GLIBC_2.17 __y1_finite F -GLIBC_2.17 __y1f_finite F -GLIBC_2.17 __y1l_finite F -GLIBC_2.17 __yn_finite F -GLIBC_2.17 __ynf_finite F -GLIBC_2.17 __ynl_finite F -GLIBC_2.17 acos F -GLIBC_2.17 acosf F -GLIBC_2.17 acosh F -GLIBC_2.17 acoshf F -GLIBC_2.17 acoshl F -GLIBC_2.17 acosl F -GLIBC_2.17 asin F -GLIBC_2.17 asinf F -GLIBC_2.17 asinh F -GLIBC_2.17 asinhf F -GLIBC_2.17 asinhl F -GLIBC_2.17 asinl F -GLIBC_2.17 atan F -GLIBC_2.17 atan2 F -GLIBC_2.17 atan2f F -GLIBC_2.17 atan2l F -GLIBC_2.17 atanf F -GLIBC_2.17 atanh F -GLIBC_2.17 atanhf F -GLIBC_2.17 atanhl F -GLIBC_2.17 atanl F -GLIBC_2.17 cabs F -GLIBC_2.17 cabsf F -GLIBC_2.17 cabsl F -GLIBC_2.17 cacos F -GLIBC_2.17 cacosf F -GLIBC_2.17 cacosh F -GLIBC_2.17 cacoshf F -GLIBC_2.17 cacoshl F -GLIBC_2.17 cacosl F -GLIBC_2.17 carg F -GLIBC_2.17 cargf F -GLIBC_2.17 cargl F -GLIBC_2.17 casin F -GLIBC_2.17 casinf F -GLIBC_2.17 casinh F -GLIBC_2.17 casinhf F -GLIBC_2.17 casinhl F -GLIBC_2.17 casinl F -GLIBC_2.17 catan F -GLIBC_2.17 catanf F -GLIBC_2.17 catanh F -GLIBC_2.17 catanhf F -GLIBC_2.17 catanhl F -GLIBC_2.17 catanl F -GLIBC_2.17 cbrt F -GLIBC_2.17 cbrtf F -GLIBC_2.17 cbrtl F -GLIBC_2.17 ccos F -GLIBC_2.17 ccosf F -GLIBC_2.17 ccosh F -GLIBC_2.17 ccoshf F -GLIBC_2.17 ccoshl F -GLIBC_2.17 ccosl F -GLIBC_2.17 ceil F -GLIBC_2.17 ceilf F -GLIBC_2.17 ceill F -GLIBC_2.17 cexp F -GLIBC_2.17 cexpf F -GLIBC_2.17 cexpl F -GLIBC_2.17 cimag F -GLIBC_2.17 cimagf F -GLIBC_2.17 cimagl F -GLIBC_2.17 clog F -GLIBC_2.17 clog10 F -GLIBC_2.17 clog10f F -GLIBC_2.17 clog10l F -GLIBC_2.17 clogf F -GLIBC_2.17 clogl F -GLIBC_2.17 conj F -GLIBC_2.17 conjf F -GLIBC_2.17 conjl F -GLIBC_2.17 copysign F -GLIBC_2.17 copysignf F -GLIBC_2.17 copysignl F -GLIBC_2.17 cos F -GLIBC_2.17 cosf F -GLIBC_2.17 cosh F -GLIBC_2.17 coshf F -GLIBC_2.17 coshl F -GLIBC_2.17 cosl F -GLIBC_2.17 cpow F -GLIBC_2.17 cpowf F -GLIBC_2.17 cpowl F -GLIBC_2.17 cproj F -GLIBC_2.17 cprojf F -GLIBC_2.17 cprojl F -GLIBC_2.17 creal F -GLIBC_2.17 crealf F -GLIBC_2.17 creall F -GLIBC_2.17 csin F -GLIBC_2.17 csinf F -GLIBC_2.17 csinh F -GLIBC_2.17 csinhf F -GLIBC_2.17 csinhl F -GLIBC_2.17 csinl F -GLIBC_2.17 csqrt F -GLIBC_2.17 csqrtf F -GLIBC_2.17 csqrtl F -GLIBC_2.17 ctan F -GLIBC_2.17 ctanf F -GLIBC_2.17 ctanh F -GLIBC_2.17 ctanhf F -GLIBC_2.17 ctanhl F -GLIBC_2.17 ctanl F -GLIBC_2.17 drem F -GLIBC_2.17 dremf F -GLIBC_2.17 dreml F -GLIBC_2.17 erf F -GLIBC_2.17 erfc F -GLIBC_2.17 erfcf F -GLIBC_2.17 erfcl F -GLIBC_2.17 erff F -GLIBC_2.17 erfl F -GLIBC_2.17 exp F -GLIBC_2.17 exp10 F -GLIBC_2.17 exp10f F -GLIBC_2.17 exp10l F -GLIBC_2.17 exp2 F -GLIBC_2.17 exp2f F -GLIBC_2.17 exp2l F -GLIBC_2.17 expf F -GLIBC_2.17 expl F -GLIBC_2.17 expm1 F -GLIBC_2.17 expm1f F -GLIBC_2.17 expm1l F -GLIBC_2.17 fabs F -GLIBC_2.17 fabsf F -GLIBC_2.17 fabsl F -GLIBC_2.17 fdim F -GLIBC_2.17 fdimf F -GLIBC_2.17 fdiml F -GLIBC_2.17 feclearexcept F -GLIBC_2.17 fedisableexcept F -GLIBC_2.17 feenableexcept F -GLIBC_2.17 fegetenv F -GLIBC_2.17 fegetexcept F -GLIBC_2.17 fegetexceptflag F -GLIBC_2.17 fegetround F -GLIBC_2.17 feholdexcept F -GLIBC_2.17 feraiseexcept F -GLIBC_2.17 fesetenv F -GLIBC_2.17 fesetexceptflag F -GLIBC_2.17 fesetround F -GLIBC_2.17 fetestexcept F -GLIBC_2.17 feupdateenv F -GLIBC_2.17 finite F -GLIBC_2.17 finitef F -GLIBC_2.17 finitel F -GLIBC_2.17 floor F -GLIBC_2.17 floorf F -GLIBC_2.17 floorl F -GLIBC_2.17 fma F -GLIBC_2.17 fmaf F -GLIBC_2.17 fmal F -GLIBC_2.17 fmax F -GLIBC_2.17 fmaxf F -GLIBC_2.17 fmaxl F -GLIBC_2.17 fmin F -GLIBC_2.17 fminf F -GLIBC_2.17 fminl F -GLIBC_2.17 fmod F -GLIBC_2.17 fmodf F -GLIBC_2.17 fmodl F -GLIBC_2.17 frexp F -GLIBC_2.17 frexpf F -GLIBC_2.17 frexpl F -GLIBC_2.17 gamma F -GLIBC_2.17 gammaf F -GLIBC_2.17 gammal F -GLIBC_2.17 hypot F -GLIBC_2.17 hypotf F -GLIBC_2.17 hypotl F -GLIBC_2.17 ilogb F -GLIBC_2.17 ilogbf F -GLIBC_2.17 ilogbl F -GLIBC_2.17 j0 F -GLIBC_2.17 j0f F -GLIBC_2.17 j0l F -GLIBC_2.17 j1 F -GLIBC_2.17 j1f F -GLIBC_2.17 j1l F -GLIBC_2.17 jn F -GLIBC_2.17 jnf F -GLIBC_2.17 jnl F -GLIBC_2.17 ldexp F -GLIBC_2.17 ldexpf F -GLIBC_2.17 ldexpl F -GLIBC_2.17 lgamma F -GLIBC_2.17 lgamma_r F -GLIBC_2.17 lgammaf F -GLIBC_2.17 lgammaf_r F -GLIBC_2.17 lgammal F -GLIBC_2.17 lgammal_r F -GLIBC_2.17 llrint F -GLIBC_2.17 llrintf F -GLIBC_2.17 llrintl F -GLIBC_2.17 llround F -GLIBC_2.17 llroundf F -GLIBC_2.17 llroundl F -GLIBC_2.17 log F -GLIBC_2.17 log10 F -GLIBC_2.17 log10f F -GLIBC_2.17 log10l F -GLIBC_2.17 log1p F -GLIBC_2.17 log1pf F -GLIBC_2.17 log1pl F -GLIBC_2.17 log2 F -GLIBC_2.17 log2f F -GLIBC_2.17 log2l F -GLIBC_2.17 logb F -GLIBC_2.17 logbf F -GLIBC_2.17 logbl F -GLIBC_2.17 logf F -GLIBC_2.17 logl F -GLIBC_2.17 lrint F -GLIBC_2.17 lrintf F -GLIBC_2.17 lrintl F -GLIBC_2.17 lround F -GLIBC_2.17 lroundf F -GLIBC_2.17 lroundl F -GLIBC_2.17 matherr F -GLIBC_2.17 modf F -GLIBC_2.17 modff F -GLIBC_2.17 modfl F -GLIBC_2.17 nan F -GLIBC_2.17 nanf F -GLIBC_2.17 nanl F -GLIBC_2.17 nearbyint F -GLIBC_2.17 nearbyintf F -GLIBC_2.17 nearbyintl F -GLIBC_2.17 nextafter F -GLIBC_2.17 nextafterf F -GLIBC_2.17 nextafterl F -GLIBC_2.17 nexttoward F -GLIBC_2.17 nexttowardf F -GLIBC_2.17 nexttowardl F -GLIBC_2.17 pow F -GLIBC_2.17 pow10 F -GLIBC_2.17 pow10f F -GLIBC_2.17 pow10l F -GLIBC_2.17 powf F -GLIBC_2.17 powl F -GLIBC_2.17 remainder F -GLIBC_2.17 remainderf F -GLIBC_2.17 remainderl F -GLIBC_2.17 remquo F -GLIBC_2.17 remquof F -GLIBC_2.17 remquol F -GLIBC_2.17 rint F -GLIBC_2.17 rintf F -GLIBC_2.17 rintl F -GLIBC_2.17 round F -GLIBC_2.17 roundf F -GLIBC_2.17 roundl F -GLIBC_2.17 scalb F -GLIBC_2.17 scalbf F -GLIBC_2.17 scalbl F -GLIBC_2.17 scalbln F -GLIBC_2.17 scalblnf F -GLIBC_2.17 scalblnl F -GLIBC_2.17 scalbn F -GLIBC_2.17 scalbnf F -GLIBC_2.17 scalbnl F -GLIBC_2.17 signgam D 0x4 -GLIBC_2.17 significand F -GLIBC_2.17 significandf F -GLIBC_2.17 significandl F -GLIBC_2.17 sin F -GLIBC_2.17 sincos F -GLIBC_2.17 sincosf F -GLIBC_2.17 sincosl F -GLIBC_2.17 sinf F -GLIBC_2.17 sinh F -GLIBC_2.17 sinhf F -GLIBC_2.17 sinhl F -GLIBC_2.17 sinl F -GLIBC_2.17 sqrt F -GLIBC_2.17 sqrtf F -GLIBC_2.17 sqrtl F -GLIBC_2.17 tan F -GLIBC_2.17 tanf F -GLIBC_2.17 tanh F -GLIBC_2.17 tanhf F -GLIBC_2.17 tanhl F -GLIBC_2.17 tanl F -GLIBC_2.17 tgamma F -GLIBC_2.17 tgammaf F -GLIBC_2.17 tgammal F -GLIBC_2.17 trunc F -GLIBC_2.17 truncf F -GLIBC_2.17 truncl F -GLIBC_2.17 y0 F -GLIBC_2.17 y0f F -GLIBC_2.17 y0l F -GLIBC_2.17 y1 F -GLIBC_2.17 y1f F -GLIBC_2.17 y1l F -GLIBC_2.17 yn F -GLIBC_2.17 ynf F -GLIBC_2.17 ynl F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F diff --git a/sysdeps/unix/sysv/linux/aarch64/libnsl.abilist b/sysdeps/unix/sysv/linux/aarch64/libnsl.abilist deleted file mode 100644 index 63d47aef79..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/libnsl.abilist +++ /dev/null @@ -1,122 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 __free_fdresult F -GLIBC_2.17 __nis_default_access F -GLIBC_2.17 __nis_default_group F -GLIBC_2.17 __nis_default_owner F -GLIBC_2.17 __nis_default_ttl F -GLIBC_2.17 __nis_finddirectory F -GLIBC_2.17 __nis_hash F -GLIBC_2.17 __nisbind_connect F -GLIBC_2.17 __nisbind_create F -GLIBC_2.17 __nisbind_destroy F -GLIBC_2.17 __nisbind_next F -GLIBC_2.17 __yp_check F -GLIBC_2.17 nis_add F -GLIBC_2.17 nis_add_entry F -GLIBC_2.17 nis_addmember F -GLIBC_2.17 nis_checkpoint F -GLIBC_2.17 nis_clone_directory F -GLIBC_2.17 nis_clone_object F -GLIBC_2.17 nis_clone_result F -GLIBC_2.17 nis_creategroup F -GLIBC_2.17 nis_destroy_object F -GLIBC_2.17 nis_destroygroup F -GLIBC_2.17 nis_dir_cmp F -GLIBC_2.17 nis_domain_of F -GLIBC_2.17 nis_domain_of_r F -GLIBC_2.17 nis_first_entry F -GLIBC_2.17 nis_free_directory F -GLIBC_2.17 nis_free_object F -GLIBC_2.17 nis_free_request F -GLIBC_2.17 nis_freenames F -GLIBC_2.17 nis_freeresult F -GLIBC_2.17 nis_freeservlist F -GLIBC_2.17 nis_freetags F -GLIBC_2.17 nis_getnames F -GLIBC_2.17 nis_getservlist F -GLIBC_2.17 nis_ismember F -GLIBC_2.17 nis_leaf_of F -GLIBC_2.17 nis_leaf_of_r F -GLIBC_2.17 nis_lerror F -GLIBC_2.17 nis_list F -GLIBC_2.17 nis_local_directory F -GLIBC_2.17 nis_local_group F -GLIBC_2.17 nis_local_host F -GLIBC_2.17 nis_local_principal F -GLIBC_2.17 nis_lookup F -GLIBC_2.17 nis_mkdir F -GLIBC_2.17 nis_modify F -GLIBC_2.17 nis_modify_entry F -GLIBC_2.17 nis_name_of F -GLIBC_2.17 nis_name_of_r F -GLIBC_2.17 nis_next_entry F -GLIBC_2.17 nis_perror F -GLIBC_2.17 nis_ping F -GLIBC_2.17 nis_print_directory F -GLIBC_2.17 nis_print_entry F -GLIBC_2.17 nis_print_group F -GLIBC_2.17 nis_print_group_entry F -GLIBC_2.17 nis_print_link F -GLIBC_2.17 nis_print_object F -GLIBC_2.17 nis_print_result F -GLIBC_2.17 nis_print_rights F -GLIBC_2.17 nis_print_table F -GLIBC_2.17 nis_read_obj F -GLIBC_2.17 nis_remove F -GLIBC_2.17 nis_remove_entry F -GLIBC_2.17 nis_removemember F -GLIBC_2.17 nis_rmdir F -GLIBC_2.17 nis_servstate F -GLIBC_2.17 nis_sperrno F -GLIBC_2.17 nis_sperror F -GLIBC_2.17 nis_sperror_r F -GLIBC_2.17 nis_stats F -GLIBC_2.17 nis_verifygroup F -GLIBC_2.17 nis_write_obj F -GLIBC_2.17 readColdStartFile F -GLIBC_2.17 writeColdStartFile F -GLIBC_2.17 xdr_cback_data F -GLIBC_2.17 xdr_domainname F -GLIBC_2.17 xdr_keydat F -GLIBC_2.17 xdr_mapname F -GLIBC_2.17 xdr_obj_p F -GLIBC_2.17 xdr_peername F -GLIBC_2.17 xdr_valdat F -GLIBC_2.17 xdr_yp_buf F -GLIBC_2.17 xdr_ypall F -GLIBC_2.17 xdr_ypbind_binding F -GLIBC_2.17 xdr_ypbind_resp F -GLIBC_2.17 xdr_ypbind_resptype F -GLIBC_2.17 xdr_ypbind_setdom F -GLIBC_2.17 xdr_ypdelete_args F -GLIBC_2.17 xdr_ypmap_parms F -GLIBC_2.17 xdr_ypmaplist F -GLIBC_2.17 xdr_yppush_status F -GLIBC_2.17 xdr_yppushresp_xfr F -GLIBC_2.17 xdr_ypreq_key F -GLIBC_2.17 xdr_ypreq_nokey F -GLIBC_2.17 xdr_ypreq_xfr F -GLIBC_2.17 xdr_ypresp_all F -GLIBC_2.17 xdr_ypresp_key_val F -GLIBC_2.17 xdr_ypresp_maplist F -GLIBC_2.17 xdr_ypresp_master F -GLIBC_2.17 xdr_ypresp_order F -GLIBC_2.17 xdr_ypresp_val F -GLIBC_2.17 xdr_ypresp_xfr F -GLIBC_2.17 xdr_ypstat F -GLIBC_2.17 xdr_ypupdate_args F -GLIBC_2.17 xdr_ypxfrstat F -GLIBC_2.17 yp_all F -GLIBC_2.17 yp_bind F -GLIBC_2.17 yp_first F -GLIBC_2.17 yp_get_default_domain F -GLIBC_2.17 yp_maplist F -GLIBC_2.17 yp_master F -GLIBC_2.17 yp_match F -GLIBC_2.17 yp_next F -GLIBC_2.17 yp_order F -GLIBC_2.17 yp_unbind F -GLIBC_2.17 yp_update F -GLIBC_2.17 ypbinderr_string F -GLIBC_2.17 yperr_string F -GLIBC_2.17 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist deleted file mode 100644 index 0cf30ee02f..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist +++ /dev/null @@ -1,226 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 _IO_flockfile F -GLIBC_2.17 _IO_ftrylockfile F -GLIBC_2.17 _IO_funlockfile F -GLIBC_2.17 __close F -GLIBC_2.17 __connect F -GLIBC_2.17 __errno_location F -GLIBC_2.17 __fcntl F -GLIBC_2.17 __fork F -GLIBC_2.17 __h_errno_location F -GLIBC_2.17 __libc_allocate_rtsig F -GLIBC_2.17 __libc_current_sigrtmax F -GLIBC_2.17 __libc_current_sigrtmin F -GLIBC_2.17 __lseek F -GLIBC_2.17 __nanosleep F -GLIBC_2.17 __open F -GLIBC_2.17 __open64 F -GLIBC_2.17 __pread64 F -GLIBC_2.17 __pthread_cleanup_routine F -GLIBC_2.17 __pthread_getspecific F -GLIBC_2.17 __pthread_key_create F -GLIBC_2.17 __pthread_mutex_destroy F -GLIBC_2.17 __pthread_mutex_init F -GLIBC_2.17 __pthread_mutex_lock F -GLIBC_2.17 __pthread_mutex_trylock F -GLIBC_2.17 __pthread_mutex_unlock F -GLIBC_2.17 __pthread_mutexattr_destroy F -GLIBC_2.17 __pthread_mutexattr_init F -GLIBC_2.17 __pthread_mutexattr_settype F -GLIBC_2.17 __pthread_once F -GLIBC_2.17 __pthread_register_cancel F -GLIBC_2.17 __pthread_register_cancel_defer F -GLIBC_2.17 __pthread_rwlock_destroy F -GLIBC_2.17 __pthread_rwlock_init F -GLIBC_2.17 __pthread_rwlock_rdlock F -GLIBC_2.17 __pthread_rwlock_tryrdlock F -GLIBC_2.17 __pthread_rwlock_trywrlock F -GLIBC_2.17 __pthread_rwlock_unlock F -GLIBC_2.17 __pthread_rwlock_wrlock F -GLIBC_2.17 __pthread_setspecific F -GLIBC_2.17 __pthread_unregister_cancel F -GLIBC_2.17 __pthread_unregister_cancel_restore F -GLIBC_2.17 __pthread_unwind_next F -GLIBC_2.17 __pwrite64 F -GLIBC_2.17 __read F -GLIBC_2.17 __res_state F -GLIBC_2.17 __send F -GLIBC_2.17 __sigaction F -GLIBC_2.17 __vfork F -GLIBC_2.17 __wait F -GLIBC_2.17 __write F -GLIBC_2.17 _pthread_cleanup_pop F -GLIBC_2.17 _pthread_cleanup_pop_restore F -GLIBC_2.17 _pthread_cleanup_push F -GLIBC_2.17 _pthread_cleanup_push_defer F -GLIBC_2.17 accept F -GLIBC_2.17 close F -GLIBC_2.17 connect F -GLIBC_2.17 fcntl F -GLIBC_2.17 flockfile F -GLIBC_2.17 fork F -GLIBC_2.17 fsync F -GLIBC_2.17 ftrylockfile F -GLIBC_2.17 funlockfile F -GLIBC_2.17 longjmp F -GLIBC_2.17 lseek F -GLIBC_2.17 lseek64 F -GLIBC_2.17 msync F -GLIBC_2.17 nanosleep F -GLIBC_2.17 open F -GLIBC_2.17 open64 F -GLIBC_2.17 pause F -GLIBC_2.17 pread F -GLIBC_2.17 pread64 F -GLIBC_2.17 pthread_attr_destroy F -GLIBC_2.17 pthread_attr_getaffinity_np F -GLIBC_2.17 pthread_attr_getdetachstate F -GLIBC_2.17 pthread_attr_getguardsize F -GLIBC_2.17 pthread_attr_getinheritsched F -GLIBC_2.17 pthread_attr_getschedparam F -GLIBC_2.17 pthread_attr_getschedpolicy F -GLIBC_2.17 pthread_attr_getscope F -GLIBC_2.17 pthread_attr_getstack F -GLIBC_2.17 pthread_attr_getstackaddr F -GLIBC_2.17 pthread_attr_getstacksize F -GLIBC_2.17 pthread_attr_init F -GLIBC_2.17 pthread_attr_setaffinity_np F -GLIBC_2.17 pthread_attr_setdetachstate F -GLIBC_2.17 pthread_attr_setguardsize F -GLIBC_2.17 pthread_attr_setinheritsched F -GLIBC_2.17 pthread_attr_setschedparam F -GLIBC_2.17 pthread_attr_setschedpolicy F -GLIBC_2.17 pthread_attr_setscope F -GLIBC_2.17 pthread_attr_setstack F -GLIBC_2.17 pthread_attr_setstackaddr F -GLIBC_2.17 pthread_attr_setstacksize F -GLIBC_2.17 pthread_barrier_destroy F -GLIBC_2.17 pthread_barrier_init F -GLIBC_2.17 pthread_barrier_wait F -GLIBC_2.17 pthread_barrierattr_destroy F -GLIBC_2.17 pthread_barrierattr_getpshared F -GLIBC_2.17 pthread_barrierattr_init F -GLIBC_2.17 pthread_barrierattr_setpshared F -GLIBC_2.17 pthread_cancel F -GLIBC_2.17 pthread_cond_broadcast F -GLIBC_2.17 pthread_cond_destroy F -GLIBC_2.17 pthread_cond_init F -GLIBC_2.17 pthread_cond_signal F -GLIBC_2.17 pthread_cond_timedwait F -GLIBC_2.17 pthread_cond_wait F -GLIBC_2.17 pthread_condattr_destroy F -GLIBC_2.17 pthread_condattr_getclock F -GLIBC_2.17 pthread_condattr_getpshared F -GLIBC_2.17 pthread_condattr_init F -GLIBC_2.17 pthread_condattr_setclock F -GLIBC_2.17 pthread_condattr_setpshared F -GLIBC_2.17 pthread_create F -GLIBC_2.17 pthread_detach F -GLIBC_2.17 pthread_equal F -GLIBC_2.17 pthread_exit F -GLIBC_2.17 pthread_getaffinity_np F -GLIBC_2.17 pthread_getattr_np F -GLIBC_2.17 pthread_getconcurrency F -GLIBC_2.17 pthread_getcpuclockid F -GLIBC_2.17 pthread_getname_np F -GLIBC_2.17 pthread_getschedparam F -GLIBC_2.17 pthread_getspecific F -GLIBC_2.17 pthread_join F -GLIBC_2.17 pthread_key_create F -GLIBC_2.17 pthread_key_delete F -GLIBC_2.17 pthread_kill F -GLIBC_2.17 pthread_kill_other_threads_np F -GLIBC_2.17 pthread_mutex_consistent F -GLIBC_2.17 pthread_mutex_consistent_np F -GLIBC_2.17 pthread_mutex_destroy F -GLIBC_2.17 pthread_mutex_getprioceiling F -GLIBC_2.17 pthread_mutex_init F -GLIBC_2.17 pthread_mutex_lock F -GLIBC_2.17 pthread_mutex_setprioceiling F -GLIBC_2.17 pthread_mutex_timedlock F -GLIBC_2.17 pthread_mutex_trylock F -GLIBC_2.17 pthread_mutex_unlock F -GLIBC_2.17 pthread_mutexattr_destroy F -GLIBC_2.17 pthread_mutexattr_getkind_np F -GLIBC_2.17 pthread_mutexattr_getprioceiling F -GLIBC_2.17 pthread_mutexattr_getprotocol F -GLIBC_2.17 pthread_mutexattr_getpshared F -GLIBC_2.17 pthread_mutexattr_getrobust F -GLIBC_2.17 pthread_mutexattr_getrobust_np F -GLIBC_2.17 pthread_mutexattr_gettype F -GLIBC_2.17 pthread_mutexattr_init F -GLIBC_2.17 pthread_mutexattr_setkind_np F -GLIBC_2.17 pthread_mutexattr_setprioceiling F -GLIBC_2.17 pthread_mutexattr_setprotocol F -GLIBC_2.17 pthread_mutexattr_setpshared F -GLIBC_2.17 pthread_mutexattr_setrobust F -GLIBC_2.17 pthread_mutexattr_setrobust_np F -GLIBC_2.17 pthread_mutexattr_settype F -GLIBC_2.17 pthread_once F -GLIBC_2.17 pthread_rwlock_destroy F -GLIBC_2.17 pthread_rwlock_init F -GLIBC_2.17 pthread_rwlock_rdlock F -GLIBC_2.17 pthread_rwlock_timedrdlock F -GLIBC_2.17 pthread_rwlock_timedwrlock F -GLIBC_2.17 pthread_rwlock_tryrdlock F -GLIBC_2.17 pthread_rwlock_trywrlock F -GLIBC_2.17 pthread_rwlock_unlock F -GLIBC_2.17 pthread_rwlock_wrlock F -GLIBC_2.17 pthread_rwlockattr_destroy F -GLIBC_2.17 pthread_rwlockattr_getkind_np F -GLIBC_2.17 pthread_rwlockattr_getpshared F -GLIBC_2.17 pthread_rwlockattr_init F -GLIBC_2.17 pthread_rwlockattr_setkind_np F -GLIBC_2.17 pthread_rwlockattr_setpshared F -GLIBC_2.17 pthread_self F -GLIBC_2.17 pthread_setaffinity_np F -GLIBC_2.17 pthread_setcancelstate F -GLIBC_2.17 pthread_setcanceltype F -GLIBC_2.17 pthread_setconcurrency F -GLIBC_2.17 pthread_setname_np F -GLIBC_2.17 pthread_setschedparam F -GLIBC_2.17 pthread_setschedprio F -GLIBC_2.17 pthread_setspecific F -GLIBC_2.17 pthread_sigmask F -GLIBC_2.17 pthread_sigqueue F -GLIBC_2.17 pthread_spin_destroy F -GLIBC_2.17 pthread_spin_init F -GLIBC_2.17 pthread_spin_lock F -GLIBC_2.17 pthread_spin_trylock F -GLIBC_2.17 pthread_spin_unlock F -GLIBC_2.17 pthread_testcancel F -GLIBC_2.17 pthread_timedjoin_np F -GLIBC_2.17 pthread_tryjoin_np F -GLIBC_2.17 pthread_yield F -GLIBC_2.17 pwrite F -GLIBC_2.17 pwrite64 F -GLIBC_2.17 raise F -GLIBC_2.17 read F -GLIBC_2.17 recv F -GLIBC_2.17 recvfrom F -GLIBC_2.17 recvmsg F -GLIBC_2.17 sem_close F -GLIBC_2.17 sem_destroy F -GLIBC_2.17 sem_getvalue F -GLIBC_2.17 sem_init F -GLIBC_2.17 sem_open F -GLIBC_2.17 sem_post F -GLIBC_2.17 sem_timedwait F -GLIBC_2.17 sem_trywait F -GLIBC_2.17 sem_unlink F -GLIBC_2.17 sem_wait F -GLIBC_2.17 send F -GLIBC_2.17 sendmsg F -GLIBC_2.17 sendto F -GLIBC_2.17 sigaction F -GLIBC_2.17 siglongjmp F -GLIBC_2.17 sigwait F -GLIBC_2.17 system F -GLIBC_2.17 tcdrain F -GLIBC_2.17 vfork F -GLIBC_2.17 wait F -GLIBC_2.17 waitpid F -GLIBC_2.17 write F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F diff --git a/sysdeps/unix/sysv/linux/aarch64/libresolv.abilist b/sysdeps/unix/sysv/linux/aarch64/libresolv.abilist deleted file mode 100644 index cf278eedb3..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/libresolv.abilist +++ /dev/null @@ -1,92 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 __b64_ntop F -GLIBC_2.17 __b64_pton F -GLIBC_2.17 __dn_comp F -GLIBC_2.17 __dn_count_labels F -GLIBC_2.17 __dn_expand F -GLIBC_2.17 __dn_skipname F -GLIBC_2.17 __fp_nquery F -GLIBC_2.17 __fp_query F -GLIBC_2.17 __fp_resstat F -GLIBC_2.17 __hostalias F -GLIBC_2.17 __loc_aton F -GLIBC_2.17 __loc_ntoa F -GLIBC_2.17 __p_cdname F -GLIBC_2.17 __p_cdnname F -GLIBC_2.17 __p_class F -GLIBC_2.17 __p_class_syms D 0xa8 -GLIBC_2.17 __p_fqname F -GLIBC_2.17 __p_fqnname F -GLIBC_2.17 __p_option F -GLIBC_2.17 __p_query F -GLIBC_2.17 __p_rcode F -GLIBC_2.17 __p_secstodate F -GLIBC_2.17 __p_time F -GLIBC_2.17 __p_type F -GLIBC_2.17 __p_type_syms D 0x450 -GLIBC_2.17 __putlong F -GLIBC_2.17 __putshort F -GLIBC_2.17 __res_close F -GLIBC_2.17 __res_dnok F -GLIBC_2.17 __res_hnok F -GLIBC_2.17 __res_hostalias F -GLIBC_2.17 __res_isourserver F -GLIBC_2.17 __res_mailok F -GLIBC_2.17 __res_mkquery F -GLIBC_2.17 __res_nameinquery F -GLIBC_2.17 __res_nmkquery F -GLIBC_2.17 __res_nquery F -GLIBC_2.17 __res_nquerydomain F -GLIBC_2.17 __res_nsearch F -GLIBC_2.17 __res_nsend F -GLIBC_2.17 __res_ownok F -GLIBC_2.17 __res_queriesmatch F -GLIBC_2.17 __res_query F -GLIBC_2.17 __res_querydomain F -GLIBC_2.17 __res_search F -GLIBC_2.17 __res_send F -GLIBC_2.17 __sym_ntop F -GLIBC_2.17 __sym_ntos F -GLIBC_2.17 __sym_ston F -GLIBC_2.17 _gethtbyaddr F -GLIBC_2.17 _gethtbyname F -GLIBC_2.17 _gethtbyname2 F -GLIBC_2.17 _gethtent F -GLIBC_2.17 _getlong F -GLIBC_2.17 _getshort F -GLIBC_2.17 _res_opcodes D 0x80 -GLIBC_2.17 _sethtent F -GLIBC_2.17 inet_net_ntop F -GLIBC_2.17 inet_net_pton F -GLIBC_2.17 inet_neta F -GLIBC_2.17 ns_datetosecs F -GLIBC_2.17 ns_format_ttl F -GLIBC_2.17 ns_get16 F -GLIBC_2.17 ns_get32 F -GLIBC_2.17 ns_initparse F -GLIBC_2.17 ns_makecanon F -GLIBC_2.17 ns_msg_getflag F -GLIBC_2.17 ns_name_compress F -GLIBC_2.17 ns_name_ntol F -GLIBC_2.17 ns_name_ntop F -GLIBC_2.17 ns_name_pack F -GLIBC_2.17 ns_name_pton F -GLIBC_2.17 ns_name_rollback F -GLIBC_2.17 ns_name_skip F -GLIBC_2.17 ns_name_uncompress F -GLIBC_2.17 ns_name_unpack F -GLIBC_2.17 ns_parse_ttl F -GLIBC_2.17 ns_parserr F -GLIBC_2.17 ns_put16 F -GLIBC_2.17 ns_put32 F -GLIBC_2.17 ns_samedomain F -GLIBC_2.17 ns_samename F -GLIBC_2.17 ns_skiprr F -GLIBC_2.17 ns_sprintrr F -GLIBC_2.17 ns_sprintrrf F -GLIBC_2.17 ns_subdomain F -GLIBC_2.17 res_gethostbyaddr F -GLIBC_2.17 res_gethostbyname F -GLIBC_2.17 res_gethostbyname2 F -GLIBC_2.17 res_send_setqhook F -GLIBC_2.17 res_send_setrhook F diff --git a/sysdeps/unix/sysv/linux/aarch64/librt.abilist b/sysdeps/unix/sysv/linux/aarch64/librt.abilist deleted file mode 100644 index 523d22249a..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/librt.abilist +++ /dev/null @@ -1,36 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 __mq_open_2 F -GLIBC_2.17 aio_cancel F -GLIBC_2.17 aio_cancel64 F -GLIBC_2.17 aio_error F -GLIBC_2.17 aio_error64 F -GLIBC_2.17 aio_fsync F -GLIBC_2.17 aio_fsync64 F -GLIBC_2.17 aio_init F -GLIBC_2.17 aio_read F -GLIBC_2.17 aio_read64 F -GLIBC_2.17 aio_return F -GLIBC_2.17 aio_return64 F -GLIBC_2.17 aio_suspend F -GLIBC_2.17 aio_suspend64 F -GLIBC_2.17 aio_write F -GLIBC_2.17 aio_write64 F -GLIBC_2.17 lio_listio F -GLIBC_2.17 lio_listio64 F -GLIBC_2.17 mq_close F -GLIBC_2.17 mq_getattr F -GLIBC_2.17 mq_notify F -GLIBC_2.17 mq_open F -GLIBC_2.17 mq_receive F -GLIBC_2.17 mq_send F -GLIBC_2.17 mq_setattr F -GLIBC_2.17 mq_timedreceive F -GLIBC_2.17 mq_timedsend F -GLIBC_2.17 mq_unlink F -GLIBC_2.17 shm_open F -GLIBC_2.17 shm_unlink F -GLIBC_2.17 timer_create F -GLIBC_2.17 timer_delete F -GLIBC_2.17 timer_getoverrun F -GLIBC_2.17 timer_gettime F -GLIBC_2.17 timer_settime F diff --git a/sysdeps/unix/sysv/linux/aarch64/libthread_db.abilist b/sysdeps/unix/sysv/linux/aarch64/libthread_db.abilist deleted file mode 100644 index 3e382bf79d..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/libthread_db.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 td_init F -GLIBC_2.17 td_log F -GLIBC_2.17 td_symbol_list F -GLIBC_2.17 td_ta_clear_event F -GLIBC_2.17 td_ta_delete F -GLIBC_2.17 td_ta_enable_stats F -GLIBC_2.17 td_ta_event_addr F -GLIBC_2.17 td_ta_event_getmsg F -GLIBC_2.17 td_ta_get_nthreads F -GLIBC_2.17 td_ta_get_ph F -GLIBC_2.17 td_ta_get_stats F -GLIBC_2.17 td_ta_map_id2thr F -GLIBC_2.17 td_ta_map_lwp2thr F -GLIBC_2.17 td_ta_new F -GLIBC_2.17 td_ta_reset_stats F -GLIBC_2.17 td_ta_set_event F -GLIBC_2.17 td_ta_setconcurrency F -GLIBC_2.17 td_ta_thr_iter F -GLIBC_2.17 td_ta_tsd_iter F -GLIBC_2.17 td_thr_clear_event F -GLIBC_2.17 td_thr_dbresume F -GLIBC_2.17 td_thr_dbsuspend F -GLIBC_2.17 td_thr_event_enable F -GLIBC_2.17 td_thr_event_getmsg F -GLIBC_2.17 td_thr_get_info F -GLIBC_2.17 td_thr_getfpregs F -GLIBC_2.17 td_thr_getgregs F -GLIBC_2.17 td_thr_getxregs F -GLIBC_2.17 td_thr_getxregsize F -GLIBC_2.17 td_thr_set_event F -GLIBC_2.17 td_thr_setfpregs F -GLIBC_2.17 td_thr_setgregs F -GLIBC_2.17 td_thr_setprio F -GLIBC_2.17 td_thr_setsigpending F -GLIBC_2.17 td_thr_setxregs F -GLIBC_2.17 td_thr_sigsetmask F -GLIBC_2.17 td_thr_tls_get_addr F -GLIBC_2.17 td_thr_tlsbase F -GLIBC_2.17 td_thr_tsd F -GLIBC_2.17 td_thr_validate F diff --git a/sysdeps/unix/sysv/linux/aarch64/libutil.abilist b/sysdeps/unix/sysv/linux/aarch64/libutil.abilist deleted file mode 100644 index 9c075bc0bd..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 forkpty F -GLIBC_2.17 login F -GLIBC_2.17 login_tty F -GLIBC_2.17 logout F -GLIBC_2.17 logwtmp F -GLIBC_2.17 openpty F diff --git a/sysdeps/unix/sysv/linux/aarch64/localplt.data b/sysdeps/unix/sysv/linux/aarch64/localplt.data deleted file mode 100644 index bb18ff9bb2..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/localplt.data +++ /dev/null @@ -1,20 +0,0 @@ -# See scripts/check-localplt.awk for how this file is processed. -# PLT use is required for the malloc family and for matherr because -# users can define their own functions and have library internals call them. -libc.so: calloc -libc.so: free -libc.so: malloc -libc.so: memalign -libc.so: realloc -libm.so: matherr -# The dynamic loader needs __tls_get_addr for TLS. -ld.so: __tls_get_addr -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/unix/sysv/linux/aarch64/makecontext.c b/sysdeps/unix/sysv/linux/aarch64/makecontext.c deleted file mode 100644 index f510f48e9f..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/makecontext.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Create new context. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -/* makecontext sets up a stack and the registers for the - user context. The stack looks like this: - - +-----------------------+ - | padding as required | - +-----------------------+ - sp -> | parameter 7-n | - +-----------------------+ - - The registers are set up like this: - %x0 .. %x7: parameter 1 to 8 - %x19 : uc_link - %sp : stack pointer. -*/ - -void -__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) -{ - extern void __startcontext (void); - unsigned long int *sp; - va_list ap; - int i; - - sp = (unsigned long int *) - ((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); - - /* Allocate stack arguments. */ - sp -= argc < 8 ? 0 : argc - 8; - - /* Keep the stack aligned. */ - sp = (unsigned long int *) (((uintptr_t) sp) & -16L); - - ucp->uc_mcontext.regs[19] = (uintptr_t) ucp->uc_link; - ucp->uc_mcontext.sp = (uintptr_t) sp; - ucp->uc_mcontext.pc = (uintptr_t) func; - ucp->uc_mcontext.regs[29] = (uintptr_t) 0; - ucp->uc_mcontext.regs[30] = (uintptr_t) &__startcontext; - - va_start (ap, argc); - for (i = 0; i < argc; ++i) - if (i < 8) - ucp->uc_mcontext.regs[i] = va_arg (ap, unsigned long int); - else - sp[i - 8] = va_arg (ap, unsigned long int); - - va_end (ap); -} - -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/aarch64/profil-counter.h b/sysdeps/unix/sysv/linux/aarch64/profil-counter.h deleted file mode 100644 index e7262cd1d5..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/profil-counter.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* We can use the ix86 version. */ -#include diff --git a/sysdeps/unix/sysv/linux/aarch64/pt-vfork.c b/sysdeps/unix/sysv/linux/aarch64/pt-vfork.c deleted file mode 100644 index abafb7ce73..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/pt-vfork.c +++ /dev/null @@ -1,54 +0,0 @@ -/* vfork ABI-compatibility entry points for libpthread. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* libpthread used to have its own vfork implementation that differed - from libc's only in having a pointless micro-optimization. There - is no longer any use to having a separate copy in libpthread, but - the historical ABI requires it. For static linking, there is no - need to provide anything here--the libc version will be linked in. - For shared library ABI compatibility, there must be __vfork and - vfork symbols in libpthread.so. */ - -#if HAVE_IFUNC -# include -#elif (SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_20) \ - || SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_20)) - -/* Thankfully, on AArch64 we can rely on the compiler generating - a tail call here. */ - -extern void __libc_vfork (void); - -void -vfork_compat (void) -{ - __libc_vfork (); -} - -# if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_20) -compat_symbol (libpthread, vfork_compat, vfork, GLIBC_2_0); -# endif - -# if SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_20) -strong_alias (vfork_compat, vfork_compat2) -compat_symbol (libpthread, vfork_compat2, __vfork, GLIBC_2_1_2); -# endif - -#endif diff --git a/sysdeps/unix/sysv/linux/aarch64/readelflib.c b/sysdeps/unix/sysv/linux/aarch64/readelflib.c deleted file mode 100644 index d932ff8021..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/readelflib.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "../arm/readelflib.c" diff --git a/sysdeps/unix/sysv/linux/aarch64/setcontext.S b/sysdeps/unix/sysv/linux/aarch64/setcontext.S deleted file mode 100644 index 3a82926ad3..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/setcontext.S +++ /dev/null @@ -1,130 +0,0 @@ -/* Set current context. - - Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "ucontext_i.h" -#include "ucontext-internal.h" - -/* int __setcontext (const ucontext_t *ucp) - - Restores the machine context in UCP and thereby resumes execution - in that context. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to restore anything - other than the PRESERVED state. */ - - .text - -ENTRY (__setcontext) - DELOUSE (0) - /* Save a copy of UCP. */ - mov x9, x0 - - /* Set the signal mask with - rt_sigprocmask (SIG_SETMASK, mask, NULL, _NSIG/8). */ - mov x0, #SIG_SETMASK - add x1, x9, #UCONTEXT_SIGMASK - mov x2, #0 - mov x3, #_NSIG8 - mov x8, SYS_ify (rt_sigprocmask) - svc 0 - cbz x0, 1f - b C_SYMBOL_NAME (__syscall_error) -1: - /* Restore the general purpose registers. */ - mov x0, x9 - cfi_def_cfa (x0, 0) - cfi_offset (x18, oX0 + 18 * SZREG) - cfi_offset (x19, oX0 + 19 * SZREG) - cfi_offset (x20, oX0 + 20 * SZREG) - cfi_offset (x21, oX0 + 21 * SZREG) - cfi_offset (x22, oX0 + 22 * SZREG) - cfi_offset (x23, oX0 + 23 * SZREG) - cfi_offset (x24, oX0 + 24 * SZREG) - cfi_offset (x25, oX0 + 25 * SZREG) - cfi_offset (x26, oX0 + 26 * SZREG) - cfi_offset (x27, oX0 + 27 * SZREG) - cfi_offset (x28, oX0 + 28 * SZREG) - cfi_offset (x29, oX0 + 29 * SZREG) - cfi_offset (x30, oX0 + 30 * SZREG) - - cfi_offset ( d8, oV0 + 8 * SZVREG) - cfi_offset ( d9, oV0 + 9 * SZVREG) - cfi_offset (d10, oV0 + 10 * SZVREG) - cfi_offset (d11, oV0 + 11 * SZVREG) - cfi_offset (d12, oV0 + 12 * SZVREG) - cfi_offset (d13, oV0 + 13 * SZVREG) - cfi_offset (d14, oV0 + 14 * SZVREG) - cfi_offset (d15, oV0 + 15 * SZVREG) - ldp x18, x19, [x0, oX0 + 18 * SZREG] - ldp x20, x21, [x0, oX0 + 20 * SZREG] - ldp x22, x23, [x0, oX0 + 22 * SZREG] - ldp x24, x25, [x0, oX0 + 24 * SZREG] - ldp x26, x27, [x0, oX0 + 26 * SZREG] - ldp x28, x29, [x0, oX0 + 28 * SZREG] - ldr x30, [x0, oX0 + 30 * SZREG] - ldr x2, [x0, oSP] - mov sp, x2 - - /* Check for FP SIMD context. We don't support restoring - contexts created by the kernel, so this context must have - been created by getcontext. Hence we can rely on the - first extension block being the FP SIMD context. */ - add x2, x0, #oEXTENSION - - mov w3, #(FPSIMD_MAGIC & 0xffff) - movk w3, #(FPSIMD_MAGIC >> 16), lsl #16 - ldr w1, [x2, #oHEAD + oMAGIC] - cmp w1, w3 - b.ne 2f - - /* Restore the FP SIMD context. */ - add x3, x2, #oV0 + 8 * SZVREG - ldp q8, q9, [x3], #2 * SZVREG - ldp q10, q11, [x3], #2 * SZVREG - ldp q12, q13, [x3], #2 * SZVREG - ldp q14, q15, [x3], #2 * SZVREG - - add x3, x2, oFPSR - - ldr w4, [x3] - msr fpsr, x4 - - ldr w4, [x3, oFPCR - oFPSR] - msr fpcr, x4 - -2: - ldr x16, [x0, oPC] - /* Restore arg registers. */ - ldp x2, x3, [x0, oX0 + 2 * SZREG] - ldp x4, x5, [x0, oX0 + 4 * SZREG] - ldp x6, x7, [x0, oX0 + 6 * SZREG] - ldp x0, x1, [x0, oX0 + 0 * SZREG] - /* Jump to the new pc value. */ - br x16 -PSEUDO_END (__setcontext) -weak_alias (__setcontext, setcontext) - -ENTRY (__startcontext) - mov x0, x19 - cbnz x0, __setcontext -1: b HIDDEN_JUMPTARGET (exit) -END (__startcontext) diff --git a/sysdeps/unix/sysv/linux/aarch64/shlib-versions b/sysdeps/unix/sysv/linux/aarch64/shlib-versions deleted file mode 100644 index e1768a7361..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/shlib-versions +++ /dev/null @@ -1,7 +0,0 @@ -DEFAULT GLIBC_2.17 - -%ifdef HAVE_AARCH64_BE -ld=ld-linux-aarch64_be.so.1 -%else -ld=ld-linux-aarch64.so.1 -%endif diff --git a/sysdeps/unix/sysv/linux/aarch64/sigaction.c b/sysdeps/unix/sysv/linux/aarch64/sigaction.c deleted file mode 100644 index 7cbb056367..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/sigaction.c +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -#define SA_RESTORER 0x04000000 - -/* The difference here is that the sigaction structure used in the - kernel is not the same as we use in the libc. Therefore we must - translate it here. */ -#include - -int -__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) -{ - int result; - struct kernel_sigaction kact; - struct kernel_sigaction koact; - - if (act) - { - kact.k_sa_handler = act->sa_handler; - memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t)); - kact.sa_flags = act->sa_flags; -#ifdef HAVE_SA_RESTORER - if (kact.sa_flags & SA_RESTORER) - kact.sa_restorer = act->sa_restorer; -#endif - } - - result = INLINE_SYSCALL (rt_sigaction, 4, sig, - act ? &kact : NULL, - oact ? &koact : NULL, _NSIG / 8); - if (result >= 0 || errno != ENOSYS) - { - if (oact && result >= 0) - { - oact->sa_handler = koact.k_sa_handler; - memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t)); - oact->sa_flags = koact.sa_flags; -#ifdef HAVE_SA_RESTORER - oact->sa_restorer = koact.sa_restorer; -#endif - } - } - return result; -} -libc_hidden_def (__libc_sigaction) - -#include diff --git a/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h b/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h deleted file mode 100644 index b28ad5bdcd..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h +++ /dev/null @@ -1,35 +0,0 @@ -/* AArch64 definitions for signal handling calling conventions. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define SIGCONTEXT siginfo_t *_si, struct ucontext * -#define GET_PC(ctx) ((void *) (uintptr_t) (ctx)->uc_mcontext.pc) - -/* There is no reliable way to get the sigcontext unless we use a - three-argument signal handler. */ -#define __sigaction(sig, act, oact) ({ \ - (act)->sa_flags |= SA_SIGINFO; \ - (__sigaction) (sig, act, oact); \ -}) - -#define sigaction(sig, act, oact) ({ \ - (act)->sa_flags |= SA_SIGINFO; \ - (sigaction) (sig, act, oact); \ -}) diff --git a/sysdeps/unix/sysv/linux/aarch64/swapcontext.S b/sysdeps/unix/sysv/linux/aarch64/swapcontext.S deleted file mode 100644 index 429c179354..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/swapcontext.S +++ /dev/null @@ -1,101 +0,0 @@ -/* Modify saved context. - - Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" -#include "ucontext-internal.h" - -/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */ - - .text -ENTRY(__swapcontext) - DELOUSE (0) - /* Set the value returned when swapcontext() returns in this context. */ - str xzr, [x0, oX0 + 0 * SZREG] - - stp x18, x19, [x0, oX0 + 18 * SZREG] - stp x20, x21, [x0, oX0 + 20 * SZREG] - stp x22, x23, [x0, oX0 + 22 * SZREG] - stp x24, x25, [x0, oX0 + 24 * SZREG] - stp x26, x27, [x0, oX0 + 26 * SZREG] - stp x28, x29, [x0, oX0 + 28 * SZREG] - str x30, [x0, oX0 + 30 * SZREG] - str x30, [x0, oPC] - mov x2, sp - str x2, [x0, oSP] - - /* Figure out where to place the first context extension - block. */ - add x2, x0, #oEXTENSION - - /* Write the context extension fpsimd header. */ - mov w3, #(FPSIMD_MAGIC & 0xffff) - movk w3, #(FPSIMD_MAGIC >> 16), lsl #16 - str w3, [x2, #oHEAD + oMAGIC] - mov w3, #FPSIMD_CONTEXT_SIZE - str w3, [x2, #oHEAD + oSIZE] - - /* Fill in the FP SIMD context. */ - add x3, x2, #oV0 + 8 * SZVREG - stp q8, q9, [x3], #2 * SZVREG - stp q10, q11, [x3], #2 * SZVREG - stp q12, q13, [x3], #2 * SZVREG - stp q14, q15, [x3], #2 * SZVREG - - add x3, x2, #oFPSR - - mrs x4, fpsr - str w4, [x3, #oFPSR - oFPSR] - - mrs x4, fpcr - str w4, [x3, #oFPCR - oFPSR] - - /* Write the termination context extension header. */ - add x2, x2, #FPSIMD_CONTEXT_SIZE - - str xzr, [x2, #oHEAD + oMAGIC] - str xzr, [x2, #oHEAD + oSIZE] - - /* Preserve ucp. */ - mov x21, x1 - - /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, &oucp->uc_sigmask, - _NSIG8) */ - /* Grab the signal mask */ - /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ - add x2, x0, #UCONTEXT_SIGMASK - mov x0, SIG_BLOCK - mov x1, 0 - mov x3, _NSIG8 - mov x8, SYS_ify (rt_sigprocmask) - svc 0 - cbnz x0, 1f - - mov x22, x30 - mov x0, x21 - bl JUMPTARGET (__setcontext) - mov x30, x22 - RET - -1: - b C_SYMBOL_NAME(__syscall_error) -PSEUDO_END (__swapcontext) -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/elf.h b/sysdeps/unix/sysv/linux/aarch64/sys/elf.h deleted file mode 100644 index 1c7447440c..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/sys/elf.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_ELF_H -#define _SYS_ELF_H 1 - -#warning "This header is obsolete; use instead." - -#include - -#endif /* sys/elf.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h b/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h deleted file mode 100644 index 7a7b1d0742..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somewhat modelled after the file of the same name on SVR4 - systems. It provides a definition of the core file format for ELF - used on Linux. It doesn't have anything to do with the /proc file - system, even though Linux has one. - - Anyway, the whole purpose of this file is for GDB and GDB only. - Don't read too much into it. Don't use it for anything other than - GDB unless you know what you are doing. */ - -#include -#include -#include -#include - -__BEGIN_DECLS - -/* Type for a general-purpose register. */ -typedef unsigned long elf_greg_t; - -/* And the whole bunch of them. We could have used `struct - pt_regs' directly in the typedef, but tradition says that - the register set is an array, which does have some peculiar - semantics, so leave it that way. */ -#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t)) -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -/* Register set for the floating-point registers. */ -typedef struct user_fpsimd_struct elf_fpregset_t; - -/* Signal info. */ -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with Linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - GDB doesn't really use excluded. */ - -struct elf_prstatus - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args. */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned int pr_uid; - unsigned int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -/* The rest of this file provides the types for emulation of the - Solaris interfaces that should be implemented by - users of libthread_db. */ - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore have only one PID type. */ -typedef __pid_t lwpid_t; - -/* Process status and info. In the end we do provide typedefs for them. */ -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h b/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h deleted file mode 100644 index c8ca9e398e..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h +++ /dev/null @@ -1,207 +0,0 @@ -/* `ptrace' debugger support interface. Linux version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PTRACE_H -#define _SYS_PTRACE_H 1 - -#include -#include - -__BEGIN_DECLS - -/* Type of the REQUEST argument to `ptrace.' */ -enum __ptrace_request -{ - /* Indicate that the process making this request should be traced. - All signals received by this process can be intercepted by its - parent, and its parent can use the other `ptrace' requests. */ - PTRACE_TRACEME = 0, -#define PT_TRACE_ME PTRACE_TRACEME - - /* Return the word in the process's text space at address ADDR. */ - PTRACE_PEEKTEXT = 1, -#define PT_READ_I PTRACE_PEEKTEXT - - /* Return the word in the process's data space at address ADDR. */ - PTRACE_PEEKDATA = 2, -#define PT_READ_D PTRACE_PEEKDATA - - /* Return the word in the process's user area at offset ADDR. */ - PTRACE_PEEKUSER = 3, -#define PT_READ_U PTRACE_PEEKUSER - - /* Write the word DATA into the process's text space at address ADDR. */ - PTRACE_POKETEXT = 4, -#define PT_WRITE_I PTRACE_POKETEXT - - /* Write the word DATA into the process's data space at address ADDR. */ - PTRACE_POKEDATA = 5, -#define PT_WRITE_D PTRACE_POKEDATA - - /* Write the word DATA into the process's user area at offset ADDR. */ - PTRACE_POKEUSER = 6, -#define PT_WRITE_U PTRACE_POKEUSER - - /* Continue the process. */ - PTRACE_CONT = 7, -#define PT_CONTINUE PTRACE_CONT - - /* Kill the process. */ - PTRACE_KILL = 8, -#define PT_KILL PTRACE_KILL - - /* Single step the process. */ - PTRACE_SINGLESTEP = 9, -#define PT_STEP PTRACE_SINGLESTEP - - /* Attach to a process that is already running. */ - PTRACE_ATTACH = 16, -#define PT_ATTACH PTRACE_ATTACH - - /* Detach from a process attached to with PTRACE_ATTACH. */ - PTRACE_DETACH = 17, -#define PT_DETACH PTRACE_DETACH - - PTRACE_GET_THREAD_AREA = 22, - - /* Continue and stop at the next (return from) syscall. */ - PTRACE_SYSCALL = 24, -#define PT_SYSCALL PTRACE_SYSCALL - - /* Get all hardware breakpoint registers. */ - PTRACE_GETHBPREGS = 29, - - /* Set all hardware breakpoint registers. */ - PTRACE_SETHBPREGS = 30, - - /* Set ptrace filter options. */ - PTRACE_SETOPTIONS = 0x4200, -#define PT_SETOPTIONS PTRACE_SETOPTIONS - - /* Get last ptrace message. */ - PTRACE_GETEVENTMSG = 0x4201, -#define PT_GETEVENTMSG PTRACE_GETEVENTMSG - - /* Get siginfo for process. */ - PTRACE_GETSIGINFO = 0x4202, -#define PT_GETSIGINFO PTRACE_GETSIGINFO - - /* Set new siginfo for process. */ - PTRACE_SETSIGINFO = 0x4203, -#define PT_SETSIGINFO PTRACE_SETSIGINFO - - /* Get register content. */ - PTRACE_GETREGSET = 0x4204, -#define PTRACE_GETREGSET PTRACE_GETREGSET - - /* Set register content. */ - PTRACE_SETREGSET = 0x4205, -#define PTRACE_SETREGSET PTRACE_SETREGSET - - /* Like PTRACE_ATTACH, but do not force tracee to trap and do not affect - signal or group stop state. */ - PTRACE_SEIZE = 0x4206, -#define PTRACE_SEIZE PTRACE_SEIZE - - /* Trap seized trace. */ - PTRACE_INTERRUPT = 0x4207, -#define PTRACE_INTERRUPT PTRACE_INTERRUPT - - /* Wait for next group event. */ - PTRACE_LISTEN = 0x4208, -#define PTRACE_LISTEN PTRACE_LISTEN - - PTRACE_PEEKSIGINFO = 0x4209, -#define PTRACE_PEEKSIGINFO PTRACE_PEEKSIGINFO - - PTRACE_GETSIGMASK = 0x420a, -#define PTRACE_GETSIGMASK PTRACE_GETSIGMASK - - PTRACE_SETSIGMASK = 0x420b, -#define PTRACE_SETSIGMASK PTRACE_SETSIGMASK - - PTRACE_SECCOMP_GET_FILTER = 0x420c -#define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER -}; - - -/* Flag for PTRACE_LISTEN. */ -enum __ptrace_flags -{ - PTRACE_SEIZE_DEVEL = 0x80000000 -}; - -/* Options set using PTRACE_SETOPTIONS. */ -enum __ptrace_setoptions -{ - PTRACE_O_TRACESYSGOOD = 0x00000001, - PTRACE_O_TRACEFORK = 0x00000002, - PTRACE_O_TRACEVFORK = 0x00000004, - PTRACE_O_TRACECLONE = 0x00000008, - PTRACE_O_TRACEEXEC = 0x00000010, - PTRACE_O_TRACEVFORKDONE = 0x00000020, - PTRACE_O_TRACEEXIT = 0x00000040, - PTRACE_O_TRACESECCOMP = 0x00000080, - PTRACE_O_EXITKILL = 0x00100000, - PTRACE_O_SUSPEND_SECCOMP = 0x00200000, - PTRACE_O_MASK = 0x003000ff -}; - -enum __ptrace_eventcodes -{ -/* Wait extended result codes for the above trace options. */ - PTRACE_EVENT_FORK = 1, - PTRACE_EVENT_VFORK = 2, - PTRACE_EVENT_CLONE = 3, - PTRACE_EVENT_EXEC = 4, - PTRACE_EVENT_VFORK_DONE = 5, - PTRACE_EVENT_EXIT = 6, - PTRACE_EVENT_SECCOMP = 7, -/* Extended result codes enabled by means other than options. */ - PTRACE_EVENT_STOP = 128 -}; - -/* Arguments for PTRACE_PEEKSIGINFO. */ -struct __ptrace_peeksiginfo_args -{ - __uint64_t off; /* From which siginfo to start. */ - __uint32_t flags; /* Flags for peeksiginfo. */ - __int32_t nr; /* How many siginfos to take. */ -}; - -enum __ptrace_peeksiginfo_flags -{ - /* Read signals from a shared (process wide) queue. */ - PTRACE_PEEKSIGINFO_SHARED = (1 << 0) -}; - -/* Perform process tracing functions. REQUEST is one of the values - above, and determines the action to be taken. - For all requests except PTRACE_TRACEME, PID specifies the process to be - traced. - - PID and the other arguments described above for the various requests should - appear (those that are used for the particular request) as: - pid_t PID, void *ADDR, int DATA, void *ADDR2 - after REQUEST. */ -extern long int ptrace (enum __ptrace_request __request, ...) __THROW; - -__END_DECLS - -#endif /* _SYS_PTRACE_H */ diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h b/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h deleted file mode 100644 index 16c7acf221..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* System V/AArch64 ABI compliant context switching support. */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - -#ifdef __USE_MISC -# include - - -typedef elf_greg_t greg_t; - -/* Container for all general registers. */ -typedef elf_gregset_t gregset_t; - -/* Structure to describe FPU registers. */ -typedef elf_fpregset_t fpregset_t; -#endif - -/* Context to describe whole processor state. This only describes - the core registers; coprocessor registers get saved elsewhere - (e.g. in uc_regspace, or somewhere unspecified on the stack - during non-RT signal handlers). */ -typedef struct sigcontext mcontext_t; - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - sigset_t uc_sigmask; - mcontext_t uc_mcontext; - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/user.h b/sysdeps/unix/sysv/linux/aarch64/sys/user.h deleted file mode 100644 index b003cdb2b6..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/sys/user.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_USER_H -#define _SYS_USER_H 1 - -struct user_regs_struct -{ - unsigned long long regs[31]; - unsigned long long sp; - unsigned long long pc; - unsigned long long pstate; -}; - -struct user_fpsimd_struct -{ - __uint128_t vregs[32]; - unsigned int fpsr; - unsigned int fpcr; -}; - -#endif diff --git a/sysdeps/unix/sysv/linux/aarch64/syscall.S b/sysdeps/unix/sysv/linux/aarch64/syscall.S deleted file mode 100644 index d377db45ff..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/syscall.S +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* syscall (int nr, ...) - - AArch64 system calls take between 0 and 7 arguments. On entry here nr - is in w0 and any other system call arguments are in register x1..x7. - - For kernel entry we need to move the system call nr to x8 then - load the remaining arguments to register. */ - -ENTRY (syscall) - uxtw x8, w0 - mov x0, x1 - mov x1, x2 - mov x2, x3 - mov x3, x4 - mov x4, x5 - mov x5, x6 - mov x6, x7 - svc 0x0 - cmn x0, #4095 - b.cs 1f - RET -1: - b SYSCALL_ERROR -PSEUDO_END (syscall) diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h deleted file mode 100644 index 4be2259878..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h +++ /dev/null @@ -1,134 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .section ".text"; \ -ENTRY (__##syscall_name##_nocancel); \ -.Lpseudo_nocancel: \ - DO_CALL (syscall_name, args); \ -.Lpseudo_finish: \ - cmn x0, 4095; \ - b.cs .Lsyscall_error; \ - .subsection 2; \ - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ -ENTRY (name); \ - SINGLE_THREAD_P(16); \ - cbz w16, .Lpseudo_nocancel; \ - /* Setup common stack frame no matter the number of args. \ - Also save the first arg, since it's basically free. */ \ - stp x30, x0, [sp, -64]!; \ - cfi_adjust_cfa_offset (64); \ - cfi_rel_offset (x30, 0); \ - DOCARGS_##args; /* save syscall args around CENABLE. */ \ - CENABLE; \ - mov x16, x0; /* save mask around syscall. */ \ - UNDOCARGS_##args; /* restore syscall args. */ \ - DO_CALL (syscall_name, args); \ - str x0, [sp, 8]; /* save result around CDISABLE. */ \ - mov x0, x16; /* restore mask for CDISABLE. */ \ - CDISABLE; \ - /* Break down the stack frame, restoring result at once. */ \ - ldp x30, x0, [sp], 64; \ - cfi_adjust_cfa_offset (-64); \ - cfi_restore (x30); \ - b .Lpseudo_finish; \ - cfi_endproc; \ - .size name, .-name; \ - .previous - -# undef PSEUDO_END -# define PSEUDO_END(name) \ - SYSCALL_ERROR_HANDLER; \ - cfi_endproc - -# define DOCARGS_0 -# define DOCARGS_1 -# define DOCARGS_2 str x1, [sp, 16] -# define DOCARGS_3 stp x1, x2, [sp, 16] -# define DOCARGS_4 DOCARGS_3; str x3, [sp, 32] -# define DOCARGS_5 DOCARGS_3; stp x3, x4, [sp, 32] -# define DOCARGS_6 DOCARGS_5; str x5, [sp, 48] - -# define UNDOCARGS_0 -# define UNDOCARGS_1 ldr x0, [sp, 8] -# define UNDOCARGS_2 ldp x0, x1, [sp, 8] -# define UNDOCARGS_3 UNDOCARGS_1; ldp x1, x2, [sp, 16] -# define UNDOCARGS_4 UNDOCARGS_2; ldp x2, x3, [sp, 24] -# define UNDOCARGS_5 UNDOCARGS_3; ldp x3, x4, [sp, 32] -# define UNDOCARGS_6 UNDOCARGS_4; ldp x4, x5, [sp, 40] - -# if IS_IN (libpthread) -# define CENABLE bl __pthread_enable_asynccancel -# define CDISABLE bl __pthread_disable_asynccancel -# define __local_multiple_threads __pthread_multiple_threads -# elif IS_IN (libc) -# define CENABLE bl __libc_enable_asynccancel -# define CDISABLE bl __libc_disable_asynccancel -# define __local_multiple_threads __libc_multiple_threads -# elif IS_IN (librt) -# define CENABLE bl __librt_enable_asynccancel -# define CDISABLE bl __librt_disable_asynccancel -# else -# error Unsupported library -# endif - -# if IS_IN (libpthread) || IS_IN (libc) -# ifndef __ASSEMBLER__ -extern int __local_multiple_threads attribute_hidden; -# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1) -# else -# define SINGLE_THREAD_P(R) \ - adrp x##R, __local_multiple_threads; \ - ldr w##R, [x##R, :lo12:__local_multiple_threads] -# endif -# else -/* There is no __local_multiple_threads for librt, so use the TCB. */ -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P(R) \ - mrs x##R, tpidr_el0; \ - sub x##R, x##R, PTHREAD_SIZEOF; \ - ldr w##R, [x##R, PTHREAD_MULTIPLE_THREADS_OFFSET] -# endif -# endif - -#elif !defined __ASSEMBLER__ - -/* For rtld, et cetera. */ -# define SINGLE_THREAD_P 1 -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep.c b/sysdeps/unix/sysv/linux/aarch64/sysdep.c deleted file mode 100644 index d9c995152f..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/sysdep.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -long __syscall_error (long err); -hidden_proto (__syscall_error) - -/* This routine is jumped to by all the syscall handlers, to stash - an error number into errno. */ -long -__syscall_error (long err) -{ - __set_errno (- err); - return -1; -} -hidden_def (__syscall_error) diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep.h b/sysdeps/unix/sysv/linux/aarch64/sysdep.h deleted file mode 100644 index 4bb9112d62..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/sysdep.h +++ /dev/null @@ -1,297 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_AARCH64_SYSDEP_H -#define _LINUX_AARCH64_SYSDEP_H 1 - -#include -#include -#include - -/* Defines RTLD_PRIVATE_ERRNO and USE_DL_SYSINFO. */ -#include - -#include - -/* In order to get __set_errno() definition in INLINE_SYSCALL. */ -#ifndef __ASSEMBLER__ -#include -#endif - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) (__NR_##syscall_name) - -#ifdef __ASSEMBLER__ - -/* Linux uses a negative return value to indicate syscall errors, - unlike most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be - negative even if the call succeeded. E.g., the `lseek' system call - might return a large offset. Therefore we must not anymore test - for < 0, but test for a real error by making sure the value in R0 - is a real error number. Linus said he will make sure the no syscall - returns a value in -1 .. -4095 as a valid result so we can safely - test with -4095. */ - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name); \ - DO_CALL (syscall_name, args); \ - cmn x0, #4095; \ - b.cs .Lsyscall_error; - -# undef PSEUDO_END -# define PSEUDO_END(name) \ - SYSCALL_ERROR_HANDLER \ - END (name) - -# undef PSEUDO_NOERRNO -# define PSEUDO_NOERRNO(name, syscall_name, args) \ - .text; \ - ENTRY (name); \ - DO_CALL (syscall_name, args); - -# undef PSEUDO_END_NOERRNO -# define PSEUDO_END_NOERRNO(name) \ - END (name) - -# define ret_NOERRNO ret - -/* The function has to return the error code. */ -# undef PSEUDO_ERRVAL -# define PSEUDO_ERRVAL(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - neg x0, x0 - -# undef PSEUDO_END_ERRVAL -# define PSEUDO_END_ERRVAL(name) \ - END (name) - -# define ret_ERRVAL ret - -# if !IS_IN (libc) -# define SYSCALL_ERROR .Lsyscall_error -# if RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_HANDLER \ -.Lsyscall_error: \ - adrp x1, C_SYMBOL_NAME(rtld_errno); \ - neg w0, w0; \ - str w0, [x1, :lo12:C_SYMBOL_NAME(rtld_errno)]; \ - mov x0, -1; \ - RET; -# else - -# define SYSCALL_ERROR_HANDLER \ -.Lsyscall_error: \ - adrp x1, :gottprel:errno; \ - neg w2, w0; \ - ldr PTR_REG(1), [x1, :gottprel_lo12:errno]; \ - mrs x3, tpidr_el0; \ - mov x0, -1; \ - str w2, [x1, x3]; \ - RET; -# endif -# else -# define SYSCALL_ERROR __syscall_error -# define SYSCALL_ERROR_HANDLER \ -.Lsyscall_error: \ - b __syscall_error; -# endif - -/* Linux takes system call args in registers: - syscall number x8 - arg 1 x0 - arg 2 x1 - arg 3 x2 - arg 4 x3 - arg 5 x4 - arg 6 x5 - arg 7 x6 - - The compiler is going to form a call by coming here, through PSEUDO, with - arguments - syscall number in the DO_CALL macro - arg 1 x0 - arg 2 x1 - arg 3 x2 - arg 4 x3 - arg 5 x4 - arg 6 x5 - arg 7 x6 - -*/ - -# undef DO_CALL -# define DO_CALL(syscall_name, args) \ - mov x8, SYS_ify (syscall_name); \ - svc 0 - -#else /* not __ASSEMBLER__ */ - - -/* List of system calls which are supported as vsyscalls. */ -# define HAVE_CLOCK_GETRES_VSYSCALL 1 -# define HAVE_CLOCK_GETTIME_VSYSCALL 1 -# define HAVE_GETTIMEOFDAY_VSYSCALL 1 - -/* Previously AArch64 used the generic version without the libc_hidden_def - which lead in a non existent __send symbol in libc.so. */ -# undef HAVE_INTERNAL_SEND_SYMBOL - -/* Define a macro which expands into the inline wrapper code for a system - call. */ -# undef INLINE_SYSCALL -# define INLINE_SYSCALL(name, nr, args...) \ - ({ unsigned long _sys_result = INTERNAL_SYSCALL (name, , nr, args); \ - if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_sys_result, ), 0))\ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (_sys_result, )); \ - _sys_result = (unsigned long) -1; \ - } \ - (long) _sys_result; }) - -# undef INTERNAL_SYSCALL_DECL -# define INTERNAL_SYSCALL_DECL(err) do { } while (0) - -# undef INTERNAL_SYSCALL_RAW -# define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ - ({ long _sys_result; \ - { \ - LOAD_ARGS_##nr (args) \ - register long _x8 asm ("x8") = (name); \ - asm volatile ("svc 0 // syscall " # name \ - : "=r" (_x0) : "r"(_x8) ASM_ARGS_##nr : "memory"); \ - _sys_result = _x0; \ - } \ - _sys_result; }) - -# undef INTERNAL_SYSCALL -# define INTERNAL_SYSCALL(name, err, nr, args...) \ - INTERNAL_SYSCALL_RAW(SYS_ify(name), err, nr, args) - -# undef INTERNAL_SYSCALL_AARCH64 -# define INTERNAL_SYSCALL_AARCH64(name, err, nr, args...) \ - INTERNAL_SYSCALL_RAW(__ARM_NR_##name, err, nr, args) - -# undef INTERNAL_SYSCALL_ERROR_P -# define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((unsigned long) (val) >= (unsigned long) -4095) - -# undef INTERNAL_SYSCALL_ERRNO -# define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) - -# define LOAD_ARGS_0() \ - register long _x0 asm ("x0"); -# define LOAD_ARGS_1(x0) \ - long _x0tmp = (long) (x0); \ - LOAD_ARGS_0 () \ - _x0 = _x0tmp; -# define LOAD_ARGS_2(x0, x1) \ - long _x1tmp = (long) (x1); \ - LOAD_ARGS_1 (x0) \ - register long _x1 asm ("x1") = _x1tmp; -# define LOAD_ARGS_3(x0, x1, x2) \ - long _x2tmp = (long) (x2); \ - LOAD_ARGS_2 (x0, x1) \ - register long _x2 asm ("x2") = _x2tmp; -# define LOAD_ARGS_4(x0, x1, x2, x3) \ - long _x3tmp = (long) (x3); \ - LOAD_ARGS_3 (x0, x1, x2) \ - register long _x3 asm ("x3") = _x3tmp; -# define LOAD_ARGS_5(x0, x1, x2, x3, x4) \ - long _x4tmp = (long) (x4); \ - LOAD_ARGS_4 (x0, x1, x2, x3) \ - register long _x4 asm ("x4") = _x4tmp; -# define LOAD_ARGS_6(x0, x1, x2, x3, x4, x5) \ - long _x5tmp = (long) (x5); \ - LOAD_ARGS_5 (x0, x1, x2, x3, x4) \ - register long _x5 asm ("x5") = _x5tmp; -# define LOAD_ARGS_7(x0, x1, x2, x3, x4, x5, x6)\ - long _x6tmp = (long) (x6); \ - LOAD_ARGS_6 (x0, x1, x2, x3, x4, x5) \ - register long _x6 asm ("x6") = _x6tmp; - -# define ASM_ARGS_0 -# define ASM_ARGS_1 , "r" (_x0) -# define ASM_ARGS_2 ASM_ARGS_1, "r" (_x1) -# define ASM_ARGS_3 ASM_ARGS_2, "r" (_x2) -# define ASM_ARGS_4 ASM_ARGS_3, "r" (_x3) -# define ASM_ARGS_5 ASM_ARGS_4, "r" (_x4) -# define ASM_ARGS_6 ASM_ARGS_5, "r" (_x5) -# define ASM_ARGS_7 ASM_ARGS_6, "r" (_x6) - -# undef INTERNAL_SYSCALL_NCS -# define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ - INTERNAL_SYSCALL_RAW (number, err, nr, args) - -#endif /* __ASSEMBLER__ */ - -/* Pointer mangling is supported for AArch64. */ -#if (IS_IN (rtld) || \ - (!defined SHARED && (IS_IN (libc) \ - || IS_IN (libpthread)))) -# ifdef __ASSEMBLER__ -/* Note, dst, src, guard, and tmp are all register numbers rather than - register names so they will work with both ILP32 and LP64. */ -# define PTR_MANGLE(dst, src, guard, tmp) \ - LDST_PCREL (ldr, guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard_local)); \ - PTR_MANGLE2 (dst, src, guard) -/* Use PTR_MANGLE2 for efficiency if guard is already loaded. */ -# define PTR_MANGLE2(dst, src, guard)\ - eor x##dst, x##src, x##guard -# define PTR_DEMANGLE(dst, src, guard, tmp)\ - PTR_MANGLE (dst, src, guard, tmp) -# define PTR_DEMANGLE2(dst, src, guard)\ - PTR_MANGLE2 (dst, src, guard) -# else -extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden; -# define PTR_MANGLE(var) \ - (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#else -# ifdef __ASSEMBLER__ -/* Note, dst, src, guard, and tmp are all register numbers rather than - register names so they will work with both ILP32 and LP64. */ -# define PTR_MANGLE(dst, src, guard, tmp) \ - LDST_GLOBAL (ldr, guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard)); \ - PTR_MANGLE2 (dst, src, guard) -/* Use PTR_MANGLE2 for efficiency if guard is already loaded. */ -# define PTR_MANGLE2(dst, src, guard)\ - eor x##dst, x##src, x##guard -# define PTR_DEMANGLE(dst, src, guard, tmp)\ - PTR_MANGLE (dst, src, guard, tmp) -# define PTR_DEMANGLE2(dst, src, guard)\ - PTR_MANGLE2 (dst, src, guard) -# else -extern uintptr_t __pointer_chk_guard attribute_relro; -# define PTR_MANGLE(var) \ - (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#endif - -#endif /* linux/aarch64/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h b/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h deleted file mode 100644 index c4739c105d..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define SP_ALIGN_SIZE 15 - -#define SP_ALIGN_MASK ~15 - -/* Size of an X regiser in bytes. */ -#define SZREG 8 - -/* Size of a V register in bytes. */ -#define SZVREG 16 - -/* Number of integer parameter passing registers. */ -#define NUMXREGARGS 8 - -/* Number of FP parameter passing registers. */ -#define NUMDREGARGS 8 - -/* Size of named integer argument in bytes when passed on the - stack. */ -#define SIZEOF_NAMED_INT 4 - -/* Size of an anonymous integer argument in bytes when passed on the - stack. */ -#define SIZEOF_ANONYMOUS_INT 8 - -#define oX21 (oX0 + 21*8) -#define oFP (oX0 + 29*8) -#define oLR (oX0 + 30*8) diff --git a/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym b/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym deleted file mode 100644 index ab3930c173..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include -#include -#include -#include - -#include "kernel_rt_sigframe.h" - -SIG_BLOCK -SIG_SETMASK - -_NSIG8 (_NSIG / 8) - --- Offsets of the fields in the kernel rt_sigframe_t structure. -#define rt_sigframe(member) offsetof (struct kernel_rt_sigframe, member) - -RT_SIGFRAME_UCONTEXT rt_sigframe (uc) - -RT_SIGFRAME_SIZE sizeof (struct kernel_rt_sigframe) -FPSIMD_CONTEXT_SIZE sizeof (struct fpsimd_context) - -#define ucontext(member) offsetof (ucontext_t, member) -#define stack(member) ucontext (uc_stack.member) -#define mcontext(member) ucontext (uc_mcontext.member) - -UCONTEXT_FLAGS ucontext (uc_flags) -UCONTEXT_LINK ucontext (uc_link) -UCONTEXT_STACK ucontext (uc_stack) -UCONTEXT_MCONTEXT ucontext (uc_mcontext) -UCONTEXT_SIGMASK ucontext (uc_sigmask) -UCONTEXT_SIZE sizeof (ucontext_t) - -STACK_SP stack (ss_sp) -STACK_SIZE stack (ss_size) -STACK_FLAGS stack (ss_flags) - -oX0 mcontext (regs) -oSP mcontext (sp) -oPC mcontext (pc) -oPSTATE mcontext (pstate) -oEXTENSION mcontext (__reserved) - -#define fpsimd_context(member) offsetof (struct fpsimd_context, member) - -oHEAD fpsimd_context (head) -oV0 fpsimd_context (vregs) -oFPSR fpsimd_context (fpsr) -oFPCR fpsimd_context (fpcr) - -#define aarch64_ctx(member) offsetof (struct _aarch64_ctx, member) - -oMAGIC aarch64_ctx (magic) -oSIZE aarch64_ctx (size) - -FPSIMD_MAGIC diff --git a/sysdeps/unix/sysv/linux/aarch64/vfork.S b/sysdeps/unix/sysv/linux/aarch64/vfork.S deleted file mode 100644 index 890bb3d14d..0000000000 --- a/sysdeps/unix/sysv/linux/aarch64/vfork.S +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__vfork) - - mov x0, #0x4111 /* CLONE_VM | CLONE_VFORK | SIGCHLD */ - mov x1, sp - DO_CALL (clone, 2) - - cmn x0, #4095 - b.cs .Lsyscall_error - RET - -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) - -weak_alias (__vfork, vfork) -strong_alias (__vfork, __libc_vfork) diff --git a/sysdeps/unix/sysv/linux/accept.c b/sysdeps/unix/sysv/linux/accept.c deleted file mode 100644 index 2fb59b7537..0000000000 --- a/sysdeps/unix/sysv/linux/accept.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__libc_accept (int fd, __SOCKADDR_ARG addr, socklen_t *len) -{ -#ifdef __ASSUME_ACCEPT_SYSCALL - return SYSCALL_CANCEL (accept, fd, addr.__sockaddr__, len); -#elif defined __ASSUME_ACCEPT4_SYSCALL - return SYSCALL_CANCEL (accept4, fd, addr.__sockaddr__, len, 0); -#else - return SOCKETCALL_CANCEL (accept, fd, addr.__sockaddr__, len); -#endif -} -weak_alias (__libc_accept, accept) -libc_hidden_def (accept) diff --git a/sysdeps/unix/sysv/linux/accept4.c b/sysdeps/unix/sysv/linux/accept4.c deleted file mode 100644 index 1590c021ad..0000000000 --- a/sysdeps/unix/sysv/linux/accept4.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include -#include -#include - -int -accept4 (int fd, __SOCKADDR_ARG addr, socklen_t *addr_len, int flags) -{ -#ifdef __ASSUME_ACCEPT4_SYSCALL - return SYSCALL_CANCEL (accept4, fd, addr.__sockaddr__, addr_len, flags); -#else - return SOCKETCALL_CANCEL (accept4, fd, addr.__sockaddr__, addr_len, flags); -#endif -} diff --git a/sysdeps/unix/sysv/linux/access.c b/sysdeps/unix/sysv/linux/access.c deleted file mode 100644 index 67e69bd163..0000000000 --- a/sysdeps/unix/sysv/linux/access.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Linux implementation for access function. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -int -__access_noerrno (const char *file, int type) -{ - int res; - INTERNAL_SYSCALL_DECL (err); -#ifdef __NR_access - res = INTERNAL_SYSCALL_CALL (access, err, file, type); -#else - res = INTERNAL_SYSCALL_CALL (faccessat, err, AT_FDCWD, file, type); -#endif - if (INTERNAL_SYSCALL_ERROR_P (res, err)) - return INTERNAL_SYSCALL_ERRNO (res, err); - return 0; -} - -int -__access (const char *file, int type) -{ -#ifdef __NR_access - return INLINE_SYSCALL_CALL (access, file, type); -#else - return INLINE_SYSCALL_CALL (faccessat, AT_FDCWD, file, type); -#endif -} -weak_alias (__access, access) diff --git a/sysdeps/unix/sysv/linux/adjtime.c b/sysdeps/unix/sysv/linux/adjtime.c deleted file mode 100644 index d98d77064e..0000000000 --- a/sysdeps/unix/sysv/linux/adjtime.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#define MAX_SEC (INT_MAX / 1000000L - 2) -#define MIN_SEC (INT_MIN / 1000000L + 2) - -#ifndef MOD_OFFSET -#define modes mode -#endif - -#ifndef TIMEVAL -#define TIMEVAL timeval -#endif - -#ifndef TIMEX -#define TIMEX timex -#endif - -#ifndef ADJTIME -#define ADJTIME __adjtime -#endif - -#ifndef ADJTIMEX -#define NO_LOCAL_ADJTIME -#define ADJTIMEX(x) __adjtimex (x) -#endif - -#ifndef LINKAGE -#define LINKAGE -#endif - -LINKAGE int -ADJTIME (const struct TIMEVAL *itv, struct TIMEVAL *otv) -{ - struct TIMEX tntx; - - if (itv) - { - struct TIMEVAL tmp; - - /* We will do some check here. */ - tmp.tv_sec = itv->tv_sec + itv->tv_usec / 1000000L; - tmp.tv_usec = itv->tv_usec % 1000000L; - if (tmp.tv_sec > MAX_SEC || tmp.tv_sec < MIN_SEC) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - tntx.offset = tmp.tv_usec + tmp.tv_sec * 1000000L; - tntx.modes = ADJ_OFFSET_SINGLESHOT; - } - else - tntx.modes = ADJ_OFFSET_SS_READ; - - if (__glibc_unlikely (ADJTIMEX (&tntx) < 0)) - return -1; - - if (otv) - { - if (tntx.offset < 0) - { - otv->tv_usec = -(-tntx.offset % 1000000); - otv->tv_sec = -(-tntx.offset / 1000000); - } - else - { - otv->tv_usec = tntx.offset % 1000000; - otv->tv_sec = tntx.offset / 1000000; - } - } - return 0; -} - -#ifdef NO_LOCAL_ADJTIME -weak_alias (__adjtime, adjtime) -#endif diff --git a/sysdeps/unix/sysv/linux/aio_misc.h b/sysdeps/unix/sysv/linux/aio_misc.h deleted file mode 100644 index 36141350ba..0000000000 --- a/sysdeps/unix/sysv/linux/aio_misc.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2004. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#ifndef _AIO_MISC_H -# include_next -# include -# include -# include -# include - -# define aio_start_notify_thread __aio_start_notify_thread -# define aio_create_helper_thread __aio_create_helper_thread - -extern inline void -__aio_start_notify_thread (void) -{ - sigset_t ss; - sigemptyset (&ss); - INTERNAL_SYSCALL_DECL (err); - INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, NULL, _NSIG / 8); -} - -extern inline int -__aio_create_helper_thread (pthread_t *threadp, void *(*tf) (void *), - void *arg) -{ - pthread_attr_t attr; - - /* Make sure the thread is created detached. */ - pthread_attr_init (&attr); - pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); - - /* The helper thread needs only very little resources. */ - (void) pthread_attr_setstacksize (&attr, __pthread_get_minstack (&attr)); - - /* Block all signals in the helper thread. To do this thoroughly we - temporarily have to block all signals here. */ - sigset_t ss; - sigset_t oss; - sigfillset (&ss); - INTERNAL_SYSCALL_DECL (err); - INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, &oss, _NSIG / 8); - - int ret = pthread_create (threadp, &attr, tf, arg); - - /* Restore the signal mask. */ - INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &oss, NULL, - _NSIG / 8); - - (void) pthread_attr_destroy (&attr); - return ret; -} -#endif diff --git a/sysdeps/unix/sysv/linux/aio_sigqueue.c b/sysdeps/unix/sysv/linux/aio_sigqueue.c deleted file mode 100644 index 714e9659df..0000000000 --- a/sysdeps/unix/sysv/linux/aio_sigqueue.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#include -#include - -#include - -#ifdef __NR_rt_sigqueueinfo - -/* Return any pending signal or wait for one for the given time. */ -int -internal_function -__aio_sigqueue (int sig, const union sigval val, pid_t caller_pid) -{ - siginfo_t info; - - /* First, clear the siginfo_t structure, so that we don't pass our - stack content to other tasks. */ - memset (&info, 0, sizeof (siginfo_t)); - /* We must pass the information about the data in a siginfo_t value. */ - info.si_signo = sig; - info.si_code = SI_ASYNCIO; - info.si_pid = caller_pid; - info.si_uid = getuid (); - info.si_value = val; - - return INLINE_SYSCALL (rt_sigqueueinfo, 3, info.si_pid, sig, &info); -} -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/Implies b/sysdeps/unix/sysv/linux/alpha/Implies deleted file mode 100644 index fddb49e2c2..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/Implies +++ /dev/null @@ -1,5 +0,0 @@ -alpha/nptl -unix/sysv/linux/wordsize-64 -# These supply the ABI compatibility for when long double was double. -ieee754/ldbl-64-128 -ieee754/ldbl-opt diff --git a/sysdeps/unix/sysv/linux/alpha/Makefile b/sysdeps/unix/sysv/linux/alpha/Makefile deleted file mode 100644 index 47bd189f94..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -ifeq ($(subdir),posix) -sysdep_routines += oldglob -endif - -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext-offsets.sym -endif - -ifeq ($(subdir),misc) -sysdep_headers += alpha/ptrace.h alpha/regdef.h sys/io.h - -sysdep_routines += ieee_get_fp_control ieee_set_fp_control \ - ioperm - -# Support old timeval32 entry points -sysdep_routines += osf_gettimeofday osf_settimeofday \ - osf_getitimer osf_setitimer osf_utimes \ - osf_getrusage osf_wait4 - -CFLAGS-ioperm.c = -Wa,-mev6 -endif - -ifeq ($(subdir),signal) -sysdep_routines += rt_sigaction -endif - -ifeq ($(subdir),math) -# These 2 routines are normally in libgcc{.a,_s.so.1}. -# However, alpha -mlong-double-128 libgcc relies on -# glibc providing _Ots* routines and without these files -# glibc relies on __multc3/__divtc3 only provided -# by libgcc if configured with -mlong-double-128. -# Provide these routines here as well. -libm-routines += multc3 divtc3 -endif # math - -ifeq ($(subdir),nptl) -# pull in __syscall_error routine, __sigprocmask, __syscall_rt_sigaction -libpthread-routines += sysdep sigprocmask rt_sigaction -libpthread-shared-only-routines += sysdep sigprocmask rt_sigaction -endif - -ifeq ($(subdir),conform) -# For bug 21260. -conformtest-xfail-conds += alpha-linux -endif diff --git a/sysdeps/unix/sysv/linux/alpha/Versions b/sysdeps/unix/sysv/linux/alpha/Versions deleted file mode 100644 index 29b82f999b..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/Versions +++ /dev/null @@ -1,113 +0,0 @@ -libc { - # The comment lines with "#errlist-compat" are magic; see - # sysdeps/gnu/errlist-compat.awk. - # When you get an error from errlist-compat.awk, you need to add a new - # version here. Don't do this blindly, since this means changing the ABI - # for all GNU/Linux configurations. - - GLIBC_2.0 { - #errlist-compat 131 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - - # Unfortunately in wider use. - _inb; _inw; _inl; _outb; _outw; _outl; _bus_base; _bus_base_sparse; - _hae_shift; - - # Exception handling support functions from libgcc - __register_frame; __register_frame_table; __deregister_frame; - __frame_state_for; __register_frame_info_table; - - # b* - bus_base; bus_base_sparse; - - # h* - hae_shift; - - # i* - inb; inl; inw; ioperm; iopl; - - # o* - outb; outl; outw; - - # p* - pciconfig_read; pciconfig_write; sethae; - } - GLIBC_2.1 { - #errlist-compat 131 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - - # Linux/Alpha 64-bit timeval functions. - __select; select; - adjtime; adjtimex; __adjtimex; - __gettimeofday; - - # glob interface change - glob; globfree; - - # limit type change - getrusage; - - # time type change - gettimeofday; getitimer; - - # i* - ieee_get_fp_control; ieee_set_fp_control; - - # s* - setitimer; settimeofday; - - # u* - utimes; - - # w* - wait4; - } - GLIBC_2.1.4 { - pciconfig_iobase; - } - GLIBC_2.2.2 { - # w* - wordexp; - } - GLIBC_2.3 { - #errlist-compat 132 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.4 { - #errlist-compat 138 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.12 { - #errlist-compat 139 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.16 { - #errlist-compat 140 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_PRIVATE { - __libc_alpha_cache_shape; - } -} -ld { - GLIBC_PRIVATE { - __libc_alpha_cache_shape; - } -} -libpthread { - GLIBC_2.3.3 { - # Changed PTHREAD_STACK_MIN. - pthread_attr_setstack; pthread_attr_setstacksize; - } -} -librt { - GLIBC_2.3 { - # AIO functions. - aio_cancel; aio_cancel64; - } - GLIBC_2.3.3 { - # Changed timer_t. - timer_create; timer_delete; timer_getoverrun; timer_gettime; - timer_settime; - } -} diff --git a/sysdeps/unix/sysv/linux/alpha/____longjmp_chk.S b/sysdeps/unix/sysv/linux/alpha/____longjmp_chk.S deleted file mode 100644 index b3063e59ed..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/____longjmp_chk.S +++ /dev/null @@ -1,144 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - - .section .rodata.str1.1,"aMS",@progbits,1 - .type longjmp_msg,@object -longjmp_msg: - .string "longjmp causes uninitialized stack frame" - .size longjmp_msg, .-longjmp_msg - - -/* Jump to the position specified by ENV, causing the - setjmp call there to return VAL, or 1 if VAL is 0. - void __longjmp (__jmp_buf env, int val). */ - .text - .align 4 - .globl ____longjmp_chk - .type ____longjmp_chk, @function - .usepv ____longjmp_chk, std - - cfi_startproc -____longjmp_chk: - ldgp gp, 0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - - ldq s2, JB_PC*8(a0) - mov a0, s0 - ldq fp, JB_FP*8(a0) - mov a1, s1 - ldq s3, JB_SP*8(a0) - cmoveq s1, 1, s1 - -#ifdef PTR_DEMANGLE - PTR_DEMANGLE(s2, t1) - PTR_DEMANGLE2(s3, t1) - PTR_DEMANGLE2(fp, t1) -#endif - /* ??? While this is a proper test for detecting a longjmp to an - invalid frame within any given stack, the main thread stack is - located *below* almost everything in the address space. Which - means that the test at Lfail vs the signal stack will almost - certainly never pass. We ought bounds check top and bottom of - the current thread's stack. */ - cmpule s3, sp, t1 - bne t1, $Lfail - - .align 4 -$Lok: - mov s0, a0 - mov s1, v0 - mov s3, t0 - mov s2, ra - cfi_remember_state - cfi_def_cfa(a0, 0) - cfi_register(sp, t0) - cfi_offset(s0, JB_S0*8) - cfi_offset(s1, JB_S1*8) - cfi_offset(s2, JB_S2*8) - cfi_offset(s3, JB_S3*8) - cfi_offset(s4, JB_S4*8) - cfi_offset(s5, JB_S5*8) - cfi_offset(s3, JB_S3*8) - cfi_offset($f2, JB_F2*8) - cfi_offset($f3, JB_F3*8) - cfi_offset($f4, JB_F4*8) - cfi_offset($f5, JB_F5*8) - cfi_offset($f6, JB_F6*8) - cfi_offset($f7, JB_F7*8) - cfi_offset($f8, JB_F8*8) - cfi_offset($f9, JB_F9*8) - ldq s0, JB_S0*8(a0) - ldq s1, JB_S1*8(a0) - ldq s2, JB_S2*8(a0) - ldq s3, JB_S3*8(a0) - ldq s4, JB_S4*8(a0) - ldq s5, JB_S5*8(a0) - ldt $f2, JB_F2*8(a0) - ldt $f3, JB_F3*8(a0) - ldt $f4, JB_F4*8(a0) - ldt $f5, JB_F5*8(a0) - ldt $f6, JB_F6*8(a0) - ldt $f7, JB_F7*8(a0) - ldt $f8, JB_F8*8(a0) - ldt $f9, JB_F9*8(a0) - mov t0, sp - ret - - .align 4 -$Lfail: - cfi_restore_state - lda v0, __NR_sigaltstack - lda a0, 0 - lda a1, -32(sp) - lda sp, -32(sp) - cfi_adjust_cfa_offset(32) - callsys - ldq t0, 0(sp) /* ss_sp */ - ldl t1, 8(sp) /* ss_flags */ - ldq t2, 16(sp) /* ss_size */ - lda sp, 32(sp) - cfi_adjust_cfa_offset(-32) - - /* Without working sigaltstack we cannot perform the test. */ - bne a3, $Lok - - addq t0, t2, t0 /* t0 = ss_sp + ss_size */ - subq t0, s3, t0 /* t0 = (ss_sp + ss_size) - new_sp */ - cmpule t2, t0, t0 /* t0 = (t0 >= ss_size) */ - and t0, t1, t0 /* t0 = (t0 >= ss_size) & (ss_flags & SS_ONSTACK) */ - bne t0, $Lok - - ldah a0, longjmp_msg(gp) !gprelhigh - lda a0, longjmp_msg(a0) !gprellow -#ifdef PIC - jsr ra, HIDDEN_JUMPTARGET(__fortify_fail) -#else - bsr ra, HIDDEN_JUMPTARGET(__fortify_fail) !samegp -#endif - bugchk - - cfi_endproc - .size ____longjmp_chk, .-____longjmp_chk diff --git a/sysdeps/unix/sysv/linux/alpha/a.out.h b/sysdeps/unix/sysv/linux/alpha/a.out.h deleted file mode 100644 index a7699f0fe0..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/a.out.h +++ /dev/null @@ -1,197 +0,0 @@ -#ifndef __A_OUT_GNU_H__ -#define __A_OUT_GNU_H__ - -#include - -#define __GNU_EXEC_MACROS__ - -/* - * OSF/1 ECOFF header structs. ECOFF files consist of: - * - a file header (struct filehdr), - * - an a.out header (struct aouthdr), - * - one or more section headers (struct scnhdr). - * The filhdr's "f_nscns" field contains the - * number of section headers. - */ - -struct filehdr -{ - /* OSF/1 "file" header */ - unsigned short f_magic, f_nscns; - unsigned int f_timdat; - unsigned long f_symptr; - unsigned int f_nsyms; - unsigned short f_opthdr, f_flags; -}; - -struct aouthdr -{ - unsigned long info; /* After that it looks quite normal.. */ - unsigned long tsize; - unsigned long dsize; - unsigned long bsize; - unsigned long entry; - unsigned long text_start; /* With a few additions that actually make sense. */ - unsigned long data_start; - unsigned long bss_start; - unsigned int gprmask, fprmask; /* Bitmask of general & floating point regs used in binary. */ - unsigned long gpvalue; -}; - -struct scnhdr -{ - char s_name[8]; - unsigned long s_paddr; - unsigned long s_vaddr; - unsigned long s_size; - unsigned long s_scnptr; - unsigned long s_relptr; - unsigned long s_lnnoptr; - unsigned short s_nreloc; - unsigned short s_nlnno; - unsigned int s_flags; -}; - -struct exec -{ - /* OSF/1 "file" header */ - struct filehdr fh; - struct aouthdr ah; -}; - -#define a_info ah.info -#define a_text ah.tsize -#define a_data ah.dsize -#define a_bss ah.bsize -#define a_entry ah.entry -#define a_textstart ah.text_start -#define a_datastart ah.data_start -#define a_bssstart ah.bss_start -#define a_gprmask ah.gprmask -#define a_fprmask ah.fprmask -#define a_gpvalue ah.gpvalue - - -#define AOUTHSZ sizeof(struct aouthdr) -#define SCNHSZ sizeof(struct scnhdr) -#define SCNROUND 16 - -enum machine_type -{ - M_OLDSUN2 = 0, - M_68010 = 1, - M_68020 = 2, - M_SPARC = 3, - M_386 = 100, - M_MIPS1 = 151, - M_MIPS2 = 152 -}; - -#define N_MAGIC(exec) ((exec).a_info & 0xffff) -#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff)) -#define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff) -#define N_SET_INFO(exec, magic, type, flags) \ - ((exec).a_info = ((magic) & 0xffff) \ - | (((int)(type) & 0xff) << 16) \ - | (((flags) & 0xff) << 24)) -#define N_SET_MAGIC(exec, magic) \ - ((exec).a_info = ((exec).a_info & 0xffff0000) | ((magic) & 0xffff)) -#define N_SET_MACHTYPE(exec, machtype) \ - ((exec).a_info = \ - ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16)) -#define N_SET_FLAGS(exec, flags) \ - ((exec).a_info = \ - ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24)) - -/* Code indicating object file or impure executable. */ -#define OMAGIC 0407 -/* Code indicating pure executable. */ -#define NMAGIC 0410 -/* Code indicating demand-paged executable. */ -#define ZMAGIC 0413 -/* This indicates a demand-paged executable with the header in the text. - The first page is unmapped to help trap NULL pointer references. */ -#define QMAGIC 0314 -/* Code indicating core file. */ -#define CMAGIC 0421 - -#define N_TRSIZE(x) 0 -#define N_DRSIZE(x) 0 -#define N_SYMSIZE(x) 0 -#define N_BADMAG(x) \ - (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \ - && N_MAGIC(x) != ZMAGIC && N_MAGIC(x) != QMAGIC) -#define _N_HDROFF(x) (1024 - sizeof (struct exec)) -#define N_TXTOFF(x) \ - ((long) N_MAGIC(x) == ZMAGIC ? 0 : \ - (sizeof (struct exec) + (x).fh.f_nscns * SCNHSZ + SCNROUND - 1) \ - & ~(SCNROUND - 1)) - -#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text) -#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data) -#define N_DRELOFF(x) (N_TRELOFF(x) + N_TRSIZE(x)) -#define N_SYMOFF(x) (N_DRELOFF(x) + N_DRSIZE(x)) -#define N_STROFF(x) (N_SYMOFF(x) + N_SYMSIZE(x)) - -/* Address of text segment in memory after it is loaded. */ -#define N_TXTADDR(x) ((x).a_textstart) - -/* Address of data segment in memory after it is loaded. */ -#define SEGMENT_SIZE 1024 - -#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1)) -#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text) - -#define N_DATADDR(x) ((x).a_datastart) -#define N_BSSADDR(x) ((x).a_bssstart) - -#if !defined (N_NLIST_DECLARED) -struct nlist -{ - union - { - char *n_name; - struct nlist *n_next; - long n_strx; - } n_un; - unsigned char n_type; - char n_other; - short n_desc; - unsigned long n_value; -}; -#endif /* no N_NLIST_DECLARED. */ - -#define N_UNDF 0 -#define N_ABS 2 -#define N_TEXT 4 -#define N_DATA 6 -#define N_BSS 8 -#define N_FN 15 -#define N_EXT 1 -#define N_TYPE 036 -#define N_STAB 0340 -#define N_INDR 0xa -#define N_SETA 0x14 /* Absolute set element symbol. */ -#define N_SETT 0x16 /* Text set element symbol. */ -#define N_SETD 0x18 /* Data set element symbol. */ -#define N_SETB 0x1A /* Bss set element symbol. */ -#define N_SETV 0x1C /* Pointer to set vector in data area. */ - -#if !defined (N_RELOCATION_INFO_DECLARED) -/* This structure describes a single relocation to be performed. - The text-relocation section of the file is a vector of these structures, - all of which apply to the text section. - Likewise, the data-relocation section applies to the data section. */ - -struct relocation_info -{ - int r_address; - unsigned int r_symbolnum:24; - unsigned int r_pcrel:1; - unsigned int r_length:2; - unsigned int r_extern:1; - unsigned int r_pad:4; -}; -#endif /* no N_RELOCATION_INFO_DECLARED. */ - -#endif /* __A_OUT_GNU_H__ */ diff --git a/sysdeps/unix/sysv/linux/alpha/adjtime.c b/sysdeps/unix/sysv/linux/alpha/adjtime.c deleted file mode 100644 index 9ed0119a8f..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/adjtime.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) -struct timeval32 -{ - int tv_sec, tv_usec; -}; - -struct timex32 { - unsigned int modes; /* mode selector */ - long offset; /* time offset (usec) */ - long freq; /* frequency offset (scaled ppm) */ - long maxerror; /* maximum error (usec) */ - long esterror; /* estimated error (usec) */ - int status; /* clock command/status */ - long constant; /* pll time constant */ - long precision; /* clock precision (usec) (read only) */ - long tolerance; /* clock frequency tolerance (ppm) - * (read only) - */ - struct timeval32 time; /* (read only) */ - long tick; /* (modified) usecs between clock ticks */ - - long ppsfreq; /* pps frequency (scaled ppm) (ro) */ - long jitter; /* pps jitter (us) (ro) */ - int shift; /* interval duration (s) (shift) (ro) */ - long stabil; /* pps stability (scaled ppm) (ro) */ - long jitcnt; /* jitter limit exceeded (ro) */ - long calcnt; /* calibration intervals (ro) */ - long errcnt; /* calibration errors (ro) */ - long stbcnt; /* stability limit exceeded (ro) */ - - int :32; int :32; int :32; int :32; - int :32; int :32; int :32; int :32; - int :32; int :32; int :32; int :32; -}; - -#define TIMEVAL timeval32 -#define TIMEX timex32 -#define ADJTIME attribute_compat_text_section __adjtime_tv32 -#define ADJTIMEX(x) INLINE_SYSCALL (old_adjtimex, 1, x) -#define ADJTIMEX32(x) INLINE_SYSCALL (old_adjtimex, 1, x) - -#include - -int attribute_compat_text_section -__adjtimex_tv32 (struct timex32 *tx) { return ADJTIMEX (tx); } - -strong_alias (__adjtimex_tv32, __adjtimex_tv32_1); -strong_alias (__adjtimex_tv32, __adjtimex_tv32_2); -compat_symbol (libc, __adjtimex_tv32_1, __adjtimex, GLIBC_2_0); -compat_symbol (libc, __adjtimex_tv32_2, adjtimex, GLIBC_2_0); -compat_symbol (libc, __adjtime_tv32, adjtime, GLIBC_2_0); -#endif /* SHLIB_COMPAT */ - -#undef TIMEVAL -#undef TIMEX -#undef ADJTIME -#undef ADJTIMEX -#define TIMEVAL timeval -#define TIMEX timex -#define ADJTIMEX(x) INLINE_SYSCALL (adjtimex, 1, x) - -#include - -int -__adjtimex_tv64 (struct timex *tx) { return ADJTIMEX (tx); } - -libc_hidden_ver (__adjtimex_tv64, __adjtimex) -strong_alias (__adjtimex_tv64, __adjtimex_tv64p); -weak_alias (__adjtimex_tv64, ntp_adjtime); -versioned_symbol (libc, __adjtimex_tv64, __adjtimex, GLIBC_2_1); -versioned_symbol (libc, __adjtimex_tv64p, adjtimex, GLIBC_2_1); -versioned_symbol (libc, __adjtime, adjtime, GLIBC_2_1); diff --git a/sysdeps/unix/sysv/linux/alpha/aio_cancel.c b/sysdeps/unix/sysv/linux/alpha/aio_cancel.c deleted file mode 100644 index 0d6da82919..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/aio_cancel.c +++ /dev/null @@ -1,33 +0,0 @@ -#include - -#define aio_cancel64 XXX -#include -#undef aio_cancel64 -#include - -extern __typeof (aio_cancel) __new_aio_cancel; -extern __typeof (aio_cancel) __old_aio_cancel; - -#define aio_cancel __new_aio_cancel - -#include - -#undef aio_cancel -strong_alias (__new_aio_cancel, __new_aio_cancel64); -versioned_symbol (librt, __new_aio_cancel, aio_cancel, GLIBC_2_3); -versioned_symbol (librt, __new_aio_cancel64, aio_cancel64, GLIBC_2_3); - -#if SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_3) - -#undef ECANCELED -#define aio_cancel __old_aio_cancel -#define ECANCELED 125 - -#include - -#undef aio_cancel -strong_alias (__old_aio_cancel, __old_aio_cancel64); -compat_symbol (librt, __old_aio_cancel, aio_cancel, GLIBC_2_1); -compat_symbol (librt, __old_aio_cancel64, aio_cancel64, GLIBC_2_1); - -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h b/sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h deleted file mode 100644 index 57b96d64db..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef __alpha_ptrace_h__ -#define __alpha_ptrace_h__ - -/* - * Mostly for OSF/1 compatibility. - */ - -#define REG_BASE 0 -#define NGP_REGS 32 -#define NFP_REGS 32 - -#define GPR_BASE REG_BASE -#define FPR_BASE (GPR_BASE+NGP_REGS) -#define PC (FPR_BASE+NFP_REGS) -#define SPR_PS (PC+1) -#define NPTRC_REGS (SPR_PS+1) - -#endif /* __alpha_ptrace_h__ */ diff --git a/sysdeps/unix/sysv/linux/alpha/alpha/regdef.h b/sysdeps/unix/sysv/linux/alpha/alpha/regdef.h deleted file mode 100644 index 142df9c4f8..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/alpha/regdef.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef __alpha_regdef_h__ -#define __alpha_regdef_h__ - -#define v0 $0 /* function return value */ - -#define t0 $1 /* temporary registers (caller-saved) */ -#define t1 $2 -#define t2 $3 -#define t3 $4 -#define t4 $5 -#define t5 $6 -#define t6 $7 -#define t7 $8 - -#define s0 $9 /* saved-registers (callee-saved registers) */ -#define s1 $10 -#define s2 $11 -#define s3 $12 -#define s4 $13 -#define s5 $14 -#define s6 $15 -#define fp s6 /* frame-pointer (s6 in frame-less procedures) */ - -#define a0 $16 /* argument registers (caller-saved) */ -#define a1 $17 -#define a2 $18 -#define a3 $19 -#define a4 $20 -#define a5 $21 - -#define t8 $22 /* more temps (caller-saved) */ -#define t9 $23 -#define t10 $24 -#define t11 $25 -#define ra $26 /* return address register */ -#define t12 $27 - -#define pv t12 /* procedure-variable register */ -#define AT $at /* assembler temporary */ -#define gp $29 /* global pointer */ -#define sp $30 /* stack pointer */ -#define zero $31 /* reads as zero, writes are noops */ - -#endif /* __alpha_regdef_h__ */ diff --git a/sysdeps/unix/sysv/linux/alpha/alphaev6/fpu/Implies b/sysdeps/unix/sysv/linux/alpha/alphaev6/fpu/Implies deleted file mode 100644 index 0d7000dc2d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/alphaev6/fpu/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# Override ldbl-opt with alpha specific routines. -alpha/alphaev6/fpu diff --git a/sysdeps/unix/sysv/linux/alpha/alphaev67/fpu/Implies b/sysdeps/unix/sysv/linux/alpha/alphaev67/fpu/Implies deleted file mode 100644 index 617c388d2d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/alphaev67/fpu/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# Override ldbl-opt with alpha specific routines. -alpha/alphaev67/fpu diff --git a/sysdeps/unix/sysv/linux/alpha/arch-fork.h b/sysdeps/unix/sysv/linux/alpha/arch-fork.h deleted file mode 100644 index 4e4e26d7ab..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/arch-fork.h +++ /dev/null @@ -1,28 +0,0 @@ -/* ARCH_FORK definition for Linux fork implementation. Alpha version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - - -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 5, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ - NULL, NULL, &THREAD_SELF->tid, NULL) diff --git a/sysdeps/unix/sysv/linux/alpha/bits/a.out.h b/sysdeps/unix/sysv/linux/alpha/bits/a.out.h deleted file mode 100644 index 82a3dd4c0d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/a.out.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __A_OUT_GNU_H__ -# error "Never use directly; include instead." -#endif -#ifndef __A_OUT_GNU_H__ -# error "Never use directly; include instead." -#endif -#ifndef __A_OUT_GNU_H__ -# error "Never use directly; include instead." -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/bits/dirent.h b/sysdeps/unix/sysv/linux/alpha/bits/dirent.h deleted file mode 100644 index 2ac7893af0..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/dirent.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _BITS_DIRENT_H -#define _BITS_DIRENT_H 1 - -struct dirent - { -#ifdef __USE_FILE_OFFSET64 - __ino64_t d_ino; -#else - __ino_t d_ino; - int __pad; -#endif - __off_t d_off; - unsigned short int d_reclen; - unsigned char d_type; - char d_name[256]; /* We must not include limits.h! */ - }; - -#ifdef __USE_LARGEFILE64 -/* Note dirent64 is the same as dirent. */ -struct dirent64 - { - __ino64_t d_ino; - __off64_t d_off; - unsigned short int d_reclen; - unsigned char d_type; - char d_name[256]; /* We must not include limits.h! */ - }; -#endif - -#define d_fileno d_ino /* Backwards compatibility. */ - -#undef _DIRENT_HAVE_D_NAMLEN -#define _DIRENT_HAVE_D_RECLEN -#define _DIRENT_HAVE_D_OFF -#define _DIRENT_HAVE_D_TYPE - -/* Inform libc code that these two types are effectively identical. */ -#define _DIRENT_MATCHES_DIRENT64 1 - -#endif /* bits/dirent.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/elfclass.h b/sysdeps/unix/sysv/linux/alpha/bits/elfclass.h deleted file mode 100644 index e5aa4a0fbd..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/elfclass.h +++ /dev/null @@ -1,14 +0,0 @@ -/* This file specifies the native word size of the machine, which indicates - the ELF file class used for executables and shared objects on this - machine. */ - -#ifndef _LINK_H -# error "Never use directly; include instead." -#endif - -#include - -#define __ELF_NATIVE_CLASS __WORDSIZE - -/* Linux/Alpha is exceptional as it has .hash section with 64 bit entries. */ -typedef uint64_t Elf_Symndx; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/epoll.h b/sysdeps/unix/sysv/linux/alpha/bits/epoll.h deleted file mode 100644 index 18bc87522d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/epoll.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_EPOLL_H -# error "Never use directly; include instead." -#endif - -/* Flags to be passed to epoll_create1. */ -enum - { - EPOLL_CLOEXEC = 010000000 -#define EPOLL_CLOEXEC EPOLL_CLOEXEC - }; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/errno.h b/sysdeps/unix/sysv/linux/alpha/bits/errno.h deleted file mode 100644 index 3338621710..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/errno.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Error constants. Linux/Alpha specific version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifdef _ERRNO_H - -# undef EDOM -# undef EILSEQ -# undef ERANGE -# include - -/* Linux has no ENOTSUP error code. */ -# define ENOTSUP EOPNOTSUPP - -# ifndef ECANCELED -# define ECANCELED 131 -# endif - -/* Support for error codes to support robust mutexes was added later, too. */ -# ifndef EOWNERDEAD -# define EOWNERDEAD 136 -# define ENOTRECOVERABLE 137 -# endif - -# ifndef ERFKILL -# define ERFKILL 138 -# endif - -# ifndef EHWPOISON -# define EHWPOISON 139 -# endif - -# ifndef __ASSEMBLER__ -/* Function to get address of global `errno' variable. */ -extern int *__errno_location (void) __THROW __attribute__ ((__const__)); - -# if !defined _LIBC || defined _LIBC_REENTRANT -/* When using threads, errno is a per-thread value. */ -# define errno (*__errno_location ()) -# endif -# endif /* !__ASSEMBLER__ */ -#endif /* _ERRNO_H */ - -#if !defined _ERRNO_H && defined __need_Emath -/* This is ugly but the kernel header is not clean enough. We must - define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is - defined. */ -# define EDOM 33 /* Math argument out of domain of function. */ -# define EILSEQ 116 /* Illegal byte sequence. */ -# define ERANGE 34 /* Math result not representable. */ -#endif /* !_ERRNO_H && __need_Emath */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/eventfd.h b/sysdeps/unix/sysv/linux/alpha/bits/eventfd.h deleted file mode 100644 index 60e7d5e78f..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/eventfd.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_EVENTFD_H -# error "Never use directly; include instead." -#endif - -/* Flags for eventfd. */ -enum - { - EFD_SEMAPHORE = 000000001, -#define EFD_SEMAPHORE EFD_SEMAPHORE - EFD_CLOEXEC = 010000000, -#define EFD_CLOEXEC EFD_CLOEXEC - EFD_NONBLOCK = 000000004 -#define EFD_NONBLOCK EFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h b/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h deleted file mode 100644 index 0db4643507..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h +++ /dev/null @@ -1,87 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -#define O_CREAT 01000 /* not fcntl */ -#define O_TRUNC 02000 /* not fcntl */ -#define O_EXCL 04000 /* not fcntl */ -#define O_NOCTTY 010000 /* not fcntl */ - -#define O_NONBLOCK 00004 -#define O_APPEND 00010 -#define O_SYNC 020040000 - -#define __O_DIRECTORY 0100000 /* Must be a directory. */ -#define __O_NOFOLLOW 0200000 /* Do not follow links. */ -#define __O_CLOEXEC 010000000 /* Set close_on_exec. */ - -#define __O_DIRECT 02000000 /* Direct disk access. */ -#define __O_NOATIME 04000000 /* Do not set atime. */ -#define __O_PATH 040000000 /* Resolve pathname but do not open file. */ -#define __O_TMPFILE 0100100000 /* Atomically create nameless file. */ - -/* Not necessary, files are always with 64bit off_t. */ -#define __O_LARGEFILE 0 - -#define __O_DSYNC 040000 /* Synchronize data. */ - -#define F_GETLK 7 /* Get record locking info. */ -#define F_SETLK 8 /* Set record locking info (non-blocking). */ -#define F_SETLKW 9 /* Set record locking info (blocking). */ -#define F_GETLK64 F_GETLK /* Get record locking info. */ -#define F_SETLK64 F_SETLK /* Set record locking info (non-blocking). */ -#define F_SETLKW64 F_SETLKW /* Set record locking info (blocking). */ - -#define __F_SETOWN 5 /* Get owner of socket (receiver of SIGIO). */ -#define __F_GETOWN 6 /* Set owner of socket (receiver of SIGIO). */ - -/* For posix fcntl() and `l_type' field of a `struct flock' for lockf() */ -#define F_RDLCK 1 /* Read lock. */ -#define F_WRLCK 2 /* Write lock. */ -#define F_UNLCK 8 /* Remove lock. */ - -/* for old implementation of bsd flock () */ -#define F_EXLCK 16 /* or 3 */ -#define F_SHLCK 32 /* or 4 */ - -/* We don't need to support __USE_FILE_OFFSET64. */ -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/bits/inotify.h b/sysdeps/unix/sysv/linux/alpha/bits/inotify.h deleted file mode 100644 index 5597935f47..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/inotify.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_INOTIFY_H -# error "Never use directly; include instead." -#endif - -/* Flags for the parameter of inotify_init1. */ -enum - { - IN_CLOEXEC = 010000000, -#define IN_CLOEXEC IN_CLOEXEC - IN_NONBLOCK = 000000004 -#define IN_NONBLOCK IN_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/ioctls.h b/sysdeps/unix/sysv/linux/alpha/bits/ioctls.h deleted file mode 100644 index 1626445574..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/ioctls.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_IOCTL_H -# error "Never use directly; include instead." -#endif - -/* Use the definitions from the kernel header files. */ -#include - -/* Oh well, this is necessary since the kernel data structure is - different from the user-level version. */ -#undef TCGETS -#undef TCSETS -#undef TCSETSW -#undef TCSETSF -#define TCGETS _IOR ('t', 19, char[44]) -#define TCSETS _IOW ('t', 20, char[44]) -#define TCSETSW _IOW ('t', 21, char[44]) -#define TCSETSF _IOW ('t', 22, char[44]) - -#include diff --git a/sysdeps/unix/sysv/linux/alpha/bits/ipc.h b/sysdeps/unix/sysv/linux/alpha/bits/ipc.h deleted file mode 100644 index 495e0fac3a..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/ipc.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_IPC_H -# error "Never use directly; include instead." -#endif - -#include - -/* Mode bits for `msgget', `semget', and `shmget'. */ -#define IPC_CREAT 01000 /* Create key if key does not exist. */ -#define IPC_EXCL 02000 /* Fail if key exists. */ -#define IPC_NOWAIT 04000 /* Return error on wait. */ - -/* Control commands for `msgctl', `semctl', and `shmctl'. */ -#define IPC_RMID 0 /* Remove identifier. */ -#define IPC_SET 1 /* Set `ipc_perm' options. */ -#define IPC_STAT 2 /* Get `ipc_perm' options. */ -#ifdef __USE_GNU -# define IPC_INFO 3 /* See ipcs. */ -#endif - -/* Special key values. */ -#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ - - -/* Data structure used to pass permission information to IPC operations. */ -struct ipc_perm - { - __key_t __key; /* Key. */ - unsigned int uid; /* Owner's user ID. */ - unsigned int gid; /* Owner's group ID. */ - unsigned int cuid; /* Creator's user ID. */ - unsigned int cgid; /* Creator's group ID. */ - unsigned int mode; /* Read/write permission. */ - unsigned short int __seq; /* Sequence number. */ - unsigned short int __pad1; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - }; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h b/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h deleted file mode 100644 index 4bbd45d026..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Minimum guaranteed maximum values for system limits. Linux/Alpha version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library. If not, see - . */ - -/* The kernel header pollutes the namespace with the NR_OPEN symbol - and defines LINK_MAX although filesystems have different maxima. A - similar thing is true for OPEN_MAX: the limit can be changed at - runtime and therefore the macro must not be defined. Remove this - after including the header if necessary. */ -#ifndef NR_OPEN -# define __undef_NR_OPEN -#endif -#ifndef LINK_MAX -# define __undef_LINK_MAX -#endif -#ifndef OPEN_MAX -# define __undef_OPEN_MAX -#endif -#ifndef ARG_MAX -# define __undef_ARG_MAX -#endif - -/* The kernel sources contain a file with all the needed information. */ -#include - -/* Have to remove NR_OPEN? */ -#ifdef __undef_NR_OPEN -# undef NR_OPEN -# undef __undef_NR_OPEN -#endif -/* Have to remove LINK_MAX? */ -#ifdef __undef_LINK_MAX -# undef LINK_MAX -# undef __undef_LINK_MAX -#endif -/* Have to remove OPEN_MAX? */ -#ifdef __undef_OPEN_MAX -# undef OPEN_MAX -# undef __undef_OPEN_MAX -#endif -/* Have to remove ARG_MAX? */ -#ifdef __undef_ARG_MAX -# undef ARG_MAX -# undef __undef_ARG_MAX -#endif - -/* The number of data keys per process. */ -#define _POSIX_THREAD_KEYS_MAX 128 -/* This is the value this implementation supports. */ -#define PTHREAD_KEYS_MAX 1024 - -/* Controlling the iterations of destructors for thread-specific data. */ -#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 -/* Number of iterations this implementation does. */ -#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS - -/* The number of threads per process. */ -#define _POSIX_THREAD_THREADS_MAX 64 -/* We have no predefined limit on the number of threads. */ -#undef PTHREAD_THREADS_MAX - -/* Maximum amount by which a process can descrease its asynchronous I/O - priority level. */ -#define AIO_PRIO_DELTA_MAX 20 - -/* Minimum size for a thread. We are free to choose a reasonable value. */ -#define PTHREAD_STACK_MIN 24576 - -/* Maximum number of timer expiration overruns. */ -#define DELAYTIMER_MAX 2147483647 - -/* Maximum tty name length. */ -#define TTY_NAME_MAX 32 - -/* Maximum login name length. This is arbitrary. */ -#define LOGIN_NAME_MAX 256 - -/* Maximum host name length. */ -#define HOST_NAME_MAX 64 - -/* Maximum message queue priority level. */ -#define MQ_PRIO_MAX 32768 - -/* Maximum value the semaphore can have. */ -#define SEM_VALUE_MAX (2147483647) diff --git a/sysdeps/unix/sysv/linux/alpha/bits/mman.h b/sysdeps/unix/sysv/linux/alpha/bits/mman.h deleted file mode 100644 index 5740188dac..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/mman.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/Alpha version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - -#define __MAP_ANONYMOUS 0x10 /* Don't use a file. */ - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_GROWSDOWN 0x01000 /* Stack-like segment. */ -# define MAP_DENYWRITE 0x02000 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x04000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x08000 /* Lock the mapping. */ -# define MAP_NORESERVE 0x10000 /* Don't check for reservations. */ -# define MAP_POPULATE 0x20000 /* Populate (prefault) pagetables. */ -# define MAP_NONBLOCK 0x40000 /* Do not block on IO. */ -# define MAP_STACK 0x80000 /* Allocation is for a stack. */ -# define MAP_HUGETLB 0x100000 /* Create huge page mapping. */ -#endif - -/* Flags for `mlockall'. */ -#define MCL_CURRENT 8192 -#define MCL_FUTURE 16384 -#define MCL_ONFAULT 32768 - -#include - -/* Values that differ from standard . For the most part newer - values are shared, but older values are skewed. */ - -#undef MAP_FIXED -#define MAP_FIXED 0x100 - -#undef MS_SYNC -#define MS_SYNC 2 -#undef MS_INVALIDATE -#define MS_INVALIDATE 4 - -#ifdef __USE_MISC -# undef MADV_DONTNEED -# define MADV_DONTNEED 6 -#endif -#ifdef __USE_XOPEN2K -# undef POSIX_MADV_DONTNEED -# define POSIX_MADV_DONTNEED 6 -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/bits/msq.h b/sysdeps/unix/sysv/linux/alpha/bits/msq.h deleted file mode 100644 index e7db7dc9a9..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/msq.h +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_MSG_H -# error "Never use directly; include instead." -#endif - -#include - -/* Define options for message queue functions. */ -#define MSG_NOERROR 010000 /* no error if message is too big */ -#ifdef __USE_GNU -# define MSG_EXCEPT 020000 /* recv any msg except of specified type */ -# define MSG_COPY 040000 /* copy (not remove) all queue messages */ -#endif - -/* Types used in the structure definition. */ -typedef unsigned long int msgqnum_t; -typedef unsigned long int msglen_t; - - -/* Structure of record for one message inside the kernel. - The type `struct msg' is opaque. */ -struct msqid_ds -{ - struct ipc_perm msg_perm; /* structure describing operation permission */ - __time_t msg_stime; /* time of last msgsnd command */ - __time_t msg_rtime; /* time of last msgrcv command */ - __time_t msg_ctime; /* time of last change */ - unsigned long int __msg_cbytes; /* current number of bytes on queue */ - msgqnum_t msg_qnum; /* number of messages currently on queue */ - msglen_t msg_qbytes; /* max number of bytes allowed on queue */ - __pid_t msg_lspid; /* pid of last msgsnd() */ - __pid_t msg_lrpid; /* pid of last msgrcv() */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; -}; - -#ifdef __USE_MISC - -# define msg_cbytes __msg_cbytes - -/* ipcs ctl commands */ -# define MSG_STAT 11 -# define MSG_INFO 12 - -/* buffer for msgctl calls IPC_INFO, MSG_INFO */ -struct msginfo - { - int msgpool; - int msgmap; - int msgmax; - int msgmnb; - int msgmni; - int msgssz; - int msgtql; - unsigned short int msgseg; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/netdb.h b/sysdeps/unix/sysv/linux/alpha/bits/netdb.h deleted file mode 100644 index f47af14907..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/netdb.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _NETDB_H -# error "Never include directly; use instead." -#endif - - -/* Description of data base entry for a single network. NOTE: here a - poor assumption is made. The network number is expected to fit - into an unsigned long int variable. */ -struct netent -{ - char *n_name; /* Official name of network. */ - char **n_aliases; /* Alias list. */ - int n_addrtype; /* Net address type. */ - /* XXX We should probably use uint32_t for the field and ensure - compatibility by adding appropriate padding. */ - unsigned long int n_net; /* Network number. */ -}; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/resource.h b/sysdeps/unix/sysv/linux/alpha/bits/resource.h deleted file mode 100644 index e5d5bc82d0..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/resource.h +++ /dev/null @@ -1,265 +0,0 @@ -/* Bit values & structures for resource limits. Alpha/Linux version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_RESOURCE_H -# error "Never use directly; include instead." -#endif - -#include - -/* Transmute defines to enumerations. The macro re-definitions are - necessary because some programs want to test for operating system - features with #ifdef RUSAGE_SELF. In ISO C the reflexive - definition is a no-op. */ - -/* Kinds of resource limit. */ -enum __rlimit_resource -{ - /* Per-process CPU limit, in seconds. */ - RLIMIT_CPU = 0, -#define RLIMIT_CPU RLIMIT_CPU - - /* Largest file that can be created, in bytes. */ - RLIMIT_FSIZE = 1, -#define RLIMIT_FSIZE RLIMIT_FSIZE - - /* Maximum size of data segment, in bytes. */ - RLIMIT_DATA = 2, -#define RLIMIT_DATA RLIMIT_DATA - - /* Maximum size of stack segment, in bytes. */ - RLIMIT_STACK = 3, -#define RLIMIT_STACK RLIMIT_STACK - - /* Largest core file that can be created, in bytes. */ - RLIMIT_CORE = 4, -#define RLIMIT_CORE RLIMIT_CORE - - /* Largest resident set size, in bytes. - This affects swapping; processes that are exceeding their - resident set size will be more likely to have physical memory - taken from them. */ - __RLIMIT_RSS = 5, -#define RLIMIT_RSS __RLIMIT_RSS - - /* Number of open files. */ - RLIMIT_NOFILE = 6, - __RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */ -#define RLIMIT_NOFILE RLIMIT_NOFILE -#define RLIMIT_OFILE __RLIMIT_OFILE - - /* Address space limit (?) */ - RLIMIT_AS = 7, -#define RLIMIT_AS RLIMIT_AS - - /* Number of processes. */ - __RLIMIT_NPROC = 8, -#define RLIMIT_NPROC __RLIMIT_NPROC - - /* Locked-in-memory address space. */ - __RLIMIT_MEMLOCK = 9, -#define RLIMIT_MEMLOCK __RLIMIT_MEMLOCK - - /* Maximum number of file locks. */ - __RLIMIT_LOCKS = 10, -#define RLIMIT_LOCKS __RLIMIT_LOCKS - - /* Maximum number of pending signals. */ - __RLIMIT_SIGPENDING = 11, -#define RLIMIT_SIGPENDING __RLIMIT_SIGPENDING - - /* Maximum bytes in POSIX message queues. */ - __RLIMIT_MSGQUEUE = 12, -#define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE - - /* Maximum nice priority allowed to raise to. - Nice levels 19 .. -20 correspond to 0 .. 39 - values of this resource limit. */ - __RLIMIT_NICE = 13, -#define RLIMIT_NICE __RLIMIT_NICE - - /* Maximum realtime priority allowed for non-priviledged - processes. */ - __RLIMIT_RTPRIO = 14, -#define RLIMIT_RTPRIO __RLIMIT_RTPRIO - - /* Maximum CPU time in µs that a process scheduled under a real-time - scheduling policy may consume without making a blocking system - call before being forcibly descheduled. */ - __RLIMIT_RTTIME = 15, -#define RLIMIT_RTTIME __RLIMIT_RTTIME - - __RLIMIT_NLIMITS = 16, - __RLIM_NLIMITS = __RLIMIT_NLIMITS -#define RLIMIT_NLIMITS __RLIMIT_NLIMITS -#define RLIM_NLIMITS __RLIM_NLIMITS -}; - -/* Value to indicate that there is no limit. */ -#ifndef __USE_FILE_OFFSET64 -# define RLIM_INFINITY ((long int)(~0UL >> 1)) -#else -# define RLIM_INFINITY 0x7fffffffffffffffLL -#endif - -#ifdef __USE_LARGEFILE64 -# define RLIM64_INFINITY 0x7fffffffffffffffLL -#endif - -/* We can represent all limits. */ -#define RLIM_SAVED_MAX RLIM_INFINITY -#define RLIM_SAVED_CUR RLIM_INFINITY - - -/* Type for resource quantity measurement. */ -#ifndef __USE_FILE_OFFSET64 -typedef __rlim_t rlim_t; -#else -typedef __rlim64_t rlim_t; -#endif -#ifdef __USE_LARGEFILE64 -typedef __rlim64_t rlim64_t; -#endif - -struct rlimit - { - /* The current (soft) limit. */ - rlim_t rlim_cur; - /* The hard limit. */ - rlim_t rlim_max; - }; - -#ifdef __USE_LARGEFILE64 -struct rlimit64 - { - /* The current (soft) limit. */ - rlim64_t rlim_cur; - /* The hard limit. */ - rlim64_t rlim_max; - }; -#endif - -/* Whose usage statistics do you want? */ -enum __rusage_who -{ - /* The calling process. */ - RUSAGE_SELF = 0, -#define RUSAGE_SELF RUSAGE_SELF - - /* All of its terminated child processes. */ - RUSAGE_CHILDREN = -1 -#define RUSAGE_CHILDREN RUSAGE_CHILDREN - -#ifdef __USE_GNU - , - /* The calling thread. */ - RUSAGE_THREAD = 1 -# define RUSAGE_THREAD RUSAGE_THREAD - /* Name for the same functionality on Solaris. */ -# define RUSAGE_LWP RUSAGE_THREAD -#endif -}; - -#include - -/* Structure which says how much of each resource has been used. */ -struct rusage - { - /* Total amount of user time used. */ - struct timeval ru_utime; - /* Total amount of system time used. */ - struct timeval ru_stime; - /* Maximum resident set size (in kilobytes). */ - long int ru_maxrss; - /* Amount of sharing of text segment memory - with other processes (kilobyte-seconds). */ - long int ru_ixrss; - /* Amount of data segment memory used (kilobyte-seconds). */ - long int ru_idrss; - /* Amount of stack memory used (kilobyte-seconds). */ - long int ru_isrss; - /* Number of soft page faults (i.e. those serviced by reclaiming - a page from the list of pages awaiting reallocation. */ - long int ru_minflt; - /* Number of hard page faults (i.e. those that required I/O). */ - long int ru_majflt; - /* Number of times a process was swapped out of physical memory. */ - long int ru_nswap; - /* Number of input operations via the file system. Note: This - and `ru_oublock' do not include operations with the cache. */ - long int ru_inblock; - /* Number of output operations via the file system. */ - long int ru_oublock; - /* Number of IPC messages sent. */ - long int ru_msgsnd; - /* Number of IPC messages received. */ - long int ru_msgrcv; - /* Number of signals delivered. */ - long int ru_nsignals; - /* Number of voluntary context switches, i.e. because the process - gave up the process before it had to (usually to wait for some - resource to be available). */ - long int ru_nvcsw; - /* Number of involuntary context switches, i.e. a higher priority process - became runnable or the current process used up its time slice. */ - long int ru_nivcsw; - }; - -/* Priority limits. */ -#define PRIO_MIN -20 /* Minimum priority a process can have. */ -#define PRIO_MAX 20 /* Maximum priority a process can have. */ - -/* The type of the WHICH argument to `getpriority' and `setpriority', - indicating what flavor of entity the WHO argument specifies. */ -enum __priority_which -{ - PRIO_PROCESS = 0, /* WHO is a process ID. */ -#define PRIO_PROCESS PRIO_PROCESS - PRIO_PGRP = 1, /* WHO is a process group ID. */ -#define PRIO_PGRP PRIO_PGRP - PRIO_USER = 2 /* WHO is a user ID. */ -#define PRIO_USER PRIO_USER -}; - - -__BEGIN_DECLS - -#ifdef __USE_GNU -/* Modify and return resource limits of a process atomically. */ -# ifndef __USE_FILE_OFFSET64 -extern int prlimit (__pid_t __pid, enum __rlimit_resource __resource, - const struct rlimit *__new_limit, - struct rlimit *__old_limit) __THROW; -# else -# ifdef __REDIRECT_NTH -extern int __REDIRECT_NTH (prlimit, (__pid_t __pid, - enum __rlimit_resource __resource, - const struct rlimit *__new_limit, - struct rlimit *__old_limit), prlimit64); -# else -# define prlimit prlimit64 -# endif -# endif -# ifdef __USE_LARGEFILE64 -extern int prlimit64 (__pid_t __pid, enum __rlimit_resource __resource, - const struct rlimit64 *__new_limit, - struct rlimit64 *__old_limit) __THROW; -# endif -#endif - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/alpha/bits/sem.h b/sysdeps/unix/sysv/linux/alpha/bits/sem.h deleted file mode 100644 index 36de4390e8..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/sem.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_SEM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Flags for `semop'. */ -#define SEM_UNDO 0x1000 /* undo the operation on exit */ - -/* Commands for `semctl'. */ -#define GETPID 11 /* get sempid */ -#define GETVAL 12 /* get semval */ -#define GETALL 13 /* get all semval's */ -#define GETNCNT 14 /* get semncnt */ -#define GETZCNT 15 /* get semzcnt */ -#define SETVAL 16 /* set semval */ -#define SETALL 17 /* set all semval's */ - - -/* Data structure describing a set of semaphores. */ -struct semid_ds -{ - struct ipc_perm sem_perm; /* operation permission struct */ - __time_t sem_otime; /* last semop() time */ - __time_t sem_ctime; /* last time changed by semctl() */ - unsigned long int sem_nsems; /* number of semaphores in set */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; -}; - -/* The user should define a union like the following to use it for arguments - for `semctl'. - - union semun - { - int val; <= value for SETVAL - struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET - unsigned short int *array; <= array for GETALL & SETALL - struct seminfo *__buf; <= buffer for IPC_INFO - }; - - Previous versions of this file used to define this union but this is - incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether - one must define the union or not. */ -#define _SEM_SEMUN_UNDEFINED 1 - -#ifdef __USE_MISC - -/* ipcs ctl cmds */ -# define SEM_STAT 18 -# define SEM_INFO 19 - -struct seminfo -{ - int semmap; - int semmni; - int semmns; - int semmnu; - int semmsl; - int semopm; - int semume; - int semusz; - int semvmx; - int semaem; -}; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/semaphore.h b/sysdeps/unix/sysv/linux/alpha/bits/semaphore.h deleted file mode 100644 index 3038a26155..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/semaphore.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Machine-specific POSIX semaphore type layouts. Alpha version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - -# define __SIZEOF_SEM_T 32 - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/shm.h b/sysdeps/unix/sysv/linux/alpha/bits/shm.h deleted file mode 100644 index d628dcf37c..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/shm.h +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_SHM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from */ -#define SHM_W 0200 /* or S_IWUGO from */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ -#define SHM_EXEC 0100000 /* execution access */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -__BEGIN_DECLS - -/* Segment low boundary address multiple. */ -#define SHMLBA (__getpagesize ()) -extern int __getpagesize (void) __THROW __attribute__ ((__const__)); - - -/* Type to count number of attaches. */ -typedef unsigned long int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ - size_t shm_segsz; /* size of segment in bytes */ - __time_t shm_atime; /* time of last shmat() */ - __time_t shm_dtime; /* time of last shmdt() */ - __time_t shm_ctime; /* time of last change by shmctl() */ - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - unsigned long int shmmax; - unsigned long int shmmin; - unsigned long int shmmni; - unsigned long int shmseg; - unsigned long int shmall; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - unsigned long int __glibc_reserved3; - unsigned long int __glibc_reserved4; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h b/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h deleted file mode 100644 index 42eaa818a5..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/sigaction.h +++ /dev/null @@ -1,75 +0,0 @@ -/* The proper definitions for Linux/Alpha sigaction. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SIGNAL_H -# error "Never include directly; use instead." -#endif - -/* Structure describing the action to be taken when a signal arrives. */ -struct sigaction - { - /* Signal handler. */ -#ifdef __USE_POSIX199309 - union - { - /* Used if SA_SIGINFO is not set. */ - __sighandler_t sa_handler; - /* Used if SA_SIGINFO is set. */ - void (*sa_sigaction) (int, siginfo_t *, void *); - } - __sigaction_handler; -# define sa_handler __sigaction_handler.sa_handler -# define sa_sigaction __sigaction_handler.sa_sigaction -#else - __sighandler_t sa_handler; -#endif - - /* Additional set of signals to be blocked. */ - __sigset_t sa_mask; - - /* Special flags. */ - int sa_flags; - }; - -/* Bits in `sa_flags'. */ -#define SA_NOCLDSTOP 0x00000004 /* Don't send SIGCHLD when children stop. */ -#define SA_NOCLDWAIT 0x00000020 /* Don't create zombie on child death. */ -#define SA_SIGINFO 0x00000040 /* Invoke signal-catching function with - three arguments instead of one. */ -#if defined __USE_UNIX98 || defined __USE_MISC -# define SA_ONSTACK 0x00000001 /* Use signal stack by using `sa_restorer'. */ -#endif -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 -# define SA_RESTART 0x00000002 /* Restart syscall on signal return. */ -# define SA_NODEFER 0x00000008 /* Don't automatically block the signal - when its handler is being executed. */ -# define SA_RESETHAND 0x00000010 /* Reset to SIG_DFL on entry to handler. */ -#endif -#ifdef __USE_MISC -# define SA_INTERRUPT 0x20000000 /* Historical no-op. */ - -/* Some aliases for the SA_ constants. */ -# define SA_NOMASK SA_NODEFER -# define SA_ONESHOT SA_RESETHAND -# define SA_STACK SA_ONSTACK -#endif - -/* Values for the HOW argument to `sigprocmask'. */ -#define SIG_BLOCK 1 /* Block signals. */ -#define SIG_UNBLOCK 2 /* Unblock signals. */ -#define SIG_SETMASK 3 /* Set the set of blocked signals. */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/signalfd.h b/sysdeps/unix/sysv/linux/alpha/bits/signalfd.h deleted file mode 100644 index cca91f281b..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/signalfd.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SIGNALFD_H -# error "Never use directly; include instead." -#endif - -/* Flags for signalfd. */ -enum - { - SFD_CLOEXEC = 010000000, -#define SFD_CLOEXEC SFD_CLOEXEC - SFD_NONBLOCK = 000000004 -#define SFD_NONBLOCK SFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/signum.h b/sysdeps/unix/sysv/linux/alpha/bits/signum.h deleted file mode 100644 index e5cc5218e3..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/signum.h +++ /dev/null @@ -1,81 +0,0 @@ -/* Signal number definitions. Linux/Alpha version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifdef _SIGNAL_H - -/* Fake signal functions. */ -#define SIG_ERR ((__sighandler_t) -1) /* Error return. */ -#define SIG_DFL ((__sighandler_t) 0) /* Default action. */ -#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */ - -#ifdef __USE_XOPEN -# define SIG_HOLD ((__sighandler_t) 2) /* Add signal to hold mask. */ -#endif - -/* - * Linux/AXP has different signal numbers that Linux/i386: I'm trying - * to make it OSF/1 binary compatible, at least for normal binaries. - */ -#define SIGHUP 1 -#define SIGINT 2 -#define SIGQUIT 3 -#define SIGILL 4 -#define SIGTRAP 5 -#define SIGABRT 6 -#define SIGEMT 7 -#define SIGFPE 8 -#define SIGKILL 9 -#define SIGBUS 10 -#define SIGSEGV 11 -#define SIGSYS 12 -#define SIGPIPE 13 -#define SIGALRM 14 -#define SIGTERM 15 -#define SIGURG 16 -#define SIGSTOP 17 -#define SIGTSTP 18 -#define SIGCONT 19 -#define SIGCHLD 20 -#define SIGCLD SIGCHLD -#define SIGTTIN 21 -#define SIGTTOU 22 -#define SIGIO 23 -#define SIGXCPU 24 -#define SIGXFSZ 25 -#define SIGVTALRM 26 -#define SIGPROF 27 -#define SIGWINCH 28 -#define SIGINFO 29 -#define SIGUSR1 30 -#define SIGUSR2 31 - -#define SIGPOLL SIGIO -#define SIGPWR SIGINFO -#define SIGIOT SIGABRT - -#define _NSIG 65 /* Biggest signal number + 1. */ - -#define SIGRTMIN (__libc_current_sigrtmin ()) -#define SIGRTMAX (__libc_current_sigrtmax ()) - -/* These are the hard limits of the kernel. These values should not be - used directly at user level. */ -#define __SIGRTMIN 32 -#define __SIGRTMAX (_NSIG - 1) - -#endif /* included. */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/sigstack.h b/sysdeps/unix/sysv/linux/alpha/bits/sigstack.h deleted file mode 100644 index 9a30c9d9d5..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/sigstack.h +++ /dev/null @@ -1,32 +0,0 @@ -/* sigstack, sigaltstack definitions. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _BITS_SIGSTACK_H -#define _BITS_SIGSTACK_H 1 - -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H -# error "Never include this file directly. Use instead" -#endif - -/* Minimum stack size for a signal handler. */ -#define MINSIGSTKSZ 4096 - -/* System default stack size. */ -#define SIGSTKSZ 16384 - -#endif /* bits/sigstack.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/socket_type.h b/sysdeps/unix/sysv/linux/alpha/bits/socket_type.h deleted file mode 100644 index aa83fbaaf7..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/socket_type.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Define enum __socket_type for Linux/Alpha. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_SOCKET_H -# error "Never include directly; use instead." -#endif - -/* Types of sockets. */ -enum __socket_type -{ - SOCK_STREAM = 1, /* Sequenced, reliable, connection-based - byte streams. */ -#define SOCK_STREAM SOCK_STREAM - SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams - of fixed maximum length. */ -#define SOCK_DGRAM SOCK_DGRAM - SOCK_RAW = 3, /* Raw protocol interface. */ -#define SOCK_RAW SOCK_RAW - SOCK_RDM = 4, /* Reliably-delivered messages. */ -#define SOCK_RDM SOCK_RDM - SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based, - datagrams of fixed maximum length. */ -#define SOCK_SEQPACKET SOCK_SEQPACKET - SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */ -#define SOCK_DCCP SOCK_DCCP - SOCK_PACKET = 10, /* Linux specific way of getting packets - at the dev level. For writing rarp and - other similar things on the user level. */ -#define SOCK_PACKET SOCK_PACKET - - /* Flags to be ORed into the type parameter of socket and socketpair and - used for the flags parameter of paccept. */ - - SOCK_CLOEXEC = 010000000, /* Atomically set close-on-exec flag for the - new descriptor(s). */ -#define SOCK_CLOEXEC SOCK_CLOEXEC - SOCK_NONBLOCK = 0x40000000 /* Atomically mark descriptor(s) as - non-blocking. */ -#define SOCK_NONBLOCK SOCK_NONBLOCK -}; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/stat.h b/sysdeps/unix/sysv/linux/alpha/bits/stat.h deleted file mode 100644 index 83e78bc1f6..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/stat.h +++ /dev/null @@ -1,160 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STAT_H -#define _BITS_STAT_H 1 - -/* Versions of the `struct stat' data structure. */ -#define _STAT_VER_KERNEL 0 -#define _STAT_VER_GLIBC2 1 -#define _STAT_VER_GLIBC2_1 2 -#define _STAT_VER_KERNEL64 3 -#define _STAT_VER_GLIBC2_3_4 3 -#define _STAT_VER_LINUX 3 -#define _STAT_VER _STAT_VER_LINUX - -/* Versions of the `xmknod' interface. */ -#define _MKNOD_VER_LINUX 0 - - -/* Nanosecond resolution timestamps are stored in a format equivalent to - 'struct timespec'. This is the type used whenever possible but the - Unix namespace rules do not allow the identifier 'timespec' to appear - in the header. Therefore we have to handle the use of - this header in strictly standard-compliant sources special. - - Use neat tidy anonymous unions and structures when possible. */ - -#ifdef __USE_XOPEN2K8 -# if __GNUC_PREREQ(3,3) -# define __ST_TIME(X) \ - __extension__ union { \ - struct timespec st_##X##tim; \ - struct { \ - __time_t st_##X##time; \ - unsigned long st_##X##timensec; \ - }; \ - } -# else -# define __ST_TIME(X) struct timespec st_##X##tim -# define st_atime st_atim.tv_sec -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# endif -#else -# define __ST_TIME(X) \ - __time_t st_##X##time; \ - unsigned long st_##X##timensec -#endif - - -struct stat - { - __dev_t st_dev; /* Device. */ -#ifdef __USE_FILE_OFFSET64 - __ino64_t st_ino; /* File serial number. */ -#else - __ino_t st_ino; /* File serial number. */ - int __pad0; /* 64-bit st_ino. */ -#endif - __dev_t st_rdev; /* Device number, if device. */ - __off_t st_size; /* Size of file, in bytes. */ -#ifdef __USE_FILE_OFFSET64 - __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ -#else - __blkcnt_t st_blocks; /* Nr. 512-byte blocks allocated. */ - int __pad1; /* 64-bit st_blocks. */ -#endif - __mode_t st_mode; /* File mode. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - __nlink_t st_nlink; /* Link count. */ - int __pad2; /* Real padding. */ - __ST_TIME(a); /* Time of last access. */ - __ST_TIME(m); /* Time of last modification. */ - __ST_TIME(c); /* Time of last status change. */ - long __glibc_reserved[3]; - }; - -#ifdef __USE_LARGEFILE64 -/* Note stat64 is the same shape as stat. */ -struct stat64 - { - __dev_t st_dev; /* Device. */ - __ino64_t st_ino; /* File serial number. */ - __dev_t st_rdev; /* Device number, if device. */ - __off_t st_size; /* Size of file, in bytes. */ - __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ - __mode_t st_mode; /* File mode. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - __nlink_t st_nlink; /* Link count. */ - int __pad0; /* Real padding. */ - __ST_TIME(a); /* Time of last access. */ - __ST_TIME(m); /* Time of last modification. */ - __ST_TIME(c); /* Time of last status change. */ - long __glibc_reserved[3]; - }; -#endif - -#undef __ST_TIME - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -#define _STATBUF_ST_NSEC - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFIFO 0010000 /* FIFO. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ - -/* POSIX.1b objects. Note that these macros always evaluate to zero. But - they do it by enforcing the correct use of the macros. */ -#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 0400 /* Read by owner. */ -#define __S_IWRITE 0200 /* Write by owner. */ -#define __S_IEXEC 0100 /* Execute by owner. */ - -#ifdef __USE_ATFILE -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) -#endif - -#endif /* bits/stat.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/statfs.h b/sysdeps/unix/sysv/linux/alpha/bits/statfs.h deleted file mode 100644 index 185e82bf5a..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/statfs.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_STATFS_H -# error "Never include directly; use instead." -#endif - -#include /* for __fsid_t and __fsblkcnt_t. */ - -struct statfs - { - int f_type; - int f_bsize; -#ifndef __USE_FILE_OFFSET64 - __fsblkcnt_t f_blocks; - __fsblkcnt_t f_bfree; - __fsblkcnt_t f_bavail; - __fsfilcnt_t f_files; - __fsfilcnt_t f_ffree; -#else - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; -#endif - __fsid_t f_fsid; - int f_namelen; - int f_frsize; - int f_flags; - int f_spare[4]; - }; - -#ifdef __USE_LARGEFILE64 -struct statfs64 - { - int f_type; - int f_bsize; - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; - __fsid_t f_fsid; - int f_namelen; - int f_frsize; - int f_flags; - int f_spare[4]; - }; -#endif - -/* Tell code we have this member. */ -#define _STATFS_F_NAMELEN -#define _STATFS_F_FRSIZE diff --git a/sysdeps/unix/sysv/linux/alpha/bits/termios.h b/sysdeps/unix/sysv/linux/alpha/bits/termios.h deleted file mode 100644 index 19f717bba6..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/termios.h +++ /dev/null @@ -1,223 +0,0 @@ -/* termios type and macro definitions. Linux version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _TERMIOS_H -# error "Never include directly; use instead." -#endif - -typedef unsigned char cc_t; -typedef unsigned int speed_t; -typedef unsigned int tcflag_t; - -#define NCCS 32 -struct termios - { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_cc[NCCS]; /* control characters */ - cc_t c_line; /* line discipline (== c_cc[33]) */ - speed_t c_ispeed; /* input speed */ - speed_t c_ospeed; /* output speed */ -#define _HAVE_STRUCT_TERMIOS_C_ISPEED 1 -#define _HAVE_STRUCT_TERMIOS_C_OSPEED 1 - }; - -/* c_cc characters */ -#define VEOF 0 -#define VEOL 1 -#define VEOL2 2 -#define VERASE 3 -#define VWERASE 4 -#define VKILL 5 -#define VREPRINT 6 -#define VSWTC 7 -#define VINTR 8 -#define VQUIT 9 -#define VSUSP 10 -#define VSTART 12 -#define VSTOP 13 -#define VLNEXT 14 -#define VDISCARD 15 -#define VMIN 16 -#define VTIME 17 - -/* c_iflag bits */ -#define IGNBRK 0000001 -#define BRKINT 0000002 -#define IGNPAR 0000004 -#define PARMRK 0000010 -#define INPCK 0000020 -#define ISTRIP 0000040 -#define INLCR 0000100 -#define IGNCR 0000200 -#define ICRNL 0000400 -#define IXON 0001000 -#define IXOFF 0002000 -#define IXANY 0004000 -#define IUCLC 0010000 -#define IMAXBEL 0020000 -#define IUTF8 0040000 - -/* c_oflag bits */ -#define OPOST 0000001 -#define ONLCR 0000002 -#define OLCUC 0000004 - -#define OCRNL 0000010 -#define ONOCR 0000020 -#define ONLRET 0000040 - -#define OFILL 00000100 -#define OFDEL 00000200 -#if defined __USE_MISC || defined __USE_XOPEN -# define NLDLY 00001400 -# define NL0 00000000 -# define NL1 00000400 -# if defined __USE_MISC -# define NL2 00001000 -# define NL3 00001400 -# endif -# define TABDLY 00006000 -# define TAB0 00000000 -# define TAB1 00002000 -# define TAB2 00004000 -# define TAB3 00006000 -# define CRDLY 00030000 -# define CR0 00000000 -# define CR1 00010000 -# define CR2 00020000 -# define CR3 00030000 -# define FFDLY 00040000 -# define FF0 00000000 -# define FF1 00040000 -# define BSDLY 00100000 -# define BS0 00000000 -# define BS1 00100000 -#endif - -#define VTDLY 00200000 -#define VT0 00000000 -#define VT1 00200000 - -#ifdef __USE_MISC -# define XTABS 01000000 /* Hmm.. Linux/i386 considers this part of TABDLY.. */ -#endif - -/* c_cflag bit meaning */ -#ifdef __USE_MISC -# define CBAUD 0000037 -#endif -#define B0 0000000 /* hang up */ -#define B50 0000001 -#define B75 0000002 -#define B110 0000003 -#define B134 0000004 -#define B150 0000005 -#define B200 0000006 -#define B300 0000007 -#define B600 0000010 -#define B1200 0000011 -#define B1800 0000012 -#define B2400 0000013 -#define B4800 0000014 -#define B9600 0000015 -#define B19200 0000016 -#define B38400 0000017 -#ifdef __USE_MISC -# define EXTA B19200 -# define EXTB B38400 -# define CBAUDEX 0000000 -#endif -#define B57600 00020 -#define B115200 00021 -#define B230400 00022 -#define B460800 00023 -#define B500000 00024 -#define B576000 00025 -#define B921600 00026 -#define B1000000 00027 -#define B1152000 00030 -#define B1500000 00031 -#define B2000000 00032 -#define B2500000 00033 -#define B3000000 00034 -#define B3500000 00035 -#define B4000000 00036 - -#define __MAX_BAUD B4000000 - -#define CSIZE 00001400 -#define CS5 00000000 -#define CS6 00000400 -#define CS7 00001000 -#define CS8 00001400 - -#define CSTOPB 00002000 -#define CREAD 00004000 -#define PARENB 00010000 -#define PARODD 00020000 -#define HUPCL 00040000 - -#define CLOCAL 00100000 -#ifdef __USE_MISC -# define CMSPAR 010000000000 /* mark or space (stick) parity */ -# define CRTSCTS 020000000000 /* flow control */ -#endif - -/* c_lflag bits */ -#define ISIG 0x00000080 -#define ICANON 0x00000100 -#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K) -# define XCASE 0x00004000 -#endif -#define ECHO 0x00000008 -#define ECHOE 0x00000002 -#define ECHOK 0x00000004 -#define ECHONL 0x00000010 -#define NOFLSH 0x80000000 -#define TOSTOP 0x00400000 -#ifdef __USE_MISC -# define ECHOCTL 0x00000040 -# define ECHOPRT 0x00000020 -# define ECHOKE 0x00000001 -# define FLUSHO 0x00800000 -# define PENDIN 0x20000000 -#endif -#define IEXTEN 0x00000400 - -/* Values for the ACTION argument to `tcflow'. */ -#define TCOOFF 0 -#define TCOON 1 -#define TCIOFF 2 -#define TCION 3 - -/* Values for the QUEUE_SELECTOR argument to `tcflush'. */ -#define TCIFLUSH 0 -#define TCOFLUSH 1 -#define TCIOFLUSH 2 - -/* Values for the OPTIONAL_ACTIONS argument to `tcsetattr'. */ -#define TCSANOW 0 -#define TCSADRAIN 1 -#define TCSAFLUSH 2 - - -#define _IOT_termios /* Hurd ioctl type field. */ \ - _IOT (_IOTS (cflag_t), 4, _IOTS (cc_t), NCCS, _IOTS (speed_t), 2) diff --git a/sysdeps/unix/sysv/linux/alpha/bits/timerfd.h b/sysdeps/unix/sysv/linux/alpha/bits/timerfd.h deleted file mode 100644 index 5344b9f358..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/timerfd.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_TIMERFD_H -# error "Never use directly; include instead." -#endif - -/* Bits to be set in the FLAGS parameter of `timerfd_create'. */ -enum - { - TFD_CLOEXEC = 010000000, -#define TFD_CLOEXEC TFD_CLOEXEC - TFD_NONBLOCK = 000000004 -#define TFD_NONBLOCK TFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h b/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h deleted file mode 100644 index d7e170c9a5..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h +++ /dev/null @@ -1,76 +0,0 @@ -/* bits/typesizes.h -- underlying types for *_t. Linux/Alpha version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _BITS_TYPES_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_TYPESIZES_H -#define _BITS_TYPESIZES_H 1 - -/* See for the meaning of these macros. This file exists so - that need not vary across different GNU platforms. */ - -#define __DEV_T_TYPE __U64_TYPE -#define __UID_T_TYPE __U32_TYPE -#define __GID_T_TYPE __U32_TYPE -#define __INO_T_TYPE __U32_TYPE -#define __INO64_T_TYPE __U64_TYPE -#define __MODE_T_TYPE __U32_TYPE -#define __NLINK_T_TYPE __U32_TYPE -#define __OFF_T_TYPE __SLONGWORD_TYPE -#define __OFF64_T_TYPE __S64_TYPE -#define __PID_T_TYPE __S32_TYPE -#define __RLIM_T_TYPE __ULONGWORD_TYPE -#define __RLIM64_T_TYPE __U64_TYPE -#define __BLKCNT_T_TYPE __U32_TYPE -#define __BLKCNT64_T_TYPE __U64_TYPE -#define __FSBLKCNT_T_TYPE __S32_TYPE -#define __FSBLKCNT64_T_TYPE __S64_TYPE -#define __FSFILCNT_T_TYPE __U32_TYPE -#define __FSFILCNT64_T_TYPE __U64_TYPE -#define __ID_T_TYPE __U32_TYPE -#define __CLOCK_T_TYPE __SLONGWORD_TYPE -#define __TIME_T_TYPE __SLONGWORD_TYPE -#define __USECONDS_T_TYPE __U32_TYPE -#define __SUSECONDS_T_TYPE __S64_TYPE -#define __DADDR_T_TYPE __S32_TYPE -#define __KEY_T_TYPE __S32_TYPE -#define __CLOCKID_T_TYPE __S32_TYPE -#define __TIMER_T_TYPE void * -#define __BLKSIZE_T_TYPE __U32_TYPE -#define __FSID_T_TYPE struct { int __val[2]; } -#define __SSIZE_T_TYPE __SWORD_TYPE -#define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE -#define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE -#define __CPU_MASK_TYPE __ULONGWORD_TYPE -#define __FSWORD_T_TYPE __S32_TYPE - -/* Tell the libc code that off_t and off64_t are actually the same type - for all ABI purposes, even if possibly expressed as different base types - for C type-checking purposes. */ -#define __OFF_T_MATCHES_OFF64_T 1 - -/* And for __rlim_t and __rlim64_t. */ -#define __RLIM_T_MATCHES_RLIM64_T 1 - -/* Number of descriptors that can fit in an `fd_set'. */ -#define __FD_SETSIZE 1024 - - -#endif /* bits/typesizes.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/wordsize.h b/sysdeps/unix/sysv/linux/alpha/bits/wordsize.h deleted file mode 100644 index 76c5c47c28..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/bits/wordsize.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __WORDSIZE 64 -#define __WORDSIZE_TIME64_COMPAT32 0 diff --git a/sysdeps/unix/sysv/linux/alpha/brk.S b/sysdeps/unix/sysv/linux/alpha/brk.S deleted file mode 100644 index ef55339a09..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/brk.S +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe , 1993. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* __brk is a special syscall under Linux since it never returns an - error. Instead, the error condition is indicated by returning the old - break value (instead of the new, requested one). */ - -#include -#define _ERRNO_H -#include - -#ifdef PIC -.section .bss - .align 3 - .globl __curbrk -__curbrk: .skip 8 - .type __curbrk,@object - .size __curbrk,8 -#else -.comm __curbrk, 8 -#endif - - .text - .align 4 - .globl __brk - .ent __brk - .usepv __brk, std - - cfi_startproc -__brk: - ldgp gp, 0(t12) - subq sp, 16, sp - cfi_adjust_cfa_offset (16) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - - /* Save the requested brk across the system call. */ - stq a0, 0(sp) - - ldiq v0, __NR_brk - call_pal PAL_callsys - - ldq a0, 0(sp) - addq sp, 16, sp - cfi_adjust_cfa_offset (-16) - - /* Be prepared for an OSF-style brk. */ - bne a3, SYSCALL_ERROR_LABEL - beq v0, $ok - - /* Correctly handle the brk(0) query case. */ - cmoveq a0, v0, a0 - xor a0, v0, t0 - lda v0, ENOMEM - bne t0, SYSCALL_ERROR_LABEL - - /* Update __curbrk and return cleanly. */ - lda v0, 0 -$ok: stq a0, __curbrk - ret - -PSEUDO_END(__brk) - cfi_endproc - -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/alpha/c++-types.data b/sysdeps/unix/sysv/linux/alpha/c++-types.data deleted file mode 100644 index f264ed84ba..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:m -blkcnt_t:j -blksize_t:j -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:m -fd_mask:l -fsblkcnt64_t:l -fsblkcnt_t:i -fsfilcnt64_t:m -fsfilcnt_t:j -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:m -ino_t:j -int16_t:s -int32_t:i -int64_t:l -int8_t:a -intptr_t:l -key_t:i -loff_t:l -mode_t:j -nlink_t:j -off64_t:l -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:l -register_t:l -rlim64_t:m -rlim_t:m -sigset_t:10__sigset_t -size_t:m -socklen_t:j -ssize_t:l -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:m -u_int8_t:h -ulong:m -u_long:m -u_quad_t:m -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/alpha/clone.S b/sysdeps/unix/sysv/linux/alpha/clone.S deleted file mode 100644 index 20ae361c6b..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/clone.S +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#define _ERRNO_H 1 -#include - -#define CLONE_VM 0x00000100 - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, - void *arg, pid_t *ptid, void *tls, pid_t *ctid); - - Note that everything past ARG is technically optional, based - on FLAGS, and that CTID is arg 7, and thus is on the stack. - However, since a load from top-of-stack better be legal always, - we don't bother checking FLAGS. */ - - .text - .align 4 - .globl __clone - .ent __clone - .usepv __clone, USEPV_PROF - - cfi_startproc -__clone: -#ifdef PROF - ldgp gp,0(pv) - lda AT, _mcount - jsr AT, (AT), _mcount -#endif - - /* Sanity check arguments. */ - ldiq v0, EINVAL - beq a0, SYSCALL_ERROR_LABEL /* no NULL function pointers */ - beq a1, SYSCALL_ERROR_LABEL /* no NULL stack pointers */ - - /* Save the fn ptr and arg on the new stack. */ - subq a1, 32, a1 - stq a0, 0(a1) - stq a3, 8(a1) - stq a2, 16(a1) - - /* The syscall is of the form clone(flags, usp, ptid, ctid, tls). - Shift the flags, ptid, ctid, tls arguments into place; the - child_stack argument is already correct. */ - mov a2, a0 - mov a4, a2 - ldq a3, 0(sp) - mov a5, a4 - - /* Do the system call. */ - ldiq v0, __NR_clone - call_pal PAL_callsys - - bne a3, SYSCALL_ERROR_LABEL - beq v0, thread_start - - /* Successful return from the parent. */ - ret - -PSEUDO_END(__clone) - cfi_endproc - -/* Load up the arguments to the function. Put this block of code in - its own function so that we can terminate the stack trace with our - debug info. */ - - .align 4 - .ent thread_start - cfi_startproc -thread_start: - mov 0, fp - cfi_def_cfa_register(fp) - cfi_undefined(ra) - - /* Load up the arguments. */ - ldq pv, 0(sp) - ldq a0, 8(sp) - addq sp, 32, sp - - /* Call the user's function. */ - jsr ra, (pv) - ldgp gp, 0(ra) - - /* Call _exit rather than doing it inline for breakpoint purposes. */ - mov v0, a0 -#ifdef PIC - bsr ra, HIDDEN_JUMPTARGET(_exit) !samegp -#else - jsr ra, HIDDEN_JUMPTARGET(_exit) -#endif - - /* Die horribly. */ - .align 4 - halt - - .align 4 - cfi_endproc - .end thread_start - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/alpha/configure b/sysdeps/unix/sysv/linux/alpha/configure deleted file mode 100644 index 9afb5874cb..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/configure +++ /dev/null @@ -1,5 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/alpha - -# We did historically export the unwinder from glibc. -libc_cv_gcc_unwind_find_fde=yes diff --git a/sysdeps/unix/sysv/linux/alpha/configure.ac b/sysdeps/unix/sysv/linux/alpha/configure.ac deleted file mode 100644 index a8b6996657..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/configure.ac +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/alpha - -# We did historically export the unwinder from glibc. -libc_cv_gcc_unwind_find_fde=yes diff --git a/sysdeps/unix/sysv/linux/alpha/dl-auxv.h b/sysdeps/unix/sysv/linux/alpha/dl-auxv.h deleted file mode 100644 index 4be51e9264..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/dl-auxv.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Auxiliary vector processing for Linux/Alpha. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Scan the Aux Vector for the cache shape entries. */ - -extern long __libc_alpha_cache_shape[4]; - -#define DL_PLATFORM_AUXV \ - case AT_L1I_CACHESHAPE: \ - __libc_alpha_cache_shape[0] = av->a_un.a_val; \ - break; \ - case AT_L1D_CACHESHAPE: \ - __libc_alpha_cache_shape[1] = av->a_un.a_val; \ - break; \ - case AT_L2_CACHESHAPE: \ - __libc_alpha_cache_shape[2] = av->a_un.a_val; \ - break; \ - case AT_L3_CACHESHAPE: \ - __libc_alpha_cache_shape[3] = av->a_un.a_val; \ - break; diff --git a/sysdeps/unix/sysv/linux/alpha/dl-brk.S b/sysdeps/unix/sysv/linux/alpha/dl-brk.S deleted file mode 100644 index eeb96544e3..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/dl-brk.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c b/sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c deleted file mode 100644 index 330b33f7c7..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c +++ /dev/null @@ -1 +0,0 @@ -#include "fxstatat.c" diff --git a/sysdeps/unix/sysv/linux/alpha/dl-support.c b/sysdeps/unix/sysv/linux/alpha/dl-support.c deleted file mode 100644 index 290217671c..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/dl-support.c +++ /dev/null @@ -1,2 +0,0 @@ -#include "dl-auxv.h" -#include diff --git a/sysdeps/unix/sysv/linux/alpha/dl-sysdep.c b/sysdeps/unix/sysv/linux/alpha/dl-sysdep.c deleted file mode 100644 index 5d0867a100..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/dl-sysdep.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "dl-auxv.h" - -long __libc_alpha_cache_shape[4] = { -2, -2, -2, -2 }; - -#include diff --git a/sysdeps/unix/sysv/linux/alpha/fpu/Implies b/sysdeps/unix/sysv/linux/alpha/fpu/Implies deleted file mode 100644 index d76f511c2e..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/fpu/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# Override ldbl-opt with alpha specific routines. -alpha/fpu diff --git a/sysdeps/unix/sysv/linux/alpha/fraiseexcpt.S b/sysdeps/unix/sysv/linux/alpha/fraiseexcpt.S deleted file mode 100644 index 0d5a1e88c8..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/fraiseexcpt.S +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include "kernel_sysinfo.h" - - - .text - -ENTRY(__feraiseexcept) - cfi_startproc - PSEUDO_PROLOGUE - - lda sp, -16(sp) - cfi_adjust_cfa_offset(16) - - ldi v0, __NR_osf_setsysinfo - stq a0, 0(sp) - mov sp, a1 - ldi a0, SSI_IEEE_RAISE_EXCEPTION - call_pal PAL_callsys - - lda sp, 16(sp) - cfi_adjust_cfa_offset(-16) - - /* Here in libm we can't use SYSCALL_ERROR_LABEL. Nor is it clear - that we'd want to set errno anyway. All we're required to do is - return non-zero on error. Which is exactly A3. */ - mov a3, v0 - ret - -END(__feraiseexcept) - cfi_endproc - -#if IS_IN (libm) -# include -# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feraiseexcept, __old_feraiseexcept) -compat_symbol (libm, __old_feraiseexcept, feraiseexcept, GLIBC_2_1); -# endif -libm_hidden_def (__feraiseexcept) -libm_hidden_ver (__feraiseexcept, feraiseexcept) -versioned_symbol (libm, __feraiseexcept, feraiseexcept, GLIBC_2_2); -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/fstatfs64.c b/sysdeps/unix/sysv/linux/alpha/fstatfs64.c deleted file mode 100644 index 5639959adb..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/fstatfs64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/fstatvfs.c b/sysdeps/unix/sysv/linux/alpha/fstatvfs.c deleted file mode 100644 index 92e772347b..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/fstatvfs.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/fstatvfs64.c b/sysdeps/unix/sysv/linux/alpha/fstatvfs64.c deleted file mode 100644 index 0f1e71027a..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/fstatvfs64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/fxstat.c b/sysdeps/unix/sysv/linux/alpha/fxstat.c deleted file mode 100644 index 7f98c9b4ab..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/fxstat.c +++ /dev/null @@ -1,58 +0,0 @@ -/* fxstat using old-style Unix stat system call. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __fxstat64 __fxstat64_disable - -#include -#include -#include -#include -#include -#include -#include - -#undef __fxstat64 - - -/* Get information about the file NAME in BUF. */ -int -__fxstat (int vers, int fd, struct stat *buf) -{ - INTERNAL_SYSCALL_DECL (err); - int result; - struct kernel_stat kbuf; - - if (vers == _STAT_VER_KERNEL64) - { - result = INTERNAL_SYSCALL (fstat64, err, 2, fd, buf); - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return result; - __set_errno (INTERNAL_SYSCALL_ERRNO (result, err)); - return -1; - } - - result = INTERNAL_SYSCALL (fstat, err, 2, fd, &kbuf); - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return __xstat_conv (vers, &kbuf, buf); - __set_errno (INTERNAL_SYSCALL_ERRNO (result, err)); - return -1; -} -hidden_def (__fxstat) -weak_alias (__fxstat, _fxstat); -strong_alias (__fxstat, __fxstat64); -hidden_ver (__fxstat, __fxstat64) diff --git a/sysdeps/unix/sysv/linux/alpha/fxstatat.c b/sysdeps/unix/sysv/linux/alpha/fxstatat.c deleted file mode 100644 index 98a23639da..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/fxstatat.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __fxstatat64 __fxstatat64_disable - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#undef __fxstatat64 - -/* Get information about the file NAME in BUF. */ -int -__fxstatat (int vers, int fd, const char *file, struct stat *st, int flag) -{ - INTERNAL_SYSCALL_DECL (err); - int result, errno_out; - - /* ??? The __fxstatat entry point is new enough that it must be using - vers == _STAT_VER_KERNEL64. For the benefit of dl-fxstatat64.c, we - cannot actually check this, lest the compiler not optimize the rest - of the function away. */ - - result = INTERNAL_SYSCALL (fstatat64, err, 4, fd, file, st, flag); - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return result; - errno_out = INTERNAL_SYSCALL_ERRNO (result, err); - __set_errno (errno_out); - return -1; -} -libc_hidden_def (__fxstatat) -strong_alias (__fxstatat, __fxstatat64); -libc_hidden_ver(__fxstatat, __fxstatat64); diff --git a/sysdeps/unix/sysv/linux/alpha/getclktck.c b/sysdeps/unix/sysv/linux/alpha/getclktck.c deleted file mode 100644 index 6636bbe689..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/getclktck.c +++ /dev/null @@ -1,2 +0,0 @@ -#define SYSTEM_CLK_TCK 1024 -#include diff --git a/sysdeps/unix/sysv/linux/alpha/getcontext.S b/sysdeps/unix/sysv/linux/alpha/getcontext.S deleted file mode 100644 index b1a1f532cc..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/getcontext.S +++ /dev/null @@ -1,187 +0,0 @@ -/* Save current context. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* ??? Should be a better place for this that's asm friendly. */ -#define SIG_BLOCK 1 - - -ENTRY (__getcontext) -#ifdef PROF - ldgp gp, 0(pv) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#else - .prologue 0 -#endif - - bsr $0, __getcontext_x - mov $31, $0 - ret - -END(__getcontext) -weak_alias (__getcontext, getcontext) - - -/* An internal routine used by getcontext and setcontext. - The incomming return address register is $0. */ - - .align 4 - .globl __getcontext_x - .hidden __getcontext_x - .usepv __getcontext_x, no - - cfi_startproc - cfi_return_column (64) -__getcontext_x: - cfi_register (64, 0) - - .set noat - - /* Return value of getcontext. $0 is the only register - whose value is not preserved. */ - stq $31, UC_SIGCTX+SC_REGS($16) - - /* Store all registers into the context. */ - stq $1, UC_SIGCTX+SC_REGS+1*8($16) - stq $2, UC_SIGCTX+SC_REGS+2*8($16) - stq $3, UC_SIGCTX+SC_REGS+3*8($16) - stq $4, UC_SIGCTX+SC_REGS+4*8($16) - stq $5, UC_SIGCTX+SC_REGS+5*8($16) - stq $6, UC_SIGCTX+SC_REGS+6*8($16) - stq $7, UC_SIGCTX+SC_REGS+7*8($16) - stq $8, UC_SIGCTX+SC_REGS+8*8($16) - stq $9, UC_SIGCTX+SC_REGS+9*8($16) - stq $10, UC_SIGCTX+SC_REGS+10*8($16) - stq $11, UC_SIGCTX+SC_REGS+11*8($16) - stq $12, UC_SIGCTX+SC_REGS+12*8($16) - stq $13, UC_SIGCTX+SC_REGS+13*8($16) - stq $14, UC_SIGCTX+SC_REGS+14*8($16) - stq $15, UC_SIGCTX+SC_REGS+15*8($16) - stq $16, UC_SIGCTX+SC_REGS+16*8($16) - stq $17, UC_SIGCTX+SC_REGS+17*8($16) - stq $18, UC_SIGCTX+SC_REGS+18*8($16) - stq $19, UC_SIGCTX+SC_REGS+19*8($16) - stq $20, UC_SIGCTX+SC_REGS+20*8($16) - stq $21, UC_SIGCTX+SC_REGS+21*8($16) - stq $22, UC_SIGCTX+SC_REGS+22*8($16) - stq $23, UC_SIGCTX+SC_REGS+23*8($16) - stq $24, UC_SIGCTX+SC_REGS+24*8($16) - stq $25, UC_SIGCTX+SC_REGS+25*8($16) - stq $26, UC_SIGCTX+SC_REGS+26*8($16) - stq $27, UC_SIGCTX+SC_REGS+27*8($16) - stq $28, UC_SIGCTX+SC_REGS+28*8($16) - stq $29, UC_SIGCTX+SC_REGS+29*8($16) - stq $30, UC_SIGCTX+SC_REGS+30*8($16) - stq $31, UC_SIGCTX+SC_REGS+31*8($16) - - stt $f0, UC_SIGCTX+SC_FPREGS+0*8($16) - stt $f1, UC_SIGCTX+SC_FPREGS+1*8($16) - stt $f2, UC_SIGCTX+SC_FPREGS+2*8($16) - stt $f3, UC_SIGCTX+SC_FPREGS+3*8($16) - stt $f4, UC_SIGCTX+SC_FPREGS+4*8($16) - stt $f5, UC_SIGCTX+SC_FPREGS+5*8($16) - stt $f6, UC_SIGCTX+SC_FPREGS+6*8($16) - stt $f7, UC_SIGCTX+SC_FPREGS+7*8($16) - stt $f8, UC_SIGCTX+SC_FPREGS+8*8($16) - stt $f9, UC_SIGCTX+SC_FPREGS+9*8($16) - stt $f10, UC_SIGCTX+SC_FPREGS+10*8($16) - stt $f11, UC_SIGCTX+SC_FPREGS+11*8($16) - stt $f12, UC_SIGCTX+SC_FPREGS+12*8($16) - stt $f13, UC_SIGCTX+SC_FPREGS+13*8($16) - stt $f14, UC_SIGCTX+SC_FPREGS+14*8($16) - stt $f15, UC_SIGCTX+SC_FPREGS+15*8($16) - stt $f16, UC_SIGCTX+SC_FPREGS+16*8($16) - stt $f17, UC_SIGCTX+SC_FPREGS+17*8($16) - stt $f18, UC_SIGCTX+SC_FPREGS+18*8($16) - stt $f19, UC_SIGCTX+SC_FPREGS+19*8($16) - stt $f20, UC_SIGCTX+SC_FPREGS+20*8($16) - stt $f21, UC_SIGCTX+SC_FPREGS+21*8($16) - stt $f22, UC_SIGCTX+SC_FPREGS+22*8($16) - stt $f23, UC_SIGCTX+SC_FPREGS+23*8($16) - stt $f24, UC_SIGCTX+SC_FPREGS+24*8($16) - stt $f25, UC_SIGCTX+SC_FPREGS+25*8($16) - stt $f26, UC_SIGCTX+SC_FPREGS+26*8($16) - stt $f27, UC_SIGCTX+SC_FPREGS+27*8($16) - stt $f28, UC_SIGCTX+SC_FPREGS+28*8($16) - stt $f29, UC_SIGCTX+SC_FPREGS+29*8($16) - stt $f30, UC_SIGCTX+SC_FPREGS+30*8($16) - stt $f31, UC_SIGCTX+SC_FPREGS+31*8($16) - - mf_fpcr $f0 - lda $1, 8 - stt $f0, UC_SIGCTX+SC_FPCR($16) - - /* The return address of getcontext is the restart pc. */ - stq $26, UC_SIGCTX+SC_PC($16) - - /* Userlevel always has a processor status word of 8. */ - stq $1, UC_SIGCTX+SC_PS($16) - - /* Save registers around the syscall. We preserve $17 - for the benefit of swapcontext. */ - subq $30, 4*8, $30 - cfi_adjust_cfa_offset(4*8) - stq $0, 0($30) - cfi_rel_offset(64, 0) - stq $16, 8($30) - stq $17, 16($30) - - /* Save the current signal mask. Whee, there are three - copies of this in the alpha ucontext_t. */ - lda $16, SIG_BLOCK - lda $17, 0 - lda $0, __NR_osf_sigprocmask - callsys - - ldq $16, 8($30) - ldq $17, 16($30) - - stq $0, UC_OSF_SIGMASK($16) - stq $0, UC_SIGCTX+SC_MASK($16) - stq $0, UC_SIGMASK($16) - stq $31, UC_SIGMASK + 1*8($16) - stq $31, UC_SIGMASK + 2*8($16) - stq $31, UC_SIGMASK + 3*8($16) - stq $31, UC_SIGMASK + 4*8($16) - stq $31, UC_SIGMASK + 5*8($16) - stq $31, UC_SIGMASK + 6*8($16) - stq $31, UC_SIGMASK + 7*8($16) - stq $31, UC_SIGMASK + 8*8($16) - stq $31, UC_SIGMASK + 9*8($16) - stq $31, UC_SIGMASK +10*8($16) - stq $31, UC_SIGMASK +11*8($16) - stq $31, UC_SIGMASK +12*8($16) - stq $31, UC_SIGMASK +13*8($16) - stq $31, UC_SIGMASK +14*8($16) - stq $31, UC_SIGMASK +15*8($16) - - ldq $0, 0($30) - addq $30, 4*8, $30 - cfi_register (64, 0) - cfi_adjust_cfa_offset(-4*8) - ret $31, ($0), 1 - - cfi_endproc - .size __getcontext_x, .-__getcontext_x - .type __getcontext_x, @function diff --git a/sysdeps/unix/sysv/linux/alpha/getdents.c b/sysdeps/unix/sysv/linux/alpha/getdents.c deleted file mode 100644 index dfecfef924..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/getdents.c +++ /dev/null @@ -1,3 +0,0 @@ -#define DIRENT_SET_DP_INO(dp, value) \ - do { (dp)->d_ino = (value); (dp)->__pad = 0; } while (0) -#include diff --git a/sysdeps/unix/sysv/linux/alpha/getdents64.c b/sysdeps/unix/sysv/linux/alpha/getdents64.c deleted file mode 100644 index 50f1368b74..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/getdents64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/gethostname.c b/sysdeps/unix/sysv/linux/alpha/gethostname.c deleted file mode 100644 index a1b97ea6bf..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/gethostname.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2001 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -#include -#include - -int -__gethostname (char *name, size_t len) -{ - int result; - - result = INLINE_SYSCALL (gethostname, 2, name, len); - - if (result == 0 - /* See whether the string is terminated. If not we will return - an error. */ - && memchr (name, '\0', len) == NULL) - { - __set_errno (EOVERFLOW); - result = -1; - } - - return result; -} - -weak_alias (__gethostname, gethostname) diff --git a/sysdeps/unix/sysv/linux/alpha/getsysstats.c b/sysdeps/unix/sysv/linux/alpha/getsysstats.c deleted file mode 100644 index 14dc2bb8ac..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/getsysstats.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Determine various system internal values, Linux/Alpha version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -/* We need to define a special parser for /proc/cpuinfo. */ -#define GET_NPROCS_PARSER(FD, BUFFER, CP, RE, BUFFER_END, RESULT) \ - do \ - { \ - /* Find the line that contains the information about the number of \ - active cpus. We don't have to fear extremely long lines since \ - the kernel will not generate them. 8192 bytes are really enough. \ - If there is no "CPUs ..." line then we are on a UP system. */ \ - char *l; \ - (RESULT) = 1; \ - while ((l = next_line (FD, BUFFER, &CP, &RE, BUFFER_END)) != NULL) \ - if ((sscanf (BUFFER, "cpus active : %d", &(RESULT)) == 1) \ - || (sscanf (BUFFER, "CPUs probed %*d active %d", \ - &(RESULT)) == 1)) \ - break; \ - } \ - while (0) - - -/* On the Alpha we can distinguish between the number of configured and - active cpus. */ -#define GET_NPROCS_CONF_PARSER(FP, BUFFER, RESULT) \ - do \ - { \ - /* Find the line that contains the information about the number of \ - probed cpus. We don't have to fear extremely long lines since \ - the kernel will not generate them. 8192 bytes are really enough. \ - If there is no "CPUs ..." line then we are on a UP system. */ \ - (RESULT) = 1; \ - while (__fgets_unlocked ((BUFFER), sizeof (BUFFER), (FP)) != NULL) \ - if ((sscanf (buffer, "cpus detected : %d", &(RESULT)) == 1) \ - || (sscanf (buffer, "CPUs probed %d", &(RESULT)) == 1)) \ - break; \ - } \ - while (0) - -#include diff --git a/sysdeps/unix/sysv/linux/alpha/glob.c b/sysdeps/unix/sysv/linux/alpha/glob.c deleted file mode 100644 index 2d7d287a25..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/glob.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define glob64 __no_glob64_decl -#define globfree64 __no_globfree64_decl - -#include -#include -#include - -/* For Linux/Alpha we have to make the glob symbols versioned. */ -#define glob(pattern, flags, errfunc, pglob) \ - __new_glob (pattern, flags, errfunc, pglob) -#define globfree(pglob) \ - __new_globfree (pglob) - -/* We need prototypes for these new names. */ -extern int __new_glob (const char *__pattern, int __flags, - int (*__errfunc) (const char *, int), - glob_t *__pglob); -extern void __new_globfree (glob_t *__pglob); - -#include - -#undef glob -#undef globfree -#undef glob64 -#undef globfree64 - -versioned_symbol (libc, __new_glob, glob, GLIBC_2_1); -versioned_symbol (libc, __new_globfree, globfree, GLIBC_2_1); -libc_hidden_ver (__new_glob, glob) -libc_hidden_ver (__new_globfree, globfree) - -weak_alias (__new_glob, glob64) -weak_alias (__new_globfree, globfree64) -libc_hidden_ver (__new_globfree, globfree64) diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S deleted file mode 100644 index 30e75e5140..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger , 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include "kernel_sysinfo.h" - - - .text - -ENTRY(__ieee_get_fp_control) - cfi_startproc - PSEUDO_PROLOGUE - - lda sp, -16(sp) - cfi_adjust_cfa_offset(16) - - mov sp, a1 - ldi a0, GSI_IEEE_FP_CONTROL - ldi v0, __NR_osf_getsysinfo - call_pal PAL_callsys - - ldq t0, 0(sp) - lda sp, 16(sp) - cfi_adjust_cfa_offset(-16) - - bne a3, SYSCALL_ERROR_LABEL - - mov t0, v0 - ret - -PSEUDO_END(__ieee_get_fp_control) - cfi_endproc - -libc_hidden_def(__ieee_get_fp_control) -weak_alias (__ieee_get_fp_control, ieee_get_fp_control) diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S deleted file mode 100644 index c51350b83d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger , 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include "kernel_sysinfo.h" - - -ENTRY(__ieee_set_fp_control) - cfi_startproc - PSEUDO_PROLOGUE - - lda sp, -16(sp) - cfi_adjust_cfa_offset(16) - - ldi v0, __NR_osf_setsysinfo - stq a0, 0(sp) - mov sp, a1 - ldi a0, SSI_IEEE_FP_CONTROL - call_pal PAL_callsys - - lda sp, 16(sp) - cfi_adjust_cfa_offset(-16) - - bne a3, SYSCALL_ERROR_LABEL - ret - -PSEUDO_END(__ieee_set_fp_control) - cfi_endproc - -libc_hidden_def(__ieee_set_fp_control) -weak_alias (__ieee_set_fp_control, ieee_set_fp_control) diff --git a/sysdeps/unix/sysv/linux/alpha/internal_statvfs64.c b/sysdeps/unix/sysv/linux/alpha/internal_statvfs64.c deleted file mode 100644 index 81d18f7bb2..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/internal_statvfs64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/ioperm.c b/sysdeps/unix/sysv/linux/alpha/ioperm.c deleted file mode 100644 index ccbef3bd28..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/ioperm.c +++ /dev/null @@ -1,882 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* I/O access is restricted to ISA port space (ports 0..65535). - Modern devices hopefully are sane enough not to put any performance - critical registers in i/o space. - - On the first call to ioperm, the entire (E)ISA port space is mapped - into the virtual address space at address io.base. mprotect calls - are then used to enable/disable access to ports. Per page, there - are PAGE_SIZE>>IO_SHIFT I/O ports (e.g., 256 ports on a Low Cost Alpha - based system using 8KB pages). - - Keep in mind that this code should be able to run in a 32bit address - space. It is therefore unreasonable to expect mmap'ing the entire - sparse address space would work (e.g., the Low Cost Alpha chip has an - I/O address space that's 512MB large!). */ - -/* Make sure the ldbu/stb asms below are not expaneded to macros. */ -#ifndef __alpha_bwx__ -asm(".arch ev56"); -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#define PATH_ALPHA_SYSTYPE "/etc/alpha_systype" -#define PATH_CPUINFO "/proc/cpuinfo" - -#define MAX_PORT 0x10000 -#define vip volatile int * -#define vuip volatile unsigned int * -#define vusp volatile unsigned short * -#define vucp volatile unsigned char * - -#define JENSEN_IO_BASE (0x300000000UL) -#define JENSEN_SPARSE_MEM (0x200000000UL) - -/* With respect to the I/O architecture, APECS and LCA are identical, - so the following defines apply to LCA as well. */ -#define APECS_IO_BASE (0x1c0000000UL) -#define APECS_SPARSE_MEM (0x200000000UL) -#define APECS_DENSE_MEM (0x300000000UL) - -/* The same holds for CIA and PYXIS, except for PYXIS we prefer BWX. */ -#define CIA_IO_BASE (0x8580000000UL) -#define CIA_SPARSE_MEM (0x8000000000UL) -#define CIA_DENSE_MEM (0x8600000000UL) - -#define PYXIS_IO_BASE (0x8900000000UL) -#define PYXIS_DENSE_MEM (0x8800000000UL) - -/* SABLE is EV4, GAMMA is EV5 */ -#define T2_IO_BASE (0x3a0000000UL) -#define T2_SPARSE_MEM (0x200000000UL) -#define T2_DENSE_MEM (0x3c0000000UL) - -#define GAMMA_IO_BASE (0x83a0000000UL) -#define GAMMA_SPARSE_MEM (0x8200000000UL) -#define GAMMA_DENSE_MEM (0x83c0000000UL) - -/* NOTE: these are hardwired to PCI bus 0 addresses!!! */ -#define MCPCIA_IO_BASE (0xf980000000UL) -#define MCPCIA_SPARSE_MEM (0xf800000000UL) -#define MCPCIA_DENSE_MEM (0xf900000000UL) - -/* Tsunami and Irongate use the same offsets, at least for hose 0. */ -#define TSUNAMI_IO_BASE (0x801fc000000UL) -#define TSUNAMI_DENSE_MEM (0x80000000000UL) - -/* Polaris has SPARSE space, but we prefer to use only DENSE - because of some idiosyncracies in actually using SPARSE. */ -#define POLARIS_IO_BASE (0xf9fc000000UL) -#define POLARIS_DENSE_MEM (0xf900000000UL) - -typedef enum { - IOSYS_UNKNOWN, IOSYS_JENSEN, IOSYS_APECS, IOSYS_CIA, IOSYS_PYXIS, IOSYS_T2, - IOSYS_TSUNAMI, IOSYS_MCPCIA, IOSYS_GAMMA, IOSYS_POLARIS, - IOSYS_CPUDEP, IOSYS_PCIDEP -} iosys_t; - -typedef enum { - IOSWIZZLE_JENSEN, IOSWIZZLE_SPARSE, IOSWIZZLE_DENSE -} ioswizzle_t; - -static struct io_system { - unsigned long int bus_memory_base; - unsigned long int sparse_bus_mem_base; - unsigned long int bus_io_base; -} io_system[] = { /* NOTE! must match iosys_t enumeration */ -/* UNKNOWN */ {0, 0, 0}, -/* JENSEN */ {0, JENSEN_SPARSE_MEM, JENSEN_IO_BASE}, -/* APECS */ {APECS_DENSE_MEM, APECS_SPARSE_MEM, APECS_IO_BASE}, -/* CIA */ {CIA_DENSE_MEM, CIA_SPARSE_MEM, CIA_IO_BASE}, -/* PYXIS */ {PYXIS_DENSE_MEM, 0, PYXIS_IO_BASE}, -/* T2 */ {T2_DENSE_MEM, T2_SPARSE_MEM, T2_IO_BASE}, -/* TSUNAMI */ {TSUNAMI_DENSE_MEM, 0, TSUNAMI_IO_BASE}, -/* MCPCIA */ {MCPCIA_DENSE_MEM, MCPCIA_SPARSE_MEM, MCPCIA_IO_BASE}, -/* GAMMA */ {GAMMA_DENSE_MEM, GAMMA_SPARSE_MEM, GAMMA_IO_BASE}, -/* POLARIS */ {POLARIS_DENSE_MEM, 0, POLARIS_IO_BASE}, -/* CPUDEP */ {0, 0, 0}, /* for platforms dependent on CPU type */ -/* PCIDEP */ {0, 0, 0}, /* for platforms dependent on core logic */ -}; - -static struct platform { - const char *name; - iosys_t io_sys; -} platform[] = { - {"Alcor", IOSYS_CIA}, - {"Avanti", IOSYS_APECS}, - {"Cabriolet", IOSYS_APECS}, - {"EB164", IOSYS_PCIDEP}, - {"EB64+", IOSYS_APECS}, - {"EB66", IOSYS_APECS}, - {"EB66P", IOSYS_APECS}, - {"Jensen", IOSYS_JENSEN}, - {"Miata", IOSYS_PYXIS}, - {"Mikasa", IOSYS_CPUDEP}, - {"Nautilus", IOSYS_TSUNAMI}, - {"Noname", IOSYS_APECS}, - {"Noritake", IOSYS_CPUDEP}, - {"Rawhide", IOSYS_MCPCIA}, - {"Ruffian", IOSYS_PYXIS}, - {"Sable", IOSYS_CPUDEP}, - {"Takara", IOSYS_CIA}, - {"Tsunami", IOSYS_TSUNAMI}, - {"XL", IOSYS_APECS}, -}; - -struct ioswtch { - void (*sethae)(unsigned long int addr); - void (*outb)(unsigned char b, unsigned long int port); - void (*outw)(unsigned short b, unsigned long int port); - void (*outl)(unsigned int b, unsigned long int port); - unsigned int (*inb)(unsigned long int port); - unsigned int (*inw)(unsigned long int port); - unsigned int (*inl)(unsigned long int port); -}; - -static struct { - unsigned long int hae_cache; - unsigned long int base; - struct ioswtch * swp; - unsigned long int bus_memory_base; - unsigned long int sparse_bus_memory_base; - unsigned long int io_base; - ioswizzle_t swiz; -} io; - -static inline void -stb_mb(unsigned char val, unsigned long addr) -{ - __asm__("stb %1,%0; mb" : "=m"(*(vucp)addr) : "r"(val)); -} - -static inline void -stw_mb(unsigned short val, unsigned long addr) -{ - __asm__("stw %1,%0; mb" : "=m"(*(vusp)addr) : "r"(val)); -} - -static inline void -stl_mb(unsigned int val, unsigned long addr) -{ - __asm__("stl %1,%0; mb" : "=m"(*(vip)addr) : "r"(val)); -} - -/* No need to examine error -- sethae never fails. */ -static inline void -__sethae(unsigned long value) -{ - register unsigned long r16 __asm__("$16") = value; - register unsigned long r0 __asm__("$0") = __NR_sethae; - __asm__ __volatile__ ("callsys" - : "=r"(r0) - : "0"(r0), "r" (r16) - : inline_syscall_clobbers, "$19"); -} - -extern long __pciconfig_iobase(enum __pciconfig_iobase_which __which, - unsigned long int __bus, - unsigned long int __dfn); - -static inline unsigned long int -port_to_cpu_addr (unsigned long int port, ioswizzle_t ioswiz, int size) -{ - if (ioswiz == IOSWIZZLE_SPARSE) - return io.base + (port << 5) + ((size - 1) << 3); - else if (ioswiz == IOSWIZZLE_DENSE) - return port + io.base; - else - return io.base + (port << 7) + ((size - 1) << 5); -} - -static inline __attribute__((always_inline)) void -inline_sethae (unsigned long int addr, ioswizzle_t ioswiz) -{ - if (ioswiz == IOSWIZZLE_SPARSE) - { - unsigned long int msb; - - /* no need to set hae if msb is 0: */ - msb = addr & 0xf8000000; - if (msb && msb != io.hae_cache) - { - io.hae_cache = msb; - __sethae (msb); - } - } - else if (ioswiz == IOSWIZZLE_JENSEN) - { - /* HAE on the Jensen is bits 31:25 shifted right. */ - addr >>= 25; - if (addr != io.hae_cache) - { - io.hae_cache = addr; - __sethae (addr); - } - } -} - -static inline void -inline_outb (unsigned char b, unsigned long int port, ioswizzle_t ioswiz) -{ - unsigned int w; - unsigned long int addr = port_to_cpu_addr (port, ioswiz, 1); - - asm ("insbl %2,%1,%0" : "=r" (w) : "ri" (port & 0x3), "r" (b)); - stl_mb(w, addr); -} - - -static inline void -inline_outw (unsigned short int b, unsigned long int port, ioswizzle_t ioswiz) -{ - unsigned long w; - unsigned long int addr = port_to_cpu_addr (port, ioswiz, 2); - - asm ("inswl %2,%1,%0" : "=r" (w) : "ri" (port & 0x3), "r" (b)); - stl_mb(w, addr); -} - - -static inline void -inline_outl (unsigned int b, unsigned long int port, ioswizzle_t ioswiz) -{ - unsigned long int addr = port_to_cpu_addr (port, ioswiz, 4); - - stl_mb(b, addr); -} - - -static inline unsigned int -inline_inb (unsigned long int port, ioswizzle_t ioswiz) -{ - unsigned long int addr = port_to_cpu_addr (port, ioswiz, 1); - int result; - - result = *(vip) addr; - result >>= (port & 3) * 8; - return 0xffUL & result; -} - - -static inline unsigned int -inline_inw (unsigned long int port, ioswizzle_t ioswiz) -{ - unsigned long int addr = port_to_cpu_addr (port, ioswiz, 2); - int result; - - result = *(vip) addr; - result >>= (port & 3) * 8; - return 0xffffUL & result; -} - - -static inline unsigned int -inline_inl (unsigned long int port, ioswizzle_t ioswiz) -{ - unsigned long int addr = port_to_cpu_addr (port, ioswiz, 4); - - return *(vuip) addr; -} - -/* - * Now define the inline functions for CPUs supporting byte/word insns, - * and whose core logic supports I/O space accesses utilizing them. - * - * These routines could be used by MIATA, for example, because it has - * and EV56 plus PYXIS, but it currently uses SPARSE anyway. This is - * also true of RX164 which used POLARIS, but we will choose to use - * these routines in that case instead of SPARSE. - * - * These routines are necessary for TSUNAMI/TYPHOON based platforms, - * which will have (at least) EV6. - */ - -static inline unsigned long int -dense_port_to_cpu_addr (unsigned long int port) -{ - return port + io.base; -} - -static inline void -inline_bwx_outb (unsigned char b, unsigned long int port) -{ - unsigned long int addr = dense_port_to_cpu_addr (port); - stb_mb (b, addr); -} - -static inline void -inline_bwx_outw (unsigned short int b, unsigned long int port) -{ - unsigned long int addr = dense_port_to_cpu_addr (port); - stw_mb (b, addr); -} - -static inline void -inline_bwx_outl (unsigned int b, unsigned long int port) -{ - unsigned long int addr = dense_port_to_cpu_addr (port); - stl_mb (b, addr); -} - -static inline unsigned int -inline_bwx_inb (unsigned long int port) -{ - unsigned long int addr = dense_port_to_cpu_addr (port); - unsigned char r; - - __asm__ ("ldbu %0,%1" : "=r"(r) : "m"(*(vucp)addr)); - return r; -} - -static inline unsigned int -inline_bwx_inw (unsigned long int port) -{ - unsigned long int addr = dense_port_to_cpu_addr (port); - unsigned short r; - - __asm__ ("ldwu %0,%1" : "=r"(r) : "m"(*(vusp)addr)); - return r; -} - -static inline unsigned int -inline_bwx_inl (unsigned long int port) -{ - unsigned long int addr = dense_port_to_cpu_addr (port); - - return *(vuip) addr; -} - -/* macros to define routines with appropriate names and functions */ - -/* these do either SPARSE or JENSEN swizzle */ - -#define DCL_SETHAE(name, ioswiz) \ -static void \ -name##_sethae (unsigned long int addr) \ -{ \ - inline_sethae (addr, IOSWIZZLE_##ioswiz); \ -} - -#define DCL_OUT(name, func, type, ioswiz) \ -static void \ -name##_##func (unsigned type b, unsigned long int addr) \ -{ \ - inline_##func (b, addr, IOSWIZZLE_##ioswiz); \ -} - -#define DCL_IN(name, func, ioswiz) \ -static unsigned int \ -name##_##func (unsigned long int addr) \ -{ \ - return inline_##func (addr, IOSWIZZLE_##ioswiz); \ -} - -/* these do DENSE, so no swizzle is needed */ - -#define DCL_OUT_BWX(name, func, type) \ -static void \ -name##_##func (unsigned type b, unsigned long int addr) \ -{ \ - inline_bwx_##func (b, addr); \ -} - -#define DCL_IN_BWX(name, func) \ -static unsigned int \ -name##_##func (unsigned long int addr) \ -{ \ - return inline_bwx_##func (addr); \ -} - -/* now declare/define the necessary routines */ - -DCL_SETHAE(jensen, JENSEN) -DCL_OUT(jensen, outb, char, JENSEN) -DCL_OUT(jensen, outw, short int, JENSEN) -DCL_OUT(jensen, outl, int, JENSEN) -DCL_IN(jensen, inb, JENSEN) -DCL_IN(jensen, inw, JENSEN) -DCL_IN(jensen, inl, JENSEN) - -DCL_SETHAE(sparse, SPARSE) -DCL_OUT(sparse, outb, char, SPARSE) -DCL_OUT(sparse, outw, short int, SPARSE) -DCL_OUT(sparse, outl, int, SPARSE) -DCL_IN(sparse, inb, SPARSE) -DCL_IN(sparse, inw, SPARSE) -DCL_IN(sparse, inl, SPARSE) - -DCL_SETHAE(dense, DENSE) -DCL_OUT_BWX(dense, outb, char) -DCL_OUT_BWX(dense, outw, short int) -DCL_OUT_BWX(dense, outl, int) -DCL_IN_BWX(dense, inb) -DCL_IN_BWX(dense, inw) -DCL_IN_BWX(dense, inl) - -/* define the "swizzle" switch */ -static struct ioswtch ioswtch[] = { - { - jensen_sethae, - jensen_outb, jensen_outw, jensen_outl, - jensen_inb, jensen_inw, jensen_inl - }, - { - sparse_sethae, - sparse_outb, sparse_outw, sparse_outl, - sparse_inb, sparse_inw, sparse_inl - }, - { - dense_sethae, - dense_outb, dense_outw, dense_outl, - dense_inb, dense_inw, dense_inl - } -}; - -#undef DEBUG_IOPERM - -/* Routine to process the /proc/cpuinfo information into the fields - that are required for correctly determining the platform parameters. */ - -struct cpuinfo_data -{ - char systype[256]; /* system type field */ - char sysvari[256]; /* system variation field */ - char cpumodel[256]; /* cpu model field */ -}; - -static inline int -process_cpuinfo(struct cpuinfo_data *data) -{ - int got_type, got_vari, got_model; - char dummy[256]; - FILE * fp; - int n; - - data->systype[0] = 0; - data->sysvari[0] = 0; - data->cpumodel[0] = 0; - - /* If there's an /etc/alpha_systype link, we're intending to override - whatever's in /proc/cpuinfo. */ - n = __readlink (PATH_ALPHA_SYSTYPE, data->systype, 256 - 1); - if (n > 0) - { - data->systype[n] = '\0'; - return 1; - } - - fp = fopen (PATH_CPUINFO, "rce"); - if (!fp) - return 0; - - got_type = got_vari = got_model = 0; - - while (1) - { - if (fgets_unlocked (dummy, 256, fp) == NULL) - break; - if (!got_type && - sscanf (dummy, "system type : %256[^\n]\n", data->systype) == 1) - got_type = 1; - if (!got_vari && - sscanf (dummy, "system variation : %256[^\n]\n", data->sysvari) == 1) - got_vari = 1; - if (!got_model && - sscanf (dummy, "cpu model : %256[^\n]\n", data->cpumodel) == 1) - got_model = 1; - } - - fclose (fp); - -#ifdef DEBUG_IOPERM - fprintf(stderr, "system type: `%s'\n", data->systype); - fprintf(stderr, "system vari: `%s'\n", data->sysvari); - fprintf(stderr, "cpu model: `%s'\n", data->cpumodel); -#endif - - return got_type + got_vari + got_model; -} - - -/* - * Initialize I/O system. - */ -static int -init_iosys (void) -{ - long addr; - int i, olderrno = errno; - struct cpuinfo_data data; - - /* First try the pciconfig_iobase syscall added to 2.2.15 and 2.3.99. */ - -#ifdef __NR_pciconfig_iobase - addr = __pciconfig_iobase (IOBASE_DENSE_MEM, 0, 0); - if (addr != -1) - { - ioswizzle_t io_swiz; - - if (addr == 0) - { - /* Only Jensen doesn't have dense mem space. */ - io.sparse_bus_memory_base - = io_system[IOSYS_JENSEN].sparse_bus_mem_base; - io.io_base = io_system[IOSYS_JENSEN].bus_io_base; - io_swiz = IOSWIZZLE_JENSEN; - } - else - { - io.bus_memory_base = addr; - - addr = __pciconfig_iobase (IOBASE_DENSE_IO, 0, 0); - if (addr != 0) - { - /* The X server uses _bus_base_sparse == 0 to know that - BWX access are supported to dense mem space. This is - true of every system that supports dense io space, so - never fill in io.sparse_bus_memory_base in this case. */ - io_swiz = IOSWIZZLE_DENSE; - io.io_base = addr; - } - else - { - io.sparse_bus_memory_base - = __pciconfig_iobase (IOBASE_SPARSE_MEM, 0, 0); - io.io_base = __pciconfig_iobase (IOBASE_SPARSE_IO, 0, 0); - io_swiz = IOSWIZZLE_SPARSE; - } - } - - io.swiz = io_swiz; - io.swp = &ioswtch[io_swiz]; - - return 0; - } -#endif - - /* Second, collect the contents of /etc/alpha_systype or /proc/cpuinfo. */ - - if (process_cpuinfo(&data) == 0) - { - /* This can happen if the format of /proc/cpuinfo changes. */ - fprintf (stderr, - "ioperm.init_iosys: Unable to determine system type.\n" - "\t(May need " PATH_ALPHA_SYSTYPE " symlink?)\n"); - __set_errno (ENODEV); - return -1; - } - - /* Translate systype name into i/o system. */ - for (i = 0; i < sizeof (platform) / sizeof (platform[0]); ++i) - { - if (strcmp (platform[i].name, data.systype) == 0) - { - iosys_t io_sys = platform[i].io_sys; - - /* Some platforms can have either EV4 or EV5 CPUs. */ - if (io_sys == IOSYS_CPUDEP) - { - /* SABLE or MIKASA or NORITAKE so far. */ - if (strcmp (platform[i].name, "Sable") == 0) - { - if (strncmp (data.cpumodel, "EV4", 3) == 0) - io_sys = IOSYS_T2; - else if (strncmp (data.cpumodel, "EV5", 3) == 0) - io_sys = IOSYS_GAMMA; - } - else - { - /* This covers MIKASA/NORITAKE. */ - if (strncmp (data.cpumodel, "EV4", 3) == 0) - io_sys = IOSYS_APECS; - else if (strncmp (data.cpumodel, "EV5", 3) == 0) - io_sys = IOSYS_CIA; - } - if (io_sys == IOSYS_CPUDEP) - { - /* This can happen if the format of /proc/cpuinfo changes.*/ - fprintf (stderr, "ioperm.init_iosys: Unable to determine" - " CPU model.\n"); - __set_errno (ENODEV); - return -1; - } - } - /* Some platforms can have different core logic chipsets */ - if (io_sys == IOSYS_PCIDEP) - { - /* EB164 so far */ - if (strcmp (data.systype, "EB164") == 0) - { - if (strncmp (data.sysvari, "RX164", 5) == 0) - io_sys = IOSYS_POLARIS; - else if (strncmp (data.sysvari, "LX164", 5) == 0 - || strncmp (data.sysvari, "SX164", 5) == 0) - io_sys = IOSYS_PYXIS; - else - io_sys = IOSYS_CIA; - } - if (io_sys == IOSYS_PCIDEP) - { - /* This can happen if the format of /proc/cpuinfo changes.*/ - fprintf (stderr, "ioperm.init_iosys: Unable to determine" - " core logic chipset.\n"); - __set_errno (ENODEV); - return -1; - } - } - io.bus_memory_base = io_system[io_sys].bus_memory_base; - io.sparse_bus_memory_base = io_system[io_sys].sparse_bus_mem_base; - io.io_base = io_system[io_sys].bus_io_base; - - if (io_sys == IOSYS_JENSEN) - io.swiz = IOSWIZZLE_JENSEN; - else if (io_sys == IOSYS_TSUNAMI - || io_sys == IOSYS_POLARIS - || io_sys == IOSYS_PYXIS) - io.swiz = IOSWIZZLE_DENSE; - else - io.swiz = IOSWIZZLE_SPARSE; - io.swp = &ioswtch[io.swiz]; - - __set_errno (olderrno); - return 0; - } - } - - __set_errno (ENODEV); - fprintf(stderr, "ioperm.init_iosys: Platform not recognized.\n" - "\t(May need " PATH_ALPHA_SYSTYPE " symlink?)\n"); - return -1; -} - - -int -_ioperm (unsigned long int from, unsigned long int num, int turn_on) -{ - unsigned long int addr, len, pagesize = __getpagesize(); - int prot; - - if (!io.swp && init_iosys() < 0) - { -#ifdef DEBUG_IOPERM - fprintf(stderr, "ioperm: init_iosys() failed (%m)\n"); -#endif - return -1; - } - - /* This test isn't as silly as it may look like; consider overflows! */ - if (from >= MAX_PORT || from + num > MAX_PORT) - { - __set_errno (EINVAL); -#ifdef DEBUG_IOPERM - fprintf(stderr, "ioperm: from/num out of range\n"); -#endif - return -1; - } - -#ifdef DEBUG_IOPERM - fprintf(stderr, "ioperm: turn_on %d io.base %ld\n", turn_on, io.base); -#endif - - if (turn_on) - { - if (!io.base) - { - int fd; - - io.hae_cache = 0; - if (io.swiz != IOSWIZZLE_DENSE) - { - /* Synchronize with hw. */ - __sethae (0); - } - - fd = __open ("/dev/mem", O_RDWR); - if (fd < 0) - { -#ifdef DEBUG_IOPERM - fprintf(stderr, "ioperm: /dev/mem open failed (%m)\n"); -#endif - return -1; - } - - addr = port_to_cpu_addr (0, io.swiz, 1); - len = port_to_cpu_addr (MAX_PORT, io.swiz, 1) - addr; - io.base = - (unsigned long int) __mmap (0, len, PROT_NONE, MAP_SHARED, - fd, io.io_base); - __close (fd); -#ifdef DEBUG_IOPERM - fprintf(stderr, "ioperm: mmap of len 0x%lx returned 0x%lx\n", - len, io.base); -#endif - if ((long) io.base == -1) - return -1; - } - prot = PROT_READ | PROT_WRITE; - } - else - { - if (!io.base) - return 0; /* never was turned on... */ - - /* turnoff access to relevant pages: */ - prot = PROT_NONE; - } - addr = port_to_cpu_addr (from, io.swiz, 1); - addr &= ~(pagesize - 1); - len = port_to_cpu_addr (from + num, io.swiz, 1) - addr; - return __mprotect ((void *) addr, len, prot); -} - - -int -_iopl (int level) -{ - switch (level) - { - case 0: - return 0; - - case 1: case 2: case 3: - return _ioperm (0, MAX_PORT, 1); - - default: - __set_errno (EINVAL); - return -1; - } -} - - -void -_sethae (unsigned long int addr) -{ - if (!io.swp && init_iosys () < 0) - return; - - io.swp->sethae (addr); -} - - -void -_outb (unsigned char b, unsigned long int port) -{ - if (port >= MAX_PORT) - return; - - io.swp->outb (b, port); -} - - -void -_outw (unsigned short b, unsigned long int port) -{ - if (port >= MAX_PORT) - return; - - io.swp->outw (b, port); -} - - -void -_outl (unsigned int b, unsigned long int port) -{ - if (port >= MAX_PORT) - return; - - io.swp->outl (b, port); -} - - -unsigned int -_inb (unsigned long int port) -{ - return io.swp->inb (port); -} - - -unsigned int -_inw (unsigned long int port) -{ - return io.swp->inw (port); -} - - -unsigned int -_inl (unsigned long int port) -{ - return io.swp->inl (port); -} - - -unsigned long int -_bus_base(void) -{ - if (!io.swp && init_iosys () < 0) - return -1; - return io.bus_memory_base; -} - -unsigned long int -_bus_base_sparse(void) -{ - if (!io.swp && init_iosys () < 0) - return -1; - return io.sparse_bus_memory_base; -} - -int -_hae_shift(void) -{ - if (!io.swp && init_iosys () < 0) - return -1; - if (io.swiz == IOSWIZZLE_JENSEN) - return 7; - if (io.swiz == IOSWIZZLE_SPARSE) - return 5; - return 0; -} - -weak_alias (_sethae, sethae); -weak_alias (_ioperm, ioperm); -weak_alias (_iopl, iopl); -weak_alias (_inb, inb); -weak_alias (_inw, inw); -weak_alias (_inl, inl); -weak_alias (_outb, outb); -weak_alias (_outw, outw); -weak_alias (_outl, outl); -weak_alias (_bus_base, bus_base); -weak_alias (_bus_base_sparse, bus_base_sparse); -weak_alias (_hae_shift, hae_shift); diff --git a/sysdeps/unix/sysv/linux/alpha/ipc_priv.h b/sysdeps/unix/sysv/linux/alpha/ipc_priv.h deleted file mode 100644 index c8b946a38b..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/ipc_priv.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Old SysV permission definition for Linux. Alpha version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include /* For __key_t */ - -#define __IPC_64 0x100 - -struct __old_ipc_perm -{ - __key_t __key; /* Key. */ - unsigned int uid; /* Owner's user ID. */ - unsigned int gid; /* Owner's group ID. */ - unsigned int cuid; /* Creator's user ID. */ - unsigned int cgid; /* Creator's group ID. */ - unsigned int mode; /* Read/write permission. */ - unsigned short int __seq; /* Sequence number. */ -}; diff --git a/sysdeps/unix/sysv/linux/alpha/kernel-features.h b/sysdeps/unix/sysv/linux/alpha/kernel-features.h deleted file mode 100644 index 53f7611f93..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/kernel-features.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _KERNEL_FEATURES_H -#define _KERNEL_FEATURES_H 1 - -#include_next - -#undef __ASSUME_ST_INO_64_BIT -#define __ASSUME_ST_INO_64_BIT 0 - -/* There never has been support for fstat64. */ -#undef __ASSUME_STATFS64 -#define __ASSUME_STATFS64 0 - -/* Alpha defines SysV ipc shmat syscall with a different name. */ -#define __NR_shmat __NR_osf_shmat - -#define __ASSUME_RECV_SYSCALL 1 -#define __ASSUME_SEND_SYSCALL 1 - -#endif /* _KERNEL_FEATURES_H */ diff --git a/sysdeps/unix/sysv/linux/alpha/kernel_sigaction.h b/sysdeps/unix/sysv/linux/alpha/kernel_sigaction.h deleted file mode 100644 index 4c35d969cf..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/kernel_sigaction.h +++ /dev/null @@ -1,15 +0,0 @@ -/* This is the sigaction struction from the Linux 2.1.20 kernel. */ - -struct old_kernel_sigaction { - __sighandler_t k_sa_handler; - unsigned long sa_mask; - unsigned int sa_flags; -}; - -/* This is the sigaction structure from the Linux 2.1.68 kernel. */ - -struct kernel_sigaction { - __sighandler_t k_sa_handler; - unsigned int sa_flags; - sigset_t sa_mask; -}; diff --git a/sysdeps/unix/sysv/linux/alpha/kernel_stat.h b/sysdeps/unix/sysv/linux/alpha/kernel_stat.h deleted file mode 100644 index d637e099cf..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/kernel_stat.h +++ /dev/null @@ -1,89 +0,0 @@ -/* Definition of `struct stat' used in the kernel. */ -struct kernel_stat - { - unsigned int st_dev; - unsigned int st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned int st_uid; - unsigned int st_gid; - unsigned int st_rdev; - long int st_size; - unsigned long int st_atime; - unsigned long int st_mtime; - unsigned long int st_ctime; - unsigned int st_blksize; - int st_blocks; - unsigned int st_flags; - unsigned int st_gen; - }; - -/* Definition of `struct stat64' used in the kernel. */ -struct kernel_stat64 - { - unsigned long st_dev; - unsigned long st_ino; - unsigned long st_rdev; - long st_size; - unsigned long st_blocks; - - unsigned int st_mode; - unsigned int st_uid; - unsigned int st_gid; - unsigned int st_blksize; - unsigned int st_nlink; - unsigned int __pad0; - - unsigned long st_atime; - unsigned long st_atimensec; - unsigned long st_mtime; - unsigned long st_mtimensec; - unsigned long st_ctime; - unsigned long st_ctimensec; - long __glibc_reserved[3]; - }; - -/* Definition of `struct stat' used by glibc 2.0. */ -struct glibc2_stat - { - __dev_t st_dev; - __ino_t st_ino; - __mode_t st_mode; - __nlink_t st_nlink; - __uid_t st_uid; - __gid_t st_gid; - __dev_t st_rdev; - __off_t st_size; - __time_t st_atime; - __time_t st_mtime; - __time_t st_ctime; - unsigned int st_blksize; - int st_blocks; - unsigned int st_flags; - unsigned int st_gen; - }; - -/* Definition of `struct stat' used by glibc 2.1. */ -struct glibc21_stat - { - __dev_t st_dev; - __ino64_t st_ino; - __mode_t st_mode; - __nlink_t st_nlink; - __uid_t st_uid; - __gid_t st_gid; - __dev_t st_rdev; - __off_t st_size; - __time_t st_atime; - __time_t st_mtime; - __time_t st_ctime; - __blkcnt64_t st_blocks; - __blksize_t st_blksize; - unsigned int st_flags; - unsigned int st_gen; - int __pad3; - long __glibc_reserved[4]; - }; - -#define XSTAT_IS_XSTAT64 1 -#define STATFS_IS_STATFS64 0 diff --git a/sysdeps/unix/sysv/linux/alpha/kernel_sysinfo.h b/sysdeps/unix/sysv/linux/alpha/kernel_sysinfo.h deleted file mode 100644 index a3edec2269..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/kernel_sysinfo.h +++ /dev/null @@ -1,6 +0,0 @@ -/* A copy of the couple of bits we need from . */ - -#define GSI_IEEE_FP_CONTROL 45 - -#define SSI_IEEE_FP_CONTROL 14 -#define SSI_IEEE_RAISE_EXCEPTION 1001 diff --git a/sysdeps/unix/sysv/linux/alpha/kernel_termios.h b/sysdeps/unix/sysv/linux/alpha/kernel_termios.h deleted file mode 100644 index ad12622a57..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/kernel_termios.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _KERNEL_TERMIOS_H -#define _KERNEL_TERMIOS_H 1 - -/* The following corresponds to the values from the Linux 2.1.20 kernel. */ - -/* We need the definition of tcflag_t, cc_t, and speed_t. */ -#include - -#define __KERNEL_NCCS 19 - -struct __kernel_termios - { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_cc[__KERNEL_NCCS]; /* control characters */ - cc_t c_line; /* line discipline */ - speed_t c_ispeed; /* input speed */ - speed_t c_ospeed; /* output speed */ - }; - -#define _HAVE_C_ISPEED 1 -#define _HAVE_C_OSPEED 1 - -#endif /* kernel_termios.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/ld.abilist b/sysdeps/unix/sysv/linux/alpha/ld.abilist deleted file mode 100644 index ca34294610..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/ld.abilist +++ /dev/null @@ -1,13 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _r_debug D 0x28 -GLIBC_2.0 calloc F -GLIBC_2.0 free F -GLIBC_2.0 malloc F -GLIBC_2.0 realloc F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __libc_stack_end D 0x8 -GLIBC_2.1 _dl_mcount F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __tls_get_addr F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __stack_chk_guard D 0x8 diff --git a/sysdeps/unix/sysv/linux/alpha/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/alpha/libBrokenLocale.abilist deleted file mode 100644 index 4a56bb68a3..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/alpha/libanl.abilist b/sysdeps/unix/sysv/linux/alpha/libanl.abilist deleted file mode 100644 index edabfb436e..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 gai_cancel F -GLIBC_2.2.3 gai_error F -GLIBC_2.2.3 gai_suspend F -GLIBC_2.2.3 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist deleted file mode 100644 index fab73317ca..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist +++ /dev/null @@ -1,2503 +0,0 @@ -GCC_3.0 GCC_3.0 A -GCC_3.0 _Unwind_Find_FDE F -GCC_3.0 __deregister_frame_info_bases F -GCC_3.0 __register_frame_info_bases F -GCC_3.0 __register_frame_info_table_bases F -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_adjust_column F -GLIBC_2.0 _IO_default_doallocate F -GLIBC_2.0 _IO_default_finish F -GLIBC_2.0 _IO_default_pbackfail F -GLIBC_2.0 _IO_default_uflow F -GLIBC_2.0 _IO_default_xsgetn F -GLIBC_2.0 _IO_default_xsputn F -GLIBC_2.0 _IO_do_write F -GLIBC_2.0 _IO_doallocbuf F -GLIBC_2.0 _IO_fclose F -GLIBC_2.0 _IO_fdopen F -GLIBC_2.0 _IO_feof F -GLIBC_2.0 _IO_ferror F -GLIBC_2.0 _IO_fflush F -GLIBC_2.0 _IO_fgetpos F -GLIBC_2.0 _IO_fgets F -GLIBC_2.0 _IO_file_attach F -GLIBC_2.0 _IO_file_close F -GLIBC_2.0 _IO_file_close_it F -GLIBC_2.0 _IO_file_doallocate F -GLIBC_2.0 _IO_file_fopen F -GLIBC_2.0 _IO_file_init F -GLIBC_2.0 _IO_file_jumps D 0xa8 -GLIBC_2.0 _IO_file_open F -GLIBC_2.0 _IO_file_overflow F -GLIBC_2.0 _IO_file_read F -GLIBC_2.0 _IO_file_seek F -GLIBC_2.0 _IO_file_seekoff F -GLIBC_2.0 _IO_file_setbuf F -GLIBC_2.0 _IO_file_stat F -GLIBC_2.0 _IO_file_sync F -GLIBC_2.0 _IO_file_underflow F -GLIBC_2.0 _IO_file_write F -GLIBC_2.0 _IO_file_xsputn F -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_flush_all F -GLIBC_2.0 _IO_flush_all_linebuffered F -GLIBC_2.0 _IO_fopen F -GLIBC_2.0 _IO_fprintf F -GLIBC_2.0 _IO_fputs F -GLIBC_2.0 _IO_fread F -GLIBC_2.0 _IO_free_backup_area F -GLIBC_2.0 _IO_fsetpos F -GLIBC_2.0 _IO_ftell F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 _IO_fwrite F -GLIBC_2.0 _IO_getc F -GLIBC_2.0 _IO_getline F -GLIBC_2.0 _IO_gets F -GLIBC_2.0 _IO_init F -GLIBC_2.0 _IO_init_marker F -GLIBC_2.0 _IO_link_in F -GLIBC_2.0 _IO_list_all D 0x8 -GLIBC_2.0 _IO_marker_delta F -GLIBC_2.0 _IO_marker_difference F -GLIBC_2.0 _IO_padn F -GLIBC_2.0 _IO_peekc_locked F -GLIBC_2.0 _IO_popen F -GLIBC_2.0 _IO_printf F -GLIBC_2.0 _IO_proc_close F -GLIBC_2.0 _IO_proc_open F -GLIBC_2.0 _IO_putc F -GLIBC_2.0 _IO_puts F -GLIBC_2.0 _IO_remove_marker F -GLIBC_2.0 _IO_seekmark F -GLIBC_2.0 _IO_seekoff F -GLIBC_2.0 _IO_seekpos F -GLIBC_2.0 _IO_setb F -GLIBC_2.0 _IO_setbuffer F -GLIBC_2.0 _IO_setvbuf F -GLIBC_2.0 _IO_sgetn F -GLIBC_2.0 _IO_sprintf F -GLIBC_2.0 _IO_sputbackc F -GLIBC_2.0 _IO_sscanf F -GLIBC_2.0 _IO_stderr_ D 0x98 -GLIBC_2.0 _IO_stdin_ D 0x98 -GLIBC_2.0 _IO_stdout_ D 0x98 -GLIBC_2.0 _IO_str_init_readonly F -GLIBC_2.0 _IO_str_init_static F -GLIBC_2.0 _IO_str_overflow F -GLIBC_2.0 _IO_str_pbackfail F -GLIBC_2.0 _IO_str_seekoff F -GLIBC_2.0 _IO_str_underflow F -GLIBC_2.0 _IO_sungetc F -GLIBC_2.0 _IO_switch_to_get_mode F -GLIBC_2.0 _IO_un_link F -GLIBC_2.0 _IO_ungetc F -GLIBC_2.0 _IO_unsave_markers F -GLIBC_2.0 _IO_vfprintf F -GLIBC_2.0 _IO_vfscanf F -GLIBC_2.0 _IO_vsprintf F -GLIBC_2.0 __adjtimex F -GLIBC_2.0 __after_morecore_hook D 0x8 -GLIBC_2.0 __argz_count F -GLIBC_2.0 __argz_next F -GLIBC_2.0 __argz_stringify F -GLIBC_2.0 __assert_fail F -GLIBC_2.0 __assert_perror_fail F -GLIBC_2.0 __bsd_getpgrp F -GLIBC_2.0 __bzero F -GLIBC_2.0 __check_rhosts_file D 0x4 -GLIBC_2.0 __clone F -GLIBC_2.0 __close F -GLIBC_2.0 __cmsg_nxthdr F -GLIBC_2.0 __connect F -GLIBC_2.0 __ctype32_b D 0x8 -GLIBC_2.0 __ctype_b D 0x8 -GLIBC_2.0 __ctype_get_mb_cur_max F -GLIBC_2.0 __ctype_tolower D 0x8 -GLIBC_2.0 __ctype_toupper D 0x8 -GLIBC_2.0 __curbrk D 0x8 -GLIBC_2.0 __daylight D 0x4 -GLIBC_2.0 __dcgettext F -GLIBC_2.0 __default_morecore F -GLIBC_2.0 __deregister_frame F -GLIBC_2.0 __deregister_frame_info F -GLIBC_2.0 __dgettext F -GLIBC_2.0 __divl F -GLIBC_2.0 __divlu F -GLIBC_2.0 __divq F -GLIBC_2.0 __divqu F -GLIBC_2.0 __dup2 F -GLIBC_2.0 __environ D 0x8 -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __ffs F -GLIBC_2.0 __finite F -GLIBC_2.0 __finitef F -GLIBC_2.0 __finitel F -GLIBC_2.0 __fork F -GLIBC_2.0 __fpu_control D 0x4 -GLIBC_2.0 __frame_state_for F -GLIBC_2.0 __free_hook D 0x8 -GLIBC_2.0 __fxstat F -GLIBC_2.0 __getdelim F -GLIBC_2.0 __getpagesize F -GLIBC_2.0 __getpgid F -GLIBC_2.0 __getpid F -GLIBC_2.0 __gettimeofday F -GLIBC_2.0 __gmtime_r F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __ieee_get_fp_control F -GLIBC_2.0 __ieee_set_fp_control F -GLIBC_2.0 __isinf F -GLIBC_2.0 __isinff F -GLIBC_2.0 __isinfl F -GLIBC_2.0 __isnan F -GLIBC_2.0 __isnanf F -GLIBC_2.0 __isnanl F -GLIBC_2.0 __iswctype F -GLIBC_2.0 __ivaliduser F -GLIBC_2.0 __libc_calloc F -GLIBC_2.0 __libc_free F -GLIBC_2.0 __libc_init_first F -GLIBC_2.0 __libc_mallinfo F -GLIBC_2.0 __libc_malloc F -GLIBC_2.0 __libc_mallopt F -GLIBC_2.0 __libc_memalign F -GLIBC_2.0 __libc_pvalloc F -GLIBC_2.0 __libc_realloc F -GLIBC_2.0 __libc_start_main F -GLIBC_2.0 __libc_valloc F -GLIBC_2.0 __lseek F -GLIBC_2.0 __lxstat F -GLIBC_2.0 __malloc_hook D 0x8 -GLIBC_2.0 __malloc_initialize_hook D 0x8 -GLIBC_2.0 __mbrlen F -GLIBC_2.0 __mbrtowc F -GLIBC_2.0 __memalign_hook D 0x8 -GLIBC_2.0 __mempcpy F -GLIBC_2.0 __monstartup F -GLIBC_2.0 __morecore D 0x8 -GLIBC_2.0 __nss_configure_lookup F -GLIBC_2.0 __nss_database_lookup F -GLIBC_2.0 __nss_group_lookup F -GLIBC_2.0 __nss_hosts_lookup F -GLIBC_2.0 __nss_next F -GLIBC_2.0 __nss_passwd_lookup F -GLIBC_2.0 __open F -GLIBC_2.0 __overflow F -GLIBC_2.0 __pipe F -GLIBC_2.0 __printf_fp F -GLIBC_2.0 __profile_frequency F -GLIBC_2.0 __progname D 0x8 -GLIBC_2.0 __progname_full D 0x8 -GLIBC_2.0 __rcmd_errstr D 0x8 -GLIBC_2.0 __read F -GLIBC_2.0 __realloc_hook D 0x8 -GLIBC_2.0 __register_frame F -GLIBC_2.0 __register_frame_info F -GLIBC_2.0 __register_frame_info_table F -GLIBC_2.0 __register_frame_table F -GLIBC_2.0 __reml F -GLIBC_2.0 __remlu F -GLIBC_2.0 __remq F -GLIBC_2.0 __remqu F -GLIBC_2.0 __res_randomid F -GLIBC_2.0 __sbrk F -GLIBC_2.0 __sched_get_priority_max F -GLIBC_2.0 __sched_get_priority_min F -GLIBC_2.0 __sched_getparam F -GLIBC_2.0 __sched_getscheduler F -GLIBC_2.0 __sched_setscheduler F -GLIBC_2.0 __sched_yield F -GLIBC_2.0 __secure_getenv F -GLIBC_2.0 __select F -GLIBC_2.0 __send F -GLIBC_2.0 __setpgid F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __sigaddset F -GLIBC_2.0 __sigdelset F -GLIBC_2.0 __sigismember F -GLIBC_2.0 __sigpause F -GLIBC_2.0 __sigsetjmp F -GLIBC_2.0 __stpcpy F -GLIBC_2.0 __stpncpy F -GLIBC_2.0 __strcasecmp F -GLIBC_2.0 __strdup F -GLIBC_2.0 __strerror_r F -GLIBC_2.0 __strtod_internal F -GLIBC_2.0 __strtof_internal F -GLIBC_2.0 __strtok_r F -GLIBC_2.0 __strtol_internal F -GLIBC_2.0 __strtold_internal F -GLIBC_2.0 __strtoll_internal F -GLIBC_2.0 __strtoul_internal F -GLIBC_2.0 __strtoull_internal F -GLIBC_2.0 __sysv_signal F -GLIBC_2.0 __timezone D 0x8 -GLIBC_2.0 __tzname D 0x10 -GLIBC_2.0 __uflow F -GLIBC_2.0 __underflow F -GLIBC_2.0 __vfscanf F -GLIBC_2.0 __vsnprintf F -GLIBC_2.0 __vsscanf F -GLIBC_2.0 __wait F -GLIBC_2.0 __waitpid F -GLIBC_2.0 __wcstod_internal F -GLIBC_2.0 __wcstof_internal F -GLIBC_2.0 __wcstol_internal F -GLIBC_2.0 __wcstold_internal F -GLIBC_2.0 __wcstoll_internal F -GLIBC_2.0 __wcstoul_internal F -GLIBC_2.0 __wcstoull_internal F -GLIBC_2.0 __write F -GLIBC_2.0 __xmknod F -GLIBC_2.0 __xpg_basename F -GLIBC_2.0 __xstat F -GLIBC_2.0 _bus_base F -GLIBC_2.0 _bus_base_sparse F -GLIBC_2.0 _environ D 0x8 -GLIBC_2.0 _exit F -GLIBC_2.0 _hae_shift F -GLIBC_2.0 _inb F -GLIBC_2.0 _inl F -GLIBC_2.0 _inw F -GLIBC_2.0 _libc_intl_domainname D 0x5 -GLIBC_2.0 _longjmp F -GLIBC_2.0 _mcleanup F -GLIBC_2.0 _mcount F -GLIBC_2.0 _nl_default_dirname D 0x12 -GLIBC_2.0 _nl_domain_bindings D 0x8 -GLIBC_2.0 _nl_msg_cat_cntr D 0x4 -GLIBC_2.0 _null_auth D 0x18 -GLIBC_2.0 _obstack D 0x8 -GLIBC_2.0 _obstack_allocated_p F -GLIBC_2.0 _obstack_begin F -GLIBC_2.0 _obstack_begin_1 F -GLIBC_2.0 _obstack_free F -GLIBC_2.0 _obstack_memory_used F -GLIBC_2.0 _obstack_newchunk F -GLIBC_2.0 _outb F -GLIBC_2.0 _outl F -GLIBC_2.0 _outw F -GLIBC_2.0 _res D 0x238 -GLIBC_2.0 _rpc_dtablesize F -GLIBC_2.0 _seterr_reply F -GLIBC_2.0 _setjmp F -GLIBC_2.0 _sys_errlist D 0x418 -GLIBC_2.0 _sys_nerr D 0x4 -GLIBC_2.0 _sys_siglist D 0x100 -GLIBC_2.0 _tolower F -GLIBC_2.0 _toupper F -GLIBC_2.0 a64l F -GLIBC_2.0 abort F -GLIBC_2.0 abs F -GLIBC_2.0 accept F -GLIBC_2.0 access F -GLIBC_2.0 acct F -GLIBC_2.0 addmntent F -GLIBC_2.0 adjtime F -GLIBC_2.0 adjtimex F -GLIBC_2.0 advance F -GLIBC_2.0 alarm F -GLIBC_2.0 alphasort F -GLIBC_2.0 argz_add F -GLIBC_2.0 argz_add_sep F -GLIBC_2.0 argz_append F -GLIBC_2.0 argz_count F -GLIBC_2.0 argz_create F -GLIBC_2.0 argz_create_sep F -GLIBC_2.0 argz_delete F -GLIBC_2.0 argz_extract F -GLIBC_2.0 argz_insert F -GLIBC_2.0 argz_next F -GLIBC_2.0 argz_replace F -GLIBC_2.0 argz_stringify F -GLIBC_2.0 asctime F -GLIBC_2.0 asctime_r F -GLIBC_2.0 asprintf F -GLIBC_2.0 atexit F -GLIBC_2.0 atof F -GLIBC_2.0 atoi F -GLIBC_2.0 atol F -GLIBC_2.0 atoll F -GLIBC_2.0 authnone_create F -GLIBC_2.0 authunix_create F -GLIBC_2.0 authunix_create_default F -GLIBC_2.0 basename F -GLIBC_2.0 bcmp F -GLIBC_2.0 bcopy F -GLIBC_2.0 bdflush F -GLIBC_2.0 bind F -GLIBC_2.0 bindresvport F -GLIBC_2.0 bindtextdomain F -GLIBC_2.0 brk F -GLIBC_2.0 bsd_signal F -GLIBC_2.0 bsearch F -GLIBC_2.0 btowc F -GLIBC_2.0 bus_base F -GLIBC_2.0 bus_base_sparse F -GLIBC_2.0 bzero F -GLIBC_2.0 calloc F -GLIBC_2.0 callrpc F -GLIBC_2.0 canonicalize_file_name F -GLIBC_2.0 catclose F -GLIBC_2.0 catgets F -GLIBC_2.0 catopen F -GLIBC_2.0 cfgetispeed F -GLIBC_2.0 cfgetospeed F -GLIBC_2.0 cfmakeraw F -GLIBC_2.0 cfree F -GLIBC_2.0 cfsetispeed F -GLIBC_2.0 cfsetospeed F -GLIBC_2.0 cfsetspeed F -GLIBC_2.0 chdir F -GLIBC_2.0 chflags F -GLIBC_2.0 chmod F -GLIBC_2.0 chown F -GLIBC_2.0 chroot F -GLIBC_2.0 clearenv F -GLIBC_2.0 clearerr F -GLIBC_2.0 clearerr_unlocked F -GLIBC_2.0 clnt_broadcast F -GLIBC_2.0 clnt_create F -GLIBC_2.0 clnt_pcreateerror F -GLIBC_2.0 clnt_perrno F -GLIBC_2.0 clnt_perror F -GLIBC_2.0 clnt_spcreateerror F -GLIBC_2.0 clnt_sperrno F -GLIBC_2.0 clnt_sperror F -GLIBC_2.0 clntraw_create F -GLIBC_2.0 clnttcp_create F -GLIBC_2.0 clntudp_bufcreate F -GLIBC_2.0 clntudp_create F -GLIBC_2.0 clock F -GLIBC_2.0 clone F -GLIBC_2.0 close F -GLIBC_2.0 closedir F -GLIBC_2.0 closelog F -GLIBC_2.0 confstr F -GLIBC_2.0 connect F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 creat F -GLIBC_2.0 create_module F -GLIBC_2.0 ctermid F -GLIBC_2.0 ctime F -GLIBC_2.0 ctime_r F -GLIBC_2.0 cuserid F -GLIBC_2.0 daemon F -GLIBC_2.0 daylight D 0x4 -GLIBC_2.0 dcgettext F -GLIBC_2.0 delete_module F -GLIBC_2.0 dgettext F -GLIBC_2.0 difftime F -GLIBC_2.0 dirfd F -GLIBC_2.0 dirname F -GLIBC_2.0 div F -GLIBC_2.0 dprintf F -GLIBC_2.0 drand48 F -GLIBC_2.0 drand48_r F -GLIBC_2.0 dup F -GLIBC_2.0 dup2 F -GLIBC_2.0 dysize F -GLIBC_2.0 ecvt F -GLIBC_2.0 ecvt_r F -GLIBC_2.0 endaliasent F -GLIBC_2.0 endfsent F -GLIBC_2.0 endgrent F -GLIBC_2.0 endhostent F -GLIBC_2.0 endmntent F -GLIBC_2.0 endnetent F -GLIBC_2.0 endnetgrent F -GLIBC_2.0 endprotoent F -GLIBC_2.0 endpwent F -GLIBC_2.0 endrpcent F -GLIBC_2.0 endservent F -GLIBC_2.0 endspent F -GLIBC_2.0 endttyent F -GLIBC_2.0 endusershell F -GLIBC_2.0 endutent F -GLIBC_2.0 environ D 0x8 -GLIBC_2.0 envz_add F -GLIBC_2.0 envz_entry F -GLIBC_2.0 envz_get F -GLIBC_2.0 envz_merge F -GLIBC_2.0 envz_remove F -GLIBC_2.0 envz_strip F -GLIBC_2.0 erand48 F -GLIBC_2.0 erand48_r F -GLIBC_2.0 err F -GLIBC_2.0 error F -GLIBC_2.0 error_at_line F -GLIBC_2.0 error_message_count D 0x4 -GLIBC_2.0 error_one_per_line D 0x4 -GLIBC_2.0 error_print_progname D 0x8 -GLIBC_2.0 errx F -GLIBC_2.0 ether_aton F -GLIBC_2.0 ether_aton_r F -GLIBC_2.0 ether_hostton F -GLIBC_2.0 ether_line F -GLIBC_2.0 ether_ntoa F -GLIBC_2.0 ether_ntoa_r F -GLIBC_2.0 ether_ntohost F -GLIBC_2.0 euidaccess F -GLIBC_2.0 execl F -GLIBC_2.0 execle F -GLIBC_2.0 execlp F -GLIBC_2.0 execv F -GLIBC_2.0 execve F -GLIBC_2.0 execvp F -GLIBC_2.0 exit F -GLIBC_2.0 fchdir F -GLIBC_2.0 fchflags F -GLIBC_2.0 fchmod F -GLIBC_2.0 fchown F -GLIBC_2.0 fclose F -GLIBC_2.0 fcloseall F -GLIBC_2.0 fcntl F -GLIBC_2.0 fcvt F -GLIBC_2.0 fcvt_r F -GLIBC_2.0 fdatasync F -GLIBC_2.0 fdopen F -GLIBC_2.0 feof F -GLIBC_2.0 feof_unlocked F -GLIBC_2.0 ferror F -GLIBC_2.0 ferror_unlocked F -GLIBC_2.0 fexecve F -GLIBC_2.0 fflush F -GLIBC_2.0 fflush_unlocked F -GLIBC_2.0 ffs F -GLIBC_2.0 fgetc F -GLIBC_2.0 fgetgrent F -GLIBC_2.0 fgetgrent_r F -GLIBC_2.0 fgetpos F -GLIBC_2.0 fgetpwent F -GLIBC_2.0 fgetpwent_r F -GLIBC_2.0 fgets F -GLIBC_2.0 fgetspent F -GLIBC_2.0 fgetspent_r F -GLIBC_2.0 fileno F -GLIBC_2.0 fileno_unlocked F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 flock F -GLIBC_2.0 flockfile F -GLIBC_2.0 fnmatch F -GLIBC_2.0 fopen F -GLIBC_2.0 fopencookie F -GLIBC_2.0 fork F -GLIBC_2.0 fpathconf F -GLIBC_2.0 fprintf F -GLIBC_2.0 fputc F -GLIBC_2.0 fputc_unlocked F -GLIBC_2.0 fputs F -GLIBC_2.0 fread F -GLIBC_2.0 free F -GLIBC_2.0 freeaddrinfo F -GLIBC_2.0 freopen F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 fscanf F -GLIBC_2.0 fseek F -GLIBC_2.0 fsetpos F -GLIBC_2.0 fstatfs F -GLIBC_2.0 fsync F -GLIBC_2.0 ftell F -GLIBC_2.0 ftime F -GLIBC_2.0 ftok F -GLIBC_2.0 ftruncate F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 fts_children F -GLIBC_2.0 fts_close F -GLIBC_2.0 fts_open F -GLIBC_2.0 fts_read F -GLIBC_2.0 fts_set F -GLIBC_2.0 ftw F -GLIBC_2.0 funlockfile F -GLIBC_2.0 fwrite F -GLIBC_2.0 gcvt F -GLIBC_2.0 get_avphys_pages F -GLIBC_2.0 get_current_dir_name F -GLIBC_2.0 get_kernel_syms F -GLIBC_2.0 get_myaddress F -GLIBC_2.0 get_nprocs F -GLIBC_2.0 get_nprocs_conf F -GLIBC_2.0 get_phys_pages F -GLIBC_2.0 getaddrinfo F -GLIBC_2.0 getaliasbyname F -GLIBC_2.0 getaliasbyname_r F -GLIBC_2.0 getaliasent F -GLIBC_2.0 getaliasent_r F -GLIBC_2.0 getc F -GLIBC_2.0 getc_unlocked F -GLIBC_2.0 getchar F -GLIBC_2.0 getchar_unlocked F -GLIBC_2.0 getcwd F -GLIBC_2.0 getdelim F -GLIBC_2.0 getdirentries F -GLIBC_2.0 getdomainname F -GLIBC_2.0 getdtablesize F -GLIBC_2.0 getegid F -GLIBC_2.0 getenv F -GLIBC_2.0 geteuid F -GLIBC_2.0 getfsent F -GLIBC_2.0 getfsfile F -GLIBC_2.0 getfsspec F -GLIBC_2.0 getgid F -GLIBC_2.0 getgrent F -GLIBC_2.0 getgrent_r F -GLIBC_2.0 getgrgid F -GLIBC_2.0 getgrgid_r F -GLIBC_2.0 getgrnam F -GLIBC_2.0 getgrnam_r F -GLIBC_2.0 getgroups F -GLIBC_2.0 gethostbyaddr F -GLIBC_2.0 gethostbyaddr_r F -GLIBC_2.0 gethostbyname F -GLIBC_2.0 gethostbyname2 F -GLIBC_2.0 gethostbyname2_r F -GLIBC_2.0 gethostbyname_r F -GLIBC_2.0 gethostent F -GLIBC_2.0 gethostent_r F -GLIBC_2.0 gethostid F -GLIBC_2.0 gethostname F -GLIBC_2.0 getitimer F -GLIBC_2.0 getline F -GLIBC_2.0 getlogin F -GLIBC_2.0 getlogin_r F -GLIBC_2.0 getmntent F -GLIBC_2.0 getmntent_r F -GLIBC_2.0 getnetbyaddr F -GLIBC_2.0 getnetbyaddr_r F -GLIBC_2.0 getnetbyname F -GLIBC_2.0 getnetbyname_r F -GLIBC_2.0 getnetent F -GLIBC_2.0 getnetent_r F -GLIBC_2.0 getnetgrent F -GLIBC_2.0 getnetgrent_r F -GLIBC_2.0 getopt F -GLIBC_2.0 getopt_long F -GLIBC_2.0 getopt_long_only F -GLIBC_2.0 getpagesize F -GLIBC_2.0 getpass F -GLIBC_2.0 getpeername F -GLIBC_2.0 getpgid F -GLIBC_2.0 getpgrp F -GLIBC_2.0 getpid F -GLIBC_2.0 getppid F -GLIBC_2.0 getpriority F -GLIBC_2.0 getprotobyname F -GLIBC_2.0 getprotobyname_r F -GLIBC_2.0 getprotobynumber F -GLIBC_2.0 getprotobynumber_r F -GLIBC_2.0 getprotoent F -GLIBC_2.0 getprotoent_r F -GLIBC_2.0 getpublickey F -GLIBC_2.0 getpw F -GLIBC_2.0 getpwent F -GLIBC_2.0 getpwent_r F -GLIBC_2.0 getpwnam F -GLIBC_2.0 getpwnam_r F -GLIBC_2.0 getpwuid F -GLIBC_2.0 getpwuid_r F -GLIBC_2.0 getresgid F -GLIBC_2.0 getresuid F -GLIBC_2.0 getrlimit F -GLIBC_2.0 getrpcbyname F -GLIBC_2.0 getrpcbyname_r F -GLIBC_2.0 getrpcbynumber F -GLIBC_2.0 getrpcbynumber_r F -GLIBC_2.0 getrpcent F -GLIBC_2.0 getrpcent_r F -GLIBC_2.0 getrpcport F -GLIBC_2.0 getrusage F -GLIBC_2.0 gets F -GLIBC_2.0 getsecretkey F -GLIBC_2.0 getservbyname F -GLIBC_2.0 getservbyname_r F -GLIBC_2.0 getservbyport F -GLIBC_2.0 getservbyport_r F -GLIBC_2.0 getservent F -GLIBC_2.0 getservent_r F -GLIBC_2.0 getsid F -GLIBC_2.0 getsockname F -GLIBC_2.0 getsockopt F -GLIBC_2.0 getspent F -GLIBC_2.0 getspent_r F -GLIBC_2.0 getspnam F -GLIBC_2.0 getspnam_r F -GLIBC_2.0 getsubopt F -GLIBC_2.0 gettext F -GLIBC_2.0 gettimeofday F -GLIBC_2.0 getttyent F -GLIBC_2.0 getttynam F -GLIBC_2.0 getuid F -GLIBC_2.0 getusershell F -GLIBC_2.0 getutent F -GLIBC_2.0 getutent_r F -GLIBC_2.0 getutid F -GLIBC_2.0 getutid_r F -GLIBC_2.0 getutline F -GLIBC_2.0 getutline_r F -GLIBC_2.0 getw F -GLIBC_2.0 getwd F -GLIBC_2.0 glob F -GLIBC_2.0 glob_pattern_p F -GLIBC_2.0 globfree F -GLIBC_2.0 gmtime F -GLIBC_2.0 gmtime_r F -GLIBC_2.0 group_member F -GLIBC_2.0 gsignal F -GLIBC_2.0 gtty F -GLIBC_2.0 h_errlist D 0x28 -GLIBC_2.0 h_nerr D 0x4 -GLIBC_2.0 hae_shift F -GLIBC_2.0 hasmntopt F -GLIBC_2.0 hcreate F -GLIBC_2.0 hcreate_r F -GLIBC_2.0 hdestroy F -GLIBC_2.0 hdestroy_r F -GLIBC_2.0 herror F -GLIBC_2.0 hsearch F -GLIBC_2.0 hsearch_r F -GLIBC_2.0 hstrerror F -GLIBC_2.0 htonl F -GLIBC_2.0 htons F -GLIBC_2.0 inb F -GLIBC_2.0 index F -GLIBC_2.0 inet_addr F -GLIBC_2.0 inet_aton F -GLIBC_2.0 inet_lnaof F -GLIBC_2.0 inet_makeaddr F -GLIBC_2.0 inet_netof F -GLIBC_2.0 inet_network F -GLIBC_2.0 inet_nsap_addr F -GLIBC_2.0 inet_nsap_ntoa F -GLIBC_2.0 inet_ntoa F -GLIBC_2.0 inet_ntop F -GLIBC_2.0 inet_pton F -GLIBC_2.0 init_module F -GLIBC_2.0 initgroups F -GLIBC_2.0 initstate F -GLIBC_2.0 initstate_r F -GLIBC_2.0 inl F -GLIBC_2.0 innetgr F -GLIBC_2.0 insque F -GLIBC_2.0 inw F -GLIBC_2.0 ioctl F -GLIBC_2.0 ioperm F -GLIBC_2.0 iopl F -GLIBC_2.0 iruserok F -GLIBC_2.0 isalnum F -GLIBC_2.0 isalpha F -GLIBC_2.0 isascii F -GLIBC_2.0 isatty F -GLIBC_2.0 isblank F -GLIBC_2.0 iscntrl F -GLIBC_2.0 isdigit F -GLIBC_2.0 isfdtype F -GLIBC_2.0 isgraph F -GLIBC_2.0 isinf F -GLIBC_2.0 isinff F -GLIBC_2.0 isinfl F -GLIBC_2.0 islower F -GLIBC_2.0 isnan F -GLIBC_2.0 isnanf F -GLIBC_2.0 isnanl F -GLIBC_2.0 isprint F -GLIBC_2.0 ispunct F -GLIBC_2.0 isspace F -GLIBC_2.0 isupper F -GLIBC_2.0 iswalnum F -GLIBC_2.0 iswalpha F -GLIBC_2.0 iswcntrl F -GLIBC_2.0 iswctype F -GLIBC_2.0 iswdigit F -GLIBC_2.0 iswgraph F -GLIBC_2.0 iswlower F -GLIBC_2.0 iswprint F -GLIBC_2.0 iswpunct F -GLIBC_2.0 iswspace F -GLIBC_2.0 iswupper F -GLIBC_2.0 iswxdigit F -GLIBC_2.0 isxdigit F -GLIBC_2.0 jrand48 F -GLIBC_2.0 jrand48_r F -GLIBC_2.0 kill F -GLIBC_2.0 killpg F -GLIBC_2.0 klogctl F -GLIBC_2.0 l64a F -GLIBC_2.0 labs F -GLIBC_2.0 lchown F -GLIBC_2.0 lckpwdf F -GLIBC_2.0 lcong48 F -GLIBC_2.0 lcong48_r F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 ldiv F -GLIBC_2.0 lfind F -GLIBC_2.0 link F -GLIBC_2.0 listen F -GLIBC_2.0 llabs F -GLIBC_2.0 lldiv F -GLIBC_2.0 llseek F -GLIBC_2.0 loc1 D 0x8 -GLIBC_2.0 loc2 D 0x8 -GLIBC_2.0 localeconv F -GLIBC_2.0 localtime F -GLIBC_2.0 localtime_r F -GLIBC_2.0 lockf F -GLIBC_2.0 locs D 0x8 -GLIBC_2.0 longjmp F -GLIBC_2.0 lrand48 F -GLIBC_2.0 lrand48_r F -GLIBC_2.0 lsearch F -GLIBC_2.0 lseek F -GLIBC_2.0 madvise F -GLIBC_2.0 mallinfo F -GLIBC_2.0 malloc F -GLIBC_2.0 malloc_get_state F -GLIBC_2.0 malloc_set_state F -GLIBC_2.0 malloc_stats F -GLIBC_2.0 malloc_trim F -GLIBC_2.0 malloc_usable_size F -GLIBC_2.0 mallopt F -GLIBC_2.0 mallwatch D 0x8 -GLIBC_2.0 mblen F -GLIBC_2.0 mbrlen F -GLIBC_2.0 mbrtowc F -GLIBC_2.0 mbsinit F -GLIBC_2.0 mbsnrtowcs F -GLIBC_2.0 mbsrtowcs F -GLIBC_2.0 mbstowcs F -GLIBC_2.0 mbtowc F -GLIBC_2.0 mcheck F -GLIBC_2.0 mcount F -GLIBC_2.0 memalign F -GLIBC_2.0 memccpy F -GLIBC_2.0 memchr F -GLIBC_2.0 memcmp F -GLIBC_2.0 memcpy F -GLIBC_2.0 memfrob F -GLIBC_2.0 memmem F -GLIBC_2.0 memmove F -GLIBC_2.0 memset F -GLIBC_2.0 mkdir F -GLIBC_2.0 mkfifo F -GLIBC_2.0 mkstemp F -GLIBC_2.0 mktemp F -GLIBC_2.0 mktime F -GLIBC_2.0 mlock F -GLIBC_2.0 mlockall F -GLIBC_2.0 mmap F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 monstartup F -GLIBC_2.0 mount F -GLIBC_2.0 mprobe F -GLIBC_2.0 mprotect F -GLIBC_2.0 mrand48 F -GLIBC_2.0 mrand48_r F -GLIBC_2.0 mremap F -GLIBC_2.0 msgctl F -GLIBC_2.0 msgget F -GLIBC_2.0 msgrcv F -GLIBC_2.0 msgsnd F -GLIBC_2.0 msync F -GLIBC_2.0 mtrace F -GLIBC_2.0 munlock F -GLIBC_2.0 munlockall F -GLIBC_2.0 munmap F -GLIBC_2.0 muntrace F -GLIBC_2.0 nanosleep F -GLIBC_2.0 nfsservctl F -GLIBC_2.0 nice F -GLIBC_2.0 nl_langinfo F -GLIBC_2.0 nrand48 F -GLIBC_2.0 nrand48_r F -GLIBC_2.0 ntohl F -GLIBC_2.0 ntohs F -GLIBC_2.0 obstack_alloc_failed_handler D 0x8 -GLIBC_2.0 obstack_exit_failure D 0x4 -GLIBC_2.0 obstack_free F -GLIBC_2.0 obstack_printf F -GLIBC_2.0 obstack_vprintf F -GLIBC_2.0 on_exit F -GLIBC_2.0 open F -GLIBC_2.0 open_memstream F -GLIBC_2.0 opendir F -GLIBC_2.0 openlog F -GLIBC_2.0 optarg D 0x8 -GLIBC_2.0 opterr D 0x4 -GLIBC_2.0 optind D 0x4 -GLIBC_2.0 optopt D 0x4 -GLIBC_2.0 outb F -GLIBC_2.0 outl F -GLIBC_2.0 outw F -GLIBC_2.0 parse_printf_format F -GLIBC_2.0 pathconf F -GLIBC_2.0 pause F -GLIBC_2.0 pciconfig_read F -GLIBC_2.0 pciconfig_write F -GLIBC_2.0 pclose F -GLIBC_2.0 perror F -GLIBC_2.0 personality F -GLIBC_2.0 pipe F -GLIBC_2.0 pmap_getmaps F -GLIBC_2.0 pmap_getport F -GLIBC_2.0 pmap_rmtcall F -GLIBC_2.0 pmap_set F -GLIBC_2.0 pmap_unset F -GLIBC_2.0 poll F -GLIBC_2.0 popen F -GLIBC_2.0 prctl F -GLIBC_2.0 printf F -GLIBC_2.0 profil F -GLIBC_2.0 program_invocation_name D 0x8 -GLIBC_2.0 program_invocation_short_name D 0x8 -GLIBC_2.0 pselect F -GLIBC_2.0 psignal F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 ptrace F -GLIBC_2.0 putc F -GLIBC_2.0 putc_unlocked F -GLIBC_2.0 putchar F -GLIBC_2.0 putchar_unlocked F -GLIBC_2.0 putenv F -GLIBC_2.0 putpwent F -GLIBC_2.0 puts F -GLIBC_2.0 putspent F -GLIBC_2.0 pututline F -GLIBC_2.0 putw F -GLIBC_2.0 pvalloc F -GLIBC_2.0 qecvt F -GLIBC_2.0 qecvt_r F -GLIBC_2.0 qfcvt F -GLIBC_2.0 qfcvt_r F -GLIBC_2.0 qgcvt F -GLIBC_2.0 qsort F -GLIBC_2.0 query_module F -GLIBC_2.0 quotactl F -GLIBC_2.0 raise F -GLIBC_2.0 rand F -GLIBC_2.0 rand_r F -GLIBC_2.0 random F -GLIBC_2.0 random_r F -GLIBC_2.0 rcmd F -GLIBC_2.0 re_comp F -GLIBC_2.0 re_compile_fastmap F -GLIBC_2.0 re_compile_pattern F -GLIBC_2.0 re_exec F -GLIBC_2.0 re_match F -GLIBC_2.0 re_match_2 F -GLIBC_2.0 re_max_failures D 0x4 -GLIBC_2.0 re_search F -GLIBC_2.0 re_search_2 F -GLIBC_2.0 re_set_registers F -GLIBC_2.0 re_set_syntax F -GLIBC_2.0 re_syntax_options D 0x8 -GLIBC_2.0 read F -GLIBC_2.0 readdir F -GLIBC_2.0 readdir_r F -GLIBC_2.0 readlink F -GLIBC_2.0 readv F -GLIBC_2.0 realloc F -GLIBC_2.0 realpath F -GLIBC_2.0 reboot F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 regcomp F -GLIBC_2.0 regerror F -GLIBC_2.0 regexec F -GLIBC_2.0 regfree F -GLIBC_2.0 register_printf_function F -GLIBC_2.0 registerrpc F -GLIBC_2.0 remove F -GLIBC_2.0 remque F -GLIBC_2.0 rename F -GLIBC_2.0 res_init F -GLIBC_2.0 revoke F -GLIBC_2.0 rewind F -GLIBC_2.0 rewinddir F -GLIBC_2.0 rexec F -GLIBC_2.0 rexecoptions D 0x4 -GLIBC_2.0 rindex F -GLIBC_2.0 rmdir F -GLIBC_2.0 rpc_createerr D 0x20 -GLIBC_2.0 rpmatch F -GLIBC_2.0 rresvport F -GLIBC_2.0 ruserok F -GLIBC_2.0 ruserpass F -GLIBC_2.0 sbrk F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 scandir F -GLIBC_2.0 scanf F -GLIBC_2.0 sched_get_priority_max F -GLIBC_2.0 sched_get_priority_min F -GLIBC_2.0 sched_getparam F -GLIBC_2.0 sched_getscheduler F -GLIBC_2.0 sched_rr_get_interval F -GLIBC_2.0 sched_setparam F -GLIBC_2.0 sched_setscheduler F -GLIBC_2.0 sched_yield F -GLIBC_2.0 seed48 F -GLIBC_2.0 seed48_r F -GLIBC_2.0 seekdir F -GLIBC_2.0 select F -GLIBC_2.0 semctl F -GLIBC_2.0 semget F -GLIBC_2.0 semop F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 setaliasent F -GLIBC_2.0 setbuf F -GLIBC_2.0 setbuffer F -GLIBC_2.0 setcontext F -GLIBC_2.0 setdomainname F -GLIBC_2.0 setegid F -GLIBC_2.0 setenv F -GLIBC_2.0 seteuid F -GLIBC_2.0 setfsent F -GLIBC_2.0 setfsgid F -GLIBC_2.0 setfsuid F -GLIBC_2.0 setgid F -GLIBC_2.0 setgrent F -GLIBC_2.0 setgroups F -GLIBC_2.0 sethae F -GLIBC_2.0 sethostent F -GLIBC_2.0 sethostid F -GLIBC_2.0 sethostname F -GLIBC_2.0 setitimer F -GLIBC_2.0 setjmp F -GLIBC_2.0 setlinebuf F -GLIBC_2.0 setlocale F -GLIBC_2.0 setlogin F -GLIBC_2.0 setlogmask F -GLIBC_2.0 setmntent F -GLIBC_2.0 setnetent F -GLIBC_2.0 setnetgrent F -GLIBC_2.0 setpgid F -GLIBC_2.0 setpgrp F -GLIBC_2.0 setpriority F -GLIBC_2.0 setprotoent F -GLIBC_2.0 setpwent F -GLIBC_2.0 setregid F -GLIBC_2.0 setresgid F -GLIBC_2.0 setresuid F -GLIBC_2.0 setreuid F -GLIBC_2.0 setrlimit F -GLIBC_2.0 setrpcent F -GLIBC_2.0 setservent F -GLIBC_2.0 setsid F -GLIBC_2.0 setsockopt F -GLIBC_2.0 setspent F -GLIBC_2.0 setstate F -GLIBC_2.0 setstate_r F -GLIBC_2.0 settimeofday F -GLIBC_2.0 setttyent F -GLIBC_2.0 setuid F -GLIBC_2.0 setusershell F -GLIBC_2.0 setutent F -GLIBC_2.0 setvbuf F -GLIBC_2.0 sgetspent F -GLIBC_2.0 sgetspent_r F -GLIBC_2.0 shmat F -GLIBC_2.0 shmctl F -GLIBC_2.0 shmdt F -GLIBC_2.0 shmget F -GLIBC_2.0 shutdown F -GLIBC_2.0 sigaction F -GLIBC_2.0 sigaddset F -GLIBC_2.0 sigaltstack F -GLIBC_2.0 sigandset F -GLIBC_2.0 sigblock F -GLIBC_2.0 sigdelset F -GLIBC_2.0 sigemptyset F -GLIBC_2.0 sigfillset F -GLIBC_2.0 siggetmask F -GLIBC_2.0 siginterrupt F -GLIBC_2.0 sigisemptyset F -GLIBC_2.0 sigismember F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 signal F -GLIBC_2.0 sigorset F -GLIBC_2.0 sigpause F -GLIBC_2.0 sigpending F -GLIBC_2.0 sigprocmask F -GLIBC_2.0 sigreturn F -GLIBC_2.0 sigsetmask F -GLIBC_2.0 sigstack F -GLIBC_2.0 sigsuspend F -GLIBC_2.0 sigvec F -GLIBC_2.0 sigwait F -GLIBC_2.0 sleep F -GLIBC_2.0 snprintf F -GLIBC_2.0 socket F -GLIBC_2.0 socketpair F -GLIBC_2.0 sprintf F -GLIBC_2.0 srand F -GLIBC_2.0 srand48 F -GLIBC_2.0 srand48_r F -GLIBC_2.0 srandom F -GLIBC_2.0 srandom_r F -GLIBC_2.0 sscanf F -GLIBC_2.0 ssignal F -GLIBC_2.0 sstk F -GLIBC_2.0 statfs F -GLIBC_2.0 stderr D 0x8 -GLIBC_2.0 stdin D 0x8 -GLIBC_2.0 stdout D 0x8 -GLIBC_2.0 step F -GLIBC_2.0 stime F -GLIBC_2.0 stpcpy F -GLIBC_2.0 stpncpy F -GLIBC_2.0 strcasecmp F -GLIBC_2.0 strcat F -GLIBC_2.0 strchr F -GLIBC_2.0 strcmp F -GLIBC_2.0 strcoll F -GLIBC_2.0 strcpy F -GLIBC_2.0 strcspn F -GLIBC_2.0 strdup F -GLIBC_2.0 strerror F -GLIBC_2.0 strerror_r F -GLIBC_2.0 strfmon F -GLIBC_2.0 strfry F -GLIBC_2.0 strftime F -GLIBC_2.0 strlen F -GLIBC_2.0 strncasecmp F -GLIBC_2.0 strncat F -GLIBC_2.0 strncmp F -GLIBC_2.0 strncpy F -GLIBC_2.0 strndup F -GLIBC_2.0 strnlen F -GLIBC_2.0 strpbrk F -GLIBC_2.0 strptime F -GLIBC_2.0 strrchr F -GLIBC_2.0 strsep F -GLIBC_2.0 strsignal F -GLIBC_2.0 strspn F -GLIBC_2.0 strstr F -GLIBC_2.0 strtod F -GLIBC_2.0 strtof F -GLIBC_2.0 strtok F -GLIBC_2.0 strtok_r F -GLIBC_2.0 strtol F -GLIBC_2.0 strtold F -GLIBC_2.0 strtoll F -GLIBC_2.0 strtoq F -GLIBC_2.0 strtoul F -GLIBC_2.0 strtoull F -GLIBC_2.0 strtouq F -GLIBC_2.0 strxfrm F -GLIBC_2.0 stty F -GLIBC_2.0 svc_exit F -GLIBC_2.0 svc_fdset D 0x80 -GLIBC_2.0 svc_getreq F -GLIBC_2.0 svc_getreqset F -GLIBC_2.0 svc_register F -GLIBC_2.0 svc_run F -GLIBC_2.0 svc_sendreply F -GLIBC_2.0 svc_unregister F -GLIBC_2.0 svcauthdes_stats D 0x18 -GLIBC_2.0 svcerr_auth F -GLIBC_2.0 svcerr_decode F -GLIBC_2.0 svcerr_noproc F -GLIBC_2.0 svcerr_noprog F -GLIBC_2.0 svcerr_progvers F -GLIBC_2.0 svcerr_systemerr F -GLIBC_2.0 svcerr_weakauth F -GLIBC_2.0 svcfd_create F -GLIBC_2.0 svcraw_create F -GLIBC_2.0 svctcp_create F -GLIBC_2.0 svcudp_bufcreate F -GLIBC_2.0 svcudp_create F -GLIBC_2.0 svcudp_enablecache F -GLIBC_2.0 swab F -GLIBC_2.0 swapoff F -GLIBC_2.0 swapon F -GLIBC_2.0 symlink F -GLIBC_2.0 sync F -GLIBC_2.0 sys_errlist D 0x418 -GLIBC_2.0 sys_nerr D 0x4 -GLIBC_2.0 sys_sigabbrev D 0x100 -GLIBC_2.0 sys_siglist D 0x100 -GLIBC_2.0 syscall F -GLIBC_2.0 sysconf F -GLIBC_2.0 sysctl F -GLIBC_2.0 sysinfo F -GLIBC_2.0 syslog F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 tcflow F -GLIBC_2.0 tcflush F -GLIBC_2.0 tcgetattr F -GLIBC_2.0 tcgetpgrp F -GLIBC_2.0 tcsendbreak F -GLIBC_2.0 tcsetattr F -GLIBC_2.0 tcsetpgrp F -GLIBC_2.0 tdelete F -GLIBC_2.0 telldir F -GLIBC_2.0 tempnam F -GLIBC_2.0 textdomain F -GLIBC_2.0 tfind F -GLIBC_2.0 time F -GLIBC_2.0 timegm F -GLIBC_2.0 timelocal F -GLIBC_2.0 times F -GLIBC_2.0 timezone D 0x8 -GLIBC_2.0 tmpfile F -GLIBC_2.0 tmpnam F -GLIBC_2.0 tmpnam_r F -GLIBC_2.0 toascii F -GLIBC_2.0 tolower F -GLIBC_2.0 toupper F -GLIBC_2.0 towctrans F -GLIBC_2.0 towlower F -GLIBC_2.0 towupper F -GLIBC_2.0 tr_break F -GLIBC_2.0 truncate F -GLIBC_2.0 tsearch F -GLIBC_2.0 ttyname F -GLIBC_2.0 ttyname_r F -GLIBC_2.0 ttyslot F -GLIBC_2.0 twalk F -GLIBC_2.0 tzname D 0x10 -GLIBC_2.0 tzset F -GLIBC_2.0 ualarm F -GLIBC_2.0 ulckpwdf F -GLIBC_2.0 ulimit F -GLIBC_2.0 umask F -GLIBC_2.0 umount F -GLIBC_2.0 uname F -GLIBC_2.0 ungetc F -GLIBC_2.0 unlink F -GLIBC_2.0 unsetenv F -GLIBC_2.0 updwtmp F -GLIBC_2.0 uselib F -GLIBC_2.0 usleep F -GLIBC_2.0 ustat F -GLIBC_2.0 utime F -GLIBC_2.0 utimes F -GLIBC_2.0 utmpname F -GLIBC_2.0 valloc F -GLIBC_2.0 vasprintf F -GLIBC_2.0 vdprintf F -GLIBC_2.0 verr F -GLIBC_2.0 verrx F -GLIBC_2.0 vfork F -GLIBC_2.0 vfprintf F -GLIBC_2.0 vfscanf F -GLIBC_2.0 vhangup F -GLIBC_2.0 vlimit F -GLIBC_2.0 vprintf F -GLIBC_2.0 vscanf F -GLIBC_2.0 vsnprintf F -GLIBC_2.0 vsprintf F -GLIBC_2.0 vsscanf F -GLIBC_2.0 vsyslog F -GLIBC_2.0 vtimes F -GLIBC_2.0 vwarn F -GLIBC_2.0 vwarnx F -GLIBC_2.0 wait F -GLIBC_2.0 wait3 F -GLIBC_2.0 wait4 F -GLIBC_2.0 waitpid F -GLIBC_2.0 warn F -GLIBC_2.0 warnx F -GLIBC_2.0 wcpcpy F -GLIBC_2.0 wcpncpy F -GLIBC_2.0 wcrtomb F -GLIBC_2.0 wcscat F -GLIBC_2.0 wcschr F -GLIBC_2.0 wcscmp F -GLIBC_2.0 wcscoll F -GLIBC_2.0 wcscpy F -GLIBC_2.0 wcscspn F -GLIBC_2.0 wcsdup F -GLIBC_2.0 wcslen F -GLIBC_2.0 wcsncat F -GLIBC_2.0 wcsncmp F -GLIBC_2.0 wcsncpy F -GLIBC_2.0 wcsnrtombs F -GLIBC_2.0 wcspbrk F -GLIBC_2.0 wcsrchr F -GLIBC_2.0 wcsrtombs F -GLIBC_2.0 wcsspn F -GLIBC_2.0 wcsstr F -GLIBC_2.0 wcstod F -GLIBC_2.0 wcstof F -GLIBC_2.0 wcstok F -GLIBC_2.0 wcstol F -GLIBC_2.0 wcstold F -GLIBC_2.0 wcstombs F -GLIBC_2.0 wcstoq F -GLIBC_2.0 wcstoul F -GLIBC_2.0 wcstouq F -GLIBC_2.0 wcswidth F -GLIBC_2.0 wcsxfrm F -GLIBC_2.0 wctob F -GLIBC_2.0 wctomb F -GLIBC_2.0 wctrans F -GLIBC_2.0 wctype F -GLIBC_2.0 wcwidth F -GLIBC_2.0 wmemchr F -GLIBC_2.0 wmemcmp F -GLIBC_2.0 wmemcpy F -GLIBC_2.0 wmemmove F -GLIBC_2.0 wmemset F -GLIBC_2.0 write F -GLIBC_2.0 writev F -GLIBC_2.0 xdr_accepted_reply F -GLIBC_2.0 xdr_array F -GLIBC_2.0 xdr_authunix_parms F -GLIBC_2.0 xdr_bool F -GLIBC_2.0 xdr_bytes F -GLIBC_2.0 xdr_callhdr F -GLIBC_2.0 xdr_callmsg F -GLIBC_2.0 xdr_char F -GLIBC_2.0 xdr_cryptkeyarg F -GLIBC_2.0 xdr_cryptkeyarg2 F -GLIBC_2.0 xdr_cryptkeyres F -GLIBC_2.0 xdr_des_block F -GLIBC_2.0 xdr_double F -GLIBC_2.0 xdr_enum F -GLIBC_2.0 xdr_float F -GLIBC_2.0 xdr_free F -GLIBC_2.0 xdr_int F -GLIBC_2.0 xdr_key_netstarg F -GLIBC_2.0 xdr_key_netstres F -GLIBC_2.0 xdr_keybuf F -GLIBC_2.0 xdr_keystatus F -GLIBC_2.0 xdr_long F -GLIBC_2.0 xdr_netobj F -GLIBC_2.0 xdr_opaque F -GLIBC_2.0 xdr_opaque_auth F -GLIBC_2.0 xdr_pmap F -GLIBC_2.0 xdr_pmaplist F -GLIBC_2.0 xdr_pointer F -GLIBC_2.0 xdr_reference F -GLIBC_2.0 xdr_rejected_reply F -GLIBC_2.0 xdr_replymsg F -GLIBC_2.0 xdr_rmtcall_args F -GLIBC_2.0 xdr_rmtcallres F -GLIBC_2.0 xdr_short F -GLIBC_2.0 xdr_string F -GLIBC_2.0 xdr_u_char F -GLIBC_2.0 xdr_u_int F -GLIBC_2.0 xdr_u_long F -GLIBC_2.0 xdr_u_short F -GLIBC_2.0 xdr_union F -GLIBC_2.0 xdr_vector F -GLIBC_2.0 xdr_void F -GLIBC_2.0 xdr_wrapstring F -GLIBC_2.0 xdrmem_create F -GLIBC_2.0 xdrrec_create F -GLIBC_2.0 xdrrec_endofrecord F -GLIBC_2.0 xdrrec_eof F -GLIBC_2.0 xdrrec_skiprecord F -GLIBC_2.0 xdrstdio_create F -GLIBC_2.0 xencrypt F -GLIBC_2.0 xprt_register F -GLIBC_2.0 xprt_unregister F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 _IO_2_1_stderr_ D 0xe0 -GLIBC_2.1 _IO_2_1_stdin_ D 0xe0 -GLIBC_2.1 _IO_2_1_stdout_ D 0xe0 -GLIBC_2.1 _IO_do_write F -GLIBC_2.1 _IO_fclose F -GLIBC_2.1 _IO_fdopen F -GLIBC_2.1 _IO_fgetpos64 F -GLIBC_2.1 _IO_file_attach F -GLIBC_2.1 _IO_file_close_it F -GLIBC_2.1 _IO_file_finish F -GLIBC_2.1 _IO_file_fopen F -GLIBC_2.1 _IO_file_init F -GLIBC_2.1 _IO_file_overflow F -GLIBC_2.1 _IO_file_seekoff F -GLIBC_2.1 _IO_file_setbuf F -GLIBC_2.1 _IO_file_sync F -GLIBC_2.1 _IO_file_underflow F -GLIBC_2.1 _IO_file_write F -GLIBC_2.1 _IO_file_xsputn F -GLIBC_2.1 _IO_fopen F -GLIBC_2.1 _IO_fsetpos64 F -GLIBC_2.1 _IO_getline_info F -GLIBC_2.1 _IO_popen F -GLIBC_2.1 _IO_proc_close F -GLIBC_2.1 _IO_proc_open F -GLIBC_2.1 __adjtimex F -GLIBC_2.1 __asprintf F -GLIBC_2.1 __backtrace F -GLIBC_2.1 __backtrace_symbols F -GLIBC_2.1 __backtrace_symbols_fd F -GLIBC_2.1 __duplocale F -GLIBC_2.1 __freelocale F -GLIBC_2.1 __fxstat64 F -GLIBC_2.1 __gettimeofday F -GLIBC_2.1 __isalnum_l F -GLIBC_2.1 __isalpha_l F -GLIBC_2.1 __isascii_l F -GLIBC_2.1 __isblank_l F -GLIBC_2.1 __iscntrl_l F -GLIBC_2.1 __isdigit_l F -GLIBC_2.1 __isgraph_l F -GLIBC_2.1 __islower_l F -GLIBC_2.1 __isprint_l F -GLIBC_2.1 __ispunct_l F -GLIBC_2.1 __isspace_l F -GLIBC_2.1 __isupper_l F -GLIBC_2.1 __iswalnum_l F -GLIBC_2.1 __iswalpha_l F -GLIBC_2.1 __iswblank_l F -GLIBC_2.1 __iswcntrl_l F -GLIBC_2.1 __iswctype_l F -GLIBC_2.1 __iswdigit_l F -GLIBC_2.1 __iswgraph_l F -GLIBC_2.1 __iswlower_l F -GLIBC_2.1 __iswprint_l F -GLIBC_2.1 __iswpunct_l F -GLIBC_2.1 __iswspace_l F -GLIBC_2.1 __iswupper_l F -GLIBC_2.1 __iswxdigit_l F -GLIBC_2.1 __isxdigit_l F -GLIBC_2.1 __key_decryptsession_pk_LOCAL D 0x8 -GLIBC_2.1 __key_encryptsession_pk_LOCAL D 0x8 -GLIBC_2.1 __key_gendes_LOCAL D 0x8 -GLIBC_2.1 __libc_allocate_rtsig F -GLIBC_2.1 __libc_current_sigrtmax F -GLIBC_2.1 __libc_current_sigrtmin F -GLIBC_2.1 __libc_freeres F -GLIBC_2.1 __libc_sa_len F -GLIBC_2.1 __lxstat64 F -GLIBC_2.1 __newlocale F -GLIBC_2.1 __poll F -GLIBC_2.1 __pread64 F -GLIBC_2.1 __pwrite64 F -GLIBC_2.1 __rawmemchr F -GLIBC_2.1 __select F -GLIBC_2.1 __signbit F -GLIBC_2.1 __signbitf F -GLIBC_2.1 __strcasecmp_l F -GLIBC_2.1 __strcasestr F -GLIBC_2.1 __strcoll_l F -GLIBC_2.1 __strfmon_l F -GLIBC_2.1 __strncasecmp_l F -GLIBC_2.1 __strtod_l F -GLIBC_2.1 __strtof_l F -GLIBC_2.1 __strtol_l F -GLIBC_2.1 __strtold_l F -GLIBC_2.1 __strtoll_l F -GLIBC_2.1 __strtoul_l F -GLIBC_2.1 __strtoull_l F -GLIBC_2.1 __strxfrm_l F -GLIBC_2.1 __toascii_l F -GLIBC_2.1 __tolower_l F -GLIBC_2.1 __toupper_l F -GLIBC_2.1 __towctrans F -GLIBC_2.1 __towctrans_l F -GLIBC_2.1 __towlower_l F -GLIBC_2.1 __towupper_l F -GLIBC_2.1 __wcscasecmp_l F -GLIBC_2.1 __wcscoll_l F -GLIBC_2.1 __wcsncasecmp_l F -GLIBC_2.1 __wcstod_l F -GLIBC_2.1 __wcstof_l F -GLIBC_2.1 __wcstol_l F -GLIBC_2.1 __wcstold_l F -GLIBC_2.1 __wcstoll_l F -GLIBC_2.1 __wcstoul_l F -GLIBC_2.1 __wcstoull_l F -GLIBC_2.1 __wcsxfrm_l F -GLIBC_2.1 __wctype_l F -GLIBC_2.1 __xstat64 F -GLIBC_2.1 _authenticate F -GLIBC_2.1 _dl_mcount_wrapper F -GLIBC_2.1 _dl_mcount_wrapper_check F -GLIBC_2.1 _sys_errlist D 0x418 -GLIBC_2.1 _sys_nerr D 0x4 -GLIBC_2.1 _sys_siglist D 0x200 -GLIBC_2.1 addseverity F -GLIBC_2.1 adjtime F -GLIBC_2.1 adjtimex F -GLIBC_2.1 alphasort64 F -GLIBC_2.1 argp_err_exit_status D 0x4 -GLIBC_2.1 argp_error F -GLIBC_2.1 argp_failure F -GLIBC_2.1 argp_help F -GLIBC_2.1 argp_parse F -GLIBC_2.1 argp_program_bug_address D 0x8 -GLIBC_2.1 argp_program_version D 0x8 -GLIBC_2.1 argp_program_version_hook D 0x8 -GLIBC_2.1 argp_state_help F -GLIBC_2.1 argp_usage F -GLIBC_2.1 authdes_create F -GLIBC_2.1 authdes_getucred F -GLIBC_2.1 authdes_pk_create F -GLIBC_2.1 backtrace F -GLIBC_2.1 backtrace_symbols F -GLIBC_2.1 backtrace_symbols_fd F -GLIBC_2.1 capget F -GLIBC_2.1 capset F -GLIBC_2.1 cbc_crypt F -GLIBC_2.1 clntunix_create F -GLIBC_2.1 creat64 F -GLIBC_2.1 des_setparity F -GLIBC_2.1 ecb_crypt F -GLIBC_2.1 endutxent F -GLIBC_2.1 fattach F -GLIBC_2.1 fclose F -GLIBC_2.1 fdetach F -GLIBC_2.1 fdopen F -GLIBC_2.1 ffsl F -GLIBC_2.1 ffsll F -GLIBC_2.1 fgetc_unlocked F -GLIBC_2.1 fgetpos64 F -GLIBC_2.1 fgets_unlocked F -GLIBC_2.1 fmtmsg F -GLIBC_2.1 fopen F -GLIBC_2.1 fopen64 F -GLIBC_2.1 fputs_unlocked F -GLIBC_2.1 fread_unlocked F -GLIBC_2.1 freopen64 F -GLIBC_2.1 fseeko F -GLIBC_2.1 fseeko64 F -GLIBC_2.1 fsetpos64 F -GLIBC_2.1 fstatfs64 F -GLIBC_2.1 fstatvfs F -GLIBC_2.1 fstatvfs64 F -GLIBC_2.1 ftello F -GLIBC_2.1 ftello64 F -GLIBC_2.1 ftruncate64 F -GLIBC_2.1 ftw64 F -GLIBC_2.1 fwrite_unlocked F -GLIBC_2.1 gai_strerror F -GLIBC_2.1 getcontext F -GLIBC_2.1 getdate F -GLIBC_2.1 getdate_err D 0x4 -GLIBC_2.1 getdate_r F -GLIBC_2.1 getitimer F -GLIBC_2.1 getmsg F -GLIBC_2.1 getnameinfo F -GLIBC_2.1 getnetname F -GLIBC_2.1 getpmsg F -GLIBC_2.1 getpt F -GLIBC_2.1 getrlimit64 F -GLIBC_2.1 getrusage F -GLIBC_2.1 gettimeofday F -GLIBC_2.1 getutxent F -GLIBC_2.1 getutxid F -GLIBC_2.1 getutxline F -GLIBC_2.1 glob F -GLIBC_2.1 glob64 F -GLIBC_2.1 globfree F -GLIBC_2.1 globfree64 F -GLIBC_2.1 gnu_get_libc_release F -GLIBC_2.1 gnu_get_libc_version F -GLIBC_2.1 grantpt F -GLIBC_2.1 host2netname F -GLIBC_2.1 iconv F -GLIBC_2.1 iconv_close F -GLIBC_2.1 iconv_open F -GLIBC_2.1 ieee_get_fp_control F -GLIBC_2.1 ieee_set_fp_control F -GLIBC_2.1 if_freenameindex F -GLIBC_2.1 if_indextoname F -GLIBC_2.1 if_nameindex F -GLIBC_2.1 if_nametoindex F -GLIBC_2.1 in6addr_any D 0x10 -GLIBC_2.1 in6addr_loopback D 0x10 -GLIBC_2.1 isastream F -GLIBC_2.1 iswblank F -GLIBC_2.1 key_decryptsession F -GLIBC_2.1 key_decryptsession_pk F -GLIBC_2.1 key_encryptsession F -GLIBC_2.1 key_encryptsession_pk F -GLIBC_2.1 key_gendes F -GLIBC_2.1 key_get_conv F -GLIBC_2.1 key_secretkey_is_set F -GLIBC_2.1 key_setnet F -GLIBC_2.1 key_setsecret F -GLIBC_2.1 lockf64 F -GLIBC_2.1 lseek64 F -GLIBC_2.1 makecontext F -GLIBC_2.1 mempcpy F -GLIBC_2.1 mmap64 F -GLIBC_2.1 netname2host F -GLIBC_2.1 netname2user F -GLIBC_2.1 nftw F -GLIBC_2.1 nftw64 F -GLIBC_2.1 ntp_adjtime F -GLIBC_2.1 ntp_gettime F -GLIBC_2.1 open64 F -GLIBC_2.1 passwd2des F -GLIBC_2.1 pclose F -GLIBC_2.1 popen F -GLIBC_2.1 pread F -GLIBC_2.1 pread64 F -GLIBC_2.1 printf_size F -GLIBC_2.1 printf_size_info F -GLIBC_2.1 pthread_attr_init F -GLIBC_2.1 ptsname F -GLIBC_2.1 ptsname_r F -GLIBC_2.1 putgrent F -GLIBC_2.1 putmsg F -GLIBC_2.1 putpmsg F -GLIBC_2.1 pututxline F -GLIBC_2.1 pwrite F -GLIBC_2.1 pwrite64 F -GLIBC_2.1 rawmemchr F -GLIBC_2.1 readdir64 F -GLIBC_2.1 readdir64_r F -GLIBC_2.1 rtime F -GLIBC_2.1 scandir64 F -GLIBC_2.1 select F -GLIBC_2.1 sendfile F -GLIBC_2.1 setitimer F -GLIBC_2.1 setrlimit64 F -GLIBC_2.1 settimeofday F -GLIBC_2.1 setutxent F -GLIBC_2.1 sighold F -GLIBC_2.1 sigignore F -GLIBC_2.1 sigqueue F -GLIBC_2.1 sigrelse F -GLIBC_2.1 sigset F -GLIBC_2.1 sigtimedwait F -GLIBC_2.1 sigwaitinfo F -GLIBC_2.1 statfs64 F -GLIBC_2.1 statvfs F -GLIBC_2.1 statvfs64 F -GLIBC_2.1 strcasestr F -GLIBC_2.1 strtoimax F -GLIBC_2.1 strtoumax F -GLIBC_2.1 strverscmp F -GLIBC_2.1 svcunix_create F -GLIBC_2.1 svcunixfd_create F -GLIBC_2.1 swapcontext F -GLIBC_2.1 sys_errlist D 0x418 -GLIBC_2.1 sys_nerr D 0x4 -GLIBC_2.1 sys_sigabbrev D 0x200 -GLIBC_2.1 sys_siglist D 0x200 -GLIBC_2.1 sysv_signal F -GLIBC_2.1 tcgetsid F -GLIBC_2.1 tdestroy F -GLIBC_2.1 tmpfile F -GLIBC_2.1 tmpfile64 F -GLIBC_2.1 truncate64 F -GLIBC_2.1 umount2 F -GLIBC_2.1 unlockpt F -GLIBC_2.1 updwtmpx F -GLIBC_2.1 user2netname F -GLIBC_2.1 utimes F -GLIBC_2.1 utmpxname F -GLIBC_2.1 versionsort F -GLIBC_2.1 versionsort64 F -GLIBC_2.1 wait4 F -GLIBC_2.1 waitid F -GLIBC_2.1 wcscasecmp F -GLIBC_2.1 wcsncasecmp F -GLIBC_2.1 wcsnlen F -GLIBC_2.1 wcstoimax F -GLIBC_2.1 wcstoll F -GLIBC_2.1 wcstoull F -GLIBC_2.1 wcstoumax F -GLIBC_2.1 wcswcs F -GLIBC_2.1 wordexp F -GLIBC_2.1 wordfree F -GLIBC_2.1 xdecrypt F -GLIBC_2.1 xdr_authdes_cred F -GLIBC_2.1 xdr_authdes_verf F -GLIBC_2.1 xdr_getcredres F -GLIBC_2.1 xdr_int16_t F -GLIBC_2.1 xdr_int32_t F -GLIBC_2.1 xdr_int8_t F -GLIBC_2.1 xdr_netnamestr F -GLIBC_2.1 xdr_sizeof F -GLIBC_2.1 xdr_uint16_t F -GLIBC_2.1 xdr_uint32_t F -GLIBC_2.1 xdr_uint8_t F -GLIBC_2.1 xdr_unixcred F -GLIBC_2.1.1 GLIBC_2.1.1 A -GLIBC_2.1.1 _Exit F -GLIBC_2.1.1 __mempcpy_small F -GLIBC_2.1.1 __stpcpy_small F -GLIBC_2.1.1 __strcpy_small F -GLIBC_2.1.1 __strcspn_c1 F -GLIBC_2.1.1 __strcspn_c2 F -GLIBC_2.1.1 __strcspn_c3 F -GLIBC_2.1.1 __strpbrk_c2 F -GLIBC_2.1.1 __strpbrk_c3 F -GLIBC_2.1.1 __strsep_1c F -GLIBC_2.1.1 __strsep_2c F -GLIBC_2.1.1 __strsep_3c F -GLIBC_2.1.1 __strsep_g F -GLIBC_2.1.1 __strspn_c1 F -GLIBC_2.1.1 __strspn_c2 F -GLIBC_2.1.1 __strspn_c3 F -GLIBC_2.1.1 __strtok_r_1c F -GLIBC_2.1.1 __strverscmp F -GLIBC_2.1.1 getutmp F -GLIBC_2.1.1 getutmpx F -GLIBC_2.1.1 imaxabs F -GLIBC_2.1.1 imaxdiv F -GLIBC_2.1.1 strchrnul F -GLIBC_2.1.1 xdr_hyper F -GLIBC_2.1.1 xdr_int64_t F -GLIBC_2.1.1 xdr_longlong_t F -GLIBC_2.1.1 xdr_u_hyper F -GLIBC_2.1.1 xdr_u_longlong_t F -GLIBC_2.1.1 xdr_uint64_t F -GLIBC_2.1.2 GLIBC_2.1.2 A -GLIBC_2.1.2 __vfork F -GLIBC_2.1.2 getaliasbyname_r F -GLIBC_2.1.2 getaliasent_r F -GLIBC_2.1.2 getgrent_r F -GLIBC_2.1.2 getgrgid_r F -GLIBC_2.1.2 getgrnam_r F -GLIBC_2.1.2 gethostbyaddr_r F -GLIBC_2.1.2 gethostbyname2_r F -GLIBC_2.1.2 gethostbyname_r F -GLIBC_2.1.2 gethostent_r F -GLIBC_2.1.2 getnetbyaddr_r F -GLIBC_2.1.2 getnetbyname_r F -GLIBC_2.1.2 getnetent_r F -GLIBC_2.1.2 getprotobyname_r F -GLIBC_2.1.2 getprotobynumber_r F -GLIBC_2.1.2 getprotoent_r F -GLIBC_2.1.2 getpwent_r F -GLIBC_2.1.2 getpwnam_r F -GLIBC_2.1.2 getpwuid_r F -GLIBC_2.1.2 getrpcbyname_r F -GLIBC_2.1.2 getrpcbynumber_r F -GLIBC_2.1.2 getrpcent_r F -GLIBC_2.1.2 getservbyname_r F -GLIBC_2.1.2 getservbyport_r F -GLIBC_2.1.2 getservent_r F -GLIBC_2.1.2 getspent_r F -GLIBC_2.1.2 getspnam_r F -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 __cxa_atexit F -GLIBC_2.1.3 __cxa_finalize F -GLIBC_2.1.3 __sigsuspend F -GLIBC_2.1.4 GLIBC_2.1.4 A -GLIBC_2.1.4 pciconfig_iobase F -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fallocate64 F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _sys_errlist D 0x458 -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x458 -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 _sys_errlist D 0x460 -GLIBC_2.16 _sys_nerr D 0x4 -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 sys_errlist D 0x460 -GLIBC_2.16 sys_nerr D 0x4 -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0xa8 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 __assert F -GLIBC_2.2 __ctype32_tolower D 0x8 -GLIBC_2.2 __ctype32_toupper D 0x8 -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpurge F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __open64 F -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_state F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __statfs F -GLIBC_2.2 __strndup F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _res_hconf D 0x48 -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 dcngettext F -GLIBC_2.2 dngettext F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwscanf F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 iruserok_af F -GLIBC_2.2 localeconv F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 memrchr F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 moncontrol F -GLIBC_2.2 msgctl F -GLIBC_2.2 ngettext F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 semctl F -GLIBC_2.2 shmctl F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x8 -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 ungetwc F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wprintf F -GLIBC_2.2 wscanf F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.2 wordexp F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 _sys_errlist D 0x420 -GLIBC_2.3 _sys_nerr D 0x4 -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 sys_errlist D 0x420 -GLIBC_2.3 sys_nerr D 0x4 -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x208 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 strtoll_l F -GLIBC_2.3.3 strtoull_l F -GLIBC_2.3.3 sys_sigabbrev D 0x208 -GLIBC_2.3.3 sys_siglist D 0x208 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 _OtsAddX F -GLIBC_2.3.4 _OtsConvertFloatTX F -GLIBC_2.3.4 _OtsConvertFloatXT F -GLIBC_2.3.4 _OtsCvtQUX F -GLIBC_2.3.4 _OtsCvtQX F -GLIBC_2.3.4 _OtsCvtXQ F -GLIBC_2.3.4 _OtsDivX F -GLIBC_2.3.4 _OtsEqlX F -GLIBC_2.3.4 _OtsGeqX F -GLIBC_2.3.4 _OtsGtrX F -GLIBC_2.3.4 _OtsLeqX F -GLIBC_2.3.4 _OtsLssX F -GLIBC_2.3.4 _OtsMulX F -GLIBC_2.3.4 _OtsNeqX F -GLIBC_2.3.4 _OtsNintXQ F -GLIBC_2.3.4 _OtsSubX F -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 _IO_fprintf F -GLIBC_2.4 _IO_printf F -GLIBC_2.4 _IO_sprintf F -GLIBC_2.4 _IO_sscanf F -GLIBC_2.4 _IO_vfprintf F -GLIBC_2.4 _IO_vfscanf F -GLIBC_2.4 _IO_vsprintf F -GLIBC_2.4 __asprintf F -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fprintf_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __isinfl F -GLIBC_2.4 __isnanl F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __nldbl__IO_fprintf F -GLIBC_2.4 __nldbl__IO_printf F -GLIBC_2.4 __nldbl__IO_sprintf F -GLIBC_2.4 __nldbl__IO_sscanf F -GLIBC_2.4 __nldbl__IO_vfprintf F -GLIBC_2.4 __nldbl__IO_vfscanf F -GLIBC_2.4 __nldbl__IO_vsprintf F -GLIBC_2.4 __nldbl___asprintf F -GLIBC_2.4 __nldbl___fprintf_chk F -GLIBC_2.4 __nldbl___fwprintf_chk F -GLIBC_2.4 __nldbl___printf_chk F -GLIBC_2.4 __nldbl___printf_fp F -GLIBC_2.4 __nldbl___snprintf_chk F -GLIBC_2.4 __nldbl___sprintf_chk F -GLIBC_2.4 __nldbl___strfmon_l F -GLIBC_2.4 __nldbl___swprintf_chk F -GLIBC_2.4 __nldbl___syslog_chk F -GLIBC_2.4 __nldbl___vfprintf_chk F -GLIBC_2.4 __nldbl___vfscanf F -GLIBC_2.4 __nldbl___vfwprintf_chk F -GLIBC_2.4 __nldbl___vprintf_chk F -GLIBC_2.4 __nldbl___vsnprintf F -GLIBC_2.4 __nldbl___vsnprintf_chk F -GLIBC_2.4 __nldbl___vsprintf_chk F -GLIBC_2.4 __nldbl___vsscanf F -GLIBC_2.4 __nldbl___vstrfmon F -GLIBC_2.4 __nldbl___vstrfmon_l F -GLIBC_2.4 __nldbl___vswprintf_chk F -GLIBC_2.4 __nldbl___vsyslog_chk F -GLIBC_2.4 __nldbl___vwprintf_chk F -GLIBC_2.4 __nldbl___wprintf_chk F -GLIBC_2.4 __nldbl_asprintf F -GLIBC_2.4 __nldbl_dprintf F -GLIBC_2.4 __nldbl_fprintf F -GLIBC_2.4 __nldbl_fscanf F -GLIBC_2.4 __nldbl_fwprintf F -GLIBC_2.4 __nldbl_fwscanf F -GLIBC_2.4 __nldbl_obstack_printf F -GLIBC_2.4 __nldbl_obstack_vprintf F -GLIBC_2.4 __nldbl_printf F -GLIBC_2.4 __nldbl_printf_size F -GLIBC_2.4 __nldbl_scanf F -GLIBC_2.4 __nldbl_snprintf F -GLIBC_2.4 __nldbl_sprintf F -GLIBC_2.4 __nldbl_sscanf F -GLIBC_2.4 __nldbl_strfmon F -GLIBC_2.4 __nldbl_strfmon_l F -GLIBC_2.4 __nldbl_swprintf F -GLIBC_2.4 __nldbl_swscanf F -GLIBC_2.4 __nldbl_syslog F -GLIBC_2.4 __nldbl_vasprintf F -GLIBC_2.4 __nldbl_vdprintf F -GLIBC_2.4 __nldbl_vfprintf F -GLIBC_2.4 __nldbl_vfscanf F -GLIBC_2.4 __nldbl_vfwprintf F -GLIBC_2.4 __nldbl_vfwscanf F -GLIBC_2.4 __nldbl_vprintf F -GLIBC_2.4 __nldbl_vscanf F -GLIBC_2.4 __nldbl_vsnprintf F -GLIBC_2.4 __nldbl_vsprintf F -GLIBC_2.4 __nldbl_vsscanf F -GLIBC_2.4 __nldbl_vswprintf F -GLIBC_2.4 __nldbl_vswscanf F -GLIBC_2.4 __nldbl_vsyslog F -GLIBC_2.4 __nldbl_vwprintf F -GLIBC_2.4 __nldbl_vwscanf F -GLIBC_2.4 __nldbl_wprintf F -GLIBC_2.4 __nldbl_wscanf F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __printf_chk F -GLIBC_2.4 __printf_fp F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __signbitl F -GLIBC_2.4 __snprintf_chk F -GLIBC_2.4 __sprintf_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __strfmon_l F -GLIBC_2.4 __strtold_internal F -GLIBC_2.4 __strtold_l F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfprintf_chk F -GLIBC_2.4 __vfscanf F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vprintf_chk F -GLIBC_2.4 __vsnprintf F -GLIBC_2.4 __vsnprintf_chk F -GLIBC_2.4 __vsprintf_chk F -GLIBC_2.4 __vsscanf F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstold_internal F -GLIBC_2.4 __wcstold_l F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 _sys_errlist D 0x450 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 asprintf F -GLIBC_2.4 copysignl F -GLIBC_2.4 dprintf F -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 finitel F -GLIBC_2.4 fprintf F -GLIBC_2.4 frexpl F -GLIBC_2.4 fscanf F -GLIBC_2.4 futimesat F -GLIBC_2.4 fwprintf F -GLIBC_2.4 fwscanf F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 isinfl F -GLIBC_2.4 isnanl F -GLIBC_2.4 ldexpl F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 modfl F -GLIBC_2.4 obstack_printf F -GLIBC_2.4 obstack_vprintf F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 printf F -GLIBC_2.4 printf_size F -GLIBC_2.4 qecvt F -GLIBC_2.4 qecvt_r F -GLIBC_2.4 qfcvt F -GLIBC_2.4 qfcvt_r F -GLIBC_2.4 qgcvt F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 scalbnl F -GLIBC_2.4 scanf F -GLIBC_2.4 snprintf F -GLIBC_2.4 sprintf F -GLIBC_2.4 sscanf F -GLIBC_2.4 strfmon F -GLIBC_2.4 strfmon_l F -GLIBC_2.4 strtold F -GLIBC_2.4 strtold_l F -GLIBC_2.4 swprintf F -GLIBC_2.4 swscanf F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sys_errlist D 0x450 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 syslog F -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.4 vasprintf F -GLIBC_2.4 vdprintf F -GLIBC_2.4 vfprintf F -GLIBC_2.4 vfscanf F -GLIBC_2.4 vfwprintf F -GLIBC_2.4 vfwscanf F -GLIBC_2.4 vprintf F -GLIBC_2.4 vscanf F -GLIBC_2.4 vsnprintf F -GLIBC_2.4 vsprintf F -GLIBC_2.4 vsscanf F -GLIBC_2.4 vswprintf F -GLIBC_2.4 vswscanf F -GLIBC_2.4 vsyslog F -GLIBC_2.4 vwprintf F -GLIBC_2.4 vwscanf F -GLIBC_2.4 wcstold F -GLIBC_2.4 wcstold_l F -GLIBC_2.4 wprintf F -GLIBC_2.4 wscanf F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __nldbl___isoc99_fscanf F -GLIBC_2.7 __nldbl___isoc99_fwscanf F -GLIBC_2.7 __nldbl___isoc99_scanf F -GLIBC_2.7 __nldbl___isoc99_sscanf F -GLIBC_2.7 __nldbl___isoc99_swscanf F -GLIBC_2.7 __nldbl___isoc99_vfscanf F -GLIBC_2.7 __nldbl___isoc99_vfwscanf F -GLIBC_2.7 __nldbl___isoc99_vscanf F -GLIBC_2.7 __nldbl___isoc99_vsscanf F -GLIBC_2.7 __nldbl___isoc99_vswscanf F -GLIBC_2.7 __nldbl___isoc99_vwscanf F -GLIBC_2.7 __nldbl___isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __nldbl___asprintf_chk F -GLIBC_2.8 __nldbl___dprintf_chk F -GLIBC_2.8 __nldbl___obstack_printf_chk F -GLIBC_2.8 __nldbl___obstack_vprintf_chk F -GLIBC_2.8 __nldbl___vasprintf_chk F -GLIBC_2.8 __nldbl___vdprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/alpha/libcrypt.abilist b/sysdeps/unix/sysv/linux/alpha/libcrypt.abilist deleted file mode 100644 index 4db2639336..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 crypt F -GLIBC_2.0 crypt_r F -GLIBC_2.0 encrypt F -GLIBC_2.0 encrypt_r F -GLIBC_2.0 fcrypt F -GLIBC_2.0 setkey F -GLIBC_2.0 setkey_r F diff --git a/sysdeps/unix/sysv/linux/alpha/libdl.abilist b/sysdeps/unix/sysv/linux/alpha/libdl.abilist deleted file mode 100644 index 5536f6e0a9..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/libdl.abilist +++ /dev/null @@ -1,14 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 dladdr F -GLIBC_2.0 dlclose F -GLIBC_2.0 dlerror F -GLIBC_2.0 dlopen F -GLIBC_2.0 dlsym F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 dlopen F -GLIBC_2.1 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist deleted file mode 100644 index 0dc44afd77..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ /dev/null @@ -1,622 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _LIB_VERSION D 0x4 -GLIBC_2.0 __atan2 F -GLIBC_2.0 acos F -GLIBC_2.0 acosf F -GLIBC_2.0 acosh F -GLIBC_2.0 acoshf F -GLIBC_2.0 acoshl F -GLIBC_2.0 acosl F -GLIBC_2.0 asin F -GLIBC_2.0 asinf F -GLIBC_2.0 asinh F -GLIBC_2.0 asinhf F -GLIBC_2.0 asinhl F -GLIBC_2.0 asinl F -GLIBC_2.0 atan F -GLIBC_2.0 atan2 F -GLIBC_2.0 atan2f F -GLIBC_2.0 atan2l F -GLIBC_2.0 atanf F -GLIBC_2.0 atanh F -GLIBC_2.0 atanhf F -GLIBC_2.0 atanhl F -GLIBC_2.0 atanl F -GLIBC_2.0 cbrt F -GLIBC_2.0 cbrtf F -GLIBC_2.0 cbrtl F -GLIBC_2.0 ceil F -GLIBC_2.0 ceilf F -GLIBC_2.0 ceill F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 cos F -GLIBC_2.0 cosf F -GLIBC_2.0 cosh F -GLIBC_2.0 coshf F -GLIBC_2.0 coshl F -GLIBC_2.0 cosl F -GLIBC_2.0 drem F -GLIBC_2.0 dremf F -GLIBC_2.0 dreml F -GLIBC_2.0 erf F -GLIBC_2.0 erfc F -GLIBC_2.0 erfcf F -GLIBC_2.0 erfcl F -GLIBC_2.0 erff F -GLIBC_2.0 erfl F -GLIBC_2.0 exp F -GLIBC_2.0 expf F -GLIBC_2.0 expl F -GLIBC_2.0 expm1 F -GLIBC_2.0 expm1f F -GLIBC_2.0 expm1l F -GLIBC_2.0 fabs F -GLIBC_2.0 fabsf F -GLIBC_2.0 fabsl F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 floor F -GLIBC_2.0 floorf F -GLIBC_2.0 floorl F -GLIBC_2.0 fmod F -GLIBC_2.0 fmodf F -GLIBC_2.0 fmodl F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 gamma F -GLIBC_2.0 gammaf F -GLIBC_2.0 gammal F -GLIBC_2.0 hypot F -GLIBC_2.0 hypotf F -GLIBC_2.0 hypotl F -GLIBC_2.0 ilogb F -GLIBC_2.0 ilogbf F -GLIBC_2.0 ilogbl F -GLIBC_2.0 j0 F -GLIBC_2.0 j0f F -GLIBC_2.0 j0l F -GLIBC_2.0 j1 F -GLIBC_2.0 j1f F -GLIBC_2.0 j1l F -GLIBC_2.0 jn F -GLIBC_2.0 jnf F -GLIBC_2.0 jnl F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 lgamma F -GLIBC_2.0 lgamma_r F -GLIBC_2.0 lgammaf F -GLIBC_2.0 lgammaf_r F -GLIBC_2.0 lgammal F -GLIBC_2.0 lgammal_r F -GLIBC_2.0 log F -GLIBC_2.0 log10 F -GLIBC_2.0 log10f F -GLIBC_2.0 log10l F -GLIBC_2.0 log1p F -GLIBC_2.0 log1pf F -GLIBC_2.0 log1pl F -GLIBC_2.0 logb F -GLIBC_2.0 logbf F -GLIBC_2.0 logbl F -GLIBC_2.0 logf F -GLIBC_2.0 logl F -GLIBC_2.0 matherr F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 nextafter F -GLIBC_2.0 nextafterf F -GLIBC_2.0 nextafterl F -GLIBC_2.0 pow F -GLIBC_2.0 powf F -GLIBC_2.0 powl F -GLIBC_2.0 remainder F -GLIBC_2.0 remainderf F -GLIBC_2.0 remainderl F -GLIBC_2.0 rint F -GLIBC_2.0 rintf F -GLIBC_2.0 rintl F -GLIBC_2.0 scalb F -GLIBC_2.0 scalbf F -GLIBC_2.0 scalbl F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 signgam D 0x4 -GLIBC_2.0 significand F -GLIBC_2.0 significandf F -GLIBC_2.0 significandl F -GLIBC_2.0 sin F -GLIBC_2.0 sinf F -GLIBC_2.0 sinh F -GLIBC_2.0 sinhf F -GLIBC_2.0 sinhl F -GLIBC_2.0 sinl F -GLIBC_2.0 sqrt F -GLIBC_2.0 sqrtf F -GLIBC_2.0 sqrtl F -GLIBC_2.0 tan F -GLIBC_2.0 tanf F -GLIBC_2.0 tanh F -GLIBC_2.0 tanhf F -GLIBC_2.0 tanhl F -GLIBC_2.0 tanl F -GLIBC_2.0 y0 F -GLIBC_2.0 y0f F -GLIBC_2.0 y0l F -GLIBC_2.0 y1 F -GLIBC_2.0 y1f F -GLIBC_2.0 y1l F -GLIBC_2.0 yn F -GLIBC_2.0 ynf F -GLIBC_2.0 ynl F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __clog10 F -GLIBC_2.1 __clog10f F -GLIBC_2.1 __clog10l F -GLIBC_2.1 __finite F -GLIBC_2.1 __finitef F -GLIBC_2.1 __finitel F -GLIBC_2.1 __fpclassify F -GLIBC_2.1 __fpclassifyf F -GLIBC_2.1 __signbit F -GLIBC_2.1 __signbitf F -GLIBC_2.1 cabs F -GLIBC_2.1 cabsf F -GLIBC_2.1 cabsl F -GLIBC_2.1 cacos F -GLIBC_2.1 cacosf F -GLIBC_2.1 cacosh F -GLIBC_2.1 cacoshf F -GLIBC_2.1 cacoshl F -GLIBC_2.1 cacosl F -GLIBC_2.1 carg F -GLIBC_2.1 cargf F -GLIBC_2.1 cargl F -GLIBC_2.1 casin F -GLIBC_2.1 casinf F -GLIBC_2.1 casinh F -GLIBC_2.1 casinhf F -GLIBC_2.1 casinhl F -GLIBC_2.1 casinl F -GLIBC_2.1 catan F -GLIBC_2.1 catanf F -GLIBC_2.1 catanh F -GLIBC_2.1 catanhf F -GLIBC_2.1 catanhl F -GLIBC_2.1 catanl F -GLIBC_2.1 ccos F -GLIBC_2.1 ccosf F -GLIBC_2.1 ccosh F -GLIBC_2.1 ccoshf F -GLIBC_2.1 ccoshl F -GLIBC_2.1 ccosl F -GLIBC_2.1 cexp F -GLIBC_2.1 cexpf F -GLIBC_2.1 cexpl F -GLIBC_2.1 cimag F -GLIBC_2.1 cimagf F -GLIBC_2.1 cimagl F -GLIBC_2.1 clog F -GLIBC_2.1 clog10 F -GLIBC_2.1 clog10f F -GLIBC_2.1 clog10l F -GLIBC_2.1 clogf F -GLIBC_2.1 clogl F -GLIBC_2.1 conj F -GLIBC_2.1 conjf F -GLIBC_2.1 conjl F -GLIBC_2.1 cpow F -GLIBC_2.1 cpowf F -GLIBC_2.1 cpowl F -GLIBC_2.1 cproj F -GLIBC_2.1 cprojf F -GLIBC_2.1 cprojl F -GLIBC_2.1 creal F -GLIBC_2.1 crealf F -GLIBC_2.1 creall F -GLIBC_2.1 csin F -GLIBC_2.1 csinf F -GLIBC_2.1 csinh F -GLIBC_2.1 csinhf F -GLIBC_2.1 csinhl F -GLIBC_2.1 csinl F -GLIBC_2.1 csqrt F -GLIBC_2.1 csqrtf F -GLIBC_2.1 csqrtl F -GLIBC_2.1 ctan F -GLIBC_2.1 ctanf F -GLIBC_2.1 ctanh F -GLIBC_2.1 ctanhf F -GLIBC_2.1 ctanhl F -GLIBC_2.1 ctanl F -GLIBC_2.1 exp10 F -GLIBC_2.1 exp10f F -GLIBC_2.1 exp10l F -GLIBC_2.1 exp2 F -GLIBC_2.1 exp2f F -GLIBC_2.1 fdim F -GLIBC_2.1 fdimf F -GLIBC_2.1 fdiml F -GLIBC_2.1 feclearexcept F -GLIBC_2.1 fegetenv F -GLIBC_2.1 fegetexceptflag F -GLIBC_2.1 fegetround F -GLIBC_2.1 feholdexcept F -GLIBC_2.1 feraiseexcept F -GLIBC_2.1 fesetenv F -GLIBC_2.1 fesetexceptflag F -GLIBC_2.1 fesetround F -GLIBC_2.1 fetestexcept F -GLIBC_2.1 feupdateenv F -GLIBC_2.1 fma F -GLIBC_2.1 fmaf F -GLIBC_2.1 fmal F -GLIBC_2.1 fmax F -GLIBC_2.1 fmaxf F -GLIBC_2.1 fmaxl F -GLIBC_2.1 fmin F -GLIBC_2.1 fminf F -GLIBC_2.1 fminl F -GLIBC_2.1 llrint F -GLIBC_2.1 llrintf F -GLIBC_2.1 llrintl F -GLIBC_2.1 llround F -GLIBC_2.1 llroundf F -GLIBC_2.1 llroundl F -GLIBC_2.1 log2 F -GLIBC_2.1 log2f F -GLIBC_2.1 log2l F -GLIBC_2.1 lrint F -GLIBC_2.1 lrintf F -GLIBC_2.1 lrintl F -GLIBC_2.1 lround F -GLIBC_2.1 lroundf F -GLIBC_2.1 lroundl F -GLIBC_2.1 nan F -GLIBC_2.1 nanf F -GLIBC_2.1 nanl F -GLIBC_2.1 nearbyint F -GLIBC_2.1 nearbyintf F -GLIBC_2.1 nearbyintl F -GLIBC_2.1 nexttoward F -GLIBC_2.1 nexttowardf F -GLIBC_2.1 nexttowardl F -GLIBC_2.1 pow10 F -GLIBC_2.1 pow10f F -GLIBC_2.1 pow10l F -GLIBC_2.1 remquo F -GLIBC_2.1 remquof F -GLIBC_2.1 remquol F -GLIBC_2.1 round F -GLIBC_2.1 roundf F -GLIBC_2.1 roundl F -GLIBC_2.1 scalbln F -GLIBC_2.1 scalblnf F -GLIBC_2.1 scalblnl F -GLIBC_2.1 sincos F -GLIBC_2.1 sincosf F -GLIBC_2.1 sincosl F -GLIBC_2.1 tgamma F -GLIBC_2.1 tgammaf F -GLIBC_2.1 tgammal F -GLIBC_2.1 trunc F -GLIBC_2.1 truncf F -GLIBC_2.1 truncl F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __acoshl_finite F -GLIBC_2.15 __acosl_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __asinl_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atan2l_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __atanhl_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __coshl_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp10l_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp2l_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __expl_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __fmodl_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __gammal_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __hypotl_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j0l_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __j1l_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __jnl_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __lgammal_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log10l_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log2l_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __logl_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __powl_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __remainderl_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __scalbl_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sinhl_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y0l_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __y1l_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.15 __ynl_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.18 __sqrt_finite F -GLIBC_2.18 __sqrtf_finite F -GLIBC_2.18 __sqrtl_finite F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 feclearexcept F -GLIBC_2.2 fedisableexcept F -GLIBC_2.2 feenableexcept F -GLIBC_2.2 fegetenv F -GLIBC_2.2 fegetexcept F -GLIBC_2.2 fegetexceptflag F -GLIBC_2.2 feraiseexcept F -GLIBC_2.2 fesetenv F -GLIBC_2.2 fesetexceptflag F -GLIBC_2.2 feupdateenv F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __c1_cabsf F -GLIBC_2.3.4 __c1_cacosf F -GLIBC_2.3.4 __c1_cacoshf F -GLIBC_2.3.4 __c1_cargf F -GLIBC_2.3.4 __c1_casinf F -GLIBC_2.3.4 __c1_casinhf F -GLIBC_2.3.4 __c1_catanf F -GLIBC_2.3.4 __c1_catanhf F -GLIBC_2.3.4 __c1_ccosf F -GLIBC_2.3.4 __c1_ccoshf F -GLIBC_2.3.4 __c1_cexpf F -GLIBC_2.3.4 __c1_cimagf F -GLIBC_2.3.4 __c1_clog10f F -GLIBC_2.3.4 __c1_clogf F -GLIBC_2.3.4 __c1_conjf F -GLIBC_2.3.4 __c1_cpowf F -GLIBC_2.3.4 __c1_cprojf F -GLIBC_2.3.4 __c1_crealf F -GLIBC_2.3.4 __c1_csinf F -GLIBC_2.3.4 __c1_csinhf F -GLIBC_2.3.4 __c1_csqrtf F -GLIBC_2.3.4 __c1_ctanf F -GLIBC_2.3.4 __c1_ctanhf F -GLIBC_2.3.4 cabsf F -GLIBC_2.3.4 cacosf F -GLIBC_2.3.4 cacoshf F -GLIBC_2.3.4 cargf F -GLIBC_2.3.4 casinf F -GLIBC_2.3.4 casinhf F -GLIBC_2.3.4 catanf F -GLIBC_2.3.4 catanhf F -GLIBC_2.3.4 ccosf F -GLIBC_2.3.4 ccoshf F -GLIBC_2.3.4 cexpf F -GLIBC_2.3.4 cimagf F -GLIBC_2.3.4 clog10f F -GLIBC_2.3.4 clogf F -GLIBC_2.3.4 conjf F -GLIBC_2.3.4 cpowf F -GLIBC_2.3.4 cprojf F -GLIBC_2.3.4 crealf F -GLIBC_2.3.4 csinf F -GLIBC_2.3.4 csinhf F -GLIBC_2.3.4 csqrtf F -GLIBC_2.3.4 ctanf F -GLIBC_2.3.4 ctanhf F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __clog10l F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fpclassifyl F -GLIBC_2.4 __nldbl_nexttowardf F -GLIBC_2.4 __signbitl F -GLIBC_2.4 acoshl F -GLIBC_2.4 acosl F -GLIBC_2.4 asinhl F -GLIBC_2.4 asinl F -GLIBC_2.4 atan2l F -GLIBC_2.4 atanhl F -GLIBC_2.4 atanl F -GLIBC_2.4 cabsl F -GLIBC_2.4 cacoshl F -GLIBC_2.4 cacosl F -GLIBC_2.4 cargl F -GLIBC_2.4 casinhl F -GLIBC_2.4 casinl F -GLIBC_2.4 catanhl F -GLIBC_2.4 catanl F -GLIBC_2.4 cbrtl F -GLIBC_2.4 ccoshl F -GLIBC_2.4 ccosl F -GLIBC_2.4 ceill F -GLIBC_2.4 cexpl F -GLIBC_2.4 cimagl F -GLIBC_2.4 clog10l F -GLIBC_2.4 clogl F -GLIBC_2.4 conjl F -GLIBC_2.4 copysignl F -GLIBC_2.4 coshl F -GLIBC_2.4 cosl F -GLIBC_2.4 cpowl F -GLIBC_2.4 cprojl F -GLIBC_2.4 creall F -GLIBC_2.4 csinhl F -GLIBC_2.4 csinl F -GLIBC_2.4 csqrtl F -GLIBC_2.4 ctanhl F -GLIBC_2.4 ctanl F -GLIBC_2.4 dreml F -GLIBC_2.4 erfcl F -GLIBC_2.4 erfl F -GLIBC_2.4 exp10l F -GLIBC_2.4 exp2l F -GLIBC_2.4 expl F -GLIBC_2.4 expm1l F -GLIBC_2.4 fabsl F -GLIBC_2.4 fdiml F -GLIBC_2.4 finitel F -GLIBC_2.4 floorl F -GLIBC_2.4 fmal F -GLIBC_2.4 fmaxl F -GLIBC_2.4 fminl F -GLIBC_2.4 fmodl F -GLIBC_2.4 frexpl F -GLIBC_2.4 gammal F -GLIBC_2.4 hypotl F -GLIBC_2.4 ilogbl F -GLIBC_2.4 j0l F -GLIBC_2.4 j1l F -GLIBC_2.4 jnl F -GLIBC_2.4 ldexpl F -GLIBC_2.4 lgammal F -GLIBC_2.4 lgammal_r F -GLIBC_2.4 llrintl F -GLIBC_2.4 llroundl F -GLIBC_2.4 log10l F -GLIBC_2.4 log1pl F -GLIBC_2.4 log2l F -GLIBC_2.4 logbl F -GLIBC_2.4 logl F -GLIBC_2.4 lrintl F -GLIBC_2.4 lroundl F -GLIBC_2.4 modfl F -GLIBC_2.4 nanl F -GLIBC_2.4 nearbyintl F -GLIBC_2.4 nextafterl F -GLIBC_2.4 nexttoward F -GLIBC_2.4 nexttowardf F -GLIBC_2.4 nexttowardl F -GLIBC_2.4 pow10l F -GLIBC_2.4 powl F -GLIBC_2.4 remainderl F -GLIBC_2.4 remquol F -GLIBC_2.4 rintl F -GLIBC_2.4 roundl F -GLIBC_2.4 scalbl F -GLIBC_2.4 scalblnl F -GLIBC_2.4 scalbnl F -GLIBC_2.4 significandl F -GLIBC_2.4 sincosl F -GLIBC_2.4 sinhl F -GLIBC_2.4 sinl F -GLIBC_2.4 sqrtl F -GLIBC_2.4 tanhl F -GLIBC_2.4 tanl F -GLIBC_2.4 tgammal F -GLIBC_2.4 truncl F -GLIBC_2.4 y0l F -GLIBC_2.4 y1l F -GLIBC_2.4 ynl F diff --git a/sysdeps/unix/sysv/linux/alpha/libnsl.abilist b/sysdeps/unix/sysv/linux/alpha/libnsl.abilist deleted file mode 100644 index a23db2aeaf..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/libnsl.abilist +++ /dev/null @@ -1,124 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __yp_check F -GLIBC_2.0 xdr_domainname F -GLIBC_2.0 xdr_keydat F -GLIBC_2.0 xdr_mapname F -GLIBC_2.0 xdr_peername F -GLIBC_2.0 xdr_valdat F -GLIBC_2.0 xdr_yp_buf F -GLIBC_2.0 xdr_ypbind_binding F -GLIBC_2.0 xdr_ypbind_resp F -GLIBC_2.0 xdr_ypbind_resptype F -GLIBC_2.0 xdr_ypbind_setdom F -GLIBC_2.0 xdr_ypdelete_args F -GLIBC_2.0 xdr_ypmap_parms F -GLIBC_2.0 xdr_ypmaplist F -GLIBC_2.0 xdr_yppush_status F -GLIBC_2.0 xdr_yppushresp_xfr F -GLIBC_2.0 xdr_ypreq_key F -GLIBC_2.0 xdr_ypreq_nokey F -GLIBC_2.0 xdr_ypreq_xfr F -GLIBC_2.0 xdr_ypresp_all F -GLIBC_2.0 xdr_ypresp_key_val F -GLIBC_2.0 xdr_ypresp_maplist F -GLIBC_2.0 xdr_ypresp_master F -GLIBC_2.0 xdr_ypresp_order F -GLIBC_2.0 xdr_ypresp_val F -GLIBC_2.0 xdr_ypresp_xfr F -GLIBC_2.0 xdr_ypstat F -GLIBC_2.0 xdr_ypupdate_args F -GLIBC_2.0 xdr_ypxfrstat F -GLIBC_2.0 yp_all F -GLIBC_2.0 yp_bind F -GLIBC_2.0 yp_first F -GLIBC_2.0 yp_get_default_domain F -GLIBC_2.0 yp_maplist F -GLIBC_2.0 yp_master F -GLIBC_2.0 yp_match F -GLIBC_2.0 yp_next F -GLIBC_2.0 yp_order F -GLIBC_2.0 yp_unbind F -GLIBC_2.0 yp_update F -GLIBC_2.0 ypbinderr_string F -GLIBC_2.0 yperr_string F -GLIBC_2.0 ypprot_err F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __free_fdresult F -GLIBC_2.1 __nis_default_access F -GLIBC_2.1 __nis_default_group F -GLIBC_2.1 __nis_default_owner F -GLIBC_2.1 __nis_default_ttl F -GLIBC_2.1 __nis_finddirectory F -GLIBC_2.1 __nis_hash F -GLIBC_2.1 __nisbind_connect F -GLIBC_2.1 __nisbind_create F -GLIBC_2.1 __nisbind_destroy F -GLIBC_2.1 __nisbind_next F -GLIBC_2.1 nis_add F -GLIBC_2.1 nis_add_entry F -GLIBC_2.1 nis_addmember F -GLIBC_2.1 nis_checkpoint F -GLIBC_2.1 nis_clone_directory F -GLIBC_2.1 nis_clone_object F -GLIBC_2.1 nis_clone_result F -GLIBC_2.1 nis_creategroup F -GLIBC_2.1 nis_destroy_object F -GLIBC_2.1 nis_destroygroup F -GLIBC_2.1 nis_dir_cmp F -GLIBC_2.1 nis_domain_of F -GLIBC_2.1 nis_domain_of_r F -GLIBC_2.1 nis_first_entry F -GLIBC_2.1 nis_free_directory F -GLIBC_2.1 nis_free_object F -GLIBC_2.1 nis_free_request F -GLIBC_2.1 nis_freenames F -GLIBC_2.1 nis_freeresult F -GLIBC_2.1 nis_freeservlist F -GLIBC_2.1 nis_freetags F -GLIBC_2.1 nis_getnames F -GLIBC_2.1 nis_getservlist F -GLIBC_2.1 nis_ismember F -GLIBC_2.1 nis_leaf_of F -GLIBC_2.1 nis_leaf_of_r F -GLIBC_2.1 nis_lerror F -GLIBC_2.1 nis_list F -GLIBC_2.1 nis_local_directory F -GLIBC_2.1 nis_local_group F -GLIBC_2.1 nis_local_host F -GLIBC_2.1 nis_local_principal F -GLIBC_2.1 nis_lookup F -GLIBC_2.1 nis_mkdir F -GLIBC_2.1 nis_modify F -GLIBC_2.1 nis_modify_entry F -GLIBC_2.1 nis_name_of F -GLIBC_2.1 nis_name_of_r F -GLIBC_2.1 nis_next_entry F -GLIBC_2.1 nis_perror F -GLIBC_2.1 nis_ping F -GLIBC_2.1 nis_print_directory F -GLIBC_2.1 nis_print_entry F -GLIBC_2.1 nis_print_group F -GLIBC_2.1 nis_print_group_entry F -GLIBC_2.1 nis_print_link F -GLIBC_2.1 nis_print_object F -GLIBC_2.1 nis_print_result F -GLIBC_2.1 nis_print_rights F -GLIBC_2.1 nis_print_table F -GLIBC_2.1 nis_read_obj F -GLIBC_2.1 nis_remove F -GLIBC_2.1 nis_remove_entry F -GLIBC_2.1 nis_removemember F -GLIBC_2.1 nis_rmdir F -GLIBC_2.1 nis_servstate F -GLIBC_2.1 nis_sperrno F -GLIBC_2.1 nis_sperror F -GLIBC_2.1 nis_sperror_r F -GLIBC_2.1 nis_stats F -GLIBC_2.1 nis_verifygroup F -GLIBC_2.1 nis_write_obj F -GLIBC_2.1 readColdStartFile F -GLIBC_2.1 writeColdStartFile F -GLIBC_2.1 xdr_cback_data F -GLIBC_2.1 xdr_obj_p F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 xdr_ypall F diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist deleted file mode 100644 index 7e121d45f8..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist +++ /dev/null @@ -1,259 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 __close F -GLIBC_2.0 __connect F -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __fork F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __lseek F -GLIBC_2.0 __open F -GLIBC_2.0 __pthread_getspecific F -GLIBC_2.0 __pthread_key_create F -GLIBC_2.0 __pthread_mutex_destroy F -GLIBC_2.0 __pthread_mutex_init F -GLIBC_2.0 __pthread_mutex_lock F -GLIBC_2.0 __pthread_mutex_trylock F -GLIBC_2.0 __pthread_mutex_unlock F -GLIBC_2.0 __pthread_mutexattr_destroy F -GLIBC_2.0 __pthread_mutexattr_init F -GLIBC_2.0 __pthread_mutexattr_settype F -GLIBC_2.0 __pthread_once F -GLIBC_2.0 __pthread_setspecific F -GLIBC_2.0 __read F -GLIBC_2.0 __send F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __wait F -GLIBC_2.0 __write F -GLIBC_2.0 _pthread_cleanup_pop F -GLIBC_2.0 _pthread_cleanup_pop_restore F -GLIBC_2.0 _pthread_cleanup_push F -GLIBC_2.0 _pthread_cleanup_push_defer F -GLIBC_2.0 accept F -GLIBC_2.0 close F -GLIBC_2.0 connect F -GLIBC_2.0 fcntl F -GLIBC_2.0 flockfile F -GLIBC_2.0 fork F -GLIBC_2.0 fsync F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 funlockfile F -GLIBC_2.0 longjmp F -GLIBC_2.0 lseek F -GLIBC_2.0 msync F -GLIBC_2.0 nanosleep F -GLIBC_2.0 open F -GLIBC_2.0 pause F -GLIBC_2.0 pthread_atfork F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cancel F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_create F -GLIBC_2.0 pthread_detach F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_getspecific F -GLIBC_2.0 pthread_join F -GLIBC_2.0 pthread_key_create F -GLIBC_2.0 pthread_key_delete F -GLIBC_2.0 pthread_kill F -GLIBC_2.0 pthread_kill_other_threads_np F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_trylock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_mutexattr_destroy F -GLIBC_2.0 pthread_mutexattr_getkind_np F -GLIBC_2.0 pthread_mutexattr_init F -GLIBC_2.0 pthread_mutexattr_setkind_np F -GLIBC_2.0 pthread_once F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 pthread_setspecific F -GLIBC_2.0 pthread_sigmask F -GLIBC_2.0 pthread_testcancel F -GLIBC_2.0 raise F -GLIBC_2.0 read F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 sem_destroy F -GLIBC_2.0 sem_getvalue F -GLIBC_2.0 sem_init F -GLIBC_2.0 sem_post F -GLIBC_2.0 sem_trywait F -GLIBC_2.0 sem_wait F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 sigaction F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 sigwait F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 vfork F -GLIBC_2.0 wait F -GLIBC_2.0 waitpid F -GLIBC_2.0 write F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __libc_allocate_rtsig F -GLIBC_2.1 __libc_current_sigrtmax F -GLIBC_2.1 __libc_current_sigrtmin F -GLIBC_2.1 pthread_attr_getguardsize F -GLIBC_2.1 pthread_attr_getstackaddr F -GLIBC_2.1 pthread_attr_getstacksize F -GLIBC_2.1 pthread_attr_init F -GLIBC_2.1 pthread_attr_setguardsize F -GLIBC_2.1 pthread_attr_setstackaddr F -GLIBC_2.1 pthread_attr_setstacksize F -GLIBC_2.1 pthread_create F -GLIBC_2.1 pthread_getconcurrency F -GLIBC_2.1 pthread_mutexattr_gettype F -GLIBC_2.1 pthread_mutexattr_settype F -GLIBC_2.1 pthread_rwlock_destroy F -GLIBC_2.1 pthread_rwlock_init F -GLIBC_2.1 pthread_rwlock_rdlock F -GLIBC_2.1 pthread_rwlock_tryrdlock F -GLIBC_2.1 pthread_rwlock_trywrlock F -GLIBC_2.1 pthread_rwlock_unlock F -GLIBC_2.1 pthread_rwlock_wrlock F -GLIBC_2.1 pthread_rwlockattr_destroy F -GLIBC_2.1 pthread_rwlockattr_getkind_np F -GLIBC_2.1 pthread_rwlockattr_getpshared F -GLIBC_2.1 pthread_rwlockattr_init F -GLIBC_2.1 pthread_rwlockattr_setkind_np F -GLIBC_2.1 pthread_rwlockattr_setpshared F -GLIBC_2.1 pthread_setconcurrency F -GLIBC_2.1 sem_destroy F -GLIBC_2.1 sem_getvalue F -GLIBC_2.1 sem_init F -GLIBC_2.1 sem_post F -GLIBC_2.1 sem_trywait F -GLIBC_2.1 sem_wait F -GLIBC_2.1.1 GLIBC_2.1.1 A -GLIBC_2.1.1 sem_close F -GLIBC_2.1.1 sem_open F -GLIBC_2.1.1 sem_unlink F -GLIBC_2.1.2 GLIBC_2.1.2 A -GLIBC_2.1.2 __vfork F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __open64 F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pthread_rwlock_destroy F -GLIBC_2.2 __pthread_rwlock_init F -GLIBC_2.2 __pthread_rwlock_rdlock F -GLIBC_2.2 __pthread_rwlock_tryrdlock F -GLIBC_2.2 __pthread_rwlock_trywrlock F -GLIBC_2.2 __pthread_rwlock_unlock F -GLIBC_2.2 __pthread_rwlock_wrlock F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __res_state F -GLIBC_2.2 lseek64 F -GLIBC_2.2 open64 F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 pthread_attr_getstack F -GLIBC_2.2 pthread_attr_setstack F -GLIBC_2.2 pthread_barrier_destroy F -GLIBC_2.2 pthread_barrier_init F -GLIBC_2.2 pthread_barrier_wait F -GLIBC_2.2 pthread_barrierattr_destroy F -GLIBC_2.2 pthread_barrierattr_init F -GLIBC_2.2 pthread_barrierattr_setpshared F -GLIBC_2.2 pthread_condattr_getpshared F -GLIBC_2.2 pthread_condattr_setpshared F -GLIBC_2.2 pthread_getcpuclockid F -GLIBC_2.2 pthread_mutex_timedlock F -GLIBC_2.2 pthread_mutexattr_getpshared F -GLIBC_2.2 pthread_mutexattr_setpshared F -GLIBC_2.2 pthread_rwlock_timedrdlock F -GLIBC_2.2 pthread_rwlock_timedwrlock F -GLIBC_2.2 pthread_spin_destroy F -GLIBC_2.2 pthread_spin_init F -GLIBC_2.2 pthread_spin_lock F -GLIBC_2.2 pthread_spin_trylock F -GLIBC_2.2 pthread_spin_unlock F -GLIBC_2.2 pthread_yield F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 sem_timedwait F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 pthread_getattr_np F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_attr_setstack F -GLIBC_2.3.3 pthread_attr_setstacksize F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F diff --git a/sysdeps/unix/sysv/linux/alpha/libresolv.abilist b/sysdeps/unix/sysv/linux/alpha/libresolv.abilist deleted file mode 100644 index 2d92a35e81..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/libresolv.abilist +++ /dev/null @@ -1,100 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __b64_ntop F -GLIBC_2.0 __b64_pton F -GLIBC_2.0 __dn_comp F -GLIBC_2.0 __dn_count_labels F -GLIBC_2.0 __dn_skipname F -GLIBC_2.0 __fp_nquery F -GLIBC_2.0 __fp_query F -GLIBC_2.0 __fp_resstat F -GLIBC_2.0 __hostalias F -GLIBC_2.0 __loc_aton F -GLIBC_2.0 __loc_ntoa F -GLIBC_2.0 __p_cdname F -GLIBC_2.0 __p_cdnname F -GLIBC_2.0 __p_class F -GLIBC_2.0 __p_class_syms D 0xa8 -GLIBC_2.0 __p_fqname F -GLIBC_2.0 __p_fqnname F -GLIBC_2.0 __p_option F -GLIBC_2.0 __p_query F -GLIBC_2.0 __p_secstodate F -GLIBC_2.0 __p_time F -GLIBC_2.0 __p_type F -GLIBC_2.0 __p_type_syms D 0x450 -GLIBC_2.0 __putlong F -GLIBC_2.0 __putshort F -GLIBC_2.0 __res_close F -GLIBC_2.0 __res_dnok F -GLIBC_2.0 __res_hnok F -GLIBC_2.0 __res_isourserver F -GLIBC_2.0 __res_mailok F -GLIBC_2.0 __res_nameinquery F -GLIBC_2.0 __res_ownok F -GLIBC_2.0 __res_queriesmatch F -GLIBC_2.0 __res_send F -GLIBC_2.0 __sym_ntop F -GLIBC_2.0 __sym_ntos F -GLIBC_2.0 __sym_ston F -GLIBC_2.0 _gethtbyaddr F -GLIBC_2.0 _gethtbyname F -GLIBC_2.0 _gethtbyname2 F -GLIBC_2.0 _gethtent F -GLIBC_2.0 _getlong F -GLIBC_2.0 _getshort F -GLIBC_2.0 _res_opcodes D 0x80 -GLIBC_2.0 _sethtent F -GLIBC_2.0 dn_expand F -GLIBC_2.0 inet_net_ntop F -GLIBC_2.0 inet_net_pton F -GLIBC_2.0 inet_neta F -GLIBC_2.0 res_gethostbyaddr F -GLIBC_2.0 res_gethostbyname F -GLIBC_2.0 res_gethostbyname2 F -GLIBC_2.0 res_mkquery F -GLIBC_2.0 res_query F -GLIBC_2.0 res_querydomain F -GLIBC_2.0 res_search F -GLIBC_2.0 res_send_setqhook F -GLIBC_2.0 res_send_setrhook F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __dn_expand F -GLIBC_2.2 __res_hostalias F -GLIBC_2.2 __res_mkquery F -GLIBC_2.2 __res_nmkquery F -GLIBC_2.2 __res_nquery F -GLIBC_2.2 __res_nquerydomain F -GLIBC_2.2 __res_nsearch F -GLIBC_2.2 __res_nsend F -GLIBC_2.2 __res_query F -GLIBC_2.2 __res_querydomain F -GLIBC_2.2 __res_search F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/alpha/librt.abilist b/sysdeps/unix/sysv/linux/alpha/librt.abilist deleted file mode 100644 index 8699f6ccc4..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/librt.abilist +++ /dev/null @@ -1,56 +0,0 @@ -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 aio_cancel F -GLIBC_2.1 aio_cancel64 F -GLIBC_2.1 aio_error F -GLIBC_2.1 aio_error64 F -GLIBC_2.1 aio_fsync F -GLIBC_2.1 aio_fsync64 F -GLIBC_2.1 aio_init F -GLIBC_2.1 aio_read F -GLIBC_2.1 aio_read64 F -GLIBC_2.1 aio_return F -GLIBC_2.1 aio_return64 F -GLIBC_2.1 aio_suspend F -GLIBC_2.1 aio_suspend64 F -GLIBC_2.1 aio_write F -GLIBC_2.1 aio_write64 F -GLIBC_2.1 lio_listio F -GLIBC_2.1 lio_listio64 F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 clock_getcpuclockid F -GLIBC_2.2 clock_getres F -GLIBC_2.2 clock_gettime F -GLIBC_2.2 clock_nanosleep F -GLIBC_2.2 clock_settime F -GLIBC_2.2 shm_open F -GLIBC_2.2 shm_unlink F -GLIBC_2.2 timer_create F -GLIBC_2.2 timer_delete F -GLIBC_2.2 timer_getoverrun F -GLIBC_2.2 timer_gettime F -GLIBC_2.2 timer_settime F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 aio_cancel F -GLIBC_2.3 aio_cancel64 F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 timer_create F -GLIBC_2.3.3 timer_delete F -GLIBC_2.3.3 timer_getoverrun F -GLIBC_2.3.3 timer_gettime F -GLIBC_2.3.3 timer_settime F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/alpha/libthread_db.abilist b/sysdeps/unix/sysv/linux/alpha/libthread_db.abilist deleted file mode 100644 index a8a8c2c68d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/libthread_db.abilist +++ /dev/null @@ -1,44 +0,0 @@ -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 td_init F -GLIBC_2.1.3 td_log F -GLIBC_2.1.3 td_ta_clear_event F -GLIBC_2.1.3 td_ta_delete F -GLIBC_2.1.3 td_ta_enable_stats F -GLIBC_2.1.3 td_ta_event_addr F -GLIBC_2.1.3 td_ta_event_getmsg F -GLIBC_2.1.3 td_ta_get_nthreads F -GLIBC_2.1.3 td_ta_get_ph F -GLIBC_2.1.3 td_ta_get_stats F -GLIBC_2.1.3 td_ta_map_id2thr F -GLIBC_2.1.3 td_ta_map_lwp2thr F -GLIBC_2.1.3 td_ta_new F -GLIBC_2.1.3 td_ta_reset_stats F -GLIBC_2.1.3 td_ta_set_event F -GLIBC_2.1.3 td_ta_setconcurrency F -GLIBC_2.1.3 td_ta_thr_iter F -GLIBC_2.1.3 td_ta_tsd_iter F -GLIBC_2.1.3 td_thr_clear_event F -GLIBC_2.1.3 td_thr_dbresume F -GLIBC_2.1.3 td_thr_dbsuspend F -GLIBC_2.1.3 td_thr_event_enable F -GLIBC_2.1.3 td_thr_event_getmsg F -GLIBC_2.1.3 td_thr_get_info F -GLIBC_2.1.3 td_thr_getfpregs F -GLIBC_2.1.3 td_thr_getgregs F -GLIBC_2.1.3 td_thr_getxregs F -GLIBC_2.1.3 td_thr_getxregsize F -GLIBC_2.1.3 td_thr_set_event F -GLIBC_2.1.3 td_thr_setfpregs F -GLIBC_2.1.3 td_thr_setgregs F -GLIBC_2.1.3 td_thr_setprio F -GLIBC_2.1.3 td_thr_setsigpending F -GLIBC_2.1.3 td_thr_setxregs F -GLIBC_2.1.3 td_thr_sigsetmask F -GLIBC_2.1.3 td_thr_tsd F -GLIBC_2.1.3 td_thr_validate F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 td_symbol_list F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F diff --git a/sysdeps/unix/sysv/linux/alpha/libutil.abilist b/sysdeps/unix/sysv/linux/alpha/libutil.abilist deleted file mode 100644 index 89c67755c4..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 forkpty F -GLIBC_2.0 login F -GLIBC_2.0 login_tty F -GLIBC_2.0 logout F -GLIBC_2.0 logwtmp F -GLIBC_2.0 openpty F diff --git a/sysdeps/unix/sysv/linux/alpha/localplt.data b/sysdeps/unix/sysv/linux/alpha/localplt.data deleted file mode 100644 index 1f0e3b494e..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/localplt.data +++ /dev/null @@ -1,37 +0,0 @@ -libc.so: _OtsAddX ? -libc.so: _OtsConvertFloatTX ? -libc.so: _OtsConvertFloatXT ? -libc.so: _OtsCvtQUX ? -libc.so: _OtsCvtQX ? -libc.so: _OtsCvtXQ ? -libc.so: _OtsDivX ? -libc.so: _OtsEqlX ? -libc.so: _OtsGeqX ? -libc.so: _OtsGtrX ? -libc.so: _OtsLeqX ? -libc.so: _OtsLssX ? -libc.so: _OtsMulX ? -libc.so: _OtsNeqX ? -libc.so: _OtsNintXQ ? -libc.so: _OtsSubX ? -libc.so: _Unwind_Find_FDE -libc.so: calloc + RELA R_ALPHA_GLOB_DAT -libc.so: free + RELA R_ALPHA_GLOB_DAT -libc.so: malloc + RELA R_ALPHA_GLOB_DAT -libc.so: memalign + RELA R_ALPHA_GLOB_DAT -libc.so: realloc + RELA R_ALPHA_GLOB_DAT -libm.so: matherr + RELA R_ALPHA_GLOB_DAT -# We used to offer inline functions that used this, so it must be exported. -# Ought to reorg things such that carg isn't thus forced to use a plt. -libm.so: __atan2 -# The dynamic loader needs __tls_get_addr for TLS. -ld.so: __tls_get_addr ? -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc + RELA R_ALPHA_GLOB_DAT -ld.so: calloc + RELA R_ALPHA_GLOB_DAT -ld.so: realloc + RELA R_ALPHA_GLOB_DAT -ld.so: free + RELA R_ALPHA_GLOB_DAT -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error + RELA R_ALPHA_GLOB_DAT -ld.so: _dl_catch_error + RELA R_ALPHA_GLOB_DAT diff --git a/sysdeps/unix/sysv/linux/alpha/lxstat.c b/sysdeps/unix/sysv/linux/alpha/lxstat.c deleted file mode 100644 index 8e49754f4c..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/lxstat.c +++ /dev/null @@ -1,58 +0,0 @@ -/* lxstat using old-style Unix stat system call. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __lxstat64 __lxstat64_disable - -#include -#include -#include -#include -#include -#include -#include - -#undef __lxstat64 - - -/* Get information about the file NAME in BUF. */ -int -__lxstat (int vers, const char *name, struct stat *buf) -{ - INTERNAL_SYSCALL_DECL (err); - int result; - struct kernel_stat kbuf; - - if (vers == _STAT_VER_KERNEL64) - { - result = INTERNAL_SYSCALL (lstat64, err, 2, name, buf); - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return result; - __set_errno (INTERNAL_SYSCALL_ERRNO (result, err)); - return -1; - } - - result = INTERNAL_SYSCALL (lstat, err, 2, name, &kbuf); - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return __xstat_conv (vers, &kbuf, buf); - __set_errno (INTERNAL_SYSCALL_ERRNO (result, err)); - return -1; -} -hidden_def (__lxstat) -weak_alias (__lxstat, _lxstat); -strong_alias (__lxstat, __lxstat64); -hidden_ver (__lxstat, __lxstat64) diff --git a/sysdeps/unix/sysv/linux/alpha/makecontext.S b/sysdeps/unix/sysv/linux/alpha/makecontext.S deleted file mode 100644 index b9529bd207..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/makecontext.S +++ /dev/null @@ -1,163 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - -ENTRY(__makecontext) - ldgp $29, 0($27) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - /* Compute top of stack, including arguments. */ - ldq $1, UC_STACK+SS_SP($16) - ldq $2, UC_STACK+SS_SIZE($16) - addq $1, $2, $8 - subq $18, 6, $1 - cmovlt $1, 0, $1 - s8addq $1, 0, $2 - subq $8, $2, $8 - - /* Copy all parameters. Switch statement header here. */ - ldah $3, $jumptable($29) !gprelhigh - cmple $18, 6, $1 - mov $18, $2 - cmoveq $1, 7, $2 - s4addq $2, $3, $3 - ldl $4, $jumptable($3) !gprellow - addq $4, $29, $4 - jmp $31, ($4), $args1 - - .section .rodata - .align 2 -$jumptable: - .gprel32 $args0 - .gprel32 $args1 - .gprel32 $args2 - .gprel32 $args3 - .gprel32 $args4 - .gprel32 $args5 - .gprel32 $args6 - .gprel32 $argsN - .text - - /* Here we process arguments 7 through N. This is a straight - stack-to-stack copy. */ - .align 4 -$argsN: - subq $18, 6, $1 - lda $2, 0($8) - lda $3, 3*8($30) - .align 4 -1: - ldq $0, 0($3) - subq $1, 1, $1 - lda $3, 8($3) - stq $0, 0($2) - lda $2, 8($2) - bne $1, 1b - - /* Here we process arguments 6 through 0. This involves - copying into the register save areas of the ucontext. */ - .align 4 -$args6: - ldq $0, 2*8($30) - stq $0, UC_SIGCTX+SC_REGS+21*8($16) - unop - stq $0, UC_SIGCTX+SC_FPREGS+21*8($16) -$args5: - ldq $0, 1*8($30) - stq $0, UC_SIGCTX+SC_REGS+20*8($16) - unop - stq $0, UC_SIGCTX+SC_FPREGS+20*8($16) -$args4: - ldq $0, 0*8($30) - stq $0, UC_SIGCTX+SC_REGS+19*8($16) - unop - stq $0, UC_SIGCTX+SC_FPREGS+19*8($16) -$args3: - unop - stq $21, UC_SIGCTX+SC_REGS+18*8($16) - unop - stt $f21, UC_SIGCTX+SC_FPREGS+18*8($16) -$args2: - unop - stq $20, UC_SIGCTX+SC_REGS+17*8($16) - unop - stt $f20, UC_SIGCTX+SC_FPREGS+17*8($16) -$args1: - unop - stq $19, UC_SIGCTX+SC_REGS+16*8($16) - unop - stt $f19, UC_SIGCTX+SC_FPREGS+16*8($16) -$args0: - - /* Set up the registers ready to invoke __startcontext. - We seed $27 with the target function address, and $9 - with the link from ucp. */ - ldah $0, __startcontext($29) !gprelhigh - ldq $1, UC_LINK($16) - lda $0, __startcontext($0) !gprellow - stq $17, UC_SIGCTX+SC_REGS+27*8($16) - stq $8, UC_SIGCTX+SC_REGS+30*8($16) - stq $0, UC_SIGCTX+SC_PC($16) - stq $1, UC_SIGCTX+SC_REGS+9*8($16) - - /* No return value from makecontext. */ - ret - -END(__makecontext) -weak_alias (__makecontext, makecontext) - -/* This function is where a new makecontext "thread" begins life. - We have already set up $27 for calling the target function, and - we've set $9 to the UC_LINK of the parent context. - - If the function returns, we either jump to the linked context - (if non-null) or exit. */ - - .align 4 - .ent __startcontext -__startcontext: - .frame $31, 0, $31, 0 - .prologue 0 - - jsr $26, ($27), 0 - ldgp $29, 0($26) - mov $9, $16 - beq $9, 1f - -#ifdef PIC - bsr $26, __setcontext !samegp -1: mov $31, $16 - bsr $26, HIDDEN_JUMPTARGET(exit) !samegp -#else - jsr $26, __setcontext - ldgp $29, 0($26) -1: mov $31, $16 - jsr $26, HIDDEN_JUMPTARGET(exit) -#endif - - halt - - .end __startcontext diff --git a/sysdeps/unix/sysv/linux/alpha/nldbl-abi.h b/sysdeps/unix/sysv/linux/alpha/nldbl-abi.h deleted file mode 100644 index bd985cc59c..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/nldbl-abi.h +++ /dev/null @@ -1,8 +0,0 @@ -/* ABI version for long double switch. - This is used by the Versions and math_ldbl_opt.h files in - sysdeps/ieee754/ldbl-opt/. It gives the ABI version where - long double == double was replaced with proper long double - for libm *l functions and libc functions using long double. */ - -#define NLDBL_VERSION GLIBC_2.4 -#define LONG_DOUBLE_COMPAT_VERSION GLIBC_2_4 diff --git a/sysdeps/unix/sysv/linux/alpha/oldglob.c b/sysdeps/unix/sysv/linux/alpha/oldglob.c deleted file mode 100644 index edd6d47ba9..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/oldglob.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This file contains only wrappers around the real glob functions. It - became necessary since the glob_t structure changed. */ -#include -#include -#include - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) - -/* This is the old structure. The difference is that the gl_pathc and - gl_offs elements have type `int'. */ -typedef struct - { - int gl_pathc; /* Count of paths matched by the pattern. */ - char **gl_pathv; /* List of matched pathnames. */ - int gl_offs; /* Slots to reserve in `gl_pathv'. */ - int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */ - - /* If the GLOB_ALTDIRFUNC flag is set, the following functions - are used instead of the normal file access functions. */ - void (*gl_closedir) (void *); - struct dirent *(*gl_readdir) (void *); - __ptr_t (*gl_opendir) (const char *); - int (*gl_lstat) (const char *, struct stat *); - int (*gl_stat) (const char *, struct stat *); - } old_glob_t; - - -int -attribute_compat_text_section -__old_glob (const char *pattern, int flags, - int (*errfunc) (const char *, int), - old_glob_t *pglob) -{ - glob_t correct; - int result; - - /* Construct an object of correct type. */ - correct.gl_pathc = pglob->gl_pathc; - correct.gl_pathv = pglob->gl_pathv; - correct.gl_offs = pglob->gl_offs; - correct.gl_flags = pglob->gl_flags; - correct.gl_closedir = pglob->gl_closedir; - correct.gl_readdir = pglob->gl_readdir; - correct.gl_opendir = pglob->gl_opendir; - correct.gl_lstat = pglob->gl_lstat; - correct.gl_stat = pglob->gl_stat; - - result = glob (pattern, flags, errfunc, &correct); - - /* And convert it back. */ - pglob->gl_pathc = correct.gl_pathc; - pglob->gl_pathv = correct.gl_pathv; - pglob->gl_offs = correct.gl_offs; - pglob->gl_flags = correct.gl_flags; - pglob->gl_closedir = correct.gl_closedir; - pglob->gl_readdir = correct.gl_readdir; - pglob->gl_opendir = correct.gl_opendir; - pglob->gl_lstat = correct.gl_lstat; - pglob->gl_stat = correct.gl_stat; - - return result; -} -compat_symbol (libc, __old_glob, glob, GLIBC_2_0); - - -/* Free storage allocated in PGLOB by a previous `glob' call. */ -void -attribute_compat_text_section -__old_globfree (old_glob_t *pglob) -{ - glob_t correct; - - /* We only need these two symbols. */ - correct.gl_pathc = pglob->gl_pathc; - correct.gl_pathv = pglob->gl_pathv; - correct.gl_offs = pglob->gl_offs; - - globfree (&correct); -} -compat_symbol (libc, __old_globfree, globfree, GLIBC_2_0); - -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/pipe.S b/sysdeps/unix/sysv/linux/alpha/pipe.S deleted file mode 100644 index 1e7ec1c199..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/pipe.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/pt-vfork.S b/sysdeps/unix/sysv/linux/alpha/pt-vfork.S deleted file mode 100644 index a2cfe5f4c3..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/pt-vfork.S +++ /dev/null @@ -1,43 +0,0 @@ -/* vfork ABI-compatibility entry points for libpthread. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* libpthread used to have its own vfork implementation that differed - from libc's only in having a pointless micro-optimization. There - is no longer any use to having a separate copy in libpthread, but - the historical ABI requires it. For static linking, there is no - need to provide anything here--the libc version will be linked in. - For shared library ABI compatibility, there must be __vfork and - vfork symbols in libpthread.so. */ - -#if (SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_20) \ - || SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_20)) - -#include - -#endif - -#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_20) -compat_symbol (libpthread, __libc_vfork, vfork, GLIBC_2_0); -#endif - -#if SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_20) -strong_alias (__libc_vfork, __vfork_compat) -compat_symbol (libpthread, __vfork_compat, __vfork, GLIBC_2_1_2); -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/register-dump.h b/sysdeps/unix/sysv/linux/alpha/register-dump.h deleted file mode 100644 index b9d277ce3e..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/register-dump.h +++ /dev/null @@ -1,156 +0,0 @@ -/* Dump registers. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* We will print the register dump in this format: - - V0: XXXXXXXXXXXXXXXX T0: XXXXXXXXXXXXXXXX T1: XXXXXXXXXXXXXXXX - T2: XXXXXXXXXXXXXXXX T3: XXXXXXXXXXXXXXXX T4: XXXXXXXXXXXXXXXX - T5: XXXXXXXXXXXXXXXX T6: XXXXXXXXXXXXXXXX T7: XXXXXXXXXXXXXXXX - S0: XXXXXXXXXXXXXXXX S1: XXXXXXXXXXXXXXXX S2: XXXXXXXXXXXXXXXX - S3: XXXXXXXXXXXXXXXX S4: XXXXXXXXXXXXXXXX S5: XXXXXXXXXXXXXXXX - S6: XXXXXXXXXXXXXXXX A0: XXXXXXXXXXXXXXXX A1: XXXXXXXXXXXXXXXX - A2: XXXXXXXXXXXXXXXX A3: XXXXXXXXXXXXXXXX A4: XXXXXXXXXXXXXXXX - A5: XXXXXXXXXXXXXXXX T8: XXXXXXXXXXXXXXXX T9: XXXXXXXXXXXXXXXX - T10: XXXXXXXXXXXXXXXX T11: XXXXXXXXXXXXXXXX RA: XXXXXXXXXXXXXXXX - T12: XXXXXXXXXXXXXXXX AT: XXXXXXXXXXXXXXXX GP: XXXXXXXXXXXXXXXX - SP: XXXXXXXXXXXXXXXX PC: XXXXXXXXXXXXXXXX - - FP0: XXXXXXXXXXXXXXXX FP1: XXXXXXXXXXXXXXXX FP2: XXXXXXXXXXXXXXXX - FP3: XXXXXXXXXXXXXXXX FP4: XXXXXXXXXXXXXXXX FP5: XXXXXXXXXXXXXXXX - FP6: XXXXXXXXXXXXXXXX FP7: XXXXXXXXXXXXXXXX FP8: XXXXXXXXXXXXXXXX - FP9: XXXXXXXXXXXXXXXX FP10: XXXXXXXXXXXXXXXX FP11: XXXXXXXXXXXXXXXX - FP12: XXXXXXXXXXXXXXXX FP13: XXXXXXXXXXXXXXXX FP14: XXXXXXXXXXXXXXXX - FP15: XXXXXXXXXXXXXXXX FP16: XXXXXXXXXXXXXXXX FP17: XXXXXXXXXXXXXXXX - FP18: XXXXXXXXXXXXXXXX FP19: XXXXXXXXXXXXXXXX FP20: XXXXXXXXXXXXXXXX - FP21: XXXXXXXXXXXXXXXX FP22: XXXXXXXXXXXXXXXX FP23: XXXXXXXXXXXXXXXX - FP24: XXXXXXXXXXXXXXXX FP25: XXXXXXXXXXXXXXXX FP26: XXXXXXXXXXXXXXXX - FP27: XXXXXXXXXXXXXXXX FP28: XXXXXXXXXXXXXXXX FP29: XXXXXXXXXXXXXXXX - FP30: XXXXXXXXXXXXXXXX FPCR: XXXXXXXXXXXXXXXX - - TA0: XXXXXXXXXXXXXXXX TA1: XXXXXXXXXXXXXXXX TA2: XXXXXXXXXXXXXXXX -*/ - -#define NREGS (32+32+3) - -static const char __attribute__((aligned(8))) regnames[NREGS][8] = -{ - " V0: ", " T0: ", " T1: ", - " T2: ", " T3: ", " T4: ", - " T5: ", " T6: ", " T7: ", - " S0: ", " S1: ", " S2: ", - " S3: ", " S4: ", " S5: ", - " S6: ", " A0: ", " A1: ", - " A2: ", " A3: ", " A4: ", - " A5: ", " T8: ", " T9: ", - " T10: ", " T11: ", " RA: ", - " T12: ", " AT: ", " GP: ", - " SP: ", " PC: ", - - " FP0: ", " FP1: ", " FP2: ", - " FP3: ", " FP4: ", " FP5: ", - " FP6: ", " FP7: ", " FP8: ", - " FP9: ", " FP10: ", " FP11: ", - " FP12: ", " FP13: ", " FP14: ", - " FP15: ", " FP16: ", " FP17: ", - " FP18: ", " FP19: ", " FP20: ", - " FP21: ", " FP22: ", " FP23: ", - " FP24: ", " FP25: ", " FP26: ", - " FP27: ", " FP28: ", " FP29: ", - " FP30: ", " FPCR: ", - - " TA0: ", " TA1: ", " TA2: " -}; - -#define O(FIELD, LF) offsetof(struct sigcontext, FIELD) + LF - -static const int offsets[NREGS] = -{ - O(sc_regs[0], 0), O(sc_regs[1], 0), O(sc_regs[2], 1), - O(sc_regs[3], 0), O(sc_regs[4], 0), O(sc_regs[5], 1), - O(sc_regs[6], 0), O(sc_regs[7], 0), O(sc_regs[8], 1), - O(sc_regs[9], 0), O(sc_regs[10], 0), O(sc_regs[11], 1), - O(sc_regs[12], 0), O(sc_regs[13], 0), O(sc_regs[14], 1), - O(sc_regs[15], 0), O(sc_regs[16], 0), O(sc_regs[17], 1), - O(sc_regs[18], 0), O(sc_regs[19], 0), O(sc_regs[20], 1), - O(sc_regs[21], 0), O(sc_regs[22], 0), O(sc_regs[23], 1), - O(sc_regs[24], 0), O(sc_regs[25], 0), O(sc_regs[26], 1), - O(sc_regs[27], 0), O(sc_regs[28], 0), O(sc_regs[29], 1), - O(sc_regs[30], 0), O(sc_pc, 2), - - O(sc_fpregs[0], 0), O(sc_fpregs[1], 0), O(sc_fpregs[2], 1), - O(sc_fpregs[3], 0), O(sc_fpregs[4], 0), O(sc_fpregs[5], 1), - O(sc_fpregs[6], 0), O(sc_fpregs[7], 0), O(sc_fpregs[8], 1), - O(sc_fpregs[9], 0), O(sc_fpregs[10], 0), O(sc_fpregs[11], 1), - O(sc_fpregs[12], 0), O(sc_fpregs[13], 0), O(sc_fpregs[14], 1), - O(sc_fpregs[15], 0), O(sc_fpregs[16], 0), O(sc_fpregs[17], 1), - O(sc_fpregs[18], 0), O(sc_fpregs[19], 0), O(sc_fpregs[20], 1), - O(sc_fpregs[21], 0), O(sc_fpregs[22], 0), O(sc_fpregs[23], 1), - O(sc_fpregs[24], 0), O(sc_fpregs[25], 0), O(sc_fpregs[26], 1), - O(sc_fpregs[27], 0), O(sc_fpregs[28], 0), O(sc_fpregs[29], 1), - O(sc_fpregs[30], 0), O(sc_fpcr, 2), - - O(sc_traparg_a0, 0), O(sc_traparg_a1, 0), O(sc_traparg_a2, 1) -}; - -#undef O - -static void -register_dump (int fd, struct sigcontext *ctx) -{ - char buf[NREGS*(8+16) + 25 + 80]; - char *p = buf; - size_t i; - - p = stpcpy (p, "Register dump:\n\n"); - - for (i = 0; i < NREGS; ++i) - { - int this_offset, this_lf; - unsigned long val; - signed long j; - - this_offset = offsets[i]; - this_lf = this_offset & 7; - - val = *(unsigned long *)(((size_t)ctx + this_offset) & -8); - - memcpy (p, regnames[i], 8); - p += 8; - - for (j = 60; j >= 0; j -= 4) - { - unsigned long x = (val >> j) & 15; - x += x < 10 ? '0' : 'a' - 10; - *p++ = x; - } - - if (this_lf > 0) - { - if (this_lf > 1) - *p++ = '\n'; - *p++ = '\n'; - } - } - - write (fd, buf, p - buf); -} - -#define REGISTER_DUMP register_dump (fd, ctx) diff --git a/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S b/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S deleted file mode 100644 index 45493484c7..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/rt_sigaction.S +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1998 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* On Alpha we desparately want to avoid having to issue an imb. Ordinarily - the kernel would have to issue one after setting up the signal return - stack, but the Linux rt_sigaction syscall is prepared to accept a pointer - to the sigreturn syscall, instead of inlining it on the stack. - - This just about halves signal delivery time. */ - - .text - -ENTRY(__syscall_rt_sigaction) - cfi_startproc - ldgp gp,0(pv) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - .prologue 1 - - beq a1, 0f - ldl t0, 8(a1) # sa_flags - - ldah a4, __syscall_sigreturn(gp) !gprelhigh - ldah t1, __syscall_rt_sigreturn(gp) !gprelhigh - lda a4, __syscall_sigreturn(a4) !gprellow - lda t1, __syscall_rt_sigreturn(t1) !gprellow - and t0, 0x40, t0 # SA_SIGINFO - cmovne t0, t1, a4 - -0: ldi v0, __NR_rt_sigaction - callsys - bne a3, SYSCALL_ERROR_LABEL - ret - cfi_endproc -PSEUDO_END(__syscall_rt_sigaction) - -/* To enable unwinding through the signal frame without special hackery - elsewhere, describe the entire struct sigcontext with unwind info. - - In order to minimize the size of the encoding, we set the CFA to the - end of the sigcontext, which makes all of the registers have small - negative offsets from that. */ - - .macro SIGCONTEXT_REGS_I base, from=0 - cfi_offset (\from, \base + (4 + \from) * 8) - .if 30-\from - SIGCONTEXT_REGS_I \base, "(\from+1)" - .endif - .endm - - .macro SIGCONTEXT_REGS_F base, from=32 - cfi_offset (\from, \base + (4 + 1 + \from) * 8) - .if 62-\from - SIGCONTEXT_REGS_F \base, "(\from+1)" - .endif - .endm - - .macro SIGCONTEXT_REGS base - SIGCONTEXT_REGS_I \base - SIGCONTEXT_REGS_F \base - cfi_offset (63, \base + (4 + 32 + 1 + 32) * 8) - cfi_offset (64, \base + 2 * 8) - .endm - - cfi_startproc - cfi_return_column (64) - .cfi_signal_frame - SIGCONTEXT_REGS -648 - cfi_def_cfa_offset (648) - - /* While this frame is marked as a signal frame, that only applies - to how this return address is handled for the outer frame. - The return address that arrived here, from the inner frame, is - not marked as a signal frame and so the unwinder still tries to - subtract 1 to examine the presumed call insn. Thus we must - extend the unwind info to a nop before the start. */ - nop - .align 4 - -__syscall_sigreturn: - mov sp, a0 - ldi v0, __NR_sigreturn - callsys - .size __syscall_sigreturn, .-__syscall_sigreturn - .type __syscall_sigreturn, @function - - /* See above wrt including the nop. */ - cfi_def_cfa_offset (176 + 648) - nop - .align 4 - -__syscall_rt_sigreturn: - mov sp,a0 - ldi v0,__NR_rt_sigreturn - callsys - .size __syscall_rt_sigreturn, .-__syscall_rt_sigreturn - .type __syscall_rt_sigreturn, @function - - cfi_endproc diff --git a/sysdeps/unix/sysv/linux/alpha/select.c b/sysdeps/unix/sysv/linux/alpha/select.c deleted file mode 100644 index bb0298f6a4..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/select.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Linux/alpha select implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include -#include - -int -__new_select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, - struct timeval *timeout) -{ - return SYSCALL_CANCEL (select, nfds, readfds, writefds, exceptfds, timeout); -} -strong_alias (__new_select, __select) -libc_hidden_def (__select) - -default_symbol_version (__new_select, select, GLIBC_2.1); - -strong_alias (__new_select, __new_select_private); -symbol_version (__new_select_private, __select, GLIBC_2.1); - -/* Old timeval32 compat calls. */ -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) -int -__select_tv32 (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, - struct timeval *timeout) -{ - return SYSCALL_CANCEL (osf_select, nfds, readfds, writefds, exceptfds, - timeout); -} -strong_alias (__select_tv32, __select_tv32_1) - -compat_symbol (libc, __select_tv32, __select, GLIBC_2_0); -compat_symbol (libc, __select_tv32_1, select, GLIBC_2_0); -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/setcontext.S b/sysdeps/unix/sysv/linux/alpha/setcontext.S deleted file mode 100644 index ea8601f34f..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/setcontext.S +++ /dev/null @@ -1,34 +0,0 @@ -/* Install given context. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - -/* In case the user fiddled it, copy the "official" signal mask - from the ucontext_t into the sigcontext structure. */ -#undef PSEUDO_PREPARE_ARGS -#define PSEUDO_PREPARE_ARGS \ - ldq $0, UC_SIGMASK($16); \ - stq $0, UC_SIGCTX+SC_MASK($16); \ - lda $16, UC_SIGCTX($16); - -PSEUDO(__setcontext, sigreturn, 1) - ret -PSEUDO_END(__setcontext) -weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/alpha/setfpucw.c b/sysdeps/unix/sysv/linux/alpha/setfpucw.c deleted file mode 100644 index 54484f8847..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/setfpucw.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Set FP exception mask and rounding mode. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - -#define convert_bit(M, F, T) \ - ((T) < (F) \ - ? ((M) / ((F) / (T))) & (T) \ - : ((M) & (F)) * ((T) / (F))) - - -void -__setfpucw (fpu_control_t fpu_control) -{ - unsigned long fpcr, swcr, fc = (int)fpu_control; - - /* ??? If this was a real external interface we'd want to read the current - exception state with __ieee_get_fp_control. But this is an internal - function only called at process startup, so there's no point in trying - to preserve exceptions that cannot have been raised yet. Indeed, this - entire function is likely to be one big nop unless the user overrides - the default __fpu_control variable. */ - - /* Convert the rounding mode from fpu_control.h format. */ - const unsigned long conv_rnd - = ( (FE_TOWARDZERO << (_FPU_RC_ZERO >> 8)) - | (FE_DOWNWARD << (_FPU_RC_DOWN >> 8)) - | (FE_TONEAREST << (_FPU_RC_NEAREST >> 8)) - | (FE_UPWARD << (_FPU_RC_UP >> 8))); - - fpcr = ((conv_rnd >> ((fc >> 8) & 3)) & 3) << FPCR_ROUND_SHIFT; - - /* Convert the exception mask from fpu_control.h format. */ - swcr = convert_bit (~fc, _FPU_MASK_IM, FE_INVALID >> SWCR_ENABLE_SHIFT); - swcr |= convert_bit (~fc, _FPU_MASK_DM, FE_UNDERFLOW >> SWCR_ENABLE_SHIFT); - swcr |= convert_bit (~fc, _FPU_MASK_ZM, FE_DIVBYZERO >> SWCR_ENABLE_SHIFT); - swcr |= convert_bit (~fc, _FPU_MASK_OM, FE_OVERFLOW >> SWCR_ENABLE_SHIFT); - swcr |= convert_bit (~fc, _FPU_MASK_PM, FE_INEXACT >> SWCR_ENABLE_SHIFT); - - /* Install everything. */ - __fpu_control = fc; - asm volatile ("mt_fpcr %0" : : "f"(fpcr)); - __ieee_set_fp_control(swcr); -} diff --git a/sysdeps/unix/sysv/linux/alpha/shlib-versions b/sysdeps/unix/sysv/linux/alpha/shlib-versions deleted file mode 100644 index cd913c257c..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/shlib-versions +++ /dev/null @@ -1,14 +0,0 @@ -libm=6.1 -libc=6.1 - -ld=ld-linux.so.2 - -libdl=2.1 - -libutil=1.1 - -libresolv=2.1 - -libnsl=1.1 -libcrypt=1.1 -libBrokenLocale=1.1 diff --git a/sysdeps/unix/sysv/linux/alpha/sigaction.c b/sysdeps/unix/sysv/linux/alpha/sigaction.c deleted file mode 100644 index 3092a3cf55..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sigaction.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* - * In order to get the hidden arguments for rt_sigaction set up - * properly, we need to call the assembly version. Detect this in the - * INLINE_SYSCALL macro, and fail to expand inline in that case. - */ - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - (__NR_##name == __NR_rt_sigaction \ - ? __syscall_rt_sigaction(args) \ - : INLINE_SYSCALL1(name, nr, args)) - -struct kernel_sigaction; -extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *, - struct kernel_sigaction *, size_t); - -#include diff --git a/sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h b/sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h deleted file mode 100644 index e8b74d56ea..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define SIGCONTEXT int _code, struct sigcontext * -#define SIGCONTEXT_EXTRA_ARGS _code, -#define GET_PC(ctx) ((void *) (ctx)->sc_pc) -#define GET_FRAME(ctx) ((void *) (ctx)->sc_regs[15]) -#define GET_STACK(ctx) ((void *) (ctx)->sc_regs[30]) -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff --git a/sysdeps/unix/sysv/linux/alpha/sigprocmask.c b/sysdeps/unix/sysv/linux/alpha/sigprocmask.c deleted file mode 100644 index 39a07de475..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sigprocmask.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger (davidm@azstarnet.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* When there is kernel support for more than 64 signals, we'll have to - switch to a new system call convention here. */ - -int -__sigprocmask (int how, const sigset_t *set, sigset_t *oset) -{ - unsigned long int setval; - long result; - - if (set) - setval = set->__val[0]; - else - { - setval = 0; - how = SIG_BLOCK; /* ensure blocked mask doesn't get changed */ - } - - result = INLINE_SYSCALL (osf_sigprocmask, 2, how, setval); - if (result == -1) - /* If there are ever more than 63 signals, we need to recode this - in assembler since we wouldn't be able to distinguish a mask of - all 1s from -1, but for now, we're doing just fine... */ - return result; - - if (oset) - { - oset->__val[0] = result; - result = _SIGSET_NWORDS; - while (--result > 0) - oset->__val[result] = 0; - } - return 0; -} - -weak_alias (__sigprocmask, sigprocmask); diff --git a/sysdeps/unix/sysv/linux/alpha/sizes.h b/sysdeps/unix/sysv/linux/alpha/sizes.h deleted file mode 100644 index c7d0d3455b..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sizes.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SIZES_H -#define _SIZES_H 1 - -#define PTR_SIZE_STR "8" - -#endif /* sizes.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/statfs64.c b/sysdeps/unix/sysv/linux/alpha/statfs64.c deleted file mode 100644 index fe39cc4685..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/statfs64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/statvfs.c b/sysdeps/unix/sysv/linux/alpha/statvfs.c deleted file mode 100644 index 78069e96f4..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/statvfs.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/statvfs64.c b/sysdeps/unix/sysv/linux/alpha/statvfs64.c deleted file mode 100644 index c80e17751d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/statvfs64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/swapcontext.S b/sysdeps/unix/sysv/linux/alpha/swapcontext.S deleted file mode 100644 index 31a0babfb1..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/swapcontext.S +++ /dev/null @@ -1,50 +0,0 @@ -/* Save current context and install the given one. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -ENTRY(__swapcontext) - -#ifdef PROF - ldgp $29, 0($27) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#elif defined PIC - .prologue 0 -#else - ldgp $29, 0($27) - .prologue 1 -#endif - -#ifdef PIC - unop - bsr $0, __getcontext_x !samegp - mov $17, $16 - br $31, __setcontext !samegp -#else - jsr $0, __getcontext_x - mov $17, $16 - jmp $31, __setcontext -#endif - -END(__swapcontext) -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/alpha/sys/acct.h b/sysdeps/unix/sysv/linux/alpha/sys/acct.h deleted file mode 100644 index 3da9cde89b..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/acct.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_ACCT_H - -#define _SYS_ACCT_H 1 -#include - -#include - -__BEGIN_DECLS - -#define ACCT_COMM 16 - -struct acct - { - char ac_comm[ACCT_COMM]; /* Accounting command name. */ - time_t ac_utime; /* Accounting user time. */ - time_t ac_stime; /* Accounting system time. */ - time_t ac_etime; /* Accounting elapsed time. */ - time_t ac_btime; /* Beginning time. */ - unsigned int ac_uid; /* Accounting user ID. */ - unsigned int ac_gid; /* Accounting group ID. */ - unsigned int ac_tty; /* Controlling tty. */ - /* Please note that the value of the `ac_tty' field, a device number, - is encoded differently in the kernel and for the libc dev_t type. */ - char ac_flag; /* Accounting flag. */ - long int ac_minflt; /* Accounting minor pagefaults. */ - long int ac_majflt; /* Accounting major pagefaults. */ - long int ac_exitcode; /* Accounting process exitcode. */ - }; - -enum - { - AFORK = 0001, /* Has executed fork, but no exec. */ - ASU = 0002, /* Used super-user privileges. */ - ACORE = 0004, /* Dumped core. */ - AXSIG = 0010 /* Killed by a signal. */ - }; - -#define AHZ 100 - - -/* Switch process accounting on and off. */ -extern int acct (const char *__filename) __THROW; - -__END_DECLS - -#endif /* sys/acct.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/sys/io.h b/sysdeps/unix/sysv/linux/alpha/sys/io.h deleted file mode 100644 index 3a6798edc5..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/io.h +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_IO_H - -#define _SYS_IO_H 1 -#include - -__BEGIN_DECLS - -/* If TURN_ON is TRUE, request for permission to do direct i/o on the - port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O - permission off for that range. This call requires root privileges. - - Portability note: not all Linux platforms support this call. Most - platforms based on the PC I/O architecture probably will, however. - E.g., Linux/Alpha for Alpha PCs supports this. */ -extern int ioperm (unsigned long int __from, unsigned long int __num, - int __turn_on) __THROW; - -/* Set the I/O privilege level to LEVEL. If LEVEL>3, permission to - access any I/O port is granted. This call requires root - privileges. */ -extern int iopl (int __level) __THROW; - -/* Return the physical address of the DENSE I/O memory or NULL if none - is available (e.g. on a jensen). */ -extern unsigned long int _bus_base (void) __THROW __attribute__ ((const)); -extern unsigned long int bus_base (void) __THROW __attribute__ ((const)); - -/* Return the physical address of the SPARSE I/O memory. */ -extern unsigned long _bus_base_sparse (void) __THROW __attribute__ ((const)); -extern unsigned long bus_base_sparse (void) __THROW __attribute__ ((const)); - -/* Return the HAE shift used by the SPARSE I/O memory. */ -extern int _hae_shift (void) __THROW __attribute__ ((const)); -extern int hae_shift (void) __THROW __attribute__ ((const)); - -/* Previous three are deprecated in favour of the following, which - knows about multiple PCI "hoses". Provide the PCI bus and dfn - numbers just as to pciconfig_read/write. */ - -enum __pciconfig_iobase_which -{ - IOBASE_HOSE = 0, /* Return hose index. */ - IOBASE_SPARSE_MEM = 1, /* Return physical memory addresses. */ - IOBASE_DENSE_MEM = 2, - IOBASE_SPARSE_IO = 3, - IOBASE_DENSE_IO = 4 -}; - -extern long pciconfig_iobase(enum __pciconfig_iobase_which __which, - unsigned long int __bus, - unsigned long int __dfn) - __THROW __attribute__ ((const)); - -/* Access PCI space protected from machine checks. */ -extern int pciconfig_read (unsigned long int __bus, - unsigned long int __dfn, - unsigned long int __off, - unsigned long int __len, - unsigned char *__buf) __THROW; - -extern int pciconfig_write (unsigned long int __bus, - unsigned long int __dfn, - unsigned long int __off, - unsigned long int __len, - unsigned char *__buf) __THROW; - -/* Userspace declarations. */ -extern unsigned int inb (unsigned long __port) __THROW; -extern unsigned int inw (unsigned long __port) __THROW; -extern unsigned int inl (unsigned long __port) __THROW; -extern void outb (unsigned char __b, unsigned long __port) __THROW; -extern void outw (unsigned short __w, unsigned long __port) __THROW; -extern void outl (unsigned int __l, unsigned long __port) __THROW; - -__END_DECLS - -#endif /* _SYS_IO_H */ diff --git a/sysdeps/unix/sysv/linux/alpha/sys/procfs.h b/sysdeps/unix/sysv/linux/alpha/sys/procfs.h deleted file mode 100644 index abc9fd8d6e..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/procfs.h +++ /dev/null @@ -1,127 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somehow modelled after the file of the same name on SysVr4 - systems. It provides a definition of the core file format for ELF - used on Linux. */ - -#include -#include -#include -#include -#include -#include - -__BEGIN_DECLS - -/* - * The OSF/1 version of makes gregset_t 46 entries long. - * I have no idea why that is so. For now, we just leave it at 33 - * (32 general regs + processor status word). - */ -#define ELF_NGREG 33 -#define ELF_NFPREG 32 - -typedef unsigned long elf_greg_t; -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -typedef double elf_fpreg_t; -typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; - -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - gdb doesn't really use excluded. Fields present but not used are - marked with "XXX". */ -struct elf_prstatus - { -#if 0 - long int pr_flags; /* XXX Process flags. */ - short int pr_why; /* XXX Reason for process halt. */ - short int pr_what; /* XXX More detailed reason. */ -#endif - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ -#if 0 - stack_t pr_altstack; /* Alternate stack info. */ - struct sigaction pr_action; /* Signal action for current sig. */ -#endif - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ -#if 0 - long int pr_instr; /* Current instruction. */ -#endif - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned int pr_uid; - unsigned int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef gregset_t prgregset_t; -typedef fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore habe only ine PID type. */ -typedef __pid_t lwpid_t; - - -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h b/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h deleted file mode 100644 index b9e590347e..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - - -/* Type for general register. */ -typedef long int greg_t; - -/* Number of general registers. */ -#define __NGREG 33 -#ifdef __USE_MISC -# define NGREG __NGREG -#endif - -/* Container for all general registers. */ -typedef greg_t gregset_t[__NGREG]; - -/* Type for floating-point register. */ -typedef long int fpreg_t; - -/* Number of general registers. */ -#define __NFPREG 32 -#ifdef __USE_MISC -# define NFPREG __NFPREG -#endif - -/* Container for all general registers. */ -typedef fpreg_t fpregset_t[__NFPREG]; - - -/* A machine context is exactly a sigcontext. */ -typedef struct sigcontext mcontext_t; - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_link; - unsigned long __uc_osf_sigmask; - stack_t uc_stack; - mcontext_t uc_mcontext; - sigset_t uc_sigmask; - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/sys/user.h b/sysdeps/unix/sysv/linux/alpha/sys/user.h deleted file mode 100644 index f5801a7c8f..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sys/user.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_USER_H -#define _SYS_USER_H 1 - -/* The whole purpose of this file is for gdb/strace and gdb/strace - only. Don't read too much into it. Don't use it for anything other - than gdb/strace unless you know what you are doing. */ - -#include -#include - -struct user -{ - unsigned long int regs[EF_SIZE / 8 + 32]; /* integer and fp regs */ - size_t u_tsize; /* text size (pages) */ - size_t u_dsize; /* data size (pages) */ - size_t u_ssize; /* stack size (pages) */ - unsigned long int start_code; /* text starting address */ - unsigned long int start_data; /* data starting address */ - unsigned long int start_stack; /* stack starting address */ - long int signal; /* signal causing core dump */ - struct regs *u_ar0; /* help gdb find registers */ - unsigned long int magic; /* identifies a core file */ - char u_comm[32]; /* user command name */ -}; - -#define PAGE_SHIFT 13 -#define PAGE_SIZE (1UL << PAGE_SHIFT) -#define PAGE_MASK (~(PAGE_SIZE-1)) -#define NBPG PAGE_SIZE -#define UPAGES 1 -#define HOST_TEXT_START_ADDR (u.start_code) -#define HOST_DATA_START_ADDR (u.start_data) -#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) - -#endif /* sys/user.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/syscall.S b/sysdeps/unix/sysv/linux/alpha/syscall.S deleted file mode 100644 index 6b082bb489..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/syscall.S +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* - * This is for COMPATIBILITY with Linux/x86 only. Linux/Alpha system - * calls return an error indication in a3. This allows arbitrary 64bit - * values to be returned in v0 (because negative values are not - * mistaken as error numbers). However, C allows only one value to - * be returned, so the interface below folds the error indication passed in - * a3 back into v0: it sets v0 to -errno if an error occurs. Thus, - * no negative 64bit numbers can be returned. To avoid this problem, - * use assembly stubs wherever possible/convenient. - * - * Usage: - * - * long syscall(syscall_number, arg1, arg2, arg3, arg4, arg5, arg6) - * - * syscall_number = the index of the system call we're invoking - * arg1-arg6 = up to 6 integer arguments to the system call - * - * We need to do some arg shifting: the kernel expects the - * syscall number in v0 and the first six args in a0-a5. - * - */ - - -LEAF(__syscall, 0) -#ifdef PROF - ldgp gp, 0(pv) - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at - .prologue 1 -#else - .prologue 0 -#endif - - mov a0, v0 /* Syscall number -> v0 */ - mov a1, a0 /* arg1-arg5 -> a0-a4 */ - mov a2, a1 - mov a3, a2 - mov a4, a3 - mov a5, a4 - ldq a5,0(sp) /* arg6 -> a5 */ - - call_pal PAL_callsys /* Invoke system call */ - bne a3, SYSCALL_ERROR_LABEL - ret - -PSEUDO_END(__syscall) - -weak_alias (__syscall, syscall) diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list deleted file mode 100644 index 12cd021b60..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/syscalls.list +++ /dev/null @@ -1,45 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -sigstack - sigstack 2 sigstack - -getpriority - getpriority i:ii __getpriority getpriority - -# proper socket implementations: -bind - bind i:ipi __bind bind -getpeername - getpeername i:ipp __getpeername getpeername -getsockname - getsockname i:ipp __getsockname getsockname -getsockopt - getsockopt i:iiiBN __getsockopt getsockopt -listen - listen i:ii __listen listen -setsockopt - setsockopt i:iiibn __setsockopt setsockopt -shutdown - shutdown i:ii __shutdown shutdown -socket - socket i:iii __socket socket -socketpair - socketpair i:iiif __socketpair socketpair - -ptrace - ptrace 4 __ptrace ptrace - -# access pci space protected from machine checks: -pciconfig_read EXTRA pciconfig_read 5 pciconfig_read -pciconfig_write EXTRA pciconfig_write 5 pciconfig_write -pciconfig_iobase EXTRA pciconfig_iobase 3 __pciconfig_iobase pciconfig_iobase - -# support old timeval32 entry points -osf_gettimeofday - osf_gettimeofday 2 __gettimeofday_tv32 __gettimeofday@GLIBC_2.0 gettimeofday@GLIBC_2.0 -osf_settimeofday - osf_settimeofday 2 __settimeofday_tv32 settimeofday@GLIBC_2.0 -osf_getitimer - osf_getitimer 2 __getitimer_tv32 getitimer@GLIBC_2.0 -osf_setitimer - osf_setitimer 3 __setitimer_tv32 setitimer@GLIBC_2.0 -osf_utimes - osf_utimes 2 __utimes_tv32 utimes@GLIBC_2.0 -osf_getrusage - osf_getrusage 2 __getrusage_tv32 getrusage@GLIBC_2.0 -osf_wait4 - osf_wait4 4 __wait4_tv32 wait4@GLIBC_2.0 - -# support new timeval64 entry points -gettimeofday - gettimeofday 2 __GI___gettimeofday gettimeofday@@GLIBC_2.1 __gettimeofday@@GLIBC_2.1 -settimeofday - settimeofday 2 __settimeofday settimeofday@@GLIBC_2.1 -getitimer - getitimer 2 __getitimer getitimer@@GLIBC_2.1 -setitimer - setitimer 3 __setitimer setitimer@@GLIBC_2.1 -utimes - utimes 2 __utimes utimes@@GLIBC_2.1 -getrusage - getrusage 2 __getrusage getrusage@@GLIBC_2.1 -wait4 - wait4 4 __wait4 wait4@@GLIBC_2.1 - -# avoid 64-bit aliases on 32-bit statfs syscalls -fstatfs - fstatfs i:ip __fstatfs fstatfs -statfs - statfs i:sp __statfs statfs diff --git a/sysdeps/unix/sysv/linux/alpha/sysconf.c b/sysdeps/unix/sysv/linux/alpha/sysconf.c deleted file mode 100644 index e011f8f5dd..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sysconf.c +++ /dev/null @@ -1,127 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - - -static long int linux_sysconf (int name); - -#define CSHAPE(totalsize, linesize, assoc) \ - ((totalsize & ~0xff) | (linesize << 4) | assoc) - -extern long __libc_alpha_cache_shape[4]; - -/* Get the value of the system variable NAME. */ -long int -__sysconf (int name) -{ - long shape, index; - - /* We only handle the cache information here (for now). */ - if (name < _SC_LEVEL1_ICACHE_SIZE || name > _SC_LEVEL4_CACHE_LINESIZE) - return linux_sysconf (name); - - /* No Alpha has L4 caches. */ - if (name >= _SC_LEVEL4_CACHE_SIZE) - return -1; - - index = (name - _SC_LEVEL1_ICACHE_SIZE) / 3; - shape = __libc_alpha_cache_shape[index]; - if (shape == -2) - { - long shape_l1i, shape_l1d, shape_l2, shape_l3 = -1; - - /* ??? In the cases below for which we do not know L1 cache sizes, - we could do timings to measure sizes. But for the Bcache, it's - generally big enough that (without additional help) TLB effects - get in the way. We'd either need to be able to allocate large - pages or have the kernel do the timings from KSEG. Fortunately, - kernels beginning with 2.6.5 will pass us this info in auxvec. */ - - switch (__builtin_alpha_implver ()) - { - case 0: /* EV4 */ - /* EV4/LCA45 had 8k L1 caches; EV45 had 16k L1 caches. */ - /* EV4/EV45 had 128k to 16M 32-byte direct Bcache. LCA45 - had 64k to 8M 8-byte direct Bcache. Can't tell. */ - shape_l1i = shape_l1d = shape_l2 = CSHAPE (0, 5, 1); - break; - - case 1: /* EV5 */ - if (__builtin_alpha_amask (1 << 8)) - { - /* MAX insns not present; either EV5 or EV56. */ - shape_l1i = shape_l1d = CSHAPE(8*1024, 5, 1); - /* ??? L2 and L3 *can* be configured as 32-byte line. */ - shape_l2 = CSHAPE (96*1024, 6, 3); - /* EV5/EV56 has 1M to 16M Bcache. */ - shape_l3 = CSHAPE (0, 6, 1); - } - else - { - /* MAX insns present; either PCA56 or PCA57. */ - /* PCA56 had 16k 64-byte cache; PCA57 had 32k Icache. */ - /* PCA56 had 8k 64-byte cache; PCA57 had 16k Dcache. */ - /* PCA5[67] had 512k to 4M Bcache. */ - shape_l1i = shape_l1d = shape_l2 = CSHAPE (0, 6, 1); - } - break; - - case 2: /* EV6 */ - shape_l1i = shape_l1d = CSHAPE(64*1024, 6, 2); - /* EV6/EV67/EV68* had 1M to 16M Bcache. */ - shape_l2 = CSHAPE (0, 6, 1); - break; - - case 3: /* EV7 */ - shape_l1i = shape_l1d = CSHAPE(64*1024, 6, 2); - shape_l2 = CSHAPE(7*1024*1024/4, 6, 7); - break; - - default: - shape_l1i = shape_l1d = shape_l2 = 0; - break; - } - - __libc_alpha_cache_shape[0] = shape_l1i; - __libc_alpha_cache_shape[1] = shape_l1d; - __libc_alpha_cache_shape[2] = shape_l2; - __libc_alpha_cache_shape[3] = shape_l3; - shape = __libc_alpha_cache_shape[index]; - } - - if (shape <= 0) - return shape; - - switch ((name - _SC_LEVEL1_ICACHE_SIZE) % 3) - { - case 0: /* total size */ - return shape & -0x100; - case 1: /* associativity */ - return shape & 0xf; - default: /* line size */ - return 1L << ((shape >> 4) & 0xf); - } -} - -/* Now the generic Linux version. */ -#undef __sysconf -#define __sysconf static linux_sysconf -#include diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h deleted file mode 100644 index 66d6962b80..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h +++ /dev/null @@ -1,174 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -/* ??? Assumes that nothing comes between PSEUDO and PSEUDO_END - besides "ret". */ - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .globl __##syscall_name##_nocancel; \ - .type __##syscall_name##_nocancel, @function; \ - .usepv __##syscall_name##_nocancel, std; \ - .align 4; \ - cfi_startproc; \ -__LABEL(__##syscall_name##_nocancel) \ - ldgp gp, 0(pv); \ - PSEUDO_PROF; \ -__LABEL($pseudo_nocancel) \ - PSEUDO_PREPARE_ARGS; \ - lda v0, SYS_ify(syscall_name); \ - call_pal PAL_callsys; \ - bne a3, SYSCALL_ERROR_LABEL; \ -__LABEL($pseudo_ret) \ - .subsection 2; \ - .size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel; \ - .globl name; \ - .type name, @function; \ - .usepv name, std; \ - .align 4; \ - cfi_startproc; \ -__LABEL(name) \ - ldgp gp, 0(pv); \ - PSEUDO_PROF; \ - SINGLE_THREAD_P(t0); \ - beq t0, $pseudo_nocancel; \ - subq sp, 64, sp; \ - cfi_def_cfa_offset(64); \ - stq ra, 0(sp); \ - cfi_offset(ra, -64); \ - SAVE_ARGS_##args; \ - CENABLE; \ - LOAD_ARGS_##args; \ - /* Save the CENABLE return value in RA. That register \ - is preserved across syscall and the real return \ - address is saved on the stack. */ \ - mov v0, ra; \ - lda v0, SYS_ify(syscall_name); \ - call_pal PAL_callsys; \ - stq v0, 8(sp); \ - mov ra, a0; \ - bne a3, $multi_error; \ - CDISABLE; \ - ldq ra, 0(sp); \ - ldq v0, 8(sp); \ - addq sp, 64, sp; \ - cfi_remember_state; \ - cfi_restore(ra); \ - cfi_def_cfa_offset(0); \ - ret; \ - cfi_restore_state; \ -__LABEL($multi_error) \ - CDISABLE; \ - ldq ra, 0(sp); \ - ldq v0, 8(sp); \ - addq sp, 64, sp; \ - cfi_restore(ra); \ - cfi_def_cfa_offset(0); \ - SYSCALL_ERROR_FALLTHRU; \ - SYSCALL_ERROR_HANDLER; \ - cfi_endproc; \ - .previous - -# undef PSEUDO_END -# define PSEUDO_END(sym) \ - cfi_endproc; \ - .subsection 2; \ - .size sym, .-sym - -# define SAVE_ARGS_0 /* Nothing. */ -# define SAVE_ARGS_1 SAVE_ARGS_0; stq a0, 8(sp) -# define SAVE_ARGS_2 SAVE_ARGS_1; stq a1, 16(sp) -# define SAVE_ARGS_3 SAVE_ARGS_2; stq a2, 24(sp) -# define SAVE_ARGS_4 SAVE_ARGS_3; stq a3, 32(sp) -# define SAVE_ARGS_5 SAVE_ARGS_4; stq a4, 40(sp) -# define SAVE_ARGS_6 SAVE_ARGS_5; stq a5, 48(sp) - -# define LOAD_ARGS_0 /* Nothing. */ -# define LOAD_ARGS_1 LOAD_ARGS_0; ldq a0, 8(sp) -# define LOAD_ARGS_2 LOAD_ARGS_1; ldq a1, 16(sp) -# define LOAD_ARGS_3 LOAD_ARGS_2; ldq a2, 24(sp) -# define LOAD_ARGS_4 LOAD_ARGS_3; ldq a3, 32(sp) -# define LOAD_ARGS_5 LOAD_ARGS_4; ldq a4, 40(sp) -# define LOAD_ARGS_6 LOAD_ARGS_5; ldq a5, 48(sp) - -# if IS_IN (libpthread) -# define __local_enable_asynccancel __pthread_enable_asynccancel -# define __local_disable_asynccancel __pthread_disable_asynccancel -# define __local_multiple_threads __pthread_multiple_threads -# elif IS_IN (libc) -# define __local_enable_asynccancel __libc_enable_asynccancel -# define __local_disable_asynccancel __libc_disable_asynccancel -# define __local_multiple_threads __libc_multiple_threads -# elif IS_IN (librt) -# define __local_enable_asynccancel __librt_enable_asynccancel -# define __local_disable_asynccancel __librt_disable_asynccancel -# else -# error Unsupported library -# endif - -# ifdef PIC -# define CENABLE bsr ra, __local_enable_asynccancel !samegp -# define CDISABLE bsr ra, __local_disable_asynccancel !samegp -# else -# define CENABLE jsr ra, __local_enable_asynccancel; ldgp ra, 0(gp) -# define CDISABLE jsr ra, __local_disable_asynccancel; ldgp ra, 0(gp) -# endif - -# if IS_IN (libpthread) || IS_IN (libc) -# ifndef __ASSEMBLER__ -extern int __local_multiple_threads attribute_hidden; -# define SINGLE_THREAD_P \ - __builtin_expect (__local_multiple_threads == 0, 1) -# elif defined(PIC) -# define SINGLE_THREAD_P(reg) ldl reg, __local_multiple_threads(gp) !gprel -# else -# define SINGLE_THREAD_P(reg) \ - ldah reg, __local_multiple_threads(gp) !gprelhigh; \ - ldl reg, __local_multiple_threads(reg) !gprellow -# endif -# else -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P(reg) \ - call_pal PAL_rduniq; \ - ldl reg, MULTIPLE_THREADS_OFFSET($0) -# endif -# endif - -#else - -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep.h b/sysdeps/unix/sysv/linux/alpha/sysdep.h deleted file mode 100644 index 4dc2d46ecf..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/sysdep.h +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper, , August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINUX_ALPHA_SYSDEP_H -#define _LINUX_ALPHA_SYSDEP_H 1 - -#ifdef __ASSEMBLER__ -#include -#include -#endif - -/* There is some commonality. */ -#include -#include - -#include - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -/* Define some aliases to make automatic syscall generation work - properly. The SYS_* variants are for the benefit of the files in - sysdeps/unix. */ -#define __NR_getpid __NR_getxpid -#define __NR_getuid __NR_getxuid -#define __NR_getgid __NR_getxgid -#define SYS_getpid __NR_getxpid -#define SYS_getuid __NR_getxuid -#define SYS_getgid __NR_getxgid - -/* - * Some syscalls no Linux program should know about: - */ -#define __NR_osf_sigprocmask 48 -#define __NR_osf_shmat 209 -#define __NR_osf_getsysinfo 256 -#define __NR_osf_setsysinfo 257 - -/* Help old kernel headers where particular syscalls are not available. */ -#ifndef __NR_semtimedop -# define __NR_semtimedop 423 -#endif - -/* This is a kludge to make syscalls.list find these under the names - pread and pwrite, since some kernel headers define those names - and some define the *64 names for the same system calls. */ -#if !defined __NR_pread && defined __NR_pread64 -# define __NR_pread __NR_pread64 -#endif -#if !defined __NR_pwrite && defined __NR_pwrite64 -# define __NR_pwrite __NR_pwrite64 -#endif - -/* - * In order to get the hidden arguments for rt_sigaction set up - * properly, we need to call the assembly version. This shouldn't - * happen except for inside sigaction.c, where we handle this - * specially. Catch other uses and error. - */ - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ -({ \ - extern char ChEcK[__NR_##name == __NR_rt_sigaction ? -1 : 1] \ - __attribute__((unused)); \ - INLINE_SYSCALL1(name, nr, args); \ -}) - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err_out, nr, args...) \ -({ \ - extern char ChEcK[__NR_##name == __NR_rt_sigaction ? -1 : 1] \ - __attribute__((unused)); \ - INTERNAL_SYSCALL1(name, err_out, nr, args); \ -}) - -#endif /* _LINUX_ALPHA_SYSDEP_H */ diff --git a/sysdeps/unix/sysv/linux/alpha/timer_create.c b/sysdeps/unix/sysv/linux/alpha/timer_create.c deleted file mode 100644 index d307135003..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/timer_create.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/timer_delete.c b/sysdeps/unix/sysv/linux/alpha/timer_delete.c deleted file mode 100644 index 2dd94f5c7a..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/timer_delete.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/timer_getoverr.c b/sysdeps/unix/sysv/linux/alpha/timer_getoverr.c deleted file mode 100644 index 22eaff5cda..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/timer_getoverr.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/timer_gettime.c b/sysdeps/unix/sysv/linux/alpha/timer_gettime.c deleted file mode 100644 index cea524bae5..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/timer_gettime.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/timer_settime.c b/sysdeps/unix/sysv/linux/alpha/timer_settime.c deleted file mode 100644 index fa231149d5..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/timer_settime.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/ucontext-offsets.sym b/sysdeps/unix/sysv/linux/alpha/ucontext-offsets.sym deleted file mode 100644 index f95ff75636..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/ucontext-offsets.sym +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include - --- -UC_LINK offsetof (ucontext_t, uc_link) -UC_OSF_SIGMASK offsetof (ucontext_t, __uc_osf_sigmask) -UC_STACK offsetof (ucontext_t, uc_stack) -UC_SIGCTX offsetof (ucontext_t, uc_mcontext) -UC_SIGMASK offsetof (ucontext_t, uc_sigmask) -SC_REGS offsetof (struct sigcontext, sc_regs) -SC_FPREGS offsetof (struct sigcontext, sc_fpregs) -SC_PC offsetof (struct sigcontext, sc_pc) -SC_PS offsetof (struct sigcontext, sc_ps) -SC_FPCRS offsetof (struct sigcontext, sc_fpcr) -SC_MASK offsetof (struct sigcontext, sc_mask) -SC_FPCR offsetof (struct sigcontext, sc_fpcr) -SS_SP offsetof (stack_t, ss_sp) -SS_SIZE offsetof (stack_t, ss_size) diff --git a/sysdeps/unix/sysv/linux/alpha/vfork.S b/sysdeps/unix/sysv/linux/alpha/vfork.S deleted file mode 100644 index 7255822e17..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/vfork.S +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -ENTRY(__libc_vfork) - PSEUDO_PROLOGUE - - /* Load the thread pointer value in A1 across the vfork. */ - rduniq - mov v0, a1 - - lda v0, SYS_ify(vfork) - call_pal PAL_callsys - - /* Normal error check and return. */ - bne a3, SYSCALL_ERROR_LABEL - ret - -PSEUDO_END (__libc_vfork) - -#if IS_IN (libc) -weak_alias (__libc_vfork, vfork) -strong_alias (__libc_vfork, __vfork) -libc_hidden_def (__vfork) -#endif diff --git a/sysdeps/unix/sysv/linux/alpha/wordexp.c b/sysdeps/unix/sysv/linux/alpha/wordexp.c deleted file mode 100644 index 32aefe579b..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/wordexp.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/alpha/xstat.c b/sysdeps/unix/sysv/linux/alpha/xstat.c deleted file mode 100644 index cf17353d7a..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/xstat.c +++ /dev/null @@ -1,58 +0,0 @@ -/* xstat using old-style Unix stat system call. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define __xstat64 __xstat64_disable - -#include -#include -#include -#include -#include -#include -#include - -#undef __xstat64 - - -/* Get information about the file NAME in BUF. */ -int -__xstat (int vers, const char *name, struct stat *buf) -{ - INTERNAL_SYSCALL_DECL (err); - int result; - struct kernel_stat kbuf; - - if (vers == _STAT_VER_KERNEL64) - { - result = INTERNAL_SYSCALL (stat64, err, 2, name, buf); - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return result; - __set_errno (INTERNAL_SYSCALL_ERRNO (result, err)); - return -1; - } - - result = INTERNAL_SYSCALL (stat, err, 2, name, &kbuf); - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return __xstat_conv (vers, &kbuf, buf); - __set_errno (INTERNAL_SYSCALL_ERRNO (result, err)); - return -1; -} -hidden_def (__xstat) -weak_alias (__xstat, _xstat); -strong_alias (__xstat, __xstat64); -hidden_ver (__xstat, __xstat64) diff --git a/sysdeps/unix/sysv/linux/alpha/xstatconv.c b/sysdeps/unix/sysv/linux/alpha/xstatconv.c deleted file mode 100644 index face7cd047..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/xstatconv.c +++ /dev/null @@ -1,120 +0,0 @@ -/* Convert between the kernel's `struct stat' format, and libc's. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include -#include - -int -__xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf) -{ - switch (vers) - { - case _STAT_VER_KERNEL: - *(struct kernel_stat *) ubuf = *kbuf; - break; - - case _STAT_VER_GLIBC2: - { - struct glibc2_stat *buf = ubuf; - - buf->st_dev = kbuf->st_dev; - buf->st_ino = kbuf->st_ino; - buf->st_mode = kbuf->st_mode; - buf->st_nlink = kbuf->st_nlink; - buf->st_uid = kbuf->st_uid; - buf->st_gid = kbuf->st_gid; - buf->st_rdev = kbuf->st_rdev; - buf->st_size = kbuf->st_size; - buf->st_atime = kbuf->st_atime; - buf->st_mtime = kbuf->st_mtime; - buf->st_ctime = kbuf->st_ctime; - buf->st_blksize = kbuf->st_blksize; - buf->st_blocks = kbuf->st_blocks; - buf->st_flags = kbuf->st_flags; - buf->st_gen = kbuf->st_gen; - } - break; - - case _STAT_VER_GLIBC2_1: - { - struct glibc21_stat *buf = ubuf; - - buf->st_dev = kbuf->st_dev; - buf->st_ino = kbuf->st_ino; - buf->st_mode = kbuf->st_mode; - buf->st_nlink = kbuf->st_nlink; - buf->st_uid = kbuf->st_uid; - buf->st_gid = kbuf->st_gid; - buf->st_rdev = kbuf->st_rdev; - buf->st_size = kbuf->st_size; - buf->st_atime = kbuf->st_atime; - buf->st_mtime = kbuf->st_mtime; - buf->st_ctime = kbuf->st_ctime; - buf->st_blocks = kbuf->st_blocks; - buf->st_blksize = kbuf->st_blksize; - buf->st_flags = kbuf->st_flags; - buf->st_gen = kbuf->st_gen; - buf->__pad3 = 0; - buf->__glibc_reserved[0] = 0; - buf->__glibc_reserved[1] = 0; - buf->__glibc_reserved[2] = 0; - buf->__glibc_reserved[3] = 0; - } - break; - - case _STAT_VER_GLIBC2_3_4: - { - struct stat64 *buf = ubuf; - - buf->st_dev = kbuf->st_dev; - buf->st_ino = kbuf->st_ino; - buf->st_rdev = kbuf->st_rdev; - buf->st_size = kbuf->st_size; - buf->st_blocks = kbuf->st_blocks; - - buf->st_mode = kbuf->st_mode; - buf->st_uid = kbuf->st_uid; - buf->st_gid = kbuf->st_gid; - buf->st_blksize = kbuf->st_blksize; - buf->st_nlink = kbuf->st_nlink; - buf->__pad0 = 0; - - buf->st_atime = kbuf->st_atime; - buf->st_atimensec = 0; - buf->st_mtime = kbuf->st_mtime; - buf->st_mtimensec = 0; - buf->st_ctime = kbuf->st_ctime; - buf->st_ctimensec = 0; - - buf->__glibc_reserved[0] = 0; - buf->__glibc_reserved[1] = 0; - buf->__glibc_reserved[2] = 0; - } - break; - - default: - __set_errno (EINVAL); - return -1; - } - - return 0; -} diff --git a/sysdeps/unix/sysv/linux/alpha/xstatconv.h b/sysdeps/unix/sysv/linux/alpha/xstatconv.h deleted file mode 100644 index 121689662d..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/xstatconv.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Convert between the kernel's `struct stat' format, and libc's. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -extern int __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf) - attribute_hidden; diff --git a/sysdeps/unix/sysv/linux/arch-fork.h b/sysdeps/unix/sysv/linux/arch-fork.h deleted file mode 100644 index b4e741c34d..0000000000 --- a/sysdeps/unix/sysv/linux/arch-fork.h +++ /dev/null @@ -1,27 +0,0 @@ -/* ARCH_FORK definition for Linux fork implementation. Stub version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file should define the function-like macro of no arguments - ARCH_FORK to an INLINE_SYSCALL invocation of the clone-like system - call, passing the CLONE_CHILD_SETTID and CLONE_CHILD_CLEARTID flags - and &THREAD_SELF->tid as the TID address. - - Machines that lack an arch-fork.h header file will hit an #error in - fork.c; this stub file doesn't contain an #error itself mainly for - the transition period of migrating old machine-specific fork.c files - to machine-specific arch-fork.h instead. */ diff --git a/sysdeps/unix/sysv/linux/arm/Implies b/sysdeps/unix/sysv/linux/arm/Implies deleted file mode 100644 index e609c137d0..0000000000 --- a/sysdeps/unix/sysv/linux/arm/Implies +++ /dev/null @@ -1 +0,0 @@ -arm/nptl diff --git a/sysdeps/unix/sysv/linux/arm/Makefile b/sysdeps/unix/sysv/linux/arm/Makefile deleted file mode 100644 index b9b8f71721..0000000000 --- a/sysdeps/unix/sysv/linux/arm/Makefile +++ /dev/null @@ -1,69 +0,0 @@ -ifeq ($(subdir),elf) -sysdep_routines += dl-vdso -sysdep-rtld-routines += aeabi_read_tp libc-do-syscall -endif - -ifeq ($(subdir),misc) -sysdep_routines += ioperm -sysdep_headers += sys/elf.h sys/io.h -endif - -ifeq ($(subdir),signal) -sysdep_routines += sigrestorer -endif - -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext_i.sym -endif - -# Add a syscall function to each library that needs one. - -ifeq ($(subdir),crypt) -libcrypt-sysdep_routines += libc-do-syscall -endif - -ifeq ($(subdir),rt) -librt-sysdep_routines += libc-do-syscall -librt-shared-only-routines += libc-do-syscall -endif - -ifeq ($(subdir),nptl) -libpthread-sysdep_routines += libc-do-syscall -libpthread-shared-only-routines += libc-do-syscall -endif - -ifeq ($(subdir),resolv) -libanl-sysdep_routines += libc-do-syscall -libanl-shared-only-routines += libc-do-syscall -endif - -ifeq ($(subdir),csu) -sysdep_routines += libc-do-syscall -endif - -ifeq ($(subdir),nscd) -nscd-modules += libc-do-syscall -endif - -ifeq ($(subdir),nss) -libnss_db-sysdep_routines += libc-do-syscall -libnss_db-shared-only-routines += libc-do-syscall -endif - -ifeq ($(subdir),posix) -LDFLAGS-tst-rfc3484 += $(common-objpfx)csu/libc-do-syscall.o -LDFLAGS-tst-rfc3484-2 += $(common-objpfx)csu/libc-do-syscall.o -LDFLAGS-tst-rfc3484-3 += $(common-objpfx)csu/libc-do-syscall.o -endif - -abi-variants := soft hard - -ifeq (,$(filter $(default-abi),$(abi-variants))) -Unknown ABI, must be one of $(abi-variants) -endif - -abi-includes := -abi-soft-options := -U__ARM_PCS_VFP -abi-soft-condition := !defined __ARM_PCS_VFP -abi-hard-options := -D__ARM_PCS_VFP -abi-hard-condition := defined __ARM_PCS_VFP diff --git a/sysdeps/unix/sysv/linux/arm/Versions b/sysdeps/unix/sysv/linux/arm/Versions deleted file mode 100644 index 7e5ba53455..0000000000 --- a/sysdeps/unix/sysv/linux/arm/Versions +++ /dev/null @@ -1,19 +0,0 @@ -libc { - GLIBC_2.4 { - ioperm; iopl; - inb; inw; inl; - outb; outw; outl; - } - GLIBC_2.11 { - fallocate64; - } - GLIBC_2.24 { - recvmsg; sendmsg; - } - GLIBC_PRIVATE { - # A copy of sigaction lives in libpthread, and needs these. - __default_sa_restorer; __default_rt_sa_restorer; - # nptl/pthread_cond_timedwait.c uses INTERNAL_VSYSCALL(clock_gettime). - __vdso_clock_gettime; - } -} diff --git a/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S b/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S deleted file mode 100644 index 6d8d93ae5f..0000000000 --- a/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .section .rodata.str1.1,"aMS",%progbits,1 - .type longjmp_msg,%object -longjmp_msg: - .string "longjmp causes uninitialized stack frame" - .size longjmp_msg, .-longjmp_msg - .text - -#define __longjmp ____longjmp_chk - -#ifdef PIC -# define CALL_FAIL \ - ldr sl, .L_GOT; \ - cfi_undefined (sl); \ -.L_GOT_OFF: \ - add sl, pc, sl; \ - ldr r0, .Lstr; \ - add r0, sl, r0; \ - B PLTJMP(HIDDEN_JUMPTARGET(__fortify_fail)); \ -.L_GOT: \ - .word _GLOBAL_OFFSET_TABLE_-(.L_GOT_OFF+8); \ -.Lstr: \ - .word longjmp_msg(GOTOFF); -#else -# define CALL_FAIL \ - ldr r0, .Lstr; \ - B HIDDEN_JUMPTARGET(__fortify_fail); \ -.Lstr: \ - .word longjmp_msg; -#endif - -#define CHECK_SP(reg) \ - cfi_remember_state; \ - cmp sp, reg; \ - bls .Lok; \ - push { r7 }; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (r7, 0); \ - mov r5, r0; \ - cfi_undefined (r5); \ - mov r7, #SYS_ify(sigaltstack); \ - mov r0, #0; \ - sub sp, sp, #12; /* == sizeof (stack_t) */ \ - cfi_adjust_cfa_offset (12); \ - cfi_remember_state; \ - mov r1, sp; \ - swi #0; \ - cmp r0, #0; \ - bne .Lok2; \ - ldr r1, [sp, #4]; \ - tst r1, #1; \ - beq .Lfail; \ - ldr r2, [sp, #0]; \ - ldr r3, [sp, #8]; \ - add r2, r2, r3; \ - sub r2, r2, reg; \ - cmp r2, r3; \ - bhi .Lok2; \ -.Lfail: \ - add sp, sp, #12; \ - cfi_adjust_cfa_offset (-12); \ - pop { r7 }; \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (r7); \ - CALL_FAIL \ - cfi_restore_state; \ -.Lok2: \ - mov r0, r5; \ - cfi_restore_state; \ -.Lok: - -#include <__longjmp.S> diff --git a/sysdeps/unix/sysv/linux/arm/aeabi_read_tp.S b/sysdeps/unix/sysv/linux/arm/aeabi_read_tp.S deleted file mode 100644 index 12eae35e7f..0000000000 --- a/sysdeps/unix/sysv/linux/arm/aeabi_read_tp.S +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* GCC will emit calls to this routine under -mtp=soft. Linux has an - equivalent helper function (which clobbers fewer registers than - a normal function call) in a high page of memory; tail call to the - helper. */ - - .hidden __aeabi_read_tp -ENTRY (__aeabi_read_tp) -#ifdef ARCH_HAS_HARD_TP - mrc p15, 0, r0, c13, c0, 3 - bx lr -#elif defined(__thumb2__) - movw r0, #0x0fe0 - movt r0, #0xffff - bx r0 -#else - mov r0, #0xffff0fff - sub pc, r0, #31 -#endif -END (__aeabi_read_tp) diff --git a/sysdeps/unix/sysv/linux/arm/alphasort64.c b/sysdeps/unix/sysv/linux/arm/alphasort64.c deleted file mode 100644 index 0b5ae47d2f..0000000000 --- a/sysdeps/unix/sysv/linux/arm/alphasort64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/arm/arch-fork.h b/sysdeps/unix/sysv/linux/arm/arch-fork.h deleted file mode 100644 index ab2d00e32e..0000000000 --- a/sysdeps/unix/sysv/linux/arm/arch-fork.h +++ /dev/null @@ -1,27 +0,0 @@ -/* ARCH_FORK definition for Linux fork implementation. ARM version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 5, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ - NULL, NULL, NULL, &THREAD_SELF->tid) diff --git a/sysdeps/unix/sysv/linux/arm/arm-features.h b/sysdeps/unix/sysv/linux/arm/arm-features.h deleted file mode 100644 index 91c12a6243..0000000000 --- a/sysdeps/unix/sysv/linux/arm/arm-features.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Macros to test for CPU features on ARM. Linux version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINUX_ARM_FEATURES_H -#define _LINUX_ARM_FEATURES_H 1 - -#ifndef __ASSEMBLER__ -# include - -# define ARM_HAVE_VFP (GLRO (dl_hwcap) & HWCAP_ARM_VFP) -#endif - -#include_next - -#endif /* arm-features.h */ diff --git a/sysdeps/unix/sysv/linux/arm/atomic-machine.h b/sysdeps/unix/sysv/linux/arm/atomic-machine.h deleted file mode 100644 index 5fb516284b..0000000000 --- a/sysdeps/unix/sysv/linux/arm/atomic-machine.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Atomic operations. ARM/Linux version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* If the compiler doesn't provide a primitive, we'll use this macro - to get assistance from the kernel. */ -#ifdef __thumb2__ -# define __arm_assisted_full_barrier() \ - __asm__ __volatile__ \ - ("movw\tip, #0x0fa0\n\t" \ - "movt\tip, #0xffff\n\t" \ - "blx\tip" \ - : : : "ip", "lr", "cc", "memory"); -#else -# define __arm_assisted_full_barrier() \ - __asm__ __volatile__ \ - ("mov\tip, #0xffff0fff\n\t" \ - "mov\tlr, pc\n\t" \ - "add\tpc, ip, #(0xffff0fa0 - 0xffff0fff)" \ - : : : "ip", "lr", "cc", "memory"); -#endif - -/* Atomic compare and exchange. This sequence relies on the kernel to - provide a compare and exchange operation which is atomic on the - current architecture, either via cleverness on pre-ARMv6 or via - ldrex / strex on ARMv6. - - It doesn't matter what register is used for a_oldval2, but we must - specify one to work around GCC PR rtl-optimization/21223. Otherwise - it may cause a_oldval or a_tmp to be moved to a different register. - - We use the union trick rather than simply using __typeof (...) in the - declarations of A_OLDVAL et al because when NEWVAL or OLDVAL is of the - form *PTR and PTR has a 'volatile ... *' type, then __typeof (*PTR) has - a 'volatile ...' type and this triggers -Wvolatile-register-var to - complain about 'register volatile ... asm ("reg")'. */ -#ifdef __thumb2__ -/* Thumb-2 has ldrex/strex. However it does not have barrier instructions, - so we still need to use the kernel helper. */ -# define __arm_assisted_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - ({ union { __typeof (oldval) a; uint32_t v; } oldval_arg = { .a = (oldval) };\ - union { __typeof (newval) a; uint32_t v; } newval_arg = { .a = (newval) };\ - register uint32_t a_oldval asm ("r0"); \ - register uint32_t a_newval asm ("r1") = newval_arg.v; \ - register __typeof (mem) a_ptr asm ("r2") = (mem); \ - register uint32_t a_tmp asm ("r3"); \ - register uint32_t a_oldval2 asm ("r4") = oldval_arg.v; \ - __asm__ __volatile__ \ - ("0:\tldr\t%[tmp],[%[ptr]]\n\t" \ - "cmp\t%[tmp], %[old2]\n\t" \ - "bne\t1f\n\t" \ - "mov\t%[old], %[old2]\n\t" \ - "movw\t%[tmp], #0x0fc0\n\t" \ - "movt\t%[tmp], #0xffff\n\t" \ - "blx\t%[tmp]\n\t" \ - "bcc\t0b\n\t" \ - "mov\t%[tmp], %[old2]\n\t" \ - "1:" \ - : [old] "=&r" (a_oldval), [tmp] "=&r" (a_tmp) \ - : [new] "r" (a_newval), [ptr] "r" (a_ptr), \ - [old2] "r" (a_oldval2) \ - : "ip", "lr", "cc", "memory"); \ - (__typeof (oldval)) a_tmp; }) -#else -# define __arm_assisted_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - ({ union { __typeof (oldval) a; uint32_t v; } oldval_arg = { .a = (oldval) };\ - union { __typeof (newval) a; uint32_t v; } newval_arg = { .a = (newval) };\ - register uint32_t a_oldval asm ("r0"); \ - register uint32_t a_newval asm ("r1") = newval_arg.v; \ - register __typeof (mem) a_ptr asm ("r2") = (mem); \ - register uint32_t a_tmp asm ("r3"); \ - register uint32_t a_oldval2 asm ("r4") = oldval_arg.v; \ - __asm__ __volatile__ \ - ("0:\tldr\t%[tmp],[%[ptr]]\n\t" \ - "cmp\t%[tmp], %[old2]\n\t" \ - "bne\t1f\n\t" \ - "mov\t%[old], %[old2]\n\t" \ - "mov\t%[tmp], #0xffff0fff\n\t" \ - "mov\tlr, pc\n\t" \ - "add\tpc, %[tmp], #(0xffff0fc0 - 0xffff0fff)\n\t" \ - "bcc\t0b\n\t" \ - "mov\t%[tmp], %[old2]\n\t" \ - "1:" \ - : [old] "=&r" (a_oldval), [tmp] "=&r" (a_tmp) \ - : [new] "r" (a_newval), [ptr] "r" (a_ptr), \ - [old2] "r" (a_oldval2) \ - : "ip", "lr", "cc", "memory"); \ - (__typeof (oldval)) a_tmp; }) -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/arm/bits/fcntl.h b/sysdeps/unix/sysv/linux/arm/bits/fcntl.h deleted file mode 100644 index 61a8dac187..0000000000 --- a/sysdeps/unix/sysv/linux/arm/bits/fcntl.h +++ /dev/null @@ -1,54 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -#define __O_DIRECTORY 040000 /* Must be a directory. */ -#define __O_NOFOLLOW 0100000 /* Do not follow links. */ -#define __O_DIRECT 0200000 /* Direct disk access. */ -#define __O_LARGEFILE 0400000 - -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#ifndef __USE_FILE_OFFSET64 - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/arm/bits/hwcap.h b/sysdeps/unix/sysv/linux/arm/bits/hwcap.h deleted file mode 100644 index b2cc3d8828..0000000000 --- a/sysdeps/unix/sysv/linux/arm/bits/hwcap.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Defines for bits in AT_HWCAP. ARM Linux version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined (_SYS_AUXV_H) && !defined (_LINUX_ARM_SYSDEP_H) -# error "Never include directly; use instead." -#endif - -/* The following must match the kernel's . */ -#define HWCAP_ARM_SWP 1 -#define HWCAP_ARM_HALF 2 -#define HWCAP_ARM_THUMB 4 -#define HWCAP_ARM_26BIT 8 -#define HWCAP_ARM_FAST_MULT 16 -#define HWCAP_ARM_FPA 32 -#define HWCAP_ARM_VFP 64 -#define HWCAP_ARM_EDSP 128 -#define HWCAP_ARM_JAVA 256 -#define HWCAP_ARM_IWMMXT 512 -#define HWCAP_ARM_CRUNCH 1024 -#define HWCAP_ARM_THUMBEE 2048 -#define HWCAP_ARM_NEON 4096 -#define HWCAP_ARM_VFPv3 8192 -#define HWCAP_ARM_VFPv3D16 16384 -#define HWCAP_ARM_TLS 32768 -#define HWCAP_ARM_VFPv4 65536 -#define HWCAP_ARM_IDIVA 131072 -#define HWCAP_ARM_IDIVT 262144 -#define HWCAP_ARM_VFPD32 524288 -#define HWCAP_ARM_LPAE 1048576 -#define HWCAP_ARM_EVTSTRM 2097152 diff --git a/sysdeps/unix/sysv/linux/arm/bits/mman.h b/sysdeps/unix/sysv/linux/arm/bits/mman.h deleted file mode 100644 index 14baee793b..0000000000 --- a/sysdeps/unix/sysv/linux/arm/bits/mman.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/ARM version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */ -# define MAP_DENYWRITE 0x00800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x02000 /* Lock the mapping. */ -# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */ -# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ -# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/arm/bits/shm.h b/sysdeps/unix/sysv/linux/arm/bits/shm.h deleted file mode 100644 index 2448ffdd72..0000000000 --- a/sysdeps/unix/sysv/linux/arm/bits/shm.h +++ /dev/null @@ -1,103 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_SHM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from */ -#define SHM_W 0200 /* or S_IWUGO from */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ -#define SHM_EXEC 0100000 /* execution access */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -__BEGIN_DECLS - -/* Segment low boundary address multiple. */ -#define SHMLBA (__getpagesize () << 2) -extern int __getpagesize (void) __THROW __attribute__ ((__const__)); - - -/* Type to count number of attaches. */ -typedef unsigned long int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ - size_t shm_segsz; /* size of segment in bytes */ - __time_t shm_atime; /* time of last shmat() */ - unsigned long int __glibc_reserved1; - __time_t shm_dtime; /* time of last shmdt() */ - unsigned long int __glibc_reserved2; - __time_t shm_ctime; /* time of last change by shmctl() */ - unsigned long int __glibc_reserved3; - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - unsigned long int shmmax; - unsigned long int shmmin; - unsigned long int shmmni; - unsigned long int shmseg; - unsigned long int shmall; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - unsigned long int __glibc_reserved3; - unsigned long int __glibc_reserved4; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/arm/brk.c b/sysdeps/unix/sysv/linux/arm/brk.c deleted file mode 100644 index 74bff978d6..0000000000 --- a/sysdeps/unix/sysv/linux/arm/brk.c +++ /dev/null @@ -1,41 +0,0 @@ -/* brk system call for Linux/ARM. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -int -__brk (void *addr) -{ - void *newbrk; - - __curbrk = newbrk = (void *) INLINE_SYSCALL (brk, 1, addr); - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/arm/c++-types.data b/sysdeps/unix/sysv/linux/arm/c++-types.data deleted file mode 100644 index fde53bf337..0000000000 --- a/sysdeps/unix/sysv/linux/arm/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:i -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/arm/clone.S b/sysdeps/unix/sysv/linux/arm/clone.S deleted file mode 100644 index a309add895..0000000000 --- a/sysdeps/unix/sysv/linux/arm/clone.S +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Pat Beirne - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#include -#define _ERRNO_H 1 -#include - -#define CLONE_VM 0x00000100 -#define CLONE_THREAD 0x00010000 - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - pid_t *ptid, struct user_desc *tls, pid_t *ctid); */ - - .text -ENTRY(__clone) - @ sanity check args - cmp r0, #0 - ite ne - cmpne r1, #0 - moveq r0, #-EINVAL - beq PLTJMP(syscall_error) - - @ insert the args onto the new stack - str r3, [r1, #-4]! - str r0, [r1, #-4]! - - @ do the system call - @ get flags - mov r0, r2 - mov ip, r2 - @ new sp is already in r1 - push {r4, r7} - cfi_adjust_cfa_offset (8) - cfi_rel_offset (r4, 0) - cfi_rel_offset (r7, 4) - ldr r2, [sp, #8] - ldr r3, [sp, #12] - ldr r4, [sp, #16] - ldr r7, =SYS_ify(clone) - swi 0x0 - cfi_endproc - cmp r0, #0 - beq 1f - pop {r4, r7} - blt PLTJMP(C_SYMBOL_NAME(__syscall_error)) - RETINSTR(, lr) - - cfi_startproc -PSEUDO_END (__clone) - -1: - .fnstart - .cantunwind - @ pick the function arg and call address off the stack and execute - ldr r0, [sp, #4] - ldr ip, [sp], #8 - BLX (ip) - - @ and we are done, passing the return value through r0 - b PLTJMP(HIDDEN_JUMPTARGET(_exit)) - - .fnend - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/arm/dl-cache.h b/sysdeps/unix/sysv/linux/arm/dl-cache.h deleted file mode 100644 index ccc4f2f3b3..0000000000 --- a/sysdeps/unix/sysv/linux/arm/dl-cache.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* In order to support the transition from unmarked objects - to marked objects we must treat unmarked objects as - compatible with either FLAG_ARM_LIBHF or FLAG_ARM_LIBSF. */ -#ifdef __ARM_PCS_VFP -# define _dl_cache_check_flags(flags) \ - ((flags) == (FLAG_ARM_LIBHF | FLAG_ELF_LIBC6) \ - || (flags) == FLAG_ELF_LIBC6) -#else -# define _dl_cache_check_flags(flags) \ - ((flags) == (FLAG_ARM_LIBSF | FLAG_ELF_LIBC6) \ - || (flags) == FLAG_ELF_LIBC6) -#endif - -#include_next diff --git a/sysdeps/unix/sysv/linux/arm/dl-machine.h b/sysdeps/unix/sysv/linux/arm/dl-machine.h deleted file mode 100644 index 8cc7d25439..0000000000 --- a/sysdeps/unix/sysv/linux/arm/dl-machine.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. ARM/Linux version - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef dl_machine_h - -/* This definition is Linux-specific. */ -#define CLEAR_CACHE(BEG,END) \ - INTERNAL_SYSCALL_ARM (cacheflush, , 3, (BEG), (END), 0) - -#endif - -/* The rest is just machine-specific. - This #include is outside the #ifndef because the parts of - dl-machine.h used only by dynamic-link.h are outside the guard. */ -#include diff --git a/sysdeps/unix/sysv/linux/arm/dl-procinfo.c b/sysdeps/unix/sysv/linux/arm/dl-procinfo.c deleted file mode 100644 index 15c45d089f..0000000000 --- a/sysdeps/unix/sysv/linux/arm/dl-procinfo.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Data for Linux/ARM version of processor capability information. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* This information must be kept in sync with the _DL_HWCAP_COUNT and - _DL_PLATFORM_COUNT definitions in procinfo.h. - - If anything should be added here check whether the size of each string - is still ok with the given array size. - - All the #ifdefs in the definitions are quite irritating but - necessary if we want to avoid duplicating the information. There - are three different modes: - - - PROCINFO_DECL is defined. This means we are only interested in - declarations. - - - PROCINFO_DECL is not defined: - - + if SHARED is defined the file is included in an array - initializer. The .element = { ... } syntax is needed. - - + if SHARED is not defined a normal array initialization is - needed. - */ - -#ifndef PROCINFO_CLASS -#define PROCINFO_CLASS -#endif - -#if !defined PROCINFO_DECL && defined SHARED - ._dl_arm_cap_flags -#else -PROCINFO_CLASS const char _dl_arm_cap_flags[27][10] -#endif -#ifndef PROCINFO_DECL -= { - "swp", "half", "thumb", "26bit", "fastmult", "fpa", "vfp", "edsp", - "java", "iwmmxt", "crunch", "thumbee", "neon", "vfpv3", "vfpv3d16", - "tls", "vfpv4", "idiva", "idivt", "vfpd32", "lpae", "evtstrm", - "aes", "pmull", "sha1", "sha2", "crc32", - } -#endif -#if !defined SHARED || defined PROCINFO_DECL -; -#else -, -#endif - -#undef PROCINFO_DECL -#undef PROCINFO_CLASS diff --git a/sysdeps/unix/sysv/linux/arm/dl-procinfo.h b/sysdeps/unix/sysv/linux/arm/dl-procinfo.h deleted file mode 100644 index b6a9d9f6a2..0000000000 --- a/sysdeps/unix/sysv/linux/arm/dl-procinfo.h +++ /dev/null @@ -1,93 +0,0 @@ -/* Linux/ARM version of processor capability information handling macros. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _DL_PROCINFO_H -#define _DL_PROCINFO_H 1 - -#include -#include - -#define _DL_HWCAP_COUNT 27 - -/* Low 22 bits are allocated in HWCAP. */ -#define _DL_HWCAP_LAST 21 - -/* Low 5 bits are allocated in HWCAP2. */ -#define _DL_HWCAP2_LAST 4 - -/* The kernel provides platform data but it is not interesting. */ -#define _DL_HWCAP_PLATFORM 0 - - -static inline const char * -__attribute__ ((unused)) -_dl_hwcap_string (int idx) -{ - return GLRO(dl_arm_cap_flags)[idx]; -}; - -static inline int -__attribute__ ((unused)) -_dl_procinfo (unsigned int type, unsigned long int word) -{ - switch(type) - { - case AT_HWCAP: - _dl_printf ("AT_HWCAP: "); - - for (int i = 0; i <= _DL_HWCAP_LAST; ++i) - if (word & (1 << i)) - _dl_printf (" %s", _dl_hwcap_string (i)); - break; - case AT_HWCAP2: - { - unsigned int offset = _DL_HWCAP_LAST + 1; - - _dl_printf ("AT_HWCAP2: "); - - for (int i = 0; i <= _DL_HWCAP2_LAST; ++i) - if (word & (1 << i)) - _dl_printf (" %s", _dl_hwcap_string (offset + i)); - break; - } - default: - /* This should not happen. */ - return -1; - } - _dl_printf ("\n"); - return 0; -} - -#define HWCAP_IMPORTANT (HWCAP_ARM_VFP | HWCAP_ARM_NEON) - -static inline int -__attribute__ ((unused)) -_dl_string_hwcap (const char *str) -{ - for (int i = 0; i < _DL_HWCAP_COUNT; i++) - { - if (strcmp (str, _dl_hwcap_string (i)) == 0) - return i; - } - return -1; -}; - -#define _dl_string_platform(str) (-1) - -#endif /* dl-procinfo.h */ diff --git a/sysdeps/unix/sysv/linux/arm/fcntl.c b/sysdeps/unix/sysv/linux/arm/fcntl.c deleted file mode 100644 index ea951bc4f9..0000000000 --- a/sysdeps/unix/sysv/linux/arm/fcntl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/arm/fxstat.c b/sysdeps/unix/sysv/linux/arm/fxstat.c deleted file mode 100644 index 4f219f0b9d..0000000000 --- a/sysdeps/unix/sysv/linux/arm/fxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/arm/fxstatat.c b/sysdeps/unix/sysv/linux/arm/fxstatat.c deleted file mode 100644 index 0f8b3135d8..0000000000 --- a/sysdeps/unix/sysv/linux/arm/fxstatat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/arm/getcontext.S b/sysdeps/unix/sysv/linux/arm/getcontext.S deleted file mode 100644 index fcc6c6f36b..0000000000 --- a/sysdeps/unix/sysv/linux/arm/getcontext.S +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "ucontext_i.h" - - .syntax unified - .text - -/* int getcontext (ucontext_t *ucp) */ - -ENTRY(__getcontext) - /* No need to save r0-r3, d0-d7, or d16-d31. */ - add r1, r0, #MCONTEXT_ARM_R4 - stmia r1, {r4-r11} - - /* Save R13 separately as Thumb can't STM it. */ - str r13, [r0, #MCONTEXT_ARM_SP] - str r14, [r0, #MCONTEXT_ARM_LR] - /* Return to LR */ - str r14, [r0, #MCONTEXT_ARM_PC] - /* Return zero */ - mov r2, #0 - str r2, [r0, #MCONTEXT_ARM_R0] - - /* Save ucontext_t * across the next call. */ - mov r4, r0 - - /* __sigprocmask(SIG_BLOCK, NULL, &(ucontext->uc_sigmask)) */ - mov r0, #SIG_BLOCK - mov r1, #0 - add r2, r4, #UCONTEXT_SIGMASK - bl PLTJMP(__sigprocmask) - - /* Store FP regs. Much of the FP code is copied from arm/setjmp.S. */ - -#ifdef PIC - ldr r2, 1f - ldr r1, .Lrtld_global_ro -0: add r2, pc, r2 - ldr r2, [r2, r1] - ldr r2, [r2, #RTLD_GLOBAL_RO_DL_HWCAP_OFFSET] -#else - ldr r2, .Lhwcap - ldr r2, [r2, #0] -#endif - - add r0, r4, #UCONTEXT_REGSPACE - -#ifdef __SOFTFP__ - tst r2, #HWCAP_ARM_VFP - beq .Lno_vfp -#endif - - /* Store the VFP registers. - Don't use VFP instructions directly because this code - is used in non-VFP multilibs. */ - /* Following instruction is vstmia r0!, {d8-d15}. */ - stc p11, cr8, [r0], #64 - /* Store the floating-point status register. */ - /* Following instruction is vmrs r1, fpscr. */ - mrc p10, 7, r1, cr1, cr0, 0 - str r1, [r0], #4 -.Lno_vfp: - - tst r2, #HWCAP_ARM_IWMMXT - beq .Lno_iwmmxt - - /* Save the call-preserved iWMMXt registers. */ - /* Following instructions are wstrd wr10, [r0], #8 (etc.) */ - stcl p1, cr10, [r0], #8 - stcl p1, cr11, [r0], #8 - stcl p1, cr12, [r0], #8 - stcl p1, cr13, [r0], #8 - stcl p1, cr14, [r0], #8 - stcl p1, cr15, [r0], #8 -.Lno_iwmmxt: - - /* Restore the clobbered R4 and LR. */ - ldr r14, [r4, #MCONTEXT_ARM_LR] - ldr r4, [r4, #MCONTEXT_ARM_R4] - - mov r0, #0 - - DO_RET(r14) - -END(__getcontext) - -#ifdef PIC -1: .long _GLOBAL_OFFSET_TABLE_ - 0b - PC_OFS -.Lrtld_global_ro: - .long C_SYMBOL_NAME(_rtld_global_ro)(GOT) -#else -.Lhwcap: - .long C_SYMBOL_NAME(_dl_hwcap) -#endif - - -weak_alias(__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/arm/getdents64.c b/sysdeps/unix/sysv/linux/arm/getdents64.c deleted file mode 100644 index 0c75fb5a06..0000000000 --- a/sysdeps/unix/sysv/linux/arm/getdents64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/arm/glob64.c b/sysdeps/unix/sysv/linux/arm/glob64.c deleted file mode 100644 index 82a9a296a7..0000000000 --- a/sysdeps/unix/sysv/linux/arm/glob64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/arm/init-first.c b/sysdeps/unix/sysv/linux/arm/init-first.c deleted file mode 100644 index 3c289c2a25..0000000000 --- a/sysdeps/unix/sysv/linux/arm/init-first.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Initialization code run first thing by the ELF startup code. Linux/ARM. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef SHARED -# include -# include - -int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) attribute_hidden; -int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *); - -static inline void -_libc_vdso_platform_setup (void) -{ - PREPARE_VERSION_KNOWN (linux26, LINUX_2_6); - - void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux26); - PTR_MANGLE (p); - VDSO_SYMBOL (gettimeofday) = p; - - p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26); - PTR_MANGLE (p); - VDSO_SYMBOL (clock_gettime) = p; -} - -# define VDSO_SETUP _libc_vdso_platform_setup -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/arm/ioperm.c b/sysdeps/unix/sysv/linux/arm/ioperm.c deleted file mode 100644 index c1fedd3696..0000000000 --- a/sysdeps/unix/sysv/linux/arm/ioperm.c +++ /dev/null @@ -1,183 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Phil Blundell, based on the Alpha version by - David Mosberger. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* I/O port access on the ARM is something of a fiction. What we do is to - map an appropriate area of /dev/mem into user space so that a program - can blast away at the hardware in such a way as to generate I/O cycles - on the bus. To insulate user code from dependencies on particular - hardware we don't allow calls to inb() and friends to be inlined, but - force them to come through code in here every time. Performance-critical - registers tend to be memory mapped these days so this should be no big - problem. */ - -/* Once upon a time this file used mprotect to enable and disable - access to particular areas of I/O space. Unfortunately the - mprotect syscall also has the side effect of enabling caching for - the area affected (this is a kernel limitation). So we now just - enable all the ports all of the time. */ - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -#define MAX_PORT 0x10000 - -static struct { - unsigned long int base; - unsigned long int io_base; - unsigned int shift; - unsigned int initdone; /* since all the above could be 0 */ -} io; - -#define IO_ADDR(port) (io.base + ((port) << io.shift)) - -/* - * Initialize I/O system. The io_bae and port_shift values are fetched - * using sysctl (CTL_BUS, CTL_BUS_ISA, ISA_*). - */ - -static int -init_iosys (void) -{ - static int iobase_name[] = { CTL_BUS, CTL_BUS_ISA, BUS_ISA_PORT_BASE }; - static int ioshift_name[] = { CTL_BUS, CTL_BUS_ISA, BUS_ISA_PORT_SHIFT }; - size_t len = sizeof(io.base); - - if (! __sysctl (iobase_name, 3, &io.io_base, &len, NULL, 0) - && ! __sysctl (ioshift_name, 3, &io.shift, &len, NULL, 0)) - { - io.initdone = 1; - return 0; - } - - /* sysctl has failed... */ - __set_errno (ENODEV); - return -1; -} - -int -_ioperm (unsigned long int from, unsigned long int num, int turn_on) -{ - if (! io.initdone && init_iosys () < 0) - return -1; - - /* this test isn't as silly as it may look like; consider overflows! */ - if (from >= MAX_PORT || from + num > MAX_PORT) - { - __set_errno (EINVAL); - return -1; - } - - if (turn_on) - { - if (! io.base) - { - int fd; - - fd = __open ("/dev/mem", O_RDWR); - if (fd < 0) - return -1; - - io.base = - (unsigned long int) __mmap (0, MAX_PORT << io.shift, - PROT_READ | PROT_WRITE, - MAP_SHARED, fd, io.io_base); - __close (fd); - if ((long) io.base == -1) - return -1; - } - } - - return 0; -} - - -int -_iopl (unsigned int level) -{ - if (level > 3) - { - __set_errno (EINVAL); - return -1; - } - if (level) - { - return _ioperm (0, MAX_PORT, 1); - } - return 0; -} - - -void -_outb (unsigned char b, unsigned long int port) -{ - *((volatile unsigned char *)(IO_ADDR (port))) = b; -} - - -void -_outw (unsigned short b, unsigned long int port) -{ - *((volatile unsigned short *)(IO_ADDR (port))) = b; -} - - -void -_outl (unsigned int b, unsigned long int port) -{ - *((volatile unsigned long *)(IO_ADDR (port))) = b; -} - - -unsigned int -_inb (unsigned long int port) -{ - return *((volatile unsigned char *)(IO_ADDR (port))); -} - - -unsigned int -_inw (unsigned long int port) -{ - return *((volatile unsigned short *)(IO_ADDR (port))); -} - - -unsigned int -_inl (unsigned long int port) -{ - return *((volatile unsigned long *)(IO_ADDR (port))); -} - -weak_alias (_ioperm, ioperm); -weak_alias (_iopl, iopl); -weak_alias (_inb, inb); -weak_alias (_inw, inw); -weak_alias (_inl, inl); -weak_alias (_outb, outb); -weak_alias (_outw, outw); -weak_alias (_outl, outl); diff --git a/sysdeps/unix/sysv/linux/arm/kernel-features.h b/sysdeps/unix/sysv/linux/arm/kernel-features.h deleted file mode 100644 index e13b049389..0000000000 --- a/sysdeps/unix/sysv/linux/arm/kernel-features.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include_next - -/* The ARM kernel before 3.14.3 may or may not support - futex_atomic_cmpxchg_inatomic, depending on kernel - configuration. */ -#if __LINUX_KERNEL_VERSION < 0x030E03 -# undef __ASSUME_SET_ROBUST_LIST -#endif - -/* ARM fadvise64_64 reorganize the syscall arguments. */ -#define __ASSUME_FADVISE64_64_6ARG 1 - -/* Define this if your 32-bit syscall API requires 64-bit register - pairs to start with an even-number register. */ -#define __ASSUME_ALIGNED_REGISTER_PAIRS 1 - -/* ARM only has a syscall for fadvise64{_64} and it is defined with a - non-standard name. */ -#define __NR_fadvise64_64 __NR_arm_fadvise64_64 - -#define __ASSUME_RECV_SYSCALL 1 -#define __ASSUME_SEND_SYSCALL 1 diff --git a/sysdeps/unix/sysv/linux/arm/ld.abilist b/sysdeps/unix/sysv/linux/arm/ld.abilist deleted file mode 100644 index cbf3a3cb2e..0000000000 --- a/sysdeps/unix/sysv/linux/arm/ld.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __libc_stack_end D 0x4 -GLIBC_2.4 __stack_chk_guard D 0x4 -GLIBC_2.4 __tls_get_addr F -GLIBC_2.4 _dl_mcount F -GLIBC_2.4 _r_debug D 0x14 -GLIBC_2.4 calloc F -GLIBC_2.4 free F -GLIBC_2.4 malloc F -GLIBC_2.4 realloc F diff --git a/sysdeps/unix/sysv/linux/arm/ldconfig.h b/sysdeps/unix/sysv/linux/arm/ldconfig.h deleted file mode 100644 index a9a467cc6b..0000000000 --- a/sysdeps/unix/sysv/linux/arm/ldconfig.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld-linux.so.3", FLAG_ELF_LIBC6 }, \ - { "/lib/ld-linux-armhf.so.3", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/arm/ldsodefs.h b/sysdeps/unix/sysv/linux/arm/ldsodefs.h deleted file mode 100644 index 6bd126b8ec..0000000000 --- a/sysdeps/unix/sysv/linux/arm/ldsodefs.h +++ /dev/null @@ -1,73 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _ARM_LINUX_LDSODEFS_H -#define _ARM_LINUX_LDSODEFS_H 1 - -#include_next - -#undef VALID_ELF_HEADER -#undef VALID_ELF_OSABI -#undef MORE_ELF_HEADER_DATA - -#define EXTRA_OSABI ELFOSABI_ARM_AEABI - -#ifdef __ARM_PCS_VFP -# define VALID_FLOAT_ABI(x) \ - ((EF_ARM_EABI_VERSION ((x)) != EF_ARM_EABI_VER5) \ - || !((x) & EF_ARM_ABI_FLOAT_SOFT)) -#else -# define VALID_FLOAT_ABI(x) \ - ((EF_ARM_EABI_VERSION ((x)) != EF_ARM_EABI_VER5) \ - || !((x) & EF_ARM_ABI_FLOAT_HARD)) -#endif - -#undef VALID_ELF_HEADER -#define VALID_ELF_HEADER(hdr,exp,size) \ - ((memcmp (hdr, exp, size) == 0 \ - || memcmp (hdr, expected2, size) == 0 \ - || memcmp (hdr, expected3, size) == 0) \ - && VALID_FLOAT_ABI (ehdr->e_flags)) -#define VALID_ELF_OSABI(osabi) (osabi == ELFOSABI_SYSV \ - || osabi == ELFOSABI_GNU \ - || osabi == EXTRA_OSABI) -#define MORE_ELF_HEADER_DATA \ - static const unsigned char expected2[EI_PAD] = \ - { \ - [EI_MAG0] = ELFMAG0, \ - [EI_MAG1] = ELFMAG1, \ - [EI_MAG2] = ELFMAG2, \ - [EI_MAG3] = ELFMAG3, \ - [EI_CLASS] = ELFW(CLASS), \ - [EI_DATA] = byteorder, \ - [EI_VERSION] = EV_CURRENT, \ - [EI_OSABI] = ELFOSABI_GNU \ - }; \ - static const unsigned char expected3[EI_PAD] = \ - { \ - [EI_MAG0] = ELFMAG0, \ - [EI_MAG1] = ELFMAG1, \ - [EI_MAG2] = ELFMAG2, \ - [EI_MAG3] = ELFMAG3, \ - [EI_CLASS] = ELFW(CLASS), \ - [EI_DATA] = byteorder, \ - [EI_VERSION] = EV_CURRENT, \ - [EI_OSABI] = EXTRA_OSABI \ - } - -#endif diff --git a/sysdeps/unix/sysv/linux/arm/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/arm/libBrokenLocale.abilist deleted file mode 100644 index e80f213955..0000000000 --- a/sysdeps/unix/sysv/linux/arm/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/arm/libanl.abilist b/sysdeps/unix/sysv/linux/arm/libanl.abilist deleted file mode 100644 index df0c397ddc..0000000000 --- a/sysdeps/unix/sysv/linux/arm/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 gai_cancel F -GLIBC_2.4 gai_error F -GLIBC_2.4 gai_suspend F -GLIBC_2.4 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/arm/libc-do-syscall.S b/sysdeps/unix/sysv/linux/arm/libc-do-syscall.S deleted file mode 100644 index e5c1341a9d..0000000000 --- a/sysdeps/unix/sysv/linux/arm/libc-do-syscall.S +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* When this file is built for inclusion in nscd, _FORTIFY_SOURCE is - defined but -O is not used, resulting in a warning from features.h. */ -#undef _FORTIFY_SOURCE -#include - -/* Out-of-line syscall stub. We expect the system call number in ip - and return the raw result in r0. No registers are clobbered. - We could avoid using the stack for this, but the goal is accurate - unwind information - and while there is a reserved prefix in the - ARM unwind tables for register to register moves, the actual opcodes - are not defined. */ - -#if defined(__thumb__) - .thumb - .syntax unified - .hidden __libc_do_syscall - -#undef CALL_MCOUNT -#define CALL_MCOUNT - -ENTRY (__libc_do_syscall) - .fnstart - push {r7, lr} - .save {r7, lr} - cfi_adjust_cfa_offset (8) - cfi_rel_offset (r7, 0) - cfi_rel_offset (lr, 4) - mov r7, ip - swi 0x0 - pop {r7, pc} - .fnend -END (__libc_do_syscall) - -#endif /* __thumb__ */ diff --git a/sysdeps/unix/sysv/linux/arm/libc-vdso.h b/sysdeps/unix/sysv/linux/arm/libc-vdso.h deleted file mode 100644 index ae37b574e1..0000000000 --- a/sysdeps/unix/sysv/linux/arm/libc-vdso.h +++ /dev/null @@ -1,33 +0,0 @@ -/* VDSO function pointer declarations. Linux/ARM. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LIBC_VDSO_H -#define _LIBC_VDSO_H - -#ifdef SHARED - -# include - -extern int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) - attribute_hidden; -extern int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *); - -#endif - -#endif /* _LIBC_VDSO_H */ diff --git a/sysdeps/unix/sysv/linux/arm/libc.abilist b/sysdeps/unix/sysv/linux/arm/libc.abilist deleted file mode 100644 index d2a206a8df..0000000000 --- a/sysdeps/unix/sysv/linux/arm/libc.abilist +++ /dev/null @@ -1,2154 +0,0 @@ -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 fallocate64 F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _sys_errlist D 0x21c -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x21c -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 _Exit F -GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 -GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 -GLIBC_2.4 _IO_2_1_stdout_ D 0xa0 -GLIBC_2.4 _IO_adjust_column F -GLIBC_2.4 _IO_adjust_wcolumn F -GLIBC_2.4 _IO_default_doallocate F -GLIBC_2.4 _IO_default_finish F -GLIBC_2.4 _IO_default_pbackfail F -GLIBC_2.4 _IO_default_uflow F -GLIBC_2.4 _IO_default_xsgetn F -GLIBC_2.4 _IO_default_xsputn F -GLIBC_2.4 _IO_do_write F -GLIBC_2.4 _IO_doallocbuf F -GLIBC_2.4 _IO_fclose F -GLIBC_2.4 _IO_fdopen F -GLIBC_2.4 _IO_feof F -GLIBC_2.4 _IO_ferror F -GLIBC_2.4 _IO_fflush F -GLIBC_2.4 _IO_fgetpos F -GLIBC_2.4 _IO_fgetpos64 F -GLIBC_2.4 _IO_fgets F -GLIBC_2.4 _IO_file_attach F -GLIBC_2.4 _IO_file_close F -GLIBC_2.4 _IO_file_close_it F -GLIBC_2.4 _IO_file_doallocate F -GLIBC_2.4 _IO_file_finish F -GLIBC_2.4 _IO_file_fopen F -GLIBC_2.4 _IO_file_init F -GLIBC_2.4 _IO_file_jumps D 0x54 -GLIBC_2.4 _IO_file_open F -GLIBC_2.4 _IO_file_overflow F -GLIBC_2.4 _IO_file_read F -GLIBC_2.4 _IO_file_seek F -GLIBC_2.4 _IO_file_seekoff F -GLIBC_2.4 _IO_file_setbuf F -GLIBC_2.4 _IO_file_stat F -GLIBC_2.4 _IO_file_sync F -GLIBC_2.4 _IO_file_underflow F -GLIBC_2.4 _IO_file_write F -GLIBC_2.4 _IO_file_xsputn F -GLIBC_2.4 _IO_flockfile F -GLIBC_2.4 _IO_flush_all F -GLIBC_2.4 _IO_flush_all_linebuffered F -GLIBC_2.4 _IO_fopen F -GLIBC_2.4 _IO_fprintf F -GLIBC_2.4 _IO_fputs F -GLIBC_2.4 _IO_fread F -GLIBC_2.4 _IO_free_backup_area F -GLIBC_2.4 _IO_free_wbackup_area F -GLIBC_2.4 _IO_fsetpos F -GLIBC_2.4 _IO_fsetpos64 F -GLIBC_2.4 _IO_ftell F -GLIBC_2.4 _IO_ftrylockfile F -GLIBC_2.4 _IO_funlockfile F -GLIBC_2.4 _IO_fwrite F -GLIBC_2.4 _IO_getc F -GLIBC_2.4 _IO_getline F -GLIBC_2.4 _IO_getline_info F -GLIBC_2.4 _IO_gets F -GLIBC_2.4 _IO_init F -GLIBC_2.4 _IO_init_marker F -GLIBC_2.4 _IO_init_wmarker F -GLIBC_2.4 _IO_iter_begin F -GLIBC_2.4 _IO_iter_end F -GLIBC_2.4 _IO_iter_file F -GLIBC_2.4 _IO_iter_next F -GLIBC_2.4 _IO_least_wmarker F -GLIBC_2.4 _IO_link_in F -GLIBC_2.4 _IO_list_all D 0x4 -GLIBC_2.4 _IO_list_lock F -GLIBC_2.4 _IO_list_resetlock F -GLIBC_2.4 _IO_list_unlock F -GLIBC_2.4 _IO_marker_delta F -GLIBC_2.4 _IO_marker_difference F -GLIBC_2.4 _IO_padn F -GLIBC_2.4 _IO_peekc_locked F -GLIBC_2.4 _IO_popen F -GLIBC_2.4 _IO_printf F -GLIBC_2.4 _IO_proc_close F -GLIBC_2.4 _IO_proc_open F -GLIBC_2.4 _IO_putc F -GLIBC_2.4 _IO_puts F -GLIBC_2.4 _IO_remove_marker F -GLIBC_2.4 _IO_seekmark F -GLIBC_2.4 _IO_seekoff F -GLIBC_2.4 _IO_seekpos F -GLIBC_2.4 _IO_seekwmark F -GLIBC_2.4 _IO_setb F -GLIBC_2.4 _IO_setbuffer F -GLIBC_2.4 _IO_setvbuf F -GLIBC_2.4 _IO_sgetn F -GLIBC_2.4 _IO_sprintf F -GLIBC_2.4 _IO_sputbackc F -GLIBC_2.4 _IO_sputbackwc F -GLIBC_2.4 _IO_sscanf F -GLIBC_2.4 _IO_str_init_readonly F -GLIBC_2.4 _IO_str_init_static F -GLIBC_2.4 _IO_str_overflow F -GLIBC_2.4 _IO_str_pbackfail F -GLIBC_2.4 _IO_str_seekoff F -GLIBC_2.4 _IO_str_underflow F -GLIBC_2.4 _IO_sungetc F -GLIBC_2.4 _IO_sungetwc F -GLIBC_2.4 _IO_switch_to_get_mode F -GLIBC_2.4 _IO_switch_to_main_wget_area F -GLIBC_2.4 _IO_switch_to_wbackup_area F -GLIBC_2.4 _IO_switch_to_wget_mode F -GLIBC_2.4 _IO_un_link F -GLIBC_2.4 _IO_ungetc F -GLIBC_2.4 _IO_unsave_markers F -GLIBC_2.4 _IO_unsave_wmarkers F -GLIBC_2.4 _IO_vfprintf F -GLIBC_2.4 _IO_vfscanf F -GLIBC_2.4 _IO_vsprintf F -GLIBC_2.4 _IO_wdefault_doallocate F -GLIBC_2.4 _IO_wdefault_finish F -GLIBC_2.4 _IO_wdefault_pbackfail F -GLIBC_2.4 _IO_wdefault_uflow F -GLIBC_2.4 _IO_wdefault_xsgetn F -GLIBC_2.4 _IO_wdefault_xsputn F -GLIBC_2.4 _IO_wdo_write F -GLIBC_2.4 _IO_wdoallocbuf F -GLIBC_2.4 _IO_wfile_jumps D 0x54 -GLIBC_2.4 _IO_wfile_overflow F -GLIBC_2.4 _IO_wfile_seekoff F -GLIBC_2.4 _IO_wfile_sync F -GLIBC_2.4 _IO_wfile_underflow F -GLIBC_2.4 _IO_wfile_xsputn F -GLIBC_2.4 _IO_wmarker_delta F -GLIBC_2.4 _IO_wsetb F -GLIBC_2.4 __adjtimex F -GLIBC_2.4 __aeabi_MB_CUR_MAX F -GLIBC_2.4 __aeabi_assert F -GLIBC_2.4 __aeabi_atexit F -GLIBC_2.4 __aeabi_errno_addr F -GLIBC_2.4 __aeabi_localeconv F -GLIBC_2.4 __aeabi_memclr F -GLIBC_2.4 __aeabi_memclr4 F -GLIBC_2.4 __aeabi_memclr8 F -GLIBC_2.4 __aeabi_memcpy F -GLIBC_2.4 __aeabi_memcpy4 F -GLIBC_2.4 __aeabi_memcpy8 F -GLIBC_2.4 __aeabi_memmove F -GLIBC_2.4 __aeabi_memmove4 F -GLIBC_2.4 __aeabi_memmove8 F -GLIBC_2.4 __aeabi_memset F -GLIBC_2.4 __aeabi_memset4 F -GLIBC_2.4 __aeabi_memset8 F -GLIBC_2.4 __after_morecore_hook D 0x4 -GLIBC_2.4 __argz_count F -GLIBC_2.4 __argz_next F -GLIBC_2.4 __argz_stringify F -GLIBC_2.4 __asprintf F -GLIBC_2.4 __assert F -GLIBC_2.4 __assert_fail F -GLIBC_2.4 __assert_perror_fail F -GLIBC_2.4 __backtrace F -GLIBC_2.4 __backtrace_symbols F -GLIBC_2.4 __backtrace_symbols_fd F -GLIBC_2.4 __bsd_getpgrp F -GLIBC_2.4 __bzero F -GLIBC_2.4 __check_rhosts_file D 0x4 -GLIBC_2.4 __chk_fail F -GLIBC_2.4 __clone F -GLIBC_2.4 __close F -GLIBC_2.4 __cmsg_nxthdr F -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __connect F -GLIBC_2.4 __ctype_b_loc F -GLIBC_2.4 __ctype_get_mb_cur_max F -GLIBC_2.4 __ctype_tolower_loc F -GLIBC_2.4 __ctype_toupper_loc F -GLIBC_2.4 __curbrk D 0x4 -GLIBC_2.4 __cxa_atexit F -GLIBC_2.4 __cxa_finalize F -GLIBC_2.4 __cyg_profile_func_enter F -GLIBC_2.4 __cyg_profile_func_exit F -GLIBC_2.4 __daylight D 0x4 -GLIBC_2.4 __dcgettext F -GLIBC_2.4 __default_morecore F -GLIBC_2.4 __dgettext F -GLIBC_2.4 __dup2 F -GLIBC_2.4 __duplocale F -GLIBC_2.4 __endmntent F -GLIBC_2.4 __environ D 0x4 -GLIBC_2.4 __errno_location F -GLIBC_2.4 __fbufsize F -GLIBC_2.4 __fcntl F -GLIBC_2.4 __ffs F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __finite F -GLIBC_2.4 __finitef F -GLIBC_2.4 __finitel F -GLIBC_2.4 __flbf F -GLIBC_2.4 __fork F -GLIBC_2.4 __fpending F -GLIBC_2.4 __fprintf_chk F -GLIBC_2.4 __fpu_control D 0x4 -GLIBC_2.4 __fpurge F -GLIBC_2.4 __freadable F -GLIBC_2.4 __freading F -GLIBC_2.4 __free_hook D 0x4 -GLIBC_2.4 __freelocale F -GLIBC_2.4 __fsetlocking F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fwritable F -GLIBC_2.4 __fwriting F -GLIBC_2.4 __fxstat F -GLIBC_2.4 __fxstat64 F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdelim F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getmntent_r F -GLIBC_2.4 __getpagesize F -GLIBC_2.4 __getpgid F -GLIBC_2.4 __getpid F -GLIBC_2.4 __gets_chk F -GLIBC_2.4 __gettimeofday F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __gmtime_r F -GLIBC_2.4 __gnu_Unwind_Find_exidx F -GLIBC_2.4 __h_errno_location F -GLIBC_2.4 __isalnum_l F -GLIBC_2.4 __isalpha_l F -GLIBC_2.4 __isascii_l F -GLIBC_2.4 __isblank_l F -GLIBC_2.4 __iscntrl_l F -GLIBC_2.4 __isctype F -GLIBC_2.4 __isdigit_l F -GLIBC_2.4 __isgraph_l F -GLIBC_2.4 __isinf F -GLIBC_2.4 __isinff F -GLIBC_2.4 __isinfl F -GLIBC_2.4 __islower_l F -GLIBC_2.4 __isnan F -GLIBC_2.4 __isnanf F -GLIBC_2.4 __isnanl F -GLIBC_2.4 __isprint_l F -GLIBC_2.4 __ispunct_l F -GLIBC_2.4 __isspace_l F -GLIBC_2.4 __isupper_l F -GLIBC_2.4 __iswalnum_l F -GLIBC_2.4 __iswalpha_l F -GLIBC_2.4 __iswblank_l F -GLIBC_2.4 __iswcntrl_l F -GLIBC_2.4 __iswctype F -GLIBC_2.4 __iswctype_l F -GLIBC_2.4 __iswdigit_l F -GLIBC_2.4 __iswgraph_l F -GLIBC_2.4 __iswlower_l F -GLIBC_2.4 __iswprint_l F -GLIBC_2.4 __iswpunct_l F -GLIBC_2.4 __iswspace_l F -GLIBC_2.4 __iswupper_l F -GLIBC_2.4 __iswxdigit_l F -GLIBC_2.4 __isxdigit_l F -GLIBC_2.4 __ivaliduser F -GLIBC_2.4 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.4 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.4 __key_gendes_LOCAL D 0x4 -GLIBC_2.4 __libc_allocate_rtsig F -GLIBC_2.4 __libc_calloc F -GLIBC_2.4 __libc_current_sigrtmax F -GLIBC_2.4 __libc_current_sigrtmin F -GLIBC_2.4 __libc_free F -GLIBC_2.4 __libc_freeres F -GLIBC_2.4 __libc_init_first F -GLIBC_2.4 __libc_mallinfo F -GLIBC_2.4 __libc_malloc F -GLIBC_2.4 __libc_mallopt F -GLIBC_2.4 __libc_memalign F -GLIBC_2.4 __libc_pvalloc F -GLIBC_2.4 __libc_realloc F -GLIBC_2.4 __libc_sa_len F -GLIBC_2.4 __libc_start_main F -GLIBC_2.4 __libc_valloc F -GLIBC_2.4 __lseek F -GLIBC_2.4 __lxstat F -GLIBC_2.4 __lxstat64 F -GLIBC_2.4 __malloc_hook D 0x4 -GLIBC_2.4 __malloc_initialize_hook D 0x4 -GLIBC_2.4 __mbrlen F -GLIBC_2.4 __mbrtowc F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __memalign_hook D 0x4 -GLIBC_2.4 __memcpy_chk F -GLIBC_2.4 __memmove_chk F -GLIBC_2.4 __mempcpy F -GLIBC_2.4 __mempcpy_chk F -GLIBC_2.4 __mempcpy_small F -GLIBC_2.4 __memset_chk F -GLIBC_2.4 __monstartup F -GLIBC_2.4 __morecore D 0x4 -GLIBC_2.4 __nanosleep F -GLIBC_2.4 __newlocale F -GLIBC_2.4 __nl_langinfo_l F -GLIBC_2.4 __nss_configure_lookup F -GLIBC_2.4 __nss_database_lookup F -GLIBC_2.4 __nss_group_lookup F -GLIBC_2.4 __nss_hostname_digits_dots F -GLIBC_2.4 __nss_hosts_lookup F -GLIBC_2.4 __nss_next F -GLIBC_2.4 __nss_passwd_lookup F -GLIBC_2.4 __open F -GLIBC_2.4 __open64 F -GLIBC_2.4 __overflow F -GLIBC_2.4 __pipe F -GLIBC_2.4 __poll F -GLIBC_2.4 __pread64 F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __printf_chk F -GLIBC_2.4 __printf_fp F -GLIBC_2.4 __profile_frequency F -GLIBC_2.4 __progname D 0x4 -GLIBC_2.4 __progname_full D 0x4 -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __pwrite64 F -GLIBC_2.4 __rawmemchr F -GLIBC_2.4 __rcmd_errstr D 0x4 -GLIBC_2.4 __read F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realloc_hook D 0x4 -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __register_atfork F -GLIBC_2.4 __res_init F -GLIBC_2.4 __res_nclose F -GLIBC_2.4 __res_ninit F -GLIBC_2.4 __res_randomid F -GLIBC_2.4 __res_state F -GLIBC_2.4 __rpc_thread_createerr F -GLIBC_2.4 __rpc_thread_svc_fdset F -GLIBC_2.4 __rpc_thread_svc_max_pollfd F -GLIBC_2.4 __rpc_thread_svc_pollfd F -GLIBC_2.4 __sbrk F -GLIBC_2.4 __sched_get_priority_max F -GLIBC_2.4 __sched_get_priority_min F -GLIBC_2.4 __sched_getparam F -GLIBC_2.4 __sched_getscheduler F -GLIBC_2.4 __sched_setscheduler F -GLIBC_2.4 __sched_yield F -GLIBC_2.4 __secure_getenv F -GLIBC_2.4 __select F -GLIBC_2.4 __send F -GLIBC_2.4 __setmntent F -GLIBC_2.4 __setpgid F -GLIBC_2.4 __sigaction F -GLIBC_2.4 __sigaddset F -GLIBC_2.4 __sigdelset F -GLIBC_2.4 __sigismember F -GLIBC_2.4 __signbit F -GLIBC_2.4 __signbitf F -GLIBC_2.4 __sigpause F -GLIBC_2.4 __sigsetjmp F -GLIBC_2.4 __sigsuspend F -GLIBC_2.4 __snprintf_chk F -GLIBC_2.4 __sprintf_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __statfs F -GLIBC_2.4 __stpcpy F -GLIBC_2.4 __stpcpy_chk F -GLIBC_2.4 __stpcpy_small F -GLIBC_2.4 __stpncpy F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __strcasecmp F -GLIBC_2.4 __strcasecmp_l F -GLIBC_2.4 __strcasestr F -GLIBC_2.4 __strcat_chk F -GLIBC_2.4 __strcoll_l F -GLIBC_2.4 __strcpy_chk F -GLIBC_2.4 __strcpy_small F -GLIBC_2.4 __strcspn_c1 F -GLIBC_2.4 __strcspn_c2 F -GLIBC_2.4 __strcspn_c3 F -GLIBC_2.4 __strdup F -GLIBC_2.4 __strerror_r F -GLIBC_2.4 __strfmon_l F -GLIBC_2.4 __strftime_l F -GLIBC_2.4 __strncasecmp_l F -GLIBC_2.4 __strncat_chk F -GLIBC_2.4 __strncpy_chk F -GLIBC_2.4 __strndup F -GLIBC_2.4 __strpbrk_c2 F -GLIBC_2.4 __strpbrk_c3 F -GLIBC_2.4 __strsep_1c F -GLIBC_2.4 __strsep_2c F -GLIBC_2.4 __strsep_3c F -GLIBC_2.4 __strsep_g F -GLIBC_2.4 __strspn_c1 F -GLIBC_2.4 __strspn_c2 F -GLIBC_2.4 __strspn_c3 F -GLIBC_2.4 __strtod_internal F -GLIBC_2.4 __strtod_l F -GLIBC_2.4 __strtof_internal F -GLIBC_2.4 __strtof_l F -GLIBC_2.4 __strtok_r F -GLIBC_2.4 __strtok_r_1c F -GLIBC_2.4 __strtol_internal F -GLIBC_2.4 __strtol_l F -GLIBC_2.4 __strtold_internal F -GLIBC_2.4 __strtold_l F -GLIBC_2.4 __strtoll_internal F -GLIBC_2.4 __strtoll_l F -GLIBC_2.4 __strtoul_internal F -GLIBC_2.4 __strtoul_l F -GLIBC_2.4 __strtoull_internal F -GLIBC_2.4 __strtoull_l F -GLIBC_2.4 __strverscmp F -GLIBC_2.4 __strxfrm_l F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __sysconf F -GLIBC_2.4 __sysctl F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __sysv_signal F -GLIBC_2.4 __timezone D 0x4 -GLIBC_2.4 __toascii_l F -GLIBC_2.4 __tolower_l F -GLIBC_2.4 __toupper_l F -GLIBC_2.4 __towctrans F -GLIBC_2.4 __towctrans_l F -GLIBC_2.4 __towlower_l F -GLIBC_2.4 __towupper_l F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __tzname D 0x8 -GLIBC_2.4 __uflow F -GLIBC_2.4 __underflow F -GLIBC_2.4 __uselocale F -GLIBC_2.4 __vfork F -GLIBC_2.4 __vfprintf_chk F -GLIBC_2.4 __vfscanf F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vprintf_chk F -GLIBC_2.4 __vsnprintf F -GLIBC_2.4 __vsnprintf_chk F -GLIBC_2.4 __vsprintf_chk F -GLIBC_2.4 __vsscanf F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wait F -GLIBC_2.4 __waitpid F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscasecmp_l F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscoll_l F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsftime_l F -GLIBC_2.4 __wcsncasecmp_l F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstod_internal F -GLIBC_2.4 __wcstod_l F -GLIBC_2.4 __wcstof_internal F -GLIBC_2.4 __wcstof_l F -GLIBC_2.4 __wcstol_internal F -GLIBC_2.4 __wcstol_l F -GLIBC_2.4 __wcstold_internal F -GLIBC_2.4 __wcstold_l F -GLIBC_2.4 __wcstoll_internal F -GLIBC_2.4 __wcstoll_l F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wcstoul_internal F -GLIBC_2.4 __wcstoul_l F -GLIBC_2.4 __wcstoull_internal F -GLIBC_2.4 __wcstoull_l F -GLIBC_2.4 __wcsxfrm_l F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wctrans_l F -GLIBC_2.4 __wctype_l F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __woverflow F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __write F -GLIBC_2.4 __wuflow F -GLIBC_2.4 __wunderflow F -GLIBC_2.4 __xmknod F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 __xpg_basename F -GLIBC_2.4 __xpg_sigpause F -GLIBC_2.4 __xpg_strerror_r F -GLIBC_2.4 __xstat F -GLIBC_2.4 __xstat64 F -GLIBC_2.4 _authenticate F -GLIBC_2.4 _dl_mcount_wrapper F -GLIBC_2.4 _dl_mcount_wrapper_check F -GLIBC_2.4 _environ D 0x4 -GLIBC_2.4 _exit F -GLIBC_2.4 _flushlbf F -GLIBC_2.4 _libc_intl_domainname D 0x5 -GLIBC_2.4 _longjmp F -GLIBC_2.4 _mcleanup F -GLIBC_2.4 _mcount F -GLIBC_2.4 _nl_default_dirname D 0x12 -GLIBC_2.4 _nl_domain_bindings D 0x4 -GLIBC_2.4 _nl_msg_cat_cntr D 0x4 -GLIBC_2.4 _null_auth D 0xc -GLIBC_2.4 _obstack_allocated_p F -GLIBC_2.4 _obstack_begin F -GLIBC_2.4 _obstack_begin_1 F -GLIBC_2.4 _obstack_free F -GLIBC_2.4 _obstack_memory_used F -GLIBC_2.4 _obstack_newchunk F -GLIBC_2.4 _res D 0x200 -GLIBC_2.4 _res_hconf D 0x30 -GLIBC_2.4 _rpc_dtablesize F -GLIBC_2.4 _seterr_reply F -GLIBC_2.4 _setjmp F -GLIBC_2.4 _sys_errlist D 0x210 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 _sys_siglist D 0x104 -GLIBC_2.4 _tolower F -GLIBC_2.4 _toupper F -GLIBC_2.4 a64l F -GLIBC_2.4 abort F -GLIBC_2.4 abs F -GLIBC_2.4 accept F -GLIBC_2.4 access F -GLIBC_2.4 acct F -GLIBC_2.4 addmntent F -GLIBC_2.4 addseverity F -GLIBC_2.4 adjtime F -GLIBC_2.4 adjtimex F -GLIBC_2.4 advance F -GLIBC_2.4 alarm F -GLIBC_2.4 alphasort F -GLIBC_2.4 alphasort64 F -GLIBC_2.4 argp_err_exit_status D 0x4 -GLIBC_2.4 argp_error F -GLIBC_2.4 argp_failure F -GLIBC_2.4 argp_help F -GLIBC_2.4 argp_parse F -GLIBC_2.4 argp_program_bug_address D 0x4 -GLIBC_2.4 argp_program_version D 0x4 -GLIBC_2.4 argp_program_version_hook D 0x4 -GLIBC_2.4 argp_state_help F -GLIBC_2.4 argp_usage F -GLIBC_2.4 argz_add F -GLIBC_2.4 argz_add_sep F -GLIBC_2.4 argz_append F -GLIBC_2.4 argz_count F -GLIBC_2.4 argz_create F -GLIBC_2.4 argz_create_sep F -GLIBC_2.4 argz_delete F -GLIBC_2.4 argz_extract F -GLIBC_2.4 argz_insert F -GLIBC_2.4 argz_next F -GLIBC_2.4 argz_replace F -GLIBC_2.4 argz_stringify F -GLIBC_2.4 asctime F -GLIBC_2.4 asctime_r F -GLIBC_2.4 asprintf F -GLIBC_2.4 atof F -GLIBC_2.4 atoi F -GLIBC_2.4 atol F -GLIBC_2.4 atoll F -GLIBC_2.4 authdes_create F -GLIBC_2.4 authdes_getucred F -GLIBC_2.4 authdes_pk_create F -GLIBC_2.4 authnone_create F -GLIBC_2.4 authunix_create F -GLIBC_2.4 authunix_create_default F -GLIBC_2.4 backtrace F -GLIBC_2.4 backtrace_symbols F -GLIBC_2.4 backtrace_symbols_fd F -GLIBC_2.4 basename F -GLIBC_2.4 bcmp F -GLIBC_2.4 bcopy F -GLIBC_2.4 bdflush F -GLIBC_2.4 bind F -GLIBC_2.4 bind_textdomain_codeset F -GLIBC_2.4 bindresvport F -GLIBC_2.4 bindtextdomain F -GLIBC_2.4 brk F -GLIBC_2.4 bsd_signal F -GLIBC_2.4 bsearch F -GLIBC_2.4 btowc F -GLIBC_2.4 bzero F -GLIBC_2.4 calloc F -GLIBC_2.4 callrpc F -GLIBC_2.4 canonicalize_file_name F -GLIBC_2.4 capget F -GLIBC_2.4 capset F -GLIBC_2.4 catclose F -GLIBC_2.4 catgets F -GLIBC_2.4 catopen F -GLIBC_2.4 cbc_crypt F -GLIBC_2.4 cfgetispeed F -GLIBC_2.4 cfgetospeed F -GLIBC_2.4 cfmakeraw F -GLIBC_2.4 cfree F -GLIBC_2.4 cfsetispeed F -GLIBC_2.4 cfsetospeed F -GLIBC_2.4 cfsetspeed F -GLIBC_2.4 chdir F -GLIBC_2.4 chflags F -GLIBC_2.4 chmod F -GLIBC_2.4 chown F -GLIBC_2.4 chroot F -GLIBC_2.4 clearenv F -GLIBC_2.4 clearerr F -GLIBC_2.4 clearerr_unlocked F -GLIBC_2.4 clnt_broadcast F -GLIBC_2.4 clnt_create F -GLIBC_2.4 clnt_pcreateerror F -GLIBC_2.4 clnt_perrno F -GLIBC_2.4 clnt_perror F -GLIBC_2.4 clnt_spcreateerror F -GLIBC_2.4 clnt_sperrno F -GLIBC_2.4 clnt_sperror F -GLIBC_2.4 clntraw_create F -GLIBC_2.4 clnttcp_create F -GLIBC_2.4 clntudp_bufcreate F -GLIBC_2.4 clntudp_create F -GLIBC_2.4 clntunix_create F -GLIBC_2.4 clock F -GLIBC_2.4 clone F -GLIBC_2.4 close F -GLIBC_2.4 closedir F -GLIBC_2.4 closelog F -GLIBC_2.4 confstr F -GLIBC_2.4 connect F -GLIBC_2.4 copysign F -GLIBC_2.4 copysignf F -GLIBC_2.4 copysignl F -GLIBC_2.4 creat F -GLIBC_2.4 creat64 F -GLIBC_2.4 create_module F -GLIBC_2.4 ctermid F -GLIBC_2.4 ctime F -GLIBC_2.4 ctime_r F -GLIBC_2.4 cuserid F -GLIBC_2.4 daemon F -GLIBC_2.4 daylight D 0x4 -GLIBC_2.4 dcgettext F -GLIBC_2.4 dcngettext F -GLIBC_2.4 delete_module F -GLIBC_2.4 des_setparity F -GLIBC_2.4 dgettext F -GLIBC_2.4 difftime F -GLIBC_2.4 dirfd F -GLIBC_2.4 dirname F -GLIBC_2.4 div F -GLIBC_2.4 dl_iterate_phdr F -GLIBC_2.4 dngettext F -GLIBC_2.4 dprintf F -GLIBC_2.4 drand48 F -GLIBC_2.4 drand48_r F -GLIBC_2.4 dup F -GLIBC_2.4 dup2 F -GLIBC_2.4 duplocale F -GLIBC_2.4 dysize F -GLIBC_2.4 eaccess F -GLIBC_2.4 ecb_crypt F -GLIBC_2.4 ecvt F -GLIBC_2.4 ecvt_r F -GLIBC_2.4 endaliasent F -GLIBC_2.4 endfsent F -GLIBC_2.4 endgrent F -GLIBC_2.4 endhostent F -GLIBC_2.4 endmntent F -GLIBC_2.4 endnetent F -GLIBC_2.4 endnetgrent F -GLIBC_2.4 endprotoent F -GLIBC_2.4 endpwent F -GLIBC_2.4 endrpcent F -GLIBC_2.4 endservent F -GLIBC_2.4 endspent F -GLIBC_2.4 endttyent F -GLIBC_2.4 endusershell F -GLIBC_2.4 endutent F -GLIBC_2.4 endutxent F -GLIBC_2.4 environ D 0x4 -GLIBC_2.4 envz_add F -GLIBC_2.4 envz_entry F -GLIBC_2.4 envz_get F -GLIBC_2.4 envz_merge F -GLIBC_2.4 envz_remove F -GLIBC_2.4 envz_strip F -GLIBC_2.4 epoll_create F -GLIBC_2.4 epoll_ctl F -GLIBC_2.4 epoll_wait F -GLIBC_2.4 erand48 F -GLIBC_2.4 erand48_r F -GLIBC_2.4 err F -GLIBC_2.4 error F -GLIBC_2.4 error_at_line F -GLIBC_2.4 error_message_count D 0x4 -GLIBC_2.4 error_one_per_line D 0x4 -GLIBC_2.4 error_print_progname D 0x4 -GLIBC_2.4 errx F -GLIBC_2.4 ether_aton F -GLIBC_2.4 ether_aton_r F -GLIBC_2.4 ether_hostton F -GLIBC_2.4 ether_line F -GLIBC_2.4 ether_ntoa F -GLIBC_2.4 ether_ntoa_r F -GLIBC_2.4 ether_ntohost F -GLIBC_2.4 euidaccess F -GLIBC_2.4 execl F -GLIBC_2.4 execle F -GLIBC_2.4 execlp F -GLIBC_2.4 execv F -GLIBC_2.4 execve F -GLIBC_2.4 execvp F -GLIBC_2.4 exit F -GLIBC_2.4 faccessat F -GLIBC_2.4 fattach F -GLIBC_2.4 fchdir F -GLIBC_2.4 fchflags F -GLIBC_2.4 fchmod F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchown F -GLIBC_2.4 fchownat F -GLIBC_2.4 fclose F -GLIBC_2.4 fcloseall F -GLIBC_2.4 fcntl F -GLIBC_2.4 fcvt F -GLIBC_2.4 fcvt_r F -GLIBC_2.4 fdatasync F -GLIBC_2.4 fdetach F -GLIBC_2.4 fdopen F -GLIBC_2.4 fdopendir F -GLIBC_2.4 feof F -GLIBC_2.4 feof_unlocked F -GLIBC_2.4 ferror F -GLIBC_2.4 ferror_unlocked F -GLIBC_2.4 fexecve F -GLIBC_2.4 fflush F -GLIBC_2.4 fflush_unlocked F -GLIBC_2.4 ffs F -GLIBC_2.4 ffsl F -GLIBC_2.4 ffsll F -GLIBC_2.4 fgetc F -GLIBC_2.4 fgetc_unlocked F -GLIBC_2.4 fgetgrent F -GLIBC_2.4 fgetgrent_r F -GLIBC_2.4 fgetpos F -GLIBC_2.4 fgetpos64 F -GLIBC_2.4 fgetpwent F -GLIBC_2.4 fgetpwent_r F -GLIBC_2.4 fgets F -GLIBC_2.4 fgets_unlocked F -GLIBC_2.4 fgetspent F -GLIBC_2.4 fgetspent_r F -GLIBC_2.4 fgetwc F -GLIBC_2.4 fgetwc_unlocked F -GLIBC_2.4 fgetws F -GLIBC_2.4 fgetws_unlocked F -GLIBC_2.4 fgetxattr F -GLIBC_2.4 fileno F -GLIBC_2.4 fileno_unlocked F -GLIBC_2.4 finite F -GLIBC_2.4 finitef F -GLIBC_2.4 finitel F -GLIBC_2.4 flistxattr F -GLIBC_2.4 flock F -GLIBC_2.4 flockfile F -GLIBC_2.4 fmemopen F -GLIBC_2.4 fmtmsg F -GLIBC_2.4 fnmatch F -GLIBC_2.4 fopen F -GLIBC_2.4 fopen64 F -GLIBC_2.4 fopencookie F -GLIBC_2.4 fork F -GLIBC_2.4 fpathconf F -GLIBC_2.4 fprintf F -GLIBC_2.4 fputc F -GLIBC_2.4 fputc_unlocked F -GLIBC_2.4 fputs F -GLIBC_2.4 fputs_unlocked F -GLIBC_2.4 fputwc F -GLIBC_2.4 fputwc_unlocked F -GLIBC_2.4 fputws F -GLIBC_2.4 fputws_unlocked F -GLIBC_2.4 fread F -GLIBC_2.4 fread_unlocked F -GLIBC_2.4 free F -GLIBC_2.4 freeaddrinfo F -GLIBC_2.4 freeifaddrs F -GLIBC_2.4 freelocale F -GLIBC_2.4 fremovexattr F -GLIBC_2.4 freopen F -GLIBC_2.4 freopen64 F -GLIBC_2.4 frexp F -GLIBC_2.4 frexpf F -GLIBC_2.4 frexpl F -GLIBC_2.4 fscanf F -GLIBC_2.4 fseek F -GLIBC_2.4 fseeko F -GLIBC_2.4 fseeko64 F -GLIBC_2.4 fsetpos F -GLIBC_2.4 fsetpos64 F -GLIBC_2.4 fsetxattr F -GLIBC_2.4 fstatfs F -GLIBC_2.4 fstatfs64 F -GLIBC_2.4 fstatvfs F -GLIBC_2.4 fstatvfs64 F -GLIBC_2.4 fsync F -GLIBC_2.4 ftell F -GLIBC_2.4 ftello F -GLIBC_2.4 ftello64 F -GLIBC_2.4 ftime F -GLIBC_2.4 ftok F -GLIBC_2.4 ftruncate F -GLIBC_2.4 ftruncate64 F -GLIBC_2.4 ftrylockfile F -GLIBC_2.4 fts_children F -GLIBC_2.4 fts_close F -GLIBC_2.4 fts_open F -GLIBC_2.4 fts_read F -GLIBC_2.4 fts_set F -GLIBC_2.4 ftw F -GLIBC_2.4 ftw64 F -GLIBC_2.4 funlockfile F -GLIBC_2.4 futimes F -GLIBC_2.4 futimesat F -GLIBC_2.4 fwide F -GLIBC_2.4 fwprintf F -GLIBC_2.4 fwrite F -GLIBC_2.4 fwrite_unlocked F -GLIBC_2.4 fwscanf F -GLIBC_2.4 gai_strerror F -GLIBC_2.4 gcvt F -GLIBC_2.4 get_avphys_pages F -GLIBC_2.4 get_current_dir_name F -GLIBC_2.4 get_kernel_syms F -GLIBC_2.4 get_myaddress F -GLIBC_2.4 get_nprocs F -GLIBC_2.4 get_nprocs_conf F -GLIBC_2.4 get_phys_pages F -GLIBC_2.4 getaddrinfo F -GLIBC_2.4 getaliasbyname F -GLIBC_2.4 getaliasbyname_r F -GLIBC_2.4 getaliasent F -GLIBC_2.4 getaliasent_r F -GLIBC_2.4 getc F -GLIBC_2.4 getc_unlocked F -GLIBC_2.4 getchar F -GLIBC_2.4 getchar_unlocked F -GLIBC_2.4 getcontext F -GLIBC_2.4 getcwd F -GLIBC_2.4 getdate F -GLIBC_2.4 getdate_err D 0x4 -GLIBC_2.4 getdate_r F -GLIBC_2.4 getdelim F -GLIBC_2.4 getdirentries F -GLIBC_2.4 getdirentries64 F -GLIBC_2.4 getdomainname F -GLIBC_2.4 getdtablesize F -GLIBC_2.4 getegid F -GLIBC_2.4 getenv F -GLIBC_2.4 geteuid F -GLIBC_2.4 getfsent F -GLIBC_2.4 getfsfile F -GLIBC_2.4 getfsspec F -GLIBC_2.4 getgid F -GLIBC_2.4 getgrent F -GLIBC_2.4 getgrent_r F -GLIBC_2.4 getgrgid F -GLIBC_2.4 getgrgid_r F -GLIBC_2.4 getgrnam F -GLIBC_2.4 getgrnam_r F -GLIBC_2.4 getgrouplist F -GLIBC_2.4 getgroups F -GLIBC_2.4 gethostbyaddr F -GLIBC_2.4 gethostbyaddr_r F -GLIBC_2.4 gethostbyname F -GLIBC_2.4 gethostbyname2 F -GLIBC_2.4 gethostbyname2_r F -GLIBC_2.4 gethostbyname_r F -GLIBC_2.4 gethostent F -GLIBC_2.4 gethostent_r F -GLIBC_2.4 gethostid F -GLIBC_2.4 gethostname F -GLIBC_2.4 getifaddrs F -GLIBC_2.4 getipv4sourcefilter F -GLIBC_2.4 getitimer F -GLIBC_2.4 getline F -GLIBC_2.4 getloadavg F -GLIBC_2.4 getlogin F -GLIBC_2.4 getlogin_r F -GLIBC_2.4 getmntent F -GLIBC_2.4 getmntent_r F -GLIBC_2.4 getmsg F -GLIBC_2.4 getnameinfo F -GLIBC_2.4 getnetbyaddr F -GLIBC_2.4 getnetbyaddr_r F -GLIBC_2.4 getnetbyname F -GLIBC_2.4 getnetbyname_r F -GLIBC_2.4 getnetent F -GLIBC_2.4 getnetent_r F -GLIBC_2.4 getnetgrent F -GLIBC_2.4 getnetgrent_r F -GLIBC_2.4 getnetname F -GLIBC_2.4 getopt F -GLIBC_2.4 getopt_long F -GLIBC_2.4 getopt_long_only F -GLIBC_2.4 getpagesize F -GLIBC_2.4 getpass F -GLIBC_2.4 getpeername F -GLIBC_2.4 getpgid F -GLIBC_2.4 getpgrp F -GLIBC_2.4 getpid F -GLIBC_2.4 getpmsg F -GLIBC_2.4 getppid F -GLIBC_2.4 getpriority F -GLIBC_2.4 getprotobyname F -GLIBC_2.4 getprotobyname_r F -GLIBC_2.4 getprotobynumber F -GLIBC_2.4 getprotobynumber_r F -GLIBC_2.4 getprotoent F -GLIBC_2.4 getprotoent_r F -GLIBC_2.4 getpt F -GLIBC_2.4 getpublickey F -GLIBC_2.4 getpw F -GLIBC_2.4 getpwent F -GLIBC_2.4 getpwent_r F -GLIBC_2.4 getpwnam F -GLIBC_2.4 getpwnam_r F -GLIBC_2.4 getpwuid F -GLIBC_2.4 getpwuid_r F -GLIBC_2.4 getresgid F -GLIBC_2.4 getresuid F -GLIBC_2.4 getrlimit F -GLIBC_2.4 getrlimit64 F -GLIBC_2.4 getrpcbyname F -GLIBC_2.4 getrpcbyname_r F -GLIBC_2.4 getrpcbynumber F -GLIBC_2.4 getrpcbynumber_r F -GLIBC_2.4 getrpcent F -GLIBC_2.4 getrpcent_r F -GLIBC_2.4 getrpcport F -GLIBC_2.4 getrusage F -GLIBC_2.4 gets F -GLIBC_2.4 getsecretkey F -GLIBC_2.4 getservbyname F -GLIBC_2.4 getservbyname_r F -GLIBC_2.4 getservbyport F -GLIBC_2.4 getservbyport_r F -GLIBC_2.4 getservent F -GLIBC_2.4 getservent_r F -GLIBC_2.4 getsid F -GLIBC_2.4 getsockname F -GLIBC_2.4 getsockopt F -GLIBC_2.4 getsourcefilter F -GLIBC_2.4 getspent F -GLIBC_2.4 getspent_r F -GLIBC_2.4 getspnam F -GLIBC_2.4 getspnam_r F -GLIBC_2.4 getsubopt F -GLIBC_2.4 gettext F -GLIBC_2.4 gettimeofday F -GLIBC_2.4 getttyent F -GLIBC_2.4 getttynam F -GLIBC_2.4 getuid F -GLIBC_2.4 getusershell F -GLIBC_2.4 getutent F -GLIBC_2.4 getutent_r F -GLIBC_2.4 getutid F -GLIBC_2.4 getutid_r F -GLIBC_2.4 getutline F -GLIBC_2.4 getutline_r F -GLIBC_2.4 getutmp F -GLIBC_2.4 getutmpx F -GLIBC_2.4 getutxent F -GLIBC_2.4 getutxid F -GLIBC_2.4 getutxline F -GLIBC_2.4 getw F -GLIBC_2.4 getwc F -GLIBC_2.4 getwc_unlocked F -GLIBC_2.4 getwchar F -GLIBC_2.4 getwchar_unlocked F -GLIBC_2.4 getwd F -GLIBC_2.4 getxattr F -GLIBC_2.4 glob F -GLIBC_2.4 glob64 F -GLIBC_2.4 glob_pattern_p F -GLIBC_2.4 globfree F -GLIBC_2.4 globfree64 F -GLIBC_2.4 gmtime F -GLIBC_2.4 gmtime_r F -GLIBC_2.4 gnu_dev_major F -GLIBC_2.4 gnu_dev_makedev F -GLIBC_2.4 gnu_dev_minor F -GLIBC_2.4 gnu_get_libc_release F -GLIBC_2.4 gnu_get_libc_version F -GLIBC_2.4 grantpt F -GLIBC_2.4 group_member F -GLIBC_2.4 gsignal F -GLIBC_2.4 gtty F -GLIBC_2.4 h_errlist D 0x14 -GLIBC_2.4 h_nerr D 0x4 -GLIBC_2.4 hasmntopt F -GLIBC_2.4 hcreate F -GLIBC_2.4 hcreate_r F -GLIBC_2.4 hdestroy F -GLIBC_2.4 hdestroy_r F -GLIBC_2.4 herror F -GLIBC_2.4 host2netname F -GLIBC_2.4 hsearch F -GLIBC_2.4 hsearch_r F -GLIBC_2.4 hstrerror F -GLIBC_2.4 htonl F -GLIBC_2.4 htons F -GLIBC_2.4 iconv F -GLIBC_2.4 iconv_close F -GLIBC_2.4 iconv_open F -GLIBC_2.4 if_freenameindex F -GLIBC_2.4 if_indextoname F -GLIBC_2.4 if_nameindex F -GLIBC_2.4 if_nametoindex F -GLIBC_2.4 imaxabs F -GLIBC_2.4 imaxdiv F -GLIBC_2.4 in6addr_any D 0x10 -GLIBC_2.4 in6addr_loopback D 0x10 -GLIBC_2.4 inb F -GLIBC_2.4 index F -GLIBC_2.4 inet6_option_alloc F -GLIBC_2.4 inet6_option_append F -GLIBC_2.4 inet6_option_find F -GLIBC_2.4 inet6_option_init F -GLIBC_2.4 inet6_option_next F -GLIBC_2.4 inet6_option_space F -GLIBC_2.4 inet_addr F -GLIBC_2.4 inet_aton F -GLIBC_2.4 inet_lnaof F -GLIBC_2.4 inet_makeaddr F -GLIBC_2.4 inet_netof F -GLIBC_2.4 inet_network F -GLIBC_2.4 inet_nsap_addr F -GLIBC_2.4 inet_nsap_ntoa F -GLIBC_2.4 inet_ntoa F -GLIBC_2.4 inet_ntop F -GLIBC_2.4 inet_pton F -GLIBC_2.4 init_module F -GLIBC_2.4 initgroups F -GLIBC_2.4 initstate F -GLIBC_2.4 initstate_r F -GLIBC_2.4 inl F -GLIBC_2.4 innetgr F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 insque F -GLIBC_2.4 inw F -GLIBC_2.4 ioctl F -GLIBC_2.4 ioperm F -GLIBC_2.4 iopl F -GLIBC_2.4 iruserok F -GLIBC_2.4 iruserok_af F -GLIBC_2.4 isalnum F -GLIBC_2.4 isalnum_l F -GLIBC_2.4 isalpha F -GLIBC_2.4 isalpha_l F -GLIBC_2.4 isascii F -GLIBC_2.4 isastream F -GLIBC_2.4 isatty F -GLIBC_2.4 isblank F -GLIBC_2.4 isblank_l F -GLIBC_2.4 iscntrl F -GLIBC_2.4 iscntrl_l F -GLIBC_2.4 isctype F -GLIBC_2.4 isdigit F -GLIBC_2.4 isdigit_l F -GLIBC_2.4 isfdtype F -GLIBC_2.4 isgraph F -GLIBC_2.4 isgraph_l F -GLIBC_2.4 isinf F -GLIBC_2.4 isinff F -GLIBC_2.4 isinfl F -GLIBC_2.4 islower F -GLIBC_2.4 islower_l F -GLIBC_2.4 isnan F -GLIBC_2.4 isnanf F -GLIBC_2.4 isnanl F -GLIBC_2.4 isprint F -GLIBC_2.4 isprint_l F -GLIBC_2.4 ispunct F -GLIBC_2.4 ispunct_l F -GLIBC_2.4 isspace F -GLIBC_2.4 isspace_l F -GLIBC_2.4 isupper F -GLIBC_2.4 isupper_l F -GLIBC_2.4 iswalnum F -GLIBC_2.4 iswalnum_l F -GLIBC_2.4 iswalpha F -GLIBC_2.4 iswalpha_l F -GLIBC_2.4 iswblank F -GLIBC_2.4 iswblank_l F -GLIBC_2.4 iswcntrl F -GLIBC_2.4 iswcntrl_l F -GLIBC_2.4 iswctype F -GLIBC_2.4 iswctype_l F -GLIBC_2.4 iswdigit F -GLIBC_2.4 iswdigit_l F -GLIBC_2.4 iswgraph F -GLIBC_2.4 iswgraph_l F -GLIBC_2.4 iswlower F -GLIBC_2.4 iswlower_l F -GLIBC_2.4 iswprint F -GLIBC_2.4 iswprint_l F -GLIBC_2.4 iswpunct F -GLIBC_2.4 iswpunct_l F -GLIBC_2.4 iswspace F -GLIBC_2.4 iswspace_l F -GLIBC_2.4 iswupper F -GLIBC_2.4 iswupper_l F -GLIBC_2.4 iswxdigit F -GLIBC_2.4 iswxdigit_l F -GLIBC_2.4 isxdigit F -GLIBC_2.4 isxdigit_l F -GLIBC_2.4 jrand48 F -GLIBC_2.4 jrand48_r F -GLIBC_2.4 key_decryptsession F -GLIBC_2.4 key_decryptsession_pk F -GLIBC_2.4 key_encryptsession F -GLIBC_2.4 key_encryptsession_pk F -GLIBC_2.4 key_gendes F -GLIBC_2.4 key_get_conv F -GLIBC_2.4 key_secretkey_is_set F -GLIBC_2.4 key_setnet F -GLIBC_2.4 key_setsecret F -GLIBC_2.4 kill F -GLIBC_2.4 killpg F -GLIBC_2.4 klogctl F -GLIBC_2.4 l64a F -GLIBC_2.4 labs F -GLIBC_2.4 lchmod F -GLIBC_2.4 lchown F -GLIBC_2.4 lckpwdf F -GLIBC_2.4 lcong48 F -GLIBC_2.4 lcong48_r F -GLIBC_2.4 ldexp F -GLIBC_2.4 ldexpf F -GLIBC_2.4 ldexpl F -GLIBC_2.4 ldiv F -GLIBC_2.4 lfind F -GLIBC_2.4 lgetxattr F -GLIBC_2.4 link F -GLIBC_2.4 linkat F -GLIBC_2.4 listen F -GLIBC_2.4 listxattr F -GLIBC_2.4 llabs F -GLIBC_2.4 lldiv F -GLIBC_2.4 llistxattr F -GLIBC_2.4 llseek F -GLIBC_2.4 loc1 D 0x4 -GLIBC_2.4 loc2 D 0x4 -GLIBC_2.4 localeconv F -GLIBC_2.4 localtime F -GLIBC_2.4 localtime_r F -GLIBC_2.4 lockf F -GLIBC_2.4 lockf64 F -GLIBC_2.4 locs D 0x4 -GLIBC_2.4 longjmp F -GLIBC_2.4 lrand48 F -GLIBC_2.4 lrand48_r F -GLIBC_2.4 lremovexattr F -GLIBC_2.4 lsearch F -GLIBC_2.4 lseek F -GLIBC_2.4 lseek64 F -GLIBC_2.4 lsetxattr F -GLIBC_2.4 lutimes F -GLIBC_2.4 madvise F -GLIBC_2.4 makecontext F -GLIBC_2.4 mallinfo F -GLIBC_2.4 malloc F -GLIBC_2.4 malloc_get_state F -GLIBC_2.4 malloc_set_state F -GLIBC_2.4 malloc_stats F -GLIBC_2.4 malloc_trim F -GLIBC_2.4 malloc_usable_size F -GLIBC_2.4 mallopt F -GLIBC_2.4 mallwatch D 0x4 -GLIBC_2.4 mblen F -GLIBC_2.4 mbrlen F -GLIBC_2.4 mbrtowc F -GLIBC_2.4 mbsinit F -GLIBC_2.4 mbsnrtowcs F -GLIBC_2.4 mbsrtowcs F -GLIBC_2.4 mbstowcs F -GLIBC_2.4 mbtowc F -GLIBC_2.4 mcheck F -GLIBC_2.4 mcheck_check_all F -GLIBC_2.4 mcheck_pedantic F -GLIBC_2.4 mcount F -GLIBC_2.4 memalign F -GLIBC_2.4 memccpy F -GLIBC_2.4 memchr F -GLIBC_2.4 memcmp F -GLIBC_2.4 memcpy F -GLIBC_2.4 memfrob F -GLIBC_2.4 memmem F -GLIBC_2.4 memmove F -GLIBC_2.4 mempcpy F -GLIBC_2.4 memrchr F -GLIBC_2.4 memset F -GLIBC_2.4 mincore F -GLIBC_2.4 mkdir F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkdtemp F -GLIBC_2.4 mkfifo F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 mkstemp F -GLIBC_2.4 mkstemp64 F -GLIBC_2.4 mktemp F -GLIBC_2.4 mktime F -GLIBC_2.4 mlock F -GLIBC_2.4 mlockall F -GLIBC_2.4 mmap F -GLIBC_2.4 mmap64 F -GLIBC_2.4 modf F -GLIBC_2.4 modff F -GLIBC_2.4 modfl F -GLIBC_2.4 moncontrol F -GLIBC_2.4 monstartup F -GLIBC_2.4 mount F -GLIBC_2.4 mprobe F -GLIBC_2.4 mprotect F -GLIBC_2.4 mrand48 F -GLIBC_2.4 mrand48_r F -GLIBC_2.4 mremap F -GLIBC_2.4 msgctl F -GLIBC_2.4 msgget F -GLIBC_2.4 msgrcv F -GLIBC_2.4 msgsnd F -GLIBC_2.4 msync F -GLIBC_2.4 mtrace F -GLIBC_2.4 munlock F -GLIBC_2.4 munlockall F -GLIBC_2.4 munmap F -GLIBC_2.4 muntrace F -GLIBC_2.4 nanosleep F -GLIBC_2.4 netname2host F -GLIBC_2.4 netname2user F -GLIBC_2.4 newlocale F -GLIBC_2.4 nfsservctl F -GLIBC_2.4 nftw F -GLIBC_2.4 nftw64 F -GLIBC_2.4 ngettext F -GLIBC_2.4 nice F -GLIBC_2.4 nl_langinfo F -GLIBC_2.4 nl_langinfo_l F -GLIBC_2.4 nrand48 F -GLIBC_2.4 nrand48_r F -GLIBC_2.4 ntohl F -GLIBC_2.4 ntohs F -GLIBC_2.4 ntp_adjtime F -GLIBC_2.4 ntp_gettime F -GLIBC_2.4 obstack_alloc_failed_handler D 0x4 -GLIBC_2.4 obstack_exit_failure D 0x4 -GLIBC_2.4 obstack_free F -GLIBC_2.4 obstack_printf F -GLIBC_2.4 obstack_vprintf F -GLIBC_2.4 on_exit F -GLIBC_2.4 open F -GLIBC_2.4 open64 F -GLIBC_2.4 open_memstream F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 opendir F -GLIBC_2.4 openlog F -GLIBC_2.4 optarg D 0x4 -GLIBC_2.4 opterr D 0x4 -GLIBC_2.4 optind D 0x4 -GLIBC_2.4 optopt D 0x4 -GLIBC_2.4 outb F -GLIBC_2.4 outl F -GLIBC_2.4 outw F -GLIBC_2.4 parse_printf_format F -GLIBC_2.4 passwd2des F -GLIBC_2.4 pathconf F -GLIBC_2.4 pause F -GLIBC_2.4 pclose F -GLIBC_2.4 perror F -GLIBC_2.4 personality F -GLIBC_2.4 pipe F -GLIBC_2.4 pivot_root F -GLIBC_2.4 pmap_getmaps F -GLIBC_2.4 pmap_getport F -GLIBC_2.4 pmap_rmtcall F -GLIBC_2.4 pmap_set F -GLIBC_2.4 pmap_unset F -GLIBC_2.4 poll F -GLIBC_2.4 popen F -GLIBC_2.4 posix_fadvise F -GLIBC_2.4 posix_fadvise64 F -GLIBC_2.4 posix_fallocate F -GLIBC_2.4 posix_fallocate64 F -GLIBC_2.4 posix_madvise F -GLIBC_2.4 posix_memalign F -GLIBC_2.4 posix_openpt F -GLIBC_2.4 posix_spawn F -GLIBC_2.4 posix_spawn_file_actions_addclose F -GLIBC_2.4 posix_spawn_file_actions_adddup2 F -GLIBC_2.4 posix_spawn_file_actions_addopen F -GLIBC_2.4 posix_spawn_file_actions_destroy F -GLIBC_2.4 posix_spawn_file_actions_init F -GLIBC_2.4 posix_spawnattr_destroy F -GLIBC_2.4 posix_spawnattr_getflags F -GLIBC_2.4 posix_spawnattr_getpgroup F -GLIBC_2.4 posix_spawnattr_getschedparam F -GLIBC_2.4 posix_spawnattr_getschedpolicy F -GLIBC_2.4 posix_spawnattr_getsigdefault F -GLIBC_2.4 posix_spawnattr_getsigmask F -GLIBC_2.4 posix_spawnattr_init F -GLIBC_2.4 posix_spawnattr_setflags F -GLIBC_2.4 posix_spawnattr_setpgroup F -GLIBC_2.4 posix_spawnattr_setschedparam F -GLIBC_2.4 posix_spawnattr_setschedpolicy F -GLIBC_2.4 posix_spawnattr_setsigdefault F -GLIBC_2.4 posix_spawnattr_setsigmask F -GLIBC_2.4 posix_spawnp F -GLIBC_2.4 ppoll F -GLIBC_2.4 prctl F -GLIBC_2.4 pread F -GLIBC_2.4 pread64 F -GLIBC_2.4 printf F -GLIBC_2.4 printf_size F -GLIBC_2.4 printf_size_info F -GLIBC_2.4 profil F -GLIBC_2.4 profil_counter F -GLIBC_2.4 program_invocation_name D 0x4 -GLIBC_2.4 program_invocation_short_name D 0x4 -GLIBC_2.4 pselect F -GLIBC_2.4 psignal F -GLIBC_2.4 pthread_attr_destroy F -GLIBC_2.4 pthread_attr_getdetachstate F -GLIBC_2.4 pthread_attr_getinheritsched F -GLIBC_2.4 pthread_attr_getschedparam F -GLIBC_2.4 pthread_attr_getschedpolicy F -GLIBC_2.4 pthread_attr_getscope F -GLIBC_2.4 pthread_attr_init F -GLIBC_2.4 pthread_attr_setdetachstate F -GLIBC_2.4 pthread_attr_setinheritsched F -GLIBC_2.4 pthread_attr_setschedparam F -GLIBC_2.4 pthread_attr_setschedpolicy F -GLIBC_2.4 pthread_attr_setscope F -GLIBC_2.4 pthread_cond_broadcast F -GLIBC_2.4 pthread_cond_destroy F -GLIBC_2.4 pthread_cond_init F -GLIBC_2.4 pthread_cond_signal F -GLIBC_2.4 pthread_cond_timedwait F -GLIBC_2.4 pthread_cond_wait F -GLIBC_2.4 pthread_condattr_destroy F -GLIBC_2.4 pthread_condattr_init F -GLIBC_2.4 pthread_equal F -GLIBC_2.4 pthread_exit F -GLIBC_2.4 pthread_getschedparam F -GLIBC_2.4 pthread_mutex_destroy F -GLIBC_2.4 pthread_mutex_init F -GLIBC_2.4 pthread_mutex_lock F -GLIBC_2.4 pthread_mutex_unlock F -GLIBC_2.4 pthread_self F -GLIBC_2.4 pthread_setcancelstate F -GLIBC_2.4 pthread_setcanceltype F -GLIBC_2.4 pthread_setschedparam F -GLIBC_2.4 ptrace F -GLIBC_2.4 ptsname F -GLIBC_2.4 ptsname_r F -GLIBC_2.4 putc F -GLIBC_2.4 putc_unlocked F -GLIBC_2.4 putchar F -GLIBC_2.4 putchar_unlocked F -GLIBC_2.4 putenv F -GLIBC_2.4 putgrent F -GLIBC_2.4 putmsg F -GLIBC_2.4 putpmsg F -GLIBC_2.4 putpwent F -GLIBC_2.4 puts F -GLIBC_2.4 putspent F -GLIBC_2.4 pututline F -GLIBC_2.4 pututxline F -GLIBC_2.4 putw F -GLIBC_2.4 putwc F -GLIBC_2.4 putwc_unlocked F -GLIBC_2.4 putwchar F -GLIBC_2.4 putwchar_unlocked F -GLIBC_2.4 pvalloc F -GLIBC_2.4 pwrite F -GLIBC_2.4 pwrite64 F -GLIBC_2.4 qecvt F -GLIBC_2.4 qecvt_r F -GLIBC_2.4 qfcvt F -GLIBC_2.4 qfcvt_r F -GLIBC_2.4 qgcvt F -GLIBC_2.4 qsort F -GLIBC_2.4 query_module F -GLIBC_2.4 quotactl F -GLIBC_2.4 raise F -GLIBC_2.4 rand F -GLIBC_2.4 rand_r F -GLIBC_2.4 random F -GLIBC_2.4 random_r F -GLIBC_2.4 rawmemchr F -GLIBC_2.4 rcmd F -GLIBC_2.4 rcmd_af F -GLIBC_2.4 re_comp F -GLIBC_2.4 re_compile_fastmap F -GLIBC_2.4 re_compile_pattern F -GLIBC_2.4 re_exec F -GLIBC_2.4 re_match F -GLIBC_2.4 re_match_2 F -GLIBC_2.4 re_search F -GLIBC_2.4 re_search_2 F -GLIBC_2.4 re_set_registers F -GLIBC_2.4 re_set_syntax F -GLIBC_2.4 re_syntax_options D 0x4 -GLIBC_2.4 read F -GLIBC_2.4 readahead F -GLIBC_2.4 readdir F -GLIBC_2.4 readdir64 F -GLIBC_2.4 readdir64_r F -GLIBC_2.4 readdir_r F -GLIBC_2.4 readlink F -GLIBC_2.4 readlinkat F -GLIBC_2.4 readv F -GLIBC_2.4 realloc F -GLIBC_2.4 realpath F -GLIBC_2.4 reboot F -GLIBC_2.4 recv F -GLIBC_2.4 recvfrom F -GLIBC_2.4 recvmsg F -GLIBC_2.4 regcomp F -GLIBC_2.4 regerror F -GLIBC_2.4 regexec F -GLIBC_2.4 regfree F -GLIBC_2.4 register_printf_function F -GLIBC_2.4 registerrpc F -GLIBC_2.4 remap_file_pages F -GLIBC_2.4 remove F -GLIBC_2.4 removexattr F -GLIBC_2.4 remque F -GLIBC_2.4 rename F -GLIBC_2.4 renameat F -GLIBC_2.4 revoke F -GLIBC_2.4 rewind F -GLIBC_2.4 rewinddir F -GLIBC_2.4 rexec F -GLIBC_2.4 rexec_af F -GLIBC_2.4 rexecoptions D 0x4 -GLIBC_2.4 rindex F -GLIBC_2.4 rmdir F -GLIBC_2.4 rpc_createerr D 0x10 -GLIBC_2.4 rpmatch F -GLIBC_2.4 rresvport F -GLIBC_2.4 rresvport_af F -GLIBC_2.4 rtime F -GLIBC_2.4 ruserok F -GLIBC_2.4 ruserok_af F -GLIBC_2.4 ruserpass F -GLIBC_2.4 sbrk F -GLIBC_2.4 scalbn F -GLIBC_2.4 scalbnf F -GLIBC_2.4 scalbnl F -GLIBC_2.4 scandir F -GLIBC_2.4 scandir64 F -GLIBC_2.4 scanf F -GLIBC_2.4 sched_get_priority_max F -GLIBC_2.4 sched_get_priority_min F -GLIBC_2.4 sched_getaffinity F -GLIBC_2.4 sched_getparam F -GLIBC_2.4 sched_getscheduler F -GLIBC_2.4 sched_rr_get_interval F -GLIBC_2.4 sched_setaffinity F -GLIBC_2.4 sched_setparam F -GLIBC_2.4 sched_setscheduler F -GLIBC_2.4 sched_yield F -GLIBC_2.4 seed48 F -GLIBC_2.4 seed48_r F -GLIBC_2.4 seekdir F -GLIBC_2.4 select F -GLIBC_2.4 semctl F -GLIBC_2.4 semget F -GLIBC_2.4 semop F -GLIBC_2.4 semtimedop F -GLIBC_2.4 send F -GLIBC_2.4 sendfile F -GLIBC_2.4 sendfile64 F -GLIBC_2.4 sendmsg F -GLIBC_2.4 sendto F -GLIBC_2.4 setaliasent F -GLIBC_2.4 setbuf F -GLIBC_2.4 setbuffer F -GLIBC_2.4 setcontext F -GLIBC_2.4 setdomainname F -GLIBC_2.4 setegid F -GLIBC_2.4 setenv F -GLIBC_2.4 seteuid F -GLIBC_2.4 setfsent F -GLIBC_2.4 setfsgid F -GLIBC_2.4 setfsuid F -GLIBC_2.4 setgid F -GLIBC_2.4 setgrent F -GLIBC_2.4 setgroups F -GLIBC_2.4 sethostent F -GLIBC_2.4 sethostid F -GLIBC_2.4 sethostname F -GLIBC_2.4 setipv4sourcefilter F -GLIBC_2.4 setitimer F -GLIBC_2.4 setjmp F -GLIBC_2.4 setlinebuf F -GLIBC_2.4 setlocale F -GLIBC_2.4 setlogin F -GLIBC_2.4 setlogmask F -GLIBC_2.4 setmntent F -GLIBC_2.4 setnetent F -GLIBC_2.4 setnetgrent F -GLIBC_2.4 setpgid F -GLIBC_2.4 setpgrp F -GLIBC_2.4 setpriority F -GLIBC_2.4 setprotoent F -GLIBC_2.4 setpwent F -GLIBC_2.4 setregid F -GLIBC_2.4 setresgid F -GLIBC_2.4 setresuid F -GLIBC_2.4 setreuid F -GLIBC_2.4 setrlimit F -GLIBC_2.4 setrlimit64 F -GLIBC_2.4 setrpcent F -GLIBC_2.4 setservent F -GLIBC_2.4 setsid F -GLIBC_2.4 setsockopt F -GLIBC_2.4 setsourcefilter F -GLIBC_2.4 setspent F -GLIBC_2.4 setstate F -GLIBC_2.4 setstate_r F -GLIBC_2.4 settimeofday F -GLIBC_2.4 setttyent F -GLIBC_2.4 setuid F -GLIBC_2.4 setusershell F -GLIBC_2.4 setutent F -GLIBC_2.4 setutxent F -GLIBC_2.4 setvbuf F -GLIBC_2.4 setxattr F -GLIBC_2.4 sgetspent F -GLIBC_2.4 sgetspent_r F -GLIBC_2.4 shmat F -GLIBC_2.4 shmctl F -GLIBC_2.4 shmdt F -GLIBC_2.4 shmget F -GLIBC_2.4 shutdown F -GLIBC_2.4 sigaction F -GLIBC_2.4 sigaddset F -GLIBC_2.4 sigaltstack F -GLIBC_2.4 sigandset F -GLIBC_2.4 sigblock F -GLIBC_2.4 sigdelset F -GLIBC_2.4 sigemptyset F -GLIBC_2.4 sigfillset F -GLIBC_2.4 siggetmask F -GLIBC_2.4 sighold F -GLIBC_2.4 sigignore F -GLIBC_2.4 siginterrupt F -GLIBC_2.4 sigisemptyset F -GLIBC_2.4 sigismember F -GLIBC_2.4 siglongjmp F -GLIBC_2.4 signal F -GLIBC_2.4 sigorset F -GLIBC_2.4 sigpause F -GLIBC_2.4 sigpending F -GLIBC_2.4 sigprocmask F -GLIBC_2.4 sigqueue F -GLIBC_2.4 sigrelse F -GLIBC_2.4 sigreturn F -GLIBC_2.4 sigset F -GLIBC_2.4 sigsetmask F -GLIBC_2.4 sigstack F -GLIBC_2.4 sigsuspend F -GLIBC_2.4 sigtimedwait F -GLIBC_2.4 sigvec F -GLIBC_2.4 sigwait F -GLIBC_2.4 sigwaitinfo F -GLIBC_2.4 sleep F -GLIBC_2.4 snprintf F -GLIBC_2.4 sockatmark F -GLIBC_2.4 socket F -GLIBC_2.4 socketpair F -GLIBC_2.4 sprintf F -GLIBC_2.4 sprofil F -GLIBC_2.4 srand F -GLIBC_2.4 srand48 F -GLIBC_2.4 srand48_r F -GLIBC_2.4 srandom F -GLIBC_2.4 srandom_r F -GLIBC_2.4 sscanf F -GLIBC_2.4 ssignal F -GLIBC_2.4 sstk F -GLIBC_2.4 statfs F -GLIBC_2.4 statfs64 F -GLIBC_2.4 statvfs F -GLIBC_2.4 statvfs64 F -GLIBC_2.4 stderr D 0x4 -GLIBC_2.4 stdin D 0x4 -GLIBC_2.4 stdout D 0x4 -GLIBC_2.4 step F -GLIBC_2.4 stime F -GLIBC_2.4 stpcpy F -GLIBC_2.4 stpncpy F -GLIBC_2.4 strcasecmp F -GLIBC_2.4 strcasecmp_l F -GLIBC_2.4 strcasestr F -GLIBC_2.4 strcat F -GLIBC_2.4 strchr F -GLIBC_2.4 strchrnul F -GLIBC_2.4 strcmp F -GLIBC_2.4 strcoll F -GLIBC_2.4 strcoll_l F -GLIBC_2.4 strcpy F -GLIBC_2.4 strcspn F -GLIBC_2.4 strdup F -GLIBC_2.4 strerror F -GLIBC_2.4 strerror_r F -GLIBC_2.4 strfmon F -GLIBC_2.4 strfmon_l F -GLIBC_2.4 strfry F -GLIBC_2.4 strftime F -GLIBC_2.4 strftime_l F -GLIBC_2.4 strlen F -GLIBC_2.4 strncasecmp F -GLIBC_2.4 strncasecmp_l F -GLIBC_2.4 strncat F -GLIBC_2.4 strncmp F -GLIBC_2.4 strncpy F -GLIBC_2.4 strndup F -GLIBC_2.4 strnlen F -GLIBC_2.4 strpbrk F -GLIBC_2.4 strptime F -GLIBC_2.4 strptime_l F -GLIBC_2.4 strrchr F -GLIBC_2.4 strsep F -GLIBC_2.4 strsignal F -GLIBC_2.4 strspn F -GLIBC_2.4 strstr F -GLIBC_2.4 strtod F -GLIBC_2.4 strtod_l F -GLIBC_2.4 strtof F -GLIBC_2.4 strtof_l F -GLIBC_2.4 strtoimax F -GLIBC_2.4 strtok F -GLIBC_2.4 strtok_r F -GLIBC_2.4 strtol F -GLIBC_2.4 strtol_l F -GLIBC_2.4 strtold F -GLIBC_2.4 strtold_l F -GLIBC_2.4 strtoll F -GLIBC_2.4 strtoll_l F -GLIBC_2.4 strtoq F -GLIBC_2.4 strtoul F -GLIBC_2.4 strtoul_l F -GLIBC_2.4 strtoull F -GLIBC_2.4 strtoull_l F -GLIBC_2.4 strtoumax F -GLIBC_2.4 strtouq F -GLIBC_2.4 strverscmp F -GLIBC_2.4 strxfrm F -GLIBC_2.4 strxfrm_l F -GLIBC_2.4 stty F -GLIBC_2.4 svc_exit F -GLIBC_2.4 svc_fdset D 0x80 -GLIBC_2.4 svc_getreq F -GLIBC_2.4 svc_getreq_common F -GLIBC_2.4 svc_getreq_poll F -GLIBC_2.4 svc_getreqset F -GLIBC_2.4 svc_max_pollfd D 0x4 -GLIBC_2.4 svc_pollfd D 0x4 -GLIBC_2.4 svc_register F -GLIBC_2.4 svc_run F -GLIBC_2.4 svc_sendreply F -GLIBC_2.4 svc_unregister F -GLIBC_2.4 svcauthdes_stats D 0xc -GLIBC_2.4 svcerr_auth F -GLIBC_2.4 svcerr_decode F -GLIBC_2.4 svcerr_noproc F -GLIBC_2.4 svcerr_noprog F -GLIBC_2.4 svcerr_progvers F -GLIBC_2.4 svcerr_systemerr F -GLIBC_2.4 svcerr_weakauth F -GLIBC_2.4 svcfd_create F -GLIBC_2.4 svcraw_create F -GLIBC_2.4 svctcp_create F -GLIBC_2.4 svcudp_bufcreate F -GLIBC_2.4 svcudp_create F -GLIBC_2.4 svcudp_enablecache F -GLIBC_2.4 svcunix_create F -GLIBC_2.4 svcunixfd_create F -GLIBC_2.4 swab F -GLIBC_2.4 swapcontext F -GLIBC_2.4 swapoff F -GLIBC_2.4 swapon F -GLIBC_2.4 swprintf F -GLIBC_2.4 swscanf F -GLIBC_2.4 symlink F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sync F -GLIBC_2.4 sys_errlist D 0x210 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 sys_sigabbrev D 0x104 -GLIBC_2.4 sys_siglist D 0x104 -GLIBC_2.4 syscall F -GLIBC_2.4 sysconf F -GLIBC_2.4 sysctl F -GLIBC_2.4 sysinfo F -GLIBC_2.4 syslog F -GLIBC_2.4 system F -GLIBC_2.4 sysv_signal F -GLIBC_2.4 tcdrain F -GLIBC_2.4 tcflow F -GLIBC_2.4 tcflush F -GLIBC_2.4 tcgetattr F -GLIBC_2.4 tcgetpgrp F -GLIBC_2.4 tcgetsid F -GLIBC_2.4 tcsendbreak F -GLIBC_2.4 tcsetattr F -GLIBC_2.4 tcsetpgrp F -GLIBC_2.4 tdelete F -GLIBC_2.4 tdestroy F -GLIBC_2.4 telldir F -GLIBC_2.4 tempnam F -GLIBC_2.4 textdomain F -GLIBC_2.4 tfind F -GLIBC_2.4 time F -GLIBC_2.4 timegm F -GLIBC_2.4 timelocal F -GLIBC_2.4 times F -GLIBC_2.4 timezone D 0x4 -GLIBC_2.4 tmpfile F -GLIBC_2.4 tmpfile64 F -GLIBC_2.4 tmpnam F -GLIBC_2.4 tmpnam_r F -GLIBC_2.4 toascii F -GLIBC_2.4 tolower F -GLIBC_2.4 tolower_l F -GLIBC_2.4 toupper F -GLIBC_2.4 toupper_l F -GLIBC_2.4 towctrans F -GLIBC_2.4 towctrans_l F -GLIBC_2.4 towlower F -GLIBC_2.4 towlower_l F -GLIBC_2.4 towupper F -GLIBC_2.4 towupper_l F -GLIBC_2.4 tr_break F -GLIBC_2.4 truncate F -GLIBC_2.4 truncate64 F -GLIBC_2.4 tsearch F -GLIBC_2.4 ttyname F -GLIBC_2.4 ttyname_r F -GLIBC_2.4 ttyslot F -GLIBC_2.4 twalk F -GLIBC_2.4 tzname D 0x8 -GLIBC_2.4 tzset F -GLIBC_2.4 ualarm F -GLIBC_2.4 ulckpwdf F -GLIBC_2.4 ulimit F -GLIBC_2.4 umask F -GLIBC_2.4 umount F -GLIBC_2.4 umount2 F -GLIBC_2.4 uname F -GLIBC_2.4 ungetc F -GLIBC_2.4 ungetwc F -GLIBC_2.4 unlink F -GLIBC_2.4 unlinkat F -GLIBC_2.4 unlockpt F -GLIBC_2.4 unsetenv F -GLIBC_2.4 unshare F -GLIBC_2.4 updwtmp F -GLIBC_2.4 updwtmpx F -GLIBC_2.4 uselib F -GLIBC_2.4 uselocale F -GLIBC_2.4 user2netname F -GLIBC_2.4 usleep F -GLIBC_2.4 ustat F -GLIBC_2.4 utime F -GLIBC_2.4 utimes F -GLIBC_2.4 utmpname F -GLIBC_2.4 utmpxname F -GLIBC_2.4 valloc F -GLIBC_2.4 vasprintf F -GLIBC_2.4 vdprintf F -GLIBC_2.4 verr F -GLIBC_2.4 verrx F -GLIBC_2.4 versionsort F -GLIBC_2.4 versionsort64 F -GLIBC_2.4 vfork F -GLIBC_2.4 vfprintf F -GLIBC_2.4 vfscanf F -GLIBC_2.4 vfwprintf F -GLIBC_2.4 vfwscanf F -GLIBC_2.4 vhangup F -GLIBC_2.4 vlimit F -GLIBC_2.4 vprintf F -GLIBC_2.4 vscanf F -GLIBC_2.4 vsnprintf F -GLIBC_2.4 vsprintf F -GLIBC_2.4 vsscanf F -GLIBC_2.4 vswprintf F -GLIBC_2.4 vswscanf F -GLIBC_2.4 vsyslog F -GLIBC_2.4 vtimes F -GLIBC_2.4 vwarn F -GLIBC_2.4 vwarnx F -GLIBC_2.4 vwprintf F -GLIBC_2.4 vwscanf F -GLIBC_2.4 wait F -GLIBC_2.4 wait3 F -GLIBC_2.4 wait4 F -GLIBC_2.4 waitid F -GLIBC_2.4 waitpid F -GLIBC_2.4 warn F -GLIBC_2.4 warnx F -GLIBC_2.4 wcpcpy F -GLIBC_2.4 wcpncpy F -GLIBC_2.4 wcrtomb F -GLIBC_2.4 wcscasecmp F -GLIBC_2.4 wcscasecmp_l F -GLIBC_2.4 wcscat F -GLIBC_2.4 wcschr F -GLIBC_2.4 wcschrnul F -GLIBC_2.4 wcscmp F -GLIBC_2.4 wcscoll F -GLIBC_2.4 wcscoll_l F -GLIBC_2.4 wcscpy F -GLIBC_2.4 wcscspn F -GLIBC_2.4 wcsdup F -GLIBC_2.4 wcsftime F -GLIBC_2.4 wcsftime_l F -GLIBC_2.4 wcslen F -GLIBC_2.4 wcsncasecmp F -GLIBC_2.4 wcsncasecmp_l F -GLIBC_2.4 wcsncat F -GLIBC_2.4 wcsncmp F -GLIBC_2.4 wcsncpy F -GLIBC_2.4 wcsnlen F -GLIBC_2.4 wcsnrtombs F -GLIBC_2.4 wcspbrk F -GLIBC_2.4 wcsrchr F -GLIBC_2.4 wcsrtombs F -GLIBC_2.4 wcsspn F -GLIBC_2.4 wcsstr F -GLIBC_2.4 wcstod F -GLIBC_2.4 wcstod_l F -GLIBC_2.4 wcstof F -GLIBC_2.4 wcstof_l F -GLIBC_2.4 wcstoimax F -GLIBC_2.4 wcstok F -GLIBC_2.4 wcstol F -GLIBC_2.4 wcstol_l F -GLIBC_2.4 wcstold F -GLIBC_2.4 wcstold_l F -GLIBC_2.4 wcstoll F -GLIBC_2.4 wcstoll_l F -GLIBC_2.4 wcstombs F -GLIBC_2.4 wcstoq F -GLIBC_2.4 wcstoul F -GLIBC_2.4 wcstoul_l F -GLIBC_2.4 wcstoull F -GLIBC_2.4 wcstoull_l F -GLIBC_2.4 wcstoumax F -GLIBC_2.4 wcstouq F -GLIBC_2.4 wcswcs F -GLIBC_2.4 wcswidth F -GLIBC_2.4 wcsxfrm F -GLIBC_2.4 wcsxfrm_l F -GLIBC_2.4 wctob F -GLIBC_2.4 wctomb F -GLIBC_2.4 wctrans F -GLIBC_2.4 wctrans_l F -GLIBC_2.4 wctype F -GLIBC_2.4 wctype_l F -GLIBC_2.4 wcwidth F -GLIBC_2.4 wmemchr F -GLIBC_2.4 wmemcmp F -GLIBC_2.4 wmemcpy F -GLIBC_2.4 wmemmove F -GLIBC_2.4 wmempcpy F -GLIBC_2.4 wmemset F -GLIBC_2.4 wordexp F -GLIBC_2.4 wordfree F -GLIBC_2.4 wprintf F -GLIBC_2.4 write F -GLIBC_2.4 writev F -GLIBC_2.4 wscanf F -GLIBC_2.4 xdecrypt F -GLIBC_2.4 xdr_accepted_reply F -GLIBC_2.4 xdr_array F -GLIBC_2.4 xdr_authdes_cred F -GLIBC_2.4 xdr_authdes_verf F -GLIBC_2.4 xdr_authunix_parms F -GLIBC_2.4 xdr_bool F -GLIBC_2.4 xdr_bytes F -GLIBC_2.4 xdr_callhdr F -GLIBC_2.4 xdr_callmsg F -GLIBC_2.4 xdr_char F -GLIBC_2.4 xdr_cryptkeyarg F -GLIBC_2.4 xdr_cryptkeyarg2 F -GLIBC_2.4 xdr_cryptkeyres F -GLIBC_2.4 xdr_des_block F -GLIBC_2.4 xdr_double F -GLIBC_2.4 xdr_enum F -GLIBC_2.4 xdr_float F -GLIBC_2.4 xdr_free F -GLIBC_2.4 xdr_getcredres F -GLIBC_2.4 xdr_hyper F -GLIBC_2.4 xdr_int F -GLIBC_2.4 xdr_int16_t F -GLIBC_2.4 xdr_int32_t F -GLIBC_2.4 xdr_int64_t F -GLIBC_2.4 xdr_int8_t F -GLIBC_2.4 xdr_key_netstarg F -GLIBC_2.4 xdr_key_netstres F -GLIBC_2.4 xdr_keybuf F -GLIBC_2.4 xdr_keystatus F -GLIBC_2.4 xdr_long F -GLIBC_2.4 xdr_longlong_t F -GLIBC_2.4 xdr_netnamestr F -GLIBC_2.4 xdr_netobj F -GLIBC_2.4 xdr_opaque F -GLIBC_2.4 xdr_opaque_auth F -GLIBC_2.4 xdr_pmap F -GLIBC_2.4 xdr_pmaplist F -GLIBC_2.4 xdr_pointer F -GLIBC_2.4 xdr_quad_t F -GLIBC_2.4 xdr_reference F -GLIBC_2.4 xdr_rejected_reply F -GLIBC_2.4 xdr_replymsg F -GLIBC_2.4 xdr_rmtcall_args F -GLIBC_2.4 xdr_rmtcallres F -GLIBC_2.4 xdr_short F -GLIBC_2.4 xdr_sizeof F -GLIBC_2.4 xdr_string F -GLIBC_2.4 xdr_u_char F -GLIBC_2.4 xdr_u_hyper F -GLIBC_2.4 xdr_u_int F -GLIBC_2.4 xdr_u_long F -GLIBC_2.4 xdr_u_longlong_t F -GLIBC_2.4 xdr_u_quad_t F -GLIBC_2.4 xdr_u_short F -GLIBC_2.4 xdr_uint16_t F -GLIBC_2.4 xdr_uint32_t F -GLIBC_2.4 xdr_uint64_t F -GLIBC_2.4 xdr_uint8_t F -GLIBC_2.4 xdr_union F -GLIBC_2.4 xdr_unixcred F -GLIBC_2.4 xdr_vector F -GLIBC_2.4 xdr_void F -GLIBC_2.4 xdr_wrapstring F -GLIBC_2.4 xdrmem_create F -GLIBC_2.4 xdrrec_create F -GLIBC_2.4 xdrrec_endofrecord F -GLIBC_2.4 xdrrec_eof F -GLIBC_2.4 xdrrec_skiprecord F -GLIBC_2.4 xdrstdio_create F -GLIBC_2.4 xencrypt F -GLIBC_2.4 xprt_register F -GLIBC_2.4 xprt_unregister F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __gnu_mcount_nc F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/arm/libcrypt.abilist b/sysdeps/unix/sysv/linux/arm/libcrypt.abilist deleted file mode 100644 index 04f1f02fa3..0000000000 --- a/sysdeps/unix/sysv/linux/arm/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 crypt F -GLIBC_2.4 crypt_r F -GLIBC_2.4 encrypt F -GLIBC_2.4 encrypt_r F -GLIBC_2.4 fcrypt F -GLIBC_2.4 setkey F -GLIBC_2.4 setkey_r F diff --git a/sysdeps/unix/sysv/linux/arm/libdl.abilist b/sysdeps/unix/sysv/linux/arm/libdl.abilist deleted file mode 100644 index 89a750a0a3..0000000000 --- a/sysdeps/unix/sysv/linux/arm/libdl.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 dladdr F -GLIBC_2.4 dladdr1 F -GLIBC_2.4 dlclose F -GLIBC_2.4 dlerror F -GLIBC_2.4 dlinfo F -GLIBC_2.4 dlmopen F -GLIBC_2.4 dlopen F -GLIBC_2.4 dlsym F -GLIBC_2.4 dlvsym F diff --git a/sysdeps/unix/sysv/linux/arm/libm.abilist b/sysdeps/unix/sysv/linux/arm/libm.abilist deleted file mode 100644 index d0c33d2a11..0000000000 --- a/sysdeps/unix/sysv/linux/arm/libm.abilist +++ /dev/null @@ -1,432 +0,0 @@ -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 _LIB_VERSION D 0x4 -GLIBC_2.4 __clog10 F -GLIBC_2.4 __clog10f F -GLIBC_2.4 __clog10l F -GLIBC_2.4 __finite F -GLIBC_2.4 __finitef F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fpclassify F -GLIBC_2.4 __fpclassifyf F -GLIBC_2.4 __signbit F -GLIBC_2.4 __signbitf F -GLIBC_2.4 acos F -GLIBC_2.4 acosf F -GLIBC_2.4 acosh F -GLIBC_2.4 acoshf F -GLIBC_2.4 acoshl F -GLIBC_2.4 acosl F -GLIBC_2.4 asin F -GLIBC_2.4 asinf F -GLIBC_2.4 asinh F -GLIBC_2.4 asinhf F -GLIBC_2.4 asinhl F -GLIBC_2.4 asinl F -GLIBC_2.4 atan F -GLIBC_2.4 atan2 F -GLIBC_2.4 atan2f F -GLIBC_2.4 atan2l F -GLIBC_2.4 atanf F -GLIBC_2.4 atanh F -GLIBC_2.4 atanhf F -GLIBC_2.4 atanhl F -GLIBC_2.4 atanl F -GLIBC_2.4 cabs F -GLIBC_2.4 cabsf F -GLIBC_2.4 cabsl F -GLIBC_2.4 cacos F -GLIBC_2.4 cacosf F -GLIBC_2.4 cacosh F -GLIBC_2.4 cacoshf F -GLIBC_2.4 cacoshl F -GLIBC_2.4 cacosl F -GLIBC_2.4 carg F -GLIBC_2.4 cargf F -GLIBC_2.4 cargl F -GLIBC_2.4 casin F -GLIBC_2.4 casinf F -GLIBC_2.4 casinh F -GLIBC_2.4 casinhf F -GLIBC_2.4 casinhl F -GLIBC_2.4 casinl F -GLIBC_2.4 catan F -GLIBC_2.4 catanf F -GLIBC_2.4 catanh F -GLIBC_2.4 catanhf F -GLIBC_2.4 catanhl F -GLIBC_2.4 catanl F -GLIBC_2.4 cbrt F -GLIBC_2.4 cbrtf F -GLIBC_2.4 cbrtl F -GLIBC_2.4 ccos F -GLIBC_2.4 ccosf F -GLIBC_2.4 ccosh F -GLIBC_2.4 ccoshf F -GLIBC_2.4 ccoshl F -GLIBC_2.4 ccosl F -GLIBC_2.4 ceil F -GLIBC_2.4 ceilf F -GLIBC_2.4 ceill F -GLIBC_2.4 cexp F -GLIBC_2.4 cexpf F -GLIBC_2.4 cexpl F -GLIBC_2.4 cimag F -GLIBC_2.4 cimagf F -GLIBC_2.4 cimagl F -GLIBC_2.4 clog F -GLIBC_2.4 clog10 F -GLIBC_2.4 clog10f F -GLIBC_2.4 clog10l F -GLIBC_2.4 clogf F -GLIBC_2.4 clogl F -GLIBC_2.4 conj F -GLIBC_2.4 conjf F -GLIBC_2.4 conjl F -GLIBC_2.4 copysign F -GLIBC_2.4 copysignf F -GLIBC_2.4 copysignl F -GLIBC_2.4 cos F -GLIBC_2.4 cosf F -GLIBC_2.4 cosh F -GLIBC_2.4 coshf F -GLIBC_2.4 coshl F -GLIBC_2.4 cosl F -GLIBC_2.4 cpow F -GLIBC_2.4 cpowf F -GLIBC_2.4 cpowl F -GLIBC_2.4 cproj F -GLIBC_2.4 cprojf F -GLIBC_2.4 cprojl F -GLIBC_2.4 creal F -GLIBC_2.4 crealf F -GLIBC_2.4 creall F -GLIBC_2.4 csin F -GLIBC_2.4 csinf F -GLIBC_2.4 csinh F -GLIBC_2.4 csinhf F -GLIBC_2.4 csinhl F -GLIBC_2.4 csinl F -GLIBC_2.4 csqrt F -GLIBC_2.4 csqrtf F -GLIBC_2.4 csqrtl F -GLIBC_2.4 ctan F -GLIBC_2.4 ctanf F -GLIBC_2.4 ctanh F -GLIBC_2.4 ctanhf F -GLIBC_2.4 ctanhl F -GLIBC_2.4 ctanl F -GLIBC_2.4 drem F -GLIBC_2.4 dremf F -GLIBC_2.4 dreml F -GLIBC_2.4 erf F -GLIBC_2.4 erfc F -GLIBC_2.4 erfcf F -GLIBC_2.4 erfcl F -GLIBC_2.4 erff F -GLIBC_2.4 erfl F -GLIBC_2.4 exp F -GLIBC_2.4 exp10 F -GLIBC_2.4 exp10f F -GLIBC_2.4 exp10l F -GLIBC_2.4 exp2 F -GLIBC_2.4 exp2f F -GLIBC_2.4 exp2l F -GLIBC_2.4 expf F -GLIBC_2.4 expl F -GLIBC_2.4 expm1 F -GLIBC_2.4 expm1f F -GLIBC_2.4 expm1l F -GLIBC_2.4 fabs F -GLIBC_2.4 fabsf F -GLIBC_2.4 fabsl F -GLIBC_2.4 fdim F -GLIBC_2.4 fdimf F -GLIBC_2.4 fdiml F -GLIBC_2.4 feclearexcept F -GLIBC_2.4 fedisableexcept F -GLIBC_2.4 feenableexcept F -GLIBC_2.4 fegetenv F -GLIBC_2.4 fegetexcept F -GLIBC_2.4 fegetexceptflag F -GLIBC_2.4 fegetround F -GLIBC_2.4 feholdexcept F -GLIBC_2.4 feraiseexcept F -GLIBC_2.4 fesetenv F -GLIBC_2.4 fesetexceptflag F -GLIBC_2.4 fesetround F -GLIBC_2.4 fetestexcept F -GLIBC_2.4 feupdateenv F -GLIBC_2.4 finite F -GLIBC_2.4 finitef F -GLIBC_2.4 finitel F -GLIBC_2.4 floor F -GLIBC_2.4 floorf F -GLIBC_2.4 floorl F -GLIBC_2.4 fma F -GLIBC_2.4 fmaf F -GLIBC_2.4 fmal F -GLIBC_2.4 fmax F -GLIBC_2.4 fmaxf F -GLIBC_2.4 fmaxl F -GLIBC_2.4 fmin F -GLIBC_2.4 fminf F -GLIBC_2.4 fminl F -GLIBC_2.4 fmod F -GLIBC_2.4 fmodf F -GLIBC_2.4 fmodl F -GLIBC_2.4 frexp F -GLIBC_2.4 frexpf F -GLIBC_2.4 frexpl F -GLIBC_2.4 gamma F -GLIBC_2.4 gammaf F -GLIBC_2.4 gammal F -GLIBC_2.4 hypot F -GLIBC_2.4 hypotf F -GLIBC_2.4 hypotl F -GLIBC_2.4 ilogb F -GLIBC_2.4 ilogbf F -GLIBC_2.4 ilogbl F -GLIBC_2.4 j0 F -GLIBC_2.4 j0f F -GLIBC_2.4 j0l F -GLIBC_2.4 j1 F -GLIBC_2.4 j1f F -GLIBC_2.4 j1l F -GLIBC_2.4 jn F -GLIBC_2.4 jnf F -GLIBC_2.4 jnl F -GLIBC_2.4 ldexp F -GLIBC_2.4 ldexpf F -GLIBC_2.4 ldexpl F -GLIBC_2.4 lgamma F -GLIBC_2.4 lgamma_r F -GLIBC_2.4 lgammaf F -GLIBC_2.4 lgammaf_r F -GLIBC_2.4 lgammal F -GLIBC_2.4 lgammal_r F -GLIBC_2.4 llrint F -GLIBC_2.4 llrintf F -GLIBC_2.4 llrintl F -GLIBC_2.4 llround F -GLIBC_2.4 llroundf F -GLIBC_2.4 llroundl F -GLIBC_2.4 log F -GLIBC_2.4 log10 F -GLIBC_2.4 log10f F -GLIBC_2.4 log10l F -GLIBC_2.4 log1p F -GLIBC_2.4 log1pf F -GLIBC_2.4 log1pl F -GLIBC_2.4 log2 F -GLIBC_2.4 log2f F -GLIBC_2.4 log2l F -GLIBC_2.4 logb F -GLIBC_2.4 logbf F -GLIBC_2.4 logbl F -GLIBC_2.4 logf F -GLIBC_2.4 logl F -GLIBC_2.4 lrint F -GLIBC_2.4 lrintf F -GLIBC_2.4 lrintl F -GLIBC_2.4 lround F -GLIBC_2.4 lroundf F -GLIBC_2.4 lroundl F -GLIBC_2.4 matherr F -GLIBC_2.4 modf F -GLIBC_2.4 modff F -GLIBC_2.4 modfl F -GLIBC_2.4 nan F -GLIBC_2.4 nanf F -GLIBC_2.4 nanl F -GLIBC_2.4 nearbyint F -GLIBC_2.4 nearbyintf F -GLIBC_2.4 nearbyintl F -GLIBC_2.4 nextafter F -GLIBC_2.4 nextafterf F -GLIBC_2.4 nextafterl F -GLIBC_2.4 nexttoward F -GLIBC_2.4 nexttowardf F -GLIBC_2.4 nexttowardl F -GLIBC_2.4 pow F -GLIBC_2.4 pow10 F -GLIBC_2.4 pow10f F -GLIBC_2.4 pow10l F -GLIBC_2.4 powf F -GLIBC_2.4 powl F -GLIBC_2.4 remainder F -GLIBC_2.4 remainderf F -GLIBC_2.4 remainderl F -GLIBC_2.4 remquo F -GLIBC_2.4 remquof F -GLIBC_2.4 remquol F -GLIBC_2.4 rint F -GLIBC_2.4 rintf F -GLIBC_2.4 rintl F -GLIBC_2.4 round F -GLIBC_2.4 roundf F -GLIBC_2.4 roundl F -GLIBC_2.4 scalb F -GLIBC_2.4 scalbf F -GLIBC_2.4 scalbl F -GLIBC_2.4 scalbln F -GLIBC_2.4 scalblnf F -GLIBC_2.4 scalblnl F -GLIBC_2.4 scalbn F -GLIBC_2.4 scalbnf F -GLIBC_2.4 scalbnl F -GLIBC_2.4 signgam D 0x4 -GLIBC_2.4 significand F -GLIBC_2.4 significandf F -GLIBC_2.4 significandl F -GLIBC_2.4 sin F -GLIBC_2.4 sincos F -GLIBC_2.4 sincosf F -GLIBC_2.4 sincosl F -GLIBC_2.4 sinf F -GLIBC_2.4 sinh F -GLIBC_2.4 sinhf F -GLIBC_2.4 sinhl F -GLIBC_2.4 sinl F -GLIBC_2.4 sqrt F -GLIBC_2.4 sqrtf F -GLIBC_2.4 sqrtl F -GLIBC_2.4 tan F -GLIBC_2.4 tanf F -GLIBC_2.4 tanh F -GLIBC_2.4 tanhf F -GLIBC_2.4 tanhl F -GLIBC_2.4 tanl F -GLIBC_2.4 tgamma F -GLIBC_2.4 tgammaf F -GLIBC_2.4 tgammal F -GLIBC_2.4 trunc F -GLIBC_2.4 truncf F -GLIBC_2.4 truncl F -GLIBC_2.4 y0 F -GLIBC_2.4 y0f F -GLIBC_2.4 y0l F -GLIBC_2.4 y1 F -GLIBC_2.4 y1f F -GLIBC_2.4 y1l F -GLIBC_2.4 yn F -GLIBC_2.4 ynf F -GLIBC_2.4 ynl F diff --git a/sysdeps/unix/sysv/linux/arm/libnsl.abilist b/sysdeps/unix/sysv/linux/arm/libnsl.abilist deleted file mode 100644 index 2b2e49e6a1..0000000000 --- a/sysdeps/unix/sysv/linux/arm/libnsl.abilist +++ /dev/null @@ -1,122 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __free_fdresult F -GLIBC_2.4 __nis_default_access F -GLIBC_2.4 __nis_default_group F -GLIBC_2.4 __nis_default_owner F -GLIBC_2.4 __nis_default_ttl F -GLIBC_2.4 __nis_finddirectory F -GLIBC_2.4 __nis_hash F -GLIBC_2.4 __nisbind_connect F -GLIBC_2.4 __nisbind_create F -GLIBC_2.4 __nisbind_destroy F -GLIBC_2.4 __nisbind_next F -GLIBC_2.4 __yp_check F -GLIBC_2.4 nis_add F -GLIBC_2.4 nis_add_entry F -GLIBC_2.4 nis_addmember F -GLIBC_2.4 nis_checkpoint F -GLIBC_2.4 nis_clone_directory F -GLIBC_2.4 nis_clone_object F -GLIBC_2.4 nis_clone_result F -GLIBC_2.4 nis_creategroup F -GLIBC_2.4 nis_destroy_object F -GLIBC_2.4 nis_destroygroup F -GLIBC_2.4 nis_dir_cmp F -GLIBC_2.4 nis_domain_of F -GLIBC_2.4 nis_domain_of_r F -GLIBC_2.4 nis_first_entry F -GLIBC_2.4 nis_free_directory F -GLIBC_2.4 nis_free_object F -GLIBC_2.4 nis_free_request F -GLIBC_2.4 nis_freenames F -GLIBC_2.4 nis_freeresult F -GLIBC_2.4 nis_freeservlist F -GLIBC_2.4 nis_freetags F -GLIBC_2.4 nis_getnames F -GLIBC_2.4 nis_getservlist F -GLIBC_2.4 nis_ismember F -GLIBC_2.4 nis_leaf_of F -GLIBC_2.4 nis_leaf_of_r F -GLIBC_2.4 nis_lerror F -GLIBC_2.4 nis_list F -GLIBC_2.4 nis_local_directory F -GLIBC_2.4 nis_local_group F -GLIBC_2.4 nis_local_host F -GLIBC_2.4 nis_local_principal F -GLIBC_2.4 nis_lookup F -GLIBC_2.4 nis_mkdir F -GLIBC_2.4 nis_modify F -GLIBC_2.4 nis_modify_entry F -GLIBC_2.4 nis_name_of F -GLIBC_2.4 nis_name_of_r F -GLIBC_2.4 nis_next_entry F -GLIBC_2.4 nis_perror F -GLIBC_2.4 nis_ping F -GLIBC_2.4 nis_print_directory F -GLIBC_2.4 nis_print_entry F -GLIBC_2.4 nis_print_group F -GLIBC_2.4 nis_print_group_entry F -GLIBC_2.4 nis_print_link F -GLIBC_2.4 nis_print_object F -GLIBC_2.4 nis_print_result F -GLIBC_2.4 nis_print_rights F -GLIBC_2.4 nis_print_table F -GLIBC_2.4 nis_read_obj F -GLIBC_2.4 nis_remove F -GLIBC_2.4 nis_remove_entry F -GLIBC_2.4 nis_removemember F -GLIBC_2.4 nis_rmdir F -GLIBC_2.4 nis_servstate F -GLIBC_2.4 nis_sperrno F -GLIBC_2.4 nis_sperror F -GLIBC_2.4 nis_sperror_r F -GLIBC_2.4 nis_stats F -GLIBC_2.4 nis_verifygroup F -GLIBC_2.4 nis_write_obj F -GLIBC_2.4 readColdStartFile F -GLIBC_2.4 writeColdStartFile F -GLIBC_2.4 xdr_cback_data F -GLIBC_2.4 xdr_domainname F -GLIBC_2.4 xdr_keydat F -GLIBC_2.4 xdr_mapname F -GLIBC_2.4 xdr_obj_p F -GLIBC_2.4 xdr_peername F -GLIBC_2.4 xdr_valdat F -GLIBC_2.4 xdr_yp_buf F -GLIBC_2.4 xdr_ypall F -GLIBC_2.4 xdr_ypbind_binding F -GLIBC_2.4 xdr_ypbind_resp F -GLIBC_2.4 xdr_ypbind_resptype F -GLIBC_2.4 xdr_ypbind_setdom F -GLIBC_2.4 xdr_ypdelete_args F -GLIBC_2.4 xdr_ypmap_parms F -GLIBC_2.4 xdr_ypmaplist F -GLIBC_2.4 xdr_yppush_status F -GLIBC_2.4 xdr_yppushresp_xfr F -GLIBC_2.4 xdr_ypreq_key F -GLIBC_2.4 xdr_ypreq_nokey F -GLIBC_2.4 xdr_ypreq_xfr F -GLIBC_2.4 xdr_ypresp_all F -GLIBC_2.4 xdr_ypresp_key_val F -GLIBC_2.4 xdr_ypresp_maplist F -GLIBC_2.4 xdr_ypresp_master F -GLIBC_2.4 xdr_ypresp_order F -GLIBC_2.4 xdr_ypresp_val F -GLIBC_2.4 xdr_ypresp_xfr F -GLIBC_2.4 xdr_ypstat F -GLIBC_2.4 xdr_ypupdate_args F -GLIBC_2.4 xdr_ypxfrstat F -GLIBC_2.4 yp_all F -GLIBC_2.4 yp_bind F -GLIBC_2.4 yp_first F -GLIBC_2.4 yp_get_default_domain F -GLIBC_2.4 yp_maplist F -GLIBC_2.4 yp_master F -GLIBC_2.4 yp_match F -GLIBC_2.4 yp_next F -GLIBC_2.4 yp_order F -GLIBC_2.4 yp_unbind F -GLIBC_2.4 yp_update F -GLIBC_2.4 ypbinderr_string F -GLIBC_2.4 yperr_string F -GLIBC_2.4 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/arm/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/libpthread.abilist deleted file mode 100644 index 91545c1542..0000000000 --- a/sysdeps/unix/sysv/linux/arm/libpthread.abilist +++ /dev/null @@ -1,228 +0,0 @@ -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 _IO_flockfile F -GLIBC_2.4 _IO_ftrylockfile F -GLIBC_2.4 _IO_funlockfile F -GLIBC_2.4 __close F -GLIBC_2.4 __connect F -GLIBC_2.4 __errno_location F -GLIBC_2.4 __fcntl F -GLIBC_2.4 __fork F -GLIBC_2.4 __h_errno_location F -GLIBC_2.4 __libc_allocate_rtsig F -GLIBC_2.4 __libc_current_sigrtmax F -GLIBC_2.4 __libc_current_sigrtmin F -GLIBC_2.4 __lseek F -GLIBC_2.4 __nanosleep F -GLIBC_2.4 __open F -GLIBC_2.4 __open64 F -GLIBC_2.4 __pread64 F -GLIBC_2.4 __pthread_cleanup_routine F -GLIBC_2.4 __pthread_getspecific F -GLIBC_2.4 __pthread_key_create F -GLIBC_2.4 __pthread_mutex_destroy F -GLIBC_2.4 __pthread_mutex_init F -GLIBC_2.4 __pthread_mutex_lock F -GLIBC_2.4 __pthread_mutex_trylock F -GLIBC_2.4 __pthread_mutex_unlock F -GLIBC_2.4 __pthread_mutexattr_destroy F -GLIBC_2.4 __pthread_mutexattr_init F -GLIBC_2.4 __pthread_mutexattr_settype F -GLIBC_2.4 __pthread_once F -GLIBC_2.4 __pthread_register_cancel F -GLIBC_2.4 __pthread_register_cancel_defer F -GLIBC_2.4 __pthread_rwlock_destroy F -GLIBC_2.4 __pthread_rwlock_init F -GLIBC_2.4 __pthread_rwlock_rdlock F -GLIBC_2.4 __pthread_rwlock_tryrdlock F -GLIBC_2.4 __pthread_rwlock_trywrlock F -GLIBC_2.4 __pthread_rwlock_unlock F -GLIBC_2.4 __pthread_rwlock_wrlock F -GLIBC_2.4 __pthread_setspecific F -GLIBC_2.4 __pthread_unregister_cancel F -GLIBC_2.4 __pthread_unregister_cancel_restore F -GLIBC_2.4 __pthread_unwind_next F -GLIBC_2.4 __pwrite64 F -GLIBC_2.4 __read F -GLIBC_2.4 __res_state F -GLIBC_2.4 __send F -GLIBC_2.4 __sigaction F -GLIBC_2.4 __vfork F -GLIBC_2.4 __wait F -GLIBC_2.4 __write F -GLIBC_2.4 _pthread_cleanup_pop F -GLIBC_2.4 _pthread_cleanup_pop_restore F -GLIBC_2.4 _pthread_cleanup_push F -GLIBC_2.4 _pthread_cleanup_push_defer F -GLIBC_2.4 accept F -GLIBC_2.4 close F -GLIBC_2.4 connect F -GLIBC_2.4 fcntl F -GLIBC_2.4 flockfile F -GLIBC_2.4 fork F -GLIBC_2.4 fsync F -GLIBC_2.4 ftrylockfile F -GLIBC_2.4 funlockfile F -GLIBC_2.4 longjmp F -GLIBC_2.4 lseek F -GLIBC_2.4 lseek64 F -GLIBC_2.4 msync F -GLIBC_2.4 nanosleep F -GLIBC_2.4 open F -GLIBC_2.4 open64 F -GLIBC_2.4 pause F -GLIBC_2.4 pread F -GLIBC_2.4 pread64 F -GLIBC_2.4 pthread_attr_destroy F -GLIBC_2.4 pthread_attr_getaffinity_np F -GLIBC_2.4 pthread_attr_getdetachstate F -GLIBC_2.4 pthread_attr_getguardsize F -GLIBC_2.4 pthread_attr_getinheritsched F -GLIBC_2.4 pthread_attr_getschedparam F -GLIBC_2.4 pthread_attr_getschedpolicy F -GLIBC_2.4 pthread_attr_getscope F -GLIBC_2.4 pthread_attr_getstack F -GLIBC_2.4 pthread_attr_getstackaddr F -GLIBC_2.4 pthread_attr_getstacksize F -GLIBC_2.4 pthread_attr_init F -GLIBC_2.4 pthread_attr_setaffinity_np F -GLIBC_2.4 pthread_attr_setdetachstate F -GLIBC_2.4 pthread_attr_setguardsize F -GLIBC_2.4 pthread_attr_setinheritsched F -GLIBC_2.4 pthread_attr_setschedparam F -GLIBC_2.4 pthread_attr_setschedpolicy F -GLIBC_2.4 pthread_attr_setscope F -GLIBC_2.4 pthread_attr_setstack F -GLIBC_2.4 pthread_attr_setstackaddr F -GLIBC_2.4 pthread_attr_setstacksize F -GLIBC_2.4 pthread_barrier_destroy F -GLIBC_2.4 pthread_barrier_init F -GLIBC_2.4 pthread_barrier_wait F -GLIBC_2.4 pthread_barrierattr_destroy F -GLIBC_2.4 pthread_barrierattr_getpshared F -GLIBC_2.4 pthread_barrierattr_init F -GLIBC_2.4 pthread_barrierattr_setpshared F -GLIBC_2.4 pthread_cancel F -GLIBC_2.4 pthread_cond_broadcast F -GLIBC_2.4 pthread_cond_destroy F -GLIBC_2.4 pthread_cond_init F -GLIBC_2.4 pthread_cond_signal F -GLIBC_2.4 pthread_cond_timedwait F -GLIBC_2.4 pthread_cond_wait F -GLIBC_2.4 pthread_condattr_destroy F -GLIBC_2.4 pthread_condattr_getclock F -GLIBC_2.4 pthread_condattr_getpshared F -GLIBC_2.4 pthread_condattr_init F -GLIBC_2.4 pthread_condattr_setclock F -GLIBC_2.4 pthread_condattr_setpshared F -GLIBC_2.4 pthread_create F -GLIBC_2.4 pthread_detach F -GLIBC_2.4 pthread_equal F -GLIBC_2.4 pthread_exit F -GLIBC_2.4 pthread_getaffinity_np F -GLIBC_2.4 pthread_getattr_np F -GLIBC_2.4 pthread_getconcurrency F -GLIBC_2.4 pthread_getcpuclockid F -GLIBC_2.4 pthread_getschedparam F -GLIBC_2.4 pthread_getspecific F -GLIBC_2.4 pthread_join F -GLIBC_2.4 pthread_key_create F -GLIBC_2.4 pthread_key_delete F -GLIBC_2.4 pthread_kill F -GLIBC_2.4 pthread_kill_other_threads_np F -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_destroy F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_init F -GLIBC_2.4 pthread_mutex_lock F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutex_timedlock F -GLIBC_2.4 pthread_mutex_trylock F -GLIBC_2.4 pthread_mutex_unlock F -GLIBC_2.4 pthread_mutexattr_destroy F -GLIBC_2.4 pthread_mutexattr_getkind_np F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getpshared F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_gettype F -GLIBC_2.4 pthread_mutexattr_init F -GLIBC_2.4 pthread_mutexattr_setkind_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setpshared F -GLIBC_2.4 pthread_mutexattr_setrobust_np F -GLIBC_2.4 pthread_mutexattr_settype F -GLIBC_2.4 pthread_once F -GLIBC_2.4 pthread_rwlock_destroy F -GLIBC_2.4 pthread_rwlock_init F -GLIBC_2.4 pthread_rwlock_rdlock F -GLIBC_2.4 pthread_rwlock_timedrdlock F -GLIBC_2.4 pthread_rwlock_timedwrlock F -GLIBC_2.4 pthread_rwlock_tryrdlock F -GLIBC_2.4 pthread_rwlock_trywrlock F -GLIBC_2.4 pthread_rwlock_unlock F -GLIBC_2.4 pthread_rwlock_wrlock F -GLIBC_2.4 pthread_rwlockattr_destroy F -GLIBC_2.4 pthread_rwlockattr_getkind_np F -GLIBC_2.4 pthread_rwlockattr_getpshared F -GLIBC_2.4 pthread_rwlockattr_init F -GLIBC_2.4 pthread_rwlockattr_setkind_np F -GLIBC_2.4 pthread_rwlockattr_setpshared F -GLIBC_2.4 pthread_self F -GLIBC_2.4 pthread_setaffinity_np F -GLIBC_2.4 pthread_setcancelstate F -GLIBC_2.4 pthread_setcanceltype F -GLIBC_2.4 pthread_setconcurrency F -GLIBC_2.4 pthread_setschedparam F -GLIBC_2.4 pthread_setschedprio F -GLIBC_2.4 pthread_setspecific F -GLIBC_2.4 pthread_sigmask F -GLIBC_2.4 pthread_spin_destroy F -GLIBC_2.4 pthread_spin_init F -GLIBC_2.4 pthread_spin_lock F -GLIBC_2.4 pthread_spin_trylock F -GLIBC_2.4 pthread_spin_unlock F -GLIBC_2.4 pthread_testcancel F -GLIBC_2.4 pthread_timedjoin_np F -GLIBC_2.4 pthread_tryjoin_np F -GLIBC_2.4 pthread_yield F -GLIBC_2.4 pwrite F -GLIBC_2.4 pwrite64 F -GLIBC_2.4 raise F -GLIBC_2.4 read F -GLIBC_2.4 recv F -GLIBC_2.4 recvfrom F -GLIBC_2.4 recvmsg F -GLIBC_2.4 sem_close F -GLIBC_2.4 sem_destroy F -GLIBC_2.4 sem_getvalue F -GLIBC_2.4 sem_init F -GLIBC_2.4 sem_open F -GLIBC_2.4 sem_post F -GLIBC_2.4 sem_timedwait F -GLIBC_2.4 sem_trywait F -GLIBC_2.4 sem_unlink F -GLIBC_2.4 sem_wait F -GLIBC_2.4 send F -GLIBC_2.4 sendmsg F -GLIBC_2.4 sendto F -GLIBC_2.4 sigaction F -GLIBC_2.4 siglongjmp F -GLIBC_2.4 sigwait F -GLIBC_2.4 system F -GLIBC_2.4 tcdrain F -GLIBC_2.4 vfork F -GLIBC_2.4 wait F -GLIBC_2.4 waitpid F -GLIBC_2.4 write F diff --git a/sysdeps/unix/sysv/linux/arm/libresolv.abilist b/sysdeps/unix/sysv/linux/arm/libresolv.abilist deleted file mode 100644 index c7023be532..0000000000 --- a/sysdeps/unix/sysv/linux/arm/libresolv.abilist +++ /dev/null @@ -1,93 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __b64_ntop F -GLIBC_2.4 __b64_pton F -GLIBC_2.4 __dn_comp F -GLIBC_2.4 __dn_count_labels F -GLIBC_2.4 __dn_expand F -GLIBC_2.4 __dn_skipname F -GLIBC_2.4 __fp_nquery F -GLIBC_2.4 __fp_query F -GLIBC_2.4 __fp_resstat F -GLIBC_2.4 __hostalias F -GLIBC_2.4 __loc_aton F -GLIBC_2.4 __loc_ntoa F -GLIBC_2.4 __p_cdname F -GLIBC_2.4 __p_cdnname F -GLIBC_2.4 __p_class F -GLIBC_2.4 __p_class_syms D 0x54 -GLIBC_2.4 __p_fqname F -GLIBC_2.4 __p_fqnname F -GLIBC_2.4 __p_option F -GLIBC_2.4 __p_query F -GLIBC_2.4 __p_rcode F -GLIBC_2.4 __p_secstodate F -GLIBC_2.4 __p_time F -GLIBC_2.4 __p_type F -GLIBC_2.4 __p_type_syms D 0x228 -GLIBC_2.4 __putlong F -GLIBC_2.4 __putshort F -GLIBC_2.4 __res_close F -GLIBC_2.4 __res_dnok F -GLIBC_2.4 __res_hnok F -GLIBC_2.4 __res_hostalias F -GLIBC_2.4 __res_isourserver F -GLIBC_2.4 __res_mailok F -GLIBC_2.4 __res_mkquery F -GLIBC_2.4 __res_nameinquery F -GLIBC_2.4 __res_nmkquery F -GLIBC_2.4 __res_nquery F -GLIBC_2.4 __res_nquerydomain F -GLIBC_2.4 __res_nsearch F -GLIBC_2.4 __res_nsend F -GLIBC_2.4 __res_ownok F -GLIBC_2.4 __res_queriesmatch F -GLIBC_2.4 __res_query F -GLIBC_2.4 __res_querydomain F -GLIBC_2.4 __res_search F -GLIBC_2.4 __res_send F -GLIBC_2.4 __sym_ntop F -GLIBC_2.4 __sym_ntos F -GLIBC_2.4 __sym_ston F -GLIBC_2.4 _gethtbyaddr F -GLIBC_2.4 _gethtbyname F -GLIBC_2.4 _gethtbyname2 F -GLIBC_2.4 _gethtent F -GLIBC_2.4 _getlong F -GLIBC_2.4 _getshort F -GLIBC_2.4 _res_opcodes D 0x40 -GLIBC_2.4 _sethtent F -GLIBC_2.4 inet_net_ntop F -GLIBC_2.4 inet_net_pton F -GLIBC_2.4 inet_neta F -GLIBC_2.4 res_gethostbyaddr F -GLIBC_2.4 res_gethostbyname F -GLIBC_2.4 res_gethostbyname2 F -GLIBC_2.4 res_send_setqhook F -GLIBC_2.4 res_send_setrhook F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/arm/librt.abilist b/sysdeps/unix/sysv/linux/arm/librt.abilist deleted file mode 100644 index b47aa0cc9c..0000000000 --- a/sysdeps/unix/sysv/linux/arm/librt.abilist +++ /dev/null @@ -1,42 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 aio_cancel F -GLIBC_2.4 aio_cancel64 F -GLIBC_2.4 aio_error F -GLIBC_2.4 aio_error64 F -GLIBC_2.4 aio_fsync F -GLIBC_2.4 aio_fsync64 F -GLIBC_2.4 aio_init F -GLIBC_2.4 aio_read F -GLIBC_2.4 aio_read64 F -GLIBC_2.4 aio_return F -GLIBC_2.4 aio_return64 F -GLIBC_2.4 aio_suspend F -GLIBC_2.4 aio_suspend64 F -GLIBC_2.4 aio_write F -GLIBC_2.4 aio_write64 F -GLIBC_2.4 clock_getcpuclockid F -GLIBC_2.4 clock_getres F -GLIBC_2.4 clock_gettime F -GLIBC_2.4 clock_nanosleep F -GLIBC_2.4 clock_settime F -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.4 mq_close F -GLIBC_2.4 mq_getattr F -GLIBC_2.4 mq_notify F -GLIBC_2.4 mq_open F -GLIBC_2.4 mq_receive F -GLIBC_2.4 mq_send F -GLIBC_2.4 mq_setattr F -GLIBC_2.4 mq_timedreceive F -GLIBC_2.4 mq_timedsend F -GLIBC_2.4 mq_unlink F -GLIBC_2.4 shm_open F -GLIBC_2.4 shm_unlink F -GLIBC_2.4 timer_create F -GLIBC_2.4 timer_delete F -GLIBC_2.4 timer_getoverrun F -GLIBC_2.4 timer_gettime F -GLIBC_2.4 timer_settime F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/arm/libthread_db.abilist b/sysdeps/unix/sysv/linux/arm/libthread_db.abilist deleted file mode 100644 index 4cffcd2238..0000000000 --- a/sysdeps/unix/sysv/linux/arm/libthread_db.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 td_init F -GLIBC_2.4 td_log F -GLIBC_2.4 td_symbol_list F -GLIBC_2.4 td_ta_clear_event F -GLIBC_2.4 td_ta_delete F -GLIBC_2.4 td_ta_enable_stats F -GLIBC_2.4 td_ta_event_addr F -GLIBC_2.4 td_ta_event_getmsg F -GLIBC_2.4 td_ta_get_nthreads F -GLIBC_2.4 td_ta_get_ph F -GLIBC_2.4 td_ta_get_stats F -GLIBC_2.4 td_ta_map_id2thr F -GLIBC_2.4 td_ta_map_lwp2thr F -GLIBC_2.4 td_ta_new F -GLIBC_2.4 td_ta_reset_stats F -GLIBC_2.4 td_ta_set_event F -GLIBC_2.4 td_ta_setconcurrency F -GLIBC_2.4 td_ta_thr_iter F -GLIBC_2.4 td_ta_tsd_iter F -GLIBC_2.4 td_thr_clear_event F -GLIBC_2.4 td_thr_dbresume F -GLIBC_2.4 td_thr_dbsuspend F -GLIBC_2.4 td_thr_event_enable F -GLIBC_2.4 td_thr_event_getmsg F -GLIBC_2.4 td_thr_get_info F -GLIBC_2.4 td_thr_getfpregs F -GLIBC_2.4 td_thr_getgregs F -GLIBC_2.4 td_thr_getxregs F -GLIBC_2.4 td_thr_getxregsize F -GLIBC_2.4 td_thr_set_event F -GLIBC_2.4 td_thr_setfpregs F -GLIBC_2.4 td_thr_setgregs F -GLIBC_2.4 td_thr_setprio F -GLIBC_2.4 td_thr_setsigpending F -GLIBC_2.4 td_thr_setxregs F -GLIBC_2.4 td_thr_sigsetmask F -GLIBC_2.4 td_thr_tls_get_addr F -GLIBC_2.4 td_thr_tlsbase F -GLIBC_2.4 td_thr_tsd F -GLIBC_2.4 td_thr_validate F diff --git a/sysdeps/unix/sysv/linux/arm/libutil.abilist b/sysdeps/unix/sysv/linux/arm/libutil.abilist deleted file mode 100644 index 0b4f746094..0000000000 --- a/sysdeps/unix/sysv/linux/arm/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 forkpty F -GLIBC_2.4 login F -GLIBC_2.4 login_tty F -GLIBC_2.4 logout F -GLIBC_2.4 logwtmp F -GLIBC_2.4 openpty F diff --git a/sysdeps/unix/sysv/linux/arm/localplt.data b/sysdeps/unix/sysv/linux/arm/localplt.data deleted file mode 100644 index 19d3299d98..0000000000 --- a/sysdeps/unix/sysv/linux/arm/localplt.data +++ /dev/null @@ -1,19 +0,0 @@ -libc.so: calloc -libc.so: free -libc.so: malloc -libc.so: memalign -libc.so: raise -libc.so: realloc -libm.so: matherr -libpthread.so: raise -# The dynamic loader needs __tls_get_addr for TLS. -ld.so: __tls_get_addr -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/unix/sysv/linux/arm/lockf64.c b/sysdeps/unix/sysv/linux/arm/lockf64.c deleted file mode 100644 index a88f5a784a..0000000000 --- a/sysdeps/unix/sysv/linux/arm/lockf64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/arm/lxstat.c b/sysdeps/unix/sysv/linux/arm/lxstat.c deleted file mode 100644 index 0efa0aea49..0000000000 --- a/sysdeps/unix/sysv/linux/arm/lxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/arm/makecontext.c b/sysdeps/unix/sysv/linux/arm/makecontext.c deleted file mode 100644 index 2ccd563869..0000000000 --- a/sysdeps/unix/sysv/linux/arm/makecontext.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Number of arguments that go in registers. */ -#define NREG_ARGS 4 - -/* Take a context previously prepared via getcontext() and set to - call func() with the given int only args. */ -void -__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) -{ - extern void __startcontext (void); - unsigned long *funcstack; - va_list vl; - unsigned long *regptr; - unsigned int reg; - int misaligned; - - /* Start at the top of stack. */ - funcstack = (unsigned long *) (ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); - - /* Ensure the stack stays eight byte aligned. */ - misaligned = ((unsigned long) funcstack & 4) != 0; - - if ((argc > NREG_ARGS) && (argc & 1) != 0) - misaligned = !misaligned; - - if (misaligned) - funcstack -= 1; - - va_start (vl, argc); - - /* Reserve space for the on-stack arguments. */ - if (argc > NREG_ARGS) - funcstack -= (argc - NREG_ARGS); - - ucp->uc_mcontext.arm_sp = (unsigned long) funcstack; - ucp->uc_mcontext.arm_pc = (unsigned long) func; - - /* Exit to startcontext() with the next context in R4 */ - ucp->uc_mcontext.arm_r4 = (unsigned long) ucp->uc_link; - ucp->uc_mcontext.arm_lr = (unsigned long) __startcontext; - - /* The first four arguments go into registers. */ - regptr = &(ucp->uc_mcontext.arm_r0); - - for (reg = 0; (reg < argc) && (reg < NREG_ARGS); reg++) - *regptr++ = va_arg (vl, unsigned long); - - /* And the remainder on the stack. */ - for (; reg < argc; reg++) - *funcstack++ = va_arg (vl, unsigned long); - - va_end (vl); -} -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/arm/profil-counter.h b/sysdeps/unix/sysv/linux/arm/profil-counter.h deleted file mode 100644 index 20346704b3..0000000000 --- a/sysdeps/unix/sysv/linux/arm/profil-counter.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Low-level statistical profiling support function. Linux/ARM version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -void -__profil_counter (int signo, const SIGCONTEXT scp) -{ - profil_count ((void *) GET_PC (scp)); - - /* This is a hack to prevent the compiler from implementing the - above function call as a sibcall. The sibcall would overwrite - the signal context. */ - asm volatile (""); -} -#ifndef __profil_counter -weak_alias (__profil_counter, profil_counter) -#endif diff --git a/sysdeps/unix/sysv/linux/arm/readahead.c b/sysdeps/unix/sysv/linux/arm/readahead.c deleted file mode 100644 index fa0279ed19..0000000000 --- a/sysdeps/unix/sysv/linux/arm/readahead.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Provide kernel hint to read ahead. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#include -#include - - -ssize_t -__readahead (int fd, off64_t offset, size_t count) -{ - return INLINE_SYSCALL (readahead, 5, fd, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff)), - count); -} - -weak_alias (__readahead, readahead) diff --git a/sysdeps/unix/sysv/linux/arm/readdir64.c b/sysdeps/unix/sysv/linux/arm/readdir64.c deleted file mode 100644 index 2ea26dd409..0000000000 --- a/sysdeps/unix/sysv/linux/arm/readdir64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/arm/readdir64_r.c b/sysdeps/unix/sysv/linux/arm/readdir64_r.c deleted file mode 100644 index 9f54f897e3..0000000000 --- a/sysdeps/unix/sysv/linux/arm/readdir64_r.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/arm/readelflib.c b/sysdeps/unix/sysv/linux/arm/readelflib.c deleted file mode 100644 index 65273bcf77..0000000000 --- a/sysdeps/unix/sysv/linux/arm/readelflib.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1999 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -int process_elf32_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); -int process_elf64_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); - -/* Returns 0 if everything is ok, != 0 in case of error. */ -int -process_elf_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, void *file_contents, - size_t file_length) -{ - ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; - int ret; - - if (elf_header->e_ident [EI_CLASS] == ELFCLASS32) - { - Elf32_Ehdr *elf32_header = (Elf32_Ehdr *) elf_header; - - ret = process_elf32_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - - if (!ret && EF_ARM_EABI_VERSION (elf32_header->e_flags) == EF_ARM_EABI_VER5) - { - if (elf32_header->e_flags & EF_ARM_ABI_FLOAT_HARD) - *flag = FLAG_ARM_LIBHF|FLAG_ELF_LIBC6; - else if (elf32_header->e_flags & EF_ARM_ABI_FLOAT_SOFT) - *flag = FLAG_ARM_LIBSF|FLAG_ELF_LIBC6; - else - /* We must assume the unmarked objects are compatible - with all ABI variants. Such objects may have been - generated in a transitional period when the ABI - tags were not added to all objects. */ - *flag = FLAG_ELF_LIBC6; - } - } - else - { - ret = process_elf64_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - /* AArch64 libraries are always libc.so.6+. */ - if (!ret) - *flag = FLAG_AARCH64_LIB64|FLAG_ELF_LIBC6; - } - return ret; -} - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf32_file -#define __ELF_NATIVE_CLASS 32 -#include "elf/readelflib.c" - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf64_file -#define __ELF_NATIVE_CLASS 64 -#include "elf/readelflib.c" diff --git a/sysdeps/unix/sysv/linux/arm/register-dump.h b/sysdeps/unix/sysv/linux/arm/register-dump.h deleted file mode 100644 index 0f2bed7d1d..0000000000 --- a/sysdeps/unix/sysv/linux/arm/register-dump.h +++ /dev/null @@ -1,136 +0,0 @@ -/* Dump registers. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include <_itoa.h> -#include - -/* We will print the register dump in this format: - - R0: XXXXXXXX R1: XXXXXXXX R2: XXXXXXXX R3: XXXXXXXX - R4: XXXXXXXX R5: XXXXXXXX R6: XXXXXXXX R7: XXXXXXXX - R8: XXXXXXXX R9: XXXXXXXX SL: XXXXXXXX FP: XXXXXXXX - IP: XXXXXXXX SP: XXXXXXXX LR: XXXXXXXX PC: XXXXXXXX - - CPSR: XXXXXXXX - - Trap: XXXXXXXX Error: XXXXXXXX OldMask: XXXXXXXX - Addr: XXXXXXXX - - */ - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -register_dump (int fd, const struct ucontext *ctx) -{ - char regs[21][8]; - struct iovec iov[97]; - size_t nr = 0; - -#define ADD_STRING(str) \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr -#define ADD_MEM(str, len) \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr - - /* Generate strings of register contents. */ - hexvalue (ctx->uc_mcontext.arm_r0, regs[0], 8); - hexvalue (ctx->uc_mcontext.arm_r1, regs[1], 8); - hexvalue (ctx->uc_mcontext.arm_r2, regs[2], 8); - hexvalue (ctx->uc_mcontext.arm_r3, regs[3], 8); - hexvalue (ctx->uc_mcontext.arm_r4, regs[4], 8); - hexvalue (ctx->uc_mcontext.arm_r5, regs[5], 8); - hexvalue (ctx->uc_mcontext.arm_r6, regs[6], 8); - hexvalue (ctx->uc_mcontext.arm_r7, regs[7], 8); - hexvalue (ctx->uc_mcontext.arm_r8, regs[8], 8); - hexvalue (ctx->uc_mcontext.arm_r9, regs[9], 8); - hexvalue (ctx->uc_mcontext.arm_r10, regs[10], 8); - hexvalue (ctx->uc_mcontext.arm_fp, regs[11], 8); - hexvalue (ctx->uc_mcontext.arm_ip, regs[12], 8); - hexvalue (ctx->uc_mcontext.arm_sp, regs[13], 8); - hexvalue (ctx->uc_mcontext.arm_lr, regs[14], 8); - hexvalue (ctx->uc_mcontext.arm_pc, regs[15], 8); - hexvalue (ctx->uc_mcontext.arm_cpsr, regs[16], 8); - hexvalue (ctx->uc_mcontext.trap_no, regs[17], 8); - hexvalue (ctx->uc_mcontext.error_code, regs[18], 8); - hexvalue (ctx->uc_mcontext.oldmask, regs[19], 8); - hexvalue (ctx->uc_mcontext.fault_address, regs[20], 8); - - /* Generate the output. */ - ADD_STRING ("Register dump:\n\n R0: "); - ADD_MEM (regs[0], 8); - ADD_STRING (" R1: "); - ADD_MEM (regs[1], 8); - ADD_STRING (" R2: "); - ADD_MEM (regs[2], 8); - ADD_STRING (" R3: "); - ADD_MEM (regs[3], 8); - ADD_STRING ("\n R4: "); - ADD_MEM (regs[4], 8); - ADD_STRING (" R5: "); - ADD_MEM (regs[5], 8); - ADD_STRING (" R6: "); - ADD_MEM (regs[6], 8); - ADD_STRING (" R7: "); - ADD_MEM (regs[7], 8); - ADD_STRING ("\n R8: "); - ADD_MEM (regs[8], 8); - ADD_STRING (" R9: "); - ADD_MEM (regs[9], 8); - ADD_STRING (" SL: "); - ADD_MEM (regs[10], 8); - ADD_STRING (" FP: "); - ADD_MEM (regs[11], 8); - ADD_STRING ("\n IP: "); - ADD_MEM (regs[12], 8); - ADD_STRING (" SP: "); - ADD_MEM (regs[13], 8); - ADD_STRING (" LR: "); - ADD_MEM (regs[14], 8); - ADD_STRING (" PC: "); - ADD_MEM (regs[15], 8); - ADD_STRING ("\n\n CPSR: "); - ADD_MEM (regs[16], 8); - ADD_STRING ("\n\n Trap: "); - ADD_MEM (regs[17], 8); - ADD_STRING (" Error: "); - ADD_MEM (regs[18], 8); - ADD_STRING (" OldMask: "); - ADD_MEM (regs[19], 8); - ADD_STRING ("\n Addr: "); - ADD_MEM (regs[20], 8); - - ADD_STRING ("\n"); - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, ctx) diff --git a/sysdeps/unix/sysv/linux/arm/scandir64.c b/sysdeps/unix/sysv/linux/arm/scandir64.c deleted file mode 100644 index 506fd8877c..0000000000 --- a/sysdeps/unix/sysv/linux/arm/scandir64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/arm/setcontext.S b/sysdeps/unix/sysv/linux/arm/setcontext.S deleted file mode 100644 index db6aebfbd4..0000000000 --- a/sysdeps/unix/sysv/linux/arm/setcontext.S +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* ??? Needs more rearrangement for the LDM to handle thumb mode. */ -#define NO_THUMB -#include -#include - -#include "ucontext_i.h" - - .syntax unified - .text - -/* int setcontext (const ucontext_t *ucp) */ - -ENTRY(__setcontext) - mov r4, r0 - add r0, r0, #UCONTEXT_REGSPACE - - /* Restore the VFP registers. Copied from arm/__longjmp.S. */ -#ifdef PIC - ldr r2, 1f - ldr r1, .Lrtld_global_ro -0: add r2, pc, r2 - ldr r2, [r2, r1] - ldr r2, [r2, #RTLD_GLOBAL_RO_DL_HWCAP_OFFSET] -#else - ldr r2, .Lhwcap - ldr r2, [r2, #0] -#endif - -#ifdef __SOFTFP__ - tst r2, #HWCAP_ARM_VFP - beq .Lno_vfp_sc -#endif - - /* Following instruction is vldmia r0!, {d8-d15}. */ - ldc p11, cr8, [r0], #64 - /* Restore the floating-point status register. */ - ldr r1, [r0], #4 - /* Following instruction is fmxr fpscr, r1. */ - mcr p10, 7, r1, cr1, cr0, 0 -.Lno_vfp_sc: - tst r2, #HWCAP_ARM_IWMMXT - beq .Lno_iwmmxt_sc - - /* Restore the call-preserved iWMMXt registers. */ - /* Following instructions are wldrd wr10, [r0], #8 (etc.) */ - ldcl p1, cr10, [r0], #8 - ldcl p1, cr11, [r0], #8 - ldcl p1, cr12, [r0], #8 - ldcl p1, cr13, [r0], #8 - ldcl p1, cr14, [r0], #8 - ldcl p1, cr15, [r0], #8 -.Lno_iwmmxt_sc: - - /* Now bring back the signal status. */ - mov r0, #SIG_SETMASK - add r1, r4, #UCONTEXT_SIGMASK - mov r2, #0 - bl PLTJMP(__sigprocmask) - - /* Loading r0-r3 makes makecontext easier. */ - add r14, r4, #MCONTEXT_ARM_R0 - ldmia r14, {r0-r12} - ldr r13, [r14, #(MCONTEXT_ARM_SP - MCONTEXT_ARM_R0)] - add r14, r14, #(MCONTEXT_ARM_LR - MCONTEXT_ARM_R0) - ldmia r14, {r14, pc} - -END(setcontext) -weak_alias(__setcontext, setcontext) - - /* Called when a makecontext() context returns. Start the - context in R4 or fall through to exit(). */ - /* Unwind descriptors are looked up based on PC - 2, so we have to - make sure to mark the instruction preceding the __startcontext - label as .cantunwind. */ - .fnstart - .cantunwind - nop -ENTRY(__startcontext) - movs r0, r4 - bne PLTJMP(__setcontext) - - @ New context was 0 - exit - b PLTJMP(HIDDEN_JUMPTARGET(exit)) - .fnend -END(__startcontext) - -#ifdef PIC -1: .long _GLOBAL_OFFSET_TABLE_ - 0b - PC_OFS -.Lrtld_global_ro: - .long C_SYMBOL_NAME(_rtld_global_ro)(GOT) -#else -.Lhwcap: - .long C_SYMBOL_NAME(_dl_hwcap) -#endif diff --git a/sysdeps/unix/sysv/linux/arm/shlib-versions b/sysdeps/unix/sysv/linux/arm/shlib-versions deleted file mode 100644 index 9b169530d4..0000000000 --- a/sysdeps/unix/sysv/linux/arm/shlib-versions +++ /dev/null @@ -1,9 +0,0 @@ -DEFAULT GLIBC_2.4 - -%ifdef HAVE_ARM_PCS_VFP -# The EABI-derived hard-float ABI uses a new dynamic linker. -ld=ld-linux-armhf.so.3 -%else -# The EABI-derived soft-float ABI continues to use ld-linux.so.3. -ld=ld-linux.so.3 -%endif diff --git a/sysdeps/unix/sysv/linux/arm/sigaction.c b/sysdeps/unix/sysv/linux/arm/sigaction.c deleted file mode 100644 index e4c0d976b0..0000000000 --- a/sysdeps/unix/sysv/linux/arm/sigaction.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -#include -#include - -/* The difference here is that the sigaction structure used in the - kernel is not the same as we use in the libc. Therefore we must - translate it here. */ -#include - -#define SA_RESTORER 0x04000000 - -extern void __default_sa_restorer (void); -extern void __default_rt_sa_restorer (void); - -/* When RT signals are in use we need to use a different return stub. */ -#define choose_restorer(flags) \ - (flags & SA_SIGINFO) ? __default_rt_sa_restorer \ - : __default_sa_restorer - -/* If ACT is not NULL, change the action for SIG to *ACT. - If OACT is not NULL, put the old action for SIG in *OACT. */ -int -__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) -{ - int result; - - struct kernel_sigaction kact, koact; - - if (act) - { - kact.k_sa_handler = act->sa_handler; - memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t)); - kact.sa_flags = act->sa_flags; -#ifdef HAVE_SA_RESTORER - if (kact.sa_flags & SA_RESTORER) - kact.sa_restorer = act->sa_restorer; - else - { - kact.sa_restorer = choose_restorer (kact.sa_flags); - kact.sa_flags |= SA_RESTORER; - } -#endif - } - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - result = INLINE_SYSCALL (rt_sigaction, 4, sig, - act ? &kact : NULL, - oact ? &koact : NULL, _NSIG / 8); - - if (oact && result >= 0) - { - oact->sa_handler = koact.k_sa_handler; - memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t)); - oact->sa_flags = koact.sa_flags; -#ifdef HAVE_SA_RESTORER - oact->sa_restorer = koact.sa_restorer; -#endif - } - return result; -} -libc_hidden_def (__libc_sigaction) - -#include diff --git a/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h b/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h deleted file mode 100644 index f2a66d154d..0000000000 --- a/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#define SIGCONTEXT siginfo_t *_si, struct ucontext * -#define SIGCONTEXT_EXTRA_ARGS _si, - -/* The sigcontext structure changed between 2.0 and 2.1 kernels. On any - modern system we should be able to assume that the "new" format will be - in use. */ - -#define GET_PC(ctx) ((void *) (ctx)->uc_mcontext.arm_pc) -#define GET_FRAME(ctx) ADVANCE_STACK_FRAME ((void *) ctx->uc_mcontext.arm_fp) -#define GET_STACK(ctx) ((void *) (ctx)->uc_mcontext.arm_sp) - -#define ADVANCE_STACK_FRAME(frm) \ - ((struct layout *)frm - 1) - -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) - -/* There is no reliable way to get the sigcontext unless we use a - three-argument signal handler. */ -#define __sigaction(sig, act, oact) ({ \ - (act)->sa_flags |= SA_SIGINFO; \ - (__sigaction) (sig, act, oact); \ -}) - -#define sigaction(sig, act, oact) ({ \ - (act)->sa_flags |= SA_SIGINFO; \ - (sigaction) (sig, act, oact); \ -}) diff --git a/sysdeps/unix/sysv/linux/arm/sigrestorer.S b/sysdeps/unix/sysv/linux/arm/sigrestorer.S deleted file mode 100644 index 01136bef0e..0000000000 --- a/sysdeps/unix/sysv/linux/arm/sigrestorer.S +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* If no SA_RESTORER function was specified by the application we use - one of these. This avoids the need for the kernel to synthesise a return - instruction on the stack, which would involve expensive cache flushes. - - Nowadays (2.6 series, and somewhat earlier) the kernel uses a high page - for signal trampolines, so the cache flushes are not an issue. But since - we do not have a vDSO, continue to use these so that we can provide - unwind information. - - Start the unwind tables at least one instruction before the signal - trampoline, because the unwinder will assume we are returning after - a call site. */ - -/* Used in ENTRY. */ -#undef cfi_startproc -#define cfi_startproc \ - .cfi_startproc simple; \ - .cfi_signal_frame - -/* The CFA is not computed / used correctly here; this is neither trivial to - do, nor is it needed. */ -#define CFI \ - cfi_def_cfa (sp, 0); \ - cfi_offset (r0, OFFSET + 0 * 4); \ - cfi_offset (r1, OFFSET + 1 * 4); \ - cfi_offset (r2, OFFSET + 2 * 4); \ - cfi_offset (r3, OFFSET + 3 * 4); \ - cfi_offset (r4, OFFSET + 4 * 4); \ - cfi_offset (r5, OFFSET + 5 * 4); \ - cfi_offset (r6, OFFSET + 6 * 4); \ - cfi_offset (r7, OFFSET + 7 * 4); \ - cfi_offset (r8, OFFSET + 8 * 4); \ - cfi_offset (r9, OFFSET + 9 * 4); \ - cfi_offset (r10, OFFSET + 10 * 4); \ - cfi_offset (r11, OFFSET + 11 * 4); \ - cfi_offset (r12, OFFSET + 12 * 4); \ - cfi_offset (r13, OFFSET + 13 * 4); \ - cfi_offset (r14, OFFSET + 14 * 4); \ - cfi_offset (r15, OFFSET + 15 * 4) - -#define OFFSET 32 - .fnstart - .save {r0-r15} - .pad #OFFSET - nop -ENTRY(__default_sa_restorer) - CFI - mov r7, $SYS_ify(sigreturn) - swi 0x0 - .fnend -END(__default_sa_restorer) -#undef OFFSET - -#define OFFSET 160 - .fnstart - .save {r0-r15} - .pad #OFFSET - nop -ENTRY(__default_rt_sa_restorer) - CFI - mov r7, $SYS_ify(rt_sigreturn) - swi 0x0 - .fnend -END(__default_rt_sa_restorer) -#undef OFFSET diff --git a/sysdeps/unix/sysv/linux/arm/swapcontext.S b/sysdeps/unix/sysv/linux/arm/swapcontext.S deleted file mode 100644 index 555da1fe0a..0000000000 --- a/sysdeps/unix/sysv/linux/arm/swapcontext.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - - .syntax unified - .text - -/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */ - -ENTRY(swapcontext) - - /* Have getcontext() do most of the work then fix up - LR afterwards. Save R3 to keep the stack aligned. */ - push {r0,r1,r3,r14} - cfi_adjust_cfa_offset (16) - cfi_rel_offset (r0,0) - cfi_rel_offset (r1,4) - cfi_rel_offset (r3,8) - cfi_rel_offset (r14,12) - - bl __getcontext - mov r4, r0 - - pop {r0,r1,r3,r14} - cfi_adjust_cfa_offset (-16) - cfi_restore (r0) - cfi_restore (r1) - cfi_restore (r3) - cfi_restore (r14) - - /* Exit if getcontext() failed. */ - cmp r4, #0 - itt ne - movne r0, r4 - RETINSTR(ne, r14) - - /* Fix up LR and the PC. */ - str r13,[r0, #MCONTEXT_ARM_SP] - str r14,[r0, #MCONTEXT_ARM_LR] - str r14,[r0, #MCONTEXT_ARM_PC] - - /* And swap using swapcontext(). */ - mov r0, r1 - b __setcontext - -END(swapcontext) diff --git a/sysdeps/unix/sysv/linux/arm/sys/elf.h b/sysdeps/unix/sysv/linux/arm/sys/elf.h deleted file mode 100644 index 44af8d2b1e..0000000000 --- a/sysdeps/unix/sysv/linux/arm/sys/elf.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_ELF_H -#define _SYS_ELF_H 1 - -#warning "This header is obsolete; use instead." - -#include - -#endif /* sys/elf.h */ diff --git a/sysdeps/unix/sysv/linux/arm/sys/io.h b/sysdeps/unix/sysv/linux/arm/sys/io.h deleted file mode 100644 index f4337823ce..0000000000 --- a/sysdeps/unix/sysv/linux/arm/sys/io.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_IO_H - -#define _SYS_IO_H 1 -#include - -__BEGIN_DECLS - -/* If TURN_ON is TRUE, request for permission to do direct i/o on the - port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O - permission off for that range. This call requires root privileges. */ -extern int ioperm (unsigned long int __from, unsigned long int __num, - int __turn_on) __THROW; - -/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero, - permission to access any I/O port is granted. This call requires - root privileges. */ -extern int iopl (int __level) __THROW; - -/* The functions that actually perform reads and writes. */ -extern unsigned char inb (unsigned long int __port) __THROW; -extern unsigned short int inw (unsigned long int __port) __THROW; -extern unsigned long int inl (unsigned long int __port) __THROW; - -extern void outb (unsigned char __value, unsigned long int __port) __THROW; -extern void outw (unsigned short __value, unsigned long int __port) __THROW; -extern void outl (unsigned long __value, unsigned long int __port) __THROW; - -__END_DECLS - -#endif /* _SYS_IO_H */ diff --git a/sysdeps/unix/sysv/linux/arm/sys/procfs.h b/sysdeps/unix/sysv/linux/arm/sys/procfs.h deleted file mode 100644 index 1b1b153730..0000000000 --- a/sysdeps/unix/sysv/linux/arm/sys/procfs.h +++ /dev/null @@ -1,122 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somewhat modelled after the file of the same name on SVR4 - systems. It provides a definition of the core file format for ELF - used on Linux. It doesn't have anything to do with the /proc file - system, even though Linux has one. - - Anyway, the whole purpose of this file is for GDB and GDB only. - Don't read too much into it. Don't use it for anything other than - GDB unless you know what you are doing. */ - -#include -#include -#include -#include - -__BEGIN_DECLS - -/* Type for a general-purpose register. */ -typedef unsigned long elf_greg_t; - -/* And the whole bunch of them. We could have used `struct - user_regs' directly in the typedef, but tradition says that - the register set is an array, which does have some peculiar - semantics, so leave it that way. */ -#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -/* Register set for the floating-point registers. */ -typedef struct user_fpregs elf_fpregset_t; - -/* Signal info. */ -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with Linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - GDB doesn't really use excluded. */ - -struct elf_prstatus - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args. */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned short int pr_uid; - unsigned short int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -/* The rest of this file provides the types for emulation of the - Solaris interfaces that should be implemented by - users of libthread_db. */ - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore have only one PID type. */ -typedef __pid_t lwpid_t; - -/* Process status and info. In the end we do provide typedefs for them. */ -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/arm/sys/ucontext.h b/sysdeps/unix/sysv/linux/arm/sys/ucontext.h deleted file mode 100644 index 0ce9b14ba5..0000000000 --- a/sysdeps/unix/sysv/linux/arm/sys/ucontext.h +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* System V/ARM ABI compliant context switching support. */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - - -#ifdef __USE_MISC -typedef int greg_t; - -/* Number of general registers. */ -# define NGREG 18 - -/* Container for all general registers. */ -typedef greg_t gregset_t[NGREG]; - -/* Number of each register is the `gregset_t' array. */ -enum -{ - REG_R0 = 0, -# define REG_R0 REG_R0 - REG_R1 = 1, -# define REG_R1 REG_R1 - REG_R2 = 2, -# define REG_R2 REG_R2 - REG_R3 = 3, -# define REG_R3 REG_R3 - REG_R4 = 4, -# define REG_R4 REG_R4 - REG_R5 = 5, -# define REG_R5 REG_R5 - REG_R6 = 6, -# define REG_R6 REG_R6 - REG_R7 = 7, -# define REG_R7 REG_R7 - REG_R8 = 8, -# define REG_R8 REG_R8 - REG_R9 = 9, -# define REG_R9 REG_R9 - REG_R10 = 10, -# define REG_R10 REG_R10 - REG_R11 = 11, -# define REG_R11 REG_R11 - REG_R12 = 12, -# define REG_R12 REG_R12 - REG_R13 = 13, -# define REG_R13 REG_R13 - REG_R14 = 14, -# define REG_R14 REG_R14 - REG_R15 = 15 -# define REG_R15 REG_R15 -}; - -struct _libc_fpstate -{ - struct - { - unsigned int sign1:1; - unsigned int unused:15; - unsigned int sign2:1; - unsigned int exponent:14; - unsigned int j:1; - unsigned int mantissa1:31; - unsigned int mantissa0:32; - } fpregs[8]; - unsigned int fpsr:32; - unsigned int fpcr:32; - unsigned char ftype[8]; - unsigned int init_flag; -}; -/* Structure to describe FPU registers. */ -typedef struct _libc_fpstate fpregset_t; -#endif - -/* Context to describe whole processor state. This only describes - the core registers; coprocessor registers get saved elsewhere - (e.g. in uc_regspace, or somewhere unspecified on the stack - during non-RT signal handlers). */ -typedef struct sigcontext mcontext_t; - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - sigset_t uc_sigmask; - unsigned long uc_regspace[128] __attribute__((__aligned__(8))); - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/arm/sys/user.h b/sysdeps/unix/sysv/linux/arm/sys/user.h deleted file mode 100644 index 46ca428e66..0000000000 --- a/sysdeps/unix/sysv/linux/arm/sys/user.h +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_USER_H -#define _SYS_USER_H 1 - -/* The whole purpose of this file is for GDB and GDB only. Don't read - too much into it. Don't use it for anything other than GDB unless - you know what you are doing. */ - -struct user_fpregs -{ - struct fp_reg - { - unsigned int sign1:1; - unsigned int unused:15; - unsigned int sign2:1; - unsigned int exponent:14; - unsigned int j:1; - unsigned int mantissa1:31; - unsigned int mantissa0:32; - } fpregs[8]; - unsigned int fpsr:32; - unsigned int fpcr:32; - unsigned char ftype[8]; - unsigned int init_flag; -}; - -struct user_regs -{ - unsigned long int uregs[18]; -}; - -struct user -{ - struct user_regs regs; /* General registers */ - int u_fpvalid; /* True if math co-processor being used. */ - - unsigned long int u_tsize; /* Text segment size (pages). */ - unsigned long int u_dsize; /* Data segment size (pages). */ - unsigned long int u_ssize; /* Stack segment size (pages). */ - - unsigned long start_code; /* Starting virtual address of text. */ - unsigned long start_stack; /* Starting virtual address of stack. */ - - long int signal; /* Signal that caused the core dump. */ - int reserved; /* No longer used */ - struct user_regs *u_ar0; /* help gdb to find the general registers. */ - - unsigned long magic; /* uniquely identify a core file */ - char u_comm[32]; /* User command that was responsible */ - int u_debugreg[8]; - struct user_fpregs u_fp; /* Floating point registers */ - struct user_fpregs *u_fp0; /* help gdb to find the FP registers. */ -}; - -#endif /* sys/user.h */ diff --git a/sysdeps/unix/sysv/linux/arm/syscall.S b/sysdeps/unix/sysv/linux/arm/syscall.S deleted file mode 100644 index c9528fff40..0000000000 --- a/sysdeps/unix/sysv/linux/arm/syscall.S +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* In the EABI syscall interface, we don't need a special syscall to - implement syscall(). It won't work reliably with 64-bit arguments - (but that is true on many modern platforms). */ - -ENTRY (syscall) - mov ip, sp - push {r4, r5, r6, r7} - cfi_adjust_cfa_offset (16) - cfi_rel_offset (r4, 0) - cfi_rel_offset (r5, 4) - cfi_rel_offset (r6, 8) - cfi_rel_offset (r7, 12) - mov r7, r0 - mov r0, r1 - mov r1, r2 - mov r2, r3 - ldmfd ip, {r3, r4, r5, r6} - swi 0x0 - pop {r4, r5, r6, r7} - cfi_adjust_cfa_offset (-16) - cfi_restore (r4) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - cmn r0, #4096 - it cc - RETINSTR(cc, lr) - b PLTJMP(syscall_error) -PSEUDO_END (syscall) diff --git a/sysdeps/unix/sysv/linux/arm/syscalls.list b/sysdeps/unix/sysv/linux/arm/syscalls.list deleted file mode 100644 index 13441f7eb4..0000000000 --- a/sysdeps/unix/sysv/linux/arm/syscalls.list +++ /dev/null @@ -1,33 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -chown - chown32 i:sii __chown chown -lchown - lchown32 i:sii __lchown lchown -fchown - fchown32 i:iii __fchown fchown - -getegid - getegid32 Ei: __getegid getegid -geteuid - geteuid32 Ei: __geteuid geteuid -getgid - getgid32 Ei: __getgid getgid -getuid - getuid32 Ei: __getuid getuid -getresgid - getresgid32 i:ppp __getresgid getresgid -getresuid - getresuid32 i:ppp __getresuid getresuid -getgroups - getgroups32 i:ip __getgroups getgroups - -setfsgid - setfsgid32 Ei:i setfsgid -setfsuid - setfsuid32 Ei:i setfsuid - -prlimit64 EXTRA prlimit64 i:iipp prlimit64 - -fanotify_mark EXTRA fanotify_mark i:iiiiis fanotify_mark - -personality EXTRA personality Ei:i __personality personality - -# proper socket implementations: -bind - bind i:ipi __bind bind -getpeername - getpeername i:ipp __getpeername getpeername -getsockname - getsockname i:ipp __getsockname getsockname -getsockopt - getsockopt i:iiiBN __getsockopt getsockopt -listen - listen i:ii __listen listen -setsockopt - setsockopt i:iiibn __setsockopt setsockopt -shutdown - shutdown i:ii __shutdown shutdown -socket - socket i:iii __socket socket -socketpair - socketpair i:iiif __socketpair socketpair diff --git a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h deleted file mode 100644 index de12acf046..0000000000 --- a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h +++ /dev/null @@ -1,241 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -/* NOTE: We do mark syscalls with unwind annotations, for the benefit of - cancellation; but they're really only accurate at the point of the - syscall. The ARM unwind directives are not rich enough without adding - a custom personality function. */ - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (__##syscall_name##_nocancel); \ - CFI_SECTIONS; \ - DO_CALL (syscall_name, args); \ - cmn r0, $4096; \ - PSEUDO_RET; \ - END (__##syscall_name##_nocancel); \ - ENTRY (name); \ - SINGLE_THREAD_P; \ - DOARGS_##args; \ - bne .Lpseudo_cancel; \ - cfi_remember_state; \ - ldr r7, =SYS_ify (syscall_name); \ - swi 0x0; \ - UNDOARGS_##args; \ - cmn r0, $4096; \ - PSEUDO_RET; \ - cfi_restore_state; \ - .Lpseudo_cancel: \ - .fnstart; /* matched by the .fnend in UNDOARGS below. */ \ - DOCARGS_##args; /* save syscall args etc. around CENABLE. */ \ - CENABLE; \ - mov ip, r0; /* put mask in safe place. */ \ - UNDOCARGS_##args; /* restore syscall args. */ \ - ldr r7, =SYS_ify (syscall_name); \ - swi 0x0; /* do the call. */ \ - mov r7, r0; /* save syscall return value. */ \ - mov r0, ip; /* get mask back. */ \ - CDISABLE; \ - mov r0, r7; /* retrieve return value. */ \ - RESTORE_LR_##args; \ - UNDOARGS_##args; \ - cmn r0, $4096 - -/* DOARGS pushes eight bytes on the stack for five arguments, twelve bytes for - six arguments, and four bytes for fewer. In order to preserve doubleword - alignment, sometimes we must save an extra register. */ - -# define RESTART_UNWIND \ - .fnend; \ - .fnstart; \ - .save {r7}; \ - .save {lr} - -# define DOCARGS_0 \ - .save {r7}; \ - push {lr}; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (lr, 0); \ - .save {lr} -# define UNDOCARGS_0 -# define RESTORE_LR_0 \ - pop {lr}; \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (lr) - -# define DOCARGS_1 \ - .save {r7}; \ - push {r0, r1, lr}; \ - cfi_adjust_cfa_offset (12); \ - cfi_rel_offset (lr, 8); \ - .save {lr}; \ - .pad #8 -# define UNDOCARGS_1 \ - ldr r0, [sp], #8; \ - cfi_adjust_cfa_offset (-8); \ - RESTART_UNWIND -# define RESTORE_LR_1 \ - RESTORE_LR_0 - -# define DOCARGS_2 \ - .save {r7}; \ - push {r0, r1, lr}; \ - cfi_adjust_cfa_offset (12); \ - cfi_rel_offset (lr, 8); \ - .save {lr}; \ - .pad #8 -# define UNDOCARGS_2 \ - pop {r0, r1}; \ - cfi_adjust_cfa_offset (-8); \ - RESTART_UNWIND -# define RESTORE_LR_2 \ - RESTORE_LR_0 - -# define DOCARGS_3 \ - .save {r7}; \ - push {r0, r1, r2, r3, lr}; \ - cfi_adjust_cfa_offset (20); \ - cfi_rel_offset (lr, 16); \ - .save {lr}; \ - .pad #16 -# define UNDOCARGS_3 \ - pop {r0, r1, r2, r3}; \ - cfi_adjust_cfa_offset (-16); \ - RESTART_UNWIND -# define RESTORE_LR_3 \ - RESTORE_LR_0 - -# define DOCARGS_4 \ - .save {r7}; \ - push {r0, r1, r2, r3, lr}; \ - cfi_adjust_cfa_offset (20); \ - cfi_rel_offset (lr, 16); \ - .save {lr}; \ - .pad #16 -# define UNDOCARGS_4 \ - pop {r0, r1, r2, r3}; \ - cfi_adjust_cfa_offset (-16); \ - RESTART_UNWIND -# define RESTORE_LR_4 \ - RESTORE_LR_0 - -/* r4 is only stmfd'ed for correct stack alignment. */ -# define DOCARGS_5 \ - .save {r4, r7}; \ - push {r0, r1, r2, r3, r4, lr}; \ - cfi_adjust_cfa_offset (24); \ - cfi_rel_offset (lr, 20); \ - .save {lr}; \ - .pad #20 -# define UNDOCARGS_5 \ - pop {r0, r1, r2, r3}; \ - cfi_adjust_cfa_offset (-16); \ - .fnend; \ - .fnstart; \ - .save {r4, r7}; \ - .save {lr}; \ - .pad #4 -# define RESTORE_LR_5 \ - pop {r4, lr}; \ - cfi_adjust_cfa_offset (-8); \ - /* r4 will be marked as restored later. */ \ - cfi_restore (lr) - -# define DOCARGS_6 \ - .save {r4, r5, r7}; \ - push {r0, r1, r2, r3, lr}; \ - cfi_adjust_cfa_offset (20); \ - cfi_rel_offset (lr, 16); \ - .save {lr}; \ - .pad #16 -# define UNDOCARGS_6 \ - pop {r0, r1, r2, r3}; \ - cfi_adjust_cfa_offset (-16); \ - .fnend; \ - .fnstart; \ - .save {r4, r5, r7}; \ - .save {lr}; -# define RESTORE_LR_6 \ - RESTORE_LR_0 - -# if IS_IN (libpthread) -# define CENABLE bl PLTJMP(__pthread_enable_asynccancel) -# define CDISABLE bl PLTJMP(__pthread_disable_asynccancel) -# define __local_multiple_threads __pthread_multiple_threads -# elif IS_IN (libc) -# define CENABLE bl PLTJMP(__libc_enable_asynccancel) -# define CDISABLE bl PLTJMP(__libc_disable_asynccancel) -# define __local_multiple_threads __libc_multiple_threads -# elif IS_IN (librt) -# define CENABLE bl PLTJMP(__librt_enable_asynccancel) -# define CDISABLE bl PLTJMP(__librt_disable_asynccancel) -# else -# error Unsupported library -# endif - -# if IS_IN (libpthread) || IS_IN (libc) -# ifndef __ASSEMBLER__ -extern int __local_multiple_threads attribute_hidden; -# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1) -# else -# define SINGLE_THREAD_P \ - LDST_PCREL(ldr, ip, ip, __local_multiple_threads); \ - teq ip, #0 -# endif -# else -/* There is no __local_multiple_threads for librt, so use the TCB. */ -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P \ - push {r0, lr}; \ - cfi_adjust_cfa_offset (8); \ - cfi_rel_offset (lr, 4); \ - GET_TLS (lr); \ - NEGOFF_ADJ_BASE (r0, MULTIPLE_THREADS_OFFSET); \ - ldr ip, NEGOFF_OFF1 (r0, MULTIPLE_THREADS_OFFSET); \ - pop {r0, lr}; \ - cfi_adjust_cfa_offset (-8); \ - cfi_restore (lr); \ - teq ip, #0 -# endif -# endif - -#elif !defined __ASSEMBLER__ - -/* For rtld, et cetera. */ -# define SINGLE_THREAD_P 1 -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.S b/sysdeps/unix/sysv/linux/arm/sysdep.S deleted file mode 100644 index a9b8a034c1..0000000000 --- a/sysdeps/unix/sysv/linux/arm/sysdep.S +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .text - -/* The syscall stubs jump here when they detect an error. - The code for Linux is almost identical to the canonical Unix - code, except that the error number in R0 is negated. */ - -#undef CALL_MCOUNT -#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers R0. */ - -ENTRY (__syscall_error) - rsb r0, r0, $0 - -#define __syscall_error __syscall_error_1 -#include diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.h b/sysdeps/unix/sysv/linux/arm/sysdep.h deleted file mode 100644 index 3ca2198596..0000000000 --- a/sysdeps/unix/sysv/linux/arm/sysdep.h +++ /dev/null @@ -1,442 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper, , August 1995. - ARM changes by Philip Blundell, , May 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINUX_ARM_SYSDEP_H -#define _LINUX_ARM_SYSDEP_H 1 - -/* There is some commonality. */ -#include -#include - -/* Defines RTLD_PRIVATE_ERRNO and USE_DL_SYSINFO. */ -#include - -#include - -/* In order to get __set_errno() definition in INLINE_SYSCALL. */ -#ifndef __ASSEMBLER__ -#include -#endif - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) (__NR_##syscall_name) - -#include - -#ifdef __ASSEMBLER__ - -#ifndef ARCH_HAS_HARD_TP -/* Internal macro calling the linux kernel kuser_get_tls helper. - Note that in thumb mode, a constant pool break is often out of range, so - we always expand the constant inline. */ -# ifdef __thumb2__ -# define GET_TLS_BODY \ - movw r0, #0x0fe0; \ - movt r0, #0xffff; \ - blx r0 -# else -# define GET_TLS_BODY \ - mov r0, #0xffff0fff; /* Point to the high page. */ \ - mov lr, pc; /* Save our return address. */ \ - sub pc, r0, #31 /* Jump to the TLS entry. */ -# endif - -/* Helper to get the TLS base pointer. Save LR in TMP, return in R0, - and no other registers clobbered. TMP may be LR itself to indicate - that no save is necessary. */ -# undef GET_TLS -# define GET_TLS(TMP) \ - .ifnc TMP, lr; \ - mov TMP, lr; \ - cfi_register (lr, TMP); \ - GET_TLS_BODY; \ - mov lr, TMP; \ - cfi_restore (lr); \ - .else; \ - GET_TLS_BODY; \ - .endif -#endif /* ARCH_HAS_HARD_TP */ - -/* Linux uses a negative return value to indicate syscall errors, - unlike most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be - negative even if the call succeeded. E.g., the `lseek' system call - might return a large offset. Therefore we must not anymore test - for < 0, but test for a real error by making sure the value in R0 - is a real error number. Linus said he will make sure the no syscall - returns a value in -1 .. -4095 as a valid result so we can safely - test with -4095. */ - -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name); \ - DO_CALL (syscall_name, args); \ - cmn r0, $4096; - -#define PSEUDO_RET \ - it cc; \ - RETINSTR(cc, lr); \ - b PLTJMP(SYSCALL_ERROR) -#undef ret -#define ret PSEUDO_RET - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - SYSCALL_ERROR_HANDLER; \ - END (name) - -#undef PSEUDO_NOERRNO -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - .text; \ - ENTRY (name); \ - DO_CALL (syscall_name, args); - -#define PSEUDO_RET_NOERRNO \ - DO_RET (lr); - -#undef ret_NOERRNO -#define ret_NOERRNO PSEUDO_RET_NOERRNO - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ - END (name) - -/* The function has to return the error code. */ -#undef PSEUDO_ERRVAL -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - rsb r0, r0, #0 - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) \ - END (name) - -#define ret_ERRVAL PSEUDO_RET_NOERRNO - -#if !IS_IN (libc) -# define SYSCALL_ERROR __local_syscall_error -# if RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_HANDLER \ -__local_syscall_error: \ - rsb r0, r0, #0; \ - LDST_PCREL(str, r0, r1, C_SYMBOL_NAME(rtld_errno)); \ - mvn r0, #0; \ - DO_RET(lr) -# else -# if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__) -# define POP_PC \ - pop { lr }; \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (lr); \ - bx lr -# else -# define POP_PC pop { pc } -# endif -# define SYSCALL_ERROR_HANDLER \ -__local_syscall_error: \ - push { lr }; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (lr, 0); \ - push { r0 }; \ - cfi_adjust_cfa_offset (4); \ - bl PLTJMP(C_SYMBOL_NAME(__errno_location)); \ - pop { r1 }; \ - cfi_adjust_cfa_offset (-4); \ - rsb r1, r1, #0; \ - str r1, [r0]; \ - mvn r0, #0; \ - POP_PC; -# endif -#else -# define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ -# define SYSCALL_ERROR __syscall_error -#endif - -/* The ARM EABI user interface passes the syscall number in r7, instead - of in the swi. This is more efficient, because the kernel does not need - to fetch the swi from memory to find out the number; which can be painful - with separate I-cache and D-cache. Make sure to use 0 for the SWI - argument; otherwise the (optional) compatibility code for APCS binaries - may be invoked. */ - -/* Linux takes system call args in registers: - arg 1 r0 - arg 2 r1 - arg 3 r2 - arg 4 r3 - arg 5 r4 (this is different from the APCS convention) - arg 6 r5 - arg 7 r6 - - The compiler is going to form a call by coming here, through PSEUDO, with - arguments - syscall number in the DO_CALL macro - arg 1 r0 - arg 2 r1 - arg 3 r2 - arg 4 r3 - arg 5 [sp] - arg 6 [sp+4] - arg 7 [sp+8] - - We need to shuffle values between R4..R6 and the stack so that the - caller's v1..v3 and stack frame are not corrupted, and the kernel - sees the right arguments. - -*/ - -/* We must save and restore r7 (call-saved) for the syscall number. - We never make function calls from inside here (only potentially - signal handlers), so we do not bother with doubleword alignment. - - Just like the APCS syscall convention, the EABI syscall convention uses - r0 through r6 for up to seven syscall arguments. None are ever passed to - the kernel on the stack, although incoming arguments are on the stack for - syscalls with five or more arguments. - - The assembler will convert the literal pool load to a move for most - syscalls. */ - -#undef DO_CALL -#define DO_CALL(syscall_name, args) \ - DOARGS_##args; \ - ldr r7, =SYS_ify (syscall_name); \ - swi 0x0; \ - UNDOARGS_##args - -#undef DOARGS_0 -#define DOARGS_0 \ - .fnstart; \ - push { r7 }; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (r7, 0); \ - .save { r7 } -#undef DOARGS_1 -#define DOARGS_1 DOARGS_0 -#undef DOARGS_2 -#define DOARGS_2 DOARGS_0 -#undef DOARGS_3 -#define DOARGS_3 DOARGS_0 -#undef DOARGS_4 -#define DOARGS_4 DOARGS_0 -#undef DOARGS_5 -#define DOARGS_5 \ - .fnstart; \ - push {r4, r7}; \ - cfi_adjust_cfa_offset (8); \ - cfi_rel_offset (r4, 0); \ - cfi_rel_offset (r7, 4); \ - .save { r4, r7 }; \ - ldr r4, [sp, #8] -#undef DOARGS_6 -#define DOARGS_6 \ - .fnstart; \ - mov ip, sp; \ - push {r4, r5, r7}; \ - cfi_adjust_cfa_offset (12); \ - cfi_rel_offset (r4, 0); \ - cfi_rel_offset (r5, 4); \ - cfi_rel_offset (r7, 8); \ - .save { r4, r5, r7 }; \ - ldmia ip, {r4, r5} -#undef DOARGS_7 -#define DOARGS_7 \ - .fnstart; \ - mov ip, sp; \ - push {r4, r5, r6, r7}; \ - cfi_adjust_cfa_offset (16); \ - cfi_rel_offset (r4, 0); \ - cfi_rel_offset (r5, 4); \ - cfi_rel_offset (r6, 8); \ - cfi_rel_offset (r7, 12); \ - .save { r4, r5, r6, r7 }; \ - ldmia ip, {r4, r5, r6} - -#undef UNDOARGS_0 -#define UNDOARGS_0 \ - pop {r7}; \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (r7); \ - .fnend -#undef UNDOARGS_1 -#define UNDOARGS_1 UNDOARGS_0 -#undef UNDOARGS_2 -#define UNDOARGS_2 UNDOARGS_0 -#undef UNDOARGS_3 -#define UNDOARGS_3 UNDOARGS_0 -#undef UNDOARGS_4 -#define UNDOARGS_4 UNDOARGS_0 -#undef UNDOARGS_5 -#define UNDOARGS_5 \ - pop {r4, r7}; \ - cfi_adjust_cfa_offset (-8); \ - cfi_restore (r4); \ - cfi_restore (r7); \ - .fnend -#undef UNDOARGS_6 -#define UNDOARGS_6 \ - pop {r4, r5, r7}; \ - cfi_adjust_cfa_offset (-12); \ - cfi_restore (r4); \ - cfi_restore (r5); \ - cfi_restore (r7); \ - .fnend -#undef UNDOARGS_7 -#define UNDOARGS_7 \ - pop {r4, r5, r6, r7}; \ - cfi_adjust_cfa_offset (-16); \ - cfi_restore (r4); \ - cfi_restore (r5); \ - cfi_restore (r6); \ - cfi_restore (r7); \ - .fnend - -#else /* not __ASSEMBLER__ */ - -/* Define a macro which expands into the inline wrapper code for a system - call. */ -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - ({ unsigned int _sys_result = INTERNAL_SYSCALL (name, , nr, args); \ - if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_sys_result, ), 0)) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (_sys_result, )); \ - _sys_result = (unsigned int) -1; \ - } \ - (int) _sys_result; }) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) do { } while (0) - -#if defined(__thumb__) -/* We can not expose the use of r7 to the compiler. GCC (as - of 4.5) uses r7 as the hard frame pointer for Thumb - although - for Thumb-2 it isn't obviously a better choice than r11. - And GCC does not support asms that conflict with the frame - pointer. - - This would be easier if syscall numbers never exceeded 255, - but they do. For the moment the LOAD_ARGS_7 is sacrificed. - We can't use push/pop inside the asm because that breaks - unwinding (i.e. thread cancellation) for this frame. We can't - locally save and restore r7, because we do not know if this - function uses r7 or if it is our caller's r7; if it is our caller's, - then unwinding will fail higher up the stack. So we move the - syscall out of line and provide its own unwind information. */ -# undef INTERNAL_SYSCALL_RAW -# define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ - ({ \ - register int _a1 asm ("a1"); \ - int _nametmp = name; \ - LOAD_ARGS_##nr (args) \ - register int _name asm ("ip") = _nametmp; \ - asm volatile ("bl __libc_do_syscall" \ - : "=r" (_a1) \ - : "r" (_name) ASM_ARGS_##nr \ - : "memory", "lr"); \ - _a1; }) -#else /* ARM */ -# undef INTERNAL_SYSCALL_RAW -# define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ - ({ \ - register int _a1 asm ("r0"), _nr asm ("r7"); \ - LOAD_ARGS_##nr (args) \ - _nr = name; \ - asm volatile ("swi 0x0 @ syscall " #name \ - : "=r" (_a1) \ - : "r" (_nr) ASM_ARGS_##nr \ - : "memory"); \ - _a1; }) -#endif - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - INTERNAL_SYSCALL_RAW(SYS_ify(name), err, nr, args) - -#undef INTERNAL_SYSCALL_ARM -#define INTERNAL_SYSCALL_ARM(name, err, nr, args...) \ - INTERNAL_SYSCALL_RAW(__ARM_NR_##name, err, nr, args) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((unsigned int) (val) >= 0xfffff001u) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) - -/* List of system calls which are supported as vsyscalls. */ -#define HAVE_CLOCK_GETTIME_VSYSCALL 1 -#define HAVE_GETTIMEOFDAY_VSYSCALL 1 - -#define LOAD_ARGS_0() -#define ASM_ARGS_0 -#define LOAD_ARGS_1(a1) \ - int _a1tmp = (int) (a1); \ - LOAD_ARGS_0 () \ - _a1 = _a1tmp; -#define ASM_ARGS_1 ASM_ARGS_0, "r" (_a1) -#define LOAD_ARGS_2(a1, a2) \ - int _a2tmp = (int) (a2); \ - LOAD_ARGS_1 (a1) \ - register int _a2 asm ("a2") = _a2tmp; -#define ASM_ARGS_2 ASM_ARGS_1, "r" (_a2) -#define LOAD_ARGS_3(a1, a2, a3) \ - int _a3tmp = (int) (a3); \ - LOAD_ARGS_2 (a1, a2) \ - register int _a3 asm ("a3") = _a3tmp; -#define ASM_ARGS_3 ASM_ARGS_2, "r" (_a3) -#define LOAD_ARGS_4(a1, a2, a3, a4) \ - int _a4tmp = (int) (a4); \ - LOAD_ARGS_3 (a1, a2, a3) \ - register int _a4 asm ("a4") = _a4tmp; -#define ASM_ARGS_4 ASM_ARGS_3, "r" (_a4) -#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ - int _v1tmp = (int) (a5); \ - LOAD_ARGS_4 (a1, a2, a3, a4) \ - register int _v1 asm ("v1") = _v1tmp; -#define ASM_ARGS_5 ASM_ARGS_4, "r" (_v1) -#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ - int _v2tmp = (int) (a6); \ - LOAD_ARGS_5 (a1, a2, a3, a4, a5) \ - register int _v2 asm ("v2") = _v2tmp; -#define ASM_ARGS_6 ASM_ARGS_5, "r" (_v2) -#ifndef __thumb__ -# define LOAD_ARGS_7(a1, a2, a3, a4, a5, a6, a7) \ - int _v3tmp = (int) (a7); \ - LOAD_ARGS_6 (a1, a2, a3, a4, a5, a6) \ - register int _v3 asm ("v3") = _v3tmp; -# define ASM_ARGS_7 ASM_ARGS_6, "r" (_v3) -#endif - -/* For EABI, non-constant syscalls are actually pretty easy... */ -#undef INTERNAL_SYSCALL_NCS -#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ - INTERNAL_SYSCALL_RAW (number, err, nr, args) - -#endif /* __ASSEMBLER__ */ - -#endif /* linux/arm/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/arm/tls.h b/sysdeps/unix/sysv/linux/arm/tls.h deleted file mode 100644 index 60f503081f..0000000000 --- a/sysdeps/unix/sysv/linux/arm/tls.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Definition for thread-local data handling. ARM/Linux version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINUX_ARM_TLS_H -#define _LINUX_ARM_TLS_H 1 - -/* Almost everything is OS-independent and common for all NPTL on ARM. */ -#include - -#ifndef __ASSEMBLER__ - -/* Get system call information. */ -# include - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(tcbp) \ - ({ INTERNAL_SYSCALL_DECL (err); \ - long int result_var; \ - result_var = INTERNAL_SYSCALL_ARM (set_tls, err, 1, (tcbp)); \ - INTERNAL_SYSCALL_ERROR_P (result_var, err) \ - ? "unknown error" : NULL; }) - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/unix/sysv/linux/arm/ucontext_i.sym b/sysdeps/unix/sysv/linux/arm/ucontext_i.sym deleted file mode 100644 index 306292f1f8..0000000000 --- a/sysdeps/unix/sysv/linux/arm/ucontext_i.sym +++ /dev/null @@ -1,30 +0,0 @@ -#include -#include -#include -#include - -SIG_BLOCK -SIG_SETMASK - --- Offsets of the fields in the ucontext_t structure. -#define ucontext(member) offsetof (ucontext_t, member) -#define mcontext(member) ucontext (uc_mcontext.member) - -UCONTEXT_FLAGS ucontext (uc_flags) -UCONTEXT_LINK ucontext (uc_link) -UCONTEXT_STACK ucontext (uc_stack) -UCONTEXT_MCONTEXT ucontext (uc_mcontext) -UCONTEXT_SIGMASK ucontext (uc_sigmask) - -UCONTEXT_REGSPACE ucontext (uc_regspace) - -MCONTEXT_TRAP_NO mcontext (trap_no) -MCONTEXT_ERROR_CODE mcontext (error_code) -MCONTEXT_OLDMASK mcontext (oldmask) -MCONTEXT_ARM_R0 mcontext (arm_r0) -MCONTEXT_ARM_R4 mcontext (arm_r4) -MCONTEXT_ARM_SP mcontext (arm_sp) -MCONTEXT_ARM_LR mcontext (arm_lr) -MCONTEXT_ARM_PC mcontext (arm_pc) -MCONTEXT_ARM_CPSR mcontext (arm_cpsr) -MCONTEXT_FAULT_ADDRESS mcontext (fault_address) diff --git a/sysdeps/unix/sysv/linux/arm/umount.c b/sysdeps/unix/sysv/linux/arm/umount.c deleted file mode 100644 index 64487c7819..0000000000 --- a/sysdeps/unix/sysv/linux/arm/umount.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Since we don't have an oldumount system call, do what the kernel - does down here. */ - -extern long int __umount2 (const char *name, int flags); - -long int -__umount (const char *name) -{ - return __umount2 (name, 0); -} - -weak_alias (__umount, umount); diff --git a/sysdeps/unix/sysv/linux/arm/versionsort64.c b/sysdeps/unix/sysv/linux/arm/versionsort64.c deleted file mode 100644 index 144b691e56..0000000000 --- a/sysdeps/unix/sysv/linux/arm/versionsort64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/arm/vfork.S b/sysdeps/unix/sysv/linux/arm/vfork.S deleted file mode 100644 index e3666ea501..0000000000 --- a/sysdeps/unix/sysv/linux/arm/vfork.S +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#define _ERRNO_H 1 -#include -#include - - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__vfork) - /* The DO_CALL macro saves r7 on the stack, to enable generation - of ARM unwind info. Since the stack is initially shared between - parent and child of vfork, that saved value could be corrupted. - To avoid this problem, we save r7 into ip as well, and restore - from there. */ - mov ip, r7 - cfi_register (r7, ip) - .fnstart - push { r7 } - cfi_adjust_cfa_offset (4) - .save { r7 } - ldr r7, =SYS_ify (vfork) - swi 0x0 - .fnend - add sp, sp, #4 - cfi_adjust_cfa_offset (-4) - mov r7, ip - cfi_restore (r7) - - cmn a1, #4096 - it cc - RETINSTR(cc, lr) - - b PLTJMP(SYSCALL_ERROR) -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) - -weak_alias (__vfork, vfork) -strong_alias (__vfork, __libc_vfork) diff --git a/sysdeps/unix/sysv/linux/arm/xstat.c b/sysdeps/unix/sysv/linux/arm/xstat.c deleted file mode 100644 index e9869f5508..0000000000 --- a/sysdeps/unix/sysv/linux/arm/xstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/bind.c b/sysdeps/unix/sysv/linux/bind.c deleted file mode 100644 index b747f5e2f1..0000000000 --- a/sysdeps/unix/sysv/linux/bind.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include -#include - -int -__bind (int fd, __CONST_SOCKADDR_ARG addr, socklen_t len) -{ -#ifdef __ASSUME_BIND_SYSCALL - return INLINE_SYSCALL (bind, 3, fd, addr.__sockaddr__, len); -#else - return SOCKETCALL (bind, fd, addr.__sockaddr__, len, 0, 0, 0); -#endif -} -weak_alias (__bind, bind) diff --git a/sysdeps/unix/sysv/linux/bits/a.out.h b/sysdeps/unix/sysv/linux/bits/a.out.h deleted file mode 100644 index 0e7fb030fc..0000000000 --- a/sysdeps/unix/sysv/linux/bits/a.out.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __A_OUT_GNU_H__ -# error "Never use directly; include instead." -#endif - -/* Signal to users of this header that this architecture really doesn't - support a.out binary format. */ -#define __NO_A_OUT_SUPPORT 1 diff --git a/sysdeps/unix/sysv/linux/bits/dirent.h b/sysdeps/unix/sysv/linux/bits/dirent.h deleted file mode 100644 index a681f55bfd..0000000000 --- a/sysdeps/unix/sysv/linux/bits/dirent.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DIRENT_H -# error "Never use directly; include instead." -#endif - -struct dirent - { -#ifndef __USE_FILE_OFFSET64 - __ino_t d_ino; - __off_t d_off; -#else - __ino64_t d_ino; - __off64_t d_off; -#endif - unsigned short int d_reclen; - unsigned char d_type; - char d_name[256]; /* We must not include limits.h! */ - }; - -#ifdef __USE_LARGEFILE64 -struct dirent64 - { - __ino64_t d_ino; - __off64_t d_off; - unsigned short int d_reclen; - unsigned char d_type; - char d_name[256]; /* We must not include limits.h! */ - }; -#endif - -#define d_fileno d_ino /* Backwards compatibility. */ - -#undef _DIRENT_HAVE_D_NAMLEN -#define _DIRENT_HAVE_D_RECLEN -#define _DIRENT_HAVE_D_OFF -#define _DIRENT_HAVE_D_TYPE - -#if defined __OFF_T_MATCHES_OFF64_T && defined __INO_T_MATCHES_INO64_T -/* Inform libc code that these two types are effectively identical. */ -# define _DIRENT_MATCHES_DIRENT64 1 -#endif diff --git a/sysdeps/unix/sysv/linux/bits/epoll.h b/sysdeps/unix/sysv/linux/bits/epoll.h deleted file mode 100644 index 904e9c3e1a..0000000000 --- a/sysdeps/unix/sysv/linux/bits/epoll.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_EPOLL_H -# error "Never use directly; include instead." -#endif - -/* Flags to be passed to epoll_create1. */ -enum - { - EPOLL_CLOEXEC = 02000000 -#define EPOLL_CLOEXEC EPOLL_CLOEXEC - }; diff --git a/sysdeps/unix/sysv/linux/bits/errno.h b/sysdeps/unix/sysv/linux/bits/errno.h deleted file mode 100644 index c0f4d20fe7..0000000000 --- a/sysdeps/unix/sysv/linux/bits/errno.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Error constants. Linux specific version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef _ERRNO_H - -# undef EDOM -# undef EILSEQ -# undef ERANGE -# include - -/* Linux has no ENOTSUP error code. */ -# define ENOTSUP EOPNOTSUPP - -/* Older Linux versions also had no ECANCELED error code. */ -# ifndef ECANCELED -# define ECANCELED 125 -# endif - -/* Support for error codes to support robust mutexes was added later, too. */ -# ifndef EOWNERDEAD -# define EOWNERDEAD 130 -# define ENOTRECOVERABLE 131 -# endif - -# ifndef ERFKILL -# define ERFKILL 132 -# endif - -# ifndef EHWPOISON -# define EHWPOISON 133 -# endif - -# ifndef __ASSEMBLER__ -/* Function to get address of global `errno' variable. */ -extern int *__errno_location (void) __THROW __attribute__ ((__const__)); - -# if !defined _LIBC || defined _LIBC_REENTRANT -/* When using threads, errno is a per-thread value. */ -# define errno (*__errno_location ()) -# endif -# endif /* !__ASSEMBLER__ */ -#endif /* _ERRNO_H */ - -#if !defined _ERRNO_H && defined __need_Emath -/* This is ugly but the kernel header is not clean enough. We must - define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is - defined. */ -# define EDOM 33 /* Math argument out of domain of function. */ -# define EILSEQ 84 /* Illegal byte sequence. */ -# define ERANGE 34 /* Math result not representable. */ -#endif /* !_ERRNO_H && __need_Emath */ diff --git a/sysdeps/unix/sysv/linux/bits/eventfd.h b/sysdeps/unix/sysv/linux/bits/eventfd.h deleted file mode 100644 index 9720712a09..0000000000 --- a/sysdeps/unix/sysv/linux/bits/eventfd.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_EVENTFD_H -# error "Never use directly; include instead." -#endif - -/* Flags for eventfd. */ -enum - { - EFD_SEMAPHORE = 00000001, -#define EFD_SEMAPHORE EFD_SEMAPHORE - EFD_CLOEXEC = 02000000, -#define EFD_CLOEXEC EFD_CLOEXEC - EFD_NONBLOCK = 00004000 -#define EFD_NONBLOCK EFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/bits/fcntl-linux.h b/sysdeps/unix/sysv/linux/bits/fcntl-linux.h deleted file mode 100644 index 59d663196a..0000000000 --- a/sysdeps/unix/sysv/linux/bits/fcntl-linux.h +++ /dev/null @@ -1,411 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -/* This file contains shared definitions between Linux architectures - and is included by to declare them. The various - #ifndef cases allow the architecture specific file to define those - values with different values. - - A minimal contains just: - - struct flock {...} - #ifdef __USE_LARGEFILE64 - struct flock64 {...} - #endif - #include -*/ - -#ifdef __USE_GNU -# include -#endif - -/* open/fcntl. */ -#define O_ACCMODE 0003 -#define O_RDONLY 00 -#define O_WRONLY 01 -#define O_RDWR 02 -#ifndef O_CREAT -# define O_CREAT 0100 /* Not fcntl. */ -#endif -#ifndef O_EXCL -# define O_EXCL 0200 /* Not fcntl. */ -#endif -#ifndef O_NOCTTY -# define O_NOCTTY 0400 /* Not fcntl. */ -#endif -#ifndef O_TRUNC -# define O_TRUNC 01000 /* Not fcntl. */ -#endif -#ifndef O_APPEND -# define O_APPEND 02000 -#endif -#ifndef O_NONBLOCK -# define O_NONBLOCK 04000 -#endif -#ifndef O_NDELAY -# define O_NDELAY O_NONBLOCK -#endif -#ifndef O_SYNC -# define O_SYNC 04010000 -#endif -#define O_FSYNC O_SYNC -#ifndef O_ASYNC -# define O_ASYNC 020000 -#endif -#ifndef __O_LARGEFILE -# define __O_LARGEFILE 0100000 -#endif - -#ifndef __O_DIRECTORY -# define __O_DIRECTORY 0200000 -#endif -#ifndef __O_NOFOLLOW -# define __O_NOFOLLOW 0400000 -#endif -#ifndef __O_CLOEXEC -# define __O_CLOEXEC 02000000 -#endif -#ifndef __O_DIRECT -# define __O_DIRECT 040000 -#endif -#ifndef __O_NOATIME -# define __O_NOATIME 01000000 -#endif -#ifndef __O_PATH -# define __O_PATH 010000000 -#endif -#ifndef __O_DSYNC -# define __O_DSYNC 010000 -#endif -#ifndef __O_TMPFILE -# define __O_TMPFILE (020000000 | __O_DIRECTORY) -#endif - -#ifndef F_GETLK -# ifndef __USE_FILE_OFFSET64 -# define F_GETLK 5 /* Get record locking info. */ -# define F_SETLK 6 /* Set record locking info (non-blocking). */ -# define F_SETLKW 7 /* Set record locking info (blocking). */ -# else -# define F_GETLK F_GETLK64 /* Get record locking info. */ -# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/ -# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */ -# endif -#endif -#ifndef F_GETLK64 -# define F_GETLK64 12 /* Get record locking info. */ -# define F_SETLK64 13 /* Set record locking info (non-blocking). */ -# define F_SETLKW64 14 /* Set record locking info (blocking). */ -#endif - -/* open file description locks. - - Usually record locks held by a process are released on *any* close and are - not inherited across a fork. - - These cmd values will set locks that conflict with process-associated record - locks, but are "owned" by the opened file description, not the process. - This means that they are inherited across fork or clone with CLONE_FILES - like BSD (flock) locks, and they are only released automatically when the - last reference to the the file description against which they were acquired - is put. */ -#ifdef __USE_GNU -# define F_OFD_GETLK 36 -# define F_OFD_SETLK 37 -# define F_OFD_SETLKW 38 -#endif - -#ifdef __USE_LARGEFILE64 -# define O_LARGEFILE __O_LARGEFILE -#endif - -#ifdef __USE_XOPEN2K8 -# define O_DIRECTORY __O_DIRECTORY /* Must be a directory. */ -# define O_NOFOLLOW __O_NOFOLLOW /* Do not follow links. */ -# define O_CLOEXEC __O_CLOEXEC /* Set close_on_exec. */ -#endif - -#ifdef __USE_GNU -# define O_DIRECT __O_DIRECT /* Direct disk access. */ -# define O_NOATIME __O_NOATIME /* Do not set atime. */ -# define O_PATH __O_PATH /* Resolve pathname but do not open file. */ -# define O_TMPFILE __O_TMPFILE /* Atomically create nameless file. */ -#endif - -/* For now, Linux has no separate synchronicitiy options for read - operations. We define O_RSYNC therefore as the same as O_SYNC - since this is a superset. */ -#if defined __USE_POSIX199309 || defined __USE_UNIX98 -# define O_DSYNC __O_DSYNC /* Synchronize data. */ -# if defined __O_RSYNC -# define O_RSYNC __O_RSYNC /* Synchronize read operations. */ -# else -# define O_RSYNC O_SYNC /* Synchronize read operations. */ -# endif -#endif - -/* Values for the second argument to `fcntl'. */ -#define F_DUPFD 0 /* Duplicate file descriptor. */ -#define F_GETFD 1 /* Get file descriptor flags. */ -#define F_SETFD 2 /* Set file descriptor flags. */ -#define F_GETFL 3 /* Get file status flags. */ -#define F_SETFL 4 /* Set file status flags. */ - -#ifndef __F_SETOWN -# define __F_SETOWN 8 -# define __F_GETOWN 9 -#endif - -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 -# define F_SETOWN __F_SETOWN /* Get owner (process receiving SIGIO). */ -# define F_GETOWN __F_GETOWN /* Set owner (process receiving SIGIO). */ -#endif - -#ifndef __F_SETSIG -# define __F_SETSIG 10 /* Set number of signal to be sent. */ -# define __F_GETSIG 11 /* Get number of signal to be sent. */ -#endif -#ifndef __F_SETOWN_EX -# define __F_SETOWN_EX 15 /* Get owner (thread receiving SIGIO). */ -# define __F_GETOWN_EX 16 /* Set owner (thread receiving SIGIO). */ -#endif - -#ifdef __USE_GNU -# define F_SETSIG __F_SETSIG /* Set number of signal to be sent. */ -# define F_GETSIG __F_GETSIG /* Get number of signal to be sent. */ -# define F_SETOWN_EX __F_SETOWN_EX /* Get owner (thread receiving SIGIO). */ -# define F_GETOWN_EX __F_GETOWN_EX /* Set owner (thread receiving SIGIO). */ -#endif - -#ifdef __USE_GNU -# define F_SETLEASE 1024 /* Set a lease. */ -# define F_GETLEASE 1025 /* Enquire what lease is active. */ -# define F_NOTIFY 1026 /* Request notifications on a directory. */ -# define F_SETPIPE_SZ 1031 /* Set pipe page size array. */ -# define F_GETPIPE_SZ 1032 /* Set pipe page size array. */ -#endif -#ifdef __USE_XOPEN2K8 -# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with - close-on-exit set. */ -#endif - -/* For F_[GET|SET]FD. */ -#define FD_CLOEXEC 1 /* Actually anything with low bit set goes */ - -#ifndef F_RDLCK -/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ -# define F_RDLCK 0 /* Read lock. */ -# define F_WRLCK 1 /* Write lock. */ -# define F_UNLCK 2 /* Remove lock. */ -#endif - - -/* For old implementation of BSD flock. */ -#ifndef F_EXLCK -# define F_EXLCK 4 /* or 3 */ -# define F_SHLCK 8 /* or 4 */ -#endif - -#ifdef __USE_MISC -/* Operations for BSD flock, also used by the kernel implementation. */ -# define LOCK_SH 1 /* Shared lock. */ -# define LOCK_EX 2 /* Exclusive lock. */ -# define LOCK_NB 4 /* Or'd with one of the above to prevent - blocking. */ -# define LOCK_UN 8 /* Remove lock. */ -#endif - -#ifdef __USE_GNU -# define LOCK_MAND 32 /* This is a mandatory flock: */ -# define LOCK_READ 64 /* ... which allows concurrent read operations. */ -# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */ -# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */ -#endif - -#ifdef __USE_GNU -/* Types of directory notifications that may be requested with F_NOTIFY. */ -# define DN_ACCESS 0x00000001 /* File accessed. */ -# define DN_MODIFY 0x00000002 /* File modified. */ -# define DN_CREATE 0x00000004 /* File created. */ -# define DN_DELETE 0x00000008 /* File removed. */ -# define DN_RENAME 0x00000010 /* File renamed. */ -# define DN_ATTRIB 0x00000020 /* File changed attributes. */ -# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ -#endif - - -#ifdef __USE_GNU -/* Owner types. */ -enum __pid_type - { - F_OWNER_TID = 0, /* Kernel thread. */ - F_OWNER_PID, /* Process. */ - F_OWNER_PGRP, /* Process group. */ - F_OWNER_GID = F_OWNER_PGRP /* Alternative, obsolete name. */ - }; - -/* Structure to use with F_GETOWN_EX and F_SETOWN_EX. */ -struct f_owner_ex - { - enum __pid_type type; /* Owner type of ID. */ - __pid_t pid; /* ID of owner. */ - }; -#endif - -/* Define some more compatibility macros to be backward compatible with - BSD systems which did not managed to hide these kernel macros. */ -#ifdef __USE_MISC -# define FAPPEND O_APPEND -# define FFSYNC O_FSYNC -# define FASYNC O_ASYNC -# define FNONBLOCK O_NONBLOCK -# define FNDELAY O_NDELAY -#endif /* Use misc. */ - -#ifndef __POSIX_FADV_DONTNEED -# define __POSIX_FADV_DONTNEED 4 -# define __POSIX_FADV_NOREUSE 5 -#endif -/* Advise to `posix_fadvise'. */ -#ifdef __USE_XOPEN2K -# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ -# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ -# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ -# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ -# define POSIX_FADV_DONTNEED __POSIX_FADV_DONTNEED /* Don't need these pages. */ -# define POSIX_FADV_NOREUSE __POSIX_FADV_NOREUSE /* Data will be accessed once. */ -#endif - - -#ifdef __USE_GNU -/* Flags for SYNC_FILE_RANGE. */ -# define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages - in the range before performing the - write. */ -# define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those - dirty pages in the range which are - not presently under writeback. */ -# define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in - the range after performing the - write. */ - -/* Flags for SPLICE and VMSPLICE. */ -# define SPLICE_F_MOVE 1 /* Move pages instead of copying. */ -# define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing - (but we may still block on the fd - we splice from/to). */ -# define SPLICE_F_MORE 4 /* Expect more data. */ -# define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ - - -/* Flags for fallocate. */ -# include - - -/* File handle structure. */ -struct file_handle -{ - unsigned int handle_bytes; - int handle_type; - /* File identifier. */ - unsigned char f_handle[0]; -}; - -/* Maximum handle size (for now). */ -# define MAX_HANDLE_SZ 128 -#endif - -__BEGIN_DECLS - -#ifdef __USE_GNU - -/* Provide kernel hint to read ahead. */ -extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) - __THROW; - - -/* Selective file content synch'ing. - - This function is a possible cancellation point and therefore not - marked with __THROW. */ -extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, - unsigned int __flags); - - -/* Splice address range into a pipe. - - This function is a possible cancellation point and therefore not - marked with __THROW. */ -extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, - size_t __count, unsigned int __flags); - -/* Splice two files together. - - This function is a possible cancellation point and therefore not - marked with __THROW. */ -extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, - __off64_t *__offout, size_t __len, - unsigned int __flags); - -/* In-kernel implementation of tee for pipe buffers. - - This function is a possible cancellation point and therefore not - marked with __THROW. */ -extern ssize_t tee (int __fdin, int __fdout, size_t __len, - unsigned int __flags); - -/* Reserve storage for the data of the file associated with FD. - - This function is a possible cancellation point and therefore not - marked with __THROW. */ -# ifndef __USE_FILE_OFFSET64 -extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); -# else -# ifdef __REDIRECT -extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset, - __off64_t __len), - fallocate64); -# else -# define fallocate fallocate64 -# endif -# endif -# ifdef __USE_LARGEFILE64 -extern int fallocate64 (int __fd, int __mode, __off64_t __offset, - __off64_t __len); -# endif - - -/* Map file name to file handle. */ -extern int name_to_handle_at (int __dfd, const char *__name, - struct file_handle *__handle, int *__mnt_id, - int __flags) __THROW; - -/* Open file using the file handle. - - This function is a possible cancellation point and therefore not - marked with __THROW. */ -extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, - int __flags); - -#endif /* use GNU */ - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/bits/fcntl.h b/sysdeps/unix/sysv/linux/bits/fcntl.h deleted file mode 100644 index be40350e82..0000000000 --- a/sysdeps/unix/sysv/linux/bits/fcntl.h +++ /dev/null @@ -1,3 +0,0 @@ -/* bits/fcntl.h is architecture specific. */ -#error "This file must be supplied by every Linux architecture." - diff --git a/sysdeps/unix/sysv/linux/bits/in.h b/sysdeps/unix/sysv/linux/bits/in.h deleted file mode 100644 index 377732b9fe..0000000000 --- a/sysdeps/unix/sysv/linux/bits/in.h +++ /dev/null @@ -1,256 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Linux version. */ - -#ifndef _NETINET_IN_H -# error "Never use directly; include instead." -#endif - -/* If the application has already included linux/in6.h from a linux-based - kernel then we will not define the IPv6 IPPROTO_* defines, in6_addr (nor the - defines), sockaddr_in6, or ipv6_mreq. Same for in6_ptkinfo or ip6_mtuinfo - in linux/ipv6.h. The ABI used by the linux-kernel and glibc match exactly. - Neither the linux kernel nor glibc should break this ABI without coordination. - In upstream kernel 56c176c9 the _UAPI prefix was stripped so we need to check - for _LINUX_IN6_H and _IPV6_H now, and keep checking the old versions for - maximum backwards compatibility. */ -#if defined _UAPI_LINUX_IN6_H \ - || defined _UAPI_IPV6_H \ - || defined _LINUX_IN6_H \ - || defined _IPV6_H -/* This is not quite the same API since the kernel always defines s6_addr16 and - s6_addr32. This is not a violation of POSIX since POSIX says "at least the - following member" and that holds true. */ -# define __USE_KERNEL_IPV6_DEFS 1 -#else -# define __USE_KERNEL_IPV6_DEFS 0 -#endif - -/* Options for use with `getsockopt' and `setsockopt' at the IP level. - The first word in the comment at the right is the data type used; - "bool" means a boolean value stored in an `int'. */ -#define IP_OPTIONS 4 /* ip_opts; IP per-packet options. */ -#define IP_HDRINCL 3 /* int; Header is included with data. */ -#define IP_TOS 1 /* int; IP type of service and precedence. */ -#define IP_TTL 2 /* int; IP time to live. */ -#define IP_RECVOPTS 6 /* bool; Receive all IP options w/datagram. */ -/* For BSD compatibility. */ -#define IP_RECVRETOPTS IP_RETOPTS /* bool; Receive IP options for response. */ -#define IP_RETOPTS 7 /* ip_opts; Set/get IP per-packet options. */ -#define IP_MULTICAST_IF 32 /* in_addr; set/get IP multicast i/f */ -#define IP_MULTICAST_TTL 33 /* unsigned char; set/get IP multicast ttl */ -#define IP_MULTICAST_LOOP 34 /* bool; set/get IP multicast loopback */ -#define IP_ADD_MEMBERSHIP 35 /* ip_mreq; add an IP group membership */ -#define IP_DROP_MEMBERSHIP 36 /* ip_mreq; drop an IP group membership */ -#define IP_UNBLOCK_SOURCE 37 /* ip_mreq_source: unblock data from source */ -#define IP_BLOCK_SOURCE 38 /* ip_mreq_source: block data from source */ -#define IP_ADD_SOURCE_MEMBERSHIP 39 /* ip_mreq_source: join source group */ -#define IP_DROP_SOURCE_MEMBERSHIP 40 /* ip_mreq_source: leave source group */ -#define IP_MSFILTER 41 -#ifdef __USE_MISC -# define MCAST_JOIN_GROUP 42 /* group_req: join any-source group */ -# define MCAST_BLOCK_SOURCE 43 /* group_source_req: block from given group */ -# define MCAST_UNBLOCK_SOURCE 44 /* group_source_req: unblock from given group*/ -# define MCAST_LEAVE_GROUP 45 /* group_req: leave any-source group */ -# define MCAST_JOIN_SOURCE_GROUP 46 /* group_source_req: join source-spec gr */ -# define MCAST_LEAVE_SOURCE_GROUP 47 /* group_source_req: leave source-spec gr*/ -# define MCAST_MSFILTER 48 -# define IP_MULTICAST_ALL 49 -# define IP_UNICAST_IF 50 - -# define MCAST_EXCLUDE 0 -# define MCAST_INCLUDE 1 -#endif - -#define IP_ROUTER_ALERT 5 /* bool */ -#define IP_PKTINFO 8 /* bool */ -#define IP_PKTOPTIONS 9 -#define IP_PMTUDISC 10 /* obsolete name? */ -#define IP_MTU_DISCOVER 10 /* int; see below */ -#define IP_RECVERR 11 /* bool */ -#define IP_RECVTTL 12 /* bool */ -#define IP_RECVTOS 13 /* bool */ -#define IP_MTU 14 /* int */ -#define IP_FREEBIND 15 -#define IP_IPSEC_POLICY 16 -#define IP_XFRM_POLICY 17 -#define IP_PASSSEC 18 -#define IP_TRANSPARENT 19 -#define IP_MULTICAST_ALL 49 /* bool */ - -/* TProxy original addresses */ -#define IP_ORIGDSTADDR 20 -#define IP_RECVORIGDSTADDR IP_ORIGDSTADDR - -#define IP_MINTTL 21 -#define IP_NODEFRAG 22 -#define IP_CHECKSUM 23 -#define IP_BIND_ADDRESS_NO_PORT 24 -#define IP_RECVFRAGSIZE 25 - -/* IP_MTU_DISCOVER arguments. */ -#define IP_PMTUDISC_DONT 0 /* Never send DF frames. */ -#define IP_PMTUDISC_WANT 1 /* Use per route hints. */ -#define IP_PMTUDISC_DO 2 /* Always DF. */ -#define IP_PMTUDISC_PROBE 3 /* Ignore dst pmtu. */ -/* Always use interface mtu (ignores dst pmtu) but don't set DF flag. - Also incoming ICMP frag_needed notifications will be ignored on - this socket to prevent accepting spoofed ones. */ -#define IP_PMTUDISC_INTERFACE 4 -/* Like IP_PMTUDISC_INTERFACE but allow packets to be fragmented. */ -#define IP_PMTUDISC_OMIT 5 - -#define IP_MULTICAST_IF 32 -#define IP_MULTICAST_TTL 33 -#define IP_MULTICAST_LOOP 34 -#define IP_ADD_MEMBERSHIP 35 -#define IP_DROP_MEMBERSHIP 36 -#define IP_UNBLOCK_SOURCE 37 -#define IP_BLOCK_SOURCE 38 -#define IP_ADD_SOURCE_MEMBERSHIP 39 -#define IP_DROP_SOURCE_MEMBERSHIP 40 -#define IP_MSFILTER 41 -#define IP_MULTICAST_ALL 49 -#define IP_UNICAST_IF 50 - -/* To select the IP level. */ -#define SOL_IP 0 - -#define IP_DEFAULT_MULTICAST_TTL 1 -#define IP_DEFAULT_MULTICAST_LOOP 1 -#define IP_MAX_MEMBERSHIPS 20 - -#ifdef __USE_MISC -/* Structure used to describe IP options for IP_OPTIONS and IP_RETOPTS. - The `ip_dst' field is used for the first-hop gateway when using a - source route (this gets put into the header proper). */ -struct ip_opts - { - struct in_addr ip_dst; /* First hop; zero without source route. */ - char ip_opts[40]; /* Actually variable in size. */ - }; - -/* Like `struct ip_mreq' but including interface specification by index. */ -struct ip_mreqn - { - struct in_addr imr_multiaddr; /* IP multicast address of group */ - struct in_addr imr_address; /* local IP address of interface */ - int imr_ifindex; /* Interface index */ - }; - -/* Structure used for IP_PKTINFO. */ -struct in_pktinfo - { - int ipi_ifindex; /* Interface index */ - struct in_addr ipi_spec_dst; /* Routing destination address */ - struct in_addr ipi_addr; /* Header destination address */ - }; -#endif - -/* Options for use with `getsockopt' and `setsockopt' at the IPv6 level. - The first word in the comment at the right is the data type used; - "bool" means a boolean value stored in an `int'. */ -#define IPV6_ADDRFORM 1 -#define IPV6_2292PKTINFO 2 -#define IPV6_2292HOPOPTS 3 -#define IPV6_2292DSTOPTS 4 -#define IPV6_2292RTHDR 5 -#define IPV6_2292PKTOPTIONS 6 -#define IPV6_CHECKSUM 7 -#define IPV6_2292HOPLIMIT 8 - -#define SCM_SRCRT IPV6_RXSRCRT - -#define IPV6_NEXTHOP 9 -#define IPV6_AUTHHDR 10 -#define IPV6_UNICAST_HOPS 16 -#define IPV6_MULTICAST_IF 17 -#define IPV6_MULTICAST_HOPS 18 -#define IPV6_MULTICAST_LOOP 19 -#define IPV6_JOIN_GROUP 20 -#define IPV6_LEAVE_GROUP 21 -#define IPV6_ROUTER_ALERT 22 -#define IPV6_MTU_DISCOVER 23 -#define IPV6_MTU 24 -#define IPV6_RECVERR 25 -#define IPV6_V6ONLY 26 -#define IPV6_JOIN_ANYCAST 27 -#define IPV6_LEAVE_ANYCAST 28 -#define IPV6_IPSEC_POLICY 34 -#define IPV6_XFRM_POLICY 35 -#define IPV6_HDRINCL 36 - -/* Advanced API (RFC3542) (1). */ -#define IPV6_RECVPKTINFO 49 -#define IPV6_PKTINFO 50 -#define IPV6_RECVHOPLIMIT 51 -#define IPV6_HOPLIMIT 52 -#define IPV6_RECVHOPOPTS 53 -#define IPV6_HOPOPTS 54 -#define IPV6_RTHDRDSTOPTS 55 -#define IPV6_RECVRTHDR 56 -#define IPV6_RTHDR 57 -#define IPV6_RECVDSTOPTS 58 -#define IPV6_DSTOPTS 59 -#define IPV6_RECVPATHMTU 60 -#define IPV6_PATHMTU 61 -#define IPV6_DONTFRAG 62 - -/* Advanced API (RFC3542) (2). */ -#define IPV6_RECVTCLASS 66 -#define IPV6_TCLASS 67 - -#define IPV6_AUTOFLOWLABEL 70 - -/* RFC5014. */ -#define IPV6_ADDR_PREFERENCES 72 - -/* RFC5082. */ -#define IPV6_MINHOPCOUNT 73 - -#define IPV6_ORIGDSTADDR 74 -#define IPV6_RECVORIGDSTADDR IPV6_ORIGDSTADDR -#define IPV6_TRANSPARENT 75 -#define IPV6_UNICAST_IF 76 -#define IPV6_RECVFRAGSIZE 77 - -/* Obsolete synonyms for the above. */ -#if !__USE_KERNEL_IPV6_DEFS -# define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP -# define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP -#endif -#define IPV6_RXHOPOPTS IPV6_HOPOPTS -#define IPV6_RXDSTOPTS IPV6_DSTOPTS - -/* IPV6_MTU_DISCOVER values. */ -#define IPV6_PMTUDISC_DONT 0 /* Never send DF frames. */ -#define IPV6_PMTUDISC_WANT 1 /* Use per route hints. */ -#define IPV6_PMTUDISC_DO 2 /* Always DF. */ -#define IPV6_PMTUDISC_PROBE 3 /* Ignore dst pmtu. */ -#define IPV6_PMTUDISC_INTERFACE 4 /* See IP_PMTUDISC_INTERFACE. */ -#define IPV6_PMTUDISC_OMIT 5 /* See IP_PMTUDISC_OMIT. */ - -/* Socket level values for IPv6. */ -#define SOL_IPV6 41 -#define SOL_ICMPV6 58 - -/* Routing header options for IPv6. */ -#define IPV6_RTHDR_LOOSE 0 /* Hop doesn't need to be neighbour. */ -#define IPV6_RTHDR_STRICT 1 /* Hop must be a neighbour. */ - -#define IPV6_RTHDR_TYPE_0 0 /* IPv6 Routing header type 0. */ diff --git a/sysdeps/unix/sysv/linux/bits/initspin.h b/sysdeps/unix/sysv/linux/bits/initspin.h deleted file mode 100644 index 936f178497..0000000000 --- a/sysdeps/unix/sysv/linux/bits/initspin.h +++ /dev/null @@ -1 +0,0 @@ -/* No thread support. */ diff --git a/sysdeps/unix/sysv/linux/bits/inotify.h b/sysdeps/unix/sysv/linux/bits/inotify.h deleted file mode 100644 index c9d83eb7e3..0000000000 --- a/sysdeps/unix/sysv/linux/bits/inotify.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_INOTIFY_H -# error "Never use directly; include instead." -#endif - -/* Flags for the parameter of inotify_init1. */ -enum - { - IN_CLOEXEC = 02000000, -#define IN_CLOEXEC IN_CLOEXEC - IN_NONBLOCK = 00004000 -#define IN_NONBLOCK IN_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/bits/ioctl-types.h b/sysdeps/unix/sysv/linux/bits/ioctl-types.h deleted file mode 100644 index f6fe26acce..0000000000 --- a/sysdeps/unix/sysv/linux/bits/ioctl-types.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Structure types for pre-termios terminal ioctls. Linux version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IOCTL_H -# error "Never use directly; include instead." -#endif - -/* Get definition of constants for use with `ioctl'. */ -#include - - -struct winsize - { - unsigned short int ws_row; - unsigned short int ws_col; - unsigned short int ws_xpixel; - unsigned short int ws_ypixel; - }; - -#define NCC 8 -struct termio - { - unsigned short int c_iflag; /* input mode flags */ - unsigned short int c_oflag; /* output mode flags */ - unsigned short int c_cflag; /* control mode flags */ - unsigned short int c_lflag; /* local mode flags */ - unsigned char c_line; /* line discipline */ - unsigned char c_cc[NCC]; /* control characters */ -}; - -/* modem lines */ -#define TIOCM_LE 0x001 -#define TIOCM_DTR 0x002 -#define TIOCM_RTS 0x004 -#define TIOCM_ST 0x008 -#define TIOCM_SR 0x010 -#define TIOCM_CTS 0x020 -#define TIOCM_CAR 0x040 -#define TIOCM_RNG 0x080 -#define TIOCM_DSR 0x100 -#define TIOCM_CD TIOCM_CAR -#define TIOCM_RI TIOCM_RNG - -/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ - -/* line disciplines */ -#define N_TTY 0 -#define N_SLIP 1 -#define N_MOUSE 2 -#define N_PPP 3 -#define N_STRIP 4 -#define N_AX25 5 -#define N_X25 6 /* X.25 async */ -#define N_6PACK 7 -#define N_MASC 8 /* Mobitex module */ -#define N_R3964 9 /* Simatic R3964 module */ -#define N_PROFIBUS_FDL 10 /* Profibus */ -#define N_IRDA 11 /* Linux IR */ -#define N_SMSBLOCK 12 /* SMS block mode */ -#define N_HDLC 13 /* synchronous HDLC */ -#define N_SYNC_PPP 14 /* synchronous PPP */ -#define N_HCI 15 /* Bluetooth HCI UART */ diff --git a/sysdeps/unix/sysv/linux/bits/ioctls.h b/sysdeps/unix/sysv/linux/bits/ioctls.h deleted file mode 100644 index 28ab1d0f1a..0000000000 --- a/sysdeps/unix/sysv/linux/bits/ioctls.h +++ /dev/null @@ -1,108 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IOCTL_H -# error "Never use directly; include instead." -#endif - -/* Use the definitions from the kernel header files. */ -#include - -/* Routing table calls. */ -#define SIOCADDRT 0x890B /* add routing table entry */ -#define SIOCDELRT 0x890C /* delete routing table entry */ -#define SIOCRTMSG 0x890D /* call to routing system */ - -/* Socket configuration controls. */ -#define SIOCGIFNAME 0x8910 /* get iface name */ -#define SIOCSIFLINK 0x8911 /* set iface channel */ -#define SIOCGIFCONF 0x8912 /* get iface list */ -#define SIOCGIFFLAGS 0x8913 /* get flags */ -#define SIOCSIFFLAGS 0x8914 /* set flags */ -#define SIOCGIFADDR 0x8915 /* get PA address */ -#define SIOCSIFADDR 0x8916 /* set PA address */ -#define SIOCGIFDSTADDR 0x8917 /* get remote PA address */ -#define SIOCSIFDSTADDR 0x8918 /* set remote PA address */ -#define SIOCGIFBRDADDR 0x8919 /* get broadcast PA address */ -#define SIOCSIFBRDADDR 0x891a /* set broadcast PA address */ -#define SIOCGIFNETMASK 0x891b /* get network PA mask */ -#define SIOCSIFNETMASK 0x891c /* set network PA mask */ -#define SIOCGIFMETRIC 0x891d /* get metric */ -#define SIOCSIFMETRIC 0x891e /* set metric */ -#define SIOCGIFMEM 0x891f /* get memory address (BSD) */ -#define SIOCSIFMEM 0x8920 /* set memory address (BSD) */ -#define SIOCGIFMTU 0x8921 /* get MTU size */ -#define SIOCSIFMTU 0x8922 /* set MTU size */ -#define SIOCSIFNAME 0x8923 /* set interface name */ -#define SIOCSIFHWADDR 0x8924 /* set hardware address */ -#define SIOCGIFENCAP 0x8925 /* get/set encapsulations */ -#define SIOCSIFENCAP 0x8926 -#define SIOCGIFHWADDR 0x8927 /* Get hardware address */ -#define SIOCGIFSLAVE 0x8929 /* Driver slaving support */ -#define SIOCSIFSLAVE 0x8930 -#define SIOCADDMULTI 0x8931 /* Multicast address lists */ -#define SIOCDELMULTI 0x8932 -#define SIOCGIFINDEX 0x8933 /* name -> if_index mapping */ -#define SIOGIFINDEX SIOCGIFINDEX /* misprint compatibility :-) */ -#define SIOCSIFPFLAGS 0x8934 /* set/get extended flags set */ -#define SIOCGIFPFLAGS 0x8935 -#define SIOCDIFADDR 0x8936 /* delete PA address */ -#define SIOCSIFHWBROADCAST 0x8937 /* set hardware broadcast addr */ -#define SIOCGIFCOUNT 0x8938 /* get number of devices */ - -#define SIOCGIFBR 0x8940 /* Bridging support */ -#define SIOCSIFBR 0x8941 /* Set bridging options */ - -#define SIOCGIFTXQLEN 0x8942 /* Get the tx queue length */ -#define SIOCSIFTXQLEN 0x8943 /* Set the tx queue length */ - - -/* ARP cache control calls. */ - /* 0x8950 - 0x8952 * obsolete calls, don't re-use */ -#define SIOCDARP 0x8953 /* delete ARP table entry */ -#define SIOCGARP 0x8954 /* get ARP table entry */ -#define SIOCSARP 0x8955 /* set ARP table entry */ - -/* RARP cache control calls. */ -#define SIOCDRARP 0x8960 /* delete RARP table entry */ -#define SIOCGRARP 0x8961 /* get RARP table entry */ -#define SIOCSRARP 0x8962 /* set RARP table entry */ - -/* Driver configuration calls */ - -#define SIOCGIFMAP 0x8970 /* Get device parameters */ -#define SIOCSIFMAP 0x8971 /* Set device parameters */ - -/* DLCI configuration calls */ - -#define SIOCADDDLCI 0x8980 /* Create new DLCI device */ -#define SIOCDELDLCI 0x8981 /* Delete DLCI device */ - -/* Device private ioctl calls. */ - -/* These 16 ioctls are available to devices via the do_ioctl() device - vector. Each device should include this file and redefine these - names as their own. Because these are device dependent it is a good - idea _NOT_ to issue them to random objects and hope. */ - -#define SIOCDEVPRIVATE 0x89F0 /* to 89FF */ - -/* - * These 16 ioctl calls are protocol private - */ - -#define SIOCPROTOPRIVATE 0x89E0 /* to 89EF */ diff --git a/sysdeps/unix/sysv/linux/bits/ipc.h b/sysdeps/unix/sysv/linux/bits/ipc.h deleted file mode 100644 index f86fe8b5a4..0000000000 --- a/sysdeps/unix/sysv/linux/bits/ipc.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IPC_H -# error "Never use directly; include instead." -#endif - -#include - -/* Mode bits for `msgget', `semget', and `shmget'. */ -#define IPC_CREAT 01000 /* Create key if key does not exist. */ -#define IPC_EXCL 02000 /* Fail if key exists. */ -#define IPC_NOWAIT 04000 /* Return error on wait. */ - -/* Control commands for `msgctl', `semctl', and `shmctl'. */ -#define IPC_RMID 0 /* Remove identifier. */ -#define IPC_SET 1 /* Set `ipc_perm' options. */ -#define IPC_STAT 2 /* Get `ipc_perm' options. */ -#ifdef __USE_GNU -# define IPC_INFO 3 /* See ipcs. */ -#endif - -/* Special key values. */ -#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ - - -/* Data structure used to pass permission information to IPC operations. */ -struct ipc_perm - { - __key_t __key; /* Key. */ - __uid_t uid; /* Owner's user ID. */ - __gid_t gid; /* Owner's group ID. */ - __uid_t cuid; /* Creator's user ID. */ - __gid_t cgid; /* Creator's group ID. */ - unsigned short int mode; /* Read/write permission. */ - unsigned short int __pad1; - unsigned short int __seq; /* Sequence number. */ - unsigned short int __pad2; - __syscall_ulong_t __glibc_reserved1; - __syscall_ulong_t __glibc_reserved2; - }; diff --git a/sysdeps/unix/sysv/linux/bits/local_lim.h b/sysdeps/unix/sysv/linux/bits/local_lim.h deleted file mode 100644 index 7b5303cf0e..0000000000 --- a/sysdeps/unix/sysv/linux/bits/local_lim.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Minimum guaranteed maximum values for system limits. Linux version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -/* The kernel header pollutes the namespace with the NR_OPEN symbol - and defines LINK_MAX although filesystems have different maxima. A - similar thing is true for OPEN_MAX: the limit can be changed at - runtime and therefore the macro must not be defined. Remove this - after including the header if necessary. */ -#ifndef NR_OPEN -# define __undef_NR_OPEN -#endif -#ifndef LINK_MAX -# define __undef_LINK_MAX -#endif -#ifndef OPEN_MAX -# define __undef_OPEN_MAX -#endif -#ifndef ARG_MAX -# define __undef_ARG_MAX -#endif - -/* The kernel sources contain a file with all the needed information. */ -#include - -/* Have to remove NR_OPEN? */ -#ifdef __undef_NR_OPEN -# undef NR_OPEN -# undef __undef_NR_OPEN -#endif -/* Have to remove LINK_MAX? */ -#ifdef __undef_LINK_MAX -# undef LINK_MAX -# undef __undef_LINK_MAX -#endif -/* Have to remove OPEN_MAX? */ -#ifdef __undef_OPEN_MAX -# undef OPEN_MAX -# undef __undef_OPEN_MAX -#endif -/* Have to remove ARG_MAX? */ -#ifdef __undef_ARG_MAX -# undef ARG_MAX -# undef __undef_ARG_MAX -#endif - -/* The number of data keys per process. */ -#define _POSIX_THREAD_KEYS_MAX 128 -/* This is the value this implementation supports. */ -#define PTHREAD_KEYS_MAX 1024 - -/* Controlling the iterations of destructors for thread-specific data. */ -#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 -/* Number of iterations this implementation does. */ -#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS - -/* The number of threads per process. */ -#define _POSIX_THREAD_THREADS_MAX 64 -/* We have no predefined limit on the number of threads. */ -#undef PTHREAD_THREADS_MAX - -/* Maximum amount by which a process can descrease its asynchronous I/O - priority level. */ -#define AIO_PRIO_DELTA_MAX 20 - -/* Minimum size for a thread. We are free to choose a reasonable value. */ -#define PTHREAD_STACK_MIN 16384 - -/* Maximum number of timer expiration overruns. */ -#define DELAYTIMER_MAX 2147483647 - -/* Maximum tty name length. */ -#define TTY_NAME_MAX 32 - -/* Maximum login name length. This is arbitrary. */ -#define LOGIN_NAME_MAX 256 - -/* Maximum host name length. */ -#define HOST_NAME_MAX 64 - -/* Maximum message queue priority level. */ -#define MQ_PRIO_MAX 32768 - -/* Maximum value the semaphore can have. */ -#define SEM_VALUE_MAX (2147483647) diff --git a/sysdeps/unix/sysv/linux/bits/mqueue.h b/sysdeps/unix/sysv/linux/bits/mqueue.h deleted file mode 100644 index 47bcce60ec..0000000000 --- a/sysdeps/unix/sysv/linux/bits/mqueue.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MQUEUE_H -# error "Never use directly; include instead." -#endif - -#include - -typedef int mqd_t; - -struct mq_attr -{ - __syscall_slong_t mq_flags; /* Message queue flags. */ - __syscall_slong_t mq_maxmsg; /* Maximum number of messages. */ - __syscall_slong_t mq_msgsize; /* Maximum message size. */ - __syscall_slong_t mq_curmsgs; /* Number of messages currently queued. */ - __syscall_slong_t __pad[4]; -}; diff --git a/sysdeps/unix/sysv/linux/bits/msq.h b/sysdeps/unix/sysv/linux/bits/msq.h deleted file mode 100644 index 31c4863e7b..0000000000 --- a/sysdeps/unix/sysv/linux/bits/msq.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_MSG_H -# error "Never use directly; include instead." -#endif - -#include - -/* Define options for message queue functions. */ -#define MSG_NOERROR 010000 /* no error if message is too big */ -#ifdef __USE_GNU -# define MSG_EXCEPT 020000 /* recv any msg except of specified type */ -# define MSG_COPY 040000 /* copy (not remove) all queue messages */ -#endif - -/* Types used in the structure definition. */ -typedef unsigned long int msgqnum_t; -typedef unsigned long int msglen_t; - - -/* Structure of record for one message inside the kernel. - The type `struct msg' is opaque. */ -struct msqid_ds -{ - struct ipc_perm msg_perm; /* structure describing operation permission */ - __time_t msg_stime; /* time of last msgsnd command */ - unsigned long int __glibc_reserved1; - __time_t msg_rtime; /* time of last msgrcv command */ - unsigned long int __glibc_reserved2; - __time_t msg_ctime; /* time of last change */ - unsigned long int __glibc_reserved3; - unsigned long int __msg_cbytes; /* current number of bytes on queue */ - msgqnum_t msg_qnum; /* number of messages currently on queue */ - msglen_t msg_qbytes; /* max number of bytes allowed on queue */ - __pid_t msg_lspid; /* pid of last msgsnd() */ - __pid_t msg_lrpid; /* pid of last msgrcv() */ - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; -}; - -#ifdef __USE_MISC - -# define msg_cbytes __msg_cbytes - -/* ipcs ctl commands */ -# define MSG_STAT 11 -# define MSG_INFO 12 - -/* buffer for msgctl calls IPC_INFO, MSG_INFO */ -struct msginfo - { - int msgpool; - int msgmap; - int msgmax; - int msgmnb; - int msgmni; - int msgssz; - int msgtql; - unsigned short int msgseg; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/bits/param.h b/sysdeps/unix/sysv/linux/bits/param.h deleted file mode 100644 index a53868acdb..0000000000 --- a/sysdeps/unix/sysv/linux/bits/param.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Old-style Unix parameters and limits. Linux version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PARAM_H -# error "Never use directly; include instead." -#endif - -#ifndef ARG_MAX -# define __undef_ARG_MAX -#endif - -#include -#include - -/* The kernel headers define ARG_MAX. The value is wrong, though. */ -#ifdef __undef_ARG_MAX -# undef ARG_MAX -# undef __undef_ARG_MAX -#endif - -#define MAXSYMLINKS 20 - -/* The following are not really correct but it is a value we used for a - long time and which seems to be usable. People should not use NOFILE - and NCARGS anyway. */ -#define NOFILE 256 -#define NCARGS 131072 diff --git a/sysdeps/unix/sysv/linux/bits/poll.h b/sysdeps/unix/sysv/linux/bits/poll.h deleted file mode 100644 index da1c66b32b..0000000000 --- a/sysdeps/unix/sysv/linux/bits/poll.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_POLL_H -# error "Never use directly; include instead." -#endif - -/* Event types that can be polled for. These bits may be set in `events' - to indicate the interesting event types; they will appear in `revents' - to indicate the status of the file descriptor. */ -#define POLLIN 0x001 /* There is data to read. */ -#define POLLPRI 0x002 /* There is urgent data to read. */ -#define POLLOUT 0x004 /* Writing now will not block. */ - -#if defined __USE_XOPEN || defined __USE_XOPEN2K8 -/* These values are defined in XPG4.2. */ -# define POLLRDNORM 0x040 /* Normal data may be read. */ -# define POLLRDBAND 0x080 /* Priority data may be read. */ -# define POLLWRNORM 0x100 /* Writing now will not block. */ -# define POLLWRBAND 0x200 /* Priority data may be written. */ -#endif - -#ifdef __USE_GNU -/* These are extensions for Linux. */ -# define POLLMSG 0x400 -# define POLLREMOVE 0x1000 -# define POLLRDHUP 0x2000 -#endif - -/* Event types always implicitly polled for. These bits need not be set in - `events', but they will appear in `revents' to indicate the status of - the file descriptor. */ -#define POLLERR 0x008 /* Error condition. */ -#define POLLHUP 0x010 /* Hung up. */ -#define POLLNVAL 0x020 /* Invalid polling request. */ diff --git a/sysdeps/unix/sysv/linux/bits/posix_opt.h b/sysdeps/unix/sysv/linux/bits/posix_opt.h deleted file mode 100644 index 56cbbb88a0..0000000000 --- a/sysdeps/unix/sysv/linux/bits/posix_opt.h +++ /dev/null @@ -1,191 +0,0 @@ -/* Define POSIX options for Linux. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#ifndef _BITS_POSIX_OPT_H -#define _BITS_POSIX_OPT_H 1 - -/* Job control is supported. */ -#define _POSIX_JOB_CONTROL 1 - -/* Processes have a saved set-user-ID and a saved set-group-ID. */ -#define _POSIX_SAVED_IDS 1 - -/* Priority scheduling is supported. */ -#define _POSIX_PRIORITY_SCHEDULING 200809L - -/* Synchronizing file data is supported. */ -#define _POSIX_SYNCHRONIZED_IO 200809L - -/* The fsync function is present. */ -#define _POSIX_FSYNC 200809L - -/* Mapping of files to memory is supported. */ -#define _POSIX_MAPPED_FILES 200809L - -/* Locking of all memory is supported. */ -#define _POSIX_MEMLOCK 200809L - -/* Locking of ranges of memory is supported. */ -#define _POSIX_MEMLOCK_RANGE 200809L - -/* Setting of memory protections is supported. */ -#define _POSIX_MEMORY_PROTECTION 200809L - -/* Some filesystems allow all users to change file ownership. */ -#define _POSIX_CHOWN_RESTRICTED 0 - -/* `c_cc' member of 'struct termios' structure can be disabled by - using the value _POSIX_VDISABLE. */ -#define _POSIX_VDISABLE '\0' - -/* Filenames are not silently truncated. */ -#define _POSIX_NO_TRUNC 1 - -/* X/Open realtime support is available. */ -#define _XOPEN_REALTIME 1 - -/* X/Open thread realtime support is available. */ -#define _XOPEN_REALTIME_THREADS 1 - -/* XPG4.2 shared memory is supported. */ -#define _XOPEN_SHM 1 - -/* Tell we have POSIX threads. */ -#define _POSIX_THREADS 200809L - -/* We have the reentrant functions described in POSIX. */ -#define _POSIX_REENTRANT_FUNCTIONS 1 -#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L - -/* We provide priority scheduling for threads. */ -#define _POSIX_THREAD_PRIORITY_SCHEDULING 200809L - -/* We support user-defined stack sizes. */ -#define _POSIX_THREAD_ATTR_STACKSIZE 200809L - -/* We support user-defined stacks. */ -#define _POSIX_THREAD_ATTR_STACKADDR 200809L - -/* We support priority inheritence. */ -#define _POSIX_THREAD_PRIO_INHERIT 200809L - -/* We support priority protection, though only for non-robust - mutexes. */ -#define _POSIX_THREAD_PRIO_PROTECT 200809L - -#ifdef __USE_XOPEN2K8 -/* We support priority inheritence for robust mutexes. */ -# define _POSIX_THREAD_ROBUST_PRIO_INHERIT 200809L - -/* We do not support priority protection for robust mutexes. */ -# define _POSIX_THREAD_ROBUST_PRIO_PROTECT -1 -#endif - -/* We support POSIX.1b semaphores. */ -#define _POSIX_SEMAPHORES 200809L - -/* Real-time signals are supported. */ -#define _POSIX_REALTIME_SIGNALS 200809L - -/* We support asynchronous I/O. */ -#define _POSIX_ASYNCHRONOUS_IO 200809L -#define _POSIX_ASYNC_IO 1 -/* Alternative name for Unix98. */ -#define _LFS_ASYNCHRONOUS_IO 1 -/* Support for prioritization is also available. */ -#define _POSIX_PRIORITIZED_IO 200809L - -/* The LFS support in asynchronous I/O is also available. */ -#define _LFS64_ASYNCHRONOUS_IO 1 - -/* The rest of the LFS is also available. */ -#define _LFS_LARGEFILE 1 -#define _LFS64_LARGEFILE 1 -#define _LFS64_STDIO 1 - -/* POSIX shared memory objects are implemented. */ -#define _POSIX_SHARED_MEMORY_OBJECTS 200809L - -/* CPU-time clocks support needs to be checked at runtime. */ -#define _POSIX_CPUTIME 0 - -/* Clock support in threads must be also checked at runtime. */ -#define _POSIX_THREAD_CPUTIME 0 - -/* GNU libc provides regular expression handling. */ -#define _POSIX_REGEXP 1 - -/* Reader/Writer locks are available. */ -#define _POSIX_READER_WRITER_LOCKS 200809L - -/* We have a POSIX shell. */ -#define _POSIX_SHELL 1 - -/* We support the Timeouts option. */ -#define _POSIX_TIMEOUTS 200809L - -/* We support spinlocks. */ -#define _POSIX_SPIN_LOCKS 200809L - -/* The `spawn' function family is supported. */ -#define _POSIX_SPAWN 200809L - -/* We have POSIX timers. */ -#define _POSIX_TIMERS 200809L - -/* The barrier functions are available. */ -#define _POSIX_BARRIERS 200809L - -/* POSIX message queues are available. */ -#define _POSIX_MESSAGE_PASSING 200809L - -/* Thread process-shared synchronization is supported. */ -#define _POSIX_THREAD_PROCESS_SHARED 200809L - -/* The monotonic clock might be available. */ -#define _POSIX_MONOTONIC_CLOCK 0 - -/* The clock selection interfaces are available. */ -#define _POSIX_CLOCK_SELECTION 200809L - -/* Advisory information interfaces are available. */ -#define _POSIX_ADVISORY_INFO 200809L - -/* IPv6 support is available. */ -#define _POSIX_IPV6 200809L - -/* Raw socket support is available. */ -#define _POSIX_RAW_SOCKETS 200809L - -/* We have at least one terminal. */ -#define _POSIX2_CHAR_TERM 200809L - -/* Neither process nor thread sporadic server interfaces is available. */ -#define _POSIX_SPORADIC_SERVER -1 -#define _POSIX_THREAD_SPORADIC_SERVER -1 - -/* trace.h is not available. */ -#define _POSIX_TRACE -1 -#define _POSIX_TRACE_EVENT_FILTER -1 -#define _POSIX_TRACE_INHERIT -1 -#define _POSIX_TRACE_LOG -1 - -/* Typed memory objects are not available. */ -#define _POSIX_TYPED_MEMORY_OBJECTS -1 - -#endif /* bits/posix_opt.h */ diff --git a/sysdeps/unix/sysv/linux/bits/resource.h b/sysdeps/unix/sysv/linux/bits/resource.h deleted file mode 100644 index d4dbc268cb..0000000000 --- a/sysdeps/unix/sysv/linux/bits/resource.h +++ /dev/null @@ -1,327 +0,0 @@ -/* Bit values & structures for resource limits. Linux version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_RESOURCE_H -# error "Never use directly; include instead." -#endif - -#include - -/* Transmute defines to enumerations. The macro re-definitions are - necessary because some programs want to test for operating system - features with #ifdef RUSAGE_SELF. In ISO C the reflexive - definition is a no-op. */ - -/* Kinds of resource limit. */ -enum __rlimit_resource -{ - /* Per-process CPU limit, in seconds. */ - RLIMIT_CPU = 0, -#define RLIMIT_CPU RLIMIT_CPU - - /* Largest file that can be created, in bytes. */ - RLIMIT_FSIZE = 1, -#define RLIMIT_FSIZE RLIMIT_FSIZE - - /* Maximum size of data segment, in bytes. */ - RLIMIT_DATA = 2, -#define RLIMIT_DATA RLIMIT_DATA - - /* Maximum size of stack segment, in bytes. */ - RLIMIT_STACK = 3, -#define RLIMIT_STACK RLIMIT_STACK - - /* Largest core file that can be created, in bytes. */ - RLIMIT_CORE = 4, -#define RLIMIT_CORE RLIMIT_CORE - - /* Largest resident set size, in bytes. - This affects swapping; processes that are exceeding their - resident set size will be more likely to have physical memory - taken from them. */ - __RLIMIT_RSS = 5, -#define RLIMIT_RSS __RLIMIT_RSS - - /* Number of open files. */ - RLIMIT_NOFILE = 7, - __RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */ -#define RLIMIT_NOFILE RLIMIT_NOFILE -#define RLIMIT_OFILE __RLIMIT_OFILE - - /* Address space limit. */ - RLIMIT_AS = 9, -#define RLIMIT_AS RLIMIT_AS - - /* Number of processes. */ - __RLIMIT_NPROC = 6, -#define RLIMIT_NPROC __RLIMIT_NPROC - - /* Locked-in-memory address space. */ - __RLIMIT_MEMLOCK = 8, -#define RLIMIT_MEMLOCK __RLIMIT_MEMLOCK - - /* Maximum number of file locks. */ - __RLIMIT_LOCKS = 10, -#define RLIMIT_LOCKS __RLIMIT_LOCKS - - /* Maximum number of pending signals. */ - __RLIMIT_SIGPENDING = 11, -#define RLIMIT_SIGPENDING __RLIMIT_SIGPENDING - - /* Maximum bytes in POSIX message queues. */ - __RLIMIT_MSGQUEUE = 12, -#define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE - - /* Maximum nice priority allowed to raise to. - Nice levels 19 .. -20 correspond to 0 .. 39 - values of this resource limit. */ - __RLIMIT_NICE = 13, -#define RLIMIT_NICE __RLIMIT_NICE - - /* Maximum realtime priority allowed for non-priviledged - processes. */ - __RLIMIT_RTPRIO = 14, -#define RLIMIT_RTPRIO __RLIMIT_RTPRIO - - /* Maximum CPU time in µs that a process scheduled under a real-time - scheduling policy may consume without making a blocking system - call before being forcibly descheduled. */ - __RLIMIT_RTTIME = 15, -#define RLIMIT_RTTIME __RLIMIT_RTTIME - - __RLIMIT_NLIMITS = 16, - __RLIM_NLIMITS = __RLIMIT_NLIMITS -#define RLIMIT_NLIMITS __RLIMIT_NLIMITS -#define RLIM_NLIMITS __RLIM_NLIMITS -}; - -/* Value to indicate that there is no limit. */ -#ifndef __USE_FILE_OFFSET64 -# define RLIM_INFINITY ((__rlim_t) -1) -#else -# define RLIM_INFINITY 0xffffffffffffffffuLL -#endif - -#ifdef __USE_LARGEFILE64 -# define RLIM64_INFINITY 0xffffffffffffffffuLL -#endif - -/* We can represent all limits. */ -#define RLIM_SAVED_MAX RLIM_INFINITY -#define RLIM_SAVED_CUR RLIM_INFINITY - - -/* Type for resource quantity measurement. */ -#ifndef __USE_FILE_OFFSET64 -typedef __rlim_t rlim_t; -#else -typedef __rlim64_t rlim_t; -#endif -#ifdef __USE_LARGEFILE64 -typedef __rlim64_t rlim64_t; -#endif - -struct rlimit - { - /* The current (soft) limit. */ - rlim_t rlim_cur; - /* The hard limit. */ - rlim_t rlim_max; - }; - -#ifdef __USE_LARGEFILE64 -struct rlimit64 - { - /* The current (soft) limit. */ - rlim64_t rlim_cur; - /* The hard limit. */ - rlim64_t rlim_max; - }; -#endif - -/* Whose usage statistics do you want? */ -enum __rusage_who -{ - /* The calling process. */ - RUSAGE_SELF = 0, -#define RUSAGE_SELF RUSAGE_SELF - - /* All of its terminated child processes. */ - RUSAGE_CHILDREN = -1 -#define RUSAGE_CHILDREN RUSAGE_CHILDREN - -#ifdef __USE_GNU - , - /* The calling thread. */ - RUSAGE_THREAD = 1 -# define RUSAGE_THREAD RUSAGE_THREAD - /* Name for the same functionality on Solaris. */ -# define RUSAGE_LWP RUSAGE_THREAD -#endif -}; - -#include - -/* Structure which says how much of each resource has been used. */ - -/* The purpose of all the unions is to have the kernel-compatible layout - while keeping the API type as 'long int', and among machines where - __syscall_slong_t is not 'long int', this only does the right thing - for little-endian ones, like x32. */ -struct rusage - { - /* Total amount of user time used. */ - struct timeval ru_utime; - /* Total amount of system time used. */ - struct timeval ru_stime; - /* Maximum resident set size (in kilobytes). */ - __extension__ union - { - long int ru_maxrss; - __syscall_slong_t __ru_maxrss_word; - }; - /* Amount of sharing of text segment memory - with other processes (kilobyte-seconds). */ - /* Maximum resident set size (in kilobytes). */ - __extension__ union - { - long int ru_ixrss; - __syscall_slong_t __ru_ixrss_word; - }; - /* Amount of data segment memory used (kilobyte-seconds). */ - __extension__ union - { - long int ru_idrss; - __syscall_slong_t __ru_idrss_word; - }; - /* Amount of stack memory used (kilobyte-seconds). */ - __extension__ union - { - long int ru_isrss; - __syscall_slong_t __ru_isrss_word; - }; - /* Number of soft page faults (i.e. those serviced by reclaiming - a page from the list of pages awaiting reallocation. */ - __extension__ union - { - long int ru_minflt; - __syscall_slong_t __ru_minflt_word; - }; - /* Number of hard page faults (i.e. those that required I/O). */ - __extension__ union - { - long int ru_majflt; - __syscall_slong_t __ru_majflt_word; - }; - /* Number of times a process was swapped out of physical memory. */ - __extension__ union - { - long int ru_nswap; - __syscall_slong_t __ru_nswap_word; - }; - /* Number of input operations via the file system. Note: This - and `ru_oublock' do not include operations with the cache. */ - __extension__ union - { - long int ru_inblock; - __syscall_slong_t __ru_inblock_word; - }; - /* Number of output operations via the file system. */ - __extension__ union - { - long int ru_oublock; - __syscall_slong_t __ru_oublock_word; - }; - /* Number of IPC messages sent. */ - __extension__ union - { - long int ru_msgsnd; - __syscall_slong_t __ru_msgsnd_word; - }; - /* Number of IPC messages received. */ - __extension__ union - { - long int ru_msgrcv; - __syscall_slong_t __ru_msgrcv_word; - }; - /* Number of signals delivered. */ - __extension__ union - { - long int ru_nsignals; - __syscall_slong_t __ru_nsignals_word; - }; - /* Number of voluntary context switches, i.e. because the process - gave up the process before it had to (usually to wait for some - resource to be available). */ - __extension__ union - { - long int ru_nvcsw; - __syscall_slong_t __ru_nvcsw_word; - }; - /* Number of involuntary context switches, i.e. a higher priority process - became runnable or the current process used up its time slice. */ - __extension__ union - { - long int ru_nivcsw; - __syscall_slong_t __ru_nivcsw_word; - }; - }; - -/* Priority limits. */ -#define PRIO_MIN -20 /* Minimum priority a process can have. */ -#define PRIO_MAX 20 /* Maximum priority a process can have. */ - -/* The type of the WHICH argument to `getpriority' and `setpriority', - indicating what flavor of entity the WHO argument specifies. */ -enum __priority_which -{ - PRIO_PROCESS = 0, /* WHO is a process ID. */ -#define PRIO_PROCESS PRIO_PROCESS - PRIO_PGRP = 1, /* WHO is a process group ID. */ -#define PRIO_PGRP PRIO_PGRP - PRIO_USER = 2 /* WHO is a user ID. */ -#define PRIO_USER PRIO_USER -}; - - -__BEGIN_DECLS - -#ifdef __USE_GNU -/* Modify and return resource limits of a process atomically. */ -# ifndef __USE_FILE_OFFSET64 -extern int prlimit (__pid_t __pid, enum __rlimit_resource __resource, - const struct rlimit *__new_limit, - struct rlimit *__old_limit) __THROW; -# else -# ifdef __REDIRECT_NTH -extern int __REDIRECT_NTH (prlimit, (__pid_t __pid, - enum __rlimit_resource __resource, - const struct rlimit *__new_limit, - struct rlimit *__old_limit), prlimit64); -# else -# define prlimit prlimit64 -# endif -# endif -# ifdef __USE_LARGEFILE64 -extern int prlimit64 (__pid_t __pid, enum __rlimit_resource __resource, - const struct rlimit64 *__new_limit, - struct rlimit64 *__old_limit) __THROW; -# endif -#endif - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/bits/sched.h b/sysdeps/unix/sysv/linux/bits/sched.h deleted file mode 100644 index cc0d698f34..0000000000 --- a/sysdeps/unix/sysv/linux/bits/sched.h +++ /dev/null @@ -1,211 +0,0 @@ -/* Definitions of constants and data structure for POSIX 1003.1b-1993 - scheduling interface. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __need_schedparam - -#ifndef _SCHED_H -# error "Never include directly; use instead." -#endif - - -/* Scheduling algorithms. */ -#define SCHED_OTHER 0 -#define SCHED_FIFO 1 -#define SCHED_RR 2 -#ifdef __USE_GNU -# define SCHED_BATCH 3 -# define SCHED_IDLE 5 - -# define SCHED_RESET_ON_FORK 0x40000000 -#endif - -#ifdef __USE_GNU -/* Cloning flags. */ -# define CSIGNAL 0x000000ff /* Signal mask to be sent at exit. */ -# define CLONE_VM 0x00000100 /* Set if VM shared between processes. */ -# define CLONE_FS 0x00000200 /* Set if fs info shared between processes. */ -# define CLONE_FILES 0x00000400 /* Set if open files shared between processes. */ -# define CLONE_SIGHAND 0x00000800 /* Set if signal handlers shared. */ -# define CLONE_PTRACE 0x00002000 /* Set if tracing continues on the child. */ -# define CLONE_VFORK 0x00004000 /* Set if the parent wants the child to - wake it up on mm_release. */ -# define CLONE_PARENT 0x00008000 /* Set if we want to have the same - parent as the cloner. */ -# define CLONE_THREAD 0x00010000 /* Set to add to same thread group. */ -# define CLONE_NEWNS 0x00020000 /* Set to create new namespace. */ -# define CLONE_SYSVSEM 0x00040000 /* Set to shared SVID SEM_UNDO semantics. */ -# define CLONE_SETTLS 0x00080000 /* Set TLS info. */ -# define CLONE_PARENT_SETTID 0x00100000 /* Store TID in userlevel buffer - before MM copy. */ -# define CLONE_CHILD_CLEARTID 0x00200000 /* Register exit futex and memory - location to clear. */ -# define CLONE_DETACHED 0x00400000 /* Create clone detached. */ -# define CLONE_UNTRACED 0x00800000 /* Set if the tracing process can't - force CLONE_PTRACE on this clone. */ -# define CLONE_CHILD_SETTID 0x01000000 /* Store TID in userlevel buffer in - the child. */ -# define CLONE_NEWCGROUP 0x02000000 /* New cgroup namespace. */ -# define CLONE_NEWUTS 0x04000000 /* New utsname group. */ -# define CLONE_NEWIPC 0x08000000 /* New ipcs. */ -# define CLONE_NEWUSER 0x10000000 /* New user namespace. */ -# define CLONE_NEWPID 0x20000000 /* New pid namespace. */ -# define CLONE_NEWNET 0x40000000 /* New network namespace. */ -# define CLONE_IO 0x80000000 /* Clone I/O context. */ -#endif - -/* The official definition. */ -struct sched_param - { - int __sched_priority; - }; - -__BEGIN_DECLS - -#ifdef __USE_GNU -/* Clone current process. */ -extern int clone (int (*__fn) (void *__arg), void *__child_stack, - int __flags, void *__arg, ...) __THROW; - -/* Unshare the specified resources. */ -extern int unshare (int __flags) __THROW; - -/* Get index of currently used CPU. */ -extern int sched_getcpu (void) __THROW; - -/* Switch process to namespace of type NSTYPE indicated by FD. */ -extern int setns (int __fd, int __nstype) __THROW; -#endif - - -__END_DECLS - -#endif /* need schedparam */ - -#if !defined __defined_schedparam \ - && (defined __need_schedparam || defined _SCHED_H) -# define __defined_schedparam 1 -/* Data structure to describe a process' schedulability. */ -struct __sched_param - { - int __sched_priority; - }; -# undef __need_schedparam -#endif - - -#if defined _SCHED_H && !defined __cpu_set_t_defined -# define __cpu_set_t_defined -/* Size definition for CPU sets. */ -# define __CPU_SETSIZE 1024 -# define __NCPUBITS (8 * sizeof (__cpu_mask)) - -/* Type for array elements in 'cpu_set_t'. */ -typedef __CPU_MASK_TYPE __cpu_mask; - -/* Basic access functions. */ -# define __CPUELT(cpu) ((cpu) / __NCPUBITS) -# define __CPUMASK(cpu) ((__cpu_mask) 1 << ((cpu) % __NCPUBITS)) - -/* Data structure to describe CPU mask. */ -typedef struct -{ - __cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS]; -} cpu_set_t; - -/* Access functions for CPU masks. */ -# if __GNUC_PREREQ (2, 91) -# define __CPU_ZERO_S(setsize, cpusetp) \ - do __builtin_memset (cpusetp, '\0', setsize); while (0) -# else -# define __CPU_ZERO_S(setsize, cpusetp) \ - do { \ - size_t __i; \ - size_t __imax = (setsize) / sizeof (__cpu_mask); \ - __cpu_mask *__bits = (cpusetp)->__bits; \ - for (__i = 0; __i < __imax; ++__i) \ - __bits[__i] = 0; \ - } while (0) -# endif -# define __CPU_SET_S(cpu, setsize, cpusetp) \ - (__extension__ \ - ({ size_t __cpu = (cpu); \ - __cpu / 8 < (setsize) \ - ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \ - |= __CPUMASK (__cpu)) \ - : 0; })) -# define __CPU_CLR_S(cpu, setsize, cpusetp) \ - (__extension__ \ - ({ size_t __cpu = (cpu); \ - __cpu / 8 < (setsize) \ - ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \ - &= ~__CPUMASK (__cpu)) \ - : 0; })) -# define __CPU_ISSET_S(cpu, setsize, cpusetp) \ - (__extension__ \ - ({ size_t __cpu = (cpu); \ - __cpu / 8 < (setsize) \ - ? ((((const __cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \ - & __CPUMASK (__cpu))) != 0 \ - : 0; })) - -# define __CPU_COUNT_S(setsize, cpusetp) \ - __sched_cpucount (setsize, cpusetp) - -# if __GNUC_PREREQ (2, 91) -# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ - (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0) -# else -# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ - (__extension__ \ - ({ const __cpu_mask *__arr1 = (cpusetp1)->__bits; \ - const __cpu_mask *__arr2 = (cpusetp2)->__bits; \ - size_t __imax = (setsize) / sizeof (__cpu_mask); \ - size_t __i; \ - for (__i = 0; __i < __imax; ++__i) \ - if (__arr1[__i] != __arr2[__i]) \ - break; \ - __i == __imax; })) -# endif - -# define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \ - (__extension__ \ - ({ cpu_set_t *__dest = (destset); \ - const __cpu_mask *__arr1 = (srcset1)->__bits; \ - const __cpu_mask *__arr2 = (srcset2)->__bits; \ - size_t __imax = (setsize) / sizeof (__cpu_mask); \ - size_t __i; \ - for (__i = 0; __i < __imax; ++__i) \ - ((__cpu_mask *) __dest->__bits)[__i] = __arr1[__i] op __arr2[__i]; \ - __dest; })) - -# define __CPU_ALLOC_SIZE(count) \ - ((((count) + __NCPUBITS - 1) / __NCPUBITS) * sizeof (__cpu_mask)) -# define __CPU_ALLOC(count) __sched_cpualloc (count) -# define __CPU_FREE(cpuset) __sched_cpufree (cpuset) - -__BEGIN_DECLS - -extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp) - __THROW; -extern cpu_set_t *__sched_cpualloc (size_t __count) __THROW __wur; -extern void __sched_cpufree (cpu_set_t *__set) __THROW; - -__END_DECLS - -#endif diff --git a/sysdeps/unix/sysv/linux/bits/sem.h b/sysdeps/unix/sysv/linux/bits/sem.h deleted file mode 100644 index 7659ca97b9..0000000000 --- a/sysdeps/unix/sysv/linux/bits/sem.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SEM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Flags for `semop'. */ -#define SEM_UNDO 0x1000 /* undo the operation on exit */ - -/* Commands for `semctl'. */ -#define GETPID 11 /* get sempid */ -#define GETVAL 12 /* get semval */ -#define GETALL 13 /* get all semval's */ -#define GETNCNT 14 /* get semncnt */ -#define GETZCNT 15 /* get semzcnt */ -#define SETVAL 16 /* set semval */ -#define SETALL 17 /* set all semval's */ - - -/* Data structure describing a set of semaphores. */ -struct semid_ds -{ - struct ipc_perm sem_perm; /* operation permission struct */ - __time_t sem_otime; /* last semop() time */ - unsigned long int __glibc_reserved1; - __time_t sem_ctime; /* last time changed by semctl() */ - unsigned long int __glibc_reserved2; - unsigned long int sem_nsems; /* number of semaphores in set */ - unsigned long int __glibc_reserved3; - unsigned long int __glibc_reserved4; -}; - -/* The user should define a union like the following to use it for arguments - for `semctl'. - - union semun - { - int val; <= value for SETVAL - struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET - unsigned short int *array; <= array for GETALL & SETALL - struct seminfo *__buf; <= buffer for IPC_INFO - }; - - Previous versions of this file used to define this union but this is - incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether - one must define the union or not. */ -#define _SEM_SEMUN_UNDEFINED 1 - -#ifdef __USE_MISC - -/* ipcs ctl cmds */ -# define SEM_STAT 18 -# define SEM_INFO 19 - -struct seminfo -{ - int semmap; - int semmni; - int semmns; - int semmnu; - int semmsl; - int semopm; - int semume; - int semusz; - int semvmx; - int semaem; -}; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/bits/shm.h b/sysdeps/unix/sysv/linux/bits/shm.h deleted file mode 100644 index f8f593c4a2..0000000000 --- a/sysdeps/unix/sysv/linux/bits/shm.h +++ /dev/null @@ -1,103 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SHM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from */ -#define SHM_W 0200 /* or S_IWUGO from */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ -#define SHM_EXEC 0100000 /* execution access */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -__BEGIN_DECLS - -/* Segment low boundary address multiple. */ -#define SHMLBA (__getpagesize ()) -extern int __getpagesize (void) __THROW __attribute__ ((__const__)); - - -/* Type to count number of attaches. */ -typedef unsigned long int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ - size_t shm_segsz; /* size of segment in bytes */ - __time_t shm_atime; /* time of last shmat() */ - unsigned long int __glibc_reserved1; - __time_t shm_dtime; /* time of last shmdt() */ - unsigned long int __glibc_reserved2; - __time_t shm_ctime; /* time of last change by shmctl() */ - unsigned long int __glibc_reserved3; - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - unsigned long int shmmax; - unsigned long int shmmin; - unsigned long int shmmni; - unsigned long int shmseg; - unsigned long int shmall; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - unsigned long int __glibc_reserved3; - unsigned long int __glibc_reserved4; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/bits/sigaction.h b/sysdeps/unix/sysv/linux/bits/sigaction.h deleted file mode 100644 index 1e96d74daf..0000000000 --- a/sysdeps/unix/sysv/linux/bits/sigaction.h +++ /dev/null @@ -1,78 +0,0 @@ -/* The proper definitions for Linux's sigaction. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SIGNAL_H -# error "Never include directly; use instead." -#endif - -/* Structure describing the action to be taken when a signal arrives. */ -struct sigaction - { - /* Signal handler. */ -#ifdef __USE_POSIX199309 - union - { - /* Used if SA_SIGINFO is not set. */ - __sighandler_t sa_handler; - /* Used if SA_SIGINFO is set. */ - void (*sa_sigaction) (int, siginfo_t *, void *); - } - __sigaction_handler; -# define sa_handler __sigaction_handler.sa_handler -# define sa_sigaction __sigaction_handler.sa_sigaction -#else - __sighandler_t sa_handler; -#endif - - /* Additional set of signals to be blocked. */ - __sigset_t sa_mask; - - /* Special flags. */ - int sa_flags; - - /* Restore handler. */ - void (*sa_restorer) (void); - }; - -/* Bits in `sa_flags'. */ -#define SA_NOCLDSTOP 1 /* Don't send SIGCHLD when children stop. */ -#define SA_NOCLDWAIT 2 /* Don't create zombie on child death. */ -#define SA_SIGINFO 4 /* Invoke signal-catching function with - three arguments instead of one. */ -#if defined __USE_UNIX98 || defined __USE_MISC -# define SA_ONSTACK 0x08000000 /* Use signal stack by using `sa_restorer'. */ -#endif -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 -# define SA_RESTART 0x10000000 /* Restart syscall on signal return. */ -# define SA_NODEFER 0x40000000 /* Don't automatically block the signal when - its handler is being executed. */ -# define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler. */ -#endif -#ifdef __USE_MISC -# define SA_INTERRUPT 0x20000000 /* Historical no-op. */ - -/* Some aliases for the SA_ constants. */ -# define SA_NOMASK SA_NODEFER -# define SA_ONESHOT SA_RESETHAND -# define SA_STACK SA_ONSTACK -#endif - -/* Values for the HOW argument to `sigprocmask'. */ -#define SIG_BLOCK 0 /* Block signals. */ -#define SIG_UNBLOCK 1 /* Unblock signals. */ -#define SIG_SETMASK 2 /* Set the set of blocked signals. */ diff --git a/sysdeps/unix/sysv/linux/bits/sigcontext.h b/sysdeps/unix/sysv/linux/bits/sigcontext.h deleted file mode 100644 index cb7e6b1e30..0000000000 --- a/sysdeps/unix/sysv/linux/bits/sigcontext.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SIGCONTEXT_H -#define _BITS_SIGCONTEXT_H 1 - -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H -# error "Never use directly; include instead." -#endif - -#ifndef sigcontext_struct -/* Kernel headers before 2.1.1 define a struct sigcontext_struct, but - we need sigcontext. */ -# define sigcontext_struct sigcontext - -# include - -/* The Linux kernel headers redefine NULL wrongly, so cleanup afterwards. */ -# define __need_NULL -# include -#endif - -#endif /* bits/sigcontext.h */ diff --git a/sysdeps/unix/sysv/linux/bits/sigevent-consts.h b/sysdeps/unix/sysv/linux/bits/sigevent-consts.h deleted file mode 100644 index df3513bde2..0000000000 --- a/sysdeps/unix/sysv/linux/bits/sigevent-consts.h +++ /dev/null @@ -1,41 +0,0 @@ -/* sigevent constants. Linux version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SIGEVENT_CONSTS_H -#define _BITS_SIGEVENT_CONSTS_H 1 - -#if !defined _SIGNAL_H && !defined _AIO_H -#error "Don't include directly; use instead." -#endif - -/* `sigev_notify' values. */ -enum -{ - SIGEV_SIGNAL = 0, /* Notify via signal. */ -# define SIGEV_SIGNAL SIGEV_SIGNAL - SIGEV_NONE, /* Other notification: meaningless. */ -# define SIGEV_NONE SIGEV_NONE - SIGEV_THREAD, /* Deliver via thread creation. */ -# define SIGEV_THREAD SIGEV_THREAD - - SIGEV_THREAD_ID = 4 /* Send signal to specific thread. - This is a Linux extension. */ -#define SIGEV_THREAD_ID SIGEV_THREAD_ID -}; - -#endif diff --git a/sysdeps/unix/sysv/linux/bits/siginfo-arch.h b/sysdeps/unix/sysv/linux/bits/siginfo-arch.h deleted file mode 100644 index 00018fa620..0000000000 --- a/sysdeps/unix/sysv/linux/bits/siginfo-arch.h +++ /dev/null @@ -1,7 +0,0 @@ -/* Architecture-specific adjustments to siginfo_t. */ -#ifndef _BITS_SIGINFO_ARCH_H -#define _BITS_SIGINFO_ARCH_H 1 - -/* This architecture has no adjustments to make to siginfo_t. */ - -#endif diff --git a/sysdeps/unix/sysv/linux/bits/siginfo-consts-arch.h b/sysdeps/unix/sysv/linux/bits/siginfo-consts-arch.h deleted file mode 100644 index 96b4edbccd..0000000000 --- a/sysdeps/unix/sysv/linux/bits/siginfo-consts-arch.h +++ /dev/null @@ -1,7 +0,0 @@ -/* Architecture-specific additional siginfo constants. */ -#ifndef _BITS_SIGINFO_CONSTS_ARCH_H -#define _BITS_SIGINFO_CONSTS_ARCH_H 1 - -/* This architecture has no additional siginfo constants. */ - -#endif diff --git a/sysdeps/unix/sysv/linux/bits/siginfo-consts.h b/sysdeps/unix/sysv/linux/bits/siginfo-consts.h deleted file mode 100644 index 525840cea1..0000000000 --- a/sysdeps/unix/sysv/linux/bits/siginfo-consts.h +++ /dev/null @@ -1,187 +0,0 @@ -/* siginfo constants. Linux version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SIGINFO_CONSTS_H -#define _BITS_SIGINFO_CONSTS_H 1 - -#ifndef _SIGNAL_H -#error "Don't include directly; use instead." -#endif - -/* Most of these constants are uniform across all architectures, but there - is one exception. */ -#include -#ifndef __SI_ASYNCIO_AFTER_SIGIO -# define __SI_ASYNCIO_AFTER_SIGIO 1 -#endif - -/* Values for `si_code'. Positive values are reserved for kernel-generated - signals. */ -enum -{ - SI_ASYNCNL = -60, /* Sent by asynch name lookup completion. */ - SI_TKILL = -6, /* Sent by tkill. */ - SI_SIGIO, /* Sent by queued SIGIO. */ -#if __SI_ASYNCIO_AFTER_SIGIO - SI_ASYNCIO, /* Sent by AIO completion. */ - SI_MESGQ, /* Sent by real time mesq state change. */ - SI_TIMER, /* Sent by timer expiration. */ -#else - SI_MESGQ, - SI_TIMER, - SI_ASYNCIO, -#endif - SI_QUEUE, /* Sent by sigqueue. */ - SI_USER, /* Sent by kill, sigsend. */ - SI_KERNEL = 0x80 /* Send by kernel. */ - -#define SI_ASYNCNL SI_ASYNCNL -#define SI_TKILL SI_TKILL -#define SI_SIGIO SI_SIGIO -#define SI_ASYNCIO SI_ASYNCIO -#define SI_MESGQ SI_MESGQ -#define SI_TIMER SI_TIMER -#define SI_ASYNCIO SI_ASYNCIO -#define SI_QUEUE SI_QUEUE -#define SI_USER SI_USER -#define SI_KERNEL SI_KERNEL -}; - - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `si_code' values for SIGILL signal. */ -enum -{ - ILL_ILLOPC = 1, /* Illegal opcode. */ -# define ILL_ILLOPC ILL_ILLOPC - ILL_ILLOPN, /* Illegal operand. */ -# define ILL_ILLOPN ILL_ILLOPN - ILL_ILLADR, /* Illegal addressing mode. */ -# define ILL_ILLADR ILL_ILLADR - ILL_ILLTRP, /* Illegal trap. */ -# define ILL_ILLTRP ILL_ILLTRP - ILL_PRVOPC, /* Privileged opcode. */ -# define ILL_PRVOPC ILL_PRVOPC - ILL_PRVREG, /* Privileged register. */ -# define ILL_PRVREG ILL_PRVREG - ILL_COPROC, /* Coprocessor error. */ -# define ILL_COPROC ILL_COPROC - ILL_BADSTK /* Internal stack error. */ -# define ILL_BADSTK ILL_BADSTK -}; - -/* `si_code' values for SIGFPE signal. */ -enum -{ - FPE_INTDIV = 1, /* Integer divide by zero. */ -# define FPE_INTDIV FPE_INTDIV - FPE_INTOVF, /* Integer overflow. */ -# define FPE_INTOVF FPE_INTOVF - FPE_FLTDIV, /* Floating point divide by zero. */ -# define FPE_FLTDIV FPE_FLTDIV - FPE_FLTOVF, /* Floating point overflow. */ -# define FPE_FLTOVF FPE_FLTOVF - FPE_FLTUND, /* Floating point underflow. */ -# define FPE_FLTUND FPE_FLTUND - FPE_FLTRES, /* Floating point inexact result. */ -# define FPE_FLTRES FPE_FLTRES - FPE_FLTINV, /* Floating point invalid operation. */ -# define FPE_FLTINV FPE_FLTINV - FPE_FLTSUB /* Subscript out of range. */ -# define FPE_FLTSUB FPE_FLTSUB -}; - -/* `si_code' values for SIGSEGV signal. */ -enum -{ - SEGV_MAPERR = 1, /* Address not mapped to object. */ -# define SEGV_MAPERR SEGV_MAPERR - SEGV_ACCERR /* Invalid permissions for mapped object. */ -# define SEGV_ACCERR SEGV_ACCERR -}; - -/* `si_code' values for SIGBUS signal. */ -enum -{ - BUS_ADRALN = 1, /* Invalid address alignment. */ -# define BUS_ADRALN BUS_ADRALN - BUS_ADRERR, /* Non-existant physical address. */ -# define BUS_ADRERR BUS_ADRERR - BUS_OBJERR, /* Object specific hardware error. */ -# define BUS_OBJERR BUS_OBJERR - BUS_MCEERR_AR, /* Hardware memory error: action required. */ -# define BUS_MCEERR_AR BUS_MCEERR_AR - BUS_MCEERR_AO /* Hardware memory error: action optional. */ -# define BUS_MCEERR_AO BUS_MCEERR_AO -}; -# endif - -# ifdef __USE_XOPEN_EXTENDED -/* `si_code' values for SIGTRAP signal. */ -enum -{ - TRAP_BRKPT = 1, /* Process breakpoint. */ -# define TRAP_BRKPT TRAP_BRKPT - TRAP_TRACE /* Process trace trap. */ -# define TRAP_TRACE TRAP_TRACE -}; -# endif - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `si_code' values for SIGCHLD signal. */ -enum -{ - CLD_EXITED = 1, /* Child has exited. */ -# define CLD_EXITED CLD_EXITED - CLD_KILLED, /* Child was killed. */ -# define CLD_KILLED CLD_KILLED - CLD_DUMPED, /* Child terminated abnormally. */ -# define CLD_DUMPED CLD_DUMPED - CLD_TRAPPED, /* Traced child has trapped. */ -# define CLD_TRAPPED CLD_TRAPPED - CLD_STOPPED, /* Child has stopped. */ -# define CLD_STOPPED CLD_STOPPED - CLD_CONTINUED /* Stopped child has continued. */ -# define CLD_CONTINUED CLD_CONTINUED -}; - -/* `si_code' values for SIGPOLL signal. */ -enum -{ - POLL_IN = 1, /* Data input available. */ -# define POLL_IN POLL_IN - POLL_OUT, /* Output buffers available. */ -# define POLL_OUT POLL_OUT - POLL_MSG, /* Input message available. */ -# define POLL_MSG POLL_MSG - POLL_ERR, /* I/O error. */ -# define POLL_ERR POLL_ERR - POLL_PRI, /* High priority input available. */ -# define POLL_PRI POLL_PRI - POLL_HUP /* Device disconnected. */ -# define POLL_HUP POLL_HUP -}; -# endif - -/* Architectures might also add architecture-specific constants. - These are all considered GNU extensions. */ -#ifdef __USE_GNU -# include -#endif - -#endif diff --git a/sysdeps/unix/sysv/linux/bits/signalfd.h b/sysdeps/unix/sysv/linux/bits/signalfd.h deleted file mode 100644 index 9830b6953e..0000000000 --- a/sysdeps/unix/sysv/linux/bits/signalfd.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SIGNALFD_H -# error "Never use directly; include instead." -#endif - -/* Flags for signalfd. */ -enum - { - SFD_CLOEXEC = 02000000, -#define SFD_CLOEXEC SFD_CLOEXEC - SFD_NONBLOCK = 00004000 -#define SFD_NONBLOCK SFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/bits/signum.h b/sysdeps/unix/sysv/linux/bits/signum.h deleted file mode 100644 index e30efead0d..0000000000 --- a/sysdeps/unix/sysv/linux/bits/signum.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Signal number definitions. Linux version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef _SIGNAL_H - -/* Fake signal functions. */ -#define SIG_ERR ((__sighandler_t) -1) /* Error return. */ -#define SIG_DFL ((__sighandler_t) 0) /* Default action. */ -#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */ - -#ifdef __USE_XOPEN -# define SIG_HOLD ((__sighandler_t) 2) /* Add signal to hold mask. */ -#endif - - -/* Signals. */ -#define SIGHUP 1 /* Hangup (POSIX). */ -#define SIGINT 2 /* Interrupt (ANSI). */ -#define SIGQUIT 3 /* Quit (POSIX). */ -#define SIGILL 4 /* Illegal instruction (ANSI). */ -#define SIGTRAP 5 /* Trace trap (POSIX). */ -#define SIGABRT 6 /* Abort (ANSI). */ -#define SIGIOT 6 /* IOT trap (4.2 BSD). */ -#define SIGBUS 7 /* BUS error (4.2 BSD). */ -#define SIGFPE 8 /* Floating-point exception (ANSI). */ -#define SIGKILL 9 /* Kill, unblockable (POSIX). */ -#define SIGUSR1 10 /* User-defined signal 1 (POSIX). */ -#define SIGSEGV 11 /* Segmentation violation (ANSI). */ -#define SIGUSR2 12 /* User-defined signal 2 (POSIX). */ -#define SIGPIPE 13 /* Broken pipe (POSIX). */ -#define SIGALRM 14 /* Alarm clock (POSIX). */ -#define SIGTERM 15 /* Termination (ANSI). */ -#define SIGSTKFLT 16 /* Stack fault. */ -#define SIGCLD SIGCHLD /* Same as SIGCHLD (System V). */ -#define SIGCHLD 17 /* Child status has changed (POSIX). */ -#define SIGCONT 18 /* Continue (POSIX). */ -#define SIGSTOP 19 /* Stop, unblockable (POSIX). */ -#define SIGTSTP 20 /* Keyboard stop (POSIX). */ -#define SIGTTIN 21 /* Background read from tty (POSIX). */ -#define SIGTTOU 22 /* Background write to tty (POSIX). */ -#define SIGURG 23 /* Urgent condition on socket (4.2 BSD). */ -#define SIGXCPU 24 /* CPU limit exceeded (4.2 BSD). */ -#define SIGXFSZ 25 /* File size limit exceeded (4.2 BSD). */ -#define SIGVTALRM 26 /* Virtual alarm clock (4.2 BSD). */ -#define SIGPROF 27 /* Profiling alarm clock (4.2 BSD). */ -#define SIGWINCH 28 /* Window size change (4.3 BSD, Sun). */ -#define SIGPOLL SIGIO /* Pollable event occurred (System V). */ -#define SIGIO 29 /* I/O now possible (4.2 BSD). */ -#define SIGPWR 30 /* Power failure restart (System V). */ -#define SIGSYS 31 /* Bad system call. */ -#define SIGUNUSED 31 - -#define _NSIG 65 /* Biggest signal number + 1 - (including real-time signals). */ - -#define SIGRTMIN (__libc_current_sigrtmin ()) -#define SIGRTMAX (__libc_current_sigrtmax ()) - -/* These are the hard limits of the kernel. These values should not be - used directly at user level. */ -#define __SIGRTMIN 32 -#define __SIGRTMAX (_NSIG - 1) - -#endif /* included. */ diff --git a/sysdeps/unix/sysv/linux/bits/sigstack.h b/sysdeps/unix/sysv/linux/bits/sigstack.h deleted file mode 100644 index e6b6c7edcf..0000000000 --- a/sysdeps/unix/sysv/linux/bits/sigstack.h +++ /dev/null @@ -1,32 +0,0 @@ -/* sigstack, sigaltstack definitions. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SIGSTACK_H -#define _BITS_SIGSTACK_H 1 - -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H -# error "Never include this file directly. Use instead" -#endif - -/* Minimum stack size for a signal handler. */ -#define MINSIGSTKSZ 2048 - -/* System default stack size. */ -#define SIGSTKSZ 8192 - -#endif /* bits/sigstack.h */ diff --git a/sysdeps/unix/sysv/linux/bits/socket.h b/sysdeps/unix/sysv/linux/bits/socket.h deleted file mode 100644 index ec2bf8564f..0000000000 --- a/sysdeps/unix/sysv/linux/bits/socket.h +++ /dev/null @@ -1,447 +0,0 @@ -/* System-specific socket constants and types. Linux version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __BITS_SOCKET_H -#define __BITS_SOCKET_H - -#ifndef _SYS_SOCKET_H -# error "Never include directly; use instead." -#endif - -#define __need_size_t -#include - -#include - -/* Type for length arguments in socket calls. */ -#ifndef __socklen_t_defined -typedef __socklen_t socklen_t; -# define __socklen_t_defined -#endif - -/* Get the architecture-dependent definition of enum __socket_type. */ -#include - -/* Protocol families. */ -#define PF_UNSPEC 0 /* Unspecified. */ -#define PF_LOCAL 1 /* Local to host (pipes and file-domain). */ -#define PF_UNIX PF_LOCAL /* POSIX name for PF_LOCAL. */ -#define PF_FILE PF_LOCAL /* Another non-standard name for PF_LOCAL. */ -#define PF_INET 2 /* IP protocol family. */ -#define PF_AX25 3 /* Amateur Radio AX.25. */ -#define PF_IPX 4 /* Novell Internet Protocol. */ -#define PF_APPLETALK 5 /* Appletalk DDP. */ -#define PF_NETROM 6 /* Amateur radio NetROM. */ -#define PF_BRIDGE 7 /* Multiprotocol bridge. */ -#define PF_ATMPVC 8 /* ATM PVCs. */ -#define PF_X25 9 /* Reserved for X.25 project. */ -#define PF_INET6 10 /* IP version 6. */ -#define PF_ROSE 11 /* Amateur Radio X.25 PLP. */ -#define PF_DECnet 12 /* Reserved for DECnet project. */ -#define PF_NETBEUI 13 /* Reserved for 802.2LLC project. */ -#define PF_SECURITY 14 /* Security callback pseudo AF. */ -#define PF_KEY 15 /* PF_KEY key management API. */ -#define PF_NETLINK 16 -#define PF_ROUTE PF_NETLINK /* Alias to emulate 4.4BSD. */ -#define PF_PACKET 17 /* Packet family. */ -#define PF_ASH 18 /* Ash. */ -#define PF_ECONET 19 /* Acorn Econet. */ -#define PF_ATMSVC 20 /* ATM SVCs. */ -#define PF_RDS 21 /* RDS sockets. */ -#define PF_SNA 22 /* Linux SNA Project */ -#define PF_IRDA 23 /* IRDA sockets. */ -#define PF_PPPOX 24 /* PPPoX sockets. */ -#define PF_WANPIPE 25 /* Wanpipe API sockets. */ -#define PF_LLC 26 /* Linux LLC. */ -#define PF_IB 27 /* Native InfiniBand address. */ -#define PF_MPLS 28 /* MPLS. */ -#define PF_CAN 29 /* Controller Area Network. */ -#define PF_TIPC 30 /* TIPC sockets. */ -#define PF_BLUETOOTH 31 /* Bluetooth sockets. */ -#define PF_IUCV 32 /* IUCV sockets. */ -#define PF_RXRPC 33 /* RxRPC sockets. */ -#define PF_ISDN 34 /* mISDN sockets. */ -#define PF_PHONET 35 /* Phonet sockets. */ -#define PF_IEEE802154 36 /* IEEE 802.15.4 sockets. */ -#define PF_CAIF 37 /* CAIF sockets. */ -#define PF_ALG 38 /* Algorithm sockets. */ -#define PF_NFC 39 /* NFC sockets. */ -#define PF_VSOCK 40 /* vSockets. */ -#define PF_KCM 41 /* Kernel Connection Multiplexor. */ -#define PF_QIPCRTR 42 /* Qualcomm IPC Router. */ -#define PF_SMC 43 /* SMC sockets. */ -#define PF_MAX 44 /* For now.. */ - -/* Address families. */ -#define AF_UNSPEC PF_UNSPEC -#define AF_LOCAL PF_LOCAL -#define AF_UNIX PF_UNIX -#define AF_FILE PF_FILE -#define AF_INET PF_INET -#define AF_AX25 PF_AX25 -#define AF_IPX PF_IPX -#define AF_APPLETALK PF_APPLETALK -#define AF_NETROM PF_NETROM -#define AF_BRIDGE PF_BRIDGE -#define AF_ATMPVC PF_ATMPVC -#define AF_X25 PF_X25 -#define AF_INET6 PF_INET6 -#define AF_ROSE PF_ROSE -#define AF_DECnet PF_DECnet -#define AF_NETBEUI PF_NETBEUI -#define AF_SECURITY PF_SECURITY -#define AF_KEY PF_KEY -#define AF_NETLINK PF_NETLINK -#define AF_ROUTE PF_ROUTE -#define AF_PACKET PF_PACKET -#define AF_ASH PF_ASH -#define AF_ECONET PF_ECONET -#define AF_ATMSVC PF_ATMSVC -#define AF_RDS PF_RDS -#define AF_SNA PF_SNA -#define AF_IRDA PF_IRDA -#define AF_PPPOX PF_PPPOX -#define AF_WANPIPE PF_WANPIPE -#define AF_LLC PF_LLC -#define AF_IB PF_IB -#define AF_MPLS PF_MPLS -#define AF_CAN PF_CAN -#define AF_TIPC PF_TIPC -#define AF_BLUETOOTH PF_BLUETOOTH -#define AF_IUCV PF_IUCV -#define AF_RXRPC PF_RXRPC -#define AF_ISDN PF_ISDN -#define AF_PHONET PF_PHONET -#define AF_IEEE802154 PF_IEEE802154 -#define AF_CAIF PF_CAIF -#define AF_ALG PF_ALG -#define AF_NFC PF_NFC -#define AF_VSOCK PF_VSOCK -#define AF_KCM PF_KCM -#define AF_QIPCRTR PF_QIPCRTR -#define AF_SMC PF_SMC -#define AF_MAX PF_MAX - -/* Socket level values. Others are defined in the appropriate headers. - - XXX These definitions also should go into the appropriate headers as - far as they are available. */ -#define SOL_RAW 255 -#define SOL_DECNET 261 -#define SOL_X25 262 -#define SOL_PACKET 263 -#define SOL_ATM 264 /* ATM layer (cell level). */ -#define SOL_AAL 265 /* ATM Adaption Layer (packet level). */ -#define SOL_IRDA 266 -#define SOL_NETBEUI 267 -#define SOL_LLC 268 -#define SOL_DCCP 269 -#define SOL_NETLINK 270 -#define SOL_TIPC 271 -#define SOL_RXRPC 272 -#define SOL_PPPOL2TP 273 -#define SOL_BLUETOOTH 274 -#define SOL_PNPIPE 275 -#define SOL_RDS 276 -#define SOL_IUCV 277 -#define SOL_CAIF 278 -#define SOL_ALG 279 -#define SOL_NFC 280 -#define SOL_KCM 281 - -/* Maximum queue length specifiable by listen. */ -#define SOMAXCONN 128 - -/* Get the definition of the macro to define the common sockaddr members. */ -#include - -/* Structure describing a generic socket address. */ -struct sockaddr - { - __SOCKADDR_COMMON (sa_); /* Common data: address family and length. */ - char sa_data[14]; /* Address data. */ - }; - - -/* Structure large enough to hold any socket address (with the historical - exception of AF_UNIX). */ -#define __ss_aligntype unsigned long int -#define _SS_PADSIZE \ - (_SS_SIZE - __SOCKADDR_COMMON_SIZE - sizeof (__ss_aligntype)) - -struct sockaddr_storage - { - __SOCKADDR_COMMON (ss_); /* Address family, etc. */ - char __ss_padding[_SS_PADSIZE]; - __ss_aligntype __ss_align; /* Force desired alignment. */ - }; - - -/* Bits in the FLAGS argument to `send', `recv', et al. */ -enum - { - MSG_OOB = 0x01, /* Process out-of-band data. */ -#define MSG_OOB MSG_OOB - MSG_PEEK = 0x02, /* Peek at incoming messages. */ -#define MSG_PEEK MSG_PEEK - MSG_DONTROUTE = 0x04, /* Don't use local routing. */ -#define MSG_DONTROUTE MSG_DONTROUTE -#ifdef __USE_GNU - /* DECnet uses a different name. */ - MSG_TRYHARD = MSG_DONTROUTE, -# define MSG_TRYHARD MSG_DONTROUTE -#endif - MSG_CTRUNC = 0x08, /* Control data lost before delivery. */ -#define MSG_CTRUNC MSG_CTRUNC - MSG_PROXY = 0x10, /* Supply or ask second address. */ -#define MSG_PROXY MSG_PROXY - MSG_TRUNC = 0x20, -#define MSG_TRUNC MSG_TRUNC - MSG_DONTWAIT = 0x40, /* Nonblocking IO. */ -#define MSG_DONTWAIT MSG_DONTWAIT - MSG_EOR = 0x80, /* End of record. */ -#define MSG_EOR MSG_EOR - MSG_WAITALL = 0x100, /* Wait for a full request. */ -#define MSG_WAITALL MSG_WAITALL - MSG_FIN = 0x200, -#define MSG_FIN MSG_FIN - MSG_SYN = 0x400, -#define MSG_SYN MSG_SYN - MSG_CONFIRM = 0x800, /* Confirm path validity. */ -#define MSG_CONFIRM MSG_CONFIRM - MSG_RST = 0x1000, -#define MSG_RST MSG_RST - MSG_ERRQUEUE = 0x2000, /* Fetch message from error queue. */ -#define MSG_ERRQUEUE MSG_ERRQUEUE - MSG_NOSIGNAL = 0x4000, /* Do not generate SIGPIPE. */ -#define MSG_NOSIGNAL MSG_NOSIGNAL - MSG_MORE = 0x8000, /* Sender will send more. */ -#define MSG_MORE MSG_MORE - MSG_WAITFORONE = 0x10000, /* Wait for at least one packet to return.*/ -#define MSG_WAITFORONE MSG_WAITFORONE - MSG_BATCH = 0x40000, /* sendmmsg: more messages coming. */ -#define MSG_BATCH MSG_BATCH - MSG_FASTOPEN = 0x20000000, /* Send data in TCP SYN. */ -#define MSG_FASTOPEN MSG_FASTOPEN - - MSG_CMSG_CLOEXEC = 0x40000000 /* Set close_on_exit for file - descriptor received through - SCM_RIGHTS. */ -#define MSG_CMSG_CLOEXEC MSG_CMSG_CLOEXEC - }; - - -/* Structure describing messages sent by - `sendmsg' and received by `recvmsg'. */ -struct msghdr - { - void *msg_name; /* Address to send to/receive from. */ - socklen_t msg_namelen; /* Length of address data. */ - - struct iovec *msg_iov; /* Vector of data to send/receive into. */ - size_t msg_iovlen; /* Number of elements in the vector. */ - - void *msg_control; /* Ancillary data (eg BSD filedesc passing). */ - size_t msg_controllen; /* Ancillary data buffer length. - !! The type should be socklen_t but the - definition of the kernel is incompatible - with this. */ - - int msg_flags; /* Flags on received message. */ - }; - -/* Structure used for storage of ancillary data object information. */ -struct cmsghdr - { - size_t cmsg_len; /* Length of data in cmsg_data plus length - of cmsghdr structure. - !! The type should be socklen_t but the - definition of the kernel is incompatible - with this. */ - int cmsg_level; /* Originating protocol. */ - int cmsg_type; /* Protocol specific type. */ -#if __glibc_c99_flexarr_available - __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */ -#endif - }; - -/* Ancillary data object manipulation macros. */ -#if __glibc_c99_flexarr_available -# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data) -#else -# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1)) -#endif -#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg) -#define CMSG_FIRSTHDR(mhdr) \ - ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) \ - ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) 0) -#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \ - & (size_t) ~(sizeof (size_t) - 1)) -#define CMSG_SPACE(len) (CMSG_ALIGN (len) \ - + CMSG_ALIGN (sizeof (struct cmsghdr))) -#define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) - -extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr, - struct cmsghdr *__cmsg) __THROW; -#ifdef __USE_EXTERN_INLINES -# ifndef _EXTERN_INLINE -# define _EXTERN_INLINE __extern_inline -# endif -_EXTERN_INLINE struct cmsghdr * -__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg)) -{ - if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr)) - /* The kernel header does this so there may be a reason. */ - return (struct cmsghdr *) 0; - - __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg - + CMSG_ALIGN (__cmsg->cmsg_len)); - if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control - + __mhdr->msg_controllen) - || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len) - > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen))) - /* No more entries. */ - return (struct cmsghdr *) 0; - return __cmsg; -} -#endif /* Use `extern inline'. */ - -/* Socket level message types. This must match the definitions in - . */ -enum - { - SCM_RIGHTS = 0x01 /* Transfer file descriptors. */ -#define SCM_RIGHTS SCM_RIGHTS -#ifdef __USE_GNU - , SCM_CREDENTIALS = 0x02 /* Credentials passing. */ -# define SCM_CREDENTIALS SCM_CREDENTIALS -#endif - }; - -#ifdef __USE_GNU -/* User visible structure for SCM_CREDENTIALS message */ -struct ucred -{ - pid_t pid; /* PID of sending process. */ - uid_t uid; /* UID of sending process. */ - gid_t gid; /* GID of sending process. */ -}; -#endif - -/* Ugly workaround for unclean kernel headers. */ -#ifndef __USE_MISC -# ifndef FIOGETOWN -# define __SYS_SOCKET_H_undef_FIOGETOWN -# endif -# ifndef FIOSETOWN -# define __SYS_SOCKET_H_undef_FIOSETOWN -# endif -# ifndef SIOCATMARK -# define __SYS_SOCKET_H_undef_SIOCATMARK -# endif -# ifndef SIOCGPGRP -# define __SYS_SOCKET_H_undef_SIOCGPGRP -# endif -# ifndef SIOCGSTAMP -# define __SYS_SOCKET_H_undef_SIOCGSTAMP -# endif -# ifndef SIOCGSTAMPNS -# define __SYS_SOCKET_H_undef_SIOCGSTAMPNS -# endif -# ifndef SIOCSPGRP -# define __SYS_SOCKET_H_undef_SIOCSPGRP -# endif -#endif -#ifndef IOCSIZE_MASK -# define __SYS_SOCKET_H_undef_IOCSIZE_MASK -#endif -#ifndef IOCSIZE_SHIFT -# define __SYS_SOCKET_H_undef_IOCSIZE_SHIFT -#endif -#ifndef IOC_IN -# define __SYS_SOCKET_H_undef_IOC_IN -#endif -#ifndef IOC_INOUT -# define __SYS_SOCKET_H_undef_IOC_INOUT -#endif -#ifndef IOC_OUT -# define __SYS_SOCKET_H_undef_IOC_OUT -#endif - -/* Get socket manipulation related informations from kernel headers. */ -#include - -#ifndef __USE_MISC -# ifdef __SYS_SOCKET_H_undef_FIOGETOWN -# undef __SYS_SOCKET_H_undef_FIOGETOWN -# undef FIOGETOWN -# endif -# ifdef __SYS_SOCKET_H_undef_FIOSETOWN -# undef __SYS_SOCKET_H_undef_FIOSETOWN -# undef FIOSETOWN -# endif -# ifdef __SYS_SOCKET_H_undef_SIOCATMARK -# undef __SYS_SOCKET_H_undef_SIOCATMARK -# undef SIOCATMARK -# endif -# ifdef __SYS_SOCKET_H_undef_SIOCGPGRP -# undef __SYS_SOCKET_H_undef_SIOCGPGRP -# undef SIOCGPGRP -# endif -# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMP -# undef __SYS_SOCKET_H_undef_SIOCGSTAMP -# undef SIOCGSTAMP -# endif -# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMPNS -# undef __SYS_SOCKET_H_undef_SIOCGSTAMPNS -# undef SIOCGSTAMPNS -# endif -# ifdef __SYS_SOCKET_H_undef_SIOCSPGRP -# undef __SYS_SOCKET_H_undef_SIOCSPGRP -# undef SIOCSPGRP -# endif -#endif -#ifdef __SYS_SOCKET_H_undef_IOCSIZE_MASK -# undef __SYS_SOCKET_H_undef_IOCSIZE_MASK -# undef IOCSIZE_MASK -#endif -#ifdef __SYS_SOCKET_H_undef_IOCSIZE_SHIFT -# undef __SYS_SOCKET_H_undef_IOCSIZE_SHIFT -# undef IOCSIZE_SHIFT -#endif -#ifdef __SYS_SOCKET_H_undef_IOC_IN -# undef __SYS_SOCKET_H_undef_IOC_IN -# undef IOC_IN -#endif -#ifdef __SYS_SOCKET_H_undef_IOC_INOUT -# undef __SYS_SOCKET_H_undef_IOC_INOUT -# undef IOC_INOUT -#endif -#ifdef __SYS_SOCKET_H_undef_IOC_OUT -# undef __SYS_SOCKET_H_undef_IOC_OUT -# undef IOC_OUT -#endif - -/* Structure used to manipulate the SO_LINGER option. */ -struct linger - { - int l_onoff; /* Nonzero to linger on close. */ - int l_linger; /* Time to linger. */ - }; - -#endif /* bits/socket.h */ diff --git a/sysdeps/unix/sysv/linux/bits/socket_type.h b/sysdeps/unix/sysv/linux/bits/socket_type.h deleted file mode 100644 index fcb34bcc90..0000000000 --- a/sysdeps/unix/sysv/linux/bits/socket_type.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Define enum __socket_type for generic Linux. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SOCKET_H -# error "Never include directly; use instead." -#endif - -/* Types of sockets. */ -enum __socket_type -{ - SOCK_STREAM = 1, /* Sequenced, reliable, connection-based - byte streams. */ -#define SOCK_STREAM SOCK_STREAM - SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams - of fixed maximum length. */ -#define SOCK_DGRAM SOCK_DGRAM - SOCK_RAW = 3, /* Raw protocol interface. */ -#define SOCK_RAW SOCK_RAW - SOCK_RDM = 4, /* Reliably-delivered messages. */ -#define SOCK_RDM SOCK_RDM - SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based, - datagrams of fixed maximum length. */ -#define SOCK_SEQPACKET SOCK_SEQPACKET - SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */ -#define SOCK_DCCP SOCK_DCCP - SOCK_PACKET = 10, /* Linux specific way of getting packets - at the dev level. For writing rarp and - other similar things on the user level. */ -#define SOCK_PACKET SOCK_PACKET - - /* Flags to be ORed into the type parameter of socket and socketpair and - used for the flags parameter of paccept. */ - - SOCK_CLOEXEC = 02000000, /* Atomically set close-on-exec flag for the - new descriptor(s). */ -#define SOCK_CLOEXEC SOCK_CLOEXEC - SOCK_NONBLOCK = 00004000 /* Atomically mark descriptor(s) as - non-blocking. */ -#define SOCK_NONBLOCK SOCK_NONBLOCK -}; diff --git a/sysdeps/unix/sysv/linux/bits/ss_flags.h b/sysdeps/unix/sysv/linux/bits/ss_flags.h deleted file mode 100644 index 497b613a8c..0000000000 --- a/sysdeps/unix/sysv/linux/bits/ss_flags.h +++ /dev/null @@ -1,35 +0,0 @@ -/* ss_flags values for stack_t. Linux version. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SS_FLAGS_H -#define _BITS_SS_FLAGS_H 1 - -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H -# error "Never include this file directly. Use instead" -#endif - -/* Possible values for `ss_flags'. */ -enum -{ - SS_ONSTACK = 1, -#define SS_ONSTACK SS_ONSTACK - SS_DISABLE -#define SS_DISABLE SS_DISABLE -}; - -#endif /* bits/ss_flags.h */ diff --git a/sysdeps/unix/sysv/linux/bits/stat.h b/sysdeps/unix/sysv/linux/bits/stat.h deleted file mode 100644 index 187590e51e..0000000000 --- a/sysdeps/unix/sysv/linux/bits/stat.h +++ /dev/null @@ -1,172 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STAT_H -#define _BITS_STAT_H 1 - -/* Versions of the `struct stat' data structure. */ -#define _STAT_VER_LINUX_OLD 1 -#define _STAT_VER_KERNEL 1 -#define _STAT_VER_SVR4 2 -#define _STAT_VER_LINUX 3 -#define _STAT_VER _STAT_VER_LINUX /* The one defined below. */ - -/* Versions of the `xmknod' interface. */ -#define _MKNOD_VER_LINUX 1 -#define _MKNOD_VER_SVR4 2 -#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */ - - -struct stat - { - __dev_t st_dev; /* Device. */ - unsigned short int __pad1; -#ifndef __USE_FILE_OFFSET64 - __ino_t st_ino; /* File serial number. */ -#else - __ino_t __st_ino; /* 32bit file serial number. */ -#endif - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - unsigned short int __pad2; -#ifndef __USE_FILE_OFFSET64 - __off_t st_size; /* Size of file, in bytes. */ -#else - __off64_t st_size; /* Size of file, in bytes. */ -#endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - -#ifndef __USE_FILE_OFFSET64 - __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */ -#else - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -#endif -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif -#ifndef __USE_FILE_OFFSET64 - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; -#else - __ino64_t st_ino; /* File serial number. */ -#endif - }; - -#ifdef __USE_LARGEFILE64 -struct stat64 - { - __dev_t st_dev; /* Device. */ - unsigned int __pad1; - - __ino_t __st_ino; /* 32bit file serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - unsigned int __pad2; - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - __ino64_t st_ino; /* File serial number. */ - }; -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -/* Nanosecond resolution time values are supported. */ -#define _STATBUF_ST_NSEC - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFIFO 0010000 /* FIFO. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ - -/* POSIX.1b objects. Note that these macros always evaluate to zero. But - they do it by enforcing the correct use of the macros. */ -#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 0400 /* Read by owner. */ -#define __S_IWRITE 0200 /* Write by owner. */ -#define __S_IEXEC 0100 /* Execute by owner. */ - -#ifdef __USE_ATFILE -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) -#endif - -#endif /* bits/stat.h */ diff --git a/sysdeps/unix/sysv/linux/bits/statfs.h b/sysdeps/unix/sysv/linux/bits/statfs.h deleted file mode 100644 index 54329613f3..0000000000 --- a/sysdeps/unix/sysv/linux/bits/statfs.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_STATFS_H -# error "Never include directly; use instead." -#endif - -#include - -struct statfs - { - __fsword_t f_type; - __fsword_t f_bsize; -#ifndef __USE_FILE_OFFSET64 - __fsblkcnt_t f_blocks; - __fsblkcnt_t f_bfree; - __fsblkcnt_t f_bavail; - __fsfilcnt_t f_files; - __fsfilcnt_t f_ffree; -#else - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; -#endif - __fsid_t f_fsid; - __fsword_t f_namelen; - __fsword_t f_frsize; - __fsword_t f_flags; - __fsword_t f_spare[4]; - }; - -#ifdef __USE_LARGEFILE64 -struct statfs64 - { - __fsword_t f_type; - __fsword_t f_bsize; - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; - __fsid_t f_fsid; - __fsword_t f_namelen; - __fsword_t f_frsize; - __fsword_t f_flags; - __fsword_t f_spare[4]; - }; -#endif - -/* Tell code we have these members. */ -#define _STATFS_F_NAMELEN -#define _STATFS_F_FRSIZE -#define _STATFS_F_FLAGS diff --git a/sysdeps/unix/sysv/linux/bits/statvfs.h b/sysdeps/unix/sysv/linux/bits/statvfs.h deleted file mode 100644 index 4552517dd3..0000000000 --- a/sysdeps/unix/sysv/linux/bits/statvfs.h +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_STATVFS_H -# error "Never include directly; use instead." -#endif - -#include /* For __fsblkcnt_t and __fsfilcnt_t. */ - -#if (__WORDSIZE == 32 \ - && (!defined __SYSCALL_WORDSIZE || __SYSCALL_WORDSIZE == 32)) -#define _STATVFSBUF_F_UNUSED -#endif - -struct statvfs - { - unsigned long int f_bsize; - unsigned long int f_frsize; -#ifndef __USE_FILE_OFFSET64 - __fsblkcnt_t f_blocks; - __fsblkcnt_t f_bfree; - __fsblkcnt_t f_bavail; - __fsfilcnt_t f_files; - __fsfilcnt_t f_ffree; - __fsfilcnt_t f_favail; -#else - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; - __fsfilcnt64_t f_favail; -#endif - unsigned long int f_fsid; -#ifdef _STATVFSBUF_F_UNUSED - int __f_unused; -#endif - unsigned long int f_flag; - unsigned long int f_namemax; - int __f_spare[6]; - }; - -#ifdef __USE_LARGEFILE64 -struct statvfs64 - { - unsigned long int f_bsize; - unsigned long int f_frsize; - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; - __fsfilcnt64_t f_favail; - unsigned long int f_fsid; -#ifdef _STATVFSBUF_F_UNUSED - int __f_unused; -#endif - unsigned long int f_flag; - unsigned long int f_namemax; - int __f_spare[6]; - }; -#endif - -/* Definitions for the flag in `f_flag'. These definitions should be - kept in sync with the definitions in . */ -enum -{ - ST_RDONLY = 1, /* Mount read-only. */ -#define ST_RDONLY ST_RDONLY - ST_NOSUID = 2 /* Ignore suid and sgid bits. */ -#define ST_NOSUID ST_NOSUID -#ifdef __USE_GNU - , - ST_NODEV = 4, /* Disallow access to device special files. */ -# define ST_NODEV ST_NODEV - ST_NOEXEC = 8, /* Disallow program execution. */ -# define ST_NOEXEC ST_NOEXEC - ST_SYNCHRONOUS = 16, /* Writes are synced at once. */ -# define ST_SYNCHRONOUS ST_SYNCHRONOUS - ST_MANDLOCK = 64, /* Allow mandatory locks on an FS. */ -# define ST_MANDLOCK ST_MANDLOCK - ST_WRITE = 128, /* Write on file/directory/symlink. */ -# define ST_WRITE ST_WRITE - ST_APPEND = 256, /* Append-only file. */ -# define ST_APPEND ST_APPEND - ST_IMMUTABLE = 512, /* Immutable file. */ -# define ST_IMMUTABLE ST_IMMUTABLE - ST_NOATIME = 1024, /* Do not update access times. */ -# define ST_NOATIME ST_NOATIME - ST_NODIRATIME = 2048, /* Do not update directory access times. */ -# define ST_NODIRATIME ST_NODIRATIME - ST_RELATIME = 4096 /* Update atime relative to mtime/ctime. */ -# define ST_RELATIME ST_RELATIME -#endif /* Use GNU. */ -}; diff --git a/sysdeps/unix/sysv/linux/bits/sys_errlist.h b/sysdeps/unix/sysv/linux/bits/sys_errlist.h deleted file mode 100644 index b4d2c956df..0000000000 --- a/sysdeps/unix/sysv/linux/bits/sys_errlist.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Declare sys_errlist and sys_nerr, or don't. Compatibility (do) version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _STDIO_H -# error "Never include directly; use instead." -#endif - -/* sys_errlist and sys_nerr are deprecated. Use strerror instead. */ - -#ifdef __USE_MISC -extern int sys_nerr; -extern const char *const sys_errlist[]; -#endif -#ifdef __USE_GNU -extern int _sys_nerr; -extern const char *const _sys_errlist[]; -#endif diff --git a/sysdeps/unix/sysv/linux/bits/sysctl.h b/sysdeps/unix/sysv/linux/bits/sysctl.h deleted file mode 100644 index 81447b2f74..0000000000 --- a/sysdeps/unix/sysv/linux/bits/sysctl.h +++ /dev/null @@ -1 +0,0 @@ -/* Empty file. */ diff --git a/sysdeps/unix/sysv/linux/bits/termios.h b/sysdeps/unix/sysv/linux/bits/termios.h deleted file mode 100644 index 495fa8b16d..0000000000 --- a/sysdeps/unix/sysv/linux/bits/termios.h +++ /dev/null @@ -1,219 +0,0 @@ -/* termios type and macro definitions. Linux version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TERMIOS_H -# error "Never include directly; use instead." -#endif - -typedef unsigned char cc_t; -typedef unsigned int speed_t; -typedef unsigned int tcflag_t; - -#define NCCS 32 -struct termios - { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline */ - cc_t c_cc[NCCS]; /* control characters */ - speed_t c_ispeed; /* input speed */ - speed_t c_ospeed; /* output speed */ -#define _HAVE_STRUCT_TERMIOS_C_ISPEED 1 -#define _HAVE_STRUCT_TERMIOS_C_OSPEED 1 - }; - -/* c_cc characters */ -#define VINTR 0 -#define VQUIT 1 -#define VERASE 2 -#define VKILL 3 -#define VEOF 4 -#define VTIME 5 -#define VMIN 6 -#define VSWTC 7 -#define VSTART 8 -#define VSTOP 9 -#define VSUSP 10 -#define VEOL 11 -#define VREPRINT 12 -#define VDISCARD 13 -#define VWERASE 14 -#define VLNEXT 15 -#define VEOL2 16 - -/* c_iflag bits */ -#define IGNBRK 0000001 -#define BRKINT 0000002 -#define IGNPAR 0000004 -#define PARMRK 0000010 -#define INPCK 0000020 -#define ISTRIP 0000040 -#define INLCR 0000100 -#define IGNCR 0000200 -#define ICRNL 0000400 -#define IUCLC 0001000 -#define IXON 0002000 -#define IXANY 0004000 -#define IXOFF 0010000 -#define IMAXBEL 0020000 -#define IUTF8 0040000 - -/* c_oflag bits */ -#define OPOST 0000001 -#define OLCUC 0000002 -#define ONLCR 0000004 -#define OCRNL 0000010 -#define ONOCR 0000020 -#define ONLRET 0000040 -#define OFILL 0000100 -#define OFDEL 0000200 -#if defined __USE_MISC || defined __USE_XOPEN -# define NLDLY 0000400 -# define NL0 0000000 -# define NL1 0000400 -# define CRDLY 0003000 -# define CR0 0000000 -# define CR1 0001000 -# define CR2 0002000 -# define CR3 0003000 -# define TABDLY 0014000 -# define TAB0 0000000 -# define TAB1 0004000 -# define TAB2 0010000 -# define TAB3 0014000 -# define BSDLY 0020000 -# define BS0 0000000 -# define BS1 0020000 -# define FFDLY 0100000 -# define FF0 0000000 -# define FF1 0100000 -#endif - -#define VTDLY 0040000 -#define VT0 0000000 -#define VT1 0040000 - -#ifdef __USE_MISC -# define XTABS 0014000 -#endif - -/* c_cflag bit meaning */ -#ifdef __USE_MISC -# define CBAUD 0010017 -#endif -#define B0 0000000 /* hang up */ -#define B50 0000001 -#define B75 0000002 -#define B110 0000003 -#define B134 0000004 -#define B150 0000005 -#define B200 0000006 -#define B300 0000007 -#define B600 0000010 -#define B1200 0000011 -#define B1800 0000012 -#define B2400 0000013 -#define B4800 0000014 -#define B9600 0000015 -#define B19200 0000016 -#define B38400 0000017 -#ifdef __USE_MISC -# define EXTA B19200 -# define EXTB B38400 -#endif -#define CSIZE 0000060 -#define CS5 0000000 -#define CS6 0000020 -#define CS7 0000040 -#define CS8 0000060 -#define CSTOPB 0000100 -#define CREAD 0000200 -#define PARENB 0000400 -#define PARODD 0001000 -#define HUPCL 0002000 -#define CLOCAL 0004000 -#ifdef __USE_MISC -# define CBAUDEX 0010000 -#endif -#define B57600 0010001 -#define B115200 0010002 -#define B230400 0010003 -#define B460800 0010004 -#define B500000 0010005 -#define B576000 0010006 -#define B921600 0010007 -#define B1000000 0010010 -#define B1152000 0010011 -#define B1500000 0010012 -#define B2000000 0010013 -#define B2500000 0010014 -#define B3000000 0010015 -#define B3500000 0010016 -#define B4000000 0010017 -#define __MAX_BAUD B4000000 -#ifdef __USE_MISC -# define CIBAUD 002003600000 /* input baud rate (not used) */ -# define CMSPAR 010000000000 /* mark or space (stick) parity */ -# define CRTSCTS 020000000000 /* flow control */ -#endif - -/* c_lflag bits */ -#define ISIG 0000001 -#define ICANON 0000002 -#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K) -# define XCASE 0000004 -#endif -#define ECHO 0000010 -#define ECHOE 0000020 -#define ECHOK 0000040 -#define ECHONL 0000100 -#define NOFLSH 0000200 -#define TOSTOP 0000400 -#ifdef __USE_MISC -# define ECHOCTL 0001000 -# define ECHOPRT 0002000 -# define ECHOKE 0004000 -# define FLUSHO 0010000 -# define PENDIN 0040000 -#endif -#define IEXTEN 0100000 -#ifdef __USE_MISC -# define EXTPROC 0200000 -#endif - -/* tcflow() and TCXONC use these */ -#define TCOOFF 0 -#define TCOON 1 -#define TCIOFF 2 -#define TCION 3 - -/* tcflush() and TCFLSH use these */ -#define TCIFLUSH 0 -#define TCOFLUSH 1 -#define TCIOFLUSH 2 - -/* tcsetattr uses these */ -#define TCSANOW 0 -#define TCSADRAIN 1 -#define TCSAFLUSH 2 - - -#define _IOT_termios /* Hurd ioctl type field. */ \ - _IOT (_IOTS (cflag_t), 4, _IOTS (cc_t), NCCS, _IOTS (speed_t), 2) diff --git a/sysdeps/unix/sysv/linux/bits/time.h b/sysdeps/unix/sysv/linux/bits/time.h deleted file mode 100644 index f00154f7ba..0000000000 --- a/sysdeps/unix/sysv/linux/bits/time.h +++ /dev/null @@ -1,83 +0,0 @@ -/* System-dependent timing definitions. Linux version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * Never include this file directly; use instead. - */ - -#ifndef _BITS_TIME_H -#define _BITS_TIME_H 1 - -#include - -/* ISO/IEC 9899:1999 7.23.1: Components of time - The macro `CLOCKS_PER_SEC' is an expression with type `clock_t' that is - the number per second of the value returned by the `clock' function. */ -/* CAE XSH, Issue 4, Version 2: - The value of CLOCKS_PER_SEC is required to be 1 million on all - XSI-conformant systems. */ -#define CLOCKS_PER_SEC ((__clock_t) 1000000) - -#if (!defined __STRICT_ANSI__ || defined __USE_POSIX) \ - && !defined __USE_XOPEN2K -/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK - presents the real value for clock ticks per second for the system. */ -extern long int __sysconf (int); -# define CLK_TCK ((__clock_t) __sysconf (2)) /* 2 is _SC_CLK_TCK */ -#endif - -#ifdef __USE_POSIX199309 -/* Identifier for system-wide realtime clock. */ -# define CLOCK_REALTIME 0 -/* Monotonic system-wide clock. */ -# define CLOCK_MONOTONIC 1 -/* High-resolution timer from the CPU. */ -# define CLOCK_PROCESS_CPUTIME_ID 2 -/* Thread-specific CPU-time clock. */ -# define CLOCK_THREAD_CPUTIME_ID 3 -/* Monotonic system-wide clock, not adjusted for frequency scaling. */ -# define CLOCK_MONOTONIC_RAW 4 -/* Identifier for system-wide realtime clock, updated only on ticks. */ -# define CLOCK_REALTIME_COARSE 5 -/* Monotonic system-wide clock, updated only on ticks. */ -# define CLOCK_MONOTONIC_COARSE 6 -/* Monotonic system-wide clock that includes time spent in suspension. */ -# define CLOCK_BOOTTIME 7 -/* Like CLOCK_REALTIME but also wakes suspended system. */ -# define CLOCK_REALTIME_ALARM 8 -/* Like CLOCK_BOOTTIME but also wakes suspended system. */ -# define CLOCK_BOOTTIME_ALARM 9 -/* Like CLOCK_REALTIME but in International Atomic Time. */ -# define CLOCK_TAI 11 - -/* Flag to indicate time is absolute. */ -# define TIMER_ABSTIME 1 -#endif - -#ifdef __USE_GNU -# include - -__BEGIN_DECLS - -/* Tune a POSIX clock. */ -extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __THROW; - -__END_DECLS -#endif /* use GNU */ - -#endif /* bits/time.h */ diff --git a/sysdeps/unix/sysv/linux/bits/timerfd.h b/sysdeps/unix/sysv/linux/bits/timerfd.h deleted file mode 100644 index 021f9c11fd..0000000000 --- a/sysdeps/unix/sysv/linux/bits/timerfd.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_TIMERFD_H -# error "Never use directly; include instead." -#endif - -/* Bits to be set in the FLAGS parameter of `timerfd_create'. */ -enum - { - TFD_CLOEXEC = 02000000, -#define TFD_CLOEXEC TFD_CLOEXEC - TFD_NONBLOCK = 00004000 -#define TFD_NONBLOCK TFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/bits/timex.h b/sysdeps/unix/sysv/linux/bits/timex.h deleted file mode 100644 index 544bc62e54..0000000000 --- a/sysdeps/unix/sysv/linux/bits/timex.h +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_TIMEX_H -#define _BITS_TIMEX_H 1 - -#include -#include - -/* These definitions from linux/timex.h as of 3.18. */ - -struct timex -{ - unsigned int modes; /* mode selector */ - __syscall_slong_t offset; /* time offset (usec) */ - __syscall_slong_t freq; /* frequency offset (scaled ppm) */ - __syscall_slong_t maxerror; /* maximum error (usec) */ - __syscall_slong_t esterror; /* estimated error (usec) */ - int status; /* clock command/status */ - __syscall_slong_t constant; /* pll time constant */ - __syscall_slong_t precision; /* clock precision (usec) (ro) */ - __syscall_slong_t tolerance; /* clock frequency tolerance (ppm) (ro) */ - struct timeval time; /* (read only, except for ADJ_SETOFFSET) */ - __syscall_slong_t tick; /* (modified) usecs between clock ticks */ - __syscall_slong_t ppsfreq; /* pps frequency (scaled ppm) (ro) */ - __syscall_slong_t jitter; /* pps jitter (us) (ro) */ - int shift; /* interval duration (s) (shift) (ro) */ - __syscall_slong_t stabil; /* pps stability (scaled ppm) (ro) */ - __syscall_slong_t jitcnt; /* jitter limit exceeded (ro) */ - __syscall_slong_t calcnt; /* calibration intervals (ro) */ - __syscall_slong_t errcnt; /* calibration errors (ro) */ - __syscall_slong_t stbcnt; /* stability limit exceeded (ro) */ - - int tai; /* TAI offset (ro) */ - - /* ??? */ - int :32; int :32; int :32; int :32; - int :32; int :32; int :32; int :32; - int :32; int :32; int :32; -}; - -/* Mode codes (timex.mode) */ -#define ADJ_OFFSET 0x0001 /* time offset */ -#define ADJ_FREQUENCY 0x0002 /* frequency offset */ -#define ADJ_MAXERROR 0x0004 /* maximum time error */ -#define ADJ_ESTERROR 0x0008 /* estimated time error */ -#define ADJ_STATUS 0x0010 /* clock status */ -#define ADJ_TIMECONST 0x0020 /* pll time constant */ -#define ADJ_TAI 0x0080 /* set TAI offset */ -#define ADJ_SETOFFSET 0x0100 /* add 'time' to current time */ -#define ADJ_MICRO 0x1000 /* select microsecond resolution */ -#define ADJ_NANO 0x2000 /* select nanosecond resolution */ -#define ADJ_TICK 0x4000 /* tick value */ -#define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime */ -#define ADJ_OFFSET_SS_READ 0xa001 /* read-only adjtime */ - -/* xntp 3.4 compatibility names */ -#define MOD_OFFSET ADJ_OFFSET -#define MOD_FREQUENCY ADJ_FREQUENCY -#define MOD_MAXERROR ADJ_MAXERROR -#define MOD_ESTERROR ADJ_ESTERROR -#define MOD_STATUS ADJ_STATUS -#define MOD_TIMECONST ADJ_TIMECONST -#define MOD_CLKB ADJ_TICK -#define MOD_CLKA ADJ_OFFSET_SINGLESHOT /* 0x8000 in original */ -#define MOD_TAI ADJ_TAI -#define MOD_MICRO ADJ_MICRO -#define MOD_NANO ADJ_NANO - - -/* Status codes (timex.status) */ -#define STA_PLL 0x0001 /* enable PLL updates (rw) */ -#define STA_PPSFREQ 0x0002 /* enable PPS freq discipline (rw) */ -#define STA_PPSTIME 0x0004 /* enable PPS time discipline (rw) */ -#define STA_FLL 0x0008 /* select frequency-lock mode (rw) */ - -#define STA_INS 0x0010 /* insert leap (rw) */ -#define STA_DEL 0x0020 /* delete leap (rw) */ -#define STA_UNSYNC 0x0040 /* clock unsynchronized (rw) */ -#define STA_FREQHOLD 0x0080 /* hold frequency (rw) */ - -#define STA_PPSSIGNAL 0x0100 /* PPS signal present (ro) */ -#define STA_PPSJITTER 0x0200 /* PPS signal jitter exceeded (ro) */ -#define STA_PPSWANDER 0x0400 /* PPS signal wander exceeded (ro) */ -#define STA_PPSERROR 0x0800 /* PPS signal calibration error (ro) */ - -#define STA_CLOCKERR 0x1000 /* clock hardware fault (ro) */ -#define STA_NANO 0x2000 /* resolution (0 = us, 1 = ns) (ro) */ -#define STA_MODE 0x4000 /* mode (0 = PLL, 1 = FLL) (ro) */ -#define STA_CLK 0x8000 /* clock source (0 = A, 1 = B) (ro) */ - -/* Read-only bits */ -#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \ - STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK) - -#endif /* bits/timex.h */ diff --git a/sysdeps/unix/sysv/linux/bits/types/__sigset_t.h b/sysdeps/unix/sysv/linux/bits/types/__sigset_t.h deleted file mode 100644 index e2f18acf30..0000000000 --- a/sysdeps/unix/sysv/linux/bits/types/__sigset_t.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef ____sigset_t_defined -#define ____sigset_t_defined - -#define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int))) -typedef struct -{ - unsigned long int __val[_SIGSET_NWORDS]; -} __sigset_t; - -#endif diff --git a/sysdeps/unix/sysv/linux/bits/types/sigevent_t.h b/sysdeps/unix/sysv/linux/bits/types/sigevent_t.h deleted file mode 100644 index 0d4857b16e..0000000000 --- a/sysdeps/unix/sysv/linux/bits/types/sigevent_t.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef __sigevent_t_defined -#define __sigevent_t_defined 1 - -#include -#include -#include - -#define __SIGEV_MAX_SIZE 64 -#if __WORDSIZE == 64 -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4) -#else -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3) -#endif - -/* Forward declaration. */ -#ifndef __have_pthread_attr_t -typedef union pthread_attr_t pthread_attr_t; -# define __have_pthread_attr_t 1 -#endif - -/* Structure to transport application-defined values with signals. */ -typedef struct sigevent - { - sigval_t sigev_value; - int sigev_signo; - int sigev_notify; - - union - { - int _pad[__SIGEV_PAD_SIZE]; - - /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the - thread to receive the signal. */ - __pid_t _tid; - - struct - { - void (*_function) (sigval_t); /* Function to start. */ - pthread_attr_t *_attribute; /* Thread attributes. */ - } _sigev_thread; - } _sigev_un; - } sigevent_t; - -/* POSIX names to access some of the members. */ -#define sigev_notify_function _sigev_un._sigev_thread._function -#define sigev_notify_attributes _sigev_un._sigev_thread._attribute - -#endif diff --git a/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h b/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h deleted file mode 100644 index bed69148f9..0000000000 --- a/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h +++ /dev/null @@ -1,151 +0,0 @@ -#ifndef __siginfo_t_defined -#define __siginfo_t_defined 1 - -#include -#include -#include - -#define __SI_MAX_SIZE 128 -#if __WORDSIZE == 64 -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) -#else -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3) -#endif - -/* Some fields of siginfo_t have architecture-specific variations. */ -#include -#ifndef __SI_ALIGNMENT -# define __SI_ALIGNMENT /* nothing */ -#endif -#ifndef __SI_BAND_TYPE -# define __SI_BAND_TYPE long int -#endif -#ifndef __SI_CLOCK_T -# define __SI_CLOCK_T __clock_t -#endif -#ifndef __SI_ERRNO_THEN_CODE -# define __SI_ERRNO_THEN_CODE 1 -#endif -#ifndef __SI_HAVE_SIGSYS -# define __SI_HAVE_SIGSYS 1 -#endif -#ifndef __SI_SIGFAULT_ADDL -# define __SI_SIGFAULT_ADDL /* nothing */ -#endif - -typedef struct - { - int si_signo; /* Signal number. */ -#if __SI_ERRNO_THEN_CODE - int si_errno; /* If non-zero, an errno value associated with - this signal, as defined in . */ - int si_code; /* Signal code. */ -#else - int si_code; - int si_errno; -#endif -#if __WORDSIZE == 64 - int __pad0; /* Explicit padding. */ -#endif - - union - { - int _pad[__SI_PAD_SIZE]; - - /* kill(). */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - } _kill; - - /* POSIX.1b timers. */ - struct - { - int si_tid; /* Timer ID. */ - int si_overrun; /* Overrun count. */ - sigval_t si_sigval; /* Signal value. */ - } _timer; - - /* POSIX.1b signals. */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - sigval_t si_sigval; /* Signal value. */ - } _rt; - - /* SIGCHLD. */ - struct - { - __pid_t si_pid; /* Which child. */ - __uid_t si_uid; /* Real user ID of sending process. */ - int si_status; /* Exit value or signal. */ - __SI_CLOCK_T si_utime; - __SI_CLOCK_T si_stime; - } _sigchld; - - /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */ - struct - { - void *si_addr; /* Faulting insn/memory ref. */ - __SI_SIGFAULT_ADDL - short int si_addr_lsb; /* Valid LSB of the reported address. */ - union - { - /* used when si_code=SEGV_BNDERR */ - struct - { - void *_lower; - void *_upper; - } _addr_bnd; - /* used when si_code=SEGV_PKUERR */ - __uint32_t _pkey; - } _bounds; - } _sigfault; - - /* SIGPOLL. */ - struct - { - long int si_band; /* Band event for SIGPOLL. */ - int si_fd; - } _sigpoll; - - /* SIGSYS. */ -#if __SI_HAVE_SIGSYS - struct - { - void *_call_addr; /* Calling user insn. */ - int _syscall; /* Triggering system call number. */ - unsigned int _arch; /* AUDIT_ARCH_* of syscall. */ - } _sigsys; -#endif - } _sifields; - } siginfo_t __SI_ALIGNMENT; - - -/* X/Open requires some more fields with fixed names. */ -#define si_pid _sifields._kill.si_pid -#define si_uid _sifields._kill.si_uid -#define si_timerid _sifields._timer.si_tid -#define si_overrun _sifields._timer.si_overrun -#define si_status _sifields._sigchld.si_status -#define si_utime _sifields._sigchld.si_utime -#define si_stime _sifields._sigchld.si_stime -#define si_value _sifields._rt.si_sigval -#define si_int _sifields._rt.si_sigval.sival_int -#define si_ptr _sifields._rt.si_sigval.sival_ptr -#define si_addr _sifields._sigfault.si_addr -#define si_addr_lsb _sifields._sigfault.si_addr_lsb -#define si_lower _sifields._sigfault._bounds._addr_bnd._lower -#define si_upper _sifields._sigfault._bounds._addr_bnd._upper -#define si_pkey _sifields._sigfault._bounds._pkey -#define si_band _sifields._sigpoll.si_band -#define si_fd _sifields._sigpoll.si_fd -#if __SI_HAVE_SIGSYS -# define si_call_addr _sifields._sigsys._call_addr -# define si_syscall _sifields._sigsys._syscall -# define si_arch _sifields._sigsys._arch -#endif - -#endif diff --git a/sysdeps/unix/sysv/linux/bits/types/stack_t.h b/sysdeps/unix/sysv/linux/bits/types/stack_t.h deleted file mode 100644 index 373c227930..0000000000 --- a/sysdeps/unix/sysv/linux/bits/types/stack_t.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Define stack_t. Linux version. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __stack_t_defined -#define __stack_t_defined 1 - -#define __need_size_t -#include - -/* Structure describing a signal stack. */ -typedef struct - { - void *ss_sp; - int ss_flags; - size_t ss_size; - } stack_t; - -#endif diff --git a/sysdeps/unix/sysv/linux/bits/uio.h b/sysdeps/unix/sysv/linux/bits/uio.h deleted file mode 100644 index d5701f8171..0000000000 --- a/sysdeps/unix/sysv/linux/bits/uio.h +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined _SYS_UIO_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_UIO_H -#define _BITS_UIO_H 1 - -#include - - -/* We should normally use the Linux kernel header file to define this - type and macros but this calls for trouble because of the header - includes other kernel headers. */ - -/* Size of object which can be written atomically. - - This macro has different values in different kernel versions. The - latest versions of the kernel use 1024 and this is good choice. Since - the C library implementation of readv/writev is able to emulate the - functionality even if the currently running kernel does not support - this large value the readv/writev call will not fail because of this. */ -#define UIO_MAXIOV 1024 - - -#include - -#endif - - -#ifdef __USE_GNU -# if defined _SYS_UIO_H && !defined _BITS_UIO_H_FOR_SYS_UIO_H -# define _BITS_UIO_H_FOR_SYS_UIO_H 1 - -__BEGIN_DECLS - -/* Read from another process' address space. */ -extern ssize_t process_vm_readv (pid_t __pid, const struct iovec *__lvec, - unsigned long int __liovcnt, - const struct iovec *__rvec, - unsigned long int __riovcnt, - unsigned long int __flags) - __THROW; - -/* Write to another process' address space. */ -extern ssize_t process_vm_writev (pid_t __pid, const struct iovec *__lvec, - unsigned long int __liovcnt, - const struct iovec *__rvec, - unsigned long int __riovcnt, - unsigned long int __flags) - __THROW; - -__END_DECLS - -# endif - -/* Flags for preadv2/pwritev2: */ -#define RWF_HIPRI 0x00000001 /* High priority request. */ -#define RWF_DSYNC 0x00000002 /* per-IO O_DSYNC. */ -#define RWF_SYNC 0x00000004 /* per-IO O_SYNC. */ - -#endif diff --git a/sysdeps/unix/sysv/linux/bits/utsname.h b/sysdeps/unix/sysv/linux/bits/utsname.h deleted file mode 100644 index ed99a4c62b..0000000000 --- a/sysdeps/unix/sysv/linux/bits/utsname.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_UTSNAME_H -# error "Never include directly; use instead." -#endif - -/* Length of the entries in `struct utsname' is 65. */ -#define _UTSNAME_LENGTH 65 - -/* Linux provides as additional information in the `struct utsname' - the name of the current domain. Define _UTSNAME_DOMAIN_LENGTH - to a value != 0 to activate this entry. */ -#define _UTSNAME_DOMAIN_LENGTH _UTSNAME_LENGTH diff --git a/sysdeps/unix/sysv/linux/bits/waitflags.h b/sysdeps/unix/sysv/linux/bits/waitflags.h deleted file mode 100644 index 7dcb7b2f34..0000000000 --- a/sysdeps/unix/sysv/linux/bits/waitflags.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Definitions of flag bits for `waitpid' et al. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined _SYS_WAIT_H && !defined _STDLIB_H -# error "Never include directly; use instead." -#endif - - -/* Bits in the third argument to `waitpid'. */ -#define WNOHANG 1 /* Don't block waiting. */ -#define WUNTRACED 2 /* Report status of stopped children. */ - -/* Bits in the fourth argument to `waitid'. */ -#define WSTOPPED 2 /* Report stopped child (same as WUNTRACED). */ -#define WEXITED 4 /* Report dead child. */ -#define WCONTINUED 8 /* Report continued child. */ -#define WNOWAIT 0x01000000 /* Don't reap, just poll status. */ - -#define __WNOTHREAD 0x20000000 /* Don't wait on children of other threads - in this group */ -#define __WALL 0x40000000 /* Wait for any child. */ -#define __WCLONE 0x80000000 /* Wait for cloned process. */ diff --git a/sysdeps/unix/sysv/linux/check_native.c b/sysdeps/unix/sysv/linux/check_native.c deleted file mode 100644 index 7e5a7c9be3..0000000000 --- a/sysdeps/unix/sysv/linux/check_native.c +++ /dev/null @@ -1,177 +0,0 @@ -/* Determine whether interfaces use native transport. Linux version. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include "netlinkaccess.h" - -void -__check_native (uint32_t a1_index, int *a1_native, - uint32_t a2_index, int *a2_native) -{ - int fd = __socket (PF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, NETLINK_ROUTE); - - struct sockaddr_nl nladdr; - memset (&nladdr, '\0', sizeof (nladdr)); - nladdr.nl_family = AF_NETLINK; - - socklen_t addr_len = sizeof (nladdr); - - if (fd < 0 - || __bind (fd, (struct sockaddr *) &nladdr, sizeof (nladdr)) != 0 - || __getsockname (fd, (struct sockaddr *) &nladdr, &addr_len) != 0) - return; - - pid_t pid = nladdr.nl_pid; - struct req - { - struct nlmsghdr nlh; - struct rtgenmsg g; - /* struct rtgenmsg consists of a single byte. This means there - are three bytes of padding included in the REQ definition. - We make them explicit here. */ - char pad[3]; - } req; - - req.nlh.nlmsg_len = sizeof (req); - req.nlh.nlmsg_type = RTM_GETLINK; - req.nlh.nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST; - req.nlh.nlmsg_pid = 0; - req.nlh.nlmsg_seq = time (NULL); - req.g.rtgen_family = AF_UNSPEC; - - assert (sizeof (req) - offsetof (struct req, pad) == 3); - memset (req.pad, '\0', sizeof (req.pad)); - - memset (&nladdr, '\0', sizeof (nladdr)); - nladdr.nl_family = AF_NETLINK; - -#ifdef PAGE_SIZE - /* Help the compiler optimize out the malloc call if PAGE_SIZE - is constant and smaller or equal to PTHREAD_STACK_MIN/4. */ - const size_t buf_size = PAGE_SIZE; -#else - const size_t buf_size = __getpagesize (); -#endif - bool use_malloc = false; - char *buf; - - if (__libc_use_alloca (buf_size)) - buf = alloca (buf_size); - else - { - buf = malloc (buf_size); - if (buf != NULL) - use_malloc = true; - else - goto out_fail; - } - - struct iovec iov = { buf, buf_size }; - - if (TEMP_FAILURE_RETRY (__sendto (fd, (void *) &req, sizeof (req), 0, - (struct sockaddr *) &nladdr, - sizeof (nladdr))) < 0) - goto out_fail; - - bool done = false; - do - { - struct msghdr msg = - { - .msg_name = (void *) &nladdr, - .msg_namelen = sizeof (nladdr), - .msg_iov = &iov, - .msg_iovlen = 1, - .msg_control = NULL, - .msg_controllen = 0, - .msg_flags = 0 - }; - - ssize_t read_len = TEMP_FAILURE_RETRY (__recvmsg (fd, &msg, 0)); - __netlink_assert_response (fd, read_len); - if (read_len < 0) - goto out_fail; - - if (msg.msg_flags & MSG_TRUNC) - goto out_fail; - - struct nlmsghdr *nlmh; - for (nlmh = (struct nlmsghdr *) buf; - NLMSG_OK (nlmh, (size_t) read_len); - nlmh = (struct nlmsghdr *) NLMSG_NEXT (nlmh, read_len)) - { - if (nladdr.nl_pid != 0 || (pid_t) nlmh->nlmsg_pid != pid - || nlmh->nlmsg_seq != req.nlh.nlmsg_seq) - continue; - - if (nlmh->nlmsg_type == RTM_NEWLINK) - { - struct ifinfomsg *ifim = (struct ifinfomsg *) NLMSG_DATA (nlmh); - int native = (ifim->ifi_type != ARPHRD_TUNNEL6 - && ifim->ifi_type != ARPHRD_TUNNEL - && ifim->ifi_type != ARPHRD_SIT); - - if (a1_index == ifim->ifi_index) - { - *a1_native = native; - a1_index = 0xffffffffu; - } - if (a2_index == ifim->ifi_index) - { - *a2_native = native; - a2_index = 0xffffffffu; - } - - if (a1_index == 0xffffffffu - && a2_index == 0xffffffffu) - goto out; - } - else if (nlmh->nlmsg_type == NLMSG_DONE) - /* We found the end, leave the loop. */ - done = true; - } - } - while (! done); - - out: - close_not_cancel_no_status (fd); - - return; - -out_fail: - if (use_malloc) - free (buf); -} diff --git a/sysdeps/unix/sysv/linux/check_pf.c b/sysdeps/unix/sysv/linux/check_pf.c deleted file mode 100644 index 3bf221a177..0000000000 --- a/sysdeps/unix/sysv/linux/check_pf.c +++ /dev/null @@ -1,391 +0,0 @@ -/* Determine protocol families for which interfaces exist. Linux version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include - -#include "netlinkaccess.h" - -#ifndef IFA_F_HOMEADDRESS -# define IFA_F_HOMEADDRESS 0 -#endif -#ifndef IFA_F_OPTIMISTIC -# define IFA_F_OPTIMISTIC 0 -#endif - - -struct cached_data -{ - uint32_t timestamp; - uint32_t usecnt; - bool seen_ipv4; - bool seen_ipv6; - size_t in6ailen; - struct in6addrinfo in6ai[0]; -}; - -static struct cached_data noai6ai_cached = - { - .usecnt = 1, /* Make sure we never try to delete this entry. */ - .in6ailen = 0 - }; - -static struct cached_data *cache; -__libc_lock_define_initialized (static, lock); - - -#if IS_IN (nscd) -static uint32_t nl_timestamp; - -uint32_t -__bump_nl_timestamp (void) -{ - if (atomic_increment_val (&nl_timestamp) == 0) - atomic_increment (&nl_timestamp); - - return nl_timestamp; -} -#endif - -static inline uint32_t -get_nl_timestamp (void) -{ -#if IS_IN (nscd) - return nl_timestamp; -#elif defined USE_NSCD - return __nscd_get_nl_timestamp (); -#else - return 0; -#endif -} - -static inline bool -cache_valid_p (void) -{ - if (cache != NULL) - { - uint32_t timestamp = get_nl_timestamp (); - return timestamp != 0 && cache->timestamp == timestamp; - } - return false; -} - - -static struct cached_data * -make_request (int fd, pid_t pid) -{ - struct cached_data *result = NULL; - - size_t result_len = 0; - size_t result_cap = 32; - - struct req - { - struct nlmsghdr nlh; - struct rtgenmsg g; - /* struct rtgenmsg consists of a single byte. This means there - are three bytes of padding included in the REQ definition. - We make them explicit here. */ - char pad[3]; - } req; - struct sockaddr_nl nladdr; - - req.nlh.nlmsg_len = sizeof (req); - req.nlh.nlmsg_type = RTM_GETADDR; - req.nlh.nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST; - req.nlh.nlmsg_pid = 0; - req.nlh.nlmsg_seq = time (NULL); - req.g.rtgen_family = AF_UNSPEC; - - assert (sizeof (req) - offsetof (struct req, pad) == 3); - memset (req.pad, '\0', sizeof (req.pad)); - - memset (&nladdr, '\0', sizeof (nladdr)); - nladdr.nl_family = AF_NETLINK; - -#ifdef PAGE_SIZE - const size_t buf_size = PAGE_SIZE; -#else - const size_t buf_size = 4096; -#endif - char buf[buf_size]; - - struct iovec iov = { buf, buf_size }; - - if (TEMP_FAILURE_RETRY (__sendto (fd, (void *) &req, sizeof (req), 0, - (struct sockaddr *) &nladdr, - sizeof (nladdr))) < 0) - goto out_fail; - - bool done = false; - - bool seen_ipv4 = false; - bool seen_ipv6 = false; - - do - { - struct msghdr msg = - { - .msg_name = (void *) &nladdr, - .msg_namelen = sizeof (nladdr), - .msg_iov = &iov, - .msg_iovlen = 1, - .msg_control = NULL, - .msg_controllen = 0, - .msg_flags = 0 - }; - - ssize_t read_len = TEMP_FAILURE_RETRY (__recvmsg (fd, &msg, 0)); - __netlink_assert_response (fd, read_len); - if (read_len < 0) - goto out_fail; - - if (msg.msg_flags & MSG_TRUNC) - goto out_fail; - - struct nlmsghdr *nlmh; - for (nlmh = (struct nlmsghdr *) buf; - NLMSG_OK (nlmh, (size_t) read_len); - nlmh = (struct nlmsghdr *) NLMSG_NEXT (nlmh, read_len)) - { - if (nladdr.nl_pid != 0 || (pid_t) nlmh->nlmsg_pid != pid - || nlmh->nlmsg_seq != req.nlh.nlmsg_seq) - continue; - - if (nlmh->nlmsg_type == RTM_NEWADDR) - { - struct ifaddrmsg *ifam = (struct ifaddrmsg *) NLMSG_DATA (nlmh); - struct rtattr *rta = IFA_RTA (ifam); - size_t len = nlmh->nlmsg_len - NLMSG_LENGTH (sizeof (*ifam)); - - if (ifam->ifa_family != AF_INET - && ifam->ifa_family != AF_INET6) - continue; - - const void *local = NULL; - const void *address = NULL; - while (RTA_OK (rta, len)) - { - switch (rta->rta_type) - { - case IFA_LOCAL: - local = RTA_DATA (rta); - break; - - case IFA_ADDRESS: - address = RTA_DATA (rta); - goto out; - } - - rta = RTA_NEXT (rta, len); - } - - if (local != NULL) - { - address = local; - out: - if (ifam->ifa_family == AF_INET) - { - if (*(const in_addr_t *) address - != htonl (INADDR_LOOPBACK)) - seen_ipv4 = true; - } - else - { - if (!IN6_IS_ADDR_LOOPBACK (address)) - seen_ipv6 = true; - } - } - - if (result_len == 0 || result_len == result_cap) - { - result_cap = 2 * result_cap; - result = realloc (result, sizeof (*result) - + result_cap - * sizeof (struct in6addrinfo)); - } - - if (!result) - goto out_fail; - - struct in6addrinfo *info = &result->in6ai[result_len++]; - - info->flags = (((ifam->ifa_flags - & (IFA_F_DEPRECATED | IFA_F_OPTIMISTIC)) - ? in6ai_deprecated : 0) - | ((ifam->ifa_flags & IFA_F_HOMEADDRESS) - ? in6ai_homeaddress : 0)); - info->prefixlen = ifam->ifa_prefixlen; - info->index = ifam->ifa_index; - if (ifam->ifa_family == AF_INET) - { - info->addr[0] = 0; - info->addr[1] = 0; - info->addr[2] = htonl (0xffff); - info->addr[3] = *(const in_addr_t *) address; - } - else - memcpy (info->addr, address, sizeof (info->addr)); - } - else if (nlmh->nlmsg_type == NLMSG_DONE) - /* We found the end, leave the loop. */ - done = true; - } - } - while (! done); - - if (seen_ipv6 && result != NULL) - { - result->timestamp = get_nl_timestamp (); - result->usecnt = 2; - result->seen_ipv4 = seen_ipv4; - result->seen_ipv6 = true; - result->in6ailen = result_len; - } - else - { - free (result); - - atomic_add (&noai6ai_cached.usecnt, 2); - noai6ai_cached.seen_ipv4 = seen_ipv4; - noai6ai_cached.seen_ipv6 = seen_ipv6; - result = &noai6ai_cached; - } - - return result; - - out_fail: - - free (result); - return NULL; -} - - -void -attribute_hidden -__check_pf (bool *seen_ipv4, bool *seen_ipv6, - struct in6addrinfo **in6ai, size_t *in6ailen) -{ - *in6ai = NULL; - *in6ailen = 0; - - struct cached_data *olddata = NULL; - struct cached_data *data = NULL; - - __libc_lock_lock (lock); - - if (cache_valid_p ()) - { - data = cache; - atomic_increment (&cache->usecnt); - } - else - { - int fd = __socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE); - - if (__glibc_likely (fd >= 0)) - { - struct sockaddr_nl nladdr; - memset (&nladdr, '\0', sizeof (nladdr)); - nladdr.nl_family = AF_NETLINK; - - socklen_t addr_len = sizeof (nladdr); - - if (__bind (fd, (struct sockaddr *) &nladdr, sizeof (nladdr)) == 0 - && __getsockname (fd, (struct sockaddr *) &nladdr, - &addr_len) == 0) - data = make_request (fd, nladdr.nl_pid); - - close_not_cancel_no_status (fd); - } - - if (data != NULL) - { - olddata = cache; - cache = data; - } - } - - __libc_lock_unlock (lock); - - if (data != NULL) - { - /* It worked. */ - *seen_ipv4 = data->seen_ipv4; - *seen_ipv6 = data->seen_ipv6; - *in6ailen = data->in6ailen; - *in6ai = data->in6ai; - - if (olddata != NULL && olddata->usecnt > 0 - && atomic_add_zero (&olddata->usecnt, -1)) - free (olddata); - - return; - } - - /* We cannot determine what interfaces are available. Be - pessimistic. */ - *seen_ipv4 = true; - *seen_ipv6 = true; -} - -/* Free the cache if it has been allocated. */ -libc_freeres_fn (freecache) -{ - if (cache) - __free_in6ai (cache->in6ai); -} - -void -__free_in6ai (struct in6addrinfo *ai) -{ - if (ai != NULL) - { - struct cached_data *data = - (struct cached_data *) ((char *) ai - - offsetof (struct cached_data, in6ai)); - - if (atomic_add_zero (&data->usecnt, -1)) - { - __libc_lock_lock (lock); - - if (data->usecnt == 0) - /* Still unused. */ - free (data); - - __libc_lock_unlock (lock); - } - } -} diff --git a/sysdeps/unix/sysv/linux/clock.c b/sysdeps/unix/sysv/linux/clock.c deleted file mode 100644 index a0056e4da7..0000000000 --- a/sysdeps/unix/sysv/linux/clock.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Return the time used by the program so far (user time + system time). - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -clock_t -clock (void) -{ - struct timespec ts; - - _Static_assert (CLOCKS_PER_SEC == 1000000, - "CLOCKS_PER_SEC should be 1000000"); - - /* clock_gettime shouldn't fail here since CLOCK_PROCESS_CPUTIME_ID is - supported since 2.6.12. Check the return value anyway in case the kernel - barfs on us for some reason. */ - if (__glibc_unlikely (__clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &ts) != 0)) - return (clock_t) -1; - - return (ts.tv_sec * CLOCKS_PER_SEC - + ts.tv_nsec / (1000000000 / CLOCKS_PER_SEC)); -} diff --git a/sysdeps/unix/sysv/linux/clock_getcpuclockid.c b/sysdeps/unix/sysv/linux/clock_getcpuclockid.c deleted file mode 100644 index 4b1f3b67b0..0000000000 --- a/sysdeps/unix/sysv/linux/clock_getcpuclockid.c +++ /dev/null @@ -1,48 +0,0 @@ -/* clock_getcpuclockid -- Get a clockid_t for process CPU time. Linux version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "kernel-posix-cpu-timers.h" - -int -__clock_getcpuclockid (pid_t pid, clockid_t *clock_id) -{ - /* The clockid_t value is a simple computation from the PID. - But we do a clock_getres call to validate it. */ - - const clockid_t pidclock = MAKE_PROCESS_CPUCLOCK (pid, CPUCLOCK_SCHED); - - INTERNAL_SYSCALL_DECL (err); - int r = INTERNAL_SYSCALL (clock_getres, err, 2, pidclock, NULL); - if (!INTERNAL_SYSCALL_ERROR_P (r, err)) - { - *clock_id = pidclock; - return 0; - } - - if (INTERNAL_SYSCALL_ERRNO (r, err) == EINVAL) - { - /* The clock_getres system call checked the PID for us. */ - return ESRCH; - } - else - return INTERNAL_SYSCALL_ERRNO (r, err); -} -weak_alias (__clock_getcpuclockid, clock_getcpuclockid) diff --git a/sysdeps/unix/sysv/linux/clock_getres.c b/sysdeps/unix/sysv/linux/clock_getres.c deleted file mode 100644 index 2b7bb65e55..0000000000 --- a/sysdeps/unix/sysv/linux/clock_getres.c +++ /dev/null @@ -1,51 +0,0 @@ -/* clock_getres -- Get the resolution of a POSIX clockid_t. Linux version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "kernel-posix-cpu-timers.h" - -#ifdef HAVE_CLOCK_GETRES_VSYSCALL -# define HAVE_VSYSCALL -#endif -#include - -#define SYSCALL_GETRES \ - retval = INLINE_VSYSCALL (clock_getres, 2, clock_id, res); \ - break - -/* The REALTIME and MONOTONIC clock are definitely supported in the - kernel. */ -#define SYSDEP_GETRES \ - SYSDEP_GETRES_CPUTIME \ - case CLOCK_REALTIME: \ - case CLOCK_MONOTONIC: \ - case CLOCK_MONOTONIC_RAW: \ - case CLOCK_REALTIME_COARSE: \ - case CLOCK_MONOTONIC_COARSE: \ - SYSCALL_GETRES - -/* We handled the REALTIME clock here. */ -#define HANDLED_REALTIME 1 -#define HANDLED_CPUTIME 1 - -#define SYSDEP_GETRES_CPU SYSCALL_GETRES -#define SYSDEP_GETRES_CPUTIME /* Default catches them too. */ - -#include diff --git a/sysdeps/unix/sysv/linux/clock_gettime.c b/sysdeps/unix/sysv/linux/clock_gettime.c deleted file mode 100644 index e232f69a4f..0000000000 --- a/sysdeps/unix/sysv/linux/clock_gettime.c +++ /dev/null @@ -1,47 +0,0 @@ -/* clock_gettime -- Get current time from a POSIX clockid_t. Linux version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "kernel-posix-cpu-timers.h" - -#ifdef HAVE_CLOCK_GETTIME_VSYSCALL -# define HAVE_VSYSCALL -#endif -#include - -/* The REALTIME and MONOTONIC clock are definitely supported in the - kernel. */ -#define SYSDEP_GETTIME \ - SYSDEP_GETTIME_CPUTIME; \ - case CLOCK_REALTIME: \ - case CLOCK_MONOTONIC: \ - retval = INLINE_VSYSCALL (clock_gettime, 2, clock_id, tp); \ - break - -/* We handled the REALTIME clock here. */ -#define HANDLED_REALTIME 1 -#define HANDLED_CPUTIME 1 - -#define SYSDEP_GETTIME_CPU(clock_id, tp) \ - retval = INLINE_VSYSCALL (clock_gettime, 2, clock_id, tp); \ - break -#define SYSDEP_GETTIME_CPUTIME /* Default catches them too. */ - -#include diff --git a/sysdeps/unix/sysv/linux/clock_nanosleep.c b/sysdeps/unix/sysv/linux/clock_nanosleep.c deleted file mode 100644 index 93bc4cf47e..0000000000 --- a/sysdeps/unix/sysv/linux/clock_nanosleep.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include -#include "kernel-posix-cpu-timers.h" - - -/* We can simply use the syscall. The CPU clocks are not supported - with this function. */ -int -__clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req, - struct timespec *rem) -{ - INTERNAL_SYSCALL_DECL (err); - int r; - - if (clock_id == CLOCK_THREAD_CPUTIME_ID) - return EINVAL; - if (clock_id == CLOCK_PROCESS_CPUTIME_ID) - clock_id = MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED); - - if (SINGLE_THREAD_P) - r = INTERNAL_SYSCALL (clock_nanosleep, err, 4, clock_id, flags, req, rem); - else - { - int oldstate = LIBC_CANCEL_ASYNC (); - - r = INTERNAL_SYSCALL (clock_nanosleep, err, 4, clock_id, flags, req, - rem); - - LIBC_CANCEL_RESET (oldstate); - } - - return (INTERNAL_SYSCALL_ERROR_P (r, err) - ? INTERNAL_SYSCALL_ERRNO (r, err) : 0); -} -weak_alias (__clock_nanosleep, clock_nanosleep) diff --git a/sysdeps/unix/sysv/linux/clock_settime.c b/sysdeps/unix/sysv/linux/clock_settime.c deleted file mode 100644 index 058c518e5a..0000000000 --- a/sysdeps/unix/sysv/linux/clock_settime.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include "kernel-posix-cpu-timers.h" - - -/* The REALTIME clock is definitely supported in the kernel. */ -#define SYSDEP_SETTIME \ - case CLOCK_REALTIME: \ - retval = INLINE_SYSCALL (clock_settime, 2, clock_id, tp); \ - break - -/* We handled the REALTIME clock here. */ -#define HANDLED_REALTIME 1 - -#define HANDLED_CPUTIME 1 -#define SYSDEP_SETTIME_CPU \ - retval = INLINE_SYSCALL (clock_settime, 2, clock_id, tp) - -#include diff --git a/sysdeps/unix/sysv/linux/close.c b/sysdeps/unix/sysv/linux/close.c deleted file mode 100644 index 1ac71ce980..0000000000 --- a/sysdeps/unix/sysv/linux/close.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Linux close syscall implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Close the file descriptor FD. */ -int -__close (int fd) -{ - return SYSCALL_CANCEL (close, fd); -} -libc_hidden_def (__close) -strong_alias (__close, __libc_close) -weak_alias (__close, close) diff --git a/sysdeps/unix/sysv/linux/cmsg_nxthdr.c b/sysdeps/unix/sysv/linux/cmsg_nxthdr.c deleted file mode 100644 index 797be3ab68..0000000000 --- a/sysdeps/unix/sysv/linux/cmsg_nxthdr.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Return point to next ancillary data entry in message header. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -struct cmsghdr * -__cmsg_nxthdr (struct msghdr *mhdr, struct cmsghdr *cmsg) -{ - if ((size_t) cmsg->cmsg_len < sizeof (struct cmsghdr)) - /* The kernel header does this so there may be a reason. */ - return NULL; - - cmsg = (struct cmsghdr *) ((unsigned char *) cmsg - + CMSG_ALIGN (cmsg->cmsg_len)); - if ((unsigned char *) (cmsg + 1) > ((unsigned char *) mhdr->msg_control - + mhdr->msg_controllen) - || ((unsigned char *) cmsg + CMSG_ALIGN (cmsg->cmsg_len) - > ((unsigned char *) mhdr->msg_control + mhdr->msg_controllen))) - /* No more entries. */ - return NULL; - return cmsg; -} diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure deleted file mode 100644 index cace758c01..0000000000 --- a/sysdeps/unix/sysv/linux/configure +++ /dev/null @@ -1,166 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux. - -if test -n "$sysheaders"; then - OLD_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS $SYSINCLUDES" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking installed Linux kernel header files" >&5 -$as_echo_n "checking installed Linux kernel header files... " >&6; } -if ${libc_cv_linux320+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#if !defined LINUX_VERSION_CODE || LINUX_VERSION_CODE < (3 *65536+ 2 *256+ 0) /* 3.2.0 */ -# error kernel headers missing or too old -#endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_cv_linux320='3.2.0 or later' -else - libc_cv_linux320='missing or too old!' -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_linux320" >&5 -$as_echo "$libc_cv_linux320" >&6; } -if test "$libc_cv_linux320" != '3.2.0 or later'; then - as_fn_error $? "GNU libc requires kernel header files from -Linux 3.2.0 or later to be installed before configuring. -The kernel header files are found usually in /usr/include/asm and -/usr/include/linux; make sure these directories use files from -Linux 3.2.0 or later. This check uses , so -make sure that file was built correctly when installing the kernel header -files. To use kernel headers not from /usr/include/linux, use the -configure option --with-headers." "$LINENO" 5 -fi - -# If the user gave a minimal version number test whether the available -# kernel headers are young enough. Additionally we have minimal -# kernel versions for some architectures. If a previous configure fragment -# set arch_minimum_kernel already, let that override our defaults here. -# Note that we presume such a fragment has set libc_cv_gcc_unwind_find_fde -# if appropriate too. -test -n "$arch_minimum_kernel" || arch_minimum_kernel=3.2.0 -if test -n "$minimum_kernel"; then - - user_version=$((`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 65536 + \2 \* 256 + \3/'`)) - arch_version=$((`echo "$arch_minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 65536 + \2 \* 256 + \3/'`)) - - if test $user_version -lt $arch_version; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: minimum kernel version reset to $arch_minimum_kernel" >&5 -$as_echo "$as_me: WARNING: minimum kernel version reset to $arch_minimum_kernel" >&2;} - minimum_kernel=$arch_minimum_kernel - fi -else - minimum_kernel=$arch_minimum_kernel -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kernel header at least $minimum_kernel" >&5 -$as_echo_n "checking for kernel header at least $minimum_kernel... " >&6; } -decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`; -abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`; -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#if LINUX_VERSION_CODE < $decnum -# error kernel headers too old -#endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_minimum_kernel=ok -else - libc_minimum_kernel='too old!' -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_minimum_kernel" >&5 -$as_echo "$libc_minimum_kernel" >&6; } -if test "$libc_minimum_kernel" = ok; then - cat >>confdefs.h <<_ACEOF -#define __LINUX_KERNEL_VERSION $decnum -_ACEOF - - cat >>confdefs.h <<_ACEOF -#define __ABI_TAG_VERSION $abinum -_ACEOF - -else - as_fn_error $? "*** The available kernel headers are older than the requested -*** compatible kernel version" "$LINENO" 5 -fi - -if test -n "$sysheaders"; then - CPPFLAGS=$OLD_CPPFLAGS -fi - -if test "$prefix" = "/usr/local" -o "$prefix" = "/usr/local/" -o "$prefix" = "NONE"; then - if test $enable_sanity = yes; then - echo "\ -*** On GNU/Linux systems the GNU C Library should not be installed into -*** /usr/local since this might make your system totally unusable. -*** We strongly advise to use a different prefix. For details read the FAQ. -*** If you really mean to do this, run configure again using the extra -*** parameter \`--disable-sanity-checks'." - exit 1 - else - echo "\ -*** WARNING: Do you really want to install the GNU C Library into /usr/local? -*** This might make your system totally unusable, for details read the FAQ." - fi -fi - - -# One Linux we use ldconfig. -use_ldconfig=yes - -if test $host = $build; then - # If $prefix/include/{net,scsi} are symlinks, make install will - # clobber what they're linked to (probably a kernel tree). - # test -L ought to work on all Linux boxes. - if test "x$prefix" != xNONE; then - ac_prefix=$prefix - else - ac_prefix=$ac_default_prefix - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for symlinks in ${ac_prefix}/include" >&5 -$as_echo_n "checking for symlinks in ${ac_prefix}/include... " >&6; } - ac_message= - if test -L ${ac_prefix}/include/net; then - ac_message="$ac_message - ${ac_prefix}/include/net is a symlink" - fi - if test -L ${ac_prefix}/include/scsi; then - ac_message="$ac_message - ${ac_prefix}/include/scsi is a symlink" - fi - if test -n "$ac_message"; then - as_fn_error $? "$ac_message -\`make install' will destroy the target of the link(s). -Delete the links and re-run configure, or better still, move the entire -${ac_prefix}/include directory out of the way." "$LINENO" 5 - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } - fi -fi - -# We have inlined syscalls. -$as_echo "#define HAVE_INLINED_SYSCALLS 1" >>confdefs.h - diff --git a/sysdeps/unix/sysv/linux/configure.ac b/sysdeps/unix/sysv/linux/configure.ac deleted file mode 100644 index 13abda0a51..0000000000 --- a/sysdeps/unix/sysv/linux/configure.ac +++ /dev/null @@ -1,122 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux. - -define([LIBC_LINUX_VERSION],[3.2.0])dnl -if test -n "$sysheaders"; then - OLD_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS $SYSINCLUDES" -fi -define([libc_cv_linuxVER], [libc_cv_linux]patsubst(LIBC_LINUX_VERSION,[\.]))dnl -AC_CACHE_CHECK(installed Linux kernel header files, libc_cv_linuxVER, [dnl -AC_TRY_COMPILE([#include -#if !defined LINUX_VERSION_CODE || LINUX_VERSION_CODE < ]dnl -patsubst(LIBC_LINUX_VERSION,[^\([^.]*\)\.\([^.]*\)\.\([^.]*\)$],dnl -[ (\1 *65536+ \2 *256+ \3) /* \1.\2.\3 */])[ -# error kernel headers missing or too old -#endif], [], - [libc_cv_linuxVER='LIBC_LINUX_VERSION or later'], - [libc_cv_linuxVER='missing or too old!'])]) -if test "$libc_cv_linuxVER" != 'LIBC_LINUX_VERSION or later'; then - AC_MSG_ERROR([GNU libc requires kernel header files from -Linux LIBC_LINUX_VERSION or later to be installed before configuring. -The kernel header files are found usually in /usr/include/asm and -/usr/include/linux; make sure these directories use files from -Linux LIBC_LINUX_VERSION or later. This check uses , so -make sure that file was built correctly when installing the kernel header -files. To use kernel headers not from /usr/include/linux, use the -configure option --with-headers.]) -fi - -# If the user gave a minimal version number test whether the available -# kernel headers are young enough. Additionally we have minimal -# kernel versions for some architectures. If a previous configure fragment -# set arch_minimum_kernel already, let that override our defaults here. -# Note that we presume such a fragment has set libc_cv_gcc_unwind_find_fde -# if appropriate too. -test -n "$arch_minimum_kernel" || arch_minimum_kernel=3.2.0 -if test -n "$minimum_kernel"; then - changequote(,) - user_version=$((`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 65536 + \2 \* 256 + \3/'`)) - arch_version=$((`echo "$arch_minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 65536 + \2 \* 256 + \3/'`)) - changequote([,]) - if test $user_version -lt $arch_version; then - AC_MSG_WARN([minimum kernel version reset to $arch_minimum_kernel]) - minimum_kernel=$arch_minimum_kernel - fi -else - minimum_kernel=$arch_minimum_kernel -fi - -AC_MSG_CHECKING(for kernel header at least $minimum_kernel) -changequote(,)dnl -decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`; -abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`; -changequote([,])dnl -AC_TRY_COMPILE([#include -#if LINUX_VERSION_CODE < $decnum -# error kernel headers too old -#endif], [], [libc_minimum_kernel=ok], [libc_minimum_kernel='too old!']) -AC_MSG_RESULT($libc_minimum_kernel) -if test "$libc_minimum_kernel" = ok; then - AC_DEFINE_UNQUOTED(__LINUX_KERNEL_VERSION, $decnum) - AC_DEFINE_UNQUOTED(__ABI_TAG_VERSION, $abinum) -else - AC_MSG_ERROR([*** The available kernel headers are older than the requested -*** compatible kernel version]) -fi - -if test -n "$sysheaders"; then - CPPFLAGS=$OLD_CPPFLAGS -fi - -if test "$prefix" = "/usr/local" -o "$prefix" = "/usr/local/" -o "$prefix" = "NONE"; then - if test $enable_sanity = yes; then - echo "\ -*** On GNU/Linux systems the GNU C Library should not be installed into -*** /usr/local since this might make your system totally unusable. -*** We strongly advise to use a different prefix. For details read the FAQ. -*** If you really mean to do this, run configure again using the extra -*** parameter \`--disable-sanity-checks'." - exit 1 - else - echo "\ -*** WARNING: Do you really want to install the GNU C Library into /usr/local? -*** This might make your system totally unusable, for details read the FAQ." - fi -fi - - -# One Linux we use ldconfig. -use_ldconfig=yes - -if test $host = $build; then - # If $prefix/include/{net,scsi} are symlinks, make install will - # clobber what they're linked to (probably a kernel tree). - # test -L ought to work on all Linux boxes. - if test "x$prefix" != xNONE; then - ac_prefix=$prefix - else - ac_prefix=$ac_default_prefix - fi - AC_MSG_CHECKING([for symlinks in ${ac_prefix}/include]) - ac_message= - if test -L ${ac_prefix}/include/net; then - ac_message="$ac_message - ${ac_prefix}/include/net is a symlink" - fi - if test -L ${ac_prefix}/include/scsi; then - ac_message="$ac_message - ${ac_prefix}/include/scsi is a symlink" - fi - if test -n "$ac_message"; then - AC_MSG_ERROR([$ac_message -\`make install' will destroy the target of the link(s). -Delete the links and re-run configure, or better still, move the entire -${ac_prefix}/include directory out of the way.]) - else - AC_MSG_RESULT(ok) - fi -fi - -# We have inlined syscalls. -AC_DEFINE(HAVE_INLINED_SYSCALLS) diff --git a/sysdeps/unix/sysv/linux/connect.c b/sysdeps/unix/sysv/linux/connect.c deleted file mode 100644 index f6ab5df6ad..0000000000 --- a/sysdeps/unix/sysv/linux/connect.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__libc_connect (int fd, __CONST_SOCKADDR_ARG addr, socklen_t len) -{ -#ifdef __ASSUME_CONNECT_SYSCALL - return SYSCALL_CANCEL (connect, fd, addr.__sockaddr__, len); -#else - return SOCKETCALL_CANCEL (connect, fd, addr.__sockaddr__, len); -#endif -} -weak_alias (__libc_connect, connect) -weak_alias (__libc_connect, __connect) -libc_hidden_weak (__connect) diff --git a/sysdeps/unix/sysv/linux/creat.c b/sysdeps/unix/sysv/linux/creat.c deleted file mode 100644 index 31e024838c..0000000000 --- a/sysdeps/unix/sysv/linux/creat.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Linux default implementation for creat. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -#include - -#ifndef __OFF_T_MATCHES_OFF64_T - -/* Create FILE with protections MODE. */ -int -__creat (const char *file, mode_t mode) -{ -# ifdef __NR_creat - return SYSCALL_CANCEL (creat, file, mode); -# else - return __open (file, O_WRONLY | O_CREAT | O_TRUNC, mode); -# endif -} -weak_alias (__creat, creat) - -LIBC_CANCEL_HANDLED (); - -#endif diff --git a/sysdeps/unix/sysv/linux/creat64.c b/sysdeps/unix/sysv/linux/creat64.c deleted file mode 100644 index 709c66091a..0000000000 --- a/sysdeps/unix/sysv/linux/creat64.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Linux default implementation for LFS creat. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* Create FILE with protections MODE. */ -int -__creat64 (const char *file, mode_t mode) -{ -#if defined __OFF_T_MATCHES_OFF64_T && defined __NR_creat - return SYSCALL_CANCEL (creat, file, mode); -#else - /* We need to pass O_LARGEFILE. */ - return __open64 (file, O_WRONLY | O_CREAT | O_TRUNC, mode); -#endif -} -weak_alias (__creat64, creat64) - -#ifdef __OFF_T_MATCHES_OFF64_T -strong_alias (__creat64, __creat) -weak_alias (__creat64, creat) -#endif - -LIBC_CANCEL_HANDLED (); diff --git a/sysdeps/unix/sysv/linux/createthread.c b/sysdeps/unix/sysv/linux/createthread.c deleted file mode 100644 index fe3a3fe4a2..0000000000 --- a/sysdeps/unix/sysv/linux/createthread.c +++ /dev/null @@ -1,152 +0,0 @@ -/* Low-level thread creation for NPTL. Linux version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - - -#ifndef ARCH_CLONE -# define ARCH_CLONE __clone -#endif - -/* See the comments in pthread_create.c for the requirements for these - two macros and the create_thread function. */ - -#define START_THREAD_DEFN \ - static int __attribute__ ((noreturn)) start_thread (void *arg) -#define START_THREAD_SELF arg - -/* pthread_create.c defines this using START_THREAD_DEFN - We need a forward declaration here so we can take its address. */ -static int start_thread (void *arg) __attribute__ ((noreturn)); - -static int -create_thread (struct pthread *pd, const struct pthread_attr *attr, - bool *stopped_start, STACK_VARIABLES_PARMS, bool *thread_ran) -{ - /* Determine whether the newly created threads has to be started - stopped since we have to set the scheduling parameters or set the - affinity. */ - if (attr != NULL - && (__glibc_unlikely (attr->cpuset != NULL) - || __glibc_unlikely ((attr->flags & ATTR_FLAG_NOTINHERITSCHED) != 0))) - *stopped_start = true; - - pd->stopped_start = *stopped_start; - if (__glibc_unlikely (*stopped_start)) - /* See CONCURRENCY NOTES in nptl/pthread_creat.c. */ - lll_lock (pd->lock, LLL_PRIVATE); - - /* We rely heavily on various flags the CLONE function understands: - - CLONE_VM, CLONE_FS, CLONE_FILES - These flags select semantics with shared address space and - file descriptors according to what POSIX requires. - - CLONE_SIGHAND, CLONE_THREAD - This flag selects the POSIX signal semantics and various - other kinds of sharing (itimers, POSIX timers, etc.). - - CLONE_SETTLS - The sixth parameter to CLONE determines the TLS area for the - new thread. - - CLONE_PARENT_SETTID - The kernels writes the thread ID of the newly created thread - into the location pointed to by the fifth parameters to CLONE. - - Note that it would be semantically equivalent to use - CLONE_CHILD_SETTID but it is be more expensive in the kernel. - - CLONE_CHILD_CLEARTID - The kernels clears the thread ID of a thread that has called - sys_exit() in the location pointed to by the seventh parameter - to CLONE. - - The termination signal is chosen to be zero which means no signal - is sent. */ - const int clone_flags = (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SYSVSEM - | CLONE_SIGHAND | CLONE_THREAD - | CLONE_SETTLS | CLONE_PARENT_SETTID - | CLONE_CHILD_CLEARTID - | 0); - - TLS_DEFINE_INIT_TP (tp, pd); - - if (__glibc_unlikely (ARCH_CLONE (&start_thread, STACK_VARIABLES_ARGS, - clone_flags, pd, &pd->tid, tp, &pd->tid) - == -1)) - return errno; - - /* It's started now, so if we fail below, we'll have to cancel it - and let it clean itself up. */ - *thread_ran = true; - - /* Now we have the possibility to set scheduling parameters etc. */ - if (attr != NULL) - { - INTERNAL_SYSCALL_DECL (err); - int res; - - /* Set the affinity mask if necessary. */ - if (attr->cpuset != NULL) - { - assert (*stopped_start); - - res = INTERNAL_SYSCALL (sched_setaffinity, err, 3, pd->tid, - attr->cpusetsize, attr->cpuset); - - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (res, err))) - err_out: - { - /* The operation failed. We have to kill the thread. - We let the normal cancellation mechanism do the work. */ - - pid_t pid = __getpid (); - INTERNAL_SYSCALL_DECL (err2); - (void) INTERNAL_SYSCALL_CALL (tgkill, err2, pid, pd->tid, - SIGCANCEL); - - return INTERNAL_SYSCALL_ERRNO (res, err); - } - } - - /* Set the scheduling parameters. */ - if ((attr->flags & ATTR_FLAG_NOTINHERITSCHED) != 0) - { - assert (*stopped_start); - - res = INTERNAL_SYSCALL (sched_setscheduler, err, 3, pd->tid, - pd->schedpolicy, &pd->schedparam); - - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (res, err))) - goto err_out; - } - } - - return 0; -} diff --git a/sysdeps/unix/sysv/linux/default-sched.h b/sysdeps/unix/sysv/linux/default-sched.h deleted file mode 100644 index d27d09de19..0000000000 --- a/sysdeps/unix/sysv/linux/default-sched.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Determine calling thread's scheduling parameters. Linux version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include - -/* This should fill in PD->schedpolicy if PD->flags does not contain - ATTR_FLAG_POLICY_SET, and set it; and PD->schedparam if PD->flags does - not contain ATTR_FLAG_SCHED_SET, and set it. It won't be called at all - if both bits are already set. */ - -static void -collect_default_sched (struct pthread *pd) -{ - INTERNAL_SYSCALL_DECL (scerr); - - if ((pd->flags & ATTR_FLAG_POLICY_SET) == 0) - { - pd->schedpolicy = INTERNAL_SYSCALL (sched_getscheduler, scerr, 1, 0); - pd->flags |= ATTR_FLAG_POLICY_SET; - } - - if ((pd->flags & ATTR_FLAG_SCHED_SET) == 0) - { - INTERNAL_SYSCALL (sched_getparam, scerr, 2, 0, &pd->schedparam); - pd->flags |= ATTR_FLAG_SCHED_SET; - } -} diff --git a/sysdeps/unix/sysv/linux/device-nrs.h b/sysdeps/unix/sysv/linux/device-nrs.h deleted file mode 100644 index 37a894b139..0000000000 --- a/sysdeps/unix/sysv/linux/device-nrs.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Device numbers of devices used in the implementation. Linux version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DEVICE_NRS_H -#define _DEVICE_NRS_H 1 - -#include - -/* /dev/null is (1,3). */ -#define DEV_NULL_MAJOR 1 -#define DEV_NULL_MINOR 3 - -/* /dev/full is (1,7). */ -#define DEV_FULL_MAJOR 1 -#define DEV_FULL_MINOR 7 - -/* Pseudo tty slaves. For Linux we use the Unix98 ttys. We could - also include the old BSD-style tty buts they should not be used and - the extra test would only slow down correctly set up systems. If a - system still uses those device the slower tests performed (using - isatty) will catch it. */ -#define DEV_TTY_LOW_MAJOR 136 -#define DEV_TTY_HIGH_MAJOR 143 - -/* Test whether given device is a tty. */ -#define DEV_TTY_P(statp) \ - ({ int __dev_major = major ((statp)->st_rdev); \ - __dev_major >= DEV_TTY_LOW_MAJOR && __dev_major <= DEV_TTY_HIGH_MAJOR; }) - -#endif /* device-nrs.h */ diff --git a/sysdeps/unix/sysv/linux/dl-brk.c b/sysdeps/unix/sysv/linux/dl-brk.c deleted file mode 100644 index c37cdfec33..0000000000 --- a/sysdeps/unix/sysv/linux/dl-brk.c +++ /dev/null @@ -1,5 +0,0 @@ -/* We can use the normal code but we also know the __curbrk is not exported - from ld.so. */ -extern void *__curbrk attribute_hidden; - -#include diff --git a/sysdeps/unix/sysv/linux/dl-execstack.c b/sysdeps/unix/sysv/linux/dl-execstack.c deleted file mode 100644 index 3c4de1cb46..0000000000 --- a/sysdeps/unix/sysv/linux/dl-execstack.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Stack executability handling for GNU dynamic linker. Linux version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -extern int __stack_prot attribute_relro attribute_hidden; - - -int -internal_function -_dl_make_stack_executable (void **stack_endp) -{ - /* This gives us the highest/lowest page that needs to be changed. */ - uintptr_t page = ((uintptr_t) *stack_endp - & -(intptr_t) GLRO(dl_pagesize)); - int result = 0; - - /* Challenge the caller. */ - if (__builtin_expect (__check_caller (RETURN_ADDRESS (0), - allow_ldso|allow_libpthread) != 0, 0) - || __builtin_expect (*stack_endp != __libc_stack_end, 0)) - return EPERM; - - if (__builtin_expect (__mprotect ((void *) page, GLRO(dl_pagesize), - __stack_prot) == 0, 1)) - goto return_success; - result = errno; - goto out; - - return_success: - /* Clear the address. */ - *stack_endp = NULL; - - /* Remember that we changed the permission. */ - GL(dl_stack_flags) |= PF_X; - - out: -#ifdef check_consistency - check_consistency (); -#endif - - return result; -} -rtld_hidden_def (_dl_make_stack_executable) diff --git a/sysdeps/unix/sysv/linux/dl-fxstatat64.c b/sysdeps/unix/sysv/linux/dl-fxstatat64.c deleted file mode 100644 index d229d0ea0f..0000000000 --- a/sysdeps/unix/sysv/linux/dl-fxstatat64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/dl-getcwd.c b/sysdeps/unix/sysv/linux/dl-getcwd.c deleted file mode 100644 index 4bd5657f1e..0000000000 --- a/sysdeps/unix/sysv/linux/dl-getcwd.c +++ /dev/null @@ -1 +0,0 @@ -#include "getcwd.c" diff --git a/sysdeps/unix/sysv/linux/dl-librecon.h b/sysdeps/unix/sysv/linux/dl-librecon.h deleted file mode 100644 index a6e54bed75..0000000000 --- a/sysdeps/unix/sysv/linux/dl-librecon.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Optional code to distinguish library flavours. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_LIBRECON_H -#define _DL_LIBRECON_H 1 - -static inline void __attribute__ ((unused, always_inline)) -_dl_osversion_init (char *assume_kernel) -{ - unsigned long int i, j, osversion = 0; - char *p = assume_kernel, *q; - - for (i = 0; i < 3; i++, p = q + 1) - { - j = __strtoul_internal (p, &q, 0, 0); - if (j >= 255 || p == q || (i < 2 && *q && *q != '.')) - { - osversion = 0; - break; - } - osversion |= j << (16 - 8 * i); - if (!*q) - break; - } - if (osversion) - GLRO(dl_osversion) = osversion; -} - -/* Recognizing extra environment variables. */ -#define EXTRA_LD_ENVVARS_13 \ - if (memcmp (envline, "ASSUME_KERNEL", 13) == 0) \ - { \ - _dl_osversion_init (&envline[14]); \ - break; \ - } - -#define DL_OSVERSION_INIT \ - do { \ - char *assume_kernel = getenv ("LD_ASSUME_KERNEL"); \ - if (assume_kernel) \ - _dl_osversion_init (assume_kernel); \ - } while (0) - -#endif /* dl-librecon.h */ diff --git a/sysdeps/unix/sysv/linux/dl-openat64.c b/sysdeps/unix/sysv/linux/dl-openat64.c deleted file mode 100644 index deb68cd233..0000000000 --- a/sysdeps/unix/sysv/linux/dl-openat64.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -int -openat64 (int dfd, const char *file, int oflag, ...) -{ - assert (!__OPEN_NEEDS_MODE (oflag)); - - return INLINE_SYSCALL (openat, 3, dfd, file, oflag | O_LARGEFILE); -} diff --git a/sysdeps/unix/sysv/linux/dl-opendir.c b/sysdeps/unix/sysv/linux/dl-opendir.c deleted file mode 100644 index c1cdc057a7..0000000000 --- a/sysdeps/unix/sysv/linux/dl-opendir.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/dl-origin.c b/sysdeps/unix/sysv/linux/dl-origin.c deleted file mode 100644 index 595eadfb82..0000000000 --- a/sysdeps/unix/sysv/linux/dl-origin.c +++ /dev/null @@ -1,80 +0,0 @@ -/* Find path of executable. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -#include - -/* On Linux >= 2.1 systems which have the dcache implementation we can get - the path of the application from the /proc/self/exe symlink. Try this - first and fall back on the generic method if necessary. */ - -const char * -_dl_get_origin (void) -{ - char linkval[PATH_MAX]; - char *result; - int len; - INTERNAL_SYSCALL_DECL (err); - - len = INTERNAL_SYSCALL (readlink, err, 3, "/proc/self/exe", linkval, - sizeof (linkval)); - if (! INTERNAL_SYSCALL_ERROR_P (len, err) && len > 0 && linkval[0] != '[') - { - /* We can use this value. */ - assert (linkval[0] == '/'); - while (len > 1 && linkval[len - 1] != '/') - --len; - result = (char *) malloc (len + 1); - if (result == NULL) - result = (char *) -1; - else if (len == 1) - memcpy (result, "/", 2); - else - *((char *) __mempcpy (result, linkval, len - 1)) = '\0'; - } - else - { - result = (char *) -1; - /* We use the environment variable LD_ORIGIN_PATH. If it is set make - a copy and strip out trailing slashes. */ - if (GLRO(dl_origin_path) != NULL) - { - size_t len = strlen (GLRO(dl_origin_path)); - result = (char *) malloc (len + 1); - if (result == NULL) - result = (char *) -1; - else - { - char *cp = __mempcpy (result, GLRO(dl_origin_path), len); - while (cp > result + 1 && cp[-1] == '/') - --cp; - *cp = '\0'; - } - } - } - - return result; -} diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h deleted file mode 100644 index 823cd8224d..0000000000 --- a/sysdeps/unix/sysv/linux/dl-osinfo.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Operating system specific code for generic dynamic loader functions. Linux. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#ifndef MIN -# define MIN(a,b) (((a)<(b))?(a):(b)) -#endif - -#define DL_SYSDEP_OSCHECK(FATAL) \ - do { \ - /* Test whether the kernel is new enough. This test is only performed \ - if the library is not compiled to run on all kernels. */ \ - \ - int version = _dl_discover_osversion (); \ - if (__glibc_likely (version >= 0)) \ - { \ - if (__builtin_expect (GLRO(dl_osversion) == 0, 1) \ - || GLRO(dl_osversion) > version) \ - GLRO(dl_osversion) = version; \ - \ - /* Now we can test with the required version. */ \ - if (__LINUX_KERNEL_VERSION > 0 && version < __LINUX_KERNEL_VERSION) \ - /* Not sufficent. */ \ - FATAL ("FATAL: kernel too old\n"); \ - } \ - else if (__LINUX_KERNEL_VERSION > 0) \ - FATAL ("FATAL: cannot determine kernel version\n"); \ - } while (0) - -static inline uintptr_t __attribute__ ((always_inline)) -_dl_setup_stack_chk_guard (void *dl_random) -{ - union - { - uintptr_t num; - unsigned char bytes[sizeof (uintptr_t)]; - } ret; - - /* We need in the moment only 8 bytes on 32-bit platforms and 16 - bytes on 64-bit platforms. Therefore we can use the data - directly and not use the kernel-provided data to seed a PRNG. */ - memcpy (ret.bytes, dl_random, sizeof (ret)); -#if BYTE_ORDER == LITTLE_ENDIAN - ret.num &= ~(uintptr_t) 0xff; -#elif BYTE_ORDER == BIG_ENDIAN - ret.num &= ~((uintptr_t) 0xff << (8 * (sizeof (ret) - 1))); -#else -# error "BYTE_ORDER unknown" -#endif - return ret.num; -} - -static inline uintptr_t __attribute__ ((always_inline)) -_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard) -{ - uintptr_t ret; - memcpy (&ret, (char *) dl_random + sizeof (ret), sizeof (ret)); - return ret; -} diff --git a/sysdeps/unix/sysv/linux/dl-sbrk.c b/sysdeps/unix/sysv/linux/dl-sbrk.c deleted file mode 100644 index 1ce5cb188c..0000000000 --- a/sysdeps/unix/sysv/linux/dl-sbrk.c +++ /dev/null @@ -1,5 +0,0 @@ -/* We can use the normal code but we also know the __curbrk is not exported - from ld.so. */ -extern void *__curbrk attribute_hidden; - -#include diff --git a/sysdeps/unix/sysv/linux/dl-sysdep.c b/sysdeps/unix/sysv/linux/dl-sysdep.c deleted file mode 100644 index 3082ce207e..0000000000 --- a/sysdeps/unix/sysv/linux/dl-sysdep.c +++ /dev/null @@ -1,132 +0,0 @@ -/* Dynamic linker system dependencies for Linux. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Linux needs some special initialization, but otherwise uses - the generic dynamic linker system interface code. */ - -#include -#include -#include -#include -#include -#include - -#ifdef SHARED -# define DL_SYSDEP_INIT frob_brk () - -static inline void -frob_brk (void) -{ - __brk (0); /* Initialize the break. */ -} - -# include -#endif - - -int -attribute_hidden -_dl_discover_osversion (void) -{ -#if defined NEED_DL_SYSINFO_DSO && defined SHARED - if (GLRO(dl_sysinfo_map) != NULL) - { - /* If the kernel-supplied DSO contains a note indicating the kernel's - version, we don't need to call uname or parse any strings. */ - - static const struct - { - ElfW(Nhdr) hdr; - char vendor[8]; - } expected_note = { { sizeof "Linux", sizeof (ElfW(Word)), 0 }, "Linux" }; - const ElfW(Phdr) *const phdr = GLRO(dl_sysinfo_map)->l_phdr; - const ElfW(Word) phnum = GLRO(dl_sysinfo_map)->l_phnum; - for (uint_fast16_t i = 0; i < phnum; ++i) - if (phdr[i].p_type == PT_NOTE) - { - const ElfW(Addr) start = (phdr[i].p_vaddr - + GLRO(dl_sysinfo_map)->l_addr); - const ElfW(Nhdr) *note = (const void *) start; - while ((ElfW(Addr)) (note + 1) - start < phdr[i].p_memsz) - { - if (!memcmp (note, &expected_note, sizeof expected_note)) - return *(const ElfW(Word) *) ((const void *) note - + sizeof expected_note); -#define ROUND(len) (((len) + sizeof note->n_type - 1) & -sizeof note->n_type) - note = ((const void *) (note + 1) - + ROUND (note->n_namesz) + ROUND (note->n_descsz)); -#undef ROUND - } - } - } -#endif - - char bufmem[64]; - char *buf = bufmem; - unsigned int version; - int parts; - char *cp; - struct utsname uts; - - /* Try the uname system call. */ - if (__uname (&uts)) - { - /* This was not successful. Now try reading the /proc filesystem. */ - int fd = __open ("/proc/sys/kernel/osrelease", O_RDONLY); - if (fd < 0) - return -1; - ssize_t reslen = __read (fd, bufmem, sizeof (bufmem)); - __close (fd); - if (reslen <= 0) - /* This also didn't work. We give up since we cannot - make sure the library can actually work. */ - return -1; - buf[MIN (reslen, (ssize_t) sizeof (bufmem) - 1)] = '\0'; - } - else - buf = uts.release; - - /* Now convert it into a number. The string consists of at most - three parts. */ - version = 0; - parts = 0; - cp = buf; - while ((*cp >= '0') && (*cp <= '9')) - { - unsigned int here = *cp++ - '0'; - - while ((*cp >= '0') && (*cp <= '9')) - { - here *= 10; - here += *cp++ - '0'; - } - - ++parts; - version <<= 8; - version |= here; - - if (*cp++ != '.' || parts == 3) - /* Another part following? */ - break; - } - - if (parts < 3) - version <<= 8 * (3 - parts); - - return version; -} diff --git a/sysdeps/unix/sysv/linux/dl-sysdep.h b/sysdeps/unix/sysv/linux/dl-sysdep.h deleted file mode 100644 index 586f130264..0000000000 --- a/sysdeps/unix/sysv/linux/dl-sysdep.h +++ /dev/null @@ -1,33 +0,0 @@ -/* System-specific settings for dynamic linker code. Linux version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include_next - -/* On many architectures the kernel provides a virtual DSO and gives - AT_SYSINFO_EHDR to point us to it. As this is introduced for new - machines, we should look at it for unwind information even if - we aren't making direct use of it. So enable this across the board. */ - -#define NEED_DL_SYSINFO_DSO 1 - - -#ifndef __ASSEMBLER__ -/* Get version of the OS. */ -extern int _dl_discover_osversion (void) attribute_hidden; -# define HAVE_DL_DISCOVER_OSVERSION 1 -#endif diff --git a/sysdeps/unix/sysv/linux/dl-vdso.c b/sysdeps/unix/sysv/linux/dl-vdso.c deleted file mode 100644 index 7e3546e5bc..0000000000 --- a/sysdeps/unix/sysv/linux/dl-vdso.c +++ /dev/null @@ -1,49 +0,0 @@ -/* ELF symbol resolve functions for VDSO objects. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "config.h" -#include - - -void * -internal_function -_dl_vdso_vsym (const char *name, const struct r_found_version *vers) -{ - struct link_map *map = GLRO (dl_sysinfo_map); - void *value = NULL; - - - if (map != NULL) - { - /* Use a WEAK REF so we don't error out if the symbol is not found. */ - ElfW (Sym) wsym; - memset (&wsym, 0, sizeof (ElfW (Sym))); - wsym.st_info = (unsigned char) ELFW (ST_INFO (STB_WEAK, STT_NOTYPE)); - - /* Search the scope of the vdso map. */ - const ElfW (Sym) *ref = &wsym; - lookup_t result = GLRO (dl_lookup_symbol_x) (name, map, &ref, - map->l_local_scope, - vers, 0, 0, NULL); - - if (ref != NULL) - value = DL_SYMBOL_ADDRESS (result, ref); - } - - return value; -} diff --git a/sysdeps/unix/sysv/linux/dl-vdso.h b/sysdeps/unix/sysv/linux/dl-vdso.h deleted file mode 100644 index 8923883f88..0000000000 --- a/sysdeps/unix/sysv/linux/dl-vdso.h +++ /dev/null @@ -1,53 +0,0 @@ -/* ELF symbol resolve functions for VDSO objects. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_VDSO_H -#define _DL_VDSO_H 1 - -#include -#include -#include - -/* Create version number record for lookup. */ -#define PREPARE_VERSION(var, vname, vhash) \ - struct r_found_version var; \ - var.name = vname; \ - var.hidden = 1; \ - var.hash = vhash; \ - assert (var.hash == _dl_elf_hash (var.name)); \ - /* We don't have a specific file where the symbol can be found. */ \ - var.filename = NULL - -/* Use this for the known version sets defined below, where we - record their precomputed hash values only once, in this file. */ -#define PREPARE_VERSION_KNOWN(var, vname) \ - PREPARE_VERSION (var, VDSO_NAME_##vname, VDSO_HASH_##vname) - -#define VDSO_NAME_LINUX_2_6 "LINUX_2.6" -#define VDSO_HASH_LINUX_2_6 61765110 -#define VDSO_NAME_LINUX_2_6_15 "LINUX_2.6.15" -#define VDSO_HASH_LINUX_2_6_15 123718565 -#define VDSO_NAME_LINUX_2_6_29 "LINUX_2.6.29" -#define VDSO_HASH_LINUX_2_6_29 123718585 - -/* Functions for resolving symbols in the VDSO link map. */ -extern void *_dl_vdso_vsym (const char *name, - const struct r_found_version *version) - internal_function attribute_hidden; - -#endif /* dl-vdso.h */ diff --git a/sysdeps/unix/sysv/linux/dl-writev.h b/sysdeps/unix/sysv/linux/dl-writev.h deleted file mode 100644 index 112319052e..0000000000 --- a/sysdeps/unix/sysv/linux/dl-writev.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Message-writing for the dynamic linker. Linux version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* This is used from only one place: dl-misc.c:_dl_debug_vdprintf. - Hence it's in a header with the expectation it will be inlined. - - This is writev, but with a constraint added and others loosened: - - 1. Under RTLD_PRIVATE_ERRNO, it must not clobber the private errno - when another thread holds the dl_load_lock. - 2. It is not obliged to detect and report errors at all. - 3. It's not really obliged to deliver a single atomic write - (though it may be preferable). */ - -static inline void -_dl_writev (int fd, const struct iovec *iov, size_t niov) -{ - INTERNAL_SYSCALL_DECL (err); - INTERNAL_SYSCALL (writev, err, 3, fd, iov, niov); -} diff --git a/sysdeps/unix/sysv/linux/epoll_pwait.c b/sysdeps/unix/sysv/linux/epoll_pwait.c deleted file mode 100644 index 59391f409b..0000000000 --- a/sysdeps/unix/sysv/linux/epoll_pwait.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include -#include - -#ifdef __NR_epoll_pwait - -/* Wait for events on an epoll instance "epfd". Returns the number of - triggered events returned in "events" buffer. Or -1 in case of - error with the "errno" variable set to the specific error code. The - "events" parameter is a buffer that will contain triggered - events. The "maxevents" is the maximum number of events to be - returned ( usually size of "events" ). The "timeout" parameter - specifies the maximum wait time in milliseconds (-1 == infinite). - The thread's signal mask is temporarily and atomically replaced with - the one provided as parameter. */ - -int epoll_pwait (int epfd, struct epoll_event *events, - int maxevents, int timeout, - const sigset_t *set) -{ - return SYSCALL_CANCEL (epoll_pwait, epfd, events, maxevents, - timeout, set, _NSIG / 8); -} - -#else - -int epoll_pwait (int epfd, struct epoll_event *events, - int maxevents, int timeout, - const sigset_t *set) -{ - __set_errno (ENOSYS); - return -1; -} -stub_warning (epoll_pwait) - -#endif - -libc_hidden_def (epoll_pwait) diff --git a/sysdeps/unix/sysv/linux/epoll_wait.c b/sysdeps/unix/sysv/linux/epoll_wait.c deleted file mode 100644 index eb6e6d3ace..0000000000 --- a/sysdeps/unix/sysv/linux/epoll_wait.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Linux epoll_wait syscall implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -int -epoll_wait (int epfd, struct epoll_event *events, int maxevents, int timeout) -{ -#ifdef __NR_epoll_wait - return SYSCALL_CANCEL (epoll_wait, epfd, events, maxevents, timeout); -#else - return epoll_pwait (epfd, events, maxevents, timeout, NULL); -#endif -} diff --git a/sysdeps/unix/sysv/linux/errqueue.h b/sysdeps/unix/sysv/linux/errqueue.h deleted file mode 100644 index 963eb33bb4..0000000000 --- a/sysdeps/unix/sysv/linux/errqueue.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Linux version. */ - -#ifndef _BITS_ERRQUEUE_H -#define _BITS_ERRQUEUE_H 1 - -#include -#include - -struct sock_extended_err - { - u_int32_t ee_errno; - u_int8_t ee_origin; - u_int8_t ee_type; - u_int8_t ee_code; - u_int8_t ee_pad; - u_int32_t ee_info; - u_int32_t ee_data; - }; - -#define SO_EE_ORIGIN_NONE 0 -#define SO_EE_ORIGIN_LOCAL 1 -#define SO_EE_ORIGIN_ICMP 2 -#define SO_EE_ORIGIN_ICMP6 3 - -#define SO_EE_OFFENDER(see) \ - ((struct sockaddr *)(((struct sock_extended_err)(see))+1)) - -#endif /* bits/errqueue.h */ diff --git a/sysdeps/unix/sysv/linux/eventfd_read.c b/sysdeps/unix/sysv/linux/eventfd_read.c deleted file mode 100644 index a909b7a19a..0000000000 --- a/sysdeps/unix/sysv/linux/eventfd_read.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -int -eventfd_read (int fd, eventfd_t *value) -{ - return __read (fd, value, sizeof (eventfd_t)) != sizeof (eventfd_t) ? -1 : 0; -} diff --git a/sysdeps/unix/sysv/linux/eventfd_write.c b/sysdeps/unix/sysv/linux/eventfd_write.c deleted file mode 100644 index 0142a81b90..0000000000 --- a/sysdeps/unix/sysv/linux/eventfd_write.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -int -eventfd_write (int fd, eventfd_t value) -{ - return __write (fd, &value, - sizeof (eventfd_t)) != sizeof (eventfd_t) ? -1 : 0; -} diff --git a/sysdeps/unix/sysv/linux/exit-thread.h b/sysdeps/unix/sysv/linux/exit-thread.h deleted file mode 100644 index 749db19813..0000000000 --- a/sysdeps/unix/sysv/linux/exit-thread.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Call to terminate the current thread. Linux version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* This causes the current thread to exit, without affecting other - threads in the process if there are any. If there are no other - threads left, then this has the effect of _exit (0). */ - -static inline void __attribute__ ((noreturn, always_inline, unused)) -__exit_thread (void) -{ - /* Doing this in a loop is mostly just to satisfy the compiler that the - function really qualifies as noreturn. It also means that in some - pathological situation where the system call does not get made or does - not work, the thread will simply spin rather than running off the end - of the caller and doing unexpectedly strange things. */ - while (1) - { - INTERNAL_SYSCALL_DECL (err); - INTERNAL_SYSCALL (exit, err, 1, 0); - } -} diff --git a/sysdeps/unix/sysv/linux/faccessat.c b/sysdeps/unix/sysv/linux/faccessat.c deleted file mode 100644 index 5aecb10840..0000000000 --- a/sysdeps/unix/sysv/linux/faccessat.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Test for access to file, relative to open directory. Linux version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -int -faccessat (int fd, const char *file, int mode, int flag) -{ - if (flag & ~(AT_SYMLINK_NOFOLLOW | AT_EACCESS)) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - - if ((flag == 0 || ((flag & ~AT_EACCESS) == 0 && ! __libc_enable_secure))) - return INLINE_SYSCALL (faccessat, 3, fd, file, mode); - - struct stat64 stats; - if (__fxstatat64 (_STAT_VER, fd, file, &stats, flag & AT_SYMLINK_NOFOLLOW)) - return -1; - - mode &= (X_OK | W_OK | R_OK); /* Clear any bogus bits. */ -#if R_OK != S_IROTH || W_OK != S_IWOTH || X_OK != S_IXOTH -# error Oops, portability assumptions incorrect. -#endif - - if (mode == F_OK) - return 0; /* The file exists. */ - - uid_t uid = (flag & AT_EACCESS) ? __geteuid () : __getuid (); - - /* The super-user can read and write any file, and execute any file - that anyone can execute. */ - if (uid == 0 && ((mode & X_OK) == 0 - || (stats.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))) - return 0; - - int granted = (uid == stats.st_uid - ? (unsigned int) (stats.st_mode & (mode << 6)) >> 6 - : (stats.st_gid == ((flag & AT_EACCESS) - ? __getegid () : __getgid ()) - || __group_member (stats.st_gid)) - ? (unsigned int) (stats.st_mode & (mode << 3)) >> 3 - : (stats.st_mode & mode)); - - if (granted == mode) - return 0; - - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EACCES); -} diff --git a/sysdeps/unix/sysv/linux/fallocate.c b/sysdeps/unix/sysv/linux/fallocate.c deleted file mode 100644 index d8fedb9f0a..0000000000 --- a/sysdeps/unix/sysv/linux/fallocate.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#ifndef __OFF_T_MATCHES_OFF64_T -/* Reserve storage for the data of the file associated with FD. */ -int -fallocate (int fd, int mode, __off_t offset, __off_t len) -{ - return SYSCALL_CANCEL (fallocate, fd, mode, - SYSCALL_LL (offset), SYSCALL_LL (len)); -} -#endif diff --git a/sysdeps/unix/sysv/linux/fallocate64.c b/sysdeps/unix/sysv/linux/fallocate64.c deleted file mode 100644 index a387a0fd95..0000000000 --- a/sysdeps/unix/sysv/linux/fallocate64.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -/* Reserve storage for the data of the file associated with FD. */ -int -fallocate64 (int fd, int mode, __off64_t offset, __off64_t len) -{ - return SYSCALL_CANCEL (fallocate, fd, mode, - SYSCALL_LL64 (offset), SYSCALL_LL64 (len)); -} - -#ifdef __OFF_T_MATCHES_OFF64_T -weak_alias (fallocate64, fallocate) -#endif diff --git a/sysdeps/unix/sysv/linux/fatal-prepare.h b/sysdeps/unix/sysv/linux/fatal-prepare.h deleted file mode 100644 index cd136b58cb..0000000000 --- a/sysdeps/unix/sysv/linux/fatal-prepare.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* We have to completely disable cancellation. assert() must not be a - cancellation point but the implementation uses write() etc. */ -#define FATAL_PREPARE \ - __libc_ptf_call (__pthread_setcancelstate, \ - (PTHREAD_CANCEL_DISABLE, NULL), 0) diff --git a/sysdeps/unix/sysv/linux/fchmodat.c b/sysdeps/unix/sysv/linux/fchmodat.c deleted file mode 100644 index 30fd28f38b..0000000000 --- a/sysdeps/unix/sysv/linux/fchmodat.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Change the protections of file relative to open directory. Linux version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -int -fchmodat (int fd, const char *file, mode_t mode, int flag) -{ - if (flag & ~AT_SYMLINK_NOFOLLOW) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); -#ifndef __NR_lchmod /* Linux so far has no lchmod syscall. */ - if (flag & AT_SYMLINK_NOFOLLOW) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (ENOTSUP); -#endif - - return INLINE_SYSCALL (fchmodat, 3, fd, file, mode); -} diff --git a/sysdeps/unix/sysv/linux/fcntl.c b/sysdeps/unix/sysv/linux/fcntl.c deleted file mode 100644 index 02f32525c7..0000000000 --- a/sysdeps/unix/sysv/linux/fcntl.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include /* Must come before . */ -#include -#include - -#include - - -static int -do_fcntl (int fd, int cmd, void *arg) -{ - if (cmd != F_GETOWN) - return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg); - - INTERNAL_SYSCALL_DECL (err); - struct f_owner_ex fex; - int res = INTERNAL_SYSCALL (fcntl, err, 3, fd, F_GETOWN_EX, &fex); - if (!INTERNAL_SYSCALL_ERROR_P (res, err)) - return fex.type == F_OWNER_GID ? -fex.pid : fex.pid; - - return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (res, - err)); -} - - -#ifndef NO_CANCELLATION -int -__fcntl_nocancel (int fd, int cmd, ...) -{ - va_list ap; - void *arg; - - va_start (ap, cmd); - arg = va_arg (ap, void *); - va_end (ap); - - return do_fcntl (fd, cmd, arg); -} -#endif - - -int -__libc_fcntl (int fd, int cmd, ...) -{ - va_list ap; - void *arg; - - va_start (ap, cmd); - arg = va_arg (ap, void *); - va_end (ap); - - if (SINGLE_THREAD_P || cmd != F_SETLKW) - return do_fcntl (fd, cmd, arg); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = do_fcntl (fd, cmd, arg); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} -libc_hidden_def (__libc_fcntl) - -weak_alias (__libc_fcntl, __fcntl) -libc_hidden_weak (__fcntl) -weak_alias (__libc_fcntl, fcntl) diff --git a/sysdeps/unix/sysv/linux/fd_to_filename.h b/sysdeps/unix/sysv/linux/fd_to_filename.h deleted file mode 100644 index 414a30f18a..0000000000 --- a/sysdeps/unix/sysv/linux/fd_to_filename.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Query filename corresponding to an open FD. Linux version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include <_itoa.h> - -static inline const char * -fd_to_filename (int fd) -{ - char *ret = malloc (30); - - if (ret != NULL) - { - struct stat64 st; - - *_fitoa_word (fd, __stpcpy (ret, "/proc/self/fd/"), 10, 0) = '\0'; - - /* We must make sure the file exists. */ - if (__lxstat64 (_STAT_VER, ret, &st) < 0) - { - /* /proc is not mounted or something else happened. Don't - return the file name. */ - free (ret); - ret = NULL; - } - } - return ret; -} diff --git a/sysdeps/unix/sysv/linux/fdatasync.c b/sysdeps/unix/sysv/linux/fdatasync.c deleted file mode 100644 index 09a07fbb9e..0000000000 --- a/sysdeps/unix/sysv/linux/fdatasync.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Synchronize a file's in-core state with storage device Linux - implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Synchronize at least the data part of a file with the underlying - media. */ -int -fdatasync (int fd) -{ - return SYSCALL_CANCEL (fdatasync, fd); -} diff --git a/sysdeps/unix/sysv/linux/fexecve.c b/sysdeps/unix/sysv/linux/fexecve.c deleted file mode 100644 index 30fa719b56..0000000000 --- a/sysdeps/unix/sysv/linux/fexecve.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - -/* Execute the file FD refers to, overlaying the running program image. - ARGV and ENVP are passed to the new program, as for `execve'. */ -int -fexecve (int fd, char *const argv[], char *const envp[]) -{ - if (fd < 0 || argv == NULL || envp == NULL) - { - __set_errno (EINVAL); - return -1; - } - - /* We use the /proc filesystem to get the information. If it is not - mounted we fail. */ - char buf[sizeof "/proc/self/fd/" + sizeof (int) * 3]; - __snprintf (buf, sizeof (buf), "/proc/self/fd/%d", fd); - - /* We do not need the return value. */ - __execve (buf, argv, envp); - - int save = errno; - - /* We come here only if the 'execve' call fails. Determine whether - /proc is mounted. If not we return ENOSYS. */ - struct stat st; - if (stat ("/proc/self/fd", &st) != 0 && errno == ENOENT) - save = ENOSYS; - - __set_errno (save); - - return -1; -} diff --git a/sysdeps/unix/sysv/linux/fips-private.h b/sysdeps/unix/sysv/linux/fips-private.h deleted file mode 100644 index c9fe26695c..0000000000 --- a/sysdeps/unix/sysv/linux/fips-private.h +++ /dev/null @@ -1,74 +0,0 @@ -/* FIPS compliance status test for GNU/Linux systems. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FIPS_PRIVATE_H -#define _FIPS_PRIVATE_H - -#include -#include -#include -#include -#include -#include - -/* Return true if FIPS mode is enabled. See - sysdeps/generic/fips-private.h for more information. */ - -static bool -fips_enabled_p (void) -{ - static enum - { - FIPS_UNTESTED = 0, - FIPS_ENABLED = 1, - FIPS_DISABLED = -1, - FIPS_TEST_FAILED = -2 - } checked; - - if (checked == FIPS_UNTESTED) - { - int fd = open_not_cancel_2 ("/proc/sys/crypto/fips_enabled", O_RDONLY); - - if (fd != -1) - { - /* This is more than enough, the file contains a single integer. */ - char buf[32]; - ssize_t n; - n = TEMP_FAILURE_RETRY (read_not_cancel (fd, buf, sizeof (buf) - 1)); - close_not_cancel_no_status (fd); - - if (n > 0) - { - /* Terminate the string. */ - buf[n] = '\0'; - - char *endp; - long int res = strtol (buf, &endp, 10); - if (endp != buf && (*endp == '\0' || *endp == '\n')) - checked = (res > 0) ? FIPS_ENABLED : FIPS_DISABLED; - } - } - - if (checked == FIPS_UNTESTED) - checked = FIPS_TEST_FAILED; - } - - return checked == FIPS_ENABLED; -} - -#endif /* _FIPS_PRIVATE_H */ diff --git a/sysdeps/unix/sysv/linux/fpathconf.c b/sysdeps/unix/sysv/linux/fpathconf.c deleted file mode 100644 index 4d0ed8ec43..0000000000 --- a/sysdeps/unix/sysv/linux/fpathconf.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Get file-specific information about descriptor FD. Linux version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "pathconf.h" - -static long int posix_fpathconf (int fd, int name); - -/* Define this first, so it can be inlined. */ -#define __fpathconf static posix_fpathconf -#include - - -/* Get file-specific information about descriptor FD. */ -long int -__fpathconf (int fd, int name) -{ - struct statfs fsbuf; - - switch (name) - { - case _PC_LINK_MAX: - return __statfs_link_max (__fstatfs (fd, &fsbuf), &fsbuf, NULL, fd); - - case _PC_FILESIZEBITS: - return __statfs_filesize_max (__fstatfs (fd, &fsbuf), &fsbuf); - - case _PC_2_SYMLINKS: - return __statfs_symlinks (__fstatfs (fd, &fsbuf), &fsbuf); - - case _PC_CHOWN_RESTRICTED: - return __statfs_chown_restricted (__fstatfs (fd, &fsbuf), &fsbuf); - - default: - return posix_fpathconf (fd, name); - } -} diff --git a/sysdeps/unix/sysv/linux/fstatfs64.c b/sysdeps/unix/sysv/linux/fstatfs64.c deleted file mode 100644 index 3be70c057a..0000000000 --- a/sysdeps/unix/sysv/linux/fstatfs64.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Return information about the filesystem on which FD resides. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Hide the prototypes for __fstatfs and fstatfs so that GCC will not - complain about the different function signatures if they are aliased - to __fstat64. If STATFS_IS_STATFS64 is not zero then the statfs and - statfs64 structures have an identical layout but different type names. */ - -#if STATFS_IS_STATFS64 -# define __fstatfs __fstatfs_disable -# define fstatfs fstatfs_disable -#endif -#include - -#include - -/* Defined in statfs64.c. */ -extern int __no_statfs64 attribute_hidden; - -/* Return information about the filesystem on which FD resides. */ -int -__fstatfs64 (int fd, struct statfs64 *buf) -{ -#ifdef __NR_fstatfs64 -# if __ASSUME_STATFS64 == 0 - if (! __no_statfs64) -# endif - { - int result = INLINE_SYSCALL (fstatfs64, 3, fd, sizeof (*buf), buf); - -# if __ASSUME_STATFS64 == 0 - if (result == 0 || errno != ENOSYS) -# endif - return result; - -# if __ASSUME_STATFS64 == 0 - __no_statfs64 = 1; -# endif - } -#endif - -#if __ASSUME_STATFS64 == 0 - struct statfs buf32; - - if (__fstatfs (fd, &buf32) < 0) - return -1; - - buf->f_type = buf32.f_type; - buf->f_bsize = buf32.f_bsize; - buf->f_blocks = buf32.f_blocks; - buf->f_bfree = buf32.f_bfree; - buf->f_bavail = buf32.f_bavail; - buf->f_files = buf32.f_files; - buf->f_ffree = buf32.f_ffree; - buf->f_fsid = buf32.f_fsid; - buf->f_namelen = buf32.f_namelen; - buf->f_frsize = buf32.f_frsize; - memcpy (buf->f_spare, buf32.f_spare, sizeof (buf32.f_spare)); - - return 0; -#endif -} -weak_alias (__fstatfs64, fstatfs64) - -#undef __fstatfs -#undef fstatfs - -#if STATFS_IS_STATFS64 -weak_alias (__fstatfs64, __fstatfs) -weak_alias (__fstatfs64, fstatfs) -#endif diff --git a/sysdeps/unix/sysv/linux/fstatvfs.c b/sysdeps/unix/sysv/linux/fstatvfs.c deleted file mode 100644 index e07a5b9f3d..0000000000 --- a/sysdeps/unix/sysv/linux/fstatvfs.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -extern void __internal_statvfs (const char *name, struct statvfs *buf, - struct statfs *fsbuf, int fd); - - -int -__fstatvfs (int fd, struct statvfs *buf) -{ - struct statfs fsbuf; - - /* Get as much information as possible from the system. */ - if (__fstatfs (fd, &fsbuf) < 0) - return -1; - - /* Convert the result. */ - __internal_statvfs (NULL, buf, &fsbuf, fd); - - /* We signal success if the statfs call succeeded. */ - return 0; -} -weak_alias (__fstatvfs, fstatvfs) -libc_hidden_weak (fstatvfs) diff --git a/sysdeps/unix/sysv/linux/fstatvfs64.c b/sysdeps/unix/sysv/linux/fstatvfs64.c deleted file mode 100644 index 02a0d7ee42..0000000000 --- a/sysdeps/unix/sysv/linux/fstatvfs64.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Return information about the filesystem on which FD resides. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - -extern void __internal_statvfs64 (const char *name, struct statvfs64 *buf, - struct statfs64 *fsbuf, int fd); - - -/* Return information about the filesystem on which FD resides. */ -int -__fstatvfs64 (int fd, struct statvfs64 *buf) -{ - struct statfs64 fsbuf; - int res = __fstatfs64 (fd, &fsbuf); - -#ifndef __ASSUME_STATFS64 - if (res < 0 && errno == ENOSYS) - { - struct statvfs buf32; - - res = fstatvfs (fd, &buf32); - if (res == 0) - { - buf->f_bsize = buf32.f_bsize; - buf->f_frsize = buf32.f_frsize; - buf->f_blocks = buf32.f_blocks; - buf->f_bfree = buf32.f_bfree; - buf->f_bavail = buf32.f_bavail; - buf->f_files = buf32.f_files; - buf->f_ffree = buf32.f_ffree; - buf->f_favail = buf32.f_favail; - buf->f_fsid = buf32.f_fsid; - buf->f_flag = buf32.f_flag; - buf->f_namemax = buf32.f_namemax; - memcpy (buf->__f_spare, buf32.__f_spare, sizeof (buf32.__f_spare)); - } - } -#endif - - if (res == 0) - /* Convert the result. */ - __internal_statvfs64 (NULL, buf, &fsbuf, fd); - - return res; -} -weak_alias (__fstatvfs64, fstatvfs64) diff --git a/sysdeps/unix/sysv/linux/fsync.c b/sysdeps/unix/sysv/linux/fsync.c deleted file mode 100644 index ac4827bd5e..0000000000 --- a/sysdeps/unix/sysv/linux/fsync.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Synchronize a file's in-core state with storage device Linux - implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Make all changes done to FD actually appear on disk. */ -int -fsync (int fd) -{ - return SYSCALL_CANCEL (fsync, fd); -} diff --git a/sysdeps/unix/sysv/linux/ftime.c b/sysdeps/unix/sysv/linux/ftime.c deleted file mode 100644 index 5a5949f608..0000000000 --- a/sysdeps/unix/sysv/linux/ftime.c +++ /dev/null @@ -1,3 +0,0 @@ -/* Linux defines the ftime system call but doesn't actually implement - it. Use the BSD implementation. */ -#include diff --git a/sysdeps/unix/sysv/linux/ftruncate.c b/sysdeps/unix/sysv/linux/ftruncate.c deleted file mode 100644 index 1068f2abe4..0000000000 --- a/sysdeps/unix/sysv/linux/ftruncate.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -#ifndef __OFF_T_MATCHES_OFF64_T -/* Truncate the file FD refers to LENGTH bytes. */ -int -__ftruncate (int fd, off_t length) -{ -# ifndef __NR_ftruncate - return INLINE_SYSCALL_CALL (ftruncate64, fd, - __ALIGNMENT_ARG SYSCALL_LL (length)); -# else - return INLINE_SYSCALL_CALL (ftruncate, fd, length); -# endif -} -weak_alias (__ftruncate, ftruncate) -#endif diff --git a/sysdeps/unix/sysv/linux/ftruncate64.c b/sysdeps/unix/sysv/linux/ftruncate64.c deleted file mode 100644 index a8e0fd6ba0..0000000000 --- a/sysdeps/unix/sysv/linux/ftruncate64.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#ifndef __NR_ftruncate64 -# define __NR_ftruncate64 __NR_ftruncate -#endif - -/* Truncate the file referenced by FD to LENGTH bytes. */ -int -__ftruncate64 (int fd, off64_t length) -{ - return INLINE_SYSCALL_CALL (ftruncate64, fd, - __ALIGNMENT_ARG SYSCALL_LL64 (length)); -} -weak_alias (__ftruncate64, ftruncate64) - -#ifdef __OFF_T_MATCHES_OFF64_T -weak_alias (__ftruncate64, __ftruncate) -weak_alias (__ftruncate64, ftruncate); -#endif diff --git a/sysdeps/unix/sysv/linux/futex-internal.h b/sysdeps/unix/sysv/linux/futex-internal.h deleted file mode 100644 index 1386807f5b..0000000000 --- a/sysdeps/unix/sysv/linux/futex-internal.h +++ /dev/null @@ -1,251 +0,0 @@ -/* futex operations for glibc-internal use. Linux version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef FUTEX_INTERNAL_H -#define FUTEX_INTERNAL_H - -#include -#include -#include -#include - -/* See sysdeps/nptl/futex-internal.h for documentation; this file only - contains Linux-specific comments. - - The Linux kernel treats provides absolute timeouts based on the - CLOCK_REALTIME clock and relative timeouts measured against the - CLOCK_MONOTONIC clock. - - We expect a Linux kernel version of 2.6.22 or more recent (since this - version, EINTR is not returned on spurious wake-ups anymore). */ - -/* FUTEX_SHARED is always supported by the Linux kernel. */ -static __always_inline int -futex_supports_pshared (int pshared) -{ - if (__glibc_likely (pshared == PTHREAD_PROCESS_PRIVATE)) - return 0; - else if (pshared == PTHREAD_PROCESS_SHARED) - return 0; - else - return EINVAL; -} - -/* The Linux kernel supports relative timeouts measured against the - CLOCK_MONOTONIC clock. */ -static __always_inline bool -futex_supports_exact_relative_timeouts (void) -{ - return true; -} - -/* See sysdeps/nptl/futex-internal.h for details. */ -static __always_inline int -futex_wait (unsigned int *futex_word, unsigned int expected, int private) -{ - int err = lll_futex_timed_wait (futex_word, expected, NULL, private); - switch (err) - { - case 0: - case -EAGAIN: - case -EINTR: - return -err; - - case -ETIMEDOUT: /* Cannot have happened as we provided no timeout. */ - case -EFAULT: /* Must have been caused by a glibc or application bug. */ - case -EINVAL: /* Either due to wrong alignment or due to the timeout not - being normalized. Must have been caused by a glibc or - application bug. */ - case -ENOSYS: /* Must have been caused by a glibc bug. */ - /* No other errors are documented at this time. */ - default: - futex_fatal_error (); - } -} - -/* See sysdeps/nptl/futex-internal.h for details. */ -static __always_inline int -futex_wait_cancelable (unsigned int *futex_word, unsigned int expected, - int private) -{ - int oldtype; - oldtype = __pthread_enable_asynccancel (); - int err = lll_futex_timed_wait (futex_word, expected, NULL, private); - __pthread_disable_asynccancel (oldtype); - switch (err) - { - case 0: - case -EAGAIN: - case -EINTR: - return -err; - - case -ETIMEDOUT: /* Cannot have happened as we provided no timeout. */ - case -EFAULT: /* Must have been caused by a glibc or application bug. */ - case -EINVAL: /* Either due to wrong alignment or due to the timeout not - being normalized. Must have been caused by a glibc or - application bug. */ - case -ENOSYS: /* Must have been caused by a glibc bug. */ - /* No other errors are documented at this time. */ - default: - futex_fatal_error (); - } -} - -/* See sysdeps/nptl/futex-internal.h for details. */ -static __always_inline int -futex_reltimed_wait (unsigned int *futex_word, unsigned int expected, - const struct timespec *reltime, int private) -{ - int err = lll_futex_timed_wait (futex_word, expected, reltime, private); - switch (err) - { - case 0: - case -EAGAIN: - case -EINTR: - case -ETIMEDOUT: - return -err; - - case -EFAULT: /* Must have been caused by a glibc or application bug. */ - case -EINVAL: /* Either due to wrong alignment or due to the timeout not - being normalized. Must have been caused by a glibc or - application bug. */ - case -ENOSYS: /* Must have been caused by a glibc bug. */ - /* No other errors are documented at this time. */ - default: - futex_fatal_error (); - } -} - -/* See sysdeps/nptl/futex-internal.h for details. */ -static __always_inline int -futex_reltimed_wait_cancelable (unsigned int *futex_word, - unsigned int expected, - const struct timespec *reltime, int private) -{ - int oldtype; - oldtype = __pthread_enable_asynccancel (); - int err = lll_futex_timed_wait (futex_word, expected, reltime, private); - __pthread_disable_asynccancel (oldtype); - switch (err) - { - case 0: - case -EAGAIN: - case -EINTR: - case -ETIMEDOUT: - return -err; - - case -EFAULT: /* Must have been caused by a glibc or application bug. */ - case -EINVAL: /* Either due to wrong alignment or due to the timeout not - being normalized. Must have been caused by a glibc or - application bug. */ - case -ENOSYS: /* Must have been caused by a glibc bug. */ - /* No other errors are documented at this time. */ - default: - futex_fatal_error (); - } -} - -/* See sysdeps/nptl/futex-internal.h for details. */ -static __always_inline int -futex_abstimed_wait (unsigned int *futex_word, unsigned int expected, - const struct timespec *abstime, int private) -{ - /* Work around the fact that the kernel rejects negative timeout values - despite them being valid. */ - if (__glibc_unlikely ((abstime != NULL) && (abstime->tv_sec < 0))) - return ETIMEDOUT; - int err = lll_futex_timed_wait_bitset (futex_word, expected, abstime, - FUTEX_CLOCK_REALTIME, private); - switch (err) - { - case 0: - case -EAGAIN: - case -EINTR: - case -ETIMEDOUT: - return -err; - - case -EFAULT: /* Must have been caused by a glibc or application bug. */ - case -EINVAL: /* Either due to wrong alignment or due to the timeout not - being normalized. Must have been caused by a glibc or - application bug. */ - case -ENOSYS: /* Must have been caused by a glibc bug. */ - /* No other errors are documented at this time. */ - default: - futex_fatal_error (); - } -} - -/* See sysdeps/nptl/futex-internal.h for details. */ -static __always_inline int -futex_abstimed_wait_cancelable (unsigned int *futex_word, - unsigned int expected, - const struct timespec *abstime, int private) -{ - /* Work around the fact that the kernel rejects negative timeout values - despite them being valid. */ - if (__glibc_unlikely ((abstime != NULL) && (abstime->tv_sec < 0))) - return ETIMEDOUT; - int oldtype; - oldtype = __pthread_enable_asynccancel (); - int err = lll_futex_timed_wait_bitset (futex_word, expected, abstime, - FUTEX_CLOCK_REALTIME, private); - __pthread_disable_asynccancel (oldtype); - switch (err) - { - case 0: - case -EAGAIN: - case -EINTR: - case -ETIMEDOUT: - return -err; - - case -EFAULT: /* Must have been caused by a glibc or application bug. */ - case -EINVAL: /* Either due to wrong alignment or due to the timeout not - being normalized. Must have been caused by a glibc or - application bug. */ - case -ENOSYS: /* Must have been caused by a glibc bug. */ - /* No other errors are documented at this time. */ - default: - futex_fatal_error (); - } -} - -/* See sysdeps/nptl/futex-internal.h for details. */ -static __always_inline void -futex_wake (unsigned int *futex_word, int processes_to_wake, int private) -{ - int res = lll_futex_wake (futex_word, processes_to_wake, private); - /* No error. Ignore the number of woken processes. */ - if (res >= 0) - return; - switch (res) - { - case -EFAULT: /* Could have happened due to memory reuse. */ - case -EINVAL: /* Could be either due to incorrect alignment (a bug in - glibc or in the application) or due to memory being - reused for a PI futex. We cannot distinguish between the - two causes, and one of them is correct use, so we do not - act in this case. */ - return; - case -ENOSYS: /* Must have been caused by a glibc bug. */ - /* No other errors are documented at this time. */ - default: - futex_fatal_error (); - } -} - -#endif /* futex-internal.h */ diff --git a/sysdeps/unix/sysv/linux/futimens.c b/sysdeps/unix/sysv/linux/futimens.c deleted file mode 100644 index b4985e034c..0000000000 --- a/sysdeps/unix/sysv/linux/futimens.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Change access and modification times of open file. Linux version. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - -/* Change the access time of the file associated with FD to TSP[0] and - the modification time of FILE to TSP[1]. - - Starting with 2.6.22 the Linux kernel has the utimensat syscall which - can be used to implement futimens. */ -int -futimens (int fd, const struct timespec tsp[2]) -{ - if (fd < 0) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EBADF); - /* Avoid implicit array coercion in syscall macros. */ - return INLINE_SYSCALL (utimensat, 4, fd, NULL, &tsp[0], 0); -} diff --git a/sysdeps/unix/sysv/linux/futimes.c b/sysdeps/unix/sysv/linux/futimes.c deleted file mode 100644 index af79cb1508..0000000000 --- a/sysdeps/unix/sysv/linux/futimes.c +++ /dev/null @@ -1,51 +0,0 @@ -/* futimes -- change access and modification times of open file. Linux version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include <_itoa.h> -#include - - -/* Change the access time of the file associated with FD to TVP[0] and - the modification time of FILE to TVP[1]. - - Starting with 2.6.22 the Linux kernel has the utimensat syscall which - can be used to implement futimes. */ -int -__futimes (int fd, const struct timeval tvp[2]) -{ - /* The utimensat system call expects timespec not timeval. */ - struct timespec ts[2]; - if (tvp != NULL) - { - if (tvp[0].tv_usec < 0 || tvp[0].tv_usec >= 1000000 - || tvp[1].tv_usec < 0 || tvp[1].tv_usec >= 1000000) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - - TIMEVAL_TO_TIMESPEC (&tvp[0], &ts[0]); - TIMEVAL_TO_TIMESPEC (&tvp[1], &ts[1]); - } - - return INLINE_SYSCALL (utimensat, 4, fd, NULL, tvp ? &ts : NULL, 0); -} -weak_alias (__futimes, futimes) diff --git a/sysdeps/unix/sysv/linux/futimesat.c b/sysdeps/unix/sysv/linux/futimesat.c deleted file mode 100644 index 88d11941a8..0000000000 --- a/sysdeps/unix/sysv/linux/futimesat.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -/* Change the access time of FILE relative to FD to TVP[0] and - the modification time of FILE to TVP[1]. */ -int -futimesat (int fd, const char *file, const struct timeval tvp[2]) -{ - if (file == NULL) - return __futimes (fd, tvp); - - /* Avoid implicit array coercion in syscall macros. */ - return INLINE_SYSCALL (futimesat, 3, fd, file, &tvp[0]); -} diff --git a/sysdeps/unix/sysv/linux/fxstat.c b/sysdeps/unix/sysv/linux/fxstat.c deleted file mode 100644 index b7b84264d6..0000000000 --- a/sysdeps/unix/sysv/linux/fxstat.c +++ /dev/null @@ -1,61 +0,0 @@ -/* fxstat using old-style Unix fstat system call. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ho hum, if xstat == xstat64 we must get rid of the prototype or gcc - will complain since they don't strictly match. */ -#define __fxstat64 __fxstat64_disable - -#include -#include -#include -#include -#include - -#include -#include - -#include - -/* Get information about the file FD in BUF. */ -int -__fxstat (int vers, int fd, struct stat *buf) -{ - if (vers == _STAT_VER_KERNEL) - return INLINE_SYSCALL (fstat, 2, fd, buf); - -#ifdef STAT_IS_KERNEL_STAT - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); -#else - struct kernel_stat kbuf; - int result; - - result = INLINE_SYSCALL (fstat, 2, fd, &kbuf); - if (result == 0) - result = __xstat_conv (vers, &kbuf, buf); - - return result; -#endif -} - -hidden_def (__fxstat) -weak_alias (__fxstat, _fxstat); -#if XSTAT_IS_XSTAT64 -#undef __fxstat64 -strong_alias (__fxstat, __fxstat64); -hidden_ver (__fxstat, __fxstat64) -#endif diff --git a/sysdeps/unix/sysv/linux/fxstat64.c b/sysdeps/unix/sysv/linux/fxstat64.c deleted file mode 100644 index 8a59d86d31..0000000000 --- a/sysdeps/unix/sysv/linux/fxstat64.c +++ /dev/null @@ -1,53 +0,0 @@ -/* fxstat64 using Linux fstat64 system call. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include -#include - -#include - -/* Get information about the file FD in BUF. */ - -int -___fxstat64 (int vers, int fd, struct stat64 *buf) -{ - int result; - result = INLINE_SYSCALL (fstat64, 2, fd, buf); -#if defined _HAVE_STAT64___ST_INO && !__ASSUME_ST_INO_64_BIT - if (__builtin_expect (!result, 1) && buf->__st_ino != (__ino_t) buf->st_ino) - buf->st_ino = buf->__st_ino; -#endif - return result; -} - -#include - -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) -versioned_symbol (libc, ___fxstat64, __fxstat64, GLIBC_2_2); -strong_alias (___fxstat64, __old__fxstat64) -compat_symbol (libc, __old__fxstat64, __fxstat64, GLIBC_2_1); -hidden_ver (___fxstat64, __fxstat64) -#else -strong_alias (___fxstat64, __fxstat64) -hidden_def (__fxstat64) -#endif diff --git a/sysdeps/unix/sysv/linux/fxstatat.c b/sysdeps/unix/sysv/linux/fxstatat.c deleted file mode 100644 index 23f17eaf70..0000000000 --- a/sysdeps/unix/sysv/linux/fxstatat.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ho hum, if fxstatat == fxstatat64 we must get rid of the prototype or gcc - will complain since they don't strictly match. */ -#define __fxstatat64 __fxstatat64_disable - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -/* Get information about the file NAME in BUF. */ -int -__fxstatat (int vers, int fd, const char *file, struct stat *st, int flag) -{ - int result; - INTERNAL_SYSCALL_DECL (err); -#ifdef STAT_IS_KERNEL_STAT -# define kst (*st) -#else - struct kernel_stat kst; -#endif - - result = INTERNAL_SYSCALL (newfstatat, err, 4, fd, file, &kst, flag); - if (!__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - { -#ifdef STAT_IS_KERNEL_STAT - return 0; -#else - return __xstat_conv (vers, &kst, st); -#endif - } - else - return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (result, - err)); -} -libc_hidden_def (__fxstatat) -#if XSTAT_IS_XSTAT64 -# undef __fxstatat64 -strong_alias (__fxstatat, __fxstatat64); -libc_hidden_def (__fxstatat64) -#endif diff --git a/sysdeps/unix/sysv/linux/fxstatat64.c b/sysdeps/unix/sysv/linux/fxstatat64.c deleted file mode 100644 index ef1e132c11..0000000000 --- a/sysdeps/unix/sysv/linux/fxstatat64.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -/* Get information about the file NAME in BUF. */ - -int -__fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag) -{ - if (__glibc_unlikely (vers != _STAT_VER_LINUX)) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - - int result; - INTERNAL_SYSCALL_DECL (err); - - result = INTERNAL_SYSCALL (fstatat64, err, 4, fd, file, st, flag); - if (!__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return 0; - else - return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (result, - err)); -} -libc_hidden_def (__fxstatat64) diff --git a/sysdeps/unix/sysv/linux/gai_sigqueue.c b/sysdeps/unix/sysv/linux/gai_sigqueue.c deleted file mode 100644 index 0f7b459b5e..0000000000 --- a/sysdeps/unix/sysv/linux/gai_sigqueue.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#include -#include - -#include "gai_misc.h" - -#ifdef __NR_rt_sigqueueinfo - -/* Return any pending signal or wait for one for the given time. */ -int -internal_function -__gai_sigqueue (int sig, const union sigval val, pid_t caller_pid) -{ - siginfo_t info; - - /* First, clear the siginfo_t structure, so that we don't pass our - stack content to other tasks. */ - memset (&info, 0, sizeof (siginfo_t)); - /* We must pass the information about the data in a siginfo_t value. */ - info.si_signo = sig; - info.si_code = SI_ASYNCNL; - info.si_pid = caller_pid; - info.si_uid = __getuid (); - info.si_value = val; - - return INLINE_SYSCALL (rt_sigqueueinfo, 3, info.si_pid, sig, &info); -} -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/generic/Makefile b/sysdeps/unix/sysv/linux/generic/Makefile deleted file mode 100644 index 7e27e79772..0000000000 --- a/sysdeps/unix/sysv/linux/generic/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),misc) -sysdep_routines += epoll_create inotify_init -endif diff --git a/sysdeps/unix/sysv/linux/generic/README b/sysdeps/unix/sysv/linux/generic/README deleted file mode 100644 index 301a6107e1..0000000000 --- a/sysdeps/unix/sysv/linux/generic/README +++ /dev/null @@ -1,11 +0,0 @@ -This hierarchy supports Linux systems using the new -asm-generic/unistd.h, which removes many familiar old syscalls. For -example, to implement open(), newer Linux architectures require glibc -to invoke the __NR_openat syscall with AT_FDCWD. This hierarchy -provides all those implementations. - -It also provides support for 32-bit platforms using the 64-bit kernel -syscall APIs, as the 32-bit ones are no longer provided. Note that -newer ILP32 environments (x32 or AArch64:ILP32, for example) are -converting to use more 64-bit types in kernel syscalls, so that aspect -of this support is in more flux as of this writing. diff --git a/sysdeps/unix/sysv/linux/generic/____longjmp_chk.c b/sysdeps/unix/sysv/linux/generic/____longjmp_chk.c deleted file mode 100644 index 1c0f040976..0000000000 --- a/sysdeps/unix/sysv/linux/generic/____longjmp_chk.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include -#include - -#ifdef _STACK_GROWS_DOWN -#define called_from(this, saved) ((this) < (saved)) -#else -#define called_from(this, saved) ((this) > (saved)) -#endif - -extern void ____longjmp_chk (__jmp_buf __env, int __val) - __attribute__ ((__noreturn__)); - -void ____longjmp_chk (__jmp_buf env, int val) -{ - void *this_frame = __builtin_frame_address (0); - void *saved_frame = JB_FRAME_ADDRESS (env); - INTERNAL_SYSCALL_DECL (err); - stack_t ss; - - /* If "env" is from a frame that called us, we're all set. */ - if (called_from(this_frame, saved_frame)) - __longjmp (env, val); - - /* If we can't get the current stack state, give up and do the longjmp. */ - if (INTERNAL_SYSCALL (sigaltstack, err, 2, NULL, &ss) != 0) - __longjmp (env, val); - - /* If we we are executing on the alternate stack and within the - bounds, do the longjmp. */ - if (ss.ss_flags == SS_ONSTACK && - (this_frame >= ss.ss_sp && this_frame < (ss.ss_sp + ss.ss_size))) - __longjmp (env, val); - - __fortify_fail ("longjmp causes uninitialized stack frame"); -} diff --git a/sysdeps/unix/sysv/linux/generic/bits/fcntl.h b/sysdeps/unix/sysv/linux/generic/bits/fcntl.h deleted file mode 100644 index 0767467f82..0000000000 --- a/sysdeps/unix/sysv/linux/generic/bits/fcntl.h +++ /dev/null @@ -1,56 +0,0 @@ -/* O_*, F_*, FD_* bit values for the generic Linux ABI. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -#include - -#if __WORDSIZE == 64 -# define __O_LARGEFILE 0 -#endif - -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#ifndef __USE_FILE_OFFSET64 - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/generic/bits/msq.h b/sysdeps/unix/sysv/linux/generic/bits/msq.h deleted file mode 100644 index fc80473af6..0000000000 --- a/sysdeps/unix/sysv/linux/generic/bits/msq.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_MSG_H -# error "Never use directly; include instead." -#endif - -#include -#include - -/* Define options for message queue functions. */ -#define MSG_NOERROR 010000 /* no error if message is too big */ -#ifdef __USE_GNU -# define MSG_EXCEPT 020000 /* recv any msg except of specified type */ -# define MSG_COPY 040000 /* copy (not remove) all queue messages */ -#endif - -/* Types used in the structure definition. */ -typedef unsigned long int msgqnum_t; -typedef unsigned long int msglen_t; - -/* Structure of record for one message inside the kernel. - The type `struct msg' is opaque. */ -struct msqid_ds -{ - struct ipc_perm msg_perm; /* structure describing operation permission */ - __time_t msg_stime; /* time of last msgsnd command */ -#if __WORDSIZE == 32 - unsigned long int __glibc_reserved1; -#endif - __time_t msg_rtime; /* time of last msgrcv command */ -#if __WORDSIZE == 32 - unsigned long int __glibc_reserved2; -#endif - __time_t msg_ctime; /* time of last change */ -#if __WORDSIZE == 32 - unsigned long int __glibc_reserved3; -#endif - unsigned long int __msg_cbytes; /* current number of bytes on queue */ - msgqnum_t msg_qnum; /* number of messages currently on queue */ - msglen_t msg_qbytes; /* max number of bytes allowed on queue */ - __pid_t msg_lspid; /* pid of last msgsnd() */ - __pid_t msg_lrpid; /* pid of last msgrcv() */ - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; -}; - -#ifdef __USE_MISC - -# define msg_cbytes __msg_cbytes - -/* ipcs ctl commands */ -# define MSG_STAT 11 -# define MSG_INFO 12 - -/* buffer for msgctl calls IPC_INFO, MSG_INFO */ -struct msginfo - { - int msgpool; - int msgmap; - int msgmax; - int msgmnb; - int msgmni; - int msgssz; - int msgtql; - unsigned short int msgseg; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/generic/bits/sem.h b/sysdeps/unix/sysv/linux/generic/bits/sem.h deleted file mode 100644 index 718ee74403..0000000000 --- a/sysdeps/unix/sysv/linux/generic/bits/sem.h +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_SEM_H -# error "Never include directly; use instead." -#endif - -#include -#include - -/* Flags for `semop'. */ -#define SEM_UNDO 0x1000 /* undo the operation on exit */ - -/* Commands for `semctl'. */ -#define GETPID 11 /* get sempid */ -#define GETVAL 12 /* get semval */ -#define GETALL 13 /* get all semval's */ -#define GETNCNT 14 /* get semncnt */ -#define GETZCNT 15 /* get semzcnt */ -#define SETVAL 16 /* set semval */ -#define SETALL 17 /* set all semval's */ - - -/* Data structure describing a set of semaphores. */ -struct semid_ds -{ - struct ipc_perm sem_perm; /* operation permission struct */ - __time_t sem_otime; /* last semop() time */ -#if __WORDSIZE == 32 - unsigned long int __glibc_reserved1; -#endif - __time_t sem_ctime; /* last time changed by semctl() */ -#if __WORDSIZE == 32 - unsigned long int __glibc_reserved2; -#endif - unsigned long int sem_nsems; /* number of semaphores in set */ - unsigned long int __glibc_reserved3; - unsigned long int __glibc_reserved4; -}; - -/* The user should define a union like the following to use it for arguments - for `semctl'. - - union semun - { - int val; <= value for SETVAL - struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET - unsigned short int *array; <= array for GETALL & SETALL - struct seminfo *__buf; <= buffer for IPC_INFO - }; - - Previous versions of this file used to define this union but this is - incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether - one must define the union or not. */ -#define _SEM_SEMUN_UNDEFINED 1 - -#ifdef __USE_MISC - -/* ipcs ctl cmds */ -# define SEM_STAT 18 -# define SEM_INFO 19 - -struct seminfo -{ - int semmap; - int semmni; - int semmns; - int semmnu; - int semmsl; - int semopm; - int semume; - int semusz; - int semvmx; - int semaem; -}; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/generic/bits/shm.h b/sysdeps/unix/sysv/linux/generic/bits/shm.h deleted file mode 100644 index 057b85c601..0000000000 --- a/sysdeps/unix/sysv/linux/generic/bits/shm.h +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_SHM_H -# error "Never include directly; use instead." -#endif - -#include -#include - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from */ -#define SHM_W 0200 /* or S_IWUGO from */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ -#define SHM_EXEC 0100000 /* execution access */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -__BEGIN_DECLS - -/* Segment low boundary address multiple. */ -#define SHMLBA (__getpagesize ()) -extern int __getpagesize (void) __THROW __attribute__ ((__const__)); - - -/* Type to count number of attaches. */ -typedef unsigned long int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ - size_t shm_segsz; /* size of segment in bytes */ - __time_t shm_atime; /* time of last shmat() */ -#if __WORDSIZE == 32 - unsigned long int __glibc_reserved1; -#endif - __time_t shm_dtime; /* time of last shmdt() */ -#if __WORDSIZE == 32 - unsigned long int __glibc_reserved2; -#endif - __time_t shm_ctime; /* time of last change by shmctl() */ -#if __WORDSIZE == 32 - unsigned long int __glibc_reserved3; -#endif - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - unsigned long int shmmax; - unsigned long int shmmin; - unsigned long int shmmni; - unsigned long int shmseg; - unsigned long int shmall; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - unsigned long int __glibc_reserved3; - unsigned long int __glibc_reserved4; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/generic/bits/stat.h b/sysdeps/unix/sysv/linux/generic/bits/stat.h deleted file mode 100644 index 6b2ee71e28..0000000000 --- a/sysdeps/unix/sysv/linux/generic/bits/stat.h +++ /dev/null @@ -1,171 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STAT_H -#define _BITS_STAT_H 1 - -#include -#include - -/* 64-bit libc uses the kernel's 'struct stat', accessed via the - stat() syscall; 32-bit libc uses the kernel's 'struct stat64' - and accesses it via the stat64() syscall. All the various - APIs offered by libc use the kernel shape for their struct stat - structure; the only difference is that 32-bit programs not - using __USE_FILE_OFFSET64 only see the low 32 bits of some - of the fields (specifically st_ino, st_size, and st_blocks). */ -#define _STAT_VER_KERNEL 0 -#define _STAT_VER_LINUX 0 -#define _STAT_VER _STAT_VER_KERNEL - -/* Versions of the `xmknod' interface. */ -#define _MKNOD_VER_LINUX 0 - -#if defined __USE_FILE_OFFSET64 -# define __field64(type, type64, name) type64 name -#elif __WORDSIZE == 64 -# define __field64(type, type64, name) type name -#elif __BYTE_ORDER == __LITTLE_ENDIAN -# define __field64(type, type64, name) \ - type name __attribute__((__aligned__ (__alignof__ (type64)))); int __##name##_pad -#else -# define __field64(type, type64, name) \ - int __##name##_pad __attribute__((__aligned__ (__alignof__ (type64)))); type name -#endif - -struct stat - { - __dev_t st_dev; /* Device. */ - __field64(__ino_t, __ino64_t, st_ino); /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - __dev_t __pad1; - __field64(__off_t, __off64_t, st_size); /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - int __pad2; - __field64(__blkcnt_t, __blkcnt64_t, st_blocks); /* 512-byte blocks */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - int __glibc_reserved[2]; - }; - -#undef __field64 - -#ifdef __USE_LARGEFILE64 -struct stat64 - { - __dev_t st_dev; /* Device. */ - __ino64_t st_ino; /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - __dev_t __pad1; - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - int __pad2; - __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - int __glibc_reserved[2]; - }; -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -/* Nanosecond resolution time values are supported. */ -#define _STATBUF_ST_NSEC - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFIFO 0010000 /* FIFO. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ - -/* POSIX.1b objects. Note that these macros always evaluate to zero. But - they do it by enforcing the correct use of the macros. */ -#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 0400 /* Read by owner. */ -#define __S_IWRITE 0200 /* Write by owner. */ -#define __S_IEXEC 0100 /* Execute by owner. */ - -#ifdef __USE_ATFILE -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) -#endif - -#endif /* bits/stat.h */ diff --git a/sysdeps/unix/sysv/linux/generic/bits/statfs.h b/sysdeps/unix/sysv/linux/generic/bits/statfs.h deleted file mode 100644 index 8dc8f0aa79..0000000000 --- a/sysdeps/unix/sysv/linux/generic/bits/statfs.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_STATFS_H -# error "Never include directly; use instead." -#endif - -#include -#include -#include - -/* 64-bit libc uses the kernel's 'struct statfs', accessed via the - statfs() syscall; 32-bit libc uses the kernel's 'struct statfs64' - and accesses it via the statfs64() syscall. All the various - APIs offered by libc use the kernel shape for their struct statfs - structure; the only difference is that 32-bit programs not - using __USE_FILE_OFFSET64 only see the low 32 bits of some - of the fields (the __fsblkcnt_t and __fsfilcnt_t fields). */ - -#if defined __USE_FILE_OFFSET64 -# define __field64(type, type64, name) type64 name -#elif __WORDSIZE == 64 -# define __field64(type, type64, name) type name -#elif __BYTE_ORDER == __LITTLE_ENDIAN -# define __field64(type, type64, name) \ - type name __attribute__((__aligned__ (__alignof__ (type64)))); int __##name##_pad -#else -# define __field64(type, type64, name) \ - int __##name##_pad __attribute__((__aligned__ (__alignof__ (type64)))); type name -#endif - -struct statfs - { - __SWORD_TYPE f_type; - __SWORD_TYPE f_bsize; - __field64(__fsblkcnt_t, __fsblkcnt64_t, f_blocks); - __field64(__fsblkcnt_t, __fsblkcnt64_t, f_bfree); - __field64(__fsblkcnt_t, __fsblkcnt64_t, f_bavail); - __field64(__fsfilcnt_t, __fsfilcnt64_t, f_files); - __field64(__fsfilcnt_t, __fsfilcnt64_t, f_ffree); - __fsid_t f_fsid; - __SWORD_TYPE f_namelen; - __SWORD_TYPE f_frsize; - __SWORD_TYPE f_flags; - __SWORD_TYPE f_spare[4]; - }; - -#undef __field64 - -#ifdef __USE_LARGEFILE64 -struct statfs64 - { - __SWORD_TYPE f_type; - __SWORD_TYPE f_bsize; - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; - __fsid_t f_fsid; - __SWORD_TYPE f_namelen; - __SWORD_TYPE f_frsize; - __SWORD_TYPE f_flags; - __SWORD_TYPE f_spare[4]; - }; -#endif - -/* Tell code we have these members. */ -#define _STATFS_F_NAMELEN -#define _STATFS_F_FRSIZE -#define _STATFS_F_FLAGS diff --git a/sysdeps/unix/sysv/linux/generic/bits/typesizes.h b/sysdeps/unix/sysv/linux/generic/bits/typesizes.h deleted file mode 100644 index 49e911ef8c..0000000000 --- a/sysdeps/unix/sysv/linux/generic/bits/typesizes.h +++ /dev/null @@ -1,84 +0,0 @@ -/* bits/typesizes.h -- underlying types for *_t. For the generic Linux ABI. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _BITS_TYPES_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_TYPESIZES_H -#define _BITS_TYPESIZES_H 1 - -/* See for the meaning of these macros. This file exists so - that need not vary across different GNU platforms. */ - -#define __DEV_T_TYPE __UQUAD_TYPE -#define __UID_T_TYPE __U32_TYPE -#define __GID_T_TYPE __U32_TYPE -#define __INO_T_TYPE __ULONGWORD_TYPE -#define __INO64_T_TYPE __UQUAD_TYPE -#define __MODE_T_TYPE __U32_TYPE -#define __NLINK_T_TYPE __U32_TYPE -#define __OFF_T_TYPE __SLONGWORD_TYPE -#define __OFF64_T_TYPE __SQUAD_TYPE -#define __PID_T_TYPE __S32_TYPE -#define __RLIM_T_TYPE __ULONGWORD_TYPE -#define __RLIM64_T_TYPE __UQUAD_TYPE -#define __BLKCNT_T_TYPE __SLONGWORD_TYPE -#define __BLKCNT64_T_TYPE __SQUAD_TYPE -#define __FSBLKCNT_T_TYPE __ULONGWORD_TYPE -#define __FSBLKCNT64_T_TYPE __UQUAD_TYPE -#define __FSFILCNT_T_TYPE __ULONGWORD_TYPE -#define __FSFILCNT64_T_TYPE __UQUAD_TYPE -#define __FSWORD_T_TYPE __SWORD_TYPE -#define __ID_T_TYPE __U32_TYPE -#define __CLOCK_T_TYPE __SLONGWORD_TYPE -#define __TIME_T_TYPE __SLONGWORD_TYPE -#define __USECONDS_T_TYPE __U32_TYPE -#define __SUSECONDS_T_TYPE __SLONGWORD_TYPE -#define __DADDR_T_TYPE __S32_TYPE -#define __KEY_T_TYPE __S32_TYPE -#define __CLOCKID_T_TYPE __S32_TYPE -#define __TIMER_T_TYPE void * -#define __BLKSIZE_T_TYPE __S32_TYPE -#define __FSID_T_TYPE struct { int __val[2]; } -#define __SSIZE_T_TYPE __SWORD_TYPE -#define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE -#define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE -#define __CPU_MASK_TYPE __ULONGWORD_TYPE - -#ifdef __LP64__ -/* Tell the libc code that off_t and off64_t are actually the same type - for all ABI purposes, even if possibly expressed as different base types - for C type-checking purposes. */ -# define __OFF_T_MATCHES_OFF64_T 1 - -/* Same for ino_t and ino64_t. */ -# define __INO_T_MATCHES_INO64_T 1 - -/* And for __rlim_t and __rlim64_t. */ -# define __RLIM_T_MATCHES_RLIM64_T 1 -#else -# define __RLIM_T_MATCHES_RLIM64_T 0 -#endif - -/* Number of descriptors that can fit in an `fd_set'. */ -#define __FD_SETSIZE 1024 - - -#endif /* bits/typesizes.h */ diff --git a/sysdeps/unix/sysv/linux/generic/brk.c b/sysdeps/unix/sysv/linux/generic/brk.c deleted file mode 100644 index 7838ecdb9b..0000000000 --- a/sysdeps/unix/sysv/linux/generic/brk.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt - to work around different old braindamage in the old Linux ELF dynamic - linker. */ -weak_alias (__curbrk, ___brk_addr) - -int -__brk (void *addr) -{ - INTERNAL_SYSCALL_DECL (err); - - __curbrk = (void *) INTERNAL_SYSCALL (brk, err, 1, addr); - if (__curbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/generic/chmod.c b/sysdeps/unix/sysv/linux/generic/chmod.c deleted file mode 100644 index 41d6d9851f..0000000000 --- a/sysdeps/unix/sysv/linux/generic/chmod.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -/* Change the protections of FILE to MODE. */ -int -__chmod (const char *file, mode_t mode) -{ - return INLINE_SYSCALL (fchmodat, 3, AT_FDCWD, file, mode); -} -weak_alias (__chmod, chmod) diff --git a/sysdeps/unix/sysv/linux/generic/chown.c b/sysdeps/unix/sysv/linux/generic/chown.c deleted file mode 100644 index 1917f44f65..0000000000 --- a/sysdeps/unix/sysv/linux/generic/chown.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -/* Change the owner and group of FILE. */ -int -__chown (const char *file, uid_t owner, gid_t group) -{ - return INLINE_SYSCALL (fchownat, 5, AT_FDCWD, file, owner, group, 0); -} -libc_hidden_def (__chown) -weak_alias (__chown, chown) diff --git a/sysdeps/unix/sysv/linux/generic/dl-origin.c b/sysdeps/unix/sysv/linux/generic/dl-origin.c deleted file mode 100644 index 04ea9044be..0000000000 --- a/sysdeps/unix/sysv/linux/generic/dl-origin.c +++ /dev/null @@ -1,81 +0,0 @@ -/* Find path of executable. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -/* On Linux >= 2.1 systems which have the dcache implementation we can get - the path of the application from the /proc/self/exe symlink. Try this - first and fall back on the generic method if necessary. */ - -const char * -_dl_get_origin (void) -{ - char linkval[PATH_MAX]; - char *result; - int len; - INTERNAL_SYSCALL_DECL (err); - - len = INTERNAL_SYSCALL (readlinkat, err, 4, AT_FDCWD, "/proc/self/exe", - linkval, sizeof (linkval)); - if (! INTERNAL_SYSCALL_ERROR_P (len, err) && len > 0 && linkval[0] != '[') - { - /* We can use this value. */ - assert (linkval[0] == '/'); - while (len > 1 && linkval[len - 1] != '/') - --len; - result = (char *) malloc (len + 1); - if (result == NULL) - result = (char *) -1; - else if (len == 1) - memcpy (result, "/", 2); - else - *((char *) __mempcpy (result, linkval, len - 1)) = '\0'; - } - else - { - result = (char *) -1; - /* We use the environment variable LD_ORIGIN_PATH. If it is set make - a copy and strip out trailing slashes. */ - if (GLRO(dl_origin_path) != NULL) - { - size_t len = strlen (GLRO(dl_origin_path)); - result = (char *) malloc (len + 1); - if (result == NULL) - result = (char *) -1; - else - { - char *cp = __mempcpy (result, GLRO(dl_origin_path), len); - while (cp > result + 1 && cp[-1] == '/') - --cp; - *cp = '\0'; - } - } - } - - return result; -} diff --git a/sysdeps/unix/sysv/linux/generic/dup2.c b/sysdeps/unix/sysv/linux/generic/dup2.c deleted file mode 100644 index c86b85bff1..0000000000 --- a/sysdeps/unix/sysv/linux/generic/dup2.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -/* Duplicate FD to FD2, closing the old FD2 and making FD2 be - open the same file as FD is. Return FD2 or -1. */ -int -__dup2 (int fd, int fd2) -{ - /* For the degenerate case, check if the fd is valid (by trying to - get the file status flags) and return it, or else return EBADF. */ - if (fd == fd2) - return __libc_fcntl (fd, F_GETFL, 0) < 0 ? -1 : fd; - - return INLINE_SYSCALL (dup3, 3, fd, fd2, 0); -} -libc_hidden_def (__dup2) -weak_alias (__dup2, dup2) diff --git a/sysdeps/unix/sysv/linux/generic/epoll_create.c b/sysdeps/unix/sysv/linux/generic/epoll_create.c deleted file mode 100644 index 6034bccca5..0000000000 --- a/sysdeps/unix/sysv/linux/generic/epoll_create.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -libc_hidden_proto (epoll_create) - -int -epoll_create (int size) -{ - if (size <= 0) - { - __set_errno (EINVAL); - return -1; - } - - return INLINE_SYSCALL (epoll_create1, 1, 0); -} -libc_hidden_def (epoll_create) diff --git a/sysdeps/unix/sysv/linux/generic/futimesat.c b/sysdeps/unix/sysv/linux/generic/futimesat.c deleted file mode 100644 index afc580a8c6..0000000000 --- a/sysdeps/unix/sysv/linux/generic/futimesat.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -/* Change the access time of FILE relative to FD to TVP[0] and - the modification time of FILE to TVP[1]. */ -int -futimesat (int fd, const char *file, const struct timeval tvp[2]) -{ - struct timespec tsp[2]; - int result; - - if (tvp) - { - if (tvp[0].tv_usec >= 1000000 || tvp[0].tv_usec < 0 || - tvp[1].tv_usec >= 1000000 || tvp[1].tv_usec < 0) - { - __set_errno (EINVAL); - return -1; - } - TIMEVAL_TO_TIMESPEC (&tvp[0], &tsp[0]); - TIMEVAL_TO_TIMESPEC (&tvp[1], &tsp[1]); - } - - result = INLINE_SYSCALL (utimensat, 4, fd, file, tvp ? tsp : NULL, 0); - return result; -} diff --git a/sysdeps/unix/sysv/linux/generic/getdents.c b/sysdeps/unix/sysv/linux/generic/getdents.c deleted file mode 100644 index 14dbbc71a0..0000000000 --- a/sysdeps/unix/sysv/linux/generic/getdents.c +++ /dev/null @@ -1 +0,0 @@ -/* Defined in getdents64.c */ diff --git a/sysdeps/unix/sysv/linux/generic/getdents64.c b/sysdeps/unix/sysv/linux/generic/getdents64.c deleted file mode 100644 index 2334201bc4..0000000000 --- a/sysdeps/unix/sysv/linux/generic/getdents64.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -#include -#include - -/* The kernel struct linux_dirent64 matches the 'struct getdents64' type. */ -ssize_t -__getdents64 (int fd, char *buf, size_t nbytes) -{ - return INLINE_SYSCALL (getdents64, 3, fd, buf, nbytes); -} - -#if __WORDSIZE == 64 -strong_alias (__getdents64, __getdents) -#endif diff --git a/sysdeps/unix/sysv/linux/generic/inotify_init.c b/sysdeps/unix/sysv/linux/generic/inotify_init.c deleted file mode 100644 index cbf2034d99..0000000000 --- a/sysdeps/unix/sysv/linux/generic/inotify_init.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -libc_hidden_proto (inotify_init) - -int -inotify_init (void) -{ - return INLINE_SYSCALL (inotify_init1, 1, 0); -} -libc_hidden_def (inotify_init) diff --git a/sysdeps/unix/sysv/linux/generic/kernel_stat.h b/sysdeps/unix/sysv/linux/generic/kernel_stat.h deleted file mode 100644 index 574907b0da..0000000000 --- a/sysdeps/unix/sysv/linux/generic/kernel_stat.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#define STAT_IS_KERNEL_STAT 1 - -/* We provide separate 32-bit API versions that check for EOVERFLOW. */ -#if __WORDSIZE == 64 -# define XSTAT_IS_XSTAT64 1 -#else -# define XSTAT_IS_XSTAT64 0 -#endif - -#define STATFS_IS_STATFS64 0 diff --git a/sysdeps/unix/sysv/linux/generic/lchown.c b/sysdeps/unix/sysv/linux/generic/lchown.c deleted file mode 100644 index c69a85fb1c..0000000000 --- a/sysdeps/unix/sysv/linux/generic/lchown.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -/* Change the owner and group of FILE. */ -int -__lchown (const char *file, uid_t owner, gid_t group) -{ - return INLINE_SYSCALL (fchownat, 5, AT_FDCWD, file, owner, group, - AT_SYMLINK_NOFOLLOW); -} -weak_alias (__lchown, lchown) diff --git a/sysdeps/unix/sysv/linux/generic/link.c b/sysdeps/unix/sysv/linux/generic/link.c deleted file mode 100644 index d2e5ed968f..0000000000 --- a/sysdeps/unix/sysv/linux/generic/link.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -/* Make a link to FROM called TO. */ -int -__link (const char *from, const char *to) -{ - return INLINE_SYSCALL (linkat, 5, AT_FDCWD, from, AT_FDCWD, to, 0); -} - -weak_alias (__link, link) diff --git a/sysdeps/unix/sysv/linux/generic/lxstat.c b/sysdeps/unix/sysv/linux/generic/lxstat.c deleted file mode 100644 index becc17c531..0000000000 --- a/sysdeps/unix/sysv/linux/generic/lxstat.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Ignore prototype to avoid error if we alias __lxstat and __lxstat64. */ -#define __lxstat64 __lxstat64_disable - -#include -#include -#include -#include -#include - -#include -#include - -/* Get information about the file NAME in BUF. */ -int -__lxstat (int vers, const char *name, struct stat *buf) -{ - if (vers == _STAT_VER_KERNEL) - return INLINE_SYSCALL (newfstatat, 4, AT_FDCWD, name, buf, - AT_SYMLINK_NOFOLLOW); - errno = EINVAL; - return -1; -} - -hidden_def (__lxstat) -weak_alias (__lxstat, _lxstat); -#if XSTAT_IS_XSTAT64 -#undef __lxstat64 -strong_alias (__lxstat, __lxstat64); -hidden_ver (__lxstat, __lxstat64) -#endif diff --git a/sysdeps/unix/sysv/linux/generic/mkdir.c b/sysdeps/unix/sysv/linux/generic/mkdir.c deleted file mode 100644 index 6571d29ca3..0000000000 --- a/sysdeps/unix/sysv/linux/generic/mkdir.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include -#include - - -/* Create a directory named PATH with protections MODE. */ -int -__mkdir (const char *path, mode_t mode) -{ - return INLINE_SYSCALL (mkdirat, 3, AT_FDCWD, path, mode); -} -weak_alias (__mkdir, mkdir) diff --git a/sysdeps/unix/sysv/linux/generic/pipe.c b/sysdeps/unix/sysv/linux/generic/pipe.c deleted file mode 100644 index 4b3c5bd3b2..0000000000 --- a/sysdeps/unix/sysv/linux/generic/pipe.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* Create a one-way communication channel (__pipe). - If successful, two file descriptors are stored in PIPEDES; - bytes written on PIPEDES[1] can be read from PIPEDES[0]. - Returns 0 if successful, -1 if not. */ -int -__pipe (int __pipedes[2]) -{ - return INLINE_SYSCALL (pipe2, 2, __pipedes, 0); -} -libc_hidden_def (__pipe) -weak_alias (__pipe, pipe) diff --git a/sysdeps/unix/sysv/linux/generic/readlink.c b/sysdeps/unix/sysv/linux/generic/readlink.c deleted file mode 100644 index ad2d018a4f..0000000000 --- a/sysdeps/unix/sysv/linux/generic/readlink.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* Read the contents of the symbolic link PATH into no more than - LEN bytes of BUF. The contents are not null-terminated. - Returns the number of characters read, or -1 for errors. */ -ssize_t -__readlink (const char *path, char *buf, size_t len) -{ - return INLINE_SYSCALL (readlinkat, 4, AT_FDCWD, path, buf, len); -} -weak_alias (__readlink, readlink) diff --git a/sysdeps/unix/sysv/linux/generic/readlink_chk.c b/sysdeps/unix/sysv/linux/generic/readlink_chk.c deleted file mode 100644 index 54b108fead..0000000000 --- a/sysdeps/unix/sysv/linux/generic/readlink_chk.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#ifdef HAVE_INLINED_SYSCALLS -# include -# include -#endif - - -ssize_t -__readlink_chk (const char *path, void *buf, size_t len, size_t buflen) -{ - if (len > buflen) - __chk_fail (); - -#ifdef HAVE_INLINED_SYSCALLS - return INLINE_SYSCALL (readlinkat, 4, AT_FDCWD, path, buf, len); -#else - return __readlink (path, buf, len); -#endif -} diff --git a/sysdeps/unix/sysv/linux/generic/rmdir.c b/sysdeps/unix/sysv/linux/generic/rmdir.c deleted file mode 100644 index 2048c08b06..0000000000 --- a/sysdeps/unix/sysv/linux/generic/rmdir.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - - -/* Remove the directory PATH. */ -int -__rmdir (const char *path) -{ - return INLINE_SYSCALL (unlinkat, 3, AT_FDCWD, path, AT_REMOVEDIR); -} -weak_alias (__rmdir, rmdir) diff --git a/sysdeps/unix/sysv/linux/generic/symlink.c b/sysdeps/unix/sysv/linux/generic/symlink.c deleted file mode 100644 index 70cc4ab70d..0000000000 --- a/sysdeps/unix/sysv/linux/generic/symlink.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -/* Make a link to FROM called TO. */ -int -__symlink (const char *from, const char *to) -{ - return INLINE_SYSCALL (symlinkat, 3, from, AT_FDCWD, to); -} -weak_alias (__symlink, symlink) diff --git a/sysdeps/unix/sysv/linux/generic/syscalls.list b/sysdeps/unix/sysv/linux/generic/syscalls.list deleted file mode 100644 index ed8b216d47..0000000000 --- a/sysdeps/unix/sysv/linux/generic/syscalls.list +++ /dev/null @@ -1,12 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -# Socket APIs -socket - socket i:iii __socket socket -socketpair - socketpair i:iiif __socketpair socketpair -bind - bind i:ipi __bind bind -listen - listen i:ii __listen listen -getsockname - getsockname i:ipp __getsockname getsockname -getpeername - getpeername i:ipp __getpeername getpeername -setsockopt - setsockopt i:iiibn __setsockopt setsockopt -getsockopt - getsockopt i:iiiBN __getsockopt getsockopt -shutdown - shutdown i:ii __shutdown shutdown diff --git a/sysdeps/unix/sysv/linux/generic/sysctl.c b/sysdeps/unix/sysv/linux/generic/sysctl.c deleted file mode 100644 index f9961d4cdb..0000000000 --- a/sysdeps/unix/sysv/linux/generic/sysctl.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#include -#include - -/* This deprecated syscall is no longer used (replaced with /proc/sys). */ -int -sysctl (int *name, int nlen, void *oldval, size_t *oldlenp, - void *newval, size_t newlen) -{ - __set_errno (ENOSYS); - return -1; -} -stub_warning (sysctl) diff --git a/sysdeps/unix/sysv/linux/generic/sysdep.h b/sysdeps/unix/sysv/linux/generic/sysdep.h deleted file mode 100644 index 0e854ad69e..0000000000 --- a/sysdeps/unix/sysv/linux/generic/sysdep.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -/* Provide the common name to allow more code reuse. */ -#ifdef __NR_llseek -# define __NR__llseek __NR_llseek -#endif - -#if __WORDSIZE == 64 -/* By defining the older names, glibc will build syscall wrappers for - both pread and pread64; sysdeps/unix/sysv/linux/wordsize-64/pread64.c - will suppress generating any separate code for pread64.c. */ -#define __NR_pread __NR_pread64 -#define __NR_pwrite __NR_pwrite64 -#endif diff --git a/sysdeps/unix/sysv/linux/generic/umount.c b/sysdeps/unix/sysv/linux/generic/umount.c deleted file mode 100644 index 6b933c6e43..0000000000 --- a/sysdeps/unix/sysv/linux/generic/umount.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Since the generic Linux syscall ABI doesn't have an oldumount system call, - do what the kernel does down here. */ - -extern long int __umount2 (const char *name, int flags); - -long int -__umount (const char *name) -{ - return __umount2 (name, 0); -} - -weak_alias (__umount, umount); diff --git a/sysdeps/unix/sysv/linux/generic/unlink.c b/sysdeps/unix/sysv/linux/generic/unlink.c deleted file mode 100644 index 25953f2145..0000000000 --- a/sysdeps/unix/sysv/linux/generic/unlink.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - - -/* Remove the link named NAME. */ -int -__unlink (const char *name) -{ - return INLINE_SYSCALL (unlinkat, 3, AT_FDCWD, name, 0); -} -weak_alias (__unlink, unlink) diff --git a/sysdeps/unix/sysv/linux/generic/ustat.c b/sysdeps/unix/sysv/linux/generic/ustat.c deleted file mode 100644 index 780d931a5c..0000000000 --- a/sysdeps/unix/sysv/linux/generic/ustat.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -#include -#include - -/* This deprecated syscall is no longer used (replaced with fstat). */ -int -ustat (dev_t dev, struct ustat *ubuf) -{ - __set_errno (ENOSYS); - return -1; -} -stub_warning (ustat) diff --git a/sysdeps/unix/sysv/linux/generic/utimes.c b/sysdeps/unix/sysv/linux/generic/utimes.c deleted file mode 100644 index de8d6d9df7..0000000000 --- a/sysdeps/unix/sysv/linux/generic/utimes.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include -#include - - -/* Change the access time of FILE to TVP[0] and - the modification time of FILE to TVP[1]. */ -int -__utimes (const char *file, const struct timeval tvp[2]) -{ - struct timespec ts[2]; - struct timespec *tsp = NULL; - - if (tvp) - { - TIMEVAL_TO_TIMESPEC (&tvp[0], &ts[0]); - TIMEVAL_TO_TIMESPEC (&tvp[1], &ts[1]); - tsp = &ts[0]; - } - - return INLINE_SYSCALL (utimensat, 4, AT_FDCWD, file, tsp, 0); -} - -weak_alias (__utimes, utimes) diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/Versions b/sysdeps/unix/sysv/linux/generic/wordsize-32/Versions deleted file mode 100644 index cdc6022015..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/Versions +++ /dev/null @@ -1,5 +0,0 @@ -libc { - GLIBC_2.15 { - fallocate64; - } -} diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c deleted file mode 100644 index 20399f9310..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include /* Must come before . */ -#include -#include - -#include - - -static int -do_fcntl (int fd, int cmd, void *arg) -{ - if (cmd != F_GETOWN) - return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg); - - INTERNAL_SYSCALL_DECL (err); - struct f_owner_ex fex; - int res = INTERNAL_SYSCALL (fcntl64, err, 3, fd, F_GETOWN_EX, &fex); - if (!INTERNAL_SYSCALL_ERROR_P (res, err)) - return fex.type == F_OWNER_GID ? -fex.pid : fex.pid; - - __set_errno (INTERNAL_SYSCALL_ERRNO (res, err)); - return -1; -} - - -#ifndef NO_CANCELLATION -int -__fcntl_nocancel (int fd, int cmd, ...) -{ - va_list ap; - void *arg; - - va_start (ap, cmd); - arg = va_arg (ap, void *); - va_end (ap); - - return do_fcntl (fd, cmd, arg); -} -#endif - - -int -__libc_fcntl (int fd, int cmd, ...) -{ - va_list ap; - void *arg; - - va_start (ap, cmd); - arg = va_arg (ap, void *); - va_end (ap); - - if (SINGLE_THREAD_P || cmd != F_SETLKW) - return do_fcntl (fd, cmd, arg); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = do_fcntl (fd, cmd, arg); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} -libc_hidden_def (__libc_fcntl) - -weak_alias (__libc_fcntl, __fcntl) -libc_hidden_weak (__fcntl) -weak_alias (__libc_fcntl, fcntl) diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/fstatfs.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/fstatfs.c deleted file mode 100644 index 4c0a83040d..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/fstatfs.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#if !STATFS_IS_STATFS64 -#include "overflow.h" - -/* Return information about the filesystem on which FD resides. */ -int -__fstatfs (int fd, struct statfs *buf) -{ - int rc = INLINE_SYSCALL (fstatfs64, 3, fd, sizeof (*buf), buf); - return rc ?: statfs_overflow (buf); -} -weak_alias (__fstatfs, fstatfs) -#endif diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c deleted file mode 100644 index 55c830731d..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -#include -#include - -#if !XSTAT_IS_XSTAT64 -#include "overflow.h" - -/* Get information about the file FD in BUF. */ -int -__fxstat (int vers, int fd, struct stat *buf) -{ - if (vers == _STAT_VER_KERNEL) - { - int rc = INLINE_SYSCALL (fstat64, 2, fd, buf); - return rc ?: stat_overflow (buf); - } - - errno = EINVAL; - return -1; -} - -hidden_def (__fxstat) -weak_alias (__fxstat, _fxstat); -#endif diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat64.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat64.c deleted file mode 100644 index c7f128c622..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat64.c +++ /dev/null @@ -1,36 +0,0 @@ -/* __fxstat64 () implementation. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Hide the prototypes for __fxstat and _fxstat so that GCC will not - complain about the different function signatures if they are aliased - to __fxstat64. If XSTAT_IS_XSTAT64 is set to non-zero then the stat and - stat64 structures have an identical layout but different type names. */ - -#define __fxstat __fxstat_disable -#define _fxstat _fxstat_disable - -#include - -#undef __fxstat -#undef _fxstat -#if XSTAT_IS_XSTAT64 -weak_alias (__fxstat64, __fxstat) -weak_alias (__fxstat64, _fxstat) -hidden_ver (__fxstat64, __fxstat) -#endif diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c deleted file mode 100644 index 2c1feea6b6..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include -#include - -#include -#include - -#if !XSTAT_IS_XSTAT64 -#include "overflow.h" - -/* Get information about the file NAME in BUF. */ -int -__fxstatat (int vers, int fd, const char *file, struct stat *buf, int flag) -{ - if (vers == _STAT_VER_KERNEL) - { - int rc = INLINE_SYSCALL (fstatat64, 4, fd, file, buf, flag); - return rc ?: stat_overflow (buf); - } - - errno = EINVAL; - return -1; -} -libc_hidden_def (__fxstatat) -#endif diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat64.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat64.c deleted file mode 100644 index 93fa42b686..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat64.c +++ /dev/null @@ -1,37 +0,0 @@ -/* __fxstatat64 () implementation. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Hide the prototype for __fxstatat so that GCC will not complain about - the different function signature if it is aliased to __fxstatat64. - If XSTAT_IS_XSTAT64 is set to non-zero then the stat and stat64 structures - have an identical layout but different type names. */ - -#define __fxstatat __fxstatat_disable - -#include -#undef _STAT_VER_LINUX -#define _STAT_VER_LINUX _STAT_VER_KERNEL - -#include - -#undef __fxstatat -#if XSTAT_IS_XSTAT64 -weak_alias (__fxstatat64, __fxstatat) -libc_hidden_ver (__fxstatat64, __fxstatat) -#endif diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/getdents.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/getdents.c deleted file mode 100644 index 9f1c991694..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/getdents.c +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Simplified from sysdeps/unix/sysv/linux/getdents.c. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -/* Pack the dirent64 struct down into 32-bit offset/inode fields, and - ensure that no overflow occurs. */ -ssize_t -__getdents (int fd, char *buf, size_t nbytes) -{ - union - { - struct dirent64 k; /* Kernel structure. */ - struct dirent u; - char b[1]; - } *kbuf = (void *) buf, *outp, *inp; - size_t kbytes = nbytes; - off64_t last_offset = -1; - ssize_t retval; - - const size_t size_diff = (offsetof (struct dirent64, d_name) - - offsetof (struct dirent, d_name)); - if (nbytes <= sizeof (struct dirent)) - { - kbytes = nbytes + offsetof (struct dirent64, d_name) - - offsetof (struct dirent, d_name); - kbuf = __alloca(kbytes); - } - - retval = INLINE_SYSCALL (getdents64, 3, fd, kbuf, kbytes); - if (retval == -1) - return -1; - - /* These two pointers might alias the same memory buffer. - Standard C requires that we always use the same type for them, - so we must use the union type. */ - inp = kbuf; - outp = (void *) buf; - - while (&inp->b < &kbuf->b + retval) - { - const size_t alignment = __alignof__ (struct dirent); - /* Since inp->k.d_reclen is already aligned for the kernel - structure this may compute a value that is bigger - than necessary. */ - size_t old_reclen = inp->k.d_reclen; - size_t new_reclen = ((old_reclen - size_diff + alignment - 1) - & ~(alignment - 1)); - - /* Copy the data out of the old structure into temporary space. - Then copy the name, which may overlap if BUF == KBUF. */ - const uint64_t d_ino = inp->k.d_ino; - const int64_t d_off = inp->k.d_off; - const uint8_t d_type = inp->k.d_type; - - memmove (outp->u.d_name, inp->k.d_name, - old_reclen - offsetof (struct dirent64, d_name)); - - /* Now we have copied the data from INP and access only OUTP. */ - - outp->u.d_ino = d_ino; - outp->u.d_off = d_off; - if ((sizeof (outp->u.d_ino) != sizeof (inp->k.d_ino) - && outp->u.d_ino != d_ino) - || (sizeof (outp->u.d_off) != sizeof (inp->k.d_off) - && outp->u.d_off != d_off)) - { - /* Overflow. If there was at least one entry before this one, - return them without error, otherwise signal overflow. */ - if (last_offset != -1) - { - __lseek64 (fd, last_offset, SEEK_SET); - return outp->b - buf; - } - __set_errno (EOVERFLOW); - return -1; - } - - last_offset = d_off; - outp->u.d_reclen = new_reclen; - outp->u.d_type = d_type; - - inp = (void *) inp + old_reclen; - outp = (void *) outp + new_reclen; - } - - return outp->b - buf; -} diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c deleted file mode 100644 index db4f4919fc..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -#include -#include - -#if !XSTAT_IS_XSTAT64 -#include "overflow.h" - -/* Get information about the file NAME in BUF. */ -int -__lxstat (int vers, const char *name, struct stat *buf) -{ - if (vers == _STAT_VER_KERNEL) - { - int rc = INLINE_SYSCALL (fstatat64, 4, AT_FDCWD, name, buf, - AT_SYMLINK_NOFOLLOW); - return rc ?: stat_overflow (buf); - } - errno = EINVAL; - return -1; -} -hidden_def (__lxstat) -#endif diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c deleted file mode 100644 index 647939a74c..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Hide the prototype for __lxstat so that GCC will not complain about - the different function signature if it is aliased to __lxstat64. - If XSTAT_IS_XSTAT64 is set to non-zero then the stat and stat64 - structures have an identical layout but different type names. */ - -#define __lxstat __lxstat_disable - -#include -#include -#include -#include -#include - -#include -#include - -/* Get information about the file NAME in BUF. */ -int -__lxstat64 (int vers, const char *name, struct stat64 *buf) -{ - if (vers == _STAT_VER_KERNEL) - return INLINE_SYSCALL (fstatat64, 4, AT_FDCWD, name, buf, - AT_SYMLINK_NOFOLLOW); - errno = EINVAL; - return -1; -} -hidden_def (__lxstat64) - -#undef __lxstat -#if XSTAT_IS_XSTAT64 -strong_alias (__lxstat64, __lxstat) -hidden_ver (__lxstat64, __lxstat) -#endif diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/overflow.h b/sysdeps/unix/sysv/linux/generic/wordsize-32/overflow.h deleted file mode 100644 index 4c993ac817..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/overflow.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Overflow tests for stat, statfs, and lseek functions. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* Test for overflows of structures where we ask the kernel to fill them - in with standard 64-bit syscalls but return them through APIs that - only expose the low 32 bits of some fields. */ - -static inline off_t lseek_overflow (loff_t res) -{ - off_t retval = (off_t) res; - if (retval == res) - return retval; - - __set_errno (EOVERFLOW); - return (off_t) -1; -} - -static inline int stat_overflow (struct stat *buf) -{ - if (buf->__st_ino_pad == 0 && buf->__st_size_pad == 0 && - buf->__st_blocks_pad == 0) - return 0; - - __set_errno (EOVERFLOW); - return -1; -} - -/* Note that f_files and f_ffree may validly be a sign-extended -1. */ -static inline int statfs_overflow (struct statfs *buf) -{ - if (buf->__f_blocks_pad == 0 && buf->__f_bfree_pad == 0 && - buf->__f_bavail_pad == 0 && - (buf->__f_files_pad == 0 || - (buf->f_files == -1U && buf->__f_files_pad == -1)) && - (buf->__f_ffree_pad == 0 || - (buf->f_ffree == -1U && buf->__f_ffree_pad == -1))) - return 0; - - __set_errno (EOVERFLOW); - return -1; -} diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/sendfile.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/sendfile.c deleted file mode 100644 index 2c252cc2cf..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/sendfile.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* Send COUNT bytes from file associated with IN_FD starting at OFFSET to - descriptor OUT_FD. */ -ssize_t -sendfile (int out_fd, int in_fd, off_t *offset, size_t count) -{ - __off64_t off64; - int rc; - - if (offset != NULL) - { - if (*offset < 0 || (off_t) (*offset + count) < 0) - { - __set_errno (EINVAL); - return -1; - } - off64 = *offset; - } - - rc = INLINE_SYSCALL (sendfile64, 4, out_fd, in_fd, - offset ? &off64 : NULL, count); - if (offset) - *offset = off64; - return rc; -} diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/statfs.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/statfs.c deleted file mode 100644 index 11da0021d6..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/statfs.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#if !STATFS_IS_STATFS64 -#include "overflow.h" - -/* Return information about the filesystem on which FILE resides. */ -int -__statfs (const char *file, struct statfs *buf) -{ - int rc = INLINE_SYSCALL (statfs64, 3, file, sizeof (*buf), buf); - return rc ?: statfs_overflow (buf); -} -libc_hidden_def (__statfs) -weak_alias (__statfs, statfs) -#endif diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list b/sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list deleted file mode 100644 index b775008a37..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list +++ /dev/null @@ -1,5 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -# rlimit APIs -prlimit64 EXTRA prlimit64 i:iipp prlimit64 -fanotify_mark EXTRA fanotify_mark i:iiiiis fanotify_mark diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c deleted file mode 100644 index 91c1c9be6d..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -#include -#include - -#if !XSTAT_IS_XSTAT64 -#include "overflow.h" - -/* Get information about the file NAME in BUF. */ -int -__xstat (int vers, const char *name, struct stat *buf) -{ - if (vers == _STAT_VER_KERNEL) - { - int rc = INLINE_SYSCALL (fstatat64, 4, AT_FDCWD, name, buf, 0); - return rc ?: stat_overflow (buf); - } - - errno = EINVAL; - return -1; -} -hidden_def (__xstat) -#endif diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c deleted file mode 100644 index 5ef0614eb6..0000000000 --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Hide the prototype for __xstat so that GCC will not complain about - the different function signature if it is aliased to __xstat64. - If XSTAT_IS_XSTAT64 is set to non-zero then the stat and stat64 - structures have an identical layout but different type names. */ - -#define __xstat __xstat_disable - -#include -#include -#include -#include -#include - -#include -#include - -/* Get information about the file NAME in BUF. */ -int -__xstat64 (int vers, const char *name, struct stat64 *buf) -{ - if (vers == _STAT_VER_KERNEL) - return INLINE_SYSCALL (fstatat64, 4, AT_FDCWD, name, buf, 0); - - errno = EINVAL; - return -1; -} -hidden_def (__xstat64) - -#undef __xstat -#if XSTAT_IS_XSTAT64 -strong_alias (__xstat64, __xstat) -hidden_ver (__xstat64, __xstat) -#endif diff --git a/sysdeps/unix/sysv/linux/generic/xmknod.c b/sysdeps/unix/sysv/linux/generic/xmknod.c deleted file mode 100644 index 5e91539894..0000000000 --- a/sysdeps/unix/sysv/linux/generic/xmknod.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -#include -#include - -/* Create a device file named PATH, with permission and special bits MODE - and device number DEV (which can be constructed from major and minor - device numbers with the `makedev' macro above). */ -int -__xmknod (int vers, const char *path, mode_t mode, dev_t *dev) -{ - unsigned long long int k_dev; - - if (vers != _MKNOD_VER) - { - __set_errno (EINVAL); - return -1; - } - - /* We must convert the value to dev_t type used by the kernel. */ - k_dev = (*dev) & ((1ULL << 32) - 1); - if (k_dev != *dev) - { - __set_errno (EINVAL); - return -1; - } - - return INLINE_SYSCALL (mknodat, 4, AT_FDCWD, path, mode, - (unsigned int) k_dev); -} -weak_alias (__xmknod, _xmknod) -libc_hidden_def (__xmknod) diff --git a/sysdeps/unix/sysv/linux/generic/xstat.c b/sysdeps/unix/sysv/linux/generic/xstat.c deleted file mode 100644 index 1a7277a802..0000000000 --- a/sysdeps/unix/sysv/linux/generic/xstat.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Ignore prototype to avoid error if we alias __xstat and __xstat64. */ -#define __xstat64 __xstat64_disable - -#include -#include -#include -#include -#include - -#include -#include - -/* Get information about the file NAME in BUF. */ -int -__xstat (int vers, const char *name, struct stat *buf) -{ - if (vers == _STAT_VER_KERNEL) - return INLINE_SYSCALL (newfstatat, 4, AT_FDCWD, name, buf, 0); - - errno = EINVAL; - return -1; -} - -hidden_def (__xstat) -weak_alias (__xstat, _xstat); -#if XSTAT_IS_XSTAT64 -#undef __xstat64 -strong_alias (__xstat, __xstat64); -hidden_ver (__xstat, __xstat64) -#endif diff --git a/sysdeps/unix/sysv/linux/getclktck.c b/sysdeps/unix/sysv/linux/getclktck.c deleted file mode 100644 index 617ea540c8..0000000000 --- a/sysdeps/unix/sysv/linux/getclktck.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - -#ifndef SYSTEM_CLK_TCK -# define SYSTEM_CLK_TCK 100 -#endif - -/* Return frequency of times(). */ -int -__getclktck (void) -{ - return GLRO(dl_clktck) ?: SYSTEM_CLK_TCK; -} diff --git a/sysdeps/unix/sysv/linux/getcwd.c b/sysdeps/unix/sysv/linux/getcwd.c deleted file mode 100644 index 3b556fd450..0000000000 --- a/sysdeps/unix/sysv/linux/getcwd.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Determine current working directory. Linux version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#include -#include - - -/* If we compile the file for use in ld.so we don't need the feature - that getcwd() allocates the buffers itself. */ -#if IS_IN (rtld) -# define NO_ALLOCATION 1 -#endif - - -/* The "proc" filesystem provides an easy method to retrieve the value. - For each process, the corresponding directory contains a symbolic link - named `cwd'. Reading the content of this link immediate gives us the - information. But we have to take care for systems which do not have - the proc filesystem mounted. Use the POSIX implementation in this case. */ -static char *generic_getcwd (char *buf, size_t size) internal_function; - -char * -__getcwd (char *buf, size_t size) -{ - char *path; - char *result; - -#ifndef NO_ALLOCATION - size_t alloc_size = size; - if (size == 0) - { - if (buf != NULL) - { - __set_errno (EINVAL); - return NULL; - } - - alloc_size = MAX (PATH_MAX, __getpagesize ()); - } - - if (buf == NULL) - { - path = malloc (alloc_size); - if (path == NULL) - return NULL; - } - else -#else -# define alloc_size size -#endif - path = buf; - - int retval; - - retval = INLINE_SYSCALL (getcwd, 2, path, alloc_size); - if (retval >= 0) - { -#ifndef NO_ALLOCATION - if (buf == NULL && size == 0) - /* Ensure that the buffer is only as large as necessary. */ - buf = realloc (path, (size_t) retval); - - if (buf == NULL) - /* Either buf was NULL all along, or `realloc' failed but - we still have the original string. */ - buf = path; -#endif - - return buf; - } - - /* The system call cannot handle paths longer than a page. - Neither can the magic symlink in /proc/self. Just use the - generic implementation right away. */ - if (errno == ENAMETOOLONG) - { -#ifndef NO_ALLOCATION - if (buf == NULL && size == 0) - { - free (path); - path = NULL; - } -#endif - - result = generic_getcwd (path, size); - -#ifndef NO_ALLOCATION - if (result == NULL && buf == NULL && size != 0) - free (path); -#endif - - return result; - } - - /* It should never happen that the `getcwd' syscall failed because - the buffer is too small if we allocated the buffer ourselves - large enough. */ - assert (errno != ERANGE || buf != NULL || size != 0); - -#ifndef NO_ALLOCATION - if (buf == NULL) - free (path); -#endif - - return NULL; -} -weak_alias (__getcwd, getcwd) - -/* Get the code for the generic version. */ -#define GETCWD_RETURN_TYPE static char * internal_function -#define __getcwd generic_getcwd -#include diff --git a/sysdeps/unix/sysv/linux/getdents.c b/sysdeps/unix/sysv/linux/getdents.c deleted file mode 100644 index 4794eb737d..0000000000 --- a/sysdeps/unix/sysv/linux/getdents.c +++ /dev/null @@ -1,272 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include - -/* For Linux we need a special version of this file since the - definition of `struct dirent' is not the same for the kernel and - the libc. There is one additional field which might be introduced - in the kernel structure in the future. - - Here is the kernel definition of `struct dirent' as of 2.1.20: */ - -struct kernel_dirent - { - long int d_ino; - __kernel_off_t d_off; - unsigned short int d_reclen; - char d_name[256]; - }; - -struct kernel_dirent64 - { - uint64_t d_ino; - int64_t d_off; - unsigned short int d_reclen; - unsigned char d_type; - char d_name[256]; - }; - -#ifndef __GETDENTS -# define __GETDENTS __getdents -#endif -#ifndef DIRENT_TYPE -# define DIRENT_TYPE struct dirent -#endif -#ifndef DIRENT_SET_DP_INO -# define DIRENT_SET_DP_INO(dp, value) (dp)->d_ino = (value) -#endif - -/* The problem here is that we cannot simply read the next NBYTES - bytes. We need to take the additional field into account. We use - some heuristic. Assuming the directory contains names with 14 - characters on average we can compute an estimated number of entries - which fit in the buffer. Taking this number allows us to specify a - reasonable number of bytes to read. If we should be wrong, we can - reset the file descriptor. In practice the kernel is limiting the - amount of data returned much more then the reduced buffer size. */ -ssize_t -internal_function -__GETDENTS (int fd, char *buf, size_t nbytes) -{ - ssize_t retval; - - /* The d_ino and d_off fields in kernel_dirent and dirent must have - the same sizes and alignments. */ - if (sizeof (DIRENT_TYPE) == sizeof (struct dirent) - && (sizeof (((struct kernel_dirent *) 0)->d_ino) - == sizeof (((struct dirent *) 0)->d_ino)) - && (sizeof (((struct kernel_dirent *) 0)->d_off) - == sizeof (((struct dirent *) 0)->d_off)) - && (offsetof (struct kernel_dirent, d_off) - == offsetof (struct dirent, d_off)) - && (offsetof (struct kernel_dirent, d_reclen) - == offsetof (struct dirent, d_reclen))) - { - retval = INLINE_SYSCALL (getdents, 3, fd, buf, nbytes); - - /* The kernel added the d_type value after the name. Change - this now. */ - if (retval != -1) - { - union - { - struct kernel_dirent k; - struct dirent u; - } *kbuf = (void *) buf; - - while ((char *) kbuf < buf + retval) - { - char d_type = *((char *) kbuf + kbuf->k.d_reclen - 1); - memmove (kbuf->u.d_name, kbuf->k.d_name, - strlen (kbuf->k.d_name) + 1); - kbuf->u.d_type = d_type; - - kbuf = (void *) ((char *) kbuf + kbuf->k.d_reclen); - } - } - - return retval; - } - - off64_t last_offset = -1; - -#ifdef __NR_getdents64 - { - union - { - struct kernel_dirent64 k; - DIRENT_TYPE u; - char b[1]; - } *kbuf = (void *) buf, *outp, *inp; - size_t kbytes = nbytes; - if (offsetof (DIRENT_TYPE, d_name) - < offsetof (struct kernel_dirent64, d_name) - && nbytes <= sizeof (DIRENT_TYPE)) - { - kbytes = (nbytes + offsetof (struct kernel_dirent64, d_name) - - offsetof (DIRENT_TYPE, d_name)); - kbuf = __alloca(kbytes); - } - retval = INLINE_SYSCALL (getdents64, 3, fd, kbuf, kbytes); - const size_t size_diff = (offsetof (struct kernel_dirent64, d_name) - - offsetof (DIRENT_TYPE, d_name)); - - /* Return the error if encountered. */ - if (retval == -1) - return -1; - - /* If the structure returned by the kernel is identical to what we - need, don't do any conversions. */ - if (offsetof (DIRENT_TYPE, d_name) - == offsetof (struct kernel_dirent64, d_name) - && sizeof (outp->u.d_ino) == sizeof (inp->k.d_ino) - && sizeof (outp->u.d_off) == sizeof (inp->k.d_off)) - return retval; - - /* These two pointers might alias the same memory buffer. - Standard C requires that we always use the same type for them, - so we must use the union type. */ - inp = kbuf; - outp = (void *) buf; - - while (&inp->b < &kbuf->b + retval) - { - const size_t alignment = __alignof__ (DIRENT_TYPE); - /* Since inp->k.d_reclen is already aligned for the kernel - structure this may compute a value that is bigger - than necessary. */ - size_t old_reclen = inp->k.d_reclen; - size_t new_reclen = ((old_reclen - size_diff + alignment - 1) - & ~(alignment - 1)); - - /* Copy the data out of the old structure into temporary space. - Then copy the name, which may overlap if BUF == KBUF. */ - const uint64_t d_ino = inp->k.d_ino; - const int64_t d_off = inp->k.d_off; - const uint8_t d_type = inp->k.d_type; - - memmove (outp->u.d_name, inp->k.d_name, - old_reclen - offsetof (struct kernel_dirent64, d_name)); - - /* Now we have copied the data from INP and access only OUTP. */ - - DIRENT_SET_DP_INO (&outp->u, d_ino); - outp->u.d_off = d_off; - if ((sizeof (outp->u.d_ino) != sizeof (inp->k.d_ino) - && outp->u.d_ino != d_ino) - || (sizeof (outp->u.d_off) != sizeof (inp->k.d_off) - && outp->u.d_off != d_off)) - { - /* Overflow. If there was at least one entry - before this one, return them without error, - otherwise signal overflow. */ - if (last_offset != -1) - { - __lseek64 (fd, last_offset, SEEK_SET); - return outp->b - buf; - } - __set_errno (EOVERFLOW); - return -1; - } - - last_offset = d_off; - outp->u.d_reclen = new_reclen; - outp->u.d_type = d_type; - - inp = (void *) inp + old_reclen; - outp = (void *) outp + new_reclen; - } - - return outp->b - buf; - } -#endif - { - size_t red_nbytes; - struct kernel_dirent *skdp, *kdp; - const size_t size_diff = (offsetof (DIRENT_TYPE, d_name) - - offsetof (struct kernel_dirent, d_name)); - - red_nbytes = MIN (nbytes - - ((nbytes / (offsetof (DIRENT_TYPE, d_name) + 14)) - * size_diff), - nbytes - size_diff); - - skdp = kdp = __alloca (red_nbytes); - - retval = INLINE_SYSCALL (getdents, 3, fd, (char *) kdp, red_nbytes); - - if (retval == -1) - return -1; - - DIRENT_TYPE *dp = (DIRENT_TYPE *) buf; - while ((char *) kdp < (char *) skdp + retval) - { - const size_t alignment = __alignof__ (DIRENT_TYPE); - /* Since kdp->d_reclen is already aligned for the kernel structure - this may compute a value that is bigger than necessary. */ - size_t new_reclen = ((kdp->d_reclen + size_diff + alignment - 1) - & ~(alignment - 1)); - if ((char *) dp + new_reclen > buf + nbytes) - { - /* Our heuristic failed. We read too many entries. Reset - the stream. */ - assert (last_offset != -1); - __lseek64 (fd, last_offset, SEEK_SET); - - if ((char *) dp == buf) - { - /* The buffer the user passed in is too small to hold even - one entry. */ - __set_errno (EINVAL); - return -1; - } - - break; - } - - last_offset = kdp->d_off; - DIRENT_SET_DP_INO(dp, kdp->d_ino); - dp->d_off = kdp->d_off; - dp->d_reclen = new_reclen; - dp->d_type = *((char *) kdp + kdp->d_reclen - 1); - memcpy (dp->d_name, kdp->d_name, - kdp->d_reclen - offsetof (struct kernel_dirent, d_name)); - - dp = (DIRENT_TYPE *) ((char *) dp + new_reclen); - kdp = (struct kernel_dirent *) (((char *) kdp) + kdp->d_reclen); - } - - return (char *) dp - buf; - } -} diff --git a/sysdeps/unix/sysv/linux/getdents64.c b/sysdeps/unix/sysv/linux/getdents64.c deleted file mode 100644 index 805917e274..0000000000 --- a/sysdeps/unix/sysv/linux/getdents64.c +++ /dev/null @@ -1,3 +0,0 @@ -#define __GETDENTS __getdents64 -#define DIRENT_TYPE struct dirent64 -#include diff --git a/sysdeps/unix/sysv/linux/getdirentries.c b/sysdeps/unix/sysv/linux/getdirentries.c deleted file mode 100644 index fb10d9818a..0000000000 --- a/sysdeps/unix/sysv/linux/getdirentries.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef GETDIRENTRIES -# define GETDIRENTRIES getdirentries -# define __GETDENTS __getdents -#else -# define off_t off64_t -# define __lseek __lseek64 -#endif - -ssize_t -GETDIRENTRIES (int fd, char *buf, size_t nbytes, off_t *basep) -{ - off_t base = __lseek (fd, (off_t) 0, SEEK_CUR); - ssize_t result; - - result = __GETDENTS (fd, buf, nbytes); - - if (result != -1) - *basep = base; - - return result; -} diff --git a/sysdeps/unix/sysv/linux/getdirentries64.c b/sysdeps/unix/sysv/linux/getdirentries64.c deleted file mode 100644 index e486a36a12..0000000000 --- a/sysdeps/unix/sysv/linux/getdirentries64.c +++ /dev/null @@ -1,3 +0,0 @@ -#define GETDIRENTRIES getdirentries64 -#define __GETDENTS __getdents64 -#include "getdirentries.c" diff --git a/sysdeps/unix/sysv/linux/getdtsz.c b/sysdeps/unix/sysv/linux/getdtsz.c deleted file mode 100644 index 5ee08d58d6..0000000000 --- a/sysdeps/unix/sysv/linux/getdtsz.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This comes from the Linux kernel header. */ -#define OPEN_MAX 256 - -#include diff --git a/sysdeps/unix/sysv/linux/getentropy.c b/sysdeps/unix/sysv/linux/getentropy.c deleted file mode 100644 index 14e5e91392..0000000000 --- a/sysdeps/unix/sysv/linux/getentropy.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Implementation of getentropy based on the getrandom system call. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#ifdef __NR_getrandom -/* Write LENGTH bytes of randomness starting at BUFFER. Return 0 on - success and -1 on failure. */ -int -getentropy (void *buffer, size_t length) -{ - /* The interface is documented to return EIO for buffer lengths - longer than 256 bytes. */ - if (length > 256) - { - __set_errno (EIO); - return -1; - } - - /* Try to fill the buffer completely. Even with the 256 byte limit - above, we might still receive an EINTR error (when blocking - during boot). */ - void *end = buffer + length; - while (buffer < end) - { - /* NB: No cancellation point. */ - ssize_t bytes = INLINE_SYSCALL_CALL (getrandom, buffer, end - buffer, 0); - if (bytes < 0) - { - if (errno == EINTR) - /* Try again if interrupted by a signal. */ - continue; - else - return -1; - } - if (bytes == 0) - { - /* No more bytes available. This should not happen under - normal circumstances. */ - __set_errno (EIO); - return -1; - } - /* Try again in case of a short read. */ - buffer += bytes; - } - return 0; -} -#else -int -getentropy (void *buffer, size_t length) -{ - __set_errno (ENOSYS); - return -1; -} -#endif diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c deleted file mode 100644 index cc108aa2d6..0000000000 --- a/sysdeps/unix/sysv/linux/gethostid.c +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#define HOSTIDFILE "/etc/hostid" - -#ifdef SET_PROCEDURE -int -sethostid (long int id) -{ - int fd; - ssize_t written; - int32_t id32 = id; - - /* Test for appropriate rights to set host ID. */ - if (__libc_enable_secure) - { - __set_errno (EPERM); - return -1; - } - - /* Make sure the ID is not too large. Needed for bi-arch support. */ - if (id32 != id) - { - __set_errno (EOVERFLOW); - return -1; - } - - /* Open file for writing. Everybody is allowed to read this file. */ - fd = open_not_cancel (HOSTIDFILE, O_CREAT|O_WRONLY|O_TRUNC, 0644); - if (fd < 0) - return -1; - - written = write_not_cancel (fd, &id32, sizeof (id32)); - - close_not_cancel_no_status (fd); - - return written != sizeof (id32) ? -1 : 0; -} - -#else -# include -# include -# include -# include - -long int -gethostid (void) -{ - char hostname[MAXHOSTNAMELEN + 1]; - size_t buflen; - char *buffer; - struct hostent hostbuf, *hp; - int32_t id; - struct in_addr in; - int herr; - int fd; - - /* First try to get the ID from a former invocation of sethostid. */ - fd = open_not_cancel (HOSTIDFILE, O_RDONLY|O_LARGEFILE, 0); - if (fd >= 0) - { - ssize_t n = read_not_cancel (fd, &id, sizeof (id)); - - close_not_cancel_no_status (fd); - - if (n == sizeof (id)) - return id; - } - - /* Getting from the file was not successful. An intelligent guess for - a unique number of a host is its IP address. Return this. */ - if (__gethostname (hostname, MAXHOSTNAMELEN) < 0 || hostname[0] == '\0') - /* This also fails. Return and arbitrary value. */ - return 0; - - buflen = 1024; - buffer = __alloca (buflen); - - /* To get the IP address we need to know the host name. */ - while (__gethostbyname_r (hostname, &hostbuf, buffer, buflen, &hp, &herr) - != 0 - || hp == NULL) - if (herr != NETDB_INTERNAL || errno != ERANGE) - return 0; - else - /* Enlarge buffer. */ - buffer = extend_alloca (buffer, buflen, 2 * buflen); - - in.s_addr = 0; - memcpy (&in, hp->h_addr, - (int) sizeof (in) < hp->h_length ? (int) sizeof (in) : hp->h_length); - - /* For the return value to be not exactly the IP address we do some - bit fiddling. */ - return (int32_t) (in.s_addr << 16 | in.s_addr >> 16); -} -#endif diff --git a/sysdeps/unix/sysv/linux/getipv4sourcefilter.c b/sysdeps/unix/sysv/linux/getipv4sourcefilter.c deleted file mode 100644 index 004c83e916..0000000000 --- a/sysdeps/unix/sysv/linux/getipv4sourcefilter.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Get IPv4 source filter. Linux version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2004. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -int -getipv4sourcefilter (int s, struct in_addr interface, struct in_addr group, - uint32_t *fmode, uint32_t *numsrc, struct in_addr *slist) -{ - /* We have to create an struct ip_msfilter object which we can pass - to the kernel. */ - socklen_t needed = IP_MSFILTER_SIZE (*numsrc); - int use_alloca = __libc_use_alloca (needed); - - struct ip_msfilter *imsf; - if (use_alloca) - imsf = (struct ip_msfilter *) alloca (needed); - else - { - imsf = (struct ip_msfilter *) malloc (needed); - if (imsf == NULL) - return -1; - } - - imsf->imsf_multiaddr = group; - imsf->imsf_interface = interface; - imsf->imsf_numsrc = *numsrc; - - int result = __getsockopt (s, SOL_IP, IP_MSFILTER, imsf, &needed); - - /* If successful, copy the results to the places the caller wants - them in. */ - if (result == 0) - { - *fmode = imsf->imsf_fmode; - memcpy (slist, imsf->imsf_slist, - MIN (*numsrc, imsf->imsf_numsrc) * sizeof (struct in_addr)); - *numsrc = imsf->imsf_numsrc; - } - - if (! use_alloca) - { - int save_errno = errno; - free (imsf); - __set_errno (save_errno); - } - - return result; -} diff --git a/sysdeps/unix/sysv/linux/getloadavg.c b/sysdeps/unix/sysv/linux/getloadavg.c deleted file mode 100644 index 117f8c2b38..0000000000 --- a/sysdeps/unix/sysv/linux/getloadavg.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Get system load averages. Linux (/proc/loadavg) version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Put the 1 minute, 5 minute and 15 minute load averages - into the first NELEM elements of LOADAVG. - Return the number written (never more than 3, but may be less than NELEM), - or -1 if an error occurred. */ - -int -getloadavg (double loadavg[], int nelem) -{ - int fd; - - fd = open_not_cancel_2 ("/proc/loadavg", O_RDONLY); - if (fd < 0) - return -1; - else - { - char buf[65], *p; - ssize_t nread; - int i; - - nread = read_not_cancel (fd, buf, sizeof buf - 1); - close_not_cancel_no_status (fd); - if (nread <= 0) - return -1; - buf[nread - 1] = '\0'; - - if (nelem > 3) - nelem = 3; - p = buf; - for (i = 0; i < nelem; ++i) - { - char *endp; - loadavg[i] = __strtod_l (p, &endp, _nl_C_locobj_ptr); - if (endp == p) - /* This should not happen. The format of /proc/loadavg - must have changed. Don't return with what we have, - signal an error. */ - return -1; - p = endp; - } - - return i; - } -} diff --git a/sysdeps/unix/sysv/linux/getlogin.c b/sysdeps/unix/sysv/linux/getlogin.c deleted file mode 100644 index ccb9e78ff2..0000000000 --- a/sysdeps/unix/sysv/linux/getlogin.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define STATIC static -#define getlogin getlogin_fd0 -#include -#undef getlogin - - -/* Return the login name of the user, or NULL if it can't be determined. - The returned pointer, if not NULL, is good only until the next call. */ - -char * -getlogin (void) -{ - int res = __getlogin_r_loginuid (name, sizeof (name)); - if (res >= 0) - return res == 0 ? name : NULL; - - return getlogin_fd0 (); -} diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c b/sysdeps/unix/sysv/linux/getlogin_r.c deleted file mode 100644 index 05ac36b491..0000000000 --- a/sysdeps/unix/sysv/linux/getlogin_r.c +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define STATIC static -static int getlogin_r_fd0 (char *name, size_t namesize); -#define __getlogin_r getlogin_r_fd0 -#include -#undef __getlogin_r - - -/* Try to determine login name from /proc/self/loginuid and return 0 - if successful. If /proc/self/loginuid cannot be read return -1. - Otherwise return the error number. */ - -int -attribute_hidden -__getlogin_r_loginuid (char *name, size_t namesize) -{ - int fd = open_not_cancel_2 ("/proc/self/loginuid", O_RDONLY); - if (fd == -1) - return -1; - - /* We are reading a 32-bit number. 12 bytes are enough for the text - representation. If not, something is wrong. */ - char uidbuf[12]; - ssize_t n = TEMP_FAILURE_RETRY (read_not_cancel (fd, uidbuf, - sizeof (uidbuf))); - close_not_cancel_no_status (fd); - - uid_t uid; - char *endp; - if (n <= 0 - || n == sizeof (uidbuf) - || (uidbuf[n] = '\0', - uid = strtoul (uidbuf, &endp, 10), - endp == uidbuf || *endp != '\0')) - return -1; - - size_t buflen = 1024; - char *buf = alloca (buflen); - bool use_malloc = false; - struct passwd pwd; - struct passwd *tpwd; - int result = 0; - int res; - - while ((res = __getpwuid_r (uid, &pwd, buf, buflen, &tpwd)) == ERANGE) - if (__libc_use_alloca (2 * buflen)) - buf = extend_alloca (buf, buflen, 2 * buflen); - else - { - buflen *= 2; - char *newp = realloc (use_malloc ? buf : NULL, buflen); - if (newp == NULL) - { - result = ENOMEM; - goto out; - } - buf = newp; - use_malloc = true; - } - - if (res != 0 || tpwd == NULL) - { - result = -1; - goto out; - } - - size_t needed = strlen (pwd.pw_name) + 1; - if (needed > namesize) - { - __set_errno (ERANGE); - result = ERANGE; - goto out; - } - - memcpy (name, pwd.pw_name, needed); - - out: - if (use_malloc) - free (buf); - - return result; -} - - -/* Return at most NAME_LEN characters of the login name of the user in NAME. - If it cannot be determined or some other error occurred, return the error - code. Otherwise return 0. */ - -int -__getlogin_r (char *name, size_t namesize) -{ - int res = __getlogin_r_loginuid (name, namesize); - if (res >= 0) - return res; - - return getlogin_r_fd0 (name, namesize); -} -libc_hidden_def (__getlogin_r) -weak_alias (__getlogin_r, getlogin_r) -libc_hidden_weak (getlogin_r) diff --git a/sysdeps/unix/sysv/linux/getpagesize.c b/sysdeps/unix/sysv/linux/getpagesize.c deleted file mode 100644 index d1fd37010e..0000000000 --- a/sysdeps/unix/sysv/linux/getpagesize.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include - -/* Return the system page size. */ -int -__getpagesize (void) -{ - assert (GLRO(dl_pagesize) != 0); - return GLRO(dl_pagesize); -} -libc_hidden_def (__getpagesize) -weak_alias (__getpagesize, getpagesize) diff --git a/sysdeps/unix/sysv/linux/getpeername.c b/sysdeps/unix/sysv/linux/getpeername.c deleted file mode 100644 index 347fc74039..0000000000 --- a/sysdeps/unix/sysv/linux/getpeername.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include -#include - -int -__getpeername (int fd, __SOCKADDR_ARG addr, socklen_t *len) -{ -#ifdef __ASSUME_GETPEERNAME_SYSCALL - return INLINE_SYSCALL (getpeername, 3, fd, addr.__sockaddr__, len); -#else - return SOCKETCALL (getpeername, fd, addr.__sockaddr__, len); -#endif -} -weak_alias (__getpeername, getpeername) diff --git a/sysdeps/unix/sysv/linux/getpriority.c b/sysdeps/unix/sysv/linux/getpriority.c deleted file mode 100644 index 5137cf72b8..0000000000 --- a/sysdeps/unix/sysv/linux/getpriority.c +++ /dev/null @@ -1,45 +0,0 @@ -/* getpriority for Linux. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include -#include - -/* The return value of getpriority syscall is biased by this value - to avoid returning negative values. */ -#define PZERO 20 - -/* Return the highest priority of any process specified by WHICH and WHO - (see above); if WHO is zero, the current process, process group, or user - (as specified by WHO) is used. A lower priority number means higher - priority. Priorities range from PRIO_MIN to PRIO_MAX. */ - -int -__getpriority (enum __priority_which which, id_t who) -{ - int res; - - res = INLINE_SYSCALL (getpriority, 2, (int) which, who); - if (res >= 0) - res = PZERO - res; - return res; -} -libc_hidden_def (__getpriority) -weak_alias (__getpriority, getpriority) diff --git a/sysdeps/unix/sysv/linux/getpt.c b/sysdeps/unix/sysv/linux/getpt.c deleted file mode 100644 index a92b8f988d..0000000000 --- a/sysdeps/unix/sysv/linux/getpt.c +++ /dev/null @@ -1,101 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Zack Weinberg , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#include "linux_fsinfo.h" - -/* Path to the master pseudo terminal cloning device. */ -#define _PATH_DEVPTMX _PATH_DEV "ptmx" -/* Directory containing the UNIX98 pseudo terminals. */ -#define _PATH_DEVPTS _PATH_DEV "pts" - -/* Prototype for function that opens BSD-style master pseudo-terminals. */ -int __bsd_getpt (void); - -/* Open a master pseudo terminal and return its file descriptor. */ -int -__posix_openpt (int oflag) -{ - static int have_no_dev_ptmx; - int fd; - - if (!have_no_dev_ptmx) - { - fd = __open (_PATH_DEVPTMX, oflag); - if (fd != -1) - { - struct statfs fsbuf; - static int devpts_mounted; - - /* Check that the /dev/pts filesystem is mounted - or if /dev is a devfs filesystem (this implies /dev/pts). */ - if (devpts_mounted - || (__statfs (_PATH_DEVPTS, &fsbuf) == 0 - && fsbuf.f_type == DEVPTS_SUPER_MAGIC) - || (__statfs (_PATH_DEV, &fsbuf) == 0 - && fsbuf.f_type == DEVFS_SUPER_MAGIC)) - { - /* Everything is ok. */ - devpts_mounted = 1; - return fd; - } - - /* If /dev/pts is not mounted then the UNIX98 pseudo terminals - are not usable. */ - __close (fd); - have_no_dev_ptmx = 1; - __set_errno (ENOENT); - } - else - { - if (errno == ENOENT || errno == ENODEV) - have_no_dev_ptmx = 1; - else - return -1; - } - } - else - __set_errno (ENOENT); - - return -1; -} -weak_alias (__posix_openpt, posix_openpt) - - -int -__getpt (void) -{ - int fd = __posix_openpt (O_RDWR); - if (fd == -1) - fd = __bsd_getpt (); - return fd; -} - - -#define PTYNAME1 "pqrstuvwxyzabcde"; -#define PTYNAME2 "0123456789abcdef"; - -#define __getpt __bsd_getpt -#define HAVE_POSIX_OPENPT -#include diff --git a/sysdeps/unix/sysv/linux/getrandom.c b/sysdeps/unix/sysv/linux/getrandom.c deleted file mode 100644 index 25eb6efdd6..0000000000 --- a/sysdeps/unix/sysv/linux/getrandom.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Implementation of the getrandom system call. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#ifdef __NR_getrandom -/* Write LENGTH bytes of randomness starting at BUFFER. Return 0 on - success and -1 on failure. */ -ssize_t -getrandom (void *buffer, size_t length, unsigned int flags) -{ - return SYSCALL_CANCEL (getrandom, buffer, length, flags); -} -#else -/* Always provide a definition, even if the kernel headers lack the - system call number. */ -ssize_t -getrandom (void *buffer, size_t length, unsigned int flags) -{ - /* Ideally, we would add a cancellation point here, but we currently - cannot do so inside libc. */ - __set_errno (ENOSYS); - return -1; -} -#endif diff --git a/sysdeps/unix/sysv/linux/getrlimit.c b/sysdeps/unix/sysv/linux/getrlimit.c deleted file mode 100644 index 32670fbb18..0000000000 --- a/sysdeps/unix/sysv/linux/getrlimit.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Linux getrlimit implementation (32 bits rlim_t). - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#if !__RLIM_T_MATCHES_RLIM64_T - -/* The __NR_getrlimit compatibility implementation is required iff - __NR_ugetrlimit is also defined (meaning an old broken RLIM_INFINITY - definition). */ -# ifndef __NR_ugetrlimit -# define __NR_ugetrlimit __NR_getrlimit -# undef SHLIB_COMPAT -# define SHLIB_COMPAT(a, b, c) 0 -# endif - -int -__new_getrlimit (enum __rlimit_resource resource, struct rlimit *rlim) -{ - return INLINE_SYSCALL_CALL (ugetrlimit, resource, rlim); -} -weak_alias (__new_getrlimit, __getrlimit) -hidden_weak (__getrlimit) - -# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2) -/* Back compatible 2Gig limited rlimit. */ -int -__old_getrlimit (enum __rlimit_resource resource, struct rlimit *rlim) -{ - return INLINE_SYSCALL_CALL (getrlimit, resource, rlim); -} -compat_symbol (libc, __old_getrlimit, getrlimit, GLIBC_2_0); -versioned_symbol (libc, __new_getrlimit, getrlimit, GLIBC_2_2); -# else -weak_alias (__new_getrlimit, getrlimit) -# endif - -#endif /* __RLIM_T_MATCHES_RLIM64_T */ diff --git a/sysdeps/unix/sysv/linux/getrlimit64.c b/sysdeps/unix/sysv/linux/getrlimit64.c deleted file mode 100644 index 56af3c0646..0000000000 --- a/sysdeps/unix/sysv/linux/getrlimit64.c +++ /dev/null @@ -1,87 +0,0 @@ -/* Linux getrlimit64 implementation (64 bits rlim_t). - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Add this redirection so the strong_alias for __RLIM_T_MATCHES_RLIM64_T - linking getlimit64 to {__}getrlimit does not throw a type error. */ -#undef getrlimit -#undef __getrlimit -#define getrlimit getrlimit_redirect -#define __getrlimit __getrlimit_redirect -#include -#undef getrlimit -#undef __getrlimit - -/* Put the soft and hard limits for RESOURCE in *RLIMITS. - Returns 0 if successful, -1 if not (and sets errno). */ -int -__getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits) -{ - return INLINE_SYSCALL_CALL (prlimit64, 0, resource, NULL, rlimits); -} -libc_hidden_def (__getrlimit64) - -#if __RLIM_T_MATCHES_RLIM64_T -/* If both rlim_t and rlimt64_t are essentially the same type we can use - alias both interfaces. */ -strong_alias (__getrlimit64, __GI_getrlimit) -strong_alias (__getrlimit64, __GI___getrlimit) -strong_alias (__getrlimit64, __getrlimit) -weak_alias (__getrlimit64, getrlimit) -/* And there is no need for compat symbols. */ -# undef SHLIB_COMPAT -# define SHLIB_COMPAT(a, b, c) 0 -#endif - -#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_2) -/* Back compatible 2GiB limited rlimit. */ -extern int __new_getrlimit (enum __rlimit_resource, struct rlimit *); - -int -attribute_compat_text_section -__old_getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits) -{ -# if __RLIM_T_MATCHES_RLIM64_T -# define rlimits32 (*rlimits) -# else - struct rlimit rlimits32; -# endif - - if (__new_getrlimit (resource, &rlimits32) < 0) - return -1; - - if (rlimits32.rlim_cur == RLIM_INFINITY) - rlimits->rlim_cur = RLIM64_INFINITY >> 1; - else - rlimits->rlim_cur = rlimits32.rlim_cur; - if (rlimits32.rlim_max == RLIM_INFINITY) - rlimits->rlim_max = RLIM64_INFINITY >> 1; - else - rlimits->rlim_max = rlimits32.rlim_max; - - return 0; -} -versioned_symbol (libc, __getrlimit64, getrlimit64, GLIBC_2_2); -compat_symbol (libc, __old_getrlimit64, getrlimit64, GLIBC_2_1); -#else -weak_alias (__getrlimit64, getrlimit64) -libc_hidden_weak (getrlimit64) -#endif diff --git a/sysdeps/unix/sysv/linux/getsockname.c b/sysdeps/unix/sysv/linux/getsockname.c deleted file mode 100644 index 17382998ea..0000000000 --- a/sysdeps/unix/sysv/linux/getsockname.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include -#include - -int -__getsockname (int fd, __SOCKADDR_ARG addr, socklen_t *len) -{ -#ifdef __ASSUME_GETSOCKNAME_SYSCALL - return INLINE_SYSCALL (getsockname, 3, fd, addr.__sockaddr__, len); -#else - return SOCKETCALL (getsockname, fd, addr.__sockaddr__, len); -#endif -} -weak_alias (__getsockname, getsockname) diff --git a/sysdeps/unix/sysv/linux/getsockopt.c b/sysdeps/unix/sysv/linux/getsockopt.c deleted file mode 100644 index 8c37b49da4..0000000000 --- a/sysdeps/unix/sysv/linux/getsockopt.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include -#include - -int -__getsockopt (int fd, int level, int optname, void *optval, socklen_t *len) -{ -#ifdef __ASSUME_GETSOCKOPT_SYSCALL - return INLINE_SYSCALL (getsockopt, 5, fd, level, optname, optval, len); -#else - return SOCKETCALL (getsockopt, fd, level, optname, optval, len); -#endif -} -weak_alias (__getsockopt, getsockopt) diff --git a/sysdeps/unix/sysv/linux/getsourcefilter.c b/sysdeps/unix/sysv/linux/getsourcefilter.c deleted file mode 100644 index 806cb161e4..0000000000 --- a/sysdeps/unix/sysv/linux/getsourcefilter.c +++ /dev/null @@ -1,146 +0,0 @@ -/* Get source filter. Linux version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2004. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -static const struct -{ - int sol; - int af; - socklen_t size; -} sol_map[] = - { - /* Sort the array according to importance of the protocols. Add - more protocols when they become available. */ - { SOL_IP, AF_INET, sizeof (struct sockaddr_in) }, - { SOL_IPV6, AF_INET6, sizeof (struct sockaddr_in6) }, - { SOL_AX25, AF_AX25, sizeof (struct sockaddr_ax25) }, - { SOL_IPX, AF_IPX, sizeof (struct sockaddr_ipx) }, - { SOL_ATALK, AF_APPLETALK, sizeof (struct sockaddr_at) }, - { SOL_ROSE, AF_ROSE, sizeof (struct sockaddr_rose) }, - { SOL_PACKET, AF_PACKET, sizeof (struct sockaddr_ll) } - }; -#define NSOL_MAP (sizeof (sol_map) / sizeof (sol_map[0])) - - -/* Try to determine the socket level value. Ideally both side and - family are set. But sometimes only the size is correct and the - family value might be bogus. Loop over the array entries and look - for a perfect match or the first match based on size. */ -int -__get_sol (int af, socklen_t len) -{ - int first_size_sol = -1; - - for (size_t cnt = 0; cnt < NSOL_MAP; ++cnt) - { - /* Just a test so that we make sure the special value used to - signal the "we have so far no socket level value" is OK. */ - assert (sol_map[cnt].sol != -1); - - if (len == sol_map[cnt].size) - { - /* The size matches, which is a requirement. If the family - matches, too, we have a winner. Otherwise we remember the - socket level value for this protocol if it is the first - match. */ - if (af == sol_map[cnt].af) - /* Bingo! */ - return sol_map[cnt].sol; - - if (first_size_sol == -1) - first_size_sol = sol_map[cnt].sol; - } - } - - return first_size_sol; -} - - -int -getsourcefilter (int s, uint32_t interface, const struct sockaddr *group, - socklen_t grouplen, uint32_t *fmode, uint32_t *numsrc, - struct sockaddr_storage *slist) -{ - /* We have to create an struct ip_msfilter object which we can pass - to the kernel. */ - socklen_t needed = GROUP_FILTER_SIZE (*numsrc); - int use_alloca = __libc_use_alloca (needed); - - struct group_filter *gf; - if (use_alloca) - gf = (struct group_filter *) alloca (needed); - else - { - gf = (struct group_filter *) malloc (needed); - if (gf == NULL) - return -1; - } - - gf->gf_interface = interface; - memcpy (&gf->gf_group, group, grouplen); - gf->gf_numsrc = *numsrc; - - /* We need to provide the appropriate socket level value. */ - int result; - int sol = __get_sol (group->sa_family, grouplen); - if (sol == -1) - { - __set_errno (EINVAL); - result = -1; - } - else - { - result = __getsockopt (s, sol, MCAST_MSFILTER, gf, &needed); - - /* If successful, copy the results to the places the caller wants - them in. */ - if (result == 0) - { - *fmode = gf->gf_fmode; - memcpy (slist, gf->gf_slist, - MIN (*numsrc, gf->gf_numsrc) - * sizeof (struct sockaddr_storage)); - *numsrc = gf->gf_numsrc; - } - } - - if (! use_alloca) - { - int save_errno = errno; - free (gf); - __set_errno (save_errno); - } - - return result; -} diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c deleted file mode 100644 index 63e41100eb..0000000000 --- a/sysdeps/unix/sysv/linux/getsysstats.c +++ /dev/null @@ -1,330 +0,0 @@ -/* Determine various system internal values, Linux version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - - -/* How we can determine the number of available processors depends on - the configuration. There is currently (as of version 2.0.21) no - system call to determine the number. It is planned for the 2.1.x - series to add this, though. - - One possibility to implement it for systems using Linux 2.0 is to - examine the pseudo file /proc/cpuinfo. Here we have one entry for - each processor. - - But not all systems have support for the /proc filesystem. If it - is not available we simply return 1 since there is no way. */ - - -/* Other architectures use different formats for /proc/cpuinfo. This - provides a hook for alternative parsers. */ -#ifndef GET_NPROCS_PARSER -# define GET_NPROCS_PARSER(FD, BUFFER, CP, RE, BUFFER_END, RESULT) \ - do \ - { \ - (RESULT) = 0; \ - /* Read all lines and count the lines starting with the string \ - "processor". We don't have to fear extremely long lines since \ - the kernel will not generate them. 8192 bytes are really \ - enough. */ \ - char *l; \ - while ((l = next_line (FD, BUFFER, &CP, &RE, BUFFER_END)) != NULL) \ - if (strncmp (l, "processor", 9) == 0) \ - ++(RESULT); \ - } \ - while (0) -#endif - - -static char * -next_line (int fd, char *const buffer, char **cp, char **re, - char *const buffer_end) -{ - char *res = *cp; - char *nl = memchr (*cp, '\n', *re - *cp); - if (nl == NULL) - { - if (*cp != buffer) - { - if (*re == buffer_end) - { - memmove (buffer, *cp, *re - *cp); - *re = buffer + (*re - *cp); - *cp = buffer; - - ssize_t n = read_not_cancel (fd, *re, buffer_end - *re); - if (n < 0) - return NULL; - - *re += n; - - nl = memchr (*cp, '\n', *re - *cp); - while (nl == NULL && *re == buffer_end) - { - /* Truncate too long lines. */ - *re = buffer + 3 * (buffer_end - buffer) / 4; - n = read_not_cancel (fd, *re, buffer_end - *re); - if (n < 0) - return NULL; - - nl = memchr (*re, '\n', n); - **re = '\n'; - *re += n; - } - } - else - nl = memchr (*cp, '\n', *re - *cp); - - res = *cp; - } - - if (nl == NULL) - nl = *re - 1; - } - - *cp = nl + 1; - assert (*cp <= *re); - - return res == *re ? NULL : res; -} - - -int -__get_nprocs (void) -{ - static int cached_result = -1; - static time_t timestamp; - - time_t now = time (NULL); - time_t prev = timestamp; - atomic_read_barrier (); - if (now == prev && cached_result > -1) - return cached_result; - - /* XXX Here will come a test for the new system call. */ - - const size_t buffer_size = __libc_use_alloca (8192) ? 8192 : 512; - char *buffer = alloca (buffer_size); - char *buffer_end = buffer + buffer_size; - char *cp = buffer_end; - char *re = buffer_end; - - const int flags = O_RDONLY | O_CLOEXEC; - int fd = open_not_cancel_2 ("/sys/devices/system/cpu/online", flags); - char *l; - int result = 0; - if (fd != -1) - { - l = next_line (fd, buffer, &cp, &re, buffer_end); - if (l != NULL) - do - { - char *endp; - unsigned long int n = strtoul (l, &endp, 10); - if (l == endp) - { - result = 0; - break; - } - - unsigned long int m = n; - if (*endp == '-') - { - l = endp + 1; - m = strtoul (l, &endp, 10); - if (l == endp) - { - result = 0; - break; - } - } - - result += m - n + 1; - - l = endp; - while (l < re && isspace (*l)) - ++l; - } - while (l < re); - - close_not_cancel_no_status (fd); - - if (result > 0) - goto out; - } - - cp = buffer_end; - re = buffer_end; - result = 1; - - /* The /proc/stat format is more uniform, use it by default. */ - fd = open_not_cancel_2 ("/proc/stat", flags); - if (fd != -1) - { - result = 0; - - while ((l = next_line (fd, buffer, &cp, &re, buffer_end)) != NULL) - /* The current format of /proc/stat has all the cpu* entries - at the front. We assume here that stays this way. */ - if (strncmp (l, "cpu", 3) != 0) - break; - else if (isdigit (l[3])) - ++result; - - close_not_cancel_no_status (fd); - } - else - { - fd = open_not_cancel_2 ("/proc/cpuinfo", flags); - if (fd != -1) - { - GET_NPROCS_PARSER (fd, buffer, cp, re, buffer_end, result); - close_not_cancel_no_status (fd); - } - } - - out: - cached_result = result; - atomic_write_barrier (); - timestamp = now; - - return result; -} -weak_alias (__get_nprocs, get_nprocs) - - -/* On some architectures it is possible to distinguish between configured - and active cpus. */ -int -__get_nprocs_conf (void) -{ - /* XXX Here will come a test for the new system call. */ - - /* Try to use the sysfs filesystem. It has actual information about - online processors. */ - DIR *dir = __opendir ("/sys/devices/system/cpu"); - if (dir != NULL) - { - int count = 0; - struct dirent64 *d; - - while ((d = __readdir64 (dir)) != NULL) - /* NB: the sysfs has d_type support. */ - if (d->d_type == DT_DIR && strncmp (d->d_name, "cpu", 3) == 0) - { - char *endp; - unsigned long int nr = strtoul (d->d_name + 3, &endp, 10); - if (nr != ULONG_MAX && endp != d->d_name + 3 && *endp == '\0') - ++count; - } - - __closedir (dir); - - return count; - } - - int result = 1; - -#ifdef GET_NPROCS_CONF_PARSER - /* If we haven't found an appropriate entry return 1. */ - FILE *fp = fopen ("/proc/cpuinfo", "rce"); - if (fp != NULL) - { - char buffer[8192]; - - /* No threads use this stream. */ - __fsetlocking (fp, FSETLOCKING_BYCALLER); - GET_NPROCS_CONF_PARSER (fp, buffer, result); - fclose (fp); - } -#else - result = __get_nprocs (); -#endif - - return result; -} -weak_alias (__get_nprocs_conf, get_nprocs_conf) - - -/* Compute (num*mem_unit)/pagesize, but avoid overflowing long int. - In practice, mem_unit is never bigger than the page size, so after - the first loop it is 1. [In the kernel, it is initialized to - PAGE_SIZE in mm/page_alloc.c:si_meminfo(), and then in - kernel.sys.c:do_sysinfo() it is set to 1 if unsigned long can - represent all the sizes measured in bytes]. */ -static long int -sysinfo_mempages (unsigned long int num, unsigned int mem_unit) -{ - unsigned long int ps = __getpagesize (); - - while (mem_unit > 1 && ps > 1) - { - mem_unit >>= 1; - ps >>= 1; - } - num *= mem_unit; - while (ps > 1) - { - ps >>= 1; - num >>= 1; - } - return num; -} - -/* Return the number of pages of total/available physical memory in - the system. This used to be done by parsing /proc/meminfo, but - that's unnecessarily expensive (and /proc is not always available). - The sysinfo syscall provides the same information, and has been - available at least since kernel 2.3.48. */ -long int -__get_phys_pages (void) -{ - struct sysinfo info; - - __sysinfo (&info); - return sysinfo_mempages (info.totalram, info.mem_unit); -} -weak_alias (__get_phys_pages, get_phys_pages) - -long int -__get_avphys_pages (void) -{ - struct sysinfo info; - - __sysinfo (&info); - return sysinfo_mempages (info.freeram, info.mem_unit); -} -weak_alias (__get_avphys_pages, get_avphys_pages) diff --git a/sysdeps/unix/sysv/linux/gettimeofday.c b/sysdeps/unix/sysv/linux/gettimeofday.c deleted file mode 100644 index 6afa407ac4..0000000000 --- a/sysdeps/unix/sysv/linux/gettimeofday.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef __gettimeofday - -#ifdef HAVE_GETTIMEOFDAY_VSYSCALL -# define HAVE_VSYSCALL -#endif -#include - -/* Get the current time of day and timezone information, - putting it into *tv and *tz. If tz is null, *tz is not filled. - Returns 0 on success, -1 on errors. */ -int -__gettimeofday (struct timeval *tv, struct timezone *tz) -{ - return INLINE_VSYSCALL (gettimeofday, 2, tv, tz); -} -libc_hidden_def (__gettimeofday) -weak_alias (__gettimeofday, gettimeofday) -libc_hidden_weak (gettimeofday) diff --git a/sysdeps/unix/sysv/linux/grantpt.c b/sysdeps/unix/sysv/linux/grantpt.c deleted file mode 100644 index 8cebde36ed..0000000000 --- a/sysdeps/unix/sysv/linux/grantpt.c +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "pty-private.h" - -#if HAVE_PT_CHOWN -/* Close all file descriptors except the one specified. */ -static void -close_all_fds (void) -{ - DIR *dir = __opendir ("/proc/self/fd"); - if (dir != NULL) - { - struct dirent64 *d; - while ((d = __readdir64 (dir)) != NULL) - if (isdigit (d->d_name[0])) - { - char *endp; - long int fd = strtol (d->d_name, &endp, 10); - if (*endp == '\0' && fd != PTY_FILENO && fd != dirfd (dir)) - close_not_cancel_no_status (fd); - } - - __closedir (dir); - - int nullfd = open_not_cancel_2 (_PATH_DEVNULL, O_RDONLY); - assert (nullfd == STDIN_FILENO); - nullfd = open_not_cancel_2 (_PATH_DEVNULL, O_WRONLY); - assert (nullfd == STDOUT_FILENO); - __dup2 (STDOUT_FILENO, STDERR_FILENO); - } -} -# define CLOSE_ALL_FDS() close_all_fds() -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/hppa/Implies b/sysdeps/unix/sysv/linux/hppa/Implies deleted file mode 100644 index c3d145cb44..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/Implies +++ /dev/null @@ -1 +0,0 @@ -hppa/nptl diff --git a/sysdeps/unix/sysv/linux/hppa/Makefile b/sysdeps/unix/sysv/linux/hppa/Makefile deleted file mode 100644 index 68569013fb..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -# Used by *context() functions -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext_i.sym -endif diff --git a/sysdeps/unix/sysv/linux/hppa/Versions b/sysdeps/unix/sysv/linux/hppa/Versions deleted file mode 100644 index b5098b2171..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/Versions +++ /dev/null @@ -1,38 +0,0 @@ -libc { - # The comment lines with "#errlist-compat" are magic; see errlist-compat.awk. - # When you get an error from errlist-compat.awk, you need to add a new - # version here. Don't do this blindly, since this means changing the ABI - # for all GNU/Linux configurations. - - GLIBC_2.1 { - #errlist-compat 253 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.2 { - # New rlimit interface - getrlimit; setrlimit; getrlimit64; setrlimit64; - } - GLIBC_2.3 { - #errlist-compat 254 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.4 { - #errlist-compat 256 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.11 { - fallocate64; - } - GLIBC_2.12 { - #errlist-compat 257 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.17 { - #errlist-compat 260 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - prlimit64; - } - GLIBC_2.19 { - fanotify_mark; - } -} diff --git a/sysdeps/unix/sysv/linux/hppa/____longjmp_chk.c b/sysdeps/unix/sysv/linux/hppa/____longjmp_chk.c deleted file mode 100644 index 48aaeb36c9..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/____longjmp_chk.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING. If not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. */ - -#include -#include -#include -#define __longjmp ____longjmp_chk -#define CHECK_SP(sp) \ - do { \ - register unsigned long this_sp asm ("r30"); \ - /* The stack grows up, therefore frames that were created and then \ - destroyed must all have stack values higher than ours. */ \ - if ((unsigned long) (sp) > this_sp) \ - { \ - stack_t oss; \ - INTERNAL_SYSCALL_DECL (err); \ - int result = INTERNAL_SYSCALL (sigaltstack, err, 2, NULL, &oss);\ - /* If we aren't using an alternate stack then we have already \ - shown that we are jumping to a frame that doesn't exist so \ - error out. If we are using an alternate stack we must prove \ - that we are jumping *out* of the alternate stack. Note that \ - the check for that is the same as that for _STACK_GROWS_UP \ - as for _STACK_GROWS_DOWN. */ \ - if (!INTERNAL_SYSCALL_ERROR_P (result, err) \ - && ((oss.ss_flags & SS_ONSTACK) == 0 \ - || ((unsigned long) oss.ss_sp + oss.ss_size \ - - (unsigned long) (sp)) < oss.ss_size)) \ - __fortify_fail ("longjmp causes uninitialized stack frame"); \ - } \ - } while (0) - -#include <__longjmp.c> diff --git a/sysdeps/unix/sysv/linux/hppa/arch-fork.h b/sysdeps/unix/sysv/linux/hppa/arch-fork.h deleted file mode 100644 index 108305417d..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/arch-fork.h +++ /dev/null @@ -1,32 +0,0 @@ -/* ARCH_FORK definition for Linux fork implementation. HPPA version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -/* Argument 1 - Clone flags. - 2 - Child stack pointer. - 3 - Parent tid pointer. - 4 - New TLS area pointer. - 5 - Child tid pointer. */ -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 5, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ - NULL, NULL, NULL, &THREAD_SELF->tid) diff --git a/sysdeps/unix/sysv/linux/hppa/atomic-machine.h b/sysdeps/unix/sysv/linux/hppa/atomic-machine.h deleted file mode 100644 index 59581bd4bc..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/atomic-machine.h +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Carlos O'Donell , 2005. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include /* Required for type definitions e.g. uint8_t. */ - -#ifndef _ATOMIC_MACHINE_H -#define _ATOMIC_MACHINE_H 1 - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#define __HAVE_64B_ATOMICS 0 -#define USE_ATOMIC_COMPILER_BUILTINS 0 - -/* XXX Is this actually correct? */ -#define ATOMIC_EXCHANGE_USES_CAS 1 - -/* prev = *addr; - if (prev == old) - *addr = new; - return prev; */ - -/* Use the kernel atomic light weight syscalls on hppa. */ -#define _LWS "0xb0" -#define _LWS_CAS "0" -/* Note r31 is the link register. */ -#define _LWS_CLOBBER "r1", "r23", "r22", "r20", "r31", "memory" -/* String constant for -EAGAIN. */ -#define _ASM_EAGAIN "-11" -/* String constant for -EDEADLOCK. */ -#define _ASM_EDEADLOCK "-45" - -/* The only basic operation needed is compare and exchange. The mem - pointer must be word aligned. We no longer loop on deadlock. */ -#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ - ({ \ - register long lws_errno asm("r21"); \ - register unsigned long lws_ret asm("r28"); \ - register unsigned long lws_mem asm("r26") = (unsigned long)(mem); \ - register unsigned long lws_old asm("r25") = (unsigned long)(oldval);\ - register unsigned long lws_new asm("r24") = (unsigned long)(newval);\ - __asm__ __volatile__( \ - "0: \n\t" \ - "ble " _LWS "(%%sr2, %%r0) \n\t" \ - "ldi " _LWS_CAS ", %%r20 \n\t" \ - "cmpiclr,<> " _ASM_EAGAIN ", %%r21, %%r0\n\t" \ - "b,n 0b \n\t" \ - "cmpclr,= %%r0, %%r21, %%r0 \n\t" \ - "iitlbp %%r0,(%%sr0, %%r0) \n\t" \ - : "=r" (lws_ret), "=r" (lws_errno) \ - : "r" (lws_mem), "r" (lws_old), "r" (lws_new) \ - : _LWS_CLOBBER \ - ); \ - \ - (__typeof (oldval)) lws_ret; \ - }) - -#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \ - ({ \ - __typeof__ (*mem) ret; \ - ret = atomic_compare_and_exchange_val_acq(mem, newval, oldval); \ - /* Return 1 if it was already acquired. */ \ - (ret != oldval); \ - }) - -#endif -/* _ATOMIC_MACHINE_H */ diff --git a/sysdeps/unix/sysv/linux/hppa/bits/epoll.h b/sysdeps/unix/sysv/linux/hppa/bits/epoll.h deleted file mode 100644 index 0ba399dd2b..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/epoll.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_EPOLL_H -# error "Never use directly; include instead." -#endif - -/* Flags to be passed to epoll_create1. */ -enum - { - EPOLL_CLOEXEC = 010000000 -#define EPOLL_CLOEXEC EPOLL_CLOEXEC - }; diff --git a/sysdeps/unix/sysv/linux/hppa/bits/errno.h b/sysdeps/unix/sysv/linux/hppa/bits/errno.h deleted file mode 100644 index ce6bebe8b0..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/errno.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Error constants. Linux/HPPA specific version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifdef _ERRNO_H - -# undef EDOM -# undef EILSEQ -# undef ERANGE -# include - -/* Linux also has no ECANCELED error code. Since it is not used here - we define it to an invalid value. */ -# ifndef ECANCELED -# define ECANCELED ECANCELLED -# endif - -# ifndef EOWNERDEAD -# define EOWNERDEAD 254 -# endif - -# ifndef ENOTRECOVERABLE -# define ENOTRECOVERABLE 255 -# endif - -# ifndef ERFKILL -# define ERFKILL 256 -# endif - -# ifndef EHWPOISON -# define EHWPOISON 257 -# endif - -# ifndef __ASSEMBLER__ -/* Function to get address of global `errno' variable. */ -extern int *__errno_location (void) __THROW __attribute__ ((__const__)); - -# if !defined _LIBC || defined _LIBC_REENTRANT -/* When using threads, errno is a per-thread value. */ -# define errno (*__errno_location ()) -# endif -# endif /* !__ASSEMBLER__ */ -#endif /* _ERRNO_H */ - -#if !defined _ERRNO_H && defined __need_Emath -/* This is ugly but the kernel header is not clean enough. We must - define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is - defined. */ -# define EDOM 33 /* Math argument out of domain of function. */ -# define EILSEQ 47 /* Illegal byte sequence. */ -# define ERANGE 34 /* Math result not representable. */ -#endif /* !_ERRNO_H && __need_Emath */ diff --git a/sysdeps/unix/sysv/linux/hppa/bits/eventfd.h b/sysdeps/unix/sysv/linux/hppa/bits/eventfd.h deleted file mode 100644 index aaed52f736..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/eventfd.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_EVENTFD_H -# error "Never use directly; include instead." -#endif - -/* Flags for eventfd. */ -enum - { - EFD_SEMAPHORE = 1, -#define EFD_SEMAPHORE EFD_SEMAPHORE - EFD_CLOEXEC = 010000000, -#define EFD_CLOEXEC EFD_CLOEXEC - EFD_NONBLOCK = 00200004 /* HPUX has separate NDELAY & NONBLOCK */ -#define EFD_NONBLOCK EFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h b/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h deleted file mode 100644 index 2bd799883d..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h +++ /dev/null @@ -1,85 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -#define O_CREAT 00000400 /* not fcntl */ -#define O_EXCL 00002000 /* not fcntl */ -#define O_NOCTTY 00400000 /* not fcntl */ -#define O_APPEND 00000010 -#define O_NONBLOCK 00200004 /* HPUX has separate NDELAY & NONBLOCK */ -#define __O_DSYNC 01000000 -#define __O_RSYNC 02000000 /* HPUX only */ -#define __O_SYNC 00100000 -#define O_SYNC (__O_SYNC|__O_DSYNC) - -#define O_BLKSEEK 00000100 /* HPUX only */ - -#define __O_DIRECTORY 000010000 /* Must be a directory. */ -#define __O_NOFOLLOW 000000200 /* Do not follow links. */ -#define __O_CLOEXEC 010000000 /* Set close_on_exec. */ -#define __O_NOATIME 004000000 /* Do not set atime. */ -#define __O_PATH 020000000 -#define __O_TMPFILE 040010000 /* Atomically create nameless file. */ - -#define __O_LARGEFILE 00004000 - -#define F_GETLK64 8 /* Get record locking info. */ -#define F_SETLK64 9 /* Set record locking info (non-blocking). */ -#define F_SETLKW64 10 /* Set record locking info (blocking). */ - -#define __F_GETOWN 11 /* Get owner of socket (receiver of SIGIO). */ -#define __F_SETOWN 12 /* Set owner of socket (receiver of SIGIO). */ - -#define __F_SETSIG 13 /* Set number of signal to be sent. */ -#define __F_GETSIG 14 /* Get number of signal to be sent. */ - -/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ -#define F_RDLCK 1 /* Read lock. */ -#define F_WRLCK 2 /* Write lock. */ -#define F_UNLCK 3 /* Remove lock. */ - -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#ifndef __USE_FILE_OFFSET64 - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/hppa/bits/inotify.h b/sysdeps/unix/sysv/linux/hppa/bits/inotify.h deleted file mode 100644 index dfe5c8497c..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/inotify.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_INOTIFY_H -# error "Never use directly; include instead." -#endif - -/* Flags for the parameter of inotify_init1. */ -enum - { - IN_CLOEXEC = 010000000, -#define IN_CLOEXEC IN_CLOEXEC - IN_NONBLOCK = 000200004 /* HPUX has separate NDELAY & NONBLOCK */ -#define IN_NONBLOCK IN_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/hppa/bits/ioctls.h b/sysdeps/unix/sysv/linux/hppa/bits/ioctls.h deleted file mode 100644 index f81e67017b..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/ioctls.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_IOCTL_H -# error "Never use directly; include instead." -#endif - -/* Use the definitions from the kernel header files. */ -#include - -/* Oh well, this is necessary since the kernel data structure is - different from the user-level version. */ -#undef TCGETS -#undef TCSETS -#undef TCSETSW -#undef TCSETSF -#define TCGETS _IOR ('T', 16, char[36]) -#define TCSETS _IOW ('T', 17, char[36]) -#define TCSETSW _IOW ('T', 18, char[36]) -#define TCSETSF _IOW ('T', 19, char[36]) - -#include diff --git a/sysdeps/unix/sysv/linux/hppa/bits/ipc.h b/sysdeps/unix/sysv/linux/hppa/bits/ipc.h deleted file mode 100644 index b2c2cc1ecb..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/ipc.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_IPC_H -# error "Never use directly; include instead." -#endif - -#include -#include - -/* Mode bits for `msgget', `semget', and `shmget'. */ -#define IPC_CREAT 01000 /* Create key if key does not exist. */ -#define IPC_EXCL 02000 /* Fail if key exists. */ -#define IPC_NOWAIT 04000 /* Return error on wait. */ - -/* Control commands for `msgctl', `semctl', and `shmctl'. */ -#define IPC_RMID 0 /* Remove identifier. */ -#define IPC_SET 1 /* Set `ipc_perm' options. */ -#define IPC_STAT 2 /* Get `ipc_perm' options. */ -#ifdef __USE_GNU -# define IPC_INFO 3 /* See ipcs. */ -#endif - -/* Special key values. */ -#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ - - -/* Data structure used to pass permission information to IPC operations. */ -struct ipc_perm - { - __key_t __key; /* Key. */ - __uid_t uid; /* Owner's user ID. */ - __gid_t gid; /* Owner's group ID. */ - __uid_t cuid; /* Creator's user ID. */ - __gid_t cgid; /* Creator's group ID. */ -#if __WORDSIZE == 32 - unsigned short int __pad1; - unsigned short int mode; /* Read/write permission. */ - unsigned short int __pad2; -#else - __mode_t mode; /* Read/write permission. */ - unsigned short int __pad2; -#endif - unsigned short int __seq; /* Sequence number. */ - unsigned int __pad3; - __extension__ unsigned long long int __glibc_reserved1; - __extension__ unsigned long long int __glibc_reserved2; - }; diff --git a/sysdeps/unix/sysv/linux/hppa/bits/mman.h b/sysdeps/unix/sysv/linux/hppa/bits/mman.h deleted file mode 100644 index acf7002beb..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/mman.h +++ /dev/null @@ -1,111 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/HPPA version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* These are taken from the kernel definitions. */ - -#define PROT_READ 0x1 /* Page can be read */ -#define PROT_WRITE 0x2 /* Page can be written */ -#define PROT_EXEC 0x4 /* Page can be executed */ -#define PROT_NONE 0x0 /* Page can not be accessed */ -#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of - growsdown vma (mprotect only). */ -#define PROT_GROWSUP 0x02000000 /* Extend change to start of - growsup vma (mprotect only). */ - -#define MAP_SHARED 0x01 /* Share changes */ -#define MAP_PRIVATE 0x02 /* Changes are private */ -#ifdef __USE_MISC -# define MAP_TYPE 0x03 /* Mask for type of mapping */ -#endif - -/* Other flags. */ -#define MAP_FIXED 0x04 /* Interpret addr exactly */ -#ifdef __USE_MISC -# define MAP_FILE 0x0 -# define MAP_ANONYMOUS 0x10 /* Don't use a file */ -# define MAP_ANON MAP_ANONYMOUS -# define MAP_VARIABLE 0 -/* When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size. */ -# define MAP_HUGE_SHIFT 26 -# define MAP_HUGE_MASK 0x3f -#endif - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable */ -# define MAP_LOCKED 0x2000 /* Pages are locked */ -# define MAP_NORESERVE 0x4000 /* Don't check for reservations */ -# define MAP_GROWSDOWN 0x8000 /* Stack-like segment */ -# define MAP_POPULATE 0x10000 /* Populate (prefault) pagetables */ -# define MAP_NONBLOCK 0x20000 /* Do not block on IO */ -# define MAP_STACK 0x40000 /* Create for process/thread stacks */ -# define MAP_HUGETLB 0x80000 /* Create a huge page mapping */ -#endif - -/* Flags to "msync" */ -#define MS_SYNC 1 /* Synchronous memory sync */ -#define MS_ASYNC 2 /* Sync memory asynchronously */ -#define MS_INVALIDATE 4 /* Invalidate the caches */ - -/* Flags to "mlockall" */ -#define MCL_CURRENT 1 /* Lock all current mappings */ -#define MCL_FUTURE 2 /* Lock all future mappings */ -#define MCL_ONFAULT 4 /* Lock all pages that are faulted in */ - -/* Flags for `mremap'. */ -#ifdef __USE_GNU -# define MREMAP_MAYMOVE 1 -# define MREMAP_FIXED 2 -#endif - -/* Advice to "madvise" */ -#ifdef __USE_MISC -# define MADV_NORMAL 0 /* No further special treatment */ -# define MADV_RANDOM 1 /* Expect random page references */ -# define MADV_SEQUENTIAL 2 /* Expect sequential page references */ -# define MADV_WILLNEED 3 /* Will need these pages */ -# define MADV_DONTNEED 4 /* Dont need these pages */ -# define MADV_SPACEAVAIL 5 /* Insure that resources are reserved */ -# define MADV_VPS_PURGE 6 /* Purge pages from VM page cache */ -# define MADV_VPS_INHERIT 7 /* Inherit parents page size */ -# define MADV_FREE 8 /* Free pages only if memory pressure. */ -# define MADV_REMOVE 9 /* Remove these pages and resources. */ -# define MADV_DONTFORK 10 /* Do not inherit across fork. */ -# define MADV_DOFORK 11 /* Do inherit across fork. */ -# define MADV_MERGEABLE 65 /* KSM may merge identical pages */ -# define MADV_UNMERGEABLE 66 /* KSM may not merge identical pages */ -# define MADV_HUGEPAGE 67 /* Worth backing with hugepages */ -# define MADV_NOHUGEPAGE 68 /* Not worth backing with hugepages */ -# define MADV_DONTDUMP 69 /* Explicity exclude from the core dump, - overrides the coredump filter bits */ -# define MADV_DODUMP 70 /* Clear the MADV_NODUMP flag */ -#endif - -/* The POSIX people had to invent similar names for the same things. */ -#ifdef __USE_XOPEN2K -# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ -# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ -# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ -# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ -# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ -#endif diff --git a/sysdeps/unix/sysv/linux/hppa/bits/msq.h b/sysdeps/unix/sysv/linux/hppa/bits/msq.h deleted file mode 100644 index e022a95809..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/msq.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_MSG_H -# error "Never use directly; include instead." -#endif - -#include -#include - -/* Define options for message queue functions. */ -#define MSG_NOERROR 010000 /* no error if message is too big */ -#ifdef __USE_GNU -# define MSG_EXCEPT 020000 /* recv any msg except of specified type */ -# define MSG_COPY 040000 /* copy (not remove) all queue messages */ -#endif - -/* Types used in the structure definition. */ -typedef unsigned long int msgqnum_t; -typedef unsigned long int msglen_t; - - -/* Structure of record for one message inside the kernel. - The type `struct msg' is opaque. */ -struct msqid_ds -{ - struct ipc_perm msg_perm; /* structure describing operation permission */ -#if __WORDSIZE == 32 - unsigned int __pad1; -#endif - __time_t msg_stime; /* time of last msgsnd command */ -#if __WORDSIZE == 32 - unsigned int __pad2; -#endif - __time_t msg_rtime; /* time of last msgrcv command */ -#if __WORDSIZE == 32 - unsigned int __pad3; -#endif - __time_t msg_ctime; /* time of last change */ - unsigned long int __msg_cbytes; /* current number of bytes on queue */ - msgqnum_t msg_qnum; /* number of messages currently on queue */ - msglen_t msg_qbytes; /* max number of bytes allowed on queue */ - __pid_t msg_lspid; /* pid of last msgsnd() */ - __pid_t msg_lrpid; /* pid of last msgrcv() */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; -}; - -#ifdef __USE_MISC - -# define msg_cbytes __msg_cbytes - -/* ipcs ctl commands */ -# define MSG_STAT 11 -# define MSG_INFO 12 - -/* buffer for msgctl calls IPC_INFO, MSG_INFO */ -struct msginfo - { - int msgpool; - int msgmap; - int msgmax; - int msgmnb; - int msgmni; - int msgssz; - int msgtql; - unsigned short int msgseg; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/hppa/bits/sem.h b/sysdeps/unix/sysv/linux/hppa/bits/sem.h deleted file mode 100644 index a891494c3a..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/sem.h +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_SEM_H -# error "Never include directly; use instead." -#endif - -#include -#include - -/* Flags for `semop'. */ -#define SEM_UNDO 0x1000 /* undo the operation on exit */ - -/* Commands for `semctl'. */ -#define GETPID 11 /* get sempid */ -#define GETVAL 12 /* get semval */ -#define GETALL 13 /* get all semval's */ -#define GETNCNT 14 /* get semncnt */ -#define GETZCNT 15 /* get semzcnt */ -#define SETVAL 16 /* set semval */ -#define SETALL 17 /* set all semval's */ - - -/* Data structure describing a set of semaphores. */ -struct semid_ds -{ - struct ipc_perm sem_perm; /* operation permission struct */ -#if __WORDSIZE == 32 - unsigned int __pad1; -#endif - __time_t sem_otime; /* last semop() time */ -#if __WORDSIZE == 32 - unsigned int __pad2; -#endif - __time_t sem_ctime; /* last time changed by semctl() */ - unsigned long int sem_nsems; /* number of semaphores in set */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; -}; - -/* The user should define a union like the following to use it for arguments - for `semctl'. - - union semun - { - int val; <= value for SETVAL - struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET - unsigned short int *array; <= array for GETALL & SETALL - struct seminfo *__buf; <= buffer for IPC_INFO - }; - - Previous versions of this file used to define this union but this is - incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether - one must define the union or not. */ -#define _SEM_SEMUN_UNDEFINED 1 - -#ifdef __USE_MISC - -/* ipcs ctl cmds */ -# define SEM_STAT 18 -# define SEM_INFO 19 - -struct seminfo -{ - int semmap; - int semmni; - int semmns; - int semmnu; - int semmsl; - int semopm; - int semume; - int semusz; - int semvmx; - int semaem; -}; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/hppa/bits/shm.h b/sysdeps/unix/sysv/linux/hppa/bits/shm.h deleted file mode 100644 index 794f0ab2da..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/shm.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_SHM_H -# error "Never include directly; use instead." -#endif - -#include -#include - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from */ -#define SHM_W 0200 /* or S_IWUGO from */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ -#define SHM_EXEC 0100000 /* execution access */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -/* Segment low boundary address multiple. */ -#define SHMLBA 0x00400000 /* address needs to be 4 Mb aligned */ - -/* Type to count number of attaches. */ -typedef unsigned long int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ -#if __WORDSIZE == 32 - unsigned int __pad1; -#endif - __time_t shm_atime; /* time of last shmat() */ -#if __WORDSIZE == 32 - unsigned int __pad2; -#endif - __time_t shm_dtime; /* time of last shmdt() */ -#if __WORDSIZE == 32 - unsigned int __pad3; -#endif - __time_t shm_ctime; /* time of last change by shmctl() */ -#if __WORDSIZE == 32 - unsigned int __pad4; -#endif - size_t shm_segsz; /* size of segment in bytes */ - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - unsigned long shmmax; - unsigned long shmmin; - unsigned long shmmni; - unsigned long shmseg; - unsigned long shmall; - unsigned long __glibc_reserved1; - unsigned long __glibc_reserved2; - unsigned long __glibc_reserved3; - unsigned long __glibc_reserved4; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/hppa/bits/sigaction.h b/sysdeps/unix/sysv/linux/hppa/bits/sigaction.h deleted file mode 100644 index 06ba2db8f2..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/sigaction.h +++ /dev/null @@ -1,81 +0,0 @@ -/* Definitions for Linux/HPPA sigaction. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SIGNAL_H -# error "Never include directly; use instead." -#endif - -#include - -/* Structure describing the action to be taken when a signal arrives. */ -struct sigaction - { - /* Signal handler. */ -#ifdef __USE_POSIX199309 - union - { - /* Used if SA_SIGINFO is not set. */ - __sighandler_t sa_handler; - /* Used if SA_SIGINFO is set. */ - void (*sa_sigaction) (int, siginfo_t *, void *); - } - __sigaction_handler; -# define sa_handler __sigaction_handler.sa_handler -# define sa_sigaction __sigaction_handler.sa_sigaction -#else - __sighandler_t sa_handler; -#endif - - /* Special flags. */ -#if __WORDSIZE == 64 - int __glibc_reserved0; -#endif - int sa_flags; - - /* Additional set of signals to be blocked. */ - __sigset_t sa_mask; - }; - -/* Bits in `sa_flags'. */ - -#define SA_NOCLDSTOP 0x00000008 /* Don't send SIGCHLD when children stop. */ -#define SA_NOCLDWAIT 0x00000080 /* Don't create zombie on child death. */ -#define SA_SIGINFO 0x00000010 /* Invoke signal-catching function with - three arguments instead of one. */ -#if defined __USE_UNIX98 || defined __USE_MISC -# define SA_ONSTACK 0x00000001 /* Use signal stack by using `sa_restorer'. */ -#endif -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 -# define SA_RESETHAND 0x00000004 /* Reset to SIG_DFL on entry to handler. */ -# define SA_NODEFER 0x00000020 /* Don't automatically block the signal - when its handler is being executed. */ -# define SA_RESTART 0x00000040 /* Restart syscall on signal return. */ -#endif -#ifdef __USE_MISC -# define SA_INTERRUPT 0x20000000 /* Historic no-op. */ - -/* Some aliases for the SA_ constants. */ -# define SA_NOMASK SA_NODEFER -# define SA_ONESHOT SA_RESETHAND -# define SA_STACK SA_ONSTACK -#endif - -/* Values for the HOW argument to `sigprocmask'. */ -#define SIG_BLOCK 0 /* for blocking signals */ -#define SIG_UNBLOCK 1 /* for unblocking signals */ -#define SIG_SETMASK 2 /* for setting the signal mask */ diff --git a/sysdeps/unix/sysv/linux/hppa/bits/signalfd.h b/sysdeps/unix/sysv/linux/hppa/bits/signalfd.h deleted file mode 100644 index 34bf6d6bf3..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/signalfd.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SIGNALFD_H -# error "Never use directly; include instead." -#endif - -/* Flags for signalfd. */ -enum - { - SFD_CLOEXEC = 010000000, -#define SFD_CLOEXEC SFD_CLOEXEC - SFD_NONBLOCK = 00200004 /* HPUX has separate NDELAY & NONBLOCK */ -#define SFD_NONBLOCK SFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/hppa/bits/signum.h b/sysdeps/unix/sysv/linux/hppa/bits/signum.h deleted file mode 100644 index 20c0b60c9f..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/signum.h +++ /dev/null @@ -1,89 +0,0 @@ -/* Signal number definitions. Linux/HPPA version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifdef _SIGNAL_H - -/* Fake signal functions. */ -#define SIG_ERR ((__sighandler_t) -1) /* Error return. */ -#define SIG_DFL ((__sighandler_t) 0) /* Default action. */ -#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */ - -#ifdef __USE_XOPEN -# define SIG_HOLD ((__sighandler_t) 2) /* Add signal to hold mask. */ -#endif - - -/* Signals. */ -#define SIGHUP 1 /* Hangup (POSIX). */ -#define SIGINT 2 /* Interrupt (ANSI). */ -#define SIGQUIT 3 /* Quit (POSIX). */ -#define SIGILL 4 /* Illegal instruction (ANSI). */ -#define SIGTRAP 5 /* Trace trap (POSIX). */ -#define SIGABRT 6 /* Abort (ANSI). */ -#define SIGIOT 6 /* IOT trap (4.2 BSD). */ -#define SIGSTKFLT 7 /* Stack fault. */ -#define SIGFPE 8 /* Floating-point exception (ANSI). */ -#define SIGKILL 9 /* Kill, unblockable (POSIX). */ -#define SIGBUS 10 /* BUS error (4.2 BSD). */ -#define SIGSEGV 11 /* Segmentation violation (ANSI). */ -#define SIGXCPU 12 /* CPU limit exceeded (4.2 BSD). */ -#define SIGPIPE 13 /* Broken pipe (POSIX). */ -#define SIGALRM 14 /* Alarm clock (POSIX). */ -#define SIGTERM 15 /* Termination (ANSI). */ -#define SIGUSR1 16 /* User-defined signal 1 (POSIX). */ -#define SIGUSR2 17 /* User-defined signal 2 (POSIX). */ -#define SIGCLD SIGCHLD /* Same as SIGCHLD (System V). */ -#define SIGCHLD 18 /* Child status has changed (POSIX). */ -#define SIGPWR 19 /* Power failure restart (System V). */ -#define SIGVTALRM 20 /* Virtual alarm clock (4.2 BSD). */ -#define SIGPROF 21 /* Profiling alarm clock (4.2 BSD). */ -#define SIGPOLL SIGIO /* Pollable event occurred (System V). */ -#define SIGIO 22 /* I/O now possible (4.2 BSD). */ -#define SIGWINCH 23 /* Window size change (4.3 BSD, Sun). */ -#define SIGSTOP 24 /* Stop, unblockable (POSIX). */ -#define SIGTSTP 25 /* Keyboard stop (POSIX). */ -#define SIGCONT 26 /* Continue (POSIX). */ -#define SIGTTIN 27 /* Background read from tty (POSIX). */ -#define SIGTTOU 28 /* Background write to tty (POSIX). */ -#define SIGURG 29 /* Urgent condition on socket (4.2 BSD). */ -#define SIGXFSZ 30 /* File size limit exceeded (4.2 BSD). */ -#define SIGSYS 31 /* Bad system call. */ -#define SIGUNUSED 31 - -#define _NSIG 65 /* Biggest signal number + 1 - (including real-time signals). */ - -#define SIGRTMIN (__libc_current_sigrtmin ()) -#define SIGRTMAX (__libc_current_sigrtmax ()) - -/* These are the hard limits of the kernel. These values should not be - used directly at user level. */ -/* In the Linux kernel version 3.17, and glibc 2.21, the signal numbers - were rearranged in order to make hppa like every other arch. Previously - we started __SIGRTMIN at 37, and that meant several pieces of important - software, including systemd, would fail to build. To support systemd we - removed SIGEMT and SIGLOST, and rearranged the others according to - expected values. This is technically an ABI incompatible change, but - because zero applications use SIGSTKFLT, SIGXCPU, SIGXFSZ and SIGSYS - nothing broke. Nothing uses SIGEMT and SIGLOST, and they were present - for HPUX compatibility which is no longer supported. Thus because - nothing breaks we don't do any compatibility work here. */ -#define __SIGRTMIN 32 /* Kernel > 3.17. */ -#define __SIGRTMAX (_NSIG - 1) - -#endif /* included. */ diff --git a/sysdeps/unix/sysv/linux/hppa/bits/socket_type.h b/sysdeps/unix/sysv/linux/hppa/bits/socket_type.h deleted file mode 100644 index 8c99f2116f..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/socket_type.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Define enum __socket_type for Linux/HP-PARISC. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SOCKET_H -# error "Never include directly; use instead." -#endif - -/* Types of sockets. */ -enum __socket_type -{ - SOCK_STREAM = 1, /* Sequenced, reliable, connection-based - byte streams. */ -#define SOCK_STREAM SOCK_STREAM - SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams - of fixed maximum length. */ -#define SOCK_DGRAM SOCK_DGRAM - SOCK_RAW = 3, /* Raw protocol interface. */ -#define SOCK_RAW SOCK_RAW - SOCK_RDM = 4, /* Reliably-delivered messages. */ -#define SOCK_RDM SOCK_RDM - SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based, - datagrams of fixed maximum length. */ -#define SOCK_SEQPACKET SOCK_SEQPACKET - SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */ -#define SOCK_DCCP SOCK_DCCP - SOCK_PACKET = 10, /* Linux specific way of getting packets - at the dev level. For writing rarp and - other similar things on the user level. */ -#define SOCK_PACKET SOCK_PACKET - - /* Flags to be ORed into the type parameter of socket and socketpair and - used for the flags parameter of paccept. */ - - SOCK_CLOEXEC = 010000000, /* Atomically set close-on-exec flag for the - new descriptor(s). */ -#define SOCK_CLOEXEC SOCK_CLOEXEC - SOCK_NONBLOCK = 0x40000000 /* Atomically mark descriptor(s) as - non-blocking. */ -#define SOCK_NONBLOCK SOCK_NONBLOCK -}; diff --git a/sysdeps/unix/sysv/linux/hppa/bits/timerfd.h b/sysdeps/unix/sysv/linux/hppa/bits/timerfd.h deleted file mode 100644 index 2a62c980af..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/timerfd.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_TIMERFD_H -# error "Never use directly; include instead." -#endif - -/* Bits to be set in the FLAGS parameter of `timerfd_create'. */ -enum - { - TFD_CLOEXEC = 010000000, -#define TFD_CLOEXEC TFD_CLOEXEC - TFD_NONBLOCK = 000200004 /* HPUX has separate NDELAY & NONBLOCK */ -#define TFD_NONBLOCK TFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/hppa/brk.c b/sysdeps/unix/sysv/linux/hppa/brk.c deleted file mode 100644 index f500ab419f..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/brk.c +++ /dev/null @@ -1,41 +0,0 @@ -/* brk system call for Linux/HPPA. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -int -__brk (void *addr) -{ - void *newbrk; - - __curbrk = newbrk = (void *) INLINE_SYSCALL (brk, 1, addr); - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/hppa/c++-types.data b/sysdeps/unix/sysv/linux/hppa/c++-types.data deleted file mode 100644 index fde53bf337..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:i -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/hppa/clone.S b/sysdeps/unix/sysv/linux/hppa/clone.S deleted file mode 100644 index d36b302199..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/clone.S +++ /dev/null @@ -1,161 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000. - Based on the Alpha version by Richard Henderson , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#include -#define _ERRNO_H 1 -#include -#include - -/* Non-thread code calls __clone with the following parameters: - int clone(int (*fn)(void *arg), - void *child_stack, - int flags, - void *arg) - - NPTL Code will call __clone with the following parameters: - int clone(int (*fn)(void *arg), - void *child_stack, - int flags, - void *arg, - int *parent_tidptr, - struct user_desc *newtls, - int *child_pidptr) - - The code should not mangle the extra input registers. - Syscall expects: Input to __clone: - 4(r25) - function pointer (r26, arg0) - 0(r25) - argument (r23, arg3) - r26 - clone flags. (r24, arg2) - r25+64 - user stack pointer. (r25, arg1) - r24 - parent tid pointer. (stack - 52) - r23 - struct user_desc newtls pointer. (stack - 56) - r22 - child tid pointer. (stack - 60) - r20 - clone syscall number (constant) - - Return: - - On success the thread ID of the child process is returend in - the callers context. - On error return -1, and set errno to the value returned by - the syscall. - */ - - .text -ENTRY(__clone) - /* Prologue */ - stwm %r4, 64(%sp) - stw %sp, -4(%sp) -#ifdef PIC - stw %r19, -32(%sp) -#endif - - /* Sanity check arguments. */ - comib,=,n 0, %arg0, .LerrorSanity /* no NULL function pointers */ - comib,=,n 0, %arg1, .LerrorSanity /* no NULL stack pointers */ - - /* Save the function pointer, arg, and flags on the new stack. */ - stwm %r26, 64(%r25) - stw %r23, -60(%r25) - stw %r24, -56(%r25) - /* Clone arguments are (int flags, void * child_stack) */ - copy %r24, %r26 /* flags are first */ - /* User stack pointer is in the correct register already */ - - /* Load args from stack... */ - ldw -116(%sp), %r24 /* Load parent_tidptr */ - ldw -120(%sp), %r23 /* Load newtls */ - ldw -124(%sp), %r22 /* Load child_tidptr */ - - /* Save the PIC register. */ -#ifdef PIC - copy %r19, %r4 /* parent */ -#endif - - /* Do the system call */ - ble 0x100(%sr2, %r0) - ldi __NR_clone, %r20 - - ldi -4096, %r1 - comclr,>>= %r1, %ret0, %r0 /* Note: unsigned compare. */ - b,n .LerrorRest - - /* Restore the PIC register. */ -#ifdef PIC - copy %r4, %r19 /* parent */ -#endif - - comib,=,n 0, %ret0, .LthreadStart - - /* Successful return from the parent - No need to restore the PIC register, - since we return immediately. */ - - ldw -84(%sp), %rp - bv %r0(%rp) - ldwm -64(%sp), %r4 - -.LerrorRest: - /* Something bad happened -- no child created */ - bl __syscall_error, %rp - sub %r0, %ret0, %arg0 - ldw -84(%sp), %rp - /* Return after setting errno, ret0 is set to -1 by __syscall_error. */ - bv %r0(%rp) - ldwm -64(%sp), %r4 - -.LerrorSanity: - /* Sanity checks failed, return -1, and set errno to EINVAL. */ - bl __syscall_error, %rp - ldi EINVAL, %arg0 - ldw -84(%sp), %rp - bv %r0(%rp) - ldwm -64(%sp), %r4 - -.LthreadStart: - /* Load up the arguments. */ - ldw -60(%sp), %arg0 - ldw -64(%sp), %r22 - - /* $$dyncall fixes child's PIC register */ - - /* Call the user's function */ -#ifdef PIC - copy %r19, %r4 -#endif - bl $$dyncall, %r31 - copy %r31, %rp -#ifdef PIC - copy %r4, %r19 -#endif - /* The call to _exit needs saved r19. */ - bl _exit, %rp - copy %ret0, %arg0 - - /* We should not return from _exit. - We do not restore r4, or the stack state. */ - iitlbp %r0, (%sr0, %r0) - -PSEUDO_END(__clone) - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/hppa/fcntl.c b/sysdeps/unix/sysv/linux/hppa/fcntl.c deleted file mode 100644 index ea951bc4f9..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/fcntl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/hppa/fxstat.c b/sysdeps/unix/sysv/linux/hppa/fxstat.c deleted file mode 100644 index 4f219f0b9d..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/fxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/hppa/fxstatat.c b/sysdeps/unix/sysv/linux/hppa/fxstatat.c deleted file mode 100644 index 0f8b3135d8..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/fxstatat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/hppa/getcontext.S b/sysdeps/unix/sysv/linux/hppa/getcontext.S deleted file mode 100644 index 6f52f2149d..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/getcontext.S +++ /dev/null @@ -1,165 +0,0 @@ -/* Get current user context. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Helge Deller , 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#include "ucontext_i.h" - - - /* Trampoline function. Non-standard calling ABI. */ - /* Can not use ENTRY(__getcontext_ret) here. */ - .type __getcontext_ret, @function - .hidden __getcontext_ret -__getcontext_ret: - .proc - .callinfo FRAME=0,NO_CALLS - /* r26-r23 contain original r3-r6, but because setcontext - does not reload r3-r6 (it's using them as temporaries) - we must save them elsewhere and swap them back in. */ - copy %r23, %r3 - copy %r24, %r4 - copy %r25, %r5 - copy %r26, %r6 - /* r20 contains original return pointer. */ - bv 0(%r20) - copy %r0, %ret0 - .procend - .size __getcontext_ret, .-__getcontext_ret - - -ENTRY(__getcontext) - /* Save the registers. */ - stw %r0, oR0(%r26) - stw %r1, oR1(%r26) - /* stw %r2, oR2(%r26) - used for trampoline. */ - stw %r3, oR3(%r26) - stw %r4, oR4(%r26) - stw %r5, oR5(%r26) - stw %r6, oR6(%r26) - stw %r7, oR7(%r26) - stw %r8, oR8(%r26) - stw %r9, oR9(%r26) - stw %r10, oR10(%r26) - stw %r11, oR11(%r26) - stw %r12, oR12(%r26) - stw %r13, oR13(%r26) - stw %r14, oR14(%r26) - stw %r15, oR15(%r26) - stw %r16, oR16(%r26) - stw %r17, oR17(%r26) - stw %r18, oR18(%r26) - stw %r19, oR19(%r26) - /* stw %r20, oR20(%r26) - used for trampoline. */ - stw %r21, oR21(%r26) - stw %r22, oR22(%r26) - /* stw %r23, oR23(%r26) - used for trampoline. */ - /* stw %r24, oR24(%r26) - used for trampoline. */ - /* stw %r25, oR25(%r26) - used for trampoline. */ - /* stw %r26, oR26(%r26) - used for trampoline. */ - stw %r27, oR27(%r26) - stw %r28, oR28(%r26) - stw %r29, oR29(%r26) - stw %sp, oR30(%r26) - stw %r31, oR31(%r26) - - stw %r0, oUC_FLAGS(%r26) - /* stw %r0, oUC_LINK(%r26) - Do not overwrite. */ - stw %sp, oSS_SP(%r26) - stw %r0, oSS_FLAGS(%r26) - stw %r0, oSS_SIZE(%r26) - - stw %r0, oSC_FLAGS(%r26) - - stw %r0, oIASQ0(%r26) - stw %r0, oIASQ1(%r26) - stw %r0, oIAOQ0(%r26) - stw %r0, oIAOQ1(%r26) - stw %r0, oSAR(%r26) /* used as flag in swapcontext(). */ - - - /* Store floating-point regs. */ - ldo oFPREGS0(%r26),%r1 - fstds,ma %fr0, 8(%r1) - fstds,ma %fr1, 8(%r1) - fstds,ma %fr2, 8(%r1) - fstds,ma %fr3, 8(%r1) - fstds,ma %fr4, 8(%r1) - fstds,ma %fr5, 8(%r1) - fstds,ma %fr6, 8(%r1) - fstds,ma %fr7, 8(%r1) - fstds,ma %fr8, 8(%r1) - fstds,ma %fr9, 8(%r1) - fstds,ma %fr10, 8(%r1) - fstds,ma %fr11, 8(%r1) - fstds,ma %fr12, 8(%r1) - fstds,ma %fr13, 8(%r1) - fstds,ma %fr14, 8(%r1) - fstds,ma %fr15, 8(%r1) - fstds,ma %fr16, 8(%r1) - fstds,ma %fr17, 8(%r1) - fstds,ma %fr18, 8(%r1) - fstds,ma %fr19, 8(%r1) - fstds,ma %fr20, 8(%r1) - fstds,ma %fr21, 8(%r1) - fstds,ma %fr22, 8(%r1) - fstds,ma %fr23, 8(%r1) - fstds,ma %fr24, 8(%r1) - fstds,ma %fr25, 8(%r1) - fstds,ma %fr26, 8(%r1) - fstds,ma %fr27, 8(%r1) - fstds,ma %fr28, 8(%r1) - fstds,ma %fr29, 8(%r1) - fstds,ma %fr30, 8(%r1) - fstds %fr31, 0(%r1) - - /* Prologue */ - stwm %r4, 64(%sp) -#ifdef PIC - stw %r19, -32(%sp) -#endif - - /* Set up the trampoline registers. - r20, r23, r24, r25, r26 and r2 are clobbered - by call to getcontext() anyway. Reuse them. */ - stw %r2, oR20(%r26) - stw %r3, oR23(%r26) - stw %r4, oR24(%r26) - stw %r5, oR25(%r26) - stw %r6, oR26(%r26) - ldil L%__getcontext_ret, %r1 - ldo R%__getcontext_ret(%r1), %r1 - stw %r1, oR2(%r26) - - /* Save the current signal mask. */ - /* sigprocmask(SIG_BLOCK, NULL, &ucp->uc_sigmask); */ - ldo oSIGMASK(%r26), %r24 - copy %r0, %r25 - bl sigprocmask, %r2 - ldi SIG_BLOCK, %r26 - - /* Epilogue */ - ldw -84(%sp), %r2 -#ifdef PIC - ldw -96(%sp), %r19 -#endif - bv %r0(%r2) - ldwm -64(%sp), %r4 -END(__getcontext) - -weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/hppa/getdents64.c b/sysdeps/unix/sysv/linux/hppa/getdents64.c deleted file mode 100644 index 0c75fb5a06..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/getdents64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/hppa/internaltypes.h b/sysdeps/unix/sysv/linux/hppa/internaltypes.h deleted file mode 100644 index d6496579da..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/internaltypes.h +++ /dev/null @@ -1,84 +0,0 @@ -#include_next -#ifndef _INTERNAL_TYPES_H_HPPA_ -#define _INTERNAL_TYPES_H_HPPA_ 1 -#include - -/* In GLIBC 2.10 HPPA switched from Linuxthreads to NPTL, and in order -to maintain ABI compatibility with pthread_cond_t, some care had to be -taken. - -The NPTL pthread_cond_t grew in size. When HPPA switched to NPTL, we -dropped the use of ldcw, and switched to the kernel helper routine for -compare-and-swap. This allowed HPPA to use the 4-word 16-byte aligned -lock words, and alignment words to store the additional pthread_cond_t -data. Once organized properly the new NPTL pthread_cond_t was 1 word -smaller than the Linuxthreads version. - -However, we were faced with the case that users may have initialized the -pthread_cond_t with PTHREAD_COND_INITIALIZER. In this case, the first -four words were set to one, and must be cleared before any NPTL code -used these words. - -We didn't want to use LDCW, because it continues to be a source of bugs -when applications memset pthread_cond_t to all zeroes by accident. This -works on all other architectures where lock words are unlocked at zero. -Remember that because of the semantics of LDCW, a locked word is set to -zero, and an unlocked word is set to 1. - -Instead we used atomic_compare_and_exchange_val_acq, but we couldn't use -this on any of the pthread_cond_t words, otherwise it might interfere -with the current operation of the structure. To solve this problem we -used the left over word. - -If the stucture was initialized by a legacy Linuxthread -PTHREAD_COND_INITIALIZER it contained a 1, and this indicates that the -structure requires zeroing for NPTL. The first thread to come upon a -pthread_cond_t with a 1 in the __initializer field, will -compare-and-swap the value, placing a 2 there which will cause all other -threads using the same pthread_cond_t to wait for the completion of the -initialization. Lastly, we use a store (with memory barrier) to change -__initializer from 2 to 0. Note that the store is strongly ordered, but -we use the PA 1.1 compatible form which is ",ma" with zero offset. - -In the future, when the application is recompiled with NPTL -PTHREAD_COND_INITIALIZER it will be a quick compare-and-swap, which -fails because __initializer is zero, and the structure will be used as -is correctly. */ - -#define cond_compat_clear(var) \ -({ \ - int tmp = 0; \ - var->__data.__wseq = 0; \ - var->__data.__signals_sent = 0; \ - var->__data.__confirmed = 0; \ - var->__data.__generation = 0; \ - var->__data.__mutex = NULL; \ - var->__data.__quiescence_waiters = 0; \ - var->__data.__clockid = 0; \ - /* Clear __initializer last, to indicate initialization is done. */ \ - /* This synchronizes-with the acquire load below. */ \ - atomic_store_release (&var->__data.__initializer, 0); \ -}) - -#define cond_compat_check_and_clear(var) \ -({ \ - int v; \ - int *value = &var->__data.__initializer; \ - /* This synchronizes-with the release store above. */ \ - while ((v = atomic_load_acquire (value)) != 0) \ - { \ - if (v == 1 \ - /* Relaxed MO is fine; it only matters who's first. */ \ - && atomic_compare_exchange_acquire_weak_relaxed (value, 1, 2)) \ - { \ - /* We're first; initialize structure. */ \ - cond_compat_clear (var); \ - break; \ - } \ - else \ - /* Yield before we re-check initialization status. */ \ - sched_yield (); \ - } \ -}) - -#endif diff --git a/sysdeps/unix/sysv/linux/hppa/ipc_priv.h b/sysdeps/unix/sysv/linux/hppa/ipc_priv.h deleted file mode 100644 index d880f5029a..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/ipc_priv.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Old SysV permission definition for Linux. Hppa version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include /* For __key_t */ - -#define __IPC_64 0x0 diff --git a/sysdeps/unix/sysv/linux/hppa/kernel-features.h b/sysdeps/unix/sysv/linux/hppa/kernel-features.h deleted file mode 100644 index 0e73a5c0df..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/kernel-features.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -/* Support for the utimes syscall was added in 3.14. */ -#if __LINUX_KERNEL_VERSION >= 0x030e00 -# define __ASSUME_UTIMES 1 -#endif - -#include_next - -#define __ASSUME_RECV_SYSCALL 1 -#define __ASSUME_SEND_SYSCALL 1 diff --git a/sysdeps/unix/sysv/linux/hppa/kernel_sigaction.h b/sysdeps/unix/sysv/linux/hppa/kernel_sigaction.h deleted file mode 100644 index af048cbe7d..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/kernel_sigaction.h +++ /dev/null @@ -1,18 +0,0 @@ -/* We have a separate header file here because we do not support - SA_RESTORER on hppa. */ - -/* This is the sigaction struction from the Linux 2.1.20 kernel. */ -/* Blah. This is bogus. We don't ever use it. */ -struct old_kernel_sigaction { - __sighandler_t k_sa_handler; - unsigned long sa_mask; - unsigned long sa_flags; -}; - -/* This is the sigaction structure from the Linux 2.1.68 kernel. */ - -struct kernel_sigaction { - __sighandler_t k_sa_handler; - unsigned long sa_flags; - sigset_t sa_mask; -}; diff --git a/sysdeps/unix/sysv/linux/hppa/kernel_stat.h b/sysdeps/unix/sysv/linux/hppa/kernel_stat.h deleted file mode 100644 index a3ac53a1ef..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/kernel_stat.h +++ /dev/null @@ -1,34 +0,0 @@ -/* definition of "struct stat" from the kernel */ -struct kernel_stat { - unsigned long st_dev; /* dev_t is 32 bits on parisc */ - unsigned long st_ino; /* 32 bits */ - unsigned short st_mode; /* 16 bits */ - unsigned short st_nlink; /* 16 bits */ - unsigned short st_reserved1; /* old st_uid */ - unsigned short st_reserved2; /* old st_gid */ - unsigned long st_rdev; - unsigned long st_size; - struct timespec st_atim; - struct timespec st_mtim; - struct timespec st_ctim; - long st_blksize; - long st_blocks; - unsigned long __glibc_reserved1; /* ACL stuff */ - unsigned long __glibc_reserved2; /* network */ - unsigned long __glibc_reserved3; /* network */ - unsigned long __glibc_reserved4; /* cnodes */ - unsigned short __glibc_reserved5; /* netsite */ - short st_fstype; - unsigned long st_realdev; - unsigned short st_basemode; - unsigned short st_spareshort; - unsigned long st_uid; - unsigned long st_gid; - unsigned long st_spare4[3]; -}; - -#define _HAVE_STAT_NSEC -#define _HAVE_STAT64_NSEC - -#define XSTAT_IS_XSTAT64 0 -#define STATFS_IS_STATFS64 0 diff --git a/sysdeps/unix/sysv/linux/hppa/ld.abilist b/sysdeps/unix/sysv/linux/hppa/ld.abilist deleted file mode 100644 index fc1c60ea17..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/ld.abilist +++ /dev/null @@ -1,12 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __libc_stack_end D 0x4 -GLIBC_2.2 _dl_mcount F -GLIBC_2.2 _r_debug D 0x14 -GLIBC_2.2 calloc F -GLIBC_2.2 free F -GLIBC_2.2 malloc F -GLIBC_2.2 realloc F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __tls_get_addr F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __stack_chk_guard D 0x4 diff --git a/sysdeps/unix/sysv/linux/hppa/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/hppa/libBrokenLocale.abilist deleted file mode 100644 index 21343df781..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/hppa/libanl.abilist b/sysdeps/unix/sysv/linux/hppa/libanl.abilist deleted file mode 100644 index edabfb436e..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 gai_cancel F -GLIBC_2.2.3 gai_error F -GLIBC_2.2.3 gai_suspend F -GLIBC_2.2.3 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist deleted file mode 100644 index 24bb7300d3..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++ /dev/null @@ -1,2174 +0,0 @@ -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 fallocate64 F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _sys_errlist D 0x404 -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x404 -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 prlimit F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 _sys_errlist D 0x410 -GLIBC_2.17 _sys_nerr D 0x4 -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 prlimit64 F -GLIBC_2.17 secure_getenv F -GLIBC_2.17 sys_errlist D 0x410 -GLIBC_2.17 sys_nerr D 0x4 -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.19 GLIBC_2.19 A -GLIBC_2.19 fanotify_mark F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _Exit F -GLIBC_2.2 _IO_2_1_stderr_ D 0xa0 -GLIBC_2.2 _IO_2_1_stdin_ D 0xa0 -GLIBC_2.2 _IO_2_1_stdout_ D 0xa0 -GLIBC_2.2 _IO_adjust_column F -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_default_doallocate F -GLIBC_2.2 _IO_default_finish F -GLIBC_2.2 _IO_default_pbackfail F -GLIBC_2.2 _IO_default_uflow F -GLIBC_2.2 _IO_default_xsgetn F -GLIBC_2.2 _IO_default_xsputn F -GLIBC_2.2 _IO_do_write F -GLIBC_2.2 _IO_doallocbuf F -GLIBC_2.2 _IO_fclose F -GLIBC_2.2 _IO_fdopen F -GLIBC_2.2 _IO_feof F -GLIBC_2.2 _IO_ferror F -GLIBC_2.2 _IO_fflush F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_fgets F -GLIBC_2.2 _IO_file_attach F -GLIBC_2.2 _IO_file_close F -GLIBC_2.2 _IO_file_close_it F -GLIBC_2.2 _IO_file_doallocate F -GLIBC_2.2 _IO_file_finish F -GLIBC_2.2 _IO_file_fopen F -GLIBC_2.2 _IO_file_init F -GLIBC_2.2 _IO_file_jumps D 0x54 -GLIBC_2.2 _IO_file_open F -GLIBC_2.2 _IO_file_overflow F -GLIBC_2.2 _IO_file_read F -GLIBC_2.2 _IO_file_seek F -GLIBC_2.2 _IO_file_seekoff F -GLIBC_2.2 _IO_file_setbuf F -GLIBC_2.2 _IO_file_stat F -GLIBC_2.2 _IO_file_sync F -GLIBC_2.2 _IO_file_underflow F -GLIBC_2.2 _IO_file_write F -GLIBC_2.2 _IO_file_xsputn F -GLIBC_2.2 _IO_flockfile F -GLIBC_2.2 _IO_flush_all F -GLIBC_2.2 _IO_flush_all_linebuffered F -GLIBC_2.2 _IO_fopen F -GLIBC_2.2 _IO_fprintf F -GLIBC_2.2 _IO_fputs F -GLIBC_2.2 _IO_fread F -GLIBC_2.2 _IO_free_backup_area F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_ftell F -GLIBC_2.2 _IO_ftrylockfile F -GLIBC_2.2 _IO_funlockfile F -GLIBC_2.2 _IO_fwrite F -GLIBC_2.2 _IO_getc F -GLIBC_2.2 _IO_getline F -GLIBC_2.2 _IO_getline_info F -GLIBC_2.2 _IO_gets F -GLIBC_2.2 _IO_init F -GLIBC_2.2 _IO_init_marker F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_link_in F -GLIBC_2.2 _IO_list_all D 0x4 -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_marker_delta F -GLIBC_2.2 _IO_marker_difference F -GLIBC_2.2 _IO_padn F -GLIBC_2.2 _IO_peekc_locked F -GLIBC_2.2 _IO_popen F -GLIBC_2.2 _IO_printf F -GLIBC_2.2 _IO_proc_close F -GLIBC_2.2 _IO_proc_open F -GLIBC_2.2 _IO_putc F -GLIBC_2.2 _IO_puts F -GLIBC_2.2 _IO_remove_marker F -GLIBC_2.2 _IO_seekmark F -GLIBC_2.2 _IO_seekoff F -GLIBC_2.2 _IO_seekpos F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_setb F -GLIBC_2.2 _IO_setbuffer F -GLIBC_2.2 _IO_setvbuf F -GLIBC_2.2 _IO_sgetn F -GLIBC_2.2 _IO_sprintf F -GLIBC_2.2 _IO_sputbackc F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sscanf F -GLIBC_2.2 _IO_str_init_readonly F -GLIBC_2.2 _IO_str_init_static F -GLIBC_2.2 _IO_str_overflow F -GLIBC_2.2 _IO_str_pbackfail F -GLIBC_2.2 _IO_str_seekoff F -GLIBC_2.2 _IO_str_underflow F -GLIBC_2.2 _IO_sungetc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_get_mode F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_un_link F -GLIBC_2.2 _IO_ungetc F -GLIBC_2.2 _IO_unsave_markers F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_vfprintf F -GLIBC_2.2 _IO_vfscanf F -GLIBC_2.2 _IO_vsprintf F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0x54 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 __adjtimex F -GLIBC_2.2 __after_morecore_hook D 0x4 -GLIBC_2.2 __argz_count F -GLIBC_2.2 __argz_next F -GLIBC_2.2 __argz_stringify F -GLIBC_2.2 __asprintf F -GLIBC_2.2 __assert F -GLIBC_2.2 __assert_fail F -GLIBC_2.2 __assert_perror_fail F -GLIBC_2.2 __backtrace F -GLIBC_2.2 __backtrace_symbols F -GLIBC_2.2 __backtrace_symbols_fd F -GLIBC_2.2 __bsd_getpgrp F -GLIBC_2.2 __bzero F -GLIBC_2.2 __check_rhosts_file D 0x4 -GLIBC_2.2 __clone F -GLIBC_2.2 __close F -GLIBC_2.2 __clz_tab D 0x100 -GLIBC_2.2 __cmsg_nxthdr F -GLIBC_2.2 __connect F -GLIBC_2.2 __ctype32_b D 0x4 -GLIBC_2.2 __ctype32_tolower D 0x4 -GLIBC_2.2 __ctype32_toupper D 0x4 -GLIBC_2.2 __ctype_b D 0x4 -GLIBC_2.2 __ctype_get_mb_cur_max F -GLIBC_2.2 __ctype_tolower D 0x4 -GLIBC_2.2 __ctype_toupper D 0x4 -GLIBC_2.2 __curbrk D 0x4 -GLIBC_2.2 __cxa_atexit F -GLIBC_2.2 __cxa_finalize F -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __daylight D 0x4 -GLIBC_2.2 __dcgettext F -GLIBC_2.2 __default_morecore F -GLIBC_2.2 __dgettext F -GLIBC_2.2 __dup2 F -GLIBC_2.2 __duplocale F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __environ D 0x4 -GLIBC_2.2 __errno_location F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __fcntl F -GLIBC_2.2 __ffs F -GLIBC_2.2 __finite F -GLIBC_2.2 __finitef F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fork F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpu_control D 0x4 -GLIBC_2.2 __fpurge F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __free_hook D 0x4 -GLIBC_2.2 __freelocale F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getdelim F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __getpagesize F -GLIBC_2.2 __getpgid F -GLIBC_2.2 __getpid F -GLIBC_2.2 __gettimeofday F -GLIBC_2.2 __gmtime_r F -GLIBC_2.2 __h_errno_location F -GLIBC_2.2 __isalnum_l F -GLIBC_2.2 __isalpha_l F -GLIBC_2.2 __isascii_l F -GLIBC_2.2 __isblank_l F -GLIBC_2.2 __iscntrl_l F -GLIBC_2.2 __isdigit_l F -GLIBC_2.2 __isgraph_l F -GLIBC_2.2 __isinf F -GLIBC_2.2 __isinff F -GLIBC_2.2 __islower_l F -GLIBC_2.2 __isnan F -GLIBC_2.2 __isnanf F -GLIBC_2.2 __isprint_l F -GLIBC_2.2 __ispunct_l F -GLIBC_2.2 __isspace_l F -GLIBC_2.2 __isupper_l F -GLIBC_2.2 __iswalnum_l F -GLIBC_2.2 __iswalpha_l F -GLIBC_2.2 __iswblank_l F -GLIBC_2.2 __iswcntrl_l F -GLIBC_2.2 __iswctype F -GLIBC_2.2 __iswctype_l F -GLIBC_2.2 __iswdigit_l F -GLIBC_2.2 __iswgraph_l F -GLIBC_2.2 __iswlower_l F -GLIBC_2.2 __iswprint_l F -GLIBC_2.2 __iswpunct_l F -GLIBC_2.2 __iswspace_l F -GLIBC_2.2 __iswupper_l F -GLIBC_2.2 __iswxdigit_l F -GLIBC_2.2 __isxdigit_l F -GLIBC_2.2 __ivaliduser F -GLIBC_2.2 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.2 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.2 __key_gendes_LOCAL D 0x4 -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_calloc F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __libc_free F -GLIBC_2.2 __libc_freeres F -GLIBC_2.2 __libc_init_first F -GLIBC_2.2 __libc_mallinfo F -GLIBC_2.2 __libc_malloc F -GLIBC_2.2 __libc_mallopt F -GLIBC_2.2 __libc_memalign F -GLIBC_2.2 __libc_pvalloc F -GLIBC_2.2 __libc_realloc F -GLIBC_2.2 __libc_sa_len F -GLIBC_2.2 __libc_start_main F -GLIBC_2.2 __libc_valloc F -GLIBC_2.2 __lseek F -GLIBC_2.2 __lxstat F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __malloc_hook D 0x4 -GLIBC_2.2 __malloc_initialize_hook D 0x4 -GLIBC_2.2 __mbrlen F -GLIBC_2.2 __mbrtowc F -GLIBC_2.2 __memalign_hook D 0x4 -GLIBC_2.2 __mempcpy F -GLIBC_2.2 __mempcpy_small F -GLIBC_2.2 __monstartup F -GLIBC_2.2 __morecore D 0x4 -GLIBC_2.2 __newlocale F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __nss_configure_lookup F -GLIBC_2.2 __nss_database_lookup F -GLIBC_2.2 __nss_group_lookup F -GLIBC_2.2 __nss_hosts_lookup F -GLIBC_2.2 __nss_next F -GLIBC_2.2 __nss_passwd_lookup F -GLIBC_2.2 __open F -GLIBC_2.2 __open64 F -GLIBC_2.2 __overflow F -GLIBC_2.2 __pipe F -GLIBC_2.2 __poll F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __printf_fp F -GLIBC_2.2 __profile_frequency F -GLIBC_2.2 __progname D 0x4 -GLIBC_2.2 __progname_full D 0x4 -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __rawmemchr F -GLIBC_2.2 __rcmd_errstr D 0x4 -GLIBC_2.2 __read F -GLIBC_2.2 __realloc_hook D 0x4 -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_randomid F -GLIBC_2.2 __res_state F -GLIBC_2.2 __sbrk F -GLIBC_2.2 __sched_get_priority_max F -GLIBC_2.2 __sched_get_priority_min F -GLIBC_2.2 __sched_getparam F -GLIBC_2.2 __sched_getscheduler F -GLIBC_2.2 __sched_setscheduler F -GLIBC_2.2 __sched_yield F -GLIBC_2.2 __secure_getenv F -GLIBC_2.2 __select F -GLIBC_2.2 __send F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __setpgid F -GLIBC_2.2 __sigaction F -GLIBC_2.2 __sigaddset F -GLIBC_2.2 __sigdelset F -GLIBC_2.2 __sigismember F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 __signbitl F -GLIBC_2.2 __sigpause F -GLIBC_2.2 __sigsetjmp F -GLIBC_2.2 __sigsuspend F -GLIBC_2.2 __statfs F -GLIBC_2.2 __stpcpy F -GLIBC_2.2 __stpcpy_small F -GLIBC_2.2 __stpncpy F -GLIBC_2.2 __strcasecmp F -GLIBC_2.2 __strcasecmp_l F -GLIBC_2.2 __strcasestr F -GLIBC_2.2 __strcoll_l F -GLIBC_2.2 __strcpy_small F -GLIBC_2.2 __strcspn_c1 F -GLIBC_2.2 __strcspn_c2 F -GLIBC_2.2 __strcspn_c3 F -GLIBC_2.2 __strdup F -GLIBC_2.2 __strerror_r F -GLIBC_2.2 __strfmon_l F -GLIBC_2.2 __strncasecmp_l F -GLIBC_2.2 __strndup F -GLIBC_2.2 __strpbrk_c2 F -GLIBC_2.2 __strpbrk_c3 F -GLIBC_2.2 __strsep_1c F -GLIBC_2.2 __strsep_2c F -GLIBC_2.2 __strsep_3c F -GLIBC_2.2 __strsep_g F -GLIBC_2.2 __strspn_c1 F -GLIBC_2.2 __strspn_c2 F -GLIBC_2.2 __strspn_c3 F -GLIBC_2.2 __strtod_internal F -GLIBC_2.2 __strtod_l F -GLIBC_2.2 __strtof_internal F -GLIBC_2.2 __strtof_l F -GLIBC_2.2 __strtok_r F -GLIBC_2.2 __strtok_r_1c F -GLIBC_2.2 __strtol_internal F -GLIBC_2.2 __strtol_l F -GLIBC_2.2 __strtold_internal F -GLIBC_2.2 __strtold_l F -GLIBC_2.2 __strtoll_internal F -GLIBC_2.2 __strtoll_l F -GLIBC_2.2 __strtoul_internal F -GLIBC_2.2 __strtoul_l F -GLIBC_2.2 __strtoull_internal F -GLIBC_2.2 __strtoull_l F -GLIBC_2.2 __strverscmp F -GLIBC_2.2 __strxfrm_l F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __sysv_signal F -GLIBC_2.2 __timezone D 0x4 -GLIBC_2.2 __toascii_l F -GLIBC_2.2 __tolower_l F -GLIBC_2.2 __toupper_l F -GLIBC_2.2 __towctrans F -GLIBC_2.2 __towctrans_l F -GLIBC_2.2 __towlower_l F -GLIBC_2.2 __towupper_l F -GLIBC_2.2 __tzname D 0x8 -GLIBC_2.2 __uflow F -GLIBC_2.2 __underflow F -GLIBC_2.2 __vfork F -GLIBC_2.2 __vfscanf F -GLIBC_2.2 __vsnprintf F -GLIBC_2.2 __vsscanf F -GLIBC_2.2 __wait F -GLIBC_2.2 __waitpid F -GLIBC_2.2 __wcscasecmp_l F -GLIBC_2.2 __wcscoll_l F -GLIBC_2.2 __wcsncasecmp_l F -GLIBC_2.2 __wcstod_internal F -GLIBC_2.2 __wcstod_l F -GLIBC_2.2 __wcstof_internal F -GLIBC_2.2 __wcstof_l F -GLIBC_2.2 __wcstol_internal F -GLIBC_2.2 __wcstol_l F -GLIBC_2.2 __wcstold_internal F -GLIBC_2.2 __wcstold_l F -GLIBC_2.2 __wcstoll_internal F -GLIBC_2.2 __wcstoll_l F -GLIBC_2.2 __wcstoul_internal F -GLIBC_2.2 __wcstoul_l F -GLIBC_2.2 __wcstoull_internal F -GLIBC_2.2 __wcstoull_l F -GLIBC_2.2 __wcsxfrm_l F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __wctype_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __write F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xmknod F -GLIBC_2.2 __xpg_basename F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _authenticate F -GLIBC_2.2 _dl_mcount_wrapper F -GLIBC_2.2 _dl_mcount_wrapper_check F -GLIBC_2.2 _environ D 0x4 -GLIBC_2.2 _exit F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _libc_intl_domainname D 0x5 -GLIBC_2.2 _longjmp F -GLIBC_2.2 _mcleanup F -GLIBC_2.2 _mcount F -GLIBC_2.2 _nl_default_dirname D 0x12 -GLIBC_2.2 _nl_domain_bindings D 0x4 -GLIBC_2.2 _nl_msg_cat_cntr D 0x4 -GLIBC_2.2 _null_auth D 0xc -GLIBC_2.2 _obstack D 0x4 -GLIBC_2.2 _obstack_allocated_p F -GLIBC_2.2 _obstack_begin F -GLIBC_2.2 _obstack_begin_1 F -GLIBC_2.2 _obstack_free F -GLIBC_2.2 _obstack_memory_used F -GLIBC_2.2 _obstack_newchunk F -GLIBC_2.2 _res D 0x200 -GLIBC_2.2 _res_hconf D 0x30 -GLIBC_2.2 _rpc_dtablesize F -GLIBC_2.2 _seterr_reply F -GLIBC_2.2 _setjmp F -GLIBC_2.2 _sys_errlist D 0x3f4 -GLIBC_2.2 _sys_nerr D 0x4 -GLIBC_2.2 _sys_siglist D 0x100 -GLIBC_2.2 _tolower F -GLIBC_2.2 _toupper F -GLIBC_2.2 a64l F -GLIBC_2.2 abort F -GLIBC_2.2 abs F -GLIBC_2.2 accept F -GLIBC_2.2 access F -GLIBC_2.2 acct F -GLIBC_2.2 addmntent F -GLIBC_2.2 addseverity F -GLIBC_2.2 adjtime F -GLIBC_2.2 adjtimex F -GLIBC_2.2 advance F -GLIBC_2.2 alarm F -GLIBC_2.2 alphasort F -GLIBC_2.2 alphasort64 F -GLIBC_2.2 argp_err_exit_status D 0x4 -GLIBC_2.2 argp_error F -GLIBC_2.2 argp_failure F -GLIBC_2.2 argp_help F -GLIBC_2.2 argp_parse F -GLIBC_2.2 argp_program_bug_address D 0x4 -GLIBC_2.2 argp_program_version D 0x4 -GLIBC_2.2 argp_program_version_hook D 0x4 -GLIBC_2.2 argp_state_help F -GLIBC_2.2 argp_usage F -GLIBC_2.2 argz_add F -GLIBC_2.2 argz_add_sep F -GLIBC_2.2 argz_append F -GLIBC_2.2 argz_count F -GLIBC_2.2 argz_create F -GLIBC_2.2 argz_create_sep F -GLIBC_2.2 argz_delete F -GLIBC_2.2 argz_extract F -GLIBC_2.2 argz_insert F -GLIBC_2.2 argz_next F -GLIBC_2.2 argz_replace F -GLIBC_2.2 argz_stringify F -GLIBC_2.2 asctime F -GLIBC_2.2 asctime_r F -GLIBC_2.2 asprintf F -GLIBC_2.2 atexit F -GLIBC_2.2 atof F -GLIBC_2.2 atoi F -GLIBC_2.2 atol F -GLIBC_2.2 atoll F -GLIBC_2.2 authdes_create F -GLIBC_2.2 authdes_getucred F -GLIBC_2.2 authdes_pk_create F -GLIBC_2.2 authnone_create F -GLIBC_2.2 authunix_create F -GLIBC_2.2 authunix_create_default F -GLIBC_2.2 backtrace F -GLIBC_2.2 backtrace_symbols F -GLIBC_2.2 backtrace_symbols_fd F -GLIBC_2.2 basename F -GLIBC_2.2 bcmp F -GLIBC_2.2 bcopy F -GLIBC_2.2 bdflush F -GLIBC_2.2 bind F -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 bindresvport F -GLIBC_2.2 bindtextdomain F -GLIBC_2.2 brk F -GLIBC_2.2 bsd_signal F -GLIBC_2.2 bsearch F -GLIBC_2.2 btowc F -GLIBC_2.2 bzero F -GLIBC_2.2 calloc F -GLIBC_2.2 callrpc F -GLIBC_2.2 canonicalize_file_name F -GLIBC_2.2 capget F -GLIBC_2.2 capset F -GLIBC_2.2 catclose F -GLIBC_2.2 catgets F -GLIBC_2.2 catopen F -GLIBC_2.2 cbc_crypt F -GLIBC_2.2 cfgetispeed F -GLIBC_2.2 cfgetospeed F -GLIBC_2.2 cfmakeraw F -GLIBC_2.2 cfree F -GLIBC_2.2 cfsetispeed F -GLIBC_2.2 cfsetospeed F -GLIBC_2.2 cfsetspeed F -GLIBC_2.2 chdir F -GLIBC_2.2 chflags F -GLIBC_2.2 chmod F -GLIBC_2.2 chown F -GLIBC_2.2 chroot F -GLIBC_2.2 clearenv F -GLIBC_2.2 clearerr F -GLIBC_2.2 clearerr_unlocked F -GLIBC_2.2 clnt_broadcast F -GLIBC_2.2 clnt_create F -GLIBC_2.2 clnt_pcreateerror F -GLIBC_2.2 clnt_perrno F -GLIBC_2.2 clnt_perror F -GLIBC_2.2 clnt_spcreateerror F -GLIBC_2.2 clnt_sperrno F -GLIBC_2.2 clnt_sperror F -GLIBC_2.2 clntraw_create F -GLIBC_2.2 clnttcp_create F -GLIBC_2.2 clntudp_bufcreate F -GLIBC_2.2 clntudp_create F -GLIBC_2.2 clntunix_create F -GLIBC_2.2 clock F -GLIBC_2.2 clone F -GLIBC_2.2 close F -GLIBC_2.2 closedir F -GLIBC_2.2 closelog F -GLIBC_2.2 confstr F -GLIBC_2.2 connect F -GLIBC_2.2 copysign F -GLIBC_2.2 copysignf F -GLIBC_2.2 copysignl F -GLIBC_2.2 creat F -GLIBC_2.2 creat64 F -GLIBC_2.2 create_module F -GLIBC_2.2 ctermid F -GLIBC_2.2 ctime F -GLIBC_2.2 ctime_r F -GLIBC_2.2 cuserid F -GLIBC_2.2 daemon F -GLIBC_2.2 daylight D 0x4 -GLIBC_2.2 dcgettext F -GLIBC_2.2 dcngettext F -GLIBC_2.2 delete_module F -GLIBC_2.2 des_setparity F -GLIBC_2.2 dgettext F -GLIBC_2.2 difftime F -GLIBC_2.2 dirfd F -GLIBC_2.2 dirname F -GLIBC_2.2 div F -GLIBC_2.2 dngettext F -GLIBC_2.2 dprintf F -GLIBC_2.2 drand48 F -GLIBC_2.2 drand48_r F -GLIBC_2.2 dup F -GLIBC_2.2 dup2 F -GLIBC_2.2 dysize F -GLIBC_2.2 ecb_crypt F -GLIBC_2.2 ecvt F -GLIBC_2.2 ecvt_r F -GLIBC_2.2 endaliasent F -GLIBC_2.2 endfsent F -GLIBC_2.2 endgrent F -GLIBC_2.2 endhostent F -GLIBC_2.2 endmntent F -GLIBC_2.2 endnetent F -GLIBC_2.2 endnetgrent F -GLIBC_2.2 endprotoent F -GLIBC_2.2 endpwent F -GLIBC_2.2 endrpcent F -GLIBC_2.2 endservent F -GLIBC_2.2 endspent F -GLIBC_2.2 endttyent F -GLIBC_2.2 endusershell F -GLIBC_2.2 endutent F -GLIBC_2.2 endutxent F -GLIBC_2.2 environ D 0x4 -GLIBC_2.2 envz_add F -GLIBC_2.2 envz_entry F -GLIBC_2.2 envz_get F -GLIBC_2.2 envz_merge F -GLIBC_2.2 envz_remove F -GLIBC_2.2 envz_strip F -GLIBC_2.2 erand48 F -GLIBC_2.2 erand48_r F -GLIBC_2.2 err F -GLIBC_2.2 error F -GLIBC_2.2 error_at_line F -GLIBC_2.2 error_message_count D 0x4 -GLIBC_2.2 error_one_per_line D 0x4 -GLIBC_2.2 error_print_progname D 0x4 -GLIBC_2.2 errx F -GLIBC_2.2 ether_aton F -GLIBC_2.2 ether_aton_r F -GLIBC_2.2 ether_hostton F -GLIBC_2.2 ether_line F -GLIBC_2.2 ether_ntoa F -GLIBC_2.2 ether_ntoa_r F -GLIBC_2.2 ether_ntohost F -GLIBC_2.2 euidaccess F -GLIBC_2.2 execl F -GLIBC_2.2 execle F -GLIBC_2.2 execlp F -GLIBC_2.2 execv F -GLIBC_2.2 execve F -GLIBC_2.2 execvp F -GLIBC_2.2 exit F -GLIBC_2.2 fattach F -GLIBC_2.2 fchdir F -GLIBC_2.2 fchflags F -GLIBC_2.2 fchmod F -GLIBC_2.2 fchown F -GLIBC_2.2 fclose F -GLIBC_2.2 fcloseall F -GLIBC_2.2 fcntl F -GLIBC_2.2 fcvt F -GLIBC_2.2 fcvt_r F -GLIBC_2.2 fdatasync F -GLIBC_2.2 fdetach F -GLIBC_2.2 fdopen F -GLIBC_2.2 feof F -GLIBC_2.2 feof_unlocked F -GLIBC_2.2 ferror F -GLIBC_2.2 ferror_unlocked F -GLIBC_2.2 fexecve F -GLIBC_2.2 fflush F -GLIBC_2.2 fflush_unlocked F -GLIBC_2.2 ffs F -GLIBC_2.2 ffsl F -GLIBC_2.2 ffsll F -GLIBC_2.2 fgetc F -GLIBC_2.2 fgetc_unlocked F -GLIBC_2.2 fgetgrent F -GLIBC_2.2 fgetgrent_r F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgetpwent F -GLIBC_2.2 fgetpwent_r F -GLIBC_2.2 fgets F -GLIBC_2.2 fgets_unlocked F -GLIBC_2.2 fgetspent F -GLIBC_2.2 fgetspent_r F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fileno F -GLIBC_2.2 fileno_unlocked F -GLIBC_2.2 finite F -GLIBC_2.2 finitef F -GLIBC_2.2 finitel F -GLIBC_2.2 flock F -GLIBC_2.2 flockfile F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fmtmsg F -GLIBC_2.2 fnmatch F -GLIBC_2.2 fopen F -GLIBC_2.2 fopen64 F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fork F -GLIBC_2.2 fpathconf F -GLIBC_2.2 fprintf F -GLIBC_2.2 fputc F -GLIBC_2.2 fputc_unlocked F -GLIBC_2.2 fputs F -GLIBC_2.2 fputs_unlocked F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fread F -GLIBC_2.2 fread_unlocked F -GLIBC_2.2 free F -GLIBC_2.2 freeaddrinfo F -GLIBC_2.2 freopen F -GLIBC_2.2 freopen64 F -GLIBC_2.2 frexp F -GLIBC_2.2 frexpf F -GLIBC_2.2 frexpl F -GLIBC_2.2 fscanf F -GLIBC_2.2 fseek F -GLIBC_2.2 fseeko F -GLIBC_2.2 fseeko64 F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fstatfs F -GLIBC_2.2 fstatfs64 F -GLIBC_2.2 fstatvfs F -GLIBC_2.2 fstatvfs64 F -GLIBC_2.2 fsync F -GLIBC_2.2 ftell F -GLIBC_2.2 ftello F -GLIBC_2.2 ftello64 F -GLIBC_2.2 ftime F -GLIBC_2.2 ftok F -GLIBC_2.2 ftruncate F -GLIBC_2.2 ftruncate64 F -GLIBC_2.2 ftrylockfile F -GLIBC_2.2 fts_children F -GLIBC_2.2 fts_close F -GLIBC_2.2 fts_open F -GLIBC_2.2 fts_read F -GLIBC_2.2 fts_set F -GLIBC_2.2 ftw F -GLIBC_2.2 ftw64 F -GLIBC_2.2 funlockfile F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwrite F -GLIBC_2.2 fwrite_unlocked F -GLIBC_2.2 fwscanf F -GLIBC_2.2 gai_strerror F -GLIBC_2.2 gcvt F -GLIBC_2.2 get_avphys_pages F -GLIBC_2.2 get_current_dir_name F -GLIBC_2.2 get_kernel_syms F -GLIBC_2.2 get_myaddress F -GLIBC_2.2 get_nprocs F -GLIBC_2.2 get_nprocs_conf F -GLIBC_2.2 get_phys_pages F -GLIBC_2.2 getaddrinfo F -GLIBC_2.2 getaliasbyname F -GLIBC_2.2 getaliasbyname_r F -GLIBC_2.2 getaliasent F -GLIBC_2.2 getaliasent_r F -GLIBC_2.2 getc F -GLIBC_2.2 getc_unlocked F -GLIBC_2.2 getchar F -GLIBC_2.2 getchar_unlocked F -GLIBC_2.2 getcontext F -GLIBC_2.2 getcwd F -GLIBC_2.2 getdate F -GLIBC_2.2 getdate_err D 0x4 -GLIBC_2.2 getdate_r F -GLIBC_2.2 getdelim F -GLIBC_2.2 getdirentries F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getdomainname F -GLIBC_2.2 getdtablesize F -GLIBC_2.2 getegid F -GLIBC_2.2 getenv F -GLIBC_2.2 geteuid F -GLIBC_2.2 getfsent F -GLIBC_2.2 getfsfile F -GLIBC_2.2 getfsspec F -GLIBC_2.2 getgid F -GLIBC_2.2 getgrent F -GLIBC_2.2 getgrent_r F -GLIBC_2.2 getgrgid F -GLIBC_2.2 getgrgid_r F -GLIBC_2.2 getgrnam F -GLIBC_2.2 getgrnam_r F -GLIBC_2.2 getgroups F -GLIBC_2.2 gethostbyaddr F -GLIBC_2.2 gethostbyaddr_r F -GLIBC_2.2 gethostbyname F -GLIBC_2.2 gethostbyname2 F -GLIBC_2.2 gethostbyname2_r F -GLIBC_2.2 gethostbyname_r F -GLIBC_2.2 gethostent F -GLIBC_2.2 gethostent_r F -GLIBC_2.2 gethostid F -GLIBC_2.2 gethostname F -GLIBC_2.2 getitimer F -GLIBC_2.2 getline F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getlogin F -GLIBC_2.2 getlogin_r F -GLIBC_2.2 getmntent F -GLIBC_2.2 getmntent_r F -GLIBC_2.2 getmsg F -GLIBC_2.2 getnameinfo F -GLIBC_2.2 getnetbyaddr F -GLIBC_2.2 getnetbyaddr_r F -GLIBC_2.2 getnetbyname F -GLIBC_2.2 getnetbyname_r F -GLIBC_2.2 getnetent F -GLIBC_2.2 getnetent_r F -GLIBC_2.2 getnetgrent F -GLIBC_2.2 getnetgrent_r F -GLIBC_2.2 getnetname F -GLIBC_2.2 getopt F -GLIBC_2.2 getopt_long F -GLIBC_2.2 getopt_long_only F -GLIBC_2.2 getpagesize F -GLIBC_2.2 getpass F -GLIBC_2.2 getpeername F -GLIBC_2.2 getpgid F -GLIBC_2.2 getpgrp F -GLIBC_2.2 getpid F -GLIBC_2.2 getpmsg F -GLIBC_2.2 getppid F -GLIBC_2.2 getpriority F -GLIBC_2.2 getprotobyname F -GLIBC_2.2 getprotobyname_r F -GLIBC_2.2 getprotobynumber F -GLIBC_2.2 getprotobynumber_r F -GLIBC_2.2 getprotoent F -GLIBC_2.2 getprotoent_r F -GLIBC_2.2 getpt F -GLIBC_2.2 getpublickey F -GLIBC_2.2 getpw F -GLIBC_2.2 getpwent F -GLIBC_2.2 getpwent_r F -GLIBC_2.2 getpwnam F -GLIBC_2.2 getpwnam_r F -GLIBC_2.2 getpwuid F -GLIBC_2.2 getpwuid_r F -GLIBC_2.2 getresgid F -GLIBC_2.2 getresuid F -GLIBC_2.2 getrlimit F -GLIBC_2.2 getrlimit64 F -GLIBC_2.2 getrpcbyname F -GLIBC_2.2 getrpcbyname_r F -GLIBC_2.2 getrpcbynumber F -GLIBC_2.2 getrpcbynumber_r F -GLIBC_2.2 getrpcent F -GLIBC_2.2 getrpcent_r F -GLIBC_2.2 getrpcport F -GLIBC_2.2 getrusage F -GLIBC_2.2 gets F -GLIBC_2.2 getsecretkey F -GLIBC_2.2 getservbyname F -GLIBC_2.2 getservbyname_r F -GLIBC_2.2 getservbyport F -GLIBC_2.2 getservbyport_r F -GLIBC_2.2 getservent F -GLIBC_2.2 getservent_r F -GLIBC_2.2 getsid F -GLIBC_2.2 getsockname F -GLIBC_2.2 getsockopt F -GLIBC_2.2 getspent F -GLIBC_2.2 getspent_r F -GLIBC_2.2 getspnam F -GLIBC_2.2 getspnam_r F -GLIBC_2.2 getsubopt F -GLIBC_2.2 gettext F -GLIBC_2.2 gettimeofday F -GLIBC_2.2 getttyent F -GLIBC_2.2 getttynam F -GLIBC_2.2 getuid F -GLIBC_2.2 getusershell F -GLIBC_2.2 getutent F -GLIBC_2.2 getutent_r F -GLIBC_2.2 getutid F -GLIBC_2.2 getutid_r F -GLIBC_2.2 getutline F -GLIBC_2.2 getutline_r F -GLIBC_2.2 getutmp F -GLIBC_2.2 getutmpx F -GLIBC_2.2 getutxent F -GLIBC_2.2 getutxid F -GLIBC_2.2 getutxline F -GLIBC_2.2 getw F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 getwd F -GLIBC_2.2 glob F -GLIBC_2.2 glob64 F -GLIBC_2.2 glob_pattern_p F -GLIBC_2.2 globfree F -GLIBC_2.2 globfree64 F -GLIBC_2.2 gmtime F -GLIBC_2.2 gmtime_r F -GLIBC_2.2 gnu_get_libc_release F -GLIBC_2.2 gnu_get_libc_version F -GLIBC_2.2 grantpt F -GLIBC_2.2 group_member F -GLIBC_2.2 gsignal F -GLIBC_2.2 gtty F -GLIBC_2.2 h_errlist D 0x14 -GLIBC_2.2 h_nerr D 0x4 -GLIBC_2.2 hasmntopt F -GLIBC_2.2 hcreate F -GLIBC_2.2 hcreate_r F -GLIBC_2.2 hdestroy F -GLIBC_2.2 hdestroy_r F -GLIBC_2.2 herror F -GLIBC_2.2 host2netname F -GLIBC_2.2 hsearch F -GLIBC_2.2 hsearch_r F -GLIBC_2.2 hstrerror F -GLIBC_2.2 htonl F -GLIBC_2.2 htons F -GLIBC_2.2 iconv F -GLIBC_2.2 iconv_close F -GLIBC_2.2 iconv_open F -GLIBC_2.2 if_freenameindex F -GLIBC_2.2 if_indextoname F -GLIBC_2.2 if_nameindex F -GLIBC_2.2 if_nametoindex F -GLIBC_2.2 imaxabs F -GLIBC_2.2 imaxdiv F -GLIBC_2.2 in6addr_any D 0x10 -GLIBC_2.2 in6addr_loopback D 0x10 -GLIBC_2.2 index F -GLIBC_2.2 inet_addr F -GLIBC_2.2 inet_aton F -GLIBC_2.2 inet_lnaof F -GLIBC_2.2 inet_makeaddr F -GLIBC_2.2 inet_netof F -GLIBC_2.2 inet_network F -GLIBC_2.2 inet_nsap_addr F -GLIBC_2.2 inet_nsap_ntoa F -GLIBC_2.2 inet_ntoa F -GLIBC_2.2 inet_ntop F -GLIBC_2.2 inet_pton F -GLIBC_2.2 init_module F -GLIBC_2.2 initgroups F -GLIBC_2.2 initstate F -GLIBC_2.2 initstate_r F -GLIBC_2.2 innetgr F -GLIBC_2.2 insque F -GLIBC_2.2 ioctl F -GLIBC_2.2 iruserok F -GLIBC_2.2 iruserok_af F -GLIBC_2.2 isalnum F -GLIBC_2.2 isalpha F -GLIBC_2.2 isascii F -GLIBC_2.2 isastream F -GLIBC_2.2 isatty F -GLIBC_2.2 isblank F -GLIBC_2.2 iscntrl F -GLIBC_2.2 isdigit F -GLIBC_2.2 isfdtype F -GLIBC_2.2 isgraph F -GLIBC_2.2 isinf F -GLIBC_2.2 isinff F -GLIBC_2.2 isinfl F -GLIBC_2.2 islower F -GLIBC_2.2 isnan F -GLIBC_2.2 isnanf F -GLIBC_2.2 isnanl F -GLIBC_2.2 isprint F -GLIBC_2.2 ispunct F -GLIBC_2.2 isspace F -GLIBC_2.2 isupper F -GLIBC_2.2 iswalnum F -GLIBC_2.2 iswalpha F -GLIBC_2.2 iswblank F -GLIBC_2.2 iswcntrl F -GLIBC_2.2 iswctype F -GLIBC_2.2 iswdigit F -GLIBC_2.2 iswgraph F -GLIBC_2.2 iswlower F -GLIBC_2.2 iswprint F -GLIBC_2.2 iswpunct F -GLIBC_2.2 iswspace F -GLIBC_2.2 iswupper F -GLIBC_2.2 iswxdigit F -GLIBC_2.2 isxdigit F -GLIBC_2.2 jrand48 F -GLIBC_2.2 jrand48_r F -GLIBC_2.2 key_decryptsession F -GLIBC_2.2 key_decryptsession_pk F -GLIBC_2.2 key_encryptsession F -GLIBC_2.2 key_encryptsession_pk F -GLIBC_2.2 key_gendes F -GLIBC_2.2 key_get_conv F -GLIBC_2.2 key_secretkey_is_set F -GLIBC_2.2 key_setnet F -GLIBC_2.2 key_setsecret F -GLIBC_2.2 kill F -GLIBC_2.2 killpg F -GLIBC_2.2 klogctl F -GLIBC_2.2 l64a F -GLIBC_2.2 labs F -GLIBC_2.2 lchown F -GLIBC_2.2 lckpwdf F -GLIBC_2.2 lcong48 F -GLIBC_2.2 lcong48_r F -GLIBC_2.2 ldexp F -GLIBC_2.2 ldexpf F -GLIBC_2.2 ldexpl F -GLIBC_2.2 ldiv F -GLIBC_2.2 lfind F -GLIBC_2.2 link F -GLIBC_2.2 listen F -GLIBC_2.2 llabs F -GLIBC_2.2 lldiv F -GLIBC_2.2 llseek F -GLIBC_2.2 loc1 D 0x4 -GLIBC_2.2 loc2 D 0x4 -GLIBC_2.2 localeconv F -GLIBC_2.2 localtime F -GLIBC_2.2 localtime_r F -GLIBC_2.2 lockf F -GLIBC_2.2 lockf64 F -GLIBC_2.2 locs D 0x4 -GLIBC_2.2 longjmp F -GLIBC_2.2 lrand48 F -GLIBC_2.2 lrand48_r F -GLIBC_2.2 lsearch F -GLIBC_2.2 lseek F -GLIBC_2.2 lseek64 F -GLIBC_2.2 madvise F -GLIBC_2.2 makecontext F -GLIBC_2.2 mallinfo F -GLIBC_2.2 malloc F -GLIBC_2.2 malloc_get_state F -GLIBC_2.2 malloc_set_state F -GLIBC_2.2 malloc_stats F -GLIBC_2.2 malloc_trim F -GLIBC_2.2 malloc_usable_size F -GLIBC_2.2 mallopt F -GLIBC_2.2 mallwatch D 0x4 -GLIBC_2.2 mblen F -GLIBC_2.2 mbrlen F -GLIBC_2.2 mbrtowc F -GLIBC_2.2 mbsinit F -GLIBC_2.2 mbsnrtowcs F -GLIBC_2.2 mbsrtowcs F -GLIBC_2.2 mbstowcs F -GLIBC_2.2 mbtowc F -GLIBC_2.2 mcheck F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 memalign F -GLIBC_2.2 memccpy F -GLIBC_2.2 memchr F -GLIBC_2.2 memcmp F -GLIBC_2.2 memcpy F -GLIBC_2.2 memfrob F -GLIBC_2.2 memmem F -GLIBC_2.2 memmove F -GLIBC_2.2 mempcpy F -GLIBC_2.2 memrchr F -GLIBC_2.2 memset F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdir F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkfifo F -GLIBC_2.2 mkstemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 mktemp F -GLIBC_2.2 mktime F -GLIBC_2.2 mlock F -GLIBC_2.2 mlockall F -GLIBC_2.2 mmap F -GLIBC_2.2 mmap64 F -GLIBC_2.2 modf F -GLIBC_2.2 modff F -GLIBC_2.2 modfl F -GLIBC_2.2 moncontrol F -GLIBC_2.2 monstartup F -GLIBC_2.2 mount F -GLIBC_2.2 mprobe F -GLIBC_2.2 mprotect F -GLIBC_2.2 mrand48 F -GLIBC_2.2 mrand48_r F -GLIBC_2.2 mremap F -GLIBC_2.2 msgctl F -GLIBC_2.2 msgget F -GLIBC_2.2 msgrcv F -GLIBC_2.2 msgsnd F -GLIBC_2.2 msync F -GLIBC_2.2 mtrace F -GLIBC_2.2 munlock F -GLIBC_2.2 munlockall F -GLIBC_2.2 munmap F -GLIBC_2.2 muntrace F -GLIBC_2.2 nanosleep F -GLIBC_2.2 netname2host F -GLIBC_2.2 netname2user F -GLIBC_2.2 nfsservctl F -GLIBC_2.2 nftw F -GLIBC_2.2 nftw64 F -GLIBC_2.2 ngettext F -GLIBC_2.2 nice F -GLIBC_2.2 nl_langinfo F -GLIBC_2.2 nrand48 F -GLIBC_2.2 nrand48_r F -GLIBC_2.2 ntohl F -GLIBC_2.2 ntohs F -GLIBC_2.2 ntp_adjtime F -GLIBC_2.2 ntp_gettime F -GLIBC_2.2 obstack_alloc_failed_handler D 0x4 -GLIBC_2.2 obstack_exit_failure D 0x4 -GLIBC_2.2 obstack_free F -GLIBC_2.2 obstack_printf F -GLIBC_2.2 obstack_vprintf F -GLIBC_2.2 on_exit F -GLIBC_2.2 open F -GLIBC_2.2 open64 F -GLIBC_2.2 open_memstream F -GLIBC_2.2 opendir F -GLIBC_2.2 openlog F -GLIBC_2.2 optarg D 0x4 -GLIBC_2.2 opterr D 0x4 -GLIBC_2.2 optind D 0x4 -GLIBC_2.2 optopt D 0x4 -GLIBC_2.2 parse_printf_format F -GLIBC_2.2 passwd2des F -GLIBC_2.2 pathconf F -GLIBC_2.2 pause F -GLIBC_2.2 pclose F -GLIBC_2.2 perror F -GLIBC_2.2 personality F -GLIBC_2.2 pipe F -GLIBC_2.2 pmap_getmaps F -GLIBC_2.2 pmap_getport F -GLIBC_2.2 pmap_rmtcall F -GLIBC_2.2 pmap_set F -GLIBC_2.2 pmap_unset F -GLIBC_2.2 poll F -GLIBC_2.2 popen F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 prctl F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 printf F -GLIBC_2.2 printf_size F -GLIBC_2.2 printf_size_info F -GLIBC_2.2 profil F -GLIBC_2.2 program_invocation_name D 0x4 -GLIBC_2.2 program_invocation_short_name D 0x4 -GLIBC_2.2 pselect F -GLIBC_2.2 psignal F -GLIBC_2.2 pthread_attr_destroy F -GLIBC_2.2 pthread_attr_getdetachstate F -GLIBC_2.2 pthread_attr_getinheritsched F -GLIBC_2.2 pthread_attr_getschedparam F -GLIBC_2.2 pthread_attr_getschedpolicy F -GLIBC_2.2 pthread_attr_getscope F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 pthread_attr_setdetachstate F -GLIBC_2.2 pthread_attr_setinheritsched F -GLIBC_2.2 pthread_attr_setschedparam F -GLIBC_2.2 pthread_attr_setschedpolicy F -GLIBC_2.2 pthread_attr_setscope F -GLIBC_2.2 pthread_cond_broadcast F -GLIBC_2.2 pthread_cond_destroy F -GLIBC_2.2 pthread_cond_init F -GLIBC_2.2 pthread_cond_signal F -GLIBC_2.2 pthread_cond_timedwait F -GLIBC_2.2 pthread_cond_wait F -GLIBC_2.2 pthread_condattr_destroy F -GLIBC_2.2 pthread_condattr_init F -GLIBC_2.2 pthread_equal F -GLIBC_2.2 pthread_exit F -GLIBC_2.2 pthread_getschedparam F -GLIBC_2.2 pthread_mutex_destroy F -GLIBC_2.2 pthread_mutex_init F -GLIBC_2.2 pthread_mutex_lock F -GLIBC_2.2 pthread_mutex_unlock F -GLIBC_2.2 pthread_self F -GLIBC_2.2 pthread_setcancelstate F -GLIBC_2.2 pthread_setcanceltype F -GLIBC_2.2 pthread_setschedparam F -GLIBC_2.2 ptrace F -GLIBC_2.2 ptsname F -GLIBC_2.2 ptsname_r F -GLIBC_2.2 putc F -GLIBC_2.2 putc_unlocked F -GLIBC_2.2 putchar F -GLIBC_2.2 putchar_unlocked F -GLIBC_2.2 putenv F -GLIBC_2.2 putgrent F -GLIBC_2.2 putmsg F -GLIBC_2.2 putpmsg F -GLIBC_2.2 putpwent F -GLIBC_2.2 puts F -GLIBC_2.2 putspent F -GLIBC_2.2 pututline F -GLIBC_2.2 pututxline F -GLIBC_2.2 putw F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 pvalloc F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 qecvt F -GLIBC_2.2 qecvt_r F -GLIBC_2.2 qfcvt F -GLIBC_2.2 qfcvt_r F -GLIBC_2.2 qgcvt F -GLIBC_2.2 qsort F -GLIBC_2.2 query_module F -GLIBC_2.2 quotactl F -GLIBC_2.2 raise F -GLIBC_2.2 rand F -GLIBC_2.2 rand_r F -GLIBC_2.2 random F -GLIBC_2.2 random_r F -GLIBC_2.2 rawmemchr F -GLIBC_2.2 rcmd F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 re_comp F -GLIBC_2.2 re_compile_fastmap F -GLIBC_2.2 re_compile_pattern F -GLIBC_2.2 re_exec F -GLIBC_2.2 re_match F -GLIBC_2.2 re_match_2 F -GLIBC_2.2 re_max_failures D 0x4 -GLIBC_2.2 re_search F -GLIBC_2.2 re_search_2 F -GLIBC_2.2 re_set_registers F -GLIBC_2.2 re_set_syntax F -GLIBC_2.2 re_syntax_options D 0x4 -GLIBC_2.2 read F -GLIBC_2.2 readdir F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 readdir_r F -GLIBC_2.2 readlink F -GLIBC_2.2 readv F -GLIBC_2.2 realloc F -GLIBC_2.2 realpath F -GLIBC_2.2 reboot F -GLIBC_2.2 recv F -GLIBC_2.2 recvfrom F -GLIBC_2.2 recvmsg F -GLIBC_2.2 regcomp F -GLIBC_2.2 regerror F -GLIBC_2.2 regexec F -GLIBC_2.2 regfree F -GLIBC_2.2 register_printf_function F -GLIBC_2.2 registerrpc F -GLIBC_2.2 remove F -GLIBC_2.2 remque F -GLIBC_2.2 rename F -GLIBC_2.2 revoke F -GLIBC_2.2 rewind F -GLIBC_2.2 rewinddir F -GLIBC_2.2 rexec F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rexecoptions D 0x4 -GLIBC_2.2 rindex F -GLIBC_2.2 rmdir F -GLIBC_2.2 rpc_createerr D 0x10 -GLIBC_2.2 rpmatch F -GLIBC_2.2 rresvport F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 rtime F -GLIBC_2.2 ruserok F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 ruserpass F -GLIBC_2.2 sbrk F -GLIBC_2.2 scalbn F -GLIBC_2.2 scalbnf F -GLIBC_2.2 scalbnl F -GLIBC_2.2 scandir F -GLIBC_2.2 scandir64 F -GLIBC_2.2 scanf F -GLIBC_2.2 sched_get_priority_max F -GLIBC_2.2 sched_get_priority_min F -GLIBC_2.2 sched_getparam F -GLIBC_2.2 sched_getscheduler F -GLIBC_2.2 sched_rr_get_interval F -GLIBC_2.2 sched_setparam F -GLIBC_2.2 sched_setscheduler F -GLIBC_2.2 sched_yield F -GLIBC_2.2 seed48 F -GLIBC_2.2 seed48_r F -GLIBC_2.2 seekdir F -GLIBC_2.2 select F -GLIBC_2.2 semctl F -GLIBC_2.2 semget F -GLIBC_2.2 semop F -GLIBC_2.2 send F -GLIBC_2.2 sendfile F -GLIBC_2.2 sendmsg F -GLIBC_2.2 sendto F -GLIBC_2.2 setaliasent F -GLIBC_2.2 setbuf F -GLIBC_2.2 setbuffer F -GLIBC_2.2 setcontext F -GLIBC_2.2 setdomainname F -GLIBC_2.2 setegid F -GLIBC_2.2 setenv F -GLIBC_2.2 seteuid F -GLIBC_2.2 setfsent F -GLIBC_2.2 setfsgid F -GLIBC_2.2 setfsuid F -GLIBC_2.2 setgid F -GLIBC_2.2 setgrent F -GLIBC_2.2 setgroups F -GLIBC_2.2 sethostent F -GLIBC_2.2 sethostid F -GLIBC_2.2 sethostname F -GLIBC_2.2 setitimer F -GLIBC_2.2 setjmp F -GLIBC_2.2 setlinebuf F -GLIBC_2.2 setlocale F -GLIBC_2.2 setlogin F -GLIBC_2.2 setlogmask F -GLIBC_2.2 setmntent F -GLIBC_2.2 setnetent F -GLIBC_2.2 setnetgrent F -GLIBC_2.2 setpgid F -GLIBC_2.2 setpgrp F -GLIBC_2.2 setpriority F -GLIBC_2.2 setprotoent F -GLIBC_2.2 setpwent F -GLIBC_2.2 setregid F -GLIBC_2.2 setresgid F -GLIBC_2.2 setresuid F -GLIBC_2.2 setreuid F -GLIBC_2.2 setrlimit F -GLIBC_2.2 setrlimit64 F -GLIBC_2.2 setrpcent F -GLIBC_2.2 setservent F -GLIBC_2.2 setsid F -GLIBC_2.2 setsockopt F -GLIBC_2.2 setspent F -GLIBC_2.2 setstate F -GLIBC_2.2 setstate_r F -GLIBC_2.2 settimeofday F -GLIBC_2.2 setttyent F -GLIBC_2.2 setuid F -GLIBC_2.2 setusershell F -GLIBC_2.2 setutent F -GLIBC_2.2 setutxent F -GLIBC_2.2 setvbuf F -GLIBC_2.2 sgetspent F -GLIBC_2.2 sgetspent_r F -GLIBC_2.2 shmat F -GLIBC_2.2 shmctl F -GLIBC_2.2 shmdt F -GLIBC_2.2 shmget F -GLIBC_2.2 shutdown F -GLIBC_2.2 sigaction F -GLIBC_2.2 sigaddset F -GLIBC_2.2 sigaltstack F -GLIBC_2.2 sigandset F -GLIBC_2.2 sigblock F -GLIBC_2.2 sigdelset F -GLIBC_2.2 sigemptyset F -GLIBC_2.2 sigfillset F -GLIBC_2.2 siggetmask F -GLIBC_2.2 sighold F -GLIBC_2.2 sigignore F -GLIBC_2.2 siginterrupt F -GLIBC_2.2 sigisemptyset F -GLIBC_2.2 sigismember F -GLIBC_2.2 siglongjmp F -GLIBC_2.2 signal F -GLIBC_2.2 sigorset F -GLIBC_2.2 sigpause F -GLIBC_2.2 sigpending F -GLIBC_2.2 sigprocmask F -GLIBC_2.2 sigqueue F -GLIBC_2.2 sigrelse F -GLIBC_2.2 sigreturn F -GLIBC_2.2 sigset F -GLIBC_2.2 sigsetmask F -GLIBC_2.2 sigstack F -GLIBC_2.2 sigsuspend F -GLIBC_2.2 sigtimedwait F -GLIBC_2.2 sigvec F -GLIBC_2.2 sigwait F -GLIBC_2.2 sigwaitinfo F -GLIBC_2.2 sleep F -GLIBC_2.2 snprintf F -GLIBC_2.2 socket F -GLIBC_2.2 socketpair F -GLIBC_2.2 sprintf F -GLIBC_2.2 srand F -GLIBC_2.2 srand48 F -GLIBC_2.2 srand48_r F -GLIBC_2.2 srandom F -GLIBC_2.2 srandom_r F -GLIBC_2.2 sscanf F -GLIBC_2.2 ssignal F -GLIBC_2.2 sstk F -GLIBC_2.2 statfs F -GLIBC_2.2 statfs64 F -GLIBC_2.2 statvfs F -GLIBC_2.2 statvfs64 F -GLIBC_2.2 stderr D 0x4 -GLIBC_2.2 stdin D 0x4 -GLIBC_2.2 stdout D 0x4 -GLIBC_2.2 step F -GLIBC_2.2 stime F -GLIBC_2.2 stpcpy F -GLIBC_2.2 stpncpy F -GLIBC_2.2 strcasecmp F -GLIBC_2.2 strcasestr F -GLIBC_2.2 strcat F -GLIBC_2.2 strchr F -GLIBC_2.2 strchrnul F -GLIBC_2.2 strcmp F -GLIBC_2.2 strcoll F -GLIBC_2.2 strcpy F -GLIBC_2.2 strcspn F -GLIBC_2.2 strdup F -GLIBC_2.2 strerror F -GLIBC_2.2 strerror_r F -GLIBC_2.2 strfmon F -GLIBC_2.2 strfry F -GLIBC_2.2 strftime F -GLIBC_2.2 strlen F -GLIBC_2.2 strncasecmp F -GLIBC_2.2 strncat F -GLIBC_2.2 strncmp F -GLIBC_2.2 strncpy F -GLIBC_2.2 strndup F -GLIBC_2.2 strnlen F -GLIBC_2.2 strpbrk F -GLIBC_2.2 strptime F -GLIBC_2.2 strrchr F -GLIBC_2.2 strsep F -GLIBC_2.2 strsignal F -GLIBC_2.2 strspn F -GLIBC_2.2 strstr F -GLIBC_2.2 strtod F -GLIBC_2.2 strtof F -GLIBC_2.2 strtoimax F -GLIBC_2.2 strtok F -GLIBC_2.2 strtok_r F -GLIBC_2.2 strtol F -GLIBC_2.2 strtold F -GLIBC_2.2 strtoll F -GLIBC_2.2 strtoq F -GLIBC_2.2 strtoul F -GLIBC_2.2 strtoull F -GLIBC_2.2 strtoumax F -GLIBC_2.2 strtouq F -GLIBC_2.2 strverscmp F -GLIBC_2.2 strxfrm F -GLIBC_2.2 stty F -GLIBC_2.2 svc_exit F -GLIBC_2.2 svc_fdset D 0x80 -GLIBC_2.2 svc_getreq F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_getreqset F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x4 -GLIBC_2.2 svc_register F -GLIBC_2.2 svc_run F -GLIBC_2.2 svc_sendreply F -GLIBC_2.2 svc_unregister F -GLIBC_2.2 svcauthdes_stats D 0xc -GLIBC_2.2 svcerr_auth F -GLIBC_2.2 svcerr_decode F -GLIBC_2.2 svcerr_noproc F -GLIBC_2.2 svcerr_noprog F -GLIBC_2.2 svcerr_progvers F -GLIBC_2.2 svcerr_systemerr F -GLIBC_2.2 svcerr_weakauth F -GLIBC_2.2 svcfd_create F -GLIBC_2.2 svcraw_create F -GLIBC_2.2 svctcp_create F -GLIBC_2.2 svcudp_bufcreate F -GLIBC_2.2 svcudp_create F -GLIBC_2.2 svcudp_enablecache F -GLIBC_2.2 svcunix_create F -GLIBC_2.2 svcunixfd_create F -GLIBC_2.2 swab F -GLIBC_2.2 swapcontext F -GLIBC_2.2 swapoff F -GLIBC_2.2 swapon F -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 symlink F -GLIBC_2.2 sync F -GLIBC_2.2 sys_errlist D 0x3f4 -GLIBC_2.2 sys_nerr D 0x4 -GLIBC_2.2 sys_sigabbrev D 0x100 -GLIBC_2.2 sys_siglist D 0x100 -GLIBC_2.2 syscall F -GLIBC_2.2 sysconf F -GLIBC_2.2 sysctl F -GLIBC_2.2 sysinfo F -GLIBC_2.2 syslog F -GLIBC_2.2 system F -GLIBC_2.2 sysv_signal F -GLIBC_2.2 tcdrain F -GLIBC_2.2 tcflow F -GLIBC_2.2 tcflush F -GLIBC_2.2 tcgetattr F -GLIBC_2.2 tcgetpgrp F -GLIBC_2.2 tcgetsid F -GLIBC_2.2 tcsendbreak F -GLIBC_2.2 tcsetattr F -GLIBC_2.2 tcsetpgrp F -GLIBC_2.2 tdelete F -GLIBC_2.2 tdestroy F -GLIBC_2.2 telldir F -GLIBC_2.2 tempnam F -GLIBC_2.2 textdomain F -GLIBC_2.2 tfind F -GLIBC_2.2 time F -GLIBC_2.2 timegm F -GLIBC_2.2 timelocal F -GLIBC_2.2 times F -GLIBC_2.2 timezone D 0x4 -GLIBC_2.2 tmpfile F -GLIBC_2.2 tmpfile64 F -GLIBC_2.2 tmpnam F -GLIBC_2.2 tmpnam_r F -GLIBC_2.2 toascii F -GLIBC_2.2 tolower F -GLIBC_2.2 toupper F -GLIBC_2.2 towctrans F -GLIBC_2.2 towlower F -GLIBC_2.2 towupper F -GLIBC_2.2 tr_break F -GLIBC_2.2 truncate F -GLIBC_2.2 truncate64 F -GLIBC_2.2 tsearch F -GLIBC_2.2 ttyname F -GLIBC_2.2 ttyname_r F -GLIBC_2.2 ttyslot F -GLIBC_2.2 twalk F -GLIBC_2.2 tzname D 0x8 -GLIBC_2.2 tzset F -GLIBC_2.2 ualarm F -GLIBC_2.2 ulckpwdf F -GLIBC_2.2 ulimit F -GLIBC_2.2 umask F -GLIBC_2.2 umount F -GLIBC_2.2 umount2 F -GLIBC_2.2 uname F -GLIBC_2.2 ungetc F -GLIBC_2.2 ungetwc F -GLIBC_2.2 unlink F -GLIBC_2.2 unlockpt F -GLIBC_2.2 unsetenv F -GLIBC_2.2 updwtmp F -GLIBC_2.2 updwtmpx F -GLIBC_2.2 uselib F -GLIBC_2.2 user2netname F -GLIBC_2.2 usleep F -GLIBC_2.2 ustat F -GLIBC_2.2 utime F -GLIBC_2.2 utimes F -GLIBC_2.2 utmpname F -GLIBC_2.2 utmpxname F -GLIBC_2.2 valloc F -GLIBC_2.2 vasprintf F -GLIBC_2.2 vdprintf F -GLIBC_2.2 verr F -GLIBC_2.2 verrx F -GLIBC_2.2 versionsort F -GLIBC_2.2 versionsort64 F -GLIBC_2.2 vfork F -GLIBC_2.2 vfprintf F -GLIBC_2.2 vfscanf F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vhangup F -GLIBC_2.2 vlimit F -GLIBC_2.2 vprintf F -GLIBC_2.2 vscanf F -GLIBC_2.2 vsnprintf F -GLIBC_2.2 vsprintf F -GLIBC_2.2 vsscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vsyslog F -GLIBC_2.2 vtimes F -GLIBC_2.2 vwarn F -GLIBC_2.2 vwarnx F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 wait F -GLIBC_2.2 wait3 F -GLIBC_2.2 wait4 F -GLIBC_2.2 waitid F -GLIBC_2.2 waitpid F -GLIBC_2.2 warn F -GLIBC_2.2 warnx F -GLIBC_2.2 wcpcpy F -GLIBC_2.2 wcpncpy F -GLIBC_2.2 wcrtomb F -GLIBC_2.2 wcscasecmp F -GLIBC_2.2 wcscat F -GLIBC_2.2 wcschr F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcscmp F -GLIBC_2.2 wcscoll F -GLIBC_2.2 wcscpy F -GLIBC_2.2 wcscspn F -GLIBC_2.2 wcsdup F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wcslen F -GLIBC_2.2 wcsncasecmp F -GLIBC_2.2 wcsncat F -GLIBC_2.2 wcsncmp F -GLIBC_2.2 wcsncpy F -GLIBC_2.2 wcsnlen F -GLIBC_2.2 wcsnrtombs F -GLIBC_2.2 wcspbrk F -GLIBC_2.2 wcsrchr F -GLIBC_2.2 wcsrtombs F -GLIBC_2.2 wcsspn F -GLIBC_2.2 wcsstr F -GLIBC_2.2 wcstod F -GLIBC_2.2 wcstof F -GLIBC_2.2 wcstoimax F -GLIBC_2.2 wcstok F -GLIBC_2.2 wcstol F -GLIBC_2.2 wcstold F -GLIBC_2.2 wcstoll F -GLIBC_2.2 wcstombs F -GLIBC_2.2 wcstoq F -GLIBC_2.2 wcstoul F -GLIBC_2.2 wcstoull F -GLIBC_2.2 wcstoumax F -GLIBC_2.2 wcstouq F -GLIBC_2.2 wcswcs F -GLIBC_2.2 wcswidth F -GLIBC_2.2 wcsxfrm F -GLIBC_2.2 wctob F -GLIBC_2.2 wctomb F -GLIBC_2.2 wctrans F -GLIBC_2.2 wctype F -GLIBC_2.2 wcwidth F -GLIBC_2.2 wmemchr F -GLIBC_2.2 wmemcmp F -GLIBC_2.2 wmemcpy F -GLIBC_2.2 wmemmove F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wmemset F -GLIBC_2.2 wordexp F -GLIBC_2.2 wordfree F -GLIBC_2.2 wprintf F -GLIBC_2.2 write F -GLIBC_2.2 writev F -GLIBC_2.2 wscanf F -GLIBC_2.2 xdecrypt F -GLIBC_2.2 xdr_accepted_reply F -GLIBC_2.2 xdr_array F -GLIBC_2.2 xdr_authdes_cred F -GLIBC_2.2 xdr_authdes_verf F -GLIBC_2.2 xdr_authunix_parms F -GLIBC_2.2 xdr_bool F -GLIBC_2.2 xdr_bytes F -GLIBC_2.2 xdr_callhdr F -GLIBC_2.2 xdr_callmsg F -GLIBC_2.2 xdr_char F -GLIBC_2.2 xdr_cryptkeyarg F -GLIBC_2.2 xdr_cryptkeyarg2 F -GLIBC_2.2 xdr_cryptkeyres F -GLIBC_2.2 xdr_des_block F -GLIBC_2.2 xdr_double F -GLIBC_2.2 xdr_enum F -GLIBC_2.2 xdr_float F -GLIBC_2.2 xdr_free F -GLIBC_2.2 xdr_getcredres F -GLIBC_2.2 xdr_hyper F -GLIBC_2.2 xdr_int F -GLIBC_2.2 xdr_int16_t F -GLIBC_2.2 xdr_int32_t F -GLIBC_2.2 xdr_int64_t F -GLIBC_2.2 xdr_int8_t F -GLIBC_2.2 xdr_key_netstarg F -GLIBC_2.2 xdr_key_netstres F -GLIBC_2.2 xdr_keybuf F -GLIBC_2.2 xdr_keystatus F -GLIBC_2.2 xdr_long F -GLIBC_2.2 xdr_longlong_t F -GLIBC_2.2 xdr_netnamestr F -GLIBC_2.2 xdr_netobj F -GLIBC_2.2 xdr_opaque F -GLIBC_2.2 xdr_opaque_auth F -GLIBC_2.2 xdr_pmap F -GLIBC_2.2 xdr_pmaplist F -GLIBC_2.2 xdr_pointer F -GLIBC_2.2 xdr_reference F -GLIBC_2.2 xdr_rejected_reply F -GLIBC_2.2 xdr_replymsg F -GLIBC_2.2 xdr_rmtcall_args F -GLIBC_2.2 xdr_rmtcallres F -GLIBC_2.2 xdr_short F -GLIBC_2.2 xdr_sizeof F -GLIBC_2.2 xdr_string F -GLIBC_2.2 xdr_u_char F -GLIBC_2.2 xdr_u_hyper F -GLIBC_2.2 xdr_u_int F -GLIBC_2.2 xdr_u_long F -GLIBC_2.2 xdr_u_longlong_t F -GLIBC_2.2 xdr_u_short F -GLIBC_2.2 xdr_uint16_t F -GLIBC_2.2 xdr_uint32_t F -GLIBC_2.2 xdr_uint64_t F -GLIBC_2.2 xdr_uint8_t F -GLIBC_2.2 xdr_union F -GLIBC_2.2 xdr_unixcred F -GLIBC_2.2 xdr_vector F -GLIBC_2.2 xdr_void F -GLIBC_2.2 xdr_wrapstring F -GLIBC_2.2 xdrmem_create F -GLIBC_2.2 xdrrec_create F -GLIBC_2.2 xdrrec_endofrecord F -GLIBC_2.2 xdrrec_eof F -GLIBC_2.2 xdrrec_skiprecord F -GLIBC_2.2 xdrstdio_create F -GLIBC_2.2 xencrypt F -GLIBC_2.2 xprt_register F -GLIBC_2.2 xprt_unregister F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 _sys_errlist D 0x3f8 -GLIBC_2.3 _sys_nerr D 0x4 -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoll_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strtoull_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 sys_errlist D 0x3f8 -GLIBC_2.3 sys_nerr D 0x4 -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x104 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 posix_fadvise64 F -GLIBC_2.3.3 posix_fallocate64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 sys_sigabbrev D 0x104 -GLIBC_2.3.3 sys_siglist D 0x104 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 _sys_errlist D 0x400 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 futimesat F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sys_errlist D 0x400 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/hppa/libcrypt.abilist b/sysdeps/unix/sysv/linux/hppa/libcrypt.abilist deleted file mode 100644 index 4db2639336..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 crypt F -GLIBC_2.0 crypt_r F -GLIBC_2.0 encrypt F -GLIBC_2.0 encrypt_r F -GLIBC_2.0 fcrypt F -GLIBC_2.0 setkey F -GLIBC_2.0 setkey_r F diff --git a/sysdeps/unix/sysv/linux/hppa/libdl.abilist b/sysdeps/unix/sysv/linux/hppa/libdl.abilist deleted file mode 100644 index 5536f6e0a9..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/libdl.abilist +++ /dev/null @@ -1,14 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 dladdr F -GLIBC_2.0 dlclose F -GLIBC_2.0 dlerror F -GLIBC_2.0 dlopen F -GLIBC_2.0 dlsym F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 dlopen F -GLIBC_2.1 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist deleted file mode 100644 index 80fd4ada99..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ /dev/null @@ -1,433 +0,0 @@ -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _LIB_VERSION D 0x4 -GLIBC_2.2 __clog10 F -GLIBC_2.2 __clog10f F -GLIBC_2.2 __clog10l F -GLIBC_2.2 __finite F -GLIBC_2.2 __finitef F -GLIBC_2.2 __fpclassify F -GLIBC_2.2 __fpclassifyf F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 __signbitl F -GLIBC_2.2 acos F -GLIBC_2.2 acosf F -GLIBC_2.2 acosh F -GLIBC_2.2 acoshf F -GLIBC_2.2 acoshl F -GLIBC_2.2 acosl F -GLIBC_2.2 asin F -GLIBC_2.2 asinf F -GLIBC_2.2 asinh F -GLIBC_2.2 asinhf F -GLIBC_2.2 asinhl F -GLIBC_2.2 asinl F -GLIBC_2.2 atan F -GLIBC_2.2 atan2 F -GLIBC_2.2 atan2f F -GLIBC_2.2 atan2l F -GLIBC_2.2 atanf F -GLIBC_2.2 atanh F -GLIBC_2.2 atanhf F -GLIBC_2.2 atanhl F -GLIBC_2.2 atanl F -GLIBC_2.2 cabs F -GLIBC_2.2 cabsf F -GLIBC_2.2 cabsl F -GLIBC_2.2 cacos F -GLIBC_2.2 cacosf F -GLIBC_2.2 cacosh F -GLIBC_2.2 cacoshf F -GLIBC_2.2 cacoshl F -GLIBC_2.2 cacosl F -GLIBC_2.2 carg F -GLIBC_2.2 cargf F -GLIBC_2.2 cargl F -GLIBC_2.2 casin F -GLIBC_2.2 casinf F -GLIBC_2.2 casinh F -GLIBC_2.2 casinhf F -GLIBC_2.2 casinhl F -GLIBC_2.2 casinl F -GLIBC_2.2 catan F -GLIBC_2.2 catanf F -GLIBC_2.2 catanh F -GLIBC_2.2 catanhf F -GLIBC_2.2 catanhl F -GLIBC_2.2 catanl F -GLIBC_2.2 cbrt F -GLIBC_2.2 cbrtf F -GLIBC_2.2 cbrtl F -GLIBC_2.2 ccos F -GLIBC_2.2 ccosf F -GLIBC_2.2 ccosh F -GLIBC_2.2 ccoshf F -GLIBC_2.2 ccoshl F -GLIBC_2.2 ccosl F -GLIBC_2.2 ceil F -GLIBC_2.2 ceilf F -GLIBC_2.2 ceill F -GLIBC_2.2 cexp F -GLIBC_2.2 cexpf F -GLIBC_2.2 cexpl F -GLIBC_2.2 cimag F -GLIBC_2.2 cimagf F -GLIBC_2.2 cimagl F -GLIBC_2.2 clog F -GLIBC_2.2 clog10 F -GLIBC_2.2 clog10f F -GLIBC_2.2 clog10l F -GLIBC_2.2 clogf F -GLIBC_2.2 clogl F -GLIBC_2.2 conj F -GLIBC_2.2 conjf F -GLIBC_2.2 conjl F -GLIBC_2.2 copysign F -GLIBC_2.2 copysignf F -GLIBC_2.2 copysignl F -GLIBC_2.2 cos F -GLIBC_2.2 cosf F -GLIBC_2.2 cosh F -GLIBC_2.2 coshf F -GLIBC_2.2 coshl F -GLIBC_2.2 cosl F -GLIBC_2.2 cpow F -GLIBC_2.2 cpowf F -GLIBC_2.2 cpowl F -GLIBC_2.2 cproj F -GLIBC_2.2 cprojf F -GLIBC_2.2 cprojl F -GLIBC_2.2 creal F -GLIBC_2.2 crealf F -GLIBC_2.2 creall F -GLIBC_2.2 csin F -GLIBC_2.2 csinf F -GLIBC_2.2 csinh F -GLIBC_2.2 csinhf F -GLIBC_2.2 csinhl F -GLIBC_2.2 csinl F -GLIBC_2.2 csqrt F -GLIBC_2.2 csqrtf F -GLIBC_2.2 csqrtl F -GLIBC_2.2 ctan F -GLIBC_2.2 ctanf F -GLIBC_2.2 ctanh F -GLIBC_2.2 ctanhf F -GLIBC_2.2 ctanhl F -GLIBC_2.2 ctanl F -GLIBC_2.2 drem F -GLIBC_2.2 dremf F -GLIBC_2.2 dreml F -GLIBC_2.2 erf F -GLIBC_2.2 erfc F -GLIBC_2.2 erfcf F -GLIBC_2.2 erfcl F -GLIBC_2.2 erff F -GLIBC_2.2 erfl F -GLIBC_2.2 exp F -GLIBC_2.2 exp10 F -GLIBC_2.2 exp10f F -GLIBC_2.2 exp10l F -GLIBC_2.2 exp2 F -GLIBC_2.2 exp2f F -GLIBC_2.2 expf F -GLIBC_2.2 expl F -GLIBC_2.2 expm1 F -GLIBC_2.2 expm1f F -GLIBC_2.2 expm1l F -GLIBC_2.2 fabs F -GLIBC_2.2 fabsf F -GLIBC_2.2 fabsl F -GLIBC_2.2 fdim F -GLIBC_2.2 fdimf F -GLIBC_2.2 fdiml F -GLIBC_2.2 feclearexcept F -GLIBC_2.2 fedisableexcept F -GLIBC_2.2 feenableexcept F -GLIBC_2.2 fegetenv F -GLIBC_2.2 fegetexcept F -GLIBC_2.2 fegetexceptflag F -GLIBC_2.2 fegetround F -GLIBC_2.2 feholdexcept F -GLIBC_2.2 feraiseexcept F -GLIBC_2.2 fesetenv F -GLIBC_2.2 fesetexceptflag F -GLIBC_2.2 fesetround F -GLIBC_2.2 fetestexcept F -GLIBC_2.2 feupdateenv F -GLIBC_2.2 finite F -GLIBC_2.2 finitef F -GLIBC_2.2 finitel F -GLIBC_2.2 floor F -GLIBC_2.2 floorf F -GLIBC_2.2 floorl F -GLIBC_2.2 fma F -GLIBC_2.2 fmaf F -GLIBC_2.2 fmal F -GLIBC_2.2 fmax F -GLIBC_2.2 fmaxf F -GLIBC_2.2 fmaxl F -GLIBC_2.2 fmin F -GLIBC_2.2 fminf F -GLIBC_2.2 fminl F -GLIBC_2.2 fmod F -GLIBC_2.2 fmodf F -GLIBC_2.2 fmodl F -GLIBC_2.2 frexp F -GLIBC_2.2 frexpf F -GLIBC_2.2 frexpl F -GLIBC_2.2 gamma F -GLIBC_2.2 gammaf F -GLIBC_2.2 gammal F -GLIBC_2.2 hypot F -GLIBC_2.2 hypotf F -GLIBC_2.2 hypotl F -GLIBC_2.2 ilogb F -GLIBC_2.2 ilogbf F -GLIBC_2.2 ilogbl F -GLIBC_2.2 j0 F -GLIBC_2.2 j0f F -GLIBC_2.2 j0l F -GLIBC_2.2 j1 F -GLIBC_2.2 j1f F -GLIBC_2.2 j1l F -GLIBC_2.2 jn F -GLIBC_2.2 jnf F -GLIBC_2.2 jnl F -GLIBC_2.2 ldexp F -GLIBC_2.2 ldexpf F -GLIBC_2.2 ldexpl F -GLIBC_2.2 lgamma F -GLIBC_2.2 lgamma_r F -GLIBC_2.2 lgammaf F -GLIBC_2.2 lgammaf_r F -GLIBC_2.2 lgammal F -GLIBC_2.2 lgammal_r F -GLIBC_2.2 llrint F -GLIBC_2.2 llrintf F -GLIBC_2.2 llrintl F -GLIBC_2.2 llround F -GLIBC_2.2 llroundf F -GLIBC_2.2 llroundl F -GLIBC_2.2 log F -GLIBC_2.2 log10 F -GLIBC_2.2 log10f F -GLIBC_2.2 log10l F -GLIBC_2.2 log1p F -GLIBC_2.2 log1pf F -GLIBC_2.2 log1pl F -GLIBC_2.2 log2 F -GLIBC_2.2 log2f F -GLIBC_2.2 log2l F -GLIBC_2.2 logb F -GLIBC_2.2 logbf F -GLIBC_2.2 logbl F -GLIBC_2.2 logf F -GLIBC_2.2 logl F -GLIBC_2.2 lrint F -GLIBC_2.2 lrintf F -GLIBC_2.2 lrintl F -GLIBC_2.2 lround F -GLIBC_2.2 lroundf F -GLIBC_2.2 lroundl F -GLIBC_2.2 matherr F -GLIBC_2.2 modf F -GLIBC_2.2 modff F -GLIBC_2.2 modfl F -GLIBC_2.2 nan F -GLIBC_2.2 nanf F -GLIBC_2.2 nanl F -GLIBC_2.2 nearbyint F -GLIBC_2.2 nearbyintf F -GLIBC_2.2 nearbyintl F -GLIBC_2.2 nextafter F -GLIBC_2.2 nextafterf F -GLIBC_2.2 nextafterl F -GLIBC_2.2 nexttoward F -GLIBC_2.2 nexttowardf F -GLIBC_2.2 nexttowardl F -GLIBC_2.2 pow F -GLIBC_2.2 pow10 F -GLIBC_2.2 pow10f F -GLIBC_2.2 pow10l F -GLIBC_2.2 powf F -GLIBC_2.2 powl F -GLIBC_2.2 remainder F -GLIBC_2.2 remainderf F -GLIBC_2.2 remainderl F -GLIBC_2.2 remquo F -GLIBC_2.2 remquof F -GLIBC_2.2 remquol F -GLIBC_2.2 rint F -GLIBC_2.2 rintf F -GLIBC_2.2 rintl F -GLIBC_2.2 round F -GLIBC_2.2 roundf F -GLIBC_2.2 roundl F -GLIBC_2.2 scalb F -GLIBC_2.2 scalbf F -GLIBC_2.2 scalbl F -GLIBC_2.2 scalbln F -GLIBC_2.2 scalblnf F -GLIBC_2.2 scalblnl F -GLIBC_2.2 scalbn F -GLIBC_2.2 scalbnf F -GLIBC_2.2 scalbnl F -GLIBC_2.2 signgam D 0x4 -GLIBC_2.2 significand F -GLIBC_2.2 significandf F -GLIBC_2.2 significandl F -GLIBC_2.2 sin F -GLIBC_2.2 sincos F -GLIBC_2.2 sincosf F -GLIBC_2.2 sincosl F -GLIBC_2.2 sinf F -GLIBC_2.2 sinh F -GLIBC_2.2 sinhf F -GLIBC_2.2 sinhl F -GLIBC_2.2 sinl F -GLIBC_2.2 sqrt F -GLIBC_2.2 sqrtf F -GLIBC_2.2 sqrtl F -GLIBC_2.2 tan F -GLIBC_2.2 tanf F -GLIBC_2.2 tanh F -GLIBC_2.2 tanhf F -GLIBC_2.2 tanhl F -GLIBC_2.2 tanl F -GLIBC_2.2 tgamma F -GLIBC_2.2 tgammaf F -GLIBC_2.2 tgammal F -GLIBC_2.2 trunc F -GLIBC_2.2 truncf F -GLIBC_2.2 truncl F -GLIBC_2.2 y0 F -GLIBC_2.2 y0f F -GLIBC_2.2 y0l F -GLIBC_2.2 y1 F -GLIBC_2.2 y1f F -GLIBC_2.2 y1l F -GLIBC_2.2 yn F -GLIBC_2.2 ynf F -GLIBC_2.2 ynl F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 exp2l F diff --git a/sysdeps/unix/sysv/linux/hppa/libnsl.abilist b/sysdeps/unix/sysv/linux/hppa/libnsl.abilist deleted file mode 100644 index a23db2aeaf..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/libnsl.abilist +++ /dev/null @@ -1,124 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __yp_check F -GLIBC_2.0 xdr_domainname F -GLIBC_2.0 xdr_keydat F -GLIBC_2.0 xdr_mapname F -GLIBC_2.0 xdr_peername F -GLIBC_2.0 xdr_valdat F -GLIBC_2.0 xdr_yp_buf F -GLIBC_2.0 xdr_ypbind_binding F -GLIBC_2.0 xdr_ypbind_resp F -GLIBC_2.0 xdr_ypbind_resptype F -GLIBC_2.0 xdr_ypbind_setdom F -GLIBC_2.0 xdr_ypdelete_args F -GLIBC_2.0 xdr_ypmap_parms F -GLIBC_2.0 xdr_ypmaplist F -GLIBC_2.0 xdr_yppush_status F -GLIBC_2.0 xdr_yppushresp_xfr F -GLIBC_2.0 xdr_ypreq_key F -GLIBC_2.0 xdr_ypreq_nokey F -GLIBC_2.0 xdr_ypreq_xfr F -GLIBC_2.0 xdr_ypresp_all F -GLIBC_2.0 xdr_ypresp_key_val F -GLIBC_2.0 xdr_ypresp_maplist F -GLIBC_2.0 xdr_ypresp_master F -GLIBC_2.0 xdr_ypresp_order F -GLIBC_2.0 xdr_ypresp_val F -GLIBC_2.0 xdr_ypresp_xfr F -GLIBC_2.0 xdr_ypstat F -GLIBC_2.0 xdr_ypupdate_args F -GLIBC_2.0 xdr_ypxfrstat F -GLIBC_2.0 yp_all F -GLIBC_2.0 yp_bind F -GLIBC_2.0 yp_first F -GLIBC_2.0 yp_get_default_domain F -GLIBC_2.0 yp_maplist F -GLIBC_2.0 yp_master F -GLIBC_2.0 yp_match F -GLIBC_2.0 yp_next F -GLIBC_2.0 yp_order F -GLIBC_2.0 yp_unbind F -GLIBC_2.0 yp_update F -GLIBC_2.0 ypbinderr_string F -GLIBC_2.0 yperr_string F -GLIBC_2.0 ypprot_err F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __free_fdresult F -GLIBC_2.1 __nis_default_access F -GLIBC_2.1 __nis_default_group F -GLIBC_2.1 __nis_default_owner F -GLIBC_2.1 __nis_default_ttl F -GLIBC_2.1 __nis_finddirectory F -GLIBC_2.1 __nis_hash F -GLIBC_2.1 __nisbind_connect F -GLIBC_2.1 __nisbind_create F -GLIBC_2.1 __nisbind_destroy F -GLIBC_2.1 __nisbind_next F -GLIBC_2.1 nis_add F -GLIBC_2.1 nis_add_entry F -GLIBC_2.1 nis_addmember F -GLIBC_2.1 nis_checkpoint F -GLIBC_2.1 nis_clone_directory F -GLIBC_2.1 nis_clone_object F -GLIBC_2.1 nis_clone_result F -GLIBC_2.1 nis_creategroup F -GLIBC_2.1 nis_destroy_object F -GLIBC_2.1 nis_destroygroup F -GLIBC_2.1 nis_dir_cmp F -GLIBC_2.1 nis_domain_of F -GLIBC_2.1 nis_domain_of_r F -GLIBC_2.1 nis_first_entry F -GLIBC_2.1 nis_free_directory F -GLIBC_2.1 nis_free_object F -GLIBC_2.1 nis_free_request F -GLIBC_2.1 nis_freenames F -GLIBC_2.1 nis_freeresult F -GLIBC_2.1 nis_freeservlist F -GLIBC_2.1 nis_freetags F -GLIBC_2.1 nis_getnames F -GLIBC_2.1 nis_getservlist F -GLIBC_2.1 nis_ismember F -GLIBC_2.1 nis_leaf_of F -GLIBC_2.1 nis_leaf_of_r F -GLIBC_2.1 nis_lerror F -GLIBC_2.1 nis_list F -GLIBC_2.1 nis_local_directory F -GLIBC_2.1 nis_local_group F -GLIBC_2.1 nis_local_host F -GLIBC_2.1 nis_local_principal F -GLIBC_2.1 nis_lookup F -GLIBC_2.1 nis_mkdir F -GLIBC_2.1 nis_modify F -GLIBC_2.1 nis_modify_entry F -GLIBC_2.1 nis_name_of F -GLIBC_2.1 nis_name_of_r F -GLIBC_2.1 nis_next_entry F -GLIBC_2.1 nis_perror F -GLIBC_2.1 nis_ping F -GLIBC_2.1 nis_print_directory F -GLIBC_2.1 nis_print_entry F -GLIBC_2.1 nis_print_group F -GLIBC_2.1 nis_print_group_entry F -GLIBC_2.1 nis_print_link F -GLIBC_2.1 nis_print_object F -GLIBC_2.1 nis_print_result F -GLIBC_2.1 nis_print_rights F -GLIBC_2.1 nis_print_table F -GLIBC_2.1 nis_read_obj F -GLIBC_2.1 nis_remove F -GLIBC_2.1 nis_remove_entry F -GLIBC_2.1 nis_removemember F -GLIBC_2.1 nis_rmdir F -GLIBC_2.1 nis_servstate F -GLIBC_2.1 nis_sperrno F -GLIBC_2.1 nis_sperror F -GLIBC_2.1 nis_sperror_r F -GLIBC_2.1 nis_stats F -GLIBC_2.1 nis_verifygroup F -GLIBC_2.1 nis_write_obj F -GLIBC_2.1 readColdStartFile F -GLIBC_2.1 writeColdStartFile F -GLIBC_2.1 xdr_cback_data F -GLIBC_2.1 xdr_obj_p F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 xdr_ypall F diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist deleted file mode 100644 index a73aa43c55..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist +++ /dev/null @@ -1,245 +0,0 @@ -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _IO_flockfile F -GLIBC_2.2 _IO_ftrylockfile F -GLIBC_2.2 _IO_funlockfile F -GLIBC_2.2 __close F -GLIBC_2.2 __connect F -GLIBC_2.2 __errno_location F -GLIBC_2.2 __fcntl F -GLIBC_2.2 __fork F -GLIBC_2.2 __h_errno_location F -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __lseek F -GLIBC_2.2 __open F -GLIBC_2.2 __open64 F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pthread_getspecific F -GLIBC_2.2 __pthread_key_create F -GLIBC_2.2 __pthread_mutex_destroy F -GLIBC_2.2 __pthread_mutex_init F -GLIBC_2.2 __pthread_mutex_lock F -GLIBC_2.2 __pthread_mutex_trylock F -GLIBC_2.2 __pthread_mutex_unlock F -GLIBC_2.2 __pthread_mutexattr_destroy F -GLIBC_2.2 __pthread_mutexattr_init F -GLIBC_2.2 __pthread_mutexattr_settype F -GLIBC_2.2 __pthread_once F -GLIBC_2.2 __pthread_rwlock_destroy F -GLIBC_2.2 __pthread_rwlock_init F -GLIBC_2.2 __pthread_rwlock_rdlock F -GLIBC_2.2 __pthread_rwlock_tryrdlock F -GLIBC_2.2 __pthread_rwlock_trywrlock F -GLIBC_2.2 __pthread_rwlock_unlock F -GLIBC_2.2 __pthread_rwlock_wrlock F -GLIBC_2.2 __pthread_setspecific F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __read F -GLIBC_2.2 __res_state F -GLIBC_2.2 __send F -GLIBC_2.2 __sigaction F -GLIBC_2.2 __vfork F -GLIBC_2.2 __wait F -GLIBC_2.2 __write F -GLIBC_2.2 _pthread_cleanup_pop F -GLIBC_2.2 _pthread_cleanup_pop_restore F -GLIBC_2.2 _pthread_cleanup_push F -GLIBC_2.2 _pthread_cleanup_push_defer F -GLIBC_2.2 accept F -GLIBC_2.2 close F -GLIBC_2.2 connect F -GLIBC_2.2 fcntl F -GLIBC_2.2 flockfile F -GLIBC_2.2 fork F -GLIBC_2.2 fsync F -GLIBC_2.2 ftrylockfile F -GLIBC_2.2 funlockfile F -GLIBC_2.2 longjmp F -GLIBC_2.2 lseek F -GLIBC_2.2 lseek64 F -GLIBC_2.2 msync F -GLIBC_2.2 nanosleep F -GLIBC_2.2 open F -GLIBC_2.2 open64 F -GLIBC_2.2 pause F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 pthread_atfork F -GLIBC_2.2 pthread_attr_destroy F -GLIBC_2.2 pthread_attr_getdetachstate F -GLIBC_2.2 pthread_attr_getguardsize F -GLIBC_2.2 pthread_attr_getinheritsched F -GLIBC_2.2 pthread_attr_getschedparam F -GLIBC_2.2 pthread_attr_getschedpolicy F -GLIBC_2.2 pthread_attr_getscope F -GLIBC_2.2 pthread_attr_getstack F -GLIBC_2.2 pthread_attr_getstackaddr F -GLIBC_2.2 pthread_attr_getstacksize F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 pthread_attr_setdetachstate F -GLIBC_2.2 pthread_attr_setguardsize F -GLIBC_2.2 pthread_attr_setinheritsched F -GLIBC_2.2 pthread_attr_setschedparam F -GLIBC_2.2 pthread_attr_setschedpolicy F -GLIBC_2.2 pthread_attr_setscope F -GLIBC_2.2 pthread_attr_setstack F -GLIBC_2.2 pthread_attr_setstackaddr F -GLIBC_2.2 pthread_attr_setstacksize F -GLIBC_2.2 pthread_barrier_destroy F -GLIBC_2.2 pthread_barrier_init F -GLIBC_2.2 pthread_barrier_wait F -GLIBC_2.2 pthread_barrierattr_destroy F -GLIBC_2.2 pthread_barrierattr_init F -GLIBC_2.2 pthread_barrierattr_setpshared F -GLIBC_2.2 pthread_cancel F -GLIBC_2.2 pthread_cond_broadcast F -GLIBC_2.2 pthread_cond_destroy F -GLIBC_2.2 pthread_cond_init F -GLIBC_2.2 pthread_cond_signal F -GLIBC_2.2 pthread_cond_timedwait F -GLIBC_2.2 pthread_cond_wait F -GLIBC_2.2 pthread_condattr_destroy F -GLIBC_2.2 pthread_condattr_getpshared F -GLIBC_2.2 pthread_condattr_init F -GLIBC_2.2 pthread_condattr_setpshared F -GLIBC_2.2 pthread_create F -GLIBC_2.2 pthread_detach F -GLIBC_2.2 pthread_equal F -GLIBC_2.2 pthread_exit F -GLIBC_2.2 pthread_getconcurrency F -GLIBC_2.2 pthread_getcpuclockid F -GLIBC_2.2 pthread_getschedparam F -GLIBC_2.2 pthread_getspecific F -GLIBC_2.2 pthread_join F -GLIBC_2.2 pthread_key_create F -GLIBC_2.2 pthread_key_delete F -GLIBC_2.2 pthread_kill F -GLIBC_2.2 pthread_kill_other_threads_np F -GLIBC_2.2 pthread_mutex_destroy F -GLIBC_2.2 pthread_mutex_init F -GLIBC_2.2 pthread_mutex_lock F -GLIBC_2.2 pthread_mutex_timedlock F -GLIBC_2.2 pthread_mutex_trylock F -GLIBC_2.2 pthread_mutex_unlock F -GLIBC_2.2 pthread_mutexattr_destroy F -GLIBC_2.2 pthread_mutexattr_getkind_np F -GLIBC_2.2 pthread_mutexattr_getpshared F -GLIBC_2.2 pthread_mutexattr_gettype F -GLIBC_2.2 pthread_mutexattr_init F -GLIBC_2.2 pthread_mutexattr_setkind_np F -GLIBC_2.2 pthread_mutexattr_setpshared F -GLIBC_2.2 pthread_mutexattr_settype F -GLIBC_2.2 pthread_once F -GLIBC_2.2 pthread_rwlock_destroy F -GLIBC_2.2 pthread_rwlock_init F -GLIBC_2.2 pthread_rwlock_rdlock F -GLIBC_2.2 pthread_rwlock_timedrdlock F -GLIBC_2.2 pthread_rwlock_timedwrlock F -GLIBC_2.2 pthread_rwlock_tryrdlock F -GLIBC_2.2 pthread_rwlock_trywrlock F -GLIBC_2.2 pthread_rwlock_unlock F -GLIBC_2.2 pthread_rwlock_wrlock F -GLIBC_2.2 pthread_rwlockattr_destroy F -GLIBC_2.2 pthread_rwlockattr_getkind_np F -GLIBC_2.2 pthread_rwlockattr_getpshared F -GLIBC_2.2 pthread_rwlockattr_init F -GLIBC_2.2 pthread_rwlockattr_setkind_np F -GLIBC_2.2 pthread_rwlockattr_setpshared F -GLIBC_2.2 pthread_self F -GLIBC_2.2 pthread_setcancelstate F -GLIBC_2.2 pthread_setcanceltype F -GLIBC_2.2 pthread_setconcurrency F -GLIBC_2.2 pthread_setschedparam F -GLIBC_2.2 pthread_setspecific F -GLIBC_2.2 pthread_sigmask F -GLIBC_2.2 pthread_spin_destroy F -GLIBC_2.2 pthread_spin_init F -GLIBC_2.2 pthread_spin_lock F -GLIBC_2.2 pthread_spin_trylock F -GLIBC_2.2 pthread_spin_unlock F -GLIBC_2.2 pthread_testcancel F -GLIBC_2.2 pthread_yield F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 raise F -GLIBC_2.2 read F -GLIBC_2.2 recv F -GLIBC_2.2 recvfrom F -GLIBC_2.2 recvmsg F -GLIBC_2.2 sem_close F -GLIBC_2.2 sem_destroy F -GLIBC_2.2 sem_getvalue F -GLIBC_2.2 sem_init F -GLIBC_2.2 sem_open F -GLIBC_2.2 sem_post F -GLIBC_2.2 sem_timedwait F -GLIBC_2.2 sem_trywait F -GLIBC_2.2 sem_unlink F -GLIBC_2.2 sem_wait F -GLIBC_2.2 send F -GLIBC_2.2 sendmsg F -GLIBC_2.2 sendto F -GLIBC_2.2 sigaction F -GLIBC_2.2 siglongjmp F -GLIBC_2.2 sigwait F -GLIBC_2.2 system F -GLIBC_2.2 tcdrain F -GLIBC_2.2 vfork F -GLIBC_2.2 wait F -GLIBC_2.2 waitpid F -GLIBC_2.2 write F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 pthread_getattr_np F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F diff --git a/sysdeps/unix/sysv/linux/hppa/libresolv.abilist b/sysdeps/unix/sysv/linux/hppa/libresolv.abilist deleted file mode 100644 index 4d50e7c8c6..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/libresolv.abilist +++ /dev/null @@ -1,100 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __b64_ntop F -GLIBC_2.0 __b64_pton F -GLIBC_2.0 __dn_comp F -GLIBC_2.0 __dn_count_labels F -GLIBC_2.0 __dn_skipname F -GLIBC_2.0 __fp_nquery F -GLIBC_2.0 __fp_query F -GLIBC_2.0 __fp_resstat F -GLIBC_2.0 __hostalias F -GLIBC_2.0 __loc_aton F -GLIBC_2.0 __loc_ntoa F -GLIBC_2.0 __p_cdname F -GLIBC_2.0 __p_cdnname F -GLIBC_2.0 __p_class F -GLIBC_2.0 __p_class_syms D 0x54 -GLIBC_2.0 __p_fqname F -GLIBC_2.0 __p_fqnname F -GLIBC_2.0 __p_option F -GLIBC_2.0 __p_query F -GLIBC_2.0 __p_secstodate F -GLIBC_2.0 __p_time F -GLIBC_2.0 __p_type F -GLIBC_2.0 __p_type_syms D 0x228 -GLIBC_2.0 __putlong F -GLIBC_2.0 __putshort F -GLIBC_2.0 __res_close F -GLIBC_2.0 __res_dnok F -GLIBC_2.0 __res_hnok F -GLIBC_2.0 __res_isourserver F -GLIBC_2.0 __res_mailok F -GLIBC_2.0 __res_nameinquery F -GLIBC_2.0 __res_ownok F -GLIBC_2.0 __res_queriesmatch F -GLIBC_2.0 __res_send F -GLIBC_2.0 __sym_ntop F -GLIBC_2.0 __sym_ntos F -GLIBC_2.0 __sym_ston F -GLIBC_2.0 _gethtbyaddr F -GLIBC_2.0 _gethtbyname F -GLIBC_2.0 _gethtbyname2 F -GLIBC_2.0 _gethtent F -GLIBC_2.0 _getlong F -GLIBC_2.0 _getshort F -GLIBC_2.0 _res_opcodes D 0x40 -GLIBC_2.0 _sethtent F -GLIBC_2.0 dn_expand F -GLIBC_2.0 inet_net_ntop F -GLIBC_2.0 inet_net_pton F -GLIBC_2.0 inet_neta F -GLIBC_2.0 res_gethostbyaddr F -GLIBC_2.0 res_gethostbyname F -GLIBC_2.0 res_gethostbyname2 F -GLIBC_2.0 res_mkquery F -GLIBC_2.0 res_query F -GLIBC_2.0 res_querydomain F -GLIBC_2.0 res_search F -GLIBC_2.0 res_send_setqhook F -GLIBC_2.0 res_send_setrhook F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __dn_expand F -GLIBC_2.2 __res_hostalias F -GLIBC_2.2 __res_mkquery F -GLIBC_2.2 __res_nmkquery F -GLIBC_2.2 __res_nquery F -GLIBC_2.2 __res_nquerydomain F -GLIBC_2.2 __res_nsearch F -GLIBC_2.2 __res_nsend F -GLIBC_2.2 __res_query F -GLIBC_2.2 __res_querydomain F -GLIBC_2.2 __res_search F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/hppa/librt.abilist b/sysdeps/unix/sysv/linux/hppa/librt.abilist deleted file mode 100644 index 15e4418863..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/librt.abilist +++ /dev/null @@ -1,47 +0,0 @@ -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 aio_cancel F -GLIBC_2.1 aio_cancel64 F -GLIBC_2.1 aio_error F -GLIBC_2.1 aio_error64 F -GLIBC_2.1 aio_fsync F -GLIBC_2.1 aio_fsync64 F -GLIBC_2.1 aio_init F -GLIBC_2.1 aio_read F -GLIBC_2.1 aio_read64 F -GLIBC_2.1 aio_return F -GLIBC_2.1 aio_return64 F -GLIBC_2.1 aio_suspend F -GLIBC_2.1 aio_suspend64 F -GLIBC_2.1 aio_write F -GLIBC_2.1 aio_write64 F -GLIBC_2.1 lio_listio F -GLIBC_2.1 lio_listio64 F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 clock_getcpuclockid F -GLIBC_2.2 clock_getres F -GLIBC_2.2 clock_gettime F -GLIBC_2.2 clock_nanosleep F -GLIBC_2.2 clock_settime F -GLIBC_2.2 shm_open F -GLIBC_2.2 shm_unlink F -GLIBC_2.2 timer_create F -GLIBC_2.2 timer_delete F -GLIBC_2.2 timer_getoverrun F -GLIBC_2.2 timer_gettime F -GLIBC_2.2 timer_settime F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/hppa/libthread_db.abilist b/sysdeps/unix/sysv/linux/hppa/libthread_db.abilist deleted file mode 100644 index a8a8c2c68d..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/libthread_db.abilist +++ /dev/null @@ -1,44 +0,0 @@ -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 td_init F -GLIBC_2.1.3 td_log F -GLIBC_2.1.3 td_ta_clear_event F -GLIBC_2.1.3 td_ta_delete F -GLIBC_2.1.3 td_ta_enable_stats F -GLIBC_2.1.3 td_ta_event_addr F -GLIBC_2.1.3 td_ta_event_getmsg F -GLIBC_2.1.3 td_ta_get_nthreads F -GLIBC_2.1.3 td_ta_get_ph F -GLIBC_2.1.3 td_ta_get_stats F -GLIBC_2.1.3 td_ta_map_id2thr F -GLIBC_2.1.3 td_ta_map_lwp2thr F -GLIBC_2.1.3 td_ta_new F -GLIBC_2.1.3 td_ta_reset_stats F -GLIBC_2.1.3 td_ta_set_event F -GLIBC_2.1.3 td_ta_setconcurrency F -GLIBC_2.1.3 td_ta_thr_iter F -GLIBC_2.1.3 td_ta_tsd_iter F -GLIBC_2.1.3 td_thr_clear_event F -GLIBC_2.1.3 td_thr_dbresume F -GLIBC_2.1.3 td_thr_dbsuspend F -GLIBC_2.1.3 td_thr_event_enable F -GLIBC_2.1.3 td_thr_event_getmsg F -GLIBC_2.1.3 td_thr_get_info F -GLIBC_2.1.3 td_thr_getfpregs F -GLIBC_2.1.3 td_thr_getgregs F -GLIBC_2.1.3 td_thr_getxregs F -GLIBC_2.1.3 td_thr_getxregsize F -GLIBC_2.1.3 td_thr_set_event F -GLIBC_2.1.3 td_thr_setfpregs F -GLIBC_2.1.3 td_thr_setgregs F -GLIBC_2.1.3 td_thr_setprio F -GLIBC_2.1.3 td_thr_setsigpending F -GLIBC_2.1.3 td_thr_setxregs F -GLIBC_2.1.3 td_thr_sigsetmask F -GLIBC_2.1.3 td_thr_tsd F -GLIBC_2.1.3 td_thr_validate F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 td_symbol_list F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F diff --git a/sysdeps/unix/sysv/linux/hppa/libutil.abilist b/sysdeps/unix/sysv/linux/hppa/libutil.abilist deleted file mode 100644 index 89c67755c4..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 forkpty F -GLIBC_2.0 login F -GLIBC_2.0 login_tty F -GLIBC_2.0 logout F -GLIBC_2.0 logwtmp F -GLIBC_2.0 openpty F diff --git a/sysdeps/unix/sysv/linux/hppa/localplt.data b/sysdeps/unix/sysv/linux/hppa/localplt.data deleted file mode 100644 index 9dd81b47c8..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/localplt.data +++ /dev/null @@ -1,24 +0,0 @@ -# See scripts/check-localplt.awk for how this file is processed. -# PLT use is required for the malloc family and for matherr because -# users can define their own functions and have library internals call them. -libc.so: calloc -libc.so: free -libc.so: malloc -libc.so: memalign -libc.so: realloc -libc.so: _exit -libc.so: __sigsetjmp -libc.so: _IO_funlockfile -libc.so: sigprocmask -libc.so: __errno_location -libm.so: matherr -libpthread.so: __errno_location -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/unix/sysv/linux/hppa/lxstat.c b/sysdeps/unix/sysv/linux/hppa/lxstat.c deleted file mode 100644 index 0efa0aea49..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/lxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/hppa/makecontext.c b/sysdeps/unix/sysv/linux/hppa/makecontext.c deleted file mode 100644 index 9b02e49608..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/makecontext.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Create new context. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Helge Deller , 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* POSIX only supports integer arguments. */ - -/* Stack must be 64-byte aligned at all times. */ -#define STACK_ALIGN 64 -/* Size of frame marker in unsigned long words. */ -#define FRAME_SIZE_UL 8 -/* Size of frame marker in bytes. */ -#define FRAME_SIZE_BYTES (8 * sizeof(unsigned long)) -/* Size of X arguments in bytes. */ -#define ARGS(x) (x * sizeof(unsigned long)) - -void -__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) -{ - unsigned long *sp, *osp; - va_list ap; - int i; - - /* Create a 64-byte aligned frame to store args. Use ss_sp if - it is available, otherwise be robust and use the currently - saved stack pointer. */ - if (ucp->uc_stack.ss_sp && ucp->uc_stack.ss_size) - osp = (unsigned long *)ucp->uc_stack.ss_sp; - else - osp = (unsigned long *)ucp->uc_mcontext.sc_gr[30]; - - sp = (unsigned long *)((((unsigned long) osp) - + FRAME_SIZE_BYTES + ARGS(argc) + STACK_ALIGN) - & ~(STACK_ALIGN - 1)); - - /* Use new frame. */ - ucp->uc_mcontext.sc_gr[30] = ((unsigned long) sp); - - /* Finish frame setup. */ - if (ucp->uc_link) - { - /* Returning to the next context and next frame. */ - sp[-4/sizeof(unsigned long)] = ucp->uc_link->uc_mcontext.sc_gr[30]; - sp[-20/sizeof(unsigned long)] = ucp->uc_link->uc_mcontext.sc_gr[2]; - } - else - { - /* This is the main context. No frame marker, and no return address. */ - sp[-4/sizeof(unsigned long)] = 0x0; - sp[-20/sizeof(unsigned long)] = 0x0; - } - - /* Store address to jump to. */ - ucp->uc_mcontext.sc_gr[2] = (unsigned long) func; - - /* Process arguments. */ - va_start (ap, argc); - for (i = 0; i < argc; ++i) - { - if (i < 4) - { - ucp->uc_mcontext.sc_gr[26-i] = va_arg (ap, int); - continue; - } - - if ((i < 8) && (sizeof(unsigned long) == 8)) - { - /* 64bit: r19-r22 are arg7-arg4. */ - ucp->uc_mcontext.sc_gr[22+4-i] = va_arg (ap, int); - continue; - } - - /* All other arguments go on the stack. */ - sp[-1 * (FRAME_SIZE_UL + 1 + i)] = va_arg (ap, int); - } - va_end (ap); -} -weak_alias(__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/hppa/profil-counter.h b/sysdeps/unix/sysv/linux/hppa/profil-counter.h deleted file mode 100644 index 0bb6e37298..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/profil-counter.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Machine-dependent SIGPROF signal handler. PA-RISC version - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -static void -__profil_counter (int signr, siginfo_t *si, struct ucontext *uctx) -{ - unsigned long ip = uctx->uc_mcontext.sc_iaoq[0] & ~0x3; - profil_count ((void *) ip); -} diff --git a/sysdeps/unix/sysv/linux/hppa/pt-vfork.S b/sysdeps/unix/sysv/linux/hppa/pt-vfork.S deleted file mode 100644 index fc4573c86b..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/pt-vfork.S +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#define _ERRNO_H 1 -#include -#include - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -.Lthread_start: ASM_LINE_SEP - - /* r26, r25, r24, r23 are free since vfork has no arguments */ -ENTRY(__vfork) - /* We must not create a frame. When the child unwinds to call - exec it will clobber the same frame that the parent - needs to unwind. */ - - /* Save the PIC register. */ -#ifdef PIC - copy %r19, %r25 /* parent */ -#endif - - /* Syscall saves and restores all register states */ - ble 0x100(%sr2,%r0) - ldi __NR_vfork,%r20 - - /* Check for error */ - ldi -4096,%r1 - comclr,>>= %r1,%ret0,%r0 /* Note: unsigned compare. */ - b,n .Lerror - - /* Return, and DO NOT restore rp. The child may have called - functions that updated the frame's rp. This works because - the kernel ensures rp is preserved across the vfork - syscall. */ - bv,n %r0(%rp) - -.Lerror: - /* Now we need a stack to call a function. We are assured - that there is no child now, so it's safe to create - a frame. */ - stw %rp, -20(%sp) - stwm %r3, 64(%sp) - stw %sp, -4(%sp) - - sub %r0,%ret0,%r3 - SYSCALL_ERROR_HANDLER - /* Restore the PIC register (in delay slot) on error */ -#ifdef PIC - copy %r25, %r19 /* parent */ -#else - nop -#endif - /* Write syscall return into errno location */ - stw %r3, 0(%ret0) - ldw -84(%sp), %rp - bv %r0(%rp) - ldwm -64(%sp), %r3 -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) -weak_alias (__vfork, vfork) diff --git a/sysdeps/unix/sysv/linux/hppa/pthread.h b/sysdeps/unix/sysv/linux/hppa/pthread.h deleted file mode 100644 index ac617201d2..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/pthread.h +++ /dev/null @@ -1,1203 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _PTHREAD_H -#define _PTHREAD_H 1 - -#include -#include -#include -#include - -#include -#include -#include - - -/* Detach state. */ -enum -{ - PTHREAD_CREATE_JOINABLE, -#define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE - PTHREAD_CREATE_DETACHED -#define PTHREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED -}; - - -/* Mutex types. */ -enum -{ - PTHREAD_MUTEX_TIMED_NP, - PTHREAD_MUTEX_RECURSIVE_NP, - PTHREAD_MUTEX_ERRORCHECK_NP, - PTHREAD_MUTEX_ADAPTIVE_NP -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 - , - PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP, - PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP, - PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP, - PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL -#endif -#ifdef __USE_GNU - /* For compatibility. */ - , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP -#endif -}; - - -#ifdef __USE_XOPEN2K -/* Robust mutex or not flags. */ -enum -{ - PTHREAD_MUTEX_STALLED, - PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED, - PTHREAD_MUTEX_ROBUST, - PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST -}; -#endif - - -#if defined __USE_POSIX199506 || defined __USE_UNIX98 -/* Mutex protocols. */ -enum -{ - PTHREAD_PRIO_NONE, - PTHREAD_PRIO_INHERIT, - PTHREAD_PRIO_PROTECT -}; -#endif - - -#ifdef __PTHREAD_MUTEX_HAVE_PREV -# define PTHREAD_MUTEX_INITIALIZER \ - { { 0, 0, 0, 0, 0, __PTHREAD_SPINS, { 0, 0 } } } -# ifdef __USE_GNU -# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, __PTHREAD_SPINS, { 0, 0 } } } -# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, __PTHREAD_SPINS, { 0, 0 } } } -# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __PTHREAD_SPINS, { 0, 0 } } } -# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __PTHREAD_SPINS, { 0, 0 } } } - -# endif -#else -# define PTHREAD_MUTEX_INITIALIZER \ - { { 0, 0, 0, 0, 0, { __PTHREAD_SPINS } } } -# ifdef __USE_GNU -# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { __PTHREAD_SPINS } } } -# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, { __PTHREAD_SPINS } } } -# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, { __PTHREAD_SPINS } } } - -# endif -#endif - - -/* Read-write lock types. */ -#if defined __USE_UNIX98 || defined __USE_XOPEN2K -enum -{ - PTHREAD_RWLOCK_PREFER_READER_NP, - PTHREAD_RWLOCK_PREFER_WRITER_NP, - PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, - PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP -}; - -/* Define __PTHREAD_RWLOCK_INT_FLAGS_SHARED to 1 if pthread_rwlock_t - has the shared field. All 64-bit architectures have the shared field - in pthread_rwlock_t. */ -#ifndef __PTHREAD_RWLOCK_INT_FLAGS_SHARED -# if __WORDSIZE == 64 -# define __PTHREAD_RWLOCK_INT_FLAGS_SHARED 1 -# endif -#endif - -/* Read-write lock initializers. */ -# define PTHREAD_RWLOCK_INITIALIZER \ - { { 0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, 0 } } -# ifdef __USE_GNU -# ifdef __PTHREAD_RWLOCK_INT_FLAGS_SHARED -# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ - { { 0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, \ - PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } } -# else -# if __BYTE_ORDER == __LITTLE_ENDIAN -# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ - { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, \ - 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, 0 } } -# else -# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,\ - 0 } } -# endif -# endif -# endif -#endif /* Unix98 or XOpen2K */ - - -/* Scheduler inheritance. */ -enum -{ - PTHREAD_INHERIT_SCHED, -#define PTHREAD_INHERIT_SCHED PTHREAD_INHERIT_SCHED - PTHREAD_EXPLICIT_SCHED -#define PTHREAD_EXPLICIT_SCHED PTHREAD_EXPLICIT_SCHED -}; - - -/* Scope handling. */ -enum -{ - PTHREAD_SCOPE_SYSTEM, -#define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_SYSTEM - PTHREAD_SCOPE_PROCESS -#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_PROCESS -}; - - -/* Process shared or private flag. */ -enum -{ - PTHREAD_PROCESS_PRIVATE, -#define PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE - PTHREAD_PROCESS_SHARED -#define PTHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED -}; - - - -/* Conditional variable handling. */ -#define PTHREAD_COND_INITIALIZER { { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } } - - -/* Cleanup buffers */ -struct _pthread_cleanup_buffer -{ - void (*__routine) (void *); /* Function to call. */ - void *__arg; /* Its argument. */ - int __canceltype; /* Saved cancellation type. */ - struct _pthread_cleanup_buffer *__prev; /* Chaining of cleanup functions. */ -}; - -/* Cancellation */ -enum -{ - PTHREAD_CANCEL_ENABLE, -#define PTHREAD_CANCEL_ENABLE PTHREAD_CANCEL_ENABLE - PTHREAD_CANCEL_DISABLE -#define PTHREAD_CANCEL_DISABLE PTHREAD_CANCEL_DISABLE -}; -enum -{ - PTHREAD_CANCEL_DEFERRED, -#define PTHREAD_CANCEL_DEFERRED PTHREAD_CANCEL_DEFERRED - PTHREAD_CANCEL_ASYNCHRONOUS -#define PTHREAD_CANCEL_ASYNCHRONOUS PTHREAD_CANCEL_ASYNCHRONOUS -}; -#define PTHREAD_CANCELED ((void *) -1) - - -/* Single execution handling. */ -#define PTHREAD_ONCE_INIT 0 - - -#ifdef __USE_XOPEN2K -/* Value returned by 'pthread_barrier_wait' for one of the threads after - the required number of threads have called this function. - -1 is distinct from 0 and all errno constants */ -# define PTHREAD_BARRIER_SERIAL_THREAD -1 -#endif - - -__BEGIN_DECLS - -/* Create a new thread, starting with execution of START-ROUTINE - getting passed ARG. Creation attributed come from ATTR. The new - handle is stored in *NEWTHREAD. */ -extern int pthread_create (pthread_t *__restrict __newthread, - const pthread_attr_t *__restrict __attr, - void *(*__start_routine) (void *), - void *__restrict __arg) __THROWNL __nonnull ((1, 3)); - -/* Terminate calling thread. - - The registered cleanup handlers are called via exception handling - so we cannot mark this function with __THROW.*/ -extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__)); - -/* Make calling thread wait for termination of the thread TH. The - exit status of the thread is stored in *THREAD_RETURN, if THREAD_RETURN - is not NULL. - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int pthread_join (pthread_t __th, void **__thread_return); - -#ifdef __USE_GNU -/* Check whether thread TH has terminated. If yes return the status of - the thread in *THREAD_RETURN, if THREAD_RETURN is not NULL. */ -extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __THROW; - -/* Make calling thread wait for termination of the thread TH, but only - until TIMEOUT. The exit status of the thread is stored in - *THREAD_RETURN, if THREAD_RETURN is not NULL. - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return, - const struct timespec *__abstime); -#endif - -/* Indicate that the thread TH is never to be joined with PTHREAD_JOIN. - The resources of TH will therefore be freed immediately when it - terminates, instead of waiting for another thread to perform PTHREAD_JOIN - on it. */ -extern int pthread_detach (pthread_t __th) __THROW; - - -/* Obtain the identifier of the current thread. */ -extern pthread_t pthread_self (void) __THROW __attribute__ ((__const__)); - -/* Compare two thread identifiers. */ -extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) - __THROW __attribute__ ((__const__)); - - -/* Thread attribute handling. */ - -/* Initialize thread attribute *ATTR with default attributes - (detachstate is PTHREAD_JOINABLE, scheduling policy is SCHED_OTHER, - no user-provided stack). */ -extern int pthread_attr_init (pthread_attr_t *__attr) __THROW __nonnull ((1)); - -/* Destroy thread attribute *ATTR. */ -extern int pthread_attr_destroy (pthread_attr_t *__attr) - __THROW __nonnull ((1)); - -/* Get detach state attribute. */ -extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr, - int *__detachstate) - __THROW __nonnull ((1, 2)); - -/* Set detach state attribute. */ -extern int pthread_attr_setdetachstate (pthread_attr_t *__attr, - int __detachstate) - __THROW __nonnull ((1)); - - -/* Get the size of the guard area created for stack overflow protection. */ -extern int pthread_attr_getguardsize (const pthread_attr_t *__attr, - size_t *__guardsize) - __THROW __nonnull ((1, 2)); - -/* Set the size of the guard area created for stack overflow protection. */ -extern int pthread_attr_setguardsize (pthread_attr_t *__attr, - size_t __guardsize) - __THROW __nonnull ((1)); - - -/* Return in *PARAM the scheduling parameters of *ATTR. */ -extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr, - struct sched_param *__restrict __param) - __THROW __nonnull ((1, 2)); - -/* Set scheduling parameters (priority, etc) in *ATTR according to PARAM. */ -extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr, - const struct sched_param *__restrict - __param) __THROW __nonnull ((1, 2)); - -/* Return in *POLICY the scheduling policy of *ATTR. */ -extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict - __attr, int *__restrict __policy) - __THROW __nonnull ((1, 2)); - -/* Set scheduling policy in *ATTR according to POLICY. */ -extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy) - __THROW __nonnull ((1)); - -/* Return in *INHERIT the scheduling inheritance mode of *ATTR. */ -extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict - __attr, int *__restrict __inherit) - __THROW __nonnull ((1, 2)); - -/* Set scheduling inheritance mode in *ATTR according to INHERIT. */ -extern int pthread_attr_setinheritsched (pthread_attr_t *__attr, - int __inherit) - __THROW __nonnull ((1)); - - -/* Return in *SCOPE the scheduling contention scope of *ATTR. */ -extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr, - int *__restrict __scope) - __THROW __nonnull ((1, 2)); - -/* Set scheduling contention scope in *ATTR according to SCOPE. */ -extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope) - __THROW __nonnull ((1)); - -/* Return the previously set address for the stack. */ -extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict - __attr, void **__restrict __stackaddr) - __THROW __nonnull ((1, 2)) __attribute_deprecated__; - -/* Set the starting address of the stack of the thread to be created. - Depending on whether the stack grows up or down the value must either - be higher or lower than all the address in the memory block. The - minimal size of the block must be PTHREAD_STACK_MIN. */ -extern int pthread_attr_setstackaddr (pthread_attr_t *__attr, - void *__stackaddr) - __THROW __nonnull ((1)) __attribute_deprecated__; - -/* Return the currently used minimal stack size. */ -extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict - __attr, size_t *__restrict __stacksize) - __THROW __nonnull ((1, 2)); - -/* Add information about the minimum stack size needed for the thread - to be started. This size must never be less than PTHREAD_STACK_MIN - and must also not exceed the system limits. */ -extern int pthread_attr_setstacksize (pthread_attr_t *__attr, - size_t __stacksize) - __THROW __nonnull ((1)); - -#ifdef __USE_XOPEN2K -/* Return the previously set address for the stack. */ -extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr, - void **__restrict __stackaddr, - size_t *__restrict __stacksize) - __THROW __nonnull ((1, 2, 3)); - -/* The following two interfaces are intended to replace the last two. They - require setting the address as well as the size since only setting the - address will make the implementation on some architectures impossible. */ -extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr, - size_t __stacksize) __THROW __nonnull ((1)); -#endif - -#ifdef __USE_GNU -/* Thread created with attribute ATTR will be limited to run only on - the processors represented in CPUSET. */ -extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr, - size_t __cpusetsize, - const cpu_set_t *__cpuset) - __THROW __nonnull ((1, 3)); - -/* Get bit set in CPUSET representing the processors threads created with - ATTR can run on. */ -extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr, - size_t __cpusetsize, - cpu_set_t *__cpuset) - __THROW __nonnull ((1, 3)); - -/* Get the default attributes used by pthread_create in this process. */ -extern int pthread_getattr_default_np (pthread_attr_t *__attr) - __THROW __nonnull ((1)); - -/* Set the default attributes to be used by pthread_create in this - process. */ -extern int pthread_setattr_default_np (const pthread_attr_t *__attr) - __THROW __nonnull ((1)); - -/* Initialize thread attribute *ATTR with attributes corresponding to the - already running thread TH. It shall be called on uninitialized ATTR - and destroyed with pthread_attr_destroy when no longer needed. */ -extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr) - __THROW __nonnull ((2)); -#endif - - -/* Functions for scheduling control. */ - -/* Set the scheduling parameters for TARGET_THREAD according to POLICY - and *PARAM. */ -extern int pthread_setschedparam (pthread_t __target_thread, int __policy, - const struct sched_param *__param) - __THROW __nonnull ((3)); - -/* Return in *POLICY and *PARAM the scheduling parameters for TARGET_THREAD. */ -extern int pthread_getschedparam (pthread_t __target_thread, - int *__restrict __policy, - struct sched_param *__restrict __param) - __THROW __nonnull ((2, 3)); - -/* Set the scheduling priority for TARGET_THREAD. */ -extern int pthread_setschedprio (pthread_t __target_thread, int __prio) - __THROW; - - -#ifdef __USE_GNU -/* Get thread name visible in the kernel and its interfaces. */ -extern int pthread_getname_np (pthread_t __target_thread, char *__buf, - size_t __buflen) - __THROW __nonnull ((2)); - -/* Set thread name visible in the kernel and its interfaces. */ -extern int pthread_setname_np (pthread_t __target_thread, const char *__name) - __THROW __nonnull ((2)); -#endif - - -#ifdef __USE_UNIX98 -/* Determine level of concurrency. */ -extern int pthread_getconcurrency (void) __THROW; - -/* Set new concurrency level to LEVEL. */ -extern int pthread_setconcurrency (int __level) __THROW; -#endif - -#ifdef __USE_GNU -/* Yield the processor to another thread or process. - This function is similar to the POSIX `sched_yield' function but - might be differently implemented in the case of a m-on-n thread - implementation. */ -extern int pthread_yield (void) __THROW; - - -/* Limit specified thread TH to run only on the processors represented - in CPUSET. */ -extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize, - const cpu_set_t *__cpuset) - __THROW __nonnull ((3)); - -/* Get bit set in CPUSET representing the processors TH can run on. */ -extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize, - cpu_set_t *__cpuset) - __THROW __nonnull ((3)); -#endif - - -/* Functions for handling initialization. */ - -/* Guarantee that the initialization function INIT_ROUTINE will be called - only once, even if pthread_once is executed several times with the - same ONCE_CONTROL argument. ONCE_CONTROL must point to a static or - extern variable initialized to PTHREAD_ONCE_INIT. - - The initialization functions might throw exception which is why - this function is not marked with __THROW. */ -extern int pthread_once (pthread_once_t *__once_control, - void (*__init_routine) (void)) __nonnull ((1, 2)); - - -/* Functions for handling cancellation. - - Note that these functions are explicitly not marked to not throw an - exception in C++ code. If cancellation is implemented by unwinding - this is necessary to have the compiler generate the unwind information. */ - -/* Set cancelability state of current thread to STATE, returning old - state in *OLDSTATE if OLDSTATE is not NULL. */ -extern int pthread_setcancelstate (int __state, int *__oldstate); - -/* Set cancellation state of current thread to TYPE, returning the old - type in *OLDTYPE if OLDTYPE is not NULL. */ -extern int pthread_setcanceltype (int __type, int *__oldtype); - -/* Cancel THREAD immediately or at the next possibility. */ -extern int pthread_cancel (pthread_t __th); - -/* Test for pending cancellation for the current thread and terminate - the thread as per pthread_exit(PTHREAD_CANCELED) if it has been - cancelled. */ -extern void pthread_testcancel (void); - - -/* Cancellation handling with integration into exception handling. */ - -typedef struct -{ - struct - { - __jmp_buf __cancel_jmp_buf; - int __mask_was_saved; - } __cancel_jmp_buf[1]; - void *__pad[4]; -} __pthread_unwind_buf_t __attribute__ ((__aligned__)); - -/* No special attributes by default. */ -#ifndef __cleanup_fct_attribute -# define __cleanup_fct_attribute -#endif - - -/* Structure to hold the cleanup handler information. */ -struct __pthread_cleanup_frame -{ - void (*__cancel_routine) (void *); - void *__cancel_arg; - int __do_it; - int __cancel_type; -}; - -#if defined __GNUC__ && defined __EXCEPTIONS -# ifdef __cplusplus -/* Class to handle cancellation handler invocation. */ -class __pthread_cleanup_class -{ - void (*__cancel_routine) (void *); - void *__cancel_arg; - int __do_it; - int __cancel_type; - - public: - __pthread_cleanup_class (void (*__fct) (void *), void *__arg) - : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { } - ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); } - void __setdoit (int __newval) { __do_it = __newval; } - void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, - &__cancel_type); } - void __restore () const { pthread_setcanceltype (__cancel_type, 0); } -}; - -/* Install a cleanup handler: ROUTINE will be called with arguments ARG - when the thread is canceled or calls pthread_exit. ROUTINE will also - be called with arguments ARG when the matching pthread_cleanup_pop - is executed with non-zero EXECUTE argument. - - pthread_cleanup_push and pthread_cleanup_pop are macros and must always - be used in matching pairs at the same nesting level of braces. */ -# define pthread_cleanup_push(routine, arg) \ - do { \ - __pthread_cleanup_class __clframe (routine, arg) - -/* Remove a cleanup handler installed by the matching pthread_cleanup_push. - If EXECUTE is non-zero, the handler function is called. */ -# define pthread_cleanup_pop(execute) \ - __clframe.__setdoit (execute); \ - } while (0) - -# ifdef __USE_GNU -/* Install a cleanup handler as pthread_cleanup_push does, but also - saves the current cancellation type and sets it to deferred - cancellation. */ -# define pthread_cleanup_push_defer_np(routine, arg) \ - do { \ - __pthread_cleanup_class __clframe (routine, arg); \ - __clframe.__defer () - -/* Remove a cleanup handler as pthread_cleanup_pop does, but also - restores the cancellation type that was in effect when the matching - pthread_cleanup_push_defer was called. */ -# define pthread_cleanup_pop_restore_np(execute) \ - __clframe.__restore (); \ - __clframe.__setdoit (execute); \ - } while (0) -# endif -# else -/* Function called to call the cleanup handler. As an extern inline - function the compiler is free to decide inlining the change when - needed or fall back on the copy which must exist somewhere - else. */ -__extern_inline void -__pthread_cleanup_routine (struct __pthread_cleanup_frame *__frame) -{ - if (__frame->__do_it) - __frame->__cancel_routine (__frame->__cancel_arg); -} - -/* Install a cleanup handler: ROUTINE will be called with arguments ARG - when the thread is canceled or calls pthread_exit. ROUTINE will also - be called with arguments ARG when the matching pthread_cleanup_pop - is executed with non-zero EXECUTE argument. - - pthread_cleanup_push and pthread_cleanup_pop are macros and must always - be used in matching pairs at the same nesting level of braces. */ -# define pthread_cleanup_push(routine, arg) \ - do { \ - struct __pthread_cleanup_frame __clframe \ - __attribute__ ((__cleanup__ (__pthread_cleanup_routine))) \ - = { .__cancel_routine = (routine), .__cancel_arg = (arg), \ - .__do_it = 1 }; - -/* Remove a cleanup handler installed by the matching pthread_cleanup_push. - If EXECUTE is non-zero, the handler function is called. */ -# define pthread_cleanup_pop(execute) \ - __clframe.__do_it = (execute); \ - } while (0) - -# ifdef __USE_GNU -/* Install a cleanup handler as pthread_cleanup_push does, but also - saves the current cancellation type and sets it to deferred - cancellation. */ -# define pthread_cleanup_push_defer_np(routine, arg) \ - do { \ - struct __pthread_cleanup_frame __clframe \ - __attribute__ ((__cleanup__ (__pthread_cleanup_routine))) \ - = { .__cancel_routine = (routine), .__cancel_arg = (arg), \ - .__do_it = 1 }; \ - (void) pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, \ - &__clframe.__cancel_type) - -/* Remove a cleanup handler as pthread_cleanup_pop does, but also - restores the cancellation type that was in effect when the matching - pthread_cleanup_push_defer was called. */ -# define pthread_cleanup_pop_restore_np(execute) \ - (void) pthread_setcanceltype (__clframe.__cancel_type, NULL); \ - __clframe.__do_it = (execute); \ - } while (0) -# endif -# endif -#else -/* Install a cleanup handler: ROUTINE will be called with arguments ARG - when the thread is canceled or calls pthread_exit. ROUTINE will also - be called with arguments ARG when the matching pthread_cleanup_pop - is executed with non-zero EXECUTE argument. - - pthread_cleanup_push and pthread_cleanup_pop are macros and must always - be used in matching pairs at the same nesting level of braces. */ -# define pthread_cleanup_push(routine, arg) \ - do { \ - __pthread_unwind_buf_t __cancel_buf; \ - void (*__cancel_routine) (void *) = (routine); \ - void *__cancel_arg = (arg); \ - int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *) \ - __cancel_buf.__cancel_jmp_buf, 0); \ - if (__glibc_unlikely (__not_first_call)) \ - { \ - __cancel_routine (__cancel_arg); \ - __pthread_unwind_next (&__cancel_buf); \ - /* NOTREACHED */ \ - } \ - \ - __pthread_register_cancel (&__cancel_buf); \ - do { -extern void __pthread_register_cancel (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute; - -/* Remove a cleanup handler installed by the matching pthread_cleanup_push. - If EXECUTE is non-zero, the handler function is called. */ -# define pthread_cleanup_pop(execute) \ - do { } while (0);/* Empty to allow label before pthread_cleanup_pop. */\ - } while (0); \ - __pthread_unregister_cancel (&__cancel_buf); \ - if (execute) \ - __cancel_routine (__cancel_arg); \ - } while (0) -extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute; - -# ifdef __USE_GNU -/* Install a cleanup handler as pthread_cleanup_push does, but also - saves the current cancellation type and sets it to deferred - cancellation. */ -# define pthread_cleanup_push_defer_np(routine, arg) \ - do { \ - __pthread_unwind_buf_t __cancel_buf; \ - void (*__cancel_routine) (void *) = (routine); \ - void *__cancel_arg = (arg); \ - int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *) \ - __cancel_buf.__cancel_jmp_buf, 0); \ - if (__glibc_unlikely (__not_first_call)) \ - { \ - __cancel_routine (__cancel_arg); \ - __pthread_unwind_next (&__cancel_buf); \ - /* NOTREACHED */ \ - } \ - \ - __pthread_register_cancel_defer (&__cancel_buf); \ - do { -extern void __pthread_register_cancel_defer (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute; - -/* Remove a cleanup handler as pthread_cleanup_pop does, but also - restores the cancellation type that was in effect when the matching - pthread_cleanup_push_defer was called. */ -# define pthread_cleanup_pop_restore_np(execute) \ - do { } while (0);/* Empty to allow label before pthread_cleanup_pop. */\ - } while (0); \ - __pthread_unregister_cancel_restore (&__cancel_buf); \ - if (execute) \ - __cancel_routine (__cancel_arg); \ - } while (0) -extern void __pthread_unregister_cancel_restore (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute; -# endif - -/* Internal interface to initiate cleanup. */ -extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute __attribute__ ((__noreturn__)) -# ifndef SHARED - __attribute__ ((__weak__)) -# endif - ; -#endif - -/* Function used in the macros. */ -struct __jmp_buf_tag; -extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) __THROWNL; - - -/* Mutex handling. */ - -/* Initialize a mutex. */ -extern int pthread_mutex_init (pthread_mutex_t *__mutex, - const pthread_mutexattr_t *__mutexattr) - __THROW __nonnull ((1)); - -/* Destroy a mutex. */ -extern int pthread_mutex_destroy (pthread_mutex_t *__mutex) - __THROW __nonnull ((1)); - -/* Try locking a mutex. */ -extern int pthread_mutex_trylock (pthread_mutex_t *__mutex) - __THROWNL __nonnull ((1)); - -/* Lock a mutex. */ -extern int pthread_mutex_lock (pthread_mutex_t *__mutex) - __THROWNL __nonnull ((1)); - -#ifdef __USE_XOPEN2K -/* Wait until lock becomes available, or specified time passes. */ -extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex, - const struct timespec *__restrict - __abstime) __THROWNL __nonnull ((1, 2)); -#endif - -/* Unlock a mutex. */ -extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) - __THROWNL __nonnull ((1)); - - -/* Get the priority ceiling of MUTEX. */ -extern int pthread_mutex_getprioceiling (const pthread_mutex_t * - __restrict __mutex, - int *__restrict __prioceiling) - __THROW __nonnull ((1, 2)); - -/* Set the priority ceiling of MUTEX to PRIOCEILING, return old - priority ceiling value in *OLD_CEILING. */ -extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex, - int __prioceiling, - int *__restrict __old_ceiling) - __THROW __nonnull ((1, 3)); - - -#ifdef __USE_XOPEN2K8 -/* Declare the state protected by MUTEX as consistent. */ -extern int pthread_mutex_consistent (pthread_mutex_t *__mutex) - __THROW __nonnull ((1)); -# ifdef __USE_GNU -extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex) - __THROW __nonnull ((1)); -# endif -#endif - - -/* Functions for handling mutex attributes. */ - -/* Initialize mutex attribute object ATTR with default attributes - (kind is PTHREAD_MUTEX_TIMED_NP). */ -extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr) - __THROW __nonnull ((1)); - -/* Destroy mutex attribute object ATTR. */ -extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) - __THROW __nonnull ((1)); - -/* Get the process-shared flag of the mutex attribute ATTR. */ -extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t * - __restrict __attr, - int *__restrict __pshared) - __THROW __nonnull ((1, 2)); - -/* Set the process-shared flag of the mutex attribute ATTR. */ -extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr, - int __pshared) - __THROW __nonnull ((1)); - -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 -/* Return in *KIND the mutex kind attribute in *ATTR. */ -extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict - __attr, int *__restrict __kind) - __THROW __nonnull ((1, 2)); - -/* Set the mutex kind attribute in *ATTR to KIND (either PTHREAD_MUTEX_NORMAL, - PTHREAD_MUTEX_RECURSIVE, PTHREAD_MUTEX_ERRORCHECK, or - PTHREAD_MUTEX_DEFAULT). */ -extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind) - __THROW __nonnull ((1)); -#endif - -/* Return in *PROTOCOL the mutex protocol attribute in *ATTR. */ -extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t * - __restrict __attr, - int *__restrict __protocol) - __THROW __nonnull ((1, 2)); - -/* Set the mutex protocol attribute in *ATTR to PROTOCOL (either - PTHREAD_PRIO_NONE, PTHREAD_PRIO_INHERIT, or PTHREAD_PRIO_PROTECT). */ -extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr, - int __protocol) - __THROW __nonnull ((1)); - -/* Return in *PRIOCEILING the mutex prioceiling attribute in *ATTR. */ -extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t * - __restrict __attr, - int *__restrict __prioceiling) - __THROW __nonnull ((1, 2)); - -/* Set the mutex prioceiling attribute in *ATTR to PRIOCEILING. */ -extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr, - int __prioceiling) - __THROW __nonnull ((1)); - -#ifdef __USE_XOPEN2K -/* Get the robustness flag of the mutex attribute ATTR. */ -extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr, - int *__robustness) - __THROW __nonnull ((1, 2)); -# ifdef __USE_GNU -extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr, - int *__robustness) - __THROW __nonnull ((1, 2)); -# endif - -/* Set the robustness flag of the mutex attribute ATTR. */ -extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr, - int __robustness) - __THROW __nonnull ((1)); -# ifdef __USE_GNU -extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr, - int __robustness) - __THROW __nonnull ((1)); -# endif -#endif - - -#if defined __USE_UNIX98 || defined __USE_XOPEN2K -/* Functions for handling read-write locks. */ - -/* Initialize read-write lock RWLOCK using attributes ATTR, or use - the default values if later is NULL. */ -extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock, - const pthread_rwlockattr_t *__restrict - __attr) __THROW __nonnull ((1)); - -/* Destroy read-write lock RWLOCK. */ -extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock) - __THROW __nonnull ((1)); - -/* Acquire read lock for RWLOCK. */ -extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - -/* Try to acquire read lock for RWLOCK. */ -extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - -# ifdef __USE_XOPEN2K -/* Try to acquire read lock for RWLOCK or return after specfied time. */ -extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock, - const struct timespec *__restrict - __abstime) __THROWNL __nonnull ((1, 2)); -# endif - -/* Acquire write lock for RWLOCK. */ -extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - -/* Try to acquire write lock for RWLOCK. */ -extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - -# ifdef __USE_XOPEN2K -/* Try to acquire write lock for RWLOCK or return after specfied time. */ -extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock, - const struct timespec *__restrict - __abstime) __THROWNL __nonnull ((1, 2)); -# endif - -/* Unlock RWLOCK. */ -extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - - -/* Functions for handling read-write lock attributes. */ - -/* Initialize attribute object ATTR with default values. */ -extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr) - __THROW __nonnull ((1)); - -/* Destroy attribute object ATTR. */ -extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr) - __THROW __nonnull ((1)); - -/* Return current setting of process-shared attribute of ATTR in PSHARED. */ -extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t * - __restrict __attr, - int *__restrict __pshared) - __THROW __nonnull ((1, 2)); - -/* Set process-shared attribute of ATTR to PSHARED. */ -extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr, - int __pshared) - __THROW __nonnull ((1)); - -/* Return current setting of reader/writer preference. */ -extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t * - __restrict __attr, - int *__restrict __pref) - __THROW __nonnull ((1, 2)); - -/* Set reader/write preference. */ -extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr, - int __pref) __THROW __nonnull ((1)); -#endif - - -/* Functions for handling conditional variables. */ - -/* Initialize condition variable COND using attributes ATTR, or use - the default values if later is NULL. */ -extern int pthread_cond_init (pthread_cond_t *__restrict __cond, - const pthread_condattr_t *__restrict __cond_attr) - __THROW __nonnull ((1)); - -/* Destroy condition variable COND. */ -extern int pthread_cond_destroy (pthread_cond_t *__cond) - __THROW __nonnull ((1)); - -/* Wake up one thread waiting for condition variable COND. */ -extern int pthread_cond_signal (pthread_cond_t *__cond) - __THROWNL __nonnull ((1)); - -/* Wake up all threads waiting for condition variables COND. */ -extern int pthread_cond_broadcast (pthread_cond_t *__cond) - __THROWNL __nonnull ((1)); - -/* Wait for condition variable COND to be signaled or broadcast. - MUTEX is assumed to be locked before. - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int pthread_cond_wait (pthread_cond_t *__restrict __cond, - pthread_mutex_t *__restrict __mutex) - __nonnull ((1, 2)); - -/* Wait for condition variable COND to be signaled or broadcast until - ABSTIME. MUTEX is assumed to be locked before. ABSTIME is an - absolute time specification; zero is the beginning of the epoch - (00:00:00 GMT, January 1, 1970). - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond, - pthread_mutex_t *__restrict __mutex, - const struct timespec *__restrict __abstime) - __nonnull ((1, 2, 3)); - -/* Functions for handling condition variable attributes. */ - -/* Initialize condition variable attribute ATTR. */ -extern int pthread_condattr_init (pthread_condattr_t *__attr) - __THROW __nonnull ((1)); - -/* Destroy condition variable attribute ATTR. */ -extern int pthread_condattr_destroy (pthread_condattr_t *__attr) - __THROW __nonnull ((1)); - -/* Get the process-shared flag of the condition variable attribute ATTR. */ -extern int pthread_condattr_getpshared (const pthread_condattr_t * - __restrict __attr, - int *__restrict __pshared) - __THROW __nonnull ((1, 2)); - -/* Set the process-shared flag of the condition variable attribute ATTR. */ -extern int pthread_condattr_setpshared (pthread_condattr_t *__attr, - int __pshared) __THROW __nonnull ((1)); - -#ifdef __USE_XOPEN2K -/* Get the clock selected for the condition variable attribute ATTR. */ -extern int pthread_condattr_getclock (const pthread_condattr_t * - __restrict __attr, - __clockid_t *__restrict __clock_id) - __THROW __nonnull ((1, 2)); - -/* Set the clock selected for the condition variable attribute ATTR. */ -extern int pthread_condattr_setclock (pthread_condattr_t *__attr, - __clockid_t __clock_id) - __THROW __nonnull ((1)); -#endif - - -#ifdef __USE_XOPEN2K -/* Functions to handle spinlocks. */ - -/* Initialize the spinlock LOCK. If PSHARED is nonzero the spinlock can - be shared between different processes. */ -extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared) - __THROW __nonnull ((1)); - -/* Destroy the spinlock LOCK. */ -extern int pthread_spin_destroy (pthread_spinlock_t *__lock) - __THROW __nonnull ((1)); - -/* Wait until spinlock LOCK is retrieved. */ -extern int pthread_spin_lock (pthread_spinlock_t *__lock) - __THROWNL __nonnull ((1)); - -/* Try to lock spinlock LOCK. */ -extern int pthread_spin_trylock (pthread_spinlock_t *__lock) - __THROWNL __nonnull ((1)); - -/* Release spinlock LOCK. */ -extern int pthread_spin_unlock (pthread_spinlock_t *__lock) - __THROWNL __nonnull ((1)); - - -/* Functions to handle barriers. */ - -/* Initialize BARRIER with the attributes in ATTR. The barrier is - opened when COUNT waiters arrived. */ -extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier, - const pthread_barrierattr_t *__restrict - __attr, unsigned int __count) - __THROW __nonnull ((1)); - -/* Destroy a previously dynamically initialized barrier BARRIER. */ -extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) - __THROW __nonnull ((1)); - -/* Wait on barrier BARRIER. */ -extern int pthread_barrier_wait (pthread_barrier_t *__barrier) - __THROWNL __nonnull ((1)); - - -/* Initialize barrier attribute ATTR. */ -extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr) - __THROW __nonnull ((1)); - -/* Destroy previously dynamically initialized barrier attribute ATTR. */ -extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) - __THROW __nonnull ((1)); - -/* Get the process-shared flag of the barrier attribute ATTR. */ -extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t * - __restrict __attr, - int *__restrict __pshared) - __THROW __nonnull ((1, 2)); - -/* Set the process-shared flag of the barrier attribute ATTR. */ -extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr, - int __pshared) - __THROW __nonnull ((1)); -#endif - - -/* Functions for handling thread-specific data. */ - -/* Create a key value identifying a location in the thread-specific - data area. Each thread maintains a distinct thread-specific data - area. DESTR_FUNCTION, if non-NULL, is called with the value - associated to that key when the key is destroyed. - DESTR_FUNCTION is not called if the value associated is NULL when - the key is destroyed. */ -extern int pthread_key_create (pthread_key_t *__key, - void (*__destr_function) (void *)) - __THROW __nonnull ((1)); - -/* Destroy KEY. */ -extern int pthread_key_delete (pthread_key_t __key) __THROW; - -/* Return current value of the thread-specific data slot identified by KEY. */ -extern void *pthread_getspecific (pthread_key_t __key) __THROW; - -/* Store POINTER in the thread-specific data slot identified by KEY. */ -extern int pthread_setspecific (pthread_key_t __key, - const void *__pointer) __THROW ; - - -#ifdef __USE_XOPEN2K -/* Get ID of CPU-time clock for thread THREAD_ID. */ -extern int pthread_getcpuclockid (pthread_t __thread_id, - __clockid_t *__clock_id) - __THROW __nonnull ((2)); -#endif - - -/* Install handlers to be called when a new process is created with FORK. - The PREPARE handler is called in the parent process just before performing - FORK. The PARENT handler is called in the parent process just after FORK. - The CHILD handler is called in the child process. Each of the three - handlers can be NULL, meaning that no handler needs to be called at that - point. - PTHREAD_ATFORK can be called several times, in which case the PREPARE - handlers are called in LIFO order (last added with PTHREAD_ATFORK, - first called before FORK), and the PARENT and CHILD handlers are called - in FIFO (first added, first called). */ - -extern int pthread_atfork (void (*__prepare) (void), - void (*__parent) (void), - void (*__child) (void)) __THROW; - - -#ifdef __USE_EXTERN_INLINES -/* Optimizations. */ -__extern_inline int -__NTH (pthread_equal (pthread_t __thread1, pthread_t __thread2)) -{ - return __thread1 == __thread2; -} -#endif - -__END_DECLS - -#endif /* pthread.h */ - -#ifndef _PTHREAD_H_HPPA_ -#define _PTHREAD_H_HPPA_ 1 - -/* The pthread_cond_t initializer is compatible only with NPTL. We do not - want to be forwards compatible, we eventually want to drop the code - that has to clear the old LT initializer. */ -#undef PTHREAD_COND_INITIALIZER -#define PTHREAD_COND_INITIALIZER { { 0, 0, 0, (void *) 0, 0, 0, 0, 0, 0 } } - -/* The pthread_mutex_t and pthread_rwlock_t initializers are compatible - only with NPTL. NPTL assumes pthread_rwlock_t is all zero. */ -#undef PTHREAD_MUTEX_INITIALIZER -#undef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP -#undef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP -#undef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP -/* Mutex initializers. */ -#define PTHREAD_MUTEX_INITIALIZER \ - { { 0, 0, 0, 0, { 0, 0, 0, 0 }, 0, { 0 }, 0, 0 } } -#ifdef __USE_GNU -# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, { 0, 0, 0, 0 }, 0, { 0 }, 0, 0 } } -# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, { 0, 0, 0, 0 }, 0, { 0 }, 0, 0 } } -# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, { 0, 0, 0, 0 }, 0, { 0 }, 0, 0 } } -#endif - -#undef PTHREAD_RWLOCK_INITIALIZER -#undef PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP -/* Read-write lock initializers. */ -#define PTHREAD_RWLOCK_INITIALIZER \ - { { { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } -#ifdef __USE_GNU -# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ - { { { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,\ - 0, 0, 0 } } -#endif /* Unix98 or XOpen2K */ - -#endif diff --git a/sysdeps/unix/sysv/linux/hppa/pthreadP.h b/sysdeps/unix/sysv/linux/hppa/pthreadP.h deleted file mode 100644 index 744b5b090b..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/pthreadP.h +++ /dev/null @@ -1,16 +0,0 @@ -#include_next -#ifndef _PTHREADP_H_HPPA_ -#define _PTHREADP_H_HPPA_ 1 - -/* Internal cond functions. */ -extern int __pthread_cond_broadcast_internal (pthread_cond_t *cond); -extern int __pthread_cond_destroy_internal (pthread_cond_t *cond); -extern int __pthread_cond_init_internal (pthread_cond_t *cond, - const pthread_condattr_t *cond_attr); -extern int __pthread_cond_signal_internal (pthread_cond_t *cond); -extern int __pthread_cond_timedwait_internal (pthread_cond_t *cond, - pthread_mutex_t *mutex, - const struct timespec *abstime); -extern int __pthread_cond_wait_internal (pthread_cond_t *cond, - pthread_mutex_t *mutex); -#endif diff --git a/sysdeps/unix/sysv/linux/hppa/pthread_cond_broadcast.c b/sysdeps/unix/sysv/linux/hppa/pthread_cond_broadcast.c deleted file mode 100644 index a6f9f5d433..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/pthread_cond_broadcast.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Carlos O'Donell , 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef INCLUDED_SELF -# define INCLUDED_SELF -# include -#else -# include -# include -# include -# include -int -__pthread_cond_broadcast (pthread_cond_t *cond) -{ - cond_compat_check_and_clear (cond); - return __pthread_cond_broadcast_internal (cond); -} -versioned_symbol (libpthread, __pthread_cond_broadcast, pthread_cond_broadcast, - GLIBC_2_3_2); -# undef versioned_symbol -# define versioned_symbol(lib, local, symbol, version) -# undef __pthread_cond_broadcast -# define __pthread_cond_broadcast __pthread_cond_broadcast_internal -# include_next -#endif diff --git a/sysdeps/unix/sysv/linux/hppa/pthread_cond_destroy.c b/sysdeps/unix/sysv/linux/hppa/pthread_cond_destroy.c deleted file mode 100644 index 49af087bb4..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/pthread_cond_destroy.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Carlos O'Donell , 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef INCLUDED_SELF -# define INCLUDED_SELF -# include -#else -# include -# include -# include -# include -int -__pthread_cond_destroy (pthread_cond_t *cond) -{ - cond_compat_check_and_clear (cond); - return __pthread_cond_destroy_internal (cond); -} -versioned_symbol (libpthread, __pthread_cond_destroy, pthread_cond_destroy, - GLIBC_2_3_2); -# undef versioned_symbol -# define versioned_symbol(lib, local, symbol, version) -# undef __pthread_cond_destroy -# define __pthread_cond_destroy __pthread_cond_destroy_internal -# include_next -#endif diff --git a/sysdeps/unix/sysv/linux/hppa/pthread_cond_init.c b/sysdeps/unix/sysv/linux/hppa/pthread_cond_init.c deleted file mode 100644 index ccb3de07ff..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/pthread_cond_init.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Carlos O'Donell , 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef INCLUDED_SELF -# define INCLUDED_SELF -# include -#else -# include -# include -# include -# include -int -__pthread_cond_init (pthread_cond_t *cond, const pthread_condattr_t *cond_attr) -{ - cond_compat_clear (cond); - return __pthread_cond_init_internal (cond, cond_attr); -} -versioned_symbol (libpthread, __pthread_cond_init, pthread_cond_init, - GLIBC_2_3_2); -# undef versioned_symbol -# define versioned_symbol(lib, local, symbol, version) -# undef __pthread_cond_init -# define __pthread_cond_init __pthread_cond_init_internal -# include_next -#endif diff --git a/sysdeps/unix/sysv/linux/hppa/pthread_cond_signal.c b/sysdeps/unix/sysv/linux/hppa/pthread_cond_signal.c deleted file mode 100644 index 2bf32af933..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/pthread_cond_signal.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Carlos O'Donell , 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef INCLUDED_SELF -# define INCLUDED_SELF -# include -#else -# include -# include -# include -# include -int -__pthread_cond_signal (pthread_cond_t *cond) -{ - cond_compat_check_and_clear (cond); - return __pthread_cond_signal_internal (cond); -} -versioned_symbol (libpthread, __pthread_cond_signal, pthread_cond_signal, - GLIBC_2_3_2); -# undef versioned_symbol -# define versioned_symbol(lib, local, symbol, version) -# undef __pthread_cond_signal -# define __pthread_cond_signal __pthread_cond_signal_internal -# include_next -#endif diff --git a/sysdeps/unix/sysv/linux/hppa/pthread_cond_wait.c b/sysdeps/unix/sysv/linux/hppa/pthread_cond_wait.c deleted file mode 100644 index 1cc2fc15d4..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/pthread_cond_wait.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Carlos O'Donell , 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef INCLUDED_SELF -# define INCLUDED_SELF -# include -#else -# include -# include -# include -# include -int -__pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex) -{ - cond_compat_check_and_clear (cond); - return __pthread_cond_wait_internal (cond, mutex); -} -versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait, - GLIBC_2_3_2); -int -__pthread_cond_timedwait (cond, mutex, abstime) - pthread_cond_t *cond; - pthread_mutex_t *mutex; - const struct timespec *abstime; -{ - cond_compat_check_and_clear (cond); - return __pthread_cond_timedwait_internal (cond, mutex, abstime); -} -versioned_symbol (libpthread, __pthread_cond_timedwait, pthread_cond_timedwait, - GLIBC_2_3_2); -# undef versioned_symbol -# define versioned_symbol(lib, local, symbol, version) -# undef __pthread_cond_wait -# define __pthread_cond_wait __pthread_cond_wait_internal -# undef __pthread_cond_timedwait -# define __pthread_cond_timedwait __pthread_cond_timedwait_internal -# include_next -#endif diff --git a/sysdeps/unix/sysv/linux/hppa/setcontext.S b/sysdeps/unix/sysv/linux/hppa/setcontext.S deleted file mode 100644 index 3f4da7938f..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/setcontext.S +++ /dev/null @@ -1,158 +0,0 @@ -/* Install given context. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Helge Deller , 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -#include "ucontext_i.h" - - -ENTRY(__setcontext) - /* Prologue */ - stwm %r3, 64(%sp) -#ifdef PIC - stw %r19, -32(%sp) -#endif - - /* Save ucp. */ - copy %r26, %r3 - -.Lagain: - /* Set the current signal mask. */ - /* sigprocmask(SIG_BLOCK, &ucp->uc_sigmask, NULL); */ - copy %r0, %r24 - ldo oSIGMASK(%r3), %r25 - bl sigprocmask, %r2 - ldi SIG_SETMASK, %r26 - - comib,<>,n 0,%ret0,.Lerror - - /* Save %sp, %dp. */ - copy %sp, %r4 - copy %dp, %r5 - copy %r19, %r6 - - /* Get the registers. */ - ldw oR1(%r3), %r1 - ldw oR2(%r3), %r2 - /* ldw oR3(%r3), %r3 - used for ucp pointer. */ - /* ldw oR4(%r3), %r4 - used for original %sp. */ - /* ldw oR5(%r3), %r5 - used for %dp / %r27. */ - /* ldw oR6(%r3), %r6 - used for %r19. */ - ldw oR7(%r3), %r7 - ldw oR8(%r3), %r8 - ldw oR9(%r3), %r9 - ldw oR10(%r3), %r10 - ldw oR11(%r3), %r11 - ldw oR12(%r3), %r12 - ldw oR13(%r3), %r13 - ldw oR14(%r3), %r14 - ldw oR15(%r3), %r15 - ldw oR16(%r3), %r16 - ldw oR17(%r3), %r17 - ldw oR18(%r3), %r18 - ldw oR19(%r3), %r19 - ldw oR20(%r3), %r20 - ldw oR21(%r3), %r21 - /* ldw oR22(%r3), %r22 - dyncall arg. */ - ldw oR23(%r3), %r23 - ldw oR24(%r3), %r24 - ldw oR25(%r3), %r25 - ldw oR26(%r3), %r26 - ldw oR27(%r3), %r27 - ldw oR28(%r3), %r28 - ldw oR29(%r3), %r29 - ldw oR30(%r3), %sp - /* ldw oR31(%r3), %r31 - dyncall scratch register */ - - /* Restore floating-point registers. */ - ldo oFPREGS31(%r3), %r22 - fldds 0(%r22), %fr31 - fldds,mb -8(%r22), %fr30 - fldds,mb -8(%r22), %fr29 - fldds,mb -8(%r22), %fr28 - fldds,mb -8(%r22), %fr27 - fldds,mb -8(%r22), %fr26 - fldds,mb -8(%r22), %fr25 - fldds,mb -8(%r22), %fr24 - fldds,mb -8(%r22), %fr23 - fldds,mb -8(%r22), %fr22 - fldds,mb -8(%r22), %fr21 - fldds,mb -8(%r22), %fr20 - fldds,mb -8(%r22), %fr19 - fldds,mb -8(%r22), %fr18 - fldds,mb -8(%r22), %fr17 - fldds,mb -8(%r22), %fr16 - fldds,mb -8(%r22), %fr15 - fldds,mb -8(%r22), %fr14 - fldds,mb -8(%r22), %fr13 - fldds,mb -8(%r22), %fr12 - fldds,mb -8(%r22), %fr11 - fldds,mb -8(%r22), %fr10 - fldds,mb -8(%r22), %fr9 - fldds,mb -8(%r22), %fr8 - fldds,mb -8(%r22), %fr7 - fldds,mb -8(%r22), %fr6 - fldds,mb -8(%r22), %fr5 - fldds,mb -8(%r22), %fr4 - fldds,mb -8(%r22), %fr3 - fldds,mb -8(%r22), %fr2 - fldds,mb -8(%r22), %fr1 - fldds,mb -8(%r22), %fr0 - - /* Do not load oSS_SP into %sp. The value of oSS_SP indicates - the start of the user allocated stack, but not the sp that - should be used by the new context. In fact makecontext - will create a frame, and adjust sp as required. We do not - support calling getcontext and modifying ss_sp without - a call to makecontext to synchronize ss_sp into the machine - context. */ - - /* Call external function. */ - copy %r2, %r22 - bl $$dyncall, %r31 - copy %r31, %r2 - - /* We return here. Get new ucp in %r3, reload %sp. */ - ldw oUC_LINK(%r3), %r3 - copy %r4, %sp - copy %r5, %dp - copy %r6, %r19 - - /* Continue until ucp == NULL. */ - comib,<> 0,%r3,.Lagain - nop - - /* No further context available. Exit now. */ - bl HIDDEN_JUMPTARGET(exit), %r2 - ldi -1, %r26 - - -.Lerror: - /* Epilogue */ - ldw -84(%r30), %r2 -#ifdef PIC - ldw -96(%r30), %r19 -#endif - bv %r0(%r2) - ldwm -64(%r30), %r3 -L(pseudo_end): -PSEUDO_END(__setcontext) - -weak_alias(__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/hppa/shlib-versions b/sysdeps/unix/sysv/linux/hppa/shlib-versions deleted file mode 100644 index 3a2d496220..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/shlib-versions +++ /dev/null @@ -1,9 +0,0 @@ -libm=6 GLIBC_2.2 - -libc=6 GLIBC_2.2 - -ld=ld.so.1 GLIBC_2.2 - -libBrokenLocale=1 GLIBC_2.2 - -libpthread=0 GLIBC_2.2 diff --git a/sysdeps/unix/sysv/linux/hppa/swapcontext.c b/sysdeps/unix/sysv/linux/hppa/swapcontext.c deleted file mode 100644 index c341f2d3a5..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/swapcontext.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Swap to new context. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Helge Deller , 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -extern int __getcontext (ucontext_t *ucp); -extern int __setcontext (const ucontext_t *ucp); - -int -__swapcontext (ucontext_t *oucp, const ucontext_t *ucp) -{ - /* Save the current machine context to oucp. */ - __getcontext (oucp); - - /* mark sc_sar flag to skip the setcontext call on reactivation. */ - if (oucp->uc_mcontext.sc_sar == 0) { - oucp->uc_mcontext.sc_sar++; - - /* Restore the machine context in ucp. */ - __setcontext (ucp); - } - - return 0; -} - -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/hppa/sys/procfs.h b/sysdeps/unix/sysv/linux/hppa/sys/procfs.h deleted file mode 100644 index f0d53c4bc6..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/sys/procfs.h +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somewhat modelled after the file of the same name on SVR4 - systems. It provides a definition of the core file format for ELF - used on Linux. It doesn't have anything to do with the /proc file - system, even though Linux has one. - - Anyway, the whole purpose of this file is for GDB and GDB only. - Don't read too much into it. Don't use it for anything other than - GDB unless you know what you are doing. */ - -#include -#include -#include -#include - -__BEGIN_DECLS - -typedef unsigned long elf_greg_t; -#define ELF_NGREG 80 /* We only need 64 at present, but leave space - for expansion. */ -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -#define ELF_NFPREG 32 -typedef double elf_fpreg_t; -typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; - -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with Linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - GDB doesn't really use excluded. */ - -struct elf_prstatus - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args. */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned int pr_uid; - unsigned int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - - -/* The rest of this file provides the types for emulation of the - Solaris interfaces that should be implemented by - users of libthread_db. */ - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore have only one PID type. */ -typedef __pid_t lwpid_t; - -/* Process status and info. In the end we do provide typedefs for them. */ -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h b/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h deleted file mode 100644 index 982b4c44c2..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Don't rely on this, the interface is currently messed up and may need to - be broken to be fixed. */ -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - - -#ifdef __USE_MISC -/* Type for general register. */ -typedef unsigned long int greg_t; - -/* Number of general registers. */ -# define NGREG 80 -# define NFPREG 32 - -/* Container for all general registers. */ -typedef struct gregset - { - greg_t g_regs[32]; - greg_t sr_regs[8]; - greg_t cr_regs[24]; - greg_t g_pad[16]; - } gregset_t; - -/* Container for all FPU registers. */ -typedef struct fpregset - { - double fp_dregs[32]; - } fpregset_t; -#endif - -/* Context to describe whole processor state. */ -typedef struct sigcontext mcontext_t; - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - sigset_t uc_sigmask; - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/hppa/sys/user.h b/sysdeps/unix/sysv/linux/hppa/sys/user.h deleted file mode 100644 index c871f1a03d..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/sys/user.h +++ /dev/null @@ -1 +0,0 @@ -/* This file is not needed, but in practice gdb might try to include it. */ diff --git a/sysdeps/unix/sysv/linux/hppa/syscall.c b/sysdeps/unix/sysv/linux/hppa/syscall.c deleted file mode 100644 index da38c1147a..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/syscall.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* HPPA implements syscall() in 'C'; the assembler version would - typically be in syscall.S. Also note that we have INLINE_SYSCALL, - INTERNAL_SYSCALL, and all the generated pure assembly syscall wrappers. - How often the function is used is unknown. */ - -long int -syscall (long int __sysno, ...) -{ - /* FIXME: Keep this matching INLINE_SYSCALL for hppa */ - va_list args; - long int arg0, arg1, arg2, arg3, arg4, arg5; - long int __sys_res; - - /* Load varargs */ - va_start (args, __sysno); - arg0 = va_arg (args, long int); - arg1 = va_arg (args, long int); - arg2 = va_arg (args, long int); - arg3 = va_arg (args, long int); - arg4 = va_arg (args, long int); - arg5 = va_arg (args, long int); - va_end (args); - - { - LOAD_ARGS_6 (arg0, arg1, arg2, arg3, arg4, arg5) - register unsigned long int __res asm("r28"); - PIC_REG_DEF - LOAD_REGS_6 - asm volatile (SAVE_ASM_PIC - " ble 0x100(%%sr2, %%r0) \n" - " copy %1, %%r20 \n" - LOAD_ASM_PIC - : "=r" (__res) - : "r" (__sysno) PIC_REG_USE ASM_ARGS_6 - : "memory", CALL_CLOB_REGS CLOB_ARGS_6); - __sys_res = __res; - } - if ((unsigned long int) __sys_res >= (unsigned long int) -4095) - { - __set_errno (-__sys_res); - __sys_res = -1; - } - return __sys_res; -} diff --git a/sysdeps/unix/sysv/linux/hppa/syscalls.list b/sysdeps/unix/sysv/linux/hppa/syscalls.list deleted file mode 100644 index cd37573b89..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/syscalls.list +++ /dev/null @@ -1,16 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -# proper socket implementations: -bind - bind i:ipi __bind bind -getpeername - getpeername i:ipp __getpeername getpeername -getsockname - getsockname i:ipp __getsockname getsockname -getsockopt - getsockopt i:iiiBN __getsockopt getsockopt -listen - listen i:ii __listen listen -setsockopt - setsockopt i:iiibn __setsockopt setsockopt -shutdown - shutdown i:ii __shutdown shutdown -socket - socket i:iii __socket socket -socketpair - socketpair i:iiif __socketpair socketpair - -prlimit64 EXTRA prlimit64 i:iipp __prlimit64 prlimit64@@GLIBC_2.17 -fanotify_mark EXTRA fanotify_mark i:iiiiis __fanotify_mark fanotify_mark@@GLIBC_2.19 -personality EXTRA personality Ei:i __personality personality diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h deleted file mode 100644 index 5ea297267f..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h +++ /dev/null @@ -1,279 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# ifndef NO_ERROR -# define NO_ERROR -0x1000 -# endif - -/* The syscall cancellation mechanism requires userspace - assistance, the following code does roughly this: - - do arguments (read arg5 and arg6 to registers) - setup frame - - check if there are threads, yes jump to pseudo_cancel - - unthreaded: - syscall - check syscall return (jump to pre_end) - set errno - set return to -1 - (jump to pre_end) - - pseudo_cancel: - cenable - syscall - cdisable - check syscall return (jump to pre_end) - set errno - set return to -1 - - pre_end - restore stack - - It is expected that 'ret' and 'END' macros will - append an 'undo arguments' and 'return' to the - this PSEUDO macro. */ - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - ENTRY (__##syscall_name##_nocancel) \ - DOARGS_##args ASM_LINE_SEP \ - stwm TREG, 64(%sp) ASM_LINE_SEP \ - .cfi_offset TREG, 0 ASM_LINE_SEP \ - .cfi_adjust_cfa_offset 64 ASM_LINE_SEP \ - stw %sp, -4(%sp) ASM_LINE_SEP \ - .cfi_offset 30, -4 ASM_LINE_SEP \ - stw %r19, -32(%sp) ASM_LINE_SEP \ - .cfi_offset 19, -32 ASM_LINE_SEP \ - /* Save r19 */ ASM_LINE_SEP \ - SAVE_PIC(TREG) ASM_LINE_SEP \ - /* Do syscall, delay loads # */ ASM_LINE_SEP \ - ble 0x100(%sr2,%r0) ASM_LINE_SEP \ - ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \ - ldi NO_ERROR,%r1 ASM_LINE_SEP \ - cmpb,>>=,n %r1,%ret0,L(pre_nc_end) ASM_LINE_SEP \ - /* Restore r19 from TREG */ ASM_LINE_SEP \ - LOAD_PIC(TREG) /* delay */ ASM_LINE_SEP \ - SYSCALL_ERROR_HANDLER ASM_LINE_SEP \ - /* Use TREG for temp storage */ ASM_LINE_SEP \ - copy %ret0, TREG /* delay */ ASM_LINE_SEP \ - /* OPTIMIZE: Don't reload r19 */ ASM_LINE_SEP \ - /* do a -1*syscall_ret0 */ ASM_LINE_SEP \ - sub %r0, TREG, TREG ASM_LINE_SEP \ - /* Store into errno location */ ASM_LINE_SEP \ - stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \ - /* return -1 as error */ ASM_LINE_SEP \ - ldi -1, %ret0 ASM_LINE_SEP \ -L(pre_nc_end): ASM_LINE_SEP \ - /* No need to LOAD_PIC */ ASM_LINE_SEP \ - /* Undo frame */ ASM_LINE_SEP \ - ldwm -64(%sp),TREG ASM_LINE_SEP \ - .cfi_adjust_cfa_offset -64 ASM_LINE_SEP \ - /* Restore rp before exit */ ASM_LINE_SEP \ - ldw -20(%sp), %rp ASM_LINE_SEP \ - .cfi_restore 2 ASM_LINE_SEP \ - ret ASM_LINE_SEP \ - END(__##syscall_name##_nocancel) ASM_LINE_SEP \ - /**********************************************/ASM_LINE_SEP \ - ENTRY (name) \ - DOARGS_##args ASM_LINE_SEP \ - stwm TREG, 64(%sp) ASM_LINE_SEP \ - .cfi_adjust_cfa_offset 64 ASM_LINE_SEP \ - stw %sp, -4(%sp) ASM_LINE_SEP \ - .cfi_offset 30, -4 ASM_LINE_SEP \ - stw %r19, -32(%sp) ASM_LINE_SEP \ - .cfi_offset 19, -32 ASM_LINE_SEP \ - /* Done setting up frame, continue... */ ASM_LINE_SEP \ - SINGLE_THREAD_P ASM_LINE_SEP \ - cmpib,<>,n 0,%ret0,L(pseudo_cancel) ASM_LINE_SEP \ -L(unthreaded): ASM_LINE_SEP \ - /* Save r19 */ ASM_LINE_SEP \ - SAVE_PIC(TREG) ASM_LINE_SEP \ - /* Do syscall, delay loads # */ ASM_LINE_SEP \ - ble 0x100(%sr2,%r0) ASM_LINE_SEP \ - ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \ - ldi NO_ERROR,%r1 ASM_LINE_SEP \ - cmpb,>>=,n %r1,%ret0,L(pre_end) ASM_LINE_SEP \ - /* Restore r19 from TREG */ ASM_LINE_SEP \ - LOAD_PIC(TREG) /* delay */ ASM_LINE_SEP \ - SYSCALL_ERROR_HANDLER ASM_LINE_SEP \ - /* Use TREG for temp storage */ ASM_LINE_SEP \ - copy %ret0, TREG /* delay */ ASM_LINE_SEP \ - /* OPTIMIZE: Don't reload r19 */ ASM_LINE_SEP \ - /* do a -1*syscall_ret0 */ ASM_LINE_SEP \ - sub %r0, TREG, TREG ASM_LINE_SEP \ - /* Store into errno location */ ASM_LINE_SEP \ - stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \ - b L(pre_end) ASM_LINE_SEP \ - /* return -1 as error */ ASM_LINE_SEP \ - ldi -1, %ret0 /* delay */ ASM_LINE_SEP \ -L(pseudo_cancel): ASM_LINE_SEP \ - PUSHARGS_##args /* Save args */ ASM_LINE_SEP \ - /* Save r19 into TREG */ ASM_LINE_SEP \ - CENABLE /* FUNC CALL */ ASM_LINE_SEP \ - SAVE_PIC(TREG) /* delay */ ASM_LINE_SEP \ - /* restore syscall args */ ASM_LINE_SEP \ - POPARGS_##args ASM_LINE_SEP \ - /* save mask from cenable (use stub rp slot) */ ASM_LINE_SEP \ - stw %ret0, -24(%sp) ASM_LINE_SEP \ - /* ... SYSCALL ... */ ASM_LINE_SEP \ - ble 0x100(%sr2,%r0) ASM_LINE_SEP \ - ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \ - /* ............... */ ASM_LINE_SEP \ - LOAD_PIC(TREG) ASM_LINE_SEP \ - /* pass mask as arg0 to cdisable */ ASM_LINE_SEP \ - ldw -24(%sp), %r26 ASM_LINE_SEP \ - CDISABLE ASM_LINE_SEP \ - stw %ret0, -24(%sp) /* delay */ ASM_LINE_SEP \ - /* Restore syscall return */ ASM_LINE_SEP \ - ldw -24(%sp), %ret0 ASM_LINE_SEP \ - /* compare error */ ASM_LINE_SEP \ - ldi NO_ERROR,%r1 ASM_LINE_SEP \ - /* branch if no error */ ASM_LINE_SEP \ - cmpb,>>=,n %r1,%ret0,L(pre_end) ASM_LINE_SEP \ - LOAD_PIC(TREG) /* cond. nullify */ ASM_LINE_SEP \ - copy %ret0, TREG /* save syscall return */ ASM_LINE_SEP \ - SYSCALL_ERROR_HANDLER ASM_LINE_SEP \ - /* make syscall res value positive */ ASM_LINE_SEP \ - sub %r0, TREG, TREG /* delay */ ASM_LINE_SEP \ - /* No need to LOAD_PIC */ ASM_LINE_SEP \ - /* store into errno location */ ASM_LINE_SEP \ - stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \ - /* return -1 */ ASM_LINE_SEP \ - ldi -1, %ret0 ASM_LINE_SEP \ -L(pre_end): ASM_LINE_SEP \ - /* No need to LOAD_PIC */ ASM_LINE_SEP \ - /* Undo frame */ ASM_LINE_SEP \ - ldwm -64(%sp),TREG ASM_LINE_SEP \ - .cfi_adjust_cfa_offset -64 ASM_LINE_SEP \ - /* Restore rp before exit */ ASM_LINE_SEP \ - ldw -20(%sp), %rp ASM_LINE_SEP \ - .cfi_restore 2 ASM_LINE_SEP - -/* Save arguments into our frame */ -# define PUSHARGS_0 /* nothing to do */ -# define PUSHARGS_1 PUSHARGS_0 stw %r26, -36(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 26, -36 ASM_LINE_SEP -# define PUSHARGS_2 PUSHARGS_1 stw %r25, -40(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 25, -40 ASM_LINE_SEP -# define PUSHARGS_3 PUSHARGS_2 stw %r24, -44(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 24, -44 ASM_LINE_SEP -# define PUSHARGS_4 PUSHARGS_3 stw %r23, -48(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 23, -48 ASM_LINE_SEP -# define PUSHARGS_5 PUSHARGS_4 stw %r22, -52(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 22, -52 ASM_LINE_SEP -# define PUSHARGS_6 PUSHARGS_5 stw %r21, -56(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 21, -56 ASM_LINE_SEP - -/* Bring them back from the stack */ -# define POPARGS_0 /* nothing to do */ -# define POPARGS_1 POPARGS_0 ldw -36(%sr0,%sp), %r26 ASM_LINE_SEP \ - .cfi_restore 26 ASM_LINE_SEP -# define POPARGS_2 POPARGS_1 ldw -40(%sr0,%sp), %r25 ASM_LINE_SEP \ - .cfi_restore 25 ASM_LINE_SEP -# define POPARGS_3 POPARGS_2 ldw -44(%sr0,%sp), %r24 ASM_LINE_SEP \ - .cfi_restore 24 ASM_LINE_SEP -# define POPARGS_4 POPARGS_3 ldw -48(%sr0,%sp), %r23 ASM_LINE_SEP \ - .cfi_restore 23 ASM_LINE_SEP -# define POPARGS_5 POPARGS_4 ldw -52(%sr0,%sp), %r22 ASM_LINE_SEP \ - .cfi_restore 22 ASM_LINE_SEP -# define POPARGS_6 POPARGS_5 ldw -56(%sr0,%sp), %r21 ASM_LINE_SEP \ - .cfi_restore 21 ASM_LINE_SEP - -# if IS_IN (libpthread) -# ifdef PIC -# define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \ - bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP -# define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \ - bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP -# else -# define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \ - bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP -# define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \ - bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP -# endif -# elif IS_IN (libc) -# ifdef PIC -# define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \ - bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP -# define CDISABLE .import __libc_disable_asynccancel,code ASM_LINE_SEP \ - bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP -# else -# define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \ - bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP -# define CDISABLE .import __libc_disable_asynccancel,code ASM_LINE_SEP \ - bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP -# endif -# elif IS_IN (librt) -# ifdef PIC -# define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \ - bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP -# define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \ - bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP -# else -# define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \ - bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP -# define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \ - bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP -# endif -# else -# error Unsupported library -# endif - -# if IS_IN (libpthread) -# define __local_multiple_threads __pthread_multiple_threads -# elif IS_IN (libc) -# define __local_multiple_threads __libc_multiple_threads -# elif IS_IN (librt) -# define __local_multiple_threads __librt_multiple_threads -# else -# error Unsupported library -# endif - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -/* Read the value of header.multiple_threads from the thread pointer */ -# define SINGLE_THREAD_P \ - mfctl %cr27, %ret0 ASM_LINE_SEP \ - ldw MULTIPLE_THREADS_THREAD_OFFSET(%sr0,%ret0),%ret0 ASM_LINE_SEP -# endif -#elif !defined __ASSEMBLER__ - -/* This code should never be used but we define it anyhow. */ -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 - -#endif -/* IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) */ - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep.c b/sysdeps/unix/sysv/linux/hppa/sysdep.c deleted file mode 100644 index 1e7c19343e..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/sysdep.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* This routine is jumped to by all the syscall handlers, to stash - an error number into errno. */ -int -__syscall_error (int err_no) -{ - __set_errno (err_no); - return -1; -} diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep.h b/sysdeps/unix/sysv/linux/hppa/sysdep.h deleted file mode 100644 index d8dd0431a4..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/sysdep.h +++ /dev/null @@ -1,512 +0,0 @@ -/* Assembler macros for PA-RISC. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper, , August 1999. - Linux/PA-RISC changes by Philipp Rumpf, , March 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINUX_HPPA_SYSDEP_H -#define _LINUX_HPPA_SYSDEP_H 1 - -#include -#include -#include - -/* Defines RTLD_PRIVATE_ERRNO. */ -#include - -/* In order to get __set_errno() definition in INLINE_SYSCALL. */ -#ifndef __ASSEMBLER__ -#include -#endif - -#undef ASM_LINE_SEP -#define ASM_LINE_SEP ! - -#undef SYS_ify -#define SYS_ify(syscall_name) (__NR_##syscall_name) - -/* The vfork, fork, and clone syscalls clobber r19 - * and r21. We list r21 as either clobbered or as an - * input to a 6-argument syscall. We must save and - * restore r19 in both PIC and non-PIC cases. - */ -/* WARNING: TREG must be a callee saves register so - that it doesn't have to be restored after a call - to another function */ -#define TREG 4 -#define SAVE_PIC(SREG) \ - copy %r19, SREG ASM_LINE_SEP \ - .cfi_register 19, SREG -#define LOAD_PIC(LREG) \ - copy LREG , %r19 ASM_LINE_SEP \ - .cfi_restore 19 -/* Inline assembly defines */ -#define TREG_ASM "%r4" /* Cant clobber r3, it holds framemarker */ -#define SAVE_ASM_PIC " copy %%r19, %" TREG_ASM "\n" -#define LOAD_ASM_PIC " copy %" TREG_ASM ", %%r19\n" -#define CLOB_TREG TREG_ASM , -#define PIC_REG_DEF register unsigned long __r19 asm("r19"); -#define PIC_REG_USE , "r" (__r19) - -#ifdef __ASSEMBLER__ - -/* Syntactic details of assembler. */ - -#define ALIGNARG(log2) log2 - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -/* ELF-like local names start with `.L'. */ -#undef L -#define L(name) .L##name - -/* Linux uses a negative return value to indicate syscall errors, - unlike most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be - negative even if the call succeeded. E.g., the `lseek' system call - might return a large offset. Therefore we must not anymore test - for < 0, but test for a real error by making sure the value in %eax - is a real error number. Linus said he will make sure the no syscall - returns a value in -1 .. -4095 as a valid result so we can safely - test with -4095. */ - -/* We don't want the label for the error handle to be global when we define - it here. */ -/*#ifdef PIC -# define SYSCALL_ERROR_LABEL 0f -#else -# define SYSCALL_ERROR_LABEL syscall_error -#endif*/ - -/* Argument manipulation from the stack for preparing to - make a syscall */ - -#define DOARGS_0 /* nothing */ -#define DOARGS_1 /* nothing */ -#define DOARGS_2 /* nothing */ -#define DOARGS_3 /* nothing */ -#define DOARGS_4 /* nothing */ -#define DOARGS_5 ldw -52(%sp), %r22 ASM_LINE_SEP -#define DOARGS_6 DOARGS_5 ldw -56(%sp), %r21 ASM_LINE_SEP - -#define UNDOARGS_0 /* nothing */ -#define UNDOARGS_1 /* nothing */ -#define UNDOARGS_2 /* nothing */ -#define UNDOARGS_3 /* nothing */ -#define UNDOARGS_4 /* nothing */ -#define UNDOARGS_5 /* nothing */ -#define UNDOARGS_6 /* nothing */ - -/* Define an entry point visible from C. - - There is currently a bug in gdb which prevents us from specifying - incomplete stabs information. Fake some entries here which specify - the current source file. */ -#undef ENTRY -#define ENTRY(name) \ - .text ASM_LINE_SEP \ - .align ALIGNARG(4) ASM_LINE_SEP \ - .export C_SYMBOL_NAME(name) ASM_LINE_SEP \ - .type C_SYMBOL_NAME(name),@function ASM_LINE_SEP \ - cfi_startproc ASM_LINE_SEP \ - C_LABEL(name) ASM_LINE_SEP \ - .PROC ASM_LINE_SEP \ - .CALLINFO FRAME=64,CALLS,SAVE_RP,ENTRY_GR=3 ASM_LINE_SEP \ - .ENTRY ASM_LINE_SEP \ - /* SAVE_RP says we do */ ASM_LINE_SEP \ - stw %rp, -20(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 2, -20 ASM_LINE_SEP \ - /*FIXME: Call mcount? (carefull with stack!) */ - -/* Some syscall wrappers do not call other functions, and - hence are classified as leaf, so add NO_CALLS for gdb */ -#define ENTRY_LEAF(name) \ - .text ASM_LINE_SEP \ - .align ALIGNARG(4) ASM_LINE_SEP \ - .export C_SYMBOL_NAME(name) ASM_LINE_SEP \ - .type C_SYMBOL_NAME(name),@function ASM_LINE_SEP \ - cfi_startproc ASM_LINE_SEP \ - C_LABEL(name) ASM_LINE_SEP \ - .PROC ASM_LINE_SEP \ - .CALLINFO FRAME=64,NO_CALLS,SAVE_RP,ENTRY_GR=3 ASM_LINE_SEP \ - .ENTRY ASM_LINE_SEP \ - /* SAVE_RP says we do */ ASM_LINE_SEP \ - stw %rp, -20(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 2, -20 ASM_LINE_SEP \ - /*FIXME: Call mcount? (carefull with stack!) */ - -#undef END -#define END(name) \ - .EXIT ASM_LINE_SEP \ - .PROCEND ASM_LINE_SEP \ - cfi_endproc ASM_LINE_SEP \ -.size C_SYMBOL_NAME(name), .-C_SYMBOL_NAME(name) ASM_LINE_SEP - -/* If compiled for profiling, call `mcount' at the start - of each function. No, don't bother. gcc will put the - call in for us. */ -#define CALL_MCOUNT /* Do nothing. */ - -/* syscall wrappers consist of - #include - PSEUDO(...) - ret - PSEUDO_END(...) - - which means - ENTRY(name) - DO_CALL(...) - bv,n 0(2) -*/ - -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - ENTRY (name) ASM_LINE_SEP \ - /* If necc. load args from stack */ ASM_LINE_SEP \ - DOARGS_##args ASM_LINE_SEP \ - DO_CALL (syscall_name, args) ASM_LINE_SEP \ - UNDOARGS_##args ASM_LINE_SEP - -#define ret \ - /* Return value set by ERRNO code */ ASM_LINE_SEP \ - bv,n 0(2) ASM_LINE_SEP - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - END (name) - -/* We don't set the errno on the return from the syscall */ -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - ENTRY_LEAF (name) ASM_LINE_SEP \ - DOARGS_##args ASM_LINE_SEP \ - DO_CALL_NOERRNO (syscall_name, args) ASM_LINE_SEP \ - UNDOARGS_##args ASM_LINE_SEP - -#define ret_NOERRNO ret - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ - END (name) - -/* This has to return the error value */ -#undef PSEUDO_ERRVAL -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - ENTRY_LEAF (name) ASM_LINE_SEP \ - DOARGS_##args ASM_LINE_SEP \ - DO_CALL_ERRVAL (syscall_name, args) ASM_LINE_SEP \ - UNDOARGS_##args ASM_LINE_SEP - -#define ret_ERRVAL ret - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) \ - END(name) - -#undef JUMPTARGET -#define JUMPTARGET(name) name -#define SYSCALL_PIC_SETUP /* Nothing. */ - - -/* FIXME: This comment is not true. - * All the syscall assembly macros rely on finding the appropriate - SYSCALL_ERROR_LABEL or rather HANDLER. */ - -/* int * __errno_location(void) so you have to store your value - into the return address! */ -#define DEFAULT_SYSCALL_ERROR_HANDLER \ - .import __errno_location,code ASM_LINE_SEP \ - /* branch to errno handler */ ASM_LINE_SEP \ - bl __errno_location,%rp ASM_LINE_SEP - -/* Here are the myriad of configuration options that the above can - work for... what we've done is provide the framework for future - changes if required to each section */ - -#ifdef PIC -# if RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER -# else /* !RTLD_PRIVATE_ERRNO */ -# if defined _LIBC_REENTRANT -# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER -# else /* !_LIBC_REENTRANT */ -# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER -# endif /* _LIBC_REENTRANT */ -# endif /* RTLD_PRIVATE_ERRNO */ -#else -# ifndef _LIBC_REENTRANT -# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER -# else -# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER -# endif -#endif - - -/* Linux takes system call arguments in registers: - syscall number gr20 - arg 1 gr26 - arg 2 gr25 - arg 3 gr24 - arg 4 gr23 - arg 5 gr22 - arg 6 gr21 - - The compiler calls us by the C convention: - syscall number in the DO_CALL macro - arg 1 gr26 - arg 2 gr25 - arg 3 gr24 - arg 4 gr23 - arg 5 -52(sp) - arg 6 -56(sp) - - gr22 and gr21 are caller-saves, so we can just load the arguments - there and generally be happy. */ - -/* the cmpb...no_error code below inside DO_CALL - * is intended to mimic the if (__sys_res...) - * code inside INLINE_SYSCALL - */ -#define NO_ERROR -0x1000 - -#undef DO_CALL -#define DO_CALL(syscall_name, args) \ - /* Create a frame */ ASM_LINE_SEP \ - stwm TREG, 64(%sp) ASM_LINE_SEP \ - .cfi_offset TREG, 0 ASM_LINE_SEP \ - .cfi_adjust_cfa_offset 64 ASM_LINE_SEP \ - stw %sp, -4(%sp) ASM_LINE_SEP \ - .cfi_offset 30, -4 ASM_LINE_SEP \ - stw %r19, -32(%sp) ASM_LINE_SEP \ - .cfi_offset 19, -32 ASM_LINE_SEP \ - /* Save r19 */ ASM_LINE_SEP \ - SAVE_PIC(TREG) ASM_LINE_SEP \ - /* Do syscall, delay loads # */ ASM_LINE_SEP \ - ble 0x100(%sr2,%r0) ASM_LINE_SEP \ - ldi SYS_ify (syscall_name), %r20 ASM_LINE_SEP \ - ldi NO_ERROR,%r1 ASM_LINE_SEP \ - cmpb,>>=,n %r1,%ret0,L(pre_end) ASM_LINE_SEP \ - /* Restore r19 from TREG */ ASM_LINE_SEP \ - LOAD_PIC(TREG) /* delay */ ASM_LINE_SEP \ - SYSCALL_ERROR_HANDLER ASM_LINE_SEP \ - /* Use TREG for temp storage */ ASM_LINE_SEP \ - copy %ret0, TREG /* delay */ ASM_LINE_SEP \ - /* OPTIMIZE: Don't reload r19 */ ASM_LINE_SEP \ - /* do a -1*syscall_ret0 */ ASM_LINE_SEP \ - sub %r0, TREG, TREG ASM_LINE_SEP \ - /* Store into errno location */ ASM_LINE_SEP \ - stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \ - /* return -1 as error */ ASM_LINE_SEP \ - ldo -1(%r0), %ret0 ASM_LINE_SEP \ -L(pre_end): ASM_LINE_SEP \ - /* Restore our frame, restoring TREG */ ASM_LINE_SEP \ - ldwm -64(%sp), TREG ASM_LINE_SEP \ - .cfi_adjust_cfa_offset -64 ASM_LINE_SEP \ - /* Restore return pointer */ ASM_LINE_SEP \ - ldw -20(%sp),%rp ASM_LINE_SEP \ - .cfi_restore 2 ASM_LINE_SEP - -/* We do nothing with the return, except hand it back to someone else */ -#undef DO_CALL_NOERRNO -#define DO_CALL_NOERRNO(syscall_name, args) \ - /* No need to store r19 */ ASM_LINE_SEP \ - ble 0x100(%sr2,%r0) ASM_LINE_SEP \ - ldi SYS_ify (syscall_name), %r20 ASM_LINE_SEP \ - /* Caller will restore r19 */ ASM_LINE_SEP - -/* Here, we return the ERRVAL in assembly, note we don't call the - error handler function, but we do 'negate' the return _IF_ - it's an error. Not sure if this is the right semantic. */ - -#undef DO_CALL_ERRVAL -#define DO_CALL_ERRVAL(syscall_name, args) \ - /* No need to store r19 */ ASM_LINE_SEP \ - ble 0x100(%sr2,%r0) ASM_LINE_SEP \ - ldi SYS_ify (syscall_name), %r20 ASM_LINE_SEP \ - /* Caller will restore r19 */ ASM_LINE_SEP \ - ldi NO_ERROR,%r1 ASM_LINE_SEP \ - cmpb,>>=,n %r1,%ret0,0f ASM_LINE_SEP \ - sub %r0, %ret0, %ret0 ASM_LINE_SEP \ -0: ASM_LINE_SEP - - -#else - -/* GCC has to be warned that a syscall may clobber all the ABI - registers listed as "caller-saves", see page 8, Table 2 - in section 2.2.6 of the PA-RISC RUN-TIME architecture - document. However! r28 is the result and will conflict with - the clobber list so it is left out. Also the input arguments - registers r20 -> r26 will conflict with the list so they - are treated specially. Although r19 is clobbered by the syscall - we cannot say this because it would violate ABI, thus we say - TREG is clobbered and use that register to save/restore r19 - across the syscall. */ - -#define CALL_CLOB_REGS "%r1", "%r2", CLOB_TREG \ - "%r20", "%r29", "%r31" - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ -({ \ - long __sys_res = INTERNAL_SYSCALL (name, , nr, args); \ - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (__sys_res, ))) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (__sys_res, )); \ - __sys_res = -1; \ - } \ - __sys_res; \ -}) - -/* INTERNAL_SYSCALL_DECL - Allows us to setup some function static - value to use within the context of the syscall - INTERNAL_SYSCALL_ERROR_P - Returns 0 if it wasn't an error, 1 otherwise - You are allowed to use the syscall result (val) and the DECL error - variable to determine what went wrong. - INTERLAL_SYSCALL_ERRNO - Munges the val/err pair into the error number. - In our case we just flip the sign. */ - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((val < 0) && (val > -4095)) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) - -/* Similar to INLINE_SYSCALL but we don't set errno */ -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err, nr, args...) \ -({ \ - long __sys_res; \ - { \ - LOAD_ARGS_##nr(args) \ - register unsigned long __res asm("r28"); \ - PIC_REG_DEF \ - LOAD_REGS_##nr \ - /* FIXME: HACK save/load r19 around syscall */ \ - asm volatile( \ - SAVE_ASM_PIC \ - " ble 0x100(%%sr2, %%r0)\n" \ - " ldi %1, %%r20\n" \ - LOAD_ASM_PIC \ - : "=r" (__res) \ - : "i" (SYS_ify(name)) PIC_REG_USE ASM_ARGS_##nr \ - : "memory", CALL_CLOB_REGS CLOB_ARGS_##nr \ - ); \ - __sys_res = (long)__res; \ - } \ - __sys_res; \ - }) - - -/* The _NCS variant allows non-constant syscall numbers. */ -#undef INTERNAL_SYSCALL_NCS -#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ -({ \ - long __sys_res; \ - { \ - LOAD_ARGS_##nr(args) \ - register unsigned long __res asm("r28"); \ - PIC_REG_DEF \ - LOAD_REGS_##nr \ - /* FIXME: HACK save/load r19 around syscall */ \ - asm volatile( \ - SAVE_ASM_PIC \ - " ble 0x100(%%sr2, %%r0)\n" \ - " copy %1, %%r20\n" \ - LOAD_ASM_PIC \ - : "=r" (__res) \ - : "r" (name) PIC_REG_USE ASM_ARGS_##nr \ - : "memory", CALL_CLOB_REGS CLOB_ARGS_##nr \ - ); \ - __sys_res = (long)__res; \ - } \ - __sys_res; \ - }) - -#define LOAD_ARGS_0() -#define LOAD_REGS_0 -#define LOAD_ARGS_1(a1) \ - register unsigned long __x26 = (unsigned long)(a1); \ - LOAD_ARGS_0() -#define LOAD_REGS_1 \ - register unsigned long __r26 __asm__("r26") = __x26; \ - LOAD_REGS_0 -#define LOAD_ARGS_2(a1,a2) \ - register unsigned long __x25 = (unsigned long)(a2); \ - LOAD_ARGS_1(a1) -#define LOAD_REGS_2 \ - register unsigned long __r25 __asm__("r25") = __x25; \ - LOAD_REGS_1 -#define LOAD_ARGS_3(a1,a2,a3) \ - register unsigned long __x24 = (unsigned long)(a3); \ - LOAD_ARGS_2(a1,a2) -#define LOAD_REGS_3 \ - register unsigned long __r24 __asm__("r24") = __x24; \ - LOAD_REGS_2 -#define LOAD_ARGS_4(a1,a2,a3,a4) \ - register unsigned long __x23 = (unsigned long)(a4); \ - LOAD_ARGS_3(a1,a2,a3) -#define LOAD_REGS_4 \ - register unsigned long __r23 __asm__("r23") = __x23; \ - LOAD_REGS_3 -#define LOAD_ARGS_5(a1,a2,a3,a4,a5) \ - register unsigned long __x22 = (unsigned long)(a5); \ - LOAD_ARGS_4(a1,a2,a3,a4) -#define LOAD_REGS_5 \ - register unsigned long __r22 __asm__("r22") = __x22; \ - LOAD_REGS_4 -#define LOAD_ARGS_6(a1,a2,a3,a4,a5,a6) \ - register unsigned long __x21 = (unsigned long)(a6); \ - LOAD_ARGS_5(a1,a2,a3,a4,a5) -#define LOAD_REGS_6 \ - register unsigned long __r21 __asm__("r21") = __x21; \ - LOAD_REGS_5 - -/* Even with zero args we use r20 for the syscall number */ -#define ASM_ARGS_0 -#define ASM_ARGS_1 ASM_ARGS_0, "r" (__r26) -#define ASM_ARGS_2 ASM_ARGS_1, "r" (__r25) -#define ASM_ARGS_3 ASM_ARGS_2, "r" (__r24) -#define ASM_ARGS_4 ASM_ARGS_3, "r" (__r23) -#define ASM_ARGS_5 ASM_ARGS_4, "r" (__r22) -#define ASM_ARGS_6 ASM_ARGS_5, "r" (__r21) - -/* The registers not listed as inputs but clobbered */ -#define CLOB_ARGS_6 -#define CLOB_ARGS_5 CLOB_ARGS_6, "%r21" -#define CLOB_ARGS_4 CLOB_ARGS_5, "%r22" -#define CLOB_ARGS_3 CLOB_ARGS_4, "%r23" -#define CLOB_ARGS_2 CLOB_ARGS_3, "%r24" -#define CLOB_ARGS_1 CLOB_ARGS_2, "%r25" -#define CLOB_ARGS_0 CLOB_ARGS_1, "%r26" - -#endif /* __ASSEMBLER__ */ - -/* Pointer mangling is not yet supported for HPPA. */ -#define PTR_MANGLE(var) (void) (var) -#define PTR_DEMANGLE(var) (void) (var) - -#endif /* _LINUX_HPPA_SYSDEP_H */ diff --git a/sysdeps/unix/sysv/linux/hppa/ucontext_i.sym b/sysdeps/unix/sysv/linux/hppa/ucontext_i.sym deleted file mode 100644 index ee33029a07..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/ucontext_i.sym +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include -#include - --- - -SIG_BLOCK -SIG_SETMASK - -#define ucontext(member) offsetof (ucontext_t, member) -#define mcontext(member) ucontext (uc_mcontext.member) -#define mreg(reg) mcontext (sc_gr[reg]) - -oUC_FLAGS ucontext (uc_flags) -oUC_LINK ucontext (uc_link) -oSS_SP ucontext (uc_stack.ss_sp) -oSS_FLAGS ucontext (uc_stack.ss_flags) -oSS_SIZE ucontext (uc_stack.ss_size) -oSC_FLAGS mcontext (sc_flags) -oR0 mreg (0) -oR1 mreg (1) -oR2 mreg (2) -oR3 mreg (3) -oR4 mreg (4) -oR5 mreg (5) -oR6 mreg (6) -oR7 mreg (7) -oR8 mreg (8) -oR9 mreg (9) -oR10 mreg (10) -oR11 mreg (11) -oR12 mreg (12) -oR13 mreg (13) -oR14 mreg (14) -oR15 mreg (15) -oR16 mreg (16) -oR17 mreg (17) -oR18 mreg (18) -oR19 mreg (19) -oR20 mreg (20) -oR21 mreg (21) -oR22 mreg (22) -oR23 mreg (23) -oR24 mreg (24) -oR25 mreg (25) -oR26 mreg (26) -oR27 mreg (27) -oR28 mreg (28) -oR29 mreg (29) -oR30 mreg (30) -oR31 mreg (31) -oFPREGS0 mcontext (sc_fr[0]) -oFPREGS31 mcontext (sc_fr[31]) -oIASQ0 mcontext (sc_iasq[0]) -oIASQ1 mcontext (sc_iasq[1]) -oIAOQ0 mcontext (sc_iaoq[0]) -oIAOQ1 mcontext (sc_iaoq[1]) -oSAR mcontext (sc_sar) -oSIGMASK ucontext (uc_sigmask) diff --git a/sysdeps/unix/sysv/linux/hppa/umount.c b/sysdeps/unix/sysv/linux/hppa/umount.c deleted file mode 100644 index 208fbec994..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/umount.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/hppa/utimes.c b/sysdeps/unix/sysv/linux/hppa/utimes.c deleted file mode 100644 index 63e0c8c9cb..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/utimes.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Implement utimes for hppa. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* hppa has the utimensat syscall in all supported kernel versions but - gained the utimes syscall later, so use the linux-generic - implementation of utimes in terms of the utimensat syscall unless - the utimes syscall is known to be available. */ - -#include - -#ifdef __ASSUME_UTIMES -# include -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/hppa/xstat.c b/sysdeps/unix/sysv/linux/hppa/xstat.c deleted file mode 100644 index e9869f5508..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/xstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/i386/Implies b/sysdeps/unix/sysv/linux/i386/Implies deleted file mode 100644 index 4bf5f8b520..0000000000 --- a/sysdeps/unix/sysv/linux/i386/Implies +++ /dev/null @@ -1,2 +0,0 @@ -unix/sysv/linux/x86 -i386/nptl diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile deleted file mode 100644 index 4080b8c966..0000000000 --- a/sysdeps/unix/sysv/linux/i386/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -# The default ABI is 32. -default-abi := 32 - -ifeq ($(subdir),misc) -sysdep_routines += ioperm iopl vm86 -endif - -ifeq ($(subdir),elf) -sysdep-dl-routines += libc-do-syscall -sysdep-others += lddlibc4 -install-bin += lddlibc4 -endif - -ifeq ($(subdir),io) -sysdep_routines += libc-do-syscall -endif - -ifeq ($(subdir),nptl) -libpthread-sysdep_routines += libc-do-syscall -libpthread-shared-only-routines += libc-do-syscall -endif - -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext_i.sym -endif - -ifeq ($(subdir),csu) -sysdep-dl-routines += sysdep -ifeq (yes,$(build-shared)) -sysdep_routines += divdi3 -shared-only-routines += divdi3 -CPPFLAGS-divdi3.c = -Din_divdi3_c -endif -endif - -ifeq ($(subdir),nptl) -# pull in __syscall_error routine -libpthread-routines += sysdep -libpthread-shared-only-routines += sysdep -endif - -ifeq ($(subdir),rt) -# pull in __syscall_error routine -librt-routines += sysdep -librt-shared-only-routines += sysdep -endif diff --git a/sysdeps/unix/sysv/linux/i386/Versions b/sysdeps/unix/sysv/linux/i386/Versions deleted file mode 100644 index f3544acb75..0000000000 --- a/sysdeps/unix/sysv/linux/i386/Versions +++ /dev/null @@ -1,51 +0,0 @@ -libc { - GLIBC_2.0 { - # Exception handling support functions from libgcc - __register_frame; __register_frame_table; __deregister_frame; - __frame_state_for; __register_frame_info_table; - - ioperm; iopl; - - vm86; - } - GLIBC_2.1 { - modify_ldt; - } - GLIBC_2.2 { - # functions used in other libraries - __xstat64; __fxstat64; __lxstat64; - - # a* - alphasort64; - - # g* - glob64; - - # New rlimit interface - getrlimit; setrlimit; getrlimit64; - - # r* - readdir64; readdir64_r; - - # s* - scandir64; - - # v* - versionsort64; - } - GLIBC_2.3.3 { - # p* - posix_fadvise64; posix_fallocate64; - } - GLIBC_2.3.4 { - # v* - vm86; - } - GLIBC_2.11 { - # f* - fallocate64; - } - GLIBC_PRIVATE { - __modify_ldt; - } -} diff --git a/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S b/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S deleted file mode 100644 index d46ea84e30..0000000000 --- a/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - - .section .rodata.str1.1,"aMS",@progbits,1 - .type longjmp_msg,@object -longjmp_msg: - .string "longjmp causes uninitialized stack frame" - .size longjmp_msg, .-longjmp_msg - - -#ifdef PIC -# define CALL_FAIL movl %ebx, %ecx; \ - cfi_register(%ebx,%ecx); \ - LOAD_PIC_REG (bx); \ - leal longjmp_msg@GOTOFF(%ebx), %eax; \ - call HIDDEN_JUMPTARGET(__fortify_fail) -#else -# define CALL_FAIL movl $longjmp_msg, %eax; \ - call HIDDEN_JUMPTARGET(__fortify_fail) -#endif - - - .text -ENTRY (____longjmp_chk) - movl 4(%esp), %ecx /* User's jmp_buf in %ecx. */ - - /* Save the return address now. */ - movl (JB_PC*4)(%ecx), %edx - /* Get the stack pointer. */ - movl (JB_SP*4)(%ecx), %edi - cfi_undefined(%edi) - PTR_DEMANGLE (%edx) - PTR_DEMANGLE (%edi) - - cmpl %edi, %esp - jbe .Lok - - subl $12, %esp - cfi_adjust_cfa_offset(12) - xorl %ebx, %ebx - movl %esp, %ecx - movl $__NR_sigaltstack, %eax - ENTER_KERNEL - /* Without working sigaltstack we cannot perform the test. */ - test %eax, %eax - jne .Lok2 - testl $1, 4(%esp) - jz .Lfail - - movl (%esp), %eax - addl 8(%esp), %eax - subl %edi, %eax - cmpl 8(%esp), %eax - jae .Lok2 - -.Lfail: CALL_FAIL - -.Lok2: addl $12, %esp - cfi_adjust_cfa_offset(-12) - movl 4(%esp), %ecx - -.Lok: - LIBC_PROBE (longjmp, 3, 4@%ecx, -4@8(%esp), 4@%edx) - /* We add unwind information for the target here. */ - cfi_def_cfa(%ecx, 0) - cfi_register(%eip, %edx) - cfi_register(%esp, %edi) - cfi_offset(%ebx, JB_BX*4) - cfi_offset(%esi, JB_SI*4) - cfi_offset(%edi, JB_DI*4) - cfi_offset(%ebp, JB_BP*4) - - movl 8(%esp), %eax /* Second argument is return value. */ - movl %edi, %esp - - /* Restore registers. */ - movl (JB_BX*4)(%ecx), %ebx - movl (JB_SI*4)(%ecx), %esi - movl (JB_DI*4)(%ecx), %edi - movl (JB_BP*4)(%ecx), %ebp - cfi_restore(%ebx) - cfi_restore(%esi) - cfi_restore(%edi) - cfi_restore(%ebp) - - /* Jump to saved PC. */ - LIBC_PROBE (longjmp_target, 3, 4@%ecx, -4@%eax, 4@%edx) - jmp *%edx -END (____longjmp_chk) diff --git a/sysdeps/unix/sysv/linux/i386/_exit.S b/sysdeps/unix/sysv/linux/i386/_exit.S deleted file mode 100644 index 0ba2231998..0000000000 --- a/sysdeps/unix/sysv/linux/i386/_exit.S +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text - .type _exit,@function - .global _exit -_exit: - movl 4(%esp), %ebx - - /* Try the new syscall first. */ -#ifdef __NR_exit_group - movl $__NR_exit_group, %eax - ENTER_KERNEL -#endif - - /* Not available. Now the old one. */ - movl $__NR_exit, %eax - /* Don't bother using ENTER_KERNEL here. If the exit_group - syscall is not available AT_SYSINFO isn't either. */ - int $0x80 - - /* This must not fail. Be sure we don't return. */ - hlt - .size _exit,.-_exit - -libc_hidden_def (_exit) -rtld_hidden_def (_exit) -weak_alias (_exit, _Exit) diff --git a/sysdeps/unix/sysv/linux/i386/alphasort64.c b/sysdeps/unix/sysv/linux/i386/alphasort64.c deleted file mode 100644 index d5fd47a9ae..0000000000 --- a/sysdeps/unix/sysv/linux/i386/alphasort64.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__alphasort64 (const struct dirent64 **a, const struct dirent64 **b) -{ - return strcoll ((*a)->d_name, (*b)->d_name); -} - -#include - -versioned_symbol (libc, __alphasort64, alphasort64, GLIBC_2_2); - -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) - -#include - -int -__old_alphasort64 (const struct __old_dirent64 **a, - const struct __old_dirent64 **b); - -int -attribute_compat_text_section -__old_alphasort64 (const struct __old_dirent64 **a, - const struct __old_dirent64 **b) -{ - return strcoll ((*a)->d_name, (*b)->d_name); -} - -compat_symbol (libc, __old_alphasort64, alphasort64, GLIBC_2_1); -#endif diff --git a/sysdeps/unix/sysv/linux/i386/arch-fork.h b/sysdeps/unix/sysv/linux/i386/arch-fork.h deleted file mode 100644 index 9a2465b58e..0000000000 --- a/sysdeps/unix/sysv/linux/i386/arch-fork.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Internal definitions for thread-friendly fork implementation. Linux/i386. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 5, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0, \ - NULL, NULL, &THREAD_SELF->tid) diff --git a/sysdeps/unix/sysv/linux/i386/brk.c b/sysdeps/unix/sysv/linux/i386/brk.c deleted file mode 100644 index 25ab1015d3..0000000000 --- a/sysdeps/unix/sysv/linux/i386/brk.c +++ /dev/null @@ -1,41 +0,0 @@ -/* brk system call for Linux/i386. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt - to work around different old braindamage in the old Linux ELF dynamic - linker. */ -weak_alias (__curbrk, ___brk_addr) - -int -__brk (void *addr) -{ - INTERNAL_SYSCALL_DECL (err); - void *newbrk = (void *) INTERNAL_SYSCALL (brk, err, 1, addr); - __curbrk = newbrk; - if (newbrk < addr) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (ENOMEM); - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/i386/c++-types.data b/sysdeps/unix/sysv/linux/i386/c++-types.data deleted file mode 100644 index fde53bf337..0000000000 --- a/sysdeps/unix/sysv/linux/i386/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:i -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/i386/clone.S b/sysdeps/unix/sysv/linux/i386/clone.S deleted file mode 100644 index a4ba3e20ff..0000000000 --- a/sysdeps/unix/sysv/linux/i386/clone.S +++ /dev/null @@ -1,124 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@tamu.edu) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#define _ERRNO_H 1 -#include -#include - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - pid_t *ptid, struct user_desc *tls, pid_t *ctid); */ - -#define PARMS 4 /* no space for saved regs */ -#define FUNC PARMS -#define STACK FUNC+4 -#define FLAGS STACK+4 -#define ARG FLAGS+4 -#define PTID ARG+4 -#define TLS PTID+4 -#define CTID TLS+4 - -#define __NR_clone 120 -#define SYS_clone 120 - -#define CLONE_VM 0x00000100 - - .text -ENTRY (__clone) - /* Sanity check arguments. */ - movl $-EINVAL,%eax - movl FUNC(%esp),%ecx /* no NULL function pointers */ - testl %ecx,%ecx - jz SYSCALL_ERROR_LABEL - movl STACK(%esp),%ecx /* no NULL stack pointers */ - testl %ecx,%ecx - jz SYSCALL_ERROR_LABEL - - /* Insert the argument onto the new stack. Make sure the new - thread is started with an alignment of (mod 16). */ - andl $0xfffffff0, %ecx - subl $28,%ecx - movl ARG(%esp),%eax /* no negative argument counts */ - movl %eax,12(%ecx) - - /* Save the function pointer as the zeroth argument. - It will be popped off in the child in the ebx frobbing below. */ - movl FUNC(%esp),%eax - movl %eax,8(%ecx) - /* Don't leak any information. */ - movl $0,4(%ecx) - - /* Do the system call */ - pushl %ebx - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - pushl %edi - cfi_adjust_cfa_offset (4) - - movl TLS+12(%esp),%esi - cfi_rel_offset (esi, 4) - movl PTID+12(%esp),%edx - movl FLAGS+12(%esp),%ebx - cfi_rel_offset (ebx, 8) - movl CTID+12(%esp),%edi - cfi_rel_offset (edi, 0) - movl $SYS_ify(clone),%eax - - /* Remember the flag value. */ - movl %ebx, (%ecx) - - /* End FDE now, because in the child the unwind info will be - wrong. */ - cfi_endproc - - int $0x80 - popl %edi - popl %esi - popl %ebx - - test %eax,%eax - jl SYSCALL_ERROR_LABEL - jz L(thread_start) - - ret - -L(thread_start): - cfi_startproc; - /* Clearing frame pointer is insufficient, use CFI. */ - cfi_undefined (eip); - /* Note: %esi is zero. */ - movl %esi,%ebp /* terminate the stack frame */ - call *%ebx -#ifdef PIC - call L(here) -L(here): - popl %ebx - addl $_GLOBAL_OFFSET_TABLE_+[.-L(here)], %ebx -#endif - movl %eax, %ebx - movl $SYS_ify(exit), %eax - ENTER_KERNEL - -PSEUDO_END (__clone) - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/i386/configure b/sysdeps/unix/sysv/linux/i386/configure deleted file mode 100644 index 0327590486..0000000000 --- a/sysdeps/unix/sysv/linux/i386/configure +++ /dev/null @@ -1,44 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/i386. - -# Check if CFLAGS allows compiler to use ebp register in inline assembly. - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler flags allows ebp in inline assembly" >&5 -$as_echo_n "checking if compiler flags allows ebp in inline assembly... " >&6; } -if ${libc_cv_can_use_register_asm_ebp+:} false; then : - $as_echo_n "(cached) " >&6 -else - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - void foo (int i) - { - register int reg asm ("ebp") = i; - asm ("# %0" : : "r" (reg)); - } -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_cv_can_use_register_asm_ebp=yes -else - libc_cv_can_use_register_asm_ebp=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_can_use_register_asm_ebp" >&5 -$as_echo "$libc_cv_can_use_register_asm_ebp" >&6; } -if test $libc_cv_can_use_register_asm_ebp = yes; then - $as_echo "#define CAN_USE_REGISTER_ASM_EBP 1" >>confdefs.h - -fi - -libc_cv_gcc_unwind_find_fde=yes -ldd_rewrite_script=sysdeps/unix/sysv/linux/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/i386/configure.ac b/sysdeps/unix/sysv/linux/i386/configure.ac deleted file mode 100644 index 9e980784bb..0000000000 --- a/sysdeps/unix/sysv/linux/i386/configure.ac +++ /dev/null @@ -1,22 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/i386. - -# Check if CFLAGS allows compiler to use ebp register in inline assembly. -AC_CACHE_CHECK([if compiler flags allows ebp in inline assembly], - libc_cv_can_use_register_asm_ebp, [ -AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([ - void foo (int i) - { - register int reg asm ("ebp") = i; - asm ("# %0" : : "r" (reg)); - }])], - [libc_cv_can_use_register_asm_ebp=yes], - [libc_cv_can_use_register_asm_ebp=no]) -]) -if test $libc_cv_can_use_register_asm_ebp = yes; then - AC_DEFINE(CAN_USE_REGISTER_ASM_EBP) -fi - -libc_cv_gcc_unwind_find_fde=yes -ldd_rewrite_script=sysdeps/unix/sysv/linux/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/i386/dl-librecon.h b/sysdeps/unix/sysv/linux/i386/dl-librecon.h deleted file mode 100644 index 5f91009a4c..0000000000 --- a/sysdeps/unix/sysv/linux/i386/dl-librecon.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Optional code to distinguish library flavours. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_LIBRECON_H - -#include - -#define DISTINGUISH_LIB_VERSIONS \ - do \ - { \ - /* We have to find out whether the binary is linked against \ - libc 5 or glibc. We do this by looking at all the DT_NEEDED \ - entries. If one is libc.so.5 this is a libc 5 linked binary. */ \ - if (main_map->l_info[DT_NEEDED]) \ - { \ - /* We have dependencies. */ \ - const ElfW(Dyn) *d; \ - const char *strtab; \ - \ - strtab = (const char *) D_PTR (main_map, l_info[DT_STRTAB]); \ - \ - for (d = main_map->l_ld; d->d_tag != DT_NULL; ++d) \ - if (d->d_tag == DT_NEEDED \ - && strcmp (strtab + d->d_un.d_val, "libc.so.5") == 0) \ - break; \ - \ - /* We print a `5' or `6' depending on the outcome. */ \ - _dl_printf (d->d_tag != DT_NULL ? "5\n" : "6\n"); \ - } \ - } \ - while (0) - -/* Recognizing extra environment variables. */ -#define EXTRA_LD_ENVVARS \ - case 15: \ - if (memcmp (envline, "LIBRARY_VERSION", 15) == 0) \ - GLRO(dl_correct_cache_id) = envline[16] == '5' ? 2 : 3; \ - break; \ - -/* Extra unsecure variables. The names are all stuffed in a single - string which means they have to be terminated with a '\0' explicitly. */ -#define EXTRA_UNSECURE_ENVVARS \ - "LD_AOUT_LIBRARY_PATH\0" \ - "LD_AOUT_PRELOAD\0" - -#endif /* dl-librecon.h */ diff --git a/sysdeps/unix/sysv/linux/i386/dl-procinfo.h b/sysdeps/unix/sysv/linux/i386/dl-procinfo.h deleted file mode 100644 index c590896ddf..0000000000 --- a/sysdeps/unix/sysv/linux/i386/dl-procinfo.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Linux/i386 version of processor capability information handling macros. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_I386_PROCINFO_H -#define _DL_I386_PROCINFO_H 1 -#include - -#undef _dl_procinfo -static inline int -__attribute__ ((unused)) -_dl_procinfo (unsigned int type, unsigned long int word) -{ - /* This table should match the information from arch/i386/kernel/setup.c - in the kernel sources. */ - int i; - - /* Fallback to unknown output mechanism. */ - if (type == AT_HWCAP2) - return -1; - - _dl_printf ("AT_HWCAP: "); - - for (i = 0; i < 32; ++i) - if (word & (1 << i)) - _dl_printf (" %s", GLRO(dl_x86_cap_flags)[i]); - - _dl_printf ("\n"); - - return 0; -} -#endif diff --git a/sysdeps/unix/sysv/linux/i386/dl-sysdep.h b/sysdeps/unix/sysv/linux/i386/dl-sysdep.h deleted file mode 100644 index 8a3af5e27b..0000000000 --- a/sysdeps/unix/sysv/linux/i386/dl-sysdep.h +++ /dev/null @@ -1,46 +0,0 @@ -/* System-specific settings for dynamic linker code. i386 version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_I386_DL_SYSDEP_H - -#include_next - -/* Traditionally system calls have been made using int $0x80. A - second method was introduced which, if possible, will use the - sysenter/syscall instructions. To signal the presence and where to - find the code the kernel passes an AT_SYSINFO value in the - auxiliary vector to the application. */ -#define NEED_DL_SYSINFO 1 - -#ifndef __ASSEMBLER__ -extern void _dl_sysinfo_int80 (void) attribute_hidden; -# define DL_SYSINFO_DEFAULT (uintptr_t) _dl_sysinfo_int80 -# define DL_SYSINFO_IMPLEMENTATION \ - asm (".text\n\t" \ - ".type _dl_sysinfo_int80,@function\n\t" \ - ".hidden _dl_sysinfo_int80\n" \ - CFI_STARTPROC "\n" \ - "_dl_sysinfo_int80:\n\t" \ - "int $0x80;\n\t" \ - "ret;\n\t" \ - CFI_ENDPROC "\n" \ - ".size _dl_sysinfo_int80,.-_dl_sysinfo_int80\n\t" \ - ".previous"); -#endif - -#endif /* dl-sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/i386/fcntl.c b/sysdeps/unix/sysv/linux/i386/fcntl.c deleted file mode 100644 index b0a5783a8a..0000000000 --- a/sysdeps/unix/sysv/linux/i386/fcntl.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include /* Must come before . */ -#include -#include - -#include - -#ifndef NO_CANCELLATION -int -__fcntl_nocancel (int fd, int cmd, ...) -{ - va_list ap; - void *arg; - - va_start (ap, cmd); - arg = va_arg (ap, void *); - va_end (ap); - - return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg); -} -#endif /* NO_CANCELLATION */ - - -int -__libc_fcntl (int fd, int cmd, ...) -{ - va_list ap; - void *arg; - - va_start (ap, cmd); - arg = va_arg (ap, void *); - va_end (ap); - - if ((cmd != F_SETLKW) && (cmd != F_SETLKW64)) - return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg); - - return SYSCALL_CANCEL (fcntl64, fd, cmd, arg); -} -libc_hidden_def (__libc_fcntl) - -weak_alias (__libc_fcntl, __fcntl) -libc_hidden_weak (__fcntl) -weak_alias (__libc_fcntl, fcntl) diff --git a/sysdeps/unix/sysv/linux/i386/fxstat.c b/sysdeps/unix/sysv/linux/i386/fxstat.c deleted file mode 100644 index c4cdbf54c0..0000000000 --- a/sysdeps/unix/sysv/linux/i386/fxstat.c +++ /dev/null @@ -1,61 +0,0 @@ -/* fxstat using old-style Unix fstat system call. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ho hum, if xstat == xstat64 we must get rid of the prototype or gcc - will complain since they don't strictly match. */ -#define __fxstat64 __fxstat64_disable - -#include -#include -#include -#include - -#include -#include - -#include - -/* Get information about the file FD in BUF. */ -int -__fxstat (int vers, int fd, struct stat *buf) -{ - int result; - - if (vers == _STAT_VER_KERNEL) - return INLINE_SYSCALL (fstat, 2, fd, buf); - - { - struct stat64 buf64; - - INTERNAL_SYSCALL_DECL (err); - result = INTERNAL_SYSCALL (fstat64, err, 2, fd, &buf64); - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err))) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (result, - err)); - else - return __xstat32_conv (vers, &buf64, buf); - } -} - -hidden_def (__fxstat) -weak_alias (__fxstat, _fxstat); -#if XSTAT_IS_XSTAT64 -#undef __fxstat64 -strong_alias (__fxstat, __fxstat64); -hidden_ver (__fxstat, __fxstat64) -#endif diff --git a/sysdeps/unix/sysv/linux/i386/fxstatat.c b/sysdeps/unix/sysv/linux/i386/fxstatat.c deleted file mode 100644 index 7980c9bbe0..0000000000 --- a/sysdeps/unix/sysv/linux/i386/fxstatat.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ho hum, if fxstatat == fxstatat64 we must get rid of the prototype or gcc - will complain since they don't strictly match. */ -#define __fxstatat64 __fxstatat64_disable - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - - -/* Get information about the file NAME relative to FD in ST. */ -int -__fxstatat (int vers, int fd, const char *file, struct stat *st, int flag) -{ - int result; - INTERNAL_SYSCALL_DECL (err); - struct stat64 st64; - - result = INTERNAL_SYSCALL (fstatat64, err, 4, fd, file, &st64, flag); - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err))) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (result, - err)); - else - return __xstat32_conv (vers, &st64, st); -} -libc_hidden_def (__fxstatat) -#if XSTAT_IS_XSTAT64 -# undef __fxstatat64 -strong_alias (__fxstatat, __fxstatat64); -libc_hidden_ver (__fxstatat, __fxstatat64) -#endif diff --git a/sysdeps/unix/sysv/linux/i386/get_clockfreq.c b/sysdeps/unix/sysv/linux/i386/get_clockfreq.c deleted file mode 100644 index 88e14b5f04..0000000000 --- a/sysdeps/unix/sysv/linux/i386/get_clockfreq.c +++ /dev/null @@ -1,88 +0,0 @@ -/* Get frequency of the system processor. i386/Linux version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -hp_timing_t -__get_clockfreq (void) -{ - /* We read the information from the /proc filesystem. It contains at - least one line like - cpu MHz : 497.840237 - or also - cpu MHz : 497.841 - We search for this line and convert the number in an integer. */ - static hp_timing_t result; - int fd; - - /* If this function was called before, we know the result. */ - if (result != 0) - return result; - - fd = __open ("/proc/cpuinfo", O_RDONLY); - if (__glibc_likely (fd != -1)) - { - /* XXX AFAIK the /proc filesystem can generate "files" only up - to a size of 4096 bytes. */ - char buf[4096]; - ssize_t n; - - n = __read (fd, buf, sizeof buf); - if (__builtin_expect (n, 1) > 0) - { - char *mhz = memmem (buf, n, "cpu MHz", 7); - - if (__glibc_likely (mhz != NULL)) - { - char *endp = buf + n; - int seen_decpoint = 0; - int ndigits = 0; - - /* Search for the beginning of the string. */ - while (mhz < endp && (*mhz < '0' || *mhz > '9') && *mhz != '\n') - ++mhz; - - while (mhz < endp && *mhz != '\n') - { - if (*mhz >= '0' && *mhz <= '9') - { - result *= 10; - result += *mhz - '0'; - if (seen_decpoint) - ++ndigits; - } - else if (*mhz == '.') - seen_decpoint = 1; - - ++mhz; - } - - /* Compensate for missing digits at the end. */ - while (ndigits++ < 6) - result *= 10; - } - } - - __close (fd); - } - - return result; -} diff --git a/sysdeps/unix/sysv/linux/i386/getcontext.S b/sysdeps/unix/sysv/linux/i386/getcontext.S deleted file mode 100644 index 591c3885a5..0000000000 --- a/sysdeps/unix/sysv/linux/i386/getcontext.S +++ /dev/null @@ -1,83 +0,0 @@ -/* Save current context. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - - -ENTRY(__getcontext) - /* Load address of the context data structure. */ - movl 4(%esp), %eax - - /* Return value of getcontext. EAX is the only register whose - value is not preserved. */ - movl $0, oEAX(%eax) - - /* Save the 32-bit register values and the return address. */ - movl %ecx, oECX(%eax) - movl %edx, oEDX(%eax) - movl %edi, oEDI(%eax) - movl %esi, oESI(%eax) - movl %ebp, oEBP(%eax) - movl (%esp), %ecx - movl %ecx, oEIP(%eax) - leal 4(%esp), %ecx /* Exclude the return address. */ - movl %ecx, oESP(%eax) - movl %ebx, oEBX(%eax) - - /* Save the FS segment register. We don't touch the GS register - since it is used for threads. */ - xorl %edx, %edx - movw %fs, %dx - movl %edx, oFS(%eax) - - /* We have separate floating-point register content memory on the - stack. We use the __fpregs_mem block in the context. Set the - links up correctly. */ - leal oFPREGSMEM(%eax), %ecx - movl %ecx, oFPREGS(%eax) - /* Save the floating-point context. */ - fnstenv (%ecx) - /* And load it right back since the processor changes the mask. - Intel thought this opcode to be used in interrupt handlers which - would block all exceptions. */ - fldenv (%ecx) - - /* Save the current signal mask. */ - pushl %ebx - cfi_adjust_cfa_offset (4) - cfi_rel_offset (ebx, 0) - leal oSIGMASK(%eax), %edx - xorl %ecx, %ecx - movl $SIG_BLOCK, %ebx - movl $__NR_sigprocmask, %eax - ENTER_KERNEL - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - cmpl $-4095, %eax /* Check %eax for error. */ - jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ - - /* All done, return 0 for success. */ - xorl %eax, %eax - ret -PSEUDO_END(__getcontext) - -weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/i386/getdents64.c b/sysdeps/unix/sysv/linux/i386/getdents64.c deleted file mode 100644 index e8b257f059..0000000000 --- a/sysdeps/unix/sysv/linux/i386/getdents64.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __GETDENTS __getdents64 -#define DIRENT_TYPE struct dirent64 - -#include - -#include - -#undef __READDIR -#undef __GETDENTS -#undef DIRENT_TYPE - -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) - -#include - -#define __GETDENTS __old_getdents64 -#define DIRENT_TYPE struct __old_dirent64 -#define kernel_dirent old_kernel_dirent -#define kernel_dirent64 old_kernel_dirent64 - -#include -#endif diff --git a/sysdeps/unix/sysv/linux/i386/getmsg.c b/sysdeps/unix/sysv/linux/i386/getmsg.c deleted file mode 100644 index 5bf1e255c5..0000000000 --- a/sysdeps/unix/sysv/linux/i386/getmsg.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -#ifdef __NR_getpmsg -int -getmsg (int fildes, struct strbuf *ctlptr, struct strbuf *dataptr, int *flagsp) -{ - return INLINE_SYSCALL (getpmsg, 5, fildes, ctlptr, dataptr, NULL, flagsp); -} -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/i386/gettimeofday.c b/sysdeps/unix/sysv/linux/i386/gettimeofday.c deleted file mode 100644 index b6116e91ba..0000000000 --- a/sysdeps/unix/sysv/linux/i386/gettimeofday.c +++ /dev/null @@ -1,35 +0,0 @@ -/* gettimeofday - get the time. Linux/i386 version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef SHARED -# define __gettimeofday __redirect___gettimeofday -#endif - -#include - -#ifdef SHARED -# undef __gettimeofday -# define __gettimeofday_type __redirect___gettimeofday - -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__gettimeofday_syscall, __GI___gettimeofday, \ - __gettimeofday_syscall); -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/i386/glob64.c b/sysdeps/unix/sysv/linux/i386/glob64.c deleted file mode 100644 index f68195137e..0000000000 --- a/sysdeps/unix/sysv/linux/i386/glob64.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Two glob variants with 64-bit support, for dirent64 and __olddirent64. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define dirent dirent64 -#define __readdir(dirp) __readdir64 (dirp) - -#define glob_t glob64_t -#define glob(pattern, flags, errfunc, pglob) \ - __glob64 (pattern, flags, errfunc, pglob) -#define globfree(pglob) globfree64 (pglob) - -#undef stat -#define stat stat64 -#undef __stat -#define __stat(file, buf) __xstat64 (_STAT_VER, file, buf) - -#define NO_GLOB_PATTERN_P 1 - -#define COMPILE_GLOB64 1 - -#include - -#include "shlib-compat.h" - -libc_hidden_def (globfree64) - -versioned_symbol (libc, __glob64, glob64, GLIBC_2_2); -libc_hidden_ver (__glob64, glob64) - -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) - -#include - -int __old_glob64 (const char *__pattern, int __flags, - int (*__errfunc) (const char *, int), - glob64_t *__pglob); - -#undef dirent -#define dirent __old_dirent64 -#undef GL_READDIR -# define GL_READDIR(pglob, stream) \ - ((struct __old_dirent64 *) (pglob)->gl_readdir (stream)) -#undef __readdir -#define __readdir(dirp) __old_readdir64 (dirp) -#undef glob -#define glob(pattern, flags, errfunc, pglob) \ - __old_glob64 (pattern, flags, errfunc, pglob) -#define convert_dirent __old_convert_dirent -#define glob_in_dir __old_glob_in_dir -#define GLOB_ATTRIBUTE attribute_compat_text_section - -#define GLOB_ONLY_P 1 - -#include - -compat_symbol (libc, __old_glob64, glob64, GLIBC_2_1); -#endif diff --git a/sysdeps/unix/sysv/linux/i386/i686/Implies b/sysdeps/unix/sysv/linux/i386/i686/Implies deleted file mode 100644 index 8948a800bb..0000000000 --- a/sysdeps/unix/sysv/linux/i386/i686/Implies +++ /dev/null @@ -1 +0,0 @@ -i386/i686/nptl diff --git a/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h b/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h deleted file mode 100644 index ad90853864..0000000000 --- a/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h +++ /dev/null @@ -1,29 +0,0 @@ -/* System-specific settings for dynamic linker code. IA-32 version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_I686_DL_SYSDEP_H -#define _LINUX_I686_DL_SYSDEP_H 1 - -/* The i386 file does most of the work. */ -#include_next - -/* Actually use the vDSO entry point for syscalls. - i386/dl-sysdep.h arranges to support it, but not use it. */ -#define USE_DL_SYSINFO 1 - -#endif /* dl-sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/i386/i786/Implies b/sysdeps/unix/sysv/linux/i386/i786/Implies deleted file mode 100644 index 7cb7d9a678..0000000000 --- a/sysdeps/unix/sysv/linux/i386/i786/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# The PPro and PII cores are mostly the same. -unix/sysv/linux/i386/i686 diff --git a/sysdeps/unix/sysv/linux/i386/init-first.c b/sysdeps/unix/sysv/linux/i386/init-first.c deleted file mode 100644 index bbbecdd41f..0000000000 --- a/sysdeps/unix/sysv/linux/i386/init-first.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Initialization code run first thing by the ELF startup code. Linux/i386. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef SHARED -# include -# include -# include -# include - -long int (*VDSO_SYMBOL (clock_gettime)) (clockid_t, struct timespec *) - attribute_hidden; - -static long int -clock_gettime_syscall (clockid_t id, struct timespec *tp) -{ - INTERNAL_SYSCALL_DECL (err); - return INTERNAL_SYSCALL (clock_gettime, err, 2, id, tp); -} - -static inline void -__vdso_platform_setup (void) -{ - PREPARE_VERSION_KNOWN (linux26, LINUX_2_6); - - void *p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26); - if (p == NULL) - p = clock_gettime_syscall; - PTR_MANGLE (p); - VDSO_SYMBOL (clock_gettime) = p; -} - -# define VDSO_SETUP __vdso_platform_setup -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/i386/kernel-features.h b/sysdeps/unix/sysv/linux/i386/kernel-features.h deleted file mode 100644 index c6eb20f360..0000000000 --- a/sysdeps/unix/sysv/linux/i386/kernel-features.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. i386 version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* i386 uses socketcall. */ -#define __ASSUME_SOCKETCALL 1 - -/* Direct socketcalls available with kernel 4.3. */ -#if __LINUX_KERNEL_VERSION >= 0x040300 -# define __ASSUME_SOCKET_SYSCALL 1 -# define __ASSUME_SOCKETPAIR_SYSCALL 1 -# define __ASSUME_BIND_SYSCALL 1 -# define __ASSUME_LISTEN_SYSCALL 1 -# define __ASSUME_GETSOCKOPT_SYSCALL 1 -# define __ASSUME_SETSOCKOPT_SYSCALL 1 -# define __ASSUME_GETSOCKNAME_SYSCALL 1 -# define __ASSUME_GETPEERNAME_SYSCALL 1 -# define __ASSUME_SHUTDOWN_SYSCALL 1 -#endif - -#include_next - -#undef __ASSUME_ACCEPT_SYSCALL - -#if __LINUX_KERNEL_VERSION < 0x040300 -# undef __ASSUME_ACCEPT4_SYSCALL -# undef __ASSUME_SENDMSG_SYSCALL -# undef __ASSUME_RECVMSG_SYSCALL -# undef __ASSUME_CONNECT_SYSCALL -# undef __ASSUME_RECVFROM_SYSCALL -# undef __ASSUME_SENDTO_SYSCALL -#endif - -/* i686 only supports ipc syscall. */ -#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS diff --git a/sysdeps/unix/sysv/linux/i386/ld.abilist b/sysdeps/unix/sysv/linux/i386/ld.abilist deleted file mode 100644 index ddf9e78ec2..0000000000 --- a/sysdeps/unix/sysv/linux/i386/ld.abilist +++ /dev/null @@ -1,13 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _r_debug D 0x14 -GLIBC_2.0 calloc F -GLIBC_2.0 free F -GLIBC_2.0 malloc F -GLIBC_2.0 realloc F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __libc_stack_end D 0x4 -GLIBC_2.1 _dl_mcount F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 ___tls_get_addr F -GLIBC_2.3 __tls_get_addr F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/i386/ldconfig.h b/sysdeps/unix/sysv/linux/i386/ldconfig.h deleted file mode 100644 index 7112cb275d..0000000000 --- a/sysdeps/unix/sysv/linux/i386/ldconfig.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld-linux.so.1", FLAG_ELF_LIBC5 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.5", FLAG_ELF_LIBC5 }, \ - { "libm.so.5", FLAG_ELF_LIBC5 }, diff --git a/sysdeps/unix/sysv/linux/i386/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/i386/libBrokenLocale.abilist deleted file mode 100644 index 4a56bb68a3..0000000000 --- a/sysdeps/unix/sysv/linux/i386/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/i386/libanl.abilist b/sysdeps/unix/sysv/linux/i386/libanl.abilist deleted file mode 100644 index edabfb436e..0000000000 --- a/sysdeps/unix/sysv/linux/i386/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 gai_cancel F -GLIBC_2.2.3 gai_error F -GLIBC_2.2.3 gai_suspend F -GLIBC_2.2.3 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/i386/libc-do-syscall.S b/sysdeps/unix/sysv/linux/i386/libc-do-syscall.S deleted file mode 100644 index f706c6da57..0000000000 --- a/sysdeps/unix/sysv/linux/i386/libc-do-syscall.S +++ /dev/null @@ -1,53 +0,0 @@ -/* Out-of-line syscall stub for six-argument syscalls from C. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef OPTIMIZE_FOR_GCC_5 - -/* %eax, %ecx, %edx and %esi contain the values expected by the kernel. - %edi points to a structure with the values of %ebx, %edi and %ebp. */ - - .hidden __libc_do_syscall - -ENTRY (__libc_do_syscall) - pushl %ebx - cfi_adjust_cfa_offset (4) - cfi_rel_offset (ebx, 0) - pushl %edi - cfi_adjust_cfa_offset (4) - cfi_rel_offset (edi, 0) - pushl %ebp - cfi_adjust_cfa_offset (4) - cfi_rel_offset (ebp, 0) - movl 0(%edi), %ebx - movl 8(%edi), %ebp - movl 4(%edi), %edi - ENTER_KERNEL - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - ret -END (__libc_do_syscall) -#endif diff --git a/sysdeps/unix/sysv/linux/i386/libc-lowlevellock.S b/sysdeps/unix/sysv/linux/i386/libc-lowlevellock.S deleted file mode 100644 index 1e5e150aa7..0000000000 --- a/sysdeps/unix/sysv/linux/i386/libc-lowlevellock.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "lowlevellock.S" diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist deleted file mode 100644 index 2ff1998ac9..0000000000 --- a/sysdeps/unix/sysv/linux/i386/libc.abilist +++ /dev/null @@ -1,2333 +0,0 @@ -GCC_3.0 GCC_3.0 A -GCC_3.0 _Unwind_Find_FDE F -GCC_3.0 __deregister_frame_info_bases F -GCC_3.0 __register_frame_info_bases F -GCC_3.0 __register_frame_info_table_bases F -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_adjust_column F -GLIBC_2.0 _IO_default_doallocate F -GLIBC_2.0 _IO_default_finish F -GLIBC_2.0 _IO_default_pbackfail F -GLIBC_2.0 _IO_default_uflow F -GLIBC_2.0 _IO_default_xsgetn F -GLIBC_2.0 _IO_default_xsputn F -GLIBC_2.0 _IO_do_write F -GLIBC_2.0 _IO_doallocbuf F -GLIBC_2.0 _IO_fclose F -GLIBC_2.0 _IO_fdopen F -GLIBC_2.0 _IO_feof F -GLIBC_2.0 _IO_ferror F -GLIBC_2.0 _IO_fflush F -GLIBC_2.0 _IO_fgetpos F -GLIBC_2.0 _IO_fgets F -GLIBC_2.0 _IO_file_attach F -GLIBC_2.0 _IO_file_close F -GLIBC_2.0 _IO_file_close_it F -GLIBC_2.0 _IO_file_doallocate F -GLIBC_2.0 _IO_file_fopen F -GLIBC_2.0 _IO_file_init F -GLIBC_2.0 _IO_file_jumps D 0x54 -GLIBC_2.0 _IO_file_open F -GLIBC_2.0 _IO_file_overflow F -GLIBC_2.0 _IO_file_read F -GLIBC_2.0 _IO_file_seek F -GLIBC_2.0 _IO_file_seekoff F -GLIBC_2.0 _IO_file_setbuf F -GLIBC_2.0 _IO_file_stat F -GLIBC_2.0 _IO_file_sync F -GLIBC_2.0 _IO_file_underflow F -GLIBC_2.0 _IO_file_write F -GLIBC_2.0 _IO_file_xsputn F -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_flush_all F -GLIBC_2.0 _IO_flush_all_linebuffered F -GLIBC_2.0 _IO_fopen F -GLIBC_2.0 _IO_fprintf F -GLIBC_2.0 _IO_fputs F -GLIBC_2.0 _IO_fread F -GLIBC_2.0 _IO_free_backup_area F -GLIBC_2.0 _IO_fsetpos F -GLIBC_2.0 _IO_ftell F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 _IO_fwrite F -GLIBC_2.0 _IO_getc F -GLIBC_2.0 _IO_getline F -GLIBC_2.0 _IO_gets F -GLIBC_2.0 _IO_init F -GLIBC_2.0 _IO_init_marker F -GLIBC_2.0 _IO_link_in F -GLIBC_2.0 _IO_list_all D 0x4 -GLIBC_2.0 _IO_marker_delta F -GLIBC_2.0 _IO_marker_difference F -GLIBC_2.0 _IO_padn F -GLIBC_2.0 _IO_peekc_locked F -GLIBC_2.0 _IO_popen F -GLIBC_2.0 _IO_printf F -GLIBC_2.0 _IO_proc_close F -GLIBC_2.0 _IO_proc_open F -GLIBC_2.0 _IO_putc F -GLIBC_2.0 _IO_puts F -GLIBC_2.0 _IO_remove_marker F -GLIBC_2.0 _IO_seekmark F -GLIBC_2.0 _IO_seekoff F -GLIBC_2.0 _IO_seekpos F -GLIBC_2.0 _IO_setb F -GLIBC_2.0 _IO_setbuffer F -GLIBC_2.0 _IO_setvbuf F -GLIBC_2.0 _IO_sgetn F -GLIBC_2.0 _IO_sprintf F -GLIBC_2.0 _IO_sputbackc F -GLIBC_2.0 _IO_sscanf F -GLIBC_2.0 _IO_stderr_ D 0x50 -GLIBC_2.0 _IO_stdin_ D 0x50 -GLIBC_2.0 _IO_stdout_ D 0x50 -GLIBC_2.0 _IO_str_init_readonly F -GLIBC_2.0 _IO_str_init_static F -GLIBC_2.0 _IO_str_overflow F -GLIBC_2.0 _IO_str_pbackfail F -GLIBC_2.0 _IO_str_seekoff F -GLIBC_2.0 _IO_str_underflow F -GLIBC_2.0 _IO_sungetc F -GLIBC_2.0 _IO_switch_to_get_mode F -GLIBC_2.0 _IO_un_link F -GLIBC_2.0 _IO_ungetc F -GLIBC_2.0 _IO_unsave_markers F -GLIBC_2.0 _IO_vfprintf F -GLIBC_2.0 _IO_vfscanf F -GLIBC_2.0 _IO_vsprintf F -GLIBC_2.0 ___brk_addr D 0x4 -GLIBC_2.0 __adjtimex F -GLIBC_2.0 __after_morecore_hook D 0x4 -GLIBC_2.0 __argz_count F -GLIBC_2.0 __argz_next F -GLIBC_2.0 __argz_stringify F -GLIBC_2.0 __assert_fail F -GLIBC_2.0 __assert_perror_fail F -GLIBC_2.0 __bsd_getpgrp F -GLIBC_2.0 __bzero F -GLIBC_2.0 __check_rhosts_file D 0x4 -GLIBC_2.0 __clone F -GLIBC_2.0 __close F -GLIBC_2.0 __cmsg_nxthdr F -GLIBC_2.0 __connect F -GLIBC_2.0 __ctype32_b D 0x4 -GLIBC_2.0 __ctype_b D 0x4 -GLIBC_2.0 __ctype_get_mb_cur_max F -GLIBC_2.0 __ctype_tolower D 0x4 -GLIBC_2.0 __ctype_toupper D 0x4 -GLIBC_2.0 __curbrk D 0x4 -GLIBC_2.0 __daylight D 0x4 -GLIBC_2.0 __dcgettext F -GLIBC_2.0 __default_morecore F -GLIBC_2.0 __deregister_frame F -GLIBC_2.0 __deregister_frame_info F -GLIBC_2.0 __dgettext F -GLIBC_2.0 __divdi3 F -GLIBC_2.0 __dup2 F -GLIBC_2.0 __environ D 0x4 -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __ffs F -GLIBC_2.0 __finite F -GLIBC_2.0 __finitef F -GLIBC_2.0 __finitel F -GLIBC_2.0 __fork F -GLIBC_2.0 __fpu_control D 0x2 -GLIBC_2.0 __frame_state_for F -GLIBC_2.0 __free_hook D 0x4 -GLIBC_2.0 __fxstat F -GLIBC_2.0 __getdelim F -GLIBC_2.0 __getpagesize F -GLIBC_2.0 __getpgid F -GLIBC_2.0 __getpid F -GLIBC_2.0 __gettimeofday F -GLIBC_2.0 __gmtime_r F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __isinf F -GLIBC_2.0 __isinff F -GLIBC_2.0 __isinfl F -GLIBC_2.0 __isnan F -GLIBC_2.0 __isnanf F -GLIBC_2.0 __isnanl F -GLIBC_2.0 __iswctype F -GLIBC_2.0 __ivaliduser F -GLIBC_2.0 __libc_calloc F -GLIBC_2.0 __libc_free F -GLIBC_2.0 __libc_init_first F -GLIBC_2.0 __libc_mallinfo F -GLIBC_2.0 __libc_malloc F -GLIBC_2.0 __libc_mallopt F -GLIBC_2.0 __libc_memalign F -GLIBC_2.0 __libc_pvalloc F -GLIBC_2.0 __libc_realloc F -GLIBC_2.0 __libc_start_main F -GLIBC_2.0 __libc_valloc F -GLIBC_2.0 __lseek F -GLIBC_2.0 __lxstat F -GLIBC_2.0 __malloc_hook D 0x4 -GLIBC_2.0 __malloc_initialize_hook D 0x4 -GLIBC_2.0 __mbrlen F -GLIBC_2.0 __mbrtowc F -GLIBC_2.0 __memalign_hook D 0x4 -GLIBC_2.0 __mempcpy F -GLIBC_2.0 __moddi3 F -GLIBC_2.0 __monstartup F -GLIBC_2.0 __morecore D 0x4 -GLIBC_2.0 __nss_configure_lookup F -GLIBC_2.0 __nss_database_lookup F -GLIBC_2.0 __nss_group_lookup F -GLIBC_2.0 __nss_hosts_lookup F -GLIBC_2.0 __nss_next F -GLIBC_2.0 __nss_passwd_lookup F -GLIBC_2.0 __open F -GLIBC_2.0 __overflow F -GLIBC_2.0 __pipe F -GLIBC_2.0 __printf_fp F -GLIBC_2.0 __profile_frequency F -GLIBC_2.0 __progname D 0x4 -GLIBC_2.0 __progname_full D 0x4 -GLIBC_2.0 __rcmd_errstr D 0x4 -GLIBC_2.0 __read F -GLIBC_2.0 __realloc_hook D 0x4 -GLIBC_2.0 __register_frame F -GLIBC_2.0 __register_frame_info F -GLIBC_2.0 __register_frame_info_table F -GLIBC_2.0 __register_frame_table F -GLIBC_2.0 __res_randomid F -GLIBC_2.0 __sbrk F -GLIBC_2.0 __sched_get_priority_max F -GLIBC_2.0 __sched_get_priority_min F -GLIBC_2.0 __sched_getparam F -GLIBC_2.0 __sched_getscheduler F -GLIBC_2.0 __sched_setscheduler F -GLIBC_2.0 __sched_yield F -GLIBC_2.0 __secure_getenv F -GLIBC_2.0 __select F -GLIBC_2.0 __send F -GLIBC_2.0 __setpgid F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __sigaddset F -GLIBC_2.0 __sigdelset F -GLIBC_2.0 __sigismember F -GLIBC_2.0 __sigpause F -GLIBC_2.0 __sigsetjmp F -GLIBC_2.0 __stpcpy F -GLIBC_2.0 __stpncpy F -GLIBC_2.0 __strcasecmp F -GLIBC_2.0 __strdup F -GLIBC_2.0 __strerror_r F -GLIBC_2.0 __strtod_internal F -GLIBC_2.0 __strtof_internal F -GLIBC_2.0 __strtok_r F -GLIBC_2.0 __strtol_internal F -GLIBC_2.0 __strtold_internal F -GLIBC_2.0 __strtoll_internal F -GLIBC_2.0 __strtoq_internal F -GLIBC_2.0 __strtoul_internal F -GLIBC_2.0 __strtoull_internal F -GLIBC_2.0 __strtouq_internal F -GLIBC_2.0 __sysv_signal F -GLIBC_2.0 __timezone D 0x4 -GLIBC_2.0 __tzname D 0x8 -GLIBC_2.0 __udivdi3 F -GLIBC_2.0 __uflow F -GLIBC_2.0 __umoddi3 F -GLIBC_2.0 __underflow F -GLIBC_2.0 __vfscanf F -GLIBC_2.0 __vsnprintf F -GLIBC_2.0 __vsscanf F -GLIBC_2.0 __wait F -GLIBC_2.0 __waitpid F -GLIBC_2.0 __wcstod_internal F -GLIBC_2.0 __wcstof_internal F -GLIBC_2.0 __wcstol_internal F -GLIBC_2.0 __wcstold_internal F -GLIBC_2.0 __wcstoll_internal F -GLIBC_2.0 __wcstoul_internal F -GLIBC_2.0 __wcstoull_internal F -GLIBC_2.0 __write F -GLIBC_2.0 __xmknod F -GLIBC_2.0 __xpg_basename F -GLIBC_2.0 __xstat F -GLIBC_2.0 _environ D 0x4 -GLIBC_2.0 _exit F -GLIBC_2.0 _libc_intl_domainname D 0x5 -GLIBC_2.0 _longjmp F -GLIBC_2.0 _mcleanup F -GLIBC_2.0 _mcount F -GLIBC_2.0 _nl_default_dirname D 0x12 -GLIBC_2.0 _nl_domain_bindings D 0x4 -GLIBC_2.0 _nl_msg_cat_cntr D 0x4 -GLIBC_2.0 _null_auth D 0xc -GLIBC_2.0 _obstack D 0x4 -GLIBC_2.0 _obstack_allocated_p F -GLIBC_2.0 _obstack_begin F -GLIBC_2.0 _obstack_begin_1 F -GLIBC_2.0 _obstack_free F -GLIBC_2.0 _obstack_memory_used F -GLIBC_2.0 _obstack_newchunk F -GLIBC_2.0 _res D 0x200 -GLIBC_2.0 _rpc_dtablesize F -GLIBC_2.0 _seterr_reply F -GLIBC_2.0 _setjmp F -GLIBC_2.0 _sys_errlist D 0x1ec -GLIBC_2.0 _sys_nerr D 0x4 -GLIBC_2.0 _sys_siglist D 0x80 -GLIBC_2.0 _tolower F -GLIBC_2.0 _toupper F -GLIBC_2.0 a64l F -GLIBC_2.0 abort F -GLIBC_2.0 abs F -GLIBC_2.0 accept F -GLIBC_2.0 access F -GLIBC_2.0 acct F -GLIBC_2.0 addmntent F -GLIBC_2.0 adjtime F -GLIBC_2.0 adjtimex F -GLIBC_2.0 advance F -GLIBC_2.0 alarm F -GLIBC_2.0 alphasort F -GLIBC_2.0 argz_add F -GLIBC_2.0 argz_add_sep F -GLIBC_2.0 argz_append F -GLIBC_2.0 argz_count F -GLIBC_2.0 argz_create F -GLIBC_2.0 argz_create_sep F -GLIBC_2.0 argz_delete F -GLIBC_2.0 argz_extract F -GLIBC_2.0 argz_insert F -GLIBC_2.0 argz_next F -GLIBC_2.0 argz_replace F -GLIBC_2.0 argz_stringify F -GLIBC_2.0 asctime F -GLIBC_2.0 asctime_r F -GLIBC_2.0 asprintf F -GLIBC_2.0 atexit F -GLIBC_2.0 atof F -GLIBC_2.0 atoi F -GLIBC_2.0 atol F -GLIBC_2.0 atoll F -GLIBC_2.0 authnone_create F -GLIBC_2.0 authunix_create F -GLIBC_2.0 authunix_create_default F -GLIBC_2.0 basename F -GLIBC_2.0 bcmp F -GLIBC_2.0 bcopy F -GLIBC_2.0 bdflush F -GLIBC_2.0 bind F -GLIBC_2.0 bindresvport F -GLIBC_2.0 bindtextdomain F -GLIBC_2.0 brk F -GLIBC_2.0 bsd_signal F -GLIBC_2.0 bsearch F -GLIBC_2.0 btowc F -GLIBC_2.0 bzero F -GLIBC_2.0 calloc F -GLIBC_2.0 callrpc F -GLIBC_2.0 canonicalize_file_name F -GLIBC_2.0 catclose F -GLIBC_2.0 catgets F -GLIBC_2.0 catopen F -GLIBC_2.0 cfgetispeed F -GLIBC_2.0 cfgetospeed F -GLIBC_2.0 cfmakeraw F -GLIBC_2.0 cfree F -GLIBC_2.0 cfsetispeed F -GLIBC_2.0 cfsetospeed F -GLIBC_2.0 cfsetspeed F -GLIBC_2.0 chdir F -GLIBC_2.0 chflags F -GLIBC_2.0 chmod F -GLIBC_2.0 chown F -GLIBC_2.0 chroot F -GLIBC_2.0 clearenv F -GLIBC_2.0 clearerr F -GLIBC_2.0 clearerr_unlocked F -GLIBC_2.0 clnt_broadcast F -GLIBC_2.0 clnt_create F -GLIBC_2.0 clnt_pcreateerror F -GLIBC_2.0 clnt_perrno F -GLIBC_2.0 clnt_perror F -GLIBC_2.0 clnt_spcreateerror F -GLIBC_2.0 clnt_sperrno F -GLIBC_2.0 clnt_sperror F -GLIBC_2.0 clntraw_create F -GLIBC_2.0 clnttcp_create F -GLIBC_2.0 clntudp_bufcreate F -GLIBC_2.0 clntudp_create F -GLIBC_2.0 clock F -GLIBC_2.0 clone F -GLIBC_2.0 close F -GLIBC_2.0 closedir F -GLIBC_2.0 closelog F -GLIBC_2.0 confstr F -GLIBC_2.0 connect F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 creat F -GLIBC_2.0 create_module F -GLIBC_2.0 ctermid F -GLIBC_2.0 ctime F -GLIBC_2.0 ctime_r F -GLIBC_2.0 cuserid F -GLIBC_2.0 daemon F -GLIBC_2.0 daylight D 0x4 -GLIBC_2.0 dcgettext F -GLIBC_2.0 delete_module F -GLIBC_2.0 dgettext F -GLIBC_2.0 difftime F -GLIBC_2.0 dirfd F -GLIBC_2.0 dirname F -GLIBC_2.0 div F -GLIBC_2.0 dprintf F -GLIBC_2.0 drand48 F -GLIBC_2.0 drand48_r F -GLIBC_2.0 dup F -GLIBC_2.0 dup2 F -GLIBC_2.0 dysize F -GLIBC_2.0 ecvt F -GLIBC_2.0 ecvt_r F -GLIBC_2.0 endaliasent F -GLIBC_2.0 endfsent F -GLIBC_2.0 endgrent F -GLIBC_2.0 endhostent F -GLIBC_2.0 endmntent F -GLIBC_2.0 endnetent F -GLIBC_2.0 endnetgrent F -GLIBC_2.0 endprotoent F -GLIBC_2.0 endpwent F -GLIBC_2.0 endrpcent F -GLIBC_2.0 endservent F -GLIBC_2.0 endspent F -GLIBC_2.0 endttyent F -GLIBC_2.0 endusershell F -GLIBC_2.0 endutent F -GLIBC_2.0 environ D 0x4 -GLIBC_2.0 envz_add F -GLIBC_2.0 envz_entry F -GLIBC_2.0 envz_get F -GLIBC_2.0 envz_merge F -GLIBC_2.0 envz_remove F -GLIBC_2.0 envz_strip F -GLIBC_2.0 erand48 F -GLIBC_2.0 erand48_r F -GLIBC_2.0 err F -GLIBC_2.0 error F -GLIBC_2.0 error_at_line F -GLIBC_2.0 error_message_count D 0x4 -GLIBC_2.0 error_one_per_line D 0x4 -GLIBC_2.0 error_print_progname D 0x4 -GLIBC_2.0 errx F -GLIBC_2.0 ether_aton F -GLIBC_2.0 ether_aton_r F -GLIBC_2.0 ether_hostton F -GLIBC_2.0 ether_line F -GLIBC_2.0 ether_ntoa F -GLIBC_2.0 ether_ntoa_r F -GLIBC_2.0 ether_ntohost F -GLIBC_2.0 euidaccess F -GLIBC_2.0 execl F -GLIBC_2.0 execle F -GLIBC_2.0 execlp F -GLIBC_2.0 execv F -GLIBC_2.0 execve F -GLIBC_2.0 execvp F -GLIBC_2.0 exit F -GLIBC_2.0 fchdir F -GLIBC_2.0 fchflags F -GLIBC_2.0 fchmod F -GLIBC_2.0 fchown F -GLIBC_2.0 fclose F -GLIBC_2.0 fcloseall F -GLIBC_2.0 fcntl F -GLIBC_2.0 fcvt F -GLIBC_2.0 fcvt_r F -GLIBC_2.0 fdatasync F -GLIBC_2.0 fdopen F -GLIBC_2.0 feof F -GLIBC_2.0 feof_unlocked F -GLIBC_2.0 ferror F -GLIBC_2.0 ferror_unlocked F -GLIBC_2.0 fexecve F -GLIBC_2.0 fflush F -GLIBC_2.0 fflush_unlocked F -GLIBC_2.0 ffs F -GLIBC_2.0 fgetc F -GLIBC_2.0 fgetgrent F -GLIBC_2.0 fgetgrent_r F -GLIBC_2.0 fgetpos F -GLIBC_2.0 fgetpwent F -GLIBC_2.0 fgetpwent_r F -GLIBC_2.0 fgets F -GLIBC_2.0 fgetspent F -GLIBC_2.0 fgetspent_r F -GLIBC_2.0 fileno F -GLIBC_2.0 fileno_unlocked F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 flock F -GLIBC_2.0 flockfile F -GLIBC_2.0 fnmatch F -GLIBC_2.0 fopen F -GLIBC_2.0 fopencookie F -GLIBC_2.0 fork F -GLIBC_2.0 fpathconf F -GLIBC_2.0 fprintf F -GLIBC_2.0 fputc F -GLIBC_2.0 fputc_unlocked F -GLIBC_2.0 fputs F -GLIBC_2.0 fread F -GLIBC_2.0 free F -GLIBC_2.0 freeaddrinfo F -GLIBC_2.0 freopen F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 fscanf F -GLIBC_2.0 fseek F -GLIBC_2.0 fsetpos F -GLIBC_2.0 fstatfs F -GLIBC_2.0 fsync F -GLIBC_2.0 ftell F -GLIBC_2.0 ftime F -GLIBC_2.0 ftok F -GLIBC_2.0 ftruncate F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 fts_children F -GLIBC_2.0 fts_close F -GLIBC_2.0 fts_open F -GLIBC_2.0 fts_read F -GLIBC_2.0 fts_set F -GLIBC_2.0 ftw F -GLIBC_2.0 funlockfile F -GLIBC_2.0 fwrite F -GLIBC_2.0 gcvt F -GLIBC_2.0 get_avphys_pages F -GLIBC_2.0 get_current_dir_name F -GLIBC_2.0 get_kernel_syms F -GLIBC_2.0 get_myaddress F -GLIBC_2.0 get_nprocs F -GLIBC_2.0 get_nprocs_conf F -GLIBC_2.0 get_phys_pages F -GLIBC_2.0 getaddrinfo F -GLIBC_2.0 getaliasbyname F -GLIBC_2.0 getaliasbyname_r F -GLIBC_2.0 getaliasent F -GLIBC_2.0 getaliasent_r F -GLIBC_2.0 getc F -GLIBC_2.0 getc_unlocked F -GLIBC_2.0 getchar F -GLIBC_2.0 getchar_unlocked F -GLIBC_2.0 getcwd F -GLIBC_2.0 getdelim F -GLIBC_2.0 getdirentries F -GLIBC_2.0 getdomainname F -GLIBC_2.0 getdtablesize F -GLIBC_2.0 getegid F -GLIBC_2.0 getenv F -GLIBC_2.0 geteuid F -GLIBC_2.0 getfsent F -GLIBC_2.0 getfsfile F -GLIBC_2.0 getfsspec F -GLIBC_2.0 getgid F -GLIBC_2.0 getgrent F -GLIBC_2.0 getgrent_r F -GLIBC_2.0 getgrgid F -GLIBC_2.0 getgrgid_r F -GLIBC_2.0 getgrnam F -GLIBC_2.0 getgrnam_r F -GLIBC_2.0 getgroups F -GLIBC_2.0 gethostbyaddr F -GLIBC_2.0 gethostbyaddr_r F -GLIBC_2.0 gethostbyname F -GLIBC_2.0 gethostbyname2 F -GLIBC_2.0 gethostbyname2_r F -GLIBC_2.0 gethostbyname_r F -GLIBC_2.0 gethostent F -GLIBC_2.0 gethostent_r F -GLIBC_2.0 gethostid F -GLIBC_2.0 gethostname F -GLIBC_2.0 getitimer F -GLIBC_2.0 getline F -GLIBC_2.0 getlogin F -GLIBC_2.0 getlogin_r F -GLIBC_2.0 getmntent F -GLIBC_2.0 getmntent_r F -GLIBC_2.0 getnetbyaddr F -GLIBC_2.0 getnetbyaddr_r F -GLIBC_2.0 getnetbyname F -GLIBC_2.0 getnetbyname_r F -GLIBC_2.0 getnetent F -GLIBC_2.0 getnetent_r F -GLIBC_2.0 getnetgrent F -GLIBC_2.0 getnetgrent_r F -GLIBC_2.0 getopt F -GLIBC_2.0 getopt_long F -GLIBC_2.0 getopt_long_only F -GLIBC_2.0 getpagesize F -GLIBC_2.0 getpass F -GLIBC_2.0 getpeername F -GLIBC_2.0 getpgid F -GLIBC_2.0 getpgrp F -GLIBC_2.0 getpid F -GLIBC_2.0 getppid F -GLIBC_2.0 getpriority F -GLIBC_2.0 getprotobyname F -GLIBC_2.0 getprotobyname_r F -GLIBC_2.0 getprotobynumber F -GLIBC_2.0 getprotobynumber_r F -GLIBC_2.0 getprotoent F -GLIBC_2.0 getprotoent_r F -GLIBC_2.0 getpublickey F -GLIBC_2.0 getpw F -GLIBC_2.0 getpwent F -GLIBC_2.0 getpwent_r F -GLIBC_2.0 getpwnam F -GLIBC_2.0 getpwnam_r F -GLIBC_2.0 getpwuid F -GLIBC_2.0 getpwuid_r F -GLIBC_2.0 getresgid F -GLIBC_2.0 getresuid F -GLIBC_2.0 getrlimit F -GLIBC_2.0 getrpcbyname F -GLIBC_2.0 getrpcbyname_r F -GLIBC_2.0 getrpcbynumber F -GLIBC_2.0 getrpcbynumber_r F -GLIBC_2.0 getrpcent F -GLIBC_2.0 getrpcent_r F -GLIBC_2.0 getrpcport F -GLIBC_2.0 getrusage F -GLIBC_2.0 gets F -GLIBC_2.0 getsecretkey F -GLIBC_2.0 getservbyname F -GLIBC_2.0 getservbyname_r F -GLIBC_2.0 getservbyport F -GLIBC_2.0 getservbyport_r F -GLIBC_2.0 getservent F -GLIBC_2.0 getservent_r F -GLIBC_2.0 getsid F -GLIBC_2.0 getsockname F -GLIBC_2.0 getsockopt F -GLIBC_2.0 getspent F -GLIBC_2.0 getspent_r F -GLIBC_2.0 getspnam F -GLIBC_2.0 getspnam_r F -GLIBC_2.0 getsubopt F -GLIBC_2.0 gettext F -GLIBC_2.0 gettimeofday F -GLIBC_2.0 getttyent F -GLIBC_2.0 getttynam F -GLIBC_2.0 getuid F -GLIBC_2.0 getusershell F -GLIBC_2.0 getutent F -GLIBC_2.0 getutent_r F -GLIBC_2.0 getutid F -GLIBC_2.0 getutid_r F -GLIBC_2.0 getutline F -GLIBC_2.0 getutline_r F -GLIBC_2.0 getw F -GLIBC_2.0 getwd F -GLIBC_2.0 glob F -GLIBC_2.0 glob_pattern_p F -GLIBC_2.0 globfree F -GLIBC_2.0 gmtime F -GLIBC_2.0 gmtime_r F -GLIBC_2.0 group_member F -GLIBC_2.0 gsignal F -GLIBC_2.0 gtty F -GLIBC_2.0 h_errlist D 0x14 -GLIBC_2.0 h_nerr D 0x4 -GLIBC_2.0 hasmntopt F -GLIBC_2.0 hcreate F -GLIBC_2.0 hcreate_r F -GLIBC_2.0 hdestroy F -GLIBC_2.0 hdestroy_r F -GLIBC_2.0 herror F -GLIBC_2.0 hsearch F -GLIBC_2.0 hsearch_r F -GLIBC_2.0 hstrerror F -GLIBC_2.0 htonl F -GLIBC_2.0 htons F -GLIBC_2.0 index F -GLIBC_2.0 inet_addr F -GLIBC_2.0 inet_aton F -GLIBC_2.0 inet_lnaof F -GLIBC_2.0 inet_makeaddr F -GLIBC_2.0 inet_netof F -GLIBC_2.0 inet_network F -GLIBC_2.0 inet_nsap_addr F -GLIBC_2.0 inet_nsap_ntoa F -GLIBC_2.0 inet_ntoa F -GLIBC_2.0 inet_ntop F -GLIBC_2.0 inet_pton F -GLIBC_2.0 init_module F -GLIBC_2.0 initgroups F -GLIBC_2.0 initstate F -GLIBC_2.0 initstate_r F -GLIBC_2.0 innetgr F -GLIBC_2.0 insque F -GLIBC_2.0 ioctl F -GLIBC_2.0 ioperm F -GLIBC_2.0 iopl F -GLIBC_2.0 iruserok F -GLIBC_2.0 isalnum F -GLIBC_2.0 isalpha F -GLIBC_2.0 isascii F -GLIBC_2.0 isatty F -GLIBC_2.0 isblank F -GLIBC_2.0 iscntrl F -GLIBC_2.0 isdigit F -GLIBC_2.0 isfdtype F -GLIBC_2.0 isgraph F -GLIBC_2.0 isinf F -GLIBC_2.0 isinff F -GLIBC_2.0 isinfl F -GLIBC_2.0 islower F -GLIBC_2.0 isnan F -GLIBC_2.0 isnanf F -GLIBC_2.0 isnanl F -GLIBC_2.0 isprint F -GLIBC_2.0 ispunct F -GLIBC_2.0 isspace F -GLIBC_2.0 isupper F -GLIBC_2.0 iswalnum F -GLIBC_2.0 iswalpha F -GLIBC_2.0 iswcntrl F -GLIBC_2.0 iswctype F -GLIBC_2.0 iswdigit F -GLIBC_2.0 iswgraph F -GLIBC_2.0 iswlower F -GLIBC_2.0 iswprint F -GLIBC_2.0 iswpunct F -GLIBC_2.0 iswspace F -GLIBC_2.0 iswupper F -GLIBC_2.0 iswxdigit F -GLIBC_2.0 isxdigit F -GLIBC_2.0 jrand48 F -GLIBC_2.0 jrand48_r F -GLIBC_2.0 kill F -GLIBC_2.0 killpg F -GLIBC_2.0 klogctl F -GLIBC_2.0 l64a F -GLIBC_2.0 labs F -GLIBC_2.0 lchown F -GLIBC_2.0 lckpwdf F -GLIBC_2.0 lcong48 F -GLIBC_2.0 lcong48_r F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 ldiv F -GLIBC_2.0 lfind F -GLIBC_2.0 link F -GLIBC_2.0 listen F -GLIBC_2.0 llabs F -GLIBC_2.0 lldiv F -GLIBC_2.0 llseek F -GLIBC_2.0 loc1 D 0x4 -GLIBC_2.0 loc2 D 0x4 -GLIBC_2.0 localeconv F -GLIBC_2.0 localtime F -GLIBC_2.0 localtime_r F -GLIBC_2.0 lockf F -GLIBC_2.0 locs D 0x4 -GLIBC_2.0 longjmp F -GLIBC_2.0 lrand48 F -GLIBC_2.0 lrand48_r F -GLIBC_2.0 lsearch F -GLIBC_2.0 lseek F -GLIBC_2.0 madvise F -GLIBC_2.0 mallinfo F -GLIBC_2.0 malloc F -GLIBC_2.0 malloc_get_state F -GLIBC_2.0 malloc_set_state F -GLIBC_2.0 malloc_stats F -GLIBC_2.0 malloc_trim F -GLIBC_2.0 malloc_usable_size F -GLIBC_2.0 mallopt F -GLIBC_2.0 mallwatch D 0x4 -GLIBC_2.0 mblen F -GLIBC_2.0 mbrlen F -GLIBC_2.0 mbrtowc F -GLIBC_2.0 mbsinit F -GLIBC_2.0 mbsnrtowcs F -GLIBC_2.0 mbsrtowcs F -GLIBC_2.0 mbstowcs F -GLIBC_2.0 mbtowc F -GLIBC_2.0 mcheck F -GLIBC_2.0 mcount F -GLIBC_2.0 memalign F -GLIBC_2.0 memccpy F -GLIBC_2.0 memchr F -GLIBC_2.0 memcmp F -GLIBC_2.0 memcpy F -GLIBC_2.0 memfrob F -GLIBC_2.0 memmem F -GLIBC_2.0 memmove F -GLIBC_2.0 memset F -GLIBC_2.0 mkdir F -GLIBC_2.0 mkfifo F -GLIBC_2.0 mkstemp F -GLIBC_2.0 mktemp F -GLIBC_2.0 mktime F -GLIBC_2.0 mlock F -GLIBC_2.0 mlockall F -GLIBC_2.0 mmap F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 monstartup F -GLIBC_2.0 mount F -GLIBC_2.0 mprobe F -GLIBC_2.0 mprotect F -GLIBC_2.0 mrand48 F -GLIBC_2.0 mrand48_r F -GLIBC_2.0 mremap F -GLIBC_2.0 msgctl F -GLIBC_2.0 msgget F -GLIBC_2.0 msgrcv F -GLIBC_2.0 msgsnd F -GLIBC_2.0 msync F -GLIBC_2.0 mtrace F -GLIBC_2.0 munlock F -GLIBC_2.0 munlockall F -GLIBC_2.0 munmap F -GLIBC_2.0 muntrace F -GLIBC_2.0 nanosleep F -GLIBC_2.0 nfsservctl F -GLIBC_2.0 nice F -GLIBC_2.0 nl_langinfo F -GLIBC_2.0 nrand48 F -GLIBC_2.0 nrand48_r F -GLIBC_2.0 ntohl F -GLIBC_2.0 ntohs F -GLIBC_2.0 obstack_alloc_failed_handler D 0x4 -GLIBC_2.0 obstack_exit_failure D 0x4 -GLIBC_2.0 obstack_free F -GLIBC_2.0 obstack_printf F -GLIBC_2.0 obstack_vprintf F -GLIBC_2.0 on_exit F -GLIBC_2.0 open F -GLIBC_2.0 open_memstream F -GLIBC_2.0 opendir F -GLIBC_2.0 openlog F -GLIBC_2.0 optarg D 0x4 -GLIBC_2.0 opterr D 0x4 -GLIBC_2.0 optind D 0x4 -GLIBC_2.0 optopt D 0x4 -GLIBC_2.0 parse_printf_format F -GLIBC_2.0 pathconf F -GLIBC_2.0 pause F -GLIBC_2.0 pclose F -GLIBC_2.0 perror F -GLIBC_2.0 personality F -GLIBC_2.0 pipe F -GLIBC_2.0 pmap_getmaps F -GLIBC_2.0 pmap_getport F -GLIBC_2.0 pmap_rmtcall F -GLIBC_2.0 pmap_set F -GLIBC_2.0 pmap_unset F -GLIBC_2.0 poll F -GLIBC_2.0 popen F -GLIBC_2.0 prctl F -GLIBC_2.0 printf F -GLIBC_2.0 profil F -GLIBC_2.0 program_invocation_name D 0x4 -GLIBC_2.0 program_invocation_short_name D 0x4 -GLIBC_2.0 pselect F -GLIBC_2.0 psignal F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 ptrace F -GLIBC_2.0 putc F -GLIBC_2.0 putc_unlocked F -GLIBC_2.0 putchar F -GLIBC_2.0 putchar_unlocked F -GLIBC_2.0 putenv F -GLIBC_2.0 putpwent F -GLIBC_2.0 puts F -GLIBC_2.0 putspent F -GLIBC_2.0 pututline F -GLIBC_2.0 putw F -GLIBC_2.0 pvalloc F -GLIBC_2.0 qecvt F -GLIBC_2.0 qecvt_r F -GLIBC_2.0 qfcvt F -GLIBC_2.0 qfcvt_r F -GLIBC_2.0 qgcvt F -GLIBC_2.0 qsort F -GLIBC_2.0 query_module F -GLIBC_2.0 quotactl F -GLIBC_2.0 raise F -GLIBC_2.0 rand F -GLIBC_2.0 rand_r F -GLIBC_2.0 random F -GLIBC_2.0 random_r F -GLIBC_2.0 rcmd F -GLIBC_2.0 re_comp F -GLIBC_2.0 re_compile_fastmap F -GLIBC_2.0 re_compile_pattern F -GLIBC_2.0 re_exec F -GLIBC_2.0 re_match F -GLIBC_2.0 re_match_2 F -GLIBC_2.0 re_max_failures D 0x4 -GLIBC_2.0 re_search F -GLIBC_2.0 re_search_2 F -GLIBC_2.0 re_set_registers F -GLIBC_2.0 re_set_syntax F -GLIBC_2.0 re_syntax_options D 0x4 -GLIBC_2.0 read F -GLIBC_2.0 readdir F -GLIBC_2.0 readdir_r F -GLIBC_2.0 readlink F -GLIBC_2.0 readv F -GLIBC_2.0 realloc F -GLIBC_2.0 realpath F -GLIBC_2.0 reboot F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 regcomp F -GLIBC_2.0 regerror F -GLIBC_2.0 regexec F -GLIBC_2.0 regfree F -GLIBC_2.0 register_printf_function F -GLIBC_2.0 registerrpc F -GLIBC_2.0 remove F -GLIBC_2.0 remque F -GLIBC_2.0 rename F -GLIBC_2.0 res_init F -GLIBC_2.0 revoke F -GLIBC_2.0 rewind F -GLIBC_2.0 rewinddir F -GLIBC_2.0 rexec F -GLIBC_2.0 rexecoptions D 0x4 -GLIBC_2.0 rindex F -GLIBC_2.0 rmdir F -GLIBC_2.0 rpc_createerr D 0x10 -GLIBC_2.0 rpmatch F -GLIBC_2.0 rresvport F -GLIBC_2.0 ruserok F -GLIBC_2.0 ruserpass F -GLIBC_2.0 sbrk F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 scandir F -GLIBC_2.0 scanf F -GLIBC_2.0 sched_get_priority_max F -GLIBC_2.0 sched_get_priority_min F -GLIBC_2.0 sched_getparam F -GLIBC_2.0 sched_getscheduler F -GLIBC_2.0 sched_rr_get_interval F -GLIBC_2.0 sched_setparam F -GLIBC_2.0 sched_setscheduler F -GLIBC_2.0 sched_yield F -GLIBC_2.0 seed48 F -GLIBC_2.0 seed48_r F -GLIBC_2.0 seekdir F -GLIBC_2.0 select F -GLIBC_2.0 semctl F -GLIBC_2.0 semget F -GLIBC_2.0 semop F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 setaliasent F -GLIBC_2.0 setbuf F -GLIBC_2.0 setbuffer F -GLIBC_2.0 setcontext F -GLIBC_2.0 setdomainname F -GLIBC_2.0 setegid F -GLIBC_2.0 setenv F -GLIBC_2.0 seteuid F -GLIBC_2.0 setfsent F -GLIBC_2.0 setfsgid F -GLIBC_2.0 setfsuid F -GLIBC_2.0 setgid F -GLIBC_2.0 setgrent F -GLIBC_2.0 setgroups F -GLIBC_2.0 sethostent F -GLIBC_2.0 sethostid F -GLIBC_2.0 sethostname F -GLIBC_2.0 setitimer F -GLIBC_2.0 setjmp F -GLIBC_2.0 setlinebuf F -GLIBC_2.0 setlocale F -GLIBC_2.0 setlogin F -GLIBC_2.0 setlogmask F -GLIBC_2.0 setmntent F -GLIBC_2.0 setnetent F -GLIBC_2.0 setnetgrent F -GLIBC_2.0 setpgid F -GLIBC_2.0 setpgrp F -GLIBC_2.0 setpriority F -GLIBC_2.0 setprotoent F -GLIBC_2.0 setpwent F -GLIBC_2.0 setregid F -GLIBC_2.0 setresgid F -GLIBC_2.0 setresuid F -GLIBC_2.0 setreuid F -GLIBC_2.0 setrlimit F -GLIBC_2.0 setrpcent F -GLIBC_2.0 setservent F -GLIBC_2.0 setsid F -GLIBC_2.0 setsockopt F -GLIBC_2.0 setspent F -GLIBC_2.0 setstate F -GLIBC_2.0 setstate_r F -GLIBC_2.0 settimeofday F -GLIBC_2.0 setttyent F -GLIBC_2.0 setuid F -GLIBC_2.0 setusershell F -GLIBC_2.0 setutent F -GLIBC_2.0 setvbuf F -GLIBC_2.0 sgetspent F -GLIBC_2.0 sgetspent_r F -GLIBC_2.0 shmat F -GLIBC_2.0 shmctl F -GLIBC_2.0 shmdt F -GLIBC_2.0 shmget F -GLIBC_2.0 shutdown F -GLIBC_2.0 sigaction F -GLIBC_2.0 sigaddset F -GLIBC_2.0 sigaltstack F -GLIBC_2.0 sigandset F -GLIBC_2.0 sigblock F -GLIBC_2.0 sigdelset F -GLIBC_2.0 sigemptyset F -GLIBC_2.0 sigfillset F -GLIBC_2.0 siggetmask F -GLIBC_2.0 siginterrupt F -GLIBC_2.0 sigisemptyset F -GLIBC_2.0 sigismember F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 signal F -GLIBC_2.0 sigorset F -GLIBC_2.0 sigpause F -GLIBC_2.0 sigpending F -GLIBC_2.0 sigprocmask F -GLIBC_2.0 sigreturn F -GLIBC_2.0 sigsetmask F -GLIBC_2.0 sigstack F -GLIBC_2.0 sigsuspend F -GLIBC_2.0 sigvec F -GLIBC_2.0 sigwait F -GLIBC_2.0 sleep F -GLIBC_2.0 snprintf F -GLIBC_2.0 socket F -GLIBC_2.0 socketpair F -GLIBC_2.0 sprintf F -GLIBC_2.0 srand F -GLIBC_2.0 srand48 F -GLIBC_2.0 srand48_r F -GLIBC_2.0 srandom F -GLIBC_2.0 srandom_r F -GLIBC_2.0 sscanf F -GLIBC_2.0 ssignal F -GLIBC_2.0 sstk F -GLIBC_2.0 statfs F -GLIBC_2.0 stderr D 0x4 -GLIBC_2.0 stdin D 0x4 -GLIBC_2.0 stdout D 0x4 -GLIBC_2.0 step F -GLIBC_2.0 stime F -GLIBC_2.0 stpcpy F -GLIBC_2.0 stpncpy F -GLIBC_2.0 strcasecmp F -GLIBC_2.0 strcat F -GLIBC_2.0 strchr F -GLIBC_2.0 strcmp F -GLIBC_2.0 strcoll F -GLIBC_2.0 strcpy F -GLIBC_2.0 strcspn F -GLIBC_2.0 strdup F -GLIBC_2.0 strerror F -GLIBC_2.0 strerror_r F -GLIBC_2.0 strfmon F -GLIBC_2.0 strfry F -GLIBC_2.0 strftime F -GLIBC_2.0 strlen F -GLIBC_2.0 strncasecmp F -GLIBC_2.0 strncat F -GLIBC_2.0 strncmp F -GLIBC_2.0 strncpy F -GLIBC_2.0 strndup F -GLIBC_2.0 strnlen F -GLIBC_2.0 strpbrk F -GLIBC_2.0 strptime F -GLIBC_2.0 strrchr F -GLIBC_2.0 strsep F -GLIBC_2.0 strsignal F -GLIBC_2.0 strspn F -GLIBC_2.0 strstr F -GLIBC_2.0 strtod F -GLIBC_2.0 strtof F -GLIBC_2.0 strtok F -GLIBC_2.0 strtok_r F -GLIBC_2.0 strtol F -GLIBC_2.0 strtold F -GLIBC_2.0 strtoll F -GLIBC_2.0 strtoq F -GLIBC_2.0 strtoul F -GLIBC_2.0 strtoull F -GLIBC_2.0 strtouq F -GLIBC_2.0 strxfrm F -GLIBC_2.0 stty F -GLIBC_2.0 svc_exit F -GLIBC_2.0 svc_fdset D 0x80 -GLIBC_2.0 svc_getreq F -GLIBC_2.0 svc_getreqset F -GLIBC_2.0 svc_register F -GLIBC_2.0 svc_run F -GLIBC_2.0 svc_sendreply F -GLIBC_2.0 svc_unregister F -GLIBC_2.0 svcauthdes_stats D 0xc -GLIBC_2.0 svcerr_auth F -GLIBC_2.0 svcerr_decode F -GLIBC_2.0 svcerr_noproc F -GLIBC_2.0 svcerr_noprog F -GLIBC_2.0 svcerr_progvers F -GLIBC_2.0 svcerr_systemerr F -GLIBC_2.0 svcerr_weakauth F -GLIBC_2.0 svcfd_create F -GLIBC_2.0 svcraw_create F -GLIBC_2.0 svctcp_create F -GLIBC_2.0 svcudp_bufcreate F -GLIBC_2.0 svcudp_create F -GLIBC_2.0 svcudp_enablecache F -GLIBC_2.0 swab F -GLIBC_2.0 swapoff F -GLIBC_2.0 swapon F -GLIBC_2.0 symlink F -GLIBC_2.0 sync F -GLIBC_2.0 sys_errlist D 0x1ec -GLIBC_2.0 sys_nerr D 0x4 -GLIBC_2.0 sys_sigabbrev D 0x80 -GLIBC_2.0 sys_siglist D 0x80 -GLIBC_2.0 syscall F -GLIBC_2.0 sysconf F -GLIBC_2.0 sysctl F -GLIBC_2.0 sysinfo F -GLIBC_2.0 syslog F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 tcflow F -GLIBC_2.0 tcflush F -GLIBC_2.0 tcgetattr F -GLIBC_2.0 tcgetpgrp F -GLIBC_2.0 tcsendbreak F -GLIBC_2.0 tcsetattr F -GLIBC_2.0 tcsetpgrp F -GLIBC_2.0 tdelete F -GLIBC_2.0 telldir F -GLIBC_2.0 tempnam F -GLIBC_2.0 textdomain F -GLIBC_2.0 tfind F -GLIBC_2.0 time F -GLIBC_2.0 timegm F -GLIBC_2.0 timelocal F -GLIBC_2.0 times F -GLIBC_2.0 timezone D 0x4 -GLIBC_2.0 tmpfile F -GLIBC_2.0 tmpnam F -GLIBC_2.0 tmpnam_r F -GLIBC_2.0 toascii F -GLIBC_2.0 tolower F -GLIBC_2.0 toupper F -GLIBC_2.0 towctrans F -GLIBC_2.0 towlower F -GLIBC_2.0 towupper F -GLIBC_2.0 tr_break F -GLIBC_2.0 truncate F -GLIBC_2.0 tsearch F -GLIBC_2.0 ttyname F -GLIBC_2.0 ttyname_r F -GLIBC_2.0 ttyslot F -GLIBC_2.0 twalk F -GLIBC_2.0 tzname D 0x8 -GLIBC_2.0 tzset F -GLIBC_2.0 ualarm F -GLIBC_2.0 ulckpwdf F -GLIBC_2.0 ulimit F -GLIBC_2.0 umask F -GLIBC_2.0 umount F -GLIBC_2.0 uname F -GLIBC_2.0 ungetc F -GLIBC_2.0 unlink F -GLIBC_2.0 unsetenv F -GLIBC_2.0 updwtmp F -GLIBC_2.0 uselib F -GLIBC_2.0 usleep F -GLIBC_2.0 ustat F -GLIBC_2.0 utime F -GLIBC_2.0 utimes F -GLIBC_2.0 utmpname F -GLIBC_2.0 valloc F -GLIBC_2.0 vasprintf F -GLIBC_2.0 vdprintf F -GLIBC_2.0 verr F -GLIBC_2.0 verrx F -GLIBC_2.0 vfork F -GLIBC_2.0 vfprintf F -GLIBC_2.0 vfscanf F -GLIBC_2.0 vhangup F -GLIBC_2.0 vlimit F -GLIBC_2.0 vm86 F -GLIBC_2.0 vprintf F -GLIBC_2.0 vscanf F -GLIBC_2.0 vsnprintf F -GLIBC_2.0 vsprintf F -GLIBC_2.0 vsscanf F -GLIBC_2.0 vsyslog F -GLIBC_2.0 vtimes F -GLIBC_2.0 vwarn F -GLIBC_2.0 vwarnx F -GLIBC_2.0 wait F -GLIBC_2.0 wait3 F -GLIBC_2.0 wait4 F -GLIBC_2.0 waitpid F -GLIBC_2.0 warn F -GLIBC_2.0 warnx F -GLIBC_2.0 wcpcpy F -GLIBC_2.0 wcpncpy F -GLIBC_2.0 wcrtomb F -GLIBC_2.0 wcscat F -GLIBC_2.0 wcschr F -GLIBC_2.0 wcscmp F -GLIBC_2.0 wcscoll F -GLIBC_2.0 wcscpy F -GLIBC_2.0 wcscspn F -GLIBC_2.0 wcsdup F -GLIBC_2.0 wcslen F -GLIBC_2.0 wcsncat F -GLIBC_2.0 wcsncmp F -GLIBC_2.0 wcsncpy F -GLIBC_2.0 wcsnrtombs F -GLIBC_2.0 wcspbrk F -GLIBC_2.0 wcsrchr F -GLIBC_2.0 wcsrtombs F -GLIBC_2.0 wcsspn F -GLIBC_2.0 wcsstr F -GLIBC_2.0 wcstod F -GLIBC_2.0 wcstof F -GLIBC_2.0 wcstok F -GLIBC_2.0 wcstol F -GLIBC_2.0 wcstold F -GLIBC_2.0 wcstombs F -GLIBC_2.0 wcstoq F -GLIBC_2.0 wcstoul F -GLIBC_2.0 wcstouq F -GLIBC_2.0 wcswidth F -GLIBC_2.0 wcsxfrm F -GLIBC_2.0 wctob F -GLIBC_2.0 wctomb F -GLIBC_2.0 wctrans F -GLIBC_2.0 wctype F -GLIBC_2.0 wcwidth F -GLIBC_2.0 wmemchr F -GLIBC_2.0 wmemcmp F -GLIBC_2.0 wmemcpy F -GLIBC_2.0 wmemmove F -GLIBC_2.0 wmemset F -GLIBC_2.0 write F -GLIBC_2.0 writev F -GLIBC_2.0 xdr_accepted_reply F -GLIBC_2.0 xdr_array F -GLIBC_2.0 xdr_authunix_parms F -GLIBC_2.0 xdr_bool F -GLIBC_2.0 xdr_bytes F -GLIBC_2.0 xdr_callhdr F -GLIBC_2.0 xdr_callmsg F -GLIBC_2.0 xdr_char F -GLIBC_2.0 xdr_cryptkeyarg F -GLIBC_2.0 xdr_cryptkeyarg2 F -GLIBC_2.0 xdr_cryptkeyres F -GLIBC_2.0 xdr_des_block F -GLIBC_2.0 xdr_double F -GLIBC_2.0 xdr_enum F -GLIBC_2.0 xdr_float F -GLIBC_2.0 xdr_free F -GLIBC_2.0 xdr_int F -GLIBC_2.0 xdr_key_netstarg F -GLIBC_2.0 xdr_key_netstres F -GLIBC_2.0 xdr_keybuf F -GLIBC_2.0 xdr_keystatus F -GLIBC_2.0 xdr_long F -GLIBC_2.0 xdr_netobj F -GLIBC_2.0 xdr_opaque F -GLIBC_2.0 xdr_opaque_auth F -GLIBC_2.0 xdr_pmap F -GLIBC_2.0 xdr_pmaplist F -GLIBC_2.0 xdr_pointer F -GLIBC_2.0 xdr_reference F -GLIBC_2.0 xdr_rejected_reply F -GLIBC_2.0 xdr_replymsg F -GLIBC_2.0 xdr_rmtcall_args F -GLIBC_2.0 xdr_rmtcallres F -GLIBC_2.0 xdr_short F -GLIBC_2.0 xdr_string F -GLIBC_2.0 xdr_u_char F -GLIBC_2.0 xdr_u_int F -GLIBC_2.0 xdr_u_long F -GLIBC_2.0 xdr_u_short F -GLIBC_2.0 xdr_union F -GLIBC_2.0 xdr_vector F -GLIBC_2.0 xdr_void F -GLIBC_2.0 xdr_wrapstring F -GLIBC_2.0 xdrmem_create F -GLIBC_2.0 xdrrec_create F -GLIBC_2.0 xdrrec_endofrecord F -GLIBC_2.0 xdrrec_eof F -GLIBC_2.0 xdrrec_skiprecord F -GLIBC_2.0 xdrstdio_create F -GLIBC_2.0 xencrypt F -GLIBC_2.0 xprt_register F -GLIBC_2.0 xprt_unregister F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 _IO_2_1_stderr_ D 0x98 -GLIBC_2.1 _IO_2_1_stdin_ D 0x98 -GLIBC_2.1 _IO_2_1_stdout_ D 0x98 -GLIBC_2.1 _IO_do_write F -GLIBC_2.1 _IO_fclose F -GLIBC_2.1 _IO_fdopen F -GLIBC_2.1 _IO_fgetpos64 F -GLIBC_2.1 _IO_file_attach F -GLIBC_2.1 _IO_file_close_it F -GLIBC_2.1 _IO_file_finish F -GLIBC_2.1 _IO_file_fopen F -GLIBC_2.1 _IO_file_init F -GLIBC_2.1 _IO_file_overflow F -GLIBC_2.1 _IO_file_seekoff F -GLIBC_2.1 _IO_file_setbuf F -GLIBC_2.1 _IO_file_sync F -GLIBC_2.1 _IO_file_underflow F -GLIBC_2.1 _IO_file_write F -GLIBC_2.1 _IO_file_xsputn F -GLIBC_2.1 _IO_fopen F -GLIBC_2.1 _IO_fsetpos64 F -GLIBC_2.1 _IO_getline_info F -GLIBC_2.1 _IO_popen F -GLIBC_2.1 _IO_proc_close F -GLIBC_2.1 _IO_proc_open F -GLIBC_2.1 __asprintf F -GLIBC_2.1 __backtrace F -GLIBC_2.1 __backtrace_symbols F -GLIBC_2.1 __backtrace_symbols_fd F -GLIBC_2.1 __duplocale F -GLIBC_2.1 __freelocale F -GLIBC_2.1 __fxstat64 F -GLIBC_2.1 __isalnum_l F -GLIBC_2.1 __isalpha_l F -GLIBC_2.1 __isascii_l F -GLIBC_2.1 __isblank_l F -GLIBC_2.1 __iscntrl_l F -GLIBC_2.1 __isdigit_l F -GLIBC_2.1 __isgraph_l F -GLIBC_2.1 __islower_l F -GLIBC_2.1 __isprint_l F -GLIBC_2.1 __ispunct_l F -GLIBC_2.1 __isspace_l F -GLIBC_2.1 __isupper_l F -GLIBC_2.1 __iswalnum_l F -GLIBC_2.1 __iswalpha_l F -GLIBC_2.1 __iswblank_l F -GLIBC_2.1 __iswcntrl_l F -GLIBC_2.1 __iswctype_l F -GLIBC_2.1 __iswdigit_l F -GLIBC_2.1 __iswgraph_l F -GLIBC_2.1 __iswlower_l F -GLIBC_2.1 __iswprint_l F -GLIBC_2.1 __iswpunct_l F -GLIBC_2.1 __iswspace_l F -GLIBC_2.1 __iswupper_l F -GLIBC_2.1 __iswxdigit_l F -GLIBC_2.1 __isxdigit_l F -GLIBC_2.1 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.1 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.1 __key_gendes_LOCAL D 0x4 -GLIBC_2.1 __libc_allocate_rtsig F -GLIBC_2.1 __libc_current_sigrtmax F -GLIBC_2.1 __libc_current_sigrtmin F -GLIBC_2.1 __libc_freeres F -GLIBC_2.1 __libc_sa_len F -GLIBC_2.1 __lxstat64 F -GLIBC_2.1 __newlocale F -GLIBC_2.1 __poll F -GLIBC_2.1 __pread64 F -GLIBC_2.1 __pwrite64 F -GLIBC_2.1 __rawmemchr F -GLIBC_2.1 __signbit F -GLIBC_2.1 __signbitf F -GLIBC_2.1 __signbitl F -GLIBC_2.1 __strcasecmp_l F -GLIBC_2.1 __strcasestr F -GLIBC_2.1 __strcoll_l F -GLIBC_2.1 __strfmon_l F -GLIBC_2.1 __strncasecmp_l F -GLIBC_2.1 __strtod_l F -GLIBC_2.1 __strtof_l F -GLIBC_2.1 __strtol_l F -GLIBC_2.1 __strtold_l F -GLIBC_2.1 __strtoll_l F -GLIBC_2.1 __strtoul_l F -GLIBC_2.1 __strtoull_l F -GLIBC_2.1 __strxfrm_l F -GLIBC_2.1 __toascii_l F -GLIBC_2.1 __tolower_l F -GLIBC_2.1 __toupper_l F -GLIBC_2.1 __towctrans F -GLIBC_2.1 __towctrans_l F -GLIBC_2.1 __towlower_l F -GLIBC_2.1 __towupper_l F -GLIBC_2.1 __wcscasecmp_l F -GLIBC_2.1 __wcscoll_l F -GLIBC_2.1 __wcsncasecmp_l F -GLIBC_2.1 __wcstod_l F -GLIBC_2.1 __wcstof_l F -GLIBC_2.1 __wcstol_l F -GLIBC_2.1 __wcstold_l F -GLIBC_2.1 __wcstoll_l F -GLIBC_2.1 __wcstoul_l F -GLIBC_2.1 __wcstoull_l F -GLIBC_2.1 __wcsxfrm_l F -GLIBC_2.1 __wctype_l F -GLIBC_2.1 __xstat64 F -GLIBC_2.1 _authenticate F -GLIBC_2.1 _dl_mcount_wrapper F -GLIBC_2.1 _dl_mcount_wrapper_check F -GLIBC_2.1 _sys_errlist D 0x1f4 -GLIBC_2.1 _sys_nerr D 0x4 -GLIBC_2.1 _sys_siglist D 0x100 -GLIBC_2.1 addseverity F -GLIBC_2.1 alphasort64 F -GLIBC_2.1 argp_err_exit_status D 0x4 -GLIBC_2.1 argp_error F -GLIBC_2.1 argp_failure F -GLIBC_2.1 argp_help F -GLIBC_2.1 argp_parse F -GLIBC_2.1 argp_program_bug_address D 0x4 -GLIBC_2.1 argp_program_version D 0x4 -GLIBC_2.1 argp_program_version_hook D 0x4 -GLIBC_2.1 argp_state_help F -GLIBC_2.1 argp_usage F -GLIBC_2.1 authdes_create F -GLIBC_2.1 authdes_getucred F -GLIBC_2.1 authdes_pk_create F -GLIBC_2.1 backtrace F -GLIBC_2.1 backtrace_symbols F -GLIBC_2.1 backtrace_symbols_fd F -GLIBC_2.1 capget F -GLIBC_2.1 capset F -GLIBC_2.1 cbc_crypt F -GLIBC_2.1 chown F -GLIBC_2.1 clntunix_create F -GLIBC_2.1 creat64 F -GLIBC_2.1 des_setparity F -GLIBC_2.1 ecb_crypt F -GLIBC_2.1 endutxent F -GLIBC_2.1 fattach F -GLIBC_2.1 fclose F -GLIBC_2.1 fdetach F -GLIBC_2.1 fdopen F -GLIBC_2.1 ffsl F -GLIBC_2.1 ffsll F -GLIBC_2.1 fgetc_unlocked F -GLIBC_2.1 fgetpos64 F -GLIBC_2.1 fgets_unlocked F -GLIBC_2.1 fmtmsg F -GLIBC_2.1 fopen F -GLIBC_2.1 fopen64 F -GLIBC_2.1 fputs_unlocked F -GLIBC_2.1 fread_unlocked F -GLIBC_2.1 freopen64 F -GLIBC_2.1 fseeko F -GLIBC_2.1 fseeko64 F -GLIBC_2.1 fsetpos64 F -GLIBC_2.1 fstatfs64 F -GLIBC_2.1 fstatvfs F -GLIBC_2.1 fstatvfs64 F -GLIBC_2.1 ftello F -GLIBC_2.1 ftello64 F -GLIBC_2.1 ftruncate64 F -GLIBC_2.1 ftw64 F -GLIBC_2.1 fwrite_unlocked F -GLIBC_2.1 gai_strerror F -GLIBC_2.1 getcontext F -GLIBC_2.1 getdate F -GLIBC_2.1 getdate_err D 0x4 -GLIBC_2.1 getdate_r F -GLIBC_2.1 getmsg F -GLIBC_2.1 getnameinfo F -GLIBC_2.1 getnetname F -GLIBC_2.1 getpmsg F -GLIBC_2.1 getpt F -GLIBC_2.1 getrlimit64 F -GLIBC_2.1 getutxent F -GLIBC_2.1 getutxid F -GLIBC_2.1 getutxline F -GLIBC_2.1 glob64 F -GLIBC_2.1 globfree64 F -GLIBC_2.1 gnu_get_libc_release F -GLIBC_2.1 gnu_get_libc_version F -GLIBC_2.1 grantpt F -GLIBC_2.1 host2netname F -GLIBC_2.1 iconv F -GLIBC_2.1 iconv_close F -GLIBC_2.1 iconv_open F -GLIBC_2.1 if_freenameindex F -GLIBC_2.1 if_indextoname F -GLIBC_2.1 if_nameindex F -GLIBC_2.1 if_nametoindex F -GLIBC_2.1 in6addr_any D 0x10 -GLIBC_2.1 in6addr_loopback D 0x10 -GLIBC_2.1 isastream F -GLIBC_2.1 iswblank F -GLIBC_2.1 key_decryptsession F -GLIBC_2.1 key_decryptsession_pk F -GLIBC_2.1 key_encryptsession F -GLIBC_2.1 key_encryptsession_pk F -GLIBC_2.1 key_gendes F -GLIBC_2.1 key_get_conv F -GLIBC_2.1 key_secretkey_is_set F -GLIBC_2.1 key_setnet F -GLIBC_2.1 key_setsecret F -GLIBC_2.1 lockf64 F -GLIBC_2.1 lseek64 F -GLIBC_2.1 makecontext F -GLIBC_2.1 mempcpy F -GLIBC_2.1 mmap64 F -GLIBC_2.1 modify_ldt F -GLIBC_2.1 netname2host F -GLIBC_2.1 netname2user F -GLIBC_2.1 nftw F -GLIBC_2.1 nftw64 F -GLIBC_2.1 ntp_adjtime F -GLIBC_2.1 ntp_gettime F -GLIBC_2.1 open64 F -GLIBC_2.1 passwd2des F -GLIBC_2.1 pclose F -GLIBC_2.1 popen F -GLIBC_2.1 pread F -GLIBC_2.1 pread64 F -GLIBC_2.1 printf_size F -GLIBC_2.1 printf_size_info F -GLIBC_2.1 pthread_attr_init F -GLIBC_2.1 ptsname F -GLIBC_2.1 ptsname_r F -GLIBC_2.1 putgrent F -GLIBC_2.1 putmsg F -GLIBC_2.1 putpmsg F -GLIBC_2.1 pututxline F -GLIBC_2.1 pwrite F -GLIBC_2.1 pwrite64 F -GLIBC_2.1 rawmemchr F -GLIBC_2.1 readdir64 F -GLIBC_2.1 readdir64_r F -GLIBC_2.1 rtime F -GLIBC_2.1 scalbln F -GLIBC_2.1 scalblnf F -GLIBC_2.1 scalblnl F -GLIBC_2.1 scandir64 F -GLIBC_2.1 sendfile F -GLIBC_2.1 setrlimit64 F -GLIBC_2.1 setutxent F -GLIBC_2.1 sighold F -GLIBC_2.1 sigignore F -GLIBC_2.1 sigqueue F -GLIBC_2.1 sigrelse F -GLIBC_2.1 sigset F -GLIBC_2.1 sigtimedwait F -GLIBC_2.1 sigwaitinfo F -GLIBC_2.1 statfs64 F -GLIBC_2.1 statvfs F -GLIBC_2.1 statvfs64 F -GLIBC_2.1 strcasestr F -GLIBC_2.1 strtoimax F -GLIBC_2.1 strtoumax F -GLIBC_2.1 strverscmp F -GLIBC_2.1 svcunix_create F -GLIBC_2.1 svcunixfd_create F -GLIBC_2.1 swapcontext F -GLIBC_2.1 sys_errlist D 0x1f4 -GLIBC_2.1 sys_nerr D 0x4 -GLIBC_2.1 sys_sigabbrev D 0x100 -GLIBC_2.1 sys_siglist D 0x100 -GLIBC_2.1 sysv_signal F -GLIBC_2.1 tcgetsid F -GLIBC_2.1 tdestroy F -GLIBC_2.1 tmpfile F -GLIBC_2.1 tmpfile64 F -GLIBC_2.1 truncate64 F -GLIBC_2.1 umount2 F -GLIBC_2.1 unlockpt F -GLIBC_2.1 updwtmpx F -GLIBC_2.1 user2netname F -GLIBC_2.1 utmpxname F -GLIBC_2.1 versionsort F -GLIBC_2.1 versionsort64 F -GLIBC_2.1 waitid F -GLIBC_2.1 wcscasecmp F -GLIBC_2.1 wcsncasecmp F -GLIBC_2.1 wcsnlen F -GLIBC_2.1 wcstoimax F -GLIBC_2.1 wcstoll F -GLIBC_2.1 wcstoull F -GLIBC_2.1 wcstoumax F -GLIBC_2.1 wcswcs F -GLIBC_2.1 wordexp F -GLIBC_2.1 wordfree F -GLIBC_2.1 xdecrypt F -GLIBC_2.1 xdr_authdes_cred F -GLIBC_2.1 xdr_authdes_verf F -GLIBC_2.1 xdr_getcredres F -GLIBC_2.1 xdr_int16_t F -GLIBC_2.1 xdr_int32_t F -GLIBC_2.1 xdr_int8_t F -GLIBC_2.1 xdr_netnamestr F -GLIBC_2.1 xdr_sizeof F -GLIBC_2.1 xdr_uint16_t F -GLIBC_2.1 xdr_uint32_t F -GLIBC_2.1 xdr_uint8_t F -GLIBC_2.1 xdr_unixcred F -GLIBC_2.1.1 GLIBC_2.1.1 A -GLIBC_2.1.1 _Exit F -GLIBC_2.1.1 __memcpy_by2 F -GLIBC_2.1.1 __memcpy_by4 F -GLIBC_2.1.1 __memcpy_c F -GLIBC_2.1.1 __memcpy_g F -GLIBC_2.1.1 __mempcpy_by2 F -GLIBC_2.1.1 __mempcpy_by4 F -GLIBC_2.1.1 __mempcpy_byn F -GLIBC_2.1.1 __mempcpy_small F -GLIBC_2.1.1 __memset_cc F -GLIBC_2.1.1 __memset_ccn_by2 F -GLIBC_2.1.1 __memset_ccn_by4 F -GLIBC_2.1.1 __memset_cg F -GLIBC_2.1.1 __memset_gcn_by2 F -GLIBC_2.1.1 __memset_gcn_by4 F -GLIBC_2.1.1 __memset_gg F -GLIBC_2.1.1 __stpcpy_g F -GLIBC_2.1.1 __stpcpy_small F -GLIBC_2.1.1 __strcat_c F -GLIBC_2.1.1 __strcat_g F -GLIBC_2.1.1 __strchr_c F -GLIBC_2.1.1 __strchr_g F -GLIBC_2.1.1 __strchrnul_c F -GLIBC_2.1.1 __strchrnul_g F -GLIBC_2.1.1 __strcmp_gg F -GLIBC_2.1.1 __strcpy_g F -GLIBC_2.1.1 __strcpy_small F -GLIBC_2.1.1 __strcspn_c1 F -GLIBC_2.1.1 __strcspn_c2 F -GLIBC_2.1.1 __strcspn_c3 F -GLIBC_2.1.1 __strcspn_cg F -GLIBC_2.1.1 __strcspn_g F -GLIBC_2.1.1 __strlen_g F -GLIBC_2.1.1 __strncat_g F -GLIBC_2.1.1 __strncmp_g F -GLIBC_2.1.1 __strncpy_by2 F -GLIBC_2.1.1 __strncpy_by4 F -GLIBC_2.1.1 __strncpy_byn F -GLIBC_2.1.1 __strncpy_gg F -GLIBC_2.1.1 __strpbrk_c2 F -GLIBC_2.1.1 __strpbrk_c3 F -GLIBC_2.1.1 __strpbrk_cg F -GLIBC_2.1.1 __strpbrk_g F -GLIBC_2.1.1 __strrchr_c F -GLIBC_2.1.1 __strrchr_g F -GLIBC_2.1.1 __strsep_1c F -GLIBC_2.1.1 __strsep_2c F -GLIBC_2.1.1 __strsep_3c F -GLIBC_2.1.1 __strsep_g F -GLIBC_2.1.1 __strspn_c1 F -GLIBC_2.1.1 __strspn_c2 F -GLIBC_2.1.1 __strspn_c3 F -GLIBC_2.1.1 __strspn_cg F -GLIBC_2.1.1 __strspn_g F -GLIBC_2.1.1 __strstr_cg F -GLIBC_2.1.1 __strstr_g F -GLIBC_2.1.1 __strtok_r_1c F -GLIBC_2.1.1 __strverscmp F -GLIBC_2.1.1 getutmp F -GLIBC_2.1.1 getutmpx F -GLIBC_2.1.1 imaxabs F -GLIBC_2.1.1 imaxdiv F -GLIBC_2.1.1 strchrnul F -GLIBC_2.1.1 xdr_hyper F -GLIBC_2.1.1 xdr_int64_t F -GLIBC_2.1.1 xdr_longlong_t F -GLIBC_2.1.1 xdr_u_hyper F -GLIBC_2.1.1 xdr_u_longlong_t F -GLIBC_2.1.1 xdr_uint64_t F -GLIBC_2.1.2 GLIBC_2.1.2 A -GLIBC_2.1.2 __vfork F -GLIBC_2.1.2 getaliasbyname_r F -GLIBC_2.1.2 getaliasent_r F -GLIBC_2.1.2 getgrent_r F -GLIBC_2.1.2 getgrgid_r F -GLIBC_2.1.2 getgrnam_r F -GLIBC_2.1.2 gethostbyaddr_r F -GLIBC_2.1.2 gethostbyname2_r F -GLIBC_2.1.2 gethostbyname_r F -GLIBC_2.1.2 gethostent_r F -GLIBC_2.1.2 getnetbyaddr_r F -GLIBC_2.1.2 getnetbyname_r F -GLIBC_2.1.2 getnetent_r F -GLIBC_2.1.2 getprotobyname_r F -GLIBC_2.1.2 getprotobynumber_r F -GLIBC_2.1.2 getprotoent_r F -GLIBC_2.1.2 getpwent_r F -GLIBC_2.1.2 getpwnam_r F -GLIBC_2.1.2 getpwuid_r F -GLIBC_2.1.2 getrpcbyname_r F -GLIBC_2.1.2 getrpcbynumber_r F -GLIBC_2.1.2 getrpcent_r F -GLIBC_2.1.2 getservbyname_r F -GLIBC_2.1.2 getservbyport_r F -GLIBC_2.1.2 getservent_r F -GLIBC_2.1.2 getspent_r F -GLIBC_2.1.2 getspnam_r F -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 __cxa_atexit F -GLIBC_2.1.3 __cxa_finalize F -GLIBC_2.1.3 __sigsuspend F -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 fallocate64 F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _sys_errlist D 0x21c -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x21c -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 __fentry__ F -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0x54 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 __assert F -GLIBC_2.2 __ctype32_tolower D 0x4 -GLIBC_2.2 __ctype32_toupper D 0x4 -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpurge F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __open64 F -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_state F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __statfs F -GLIBC_2.2 __strndup F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _res_hconf D 0x30 -GLIBC_2.2 alphasort64 F -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 dcngettext F -GLIBC_2.2 dngettext F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwscanf F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getrlimit F -GLIBC_2.2 getrlimit64 F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 glob64 F -GLIBC_2.2 iruserok_af F -GLIBC_2.2 localeconv F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 memrchr F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 moncontrol F -GLIBC_2.2 msgctl F -GLIBC_2.2 ngettext F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 scandir64 F -GLIBC_2.2 semctl F -GLIBC_2.2 setrlimit F -GLIBC_2.2 shmctl F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x4 -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 ungetwc F -GLIBC_2.2 versionsort64 F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wprintf F -GLIBC_2.2 wscanf F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 _sys_errlist D 0x1f8 -GLIBC_2.3 _sys_nerr D 0x4 -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoll_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strtoull_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 sys_errlist D 0x1f8 -GLIBC_2.3 sys_nerr D 0x4 -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x104 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 posix_fadvise64 F -GLIBC_2.3.3 posix_fallocate64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 sys_sigabbrev D 0x104 -GLIBC_2.3.3 sys_siglist D 0x104 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 vm86 F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 _sys_errlist D 0x210 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 futimesat F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sys_errlist D 0x210 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/i386/libcrypt.abilist b/sysdeps/unix/sysv/linux/i386/libcrypt.abilist deleted file mode 100644 index 4db2639336..0000000000 --- a/sysdeps/unix/sysv/linux/i386/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 crypt F -GLIBC_2.0 crypt_r F -GLIBC_2.0 encrypt F -GLIBC_2.0 encrypt_r F -GLIBC_2.0 fcrypt F -GLIBC_2.0 setkey F -GLIBC_2.0 setkey_r F diff --git a/sysdeps/unix/sysv/linux/i386/libdl.abilist b/sysdeps/unix/sysv/linux/i386/libdl.abilist deleted file mode 100644 index 5536f6e0a9..0000000000 --- a/sysdeps/unix/sysv/linux/i386/libdl.abilist +++ /dev/null @@ -1,14 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 dladdr F -GLIBC_2.0 dlclose F -GLIBC_2.0 dlerror F -GLIBC_2.0 dlopen F -GLIBC_2.0 dlsym F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 dlopen F -GLIBC_2.1 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist deleted file mode 100644 index 761e4420f9..0000000000 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ /dev/null @@ -1,476 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _LIB_VERSION D 0x4 -GLIBC_2.0 acos F -GLIBC_2.0 acosf F -GLIBC_2.0 acosh F -GLIBC_2.0 acoshf F -GLIBC_2.0 acoshl F -GLIBC_2.0 acosl F -GLIBC_2.0 asin F -GLIBC_2.0 asinf F -GLIBC_2.0 asinh F -GLIBC_2.0 asinhf F -GLIBC_2.0 asinhl F -GLIBC_2.0 asinl F -GLIBC_2.0 atan F -GLIBC_2.0 atan2 F -GLIBC_2.0 atan2f F -GLIBC_2.0 atan2l F -GLIBC_2.0 atanf F -GLIBC_2.0 atanh F -GLIBC_2.0 atanhf F -GLIBC_2.0 atanhl F -GLIBC_2.0 atanl F -GLIBC_2.0 cbrt F -GLIBC_2.0 cbrtf F -GLIBC_2.0 cbrtl F -GLIBC_2.0 ceil F -GLIBC_2.0 ceilf F -GLIBC_2.0 ceill F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 cos F -GLIBC_2.0 cosf F -GLIBC_2.0 cosh F -GLIBC_2.0 coshf F -GLIBC_2.0 coshl F -GLIBC_2.0 cosl F -GLIBC_2.0 drem F -GLIBC_2.0 dremf F -GLIBC_2.0 dreml F -GLIBC_2.0 erf F -GLIBC_2.0 erfc F -GLIBC_2.0 erfcf F -GLIBC_2.0 erfcl F -GLIBC_2.0 erff F -GLIBC_2.0 erfl F -GLIBC_2.0 exp F -GLIBC_2.0 expf F -GLIBC_2.0 expl F -GLIBC_2.0 expm1 F -GLIBC_2.0 expm1f F -GLIBC_2.0 expm1l F -GLIBC_2.0 fabs F -GLIBC_2.0 fabsf F -GLIBC_2.0 fabsl F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 floor F -GLIBC_2.0 floorf F -GLIBC_2.0 floorl F -GLIBC_2.0 fmod F -GLIBC_2.0 fmodf F -GLIBC_2.0 fmodl F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 gamma F -GLIBC_2.0 gammaf F -GLIBC_2.0 gammal F -GLIBC_2.0 hypot F -GLIBC_2.0 hypotf F -GLIBC_2.0 hypotl F -GLIBC_2.0 ilogb F -GLIBC_2.0 ilogbf F -GLIBC_2.0 ilogbl F -GLIBC_2.0 j0 F -GLIBC_2.0 j0f F -GLIBC_2.0 j0l F -GLIBC_2.0 j1 F -GLIBC_2.0 j1f F -GLIBC_2.0 j1l F -GLIBC_2.0 jn F -GLIBC_2.0 jnf F -GLIBC_2.0 jnl F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 lgamma F -GLIBC_2.0 lgamma_r F -GLIBC_2.0 lgammaf F -GLIBC_2.0 lgammaf_r F -GLIBC_2.0 lgammal F -GLIBC_2.0 lgammal_r F -GLIBC_2.0 log F -GLIBC_2.0 log10 F -GLIBC_2.0 log10f F -GLIBC_2.0 log10l F -GLIBC_2.0 log1p F -GLIBC_2.0 log1pf F -GLIBC_2.0 log1pl F -GLIBC_2.0 logb F -GLIBC_2.0 logbf F -GLIBC_2.0 logbl F -GLIBC_2.0 logf F -GLIBC_2.0 logl F -GLIBC_2.0 matherr F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 nextafter F -GLIBC_2.0 nextafterf F -GLIBC_2.0 nextafterl F -GLIBC_2.0 pow F -GLIBC_2.0 powf F -GLIBC_2.0 powl F -GLIBC_2.0 remainder F -GLIBC_2.0 remainderf F -GLIBC_2.0 remainderl F -GLIBC_2.0 rint F -GLIBC_2.0 rintf F -GLIBC_2.0 rintl F -GLIBC_2.0 scalb F -GLIBC_2.0 scalbf F -GLIBC_2.0 scalbl F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 signgam D 0x4 -GLIBC_2.0 significand F -GLIBC_2.0 significandf F -GLIBC_2.0 significandl F -GLIBC_2.0 sin F -GLIBC_2.0 sinf F -GLIBC_2.0 sinh F -GLIBC_2.0 sinhf F -GLIBC_2.0 sinhl F -GLIBC_2.0 sinl F -GLIBC_2.0 sqrt F -GLIBC_2.0 sqrtf F -GLIBC_2.0 sqrtl F -GLIBC_2.0 tan F -GLIBC_2.0 tanf F -GLIBC_2.0 tanh F -GLIBC_2.0 tanhf F -GLIBC_2.0 tanhl F -GLIBC_2.0 tanl F -GLIBC_2.0 y0 F -GLIBC_2.0 y0f F -GLIBC_2.0 y0l F -GLIBC_2.0 y1 F -GLIBC_2.0 y1f F -GLIBC_2.0 y1l F -GLIBC_2.0 yn F -GLIBC_2.0 ynf F -GLIBC_2.0 ynl F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __clog10 F -GLIBC_2.1 __clog10f F -GLIBC_2.1 __clog10l F -GLIBC_2.1 __finite F -GLIBC_2.1 __finitef F -GLIBC_2.1 __finitel F -GLIBC_2.1 __fpclassify F -GLIBC_2.1 __fpclassifyf F -GLIBC_2.1 __fpclassifyl F -GLIBC_2.1 __signbit F -GLIBC_2.1 __signbitf F -GLIBC_2.1 __signbitl F -GLIBC_2.1 cabs F -GLIBC_2.1 cabsf F -GLIBC_2.1 cabsl F -GLIBC_2.1 cacos F -GLIBC_2.1 cacosf F -GLIBC_2.1 cacosh F -GLIBC_2.1 cacoshf F -GLIBC_2.1 cacoshl F -GLIBC_2.1 cacosl F -GLIBC_2.1 carg F -GLIBC_2.1 cargf F -GLIBC_2.1 cargl F -GLIBC_2.1 casin F -GLIBC_2.1 casinf F -GLIBC_2.1 casinh F -GLIBC_2.1 casinhf F -GLIBC_2.1 casinhl F -GLIBC_2.1 casinl F -GLIBC_2.1 catan F -GLIBC_2.1 catanf F -GLIBC_2.1 catanh F -GLIBC_2.1 catanhf F -GLIBC_2.1 catanhl F -GLIBC_2.1 catanl F -GLIBC_2.1 ccos F -GLIBC_2.1 ccosf F -GLIBC_2.1 ccosh F -GLIBC_2.1 ccoshf F -GLIBC_2.1 ccoshl F -GLIBC_2.1 ccosl F -GLIBC_2.1 cexp F -GLIBC_2.1 cexpf F -GLIBC_2.1 cexpl F -GLIBC_2.1 cimag F -GLIBC_2.1 cimagf F -GLIBC_2.1 cimagl F -GLIBC_2.1 clog F -GLIBC_2.1 clog10 F -GLIBC_2.1 clog10f F -GLIBC_2.1 clog10l F -GLIBC_2.1 clogf F -GLIBC_2.1 clogl F -GLIBC_2.1 conj F -GLIBC_2.1 conjf F -GLIBC_2.1 conjl F -GLIBC_2.1 cpow F -GLIBC_2.1 cpowf F -GLIBC_2.1 cpowl F -GLIBC_2.1 cproj F -GLIBC_2.1 cprojf F -GLIBC_2.1 cprojl F -GLIBC_2.1 creal F -GLIBC_2.1 crealf F -GLIBC_2.1 creall F -GLIBC_2.1 csin F -GLIBC_2.1 csinf F -GLIBC_2.1 csinh F -GLIBC_2.1 csinhf F -GLIBC_2.1 csinhl F -GLIBC_2.1 csinl F -GLIBC_2.1 csqrt F -GLIBC_2.1 csqrtf F -GLIBC_2.1 csqrtl F -GLIBC_2.1 ctan F -GLIBC_2.1 ctanf F -GLIBC_2.1 ctanh F -GLIBC_2.1 ctanhf F -GLIBC_2.1 ctanhl F -GLIBC_2.1 ctanl F -GLIBC_2.1 exp10 F -GLIBC_2.1 exp10f F -GLIBC_2.1 exp10l F -GLIBC_2.1 exp2 F -GLIBC_2.1 exp2f F -GLIBC_2.1 exp2l F -GLIBC_2.1 fdim F -GLIBC_2.1 fdimf F -GLIBC_2.1 fdiml F -GLIBC_2.1 feclearexcept F -GLIBC_2.1 fegetenv F -GLIBC_2.1 fegetexceptflag F -GLIBC_2.1 fegetround F -GLIBC_2.1 feholdexcept F -GLIBC_2.1 feraiseexcept F -GLIBC_2.1 fesetenv F -GLIBC_2.1 fesetexceptflag F -GLIBC_2.1 fesetround F -GLIBC_2.1 fetestexcept F -GLIBC_2.1 feupdateenv F -GLIBC_2.1 fma F -GLIBC_2.1 fmaf F -GLIBC_2.1 fmal F -GLIBC_2.1 fmax F -GLIBC_2.1 fmaxf F -GLIBC_2.1 fmaxl F -GLIBC_2.1 fmin F -GLIBC_2.1 fminf F -GLIBC_2.1 fminl F -GLIBC_2.1 llrint F -GLIBC_2.1 llrintf F -GLIBC_2.1 llrintl F -GLIBC_2.1 llround F -GLIBC_2.1 llroundf F -GLIBC_2.1 llroundl F -GLIBC_2.1 log2 F -GLIBC_2.1 log2f F -GLIBC_2.1 log2l F -GLIBC_2.1 lrint F -GLIBC_2.1 lrintf F -GLIBC_2.1 lrintl F -GLIBC_2.1 lround F -GLIBC_2.1 lroundf F -GLIBC_2.1 lroundl F -GLIBC_2.1 nan F -GLIBC_2.1 nanf F -GLIBC_2.1 nanl F -GLIBC_2.1 nearbyint F -GLIBC_2.1 nearbyintf F -GLIBC_2.1 nearbyintl F -GLIBC_2.1 nexttoward F -GLIBC_2.1 nexttowardf F -GLIBC_2.1 nexttowardl F -GLIBC_2.1 pow10 F -GLIBC_2.1 pow10f F -GLIBC_2.1 pow10l F -GLIBC_2.1 remquo F -GLIBC_2.1 remquof F -GLIBC_2.1 remquol F -GLIBC_2.1 round F -GLIBC_2.1 roundf F -GLIBC_2.1 roundl F -GLIBC_2.1 scalbln F -GLIBC_2.1 scalblnf F -GLIBC_2.1 scalblnl F -GLIBC_2.1 sincos F -GLIBC_2.1 sincosf F -GLIBC_2.1 sincosl F -GLIBC_2.1 tgamma F -GLIBC_2.1 tgammaf F -GLIBC_2.1 tgammal F -GLIBC_2.1 trunc F -GLIBC_2.1 truncf F -GLIBC_2.1 truncl F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __acoshl_finite F -GLIBC_2.15 __acosl_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __asinl_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atan2l_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __atanhl_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __coshl_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp10l_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp2l_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __expl_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __fmodl_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __gammal_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __hypotl_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j0l_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __j1l_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __jnl_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __lgammal_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log10l_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log2l_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __logl_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __powl_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __remainderl_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __scalbl_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sinhl_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __sqrtl_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y0l_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __y1l_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.15 __ynl_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __expl F -GLIBC_2.2 __expm1l F -GLIBC_2.2 feclearexcept F -GLIBC_2.2 fedisableexcept F -GLIBC_2.2 feenableexcept F -GLIBC_2.2 fegetenv F -GLIBC_2.2 fegetexcept F -GLIBC_2.2 fegetexceptflag F -GLIBC_2.2 feraiseexcept F -GLIBC_2.2 fesetenv F -GLIBC_2.2 fesetexceptflag F -GLIBC_2.2 feupdateenv F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iscanonicall F -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/i386/libnsl.abilist b/sysdeps/unix/sysv/linux/i386/libnsl.abilist deleted file mode 100644 index a23db2aeaf..0000000000 --- a/sysdeps/unix/sysv/linux/i386/libnsl.abilist +++ /dev/null @@ -1,124 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __yp_check F -GLIBC_2.0 xdr_domainname F -GLIBC_2.0 xdr_keydat F -GLIBC_2.0 xdr_mapname F -GLIBC_2.0 xdr_peername F -GLIBC_2.0 xdr_valdat F -GLIBC_2.0 xdr_yp_buf F -GLIBC_2.0 xdr_ypbind_binding F -GLIBC_2.0 xdr_ypbind_resp F -GLIBC_2.0 xdr_ypbind_resptype F -GLIBC_2.0 xdr_ypbind_setdom F -GLIBC_2.0 xdr_ypdelete_args F -GLIBC_2.0 xdr_ypmap_parms F -GLIBC_2.0 xdr_ypmaplist F -GLIBC_2.0 xdr_yppush_status F -GLIBC_2.0 xdr_yppushresp_xfr F -GLIBC_2.0 xdr_ypreq_key F -GLIBC_2.0 xdr_ypreq_nokey F -GLIBC_2.0 xdr_ypreq_xfr F -GLIBC_2.0 xdr_ypresp_all F -GLIBC_2.0 xdr_ypresp_key_val F -GLIBC_2.0 xdr_ypresp_maplist F -GLIBC_2.0 xdr_ypresp_master F -GLIBC_2.0 xdr_ypresp_order F -GLIBC_2.0 xdr_ypresp_val F -GLIBC_2.0 xdr_ypresp_xfr F -GLIBC_2.0 xdr_ypstat F -GLIBC_2.0 xdr_ypupdate_args F -GLIBC_2.0 xdr_ypxfrstat F -GLIBC_2.0 yp_all F -GLIBC_2.0 yp_bind F -GLIBC_2.0 yp_first F -GLIBC_2.0 yp_get_default_domain F -GLIBC_2.0 yp_maplist F -GLIBC_2.0 yp_master F -GLIBC_2.0 yp_match F -GLIBC_2.0 yp_next F -GLIBC_2.0 yp_order F -GLIBC_2.0 yp_unbind F -GLIBC_2.0 yp_update F -GLIBC_2.0 ypbinderr_string F -GLIBC_2.0 yperr_string F -GLIBC_2.0 ypprot_err F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __free_fdresult F -GLIBC_2.1 __nis_default_access F -GLIBC_2.1 __nis_default_group F -GLIBC_2.1 __nis_default_owner F -GLIBC_2.1 __nis_default_ttl F -GLIBC_2.1 __nis_finddirectory F -GLIBC_2.1 __nis_hash F -GLIBC_2.1 __nisbind_connect F -GLIBC_2.1 __nisbind_create F -GLIBC_2.1 __nisbind_destroy F -GLIBC_2.1 __nisbind_next F -GLIBC_2.1 nis_add F -GLIBC_2.1 nis_add_entry F -GLIBC_2.1 nis_addmember F -GLIBC_2.1 nis_checkpoint F -GLIBC_2.1 nis_clone_directory F -GLIBC_2.1 nis_clone_object F -GLIBC_2.1 nis_clone_result F -GLIBC_2.1 nis_creategroup F -GLIBC_2.1 nis_destroy_object F -GLIBC_2.1 nis_destroygroup F -GLIBC_2.1 nis_dir_cmp F -GLIBC_2.1 nis_domain_of F -GLIBC_2.1 nis_domain_of_r F -GLIBC_2.1 nis_first_entry F -GLIBC_2.1 nis_free_directory F -GLIBC_2.1 nis_free_object F -GLIBC_2.1 nis_free_request F -GLIBC_2.1 nis_freenames F -GLIBC_2.1 nis_freeresult F -GLIBC_2.1 nis_freeservlist F -GLIBC_2.1 nis_freetags F -GLIBC_2.1 nis_getnames F -GLIBC_2.1 nis_getservlist F -GLIBC_2.1 nis_ismember F -GLIBC_2.1 nis_leaf_of F -GLIBC_2.1 nis_leaf_of_r F -GLIBC_2.1 nis_lerror F -GLIBC_2.1 nis_list F -GLIBC_2.1 nis_local_directory F -GLIBC_2.1 nis_local_group F -GLIBC_2.1 nis_local_host F -GLIBC_2.1 nis_local_principal F -GLIBC_2.1 nis_lookup F -GLIBC_2.1 nis_mkdir F -GLIBC_2.1 nis_modify F -GLIBC_2.1 nis_modify_entry F -GLIBC_2.1 nis_name_of F -GLIBC_2.1 nis_name_of_r F -GLIBC_2.1 nis_next_entry F -GLIBC_2.1 nis_perror F -GLIBC_2.1 nis_ping F -GLIBC_2.1 nis_print_directory F -GLIBC_2.1 nis_print_entry F -GLIBC_2.1 nis_print_group F -GLIBC_2.1 nis_print_group_entry F -GLIBC_2.1 nis_print_link F -GLIBC_2.1 nis_print_object F -GLIBC_2.1 nis_print_result F -GLIBC_2.1 nis_print_rights F -GLIBC_2.1 nis_print_table F -GLIBC_2.1 nis_read_obj F -GLIBC_2.1 nis_remove F -GLIBC_2.1 nis_remove_entry F -GLIBC_2.1 nis_removemember F -GLIBC_2.1 nis_rmdir F -GLIBC_2.1 nis_servstate F -GLIBC_2.1 nis_sperrno F -GLIBC_2.1 nis_sperror F -GLIBC_2.1 nis_sperror_r F -GLIBC_2.1 nis_stats F -GLIBC_2.1 nis_verifygroup F -GLIBC_2.1 nis_write_obj F -GLIBC_2.1 readColdStartFile F -GLIBC_2.1 writeColdStartFile F -GLIBC_2.1 xdr_cback_data F -GLIBC_2.1 xdr_obj_p F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 xdr_ypall F diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist deleted file mode 100644 index 8f9c3254be..0000000000 --- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist +++ /dev/null @@ -1,257 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 __close F -GLIBC_2.0 __connect F -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __fork F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __lseek F -GLIBC_2.0 __open F -GLIBC_2.0 __pthread_getspecific F -GLIBC_2.0 __pthread_key_create F -GLIBC_2.0 __pthread_mutex_destroy F -GLIBC_2.0 __pthread_mutex_init F -GLIBC_2.0 __pthread_mutex_lock F -GLIBC_2.0 __pthread_mutex_trylock F -GLIBC_2.0 __pthread_mutex_unlock F -GLIBC_2.0 __pthread_mutexattr_destroy F -GLIBC_2.0 __pthread_mutexattr_init F -GLIBC_2.0 __pthread_mutexattr_settype F -GLIBC_2.0 __pthread_once F -GLIBC_2.0 __pthread_setspecific F -GLIBC_2.0 __read F -GLIBC_2.0 __send F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __wait F -GLIBC_2.0 __write F -GLIBC_2.0 _pthread_cleanup_pop F -GLIBC_2.0 _pthread_cleanup_pop_restore F -GLIBC_2.0 _pthread_cleanup_push F -GLIBC_2.0 _pthread_cleanup_push_defer F -GLIBC_2.0 accept F -GLIBC_2.0 close F -GLIBC_2.0 connect F -GLIBC_2.0 fcntl F -GLIBC_2.0 flockfile F -GLIBC_2.0 fork F -GLIBC_2.0 fsync F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 funlockfile F -GLIBC_2.0 longjmp F -GLIBC_2.0 lseek F -GLIBC_2.0 msync F -GLIBC_2.0 nanosleep F -GLIBC_2.0 open F -GLIBC_2.0 pause F -GLIBC_2.0 pthread_atfork F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cancel F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_create F -GLIBC_2.0 pthread_detach F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_getspecific F -GLIBC_2.0 pthread_join F -GLIBC_2.0 pthread_key_create F -GLIBC_2.0 pthread_key_delete F -GLIBC_2.0 pthread_kill F -GLIBC_2.0 pthread_kill_other_threads_np F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_trylock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_mutexattr_destroy F -GLIBC_2.0 pthread_mutexattr_getkind_np F -GLIBC_2.0 pthread_mutexattr_init F -GLIBC_2.0 pthread_mutexattr_setkind_np F -GLIBC_2.0 pthread_once F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 pthread_setspecific F -GLIBC_2.0 pthread_sigmask F -GLIBC_2.0 pthread_testcancel F -GLIBC_2.0 raise F -GLIBC_2.0 read F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 sem_destroy F -GLIBC_2.0 sem_getvalue F -GLIBC_2.0 sem_init F -GLIBC_2.0 sem_post F -GLIBC_2.0 sem_trywait F -GLIBC_2.0 sem_wait F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 sigaction F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 sigwait F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 vfork F -GLIBC_2.0 wait F -GLIBC_2.0 waitpid F -GLIBC_2.0 write F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __libc_allocate_rtsig F -GLIBC_2.1 __libc_current_sigrtmax F -GLIBC_2.1 __libc_current_sigrtmin F -GLIBC_2.1 pthread_attr_getguardsize F -GLIBC_2.1 pthread_attr_getstackaddr F -GLIBC_2.1 pthread_attr_getstacksize F -GLIBC_2.1 pthread_attr_init F -GLIBC_2.1 pthread_attr_setguardsize F -GLIBC_2.1 pthread_attr_setstackaddr F -GLIBC_2.1 pthread_attr_setstacksize F -GLIBC_2.1 pthread_create F -GLIBC_2.1 pthread_getconcurrency F -GLIBC_2.1 pthread_mutexattr_gettype F -GLIBC_2.1 pthread_mutexattr_settype F -GLIBC_2.1 pthread_rwlock_destroy F -GLIBC_2.1 pthread_rwlock_init F -GLIBC_2.1 pthread_rwlock_rdlock F -GLIBC_2.1 pthread_rwlock_tryrdlock F -GLIBC_2.1 pthread_rwlock_trywrlock F -GLIBC_2.1 pthread_rwlock_unlock F -GLIBC_2.1 pthread_rwlock_wrlock F -GLIBC_2.1 pthread_rwlockattr_destroy F -GLIBC_2.1 pthread_rwlockattr_getkind_np F -GLIBC_2.1 pthread_rwlockattr_getpshared F -GLIBC_2.1 pthread_rwlockattr_init F -GLIBC_2.1 pthread_rwlockattr_setkind_np F -GLIBC_2.1 pthread_rwlockattr_setpshared F -GLIBC_2.1 pthread_setconcurrency F -GLIBC_2.1 sem_destroy F -GLIBC_2.1 sem_getvalue F -GLIBC_2.1 sem_init F -GLIBC_2.1 sem_post F -GLIBC_2.1 sem_trywait F -GLIBC_2.1 sem_wait F -GLIBC_2.1.1 GLIBC_2.1.1 A -GLIBC_2.1.1 sem_close F -GLIBC_2.1.1 sem_open F -GLIBC_2.1.1 sem_unlink F -GLIBC_2.1.2 GLIBC_2.1.2 A -GLIBC_2.1.2 __vfork F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __open64 F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pthread_rwlock_destroy F -GLIBC_2.2 __pthread_rwlock_init F -GLIBC_2.2 __pthread_rwlock_rdlock F -GLIBC_2.2 __pthread_rwlock_tryrdlock F -GLIBC_2.2 __pthread_rwlock_trywrlock F -GLIBC_2.2 __pthread_rwlock_unlock F -GLIBC_2.2 __pthread_rwlock_wrlock F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __res_state F -GLIBC_2.2 lseek64 F -GLIBC_2.2 open64 F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 pthread_attr_getstack F -GLIBC_2.2 pthread_attr_setstack F -GLIBC_2.2 pthread_barrier_destroy F -GLIBC_2.2 pthread_barrier_init F -GLIBC_2.2 pthread_barrier_wait F -GLIBC_2.2 pthread_barrierattr_destroy F -GLIBC_2.2 pthread_barrierattr_init F -GLIBC_2.2 pthread_barrierattr_setpshared F -GLIBC_2.2 pthread_condattr_getpshared F -GLIBC_2.2 pthread_condattr_setpshared F -GLIBC_2.2 pthread_getcpuclockid F -GLIBC_2.2 pthread_mutex_timedlock F -GLIBC_2.2 pthread_mutexattr_getpshared F -GLIBC_2.2 pthread_mutexattr_setpshared F -GLIBC_2.2 pthread_rwlock_timedrdlock F -GLIBC_2.2 pthread_rwlock_timedwrlock F -GLIBC_2.2 pthread_spin_destroy F -GLIBC_2.2 pthread_spin_init F -GLIBC_2.2 pthread_spin_lock F -GLIBC_2.2 pthread_spin_trylock F -GLIBC_2.2 pthread_spin_unlock F -GLIBC_2.2 pthread_yield F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 sem_timedwait F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 pthread_getattr_np F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F diff --git a/sysdeps/unix/sysv/linux/i386/libresolv.abilist b/sysdeps/unix/sysv/linux/i386/libresolv.abilist deleted file mode 100644 index 4d50e7c8c6..0000000000 --- a/sysdeps/unix/sysv/linux/i386/libresolv.abilist +++ /dev/null @@ -1,100 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __b64_ntop F -GLIBC_2.0 __b64_pton F -GLIBC_2.0 __dn_comp F -GLIBC_2.0 __dn_count_labels F -GLIBC_2.0 __dn_skipname F -GLIBC_2.0 __fp_nquery F -GLIBC_2.0 __fp_query F -GLIBC_2.0 __fp_resstat F -GLIBC_2.0 __hostalias F -GLIBC_2.0 __loc_aton F -GLIBC_2.0 __loc_ntoa F -GLIBC_2.0 __p_cdname F -GLIBC_2.0 __p_cdnname F -GLIBC_2.0 __p_class F -GLIBC_2.0 __p_class_syms D 0x54 -GLIBC_2.0 __p_fqname F -GLIBC_2.0 __p_fqnname F -GLIBC_2.0 __p_option F -GLIBC_2.0 __p_query F -GLIBC_2.0 __p_secstodate F -GLIBC_2.0 __p_time F -GLIBC_2.0 __p_type F -GLIBC_2.0 __p_type_syms D 0x228 -GLIBC_2.0 __putlong F -GLIBC_2.0 __putshort F -GLIBC_2.0 __res_close F -GLIBC_2.0 __res_dnok F -GLIBC_2.0 __res_hnok F -GLIBC_2.0 __res_isourserver F -GLIBC_2.0 __res_mailok F -GLIBC_2.0 __res_nameinquery F -GLIBC_2.0 __res_ownok F -GLIBC_2.0 __res_queriesmatch F -GLIBC_2.0 __res_send F -GLIBC_2.0 __sym_ntop F -GLIBC_2.0 __sym_ntos F -GLIBC_2.0 __sym_ston F -GLIBC_2.0 _gethtbyaddr F -GLIBC_2.0 _gethtbyname F -GLIBC_2.0 _gethtbyname2 F -GLIBC_2.0 _gethtent F -GLIBC_2.0 _getlong F -GLIBC_2.0 _getshort F -GLIBC_2.0 _res_opcodes D 0x40 -GLIBC_2.0 _sethtent F -GLIBC_2.0 dn_expand F -GLIBC_2.0 inet_net_ntop F -GLIBC_2.0 inet_net_pton F -GLIBC_2.0 inet_neta F -GLIBC_2.0 res_gethostbyaddr F -GLIBC_2.0 res_gethostbyname F -GLIBC_2.0 res_gethostbyname2 F -GLIBC_2.0 res_mkquery F -GLIBC_2.0 res_query F -GLIBC_2.0 res_querydomain F -GLIBC_2.0 res_search F -GLIBC_2.0 res_send_setqhook F -GLIBC_2.0 res_send_setrhook F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __dn_expand F -GLIBC_2.2 __res_hostalias F -GLIBC_2.2 __res_mkquery F -GLIBC_2.2 __res_nmkquery F -GLIBC_2.2 __res_nquery F -GLIBC_2.2 __res_nquerydomain F -GLIBC_2.2 __res_nsearch F -GLIBC_2.2 __res_nsend F -GLIBC_2.2 __res_query F -GLIBC_2.2 __res_querydomain F -GLIBC_2.2 __res_search F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/i386/librt.abilist b/sysdeps/unix/sysv/linux/i386/librt.abilist deleted file mode 100644 index 15e4418863..0000000000 --- a/sysdeps/unix/sysv/linux/i386/librt.abilist +++ /dev/null @@ -1,47 +0,0 @@ -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 aio_cancel F -GLIBC_2.1 aio_cancel64 F -GLIBC_2.1 aio_error F -GLIBC_2.1 aio_error64 F -GLIBC_2.1 aio_fsync F -GLIBC_2.1 aio_fsync64 F -GLIBC_2.1 aio_init F -GLIBC_2.1 aio_read F -GLIBC_2.1 aio_read64 F -GLIBC_2.1 aio_return F -GLIBC_2.1 aio_return64 F -GLIBC_2.1 aio_suspend F -GLIBC_2.1 aio_suspend64 F -GLIBC_2.1 aio_write F -GLIBC_2.1 aio_write64 F -GLIBC_2.1 lio_listio F -GLIBC_2.1 lio_listio64 F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 clock_getcpuclockid F -GLIBC_2.2 clock_getres F -GLIBC_2.2 clock_gettime F -GLIBC_2.2 clock_nanosleep F -GLIBC_2.2 clock_settime F -GLIBC_2.2 shm_open F -GLIBC_2.2 shm_unlink F -GLIBC_2.2 timer_create F -GLIBC_2.2 timer_delete F -GLIBC_2.2 timer_getoverrun F -GLIBC_2.2 timer_gettime F -GLIBC_2.2 timer_settime F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/i386/libthread_db.abilist b/sysdeps/unix/sysv/linux/i386/libthread_db.abilist deleted file mode 100644 index a8a8c2c68d..0000000000 --- a/sysdeps/unix/sysv/linux/i386/libthread_db.abilist +++ /dev/null @@ -1,44 +0,0 @@ -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 td_init F -GLIBC_2.1.3 td_log F -GLIBC_2.1.3 td_ta_clear_event F -GLIBC_2.1.3 td_ta_delete F -GLIBC_2.1.3 td_ta_enable_stats F -GLIBC_2.1.3 td_ta_event_addr F -GLIBC_2.1.3 td_ta_event_getmsg F -GLIBC_2.1.3 td_ta_get_nthreads F -GLIBC_2.1.3 td_ta_get_ph F -GLIBC_2.1.3 td_ta_get_stats F -GLIBC_2.1.3 td_ta_map_id2thr F -GLIBC_2.1.3 td_ta_map_lwp2thr F -GLIBC_2.1.3 td_ta_new F -GLIBC_2.1.3 td_ta_reset_stats F -GLIBC_2.1.3 td_ta_set_event F -GLIBC_2.1.3 td_ta_setconcurrency F -GLIBC_2.1.3 td_ta_thr_iter F -GLIBC_2.1.3 td_ta_tsd_iter F -GLIBC_2.1.3 td_thr_clear_event F -GLIBC_2.1.3 td_thr_dbresume F -GLIBC_2.1.3 td_thr_dbsuspend F -GLIBC_2.1.3 td_thr_event_enable F -GLIBC_2.1.3 td_thr_event_getmsg F -GLIBC_2.1.3 td_thr_get_info F -GLIBC_2.1.3 td_thr_getfpregs F -GLIBC_2.1.3 td_thr_getgregs F -GLIBC_2.1.3 td_thr_getxregs F -GLIBC_2.1.3 td_thr_getxregsize F -GLIBC_2.1.3 td_thr_set_event F -GLIBC_2.1.3 td_thr_setfpregs F -GLIBC_2.1.3 td_thr_setgregs F -GLIBC_2.1.3 td_thr_setprio F -GLIBC_2.1.3 td_thr_setsigpending F -GLIBC_2.1.3 td_thr_setxregs F -GLIBC_2.1.3 td_thr_sigsetmask F -GLIBC_2.1.3 td_thr_tsd F -GLIBC_2.1.3 td_thr_validate F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 td_symbol_list F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F diff --git a/sysdeps/unix/sysv/linux/i386/libutil.abilist b/sysdeps/unix/sysv/linux/i386/libutil.abilist deleted file mode 100644 index 89c67755c4..0000000000 --- a/sysdeps/unix/sysv/linux/i386/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 forkpty F -GLIBC_2.0 login F -GLIBC_2.0 login_tty F -GLIBC_2.0 logout F -GLIBC_2.0 logwtmp F -GLIBC_2.0 openpty F diff --git a/sysdeps/unix/sysv/linux/i386/lll_timedlock_wait.c b/sysdeps/unix/sysv/linux/i386/lll_timedlock_wait.c deleted file mode 100644 index f6875b8f89..0000000000 --- a/sysdeps/unix/sysv/linux/i386/lll_timedlock_wait.c +++ /dev/null @@ -1 +0,0 @@ -/* __lll_timedlock_wait is in lowlevellock.S. */ diff --git a/sysdeps/unix/sysv/linux/i386/lll_timedwait_tid.c b/sysdeps/unix/sysv/linux/i386/lll_timedwait_tid.c deleted file mode 100644 index 43900c6294..0000000000 --- a/sysdeps/unix/sysv/linux/i386/lll_timedwait_tid.c +++ /dev/null @@ -1 +0,0 @@ -/* __lll_timedwait_tid is in lowlevellock.S. */ diff --git a/sysdeps/unix/sysv/linux/i386/localplt.data b/sysdeps/unix/sysv/linux/i386/localplt.data deleted file mode 100644 index 8ea4333846..0000000000 --- a/sysdeps/unix/sysv/linux/i386/localplt.data +++ /dev/null @@ -1,18 +0,0 @@ -# Linker in binutils 2.26 and newer consolidates R_X86_64_JUMP_SLOT -# relocation with R_386_GLOB_DAT relocation against the same symbol. -libc.so: _Unwind_Find_FDE + REL R_386_GLOB_DAT -libc.so: calloc + REL R_386_GLOB_DAT -libc.so: free + REL R_386_GLOB_DAT -libc.so: malloc + REL R_386_GLOB_DAT -libc.so: memalign + REL R_386_GLOB_DAT -libc.so: realloc + REL R_386_GLOB_DAT -libm.so: matherr + REL R_386_GLOB_DAT -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc + REL R_386_GLOB_DAT -ld.so: calloc + REL R_386_GLOB_DAT -ld.so: realloc + REL R_386_GLOB_DAT -ld.so: free + REL R_386_GLOB_DAT -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error + REL R_386_GLOB_DAT -ld.so: _dl_catch_error + REL R_386_GLOB_DAT diff --git a/sysdeps/unix/sysv/linux/i386/lockf64.c b/sysdeps/unix/sysv/linux/i386/lockf64.c deleted file mode 100644 index 23b99f8f22..0000000000 --- a/sysdeps/unix/sysv/linux/i386/lockf64.c +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* lockf is a simplified interface to fcntl's locking facilities. */ - -int -lockf64 (int fd, int cmd, off64_t len64) -{ - struct flock64 fl64; - int cmd64; - int result; - - memset ((char *) &fl64, '\0', sizeof (fl64)); - fl64.l_whence = SEEK_CUR; - fl64.l_start = 0; - fl64.l_len = len64; - - switch (cmd) - { - case F_TEST: - /* Test the lock: return 0 if FD is unlocked or locked by this process; - return -1, set errno to EACCES, if another process holds the lock. */ - fl64.l_type = F_RDLCK; - INTERNAL_SYSCALL_DECL (err); - result = INTERNAL_SYSCALL (fcntl64, err, 3, fd, F_GETLK64, &fl64); - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err))) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (result, - err)); - if (fl64.l_type == F_UNLCK || fl64.l_pid == __getpid ()) - return 0; - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EACCES); - case F_ULOCK: - fl64.l_type = F_UNLCK; - cmd64 = F_SETLK64; - break; - case F_LOCK: - fl64.l_type = F_WRLCK; - cmd64 = F_SETLKW64; - break; - case F_TLOCK: - fl64.l_type = F_WRLCK; - cmd64 = F_SETLK64; - break; - - default: - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - } - return INLINE_SYSCALL (fcntl64, 3, fd, cmd64, &fl64); -} diff --git a/sysdeps/unix/sysv/linux/i386/lowlevellock.S b/sysdeps/unix/sysv/linux/i386/lowlevellock.S deleted file mode 100644 index 8fcca5be99..0000000000 --- a/sysdeps/unix/sysv/linux/i386/lowlevellock.S +++ /dev/null @@ -1,466 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include - - .text - -#ifdef __ASSUME_PRIVATE_FUTEX -# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ - movl $(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), reg -# define LOAD_PRIVATE_FUTEX_WAKE(reg) \ - movl $(FUTEX_WAKE | FUTEX_PRIVATE_FLAG), reg -# define LOAD_FUTEX_WAIT(reg) \ - xorl $(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), reg -# define LOAD_FUTEX_WAIT_ABS(reg) \ - xorl $(FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME), reg -# define LOAD_FUTEX_WAKE(reg) \ - xorl $(FUTEX_WAKE | FUTEX_PRIVATE_FLAG), reg -#else -# if FUTEX_WAIT == 0 -# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ - movl %gs:PRIVATE_FUTEX, reg -# else -# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ - movl %gs:PRIVATE_FUTEX, reg ; \ - orl $FUTEX_WAIT, reg -# endif -# define LOAD_PRIVATE_FUTEX_WAKE(reg) \ - movl %gs:PRIVATE_FUTEX, reg ; \ - orl $FUTEX_WAKE, reg -# if FUTEX_WAIT == 0 -# define LOAD_FUTEX_WAIT(reg) \ - xorl $FUTEX_PRIVATE_FLAG, reg ; \ - andl %gs:PRIVATE_FUTEX, reg -# else -# define LOAD_FUTEX_WAIT(reg) \ - xorl $FUTEX_PRIVATE_FLAG, reg ; \ - andl %gs:PRIVATE_FUTEX, reg ; \ - orl $FUTEX_WAIT, reg -# endif -# define LOAD_FUTEX_WAIT_ABS(reg) \ - xorl $FUTEX_PRIVATE_FLAG, reg ; \ - andl %gs:PRIVATE_FUTEX, reg ; \ - orl $FUTEX_WAIT_BITSET | FUTEX_CLOCK_REALTIME, reg -# define LOAD_FUTEX_WAKE(reg) \ - xorl $FUTEX_PRIVATE_FLAG, reg ; \ - andl %gs:PRIVATE_FUTEX, reg ; \ - orl $FUTEX_WAKE, reg -#endif - - .globl __lll_lock_wait_private - .type __lll_lock_wait_private,@function - .hidden __lll_lock_wait_private - .align 16 -__lll_lock_wait_private: - cfi_startproc - pushl %edx - cfi_adjust_cfa_offset(4) - pushl %ebx - cfi_adjust_cfa_offset(4) - pushl %esi - cfi_adjust_cfa_offset(4) - cfi_offset(%edx, -8) - cfi_offset(%ebx, -12) - cfi_offset(%esi, -16) - - movl $2, %edx - movl %ecx, %ebx - xorl %esi, %esi /* No timeout. */ - LOAD_PRIVATE_FUTEX_WAIT (%ecx) - - cmpl %edx, %eax /* NB: %edx == 2 */ - jne 2f - -1: LIBC_PROBE (lll_lock_wait_private, 1, %ebx) - movl $SYS_futex, %eax - ENTER_KERNEL - -2: movl %edx, %eax - xchgl %eax, (%ebx) /* NB: lock is implied */ - - testl %eax, %eax - jnz 1b - - popl %esi - cfi_adjust_cfa_offset(-4) - cfi_restore(%esi) - popl %ebx - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebx) - popl %edx - cfi_adjust_cfa_offset(-4) - cfi_restore(%edx) - ret - cfi_endproc - .size __lll_lock_wait_private,.-__lll_lock_wait_private - -#if !IS_IN (libc) - .globl __lll_lock_wait - .type __lll_lock_wait,@function - .hidden __lll_lock_wait - .align 16 -__lll_lock_wait: - cfi_startproc - pushl %edx - cfi_adjust_cfa_offset(4) - pushl %ebx - cfi_adjust_cfa_offset(4) - pushl %esi - cfi_adjust_cfa_offset(4) - cfi_offset(%edx, -8) - cfi_offset(%ebx, -12) - cfi_offset(%esi, -16) - - movl %edx, %ebx - movl $2, %edx - xorl %esi, %esi /* No timeout. */ - LOAD_FUTEX_WAIT (%ecx) - - cmpl %edx, %eax /* NB: %edx == 2 */ - jne 2f - -1: movl $SYS_futex, %eax - ENTER_KERNEL - -2: movl %edx, %eax - xchgl %eax, (%ebx) /* NB: lock is implied */ - - testl %eax, %eax - jnz 1b - - popl %esi - cfi_adjust_cfa_offset(-4) - cfi_restore(%esi) - popl %ebx - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebx) - popl %edx - cfi_adjust_cfa_offset(-4) - cfi_restore(%edx) - ret - cfi_endproc - .size __lll_lock_wait,.-__lll_lock_wait - - /* %ecx: futex - %esi: flags - %edx: timeout - %eax: futex value - */ - .globl __lll_timedlock_wait - .type __lll_timedlock_wait,@function - .hidden __lll_timedlock_wait - .align 16 -__lll_timedlock_wait: - cfi_startproc - pushl %ebp - cfi_adjust_cfa_offset(4) - cfi_rel_offset(%ebp, 0) - pushl %ebx - cfi_adjust_cfa_offset(4) - cfi_rel_offset(%ebx, 0) - -# ifndef __ASSUME_FUTEX_CLOCK_REALTIME -# ifdef PIC - LOAD_PIC_REG (bx) - cmpl $0, __have_futex_clock_realtime@GOTOFF(%ebx) -# else - cmpl $0, __have_futex_clock_realtime -# endif - je .Lreltmo -# endif - - cmpl $0, (%edx) - js 8f - - movl %ecx, %ebx - movl %esi, %ecx - movl %edx, %esi - movl $0xffffffff, %ebp - LOAD_FUTEX_WAIT_ABS (%ecx) - - movl $2, %edx - cmpl %edx, %eax - jne 2f - -1: movl $SYS_futex, %eax - movl $2, %edx - ENTER_KERNEL - -2: xchgl %edx, (%ebx) /* NB: lock is implied */ - - testl %edx, %edx - jz 3f - - cmpl $-ETIMEDOUT, %eax - je 4f - cmpl $-EINVAL, %eax - jne 1b -4: movl %eax, %edx - negl %edx - -3: movl %edx, %eax -7: popl %ebx - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebx) - popl %ebp - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebp) - ret - -8: movl $ETIMEDOUT, %eax - jmp 7b - -# ifndef __ASSUME_FUTEX_CLOCK_REALTIME -.Lreltmo: - /* Check for a valid timeout value. */ - cmpl $1000000000, 4(%edx) - jae 3f - - pushl %esi - cfi_adjust_cfa_offset(4) - cfi_rel_offset(%esi, 0) - pushl %edi - cfi_adjust_cfa_offset(4) - cfi_rel_offset(%edi, 0) - - /* Stack frame for the timespec and timeval structs. */ - subl $8, %esp - cfi_adjust_cfa_offset(8) - - movl %ecx, %ebp - movl %edx, %edi - - movl $2, %edx - xchgl %edx, (%ebp) - - test %edx, %edx - je 6f - -1: - /* Get current time. */ - movl %esp, %ebx - xorl %ecx, %ecx - movl $__NR_gettimeofday, %eax - ENTER_KERNEL - - /* Compute relative timeout. */ - movl 4(%esp), %eax - movl $1000, %edx - mul %edx /* Milli seconds to nano seconds. */ - movl (%edi), %ecx - movl 4(%edi), %edx - subl (%esp), %ecx - subl %eax, %edx - jns 4f - addl $1000000000, %edx - subl $1, %ecx -4: testl %ecx, %ecx - js 2f /* Time is already up. */ - - /* Store relative timeout. */ - movl %ecx, (%esp) - movl %edx, 4(%esp) - - /* Futex call. */ - movl %ebp, %ebx - movl $2, %edx - movl %esp, %esi - movl 16(%esp), %ecx - LOAD_FUTEX_WAIT (%ecx) - movl $SYS_futex, %eax - ENTER_KERNEL - - /* NB: %edx == 2 */ - xchgl %edx, (%ebp) - - testl %edx, %edx - je 6f - - cmpl $-ETIMEDOUT, %eax - jne 1b -2: movl $ETIMEDOUT, %edx - -6: addl $8, %esp - cfi_adjust_cfa_offset(-8) - popl %edi - cfi_adjust_cfa_offset(-4) - cfi_restore(%edi) - popl %esi - cfi_adjust_cfa_offset(-4) - cfi_restore(%esi) -7: popl %ebx - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebx) - popl %ebp - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebp) - movl %edx, %eax - ret - -3: movl $EINVAL, %edx - jmp 7b -# endif - cfi_endproc - .size __lll_timedlock_wait,.-__lll_timedlock_wait -#endif - - .globl __lll_unlock_wake_private - .type __lll_unlock_wake_private,@function - .hidden __lll_unlock_wake_private - .align 16 -__lll_unlock_wake_private: - cfi_startproc - pushl %ebx - cfi_adjust_cfa_offset(4) - pushl %ecx - cfi_adjust_cfa_offset(4) - pushl %edx - cfi_adjust_cfa_offset(4) - cfi_offset(%ebx, -8) - cfi_offset(%ecx, -12) - cfi_offset(%edx, -16) - - movl %eax, %ebx - movl $0, (%eax) - LOAD_PRIVATE_FUTEX_WAKE (%ecx) - movl $1, %edx /* Wake one thread. */ - movl $SYS_futex, %eax - ENTER_KERNEL - - popl %edx - cfi_adjust_cfa_offset(-4) - cfi_restore(%edx) - popl %ecx - cfi_adjust_cfa_offset(-4) - cfi_restore(%ecx) - popl %ebx - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebx) - ret - cfi_endproc - .size __lll_unlock_wake_private,.-__lll_unlock_wake_private - -#if !IS_IN (libc) - .globl __lll_unlock_wake - .type __lll_unlock_wake,@function - .hidden __lll_unlock_wake - .align 16 -__lll_unlock_wake: - cfi_startproc - pushl %ebx - cfi_adjust_cfa_offset(4) - pushl %ecx - cfi_adjust_cfa_offset(4) - pushl %edx - cfi_adjust_cfa_offset(4) - cfi_offset(%ebx, -8) - cfi_offset(%ecx, -12) - cfi_offset(%edx, -16) - - movl %eax, %ebx - movl $0, (%eax) - LOAD_FUTEX_WAKE (%ecx) - movl $1, %edx /* Wake one thread. */ - movl $SYS_futex, %eax - ENTER_KERNEL - - popl %edx - cfi_adjust_cfa_offset(-4) - cfi_restore(%edx) - popl %ecx - cfi_adjust_cfa_offset(-4) - cfi_restore(%ecx) - popl %ebx - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebx) - ret - cfi_endproc - .size __lll_unlock_wake,.-__lll_unlock_wake - - .globl __lll_timedwait_tid - .type __lll_timedwait_tid,@function - .hidden __lll_timedwait_tid - .align 16 -__lll_timedwait_tid: - pushl %edi - pushl %esi - pushl %ebx - pushl %ebp - - movl %eax, %ebp - movl %edx, %edi - subl $8, %esp - - /* Get current time. */ -2: movl %esp, %ebx - xorl %ecx, %ecx - movl $__NR_gettimeofday, %eax - ENTER_KERNEL - - /* Compute relative timeout. */ - movl 4(%esp), %eax - movl $1000, %edx - mul %edx /* Milli seconds to nano seconds. */ - movl (%edi), %ecx - movl 4(%edi), %edx - subl (%esp), %ecx - subl %eax, %edx - jns 5f - addl $1000000000, %edx - subl $1, %ecx -5: testl %ecx, %ecx - js 6f /* Time is already up. */ - - movl %ecx, (%esp) /* Store relative timeout. */ - movl %edx, 4(%esp) - - movl (%ebp), %edx - testl %edx, %edx - jz 4f - - movl %esp, %esi - /* XXX The kernel so far uses global futex for the wakeup at - all times. */ - xorl %ecx, %ecx /* movl $FUTEX_WAIT, %ecx */ - movl %ebp, %ebx - movl $SYS_futex, %eax - ENTER_KERNEL - - cmpl $0, (%ebx) - jne 1f -4: xorl %eax, %eax - -3: addl $8, %esp - popl %ebp - popl %ebx - popl %esi - popl %edi - ret - -1: cmpl $-ETIMEDOUT, %eax - jne 2b -6: movl $ETIMEDOUT, %eax - jmp 3b - .size __lll_timedwait_tid,.-__lll_timedwait_tid -#endif diff --git a/sysdeps/unix/sysv/linux/i386/lowlevellock.h b/sysdeps/unix/sysv/linux/i386/lowlevellock.h deleted file mode 100644 index 197bb1fcd9..0000000000 --- a/sysdeps/unix/sysv/linux/i386/lowlevellock.h +++ /dev/null @@ -1,267 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LOWLEVELLOCK_H -#define _LOWLEVELLOCK_H 1 - -#include - -#ifndef __ASSEMBLER__ -# include -# include -# include -# include -# include - -# ifndef LOCK_INSTR -# ifdef UP -# define LOCK_INSTR /* nothing */ -# else -# define LOCK_INSTR "lock;" -# endif -# endif -#else -# ifndef LOCK -# ifdef UP -# define LOCK -# else -# define LOCK lock -# endif -# endif -#endif - -#include - -/* XXX Remove when no assembler code uses futexes anymore. */ -#define SYS_futex __NR_futex - -#ifndef __ASSEMBLER__ - -/* Initializer for compatibility lock. */ -#define LLL_LOCK_INITIALIZER (0) -#define LLL_LOCK_INITIALIZER_LOCKED (1) -#define LLL_LOCK_INITIALIZER_WAITERS (2) - - -/* NB: in the lll_trylock macro we simply return the value in %eax - after the cmpxchg instruction. In case the operation succeded this - value is zero. In case the operation failed, the cmpxchg instruction - has loaded the current value of the memory work which is guaranteed - to be nonzero. */ -#if !IS_IN (libc) || defined UP -# define __lll_trylock_asm LOCK_INSTR "cmpxchgl %2, %1" -#else -# define __lll_trylock_asm "cmpl $0, %%gs:%P5\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tcmpxchgl %2, %1" -#endif - -#define lll_trylock(futex) \ - ({ int ret; \ - __asm __volatile (__lll_trylock_asm \ - : "=a" (ret), "=m" (futex) \ - : "r" (LLL_LOCK_INITIALIZER_LOCKED), "m" (futex), \ - "0" (LLL_LOCK_INITIALIZER), \ - "i" (MULTIPLE_THREADS_OFFSET) \ - : "memory"); \ - ret; }) - - -#define lll_cond_trylock(futex) \ - ({ int ret; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %2, %1" \ - : "=a" (ret), "=m" (futex) \ - : "r" (LLL_LOCK_INITIALIZER_WAITERS), \ - "m" (futex), "0" (LLL_LOCK_INITIALIZER) \ - : "memory"); \ - ret; }) - -#if !IS_IN (libc) || defined UP -# define __lll_lock_asm_start LOCK_INSTR "cmpxchgl %1, %2\n\t" -#else -# define __lll_lock_asm_start "cmpl $0, %%gs:%P6\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tcmpxchgl %1, %2\n\t" -#endif - -#define lll_lock(futex, private) \ - (void) \ - ({ int ignore1, ignore2; \ - if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ - __asm __volatile (__lll_lock_asm_start \ - "jz 18f\n\t" \ - "1:\tleal %2, %%ecx\n" \ - "2:\tcall __lll_lock_wait_private\n" \ - "18:" \ - : "=a" (ignore1), "=c" (ignore2), "=m" (futex) \ - : "0" (0), "1" (1), "m" (futex), \ - "i" (MULTIPLE_THREADS_OFFSET) \ - : "memory"); \ - else \ - { \ - int ignore3; \ - __asm __volatile (__lll_lock_asm_start \ - "jz 18f\n\t" \ - "1:\tleal %2, %%edx\n" \ - "0:\tmovl %8, %%ecx\n" \ - "2:\tcall __lll_lock_wait\n" \ - "18:" \ - : "=a" (ignore1), "=c" (ignore2), \ - "=m" (futex), "=&d" (ignore3) \ - : "1" (1), "m" (futex), \ - "i" (MULTIPLE_THREADS_OFFSET), "0" (0), \ - "g" ((int) (private)) \ - : "memory"); \ - } \ - }) - - -/* Special version of lll_lock which causes the unlock function to - always wakeup waiters. */ -#define lll_cond_lock(futex, private) \ - (void) \ - ({ int ignore1, ignore2, ignore3; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %1, %2\n\t" \ - "jz 18f\n\t" \ - "1:\tleal %2, %%edx\n" \ - "0:\tmovl %7, %%ecx\n" \ - "2:\tcall __lll_lock_wait\n" \ - "18:" \ - : "=a" (ignore1), "=c" (ignore2), "=m" (futex), \ - "=&d" (ignore3) \ - : "0" (0), "1" (2), "m" (futex), "g" ((int) (private))\ - : "memory"); \ - }) - - -#define lll_timedlock(futex, timeout, private) \ - ({ int result, ignore1, ignore2, ignore3; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %1, %3\n\t" \ - "jz 18f\n\t" \ - "1:\tleal %3, %%ecx\n" \ - "0:\tmovl %8, %%edx\n" \ - "2:\tcall __lll_timedlock_wait\n" \ - "18:" \ - : "=a" (result), "=c" (ignore1), "=&d" (ignore2), \ - "=m" (futex), "=S" (ignore3) \ - : "0" (0), "1" (1), "m" (futex), "m" (timeout), \ - "4" ((int) (private)) \ - : "memory"); \ - result; }) - -extern int __lll_timedlock_elision (int *futex, short *adapt_count, - const struct timespec *timeout, - int private) attribute_hidden; - -#define lll_timedlock_elision(futex, adapt_count, timeout, private) \ - __lll_timedlock_elision(&(futex), &(adapt_count), timeout, private) - -#if !IS_IN (libc) || defined UP -# define __lll_unlock_asm LOCK_INSTR "subl $1, %0\n\t" -#else -# define __lll_unlock_asm "cmpl $0, %%gs:%P3\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tsubl $1,%0\n\t" -#endif - -#define lll_unlock(futex, private) \ - (void) \ - ({ int ignore; \ - if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ - __asm __volatile (__lll_unlock_asm \ - "je 18f\n\t" \ - "1:\tleal %0, %%eax\n" \ - "2:\tcall __lll_unlock_wake_private\n" \ - "18:" \ - : "=m" (futex), "=&a" (ignore) \ - : "m" (futex), "i" (MULTIPLE_THREADS_OFFSET) \ - : "memory"); \ - else \ - { \ - int ignore2; \ - __asm __volatile (__lll_unlock_asm \ - "je 18f\n\t" \ - "1:\tleal %0, %%eax\n" \ - "0:\tmovl %5, %%ecx\n" \ - "2:\tcall __lll_unlock_wake\n" \ - "18:" \ - : "=m" (futex), "=&a" (ignore), "=&c" (ignore2) \ - : "i" (MULTIPLE_THREADS_OFFSET), "m" (futex), \ - "g" ((int) (private)) \ - : "memory"); \ - } \ - }) - - -#define lll_islocked(futex) \ - (futex != LLL_LOCK_INITIALIZER) - -/* The kernel notifies a process which uses CLONE_CHILD_CLEARTID via futex - wake-up when the clone terminates. The memory location contains the - thread ID while the clone is running and is reset to zero by the kernel - afterwards. The kernel up to version 3.16.3 does not use the private futex - operations for futex wake-up when the clone terminates. */ -#define lll_wait_tid(tid) \ - do { \ - __typeof (tid) __tid; \ - while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid, LLL_SHARED);\ - } while (0) - -extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime) - __attribute__ ((regparm (2))) attribute_hidden; - -/* As lll_wait_tid, but with a timeout. If the timeout occurs then return - ETIMEDOUT. If ABSTIME is invalid, return EINVAL. - XXX Note that this differs from the generic version in that we do the - error checking here and not in __lll_timedwait_tid. */ -#define lll_timedwait_tid(tid, abstime) \ - ({ \ - int __result = 0; \ - if ((tid) != 0) \ - { \ - if ((abstime)->tv_nsec < 0 || (abstime)->tv_nsec >= 1000000000) \ - __result = EINVAL; \ - else \ - __result = __lll_timedwait_tid (&(tid), (abstime)); \ - } \ - __result; }) - - -extern int __lll_lock_elision (int *futex, short *adapt_count, int private) - attribute_hidden; - -extern int __lll_unlock_elision(int *lock, int private) - attribute_hidden; - -extern int __lll_trylock_elision(int *lock, short *adapt_count) - attribute_hidden; - -#define lll_lock_elision(futex, adapt_count, private) \ - __lll_lock_elision (&(futex), &(adapt_count), private) -#define lll_unlock_elision(futex, adapt_count, private) \ - __lll_unlock_elision (&(futex), private) -#define lll_trylock_elision(futex, adapt_count) \ - __lll_trylock_elision(&(futex), &(adapt_count)) - -#endif /* !__ASSEMBLER__ */ - -#endif /* lowlevellock.h */ diff --git a/sysdeps/unix/sysv/linux/i386/lxstat.c b/sysdeps/unix/sysv/linux/i386/lxstat.c deleted file mode 100644 index fc9d2f234a..0000000000 --- a/sysdeps/unix/sysv/linux/i386/lxstat.c +++ /dev/null @@ -1,62 +0,0 @@ -/* lxstat using old-style Unix lstat system call. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ho hum, if xstat == xstat64 we must get rid of the prototype or gcc - will complain since they don't strictly match. */ -#define __lxstat64 __lxstat64_disable - -#include -#include -#include -#include - -#include -#include - -#include - - -/* Get information about the file NAME in BUF. */ -int -__lxstat (int vers, const char *name, struct stat *buf) -{ - int result; - - if (vers == _STAT_VER_KERNEL) - return INLINE_SYSCALL (lstat, 2, name, buf); - - { - struct stat64 buf64; - - INTERNAL_SYSCALL_DECL (err); - result = INTERNAL_SYSCALL (lstat64, err, 2, name, &buf64); - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err))) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (result, - err)); - else - return __xstat32_conv (vers, &buf64, buf); - } -} - -hidden_def (__lxstat) -weak_alias (__lxstat, _lxstat); -#if XSTAT_IS_XSTAT64 -#undef __lxstat64 -strong_alias (__lxstat, __lxstat64); -hidden_ver (__lxstat, __lxstat64) -#endif diff --git a/sysdeps/unix/sysv/linux/i386/makecontext.S b/sysdeps/unix/sysv/linux/i386/makecontext.S deleted file mode 100644 index 6d396dd328..0000000000 --- a/sysdeps/unix/sysv/linux/i386/makecontext.S +++ /dev/null @@ -1,120 +0,0 @@ -/* Create new context. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - - -ENTRY(__makecontext) - movl 4(%esp), %eax - - /* Load the address of the function we are supposed to run. */ - movl 8(%esp), %ecx - - /* Compute the address of the stack. The information comes from - to us_stack element. */ - movl oSS_SP(%eax), %edx - movl %ecx, oEIP(%eax) - addl oSS_SIZE(%eax), %edx - - /* Remember the number of parameters for the exit handler since - it has to remove them. We store the number in the EBX register - which the function we will call must preserve. */ - movl 12(%esp), %ecx - movl %ecx, oEBX(%eax) - - /* Make room on the new stack for the parameters. - Room for the arguments, return address (== L(exitcode)) and - oLINK pointer is needed. One of the pointer sizes is subtracted - after aligning the stack. */ - negl %ecx - leal -4(%edx,%ecx,4), %edx - negl %ecx - - /* Align the stack. */ - andl $0xfffffff0, %edx - subl $4, %edx - - /* Store the future stack pointer. */ - movl %edx, oESP(%eax) - - /* Put the next context on the new stack (from the uc_link - element). */ - movl oLINK(%eax), %eax - movl %eax, 4(%edx,%ecx,4) - - /* Copy all the parameters. */ - jecxz 2f -1: movl 12(%esp,%ecx,4), %eax - movl %eax, (%edx,%ecx,4) - decl %ecx - jnz 1b -2: - - /* If the function we call returns we must continue with the - context which is given in the uc_link element. To do this - set the return address for the function the user provides - to a little bit of helper code which does the magic (see - below). */ -#ifdef PIC - call 1f - cfi_adjust_cfa_offset (4) -1: popl %ecx - cfi_adjust_cfa_offset (-4) - addl $L(exitcode)-1b, %ecx - movl %ecx, (%edx) -#else - movl $L(exitcode), (%edx) -#endif - /* We need to terminate the FDE here instead of after ret because - the unwinder looks at ra-1 for unwind information. */ - cfi_endproc - - /* 'makecontext' returns no value. */ - ret - - /* This is the helper code which gets called if a function which - is registered with 'makecontext' returns. In this case we - have to install the context listed in the uc_link element of - the context 'makecontext' manipulated at the time of the - 'makecontext' call. If the pointer is NULL the process must - terminate. */ -L(exitcode): - /* This removes the parameters passed to the function given to - 'makecontext' from the stack. EBX contains the number of - parameters (see above). */ - leal (%esp,%ebx,4), %esp - - cmpl $0, (%esp) /* Check the next context. */ - je 2f /* If it is zero exit. */ - - call HIDDEN_JUMPTARGET(__setcontext) - /* If this returns (which can happen if the syscall fails) we'll - exit the program with the return error value (-1). */ - - movl %eax, (%esp) -2: call HIDDEN_JUMPTARGET(exit) - /* The 'exit' call should never return. In case it does cause - the process to terminate. */ - hlt - cfi_startproc -END(__makecontext) - -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/i386/olddirent.h b/sysdeps/unix/sysv/linux/i386/olddirent.h deleted file mode 100644 index 413f78d108..0000000000 --- a/sysdeps/unix/sysv/linux/i386/olddirent.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __OLD_DIRENT_H -#define __OLD_DIRENT_H 1 - -#include - -struct __old_dirent64 - { - __ino_t d_ino; - __off64_t d_off; - unsigned short int d_reclen; - unsigned char d_type; - char d_name[256]; /* We must not include limits.h! */ - }; - -/* Now define the internal interfaces. */ -extern struct __old_dirent64 *__old_readdir64 (DIR *__dirp); -extern int __old_readdir64_r (DIR *__dirp, struct __old_dirent64 *__entry, - struct __old_dirent64 **__result); -extern __ssize_t __old_getdents64 (int __fd, char *__buf, size_t __nbytes) - internal_function; -int __old_scandir64 (const char * __dir, - struct __old_dirent64 *** __namelist, - int (*__selector) (const struct __old_dirent64 *), - int (*__cmp) (const struct __old_dirent64 **, - const struct __old_dirent64 **)); - -#endif diff --git a/sysdeps/unix/sysv/linux/i386/profil-counter.h b/sysdeps/unix/sysv/linux/i386/profil-counter.h deleted file mode 100644 index 3e7f75d525..0000000000 --- a/sysdeps/unix/sysv/linux/i386/profil-counter.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Low-level statistical profiling support function. Linux/i386 version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -static void -__profil_counter (int signo, const SIGCONTEXT scp) -{ - profil_count ((void *) GET_PC (scp)); - - /* This is a hack to prevent the compiler from implementing the - above function call as a sibcall. The sibcall would overwrite - the signal context. */ - asm volatile (""); -} diff --git a/sysdeps/unix/sysv/linux/i386/putmsg.c b/sysdeps/unix/sysv/linux/i386/putmsg.c deleted file mode 100644 index 7270eb07ab..0000000000 --- a/sysdeps/unix/sysv/linux/i386/putmsg.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -#ifdef __NR_putpmsg -int -putmsg (int fildes, const struct strbuf *ctlptr, const struct strbuf *dataptr, - int flags) -{ - return INLINE_SYSCALL (putpmsg, 5, fildes, ctlptr, dataptr, -1, flags); -} -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/i386/readdir64.c b/sysdeps/unix/sysv/linux/i386/readdir64.c deleted file mode 100644 index f80b6a7ba2..0000000000 --- a/sysdeps/unix/sysv/linux/i386/readdir64.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __READDIR __readdir64 -#define __GETDENTS __getdents64 -#define DIRENT_TYPE struct dirent64 - -#include - -#include - -#undef __READDIR -#undef __GETDENTS -#undef DIRENT_TYPE - -versioned_symbol (libc, __readdir64, readdir64, GLIBC_2_2); - -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) - -#include - -#define __READDIR attribute_compat_text_section __old_readdir64 -#define __GETDENTS __old_getdents64 -#define DIRENT_TYPE struct __old_dirent64 - -#include - -compat_symbol (libc, __old_readdir64, readdir64, GLIBC_2_1); -#endif diff --git a/sysdeps/unix/sysv/linux/i386/readdir64_r.c b/sysdeps/unix/sysv/linux/i386/readdir64_r.c deleted file mode 100644 index 344fd53d02..0000000000 --- a/sysdeps/unix/sysv/linux/i386/readdir64_r.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __READDIR_R __readdir64_r -#define __GETDENTS __getdents64 -#define DIRENT_TYPE struct dirent64 - -#include - -#undef __READDIR_R -#undef __GETDENTS -#undef DIRENT_TYPE - -#include - -versioned_symbol (libc, __readdir64_r, readdir64_r, GLIBC_2_2); - -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) - -#include - -#define __READDIR_R attribute_compat_text_section __old_readdir64_r -#define __GETDENTS __old_getdents64 -#define DIRENT_TYPE struct __old_dirent64 - -#include - -compat_symbol (libc, __old_readdir64_r, readdir64_r, GLIBC_2_1); -#endif diff --git a/sysdeps/unix/sysv/linux/i386/readelflib.c b/sysdeps/unix/sysv/linux/i386/readelflib.c deleted file mode 100644 index 5312007eb1..0000000000 --- a/sysdeps/unix/sysv/linux/i386/readelflib.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1999 and - Jakub Jelinek , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -int process_elf32_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); -int process_elf64_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); - -/* Returns 0 if everything is ok, != 0 in case of error. */ -int -process_elf_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, void *file_contents, - size_t file_length) -{ - ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; - int ret, file_flag = 0; - - switch (elf_header->e_machine) - { - case EM_X86_64: - if (elf_header->e_ident[EI_CLASS] == ELFCLASS64) - /* X86-64 64bit libraries are always libc.so.6+. */ - file_flag = FLAG_X8664_LIB64|FLAG_ELF_LIBC6; - else - /* X32 libraries are always libc.so.6+. */ - file_flag = FLAG_X8664_LIBX32|FLAG_ELF_LIBC6; - break; -#ifndef SKIP_EM_IA_64 - case EM_IA_64: - if (elf_header->e_ident[EI_CLASS] == ELFCLASS64) - { - /* IA64 64bit libraries are always libc.so.6+. */ - file_flag = FLAG_IA64_LIB64|FLAG_ELF_LIBC6; - break; - } - goto failed; -#endif - case EM_386: - if (elf_header->e_ident[EI_CLASS] == ELFCLASS32) - break; - /* Fall through. */ - default: -#ifndef SKIP_EM_IA_64 -failed: -#endif - error (0, 0, _("%s is for unknown machine %d.\n"), - file_name, elf_header->e_machine); - return 1; - } - - if (elf_header->e_ident[EI_CLASS] == ELFCLASS32) - ret = process_elf32_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - else - ret = process_elf64_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - - if (!ret && file_flag) - *flag = file_flag; - - return ret; -} - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf32_file -#define __ELF_NATIVE_CLASS 32 -#include "elf/readelflib.c" - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf64_file -#define __ELF_NATIVE_CLASS 64 -#include "elf/readelflib.c" diff --git a/sysdeps/unix/sysv/linux/i386/register-dump.h b/sysdeps/unix/sysv/linux/i386/register-dump.h deleted file mode 100644 index 0ca0866d47..0000000000 --- a/sysdeps/unix/sysv/linux/i386/register-dump.h +++ /dev/null @@ -1,255 +0,0 @@ -/* Dump registers. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include <_itoa.h> - -/* We will print the register dump in this format: - - EAX: XXXXXXXX EBX: XXXXXXXX ECX: XXXXXXXX EDX: XXXXXXXX - ESI: XXXXXXXX EDI: XXXXXXXX EBP: XXXXXXXX ESP: XXXXXXXX - - EIP: XXXXXXXX EFLAGS: XXXXXXXX - - CS: XXXX DS: XXXX ES: XXXX FS: XXXX GS: XXXX SS: XXXX - - Trap: XXXXXXXX Error: XXXXXXXX OldMask: XXXXXXXX - ESP/SIGNAL: XXXXXXXX CR2: XXXXXXXX - - FPUCW: XXXXXXXX FPUSW: XXXXXXXX TAG: XXXXXXXX - IPOFF: XXXXXXXX CSSEL: XXXX DATAOFF: XXXXXXXX DATASEL: XXXX - - ST(0) XXXX XXXXXXXXXXXXXXXX ST(1) XXXX XXXXXXXXXXXXXXXX - ST(2) XXXX XXXXXXXXXXXXXXXX ST(3) XXXX XXXXXXXXXXXXXXXX - ST(4) XXXX XXXXXXXXXXXXXXXX ST(5) XXXX XXXXXXXXXXXXXXXX - ST(6) XXXX XXXXXXXXXXXXXXXX ST(7) XXXX XXXXXXXXXXXXXXXX - - */ - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -register_dump (int fd, struct sigcontext *ctx) -{ - char regs[21][8]; - char fpregs[31][8]; - struct iovec iov[97]; - size_t nr = 0; - -#define ADD_STRING(str) \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr -#define ADD_MEM(str, len) \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr - - /* Generate strings of register contents. */ - hexvalue (ctx->eax, regs[0], 8); - hexvalue (ctx->ebx, regs[1], 8); - hexvalue (ctx->ecx, regs[2], 8); - hexvalue (ctx->edx, regs[3], 8); - hexvalue (ctx->esi, regs[4], 8); - hexvalue (ctx->edi, regs[5], 8); - hexvalue (ctx->ebp, regs[6], 8); - hexvalue (ctx->esp, regs[7], 8); - hexvalue (ctx->eip, regs[8], 8); - hexvalue (ctx->eflags, regs[9], 8); - hexvalue (ctx->cs, regs[10], 4); - hexvalue (ctx->ds, regs[11], 4); - hexvalue (ctx->es, regs[12], 4); - hexvalue (ctx->fs, regs[13], 4); - hexvalue (ctx->gs, regs[14], 4); - hexvalue (ctx->ss, regs[15], 4); - hexvalue (ctx->trapno, regs[16], 8); - hexvalue (ctx->err, regs[17], 8); - hexvalue (ctx->oldmask, regs[18], 8); - hexvalue (ctx->esp_at_signal, regs[19], 8); - hexvalue (ctx->cr2, regs[20], 8); - - /* Generate the output. */ - ADD_STRING ("Register dump:\n\n EAX: "); - ADD_MEM (regs[0], 8); - ADD_STRING (" EBX: "); - ADD_MEM (regs[1], 8); - ADD_STRING (" ECX: "); - ADD_MEM (regs[2], 8); - ADD_STRING (" EDX: "); - ADD_MEM (regs[3], 8); - ADD_STRING ("\n ESI: "); - ADD_MEM (regs[4], 8); - ADD_STRING (" EDI: "); - ADD_MEM (regs[5], 8); - ADD_STRING (" EBP: "); - ADD_MEM (regs[6], 8); - ADD_STRING (" ESP: "); - ADD_MEM (regs[7], 8); - ADD_STRING ("\n\n EIP: "); - ADD_MEM (regs[8], 8); - ADD_STRING (" EFLAGS: "); - ADD_MEM (regs[9], 8); - ADD_STRING ("\n\n CS: "); - ADD_MEM (regs[10], 4); - ADD_STRING (" DS: "); - ADD_MEM (regs[11], 4); - ADD_STRING (" ES: "); - ADD_MEM (regs[12], 4); - ADD_STRING (" FS: "); - ADD_MEM (regs[13], 4); - ADD_STRING (" GS: "); - ADD_MEM (regs[14], 4); - ADD_STRING (" SS: "); - ADD_MEM (regs[15], 4); - ADD_STRING ("\n\n Trap: "); - ADD_MEM (regs[16], 8); - ADD_STRING (" Error: "); - ADD_MEM (regs[17], 8); - ADD_STRING (" OldMask: "); - ADD_MEM (regs[18], 8); - ADD_STRING ("\n ESP/signal: "); - ADD_MEM (regs[19], 8); - ADD_STRING (" CR2: "); - ADD_MEM (regs[20], 8); - - if (ctx->fpstate != NULL) - { - - /* Generate output for the FPU control/status registers. */ - hexvalue (ctx->fpstate->cw, fpregs[0], 8); - hexvalue (ctx->fpstate->sw, fpregs[1], 8); - hexvalue (ctx->fpstate->tag, fpregs[2], 8); - hexvalue (ctx->fpstate->ipoff, fpregs[3], 8); - hexvalue (ctx->fpstate->cssel, fpregs[4], 4); - hexvalue (ctx->fpstate->dataoff, fpregs[5], 8); - hexvalue (ctx->fpstate->datasel, fpregs[6], 4); - - ADD_STRING ("\n\n FPUCW: "); - ADD_MEM (fpregs[0], 8); - ADD_STRING (" FPUSW: "); - ADD_MEM (fpregs[1], 8); - ADD_STRING (" TAG: "); - ADD_MEM (fpregs[2], 8); - ADD_STRING ("\n IPOFF: "); - ADD_MEM (fpregs[3], 8); - ADD_STRING (" CSSEL: "); - ADD_MEM (fpregs[4], 4); - ADD_STRING (" DATAOFF: "); - ADD_MEM (fpregs[5], 8); - ADD_STRING (" DATASEL: "); - ADD_MEM (fpregs[6], 4); - - /* Now the real FPU registers. */ - hexvalue (ctx->fpstate->_st[0].exponent, fpregs[7], 8); - hexvalue (ctx->fpstate->_st[0].significand[3] << 16 - | ctx->fpstate->_st[0].significand[2], fpregs[8], 8); - hexvalue (ctx->fpstate->_st[0].significand[1] << 16 - | ctx->fpstate->_st[0].significand[0], fpregs[9], 8); - hexvalue (ctx->fpstate->_st[1].exponent, fpregs[10], 8); - hexvalue (ctx->fpstate->_st[1].significand[3] << 16 - | ctx->fpstate->_st[1].significand[2], fpregs[11], 8); - hexvalue (ctx->fpstate->_st[1].significand[1] << 16 - | ctx->fpstate->_st[1].significand[0], fpregs[12], 8); - hexvalue (ctx->fpstate->_st[2].exponent, fpregs[13], 8); - hexvalue (ctx->fpstate->_st[2].significand[3] << 16 - | ctx->fpstate->_st[2].significand[2], fpregs[14], 8); - hexvalue (ctx->fpstate->_st[2].significand[1] << 16 - | ctx->fpstate->_st[2].significand[0], fpregs[15], 8); - hexvalue (ctx->fpstate->_st[3].exponent, fpregs[16], 8); - hexvalue (ctx->fpstate->_st[3].significand[3] << 16 - | ctx->fpstate->_st[3].significand[2], fpregs[17], 8); - hexvalue (ctx->fpstate->_st[3].significand[1] << 16 - | ctx->fpstate->_st[3].significand[0], fpregs[18], 8); - hexvalue (ctx->fpstate->_st[4].exponent, fpregs[19], 8); - hexvalue (ctx->fpstate->_st[4].significand[3] << 16 - | ctx->fpstate->_st[4].significand[2], fpregs[20], 8); - hexvalue (ctx->fpstate->_st[4].significand[1] << 16 - | ctx->fpstate->_st[4].significand[0], fpregs[21], 8); - hexvalue (ctx->fpstate->_st[5].exponent, fpregs[22], 8); - hexvalue (ctx->fpstate->_st[5].significand[3] << 16 - | ctx->fpstate->_st[5].significand[2], fpregs[23], 8); - hexvalue (ctx->fpstate->_st[5].significand[1] << 16 - | ctx->fpstate->_st[5].significand[0], fpregs[24], 8); - hexvalue (ctx->fpstate->_st[6].exponent, fpregs[25], 8); - hexvalue (ctx->fpstate->_st[6].significand[3] << 16 - | ctx->fpstate->_st[6].significand[2], fpregs[26], 8); - hexvalue (ctx->fpstate->_st[6].significand[1] << 16 - | ctx->fpstate->_st[6].significand[0], fpregs[27], 8); - hexvalue (ctx->fpstate->_st[7].exponent, fpregs[28], 8); - hexvalue (ctx->fpstate->_st[7].significand[3] << 16 - | ctx->fpstate->_st[7].significand[2], fpregs[29], 8); - hexvalue (ctx->fpstate->_st[7].significand[1] << 16 - | ctx->fpstate->_st[7].significand[0], fpregs[30], 8); - - ADD_STRING ("\n\n ST(0) "); - ADD_MEM (fpregs[7], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[8], 8); - ADD_MEM (fpregs[9], 8); - ADD_STRING (" ST(1) "); - ADD_MEM (fpregs[10], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[11], 8); - ADD_MEM (fpregs[12], 8); - ADD_STRING ("\n ST(2) "); - ADD_MEM (fpregs[13], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[14], 8); - ADD_MEM (fpregs[15], 8); - ADD_STRING (" ST(3) "); - ADD_MEM (fpregs[16], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[17], 8); - ADD_MEM (fpregs[18], 8); - ADD_STRING ("\n ST(4) "); - ADD_MEM (fpregs[19], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[20], 8); - ADD_MEM (fpregs[21], 8); - ADD_STRING (" ST(5) "); - ADD_MEM (fpregs[22], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[23], 8); - ADD_MEM (fpregs[24], 8); - ADD_STRING ("\n ST(6) "); - ADD_MEM (fpregs[25], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[26], 8); - ADD_MEM (fpregs[27], 8); - ADD_STRING (" ST(7) "); - ADD_MEM (fpregs[28], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[29], 8); - ADD_MEM (fpregs[30], 8); - } - - ADD_STRING ("\n"); - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, &ctx) diff --git a/sysdeps/unix/sysv/linux/i386/scandir64.c b/sysdeps/unix/sysv/linux/i386/scandir64.c deleted file mode 100644 index 5089a2f1a5..0000000000 --- a/sysdeps/unix/sysv/linux/i386/scandir64.c +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define SCANDIR __scandir64 -#define SCANDIR_TAIL __scandir64_tail -#define DIRENT_TYPE struct dirent64 - -#include - -#undef SCANDIR -#undef SCANDIR_TAIL -#undef DIRENT_TYPE - -#include - -versioned_symbol (libc, __scandir64, scandir64, GLIBC_2_2); - -#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_2) -# include -# include -# include "olddirent.h" - -int -__old_scandir64 (const char *dir, struct __old_dirent64 ***namelist, - int (*select) (const struct __old_dirent64 *), - int (*cmp) (const struct __old_dirent64 **, - const struct __old_dirent64 **)) -{ - DIR *dp = __opendir (dir); - struct __old_dirent64 **v = NULL; - size_t vsize = 0; - struct scandir_cancel_struct c; - struct __old_dirent64 *d; - int save; - - if (dp == NULL) - return -1; - - save = errno; - __set_errno (0); - - c.dp = dp; - c.v = NULL; - c.cnt = 0; - __libc_cleanup_push (__scandir_cancel_handler, &c); - - while ((d = __old_readdir64 (dp)) != NULL) - { - int use_it = select == NULL; - - if (! use_it) - { - use_it = select (d); - /* The select function might have changed errno. It was - zero before and it need to be again to make the latter - tests work. */ - __set_errno (0); - } - - if (use_it) - { - struct __old_dirent64 *vnew; - size_t dsize; - - /* Ignore errors from select or readdir */ - __set_errno (0); - - if (__glibc_unlikely (c.cnt == vsize)) - { - struct __old_dirent64 **new; - if (vsize == 0) - vsize = 10; - else - vsize *= 2; - new = (struct __old_dirent64 **) realloc (v, - vsize * sizeof (*v)); - if (new == NULL) - break; - v = new; - c.v = (void *) v; - } - - dsize = &d->d_name[_D_ALLOC_NAMLEN (d)] - (char *) d; - vnew = (struct __old_dirent64 *) malloc (dsize); - if (vnew == NULL) - break; - - v[c.cnt++] = (struct __old_dirent64 *) memcpy (vnew, d, dsize); - } - } - - if (__builtin_expect (errno, 0) != 0) - { - save = errno; - - while (c.cnt > 0) - free (v[--c.cnt]); - free (v); - c.cnt = -1; - } - else - { - /* Sort the list if we have a comparison function to sort with. */ - if (cmp != NULL) - qsort (v, c.cnt, sizeof (*v), - (int (*) (const void *, const void *)) cmp); - - *namelist = v; - } - - __libc_cleanup_pop (0); - - (void) __closedir (dp); - __set_errno (save); - - return c.cnt; -} -compat_symbol (libc, __old_scandir64, scandir64, GLIBC_2_1); - -#endif diff --git a/sysdeps/unix/sysv/linux/i386/setcontext.S b/sysdeps/unix/sysv/linux/i386/setcontext.S deleted file mode 100644 index c6fa618a01..0000000000 --- a/sysdeps/unix/sysv/linux/i386/setcontext.S +++ /dev/null @@ -1,96 +0,0 @@ -/* Install given context. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - - -ENTRY(__setcontext) - /* Load address of the context data structure. */ - movl 4(%esp), %eax - - /* Get the current signal mask. Note that we preserve EBX in case - the system call fails and we return from the function with an - error. */ - pushl %ebx - cfi_adjust_cfa_offset (4) - xorl %edx, %edx - leal oSIGMASK(%eax), %ecx - movl $SIG_SETMASK, %ebx - cfi_rel_offset (ebx, 0) - movl $__NR_sigprocmask, %eax - ENTER_KERNEL - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - cmpl $-4095, %eax /* Check %eax for error. */ - jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ - - /* EAX was modified, reload it. */ - movl 4(%esp), %eax - - /* Restore the floating-point context. Not the registers, only the - rest. */ - movl oFPREGS(%eax), %ecx - fldenv (%ecx) - - /* Restore the FS segment register. We don't touch the GS register - since it is used for threads. */ - movl oFS(%eax), %ecx - movw %cx, %fs - - /* Fetch the address to return to. */ - movl oEIP(%eax), %ecx - - /* Load the new stack pointer. */ - cfi_def_cfa (eax, 0) - cfi_offset (edi, oEDI) - cfi_offset (esi, oESI) - cfi_offset (ebp, oEBP) - cfi_offset (ebx, oEBX) - cfi_offset (edx, oEDX) - cfi_offset (ecx, oECX) - movl oESP(%eax), %esp - - /* Push the return address on the new stack so we can return there. */ - pushl %ecx - - /* Load the values of all the 32-bit registers (except ESP). - Since we are loading from EAX, it must be last. */ - movl oEDI(%eax), %edi - movl oESI(%eax), %esi - movl oEBP(%eax), %ebp - movl oEBX(%eax), %ebx - movl oEDX(%eax), %edx - movl oECX(%eax), %ecx - movl oEAX(%eax), %eax - - /* End FDE here, we fall into another context. */ - cfi_endproc - cfi_startproc - - /* The following 'ret' will pop the address of the code and jump - to it. */ - - ret -PSEUDO_END(__setcontext) -libc_hidden_def (__setcontext) - -weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/i386/shlib-versions b/sysdeps/unix/sysv/linux/i386/shlib-versions deleted file mode 100644 index ca5d15b1df..0000000000 --- a/sysdeps/unix/sysv/linux/i386/shlib-versions +++ /dev/null @@ -1 +0,0 @@ -ld=ld-linux.so.2 diff --git a/sysdeps/unix/sysv/linux/i386/sigaction.c b/sysdeps/unix/sysv/linux/i386/sigaction.c deleted file mode 100644 index 0cc9d67ad9..0000000000 --- a/sysdeps/unix/sysv/linux/i386/sigaction.c +++ /dev/null @@ -1,129 +0,0 @@ -/* POSIX.1 `sigaction' call for Linux/i386. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#include -#include -#include - -/* The difference here is that the sigaction structure used in the - kernel is not the same as we use in the libc. Therefore we must - translate it here. */ -#include - -/* We do not globally define the SA_RESTORER flag so do it here. */ -#define SA_RESTORER 0x04000000 - - -/* Using the hidden attribute here does not change the code but it - helps to avoid warnings. */ -#ifdef __NR_rt_sigaction -extern void restore_rt (void) asm ("__restore_rt") attribute_hidden; -#endif -extern void restore (void) asm ("__restore") attribute_hidden; - - -/* If ACT is not NULL, change the action for SIG to *ACT. - If OACT is not NULL, put the old action for SIG in *OACT. */ -int -__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) -{ - int result; - - struct kernel_sigaction kact, koact; - - if (act) - { - kact.k_sa_handler = act->sa_handler; - kact.sa_flags = act->sa_flags; - memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t)); - - if (GLRO(dl_sysinfo_dso) == NULL) - { - kact.sa_flags |= SA_RESTORER; - - kact.sa_restorer = ((act->sa_flags & SA_SIGINFO) - ? &restore_rt : &restore); - } - } - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - INTERNAL_SYSCALL_DECL (err); - result = INTERNAL_SYSCALL (rt_sigaction, err, 4, - sig, act ? &kact : NULL, - oact ? &koact : NULL, _NSIG / 8); - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err))) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (result, - err)); - else if (oact && result >= 0) - { - oact->sa_handler = koact.k_sa_handler; - memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t)); - oact->sa_flags = koact.sa_flags; - oact->sa_restorer = koact.sa_restorer; - } - return result; -} -libc_hidden_def (__libc_sigaction) - -#include - -/* NOTE: Please think twice before making any changes to the bits of - code below. GDB needs some intimate knowledge about it to - recognize them as signal trampolines, and make backtraces through - signal handlers work right. Important are both the names - (__restore and __restore_rt) and the exact instruction sequence. - If you ever feel the need to make any changes, please notify the - appropriate GDB maintainer. */ - -#define RESTORE(name, syscall) RESTORE2 (name, syscall) -#define RESTORE2(name, syscall) \ -asm \ - ( \ - ".text\n" \ - " .align 16\n" \ - "__" #name ":\n" \ - " movl $" #syscall ", %eax\n" \ - " int $0x80" \ - ); - -#ifdef __NR_rt_sigaction -/* The return code for realtime-signals. */ -RESTORE (restore_rt, __NR_rt_sigreturn) -#endif - -/* For the boring old signals. */ -#undef RESTORE2 -#define RESTORE2(name, syscall) \ -asm \ - ( \ - ".text\n" \ - " .align 8\n" \ - "__" #name ":\n" \ - " popl %eax\n" \ - " movl $" #syscall ", %eax\n" \ - " int $0x80" \ - ); - -RESTORE (restore, __NR_sigreturn) diff --git a/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h b/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h deleted file mode 100644 index 7e2764eb65..0000000000 --- a/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define SIGCONTEXT struct sigcontext -#define SIGCONTEXT_EXTRA_ARGS -#define GET_PC(ctx) ((void *) ctx.eip) -#define GET_FRAME(ctx) ((void *) ctx.ebp) -#define GET_STACK(ctx) ((void *) ctx.esp_at_signal) -#define CALL_SIGHANDLER(handler, signo, ctx) \ -do { \ - int __tmp1, __tmp2, __tmp3, __tmp4; \ - __asm __volatile ("movl\t%%esp, %%edi\n\t" \ - "andl\t$-16, %%esp\n\t" \ - "subl\t%8, %%esp\n\t" \ - "movl\t%%edi, %c8-4(%%esp)\n\t" \ - "movl\t%1, 0(%%esp)\n\t" \ - "leal\t4(%%esp), %%edi\n\t" \ - "cld\n\t" \ - "rep\tmovsl\n\t" \ - "call\t*%0\n\t" \ - "cld\n\t" \ - "movl\t%9, %%ecx\n\t" \ - "subl\t%%edi, %%esi\n\t" \ - "leal\t4(%%esp,%%esi,1), %%edi\n\t" \ - "leal\t4(%%esp), %%esi\n\t" \ - "rep\tmovsl\n\t" \ - "movl\t%c8-4(%%esp), %%esp\n\t" \ - : "=a" (__tmp1), "=d" (__tmp2), "=S" (__tmp3), \ - "=c" (__tmp4) \ - : "0" (handler), "1" (signo), "2" (&ctx), \ - "3" (sizeof (struct sigcontext) / 4), \ - "n" ((sizeof (struct sigcontext) + 19) & ~15), \ - "i" (sizeof (struct sigcontext) / 4) \ - : "cc", "edi"); \ -} while (0) diff --git a/sysdeps/unix/sysv/linux/i386/smp.h b/sysdeps/unix/sysv/linux/i386/smp.h deleted file mode 100644 index 7d1a7f201b..0000000000 --- a/sysdeps/unix/sysv/linux/i386/smp.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Determine whether the host has multiple processors. Linux version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include - -/* Test whether the machine has more than one processor. This is not the - best test but good enough. More complicated tests would require `malloc' - which is not available at that time. */ -static inline int -is_smp_system (void) -{ - union - { - struct utsname uts; - char buf[512]; - } u; - char *cp; - - /* Try reading the number using `sysctl' first. */ - if (uname (&u.uts) == 0) - cp = u.uts.version; - else - { - /* This was not successful. Now try reading the /proc filesystem. */ - int fd = open_not_cancel_2 ("/proc/sys/kernel/version", O_RDONLY); - if (__builtin_expect (fd, 0) == -1 - || read_not_cancel (fd, u.buf, sizeof (u.buf)) <= 0) - /* This also didn't work. We give up and say it's a UP machine. */ - u.buf[0] = '\0'; - - close_not_cancel_no_status (fd); - cp = u.buf; - } - - return strstr (cp, "SMP") != NULL; -} diff --git a/sysdeps/unix/sysv/linux/i386/swapcontext.S b/sysdeps/unix/sysv/linux/i386/swapcontext.S deleted file mode 100644 index cfdb1f0ad1..0000000000 --- a/sysdeps/unix/sysv/linux/i386/swapcontext.S +++ /dev/null @@ -1,109 +0,0 @@ -/* Save current context and install the given one. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - - -ENTRY(__swapcontext) - /* Load address of the context data structure we save in. */ - movl 4(%esp), %eax - - /* Return value of swapcontext. EAX is the only register whose - value is not preserved. */ - movl $0, oEAX(%eax) - - /* Save the 32-bit register values and the return address. */ - movl %ecx, oECX(%eax) - movl %edx, oEDX(%eax) - movl %edi, oEDI(%eax) - movl %esi, oESI(%eax) - movl %ebp, oEBP(%eax) - movl (%esp), %ecx - movl %ecx, oEIP(%eax) - leal 4(%esp), %ecx - movl %ecx, oESP(%eax) - movl %ebx, oEBX(%eax) - - /* Save the FS segment register. */ - xorl %edx, %edx - movw %fs, %dx - movl %edx, oFS(%eax) - - /* We have separate floating-point register content memory on the - stack. We use the __fpregs_mem block in the context. Set the - links up correctly. */ - leal oFPREGSMEM(%eax), %ecx - movl %ecx, oFPREGS(%eax) - /* Save the floating-point context. */ - fnstenv (%ecx) - - /* Load address of the context data structure we have to load. */ - movl 8(%esp), %ecx - - /* Save the current signal mask and install the new one. */ - pushl %ebx - leal oSIGMASK(%eax), %edx - leal oSIGMASK(%ecx), %ecx - movl $SIG_SETMASK, %ebx - movl $__NR_sigprocmask, %eax - ENTER_KERNEL - popl %ebx - cmpl $-4095, %eax /* Check %eax for error. */ - jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ - - /* EAX was modified, reload it. */ - movl 8(%esp), %eax - - /* Restore the floating-point context. Not the registers, only the - rest. */ - movl oFPREGS(%eax), %ecx - fldenv (%ecx) - - /* Restore the FS segment register. We don't touch the GS register - since it is used for threads. */ - movl oFS(%eax), %edx - movw %dx, %fs - - /* Fetch the address to return to. */ - movl oEIP(%eax), %ecx - - /* Load the new stack pointer. */ - movl oESP(%eax), %esp - - /* Push the return address on the new stack so we can return there. */ - pushl %ecx - - /* Load the values of all the 32-bit registers (except ESP). - Since we are loading from EAX, it must be last. */ - movl oEDI(%eax), %edi - movl oESI(%eax), %esi - movl oEBP(%eax), %ebp - movl oEBX(%eax), %ebx - movl oEDX(%eax), %edx - movl oECX(%eax), %ecx - movl oEAX(%eax), %eax - - /* The following 'ret' will pop the address of the code and jump - to it. */ - ret -PSEUDO_END(__swapcontext) - -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/i386/syscall.S b/sysdeps/unix/sysv/linux/i386/syscall.S deleted file mode 100644 index 9d2f176ad4..0000000000 --- a/sysdeps/unix/sysv/linux/i386/syscall.S +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Please consult the file sysdeps/unix/sysv/linux/i386/sysdep.h for - more information about the value -4095 used below.*/ - - .text -ENTRY (syscall) - - PUSHARGS_6 /* Save register contents. */ - _DOARGS_6(44) /* Load arguments. */ - movl 20(%esp), %eax /* Load syscall number into %eax. */ - ENTER_KERNEL /* Do the system call. */ - POPARGS_6 /* Restore register contents. */ - cmpl $-4095, %eax /* Check %eax for error. */ - jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ - ret /* Return to caller. */ - -PSEUDO_END (syscall) diff --git a/sysdeps/unix/sysv/linux/i386/syscalls.list b/sysdeps/unix/sysv/linux/i386/syscalls.list deleted file mode 100644 index 58020dfae5..0000000000 --- a/sysdeps/unix/sysv/linux/i386/syscalls.list +++ /dev/null @@ -1,26 +0,0 @@ -# File name Caller Syscall name Args Strong name Weak names - -chown - chown32 i:sii __chown chown@@GLIBC_2.1 -lchown - lchown32 i:sii __lchown lchown@@GLIBC_2.0 chown@GLIBC_2.0 -fchown - fchown32 i:iii __fchown fchown - -getegid - getegid32 Ei: __getegid getegid -geteuid - geteuid32 Ei: __geteuid geteuid -getgid - getgid32 Ei: __getgid getgid -getuid - getuid32 Ei: __getuid getuid -getresgid - getresgid32 i:ppp __getresgid getresgid -getresuid - getresuid32 i:ppp __getresuid getresuid -getgroups - getgroups32 i:ip __getgroups getgroups - -setfsgid - setfsgid32 Ei:i setfsgid -setfsuid - setfsuid32 Ei:i setfsuid - -modify_ldt EXTRA modify_ldt i:ipi __modify_ldt modify_ldt -vm86old EXTRA vm86old i:p __vm86old vm86@GLIBC_2.0 -vm86 - vm86 i:ip __vm86 vm86@@GLIBC_2.3.4 - -prlimit64 EXTRA prlimit64 i:iipp prlimit64 - -fanotify_mark EXTRA fanotify_mark i:iiiiis fanotify_mark - -personality EXTRA personality Ei:i __personality personality diff --git a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h deleted file mode 100644 index ebf601918f..0000000000 --- a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h +++ /dev/null @@ -1,153 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - cmpl $0, %gs:MULTIPLE_THREADS_OFFSET; \ - jne L(pseudo_cancel); \ - .type __##syscall_name##_nocancel,@function; \ - .globl __##syscall_name##_nocancel; \ - __##syscall_name##_nocancel: \ - DO_CALL (syscall_name, args); \ - cmpl $-4095, %eax; \ - jae SYSCALL_ERROR_LABEL; \ - ret; \ - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ - L(pseudo_cancel): \ - CENABLE \ - SAVE_OLDTYPE_##args \ - PUSHCARGS_##args \ - DOCARGS_##args \ - movl $SYS_ify (syscall_name), %eax; \ - ENTER_KERNEL; \ - POPCARGS_##args; \ - POPSTATE_##args \ - cmpl $-4095, %eax; \ - jae SYSCALL_ERROR_LABEL - -# define SAVE_OLDTYPE_0 movl %eax, %ecx; -# define SAVE_OLDTYPE_1 SAVE_OLDTYPE_0 -# define SAVE_OLDTYPE_2 pushl %eax; cfi_adjust_cfa_offset (4); -# define SAVE_OLDTYPE_3 SAVE_OLDTYPE_2 -# define SAVE_OLDTYPE_4 SAVE_OLDTYPE_2 -# define SAVE_OLDTYPE_5 SAVE_OLDTYPE_2 -# define SAVE_OLDTYPE_6 SAVE_OLDTYPE_2 - -# define PUSHCARGS_0 /* No arguments to push. */ -# define DOCARGS_0 /* No arguments to frob. */ -# define POPCARGS_0 /* No arguments to pop. */ -# define _PUSHCARGS_0 /* No arguments to push. */ -# define _POPCARGS_0 /* No arguments to pop. */ - -# define PUSHCARGS_1 movl %ebx, %edx; cfi_register (ebx, edx); PUSHCARGS_0 -# define DOCARGS_1 _DOARGS_1 (4) -# define POPCARGS_1 POPCARGS_0; movl %edx, %ebx; cfi_restore (ebx); -# define _PUSHCARGS_1 pushl %ebx; cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (ebx, 0); _PUSHCARGS_0 -# define _POPCARGS_1 _POPCARGS_0; popl %ebx; \ - cfi_adjust_cfa_offset (-4); cfi_restore (ebx); - -# define PUSHCARGS_2 PUSHCARGS_1 -# define DOCARGS_2 _DOARGS_2 (12) -# define POPCARGS_2 POPCARGS_1 -# define _PUSHCARGS_2 _PUSHCARGS_1 -# define _POPCARGS_2 _POPCARGS_1 - -# define PUSHCARGS_3 _PUSHCARGS_2 -# define DOCARGS_3 _DOARGS_3 (20) -# define POPCARGS_3 _POPCARGS_3 -# define _PUSHCARGS_3 _PUSHCARGS_2 -# define _POPCARGS_3 _POPCARGS_2 - -# define PUSHCARGS_4 _PUSHCARGS_4 -# define DOCARGS_4 _DOARGS_4 (28) -# define POPCARGS_4 _POPCARGS_4 -# define _PUSHCARGS_4 pushl %esi; cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (esi, 0); _PUSHCARGS_3 -# define _POPCARGS_4 _POPCARGS_3; popl %esi; \ - cfi_adjust_cfa_offset (-4); cfi_restore (esi); - -# define PUSHCARGS_5 _PUSHCARGS_5 -# define DOCARGS_5 _DOARGS_5 (36) -# define POPCARGS_5 _POPCARGS_5 -# define _PUSHCARGS_5 pushl %edi; cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (edi, 0); _PUSHCARGS_4 -# define _POPCARGS_5 _POPCARGS_4; popl %edi; \ - cfi_adjust_cfa_offset (-4); cfi_restore (edi); - -# define PUSHCARGS_6 _PUSHCARGS_6 -# define DOCARGS_6 _DOARGS_6 (44) -# define POPCARGS_6 _POPCARGS_6 -# define _PUSHCARGS_6 pushl %ebp; cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (ebp, 0); _PUSHCARGS_5 -# define _POPCARGS_6 _POPCARGS_5; popl %ebp; \ - cfi_adjust_cfa_offset (-4); cfi_restore (ebp); - -# if IS_IN (libpthread) -# define CENABLE call __pthread_enable_asynccancel; -# define CDISABLE call __pthread_disable_asynccancel -# elif IS_IN (libc) -# define CENABLE call __libc_enable_asynccancel; -# define CDISABLE call __libc_disable_asynccancel -# elif IS_IN (librt) -# define CENABLE call __librt_enable_asynccancel; -# define CDISABLE call __librt_disable_asynccancel -# else -# error Unsupported library -# endif -# define POPSTATE_0 \ - pushl %eax; cfi_adjust_cfa_offset (4); movl %ecx, %eax; \ - CDISABLE; popl %eax; cfi_adjust_cfa_offset (-4); -# define POPSTATE_1 POPSTATE_0 -# define POPSTATE_2 xchgl (%esp), %eax; CDISABLE; popl %eax; \ - cfi_adjust_cfa_offset (-4); -# define POPSTATE_3 POPSTATE_2 -# define POPSTATE_4 POPSTATE_3 -# define POPSTATE_5 POPSTATE_4 -# define POPSTATE_6 POPSTATE_5 - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P cmpl $0, %gs:MULTIPLE_THREADS_OFFSET -# endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.c b/sysdeps/unix/sysv/linux/i386/sysdep.c deleted file mode 100644 index 7d65ad3518..0000000000 --- a/sysdeps/unix/sysv/linux/i386/sysdep.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* This routine is jumped to by all the syscall handlers, to stash - an error number into errno. ERROR is the negative error number - returned from the x86 kernel. */ -int -__attribute__ ((__regparm__ (1))) -__syscall_error (int error) -{ - __set_errno (-error); - return -1; -} diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h deleted file mode 100644 index 449b23e49b..0000000000 --- a/sysdeps/unix/sysv/linux/i386/sysdep.h +++ /dev/null @@ -1,657 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper, , August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_I386_SYSDEP_H -#define _LINUX_I386_SYSDEP_H 1 - -/* There is some commonality. */ -#include -#include -/* Defines RTLD_PRIVATE_ERRNO and USE_DL_SYSINFO. */ -#include -#include - - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -#if defined USE_DL_SYSINFO \ - && (IS_IN (libc) || IS_IN (libpthread)) -# define I386_USE_SYSENTER 1 -#else -# undef I386_USE_SYSENTER -#endif - -/* Since GCC 5 and above can properly spill %ebx with PIC when needed, - we can inline syscalls with 6 arguments if GCC 5 or above is used - to compile glibc. Disable GCC 5 optimization when compiling for - profiling or when -fno-omit-frame-pointer is used since asm ("ebp") - can't be used to put the 6th argument in %ebp for syscall. */ -#if __GNUC_PREREQ (5,0) && !defined PROF && CAN_USE_REGISTER_ASM_EBP -# define OPTIMIZE_FOR_GCC_5 -#endif - -#ifdef __ASSEMBLER__ - -/* Linux uses a negative return value to indicate syscall errors, - unlike most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be - negative even if the call succeeded. E.g., the `lseek' system call - might return a large offset. Therefore we must not anymore test - for < 0, but test for a real error by making sure the value in %eax - is a real error number. Linus said he will make sure the no syscall - returns a value in -1 .. -4095 as a valid result so we can savely - test with -4095. */ - -/* We don't want the label for the error handle to be global when we define - it here. */ -#define SYSCALL_ERROR_LABEL __syscall_error - -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - cmpl $-4095, %eax; \ - jae SYSCALL_ERROR_LABEL - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - SYSCALL_ERROR_HANDLER \ - END (name) - -#undef PSEUDO_NOERRNO -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args) - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ - END (name) - -#define ret_NOERRNO ret - -/* The function has to return the error code. */ -#undef PSEUDO_ERRVAL -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - negl %eax - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) \ - END (name) - -#define ret_ERRVAL ret - -#define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.c is used. */ - -/* The original calling convention for system calls on Linux/i386 is - to use int $0x80. */ -#ifdef I386_USE_SYSENTER -# ifdef SHARED -# define ENTER_KERNEL call *%gs:SYSINFO_OFFSET -# else -# define ENTER_KERNEL call *_dl_sysinfo -# endif -#else -# define ENTER_KERNEL int $0x80 -#endif - -/* Linux takes system call arguments in registers: - - syscall number %eax call-clobbered - arg 1 %ebx call-saved - arg 2 %ecx call-clobbered - arg 3 %edx call-clobbered - arg 4 %esi call-saved - arg 5 %edi call-saved - arg 6 %ebp call-saved - - The stack layout upon entering the function is: - - 24(%esp) Arg# 6 - 20(%esp) Arg# 5 - 16(%esp) Arg# 4 - 12(%esp) Arg# 3 - 8(%esp) Arg# 2 - 4(%esp) Arg# 1 - (%esp) Return address - - (Of course a function with say 3 arguments does not have entries for - arguments 4, 5, and 6.) - - The following code tries hard to be optimal. A general assumption - (which is true according to the data books I have) is that - - 2 * xchg is more expensive than pushl + movl + popl - - Beside this a neat trick is used. The calling conventions for Linux - tell that among the registers used for parameters %ecx and %edx need - not be saved. Beside this we may clobber this registers even when - they are not used for parameter passing. - - As a result one can see below that we save the content of the %ebx - register in the %edx register when we have less than 3 arguments - (2 * movl is less expensive than pushl + popl). - - Second unlike for the other registers we don't save the content of - %ecx and %edx when we have more than 1 and 2 registers resp. - - The code below might look a bit long but we have to take care for - the pipelined processors (i586). Here the `pushl' and `popl' - instructions are marked as NP (not pairable) but the exception is - two consecutive of these instruction. This gives no penalty on - other processors though. */ - -#undef DO_CALL -#define DO_CALL(syscall_name, args) \ - PUSHARGS_##args \ - DOARGS_##args \ - movl $SYS_ify (syscall_name), %eax; \ - ENTER_KERNEL \ - POPARGS_##args - -#define PUSHARGS_0 /* No arguments to push. */ -#define DOARGS_0 /* No arguments to frob. */ -#define POPARGS_0 /* No arguments to pop. */ -#define _PUSHARGS_0 /* No arguments to push. */ -#define _DOARGS_0(n) /* No arguments to frob. */ -#define _POPARGS_0 /* No arguments to pop. */ - -#define PUSHARGS_1 movl %ebx, %edx; L(SAVEBX1): PUSHARGS_0 -#define DOARGS_1 _DOARGS_1 (4) -#define POPARGS_1 POPARGS_0; movl %edx, %ebx; L(RESTBX1): -#define _PUSHARGS_1 pushl %ebx; cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (ebx, 0); L(PUSHBX1): _PUSHARGS_0 -#define _DOARGS_1(n) movl n(%esp), %ebx; _DOARGS_0(n-4) -#define _POPARGS_1 _POPARGS_0; popl %ebx; cfi_adjust_cfa_offset (-4); \ - cfi_restore (ebx); L(POPBX1): - -#define PUSHARGS_2 PUSHARGS_1 -#define DOARGS_2 _DOARGS_2 (8) -#define POPARGS_2 POPARGS_1 -#define _PUSHARGS_2 _PUSHARGS_1 -#define _DOARGS_2(n) movl n(%esp), %ecx; _DOARGS_1 (n-4) -#define _POPARGS_2 _POPARGS_1 - -#define PUSHARGS_3 _PUSHARGS_2 -#define DOARGS_3 _DOARGS_3 (16) -#define POPARGS_3 _POPARGS_3 -#define _PUSHARGS_3 _PUSHARGS_2 -#define _DOARGS_3(n) movl n(%esp), %edx; _DOARGS_2 (n-4) -#define _POPARGS_3 _POPARGS_2 - -#define PUSHARGS_4 _PUSHARGS_4 -#define DOARGS_4 _DOARGS_4 (24) -#define POPARGS_4 _POPARGS_4 -#define _PUSHARGS_4 pushl %esi; cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (esi, 0); L(PUSHSI1): _PUSHARGS_3 -#define _DOARGS_4(n) movl n(%esp), %esi; _DOARGS_3 (n-4) -#define _POPARGS_4 _POPARGS_3; popl %esi; cfi_adjust_cfa_offset (-4); \ - cfi_restore (esi); L(POPSI1): - -#define PUSHARGS_5 _PUSHARGS_5 -#define DOARGS_5 _DOARGS_5 (32) -#define POPARGS_5 _POPARGS_5 -#define _PUSHARGS_5 pushl %edi; cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (edi, 0); L(PUSHDI1): _PUSHARGS_4 -#define _DOARGS_5(n) movl n(%esp), %edi; _DOARGS_4 (n-4) -#define _POPARGS_5 _POPARGS_4; popl %edi; cfi_adjust_cfa_offset (-4); \ - cfi_restore (edi); L(POPDI1): - -#define PUSHARGS_6 _PUSHARGS_6 -#define DOARGS_6 _DOARGS_6 (40) -#define POPARGS_6 _POPARGS_6 -#define _PUSHARGS_6 pushl %ebp; cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (ebp, 0); L(PUSHBP1): _PUSHARGS_5 -#define _DOARGS_6(n) movl n(%esp), %ebp; _DOARGS_5 (n-4) -#define _POPARGS_6 _POPARGS_5; popl %ebp; cfi_adjust_cfa_offset (-4); \ - cfi_restore (ebp); L(POPBP1): - -#else /* !__ASSEMBLER__ */ - -extern int __syscall_error (int) - attribute_hidden __attribute__ ((__regparm__ (1))); - -#ifndef OPTIMIZE_FOR_GCC_5 -/* We need some help from the assembler to generate optimal code. We - define some macros here which later will be used. */ -asm (".L__X'%ebx = 1\n\t" - ".L__X'%ecx = 2\n\t" - ".L__X'%edx = 2\n\t" - ".L__X'%eax = 3\n\t" - ".L__X'%esi = 3\n\t" - ".L__X'%edi = 3\n\t" - ".L__X'%ebp = 3\n\t" - ".L__X'%esp = 3\n\t" - ".macro bpushl name reg\n\t" - ".if 1 - \\name\n\t" - ".if 2 - \\name\n\t" - "error\n\t" - ".else\n\t" - "xchgl \\reg, %ebx\n\t" - ".endif\n\t" - ".endif\n\t" - ".endm\n\t" - ".macro bpopl name reg\n\t" - ".if 1 - \\name\n\t" - ".if 2 - \\name\n\t" - "error\n\t" - ".else\n\t" - "xchgl \\reg, %ebx\n\t" - ".endif\n\t" - ".endif\n\t" - ".endm\n\t"); - -/* Six-argument syscalls use an out-of-line helper, because an inline - asm using all registers apart from %esp cannot work reliably and - the assembler does not support describing an asm that saves and - restores %ebp itself as a separate stack frame. This structure - stores the arguments not passed in registers; %edi is passed with a - pointer to this structure. */ -struct libc_do_syscall_args -{ - int ebx, edi, ebp; -}; -#endif - -/* Define a macro which expands inline into the wrapper code for a system - call. */ -#undef INLINE_SYSCALL -#if IS_IN (libc) -# define INLINE_SYSCALL(name, nr, args...) \ - ({ \ - unsigned int resultvar = INTERNAL_SYSCALL (name, , nr, args); \ - __glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (resultvar, )) \ - ? __syscall_error (-INTERNAL_SYSCALL_ERRNO (resultvar, )) \ - : (int) resultvar; }) -#else -# define INLINE_SYSCALL(name, nr, args...) \ - ({ \ - unsigned int resultvar = INTERNAL_SYSCALL (name, , nr, args); \ - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (resultvar, ))) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, )); \ - resultvar = 0xffffffff; \ - } \ - (int) resultvar; }) -#endif - -/* Set error number and return -1. Return the internal function, - __syscall_error, which sets errno from the negative error number - and returns -1, to avoid PIC. */ -#undef INLINE_SYSCALL_ERROR_RETURN_VALUE -#define INLINE_SYSCALL_ERROR_RETURN_VALUE(resultvar) \ - __syscall_error (-(resultvar)) - -/* List of system calls which are supported as vsyscalls. */ -# define HAVE_CLOCK_GETTIME_VSYSCALL 1 -# define HAVE_GETTIMEOFDAY_VSYSCALL 1 - -/* Define a macro which expands inline into the wrapper code for a system - call. This use is for internal calls that do not need to handle errors - normally. It will never touch errno. This returns just what the kernel - gave back. - - The _NCS variant allows non-constant syscall numbers but it is not - possible to use more than four parameters. */ -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL_MAIN_0(name, err, args...) \ - INTERNAL_SYSCALL_MAIN_INLINE(name, err, 0, args) -#define INTERNAL_SYSCALL_MAIN_1(name, err, args...) \ - INTERNAL_SYSCALL_MAIN_INLINE(name, err, 1, args) -#define INTERNAL_SYSCALL_MAIN_2(name, err, args...) \ - INTERNAL_SYSCALL_MAIN_INLINE(name, err, 2, args) -#define INTERNAL_SYSCALL_MAIN_3(name, err, args...) \ - INTERNAL_SYSCALL_MAIN_INLINE(name, err, 3, args) -#define INTERNAL_SYSCALL_MAIN_4(name, err, args...) \ - INTERNAL_SYSCALL_MAIN_INLINE(name, err, 4, args) -#define INTERNAL_SYSCALL_MAIN_5(name, err, args...) \ - INTERNAL_SYSCALL_MAIN_INLINE(name, err, 5, args) -/* Each object using 6-argument inline syscalls must include a - definition of __libc_do_syscall. */ -#ifdef OPTIMIZE_FOR_GCC_5 -# define INTERNAL_SYSCALL_MAIN_6(name, err, args...) \ - INTERNAL_SYSCALL_MAIN_INLINE(name, err, 6, args) -#else /* GCC 5 */ -# define INTERNAL_SYSCALL_MAIN_6(name, err, arg1, arg2, arg3, \ - arg4, arg5, arg6) \ - struct libc_do_syscall_args _xv = \ - { \ - (int) (arg1), \ - (int) (arg5), \ - (int) (arg6) \ - }; \ - asm volatile ( \ - "movl %1, %%eax\n\t" \ - "call __libc_do_syscall" \ - : "=a" (resultvar) \ - : "i" (__NR_##name), "c" (arg2), "d" (arg3), "S" (arg4), "D" (&_xv) \ - : "memory", "cc") -#endif /* GCC 5 */ -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - ({ \ - register unsigned int resultvar; \ - INTERNAL_SYSCALL_MAIN_##nr (name, err, args); \ - (int) resultvar; }) -#ifdef I386_USE_SYSENTER -# ifdef OPTIMIZE_FOR_GCC_5 -# ifdef SHARED -# define INTERNAL_SYSCALL_MAIN_INLINE(name, err, nr, args...) \ - LOADREGS_##nr(args) \ - asm volatile ( \ - "call *%%gs:%P2" \ - : "=a" (resultvar) \ - : "a" (__NR_##name), "i" (offsetof (tcbhead_t, sysinfo)) \ - ASMARGS_##nr(args) : "memory", "cc") -# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - ({ \ - register unsigned int resultvar; \ - LOADREGS_##nr(args) \ - asm volatile ( \ - "call *%%gs:%P2" \ - : "=a" (resultvar) \ - : "a" (name), "i" (offsetof (tcbhead_t, sysinfo)) \ - ASMARGS_##nr(args) : "memory", "cc"); \ - (int) resultvar; }) -# else -# define INTERNAL_SYSCALL_MAIN_INLINE(name, err, nr, args...) \ - LOADREGS_##nr(args) \ - asm volatile ( \ - "call *_dl_sysinfo" \ - : "=a" (resultvar) \ - : "a" (__NR_##name) ASMARGS_##nr(args) : "memory", "cc") -# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - ({ \ - register unsigned int resultvar; \ - LOADREGS_##nr(args) \ - asm volatile ( \ - "call *_dl_sysinfo" \ - : "=a" (resultvar) \ - : "a" (name) ASMARGS_##nr(args) : "memory", "cc"); \ - (int) resultvar; }) -# endif -# else /* GCC 5 */ -# ifdef SHARED -# define INTERNAL_SYSCALL_MAIN_INLINE(name, err, nr, args...) \ - EXTRAVAR_##nr \ - asm volatile ( \ - LOADARGS_##nr \ - "movl %1, %%eax\n\t" \ - "call *%%gs:%P2\n\t" \ - RESTOREARGS_##nr \ - : "=a" (resultvar) \ - : "i" (__NR_##name), "i" (offsetof (tcbhead_t, sysinfo)) \ - ASMFMT_##nr(args) : "memory", "cc") -# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - ({ \ - register unsigned int resultvar; \ - EXTRAVAR_##nr \ - asm volatile ( \ - LOADARGS_##nr \ - "call *%%gs:%P2\n\t" \ - RESTOREARGS_##nr \ - : "=a" (resultvar) \ - : "0" (name), "i" (offsetof (tcbhead_t, sysinfo)) \ - ASMFMT_##nr(args) : "memory", "cc"); \ - (int) resultvar; }) -# else -# define INTERNAL_SYSCALL_MAIN_INLINE(name, err, nr, args...) \ - EXTRAVAR_##nr \ - asm volatile ( \ - LOADARGS_##nr \ - "movl %1, %%eax\n\t" \ - "call *_dl_sysinfo\n\t" \ - RESTOREARGS_##nr \ - : "=a" (resultvar) \ - : "i" (__NR_##name) ASMFMT_##nr(args) : "memory", "cc") -# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - ({ \ - register unsigned int resultvar; \ - EXTRAVAR_##nr \ - asm volatile ( \ - LOADARGS_##nr \ - "call *_dl_sysinfo\n\t" \ - RESTOREARGS_##nr \ - : "=a" (resultvar) \ - : "0" (name) ASMFMT_##nr(args) : "memory", "cc"); \ - (int) resultvar; }) -# endif -# endif /* GCC 5 */ -#else -# ifdef OPTIMIZE_FOR_GCC_5 -# define INTERNAL_SYSCALL_MAIN_INLINE(name, err, nr, args...) \ - LOADREGS_##nr(args) \ - asm volatile ( \ - "int $0x80" \ - : "=a" (resultvar) \ - : "a" (__NR_##name) ASMARGS_##nr(args) : "memory", "cc") -# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - ({ \ - register unsigned int resultvar; \ - LOADREGS_##nr(args) \ - asm volatile ( \ - "int $0x80" \ - : "=a" (resultvar) \ - : "a" (name) ASMARGS_##nr(args) : "memory", "cc"); \ - (int) resultvar; }) -# else /* GCC 5 */ -# define INTERNAL_SYSCALL_MAIN_INLINE(name, err, nr, args...) \ - EXTRAVAR_##nr \ - asm volatile ( \ - LOADARGS_##nr \ - "movl %1, %%eax\n\t" \ - "int $0x80\n\t" \ - RESTOREARGS_##nr \ - : "=a" (resultvar) \ - : "i" (__NR_##name) ASMFMT_##nr(args) : "memory", "cc") -# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - ({ \ - register unsigned int resultvar; \ - EXTRAVAR_##nr \ - asm volatile ( \ - LOADARGS_##nr \ - "int $0x80\n\t" \ - RESTOREARGS_##nr \ - : "=a" (resultvar) \ - : "0" (name) ASMFMT_##nr(args) : "memory", "cc"); \ - (int) resultvar; }) -# endif /* GCC 5 */ -#endif - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) do { } while (0) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((unsigned int) (val) >= 0xfffff001u) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) - -#define LOADARGS_0 -#ifdef __PIC__ -# if defined I386_USE_SYSENTER && defined SHARED -# define LOADARGS_1 \ - "bpushl .L__X'%k3, %k3\n\t" -# define LOADARGS_5 \ - "movl %%ebx, %4\n\t" \ - "movl %3, %%ebx\n\t" -# else -# define LOADARGS_1 \ - "bpushl .L__X'%k2, %k2\n\t" -# define LOADARGS_5 \ - "movl %%ebx, %3\n\t" \ - "movl %2, %%ebx\n\t" -# endif -# define LOADARGS_2 LOADARGS_1 -# define LOADARGS_3 \ - "xchgl %%ebx, %%edi\n\t" -# define LOADARGS_4 LOADARGS_3 -#else -# define LOADARGS_1 -# define LOADARGS_2 -# define LOADARGS_3 -# define LOADARGS_4 -# define LOADARGS_5 -#endif - -#define RESTOREARGS_0 -#ifdef __PIC__ -# if defined I386_USE_SYSENTER && defined SHARED -# define RESTOREARGS_1 \ - "bpopl .L__X'%k3, %k3\n\t" -# define RESTOREARGS_5 \ - "movl %4, %%ebx" -# else -# define RESTOREARGS_1 \ - "bpopl .L__X'%k2, %k2\n\t" -# define RESTOREARGS_5 \ - "movl %3, %%ebx" -# endif -# define RESTOREARGS_2 RESTOREARGS_1 -# define RESTOREARGS_3 \ - "xchgl %%edi, %%ebx\n\t" -# define RESTOREARGS_4 RESTOREARGS_3 -#else -# define RESTOREARGS_1 -# define RESTOREARGS_2 -# define RESTOREARGS_3 -# define RESTOREARGS_4 -# define RESTOREARGS_5 -#endif - -#ifdef OPTIMIZE_FOR_GCC_5 -# define LOADREGS_0() -# define ASMARGS_0() -# define LOADREGS_1(arg1) \ - LOADREGS_0 () -# define ASMARGS_1(arg1) \ - ASMARGS_0 (), "b" ((unsigned int) (arg1)) -# define LOADREGS_2(arg1, arg2) \ - LOADREGS_1 (arg1) -# define ASMARGS_2(arg1, arg2) \ - ASMARGS_1 (arg1), "c" ((unsigned int) (arg2)) -# define LOADREGS_3(arg1, arg2, arg3) \ - LOADREGS_2 (arg1, arg2) -# define ASMARGS_3(arg1, arg2, arg3) \ - ASMARGS_2 (arg1, arg2), "d" ((unsigned int) (arg3)) -# define LOADREGS_4(arg1, arg2, arg3, arg4) \ - LOADREGS_3 (arg1, arg2, arg3) -# define ASMARGS_4(arg1, arg2, arg3, arg4) \ - ASMARGS_3 (arg1, arg2, arg3), "S" ((unsigned int) (arg4)) -# define LOADREGS_5(arg1, arg2, arg3, arg4, arg5) \ - LOADREGS_4 (arg1, arg2, arg3, arg4) -# define ASMARGS_5(arg1, arg2, arg3, arg4, arg5) \ - ASMARGS_4 (arg1, arg2, arg3, arg4), "D" ((unsigned int) (arg5)) -# define LOADREGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \ - register unsigned int _a6 asm ("ebp") = (unsigned int) (arg6); \ - LOADREGS_5 (arg1, arg2, arg3, arg4, arg5) -# define ASMARGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \ - ASMARGS_5 (arg1, arg2, arg3, arg4, arg5), "r" (_a6) -#endif /* GCC 5 */ - -#define ASMFMT_0() -#ifdef __PIC__ -# define ASMFMT_1(arg1) \ - , "cd" (arg1) -# define ASMFMT_2(arg1, arg2) \ - , "d" (arg1), "c" (arg2) -# define ASMFMT_3(arg1, arg2, arg3) \ - , "D" (arg1), "c" (arg2), "d" (arg3) -# define ASMFMT_4(arg1, arg2, arg3, arg4) \ - , "D" (arg1), "c" (arg2), "d" (arg3), "S" (arg4) -# define ASMFMT_5(arg1, arg2, arg3, arg4, arg5) \ - , "0" (arg1), "m" (_xv), "c" (arg2), "d" (arg3), "S" (arg4), "D" (arg5) -#else -# define ASMFMT_1(arg1) \ - , "b" (arg1) -# define ASMFMT_2(arg1, arg2) \ - , "b" (arg1), "c" (arg2) -# define ASMFMT_3(arg1, arg2, arg3) \ - , "b" (arg1), "c" (arg2), "d" (arg3) -# define ASMFMT_4(arg1, arg2, arg3, arg4) \ - , "b" (arg1), "c" (arg2), "d" (arg3), "S" (arg4) -# define ASMFMT_5(arg1, arg2, arg3, arg4, arg5) \ - , "b" (arg1), "c" (arg2), "d" (arg3), "S" (arg4), "D" (arg5) -#endif - -#define EXTRAVAR_0 -#define EXTRAVAR_1 -#define EXTRAVAR_2 -#define EXTRAVAR_3 -#define EXTRAVAR_4 -#ifdef __PIC__ -# define EXTRAVAR_5 int _xv; -#else -# define EXTRAVAR_5 -#endif - -/* Consistency check for position-independent code. */ -#if defined __PIC__ && !defined OPTIMIZE_FOR_GCC_5 -# define check_consistency() \ - ({ int __res; \ - __asm__ __volatile__ \ - (LOAD_PIC_REG_STR (cx) ";" \ - "subl %%ebx, %%ecx;" \ - "je 1f;" \ - "ud2;" \ - "1:\n" \ - : "=c" (__res)); \ - __res; }) -#endif - -#endif /* __ASSEMBLER__ */ - - -/* Pointer mangling support. */ -#if IS_IN (rtld) -/* We cannot use the thread descriptor because in ld.so we use setjmp - earlier than the descriptor is initialized. Using a global variable - is too complicated here since we have no PC-relative addressing mode. */ -#else -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(reg) xorl %gs:POINTER_GUARD, reg; \ - roll $9, reg -# define PTR_DEMANGLE(reg) rorl $9, reg; \ - xorl %gs:POINTER_GUARD, reg -# else -# define PTR_MANGLE(var) asm ("xorl %%gs:%c2, %0\n" \ - "roll $9, %0" \ - : "=r" (var) \ - : "0" (var), \ - "i" (offsetof (tcbhead_t, \ - pointer_guard))) -# define PTR_DEMANGLE(var) asm ("rorl $9, %0\n" \ - "xorl %%gs:%c2, %0" \ - : "=r" (var) \ - : "0" (var), \ - "i" (offsetof (tcbhead_t, \ - pointer_guard))) -# endif -#endif - -#endif /* linux/i386/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/i386/time.c b/sysdeps/unix/sysv/linux/i386/time.c deleted file mode 100644 index f614a2d73b..0000000000 --- a/sysdeps/unix/sysv/linux/i386/time.c +++ /dev/null @@ -1,34 +0,0 @@ -/* time -- Get number of seconds since Epoch. Linux/i386 version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef SHARED -# define time __redirect_time -#endif - -#include - -#ifdef SHARED -# undef time -# define time_type __redirect_time - -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__time_syscall, __GI_time, __time_syscall); -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/i386/ucontext_i.sym b/sysdeps/unix/sysv/linux/i386/ucontext_i.sym deleted file mode 100644 index b11a5509cd..0000000000 --- a/sysdeps/unix/sysv/linux/i386/ucontext_i.sym +++ /dev/null @@ -1,30 +0,0 @@ -#include -#include -#include - --- - -SIG_BLOCK -SIG_SETMASK - -#define ucontext(member) offsetof (ucontext_t, member) -#define mcontext(member) ucontext (uc_mcontext.member) -#define mreg(reg) mcontext (gregs[REG_##reg]) - -oLINK ucontext (uc_link) -oSS_SP ucontext (uc_stack.ss_sp) -oSS_SIZE ucontext (uc_stack.ss_size) -oGS mreg (GS) -oFS mreg (FS) -oEDI mreg (EDI) -oESI mreg (ESI) -oEBP mreg (EBP) -oESP mreg (ESP) -oEBX mreg (EBX) -oEDX mreg (EDX) -oECX mreg (ECX) -oEAX mreg (EAX) -oEIP mreg (EIP) -oFPREGS mcontext (fpregs) -oSIGMASK ucontext (uc_sigmask) -oFPREGSMEM ucontext (__fpregs_mem) diff --git a/sysdeps/unix/sysv/linux/i386/versionsort64.c b/sysdeps/unix/sysv/linux/i386/versionsort64.c deleted file mode 100644 index 3e1c6ea35b..0000000000 --- a/sysdeps/unix/sysv/linux/i386/versionsort64.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__versionsort64 (const struct dirent64 **a, const struct dirent64 **b) -{ - return __strverscmp ((*a)->d_name, (*b)->d_name); -} - -#include - -versioned_symbol (libc, __versionsort64, versionsort64, GLIBC_2_2); - -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) - -#include - -int -__old_versionsort64 (const struct __old_dirent64 **a, - const struct __old_dirent64 **b); - -int -attribute_compat_text_section -__old_versionsort64 (const struct __old_dirent64 **a, - const struct __old_dirent64 **b) -{ - return __strverscmp ((*a)->d_name, (*b)->d_name); -} - -compat_symbol (libc, __old_versionsort64, versionsort64, GLIBC_2_1); -#endif diff --git a/sysdeps/unix/sysv/linux/i386/vfork.S b/sysdeps/unix/sysv/linux/i386/vfork.S deleted file mode 100644 index 92ceca74c7..0000000000 --- a/sysdeps/unix/sysv/linux/i386/vfork.S +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include -#include - - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__vfork) - - /* Pop the return PC value into ECX. */ - popl %ecx - cfi_adjust_cfa_offset (-4) - cfi_register (%eip, %ecx) - - /* Stuff the syscall number in EAX and enter into the kernel. */ - movl $SYS_ify (vfork), %eax - int $0x80 - - /* Jump to the return PC. Don't jump directly since this - disturbs the branch target cache. Instead push the return - address back on the stack. */ - pushl %ecx - cfi_adjust_cfa_offset (4) - - cmpl $-4095, %eax - /* Branch forward if it failed. */ - jae SYSCALL_ERROR_LABEL - - ret - -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) - -weak_alias (__vfork, vfork) -strong_alias (__vfork, __libc_vfork) diff --git a/sysdeps/unix/sysv/linux/i386/xstat.c b/sysdeps/unix/sysv/linux/i386/xstat.c deleted file mode 100644 index 6b8b1ce3e7..0000000000 --- a/sysdeps/unix/sysv/linux/i386/xstat.c +++ /dev/null @@ -1,61 +0,0 @@ -/* xstat using old-style Unix stat system call. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ho hum, if xstat == xstat64 we must get rid of the prototype or gcc - will complain since they don't strictly match. */ -#define __xstat64 __xstat64_disable - -#include -#include -#include -#include - -#include -#include - -#include - - -/* Get information about the file NAME in BUF. */ -int -__xstat (int vers, const char *name, struct stat *buf) -{ - int result; - - if (vers == _STAT_VER_KERNEL) - return INLINE_SYSCALL (stat, 2, name, buf); - - { - struct stat64 buf64; - - INTERNAL_SYSCALL_DECL (err); - result = INTERNAL_SYSCALL (stat64, err, 2, name, &buf64); - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err))) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (result, - err)); - else - return __xstat32_conv (vers, &buf64, buf); - } -} -hidden_def (__xstat) -weak_alias (__xstat, _xstat); -#if XSTAT_IS_XSTAT64 -# undef __xstat64 -strong_alias (__xstat, __xstat64); -hidden_ver (__xstat, __xstat64) -#endif diff --git a/sysdeps/unix/sysv/linux/ia64/Implies b/sysdeps/unix/sysv/linux/ia64/Implies deleted file mode 100644 index 9762539f9c..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/Implies +++ /dev/null @@ -1,2 +0,0 @@ -ia64/nptl -unix/sysv/linux/wordsize-64 diff --git a/sysdeps/unix/sysv/linux/ia64/Makefile b/sysdeps/unix/sysv/linux/ia64/Makefile deleted file mode 100644 index 4d6766db5e..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -ifeq ($(subdir),misc) -sysdep_headers += sys/rse.h -endif - -ifeq ($(subdir),stdlib) -sysdep_routines += __start_context -gen-as-const-headers += sigcontext-offsets.sym -endif - -ifeq ($(subdir),misc) -sysdep_headers += sys/io.h -sysdep_routines += ioperm clone2 -gen-as-const-headers += sigaltstack-offsets.sym -endif - -ifeq ($(subdir),elf) -sysdep-dl-routines += dl-static -endif - -ifeq ($(subdir),rt) -librt-routines += rt-sysdep -librt-shared-only-routines += rt-sysdep -endif - -ifeq ($(subdir),nptl) -libpthread-sysdep_routines += __ia64_longjmp unwind_longjmp __sigstack_longjmp -endif diff --git a/sysdeps/unix/sysv/linux/ia64/Versions b/sysdeps/unix/sysv/linux/ia64/Versions deleted file mode 100644 index 116f4e8503..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/Versions +++ /dev/null @@ -1,41 +0,0 @@ -ld { - GLIBC_PRIVATE { - _dl_var_init; - } -} -libc { - GLIBC_2.2 { - ioperm; iopl; - inb; inw; inl; - _inb; _inw; _inl; - outb; outw; _outl; - _outb; _outw; _outl; - pciconfig_read; pciconfig_write; - - # linuxthreads - __clone2; - } - GLIBC_2.2.2 { - # w* - wordexp; - } - GLIBC_2.2.6 { - getunwind; - } - GLIBC_2.24 { - recvmsg; sendmsg; - } -} -libpthread { - GLIBC_2.3.3 { - # Changed PTHREAD_STACK_MIN. - pthread_attr_setstack; pthread_attr_setstacksize; - } -} -librt { - GLIBC_2.3.3 { - # Changed timer_t. - timer_create; timer_delete; timer_getoverrun; timer_gettime; - timer_settime; - } -} diff --git a/sysdeps/unix/sysv/linux/ia64/____longjmp_chk.S b/sysdeps/unix/sysv/linux/ia64/____longjmp_chk.S deleted file mode 100644 index 52104a92ac..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/____longjmp_chk.S +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata.str1.8,"aMS",@progbits,1 - .align 8 -.LC0: - .string "longjmp causes uninitialized stack frame" - - .section .sdata,"aws",@progbits - .align 8 - .type longjmp_msg,@object -longjmp_msg: - data8 .LC0 - .size longjmp_msg, .-longjmp_msg - -#define __longjmp ____longjmp_chk - -/* We use 32 bytes (rather than sizeof(stack_t)) so that we keep the stack - properly aligned. But we still want a sanity check to make sure 32 is - actually enough. */ -#define STACK_SPACE ((sizeSS + 31) & -32) - -/* Check the stack pointer held in the jumpbuf. Make sure it's in either the - current stack (r12) or in the signal stack. */ -#define CHECK_RSP \ - ld8 loc0 = [in0]; \ - ;; \ - /* First see if target stack is within current one. */ \ - cmp.ltu p0, p8 = loc0, r12; \ -(p8) br.cond.dptk.many .Lok; \ - \ - /* Check if it's an alternative signal stack. */ \ - mov out0 = r0; \ - add out1 = -STACK_SPACE, r12; \ - ;; \ - mov r12 = out1; \ - DO_CALL_VIA_BREAK (SYS_ify (sigaltstack)); \ - ;; \ - /* If the syscall failed, then assume it's OK. */ \ - cmp.eq p8, p0 = -1, r10; \ -(p8) br.cond.spnt .Lok; \ - /* Move stack_t into regs. */ \ - add r14 = oSS_FLAGS, r12; /* ss_flags */ \ - add r15 = oSS_SIZE, r12; /* ss_size */ \ - ld8 r16 = [r12]; /* ss_sp */ \ - ;; \ - ld4 r17 = [r14]; /* ss_flags */ \ - ld8 r18 = [r15]; /* ss_size */ \ - ;; \ - sub r19 = r16, r18; /* sp - size */ \ - /* See if we're currently on the altstack. */ \ - tbit.nz p0, p8 = r17, 0; /* SS_ONSTACK */ \ -(p8) br.cond.spnt .Lfail; \ - /* Verify target is within alternative stack. */ \ - cmp.gtu p7, p0 = loc0, r16; \ -(p7) br.cond.spnt .Lfail; \ - ;; \ - cmp.ltu p0, p8 = loc0, r19; \ -(p8) br.cond.sptk.many .Lok; \ - ;; \ - \ - /* Still here? Abort! */ \ -.Lfail: \ - add r12 = STACK_SPACE, r12; \ - addl loc0 = @ltoffx(longjmp_msg#), r1;; \ - ld8.mov loc0 = [loc0], longjmp_msg#;; \ - ld8 out0 = [loc0]; \ - br.call.sptk.many b0 = HIDDEN_JUMPTARGET(__fortify_fail)#;; \ -.Lok: \ - add r12 = STACK_SPACE, r12; - -#include "__longjmp.S" diff --git a/sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S b/sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S deleted file mode 100644 index 61299bdff1..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S +++ /dev/null @@ -1,158 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - Contributed by David Mosberger-Tang . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -LEAF(__ia64_flush_rbs) - flushrs - mov r9 = ar.rsc // 12 cyc latency - ;; - mov r8 = ar.bsp // 12 cyc latency - ;; - and r16 = ~0x3, r9 // clear ar.rsc.mode - ;; - mov ar.rsc = r16 // put RSE into enforced-lazy mode - ;; - mov r10 = ar.rnat // 5 cyc latency - ret -END(__ia64_flush_rbs) - - -# define pPos p6 /* is rotate count positive? */ -# define pNeg p7 /* is rotate count negative? */ - -/* __ia64_longjmp(__jmp_buf buf, int val, long rnat, long rsc) */ - - -LEAF(__ia64_longjmp) - alloc r8=ar.pfs,4,0,0,0 - add r2=0x98,in0 // r2 <- &jmpbuf.orig_jmp_buf_addr - add r3=0x88,in0 // r3 <- &jmpbuf.ar_bsp - ;; - ld8 r8=[r2] // r8 <- orig_jmp_buf_addr - ld8 r23=[r3],8 // r23 <- jmpbuf.ar_bsp - mov r2=in0 - ;; - // - // Note: we need to redo the "flushrs" here even though it's - // already been done by __ia64_flush_rbs. It is needed to - // ensure that ar.bspstore == ar.bsp. - // - flushrs // flush dirty regs to backing store - ld8 r25=[r3] // r25 <- jmpbuf.ar_unat - sub r8=r8,in0 // r8 <- &orig_jmpbuf - &jmpbuf - ;; - add r3=8,in0 // r3 <- &jmpbuf.r1 - extr.u r8=r8,3,6 // r8 <- (&orig_jmpbuf - &jmpbuf)/8 & 0x3f - ;; - cmp.lt pNeg,pPos=r8,r0 - ;; -(pPos) mov r16=r8 -(pNeg) add r16=64,r8 -(pPos) sub r17=64,r8 -(pNeg) sub r17=r0,r8 - ;; - shr.u r8=r25,r16 - shl r9=r25,r17 - ;; - or r25=r8,r9 - ;; - mov ar.unat=r25 // setup ar.unat (NaT bits for r1, r4-r7, and r12) - ;; - ld8.fill.nta sp=[r2],16 // r12 (sp) - ld8.fill.nta gp=[r3],32 // r1 (gp) - dep r11=-1,r23,3,6 // r11 <- ia64_rse_rnat_addr(jmpbuf.ar_bsp) - ;; - ld8.nta r16=[r2],16 // caller's unat -// ld8.nta r17=[r3],16 // fpsr - ;; - ld8.fill.nta r4=[r2],16 // r4 - ld8.fill.nta r5=[r3],16 // r5 (gp) - ;; - ld8.fill.nta r6=[r2],16 // r6 - ld8.fill.nta r7=[r3],16 // r7 - ;; - mov ar.unat=r16 // restore caller's unat -// mov ar.fpsr=r17 // restore fpsr - ;; - ld8.nta r16=[r2],16 // b0 - ld8.nta r17=[r3],16 // b1 - ;; - mov ar.bspstore=r23 // restore ar.bspstore - ld8.nta r18=[r2],16 // b2 - ;; - mov ar.rnat=in2 // restore ar.rnat - ld8.nta r19=[r3],16 // b3 - ;; - ld8.nta r20=[r2],16 // b4 - ld8.nta r21=[r3],16 // b5 -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (r16, r24) -#endif - ;; - ld8.nta r11=[r2],16 // ar.pfs - ld8.nta r22=[r3],56 // ar.lc - ;; - ld8.nta r24=[r2],32 // pr - mov ar.rsc=in3 // restore ar.rsc - mov b0=r16 - ;; - ldf.fill.nta f2=[r2],32 - ldf.fill.nta f3=[r3],32 - mov b1=r17 - ;; - ldf.fill.nta f4=[r2],32 - ldf.fill.nta f5=[r3],32 - mov b2=r18 - ;; - ldf.fill.nta f16=[r2],32 - ldf.fill.nta f17=[r3],32 - mov b3=r19 - ;; - ldf.fill.nta f18=[r2],32 - ldf.fill.nta f19=[r3],32 - mov b4=r20 - ;; - ldf.fill.nta f20=[r2],32 - ldf.fill.nta f21=[r3],32 - mov b5=r21 - ;; - ldf.fill.nta f22=[r2],32 - ldf.fill.nta f23=[r3],32 - mov ar.lc=r22 - ;; - ldf.fill.nta f24=[r2],32 - ldf.fill.nta f25=[r3],32 - cmp.eq p8,p9=0,in1 - ;; - ldf.fill.nta f26=[r2],32 - ldf.fill.nta f27=[r3],32 - mov ar.pfs=r11 - ;; - ldf.fill.nta f28=[r2],32 - ldf.fill.nta f29=[r3],32 -(p8) mov r8=1 - ;; - ldf.fill.nta f30=[r2] - ldf.fill.nta f31=[r3] -(p9) mov r8=in1 - - invala // virt. -> phys. regnum mapping may change - mov pr=r24,-1 - ret -END(__ia64_longjmp) diff --git a/sysdeps/unix/sysv/linux/ia64/__longjmp.S b/sysdeps/unix/sysv/linux/ia64/__longjmp.S deleted file mode 100644 index 975acbaf2a..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/__longjmp.S +++ /dev/null @@ -1,168 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - Contributed by David Mosberger-Tang . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . - - Note that __sigsetjmp() did NOT flush the register stack. Instead, - we do it here since __longjmp() is usually much less frequently - invoked than __sigsetjmp(). The only difficulty is that __sigsetjmp() - didn't (and wouldn't be able to) save ar.rnat either. This is a problem - because if we're not careful, we could end up loading random NaT bits. - There are two cases: - - (i) ar.bsp < ia64_rse_rnat_addr(jmpbuf.ar_bsp) - ar.rnat contains the desired bits---preserve ar.rnat - across loadrs and write to ar.bspstore - - (ii) ar.bsp >= ia64_rse_rnat_addr(jmpbuf.ar_bsp) - The desired ar.rnat is stored in - ia64_rse_rnat_addr(jmpbuf.ar_bsp). Load those - bits into ar.rnat after setting ar.bspstore. */ - -#include -#include - -# define pPos p6 /* is rotate count positive? */ -# define pNeg p7 /* is rotate count negative? */ - - - /* __longjmp(__jmp_buf buf, int val) */ - -LEAF(__longjmp) -#ifdef CHECK_RSP - alloc r8=ar.pfs,2,1,3,0 - CHECK_RSP -#else - alloc r8=ar.pfs,2,0,0,0 -#endif - mov r27=ar.rsc - add r2=0x98,in0 // r2 <- &jmpbuf.orig_jmp_buf_addr - ;; - ld8 r8=[r2],-16 // r8 <- orig_jmp_buf_addr - mov r10=ar.bsp - and r11=~0x3,r27 // clear ar.rsc.mode - ;; - flushrs // flush dirty regs to backing store (must be first in insn grp) - ld8 r23=[r2],8 // r23 <- jmpbuf.ar_bsp - sub r8=r8,in0 // r8 <- &orig_jmpbuf - &jmpbuf - ;; - ld8 r25=[r2] // r25 <- jmpbuf.ar_unat - extr.u r8=r8,3,6 // r8 <- (&orig_jmpbuf - &jmpbuf)/8 & 0x3f - ;; - cmp.lt pNeg,pPos=r8,r0 - mov r2=in0 - ;; -(pPos) mov r16=r8 -(pNeg) add r16=64,r8 -(pPos) sub r17=64,r8 -(pNeg) sub r17=r0,r8 - ;; - mov ar.rsc=r11 // put RSE in enforced lazy mode - shr.u r8=r25,r16 - add r3=8,in0 // r3 <- &jmpbuf.r1 - shl r9=r25,r17 - ;; - ld8.fill.nta r28=[r2],16 // r28 <- jmpbuf.sp - or r25=r8,r9 - ;; - mov r26=ar.rnat - mov ar.unat=r25 // setup ar.unat (NaT bits for r1, r4-r7, and r12) - ;; - ld8.fill.nta gp=[r3],32 // r1 (gp) - dep r11=-1,r23,3,6 // r11 <- ia64_rse_rnat_addr(jmpbuf.ar_bsp) - mov sp=r28 // r12 (sp) - ;; - ld8.nta r16=[r2],16 // caller's unat -// ld8.nta r17=[r3],16 // fpsr - ;; - ld8.fill.nta r4=[r2],16 // r4 - ld8.fill.nta r5=[r3],16 // r5 (gp) - cmp.geu p8,p0=r10,r11 // p8 <- (ar.bsp >= jmpbuf.ar_bsp) - ;; - ld8.fill.nta r6=[r2],16 // r6 - ld8.fill.nta r7=[r3],16 // r7 - ;; - mov ar.unat=r16 // restore caller's unat -// mov ar.fpsr=r17 // restore fpsr - ;; - ld8.nta r16=[r2],16 // b0 - ld8.nta r17=[r3],16 // b1 - ;; -(p8) ld8 r26=[r11] // r26 <- *ia64_rse_rnat_addr(jmpbuf.ar_bsp) - mov ar.bspstore=r23 // restore ar.bspstore - ;; - ld8.nta r18=[r2],16 // b2 - ld8.nta r19=[r3],16 // b3 - ;; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (r16, r24) -#endif - ld8.nta r20=[r2],16 // b4 - ld8.nta r21=[r3],16 // b5 - ;; - ld8.nta r11=[r2],16 // ar.pfs - ld8.nta r22=[r3],56 // ar.lc - ;; - ld8.nta r24=[r2],32 // pr - mov b0=r16 - ;; - ldf.fill.nta f2=[r2],32 - ldf.fill.nta f3=[r3],32 - mov b1=r17 - ;; - ldf.fill.nta f4=[r2],32 - ldf.fill.nta f5=[r3],32 - mov b2=r18 - ;; - ldf.fill.nta f16=[r2],32 - ldf.fill.nta f17=[r3],32 - mov b3=r19 - ;; - ldf.fill.nta f18=[r2],32 - ldf.fill.nta f19=[r3],32 - mov b4=r20 - ;; - ldf.fill.nta f20=[r2],32 - ldf.fill.nta f21=[r3],32 - mov b5=r21 - ;; - ldf.fill.nta f22=[r2],32 - ldf.fill.nta f23=[r3],32 - mov ar.lc=r22 - ;; - ldf.fill.nta f24=[r2],32 - ldf.fill.nta f25=[r3],32 - cmp.eq p8,p9=0,in1 - ;; - ldf.fill.nta f26=[r2],32 - ldf.fill.nta f27=[r3],32 - mov ar.pfs=r11 - ;; - ldf.fill.nta f28=[r2],32 - ldf.fill.nta f29=[r3],32 - ;; - ldf.fill.nta f30=[r2] - ldf.fill.nta f31=[r3] -(p8) mov r8=1 - - mov ar.rnat=r26 // restore ar.rnat - ;; - mov ar.rsc=r27 // restore ar.rsc -(p9) mov r8=in1 - - invala // virt. -> phys. regnum mapping may change - mov pr=r24,-1 - ret -END(__longjmp) diff --git a/sysdeps/unix/sysv/linux/ia64/__sigstack_longjmp.c b/sysdeps/unix/sysv/linux/ia64/__sigstack_longjmp.c deleted file mode 100644 index 918bc3a6f8..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/__sigstack_longjmp.c +++ /dev/null @@ -1,167 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The public __longjmp() implementation is limited to jumping within - the same stack. That is, in general it is not possible to use this - __longjmp() implementation to cross from one stack to another. - In contrast, the __sigstack_longjmp() implemented here allows - crossing from the alternate signal stack to the normal stack - as a special case. */ - -#include -#include -#include -#include -#include - -#include -#include - -#define JB_SP 0 -#define JB_BSP 17 - -struct rbs_flush_values - { - unsigned long bsp; - unsigned long rsc; - unsigned long rnat; - }; - -extern struct rbs_flush_values __ia64_flush_rbs (void); -extern void __ia64_longjmp (__jmp_buf buf, int val, long rnat, long rsc) - __attribute__ ((__noreturn__)); - -static void -copy_rbs (unsigned long *dst, unsigned long *dst_end, unsigned long dst_rnat, - unsigned long *src, unsigned long *src_end, - unsigned long current_rnat) -{ - unsigned long dst_slot, src_rnat = 0, src_slot, *src_rnat_addr, nat_bit; - int first_time = 1; - - while (dst < dst_end) - { - dst_slot = ia64_rse_slot_num (dst); - if (dst_slot == 63) - { - *dst++ = dst_rnat; - dst_rnat = 0; - } - else - { - /* read source value, including NaT bit: */ - src_slot = ia64_rse_slot_num (src); - if (src_slot == 63) - { - /* skip src RNaT slot */ - ++src; - src_slot = 0; - } - if (first_time || src_slot == 0) - { - first_time = 0; - src_rnat_addr = ia64_rse_rnat_addr (src); - if (src_rnat_addr < src_end) - src_rnat = *src_rnat_addr; - else - src_rnat = current_rnat; - } - nat_bit = (src_rnat >> src_slot) & 1; - - assert (src < src_end); - - *dst++ = *src++; - if (nat_bit) - dst_rnat |= (1UL << dst_slot); - else - dst_rnat &= ~(1UL << dst_slot); - } - } - dst_slot = ia64_rse_slot_num (dst); - if (dst_slot > 0) - *ia64_rse_rnat_addr (dst) = dst_rnat; -} - -void -__sigstack_longjmp (__jmp_buf buf, int val) -{ - unsigned long *rbs_base, *bsp, *bspstore, *jb_bsp, jb_sp, ss_sp; - unsigned long ndirty, rnat, load_rnat, *jb_rnat_addr; - struct sigcontext *sc; - stack_t stk; - struct rbs_flush_values c; - - /* put RSE into enforced-lazy mode and return current bsp/rsc/rnat: */ - c = __ia64_flush_rbs (); - - jb_sp = ((unsigned long *) buf)[JB_SP]; - jb_bsp = ((unsigned long **) buf)[JB_BSP]; - - INTERNAL_SYSCALL_DECL (err); - (void) INTERNAL_SYSCALL (sigaltstack, err, 2, NULL, &stk); - - ss_sp = (unsigned long) stk.ss_sp; - jb_rnat_addr = ia64_rse_rnat_addr (jb_bsp); - - if ((stk.ss_flags & SS_ONSTACK) == 0 || jb_sp - ss_sp < stk.ss_size) - /* Normal non-stack-crossing longjmp; if the RNaT slot for the bsp - saved in the jump-buffer is the same as the one for the current - BSP, use the current AR.RNAT value, otherwise, load it from the - jump-buffer's RNaT-slot. */ - load_rnat = (ia64_rse_rnat_addr ((unsigned long *) c.bsp) != jb_rnat_addr); - else - { - /* If we are on the alternate signal-stack and the jump-buffer - lies outside the signal-stack, we may need to copy back the - dirty partition which was torn off and saved on the - signal-stack when the signal was delivered. - - Caveat: we assume that the top of the alternate signal-stack - stores the sigcontext structure of the signal that - caused the switch to the signal-stack. This should - be a fairly safe assumption but the kernel _could_ - do things differently.. */ - sc = ((struct sigcontext *) ((ss_sp + stk.ss_size) & -16) - 1); - - /* As a sanity-check, verify that the register-backing-store base - of the alternate signal-stack is where we expect it. */ - rbs_base = (unsigned long *) - ((ss_sp + sizeof (long) - 1) & -sizeof (long)); - - assert ((unsigned long) rbs_base == sc->sc_rbs_base); - - ndirty = ia64_rse_num_regs (rbs_base, rbs_base + (sc->sc_loadrs >> 19)); - bsp = (unsigned long *) sc->sc_ar_bsp; - bspstore = ia64_rse_skip_regs (bsp, -ndirty); - - if (bspstore < jb_bsp) - /* AR.BSPSTORE at the time of the signal was below the value - of AR.BSP saved in the jump-buffer => copy the missing - portion from the torn off dirty partition which got saved - on the alternate signal-stack. */ - copy_rbs (bspstore, jb_bsp, sc->sc_ar_rnat, - rbs_base, (unsigned long *) c.bsp, c.rnat); - - load_rnat = 1; - } - if (load_rnat) - rnat = *jb_rnat_addr; - else - rnat = c.rnat; - __ia64_longjmp (buf, val, rnat, c.rsc); -} diff --git a/sysdeps/unix/sysv/linux/ia64/__start_context.S b/sysdeps/unix/sysv/linux/ia64/__start_context.S deleted file mode 100644 index 862b7ab024..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/__start_context.S +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* When a context set up by __makecontext() is activated, control - transfers to __start_context. When we get here: - - b1 = entry point of function to call - in0 = address of UCP to resume after function returns - in1 = global pointer for __start_context - out0 .. outN = arguments for function */ - -ENTRY(__start_context) - .prologue - alloc r2 = ar.pfs, 2, 0, 8, 0 - - .save rp, r4 // terminate call chain with a NULL rp - mov r4 = r0 - ;; - - .body - br.call.sptk rp = b1 -1: - mov gp = in1 // restore gp - cmp.ne p6,p0 = in0, r0 // uc_link != 0 ? - ;; -(p6) mov out0 = in0 -(p6) br.call.sptk rp = __setcontext -.Lexit: - mov out0 = 0 - br.call.sptk rp = HIDDEN_JUMPTARGET(exit) - -1: br.cond.sptk .Lexit -END(__start_context) diff --git a/sysdeps/unix/sysv/linux/ia64/arch-fork.h b/sysdeps/unix/sysv/linux/ia64/arch-fork.h deleted file mode 100644 index 7e784d3232..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/arch-fork.h +++ /dev/null @@ -1,31 +0,0 @@ -/* ARCH_FORK definition for Linux fork implementation. IA64 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -#define ARCH_FORK() \ - INLINE_SYSCALL (clone2, 6, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ - NULL, 0, NULL, &THREAD_SELF->tid, NULL) - -#define ARCH_CLONE __clone2 diff --git a/sysdeps/unix/sysv/linux/ia64/bits/endian.h b/sysdeps/unix/sysv/linux/ia64/bits/endian.h deleted file mode 100644 index 98a5e23991..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/endian.h +++ /dev/null @@ -1,7 +0,0 @@ -/* Linux/ia64 is little-endian. */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#define __BYTE_ORDER __LITTLE_ENDIAN diff --git a/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h b/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h deleted file mode 100644 index 37d431d290..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h +++ /dev/null @@ -1,53 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux/IA64. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -/* Not necessary, files are always with 64bit off_t. */ -#define __O_LARGEFILE 0 - -/* Not necessary, we always have 64-bit offsets. */ -#define F_GETLK64 5 /* Get record locking info. */ -#define F_SETLK64 6 /* Set record locking info (non-blocking). */ -#define F_SETLKW64 7 /* Set record locking info (blocking). */ - -/* We don't need to support __USE_FILE_OFFSET64. */ -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/ia64/bits/ipc.h b/sysdeps/unix/sysv/linux/ia64/bits/ipc.h deleted file mode 100644 index ef25e2c44f..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/ipc.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IPC_H -# error "Never use directly; include instead." -#endif - -#include - -/* Mode bits for `msgget', `semget', and `shmget'. */ -#define IPC_CREAT 01000 /* Create key if key does not exist. */ -#define IPC_EXCL 02000 /* Fail if key exists. */ -#define IPC_NOWAIT 04000 /* Return error on wait. */ - -/* Control commands for `msgctl', `semctl', and `shmctl'. */ -#define IPC_RMID 0 /* Remove identifier. */ -#define IPC_SET 1 /* Set `ipc_perm' options. */ -#define IPC_STAT 2 /* Get `ipc_perm' options. */ -#define IPC_INFO 3 /* See ipcs. */ - -/* Special key values. */ -#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ - - -/* Data structure used to pass permission information to IPC operations. */ -struct ipc_perm - { - __key_t __key; /* Key. */ - __uid_t uid; /* Owner's user ID. */ - __gid_t gid; /* Owner's group ID. */ - __uid_t cuid; /* Creator's user ID. */ - __gid_t cgid; /* Creator's group ID. */ - __mode_t mode; /* Read/write permission. */ - unsigned short int __seq; /* Sequence number. */ - unsigned short int __pad1; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - }; diff --git a/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h b/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h deleted file mode 100644 index d1fab61d48..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Minimum guaranteed maximum values for system limits. Linux/IA-64 version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The kernel header pollutes the namespace with the NR_OPEN symbol - and defines LINK_MAX although filesystems have different maxima. A - similar thing is true for OPEN_MAX: the limit can be changed at - runtime and therefore the macro must not be defined. Remove this - after including the header if necessary. */ -#ifndef NR_OPEN -# define __undef_NR_OPEN -#endif -#ifndef LINK_MAX -# define __undef_LINK_MAX -#endif -#ifndef OPEN_MAX -# define __undef_OPEN_MAX -#endif -#ifndef ARG_MAX -# define __undef_ARG_MAX -#endif - -/* The kernel sources contain a file with all the needed information. */ -#include - -/* Have to remove NR_OPEN? */ -#ifdef __undef_NR_OPEN -# undef NR_OPEN -# undef __undef_NR_OPEN -#endif -/* Have to remove LINK_MAX? */ -#ifdef __undef_LINK_MAX -# undef LINK_MAX -# undef __undef_LINK_MAX -#endif -/* Have to remove OPEN_MAX? */ -#ifdef __undef_OPEN_MAX -# undef OPEN_MAX -# undef __undef_OPEN_MAX -#endif -/* Have to remove ARG_MAX? */ -#ifdef __undef_ARG_MAX -# undef ARG_MAX -# undef __undef_ARG_MAX -#endif - -/* The number of data keys per process. */ -#define _POSIX_THREAD_KEYS_MAX 128 -/* This is the value this implementation supports. */ -#define PTHREAD_KEYS_MAX 1024 - -/* Controlling the iterations of destructors for thread-specific data. */ -#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 -/* Number of iterations this implementation does. */ -#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS - -/* The number of threads per process. */ -#define _POSIX_THREAD_THREADS_MAX 64 -/* We have no predefined limit on the number of threads. */ -#undef PTHREAD_THREADS_MAX - -/* Maximum amount by which a process can descrease its asynchronous I/O - priority level. */ -#define AIO_PRIO_DELTA_MAX 20 - -/* Minimum size for a thread. We are free to choose a reasonable value. */ -#define PTHREAD_STACK_MIN 196608 - -/* Maximum number of timer expiration overruns. */ -#define DELAYTIMER_MAX 2147483647 - -/* Maximum tty name length. */ -#define TTY_NAME_MAX 32 - -/* Maximum login name length. This is arbitrary. */ -#define LOGIN_NAME_MAX 256 - -/* Maximum host name length. */ -#define HOST_NAME_MAX 64 - -/* Maximum message queue priority level. */ -#define MQ_PRIO_MAX 32768 - -/* Maximum value the semaphore can have. */ -#define SEM_VALUE_MAX (2147483647) diff --git a/sysdeps/unix/sysv/linux/ia64/bits/mman.h b/sysdeps/unix/sysv/linux/ia64/bits/mman.h deleted file mode 100644 index 914644d88c..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/mman.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/ia64 version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */ -# define MAP_GROWSUP 0x00200 /* Register stack-like segment */ -# define MAP_DENYWRITE 0x00800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x02000 /* Lock the mapping. */ -# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */ -# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ -# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/ia64/bits/msq.h b/sysdeps/unix/sysv/linux/ia64/bits/msq.h deleted file mode 100644 index 4ecbf36b57..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/msq.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contribute by David Mosberger-Tang - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_MSG_H -#error "Never use directly; include instead." -#endif - -#include - -/* Define options for message queue functions. */ -#define MSG_NOERROR 010000 /* no error if message is too big */ -#ifdef __USE_GNU -# define MSG_EXCEPT 020000 /* recv any msg except of specified type */ -# define MSG_COPY 040000 /* copy (not remove) all queue messages */ -#endif - -/* Types used in the structure definition. */ -typedef unsigned long int msgqnum_t; -typedef unsigned long int msglen_t; - - -/* Structure of record for one message inside the kernel. - The type `struct msg' is opaque. */ -struct msqid_ds -{ - struct ipc_perm msg_perm; /* structure describing operation permission */ - __time_t msg_stime; /* time of last msgsnd command */ - __time_t msg_rtime; /* time of last msgrcv command */ - __time_t msg_ctime; /* time of last change */ - unsigned long int __msg_cbytes; /* current number of bytes on queue */ - msgqnum_t msg_qnum; /* number of messages currently on queue */ - msglen_t msg_qbytes; /* max number of bytes allowed on queue */ - __pid_t msg_lspid; /* pid of last msgsnd() */ - __pid_t msg_lrpid; /* pid of last msgrcv() */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; -}; - -#ifdef __USE_MISC - -# define msg_cbytes __msg_cbytes - -/* ipcs ctl commands */ -# define MSG_STAT 11 -# define MSG_INFO 12 - -/* buffer for msgctl calls IPC_INFO, MSG_INFO */ -struct msginfo - { - int msgpool; - int msgmap; - int msgmax; - int msgmnb; - int msgmni; - int msgssz; - int msgtql; - unsigned short int msgseg; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/ia64/bits/sem.h b/sysdeps/unix/sysv/linux/ia64/bits/sem.h deleted file mode 100644 index 16a69771bf..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/sem.h +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SEM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Flags for `semop'. */ -#define SEM_UNDO 0x1000 /* undo the operation on exit */ - -/* Commands for `semctl'. */ -#define GETPID 11 /* get sempid */ -#define GETVAL 12 /* get semval */ -#define GETALL 13 /* get all semval's */ -#define GETNCNT 14 /* get semncnt */ -#define GETZCNT 15 /* get semzcnt */ -#define SETVAL 16 /* set semval */ -#define SETALL 17 /* set all semval's */ - - -/* Data structure describing a set of semaphores. */ -struct semid_ds -{ - struct ipc_perm sem_perm; /* operation permission struct */ - __time_t sem_otime; /* last semop() time */ - __time_t sem_ctime; /* last time changed by semctl() */ - unsigned long int sem_nsems; /* number of semaphores in set */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; -}; - -/* The user should define a union like the following to use it for arguments - for `semctl'. - - union semun - { - int val; <= value for SETVAL - struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET - unsigned short int *array; <= array for GETALL & SETALL - struct seminfo *__buf; <= buffer for IPC_INFO - }; - - Previous versions of this file used to define this union but this is - incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether - one must define the union or not. */ -#define _SEM_SEMUN_UNDEFINED 1 - -#ifdef __USE_MISC - -/* ipcs ctl cmds */ -# define SEM_STAT 18 -# define SEM_INFO 19 - -struct seminfo -{ - int semmap; - int semmni; - int semmns; - int semmnu; - int semmsl; - int semopm; - int semume; - int semusz; - int semvmx; - int semaem; -}; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/ia64/bits/setjmp.h b/sysdeps/unix/sysv/linux/ia64/bits/setjmp.h deleted file mode 100644 index 5f2025d2ff..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/setjmp.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Define the machine-dependent type `jmp_buf'. Linux/IA-64 version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include directly; use instead." -#endif - -/* User code must not depend on the internal representation of jmp_buf. */ - -#define _JBLEN 70 - -/* the __jmp_buf element type should be __float80 per ABI... */ -typedef long __jmp_buf[_JBLEN] __attribute__ ((__aligned__ (16))); /* guarantees 128-bit alignment! */ - -#endif /* bits/setjmp.h */ diff --git a/sysdeps/unix/sysv/linux/ia64/bits/shm.h b/sysdeps/unix/sysv/linux/ia64/bits/shm.h deleted file mode 100644 index add8a60f5a..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/shm.h +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SHM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from */ -#define SHM_W 0200 /* or S_IWUGO from */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ -#define SHM_EXEC 0100000 /* execution access */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -/* Segment low boundary address multiple. */ -#define SHMLBA (1024 * 1024) - -/* Type to count number of attaches. */ -typedef unsigned long int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ - size_t shm_segsz; /* size of segment in bytes */ - __time_t shm_atime; /* time of last shmat() */ - __time_t shm_dtime; /* time of last shmdt() */ - __time_t shm_ctime; /* time of last change by shmctl() */ - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - unsigned long int shmmax; - unsigned long int shmmin; - unsigned long int shmmni; - unsigned long int shmseg; - unsigned long int shmall; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - unsigned long int __glibc_reserved3; - unsigned long int __glibc_reserved4; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/ia64/bits/sigaction.h b/sysdeps/unix/sysv/linux/ia64/bits/sigaction.h deleted file mode 100644 index 099fbf55c9..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/sigaction.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Definitions for Linux/ia64 sigaction. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SIGNAL_H -# error "Never include directly; use instead." -#endif - -/* Structure describing the action to be taken when a signal arrives. */ -struct sigaction - { - /* Signal handler. */ -#ifdef __USE_POSIX199309 - union - { - /* Used if SA_SIGINFO is not set. */ - __sighandler_t sa_handler; - /* Used if SA_SIGINFO is set. */ - void (*sa_sigaction) (int, siginfo_t *, void *); - } - __sigaction_handler; -# define sa_handler __sigaction_handler.sa_handler -# define sa_sigaction __sigaction_handler.sa_sigaction -#else - __sighandler_t sa_handler; -#endif - - /* Special flags. */ - int sa_flags; - int __glibc_reserved0; - - /* Additional set of signals to be blocked. */ - __sigset_t sa_mask; - }; - -/* Bits in `sa_flags'. */ -#define SA_NOCLDSTOP 0x00000001 /* Don't send SIGCHLD when children stop. */ -#define SA_NOCLDWAIT 0x00000002 /* Don't create zombie on child death. */ -#define SA_SIGINFO 0x00000004 -#if defined __USE_UNIX98 || defined __USE_MISC -# define SA_ONSTACK 0x08000000 /* Use signal stack by using `sa_restorer'. */ -#endif -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 -# define SA_RESTART 0x10000000 /* Restart syscall on signal return. */ -# define SA_NODEFER 0x40000000 /* Don't automatically block the signal - when its handler is being executed. */ -# define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler. */ -#endif -#ifdef __USE_MISC -# define SA_INTERRUPT 0x20000000 /* Historic no-op. */ - -/* Some aliases for the SA_ constants. */ -# define SA_NOMASK SA_NODEFER -# define SA_ONESHOT SA_RESETHAND -# define SA_STACK SA_ONSTACK -#endif - -/* Values for the HOW argument to `sigprocmask'. */ -#define SIG_BLOCK 0 /* for blocking signals */ -#define SIG_UNBLOCK 1 /* for unblocking signals */ -#define SIG_SETMASK 2 /* for setting the signal mask */ diff --git a/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h b/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h deleted file mode 100644 index c81463d809..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jes Sorensen , July 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SIGCONTEXT_H -#define _BITS_SIGCONTEXT_H 1 - -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H -# error "Never use directly; include instead." -#endif - -#define __need_size_t -#include -#include -#include -#include -#include - -struct __ia64_fpreg - { - union - { - unsigned long bits[2]; - } u; - } __attribute__ ((__aligned__ (16))); - -struct sigcontext -{ - unsigned long int sc_flags; /* see manifest constants below */ - unsigned long int sc_nat; /* bit i == 1 iff scratch reg gr[i] is a NaT */ - stack_t sc_stack; /* previously active stack */ - - unsigned long int sc_ip; /* instruction pointer */ - unsigned long int sc_cfm; /* current frame marker */ - unsigned long int sc_um; /* user mask bits */ - unsigned long int sc_ar_rsc; /* register stack configuration register */ - unsigned long int sc_ar_bsp; /* backing store pointer */ - unsigned long int sc_ar_rnat; /* RSE NaT collection register */ - unsigned long int sc_ar_ccv; /* compare & exchange compare value register */ - unsigned long int sc_ar_unat; /* ar.unat of interrupted context */ - unsigned long int sc_ar_fpsr; /* floating-point status register */ - unsigned long int sc_ar_pfs; /* previous function state */ - unsigned long int sc_ar_lc; /* loop count register */ - unsigned long int sc_pr; /* predicate registers */ - unsigned long int sc_br[8]; /* branch registers */ - unsigned long int sc_gr[32]; /* general registers (static partition) */ - struct __ia64_fpreg sc_fr[128]; /* floating-point registers */ - unsigned long int sc_rbs_base;/* NULL or new base of sighandler's rbs */ - unsigned long int sc_loadrs; /* see description above */ - unsigned long int sc_ar25; /* cmp8xchg16 uses this */ - unsigned long int sc_ar26; /* rsvd for scratch use */ - unsigned long int sc_rsvd[12];/* reserved for future use */ - - /* sc_mask is actually an sigset_t but we don't want to - * include the kernel headers here. */ - unsigned long int sc_mask; /* signal mask to restore after handler returns */ -}; - -/* sc_flag bit definitions. */ -#define IA64_SC_FLAG_ONSTACK_BIT 0 /* is handler running on signal stack? */ -#define IA64_SC_FLAG_IN_SYSCALL_BIT 1 /* did signal interrupt a syscall? */ -#define IA64_SC_FLAG_FPH_VALID_BIT 2 /* is state in f[32]-f[127] valid? */ - -#define IA64_SC_FLAG_ONSTACK (1 << IA64_SC_FLAG_ONSTACK_BIT) -#define IA64_SC_FLAG_IN_SYSCALL (1 << IA64_SC_FLAG_IN_SYSCALL_BIT) -#define IA64_SC_FLAG_FPH_VALID (1 << IA64_SC_FLAG_FPH_VALID_BIT) - -#endif /* _BITS_SIGCONTEXT_H */ diff --git a/sysdeps/unix/sysv/linux/ia64/bits/siginfo-arch.h b/sysdeps/unix/sysv/linux/ia64/bits/siginfo-arch.h deleted file mode 100644 index 8b5647062c..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/siginfo-arch.h +++ /dev/null @@ -1,17 +0,0 @@ -/* Architecture-specific adjustments to siginfo_t. ia64 version. */ -#ifndef _BITS_SIGINFO_ARCH_H - -#define __SI_HAVE_SIGSYS 0 - -#define __SI_SIGFAULT_ADDL \ - int _si_imm; \ - unsigned int _si_flags; \ - unsigned long int _si_isr; - -#ifdef __USE_GNU -# define si_imm _sifields._sigfault._si_imm -# define si_segvflags _sifields._sigfault._si_flags -# define si_isr _sifields._sigfault._si_isr -#endif - -#endif diff --git a/sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h b/sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h deleted file mode 100644 index 4c5c4da516..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Architecture-specific additional siginfo constants. ia64 version. */ -#ifndef _BITS_SIGINFO_CONSTS_ARCH_H -#define _BITS_SIGINFO_CONSTS_ARCH_H 1 - -/* `si_code' values for SIGILL signal. */ -enum -{ - ILL_BADIADDR = ILL_BADSTK + 1, /* Unimplemented instruction address. */ -#define ILL_BADIADDR ILL_BADIADDR - ILL_BREAK -#define ILL_BREAK ILL_BREAK -}; - -/* `si_code' values for SIGFPE signal. */ -enum -{ - FPE_DECOVF = FPE_FLTSUB + 1, -#define FPE_DECOVF FPE_DECOVF - FPE_DECDIV, -#define FPE_DECDIV FPE_DECDIV - FPE_DECERR, -#define FPE_DECERR FPE_DECERR - FPE_INVASC, -#define FPE_INVASC FPE_INVASC - FPE_INVDEC -#define FPE_INVDEC FPE_INVDEC -}; - -/* `si_code' values for SIGSEGV signal. */ -enum -{ - SEGV_PSTKOVF = SEGV_ACCERR + 1 -#define SEGV_PSTKOVF SEGV_PSTKOVF -}; - -/* `si_code' values for SIGTRAP signal. */ -enum -{ - TRAP_BRANCH = TRAP_TRACE + 1, -#define TRAP_BRANCH TRAP_BRANCH - TRAP_HWBKPT -#define TRAP_HWBKPT TRAP_HWBKPT -}; - -#endif diff --git a/sysdeps/unix/sysv/linux/ia64/bits/sigstack.h b/sysdeps/unix/sysv/linux/ia64/bits/sigstack.h deleted file mode 100644 index aabefbb1e3..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/sigstack.h +++ /dev/null @@ -1,36 +0,0 @@ -/* sigstack, sigaltstack definitions. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SIGSTACK_H -#define _BITS_SIGSTACK_H 1 - -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H -# error "Never include this file directly. Use instead" -#endif - -/* Minimum stack size for a signal handler. - - Yes, this should be 131072 but the constant got defined incorrectly - in the kernel and we have to live with it. Users should in any case - use SIGSTKSZ as the size user-supplied buffers should have. */ -#define MINSIGSTKSZ 131027 - -/* System default stack size. */ -#define SIGSTKSZ 262144 - -#endif /* bits/sigstack.h */ diff --git a/sysdeps/unix/sysv/linux/ia64/bits/stat.h b/sysdeps/unix/sysv/linux/ia64/bits/stat.h deleted file mode 100644 index 0e0b939b56..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/stat.h +++ /dev/null @@ -1,149 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STAT_H -#define _BITS_STAT_H 1 - -/* Versions of the `struct stat' data structure. */ -#define _STAT_VER_KERNEL 0 -#define _STAT_VER_LINUX 1 -#define _STAT_VER _STAT_VER_LINUX - -/* Versions of the `xmknod' interface. */ -#define _MKNOD_VER_LINUX 0 - -struct stat - { - __dev_t st_dev; /* Device. */ - __ino_t st_ino; /* File serial number. */ - __nlink_t st_nlink; /* Link count. */ - __mode_t st_mode; /* File mode. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - int __glibc_reserved0; - __dev_t st_rdev; /* Device number, if device. */ - __off_t st_size; /* Size of file, in bytes. */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - __blkcnt_t st_blocks; /* Nr. 512-byte blocks allocated. */ - long int __glibc_reserved[3]; - }; - -#ifdef __USE_LARGEFILE64 -/* Note stat64 is the same shape as stat. */ -struct stat64 - { - __dev_t st_dev; /* Device. */ - __ino64_t st_ino; /* File serial number. */ - __nlink_t st_nlink; /* Link count. */ - __mode_t st_mode; /* File mode. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - int __glibc_reserved0; - __dev_t st_rdev; /* Device number, if device. */ - __off_t st_size; /* Size of file, in bytes. */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ - long int __glibc_reserved[3]; - }; -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -/* Nanosecond resolution time values are supported. */ -#define _STATBUF_ST_NSEC - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFIFO 0010000 /* FIFO. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ - -/* POSIX.1b objects. Note that these macros always evaluate to zero. But - they do it by enforcing the correct use of the macros. */ -#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 0400 /* Read by owner. */ -#define __S_IWRITE 0200 /* Write by owner. */ -#define __S_IEXEC 0100 /* Execute by owner. */ - -#ifdef __USE_ATFILE -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) -#endif - -#endif /* bits//stat.h */ diff --git a/sysdeps/unix/sysv/linux/ia64/brk.S b/sysdeps/unix/sysv/linux/ia64/brk.S deleted file mode 100644 index cc7650b78c..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/brk.S +++ /dev/null @@ -1,51 +0,0 @@ -/* brk system call for Linux/ia64 - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Written by Stephane Eranian and - Jes Sorensen, , April 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include -#include - - .global __curbrk - .type __curbrk,@object - .size __curbrk,8 - .data - .align 8 -__curbrk: - data8 0 - -weak_alias (__curbrk, ___brk_addr) - -LEAF(__brk) - .regstk 1, 0, 0, 0 - DO_CALL(__NR_brk) - cmp.ltu p6, p0 = ret0, in0 - addl r9 = @ltoff(__curbrk), gp - ;; - ld8 r9 = [r9] -(p6) mov ret0 = ENOMEM -(p6) br.cond.spnt.few __syscall_error - ;; - st8 [r9] = ret0 - mov ret0 = 0 - ret -END(__brk) - -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/ia64/bsd-_setjmp.S b/sysdeps/unix/sysv/linux/ia64/bsd-_setjmp.S deleted file mode 100644 index 4e6a2da560..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bsd-_setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* _setjmp is in setjmp.S */ diff --git a/sysdeps/unix/sysv/linux/ia64/bsd-setjmp.S b/sysdeps/unix/sysv/linux/ia64/bsd-setjmp.S deleted file mode 100644 index 1da848d2f1..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bsd-setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* setjmp is in setjmp.S */ diff --git a/sysdeps/unix/sysv/linux/ia64/c++-types.data b/sysdeps/unix/sysv/linux/ia64/c++-types.data deleted file mode 100644 index 23c11dc41b..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:l -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:m -fd_mask:l -fsblkcnt64_t:m -fsblkcnt_t:m -fsfilcnt64_t:m -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:m -ino_t:m -int16_t:s -int32_t:i -int64_t:l -int8_t:a -intptr_t:l -key_t:i -loff_t:l -mode_t:j -nlink_t:m -off64_t:l -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:l -register_t:l -rlim64_t:m -rlim_t:m -sigset_t:10__sigset_t -size_t:m -socklen_t:j -ssize_t:l -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:m -u_int8_t:h -ulong:m -u_long:m -u_quad_t:m -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/ia64/clone.S b/sysdeps/unix/sysv/linux/ia64/clone.S deleted file mode 100644 index 0cfaeab64e..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/clone.S +++ /dev/null @@ -1 +0,0 @@ -/* clone is not supported under Linux/ia64, use clone2. */ diff --git a/sysdeps/unix/sysv/linux/ia64/clone2.S b/sysdeps/unix/sysv/linux/ia64/clone2.S deleted file mode 100644 index 9b59473c80..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/clone2.S +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include -#include - - -/* int __clone2(int (*fn) (void *arg), void *child_stack_base, */ -/* size_t child_stack_size, int flags, void *arg, */ -/* pid_t *parent_tid, void *tls, pid_t *child_tid) */ - -#define CHILD p8 -#define PARENT p9 - -ENTRY(__clone2) - .prologue - alloc r2=ar.pfs,8,1,6,0 - cmp.eq p6,p0=0,in0 - cmp.eq p7,p0=0,in1 - mov r8=EINVAL - mov out0=in3 /* Flags are first syscall argument. */ - mov out1=in1 /* Stack address. */ -(p6) br.cond.spnt.many __syscall_error /* no NULL function pointers */ -(p7) br.cond.spnt.many __syscall_error /* no NULL stack pointers */ - ;; - mov out2=in2 /* Stack size. */ - mov out3=in5 /* Parent TID Pointer */ - mov out4=in7 /* Child TID Pointer */ - mov out5=in6 /* TLS pointer */ - /* - * clone2() is special: the child cannot execute br.ret right - * after the system call returns, because it starts out - * executing on an empty stack. Because of this, we can't use - * the new (lightweight) syscall convention here. Instead, we - * just fall back on always using "break". - * - * Furthermore, since the child starts with an empty stack, we - * need to avoid unwinding past invalid memory. To that end, - * we'll pretend now that __clone2() is the end of the - * call-chain. This is wrong for the parent, but only until - * it returns from clone2() but it's better than the - * alternative. - */ - mov r15=SYS_ify (clone2) - .save rp, r0 - break __BREAK_SYSCALL - .body - cmp.eq p6,p0=-1,r10 - cmp.eq CHILD,PARENT=0,r8 /* Are we the child? */ -(p6) br.cond.spnt.many __syscall_error - ;; -(CHILD) mov loc0=gp -(PARENT) ret - ;; - ld8 out1=[in0],8 /* Retrieve code pointer. */ - mov out0=in4 /* Pass proper argument to fn */ - ;; - ld8 gp=[in0] /* Load function gp. */ - mov b6=out1 - br.call.dptk.many rp=b6 /* Call fn(arg) in the child */ - ;; - mov out0=r8 /* Argument to _exit */ - mov gp=loc0 - .globl HIDDEN_JUMPTARGET(_exit) - br.call.dpnt.many rp=HIDDEN_JUMPTARGET(_exit) - /* call _exit with result from fn. */ - ret /* Not reached. */ -PSEUDO_END(__clone2) - -libc_hidden_def (__clone2) - -/* For now we leave __clone undefined. This is unlikely to be a */ -/* problem, since at least the i386 __clone in glibc always failed */ -/* with a 0 sp (eventhough the kernel explicitly handled it). */ -/* Thus all such calls needed to pass an explicit sp, and as a result, */ -/* would be unlikely to work on ia64. */ diff --git a/sysdeps/unix/sysv/linux/ia64/configure b/sysdeps/unix/sysv/linux/ia64/configure deleted file mode 100644 index 3cf72371ef..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/configure +++ /dev/null @@ -1,8 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/ia64 - -ldd_rewrite_script=$dir/ldd-rewrite.sed - -# First version with support for the accept4 system call. -# Linux 3.3 includes it as well. -arch_minimum_kernel=3.2.18 diff --git a/sysdeps/unix/sysv/linux/ia64/configure.ac b/sysdeps/unix/sysv/linux/ia64/configure.ac deleted file mode 100644 index 94a578c12d..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/configure.ac +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/ia64 - -ldd_rewrite_script=$dir/ldd-rewrite.sed - -# First version with support for the accept4 system call. -# Linux 3.3 includes it as well. -arch_minimum_kernel=3.2.18 diff --git a/sysdeps/unix/sysv/linux/ia64/dl-brk.S b/sysdeps/unix/sysv/linux/ia64/dl-brk.S deleted file mode 100644 index eeb96544e3..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/dl-brk.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/ia64/dl-cache.h b/sysdeps/unix/sysv/linux/ia64/dl-cache.h deleted file mode 100644 index 79cbfff408..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/dl-cache.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define _DL_CACHE_DEFAULT_ID 0x203 - -#define _dl_cache_check_flags(flags) \ - ((flags) == _DL_CACHE_DEFAULT_ID) - -#include_next diff --git a/sysdeps/unix/sysv/linux/ia64/dl-static.c b/sysdeps/unix/sysv/linux/ia64/dl-static.c deleted file mode 100644 index 25e5c7e152..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/dl-static.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Variable initialization. IA-64 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef SHARED - -void -_dl_var_init (void *array[]) -{ - /* It has to match "variables" below. */ - enum - { - DL_PAGESIZE = 0, - DL_CLKTCK - }; - - GLRO(dl_pagesize) = *((size_t *) array[DL_PAGESIZE]); - GLRO(dl_clktck) = *((int *) array[DL_CLKTCK]); -} - -#else - -static void *variables[] = -{ - &GLRO(dl_pagesize), - &GLRO(dl_clktck) -}; - -void -_dl_static_init (struct link_map *map) -{ - const ElfW(Sym) *ref = NULL; - lookup_t loadbase; - void (*f) (void *[]); - - loadbase = _dl_lookup_symbol_x ("_dl_var_init", map, &ref, - map->l_local_scope, NULL, 0, 1, NULL); - if (ref != NULL) - { - f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref); - f (variables); - } -} - -#endif diff --git a/sysdeps/unix/sysv/linux/ia64/dl-sysdep.h b/sysdeps/unix/sysv/linux/ia64/dl-sysdep.h deleted file mode 100644 index 7a18385cf4..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/dl-sysdep.h +++ /dev/null @@ -1,55 +0,0 @@ -/* System-specific settings for dynamic linker code. IA-64 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_IA64_DL_SYSDEP_H -#define _LINUX_IA64_DL_SYSDEP_H 1 - -#include_next - -/* Traditionally system calls have been made using break 0x100000. A - second method was introduced which, if possible, will use the EPC - instruction. To signal the presence and where to find the code the - kernel passes an AT_SYSINFO_EHDR pointer in the auxiliary vector to - the application. */ -#define NEED_DL_SYSINFO 1 -#define USE_DL_SYSINFO 1 - -#ifndef __ASSEMBLER__ -/* Don't declare this as a function---we want it's entry-point, not - it's function descriptor... */ -extern int _dl_sysinfo_break attribute_hidden; -# define DL_SYSINFO_DEFAULT ((uintptr_t) &_dl_sysinfo_break) -# define DL_SYSINFO_IMPLEMENTATION \ - asm (".text\n\t" \ - ".hidden _dl_sysinfo_break\n\t" \ - ".proc _dl_sysinfo_break\n\t" \ - "_dl_sysinfo_break:\n\t" \ - ".prologue\n\t" \ - ".altrp b6\n\t" \ - ".body\n\t" \ - "break 0x100000;\n\t" \ - "br.ret.sptk.many b6;\n\t" \ - ".endp _dl_sysinfo_break\n\t" \ - ".previous"); -#endif - -/* _dl_argv cannot be attribute_relro, because _dl_start_user - might write into it after _dl_start returns. */ -#define DL_ARGV_NOT_RELRO 1 - -#endif /* dl-sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/ia64/get_clockfreq.c b/sysdeps/unix/sysv/linux/ia64/get_clockfreq.c deleted file mode 100644 index 603c7d516e..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/get_clockfreq.c +++ /dev/null @@ -1,87 +0,0 @@ -/* Get frequency of the system processor. IA-64/Linux version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -hp_timing_t -__get_clockfreq (void) -{ - /* We read the information from the /proc filesystem. It contains at - least one line like - itc MHz : 733.390988 - We search for this line and convert the number in an integer. */ - static hp_timing_t result; - int fd; - - /* If this function was called before, we know the result. */ - if (result != 0) - return result; - - fd = __open ("/proc/cpuinfo", O_RDONLY); - if (__builtin_expect (fd != -1, 1)) - { - /* XXX AFAIK the /proc filesystem can generate "files" only up - to a size of 4096 bytes. */ - char buf[4096]; - ssize_t n; - - n = __read (fd, buf, sizeof buf); - if (__builtin_expect (n, 1) > 0) - { - char *mhz = memmem (buf, n, "itc MHz", 7); - - if (__builtin_expect (mhz != NULL, 1)) - { - char *endp = buf + n; - int seen_decpoint = 0; - int ndigits = 0; - - /* Search for the beginning of the string. */ - while (mhz < endp && (*mhz < '0' || *mhz > '9') && *mhz != '\n') - ++mhz; - - while (mhz < endp && *mhz != '\n') - { - if (*mhz >= '0' && *mhz <= '9') - { - result *= 10; - result += *mhz - '0'; - if (seen_decpoint) - ++ndigits; - } - else if (*mhz == '.') - seen_decpoint = 1; - - ++mhz; - } - - /* Compensate for missing digits at the end. */ - while (ndigits++ < 6) - result *= 10; - } - } - - __close (fd); - } - - return result; -} diff --git a/sysdeps/unix/sysv/linux/ia64/getclktck.c b/sysdeps/unix/sysv/linux/ia64/getclktck.c deleted file mode 100644 index 6636bbe689..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/getclktck.c +++ /dev/null @@ -1,2 +0,0 @@ -#define SYSTEM_CLK_TCK 1024 -#include diff --git a/sysdeps/unix/sysv/linux/ia64/getcontext.S b/sysdeps/unix/sysv/linux/ia64/getcontext.S deleted file mode 100644 index c3b20c7624..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/getcontext.S +++ /dev/null @@ -1,157 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "ucontext_i.h" - -/* __getcontext (ucontext_t *ucp) - - Saves the machine context in UCP such that when it is activated, - it appears as if __getcontext() returned again. The only difference - is that on a first return, r9 contains 1 and on a subsequent - return, it contains 0. - - This implementation in intended to be used for *synchronous* context - switches only. Therefore, it does not have to save anything - other than the PRESERVED state. */ - -ENTRY(__getcontext) - .prologue - .body - alloc r11 = ar.pfs, 1, 0, 4, 0 - - // sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask): - - mov r3 = SC_MASK - mov out0 = SIG_BLOCK - - flushrs // save dirty partition on rbs - mov out1 = 0 - add out2 = r3, in0 - - mov out3 = 8 // sizeof kernel sigset_t - DO_CALL(__NR_rt_sigprocmask) - - mov.m rFPSR = ar.fpsr - mov.m rRSC = ar.rsc - add r2 = SC_GR+1*8, r32 - ;; - mov.m rBSP = ar.bsp - .prologue - .save ar.unat, rUNAT - mov.m rUNAT = ar.unat - .body - add r3 = SC_GR+4*8, r32 - ;; - -.mem.offset 0,0; st8.spill [r2] = r1, (5*8 - 1*8) -.mem.offset 8,0; st8.spill [r3] = r4, 16 - mov rPFS = r11 - ;; -.mem.offset 0,0; st8.spill [r2] = r5, 16 -.mem.offset 8,0; st8.spill [r3] = r6, 48 - and rTMP = ~0x3, rRSC - ;; -.mem.offset 0,0; st8.spill [r2] = r7, (SC_FR+2*16-(SC_GR+7*8)) -.mem.offset 8,0; st8.spill [r3] = sp, (SC_FR+3*16-(SC_GR+12*8)) - ;; - mov.m ar.rsc = rTMP // put RSE into enforced lazy mode - mov.m rNAT = ar.unat - mov.i rLC = ar.lc - ;; - mov.m rRNAT = ar.rnat - mov.m ar.rsc = rRSC // restore RSE mode - mov rPR = pr - - /* - * Rotate NaT bits by rPOS positions to the right: - */ - stf.spill [r2] = f2, 32 - stf.spill [r3] = f3, 32 - add rPOS = SC_GR, r32 // rPOS <- &sc_gr[0] - ;; - stf.spill [r2] = f4, (16*16-4*16) - stf.spill [r3] = f5, (17*16-5*16) - extr.u rPOS = rPOS, 3, 6 // get NaT bit number for r0 - ;; - stf.spill [r2] = f16, 32 - stf.spill [r3] = f17, 32 - sub rCPOS = 64, rPOS - ;; - stf.spill [r2] = f18, 32 - stf.spill [r3] = f19, 32 - shr.u rTMP = rNAT, rPOS - ;; - stf.spill [r2] = f20, 32 - stf.spill [r3] = f21, 32 - shl rNAT = rNAT, rCPOS - ;; - stf.spill [r2] = f22, 32 - stf.spill [r3] = f23, 32 - or rNAT = rNAT, rTMP - ;; - stf.spill [r2] = f24, 32 - stf.spill [r3] = f25, 32 - mov r8 = 0 - ;; - stf.spill [r2] = f26, 32 - stf.spill [r3] = f27, 32 - mov r9 = 1 - ;; - stf.spill [r2] = f28, 32 - stf.spill [r3] = f29, 32 - mov rB0 = b0 - ;; - stf.spill [r2] = f30, 32 - stf.spill [r3] = f31, 32 - mov rB1 = b1 - ;; - mov ar.unat = rUNAT // we're done spilling integer regs; restore caller's UNaT - add r2 = SC_NAT, r32 - add r3 = SC_BSP, r32 - ;; - st8 [r2] = rNAT, (SC_RNAT-SC_NAT) - st8 [r3] = rBSP, (SC_UNAT-SC_BSP) - mov rB2 = b2 - ;; - st8 [r2] = rRNAT, (SC_FPSR-SC_RNAT) - st8 [r3] = rUNAT, (SC_PFS-SC_UNAT) - mov rB3 = b3 - ;; - st8 [r2] = rFPSR, (SC_LC-SC_FPSR) - st8 [r3] = rPFS, (SC_PR-SC_PFS) - mov rB4 = b4 - ;; - st8 [r2] = rLC, (SC_BR+0*8-SC_LC) - st8 [r3] = rPR, (SC_BR+1*8-SC_PR) - mov rB5 = b5 - ;; - st8 [r2] = rB0, 16 - st8 [r3] = rB1, 16 - ;; - st8 [r2] = rB2, 16 - st8 [r3] = rB3, 16 - ;; - st8 [r2] = rB4 - st8 [r3] = rB5 - ret -END(__getcontext) - -weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c deleted file mode 100644 index 2207c88c47..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -static int itc_usable; - -static int -has_cpuclock (void) -{ - if (__builtin_expect (itc_usable == 0, 0)) - { - int newval = 1; - int fd = open_not_cancel_2 ("/proc/sal/itc_drift", O_RDONLY); - if (__builtin_expect (fd != -1, 1)) - { - char buf[16]; - /* We expect the file to contain a single digit followed by - a newline. If the format changes we better not rely on - the file content. */ - if (read_not_cancel (fd, buf, sizeof buf) != 2 - || buf[0] != '0' || buf[1] != '\n') - newval = -1; - - close_not_cancel_no_status (fd); - } - - itc_usable = newval; - } - - return itc_usable; -} diff --git a/sysdeps/unix/sysv/linux/ia64/ioperm.c b/sysdeps/unix/sysv/linux/ia64/ioperm.c deleted file mode 100644 index daaba28f09..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/ioperm.c +++ /dev/null @@ -1,201 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* I/O access is restricted to ISA port space (ports 0..65535). - Modern devices hopefully are sane enough not to put any performance - critical registers in i/o space. - - On the first call to ioperm() or iopl(), the entire (E)ISA port - space is mapped into the virtual address space at address io.base. - mprotect() calls are then used to enable/disable access to ports. - Per 4KB page, there are 4 I/O ports. */ - -#include -#include -#include -#include -#include -#include - -#include -#include - -#define MAX_PORT 0x10000 - -/* - * Memory fence w/accept. This should never be used in code that is - * not IA-64 specific. - */ -#define __ia64_mf_a() __asm__ __volatile__ ("mf.a" ::: "memory") - -static struct - { - unsigned long int base; - unsigned long int page_mask; - } -io; - -__inline__ unsigned long int -io_offset (unsigned long int port) -{ - return ((port >> 2) << 12) | (port & 0xfff); -} - -int -_ioperm (unsigned long int from, unsigned long int num, int turn_on) -{ - unsigned long int base; - - /* this test isn't as silly as it may look like; consider overflows! */ - if (from >= MAX_PORT || from + num > MAX_PORT) - { - __set_errno (EINVAL); - return -1; - } - - if (turn_on) - { - if (!io.base) - { - unsigned long phys_io_base, len; - int fd; - - io.page_mask = ~(__getpagesize() - 1); - - /* get I/O base physical address from ar.k0 as per PRM: */ - __asm__ ("mov %0=ar.k0" : "=r"(phys_io_base)); - - /* The O_SYNC flag tells the /dev/mem driver to map the - memory uncached: */ - fd = __open ("/dev/mem", O_RDWR | O_SYNC); - if (fd < 0) - return -1; - - len = io_offset (MAX_PORT); - /* see comment below */ - base = (unsigned long int) __mmap (0, len, PROT_READ | PROT_WRITE, MAP_SHARED, - fd, phys_io_base); - __close (fd); - - if ((long) base == -1) - return -1; - - io.base = base; - } - } - else - { - if (!io.base) - return 0; /* never was turned on... */ - } - - /* We can't do mprotect because that would cause us to lose the - uncached flag that the /dev/mem driver turned on. A MAP_UNCACHED - flag seems so much cleaner... - - See the history of this file for a version that tried mprotect. */ - return 0; -} - -int -_iopl (unsigned int level) -{ - if (level > 3) - { - __set_errno (EINVAL); - return -1; - } - if (level) - { - int retval = _ioperm (0, MAX_PORT, 1); - /* Match the documented error returns of the x86 version. */ - if (retval < 0 && errno == EACCES) - __set_errno (EPERM); - return retval; - } - return 0; -} - -unsigned int -_inb (unsigned long int port) -{ - volatile unsigned char *addr = (void *) io.base + io_offset (port); - unsigned char ret; - - ret = *addr; - __ia64_mf_a(); - return ret; -} - -unsigned int -_inw (unsigned long int port) -{ - volatile unsigned short *addr = (void *) io.base + io_offset (port); - unsigned short ret; - - ret = *addr; - __ia64_mf_a(); - return ret; -} - -unsigned int -_inl (unsigned long int port) -{ - volatile unsigned int *addr = (void *) io.base + io_offset (port); - unsigned int ret; - - ret = *addr; - __ia64_mf_a(); - return ret; -} - -void -_outb (unsigned char val, unsigned long int port) -{ - volatile unsigned char *addr = (void *) io.base + io_offset (port); - - *addr = val; - __ia64_mf_a(); -} - -void -_outw (unsigned short val, unsigned long int port) -{ - volatile unsigned short *addr = (void *) io.base + io_offset (port); - - *addr = val; - __ia64_mf_a(); -} - -void -_outl (unsigned int val, unsigned long int port) -{ - volatile unsigned int *addr = (void *) io.base + io_offset (port); - - *addr = val; - __ia64_mf_a(); -} - -weak_alias (_ioperm, ioperm); -weak_alias (_iopl, iopl); -weak_alias (_inb, inb); -weak_alias (_inw, inw); -weak_alias (_inl, inl); -weak_alias (_outb, outb); -weak_alias (_outw, outw); -weak_alias (_outl, outl); diff --git a/sysdeps/unix/sysv/linux/ia64/kernel-features.h b/sysdeps/unix/sysv/linux/ia64/kernel-features.h deleted file mode 100644 index cda0ad6150..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/kernel-features.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _KERNEL_FEATURES_H -#define _KERNEL_FEATURES_H 1 - -#include_next - -#define __ASSUME_RECV_SYSCALL 1 -#define __ASSUME_SEND_SYSCALL 1 -#define __ASSUME_ACCEPT4_SYSCALL 1 - -#endif /* _KERNEL_FEATURES_H */ diff --git a/sysdeps/unix/sysv/linux/ia64/kernel_stat.h b/sysdeps/unix/sysv/linux/ia64/kernel_stat.h deleted file mode 100644 index 945c02930c..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/kernel_stat.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Definition of `struct stat' used in the kernel. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define STAT_IS_KERNEL_STAT 1 -#define XSTAT_IS_XSTAT64 1 -#define STATFS_IS_STATFS64 0 diff --git a/sysdeps/unix/sysv/linux/ia64/ld.abilist b/sysdeps/unix/sysv/linux/ia64/ld.abilist deleted file mode 100644 index 9b45d5e90c..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/ld.abilist +++ /dev/null @@ -1,11 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __libc_stack_end D 0x8 -GLIBC_2.2 _dl_mcount F -GLIBC_2.2 _r_debug D 0x28 -GLIBC_2.2 calloc F -GLIBC_2.2 free F -GLIBC_2.2 malloc F -GLIBC_2.2 realloc F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __tls_get_addr F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/ia64/ldconfig.h b/sysdeps/unix/sysv/linux/ia64/ldconfig.h deleted file mode 100644 index e3a3eecfda..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/ldconfig.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld-linux.so.2", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed deleted file mode 100644 index 535d1671e3..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed +++ /dev/null @@ -1 +0,0 @@ -s_^\(RTLDLIST=\)\([^ ]*\)-ia64\(\.so\.[0-9.]*\)[ ]*$_\1"\2-ia64\3 \2\3"_ diff --git a/sysdeps/unix/sysv/linux/ia64/ldsodefs.h b/sysdeps/unix/sysv/linux/ia64/ldsodefs.h deleted file mode 100644 index b8d82dd7c5..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/ldsodefs.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. IA64. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LDSODEFS_H - -/* Get the real definitions. */ -#include_next - -/* Now define our stuff. */ - -/* We need special support to initialize DSO loaded for statically linked - binaries. */ -extern void _dl_static_init (struct link_map *map); -#undef DL_STATIC_INIT -#define DL_STATIC_INIT(map) _dl_static_init (map) - -#endif /* ldsodefs.h */ diff --git a/sysdeps/unix/sysv/linux/ia64/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/ia64/libBrokenLocale.abilist deleted file mode 100644 index 21343df781..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/ia64/libanl.abilist b/sysdeps/unix/sysv/linux/ia64/libanl.abilist deleted file mode 100644 index edabfb436e..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 gai_cancel F -GLIBC_2.2.3 gai_error F -GLIBC_2.2.3 gai_suspend F -GLIBC_2.2.3 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist deleted file mode 100644 index 39ccf2b5ee..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist +++ /dev/null @@ -1,2194 +0,0 @@ -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fallocate64 F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _sys_errlist D 0x438 -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x438 -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _Exit F -GLIBC_2.2 _IO_2_1_stderr_ D 0xe0 -GLIBC_2.2 _IO_2_1_stdin_ D 0xe0 -GLIBC_2.2 _IO_2_1_stdout_ D 0xe0 -GLIBC_2.2 _IO_adjust_column F -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_default_doallocate F -GLIBC_2.2 _IO_default_finish F -GLIBC_2.2 _IO_default_pbackfail F -GLIBC_2.2 _IO_default_uflow F -GLIBC_2.2 _IO_default_xsgetn F -GLIBC_2.2 _IO_default_xsputn F -GLIBC_2.2 _IO_do_write F -GLIBC_2.2 _IO_doallocbuf F -GLIBC_2.2 _IO_fclose F -GLIBC_2.2 _IO_fdopen F -GLIBC_2.2 _IO_feof F -GLIBC_2.2 _IO_ferror F -GLIBC_2.2 _IO_fflush F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_fgets F -GLIBC_2.2 _IO_file_attach F -GLIBC_2.2 _IO_file_close F -GLIBC_2.2 _IO_file_close_it F -GLIBC_2.2 _IO_file_doallocate F -GLIBC_2.2 _IO_file_finish F -GLIBC_2.2 _IO_file_fopen F -GLIBC_2.2 _IO_file_init F -GLIBC_2.2 _IO_file_jumps D 0xa8 -GLIBC_2.2 _IO_file_open F -GLIBC_2.2 _IO_file_overflow F -GLIBC_2.2 _IO_file_read F -GLIBC_2.2 _IO_file_seek F -GLIBC_2.2 _IO_file_seekoff F -GLIBC_2.2 _IO_file_setbuf F -GLIBC_2.2 _IO_file_stat F -GLIBC_2.2 _IO_file_sync F -GLIBC_2.2 _IO_file_underflow F -GLIBC_2.2 _IO_file_write F -GLIBC_2.2 _IO_file_xsputn F -GLIBC_2.2 _IO_flockfile F -GLIBC_2.2 _IO_flush_all F -GLIBC_2.2 _IO_flush_all_linebuffered F -GLIBC_2.2 _IO_fopen F -GLIBC_2.2 _IO_fprintf F -GLIBC_2.2 _IO_fputs F -GLIBC_2.2 _IO_fread F -GLIBC_2.2 _IO_free_backup_area F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_ftell F -GLIBC_2.2 _IO_ftrylockfile F -GLIBC_2.2 _IO_funlockfile F -GLIBC_2.2 _IO_fwrite F -GLIBC_2.2 _IO_getc F -GLIBC_2.2 _IO_getline F -GLIBC_2.2 _IO_getline_info F -GLIBC_2.2 _IO_gets F -GLIBC_2.2 _IO_init F -GLIBC_2.2 _IO_init_marker F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_link_in F -GLIBC_2.2 _IO_list_all D 0x8 -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_marker_delta F -GLIBC_2.2 _IO_marker_difference F -GLIBC_2.2 _IO_padn F -GLIBC_2.2 _IO_peekc_locked F -GLIBC_2.2 _IO_popen F -GLIBC_2.2 _IO_printf F -GLIBC_2.2 _IO_proc_close F -GLIBC_2.2 _IO_proc_open F -GLIBC_2.2 _IO_putc F -GLIBC_2.2 _IO_puts F -GLIBC_2.2 _IO_remove_marker F -GLIBC_2.2 _IO_seekmark F -GLIBC_2.2 _IO_seekoff F -GLIBC_2.2 _IO_seekpos F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_setb F -GLIBC_2.2 _IO_setbuffer F -GLIBC_2.2 _IO_setvbuf F -GLIBC_2.2 _IO_sgetn F -GLIBC_2.2 _IO_sprintf F -GLIBC_2.2 _IO_sputbackc F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sscanf F -GLIBC_2.2 _IO_str_init_readonly F -GLIBC_2.2 _IO_str_init_static F -GLIBC_2.2 _IO_str_overflow F -GLIBC_2.2 _IO_str_pbackfail F -GLIBC_2.2 _IO_str_seekoff F -GLIBC_2.2 _IO_str_underflow F -GLIBC_2.2 _IO_sungetc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_get_mode F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_un_link F -GLIBC_2.2 _IO_ungetc F -GLIBC_2.2 _IO_unsave_markers F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_vfprintf F -GLIBC_2.2 _IO_vfscanf F -GLIBC_2.2 _IO_vsprintf F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0xa8 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 ___brk_addr D 0x8 -GLIBC_2.2 __adjtimex F -GLIBC_2.2 __after_morecore_hook D 0x8 -GLIBC_2.2 __argz_count F -GLIBC_2.2 __argz_next F -GLIBC_2.2 __argz_stringify F -GLIBC_2.2 __asprintf F -GLIBC_2.2 __assert F -GLIBC_2.2 __assert_fail F -GLIBC_2.2 __assert_perror_fail F -GLIBC_2.2 __backtrace F -GLIBC_2.2 __backtrace_symbols F -GLIBC_2.2 __backtrace_symbols_fd F -GLIBC_2.2 __bsd_getpgrp F -GLIBC_2.2 __check_rhosts_file D 0x4 -GLIBC_2.2 __clone2 F -GLIBC_2.2 __close F -GLIBC_2.2 __cmsg_nxthdr F -GLIBC_2.2 __connect F -GLIBC_2.2 __ctype32_b D 0x8 -GLIBC_2.2 __ctype32_tolower D 0x8 -GLIBC_2.2 __ctype32_toupper D 0x8 -GLIBC_2.2 __ctype_b D 0x8 -GLIBC_2.2 __ctype_get_mb_cur_max F -GLIBC_2.2 __ctype_tolower D 0x8 -GLIBC_2.2 __ctype_toupper D 0x8 -GLIBC_2.2 __curbrk D 0x8 -GLIBC_2.2 __cxa_atexit F -GLIBC_2.2 __cxa_finalize F -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __daylight D 0x4 -GLIBC_2.2 __dcgettext F -GLIBC_2.2 __default_morecore F -GLIBC_2.2 __dgettext F -GLIBC_2.2 __divdf3 F -GLIBC_2.2 __divdi3 F -GLIBC_2.2 __divsf3 F -GLIBC_2.2 __divtf3 F -GLIBC_2.2 __dup2 F -GLIBC_2.2 __duplocale F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __environ D 0x8 -GLIBC_2.2 __errno_location F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __fcntl F -GLIBC_2.2 __ffs F -GLIBC_2.2 __finite F -GLIBC_2.2 __finitef F -GLIBC_2.2 __finitel F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fork F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpu_control D 0x4 -GLIBC_2.2 __fpurge F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __free_hook D 0x8 -GLIBC_2.2 __freelocale F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getdelim F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __getpagesize F -GLIBC_2.2 __getpgid F -GLIBC_2.2 __getpid F -GLIBC_2.2 __gettimeofday F -GLIBC_2.2 __gmtime_r F -GLIBC_2.2 __h_errno_location F -GLIBC_2.2 __isalnum_l F -GLIBC_2.2 __isalpha_l F -GLIBC_2.2 __isascii_l F -GLIBC_2.2 __isblank_l F -GLIBC_2.2 __iscntrl_l F -GLIBC_2.2 __isdigit_l F -GLIBC_2.2 __isgraph_l F -GLIBC_2.2 __isinf F -GLIBC_2.2 __isinff F -GLIBC_2.2 __isinfl F -GLIBC_2.2 __islower_l F -GLIBC_2.2 __isnan F -GLIBC_2.2 __isnanf F -GLIBC_2.2 __isnanl F -GLIBC_2.2 __isprint_l F -GLIBC_2.2 __ispunct_l F -GLIBC_2.2 __isspace_l F -GLIBC_2.2 __isupper_l F -GLIBC_2.2 __iswalnum_l F -GLIBC_2.2 __iswalpha_l F -GLIBC_2.2 __iswblank_l F -GLIBC_2.2 __iswcntrl_l F -GLIBC_2.2 __iswctype F -GLIBC_2.2 __iswctype_l F -GLIBC_2.2 __iswdigit_l F -GLIBC_2.2 __iswgraph_l F -GLIBC_2.2 __iswlower_l F -GLIBC_2.2 __iswprint_l F -GLIBC_2.2 __iswpunct_l F -GLIBC_2.2 __iswspace_l F -GLIBC_2.2 __iswupper_l F -GLIBC_2.2 __iswxdigit_l F -GLIBC_2.2 __isxdigit_l F -GLIBC_2.2 __ivaliduser F -GLIBC_2.2 __key_decryptsession_pk_LOCAL D 0x8 -GLIBC_2.2 __key_encryptsession_pk_LOCAL D 0x8 -GLIBC_2.2 __key_gendes_LOCAL D 0x8 -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_calloc F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __libc_free F -GLIBC_2.2 __libc_freeres F -GLIBC_2.2 __libc_init_first F -GLIBC_2.2 __libc_mallinfo F -GLIBC_2.2 __libc_malloc F -GLIBC_2.2 __libc_mallopt F -GLIBC_2.2 __libc_memalign F -GLIBC_2.2 __libc_pvalloc F -GLIBC_2.2 __libc_realloc F -GLIBC_2.2 __libc_sa_len F -GLIBC_2.2 __libc_start_main F -GLIBC_2.2 __libc_valloc F -GLIBC_2.2 __lseek F -GLIBC_2.2 __lxstat F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __malloc_hook D 0x8 -GLIBC_2.2 __malloc_initialize_hook D 0x8 -GLIBC_2.2 __mbrlen F -GLIBC_2.2 __mbrtowc F -GLIBC_2.2 __memalign_hook D 0x8 -GLIBC_2.2 __mempcpy F -GLIBC_2.2 __mempcpy_small F -GLIBC_2.2 __moddi3 F -GLIBC_2.2 __monstartup F -GLIBC_2.2 __morecore D 0x8 -GLIBC_2.2 __multi3 F -GLIBC_2.2 __newlocale F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __nss_configure_lookup F -GLIBC_2.2 __nss_database_lookup F -GLIBC_2.2 __nss_group_lookup F -GLIBC_2.2 __nss_hosts_lookup F -GLIBC_2.2 __nss_next F -GLIBC_2.2 __nss_passwd_lookup F -GLIBC_2.2 __open F -GLIBC_2.2 __open64 F -GLIBC_2.2 __overflow F -GLIBC_2.2 __pipe F -GLIBC_2.2 __poll F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __printf_fp F -GLIBC_2.2 __profile_frequency F -GLIBC_2.2 __progname D 0x8 -GLIBC_2.2 __progname_full D 0x8 -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __rawmemchr F -GLIBC_2.2 __rcmd_errstr D 0x8 -GLIBC_2.2 __read F -GLIBC_2.2 __realloc_hook D 0x8 -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_randomid F -GLIBC_2.2 __res_state F -GLIBC_2.2 __sbrk F -GLIBC_2.2 __sched_get_priority_max F -GLIBC_2.2 __sched_get_priority_min F -GLIBC_2.2 __sched_getparam F -GLIBC_2.2 __sched_getscheduler F -GLIBC_2.2 __sched_setscheduler F -GLIBC_2.2 __sched_yield F -GLIBC_2.2 __secure_getenv F -GLIBC_2.2 __select F -GLIBC_2.2 __send F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __setpgid F -GLIBC_2.2 __sigaction F -GLIBC_2.2 __sigaddset F -GLIBC_2.2 __sigdelset F -GLIBC_2.2 __sigismember F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 __signbitl F -GLIBC_2.2 __sigpause F -GLIBC_2.2 __sigsetjmp F -GLIBC_2.2 __sigsuspend F -GLIBC_2.2 __statfs F -GLIBC_2.2 __stpcpy F -GLIBC_2.2 __stpcpy_small F -GLIBC_2.2 __stpncpy F -GLIBC_2.2 __strcasecmp F -GLIBC_2.2 __strcasecmp_l F -GLIBC_2.2 __strcasestr F -GLIBC_2.2 __strcoll_l F -GLIBC_2.2 __strcpy_small F -GLIBC_2.2 __strcspn_c1 F -GLIBC_2.2 __strcspn_c2 F -GLIBC_2.2 __strcspn_c3 F -GLIBC_2.2 __strdup F -GLIBC_2.2 __strerror_r F -GLIBC_2.2 __strfmon_l F -GLIBC_2.2 __strncasecmp_l F -GLIBC_2.2 __strndup F -GLIBC_2.2 __strpbrk_c2 F -GLIBC_2.2 __strpbrk_c3 F -GLIBC_2.2 __strsep_1c F -GLIBC_2.2 __strsep_2c F -GLIBC_2.2 __strsep_3c F -GLIBC_2.2 __strsep_g F -GLIBC_2.2 __strspn_c1 F -GLIBC_2.2 __strspn_c2 F -GLIBC_2.2 __strspn_c3 F -GLIBC_2.2 __strtod_internal F -GLIBC_2.2 __strtod_l F -GLIBC_2.2 __strtof_internal F -GLIBC_2.2 __strtof_l F -GLIBC_2.2 __strtok_r F -GLIBC_2.2 __strtok_r_1c F -GLIBC_2.2 __strtol_internal F -GLIBC_2.2 __strtol_l F -GLIBC_2.2 __strtold_internal F -GLIBC_2.2 __strtold_l F -GLIBC_2.2 __strtoll_internal F -GLIBC_2.2 __strtoll_l F -GLIBC_2.2 __strtoul_internal F -GLIBC_2.2 __strtoul_l F -GLIBC_2.2 __strtoull_internal F -GLIBC_2.2 __strtoull_l F -GLIBC_2.2 __strverscmp F -GLIBC_2.2 __strxfrm_l F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __sysv_signal F -GLIBC_2.2 __timezone D 0x8 -GLIBC_2.2 __toascii_l F -GLIBC_2.2 __tolower_l F -GLIBC_2.2 __toupper_l F -GLIBC_2.2 __towctrans F -GLIBC_2.2 __towctrans_l F -GLIBC_2.2 __towlower_l F -GLIBC_2.2 __towupper_l F -GLIBC_2.2 __tzname D 0x10 -GLIBC_2.2 __udivdi3 F -GLIBC_2.2 __uflow F -GLIBC_2.2 __umoddi3 F -GLIBC_2.2 __underflow F -GLIBC_2.2 __vfork F -GLIBC_2.2 __vfscanf F -GLIBC_2.2 __vsnprintf F -GLIBC_2.2 __vsscanf F -GLIBC_2.2 __wait F -GLIBC_2.2 __waitpid F -GLIBC_2.2 __wcscasecmp_l F -GLIBC_2.2 __wcscoll_l F -GLIBC_2.2 __wcsncasecmp_l F -GLIBC_2.2 __wcstod_internal F -GLIBC_2.2 __wcstod_l F -GLIBC_2.2 __wcstof_internal F -GLIBC_2.2 __wcstof_l F -GLIBC_2.2 __wcstol_internal F -GLIBC_2.2 __wcstol_l F -GLIBC_2.2 __wcstold_internal F -GLIBC_2.2 __wcstold_l F -GLIBC_2.2 __wcstoll_internal F -GLIBC_2.2 __wcstoll_l F -GLIBC_2.2 __wcstoul_internal F -GLIBC_2.2 __wcstoul_l F -GLIBC_2.2 __wcstoull_internal F -GLIBC_2.2 __wcstoull_l F -GLIBC_2.2 __wcsxfrm_l F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __wctype_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __write F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xmknod F -GLIBC_2.2 __xpg_basename F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _authenticate F -GLIBC_2.2 _dl_mcount_wrapper F -GLIBC_2.2 _dl_mcount_wrapper_check F -GLIBC_2.2 _environ D 0x8 -GLIBC_2.2 _exit F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _inb F -GLIBC_2.2 _inl F -GLIBC_2.2 _inw F -GLIBC_2.2 _libc_intl_domainname D 0x5 -GLIBC_2.2 _longjmp F -GLIBC_2.2 _mcleanup F -GLIBC_2.2 _mcount F -GLIBC_2.2 _nl_default_dirname D 0x12 -GLIBC_2.2 _nl_domain_bindings D 0x8 -GLIBC_2.2 _nl_msg_cat_cntr D 0x4 -GLIBC_2.2 _null_auth D 0x18 -GLIBC_2.2 _obstack D 0x8 -GLIBC_2.2 _obstack_allocated_p F -GLIBC_2.2 _obstack_begin F -GLIBC_2.2 _obstack_begin_1 F -GLIBC_2.2 _obstack_free F -GLIBC_2.2 _obstack_memory_used F -GLIBC_2.2 _obstack_newchunk F -GLIBC_2.2 _outb F -GLIBC_2.2 _outl F -GLIBC_2.2 _outw F -GLIBC_2.2 _res D 0x238 -GLIBC_2.2 _res_hconf D 0x48 -GLIBC_2.2 _rpc_dtablesize F -GLIBC_2.2 _seterr_reply F -GLIBC_2.2 _setjmp F -GLIBC_2.2 _sys_errlist D 0x3e8 -GLIBC_2.2 _sys_nerr D 0x4 -GLIBC_2.2 _sys_siglist D 0x200 -GLIBC_2.2 _tolower F -GLIBC_2.2 _toupper F -GLIBC_2.2 a64l F -GLIBC_2.2 abort F -GLIBC_2.2 abs F -GLIBC_2.2 accept F -GLIBC_2.2 access F -GLIBC_2.2 acct F -GLIBC_2.2 addmntent F -GLIBC_2.2 addseverity F -GLIBC_2.2 adjtime F -GLIBC_2.2 adjtimex F -GLIBC_2.2 advance F -GLIBC_2.2 alarm F -GLIBC_2.2 alphasort F -GLIBC_2.2 alphasort64 F -GLIBC_2.2 argp_err_exit_status D 0x4 -GLIBC_2.2 argp_error F -GLIBC_2.2 argp_failure F -GLIBC_2.2 argp_help F -GLIBC_2.2 argp_parse F -GLIBC_2.2 argp_program_bug_address D 0x8 -GLIBC_2.2 argp_program_version D 0x8 -GLIBC_2.2 argp_program_version_hook D 0x8 -GLIBC_2.2 argp_state_help F -GLIBC_2.2 argp_usage F -GLIBC_2.2 argz_add F -GLIBC_2.2 argz_add_sep F -GLIBC_2.2 argz_append F -GLIBC_2.2 argz_count F -GLIBC_2.2 argz_create F -GLIBC_2.2 argz_create_sep F -GLIBC_2.2 argz_delete F -GLIBC_2.2 argz_extract F -GLIBC_2.2 argz_insert F -GLIBC_2.2 argz_next F -GLIBC_2.2 argz_replace F -GLIBC_2.2 argz_stringify F -GLIBC_2.2 asctime F -GLIBC_2.2 asctime_r F -GLIBC_2.2 asprintf F -GLIBC_2.2 atexit F -GLIBC_2.2 atof F -GLIBC_2.2 atoi F -GLIBC_2.2 atol F -GLIBC_2.2 atoll F -GLIBC_2.2 authdes_create F -GLIBC_2.2 authdes_getucred F -GLIBC_2.2 authdes_pk_create F -GLIBC_2.2 authnone_create F -GLIBC_2.2 authunix_create F -GLIBC_2.2 authunix_create_default F -GLIBC_2.2 backtrace F -GLIBC_2.2 backtrace_symbols F -GLIBC_2.2 backtrace_symbols_fd F -GLIBC_2.2 basename F -GLIBC_2.2 bcmp F -GLIBC_2.2 bcopy F -GLIBC_2.2 bdflush F -GLIBC_2.2 bind F -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 bindresvport F -GLIBC_2.2 bindtextdomain F -GLIBC_2.2 brk F -GLIBC_2.2 bsd_signal F -GLIBC_2.2 bsearch F -GLIBC_2.2 btowc F -GLIBC_2.2 bzero F -GLIBC_2.2 calloc F -GLIBC_2.2 callrpc F -GLIBC_2.2 canonicalize_file_name F -GLIBC_2.2 capget F -GLIBC_2.2 capset F -GLIBC_2.2 catclose F -GLIBC_2.2 catgets F -GLIBC_2.2 catopen F -GLIBC_2.2 cbc_crypt F -GLIBC_2.2 cfgetispeed F -GLIBC_2.2 cfgetospeed F -GLIBC_2.2 cfmakeraw F -GLIBC_2.2 cfree F -GLIBC_2.2 cfsetispeed F -GLIBC_2.2 cfsetospeed F -GLIBC_2.2 cfsetspeed F -GLIBC_2.2 chdir F -GLIBC_2.2 chflags F -GLIBC_2.2 chmod F -GLIBC_2.2 chown F -GLIBC_2.2 chroot F -GLIBC_2.2 clearenv F -GLIBC_2.2 clearerr F -GLIBC_2.2 clearerr_unlocked F -GLIBC_2.2 clnt_broadcast F -GLIBC_2.2 clnt_create F -GLIBC_2.2 clnt_pcreateerror F -GLIBC_2.2 clnt_perrno F -GLIBC_2.2 clnt_perror F -GLIBC_2.2 clnt_spcreateerror F -GLIBC_2.2 clnt_sperrno F -GLIBC_2.2 clnt_sperror F -GLIBC_2.2 clntraw_create F -GLIBC_2.2 clnttcp_create F -GLIBC_2.2 clntudp_bufcreate F -GLIBC_2.2 clntudp_create F -GLIBC_2.2 clntunix_create F -GLIBC_2.2 clock F -GLIBC_2.2 close F -GLIBC_2.2 closedir F -GLIBC_2.2 closelog F -GLIBC_2.2 confstr F -GLIBC_2.2 connect F -GLIBC_2.2 copysign F -GLIBC_2.2 copysignf F -GLIBC_2.2 copysignl F -GLIBC_2.2 creat F -GLIBC_2.2 creat64 F -GLIBC_2.2 create_module F -GLIBC_2.2 ctermid F -GLIBC_2.2 ctime F -GLIBC_2.2 ctime_r F -GLIBC_2.2 cuserid F -GLIBC_2.2 daemon F -GLIBC_2.2 daylight D 0x4 -GLIBC_2.2 dcgettext F -GLIBC_2.2 dcngettext F -GLIBC_2.2 delete_module F -GLIBC_2.2 des_setparity F -GLIBC_2.2 dgettext F -GLIBC_2.2 difftime F -GLIBC_2.2 dirfd F -GLIBC_2.2 dirname F -GLIBC_2.2 div F -GLIBC_2.2 dngettext F -GLIBC_2.2 dprintf F -GLIBC_2.2 drand48 F -GLIBC_2.2 drand48_r F -GLIBC_2.2 dup F -GLIBC_2.2 dup2 F -GLIBC_2.2 dysize F -GLIBC_2.2 ecb_crypt F -GLIBC_2.2 ecvt F -GLIBC_2.2 ecvt_r F -GLIBC_2.2 endaliasent F -GLIBC_2.2 endfsent F -GLIBC_2.2 endgrent F -GLIBC_2.2 endhostent F -GLIBC_2.2 endmntent F -GLIBC_2.2 endnetent F -GLIBC_2.2 endnetgrent F -GLIBC_2.2 endprotoent F -GLIBC_2.2 endpwent F -GLIBC_2.2 endrpcent F -GLIBC_2.2 endservent F -GLIBC_2.2 endspent F -GLIBC_2.2 endttyent F -GLIBC_2.2 endusershell F -GLIBC_2.2 endutent F -GLIBC_2.2 endutxent F -GLIBC_2.2 environ D 0x8 -GLIBC_2.2 envz_add F -GLIBC_2.2 envz_entry F -GLIBC_2.2 envz_get F -GLIBC_2.2 envz_merge F -GLIBC_2.2 envz_remove F -GLIBC_2.2 envz_strip F -GLIBC_2.2 erand48 F -GLIBC_2.2 erand48_r F -GLIBC_2.2 err F -GLIBC_2.2 error F -GLIBC_2.2 error_at_line F -GLIBC_2.2 error_message_count D 0x4 -GLIBC_2.2 error_one_per_line D 0x4 -GLIBC_2.2 error_print_progname D 0x8 -GLIBC_2.2 errx F -GLIBC_2.2 ether_aton F -GLIBC_2.2 ether_aton_r F -GLIBC_2.2 ether_hostton F -GLIBC_2.2 ether_line F -GLIBC_2.2 ether_ntoa F -GLIBC_2.2 ether_ntoa_r F -GLIBC_2.2 ether_ntohost F -GLIBC_2.2 euidaccess F -GLIBC_2.2 execl F -GLIBC_2.2 execle F -GLIBC_2.2 execlp F -GLIBC_2.2 execv F -GLIBC_2.2 execve F -GLIBC_2.2 execvp F -GLIBC_2.2 exit F -GLIBC_2.2 fattach F -GLIBC_2.2 fchdir F -GLIBC_2.2 fchflags F -GLIBC_2.2 fchmod F -GLIBC_2.2 fchown F -GLIBC_2.2 fclose F -GLIBC_2.2 fcloseall F -GLIBC_2.2 fcntl F -GLIBC_2.2 fcvt F -GLIBC_2.2 fcvt_r F -GLIBC_2.2 fdatasync F -GLIBC_2.2 fdetach F -GLIBC_2.2 fdopen F -GLIBC_2.2 feof F -GLIBC_2.2 feof_unlocked F -GLIBC_2.2 ferror F -GLIBC_2.2 ferror_unlocked F -GLIBC_2.2 fexecve F -GLIBC_2.2 fflush F -GLIBC_2.2 fflush_unlocked F -GLIBC_2.2 ffs F -GLIBC_2.2 ffsl F -GLIBC_2.2 ffsll F -GLIBC_2.2 fgetc F -GLIBC_2.2 fgetc_unlocked F -GLIBC_2.2 fgetgrent F -GLIBC_2.2 fgetgrent_r F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgetpwent F -GLIBC_2.2 fgetpwent_r F -GLIBC_2.2 fgets F -GLIBC_2.2 fgets_unlocked F -GLIBC_2.2 fgetspent F -GLIBC_2.2 fgetspent_r F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fileno F -GLIBC_2.2 fileno_unlocked F -GLIBC_2.2 finite F -GLIBC_2.2 finitef F -GLIBC_2.2 finitel F -GLIBC_2.2 flock F -GLIBC_2.2 flockfile F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fmtmsg F -GLIBC_2.2 fnmatch F -GLIBC_2.2 fopen F -GLIBC_2.2 fopen64 F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fork F -GLIBC_2.2 fpathconf F -GLIBC_2.2 fprintf F -GLIBC_2.2 fputc F -GLIBC_2.2 fputc_unlocked F -GLIBC_2.2 fputs F -GLIBC_2.2 fputs_unlocked F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fread F -GLIBC_2.2 fread_unlocked F -GLIBC_2.2 free F -GLIBC_2.2 freeaddrinfo F -GLIBC_2.2 freopen F -GLIBC_2.2 freopen64 F -GLIBC_2.2 frexp F -GLIBC_2.2 frexpf F -GLIBC_2.2 frexpl F -GLIBC_2.2 fscanf F -GLIBC_2.2 fseek F -GLIBC_2.2 fseeko F -GLIBC_2.2 fseeko64 F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fstatfs F -GLIBC_2.2 fstatfs64 F -GLIBC_2.2 fstatvfs F -GLIBC_2.2 fstatvfs64 F -GLIBC_2.2 fsync F -GLIBC_2.2 ftell F -GLIBC_2.2 ftello F -GLIBC_2.2 ftello64 F -GLIBC_2.2 ftime F -GLIBC_2.2 ftok F -GLIBC_2.2 ftruncate F -GLIBC_2.2 ftruncate64 F -GLIBC_2.2 ftrylockfile F -GLIBC_2.2 fts_children F -GLIBC_2.2 fts_close F -GLIBC_2.2 fts_open F -GLIBC_2.2 fts_read F -GLIBC_2.2 fts_set F -GLIBC_2.2 ftw F -GLIBC_2.2 ftw64 F -GLIBC_2.2 funlockfile F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwrite F -GLIBC_2.2 fwrite_unlocked F -GLIBC_2.2 fwscanf F -GLIBC_2.2 gai_strerror F -GLIBC_2.2 gcvt F -GLIBC_2.2 get_avphys_pages F -GLIBC_2.2 get_current_dir_name F -GLIBC_2.2 get_kernel_syms F -GLIBC_2.2 get_myaddress F -GLIBC_2.2 get_nprocs F -GLIBC_2.2 get_nprocs_conf F -GLIBC_2.2 get_phys_pages F -GLIBC_2.2 getaddrinfo F -GLIBC_2.2 getaliasbyname F -GLIBC_2.2 getaliasbyname_r F -GLIBC_2.2 getaliasent F -GLIBC_2.2 getaliasent_r F -GLIBC_2.2 getc F -GLIBC_2.2 getc_unlocked F -GLIBC_2.2 getchar F -GLIBC_2.2 getchar_unlocked F -GLIBC_2.2 getcontext F -GLIBC_2.2 getcwd F -GLIBC_2.2 getdate F -GLIBC_2.2 getdate_err D 0x4 -GLIBC_2.2 getdate_r F -GLIBC_2.2 getdelim F -GLIBC_2.2 getdirentries F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getdomainname F -GLIBC_2.2 getdtablesize F -GLIBC_2.2 getegid F -GLIBC_2.2 getenv F -GLIBC_2.2 geteuid F -GLIBC_2.2 getfsent F -GLIBC_2.2 getfsfile F -GLIBC_2.2 getfsspec F -GLIBC_2.2 getgid F -GLIBC_2.2 getgrent F -GLIBC_2.2 getgrent_r F -GLIBC_2.2 getgrgid F -GLIBC_2.2 getgrgid_r F -GLIBC_2.2 getgrnam F -GLIBC_2.2 getgrnam_r F -GLIBC_2.2 getgroups F -GLIBC_2.2 gethostbyaddr F -GLIBC_2.2 gethostbyaddr_r F -GLIBC_2.2 gethostbyname F -GLIBC_2.2 gethostbyname2 F -GLIBC_2.2 gethostbyname2_r F -GLIBC_2.2 gethostbyname_r F -GLIBC_2.2 gethostent F -GLIBC_2.2 gethostent_r F -GLIBC_2.2 gethostid F -GLIBC_2.2 gethostname F -GLIBC_2.2 getitimer F -GLIBC_2.2 getline F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getlogin F -GLIBC_2.2 getlogin_r F -GLIBC_2.2 getmntent F -GLIBC_2.2 getmntent_r F -GLIBC_2.2 getmsg F -GLIBC_2.2 getnameinfo F -GLIBC_2.2 getnetbyaddr F -GLIBC_2.2 getnetbyaddr_r F -GLIBC_2.2 getnetbyname F -GLIBC_2.2 getnetbyname_r F -GLIBC_2.2 getnetent F -GLIBC_2.2 getnetent_r F -GLIBC_2.2 getnetgrent F -GLIBC_2.2 getnetgrent_r F -GLIBC_2.2 getnetname F -GLIBC_2.2 getopt F -GLIBC_2.2 getopt_long F -GLIBC_2.2 getopt_long_only F -GLIBC_2.2 getpagesize F -GLIBC_2.2 getpass F -GLIBC_2.2 getpeername F -GLIBC_2.2 getpgid F -GLIBC_2.2 getpgrp F -GLIBC_2.2 getpid F -GLIBC_2.2 getpmsg F -GLIBC_2.2 getppid F -GLIBC_2.2 getpriority F -GLIBC_2.2 getprotobyname F -GLIBC_2.2 getprotobyname_r F -GLIBC_2.2 getprotobynumber F -GLIBC_2.2 getprotobynumber_r F -GLIBC_2.2 getprotoent F -GLIBC_2.2 getprotoent_r F -GLIBC_2.2 getpt F -GLIBC_2.2 getpublickey F -GLIBC_2.2 getpw F -GLIBC_2.2 getpwent F -GLIBC_2.2 getpwent_r F -GLIBC_2.2 getpwnam F -GLIBC_2.2 getpwnam_r F -GLIBC_2.2 getpwuid F -GLIBC_2.2 getpwuid_r F -GLIBC_2.2 getresgid F -GLIBC_2.2 getresuid F -GLIBC_2.2 getrlimit F -GLIBC_2.2 getrlimit64 F -GLIBC_2.2 getrpcbyname F -GLIBC_2.2 getrpcbyname_r F -GLIBC_2.2 getrpcbynumber F -GLIBC_2.2 getrpcbynumber_r F -GLIBC_2.2 getrpcent F -GLIBC_2.2 getrpcent_r F -GLIBC_2.2 getrpcport F -GLIBC_2.2 getrusage F -GLIBC_2.2 gets F -GLIBC_2.2 getsecretkey F -GLIBC_2.2 getservbyname F -GLIBC_2.2 getservbyname_r F -GLIBC_2.2 getservbyport F -GLIBC_2.2 getservbyport_r F -GLIBC_2.2 getservent F -GLIBC_2.2 getservent_r F -GLIBC_2.2 getsid F -GLIBC_2.2 getsockname F -GLIBC_2.2 getsockopt F -GLIBC_2.2 getspent F -GLIBC_2.2 getspent_r F -GLIBC_2.2 getspnam F -GLIBC_2.2 getspnam_r F -GLIBC_2.2 getsubopt F -GLIBC_2.2 gettext F -GLIBC_2.2 gettimeofday F -GLIBC_2.2 getttyent F -GLIBC_2.2 getttynam F -GLIBC_2.2 getuid F -GLIBC_2.2 getusershell F -GLIBC_2.2 getutent F -GLIBC_2.2 getutent_r F -GLIBC_2.2 getutid F -GLIBC_2.2 getutid_r F -GLIBC_2.2 getutline F -GLIBC_2.2 getutline_r F -GLIBC_2.2 getutmp F -GLIBC_2.2 getutmpx F -GLIBC_2.2 getutxent F -GLIBC_2.2 getutxid F -GLIBC_2.2 getutxline F -GLIBC_2.2 getw F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 getwd F -GLIBC_2.2 glob F -GLIBC_2.2 glob64 F -GLIBC_2.2 glob_pattern_p F -GLIBC_2.2 globfree F -GLIBC_2.2 globfree64 F -GLIBC_2.2 gmtime F -GLIBC_2.2 gmtime_r F -GLIBC_2.2 gnu_get_libc_release F -GLIBC_2.2 gnu_get_libc_version F -GLIBC_2.2 grantpt F -GLIBC_2.2 group_member F -GLIBC_2.2 gsignal F -GLIBC_2.2 gtty F -GLIBC_2.2 h_errlist D 0x28 -GLIBC_2.2 h_nerr D 0x4 -GLIBC_2.2 hasmntopt F -GLIBC_2.2 hcreate F -GLIBC_2.2 hcreate_r F -GLIBC_2.2 hdestroy F -GLIBC_2.2 hdestroy_r F -GLIBC_2.2 herror F -GLIBC_2.2 host2netname F -GLIBC_2.2 hsearch F -GLIBC_2.2 hsearch_r F -GLIBC_2.2 hstrerror F -GLIBC_2.2 htonl F -GLIBC_2.2 htons F -GLIBC_2.2 iconv F -GLIBC_2.2 iconv_close F -GLIBC_2.2 iconv_open F -GLIBC_2.2 if_freenameindex F -GLIBC_2.2 if_indextoname F -GLIBC_2.2 if_nameindex F -GLIBC_2.2 if_nametoindex F -GLIBC_2.2 imaxabs F -GLIBC_2.2 imaxdiv F -GLIBC_2.2 in6addr_any D 0x10 -GLIBC_2.2 in6addr_loopback D 0x10 -GLIBC_2.2 inb F -GLIBC_2.2 index F -GLIBC_2.2 inet_addr F -GLIBC_2.2 inet_aton F -GLIBC_2.2 inet_lnaof F -GLIBC_2.2 inet_makeaddr F -GLIBC_2.2 inet_netof F -GLIBC_2.2 inet_network F -GLIBC_2.2 inet_nsap_addr F -GLIBC_2.2 inet_nsap_ntoa F -GLIBC_2.2 inet_ntoa F -GLIBC_2.2 inet_ntop F -GLIBC_2.2 inet_pton F -GLIBC_2.2 init_module F -GLIBC_2.2 initgroups F -GLIBC_2.2 initstate F -GLIBC_2.2 initstate_r F -GLIBC_2.2 inl F -GLIBC_2.2 innetgr F -GLIBC_2.2 insque F -GLIBC_2.2 inw F -GLIBC_2.2 ioctl F -GLIBC_2.2 ioperm F -GLIBC_2.2 iopl F -GLIBC_2.2 iruserok F -GLIBC_2.2 iruserok_af F -GLIBC_2.2 isalnum F -GLIBC_2.2 isalpha F -GLIBC_2.2 isascii F -GLIBC_2.2 isastream F -GLIBC_2.2 isatty F -GLIBC_2.2 isblank F -GLIBC_2.2 iscntrl F -GLIBC_2.2 isdigit F -GLIBC_2.2 isfdtype F -GLIBC_2.2 isgraph F -GLIBC_2.2 isinf F -GLIBC_2.2 isinff F -GLIBC_2.2 isinfl F -GLIBC_2.2 islower F -GLIBC_2.2 isnan F -GLIBC_2.2 isnanf F -GLIBC_2.2 isnanl F -GLIBC_2.2 isprint F -GLIBC_2.2 ispunct F -GLIBC_2.2 isspace F -GLIBC_2.2 isupper F -GLIBC_2.2 iswalnum F -GLIBC_2.2 iswalpha F -GLIBC_2.2 iswblank F -GLIBC_2.2 iswcntrl F -GLIBC_2.2 iswctype F -GLIBC_2.2 iswdigit F -GLIBC_2.2 iswgraph F -GLIBC_2.2 iswlower F -GLIBC_2.2 iswprint F -GLIBC_2.2 iswpunct F -GLIBC_2.2 iswspace F -GLIBC_2.2 iswupper F -GLIBC_2.2 iswxdigit F -GLIBC_2.2 isxdigit F -GLIBC_2.2 jrand48 F -GLIBC_2.2 jrand48_r F -GLIBC_2.2 key_decryptsession F -GLIBC_2.2 key_decryptsession_pk F -GLIBC_2.2 key_encryptsession F -GLIBC_2.2 key_encryptsession_pk F -GLIBC_2.2 key_gendes F -GLIBC_2.2 key_get_conv F -GLIBC_2.2 key_secretkey_is_set F -GLIBC_2.2 key_setnet F -GLIBC_2.2 key_setsecret F -GLIBC_2.2 kill F -GLIBC_2.2 killpg F -GLIBC_2.2 klogctl F -GLIBC_2.2 l64a F -GLIBC_2.2 labs F -GLIBC_2.2 lchown F -GLIBC_2.2 lckpwdf F -GLIBC_2.2 lcong48 F -GLIBC_2.2 lcong48_r F -GLIBC_2.2 ldexp F -GLIBC_2.2 ldexpf F -GLIBC_2.2 ldexpl F -GLIBC_2.2 ldiv F -GLIBC_2.2 lfind F -GLIBC_2.2 link F -GLIBC_2.2 listen F -GLIBC_2.2 llabs F -GLIBC_2.2 lldiv F -GLIBC_2.2 llseek F -GLIBC_2.2 loc1 D 0x8 -GLIBC_2.2 loc2 D 0x8 -GLIBC_2.2 localeconv F -GLIBC_2.2 localtime F -GLIBC_2.2 localtime_r F -GLIBC_2.2 lockf F -GLIBC_2.2 lockf64 F -GLIBC_2.2 locs D 0x8 -GLIBC_2.2 longjmp F -GLIBC_2.2 lrand48 F -GLIBC_2.2 lrand48_r F -GLIBC_2.2 lsearch F -GLIBC_2.2 lseek F -GLIBC_2.2 lseek64 F -GLIBC_2.2 madvise F -GLIBC_2.2 makecontext F -GLIBC_2.2 mallinfo F -GLIBC_2.2 malloc F -GLIBC_2.2 malloc_get_state F -GLIBC_2.2 malloc_set_state F -GLIBC_2.2 malloc_stats F -GLIBC_2.2 malloc_trim F -GLIBC_2.2 malloc_usable_size F -GLIBC_2.2 mallopt F -GLIBC_2.2 mallwatch D 0x8 -GLIBC_2.2 mblen F -GLIBC_2.2 mbrlen F -GLIBC_2.2 mbrtowc F -GLIBC_2.2 mbsinit F -GLIBC_2.2 mbsnrtowcs F -GLIBC_2.2 mbsrtowcs F -GLIBC_2.2 mbstowcs F -GLIBC_2.2 mbtowc F -GLIBC_2.2 mcheck F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 mcount F -GLIBC_2.2 memalign F -GLIBC_2.2 memccpy F -GLIBC_2.2 memchr F -GLIBC_2.2 memcmp F -GLIBC_2.2 memcpy F -GLIBC_2.2 memfrob F -GLIBC_2.2 memmem F -GLIBC_2.2 memmove F -GLIBC_2.2 mempcpy F -GLIBC_2.2 memrchr F -GLIBC_2.2 memset F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdir F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkfifo F -GLIBC_2.2 mkstemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 mktemp F -GLIBC_2.2 mktime F -GLIBC_2.2 mlock F -GLIBC_2.2 mlockall F -GLIBC_2.2 mmap F -GLIBC_2.2 mmap64 F -GLIBC_2.2 modf F -GLIBC_2.2 modff F -GLIBC_2.2 modfl F -GLIBC_2.2 moncontrol F -GLIBC_2.2 monstartup F -GLIBC_2.2 mount F -GLIBC_2.2 mprobe F -GLIBC_2.2 mprotect F -GLIBC_2.2 mrand48 F -GLIBC_2.2 mrand48_r F -GLIBC_2.2 mremap F -GLIBC_2.2 msgctl F -GLIBC_2.2 msgget F -GLIBC_2.2 msgrcv F -GLIBC_2.2 msgsnd F -GLIBC_2.2 msync F -GLIBC_2.2 mtrace F -GLIBC_2.2 munlock F -GLIBC_2.2 munlockall F -GLIBC_2.2 munmap F -GLIBC_2.2 muntrace F -GLIBC_2.2 nanosleep F -GLIBC_2.2 netname2host F -GLIBC_2.2 netname2user F -GLIBC_2.2 nfsservctl F -GLIBC_2.2 nftw F -GLIBC_2.2 nftw64 F -GLIBC_2.2 ngettext F -GLIBC_2.2 nice F -GLIBC_2.2 nl_langinfo F -GLIBC_2.2 nrand48 F -GLIBC_2.2 nrand48_r F -GLIBC_2.2 ntohl F -GLIBC_2.2 ntohs F -GLIBC_2.2 ntp_adjtime F -GLIBC_2.2 ntp_gettime F -GLIBC_2.2 obstack_alloc_failed_handler D 0x8 -GLIBC_2.2 obstack_exit_failure D 0x4 -GLIBC_2.2 obstack_free F -GLIBC_2.2 obstack_printf F -GLIBC_2.2 obstack_vprintf F -GLIBC_2.2 on_exit F -GLIBC_2.2 open F -GLIBC_2.2 open64 F -GLIBC_2.2 open_memstream F -GLIBC_2.2 opendir F -GLIBC_2.2 openlog F -GLIBC_2.2 optarg D 0x8 -GLIBC_2.2 opterr D 0x4 -GLIBC_2.2 optind D 0x4 -GLIBC_2.2 optopt D 0x4 -GLIBC_2.2 outb F -GLIBC_2.2 outw F -GLIBC_2.2 parse_printf_format F -GLIBC_2.2 passwd2des F -GLIBC_2.2 pathconf F -GLIBC_2.2 pause F -GLIBC_2.2 pciconfig_read F -GLIBC_2.2 pciconfig_write F -GLIBC_2.2 pclose F -GLIBC_2.2 perror F -GLIBC_2.2 personality F -GLIBC_2.2 pipe F -GLIBC_2.2 pmap_getmaps F -GLIBC_2.2 pmap_getport F -GLIBC_2.2 pmap_rmtcall F -GLIBC_2.2 pmap_set F -GLIBC_2.2 pmap_unset F -GLIBC_2.2 poll F -GLIBC_2.2 popen F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 prctl F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 printf F -GLIBC_2.2 printf_size F -GLIBC_2.2 printf_size_info F -GLIBC_2.2 profil F -GLIBC_2.2 program_invocation_name D 0x8 -GLIBC_2.2 program_invocation_short_name D 0x8 -GLIBC_2.2 pselect F -GLIBC_2.2 psignal F -GLIBC_2.2 pthread_attr_destroy F -GLIBC_2.2 pthread_attr_getdetachstate F -GLIBC_2.2 pthread_attr_getinheritsched F -GLIBC_2.2 pthread_attr_getschedparam F -GLIBC_2.2 pthread_attr_getschedpolicy F -GLIBC_2.2 pthread_attr_getscope F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 pthread_attr_setdetachstate F -GLIBC_2.2 pthread_attr_setinheritsched F -GLIBC_2.2 pthread_attr_setschedparam F -GLIBC_2.2 pthread_attr_setschedpolicy F -GLIBC_2.2 pthread_attr_setscope F -GLIBC_2.2 pthread_cond_broadcast F -GLIBC_2.2 pthread_cond_destroy F -GLIBC_2.2 pthread_cond_init F -GLIBC_2.2 pthread_cond_signal F -GLIBC_2.2 pthread_cond_timedwait F -GLIBC_2.2 pthread_cond_wait F -GLIBC_2.2 pthread_condattr_destroy F -GLIBC_2.2 pthread_condattr_init F -GLIBC_2.2 pthread_equal F -GLIBC_2.2 pthread_exit F -GLIBC_2.2 pthread_getschedparam F -GLIBC_2.2 pthread_mutex_destroy F -GLIBC_2.2 pthread_mutex_init F -GLIBC_2.2 pthread_mutex_lock F -GLIBC_2.2 pthread_mutex_unlock F -GLIBC_2.2 pthread_self F -GLIBC_2.2 pthread_setcancelstate F -GLIBC_2.2 pthread_setcanceltype F -GLIBC_2.2 pthread_setschedparam F -GLIBC_2.2 ptrace F -GLIBC_2.2 ptsname F -GLIBC_2.2 ptsname_r F -GLIBC_2.2 putc F -GLIBC_2.2 putc_unlocked F -GLIBC_2.2 putchar F -GLIBC_2.2 putchar_unlocked F -GLIBC_2.2 putenv F -GLIBC_2.2 putgrent F -GLIBC_2.2 putmsg F -GLIBC_2.2 putpmsg F -GLIBC_2.2 putpwent F -GLIBC_2.2 puts F -GLIBC_2.2 putspent F -GLIBC_2.2 pututline F -GLIBC_2.2 pututxline F -GLIBC_2.2 putw F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 pvalloc F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 qecvt F -GLIBC_2.2 qecvt_r F -GLIBC_2.2 qfcvt F -GLIBC_2.2 qfcvt_r F -GLIBC_2.2 qgcvt F -GLIBC_2.2 qsort F -GLIBC_2.2 query_module F -GLIBC_2.2 quotactl F -GLIBC_2.2 raise F -GLIBC_2.2 rand F -GLIBC_2.2 rand_r F -GLIBC_2.2 random F -GLIBC_2.2 random_r F -GLIBC_2.2 rawmemchr F -GLIBC_2.2 rcmd F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 re_comp F -GLIBC_2.2 re_compile_fastmap F -GLIBC_2.2 re_compile_pattern F -GLIBC_2.2 re_exec F -GLIBC_2.2 re_match F -GLIBC_2.2 re_match_2 F -GLIBC_2.2 re_max_failures D 0x4 -GLIBC_2.2 re_search F -GLIBC_2.2 re_search_2 F -GLIBC_2.2 re_set_registers F -GLIBC_2.2 re_set_syntax F -GLIBC_2.2 re_syntax_options D 0x8 -GLIBC_2.2 read F -GLIBC_2.2 readdir F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 readdir_r F -GLIBC_2.2 readlink F -GLIBC_2.2 readv F -GLIBC_2.2 realloc F -GLIBC_2.2 realpath F -GLIBC_2.2 reboot F -GLIBC_2.2 recv F -GLIBC_2.2 recvfrom F -GLIBC_2.2 recvmsg F -GLIBC_2.2 regcomp F -GLIBC_2.2 regerror F -GLIBC_2.2 regexec F -GLIBC_2.2 regfree F -GLIBC_2.2 register_printf_function F -GLIBC_2.2 registerrpc F -GLIBC_2.2 remove F -GLIBC_2.2 remque F -GLIBC_2.2 rename F -GLIBC_2.2 revoke F -GLIBC_2.2 rewind F -GLIBC_2.2 rewinddir F -GLIBC_2.2 rexec F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rexecoptions D 0x4 -GLIBC_2.2 rindex F -GLIBC_2.2 rmdir F -GLIBC_2.2 rpc_createerr D 0x20 -GLIBC_2.2 rpmatch F -GLIBC_2.2 rresvport F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 rtime F -GLIBC_2.2 ruserok F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 ruserpass F -GLIBC_2.2 sbrk F -GLIBC_2.2 scalbn F -GLIBC_2.2 scalbnf F -GLIBC_2.2 scalbnl F -GLIBC_2.2 scandir F -GLIBC_2.2 scandir64 F -GLIBC_2.2 scanf F -GLIBC_2.2 sched_get_priority_max F -GLIBC_2.2 sched_get_priority_min F -GLIBC_2.2 sched_getparam F -GLIBC_2.2 sched_getscheduler F -GLIBC_2.2 sched_rr_get_interval F -GLIBC_2.2 sched_setparam F -GLIBC_2.2 sched_setscheduler F -GLIBC_2.2 sched_yield F -GLIBC_2.2 seed48 F -GLIBC_2.2 seed48_r F -GLIBC_2.2 seekdir F -GLIBC_2.2 select F -GLIBC_2.2 semctl F -GLIBC_2.2 semget F -GLIBC_2.2 semop F -GLIBC_2.2 send F -GLIBC_2.2 sendfile F -GLIBC_2.2 sendmsg F -GLIBC_2.2 sendto F -GLIBC_2.2 setaliasent F -GLIBC_2.2 setbuf F -GLIBC_2.2 setbuffer F -GLIBC_2.2 setcontext F -GLIBC_2.2 setdomainname F -GLIBC_2.2 setegid F -GLIBC_2.2 setenv F -GLIBC_2.2 seteuid F -GLIBC_2.2 setfsent F -GLIBC_2.2 setfsgid F -GLIBC_2.2 setfsuid F -GLIBC_2.2 setgid F -GLIBC_2.2 setgrent F -GLIBC_2.2 setgroups F -GLIBC_2.2 sethostent F -GLIBC_2.2 sethostid F -GLIBC_2.2 sethostname F -GLIBC_2.2 setitimer F -GLIBC_2.2 setjmp F -GLIBC_2.2 setlinebuf F -GLIBC_2.2 setlocale F -GLIBC_2.2 setlogin F -GLIBC_2.2 setlogmask F -GLIBC_2.2 setmntent F -GLIBC_2.2 setnetent F -GLIBC_2.2 setnetgrent F -GLIBC_2.2 setpgid F -GLIBC_2.2 setpgrp F -GLIBC_2.2 setpriority F -GLIBC_2.2 setprotoent F -GLIBC_2.2 setpwent F -GLIBC_2.2 setregid F -GLIBC_2.2 setresgid F -GLIBC_2.2 setresuid F -GLIBC_2.2 setreuid F -GLIBC_2.2 setrlimit F -GLIBC_2.2 setrlimit64 F -GLIBC_2.2 setrpcent F -GLIBC_2.2 setservent F -GLIBC_2.2 setsid F -GLIBC_2.2 setsockopt F -GLIBC_2.2 setspent F -GLIBC_2.2 setstate F -GLIBC_2.2 setstate_r F -GLIBC_2.2 settimeofday F -GLIBC_2.2 setttyent F -GLIBC_2.2 setuid F -GLIBC_2.2 setusershell F -GLIBC_2.2 setutent F -GLIBC_2.2 setutxent F -GLIBC_2.2 setvbuf F -GLIBC_2.2 sgetspent F -GLIBC_2.2 sgetspent_r F -GLIBC_2.2 shmat F -GLIBC_2.2 shmctl F -GLIBC_2.2 shmdt F -GLIBC_2.2 shmget F -GLIBC_2.2 shutdown F -GLIBC_2.2 sigaction F -GLIBC_2.2 sigaddset F -GLIBC_2.2 sigaltstack F -GLIBC_2.2 sigandset F -GLIBC_2.2 sigblock F -GLIBC_2.2 sigdelset F -GLIBC_2.2 sigemptyset F -GLIBC_2.2 sigfillset F -GLIBC_2.2 siggetmask F -GLIBC_2.2 sighold F -GLIBC_2.2 sigignore F -GLIBC_2.2 siginterrupt F -GLIBC_2.2 sigisemptyset F -GLIBC_2.2 sigismember F -GLIBC_2.2 siglongjmp F -GLIBC_2.2 signal F -GLIBC_2.2 sigorset F -GLIBC_2.2 sigpause F -GLIBC_2.2 sigpending F -GLIBC_2.2 sigprocmask F -GLIBC_2.2 sigqueue F -GLIBC_2.2 sigrelse F -GLIBC_2.2 sigreturn F -GLIBC_2.2 sigset F -GLIBC_2.2 sigsetmask F -GLIBC_2.2 sigstack F -GLIBC_2.2 sigsuspend F -GLIBC_2.2 sigtimedwait F -GLIBC_2.2 sigvec F -GLIBC_2.2 sigwait F -GLIBC_2.2 sigwaitinfo F -GLIBC_2.2 sleep F -GLIBC_2.2 snprintf F -GLIBC_2.2 socket F -GLIBC_2.2 socketpair F -GLIBC_2.2 sprintf F -GLIBC_2.2 srand F -GLIBC_2.2 srand48 F -GLIBC_2.2 srand48_r F -GLIBC_2.2 srandom F -GLIBC_2.2 srandom_r F -GLIBC_2.2 sscanf F -GLIBC_2.2 ssignal F -GLIBC_2.2 sstk F -GLIBC_2.2 statfs F -GLIBC_2.2 statfs64 F -GLIBC_2.2 statvfs F -GLIBC_2.2 statvfs64 F -GLIBC_2.2 stderr D 0x8 -GLIBC_2.2 stdin D 0x8 -GLIBC_2.2 stdout D 0x8 -GLIBC_2.2 step F -GLIBC_2.2 stime F -GLIBC_2.2 stpcpy F -GLIBC_2.2 stpncpy F -GLIBC_2.2 strcasecmp F -GLIBC_2.2 strcasestr F -GLIBC_2.2 strcat F -GLIBC_2.2 strchr F -GLIBC_2.2 strchrnul F -GLIBC_2.2 strcmp F -GLIBC_2.2 strcoll F -GLIBC_2.2 strcpy F -GLIBC_2.2 strcspn F -GLIBC_2.2 strdup F -GLIBC_2.2 strerror F -GLIBC_2.2 strerror_r F -GLIBC_2.2 strfmon F -GLIBC_2.2 strfry F -GLIBC_2.2 strftime F -GLIBC_2.2 strlen F -GLIBC_2.2 strncasecmp F -GLIBC_2.2 strncat F -GLIBC_2.2 strncmp F -GLIBC_2.2 strncpy F -GLIBC_2.2 strndup F -GLIBC_2.2 strnlen F -GLIBC_2.2 strpbrk F -GLIBC_2.2 strptime F -GLIBC_2.2 strrchr F -GLIBC_2.2 strsep F -GLIBC_2.2 strsignal F -GLIBC_2.2 strspn F -GLIBC_2.2 strstr F -GLIBC_2.2 strtod F -GLIBC_2.2 strtof F -GLIBC_2.2 strtoimax F -GLIBC_2.2 strtok F -GLIBC_2.2 strtok_r F -GLIBC_2.2 strtol F -GLIBC_2.2 strtold F -GLIBC_2.2 strtoll F -GLIBC_2.2 strtoq F -GLIBC_2.2 strtoul F -GLIBC_2.2 strtoull F -GLIBC_2.2 strtoumax F -GLIBC_2.2 strtouq F -GLIBC_2.2 strverscmp F -GLIBC_2.2 strxfrm F -GLIBC_2.2 stty F -GLIBC_2.2 svc_exit F -GLIBC_2.2 svc_fdset D 0x80 -GLIBC_2.2 svc_getreq F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_getreqset F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x8 -GLIBC_2.2 svc_register F -GLIBC_2.2 svc_run F -GLIBC_2.2 svc_sendreply F -GLIBC_2.2 svc_unregister F -GLIBC_2.2 svcauthdes_stats D 0x18 -GLIBC_2.2 svcerr_auth F -GLIBC_2.2 svcerr_decode F -GLIBC_2.2 svcerr_noproc F -GLIBC_2.2 svcerr_noprog F -GLIBC_2.2 svcerr_progvers F -GLIBC_2.2 svcerr_systemerr F -GLIBC_2.2 svcerr_weakauth F -GLIBC_2.2 svcfd_create F -GLIBC_2.2 svcraw_create F -GLIBC_2.2 svctcp_create F -GLIBC_2.2 svcudp_bufcreate F -GLIBC_2.2 svcudp_create F -GLIBC_2.2 svcudp_enablecache F -GLIBC_2.2 svcunix_create F -GLIBC_2.2 svcunixfd_create F -GLIBC_2.2 swab F -GLIBC_2.2 swapcontext F -GLIBC_2.2 swapoff F -GLIBC_2.2 swapon F -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 symlink F -GLIBC_2.2 sync F -GLIBC_2.2 sys_errlist D 0x3e8 -GLIBC_2.2 sys_nerr D 0x4 -GLIBC_2.2 sys_sigabbrev D 0x200 -GLIBC_2.2 sys_siglist D 0x200 -GLIBC_2.2 syscall F -GLIBC_2.2 sysconf F -GLIBC_2.2 sysctl F -GLIBC_2.2 sysinfo F -GLIBC_2.2 syslog F -GLIBC_2.2 system F -GLIBC_2.2 sysv_signal F -GLIBC_2.2 tcdrain F -GLIBC_2.2 tcflow F -GLIBC_2.2 tcflush F -GLIBC_2.2 tcgetattr F -GLIBC_2.2 tcgetpgrp F -GLIBC_2.2 tcgetsid F -GLIBC_2.2 tcsendbreak F -GLIBC_2.2 tcsetattr F -GLIBC_2.2 tcsetpgrp F -GLIBC_2.2 tdelete F -GLIBC_2.2 tdestroy F -GLIBC_2.2 telldir F -GLIBC_2.2 tempnam F -GLIBC_2.2 textdomain F -GLIBC_2.2 tfind F -GLIBC_2.2 time F -GLIBC_2.2 timegm F -GLIBC_2.2 timelocal F -GLIBC_2.2 times F -GLIBC_2.2 timezone D 0x8 -GLIBC_2.2 tmpfile F -GLIBC_2.2 tmpfile64 F -GLIBC_2.2 tmpnam F -GLIBC_2.2 tmpnam_r F -GLIBC_2.2 toascii F -GLIBC_2.2 tolower F -GLIBC_2.2 toupper F -GLIBC_2.2 towctrans F -GLIBC_2.2 towlower F -GLIBC_2.2 towupper F -GLIBC_2.2 tr_break F -GLIBC_2.2 truncate F -GLIBC_2.2 truncate64 F -GLIBC_2.2 tsearch F -GLIBC_2.2 ttyname F -GLIBC_2.2 ttyname_r F -GLIBC_2.2 ttyslot F -GLIBC_2.2 twalk F -GLIBC_2.2 tzname D 0x10 -GLIBC_2.2 tzset F -GLIBC_2.2 ualarm F -GLIBC_2.2 ulckpwdf F -GLIBC_2.2 ulimit F -GLIBC_2.2 umask F -GLIBC_2.2 umount F -GLIBC_2.2 umount2 F -GLIBC_2.2 uname F -GLIBC_2.2 ungetc F -GLIBC_2.2 ungetwc F -GLIBC_2.2 unlink F -GLIBC_2.2 unlockpt F -GLIBC_2.2 unsetenv F -GLIBC_2.2 updwtmp F -GLIBC_2.2 updwtmpx F -GLIBC_2.2 uselib F -GLIBC_2.2 user2netname F -GLIBC_2.2 usleep F -GLIBC_2.2 ustat F -GLIBC_2.2 utime F -GLIBC_2.2 utimes F -GLIBC_2.2 utmpname F -GLIBC_2.2 utmpxname F -GLIBC_2.2 valloc F -GLIBC_2.2 vasprintf F -GLIBC_2.2 vdprintf F -GLIBC_2.2 verr F -GLIBC_2.2 verrx F -GLIBC_2.2 versionsort F -GLIBC_2.2 versionsort64 F -GLIBC_2.2 vfork F -GLIBC_2.2 vfprintf F -GLIBC_2.2 vfscanf F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vhangup F -GLIBC_2.2 vlimit F -GLIBC_2.2 vprintf F -GLIBC_2.2 vscanf F -GLIBC_2.2 vsnprintf F -GLIBC_2.2 vsprintf F -GLIBC_2.2 vsscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vsyslog F -GLIBC_2.2 vtimes F -GLIBC_2.2 vwarn F -GLIBC_2.2 vwarnx F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 wait F -GLIBC_2.2 wait3 F -GLIBC_2.2 wait4 F -GLIBC_2.2 waitid F -GLIBC_2.2 waitpid F -GLIBC_2.2 warn F -GLIBC_2.2 warnx F -GLIBC_2.2 wcpcpy F -GLIBC_2.2 wcpncpy F -GLIBC_2.2 wcrtomb F -GLIBC_2.2 wcscasecmp F -GLIBC_2.2 wcscat F -GLIBC_2.2 wcschr F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcscmp F -GLIBC_2.2 wcscoll F -GLIBC_2.2 wcscpy F -GLIBC_2.2 wcscspn F -GLIBC_2.2 wcsdup F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wcslen F -GLIBC_2.2 wcsncasecmp F -GLIBC_2.2 wcsncat F -GLIBC_2.2 wcsncmp F -GLIBC_2.2 wcsncpy F -GLIBC_2.2 wcsnlen F -GLIBC_2.2 wcsnrtombs F -GLIBC_2.2 wcspbrk F -GLIBC_2.2 wcsrchr F -GLIBC_2.2 wcsrtombs F -GLIBC_2.2 wcsspn F -GLIBC_2.2 wcsstr F -GLIBC_2.2 wcstod F -GLIBC_2.2 wcstof F -GLIBC_2.2 wcstoimax F -GLIBC_2.2 wcstok F -GLIBC_2.2 wcstol F -GLIBC_2.2 wcstold F -GLIBC_2.2 wcstoll F -GLIBC_2.2 wcstombs F -GLIBC_2.2 wcstoq F -GLIBC_2.2 wcstoul F -GLIBC_2.2 wcstoull F -GLIBC_2.2 wcstoumax F -GLIBC_2.2 wcstouq F -GLIBC_2.2 wcswcs F -GLIBC_2.2 wcswidth F -GLIBC_2.2 wcsxfrm F -GLIBC_2.2 wctob F -GLIBC_2.2 wctomb F -GLIBC_2.2 wctrans F -GLIBC_2.2 wctype F -GLIBC_2.2 wcwidth F -GLIBC_2.2 wmemchr F -GLIBC_2.2 wmemcmp F -GLIBC_2.2 wmemcpy F -GLIBC_2.2 wmemmove F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wmemset F -GLIBC_2.2 wordexp F -GLIBC_2.2 wordfree F -GLIBC_2.2 wprintf F -GLIBC_2.2 write F -GLIBC_2.2 writev F -GLIBC_2.2 wscanf F -GLIBC_2.2 xdecrypt F -GLIBC_2.2 xdr_accepted_reply F -GLIBC_2.2 xdr_array F -GLIBC_2.2 xdr_authdes_cred F -GLIBC_2.2 xdr_authdes_verf F -GLIBC_2.2 xdr_authunix_parms F -GLIBC_2.2 xdr_bool F -GLIBC_2.2 xdr_bytes F -GLIBC_2.2 xdr_callhdr F -GLIBC_2.2 xdr_callmsg F -GLIBC_2.2 xdr_char F -GLIBC_2.2 xdr_cryptkeyarg F -GLIBC_2.2 xdr_cryptkeyarg2 F -GLIBC_2.2 xdr_cryptkeyres F -GLIBC_2.2 xdr_des_block F -GLIBC_2.2 xdr_double F -GLIBC_2.2 xdr_enum F -GLIBC_2.2 xdr_float F -GLIBC_2.2 xdr_free F -GLIBC_2.2 xdr_getcredres F -GLIBC_2.2 xdr_hyper F -GLIBC_2.2 xdr_int F -GLIBC_2.2 xdr_int16_t F -GLIBC_2.2 xdr_int32_t F -GLIBC_2.2 xdr_int64_t F -GLIBC_2.2 xdr_int8_t F -GLIBC_2.2 xdr_key_netstarg F -GLIBC_2.2 xdr_key_netstres F -GLIBC_2.2 xdr_keybuf F -GLIBC_2.2 xdr_keystatus F -GLIBC_2.2 xdr_long F -GLIBC_2.2 xdr_longlong_t F -GLIBC_2.2 xdr_netnamestr F -GLIBC_2.2 xdr_netobj F -GLIBC_2.2 xdr_opaque F -GLIBC_2.2 xdr_opaque_auth F -GLIBC_2.2 xdr_pmap F -GLIBC_2.2 xdr_pmaplist F -GLIBC_2.2 xdr_pointer F -GLIBC_2.2 xdr_reference F -GLIBC_2.2 xdr_rejected_reply F -GLIBC_2.2 xdr_replymsg F -GLIBC_2.2 xdr_rmtcall_args F -GLIBC_2.2 xdr_rmtcallres F -GLIBC_2.2 xdr_short F -GLIBC_2.2 xdr_sizeof F -GLIBC_2.2 xdr_string F -GLIBC_2.2 xdr_u_char F -GLIBC_2.2 xdr_u_hyper F -GLIBC_2.2 xdr_u_int F -GLIBC_2.2 xdr_u_long F -GLIBC_2.2 xdr_u_longlong_t F -GLIBC_2.2 xdr_u_short F -GLIBC_2.2 xdr_uint16_t F -GLIBC_2.2 xdr_uint32_t F -GLIBC_2.2 xdr_uint64_t F -GLIBC_2.2 xdr_uint8_t F -GLIBC_2.2 xdr_union F -GLIBC_2.2 xdr_unixcred F -GLIBC_2.2 xdr_vector F -GLIBC_2.2 xdr_void F -GLIBC_2.2 xdr_wrapstring F -GLIBC_2.2 xdrmem_create F -GLIBC_2.2 xdrrec_create F -GLIBC_2.2 xdrrec_endofrecord F -GLIBC_2.2 xdrrec_eof F -GLIBC_2.2 xdrrec_skiprecord F -GLIBC_2.2 xdrstdio_create F -GLIBC_2.2 xencrypt F -GLIBC_2.2 xprt_register F -GLIBC_2.2 xprt_unregister F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.2 wordexp F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.2.6 getunwind F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 _sys_errlist D 0x3f0 -GLIBC_2.3 _sys_nerr D 0x4 -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 sys_errlist D 0x3f0 -GLIBC_2.3 sys_nerr D 0x4 -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x208 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 strtoll_l F -GLIBC_2.3.3 strtoull_l F -GLIBC_2.3.3 sys_sigabbrev D 0x208 -GLIBC_2.3.3 sys_siglist D 0x208 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 _sys_errlist D 0x420 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 futimesat F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sys_errlist D 0x420 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/ia64/libcrypt.abilist b/sysdeps/unix/sysv/linux/ia64/libcrypt.abilist deleted file mode 100644 index 4db2639336..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 crypt F -GLIBC_2.0 crypt_r F -GLIBC_2.0 encrypt F -GLIBC_2.0 encrypt_r F -GLIBC_2.0 fcrypt F -GLIBC_2.0 setkey F -GLIBC_2.0 setkey_r F diff --git a/sysdeps/unix/sysv/linux/ia64/libdl.abilist b/sysdeps/unix/sysv/linux/ia64/libdl.abilist deleted file mode 100644 index 5536f6e0a9..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/libdl.abilist +++ /dev/null @@ -1,14 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 dladdr F -GLIBC_2.0 dlclose F -GLIBC_2.0 dlerror F -GLIBC_2.0 dlopen F -GLIBC_2.0 dlsym F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 dlopen F -GLIBC_2.1 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F diff --git a/sysdeps/unix/sysv/linux/ia64/libm.abilist b/sysdeps/unix/sysv/linux/ia64/libm.abilist deleted file mode 100644 index d7d80065fb..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/libm.abilist +++ /dev/null @@ -1,405 +0,0 @@ -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j0l_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __j1l_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __jnl_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y0l_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __y1l_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.15 __ynl_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _LIB_VERSION D 0x4 -GLIBC_2.2 __clog10 F -GLIBC_2.2 __clog10f F -GLIBC_2.2 __clog10l F -GLIBC_2.2 __finite F -GLIBC_2.2 __finitef F -GLIBC_2.2 __finitel F -GLIBC_2.2 __fpclassify F -GLIBC_2.2 __fpclassifyf F -GLIBC_2.2 __fpclassifyl F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 __signbitl F -GLIBC_2.2 acos F -GLIBC_2.2 acosf F -GLIBC_2.2 acosh F -GLIBC_2.2 acoshf F -GLIBC_2.2 acoshl F -GLIBC_2.2 acosl F -GLIBC_2.2 asin F -GLIBC_2.2 asinf F -GLIBC_2.2 asinh F -GLIBC_2.2 asinhf F -GLIBC_2.2 asinhl F -GLIBC_2.2 asinl F -GLIBC_2.2 atan F -GLIBC_2.2 atan2 F -GLIBC_2.2 atan2f F -GLIBC_2.2 atan2l F -GLIBC_2.2 atanf F -GLIBC_2.2 atanh F -GLIBC_2.2 atanhf F -GLIBC_2.2 atanhl F -GLIBC_2.2 atanl F -GLIBC_2.2 cabs F -GLIBC_2.2 cabsf F -GLIBC_2.2 cabsl F -GLIBC_2.2 cacos F -GLIBC_2.2 cacosf F -GLIBC_2.2 cacosh F -GLIBC_2.2 cacoshf F -GLIBC_2.2 cacoshl F -GLIBC_2.2 cacosl F -GLIBC_2.2 carg F -GLIBC_2.2 cargf F -GLIBC_2.2 cargl F -GLIBC_2.2 casin F -GLIBC_2.2 casinf F -GLIBC_2.2 casinh F -GLIBC_2.2 casinhf F -GLIBC_2.2 casinhl F -GLIBC_2.2 casinl F -GLIBC_2.2 catan F -GLIBC_2.2 catanf F -GLIBC_2.2 catanh F -GLIBC_2.2 catanhf F -GLIBC_2.2 catanhl F -GLIBC_2.2 catanl F -GLIBC_2.2 cbrt F -GLIBC_2.2 cbrtf F -GLIBC_2.2 cbrtl F -GLIBC_2.2 ccos F -GLIBC_2.2 ccosf F -GLIBC_2.2 ccosh F -GLIBC_2.2 ccoshf F -GLIBC_2.2 ccoshl F -GLIBC_2.2 ccosl F -GLIBC_2.2 ceil F -GLIBC_2.2 ceilf F -GLIBC_2.2 ceill F -GLIBC_2.2 cexp F -GLIBC_2.2 cexpf F -GLIBC_2.2 cexpl F -GLIBC_2.2 cimag F -GLIBC_2.2 cimagf F -GLIBC_2.2 cimagl F -GLIBC_2.2 clog F -GLIBC_2.2 clog10 F -GLIBC_2.2 clog10f F -GLIBC_2.2 clog10l F -GLIBC_2.2 clogf F -GLIBC_2.2 clogl F -GLIBC_2.2 conj F -GLIBC_2.2 conjf F -GLIBC_2.2 conjl F -GLIBC_2.2 copysign F -GLIBC_2.2 copysignf F -GLIBC_2.2 copysignl F -GLIBC_2.2 cos F -GLIBC_2.2 cosf F -GLIBC_2.2 cosh F -GLIBC_2.2 coshf F -GLIBC_2.2 coshl F -GLIBC_2.2 cosl F -GLIBC_2.2 cpow F -GLIBC_2.2 cpowf F -GLIBC_2.2 cpowl F -GLIBC_2.2 cproj F -GLIBC_2.2 cprojf F -GLIBC_2.2 cprojl F -GLIBC_2.2 creal F -GLIBC_2.2 crealf F -GLIBC_2.2 creall F -GLIBC_2.2 csin F -GLIBC_2.2 csinf F -GLIBC_2.2 csinh F -GLIBC_2.2 csinhf F -GLIBC_2.2 csinhl F -GLIBC_2.2 csinl F -GLIBC_2.2 csqrt F -GLIBC_2.2 csqrtf F -GLIBC_2.2 csqrtl F -GLIBC_2.2 ctan F -GLIBC_2.2 ctanf F -GLIBC_2.2 ctanh F -GLIBC_2.2 ctanhf F -GLIBC_2.2 ctanhl F -GLIBC_2.2 ctanl F -GLIBC_2.2 drem F -GLIBC_2.2 dremf F -GLIBC_2.2 dreml F -GLIBC_2.2 erf F -GLIBC_2.2 erfc F -GLIBC_2.2 erfcf F -GLIBC_2.2 erfcl F -GLIBC_2.2 erff F -GLIBC_2.2 erfl F -GLIBC_2.2 exp F -GLIBC_2.2 exp10 F -GLIBC_2.2 exp10f F -GLIBC_2.2 exp10l F -GLIBC_2.2 exp2 F -GLIBC_2.2 exp2f F -GLIBC_2.2 exp2l F -GLIBC_2.2 expf F -GLIBC_2.2 expl F -GLIBC_2.2 expm1 F -GLIBC_2.2 expm1f F -GLIBC_2.2 expm1l F -GLIBC_2.2 fabs F -GLIBC_2.2 fabsf F -GLIBC_2.2 fabsl F -GLIBC_2.2 fdim F -GLIBC_2.2 fdimf F -GLIBC_2.2 fdiml F -GLIBC_2.2 feclearexcept F -GLIBC_2.2 fedisableexcept F -GLIBC_2.2 feenableexcept F -GLIBC_2.2 fegetenv F -GLIBC_2.2 fegetexcept F -GLIBC_2.2 fegetexceptflag F -GLIBC_2.2 fegetround F -GLIBC_2.2 feholdexcept F -GLIBC_2.2 feraiseexcept F -GLIBC_2.2 fesetenv F -GLIBC_2.2 fesetexceptflag F -GLIBC_2.2 fesetround F -GLIBC_2.2 fetestexcept F -GLIBC_2.2 feupdateenv F -GLIBC_2.2 finite F -GLIBC_2.2 finitef F -GLIBC_2.2 finitel F -GLIBC_2.2 floor F -GLIBC_2.2 floorf F -GLIBC_2.2 floorl F -GLIBC_2.2 fma F -GLIBC_2.2 fmaf F -GLIBC_2.2 fmal F -GLIBC_2.2 fmax F -GLIBC_2.2 fmaxf F -GLIBC_2.2 fmaxl F -GLIBC_2.2 fmin F -GLIBC_2.2 fminf F -GLIBC_2.2 fminl F -GLIBC_2.2 fmod F -GLIBC_2.2 fmodf F -GLIBC_2.2 fmodl F -GLIBC_2.2 frexp F -GLIBC_2.2 frexpf F -GLIBC_2.2 frexpl F -GLIBC_2.2 gamma F -GLIBC_2.2 gammaf F -GLIBC_2.2 gammal F -GLIBC_2.2 hypot F -GLIBC_2.2 hypotf F -GLIBC_2.2 hypotl F -GLIBC_2.2 ilogb F -GLIBC_2.2 ilogbf F -GLIBC_2.2 ilogbl F -GLIBC_2.2 j0 F -GLIBC_2.2 j0f F -GLIBC_2.2 j0l F -GLIBC_2.2 j1 F -GLIBC_2.2 j1f F -GLIBC_2.2 j1l F -GLIBC_2.2 jn F -GLIBC_2.2 jnf F -GLIBC_2.2 jnl F -GLIBC_2.2 ldexp F -GLIBC_2.2 ldexpf F -GLIBC_2.2 ldexpl F -GLIBC_2.2 lgamma F -GLIBC_2.2 lgamma_r F -GLIBC_2.2 lgammaf F -GLIBC_2.2 lgammaf_r F -GLIBC_2.2 lgammal F -GLIBC_2.2 lgammal_r F -GLIBC_2.2 llrint F -GLIBC_2.2 llrintf F -GLIBC_2.2 llrintl F -GLIBC_2.2 llround F -GLIBC_2.2 llroundf F -GLIBC_2.2 llroundl F -GLIBC_2.2 log F -GLIBC_2.2 log10 F -GLIBC_2.2 log10f F -GLIBC_2.2 log10l F -GLIBC_2.2 log1p F -GLIBC_2.2 log1pf F -GLIBC_2.2 log1pl F -GLIBC_2.2 log2 F -GLIBC_2.2 log2f F -GLIBC_2.2 log2l F -GLIBC_2.2 logb F -GLIBC_2.2 logbf F -GLIBC_2.2 logbl F -GLIBC_2.2 logf F -GLIBC_2.2 logl F -GLIBC_2.2 lrint F -GLIBC_2.2 lrintf F -GLIBC_2.2 lrintl F -GLIBC_2.2 lround F -GLIBC_2.2 lroundf F -GLIBC_2.2 lroundl F -GLIBC_2.2 matherr F -GLIBC_2.2 modf F -GLIBC_2.2 modff F -GLIBC_2.2 modfl F -GLIBC_2.2 nan F -GLIBC_2.2 nanf F -GLIBC_2.2 nanl F -GLIBC_2.2 nearbyint F -GLIBC_2.2 nearbyintf F -GLIBC_2.2 nearbyintl F -GLIBC_2.2 nextafter F -GLIBC_2.2 nextafterf F -GLIBC_2.2 nextafterl F -GLIBC_2.2 nexttoward F -GLIBC_2.2 nexttowardf F -GLIBC_2.2 nexttowardl F -GLIBC_2.2 pow F -GLIBC_2.2 pow10 F -GLIBC_2.2 pow10f F -GLIBC_2.2 pow10l F -GLIBC_2.2 powf F -GLIBC_2.2 powl F -GLIBC_2.2 remainder F -GLIBC_2.2 remainderf F -GLIBC_2.2 remainderl F -GLIBC_2.2 remquo F -GLIBC_2.2 remquof F -GLIBC_2.2 remquol F -GLIBC_2.2 rint F -GLIBC_2.2 rintf F -GLIBC_2.2 rintl F -GLIBC_2.2 round F -GLIBC_2.2 roundf F -GLIBC_2.2 roundl F -GLIBC_2.2 scalb F -GLIBC_2.2 scalbf F -GLIBC_2.2 scalbl F -GLIBC_2.2 scalbln F -GLIBC_2.2 scalblnf F -GLIBC_2.2 scalblnl F -GLIBC_2.2 scalbn F -GLIBC_2.2 scalbnf F -GLIBC_2.2 scalbnl F -GLIBC_2.2 signgam D 0x4 -GLIBC_2.2 significand F -GLIBC_2.2 significandf F -GLIBC_2.2 significandl F -GLIBC_2.2 sin F -GLIBC_2.2 sincos F -GLIBC_2.2 sincosf F -GLIBC_2.2 sincosl F -GLIBC_2.2 sinf F -GLIBC_2.2 sinh F -GLIBC_2.2 sinhf F -GLIBC_2.2 sinhl F -GLIBC_2.2 sinl F -GLIBC_2.2 sqrt F -GLIBC_2.2 sqrtf F -GLIBC_2.2 sqrtl F -GLIBC_2.2 tan F -GLIBC_2.2 tanf F -GLIBC_2.2 tanh F -GLIBC_2.2 tanhf F -GLIBC_2.2 tanhl F -GLIBC_2.2 tanl F -GLIBC_2.2 tgamma F -GLIBC_2.2 tgammaf F -GLIBC_2.2 tgammal F -GLIBC_2.2 trunc F -GLIBC_2.2 truncf F -GLIBC_2.2 truncl F -GLIBC_2.2 y0 F -GLIBC_2.2 y0f F -GLIBC_2.2 y0l F -GLIBC_2.2 y1 F -GLIBC_2.2 y1f F -GLIBC_2.2 y1l F -GLIBC_2.2 yn F -GLIBC_2.2 ynf F -GLIBC_2.2 ynl F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 matherrf F -GLIBC_2.2.3 matherrl F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iscanonicall F -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/ia64/libnsl.abilist b/sysdeps/unix/sysv/linux/ia64/libnsl.abilist deleted file mode 100644 index a23db2aeaf..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/libnsl.abilist +++ /dev/null @@ -1,124 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __yp_check F -GLIBC_2.0 xdr_domainname F -GLIBC_2.0 xdr_keydat F -GLIBC_2.0 xdr_mapname F -GLIBC_2.0 xdr_peername F -GLIBC_2.0 xdr_valdat F -GLIBC_2.0 xdr_yp_buf F -GLIBC_2.0 xdr_ypbind_binding F -GLIBC_2.0 xdr_ypbind_resp F -GLIBC_2.0 xdr_ypbind_resptype F -GLIBC_2.0 xdr_ypbind_setdom F -GLIBC_2.0 xdr_ypdelete_args F -GLIBC_2.0 xdr_ypmap_parms F -GLIBC_2.0 xdr_ypmaplist F -GLIBC_2.0 xdr_yppush_status F -GLIBC_2.0 xdr_yppushresp_xfr F -GLIBC_2.0 xdr_ypreq_key F -GLIBC_2.0 xdr_ypreq_nokey F -GLIBC_2.0 xdr_ypreq_xfr F -GLIBC_2.0 xdr_ypresp_all F -GLIBC_2.0 xdr_ypresp_key_val F -GLIBC_2.0 xdr_ypresp_maplist F -GLIBC_2.0 xdr_ypresp_master F -GLIBC_2.0 xdr_ypresp_order F -GLIBC_2.0 xdr_ypresp_val F -GLIBC_2.0 xdr_ypresp_xfr F -GLIBC_2.0 xdr_ypstat F -GLIBC_2.0 xdr_ypupdate_args F -GLIBC_2.0 xdr_ypxfrstat F -GLIBC_2.0 yp_all F -GLIBC_2.0 yp_bind F -GLIBC_2.0 yp_first F -GLIBC_2.0 yp_get_default_domain F -GLIBC_2.0 yp_maplist F -GLIBC_2.0 yp_master F -GLIBC_2.0 yp_match F -GLIBC_2.0 yp_next F -GLIBC_2.0 yp_order F -GLIBC_2.0 yp_unbind F -GLIBC_2.0 yp_update F -GLIBC_2.0 ypbinderr_string F -GLIBC_2.0 yperr_string F -GLIBC_2.0 ypprot_err F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __free_fdresult F -GLIBC_2.1 __nis_default_access F -GLIBC_2.1 __nis_default_group F -GLIBC_2.1 __nis_default_owner F -GLIBC_2.1 __nis_default_ttl F -GLIBC_2.1 __nis_finddirectory F -GLIBC_2.1 __nis_hash F -GLIBC_2.1 __nisbind_connect F -GLIBC_2.1 __nisbind_create F -GLIBC_2.1 __nisbind_destroy F -GLIBC_2.1 __nisbind_next F -GLIBC_2.1 nis_add F -GLIBC_2.1 nis_add_entry F -GLIBC_2.1 nis_addmember F -GLIBC_2.1 nis_checkpoint F -GLIBC_2.1 nis_clone_directory F -GLIBC_2.1 nis_clone_object F -GLIBC_2.1 nis_clone_result F -GLIBC_2.1 nis_creategroup F -GLIBC_2.1 nis_destroy_object F -GLIBC_2.1 nis_destroygroup F -GLIBC_2.1 nis_dir_cmp F -GLIBC_2.1 nis_domain_of F -GLIBC_2.1 nis_domain_of_r F -GLIBC_2.1 nis_first_entry F -GLIBC_2.1 nis_free_directory F -GLIBC_2.1 nis_free_object F -GLIBC_2.1 nis_free_request F -GLIBC_2.1 nis_freenames F -GLIBC_2.1 nis_freeresult F -GLIBC_2.1 nis_freeservlist F -GLIBC_2.1 nis_freetags F -GLIBC_2.1 nis_getnames F -GLIBC_2.1 nis_getservlist F -GLIBC_2.1 nis_ismember F -GLIBC_2.1 nis_leaf_of F -GLIBC_2.1 nis_leaf_of_r F -GLIBC_2.1 nis_lerror F -GLIBC_2.1 nis_list F -GLIBC_2.1 nis_local_directory F -GLIBC_2.1 nis_local_group F -GLIBC_2.1 nis_local_host F -GLIBC_2.1 nis_local_principal F -GLIBC_2.1 nis_lookup F -GLIBC_2.1 nis_mkdir F -GLIBC_2.1 nis_modify F -GLIBC_2.1 nis_modify_entry F -GLIBC_2.1 nis_name_of F -GLIBC_2.1 nis_name_of_r F -GLIBC_2.1 nis_next_entry F -GLIBC_2.1 nis_perror F -GLIBC_2.1 nis_ping F -GLIBC_2.1 nis_print_directory F -GLIBC_2.1 nis_print_entry F -GLIBC_2.1 nis_print_group F -GLIBC_2.1 nis_print_group_entry F -GLIBC_2.1 nis_print_link F -GLIBC_2.1 nis_print_object F -GLIBC_2.1 nis_print_result F -GLIBC_2.1 nis_print_rights F -GLIBC_2.1 nis_print_table F -GLIBC_2.1 nis_read_obj F -GLIBC_2.1 nis_remove F -GLIBC_2.1 nis_remove_entry F -GLIBC_2.1 nis_removemember F -GLIBC_2.1 nis_rmdir F -GLIBC_2.1 nis_servstate F -GLIBC_2.1 nis_sperrno F -GLIBC_2.1 nis_sperror F -GLIBC_2.1 nis_sperror_r F -GLIBC_2.1 nis_stats F -GLIBC_2.1 nis_verifygroup F -GLIBC_2.1 nis_write_obj F -GLIBC_2.1 readColdStartFile F -GLIBC_2.1 writeColdStartFile F -GLIBC_2.1 xdr_cback_data F -GLIBC_2.1 xdr_obj_p F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 xdr_ypall F diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist deleted file mode 100644 index d4c8dedd6c..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist +++ /dev/null @@ -1,247 +0,0 @@ -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _IO_flockfile F -GLIBC_2.2 _IO_ftrylockfile F -GLIBC_2.2 _IO_funlockfile F -GLIBC_2.2 __close F -GLIBC_2.2 __connect F -GLIBC_2.2 __errno_location F -GLIBC_2.2 __fcntl F -GLIBC_2.2 __fork F -GLIBC_2.2 __h_errno_location F -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __lseek F -GLIBC_2.2 __open F -GLIBC_2.2 __open64 F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pthread_getspecific F -GLIBC_2.2 __pthread_key_create F -GLIBC_2.2 __pthread_mutex_destroy F -GLIBC_2.2 __pthread_mutex_init F -GLIBC_2.2 __pthread_mutex_lock F -GLIBC_2.2 __pthread_mutex_trylock F -GLIBC_2.2 __pthread_mutex_unlock F -GLIBC_2.2 __pthread_mutexattr_destroy F -GLIBC_2.2 __pthread_mutexattr_init F -GLIBC_2.2 __pthread_mutexattr_settype F -GLIBC_2.2 __pthread_once F -GLIBC_2.2 __pthread_rwlock_destroy F -GLIBC_2.2 __pthread_rwlock_init F -GLIBC_2.2 __pthread_rwlock_rdlock F -GLIBC_2.2 __pthread_rwlock_tryrdlock F -GLIBC_2.2 __pthread_rwlock_trywrlock F -GLIBC_2.2 __pthread_rwlock_unlock F -GLIBC_2.2 __pthread_rwlock_wrlock F -GLIBC_2.2 __pthread_setspecific F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __read F -GLIBC_2.2 __res_state F -GLIBC_2.2 __send F -GLIBC_2.2 __sigaction F -GLIBC_2.2 __vfork F -GLIBC_2.2 __wait F -GLIBC_2.2 __write F -GLIBC_2.2 _pthread_cleanup_pop F -GLIBC_2.2 _pthread_cleanup_pop_restore F -GLIBC_2.2 _pthread_cleanup_push F -GLIBC_2.2 _pthread_cleanup_push_defer F -GLIBC_2.2 accept F -GLIBC_2.2 close F -GLIBC_2.2 connect F -GLIBC_2.2 fcntl F -GLIBC_2.2 flockfile F -GLIBC_2.2 fork F -GLIBC_2.2 fsync F -GLIBC_2.2 ftrylockfile F -GLIBC_2.2 funlockfile F -GLIBC_2.2 longjmp F -GLIBC_2.2 lseek F -GLIBC_2.2 lseek64 F -GLIBC_2.2 msync F -GLIBC_2.2 nanosleep F -GLIBC_2.2 open F -GLIBC_2.2 open64 F -GLIBC_2.2 pause F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 pthread_atfork F -GLIBC_2.2 pthread_attr_destroy F -GLIBC_2.2 pthread_attr_getdetachstate F -GLIBC_2.2 pthread_attr_getguardsize F -GLIBC_2.2 pthread_attr_getinheritsched F -GLIBC_2.2 pthread_attr_getschedparam F -GLIBC_2.2 pthread_attr_getschedpolicy F -GLIBC_2.2 pthread_attr_getscope F -GLIBC_2.2 pthread_attr_getstack F -GLIBC_2.2 pthread_attr_getstackaddr F -GLIBC_2.2 pthread_attr_getstacksize F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 pthread_attr_setdetachstate F -GLIBC_2.2 pthread_attr_setguardsize F -GLIBC_2.2 pthread_attr_setinheritsched F -GLIBC_2.2 pthread_attr_setschedparam F -GLIBC_2.2 pthread_attr_setschedpolicy F -GLIBC_2.2 pthread_attr_setscope F -GLIBC_2.2 pthread_attr_setstack F -GLIBC_2.2 pthread_attr_setstackaddr F -GLIBC_2.2 pthread_attr_setstacksize F -GLIBC_2.2 pthread_barrier_destroy F -GLIBC_2.2 pthread_barrier_init F -GLIBC_2.2 pthread_barrier_wait F -GLIBC_2.2 pthread_barrierattr_destroy F -GLIBC_2.2 pthread_barrierattr_init F -GLIBC_2.2 pthread_barrierattr_setpshared F -GLIBC_2.2 pthread_cancel F -GLIBC_2.2 pthread_cond_broadcast F -GLIBC_2.2 pthread_cond_destroy F -GLIBC_2.2 pthread_cond_init F -GLIBC_2.2 pthread_cond_signal F -GLIBC_2.2 pthread_cond_timedwait F -GLIBC_2.2 pthread_cond_wait F -GLIBC_2.2 pthread_condattr_destroy F -GLIBC_2.2 pthread_condattr_getpshared F -GLIBC_2.2 pthread_condattr_init F -GLIBC_2.2 pthread_condattr_setpshared F -GLIBC_2.2 pthread_create F -GLIBC_2.2 pthread_detach F -GLIBC_2.2 pthread_equal F -GLIBC_2.2 pthread_exit F -GLIBC_2.2 pthread_getconcurrency F -GLIBC_2.2 pthread_getcpuclockid F -GLIBC_2.2 pthread_getschedparam F -GLIBC_2.2 pthread_getspecific F -GLIBC_2.2 pthread_join F -GLIBC_2.2 pthread_key_create F -GLIBC_2.2 pthread_key_delete F -GLIBC_2.2 pthread_kill F -GLIBC_2.2 pthread_kill_other_threads_np F -GLIBC_2.2 pthread_mutex_destroy F -GLIBC_2.2 pthread_mutex_init F -GLIBC_2.2 pthread_mutex_lock F -GLIBC_2.2 pthread_mutex_timedlock F -GLIBC_2.2 pthread_mutex_trylock F -GLIBC_2.2 pthread_mutex_unlock F -GLIBC_2.2 pthread_mutexattr_destroy F -GLIBC_2.2 pthread_mutexattr_getkind_np F -GLIBC_2.2 pthread_mutexattr_getpshared F -GLIBC_2.2 pthread_mutexattr_gettype F -GLIBC_2.2 pthread_mutexattr_init F -GLIBC_2.2 pthread_mutexattr_setkind_np F -GLIBC_2.2 pthread_mutexattr_setpshared F -GLIBC_2.2 pthread_mutexattr_settype F -GLIBC_2.2 pthread_once F -GLIBC_2.2 pthread_rwlock_destroy F -GLIBC_2.2 pthread_rwlock_init F -GLIBC_2.2 pthread_rwlock_rdlock F -GLIBC_2.2 pthread_rwlock_timedrdlock F -GLIBC_2.2 pthread_rwlock_timedwrlock F -GLIBC_2.2 pthread_rwlock_tryrdlock F -GLIBC_2.2 pthread_rwlock_trywrlock F -GLIBC_2.2 pthread_rwlock_unlock F -GLIBC_2.2 pthread_rwlock_wrlock F -GLIBC_2.2 pthread_rwlockattr_destroy F -GLIBC_2.2 pthread_rwlockattr_getkind_np F -GLIBC_2.2 pthread_rwlockattr_getpshared F -GLIBC_2.2 pthread_rwlockattr_init F -GLIBC_2.2 pthread_rwlockattr_setkind_np F -GLIBC_2.2 pthread_rwlockattr_setpshared F -GLIBC_2.2 pthread_self F -GLIBC_2.2 pthread_setcancelstate F -GLIBC_2.2 pthread_setcanceltype F -GLIBC_2.2 pthread_setconcurrency F -GLIBC_2.2 pthread_setschedparam F -GLIBC_2.2 pthread_setspecific F -GLIBC_2.2 pthread_sigmask F -GLIBC_2.2 pthread_spin_destroy F -GLIBC_2.2 pthread_spin_init F -GLIBC_2.2 pthread_spin_lock F -GLIBC_2.2 pthread_spin_trylock F -GLIBC_2.2 pthread_spin_unlock F -GLIBC_2.2 pthread_testcancel F -GLIBC_2.2 pthread_yield F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 raise F -GLIBC_2.2 read F -GLIBC_2.2 recv F -GLIBC_2.2 recvfrom F -GLIBC_2.2 recvmsg F -GLIBC_2.2 sem_close F -GLIBC_2.2 sem_destroy F -GLIBC_2.2 sem_getvalue F -GLIBC_2.2 sem_init F -GLIBC_2.2 sem_open F -GLIBC_2.2 sem_post F -GLIBC_2.2 sem_timedwait F -GLIBC_2.2 sem_trywait F -GLIBC_2.2 sem_unlink F -GLIBC_2.2 sem_wait F -GLIBC_2.2 send F -GLIBC_2.2 sendmsg F -GLIBC_2.2 sendto F -GLIBC_2.2 sigaction F -GLIBC_2.2 siglongjmp F -GLIBC_2.2 sigwait F -GLIBC_2.2 system F -GLIBC_2.2 tcdrain F -GLIBC_2.2 vfork F -GLIBC_2.2 wait F -GLIBC_2.2 waitpid F -GLIBC_2.2 write F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 pthread_getattr_np F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_attr_setstack F -GLIBC_2.3.3 pthread_attr_setstacksize F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F diff --git a/sysdeps/unix/sysv/linux/ia64/libresolv.abilist b/sysdeps/unix/sysv/linux/ia64/libresolv.abilist deleted file mode 100644 index 2d92a35e81..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/libresolv.abilist +++ /dev/null @@ -1,100 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __b64_ntop F -GLIBC_2.0 __b64_pton F -GLIBC_2.0 __dn_comp F -GLIBC_2.0 __dn_count_labels F -GLIBC_2.0 __dn_skipname F -GLIBC_2.0 __fp_nquery F -GLIBC_2.0 __fp_query F -GLIBC_2.0 __fp_resstat F -GLIBC_2.0 __hostalias F -GLIBC_2.0 __loc_aton F -GLIBC_2.0 __loc_ntoa F -GLIBC_2.0 __p_cdname F -GLIBC_2.0 __p_cdnname F -GLIBC_2.0 __p_class F -GLIBC_2.0 __p_class_syms D 0xa8 -GLIBC_2.0 __p_fqname F -GLIBC_2.0 __p_fqnname F -GLIBC_2.0 __p_option F -GLIBC_2.0 __p_query F -GLIBC_2.0 __p_secstodate F -GLIBC_2.0 __p_time F -GLIBC_2.0 __p_type F -GLIBC_2.0 __p_type_syms D 0x450 -GLIBC_2.0 __putlong F -GLIBC_2.0 __putshort F -GLIBC_2.0 __res_close F -GLIBC_2.0 __res_dnok F -GLIBC_2.0 __res_hnok F -GLIBC_2.0 __res_isourserver F -GLIBC_2.0 __res_mailok F -GLIBC_2.0 __res_nameinquery F -GLIBC_2.0 __res_ownok F -GLIBC_2.0 __res_queriesmatch F -GLIBC_2.0 __res_send F -GLIBC_2.0 __sym_ntop F -GLIBC_2.0 __sym_ntos F -GLIBC_2.0 __sym_ston F -GLIBC_2.0 _gethtbyaddr F -GLIBC_2.0 _gethtbyname F -GLIBC_2.0 _gethtbyname2 F -GLIBC_2.0 _gethtent F -GLIBC_2.0 _getlong F -GLIBC_2.0 _getshort F -GLIBC_2.0 _res_opcodes D 0x80 -GLIBC_2.0 _sethtent F -GLIBC_2.0 dn_expand F -GLIBC_2.0 inet_net_ntop F -GLIBC_2.0 inet_net_pton F -GLIBC_2.0 inet_neta F -GLIBC_2.0 res_gethostbyaddr F -GLIBC_2.0 res_gethostbyname F -GLIBC_2.0 res_gethostbyname2 F -GLIBC_2.0 res_mkquery F -GLIBC_2.0 res_query F -GLIBC_2.0 res_querydomain F -GLIBC_2.0 res_search F -GLIBC_2.0 res_send_setqhook F -GLIBC_2.0 res_send_setrhook F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __dn_expand F -GLIBC_2.2 __res_hostalias F -GLIBC_2.2 __res_mkquery F -GLIBC_2.2 __res_nmkquery F -GLIBC_2.2 __res_nquery F -GLIBC_2.2 __res_nquerydomain F -GLIBC_2.2 __res_nsearch F -GLIBC_2.2 __res_nsend F -GLIBC_2.2 __res_query F -GLIBC_2.2 __res_querydomain F -GLIBC_2.2 __res_search F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/ia64/librt.abilist b/sysdeps/unix/sysv/linux/ia64/librt.abilist deleted file mode 100644 index aa32ef3be0..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/librt.abilist +++ /dev/null @@ -1,53 +0,0 @@ -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 aio_cancel F -GLIBC_2.1 aio_cancel64 F -GLIBC_2.1 aio_error F -GLIBC_2.1 aio_error64 F -GLIBC_2.1 aio_fsync F -GLIBC_2.1 aio_fsync64 F -GLIBC_2.1 aio_init F -GLIBC_2.1 aio_read F -GLIBC_2.1 aio_read64 F -GLIBC_2.1 aio_return F -GLIBC_2.1 aio_return64 F -GLIBC_2.1 aio_suspend F -GLIBC_2.1 aio_suspend64 F -GLIBC_2.1 aio_write F -GLIBC_2.1 aio_write64 F -GLIBC_2.1 lio_listio F -GLIBC_2.1 lio_listio64 F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 clock_getcpuclockid F -GLIBC_2.2 clock_getres F -GLIBC_2.2 clock_gettime F -GLIBC_2.2 clock_nanosleep F -GLIBC_2.2 clock_settime F -GLIBC_2.2 shm_open F -GLIBC_2.2 shm_unlink F -GLIBC_2.2 timer_create F -GLIBC_2.2 timer_delete F -GLIBC_2.2 timer_getoverrun F -GLIBC_2.2 timer_gettime F -GLIBC_2.2 timer_settime F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 timer_create F -GLIBC_2.3.3 timer_delete F -GLIBC_2.3.3 timer_getoverrun F -GLIBC_2.3.3 timer_gettime F -GLIBC_2.3.3 timer_settime F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/ia64/libthread_db.abilist b/sysdeps/unix/sysv/linux/ia64/libthread_db.abilist deleted file mode 100644 index a8a8c2c68d..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/libthread_db.abilist +++ /dev/null @@ -1,44 +0,0 @@ -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 td_init F -GLIBC_2.1.3 td_log F -GLIBC_2.1.3 td_ta_clear_event F -GLIBC_2.1.3 td_ta_delete F -GLIBC_2.1.3 td_ta_enable_stats F -GLIBC_2.1.3 td_ta_event_addr F -GLIBC_2.1.3 td_ta_event_getmsg F -GLIBC_2.1.3 td_ta_get_nthreads F -GLIBC_2.1.3 td_ta_get_ph F -GLIBC_2.1.3 td_ta_get_stats F -GLIBC_2.1.3 td_ta_map_id2thr F -GLIBC_2.1.3 td_ta_map_lwp2thr F -GLIBC_2.1.3 td_ta_new F -GLIBC_2.1.3 td_ta_reset_stats F -GLIBC_2.1.3 td_ta_set_event F -GLIBC_2.1.3 td_ta_setconcurrency F -GLIBC_2.1.3 td_ta_thr_iter F -GLIBC_2.1.3 td_ta_tsd_iter F -GLIBC_2.1.3 td_thr_clear_event F -GLIBC_2.1.3 td_thr_dbresume F -GLIBC_2.1.3 td_thr_dbsuspend F -GLIBC_2.1.3 td_thr_event_enable F -GLIBC_2.1.3 td_thr_event_getmsg F -GLIBC_2.1.3 td_thr_get_info F -GLIBC_2.1.3 td_thr_getfpregs F -GLIBC_2.1.3 td_thr_getgregs F -GLIBC_2.1.3 td_thr_getxregs F -GLIBC_2.1.3 td_thr_getxregsize F -GLIBC_2.1.3 td_thr_set_event F -GLIBC_2.1.3 td_thr_setfpregs F -GLIBC_2.1.3 td_thr_setgregs F -GLIBC_2.1.3 td_thr_setprio F -GLIBC_2.1.3 td_thr_setsigpending F -GLIBC_2.1.3 td_thr_setxregs F -GLIBC_2.1.3 td_thr_sigsetmask F -GLIBC_2.1.3 td_thr_tsd F -GLIBC_2.1.3 td_thr_validate F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 td_symbol_list F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F diff --git a/sysdeps/unix/sysv/linux/ia64/libutil.abilist b/sysdeps/unix/sysv/linux/ia64/libutil.abilist deleted file mode 100644 index 89c67755c4..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 forkpty F -GLIBC_2.0 login F -GLIBC_2.0 login_tty F -GLIBC_2.0 logout F -GLIBC_2.0 logwtmp F -GLIBC_2.0 openpty F diff --git a/sysdeps/unix/sysv/linux/ia64/localplt.data b/sysdeps/unix/sysv/linux/ia64/localplt.data deleted file mode 100644 index fd2b98c8b6..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/localplt.data +++ /dev/null @@ -1,17 +0,0 @@ -libc.so: calloc -libc.so: free -libc.so: malloc -libc.so: memalign -libc.so: realloc -libm.so: matherr -libm.so: matherrf -libm.so: matherrl -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/unix/sysv/linux/ia64/makecontext.c b/sysdeps/unix/sysv/linux/ia64/makecontext.c deleted file mode 100644 index 299f9a85ae..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/makecontext.c +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -#define PUSH(val) \ -do { \ - if (ia64_rse_is_rnat_slot (rbs)) \ - *rbs++ = 0; \ - *rbs++ = (val); \ -} while (0) - - -/* This implementation can handle an ARGC value of at most 8 and - values can be passed only in integer registers (r32-r39). */ - -void -__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) -{ - struct sigcontext *sc = &ucp->uc_mcontext; - extern void __start_context (ucontext_t *link, long gp, ...); - unsigned long stack_start, stack_end; - va_list ap; - unsigned long *rbs; - int i; - - stack_start = (long) sc->sc_stack.ss_sp; - stack_end = (long) sc->sc_stack.ss_sp + sc->sc_stack.ss_size; - - stack_start = (stack_start + 7) & -8; - stack_end = stack_end & -16; - - if (argc > 8) - { - fprintf (stderr, _("\ -makecontext: does not know how to handle more than 8 arguments\n")); - exit (-1); - } - - /* set the entry point and global pointer: */ - sc->sc_br[0] = ELF_PTR_TO_FDESC (&__start_context)->ip; - sc->sc_br[1] = ELF_PTR_TO_FDESC (func)->ip; - sc->sc_gr[1] = ELF_PTR_TO_FDESC (func)->gp; - - /* set up the call frame: */ - sc->sc_ar_pfs = ((sc->sc_ar_pfs & ~0x3fffffffffUL) - | (argc + 2) | ((argc + 2) << 7)); - rbs = (unsigned long *) stack_start; - PUSH((long) ucp->uc_link); - PUSH(ELF_PTR_TO_FDESC (&__start_context)->gp); - va_start (ap, argc); - for (i = 0; i < argc; ++i) - PUSH(va_arg (ap, long)); - va_end (ap); - - /* set the memory and register stack pointers: */ - sc->sc_ar_bsp = (long) rbs; - sc->sc_gr[12] = stack_end - 16; - - /* clear the NaT bits for r1 and r12: */ - sc->sc_nat &= ~((1 << 1) | (1 << 12)); - sc->sc_ar_rnat = 0; -} - -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/ia64/pipe.S b/sysdeps/unix/sysv/linux/ia64/pipe.S deleted file mode 100644 index 1fd75da8c6..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/pipe.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* __pipe is a special syscall since it returns two values. */ - -#include - -ENTRY(__pipe) - .regstk 1,0,0,0 - DO_CALL (SYS_ify (pipe)) - cmp.ne p6,p0=-1,r10 - ;; -(p6) st4 [in0]=r8,4 -(p6) mov ret0=0 - ;; -(p6) st4 [in0]=r9 -(p6) ret - br.cond.spnt.few __syscall_error -PSEUDO_END(__pipe) - -libc_hidden_def (__pipe) -weak_alias (__pipe, pipe) diff --git a/sysdeps/unix/sysv/linux/ia64/profil-counter.h b/sysdeps/unix/sysv/linux/ia64/profil-counter.h deleted file mode 100644 index 546079d9fc..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/profil-counter.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Machine-dependent SIGPROF signal handler. IA-64 version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* In many Unix systems signal handlers are called like this - and the interrupted PC is easily findable in the `struct sigcontext'. */ - -static void -__profil_counter (int signr, siginfo_t *si, struct sigcontext *scp) -{ - unsigned long ip = scp->sc_ip & ~0X3ULL, slot = scp->sc_ip & 0x3ull; - - /* Note: Linux/ia64 encodes the slot number in bits 0 and 1. We - want to multiply the slot number by four so we can use bins of - width 4 to get accurate instruction-level profiling. */ - profil_count ((void *) (ip + 4*slot)); -} diff --git a/sysdeps/unix/sysv/linux/ia64/pt-vfork.S b/sysdeps/unix/sysv/linux/ia64/pt-vfork.S deleted file mode 100644 index 8e2eccdca1..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/pt-vfork.S +++ /dev/null @@ -1,48 +0,0 @@ -/* vfork ABI-compatibility entry points for libpthread. IA64 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* libpthread used to have its own vfork implementation that differed - from libc's only in having a pointless micro-optimization. There - is no longer any use to having a separate copy in libpthread, but - the historical ABI requires it. For static linking, there is no - need to provide anything here--the libc version will be linked in. - For shared library ABI compatibility, there must be __vfork and - vfork symbols in libpthread.so. */ - -#if (SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_20) \ - || SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_20)) - -LOCAL_LEAF (vfork_compat) - br __libc_vfork - ;; -END (vfork_compat) - -#endif - -#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_20) -weak_alias (vfork_compat, vfork) -compat_symbol (libpthread, vfork_compat, vfork, GLIBC_2_0); -#endif - -#if SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_20) -strong_alias (vfork_compat, __vfork_compat) -compat_symbol (libpthread, __vfork_compat, __vfork, GLIBC_2_1_2); -#endif diff --git a/sysdeps/unix/sysv/linux/ia64/readelflib.c b/sysdeps/unix/sysv/linux/ia64/readelflib.c deleted file mode 100644 index 7ef74c0fc3..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/readelflib.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -int process_elf32_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); -int process_elf64_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); - -/* Returns 0 if everything is ok, != 0 in case of error. */ -int -process_elf_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length) -{ - ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; - int ret; - - if (elf_header->e_ident [EI_CLASS] == ELFCLASS32) - return process_elf32_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - else - { - ret = process_elf64_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - /* Intel 64bit libraries are always libc.so.6+. */ - if (!ret) - *flag = FLAG_IA64_LIB64|FLAG_ELF_LIBC6; - return ret; - } -} - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf32_file -#define __ELF_NATIVE_CLASS 32 -#include "elf/readelflib.c" - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf64_file -#define __ELF_NATIVE_CLASS 64 -#include "elf/readelflib.c" diff --git a/sysdeps/unix/sysv/linux/ia64/register-dump.h b/sysdeps/unix/sysv/linux/ia64/register-dump.h deleted file mode 100644 index 4d0886c92a..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/register-dump.h +++ /dev/null @@ -1,181 +0,0 @@ -/* Dump registers. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2004. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include <_itoa.h> - -/* We will print the register dump in this format: - - GP: XXXXXXXXXXXXXXXX R2: XXXXXXXXXXXXXXXX R3: XXXXXXXXXXXXXXXX - R8: XXXXXXXXXXXXXXXX R9: XXXXXXXXXXXXXXXX R10: XXXXXXXXXXXXXXXX - R11: XXXXXXXXXXXXXXXX SP: XXXXXXXXXXXXXXXX TP: XXXXXXXXXXXXXXXX - R14: XXXXXXXXXXXXXXXX R15: XXXXXXXXXXXXXXXX R16: XXXXXXXXXXXXXXXX - R17: XXXXXXXXXXXXXXXX R18: XXXXXXXXXXXXXXXX R19: XXXXXXXXXXXXXXXX - R20: XXXXXXXXXXXXXXXX R21: XXXXXXXXXXXXXXXX R22: XXXXXXXXXXXXXXXX - R23: XXXXXXXXXXXXXXXX R24: XXXXXXXXXXXXXXXX R25: XXXXXXXXXXXXXXXX - R26: XXXXXXXXXXXXXXXX R27: XXXXXXXXXXXXXXXX R28: XXXXXXXXXXXXXXXX - R29: XXXXXXXXXXXXXXXX R30: XXXXXXXXXXXXXXXX R31: XXXXXXXXXXXXXXXX - - RP: XXXXXXXXXXXXXXXX B6: XXXXXXXXXXXXXXXX B7: XXXXXXXXXXXXXXXX - - IP: XXXXXXXXXXXXXXXX RSC: XXXXXXXXXXXXXXXX PR: XXXXXXXXXXXXXXXX - PFS: XXXXXXXXXXXXXXXX UNAT: XXXXXXXXXXXXXXXX CFM: XXXXXXXXXXXXXXXX - CCV: XXXXXXXXXXXXXXXX FPSR: XXXXXXXXXXXXXXXX - - F32: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX F33: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - F34: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX F35: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -... - F124: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX F125: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - F126: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX F127: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - */ - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -regvalue (unsigned long int *value, char letter, int regno, char *buf) -{ - int n = regno >= 100 ? 3 : regno >= 10 ? 2 : 1; - buf[0] = ' '; - buf[1] = letter; - _itoa_word (regno, buf + 2 + n, 10, 0); - buf[2 + n] = ':'; - for (++n; n <= 4; ++n) - buf[2 + n] = ' '; - hexvalue (value[0], buf + 7, 16); - if (letter == 'F') - { - hexvalue (value[1], buf + 7 + 16, 16); - buf[7 + 32] = '\n'; - } - else - buf[7 + 16] = '\n'; -} - -static void -register_dump (int fd, struct sigcontext *ctx) -{ - char gpregs[32 - 5][8 + 16]; - char fpregs[128 - 32][8 + 32]; - char bpregs[3][8 + 16]; - char spregs[8][16]; - struct iovec iov[146]; - size_t nr = 0; - int i; - -#define ADD_STRING(str) \ - do \ - { \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr; \ - } \ - while (0) -#define ADD_MEM(str, len) \ - do \ - { \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr; \ - } \ - while (0) - - /* Generate strings of register contents. */ - for (i = 1; i < 4; ++i) - { - regvalue (&ctx->sc_gr[i], 'R', i, gpregs[i - 1]); - if (ctx->sc_nat & (1L << i)) - memcpy (gpregs[i - 1] + 7, "NaT ", 16); - } - for (i = 8; i < 32; ++i) - { - regvalue (&ctx->sc_gr[i], 'R', i, gpregs[i - 5]); - if (ctx->sc_nat & (1L << i)) - memcpy (gpregs[i - 1] + 7, "NaT ", 16); - } - memcpy (gpregs[0] + 1, "GP:", 3); - memcpy (gpregs[7] + 1, "SP: ", 4); - memcpy (gpregs[8] + 1, "TP: ", 4); - - regvalue (&ctx->sc_br[0], 'B', 0, bpregs[0]); - regvalue (&ctx->sc_br[6], 'B', 6, bpregs[1]); - regvalue (&ctx->sc_br[7], 'B', 7, bpregs[2]); - memcpy (bpregs[0] + 1, "RP:", 3); - - if (ctx->sc_flags & IA64_SC_FLAG_FPH_VALID) - for (i = 32; i < 128; ++i) - regvalue (&ctx->sc_fr[i].u.bits[0], 'F', i, fpregs[i - 32]); - - hexvalue (ctx->sc_ip, spregs[0], sizeof (spregs[0])); - hexvalue (ctx->sc_ar_rsc, spregs[1], sizeof (spregs[1])); - hexvalue (ctx->sc_pr, spregs[2], sizeof (spregs[2])); - hexvalue (ctx->sc_ar_pfs, spregs[3], sizeof (spregs[3])); - hexvalue (ctx->sc_ar_unat, spregs[4], sizeof (spregs[4])); - hexvalue (ctx->sc_cfm, spregs[5], sizeof (spregs[5])); - hexvalue (ctx->sc_ar_ccv, spregs[6], sizeof (spregs[6])); - hexvalue (ctx->sc_ar_fpsr, spregs[7], sizeof (spregs[7])); - - /* Generate the output. */ - ADD_STRING ("Register dump:\n\n"); - - for (i = 0; i < 32 - 5; ++i) - ADD_MEM (gpregs[i], sizeof (gpregs[0]) - 1 + ((i % 3) == 2)); - ADD_STRING ("\n"); - - for (i = 0; i < 3; ++i) - ADD_MEM (bpregs[i], sizeof (bpregs[0]) - 1); - - ADD_STRING ("\n\n IP: "); - ADD_MEM (spregs[0], sizeof (spregs[0])); - ADD_STRING (" RSC: "); - ADD_MEM (spregs[1], sizeof (spregs[0])); - ADD_STRING (" PR: "); - ADD_MEM (spregs[2], sizeof (spregs[0])); - ADD_STRING ("\n PFS: "); - ADD_MEM (spregs[3], sizeof (spregs[0])); - ADD_STRING (" UNAT: "); - ADD_MEM (spregs[4], sizeof (spregs[0])); - ADD_STRING (" CFM: "); - ADD_MEM (spregs[5], sizeof (spregs[0])); - ADD_STRING ("\n CCV: "); - ADD_MEM (spregs[6], sizeof (spregs[0])); - ADD_STRING (" FPSR: "); - ADD_MEM (spregs[7], sizeof (spregs[0])); - ADD_STRING ("\n"); - - if (ctx->sc_flags & IA64_SC_FLAG_FPH_VALID) - { - ADD_STRING ("\n"); - - for (i = 0; i < 128 - 32; ++i) - ADD_MEM (fpregs[i], sizeof (fpregs[0]) - 1 + (i & 1)); - } - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, ctx) diff --git a/sysdeps/unix/sysv/linux/ia64/rt-sysdep.S b/sysdeps/unix/sysv/linux/ia64/rt-sysdep.S deleted file mode 100644 index f966bf1e59..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/rt-sysdep.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/ia64/setcontext.S b/sysdeps/unix/sysv/linux/ia64/setcontext.S deleted file mode 100644 index 15a689e1e7..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/setcontext.S +++ /dev/null @@ -1,152 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "ucontext_i.h" - -/* __setcontext (const ucontext_t *ucp) - - Restores the machine context in UCP and thereby resumes execution - in that context. - - This implementation in intended to be used for *synchronous* context - switches only. Therefore, it does not have to restore anything - other than the PRESERVED state. */ - -ENTRY(__setcontext) - .prologue - .body - alloc r11 = ar.pfs, 1, 0, 4, 0 - - // sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL): - - mov r3 = SC_MASK - mov out0 = SIG_SETMASK - ;; - add out1 = r3, in0 - mov out2 = 0 - mov out3 = 8 // sizeof kernel sigset_t - - invala - DO_CALL(__NR_rt_sigprocmask) - add r2 = SC_NAT, r32 - - add r3 = SC_RNAT, r32 // r3 <- &sc_ar_rnat - add rPOS = SC_GR, r32 // rPOS <- &sc_gr[0] - ;; - ld8 rNAT = [r2], (SC_BSP-SC_NAT) - extr.u rPOS = rPOS, 3, 6 // get NaT bit number for r0 - ;; - ld8 rBSP = [r2], (SC_UNAT-SC_BSP) - ld8 rRNAT = [r3], (SC_FPSR-SC_RNAT) - /* - * Rotate NaT bits by rPOS positions to the left: - */ - sub rCPOS = 64, rPOS - ;; - ld8 rUNAT = [r2], (SC_PFS-SC_UNAT) - ld8 rFPSR = [r3], (SC_LC-SC_FPSR) - shl rTMP = rNAT, rPOS - ;; - ld8 rPFS = [r2], (SC_PR-SC_PFS) - ld8 rLC = [r3], (SC_BR+0*8-SC_LC) - shr.u rNAT = rNAT, rCPOS - ;; - ld8 rPR = [r2], (SC_BR+1*8-SC_PR) - ld8 rB0 = [r3], 16 - or rNAT = rNAT, rTMP - ;; - ld8 rB1 = [r2], 16 - ld8 rB2 = [r3], 16 - ;; - mov.m ar.unat = rNAT - mov.m rRSC = ar.rsc - ;; - ld8 rB3 = [r2], 16 - ld8 rB4 = [r3], (SC_GR+1*8-(SC_BR+4*8)) - ;; - ld8 rB5 = [r2], (SC_GR+4*8-(SC_BR+5*8)) - ld8.fill r1 = [r3], (5*8 - 1*8) - ;; - ld8.fill r4 = [r2], 16 - ld8.fill r5 = [r3], 16 - mov b0 = rB0 - ;; - ld8.fill r6 = [r2], 48 - ld8.fill r7 = [r3], (SC_FR+2*16-(SC_GR+7*8)) - ;; - ld8.fill sp = [r2], (SC_FR+3*16-(SC_GR+12*8)) - mov.m ar.fpsr = rFPSR - mov.i ar.pfs = rPFS - ;; - ldf.fill f3 = [r2], 16 - ldf.fill f2 = [r3], 48 - mov b1 = rB1 - ;; - ldf.fill f4 = [r2], (16*16-4*16) - ldf.fill f5 = [r3], (17*16-5*16) - mov b2 = rB2 - ;; - ldf.fill f16 = [r2], 32 - ldf.fill f17 = [r3], 32 - mov b3 = rB3 - ;; - ldf.fill f18 = [r2], 32 - ldf.fill f19 = [r3], 32 - mov b4 = rB4 - ;; - ldf.fill f20 = [r2], 32 - ldf.fill f21 = [r3], 32 - mov b5 = rB5 - ;; - ldf.fill f22 = [r2], 32 - ldf.fill f23 = [r3], 32 - mov r8 = 0 - ;; - ldf.fill f24 = [r2], 32 - ldf.fill f25 = [r3], 32 - mov r9 = 0 - ;; - ldf.fill f26 = [r2], 32 - ldf.fill f27 = [r3], 32 - dep rTMP = 0, rRSC, 16, 14 // clear ar.rsc.loadrs - ;; - ldf.fill f28 = [r2], 32 - ldf.fill f29 = [r3], 32 - and rTMP = ~0x3, rTMP // clear ar.rsc.mode - ;; - ldf.fill f30 = [r2], 32 - ldf.fill f31 = [r3], 32 - mov pr = rPR, -1 - ;; - mov.m ar.rsc = rTMP // put RSE into enforced lazy mode - ;; - loadrs // drop dirty partition - ;; - mov.m ar.bspstore = rBSP - mov.m ar.unat = rUNAT - mov.i ar.lc = rLC - ;; - mov.m ar.rnat = rRNAT - mov.m ar.rsc = rRSC - ret -END(__setcontext) - -weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/ia64/setjmp.S b/sysdeps/unix/sysv/linux/ia64/setjmp.S deleted file mode 100644 index 15767e3016..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/setjmp.S +++ /dev/null @@ -1,198 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - Contributed by David Mosberger-Tang . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . - - The layout of the jmp_buf is as follows. This is subject to change - and user-code should never depend on the particular layout of - jmp_buf! - - - offset: description: - ------- ------------ - 0x000 stack pointer (r12) ; unchangeable (see _JMPBUF_UNWINDS) - 0x008 r1 (gp) - 0x010 caller's unat - 0x018 fpsr ; disabled per the C standard; BZ 16379 - 0x020 r4 - 0x028 r5 - 0x030 r6 - 0x038 r7 - 0x040 rp (b0) - 0x048 b1 - 0x050 b2 - 0x058 b3 - 0x060 b4 - 0x068 b5 - 0x070 ar.pfs - 0x078 ar.lc - 0x080 pr - 0x088 ar.bsp ; unchangeable (see __longjmp.S) - 0x090 ar.unat - 0x098 &__jmp_buf ; address of the jmpbuf (needed to locate NaT bits in unat) - 0x0a0 f2 - 0x0b0 f3 - 0x0c0 f4 - 0x0d0 f5 - 0x0e0 f16 - 0x0f0 f17 - 0x100 f18 - 0x110 f19 - 0x120 f20 - 0x130 f21 - 0x130 f22 - 0x140 f23 - 0x150 f24 - 0x160 f25 - 0x170 f26 - 0x180 f27 - 0x190 f28 - 0x1a0 f29 - 0x1b0 f30 - 0x1c0 f31 */ - -#include -#include - - /* The following two entry points are the traditional entry points: */ - -LEAF(setjmp) - alloc r8=ar.pfs,2,0,0,0 - mov in1=1 - br.cond.sptk.many HIDDEN_JUMPTARGET(__sigsetjmp) -END(setjmp) - -LEAF(_setjmp) - alloc r8=ar.pfs,2,0,0,0 - mov in1=0 - br.cond.sptk.many HIDDEN_JUMPTARGET(__sigsetjmp) -END(_setjmp) -libc_hidden_def (_setjmp) - - /* __sigsetjmp(__jmp_buf buf, int savemask) */ - -ENTRY(__sigsetjmp) - .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2) - alloc loc1=ar.pfs,2,5,2,0 - .save ar.unat, loc2 - mov loc2=ar.unat - ;; -// mov r17=ar.fpsr - mov r2=in0 - add r3=8,in0 - ;; -.mem.offset 8,0; st8.spill.nta [r2]=sp,16 // r12 (sp) -.mem.offset 0,0; st8.spill.nta [r3]=gp,32 // r1 (gp) - ;; - st8.nta [r2]=loc2,16 // save caller's unat -// st8.nta [r3]=r17,16 // save fpsr - add r8=0xa0,in0 - ;; -.mem.offset 8,0; st8.spill.nta [r2]=r4,16 // r4 -.mem.offset 0,0; st8.spill.nta [r3]=r5,16 // r5 - add r9=0xb0,in0 - ;; - stf.spill.nta [r8]=f2,32 - stf.spill.nta [r9]=f3,32 - mov loc0=rp - .body - ;; - stf.spill.nta [r8]=f4,32 - stf.spill.nta [r9]=f5,32 - mov r17=b1 - ;; - stf.spill.nta [r8]=f16,32 - stf.spill.nta [r9]=f17,32 - mov r18=b2 - ;; - stf.spill.nta [r8]=f18,32 - stf.spill.nta [r9]=f19,32 - mov r19=b3 - ;; - stf.spill.nta [r8]=f20,32 - stf.spill.nta [r9]=f21,32 - mov r20=b4 - ;; - stf.spill.nta [r8]=f22,32 - stf.spill.nta [r9]=f23,32 - mov r21=b5 - ;; - stf.spill.nta [r8]=f24,32 - stf.spill.nta [r9]=f25,32 - mov r22=ar.lc - ;; - stf.spill.nta [r8]=f26,32 - stf.spill.nta [r9]=f27,32 - mov r24=pr - ;; - stf.spill.nta [r8]=f28,32 - stf.spill.nta [r9]=f29,32 -#ifdef PTR_MANGLE - mov loc3=loc0 - ;; - PTR_MANGLE (loc3, loc4) -#else - ;; -#endif - stf.spill.nta [r8]=f30 - stf.spill.nta [r9]=f31 - -.mem.offset 8,0; st8.spill.nta [r2]=r6,16 // r6 -.mem.offset 0,0; st8.spill.nta [r3]=r7,16 // r7 - ;; - mov r23=ar.bsp - mov r25=ar.unat - mov out0=in0 - -#ifdef PTR_MANGLE - st8.nta [r2]=loc3,16 // b0 -#else - st8.nta [r2]=loc0,16 // b0 -#endif - st8.nta [r3]=r17,16 // b1 - mov out1=in1 - ;; - st8.nta [r2]=r18,16 // b2 - st8.nta [r3]=r19,16 // b3 - ;; - st8.nta [r2]=r20,16 // b4 - st8.nta [r3]=r21,16 // b5 - ;; - st8.nta [r2]=loc1,16 // ar.pfs - st8.nta [r3]=r22,16 // ar.lc - ;; - st8.nta [r2]=r24,16 // pr - st8.nta [r3]=r23,16 // ar.bsp - ;; - st8.nta [r2]=r25 // ar.unat - st8.nta [r3]=in0 // &__jmp_buf -#if IS_IN (rtld) - /* In ld.so we never save the signal mask. */ - ;; -#else - br.call.dpnt.few rp=__sigjmp_save -#endif -.ret0: // force a new bundle ::q - mov.m ar.unat=loc2 // restore caller's unat - mov rp=loc0 - mov ar.pfs=loc1 - mov r8=0 - ret -END(__sigsetjmp) -libc_hidden_def (__sigsetjmp) -rtld_hidden_def (__sigsetjmp) - -weak_extern(_setjmp) -weak_extern(setjmp) diff --git a/sysdeps/unix/sysv/linux/ia64/shlib-versions b/sysdeps/unix/sysv/linux/ia64/shlib-versions deleted file mode 100644 index 37374c0e20..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/shlib-versions +++ /dev/null @@ -1,8 +0,0 @@ -libc=6.1 GLIBC_2.2 -libm=6.1 GLIBC_2.2 - -ld=ld-linux-ia64.so.2 GLIBC_2.2 - -libBrokenLocale=1 GLIBC_2.2 - -libpthread=0 GLIBC_2.2 diff --git a/sysdeps/unix/sysv/linux/ia64/sigaction.c b/sysdeps/unix/sysv/linux/ia64/sigaction.c deleted file mode 100644 index 125ce446bb..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sigaction.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Linux/IA64 specific sigaction - Written by Jes Sorensen, , April 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Linux/ia64 only has rt signals, thus we do not even want to try falling - back to the old style signals as the default Linux handler does. */ - -#include -#include -#include - -#include -#include - -/* The variable is shared between all wrappers around signal handling - functions which have RT equivalents. This is the definition. */ - - -/* If ACT is not NULL, change the action for SIG to *ACT. - If OACT is not NULL, put the old action for SIG in *OACT. */ -int -__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) -{ - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - return INLINE_SYSCALL (rt_sigaction, 4, sig, act, oact, _NSIG / 8); -} -libc_hidden_def (__libc_sigaction) - -#include diff --git a/sysdeps/unix/sysv/linux/ia64/sigaltstack-offsets.sym b/sysdeps/unix/sysv/linux/ia64/sigaltstack-offsets.sym deleted file mode 100644 index f73446941a..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sigaltstack-offsets.sym +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include - --- - -#define sigaltstack(member) offsetof (stack_t, member) - -sizeSS sizeof (stack_t) -oSS_SP sigaltstack (ss_sp) -oSS_FLAGS sigaltstack (ss_flags) -oSS_SIZE sigaltstack (ss_size) - -SS_ONSTACK diff --git a/sysdeps/unix/sysv/linux/ia64/sigcontext-offsets.sym b/sysdeps/unix/sysv/linux/ia64/sigcontext-offsets.sym deleted file mode 100644 index 943e68a667..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sigcontext-offsets.sym +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include - --- -SC_NAT offsetof (struct sigcontext, sc_nat) -SC_BSP offsetof (struct sigcontext, sc_ar_bsp) -SC_RNAT offsetof (struct sigcontext, sc_ar_rnat) -SC_UNAT offsetof (struct sigcontext, sc_ar_unat) -SC_FPSR offsetof (struct sigcontext, sc_ar_fpsr) -SC_PFS offsetof (struct sigcontext, sc_ar_pfs) -SC_LC offsetof (struct sigcontext, sc_ar_lc) -SC_PR offsetof (struct sigcontext, sc_pr) -SC_BR offsetof (struct sigcontext, sc_br) -SC_GR offsetof (struct sigcontext, sc_gr) -SC_FR offsetof (struct sigcontext, sc_fr) -SC_MASK offsetof (struct sigcontext, sc_mask) diff --git a/sysdeps/unix/sysv/linux/ia64/sigcontextinfo.h b/sysdeps/unix/sysv/linux/ia64/sigcontextinfo.h deleted file mode 100644 index 37a619090b..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sigcontextinfo.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define SIGCONTEXT siginfo_t *_si, struct sigcontext * -#define SIGCONTEXT_EXTRA_ARGS _si, -#define GET_PC(ctx) ((ctx)->sc_ip) -#define GET_FRAME(ctx) ((void *) 0) -#define GET_STACK(ctx) ((void *) 0) - -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff --git a/sysdeps/unix/sysv/linux/ia64/sigpending.c b/sysdeps/unix/sysv/linux/ia64/sigpending.c deleted file mode 100644 index b1653231de..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sigpending.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Linux/ia64 only has rt signals, thus we do not even want to try falling - back to the old style signals as the default Linux handler does. */ - -#include -#include -#include - -#include -#include - -/* Change the set of blocked signals to SET, - wait until a signal arrives, and restore the set of blocked signals. */ -int -sigpending (sigset_t *set) -{ - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - return INLINE_SYSCALL (rt_sigpending, 2, set, _NSIG / 8); -} diff --git a/sysdeps/unix/sysv/linux/ia64/sigprocmask.c b/sysdeps/unix/sysv/linux/ia64/sigprocmask.c deleted file mode 100644 index 7e62438b03..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sigprocmask.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Linux/IA64 specific sigprocmask - Written by Jes Sorensen, , April 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Linux/ia64 only has rt signals, thus we do not even want to try falling - back to the old style signals as the default Linux handler does. */ - -#include -#include -#include - -#include -#include - -/* Get and/or change the set of blocked signals. */ -int -__sigprocmask (int how, const sigset_t *set, sigset_t *oset) -{ - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - return INLINE_SYSCALL (rt_sigprocmask, 4, how, set, oset, _NSIG / 8); -} -weak_alias (__sigprocmask, sigprocmask) diff --git a/sysdeps/unix/sysv/linux/ia64/swapcontext.c b/sysdeps/unix/sysv/linux/ia64/swapcontext.c deleted file mode 100644 index 6f0d7d5f51..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/swapcontext.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -struct rv - { - long retval; - long first_return; - }; - -extern struct rv __getcontext (ucontext_t *__ucp) __THROW; -extern int __setcontext (const ucontext_t *__ucp) __THROW; - -int -__swapcontext (ucontext_t *oucp, const ucontext_t *ucp) -{ - struct rv rv = __getcontext (oucp); - if (rv.first_return) - __setcontext (ucp); - return 0; -} - -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/ia64/sys/io.h b/sysdeps/unix/sysv/linux/ia64/sys/io.h deleted file mode 100644 index 338367ee48..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sys/io.h +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IO_H -#define _SYS_IO_H 1 - -#include - -__BEGIN_DECLS - -/* If TURN_ON is TRUE, request for permission to do direct i/o on the - port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O - permission off for that range. This call requires root privileges. - - Portability note: not all Linux platforms support this call. Most - platforms based on the PC I/O architecture probably will, however. - E.g., Linux/Alpha for Alpha PCs supports this. */ -extern int ioperm (unsigned long int __from, unsigned long int __num, - int __turn_on); - -/* Set the I/O privilege level to LEVEL. If LEVEL>3, permission to - access any I/O port is granted. This call requires root - privileges. */ -extern int iopl (int __level); - -extern unsigned int _inb (unsigned long int __port); -extern unsigned int _inb (unsigned long int __port); -extern unsigned int _inw (unsigned long int __port); -extern unsigned int _inl (unsigned long int __port); -extern void _outb (unsigned char __val, unsigned long int __port); -extern void _outw (unsigned short __val, unsigned long int __port); -extern void _outl (unsigned int __val, unsigned long int __port); - -#define inb _inb -#define inw _inw -#define inl _inl -#define outb _outb -#define outw _outw -#define outl _outl - -/* Access PCI space protected from machine checks. */ -extern int pciconfig_read (unsigned long int __bus, unsigned long int __dfn, - unsigned long int __off, unsigned long int __len, - unsigned char *__buf); - -extern int pciconfig_write (unsigned long int __bus, unsigned long int __dfn, - unsigned long int __off, unsigned long int __len, - unsigned char *__buf); - -__END_DECLS - -#endif /* _SYS_IO_H */ diff --git a/sysdeps/unix/sysv/linux/ia64/sys/procfs.h b/sysdeps/unix/sysv/linux/ia64/sys/procfs.h deleted file mode 100644 index afe54fbd53..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sys/procfs.h +++ /dev/null @@ -1,129 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somehow modelled after the file of the same name on SysVr4 - systems. It provides a definition of the core file format for ELF - used on Linux. */ - -#include -#include -#include -#include -#include -#include - -__BEGIN_DECLS - -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - -/* We really need just 72 but let's leave some headroom... */ -#define ELF_NGREG 128 -/* f0 and f1 could be omitted, but so what... */ -#define ELF_NFPREG 128 - -typedef unsigned long elf_greg_t; -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -typedef struct __ia64_fpreg elf_fpreg_t; -typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; - -typedef elf_greg_t greg_t; -typedef elf_gregset_t gregset_t; -typedef elf_fpregset_t fpregset_t; -#define NGREG ELF_NGREG - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - gdb doesn't really use excluded. Fields present but not used are - marked with "XXX". */ -struct elf_prstatus - { -#if 0 - long int pr_flags; /* XXX Process flags. */ - short int pr_why; /* XXX Reason for process halt. */ - short int pr_what; /* XXX More detailed reason. */ -#endif - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ -#if 0 - stack_t pr_altstack; /* Alternate stack info. */ - struct sigaction pr_action; /* Signal action for current sig. */ -#endif - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ -#if 0 - long int pr_instr; /* Current instruction. */ -#endif - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned int pr_uid; - unsigned int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef gregset_t prgregset_t; -typedef fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore habe only ine PID type. */ -typedef __pid_t lwpid_t; - - -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h b/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h deleted file mode 100644 index c77e6dc683..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h +++ /dev/null @@ -1,227 +0,0 @@ -/* `ptrace' debugger support interface. Linux/ia64 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PTRACE_H -#define _SYS_PTRACE_H 1 - -#include -#include -#include - -__BEGIN_DECLS - -/* Type of the REQUEST argument to `ptrace.' */ -enum __ptrace_request -{ - /* Indicate that the process making this request should be traced. - All signals received by this process can be intercepted by its - parent, and its parent can use the other `ptrace' requests. */ - PTRACE_TRACEME = 0, -#define PT_TRACE_ME PTRACE_TRACEME - - /* Return the word in the process's text space at address ADDR. */ - PTRACE_PEEKTEXT = 1, -#define PT_READ_I PTRACE_PEEKTEXT - - /* Return the word in the process's data space at address ADDR. */ - PTRACE_PEEKDATA = 2, -#define PT_READ_D PTRACE_PEEKDATA - - /* Return the word in the process's user area at offset ADDR. */ - PTRACE_PEEKUSER = 3, -#define PT_READ_U PTRACE_PEEKUSER - - /* Write the word DATA into the process's text space at address ADDR. */ - PTRACE_POKETEXT = 4, -#define PT_WRITE_I PTRACE_POKETEXT - - /* Write the word DATA into the process's data space at address ADDR. */ - PTRACE_POKEDATA = 5, -#define PT_WRITE_D PTRACE_POKEDATA - - /* Write the word DATA into the process's user area at offset ADDR. */ - PTRACE_POKEUSER = 6, -#define PT_WRITE_U PTRACE_POKEUSER - - /* Continue the process. */ - PTRACE_CONT = 7, -#define PT_CONTINUE PTRACE_CONT - - /* Kill the process. */ - PTRACE_KILL = 8, -#define PT_KILL PTRACE_KILL - - /* Single step the process. - This is not supported on all machines. */ - PTRACE_SINGLESTEP = 9, -#define PT_STEP PTRACE_SINGLESTEP - - /* Execute process until next taken branch. */ - PTRACE_SINGLEBLOCK = 12, -#define PT_STEPBLOCK PTRACE_SINGLEBLOCK - - /* Attach to a process that is already running. */ - PTRACE_ATTACH = 16, -#define PT_ATTACH PTRACE_ATTACH - - /* Detach from a process attached to with PTRACE_ATTACH. */ - PTRACE_DETACH = 17, -#define PT_DETACH PTRACE_DETACH - - /* Get all registers (pt_all_user_regs) in one shot */ - PTRACE_GETREGS = 18, -#define PT_GETREGS PTRACE_GETREGS - - /* Set all registers (pt_all_user_regs) in one shot */ - PTRACE_SETREGS = 19, -#define PT_SETREGS PTRACE_SETREGS - - /* Continue and stop at the next (return from) syscall. */ - PTRACE_SYSCALL = 24, -#define PT_SYSCALL PTRACE_SYSCALL - - /* Set ptrace filter options. */ - PTRACE_SETOPTIONS = 0x4200, -#define PT_SETOPTIONS PTRACE_SETOPTIONS - - /* Get last ptrace message. */ - PTRACE_GETEVENTMSG = 0x4201, -#define PT_GETEVENTMSG PTRACE_GETEVENTMSG - - /* Get siginfo for process. */ - PTRACE_GETSIGINFO = 0x4202, -#define PT_GETSIGINFO PTRACE_GETSIGINFO - - /* Set new siginfo for process. */ - PTRACE_SETSIGINFO = 0x4203, -#define PT_SETSIGINFO PTRACE_SETSIGINFO - - /* Get register content. */ - PTRACE_GETREGSET = 0x4204, -#define PTRACE_GETREGSET PTRACE_GETREGSET - - /* Set register content. */ - PTRACE_SETREGSET = 0x4205, -#define PTRACE_SETREGSET PTRACE_SETREGSET - - /* Like PTRACE_ATTACH, but do not force tracee to trap and do not affect - signal or group stop state. */ - PTRACE_SEIZE = 0x4206, -#define PTRACE_SEIZE PTRACE_SEIZE - - /* Trap seized tracee. */ - PTRACE_INTERRUPT = 0x4207, -#define PTRACE_INTERRUPT PTRACE_INTERRUPT - - /* Wait for next group event. */ - PTRACE_LISTEN = 0x4208, -#define PTRACE_LISTEN PTRACE_LISTEN - - PTRACE_PEEKSIGINFO = 0x4209, -#define PTRACE_PEEKSIGINFO PTRACE_PEEKSIGINFO - - PTRACE_GETSIGMASK = 0x420a, -#define PTRACE_GETSIGMASK PTRACE_GETSIGMASK - - PTRACE_SETSIGMASK = 0x420b, -#define PTRACE_SETSIGMASK PTRACE_SETSIGMASK - - PTRACE_SECCOMP_GET_FILTER = 0x420c -#define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER -}; - - -/* Flag for PTRACE_LISTEN. */ -enum __ptrace_flags -{ - PTRACE_SEIZE_DEVEL = 0x80000000 -}; - -/* pt_all_user_regs is used for PTRACE_GETREGS/PTRACE_SETREGS. */ -struct __pt_all_user_regs - { - unsigned long nat; - unsigned long cr_iip; - unsigned long cfm; - unsigned long cr_ipsr; - unsigned long pr; - - unsigned long gr[32]; - unsigned long br[8]; - unsigned long ar[128]; - struct __ia64_fpreg fr[128]; - }; - -/* Options set using PTRACE_SETOPTIONS. */ -enum __ptrace_setoptions -{ - PTRACE_O_TRACESYSGOOD = 0x00000001, - PTRACE_O_TRACEFORK = 0x00000002, - PTRACE_O_TRACEVFORK = 0x00000004, - PTRACE_O_TRACECLONE = 0x00000008, - PTRACE_O_TRACEEXEC = 0x00000010, - PTRACE_O_TRACEVFORKDONE = 0x00000020, - PTRACE_O_TRACEEXIT = 0x00000040, - PTRACE_O_TRACESECCOMP = 0x00000080, - PTRACE_O_EXITKILL = 0x00100000, - PTRACE_O_SUSPEND_SECCOMP = 0x00200000, - PTRACE_O_MASK = 0x003000ff -}; - -enum __ptrace_eventcodes -{ -/* Wait extended result codes for the above trace options. */ - PTRACE_EVENT_FORK = 1, - PTRACE_EVENT_VFORK = 2, - PTRACE_EVENT_CLONE = 3, - PTRACE_EVENT_EXEC = 4, - PTRACE_EVENT_VFORK_DONE = 5, - PTRACE_EVENT_EXIT = 6, - PTRACE_EVENT_SECCOMP = 7, -/* Extended result codes enabled by means other than options. */ - PTRACE_EVENT_STOP = 128 -}; - -/* Arguments for PTRACE_PEEKSIGINFO. */ -struct __ptrace_peeksiginfo_args -{ - __uint64_t off; /* From which siginfo to start. */ - __uint32_t flags; /* Flags for peeksiginfo. */ - __int32_t nr; /* How many siginfos to take. */ -}; - -enum __ptrace_peeksiginfo_flags -{ - /* Read signals from a shared (process wide) queue. */ - PTRACE_PEEKSIGINFO_SHARED = (1 << 0) -}; - -/* Perform process tracing functions. REQUEST is one of the values - above, and determines the action to be taken. - For all requests except PTRACE_TRACEME, PID specifies the process to be - traced. - - PID and the other arguments described above for the various requests should - appear (those that are used for the particular request) as: - pid_t PID, void *ADDR, int DATA, void *ADDR2 - after REQUEST. */ -extern long int ptrace (enum __ptrace_request __request, ...) __THROW; - -__END_DECLS - -#endif /* _SYS_PTRACE_H */ diff --git a/sysdeps/unix/sysv/linux/ia64/sys/rse.h b/sysdeps/unix/sysv/linux/ia64/sys/rse.h deleted file mode 100644 index 644f5d3c87..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sys/rse.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _ia64_rse_h -#define _ia64_rse_h - -#include - -/* Register stack engine related helper functions. This file may be - used in applications, so be careful about the name-space and give - some consideration to non-GNU C compilers (though __inline is - fine). */ - -static __inline unsigned long -ia64_rse_slot_num (unsigned long *addr) -{ - return (((unsigned long) addr) >> 3) & 0x3f; -} - -/* Return TRUE if ADDR is the address of an RNAT slot. */ - -static __inline unsigned long -ia64_rse_is_rnat_slot (unsigned long *addr) -{ - return ia64_rse_slot_num (addr) == 0x3f; -} - -/* Returns the address of the RNAT slot that covers the slot at - address SLOT_ADDR. */ - -static __inline unsigned long * -ia64_rse_rnat_addr (unsigned long *slot_addr) -{ - return (unsigned long *) ((unsigned long) slot_addr | (0x3f << 3)); -} - -/* Calcuate the number of registers in the dirty partition starting at - BSPSTORE with a size of DIRTY bytes. This isn't simply DIRTY - divided by eight because the 64th slot is used to store ar.rnat. */ - -static __inline unsigned long -ia64_rse_num_regs (unsigned long *bspstore, unsigned long *bsp) -{ - unsigned long slots = (bsp - bspstore); - - return slots - (ia64_rse_slot_num(bspstore) + slots)/0x40; -} - -/* The inverse of the above: given bspstore and the number of - registers, calculate ar.bsp. */ - -static __inline unsigned long * -ia64_rse_skip_regs (unsigned long *addr, long num_regs) -{ - long delta = ia64_rse_slot_num(addr) + num_regs; - - if (num_regs < 0) - delta -= 0x3e; - return addr + num_regs + delta/0x3f; -} - -#endif /* _ia64_rse_h */ diff --git a/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h b/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h deleted file mode 100644 index 5ed6929af4..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - - -/* - * These are here mostly for backwards compatibility with older Unices. - * IA-64 Linux does not distinguish between "struct sigcontext" and - * "ucontext_t" as all the necessary info is inside the former. - */ - -typedef struct sigcontext mcontext_t; - -#if __GNUC_PREREQ (3, 5) -# define _SC_GR0_OFFSET \ - __builtin_offsetof (struct sigcontext, sc_gr[0]) -#elif defined __GNUC__ -# define _SC_GR0_OFFSET \ - (((char *) &((struct sigcontext *) 0)->sc_gr[0]) - (char *) 0) -#else -# define _SC_GR0_OFFSET 0xc8 /* pray that this is correct... */ -#endif - -typedef struct ucontext - { - union - { - mcontext_t _mc; - struct - { - unsigned long _pad[_SC_GR0_OFFSET/8]; - struct ucontext *_link; /* this should overlay sc_gr[0] */ - } - _uc; - } - _u; - } -ucontext_t; - -#define uc_mcontext _u._mc -#define uc_sigmask _u._mc.sc_mask -#define uc_stack _u._mc.sc_stack -#define uc_link _u._uc._link - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/ia64/sys/user.h b/sysdeps/unix/sysv/linux/ia64/sys/user.h deleted file mode 100644 index 859fe9ea39..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sys/user.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_USER_H -#define _SYS_USER_H 1 - -#include -#include - -/* This definition comes directly from the kernel headers. If - anything changes in them this header has to be changed, too. */ - - -/* The definition in the kernel has the comment "XXX fix me". */ -#define EF_SIZE 3072 - - -struct user -{ - unsigned long int regs[EF_SIZE / 8 + 32]; /* Integer and fp regs. */ - size_t u_tsize; /* Text size (pages). */ - size_t u_dsize; /* Data size (pages). */ - size_t u_ssize; /* Stack size (pages). */ - unsigned long int start_code; /* Text starting address. */ - unsigned long int start_data; /* Data starting address. */ - unsigned long int start_stack; /* Stack starting address. */ - long int signal; /* Signal causing core dump. */ - struct regs *u_ar0; /* Help gdb find registers. */ - unsigned long int magic; /* Identifies a core file. */ - char u_comm[32]; /* User command name. */ -}; - -#endif /* sys/user.h */ diff --git a/sysdeps/unix/sysv/linux/ia64/syscall.S b/sysdeps/unix/sysv/linux/ia64/syscall.S deleted file mode 100644 index efe50dd2b1..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/syscall.S +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jes Sorensen . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(syscall) - /* We are called like so: - {out0,out1,...,out6} registers -> {NR, arg1, ..., arg6} - Shift the register window so that {out1...out6} are available - in {out0...out5} like the kernel syscall handler expects. */ - alloc r2=ar.pfs,1,0,8,0 - mov r15=r32 /* syscall number */ - break __BREAK_SYSCALL - ;; - cmp.ne p6,p0=-1,r10 /* r10 = -1 on error */ -(p6) ret - br.cond.spnt.few __syscall_error -PSEUDO_END(syscall) diff --git a/sysdeps/unix/sysv/linux/ia64/syscalls.list b/sysdeps/unix/sysv/linux/ia64/syscalls.list deleted file mode 100644 index 56f4138c43..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/syscalls.list +++ /dev/null @@ -1,28 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -umount2 - umount 2 __umount2 umount2 - -getpriority - getpriority i:ii __getpriority getpriority - -# proper socket implementations: -bind - bind i:ipi __bind bind -getpeername - getpeername i:ipp __getpeername getpeername -getsockname - getsockname i:ipp __getsockname getsockname -getsockopt - getsockopt i:iiiBN __getsockopt getsockopt -listen - listen i:ii __listen listen -setsockopt - setsockopt i:iiibn __setsockopt setsockopt -shutdown - shutdown i:ii __shutdown shutdown -socket - socket i:iii __socket socket -socketpair - socketpair i:iiif __socketpair socketpair - -# DIG-compliant access to PCI configuration space: -pciconfig_read EXTRA pciconfig_read 5 pciconfig_read -pciconfig_write EXTRA pciconfig_write 5 pciconfig_write - -ptrace - ptrace 4 __ptrace ptrace - - -# System calls with wrappers. - -# IA-64 specific -getunwind EXTRA getunwind i:pi getunwind diff --git a/sysdeps/unix/sysv/linux/ia64/sysconf.c b/sysdeps/unix/sysv/linux/ia64/sysconf.c deleted file mode 100644 index 88705c0bfb..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sysconf.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Get file-specific information about a file. Linux/ia64 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -#include "has_cpuclock.c" -#define HAS_CPUCLOCK(name) (has_cpuclock () ? _POSIX_VERSION : -1) - - -/* Now the generic Linux version. */ -#include diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h deleted file mode 100644 index 7c7f619edc..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h +++ /dev/null @@ -1,223 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# undef PSEUDO - -# if IS_IN (libc) -# define SYSDEP_CANCEL_ERRNO __libc_errno -# else -# define SYSDEP_CANCEL_ERRNO errno -# endif -# define SYSDEP_CANCEL_ERROR(args) \ -.section .gnu.linkonce.t.__syscall_error_##args, "ax"; \ - .align 32; \ - .proc __syscall_error_##args; \ - .global __syscall_error_##args; \ - .hidden __syscall_error_##args; \ - .size __syscall_error_##args, 64; \ -__syscall_error_##args: \ - .prologue; \ - .regstk args, 5, args, 0; \ - .save ar.pfs, loc0; \ - .save rp, loc1; \ - .body; \ - addl loc4 = @ltoff(@tprel(SYSDEP_CANCEL_ERRNO)), gp;; \ - ld8 loc4 = [loc4]; \ - mov rp = loc1;; \ - mov r8 = -1; \ - add loc4 = loc4, r13;; \ - st4 [loc4] = loc3; \ - mov ar.pfs = loc0 - -# ifndef USE_DL_SYSINFO - -# define PSEUDO(name, syscall_name, args) \ -.text; \ -ENTRY (name) \ - adds r14 = MULTIPLE_THREADS_OFFSET, r13;; \ - ld4 r14 = [r14]; \ - mov r15 = SYS_ify(syscall_name);; \ - cmp4.ne p6, p7 = 0, r14; \ -(p6) br.cond.spnt .Lpseudo_cancel;; \ - break __BREAK_SYSCALL;; \ - cmp.eq p6,p0=-1,r10; \ -(p6) br.cond.spnt.few __syscall_error; \ - ret;; \ - .endp name; \ - .proc __GC_##name; \ - .globl __GC_##name; \ - .hidden __GC_##name; \ -__GC_##name: \ -.Lpseudo_cancel: \ - .prologue; \ - .regstk args, 5, args, 0; \ - .save ar.pfs, loc0; \ - alloc loc0 = ar.pfs, args, 5, args, 0; \ - .save rp, loc1; \ - mov loc1 = rp;; \ - .body; \ - CENABLE;; \ - mov loc2 = r8; \ - COPY_ARGS_##args \ - mov r15 = SYS_ify(syscall_name); \ - break __BREAK_SYSCALL;; \ - mov loc3 = r8; \ - mov loc4 = r10; \ - mov out0 = loc2; \ - CDISABLE;; \ - cmp.eq p6,p0=-1,loc4; \ -(p6) br.cond.spnt.few __syscall_error_##args; \ - mov r8 = loc3; \ - mov rp = loc1; \ - mov ar.pfs = loc0; \ -.Lpseudo_end: \ - ret; \ - .endp __GC_##name; \ - SYSDEP_CANCEL_ERROR(args) - -# else /* USE_DL_SYSINFO */ - -# define PSEUDO(name, syscall_name, args) \ -.text; \ -ENTRY (name) \ - .prologue; \ - adds r2 = SYSINFO_OFFSET, r13; \ - adds r14 = MULTIPLE_THREADS_OFFSET, r13; \ - .save ar.pfs, r11; \ - mov r11 = ar.pfs;; \ - .body; \ - ld4 r14 = [r14]; \ - ld8 r2 = [r2]; \ - mov r15 = SYS_ify(syscall_name);; \ - cmp4.ne p6, p7 = 0, r14; \ - mov b7 = r2; \ -(p6) br.cond.spnt .Lpseudo_cancel; \ - br.call.sptk.many b6 = b7;; \ - mov ar.pfs = r11; \ - cmp.eq p6,p0 = -1, r10; \ -(p6) br.cond.spnt.few __syscall_error; \ - ret;; \ - .endp name; \ - \ - .proc __##syscall_name##_nocancel; \ - .globl __##syscall_name##_nocancel; \ -__##syscall_name##_nocancel: \ - .prologue; \ - adds r2 = SYSINFO_OFFSET, r13; \ - .save ar.pfs, r11; \ - mov r11 = ar.pfs;; \ - .body; \ - ld8 r2 = [r2]; \ - mov r15 = SYS_ify(syscall_name);; \ - mov b7 = r2; \ - br.call.sptk.many b6 = b7;; \ - mov ar.pfs = r11; \ - cmp.eq p6,p0 = -1, r10; \ -(p6) br.cond.spnt.few __syscall_error; \ - ret;; \ - .endp __##syscall_name##_nocancel; \ - \ - .proc __GC_##name; \ - .globl __GC_##name; \ - .hidden __GC_##name; \ -__GC_##name: \ -.Lpseudo_cancel: \ - .prologue; \ - .regstk args, 5, args, 0; \ - .save ar.pfs, loc0; \ - alloc loc0 = ar.pfs, args, 5, args, 0; \ - adds loc4 = SYSINFO_OFFSET, r13; \ - .save rp, loc1; \ - mov loc1 = rp;; \ - .body; \ - ld8 loc4 = [loc4]; \ - CENABLE;; \ - mov loc2 = r8; \ - mov b7 = loc4; \ - COPY_ARGS_##args \ - mov r15 = SYS_ify(syscall_name); \ - br.call.sptk.many b6 = b7;; \ - mov loc3 = r8; \ - mov loc4 = r10; \ - mov out0 = loc2; \ - CDISABLE;; \ - cmp.eq p6,p0=-1,loc4; \ -(p6) br.cond.spnt.few __syscall_error_##args; \ - mov r8 = loc3; \ - mov rp = loc1; \ - mov ar.pfs = loc0; \ -.Lpseudo_end: \ - ret; \ - .endp __GC_##name; \ - SYSDEP_CANCEL_ERROR(args) - -# endif /* USE_DL_SYSINFO */ - -# undef PSEUDO_END -# define PSEUDO_END(name) .endp - -# if IS_IN (libpthread) -# define CENABLE br.call.sptk.many b0 = __pthread_enable_asynccancel -# define CDISABLE br.call.sptk.many b0 = __pthread_disable_asynccancel -# elif IS_IN (libc) -# define CENABLE br.call.sptk.many b0 = __libc_enable_asynccancel -# define CDISABLE br.call.sptk.many b0 = __libc_disable_asynccancel -# elif IS_IN (librt) -# define CENABLE br.call.sptk.many b0 = __librt_enable_asynccancel -# define CDISABLE br.call.sptk.many b0 = __librt_disable_asynccancel -# else -# error Unsupported library -# endif - -# define COPY_ARGS_0 /* Nothing */ -# define COPY_ARGS_1 COPY_ARGS_0 mov out0 = in0; -# define COPY_ARGS_2 COPY_ARGS_1 mov out1 = in1; -# define COPY_ARGS_3 COPY_ARGS_2 mov out2 = in2; -# define COPY_ARGS_4 COPY_ARGS_3 mov out3 = in3; -# define COPY_ARGS_5 COPY_ARGS_4 mov out4 = in4; -# define COPY_ARGS_6 COPY_ARGS_5 mov out5 = in5; -# define COPY_ARGS_7 COPY_ARGS_6 mov out6 = in6; - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P \ - adds r14 = MULTIPLE_THREADS_OFFSET, r13 ;; ld4 r14 = [r14] ;; cmp4.ne p6, p7 = 0, r14 -# endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep.S b/sysdeps/unix/sysv/linux/ia64/sysdep.S deleted file mode 100644 index a3004adc00..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sysdep.S +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -ENTRY(__syscall_error) -#if RTLD_PRIVATE_ERRNO - /* - * Note that the gp has to be set properly for this to work. - * As long as all syscalls are in the same load unit - * (executable or shared library) as this routine, we should - * be fine. Otherwise, we would have to first load the global - * pointer register from __gp. - */ - addl r2=@gprel(rtld_errno),gp - ;; - st4 [r2]=r8 - mov r8=-1 -#else -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif - addl r2=@ltoff(@tprel(SYSCALL_ERROR_ERRNO)), gp;; - ld8 r2=[r2] - mov r3=r8;; - mov r8=-1 - add r2=r2,r13;; - st4 [r2]=r3 -#endif - ret // ret is #define'd in syscall.h! -END(__syscall_error) - -ENTRY(__ia64_syscall) - mov r15=r37 /* syscall number */ - break __BREAK_SYSCALL - cmp.eq p6,p0=-1,r10 /* r10 = -1 on error */ -(p6) br.cond.spnt.few __syscall_error - ret -PSEUDO_END(__ia64_syscall) diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep.h b/sysdeps/unix/sysv/linux/ia64/sysdep.h deleted file mode 100644 index c7665bae4e..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/sysdep.h +++ /dev/null @@ -1,387 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Written by Jes Sorensen, , April 1999. - Based on code originally written by David Mosberger-Tang - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_IA64_SYSDEP_H -#define _LINUX_IA64_SYSDEP_H 1 - -#include -#include -#include -#include -#include - -/* In order to get __set_errno() definition in INLINE_SYSCALL. */ -#ifndef __ASSEMBLER__ -#include -#endif - -/* As of GAS v2.4.90.0.7, including a ".align" directive inside a - function will cause bad unwind info to be emitted (GAS doesn't know - how to account for the padding introduced by the .align directive). - Turning on this macro will work around this bug by introducing the - necessary padding explicitly. */ -#define GAS_ALIGN_BREAKS_UNWIND_INFO - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -/* This is a kludge to make syscalls.list find these under the names - pread and pwrite, since some kernel headers define those names - and some define the *64 names for the same system calls. */ -#if !defined __NR_pread && defined __NR_pread64 -# define __NR_pread __NR_pread64 -#endif -#if !defined __NR_pwrite && defined __NR_pwrite64 -# define __NR_pwrite __NR_pwrite64 -#endif - -/* This is to help the old kernel headers where __NR_semtimedop is not - available. */ -#ifndef __NR_semtimedop -# define __NR_semtimedop 1247 -#endif - -#if defined USE_DL_SYSINFO \ - && (IS_IN (libc) \ - || IS_IN (libpthread) || IS_IN (librt)) -# define IA64_USE_NEW_STUB -#else -# undef IA64_USE_NEW_STUB -#endif - -#ifdef __ASSEMBLER__ - -#undef CALL_MCOUNT -#ifdef PROF -# define CALL_MCOUNT \ - .data; \ -1: data8 0; /* XXX fixme: use .xdata8 once labels work */ \ - .previous; \ - .prologue; \ - .save ar.pfs, r40; \ - alloc out0 = ar.pfs, 8, 0, 4, 0; \ - mov out1 = gp; \ - .save rp, out2; \ - mov out2 = rp; \ - .body; \ - ;; \ - addl out3 = @ltoff(1b), gp; \ - br.call.sptk.many rp = _mcount \ - ;; -#else -# define CALL_MCOUNT /* Do nothing. */ -#endif - -/* Linux uses a negative return value to indicate syscall errors, unlike - most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be negative - even if the call succeeded. E.g., the `lseek' system call might return - a large offset. Therefore we must not anymore test for < 0, but test - for a real error by making sure the value in %d0 is a real error - number. Linus said he will make sure the no syscall returns a value - in -1 .. -4095 as a valid result so we can savely test with -4095. */ - -/* We don't want the label for the error handler to be visible in the symbol - table when we define it here. */ -#define SYSCALL_ERROR_LABEL __syscall_error - -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - ENTRY(name) \ - DO_CALL (SYS_ify(syscall_name)); \ - cmp.eq p6,p0=-1,r10; \ -(p6) br.cond.spnt.few __syscall_error; - -#define DO_CALL_VIA_BREAK(num) \ - mov r15=num; \ - break __BREAK_SYSCALL - -#ifdef IA64_USE_NEW_STUB -# ifdef SHARED -# define DO_CALL(num) \ - .prologue; \ - adds r2 = SYSINFO_OFFSET, r13;; \ - ld8 r2 = [r2]; \ - .save ar.pfs, r11; \ - mov r11 = ar.pfs;; \ - .body; \ - mov r15 = num; \ - mov b7 = r2; \ - br.call.sptk.many b6 = b7;; \ - .restore sp; \ - mov ar.pfs = r11; \ - .prologue; \ - .body -# else /* !SHARED */ -# define DO_CALL(num) \ - .prologue; \ - mov r15 = num; \ - movl r2 = _dl_sysinfo;; \ - ld8 r2 = [r2]; \ - .save ar.pfs, r11; \ - mov r11 = ar.pfs;; \ - .body; \ - mov b7 = r2; \ - br.call.sptk.many b6 = b7;; \ - .restore sp; \ - mov ar.pfs = r11; \ - .prologue; \ - .body -# endif -#else -# define DO_CALL(num) DO_CALL_VIA_BREAK(num) -#endif - -#undef PSEUDO_END -#define PSEUDO_END(name) .endp C_SYMBOL_NAME(name); - -#undef PSEUDO_NOERRNO -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - ENTRY(name) \ - DO_CALL (SYS_ify(syscall_name)); - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) .endp C_SYMBOL_NAME(name); - -#undef PSEUDO_ERRVAL -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - ENTRY(name) \ - DO_CALL (SYS_ify(syscall_name)); \ - cmp.eq p6,p0=-1,r10; \ -(p6) mov r10=r8; - - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) .endp C_SYMBOL_NAME(name); - -#undef END -#define END(name) \ - .size C_SYMBOL_NAME(name), . - C_SYMBOL_NAME(name) ; \ - .endp C_SYMBOL_NAME(name) - -#define ret br.ret.sptk.few b0 -#define ret_NOERRNO ret -#define ret_ERRVAL ret - -#else /* not __ASSEMBLER__ */ - -#define BREAK_INSN_1(num) "break " #num ";;\n\t" -#define BREAK_INSN(num) BREAK_INSN_1(num) - -/* On IA-64 we have stacked registers for passing arguments. The - "out" registers end up being the called function's "in" - registers. - - Also, since we have plenty of registers we have two return values - from a syscall. r10 is set to -1 on error, whilst r8 contains the - (non-negative) errno on error or the return value on success. - */ - -#ifdef IA64_USE_NEW_STUB - -# define DO_INLINE_SYSCALL_NCS(name, nr, args...) \ - LOAD_ARGS_##nr (args) \ - register long _r8 __asm ("r8"); \ - register long _r10 __asm ("r10"); \ - register long _r15 __asm ("r15") = name; \ - register void *_b7 __asm ("b7") = ((tcbhead_t *)__thread_self)->__private;\ - long _retval; \ - LOAD_REGS_##nr \ - /* \ - * Don't specify any unwind info here. We mark ar.pfs as \ - * clobbered. This will force the compiler to save ar.pfs \ - * somewhere and emit appropriate unwind info for that save. \ - */ \ - __asm __volatile ("br.call.sptk.many b6=%0;;\n" \ - : "=b"(_b7), "=r" (_r8), "=r" (_r10), "=r" (_r15) \ - ASM_OUTARGS_##nr \ - : "0" (_b7), "3" (_r15) ASM_ARGS_##nr \ - : "memory", "ar.pfs" ASM_CLOBBERS_##nr); \ - _retval = _r8; - -#else /* !IA64_USE_NEW_STUB */ - -# define DO_INLINE_SYSCALL_NCS(name, nr, args...) \ - LOAD_ARGS_##nr (args) \ - register long _r8 asm ("r8"); \ - register long _r10 asm ("r10"); \ - register long _r15 asm ("r15") = name; \ - long _retval; \ - LOAD_REGS_##nr \ - __asm __volatile (BREAK_INSN (__BREAK_SYSCALL) \ - : "=r" (_r8), "=r" (_r10), "=r" (_r15) \ - ASM_OUTARGS_##nr \ - : "2" (_r15) ASM_ARGS_##nr \ - : "memory" ASM_CLOBBERS_##nr); \ - _retval = _r8; - -#endif /* !IA64_USE_NEW_STUB */ - -#define DO_INLINE_SYSCALL(name, nr, args...) \ - DO_INLINE_SYSCALL_NCS (__NR_##name, nr, ##args) - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - ({ \ - DO_INLINE_SYSCALL_NCS (__NR_##name, nr, args) \ - if (_r10 == -1) \ - { \ - __set_errno (_retval); \ - _retval = -1; \ - } \ - _retval; }) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) long int err __attribute__ ((unused)) - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - ({ \ - DO_INLINE_SYSCALL_NCS (name, nr, args) \ - err = _r10; \ - _retval; }) -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - INTERNAL_SYSCALL_NCS (__NR_##name, err, nr, ##args) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ({ (void) (val); \ - (err == -1); \ - }) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) (val) - -#define LOAD_ARGS_0() -#define LOAD_REGS_0 -#define LOAD_ARGS_1(a1) \ - long _arg1 = (long) (a1); \ - LOAD_ARGS_0 () -#define LOAD_REGS_1 \ - register long _out0 asm ("out0") = _arg1; \ - LOAD_REGS_0 -#define LOAD_ARGS_2(a1, a2) \ - long _arg2 = (long) (a2); \ - LOAD_ARGS_1 (a1) -#define LOAD_REGS_2 \ - register long _out1 asm ("out1") = _arg2; \ - LOAD_REGS_1 -#define LOAD_ARGS_3(a1, a2, a3) \ - long _arg3 = (long) (a3); \ - LOAD_ARGS_2 (a1, a2) -#define LOAD_REGS_3 \ - register long _out2 asm ("out2") = _arg3; \ - LOAD_REGS_2 -#define LOAD_ARGS_4(a1, a2, a3, a4) \ - long _arg4 = (long) (a4); \ - LOAD_ARGS_3 (a1, a2, a3) -#define LOAD_REGS_4 \ - register long _out3 asm ("out3") = _arg4; \ - LOAD_REGS_3 -#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ - long _arg5 = (long) (a5); \ - LOAD_ARGS_4 (a1, a2, a3, a4) -#define LOAD_REGS_5 \ - register long _out4 asm ("out4") = _arg5; \ - LOAD_REGS_4 -#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ - long _arg6 = (long) (a6); \ - LOAD_ARGS_5 (a1, a2, a3, a4, a5) -#define LOAD_REGS_6 \ - register long _out5 asm ("out5") = _arg6; \ - LOAD_REGS_5 - -#define ASM_OUTARGS_0 -#define ASM_OUTARGS_1 ASM_OUTARGS_0, "=r" (_out0) -#define ASM_OUTARGS_2 ASM_OUTARGS_1, "=r" (_out1) -#define ASM_OUTARGS_3 ASM_OUTARGS_2, "=r" (_out2) -#define ASM_OUTARGS_4 ASM_OUTARGS_3, "=r" (_out3) -#define ASM_OUTARGS_5 ASM_OUTARGS_4, "=r" (_out4) -#define ASM_OUTARGS_6 ASM_OUTARGS_5, "=r" (_out5) - -#ifdef IA64_USE_NEW_STUB -#define ASM_ARGS_0 -#define ASM_ARGS_1 ASM_ARGS_0, "4" (_out0) -#define ASM_ARGS_2 ASM_ARGS_1, "5" (_out1) -#define ASM_ARGS_3 ASM_ARGS_2, "6" (_out2) -#define ASM_ARGS_4 ASM_ARGS_3, "7" (_out3) -#define ASM_ARGS_5 ASM_ARGS_4, "8" (_out4) -#define ASM_ARGS_6 ASM_ARGS_5, "9" (_out5) -#else -#define ASM_ARGS_0 -#define ASM_ARGS_1 ASM_ARGS_0, "3" (_out0) -#define ASM_ARGS_2 ASM_ARGS_1, "4" (_out1) -#define ASM_ARGS_3 ASM_ARGS_2, "5" (_out2) -#define ASM_ARGS_4 ASM_ARGS_3, "6" (_out3) -#define ASM_ARGS_5 ASM_ARGS_4, "7" (_out4) -#define ASM_ARGS_6 ASM_ARGS_5, "8" (_out5) -#endif - -#define ASM_CLOBBERS_0 ASM_CLOBBERS_1, "out0" -#define ASM_CLOBBERS_1 ASM_CLOBBERS_2, "out1" -#define ASM_CLOBBERS_2 ASM_CLOBBERS_3, "out2" -#define ASM_CLOBBERS_3 ASM_CLOBBERS_4, "out3" -#define ASM_CLOBBERS_4 ASM_CLOBBERS_5, "out4" -#define ASM_CLOBBERS_5 ASM_CLOBBERS_6, "out5" -#define ASM_CLOBBERS_6_COMMON , "out6", "out7", \ - /* Non-stacked integer registers, minus r8, r10, r15. */ \ - "r2", "r3", "r9", "r11", "r12", "r13", "r14", "r16", "r17", "r18", \ - "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", \ - "r28", "r29", "r30", "r31", \ - /* Predicate registers. */ \ - "p6", "p7", "p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15", \ - /* Non-rotating fp registers. */ \ - "f6", "f7", "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \ - /* Branch registers. */ \ - "b6" - -#ifdef IA64_USE_NEW_STUB -# define ASM_CLOBBERS_6 ASM_CLOBBERS_6_COMMON -#else -# define ASM_CLOBBERS_6 ASM_CLOBBERS_6_COMMON , "b7" -#endif - -#endif /* not __ASSEMBLER__ */ - -/* Pointer mangling support. */ -#if IS_IN (rtld) -/* We cannot use the thread descriptor because in ld.so we use setjmp - earlier than the descriptor is initialized. */ -#else -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(reg, tmpreg) \ - add tmpreg=-16,r13 \ - ;; \ - ld8 tmpreg=[tmpreg] \ - ;; \ - xor reg=reg, tmpreg -# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) -# else -# define PTR_MANGLE(var) \ - (var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#endif - -#endif /* linux/ia64/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/ia64/system.c b/sysdeps/unix/sysv/linux/ia64/system.c deleted file mode 100644 index 7fd5c18864..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/system.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* We have to and actually can handle cancelable system(). The big - problem: we have to kill the child process if necessary. To do - this a cleanup handler has to be registered and is has to be able - to find the PID of the child. The main problem is to reliable have - the PID when needed. It is not necessary for the parent thread to - return. It might still be in the kernel when the cancellation - request comes. Therefore we have to use the clone() calls ability - to have the kernel write the PID into the user-level variable. */ -#define FORK() \ - INLINE_SYSCALL (clone2, 6, CLONE_PARENT_SETTID | SIGCHLD, NULL, 0, \ - &pid, NULL, NULL) - -#include diff --git a/sysdeps/unix/sysv/linux/ia64/timer_create.c b/sysdeps/unix/sysv/linux/ia64/timer_create.c deleted file mode 100644 index d307135003..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/timer_create.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/ia64/timer_delete.c b/sysdeps/unix/sysv/linux/ia64/timer_delete.c deleted file mode 100644 index 2dd94f5c7a..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/timer_delete.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/ia64/timer_getoverr.c b/sysdeps/unix/sysv/linux/ia64/timer_getoverr.c deleted file mode 100644 index 22eaff5cda..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/timer_getoverr.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/ia64/timer_gettime.c b/sysdeps/unix/sysv/linux/ia64/timer_gettime.c deleted file mode 100644 index cea524bae5..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/timer_gettime.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/ia64/timer_settime.c b/sysdeps/unix/sysv/linux/ia64/timer_settime.c deleted file mode 100644 index fa231149d5..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/timer_settime.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/ia64/tst-setcontext2.c b/sysdeps/unix/sysv/linux/ia64/tst-setcontext2.c deleted file mode 100644 index c2a3fa9797..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/tst-setcontext2.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Work around incorrect type of IA64 uc_sigmask. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef sigismember -#define sigismember(set, signo) sigismember ((const sigset_t *) (set), (signo)) - -#include diff --git a/sysdeps/unix/sysv/linux/ia64/ucontext_i.h b/sysdeps/unix/sysv/linux/ia64/ucontext_i.h deleted file mode 100644 index 507a1d8f01..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/ucontext_i.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Constants shared between setcontext() and getcontext(). Don't - install this header file. */ - -#define SIG_BLOCK 0 -#define SIG_UNBLOCK 1 -#define SIG_SETMASK 2 - -#include - -#define rTMP r16 -#define rPOS r16 -#define rCPOS r17 -#define rNAT r18 - -#define rB5 r18 -#define rB4 r19 -#define rB3 r20 -#define rB2 r21 -#define rB1 r22 -#define rB0 r23 -#define rRSC r24 -#define rBSP r25 -#define rRNAT r26 -#define rUNAT r27 -#define rFPSR r28 -#define rPFS r29 -#define rLC r30 -#define rPR r31 diff --git a/sysdeps/unix/sysv/linux/ia64/umount.c b/sysdeps/unix/sysv/linux/ia64/umount.c deleted file mode 100644 index 82022410a0..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/umount.c +++ /dev/null @@ -1,29 +0,0 @@ -/* umount system call for Linux/ia64. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include - -/* Unmount a filesystem. */ -int -umount (const char *special_file) -{ - return INLINE_SYSCALL (umount, 2, special_file, 0); -} diff --git a/sysdeps/unix/sysv/linux/ia64/unwind-dw2-fde.c b/sysdeps/unix/sysv/linux/ia64/unwind-dw2-fde.c deleted file mode 100644 index 15d12abfce..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/unwind-dw2-fde.c +++ /dev/null @@ -1 +0,0 @@ -/* Linux/ia64 does not need unwind table registry. */ diff --git a/sysdeps/unix/sysv/linux/ia64/unwind-forcedunwind.c b/sysdeps/unix/sysv/linux/ia64/unwind-forcedunwind.c deleted file mode 100644 index 982e5fe057..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/unwind-forcedunwind.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -static _Unwind_Word (*libgcc_s_getbsp) (struct _Unwind_Context *); - -#define ARCH_CANCEL_INIT(handle) \ - ((libgcc_s_getbsp = __libc_dlsym (handle, "_Unwind_GetBSP")) == NULL) - -#include - -_Unwind_Word -_Unwind_GetBSP (struct _Unwind_Context *context) -{ - if (__builtin_expect (libgcc_s_getbsp == NULL, 0)) - pthread_cancel_init (); - - return libgcc_s_getbsp (context); -} diff --git a/sysdeps/unix/sysv/linux/ia64/unwind_longjmp.c b/sysdeps/unix/sysv/linux/ia64/unwind_longjmp.c deleted file mode 100644 index 874ed18d6b..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/unwind_longjmp.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -extern void __sigstack_longjmp (__jmp_buf, int) - __attribute__ ((noreturn)); - -/* Like __libc_siglongjmp(), but safe for crossing from alternate - signal stack to normal stack. Needed by NPTL. */ -void -__libc_unwind_longjmp (sigjmp_buf env, int val) -{ - /* Perform any cleanups needed by the frames being unwound. */ - __pthread_cleanup_upto (env->__jmpbuf, CURRENT_STACK_FRAME); - - if (env[0].__mask_was_saved) - /* Restore the saved signal mask. */ - (void) __sigprocmask (SIG_SETMASK, &env[0].__saved_mask, - (sigset_t *) NULL); - - /* Call the machine-dependent function to restore machine state. */ - __sigstack_longjmp (env[0].__jmpbuf, val ?: 1); -} -hidden_def (__libc_unwind_longjmp) diff --git a/sysdeps/unix/sysv/linux/ia64/vfork.S b/sysdeps/unix/sysv/linux/ia64/vfork.S deleted file mode 100644 index 64fca5912f..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/vfork.S +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include -#define _SIGNAL_H -#include -#include - -/* The following are defined in linux/sched.h, which unfortunately */ -/* is not safe for inclusion in an assembly file. */ -#define CLONE_VM 0x00000100 /* set if VM shared between processes */ -#define CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */ - -/* pid_t vfork(void); */ -/* Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */ - -ENTRY (__libc_vfork) - .prologue // work around a GAS bug which triggers if - .body // first .prologue is not at the beginning of proc. - alloc r2=ar.pfs,0,0,2,0 - mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD - mov out1=0 /* Standard sp value. */ - ;; - DO_CALL (SYS_ify (clone)) - cmp.eq p6,p0=0,r8 -(p6) br.cond.dptk 1f -1: - cmp.eq p6,p0=-1,r10 -(p6) br.cond.spnt.few __syscall_error - ret -PSEUDO_END (__libc_vfork) - -strong_alias (__libc_vfork, __vfork) -libc_hidden_def (__vfork) -weak_alias (__vfork, vfork) diff --git a/sysdeps/unix/sysv/linux/ia64/wordexp.c b/sysdeps/unix/sysv/linux/ia64/wordexp.c deleted file mode 100644 index eaf3a670b2..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/wordexp.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* For Linux/Alpha we have to make the wordexp symbols versioned. */ -#define wordexp(words, pwordexp, flags) \ - __new_wordexp (words, pwordexp, flags) - -#include - -versioned_symbol (libc, __new_wordexp, wordexp, GLIBC_2_2_2); - - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2_2) -/* The old, incorrect wordexp_t definition. */ -typedef struct - { - int we_wordc; /* Count of words matched. */ - char **we_wordv; /* List of expanded words. */ - int we_offs; /* Slots to reserve in `we_wordv'. */ - } old_wordexp_t; - - -int -attribute_compat_text_section -__old_wordexp (const char *words, old_wordexp_t *pwordexp, int flags) -{ - wordexp_t we; - int result; - - we.we_wordc = pwordexp->we_wordc; - we.we_wordv = pwordexp->we_wordv; - we.we_offs = pwordexp->we_offs; - - result = __new_wordexp (words, &we, flags); - - pwordexp->we_wordc = we.we_wordc; - pwordexp->we_wordv = we.we_wordv; - pwordexp->we_offs = we.we_offs; - - return result; -} -compat_symbol (libc, __old_wordexp, wordexp, GLIBC_2_1); -#endif diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c deleted file mode 100644 index 8ba5eae781..0000000000 --- a/sysdeps/unix/sysv/linux/if_index.c +++ /dev/null @@ -1,241 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "netlinkaccess.h" - - -unsigned int -__if_nametoindex (const char *ifname) -{ -#ifndef SIOCGIFINDEX - __set_errno (ENOSYS); - return 0; -#else - struct ifreq ifr; - int fd = __opensock (); - - if (fd < 0) - return 0; - - strncpy (ifr.ifr_name, ifname, sizeof (ifr.ifr_name)); - if (__ioctl (fd, SIOCGIFINDEX, &ifr) < 0) - { - int saved_errno = errno; - close_not_cancel_no_status (fd); - if (saved_errno == EINVAL) - __set_errno (ENOSYS); - return 0; - } - close_not_cancel_no_status (fd); - return ifr.ifr_ifindex; -#endif -} -libc_hidden_def (__if_nametoindex) -weak_alias (__if_nametoindex, if_nametoindex) -libc_hidden_weak (if_nametoindex) - - -void -__if_freenameindex (struct if_nameindex *ifn) -{ - struct if_nameindex *ptr = ifn; - while (ptr->if_name || ptr->if_index) - { - free (ptr->if_name); - ++ptr; - } - free (ifn); -} -libc_hidden_def (__if_freenameindex) -weak_alias (__if_freenameindex, if_freenameindex) -libc_hidden_weak (if_freenameindex) - - -static struct if_nameindex * -if_nameindex_netlink (void) -{ - struct netlink_handle nh = { 0, 0, 0, NULL, NULL }; - struct if_nameindex *idx = NULL; - - if (__netlink_open (&nh) < 0) - return NULL; - - - /* Tell the kernel that we wish to get a list of all - active interfaces. Collect all data for every interface. */ - if (__netlink_request (&nh, RTM_GETLINK) < 0) - goto exit_free; - - /* Count the interfaces. */ - unsigned int nifs = 0; - for (struct netlink_res *nlp = nh.nlm_list; nlp; nlp = nlp->next) - { - struct nlmsghdr *nlh; - size_t size = nlp->size; - - if (nlp->nlh == NULL) - continue; - - /* Walk through all entries we got from the kernel and look, which - message type they contain. */ - for (nlh = nlp->nlh; NLMSG_OK (nlh, size); nlh = NLMSG_NEXT (nlh, size)) - { - /* Check if the message is what we want. */ - if ((pid_t) nlh->nlmsg_pid != nh.pid || nlh->nlmsg_seq != nlp->seq) - continue; - - if (nlh->nlmsg_type == NLMSG_DONE) - break; /* ok */ - - if (nlh->nlmsg_type == RTM_NEWLINK) - ++nifs; - } - } - - idx = malloc ((nifs + 1) * sizeof (struct if_nameindex)); - if (idx == NULL) - { - nomem: - __set_errno (ENOBUFS); - goto exit_free; - } - - /* Add the interfaces. */ - nifs = 0; - for (struct netlink_res *nlp = nh.nlm_list; nlp; nlp = nlp->next) - { - struct nlmsghdr *nlh; - size_t size = nlp->size; - - if (nlp->nlh == NULL) - continue; - - /* Walk through all entries we got from the kernel and look, which - message type they contain. */ - for (nlh = nlp->nlh; NLMSG_OK (nlh, size); nlh = NLMSG_NEXT (nlh, size)) - { - /* Check if the message is what we want. */ - if ((pid_t) nlh->nlmsg_pid != nh.pid || nlh->nlmsg_seq != nlp->seq) - continue; - - if (nlh->nlmsg_type == NLMSG_DONE) - break; /* ok */ - - if (nlh->nlmsg_type == RTM_NEWLINK) - { - struct ifinfomsg *ifim = (struct ifinfomsg *) NLMSG_DATA (nlh); - struct rtattr *rta = IFLA_RTA (ifim); - size_t rtasize = IFLA_PAYLOAD (nlh); - - idx[nifs].if_index = ifim->ifi_index; - - while (RTA_OK (rta, rtasize)) - { - char *rta_data = RTA_DATA (rta); - size_t rta_payload = RTA_PAYLOAD (rta); - - if (rta->rta_type == IFLA_IFNAME) - { - idx[nifs].if_name = __strndup (rta_data, rta_payload); - if (idx[nifs].if_name == NULL) - { - idx[nifs].if_index = 0; - __if_freenameindex (idx); - idx = NULL; - goto nomem; - } - break; - } - - rta = RTA_NEXT (rta, rtasize); - } - - ++nifs; - } - } - } - - idx[nifs].if_index = 0; - idx[nifs].if_name = NULL; - - exit_free: - __netlink_free_handle (&nh); - __netlink_close (&nh); - - return idx; -} - - -struct if_nameindex * -__if_nameindex (void) -{ -#ifndef SIOCGIFINDEX - __set_errno (ENOSYS); - return NULL; -#else - struct if_nameindex *result = if_nameindex_netlink (); - return result; -#endif -} -weak_alias (__if_nameindex, if_nameindex) -libc_hidden_weak (if_nameindex) - - -char * -__if_indextoname (unsigned int ifindex, char *ifname) -{ - /* We may be able to do the conversion directly, rather than searching a - list. This ioctl is not present in kernels before version 2.1.50. */ - struct ifreq ifr; - int fd; - int status; - - fd = __opensock (); - - if (fd < 0) - return NULL; - - ifr.ifr_ifindex = ifindex; - status = __ioctl (fd, SIOCGIFNAME, &ifr); - - close_not_cancel_no_status (fd); - - if (status < 0) - { - if (errno == ENODEV) - /* POSIX requires ENXIO. */ - __set_errno (ENXIO); - - return NULL; - } - else - return strncpy (ifname, ifr.ifr_name, IFNAMSIZ); -} -weak_alias (__if_indextoname, if_indextoname) -libc_hidden_weak (if_indextoname) diff --git a/sysdeps/unix/sysv/linux/ifaddrs.c b/sysdeps/unix/sysv/linux/ifaddrs.c deleted file mode 100644 index 3bc9902863..0000000000 --- a/sysdeps/unix/sysv/linux/ifaddrs.c +++ /dev/null @@ -1,846 +0,0 @@ -/* getifaddrs -- get names and addresses of all network interfaces - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "netlinkaccess.h" - - -/* There is a problem with this type. The address length for - Infiniband sockets is much longer than the 8 bytes allocated in the - sockaddr_ll definition. Hence we use here a special - definition. */ -struct sockaddr_ll_max - { - unsigned short int sll_family; - unsigned short int sll_protocol; - int sll_ifindex; - unsigned short int sll_hatype; - unsigned char sll_pkttype; - unsigned char sll_halen; - unsigned char sll_addr[24]; - }; - - -/* struct to hold the data for one ifaddrs entry, so we can allocate - everything at once. */ -struct ifaddrs_storage -{ - struct ifaddrs ifa; - union - { - /* Save space for the biggest of the four used sockaddr types and - avoid a lot of casts. */ - struct sockaddr sa; - struct sockaddr_ll_max sl; - struct sockaddr_in s4; - struct sockaddr_in6 s6; - } addr, netmask, broadaddr; - char name[IF_NAMESIZE + 1]; -}; - - -void -__netlink_free_handle (struct netlink_handle *h) -{ - struct netlink_res *ptr; - int saved_errno = errno; - - ptr = h->nlm_list; - while (ptr != NULL) - { - struct netlink_res *tmpptr; - - tmpptr = ptr->next; - free (ptr); - ptr = tmpptr; - } - - __set_errno (saved_errno); -} - - -static int -__netlink_sendreq (struct netlink_handle *h, int type) -{ - struct req - { - struct nlmsghdr nlh; - struct rtgenmsg g; - char pad[0]; - } req; - struct sockaddr_nl nladdr; - - if (h->seq == 0) - h->seq = time (NULL); - - req.nlh.nlmsg_len = sizeof (req); - req.nlh.nlmsg_type = type; - req.nlh.nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST; - req.nlh.nlmsg_pid = 0; - req.nlh.nlmsg_seq = h->seq; - req.g.rtgen_family = AF_UNSPEC; - if (sizeof (req) != offsetof (struct req, pad)) - memset (req.pad, '\0', sizeof (req) - offsetof (struct req, pad)); - - memset (&nladdr, '\0', sizeof (nladdr)); - nladdr.nl_family = AF_NETLINK; - - return TEMP_FAILURE_RETRY (__sendto (h->fd, (void *) &req, sizeof (req), 0, - (struct sockaddr *) &nladdr, - sizeof (nladdr))); -} - - -int -__netlink_request (struct netlink_handle *h, int type) -{ - struct netlink_res *nlm_next; - struct sockaddr_nl nladdr; - struct nlmsghdr *nlmh; - ssize_t read_len; - bool done = false; - -#ifdef PAGE_SIZE - /* Help the compiler optimize out the malloc call if PAGE_SIZE - is constant and smaller or equal to PTHREAD_STACK_MIN/4. */ - const size_t buf_size = PAGE_SIZE; -#else - const size_t buf_size = __getpagesize (); -#endif - bool use_malloc = false; - char *buf; - - if (__libc_use_alloca (buf_size)) - buf = alloca (buf_size); - else - { - buf = malloc (buf_size); - if (buf != NULL) - use_malloc = true; - else - goto out_fail; - } - - struct iovec iov = { buf, buf_size }; - - if (__netlink_sendreq (h, type) < 0) - goto out_fail; - - while (! done) - { - struct msghdr msg = - { - .msg_name = (void *) &nladdr, - .msg_namelen = sizeof (nladdr), - .msg_iov = &iov, - .msg_iovlen = 1, - .msg_control = NULL, - .msg_controllen = 0, - .msg_flags = 0 - }; - - read_len = TEMP_FAILURE_RETRY (__recvmsg (h->fd, &msg, 0)); - __netlink_assert_response (h->fd, read_len); - if (read_len < 0) - goto out_fail; - - if (nladdr.nl_pid != 0) - continue; - - if (__glibc_unlikely (msg.msg_flags & MSG_TRUNC)) - goto out_fail; - - size_t count = 0; - size_t remaining_len = read_len; - for (nlmh = (struct nlmsghdr *) buf; - NLMSG_OK (nlmh, remaining_len); - nlmh = (struct nlmsghdr *) NLMSG_NEXT (nlmh, remaining_len)) - { - if ((pid_t) nlmh->nlmsg_pid != h->pid - || nlmh->nlmsg_seq != h->seq) - continue; - - ++count; - if (nlmh->nlmsg_type == NLMSG_DONE) - { - /* We found the end, leave the loop. */ - done = true; - break; - } - if (nlmh->nlmsg_type == NLMSG_ERROR) - { - struct nlmsgerr *nlerr = (struct nlmsgerr *) NLMSG_DATA (nlmh); - if (nlmh->nlmsg_len < NLMSG_LENGTH (sizeof (struct nlmsgerr))) - errno = EIO; - else - errno = -nlerr->error; - goto out_fail; - } - } - - /* If there was nothing with the expected nlmsg_pid and nlmsg_seq, - there is no point to record it. */ - if (count == 0) - continue; - - nlm_next = (struct netlink_res *) malloc (sizeof (struct netlink_res) - + read_len); - if (nlm_next == NULL) - goto out_fail; - nlm_next->next = NULL; - nlm_next->nlh = memcpy (nlm_next + 1, buf, read_len); - nlm_next->size = read_len; - nlm_next->seq = h->seq; - if (h->nlm_list == NULL) - h->nlm_list = nlm_next; - else - h->end_ptr->next = nlm_next; - h->end_ptr = nlm_next; - } - - if (use_malloc) - free (buf); - return 0; - -out_fail: - if (use_malloc) - free (buf); - return -1; -} - - -void -__netlink_close (struct netlink_handle *h) -{ - /* Don't modify errno. */ - INTERNAL_SYSCALL_DECL (err); - (void) INTERNAL_SYSCALL (close, err, 1, h->fd); -} - - -/* Open a NETLINK socket. */ -int -__netlink_open (struct netlink_handle *h) -{ - struct sockaddr_nl nladdr; - - h->fd = __socket (PF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, NETLINK_ROUTE); - if (h->fd < 0) - goto out; - - memset (&nladdr, '\0', sizeof (nladdr)); - nladdr.nl_family = AF_NETLINK; - if (__bind (h->fd, (struct sockaddr *) &nladdr, sizeof (nladdr)) < 0) - { - close_and_out: - __netlink_close (h); - out: - return -1; - } - /* Determine the ID the kernel assigned for this netlink connection. - It is not necessarily the PID if there is more than one socket - open. */ - socklen_t addr_len = sizeof (nladdr); - if (__getsockname (h->fd, (struct sockaddr *) &nladdr, &addr_len) < 0) - goto close_and_out; - h->pid = nladdr.nl_pid; - return 0; -} - - -/* We know the number of RTM_NEWLINK entries, so we reserve the first - # of entries for this type. All RTM_NEWADDR entries have an index - pointer to the RTM_NEWLINK entry. To find the entry, create - a table to map kernel index entries to our index numbers. - Since we get at first all RTM_NEWLINK entries, it can never happen - that a RTM_NEWADDR index is not known to this map. */ -static int -internal_function -map_newlink (int index, struct ifaddrs_storage *ifas, int *map, int max) -{ - int i; - - for (i = 0; i < max; i++) - { - if (map[i] == -1) - { - map[i] = index; - if (i > 0) - ifas[i - 1].ifa.ifa_next = &ifas[i].ifa; - return i; - } - else if (map[i] == index) - return i; - } - - /* This means interfaces changed between the reading of the - RTM_GETLINK and RTM_GETADDR information. We have to repeat - everything. */ - return -1; -} - - -/* Create a linked list of `struct ifaddrs' structures, one for each - network interface on the host machine. If successful, store the - list in *IFAP and return 0. On errors, return -1 and set `errno'. */ -static int -getifaddrs_internal (struct ifaddrs **ifap) -{ - struct netlink_handle nh = { 0, 0, 0, NULL, NULL }; - struct netlink_res *nlp; - struct ifaddrs_storage *ifas; - unsigned int i, newlink, newaddr, newaddr_idx; - int *map_newlink_data; - size_t ifa_data_size = 0; /* Size to allocate for all ifa_data. */ - char *ifa_data_ptr; /* Pointer to the unused part of memory for - ifa_data. */ - int result = 0; - - *ifap = NULL; - - if (__netlink_open (&nh) < 0) - return -1; - - /* Tell the kernel that we wish to get a list of all - active interfaces, collect all data for every interface. */ - if (__netlink_request (&nh, RTM_GETLINK) < 0) - { - result = -1; - goto exit_free; - } - - /* Now ask the kernel for all addresses which are assigned - to an interface and collect all data for every interface. - Since we store the addresses after the interfaces in the - list, we will later always find the interface before the - corresponding addresses. */ - ++nh.seq; - if (__netlink_request (&nh, RTM_GETADDR) < 0) - { - result = -1; - goto exit_free; - } - - /* Count all RTM_NEWLINK and RTM_NEWADDR entries to allocate - enough memory. */ - newlink = newaddr = 0; - for (nlp = nh.nlm_list; nlp; nlp = nlp->next) - { - struct nlmsghdr *nlh; - size_t size = nlp->size; - - if (nlp->nlh == NULL) - continue; - - /* Walk through all entries we got from the kernel and look, which - message type they contain. */ - for (nlh = nlp->nlh; NLMSG_OK (nlh, size); nlh = NLMSG_NEXT (nlh, size)) - { - /* Check if the message is what we want. */ - if ((pid_t) nlh->nlmsg_pid != nh.pid || nlh->nlmsg_seq != nlp->seq) - continue; - - if (nlh->nlmsg_type == NLMSG_DONE) - break; /* ok */ - - if (nlh->nlmsg_type == RTM_NEWLINK) - { - /* A RTM_NEWLINK message can have IFLA_STATS data. We need to - know the size before creating the list to allocate enough - memory. */ - struct ifinfomsg *ifim = (struct ifinfomsg *) NLMSG_DATA (nlh); - struct rtattr *rta = IFLA_RTA (ifim); - size_t rtasize = IFLA_PAYLOAD (nlh); - - while (RTA_OK (rta, rtasize)) - { - size_t rta_payload = RTA_PAYLOAD (rta); - - if (rta->rta_type == IFLA_STATS) - { - ifa_data_size += rta_payload; - break; - } - else - rta = RTA_NEXT (rta, rtasize); - } - ++newlink; - } - else if (nlh->nlmsg_type == RTM_NEWADDR) - ++newaddr; - } - } - - /* Return if no interface is up. */ - if ((newlink + newaddr) == 0) - goto exit_free; - - /* Allocate memory for all entries we have and initialize next - pointer. */ - ifas = (struct ifaddrs_storage *) calloc (1, - (newlink + newaddr) - * sizeof (struct ifaddrs_storage) - + ifa_data_size); - if (ifas == NULL) - { - result = -1; - goto exit_free; - } - - /* Table for mapping kernel index to entry in our list. */ - map_newlink_data = alloca (newlink * sizeof (int)); - memset (map_newlink_data, '\xff', newlink * sizeof (int)); - - ifa_data_ptr = (char *) &ifas[newlink + newaddr]; - newaddr_idx = 0; /* Counter for newaddr index. */ - - /* Walk through the list of data we got from the kernel. */ - for (nlp = nh.nlm_list; nlp; nlp = nlp->next) - { - struct nlmsghdr *nlh; - size_t size = nlp->size; - - if (nlp->nlh == NULL) - continue; - - /* Walk through one message and look at the type: If it is our - message, we need RTM_NEWLINK/RTM_NEWADDR and stop if we reach - the end or we find the end marker (in this case we ignore the - following data. */ - for (nlh = nlp->nlh; NLMSG_OK (nlh, size); nlh = NLMSG_NEXT (nlh, size)) - { - int ifa_index = 0; - - /* Check if the message is the one we want */ - if ((pid_t) nlh->nlmsg_pid != nh.pid || nlh->nlmsg_seq != nlp->seq) - continue; - - if (nlh->nlmsg_type == NLMSG_DONE) - break; /* ok */ - - if (nlh->nlmsg_type == RTM_NEWLINK) - { - /* We found a new interface. Now extract everything from the - interface data we got and need. */ - struct ifinfomsg *ifim = (struct ifinfomsg *) NLMSG_DATA (nlh); - struct rtattr *rta = IFLA_RTA (ifim); - size_t rtasize = IFLA_PAYLOAD (nlh); - - /* Interfaces are stored in the first "newlink" entries - of our list, starting in the order as we got from the - kernel. */ - ifa_index = map_newlink (ifim->ifi_index - 1, ifas, - map_newlink_data, newlink); - if (__glibc_unlikely (ifa_index == -1)) - { - try_again: - result = -EAGAIN; - free (ifas); - goto exit_free; - } - ifas[ifa_index].ifa.ifa_flags = ifim->ifi_flags; - - while (RTA_OK (rta, rtasize)) - { - char *rta_data = RTA_DATA (rta); - size_t rta_payload = RTA_PAYLOAD (rta); - - switch (rta->rta_type) - { - case IFLA_ADDRESS: - if (rta_payload <= sizeof (ifas[ifa_index].addr)) - { - ifas[ifa_index].addr.sl.sll_family = AF_PACKET; - memcpy (ifas[ifa_index].addr.sl.sll_addr, - (char *) rta_data, rta_payload); - ifas[ifa_index].addr.sl.sll_halen = rta_payload; - ifas[ifa_index].addr.sl.sll_ifindex - = ifim->ifi_index; - ifas[ifa_index].addr.sl.sll_hatype = ifim->ifi_type; - - ifas[ifa_index].ifa.ifa_addr - = &ifas[ifa_index].addr.sa; - } - break; - - case IFLA_BROADCAST: - if (rta_payload <= sizeof (ifas[ifa_index].broadaddr)) - { - ifas[ifa_index].broadaddr.sl.sll_family = AF_PACKET; - memcpy (ifas[ifa_index].broadaddr.sl.sll_addr, - (char *) rta_data, rta_payload); - ifas[ifa_index].broadaddr.sl.sll_halen = rta_payload; - ifas[ifa_index].broadaddr.sl.sll_ifindex - = ifim->ifi_index; - ifas[ifa_index].broadaddr.sl.sll_hatype - = ifim->ifi_type; - - ifas[ifa_index].ifa.ifa_broadaddr - = &ifas[ifa_index].broadaddr.sa; - } - break; - - case IFLA_IFNAME: /* Name of Interface */ - if ((rta_payload + 1) <= sizeof (ifas[ifa_index].name)) - { - ifas[ifa_index].ifa.ifa_name = ifas[ifa_index].name; - *(char *) __mempcpy (ifas[ifa_index].name, rta_data, - rta_payload) = '\0'; - } - break; - - case IFLA_STATS: /* Statistics of Interface */ - ifas[ifa_index].ifa.ifa_data = ifa_data_ptr; - ifa_data_ptr += rta_payload; - memcpy (ifas[ifa_index].ifa.ifa_data, rta_data, - rta_payload); - break; - - case IFLA_UNSPEC: - break; - case IFLA_MTU: - break; - case IFLA_LINK: - break; - case IFLA_QDISC: - break; - default: - break; - } - - rta = RTA_NEXT (rta, rtasize); - } - } - else if (nlh->nlmsg_type == RTM_NEWADDR) - { - struct ifaddrmsg *ifam = (struct ifaddrmsg *) NLMSG_DATA (nlh); - struct rtattr *rta = IFA_RTA (ifam); - size_t rtasize = IFA_PAYLOAD (nlh); - - /* New Addresses are stored in the order we got them from - the kernel after the interfaces. Theoretically it is possible - that we have holes in the interface part of the list, - but we always have already the interface for this address. */ - ifa_index = newlink + newaddr_idx; - int idx = map_newlink (ifam->ifa_index - 1, ifas, - map_newlink_data, newlink); - if (__glibc_unlikely (idx == -1)) - goto try_again; - ifas[ifa_index].ifa.ifa_flags = ifas[idx].ifa.ifa_flags; - if (ifa_index > 0) - ifas[ifa_index - 1].ifa.ifa_next = &ifas[ifa_index].ifa; - ++newaddr_idx; - - while (RTA_OK (rta, rtasize)) - { - char *rta_data = RTA_DATA (rta); - size_t rta_payload = RTA_PAYLOAD (rta); - - switch (rta->rta_type) - { - case IFA_ADDRESS: - { - struct sockaddr *sa; - - if (ifas[ifa_index].ifa.ifa_addr != NULL) - { - /* In a point-to-poing network IFA_ADDRESS - contains the destination address, local - address is supplied in IFA_LOCAL attribute. - destination address and broadcast address - are stored in an union, so it doesn't matter - which name we use. */ - ifas[ifa_index].ifa.ifa_broadaddr - = &ifas[ifa_index].broadaddr.sa; - sa = &ifas[ifa_index].broadaddr.sa; - } - else - { - ifas[ifa_index].ifa.ifa_addr - = &ifas[ifa_index].addr.sa; - sa = &ifas[ifa_index].addr.sa; - } - - sa->sa_family = ifam->ifa_family; - - switch (ifam->ifa_family) - { - case AF_INET: - /* Size must match that of an address for IPv4. */ - if (rta_payload == 4) - memcpy (&((struct sockaddr_in *) sa)->sin_addr, - rta_data, rta_payload); - break; - - case AF_INET6: - /* Size must match that of an address for IPv6. */ - if (rta_payload == 16) - { - memcpy (&((struct sockaddr_in6 *) sa)->sin6_addr, - rta_data, rta_payload); - if (IN6_IS_ADDR_LINKLOCAL (rta_data) - || IN6_IS_ADDR_MC_LINKLOCAL (rta_data)) - ((struct sockaddr_in6 *) sa)->sin6_scope_id - = ifam->ifa_index; - } - break; - - default: - if (rta_payload <= sizeof (ifas[ifa_index].addr)) - memcpy (sa->sa_data, rta_data, rta_payload); - break; - } - } - break; - - case IFA_LOCAL: - if (ifas[ifa_index].ifa.ifa_addr != NULL) - { - /* If ifa_addr is set and we get IFA_LOCAL, - assume we have a point-to-point network. - Move address to correct field. */ - ifas[ifa_index].broadaddr = ifas[ifa_index].addr; - ifas[ifa_index].ifa.ifa_broadaddr - = &ifas[ifa_index].broadaddr.sa; - memset (&ifas[ifa_index].addr, '\0', - sizeof (ifas[ifa_index].addr)); - } - - ifas[ifa_index].ifa.ifa_addr = &ifas[ifa_index].addr.sa; - ifas[ifa_index].ifa.ifa_addr->sa_family - = ifam->ifa_family; - - switch (ifam->ifa_family) - { - case AF_INET: - /* Size must match that of an address for IPv4. */ - if (rta_payload == 4) - memcpy (&ifas[ifa_index].addr.s4.sin_addr, - rta_data, rta_payload); - break; - - case AF_INET6: - /* Size must match that of an address for IPv6. */ - if (rta_payload == 16) - { - memcpy (&ifas[ifa_index].addr.s6.sin6_addr, - rta_data, rta_payload); - if (IN6_IS_ADDR_LINKLOCAL (rta_data) - || IN6_IS_ADDR_MC_LINKLOCAL (rta_data)) - ifas[ifa_index].addr.s6.sin6_scope_id = - ifam->ifa_index; - } - break; - - default: - if (rta_payload <= sizeof (ifas[ifa_index].addr)) - memcpy (ifas[ifa_index].addr.sa.sa_data, - rta_data, rta_payload); - break; - } - break; - - case IFA_BROADCAST: - /* We get IFA_BROADCAST, so IFA_LOCAL was too much. */ - if (ifas[ifa_index].ifa.ifa_broadaddr != NULL) - memset (&ifas[ifa_index].broadaddr, '\0', - sizeof (ifas[ifa_index].broadaddr)); - - ifas[ifa_index].ifa.ifa_broadaddr - = &ifas[ifa_index].broadaddr.sa; - ifas[ifa_index].ifa.ifa_broadaddr->sa_family - = ifam->ifa_family; - - switch (ifam->ifa_family) - { - case AF_INET: - /* Size must match that of an address for IPv4. */ - if (rta_payload == 4) - memcpy (&ifas[ifa_index].broadaddr.s4.sin_addr, - rta_data, rta_payload); - break; - - case AF_INET6: - /* Size must match that of an address for IPv6. */ - if (rta_payload == 16) - { - memcpy (&ifas[ifa_index].broadaddr.s6.sin6_addr, - rta_data, rta_payload); - if (IN6_IS_ADDR_LINKLOCAL (rta_data) - || IN6_IS_ADDR_MC_LINKLOCAL (rta_data)) - ifas[ifa_index].broadaddr.s6.sin6_scope_id - = ifam->ifa_index; - } - break; - - default: - if (rta_payload <= sizeof (ifas[ifa_index].addr)) - memcpy (&ifas[ifa_index].broadaddr.sa.sa_data, - rta_data, rta_payload); - break; - } - break; - - case IFA_LABEL: - if (rta_payload + 1 <= sizeof (ifas[ifa_index].name)) - { - ifas[ifa_index].ifa.ifa_name = ifas[ifa_index].name; - *(char *) __mempcpy (ifas[ifa_index].name, rta_data, - rta_payload) = '\0'; - } - else - abort (); - break; - - case IFA_UNSPEC: - break; - case IFA_CACHEINFO: - break; - default: - break; - } - - rta = RTA_NEXT (rta, rtasize); - } - - /* If we didn't get the interface name with the - address, use the name from the interface entry. */ - if (ifas[ifa_index].ifa.ifa_name == NULL) - { - int idx = map_newlink (ifam->ifa_index - 1, ifas, - map_newlink_data, newlink); - if (__glibc_unlikely (idx == -1)) - goto try_again; - ifas[ifa_index].ifa.ifa_name = ifas[idx].ifa.ifa_name; - } - - /* Calculate the netmask. */ - if (ifas[ifa_index].ifa.ifa_addr - && ifas[ifa_index].ifa.ifa_addr->sa_family != AF_UNSPEC - && ifas[ifa_index].ifa.ifa_addr->sa_family != AF_PACKET) - { - uint32_t max_prefixlen = 0; - char *cp = NULL; - - ifas[ifa_index].ifa.ifa_netmask - = &ifas[ifa_index].netmask.sa; - - switch (ifas[ifa_index].ifa.ifa_addr->sa_family) - { - case AF_INET: - cp = (char *) &ifas[ifa_index].netmask.s4.sin_addr; - max_prefixlen = 32; - break; - - case AF_INET6: - cp = (char *) &ifas[ifa_index].netmask.s6.sin6_addr; - max_prefixlen = 128; - break; - } - - ifas[ifa_index].ifa.ifa_netmask->sa_family - = ifas[ifa_index].ifa.ifa_addr->sa_family; - - if (cp != NULL) - { - unsigned int preflen; - - if (ifam->ifa_prefixlen > max_prefixlen) - preflen = max_prefixlen; - else - preflen = ifam->ifa_prefixlen; - - for (i = 0; i < preflen / 8; i++) - *cp++ = 0xff; - if (preflen % 8) - *cp = 0xff << (8 - preflen % 8); - } - } - } - } - } - - assert (ifa_data_ptr <= (char *) &ifas[newlink + newaddr] + ifa_data_size); - - if (newaddr_idx > 0) - { - for (i = 0; i < newlink; ++i) - if (map_newlink_data[i] == -1) - { - /* We have fewer links then we anticipated. Adjust the - forward pointer to the first address entry. */ - ifas[i - 1].ifa.ifa_next = &ifas[newlink].ifa; - } - - if (i == 0 && newlink > 0) - /* No valid link, but we allocated memory. We have to - populate the first entry. */ - memmove (ifas, &ifas[newlink], sizeof (struct ifaddrs_storage)); - } - - *ifap = &ifas[0].ifa; - - exit_free: - __netlink_free_handle (&nh); - __netlink_close (&nh); - - return result; -} - - -/* Create a linked list of `struct ifaddrs' structures, one for each - network interface on the host machine. If successful, store the - list in *IFAP and return 0. On errors, return -1 and set `errno'. */ -int -__getifaddrs (struct ifaddrs **ifap) -{ - int res; - - do - res = getifaddrs_internal (ifap); - while (res == -EAGAIN); - - return res; -} -weak_alias (__getifaddrs, getifaddrs) -libc_hidden_weak (getifaddrs) - - -void -__freeifaddrs (struct ifaddrs *ifa) -{ - free (ifa); -} -weak_alias (__freeifaddrs, freeifaddrs) -libc_hidden_weak (freeifaddrs) diff --git a/sysdeps/unix/sysv/linux/ifreq.c b/sysdeps/unix/sysv/linux/ifreq.c deleted file mode 100644 index d941ba1a93..0000000000 --- a/sysdeps/unix/sysv/linux/ifreq.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "ifreq.h" - - -void -__ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd) -{ - int fd = sockfd; - struct ifconf ifc; - int rq_len; - int nifs; -# define RQ_IFS 4 - - if (fd < 0) - fd = __opensock (); - if (fd < 0) - { - *num_ifs = 0; - *ifreqs = NULL; - return; - } - - ifc.ifc_buf = NULL; - - /* We may be able to get the needed buffer size directly, rather than - guessing. */ - ifc.ifc_buf = NULL; - ifc.ifc_len = 0; - if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0 || ifc.ifc_len == 0) - rq_len = RQ_IFS * sizeof (struct ifreq); - else - rq_len = ifc.ifc_len; - - /* Read all the interfaces out of the kernel. */ - ifc.ifc_len = rq_len; - void *newp = realloc (ifc.ifc_buf, ifc.ifc_len); - if (newp == NULL - || (ifc.ifc_buf = newp, __ioctl (fd, SIOCGIFCONF, &ifc)) < 0) - { - free (ifc.ifc_buf); - - if (fd != sockfd) - __close (fd); - - *num_ifs = 0; - *ifreqs = NULL; - return; - } - - nifs = ifc.ifc_len / sizeof (struct ifreq); - - if (fd != sockfd) - __close (fd); - - *num_ifs = nifs; - *ifreqs = realloc (ifc.ifc_buf, nifs * sizeof (struct ifreq)); -} diff --git a/sysdeps/unix/sysv/linux/include/bits/syscall.h b/sysdeps/unix/sysv/linux/include/bits/syscall.h deleted file mode 100644 index 3e60262486..0000000000 --- a/sysdeps/unix/sysv/linux/include/bits/syscall.h +++ /dev/null @@ -1,3 +0,0 @@ -/* The real bits/syscall.h is generated during the build, in - $(objdir)/misc/bits. */ -#include diff --git a/sysdeps/unix/sysv/linux/include/sys/sysinfo.h b/sysdeps/unix/sysv/linux/include/sys/sysinfo.h deleted file mode 100644 index 1fa4969ef8..0000000000 --- a/sysdeps/unix/sysv/linux/include/sys/sysinfo.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Internal declarations for sys/sysinfo.h. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _INCLUDE_SYS_SYSINFO_H -#define _INCLUDE_SYS_SYSINFO_H 1 - -#include_next - -# ifndef _ISOMAC - -extern __typeof (sysinfo) __sysinfo __THROW; - -# endif /* _ISOMAC */ -#endif /* sys/sysinfo.h */ diff --git a/sysdeps/unix/sysv/linux/include/sys/timex.h b/sysdeps/unix/sysv/linux/include/sys/timex.h deleted file mode 100644 index 28580aef4a..0000000000 --- a/sysdeps/unix/sysv/linux/include/sys/timex.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Internal declarations for sys/timex.h. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _INCLUDE_SYS_TIMEX_H -#define _INCLUDE_SYS_TIMEX_H 1 - -#include_next - -# ifndef _ISOMAC - -libc_hidden_proto (__adjtimex) - -# endif /* _ISOMAC */ -#endif /* sys/timex.h */ diff --git a/sysdeps/unix/sysv/linux/internal_statvfs.c b/sysdeps/unix/sysv/linux/internal_statvfs.c deleted file mode 100644 index 9a17ca5c17..0000000000 --- a/sysdeps/unix/sysv/linux/internal_statvfs.c +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "linux_fsinfo.h" -#include - - -/* Special internal-only bit value. */ -#define ST_VALID 0x0020 - - -#ifndef STATFS -# define STATFS statfs -# define STATVFS statvfs -# define INTERNAL_STATVFS __internal_statvfs -#else -extern int __statvfs_getflags (const char *name, int fstype, int fd); -#endif - - -void -INTERNAL_STATVFS (const char *name, struct STATVFS *buf, - struct STATFS *fsbuf, int fd) -{ - /* Now fill in the fields we have information for. */ - buf->f_bsize = fsbuf->f_bsize; - /* Linux has the f_frsize size only in later version of the kernel. - If the value is not filled in use f_bsize. */ - buf->f_frsize = fsbuf->f_frsize ?: fsbuf->f_bsize; - buf->f_blocks = fsbuf->f_blocks; - buf->f_bfree = fsbuf->f_bfree; - buf->f_bavail = fsbuf->f_bavail; - buf->f_files = fsbuf->f_files; - buf->f_ffree = fsbuf->f_ffree; - if (sizeof (buf->f_fsid) == sizeof (fsbuf->f_fsid)) - /* The shifting uses 'unsigned long long int' even though the target - field might only have 32 bits. This is OK since the 'if' branch - is not used in this case but the compiler would still generate - warnings. */ - buf->f_fsid = ((fsbuf->f_fsid.__val[0] - & ((1ULL << (8 * sizeof (fsbuf->f_fsid.__val[0]))) - 1)) - | ((unsigned long long int) fsbuf->f_fsid.__val[1] - << (8 * (sizeof (buf->f_fsid) - - sizeof (fsbuf->f_fsid.__val[0]))))); - else - /* We cannot help here. The statvfs element is not large enough to - contain both words of the statfs f_fsid field. */ - buf->f_fsid = fsbuf->f_fsid.__val[0]; -#ifdef _STATVFSBUF_F_UNUSED - buf->__f_unused = 0; -#endif - buf->f_namemax = fsbuf->f_namelen; - memset (buf->__f_spare, '\0', sizeof (buf->__f_spare)); - - /* What remains to do is to fill the fields f_favail and f_flag. */ - - /* XXX I have no idea how to compute f_favail. Any idea??? */ - buf->f_favail = buf->f_ffree; - - buf->f_flag = fsbuf->f_flags ^ ST_VALID; -} diff --git a/sysdeps/unix/sysv/linux/internal_statvfs64.c b/sysdeps/unix/sysv/linux/internal_statvfs64.c deleted file mode 100644 index 49e7689f8b..0000000000 --- a/sysdeps/unix/sysv/linux/internal_statvfs64.c +++ /dev/null @@ -1,4 +0,0 @@ -#define STATFS statfs64 -#define STATVFS statvfs64 -#define INTERNAL_STATVFS __internal_statvfs64 -#include "internal_statvfs.c" diff --git a/sysdeps/unix/sysv/linux/ipc_ops.h b/sysdeps/unix/sysv/linux/ipc_ops.h deleted file mode 100644 index 078736088a..0000000000 --- a/sysdeps/unix/sysv/linux/ipc_ops.h +++ /dev/null @@ -1,30 +0,0 @@ -/* The codes for the functions to use the ipc syscall multiplexer. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define IPCOP_semop 1 -#define IPCOP_semget 2 -#define IPCOP_semctl 3 -#define IPCOP_semtimedop 4 -#define IPCOP_msgsnd 11 -#define IPCOP_msgrcv 12 -#define IPCOP_msgget 13 -#define IPCOP_msgctl 14 -#define IPCOP_shmat 21 -#define IPCOP_shmdt 22 -#define IPCOP_shmget 23 -#define IPCOP_shmctl 24 diff --git a/sysdeps/unix/sysv/linux/ipc_priv.h b/sysdeps/unix/sysv/linux/ipc_priv.h deleted file mode 100644 index 79315b9da6..0000000000 --- a/sysdeps/unix/sysv/linux/ipc_priv.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Old SysV permission definition for Linux. Default version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include /* For __key_t */ - -#define __IPC_64 0x100 - -struct __old_ipc_perm -{ - __key_t __key; /* Key. */ - unsigned short int uid; /* Owner's user ID. */ - unsigned short int gid; /* Owner's group ID. */ - unsigned short int cuid; /* Creator's user ID. */ - unsigned short int cgid; /* Creator's group ID. */ - unsigned short int mode; /* Read/write permission. */ - unsigned short int __seq; /* Sequence number. */ -}; - -#define SEMCTL_ARG_ADDRESS(__arg) &__arg.array - -#define MSGRCV_ARGS(__msgp, __msgtyp) \ - ((long int []){ (long int) __msgp, __msgtyp }) - -#include diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h deleted file mode 100644 index 9495db4fef..0000000000 --- a/sysdeps/unix/sysv/linux/kernel-features.h +++ /dev/null @@ -1,104 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file must not contain any C code. At least it must be protected - to allow using the file also in assembler files. */ - -#ifndef __LINUX_KERNEL_VERSION -/* We assume the worst; all kernels should be supported. */ -# define __LINUX_KERNEL_VERSION 0 -#endif - -/* We assume for __LINUX_KERNEL_VERSION the same encoding used in - linux/version.h. I.e., the major, minor, and subminor all get a - byte with the major number being in the highest byte. This means - we can do numeric comparisons. - - In the following we will define certain symbols depending on - whether the describes kernel feature is available in the kernel - version given by __LINUX_KERNEL_VERSION. We are not always exactly - recording the correct versions in which the features were - introduced. If somebody cares these values can afterwards be - corrected. */ - -/* The sendfile syscall was introduced in 2.2.0. */ -#define __ASSUME_SENDFILE 1 - -/* Some architectures use the socketcall multiplexer for some or all - socket-related operations instead of separate syscalls. - __ASSUME_SOCKETCALL is defined for such architectures. */ - -/* The changed st_ino field appeared in 2.4.0-test6. However, SH is lame, - and still does not have a 64-bit inode field. */ -#define __ASSUME_ST_INO_64_BIT 1 - -/* The statfs64 syscalls are available in 2.5.74 (but not for alpha). */ -#define __ASSUME_STATFS64 1 - -/* pselect/ppoll were introduced just after 2.6.16-rc1. On x86_64 and - SH this appeared first in 2.6.19-rc1, on ia64 in 2.6.22-rc1. */ -#define __ASSUME_PSELECT 1 - -/* The *at syscalls were introduced just after 2.6.16-rc1. On PPC - they were introduced in 2.6.17-rc1, on SH in 2.6.19-rc1. */ -#define __ASSUME_ATFCTS 1 - -/* Support for inter-process robust mutexes was added in 2.6.17 (but - some architectures lack futex_atomic_cmpxchg_inatomic in some - configurations). */ -#define __ASSUME_SET_ROBUST_LIST 1 - -/* Support for private futexes was added in 2.6.22. */ -#define __ASSUME_PRIVATE_FUTEX 1 - -/* Support for various CLOEXEC and NONBLOCK flags was added in - 2.6.27. */ -#define __ASSUME_IN_NONBLOCK 1 - -/* Support for the FUTEX_CLOCK_REALTIME flag was added in 2.6.29. */ -#define __ASSUME_FUTEX_CLOCK_REALTIME 1 - -/* Support for preadv and pwritev was added in 2.6.30. */ -#define __ASSUME_PREADV 1 -#define __ASSUME_PWRITEV 1 - -/* Support for sendmmsg functionality was added in 3.0. */ -#define __ASSUME_SENDMMSG 1 - -/* On most architectures, most socket syscalls are supported for all - supported kernel versions, but on some socketcall architectures - separate syscalls were only added later. */ -#define __ASSUME_SENDMSG_SYSCALL 1 -#define __ASSUME_RECVMSG_SYSCALL 1 -#define __ASSUME_ACCEPT_SYSCALL 1 -#define __ASSUME_CONNECT_SYSCALL 1 -#define __ASSUME_RECVFROM_SYSCALL 1 -#define __ASSUME_SENDTO_SYSCALL 1 -#define __ASSUME_ACCEPT4_SYSCALL 1 -#define __ASSUME_RECVMMSG_SYSCALL 1 -#define __ASSUME_SENDMMSG_SYSCALL 1 - -/* Support for SysV IPC through wired syscalls. All supported architectures - either support ipc syscall and/or all the ipc correspondent syscalls. */ -#define __ASSUME_DIRECT_SYSVIPC_SYSCALLS 1 - -/* Support for p{read,write}v2 was added in 4.6. However Linux default - implementation does not assume the __ASSUME_* and instead use a fallback - implementation based on p{read,write}v and returning an error for - non supported flags. */ diff --git a/sysdeps/unix/sysv/linux/kernel-posix-cpu-timers.h b/sysdeps/unix/sysv/linux/kernel-posix-cpu-timers.h deleted file mode 100644 index 164a90ddeb..0000000000 --- a/sysdeps/unix/sysv/linux/kernel-posix-cpu-timers.h +++ /dev/null @@ -1,18 +0,0 @@ -/* Parameters for the Linux kernel ABI for CPU clocks. */ - -#define CPUCLOCK_PID(clock) ((pid_t) ~((clock) >> 3)) -#define CPUCLOCK_PERTHREAD(clock) \ - (((clock) & (clockid_t) CPUCLOCK_PERTHREAD_MASK) != 0) -#define CPUCLOCK_PID_MASK 7 -#define CPUCLOCK_PERTHREAD_MASK 4 -#define CPUCLOCK_WHICH(clock) ((clock) & (clockid_t) CPUCLOCK_CLOCK_MASK) -#define CPUCLOCK_CLOCK_MASK 3 -#define CPUCLOCK_PROF 0 -#define CPUCLOCK_VIRT 1 -#define CPUCLOCK_SCHED 2 -#define CPUCLOCK_MAX 3 - -#define MAKE_PROCESS_CPUCLOCK(pid, clock) \ - ((~(clockid_t) (pid) << 3) | (clockid_t) (clock)) -#define MAKE_THREAD_CPUCLOCK(tid, clock) \ - MAKE_PROCESS_CPUCLOCK((tid), (clock) | CPUCLOCK_PERTHREAD_MASK) diff --git a/sysdeps/unix/sysv/linux/kernel-posix-timers.h b/sysdeps/unix/sysv/linux/kernel-posix-timers.h deleted file mode 100644 index 5f4192bd1f..0000000000 --- a/sysdeps/unix/sysv/linux/kernel-posix-timers.h +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include - - -/* Nonzero if the system calls are not available. */ -extern int __no_posix_timers attribute_hidden; - -/* Callback to start helper thread. */ -extern void __start_helper_thread (void) attribute_hidden; - -/* Control variable for helper thread creation. */ -extern pthread_once_t __helper_once attribute_hidden; - -/* TID of the helper thread. */ -extern pid_t __helper_tid attribute_hidden; - -/* List of active SIGEV_THREAD timers. */ -extern struct timer *__active_timer_sigev_thread attribute_hidden; -/* Lock for the __active_timer_sigev_thread. */ -extern pthread_mutex_t __active_timer_sigev_thread_lock attribute_hidden; - - -/* Type of timers in the kernel. */ -typedef int kernel_timer_t; - - -/* Internal representation of timer. */ -struct timer -{ - /* Notification mechanism. */ - int sigev_notify; - - /* Timer ID returned by the kernel. */ - kernel_timer_t ktimerid; - - /* All new elements must be added after ktimerid. And if the thrfunc - element is not the third element anymore the memory allocation in - timer_create needs to be changed. */ - - /* Parameters for the thread to be started for SIGEV_THREAD. */ - void (*thrfunc) (sigval_t); - sigval_t sival; - pthread_attr_t attr; - - /* Next element in list of active SIGEV_THREAD timers. */ - struct timer *next; -}; diff --git a/sysdeps/unix/sysv/linux/kernel_sigaction.h b/sysdeps/unix/sysv/linux/kernel_sigaction.h deleted file mode 100644 index d005cbce98..0000000000 --- a/sysdeps/unix/sysv/linux/kernel_sigaction.h +++ /dev/null @@ -1,19 +0,0 @@ -/* This is the sigaction structure from the Linux 2.1.20 kernel. */ - -#define HAVE_SA_RESTORER - -struct old_kernel_sigaction { - __sighandler_t k_sa_handler; - unsigned long sa_mask; - unsigned long sa_flags; - void (*sa_restorer) (void); -}; - -/* This is the sigaction structure from the Linux 2.1.68 kernel. */ - -struct kernel_sigaction { - __sighandler_t k_sa_handler; - unsigned long sa_flags; - void (*sa_restorer) (void); - sigset_t sa_mask; -}; diff --git a/sysdeps/unix/sysv/linux/kernel_stat.h b/sysdeps/unix/sysv/linux/kernel_stat.h deleted file mode 100644 index eecc962de3..0000000000 --- a/sysdeps/unix/sysv/linux/kernel_stat.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Definition of `struct stat' used in the kernel.. */ -struct kernel_stat - { - unsigned short int st_dev; - unsigned short int __pad1; -#define _HAVE___PAD1 - unsigned long int st_ino; - unsigned short int st_mode; - unsigned short int st_nlink; - unsigned short int st_uid; - unsigned short int st_gid; - unsigned short int st_rdev; - unsigned short int __pad2; -#define _HAVE___PAD2 - unsigned long int st_size; - unsigned long int st_blksize; - unsigned long int st_blocks; - struct timespec st_atim; - struct timespec st_mtim; - struct timespec st_ctim; - unsigned long int __glibc_reserved4; -#define _HAVE___UNUSED4 - unsigned long int __glibc_reserved5; -#define _HAVE___UNUSED5 - }; - -#define _HAVE_STAT___UNUSED4 -#define _HAVE_STAT___UNUSED5 -#define _HAVE_STAT___PAD1 -#define _HAVE_STAT___PAD2 -#define _HAVE_STAT_NSEC -#define _HAVE_STAT64___PAD1 -#define _HAVE_STAT64___PAD2 -#define _HAVE_STAT64___ST_INO -#define _HAVE_STAT64_NSEC - -#define XSTAT_IS_XSTAT64 0 -#define STATFS_IS_STATFS64 0 diff --git a/sysdeps/unix/sysv/linux/kernel_termios.h b/sysdeps/unix/sysv/linux/kernel_termios.h deleted file mode 100644 index 9defa56d64..0000000000 --- a/sysdeps/unix/sysv/linux/kernel_termios.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _KERNEL_TERMIOS_H -#define _KERNEL_TERMIOS_H 1 -/* The following corresponds to the values from the Linux 2.1.20 kernel. */ - -#define __KERNEL_NCCS 19 - -struct __kernel_termios - { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline */ - cc_t c_cc[__KERNEL_NCCS]; /* control characters */ - }; - -#endif /* kernel_termios.h */ diff --git a/sysdeps/unix/sysv/linux/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/ldd-rewrite.sed deleted file mode 100644 index 7b8b6bdee0..0000000000 --- a/sysdeps/unix/sysv/linux/ldd-rewrite.sed +++ /dev/null @@ -1,11 +0,0 @@ -/Maybe extra code for non-ELF binaries/a\ - file=$1\ - # Run the ldd stub.\ - lddlibc4 "$file"\ - # Test the result.\ - if test $? -lt 3; then\ - return 0;\ - fi\ - # In case of an error punt. -/LD_TRACE_LOADED_OBJECTS=1/a\ -add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out" diff --git a/sysdeps/unix/sysv/linux/lddlibc4.c b/sysdeps/unix/sysv/linux/lddlibc4.c deleted file mode 100644 index 25c4cb960a..0000000000 --- a/sysdeps/unix/sysv/linux/lddlibc4.c +++ /dev/null @@ -1,105 +0,0 @@ -/* Stub for ldd script to print Linux libc4 dependencies. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This code is based on the `ldd' program code from the Linux ld.so - package. */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* Get libc version number. */ -#include "../version.h" - -#define PACKAGE _libc_intl_domainname - - -int -main (int argc, char *argv[]) -{ - const char *filename; - size_t filename_len; - struct exec exec; - char *buf; - FILE *fp; - - /* Set locale via LC_ALL. */ - setlocale (LC_ALL, ""); - - /* Set the text message domain. */ - textdomain (PACKAGE); - - /* We expect exactly one argument. */ - if (argc != 2) - return 1; - - if (strcmp (argv[1], "--help") == 0) - { - printf (gettext ("Usage: lddlibc4 FILE\n\n")); - printf (gettext ("For bug reporting instructions, please see:\n\ -%s.\n"), REPORT_BUGS_TO); - return 0; - } - else if (strcmp (argv[1], "--version") == 0) - { - printf ("lddlibc4 %s%s\n", PKGVERSION, VERSION); - printf (gettext ("\ -Copyright (C) %s Free Software Foundation, Inc.\n\ -This is free software; see the source for copying conditions. There is NO\n\ -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ -"), "2017"); - return 0; - } - - filename = argv[1]; - - /* First see whether this is really an a.out binary. */ - fp = fopen (filename, "rb"); - if (fp == NULL) - error (2, errno, gettext ("cannot open `%s'"), filename); - - /* Read the program header. */ - if (fread (&exec, sizeof exec, 1, fp) < 1) - error (2, errno, gettext ("cannot read header from `%s'"), filename); - - /* Test for the magic numbers. */ - if (N_MAGIC (exec) != ZMAGIC && N_MAGIC (exec) != QMAGIC - && N_MAGIC (exec) != OMAGIC) - exit (3); - - /* We don't need the file open anymore. */ - fclose (fp); - - /* We must put `__LDD_ARGV0=' in the environment. */ - filename_len = strlen (filename); - buf = (char *) alloca (sizeof "__LDD_ARGV0=" + filename_len); - mempcpy (mempcpy (buf, "__LDD_ARGV0=", sizeof "__LDD_ARGV0=" - 1), - filename, filename_len + 1); - /* ...and put the value in the environment. */ - putenv (buf); - - /* Now we can execute the binary. */ - return execv (filename, &argv[argc]) ? 4 : 0; -} diff --git a/sysdeps/unix/sysv/linux/ldsodefs.h b/sysdeps/unix/sysv/linux/ldsodefs.h deleted file mode 100644 index 2f1c13ffc4..0000000000 --- a/sysdeps/unix/sysv/linux/ldsodefs.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LDSODEFS_H - -/* We have the auxiliary vector. */ -#define HAVE_AUX_VECTOR - -/* Get the real definitions. */ -#include_next - -/* We can assume that the kernel always provides the AT_UID, AT_EUID, - AT_GID, and AT_EGID values in the auxiliary vector from 2.4.0 or so on. */ -#define HAVE_AUX_XID - -/* We can assume that the kernel always provides the AT_SECURE value - in the auxiliary vector from 2.5.74 or so on. */ -#define HAVE_AUX_SECURE - -/* Starting with one of the 2.4.0 pre-releases the Linux kernel passes - up the page size information. */ -#define HAVE_AUX_PAGESIZE - -#endif /* ldsodefs.h */ diff --git a/sysdeps/unix/sysv/linux/libc_fatal.c b/sysdeps/unix/sysv/linux/libc_fatal.c deleted file mode 100644 index d22bfdcc67..0000000000 --- a/sysdeps/unix/sysv/linux/libc_fatal.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Catastrophic failure reports. Linux version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -static bool -writev_for_fatal (int fd, const struct iovec *iov, size_t niov, size_t total) -{ - INTERNAL_SYSCALL_DECL (err); - ssize_t cnt; - do - cnt = INTERNAL_SYSCALL (writev, err, 3, fd, iov, niov); - while (INTERNAL_SYSCALL_ERROR_P (cnt, err) - && INTERNAL_SYSCALL_ERRNO (cnt, err) == EINTR); - return cnt == total; -} -#define WRITEV_FOR_FATAL writev_for_fatal - -static void -backtrace_and_maps (int do_abort, bool written, int fd) -{ - if (do_abort > 1 && written) - { - void *addrs[64]; -#define naddrs (sizeof (addrs) / sizeof (addrs[0])) - int n = __backtrace (addrs, naddrs); - if (n > 2) - { -#define strnsize(str) str, strlen (str) -#define writestr(str) write_not_cancel (fd, str) - writestr (strnsize ("======= Backtrace: =========\n")); - __backtrace_symbols_fd (addrs + 1, n - 1, fd); - - writestr (strnsize ("======= Memory map: ========\n")); - int fd2 = open_not_cancel_2 ("/proc/self/maps", O_RDONLY); - char buf[1024]; - ssize_t n2; - while ((n2 = read_not_cancel (fd2, buf, sizeof (buf))) > 0) - if (write_not_cancel (fd, buf, n2) != n2) - break; - close_not_cancel_no_status (fd2); - } - } -} -#define BEFORE_ABORT backtrace_and_maps - -#include diff --git a/sysdeps/unix/sysv/linux/linux_fsinfo.h b/sysdeps/unix/sysv/linux/linux_fsinfo.h deleted file mode 100644 index 3a71aeae89..0000000000 --- a/sysdeps/unix/sysv/linux/linux_fsinfo.h +++ /dev/null @@ -1,271 +0,0 @@ -/* Constants from kernel header for various FSes. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_FSINFO_H -#define _LINUX_FSINFO_H 1 - -/* These definitions come from the kernel headers. But we cannot - include the headers here because of type clashes. If new - filesystem types will become available we have to add the - appropriate definitions here. */ - -/* Constant that identifies the `adfs' filesystem. */ -#define ADFS_SUPER_MAGIC 0xadf5 - -/* Constant that identifies the `affs' filesystem. */ -#define AFFS_SUPER_MAGIC 0xadff - -/* Constant that identifies the `afs' filesystem. */ -#define AFS_SUPER_MAGIC 0x5346414F - -/* Constant that identifies the `anon_inodefs' filesystem. */ -#define ANON_INODE_FS_MAGIC 0x09041934 - -/* Constant that identifies the `autofs' filesystem. */ -#define AUTOFS_SUPER_MAGIC 0x187 - -/* Constant that identifies the `bdev' filesystem. */ -#define BDEVFS_MAGIC 0x62646576 - -/* Constant that identifies the `bfs' filesystem. */ -#define BFS_MAGIC 0x1badface - -/* Constant that identifies the `binfmt_misc' filesystem. */ -#define BINFMTFS_MAGIC 0x42494e4d - -/* Constant that identifies the `btrfs' filesystem. */ -#define BTRFS_SUPER_MAGIC 0x9123683e - -/* Constant that identifies the `btrfs_test_fs' filesystem. */ -#define BTRFS_TEST_MAGIC 0x73727279 - -/* Constant that identifies the `cgroup' filesystem. */ -#define CGROUP_SUPER_MAGIC 0x27e0eb - -/* Constant that identifies the `coda' filesystem. */ -#define CODA_SUPER_MAGIC 0x73757245 - -/* Constant that identifies the `coherent' filesystem. */ -#define COH_SUPER_MAGIC 0x012ff7b7 - -/* Constant that identifies the `cramfs' filesystem. */ -#define CRAMFS_MAGIC 0x28cd3d45 - -/* Constant that identifies the `cramfs' filesystem w/opposite endianness. */ -#define CRAMFS_MAGIC_WEND 0x453dcd28 - -/* Constant that identifies the `debugfs' filesystem. */ -#define DEBUGFS_MAGIC 0x64626720 - -/* Constant that identifies the `devfs' filesystem. */ -#define DEVFS_SUPER_MAGIC 0x1373 - -/* Constant that identifies the `devpts' filesystem. */ -#define DEVPTS_SUPER_MAGIC 0x1cd1 - -/* Constants that identifies the `ecryptfs' filesystem. */ -#define ECRYPTFS_SUPER_MAGIC 0xf15f - -/* Constants that identifies the `efs' filesystem. */ -#define EFS_SUPER_MAGIC 0x414a53 -#define EFS_MAGIC 0x072959 - -/* Constants that identifies the `evivar' filesystem. */ -#define EFIVARFS_MAGIC 0xde5e81e4 - -/* Constant that identifies the `ext2' filesystem. */ -#define EXT2_SUPER_MAGIC 0xef53 - -/* Constant that identifies the `ext3' filesystem. */ -#define EXT3_SUPER_MAGIC 0xef53 - -/* Constant that identifies the `ext3' filesystem. */ -#define EXT4_SUPER_MAGIC 0xef53 - -/* Constant that identifies the `f2fs' filesystem. */ -#define F2FS_SUPER_MAGIC 0xf2f52010 - -/* Constant that identifies the `futexfs' filesystem. */ -#define FUTEXFS_SUPER_MAGIC 0xBAD1DEA - -/* Constant that identifies the `hostfs' filesystem. */ -#define HOSTFS_SUPER_MAGIC 0x00c0ffee - -/* Constant that identifies the `hpfs' filesystem. */ -#define HPFS_SUPER_MAGIC 0xf995e849 - -/* Constant that identifies the `hugetlbfs' filesystem. */ -#define HUGETLBFS_MAGIC 0x958458f6 - -/* Constant that identifies the `iso9660' filesystem. */ -#define ISOFS_SUPER_MAGIC 0x9660 - -/* Constant that identifies the `jffs' filesystem. */ -#define JFFS_SUPER_MAGIC 0x07c0 - -/* Constant that identifies the `jffs2' filesystem. */ -#define JFFS2_SUPER_MAGIC 0x72b6 - -/* Constant that identifies the `jfs' filesystem. */ -#define JFS_SUPER_MAGIC 0x3153464a - -/* Constant that identifies the `logfs' filesystem. */ -#define LOGFS_MAGIC_U32 0xc97e8168u - -/* Constant that identifies the `lustre' filesystem. */ -#define LUSTRE_SUPER_MAGIC 0x0BD00BD0 - -/* Constants that identify the `minix2' filesystem. */ -#define MINIX2_SUPER_MAGIC 0x2468 -#define MINIX2_SUPER_MAGIC2 0x2478 - -/* Constants that identify the `minix3' filesystem. */ -#define MINIX3_SUPER_MAGIC 0x4d5a - -/* Constants that identify the `minix' filesystem. */ -#define MINIX_SUPER_MAGIC 0x137f -#define MINIX_SUPER_MAGIC2 0x138F - -/* Constant that identifies the `msdos' filesystem. */ -#define MSDOS_SUPER_MAGIC 0x4d44 - -/* Constant that identifies the `mtd_inodefs' filesystem. */ -#define MTD_INODE_FS_MAGIC 0x11307854 - -/* Constant that identifies the `ncp' filesystem. */ -#define NCP_SUPER_MAGIC 0x564c - -/* Constant that identifies the `nilfs' filesystem. */ -#define NILFS_SUPER_MAGIC 0x3434 - -/* Constant that identifies the `nfs' filesystem. */ -#define NFS_SUPER_MAGIC 0x6969 - -/* Constant that identifies the `ntfs' filesystem. */ -#define NTFS_SUPER_MAGIC 0x5346544e - -/* Constant that identifies the `openpromfs' filesystem. */ -#define OPENPROM_SUPER_MAGIC 0x9fa1 - -/* Constant that identifies the `pipefs' filesystem. */ -#define PIPEFS_MAGIC 0x50495045 - -/* Constant that identifies the `proc' filesystem. */ -#define PROC_SUPER_MAGIC 0x9fa0 - -/* Constant that identifies the `pstorefs' filesystem. */ -#define PSTOREFS_MAGIC 0x6165676C - -/* Constant that identifies the `qnx4' filesystem. */ -#define QNX4_SUPER_MAGIC 0x002f - -/* Constant that identifies the `qnx6' filesystem. */ -#define QNX6_SUPER_MAGIC 0x68191122 - -/* Constant that identifies the `ramfs' filesystem. */ -#define RAMFS_MAGIC 0x858458f6 - -/* Constant that identifies the `reiser' filesystem. */ -#define REISERFS_SUPER_MAGIC 0x52654973 - -#define REISERFS_SUPER_MAGIC_STRING "ReIsErFs" -#define REISER2FS_SUPER_MAGIC_STRING "ReIsEr2Fs" -#define REISER2FS_JR_SUPER_MAGIC_STRING "ReIsEr3Fs" - -/* Constant that identifies the `romfs' filesystem. */ -#define ROMFS_SUPER_MAGIC 0x7275 - -/* Constant that identifies the `securityfs' filesystem. */ -#define SECURITYFS_MAGIC 0x73636673 - -/* Constant that identifies the `selinuxfs' filesystem. */ -#define SELINUX_MAGIC 0xf97cff8c - -/* Constant that identifies the `smackfs' filesystem. */ -#define SMACK_MAGIC 0x43415d53 /* "SMAC" */ - -/* Constant that identifies the `shm' filesystem. */ -#define SHMFS_SUPER_MAGIC 0x01021994 - -/* Constant that identifies the `smb' filesystem. */ -#define SMB_SUPER_MAGIC 0x517b - -/* Constant that identifies the `sockfs' filesystem. */ -#define SOCKFS_MAGIC 0x534F434B - -/* Constant that identifies the `squashfs' filesystem. */ -#define SQUASHFS_MAGIC 0x73717368 - -/* Constant that identifies the end of stacks allocated by the kernel. */ -#define STACK_END_MAGIC 0x57AC6E9D - -/* Constant that identifies the `sysfs' filesystem. */ -#define SYSFS_MAGIC 0x62656572 - -/* Constants that identify the `sysV' filesystem. */ -#define SYSV2_SUPER_MAGIC 0x012ff7b6 -#define SYSV4_SUPER_MAGIC 0x012ff7b5 - -/* Constant that identifies the `tmpfs' filesystem. */ -#define TMPFS_MAGIC 0x01021994 - -/* Constant that identifies the `udf' filesystem. */ -#define UDF_SUPER_MAGIC 0x15013346 - -/* Constant that identify the `ufs' filesystem. */ -#define UFS_MAGIC 0x00011954 -#define UFS_CIGAM 0x54190100 /* byteswapped MAGIC */ - -/* Constant that identifies the `usbdevfs' filesystem. */ -#define USBDEVFS_SUPER_MAGIC 0x9fa2 -#define USBDEVICE_SUPER_MAGIC 0x9fa2 - -/* Constant that identifies the `9p' filesystem. */ -#define V9FS_MAGIC 0x01021997 - -/* Constant that identifies the `vxfs' filesystem. */ -#define VXFS_SUPER_MAGIC 0xa501fcf5 - -/* Constant that identifies the `xenfs' filesystem. */ -#define XENFS_SUPER_MAGIC 0xabba1974 - -/* Constant that identifies the `xenix' filesystem. */ -#define XENIX_SUPER_MAGIC 0x012ff7b4 - -/* Constant that identifies the `xfs' filesystem. */ -#define XFS_SUPER_MAGIC 0x58465342 - -/* Maximum link counts. */ -#define COH_LINK_MAX 10000 -#define EXT2_LINK_MAX 32000 -#define EXT4_LINK_MAX 65000 -#define F2FS_LINK_MAX 32000 -#define LUSTRE_LINK_MAX EXT4_LINK_MAX -#define MINIX2_LINK_MAX 65530 -#define MINIX_LINK_MAX 250 -#define REISERFS_LINK_MAX 64535 -#define SYSV_LINK_MAX 126 /* 127? 251? */ -#define UFS_LINK_MAX EXT2_LINK_MAX -#define XENIX_LINK_MAX 126 /* ?? */ -#define XFS_LINK_MAX 2147483647 - -/* The Linux kernel header mentioned this as a kind of generic value. */ -#define LINUX_LINK_MAX 127 - - -#endif /* linux_fsinfo.h */ diff --git a/sysdeps/unix/sysv/linux/listen.c b/sysdeps/unix/sysv/linux/listen.c deleted file mode 100644 index 789f43899c..0000000000 --- a/sysdeps/unix/sysv/linux/listen.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include -#include - -int -listen (int fd, int backlog) -{ -#ifdef __ASSUME_LISTEN_SYSCALL - return INLINE_SYSCALL (listen, 2, fd, backlog); -#else - return SOCKETCALL (listen, fd, backlog); -#endif -} -weak_alias (listen, __listen); diff --git a/sysdeps/unix/sysv/linux/local-setxid.h b/sysdeps/unix/sysv/linux/local-setxid.h deleted file mode 100644 index 97d787d942..0000000000 --- a/sysdeps/unix/sysv/linux/local-setxid.h +++ /dev/null @@ -1,16 +0,0 @@ -/* SETxID functions which only have to change the local thread and - none of the possible other threads. */ -#include - -#ifdef __NR_setresuid32 -# define local_seteuid(id) INLINE_SYSCALL (setresuid32, 3, -1, id, -1) -#else -# define local_seteuid(id) INLINE_SYSCALL (setresuid, 3, -1, id, -1) -#endif - - -#ifdef __NR_setresgid32 -# define local_setegid(id) INLINE_SYSCALL (setresgid32, 3, -1, id, -1) -#else -# define local_setegid(id) INLINE_SYSCALL (setresgid, 3, -1, id, -1) -#endif diff --git a/sysdeps/unix/sysv/linux/lowlevellock-futex.h b/sysdeps/unix/sysv/linux/lowlevellock-futex.h deleted file mode 100644 index bb4fbae13b..0000000000 --- a/sysdeps/unix/sysv/linux/lowlevellock-futex.h +++ /dev/null @@ -1,145 +0,0 @@ -/* Low-level locking access to futex facilities. Linux version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LOWLEVELLOCK_FUTEX_H -#define _LOWLEVELLOCK_FUTEX_H 1 - -#ifndef __ASSEMBLER__ -#include -#include -#include -#endif - -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_REQUEUE 3 -#define FUTEX_CMP_REQUEUE 4 -#define FUTEX_WAKE_OP 5 -#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) -#define FUTEX_LOCK_PI 6 -#define FUTEX_UNLOCK_PI 7 -#define FUTEX_TRYLOCK_PI 8 -#define FUTEX_WAIT_BITSET 9 -#define FUTEX_WAKE_BITSET 10 -#define FUTEX_WAIT_REQUEUE_PI 11 -#define FUTEX_CMP_REQUEUE_PI 12 -#define FUTEX_PRIVATE_FLAG 128 -#define FUTEX_CLOCK_REALTIME 256 - -#define FUTEX_BITSET_MATCH_ANY 0xffffffff - -/* Values for 'private' parameter of locking macros. Yes, the - definition seems to be backwards. But it is not. The bit will be - reversed before passing to the system call. */ -#define LLL_PRIVATE 0 -#define LLL_SHARED FUTEX_PRIVATE_FLAG - -#ifndef __ASSEMBLER__ - -#if IS_IN (libc) || IS_IN (rtld) -/* In libc.so or ld.so all futexes are private. */ -# ifdef __ASSUME_PRIVATE_FUTEX -# define __lll_private_flag(fl, private) \ - ({ \ - /* Prevent warnings in callers of this macro. */ \ - int __lll_private_flag_priv __attribute__ ((unused)); \ - __lll_private_flag_priv = (private); \ - ((fl) | FUTEX_PRIVATE_FLAG); \ - }) -# else -# define __lll_private_flag(fl, private) \ - ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) -# endif -#else -# ifdef __ASSUME_PRIVATE_FUTEX -# define __lll_private_flag(fl, private) \ - (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) -# else -# define __lll_private_flag(fl, private) \ - (__builtin_constant_p (private) \ - ? ((private) == 0 \ - ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ - : (fl)) \ - : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ - & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) -# endif -#endif - -#define lll_futex_syscall(nargs, futexp, op, ...) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret = INTERNAL_SYSCALL (futex, __err, nargs, futexp, op, \ - __VA_ARGS__); \ - (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (__ret, __err)) \ - ? -INTERNAL_SYSCALL_ERRNO (__ret, __err) : 0); \ - }) - -#define lll_futex_wait(futexp, val, private) \ - lll_futex_timed_wait (futexp, val, NULL, private) - -#define lll_futex_timed_wait(futexp, val, timeout, private) \ - lll_futex_syscall (4, futexp, \ - __lll_private_flag (FUTEX_WAIT, private), \ - val, timeout) - -#define lll_futex_timed_wait_bitset(futexp, val, timeout, clockbit, private) \ - lll_futex_syscall (6, futexp, \ - __lll_private_flag (FUTEX_WAIT_BITSET | (clockbit), \ - private), \ - val, timeout, NULL /* Unused. */, \ - FUTEX_BITSET_MATCH_ANY) - -#define lll_futex_wake(futexp, nr, private) \ - lll_futex_syscall (4, futexp, \ - __lll_private_flag (FUTEX_WAKE, private), nr, 0) - -/* Returns non-zero if error happened, zero if success. */ -#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \ - lll_futex_syscall (6, futexp, \ - __lll_private_flag (FUTEX_CMP_REQUEUE, private), \ - nr_wake, nr_move, mutex, val) - -/* Returns non-zero if error happened, zero if success. */ -#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \ - lll_futex_syscall (6, futexp, \ - __lll_private_flag (FUTEX_WAKE_OP, private), \ - nr_wake, nr_wake2, futexp2, \ - FUTEX_OP_CLEAR_WAKE_IF_GT_ONE) - -/* Priority Inheritance support. */ -#define lll_futex_wait_requeue_pi(futexp, val, mutex, private) \ - lll_futex_timed_wait_requeue_pi (futexp, val, NULL, 0, mutex, private) - -#define lll_futex_timed_wait_requeue_pi(futexp, val, timeout, clockbit, \ - mutex, private) \ - lll_futex_syscall (5, futexp, \ - __lll_private_flag (FUTEX_WAIT_REQUEUE_PI \ - | (clockbit), private), \ - val, timeout, mutex) - - -#define lll_futex_cmp_requeue_pi(futexp, nr_wake, nr_move, mutex, \ - val, private) \ - lll_futex_syscall (6, futexp, \ - __lll_private_flag (FUTEX_CMP_REQUEUE_PI, \ - private), \ - nr_wake, nr_move, mutex, val) - -#endif /* !__ASSEMBLER__ */ - -#endif /* lowlevellock-futex.h */ diff --git a/sysdeps/unix/sysv/linux/lseek.c b/sysdeps/unix/sysv/linux/lseek.c deleted file mode 100644 index 3f5ddd71fb..0000000000 --- a/sysdeps/unix/sysv/linux/lseek.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Linux lseek implementation, 32 bits off_t. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -#ifndef __OFF_T_MATCHES_OFF64_T - -/* Test for overflows of structures where we ask the kernel to fill them - in with standard 64-bit syscalls but return them through APIs that - only expose the low 32 bits of some fields. */ - -static inline off_t lseek_overflow (loff_t res) -{ - off_t retval = (off_t) res; - if (retval == res) - return retval; - - __set_errno (EOVERFLOW); - return (off_t) -1; -} - -off_t -__lseek (int fd, off_t offset, int whence) -{ -# ifdef __NR__llseek - loff_t res; - int rc = INLINE_SYSCALL_CALL (_llseek, fd, - (long) (((uint64_t) (offset)) >> 32), - (long) offset, &res, whence); - return rc ?: lseek_overflow (res); -# else - return INLINE_SYSCALL_CALL (lseek, fd, offset, whence); -# endif -} -libc_hidden_def (__lseek) -weak_alias (__lseek, lseek) -strong_alias (__lseek, __libc_lseek) -#endif /* __OFF_T_MATCHES_OFF64_T */ diff --git a/sysdeps/unix/sysv/linux/lseek64.c b/sysdeps/unix/sysv/linux/lseek64.c deleted file mode 100644 index a13908a2a0..0000000000 --- a/sysdeps/unix/sysv/linux/lseek64.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Linux lseek implementation, 64 bits off_t. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -off64_t -__lseek64 (int fd, off64_t offset, int whence) -{ -#ifdef __NR__llseek - loff_t res; - int rc = INLINE_SYSCALL_CALL (_llseek, fd, - (long) (((uint64_t) (offset)) >> 32), - (long) offset, &res, whence); - return rc ?: res; -#else - return INLINE_SYSCALL_CALL (lseek, fd, offset, whence); -#endif -} - -#ifdef __OFF_T_MATCHES_OFF64_T -weak_alias (__lseek64, lseek) -weak_alias (__lseek64, __lseek) -strong_alias (__lseek64, __libc_lseek) -libc_hidden_def (__lseek) -#endif - -strong_alias (__lseek64, __libc_lseek64) -weak_alias (__lseek64, lseek64) - -/* llseek doesn't have a prototype. Since the second parameter is a - 64bit type, this results in wrong behaviour if no prototype is - provided. */ -weak_alias (__lseek64, llseek) -link_warning (llseek, "\ -the `llseek' function may be dangerous; use `lseek64' instead.") diff --git a/sysdeps/unix/sysv/linux/lutimes.c b/sysdeps/unix/sysv/linux/lutimes.c deleted file mode 100644 index 433fb06701..0000000000 --- a/sysdeps/unix/sysv/linux/lutimes.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Change access and/or modification date of file. Do not follow symbolic - links. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - -int -lutimes (const char *file, const struct timeval tvp[2]) -{ - /* The system call espects timespec, not timeval. */ - struct timespec ts[2]; - if (tvp != NULL) - { - if (tvp[0].tv_usec < 0 || tvp[0].tv_usec >= 1000000 - || tvp[1].tv_usec < 0 || tvp[1].tv_usec >= 1000000) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - - TIMEVAL_TO_TIMESPEC (&tvp[0], &ts[0]); - TIMEVAL_TO_TIMESPEC (&tvp[1], &ts[1]); - } - - return INLINE_SYSCALL (utimensat, 4, AT_FDCWD, file, tvp ? ts : NULL, - AT_SYMLINK_NOFOLLOW); -} diff --git a/sysdeps/unix/sysv/linux/lxstat.c b/sysdeps/unix/sysv/linux/lxstat.c deleted file mode 100644 index 6e091d02cf..0000000000 --- a/sysdeps/unix/sysv/linux/lxstat.c +++ /dev/null @@ -1,60 +0,0 @@ -/* lxstat using old-style Unix lstat system call. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ho hum, if xstat == xstat64 we must get rid of the prototype or gcc - will complain since they don't strictly match. */ -#define __lxstat64 __lxstat64_disable - -#include -#include -#include -#include - -#include -#include - -#include - -/* Get information about the file NAME in BUF. */ -int -__lxstat (int vers, const char *name, struct stat *buf) -{ - if (vers == _STAT_VER_KERNEL) - return INLINE_SYSCALL (lstat, 2, name, buf); - -#ifdef STAT_IS_KERNEL_STAT - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); -#else - struct kernel_stat kbuf; - int result; - - result = INLINE_SYSCALL (lstat, 2, name, &kbuf); - if (result == 0) - result = __xstat_conv (vers, &kbuf, buf); - - return result; -#endif -} - -hidden_def (__lxstat) -weak_alias (__lxstat, _lxstat); -#if XSTAT_IS_XSTAT64 -#undef __lxstat64 -strong_alias (__lxstat, __lxstat64); -hidden_ver (__lxstat, __lxstat64) -#endif diff --git a/sysdeps/unix/sysv/linux/lxstat64.c b/sysdeps/unix/sysv/linux/lxstat64.c deleted file mode 100644 index 9bc548f91c..0000000000 --- a/sysdeps/unix/sysv/linux/lxstat64.c +++ /dev/null @@ -1,52 +0,0 @@ -/* lxstat64 using Linux lstat64 system call. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include -#include - -#include - -/* Get information about the file NAME in BUF. */ -int -___lxstat64 (int vers, const char *name, struct stat64 *buf) -{ - int result; - result = INLINE_SYSCALL (lstat64, 2, name, buf); -#if defined _HAVE_STAT64___ST_INO && !__ASSUME_ST_INO_64_BIT - if (__builtin_expect (!result, 1) && buf->__st_ino != (__ino_t) buf->st_ino) - buf->st_ino = buf->__st_ino; -#endif - return result; -} - -#include - -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) -versioned_symbol (libc, ___lxstat64, __lxstat64, GLIBC_2_2); -strong_alias (___lxstat64, __old__lxstat64) -compat_symbol (libc, __old__lxstat64, __lxstat64, GLIBC_2_1); -hidden_ver (___lxstat64, __lxstat64) -#else -strong_alias (___lxstat64, __lxstat64); -hidden_def (__lxstat64) -#endif diff --git a/sysdeps/unix/sysv/linux/m68k/Implies b/sysdeps/unix/sysv/linux/m68k/Implies deleted file mode 100644 index 77f1f7dd2b..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/Implies +++ /dev/null @@ -1 +0,0 @@ -m68k/nptl diff --git a/sysdeps/unix/sysv/linux/m68k/Makefile b/sysdeps/unix/sysv/linux/m68k/Makefile deleted file mode 100644 index ce1f696a6f..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -# Linux/m68k uses Motorola asm syntax and the ELF format. - -m68k-syntax-flag = -DMOTOROLA_SYNTAX - -ifeq ($(subdir),csu) -sysdep_routines += m68k-helpers -ifeq (yes,$(build-shared)) -sysdep_routines += divdi3 -shared-only-routines += divdi3 -CPPFLAGS-divdi3.c = -Din_divdi3_c -endif -endif - -ifeq ($(subdir),misc) -sysdep_routines += mremap -sysdep_headers += sys/reg.h -endif - -ifeq ($(subdir),elf) -sysdep-dl-routines += dl-static -sysdep_routines += dl-vdso libc-m68k-vdso -sysdep-rtld-routines += m68k-vdso -sysdep-others += lddlibc4 -install-bin += lddlibc4 -endif diff --git a/sysdeps/unix/sysv/linux/m68k/Versions b/sysdeps/unix/sysv/linux/m68k/Versions deleted file mode 100644 index 7ecc96ea97..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/Versions +++ /dev/null @@ -1,54 +0,0 @@ -ld { - GLIBC_PRIVATE { - _dl_var_init; - } -} -libc { - GLIBC_2.0 { - # Exception handling support functions from libgcc - __register_frame; __register_frame_table; __deregister_frame; - __frame_state_for; __register_frame_info_table; - - # c* - cacheflush; - } - GLIBC_2.2 { - # functions used in other libraries - __xstat64; __fxstat64; __lxstat64; - - # a* - alphasort64; - - # g* - glob64; - - # New rlimit interface - getrlimit; setrlimit; getrlimit64; - - # r* - readdir64; readdir64_r; - - # s* - scandir64; - - # v* - versionsort64; - } - GLIBC_2.11 { - fallocate64; - } - GLIBC_2.12 { - __m68k_read_tp; - } - GLIBC_PRIVATE { - __vdso_atomic_cmpxchg_32; __vdso_atomic_barrier; - } -} - -ld { - GLIBC_PRIVATE { - __rtld___vdso_read_tp; - __rtld___vdso_atomic_cmpxchg_32; - __rtld___vdso_atomic_barrier; - } -} diff --git a/sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c b/sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c deleted file mode 100644 index 030e46389e..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#define __longjmp ____longjmp_chk -#define CHECK_SP(sp) \ - do { \ - register unsigned long this_sp asm ("sp"); \ - if ((unsigned long) (sp) < this_sp) \ - { \ - stack_t oss; \ - INTERNAL_SYSCALL_DECL (err); \ - int result = INTERNAL_SYSCALL (sigaltstack, err, 2, NULL, &oss); \ - if (!INTERNAL_SYSCALL_ERROR_P (result, err) \ - && ((oss.ss_flags & SS_ONSTACK) == 0 \ - || ((unsigned long) oss.ss_sp + oss.ss_size \ - - (unsigned long) (sp)) < oss.ss_size)) \ - __fortify_fail ("longjmp causes uninitialized stack frame"); \ - } \ - } while (0) - -#include <__longjmp.c> diff --git a/sysdeps/unix/sysv/linux/m68k/alphasort64.c b/sysdeps/unix/sysv/linux/m68k/alphasort64.c deleted file mode 100644 index 0b5ae47d2f..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/alphasort64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/arch-fork.h b/sysdeps/unix/sysv/linux/m68k/arch-fork.h deleted file mode 100644 index d1f5664975..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/arch-fork.h +++ /dev/null @@ -1,28 +0,0 @@ -/* ARCH_FORK definition for Linux fork implementation. m68k version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maxim Kuvyrkov , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 5, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0, \ - NULL, &THREAD_SELF->tid, NULL) diff --git a/sysdeps/unix/sysv/linux/m68k/bits/a.out.h b/sysdeps/unix/sysv/linux/m68k/bits/a.out.h deleted file mode 100644 index 0fb52c3815..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/bits/a.out.h +++ /dev/null @@ -1,3 +0,0 @@ -#ifndef __A_OUT_GNU_H__ -# error "Never use directly; include instead." -#endif diff --git a/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h b/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h deleted file mode 100644 index 0f4574eb2c..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h +++ /dev/null @@ -1,54 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -#define __O_DIRECTORY 040000 /* Must be a directory. */ -#define __O_NOFOLLOW 0100000 /* Do not follow links. */ -#define __O_DIRECT 0200000 /* Direct disk access. */ -#define __O_LARGEFILE 0400000 - -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#ifndef __USE_FILE_OFFSET64 - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/bits/mman.h b/sysdeps/unix/sysv/linux/m68k/bits/mman.h deleted file mode 100644 index cb28d033ee..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/bits/mman.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/m68k version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */ -# define MAP_DENYWRITE 0x00800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x02000 /* Lock the mapping. */ -# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */ -# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ -# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/bits/poll.h b/sysdeps/unix/sysv/linux/m68k/bits/poll.h deleted file mode 100644 index 0f92f34d79..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/bits/poll.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_POLL_H -# error "Never use directly; include instead." -#endif - -/* Event types that can be polled for. These bits may be set in `events' - to indicate the interesting event types; they will appear in `revents' - to indicate the status of the file descriptor. */ -#define POLLIN 0x001 /* There is data to read. */ -#define POLLPRI 0x002 /* There is urgent data to read. */ -#define POLLOUT 0x004 /* Writing now will not block. */ - -#if defined __USE_XOPEN || defined __USE_XOPEN2K8 -/* These values are defined in XPG4.2. */ -# define POLLRDNORM 0x040 /* Normal data may be read. */ -# define POLLRDBAND 0x080 /* Priority data may be read. */ -# define POLLWRNORM POLLOUT /* Writing now will not block. */ -# define POLLWRBAND 0x100 /* Priority data may be written. */ -#endif - -#ifdef __USE_GNU -/* These are extensions for Linux. */ -# define POLLMSG 0x400 -# define POLLREMOVE 0x1000 -# define POLLRDHUP 0x2000 -#endif - -/* Event types always implicitly polled for. These bits need not be set in - `events', but they will appear in `revents' to indicate the status of - the file descriptor. */ -#define POLLERR 0x008 /* Error condition. */ -#define POLLHUP 0x010 /* Hung up. */ -#define POLLNVAL 0x020 /* Invalid polling request. */ diff --git a/sysdeps/unix/sysv/linux/m68k/bits/sockaddr.h b/sysdeps/unix/sysv/linux/m68k/bits/sockaddr.h deleted file mode 100644 index dc7dc39562..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/bits/sockaddr.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Definition of struct sockaddr_* members and sizes, Linux/m68k version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * Never include this file directly; use instead. - */ - -#ifndef _BITS_SOCKADDR_H -#define _BITS_SOCKADDR_H 1 - - -/* POSIX.1g specifies this type name for the `sa_family' member. */ -typedef unsigned short int sa_family_t; - -/* This macro is used to declare the initial common members - of the data types used for socket addresses, `struct sockaddr', - `struct sockaddr_in', `struct sockaddr_un', etc. */ - -#define __SOCKADDR_COMMON(sa_prefix) \ - sa_family_t sa_prefix##family - -#define __SOCKADDR_COMMON_SIZE (sizeof (unsigned short int)) - -/* Size of struct sockaddr_storage. */ -#define _SS_SIZE 126 - -#endif /* bits/sockaddr.h */ diff --git a/sysdeps/unix/sysv/linux/m68k/bits/stat.h b/sysdeps/unix/sysv/linux/m68k/bits/stat.h deleted file mode 100644 index 9394d97158..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/bits/stat.h +++ /dev/null @@ -1,172 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STAT_H -#define _BITS_STAT_H 1 - -/* Versions of the `struct stat' data structure. */ -#define _STAT_VER_LINUX_OLD 1 -#define _STAT_VER_KERNEL 1 -#define _STAT_VER_SVR4 2 -#define _STAT_VER_LINUX 3 -#define _STAT_VER _STAT_VER_LINUX /* The one defined below. */ - -/* Versions of the `xmknod' interface. */ -#define _MKNOD_VER_LINUX 1 -#define _MKNOD_VER_SVR4 2 -#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */ - - -struct stat - { - __dev_t st_dev; /* Device. */ - unsigned short int __pad1; -#ifndef __USE_FILE_OFFSET64 - __ino_t st_ino; /* File serial number. */ -#else - __ino_t __st_ino; /* 32bit file serial number. */ -#endif - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - unsigned short int __pad2; -#ifndef __USE_FILE_OFFSET64 - __off_t st_size; /* Size of file, in bytes. */ -#else - __off64_t st_size; /* Size of file, in bytes. */ -#endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - -#ifndef __USE_FILE_OFFSET64 - __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */ -#else - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -#endif -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif -#ifndef __USE_FILE_OFFSET64 - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; -#else - __ino64_t st_ino; /* File serial number. */ -#endif - }; - -#ifdef __USE_LARGEFILE64 -struct stat64 - { - __dev_t st_dev; /* Device. */ - unsigned short int __pad1; - - __ino_t __st_ino; /* 32bit file serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - unsigned short int __pad2; - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - __ino64_t st_ino; /* File serial number. */ - }; -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -/* Nanosecond resolution time values are supported. */ -#define _STATBUF_ST_NSEC - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFIFO 0010000 /* FIFO. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ - -/* POSIX.1b objects. Note that these macros always evaluate to zero. But - they do it by enforcing the correct use of the macros. */ -#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 0400 /* Read by owner. */ -#define __S_IWRITE 0200 /* Write by owner. */ -#define __S_IEXEC 0100 /* Execute by owner. */ - -#ifdef __USE_ATFILE -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) -#endif - -#endif /* bits/stat.h */ diff --git a/sysdeps/unix/sysv/linux/m68k/brk.c b/sysdeps/unix/sysv/linux/m68k/brk.c deleted file mode 100644 index 6ce9d512bd..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/brk.c +++ /dev/null @@ -1,47 +0,0 @@ -/* brk system call for Linux/m68k. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -void *__curbrk = 0; - -/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt - to work around different old braindamage in the old Linux/x86 ELF - dynamic linker. Sigh. */ -weak_alias (__curbrk, ___brk_addr) - -int -__brk (void *addr) -{ - void *newbrk; - - INTERNAL_SYSCALL_DECL (err); - newbrk = (void *) INTERNAL_SYSCALL (brk, err, 1, addr); - __curbrk = newbrk; - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/m68k/c++-types.data b/sysdeps/unix/sysv/linux/m68k/c++-types.data deleted file mode 100644 index fde53bf337..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:i -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/m68k/clone.S b/sysdeps/unix/sysv/linux/m68k/clone.S deleted file mode 100644 index a680191765..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/clone.S +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab (schwab@issan.informatik.uni-dortmund.de) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#define _ERRNO_H 1 -#include -#include - -#define CLONE_VM 0x00000100 - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - void *parent_tidptr, void *tls, void *child_tidptr) */ - - .text -ENTRY (__clone) - - /* Sanity check arguments. */ - movel #-EINVAL, %d0 - movel 4(%sp), %a0 /* no NULL function pointers */ - tstl %a0 - jeq SYSCALL_ERROR_LABEL - movel 8(%sp), %a1 /* no NULL stack pointers */ - tstl %a1 - jeq SYSCALL_ERROR_LABEL - - /* Allocate space and copy the argument onto the new stack. */ - movel 16(%sp), -(%a1) - - /* Do the system call */ - movel 12+0(%sp), %d1 /* get flags */ - movel %d3, -(%a1) /* save %d3 and get parent_tidptr */ - movel %d3, -(%sp) - cfi_adjust_cfa_offset (4) - cfi_rel_offset (%d3, 0) - movel 20+4(%sp), %d3 - movel %d4, -(%a1) /* save %d4 and get child_tidptr */ - movel %d4, -(%sp) - cfi_adjust_cfa_offset (4) - cfi_rel_offset (%d4, 0) - movel 28+8(%sp), %d4 - movel %d5, -(%a1) /* save %d5 and get tls */ - movel %d5, -(%sp) - cfi_adjust_cfa_offset (4) - cfi_rel_offset (%d5, 0) - movel 24+12(%sp), %d5 - /* save %d2 and get stack pointer */ -#ifdef __mcoldfire__ - movel %d2, -(%a1) - movel %d2, -(%sp) - cfi_adjust_cfa_offset (4) - cfi_rel_offset (%d2, 0) - movel %a1, %d2 -#else - exg %d2, %a1 /* save %d2 and get stack pointer */ - cfi_register (%d2, %a1) -#endif - movel #SYS_ify (clone), %d0 - - /* End FDE now, because in the child the unwind info will be - wrong. */ - cfi_endproc - - trap #0 -#ifdef __mcoldfire__ - movel (%sp)+, %d2 -#else - exg %d2, %a1 /* restore %d2 */ -#endif - movel (%sp)+, %d5 /* restore %d5, %d4 and %d3 */ - movel (%sp)+, %d4 - movel (%sp)+, %d3 - - tstl %d0 - jmi SYSCALL_ERROR_LABEL - jeq 1f - - rts - -1: - cfi_startproc - cfi_undefined (pc) /* Mark end of stack */ - subl %fp, %fp /* terminate the stack frame */ - jsr (%a0) - movel %d0, %d1 - movel #SYS_ify (exit), %d0 - trap #0 - cfi_endproc - - cfi_startproc -PSEUDO_END (__clone) - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/atomic-machine.h b/sysdeps/unix/sysv/linux/m68k/coldfire/atomic-machine.h deleted file mode 100644 index 1daac514a9..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/atomic-machine.h +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maxim Kuvyrkov , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _ATOMIC_MACHINE_H -#define _ATOMIC_MACHINE_H 1 - -#include -#include -#include - -/* Coldfire has no atomic compare-and-exchange operation, but the - kernel provides userspace atomicity operations. Use them. */ - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#define __HAVE_64B_ATOMICS 0 -#define USE_ATOMIC_COMPILER_BUILTINS 0 - -/* XXX Is this actually correct? */ -#define ATOMIC_EXCHANGE_USES_CAS 1 - -/* The only basic operation needed is compare and exchange. */ -/* For ColdFire we'll have to trap into the kernel mode anyway, - so trap from the library rather then from the kernel wrapper. */ -#ifdef SHARED -# define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ - ({ \ - /* Use temporary variables to workaround call-clobberness of \ - the registers. */ \ - __typeof (mem) _mem = mem; \ - __typeof (oldval) _oldval = oldval; \ - __typeof (newval) _newval = newval; \ - register uint32_t *_a0 asm ("a0") = (uint32_t *) _mem; \ - register uint32_t _d0 asm ("d0") = (uint32_t) _oldval; \ - register uint32_t _d1 asm ("d1") = (uint32_t) _newval; \ - void *tmp; \ - \ - asm ("movel #_GLOBAL_OFFSET_TABLE_@GOTPC, %2\n\t" \ - "lea (-6, %%pc, %2), %2\n\t" \ - "movel " STR_M68K_VDSO_SYMBOL (__vdso_atomic_cmpxchg_32) \ - "@GOT(%2), %2\n\t" \ - "movel (%2), %2\n\t" \ - "jsr (%2)\n\t" \ - : "+d" (_d0), "+m" (*_a0), "=&a" (tmp) \ - : "a" (_a0), "d" (_d1)); \ - (__typeof (oldval)) _d0; \ - }) -#else -# define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ - ({ \ - /* Use temporary variables to workaround call-clobberness of \ - the registers. */ \ - __typeof (mem) _mem = mem; \ - __typeof (oldval) _oldval = oldval; \ - __typeof (newval) _newval = newval; \ - register uint32_t _d0 asm ("d0") = SYS_ify (atomic_cmpxchg_32); \ - register uint32_t *_a0 asm ("a0") = (uint32_t *) _mem; \ - register uint32_t _d2 asm ("d2") = (uint32_t) _oldval; \ - register uint32_t _d1 asm ("d1") = (uint32_t) _newval; \ - \ - asm ("trap #0" \ - : "+d" (_d0), "+m" (*_a0) \ - : "a" (_a0), "d" (_d2), "d" (_d1)); \ - (__typeof (oldval)) _d0; \ - }) -#endif - -#ifdef SHARED -# define atomic_full_barrier() \ - ({ \ - void *tmp; \ - \ - asm ("movel #_GLOBAL_OFFSET_TABLE_@GOTPC, %0\n\t" \ - "lea (-6, %pc, %0), %0\n\t" \ - "movel " STR_M68K_VDSO_SYMBOL (__vdso_atomic_barrier) \ - "@GOT(%0), %0\n\t" \ - "movel (%0), %0\n\t" \ - "jsr (%0)\n\t" \ - : "=&a" (tmp)); \ - }) -#else -# define atomic_full_barrier() \ - (INTERNAL_SYSCALL (atomic_barrier, , 0), (void) 0) -#endif - -#endif diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist deleted file mode 100644 index cbf3a3cb2e..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __libc_stack_end D 0x4 -GLIBC_2.4 __stack_chk_guard D 0x4 -GLIBC_2.4 __tls_get_addr F -GLIBC_2.4 _dl_mcount F -GLIBC_2.4 _r_debug D 0x14 -GLIBC_2.4 calloc F -GLIBC_2.4 free F -GLIBC_2.4 malloc F -GLIBC_2.4 realloc F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libBrokenLocale.abilist deleted file mode 100644 index e80f213955..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libanl.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libanl.abilist deleted file mode 100644 index df0c397ddc..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 gai_cancel F -GLIBC_2.4 gai_error F -GLIBC_2.4 gai_suspend F -GLIBC_2.4 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist deleted file mode 100644 index b594ebd7c6..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist +++ /dev/null @@ -1,2133 +0,0 @@ -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 fallocate64 F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __m68k_read_tp F -GLIBC_2.12 _sys_errlist D 0x21c -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x21c -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 _Exit F -GLIBC_2.4 _IO_2_1_stderr_ D 0x98 -GLIBC_2.4 _IO_2_1_stdin_ D 0x98 -GLIBC_2.4 _IO_2_1_stdout_ D 0x98 -GLIBC_2.4 _IO_adjust_column F -GLIBC_2.4 _IO_adjust_wcolumn F -GLIBC_2.4 _IO_default_doallocate F -GLIBC_2.4 _IO_default_finish F -GLIBC_2.4 _IO_default_pbackfail F -GLIBC_2.4 _IO_default_uflow F -GLIBC_2.4 _IO_default_xsgetn F -GLIBC_2.4 _IO_default_xsputn F -GLIBC_2.4 _IO_do_write F -GLIBC_2.4 _IO_doallocbuf F -GLIBC_2.4 _IO_fclose F -GLIBC_2.4 _IO_fdopen F -GLIBC_2.4 _IO_feof F -GLIBC_2.4 _IO_ferror F -GLIBC_2.4 _IO_fflush F -GLIBC_2.4 _IO_fgetpos F -GLIBC_2.4 _IO_fgetpos64 F -GLIBC_2.4 _IO_fgets F -GLIBC_2.4 _IO_file_attach F -GLIBC_2.4 _IO_file_close F -GLIBC_2.4 _IO_file_close_it F -GLIBC_2.4 _IO_file_doallocate F -GLIBC_2.4 _IO_file_finish F -GLIBC_2.4 _IO_file_fopen F -GLIBC_2.4 _IO_file_init F -GLIBC_2.4 _IO_file_jumps D 0x54 -GLIBC_2.4 _IO_file_open F -GLIBC_2.4 _IO_file_overflow F -GLIBC_2.4 _IO_file_read F -GLIBC_2.4 _IO_file_seek F -GLIBC_2.4 _IO_file_seekoff F -GLIBC_2.4 _IO_file_setbuf F -GLIBC_2.4 _IO_file_stat F -GLIBC_2.4 _IO_file_sync F -GLIBC_2.4 _IO_file_underflow F -GLIBC_2.4 _IO_file_write F -GLIBC_2.4 _IO_file_xsputn F -GLIBC_2.4 _IO_flockfile F -GLIBC_2.4 _IO_flush_all F -GLIBC_2.4 _IO_flush_all_linebuffered F -GLIBC_2.4 _IO_fopen F -GLIBC_2.4 _IO_fprintf F -GLIBC_2.4 _IO_fputs F -GLIBC_2.4 _IO_fread F -GLIBC_2.4 _IO_free_backup_area F -GLIBC_2.4 _IO_free_wbackup_area F -GLIBC_2.4 _IO_fsetpos F -GLIBC_2.4 _IO_fsetpos64 F -GLIBC_2.4 _IO_ftell F -GLIBC_2.4 _IO_ftrylockfile F -GLIBC_2.4 _IO_funlockfile F -GLIBC_2.4 _IO_fwrite F -GLIBC_2.4 _IO_getc F -GLIBC_2.4 _IO_getline F -GLIBC_2.4 _IO_getline_info F -GLIBC_2.4 _IO_gets F -GLIBC_2.4 _IO_init F -GLIBC_2.4 _IO_init_marker F -GLIBC_2.4 _IO_init_wmarker F -GLIBC_2.4 _IO_iter_begin F -GLIBC_2.4 _IO_iter_end F -GLIBC_2.4 _IO_iter_file F -GLIBC_2.4 _IO_iter_next F -GLIBC_2.4 _IO_least_wmarker F -GLIBC_2.4 _IO_link_in F -GLIBC_2.4 _IO_list_all D 0x4 -GLIBC_2.4 _IO_list_lock F -GLIBC_2.4 _IO_list_resetlock F -GLIBC_2.4 _IO_list_unlock F -GLIBC_2.4 _IO_marker_delta F -GLIBC_2.4 _IO_marker_difference F -GLIBC_2.4 _IO_padn F -GLIBC_2.4 _IO_peekc_locked F -GLIBC_2.4 _IO_popen F -GLIBC_2.4 _IO_printf F -GLIBC_2.4 _IO_proc_close F -GLIBC_2.4 _IO_proc_open F -GLIBC_2.4 _IO_putc F -GLIBC_2.4 _IO_puts F -GLIBC_2.4 _IO_remove_marker F -GLIBC_2.4 _IO_seekmark F -GLIBC_2.4 _IO_seekoff F -GLIBC_2.4 _IO_seekpos F -GLIBC_2.4 _IO_seekwmark F -GLIBC_2.4 _IO_setb F -GLIBC_2.4 _IO_setbuffer F -GLIBC_2.4 _IO_setvbuf F -GLIBC_2.4 _IO_sgetn F -GLIBC_2.4 _IO_sprintf F -GLIBC_2.4 _IO_sputbackc F -GLIBC_2.4 _IO_sputbackwc F -GLIBC_2.4 _IO_sscanf F -GLIBC_2.4 _IO_str_init_readonly F -GLIBC_2.4 _IO_str_init_static F -GLIBC_2.4 _IO_str_overflow F -GLIBC_2.4 _IO_str_pbackfail F -GLIBC_2.4 _IO_str_seekoff F -GLIBC_2.4 _IO_str_underflow F -GLIBC_2.4 _IO_sungetc F -GLIBC_2.4 _IO_sungetwc F -GLIBC_2.4 _IO_switch_to_get_mode F -GLIBC_2.4 _IO_switch_to_main_wget_area F -GLIBC_2.4 _IO_switch_to_wbackup_area F -GLIBC_2.4 _IO_switch_to_wget_mode F -GLIBC_2.4 _IO_un_link F -GLIBC_2.4 _IO_ungetc F -GLIBC_2.4 _IO_unsave_markers F -GLIBC_2.4 _IO_unsave_wmarkers F -GLIBC_2.4 _IO_vfprintf F -GLIBC_2.4 _IO_vfscanf F -GLIBC_2.4 _IO_vsprintf F -GLIBC_2.4 _IO_wdefault_doallocate F -GLIBC_2.4 _IO_wdefault_finish F -GLIBC_2.4 _IO_wdefault_pbackfail F -GLIBC_2.4 _IO_wdefault_uflow F -GLIBC_2.4 _IO_wdefault_xsgetn F -GLIBC_2.4 _IO_wdefault_xsputn F -GLIBC_2.4 _IO_wdo_write F -GLIBC_2.4 _IO_wdoallocbuf F -GLIBC_2.4 _IO_wfile_jumps D 0x54 -GLIBC_2.4 _IO_wfile_overflow F -GLIBC_2.4 _IO_wfile_seekoff F -GLIBC_2.4 _IO_wfile_sync F -GLIBC_2.4 _IO_wfile_underflow F -GLIBC_2.4 _IO_wfile_xsputn F -GLIBC_2.4 _IO_wmarker_delta F -GLIBC_2.4 _IO_wsetb F -GLIBC_2.4 ___brk_addr D 0x4 -GLIBC_2.4 __adjtimex F -GLIBC_2.4 __after_morecore_hook D 0x4 -GLIBC_2.4 __argz_count F -GLIBC_2.4 __argz_next F -GLIBC_2.4 __argz_stringify F -GLIBC_2.4 __asprintf F -GLIBC_2.4 __assert F -GLIBC_2.4 __assert_fail F -GLIBC_2.4 __assert_perror_fail F -GLIBC_2.4 __backtrace F -GLIBC_2.4 __backtrace_symbols F -GLIBC_2.4 __backtrace_symbols_fd F -GLIBC_2.4 __bsd_getpgrp F -GLIBC_2.4 __bzero F -GLIBC_2.4 __check_rhosts_file D 0x4 -GLIBC_2.4 __chk_fail F -GLIBC_2.4 __clone F -GLIBC_2.4 __close F -GLIBC_2.4 __cmsg_nxthdr F -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __connect F -GLIBC_2.4 __ctype_b_loc F -GLIBC_2.4 __ctype_get_mb_cur_max F -GLIBC_2.4 __ctype_tolower_loc F -GLIBC_2.4 __ctype_toupper_loc F -GLIBC_2.4 __curbrk D 0x4 -GLIBC_2.4 __cxa_atexit F -GLIBC_2.4 __cxa_finalize F -GLIBC_2.4 __cyg_profile_func_enter F -GLIBC_2.4 __cyg_profile_func_exit F -GLIBC_2.4 __daylight D 0x4 -GLIBC_2.4 __dcgettext F -GLIBC_2.4 __default_morecore F -GLIBC_2.4 __dgettext F -GLIBC_2.4 __divdi3 F -GLIBC_2.4 __dup2 F -GLIBC_2.4 __duplocale F -GLIBC_2.4 __endmntent F -GLIBC_2.4 __environ D 0x4 -GLIBC_2.4 __errno_location F -GLIBC_2.4 __fbufsize F -GLIBC_2.4 __fcntl F -GLIBC_2.4 __ffs F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __finite F -GLIBC_2.4 __finitef F -GLIBC_2.4 __finitel F -GLIBC_2.4 __flbf F -GLIBC_2.4 __fork F -GLIBC_2.4 __fpending F -GLIBC_2.4 __fprintf_chk F -GLIBC_2.4 __fpu_control D 0x4 -GLIBC_2.4 __fpurge F -GLIBC_2.4 __freadable F -GLIBC_2.4 __freading F -GLIBC_2.4 __free_hook D 0x4 -GLIBC_2.4 __freelocale F -GLIBC_2.4 __fsetlocking F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fwritable F -GLIBC_2.4 __fwriting F -GLIBC_2.4 __fxstat F -GLIBC_2.4 __fxstat64 F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdelim F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getmntent_r F -GLIBC_2.4 __getpagesize F -GLIBC_2.4 __getpgid F -GLIBC_2.4 __getpid F -GLIBC_2.4 __gets_chk F -GLIBC_2.4 __gettimeofday F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __gmtime_r F -GLIBC_2.4 __h_errno_location F -GLIBC_2.4 __isalnum_l F -GLIBC_2.4 __isalpha_l F -GLIBC_2.4 __isascii_l F -GLIBC_2.4 __isblank_l F -GLIBC_2.4 __iscntrl_l F -GLIBC_2.4 __isctype F -GLIBC_2.4 __isdigit_l F -GLIBC_2.4 __isgraph_l F -GLIBC_2.4 __isinf F -GLIBC_2.4 __isinff F -GLIBC_2.4 __isinfl F -GLIBC_2.4 __islower_l F -GLIBC_2.4 __isnan F -GLIBC_2.4 __isnanf F -GLIBC_2.4 __isnanl F -GLIBC_2.4 __isprint_l F -GLIBC_2.4 __ispunct_l F -GLIBC_2.4 __isspace_l F -GLIBC_2.4 __isupper_l F -GLIBC_2.4 __iswalnum_l F -GLIBC_2.4 __iswalpha_l F -GLIBC_2.4 __iswblank_l F -GLIBC_2.4 __iswcntrl_l F -GLIBC_2.4 __iswctype F -GLIBC_2.4 __iswctype_l F -GLIBC_2.4 __iswdigit_l F -GLIBC_2.4 __iswgraph_l F -GLIBC_2.4 __iswlower_l F -GLIBC_2.4 __iswprint_l F -GLIBC_2.4 __iswpunct_l F -GLIBC_2.4 __iswspace_l F -GLIBC_2.4 __iswupper_l F -GLIBC_2.4 __iswxdigit_l F -GLIBC_2.4 __isxdigit_l F -GLIBC_2.4 __ivaliduser F -GLIBC_2.4 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.4 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.4 __key_gendes_LOCAL D 0x4 -GLIBC_2.4 __libc_allocate_rtsig F -GLIBC_2.4 __libc_calloc F -GLIBC_2.4 __libc_current_sigrtmax F -GLIBC_2.4 __libc_current_sigrtmin F -GLIBC_2.4 __libc_free F -GLIBC_2.4 __libc_freeres F -GLIBC_2.4 __libc_init_first F -GLIBC_2.4 __libc_mallinfo F -GLIBC_2.4 __libc_malloc F -GLIBC_2.4 __libc_mallopt F -GLIBC_2.4 __libc_memalign F -GLIBC_2.4 __libc_pvalloc F -GLIBC_2.4 __libc_realloc F -GLIBC_2.4 __libc_sa_len F -GLIBC_2.4 __libc_start_main F -GLIBC_2.4 __libc_valloc F -GLIBC_2.4 __lseek F -GLIBC_2.4 __lxstat F -GLIBC_2.4 __lxstat64 F -GLIBC_2.4 __malloc_hook D 0x4 -GLIBC_2.4 __malloc_initialize_hook D 0x4 -GLIBC_2.4 __mbrlen F -GLIBC_2.4 __mbrtowc F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __memalign_hook D 0x4 -GLIBC_2.4 __memcpy_chk F -GLIBC_2.4 __memmove_chk F -GLIBC_2.4 __mempcpy F -GLIBC_2.4 __mempcpy_chk F -GLIBC_2.4 __mempcpy_small F -GLIBC_2.4 __memset_chk F -GLIBC_2.4 __moddi3 F -GLIBC_2.4 __monstartup F -GLIBC_2.4 __morecore D 0x4 -GLIBC_2.4 __nanosleep F -GLIBC_2.4 __newlocale F -GLIBC_2.4 __nl_langinfo_l F -GLIBC_2.4 __nss_configure_lookup F -GLIBC_2.4 __nss_database_lookup F -GLIBC_2.4 __nss_group_lookup F -GLIBC_2.4 __nss_hostname_digits_dots F -GLIBC_2.4 __nss_hosts_lookup F -GLIBC_2.4 __nss_next F -GLIBC_2.4 __nss_passwd_lookup F -GLIBC_2.4 __open F -GLIBC_2.4 __open64 F -GLIBC_2.4 __overflow F -GLIBC_2.4 __pipe F -GLIBC_2.4 __poll F -GLIBC_2.4 __pread64 F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __printf_chk F -GLIBC_2.4 __printf_fp F -GLIBC_2.4 __profile_frequency F -GLIBC_2.4 __progname D 0x4 -GLIBC_2.4 __progname_full D 0x4 -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __pwrite64 F -GLIBC_2.4 __rawmemchr F -GLIBC_2.4 __rcmd_errstr D 0x4 -GLIBC_2.4 __read F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realloc_hook D 0x4 -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __register_atfork F -GLIBC_2.4 __res_init F -GLIBC_2.4 __res_nclose F -GLIBC_2.4 __res_ninit F -GLIBC_2.4 __res_randomid F -GLIBC_2.4 __res_state F -GLIBC_2.4 __rpc_thread_createerr F -GLIBC_2.4 __rpc_thread_svc_fdset F -GLIBC_2.4 __rpc_thread_svc_max_pollfd F -GLIBC_2.4 __rpc_thread_svc_pollfd F -GLIBC_2.4 __sbrk F -GLIBC_2.4 __sched_get_priority_max F -GLIBC_2.4 __sched_get_priority_min F -GLIBC_2.4 __sched_getparam F -GLIBC_2.4 __sched_getscheduler F -GLIBC_2.4 __sched_setscheduler F -GLIBC_2.4 __sched_yield F -GLIBC_2.4 __secure_getenv F -GLIBC_2.4 __select F -GLIBC_2.4 __send F -GLIBC_2.4 __setmntent F -GLIBC_2.4 __setpgid F -GLIBC_2.4 __sigaction F -GLIBC_2.4 __sigaddset F -GLIBC_2.4 __sigdelset F -GLIBC_2.4 __sigismember F -GLIBC_2.4 __signbit F -GLIBC_2.4 __signbitf F -GLIBC_2.4 __sigpause F -GLIBC_2.4 __sigsetjmp F -GLIBC_2.4 __sigsuspend F -GLIBC_2.4 __snprintf_chk F -GLIBC_2.4 __sprintf_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __statfs F -GLIBC_2.4 __stpcpy F -GLIBC_2.4 __stpcpy_chk F -GLIBC_2.4 __stpcpy_small F -GLIBC_2.4 __stpncpy F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __strcasecmp F -GLIBC_2.4 __strcasecmp_l F -GLIBC_2.4 __strcasestr F -GLIBC_2.4 __strcat_chk F -GLIBC_2.4 __strcoll_l F -GLIBC_2.4 __strcpy_chk F -GLIBC_2.4 __strcpy_small F -GLIBC_2.4 __strcspn_c1 F -GLIBC_2.4 __strcspn_c2 F -GLIBC_2.4 __strcspn_c3 F -GLIBC_2.4 __strdup F -GLIBC_2.4 __strerror_r F -GLIBC_2.4 __strfmon_l F -GLIBC_2.4 __strftime_l F -GLIBC_2.4 __strncasecmp_l F -GLIBC_2.4 __strncat_chk F -GLIBC_2.4 __strncpy_chk F -GLIBC_2.4 __strndup F -GLIBC_2.4 __strpbrk_c2 F -GLIBC_2.4 __strpbrk_c3 F -GLIBC_2.4 __strsep_1c F -GLIBC_2.4 __strsep_2c F -GLIBC_2.4 __strsep_3c F -GLIBC_2.4 __strsep_g F -GLIBC_2.4 __strspn_c1 F -GLIBC_2.4 __strspn_c2 F -GLIBC_2.4 __strspn_c3 F -GLIBC_2.4 __strtod_internal F -GLIBC_2.4 __strtod_l F -GLIBC_2.4 __strtof_internal F -GLIBC_2.4 __strtof_l F -GLIBC_2.4 __strtok_r F -GLIBC_2.4 __strtok_r_1c F -GLIBC_2.4 __strtol_internal F -GLIBC_2.4 __strtol_l F -GLIBC_2.4 __strtold_internal F -GLIBC_2.4 __strtold_l F -GLIBC_2.4 __strtoll_internal F -GLIBC_2.4 __strtoll_l F -GLIBC_2.4 __strtoul_internal F -GLIBC_2.4 __strtoul_l F -GLIBC_2.4 __strtoull_internal F -GLIBC_2.4 __strtoull_l F -GLIBC_2.4 __strverscmp F -GLIBC_2.4 __strxfrm_l F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __sysconf F -GLIBC_2.4 __sysctl F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __sysv_signal F -GLIBC_2.4 __timezone D 0x4 -GLIBC_2.4 __toascii_l F -GLIBC_2.4 __tolower_l F -GLIBC_2.4 __toupper_l F -GLIBC_2.4 __towctrans F -GLIBC_2.4 __towctrans_l F -GLIBC_2.4 __towlower_l F -GLIBC_2.4 __towupper_l F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __tzname D 0x8 -GLIBC_2.4 __udivdi3 F -GLIBC_2.4 __uflow F -GLIBC_2.4 __umoddi3 F -GLIBC_2.4 __underflow F -GLIBC_2.4 __uselocale F -GLIBC_2.4 __vfork F -GLIBC_2.4 __vfprintf_chk F -GLIBC_2.4 __vfscanf F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vprintf_chk F -GLIBC_2.4 __vsnprintf F -GLIBC_2.4 __vsnprintf_chk F -GLIBC_2.4 __vsprintf_chk F -GLIBC_2.4 __vsscanf F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wait F -GLIBC_2.4 __waitpid F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscasecmp_l F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscoll_l F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsftime_l F -GLIBC_2.4 __wcsncasecmp_l F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstod_internal F -GLIBC_2.4 __wcstod_l F -GLIBC_2.4 __wcstof_internal F -GLIBC_2.4 __wcstof_l F -GLIBC_2.4 __wcstol_internal F -GLIBC_2.4 __wcstol_l F -GLIBC_2.4 __wcstold_internal F -GLIBC_2.4 __wcstold_l F -GLIBC_2.4 __wcstoll_internal F -GLIBC_2.4 __wcstoll_l F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wcstoul_internal F -GLIBC_2.4 __wcstoul_l F -GLIBC_2.4 __wcstoull_internal F -GLIBC_2.4 __wcstoull_l F -GLIBC_2.4 __wcsxfrm_l F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wctrans_l F -GLIBC_2.4 __wctype_l F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __woverflow F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __write F -GLIBC_2.4 __wuflow F -GLIBC_2.4 __wunderflow F -GLIBC_2.4 __xmknod F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 __xpg_basename F -GLIBC_2.4 __xpg_sigpause F -GLIBC_2.4 __xpg_strerror_r F -GLIBC_2.4 __xstat F -GLIBC_2.4 __xstat64 F -GLIBC_2.4 _authenticate F -GLIBC_2.4 _dl_mcount_wrapper F -GLIBC_2.4 _dl_mcount_wrapper_check F -GLIBC_2.4 _environ D 0x4 -GLIBC_2.4 _exit F -GLIBC_2.4 _flushlbf F -GLIBC_2.4 _libc_intl_domainname D 0x5 -GLIBC_2.4 _longjmp F -GLIBC_2.4 _mcleanup F -GLIBC_2.4 _mcount F -GLIBC_2.4 _nl_default_dirname D 0x12 -GLIBC_2.4 _nl_domain_bindings D 0x4 -GLIBC_2.4 _nl_msg_cat_cntr D 0x4 -GLIBC_2.4 _null_auth D 0xc -GLIBC_2.4 _obstack_allocated_p F -GLIBC_2.4 _obstack_begin F -GLIBC_2.4 _obstack_begin_1 F -GLIBC_2.4 _obstack_free F -GLIBC_2.4 _obstack_memory_used F -GLIBC_2.4 _obstack_newchunk F -GLIBC_2.4 _res D 0x1fe -GLIBC_2.4 _res_hconf D 0x30 -GLIBC_2.4 _rpc_dtablesize F -GLIBC_2.4 _seterr_reply F -GLIBC_2.4 _setjmp F -GLIBC_2.4 _sys_errlist D 0x210 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 _sys_siglist D 0x104 -GLIBC_2.4 _tolower F -GLIBC_2.4 _toupper F -GLIBC_2.4 a64l F -GLIBC_2.4 abort F -GLIBC_2.4 abs F -GLIBC_2.4 accept F -GLIBC_2.4 access F -GLIBC_2.4 acct F -GLIBC_2.4 addmntent F -GLIBC_2.4 addseverity F -GLIBC_2.4 adjtime F -GLIBC_2.4 adjtimex F -GLIBC_2.4 advance F -GLIBC_2.4 alarm F -GLIBC_2.4 alphasort F -GLIBC_2.4 alphasort64 F -GLIBC_2.4 argp_err_exit_status D 0x4 -GLIBC_2.4 argp_error F -GLIBC_2.4 argp_failure F -GLIBC_2.4 argp_help F -GLIBC_2.4 argp_parse F -GLIBC_2.4 argp_program_bug_address D 0x4 -GLIBC_2.4 argp_program_version D 0x4 -GLIBC_2.4 argp_program_version_hook D 0x4 -GLIBC_2.4 argp_state_help F -GLIBC_2.4 argp_usage F -GLIBC_2.4 argz_add F -GLIBC_2.4 argz_add_sep F -GLIBC_2.4 argz_append F -GLIBC_2.4 argz_count F -GLIBC_2.4 argz_create F -GLIBC_2.4 argz_create_sep F -GLIBC_2.4 argz_delete F -GLIBC_2.4 argz_extract F -GLIBC_2.4 argz_insert F -GLIBC_2.4 argz_next F -GLIBC_2.4 argz_replace F -GLIBC_2.4 argz_stringify F -GLIBC_2.4 asctime F -GLIBC_2.4 asctime_r F -GLIBC_2.4 asprintf F -GLIBC_2.4 atof F -GLIBC_2.4 atoi F -GLIBC_2.4 atol F -GLIBC_2.4 atoll F -GLIBC_2.4 authdes_create F -GLIBC_2.4 authdes_getucred F -GLIBC_2.4 authdes_pk_create F -GLIBC_2.4 authnone_create F -GLIBC_2.4 authunix_create F -GLIBC_2.4 authunix_create_default F -GLIBC_2.4 backtrace F -GLIBC_2.4 backtrace_symbols F -GLIBC_2.4 backtrace_symbols_fd F -GLIBC_2.4 basename F -GLIBC_2.4 bcmp F -GLIBC_2.4 bcopy F -GLIBC_2.4 bdflush F -GLIBC_2.4 bind F -GLIBC_2.4 bind_textdomain_codeset F -GLIBC_2.4 bindresvport F -GLIBC_2.4 bindtextdomain F -GLIBC_2.4 brk F -GLIBC_2.4 bsd_signal F -GLIBC_2.4 bsearch F -GLIBC_2.4 btowc F -GLIBC_2.4 bzero F -GLIBC_2.4 cacheflush F -GLIBC_2.4 calloc F -GLIBC_2.4 callrpc F -GLIBC_2.4 canonicalize_file_name F -GLIBC_2.4 capget F -GLIBC_2.4 capset F -GLIBC_2.4 catclose F -GLIBC_2.4 catgets F -GLIBC_2.4 catopen F -GLIBC_2.4 cbc_crypt F -GLIBC_2.4 cfgetispeed F -GLIBC_2.4 cfgetospeed F -GLIBC_2.4 cfmakeraw F -GLIBC_2.4 cfree F -GLIBC_2.4 cfsetispeed F -GLIBC_2.4 cfsetospeed F -GLIBC_2.4 cfsetspeed F -GLIBC_2.4 chdir F -GLIBC_2.4 chflags F -GLIBC_2.4 chmod F -GLIBC_2.4 chown F -GLIBC_2.4 chroot F -GLIBC_2.4 clearenv F -GLIBC_2.4 clearerr F -GLIBC_2.4 clearerr_unlocked F -GLIBC_2.4 clnt_broadcast F -GLIBC_2.4 clnt_create F -GLIBC_2.4 clnt_pcreateerror F -GLIBC_2.4 clnt_perrno F -GLIBC_2.4 clnt_perror F -GLIBC_2.4 clnt_spcreateerror F -GLIBC_2.4 clnt_sperrno F -GLIBC_2.4 clnt_sperror F -GLIBC_2.4 clntraw_create F -GLIBC_2.4 clnttcp_create F -GLIBC_2.4 clntudp_bufcreate F -GLIBC_2.4 clntudp_create F -GLIBC_2.4 clntunix_create F -GLIBC_2.4 clock F -GLIBC_2.4 clone F -GLIBC_2.4 close F -GLIBC_2.4 closedir F -GLIBC_2.4 closelog F -GLIBC_2.4 confstr F -GLIBC_2.4 connect F -GLIBC_2.4 copysign F -GLIBC_2.4 copysignf F -GLIBC_2.4 copysignl F -GLIBC_2.4 creat F -GLIBC_2.4 creat64 F -GLIBC_2.4 create_module F -GLIBC_2.4 ctermid F -GLIBC_2.4 ctime F -GLIBC_2.4 ctime_r F -GLIBC_2.4 cuserid F -GLIBC_2.4 daemon F -GLIBC_2.4 daylight D 0x4 -GLIBC_2.4 dcgettext F -GLIBC_2.4 dcngettext F -GLIBC_2.4 delete_module F -GLIBC_2.4 des_setparity F -GLIBC_2.4 dgettext F -GLIBC_2.4 difftime F -GLIBC_2.4 dirfd F -GLIBC_2.4 dirname F -GLIBC_2.4 div F -GLIBC_2.4 dl_iterate_phdr F -GLIBC_2.4 dngettext F -GLIBC_2.4 dprintf F -GLIBC_2.4 drand48 F -GLIBC_2.4 drand48_r F -GLIBC_2.4 dup F -GLIBC_2.4 dup2 F -GLIBC_2.4 duplocale F -GLIBC_2.4 dysize F -GLIBC_2.4 eaccess F -GLIBC_2.4 ecb_crypt F -GLIBC_2.4 ecvt F -GLIBC_2.4 ecvt_r F -GLIBC_2.4 endaliasent F -GLIBC_2.4 endfsent F -GLIBC_2.4 endgrent F -GLIBC_2.4 endhostent F -GLIBC_2.4 endmntent F -GLIBC_2.4 endnetent F -GLIBC_2.4 endnetgrent F -GLIBC_2.4 endprotoent F -GLIBC_2.4 endpwent F -GLIBC_2.4 endrpcent F -GLIBC_2.4 endservent F -GLIBC_2.4 endspent F -GLIBC_2.4 endttyent F -GLIBC_2.4 endusershell F -GLIBC_2.4 endutent F -GLIBC_2.4 endutxent F -GLIBC_2.4 environ D 0x4 -GLIBC_2.4 envz_add F -GLIBC_2.4 envz_entry F -GLIBC_2.4 envz_get F -GLIBC_2.4 envz_merge F -GLIBC_2.4 envz_remove F -GLIBC_2.4 envz_strip F -GLIBC_2.4 epoll_create F -GLIBC_2.4 epoll_ctl F -GLIBC_2.4 epoll_wait F -GLIBC_2.4 erand48 F -GLIBC_2.4 erand48_r F -GLIBC_2.4 err F -GLIBC_2.4 error F -GLIBC_2.4 error_at_line F -GLIBC_2.4 error_message_count D 0x4 -GLIBC_2.4 error_one_per_line D 0x4 -GLIBC_2.4 error_print_progname D 0x4 -GLIBC_2.4 errx F -GLIBC_2.4 ether_aton F -GLIBC_2.4 ether_aton_r F -GLIBC_2.4 ether_hostton F -GLIBC_2.4 ether_line F -GLIBC_2.4 ether_ntoa F -GLIBC_2.4 ether_ntoa_r F -GLIBC_2.4 ether_ntohost F -GLIBC_2.4 euidaccess F -GLIBC_2.4 execl F -GLIBC_2.4 execle F -GLIBC_2.4 execlp F -GLIBC_2.4 execv F -GLIBC_2.4 execve F -GLIBC_2.4 execvp F -GLIBC_2.4 exit F -GLIBC_2.4 faccessat F -GLIBC_2.4 fattach F -GLIBC_2.4 fchdir F -GLIBC_2.4 fchflags F -GLIBC_2.4 fchmod F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchown F -GLIBC_2.4 fchownat F -GLIBC_2.4 fclose F -GLIBC_2.4 fcloseall F -GLIBC_2.4 fcntl F -GLIBC_2.4 fcvt F -GLIBC_2.4 fcvt_r F -GLIBC_2.4 fdatasync F -GLIBC_2.4 fdetach F -GLIBC_2.4 fdopen F -GLIBC_2.4 fdopendir F -GLIBC_2.4 feof F -GLIBC_2.4 feof_unlocked F -GLIBC_2.4 ferror F -GLIBC_2.4 ferror_unlocked F -GLIBC_2.4 fexecve F -GLIBC_2.4 fflush F -GLIBC_2.4 fflush_unlocked F -GLIBC_2.4 ffs F -GLIBC_2.4 ffsl F -GLIBC_2.4 ffsll F -GLIBC_2.4 fgetc F -GLIBC_2.4 fgetc_unlocked F -GLIBC_2.4 fgetgrent F -GLIBC_2.4 fgetgrent_r F -GLIBC_2.4 fgetpos F -GLIBC_2.4 fgetpos64 F -GLIBC_2.4 fgetpwent F -GLIBC_2.4 fgetpwent_r F -GLIBC_2.4 fgets F -GLIBC_2.4 fgets_unlocked F -GLIBC_2.4 fgetspent F -GLIBC_2.4 fgetspent_r F -GLIBC_2.4 fgetwc F -GLIBC_2.4 fgetwc_unlocked F -GLIBC_2.4 fgetws F -GLIBC_2.4 fgetws_unlocked F -GLIBC_2.4 fgetxattr F -GLIBC_2.4 fileno F -GLIBC_2.4 fileno_unlocked F -GLIBC_2.4 finite F -GLIBC_2.4 finitef F -GLIBC_2.4 finitel F -GLIBC_2.4 flistxattr F -GLIBC_2.4 flock F -GLIBC_2.4 flockfile F -GLIBC_2.4 fmemopen F -GLIBC_2.4 fmtmsg F -GLIBC_2.4 fnmatch F -GLIBC_2.4 fopen F -GLIBC_2.4 fopen64 F -GLIBC_2.4 fopencookie F -GLIBC_2.4 fork F -GLIBC_2.4 fpathconf F -GLIBC_2.4 fprintf F -GLIBC_2.4 fputc F -GLIBC_2.4 fputc_unlocked F -GLIBC_2.4 fputs F -GLIBC_2.4 fputs_unlocked F -GLIBC_2.4 fputwc F -GLIBC_2.4 fputwc_unlocked F -GLIBC_2.4 fputws F -GLIBC_2.4 fputws_unlocked F -GLIBC_2.4 fread F -GLIBC_2.4 fread_unlocked F -GLIBC_2.4 free F -GLIBC_2.4 freeaddrinfo F -GLIBC_2.4 freeifaddrs F -GLIBC_2.4 freelocale F -GLIBC_2.4 fremovexattr F -GLIBC_2.4 freopen F -GLIBC_2.4 freopen64 F -GLIBC_2.4 frexp F -GLIBC_2.4 frexpf F -GLIBC_2.4 frexpl F -GLIBC_2.4 fscanf F -GLIBC_2.4 fseek F -GLIBC_2.4 fseeko F -GLIBC_2.4 fseeko64 F -GLIBC_2.4 fsetpos F -GLIBC_2.4 fsetpos64 F -GLIBC_2.4 fsetxattr F -GLIBC_2.4 fstatfs F -GLIBC_2.4 fstatfs64 F -GLIBC_2.4 fstatvfs F -GLIBC_2.4 fstatvfs64 F -GLIBC_2.4 fsync F -GLIBC_2.4 ftell F -GLIBC_2.4 ftello F -GLIBC_2.4 ftello64 F -GLIBC_2.4 ftime F -GLIBC_2.4 ftok F -GLIBC_2.4 ftruncate F -GLIBC_2.4 ftruncate64 F -GLIBC_2.4 ftrylockfile F -GLIBC_2.4 fts_children F -GLIBC_2.4 fts_close F -GLIBC_2.4 fts_open F -GLIBC_2.4 fts_read F -GLIBC_2.4 fts_set F -GLIBC_2.4 ftw F -GLIBC_2.4 ftw64 F -GLIBC_2.4 funlockfile F -GLIBC_2.4 futimes F -GLIBC_2.4 futimesat F -GLIBC_2.4 fwide F -GLIBC_2.4 fwprintf F -GLIBC_2.4 fwrite F -GLIBC_2.4 fwrite_unlocked F -GLIBC_2.4 fwscanf F -GLIBC_2.4 gai_strerror F -GLIBC_2.4 gcvt F -GLIBC_2.4 get_avphys_pages F -GLIBC_2.4 get_current_dir_name F -GLIBC_2.4 get_kernel_syms F -GLIBC_2.4 get_myaddress F -GLIBC_2.4 get_nprocs F -GLIBC_2.4 get_nprocs_conf F -GLIBC_2.4 get_phys_pages F -GLIBC_2.4 getaddrinfo F -GLIBC_2.4 getaliasbyname F -GLIBC_2.4 getaliasbyname_r F -GLIBC_2.4 getaliasent F -GLIBC_2.4 getaliasent_r F -GLIBC_2.4 getc F -GLIBC_2.4 getc_unlocked F -GLIBC_2.4 getchar F -GLIBC_2.4 getchar_unlocked F -GLIBC_2.4 getcontext F -GLIBC_2.4 getcwd F -GLIBC_2.4 getdate F -GLIBC_2.4 getdate_err D 0x4 -GLIBC_2.4 getdate_r F -GLIBC_2.4 getdelim F -GLIBC_2.4 getdirentries F -GLIBC_2.4 getdirentries64 F -GLIBC_2.4 getdomainname F -GLIBC_2.4 getdtablesize F -GLIBC_2.4 getegid F -GLIBC_2.4 getenv F -GLIBC_2.4 geteuid F -GLIBC_2.4 getfsent F -GLIBC_2.4 getfsfile F -GLIBC_2.4 getfsspec F -GLIBC_2.4 getgid F -GLIBC_2.4 getgrent F -GLIBC_2.4 getgrent_r F -GLIBC_2.4 getgrgid F -GLIBC_2.4 getgrgid_r F -GLIBC_2.4 getgrnam F -GLIBC_2.4 getgrnam_r F -GLIBC_2.4 getgrouplist F -GLIBC_2.4 getgroups F -GLIBC_2.4 gethostbyaddr F -GLIBC_2.4 gethostbyaddr_r F -GLIBC_2.4 gethostbyname F -GLIBC_2.4 gethostbyname2 F -GLIBC_2.4 gethostbyname2_r F -GLIBC_2.4 gethostbyname_r F -GLIBC_2.4 gethostent F -GLIBC_2.4 gethostent_r F -GLIBC_2.4 gethostid F -GLIBC_2.4 gethostname F -GLIBC_2.4 getifaddrs F -GLIBC_2.4 getipv4sourcefilter F -GLIBC_2.4 getitimer F -GLIBC_2.4 getline F -GLIBC_2.4 getloadavg F -GLIBC_2.4 getlogin F -GLIBC_2.4 getlogin_r F -GLIBC_2.4 getmntent F -GLIBC_2.4 getmntent_r F -GLIBC_2.4 getmsg F -GLIBC_2.4 getnameinfo F -GLIBC_2.4 getnetbyaddr F -GLIBC_2.4 getnetbyaddr_r F -GLIBC_2.4 getnetbyname F -GLIBC_2.4 getnetbyname_r F -GLIBC_2.4 getnetent F -GLIBC_2.4 getnetent_r F -GLIBC_2.4 getnetgrent F -GLIBC_2.4 getnetgrent_r F -GLIBC_2.4 getnetname F -GLIBC_2.4 getopt F -GLIBC_2.4 getopt_long F -GLIBC_2.4 getopt_long_only F -GLIBC_2.4 getpagesize F -GLIBC_2.4 getpass F -GLIBC_2.4 getpeername F -GLIBC_2.4 getpgid F -GLIBC_2.4 getpgrp F -GLIBC_2.4 getpid F -GLIBC_2.4 getpmsg F -GLIBC_2.4 getppid F -GLIBC_2.4 getpriority F -GLIBC_2.4 getprotobyname F -GLIBC_2.4 getprotobyname_r F -GLIBC_2.4 getprotobynumber F -GLIBC_2.4 getprotobynumber_r F -GLIBC_2.4 getprotoent F -GLIBC_2.4 getprotoent_r F -GLIBC_2.4 getpt F -GLIBC_2.4 getpublickey F -GLIBC_2.4 getpw F -GLIBC_2.4 getpwent F -GLIBC_2.4 getpwent_r F -GLIBC_2.4 getpwnam F -GLIBC_2.4 getpwnam_r F -GLIBC_2.4 getpwuid F -GLIBC_2.4 getpwuid_r F -GLIBC_2.4 getresgid F -GLIBC_2.4 getresuid F -GLIBC_2.4 getrlimit F -GLIBC_2.4 getrlimit64 F -GLIBC_2.4 getrpcbyname F -GLIBC_2.4 getrpcbyname_r F -GLIBC_2.4 getrpcbynumber F -GLIBC_2.4 getrpcbynumber_r F -GLIBC_2.4 getrpcent F -GLIBC_2.4 getrpcent_r F -GLIBC_2.4 getrpcport F -GLIBC_2.4 getrusage F -GLIBC_2.4 gets F -GLIBC_2.4 getsecretkey F -GLIBC_2.4 getservbyname F -GLIBC_2.4 getservbyname_r F -GLIBC_2.4 getservbyport F -GLIBC_2.4 getservbyport_r F -GLIBC_2.4 getservent F -GLIBC_2.4 getservent_r F -GLIBC_2.4 getsid F -GLIBC_2.4 getsockname F -GLIBC_2.4 getsockopt F -GLIBC_2.4 getsourcefilter F -GLIBC_2.4 getspent F -GLIBC_2.4 getspent_r F -GLIBC_2.4 getspnam F -GLIBC_2.4 getspnam_r F -GLIBC_2.4 getsubopt F -GLIBC_2.4 gettext F -GLIBC_2.4 gettimeofday F -GLIBC_2.4 getttyent F -GLIBC_2.4 getttynam F -GLIBC_2.4 getuid F -GLIBC_2.4 getusershell F -GLIBC_2.4 getutent F -GLIBC_2.4 getutent_r F -GLIBC_2.4 getutid F -GLIBC_2.4 getutid_r F -GLIBC_2.4 getutline F -GLIBC_2.4 getutline_r F -GLIBC_2.4 getutmp F -GLIBC_2.4 getutmpx F -GLIBC_2.4 getutxent F -GLIBC_2.4 getutxid F -GLIBC_2.4 getutxline F -GLIBC_2.4 getw F -GLIBC_2.4 getwc F -GLIBC_2.4 getwc_unlocked F -GLIBC_2.4 getwchar F -GLIBC_2.4 getwchar_unlocked F -GLIBC_2.4 getwd F -GLIBC_2.4 getxattr F -GLIBC_2.4 glob F -GLIBC_2.4 glob64 F -GLIBC_2.4 glob_pattern_p F -GLIBC_2.4 globfree F -GLIBC_2.4 globfree64 F -GLIBC_2.4 gmtime F -GLIBC_2.4 gmtime_r F -GLIBC_2.4 gnu_dev_major F -GLIBC_2.4 gnu_dev_makedev F -GLIBC_2.4 gnu_dev_minor F -GLIBC_2.4 gnu_get_libc_release F -GLIBC_2.4 gnu_get_libc_version F -GLIBC_2.4 grantpt F -GLIBC_2.4 group_member F -GLIBC_2.4 gsignal F -GLIBC_2.4 gtty F -GLIBC_2.4 h_errlist D 0x14 -GLIBC_2.4 h_nerr D 0x4 -GLIBC_2.4 hasmntopt F -GLIBC_2.4 hcreate F -GLIBC_2.4 hcreate_r F -GLIBC_2.4 hdestroy F -GLIBC_2.4 hdestroy_r F -GLIBC_2.4 herror F -GLIBC_2.4 host2netname F -GLIBC_2.4 hsearch F -GLIBC_2.4 hsearch_r F -GLIBC_2.4 hstrerror F -GLIBC_2.4 htonl F -GLIBC_2.4 htons F -GLIBC_2.4 iconv F -GLIBC_2.4 iconv_close F -GLIBC_2.4 iconv_open F -GLIBC_2.4 if_freenameindex F -GLIBC_2.4 if_indextoname F -GLIBC_2.4 if_nameindex F -GLIBC_2.4 if_nametoindex F -GLIBC_2.4 imaxabs F -GLIBC_2.4 imaxdiv F -GLIBC_2.4 in6addr_any D 0x10 -GLIBC_2.4 in6addr_loopback D 0x10 -GLIBC_2.4 index F -GLIBC_2.4 inet6_option_alloc F -GLIBC_2.4 inet6_option_append F -GLIBC_2.4 inet6_option_find F -GLIBC_2.4 inet6_option_init F -GLIBC_2.4 inet6_option_next F -GLIBC_2.4 inet6_option_space F -GLIBC_2.4 inet_addr F -GLIBC_2.4 inet_aton F -GLIBC_2.4 inet_lnaof F -GLIBC_2.4 inet_makeaddr F -GLIBC_2.4 inet_netof F -GLIBC_2.4 inet_network F -GLIBC_2.4 inet_nsap_addr F -GLIBC_2.4 inet_nsap_ntoa F -GLIBC_2.4 inet_ntoa F -GLIBC_2.4 inet_ntop F -GLIBC_2.4 inet_pton F -GLIBC_2.4 init_module F -GLIBC_2.4 initgroups F -GLIBC_2.4 initstate F -GLIBC_2.4 initstate_r F -GLIBC_2.4 innetgr F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 insque F -GLIBC_2.4 ioctl F -GLIBC_2.4 iruserok F -GLIBC_2.4 iruserok_af F -GLIBC_2.4 isalnum F -GLIBC_2.4 isalnum_l F -GLIBC_2.4 isalpha F -GLIBC_2.4 isalpha_l F -GLIBC_2.4 isascii F -GLIBC_2.4 isastream F -GLIBC_2.4 isatty F -GLIBC_2.4 isblank F -GLIBC_2.4 isblank_l F -GLIBC_2.4 iscntrl F -GLIBC_2.4 iscntrl_l F -GLIBC_2.4 isctype F -GLIBC_2.4 isdigit F -GLIBC_2.4 isdigit_l F -GLIBC_2.4 isfdtype F -GLIBC_2.4 isgraph F -GLIBC_2.4 isgraph_l F -GLIBC_2.4 isinf F -GLIBC_2.4 isinff F -GLIBC_2.4 isinfl F -GLIBC_2.4 islower F -GLIBC_2.4 islower_l F -GLIBC_2.4 isnan F -GLIBC_2.4 isnanf F -GLIBC_2.4 isnanl F -GLIBC_2.4 isprint F -GLIBC_2.4 isprint_l F -GLIBC_2.4 ispunct F -GLIBC_2.4 ispunct_l F -GLIBC_2.4 isspace F -GLIBC_2.4 isspace_l F -GLIBC_2.4 isupper F -GLIBC_2.4 isupper_l F -GLIBC_2.4 iswalnum F -GLIBC_2.4 iswalnum_l F -GLIBC_2.4 iswalpha F -GLIBC_2.4 iswalpha_l F -GLIBC_2.4 iswblank F -GLIBC_2.4 iswblank_l F -GLIBC_2.4 iswcntrl F -GLIBC_2.4 iswcntrl_l F -GLIBC_2.4 iswctype F -GLIBC_2.4 iswctype_l F -GLIBC_2.4 iswdigit F -GLIBC_2.4 iswdigit_l F -GLIBC_2.4 iswgraph F -GLIBC_2.4 iswgraph_l F -GLIBC_2.4 iswlower F -GLIBC_2.4 iswlower_l F -GLIBC_2.4 iswprint F -GLIBC_2.4 iswprint_l F -GLIBC_2.4 iswpunct F -GLIBC_2.4 iswpunct_l F -GLIBC_2.4 iswspace F -GLIBC_2.4 iswspace_l F -GLIBC_2.4 iswupper F -GLIBC_2.4 iswupper_l F -GLIBC_2.4 iswxdigit F -GLIBC_2.4 iswxdigit_l F -GLIBC_2.4 isxdigit F -GLIBC_2.4 isxdigit_l F -GLIBC_2.4 jrand48 F -GLIBC_2.4 jrand48_r F -GLIBC_2.4 key_decryptsession F -GLIBC_2.4 key_decryptsession_pk F -GLIBC_2.4 key_encryptsession F -GLIBC_2.4 key_encryptsession_pk F -GLIBC_2.4 key_gendes F -GLIBC_2.4 key_get_conv F -GLIBC_2.4 key_secretkey_is_set F -GLIBC_2.4 key_setnet F -GLIBC_2.4 key_setsecret F -GLIBC_2.4 kill F -GLIBC_2.4 killpg F -GLIBC_2.4 klogctl F -GLIBC_2.4 l64a F -GLIBC_2.4 labs F -GLIBC_2.4 lchmod F -GLIBC_2.4 lchown F -GLIBC_2.4 lckpwdf F -GLIBC_2.4 lcong48 F -GLIBC_2.4 lcong48_r F -GLIBC_2.4 ldexp F -GLIBC_2.4 ldexpf F -GLIBC_2.4 ldexpl F -GLIBC_2.4 ldiv F -GLIBC_2.4 lfind F -GLIBC_2.4 lgetxattr F -GLIBC_2.4 link F -GLIBC_2.4 linkat F -GLIBC_2.4 listen F -GLIBC_2.4 listxattr F -GLIBC_2.4 llabs F -GLIBC_2.4 lldiv F -GLIBC_2.4 llistxattr F -GLIBC_2.4 llseek F -GLIBC_2.4 loc1 D 0x4 -GLIBC_2.4 loc2 D 0x4 -GLIBC_2.4 localeconv F -GLIBC_2.4 localtime F -GLIBC_2.4 localtime_r F -GLIBC_2.4 lockf F -GLIBC_2.4 lockf64 F -GLIBC_2.4 locs D 0x4 -GLIBC_2.4 longjmp F -GLIBC_2.4 lrand48 F -GLIBC_2.4 lrand48_r F -GLIBC_2.4 lremovexattr F -GLIBC_2.4 lsearch F -GLIBC_2.4 lseek F -GLIBC_2.4 lseek64 F -GLIBC_2.4 lsetxattr F -GLIBC_2.4 lutimes F -GLIBC_2.4 madvise F -GLIBC_2.4 makecontext F -GLIBC_2.4 mallinfo F -GLIBC_2.4 malloc F -GLIBC_2.4 malloc_get_state F -GLIBC_2.4 malloc_set_state F -GLIBC_2.4 malloc_stats F -GLIBC_2.4 malloc_trim F -GLIBC_2.4 malloc_usable_size F -GLIBC_2.4 mallopt F -GLIBC_2.4 mallwatch D 0x4 -GLIBC_2.4 mblen F -GLIBC_2.4 mbrlen F -GLIBC_2.4 mbrtowc F -GLIBC_2.4 mbsinit F -GLIBC_2.4 mbsnrtowcs F -GLIBC_2.4 mbsrtowcs F -GLIBC_2.4 mbstowcs F -GLIBC_2.4 mbtowc F -GLIBC_2.4 mcheck F -GLIBC_2.4 mcheck_check_all F -GLIBC_2.4 mcheck_pedantic F -GLIBC_2.4 mcount F -GLIBC_2.4 memalign F -GLIBC_2.4 memccpy F -GLIBC_2.4 memchr F -GLIBC_2.4 memcmp F -GLIBC_2.4 memcpy F -GLIBC_2.4 memfrob F -GLIBC_2.4 memmem F -GLIBC_2.4 memmove F -GLIBC_2.4 mempcpy F -GLIBC_2.4 memrchr F -GLIBC_2.4 memset F -GLIBC_2.4 mincore F -GLIBC_2.4 mkdir F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkdtemp F -GLIBC_2.4 mkfifo F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 mkstemp F -GLIBC_2.4 mkstemp64 F -GLIBC_2.4 mktemp F -GLIBC_2.4 mktime F -GLIBC_2.4 mlock F -GLIBC_2.4 mlockall F -GLIBC_2.4 mmap F -GLIBC_2.4 mmap64 F -GLIBC_2.4 modf F -GLIBC_2.4 modff F -GLIBC_2.4 modfl F -GLIBC_2.4 moncontrol F -GLIBC_2.4 monstartup F -GLIBC_2.4 mount F -GLIBC_2.4 mprobe F -GLIBC_2.4 mprotect F -GLIBC_2.4 mrand48 F -GLIBC_2.4 mrand48_r F -GLIBC_2.4 mremap F -GLIBC_2.4 msgctl F -GLIBC_2.4 msgget F -GLIBC_2.4 msgrcv F -GLIBC_2.4 msgsnd F -GLIBC_2.4 msync F -GLIBC_2.4 mtrace F -GLIBC_2.4 munlock F -GLIBC_2.4 munlockall F -GLIBC_2.4 munmap F -GLIBC_2.4 muntrace F -GLIBC_2.4 nanosleep F -GLIBC_2.4 netname2host F -GLIBC_2.4 netname2user F -GLIBC_2.4 newlocale F -GLIBC_2.4 nfsservctl F -GLIBC_2.4 nftw F -GLIBC_2.4 nftw64 F -GLIBC_2.4 ngettext F -GLIBC_2.4 nice F -GLIBC_2.4 nl_langinfo F -GLIBC_2.4 nl_langinfo_l F -GLIBC_2.4 nrand48 F -GLIBC_2.4 nrand48_r F -GLIBC_2.4 ntohl F -GLIBC_2.4 ntohs F -GLIBC_2.4 ntp_adjtime F -GLIBC_2.4 ntp_gettime F -GLIBC_2.4 obstack_alloc_failed_handler D 0x4 -GLIBC_2.4 obstack_exit_failure D 0x4 -GLIBC_2.4 obstack_free F -GLIBC_2.4 obstack_printf F -GLIBC_2.4 obstack_vprintf F -GLIBC_2.4 on_exit F -GLIBC_2.4 open F -GLIBC_2.4 open64 F -GLIBC_2.4 open_memstream F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 opendir F -GLIBC_2.4 openlog F -GLIBC_2.4 optarg D 0x4 -GLIBC_2.4 opterr D 0x4 -GLIBC_2.4 optind D 0x4 -GLIBC_2.4 optopt D 0x4 -GLIBC_2.4 parse_printf_format F -GLIBC_2.4 passwd2des F -GLIBC_2.4 pathconf F -GLIBC_2.4 pause F -GLIBC_2.4 pclose F -GLIBC_2.4 perror F -GLIBC_2.4 personality F -GLIBC_2.4 pipe F -GLIBC_2.4 pivot_root F -GLIBC_2.4 pmap_getmaps F -GLIBC_2.4 pmap_getport F -GLIBC_2.4 pmap_rmtcall F -GLIBC_2.4 pmap_set F -GLIBC_2.4 pmap_unset F -GLIBC_2.4 poll F -GLIBC_2.4 popen F -GLIBC_2.4 posix_fadvise F -GLIBC_2.4 posix_fadvise64 F -GLIBC_2.4 posix_fallocate F -GLIBC_2.4 posix_fallocate64 F -GLIBC_2.4 posix_madvise F -GLIBC_2.4 posix_memalign F -GLIBC_2.4 posix_openpt F -GLIBC_2.4 posix_spawn F -GLIBC_2.4 posix_spawn_file_actions_addclose F -GLIBC_2.4 posix_spawn_file_actions_adddup2 F -GLIBC_2.4 posix_spawn_file_actions_addopen F -GLIBC_2.4 posix_spawn_file_actions_destroy F -GLIBC_2.4 posix_spawn_file_actions_init F -GLIBC_2.4 posix_spawnattr_destroy F -GLIBC_2.4 posix_spawnattr_getflags F -GLIBC_2.4 posix_spawnattr_getpgroup F -GLIBC_2.4 posix_spawnattr_getschedparam F -GLIBC_2.4 posix_spawnattr_getschedpolicy F -GLIBC_2.4 posix_spawnattr_getsigdefault F -GLIBC_2.4 posix_spawnattr_getsigmask F -GLIBC_2.4 posix_spawnattr_init F -GLIBC_2.4 posix_spawnattr_setflags F -GLIBC_2.4 posix_spawnattr_setpgroup F -GLIBC_2.4 posix_spawnattr_setschedparam F -GLIBC_2.4 posix_spawnattr_setschedpolicy F -GLIBC_2.4 posix_spawnattr_setsigdefault F -GLIBC_2.4 posix_spawnattr_setsigmask F -GLIBC_2.4 posix_spawnp F -GLIBC_2.4 ppoll F -GLIBC_2.4 prctl F -GLIBC_2.4 pread F -GLIBC_2.4 pread64 F -GLIBC_2.4 printf F -GLIBC_2.4 printf_size F -GLIBC_2.4 printf_size_info F -GLIBC_2.4 profil F -GLIBC_2.4 program_invocation_name D 0x4 -GLIBC_2.4 program_invocation_short_name D 0x4 -GLIBC_2.4 pselect F -GLIBC_2.4 psignal F -GLIBC_2.4 pthread_attr_destroy F -GLIBC_2.4 pthread_attr_getdetachstate F -GLIBC_2.4 pthread_attr_getinheritsched F -GLIBC_2.4 pthread_attr_getschedparam F -GLIBC_2.4 pthread_attr_getschedpolicy F -GLIBC_2.4 pthread_attr_getscope F -GLIBC_2.4 pthread_attr_init F -GLIBC_2.4 pthread_attr_setdetachstate F -GLIBC_2.4 pthread_attr_setinheritsched F -GLIBC_2.4 pthread_attr_setschedparam F -GLIBC_2.4 pthread_attr_setschedpolicy F -GLIBC_2.4 pthread_attr_setscope F -GLIBC_2.4 pthread_cond_broadcast F -GLIBC_2.4 pthread_cond_destroy F -GLIBC_2.4 pthread_cond_init F -GLIBC_2.4 pthread_cond_signal F -GLIBC_2.4 pthread_cond_timedwait F -GLIBC_2.4 pthread_cond_wait F -GLIBC_2.4 pthread_condattr_destroy F -GLIBC_2.4 pthread_condattr_init F -GLIBC_2.4 pthread_equal F -GLIBC_2.4 pthread_exit F -GLIBC_2.4 pthread_getschedparam F -GLIBC_2.4 pthread_mutex_destroy F -GLIBC_2.4 pthread_mutex_init F -GLIBC_2.4 pthread_mutex_lock F -GLIBC_2.4 pthread_mutex_unlock F -GLIBC_2.4 pthread_self F -GLIBC_2.4 pthread_setcancelstate F -GLIBC_2.4 pthread_setcanceltype F -GLIBC_2.4 pthread_setschedparam F -GLIBC_2.4 ptrace F -GLIBC_2.4 ptsname F -GLIBC_2.4 ptsname_r F -GLIBC_2.4 putc F -GLIBC_2.4 putc_unlocked F -GLIBC_2.4 putchar F -GLIBC_2.4 putchar_unlocked F -GLIBC_2.4 putenv F -GLIBC_2.4 putgrent F -GLIBC_2.4 putmsg F -GLIBC_2.4 putpmsg F -GLIBC_2.4 putpwent F -GLIBC_2.4 puts F -GLIBC_2.4 putspent F -GLIBC_2.4 pututline F -GLIBC_2.4 pututxline F -GLIBC_2.4 putw F -GLIBC_2.4 putwc F -GLIBC_2.4 putwc_unlocked F -GLIBC_2.4 putwchar F -GLIBC_2.4 putwchar_unlocked F -GLIBC_2.4 pvalloc F -GLIBC_2.4 pwrite F -GLIBC_2.4 pwrite64 F -GLIBC_2.4 qecvt F -GLIBC_2.4 qecvt_r F -GLIBC_2.4 qfcvt F -GLIBC_2.4 qfcvt_r F -GLIBC_2.4 qgcvt F -GLIBC_2.4 qsort F -GLIBC_2.4 query_module F -GLIBC_2.4 quotactl F -GLIBC_2.4 raise F -GLIBC_2.4 rand F -GLIBC_2.4 rand_r F -GLIBC_2.4 random F -GLIBC_2.4 random_r F -GLIBC_2.4 rawmemchr F -GLIBC_2.4 rcmd F -GLIBC_2.4 rcmd_af F -GLIBC_2.4 re_comp F -GLIBC_2.4 re_compile_fastmap F -GLIBC_2.4 re_compile_pattern F -GLIBC_2.4 re_exec F -GLIBC_2.4 re_match F -GLIBC_2.4 re_match_2 F -GLIBC_2.4 re_search F -GLIBC_2.4 re_search_2 F -GLIBC_2.4 re_set_registers F -GLIBC_2.4 re_set_syntax F -GLIBC_2.4 re_syntax_options D 0x4 -GLIBC_2.4 read F -GLIBC_2.4 readahead F -GLIBC_2.4 readdir F -GLIBC_2.4 readdir64 F -GLIBC_2.4 readdir64_r F -GLIBC_2.4 readdir_r F -GLIBC_2.4 readlink F -GLIBC_2.4 readlinkat F -GLIBC_2.4 readv F -GLIBC_2.4 realloc F -GLIBC_2.4 realpath F -GLIBC_2.4 reboot F -GLIBC_2.4 recv F -GLIBC_2.4 recvfrom F -GLIBC_2.4 recvmsg F -GLIBC_2.4 regcomp F -GLIBC_2.4 regerror F -GLIBC_2.4 regexec F -GLIBC_2.4 regfree F -GLIBC_2.4 register_printf_function F -GLIBC_2.4 registerrpc F -GLIBC_2.4 remap_file_pages F -GLIBC_2.4 remove F -GLIBC_2.4 removexattr F -GLIBC_2.4 remque F -GLIBC_2.4 rename F -GLIBC_2.4 renameat F -GLIBC_2.4 revoke F -GLIBC_2.4 rewind F -GLIBC_2.4 rewinddir F -GLIBC_2.4 rexec F -GLIBC_2.4 rexec_af F -GLIBC_2.4 rexecoptions D 0x4 -GLIBC_2.4 rindex F -GLIBC_2.4 rmdir F -GLIBC_2.4 rpc_createerr D 0x10 -GLIBC_2.4 rpmatch F -GLIBC_2.4 rresvport F -GLIBC_2.4 rresvport_af F -GLIBC_2.4 rtime F -GLIBC_2.4 ruserok F -GLIBC_2.4 ruserok_af F -GLIBC_2.4 ruserpass F -GLIBC_2.4 sbrk F -GLIBC_2.4 scalbn F -GLIBC_2.4 scalbnf F -GLIBC_2.4 scalbnl F -GLIBC_2.4 scandir F -GLIBC_2.4 scandir64 F -GLIBC_2.4 scanf F -GLIBC_2.4 sched_get_priority_max F -GLIBC_2.4 sched_get_priority_min F -GLIBC_2.4 sched_getaffinity F -GLIBC_2.4 sched_getparam F -GLIBC_2.4 sched_getscheduler F -GLIBC_2.4 sched_rr_get_interval F -GLIBC_2.4 sched_setaffinity F -GLIBC_2.4 sched_setparam F -GLIBC_2.4 sched_setscheduler F -GLIBC_2.4 sched_yield F -GLIBC_2.4 seed48 F -GLIBC_2.4 seed48_r F -GLIBC_2.4 seekdir F -GLIBC_2.4 select F -GLIBC_2.4 semctl F -GLIBC_2.4 semget F -GLIBC_2.4 semop F -GLIBC_2.4 semtimedop F -GLIBC_2.4 send F -GLIBC_2.4 sendfile F -GLIBC_2.4 sendfile64 F -GLIBC_2.4 sendmsg F -GLIBC_2.4 sendto F -GLIBC_2.4 setaliasent F -GLIBC_2.4 setbuf F -GLIBC_2.4 setbuffer F -GLIBC_2.4 setcontext F -GLIBC_2.4 setdomainname F -GLIBC_2.4 setegid F -GLIBC_2.4 setenv F -GLIBC_2.4 seteuid F -GLIBC_2.4 setfsent F -GLIBC_2.4 setfsgid F -GLIBC_2.4 setfsuid F -GLIBC_2.4 setgid F -GLIBC_2.4 setgrent F -GLIBC_2.4 setgroups F -GLIBC_2.4 sethostent F -GLIBC_2.4 sethostid F -GLIBC_2.4 sethostname F -GLIBC_2.4 setipv4sourcefilter F -GLIBC_2.4 setitimer F -GLIBC_2.4 setjmp F -GLIBC_2.4 setlinebuf F -GLIBC_2.4 setlocale F -GLIBC_2.4 setlogin F -GLIBC_2.4 setlogmask F -GLIBC_2.4 setmntent F -GLIBC_2.4 setnetent F -GLIBC_2.4 setnetgrent F -GLIBC_2.4 setpgid F -GLIBC_2.4 setpgrp F -GLIBC_2.4 setpriority F -GLIBC_2.4 setprotoent F -GLIBC_2.4 setpwent F -GLIBC_2.4 setregid F -GLIBC_2.4 setresgid F -GLIBC_2.4 setresuid F -GLIBC_2.4 setreuid F -GLIBC_2.4 setrlimit F -GLIBC_2.4 setrlimit64 F -GLIBC_2.4 setrpcent F -GLIBC_2.4 setservent F -GLIBC_2.4 setsid F -GLIBC_2.4 setsockopt F -GLIBC_2.4 setsourcefilter F -GLIBC_2.4 setspent F -GLIBC_2.4 setstate F -GLIBC_2.4 setstate_r F -GLIBC_2.4 settimeofday F -GLIBC_2.4 setttyent F -GLIBC_2.4 setuid F -GLIBC_2.4 setusershell F -GLIBC_2.4 setutent F -GLIBC_2.4 setutxent F -GLIBC_2.4 setvbuf F -GLIBC_2.4 setxattr F -GLIBC_2.4 sgetspent F -GLIBC_2.4 sgetspent_r F -GLIBC_2.4 shmat F -GLIBC_2.4 shmctl F -GLIBC_2.4 shmdt F -GLIBC_2.4 shmget F -GLIBC_2.4 shutdown F -GLIBC_2.4 sigaction F -GLIBC_2.4 sigaddset F -GLIBC_2.4 sigaltstack F -GLIBC_2.4 sigandset F -GLIBC_2.4 sigblock F -GLIBC_2.4 sigdelset F -GLIBC_2.4 sigemptyset F -GLIBC_2.4 sigfillset F -GLIBC_2.4 siggetmask F -GLIBC_2.4 sighold F -GLIBC_2.4 sigignore F -GLIBC_2.4 siginterrupt F -GLIBC_2.4 sigisemptyset F -GLIBC_2.4 sigismember F -GLIBC_2.4 siglongjmp F -GLIBC_2.4 signal F -GLIBC_2.4 sigorset F -GLIBC_2.4 sigpause F -GLIBC_2.4 sigpending F -GLIBC_2.4 sigprocmask F -GLIBC_2.4 sigqueue F -GLIBC_2.4 sigrelse F -GLIBC_2.4 sigreturn F -GLIBC_2.4 sigset F -GLIBC_2.4 sigsetmask F -GLIBC_2.4 sigstack F -GLIBC_2.4 sigsuspend F -GLIBC_2.4 sigtimedwait F -GLIBC_2.4 sigvec F -GLIBC_2.4 sigwait F -GLIBC_2.4 sigwaitinfo F -GLIBC_2.4 sleep F -GLIBC_2.4 snprintf F -GLIBC_2.4 sockatmark F -GLIBC_2.4 socket F -GLIBC_2.4 socketpair F -GLIBC_2.4 sprintf F -GLIBC_2.4 sprofil F -GLIBC_2.4 srand F -GLIBC_2.4 srand48 F -GLIBC_2.4 srand48_r F -GLIBC_2.4 srandom F -GLIBC_2.4 srandom_r F -GLIBC_2.4 sscanf F -GLIBC_2.4 ssignal F -GLIBC_2.4 sstk F -GLIBC_2.4 statfs F -GLIBC_2.4 statfs64 F -GLIBC_2.4 statvfs F -GLIBC_2.4 statvfs64 F -GLIBC_2.4 stderr D 0x4 -GLIBC_2.4 stdin D 0x4 -GLIBC_2.4 stdout D 0x4 -GLIBC_2.4 step F -GLIBC_2.4 stime F -GLIBC_2.4 stpcpy F -GLIBC_2.4 stpncpy F -GLIBC_2.4 strcasecmp F -GLIBC_2.4 strcasecmp_l F -GLIBC_2.4 strcasestr F -GLIBC_2.4 strcat F -GLIBC_2.4 strchr F -GLIBC_2.4 strchrnul F -GLIBC_2.4 strcmp F -GLIBC_2.4 strcoll F -GLIBC_2.4 strcoll_l F -GLIBC_2.4 strcpy F -GLIBC_2.4 strcspn F -GLIBC_2.4 strdup F -GLIBC_2.4 strerror F -GLIBC_2.4 strerror_r F -GLIBC_2.4 strfmon F -GLIBC_2.4 strfmon_l F -GLIBC_2.4 strfry F -GLIBC_2.4 strftime F -GLIBC_2.4 strftime_l F -GLIBC_2.4 strlen F -GLIBC_2.4 strncasecmp F -GLIBC_2.4 strncasecmp_l F -GLIBC_2.4 strncat F -GLIBC_2.4 strncmp F -GLIBC_2.4 strncpy F -GLIBC_2.4 strndup F -GLIBC_2.4 strnlen F -GLIBC_2.4 strpbrk F -GLIBC_2.4 strptime F -GLIBC_2.4 strptime_l F -GLIBC_2.4 strrchr F -GLIBC_2.4 strsep F -GLIBC_2.4 strsignal F -GLIBC_2.4 strspn F -GLIBC_2.4 strstr F -GLIBC_2.4 strtod F -GLIBC_2.4 strtod_l F -GLIBC_2.4 strtof F -GLIBC_2.4 strtof_l F -GLIBC_2.4 strtoimax F -GLIBC_2.4 strtok F -GLIBC_2.4 strtok_r F -GLIBC_2.4 strtol F -GLIBC_2.4 strtol_l F -GLIBC_2.4 strtold F -GLIBC_2.4 strtold_l F -GLIBC_2.4 strtoll F -GLIBC_2.4 strtoll_l F -GLIBC_2.4 strtoq F -GLIBC_2.4 strtoul F -GLIBC_2.4 strtoul_l F -GLIBC_2.4 strtoull F -GLIBC_2.4 strtoull_l F -GLIBC_2.4 strtoumax F -GLIBC_2.4 strtouq F -GLIBC_2.4 strverscmp F -GLIBC_2.4 strxfrm F -GLIBC_2.4 strxfrm_l F -GLIBC_2.4 stty F -GLIBC_2.4 svc_exit F -GLIBC_2.4 svc_fdset D 0x80 -GLIBC_2.4 svc_getreq F -GLIBC_2.4 svc_getreq_common F -GLIBC_2.4 svc_getreq_poll F -GLIBC_2.4 svc_getreqset F -GLIBC_2.4 svc_max_pollfd D 0x4 -GLIBC_2.4 svc_pollfd D 0x4 -GLIBC_2.4 svc_register F -GLIBC_2.4 svc_run F -GLIBC_2.4 svc_sendreply F -GLIBC_2.4 svc_unregister F -GLIBC_2.4 svcauthdes_stats D 0xc -GLIBC_2.4 svcerr_auth F -GLIBC_2.4 svcerr_decode F -GLIBC_2.4 svcerr_noproc F -GLIBC_2.4 svcerr_noprog F -GLIBC_2.4 svcerr_progvers F -GLIBC_2.4 svcerr_systemerr F -GLIBC_2.4 svcerr_weakauth F -GLIBC_2.4 svcfd_create F -GLIBC_2.4 svcraw_create F -GLIBC_2.4 svctcp_create F -GLIBC_2.4 svcudp_bufcreate F -GLIBC_2.4 svcudp_create F -GLIBC_2.4 svcudp_enablecache F -GLIBC_2.4 svcunix_create F -GLIBC_2.4 svcunixfd_create F -GLIBC_2.4 swab F -GLIBC_2.4 swapcontext F -GLIBC_2.4 swapoff F -GLIBC_2.4 swapon F -GLIBC_2.4 swprintf F -GLIBC_2.4 swscanf F -GLIBC_2.4 symlink F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sync F -GLIBC_2.4 sys_errlist D 0x210 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 sys_sigabbrev D 0x104 -GLIBC_2.4 sys_siglist D 0x104 -GLIBC_2.4 syscall F -GLIBC_2.4 sysconf F -GLIBC_2.4 sysctl F -GLIBC_2.4 sysinfo F -GLIBC_2.4 syslog F -GLIBC_2.4 system F -GLIBC_2.4 sysv_signal F -GLIBC_2.4 tcdrain F -GLIBC_2.4 tcflow F -GLIBC_2.4 tcflush F -GLIBC_2.4 tcgetattr F -GLIBC_2.4 tcgetpgrp F -GLIBC_2.4 tcgetsid F -GLIBC_2.4 tcsendbreak F -GLIBC_2.4 tcsetattr F -GLIBC_2.4 tcsetpgrp F -GLIBC_2.4 tdelete F -GLIBC_2.4 tdestroy F -GLIBC_2.4 telldir F -GLIBC_2.4 tempnam F -GLIBC_2.4 textdomain F -GLIBC_2.4 tfind F -GLIBC_2.4 time F -GLIBC_2.4 timegm F -GLIBC_2.4 timelocal F -GLIBC_2.4 times F -GLIBC_2.4 timezone D 0x4 -GLIBC_2.4 tmpfile F -GLIBC_2.4 tmpfile64 F -GLIBC_2.4 tmpnam F -GLIBC_2.4 tmpnam_r F -GLIBC_2.4 toascii F -GLIBC_2.4 tolower F -GLIBC_2.4 tolower_l F -GLIBC_2.4 toupper F -GLIBC_2.4 toupper_l F -GLIBC_2.4 towctrans F -GLIBC_2.4 towctrans_l F -GLIBC_2.4 towlower F -GLIBC_2.4 towlower_l F -GLIBC_2.4 towupper F -GLIBC_2.4 towupper_l F -GLIBC_2.4 tr_break F -GLIBC_2.4 truncate F -GLIBC_2.4 truncate64 F -GLIBC_2.4 tsearch F -GLIBC_2.4 ttyname F -GLIBC_2.4 ttyname_r F -GLIBC_2.4 ttyslot F -GLIBC_2.4 twalk F -GLIBC_2.4 tzname D 0x8 -GLIBC_2.4 tzset F -GLIBC_2.4 ualarm F -GLIBC_2.4 ulckpwdf F -GLIBC_2.4 ulimit F -GLIBC_2.4 umask F -GLIBC_2.4 umount F -GLIBC_2.4 umount2 F -GLIBC_2.4 uname F -GLIBC_2.4 ungetc F -GLIBC_2.4 ungetwc F -GLIBC_2.4 unlink F -GLIBC_2.4 unlinkat F -GLIBC_2.4 unlockpt F -GLIBC_2.4 unsetenv F -GLIBC_2.4 unshare F -GLIBC_2.4 updwtmp F -GLIBC_2.4 updwtmpx F -GLIBC_2.4 uselib F -GLIBC_2.4 uselocale F -GLIBC_2.4 user2netname F -GLIBC_2.4 usleep F -GLIBC_2.4 ustat F -GLIBC_2.4 utime F -GLIBC_2.4 utimes F -GLIBC_2.4 utmpname F -GLIBC_2.4 utmpxname F -GLIBC_2.4 valloc F -GLIBC_2.4 vasprintf F -GLIBC_2.4 vdprintf F -GLIBC_2.4 verr F -GLIBC_2.4 verrx F -GLIBC_2.4 versionsort F -GLIBC_2.4 versionsort64 F -GLIBC_2.4 vfork F -GLIBC_2.4 vfprintf F -GLIBC_2.4 vfscanf F -GLIBC_2.4 vfwprintf F -GLIBC_2.4 vfwscanf F -GLIBC_2.4 vhangup F -GLIBC_2.4 vlimit F -GLIBC_2.4 vprintf F -GLIBC_2.4 vscanf F -GLIBC_2.4 vsnprintf F -GLIBC_2.4 vsprintf F -GLIBC_2.4 vsscanf F -GLIBC_2.4 vswprintf F -GLIBC_2.4 vswscanf F -GLIBC_2.4 vsyslog F -GLIBC_2.4 vtimes F -GLIBC_2.4 vwarn F -GLIBC_2.4 vwarnx F -GLIBC_2.4 vwprintf F -GLIBC_2.4 vwscanf F -GLIBC_2.4 wait F -GLIBC_2.4 wait3 F -GLIBC_2.4 wait4 F -GLIBC_2.4 waitid F -GLIBC_2.4 waitpid F -GLIBC_2.4 warn F -GLIBC_2.4 warnx F -GLIBC_2.4 wcpcpy F -GLIBC_2.4 wcpncpy F -GLIBC_2.4 wcrtomb F -GLIBC_2.4 wcscasecmp F -GLIBC_2.4 wcscasecmp_l F -GLIBC_2.4 wcscat F -GLIBC_2.4 wcschr F -GLIBC_2.4 wcschrnul F -GLIBC_2.4 wcscmp F -GLIBC_2.4 wcscoll F -GLIBC_2.4 wcscoll_l F -GLIBC_2.4 wcscpy F -GLIBC_2.4 wcscspn F -GLIBC_2.4 wcsdup F -GLIBC_2.4 wcsftime F -GLIBC_2.4 wcsftime_l F -GLIBC_2.4 wcslen F -GLIBC_2.4 wcsncasecmp F -GLIBC_2.4 wcsncasecmp_l F -GLIBC_2.4 wcsncat F -GLIBC_2.4 wcsncmp F -GLIBC_2.4 wcsncpy F -GLIBC_2.4 wcsnlen F -GLIBC_2.4 wcsnrtombs F -GLIBC_2.4 wcspbrk F -GLIBC_2.4 wcsrchr F -GLIBC_2.4 wcsrtombs F -GLIBC_2.4 wcsspn F -GLIBC_2.4 wcsstr F -GLIBC_2.4 wcstod F -GLIBC_2.4 wcstod_l F -GLIBC_2.4 wcstof F -GLIBC_2.4 wcstof_l F -GLIBC_2.4 wcstoimax F -GLIBC_2.4 wcstok F -GLIBC_2.4 wcstol F -GLIBC_2.4 wcstol_l F -GLIBC_2.4 wcstold F -GLIBC_2.4 wcstold_l F -GLIBC_2.4 wcstoll F -GLIBC_2.4 wcstoll_l F -GLIBC_2.4 wcstombs F -GLIBC_2.4 wcstoq F -GLIBC_2.4 wcstoul F -GLIBC_2.4 wcstoul_l F -GLIBC_2.4 wcstoull F -GLIBC_2.4 wcstoull_l F -GLIBC_2.4 wcstoumax F -GLIBC_2.4 wcstouq F -GLIBC_2.4 wcswcs F -GLIBC_2.4 wcswidth F -GLIBC_2.4 wcsxfrm F -GLIBC_2.4 wcsxfrm_l F -GLIBC_2.4 wctob F -GLIBC_2.4 wctomb F -GLIBC_2.4 wctrans F -GLIBC_2.4 wctrans_l F -GLIBC_2.4 wctype F -GLIBC_2.4 wctype_l F -GLIBC_2.4 wcwidth F -GLIBC_2.4 wmemchr F -GLIBC_2.4 wmemcmp F -GLIBC_2.4 wmemcpy F -GLIBC_2.4 wmemmove F -GLIBC_2.4 wmempcpy F -GLIBC_2.4 wmemset F -GLIBC_2.4 wordexp F -GLIBC_2.4 wordfree F -GLIBC_2.4 wprintf F -GLIBC_2.4 write F -GLIBC_2.4 writev F -GLIBC_2.4 wscanf F -GLIBC_2.4 xdecrypt F -GLIBC_2.4 xdr_accepted_reply F -GLIBC_2.4 xdr_array F -GLIBC_2.4 xdr_authdes_cred F -GLIBC_2.4 xdr_authdes_verf F -GLIBC_2.4 xdr_authunix_parms F -GLIBC_2.4 xdr_bool F -GLIBC_2.4 xdr_bytes F -GLIBC_2.4 xdr_callhdr F -GLIBC_2.4 xdr_callmsg F -GLIBC_2.4 xdr_char F -GLIBC_2.4 xdr_cryptkeyarg F -GLIBC_2.4 xdr_cryptkeyarg2 F -GLIBC_2.4 xdr_cryptkeyres F -GLIBC_2.4 xdr_des_block F -GLIBC_2.4 xdr_double F -GLIBC_2.4 xdr_enum F -GLIBC_2.4 xdr_float F -GLIBC_2.4 xdr_free F -GLIBC_2.4 xdr_getcredres F -GLIBC_2.4 xdr_hyper F -GLIBC_2.4 xdr_int F -GLIBC_2.4 xdr_int16_t F -GLIBC_2.4 xdr_int32_t F -GLIBC_2.4 xdr_int64_t F -GLIBC_2.4 xdr_int8_t F -GLIBC_2.4 xdr_key_netstarg F -GLIBC_2.4 xdr_key_netstres F -GLIBC_2.4 xdr_keybuf F -GLIBC_2.4 xdr_keystatus F -GLIBC_2.4 xdr_long F -GLIBC_2.4 xdr_longlong_t F -GLIBC_2.4 xdr_netnamestr F -GLIBC_2.4 xdr_netobj F -GLIBC_2.4 xdr_opaque F -GLIBC_2.4 xdr_opaque_auth F -GLIBC_2.4 xdr_pmap F -GLIBC_2.4 xdr_pmaplist F -GLIBC_2.4 xdr_pointer F -GLIBC_2.4 xdr_quad_t F -GLIBC_2.4 xdr_reference F -GLIBC_2.4 xdr_rejected_reply F -GLIBC_2.4 xdr_replymsg F -GLIBC_2.4 xdr_rmtcall_args F -GLIBC_2.4 xdr_rmtcallres F -GLIBC_2.4 xdr_short F -GLIBC_2.4 xdr_sizeof F -GLIBC_2.4 xdr_string F -GLIBC_2.4 xdr_u_char F -GLIBC_2.4 xdr_u_hyper F -GLIBC_2.4 xdr_u_int F -GLIBC_2.4 xdr_u_long F -GLIBC_2.4 xdr_u_longlong_t F -GLIBC_2.4 xdr_u_quad_t F -GLIBC_2.4 xdr_u_short F -GLIBC_2.4 xdr_uint16_t F -GLIBC_2.4 xdr_uint32_t F -GLIBC_2.4 xdr_uint64_t F -GLIBC_2.4 xdr_uint8_t F -GLIBC_2.4 xdr_union F -GLIBC_2.4 xdr_unixcred F -GLIBC_2.4 xdr_vector F -GLIBC_2.4 xdr_void F -GLIBC_2.4 xdr_wrapstring F -GLIBC_2.4 xdrmem_create F -GLIBC_2.4 xdrrec_create F -GLIBC_2.4 xdrrec_endofrecord F -GLIBC_2.4 xdrrec_eof F -GLIBC_2.4 xdrrec_skiprecord F -GLIBC_2.4 xdrstdio_create F -GLIBC_2.4 xencrypt F -GLIBC_2.4 xprt_register F -GLIBC_2.4 xprt_unregister F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libcrypt.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libcrypt.abilist deleted file mode 100644 index 04f1f02fa3..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 crypt F -GLIBC_2.4 crypt_r F -GLIBC_2.4 encrypt F -GLIBC_2.4 encrypt_r F -GLIBC_2.4 fcrypt F -GLIBC_2.4 setkey F -GLIBC_2.4 setkey_r F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libdl.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libdl.abilist deleted file mode 100644 index 89a750a0a3..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libdl.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 dladdr F -GLIBC_2.4 dladdr1 F -GLIBC_2.4 dlclose F -GLIBC_2.4 dlerror F -GLIBC_2.4 dlinfo F -GLIBC_2.4 dlmopen F -GLIBC_2.4 dlopen F -GLIBC_2.4 dlsym F -GLIBC_2.4 dlvsym F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist deleted file mode 100644 index d0c33d2a11..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ /dev/null @@ -1,432 +0,0 @@ -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 _LIB_VERSION D 0x4 -GLIBC_2.4 __clog10 F -GLIBC_2.4 __clog10f F -GLIBC_2.4 __clog10l F -GLIBC_2.4 __finite F -GLIBC_2.4 __finitef F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fpclassify F -GLIBC_2.4 __fpclassifyf F -GLIBC_2.4 __signbit F -GLIBC_2.4 __signbitf F -GLIBC_2.4 acos F -GLIBC_2.4 acosf F -GLIBC_2.4 acosh F -GLIBC_2.4 acoshf F -GLIBC_2.4 acoshl F -GLIBC_2.4 acosl F -GLIBC_2.4 asin F -GLIBC_2.4 asinf F -GLIBC_2.4 asinh F -GLIBC_2.4 asinhf F -GLIBC_2.4 asinhl F -GLIBC_2.4 asinl F -GLIBC_2.4 atan F -GLIBC_2.4 atan2 F -GLIBC_2.4 atan2f F -GLIBC_2.4 atan2l F -GLIBC_2.4 atanf F -GLIBC_2.4 atanh F -GLIBC_2.4 atanhf F -GLIBC_2.4 atanhl F -GLIBC_2.4 atanl F -GLIBC_2.4 cabs F -GLIBC_2.4 cabsf F -GLIBC_2.4 cabsl F -GLIBC_2.4 cacos F -GLIBC_2.4 cacosf F -GLIBC_2.4 cacosh F -GLIBC_2.4 cacoshf F -GLIBC_2.4 cacoshl F -GLIBC_2.4 cacosl F -GLIBC_2.4 carg F -GLIBC_2.4 cargf F -GLIBC_2.4 cargl F -GLIBC_2.4 casin F -GLIBC_2.4 casinf F -GLIBC_2.4 casinh F -GLIBC_2.4 casinhf F -GLIBC_2.4 casinhl F -GLIBC_2.4 casinl F -GLIBC_2.4 catan F -GLIBC_2.4 catanf F -GLIBC_2.4 catanh F -GLIBC_2.4 catanhf F -GLIBC_2.4 catanhl F -GLIBC_2.4 catanl F -GLIBC_2.4 cbrt F -GLIBC_2.4 cbrtf F -GLIBC_2.4 cbrtl F -GLIBC_2.4 ccos F -GLIBC_2.4 ccosf F -GLIBC_2.4 ccosh F -GLIBC_2.4 ccoshf F -GLIBC_2.4 ccoshl F -GLIBC_2.4 ccosl F -GLIBC_2.4 ceil F -GLIBC_2.4 ceilf F -GLIBC_2.4 ceill F -GLIBC_2.4 cexp F -GLIBC_2.4 cexpf F -GLIBC_2.4 cexpl F -GLIBC_2.4 cimag F -GLIBC_2.4 cimagf F -GLIBC_2.4 cimagl F -GLIBC_2.4 clog F -GLIBC_2.4 clog10 F -GLIBC_2.4 clog10f F -GLIBC_2.4 clog10l F -GLIBC_2.4 clogf F -GLIBC_2.4 clogl F -GLIBC_2.4 conj F -GLIBC_2.4 conjf F -GLIBC_2.4 conjl F -GLIBC_2.4 copysign F -GLIBC_2.4 copysignf F -GLIBC_2.4 copysignl F -GLIBC_2.4 cos F -GLIBC_2.4 cosf F -GLIBC_2.4 cosh F -GLIBC_2.4 coshf F -GLIBC_2.4 coshl F -GLIBC_2.4 cosl F -GLIBC_2.4 cpow F -GLIBC_2.4 cpowf F -GLIBC_2.4 cpowl F -GLIBC_2.4 cproj F -GLIBC_2.4 cprojf F -GLIBC_2.4 cprojl F -GLIBC_2.4 creal F -GLIBC_2.4 crealf F -GLIBC_2.4 creall F -GLIBC_2.4 csin F -GLIBC_2.4 csinf F -GLIBC_2.4 csinh F -GLIBC_2.4 csinhf F -GLIBC_2.4 csinhl F -GLIBC_2.4 csinl F -GLIBC_2.4 csqrt F -GLIBC_2.4 csqrtf F -GLIBC_2.4 csqrtl F -GLIBC_2.4 ctan F -GLIBC_2.4 ctanf F -GLIBC_2.4 ctanh F -GLIBC_2.4 ctanhf F -GLIBC_2.4 ctanhl F -GLIBC_2.4 ctanl F -GLIBC_2.4 drem F -GLIBC_2.4 dremf F -GLIBC_2.4 dreml F -GLIBC_2.4 erf F -GLIBC_2.4 erfc F -GLIBC_2.4 erfcf F -GLIBC_2.4 erfcl F -GLIBC_2.4 erff F -GLIBC_2.4 erfl F -GLIBC_2.4 exp F -GLIBC_2.4 exp10 F -GLIBC_2.4 exp10f F -GLIBC_2.4 exp10l F -GLIBC_2.4 exp2 F -GLIBC_2.4 exp2f F -GLIBC_2.4 exp2l F -GLIBC_2.4 expf F -GLIBC_2.4 expl F -GLIBC_2.4 expm1 F -GLIBC_2.4 expm1f F -GLIBC_2.4 expm1l F -GLIBC_2.4 fabs F -GLIBC_2.4 fabsf F -GLIBC_2.4 fabsl F -GLIBC_2.4 fdim F -GLIBC_2.4 fdimf F -GLIBC_2.4 fdiml F -GLIBC_2.4 feclearexcept F -GLIBC_2.4 fedisableexcept F -GLIBC_2.4 feenableexcept F -GLIBC_2.4 fegetenv F -GLIBC_2.4 fegetexcept F -GLIBC_2.4 fegetexceptflag F -GLIBC_2.4 fegetround F -GLIBC_2.4 feholdexcept F -GLIBC_2.4 feraiseexcept F -GLIBC_2.4 fesetenv F -GLIBC_2.4 fesetexceptflag F -GLIBC_2.4 fesetround F -GLIBC_2.4 fetestexcept F -GLIBC_2.4 feupdateenv F -GLIBC_2.4 finite F -GLIBC_2.4 finitef F -GLIBC_2.4 finitel F -GLIBC_2.4 floor F -GLIBC_2.4 floorf F -GLIBC_2.4 floorl F -GLIBC_2.4 fma F -GLIBC_2.4 fmaf F -GLIBC_2.4 fmal F -GLIBC_2.4 fmax F -GLIBC_2.4 fmaxf F -GLIBC_2.4 fmaxl F -GLIBC_2.4 fmin F -GLIBC_2.4 fminf F -GLIBC_2.4 fminl F -GLIBC_2.4 fmod F -GLIBC_2.4 fmodf F -GLIBC_2.4 fmodl F -GLIBC_2.4 frexp F -GLIBC_2.4 frexpf F -GLIBC_2.4 frexpl F -GLIBC_2.4 gamma F -GLIBC_2.4 gammaf F -GLIBC_2.4 gammal F -GLIBC_2.4 hypot F -GLIBC_2.4 hypotf F -GLIBC_2.4 hypotl F -GLIBC_2.4 ilogb F -GLIBC_2.4 ilogbf F -GLIBC_2.4 ilogbl F -GLIBC_2.4 j0 F -GLIBC_2.4 j0f F -GLIBC_2.4 j0l F -GLIBC_2.4 j1 F -GLIBC_2.4 j1f F -GLIBC_2.4 j1l F -GLIBC_2.4 jn F -GLIBC_2.4 jnf F -GLIBC_2.4 jnl F -GLIBC_2.4 ldexp F -GLIBC_2.4 ldexpf F -GLIBC_2.4 ldexpl F -GLIBC_2.4 lgamma F -GLIBC_2.4 lgamma_r F -GLIBC_2.4 lgammaf F -GLIBC_2.4 lgammaf_r F -GLIBC_2.4 lgammal F -GLIBC_2.4 lgammal_r F -GLIBC_2.4 llrint F -GLIBC_2.4 llrintf F -GLIBC_2.4 llrintl F -GLIBC_2.4 llround F -GLIBC_2.4 llroundf F -GLIBC_2.4 llroundl F -GLIBC_2.4 log F -GLIBC_2.4 log10 F -GLIBC_2.4 log10f F -GLIBC_2.4 log10l F -GLIBC_2.4 log1p F -GLIBC_2.4 log1pf F -GLIBC_2.4 log1pl F -GLIBC_2.4 log2 F -GLIBC_2.4 log2f F -GLIBC_2.4 log2l F -GLIBC_2.4 logb F -GLIBC_2.4 logbf F -GLIBC_2.4 logbl F -GLIBC_2.4 logf F -GLIBC_2.4 logl F -GLIBC_2.4 lrint F -GLIBC_2.4 lrintf F -GLIBC_2.4 lrintl F -GLIBC_2.4 lround F -GLIBC_2.4 lroundf F -GLIBC_2.4 lroundl F -GLIBC_2.4 matherr F -GLIBC_2.4 modf F -GLIBC_2.4 modff F -GLIBC_2.4 modfl F -GLIBC_2.4 nan F -GLIBC_2.4 nanf F -GLIBC_2.4 nanl F -GLIBC_2.4 nearbyint F -GLIBC_2.4 nearbyintf F -GLIBC_2.4 nearbyintl F -GLIBC_2.4 nextafter F -GLIBC_2.4 nextafterf F -GLIBC_2.4 nextafterl F -GLIBC_2.4 nexttoward F -GLIBC_2.4 nexttowardf F -GLIBC_2.4 nexttowardl F -GLIBC_2.4 pow F -GLIBC_2.4 pow10 F -GLIBC_2.4 pow10f F -GLIBC_2.4 pow10l F -GLIBC_2.4 powf F -GLIBC_2.4 powl F -GLIBC_2.4 remainder F -GLIBC_2.4 remainderf F -GLIBC_2.4 remainderl F -GLIBC_2.4 remquo F -GLIBC_2.4 remquof F -GLIBC_2.4 remquol F -GLIBC_2.4 rint F -GLIBC_2.4 rintf F -GLIBC_2.4 rintl F -GLIBC_2.4 round F -GLIBC_2.4 roundf F -GLIBC_2.4 roundl F -GLIBC_2.4 scalb F -GLIBC_2.4 scalbf F -GLIBC_2.4 scalbl F -GLIBC_2.4 scalbln F -GLIBC_2.4 scalblnf F -GLIBC_2.4 scalblnl F -GLIBC_2.4 scalbn F -GLIBC_2.4 scalbnf F -GLIBC_2.4 scalbnl F -GLIBC_2.4 signgam D 0x4 -GLIBC_2.4 significand F -GLIBC_2.4 significandf F -GLIBC_2.4 significandl F -GLIBC_2.4 sin F -GLIBC_2.4 sincos F -GLIBC_2.4 sincosf F -GLIBC_2.4 sincosl F -GLIBC_2.4 sinf F -GLIBC_2.4 sinh F -GLIBC_2.4 sinhf F -GLIBC_2.4 sinhl F -GLIBC_2.4 sinl F -GLIBC_2.4 sqrt F -GLIBC_2.4 sqrtf F -GLIBC_2.4 sqrtl F -GLIBC_2.4 tan F -GLIBC_2.4 tanf F -GLIBC_2.4 tanh F -GLIBC_2.4 tanhf F -GLIBC_2.4 tanhl F -GLIBC_2.4 tanl F -GLIBC_2.4 tgamma F -GLIBC_2.4 tgammaf F -GLIBC_2.4 tgammal F -GLIBC_2.4 trunc F -GLIBC_2.4 truncf F -GLIBC_2.4 truncl F -GLIBC_2.4 y0 F -GLIBC_2.4 y0f F -GLIBC_2.4 y0l F -GLIBC_2.4 y1 F -GLIBC_2.4 y1f F -GLIBC_2.4 y1l F -GLIBC_2.4 yn F -GLIBC_2.4 ynf F -GLIBC_2.4 ynl F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libnsl.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libnsl.abilist deleted file mode 100644 index 2b2e49e6a1..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libnsl.abilist +++ /dev/null @@ -1,122 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __free_fdresult F -GLIBC_2.4 __nis_default_access F -GLIBC_2.4 __nis_default_group F -GLIBC_2.4 __nis_default_owner F -GLIBC_2.4 __nis_default_ttl F -GLIBC_2.4 __nis_finddirectory F -GLIBC_2.4 __nis_hash F -GLIBC_2.4 __nisbind_connect F -GLIBC_2.4 __nisbind_create F -GLIBC_2.4 __nisbind_destroy F -GLIBC_2.4 __nisbind_next F -GLIBC_2.4 __yp_check F -GLIBC_2.4 nis_add F -GLIBC_2.4 nis_add_entry F -GLIBC_2.4 nis_addmember F -GLIBC_2.4 nis_checkpoint F -GLIBC_2.4 nis_clone_directory F -GLIBC_2.4 nis_clone_object F -GLIBC_2.4 nis_clone_result F -GLIBC_2.4 nis_creategroup F -GLIBC_2.4 nis_destroy_object F -GLIBC_2.4 nis_destroygroup F -GLIBC_2.4 nis_dir_cmp F -GLIBC_2.4 nis_domain_of F -GLIBC_2.4 nis_domain_of_r F -GLIBC_2.4 nis_first_entry F -GLIBC_2.4 nis_free_directory F -GLIBC_2.4 nis_free_object F -GLIBC_2.4 nis_free_request F -GLIBC_2.4 nis_freenames F -GLIBC_2.4 nis_freeresult F -GLIBC_2.4 nis_freeservlist F -GLIBC_2.4 nis_freetags F -GLIBC_2.4 nis_getnames F -GLIBC_2.4 nis_getservlist F -GLIBC_2.4 nis_ismember F -GLIBC_2.4 nis_leaf_of F -GLIBC_2.4 nis_leaf_of_r F -GLIBC_2.4 nis_lerror F -GLIBC_2.4 nis_list F -GLIBC_2.4 nis_local_directory F -GLIBC_2.4 nis_local_group F -GLIBC_2.4 nis_local_host F -GLIBC_2.4 nis_local_principal F -GLIBC_2.4 nis_lookup F -GLIBC_2.4 nis_mkdir F -GLIBC_2.4 nis_modify F -GLIBC_2.4 nis_modify_entry F -GLIBC_2.4 nis_name_of F -GLIBC_2.4 nis_name_of_r F -GLIBC_2.4 nis_next_entry F -GLIBC_2.4 nis_perror F -GLIBC_2.4 nis_ping F -GLIBC_2.4 nis_print_directory F -GLIBC_2.4 nis_print_entry F -GLIBC_2.4 nis_print_group F -GLIBC_2.4 nis_print_group_entry F -GLIBC_2.4 nis_print_link F -GLIBC_2.4 nis_print_object F -GLIBC_2.4 nis_print_result F -GLIBC_2.4 nis_print_rights F -GLIBC_2.4 nis_print_table F -GLIBC_2.4 nis_read_obj F -GLIBC_2.4 nis_remove F -GLIBC_2.4 nis_remove_entry F -GLIBC_2.4 nis_removemember F -GLIBC_2.4 nis_rmdir F -GLIBC_2.4 nis_servstate F -GLIBC_2.4 nis_sperrno F -GLIBC_2.4 nis_sperror F -GLIBC_2.4 nis_sperror_r F -GLIBC_2.4 nis_stats F -GLIBC_2.4 nis_verifygroup F -GLIBC_2.4 nis_write_obj F -GLIBC_2.4 readColdStartFile F -GLIBC_2.4 writeColdStartFile F -GLIBC_2.4 xdr_cback_data F -GLIBC_2.4 xdr_domainname F -GLIBC_2.4 xdr_keydat F -GLIBC_2.4 xdr_mapname F -GLIBC_2.4 xdr_obj_p F -GLIBC_2.4 xdr_peername F -GLIBC_2.4 xdr_valdat F -GLIBC_2.4 xdr_yp_buf F -GLIBC_2.4 xdr_ypall F -GLIBC_2.4 xdr_ypbind_binding F -GLIBC_2.4 xdr_ypbind_resp F -GLIBC_2.4 xdr_ypbind_resptype F -GLIBC_2.4 xdr_ypbind_setdom F -GLIBC_2.4 xdr_ypdelete_args F -GLIBC_2.4 xdr_ypmap_parms F -GLIBC_2.4 xdr_ypmaplist F -GLIBC_2.4 xdr_yppush_status F -GLIBC_2.4 xdr_yppushresp_xfr F -GLIBC_2.4 xdr_ypreq_key F -GLIBC_2.4 xdr_ypreq_nokey F -GLIBC_2.4 xdr_ypreq_xfr F -GLIBC_2.4 xdr_ypresp_all F -GLIBC_2.4 xdr_ypresp_key_val F -GLIBC_2.4 xdr_ypresp_maplist F -GLIBC_2.4 xdr_ypresp_master F -GLIBC_2.4 xdr_ypresp_order F -GLIBC_2.4 xdr_ypresp_val F -GLIBC_2.4 xdr_ypresp_xfr F -GLIBC_2.4 xdr_ypstat F -GLIBC_2.4 xdr_ypupdate_args F -GLIBC_2.4 xdr_ypxfrstat F -GLIBC_2.4 yp_all F -GLIBC_2.4 yp_bind F -GLIBC_2.4 yp_first F -GLIBC_2.4 yp_get_default_domain F -GLIBC_2.4 yp_maplist F -GLIBC_2.4 yp_master F -GLIBC_2.4 yp_match F -GLIBC_2.4 yp_next F -GLIBC_2.4 yp_order F -GLIBC_2.4 yp_unbind F -GLIBC_2.4 yp_update F -GLIBC_2.4 ypbinderr_string F -GLIBC_2.4 yperr_string F -GLIBC_2.4 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist deleted file mode 100644 index 91545c1542..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist +++ /dev/null @@ -1,228 +0,0 @@ -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 _IO_flockfile F -GLIBC_2.4 _IO_ftrylockfile F -GLIBC_2.4 _IO_funlockfile F -GLIBC_2.4 __close F -GLIBC_2.4 __connect F -GLIBC_2.4 __errno_location F -GLIBC_2.4 __fcntl F -GLIBC_2.4 __fork F -GLIBC_2.4 __h_errno_location F -GLIBC_2.4 __libc_allocate_rtsig F -GLIBC_2.4 __libc_current_sigrtmax F -GLIBC_2.4 __libc_current_sigrtmin F -GLIBC_2.4 __lseek F -GLIBC_2.4 __nanosleep F -GLIBC_2.4 __open F -GLIBC_2.4 __open64 F -GLIBC_2.4 __pread64 F -GLIBC_2.4 __pthread_cleanup_routine F -GLIBC_2.4 __pthread_getspecific F -GLIBC_2.4 __pthread_key_create F -GLIBC_2.4 __pthread_mutex_destroy F -GLIBC_2.4 __pthread_mutex_init F -GLIBC_2.4 __pthread_mutex_lock F -GLIBC_2.4 __pthread_mutex_trylock F -GLIBC_2.4 __pthread_mutex_unlock F -GLIBC_2.4 __pthread_mutexattr_destroy F -GLIBC_2.4 __pthread_mutexattr_init F -GLIBC_2.4 __pthread_mutexattr_settype F -GLIBC_2.4 __pthread_once F -GLIBC_2.4 __pthread_register_cancel F -GLIBC_2.4 __pthread_register_cancel_defer F -GLIBC_2.4 __pthread_rwlock_destroy F -GLIBC_2.4 __pthread_rwlock_init F -GLIBC_2.4 __pthread_rwlock_rdlock F -GLIBC_2.4 __pthread_rwlock_tryrdlock F -GLIBC_2.4 __pthread_rwlock_trywrlock F -GLIBC_2.4 __pthread_rwlock_unlock F -GLIBC_2.4 __pthread_rwlock_wrlock F -GLIBC_2.4 __pthread_setspecific F -GLIBC_2.4 __pthread_unregister_cancel F -GLIBC_2.4 __pthread_unregister_cancel_restore F -GLIBC_2.4 __pthread_unwind_next F -GLIBC_2.4 __pwrite64 F -GLIBC_2.4 __read F -GLIBC_2.4 __res_state F -GLIBC_2.4 __send F -GLIBC_2.4 __sigaction F -GLIBC_2.4 __vfork F -GLIBC_2.4 __wait F -GLIBC_2.4 __write F -GLIBC_2.4 _pthread_cleanup_pop F -GLIBC_2.4 _pthread_cleanup_pop_restore F -GLIBC_2.4 _pthread_cleanup_push F -GLIBC_2.4 _pthread_cleanup_push_defer F -GLIBC_2.4 accept F -GLIBC_2.4 close F -GLIBC_2.4 connect F -GLIBC_2.4 fcntl F -GLIBC_2.4 flockfile F -GLIBC_2.4 fork F -GLIBC_2.4 fsync F -GLIBC_2.4 ftrylockfile F -GLIBC_2.4 funlockfile F -GLIBC_2.4 longjmp F -GLIBC_2.4 lseek F -GLIBC_2.4 lseek64 F -GLIBC_2.4 msync F -GLIBC_2.4 nanosleep F -GLIBC_2.4 open F -GLIBC_2.4 open64 F -GLIBC_2.4 pause F -GLIBC_2.4 pread F -GLIBC_2.4 pread64 F -GLIBC_2.4 pthread_attr_destroy F -GLIBC_2.4 pthread_attr_getaffinity_np F -GLIBC_2.4 pthread_attr_getdetachstate F -GLIBC_2.4 pthread_attr_getguardsize F -GLIBC_2.4 pthread_attr_getinheritsched F -GLIBC_2.4 pthread_attr_getschedparam F -GLIBC_2.4 pthread_attr_getschedpolicy F -GLIBC_2.4 pthread_attr_getscope F -GLIBC_2.4 pthread_attr_getstack F -GLIBC_2.4 pthread_attr_getstackaddr F -GLIBC_2.4 pthread_attr_getstacksize F -GLIBC_2.4 pthread_attr_init F -GLIBC_2.4 pthread_attr_setaffinity_np F -GLIBC_2.4 pthread_attr_setdetachstate F -GLIBC_2.4 pthread_attr_setguardsize F -GLIBC_2.4 pthread_attr_setinheritsched F -GLIBC_2.4 pthread_attr_setschedparam F -GLIBC_2.4 pthread_attr_setschedpolicy F -GLIBC_2.4 pthread_attr_setscope F -GLIBC_2.4 pthread_attr_setstack F -GLIBC_2.4 pthread_attr_setstackaddr F -GLIBC_2.4 pthread_attr_setstacksize F -GLIBC_2.4 pthread_barrier_destroy F -GLIBC_2.4 pthread_barrier_init F -GLIBC_2.4 pthread_barrier_wait F -GLIBC_2.4 pthread_barrierattr_destroy F -GLIBC_2.4 pthread_barrierattr_getpshared F -GLIBC_2.4 pthread_barrierattr_init F -GLIBC_2.4 pthread_barrierattr_setpshared F -GLIBC_2.4 pthread_cancel F -GLIBC_2.4 pthread_cond_broadcast F -GLIBC_2.4 pthread_cond_destroy F -GLIBC_2.4 pthread_cond_init F -GLIBC_2.4 pthread_cond_signal F -GLIBC_2.4 pthread_cond_timedwait F -GLIBC_2.4 pthread_cond_wait F -GLIBC_2.4 pthread_condattr_destroy F -GLIBC_2.4 pthread_condattr_getclock F -GLIBC_2.4 pthread_condattr_getpshared F -GLIBC_2.4 pthread_condattr_init F -GLIBC_2.4 pthread_condattr_setclock F -GLIBC_2.4 pthread_condattr_setpshared F -GLIBC_2.4 pthread_create F -GLIBC_2.4 pthread_detach F -GLIBC_2.4 pthread_equal F -GLIBC_2.4 pthread_exit F -GLIBC_2.4 pthread_getaffinity_np F -GLIBC_2.4 pthread_getattr_np F -GLIBC_2.4 pthread_getconcurrency F -GLIBC_2.4 pthread_getcpuclockid F -GLIBC_2.4 pthread_getschedparam F -GLIBC_2.4 pthread_getspecific F -GLIBC_2.4 pthread_join F -GLIBC_2.4 pthread_key_create F -GLIBC_2.4 pthread_key_delete F -GLIBC_2.4 pthread_kill F -GLIBC_2.4 pthread_kill_other_threads_np F -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_destroy F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_init F -GLIBC_2.4 pthread_mutex_lock F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutex_timedlock F -GLIBC_2.4 pthread_mutex_trylock F -GLIBC_2.4 pthread_mutex_unlock F -GLIBC_2.4 pthread_mutexattr_destroy F -GLIBC_2.4 pthread_mutexattr_getkind_np F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getpshared F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_gettype F -GLIBC_2.4 pthread_mutexattr_init F -GLIBC_2.4 pthread_mutexattr_setkind_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setpshared F -GLIBC_2.4 pthread_mutexattr_setrobust_np F -GLIBC_2.4 pthread_mutexattr_settype F -GLIBC_2.4 pthread_once F -GLIBC_2.4 pthread_rwlock_destroy F -GLIBC_2.4 pthread_rwlock_init F -GLIBC_2.4 pthread_rwlock_rdlock F -GLIBC_2.4 pthread_rwlock_timedrdlock F -GLIBC_2.4 pthread_rwlock_timedwrlock F -GLIBC_2.4 pthread_rwlock_tryrdlock F -GLIBC_2.4 pthread_rwlock_trywrlock F -GLIBC_2.4 pthread_rwlock_unlock F -GLIBC_2.4 pthread_rwlock_wrlock F -GLIBC_2.4 pthread_rwlockattr_destroy F -GLIBC_2.4 pthread_rwlockattr_getkind_np F -GLIBC_2.4 pthread_rwlockattr_getpshared F -GLIBC_2.4 pthread_rwlockattr_init F -GLIBC_2.4 pthread_rwlockattr_setkind_np F -GLIBC_2.4 pthread_rwlockattr_setpshared F -GLIBC_2.4 pthread_self F -GLIBC_2.4 pthread_setaffinity_np F -GLIBC_2.4 pthread_setcancelstate F -GLIBC_2.4 pthread_setcanceltype F -GLIBC_2.4 pthread_setconcurrency F -GLIBC_2.4 pthread_setschedparam F -GLIBC_2.4 pthread_setschedprio F -GLIBC_2.4 pthread_setspecific F -GLIBC_2.4 pthread_sigmask F -GLIBC_2.4 pthread_spin_destroy F -GLIBC_2.4 pthread_spin_init F -GLIBC_2.4 pthread_spin_lock F -GLIBC_2.4 pthread_spin_trylock F -GLIBC_2.4 pthread_spin_unlock F -GLIBC_2.4 pthread_testcancel F -GLIBC_2.4 pthread_timedjoin_np F -GLIBC_2.4 pthread_tryjoin_np F -GLIBC_2.4 pthread_yield F -GLIBC_2.4 pwrite F -GLIBC_2.4 pwrite64 F -GLIBC_2.4 raise F -GLIBC_2.4 read F -GLIBC_2.4 recv F -GLIBC_2.4 recvfrom F -GLIBC_2.4 recvmsg F -GLIBC_2.4 sem_close F -GLIBC_2.4 sem_destroy F -GLIBC_2.4 sem_getvalue F -GLIBC_2.4 sem_init F -GLIBC_2.4 sem_open F -GLIBC_2.4 sem_post F -GLIBC_2.4 sem_timedwait F -GLIBC_2.4 sem_trywait F -GLIBC_2.4 sem_unlink F -GLIBC_2.4 sem_wait F -GLIBC_2.4 send F -GLIBC_2.4 sendmsg F -GLIBC_2.4 sendto F -GLIBC_2.4 sigaction F -GLIBC_2.4 siglongjmp F -GLIBC_2.4 sigwait F -GLIBC_2.4 system F -GLIBC_2.4 tcdrain F -GLIBC_2.4 vfork F -GLIBC_2.4 wait F -GLIBC_2.4 waitpid F -GLIBC_2.4 write F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libresolv.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libresolv.abilist deleted file mode 100644 index c7023be532..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libresolv.abilist +++ /dev/null @@ -1,93 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __b64_ntop F -GLIBC_2.4 __b64_pton F -GLIBC_2.4 __dn_comp F -GLIBC_2.4 __dn_count_labels F -GLIBC_2.4 __dn_expand F -GLIBC_2.4 __dn_skipname F -GLIBC_2.4 __fp_nquery F -GLIBC_2.4 __fp_query F -GLIBC_2.4 __fp_resstat F -GLIBC_2.4 __hostalias F -GLIBC_2.4 __loc_aton F -GLIBC_2.4 __loc_ntoa F -GLIBC_2.4 __p_cdname F -GLIBC_2.4 __p_cdnname F -GLIBC_2.4 __p_class F -GLIBC_2.4 __p_class_syms D 0x54 -GLIBC_2.4 __p_fqname F -GLIBC_2.4 __p_fqnname F -GLIBC_2.4 __p_option F -GLIBC_2.4 __p_query F -GLIBC_2.4 __p_rcode F -GLIBC_2.4 __p_secstodate F -GLIBC_2.4 __p_time F -GLIBC_2.4 __p_type F -GLIBC_2.4 __p_type_syms D 0x228 -GLIBC_2.4 __putlong F -GLIBC_2.4 __putshort F -GLIBC_2.4 __res_close F -GLIBC_2.4 __res_dnok F -GLIBC_2.4 __res_hnok F -GLIBC_2.4 __res_hostalias F -GLIBC_2.4 __res_isourserver F -GLIBC_2.4 __res_mailok F -GLIBC_2.4 __res_mkquery F -GLIBC_2.4 __res_nameinquery F -GLIBC_2.4 __res_nmkquery F -GLIBC_2.4 __res_nquery F -GLIBC_2.4 __res_nquerydomain F -GLIBC_2.4 __res_nsearch F -GLIBC_2.4 __res_nsend F -GLIBC_2.4 __res_ownok F -GLIBC_2.4 __res_queriesmatch F -GLIBC_2.4 __res_query F -GLIBC_2.4 __res_querydomain F -GLIBC_2.4 __res_search F -GLIBC_2.4 __res_send F -GLIBC_2.4 __sym_ntop F -GLIBC_2.4 __sym_ntos F -GLIBC_2.4 __sym_ston F -GLIBC_2.4 _gethtbyaddr F -GLIBC_2.4 _gethtbyname F -GLIBC_2.4 _gethtbyname2 F -GLIBC_2.4 _gethtent F -GLIBC_2.4 _getlong F -GLIBC_2.4 _getshort F -GLIBC_2.4 _res_opcodes D 0x40 -GLIBC_2.4 _sethtent F -GLIBC_2.4 inet_net_ntop F -GLIBC_2.4 inet_net_pton F -GLIBC_2.4 inet_neta F -GLIBC_2.4 res_gethostbyaddr F -GLIBC_2.4 res_gethostbyname F -GLIBC_2.4 res_gethostbyname2 F -GLIBC_2.4 res_send_setqhook F -GLIBC_2.4 res_send_setrhook F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/librt.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/librt.abilist deleted file mode 100644 index b47aa0cc9c..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/librt.abilist +++ /dev/null @@ -1,42 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 aio_cancel F -GLIBC_2.4 aio_cancel64 F -GLIBC_2.4 aio_error F -GLIBC_2.4 aio_error64 F -GLIBC_2.4 aio_fsync F -GLIBC_2.4 aio_fsync64 F -GLIBC_2.4 aio_init F -GLIBC_2.4 aio_read F -GLIBC_2.4 aio_read64 F -GLIBC_2.4 aio_return F -GLIBC_2.4 aio_return64 F -GLIBC_2.4 aio_suspend F -GLIBC_2.4 aio_suspend64 F -GLIBC_2.4 aio_write F -GLIBC_2.4 aio_write64 F -GLIBC_2.4 clock_getcpuclockid F -GLIBC_2.4 clock_getres F -GLIBC_2.4 clock_gettime F -GLIBC_2.4 clock_nanosleep F -GLIBC_2.4 clock_settime F -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.4 mq_close F -GLIBC_2.4 mq_getattr F -GLIBC_2.4 mq_notify F -GLIBC_2.4 mq_open F -GLIBC_2.4 mq_receive F -GLIBC_2.4 mq_send F -GLIBC_2.4 mq_setattr F -GLIBC_2.4 mq_timedreceive F -GLIBC_2.4 mq_timedsend F -GLIBC_2.4 mq_unlink F -GLIBC_2.4 shm_open F -GLIBC_2.4 shm_unlink F -GLIBC_2.4 timer_create F -GLIBC_2.4 timer_delete F -GLIBC_2.4 timer_getoverrun F -GLIBC_2.4 timer_gettime F -GLIBC_2.4 timer_settime F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libthread_db.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libthread_db.abilist deleted file mode 100644 index 4cffcd2238..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libthread_db.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 td_init F -GLIBC_2.4 td_log F -GLIBC_2.4 td_symbol_list F -GLIBC_2.4 td_ta_clear_event F -GLIBC_2.4 td_ta_delete F -GLIBC_2.4 td_ta_enable_stats F -GLIBC_2.4 td_ta_event_addr F -GLIBC_2.4 td_ta_event_getmsg F -GLIBC_2.4 td_ta_get_nthreads F -GLIBC_2.4 td_ta_get_ph F -GLIBC_2.4 td_ta_get_stats F -GLIBC_2.4 td_ta_map_id2thr F -GLIBC_2.4 td_ta_map_lwp2thr F -GLIBC_2.4 td_ta_new F -GLIBC_2.4 td_ta_reset_stats F -GLIBC_2.4 td_ta_set_event F -GLIBC_2.4 td_ta_setconcurrency F -GLIBC_2.4 td_ta_thr_iter F -GLIBC_2.4 td_ta_tsd_iter F -GLIBC_2.4 td_thr_clear_event F -GLIBC_2.4 td_thr_dbresume F -GLIBC_2.4 td_thr_dbsuspend F -GLIBC_2.4 td_thr_event_enable F -GLIBC_2.4 td_thr_event_getmsg F -GLIBC_2.4 td_thr_get_info F -GLIBC_2.4 td_thr_getfpregs F -GLIBC_2.4 td_thr_getgregs F -GLIBC_2.4 td_thr_getxregs F -GLIBC_2.4 td_thr_getxregsize F -GLIBC_2.4 td_thr_set_event F -GLIBC_2.4 td_thr_setfpregs F -GLIBC_2.4 td_thr_setgregs F -GLIBC_2.4 td_thr_setprio F -GLIBC_2.4 td_thr_setsigpending F -GLIBC_2.4 td_thr_setxregs F -GLIBC_2.4 td_thr_sigsetmask F -GLIBC_2.4 td_thr_tls_get_addr F -GLIBC_2.4 td_thr_tlsbase F -GLIBC_2.4 td_thr_tsd F -GLIBC_2.4 td_thr_validate F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libutil.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libutil.abilist deleted file mode 100644 index 0b4f746094..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 forkpty F -GLIBC_2.4 login F -GLIBC_2.4 login_tty F -GLIBC_2.4 logout F -GLIBC_2.4 logwtmp F -GLIBC_2.4 openpty F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/shlib-versions b/sysdeps/unix/sysv/linux/m68k/coldfire/shlib-versions deleted file mode 100644 index 4309e4a368..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/shlib-versions +++ /dev/null @@ -1 +0,0 @@ -DEFAULT GLIBC_2.4 diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/sysdep.h b/sysdeps/unix/sysv/linux/m68k/coldfire/sysdep.h deleted file mode 100644 index e55e650cc9..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/sysdep.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINUX_M68K_COLDFIRE_SYSDEP_H -#define _LINUX_M68K_COLDFIRE_SYSDEP_H 1 - -#include -#include -#include - -#define SYSCALL_ERROR_LOAD_GOT(reg) \ - move.l &_GLOBAL_OFFSET_TABLE_@GOTPC, reg; \ - lea (-6, %pc, reg), reg - -#endif diff --git a/sysdeps/unix/sysv/linux/m68k/configure b/sysdeps/unix/sysv/linux/m68k/configure deleted file mode 100644 index 8e955387b7..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/configure +++ /dev/null @@ -1,9 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - case $machine in -m68k/coldfire) - ;; -*) - libc_cv_gcc_unwind_find_fde=yes - ;; -esac -ldd_rewrite_script=sysdeps/unix/sysv/linux/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/m68k/configure.ac b/sysdeps/unix/sysv/linux/m68k/configure.ac deleted file mode 100644 index c21ca9dd47..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/configure.ac +++ /dev/null @@ -1,10 +0,0 @@ -sinclude(./aclocal.m4)dnl Autoconf lossage -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -case $machine in -m68k/coldfire) - ;; -*) - libc_cv_gcc_unwind_find_fde=yes - ;; -esac -ldd_rewrite_script=sysdeps/unix/sysv/linux/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/m68k/dl-librecon.h b/sysdeps/unix/sysv/linux/m68k/dl-librecon.h deleted file mode 100644 index dbb4e75712..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/dl-librecon.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/dl-static.c b/sysdeps/unix/sysv/linux/m68k/dl-static.c deleted file mode 100644 index 048572df7f..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/dl-static.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Variable initialization. M68K version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef SHARED - -void -_dl_var_init (void *array[]) -{ - /* It has to match "variables" below. */ - enum - { - DL_PAGESIZE = 0, - }; - - GLRO(dl_pagesize) = *(size_t *) array[DL_PAGESIZE]; -} - -#else - -static void *variables[] = -{ - &GLRO(dl_pagesize) -}; - -static void -_dl_unprotect_relro (struct link_map *l) -{ - ElfW(Addr) start = ((l->l_addr + l->l_relro_addr) - & ~(GLRO(dl_pagesize) - 1)); - ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size) - & ~(GLRO(dl_pagesize) - 1)); - - if (start != end) - __mprotect ((void *) start, end - start, PROT_READ | PROT_WRITE); -} - -void -_dl_static_init (struct link_map *l) -{ - struct link_map *rtld_map = l; - struct r_scope_elem **scope; - const ElfW(Sym) *ref = NULL; - lookup_t loadbase; - void (*f) (void *[]); - size_t i; - - loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope, - NULL, 0, 1, NULL); - - for (scope = l->l_local_scope; *scope != NULL; scope++) - for (i = 0; i < (*scope)->r_nlist; i++) - if ((*scope)->r_list[i] == loadbase) - { - rtld_map = (*scope)->r_list[i]; - break; - } - - if (ref != NULL) - { - f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref); - _dl_unprotect_relro (rtld_map); - f (variables); - _dl_protect_relro (rtld_map); - } -} - -#endif diff --git a/sysdeps/unix/sysv/linux/m68k/fcntl.c b/sysdeps/unix/sysv/linux/m68k/fcntl.c deleted file mode 100644 index ea951bc4f9..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/fcntl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/fxstat.c b/sysdeps/unix/sysv/linux/m68k/fxstat.c deleted file mode 100644 index 4f219f0b9d..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/fxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/fxstatat.c b/sysdeps/unix/sysv/linux/m68k/fxstatat.c deleted file mode 100644 index 0f8b3135d8..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/fxstatat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/getdents64.c b/sysdeps/unix/sysv/linux/m68k/getdents64.c deleted file mode 100644 index 0c75fb5a06..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/getdents64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/getmsg.c b/sysdeps/unix/sysv/linux/m68k/getmsg.c deleted file mode 100644 index 3a1fa08525..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/getmsg.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/getpagesize.c b/sysdeps/unix/sysv/linux/m68k/getpagesize.c deleted file mode 100644 index 2233253793..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/getpagesize.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -#include -#include -#include - -/* Return the system page size. */ -int -__getpagesize (void) -{ -#ifdef __NR_getpagesize - int result; -#endif - - if (GLRO(dl_pagesize) != 0) - return GLRO(dl_pagesize); - -#ifdef __NR_getpagesize - INTERNAL_SYSCALL_DECL (err); - result = INTERNAL_SYSCALL (getpagesize, err, 0); - /* The only possible error is ENOSYS. */ - if (!INTERNAL_SYSCALL_ERROR_P (result, err)) - return result; -#endif - - return 4096; -} -libc_hidden_def (__getpagesize) -weak_alias (__getpagesize, getpagesize) diff --git a/sysdeps/unix/sysv/linux/m68k/getsysstats.c b/sysdeps/unix/sysv/linux/m68k/getsysstats.c deleted file mode 100644 index b919b1fe3e..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/getsysstats.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Determine various system internal values, Linux/m68k version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -/* We need to define a special parser for /proc/cpuinfo. */ -#define GET_NPROCS_PARSER(FD, BUFFER, CP, RE, BUFFER_END, RESULT) \ - do \ - { \ - (RESULT) = 0; \ - /* Read all lines and count the lines starting with the string \ - "CPU:". We don't have to fear extremely long lines since \ - the kernel will not generate them. 8192 bytes are really \ - enough. */ \ - char *l; \ - while ((l = next_line (FD, BUFFER, &CP, &RE, BUFFER_END)) != NULL) \ - if (strncmp (l, "CPU:", 4) == 0) \ - ++(RESULT); \ - } \ - while (0) - -#include diff --git a/sysdeps/unix/sysv/linux/m68k/glob64.c b/sysdeps/unix/sysv/linux/m68k/glob64.c deleted file mode 100644 index 82a9a296a7..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/glob64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/init-first.c b/sysdeps/unix/sysv/linux/m68k/init-first.c deleted file mode 100644 index 227dead30e..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/init-first.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Initialization code run first thing by the ELF startup code. Linux/m68k. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maxim Kuvyrkov , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Note: linking in vDSO to a static binary requires changes to - the main GLIBC proper. Not yet implemented. */ -#ifdef SHARED - -#include -#include - -static inline void -_libc_vdso_platform_setup (void) -{ - void *p; - - PREPARE_VERSION (linux26, "LINUX_2.6", 61765110); - - /* It may happen that rtld didn't initialize the vDSO, so fallback - to the syscall implementations if _dl_vdso_vsym returns NULL. - This may happen when a static executable dlopen's a dynamic library. - This really is nothing more than a workaround for rtld/csu - deficiency. Ideally, init code would setup the vDSO for static - binaries too. */ - - p = _dl_vdso_vsym ("__kernel_read_tp", &linux26); - if (p != NULL) - { - __vdso_read_tp = p; - __rtld___vdso_read_tp = p; - } - else - assert (__vdso_read_tp == (void *) __vdso_read_tp_stub); - - p = _dl_vdso_vsym ("__kernel_atomic_cmpxchg_32", &linux26); - if (p != NULL) - { - __vdso_atomic_cmpxchg_32 = p; - __rtld___vdso_atomic_cmpxchg_32 = p; - } - else - assert (__vdso_atomic_cmpxchg_32 - == (void *) __vdso_atomic_cmpxchg_32_stub); - - p = _dl_vdso_vsym ("__kernel_atomic_barrier", &linux26); - if (p != NULL) - { - __vdso_atomic_barrier = p; - __rtld___vdso_atomic_barrier = p; - } - else - assert (__vdso_atomic_barrier == (void *) __vdso_atomic_barrier_stub); -} - -#define VDSO_SETUP _libc_vdso_platform_setup - -#endif /* SHARED */ - -#include diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h deleted file mode 100644 index cdd5e6c935..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* m68k uses socketcall. */ -#define __ASSUME_SOCKETCALL 1 - -/* Direct socketcalls available with kernel 4.3. */ -#if __LINUX_KERNEL_VERSION >= 0x040300 -# define __ASSUME_SOCKET_SYSCALL 1 -# define __ASSUME_SOCKETPAIR_SYSCALL 1 -# define __ASSUME_BIND_SYSCALL 1 -# define __ASSUME_LISTEN_SYSCALL 1 -# define __ASSUME_GETSOCKOPT_SYSCALL 1 -# define __ASSUME_SETSOCKOPT_SYSCALL 1 -# define __ASSUME_GETSOCKNAME_SYSCALL 1 -# define __ASSUME_GETPEERNAME_SYSCALL 1 -# define __ASSUME_SHUTDOWN_SYSCALL 1 -#endif - -#include_next - -#undef __ASSUME_ACCEPT_SYSCALL - -#if __LINUX_KERNEL_VERSION < 0x040300 -# undef __ASSUME_ACCEPT4_SYSCALL -# undef __ASSUME_RECVMMSG_SYSCALL -# undef __ASSUME_SENDMMSG_SYSCALL -# undef __ASSUME_SENDMSG_SYSCALL -# undef __ASSUME_RECVMSG_SYSCALL -# undef __ASSUME_CONNECT_SYSCALL -# undef __ASSUME_RECVFROM_SYSCALL -# undef __ASSUME_SENDTO_SYSCALL -#endif - -/* No support for PI futexes or robust mutexes before 3.10 for m68k. */ -#if __LINUX_KERNEL_VERSION < 0x030a00 -# undef __ASSUME_SET_ROBUST_LIST -#endif - -/* m68k only supports ipc syscall. */ -#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS diff --git a/sysdeps/unix/sysv/linux/m68k/ldconfig.h b/sysdeps/unix/sysv/linux/m68k/ldconfig.h deleted file mode 100644 index 953f192bcd..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/ldconfig.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/ldsodefs.h b/sysdeps/unix/sysv/linux/m68k/ldsodefs.h deleted file mode 100644 index 93a18bd18b..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/ldsodefs.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. M68K. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LDSODEFS_H - -/* Get the real definitions. */ -#include_next - -/* Now define our stuff. */ - -/* We need special support to initialize DSO loaded for statically linked - binaries. */ -extern void _dl_static_init (struct link_map *map); -#undef DL_STATIC_INIT -#define DL_STATIC_INIT(map) _dl_static_init (map) - -#endif /* ldsodefs.h */ diff --git a/sysdeps/unix/sysv/linux/m68k/libc-m68k-vdso.c b/sysdeps/unix/sysv/linux/m68k/libc-m68k-vdso.c deleted file mode 100644 index 45982e99b9..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/libc-m68k-vdso.c +++ /dev/null @@ -1 +0,0 @@ -#include "m68k-vdso.c" diff --git a/sysdeps/unix/sysv/linux/m68k/localplt.data b/sysdeps/unix/sysv/linux/m68k/localplt.data deleted file mode 100644 index 1a2acfdb93..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/localplt.data +++ /dev/null @@ -1,17 +0,0 @@ -libc.so: _Unwind_Find_FDE -libc.so: __m68k_read_tp -libc.so: calloc -libc.so: free -libc.so: malloc -libc.so: memalign -libc.so: realloc -libm.so: matherr -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/unix/sysv/linux/m68k/lockf64.c b/sysdeps/unix/sysv/linux/m68k/lockf64.c deleted file mode 100644 index a88f5a784a..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/lockf64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/lxstat.c b/sysdeps/unix/sysv/linux/m68k/lxstat.c deleted file mode 100644 index 0efa0aea49..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/lxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/Makefile b/sysdeps/unix/sysv/linux/m68k/m680x0/Makefile deleted file mode 100644 index 91bd35800a..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext_i.sym -endif diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/getcontext.S b/sysdeps/unix/sysv/linux/m68k/m680x0/getcontext.S deleted file mode 100644 index d8a0cc7e91..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/getcontext.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Save current context. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - - -ENTRY(__getcontext) - /* Load address of the context data structure. */ - move.l 4(%sp), %a0 - - /* Save the preserved registers and the return address. */ - movem.l %d2-%d7, oGREGS+2*4(%a0) - movem.l %a2-%a6, oGREGS+10*4(%a0) - lea 4(%sp), %a1 - move.l %a1, oSP(%a0) - move.l (%sp), oPC(%a0) - fmovem.l %fpsr/%fpcr/%fpiar, oFPREGS(%a0) - fmovem.x %fp2-%fp7, oFP2(%a0) - cfi_def_cfa (%a0, 0) - cfi_offset (%d2, oGREGS+2*4) - cfi_offset (%d3, oGREGS+3*4) - cfi_offset (%pc, oPC) - - /* Save the current signal mask. */ - lea oSIGMASK(%a0), %a1 - move.l %a1, %d3 - clr.l %d2 - move.l #SIG_SETMASK, %d1 - move.l #__NR_sigprocmask, %d0 - trap #0 - /* Restore registers. */ - move.l oGREGS+2*4(%a0), %d2 - cfi_restore (%d2) - move.l oGREGS+3*4(%a0), %d3 - cfi_restore (%d3) - cfi_def_cfa (%sp, 4) - cfi_offset (%pc, -4) - cmp.l #-4095, %d0 /* Check %d0 for error. */ - jcc SYSCALL_ERROR_LABEL /* Jump to error handler. */ - -0: /* All done, return 0 for success. */ - clr.l %d0 - rts -PSEUDO_END(__getcontext) - -weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist deleted file mode 100644 index 3907c9da33..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist +++ /dev/null @@ -1,13 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _r_debug D 0x14 -GLIBC_2.0 calloc F -GLIBC_2.0 free F -GLIBC_2.0 malloc F -GLIBC_2.0 realloc F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __libc_stack_end D 0x4 -GLIBC_2.1 _dl_mcount F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __tls_get_addr F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __stack_chk_guard D 0x4 diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libBrokenLocale.abilist deleted file mode 100644 index 4a56bb68a3..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libanl.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libanl.abilist deleted file mode 100644 index edabfb436e..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 gai_cancel F -GLIBC_2.2.3 gai_error F -GLIBC_2.2.3 gai_suspend F -GLIBC_2.2.3 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist deleted file mode 100644 index a36739d41c..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++ /dev/null @@ -1,2288 +0,0 @@ -GCC_3.0 GCC_3.0 A -GCC_3.0 _Unwind_Find_FDE F -GCC_3.0 __deregister_frame_info_bases F -GCC_3.0 __register_frame_info_bases F -GCC_3.0 __register_frame_info_table_bases F -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_adjust_column F -GLIBC_2.0 _IO_default_doallocate F -GLIBC_2.0 _IO_default_finish F -GLIBC_2.0 _IO_default_pbackfail F -GLIBC_2.0 _IO_default_uflow F -GLIBC_2.0 _IO_default_xsgetn F -GLIBC_2.0 _IO_default_xsputn F -GLIBC_2.0 _IO_do_write F -GLIBC_2.0 _IO_doallocbuf F -GLIBC_2.0 _IO_fclose F -GLIBC_2.0 _IO_fdopen F -GLIBC_2.0 _IO_feof F -GLIBC_2.0 _IO_ferror F -GLIBC_2.0 _IO_fflush F -GLIBC_2.0 _IO_fgetpos F -GLIBC_2.0 _IO_fgets F -GLIBC_2.0 _IO_file_attach F -GLIBC_2.0 _IO_file_close F -GLIBC_2.0 _IO_file_close_it F -GLIBC_2.0 _IO_file_doallocate F -GLIBC_2.0 _IO_file_fopen F -GLIBC_2.0 _IO_file_init F -GLIBC_2.0 _IO_file_jumps D 0x54 -GLIBC_2.0 _IO_file_open F -GLIBC_2.0 _IO_file_overflow F -GLIBC_2.0 _IO_file_read F -GLIBC_2.0 _IO_file_seek F -GLIBC_2.0 _IO_file_seekoff F -GLIBC_2.0 _IO_file_setbuf F -GLIBC_2.0 _IO_file_stat F -GLIBC_2.0 _IO_file_sync F -GLIBC_2.0 _IO_file_underflow F -GLIBC_2.0 _IO_file_write F -GLIBC_2.0 _IO_file_xsputn F -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_flush_all F -GLIBC_2.0 _IO_flush_all_linebuffered F -GLIBC_2.0 _IO_fopen F -GLIBC_2.0 _IO_fprintf F -GLIBC_2.0 _IO_fputs F -GLIBC_2.0 _IO_fread F -GLIBC_2.0 _IO_free_backup_area F -GLIBC_2.0 _IO_fsetpos F -GLIBC_2.0 _IO_ftell F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 _IO_fwrite F -GLIBC_2.0 _IO_getc F -GLIBC_2.0 _IO_getline F -GLIBC_2.0 _IO_gets F -GLIBC_2.0 _IO_init F -GLIBC_2.0 _IO_init_marker F -GLIBC_2.0 _IO_link_in F -GLIBC_2.0 _IO_list_all D 0x4 -GLIBC_2.0 _IO_marker_delta F -GLIBC_2.0 _IO_marker_difference F -GLIBC_2.0 _IO_padn F -GLIBC_2.0 _IO_peekc_locked F -GLIBC_2.0 _IO_popen F -GLIBC_2.0 _IO_printf F -GLIBC_2.0 _IO_proc_close F -GLIBC_2.0 _IO_proc_open F -GLIBC_2.0 _IO_putc F -GLIBC_2.0 _IO_puts F -GLIBC_2.0 _IO_remove_marker F -GLIBC_2.0 _IO_seekmark F -GLIBC_2.0 _IO_seekoff F -GLIBC_2.0 _IO_seekpos F -GLIBC_2.0 _IO_setb F -GLIBC_2.0 _IO_setbuffer F -GLIBC_2.0 _IO_setvbuf F -GLIBC_2.0 _IO_sgetn F -GLIBC_2.0 _IO_sprintf F -GLIBC_2.0 _IO_sputbackc F -GLIBC_2.0 _IO_sscanf F -GLIBC_2.0 _IO_stderr_ D 0x50 -GLIBC_2.0 _IO_stdin_ D 0x50 -GLIBC_2.0 _IO_stdout_ D 0x50 -GLIBC_2.0 _IO_str_init_readonly F -GLIBC_2.0 _IO_str_init_static F -GLIBC_2.0 _IO_str_overflow F -GLIBC_2.0 _IO_str_pbackfail F -GLIBC_2.0 _IO_str_seekoff F -GLIBC_2.0 _IO_str_underflow F -GLIBC_2.0 _IO_sungetc F -GLIBC_2.0 _IO_switch_to_get_mode F -GLIBC_2.0 _IO_un_link F -GLIBC_2.0 _IO_ungetc F -GLIBC_2.0 _IO_unsave_markers F -GLIBC_2.0 _IO_vfprintf F -GLIBC_2.0 _IO_vfscanf F -GLIBC_2.0 _IO_vsprintf F -GLIBC_2.0 ___brk_addr D 0x4 -GLIBC_2.0 __adjtimex F -GLIBC_2.0 __after_morecore_hook D 0x4 -GLIBC_2.0 __argz_count F -GLIBC_2.0 __argz_next F -GLIBC_2.0 __argz_stringify F -GLIBC_2.0 __assert_fail F -GLIBC_2.0 __assert_perror_fail F -GLIBC_2.0 __bsd_getpgrp F -GLIBC_2.0 __bzero F -GLIBC_2.0 __check_rhosts_file D 0x4 -GLIBC_2.0 __clone F -GLIBC_2.0 __close F -GLIBC_2.0 __cmsg_nxthdr F -GLIBC_2.0 __connect F -GLIBC_2.0 __ctype32_b D 0x4 -GLIBC_2.0 __ctype_b D 0x4 -GLIBC_2.0 __ctype_get_mb_cur_max F -GLIBC_2.0 __ctype_tolower D 0x4 -GLIBC_2.0 __ctype_toupper D 0x4 -GLIBC_2.0 __curbrk D 0x4 -GLIBC_2.0 __daylight D 0x4 -GLIBC_2.0 __dcgettext F -GLIBC_2.0 __default_morecore F -GLIBC_2.0 __deregister_frame F -GLIBC_2.0 __deregister_frame_info F -GLIBC_2.0 __dgettext F -GLIBC_2.0 __divdi3 F -GLIBC_2.0 __dup2 F -GLIBC_2.0 __environ D 0x4 -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __ffs F -GLIBC_2.0 __finite F -GLIBC_2.0 __finitef F -GLIBC_2.0 __finitel F -GLIBC_2.0 __fork F -GLIBC_2.0 __fpu_control D 0x4 -GLIBC_2.0 __frame_state_for F -GLIBC_2.0 __free_hook D 0x4 -GLIBC_2.0 __fxstat F -GLIBC_2.0 __getdelim F -GLIBC_2.0 __getpagesize F -GLIBC_2.0 __getpgid F -GLIBC_2.0 __getpid F -GLIBC_2.0 __gettimeofday F -GLIBC_2.0 __gmtime_r F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __isinf F -GLIBC_2.0 __isinff F -GLIBC_2.0 __isinfl F -GLIBC_2.0 __isnan F -GLIBC_2.0 __isnanf F -GLIBC_2.0 __isnanl F -GLIBC_2.0 __iswctype F -GLIBC_2.0 __ivaliduser F -GLIBC_2.0 __libc_calloc F -GLIBC_2.0 __libc_free F -GLIBC_2.0 __libc_init_first F -GLIBC_2.0 __libc_mallinfo F -GLIBC_2.0 __libc_malloc F -GLIBC_2.0 __libc_mallopt F -GLIBC_2.0 __libc_memalign F -GLIBC_2.0 __libc_pvalloc F -GLIBC_2.0 __libc_realloc F -GLIBC_2.0 __libc_start_main F -GLIBC_2.0 __libc_valloc F -GLIBC_2.0 __lseek F -GLIBC_2.0 __lxstat F -GLIBC_2.0 __malloc_hook D 0x4 -GLIBC_2.0 __malloc_initialize_hook D 0x4 -GLIBC_2.0 __mbrlen F -GLIBC_2.0 __mbrtowc F -GLIBC_2.0 __memalign_hook D 0x4 -GLIBC_2.0 __mempcpy F -GLIBC_2.0 __moddi3 F -GLIBC_2.0 __monstartup F -GLIBC_2.0 __morecore D 0x4 -GLIBC_2.0 __nss_configure_lookup F -GLIBC_2.0 __nss_database_lookup F -GLIBC_2.0 __nss_group_lookup F -GLIBC_2.0 __nss_hosts_lookup F -GLIBC_2.0 __nss_next F -GLIBC_2.0 __nss_passwd_lookup F -GLIBC_2.0 __open F -GLIBC_2.0 __overflow F -GLIBC_2.0 __pipe F -GLIBC_2.0 __printf_fp F -GLIBC_2.0 __profile_frequency F -GLIBC_2.0 __progname D 0x4 -GLIBC_2.0 __progname_full D 0x4 -GLIBC_2.0 __rcmd_errstr D 0x4 -GLIBC_2.0 __read F -GLIBC_2.0 __realloc_hook D 0x4 -GLIBC_2.0 __register_frame F -GLIBC_2.0 __register_frame_info F -GLIBC_2.0 __register_frame_info_table F -GLIBC_2.0 __register_frame_table F -GLIBC_2.0 __res_randomid F -GLIBC_2.0 __sbrk F -GLIBC_2.0 __sched_get_priority_max F -GLIBC_2.0 __sched_get_priority_min F -GLIBC_2.0 __sched_getparam F -GLIBC_2.0 __sched_getscheduler F -GLIBC_2.0 __sched_setscheduler F -GLIBC_2.0 __sched_yield F -GLIBC_2.0 __secure_getenv F -GLIBC_2.0 __select F -GLIBC_2.0 __send F -GLIBC_2.0 __setpgid F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __sigaddset F -GLIBC_2.0 __sigdelset F -GLIBC_2.0 __sigismember F -GLIBC_2.0 __sigpause F -GLIBC_2.0 __sigsetjmp F -GLIBC_2.0 __stpcpy F -GLIBC_2.0 __stpncpy F -GLIBC_2.0 __strcasecmp F -GLIBC_2.0 __strdup F -GLIBC_2.0 __strerror_r F -GLIBC_2.0 __strtod_internal F -GLIBC_2.0 __strtof_internal F -GLIBC_2.0 __strtok_r F -GLIBC_2.0 __strtol_internal F -GLIBC_2.0 __strtold_internal F -GLIBC_2.0 __strtoll_internal F -GLIBC_2.0 __strtoq_internal F -GLIBC_2.0 __strtoul_internal F -GLIBC_2.0 __strtoull_internal F -GLIBC_2.0 __strtouq_internal F -GLIBC_2.0 __sysv_signal F -GLIBC_2.0 __timezone D 0x4 -GLIBC_2.0 __tzname D 0x8 -GLIBC_2.0 __udivdi3 F -GLIBC_2.0 __uflow F -GLIBC_2.0 __umoddi3 F -GLIBC_2.0 __underflow F -GLIBC_2.0 __vfscanf F -GLIBC_2.0 __vsnprintf F -GLIBC_2.0 __vsscanf F -GLIBC_2.0 __wait F -GLIBC_2.0 __waitpid F -GLIBC_2.0 __wcstod_internal F -GLIBC_2.0 __wcstof_internal F -GLIBC_2.0 __wcstol_internal F -GLIBC_2.0 __wcstold_internal F -GLIBC_2.0 __wcstoll_internal F -GLIBC_2.0 __wcstoul_internal F -GLIBC_2.0 __wcstoull_internal F -GLIBC_2.0 __write F -GLIBC_2.0 __xmknod F -GLIBC_2.0 __xpg_basename F -GLIBC_2.0 __xstat F -GLIBC_2.0 _environ D 0x4 -GLIBC_2.0 _exit F -GLIBC_2.0 _libc_intl_domainname D 0x5 -GLIBC_2.0 _longjmp F -GLIBC_2.0 _mcleanup F -GLIBC_2.0 _mcount F -GLIBC_2.0 _nl_default_dirname D 0x12 -GLIBC_2.0 _nl_domain_bindings D 0x4 -GLIBC_2.0 _nl_msg_cat_cntr D 0x4 -GLIBC_2.0 _null_auth D 0xc -GLIBC_2.0 _obstack D 0x4 -GLIBC_2.0 _obstack_allocated_p F -GLIBC_2.0 _obstack_begin F -GLIBC_2.0 _obstack_begin_1 F -GLIBC_2.0 _obstack_free F -GLIBC_2.0 _obstack_memory_used F -GLIBC_2.0 _obstack_newchunk F -GLIBC_2.0 _res D 0x1fe -GLIBC_2.0 _rpc_dtablesize F -GLIBC_2.0 _seterr_reply F -GLIBC_2.0 _setjmp F -GLIBC_2.0 _sys_errlist D 0x1ec -GLIBC_2.0 _sys_nerr D 0x4 -GLIBC_2.0 _sys_siglist D 0x80 -GLIBC_2.0 _tolower F -GLIBC_2.0 _toupper F -GLIBC_2.0 a64l F -GLIBC_2.0 abort F -GLIBC_2.0 abs F -GLIBC_2.0 accept F -GLIBC_2.0 access F -GLIBC_2.0 acct F -GLIBC_2.0 addmntent F -GLIBC_2.0 adjtime F -GLIBC_2.0 adjtimex F -GLIBC_2.0 advance F -GLIBC_2.0 alarm F -GLIBC_2.0 alphasort F -GLIBC_2.0 argz_add F -GLIBC_2.0 argz_add_sep F -GLIBC_2.0 argz_append F -GLIBC_2.0 argz_count F -GLIBC_2.0 argz_create F -GLIBC_2.0 argz_create_sep F -GLIBC_2.0 argz_delete F -GLIBC_2.0 argz_extract F -GLIBC_2.0 argz_insert F -GLIBC_2.0 argz_next F -GLIBC_2.0 argz_replace F -GLIBC_2.0 argz_stringify F -GLIBC_2.0 asctime F -GLIBC_2.0 asctime_r F -GLIBC_2.0 asprintf F -GLIBC_2.0 atexit F -GLIBC_2.0 atof F -GLIBC_2.0 atoi F -GLIBC_2.0 atol F -GLIBC_2.0 atoll F -GLIBC_2.0 authnone_create F -GLIBC_2.0 authunix_create F -GLIBC_2.0 authunix_create_default F -GLIBC_2.0 basename F -GLIBC_2.0 bcmp F -GLIBC_2.0 bcopy F -GLIBC_2.0 bdflush F -GLIBC_2.0 bind F -GLIBC_2.0 bindresvport F -GLIBC_2.0 bindtextdomain F -GLIBC_2.0 brk F -GLIBC_2.0 bsd_signal F -GLIBC_2.0 bsearch F -GLIBC_2.0 btowc F -GLIBC_2.0 bzero F -GLIBC_2.0 cacheflush F -GLIBC_2.0 calloc F -GLIBC_2.0 callrpc F -GLIBC_2.0 canonicalize_file_name F -GLIBC_2.0 catclose F -GLIBC_2.0 catgets F -GLIBC_2.0 catopen F -GLIBC_2.0 cfgetispeed F -GLIBC_2.0 cfgetospeed F -GLIBC_2.0 cfmakeraw F -GLIBC_2.0 cfree F -GLIBC_2.0 cfsetispeed F -GLIBC_2.0 cfsetospeed F -GLIBC_2.0 cfsetspeed F -GLIBC_2.0 chdir F -GLIBC_2.0 chflags F -GLIBC_2.0 chmod F -GLIBC_2.0 chown F -GLIBC_2.0 chroot F -GLIBC_2.0 clearenv F -GLIBC_2.0 clearerr F -GLIBC_2.0 clearerr_unlocked F -GLIBC_2.0 clnt_broadcast F -GLIBC_2.0 clnt_create F -GLIBC_2.0 clnt_pcreateerror F -GLIBC_2.0 clnt_perrno F -GLIBC_2.0 clnt_perror F -GLIBC_2.0 clnt_spcreateerror F -GLIBC_2.0 clnt_sperrno F -GLIBC_2.0 clnt_sperror F -GLIBC_2.0 clntraw_create F -GLIBC_2.0 clnttcp_create F -GLIBC_2.0 clntudp_bufcreate F -GLIBC_2.0 clntudp_create F -GLIBC_2.0 clock F -GLIBC_2.0 clone F -GLIBC_2.0 close F -GLIBC_2.0 closedir F -GLIBC_2.0 closelog F -GLIBC_2.0 confstr F -GLIBC_2.0 connect F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 creat F -GLIBC_2.0 create_module F -GLIBC_2.0 ctermid F -GLIBC_2.0 ctime F -GLIBC_2.0 ctime_r F -GLIBC_2.0 cuserid F -GLIBC_2.0 daemon F -GLIBC_2.0 daylight D 0x4 -GLIBC_2.0 dcgettext F -GLIBC_2.0 delete_module F -GLIBC_2.0 dgettext F -GLIBC_2.0 difftime F -GLIBC_2.0 dirfd F -GLIBC_2.0 dirname F -GLIBC_2.0 div F -GLIBC_2.0 dprintf F -GLIBC_2.0 drand48 F -GLIBC_2.0 drand48_r F -GLIBC_2.0 dup F -GLIBC_2.0 dup2 F -GLIBC_2.0 dysize F -GLIBC_2.0 ecvt F -GLIBC_2.0 ecvt_r F -GLIBC_2.0 endaliasent F -GLIBC_2.0 endfsent F -GLIBC_2.0 endgrent F -GLIBC_2.0 endhostent F -GLIBC_2.0 endmntent F -GLIBC_2.0 endnetent F -GLIBC_2.0 endnetgrent F -GLIBC_2.0 endprotoent F -GLIBC_2.0 endpwent F -GLIBC_2.0 endrpcent F -GLIBC_2.0 endservent F -GLIBC_2.0 endspent F -GLIBC_2.0 endttyent F -GLIBC_2.0 endusershell F -GLIBC_2.0 endutent F -GLIBC_2.0 environ D 0x4 -GLIBC_2.0 envz_add F -GLIBC_2.0 envz_entry F -GLIBC_2.0 envz_get F -GLIBC_2.0 envz_merge F -GLIBC_2.0 envz_remove F -GLIBC_2.0 envz_strip F -GLIBC_2.0 erand48 F -GLIBC_2.0 erand48_r F -GLIBC_2.0 err F -GLIBC_2.0 error F -GLIBC_2.0 error_at_line F -GLIBC_2.0 error_message_count D 0x4 -GLIBC_2.0 error_one_per_line D 0x4 -GLIBC_2.0 error_print_progname D 0x4 -GLIBC_2.0 errx F -GLIBC_2.0 ether_aton F -GLIBC_2.0 ether_aton_r F -GLIBC_2.0 ether_hostton F -GLIBC_2.0 ether_line F -GLIBC_2.0 ether_ntoa F -GLIBC_2.0 ether_ntoa_r F -GLIBC_2.0 ether_ntohost F -GLIBC_2.0 euidaccess F -GLIBC_2.0 execl F -GLIBC_2.0 execle F -GLIBC_2.0 execlp F -GLIBC_2.0 execv F -GLIBC_2.0 execve F -GLIBC_2.0 execvp F -GLIBC_2.0 exit F -GLIBC_2.0 fchdir F -GLIBC_2.0 fchflags F -GLIBC_2.0 fchmod F -GLIBC_2.0 fchown F -GLIBC_2.0 fclose F -GLIBC_2.0 fcloseall F -GLIBC_2.0 fcntl F -GLIBC_2.0 fcvt F -GLIBC_2.0 fcvt_r F -GLIBC_2.0 fdatasync F -GLIBC_2.0 fdopen F -GLIBC_2.0 feof F -GLIBC_2.0 feof_unlocked F -GLIBC_2.0 ferror F -GLIBC_2.0 ferror_unlocked F -GLIBC_2.0 fexecve F -GLIBC_2.0 fflush F -GLIBC_2.0 fflush_unlocked F -GLIBC_2.0 ffs F -GLIBC_2.0 fgetc F -GLIBC_2.0 fgetgrent F -GLIBC_2.0 fgetgrent_r F -GLIBC_2.0 fgetpos F -GLIBC_2.0 fgetpwent F -GLIBC_2.0 fgetpwent_r F -GLIBC_2.0 fgets F -GLIBC_2.0 fgetspent F -GLIBC_2.0 fgetspent_r F -GLIBC_2.0 fileno F -GLIBC_2.0 fileno_unlocked F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 flock F -GLIBC_2.0 flockfile F -GLIBC_2.0 fnmatch F -GLIBC_2.0 fopen F -GLIBC_2.0 fopencookie F -GLIBC_2.0 fork F -GLIBC_2.0 fpathconf F -GLIBC_2.0 fprintf F -GLIBC_2.0 fputc F -GLIBC_2.0 fputc_unlocked F -GLIBC_2.0 fputs F -GLIBC_2.0 fread F -GLIBC_2.0 free F -GLIBC_2.0 freeaddrinfo F -GLIBC_2.0 freopen F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 fscanf F -GLIBC_2.0 fseek F -GLIBC_2.0 fsetpos F -GLIBC_2.0 fstatfs F -GLIBC_2.0 fsync F -GLIBC_2.0 ftell F -GLIBC_2.0 ftime F -GLIBC_2.0 ftok F -GLIBC_2.0 ftruncate F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 fts_children F -GLIBC_2.0 fts_close F -GLIBC_2.0 fts_open F -GLIBC_2.0 fts_read F -GLIBC_2.0 fts_set F -GLIBC_2.0 ftw F -GLIBC_2.0 funlockfile F -GLIBC_2.0 fwrite F -GLIBC_2.0 gcvt F -GLIBC_2.0 get_avphys_pages F -GLIBC_2.0 get_current_dir_name F -GLIBC_2.0 get_kernel_syms F -GLIBC_2.0 get_myaddress F -GLIBC_2.0 get_nprocs F -GLIBC_2.0 get_nprocs_conf F -GLIBC_2.0 get_phys_pages F -GLIBC_2.0 getaddrinfo F -GLIBC_2.0 getaliasbyname F -GLIBC_2.0 getaliasbyname_r F -GLIBC_2.0 getaliasent F -GLIBC_2.0 getaliasent_r F -GLIBC_2.0 getc F -GLIBC_2.0 getc_unlocked F -GLIBC_2.0 getchar F -GLIBC_2.0 getchar_unlocked F -GLIBC_2.0 getcwd F -GLIBC_2.0 getdelim F -GLIBC_2.0 getdirentries F -GLIBC_2.0 getdomainname F -GLIBC_2.0 getdtablesize F -GLIBC_2.0 getegid F -GLIBC_2.0 getenv F -GLIBC_2.0 geteuid F -GLIBC_2.0 getfsent F -GLIBC_2.0 getfsfile F -GLIBC_2.0 getfsspec F -GLIBC_2.0 getgid F -GLIBC_2.0 getgrent F -GLIBC_2.0 getgrent_r F -GLIBC_2.0 getgrgid F -GLIBC_2.0 getgrgid_r F -GLIBC_2.0 getgrnam F -GLIBC_2.0 getgrnam_r F -GLIBC_2.0 getgroups F -GLIBC_2.0 gethostbyaddr F -GLIBC_2.0 gethostbyaddr_r F -GLIBC_2.0 gethostbyname F -GLIBC_2.0 gethostbyname2 F -GLIBC_2.0 gethostbyname2_r F -GLIBC_2.0 gethostbyname_r F -GLIBC_2.0 gethostent F -GLIBC_2.0 gethostent_r F -GLIBC_2.0 gethostid F -GLIBC_2.0 gethostname F -GLIBC_2.0 getitimer F -GLIBC_2.0 getline F -GLIBC_2.0 getlogin F -GLIBC_2.0 getlogin_r F -GLIBC_2.0 getmntent F -GLIBC_2.0 getmntent_r F -GLIBC_2.0 getnetbyaddr F -GLIBC_2.0 getnetbyaddr_r F -GLIBC_2.0 getnetbyname F -GLIBC_2.0 getnetbyname_r F -GLIBC_2.0 getnetent F -GLIBC_2.0 getnetent_r F -GLIBC_2.0 getnetgrent F -GLIBC_2.0 getnetgrent_r F -GLIBC_2.0 getopt F -GLIBC_2.0 getopt_long F -GLIBC_2.0 getopt_long_only F -GLIBC_2.0 getpagesize F -GLIBC_2.0 getpass F -GLIBC_2.0 getpeername F -GLIBC_2.0 getpgid F -GLIBC_2.0 getpgrp F -GLIBC_2.0 getpid F -GLIBC_2.0 getppid F -GLIBC_2.0 getpriority F -GLIBC_2.0 getprotobyname F -GLIBC_2.0 getprotobyname_r F -GLIBC_2.0 getprotobynumber F -GLIBC_2.0 getprotobynumber_r F -GLIBC_2.0 getprotoent F -GLIBC_2.0 getprotoent_r F -GLIBC_2.0 getpublickey F -GLIBC_2.0 getpw F -GLIBC_2.0 getpwent F -GLIBC_2.0 getpwent_r F -GLIBC_2.0 getpwnam F -GLIBC_2.0 getpwnam_r F -GLIBC_2.0 getpwuid F -GLIBC_2.0 getpwuid_r F -GLIBC_2.0 getresgid F -GLIBC_2.0 getresuid F -GLIBC_2.0 getrlimit F -GLIBC_2.0 getrpcbyname F -GLIBC_2.0 getrpcbyname_r F -GLIBC_2.0 getrpcbynumber F -GLIBC_2.0 getrpcbynumber_r F -GLIBC_2.0 getrpcent F -GLIBC_2.0 getrpcent_r F -GLIBC_2.0 getrpcport F -GLIBC_2.0 getrusage F -GLIBC_2.0 gets F -GLIBC_2.0 getsecretkey F -GLIBC_2.0 getservbyname F -GLIBC_2.0 getservbyname_r F -GLIBC_2.0 getservbyport F -GLIBC_2.0 getservbyport_r F -GLIBC_2.0 getservent F -GLIBC_2.0 getservent_r F -GLIBC_2.0 getsid F -GLIBC_2.0 getsockname F -GLIBC_2.0 getsockopt F -GLIBC_2.0 getspent F -GLIBC_2.0 getspent_r F -GLIBC_2.0 getspnam F -GLIBC_2.0 getspnam_r F -GLIBC_2.0 getsubopt F -GLIBC_2.0 gettext F -GLIBC_2.0 gettimeofday F -GLIBC_2.0 getttyent F -GLIBC_2.0 getttynam F -GLIBC_2.0 getuid F -GLIBC_2.0 getusershell F -GLIBC_2.0 getutent F -GLIBC_2.0 getutent_r F -GLIBC_2.0 getutid F -GLIBC_2.0 getutid_r F -GLIBC_2.0 getutline F -GLIBC_2.0 getutline_r F -GLIBC_2.0 getw F -GLIBC_2.0 getwd F -GLIBC_2.0 glob F -GLIBC_2.0 glob_pattern_p F -GLIBC_2.0 globfree F -GLIBC_2.0 gmtime F -GLIBC_2.0 gmtime_r F -GLIBC_2.0 group_member F -GLIBC_2.0 gsignal F -GLIBC_2.0 gtty F -GLIBC_2.0 h_errlist D 0x14 -GLIBC_2.0 h_nerr D 0x4 -GLIBC_2.0 hasmntopt F -GLIBC_2.0 hcreate F -GLIBC_2.0 hcreate_r F -GLIBC_2.0 hdestroy F -GLIBC_2.0 hdestroy_r F -GLIBC_2.0 herror F -GLIBC_2.0 hsearch F -GLIBC_2.0 hsearch_r F -GLIBC_2.0 hstrerror F -GLIBC_2.0 htonl F -GLIBC_2.0 htons F -GLIBC_2.0 index F -GLIBC_2.0 inet_addr F -GLIBC_2.0 inet_aton F -GLIBC_2.0 inet_lnaof F -GLIBC_2.0 inet_makeaddr F -GLIBC_2.0 inet_netof F -GLIBC_2.0 inet_network F -GLIBC_2.0 inet_nsap_addr F -GLIBC_2.0 inet_nsap_ntoa F -GLIBC_2.0 inet_ntoa F -GLIBC_2.0 inet_ntop F -GLIBC_2.0 inet_pton F -GLIBC_2.0 init_module F -GLIBC_2.0 initgroups F -GLIBC_2.0 initstate F -GLIBC_2.0 initstate_r F -GLIBC_2.0 innetgr F -GLIBC_2.0 insque F -GLIBC_2.0 ioctl F -GLIBC_2.0 iruserok F -GLIBC_2.0 isalnum F -GLIBC_2.0 isalpha F -GLIBC_2.0 isascii F -GLIBC_2.0 isatty F -GLIBC_2.0 isblank F -GLIBC_2.0 iscntrl F -GLIBC_2.0 isdigit F -GLIBC_2.0 isfdtype F -GLIBC_2.0 isgraph F -GLIBC_2.0 isinf F -GLIBC_2.0 isinff F -GLIBC_2.0 isinfl F -GLIBC_2.0 islower F -GLIBC_2.0 isnan F -GLIBC_2.0 isnanf F -GLIBC_2.0 isnanl F -GLIBC_2.0 isprint F -GLIBC_2.0 ispunct F -GLIBC_2.0 isspace F -GLIBC_2.0 isupper F -GLIBC_2.0 iswalnum F -GLIBC_2.0 iswalpha F -GLIBC_2.0 iswcntrl F -GLIBC_2.0 iswctype F -GLIBC_2.0 iswdigit F -GLIBC_2.0 iswgraph F -GLIBC_2.0 iswlower F -GLIBC_2.0 iswprint F -GLIBC_2.0 iswpunct F -GLIBC_2.0 iswspace F -GLIBC_2.0 iswupper F -GLIBC_2.0 iswxdigit F -GLIBC_2.0 isxdigit F -GLIBC_2.0 jrand48 F -GLIBC_2.0 jrand48_r F -GLIBC_2.0 kill F -GLIBC_2.0 killpg F -GLIBC_2.0 klogctl F -GLIBC_2.0 l64a F -GLIBC_2.0 labs F -GLIBC_2.0 lchown F -GLIBC_2.0 lckpwdf F -GLIBC_2.0 lcong48 F -GLIBC_2.0 lcong48_r F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 ldiv F -GLIBC_2.0 lfind F -GLIBC_2.0 link F -GLIBC_2.0 listen F -GLIBC_2.0 llabs F -GLIBC_2.0 lldiv F -GLIBC_2.0 llseek F -GLIBC_2.0 loc1 D 0x4 -GLIBC_2.0 loc2 D 0x4 -GLIBC_2.0 localeconv F -GLIBC_2.0 localtime F -GLIBC_2.0 localtime_r F -GLIBC_2.0 lockf F -GLIBC_2.0 locs D 0x4 -GLIBC_2.0 longjmp F -GLIBC_2.0 lrand48 F -GLIBC_2.0 lrand48_r F -GLIBC_2.0 lsearch F -GLIBC_2.0 lseek F -GLIBC_2.0 madvise F -GLIBC_2.0 mallinfo F -GLIBC_2.0 malloc F -GLIBC_2.0 malloc_get_state F -GLIBC_2.0 malloc_set_state F -GLIBC_2.0 malloc_stats F -GLIBC_2.0 malloc_trim F -GLIBC_2.0 malloc_usable_size F -GLIBC_2.0 mallopt F -GLIBC_2.0 mallwatch D 0x4 -GLIBC_2.0 mblen F -GLIBC_2.0 mbrlen F -GLIBC_2.0 mbrtowc F -GLIBC_2.0 mbsinit F -GLIBC_2.0 mbsnrtowcs F -GLIBC_2.0 mbsrtowcs F -GLIBC_2.0 mbstowcs F -GLIBC_2.0 mbtowc F -GLIBC_2.0 mcheck F -GLIBC_2.0 mcount F -GLIBC_2.0 memalign F -GLIBC_2.0 memccpy F -GLIBC_2.0 memchr F -GLIBC_2.0 memcmp F -GLIBC_2.0 memcpy F -GLIBC_2.0 memfrob F -GLIBC_2.0 memmem F -GLIBC_2.0 memmove F -GLIBC_2.0 memset F -GLIBC_2.0 mkdir F -GLIBC_2.0 mkfifo F -GLIBC_2.0 mkstemp F -GLIBC_2.0 mktemp F -GLIBC_2.0 mktime F -GLIBC_2.0 mlock F -GLIBC_2.0 mlockall F -GLIBC_2.0 mmap F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 monstartup F -GLIBC_2.0 mount F -GLIBC_2.0 mprobe F -GLIBC_2.0 mprotect F -GLIBC_2.0 mrand48 F -GLIBC_2.0 mrand48_r F -GLIBC_2.0 mremap F -GLIBC_2.0 msgctl F -GLIBC_2.0 msgget F -GLIBC_2.0 msgrcv F -GLIBC_2.0 msgsnd F -GLIBC_2.0 msync F -GLIBC_2.0 mtrace F -GLIBC_2.0 munlock F -GLIBC_2.0 munlockall F -GLIBC_2.0 munmap F -GLIBC_2.0 muntrace F -GLIBC_2.0 nanosleep F -GLIBC_2.0 nfsservctl F -GLIBC_2.0 nice F -GLIBC_2.0 nl_langinfo F -GLIBC_2.0 nrand48 F -GLIBC_2.0 nrand48_r F -GLIBC_2.0 ntohl F -GLIBC_2.0 ntohs F -GLIBC_2.0 obstack_alloc_failed_handler D 0x4 -GLIBC_2.0 obstack_exit_failure D 0x4 -GLIBC_2.0 obstack_free F -GLIBC_2.0 obstack_printf F -GLIBC_2.0 obstack_vprintf F -GLIBC_2.0 on_exit F -GLIBC_2.0 open F -GLIBC_2.0 open_memstream F -GLIBC_2.0 opendir F -GLIBC_2.0 openlog F -GLIBC_2.0 optarg D 0x4 -GLIBC_2.0 opterr D 0x4 -GLIBC_2.0 optind D 0x4 -GLIBC_2.0 optopt D 0x4 -GLIBC_2.0 parse_printf_format F -GLIBC_2.0 pathconf F -GLIBC_2.0 pause F -GLIBC_2.0 pclose F -GLIBC_2.0 perror F -GLIBC_2.0 personality F -GLIBC_2.0 pipe F -GLIBC_2.0 pmap_getmaps F -GLIBC_2.0 pmap_getport F -GLIBC_2.0 pmap_rmtcall F -GLIBC_2.0 pmap_set F -GLIBC_2.0 pmap_unset F -GLIBC_2.0 poll F -GLIBC_2.0 popen F -GLIBC_2.0 prctl F -GLIBC_2.0 printf F -GLIBC_2.0 profil F -GLIBC_2.0 program_invocation_name D 0x4 -GLIBC_2.0 program_invocation_short_name D 0x4 -GLIBC_2.0 pselect F -GLIBC_2.0 psignal F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 ptrace F -GLIBC_2.0 putc F -GLIBC_2.0 putc_unlocked F -GLIBC_2.0 putchar F -GLIBC_2.0 putchar_unlocked F -GLIBC_2.0 putenv F -GLIBC_2.0 putpwent F -GLIBC_2.0 puts F -GLIBC_2.0 putspent F -GLIBC_2.0 pututline F -GLIBC_2.0 putw F -GLIBC_2.0 pvalloc F -GLIBC_2.0 qecvt F -GLIBC_2.0 qecvt_r F -GLIBC_2.0 qfcvt F -GLIBC_2.0 qfcvt_r F -GLIBC_2.0 qgcvt F -GLIBC_2.0 qsort F -GLIBC_2.0 query_module F -GLIBC_2.0 quotactl F -GLIBC_2.0 raise F -GLIBC_2.0 rand F -GLIBC_2.0 rand_r F -GLIBC_2.0 random F -GLIBC_2.0 random_r F -GLIBC_2.0 rcmd F -GLIBC_2.0 re_comp F -GLIBC_2.0 re_compile_fastmap F -GLIBC_2.0 re_compile_pattern F -GLIBC_2.0 re_exec F -GLIBC_2.0 re_match F -GLIBC_2.0 re_match_2 F -GLIBC_2.0 re_max_failures D 0x4 -GLIBC_2.0 re_search F -GLIBC_2.0 re_search_2 F -GLIBC_2.0 re_set_registers F -GLIBC_2.0 re_set_syntax F -GLIBC_2.0 re_syntax_options D 0x4 -GLIBC_2.0 read F -GLIBC_2.0 readdir F -GLIBC_2.0 readdir_r F -GLIBC_2.0 readlink F -GLIBC_2.0 readv F -GLIBC_2.0 realloc F -GLIBC_2.0 realpath F -GLIBC_2.0 reboot F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 regcomp F -GLIBC_2.0 regerror F -GLIBC_2.0 regexec F -GLIBC_2.0 regfree F -GLIBC_2.0 register_printf_function F -GLIBC_2.0 registerrpc F -GLIBC_2.0 remove F -GLIBC_2.0 remque F -GLIBC_2.0 rename F -GLIBC_2.0 res_init F -GLIBC_2.0 revoke F -GLIBC_2.0 rewind F -GLIBC_2.0 rewinddir F -GLIBC_2.0 rexec F -GLIBC_2.0 rexecoptions D 0x4 -GLIBC_2.0 rindex F -GLIBC_2.0 rmdir F -GLIBC_2.0 rpc_createerr D 0x10 -GLIBC_2.0 rpmatch F -GLIBC_2.0 rresvport F -GLIBC_2.0 ruserok F -GLIBC_2.0 ruserpass F -GLIBC_2.0 sbrk F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 scandir F -GLIBC_2.0 scanf F -GLIBC_2.0 sched_get_priority_max F -GLIBC_2.0 sched_get_priority_min F -GLIBC_2.0 sched_getparam F -GLIBC_2.0 sched_getscheduler F -GLIBC_2.0 sched_rr_get_interval F -GLIBC_2.0 sched_setparam F -GLIBC_2.0 sched_setscheduler F -GLIBC_2.0 sched_yield F -GLIBC_2.0 seed48 F -GLIBC_2.0 seed48_r F -GLIBC_2.0 seekdir F -GLIBC_2.0 select F -GLIBC_2.0 semctl F -GLIBC_2.0 semget F -GLIBC_2.0 semop F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 setaliasent F -GLIBC_2.0 setbuf F -GLIBC_2.0 setbuffer F -GLIBC_2.0 setcontext F -GLIBC_2.0 setdomainname F -GLIBC_2.0 setegid F -GLIBC_2.0 setenv F -GLIBC_2.0 seteuid F -GLIBC_2.0 setfsent F -GLIBC_2.0 setfsgid F -GLIBC_2.0 setfsuid F -GLIBC_2.0 setgid F -GLIBC_2.0 setgrent F -GLIBC_2.0 setgroups F -GLIBC_2.0 sethostent F -GLIBC_2.0 sethostid F -GLIBC_2.0 sethostname F -GLIBC_2.0 setitimer F -GLIBC_2.0 setjmp F -GLIBC_2.0 setlinebuf F -GLIBC_2.0 setlocale F -GLIBC_2.0 setlogin F -GLIBC_2.0 setlogmask F -GLIBC_2.0 setmntent F -GLIBC_2.0 setnetent F -GLIBC_2.0 setnetgrent F -GLIBC_2.0 setpgid F -GLIBC_2.0 setpgrp F -GLIBC_2.0 setpriority F -GLIBC_2.0 setprotoent F -GLIBC_2.0 setpwent F -GLIBC_2.0 setregid F -GLIBC_2.0 setresgid F -GLIBC_2.0 setresuid F -GLIBC_2.0 setreuid F -GLIBC_2.0 setrlimit F -GLIBC_2.0 setrpcent F -GLIBC_2.0 setservent F -GLIBC_2.0 setsid F -GLIBC_2.0 setsockopt F -GLIBC_2.0 setspent F -GLIBC_2.0 setstate F -GLIBC_2.0 setstate_r F -GLIBC_2.0 settimeofday F -GLIBC_2.0 setttyent F -GLIBC_2.0 setuid F -GLIBC_2.0 setusershell F -GLIBC_2.0 setutent F -GLIBC_2.0 setvbuf F -GLIBC_2.0 sgetspent F -GLIBC_2.0 sgetspent_r F -GLIBC_2.0 shmat F -GLIBC_2.0 shmctl F -GLIBC_2.0 shmdt F -GLIBC_2.0 shmget F -GLIBC_2.0 shutdown F -GLIBC_2.0 sigaction F -GLIBC_2.0 sigaddset F -GLIBC_2.0 sigaltstack F -GLIBC_2.0 sigandset F -GLIBC_2.0 sigblock F -GLIBC_2.0 sigdelset F -GLIBC_2.0 sigemptyset F -GLIBC_2.0 sigfillset F -GLIBC_2.0 siggetmask F -GLIBC_2.0 siginterrupt F -GLIBC_2.0 sigisemptyset F -GLIBC_2.0 sigismember F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 signal F -GLIBC_2.0 sigorset F -GLIBC_2.0 sigpause F -GLIBC_2.0 sigpending F -GLIBC_2.0 sigprocmask F -GLIBC_2.0 sigreturn F -GLIBC_2.0 sigsetmask F -GLIBC_2.0 sigstack F -GLIBC_2.0 sigsuspend F -GLIBC_2.0 sigvec F -GLIBC_2.0 sigwait F -GLIBC_2.0 sleep F -GLIBC_2.0 snprintf F -GLIBC_2.0 socket F -GLIBC_2.0 socketpair F -GLIBC_2.0 sprintf F -GLIBC_2.0 srand F -GLIBC_2.0 srand48 F -GLIBC_2.0 srand48_r F -GLIBC_2.0 srandom F -GLIBC_2.0 srandom_r F -GLIBC_2.0 sscanf F -GLIBC_2.0 ssignal F -GLIBC_2.0 sstk F -GLIBC_2.0 statfs F -GLIBC_2.0 stderr D 0x4 -GLIBC_2.0 stdin D 0x4 -GLIBC_2.0 stdout D 0x4 -GLIBC_2.0 step F -GLIBC_2.0 stime F -GLIBC_2.0 stpcpy F -GLIBC_2.0 stpncpy F -GLIBC_2.0 strcasecmp F -GLIBC_2.0 strcat F -GLIBC_2.0 strchr F -GLIBC_2.0 strcmp F -GLIBC_2.0 strcoll F -GLIBC_2.0 strcpy F -GLIBC_2.0 strcspn F -GLIBC_2.0 strdup F -GLIBC_2.0 strerror F -GLIBC_2.0 strerror_r F -GLIBC_2.0 strfmon F -GLIBC_2.0 strfry F -GLIBC_2.0 strftime F -GLIBC_2.0 strlen F -GLIBC_2.0 strncasecmp F -GLIBC_2.0 strncat F -GLIBC_2.0 strncmp F -GLIBC_2.0 strncpy F -GLIBC_2.0 strndup F -GLIBC_2.0 strnlen F -GLIBC_2.0 strpbrk F -GLIBC_2.0 strptime F -GLIBC_2.0 strrchr F -GLIBC_2.0 strsep F -GLIBC_2.0 strsignal F -GLIBC_2.0 strspn F -GLIBC_2.0 strstr F -GLIBC_2.0 strtod F -GLIBC_2.0 strtof F -GLIBC_2.0 strtok F -GLIBC_2.0 strtok_r F -GLIBC_2.0 strtol F -GLIBC_2.0 strtold F -GLIBC_2.0 strtoll F -GLIBC_2.0 strtoq F -GLIBC_2.0 strtoul F -GLIBC_2.0 strtoull F -GLIBC_2.0 strtouq F -GLIBC_2.0 strxfrm F -GLIBC_2.0 stty F -GLIBC_2.0 svc_exit F -GLIBC_2.0 svc_fdset D 0x80 -GLIBC_2.0 svc_getreq F -GLIBC_2.0 svc_getreqset F -GLIBC_2.0 svc_register F -GLIBC_2.0 svc_run F -GLIBC_2.0 svc_sendreply F -GLIBC_2.0 svc_unregister F -GLIBC_2.0 svcauthdes_stats D 0xc -GLIBC_2.0 svcerr_auth F -GLIBC_2.0 svcerr_decode F -GLIBC_2.0 svcerr_noproc F -GLIBC_2.0 svcerr_noprog F -GLIBC_2.0 svcerr_progvers F -GLIBC_2.0 svcerr_systemerr F -GLIBC_2.0 svcerr_weakauth F -GLIBC_2.0 svcfd_create F -GLIBC_2.0 svcraw_create F -GLIBC_2.0 svctcp_create F -GLIBC_2.0 svcudp_bufcreate F -GLIBC_2.0 svcudp_create F -GLIBC_2.0 svcudp_enablecache F -GLIBC_2.0 swab F -GLIBC_2.0 swapoff F -GLIBC_2.0 swapon F -GLIBC_2.0 symlink F -GLIBC_2.0 sync F -GLIBC_2.0 sys_errlist D 0x1ec -GLIBC_2.0 sys_nerr D 0x4 -GLIBC_2.0 sys_sigabbrev D 0x80 -GLIBC_2.0 sys_siglist D 0x80 -GLIBC_2.0 syscall F -GLIBC_2.0 sysconf F -GLIBC_2.0 sysctl F -GLIBC_2.0 sysinfo F -GLIBC_2.0 syslog F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 tcflow F -GLIBC_2.0 tcflush F -GLIBC_2.0 tcgetattr F -GLIBC_2.0 tcgetpgrp F -GLIBC_2.0 tcsendbreak F -GLIBC_2.0 tcsetattr F -GLIBC_2.0 tcsetpgrp F -GLIBC_2.0 tdelete F -GLIBC_2.0 telldir F -GLIBC_2.0 tempnam F -GLIBC_2.0 textdomain F -GLIBC_2.0 tfind F -GLIBC_2.0 time F -GLIBC_2.0 timegm F -GLIBC_2.0 timelocal F -GLIBC_2.0 times F -GLIBC_2.0 timezone D 0x4 -GLIBC_2.0 tmpfile F -GLIBC_2.0 tmpnam F -GLIBC_2.0 tmpnam_r F -GLIBC_2.0 toascii F -GLIBC_2.0 tolower F -GLIBC_2.0 toupper F -GLIBC_2.0 towctrans F -GLIBC_2.0 towlower F -GLIBC_2.0 towupper F -GLIBC_2.0 tr_break F -GLIBC_2.0 truncate F -GLIBC_2.0 tsearch F -GLIBC_2.0 ttyname F -GLIBC_2.0 ttyname_r F -GLIBC_2.0 ttyslot F -GLIBC_2.0 twalk F -GLIBC_2.0 tzname D 0x8 -GLIBC_2.0 tzset F -GLIBC_2.0 ualarm F -GLIBC_2.0 ulckpwdf F -GLIBC_2.0 ulimit F -GLIBC_2.0 umask F -GLIBC_2.0 umount F -GLIBC_2.0 uname F -GLIBC_2.0 ungetc F -GLIBC_2.0 unlink F -GLIBC_2.0 unsetenv F -GLIBC_2.0 updwtmp F -GLIBC_2.0 uselib F -GLIBC_2.0 usleep F -GLIBC_2.0 ustat F -GLIBC_2.0 utime F -GLIBC_2.0 utimes F -GLIBC_2.0 utmpname F -GLIBC_2.0 valloc F -GLIBC_2.0 vasprintf F -GLIBC_2.0 vdprintf F -GLIBC_2.0 verr F -GLIBC_2.0 verrx F -GLIBC_2.0 vfork F -GLIBC_2.0 vfprintf F -GLIBC_2.0 vfscanf F -GLIBC_2.0 vhangup F -GLIBC_2.0 vlimit F -GLIBC_2.0 vprintf F -GLIBC_2.0 vscanf F -GLIBC_2.0 vsnprintf F -GLIBC_2.0 vsprintf F -GLIBC_2.0 vsscanf F -GLIBC_2.0 vsyslog F -GLIBC_2.0 vtimes F -GLIBC_2.0 vwarn F -GLIBC_2.0 vwarnx F -GLIBC_2.0 wait F -GLIBC_2.0 wait3 F -GLIBC_2.0 wait4 F -GLIBC_2.0 waitpid F -GLIBC_2.0 warn F -GLIBC_2.0 warnx F -GLIBC_2.0 wcpcpy F -GLIBC_2.0 wcpncpy F -GLIBC_2.0 wcrtomb F -GLIBC_2.0 wcscat F -GLIBC_2.0 wcschr F -GLIBC_2.0 wcscmp F -GLIBC_2.0 wcscoll F -GLIBC_2.0 wcscpy F -GLIBC_2.0 wcscspn F -GLIBC_2.0 wcsdup F -GLIBC_2.0 wcslen F -GLIBC_2.0 wcsncat F -GLIBC_2.0 wcsncmp F -GLIBC_2.0 wcsncpy F -GLIBC_2.0 wcsnrtombs F -GLIBC_2.0 wcspbrk F -GLIBC_2.0 wcsrchr F -GLIBC_2.0 wcsrtombs F -GLIBC_2.0 wcsspn F -GLIBC_2.0 wcsstr F -GLIBC_2.0 wcstod F -GLIBC_2.0 wcstof F -GLIBC_2.0 wcstok F -GLIBC_2.0 wcstol F -GLIBC_2.0 wcstold F -GLIBC_2.0 wcstombs F -GLIBC_2.0 wcstoq F -GLIBC_2.0 wcstoul F -GLIBC_2.0 wcstouq F -GLIBC_2.0 wcswidth F -GLIBC_2.0 wcsxfrm F -GLIBC_2.0 wctob F -GLIBC_2.0 wctomb F -GLIBC_2.0 wctrans F -GLIBC_2.0 wctype F -GLIBC_2.0 wcwidth F -GLIBC_2.0 wmemchr F -GLIBC_2.0 wmemcmp F -GLIBC_2.0 wmemcpy F -GLIBC_2.0 wmemmove F -GLIBC_2.0 wmemset F -GLIBC_2.0 write F -GLIBC_2.0 writev F -GLIBC_2.0 xdr_accepted_reply F -GLIBC_2.0 xdr_array F -GLIBC_2.0 xdr_authunix_parms F -GLIBC_2.0 xdr_bool F -GLIBC_2.0 xdr_bytes F -GLIBC_2.0 xdr_callhdr F -GLIBC_2.0 xdr_callmsg F -GLIBC_2.0 xdr_char F -GLIBC_2.0 xdr_cryptkeyarg F -GLIBC_2.0 xdr_cryptkeyarg2 F -GLIBC_2.0 xdr_cryptkeyres F -GLIBC_2.0 xdr_des_block F -GLIBC_2.0 xdr_double F -GLIBC_2.0 xdr_enum F -GLIBC_2.0 xdr_float F -GLIBC_2.0 xdr_free F -GLIBC_2.0 xdr_int F -GLIBC_2.0 xdr_key_netstarg F -GLIBC_2.0 xdr_key_netstres F -GLIBC_2.0 xdr_keybuf F -GLIBC_2.0 xdr_keystatus F -GLIBC_2.0 xdr_long F -GLIBC_2.0 xdr_netobj F -GLIBC_2.0 xdr_opaque F -GLIBC_2.0 xdr_opaque_auth F -GLIBC_2.0 xdr_pmap F -GLIBC_2.0 xdr_pmaplist F -GLIBC_2.0 xdr_pointer F -GLIBC_2.0 xdr_reference F -GLIBC_2.0 xdr_rejected_reply F -GLIBC_2.0 xdr_replymsg F -GLIBC_2.0 xdr_rmtcall_args F -GLIBC_2.0 xdr_rmtcallres F -GLIBC_2.0 xdr_short F -GLIBC_2.0 xdr_string F -GLIBC_2.0 xdr_u_char F -GLIBC_2.0 xdr_u_int F -GLIBC_2.0 xdr_u_long F -GLIBC_2.0 xdr_u_short F -GLIBC_2.0 xdr_union F -GLIBC_2.0 xdr_vector F -GLIBC_2.0 xdr_void F -GLIBC_2.0 xdr_wrapstring F -GLIBC_2.0 xdrmem_create F -GLIBC_2.0 xdrrec_create F -GLIBC_2.0 xdrrec_endofrecord F -GLIBC_2.0 xdrrec_eof F -GLIBC_2.0 xdrrec_skiprecord F -GLIBC_2.0 xdrstdio_create F -GLIBC_2.0 xencrypt F -GLIBC_2.0 xprt_register F -GLIBC_2.0 xprt_unregister F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 _IO_2_1_stderr_ D 0x98 -GLIBC_2.1 _IO_2_1_stdin_ D 0x98 -GLIBC_2.1 _IO_2_1_stdout_ D 0x98 -GLIBC_2.1 _IO_do_write F -GLIBC_2.1 _IO_fclose F -GLIBC_2.1 _IO_fdopen F -GLIBC_2.1 _IO_fgetpos64 F -GLIBC_2.1 _IO_file_attach F -GLIBC_2.1 _IO_file_close_it F -GLIBC_2.1 _IO_file_finish F -GLIBC_2.1 _IO_file_fopen F -GLIBC_2.1 _IO_file_init F -GLIBC_2.1 _IO_file_overflow F -GLIBC_2.1 _IO_file_seekoff F -GLIBC_2.1 _IO_file_setbuf F -GLIBC_2.1 _IO_file_sync F -GLIBC_2.1 _IO_file_underflow F -GLIBC_2.1 _IO_file_write F -GLIBC_2.1 _IO_file_xsputn F -GLIBC_2.1 _IO_fopen F -GLIBC_2.1 _IO_fsetpos64 F -GLIBC_2.1 _IO_getline_info F -GLIBC_2.1 _IO_popen F -GLIBC_2.1 _IO_proc_close F -GLIBC_2.1 _IO_proc_open F -GLIBC_2.1 __asprintf F -GLIBC_2.1 __backtrace F -GLIBC_2.1 __backtrace_symbols F -GLIBC_2.1 __backtrace_symbols_fd F -GLIBC_2.1 __duplocale F -GLIBC_2.1 __freelocale F -GLIBC_2.1 __fxstat64 F -GLIBC_2.1 __isalnum_l F -GLIBC_2.1 __isalpha_l F -GLIBC_2.1 __isascii_l F -GLIBC_2.1 __isblank_l F -GLIBC_2.1 __iscntrl_l F -GLIBC_2.1 __isdigit_l F -GLIBC_2.1 __isgraph_l F -GLIBC_2.1 __islower_l F -GLIBC_2.1 __isprint_l F -GLIBC_2.1 __ispunct_l F -GLIBC_2.1 __isspace_l F -GLIBC_2.1 __isupper_l F -GLIBC_2.1 __iswalnum_l F -GLIBC_2.1 __iswalpha_l F -GLIBC_2.1 __iswblank_l F -GLIBC_2.1 __iswcntrl_l F -GLIBC_2.1 __iswctype_l F -GLIBC_2.1 __iswdigit_l F -GLIBC_2.1 __iswgraph_l F -GLIBC_2.1 __iswlower_l F -GLIBC_2.1 __iswprint_l F -GLIBC_2.1 __iswpunct_l F -GLIBC_2.1 __iswspace_l F -GLIBC_2.1 __iswupper_l F -GLIBC_2.1 __iswxdigit_l F -GLIBC_2.1 __isxdigit_l F -GLIBC_2.1 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.1 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.1 __key_gendes_LOCAL D 0x4 -GLIBC_2.1 __libc_allocate_rtsig F -GLIBC_2.1 __libc_current_sigrtmax F -GLIBC_2.1 __libc_current_sigrtmin F -GLIBC_2.1 __libc_freeres F -GLIBC_2.1 __libc_sa_len F -GLIBC_2.1 __lxstat64 F -GLIBC_2.1 __newlocale F -GLIBC_2.1 __poll F -GLIBC_2.1 __pread64 F -GLIBC_2.1 __pwrite64 F -GLIBC_2.1 __rawmemchr F -GLIBC_2.1 __signbit F -GLIBC_2.1 __signbitf F -GLIBC_2.1 __signbitl F -GLIBC_2.1 __strcasecmp_l F -GLIBC_2.1 __strcasestr F -GLIBC_2.1 __strcoll_l F -GLIBC_2.1 __strfmon_l F -GLIBC_2.1 __strncasecmp_l F -GLIBC_2.1 __strtod_l F -GLIBC_2.1 __strtof_l F -GLIBC_2.1 __strtol_l F -GLIBC_2.1 __strtold_l F -GLIBC_2.1 __strtoll_l F -GLIBC_2.1 __strtoul_l F -GLIBC_2.1 __strtoull_l F -GLIBC_2.1 __strxfrm_l F -GLIBC_2.1 __toascii_l F -GLIBC_2.1 __tolower_l F -GLIBC_2.1 __toupper_l F -GLIBC_2.1 __towctrans F -GLIBC_2.1 __towctrans_l F -GLIBC_2.1 __towlower_l F -GLIBC_2.1 __towupper_l F -GLIBC_2.1 __wcscasecmp_l F -GLIBC_2.1 __wcscoll_l F -GLIBC_2.1 __wcsncasecmp_l F -GLIBC_2.1 __wcstod_l F -GLIBC_2.1 __wcstof_l F -GLIBC_2.1 __wcstol_l F -GLIBC_2.1 __wcstold_l F -GLIBC_2.1 __wcstoll_l F -GLIBC_2.1 __wcstoul_l F -GLIBC_2.1 __wcstoull_l F -GLIBC_2.1 __wcsxfrm_l F -GLIBC_2.1 __wctype_l F -GLIBC_2.1 __xstat64 F -GLIBC_2.1 _authenticate F -GLIBC_2.1 _dl_mcount_wrapper F -GLIBC_2.1 _dl_mcount_wrapper_check F -GLIBC_2.1 _sys_errlist D 0x1f4 -GLIBC_2.1 _sys_nerr D 0x4 -GLIBC_2.1 _sys_siglist D 0x100 -GLIBC_2.1 addseverity F -GLIBC_2.1 alphasort64 F -GLIBC_2.1 argp_err_exit_status D 0x4 -GLIBC_2.1 argp_error F -GLIBC_2.1 argp_failure F -GLIBC_2.1 argp_help F -GLIBC_2.1 argp_parse F -GLIBC_2.1 argp_program_bug_address D 0x4 -GLIBC_2.1 argp_program_version D 0x4 -GLIBC_2.1 argp_program_version_hook D 0x4 -GLIBC_2.1 argp_state_help F -GLIBC_2.1 argp_usage F -GLIBC_2.1 authdes_create F -GLIBC_2.1 authdes_getucred F -GLIBC_2.1 authdes_pk_create F -GLIBC_2.1 backtrace F -GLIBC_2.1 backtrace_symbols F -GLIBC_2.1 backtrace_symbols_fd F -GLIBC_2.1 capget F -GLIBC_2.1 capset F -GLIBC_2.1 cbc_crypt F -GLIBC_2.1 clntunix_create F -GLIBC_2.1 creat64 F -GLIBC_2.1 des_setparity F -GLIBC_2.1 ecb_crypt F -GLIBC_2.1 endutxent F -GLIBC_2.1 fattach F -GLIBC_2.1 fclose F -GLIBC_2.1 fdetach F -GLIBC_2.1 fdopen F -GLIBC_2.1 ffsl F -GLIBC_2.1 ffsll F -GLIBC_2.1 fgetc_unlocked F -GLIBC_2.1 fgetpos64 F -GLIBC_2.1 fgets_unlocked F -GLIBC_2.1 fmtmsg F -GLIBC_2.1 fopen F -GLIBC_2.1 fopen64 F -GLIBC_2.1 fputs_unlocked F -GLIBC_2.1 fread_unlocked F -GLIBC_2.1 freopen64 F -GLIBC_2.1 fseeko F -GLIBC_2.1 fseeko64 F -GLIBC_2.1 fsetpos64 F -GLIBC_2.1 fstatfs64 F -GLIBC_2.1 fstatvfs F -GLIBC_2.1 fstatvfs64 F -GLIBC_2.1 ftello F -GLIBC_2.1 ftello64 F -GLIBC_2.1 ftruncate64 F -GLIBC_2.1 ftw64 F -GLIBC_2.1 fwrite_unlocked F -GLIBC_2.1 gai_strerror F -GLIBC_2.1 getcontext F -GLIBC_2.1 getdate F -GLIBC_2.1 getdate_err D 0x4 -GLIBC_2.1 getdate_r F -GLIBC_2.1 getmsg F -GLIBC_2.1 getnameinfo F -GLIBC_2.1 getnetname F -GLIBC_2.1 getpmsg F -GLIBC_2.1 getpt F -GLIBC_2.1 getrlimit64 F -GLIBC_2.1 getutxent F -GLIBC_2.1 getutxid F -GLIBC_2.1 getutxline F -GLIBC_2.1 glob64 F -GLIBC_2.1 globfree64 F -GLIBC_2.1 gnu_get_libc_release F -GLIBC_2.1 gnu_get_libc_version F -GLIBC_2.1 grantpt F -GLIBC_2.1 host2netname F -GLIBC_2.1 iconv F -GLIBC_2.1 iconv_close F -GLIBC_2.1 iconv_open F -GLIBC_2.1 if_freenameindex F -GLIBC_2.1 if_indextoname F -GLIBC_2.1 if_nameindex F -GLIBC_2.1 if_nametoindex F -GLIBC_2.1 in6addr_any D 0x10 -GLIBC_2.1 in6addr_loopback D 0x10 -GLIBC_2.1 isastream F -GLIBC_2.1 iswblank F -GLIBC_2.1 key_decryptsession F -GLIBC_2.1 key_decryptsession_pk F -GLIBC_2.1 key_encryptsession F -GLIBC_2.1 key_encryptsession_pk F -GLIBC_2.1 key_gendes F -GLIBC_2.1 key_get_conv F -GLIBC_2.1 key_secretkey_is_set F -GLIBC_2.1 key_setnet F -GLIBC_2.1 key_setsecret F -GLIBC_2.1 lockf64 F -GLIBC_2.1 lseek64 F -GLIBC_2.1 makecontext F -GLIBC_2.1 mempcpy F -GLIBC_2.1 mmap64 F -GLIBC_2.1 netname2host F -GLIBC_2.1 netname2user F -GLIBC_2.1 nftw F -GLIBC_2.1 nftw64 F -GLIBC_2.1 ntp_adjtime F -GLIBC_2.1 ntp_gettime F -GLIBC_2.1 open64 F -GLIBC_2.1 passwd2des F -GLIBC_2.1 pclose F -GLIBC_2.1 popen F -GLIBC_2.1 pread F -GLIBC_2.1 pread64 F -GLIBC_2.1 printf_size F -GLIBC_2.1 printf_size_info F -GLIBC_2.1 pthread_attr_init F -GLIBC_2.1 ptsname F -GLIBC_2.1 ptsname_r F -GLIBC_2.1 putgrent F -GLIBC_2.1 putmsg F -GLIBC_2.1 putpmsg F -GLIBC_2.1 pututxline F -GLIBC_2.1 pwrite F -GLIBC_2.1 pwrite64 F -GLIBC_2.1 rawmemchr F -GLIBC_2.1 readdir64 F -GLIBC_2.1 readdir64_r F -GLIBC_2.1 rtime F -GLIBC_2.1 scalbln F -GLIBC_2.1 scalblnf F -GLIBC_2.1 scalblnl F -GLIBC_2.1 scandir64 F -GLIBC_2.1 sendfile F -GLIBC_2.1 setrlimit64 F -GLIBC_2.1 setutxent F -GLIBC_2.1 sighold F -GLIBC_2.1 sigignore F -GLIBC_2.1 sigqueue F -GLIBC_2.1 sigrelse F -GLIBC_2.1 sigset F -GLIBC_2.1 sigtimedwait F -GLIBC_2.1 sigwaitinfo F -GLIBC_2.1 statfs64 F -GLIBC_2.1 statvfs F -GLIBC_2.1 statvfs64 F -GLIBC_2.1 strcasestr F -GLIBC_2.1 strtoimax F -GLIBC_2.1 strtoumax F -GLIBC_2.1 strverscmp F -GLIBC_2.1 svcunix_create F -GLIBC_2.1 svcunixfd_create F -GLIBC_2.1 swapcontext F -GLIBC_2.1 sys_errlist D 0x1f4 -GLIBC_2.1 sys_nerr D 0x4 -GLIBC_2.1 sys_sigabbrev D 0x100 -GLIBC_2.1 sys_siglist D 0x100 -GLIBC_2.1 sysv_signal F -GLIBC_2.1 tcgetsid F -GLIBC_2.1 tdestroy F -GLIBC_2.1 tmpfile F -GLIBC_2.1 tmpfile64 F -GLIBC_2.1 truncate64 F -GLIBC_2.1 umount2 F -GLIBC_2.1 unlockpt F -GLIBC_2.1 updwtmpx F -GLIBC_2.1 user2netname F -GLIBC_2.1 utmpxname F -GLIBC_2.1 versionsort F -GLIBC_2.1 versionsort64 F -GLIBC_2.1 waitid F -GLIBC_2.1 wcscasecmp F -GLIBC_2.1 wcsncasecmp F -GLIBC_2.1 wcsnlen F -GLIBC_2.1 wcstoimax F -GLIBC_2.1 wcstoll F -GLIBC_2.1 wcstoull F -GLIBC_2.1 wcstoumax F -GLIBC_2.1 wcswcs F -GLIBC_2.1 wordexp F -GLIBC_2.1 wordfree F -GLIBC_2.1 xdecrypt F -GLIBC_2.1 xdr_authdes_cred F -GLIBC_2.1 xdr_authdes_verf F -GLIBC_2.1 xdr_getcredres F -GLIBC_2.1 xdr_int16_t F -GLIBC_2.1 xdr_int32_t F -GLIBC_2.1 xdr_int8_t F -GLIBC_2.1 xdr_netnamestr F -GLIBC_2.1 xdr_sizeof F -GLIBC_2.1 xdr_uint16_t F -GLIBC_2.1 xdr_uint32_t F -GLIBC_2.1 xdr_uint8_t F -GLIBC_2.1 xdr_unixcred F -GLIBC_2.1.1 GLIBC_2.1.1 A -GLIBC_2.1.1 _Exit F -GLIBC_2.1.1 __mempcpy_small F -GLIBC_2.1.1 __stpcpy_small F -GLIBC_2.1.1 __strcpy_small F -GLIBC_2.1.1 __strcspn_c1 F -GLIBC_2.1.1 __strcspn_c2 F -GLIBC_2.1.1 __strcspn_c3 F -GLIBC_2.1.1 __strpbrk_c2 F -GLIBC_2.1.1 __strpbrk_c3 F -GLIBC_2.1.1 __strsep_1c F -GLIBC_2.1.1 __strsep_2c F -GLIBC_2.1.1 __strsep_3c F -GLIBC_2.1.1 __strsep_g F -GLIBC_2.1.1 __strspn_c1 F -GLIBC_2.1.1 __strspn_c2 F -GLIBC_2.1.1 __strspn_c3 F -GLIBC_2.1.1 __strtok_r_1c F -GLIBC_2.1.1 __strverscmp F -GLIBC_2.1.1 getutmp F -GLIBC_2.1.1 getutmpx F -GLIBC_2.1.1 imaxabs F -GLIBC_2.1.1 imaxdiv F -GLIBC_2.1.1 strchrnul F -GLIBC_2.1.1 xdr_hyper F -GLIBC_2.1.1 xdr_int64_t F -GLIBC_2.1.1 xdr_longlong_t F -GLIBC_2.1.1 xdr_u_hyper F -GLIBC_2.1.1 xdr_u_longlong_t F -GLIBC_2.1.1 xdr_uint64_t F -GLIBC_2.1.2 GLIBC_2.1.2 A -GLIBC_2.1.2 __vfork F -GLIBC_2.1.2 getaliasbyname_r F -GLIBC_2.1.2 getaliasent_r F -GLIBC_2.1.2 getgrent_r F -GLIBC_2.1.2 getgrgid_r F -GLIBC_2.1.2 getgrnam_r F -GLIBC_2.1.2 gethostbyaddr_r F -GLIBC_2.1.2 gethostbyname2_r F -GLIBC_2.1.2 gethostbyname_r F -GLIBC_2.1.2 gethostent_r F -GLIBC_2.1.2 getnetbyaddr_r F -GLIBC_2.1.2 getnetbyname_r F -GLIBC_2.1.2 getnetent_r F -GLIBC_2.1.2 getprotobyname_r F -GLIBC_2.1.2 getprotobynumber_r F -GLIBC_2.1.2 getprotoent_r F -GLIBC_2.1.2 getpwent_r F -GLIBC_2.1.2 getpwnam_r F -GLIBC_2.1.2 getpwuid_r F -GLIBC_2.1.2 getrpcbyname_r F -GLIBC_2.1.2 getrpcbynumber_r F -GLIBC_2.1.2 getrpcent_r F -GLIBC_2.1.2 getservbyname_r F -GLIBC_2.1.2 getservbyport_r F -GLIBC_2.1.2 getservent_r F -GLIBC_2.1.2 getspent_r F -GLIBC_2.1.2 getspnam_r F -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 __cxa_atexit F -GLIBC_2.1.3 __cxa_finalize F -GLIBC_2.1.3 __sigsuspend F -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 fallocate64 F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __m68k_read_tp F -GLIBC_2.12 _sys_errlist D 0x21c -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x21c -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0x54 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 __assert F -GLIBC_2.2 __ctype32_tolower D 0x4 -GLIBC_2.2 __ctype32_toupper D 0x4 -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpurge F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __open64 F -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_state F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __statfs F -GLIBC_2.2 __strndup F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _res_hconf D 0x30 -GLIBC_2.2 alphasort64 F -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 dcngettext F -GLIBC_2.2 dngettext F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwscanf F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getrlimit F -GLIBC_2.2 getrlimit64 F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 glob64 F -GLIBC_2.2 iruserok_af F -GLIBC_2.2 localeconv F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 memrchr F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 moncontrol F -GLIBC_2.2 msgctl F -GLIBC_2.2 ngettext F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 scandir64 F -GLIBC_2.2 semctl F -GLIBC_2.2 setrlimit F -GLIBC_2.2 shmctl F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x4 -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 ungetwc F -GLIBC_2.2 versionsort64 F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wprintf F -GLIBC_2.2 wscanf F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 _sys_errlist D 0x1f8 -GLIBC_2.3 _sys_nerr D 0x4 -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoll_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strtoull_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 sys_errlist D 0x1f8 -GLIBC_2.3 sys_nerr D 0x4 -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x104 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 posix_fadvise64 F -GLIBC_2.3.3 posix_fallocate64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 sys_sigabbrev D 0x104 -GLIBC_2.3.3 sys_siglist D 0x104 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 _sys_errlist D 0x210 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 futimesat F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sys_errlist D 0x210 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libcrypt.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libcrypt.abilist deleted file mode 100644 index 4db2639336..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 crypt F -GLIBC_2.0 crypt_r F -GLIBC_2.0 encrypt F -GLIBC_2.0 encrypt_r F -GLIBC_2.0 fcrypt F -GLIBC_2.0 setkey F -GLIBC_2.0 setkey_r F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libdl.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libdl.abilist deleted file mode 100644 index 5536f6e0a9..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libdl.abilist +++ /dev/null @@ -1,14 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 dladdr F -GLIBC_2.0 dlclose F -GLIBC_2.0 dlerror F -GLIBC_2.0 dlopen F -GLIBC_2.0 dlsym F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 dlopen F -GLIBC_2.1 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist deleted file mode 100644 index f3de018cd9..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist +++ /dev/null @@ -1,474 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _LIB_VERSION D 0x4 -GLIBC_2.0 acos F -GLIBC_2.0 acosf F -GLIBC_2.0 acosh F -GLIBC_2.0 acoshf F -GLIBC_2.0 acoshl F -GLIBC_2.0 acosl F -GLIBC_2.0 asin F -GLIBC_2.0 asinf F -GLIBC_2.0 asinh F -GLIBC_2.0 asinhf F -GLIBC_2.0 asinhl F -GLIBC_2.0 asinl F -GLIBC_2.0 atan F -GLIBC_2.0 atan2 F -GLIBC_2.0 atan2f F -GLIBC_2.0 atan2l F -GLIBC_2.0 atanf F -GLIBC_2.0 atanh F -GLIBC_2.0 atanhf F -GLIBC_2.0 atanhl F -GLIBC_2.0 atanl F -GLIBC_2.0 cbrt F -GLIBC_2.0 cbrtf F -GLIBC_2.0 cbrtl F -GLIBC_2.0 ceil F -GLIBC_2.0 ceilf F -GLIBC_2.0 ceill F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 cos F -GLIBC_2.0 cosf F -GLIBC_2.0 cosh F -GLIBC_2.0 coshf F -GLIBC_2.0 coshl F -GLIBC_2.0 cosl F -GLIBC_2.0 drem F -GLIBC_2.0 dremf F -GLIBC_2.0 dreml F -GLIBC_2.0 erf F -GLIBC_2.0 erfc F -GLIBC_2.0 erfcf F -GLIBC_2.0 erfcl F -GLIBC_2.0 erff F -GLIBC_2.0 erfl F -GLIBC_2.0 exp F -GLIBC_2.0 expf F -GLIBC_2.0 expl F -GLIBC_2.0 expm1 F -GLIBC_2.0 expm1f F -GLIBC_2.0 expm1l F -GLIBC_2.0 fabs F -GLIBC_2.0 fabsf F -GLIBC_2.0 fabsl F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 floor F -GLIBC_2.0 floorf F -GLIBC_2.0 floorl F -GLIBC_2.0 fmod F -GLIBC_2.0 fmodf F -GLIBC_2.0 fmodl F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 gamma F -GLIBC_2.0 gammaf F -GLIBC_2.0 gammal F -GLIBC_2.0 hypot F -GLIBC_2.0 hypotf F -GLIBC_2.0 hypotl F -GLIBC_2.0 ilogb F -GLIBC_2.0 ilogbf F -GLIBC_2.0 ilogbl F -GLIBC_2.0 j0 F -GLIBC_2.0 j0f F -GLIBC_2.0 j0l F -GLIBC_2.0 j1 F -GLIBC_2.0 j1f F -GLIBC_2.0 j1l F -GLIBC_2.0 jn F -GLIBC_2.0 jnf F -GLIBC_2.0 jnl F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 lgamma F -GLIBC_2.0 lgamma_r F -GLIBC_2.0 lgammaf F -GLIBC_2.0 lgammaf_r F -GLIBC_2.0 lgammal F -GLIBC_2.0 lgammal_r F -GLIBC_2.0 log F -GLIBC_2.0 log10 F -GLIBC_2.0 log10f F -GLIBC_2.0 log10l F -GLIBC_2.0 log1p F -GLIBC_2.0 log1pf F -GLIBC_2.0 log1pl F -GLIBC_2.0 logb F -GLIBC_2.0 logbf F -GLIBC_2.0 logbl F -GLIBC_2.0 logf F -GLIBC_2.0 logl F -GLIBC_2.0 matherr F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 nextafter F -GLIBC_2.0 nextafterf F -GLIBC_2.0 nextafterl F -GLIBC_2.0 pow F -GLIBC_2.0 powf F -GLIBC_2.0 powl F -GLIBC_2.0 remainder F -GLIBC_2.0 remainderf F -GLIBC_2.0 remainderl F -GLIBC_2.0 rint F -GLIBC_2.0 rintf F -GLIBC_2.0 rintl F -GLIBC_2.0 scalb F -GLIBC_2.0 scalbf F -GLIBC_2.0 scalbl F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 signgam D 0x4 -GLIBC_2.0 significand F -GLIBC_2.0 significandf F -GLIBC_2.0 significandl F -GLIBC_2.0 sin F -GLIBC_2.0 sinf F -GLIBC_2.0 sinh F -GLIBC_2.0 sinhf F -GLIBC_2.0 sinhl F -GLIBC_2.0 sinl F -GLIBC_2.0 sqrt F -GLIBC_2.0 sqrtf F -GLIBC_2.0 sqrtl F -GLIBC_2.0 tan F -GLIBC_2.0 tanf F -GLIBC_2.0 tanh F -GLIBC_2.0 tanhf F -GLIBC_2.0 tanhl F -GLIBC_2.0 tanl F -GLIBC_2.0 y0 F -GLIBC_2.0 y0f F -GLIBC_2.0 y0l F -GLIBC_2.0 y1 F -GLIBC_2.0 y1f F -GLIBC_2.0 y1l F -GLIBC_2.0 yn F -GLIBC_2.0 ynf F -GLIBC_2.0 ynl F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __clog10 F -GLIBC_2.1 __clog10f F -GLIBC_2.1 __clog10l F -GLIBC_2.1 __finite F -GLIBC_2.1 __finitef F -GLIBC_2.1 __finitel F -GLIBC_2.1 __fpclassify F -GLIBC_2.1 __fpclassifyf F -GLIBC_2.1 __fpclassifyl F -GLIBC_2.1 __signbit F -GLIBC_2.1 __signbitf F -GLIBC_2.1 __signbitl F -GLIBC_2.1 cabs F -GLIBC_2.1 cabsf F -GLIBC_2.1 cabsl F -GLIBC_2.1 cacos F -GLIBC_2.1 cacosf F -GLIBC_2.1 cacosh F -GLIBC_2.1 cacoshf F -GLIBC_2.1 cacoshl F -GLIBC_2.1 cacosl F -GLIBC_2.1 carg F -GLIBC_2.1 cargf F -GLIBC_2.1 cargl F -GLIBC_2.1 casin F -GLIBC_2.1 casinf F -GLIBC_2.1 casinh F -GLIBC_2.1 casinhf F -GLIBC_2.1 casinhl F -GLIBC_2.1 casinl F -GLIBC_2.1 catan F -GLIBC_2.1 catanf F -GLIBC_2.1 catanh F -GLIBC_2.1 catanhf F -GLIBC_2.1 catanhl F -GLIBC_2.1 catanl F -GLIBC_2.1 ccos F -GLIBC_2.1 ccosf F -GLIBC_2.1 ccosh F -GLIBC_2.1 ccoshf F -GLIBC_2.1 ccoshl F -GLIBC_2.1 ccosl F -GLIBC_2.1 cexp F -GLIBC_2.1 cexpf F -GLIBC_2.1 cexpl F -GLIBC_2.1 cimag F -GLIBC_2.1 cimagf F -GLIBC_2.1 cimagl F -GLIBC_2.1 clog F -GLIBC_2.1 clog10 F -GLIBC_2.1 clog10f F -GLIBC_2.1 clog10l F -GLIBC_2.1 clogf F -GLIBC_2.1 clogl F -GLIBC_2.1 conj F -GLIBC_2.1 conjf F -GLIBC_2.1 conjl F -GLIBC_2.1 cpow F -GLIBC_2.1 cpowf F -GLIBC_2.1 cpowl F -GLIBC_2.1 cproj F -GLIBC_2.1 cprojf F -GLIBC_2.1 cprojl F -GLIBC_2.1 creal F -GLIBC_2.1 crealf F -GLIBC_2.1 creall F -GLIBC_2.1 csin F -GLIBC_2.1 csinf F -GLIBC_2.1 csinh F -GLIBC_2.1 csinhf F -GLIBC_2.1 csinhl F -GLIBC_2.1 csinl F -GLIBC_2.1 csqrt F -GLIBC_2.1 csqrtf F -GLIBC_2.1 csqrtl F -GLIBC_2.1 ctan F -GLIBC_2.1 ctanf F -GLIBC_2.1 ctanh F -GLIBC_2.1 ctanhf F -GLIBC_2.1 ctanhl F -GLIBC_2.1 ctanl F -GLIBC_2.1 exp10 F -GLIBC_2.1 exp10f F -GLIBC_2.1 exp10l F -GLIBC_2.1 exp2 F -GLIBC_2.1 exp2f F -GLIBC_2.1 exp2l F -GLIBC_2.1 fdim F -GLIBC_2.1 fdimf F -GLIBC_2.1 fdiml F -GLIBC_2.1 feclearexcept F -GLIBC_2.1 fegetenv F -GLIBC_2.1 fegetexceptflag F -GLIBC_2.1 fegetround F -GLIBC_2.1 feholdexcept F -GLIBC_2.1 feraiseexcept F -GLIBC_2.1 fesetenv F -GLIBC_2.1 fesetexceptflag F -GLIBC_2.1 fesetround F -GLIBC_2.1 fetestexcept F -GLIBC_2.1 feupdateenv F -GLIBC_2.1 fma F -GLIBC_2.1 fmaf F -GLIBC_2.1 fmal F -GLIBC_2.1 fmax F -GLIBC_2.1 fmaxf F -GLIBC_2.1 fmaxl F -GLIBC_2.1 fmin F -GLIBC_2.1 fminf F -GLIBC_2.1 fminl F -GLIBC_2.1 llrint F -GLIBC_2.1 llrintf F -GLIBC_2.1 llrintl F -GLIBC_2.1 llround F -GLIBC_2.1 llroundf F -GLIBC_2.1 llroundl F -GLIBC_2.1 log2 F -GLIBC_2.1 log2f F -GLIBC_2.1 log2l F -GLIBC_2.1 lrint F -GLIBC_2.1 lrintf F -GLIBC_2.1 lrintl F -GLIBC_2.1 lround F -GLIBC_2.1 lroundf F -GLIBC_2.1 lroundl F -GLIBC_2.1 nan F -GLIBC_2.1 nanf F -GLIBC_2.1 nanl F -GLIBC_2.1 nearbyint F -GLIBC_2.1 nearbyintf F -GLIBC_2.1 nearbyintl F -GLIBC_2.1 nexttoward F -GLIBC_2.1 nexttowardf F -GLIBC_2.1 nexttowardl F -GLIBC_2.1 pow10 F -GLIBC_2.1 pow10f F -GLIBC_2.1 pow10l F -GLIBC_2.1 remquo F -GLIBC_2.1 remquof F -GLIBC_2.1 remquol F -GLIBC_2.1 round F -GLIBC_2.1 roundf F -GLIBC_2.1 roundl F -GLIBC_2.1 scalbln F -GLIBC_2.1 scalblnf F -GLIBC_2.1 scalblnl F -GLIBC_2.1 sincos F -GLIBC_2.1 sincosf F -GLIBC_2.1 sincosl F -GLIBC_2.1 tgamma F -GLIBC_2.1 tgammaf F -GLIBC_2.1 tgammal F -GLIBC_2.1 trunc F -GLIBC_2.1 truncf F -GLIBC_2.1 truncl F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __acoshl_finite F -GLIBC_2.15 __acosl_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __asinl_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atan2l_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __atanhl_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __coshl_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp10l_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp2l_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __expl_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __fmodl_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __gammal_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __hypotl_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j0l_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __j1l_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __jnl_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __lgammal_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log10l_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log2l_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __logl_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __powl_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __remainderl_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __scalbl_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sinhl_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __sqrtl_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y0l_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __y1l_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.15 __ynl_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 feclearexcept F -GLIBC_2.2 fedisableexcept F -GLIBC_2.2 feenableexcept F -GLIBC_2.2 fegetenv F -GLIBC_2.2 fegetexcept F -GLIBC_2.2 fegetexceptflag F -GLIBC_2.2 feraiseexcept F -GLIBC_2.2 fesetenv F -GLIBC_2.2 fesetexceptflag F -GLIBC_2.2 feupdateenv F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iscanonicall F -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libnsl.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libnsl.abilist deleted file mode 100644 index a23db2aeaf..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libnsl.abilist +++ /dev/null @@ -1,124 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __yp_check F -GLIBC_2.0 xdr_domainname F -GLIBC_2.0 xdr_keydat F -GLIBC_2.0 xdr_mapname F -GLIBC_2.0 xdr_peername F -GLIBC_2.0 xdr_valdat F -GLIBC_2.0 xdr_yp_buf F -GLIBC_2.0 xdr_ypbind_binding F -GLIBC_2.0 xdr_ypbind_resp F -GLIBC_2.0 xdr_ypbind_resptype F -GLIBC_2.0 xdr_ypbind_setdom F -GLIBC_2.0 xdr_ypdelete_args F -GLIBC_2.0 xdr_ypmap_parms F -GLIBC_2.0 xdr_ypmaplist F -GLIBC_2.0 xdr_yppush_status F -GLIBC_2.0 xdr_yppushresp_xfr F -GLIBC_2.0 xdr_ypreq_key F -GLIBC_2.0 xdr_ypreq_nokey F -GLIBC_2.0 xdr_ypreq_xfr F -GLIBC_2.0 xdr_ypresp_all F -GLIBC_2.0 xdr_ypresp_key_val F -GLIBC_2.0 xdr_ypresp_maplist F -GLIBC_2.0 xdr_ypresp_master F -GLIBC_2.0 xdr_ypresp_order F -GLIBC_2.0 xdr_ypresp_val F -GLIBC_2.0 xdr_ypresp_xfr F -GLIBC_2.0 xdr_ypstat F -GLIBC_2.0 xdr_ypupdate_args F -GLIBC_2.0 xdr_ypxfrstat F -GLIBC_2.0 yp_all F -GLIBC_2.0 yp_bind F -GLIBC_2.0 yp_first F -GLIBC_2.0 yp_get_default_domain F -GLIBC_2.0 yp_maplist F -GLIBC_2.0 yp_master F -GLIBC_2.0 yp_match F -GLIBC_2.0 yp_next F -GLIBC_2.0 yp_order F -GLIBC_2.0 yp_unbind F -GLIBC_2.0 yp_update F -GLIBC_2.0 ypbinderr_string F -GLIBC_2.0 yperr_string F -GLIBC_2.0 ypprot_err F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __free_fdresult F -GLIBC_2.1 __nis_default_access F -GLIBC_2.1 __nis_default_group F -GLIBC_2.1 __nis_default_owner F -GLIBC_2.1 __nis_default_ttl F -GLIBC_2.1 __nis_finddirectory F -GLIBC_2.1 __nis_hash F -GLIBC_2.1 __nisbind_connect F -GLIBC_2.1 __nisbind_create F -GLIBC_2.1 __nisbind_destroy F -GLIBC_2.1 __nisbind_next F -GLIBC_2.1 nis_add F -GLIBC_2.1 nis_add_entry F -GLIBC_2.1 nis_addmember F -GLIBC_2.1 nis_checkpoint F -GLIBC_2.1 nis_clone_directory F -GLIBC_2.1 nis_clone_object F -GLIBC_2.1 nis_clone_result F -GLIBC_2.1 nis_creategroup F -GLIBC_2.1 nis_destroy_object F -GLIBC_2.1 nis_destroygroup F -GLIBC_2.1 nis_dir_cmp F -GLIBC_2.1 nis_domain_of F -GLIBC_2.1 nis_domain_of_r F -GLIBC_2.1 nis_first_entry F -GLIBC_2.1 nis_free_directory F -GLIBC_2.1 nis_free_object F -GLIBC_2.1 nis_free_request F -GLIBC_2.1 nis_freenames F -GLIBC_2.1 nis_freeresult F -GLIBC_2.1 nis_freeservlist F -GLIBC_2.1 nis_freetags F -GLIBC_2.1 nis_getnames F -GLIBC_2.1 nis_getservlist F -GLIBC_2.1 nis_ismember F -GLIBC_2.1 nis_leaf_of F -GLIBC_2.1 nis_leaf_of_r F -GLIBC_2.1 nis_lerror F -GLIBC_2.1 nis_list F -GLIBC_2.1 nis_local_directory F -GLIBC_2.1 nis_local_group F -GLIBC_2.1 nis_local_host F -GLIBC_2.1 nis_local_principal F -GLIBC_2.1 nis_lookup F -GLIBC_2.1 nis_mkdir F -GLIBC_2.1 nis_modify F -GLIBC_2.1 nis_modify_entry F -GLIBC_2.1 nis_name_of F -GLIBC_2.1 nis_name_of_r F -GLIBC_2.1 nis_next_entry F -GLIBC_2.1 nis_perror F -GLIBC_2.1 nis_ping F -GLIBC_2.1 nis_print_directory F -GLIBC_2.1 nis_print_entry F -GLIBC_2.1 nis_print_group F -GLIBC_2.1 nis_print_group_entry F -GLIBC_2.1 nis_print_link F -GLIBC_2.1 nis_print_object F -GLIBC_2.1 nis_print_result F -GLIBC_2.1 nis_print_rights F -GLIBC_2.1 nis_print_table F -GLIBC_2.1 nis_read_obj F -GLIBC_2.1 nis_remove F -GLIBC_2.1 nis_remove_entry F -GLIBC_2.1 nis_removemember F -GLIBC_2.1 nis_rmdir F -GLIBC_2.1 nis_servstate F -GLIBC_2.1 nis_sperrno F -GLIBC_2.1 nis_sperror F -GLIBC_2.1 nis_sperror_r F -GLIBC_2.1 nis_stats F -GLIBC_2.1 nis_verifygroup F -GLIBC_2.1 nis_write_obj F -GLIBC_2.1 readColdStartFile F -GLIBC_2.1 writeColdStartFile F -GLIBC_2.1 xdr_cback_data F -GLIBC_2.1 xdr_obj_p F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 xdr_ypall F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist deleted file mode 100644 index 8f9c3254be..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist +++ /dev/null @@ -1,257 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 __close F -GLIBC_2.0 __connect F -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __fork F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __lseek F -GLIBC_2.0 __open F -GLIBC_2.0 __pthread_getspecific F -GLIBC_2.0 __pthread_key_create F -GLIBC_2.0 __pthread_mutex_destroy F -GLIBC_2.0 __pthread_mutex_init F -GLIBC_2.0 __pthread_mutex_lock F -GLIBC_2.0 __pthread_mutex_trylock F -GLIBC_2.0 __pthread_mutex_unlock F -GLIBC_2.0 __pthread_mutexattr_destroy F -GLIBC_2.0 __pthread_mutexattr_init F -GLIBC_2.0 __pthread_mutexattr_settype F -GLIBC_2.0 __pthread_once F -GLIBC_2.0 __pthread_setspecific F -GLIBC_2.0 __read F -GLIBC_2.0 __send F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __wait F -GLIBC_2.0 __write F -GLIBC_2.0 _pthread_cleanup_pop F -GLIBC_2.0 _pthread_cleanup_pop_restore F -GLIBC_2.0 _pthread_cleanup_push F -GLIBC_2.0 _pthread_cleanup_push_defer F -GLIBC_2.0 accept F -GLIBC_2.0 close F -GLIBC_2.0 connect F -GLIBC_2.0 fcntl F -GLIBC_2.0 flockfile F -GLIBC_2.0 fork F -GLIBC_2.0 fsync F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 funlockfile F -GLIBC_2.0 longjmp F -GLIBC_2.0 lseek F -GLIBC_2.0 msync F -GLIBC_2.0 nanosleep F -GLIBC_2.0 open F -GLIBC_2.0 pause F -GLIBC_2.0 pthread_atfork F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cancel F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_create F -GLIBC_2.0 pthread_detach F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_getspecific F -GLIBC_2.0 pthread_join F -GLIBC_2.0 pthread_key_create F -GLIBC_2.0 pthread_key_delete F -GLIBC_2.0 pthread_kill F -GLIBC_2.0 pthread_kill_other_threads_np F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_trylock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_mutexattr_destroy F -GLIBC_2.0 pthread_mutexattr_getkind_np F -GLIBC_2.0 pthread_mutexattr_init F -GLIBC_2.0 pthread_mutexattr_setkind_np F -GLIBC_2.0 pthread_once F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 pthread_setspecific F -GLIBC_2.0 pthread_sigmask F -GLIBC_2.0 pthread_testcancel F -GLIBC_2.0 raise F -GLIBC_2.0 read F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 sem_destroy F -GLIBC_2.0 sem_getvalue F -GLIBC_2.0 sem_init F -GLIBC_2.0 sem_post F -GLIBC_2.0 sem_trywait F -GLIBC_2.0 sem_wait F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 sigaction F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 sigwait F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 vfork F -GLIBC_2.0 wait F -GLIBC_2.0 waitpid F -GLIBC_2.0 write F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __libc_allocate_rtsig F -GLIBC_2.1 __libc_current_sigrtmax F -GLIBC_2.1 __libc_current_sigrtmin F -GLIBC_2.1 pthread_attr_getguardsize F -GLIBC_2.1 pthread_attr_getstackaddr F -GLIBC_2.1 pthread_attr_getstacksize F -GLIBC_2.1 pthread_attr_init F -GLIBC_2.1 pthread_attr_setguardsize F -GLIBC_2.1 pthread_attr_setstackaddr F -GLIBC_2.1 pthread_attr_setstacksize F -GLIBC_2.1 pthread_create F -GLIBC_2.1 pthread_getconcurrency F -GLIBC_2.1 pthread_mutexattr_gettype F -GLIBC_2.1 pthread_mutexattr_settype F -GLIBC_2.1 pthread_rwlock_destroy F -GLIBC_2.1 pthread_rwlock_init F -GLIBC_2.1 pthread_rwlock_rdlock F -GLIBC_2.1 pthread_rwlock_tryrdlock F -GLIBC_2.1 pthread_rwlock_trywrlock F -GLIBC_2.1 pthread_rwlock_unlock F -GLIBC_2.1 pthread_rwlock_wrlock F -GLIBC_2.1 pthread_rwlockattr_destroy F -GLIBC_2.1 pthread_rwlockattr_getkind_np F -GLIBC_2.1 pthread_rwlockattr_getpshared F -GLIBC_2.1 pthread_rwlockattr_init F -GLIBC_2.1 pthread_rwlockattr_setkind_np F -GLIBC_2.1 pthread_rwlockattr_setpshared F -GLIBC_2.1 pthread_setconcurrency F -GLIBC_2.1 sem_destroy F -GLIBC_2.1 sem_getvalue F -GLIBC_2.1 sem_init F -GLIBC_2.1 sem_post F -GLIBC_2.1 sem_trywait F -GLIBC_2.1 sem_wait F -GLIBC_2.1.1 GLIBC_2.1.1 A -GLIBC_2.1.1 sem_close F -GLIBC_2.1.1 sem_open F -GLIBC_2.1.1 sem_unlink F -GLIBC_2.1.2 GLIBC_2.1.2 A -GLIBC_2.1.2 __vfork F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __open64 F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pthread_rwlock_destroy F -GLIBC_2.2 __pthread_rwlock_init F -GLIBC_2.2 __pthread_rwlock_rdlock F -GLIBC_2.2 __pthread_rwlock_tryrdlock F -GLIBC_2.2 __pthread_rwlock_trywrlock F -GLIBC_2.2 __pthread_rwlock_unlock F -GLIBC_2.2 __pthread_rwlock_wrlock F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __res_state F -GLIBC_2.2 lseek64 F -GLIBC_2.2 open64 F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 pthread_attr_getstack F -GLIBC_2.2 pthread_attr_setstack F -GLIBC_2.2 pthread_barrier_destroy F -GLIBC_2.2 pthread_barrier_init F -GLIBC_2.2 pthread_barrier_wait F -GLIBC_2.2 pthread_barrierattr_destroy F -GLIBC_2.2 pthread_barrierattr_init F -GLIBC_2.2 pthread_barrierattr_setpshared F -GLIBC_2.2 pthread_condattr_getpshared F -GLIBC_2.2 pthread_condattr_setpshared F -GLIBC_2.2 pthread_getcpuclockid F -GLIBC_2.2 pthread_mutex_timedlock F -GLIBC_2.2 pthread_mutexattr_getpshared F -GLIBC_2.2 pthread_mutexattr_setpshared F -GLIBC_2.2 pthread_rwlock_timedrdlock F -GLIBC_2.2 pthread_rwlock_timedwrlock F -GLIBC_2.2 pthread_spin_destroy F -GLIBC_2.2 pthread_spin_init F -GLIBC_2.2 pthread_spin_lock F -GLIBC_2.2 pthread_spin_trylock F -GLIBC_2.2 pthread_spin_unlock F -GLIBC_2.2 pthread_yield F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 sem_timedwait F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 pthread_getattr_np F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libresolv.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libresolv.abilist deleted file mode 100644 index 4d50e7c8c6..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libresolv.abilist +++ /dev/null @@ -1,100 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __b64_ntop F -GLIBC_2.0 __b64_pton F -GLIBC_2.0 __dn_comp F -GLIBC_2.0 __dn_count_labels F -GLIBC_2.0 __dn_skipname F -GLIBC_2.0 __fp_nquery F -GLIBC_2.0 __fp_query F -GLIBC_2.0 __fp_resstat F -GLIBC_2.0 __hostalias F -GLIBC_2.0 __loc_aton F -GLIBC_2.0 __loc_ntoa F -GLIBC_2.0 __p_cdname F -GLIBC_2.0 __p_cdnname F -GLIBC_2.0 __p_class F -GLIBC_2.0 __p_class_syms D 0x54 -GLIBC_2.0 __p_fqname F -GLIBC_2.0 __p_fqnname F -GLIBC_2.0 __p_option F -GLIBC_2.0 __p_query F -GLIBC_2.0 __p_secstodate F -GLIBC_2.0 __p_time F -GLIBC_2.0 __p_type F -GLIBC_2.0 __p_type_syms D 0x228 -GLIBC_2.0 __putlong F -GLIBC_2.0 __putshort F -GLIBC_2.0 __res_close F -GLIBC_2.0 __res_dnok F -GLIBC_2.0 __res_hnok F -GLIBC_2.0 __res_isourserver F -GLIBC_2.0 __res_mailok F -GLIBC_2.0 __res_nameinquery F -GLIBC_2.0 __res_ownok F -GLIBC_2.0 __res_queriesmatch F -GLIBC_2.0 __res_send F -GLIBC_2.0 __sym_ntop F -GLIBC_2.0 __sym_ntos F -GLIBC_2.0 __sym_ston F -GLIBC_2.0 _gethtbyaddr F -GLIBC_2.0 _gethtbyname F -GLIBC_2.0 _gethtbyname2 F -GLIBC_2.0 _gethtent F -GLIBC_2.0 _getlong F -GLIBC_2.0 _getshort F -GLIBC_2.0 _res_opcodes D 0x40 -GLIBC_2.0 _sethtent F -GLIBC_2.0 dn_expand F -GLIBC_2.0 inet_net_ntop F -GLIBC_2.0 inet_net_pton F -GLIBC_2.0 inet_neta F -GLIBC_2.0 res_gethostbyaddr F -GLIBC_2.0 res_gethostbyname F -GLIBC_2.0 res_gethostbyname2 F -GLIBC_2.0 res_mkquery F -GLIBC_2.0 res_query F -GLIBC_2.0 res_querydomain F -GLIBC_2.0 res_search F -GLIBC_2.0 res_send_setqhook F -GLIBC_2.0 res_send_setrhook F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __dn_expand F -GLIBC_2.2 __res_hostalias F -GLIBC_2.2 __res_mkquery F -GLIBC_2.2 __res_nmkquery F -GLIBC_2.2 __res_nquery F -GLIBC_2.2 __res_nquerydomain F -GLIBC_2.2 __res_nsearch F -GLIBC_2.2 __res_nsend F -GLIBC_2.2 __res_query F -GLIBC_2.2 __res_querydomain F -GLIBC_2.2 __res_search F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/librt.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/librt.abilist deleted file mode 100644 index 15e4418863..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/librt.abilist +++ /dev/null @@ -1,47 +0,0 @@ -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 aio_cancel F -GLIBC_2.1 aio_cancel64 F -GLIBC_2.1 aio_error F -GLIBC_2.1 aio_error64 F -GLIBC_2.1 aio_fsync F -GLIBC_2.1 aio_fsync64 F -GLIBC_2.1 aio_init F -GLIBC_2.1 aio_read F -GLIBC_2.1 aio_read64 F -GLIBC_2.1 aio_return F -GLIBC_2.1 aio_return64 F -GLIBC_2.1 aio_suspend F -GLIBC_2.1 aio_suspend64 F -GLIBC_2.1 aio_write F -GLIBC_2.1 aio_write64 F -GLIBC_2.1 lio_listio F -GLIBC_2.1 lio_listio64 F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 clock_getcpuclockid F -GLIBC_2.2 clock_getres F -GLIBC_2.2 clock_gettime F -GLIBC_2.2 clock_nanosleep F -GLIBC_2.2 clock_settime F -GLIBC_2.2 shm_open F -GLIBC_2.2 shm_unlink F -GLIBC_2.2 timer_create F -GLIBC_2.2 timer_delete F -GLIBC_2.2 timer_getoverrun F -GLIBC_2.2 timer_gettime F -GLIBC_2.2 timer_settime F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libthread_db.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libthread_db.abilist deleted file mode 100644 index a8a8c2c68d..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libthread_db.abilist +++ /dev/null @@ -1,44 +0,0 @@ -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 td_init F -GLIBC_2.1.3 td_log F -GLIBC_2.1.3 td_ta_clear_event F -GLIBC_2.1.3 td_ta_delete F -GLIBC_2.1.3 td_ta_enable_stats F -GLIBC_2.1.3 td_ta_event_addr F -GLIBC_2.1.3 td_ta_event_getmsg F -GLIBC_2.1.3 td_ta_get_nthreads F -GLIBC_2.1.3 td_ta_get_ph F -GLIBC_2.1.3 td_ta_get_stats F -GLIBC_2.1.3 td_ta_map_id2thr F -GLIBC_2.1.3 td_ta_map_lwp2thr F -GLIBC_2.1.3 td_ta_new F -GLIBC_2.1.3 td_ta_reset_stats F -GLIBC_2.1.3 td_ta_set_event F -GLIBC_2.1.3 td_ta_setconcurrency F -GLIBC_2.1.3 td_ta_thr_iter F -GLIBC_2.1.3 td_ta_tsd_iter F -GLIBC_2.1.3 td_thr_clear_event F -GLIBC_2.1.3 td_thr_dbresume F -GLIBC_2.1.3 td_thr_dbsuspend F -GLIBC_2.1.3 td_thr_event_enable F -GLIBC_2.1.3 td_thr_event_getmsg F -GLIBC_2.1.3 td_thr_get_info F -GLIBC_2.1.3 td_thr_getfpregs F -GLIBC_2.1.3 td_thr_getgregs F -GLIBC_2.1.3 td_thr_getxregs F -GLIBC_2.1.3 td_thr_getxregsize F -GLIBC_2.1.3 td_thr_set_event F -GLIBC_2.1.3 td_thr_setfpregs F -GLIBC_2.1.3 td_thr_setgregs F -GLIBC_2.1.3 td_thr_setprio F -GLIBC_2.1.3 td_thr_setsigpending F -GLIBC_2.1.3 td_thr_setxregs F -GLIBC_2.1.3 td_thr_sigsetmask F -GLIBC_2.1.3 td_thr_tsd F -GLIBC_2.1.3 td_thr_validate F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 td_symbol_list F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libutil.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libutil.abilist deleted file mode 100644 index 89c67755c4..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 forkpty F -GLIBC_2.0 login F -GLIBC_2.0 login_tty F -GLIBC_2.0 logout F -GLIBC_2.0 logwtmp F -GLIBC_2.0 openpty F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/makecontext.S b/sysdeps/unix/sysv/linux/m68k/m680x0/makecontext.S deleted file mode 100644 index 59fe3a3b2d..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/makecontext.S +++ /dev/null @@ -1,103 +0,0 @@ -/* Create new context. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - - -ENTRY(__makecontext) - move.l 4(%sp), %a0 - - /* Get the address of the function we are supposed to run. */ - move.l 8(%sp), oPC(%a0) - - /* Compute the address of the stack. The information comes from - to us_stack element. */ - move.l oSS_SP(%a0), %a1 - add.l oSS_SIZE(%a0), %a1 - - /* Remember the number of parameters for the exit handler since - it has to remove them. We store the number in the D7 register - which the function we will call must preserve. */ - move.l 12(%sp), %d1 - move.l %d1, oGREGS+7*4(%a0) - - /* Make room on the new stack for the parameters. - Room for the arguments, return address (== 1f) and - oLINK pointer is needed. */ - neg.l %d1 - lea -8(%a1,%d1.l*4), %a1 - neg.l %d1 - - /* Store the future stack pointer. */ - move.l %a1, oSP(%a0) - - /* Put the next context on the new stack (from the uc_link - element). */ - move.l oLINK(%a0), 4(%a1,%d1.l*4) - - /* Copy all the parameters. */ -1: subq.l #1,%d1 - jmi 2f - move.l 16(%sp,%d1.l*4), 4(%a1,%d1.l*4) - jra 1b -2: - - /* If the function we call returns we must continue with the - context which is given in the uc_link element. To do this - set the return address for the function the user provides - to a little bit of helper code which does the magic (see - below). */ - lea 1f(%pc), %a0 - move.l %a0, (%a1) - /* 'makecontext' returns no value. */ - rts - - /* This is the helper code which gets called if a function which - is registered with 'makecontext' returns. In this case we - have to install the context listed in the uc_link element of - the context 'makecontext' manipulated at the time of the - 'makecontext' call. If the pointer is NULL the process must - terminate. - Make sure to separate the return label from the previous unwind - region, because the unwinder uses ra-1 to find the FDE. */ - cfi_endproc - nop -1: - /* This removes the parameters passed to the function given to - 'makecontext' from the stack. D7 contains the number of - parameters (see above). */ - lea (%sp,%d7.l*4), %sp - - tst.l (%sp) /* Check the next context. */ - jeq 2f /* If it is zero exit. */ - - jbsr JUMPTARGET(__setcontext) - /* If this returns (which can happen if the syscall fails) we'll - exit the program with the return error value (-1). */ - - move.l %d0, (%sp) -2: jbsr HIDDEN_JUMPTARGET(exit) - /* The 'exit' call should never return. In case it does cause - the process to terminate. */ - illegal - cfi_startproc -END(__makecontext) - -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/setcontext.S b/sysdeps/unix/sysv/linux/m68k/m680x0/setcontext.S deleted file mode 100644 index 29ac7df9b3..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/setcontext.S +++ /dev/null @@ -1,94 +0,0 @@ -/* Install given context. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - -ENTRY(__setcontext) - /* Load address of the context data structure. */ - move.l 4(%sp), %a0 - - /* Get the current signal mask. Note that we preserve D2/D3 in case - the system call fails and we return from the function with an - error. */ - move.l %d3, -(%sp) - cfi_adjust_cfa_offset (4) - cfi_rel_offset (%d3, 0) - move.l %d2, -(%sp) - cfi_adjust_cfa_offset (4) - cfi_rel_offset (%d2, 0) - clr.l %d3 - lea oSIGMASK(%a0), %a1 - move.l %a1, %d2 - move.l #SIG_SETMASK, %d1 - move.l #__NR_sigprocmask, %d0 - trap #0 - cmp.l #-4095, %d0 /* Check %d0 for error. */ - jcs 0f - move.l (%sp)+, %d2 - cfi_adjust_cfa_offset (-4) - cfi_restore (d2) - move.l (%sp)+, %d3 - cfi_adjust_cfa_offset (-4) - cfi_restore (d3) - jra SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ - -0: /* Load the new stack pointer. */ - move.l oSP(%a0), %sp - cfi_def_cfa (%a0, 0) - cfi_offset (%d2, oGREGS+2*4) - cfi_offset (%d3, oGREGS+3*4) - cfi_offset (%d4, oGREGS+4*4) - cfi_offset (%d5, oGREGS+5*4) - cfi_offset (%d6, oGREGS+6*4) - cfi_offset (%d7, oGREGS+7*4) - cfi_offset (%a2, oGREGS+10*4) - cfi_offset (%a3, oGREGS+11*4) - cfi_offset (%a4, oGREGS+12*4) - cfi_offset (%a5, oGREGS+13*4) - cfi_offset (%a6, oGREGS+14*4) - cfi_offset (%fp2, oFP2+0*12) - cfi_offset (%fp3, oFP2+1*12) - cfi_offset (%fp4, oFP2+2*12) - cfi_offset (%fp5, oFP2+3*12) - cfi_offset (%fp6, oFP2+4*12) - cfi_offset (%fp7, oFP2+5*12) - cfi_offset (%pc, oPC) - - /* Load the values of all the preserved registers (except SP). */ - movem.l oGREGS+2*4(%a0), %d2-%d7 - movem.l oGREGS+10*4(%a0), %a2-%a6 - fmovem.l oFPREGS(%a0), %fpsr/%fpcr/%fpiar - fmovem.x oFP2(%a0), %fp2-%fp7 - clr.l %d0 - - /* Fetch the address to return to. */ - movl oPC(%a0), %a1 - - /* End FDE here, we fall into another context. */ - cfi_endproc - cfi_startproc - cfi_register (%pc, %a1) - - jmp (%a1) - - cfi_offset (%pc, -4) -PSEUDO_END(__setcontext) - -weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/swapcontext.S b/sysdeps/unix/sysv/linux/m68k/m680x0/swapcontext.S deleted file mode 100644 index b36a5db21c..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/swapcontext.S +++ /dev/null @@ -1,108 +0,0 @@ -/* Save current context and install the given one. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - - -ENTRY(__swapcontext) - /* Load address of the context data structure we save in. */ - move.l 4(%sp), %a0 - - /* Save the preserved registers and the return address. */ - movem.l %d2-%d7, oGREGS+2*4(%a0) - movem.l %a2-%a6, oGREGS+10*4(%a0) - lea 4(%sp), %a1 - move.l %a1, oSP(%a0) - move.l (%sp), oPC(%a0) - fmovem.l %fpsr/%fpcr/%fpiar, oFPREGS(%a0) - fmovem.x %fp2-%fp7, oFP2(%a0) - cfi_def_cfa (%a0, 0) - cfi_offset (%d2, oGREGS+2*4) - cfi_offset (%d3, oGREGS+3*4) - cfi_offset (%a2, oGREGS+10*4) - cfi_offset (%pc, oPC) - - /* Load address of the context data structure we have to load. */ - move.l 8(%sp), %a1 - - /* Save the current signal mask and install the new one. */ - lea oSIGMASK(%a0), %a2 - move.l %a2, %d3 - lea oSIGMASK(%a1), %a2 - move.l %a2, %d2 - move.l #SIG_SETMASK, %d1 - move.l #__NR_sigprocmask, %d0 - trap #0 - cmp.l #-4095, %d0 /* Check %d0 for error. */ - jcs 0f - /* Restore registers. */ - move.l oGREGS+2*4(%a0), %d2 - cfi_restore (%d2) - move.l oGREGS+3*4(%a0), %d3 - cfi_restore (%d3) - move.l oGREGS+10*4(%a0), %a2 - cfi_restore (%a2) - jra SYSCALL_ERROR_LABEL /* Jump to error handler. */ - -0: /* Load the new stack pointer. */ - move.l oSP(%a1), %sp - cfi_def_cfa (%a1, 0) - cfi_offset (%d2, oGREGS+2*4) - cfi_offset (%d3, oGREGS+3*4) - cfi_offset (%d4, oGREGS+4*4) - cfi_offset (%d5, oGREGS+5*4) - cfi_offset (%d6, oGREGS+6*4) - cfi_offset (%d7, oGREGS+7*4) - cfi_offset (%a2, oGREGS+10*4) - cfi_offset (%a3, oGREGS+11*4) - cfi_offset (%a4, oGREGS+12*4) - cfi_offset (%a5, oGREGS+13*4) - cfi_offset (%a6, oGREGS+14*4) - cfi_offset (%fp2, oFP2+0*12) - cfi_offset (%fp3, oFP2+1*12) - cfi_offset (%fp4, oFP2+2*12) - cfi_offset (%fp5, oFP2+3*12) - cfi_offset (%fp6, oFP2+4*12) - cfi_offset (%fp7, oFP2+5*12) - cfi_offset (%pc, oPC) - - /* Load the values of all the preserved registers (except SP). */ - movem.l oGREGS+2*4(%a1), %d2-%d7 - movem.l oGREGS+10*4(%a1), %a2-%a6 - fmovem.l oFPREGS(%a1), %fpsr/%fpcr/%fpiar - fmovem.x oFP2(%a1), %fp2-%fp7 - - /* Clear D0 to indicate success. */ - clr.l %d0 - - /* Fetch the address to return to. */ - move.l oPC(%a1), %a0 - - /* End FDE here, we fall into another context. */ - cfi_endproc - cfi_startproc - cfi_register (%pc, %a0) - - jmp (%a0) - - cfi_offset (%pc, -4) -PSEUDO_END(__swapcontext) - -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/sysdep.h b/sysdeps/unix/sysv/linux/m68k/m680x0/sysdep.h deleted file mode 100644 index e3848f684b..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/sysdep.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINUX_M68K_M680X0_SYSDEP_H -#define _LINUX_M68K_M680X0_SYSDEP_H 1 - -#include -#include -#include - -#define SYSCALL_ERROR_LOAD_GOT(reg) \ - lea (_GLOBAL_OFFSET_TABLE_@GOTPC, %pc), reg - -#endif diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/ucontext_i.sym b/sysdeps/unix/sysv/linux/m68k/m680x0/ucontext_i.sym deleted file mode 100644 index 46bd4bf15f..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/ucontext_i.sym +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include -#include - --- - -SIG_SETMASK - -#define ucontext(member) offsetof (ucontext_t, member) -#define mcontext(member) ucontext (uc_mcontext.member) - -oLINK ucontext (uc_link) -oSS_SP ucontext (uc_stack.ss_sp) -oSS_SIZE ucontext (uc_stack.ss_size) -oGREGS mcontext (gregs) -oSP mcontext (gregs[R_SP]) -oPC mcontext (gregs[R_PC]) -oFPREGS mcontext (fpregs) -oFP2 mcontext (fpregs.f_fpregs[2]) -oSIGMASK ucontext (uc_sigmask) diff --git a/sysdeps/unix/sysv/linux/m68k/m68k-helpers.S b/sysdeps/unix/sysv/linux/m68k/m68k-helpers.S deleted file mode 100644 index 8752f1c632..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m68k-helpers.S +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maxim Kuvyrkov , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - .text - - .hidden __vdso_read_tp_stub -ENTRY (__vdso_read_tp_stub) - move.l #__NR_get_thread_area, %d0 - trap #0 - move.l %d0, %a0 - rts -END (__vdso_read_tp_stub) - -# ifdef SHARED -/* GCC will emit calls to this routine. Linux has an - equivalent helper function (which clobbers fewer registers than - a normal function call) in a vdso; tail call to the - helper. */ -# if IS_IN (rtld) -/* rtld gets a hidden copy of __m68k_read_tp. */ - .hidden __m68k_read_tp -# endif -ENTRY (__m68k_read_tp) - LOAD_GOT (%a0) - move.l M68K_VDSO_SYMBOL (__vdso_read_tp)@GOT(%a0), %a0 - move.l (%a0), %a0 - jmp (%a0) -END (__m68k_read_tp) - -/* The following two stubs are for macros in atomic.h, they can't - clobber anything. */ - - .hidden __vdso_atomic_cmpxchg_32_stub -ENTRY (__vdso_atomic_cmpxchg_32_stub) - move.l %d2, -(%sp) - cfi_adjust_cfa_offset (4) - cfi_rel_offset (%d2, 0) - move.l %d0, %d2 - move.l #SYS_ify (atomic_cmpxchg_32), %d0 - trap #0 - move.l (%sp)+, %d2 - cfi_adjust_cfa_offset (-4) - cfi_restore (%d2) - rts -END (__vdso_atomic_cmpxchg_32_stub) - - .hidden __vdso_atomic_barrier_stub -ENTRY (__vdso_atomic_barrier_stub) - move.l %d0, -(%sp) - cfi_adjust_cfa_offset (4) - move.l #SYS_ify (atomic_barrier), %d0 - trap #0 - move.l (%sp)+, %d0 - cfi_adjust_cfa_offset (-4) - rts -END (__vdso_atomic_barrier_stub) -# else /* !SHARED */ -/* If the vDSO is not available, use a syscall to get TP. */ - strong_alias (__vdso_read_tp_stub, __m68k_read_tp) -# endif /* SHARED */ diff --git a/sysdeps/unix/sysv/linux/m68k/m68k-vdso.c b/sysdeps/unix/sysv/linux/m68k/m68k-vdso.c deleted file mode 100644 index f346dac077..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m68k-vdso.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maxim Kuvyrkov , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifdef SHARED - -#include - -/* Because these pointers are used from other libraries than libc, - they are exported at GLIBC_PRIVATE version. - We initialize them to syscall implementation so that they will be ready - to use from the very beginning. */ -void * M68K_VDSO_SYMBOL (__vdso_read_tp) -= (void *) __vdso_read_tp_stub; -void * M68K_VDSO_SYMBOL (__vdso_atomic_cmpxchg_32) -= (void *) __vdso_atomic_cmpxchg_32_stub; -void * M68K_VDSO_SYMBOL (__vdso_atomic_barrier) -= (void *) __vdso_atomic_barrier_stub; - -#endif /* SHARED */ diff --git a/sysdeps/unix/sysv/linux/m68k/m68k-vdso.h b/sysdeps/unix/sysv/linux/m68k/m68k-vdso.h deleted file mode 100644 index cf67af7dc2..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/m68k-vdso.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Resolve function pointers to VDSO functions. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maxim Kuvyrkov , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -#ifndef _M68K_VDSO_H -#define _M68K_VDSO_H - -#ifdef SHARED - -# if IS_IN (rtld) -# define M68K_VDSO_SYMBOL(name) __rtld_##name -# define STR_M68K_VDSO_SYMBOL(name) "__rtld_" #name -# else -# define M68K_VDSO_SYMBOL(name) name -# define STR_M68K_VDSO_SYMBOL(name) #name -# endif - -# ifndef __ASSEMBLER__ - -/* We define __rtld_* copies for rtld. - We need them visible in libc to initialize. */ -# if IS_IN (rtld) || IS_IN (libc) -extern void *__rtld___vdso_read_tp; -extern void *__rtld___vdso_atomic_cmpxchg_32; -extern void *__rtld___vdso_atomic_barrier; - -/* These stubs are meant to be invoked only from the assembly. */ -extern void __vdso_read_tp_stub (void); -extern void __vdso_atomic_cmpxchg_32_stub (void); -extern void __vdso_atomic_barrier_stub (void); -# endif /* IS_IN (rtld) || IS_IN (libc) */ - -/* RTLD should only use its own copies. */ -# if !IS_IN (rtld) -extern void *__vdso_read_tp; -extern void *__vdso_atomic_cmpxchg_32; -extern void *__vdso_atomic_barrier; -# endif /* !IS_IN (rtld) */ - -# endif /* !__ASSEMBLER__ */ - -#endif /* SHARED */ - -#endif /* _M68K_VDSO_H */ diff --git a/sysdeps/unix/sysv/linux/m68k/mmap_internal.h b/sysdeps/unix/sysv/linux/m68k/mmap_internal.h deleted file mode 100644 index bd8bd3843b..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/mmap_internal.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Common mmap definition for Linux implementation. Linux/m68k version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef MMAP_M68K_INTERNAL_LINUX_H -#define MMAP_M68K_INTERNAL_LINUX_H - -/* ColdFire and Sun 3 kernels have PAGE_SHIFT set to 13 and expect - mmap2 offset to be provided in 8K pages. Determine the shift - dynamically with getpagesize. */ -#define MMAP2_PAGE_SHIFT -1 - -#include_next - -#endif diff --git a/sysdeps/unix/sysv/linux/m68k/mremap.S b/sysdeps/unix/sysv/linux/m68k/mremap.S deleted file mode 100644 index 01be848f45..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/mremap.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* The mremap system call is special because it needs to return - its value in register %a0. */ - - .text -PSEUDO (__mremap, mremap, 5) - move.l %d0, %a0 - rts -PSEUDO_END (__mremap) -weak_alias (__mremap, mremap) diff --git a/sysdeps/unix/sysv/linux/m68k/pt-vfork.c b/sysdeps/unix/sysv/linux/m68k/pt-vfork.c deleted file mode 100644 index 5fbc6526aa..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/pt-vfork.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/putmsg.c b/sysdeps/unix/sysv/linux/m68k/putmsg.c deleted file mode 100644 index ebc1680ca7..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/putmsg.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/readdir64.c b/sysdeps/unix/sysv/linux/m68k/readdir64.c deleted file mode 100644 index 2ea26dd409..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/readdir64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/readdir64_r.c b/sysdeps/unix/sysv/linux/m68k/readdir64_r.c deleted file mode 100644 index 9f54f897e3..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/readdir64_r.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/register-dump.h b/sysdeps/unix/sysv/linux/m68k/register-dump.h deleted file mode 100644 index d1818c35d6..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/register-dump.h +++ /dev/null @@ -1,207 +0,0 @@ -/* Dump registers. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include <_itoa.h> - -/* We will print the register dump in this format: - - D0: XXXXXXXX D1: XXXXXXXX D2: XXXXXXXX D3: XXXXXXXX - D4: XXXXXXXX D5: XXXXXXXX D6: XXXXXXXX D7: XXXXXXXX - A0: XXXXXXXX A1: XXXXXXXX A2: XXXXXXXX A3: XXXXXXXX - A4: XXXXXXXX A5: XXXXXXXX A6: XXXXXXXX A7: XXXXXXXX - PC: XXXXXXXX SR: XXXX - - OldMask: XXXXXXXX Vector: XXXX - - FP0: XXXXXXXXXXXXXXXXXXXXXXXX FP1: XXXXXXXXXXXXXXXXXXXXXXXX - FP2: XXXXXXXXXXXXXXXXXXXXXXXX FP3: XXXXXXXXXXXXXXXXXXXXXXXX - FP4: XXXXXXXXXXXXXXXXXXXXXXXX FP5: XXXXXXXXXXXXXXXXXXXXXXXX - FP6: XXXXXXXXXXXXXXXXXXXXXXXX FP7: XXXXXXXXXXXXXXXXXXXXXXXX - FPCR: XXXXXXXX FPSR: XXXXXXXX FPIAR: XXXXXXXX - -*/ - -/* Linux saves only the call-clobbered registers in the sigcontext. We - need to use a trampoline that saves the rest so that the C code can - access them. We use the sc_fpstate field, since the handler is not - supposed to return anyway, thus it doesn't matter that it's clobbered. */ - -/* static */ void catch_segfault (int, int, struct sigcontext *); - -/* Dummy function so that we can use asm with arguments. */ -static void __attribute_used__ -__dummy__ (void) -{ - asm ("\n\ -catch_segfault:\n\ - move.l 12(%%sp),%%a0\n\ - lea %c0(%%a0),%%a0\n\ - /* Clear the first 4 bytes to make it a null fp state, just\n\ - in case the handler does return. */\n\ - clr.l (%%a0)+\n\ - movem.l %%d2-%%d7/%%a2-%%a6,(%%a0)\n" -#ifndef __mcoldfire__ - "fmovem.x %%fp2-%%fp7,11*4(%%a0)\n" -#elif defined __mcffpu__ - "fmovem.d %%fp2-%%fp7,11*4(%%a0)\n" -#endif - "jra real_catch_segfault" - : : "n" (offsetof (struct sigcontext, sc_fpstate))); -} -#define catch_segfault(a,b) \ - __attribute_used__ real_catch_segfault(a,b) - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -register_dump (int fd, struct sigcontext *ctx) -{ - char regs[20][8]; - char fpregs[11][24]; - struct iovec iov[63], *next_iov = iov; - unsigned long *p = (unsigned long *) ctx->sc_fpstate + 1; - unsigned long *pfp = (unsigned long *) ctx->sc_fpregs; - int i, j, fpreg_size; - -#define ADD_STRING(str) \ - next_iov->iov_base = (char *) (str); \ - next_iov->iov_len = strlen (str); \ - ++next_iov -#define ADD_MEM(str, len) \ - next_iov->iov_base = (str); \ - next_iov->iov_len = (len); \ - ++next_iov - -#ifdef __mcoldfire__ - fpreg_size = 16; -#else - fpreg_size = 24; -#endif - - /* Generate strings of register contents. */ - hexvalue (ctx->sc_d0, regs[0], 8); - hexvalue (ctx->sc_d1, regs[1], 8); - hexvalue (*p++, regs[2], 8); - hexvalue (*p++, regs[3], 8); - hexvalue (*p++, regs[4], 8); - hexvalue (*p++, regs[5], 8); - hexvalue (*p++, regs[6], 8); - hexvalue (*p++, regs[7], 8); - hexvalue (ctx->sc_a0, regs[8], 8); - hexvalue (ctx->sc_a1, regs[9], 8); - hexvalue (*p++, regs[10], 8); - hexvalue (*p++, regs[11], 8); - hexvalue (*p++, regs[12], 8); - hexvalue (*p++, regs[13], 8); - hexvalue (*p++, regs[14], 8); - hexvalue (ctx->sc_usp, regs[15], 8); - hexvalue (ctx->sc_pc, regs[16], 8); - hexvalue (ctx->sc_sr, regs[17], 4); - hexvalue (ctx->sc_mask, regs[18], 8); - hexvalue (ctx->sc_formatvec & 0xfff, regs[19], 4); - for (i = 0; i < 2; i++) - for (j = 0; j < fpreg_size; j += 8) - hexvalue (*pfp++, fpregs[i] + j, 8); - for (i = 2; i < 8; i++) - for (j = 0; j < fpreg_size; j += 8) - hexvalue (*p++, fpregs[i] + j, 8); - hexvalue (ctx->sc_fpcntl[0], fpregs[8], 8); - hexvalue (ctx->sc_fpcntl[1], fpregs[9], 8); - hexvalue (ctx->sc_fpcntl[2], fpregs[10], 8); - - /* Generate the output. */ - ADD_STRING ("Register dump:\n\n D0: "); - ADD_MEM (regs[0], 8); - ADD_STRING (" D1: "); - ADD_MEM (regs[1], 8); - ADD_STRING (" D2: "); - ADD_MEM (regs[2], 8); - ADD_STRING (" D3: "); - ADD_MEM (regs[3], 8); - ADD_STRING ("\n D4: "); - ADD_MEM (regs[4], 8); - ADD_STRING (" D5: "); - ADD_MEM (regs[5], 8); - ADD_STRING (" D6: "); - ADD_MEM (regs[6], 8); - ADD_STRING (" D7: "); - ADD_MEM (regs[7], 8); - ADD_STRING ("\n A0: "); - ADD_MEM (regs[8], 8); - ADD_STRING (" A1: "); - ADD_MEM (regs[9], 8); - ADD_STRING (" A2: "); - ADD_MEM (regs[10], 8); - ADD_STRING (" A3: "); - ADD_MEM (regs[11], 8); - ADD_STRING ("\n A4: "); - ADD_MEM (regs[12], 8); - ADD_STRING (" A5: "); - ADD_MEM (regs[13], 8); - ADD_STRING (" A6: "); - ADD_MEM (regs[14], 8); - ADD_STRING (" A7: "); - ADD_MEM (regs[15], 8); - ADD_STRING ("\n PC: "); - ADD_MEM (regs[16], 8); - ADD_STRING (" SR: "); - ADD_MEM (regs[17], 4); - - ADD_STRING ("\n\n OldMask: "); - ADD_MEM (regs[18], 8); - ADD_STRING (" Vector: "); - ADD_MEM (regs[19], 4); - - ADD_STRING ("\n\n FP0: "); - ADD_MEM (fpregs[0], fpreg_size); - ADD_STRING (" FP1: "); - ADD_MEM (fpregs[1], fpreg_size); - ADD_STRING ("\n FP2: "); - ADD_MEM (fpregs[2], fpreg_size); - ADD_STRING (" FP3: "); - ADD_MEM (fpregs[3], fpreg_size); - ADD_STRING ("\n FP4: "); - ADD_MEM (fpregs[4], fpreg_size); - ADD_STRING (" FP5: "); - ADD_MEM (fpregs[5], fpreg_size); - ADD_STRING ("\n FP6: "); - ADD_MEM (fpregs[6], fpreg_size); - ADD_STRING (" FP7: "); - ADD_MEM (fpregs[7], fpreg_size); - ADD_STRING ("\n FPCR: "); - ADD_MEM (fpregs[8], 8); - ADD_STRING (" FPSR: "); - ADD_MEM (fpregs[9], 8); - ADD_STRING (" FPIAR: "); - ADD_MEM (fpregs[10], 8); - ADD_STRING ("\n"); - - /* Write the stuff out. */ - writev (fd, iov, next_iov - iov); -} - -#define REGISTER_DUMP register_dump (fd, ctx) diff --git a/sysdeps/unix/sysv/linux/m68k/scandir64.c b/sysdeps/unix/sysv/linux/m68k/scandir64.c deleted file mode 100644 index 506fd8877c..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/scandir64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h b/sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h deleted file mode 100644 index 3c43e55cae..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#define SIGCONTEXT int _code, struct sigcontext * -#define SIGCONTEXT_EXTRA_ARGS _code, -#define GET_PC(ctx) ((void *) (ctx)->sc_pc) -#define GET_FRAME(ctx) ((void *) __builtin_frame_address (1)) -#define GET_STACK(ctx) ((void *) (ctx)->sc_usp) -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff --git a/sysdeps/unix/sysv/linux/m68k/sys/procfs.h b/sysdeps/unix/sysv/linux/m68k/sys/procfs.h deleted file mode 100644 index f2d63d52e1..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/sys/procfs.h +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somewhat modelled after the file of the same name on SVR4 - systems. It provides a definition of the core file format for ELF - used on Linux. It doesn't have anything to do with the /proc file - system, even though Linux has one. - - Anyway, the whole purpose of this file is for GDB and GDB only. - Don't read too much into it. Don't use it for anything other than - GDB unless you know what you are doing. */ - -#include -#include -#include -#include - -__BEGIN_DECLS - -/* Type for a general-purpose register. */ -typedef unsigned long elf_greg_t; - -/* And the whole bunch of them. We could have used `struct - user_regs_struct' directly in the typedef, but tradition says that - the register set is an array, which does have some peculiar - semantics, so leave it that way. */ -#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t)) -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -/* Register set for the floating-point registers. */ -typedef struct user_m68kfp_struct elf_fpregset_t; - - -/* Signal info. */ -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with Linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - GDB doesn't really use excluded. */ - -struct elf_prstatus - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args. */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned short int pr_uid; - unsigned short int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - - -/* The rest of this file provides the types for emulation of the - Solaris interfaces that should be implemented by - users of libthread_db. */ - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore have only one PID type. */ -typedef __pid_t lwpid_t; - -/* Process status and info. In the end we do provide typedefs for them. */ -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/m68k/sys/reg.h b/sysdeps/unix/sysv/linux/m68k/sys/reg.h deleted file mode 100644 index 133c862b49..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/sys/reg.h +++ /dev/null @@ -1,101 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_REG_H -#define _SYS_REG_H 1 - -/* Index into an array of 4 byte integers returned from ptrace for - location of the users' stored general purpose registers. */ - -enum -{ - PT_D1 = 0, -#define PT_D1 PT_D1 - PT_D2 = 1, -#define PT_D2 PT_D2 - PT_D3 = 2, -#define PT_D3 PT_D3 - PT_D4 = 3, -#define PT_D4 PT_D4 - PT_D5 = 4, -#define PT_D5 PT_D5 - PT_D6 = 5, -#define PT_D6 PT_D6 - PT_D7 = 6, -#define PT_D7 PT_D7 - PT_A0 = 7, -#define PT_A0 PT_A0 - PT_A1 = 8, -#define PT_A1 PT_A1 - PT_A2 = 9, -#define PT_A2 PT_A2 - PT_A3 = 10, -#define PT_A3 PT_A3 - PT_A4 = 11, -#define PT_A4 PT_A4 - PT_A5 = 12, -#define PT_A5 PT_A5 - PT_A6 = 13, -#define PT_A6 PT_A6 - PT_D0 = 14, -#define PT_D0 PT_D0 - PT_USP = 15, -#define PT_USP PT_USP - PT_ORIG_D0 = 16, -#define PT_ORIG_D0 PT_ORIG_D0 - PT_SR = 17, -#define PT_SR PT_SR - PT_PC = 18, -#define PT_PC PT_PC - -#ifdef __mcoldfire__ - PT_FP0 = 21, - PT_FP1 = 23, - PT_FP2 = 25, - PT_FP3 = 27, - PT_FP4 = 29, - PT_FP5 = 31, - PT_FP6 = 33, - PT_FP7 = 35, -#else - PT_FP0 = 21, - PT_FP1 = 24, - PT_FP2 = 27, - PT_FP3 = 30, - PT_FP4 = 33, - PT_FP5 = 36, - PT_FP6 = 39, - PT_FP7 = 42, -#endif -#define PT_FP0 PT_FP0 -#define PT_FP1 PT_FP1 -#define PT_FP2 PT_FP2 -#define PT_FP3 PT_FP3 -#define PT_FP4 PT_FP4 -#define PT_FP5 PT_FP5 -#define PT_FP6 PT_FP6 -#define PT_FP7 PT_FP7 - - PT_FPCR = 45, -#define PT_FPCR PT_FPCR - PT_FPSR = 46, -#define PT_FPSR PT_FPSR - PT_FPIAR = 47 -#define PT_FPIAR PT_FPIAR -}; - -#endif /* _SYS_REG_H */ diff --git a/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h b/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h deleted file mode 100644 index e6ecbe6ab5..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h +++ /dev/null @@ -1,131 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* System V/m68k ABI compliant context switching support. */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - - -/* Type for general register. */ -typedef int greg_t; - -/* Number of general registers. */ -#define __NGREG 18 -#ifdef __USE_MISC -# define NGREG __NGREG -#endif - -/* Container for all general registers. */ -typedef greg_t gregset_t[__NGREG]; - -#ifdef __USE_MISC -/* Number of each register is the `gregset_t' array. */ -enum -{ - R_D0 = 0, -# define R_D0 R_D0 - R_D1 = 1, -# define R_D1 R_D1 - R_D2 = 2, -# define R_D2 R_D2 - R_D3 = 3, -# define R_D3 R_D3 - R_D4 = 4, -# define R_D4 R_D4 - R_D5 = 5, -# define R_D5 R_D5 - R_D6 = 6, -# define R_D6 R_D6 - R_D7 = 7, -# define R_D7 R_D7 - R_A0 = 8, -# define R_A0 R_A0 - R_A1 = 9, -# define R_A1 R_A1 - R_A2 = 10, -# define R_A2 R_A2 - R_A3 = 11, -# define R_A3 R_A3 - R_A4 = 12, -# define R_A4 R_A4 - R_A5 = 13, -# define R_A5 R_A5 - R_A6 = 14, -# define R_A6 R_A6 - R_A7 = 15, -# define R_A7 R_A7 - R_SP = 15, -# define R_SP R_SP - R_PC = 16, -# define R_PC R_PC - R_PS = 17 -# define R_PS R_PS -}; -#endif - -#ifdef __USE_MISC -# define __ctx(fld) fld -#else -# define __ctx(fld) __ ## fld -#endif - -/* Structure to describe FPU registers. */ -typedef struct fpregset -{ - int __ctx(f_pcr); - int __ctx(f_psr); - int __ctx(f_fpiaddr); -#ifdef __mcoldfire__ - int __ctx(f_fpregs)[8][2]; -#else - int __ctx(f_fpregs)[8][3]; -#endif -} fpregset_t; - -/* Context to describe whole processor state. */ -typedef struct -{ - int __ctx(version); - gregset_t __ctx(gregs); - fpregset_t __ctx(fpregs); -} mcontext_t; - -#undef __ctx - -#ifdef __USE_MISC -# define MCONTEXT_VERSION 2 -#endif - -/* Userlevel context. */ -typedef struct ucontext -{ - unsigned long uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - unsigned long uc_filler[80]; - sigset_t uc_sigmask; -} ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/m68k/sys/user.h b/sysdeps/unix/sysv/linux/m68k/sys/user.h deleted file mode 100644 index 123e7e7ba6..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/sys/user.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_USER_H -#define _SYS_USER_H 1 - -/* The whole purpose of this file is for GDB and GDB only. Don't read - too much into it. Don't use it for anything other than GDB unless - you know what you are doing. */ - -struct user_m68kfp_struct { - unsigned long fpregs[8*3]; - unsigned long fpcntl[3]; -}; - -struct user_regs_struct { - long d1, d2, d3, d4, d5, d6, d7; - long a0, a1, a2, a3, a4, a5, a6; - long d0; - long usp; - long orig_d0; - short stkadj; - short sr; - long pc; - short fmtvec; - short __fill; -}; - -struct user { - struct user_regs_struct regs; - int u_fpvalid; - struct user_m68kfp_struct m68kfp; - unsigned long int u_tsize; - unsigned long int u_dsize; - unsigned long int u_ssize; - unsigned long start_code; - unsigned long start_stack; - long int signal; - int reserved; - unsigned long u_ar0; - struct user_m68kfp_struct *u_fpstate; - unsigned long magic; - char u_comm[32]; -}; - -#define NBPG 4096 -#define UPAGES 1 -#define HOST_TEXT_START_ADDR u.start_code -#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) - -#endif diff --git a/sysdeps/unix/sysv/linux/m68k/syscall.S b/sysdeps/unix/sysv/linux/m68k/syscall.S deleted file mode 100644 index e4a8e9e293..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/syscall.S +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -/* Please consult the file sysdeps/unix/sysv/linux/m68k/sysdep.h for - more information about the value -4095 used below.*/ - - .text -ENTRY (syscall) - move.l 4(%sp), %d0 /* Load syscall number. */ - _DOARGS_6 (28) /* Frob arguments. */ - trap &0 /* Do the system call. */ - UNDOARGS_6 /* Unfrob arguments. */ - cmp.l &-4095, %d0 /* Check %d0 for error. */ - jcc SYSCALL_ERROR_LABEL /* Jump to error handler if negative. */ - rts /* Return to caller. */ -PSEUDO_END (syscall) diff --git a/sysdeps/unix/sysv/linux/m68k/syscalls.list b/sysdeps/unix/sysv/linux/m68k/syscalls.list deleted file mode 100644 index 55a377b841..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/syscalls.list +++ /dev/null @@ -1,21 +0,0 @@ -# File name Caller Syscall name Args Strong name Weak names - -chown - chown32 i:sii __chown chown -lchown - lchown32 i:sii __lchown lchown -fchown - fchown32 i:iii __fchown fchown - -getegid - getegid32 Ei: __getegid getegid -geteuid - geteuid32 Ei: __geteuid geteuid -getgid - getgid32 Ei: __getgid getgid -getuid - getuid32 Ei: __getuid getuid -getresgid - getresgid32 i:ppp __getresgid getresgid -getresuid - getresuid32 i:ppp __getresuid getresuid -getgroups - getgroups32 i:ip __getgroups getgroups - -setfsgid - setfsgid32 Ei:i setfsgid -setfsuid - setfsuid32 Ei:i setfsuid - -cacheflush EXTRA cacheflush i:iiii __cacheflush cacheflush -prlimit64 EXTRA prlimit64 i:iipp prlimit64 -fanotify_mark EXTRA fanotify_mark i:iiiiis fanotify_mark -personality EXTRA personality Ei:i __personality personality diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h deleted file mode 100644 index 9bc9e1356e..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h +++ /dev/null @@ -1,138 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maxim Kuvyrkov , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - SINGLE_THREAD_P; \ - jne .Lpseudo_cancel; \ - .type __##syscall_name##_nocancel,@function; \ - .globl __##syscall_name##_nocancel; \ - __##syscall_name##_nocancel: \ - DO_CALL (syscall_name, args); \ - cmp.l &-4095, %d0; \ - jcc SYSCALL_ERROR_LABEL; \ - rts; \ - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ - .Lpseudo_cancel: \ - CENABLE; \ - DOCARGS_##args \ - move.l %d0, -(%sp); /* Save result of CENABLE. */ \ - cfi_adjust_cfa_offset (4); \ - move.l &SYS_ify (syscall_name), %d0; \ - trap &0; \ - move.l %d0, %d2; \ - CDISABLE; \ - addq.l &4, %sp; /* Remove result of CENABLE from the stack. */ \ - cfi_adjust_cfa_offset (-4); \ - move.l %d2, %d0; \ - UNDOCARGS_##args \ - cmp.l &-4095, %d0; \ - jcc SYSCALL_ERROR_LABEL - -/* Note: we use D2 to save syscall's return value as D0 will be clobbered in - CDISABLE. */ -# define DOCARGS_0 move.l %d2, -(%sp); \ - cfi_adjust_cfa_offset (4); cfi_rel_offset (%d2, 0); -# define UNDOCARGS_0 move.l (%sp)+, %d2; \ - cfi_adjust_cfa_offset (-4); cfi_restore (%d2); - -# define DOCARGS_1 _DOCARGS_1 (4); DOCARGS_0 -# define _DOCARGS_1(n) move.l n(%sp), %d1; -# define UNDOCARGS_1 UNDOCARGS_0 - -# define DOCARGS_2 _DOCARGS_2 (8) -# define _DOCARGS_2(n) DOCARGS_0 move.l n+4(%sp), %d2; _DOCARGS_1 (n) -# define UNDOCARGS_2 UNDOCARGS_0 - -# define DOCARGS_3 _DOCARGS_3 (12) -# define _DOCARGS_3(n) move.l %d3, -(%sp); \ - cfi_adjust_cfa_offset (4); cfi_rel_offset (%d3, 0); \ - move.l n+4(%sp), %d3; _DOCARGS_2 (n) -# define UNDOCARGS_3 UNDOCARGS_2 move.l (%sp)+, %d3; \ - cfi_adjust_cfa_offset (-4); cfi_restore (%d3); - -# define DOCARGS_4 _DOCARGS_4 (16) -# define _DOCARGS_4(n) move.l %d4, -(%sp); \ - cfi_adjust_cfa_offset (4); cfi_rel_offset (%d4, 0); \ - move.l n+4(%sp), %d4; _DOCARGS_3 (n) -# define UNDOCARGS_4 UNDOCARGS_3 move.l (%sp)+, %d4; \ - cfi_adjust_cfa_offset (-4); cfi_restore (%d4); - -# define DOCARGS_5 _DOCARGS_5 (20) -# define _DOCARGS_5(n) move.l %d5, -(%sp); \ - cfi_adjust_cfa_offset (4); cfi_rel_offset (%d5, 0); \ - move.l n+4(%sp), %d5; _DOCARGS_4 (n) -# define UNDOCARGS_5 UNDOCARGS_4 move.l (%sp)+, %d5; \ - cfi_adjust_cfa_offset (-4); cfi_restore (%d5); - -# define DOCARGS_6 _DOCARGS_6 (24) -# define _DOCARGS_6(n) move.l n(%sp), %a0; _DOCARGS_5 (n-4) -# define UNDOCARGS_6 UNDOCARGS_5 - -# ifdef PIC -# define PSEUDO_JMP(sym) jbsr sym ## @PLTPC -# else -# define PSEUDO_JMP(sym) jbsr sym -# endif - -# if IS_IN (libpthread) -# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel) -# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel) -# elif IS_IN (libc) -# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel) -# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel) -# elif IS_IN (librt) -# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel) -# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel) -# else -# error Unsupported library -# endif - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P \ - PSEUDO_JMP (__m68k_read_tp); \ - tst.l MULTIPLE_THREADS_OFFSET(%a0) -# endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION (1) - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, \ - 1) -#endif diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep.S b/sysdeps/unix/sysv/linux/m68k/sysdep.S deleted file mode 100644 index 5ade56efc2..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/sysdep.S +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - -/* The following code is only used in the shared library when we - compile the reentrant version. Otherwise each system call defines - each own version. */ - -#ifndef PIC - -/* The syscall stubs jump here when they detect an error. */ - -#undef CALL_MCOUNT -#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers %d0. */ - - .text -ENTRY (__syscall_error) - neg.l %d0 -#ifndef _LIBC_REENTRANT - move.l %d0, errno -#else - move.l %d0, -(%sp) - cfi_adjust_cfa_offset (4) - jbsr __errno_location - move.l (%sp)+, (%a0) - cfi_adjust_cfa_offset (-4) -#endif - move.l #-1, %d0 - /* Copy return value to %a0 for syscalls that are declared to - return a pointer. */ - move.l %d0, %a0 - rts -END (__syscall_error) -#endif /* PIC */ diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep.h b/sysdeps/unix/sysv/linux/m68k/sysdep.h deleted file mode 100644 index dfa6f85d20..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/sysdep.h +++ /dev/null @@ -1,326 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Written by Andreas Schwab, , - December 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -/* Defines RTLD_PRIVATE_ERRNO. */ -#include - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -#ifdef __ASSEMBLER__ - -/* Linux uses a negative return value to indicate syscall errors, unlike - most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be negative - even if the call succeeded. E.g., the `lseek' system call might return - a large offset. Therefore we must not anymore test for < 0, but test - for a real error by making sure the value in %d0 is a real error - number. Linus said he will make sure the no syscall returns a value - in -1 .. -4095 as a valid result so we can savely test with -4095. */ - -/* We don't want the label for the error handler to be visible in the symbol - table when we define it here. */ -#ifdef PIC -#define SYSCALL_ERROR_LABEL .Lsyscall_error -#else -#define SYSCALL_ERROR_LABEL __syscall_error -#endif - -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - cmp.l &-4095, %d0; \ - jcc SYSCALL_ERROR_LABEL - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - SYSCALL_ERROR_HANDLER; \ - END (name) - -#undef PSEUDO_NOERRNO -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args) - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ - END (name) - -#define ret_NOERRNO rts - -/* The function has to return the error code. */ -#undef PSEUDO_ERRVAL -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - negl %d0 - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) \ - END (name) - -#define ret_ERRVAL rts - -#ifdef PIC -# if RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_HANDLER \ -SYSCALL_ERROR_LABEL: \ - PCREL_OP (lea, rtld_errno, %a0, %a0); \ - neg.l %d0; \ - move.l %d0, (%a0); \ - move.l &-1, %d0; \ - /* Copy return value to %a0 for syscalls that are declared to return \ - a pointer (e.g., mmap). */ \ - move.l %d0, %a0; \ - rts; -# elif defined _LIBC_REENTRANT -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif -# define SYSCALL_ERROR_HANDLER \ -SYSCALL_ERROR_LABEL: \ - neg.l %d0; \ - move.l %d0, -(%sp); \ - cfi_adjust_cfa_offset (4); \ - jbsr __m68k_read_tp@PLTPC; \ - SYSCALL_ERROR_LOAD_GOT (%a1); \ - add.l (SYSCALL_ERROR_ERRNO@TLSIE, %a1), %a0; \ - move.l (%sp)+, (%a0); \ - cfi_adjust_cfa_offset (-4); \ - move.l &-1, %d0; \ - /* Copy return value to %a0 for syscalls that are declared to return \ - a pointer (e.g., mmap). */ \ - move.l %d0, %a0; \ - rts; -# else /* !_LIBC_REENTRANT */ -/* Store (- %d0) into errno through the GOT. */ -# define SYSCALL_ERROR_HANDLER \ -SYSCALL_ERROR_LABEL: \ - move.l (errno@GOTPC, %pc), %a0; \ - neg.l %d0; \ - move.l %d0, (%a0); \ - move.l &-1, %d0; \ - /* Copy return value to %a0 for syscalls that are declared to return \ - a pointer (e.g., mmap). */ \ - move.l %d0, %a0; \ - rts; -# endif /* _LIBC_REENTRANT */ -#else -# define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ -#endif /* PIC */ - -/* Linux takes system call arguments in registers: - - syscall number %d0 call-clobbered - arg 1 %d1 call-clobbered - arg 2 %d2 call-saved - arg 3 %d3 call-saved - arg 4 %d4 call-saved - arg 5 %d5 call-saved - arg 6 %a0 call-clobbered - - The stack layout upon entering the function is: - - 24(%sp) Arg# 6 - 20(%sp) Arg# 5 - 16(%sp) Arg# 4 - 12(%sp) Arg# 3 - 8(%sp) Arg# 2 - 4(%sp) Arg# 1 - (%sp) Return address - - (Of course a function with say 3 arguments does not have entries for - arguments 4 and 5.) - - Separate move's are faster than movem, but need more space. Since - speed is more important, we don't use movem. Since %a0 and %a1 are - scratch registers, we can use them for saving as well. */ - -#define DO_CALL(syscall_name, args) \ - move.l &SYS_ify(syscall_name), %d0; \ - DOARGS_##args \ - trap &0; \ - UNDOARGS_##args - -#define DOARGS_0 /* No arguments to frob. */ -#define UNDOARGS_0 /* No arguments to unfrob. */ -#define _DOARGS_0(n) /* No arguments to frob. */ - -#define DOARGS_1 _DOARGS_1 (4) -#define _DOARGS_1(n) move.l n(%sp), %d1; _DOARGS_0 (n) -#define UNDOARGS_1 UNDOARGS_0 - -#define DOARGS_2 _DOARGS_2 (8) -#define _DOARGS_2(n) move.l %d2, %a0; cfi_register (%d2, %a0); \ - move.l n(%sp), %d2; _DOARGS_1 (n-4) -#define UNDOARGS_2 UNDOARGS_1; move.l %a0, %d2; cfi_restore (%d2) - -#define DOARGS_3 _DOARGS_3 (12) -#define _DOARGS_3(n) move.l %d3, %a1; cfi_register (%d3, %a1); \ - move.l n(%sp), %d3; _DOARGS_2 (n-4) -#define UNDOARGS_3 UNDOARGS_2; move.l %a1, %d3; cfi_restore (%d3) - -#define DOARGS_4 _DOARGS_4 (16) -#define _DOARGS_4(n) move.l %d4, -(%sp); \ - cfi_adjust_cfa_offset (4); cfi_rel_offset (%d4, 0); \ - move.l n+4(%sp), %d4; _DOARGS_3 (n) -#define UNDOARGS_4 UNDOARGS_3; move.l (%sp)+, %d4; \ - cfi_adjust_cfa_offset (-4); cfi_restore (%d4) - -#define DOARGS_5 _DOARGS_5 (20) -#define _DOARGS_5(n) move.l %d5, -(%sp); \ - cfi_adjust_cfa_offset (4); cfi_rel_offset (%d5, 0); \ - move.l n+4(%sp), %d5; _DOARGS_4 (n) -#define UNDOARGS_5 UNDOARGS_4; move.l (%sp)+, %d5; \ - cfi_adjust_cfa_offset (-4); cfi_restore (%d5) - -#define DOARGS_6 _DOARGS_6 (24) -#define _DOARGS_6(n) _DOARGS_5 (n-4); move.l %a0, -(%sp); \ - cfi_adjust_cfa_offset (4); \ - move.l n+12(%sp), %a0; -#define UNDOARGS_6 move.l (%sp)+, %a0; cfi_adjust_cfa_offset (-4); \ - UNDOARGS_5 - - -#define ret rts -#if 0 /* Not used by Linux */ -#define r0 %d0 -#define r1 %d1 -#define MOVE(x,y) movel x , y -#endif - -#else /* not __ASSEMBLER__ */ - -/* Define a macro which expands into the inline wrapper code for a system - call. */ -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - ({ unsigned int _sys_result = INTERNAL_SYSCALL (name, , nr, args); \ - if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_sys_result, ), 0))\ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (_sys_result, )); \ - _sys_result = (unsigned int) -1; \ - } \ - (int) _sys_result; }) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) do { } while (0) - -/* Define a macro which expands inline into the wrapper code for a system - call. This use is for internal calls that do not need to handle errors - normally. It will never touch errno. This returns just what the kernel - gave back. */ -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - ({ unsigned int _sys_result; \ - { \ - /* Load argument values in temporary variables - to perform side effects like function calls - before the call used registers are set. */ \ - LOAD_ARGS_##nr (args) \ - LOAD_REGS_##nr \ - register int _d0 asm ("%d0") = name; \ - asm volatile ("trap #0" \ - : "=d" (_d0) \ - : "0" (_d0) ASM_ARGS_##nr \ - : "memory"); \ - _sys_result = _d0; \ - } \ - (int) _sys_result; }) -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - INTERNAL_SYSCALL_NCS (__NR_##name, err, nr, ##args) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((unsigned int) (val) >= -4095U) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) - -#define LOAD_ARGS_0() -#define LOAD_REGS_0 -#define ASM_ARGS_0 -#define LOAD_ARGS_1(a1) \ - LOAD_ARGS_0 () \ - int __arg1 = (int) (a1); -#define LOAD_REGS_1 \ - register int _d1 asm ("d1") = __arg1; \ - LOAD_REGS_0 -#define ASM_ARGS_1 ASM_ARGS_0, "d" (_d1) -#define LOAD_ARGS_2(a1, a2) \ - LOAD_ARGS_1 (a1) \ - int __arg2 = (int) (a2); -#define LOAD_REGS_2 \ - register int _d2 asm ("d2") = __arg2; \ - LOAD_REGS_1 -#define ASM_ARGS_2 ASM_ARGS_1, "d" (_d2) -#define LOAD_ARGS_3(a1, a2, a3) \ - LOAD_ARGS_2 (a1, a2) \ - int __arg3 = (int) (a3); -#define LOAD_REGS_3 \ - register int _d3 asm ("d3") = __arg3; \ - LOAD_REGS_2 -#define ASM_ARGS_3 ASM_ARGS_2, "d" (_d3) -#define LOAD_ARGS_4(a1, a2, a3, a4) \ - LOAD_ARGS_3 (a1, a2, a3) \ - int __arg4 = (int) (a4); -#define LOAD_REGS_4 \ - register int _d4 asm ("d4") = __arg4; \ - LOAD_REGS_3 -#define ASM_ARGS_4 ASM_ARGS_3, "d" (_d4) -#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ - LOAD_ARGS_4 (a1, a2, a3, a4) \ - int __arg5 = (int) (a5); -#define LOAD_REGS_5 \ - register int _d5 asm ("d5") = __arg5; \ - LOAD_REGS_4 -#define ASM_ARGS_5 ASM_ARGS_4, "d" (_d5) -#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ - LOAD_ARGS_5 (a1, a2, a3, a4, a5) \ - int __arg6 = (int) (a6); -#define LOAD_REGS_6 \ - register int _a0 asm ("a0") = __arg6; \ - LOAD_REGS_5 -#define ASM_ARGS_6 ASM_ARGS_5, "a" (_a0) - -#endif /* not __ASSEMBLER__ */ - -/* Pointer mangling is not yet supported for M68K. */ -#define PTR_MANGLE(var) (void) (var) -#define PTR_DEMANGLE(var) (void) (var) - -#if defined NEED_DL_SYSINFO || defined NEED_DL_SYSINFO_DSO -/* M68K needs system-supplied DSO to access TLS helpers - even when statically linked. */ -# define NEED_STATIC_SYSINFO_DSO 1 -#endif diff --git a/sysdeps/unix/sysv/linux/m68k/versionsort64.c b/sysdeps/unix/sysv/linux/m68k/versionsort64.c deleted file mode 100644 index 144b691e56..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/versionsort64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/vfork.S b/sysdeps/unix/sysv/linux/m68k/vfork.S deleted file mode 100644 index 2dee7166f7..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/vfork.S +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#define _ERRNO_H 1 -#include -#include - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__vfork) - - /* Pop the return PC value into A0. */ - movel %sp@+, %a0 - cfi_adjust_cfa_offset (-4) - cfi_register (%pc, %a0) - - /* Stuff the syscall number in D0 and trap into the kernel. */ - movel #SYS_ify (vfork), %d0 - trap #0 - - tstl %d0 - jmi .Lerror /* Branch forward if it failed. */ - - /* Jump to the return PC. */ - jmp %a0@ - -.Lerror: - /* Push back the return PC. */ - movel %a0,%sp@- - cfi_adjust_cfa_offset (4) - cfi_rel_offset (%pc, 0) - -#ifndef PIC - jbra SYSCALL_ERROR_LABEL -#endif - -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) - -weak_alias (__vfork, vfork) -strong_alias (__vfork, __libc_vfork) diff --git a/sysdeps/unix/sysv/linux/m68k/xstat.c b/sysdeps/unix/sysv/linux/m68k/xstat.c deleted file mode 100644 index e9869f5508..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/xstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/malloc-sysdep.h b/sysdeps/unix/sysv/linux/malloc-sysdep.h deleted file mode 100644 index 48cf7c157c..0000000000 --- a/sysdeps/unix/sysv/linux/malloc-sysdep.h +++ /dev/null @@ -1,59 +0,0 @@ -/* System-specific malloc support functions. Linux version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* The Linux kernel overcommits address space by default and if there is not - enough memory available, it uses various parameters to decide the process to - kill. It is however possible to disable or curb this overcommit behavior - by setting the proc sysctl vm.overcommit_memory to the value '2' and with - that, a process is only allowed to use the maximum of a pre-determined - fraction of the total address space. In such a case, we want to make sure - that we are judicious with our heap usage as well, and explicitly give away - the freed top of the heap to reduce our commit charge. See the proc(5) man - page to know more about overcommit behavior. - - Other than that, we also force an unmap in a secure exec. */ -static inline bool -check_may_shrink_heap (void) -{ - static int may_shrink_heap = -1; - - if (__builtin_expect (may_shrink_heap >= 0, 1)) - return may_shrink_heap; - - may_shrink_heap = __libc_enable_secure; - - if (__builtin_expect (may_shrink_heap == 0, 1)) - { - int fd = open_not_cancel_2 ("/proc/sys/vm/overcommit_memory", - O_RDONLY | O_CLOEXEC); - if (fd >= 0) - { - char val; - ssize_t n = read_not_cancel (fd, &val, 1); - may_shrink_heap = n > 0 && val == '2'; - close_not_cancel_no_status (fd); - } - } - - return may_shrink_heap; -} - -#define HAVE_MREMAP 1 diff --git a/sysdeps/unix/sysv/linux/microblaze/Implies b/sysdeps/unix/sysv/linux/microblaze/Implies deleted file mode 100644 index 469a141418..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/Implies +++ /dev/null @@ -1 +0,0 @@ -microblaze/nptl diff --git a/sysdeps/unix/sysv/linux/microblaze/Makefile b/sysdeps/unix/sysv/linux/microblaze/Makefile deleted file mode 100644 index d178bc6f34..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -ifeq ($(subdir),resource) -sysdep_routines += backtrace_linux -endif - -ifeq ($(subdir),nptl) -# pull in __syscall_error routine -libpthread-routines += sysdep -libpthread-shared-only-routines += sysdep -endif diff --git a/sysdeps/unix/sysv/linux/microblaze/Versions b/sysdeps/unix/sysv/linux/microblaze/Versions deleted file mode 100644 index aa48a3c155..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/Versions +++ /dev/null @@ -1,5 +0,0 @@ -libc { - GLIBC_2.18 { - fallocate64; - } -} diff --git a/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S b/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S deleted file mode 100644 index 7191ab3faa..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY (__revisit_longjmp_chk) - rtsd r15,0 - nop -PSEUDO_END (__revisit_longjmp_chk) -ENTRY (____longjmp_chk) - rtsd r15,0 - nop -PSEUDO_END (____longjmp_chk) diff --git a/sysdeps/unix/sysv/linux/microblaze/arch-fork.h b/sysdeps/unix/sysv/linux/microblaze/arch-fork.h deleted file mode 100644 index 8d72485556..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/arch-fork.h +++ /dev/null @@ -1,27 +0,0 @@ -/* ARCH_FORK definition for Linux fork implementation. MicroBlaze version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 5, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0, \ - NULL, NULL, &THREAD_SELF->tid) diff --git a/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h b/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h deleted file mode 100644 index 50982def27..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h +++ /dev/null @@ -1,86 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -#define O_CREAT 00000100 /* not fcntl. */ -#define O_TRUNC 00001000 /* not fcntl. */ -#define O_EXCL 00000200 /* not fcntl. */ -#define O_NOCTTY 00000400 /* not fcntl. */ - -#define O_NONBLOCK 00004000 -#define O_APPEND 00002000 -#define O_SYNC 04000000 - -#define __O_DIRECTORY 00200000 /* Must be a directory. */ -#define __O_NOFOLLOW 00400000 /* Do not follow links. */ -#define __O_CLOEXEC 02000000 /* Set close_on_exec. */ - -#define __O_DIRECT 00040000 /* Direct disk access. */ -#define __O_NOATIME 01000000 /* Do not set atime. */ -#define __O_PATH 010000000 /* Resolve pathname but do not open file. */ - -/* Not necessary, files are always with 64bit off_t. */ -#define __O_LARGEFILE 00100000 - -#define __O_DSYNC 00010000 /* Synchronize data. */ - -#define F_GETLK 5 /* Get record locking info. */ -#define F_SETLK 6 /* Set record locking info (non-blocking). */ -#define F_SETLKW 7 /* Set record locking info (blocking). */ -#define F_GETLK64 12 /* Get record locking info. */ -#define F_SETLK64 13 /* Set record locking info (non-blocking). */ -#define F_SETLKW64 14 /* Set record locking info (blocking). */ - -#define __F_SETOWN 8 /* Get owner of socket (receiver of SIGIO). */ -#define __F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */ - -/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ -#define F_RDLCK 0 /* Read lock. */ -#define F_WRLCK 1 /* Write lock. */ -#define F_UNLCK 2 /* Remove lock. */ - -/* for old implementation of bsd flock (). */ -#define F_EXLCK 4 /* or 3. */ -#define F_SHLCK 8 /* or 4. */ - -/* We don't need to support __USE_FILE_OFFSET64. */ -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/microblaze/bits/mman.h b/sysdeps/unix/sysv/linux/microblaze/bits/mman.h deleted file mode 100644 index c82e7977cc..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/bits/mman.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/MicroBlaze version. - - Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - -#ifdef __USE_MISC -/* These are Linux-specific. */ -# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */ -# define MAP_DENYWRITE 0x00800 /* ETXTBSY. */ -# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x02000 /* Lock the mapping. */ -# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */ -# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ -# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/microblaze/bits/stat.h b/sysdeps/unix/sysv/linux/microblaze/bits/stat.h deleted file mode 100644 index 47fc8cacbd..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/bits/stat.h +++ /dev/null @@ -1,203 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STAT_H -#define _BITS_STAT_H 1 - -/* Versions of the `struct stat' data structure. */ -#define _STAT_VER_LINUX_OLD 1 -#define _STAT_VER_KERNEL 1 -#define _STAT_VER_SVR4 2 -#define _STAT_VER_LINUX 3 -#define _STAT_VER _STAT_VER_LINUX /* The one defined below. */ - -/* Versions of the `xmknod' interface. */ -#define _MKNOD_VER_LINUX 1 -#define _MKNOD_VER_SVR4 2 -#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */ - -#ifndef __USE_FILE_OFFSET64 -struct stat -{ - __dev_t st_dev; /* Device. */ - __ino_t st_ino; /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group. */ - __dev_t st_rdev; /* Device number, if device. */ - unsigned long __pad2; - __off_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - int __pad3; - __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - * equivalent to 'struct timespec'. This is the type used - * whenever possible but the Unix namespace rules do not allow the - * identifier 'timespec' to appear in the header. - * Therefore we have to handle the use of this header in strictly - * standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - unsigned int __glibc_reserved4; - unsigned int __glibc_reserved5; -}; -#else /* __USE_FILE_OFFSET64 */ -/* MS: If __USE_FILE_OFFSET64 is setup then struct stat should match stat64 - * structure. Glibc has no type __dev64_t that's why I had to use standard - * type for st_dev and st_rdev. Several architectures uses pads after st_dev - * but this approach covers BIG and LITTLE endian. I think it is better to - * create one ifdef to separate stats structures. */ -struct stat -{ - unsigned long long st_dev; /* Device. */ - __ino64_t st_ino; /* 32bit file serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group. */ - unsigned long long st_rdev; /* Device number, if device. */ - unsigned long long __pad2; - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - int __pad3; - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -#ifdef __USE_MISC - /* Nanosecond resolution timestamps are stored in a format - * equivalent to 'struct timespec'. This is the type used - * whenever possible but the Unix namespace rules do not allow the - * identifier 'timespec' to appear in the header. - * Therefore we have to handle the use of this header in strictly - * standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - unsigned int __glibc_reserved4; - unsigned int __glibc_reserved5; -}; -#endif /* __USE_FILE_OFFSET64 */ - -#ifdef __USE_LARGEFILE64 -struct stat64 -{ - unsigned long long st_dev; /* Device. */ - __ino64_t st_ino; /* 32bit file serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group. */ - unsigned long long st_rdev; /* Device number, if device. */ - unsigned long long __pad2; - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - int __pad3; - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - * equivalent to 'struct timespec'. This is the type used - * whenever possible but the Unix namespace rules do not allow the - * identifier 'timespec' to appear in the header. - * Therefore we have to handle the use of this header in strictly - * standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - unsigned int __glibc_reserved4; - unsigned int __glibc_reserved5; -}; -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -/* Nanosecond resolution time values are supported. */ -#define _STATBUF_ST_NSEC - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFIFO 0010000 /* FIFO. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ - -/* POSIX.1b objects. Note that these macros always evaluate to zero. But - they do it by enforcing the correct use of the macros. */ -#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 0400 /* Read by owner. */ -#define __S_IWRITE 0200 /* Write by owner. */ -#define __S_IEXEC 0100 /* Execute by owner. */ - -#ifdef __USE_ATFILE -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) -#endif - -#endif /* bits/stat.h. */ diff --git a/sysdeps/unix/sysv/linux/microblaze/brk.c b/sysdeps/unix/sysv/linux/microblaze/brk.c deleted file mode 100644 index 2f71fbc7e8..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/brk.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt - to work around different old braindamage in the old Linux ELF dynamic - linker. */ -weak_alias (__curbrk, ___brk_addr) - -int -__brk (void *addr) -{ - INTERNAL_SYSCALL_DECL (err); - - __curbrk = (void *) INTERNAL_SYSCALL (brk, err, 1, addr); - if (__curbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/microblaze/c++-types.data b/sysdeps/unix/sysv/linux/microblaze/c++-types.data deleted file mode 100644 index fde53bf337..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:i -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/microblaze/clock-compat.c b/sysdeps/unix/sysv/linux/microblaze/clock-compat.c deleted file mode 100644 index e5959d5c74..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/clock-compat.c +++ /dev/null @@ -1,31 +0,0 @@ -/* ABI compatibility redirects for clock_* symbols in librt. - MicroBlaze version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* These symbols were accidentally included in librt for MicroBlaze - despite the first release coming after the general obsoletion in - librt, so ensure they remain as part of the ABI. */ - -#ifdef SHARED -# undef SHLIB_COMPAT -# define SHLIB_COMPAT(lib, introduced, obsoleted) 1 -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/microblaze/clone.S b/sysdeps/unix/sysv/linux/microblaze/clone.S deleted file mode 100644 index 55d78dfee4..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/clone.S +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#define _ERRNO_H 1 -#include - -/* int clone (int (*fn)(void *arg), void *child_stack, int flags, void *arg, - pid_t *ptid, struct user_desc *tls, pid_t *ctid); - - INCOMING: r5 (fn), r6 (child_stack), r7 (flags), r8 (arg), r9 (ptid) - r10 (tls), 28 (r1) ctid - - OUTGOING: - - linux: arch/microblaze/entry.S: sys_clone expects - r5 (flags) r6 (child stack) r7 (stack_size) r8 (ptid)r9 (ctid) - r10 (tls) -*/ - - .text -ENTRY (__clone) - addik r3,r0,-EINVAL - beqi r5,SYSCALL_ERROR_LABEL ; // Invalid func - beqi r6,SYSCALL_ERROR_LABEL ; // Invalid stack - addik r6,r6,-8 - swi r5,r6,0 ; // Push fn onto child's stack - swi r8,r6,4 ; // Push arg for child - addk r5,r0,r7 ; // flags for clone() syscall - addk r7,r0,r0 - addk r8,r0,r9 ; // parent tid ptr - lwi r9,r1,28 ; // child tid ptr - addik r12,r0,SYS_ify(clone) - brki r14,8 - addk r0,r0,r0 - addik r4,r0,-4095 - cmpu r4,r4,r3 - bgei r4,SYSCALL_ERROR_LABEL - beqi r3,L(thread_start) - rtsd r15,8 - nop - -L(thread_start): - lwi r12,r1,0 ; // fn - lwi r5,r1,4 ; // arg - brald r15,r12 - nop - addk r5,r0,r3 - addik r12,r0,SYS_ify(exit) - brki r14,8 - nop -PSEUDO_END(__clone) - -libc_hidden_def (__clone) -weak_alias (__clone,clone) diff --git a/sysdeps/unix/sysv/linux/microblaze/fcntl.c b/sysdeps/unix/sysv/linux/microblaze/fcntl.c deleted file mode 100644 index ea951bc4f9..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/fcntl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/microblaze/fxstat.c b/sysdeps/unix/sysv/linux/microblaze/fxstat.c deleted file mode 100644 index 4f219f0b9d..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/fxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/microblaze/fxstatat.c b/sysdeps/unix/sysv/linux/microblaze/fxstatat.c deleted file mode 100644 index 0f8b3135d8..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/fxstatat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/microblaze/getsysstats.c b/sysdeps/unix/sysv/linux/microblaze/getsysstats.c deleted file mode 100644 index 31f8b09e46..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/getsysstats.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* We need to define a special parser for /proc/cpuinfo. */ -#define GET_NPROCS_PARSER(FD, BUFFER, CP, RE, BUFFER_END, RESULT) \ - do \ - { \ - (RESULT) = 0; \ - /* Read all lines and count the lines starting with the string \ - "CPU-Family:". We don't have to fear extremely long lines since \ - the kernel will not generate them. 8192 bytes are really enough. */ \ - char *l; \ - while ((l = next_line (FD, BUFFER, &CP, &RE, BUFFER_END)) != NULL) \ - if (strncmp (l, "CPU-Family:", 11) == 0) \ - ++(RESULT); \ - } \ - while (0) - -#include diff --git a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h deleted file mode 100644 index 0257524777..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -/* MicroBlaze uses socketcall. */ -#define __ASSUME_SOCKETCALL 1 - -/* All supported kernel versions for MicroBlaze have these syscalls. */ -#define __ASSUME_SOCKET_SYSCALL 1 -#define __ASSUME_BIND_SYSCALL 1 -#define __ASSUME_CONNECT_SYSCALL 1 -#define __ASSUME_LISTEN_SYSCALL 1 -#define __ASSUME_GETSOCKNAME_SYSCALL 1 -#define __ASSUME_GETPEERNAME_SYSCALL 1 -#define __ASSUME_SOCKETPAIR_SYSCALL 1 -#define __ASSUME_SEND_SYSCALL 1 -#define __ASSUME_RECV_SYSCALL 1 -#define __ASSUME_SHUTDOWN_SYSCALL 1 -#define __ASSUME_GETSOCKOPT_SYSCALL 1 -#define __ASSUME_SETSOCKOPT_SYSCALL 1 - -#include_next - -/* Support for the pselect6, preadv and pwritev syscalls was added in - 3.15. */ -#if __LINUX_KERNEL_VERSION < 0x030f00 -# undef __ASSUME_PSELECT -# undef __ASSUME_PREADV -# undef __ASSUME_PWRITEV -#endif - -/* Support for the sendmmsg syscall was added in 3.3. */ -#if __LINUX_KERNEL_VERSION < 0x030300 -# undef __ASSUME_SENDMMSG_SYSCALL -#endif diff --git a/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h b/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h deleted file mode 100644 index d885d151ec..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Definition of `struct stat' used in the kernel - Copyright (C) 2013-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -struct kernel_stat -{ - unsigned long st_dev; /* Device. */ - unsigned long st_ino; /* File serial number. */ - unsigned int st_mode; /* File mode. */ - unsigned int st_nlink; /* Link count. */ - unsigned int st_uid; /* User ID of the file's owner. */ - unsigned int st_gid; /* Group ID of the file's group. */ - unsigned long st_rdev; /* Device number, if device. */ - unsigned long __pad2; -#define _HAVE_STAT___PAD2 -#define _HAVE_STAT64___PAD2 - long st_size; /* Size of file, in bytes. */ - int st_blksize; /* Optimal block size for I/O. */ - int __pad3; -#define _HAVE_STAT___PAD3 -#define _HAVE_STAT64___PAD3 - long st_blocks; /* Number 512-byte blocks allocated. */ - struct timespec st_atim; - struct timespec st_mtim; - struct timespec st_ctim; -#define _HAVE_STAT_NSEC -#define _HAVE_STAT64_NSEC - unsigned int __glibc_reserved4; -#define _HAVE_STAT___UNUSED4 -#define _HAVE_STAT64___UNUSED4 - unsigned int __glibc_reserved5; -#define _HAVE_STAT___UNUSED5 -#define _HAVE_STAT64___UNUSED5 -}; - -#define XSTAT_IS_XSTAT64 0 -#define STATFS_IS_STATFS64 0 diff --git a/sysdeps/unix/sysv/linux/microblaze/ld.abilist b/sysdeps/unix/sysv/linux/microblaze/ld.abilist deleted file mode 100644 index 265085edc8..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/ld.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __libc_stack_end D 0x4 -GLIBC_2.18 __stack_chk_guard D 0x4 -GLIBC_2.18 __tls_get_addr F -GLIBC_2.18 _dl_mcount F -GLIBC_2.18 _r_debug D 0x14 -GLIBC_2.18 calloc F -GLIBC_2.18 free F -GLIBC_2.18 malloc F -GLIBC_2.18 realloc F diff --git a/sysdeps/unix/sysv/linux/microblaze/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/microblaze/libBrokenLocale.abilist deleted file mode 100644 index 76d989d468..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/microblaze/libanl.abilist b/sysdeps/unix/sysv/linux/microblaze/libanl.abilist deleted file mode 100644 index cb616b1c3e..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 gai_cancel F -GLIBC_2.18 gai_error F -GLIBC_2.18 gai_suspend F -GLIBC_2.18 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/microblaze/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/libc.abilist deleted file mode 100644 index 16aa25485f..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/libc.abilist +++ /dev/null @@ -1,2105 +0,0 @@ -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 _Exit F -GLIBC_2.18 _IO_2_1_stderr_ D 0x98 -GLIBC_2.18 _IO_2_1_stdin_ D 0x98 -GLIBC_2.18 _IO_2_1_stdout_ D 0x98 -GLIBC_2.18 _IO_adjust_column F -GLIBC_2.18 _IO_adjust_wcolumn F -GLIBC_2.18 _IO_default_doallocate F -GLIBC_2.18 _IO_default_finish F -GLIBC_2.18 _IO_default_pbackfail F -GLIBC_2.18 _IO_default_uflow F -GLIBC_2.18 _IO_default_xsgetn F -GLIBC_2.18 _IO_default_xsputn F -GLIBC_2.18 _IO_do_write F -GLIBC_2.18 _IO_doallocbuf F -GLIBC_2.18 _IO_fclose F -GLIBC_2.18 _IO_fdopen F -GLIBC_2.18 _IO_feof F -GLIBC_2.18 _IO_ferror F -GLIBC_2.18 _IO_fflush F -GLIBC_2.18 _IO_fgetpos F -GLIBC_2.18 _IO_fgetpos64 F -GLIBC_2.18 _IO_fgets F -GLIBC_2.18 _IO_file_attach F -GLIBC_2.18 _IO_file_close F -GLIBC_2.18 _IO_file_close_it F -GLIBC_2.18 _IO_file_doallocate F -GLIBC_2.18 _IO_file_finish F -GLIBC_2.18 _IO_file_fopen F -GLIBC_2.18 _IO_file_init F -GLIBC_2.18 _IO_file_jumps D 0x54 -GLIBC_2.18 _IO_file_open F -GLIBC_2.18 _IO_file_overflow F -GLIBC_2.18 _IO_file_read F -GLIBC_2.18 _IO_file_seek F -GLIBC_2.18 _IO_file_seekoff F -GLIBC_2.18 _IO_file_setbuf F -GLIBC_2.18 _IO_file_stat F -GLIBC_2.18 _IO_file_sync F -GLIBC_2.18 _IO_file_underflow F -GLIBC_2.18 _IO_file_write F -GLIBC_2.18 _IO_file_xsputn F -GLIBC_2.18 _IO_flockfile F -GLIBC_2.18 _IO_flush_all F -GLIBC_2.18 _IO_flush_all_linebuffered F -GLIBC_2.18 _IO_fopen F -GLIBC_2.18 _IO_fprintf F -GLIBC_2.18 _IO_fputs F -GLIBC_2.18 _IO_fread F -GLIBC_2.18 _IO_free_backup_area F -GLIBC_2.18 _IO_free_wbackup_area F -GLIBC_2.18 _IO_fsetpos F -GLIBC_2.18 _IO_fsetpos64 F -GLIBC_2.18 _IO_ftell F -GLIBC_2.18 _IO_ftrylockfile F -GLIBC_2.18 _IO_funlockfile F -GLIBC_2.18 _IO_fwrite F -GLIBC_2.18 _IO_getc F -GLIBC_2.18 _IO_getline F -GLIBC_2.18 _IO_getline_info F -GLIBC_2.18 _IO_gets F -GLIBC_2.18 _IO_init F -GLIBC_2.18 _IO_init_marker F -GLIBC_2.18 _IO_init_wmarker F -GLIBC_2.18 _IO_iter_begin F -GLIBC_2.18 _IO_iter_end F -GLIBC_2.18 _IO_iter_file F -GLIBC_2.18 _IO_iter_next F -GLIBC_2.18 _IO_least_wmarker F -GLIBC_2.18 _IO_link_in F -GLIBC_2.18 _IO_list_all D 0x4 -GLIBC_2.18 _IO_list_lock F -GLIBC_2.18 _IO_list_resetlock F -GLIBC_2.18 _IO_list_unlock F -GLIBC_2.18 _IO_marker_delta F -GLIBC_2.18 _IO_marker_difference F -GLIBC_2.18 _IO_padn F -GLIBC_2.18 _IO_peekc_locked F -GLIBC_2.18 _IO_popen F -GLIBC_2.18 _IO_printf F -GLIBC_2.18 _IO_proc_close F -GLIBC_2.18 _IO_proc_open F -GLIBC_2.18 _IO_putc F -GLIBC_2.18 _IO_puts F -GLIBC_2.18 _IO_remove_marker F -GLIBC_2.18 _IO_seekmark F -GLIBC_2.18 _IO_seekoff F -GLIBC_2.18 _IO_seekpos F -GLIBC_2.18 _IO_seekwmark F -GLIBC_2.18 _IO_setb F -GLIBC_2.18 _IO_setbuffer F -GLIBC_2.18 _IO_setvbuf F -GLIBC_2.18 _IO_sgetn F -GLIBC_2.18 _IO_sprintf F -GLIBC_2.18 _IO_sputbackc F -GLIBC_2.18 _IO_sputbackwc F -GLIBC_2.18 _IO_sscanf F -GLIBC_2.18 _IO_str_init_readonly F -GLIBC_2.18 _IO_str_init_static F -GLIBC_2.18 _IO_str_overflow F -GLIBC_2.18 _IO_str_pbackfail F -GLIBC_2.18 _IO_str_seekoff F -GLIBC_2.18 _IO_str_underflow F -GLIBC_2.18 _IO_sungetc F -GLIBC_2.18 _IO_sungetwc F -GLIBC_2.18 _IO_switch_to_get_mode F -GLIBC_2.18 _IO_switch_to_main_wget_area F -GLIBC_2.18 _IO_switch_to_wbackup_area F -GLIBC_2.18 _IO_switch_to_wget_mode F -GLIBC_2.18 _IO_un_link F -GLIBC_2.18 _IO_ungetc F -GLIBC_2.18 _IO_unsave_markers F -GLIBC_2.18 _IO_unsave_wmarkers F -GLIBC_2.18 _IO_vfprintf F -GLIBC_2.18 _IO_vfscanf F -GLIBC_2.18 _IO_vsprintf F -GLIBC_2.18 _IO_wdefault_doallocate F -GLIBC_2.18 _IO_wdefault_finish F -GLIBC_2.18 _IO_wdefault_pbackfail F -GLIBC_2.18 _IO_wdefault_uflow F -GLIBC_2.18 _IO_wdefault_xsgetn F -GLIBC_2.18 _IO_wdefault_xsputn F -GLIBC_2.18 _IO_wdo_write F -GLIBC_2.18 _IO_wdoallocbuf F -GLIBC_2.18 _IO_wfile_jumps D 0x54 -GLIBC_2.18 _IO_wfile_overflow F -GLIBC_2.18 _IO_wfile_seekoff F -GLIBC_2.18 _IO_wfile_sync F -GLIBC_2.18 _IO_wfile_underflow F -GLIBC_2.18 _IO_wfile_xsputn F -GLIBC_2.18 _IO_wmarker_delta F -GLIBC_2.18 _IO_wsetb F -GLIBC_2.18 ___brk_addr D 0x4 -GLIBC_2.18 __adjtimex F -GLIBC_2.18 __after_morecore_hook D 0x4 -GLIBC_2.18 __argz_count F -GLIBC_2.18 __argz_next F -GLIBC_2.18 __argz_stringify F -GLIBC_2.18 __asprintf F -GLIBC_2.18 __asprintf_chk F -GLIBC_2.18 __assert F -GLIBC_2.18 __assert_fail F -GLIBC_2.18 __assert_perror_fail F -GLIBC_2.18 __backtrace F -GLIBC_2.18 __backtrace_symbols F -GLIBC_2.18 __backtrace_symbols_fd F -GLIBC_2.18 __bsd_getpgrp F -GLIBC_2.18 __bzero F -GLIBC_2.18 __check_rhosts_file D 0x4 -GLIBC_2.18 __chk_fail F -GLIBC_2.18 __clone F -GLIBC_2.18 __close F -GLIBC_2.18 __cmsg_nxthdr F -GLIBC_2.18 __confstr_chk F -GLIBC_2.18 __connect F -GLIBC_2.18 __ctype_b_loc F -GLIBC_2.18 __ctype_get_mb_cur_max F -GLIBC_2.18 __ctype_tolower_loc F -GLIBC_2.18 __ctype_toupper_loc F -GLIBC_2.18 __curbrk D 0x4 -GLIBC_2.18 __cxa_at_quick_exit F -GLIBC_2.18 __cxa_atexit F -GLIBC_2.18 __cxa_finalize F -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.18 __cyg_profile_func_enter F -GLIBC_2.18 __cyg_profile_func_exit F -GLIBC_2.18 __daylight D 0x4 -GLIBC_2.18 __dcgettext F -GLIBC_2.18 __default_morecore F -GLIBC_2.18 __dgettext F -GLIBC_2.18 __dprintf_chk F -GLIBC_2.18 __dup2 F -GLIBC_2.18 __duplocale F -GLIBC_2.18 __endmntent F -GLIBC_2.18 __environ D 0x4 -GLIBC_2.18 __errno_location F -GLIBC_2.18 __fbufsize F -GLIBC_2.18 __fcntl F -GLIBC_2.18 __fdelt_chk F -GLIBC_2.18 __fdelt_warn F -GLIBC_2.18 __ffs F -GLIBC_2.18 __fgets_chk F -GLIBC_2.18 __fgets_unlocked_chk F -GLIBC_2.18 __fgetws_chk F -GLIBC_2.18 __fgetws_unlocked_chk F -GLIBC_2.18 __finite F -GLIBC_2.18 __finitef F -GLIBC_2.18 __finitel F -GLIBC_2.18 __flbf F -GLIBC_2.18 __fork F -GLIBC_2.18 __fpending F -GLIBC_2.18 __fprintf_chk F -GLIBC_2.18 __fpu_control D 0x4 -GLIBC_2.18 __fpurge F -GLIBC_2.18 __fread_chk F -GLIBC_2.18 __fread_unlocked_chk F -GLIBC_2.18 __freadable F -GLIBC_2.18 __freading F -GLIBC_2.18 __free_hook D 0x4 -GLIBC_2.18 __freelocale F -GLIBC_2.18 __fsetlocking F -GLIBC_2.18 __fwprintf_chk F -GLIBC_2.18 __fwritable F -GLIBC_2.18 __fwriting F -GLIBC_2.18 __fxstat F -GLIBC_2.18 __fxstat64 F -GLIBC_2.18 __fxstatat F -GLIBC_2.18 __fxstatat64 F -GLIBC_2.18 __getauxval F -GLIBC_2.18 __getcwd_chk F -GLIBC_2.18 __getdelim F -GLIBC_2.18 __getdomainname_chk F -GLIBC_2.18 __getgroups_chk F -GLIBC_2.18 __gethostname_chk F -GLIBC_2.18 __getlogin_r_chk F -GLIBC_2.18 __getmntent_r F -GLIBC_2.18 __getpagesize F -GLIBC_2.18 __getpgid F -GLIBC_2.18 __getpid F -GLIBC_2.18 __gets_chk F -GLIBC_2.18 __gettimeofday F -GLIBC_2.18 __getwd_chk F -GLIBC_2.18 __gmtime_r F -GLIBC_2.18 __h_errno_location F -GLIBC_2.18 __isalnum_l F -GLIBC_2.18 __isalpha_l F -GLIBC_2.18 __isascii_l F -GLIBC_2.18 __isblank_l F -GLIBC_2.18 __iscntrl_l F -GLIBC_2.18 __isctype F -GLIBC_2.18 __isdigit_l F -GLIBC_2.18 __isgraph_l F -GLIBC_2.18 __isinf F -GLIBC_2.18 __isinff F -GLIBC_2.18 __isinfl F -GLIBC_2.18 __islower_l F -GLIBC_2.18 __isnan F -GLIBC_2.18 __isnanf F -GLIBC_2.18 __isnanl F -GLIBC_2.18 __isoc99_fscanf F -GLIBC_2.18 __isoc99_fwscanf F -GLIBC_2.18 __isoc99_scanf F -GLIBC_2.18 __isoc99_sscanf F -GLIBC_2.18 __isoc99_swscanf F -GLIBC_2.18 __isoc99_vfscanf F -GLIBC_2.18 __isoc99_vfwscanf F -GLIBC_2.18 __isoc99_vscanf F -GLIBC_2.18 __isoc99_vsscanf F -GLIBC_2.18 __isoc99_vswscanf F -GLIBC_2.18 __isoc99_vwscanf F -GLIBC_2.18 __isoc99_wscanf F -GLIBC_2.18 __isprint_l F -GLIBC_2.18 __ispunct_l F -GLIBC_2.18 __isspace_l F -GLIBC_2.18 __isupper_l F -GLIBC_2.18 __iswalnum_l F -GLIBC_2.18 __iswalpha_l F -GLIBC_2.18 __iswblank_l F -GLIBC_2.18 __iswcntrl_l F -GLIBC_2.18 __iswctype F -GLIBC_2.18 __iswctype_l F -GLIBC_2.18 __iswdigit_l F -GLIBC_2.18 __iswgraph_l F -GLIBC_2.18 __iswlower_l F -GLIBC_2.18 __iswprint_l F -GLIBC_2.18 __iswpunct_l F -GLIBC_2.18 __iswspace_l F -GLIBC_2.18 __iswupper_l F -GLIBC_2.18 __iswxdigit_l F -GLIBC_2.18 __isxdigit_l F -GLIBC_2.18 __ivaliduser F -GLIBC_2.18 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.18 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.18 __key_gendes_LOCAL D 0x4 -GLIBC_2.18 __libc_allocate_rtsig F -GLIBC_2.18 __libc_calloc F -GLIBC_2.18 __libc_current_sigrtmax F -GLIBC_2.18 __libc_current_sigrtmin F -GLIBC_2.18 __libc_free F -GLIBC_2.18 __libc_freeres F -GLIBC_2.18 __libc_init_first F -GLIBC_2.18 __libc_mallinfo F -GLIBC_2.18 __libc_malloc F -GLIBC_2.18 __libc_mallopt F -GLIBC_2.18 __libc_memalign F -GLIBC_2.18 __libc_pvalloc F -GLIBC_2.18 __libc_realloc F -GLIBC_2.18 __libc_sa_len F -GLIBC_2.18 __libc_start_main F -GLIBC_2.18 __libc_valloc F -GLIBC_2.18 __longjmp_chk F -GLIBC_2.18 __lseek F -GLIBC_2.18 __lxstat F -GLIBC_2.18 __lxstat64 F -GLIBC_2.18 __malloc_hook D 0x4 -GLIBC_2.18 __malloc_initialize_hook D 0x4 -GLIBC_2.18 __mbrlen F -GLIBC_2.18 __mbrtowc F -GLIBC_2.18 __mbsnrtowcs_chk F -GLIBC_2.18 __mbsrtowcs_chk F -GLIBC_2.18 __mbstowcs_chk F -GLIBC_2.18 __memalign_hook D 0x4 -GLIBC_2.18 __memcpy_chk F -GLIBC_2.18 __memmove_chk F -GLIBC_2.18 __mempcpy F -GLIBC_2.18 __mempcpy_chk F -GLIBC_2.18 __mempcpy_small F -GLIBC_2.18 __memset_chk F -GLIBC_2.18 __monstartup F -GLIBC_2.18 __morecore D 0x4 -GLIBC_2.18 __nanosleep F -GLIBC_2.18 __newlocale F -GLIBC_2.18 __nl_langinfo_l F -GLIBC_2.18 __nss_configure_lookup F -GLIBC_2.18 __nss_database_lookup F -GLIBC_2.18 __nss_group_lookup F -GLIBC_2.18 __nss_hostname_digits_dots F -GLIBC_2.18 __nss_hosts_lookup F -GLIBC_2.18 __nss_next F -GLIBC_2.18 __nss_passwd_lookup F -GLIBC_2.18 __obstack_printf_chk F -GLIBC_2.18 __obstack_vprintf_chk F -GLIBC_2.18 __open F -GLIBC_2.18 __open64 F -GLIBC_2.18 __open64_2 F -GLIBC_2.18 __open_2 F -GLIBC_2.18 __openat64_2 F -GLIBC_2.18 __openat_2 F -GLIBC_2.18 __overflow F -GLIBC_2.18 __pipe F -GLIBC_2.18 __poll F -GLIBC_2.18 __poll_chk F -GLIBC_2.18 __posix_getopt F -GLIBC_2.18 __ppoll_chk F -GLIBC_2.18 __pread64 F -GLIBC_2.18 __pread64_chk F -GLIBC_2.18 __pread_chk F -GLIBC_2.18 __printf_chk F -GLIBC_2.18 __printf_fp F -GLIBC_2.18 __profile_frequency F -GLIBC_2.18 __progname D 0x4 -GLIBC_2.18 __progname_full D 0x4 -GLIBC_2.18 __ptsname_r_chk F -GLIBC_2.18 __pwrite64 F -GLIBC_2.18 __rawmemchr F -GLIBC_2.18 __rcmd_errstr D 0x4 -GLIBC_2.18 __read F -GLIBC_2.18 __read_chk F -GLIBC_2.18 __readlink_chk F -GLIBC_2.18 __readlinkat_chk F -GLIBC_2.18 __realloc_hook D 0x4 -GLIBC_2.18 __realpath_chk F -GLIBC_2.18 __recv_chk F -GLIBC_2.18 __recvfrom_chk F -GLIBC_2.18 __register_atfork F -GLIBC_2.18 __res_init F -GLIBC_2.18 __res_nclose F -GLIBC_2.18 __res_ninit F -GLIBC_2.18 __res_randomid F -GLIBC_2.18 __res_state F -GLIBC_2.18 __rpc_thread_createerr F -GLIBC_2.18 __rpc_thread_svc_fdset F -GLIBC_2.18 __rpc_thread_svc_max_pollfd F -GLIBC_2.18 __rpc_thread_svc_pollfd F -GLIBC_2.18 __sbrk F -GLIBC_2.18 __sched_cpualloc F -GLIBC_2.18 __sched_cpucount F -GLIBC_2.18 __sched_cpufree F -GLIBC_2.18 __sched_get_priority_max F -GLIBC_2.18 __sched_get_priority_min F -GLIBC_2.18 __sched_getparam F -GLIBC_2.18 __sched_getscheduler F -GLIBC_2.18 __sched_setscheduler F -GLIBC_2.18 __sched_yield F -GLIBC_2.18 __select F -GLIBC_2.18 __send F -GLIBC_2.18 __setmntent F -GLIBC_2.18 __setpgid F -GLIBC_2.18 __sigaction F -GLIBC_2.18 __sigaddset F -GLIBC_2.18 __sigdelset F -GLIBC_2.18 __sigismember F -GLIBC_2.18 __signbit F -GLIBC_2.18 __signbitf F -GLIBC_2.18 __sigpause F -GLIBC_2.18 __sigsetjmp F -GLIBC_2.18 __sigsuspend F -GLIBC_2.18 __snprintf_chk F -GLIBC_2.18 __sprintf_chk F -GLIBC_2.18 __stack_chk_fail F -GLIBC_2.18 __statfs F -GLIBC_2.18 __stpcpy F -GLIBC_2.18 __stpcpy_chk F -GLIBC_2.18 __stpcpy_small F -GLIBC_2.18 __stpncpy F -GLIBC_2.18 __stpncpy_chk F -GLIBC_2.18 __strcasecmp F -GLIBC_2.18 __strcasecmp_l F -GLIBC_2.18 __strcasestr F -GLIBC_2.18 __strcat_chk F -GLIBC_2.18 __strcoll_l F -GLIBC_2.18 __strcpy_chk F -GLIBC_2.18 __strcpy_small F -GLIBC_2.18 __strcspn_c1 F -GLIBC_2.18 __strcspn_c2 F -GLIBC_2.18 __strcspn_c3 F -GLIBC_2.18 __strdup F -GLIBC_2.18 __strerror_r F -GLIBC_2.18 __strfmon_l F -GLIBC_2.18 __strftime_l F -GLIBC_2.18 __strncasecmp_l F -GLIBC_2.18 __strncat_chk F -GLIBC_2.18 __strncpy_chk F -GLIBC_2.18 __strndup F -GLIBC_2.18 __strpbrk_c2 F -GLIBC_2.18 __strpbrk_c3 F -GLIBC_2.18 __strsep_1c F -GLIBC_2.18 __strsep_2c F -GLIBC_2.18 __strsep_3c F -GLIBC_2.18 __strsep_g F -GLIBC_2.18 __strspn_c1 F -GLIBC_2.18 __strspn_c2 F -GLIBC_2.18 __strspn_c3 F -GLIBC_2.18 __strtod_internal F -GLIBC_2.18 __strtod_l F -GLIBC_2.18 __strtof_internal F -GLIBC_2.18 __strtof_l F -GLIBC_2.18 __strtok_r F -GLIBC_2.18 __strtok_r_1c F -GLIBC_2.18 __strtol_internal F -GLIBC_2.18 __strtol_l F -GLIBC_2.18 __strtold_internal F -GLIBC_2.18 __strtold_l F -GLIBC_2.18 __strtoll_internal F -GLIBC_2.18 __strtoll_l F -GLIBC_2.18 __strtoul_internal F -GLIBC_2.18 __strtoul_l F -GLIBC_2.18 __strtoull_internal F -GLIBC_2.18 __strtoull_l F -GLIBC_2.18 __strverscmp F -GLIBC_2.18 __strxfrm_l F -GLIBC_2.18 __swprintf_chk F -GLIBC_2.18 __sysconf F -GLIBC_2.18 __sysctl F -GLIBC_2.18 __syslog_chk F -GLIBC_2.18 __sysv_signal F -GLIBC_2.18 __timezone D 0x4 -GLIBC_2.18 __toascii_l F -GLIBC_2.18 __tolower_l F -GLIBC_2.18 __toupper_l F -GLIBC_2.18 __towctrans F -GLIBC_2.18 __towctrans_l F -GLIBC_2.18 __towlower_l F -GLIBC_2.18 __towupper_l F -GLIBC_2.18 __ttyname_r_chk F -GLIBC_2.18 __tzname D 0x8 -GLIBC_2.18 __uflow F -GLIBC_2.18 __underflow F -GLIBC_2.18 __uselocale F -GLIBC_2.18 __vasprintf_chk F -GLIBC_2.18 __vdprintf_chk F -GLIBC_2.18 __vfork F -GLIBC_2.18 __vfprintf_chk F -GLIBC_2.18 __vfscanf F -GLIBC_2.18 __vfwprintf_chk F -GLIBC_2.18 __vprintf_chk F -GLIBC_2.18 __vsnprintf F -GLIBC_2.18 __vsnprintf_chk F -GLIBC_2.18 __vsprintf_chk F -GLIBC_2.18 __vsscanf F -GLIBC_2.18 __vswprintf_chk F -GLIBC_2.18 __vsyslog_chk F -GLIBC_2.18 __vwprintf_chk F -GLIBC_2.18 __wait F -GLIBC_2.18 __waitpid F -GLIBC_2.18 __wcpcpy_chk F -GLIBC_2.18 __wcpncpy_chk F -GLIBC_2.18 __wcrtomb_chk F -GLIBC_2.18 __wcscasecmp_l F -GLIBC_2.18 __wcscat_chk F -GLIBC_2.18 __wcscoll_l F -GLIBC_2.18 __wcscpy_chk F -GLIBC_2.18 __wcsftime_l F -GLIBC_2.18 __wcsncasecmp_l F -GLIBC_2.18 __wcsncat_chk F -GLIBC_2.18 __wcsncpy_chk F -GLIBC_2.18 __wcsnrtombs_chk F -GLIBC_2.18 __wcsrtombs_chk F -GLIBC_2.18 __wcstod_internal F -GLIBC_2.18 __wcstod_l F -GLIBC_2.18 __wcstof_internal F -GLIBC_2.18 __wcstof_l F -GLIBC_2.18 __wcstol_internal F -GLIBC_2.18 __wcstol_l F -GLIBC_2.18 __wcstold_internal F -GLIBC_2.18 __wcstold_l F -GLIBC_2.18 __wcstoll_internal F -GLIBC_2.18 __wcstoll_l F -GLIBC_2.18 __wcstombs_chk F -GLIBC_2.18 __wcstoul_internal F -GLIBC_2.18 __wcstoul_l F -GLIBC_2.18 __wcstoull_internal F -GLIBC_2.18 __wcstoull_l F -GLIBC_2.18 __wcsxfrm_l F -GLIBC_2.18 __wctomb_chk F -GLIBC_2.18 __wctrans_l F -GLIBC_2.18 __wctype_l F -GLIBC_2.18 __wmemcpy_chk F -GLIBC_2.18 __wmemmove_chk F -GLIBC_2.18 __wmempcpy_chk F -GLIBC_2.18 __wmemset_chk F -GLIBC_2.18 __woverflow F -GLIBC_2.18 __wprintf_chk F -GLIBC_2.18 __write F -GLIBC_2.18 __wuflow F -GLIBC_2.18 __wunderflow F -GLIBC_2.18 __xmknod F -GLIBC_2.18 __xmknodat F -GLIBC_2.18 __xpg_basename F -GLIBC_2.18 __xpg_sigpause F -GLIBC_2.18 __xpg_strerror_r F -GLIBC_2.18 __xstat F -GLIBC_2.18 __xstat64 F -GLIBC_2.18 _authenticate F -GLIBC_2.18 _dl_mcount_wrapper F -GLIBC_2.18 _dl_mcount_wrapper_check F -GLIBC_2.18 _environ D 0x4 -GLIBC_2.18 _exit F -GLIBC_2.18 _flushlbf F -GLIBC_2.18 _libc_intl_domainname D 0x5 -GLIBC_2.18 _longjmp F -GLIBC_2.18 _mcleanup F -GLIBC_2.18 _mcount F -GLIBC_2.18 _nl_default_dirname D 0x12 -GLIBC_2.18 _nl_domain_bindings D 0x4 -GLIBC_2.18 _nl_msg_cat_cntr D 0x4 -GLIBC_2.18 _null_auth D 0xc -GLIBC_2.18 _obstack_allocated_p F -GLIBC_2.18 _obstack_begin F -GLIBC_2.18 _obstack_begin_1 F -GLIBC_2.18 _obstack_free F -GLIBC_2.18 _obstack_memory_used F -GLIBC_2.18 _obstack_newchunk F -GLIBC_2.18 _res D 0x200 -GLIBC_2.18 _res_hconf D 0x30 -GLIBC_2.18 _rpc_dtablesize F -GLIBC_2.18 _seterr_reply F -GLIBC_2.18 _setjmp F -GLIBC_2.18 _sys_errlist D 0x21c -GLIBC_2.18 _sys_nerr D 0x4 -GLIBC_2.18 _sys_siglist D 0x104 -GLIBC_2.18 _tolower F -GLIBC_2.18 _toupper F -GLIBC_2.18 a64l F -GLIBC_2.18 abort F -GLIBC_2.18 abs F -GLIBC_2.18 accept F -GLIBC_2.18 accept4 F -GLIBC_2.18 access F -GLIBC_2.18 acct F -GLIBC_2.18 addmntent F -GLIBC_2.18 addseverity F -GLIBC_2.18 adjtime F -GLIBC_2.18 adjtimex F -GLIBC_2.18 advance F -GLIBC_2.18 alarm F -GLIBC_2.18 aligned_alloc F -GLIBC_2.18 alphasort F -GLIBC_2.18 alphasort64 F -GLIBC_2.18 argp_err_exit_status D 0x4 -GLIBC_2.18 argp_error F -GLIBC_2.18 argp_failure F -GLIBC_2.18 argp_help F -GLIBC_2.18 argp_parse F -GLIBC_2.18 argp_program_bug_address D 0x4 -GLIBC_2.18 argp_program_version D 0x4 -GLIBC_2.18 argp_program_version_hook D 0x4 -GLIBC_2.18 argp_state_help F -GLIBC_2.18 argp_usage F -GLIBC_2.18 argz_add F -GLIBC_2.18 argz_add_sep F -GLIBC_2.18 argz_append F -GLIBC_2.18 argz_count F -GLIBC_2.18 argz_create F -GLIBC_2.18 argz_create_sep F -GLIBC_2.18 argz_delete F -GLIBC_2.18 argz_extract F -GLIBC_2.18 argz_insert F -GLIBC_2.18 argz_next F -GLIBC_2.18 argz_replace F -GLIBC_2.18 argz_stringify F -GLIBC_2.18 asctime F -GLIBC_2.18 asctime_r F -GLIBC_2.18 asprintf F -GLIBC_2.18 atof F -GLIBC_2.18 atoi F -GLIBC_2.18 atol F -GLIBC_2.18 atoll F -GLIBC_2.18 authdes_create F -GLIBC_2.18 authdes_getucred F -GLIBC_2.18 authdes_pk_create F -GLIBC_2.18 authnone_create F -GLIBC_2.18 authunix_create F -GLIBC_2.18 authunix_create_default F -GLIBC_2.18 backtrace F -GLIBC_2.18 backtrace_symbols F -GLIBC_2.18 backtrace_symbols_fd F -GLIBC_2.18 basename F -GLIBC_2.18 bcmp F -GLIBC_2.18 bcopy F -GLIBC_2.18 bdflush F -GLIBC_2.18 bind F -GLIBC_2.18 bind_textdomain_codeset F -GLIBC_2.18 bindresvport F -GLIBC_2.18 bindtextdomain F -GLIBC_2.18 brk F -GLIBC_2.18 bsd_signal F -GLIBC_2.18 bsearch F -GLIBC_2.18 btowc F -GLIBC_2.18 bzero F -GLIBC_2.18 c16rtomb F -GLIBC_2.18 c32rtomb F -GLIBC_2.18 calloc F -GLIBC_2.18 callrpc F -GLIBC_2.18 canonicalize_file_name F -GLIBC_2.18 capget F -GLIBC_2.18 capset F -GLIBC_2.18 catclose F -GLIBC_2.18 catgets F -GLIBC_2.18 catopen F -GLIBC_2.18 cbc_crypt F -GLIBC_2.18 cfgetispeed F -GLIBC_2.18 cfgetospeed F -GLIBC_2.18 cfmakeraw F -GLIBC_2.18 cfree F -GLIBC_2.18 cfsetispeed F -GLIBC_2.18 cfsetospeed F -GLIBC_2.18 cfsetspeed F -GLIBC_2.18 chdir F -GLIBC_2.18 chflags F -GLIBC_2.18 chmod F -GLIBC_2.18 chown F -GLIBC_2.18 chroot F -GLIBC_2.18 clearenv F -GLIBC_2.18 clearerr F -GLIBC_2.18 clearerr_unlocked F -GLIBC_2.18 clnt_broadcast F -GLIBC_2.18 clnt_create F -GLIBC_2.18 clnt_pcreateerror F -GLIBC_2.18 clnt_perrno F -GLIBC_2.18 clnt_perror F -GLIBC_2.18 clnt_spcreateerror F -GLIBC_2.18 clnt_sperrno F -GLIBC_2.18 clnt_sperror F -GLIBC_2.18 clntraw_create F -GLIBC_2.18 clnttcp_create F -GLIBC_2.18 clntudp_bufcreate F -GLIBC_2.18 clntudp_create F -GLIBC_2.18 clntunix_create F -GLIBC_2.18 clock F -GLIBC_2.18 clock_adjtime F -GLIBC_2.18 clock_getcpuclockid F -GLIBC_2.18 clock_getres F -GLIBC_2.18 clock_gettime F -GLIBC_2.18 clock_nanosleep F -GLIBC_2.18 clock_settime F -GLIBC_2.18 clone F -GLIBC_2.18 close F -GLIBC_2.18 closedir F -GLIBC_2.18 closelog F -GLIBC_2.18 confstr F -GLIBC_2.18 connect F -GLIBC_2.18 copysign F -GLIBC_2.18 copysignf F -GLIBC_2.18 copysignl F -GLIBC_2.18 creat F -GLIBC_2.18 creat64 F -GLIBC_2.18 create_module F -GLIBC_2.18 ctermid F -GLIBC_2.18 ctime F -GLIBC_2.18 ctime_r F -GLIBC_2.18 cuserid F -GLIBC_2.18 daemon F -GLIBC_2.18 daylight D 0x4 -GLIBC_2.18 dcgettext F -GLIBC_2.18 dcngettext F -GLIBC_2.18 delete_module F -GLIBC_2.18 des_setparity F -GLIBC_2.18 dgettext F -GLIBC_2.18 difftime F -GLIBC_2.18 dirfd F -GLIBC_2.18 dirname F -GLIBC_2.18 div F -GLIBC_2.18 dl_iterate_phdr F -GLIBC_2.18 dngettext F -GLIBC_2.18 dprintf F -GLIBC_2.18 drand48 F -GLIBC_2.18 drand48_r F -GLIBC_2.18 dup F -GLIBC_2.18 dup2 F -GLIBC_2.18 dup3 F -GLIBC_2.18 duplocale F -GLIBC_2.18 dysize F -GLIBC_2.18 eaccess F -GLIBC_2.18 ecb_crypt F -GLIBC_2.18 ecvt F -GLIBC_2.18 ecvt_r F -GLIBC_2.18 endaliasent F -GLIBC_2.18 endfsent F -GLIBC_2.18 endgrent F -GLIBC_2.18 endhostent F -GLIBC_2.18 endmntent F -GLIBC_2.18 endnetent F -GLIBC_2.18 endnetgrent F -GLIBC_2.18 endprotoent F -GLIBC_2.18 endpwent F -GLIBC_2.18 endrpcent F -GLIBC_2.18 endservent F -GLIBC_2.18 endsgent F -GLIBC_2.18 endspent F -GLIBC_2.18 endttyent F -GLIBC_2.18 endusershell F -GLIBC_2.18 endutent F -GLIBC_2.18 endutxent F -GLIBC_2.18 environ D 0x4 -GLIBC_2.18 envz_add F -GLIBC_2.18 envz_entry F -GLIBC_2.18 envz_get F -GLIBC_2.18 envz_merge F -GLIBC_2.18 envz_remove F -GLIBC_2.18 envz_strip F -GLIBC_2.18 epoll_create F -GLIBC_2.18 epoll_create1 F -GLIBC_2.18 epoll_ctl F -GLIBC_2.18 epoll_pwait F -GLIBC_2.18 epoll_wait F -GLIBC_2.18 erand48 F -GLIBC_2.18 erand48_r F -GLIBC_2.18 err F -GLIBC_2.18 error F -GLIBC_2.18 error_at_line F -GLIBC_2.18 error_message_count D 0x4 -GLIBC_2.18 error_one_per_line D 0x4 -GLIBC_2.18 error_print_progname D 0x4 -GLIBC_2.18 errx F -GLIBC_2.18 ether_aton F -GLIBC_2.18 ether_aton_r F -GLIBC_2.18 ether_hostton F -GLIBC_2.18 ether_line F -GLIBC_2.18 ether_ntoa F -GLIBC_2.18 ether_ntoa_r F -GLIBC_2.18 ether_ntohost F -GLIBC_2.18 euidaccess F -GLIBC_2.18 eventfd F -GLIBC_2.18 eventfd_read F -GLIBC_2.18 eventfd_write F -GLIBC_2.18 execl F -GLIBC_2.18 execle F -GLIBC_2.18 execlp F -GLIBC_2.18 execv F -GLIBC_2.18 execve F -GLIBC_2.18 execvp F -GLIBC_2.18 execvpe F -GLIBC_2.18 exit F -GLIBC_2.18 faccessat F -GLIBC_2.18 fallocate F -GLIBC_2.18 fallocate64 F -GLIBC_2.18 fanotify_init F -GLIBC_2.18 fanotify_mark F -GLIBC_2.18 fattach F -GLIBC_2.18 fchdir F -GLIBC_2.18 fchflags F -GLIBC_2.18 fchmod F -GLIBC_2.18 fchmodat F -GLIBC_2.18 fchown F -GLIBC_2.18 fchownat F -GLIBC_2.18 fclose F -GLIBC_2.18 fcloseall F -GLIBC_2.18 fcntl F -GLIBC_2.18 fcvt F -GLIBC_2.18 fcvt_r F -GLIBC_2.18 fdatasync F -GLIBC_2.18 fdetach F -GLIBC_2.18 fdopen F -GLIBC_2.18 fdopendir F -GLIBC_2.18 feof F -GLIBC_2.18 feof_unlocked F -GLIBC_2.18 ferror F -GLIBC_2.18 ferror_unlocked F -GLIBC_2.18 fexecve F -GLIBC_2.18 fflush F -GLIBC_2.18 fflush_unlocked F -GLIBC_2.18 ffs F -GLIBC_2.18 ffsl F -GLIBC_2.18 ffsll F -GLIBC_2.18 fgetc F -GLIBC_2.18 fgetc_unlocked F -GLIBC_2.18 fgetgrent F -GLIBC_2.18 fgetgrent_r F -GLIBC_2.18 fgetpos F -GLIBC_2.18 fgetpos64 F -GLIBC_2.18 fgetpwent F -GLIBC_2.18 fgetpwent_r F -GLIBC_2.18 fgets F -GLIBC_2.18 fgets_unlocked F -GLIBC_2.18 fgetsgent F -GLIBC_2.18 fgetsgent_r F -GLIBC_2.18 fgetspent F -GLIBC_2.18 fgetspent_r F -GLIBC_2.18 fgetwc F -GLIBC_2.18 fgetwc_unlocked F -GLIBC_2.18 fgetws F -GLIBC_2.18 fgetws_unlocked F -GLIBC_2.18 fgetxattr F -GLIBC_2.18 fileno F -GLIBC_2.18 fileno_unlocked F -GLIBC_2.18 finite F -GLIBC_2.18 finitef F -GLIBC_2.18 finitel F -GLIBC_2.18 flistxattr F -GLIBC_2.18 flock F -GLIBC_2.18 flockfile F -GLIBC_2.18 fmemopen F -GLIBC_2.18 fmtmsg F -GLIBC_2.18 fnmatch F -GLIBC_2.18 fopen F -GLIBC_2.18 fopen64 F -GLIBC_2.18 fopencookie F -GLIBC_2.18 fork F -GLIBC_2.18 fpathconf F -GLIBC_2.18 fprintf F -GLIBC_2.18 fputc F -GLIBC_2.18 fputc_unlocked F -GLIBC_2.18 fputs F -GLIBC_2.18 fputs_unlocked F -GLIBC_2.18 fputwc F -GLIBC_2.18 fputwc_unlocked F -GLIBC_2.18 fputws F -GLIBC_2.18 fputws_unlocked F -GLIBC_2.18 fread F -GLIBC_2.18 fread_unlocked F -GLIBC_2.18 free F -GLIBC_2.18 freeaddrinfo F -GLIBC_2.18 freeifaddrs F -GLIBC_2.18 freelocale F -GLIBC_2.18 fremovexattr F -GLIBC_2.18 freopen F -GLIBC_2.18 freopen64 F -GLIBC_2.18 frexp F -GLIBC_2.18 frexpf F -GLIBC_2.18 frexpl F -GLIBC_2.18 fscanf F -GLIBC_2.18 fseek F -GLIBC_2.18 fseeko F -GLIBC_2.18 fseeko64 F -GLIBC_2.18 fsetpos F -GLIBC_2.18 fsetpos64 F -GLIBC_2.18 fsetxattr F -GLIBC_2.18 fstatfs F -GLIBC_2.18 fstatfs64 F -GLIBC_2.18 fstatvfs F -GLIBC_2.18 fstatvfs64 F -GLIBC_2.18 fsync F -GLIBC_2.18 ftell F -GLIBC_2.18 ftello F -GLIBC_2.18 ftello64 F -GLIBC_2.18 ftime F -GLIBC_2.18 ftok F -GLIBC_2.18 ftruncate F -GLIBC_2.18 ftruncate64 F -GLIBC_2.18 ftrylockfile F -GLIBC_2.18 fts_children F -GLIBC_2.18 fts_close F -GLIBC_2.18 fts_open F -GLIBC_2.18 fts_read F -GLIBC_2.18 fts_set F -GLIBC_2.18 ftw F -GLIBC_2.18 ftw64 F -GLIBC_2.18 funlockfile F -GLIBC_2.18 futimens F -GLIBC_2.18 futimes F -GLIBC_2.18 futimesat F -GLIBC_2.18 fwide F -GLIBC_2.18 fwprintf F -GLIBC_2.18 fwrite F -GLIBC_2.18 fwrite_unlocked F -GLIBC_2.18 fwscanf F -GLIBC_2.18 gai_strerror F -GLIBC_2.18 gcvt F -GLIBC_2.18 get_avphys_pages F -GLIBC_2.18 get_current_dir_name F -GLIBC_2.18 get_kernel_syms F -GLIBC_2.18 get_myaddress F -GLIBC_2.18 get_nprocs F -GLIBC_2.18 get_nprocs_conf F -GLIBC_2.18 get_phys_pages F -GLIBC_2.18 getaddrinfo F -GLIBC_2.18 getaliasbyname F -GLIBC_2.18 getaliasbyname_r F -GLIBC_2.18 getaliasent F -GLIBC_2.18 getaliasent_r F -GLIBC_2.18 getauxval F -GLIBC_2.18 getc F -GLIBC_2.18 getc_unlocked F -GLIBC_2.18 getchar F -GLIBC_2.18 getchar_unlocked F -GLIBC_2.18 getcontext F -GLIBC_2.18 getcwd F -GLIBC_2.18 getdate F -GLIBC_2.18 getdate_err D 0x4 -GLIBC_2.18 getdate_r F -GLIBC_2.18 getdelim F -GLIBC_2.18 getdirentries F -GLIBC_2.18 getdirentries64 F -GLIBC_2.18 getdomainname F -GLIBC_2.18 getdtablesize F -GLIBC_2.18 getegid F -GLIBC_2.18 getenv F -GLIBC_2.18 geteuid F -GLIBC_2.18 getfsent F -GLIBC_2.18 getfsfile F -GLIBC_2.18 getfsspec F -GLIBC_2.18 getgid F -GLIBC_2.18 getgrent F -GLIBC_2.18 getgrent_r F -GLIBC_2.18 getgrgid F -GLIBC_2.18 getgrgid_r F -GLIBC_2.18 getgrnam F -GLIBC_2.18 getgrnam_r F -GLIBC_2.18 getgrouplist F -GLIBC_2.18 getgroups F -GLIBC_2.18 gethostbyaddr F -GLIBC_2.18 gethostbyaddr_r F -GLIBC_2.18 gethostbyname F -GLIBC_2.18 gethostbyname2 F -GLIBC_2.18 gethostbyname2_r F -GLIBC_2.18 gethostbyname_r F -GLIBC_2.18 gethostent F -GLIBC_2.18 gethostent_r F -GLIBC_2.18 gethostid F -GLIBC_2.18 gethostname F -GLIBC_2.18 getifaddrs F -GLIBC_2.18 getipv4sourcefilter F -GLIBC_2.18 getitimer F -GLIBC_2.18 getline F -GLIBC_2.18 getloadavg F -GLIBC_2.18 getlogin F -GLIBC_2.18 getlogin_r F -GLIBC_2.18 getmntent F -GLIBC_2.18 getmntent_r F -GLIBC_2.18 getmsg F -GLIBC_2.18 getnameinfo F -GLIBC_2.18 getnetbyaddr F -GLIBC_2.18 getnetbyaddr_r F -GLIBC_2.18 getnetbyname F -GLIBC_2.18 getnetbyname_r F -GLIBC_2.18 getnetent F -GLIBC_2.18 getnetent_r F -GLIBC_2.18 getnetgrent F -GLIBC_2.18 getnetgrent_r F -GLIBC_2.18 getnetname F -GLIBC_2.18 getopt F -GLIBC_2.18 getopt_long F -GLIBC_2.18 getopt_long_only F -GLIBC_2.18 getpagesize F -GLIBC_2.18 getpass F -GLIBC_2.18 getpeername F -GLIBC_2.18 getpgid F -GLIBC_2.18 getpgrp F -GLIBC_2.18 getpid F -GLIBC_2.18 getpmsg F -GLIBC_2.18 getppid F -GLIBC_2.18 getpriority F -GLIBC_2.18 getprotobyname F -GLIBC_2.18 getprotobyname_r F -GLIBC_2.18 getprotobynumber F -GLIBC_2.18 getprotobynumber_r F -GLIBC_2.18 getprotoent F -GLIBC_2.18 getprotoent_r F -GLIBC_2.18 getpt F -GLIBC_2.18 getpublickey F -GLIBC_2.18 getpw F -GLIBC_2.18 getpwent F -GLIBC_2.18 getpwent_r F -GLIBC_2.18 getpwnam F -GLIBC_2.18 getpwnam_r F -GLIBC_2.18 getpwuid F -GLIBC_2.18 getpwuid_r F -GLIBC_2.18 getresgid F -GLIBC_2.18 getresuid F -GLIBC_2.18 getrlimit F -GLIBC_2.18 getrlimit64 F -GLIBC_2.18 getrpcbyname F -GLIBC_2.18 getrpcbyname_r F -GLIBC_2.18 getrpcbynumber F -GLIBC_2.18 getrpcbynumber_r F -GLIBC_2.18 getrpcent F -GLIBC_2.18 getrpcent_r F -GLIBC_2.18 getrpcport F -GLIBC_2.18 getrusage F -GLIBC_2.18 gets F -GLIBC_2.18 getsecretkey F -GLIBC_2.18 getservbyname F -GLIBC_2.18 getservbyname_r F -GLIBC_2.18 getservbyport F -GLIBC_2.18 getservbyport_r F -GLIBC_2.18 getservent F -GLIBC_2.18 getservent_r F -GLIBC_2.18 getsgent F -GLIBC_2.18 getsgent_r F -GLIBC_2.18 getsgnam F -GLIBC_2.18 getsgnam_r F -GLIBC_2.18 getsid F -GLIBC_2.18 getsockname F -GLIBC_2.18 getsockopt F -GLIBC_2.18 getsourcefilter F -GLIBC_2.18 getspent F -GLIBC_2.18 getspent_r F -GLIBC_2.18 getspnam F -GLIBC_2.18 getspnam_r F -GLIBC_2.18 getsubopt F -GLIBC_2.18 gettext F -GLIBC_2.18 gettimeofday F -GLIBC_2.18 getttyent F -GLIBC_2.18 getttynam F -GLIBC_2.18 getuid F -GLIBC_2.18 getusershell F -GLIBC_2.18 getutent F -GLIBC_2.18 getutent_r F -GLIBC_2.18 getutid F -GLIBC_2.18 getutid_r F -GLIBC_2.18 getutline F -GLIBC_2.18 getutline_r F -GLIBC_2.18 getutmp F -GLIBC_2.18 getutmpx F -GLIBC_2.18 getutxent F -GLIBC_2.18 getutxid F -GLIBC_2.18 getutxline F -GLIBC_2.18 getw F -GLIBC_2.18 getwc F -GLIBC_2.18 getwc_unlocked F -GLIBC_2.18 getwchar F -GLIBC_2.18 getwchar_unlocked F -GLIBC_2.18 getwd F -GLIBC_2.18 getxattr F -GLIBC_2.18 glob F -GLIBC_2.18 glob64 F -GLIBC_2.18 glob_pattern_p F -GLIBC_2.18 globfree F -GLIBC_2.18 globfree64 F -GLIBC_2.18 gmtime F -GLIBC_2.18 gmtime_r F -GLIBC_2.18 gnu_dev_major F -GLIBC_2.18 gnu_dev_makedev F -GLIBC_2.18 gnu_dev_minor F -GLIBC_2.18 gnu_get_libc_release F -GLIBC_2.18 gnu_get_libc_version F -GLIBC_2.18 grantpt F -GLIBC_2.18 group_member F -GLIBC_2.18 gsignal F -GLIBC_2.18 gtty F -GLIBC_2.18 h_errlist D 0x14 -GLIBC_2.18 h_nerr D 0x4 -GLIBC_2.18 hasmntopt F -GLIBC_2.18 hcreate F -GLIBC_2.18 hcreate_r F -GLIBC_2.18 hdestroy F -GLIBC_2.18 hdestroy_r F -GLIBC_2.18 herror F -GLIBC_2.18 host2netname F -GLIBC_2.18 hsearch F -GLIBC_2.18 hsearch_r F -GLIBC_2.18 hstrerror F -GLIBC_2.18 htonl F -GLIBC_2.18 htons F -GLIBC_2.18 iconv F -GLIBC_2.18 iconv_close F -GLIBC_2.18 iconv_open F -GLIBC_2.18 if_freenameindex F -GLIBC_2.18 if_indextoname F -GLIBC_2.18 if_nameindex F -GLIBC_2.18 if_nametoindex F -GLIBC_2.18 imaxabs F -GLIBC_2.18 imaxdiv F -GLIBC_2.18 in6addr_any D 0x10 -GLIBC_2.18 in6addr_loopback D 0x10 -GLIBC_2.18 index F -GLIBC_2.18 inet6_opt_append F -GLIBC_2.18 inet6_opt_find F -GLIBC_2.18 inet6_opt_finish F -GLIBC_2.18 inet6_opt_get_val F -GLIBC_2.18 inet6_opt_init F -GLIBC_2.18 inet6_opt_next F -GLIBC_2.18 inet6_opt_set_val F -GLIBC_2.18 inet6_option_alloc F -GLIBC_2.18 inet6_option_append F -GLIBC_2.18 inet6_option_find F -GLIBC_2.18 inet6_option_init F -GLIBC_2.18 inet6_option_next F -GLIBC_2.18 inet6_option_space F -GLIBC_2.18 inet6_rth_add F -GLIBC_2.18 inet6_rth_getaddr F -GLIBC_2.18 inet6_rth_init F -GLIBC_2.18 inet6_rth_reverse F -GLIBC_2.18 inet6_rth_segments F -GLIBC_2.18 inet6_rth_space F -GLIBC_2.18 inet_addr F -GLIBC_2.18 inet_aton F -GLIBC_2.18 inet_lnaof F -GLIBC_2.18 inet_makeaddr F -GLIBC_2.18 inet_netof F -GLIBC_2.18 inet_network F -GLIBC_2.18 inet_nsap_addr F -GLIBC_2.18 inet_nsap_ntoa F -GLIBC_2.18 inet_ntoa F -GLIBC_2.18 inet_ntop F -GLIBC_2.18 inet_pton F -GLIBC_2.18 init_module F -GLIBC_2.18 initgroups F -GLIBC_2.18 initstate F -GLIBC_2.18 initstate_r F -GLIBC_2.18 innetgr F -GLIBC_2.18 inotify_add_watch F -GLIBC_2.18 inotify_init F -GLIBC_2.18 inotify_init1 F -GLIBC_2.18 inotify_rm_watch F -GLIBC_2.18 insque F -GLIBC_2.18 ioctl F -GLIBC_2.18 iruserok F -GLIBC_2.18 iruserok_af F -GLIBC_2.18 isalnum F -GLIBC_2.18 isalnum_l F -GLIBC_2.18 isalpha F -GLIBC_2.18 isalpha_l F -GLIBC_2.18 isascii F -GLIBC_2.18 isastream F -GLIBC_2.18 isatty F -GLIBC_2.18 isblank F -GLIBC_2.18 isblank_l F -GLIBC_2.18 iscntrl F -GLIBC_2.18 iscntrl_l F -GLIBC_2.18 isctype F -GLIBC_2.18 isdigit F -GLIBC_2.18 isdigit_l F -GLIBC_2.18 isfdtype F -GLIBC_2.18 isgraph F -GLIBC_2.18 isgraph_l F -GLIBC_2.18 isinf F -GLIBC_2.18 isinff F -GLIBC_2.18 isinfl F -GLIBC_2.18 islower F -GLIBC_2.18 islower_l F -GLIBC_2.18 isnan F -GLIBC_2.18 isnanf F -GLIBC_2.18 isnanl F -GLIBC_2.18 isprint F -GLIBC_2.18 isprint_l F -GLIBC_2.18 ispunct F -GLIBC_2.18 ispunct_l F -GLIBC_2.18 isspace F -GLIBC_2.18 isspace_l F -GLIBC_2.18 isupper F -GLIBC_2.18 isupper_l F -GLIBC_2.18 iswalnum F -GLIBC_2.18 iswalnum_l F -GLIBC_2.18 iswalpha F -GLIBC_2.18 iswalpha_l F -GLIBC_2.18 iswblank F -GLIBC_2.18 iswblank_l F -GLIBC_2.18 iswcntrl F -GLIBC_2.18 iswcntrl_l F -GLIBC_2.18 iswctype F -GLIBC_2.18 iswctype_l F -GLIBC_2.18 iswdigit F -GLIBC_2.18 iswdigit_l F -GLIBC_2.18 iswgraph F -GLIBC_2.18 iswgraph_l F -GLIBC_2.18 iswlower F -GLIBC_2.18 iswlower_l F -GLIBC_2.18 iswprint F -GLIBC_2.18 iswprint_l F -GLIBC_2.18 iswpunct F -GLIBC_2.18 iswpunct_l F -GLIBC_2.18 iswspace F -GLIBC_2.18 iswspace_l F -GLIBC_2.18 iswupper F -GLIBC_2.18 iswupper_l F -GLIBC_2.18 iswxdigit F -GLIBC_2.18 iswxdigit_l F -GLIBC_2.18 isxdigit F -GLIBC_2.18 isxdigit_l F -GLIBC_2.18 jrand48 F -GLIBC_2.18 jrand48_r F -GLIBC_2.18 key_decryptsession F -GLIBC_2.18 key_decryptsession_pk F -GLIBC_2.18 key_encryptsession F -GLIBC_2.18 key_encryptsession_pk F -GLIBC_2.18 key_gendes F -GLIBC_2.18 key_get_conv F -GLIBC_2.18 key_secretkey_is_set F -GLIBC_2.18 key_setnet F -GLIBC_2.18 key_setsecret F -GLIBC_2.18 kill F -GLIBC_2.18 killpg F -GLIBC_2.18 klogctl F -GLIBC_2.18 l64a F -GLIBC_2.18 labs F -GLIBC_2.18 lchmod F -GLIBC_2.18 lchown F -GLIBC_2.18 lckpwdf F -GLIBC_2.18 lcong48 F -GLIBC_2.18 lcong48_r F -GLIBC_2.18 ldexp F -GLIBC_2.18 ldexpf F -GLIBC_2.18 ldexpl F -GLIBC_2.18 ldiv F -GLIBC_2.18 lfind F -GLIBC_2.18 lgetxattr F -GLIBC_2.18 link F -GLIBC_2.18 linkat F -GLIBC_2.18 listen F -GLIBC_2.18 listxattr F -GLIBC_2.18 llabs F -GLIBC_2.18 lldiv F -GLIBC_2.18 llistxattr F -GLIBC_2.18 llseek F -GLIBC_2.18 loc1 D 0x4 -GLIBC_2.18 loc2 D 0x4 -GLIBC_2.18 localeconv F -GLIBC_2.18 localtime F -GLIBC_2.18 localtime_r F -GLIBC_2.18 lockf F -GLIBC_2.18 lockf64 F -GLIBC_2.18 locs D 0x4 -GLIBC_2.18 longjmp F -GLIBC_2.18 lrand48 F -GLIBC_2.18 lrand48_r F -GLIBC_2.18 lremovexattr F -GLIBC_2.18 lsearch F -GLIBC_2.18 lseek F -GLIBC_2.18 lseek64 F -GLIBC_2.18 lsetxattr F -GLIBC_2.18 lutimes F -GLIBC_2.18 madvise F -GLIBC_2.18 makecontext F -GLIBC_2.18 mallinfo F -GLIBC_2.18 malloc F -GLIBC_2.18 malloc_get_state F -GLIBC_2.18 malloc_info F -GLIBC_2.18 malloc_set_state F -GLIBC_2.18 malloc_stats F -GLIBC_2.18 malloc_trim F -GLIBC_2.18 malloc_usable_size F -GLIBC_2.18 mallopt F -GLIBC_2.18 mallwatch D 0x4 -GLIBC_2.18 mblen F -GLIBC_2.18 mbrlen F -GLIBC_2.18 mbrtoc16 F -GLIBC_2.18 mbrtoc32 F -GLIBC_2.18 mbrtowc F -GLIBC_2.18 mbsinit F -GLIBC_2.18 mbsnrtowcs F -GLIBC_2.18 mbsrtowcs F -GLIBC_2.18 mbstowcs F -GLIBC_2.18 mbtowc F -GLIBC_2.18 mcheck F -GLIBC_2.18 mcheck_check_all F -GLIBC_2.18 mcheck_pedantic F -GLIBC_2.18 memalign F -GLIBC_2.18 memccpy F -GLIBC_2.18 memchr F -GLIBC_2.18 memcmp F -GLIBC_2.18 memcpy F -GLIBC_2.18 memfrob F -GLIBC_2.18 memmem F -GLIBC_2.18 memmove F -GLIBC_2.18 mempcpy F -GLIBC_2.18 memrchr F -GLIBC_2.18 memset F -GLIBC_2.18 mincore F -GLIBC_2.18 mkdir F -GLIBC_2.18 mkdirat F -GLIBC_2.18 mkdtemp F -GLIBC_2.18 mkfifo F -GLIBC_2.18 mkfifoat F -GLIBC_2.18 mkostemp F -GLIBC_2.18 mkostemp64 F -GLIBC_2.18 mkostemps F -GLIBC_2.18 mkostemps64 F -GLIBC_2.18 mkstemp F -GLIBC_2.18 mkstemp64 F -GLIBC_2.18 mkstemps F -GLIBC_2.18 mkstemps64 F -GLIBC_2.18 mktemp F -GLIBC_2.18 mktime F -GLIBC_2.18 mlock F -GLIBC_2.18 mlockall F -GLIBC_2.18 mmap F -GLIBC_2.18 mmap64 F -GLIBC_2.18 modf F -GLIBC_2.18 modff F -GLIBC_2.18 modfl F -GLIBC_2.18 moncontrol F -GLIBC_2.18 monstartup F -GLIBC_2.18 mount F -GLIBC_2.18 mprobe F -GLIBC_2.18 mprotect F -GLIBC_2.18 mrand48 F -GLIBC_2.18 mrand48_r F -GLIBC_2.18 mremap F -GLIBC_2.18 msgctl F -GLIBC_2.18 msgget F -GLIBC_2.18 msgrcv F -GLIBC_2.18 msgsnd F -GLIBC_2.18 msync F -GLIBC_2.18 mtrace F -GLIBC_2.18 munlock F -GLIBC_2.18 munlockall F -GLIBC_2.18 munmap F -GLIBC_2.18 muntrace F -GLIBC_2.18 name_to_handle_at F -GLIBC_2.18 nanosleep F -GLIBC_2.18 netname2host F -GLIBC_2.18 netname2user F -GLIBC_2.18 newlocale F -GLIBC_2.18 nfsservctl F -GLIBC_2.18 nftw F -GLIBC_2.18 nftw64 F -GLIBC_2.18 ngettext F -GLIBC_2.18 nice F -GLIBC_2.18 nl_langinfo F -GLIBC_2.18 nl_langinfo_l F -GLIBC_2.18 nrand48 F -GLIBC_2.18 nrand48_r F -GLIBC_2.18 ntohl F -GLIBC_2.18 ntohs F -GLIBC_2.18 ntp_adjtime F -GLIBC_2.18 ntp_gettime F -GLIBC_2.18 ntp_gettimex F -GLIBC_2.18 obstack_alloc_failed_handler D 0x4 -GLIBC_2.18 obstack_exit_failure D 0x4 -GLIBC_2.18 obstack_free F -GLIBC_2.18 obstack_printf F -GLIBC_2.18 obstack_vprintf F -GLIBC_2.18 on_exit F -GLIBC_2.18 open F -GLIBC_2.18 open64 F -GLIBC_2.18 open_by_handle_at F -GLIBC_2.18 open_memstream F -GLIBC_2.18 open_wmemstream F -GLIBC_2.18 openat F -GLIBC_2.18 openat64 F -GLIBC_2.18 opendir F -GLIBC_2.18 openlog F -GLIBC_2.18 optarg D 0x4 -GLIBC_2.18 opterr D 0x4 -GLIBC_2.18 optind D 0x4 -GLIBC_2.18 optopt D 0x4 -GLIBC_2.18 parse_printf_format F -GLIBC_2.18 passwd2des F -GLIBC_2.18 pathconf F -GLIBC_2.18 pause F -GLIBC_2.18 pclose F -GLIBC_2.18 perror F -GLIBC_2.18 personality F -GLIBC_2.18 pipe F -GLIBC_2.18 pipe2 F -GLIBC_2.18 pivot_root F -GLIBC_2.18 pmap_getmaps F -GLIBC_2.18 pmap_getport F -GLIBC_2.18 pmap_rmtcall F -GLIBC_2.18 pmap_set F -GLIBC_2.18 pmap_unset F -GLIBC_2.18 poll F -GLIBC_2.18 popen F -GLIBC_2.18 posix_fadvise F -GLIBC_2.18 posix_fadvise64 F -GLIBC_2.18 posix_fallocate F -GLIBC_2.18 posix_fallocate64 F -GLIBC_2.18 posix_madvise F -GLIBC_2.18 posix_memalign F -GLIBC_2.18 posix_openpt F -GLIBC_2.18 posix_spawn F -GLIBC_2.18 posix_spawn_file_actions_addclose F -GLIBC_2.18 posix_spawn_file_actions_adddup2 F -GLIBC_2.18 posix_spawn_file_actions_addopen F -GLIBC_2.18 posix_spawn_file_actions_destroy F -GLIBC_2.18 posix_spawn_file_actions_init F -GLIBC_2.18 posix_spawnattr_destroy F -GLIBC_2.18 posix_spawnattr_getflags F -GLIBC_2.18 posix_spawnattr_getpgroup F -GLIBC_2.18 posix_spawnattr_getschedparam F -GLIBC_2.18 posix_spawnattr_getschedpolicy F -GLIBC_2.18 posix_spawnattr_getsigdefault F -GLIBC_2.18 posix_spawnattr_getsigmask F -GLIBC_2.18 posix_spawnattr_init F -GLIBC_2.18 posix_spawnattr_setflags F -GLIBC_2.18 posix_spawnattr_setpgroup F -GLIBC_2.18 posix_spawnattr_setschedparam F -GLIBC_2.18 posix_spawnattr_setschedpolicy F -GLIBC_2.18 posix_spawnattr_setsigdefault F -GLIBC_2.18 posix_spawnattr_setsigmask F -GLIBC_2.18 posix_spawnp F -GLIBC_2.18 ppoll F -GLIBC_2.18 prctl F -GLIBC_2.18 pread F -GLIBC_2.18 pread64 F -GLIBC_2.18 preadv F -GLIBC_2.18 preadv64 F -GLIBC_2.18 printf F -GLIBC_2.18 printf_size F -GLIBC_2.18 printf_size_info F -GLIBC_2.18 prlimit F -GLIBC_2.18 prlimit64 F -GLIBC_2.18 process_vm_readv F -GLIBC_2.18 process_vm_writev F -GLIBC_2.18 profil F -GLIBC_2.18 program_invocation_name D 0x4 -GLIBC_2.18 program_invocation_short_name D 0x4 -GLIBC_2.18 pselect F -GLIBC_2.18 psiginfo F -GLIBC_2.18 psignal F -GLIBC_2.18 pthread_attr_destroy F -GLIBC_2.18 pthread_attr_getdetachstate F -GLIBC_2.18 pthread_attr_getinheritsched F -GLIBC_2.18 pthread_attr_getschedparam F -GLIBC_2.18 pthread_attr_getschedpolicy F -GLIBC_2.18 pthread_attr_getscope F -GLIBC_2.18 pthread_attr_init F -GLIBC_2.18 pthread_attr_setdetachstate F -GLIBC_2.18 pthread_attr_setinheritsched F -GLIBC_2.18 pthread_attr_setschedparam F -GLIBC_2.18 pthread_attr_setschedpolicy F -GLIBC_2.18 pthread_attr_setscope F -GLIBC_2.18 pthread_cond_broadcast F -GLIBC_2.18 pthread_cond_destroy F -GLIBC_2.18 pthread_cond_init F -GLIBC_2.18 pthread_cond_signal F -GLIBC_2.18 pthread_cond_timedwait F -GLIBC_2.18 pthread_cond_wait F -GLIBC_2.18 pthread_condattr_destroy F -GLIBC_2.18 pthread_condattr_init F -GLIBC_2.18 pthread_equal F -GLIBC_2.18 pthread_exit F -GLIBC_2.18 pthread_getschedparam F -GLIBC_2.18 pthread_mutex_destroy F -GLIBC_2.18 pthread_mutex_init F -GLIBC_2.18 pthread_mutex_lock F -GLIBC_2.18 pthread_mutex_unlock F -GLIBC_2.18 pthread_self F -GLIBC_2.18 pthread_setcancelstate F -GLIBC_2.18 pthread_setcanceltype F -GLIBC_2.18 pthread_setschedparam F -GLIBC_2.18 ptrace F -GLIBC_2.18 ptsname F -GLIBC_2.18 ptsname_r F -GLIBC_2.18 putc F -GLIBC_2.18 putc_unlocked F -GLIBC_2.18 putchar F -GLIBC_2.18 putchar_unlocked F -GLIBC_2.18 putenv F -GLIBC_2.18 putgrent F -GLIBC_2.18 putmsg F -GLIBC_2.18 putpmsg F -GLIBC_2.18 putpwent F -GLIBC_2.18 puts F -GLIBC_2.18 putsgent F -GLIBC_2.18 putspent F -GLIBC_2.18 pututline F -GLIBC_2.18 pututxline F -GLIBC_2.18 putw F -GLIBC_2.18 putwc F -GLIBC_2.18 putwc_unlocked F -GLIBC_2.18 putwchar F -GLIBC_2.18 putwchar_unlocked F -GLIBC_2.18 pvalloc F -GLIBC_2.18 pwrite F -GLIBC_2.18 pwrite64 F -GLIBC_2.18 pwritev F -GLIBC_2.18 pwritev64 F -GLIBC_2.18 qecvt F -GLIBC_2.18 qecvt_r F -GLIBC_2.18 qfcvt F -GLIBC_2.18 qfcvt_r F -GLIBC_2.18 qgcvt F -GLIBC_2.18 qsort F -GLIBC_2.18 qsort_r F -GLIBC_2.18 query_module F -GLIBC_2.18 quick_exit F -GLIBC_2.18 quotactl F -GLIBC_2.18 raise F -GLIBC_2.18 rand F -GLIBC_2.18 rand_r F -GLIBC_2.18 random F -GLIBC_2.18 random_r F -GLIBC_2.18 rawmemchr F -GLIBC_2.18 rcmd F -GLIBC_2.18 rcmd_af F -GLIBC_2.18 re_comp F -GLIBC_2.18 re_compile_fastmap F -GLIBC_2.18 re_compile_pattern F -GLIBC_2.18 re_exec F -GLIBC_2.18 re_match F -GLIBC_2.18 re_match_2 F -GLIBC_2.18 re_search F -GLIBC_2.18 re_search_2 F -GLIBC_2.18 re_set_registers F -GLIBC_2.18 re_set_syntax F -GLIBC_2.18 re_syntax_options D 0x4 -GLIBC_2.18 read F -GLIBC_2.18 readahead F -GLIBC_2.18 readdir F -GLIBC_2.18 readdir64 F -GLIBC_2.18 readdir64_r F -GLIBC_2.18 readdir_r F -GLIBC_2.18 readlink F -GLIBC_2.18 readlinkat F -GLIBC_2.18 readv F -GLIBC_2.18 realloc F -GLIBC_2.18 realpath F -GLIBC_2.18 reboot F -GLIBC_2.18 recv F -GLIBC_2.18 recvfrom F -GLIBC_2.18 recvmmsg F -GLIBC_2.18 recvmsg F -GLIBC_2.18 regcomp F -GLIBC_2.18 regerror F -GLIBC_2.18 regexec F -GLIBC_2.18 regfree F -GLIBC_2.18 register_printf_function F -GLIBC_2.18 register_printf_modifier F -GLIBC_2.18 register_printf_specifier F -GLIBC_2.18 register_printf_type F -GLIBC_2.18 registerrpc F -GLIBC_2.18 remap_file_pages F -GLIBC_2.18 remove F -GLIBC_2.18 removexattr F -GLIBC_2.18 remque F -GLIBC_2.18 rename F -GLIBC_2.18 renameat F -GLIBC_2.18 revoke F -GLIBC_2.18 rewind F -GLIBC_2.18 rewinddir F -GLIBC_2.18 rexec F -GLIBC_2.18 rexec_af F -GLIBC_2.18 rexecoptions D 0x4 -GLIBC_2.18 rindex F -GLIBC_2.18 rmdir F -GLIBC_2.18 rpc_createerr D 0x10 -GLIBC_2.18 rpmatch F -GLIBC_2.18 rresvport F -GLIBC_2.18 rresvport_af F -GLIBC_2.18 rtime F -GLIBC_2.18 ruserok F -GLIBC_2.18 ruserok_af F -GLIBC_2.18 ruserpass F -GLIBC_2.18 sbrk F -GLIBC_2.18 scalbn F -GLIBC_2.18 scalbnf F -GLIBC_2.18 scalbnl F -GLIBC_2.18 scandir F -GLIBC_2.18 scandir64 F -GLIBC_2.18 scandirat F -GLIBC_2.18 scandirat64 F -GLIBC_2.18 scanf F -GLIBC_2.18 sched_get_priority_max F -GLIBC_2.18 sched_get_priority_min F -GLIBC_2.18 sched_getaffinity F -GLIBC_2.18 sched_getcpu F -GLIBC_2.18 sched_getparam F -GLIBC_2.18 sched_getscheduler F -GLIBC_2.18 sched_rr_get_interval F -GLIBC_2.18 sched_setaffinity F -GLIBC_2.18 sched_setparam F -GLIBC_2.18 sched_setscheduler F -GLIBC_2.18 sched_yield F -GLIBC_2.18 secure_getenv F -GLIBC_2.18 seed48 F -GLIBC_2.18 seed48_r F -GLIBC_2.18 seekdir F -GLIBC_2.18 select F -GLIBC_2.18 semctl F -GLIBC_2.18 semget F -GLIBC_2.18 semop F -GLIBC_2.18 semtimedop F -GLIBC_2.18 send F -GLIBC_2.18 sendfile F -GLIBC_2.18 sendfile64 F -GLIBC_2.18 sendmmsg F -GLIBC_2.18 sendmsg F -GLIBC_2.18 sendto F -GLIBC_2.18 setaliasent F -GLIBC_2.18 setbuf F -GLIBC_2.18 setbuffer F -GLIBC_2.18 setcontext F -GLIBC_2.18 setdomainname F -GLIBC_2.18 setegid F -GLIBC_2.18 setenv F -GLIBC_2.18 seteuid F -GLIBC_2.18 setfsent F -GLIBC_2.18 setfsgid F -GLIBC_2.18 setfsuid F -GLIBC_2.18 setgid F -GLIBC_2.18 setgrent F -GLIBC_2.18 setgroups F -GLIBC_2.18 sethostent F -GLIBC_2.18 sethostid F -GLIBC_2.18 sethostname F -GLIBC_2.18 setipv4sourcefilter F -GLIBC_2.18 setitimer F -GLIBC_2.18 setjmp F -GLIBC_2.18 setlinebuf F -GLIBC_2.18 setlocale F -GLIBC_2.18 setlogin F -GLIBC_2.18 setlogmask F -GLIBC_2.18 setmntent F -GLIBC_2.18 setnetent F -GLIBC_2.18 setnetgrent F -GLIBC_2.18 setns F -GLIBC_2.18 setpgid F -GLIBC_2.18 setpgrp F -GLIBC_2.18 setpriority F -GLIBC_2.18 setprotoent F -GLIBC_2.18 setpwent F -GLIBC_2.18 setregid F -GLIBC_2.18 setresgid F -GLIBC_2.18 setresuid F -GLIBC_2.18 setreuid F -GLIBC_2.18 setrlimit F -GLIBC_2.18 setrlimit64 F -GLIBC_2.18 setrpcent F -GLIBC_2.18 setservent F -GLIBC_2.18 setsgent F -GLIBC_2.18 setsid F -GLIBC_2.18 setsockopt F -GLIBC_2.18 setsourcefilter F -GLIBC_2.18 setspent F -GLIBC_2.18 setstate F -GLIBC_2.18 setstate_r F -GLIBC_2.18 settimeofday F -GLIBC_2.18 setttyent F -GLIBC_2.18 setuid F -GLIBC_2.18 setusershell F -GLIBC_2.18 setutent F -GLIBC_2.18 setutxent F -GLIBC_2.18 setvbuf F -GLIBC_2.18 setxattr F -GLIBC_2.18 sgetsgent F -GLIBC_2.18 sgetsgent_r F -GLIBC_2.18 sgetspent F -GLIBC_2.18 sgetspent_r F -GLIBC_2.18 shmat F -GLIBC_2.18 shmctl F -GLIBC_2.18 shmdt F -GLIBC_2.18 shmget F -GLIBC_2.18 shutdown F -GLIBC_2.18 sigaction F -GLIBC_2.18 sigaddset F -GLIBC_2.18 sigaltstack F -GLIBC_2.18 sigandset F -GLIBC_2.18 sigblock F -GLIBC_2.18 sigdelset F -GLIBC_2.18 sigemptyset F -GLIBC_2.18 sigfillset F -GLIBC_2.18 siggetmask F -GLIBC_2.18 sighold F -GLIBC_2.18 sigignore F -GLIBC_2.18 siginterrupt F -GLIBC_2.18 sigisemptyset F -GLIBC_2.18 sigismember F -GLIBC_2.18 siglongjmp F -GLIBC_2.18 signal F -GLIBC_2.18 signalfd F -GLIBC_2.18 sigorset F -GLIBC_2.18 sigpause F -GLIBC_2.18 sigpending F -GLIBC_2.18 sigprocmask F -GLIBC_2.18 sigqueue F -GLIBC_2.18 sigrelse F -GLIBC_2.18 sigreturn F -GLIBC_2.18 sigset F -GLIBC_2.18 sigsetmask F -GLIBC_2.18 sigstack F -GLIBC_2.18 sigsuspend F -GLIBC_2.18 sigtimedwait F -GLIBC_2.18 sigvec F -GLIBC_2.18 sigwait F -GLIBC_2.18 sigwaitinfo F -GLIBC_2.18 sleep F -GLIBC_2.18 snprintf F -GLIBC_2.18 sockatmark F -GLIBC_2.18 socket F -GLIBC_2.18 socketpair F -GLIBC_2.18 splice F -GLIBC_2.18 sprintf F -GLIBC_2.18 sprofil F -GLIBC_2.18 srand F -GLIBC_2.18 srand48 F -GLIBC_2.18 srand48_r F -GLIBC_2.18 srandom F -GLIBC_2.18 srandom_r F -GLIBC_2.18 sscanf F -GLIBC_2.18 ssignal F -GLIBC_2.18 sstk F -GLIBC_2.18 statfs F -GLIBC_2.18 statfs64 F -GLIBC_2.18 statvfs F -GLIBC_2.18 statvfs64 F -GLIBC_2.18 stderr D 0x4 -GLIBC_2.18 stdin D 0x4 -GLIBC_2.18 stdout D 0x4 -GLIBC_2.18 step F -GLIBC_2.18 stime F -GLIBC_2.18 stpcpy F -GLIBC_2.18 stpncpy F -GLIBC_2.18 strcasecmp F -GLIBC_2.18 strcasecmp_l F -GLIBC_2.18 strcasestr F -GLIBC_2.18 strcat F -GLIBC_2.18 strchr F -GLIBC_2.18 strchrnul F -GLIBC_2.18 strcmp F -GLIBC_2.18 strcoll F -GLIBC_2.18 strcoll_l F -GLIBC_2.18 strcpy F -GLIBC_2.18 strcspn F -GLIBC_2.18 strdup F -GLIBC_2.18 strerror F -GLIBC_2.18 strerror_l F -GLIBC_2.18 strerror_r F -GLIBC_2.18 strfmon F -GLIBC_2.18 strfmon_l F -GLIBC_2.18 strfry F -GLIBC_2.18 strftime F -GLIBC_2.18 strftime_l F -GLIBC_2.18 strlen F -GLIBC_2.18 strncasecmp F -GLIBC_2.18 strncasecmp_l F -GLIBC_2.18 strncat F -GLIBC_2.18 strncmp F -GLIBC_2.18 strncpy F -GLIBC_2.18 strndup F -GLIBC_2.18 strnlen F -GLIBC_2.18 strpbrk F -GLIBC_2.18 strptime F -GLIBC_2.18 strptime_l F -GLIBC_2.18 strrchr F -GLIBC_2.18 strsep F -GLIBC_2.18 strsignal F -GLIBC_2.18 strspn F -GLIBC_2.18 strstr F -GLIBC_2.18 strtod F -GLIBC_2.18 strtod_l F -GLIBC_2.18 strtof F -GLIBC_2.18 strtof_l F -GLIBC_2.18 strtoimax F -GLIBC_2.18 strtok F -GLIBC_2.18 strtok_r F -GLIBC_2.18 strtol F -GLIBC_2.18 strtol_l F -GLIBC_2.18 strtold F -GLIBC_2.18 strtold_l F -GLIBC_2.18 strtoll F -GLIBC_2.18 strtoll_l F -GLIBC_2.18 strtoq F -GLIBC_2.18 strtoul F -GLIBC_2.18 strtoul_l F -GLIBC_2.18 strtoull F -GLIBC_2.18 strtoull_l F -GLIBC_2.18 strtoumax F -GLIBC_2.18 strtouq F -GLIBC_2.18 strverscmp F -GLIBC_2.18 strxfrm F -GLIBC_2.18 strxfrm_l F -GLIBC_2.18 stty F -GLIBC_2.18 svc_exit F -GLIBC_2.18 svc_fdset D 0x80 -GLIBC_2.18 svc_getreq F -GLIBC_2.18 svc_getreq_common F -GLIBC_2.18 svc_getreq_poll F -GLIBC_2.18 svc_getreqset F -GLIBC_2.18 svc_max_pollfd D 0x4 -GLIBC_2.18 svc_pollfd D 0x4 -GLIBC_2.18 svc_register F -GLIBC_2.18 svc_run F -GLIBC_2.18 svc_sendreply F -GLIBC_2.18 svc_unregister F -GLIBC_2.18 svcauthdes_stats D 0xc -GLIBC_2.18 svcerr_auth F -GLIBC_2.18 svcerr_decode F -GLIBC_2.18 svcerr_noproc F -GLIBC_2.18 svcerr_noprog F -GLIBC_2.18 svcerr_progvers F -GLIBC_2.18 svcerr_systemerr F -GLIBC_2.18 svcerr_weakauth F -GLIBC_2.18 svcfd_create F -GLIBC_2.18 svcraw_create F -GLIBC_2.18 svctcp_create F -GLIBC_2.18 svcudp_bufcreate F -GLIBC_2.18 svcudp_create F -GLIBC_2.18 svcudp_enablecache F -GLIBC_2.18 svcunix_create F -GLIBC_2.18 svcunixfd_create F -GLIBC_2.18 swab F -GLIBC_2.18 swapcontext F -GLIBC_2.18 swapoff F -GLIBC_2.18 swapon F -GLIBC_2.18 swprintf F -GLIBC_2.18 swscanf F -GLIBC_2.18 symlink F -GLIBC_2.18 symlinkat F -GLIBC_2.18 sync F -GLIBC_2.18 sync_file_range F -GLIBC_2.18 syncfs F -GLIBC_2.18 sys_errlist D 0x21c -GLIBC_2.18 sys_nerr D 0x4 -GLIBC_2.18 sys_sigabbrev D 0x104 -GLIBC_2.18 sys_siglist D 0x104 -GLIBC_2.18 syscall F -GLIBC_2.18 sysconf F -GLIBC_2.18 sysctl F -GLIBC_2.18 sysinfo F -GLIBC_2.18 syslog F -GLIBC_2.18 system F -GLIBC_2.18 sysv_signal F -GLIBC_2.18 tcdrain F -GLIBC_2.18 tcflow F -GLIBC_2.18 tcflush F -GLIBC_2.18 tcgetattr F -GLIBC_2.18 tcgetpgrp F -GLIBC_2.18 tcgetsid F -GLIBC_2.18 tcsendbreak F -GLIBC_2.18 tcsetattr F -GLIBC_2.18 tcsetpgrp F -GLIBC_2.18 tdelete F -GLIBC_2.18 tdestroy F -GLIBC_2.18 tee F -GLIBC_2.18 telldir F -GLIBC_2.18 tempnam F -GLIBC_2.18 textdomain F -GLIBC_2.18 tfind F -GLIBC_2.18 time F -GLIBC_2.18 timegm F -GLIBC_2.18 timelocal F -GLIBC_2.18 timerfd_create F -GLIBC_2.18 timerfd_gettime F -GLIBC_2.18 timerfd_settime F -GLIBC_2.18 times F -GLIBC_2.18 timespec_get F -GLIBC_2.18 timezone D 0x4 -GLIBC_2.18 tmpfile F -GLIBC_2.18 tmpfile64 F -GLIBC_2.18 tmpnam F -GLIBC_2.18 tmpnam_r F -GLIBC_2.18 toascii F -GLIBC_2.18 tolower F -GLIBC_2.18 tolower_l F -GLIBC_2.18 toupper F -GLIBC_2.18 toupper_l F -GLIBC_2.18 towctrans F -GLIBC_2.18 towctrans_l F -GLIBC_2.18 towlower F -GLIBC_2.18 towlower_l F -GLIBC_2.18 towupper F -GLIBC_2.18 towupper_l F -GLIBC_2.18 tr_break F -GLIBC_2.18 truncate F -GLIBC_2.18 truncate64 F -GLIBC_2.18 tsearch F -GLIBC_2.18 ttyname F -GLIBC_2.18 ttyname_r F -GLIBC_2.18 ttyslot F -GLIBC_2.18 twalk F -GLIBC_2.18 tzname D 0x8 -GLIBC_2.18 tzset F -GLIBC_2.18 ualarm F -GLIBC_2.18 ulckpwdf F -GLIBC_2.18 ulimit F -GLIBC_2.18 umask F -GLIBC_2.18 umount F -GLIBC_2.18 umount2 F -GLIBC_2.18 uname F -GLIBC_2.18 ungetc F -GLIBC_2.18 ungetwc F -GLIBC_2.18 unlink F -GLIBC_2.18 unlinkat F -GLIBC_2.18 unlockpt F -GLIBC_2.18 unsetenv F -GLIBC_2.18 unshare F -GLIBC_2.18 updwtmp F -GLIBC_2.18 updwtmpx F -GLIBC_2.18 uselib F -GLIBC_2.18 uselocale F -GLIBC_2.18 user2netname F -GLIBC_2.18 usleep F -GLIBC_2.18 ustat F -GLIBC_2.18 utime F -GLIBC_2.18 utimensat F -GLIBC_2.18 utimes F -GLIBC_2.18 utmpname F -GLIBC_2.18 utmpxname F -GLIBC_2.18 valloc F -GLIBC_2.18 vasprintf F -GLIBC_2.18 vdprintf F -GLIBC_2.18 verr F -GLIBC_2.18 verrx F -GLIBC_2.18 versionsort F -GLIBC_2.18 versionsort64 F -GLIBC_2.18 vfork F -GLIBC_2.18 vfprintf F -GLIBC_2.18 vfscanf F -GLIBC_2.18 vfwprintf F -GLIBC_2.18 vfwscanf F -GLIBC_2.18 vhangup F -GLIBC_2.18 vlimit F -GLIBC_2.18 vmsplice F -GLIBC_2.18 vprintf F -GLIBC_2.18 vscanf F -GLIBC_2.18 vsnprintf F -GLIBC_2.18 vsprintf F -GLIBC_2.18 vsscanf F -GLIBC_2.18 vswprintf F -GLIBC_2.18 vswscanf F -GLIBC_2.18 vsyslog F -GLIBC_2.18 vtimes F -GLIBC_2.18 vwarn F -GLIBC_2.18 vwarnx F -GLIBC_2.18 vwprintf F -GLIBC_2.18 vwscanf F -GLIBC_2.18 wait F -GLIBC_2.18 wait3 F -GLIBC_2.18 wait4 F -GLIBC_2.18 waitid F -GLIBC_2.18 waitpid F -GLIBC_2.18 warn F -GLIBC_2.18 warnx F -GLIBC_2.18 wcpcpy F -GLIBC_2.18 wcpncpy F -GLIBC_2.18 wcrtomb F -GLIBC_2.18 wcscasecmp F -GLIBC_2.18 wcscasecmp_l F -GLIBC_2.18 wcscat F -GLIBC_2.18 wcschr F -GLIBC_2.18 wcschrnul F -GLIBC_2.18 wcscmp F -GLIBC_2.18 wcscoll F -GLIBC_2.18 wcscoll_l F -GLIBC_2.18 wcscpy F -GLIBC_2.18 wcscspn F -GLIBC_2.18 wcsdup F -GLIBC_2.18 wcsftime F -GLIBC_2.18 wcsftime_l F -GLIBC_2.18 wcslen F -GLIBC_2.18 wcsncasecmp F -GLIBC_2.18 wcsncasecmp_l F -GLIBC_2.18 wcsncat F -GLIBC_2.18 wcsncmp F -GLIBC_2.18 wcsncpy F -GLIBC_2.18 wcsnlen F -GLIBC_2.18 wcsnrtombs F -GLIBC_2.18 wcspbrk F -GLIBC_2.18 wcsrchr F -GLIBC_2.18 wcsrtombs F -GLIBC_2.18 wcsspn F -GLIBC_2.18 wcsstr F -GLIBC_2.18 wcstod F -GLIBC_2.18 wcstod_l F -GLIBC_2.18 wcstof F -GLIBC_2.18 wcstof_l F -GLIBC_2.18 wcstoimax F -GLIBC_2.18 wcstok F -GLIBC_2.18 wcstol F -GLIBC_2.18 wcstol_l F -GLIBC_2.18 wcstold F -GLIBC_2.18 wcstold_l F -GLIBC_2.18 wcstoll F -GLIBC_2.18 wcstoll_l F -GLIBC_2.18 wcstombs F -GLIBC_2.18 wcstoq F -GLIBC_2.18 wcstoul F -GLIBC_2.18 wcstoul_l F -GLIBC_2.18 wcstoull F -GLIBC_2.18 wcstoull_l F -GLIBC_2.18 wcstoumax F -GLIBC_2.18 wcstouq F -GLIBC_2.18 wcswcs F -GLIBC_2.18 wcswidth F -GLIBC_2.18 wcsxfrm F -GLIBC_2.18 wcsxfrm_l F -GLIBC_2.18 wctob F -GLIBC_2.18 wctomb F -GLIBC_2.18 wctrans F -GLIBC_2.18 wctrans_l F -GLIBC_2.18 wctype F -GLIBC_2.18 wctype_l F -GLIBC_2.18 wcwidth F -GLIBC_2.18 wmemchr F -GLIBC_2.18 wmemcmp F -GLIBC_2.18 wmemcpy F -GLIBC_2.18 wmemmove F -GLIBC_2.18 wmempcpy F -GLIBC_2.18 wmemset F -GLIBC_2.18 wordexp F -GLIBC_2.18 wordfree F -GLIBC_2.18 wprintf F -GLIBC_2.18 write F -GLIBC_2.18 writev F -GLIBC_2.18 wscanf F -GLIBC_2.18 xdecrypt F -GLIBC_2.18 xdr_accepted_reply F -GLIBC_2.18 xdr_array F -GLIBC_2.18 xdr_authdes_cred F -GLIBC_2.18 xdr_authdes_verf F -GLIBC_2.18 xdr_authunix_parms F -GLIBC_2.18 xdr_bool F -GLIBC_2.18 xdr_bytes F -GLIBC_2.18 xdr_callhdr F -GLIBC_2.18 xdr_callmsg F -GLIBC_2.18 xdr_char F -GLIBC_2.18 xdr_cryptkeyarg F -GLIBC_2.18 xdr_cryptkeyarg2 F -GLIBC_2.18 xdr_cryptkeyres F -GLIBC_2.18 xdr_des_block F -GLIBC_2.18 xdr_double F -GLIBC_2.18 xdr_enum F -GLIBC_2.18 xdr_float F -GLIBC_2.18 xdr_free F -GLIBC_2.18 xdr_getcredres F -GLIBC_2.18 xdr_hyper F -GLIBC_2.18 xdr_int F -GLIBC_2.18 xdr_int16_t F -GLIBC_2.18 xdr_int32_t F -GLIBC_2.18 xdr_int64_t F -GLIBC_2.18 xdr_int8_t F -GLIBC_2.18 xdr_key_netstarg F -GLIBC_2.18 xdr_key_netstres F -GLIBC_2.18 xdr_keybuf F -GLIBC_2.18 xdr_keystatus F -GLIBC_2.18 xdr_long F -GLIBC_2.18 xdr_longlong_t F -GLIBC_2.18 xdr_netnamestr F -GLIBC_2.18 xdr_netobj F -GLIBC_2.18 xdr_opaque F -GLIBC_2.18 xdr_opaque_auth F -GLIBC_2.18 xdr_pmap F -GLIBC_2.18 xdr_pmaplist F -GLIBC_2.18 xdr_pointer F -GLIBC_2.18 xdr_quad_t F -GLIBC_2.18 xdr_reference F -GLIBC_2.18 xdr_rejected_reply F -GLIBC_2.18 xdr_replymsg F -GLIBC_2.18 xdr_rmtcall_args F -GLIBC_2.18 xdr_rmtcallres F -GLIBC_2.18 xdr_short F -GLIBC_2.18 xdr_sizeof F -GLIBC_2.18 xdr_string F -GLIBC_2.18 xdr_u_char F -GLIBC_2.18 xdr_u_hyper F -GLIBC_2.18 xdr_u_int F -GLIBC_2.18 xdr_u_long F -GLIBC_2.18 xdr_u_longlong_t F -GLIBC_2.18 xdr_u_quad_t F -GLIBC_2.18 xdr_u_short F -GLIBC_2.18 xdr_uint16_t F -GLIBC_2.18 xdr_uint32_t F -GLIBC_2.18 xdr_uint64_t F -GLIBC_2.18 xdr_uint8_t F -GLIBC_2.18 xdr_union F -GLIBC_2.18 xdr_unixcred F -GLIBC_2.18 xdr_vector F -GLIBC_2.18 xdr_void F -GLIBC_2.18 xdr_wrapstring F -GLIBC_2.18 xdrmem_create F -GLIBC_2.18 xdrrec_create F -GLIBC_2.18 xdrrec_endofrecord F -GLIBC_2.18 xdrrec_eof F -GLIBC_2.18 xdrrec_skiprecord F -GLIBC_2.18 xdrstdio_create F -GLIBC_2.18 xencrypt F -GLIBC_2.18 xprt_register F -GLIBC_2.18 xprt_unregister F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F diff --git a/sysdeps/unix/sysv/linux/microblaze/libcrypt.abilist b/sysdeps/unix/sysv/linux/microblaze/libcrypt.abilist deleted file mode 100644 index 75fa78890a..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 crypt F -GLIBC_2.18 crypt_r F -GLIBC_2.18 encrypt F -GLIBC_2.18 encrypt_r F -GLIBC_2.18 fcrypt F -GLIBC_2.18 setkey F -GLIBC_2.18 setkey_r F diff --git a/sysdeps/unix/sysv/linux/microblaze/libdl.abilist b/sysdeps/unix/sysv/linux/microblaze/libdl.abilist deleted file mode 100644 index 7cad5061b0..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/libdl.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 dladdr F -GLIBC_2.18 dladdr1 F -GLIBC_2.18 dlclose F -GLIBC_2.18 dlerror F -GLIBC_2.18 dlinfo F -GLIBC_2.18 dlmopen F -GLIBC_2.18 dlopen F -GLIBC_2.18 dlsym F -GLIBC_2.18 dlvsym F diff --git a/sysdeps/unix/sysv/linux/microblaze/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/libm.abilist deleted file mode 100644 index bb872f292a..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/libm.abilist +++ /dev/null @@ -1,430 +0,0 @@ -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 _LIB_VERSION D 0x4 -GLIBC_2.18 __acos_finite F -GLIBC_2.18 __acosf_finite F -GLIBC_2.18 __acosh_finite F -GLIBC_2.18 __acoshf_finite F -GLIBC_2.18 __asin_finite F -GLIBC_2.18 __asinf_finite F -GLIBC_2.18 __atan2_finite F -GLIBC_2.18 __atan2f_finite F -GLIBC_2.18 __atanh_finite F -GLIBC_2.18 __atanhf_finite F -GLIBC_2.18 __clog10 F -GLIBC_2.18 __clog10f F -GLIBC_2.18 __clog10l F -GLIBC_2.18 __cosh_finite F -GLIBC_2.18 __coshf_finite F -GLIBC_2.18 __exp10_finite F -GLIBC_2.18 __exp10f_finite F -GLIBC_2.18 __exp2_finite F -GLIBC_2.18 __exp2f_finite F -GLIBC_2.18 __exp_finite F -GLIBC_2.18 __expf_finite F -GLIBC_2.18 __finite F -GLIBC_2.18 __finitef F -GLIBC_2.18 __finitel F -GLIBC_2.18 __fmod_finite F -GLIBC_2.18 __fmodf_finite F -GLIBC_2.18 __fpclassify F -GLIBC_2.18 __fpclassifyf F -GLIBC_2.18 __gamma_r_finite F -GLIBC_2.18 __gammaf_r_finite F -GLIBC_2.18 __hypot_finite F -GLIBC_2.18 __hypotf_finite F -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __j0_finite F -GLIBC_2.18 __j0f_finite F -GLIBC_2.18 __j1_finite F -GLIBC_2.18 __j1f_finite F -GLIBC_2.18 __jn_finite F -GLIBC_2.18 __jnf_finite F -GLIBC_2.18 __lgamma_r_finite F -GLIBC_2.18 __lgammaf_r_finite F -GLIBC_2.18 __log10_finite F -GLIBC_2.18 __log10f_finite F -GLIBC_2.18 __log2_finite F -GLIBC_2.18 __log2f_finite F -GLIBC_2.18 __log_finite F -GLIBC_2.18 __logf_finite F -GLIBC_2.18 __pow_finite F -GLIBC_2.18 __powf_finite F -GLIBC_2.18 __remainder_finite F -GLIBC_2.18 __remainderf_finite F -GLIBC_2.18 __scalb_finite F -GLIBC_2.18 __scalbf_finite F -GLIBC_2.18 __signbit F -GLIBC_2.18 __signbitf F -GLIBC_2.18 __sinh_finite F -GLIBC_2.18 __sinhf_finite F -GLIBC_2.18 __sqrt_finite F -GLIBC_2.18 __sqrtf_finite F -GLIBC_2.18 __y0_finite F -GLIBC_2.18 __y0f_finite F -GLIBC_2.18 __y1_finite F -GLIBC_2.18 __y1f_finite F -GLIBC_2.18 __yn_finite F -GLIBC_2.18 __ynf_finite F -GLIBC_2.18 acos F -GLIBC_2.18 acosf F -GLIBC_2.18 acosh F -GLIBC_2.18 acoshf F -GLIBC_2.18 acoshl F -GLIBC_2.18 acosl F -GLIBC_2.18 asin F -GLIBC_2.18 asinf F -GLIBC_2.18 asinh F -GLIBC_2.18 asinhf F -GLIBC_2.18 asinhl F -GLIBC_2.18 asinl F -GLIBC_2.18 atan F -GLIBC_2.18 atan2 F -GLIBC_2.18 atan2f F -GLIBC_2.18 atan2l F -GLIBC_2.18 atanf F -GLIBC_2.18 atanh F -GLIBC_2.18 atanhf F -GLIBC_2.18 atanhl F -GLIBC_2.18 atanl F -GLIBC_2.18 cabs F -GLIBC_2.18 cabsf F -GLIBC_2.18 cabsl F -GLIBC_2.18 cacos F -GLIBC_2.18 cacosf F -GLIBC_2.18 cacosh F -GLIBC_2.18 cacoshf F -GLIBC_2.18 cacoshl F -GLIBC_2.18 cacosl F -GLIBC_2.18 carg F -GLIBC_2.18 cargf F -GLIBC_2.18 cargl F -GLIBC_2.18 casin F -GLIBC_2.18 casinf F -GLIBC_2.18 casinh F -GLIBC_2.18 casinhf F -GLIBC_2.18 casinhl F -GLIBC_2.18 casinl F -GLIBC_2.18 catan F -GLIBC_2.18 catanf F -GLIBC_2.18 catanh F -GLIBC_2.18 catanhf F -GLIBC_2.18 catanhl F -GLIBC_2.18 catanl F -GLIBC_2.18 cbrt F -GLIBC_2.18 cbrtf F -GLIBC_2.18 cbrtl F -GLIBC_2.18 ccos F -GLIBC_2.18 ccosf F -GLIBC_2.18 ccosh F -GLIBC_2.18 ccoshf F -GLIBC_2.18 ccoshl F -GLIBC_2.18 ccosl F -GLIBC_2.18 ceil F -GLIBC_2.18 ceilf F -GLIBC_2.18 ceill F -GLIBC_2.18 cexp F -GLIBC_2.18 cexpf F -GLIBC_2.18 cexpl F -GLIBC_2.18 cimag F -GLIBC_2.18 cimagf F -GLIBC_2.18 cimagl F -GLIBC_2.18 clog F -GLIBC_2.18 clog10 F -GLIBC_2.18 clog10f F -GLIBC_2.18 clog10l F -GLIBC_2.18 clogf F -GLIBC_2.18 clogl F -GLIBC_2.18 conj F -GLIBC_2.18 conjf F -GLIBC_2.18 conjl F -GLIBC_2.18 copysign F -GLIBC_2.18 copysignf F -GLIBC_2.18 copysignl F -GLIBC_2.18 cos F -GLIBC_2.18 cosf F -GLIBC_2.18 cosh F -GLIBC_2.18 coshf F -GLIBC_2.18 coshl F -GLIBC_2.18 cosl F -GLIBC_2.18 cpow F -GLIBC_2.18 cpowf F -GLIBC_2.18 cpowl F -GLIBC_2.18 cproj F -GLIBC_2.18 cprojf F -GLIBC_2.18 cprojl F -GLIBC_2.18 creal F -GLIBC_2.18 crealf F -GLIBC_2.18 creall F -GLIBC_2.18 csin F -GLIBC_2.18 csinf F -GLIBC_2.18 csinh F -GLIBC_2.18 csinhf F -GLIBC_2.18 csinhl F -GLIBC_2.18 csinl F -GLIBC_2.18 csqrt F -GLIBC_2.18 csqrtf F -GLIBC_2.18 csqrtl F -GLIBC_2.18 ctan F -GLIBC_2.18 ctanf F -GLIBC_2.18 ctanh F -GLIBC_2.18 ctanhf F -GLIBC_2.18 ctanhl F -GLIBC_2.18 ctanl F -GLIBC_2.18 drem F -GLIBC_2.18 dremf F -GLIBC_2.18 dreml F -GLIBC_2.18 erf F -GLIBC_2.18 erfc F -GLIBC_2.18 erfcf F -GLIBC_2.18 erfcl F -GLIBC_2.18 erff F -GLIBC_2.18 erfl F -GLIBC_2.18 exp F -GLIBC_2.18 exp10 F -GLIBC_2.18 exp10f F -GLIBC_2.18 exp10l F -GLIBC_2.18 exp2 F -GLIBC_2.18 exp2f F -GLIBC_2.18 exp2l F -GLIBC_2.18 expf F -GLIBC_2.18 expl F -GLIBC_2.18 expm1 F -GLIBC_2.18 expm1f F -GLIBC_2.18 expm1l F -GLIBC_2.18 fabs F -GLIBC_2.18 fabsf F -GLIBC_2.18 fabsl F -GLIBC_2.18 fdim F -GLIBC_2.18 fdimf F -GLIBC_2.18 fdiml F -GLIBC_2.18 feclearexcept F -GLIBC_2.18 fedisableexcept F -GLIBC_2.18 feenableexcept F -GLIBC_2.18 fegetenv F -GLIBC_2.18 fegetexcept F -GLIBC_2.18 fegetexceptflag F -GLIBC_2.18 fegetround F -GLIBC_2.18 feholdexcept F -GLIBC_2.18 feraiseexcept F -GLIBC_2.18 fesetenv F -GLIBC_2.18 fesetexceptflag F -GLIBC_2.18 fesetround F -GLIBC_2.18 fetestexcept F -GLIBC_2.18 feupdateenv F -GLIBC_2.18 finite F -GLIBC_2.18 finitef F -GLIBC_2.18 finitel F -GLIBC_2.18 floor F -GLIBC_2.18 floorf F -GLIBC_2.18 floorl F -GLIBC_2.18 fma F -GLIBC_2.18 fmaf F -GLIBC_2.18 fmal F -GLIBC_2.18 fmax F -GLIBC_2.18 fmaxf F -GLIBC_2.18 fmaxl F -GLIBC_2.18 fmin F -GLIBC_2.18 fminf F -GLIBC_2.18 fminl F -GLIBC_2.18 fmod F -GLIBC_2.18 fmodf F -GLIBC_2.18 fmodl F -GLIBC_2.18 frexp F -GLIBC_2.18 frexpf F -GLIBC_2.18 frexpl F -GLIBC_2.18 gamma F -GLIBC_2.18 gammaf F -GLIBC_2.18 gammal F -GLIBC_2.18 hypot F -GLIBC_2.18 hypotf F -GLIBC_2.18 hypotl F -GLIBC_2.18 ilogb F -GLIBC_2.18 ilogbf F -GLIBC_2.18 ilogbl F -GLIBC_2.18 j0 F -GLIBC_2.18 j0f F -GLIBC_2.18 j0l F -GLIBC_2.18 j1 F -GLIBC_2.18 j1f F -GLIBC_2.18 j1l F -GLIBC_2.18 jn F -GLIBC_2.18 jnf F -GLIBC_2.18 jnl F -GLIBC_2.18 ldexp F -GLIBC_2.18 ldexpf F -GLIBC_2.18 ldexpl F -GLIBC_2.18 lgamma F -GLIBC_2.18 lgamma_r F -GLIBC_2.18 lgammaf F -GLIBC_2.18 lgammaf_r F -GLIBC_2.18 lgammal F -GLIBC_2.18 lgammal_r F -GLIBC_2.18 llrint F -GLIBC_2.18 llrintf F -GLIBC_2.18 llrintl F -GLIBC_2.18 llround F -GLIBC_2.18 llroundf F -GLIBC_2.18 llroundl F -GLIBC_2.18 log F -GLIBC_2.18 log10 F -GLIBC_2.18 log10f F -GLIBC_2.18 log10l F -GLIBC_2.18 log1p F -GLIBC_2.18 log1pf F -GLIBC_2.18 log1pl F -GLIBC_2.18 log2 F -GLIBC_2.18 log2f F -GLIBC_2.18 log2l F -GLIBC_2.18 logb F -GLIBC_2.18 logbf F -GLIBC_2.18 logbl F -GLIBC_2.18 logf F -GLIBC_2.18 logl F -GLIBC_2.18 lrint F -GLIBC_2.18 lrintf F -GLIBC_2.18 lrintl F -GLIBC_2.18 lround F -GLIBC_2.18 lroundf F -GLIBC_2.18 lroundl F -GLIBC_2.18 matherr F -GLIBC_2.18 modf F -GLIBC_2.18 modff F -GLIBC_2.18 modfl F -GLIBC_2.18 nan F -GLIBC_2.18 nanf F -GLIBC_2.18 nanl F -GLIBC_2.18 nearbyint F -GLIBC_2.18 nearbyintf F -GLIBC_2.18 nearbyintl F -GLIBC_2.18 nextafter F -GLIBC_2.18 nextafterf F -GLIBC_2.18 nextafterl F -GLIBC_2.18 nexttoward F -GLIBC_2.18 nexttowardf F -GLIBC_2.18 nexttowardl F -GLIBC_2.18 pow F -GLIBC_2.18 pow10 F -GLIBC_2.18 pow10f F -GLIBC_2.18 pow10l F -GLIBC_2.18 powf F -GLIBC_2.18 powl F -GLIBC_2.18 remainder F -GLIBC_2.18 remainderf F -GLIBC_2.18 remainderl F -GLIBC_2.18 remquo F -GLIBC_2.18 remquof F -GLIBC_2.18 remquol F -GLIBC_2.18 rint F -GLIBC_2.18 rintf F -GLIBC_2.18 rintl F -GLIBC_2.18 round F -GLIBC_2.18 roundf F -GLIBC_2.18 roundl F -GLIBC_2.18 scalb F -GLIBC_2.18 scalbf F -GLIBC_2.18 scalbl F -GLIBC_2.18 scalbln F -GLIBC_2.18 scalblnf F -GLIBC_2.18 scalblnl F -GLIBC_2.18 scalbn F -GLIBC_2.18 scalbnf F -GLIBC_2.18 scalbnl F -GLIBC_2.18 signgam D 0x4 -GLIBC_2.18 significand F -GLIBC_2.18 significandf F -GLIBC_2.18 significandl F -GLIBC_2.18 sin F -GLIBC_2.18 sincos F -GLIBC_2.18 sincosf F -GLIBC_2.18 sincosl F -GLIBC_2.18 sinf F -GLIBC_2.18 sinh F -GLIBC_2.18 sinhf F -GLIBC_2.18 sinhl F -GLIBC_2.18 sinl F -GLIBC_2.18 sqrt F -GLIBC_2.18 sqrtf F -GLIBC_2.18 sqrtl F -GLIBC_2.18 tan F -GLIBC_2.18 tanf F -GLIBC_2.18 tanh F -GLIBC_2.18 tanhf F -GLIBC_2.18 tanhl F -GLIBC_2.18 tanl F -GLIBC_2.18 tgamma F -GLIBC_2.18 tgammaf F -GLIBC_2.18 tgammal F -GLIBC_2.18 trunc F -GLIBC_2.18 truncf F -GLIBC_2.18 truncl F -GLIBC_2.18 y0 F -GLIBC_2.18 y0f F -GLIBC_2.18 y0l F -GLIBC_2.18 y1 F -GLIBC_2.18 y1f F -GLIBC_2.18 y1l F -GLIBC_2.18 yn F -GLIBC_2.18 ynf F -GLIBC_2.18 ynl F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F diff --git a/sysdeps/unix/sysv/linux/microblaze/libnsl.abilist b/sysdeps/unix/sysv/linux/microblaze/libnsl.abilist deleted file mode 100644 index 959b74b90e..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/libnsl.abilist +++ /dev/null @@ -1,122 +0,0 @@ -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __free_fdresult F -GLIBC_2.18 __nis_default_access F -GLIBC_2.18 __nis_default_group F -GLIBC_2.18 __nis_default_owner F -GLIBC_2.18 __nis_default_ttl F -GLIBC_2.18 __nis_finddirectory F -GLIBC_2.18 __nis_hash F -GLIBC_2.18 __nisbind_connect F -GLIBC_2.18 __nisbind_create F -GLIBC_2.18 __nisbind_destroy F -GLIBC_2.18 __nisbind_next F -GLIBC_2.18 __yp_check F -GLIBC_2.18 nis_add F -GLIBC_2.18 nis_add_entry F -GLIBC_2.18 nis_addmember F -GLIBC_2.18 nis_checkpoint F -GLIBC_2.18 nis_clone_directory F -GLIBC_2.18 nis_clone_object F -GLIBC_2.18 nis_clone_result F -GLIBC_2.18 nis_creategroup F -GLIBC_2.18 nis_destroy_object F -GLIBC_2.18 nis_destroygroup F -GLIBC_2.18 nis_dir_cmp F -GLIBC_2.18 nis_domain_of F -GLIBC_2.18 nis_domain_of_r F -GLIBC_2.18 nis_first_entry F -GLIBC_2.18 nis_free_directory F -GLIBC_2.18 nis_free_object F -GLIBC_2.18 nis_free_request F -GLIBC_2.18 nis_freenames F -GLIBC_2.18 nis_freeresult F -GLIBC_2.18 nis_freeservlist F -GLIBC_2.18 nis_freetags F -GLIBC_2.18 nis_getnames F -GLIBC_2.18 nis_getservlist F -GLIBC_2.18 nis_ismember F -GLIBC_2.18 nis_leaf_of F -GLIBC_2.18 nis_leaf_of_r F -GLIBC_2.18 nis_lerror F -GLIBC_2.18 nis_list F -GLIBC_2.18 nis_local_directory F -GLIBC_2.18 nis_local_group F -GLIBC_2.18 nis_local_host F -GLIBC_2.18 nis_local_principal F -GLIBC_2.18 nis_lookup F -GLIBC_2.18 nis_mkdir F -GLIBC_2.18 nis_modify F -GLIBC_2.18 nis_modify_entry F -GLIBC_2.18 nis_name_of F -GLIBC_2.18 nis_name_of_r F -GLIBC_2.18 nis_next_entry F -GLIBC_2.18 nis_perror F -GLIBC_2.18 nis_ping F -GLIBC_2.18 nis_print_directory F -GLIBC_2.18 nis_print_entry F -GLIBC_2.18 nis_print_group F -GLIBC_2.18 nis_print_group_entry F -GLIBC_2.18 nis_print_link F -GLIBC_2.18 nis_print_object F -GLIBC_2.18 nis_print_result F -GLIBC_2.18 nis_print_rights F -GLIBC_2.18 nis_print_table F -GLIBC_2.18 nis_read_obj F -GLIBC_2.18 nis_remove F -GLIBC_2.18 nis_remove_entry F -GLIBC_2.18 nis_removemember F -GLIBC_2.18 nis_rmdir F -GLIBC_2.18 nis_servstate F -GLIBC_2.18 nis_sperrno F -GLIBC_2.18 nis_sperror F -GLIBC_2.18 nis_sperror_r F -GLIBC_2.18 nis_stats F -GLIBC_2.18 nis_verifygroup F -GLIBC_2.18 nis_write_obj F -GLIBC_2.18 readColdStartFile F -GLIBC_2.18 writeColdStartFile F -GLIBC_2.18 xdr_cback_data F -GLIBC_2.18 xdr_domainname F -GLIBC_2.18 xdr_keydat F -GLIBC_2.18 xdr_mapname F -GLIBC_2.18 xdr_obj_p F -GLIBC_2.18 xdr_peername F -GLIBC_2.18 xdr_valdat F -GLIBC_2.18 xdr_yp_buf F -GLIBC_2.18 xdr_ypall F -GLIBC_2.18 xdr_ypbind_binding F -GLIBC_2.18 xdr_ypbind_resp F -GLIBC_2.18 xdr_ypbind_resptype F -GLIBC_2.18 xdr_ypbind_setdom F -GLIBC_2.18 xdr_ypdelete_args F -GLIBC_2.18 xdr_ypmap_parms F -GLIBC_2.18 xdr_ypmaplist F -GLIBC_2.18 xdr_yppush_status F -GLIBC_2.18 xdr_yppushresp_xfr F -GLIBC_2.18 xdr_ypreq_key F -GLIBC_2.18 xdr_ypreq_nokey F -GLIBC_2.18 xdr_ypreq_xfr F -GLIBC_2.18 xdr_ypresp_all F -GLIBC_2.18 xdr_ypresp_key_val F -GLIBC_2.18 xdr_ypresp_maplist F -GLIBC_2.18 xdr_ypresp_master F -GLIBC_2.18 xdr_ypresp_order F -GLIBC_2.18 xdr_ypresp_val F -GLIBC_2.18 xdr_ypresp_xfr F -GLIBC_2.18 xdr_ypstat F -GLIBC_2.18 xdr_ypupdate_args F -GLIBC_2.18 xdr_ypxfrstat F -GLIBC_2.18 yp_all F -GLIBC_2.18 yp_bind F -GLIBC_2.18 yp_first F -GLIBC_2.18 yp_get_default_domain F -GLIBC_2.18 yp_maplist F -GLIBC_2.18 yp_master F -GLIBC_2.18 yp_match F -GLIBC_2.18 yp_next F -GLIBC_2.18 yp_order F -GLIBC_2.18 yp_unbind F -GLIBC_2.18 yp_update F -GLIBC_2.18 ypbinderr_string F -GLIBC_2.18 yperr_string F -GLIBC_2.18 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/microblaze/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/libpthread.abilist deleted file mode 100644 index 00d948b60a..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/libpthread.abilist +++ /dev/null @@ -1,225 +0,0 @@ -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 _IO_flockfile F -GLIBC_2.18 _IO_ftrylockfile F -GLIBC_2.18 _IO_funlockfile F -GLIBC_2.18 __close F -GLIBC_2.18 __connect F -GLIBC_2.18 __errno_location F -GLIBC_2.18 __fcntl F -GLIBC_2.18 __fork F -GLIBC_2.18 __h_errno_location F -GLIBC_2.18 __libc_allocate_rtsig F -GLIBC_2.18 __libc_current_sigrtmax F -GLIBC_2.18 __libc_current_sigrtmin F -GLIBC_2.18 __lseek F -GLIBC_2.18 __nanosleep F -GLIBC_2.18 __open F -GLIBC_2.18 __open64 F -GLIBC_2.18 __pread64 F -GLIBC_2.18 __pthread_cleanup_routine F -GLIBC_2.18 __pthread_getspecific F -GLIBC_2.18 __pthread_key_create F -GLIBC_2.18 __pthread_mutex_destroy F -GLIBC_2.18 __pthread_mutex_init F -GLIBC_2.18 __pthread_mutex_lock F -GLIBC_2.18 __pthread_mutex_trylock F -GLIBC_2.18 __pthread_mutex_unlock F -GLIBC_2.18 __pthread_mutexattr_destroy F -GLIBC_2.18 __pthread_mutexattr_init F -GLIBC_2.18 __pthread_mutexattr_settype F -GLIBC_2.18 __pthread_once F -GLIBC_2.18 __pthread_register_cancel F -GLIBC_2.18 __pthread_register_cancel_defer F -GLIBC_2.18 __pthread_rwlock_destroy F -GLIBC_2.18 __pthread_rwlock_init F -GLIBC_2.18 __pthread_rwlock_rdlock F -GLIBC_2.18 __pthread_rwlock_tryrdlock F -GLIBC_2.18 __pthread_rwlock_trywrlock F -GLIBC_2.18 __pthread_rwlock_unlock F -GLIBC_2.18 __pthread_rwlock_wrlock F -GLIBC_2.18 __pthread_setspecific F -GLIBC_2.18 __pthread_unregister_cancel F -GLIBC_2.18 __pthread_unregister_cancel_restore F -GLIBC_2.18 __pthread_unwind_next F -GLIBC_2.18 __pwrite64 F -GLIBC_2.18 __read F -GLIBC_2.18 __res_state F -GLIBC_2.18 __send F -GLIBC_2.18 __sigaction F -GLIBC_2.18 __vfork F -GLIBC_2.18 __wait F -GLIBC_2.18 __write F -GLIBC_2.18 _pthread_cleanup_pop F -GLIBC_2.18 _pthread_cleanup_pop_restore F -GLIBC_2.18 _pthread_cleanup_push F -GLIBC_2.18 _pthread_cleanup_push_defer F -GLIBC_2.18 accept F -GLIBC_2.18 close F -GLIBC_2.18 connect F -GLIBC_2.18 fcntl F -GLIBC_2.18 flockfile F -GLIBC_2.18 fork F -GLIBC_2.18 fsync F -GLIBC_2.18 ftrylockfile F -GLIBC_2.18 funlockfile F -GLIBC_2.18 longjmp F -GLIBC_2.18 lseek F -GLIBC_2.18 lseek64 F -GLIBC_2.18 msync F -GLIBC_2.18 nanosleep F -GLIBC_2.18 open F -GLIBC_2.18 open64 F -GLIBC_2.18 pause F -GLIBC_2.18 pread F -GLIBC_2.18 pread64 F -GLIBC_2.18 pthread_attr_destroy F -GLIBC_2.18 pthread_attr_getaffinity_np F -GLIBC_2.18 pthread_attr_getdetachstate F -GLIBC_2.18 pthread_attr_getguardsize F -GLIBC_2.18 pthread_attr_getinheritsched F -GLIBC_2.18 pthread_attr_getschedparam F -GLIBC_2.18 pthread_attr_getschedpolicy F -GLIBC_2.18 pthread_attr_getscope F -GLIBC_2.18 pthread_attr_getstack F -GLIBC_2.18 pthread_attr_getstackaddr F -GLIBC_2.18 pthread_attr_getstacksize F -GLIBC_2.18 pthread_attr_init F -GLIBC_2.18 pthread_attr_setaffinity_np F -GLIBC_2.18 pthread_attr_setdetachstate F -GLIBC_2.18 pthread_attr_setguardsize F -GLIBC_2.18 pthread_attr_setinheritsched F -GLIBC_2.18 pthread_attr_setschedparam F -GLIBC_2.18 pthread_attr_setschedpolicy F -GLIBC_2.18 pthread_attr_setscope F -GLIBC_2.18 pthread_attr_setstack F -GLIBC_2.18 pthread_attr_setstackaddr F -GLIBC_2.18 pthread_attr_setstacksize F -GLIBC_2.18 pthread_barrier_destroy F -GLIBC_2.18 pthread_barrier_init F -GLIBC_2.18 pthread_barrier_wait F -GLIBC_2.18 pthread_barrierattr_destroy F -GLIBC_2.18 pthread_barrierattr_getpshared F -GLIBC_2.18 pthread_barrierattr_init F -GLIBC_2.18 pthread_barrierattr_setpshared F -GLIBC_2.18 pthread_cancel F -GLIBC_2.18 pthread_cond_broadcast F -GLIBC_2.18 pthread_cond_destroy F -GLIBC_2.18 pthread_cond_init F -GLIBC_2.18 pthread_cond_signal F -GLIBC_2.18 pthread_cond_timedwait F -GLIBC_2.18 pthread_cond_wait F -GLIBC_2.18 pthread_condattr_destroy F -GLIBC_2.18 pthread_condattr_getclock F -GLIBC_2.18 pthread_condattr_getpshared F -GLIBC_2.18 pthread_condattr_init F -GLIBC_2.18 pthread_condattr_setclock F -GLIBC_2.18 pthread_condattr_setpshared F -GLIBC_2.18 pthread_create F -GLIBC_2.18 pthread_detach F -GLIBC_2.18 pthread_equal F -GLIBC_2.18 pthread_exit F -GLIBC_2.18 pthread_getaffinity_np F -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_getattr_np F -GLIBC_2.18 pthread_getconcurrency F -GLIBC_2.18 pthread_getcpuclockid F -GLIBC_2.18 pthread_getname_np F -GLIBC_2.18 pthread_getschedparam F -GLIBC_2.18 pthread_getspecific F -GLIBC_2.18 pthread_join F -GLIBC_2.18 pthread_key_create F -GLIBC_2.18 pthread_key_delete F -GLIBC_2.18 pthread_kill F -GLIBC_2.18 pthread_kill_other_threads_np F -GLIBC_2.18 pthread_mutex_consistent F -GLIBC_2.18 pthread_mutex_consistent_np F -GLIBC_2.18 pthread_mutex_destroy F -GLIBC_2.18 pthread_mutex_getprioceiling F -GLIBC_2.18 pthread_mutex_init F -GLIBC_2.18 pthread_mutex_lock F -GLIBC_2.18 pthread_mutex_setprioceiling F -GLIBC_2.18 pthread_mutex_timedlock F -GLIBC_2.18 pthread_mutex_trylock F -GLIBC_2.18 pthread_mutex_unlock F -GLIBC_2.18 pthread_mutexattr_destroy F -GLIBC_2.18 pthread_mutexattr_getkind_np F -GLIBC_2.18 pthread_mutexattr_getprioceiling F -GLIBC_2.18 pthread_mutexattr_getprotocol F -GLIBC_2.18 pthread_mutexattr_getpshared F -GLIBC_2.18 pthread_mutexattr_getrobust F -GLIBC_2.18 pthread_mutexattr_getrobust_np F -GLIBC_2.18 pthread_mutexattr_gettype F -GLIBC_2.18 pthread_mutexattr_init F -GLIBC_2.18 pthread_mutexattr_setkind_np F -GLIBC_2.18 pthread_mutexattr_setprioceiling F -GLIBC_2.18 pthread_mutexattr_setprotocol F -GLIBC_2.18 pthread_mutexattr_setpshared F -GLIBC_2.18 pthread_mutexattr_setrobust F -GLIBC_2.18 pthread_mutexattr_setrobust_np F -GLIBC_2.18 pthread_mutexattr_settype F -GLIBC_2.18 pthread_once F -GLIBC_2.18 pthread_rwlock_destroy F -GLIBC_2.18 pthread_rwlock_init F -GLIBC_2.18 pthread_rwlock_rdlock F -GLIBC_2.18 pthread_rwlock_timedrdlock F -GLIBC_2.18 pthread_rwlock_timedwrlock F -GLIBC_2.18 pthread_rwlock_tryrdlock F -GLIBC_2.18 pthread_rwlock_trywrlock F -GLIBC_2.18 pthread_rwlock_unlock F -GLIBC_2.18 pthread_rwlock_wrlock F -GLIBC_2.18 pthread_rwlockattr_destroy F -GLIBC_2.18 pthread_rwlockattr_getkind_np F -GLIBC_2.18 pthread_rwlockattr_getpshared F -GLIBC_2.18 pthread_rwlockattr_init F -GLIBC_2.18 pthread_rwlockattr_setkind_np F -GLIBC_2.18 pthread_rwlockattr_setpshared F -GLIBC_2.18 pthread_self F -GLIBC_2.18 pthread_setaffinity_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.18 pthread_setcancelstate F -GLIBC_2.18 pthread_setcanceltype F -GLIBC_2.18 pthread_setconcurrency F -GLIBC_2.18 pthread_setname_np F -GLIBC_2.18 pthread_setschedparam F -GLIBC_2.18 pthread_setschedprio F -GLIBC_2.18 pthread_setspecific F -GLIBC_2.18 pthread_sigmask F -GLIBC_2.18 pthread_sigqueue F -GLIBC_2.18 pthread_spin_destroy F -GLIBC_2.18 pthread_spin_init F -GLIBC_2.18 pthread_spin_lock F -GLIBC_2.18 pthread_spin_trylock F -GLIBC_2.18 pthread_spin_unlock F -GLIBC_2.18 pthread_testcancel F -GLIBC_2.18 pthread_timedjoin_np F -GLIBC_2.18 pthread_tryjoin_np F -GLIBC_2.18 pthread_yield F -GLIBC_2.18 pwrite F -GLIBC_2.18 pwrite64 F -GLIBC_2.18 raise F -GLIBC_2.18 read F -GLIBC_2.18 recv F -GLIBC_2.18 recvfrom F -GLIBC_2.18 recvmsg F -GLIBC_2.18 sem_close F -GLIBC_2.18 sem_destroy F -GLIBC_2.18 sem_getvalue F -GLIBC_2.18 sem_init F -GLIBC_2.18 sem_open F -GLIBC_2.18 sem_post F -GLIBC_2.18 sem_timedwait F -GLIBC_2.18 sem_trywait F -GLIBC_2.18 sem_unlink F -GLIBC_2.18 sem_wait F -GLIBC_2.18 send F -GLIBC_2.18 sendmsg F -GLIBC_2.18 sendto F -GLIBC_2.18 sigaction F -GLIBC_2.18 siglongjmp F -GLIBC_2.18 sigwait F -GLIBC_2.18 system F -GLIBC_2.18 tcdrain F -GLIBC_2.18 vfork F -GLIBC_2.18 wait F -GLIBC_2.18 waitpid F -GLIBC_2.18 write F diff --git a/sysdeps/unix/sysv/linux/microblaze/libresolv.abilist b/sysdeps/unix/sysv/linux/microblaze/libresolv.abilist deleted file mode 100644 index 765bc12438..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/libresolv.abilist +++ /dev/null @@ -1,92 +0,0 @@ -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __b64_ntop F -GLIBC_2.18 __b64_pton F -GLIBC_2.18 __dn_comp F -GLIBC_2.18 __dn_count_labels F -GLIBC_2.18 __dn_expand F -GLIBC_2.18 __dn_skipname F -GLIBC_2.18 __fp_nquery F -GLIBC_2.18 __fp_query F -GLIBC_2.18 __fp_resstat F -GLIBC_2.18 __hostalias F -GLIBC_2.18 __loc_aton F -GLIBC_2.18 __loc_ntoa F -GLIBC_2.18 __p_cdname F -GLIBC_2.18 __p_cdnname F -GLIBC_2.18 __p_class F -GLIBC_2.18 __p_class_syms D 0x54 -GLIBC_2.18 __p_fqname F -GLIBC_2.18 __p_fqnname F -GLIBC_2.18 __p_option F -GLIBC_2.18 __p_query F -GLIBC_2.18 __p_rcode F -GLIBC_2.18 __p_secstodate F -GLIBC_2.18 __p_time F -GLIBC_2.18 __p_type F -GLIBC_2.18 __p_type_syms D 0x228 -GLIBC_2.18 __putlong F -GLIBC_2.18 __putshort F -GLIBC_2.18 __res_close F -GLIBC_2.18 __res_dnok F -GLIBC_2.18 __res_hnok F -GLIBC_2.18 __res_hostalias F -GLIBC_2.18 __res_isourserver F -GLIBC_2.18 __res_mailok F -GLIBC_2.18 __res_mkquery F -GLIBC_2.18 __res_nameinquery F -GLIBC_2.18 __res_nmkquery F -GLIBC_2.18 __res_nquery F -GLIBC_2.18 __res_nquerydomain F -GLIBC_2.18 __res_nsearch F -GLIBC_2.18 __res_nsend F -GLIBC_2.18 __res_ownok F -GLIBC_2.18 __res_queriesmatch F -GLIBC_2.18 __res_query F -GLIBC_2.18 __res_querydomain F -GLIBC_2.18 __res_search F -GLIBC_2.18 __res_send F -GLIBC_2.18 __sym_ntop F -GLIBC_2.18 __sym_ntos F -GLIBC_2.18 __sym_ston F -GLIBC_2.18 _gethtbyaddr F -GLIBC_2.18 _gethtbyname F -GLIBC_2.18 _gethtbyname2 F -GLIBC_2.18 _gethtent F -GLIBC_2.18 _getlong F -GLIBC_2.18 _getshort F -GLIBC_2.18 _res_opcodes D 0x40 -GLIBC_2.18 _sethtent F -GLIBC_2.18 inet_net_ntop F -GLIBC_2.18 inet_net_pton F -GLIBC_2.18 inet_neta F -GLIBC_2.18 ns_datetosecs F -GLIBC_2.18 ns_format_ttl F -GLIBC_2.18 ns_get16 F -GLIBC_2.18 ns_get32 F -GLIBC_2.18 ns_initparse F -GLIBC_2.18 ns_makecanon F -GLIBC_2.18 ns_msg_getflag F -GLIBC_2.18 ns_name_compress F -GLIBC_2.18 ns_name_ntol F -GLIBC_2.18 ns_name_ntop F -GLIBC_2.18 ns_name_pack F -GLIBC_2.18 ns_name_pton F -GLIBC_2.18 ns_name_rollback F -GLIBC_2.18 ns_name_skip F -GLIBC_2.18 ns_name_uncompress F -GLIBC_2.18 ns_name_unpack F -GLIBC_2.18 ns_parse_ttl F -GLIBC_2.18 ns_parserr F -GLIBC_2.18 ns_put16 F -GLIBC_2.18 ns_put32 F -GLIBC_2.18 ns_samedomain F -GLIBC_2.18 ns_samename F -GLIBC_2.18 ns_skiprr F -GLIBC_2.18 ns_sprintrr F -GLIBC_2.18 ns_sprintrrf F -GLIBC_2.18 ns_subdomain F -GLIBC_2.18 res_gethostbyaddr F -GLIBC_2.18 res_gethostbyname F -GLIBC_2.18 res_gethostbyname2 F -GLIBC_2.18 res_send_setqhook F -GLIBC_2.18 res_send_setrhook F diff --git a/sysdeps/unix/sysv/linux/microblaze/librt.abilist b/sysdeps/unix/sysv/linux/microblaze/librt.abilist deleted file mode 100644 index 9f6ecb0770..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/librt.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __mq_open_2 F -GLIBC_2.18 aio_cancel F -GLIBC_2.18 aio_cancel64 F -GLIBC_2.18 aio_error F -GLIBC_2.18 aio_error64 F -GLIBC_2.18 aio_fsync F -GLIBC_2.18 aio_fsync64 F -GLIBC_2.18 aio_init F -GLIBC_2.18 aio_read F -GLIBC_2.18 aio_read64 F -GLIBC_2.18 aio_return F -GLIBC_2.18 aio_return64 F -GLIBC_2.18 aio_suspend F -GLIBC_2.18 aio_suspend64 F -GLIBC_2.18 aio_write F -GLIBC_2.18 aio_write64 F -GLIBC_2.18 clock_getcpuclockid F -GLIBC_2.18 clock_getres F -GLIBC_2.18 clock_gettime F -GLIBC_2.18 clock_nanosleep F -GLIBC_2.18 clock_settime F -GLIBC_2.18 lio_listio F -GLIBC_2.18 lio_listio64 F -GLIBC_2.18 mq_close F -GLIBC_2.18 mq_getattr F -GLIBC_2.18 mq_notify F -GLIBC_2.18 mq_open F -GLIBC_2.18 mq_receive F -GLIBC_2.18 mq_send F -GLIBC_2.18 mq_setattr F -GLIBC_2.18 mq_timedreceive F -GLIBC_2.18 mq_timedsend F -GLIBC_2.18 mq_unlink F -GLIBC_2.18 shm_open F -GLIBC_2.18 shm_unlink F -GLIBC_2.18 timer_create F -GLIBC_2.18 timer_delete F -GLIBC_2.18 timer_getoverrun F -GLIBC_2.18 timer_gettime F -GLIBC_2.18 timer_settime F diff --git a/sysdeps/unix/sysv/linux/microblaze/libthread_db.abilist b/sysdeps/unix/sysv/linux/microblaze/libthread_db.abilist deleted file mode 100644 index 6387ad13a8..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/libthread_db.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 td_init F -GLIBC_2.18 td_log F -GLIBC_2.18 td_symbol_list F -GLIBC_2.18 td_ta_clear_event F -GLIBC_2.18 td_ta_delete F -GLIBC_2.18 td_ta_enable_stats F -GLIBC_2.18 td_ta_event_addr F -GLIBC_2.18 td_ta_event_getmsg F -GLIBC_2.18 td_ta_get_nthreads F -GLIBC_2.18 td_ta_get_ph F -GLIBC_2.18 td_ta_get_stats F -GLIBC_2.18 td_ta_map_id2thr F -GLIBC_2.18 td_ta_map_lwp2thr F -GLIBC_2.18 td_ta_new F -GLIBC_2.18 td_ta_reset_stats F -GLIBC_2.18 td_ta_set_event F -GLIBC_2.18 td_ta_setconcurrency F -GLIBC_2.18 td_ta_thr_iter F -GLIBC_2.18 td_ta_tsd_iter F -GLIBC_2.18 td_thr_clear_event F -GLIBC_2.18 td_thr_dbresume F -GLIBC_2.18 td_thr_dbsuspend F -GLIBC_2.18 td_thr_event_enable F -GLIBC_2.18 td_thr_event_getmsg F -GLIBC_2.18 td_thr_get_info F -GLIBC_2.18 td_thr_getfpregs F -GLIBC_2.18 td_thr_getgregs F -GLIBC_2.18 td_thr_getxregs F -GLIBC_2.18 td_thr_getxregsize F -GLIBC_2.18 td_thr_set_event F -GLIBC_2.18 td_thr_setfpregs F -GLIBC_2.18 td_thr_setgregs F -GLIBC_2.18 td_thr_setprio F -GLIBC_2.18 td_thr_setsigpending F -GLIBC_2.18 td_thr_setxregs F -GLIBC_2.18 td_thr_sigsetmask F -GLIBC_2.18 td_thr_tls_get_addr F -GLIBC_2.18 td_thr_tlsbase F -GLIBC_2.18 td_thr_tsd F -GLIBC_2.18 td_thr_validate F diff --git a/sysdeps/unix/sysv/linux/microblaze/libutil.abilist b/sysdeps/unix/sysv/linux/microblaze/libutil.abilist deleted file mode 100644 index af2c3048cc..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 forkpty F -GLIBC_2.18 login F -GLIBC_2.18 login_tty F -GLIBC_2.18 logout F -GLIBC_2.18 logwtmp F -GLIBC_2.18 openpty F diff --git a/sysdeps/unix/sysv/linux/microblaze/localplt.data b/sysdeps/unix/sysv/linux/microblaze/localplt.data deleted file mode 100644 index ca476bedd8..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/localplt.data +++ /dev/null @@ -1,18 +0,0 @@ -libc.so: __errno_location -libc.so: calloc -libc.so: free -libc.so: malloc -libc.so: memalign -libc.so: realloc -libm.so: matherr -# The dynamic loader needs __tls_get_addr for TLS. -ld.so: __tls_get_addr ? -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/unix/sysv/linux/microblaze/lxstat.c b/sysdeps/unix/sysv/linux/microblaze/lxstat.c deleted file mode 100644 index 0efa0aea49..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/lxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/microblaze/profil-counter.h b/sysdeps/unix/sysv/linux/microblaze/profil-counter.h deleted file mode 100644 index 8a6a0bcf3d..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/profil-counter.h +++ /dev/null @@ -1,2 +0,0 @@ -/* We can use the ix86 version. */ -#include diff --git a/sysdeps/unix/sysv/linux/microblaze/pt-vfork.S b/sysdeps/unix/sysv/linux/microblaze/pt-vfork.S deleted file mode 100644 index f201f0429f..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/pt-vfork.S +++ /dev/null @@ -1,49 +0,0 @@ -/* vfork ABI-compatibility entry points for libpthread. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* libpthread used to have its own vfork implementation that differed - from libc's only in having a pointless micro-optimization. There - is no longer any use to having a separate copy in libpthread, but - the historical ABI requires it. For static linking, there is no - need to provide anything here--the libc version will be linked in. - For shared library ABI compatibility, there must be __vfork and - vfork symbols in libpthread.so. - - As of GCC 7, microblaze can *not* rely on the compiler to generate - a tail call from this vfork to __libc_vfork. */ - -#if (SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_20) \ - || SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_20)) - -ENTRY (vfork_compat) - bri __libc_vfork -END (vfork_compat) - -#endif - -#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_20) -compat_symbol (libpthread, vfork_compat, vfork, GLIBC_2_0) -#endif - -#if SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_20) -strong_alias (vfork_compat, vfork_compat2) -compat_symbol (libpthread, vfork_compat2, __vfork, GLIBC_2_1_2) -#endif diff --git a/sysdeps/unix/sysv/linux/microblaze/shlib-versions b/sysdeps/unix/sysv/linux/microblaze/shlib-versions deleted file mode 100644 index eaf37a118e..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/shlib-versions +++ /dev/null @@ -1 +0,0 @@ -DEFAULT GLIBC_2.18 diff --git a/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h b/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h deleted file mode 100644 index 071ca9475e..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define SIGCONTEXT int _code, struct ucontext * -#define SIGCONTEXT_EXTRA_ARGS _code, -#define GET_PC(ctx) ((void *) (ctx)->uc_mcontext.regs.pc) -#define GET_FRAME(ctx) ((void *) (ctx)->uc_mcontext.regs.sp) -#define GET_STACK(ctx) ((void *) (ctx)->uc_mcontext.regs.sp) -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff --git a/sysdeps/unix/sysv/linux/microblaze/sys/procfs.h b/sysdeps/unix/sysv/linux/microblaze/sys/procfs.h deleted file mode 100644 index dba6adb44a..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/sys/procfs.h +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somewhat modelled after the file of the same name on SVR4 - systems. It provides a definition of the core file format for ELF - used on Linux. It doesn't have anything to do with the /proc file - system, even though Linux has one. - - Anyway, the whole purpose of this file is for GDB and GDB only. - Don't read too much into it. Don't use it for anything other than - GDB unless you know what you are doing. */ - -#include -#include -#include - -__BEGIN_DECLS - -/* Type for a general-purpose register. */ -typedef unsigned long elf_greg_t; - -/* And the whole bunch of them. We could have used `struct - user_regs_struct' directly in the typedef, but tradition says that - the register set is an array, which does have some peculiar - semantics, so leave it that way. */ -#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof (elf_greg_t)) -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -/* Register set for the floating-point registers. */ -typedef struct user_fpregs_struct elf_fpregset_t; - - -/* Signal info. */ -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with Linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - GDB doesn't really use excluded. */ - -struct elf_prstatus - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args. */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned short int pr_uid; - unsigned short int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing. */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -/* The rest of this file provides the types for emulation of the - Solaris interfaces that should be implemented by - users of libthread_db. */ - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore have only one PID type. */ -typedef __pid_t lwpid_t; - -/* Process status and info. In the end we do provide typedefs for them. */ -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h. */ diff --git a/sysdeps/unix/sysv/linux/microblaze/sys/user.h b/sysdeps/unix/sysv/linux/microblaze/sys/user.h deleted file mode 100644 index 94faf45191..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/sys/user.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_USER_H -# define _SYS_USER_H 1 - -/* The whole purpose of this file is for GDB and GDB only. Don't read - too much into it. Don't use it for anything other than GDB unless - you know what you are doing. */ - -struct user_fpregs_struct -{ - long int cwd; - long int swd; - long int twd; - long int fip; - long int fcs; - long int foo; - long int fos; - long int st_space [20]; -}; - -struct user_regs_struct -{ - unsigned int gpr[32]; - unsigned int pc; - unsigned int msr; - unsigned int ear; - unsigned int esr; - unsigned int fsr; - unsigned int btr; - unsigned int pvr[12]; -}; - -struct user -{ - struct user_regs_struct regs; - int u_fpvalid; - struct user_fpregs_struct elf_fpregset_t; - unsigned long int u_tsize; - unsigned long int u_dsize; - unsigned long int u_ssize; - unsigned long start_code; - unsigned long start_stack; - long int signal; - int reserved; - struct user_regs_struct* u_ar0; - struct user_fpregs_struct* u_fpstate; - unsigned long int magic; - char u_comm [32]; - int u_debugreg [8]; -}; - -#endif /* _SYS_USER_H */ diff --git a/sysdeps/unix/sysv/linux/microblaze/syscall.S b/sysdeps/unix/sysv/linux/microblaze/syscall.S deleted file mode 100644 index ca7b366cc2..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/syscall.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - - .text -ENTRY (syscall) - addk r12,r0,r5 - addk r5,r0,r6 - addk r6,r0,r7 - addk r7,r0,r8 - addk r8,r0,r9 - addk r9,r0,r10 - lwi r10,r1,28 - brki r14,8 - addk r0,r0,r0 - addik r4,r0,-4095 - cmpu r4,r4,r3 - bgei r4,SYSCALL_ERROR_LABEL - rtsd r15,8 - nop -PSEUDO_END (syscall) diff --git a/sysdeps/unix/sysv/linux/microblaze/syscalls.list b/sysdeps/unix/sysv/linux/microblaze/syscalls.list deleted file mode 100644 index 932c9cccc8..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/syscalls.list +++ /dev/null @@ -1,7 +0,0 @@ -# File name Caller Syscall name Args Strong name Weak names - -cacheflush EXTRA cacheflush i:iiii __cacheflush cacheflush - -prlimit64 EXTRA prlimit64 i:iipp prlimit64 -fanotify_mark EXTRA fanotify_mark i:iiiiis fanotify_mark -personality EXTRA personality Ei:i __personality personality diff --git a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h deleted file mode 100644 index dbcc2b2832..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h +++ /dev/null @@ -1,158 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# if !IS_IN (librt) || !defined(PIC) -# define AC_STACK_SIZE 16 /* space for r15, async_cancel arg and 2 temp words */ -# define AC_SET_GOT /* empty */ -# define AC_RESTORE_GOT /* empty */ -# else -# define AC_STACK_SIZE 20 /* extra 4 bytes for r20 */ -# define AC_SET_GOT \ - swi r20, r1, AC_STACK_SIZE-4; \ - mfs r20, rpc; \ - addik r20, r20, _GLOBAL_OFFSET_TABLE_+8; -# define AC_RESTORE_GOT \ - lwi r20, r1, AC_STACK_SIZE-4; -# endif - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - SINGLE_THREAD_P(r12); \ - bnei r12, L(pseudo_cancel); \ - .globl __##syscall_name##_nocancel; \ - .type __##syscall_name##_nocancel,@function; \ -__##syscall_name##_nocancel: \ - DO_CALL (syscall_name, args); \ - addik r4, r0, -4095; \ - cmpu r4, r4, r3; \ - bgei r4, SYSCALL_ERROR_LABEL; \ - rtsd r15, 8; \ - nop; \ - .size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel; \ -L(pseudo_cancel): \ - addik r1, r1, -AC_STACK_SIZE; \ - swi r15, r1, 0; \ - AC_SET_GOT \ - DOCARGS_##args \ - CENABLE; \ - swi r3, r1, 8; \ - UNDOCARGS_##args \ - DO_CALL (syscall_name, args); \ - swi r3, r1, 12; \ - lwi r5, r1, 8; \ - CDISABLE; \ - lwi r3, r1, 12; \ - lwi r15, r1, 0; \ - AC_RESTORE_GOT \ - addik r1, r1, AC_STACK_SIZE; \ - addik r4, r0, -4095; \ - cmpu r4, r4, r3; \ - bgei r4, SYSCALL_ERROR_LABEL; \ - rtsd r15, 8; \ - nop; - -/* - * Macros to save/restore syscall arguments across CENABLE - * The arguments are saved into the caller's stack (original r1 + 4) - */ - -# define DOCARGS_0 -# define DOCARGS_1 swi r5, r1, AC_STACK_SIZE + 4; -# define DOCARGS_2 swi r6, r1, AC_STACK_SIZE + 8; DOCARGS_1 -# define DOCARGS_3 swi r7, r1, AC_STACK_SIZE + 12; DOCARGS_2 -# define DOCARGS_4 swi r8, r1, AC_STACK_SIZE + 16; DOCARGS_3 -# define DOCARGS_5 swi r9, r1, AC_STACK_SIZE + 20; DOCARGS_4 -# define DOCARGS_6 swi r10, r1, AC_STACK_SIZE + 24; DOCARGS_5 - -# define UNDOCARGS_0 -# define UNDOCARGS_1 lwi r5, r1, AC_STACK_SIZE + 4; -# define UNDOCARGS_2 UNDOCARGS_1 lwi r6, r1, AC_STACK_SIZE + 8; -# define UNDOCARGS_3 UNDOCARGS_2 lwi r7, r1, AC_STACK_SIZE + 12; -# define UNDOCARGS_4 UNDOCARGS_3 lwi r8, r1, AC_STACK_SIZE + 16; -# define UNDOCARGS_5 UNDOCARGS_4 lwi r9, r1, AC_STACK_SIZE + 20; -# define UNDOCARGS_6 UNDOCARGS_5 lwi r10, r1, AC_STACK_SIZE + 24; - -# ifdef PIC -# define PSEUDO_JMP(sym) brlid r15, sym##@PLTPC; addk r0, r0, r0 -# else -# define PSEUDO_JMP(sym) brlid r15, sym; addk r0, r0, r0 -# endif - -# if IS_IN (libpthread) -# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel) -# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel) -# define __local_multiple_threads __pthread_multiple_threads -# elif IS_IN (libc) -# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel) -# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel) -# define __local_multiple_threads __libc_multiple_threads -# elif IS_IN (librt) -# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel) -# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel) -# else -# error Unsupported library -# endif - - -# if IS_IN (libpthread) || IS_IN (libc) -# ifndef __ASSEMBLER__ -extern int __local_multiple_threads attribute_hidden; -# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1) -# else -# if !defined PIC -# define SINGLE_THREAD_P(reg) lwi reg, r0, __local_multiple_threads; -# else -# define SINGLE_THREAD_P(reg) \ - mfs reg, rpc; \ - addik reg, reg, _GLOBAL_OFFSET_TABLE_+8; \ - lwi reg, reg, __local_multiple_threads@GOT; \ - lwi reg, reg, 0; -# endif -# endif -# else -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P(reg) \ - lwi reg, r0, MULTIPLE_THREADS_OFFSET(reg) -# endif -# endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION (1) - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/microblaze/sysdep.S b/sysdeps/unix/sysv/linux/microblaze/sysdep.S deleted file mode 100644 index 251f493b5d..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/sysdep.S +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - -/* The following code is only used in the shared library when we - compile the reentrant version. Otherwise each system call defines - each own version. */ - -#ifndef PIC - -/* The syscall stubs jump here when they detect an error. */ - -# undef CALL_MCOUNT -# define CALL_MCOUNT /* Don't insert the profiling call, it clobbers %d0. */ - - .text -ENTRY (__syscall_error) - rsubk r3,r3,r0 - rtsd r15,8 - addik r3,r0,-1 /* delay slot. */ -END (__syscall_error) -#endif /* PIC. */ diff --git a/sysdeps/unix/sysv/linux/microblaze/sysdep.h b/sysdeps/unix/sysv/linux/microblaze/sysdep.h deleted file mode 100644 index 1fbbc55de1..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/sysdep.h +++ /dev/null @@ -1,313 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_MICROBLAZE_SYSDEP_H -#define _LINUX_MICROBLAZE_SYSDEP_H 1 - -#include -#include -#include - -/* Defines RTLD_PRIVATE_ERRNO. */ -#include - -/* In order to get __set_errno() definition in INLINE_SYSCALL. */ -#ifndef __ASSEMBLER__ -# include -#endif - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -#ifdef __ASSEMBLER__ - -/* In microblaze ABI function call arguments are passed in registers - r5...r10. The return value is stored in r3 (or r3:r4 regiters pair). - Linux syscall uses the same convention with the addition that the - syscall number is passed in r12. To enter the kernel "brki r14,8" - instruction is used. - None of the abovementioned registers are presumed across function call - or syscall. -*/ -/* Linux uses a negative return value to indicate syscall errors, unlike - most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be negative - even if the call succeeded. E.g., the `lseek' system call might return - a large offset. Therefore we must not anymore test for < 0, but test - for a real error by making sure the value in %d0 is a real error - number. Linus said he will make sure the no syscall returns a value - in -1 .. -4095 as a valid result so we can savely test with -4095. */ - -/* We don't want the label for the error handler to be visible in the symbol - table when we define it here. */ -# ifdef PIC -# define SYSCALL_ERROR_LABEL 0f -# else -# define SYSCALL_ERROR_LABEL __syscall_error -# endif - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - addik r12,r0,-4095; \ - cmpu r12,r12,r3; \ - bgei r12,SYSCALL_ERROR_LABEL; - -# undef PSEUDO_END -# define PSEUDO_END(name) \ - SYSCALL_ERROR_HANDLER; \ - END (name) - -# undef PSEUDO_NOERRNO -# define PSEUDO_NOERRNO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); - -# undef PSEUDO_END_NOERRNO -# define PSEUDO_END_NOERRNO(name) \ - END (name) - -/* The function has to return the error code. */ -# undef PSEUDO_ERRVAL -# define PSEUDO_ERRVAL(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - -# undef PSEUDO_END_ERRVAL -# define PSEUDO_END_ERRVAL(name) \ - END (name) - -# define ret_NOERRNO \ - rtsd r15,8; addk r0,r0,r0; - -# define ret_ERRVAL \ - rtsd r15,8; rsubk r3,r3,r0; - -# ifdef PIC -# define SYSCALL_ERROR_LABEL_DCL 0 -# if RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_HANDLER \ -SYSCALL_ERROR_LABEL_DCL: \ - mfs r12,rpc; \ - addik r12,r12,_GLOBAL_OFFSET_TABLE_+8; \ - lwi r12,r12,rtld_errno@GOT; \ - rsubk r3,r3,r0; \ - swi r3,r12,0; \ - rtsd r15,8; \ - addik r3,r0,-1; -# else /* !RTLD_PRIVATE_ERRNO. */ -/* Store (-r3) into errno through the GOT. */ -# if defined _LIBC_REENTRANT -# define SYSCALL_ERROR_HANDLER \ -SYSCALL_ERROR_LABEL_DCL: \ - addik r1,r1,-16; \ - swi r15,r1,0; \ - swi r20,r1,8; \ - rsubk r3,r3,r0; \ - swi r3,r1,12; \ - mfs r20,rpc; \ - addik r20,r20,_GLOBAL_OFFSET_TABLE_+8; \ - brlid r15,__errno_location@PLT; \ - nop; \ - lwi r4,r1,12; \ - swi r4,r3,0; \ - lwi r20,r1,8; \ - lwi r15,r1,0; \ - addik r1,r1,16; \ - rtsd r15,8; \ - addik r3,r0,-1; -# else /* !_LIBC_REENTRANT. */ -# define SYSCALL_ERROR_HANDLER \ -SYSCALL_ERROR_LABEL_DCL: \ - mfs r12,rpc; \ - addik r12,r12,_GLOBAL_OFFSET_TABLE_+8; \ - lwi r12,r12,errno@GOT; \ - rsubk r3,r3,r0; \ - swi r3,r12,0; \ - rtsd r15,8; \ - addik r3,r0,-1; -# endif /* _LIBC_REENTRANT. */ -# endif /* RTLD_PRIVATE_ERRNO. */ -# else -# define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ -# endif /* PIC. */ - -# define DO_CALL(syscall_name, args) \ - addik r12,r0,SYS_ify (syscall_name); \ - brki r14,8; \ - addk r0,r0,r0; - -#else /* not __ASSEMBLER__ */ - -/* Define a macro which expands into the inline wrapper code for a system - call. */ -# undef INLINE_SYSCALL -# define INLINE_SYSCALL(name, nr, args...) \ -({ INTERNAL_SYSCALL_DECL(err); \ - unsigned long resultvar = INTERNAL_SYSCALL(name, err, nr, args); \ - if (INTERNAL_SYSCALL_ERROR_P (resultvar, err)) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, err)); \ - resultvar = (unsigned long) -1; \ - } \ - (long) resultvar; \ -}) - -# undef INTERNAL_SYSCALL_DECL -# define INTERNAL_SYSCALL_DECL(err) do { } while (0) - -/* Define a macro which expands inline into the wrapper code for a system - call. This use is for internal calls that do not need to handle errors - normally. It will never touch errno. This returns just what the kernel - gave back. */ -# undef INTERNAL_SYSCALL -# define INTERNAL_SYSCALL(name, err, nr, args...) \ - inline_syscall##nr(SYS_ify(name), args) - -# undef INTERNAL_SYSCALL_NCS -# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - inline_syscall##nr(name, args) - -# undef INTERNAL_SYSCALL_ERROR_P -# define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((unsigned int) (val) >= -4095U) - -# undef INTERNAL_SYSCALL_ERRNO -# define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) - -# define SYSCALL_CLOBBERS_6 "r11", "r4", "memory" -# define SYSCALL_CLOBBERS_5 "r10", SYSCALL_CLOBBERS_6 -# define SYSCALL_CLOBBERS_4 "r9", SYSCALL_CLOBBERS_5 -# define SYSCALL_CLOBBERS_3 "r8", SYSCALL_CLOBBERS_4 -# define SYSCALL_CLOBBERS_2 "r7", SYSCALL_CLOBBERS_3 -# define SYSCALL_CLOBBERS_1 "r6", SYSCALL_CLOBBERS_2 -# define SYSCALL_CLOBBERS_0 "r5", SYSCALL_CLOBBERS_1 - -# define inline_syscall0(name,dummy) \ - ({ \ - register long __ret __asm__("r3"); \ - register long __r12 __asm__("r12") = name; \ - __asm__ __volatile__( "brki r14,8; nop;" \ - : "=r"(__ret) \ - : "r"(__r12) \ - : SYSCALL_CLOBBERS_0 ); __ret; \ - }) - -# define inline_syscall1(name,arg1) \ - ({ \ - register long __ret __asm__("r3"); \ - register long __r12 __asm__("r12") = name; \ - register long __r5 __asm__("r5") = (long)(arg1); \ - __asm__ __volatile__( "brki r14,8; nop;" \ - : "=r"(__ret) \ - : "r"(__r5), "r"(__r12) \ - : SYSCALL_CLOBBERS_1 ); __ret; \ - }) - -# define inline_syscall2(name,arg1,arg2) \ - ({ \ - register long __ret __asm__("r3"); \ - register long __r12 __asm__("r12") = name; \ - register long __r5 __asm__("r5") = (long)(arg1); \ - register long __r6 __asm__("r6") = (long)(arg2); \ - __asm__ __volatile__( "brki r14,8; nop;" \ - : "=r"(__ret) \ - : "r"(__r5), "r"(__r6), "r"(__r12) \ - : SYSCALL_CLOBBERS_2 ); __ret; \ - }) - - -# define inline_syscall3(name,arg1,arg2,arg3) \ - ({ \ - register long __ret __asm__("r3"); \ - register long __r12 __asm__("r12") = name; \ - register long __r5 __asm__("r5") = (long)(arg1); \ - register long __r6 __asm__("r6") = (long)(arg2); \ - register long __r7 __asm__("r7") = (long)(arg3); \ - __asm__ __volatile__( "brki r14,8; nop;" \ - : "=r"(__ret) \ - : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r12) \ - : SYSCALL_CLOBBERS_3 ); __ret; \ - }) - - -# define inline_syscall4(name,arg1,arg2,arg3,arg4) \ - ({ \ - register long __ret __asm__("r3"); \ - register long __r12 __asm__("r12") = name; \ - register long __r5 __asm__("r5") = (long)(arg1); \ - register long __r6 __asm__("r6") = (long)(arg2); \ - register long __r7 __asm__("r7") = (long)(arg3); \ - register long __r8 __asm__("r8") = (long)(arg4); \ - __asm__ __volatile__( "brki r14,8; nop;" \ - : "=r"(__ret) \ - : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r8),"r"(__r12) \ - : SYSCALL_CLOBBERS_4 ); __ret; \ - }) - - -# define inline_syscall5(name,arg1,arg2,arg3,arg4,arg5) \ - ({ \ - register long __ret __asm__("r3"); \ - register long __r12 __asm__("r12") = name; \ - register long __r5 __asm__("r5") = (long)(arg1); \ - register long __r6 __asm__("r6") = (long)(arg2); \ - register long __r7 __asm__("r7") = (long)(arg3); \ - register long __r8 __asm__("r8") = (long)(arg4); \ - register long __r9 __asm__("r9") = (long)(arg5); \ - __asm__ __volatile__( "brki r14,8; nop;" \ - : "=r"(__ret) \ - : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r8),"r"(__r9), "r"(__r12) \ - : SYSCALL_CLOBBERS_5 ); __ret; \ - }) - - -# define inline_syscall6(name,arg1,arg2,arg3,arg4,arg5,arg6) \ - ({ \ - register long __ret __asm__("r3"); \ - register long __r12 __asm__("r12") = name; \ - register long __r5 __asm__("r5") = (long)(arg1); \ - register long __r6 __asm__("r6") = (long)(arg2); \ - register long __r7 __asm__("r7") = (long)(arg3); \ - register long __r8 __asm__("r8") = (long)(arg4); \ - register long __r9 __asm__("r9") = (long)(arg5); \ - register long __r10 __asm__("r10") = (long)(arg6); \ - __asm__ __volatile__( "brki r14,8; nop;" \ - : "=r"(__ret) \ - : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r8),"r"(__r9), "r"(__r10), \ - "r"(__r12) \ - : SYSCALL_CLOBBERS_6 ); __ret; \ - }) - - -/* Pointer mangling is not yet supported for Microblaze. */ -# define PTR_MANGLE(var) (void) (var) -# define PTR_DEMANGLE(var) (void) (var) - -#endif /* not __ASSEMBLER__ */ - -#endif /* _LINUX_MICROBLAZE_SYSDEP_H */ diff --git a/sysdeps/unix/sysv/linux/microblaze/vfork.S b/sysdeps/unix/sysv/linux/microblaze/vfork.S deleted file mode 100644 index f1e4508d20..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/vfork.S +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include -#include - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__vfork) - -#ifdef __NR_vfork - DO_CALL (vfork, 0) -#else - DO_CALL (fork, 0) -#endif - addik r12,r0,-4095 - cmpu r12,r12,r3 - bgei r12,SYSCALL_ERROR_LABEL - rtsd r15,8 - nop - -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) - -weak_alias (__vfork, vfork) -strong_alias (__vfork, __libc_vfork) diff --git a/sysdeps/unix/sysv/linux/microblaze/xstat.c b/sysdeps/unix/sysv/linux/microblaze/xstat.c deleted file mode 100644 index e9869f5508..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/xstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/Implies b/sysdeps/unix/sysv/linux/mips/Implies deleted file mode 100644 index 656fa77b63..0000000000 --- a/sysdeps/unix/sysv/linux/mips/Implies +++ /dev/null @@ -1 +0,0 @@ -mips/nptl diff --git a/sysdeps/unix/sysv/linux/mips/Makefile b/sysdeps/unix/sysv/linux/mips/Makefile deleted file mode 100644 index bca11d39e0..0000000000 --- a/sysdeps/unix/sysv/linux/mips/Makefile +++ /dev/null @@ -1,112 +0,0 @@ -ifeq ($(subdir),signal) -#sysdep_routines += sigsuspend -endif - -ifeq ($(subdir),misc) -sysdep_routines += cachectl cacheflush sysmips _test_and_set - -sysdep_headers += sys/cachectl.h sys/sysmips.h sys/tas.h -endif - -abi-variants := o32_soft o32_hard o32_soft_2008 o32_hard_2008 -abi-variants += n32_soft n32_hard n32_soft_2008 n32_hard_2008 -abi-variants += n64_soft n64_hard n64_soft_2008 n64_hard_2008 - -ifeq (,$(filter $(default-abi),$(abi-variants))) -Unknown ABI, must be one of $(abi-variants) -endif - -abi-includes := sgidefs.h - -# _MIPS_SIM_ABI32 == 1, _MIPS_SIM_NABI32 == 2, _MIPS_SIM_ABI64 == 3 -abi-o32_soft-options := -U_MIPS_SIM -D_MIPS_SIM=1 \ - -D__mips_soft_float -U__mips_hard_float \ - -U__mips_nan2008 -abi-o32_soft-condition := !defined(__mips_nan2008) \ - && defined(__mips_soft_float) \ - && (_MIPS_SIM == _MIPS_SIM_ABI32) -abi-o32_hard-options := -U_MIPS_SIM -D_MIPS_SIM=1 \ - -D__mips_hard_float -U__mips_soft_float \ - -U__mips_nan2008 -abi-o32_hard-condition := !defined(__mips_nan2008) \ - && defined(__mips_hard_float) \ - && (_MIPS_SIM == _MIPS_SIM_ABI32) -abi-o32_soft_2008-options := -U_MIPS_SIM -D_MIPS_SIM=1 \ - -D__mips_soft_float -U__mips_hard_float \ - -D__mips_nan2008 -abi-o32_soft_2008-condition := defined(__mips_nan2008) \ - && defined(__mips_soft_float) \ - && (_MIPS_SIM == _MIPS_SIM_ABI32) -abi-o32_hard_2008-options := -U_MIPS_SIM -D_MIPS_SIM=1 \ - -D__mips_hard_float -U__mips_soft_float \ - -D__mips_nan2008 -abi-o32_hard_2008-condition := defined(__mips_nan2008) \ - && defined(__mips_hard_float) \ - && (_MIPS_SIM == _MIPS_SIM_ABI32) -abi-n32_soft-options := -U_MIPS_SIM -D_MIPS_SIM=2 \ - -D__mips_soft_float -U__mips_hard_float \ - -U__mips_nan2008 -abi-n32_soft-condition := !defined(__mips_nan2008) \ - && defined(__mips_soft_float) \ - && (_MIPS_SIM == _MIPS_SIM_NABI32) -abi-n32_hard-options := -U_MIPS_SIM -D_MIPS_SIM=2 \ - -D__mips_hard_float -U__mips_soft_float \ - -U__mips_nan2008 -abi-n32_hard-condition := !defined(__mips_nan2008) \ - && defined(__mips_hard_float) \ - && (_MIPS_SIM == _MIPS_SIM_NABI32) -abi-n32_soft_2008-options := -U_MIPS_SIM -D_MIPS_SIM=2 \ - -D__mips_soft_float -U__mips_hard_float \ - -D__mips_nan2008 -abi-n32_soft_2008-condition := defined(__mips_nan2008) \ - && defined(__mips_soft_float) \ - && (_MIPS_SIM == _MIPS_SIM_NABI32) -abi-n32_hard_2008-options := -U_MIPS_SIM -D_MIPS_SIM=2 \ - -D__mips_hard_float -U__mips_soft_float \ - -D__mips_nan2008 -abi-n32_hard_2008-condition := defined(__mips_nan2008) \ - && defined(__mips_hard_float) \ - && (_MIPS_SIM == _MIPS_SIM_NABI32) -abi-n64_soft-options := -U_MIPS_SIM -D_MIPS_SIM=3 \ - -D__mips_soft_float -U__mips_hard_float \ - -U__mips_nan2008 -abi-n64_soft-condition := !defined(__mips_nan2008) \ - && defined(__mips_soft_float) \ - && (_MIPS_SIM == _MIPS_SIM_ABI64) -abi-n64_hard-options := -U_MIPS_SIM -D_MIPS_SIM=3 \ - -D__mips_hard_float -U__mips_soft_float \ - -U__mips_nan2008 -abi-n64_hard-condition := !defined(__mips_nan2008) \ - && defined(__mips_hard_float) \ - && (_MIPS_SIM == _MIPS_SIM_ABI64) -abi-n64_soft_2008-options := -U_MIPS_SIM -D_MIPS_SIM=3 \ - -D__mips_soft_float -U__mips_hard_float \ - -D__mips_nan2008 -abi-n64_soft_2008-condition := defined(__mips_nan2008) \ - && defined(__mips_soft_float) \ - && (_MIPS_SIM == _MIPS_SIM_ABI64) -abi-n64_hard_2008-options := -U_MIPS_SIM -D_MIPS_SIM=3 \ - -D__mips_hard_float -U__mips_soft_float \ - -D__mips_nan2008 -abi-n64_hard_2008-condition := defined(__mips_nan2008) \ - && defined(__mips_hard_float) \ - && (_MIPS_SIM == _MIPS_SIM_ABI64) - -ifeq ($(subdir),elf) -ifeq ($(build-shared),yes) -# This is needed for DSO loading from static binaries. -sysdep-dl-routines += dl-static - -sysdep_routines += dl-vdso -endif - -# Supporting non-executable stacks on MIPS requires changes to both -# the Linux kernel and glibc. See -# and -# . -test-xfail-check-execstack = yes -endif - -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext_i.sym -endif diff --git a/sysdeps/unix/sysv/linux/mips/Versions b/sysdeps/unix/sysv/linux/mips/Versions deleted file mode 100644 index 453f276aad..0000000000 --- a/sysdeps/unix/sysv/linux/mips/Versions +++ /dev/null @@ -1,44 +0,0 @@ -ld { - GLIBC_PRIVATE { - # used for loading by static libraries - _dl_var_init; - } -} -libc { - # The comment lines with "#errlist-compat" are magic; see errlist-compat.awk. - # When you get an error from errlist-compat.awk, you need to add a new - # version here. Don't do this blindly, since this means changing the ABI - # for all GNU/Linux configurations. - - GLIBC_2.0 { - #errlist-compat 123 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - - # Exception handling support functions from libgcc - __register_frame; __register_frame_table; __deregister_frame; - __frame_state_for; __register_frame_info_table; - - # Needed by gcc: - _flush_cache; - - # c* - cachectl; cacheflush; - - # s* - sysmips; - } - GLIBC_2.2 { - #errlist-compat 1134 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - - # _* - _test_and_set; - } - GLIBC_2.11 { - fallocate64; - } - GLIBC_PRIVATE { - # nptl/pthread_cond_timedwait.c uses INTERNAL_VSYSCALL(clock_gettime). - __vdso_clock_gettime; - } -} diff --git a/sysdeps/unix/sysv/linux/mips/____longjmp_chk.c b/sysdeps/unix/sysv/linux/mips/____longjmp_chk.c deleted file mode 100644 index 596b2af336..0000000000 --- a/sysdeps/unix/sysv/linux/mips/____longjmp_chk.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#define __longjmp ____longjmp_chk -#define CHECK_SP(saved_sp, cur_sp, sp_type) \ - do { \ - sp_type sp_saved = (sp_type) (saved_sp); \ - if (sp_saved < (cur_sp)) \ - { \ - struct __jmp_buf_internal_tag *env_save = env_arg; \ - int val_save = val_arg; \ - stack_t ss; \ - int ret = __sigaltstack (NULL, &ss); \ - if (ret == 0 \ - && (!(ss.ss_flags & SS_ONSTACK) \ - || ((unsigned sp_type) ((sp_type) (long) ss.ss_sp \ - + (sp_type) ss.ss_size \ - - sp_saved) \ - < ss.ss_size))) \ - __fortify_fail ("longjmp causes uninitialized stack frame"); \ - asm volatile ("move %0, %1" : "=r" (env) : "r" (env_save)); \ - asm volatile ("move %0, %1" : "=r" (val) : "r" (val_save)); \ - } \ - } while (0) -#include <__longjmp.c> diff --git a/sysdeps/unix/sysv/linux/mips/_test_and_set.c b/sysdeps/unix/sysv/linux/mips/_test_and_set.c deleted file mode 100644 index 42b6a983a2..0000000000 --- a/sysdeps/unix/sysv/linux/mips/_test_and_set.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maciej W. Rozycki , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Define the real-function versions of all inline functions - defined in sys/tas.h */ - -#include - -#define _EXTERN_INLINE -#ifndef __USE_EXTERN_INLINES -# define __USE_EXTERN_INLINES 1 -#endif - -#include "sys/tas.h" diff --git a/sysdeps/unix/sysv/linux/mips/arch-fork.h b/sysdeps/unix/sysv/linux/mips/arch-fork.h deleted file mode 100644 index 5f945378ee..0000000000 --- a/sysdeps/unix/sysv/linux/mips/arch-fork.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/bits/epoll.h b/sysdeps/unix/sysv/linux/mips/bits/epoll.h deleted file mode 100644 index 904e9c3e1a..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/epoll.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_EPOLL_H -# error "Never use directly; include instead." -#endif - -/* Flags to be passed to epoll_create1. */ -enum - { - EPOLL_CLOEXEC = 02000000 -#define EPOLL_CLOEXEC EPOLL_CLOEXEC - }; diff --git a/sysdeps/unix/sysv/linux/mips/bits/errno.h b/sysdeps/unix/sysv/linux/mips/bits/errno.h deleted file mode 100644 index fa62e1fc83..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/errno.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Error constants. MIPS/Linux specific version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifdef _ERRNO_H - -# undef EDOM -# undef EILSEQ -# undef ERANGE -# include - -/* Linux has no ENOTSUP error code. */ -# define ENOTSUP EOPNOTSUPP - -# ifndef ECANCELED -# define ECANCELED 158 -# endif - -/* Support for error codes to support robust mutexes was added later, too. */ -# ifndef EOWNERDEAD -# define EOWNERDEAD 165 -# define ENOTRECOVERABLE 166 -# endif - -# ifndef ERFKILL -# define ERFKILL 167 -# endif - -# ifndef EHWPOISON -# define EHWPOISON 168 -# endif - -# ifndef __ASSEMBLER__ -/* Function to get address of global `errno' variable. */ -extern int *__errno_location (void) __THROW __attribute__ ((__const__)); - -# if !defined _LIBC || defined _LIBC_REENTRANT -/* When using threads, errno is a per-thread value. */ -# define errno (*__errno_location ()) -# endif -# endif /* !__ASSEMBLER__ */ -#endif /* _ERRNO_H */ - -#if !defined _ERRNO_H && defined __need_Emath -/* This is ugly but the kernel header is not clean enough. We must - define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is - defined. */ -# define EDOM 33 /* Math argument out of domain of function. */ -# define EILSEQ 88 /* Illegal byte sequence. */ -# define ERANGE 34 /* Math result not representable. */ -#endif /* !_ERRNO_H && __need_Emath */ diff --git a/sysdeps/unix/sysv/linux/mips/bits/eventfd.h b/sysdeps/unix/sysv/linux/mips/bits/eventfd.h deleted file mode 100644 index 901cec7509..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/eventfd.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_EVENTFD_H -# error "Never use directly; include instead." -#endif - -/* Flags for eventfd. */ -enum - { - EFD_SEMAPHORE = 00000001, -#define EFD_SEMAPHORE EFD_SEMAPHORE - EFD_CLOEXEC = 02000000, -#define EFD_CLOEXEC EFD_CLOEXEC - EFD_NONBLOCK = 00000200 -#define EFD_NONBLOCK EFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/mips/bits/fcntl.h b/sysdeps/unix/sysv/linux/mips/bits/fcntl.h deleted file mode 100644 index 0e0c8cc0c1..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/fcntl.h +++ /dev/null @@ -1,104 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -#include - -#define O_APPEND 0x0008 -#define O_SYNC 0x4010 -#define O_NONBLOCK 0x0080 -#define O_CREAT 0x0100 /* not fcntl */ -#define O_TRUNC 0x0200 /* not fcntl */ -#define O_EXCL 0x0400 /* not fcntl */ -#define O_NOCTTY 0x0800 /* not fcntl */ -#define O_ASYNC 0x1000 - -#define __O_DIRECT 0x8000 /* Direct disk access hint. */ -#define __O_DSYNC 0x0010 /* Synchronize data. */ - -#if _MIPS_SIM == _ABI64 -/* Not necessary, files are always with 64bit off_t. */ -# define __O_LARGEFILE 0 -#else -# define __O_LARGEFILE 0x2000 /* Allow large file opens. */ -#endif - -#ifndef __USE_FILE_OFFSET64 -# define F_GETLK 14 /* Get record locking info. */ -# define F_SETLK 6 /* Set record locking info (non-blocking). */ -# define F_SETLKW 7 /* Set record locking info (blocking). */ -#else -# define F_GETLK F_GETLK64 /* Get record locking info. */ -# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/ -# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */ -#endif - -#if _MIPS_SIM != _ABI64 -# define F_GETLK64 33 /* Get record locking info. */ -# define F_SETLK64 34 /* Set record locking info (non-blocking). */ -# define F_SETLKW64 35 /* Set record locking info (blocking). */ -#else -# define F_GETLK64 14 /* Get record locking info. */ -# define F_SETLK64 6 /* Set record locking info (non-blocking).*/ -# define F_SETLKW64 7 /* Set record locking info (blocking). */ -#endif - -#define __F_SETOWN 24 /* Get owner (process receiving SIGIO). */ -#define __F_GETOWN 23 /* Set owner (process receiving SIGIO). */ - -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#ifndef __USE_FILE_OFFSET64 - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#if _MIPS_SIM != _ABI64 - /* The 64-bit flock structure, used by the n64 ABI, and for 64-bit - fcntls in o32 and n32, never has this field. */ - long int l_sysid; -#endif -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif - __pid_t l_pid; /* Process holding the lock. */ -#if ! defined __USE_FILE_OFFSET64 && _MIPS_SIM != _ABI64 - /* The 64-bit flock structure, used by the n64 ABI, and for 64-bit - flock in o32 and n32, never has this field. */ - long int __glibc_reserved0[4]; -#endif - }; -typedef struct flock flock_t; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/mips/bits/inotify.h b/sysdeps/unix/sysv/linux/mips/bits/inotify.h deleted file mode 100644 index 00b899410e..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/inotify.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_INOTIFY_H -# error "Never use directly; include instead." -#endif - -/* Flags for the parameter of inotify_init1. */ -enum - { - IN_CLOEXEC = 02000000, -#define IN_CLOEXEC IN_CLOEXEC - IN_NONBLOCK = 00000200 -#define IN_NONBLOCK IN_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h b/sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h deleted file mode 100644 index e5f33bb34e..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Structure types for pre-termios terminal ioctls. Linux/MIPS version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_IOCTL_H -# error "Never use directly; include instead." -#endif - -/* Get definition of constants for use with `ioctl'. */ -#include - -struct winsize - { - unsigned short int ws_row; - unsigned short int ws_col; - unsigned short int ws_xpixel; - unsigned short int ws_ypixel; - }; - -#define NCC 8 -struct termio - { - unsigned short int c_iflag; /* input mode flags */ - unsigned short int c_oflag; /* output mode flags */ - unsigned short int c_cflag; /* control mode flags */ - unsigned short int c_lflag; /* local mode flags */ - char c_line; /* line discipline */ - /* Yes, this is really NCCS. */ - unsigned char c_cc[32 /* NCCS */]; /* control characters */ - }; - -/* modem lines */ -#define TIOCM_LE 0x001 /* line enable */ -#define TIOCM_DTR 0x002 /* data terminal ready */ -#define TIOCM_RTS 0x004 /* request to send */ -#define TIOCM_ST 0x010 /* secondary transmit */ -#define TIOCM_SR 0x020 /* secondary receive */ -#define TIOCM_CTS 0x040 /* clear to send */ -#define TIOCM_CAR 0x100 /* carrier detect */ -#define TIOCM_CD TIOCM_CAR -#define TIOCM_RNG 0x200 /* ring */ -#define TIOCM_RI TIOCM_RNG -#define TIOCM_DSR 0x400 /* data set ready */ - -/* line disciplines */ -#define N_TTY 0 -#define N_SLIP 1 -#define N_MOUSE 2 -#define N_PPP 3 -#define N_STRIP 4 -#define N_AX25 5 -#define N_X25 6 /* X.25 async */ -#define N_6PACK 7 -#define N_MASC 8 /* Mobitex module */ -#define N_R3964 9 /* Simatic R3964 module */ -#define N_PROFIBUS_FDL 10 /* Profibus */ -#define N_IRDA 11 /* Linux IR */ -#define N_SMSBLOCK 12 /* SMS block mode */ -#define N_HDLC 13 /* synchronous HDLC */ -#define N_SYNC_PPP 14 /* synchronous PPP */ -#define N_HCI 15 /* Bluetooth HCI UART */ diff --git a/sysdeps/unix/sysv/linux/mips/bits/ipc.h b/sysdeps/unix/sysv/linux/mips/bits/ipc.h deleted file mode 100644 index 7d2712c36f..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/ipc.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_IPC_H -# error "Never use directly; include instead." -#endif - -#include - -/* Mode bits for `msgget', `semget', and `shmget'. */ -#define IPC_CREAT 01000 /* Create key if key does not exist. */ -#define IPC_EXCL 02000 /* Fail if key exists. */ -#define IPC_NOWAIT 04000 /* Return error on wait. */ - -/* Control commands for `msgctl', `semctl', and `shmctl'. */ -#define IPC_RMID 0 /* Remove identifier. */ -#define IPC_SET 1 /* Set `ipc_perm' options. */ -#define IPC_STAT 2 /* Get `ipc_perm' options. */ -#ifdef __USE_GNU -# define IPC_INFO 3 /* See ipcs. */ -#endif - -/* Special key values. */ -#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ - - -/* Data structure used to pass permission information to IPC operations. */ -struct ipc_perm - { - __key_t __key; /* Key. */ - unsigned int uid; /* Owner's user ID. */ - unsigned int gid; /* Owner's group ID. */ - unsigned int cuid; /* Creator's user ID. */ - unsigned int cgid; /* Creator's group ID. */ - unsigned int mode; /* Read/write permission. */ - unsigned short int __seq; /* Sequence number. */ - unsigned short int __pad1; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; -}; diff --git a/sysdeps/unix/sysv/linux/mips/bits/local_lim.h b/sysdeps/unix/sysv/linux/mips/bits/local_lim.h deleted file mode 100644 index b07b8afc3c..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/local_lim.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Minimum guaranteed maximum values for system limits. MIPS Linux version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* The kernel header pollutes the namespace with the NR_OPEN symbol - and defines LINK_MAX although filesystems have different maxima. A - similar thing is true for OPEN_MAX: the limit can be changed at - runtime and therefore the macro must not be defined. Remove this - after including the header if necessary. */ -#ifndef NR_OPEN -# define __undef_NR_OPEN -#endif -#ifndef LINK_MAX -# define __undef_LINK_MAX -#endif -#ifndef OPEN_MAX -# define __undef_OPEN_MAX -#endif -#ifndef ARG_MAX -# define __undef_ARG_MAX -#endif - -/* The kernel sources contain a file with all the needed information. */ -#include - -/* Have to remove NR_OPEN? */ -#ifdef __undef_NR_OPEN -# undef NR_OPEN -# undef __undef_NR_OPEN -#endif -/* Have to remove LINK_MAX? */ -#ifdef __undef_LINK_MAX -# undef LINK_MAX -# undef __undef_LINK_MAX -#endif -/* Have to remove OPEN_MAX? */ -#ifdef __undef_OPEN_MAX -# undef OPEN_MAX -# undef __undef_OPEN_MAX -#endif -/* Have to remove ARG_MAX? */ -#ifdef __undef_ARG_MAX -# undef ARG_MAX -# undef __undef_ARG_MAX -#endif - -/* The number of data keys per process. */ -#define _POSIX_THREAD_KEYS_MAX 128 -/* This is the value this implementation supports. */ -#define PTHREAD_KEYS_MAX 1024 - -/* Controlling the iterations of destructors for thread-specific data. */ -#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 -/* Number of iterations this implementation does. */ -#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS - -/* The number of threads per process. */ -#define _POSIX_THREAD_THREADS_MAX 64 -/* We have no predefined limit on the number of threads. */ -#undef PTHREAD_THREADS_MAX - -/* Maximum amount by which a process can descrease its asynchronous I/O - priority level. */ -#define AIO_PRIO_DELTA_MAX 20 - -/* Minimum size for a thread. At least two pages with 64k pages. */ -#define PTHREAD_STACK_MIN 131072 - -/* Maximum number of timer expiration overruns. */ -#define DELAYTIMER_MAX 2147483647 - -/* Maximum tty name length. */ -#define TTY_NAME_MAX 32 - -/* Maximum login name length. This is arbitrary. */ -#define LOGIN_NAME_MAX 256 - -/* Maximum host name length. */ -#define HOST_NAME_MAX 64 - -/* Maximum message queue priority level. */ -#define MQ_PRIO_MAX 32768 - -/* Maximum value the semaphore can have. */ -#define SEM_VALUE_MAX (2147483647) diff --git a/sysdeps/unix/sysv/linux/mips/bits/mman.h b/sysdeps/unix/sysv/linux/mips/bits/mman.h deleted file mode 100644 index 7fcf630726..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/mman.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/MIPS version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_NORESERVE 0x0400 /* don't check for reservations */ -# define MAP_GROWSDOWN 0x1000 /* stack-like segment */ -# define MAP_DENYWRITE 0x2000 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x4000 /* mark it as an executable */ -# define MAP_LOCKED 0x8000 /* pages are locked */ -# define MAP_POPULATE 0x10000 /* populate (prefault) pagetables */ -# define MAP_NONBLOCK 0x20000 /* do not block on IO */ -# define MAP_STACK 0x40000 /* Allocation is for a stack. */ -# define MAP_HUGETLB 0x80000 /* Create huge page mapping. */ -#endif - -#define __MAP_ANONYMOUS 0x0800 - -/* Include generic Linux declarations. */ -#include - -#ifdef __USE_MISC -# define MAP_RENAME MAP_ANONYMOUS -#endif diff --git a/sysdeps/unix/sysv/linux/mips/bits/msq.h b/sysdeps/unix/sysv/linux/mips/bits/msq.h deleted file mode 100644 index 648c71fbc2..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/msq.h +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_MSG_H -# error "Never use directly; include instead." -#endif - -#include - -/* Define options for message queue functions. */ -#define MSG_NOERROR 010000 /* no error if message is too big */ -#ifdef __USE_GNU -# define MSG_EXCEPT 020000 /* recv any msg except of specified type */ -# define MSG_COPY 040000 /* copy (not remove) all queue messages */ -#endif - -/* Types used in the structure definition. */ -typedef unsigned long int msgqnum_t; -typedef unsigned long int msglen_t; - - -/* Structure of record for one message inside the kernel. - The type `struct msg' is opaque. */ -struct msqid_ds -{ - struct ipc_perm msg_perm; /* structure describing operation permission */ -#if __WORDSIZE == 32 && defined (__MIPSEB__) - unsigned long int __glibc_reserved1; -#endif - __time_t msg_stime; /* time of last msgsnd command */ -#if __WORDSIZE == 32 && defined (__MIPSEL__) - unsigned long int __glibc_reserved1; -#endif -#if __WORDSIZE == 32 && defined (__MIPSEB__) - unsigned long int __glibc_reserved2; -#endif - __time_t msg_rtime; /* time of last msgrcv command */ -#if __WORDSIZE == 32 && defined (__MIPSEL__) - unsigned long int __glibc_reserved2; -#endif -#if __WORDSIZE == 32 && defined (__MIPSEB__) - unsigned long int __glibc_reserved3; -#endif - __time_t msg_ctime; /* time of last change */ -#if __WORDSIZE == 32 && defined (__MIPSEL__) - unsigned long int __glibc_reserved3; -#endif - unsigned long int __msg_cbytes; /* current number of bytes on queue */ - msgqnum_t msg_qnum; /* number of messages currently on queue */ - msglen_t msg_qbytes; /* max number of bytes allowed on queue */ - __pid_t msg_lspid; /* pid of last msgsnd() */ - __pid_t msg_lrpid; /* pid of last msgrcv() */ - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; -}; - -#ifdef __USE_MISC - -# define msg_cbytes __msg_cbytes - -/* ipcs ctl commands */ -# define MSG_STAT 11 -# define MSG_INFO 12 - -/* buffer for msgctl calls IPC_INFO, MSG_INFO */ -struct msginfo - { - int msgpool; - int msgmap; - int msgmax; - int msgmnb; - int msgmni; - int msgssz; - int msgtql; - unsigned short int msgseg; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/mips/bits/poll.h b/sysdeps/unix/sysv/linux/mips/bits/poll.h deleted file mode 100644 index 0f92f34d79..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/poll.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_POLL_H -# error "Never use directly; include instead." -#endif - -/* Event types that can be polled for. These bits may be set in `events' - to indicate the interesting event types; they will appear in `revents' - to indicate the status of the file descriptor. */ -#define POLLIN 0x001 /* There is data to read. */ -#define POLLPRI 0x002 /* There is urgent data to read. */ -#define POLLOUT 0x004 /* Writing now will not block. */ - -#if defined __USE_XOPEN || defined __USE_XOPEN2K8 -/* These values are defined in XPG4.2. */ -# define POLLRDNORM 0x040 /* Normal data may be read. */ -# define POLLRDBAND 0x080 /* Priority data may be read. */ -# define POLLWRNORM POLLOUT /* Writing now will not block. */ -# define POLLWRBAND 0x100 /* Priority data may be written. */ -#endif - -#ifdef __USE_GNU -/* These are extensions for Linux. */ -# define POLLMSG 0x400 -# define POLLREMOVE 0x1000 -# define POLLRDHUP 0x2000 -#endif - -/* Event types always implicitly polled for. These bits need not be set in - `events', but they will appear in `revents' to indicate the status of - the file descriptor. */ -#define POLLERR 0x008 /* Error condition. */ -#define POLLHUP 0x010 /* Hung up. */ -#define POLLNVAL 0x020 /* Invalid polling request. */ diff --git a/sysdeps/unix/sysv/linux/mips/bits/resource.h b/sysdeps/unix/sysv/linux/mips/bits/resource.h deleted file mode 100644 index c59a92b258..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/resource.h +++ /dev/null @@ -1,273 +0,0 @@ -/* Bit values & structures for resource limits. Linux/MIPS version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_RESOURCE_H -# error "Never use directly; include instead." -#endif - -#include - -/* Transmute defines to enumerations. The macro re-definitions are - necessary because some programs want to test for operating system - features with #ifdef RUSAGE_SELF. In ISO C the reflexive - definition is a no-op. */ - -/* Kinds of resource limit. */ -enum __rlimit_resource -{ - /* Per-process CPU limit, in seconds. */ - RLIMIT_CPU = 0, -#define RLIMIT_CPU RLIMIT_CPU - - /* Largest file that can be created, in bytes. */ - RLIMIT_FSIZE = 1, -#define RLIMIT_FSIZE RLIMIT_FSIZE - - /* Maximum size of data segment, in bytes. */ - RLIMIT_DATA = 2, -#define RLIMIT_DATA RLIMIT_DATA - - /* Maximum size of stack segment, in bytes. */ - RLIMIT_STACK = 3, -#define RLIMIT_STACK RLIMIT_STACK - - /* Largest core file that can be created, in bytes. */ - RLIMIT_CORE = 4, -#define RLIMIT_CORE RLIMIT_CORE - - /* Largest resident set size, in bytes. - This affects swapping; processes that are exceeding their - resident set size will be more likely to have physical memory - taken from them. */ - __RLIMIT_RSS = 7, -#define RLIMIT_RSS __RLIMIT_RSS - - /* Number of open files. */ - RLIMIT_NOFILE = 5, - __RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */ -#define RLIMIT_NOFILE RLIMIT_NOFILE -#define RLIMIT_OFILE __RLIMIT_OFILE - - /* Address space limit (?) */ - RLIMIT_AS = 6, -#define RLIMIT_AS RLIMIT_AS - - /* Number of processes. */ - __RLIMIT_NPROC = 8, -#define RLIMIT_NPROC __RLIMIT_NPROC - - /* Locked-in-memory address space. */ - __RLIMIT_MEMLOCK = 9, -#define RLIMIT_MEMLOCK __RLIMIT_MEMLOCK - - /* Maximum number of file locks. */ - __RLIMIT_LOCKS = 10, -#define RLIMIT_LOCKS __RLIMIT_LOCKS - - /* Maximum number of pending signals. */ - __RLIMIT_SIGPENDING = 11, -#define RLIMIT_SIGPENDING __RLIMIT_SIGPENDING - - /* Maximum bytes in POSIX message queues. */ - __RLIMIT_MSGQUEUE = 12, -#define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE - - /* Maximum nice priority allowed to raise to. - Nice levels 19 .. -20 correspond to 0 .. 39 - values of this resource limit. */ - __RLIMIT_NICE = 13, -#define RLIMIT_NICE __RLIMIT_NICE - - /* Maximum realtime priority allowed for non-priviledged - processes. */ - __RLIMIT_RTPRIO = 14, -#define RLIMIT_RTPRIO __RLIMIT_RTPRIO - - /* Maximum CPU time in µs that a process scheduled under a real-time - scheduling policy may consume without making a blocking system - call before being forcibly descheduled. */ - __RLIMIT_RTTIME = 15, -#define RLIMIT_RTTIME __RLIMIT_RTTIME - - __RLIMIT_NLIMITS = 16, - __RLIM_NLIMITS = __RLIMIT_NLIMITS -#define RLIMIT_NLIMITS __RLIMIT_NLIMITS -#define RLIM_NLIMITS __RLIM_NLIMITS -}; - -/* Value to indicate that there is no limit. */ -#if _MIPS_SIM == _ABI64 -/* The N64 syscall uses this value. */ -# define RLIM_INFINITY 0xffffffffffffffffUL -# ifdef __USE_LARGEFILE64 -# define RLIM64_INFINITY 0xffffffffffffffffUL -# endif -#else -/* The O32 and N32 syscalls use 0x7fffffff. */ -# ifndef __USE_FILE_OFFSET64 -# define RLIM_INFINITY ((long int)(~0UL >> 1)) -# else -# define RLIM_INFINITY 0xffffffffffffffffULL -# endif -# ifdef __USE_LARGEFILE64 -# define RLIM64_INFINITY 0xffffffffffffffffULL -# endif -#endif - -/* We can represent all limits. */ -#define RLIM_SAVED_MAX RLIM_INFINITY -#define RLIM_SAVED_CUR RLIM_INFINITY - - -/* Type for resource quantity measurement. */ -#ifndef __USE_FILE_OFFSET64 -typedef __rlim_t rlim_t; -#else -typedef __rlim64_t rlim_t; -#endif -#ifdef __USE_LARGEFILE64 -typedef __rlim64_t rlim64_t; -#endif - -struct rlimit - { - /* The current (soft) limit. */ - rlim_t rlim_cur; - /* The hard limit. */ - rlim_t rlim_max; - }; - -#ifdef __USE_LARGEFILE64 -struct rlimit64 - { - /* The current (soft) limit. */ - rlim64_t rlim_cur; - /* The hard limit. */ - rlim64_t rlim_max; - }; -#endif - -/* Whose usage statistics do you want? */ -enum __rusage_who -{ - /* The calling process. */ - RUSAGE_SELF = 0, -#define RUSAGE_SELF RUSAGE_SELF - - /* All of its terminated child processes. */ - RUSAGE_CHILDREN = -1 -#define RUSAGE_CHILDREN RUSAGE_CHILDREN - -#ifdef __USE_GNU - , - /* The calling thread. */ - RUSAGE_THREAD = 1 -# define RUSAGE_THREAD RUSAGE_THREAD - /* Name for the same functionality on Solaris. */ -# define RUSAGE_LWP RUSAGE_THREAD -#endif -}; - -#include - -/* Structure which says how much of each resource has been used. */ -struct rusage - { - /* Total amount of user time used. */ - struct timeval ru_utime; - /* Total amount of system time used. */ - struct timeval ru_stime; - /* Maximum resident set size (in kilobytes). */ - long int ru_maxrss; - /* Amount of sharing of text segment memory - with other processes (kilobyte-seconds). */ - long int ru_ixrss; - /* Amount of data segment memory used (kilobyte-seconds). */ - long int ru_idrss; - /* Amount of stack memory used (kilobyte-seconds). */ - long int ru_isrss; - /* Number of soft page faults (i.e. those serviced by reclaiming - a page from the list of pages awaiting reallocation. */ - long int ru_minflt; - /* Number of hard page faults (i.e. those that required I/O). */ - long int ru_majflt; - /* Number of times a process was swapped out of physical memory. */ - long int ru_nswap; - /* Number of input operations via the file system. Note: This - and `ru_oublock' do not include operations with the cache. */ - long int ru_inblock; - /* Number of output operations via the file system. */ - long int ru_oublock; - /* Number of IPC messages sent. */ - long int ru_msgsnd; - /* Number of IPC messages received. */ - long int ru_msgrcv; - /* Number of signals delivered. */ - long int ru_nsignals; - /* Number of voluntary context switches, i.e. because the process - gave up the process before it had to (usually to wait for some - resource to be available). */ - long int ru_nvcsw; - /* Number of involuntary context switches, i.e. a higher priority process - became runnable or the current process used up its time slice. */ - long int ru_nivcsw; - }; - -/* Priority limits. */ -#define PRIO_MIN -20 /* Minimum priority a process can have. */ -#define PRIO_MAX 20 /* Maximum priority a process can have. */ - -/* The type of the WHICH argument to `getpriority' and `setpriority', - indicating what flavor of entity the WHO argument specifies. */ -enum __priority_which -{ - PRIO_PROCESS = 0, /* WHO is a process ID. */ -#define PRIO_PROCESS PRIO_PROCESS - PRIO_PGRP = 1, /* WHO is a process group ID. */ -#define PRIO_PGRP PRIO_PGRP - PRIO_USER = 2 /* WHO is a user ID. */ -#define PRIO_USER PRIO_USER -}; - - -__BEGIN_DECLS - -#ifdef __USE_GNU -/* Modify and return resource limits of a process atomically. */ -# ifndef __USE_FILE_OFFSET64 -extern int prlimit (__pid_t __pid, enum __rlimit_resource __resource, - const struct rlimit *__new_limit, - struct rlimit *__old_limit) __THROW; -# else -# ifdef __REDIRECT_NTH -extern int __REDIRECT_NTH (prlimit, (__pid_t __pid, - enum __rlimit_resource __resource, - const struct rlimit *__new_limit, - struct rlimit *__old_limit), prlimit64); -# else -# define prlimit prlimit64 -# endif -# endif -# ifdef __USE_LARGEFILE64 -extern int prlimit64 (__pid_t __pid, enum __rlimit_resource __resource, - const struct rlimit64 *__new_limit, - struct rlimit64 *__old_limit) __THROW; -# endif -#endif - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/mips/bits/sem.h b/sysdeps/unix/sysv/linux/mips/bits/sem.h deleted file mode 100644 index 36de4390e8..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/sem.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_SEM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Flags for `semop'. */ -#define SEM_UNDO 0x1000 /* undo the operation on exit */ - -/* Commands for `semctl'. */ -#define GETPID 11 /* get sempid */ -#define GETVAL 12 /* get semval */ -#define GETALL 13 /* get all semval's */ -#define GETNCNT 14 /* get semncnt */ -#define GETZCNT 15 /* get semzcnt */ -#define SETVAL 16 /* set semval */ -#define SETALL 17 /* set all semval's */ - - -/* Data structure describing a set of semaphores. */ -struct semid_ds -{ - struct ipc_perm sem_perm; /* operation permission struct */ - __time_t sem_otime; /* last semop() time */ - __time_t sem_ctime; /* last time changed by semctl() */ - unsigned long int sem_nsems; /* number of semaphores in set */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; -}; - -/* The user should define a union like the following to use it for arguments - for `semctl'. - - union semun - { - int val; <= value for SETVAL - struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET - unsigned short int *array; <= array for GETALL & SETALL - struct seminfo *__buf; <= buffer for IPC_INFO - }; - - Previous versions of this file used to define this union but this is - incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether - one must define the union or not. */ -#define _SEM_SEMUN_UNDEFINED 1 - -#ifdef __USE_MISC - -/* ipcs ctl cmds */ -# define SEM_STAT 18 -# define SEM_INFO 19 - -struct seminfo -{ - int semmap; - int semmni; - int semmns; - int semmnu; - int semmsl; - int semopm; - int semume; - int semusz; - int semvmx; - int semaem; -}; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/mips/bits/shm.h b/sysdeps/unix/sysv/linux/mips/bits/shm.h deleted file mode 100644 index 20a02ce9bb..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/shm.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_SHM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from */ -#define SHM_W 0200 /* or S_IWUGO from */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ -#define SHM_EXEC 0100000 /* execution access */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -/* Segment low boundary address multiple. */ -#define SHMLBA 0x40000 - - -/* Type to count number of attaches. */ -typedef unsigned long int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ - size_t shm_segsz; /* size of segment in bytes */ - __time_t shm_atime; /* time of last shmat() */ - __time_t shm_dtime; /* time of last shmdt() */ - __time_t shm_ctime; /* time of last change by shmctl() */ - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - unsigned long int shmmax; - unsigned long int shmmin; - unsigned long int shmmni; - unsigned long int shmseg; - unsigned long int shmall; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - unsigned long int __glibc_reserved3; - unsigned long int __glibc_reserved4; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/mips/bits/sigaction.h b/sysdeps/unix/sysv/linux/mips/bits/sigaction.h deleted file mode 100644 index c61a49ef88..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/sigaction.h +++ /dev/null @@ -1,89 +0,0 @@ -/* The proper definitions for Linux/MIPS's sigaction. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SIGNAL_H -# error "Never include directly; use instead." -#endif - -/* Structure describing the action to be taken when a signal arrives. */ -struct sigaction - { - /* Special flags. */ - int sa_flags; - - /* Signal handler. */ -#ifdef __USE_POSIX199309 - union - { - /* Used if SA_SIGINFO is not set. */ - __sighandler_t sa_handler; - /* Used if SA_SIGINFO is set. */ - void (*sa_sigaction) (int, siginfo_t *, void *); - } - __sigaction_handler; -# define sa_handler __sigaction_handler.sa_handler -# define sa_sigaction __sigaction_handler.sa_sigaction -#else - __sighandler_t sa_handler; -#endif - /* Additional set of signals to be blocked. */ - __sigset_t sa_mask; - - /* The ABI says here are two unused ints following. */ - /* Restore handler. */ - void (*sa_restorer) (void); - -#if _MIPS_SZPTR < 64 - int sa_resv[1]; -#endif - }; - -/* Bits in `sa_flags'. */ -/* Please note that some Linux kernels versions use different values for these - flags which is a bug in those kernel versions. */ -#define SA_NOCLDSTOP 0x00000001 /* Don't send SIGCHLD when children stop. */ -#define SA_NOCLDWAIT 0x00010000 /* Don't create zombie on child death. */ -#define SA_SIGINFO 0x00000008 /* Invoke signal-catching function with - three arguments instead of one. */ -#if defined __USE_UNIX98 || defined __USE_MISC -# define SA_ONSTACK 0x08000000 /* Use signal stack by using `sa_restorer'. */ -#endif -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 -# define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler. */ -# define SA_RESTART 0x10000000 /* Restart syscall on signal return. */ -# define SA_NODEFER 0x40000000 /* Don't automatically block the signal when - its handler is being executed. */ -#endif -#ifdef __USE_MISC -# define SA_INTERRUPT 0x20000000 /* Historical no-op. */ - -/* Some aliases for the SA_ constants. */ -# define SA_NOMASK SA_NODEFER -# define SA_ONESHOT SA_RESETHAND -# define SA_STACK SA_ONSTACK -#endif - -/* Values for the HOW argument to `sigprocmask'. */ -#define SIG_NOP 0 /* 0 is unused to catch errors */ -#define SIG_BLOCK 1 /* Block signals. */ -#define SIG_UNBLOCK 2 /* Unblock signals. */ -#define SIG_SETMASK 3 /* Set the set of blocked signals. */ -#ifdef __USE_MISC -# define SIG_SETMASK32 256 /* Goodie from SGI for BSD compatibility: - set only the low 32 bit of the sigset. */ -#endif diff --git a/sysdeps/unix/sysv/linux/mips/bits/sigcontext.h b/sysdeps/unix/sysv/linux/mips/bits/sigcontext.h deleted file mode 100644 index 0b3fda1fe1..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/sigcontext.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _BITS_SIGCONTEXT_H -#define _BITS_SIGCONTEXT_H 1 - -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H -# error "Never use directly; include instead." -#endif - -#include - -#if _MIPS_SIM == _ABIO32 - -/* Certain unused fields were replaced with new ones in 2.6.12-rc4. - The changes were as follows: - - sc_cause -> sc_hi1 - sc_badvaddr -> sc_lo1 - sc_sigset[0] -> sc_hi2 - sc_sigset[1] -> sc_lo2 - sc_sigset[2] -> sc_hi3 - sc_sigset[3] -> sc_lo3 - - sc_regmask, sc_ownedfp and sc_fpc_eir are not used. */ -struct sigcontext { - unsigned int sc_regmask; - unsigned int sc_status; - __extension__ unsigned long long sc_pc; - __extension__ unsigned long long sc_regs[32]; - __extension__ unsigned long long sc_fpregs[32]; - unsigned int sc_ownedfp; - unsigned int sc_fpc_csr; - unsigned int sc_fpc_eir; - unsigned int sc_used_math; - unsigned int sc_dsp; - __extension__ unsigned long long sc_mdhi; - __extension__ unsigned long long sc_mdlo; - unsigned long sc_hi1; - unsigned long sc_lo1; - unsigned long sc_hi2; - unsigned long sc_lo2; - unsigned long sc_hi3; - unsigned long sc_lo3; -}; - -#else - -/* This structure changed in 2.6.12-rc4 when DSP support was added. */ -struct sigcontext { - __extension__ unsigned long long sc_regs[32]; - __extension__ unsigned long long sc_fpregs[32]; - __extension__ unsigned long long sc_mdhi; - __extension__ unsigned long long sc_hi1; - __extension__ unsigned long long sc_hi2; - __extension__ unsigned long long sc_hi3; - __extension__ unsigned long long sc_mdlo; - __extension__ unsigned long long sc_lo1; - __extension__ unsigned long long sc_lo2; - __extension__ unsigned long long sc_lo3; - __extension__ unsigned long long sc_pc; - unsigned int sc_fpc_csr; - unsigned int sc_used_math; - unsigned int sc_dsp; - unsigned int sc_reserved; -}; - -#endif /* _MIPS_SIM != _ABIO32 */ -#endif diff --git a/sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h b/sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h deleted file mode 100644 index cd3af7db06..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h +++ /dev/null @@ -1,13 +0,0 @@ -/* Architecture-specific adjustments to siginfo_t. MIPS version. */ -#ifndef _BITS_SIGINFO_ARCH_H -#define _BITS_SIGINFO_ARCH_H 1 - -/* MIPS has the si_code and si_errno fields in the opposite order from - all other architectures. */ -#define __SI_ERRNO_THEN_CODE 0 - -/* MIPS also has different values for SI_ASYNCIO, SI_MESGQ, and SI_TIMER - than all other architectures. */ -#define __SI_ASYNCIO_AFTER_SIGIO 0 - -#endif diff --git a/sysdeps/unix/sysv/linux/mips/bits/signalfd.h b/sysdeps/unix/sysv/linux/mips/bits/signalfd.h deleted file mode 100644 index 7cc70153a3..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/signalfd.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SIGNALFD_H -# error "Never use directly; include instead." -#endif - -/* Flags for signalfd. */ -enum - { - SFD_CLOEXEC = 02000000, -#define SFD_CLOEXEC SFD_CLOEXEC - SFD_NONBLOCK = 00000200 -#define SFD_NONBLOCK SFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/mips/bits/signum.h b/sysdeps/unix/sysv/linux/mips/bits/signum.h deleted file mode 100644 index 6c31e01cd7..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/signum.h +++ /dev/null @@ -1,78 +0,0 @@ -/* Signal number definitions. Linux version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifdef _SIGNAL_H - -/* Fake signal functions. */ -#define SIG_ERR ((__sighandler_t) -1) /* Error return. */ -#define SIG_DFL ((__sighandler_t) 0) /* Default action. */ -#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */ - -#ifdef __USE_XOPEN -# define SIG_HOLD ((__sighandler_t) 2) /* Add signal to hold mask. */ -#endif - - -#define SIGHUP 1 /* Hangup (POSIX). */ -#define SIGINT 2 /* Interrupt (ANSI). */ -#define SIGQUIT 3 /* Quit (POSIX). */ -#define SIGILL 4 /* Illegal instruction (ANSI). */ -#define SIGTRAP 5 /* Trace trap (POSIX). */ -#define SIGIOT 6 /* IOT trap (4.2 BSD). */ -#define SIGABRT SIGIOT /* Abort (ANSI). */ -#define SIGEMT 7 -#define SIGFPE 8 /* Floating-point exception (ANSI). */ -#define SIGKILL 9 /* Kill, unblockable (POSIX). */ -#define SIGBUS 10 /* BUS error (4.2 BSD). */ -#define SIGSEGV 11 /* Segmentation violation (ANSI). */ -#define SIGSYS 12 -#define SIGPIPE 13 /* Broken pipe (POSIX). */ -#define SIGALRM 14 /* Alarm clock (POSIX). */ -#define SIGTERM 15 /* Termination (ANSI). */ -#define SIGUSR1 16 /* User-defined signal 1 (POSIX). */ -#define SIGUSR2 17 /* User-defined signal 2 (POSIX). */ -#define SIGCHLD 18 /* Child status has changed (POSIX). */ -#define SIGCLD SIGCHLD /* Same as SIGCHLD (System V). */ -#define SIGPWR 19 /* Power failure restart (System V). */ -#define SIGWINCH 20 /* Window size change (4.3 BSD, Sun). */ -#define SIGURG 21 /* Urgent condition on socket (4.2 BSD). */ -#define SIGIO 22 /* I/O now possible (4.2 BSD). */ -#define SIGPOLL SIGIO /* Pollable event occurred (System V). */ -#define SIGSTOP 23 /* Stop, unblockable (POSIX). */ -#define SIGTSTP 24 /* Keyboard stop (POSIX). */ -#define SIGCONT 25 /* Continue (POSIX). */ -#define SIGTTIN 26 /* Background read from tty (POSIX). */ -#define SIGTTOU 27 /* Background write to tty (POSIX). */ -#define SIGVTALRM 28 /* Virtual alarm clock (4.2 BSD). */ -#define SIGPROF 29 /* Profiling alarm clock (4.2 BSD). */ -#define SIGXCPU 30 /* CPU limit exceeded (4.2 BSD). */ -#define SIGXFSZ 31 /* File size limit exceeded (4.2 BSD). */ - - -#define _NSIG 128 /* Biggest signal number + 1 - (including real-time signals). */ - -#define SIGRTMIN (__libc_current_sigrtmin ()) -#define SIGRTMAX (__libc_current_sigrtmax ()) - -/* These are the hard limits of the kernel. These values should not be - used directly at user level. */ -#define __SIGRTMIN 32 -#define __SIGRTMAX (_NSIG - 1) - -#endif /* included. */ diff --git a/sysdeps/unix/sysv/linux/mips/bits/socket_type.h b/sysdeps/unix/sysv/linux/mips/bits/socket_type.h deleted file mode 100644 index 64b70c204b..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/socket_type.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Define enum __socket_type for Linux/MIPS. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SOCKET_H -# error "Never include directly; use instead." -#endif - -/* Types of sockets. */ -enum __socket_type -{ - SOCK_DGRAM = 1, /* Connectionless, unreliable datagrams - of fixed maximum length. */ -#define SOCK_DGRAM SOCK_DGRAM - SOCK_STREAM = 2, /* Sequenced, reliable, connection-based - byte streams. */ -#define SOCK_STREAM SOCK_STREAM - SOCK_RAW = 3, /* Raw protocol interface. */ -#define SOCK_RAW SOCK_RAW - SOCK_RDM = 4, /* Reliably-delivered messages. */ -#define SOCK_RDM SOCK_RDM - SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based, - datagrams of fixed maximum length. */ -#define SOCK_SEQPACKET SOCK_SEQPACKET - SOCK_DCCP = 6, -#define SOCK_DCCP SOCK_DCCP /* Datagram Congestion Control Protocol. */ - SOCK_PACKET = 10, /* Linux specific way of getting packets - at the dev level. For writing rarp and - other similar things on the user level. */ -#define SOCK_PACKET SOCK_PACKET - - /* Flags to be ORed into the type parameter of socket and socketpair and - used for the flags parameter of paccept. */ - - SOCK_CLOEXEC = 02000000, /* Atomically set close-on-exec flag for the - new descriptor(s). */ -#define SOCK_CLOEXEC SOCK_CLOEXEC - SOCK_NONBLOCK = 00000200 /* Atomically mark descriptor(s) as - non-blocking. */ -#define SOCK_NONBLOCK SOCK_NONBLOCK -}; diff --git a/sysdeps/unix/sysv/linux/mips/bits/stat.h b/sysdeps/unix/sysv/linux/mips/bits/stat.h deleted file mode 100644 index 07b6d7f615..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/stat.h +++ /dev/null @@ -1,263 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STAT_H -#define _BITS_STAT_H 1 - -#include - -/* Versions of the `struct stat' data structure. */ -#define _STAT_VER_LINUX_OLD 1 -#define _STAT_VER_KERNEL 1 -#define _STAT_VER_SVR4 2 -#define _STAT_VER_LINUX 3 -#define _STAT_VER _STAT_VER_LINUX /* The one defined below. */ - -/* Versions of the `xmknod' interface. */ -#define _MKNOD_VER_LINUX 1 -#define _MKNOD_VER_SVR4 2 -#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */ - - -#if _MIPS_SIM == _ABIO32 -/* Structure describing file characteristics. */ -struct stat - { - unsigned long int st_dev; - long int st_pad1[3]; -#ifndef __USE_FILE_OFFSET64 - __ino_t st_ino; /* File serial number. */ -#else - __ino64_t st_ino; /* File serial number. */ -#endif - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - unsigned long int st_rdev; /* Device number, if device. */ -#ifndef __USE_FILE_OFFSET64 - long int st_pad2[2]; - __off_t st_size; /* Size of file, in bytes. */ - /* SVR4 added this extra long to allow for expansion of off_t. */ - long int st_pad3; -#else - long int st_pad2[3]; - __off64_t st_size; /* Size of file, in bytes. */ -#endif -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ -#ifndef __USE_FILE_OFFSET64 - __blkcnt_t st_blocks; /* Number of 512-byte blocks allocated. */ -#else - long int st_pad4; - __blkcnt64_t st_blocks; /* Number of 512-byte blocks allocated. */ -#endif - long int st_pad5[14]; - }; - -#ifdef __USE_LARGEFILE64 -struct stat64 - { - unsigned long int st_dev; - long int st_pad1[3]; - __ino64_t st_ino; /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - unsigned long int st_rdev; /* Device number, if device. */ - long int st_pad2[3]; - __off64_t st_size; /* Size of file, in bytes. */ -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - long int st_pad3; - __blkcnt64_t st_blocks; /* Number of 512-byte blocks allocated. */ - long int st_pad4[14]; - }; -#endif -#else -struct stat - { - __dev_t st_dev; - int st_pad1[3]; /* Reserved for st_dev expansion */ -#ifndef __USE_FILE_OFFSET64 - __ino_t st_ino; -#else - __ino64_t st_ino; -#endif - __mode_t st_mode; - __nlink_t st_nlink; - __uid_t st_uid; - __gid_t st_gid; - __dev_t st_rdev; -#if !defined __USE_FILE_OFFSET64 - unsigned int st_pad2[2]; /* Reserved for st_rdev expansion */ - __off_t st_size; - int st_pad3; -#else - unsigned int st_pad2[3]; /* Reserved for st_rdev expansion */ - __off64_t st_size; -#endif -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - __blksize_t st_blksize; - unsigned int st_pad4; -#ifndef __USE_FILE_OFFSET64 - __blkcnt_t st_blocks; -#else - __blkcnt64_t st_blocks; -#endif - int st_pad5[14]; - }; - -#ifdef __USE_LARGEFILE64 -struct stat64 - { - __dev_t st_dev; - unsigned int st_pad1[3]; /* Reserved for st_dev expansion */ - __ino64_t st_ino; - __mode_t st_mode; - __nlink_t st_nlink; - __uid_t st_uid; - __gid_t st_gid; - __dev_t st_rdev; - unsigned int st_pad2[3]; /* Reserved for st_rdev expansion */ - __off64_t st_size; -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - __blksize_t st_blksize; - unsigned int st_pad3; - __blkcnt64_t st_blocks; - int st_pad4[14]; -}; -#endif -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFIFO 0010000 /* FIFO. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ - -/* POSIX.1b objects. Note that these macros always evaluate to zero. But - they do it by enforcing the correct use of the macros. */ -#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 0400 /* Read by owner. */ -#define __S_IWRITE 0200 /* Write by owner. */ -#define __S_IEXEC 0100 /* Execute by owner. */ - -#ifdef __USE_ATFILE -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) -#endif - -#endif /* bits/stat.h */ diff --git a/sysdeps/unix/sysv/linux/mips/bits/statfs.h b/sysdeps/unix/sysv/linux/mips/bits/statfs.h deleted file mode 100644 index a3ed8a363d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/statfs.h +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_STATFS_H -# error "Never include directly; use instead." -#endif - -#include /* for __fsid_t and __fsblkcnt_t*/ - -struct statfs - { - long int f_type; -#define f_fstyp f_type - long int f_bsize; - long int f_frsize; /* Fragment size - unsupported */ -#ifndef __USE_FILE_OFFSET64 - __fsblkcnt_t f_blocks; - __fsblkcnt_t f_bfree; - __fsblkcnt_t f_files; - __fsblkcnt_t f_ffree; - __fsblkcnt_t f_bavail; -#else - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_files; - __fsblkcnt64_t f_ffree; - __fsblkcnt64_t f_bavail; -#endif - - /* Linux specials */ - __fsid_t f_fsid; - long int f_namelen; - long int f_flags; - long int f_spare[5]; - }; - -#ifdef __USE_LARGEFILE64 -struct statfs64 - { - long int f_type; -#define f_fstyp f_type - long int f_bsize; - long int f_frsize; /* Fragment size - unsupported */ - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_files; - __fsblkcnt64_t f_ffree; - __fsblkcnt64_t f_bavail; - - /* Linux specials */ - __fsid_t f_fsid; - long int f_namelen; - long int f_flags; - long int f_spare[5]; - }; -#endif - -/* Tell code we have these members. */ -#define _STATFS_F_NAMELEN diff --git a/sysdeps/unix/sysv/linux/mips/bits/termios.h b/sysdeps/unix/sysv/linux/mips/bits/termios.h deleted file mode 100644 index ecf4b1378a..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/termios.h +++ /dev/null @@ -1,222 +0,0 @@ -/* termios type and macro definitions. Linux/MIPS version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _TERMIOS_H -# error "Never include directly; use instead." -#endif - -typedef unsigned char cc_t; -typedef unsigned int speed_t; -typedef unsigned int tcflag_t; - -#define NCCS 32 -struct termios - { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline */ - cc_t c_cc[NCCS]; /* control characters */ - }; - -/* c_cc characters */ -#define VINTR 0 /* Interrupt character [ISIG]. */ -#define VQUIT 1 /* Quit character [ISIG]. */ -#define VERASE 2 /* Erase character [ICANON]. */ -#define VKILL 3 /* Kill-line character [ICANON]. */ -#define VMIN 4 /* Minimum number of bytes read at once [!ICANON]. */ -#define VTIME 5 /* Time-out value (tenths of a second) [!ICANON]. */ -#define VEOL2 6 /* Second EOL character [ICANON]. */ -#define VSWTC 7 -#define VSWTCH VSWTC -#define VSTART 8 /* Start (X-ON) character [IXON, IXOFF]. */ -#define VSTOP 9 /* Stop (X-OFF) character [IXON, IXOFF]. */ -#define VSUSP 10 /* Suspend character [ISIG]. */ - /* VDSUSP is not supported on Linux. */ -/* #define VDSUSP 11 / * Delayed suspend character [ISIG]. */ -#define VREPRINT 12 /* Reprint-line character [ICANON]. */ -#define VDISCARD 13 /* Discard character [IEXTEN]. */ -#define VWERASE 14 /* Word-erase character [ICANON]. */ -#define VLNEXT 15 /* Literal-next character [IEXTEN]. */ -#define VEOF 16 /* End-of-file character [ICANON]. */ -#define VEOL 17 /* End-of-line character [ICANON]. */ - -/* c_iflag bits */ -#define IGNBRK 0000001 /* Ignore break condition. */ -#define BRKINT 0000002 /* Signal interrupt on break. */ -#define IGNPAR 0000004 /* Ignore characters with parity errors. */ -#define PARMRK 0000010 /* Mark parity and framing errors. */ -#define INPCK 0000020 /* Enable input parity check. */ -#define ISTRIP 0000040 /* Strip 8th bit off characters. */ -#define INLCR 0000100 /* Map NL to CR on input. */ -#define IGNCR 0000200 /* Ignore CR. */ -#define ICRNL 0000400 /* Map CR to NL on input. */ -#define IUCLC 0001000 /* Map upper case to lower case on input. */ -#define IXON 0002000 /* Enable start/stop output control. */ -#define IXANY 0004000 /* Any character will restart after stop. */ -#define IXOFF 0010000 /* Enable start/stop input control. */ -#define IMAXBEL 0020000 /* Ring bell when input queue is full. */ -#define IUTF8 0040000 /* Input is UTF8. */ - -/* c_oflag bits */ -#define OPOST 0000001 /* Perform output processing. */ -#define OLCUC 0000002 /* Map lower case to upper case on output. */ -#define ONLCR 0000004 /* Map NL to CR-NL on output. */ -#define OCRNL 0000010 -#define ONOCR 0000020 -#define ONLRET 0000040 -#define OFILL 0000100 -#define OFDEL 0000200 -#if defined __USE_MISC || defined __USE_XOPEN -# define NLDLY 0000400 -# define NL0 0000000 -# define NL1 0000400 -# define CRDLY 0003000 -# define CR0 0000000 -# define CR1 0001000 -# define CR2 0002000 -# define CR3 0003000 -# define TABDLY 0014000 -# define TAB0 0000000 -# define TAB1 0004000 -# define TAB2 0010000 -# define TAB3 0014000 -# define BSDLY 0020000 -# define BS0 0000000 -# define BS1 0020000 -# define FFDLY 0100000 -# define FF0 0000000 -# define FF1 0100000 -#endif - -#define VTDLY 0040000 -#define VT0 0000000 -#define VT1 0040000 - -#ifdef __USE_MISC -# define XTABS 0014000 -#endif - -/* c_cflag bit meaning */ -#ifdef __USE_MISC -# define CBAUD 0010017 -#endif -#define B0 0000000 /* hang up */ -#define B50 0000001 -#define B75 0000002 -#define B110 0000003 -#define B134 0000004 -#define B150 0000005 -#define B200 0000006 -#define B300 0000007 -#define B600 0000010 -#define B1200 0000011 -#define B1800 0000012 -#define B2400 0000013 -#define B4800 0000014 -#define B9600 0000015 -#define B19200 0000016 -#define B38400 0000017 -#ifdef __USE_MISC -# define EXTA B19200 -# define EXTB B38400 -#endif -#define CSIZE 0000060 /* Number of bits per byte (mask). */ -#define CS5 0000000 /* 5 bits per byte. */ -#define CS6 0000020 /* 6 bits per byte. */ -#define CS7 0000040 /* 7 bits per byte. */ -#define CS8 0000060 /* 8 bits per byte. */ -#define CSTOPB 0000100 /* Two stop bits instead of one. */ -#define CREAD 0000200 /* Enable receiver. */ -#define PARENB 0000400 /* Parity enable. */ -#define PARODD 0001000 /* Odd parity instead of even. */ -#define HUPCL 0002000 /* Hang up on last close. */ -#define CLOCAL 0004000 /* Ignore modem status lines. */ -#ifdef __USE_MISC -# define CBAUDEX 0010000 -#endif -#define B57600 0010001 -#define B115200 0010002 -#define B230400 0010003 -#define B460800 0010004 -#define B500000 0010005 -#define B576000 0010006 -#define B921600 0010007 -#define B1000000 0010010 -#define B1152000 0010011 -#define B1500000 0010012 -#define B2000000 0010013 -#define B2500000 0010014 -#define B3000000 0010015 -#define B3500000 0010016 -#define B4000000 0010017 -#define __MAX_BAUD B4000000 -#ifdef __USE_MISC -# define CIBAUD 002003600000 /* input baud rate (not used) */ -# define CRTSCTS 020000000000 /* flow control */ -#endif - -/* c_lflag bits */ -#define ISIG 0000001 /* Enable signals. */ -#define ICANON 0000002 /* Do erase and kill processing. */ -#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K) -# define XCASE 0000004 -#endif -#define ECHO 0000010 /* Enable echo. */ -#define ECHOE 0000020 /* Visual erase for ERASE. */ -#define ECHOK 0000040 /* Echo NL after KILL. */ -#define ECHONL 0000100 /* Echo NL even if ECHO is off. */ -#define NOFLSH 0000200 /* Disable flush after interrupt. */ -#define IEXTEN 0000400 /* Enable DISCARD and LNEXT. */ -#ifdef __USE_MISC -# define ECHOCTL 0001000 /* Echo control characters as ^X. */ -# define ECHOPRT 0002000 /* Hardcopy visual erase. */ -# define ECHOKE 0004000 /* Visual erase for KILL. */ -# define FLUSHO 0020000 -# define PENDIN 0040000 /* Retype pending input (state). */ -#endif -#define TOSTOP 0100000 /* Send SIGTTOU for background output. */ -#define ITOSTOP TOSTOP -#ifdef __USE_MISC -# define EXTPROC 0200000 -#endif - -#ifdef __USE_MISC -/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ -# define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ -#endif - -/* tcflow() and TCXONC use these */ -#define TCOOFF 0 /* Suspend output. */ -#define TCOON 1 /* Restart suspended output. */ -#define TCIOFF 2 /* Send a STOP character. */ -#define TCION 3 /* Send a START character. */ - -/* tcflush() and TCFLSH use these */ -#define TCIFLUSH 0 /* Discard data received but not yet read. */ -#define TCOFLUSH 1 /* Discard data written but not yet sent. */ -#define TCIOFLUSH 2 /* Discard all pending data. */ - -/* tcsetattr uses these */ -#define TCSANOW 0x540e /* Same as TCSETS; change immediately. */ -#define TCSADRAIN 0x540f /* Same as TCSETSW; change when pending output is written. */ -#define TCSAFLUSH 0x5410 /* Same as TCSETSF; flush pending input before changing. */ - -#define _IOT_termios /* Hurd ioctl type field. */ \ - _IOT (_IOTS (cflag_t), 4, _IOTS (cc_t), NCCS, _IOTS (speed_t), 2) diff --git a/sysdeps/unix/sysv/linux/mips/bits/timerfd.h b/sysdeps/unix/sysv/linux/mips/bits/timerfd.h deleted file mode 100644 index ebf2608d50..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/timerfd.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_TIMERFD_H -# error "Never use directly; include instead." -#endif - -/* Bits to be set in the FLAGS parameter of `timerfd_create'. */ -enum - { - TFD_CLOEXEC = 02000000, -#define TFD_CLOEXEC TFD_CLOEXEC - TFD_NONBLOCK = 00000200 -#define TFD_NONBLOCK TFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/stack_t.h b/sysdeps/unix/sysv/linux/mips/bits/types/stack_t.h deleted file mode 100644 index b9635ad18a..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/types/stack_t.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Define stack_t. MIPS Linux version. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __stack_t_defined -#define __stack_t_defined 1 - -#define __need_size_t -#include - -/* Structure describing a signal stack. */ -typedef struct - { - void *ss_sp; - size_t ss_size; - int ss_flags; - } stack_t; - -#endif diff --git a/sysdeps/unix/sysv/linux/mips/brk.c b/sysdeps/unix/sysv/linux/mips/brk.c deleted file mode 100644 index f91becffac..0000000000 --- a/sysdeps/unix/sysv/linux/mips/brk.c +++ /dev/null @@ -1,47 +0,0 @@ -/* brk system call for Linux/MIPS. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -void *__curbrk = 0; - -/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt - to work around different old braindamage in the old Linux/x86 ELF - dynamic linker. Sigh. */ -weak_alias (__curbrk, ___brk_addr) - -int -__brk (void *addr) -{ - INTERNAL_SYSCALL_DECL (err); - void *newbrk; - - newbrk = (void *) INTERNAL_SYSCALL (brk, err, 1, addr); - __curbrk = newbrk; - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/mips/clone.S b/sysdeps/unix/sysv/linux/mips/clone.S deleted file mode 100644 index 8b79457b1f..0000000000 --- a/sysdeps/unix/sysv/linux/mips/clone.S +++ /dev/null @@ -1,152 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ralf Baechle , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#include -#define _ERRNO_H 1 -#include -#include - -#define CLONE_VM 0x00000100 -#define CLONE_THREAD 0x00010000 - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - void *parent_tidptr, void *tls, void *child_tidptr) */ - - .text - .set nomips16 -#if _MIPS_SIM == _ABIO32 -# define EXTRA_LOCALS 1 -#else -# define EXTRA_LOCALS 0 -#endif -LOCALSZ= 4 -FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK -GPOFF= FRAMESZ-(1*SZREG) -NESTED(__clone,4*SZREG,sp) -#ifdef __PIC__ - SETUP_GP -#endif - PTR_SUBU sp, FRAMESZ - cfi_adjust_cfa_offset (FRAMESZ) - SETUP_GP64_STACK (GPOFF, __clone) -#ifdef __PIC__ - SAVE_GP (GPOFF) -#endif -#ifdef PROF - .set noat - move $1,ra - jal _mcount - .set at -#endif - - - /* Sanity check arguments. */ - li v0,EINVAL - beqz a0,L(error) /* No NULL function pointers. */ - beqz a1,L(error) /* No NULL stack pointers. */ - - PTR_SUBU a1,32 /* Reserve argument save space. */ - PTR_S a0,0(a1) /* Save function pointer. */ - PTR_S a3,PTRSIZE(a1) /* Save argument pointer. */ - LONG_S a2,(PTRSIZE*2)(a1) /* Save clone flags. */ - - move a0,a2 - - /* Shuffle in the last three arguments - arguments 5, 6, and 7 to - this function, but arguments 3, 4, and 5 to the syscall. */ -#if _MIPS_SIM == _ABIO32 - PTR_L a2,(FRAMESZ+PTRSIZE+PTRSIZE+16)(sp) - PTR_S a2,16(sp) - PTR_L a2,(FRAMESZ+16)(sp) - PTR_L a3,(FRAMESZ+PTRSIZE+16)(sp) -#else - move a2,a4 - move a3,a5 - move a4,a6 -#endif - - /* Do the system call */ - li v0,__NR_clone - cfi_endproc - syscall - - bnez a3,L(error) - beqz v0,L(thread_start) - - /* Successful return from the parent */ - cfi_startproc - cfi_adjust_cfa_offset (FRAMESZ) - SETUP_GP64_STACK_CFI (GPOFF) - cfi_remember_state - RESTORE_GP64_STACK - PTR_ADDU sp, FRAMESZ - cfi_adjust_cfa_offset (-FRAMESZ) - ret - - /* Something bad happened -- no child created */ -L(error): - cfi_restore_state -#ifdef __PIC__ - PTR_LA t9,__syscall_error - RESTORE_GP64_STACK - PTR_ADDU sp, FRAMESZ - cfi_adjust_cfa_offset (-FRAMESZ) - jr t9 -#else - RESTORE_GP64_STACK - PTR_ADDU sp, FRAMESZ - cfi_adjust_cfa_offset (-FRAMESZ) - j __syscall_error -#endif - END(__clone) - -/* Load up the arguments to the function. Put this block of code in - its own function so that we can terminate the stack trace with our - debug info. */ - -ENTRY(__thread_start) -L(thread_start): - cfi_undefined ($31) - /* cp is already loaded. */ - SAVE_GP (GPOFF) - /* The stackframe has been created on entry of clone(). */ - - /* Restore the arg for user's function. */ - PTR_L t9,0(sp) /* Function pointer. */ - PTR_L a0,PTRSIZE(sp) /* Argument pointer. */ - - /* Call the user's function. */ - jal t9 - - /* Call _exit rather than doing it inline for breakpoint purposes. */ - move a0,v0 -#ifdef __PIC__ - PTR_LA t9,_exit - jalr t9 -#else - jal _exit -#endif - - END(__thread_start) - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/mips/configure b/sysdeps/unix/sysv/linux/mips/configure deleted file mode 100644 index a5513fad48..0000000000 --- a/sysdeps/unix/sysv/linux/mips/configure +++ /dev/null @@ -1,477 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/mips. - - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if (_MIPS_SIM != _ABIO32) - #error Not O32 ABI - #endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_mips_abi=o32 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if (_MIPS_SIM != _ABIN32) - #error Not N32 ABI - #endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_mips_abi=n32 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if (_MIPS_SIM != _ABI64) - #error Not 64 ABI - #endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_mips_abi=n64 -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test -z "$libc_mips_abi"; then - as_fn_error $? "could not determine what ABI the compiler is using" "$LINENO" 5 -fi - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if !defined(__mips_soft_float) - #error Not soft ABI - #endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_mips_float=soft -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if !defined(__mips_hard_float) - #error Not hard ABI - #endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_mips_float=hard -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test -z "$libc_mips_float"; then - as_fn_error $? "could not determine if compiler is using hard or soft floating point ABI" "$LINENO" 5 -fi - -libc_mips_o32_fp= -libc_cv_mips_fp64= -libc_cv_mips_modd_spreg= - -if test x"$libc_mips_abi" = xo32 -a x"$libc_mips_float" = xhard; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if !defined(__mips_fpr) - #error Missing FPR sizes - #endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if (__mips_fpr != 32) - #error Not FP32 - #endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_mips_o32_fp=32 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if (__mips_fpr != 0) || !defined(_MIPS_SPFPSET) || (_MIPS_SPFPSET != 16) - #error Not FPXX (without odd single-precision registers) - #endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_mips_o32_fp=xx -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if (__mips_fpr != 0) - #error Not FPXX (with odd single precision registers) - #endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_mips_o32_fp=xxo -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if (__mips_fpr != 64) || !defined(_MIPS_SPFPSET) || (_MIPS_SPFPSET != 16) - #error Not FP64A - #endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_mips_o32_fp=64a -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if (__mips_fpr != 64) - #error Not FP64 - #endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_mips_o32_fp=64 -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - if { ac_try='${CC-cc} -mfp64 -xc /dev/null -S -o /dev/null' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - libc_cv_mips_fp64=yes -else - libc_cv_mips_fp64=no -fi - if { ac_try='${CC-cc} -Werror -modd-spreg -xc /dev/null -S -o /dev/null' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - libc_cv_mips_modd_spreg=yes -else - libc_cv_mips_modd_spreg=no -fi -fi -config_vars="$config_vars -o32-fpabi = ${libc_mips_o32_fp}" -config_vars="$config_vars -has-mpf64 = ${libc_cv_mips_fp64}" -config_vars="$config_vars -has-modd-spreg = ${libc_cv_mips_modd_spreg}" - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #if !defined(PR_GET_FP_MODE) || !defined(PR_SET_FP_MODE) - #error New prctl support for setting FP modes not found - #endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_mips_mode_switch=yes -else - libc_mips_mode_switch=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -config_vars="$config_vars -mips-mode-switch = ${libc_mips_mode_switch}" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler is using the 2008 NaN encoding" >&5 -$as_echo_n "checking whether the compiler is using the 2008 NaN encoding... " >&6; } -if ${libc_cv_mips_nan2008+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -dnl -#ifdef __mips_nan2008 -yes -#endif -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - libc_cv_mips_nan2008=yes -else - libc_cv_mips_nan2008=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mips_nan2008" >&5 -$as_echo "$libc_cv_mips_nan2008" >&6; } - -libc_mips_nan= -if test x"$libc_cv_mips_nan2008" = xyes; then - libc_mips_nan=_2008 -fi - -config_vars="$config_vars -default-abi = ${libc_mips_abi}_${libc_mips_float}${libc_mips_nan}" - -case $machine in -mips/mips64/n64/*) - test -n "$libc_cv_slibdir" || -case "$prefix" in -/usr | /usr/) - libc_cv_slibdir=/lib64 - libc_cv_rtlddir=/lib64 - if test "$libdir" = '${exec_prefix}/lib'; then - libdir='${exec_prefix}/lib64'; - # Locale data can be shared between 32-bit and 64-bit libraries. - libc_cv_complocaledir='${exec_prefix}/lib/locale' - fi - ;; -esac - ;; -mips/mips64/n32/*) - test -n "$libc_cv_slibdir" || -case "$prefix" in -/usr | /usr/) - libc_cv_slibdir=/lib32 - libc_cv_rtlddir=/lib32 - if test "$libdir" = '${exec_prefix}/lib'; then - libdir='${exec_prefix}/lib32'; - # Locale data can be shared between 32-bit and 64-bit libraries. - libc_cv_complocaledir='${exec_prefix}/lib/locale' - fi - ;; -esac - ;; -esac - -libc_cv_gcc_unwind_find_fde=yes - -if test -z "$arch_minimum_kernel"; then - if test x$libc_cv_mips_nan2008 = xyes; then - arch_minimum_kernel=4.5.0 - fi -fi diff --git a/sysdeps/unix/sysv/linux/mips/configure.ac b/sysdeps/unix/sysv/linux/mips/configure.ac deleted file mode 100644 index 9147aa4582..0000000000 --- a/sysdeps/unix/sysv/linux/mips/configure.ac +++ /dev/null @@ -1,136 +0,0 @@ -sinclude(./aclocal.m4)dnl Autoconf lossage -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/mips. - -AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([ - #if (_MIPS_SIM != _ABIO32) - #error Not O32 ABI - #endif])], - [libc_mips_abi=o32], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([ - #if (_MIPS_SIM != _ABIN32) - #error Not N32 ABI - #endif])], - [libc_mips_abi=n32], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([ - #if (_MIPS_SIM != _ABI64) - #error Not 64 ABI - #endif])], - [libc_mips_abi=n64], - [])])]) - -if test -z "$libc_mips_abi"; then - AC_MSG_ERROR([could not determine what ABI the compiler is using]) -fi - -AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([ - #if !defined(__mips_soft_float) - #error Not soft ABI - #endif])], - [libc_mips_float=soft], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([ - #if !defined(__mips_hard_float) - #error Not hard ABI - #endif])], - [libc_mips_float=hard], - [])]) - -if test -z "$libc_mips_float"; then - AC_MSG_ERROR([could not determine if compiler is using hard or soft floating point ABI]) -fi - -libc_mips_o32_fp= -libc_cv_mips_fp64= -libc_cv_mips_modd_spreg= - -if test x"$libc_mips_abi" = xo32 -a x"$libc_mips_float" = xhard; then - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([ - #if !defined(__mips_fpr) - #error Missing FPR sizes - #endif])], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([ - #if (__mips_fpr != 32) - #error Not FP32 - #endif])], - [libc_mips_o32_fp=32], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([ - #if (__mips_fpr != 0) || !defined(_MIPS_SPFPSET) || (_MIPS_SPFPSET != 16) - #error Not FPXX (without odd single-precision registers) - #endif])], - [libc_mips_o32_fp=xx], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([ - #if (__mips_fpr != 0) - #error Not FPXX (with odd single precision registers) - #endif])], - [libc_mips_o32_fp=xxo], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([ - #if (__mips_fpr != 64) || !defined(_MIPS_SPFPSET) || (_MIPS_SPFPSET != 16) - #error Not FP64A - #endif])], - [libc_mips_o32_fp=64a], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([ - #if (__mips_fpr != 64) - #error Not FP64 - #endif])], - [libc_mips_o32_fp=64], - [])])])])])], - []) - - LIBC_TRY_CC_OPTION([-mfp64], [libc_cv_mips_fp64=yes], [libc_cv_mips_fp64=no]) - LIBC_TRY_CC_OPTION([-Werror -modd-spreg], [libc_cv_mips_modd_spreg=yes], [libc_cv_mips_modd_spreg=no]) -fi -LIBC_CONFIG_VAR([o32-fpabi],[${libc_mips_o32_fp}]) -LIBC_CONFIG_VAR([has-mpf64],[${libc_cv_mips_fp64}]) -LIBC_CONFIG_VAR([has-modd-spreg],[${libc_cv_mips_modd_spreg}]) - -AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([ - #include - #if !defined(PR_GET_FP_MODE) || !defined(PR_SET_FP_MODE) - #error New prctl support for setting FP modes not found - #endif])], - [libc_mips_mode_switch=yes], - [libc_mips_mode_switch=no]) -LIBC_CONFIG_VAR([mips-mode-switch],[${libc_mips_mode_switch}]) - -AC_CACHE_CHECK([whether the compiler is using the 2008 NaN encoding], - libc_cv_mips_nan2008, [AC_EGREP_CPP(yes, [dnl -#ifdef __mips_nan2008 -yes -#endif], libc_cv_mips_nan2008=yes, libc_cv_mips_nan2008=no)]) - -libc_mips_nan= -if test x"$libc_cv_mips_nan2008" = xyes; then - libc_mips_nan=_2008 -fi - -LIBC_CONFIG_VAR([default-abi], - [${libc_mips_abi}_${libc_mips_float}${libc_mips_nan}]) - -case $machine in -mips/mips64/n64/*) - LIBC_SLIBDIR_RTLDDIR([lib64], [lib64]) - ;; -mips/mips64/n32/*) - LIBC_SLIBDIR_RTLDDIR([lib32], [lib32]) - ;; -esac - -libc_cv_gcc_unwind_find_fde=yes - -if test -z "$arch_minimum_kernel"; then - if test x$libc_cv_mips_nan2008 = xyes; then - arch_minimum_kernel=4.5.0 - fi -fi diff --git a/sysdeps/unix/sysv/linux/mips/dl-cache.h b/sysdeps/unix/sysv/linux/mips/dl-cache.h deleted file mode 100644 index 573a5dcb9f..0000000000 --- a/sysdeps/unix/sysv/linux/mips/dl-cache.h +++ /dev/null @@ -1,72 +0,0 @@ -/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#if ((defined __mips_nan2008 && !defined HAVE_MIPS_NAN2008) \ - || (!defined __mips_nan2008 && defined HAVE_MIPS_NAN2008)) -# error "Configuration inconsistency: __mips_nan2008 != HAVE_MIPS_NAN2008, overridden CFLAGS?" -#endif - -/* Redefine the cache ID for new ABIs and 2008 NaN support; legacy o32 - keeps using the generic check. */ -#ifdef __mips_nan2008 -# if _MIPS_SIM == _ABIO32 -# define _DL_CACHE_DEFAULT_ID (FLAG_MIPS_LIB32_NAN2008 | FLAG_ELF_LIBC6) -# elif _MIPS_SIM == _ABI64 -# define _DL_CACHE_DEFAULT_ID (FLAG_MIPS64_LIBN64_NAN2008 | FLAG_ELF_LIBC6) -# elif _MIPS_SIM == _ABIN32 -# define _DL_CACHE_DEFAULT_ID (FLAG_MIPS64_LIBN32_NAN2008 | FLAG_ELF_LIBC6) -# endif -#else -# if _MIPS_SIM == _ABI64 -# define _DL_CACHE_DEFAULT_ID (FLAG_MIPS64_LIBN64 | FLAG_ELF_LIBC6) -# elif _MIPS_SIM == _ABIN32 -# define _DL_CACHE_DEFAULT_ID (FLAG_MIPS64_LIBN32 | FLAG_ELF_LIBC6) -# endif -#endif - -#ifdef _DL_CACHE_DEFAULT_ID -# define _dl_cache_check_flags(flags) \ - ((flags) == _DL_CACHE_DEFAULT_ID) -#endif - -#define add_system_dir(dir) \ - do \ - { \ - size_t len = strlen (dir); \ - char path[len + 3]; \ - memcpy (path, dir, len + 1); \ - if (len >= 6 \ - && (! memcmp (path + len - 6, "/lib64", 6) \ - || ! memcmp (path + len - 6, "/lib32", 6))) \ - { \ - len -= 2; \ - path[len] = '\0'; \ - } \ - add_dir (path); \ - if (len >= 4 && ! memcmp (path + len - 4, "/lib", 4)) \ - { \ - memcpy (path + len, "32", 3); \ - add_dir (path); \ - memcpy (path + len, "64", 3); \ - add_dir (path); \ - } \ - } while (0) - -#include_next diff --git a/sysdeps/unix/sysv/linux/mips/dl-static.c b/sysdeps/unix/sysv/linux/mips/dl-static.c deleted file mode 100644 index 8884fadaf2..0000000000 --- a/sysdeps/unix/sysv/linux/mips/dl-static.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Variable initialization. MIPS version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifdef SHARED - -void -_dl_var_init (void *array[]) -{ - /* It has to match "variables" below. */ - enum - { - DL_PAGESIZE = 0 - }; - - GLRO(dl_pagesize) = *((size_t *) array[DL_PAGESIZE]); -} - -#else - -static void *variables[] = -{ - &GLRO(dl_pagesize) -}; - -static void -_dl_unprotect_relro (struct link_map *l) -{ - ElfW(Addr) start = ((l->l_addr + l->l_relro_addr) - & ~(GLRO(dl_pagesize) - 1)); - ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size) - & ~(GLRO(dl_pagesize) - 1)); - - if (start != end) - __mprotect ((void *) start, end - start, PROT_READ | PROT_WRITE); -} - -void -_dl_static_init (struct link_map *l) -{ - struct link_map *rtld_map = l; - struct r_scope_elem **scope; - const ElfW(Sym) *ref = NULL; - lookup_t loadbase; - void (*f) (void *[]); - size_t i; - - loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope, - NULL, 0, 1, NULL); - - for (scope = l->l_local_scope; *scope != NULL; scope++) - for (i = 0; i < (*scope)->r_nlist; i++) - if ((*scope)->r_list[i] == loadbase) - { - rtld_map = (*scope)->r_list[i]; - break; - } - - if (ref != NULL) - { - f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref); - _dl_unprotect_relro (rtld_map); - f (variables); - _dl_protect_relro (rtld_map); - } -} - -#endif diff --git a/sysdeps/unix/sysv/linux/mips/getcontext.S b/sysdeps/unix/sysv/linux/mips/getcontext.S deleted file mode 100644 index 64de2ebf2e..0000000000 --- a/sysdeps/unix/sysv/linux/mips/getcontext.S +++ /dev/null @@ -1,154 +0,0 @@ -/* Save current context. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maciej W. Rozycki . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#include "ucontext_i.h" - -/* int getcontext (ucontext_t *ucp) */ - - .text - .set nomips16 -LOCALSZ = 0 -MASK = 0x00000000 -#ifdef __PIC__ -LOCALSZ = 1 /* save gp */ -# if _MIPS_SIM != _ABIO32 -MASK = 0x10000000 -# endif -#endif -FRAMESZ = ((LOCALSZ * SZREG) + ALSZ) & ALMASK -GPOFF = FRAMESZ - (1 * SZREG) - -NESTED (__getcontext, FRAMESZ, ra) - .mask MASK, 0 - .fmask 0x00000000, 0 - -#ifdef __PIC__ - SETUP_GP - - move a2, sp -# define _SP a2 - -# if _MIPS_SIM != _ABIO32 - move a3, gp -# define _GP a3 -# endif - - PTR_ADDIU sp, -FRAMESZ - cfi_adjust_cfa_offset (FRAMESZ) - SETUP_GP64_STACK (GPOFF, __getcontext) - SAVE_GP (GPOFF) - -#else /* ! __PIC__ */ -# define _SP sp -# define _GP gp - -#endif /* ! __PIC__ */ - -#ifdef PROF - .set noat - move AT, ra - jal _mcount - .set at -#endif - - /* Store a magic flag. */ - li v1, 1 - REG_S v1, (0 * SZREG + MCONTEXT_GREGS)(a0) /* zero */ - - REG_S s0, (16 * SZREG + MCONTEXT_GREGS)(a0) - REG_S s1, (17 * SZREG + MCONTEXT_GREGS)(a0) - REG_S s2, (18 * SZREG + MCONTEXT_GREGS)(a0) - REG_S s3, (19 * SZREG + MCONTEXT_GREGS)(a0) - REG_S s4, (20 * SZREG + MCONTEXT_GREGS)(a0) - REG_S s5, (21 * SZREG + MCONTEXT_GREGS)(a0) - REG_S s6, (22 * SZREG + MCONTEXT_GREGS)(a0) - REG_S s7, (23 * SZREG + MCONTEXT_GREGS)(a0) -#if ! defined (__PIC__) || _MIPS_SIM != _ABIO32 - REG_S _GP, (28 * SZREG + MCONTEXT_GREGS)(a0) -#endif - REG_S _SP, (29 * SZREG + MCONTEXT_GREGS)(a0) - REG_S fp, (30 * SZREG + MCONTEXT_GREGS)(a0) - REG_S ra, (31 * SZREG + MCONTEXT_GREGS)(a0) - REG_S ra, MCONTEXT_PC(a0) - -#ifdef __mips_hard_float -# if _MIPS_SIM == _ABI64 - s.d fs0, (24 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs1, (25 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs2, (26 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs3, (27 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs5, (29 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs6, (30 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs7, (31 * SZREG + MCONTEXT_FPREGS)(a0) - -# else /* _MIPS_SIM != _ABI64 */ - s.d fs0, (20 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs1, (22 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs2, (24 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs3, (26 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs5, (30 * SZREG + MCONTEXT_FPREGS)(a0) - -# endif /* _MIPS_SIM != _ABI64 */ - - cfc1 v1, fcr31 - sw v1, MCONTEXT_FPC_CSR(a0) -#endif /* __mips_hard_float */ - -/* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ - li a3, _NSIG8 - PTR_ADDU a2, a0, UCONTEXT_SIGMASK - move a1, zero - li a0, SIG_BLOCK - - li v0, SYS_ify (rt_sigprocmask) - syscall - bnez a3, 99f - cfi_remember_state - -#ifdef __PIC__ - RESTORE_GP64_STACK - PTR_ADDIU sp, FRAMESZ - cfi_adjust_cfa_offset (-FRAMESZ) -#endif - move v0, zero - jr ra - -99: - cfi_restore_state -#ifdef __PIC__ - PTR_LA t9, JUMPTARGET (__syscall_error) - RESTORE_GP64_STACK - PTR_ADDIU sp, FRAMESZ - cfi_adjust_cfa_offset (-FRAMESZ) - jr t9 - -#else /* ! __PIC__ */ - - j JUMPTARGET (__syscall_error) -#endif /* ! __PIC__ */ -PSEUDO_END (__getcontext) - -weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/mips/getmsg.c b/sysdeps/unix/sysv/linux/mips/getmsg.c deleted file mode 100644 index 3a1fa08525..0000000000 --- a/sysdeps/unix/sysv/linux/mips/getmsg.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/getrlimit64.c b/sysdeps/unix/sysv/linux/mips/getrlimit64.c deleted file mode 100644 index 5193722bbc..0000000000 --- a/sysdeps/unix/sysv/linux/mips/getrlimit64.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if _MIPS_SIM == _ABIO32 || _MIPS_SIM == _ABIN32 - -# include - -# define getrlimit64 __new_getrlimit64 -# include -# undef getrlimit64 - -versioned_symbol (libc, __getrlimit64, getrlimit64, GLIBC_2_19); -strong_alias (__getrlimit64, __GI_getrlimit64) - -# if SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_19) - -/* RLIM64_INFINITY was supposed to be a glibc convention rather than - anything seen by the kernel, but it ended being passed to the kernel - through the prlimit64 syscall. Given that a lot of binaries with - the wrong constant value are in the wild, provide a wrapper function - fixing the value after the syscall. */ - -# define OLD_RLIM64_INFINITY 0x7fffffffffffffffULL - -int -attribute_compat_text_section -__old_getrlimit64 (enum __rlimit_resource resource, - struct rlimit64 *rlimits) -{ - struct rlimit64 krlimits; - - if (__getrlimit64 (resource, &krlimits) < 0) - return -1; - - if (krlimits.rlim_cur == RLIM64_INFINITY) - rlimits->rlim_cur = OLD_RLIM64_INFINITY; - else - rlimits->rlim_cur = krlimits.rlim_cur; - if (krlimits.rlim_max == RLIM64_INFINITY) - rlimits->rlim_max = OLD_RLIM64_INFINITY; - else - rlimits->rlim_max = krlimits.rlim_max; - - return 0; -} - -compat_symbol (libc, __old_getrlimit64, getrlimit64, GLIBC_2_2); -# endif - -#else /* !_ABI_O32 && !_ABI_N32 */ -# include -#endif diff --git a/sysdeps/unix/sysv/linux/mips/getsysstats.c b/sysdeps/unix/sysv/linux/mips/getsysstats.c deleted file mode 100644 index 625df807c2..0000000000 --- a/sysdeps/unix/sysv/linux/mips/getsysstats.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Determine various system internal values, Linux/MIPS version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -/* We need to define a special parser for /proc/cpuinfo. */ -#define GET_NPROCS_PARSER(FD, BUFFER, CP, RE, BUFFER_END, RESULT) \ - do \ - { \ - (RESULT) = 0; \ - /* Read all lines and count the lines starting with the string \ - "cpu model". We don't have to fear extremely long lines since \ - the kernel will not generate them. 8192 bytes are really \ - enough. */ \ - char *l; \ - while ((l = next_line (FD, BUFFER, &CP, &RE, BUFFER_END)) != NULL) \ - if (strncmp (l, "cpu model", 9) == 0) \ - ++(RESULT); \ - } \ - while (0) - -#include diff --git a/sysdeps/unix/sysv/linux/mips/init-first.c b/sysdeps/unix/sysv/linux/mips/init-first.c deleted file mode 100644 index 7892c0afde..0000000000 --- a/sysdeps/unix/sysv/linux/mips/init-first.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Initialization code run first thing by the ELF startup code. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef SHARED -# include -# include - -int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) attribute_hidden; -int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *); - -static inline void -_libc_vdso_platform_setup (void) -{ - PREPARE_VERSION_KNOWN (linux26, LINUX_2_6); - - void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux26); - PTR_MANGLE (p); - VDSO_SYMBOL (gettimeofday) = p; - - p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26); - PTR_MANGLE (p); - VDSO_SYMBOL (clock_gettime) = p; -} - -# define VDSO_SETUP _libc_vdso_platform_setup -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h deleted file mode 100644 index d5d35afa4d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/kernel-features.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#include_next - -/* The MIPS kernel does not support futex_atomic_cmpxchg_inatomic if - emulating LL/SC. */ -#if __mips == 1 || defined _MIPS_ARCH_R5900 -# undef __ASSUME_SET_ROBUST_LIST -#endif - -/* Define this if your 32-bit syscall API requires 64-bit register - pairs to start with an even-number register. */ -#if _MIPS_SIM == _ABIO32 -# define __ASSUME_ALIGNED_REGISTER_PAIRS 1 -/* mips32 only supports ipc syscall. */ -# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - -/* The o32 MIPS fadvise64 syscall behaves as fadvise64_64. */ -# define __ASSUME_FADVISE64_AS_64_64 1 - -/* mips32 support wire-up network syscalls. */ -# define __ASSUME_RECV_SYSCALL 1 -# define __ASSUME_SEND_SYSCALL 1 -#endif - -/* Define that mips64-n32 is a ILP32 ABI to set the correct interface to - pass 64-bits values through syscalls. */ -#if _MIPS_SIM == _ABIN32 -# define __ASSUME_WORDSIZE64_ILP32 1 -#endif diff --git a/sysdeps/unix/sysv/linux/mips/kernel_rt_sigframe.h b/sysdeps/unix/sysv/linux/mips/kernel_rt_sigframe.h deleted file mode 100644 index e870b207de..0000000000 --- a/sysdeps/unix/sysv/linux/mips/kernel_rt_sigframe.h +++ /dev/null @@ -1,12 +0,0 @@ -#include - -/* Linux kernel RT signal frame. */ -typedef struct kernel_rt_sigframe - { - uint32_t rs_ass[4]; - uint32_t rs_code[2]; - siginfo_t rs_info; - struct ucontext rs_uc; - uint32_t rs_altcode[8] __attribute__ ((__aligned__ (1 << 7))); - } -kernel_rt_sigframe_t; diff --git a/sysdeps/unix/sysv/linux/mips/kernel_sigaction.h b/sysdeps/unix/sysv/linux/mips/kernel_sigaction.h deleted file mode 100644 index b6f52cc9c9..0000000000 --- a/sysdeps/unix/sysv/linux/mips/kernel_sigaction.h +++ /dev/null @@ -1,40 +0,0 @@ -/* This is the sigaction structure from the Linux 2.1.24 kernel. */ - -#include - -#define HAVE_SA_RESTORER - -struct old_kernel_sigaction { - unsigned int sa_flags; - __sighandler_t k_sa_handler; - unsigned long sa_mask; - unsigned int __pad0[3]; /* reserved, keep size constant */ - - /* Abi says here follows reserved int[2] */ - void (*sa_restorer)(void); -#if (_MIPS_SZPTR < 64) - /* - * For 32 bit code we have to pad struct sigaction to get - * constant size for the ABI - */ - int pad1[1]; /* reserved */ -#endif -}; - - -#define _KERNEL_NSIG 128 -#define _KERNEL_NSIG_BPW _MIPS_SZLONG -#define _KERNEL_NSIG_WORDS (_KERNEL_NSIG / _KERNEL_NSIG_BPW) - -typedef struct { - unsigned long sig[_KERNEL_NSIG_WORDS]; -} kernel_sigset_t; - -/* This is the sigaction structure from the Linux 2.1.68 kernel. */ -struct kernel_sigaction { - unsigned int sa_flags; - __sighandler_t k_sa_handler; - kernel_sigset_t sa_mask; - void (*sa_restorer)(void); - int s_resv[1]; /* reserved */ -}; diff --git a/sysdeps/unix/sysv/linux/mips/kernel_stat.h b/sysdeps/unix/sysv/linux/mips/kernel_stat.h deleted file mode 100644 index 388df1bfff..0000000000 --- a/sysdeps/unix/sysv/linux/mips/kernel_stat.h +++ /dev/null @@ -1,60 +0,0 @@ -#include -/* As tempting as it is to define XSTAT_IS_XSTAT64 for n64, the - userland data structures are not identical, because of different - padding. */ -/* Definition of `struct stat' used in the kernel. */ -#if _MIPS_SIM != _ABIO32 -struct kernel_stat - { - unsigned int st_dev; - unsigned int __pad1[3]; - unsigned long long st_ino; - unsigned int st_mode; - unsigned int st_nlink; - int st_uid; - int st_gid; - unsigned int st_rdev; - unsigned int __pad2[3]; - long long st_size; - unsigned int st_atime_sec; - unsigned int st_atime_nsec; - unsigned int st_mtime_sec; - unsigned int st_mtime_nsec; - unsigned int st_ctime_sec; - unsigned int st_ctime_nsec; - unsigned int st_blksize; - unsigned int __pad3; - unsigned long long st_blocks; - }; -#else -struct kernel_stat - { - unsigned long int st_dev; - long int __pad1[3]; /* Reserved for network id */ - unsigned long int st_ino; - unsigned long int st_mode; - unsigned long int st_nlink; - long int st_uid; - long int st_gid; - unsigned long int st_rdev; - long int __pad2[2]; - long int st_size; - long int __pad3; - unsigned int st_atime_sec; - unsigned int st_atime_nsec; - unsigned int st_mtime_sec; - unsigned int st_mtime_nsec; - unsigned int st_ctime_sec; - unsigned int st_ctime_nsec; - long int st_blksize; - long int st_blocks; - char st_fstype[16]; /* Filesystem type name, unsupported */ - long st_pad4[8]; - /* Linux specific fields */ - unsigned int st_flags; - unsigned int st_gen; - }; -#endif - -#define XSTAT_IS_XSTAT64 0 -#define STATFS_IS_STATFS64 0 diff --git a/sysdeps/unix/sysv/linux/mips/kernel_termios.h b/sysdeps/unix/sysv/linux/mips/kernel_termios.h deleted file mode 100644 index 7a0cbaec8a..0000000000 --- a/sysdeps/unix/sysv/linux/mips/kernel_termios.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _KERNEL_TERMIOS_H -#define _KERNEL_TERMIOS_H 1 -/* The following corresponds to the values from the Linux 2.1.24 kernel. */ - -#define __KERNEL_NCCS 23 - -struct __kernel_termios - { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline */ - cc_t c_cc[__KERNEL_NCCS]; /* control characters */ - }; - -#endif /* kernel_termios.h */ diff --git a/sysdeps/unix/sysv/linux/mips/ldsodefs.h b/sysdeps/unix/sysv/linux/mips/ldsodefs.h deleted file mode 100644 index daf37321c2..0000000000 --- a/sysdeps/unix/sysv/linux/mips/ldsodefs.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. MIPS. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LDSODEFS_H - -/* Get the real definitions. */ -#include_next - -/* Now define our stuff. */ - -/* We need special support to initialize DSO loaded for statically linked - binaries. */ -extern void _dl_static_init (struct link_map *map); -#undef DL_STATIC_INIT -#define DL_STATIC_INIT(map) _dl_static_init (map) - -/* Allow ABIVERSION == 1, meaning PLTs and copy relocations are - required, with ELFOSABI_SYSV, and ELFOSABI_GNU. */ -#undef VALID_ELF_ABIVERSION -#define VALID_ELF_ABIVERSION(osabi,ver) \ - (ver == 0 \ - || (osabi == ELFOSABI_SYSV && ver < 4) \ - || (osabi == ELFOSABI_GNU && ver < LIBC_ABI_MAX)) - -#endif /* ldsodefs.h */ diff --git a/sysdeps/unix/sysv/linux/mips/libc-abis b/sysdeps/unix/sysv/linux/mips/libc-abis deleted file mode 100644 index 14ff60322a..0000000000 --- a/sysdeps/unix/sysv/linux/mips/libc-abis +++ /dev/null @@ -1,16 +0,0 @@ -# See the copy of this file in libc for detailed explanations. This -# copy needs to include all libc definitions applicable to MIPS; only -# one copy will be used. -# -# Feature Name Configuration -# ------------ ------------- -# -# MIPS PLTs. -MIPS_PLT mips*-*-linux* -# -# Unique symbol definitions for C++. -# Architecture independent, all ELF targets (== all targets) -UNIQUE -# -# MIPS O32 FP64 -MIPS_O32_FP64 mips*-*-linux* diff --git a/sysdeps/unix/sysv/linux/mips/libc-vdso.h b/sysdeps/unix/sysv/linux/mips/libc-vdso.h deleted file mode 100644 index 9792f397ac..0000000000 --- a/sysdeps/unix/sysv/linux/mips/libc-vdso.h +++ /dev/null @@ -1,33 +0,0 @@ -/* VDSO function pointer declarations. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LIBC_VDSO_H -#define _LIBC_VDSO_H - -#ifdef SHARED - -# include - -extern int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) - attribute_hidden; -extern int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *); - -#endif - -#endif /* _LIBC_VDSO_H */ diff --git a/sysdeps/unix/sysv/linux/mips/makecontext.S b/sysdeps/unix/sysv/linux/mips/makecontext.S deleted file mode 100644 index 5c3af04491..0000000000 --- a/sysdeps/unix/sysv/linux/mips/makecontext.S +++ /dev/null @@ -1,198 +0,0 @@ -/* Modify saved context. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maciej W. Rozycki . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#include "ucontext_i.h" - -/* int makecontext (ucontext_t *ucp, (void *func) (), int argc, ...) */ - - .text - .set nomips16 -LOCALSZ = 0 -ARGSZ = 0 -MASK = 0x00000000 -#ifdef __PIC__ -LOCALSZ = 1 /* save gp */ -#endif -#if _MIPS_SIM != _ABIO32 -ARGSZ = 5 /* save a3-a7 */ -# ifdef __PIC__ -MASK = 0x10000000 -# endif -#endif -FRAMESZ = (((ARGSZ + LOCALSZ) * SZREG) + ALSZ) & ALMASK -GPOFF = FRAMESZ - ((ARGSZ + 1) * SZREG) -#if _MIPS_SIM != _ABIO32 -A3OFF = FRAMESZ - (5 * SZREG) /* callee-allocated */ -A4OFF = FRAMESZ - (4 * SZREG) -A5OFF = FRAMESZ - (3 * SZREG) -A6OFF = FRAMESZ - (2 * SZREG) -A7OFF = FRAMESZ - (1 * SZREG) -NARGREGS = 8 -#else -A3OFF = FRAMESZ + (3 * SZREG) /* caller-allocated */ -NARGREGS = 4 -#endif - -NESTED (__makecontext, FRAMESZ, ra) - .mask MASK, -(ARGSZ * SZREG) - .fmask 0x00000000, 0 - -98: -#ifdef __PIC__ - SETUP_GP -#endif - - PTR_ADDIU sp, -FRAMESZ - cfi_adjust_cfa_offset (FRAMESZ) - -#ifdef __PIC__ - SETUP_GP64_STACK (GPOFF, __makecontext) - SAVE_GP (GPOFF) -#endif - -#ifdef PROF - .set noat - move AT, ra - jal _mcount - .set at -#endif - - /* Store args to be passed. */ - REG_S a3, A3OFF(sp) -#if _MIPS_SIM != _ABIO32 - REG_S a4, A4OFF(sp) - REG_S a5, A5OFF(sp) - REG_S a6, A6OFF(sp) - REG_S a7, A7OFF(sp) -#endif - - /* Store a magic flag. */ - li v1, 1 - REG_S v1, (0 * SZREG + MCONTEXT_GREGS)(a0) /* zero */ - - /* Set up the stack. */ - PTR_L t0, STACK_SP(a0) - PTR_L t2, STACK_SIZE(a0) - PTR_ADDIU t1, sp, A3OFF - PTR_ADDU t0, t2 - and t0, ALMASK - blez a2, 2f /* no arguments */ - - /* Store register arguments. */ - PTR_ADDIU t2, a0, MCONTEXT_GREGS + 4 * SZREG - move t3, zero -0: - addiu t3, 1 - REG_L v1, (t1) - PTR_ADDIU t1, SZREG - REG_S v1, (t2) - PTR_ADDIU t2, SZREG - bgeu t3, a2, 2f /* all done */ - bltu t3, NARGREGS, 0b /* next */ - - /* Make room for stack arguments. */ - PTR_SUBU t2, a2, t3 - PTR_SLL t2, 3 - PTR_SUBU t0, t2 - and t0, ALMASK - - /* Store stack arguments. */ - move t2, t0 -1: - addiu t3, 1 - REG_L v1, (t1) - PTR_ADDIU t1, SZREG - REG_S v1, (t2) - PTR_ADDIU t2, SZREG - bltu t3, a2, 1b /* next */ - -2: -#if _MIPS_SIM == _ABIO32 - /* Make room for a0-a3 storage. */ - PTR_ADDIU t0, -(NARGSAVE * SZREG) -#endif - PTR_L v1, UCONTEXT_LINK(a0) -#ifdef __PIC__ - PTR_ADDIU t9, 99f - 98b -#else - PTR_LA t9, 99f -#endif - REG_S t0, (29 * SZREG + MCONTEXT_GREGS)(a0) /* sp */ - REG_S v1, (16 * SZREG + MCONTEXT_GREGS)(a0) /* s0 */ -#ifdef __PIC__ - REG_S gp, (17 * SZREG + MCONTEXT_GREGS)(a0) /* s1 */ -#endif - REG_S t9, (31 * SZREG + MCONTEXT_GREGS)(a0) /* ra */ - REG_S a1, MCONTEXT_PC(a0) - -#ifdef __PIC__ - RESTORE_GP64_STACK - PTR_ADDIU sp, FRAMESZ - cfi_adjust_cfa_offset (-FRAMESZ) -#endif - jr ra - - /* We need to terminate the FDE to stop unwinding if backtrace was - called within a context created by makecontext. */ - cfi_endproc - nop - -99: -#ifdef __PIC__ - move gp, s1 -#endif - move a0, zero - beqz s0, 0f - - /* setcontext (ucp) */ - move a0, s0 -#ifdef __PIC__ - PTR_LA t9, JUMPTARGET (__setcontext) - jalr t9 -# if _MIPS_SIM == _ABIO32 - move gp, s1 -# endif -#else - jal JUMPTARGET (__setcontext) -#endif - move a0, v0 - -0: - /* exit (a0) */ -#ifdef __PIC__ - PTR_LA t9, HIDDEN_JUMPTARGET (exit) - jalr t9 -#else - jal HIDDEN_JUMPTARGET (exit) -#endif - - /* You don't exist, you won't feel anything. */ -1: - lb zero, (zero) - b 1b - - cfi_startproc -PSEUDO_END (__makecontext) - -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/mips/mips32/Makefile b/sysdeps/unix/sysv/linux/mips/mips32/Makefile deleted file mode 100644 index 9439d29dea..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -ifeq ($(subdir),conform) -# For bugs 17786 and 21278. -conformtest-xfail-conds += mips-o32-linux -endif diff --git a/sysdeps/unix/sysv/linux/mips/mips32/Versions b/sysdeps/unix/sysv/linux/mips/mips32/Versions deleted file mode 100644 index 9621fb5cae..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/Versions +++ /dev/null @@ -1,6 +0,0 @@ -libc { - GLIBC_2.19 { - getrlimit64; - setrlimit64; - } -} diff --git a/sysdeps/unix/sysv/linux/mips/mips32/c++-types.data b/sysdeps/unix/sysv/linux/mips/mips32/c++-types.data deleted file mode 100644 index fde53bf337..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:i -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fcntl.c b/sysdeps/unix/sysv/linux/mips/mips32/fcntl.c deleted file mode 100644 index ea951bc4f9..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/fcntl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist deleted file mode 100644 index 907ab331f2..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++ /dev/null @@ -1,2256 +0,0 @@ -GCC_3.0 GCC_3.0 A -GCC_3.0 _Unwind_Find_FDE F -GCC_3.0 __deregister_frame_info_bases F -GCC_3.0 __register_frame_info_bases F -GCC_3.0 __register_frame_info_table_bases F -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_adjust_column F -GLIBC_2.0 _IO_default_doallocate F -GLIBC_2.0 _IO_default_finish F -GLIBC_2.0 _IO_default_pbackfail F -GLIBC_2.0 _IO_default_uflow F -GLIBC_2.0 _IO_default_xsgetn F -GLIBC_2.0 _IO_default_xsputn F -GLIBC_2.0 _IO_do_write F -GLIBC_2.0 _IO_doallocbuf F -GLIBC_2.0 _IO_fclose F -GLIBC_2.0 _IO_fdopen F -GLIBC_2.0 _IO_feof F -GLIBC_2.0 _IO_ferror F -GLIBC_2.0 _IO_fflush F -GLIBC_2.0 _IO_fgetpos F -GLIBC_2.0 _IO_fgets F -GLIBC_2.0 _IO_file_attach F -GLIBC_2.0 _IO_file_close F -GLIBC_2.0 _IO_file_close_it F -GLIBC_2.0 _IO_file_doallocate F -GLIBC_2.0 _IO_file_fopen F -GLIBC_2.0 _IO_file_init F -GLIBC_2.0 _IO_file_jumps D 0x54 -GLIBC_2.0 _IO_file_open F -GLIBC_2.0 _IO_file_overflow F -GLIBC_2.0 _IO_file_read F -GLIBC_2.0 _IO_file_seek F -GLIBC_2.0 _IO_file_seekoff F -GLIBC_2.0 _IO_file_setbuf F -GLIBC_2.0 _IO_file_stat F -GLIBC_2.0 _IO_file_sync F -GLIBC_2.0 _IO_file_underflow F -GLIBC_2.0 _IO_file_write F -GLIBC_2.0 _IO_file_xsputn F -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_flush_all F -GLIBC_2.0 _IO_flush_all_linebuffered F -GLIBC_2.0 _IO_fopen F -GLIBC_2.0 _IO_fprintf F -GLIBC_2.0 _IO_fputs F -GLIBC_2.0 _IO_fread F -GLIBC_2.0 _IO_free_backup_area F -GLIBC_2.0 _IO_fsetpos F -GLIBC_2.0 _IO_ftell F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 _IO_fwrite F -GLIBC_2.0 _IO_getc F -GLIBC_2.0 _IO_getline F -GLIBC_2.0 _IO_gets F -GLIBC_2.0 _IO_init F -GLIBC_2.0 _IO_init_marker F -GLIBC_2.0 _IO_link_in F -GLIBC_2.0 _IO_list_all D 0x4 -GLIBC_2.0 _IO_marker_delta F -GLIBC_2.0 _IO_marker_difference F -GLIBC_2.0 _IO_padn F -GLIBC_2.0 _IO_peekc_locked F -GLIBC_2.0 _IO_popen F -GLIBC_2.0 _IO_printf F -GLIBC_2.0 _IO_proc_close F -GLIBC_2.0 _IO_proc_open F -GLIBC_2.0 _IO_putc F -GLIBC_2.0 _IO_puts F -GLIBC_2.0 _IO_remove_marker F -GLIBC_2.0 _IO_seekmark F -GLIBC_2.0 _IO_seekoff F -GLIBC_2.0 _IO_seekpos F -GLIBC_2.0 _IO_setb F -GLIBC_2.0 _IO_setbuffer F -GLIBC_2.0 _IO_setvbuf F -GLIBC_2.0 _IO_sgetn F -GLIBC_2.0 _IO_sprintf F -GLIBC_2.0 _IO_sputbackc F -GLIBC_2.0 _IO_sscanf F -GLIBC_2.0 _IO_stderr_ D 0x50 -GLIBC_2.0 _IO_stdin_ D 0x50 -GLIBC_2.0 _IO_stdout_ D 0x50 -GLIBC_2.0 _IO_str_init_readonly F -GLIBC_2.0 _IO_str_init_static F -GLIBC_2.0 _IO_str_overflow F -GLIBC_2.0 _IO_str_pbackfail F -GLIBC_2.0 _IO_str_seekoff F -GLIBC_2.0 _IO_str_underflow F -GLIBC_2.0 _IO_sungetc F -GLIBC_2.0 _IO_switch_to_get_mode F -GLIBC_2.0 _IO_un_link F -GLIBC_2.0 _IO_ungetc F -GLIBC_2.0 _IO_unsave_markers F -GLIBC_2.0 _IO_vfprintf F -GLIBC_2.0 _IO_vfscanf F -GLIBC_2.0 _IO_vsprintf F -GLIBC_2.0 ___brk_addr D 0x4 -GLIBC_2.0 __adjtimex F -GLIBC_2.0 __after_morecore_hook D 0x4 -GLIBC_2.0 __argz_count F -GLIBC_2.0 __argz_next F -GLIBC_2.0 __argz_stringify F -GLIBC_2.0 __assert_fail F -GLIBC_2.0 __assert_perror_fail F -GLIBC_2.0 __bsd_getpgrp F -GLIBC_2.0 __bzero F -GLIBC_2.0 __check_rhosts_file D 0x4 -GLIBC_2.0 __clone F -GLIBC_2.0 __close F -GLIBC_2.0 __cmsg_nxthdr F -GLIBC_2.0 __connect F -GLIBC_2.0 __ctype32_b D 0x4 -GLIBC_2.0 __ctype_b D 0x4 -GLIBC_2.0 __ctype_get_mb_cur_max F -GLIBC_2.0 __ctype_tolower D 0x4 -GLIBC_2.0 __ctype_toupper D 0x4 -GLIBC_2.0 __curbrk D 0x4 -GLIBC_2.0 __daylight D 0x4 -GLIBC_2.0 __dcgettext F -GLIBC_2.0 __default_morecore F -GLIBC_2.0 __deregister_frame F -GLIBC_2.0 __deregister_frame_info F -GLIBC_2.0 __dgettext F -GLIBC_2.0 __dup2 F -GLIBC_2.0 __environ D 0x4 -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __ffs F -GLIBC_2.0 __finite F -GLIBC_2.0 __finitef F -GLIBC_2.0 __finitel F -GLIBC_2.0 __fork F -GLIBC_2.0 __fpu_control D 0x4 -GLIBC_2.0 __frame_state_for F -GLIBC_2.0 __free_hook D 0x4 -GLIBC_2.0 __fxstat F -GLIBC_2.0 __getdelim F -GLIBC_2.0 __getpagesize F -GLIBC_2.0 __getpgid F -GLIBC_2.0 __getpid F -GLIBC_2.0 __gettimeofday F -GLIBC_2.0 __gmtime_r F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __isinf F -GLIBC_2.0 __isinff F -GLIBC_2.0 __isinfl F -GLIBC_2.0 __isnan F -GLIBC_2.0 __isnanf F -GLIBC_2.0 __isnanl F -GLIBC_2.0 __iswctype F -GLIBC_2.0 __ivaliduser F -GLIBC_2.0 __libc_calloc F -GLIBC_2.0 __libc_free F -GLIBC_2.0 __libc_init_first F -GLIBC_2.0 __libc_mallinfo F -GLIBC_2.0 __libc_malloc F -GLIBC_2.0 __libc_mallopt F -GLIBC_2.0 __libc_memalign F -GLIBC_2.0 __libc_pvalloc F -GLIBC_2.0 __libc_realloc F -GLIBC_2.0 __libc_start_main F -GLIBC_2.0 __libc_valloc F -GLIBC_2.0 __lseek F -GLIBC_2.0 __lxstat F -GLIBC_2.0 __malloc_hook D 0x4 -GLIBC_2.0 __malloc_initialize_hook D 0x4 -GLIBC_2.0 __mbrlen F -GLIBC_2.0 __mbrtowc F -GLIBC_2.0 __memalign_hook D 0x4 -GLIBC_2.0 __mempcpy F -GLIBC_2.0 __monstartup F -GLIBC_2.0 __morecore D 0x4 -GLIBC_2.0 __nss_configure_lookup F -GLIBC_2.0 __nss_database_lookup F -GLIBC_2.0 __nss_group_lookup F -GLIBC_2.0 __nss_hosts_lookup F -GLIBC_2.0 __nss_next F -GLIBC_2.0 __nss_passwd_lookup F -GLIBC_2.0 __open F -GLIBC_2.0 __overflow F -GLIBC_2.0 __pipe F -GLIBC_2.0 __printf_fp F -GLIBC_2.0 __profile_frequency F -GLIBC_2.0 __progname D 0x4 -GLIBC_2.0 __progname_full D 0x4 -GLIBC_2.0 __rcmd_errstr D 0x4 -GLIBC_2.0 __read F -GLIBC_2.0 __realloc_hook D 0x4 -GLIBC_2.0 __register_frame F -GLIBC_2.0 __register_frame_info F -GLIBC_2.0 __register_frame_info_table F -GLIBC_2.0 __register_frame_table F -GLIBC_2.0 __res_randomid F -GLIBC_2.0 __sbrk F -GLIBC_2.0 __sched_get_priority_max F -GLIBC_2.0 __sched_get_priority_min F -GLIBC_2.0 __sched_getparam F -GLIBC_2.0 __sched_getscheduler F -GLIBC_2.0 __sched_setscheduler F -GLIBC_2.0 __sched_yield F -GLIBC_2.0 __secure_getenv F -GLIBC_2.0 __select F -GLIBC_2.0 __send F -GLIBC_2.0 __setpgid F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __sigaddset F -GLIBC_2.0 __sigdelset F -GLIBC_2.0 __sigismember F -GLIBC_2.0 __sigpause F -GLIBC_2.0 __sigsetjmp F -GLIBC_2.0 __stpcpy F -GLIBC_2.0 __stpncpy F -GLIBC_2.0 __strcasecmp F -GLIBC_2.0 __strdup F -GLIBC_2.0 __strerror_r F -GLIBC_2.0 __strtod_internal F -GLIBC_2.0 __strtof_internal F -GLIBC_2.0 __strtok_r F -GLIBC_2.0 __strtol_internal F -GLIBC_2.0 __strtold_internal F -GLIBC_2.0 __strtoll_internal F -GLIBC_2.0 __strtoq_internal F -GLIBC_2.0 __strtoul_internal F -GLIBC_2.0 __strtoull_internal F -GLIBC_2.0 __strtouq_internal F -GLIBC_2.0 __sysv_signal F -GLIBC_2.0 __timezone D 0x4 -GLIBC_2.0 __tzname D 0x8 -GLIBC_2.0 __uflow F -GLIBC_2.0 __underflow F -GLIBC_2.0 __vfscanf F -GLIBC_2.0 __vsnprintf F -GLIBC_2.0 __vsscanf F -GLIBC_2.0 __wait F -GLIBC_2.0 __waitpid F -GLIBC_2.0 __wcstod_internal F -GLIBC_2.0 __wcstof_internal F -GLIBC_2.0 __wcstol_internal F -GLIBC_2.0 __wcstold_internal F -GLIBC_2.0 __wcstoll_internal F -GLIBC_2.0 __wcstoul_internal F -GLIBC_2.0 __wcstoull_internal F -GLIBC_2.0 __write F -GLIBC_2.0 __xmknod F -GLIBC_2.0 __xpg_basename F -GLIBC_2.0 __xstat F -GLIBC_2.0 _environ D 0x4 -GLIBC_2.0 _exit F -GLIBC_2.0 _flush_cache F -GLIBC_2.0 _libc_intl_domainname D 0x5 -GLIBC_2.0 _longjmp F -GLIBC_2.0 _mcleanup F -GLIBC_2.0 _mcount F -GLIBC_2.0 _nl_default_dirname D 0x12 -GLIBC_2.0 _nl_domain_bindings D 0x4 -GLIBC_2.0 _nl_msg_cat_cntr D 0x4 -GLIBC_2.0 _null_auth D 0xc -GLIBC_2.0 _obstack D 0x4 -GLIBC_2.0 _obstack_allocated_p F -GLIBC_2.0 _obstack_begin F -GLIBC_2.0 _obstack_begin_1 F -GLIBC_2.0 _obstack_free F -GLIBC_2.0 _obstack_memory_used F -GLIBC_2.0 _obstack_newchunk F -GLIBC_2.0 _res D 0x200 -GLIBC_2.0 _rpc_dtablesize F -GLIBC_2.0 _seterr_reply F -GLIBC_2.0 _setjmp F -GLIBC_2.0 _sys_errlist D 0x1ec -GLIBC_2.0 _sys_nerr D 0x4 -GLIBC_2.0 _sys_siglist D 0x80 -GLIBC_2.0 _tolower F -GLIBC_2.0 _toupper F -GLIBC_2.0 a64l F -GLIBC_2.0 abort F -GLIBC_2.0 abs F -GLIBC_2.0 accept F -GLIBC_2.0 access F -GLIBC_2.0 acct F -GLIBC_2.0 addmntent F -GLIBC_2.0 adjtime F -GLIBC_2.0 adjtimex F -GLIBC_2.0 advance F -GLIBC_2.0 alarm F -GLIBC_2.0 alphasort F -GLIBC_2.0 argz_add F -GLIBC_2.0 argz_add_sep F -GLIBC_2.0 argz_append F -GLIBC_2.0 argz_count F -GLIBC_2.0 argz_create F -GLIBC_2.0 argz_create_sep F -GLIBC_2.0 argz_delete F -GLIBC_2.0 argz_extract F -GLIBC_2.0 argz_insert F -GLIBC_2.0 argz_next F -GLIBC_2.0 argz_replace F -GLIBC_2.0 argz_stringify F -GLIBC_2.0 asctime F -GLIBC_2.0 asctime_r F -GLIBC_2.0 asprintf F -GLIBC_2.0 atexit F -GLIBC_2.0 atof F -GLIBC_2.0 atoi F -GLIBC_2.0 atol F -GLIBC_2.0 atoll F -GLIBC_2.0 authnone_create F -GLIBC_2.0 authunix_create F -GLIBC_2.0 authunix_create_default F -GLIBC_2.0 basename F -GLIBC_2.0 bcmp F -GLIBC_2.0 bcopy F -GLIBC_2.0 bdflush F -GLIBC_2.0 bind F -GLIBC_2.0 bindresvport F -GLIBC_2.0 bindtextdomain F -GLIBC_2.0 brk F -GLIBC_2.0 bsd_signal F -GLIBC_2.0 bsearch F -GLIBC_2.0 btowc F -GLIBC_2.0 bzero F -GLIBC_2.0 cachectl F -GLIBC_2.0 cacheflush F -GLIBC_2.0 calloc F -GLIBC_2.0 callrpc F -GLIBC_2.0 canonicalize_file_name F -GLIBC_2.0 catclose F -GLIBC_2.0 catgets F -GLIBC_2.0 catopen F -GLIBC_2.0 cfgetispeed F -GLIBC_2.0 cfgetospeed F -GLIBC_2.0 cfmakeraw F -GLIBC_2.0 cfree F -GLIBC_2.0 cfsetispeed F -GLIBC_2.0 cfsetospeed F -GLIBC_2.0 cfsetspeed F -GLIBC_2.0 chdir F -GLIBC_2.0 chflags F -GLIBC_2.0 chmod F -GLIBC_2.0 chown F -GLIBC_2.0 chroot F -GLIBC_2.0 clearenv F -GLIBC_2.0 clearerr F -GLIBC_2.0 clearerr_unlocked F -GLIBC_2.0 clnt_broadcast F -GLIBC_2.0 clnt_create F -GLIBC_2.0 clnt_pcreateerror F -GLIBC_2.0 clnt_perrno F -GLIBC_2.0 clnt_perror F -GLIBC_2.0 clnt_spcreateerror F -GLIBC_2.0 clnt_sperrno F -GLIBC_2.0 clnt_sperror F -GLIBC_2.0 clntraw_create F -GLIBC_2.0 clnttcp_create F -GLIBC_2.0 clntudp_bufcreate F -GLIBC_2.0 clntudp_create F -GLIBC_2.0 clock F -GLIBC_2.0 clone F -GLIBC_2.0 close F -GLIBC_2.0 closedir F -GLIBC_2.0 closelog F -GLIBC_2.0 confstr F -GLIBC_2.0 connect F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 creat F -GLIBC_2.0 create_module F -GLIBC_2.0 ctermid F -GLIBC_2.0 ctime F -GLIBC_2.0 ctime_r F -GLIBC_2.0 cuserid F -GLIBC_2.0 daemon F -GLIBC_2.0 daylight D 0x4 -GLIBC_2.0 dcgettext F -GLIBC_2.0 delete_module F -GLIBC_2.0 dgettext F -GLIBC_2.0 difftime F -GLIBC_2.0 dirfd F -GLIBC_2.0 dirname F -GLIBC_2.0 div F -GLIBC_2.0 dprintf F -GLIBC_2.0 drand48 F -GLIBC_2.0 drand48_r F -GLIBC_2.0 dup F -GLIBC_2.0 dup2 F -GLIBC_2.0 dysize F -GLIBC_2.0 ecvt F -GLIBC_2.0 ecvt_r F -GLIBC_2.0 endaliasent F -GLIBC_2.0 endfsent F -GLIBC_2.0 endgrent F -GLIBC_2.0 endhostent F -GLIBC_2.0 endmntent F -GLIBC_2.0 endnetent F -GLIBC_2.0 endnetgrent F -GLIBC_2.0 endprotoent F -GLIBC_2.0 endpwent F -GLIBC_2.0 endrpcent F -GLIBC_2.0 endservent F -GLIBC_2.0 endspent F -GLIBC_2.0 endttyent F -GLIBC_2.0 endusershell F -GLIBC_2.0 endutent F -GLIBC_2.0 environ D 0x4 -GLIBC_2.0 envz_add F -GLIBC_2.0 envz_entry F -GLIBC_2.0 envz_get F -GLIBC_2.0 envz_merge F -GLIBC_2.0 envz_remove F -GLIBC_2.0 envz_strip F -GLIBC_2.0 erand48 F -GLIBC_2.0 erand48_r F -GLIBC_2.0 err F -GLIBC_2.0 error F -GLIBC_2.0 error_at_line F -GLIBC_2.0 error_message_count D 0x4 -GLIBC_2.0 error_one_per_line D 0x4 -GLIBC_2.0 error_print_progname D 0x4 -GLIBC_2.0 errx F -GLIBC_2.0 ether_aton F -GLIBC_2.0 ether_aton_r F -GLIBC_2.0 ether_hostton F -GLIBC_2.0 ether_line F -GLIBC_2.0 ether_ntoa F -GLIBC_2.0 ether_ntoa_r F -GLIBC_2.0 ether_ntohost F -GLIBC_2.0 euidaccess F -GLIBC_2.0 execl F -GLIBC_2.0 execle F -GLIBC_2.0 execlp F -GLIBC_2.0 execv F -GLIBC_2.0 execve F -GLIBC_2.0 execvp F -GLIBC_2.0 exit F -GLIBC_2.0 fchdir F -GLIBC_2.0 fchflags F -GLIBC_2.0 fchmod F -GLIBC_2.0 fchown F -GLIBC_2.0 fclose F -GLIBC_2.0 fcloseall F -GLIBC_2.0 fcntl F -GLIBC_2.0 fcvt F -GLIBC_2.0 fcvt_r F -GLIBC_2.0 fdatasync F -GLIBC_2.0 fdopen F -GLIBC_2.0 feof F -GLIBC_2.0 feof_unlocked F -GLIBC_2.0 ferror F -GLIBC_2.0 ferror_unlocked F -GLIBC_2.0 fexecve F -GLIBC_2.0 fflush F -GLIBC_2.0 fflush_unlocked F -GLIBC_2.0 ffs F -GLIBC_2.0 fgetc F -GLIBC_2.0 fgetgrent F -GLIBC_2.0 fgetgrent_r F -GLIBC_2.0 fgetpos F -GLIBC_2.0 fgetpwent F -GLIBC_2.0 fgetpwent_r F -GLIBC_2.0 fgets F -GLIBC_2.0 fgetspent F -GLIBC_2.0 fgetspent_r F -GLIBC_2.0 fileno F -GLIBC_2.0 fileno_unlocked F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 flock F -GLIBC_2.0 flockfile F -GLIBC_2.0 fnmatch F -GLIBC_2.0 fopen F -GLIBC_2.0 fopencookie F -GLIBC_2.0 fork F -GLIBC_2.0 fpathconf F -GLIBC_2.0 fprintf F -GLIBC_2.0 fputc F -GLIBC_2.0 fputc_unlocked F -GLIBC_2.0 fputs F -GLIBC_2.0 fread F -GLIBC_2.0 free F -GLIBC_2.0 freeaddrinfo F -GLIBC_2.0 freopen F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 fscanf F -GLIBC_2.0 fseek F -GLIBC_2.0 fsetpos F -GLIBC_2.0 fstatfs F -GLIBC_2.0 fsync F -GLIBC_2.0 ftell F -GLIBC_2.0 ftime F -GLIBC_2.0 ftok F -GLIBC_2.0 ftruncate F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 fts_children F -GLIBC_2.0 fts_close F -GLIBC_2.0 fts_open F -GLIBC_2.0 fts_read F -GLIBC_2.0 fts_set F -GLIBC_2.0 ftw F -GLIBC_2.0 funlockfile F -GLIBC_2.0 fwrite F -GLIBC_2.0 gcvt F -GLIBC_2.0 get_avphys_pages F -GLIBC_2.0 get_current_dir_name F -GLIBC_2.0 get_kernel_syms F -GLIBC_2.0 get_myaddress F -GLIBC_2.0 get_nprocs F -GLIBC_2.0 get_nprocs_conf F -GLIBC_2.0 get_phys_pages F -GLIBC_2.0 getaddrinfo F -GLIBC_2.0 getaliasbyname F -GLIBC_2.0 getaliasbyname_r F -GLIBC_2.0 getaliasent F -GLIBC_2.0 getaliasent_r F -GLIBC_2.0 getc F -GLIBC_2.0 getc_unlocked F -GLIBC_2.0 getchar F -GLIBC_2.0 getchar_unlocked F -GLIBC_2.0 getcwd F -GLIBC_2.0 getdelim F -GLIBC_2.0 getdirentries F -GLIBC_2.0 getdomainname F -GLIBC_2.0 getdtablesize F -GLIBC_2.0 getegid F -GLIBC_2.0 getenv F -GLIBC_2.0 geteuid F -GLIBC_2.0 getfsent F -GLIBC_2.0 getfsfile F -GLIBC_2.0 getfsspec F -GLIBC_2.0 getgid F -GLIBC_2.0 getgrent F -GLIBC_2.0 getgrent_r F -GLIBC_2.0 getgrgid F -GLIBC_2.0 getgrgid_r F -GLIBC_2.0 getgrnam F -GLIBC_2.0 getgrnam_r F -GLIBC_2.0 getgroups F -GLIBC_2.0 gethostbyaddr F -GLIBC_2.0 gethostbyaddr_r F -GLIBC_2.0 gethostbyname F -GLIBC_2.0 gethostbyname2 F -GLIBC_2.0 gethostbyname2_r F -GLIBC_2.0 gethostbyname_r F -GLIBC_2.0 gethostent F -GLIBC_2.0 gethostent_r F -GLIBC_2.0 gethostid F -GLIBC_2.0 gethostname F -GLIBC_2.0 getitimer F -GLIBC_2.0 getline F -GLIBC_2.0 getlogin F -GLIBC_2.0 getlogin_r F -GLIBC_2.0 getmntent F -GLIBC_2.0 getmntent_r F -GLIBC_2.0 getnetbyaddr F -GLIBC_2.0 getnetbyaddr_r F -GLIBC_2.0 getnetbyname F -GLIBC_2.0 getnetbyname_r F -GLIBC_2.0 getnetent F -GLIBC_2.0 getnetent_r F -GLIBC_2.0 getnetgrent F -GLIBC_2.0 getnetgrent_r F -GLIBC_2.0 getopt F -GLIBC_2.0 getopt_long F -GLIBC_2.0 getopt_long_only F -GLIBC_2.0 getpagesize F -GLIBC_2.0 getpass F -GLIBC_2.0 getpeername F -GLIBC_2.0 getpgid F -GLIBC_2.0 getpgrp F -GLIBC_2.0 getpid F -GLIBC_2.0 getppid F -GLIBC_2.0 getpriority F -GLIBC_2.0 getprotobyname F -GLIBC_2.0 getprotobyname_r F -GLIBC_2.0 getprotobynumber F -GLIBC_2.0 getprotobynumber_r F -GLIBC_2.0 getprotoent F -GLIBC_2.0 getprotoent_r F -GLIBC_2.0 getpublickey F -GLIBC_2.0 getpw F -GLIBC_2.0 getpwent F -GLIBC_2.0 getpwent_r F -GLIBC_2.0 getpwnam F -GLIBC_2.0 getpwnam_r F -GLIBC_2.0 getpwuid F -GLIBC_2.0 getpwuid_r F -GLIBC_2.0 getresgid F -GLIBC_2.0 getresuid F -GLIBC_2.0 getrlimit F -GLIBC_2.0 getrpcbyname F -GLIBC_2.0 getrpcbyname_r F -GLIBC_2.0 getrpcbynumber F -GLIBC_2.0 getrpcbynumber_r F -GLIBC_2.0 getrpcent F -GLIBC_2.0 getrpcent_r F -GLIBC_2.0 getrpcport F -GLIBC_2.0 getrusage F -GLIBC_2.0 gets F -GLIBC_2.0 getsecretkey F -GLIBC_2.0 getservbyname F -GLIBC_2.0 getservbyname_r F -GLIBC_2.0 getservbyport F -GLIBC_2.0 getservbyport_r F -GLIBC_2.0 getservent F -GLIBC_2.0 getservent_r F -GLIBC_2.0 getsid F -GLIBC_2.0 getsockname F -GLIBC_2.0 getsockopt F -GLIBC_2.0 getspent F -GLIBC_2.0 getspent_r F -GLIBC_2.0 getspnam F -GLIBC_2.0 getspnam_r F -GLIBC_2.0 getsubopt F -GLIBC_2.0 gettext F -GLIBC_2.0 gettimeofday F -GLIBC_2.0 getttyent F -GLIBC_2.0 getttynam F -GLIBC_2.0 getuid F -GLIBC_2.0 getusershell F -GLIBC_2.0 getutent F -GLIBC_2.0 getutent_r F -GLIBC_2.0 getutid F -GLIBC_2.0 getutid_r F -GLIBC_2.0 getutline F -GLIBC_2.0 getutline_r F -GLIBC_2.0 getw F -GLIBC_2.0 getwd F -GLIBC_2.0 glob F -GLIBC_2.0 glob_pattern_p F -GLIBC_2.0 globfree F -GLIBC_2.0 gmtime F -GLIBC_2.0 gmtime_r F -GLIBC_2.0 group_member F -GLIBC_2.0 gsignal F -GLIBC_2.0 gtty F -GLIBC_2.0 h_errlist D 0x14 -GLIBC_2.0 h_nerr D 0x4 -GLIBC_2.0 hasmntopt F -GLIBC_2.0 hcreate F -GLIBC_2.0 hcreate_r F -GLIBC_2.0 hdestroy F -GLIBC_2.0 hdestroy_r F -GLIBC_2.0 herror F -GLIBC_2.0 hsearch F -GLIBC_2.0 hsearch_r F -GLIBC_2.0 hstrerror F -GLIBC_2.0 htonl F -GLIBC_2.0 htons F -GLIBC_2.0 index F -GLIBC_2.0 inet_addr F -GLIBC_2.0 inet_aton F -GLIBC_2.0 inet_lnaof F -GLIBC_2.0 inet_makeaddr F -GLIBC_2.0 inet_netof F -GLIBC_2.0 inet_network F -GLIBC_2.0 inet_nsap_addr F -GLIBC_2.0 inet_nsap_ntoa F -GLIBC_2.0 inet_ntoa F -GLIBC_2.0 inet_ntop F -GLIBC_2.0 inet_pton F -GLIBC_2.0 init_module F -GLIBC_2.0 initgroups F -GLIBC_2.0 initstate F -GLIBC_2.0 initstate_r F -GLIBC_2.0 innetgr F -GLIBC_2.0 insque F -GLIBC_2.0 ioctl F -GLIBC_2.0 iruserok F -GLIBC_2.0 isalnum F -GLIBC_2.0 isalpha F -GLIBC_2.0 isascii F -GLIBC_2.0 isatty F -GLIBC_2.0 isblank F -GLIBC_2.0 iscntrl F -GLIBC_2.0 isdigit F -GLIBC_2.0 isfdtype F -GLIBC_2.0 isgraph F -GLIBC_2.0 isinf F -GLIBC_2.0 isinff F -GLIBC_2.0 isinfl F -GLIBC_2.0 islower F -GLIBC_2.0 isnan F -GLIBC_2.0 isnanf F -GLIBC_2.0 isnanl F -GLIBC_2.0 isprint F -GLIBC_2.0 ispunct F -GLIBC_2.0 isspace F -GLIBC_2.0 isupper F -GLIBC_2.0 iswalnum F -GLIBC_2.0 iswalpha F -GLIBC_2.0 iswcntrl F -GLIBC_2.0 iswctype F -GLIBC_2.0 iswdigit F -GLIBC_2.0 iswgraph F -GLIBC_2.0 iswlower F -GLIBC_2.0 iswprint F -GLIBC_2.0 iswpunct F -GLIBC_2.0 iswspace F -GLIBC_2.0 iswupper F -GLIBC_2.0 iswxdigit F -GLIBC_2.0 isxdigit F -GLIBC_2.0 jrand48 F -GLIBC_2.0 jrand48_r F -GLIBC_2.0 kill F -GLIBC_2.0 killpg F -GLIBC_2.0 klogctl F -GLIBC_2.0 l64a F -GLIBC_2.0 labs F -GLIBC_2.0 lchown F -GLIBC_2.0 lckpwdf F -GLIBC_2.0 lcong48 F -GLIBC_2.0 lcong48_r F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 ldiv F -GLIBC_2.0 lfind F -GLIBC_2.0 link F -GLIBC_2.0 listen F -GLIBC_2.0 llabs F -GLIBC_2.0 lldiv F -GLIBC_2.0 llseek F -GLIBC_2.0 loc1 D 0x4 -GLIBC_2.0 loc2 D 0x4 -GLIBC_2.0 localeconv F -GLIBC_2.0 localtime F -GLIBC_2.0 localtime_r F -GLIBC_2.0 lockf F -GLIBC_2.0 locs D 0x4 -GLIBC_2.0 longjmp F -GLIBC_2.0 lrand48 F -GLIBC_2.0 lrand48_r F -GLIBC_2.0 lsearch F -GLIBC_2.0 lseek F -GLIBC_2.0 madvise F -GLIBC_2.0 mallinfo F -GLIBC_2.0 malloc F -GLIBC_2.0 malloc_get_state F -GLIBC_2.0 malloc_set_state F -GLIBC_2.0 malloc_stats F -GLIBC_2.0 malloc_trim F -GLIBC_2.0 malloc_usable_size F -GLIBC_2.0 mallopt F -GLIBC_2.0 mallwatch D 0x4 -GLIBC_2.0 mblen F -GLIBC_2.0 mbrlen F -GLIBC_2.0 mbrtowc F -GLIBC_2.0 mbsinit F -GLIBC_2.0 mbsnrtowcs F -GLIBC_2.0 mbsrtowcs F -GLIBC_2.0 mbstowcs F -GLIBC_2.0 mbtowc F -GLIBC_2.0 mcheck F -GLIBC_2.0 memalign F -GLIBC_2.0 memccpy F -GLIBC_2.0 memchr F -GLIBC_2.0 memcmp F -GLIBC_2.0 memcpy F -GLIBC_2.0 memfrob F -GLIBC_2.0 memmem F -GLIBC_2.0 memmove F -GLIBC_2.0 memset F -GLIBC_2.0 mkdir F -GLIBC_2.0 mkfifo F -GLIBC_2.0 mkstemp F -GLIBC_2.0 mktemp F -GLIBC_2.0 mktime F -GLIBC_2.0 mlock F -GLIBC_2.0 mlockall F -GLIBC_2.0 mmap F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 monstartup F -GLIBC_2.0 mount F -GLIBC_2.0 mprobe F -GLIBC_2.0 mprotect F -GLIBC_2.0 mrand48 F -GLIBC_2.0 mrand48_r F -GLIBC_2.0 mremap F -GLIBC_2.0 msgctl F -GLIBC_2.0 msgget F -GLIBC_2.0 msgrcv F -GLIBC_2.0 msgsnd F -GLIBC_2.0 msync F -GLIBC_2.0 mtrace F -GLIBC_2.0 munlock F -GLIBC_2.0 munlockall F -GLIBC_2.0 munmap F -GLIBC_2.0 muntrace F -GLIBC_2.0 nanosleep F -GLIBC_2.0 nfsservctl F -GLIBC_2.0 nice F -GLIBC_2.0 nl_langinfo F -GLIBC_2.0 nrand48 F -GLIBC_2.0 nrand48_r F -GLIBC_2.0 ntohl F -GLIBC_2.0 ntohs F -GLIBC_2.0 obstack_alloc_failed_handler D 0x4 -GLIBC_2.0 obstack_exit_failure D 0x4 -GLIBC_2.0 obstack_free F -GLIBC_2.0 obstack_printf F -GLIBC_2.0 obstack_vprintf F -GLIBC_2.0 on_exit F -GLIBC_2.0 open F -GLIBC_2.0 open_memstream F -GLIBC_2.0 opendir F -GLIBC_2.0 openlog F -GLIBC_2.0 optarg D 0x4 -GLIBC_2.0 opterr D 0x4 -GLIBC_2.0 optind D 0x4 -GLIBC_2.0 optopt D 0x4 -GLIBC_2.0 parse_printf_format F -GLIBC_2.0 pathconf F -GLIBC_2.0 pause F -GLIBC_2.0 pclose F -GLIBC_2.0 perror F -GLIBC_2.0 personality F -GLIBC_2.0 pipe F -GLIBC_2.0 pmap_getmaps F -GLIBC_2.0 pmap_getport F -GLIBC_2.0 pmap_rmtcall F -GLIBC_2.0 pmap_set F -GLIBC_2.0 pmap_unset F -GLIBC_2.0 poll F -GLIBC_2.0 popen F -GLIBC_2.0 prctl F -GLIBC_2.0 printf F -GLIBC_2.0 profil F -GLIBC_2.0 program_invocation_name D 0x4 -GLIBC_2.0 program_invocation_short_name D 0x4 -GLIBC_2.0 pselect F -GLIBC_2.0 psignal F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 ptrace F -GLIBC_2.0 putc F -GLIBC_2.0 putc_unlocked F -GLIBC_2.0 putchar F -GLIBC_2.0 putchar_unlocked F -GLIBC_2.0 putenv F -GLIBC_2.0 putpwent F -GLIBC_2.0 puts F -GLIBC_2.0 putspent F -GLIBC_2.0 pututline F -GLIBC_2.0 putw F -GLIBC_2.0 pvalloc F -GLIBC_2.0 qecvt F -GLIBC_2.0 qecvt_r F -GLIBC_2.0 qfcvt F -GLIBC_2.0 qfcvt_r F -GLIBC_2.0 qgcvt F -GLIBC_2.0 qsort F -GLIBC_2.0 query_module F -GLIBC_2.0 quotactl F -GLIBC_2.0 raise F -GLIBC_2.0 rand F -GLIBC_2.0 rand_r F -GLIBC_2.0 random F -GLIBC_2.0 random_r F -GLIBC_2.0 rcmd F -GLIBC_2.0 re_comp F -GLIBC_2.0 re_compile_fastmap F -GLIBC_2.0 re_compile_pattern F -GLIBC_2.0 re_exec F -GLIBC_2.0 re_match F -GLIBC_2.0 re_match_2 F -GLIBC_2.0 re_max_failures D 0x4 -GLIBC_2.0 re_search F -GLIBC_2.0 re_search_2 F -GLIBC_2.0 re_set_registers F -GLIBC_2.0 re_set_syntax F -GLIBC_2.0 re_syntax_options D 0x4 -GLIBC_2.0 read F -GLIBC_2.0 readdir F -GLIBC_2.0 readdir_r F -GLIBC_2.0 readlink F -GLIBC_2.0 readv F -GLIBC_2.0 realloc F -GLIBC_2.0 realpath F -GLIBC_2.0 reboot F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 regcomp F -GLIBC_2.0 regerror F -GLIBC_2.0 regexec F -GLIBC_2.0 regfree F -GLIBC_2.0 register_printf_function F -GLIBC_2.0 registerrpc F -GLIBC_2.0 remove F -GLIBC_2.0 remque F -GLIBC_2.0 rename F -GLIBC_2.0 res_init F -GLIBC_2.0 revoke F -GLIBC_2.0 rewind F -GLIBC_2.0 rewinddir F -GLIBC_2.0 rexec F -GLIBC_2.0 rexecoptions D 0x4 -GLIBC_2.0 rindex F -GLIBC_2.0 rmdir F -GLIBC_2.0 rpc_createerr D 0x10 -GLIBC_2.0 rpmatch F -GLIBC_2.0 rresvport F -GLIBC_2.0 ruserok F -GLIBC_2.0 ruserpass F -GLIBC_2.0 sbrk F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 scandir F -GLIBC_2.0 scanf F -GLIBC_2.0 sched_get_priority_max F -GLIBC_2.0 sched_get_priority_min F -GLIBC_2.0 sched_getparam F -GLIBC_2.0 sched_getscheduler F -GLIBC_2.0 sched_rr_get_interval F -GLIBC_2.0 sched_setparam F -GLIBC_2.0 sched_setscheduler F -GLIBC_2.0 sched_yield F -GLIBC_2.0 seed48 F -GLIBC_2.0 seed48_r F -GLIBC_2.0 seekdir F -GLIBC_2.0 select F -GLIBC_2.0 semctl F -GLIBC_2.0 semget F -GLIBC_2.0 semop F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 setaliasent F -GLIBC_2.0 setbuf F -GLIBC_2.0 setbuffer F -GLIBC_2.0 setcontext F -GLIBC_2.0 setdomainname F -GLIBC_2.0 setegid F -GLIBC_2.0 setenv F -GLIBC_2.0 seteuid F -GLIBC_2.0 setfsent F -GLIBC_2.0 setfsgid F -GLIBC_2.0 setfsuid F -GLIBC_2.0 setgid F -GLIBC_2.0 setgrent F -GLIBC_2.0 setgroups F -GLIBC_2.0 sethostent F -GLIBC_2.0 sethostid F -GLIBC_2.0 sethostname F -GLIBC_2.0 setitimer F -GLIBC_2.0 setjmp F -GLIBC_2.0 setlinebuf F -GLIBC_2.0 setlocale F -GLIBC_2.0 setlogin F -GLIBC_2.0 setlogmask F -GLIBC_2.0 setmntent F -GLIBC_2.0 setnetent F -GLIBC_2.0 setnetgrent F -GLIBC_2.0 setpgid F -GLIBC_2.0 setpgrp F -GLIBC_2.0 setpriority F -GLIBC_2.0 setprotoent F -GLIBC_2.0 setpwent F -GLIBC_2.0 setregid F -GLIBC_2.0 setresgid F -GLIBC_2.0 setresuid F -GLIBC_2.0 setreuid F -GLIBC_2.0 setrlimit F -GLIBC_2.0 setrpcent F -GLIBC_2.0 setservent F -GLIBC_2.0 setsid F -GLIBC_2.0 setsockopt F -GLIBC_2.0 setspent F -GLIBC_2.0 setstate F -GLIBC_2.0 setstate_r F -GLIBC_2.0 settimeofday F -GLIBC_2.0 setttyent F -GLIBC_2.0 setuid F -GLIBC_2.0 setusershell F -GLIBC_2.0 setutent F -GLIBC_2.0 setvbuf F -GLIBC_2.0 sgetspent F -GLIBC_2.0 sgetspent_r F -GLIBC_2.0 shmat F -GLIBC_2.0 shmctl F -GLIBC_2.0 shmdt F -GLIBC_2.0 shmget F -GLIBC_2.0 shutdown F -GLIBC_2.0 sigaction F -GLIBC_2.0 sigaddset F -GLIBC_2.0 sigaltstack F -GLIBC_2.0 sigandset F -GLIBC_2.0 sigblock F -GLIBC_2.0 sigdelset F -GLIBC_2.0 sigemptyset F -GLIBC_2.0 sigfillset F -GLIBC_2.0 siggetmask F -GLIBC_2.0 siginterrupt F -GLIBC_2.0 sigisemptyset F -GLIBC_2.0 sigismember F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 signal F -GLIBC_2.0 sigorset F -GLIBC_2.0 sigpause F -GLIBC_2.0 sigpending F -GLIBC_2.0 sigprocmask F -GLIBC_2.0 sigreturn F -GLIBC_2.0 sigsetmask F -GLIBC_2.0 sigstack F -GLIBC_2.0 sigsuspend F -GLIBC_2.0 sigvec F -GLIBC_2.0 sigwait F -GLIBC_2.0 sleep F -GLIBC_2.0 snprintf F -GLIBC_2.0 socket F -GLIBC_2.0 socketpair F -GLIBC_2.0 sprintf F -GLIBC_2.0 srand F -GLIBC_2.0 srand48 F -GLIBC_2.0 srand48_r F -GLIBC_2.0 srandom F -GLIBC_2.0 srandom_r F -GLIBC_2.0 sscanf F -GLIBC_2.0 ssignal F -GLIBC_2.0 sstk F -GLIBC_2.0 statfs F -GLIBC_2.0 stderr D 0x4 -GLIBC_2.0 stdin D 0x4 -GLIBC_2.0 stdout D 0x4 -GLIBC_2.0 step F -GLIBC_2.0 stime F -GLIBC_2.0 stpcpy F -GLIBC_2.0 stpncpy F -GLIBC_2.0 strcasecmp F -GLIBC_2.0 strcat F -GLIBC_2.0 strchr F -GLIBC_2.0 strcmp F -GLIBC_2.0 strcoll F -GLIBC_2.0 strcpy F -GLIBC_2.0 strcspn F -GLIBC_2.0 strdup F -GLIBC_2.0 strerror F -GLIBC_2.0 strerror_r F -GLIBC_2.0 strfmon F -GLIBC_2.0 strfry F -GLIBC_2.0 strftime F -GLIBC_2.0 strlen F -GLIBC_2.0 strncasecmp F -GLIBC_2.0 strncat F -GLIBC_2.0 strncmp F -GLIBC_2.0 strncpy F -GLIBC_2.0 strndup F -GLIBC_2.0 strnlen F -GLIBC_2.0 strpbrk F -GLIBC_2.0 strptime F -GLIBC_2.0 strrchr F -GLIBC_2.0 strsep F -GLIBC_2.0 strsignal F -GLIBC_2.0 strspn F -GLIBC_2.0 strstr F -GLIBC_2.0 strtod F -GLIBC_2.0 strtof F -GLIBC_2.0 strtok F -GLIBC_2.0 strtok_r F -GLIBC_2.0 strtol F -GLIBC_2.0 strtold F -GLIBC_2.0 strtoll F -GLIBC_2.0 strtoq F -GLIBC_2.0 strtoul F -GLIBC_2.0 strtoull F -GLIBC_2.0 strtouq F -GLIBC_2.0 strxfrm F -GLIBC_2.0 stty F -GLIBC_2.0 svc_exit F -GLIBC_2.0 svc_fdset D 0x80 -GLIBC_2.0 svc_getreq F -GLIBC_2.0 svc_getreqset F -GLIBC_2.0 svc_register F -GLIBC_2.0 svc_run F -GLIBC_2.0 svc_sendreply F -GLIBC_2.0 svc_unregister F -GLIBC_2.0 svcauthdes_stats D 0xc -GLIBC_2.0 svcerr_auth F -GLIBC_2.0 svcerr_decode F -GLIBC_2.0 svcerr_noproc F -GLIBC_2.0 svcerr_noprog F -GLIBC_2.0 svcerr_progvers F -GLIBC_2.0 svcerr_systemerr F -GLIBC_2.0 svcerr_weakauth F -GLIBC_2.0 svcfd_create F -GLIBC_2.0 svcraw_create F -GLIBC_2.0 svctcp_create F -GLIBC_2.0 svcudp_bufcreate F -GLIBC_2.0 svcudp_create F -GLIBC_2.0 svcudp_enablecache F -GLIBC_2.0 swab F -GLIBC_2.0 swapoff F -GLIBC_2.0 swapon F -GLIBC_2.0 symlink F -GLIBC_2.0 sync F -GLIBC_2.0 sys_errlist D 0x1ec -GLIBC_2.0 sys_nerr D 0x4 -GLIBC_2.0 sys_sigabbrev D 0x80 -GLIBC_2.0 sys_siglist D 0x80 -GLIBC_2.0 syscall F -GLIBC_2.0 sysconf F -GLIBC_2.0 sysctl F -GLIBC_2.0 sysinfo F -GLIBC_2.0 syslog F -GLIBC_2.0 sysmips F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 tcflow F -GLIBC_2.0 tcflush F -GLIBC_2.0 tcgetattr F -GLIBC_2.0 tcgetpgrp F -GLIBC_2.0 tcsendbreak F -GLIBC_2.0 tcsetattr F -GLIBC_2.0 tcsetpgrp F -GLIBC_2.0 tdelete F -GLIBC_2.0 telldir F -GLIBC_2.0 tempnam F -GLIBC_2.0 textdomain F -GLIBC_2.0 tfind F -GLIBC_2.0 time F -GLIBC_2.0 timegm F -GLIBC_2.0 timelocal F -GLIBC_2.0 times F -GLIBC_2.0 timezone D 0x4 -GLIBC_2.0 tmpfile F -GLIBC_2.0 tmpnam F -GLIBC_2.0 tmpnam_r F -GLIBC_2.0 toascii F -GLIBC_2.0 tolower F -GLIBC_2.0 toupper F -GLIBC_2.0 towctrans F -GLIBC_2.0 towlower F -GLIBC_2.0 towupper F -GLIBC_2.0 tr_break F -GLIBC_2.0 truncate F -GLIBC_2.0 tsearch F -GLIBC_2.0 ttyname F -GLIBC_2.0 ttyname_r F -GLIBC_2.0 ttyslot F -GLIBC_2.0 twalk F -GLIBC_2.0 tzname D 0x8 -GLIBC_2.0 tzset F -GLIBC_2.0 ualarm F -GLIBC_2.0 ulckpwdf F -GLIBC_2.0 ulimit F -GLIBC_2.0 umask F -GLIBC_2.0 umount F -GLIBC_2.0 uname F -GLIBC_2.0 ungetc F -GLIBC_2.0 unlink F -GLIBC_2.0 unsetenv F -GLIBC_2.0 updwtmp F -GLIBC_2.0 uselib F -GLIBC_2.0 usleep F -GLIBC_2.0 ustat F -GLIBC_2.0 utime F -GLIBC_2.0 utimes F -GLIBC_2.0 utmpname F -GLIBC_2.0 valloc F -GLIBC_2.0 vasprintf F -GLIBC_2.0 vdprintf F -GLIBC_2.0 verr F -GLIBC_2.0 verrx F -GLIBC_2.0 vfork F -GLIBC_2.0 vfprintf F -GLIBC_2.0 vfscanf F -GLIBC_2.0 vhangup F -GLIBC_2.0 vlimit F -GLIBC_2.0 vprintf F -GLIBC_2.0 vscanf F -GLIBC_2.0 vsnprintf F -GLIBC_2.0 vsprintf F -GLIBC_2.0 vsscanf F -GLIBC_2.0 vsyslog F -GLIBC_2.0 vtimes F -GLIBC_2.0 vwarn F -GLIBC_2.0 vwarnx F -GLIBC_2.0 wait F -GLIBC_2.0 wait3 F -GLIBC_2.0 wait4 F -GLIBC_2.0 waitpid F -GLIBC_2.0 warn F -GLIBC_2.0 warnx F -GLIBC_2.0 wcpcpy F -GLIBC_2.0 wcpncpy F -GLIBC_2.0 wcrtomb F -GLIBC_2.0 wcscat F -GLIBC_2.0 wcschr F -GLIBC_2.0 wcscmp F -GLIBC_2.0 wcscoll F -GLIBC_2.0 wcscpy F -GLIBC_2.0 wcscspn F -GLIBC_2.0 wcsdup F -GLIBC_2.0 wcslen F -GLIBC_2.0 wcsncat F -GLIBC_2.0 wcsncmp F -GLIBC_2.0 wcsncpy F -GLIBC_2.0 wcsnrtombs F -GLIBC_2.0 wcspbrk F -GLIBC_2.0 wcsrchr F -GLIBC_2.0 wcsrtombs F -GLIBC_2.0 wcsspn F -GLIBC_2.0 wcsstr F -GLIBC_2.0 wcstod F -GLIBC_2.0 wcstof F -GLIBC_2.0 wcstok F -GLIBC_2.0 wcstol F -GLIBC_2.0 wcstold F -GLIBC_2.0 wcstombs F -GLIBC_2.0 wcstoq F -GLIBC_2.0 wcstoul F -GLIBC_2.0 wcstouq F -GLIBC_2.0 wcswidth F -GLIBC_2.0 wcsxfrm F -GLIBC_2.0 wctob F -GLIBC_2.0 wctomb F -GLIBC_2.0 wctrans F -GLIBC_2.0 wctype F -GLIBC_2.0 wcwidth F -GLIBC_2.0 wmemchr F -GLIBC_2.0 wmemcmp F -GLIBC_2.0 wmemcpy F -GLIBC_2.0 wmemmove F -GLIBC_2.0 wmemset F -GLIBC_2.0 write F -GLIBC_2.0 writev F -GLIBC_2.0 xdr_accepted_reply F -GLIBC_2.0 xdr_array F -GLIBC_2.0 xdr_authunix_parms F -GLIBC_2.0 xdr_bool F -GLIBC_2.0 xdr_bytes F -GLIBC_2.0 xdr_callhdr F -GLIBC_2.0 xdr_callmsg F -GLIBC_2.0 xdr_char F -GLIBC_2.0 xdr_cryptkeyarg F -GLIBC_2.0 xdr_cryptkeyarg2 F -GLIBC_2.0 xdr_cryptkeyres F -GLIBC_2.0 xdr_des_block F -GLIBC_2.0 xdr_double F -GLIBC_2.0 xdr_enum F -GLIBC_2.0 xdr_float F -GLIBC_2.0 xdr_free F -GLIBC_2.0 xdr_int F -GLIBC_2.0 xdr_key_netstarg F -GLIBC_2.0 xdr_key_netstres F -GLIBC_2.0 xdr_keybuf F -GLIBC_2.0 xdr_keystatus F -GLIBC_2.0 xdr_long F -GLIBC_2.0 xdr_netobj F -GLIBC_2.0 xdr_opaque F -GLIBC_2.0 xdr_opaque_auth F -GLIBC_2.0 xdr_pmap F -GLIBC_2.0 xdr_pmaplist F -GLIBC_2.0 xdr_pointer F -GLIBC_2.0 xdr_reference F -GLIBC_2.0 xdr_rejected_reply F -GLIBC_2.0 xdr_replymsg F -GLIBC_2.0 xdr_rmtcall_args F -GLIBC_2.0 xdr_rmtcallres F -GLIBC_2.0 xdr_short F -GLIBC_2.0 xdr_string F -GLIBC_2.0 xdr_u_char F -GLIBC_2.0 xdr_u_int F -GLIBC_2.0 xdr_u_long F -GLIBC_2.0 xdr_u_short F -GLIBC_2.0 xdr_union F -GLIBC_2.0 xdr_vector F -GLIBC_2.0 xdr_void F -GLIBC_2.0 xdr_wrapstring F -GLIBC_2.0 xdrmem_create F -GLIBC_2.0 xdrrec_create F -GLIBC_2.0 xdrrec_endofrecord F -GLIBC_2.0 xdrrec_eof F -GLIBC_2.0 xdrrec_skiprecord F -GLIBC_2.0 xdrstdio_create F -GLIBC_2.0 xencrypt F -GLIBC_2.0 xprt_register F -GLIBC_2.0 xprt_unregister F -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 fallocate64 F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.18 __mips_fpu_getcw F -GLIBC_2.18 __mips_fpu_setcw F -GLIBC_2.19 GLIBC_2.19 A -GLIBC_2.19 getrlimit64 F -GLIBC_2.19 setrlimit64 F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _Exit F -GLIBC_2.2 _IO_2_1_stderr_ D 0xa0 -GLIBC_2.2 _IO_2_1_stdin_ D 0xa0 -GLIBC_2.2 _IO_2_1_stdout_ D 0xa0 -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_do_write F -GLIBC_2.2 _IO_fclose F -GLIBC_2.2 _IO_fdopen F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_file_attach F -GLIBC_2.2 _IO_file_close_it F -GLIBC_2.2 _IO_file_finish F -GLIBC_2.2 _IO_file_fopen F -GLIBC_2.2 _IO_file_init F -GLIBC_2.2 _IO_file_overflow F -GLIBC_2.2 _IO_file_seekoff F -GLIBC_2.2 _IO_file_setbuf F -GLIBC_2.2 _IO_file_sync F -GLIBC_2.2 _IO_file_underflow F -GLIBC_2.2 _IO_file_write F -GLIBC_2.2 _IO_file_xsputn F -GLIBC_2.2 _IO_fopen F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_getline_info F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_popen F -GLIBC_2.2 _IO_proc_close F -GLIBC_2.2 _IO_proc_open F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0x54 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 __asprintf F -GLIBC_2.2 __assert F -GLIBC_2.2 __backtrace F -GLIBC_2.2 __backtrace_symbols F -GLIBC_2.2 __backtrace_symbols_fd F -GLIBC_2.2 __ctype32_tolower D 0x4 -GLIBC_2.2 __ctype32_toupper D 0x4 -GLIBC_2.2 __cxa_atexit F -GLIBC_2.2 __cxa_finalize F -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __duplocale F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpurge F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __freelocale F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __isalnum_l F -GLIBC_2.2 __isalpha_l F -GLIBC_2.2 __isascii_l F -GLIBC_2.2 __isblank_l F -GLIBC_2.2 __iscntrl_l F -GLIBC_2.2 __isdigit_l F -GLIBC_2.2 __isgraph_l F -GLIBC_2.2 __islower_l F -GLIBC_2.2 __isprint_l F -GLIBC_2.2 __ispunct_l F -GLIBC_2.2 __isspace_l F -GLIBC_2.2 __isupper_l F -GLIBC_2.2 __iswalnum_l F -GLIBC_2.2 __iswalpha_l F -GLIBC_2.2 __iswblank_l F -GLIBC_2.2 __iswcntrl_l F -GLIBC_2.2 __iswctype_l F -GLIBC_2.2 __iswdigit_l F -GLIBC_2.2 __iswgraph_l F -GLIBC_2.2 __iswlower_l F -GLIBC_2.2 __iswprint_l F -GLIBC_2.2 __iswpunct_l F -GLIBC_2.2 __iswspace_l F -GLIBC_2.2 __iswupper_l F -GLIBC_2.2 __iswxdigit_l F -GLIBC_2.2 __isxdigit_l F -GLIBC_2.2 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.2 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.2 __key_gendes_LOCAL D 0x4 -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __libc_freeres F -GLIBC_2.2 __libc_sa_len F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __mempcpy_small F -GLIBC_2.2 __newlocale F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __open64 F -GLIBC_2.2 __poll F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __rawmemchr F -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_state F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 __sigsuspend F -GLIBC_2.2 __statfs F -GLIBC_2.2 __stpcpy_small F -GLIBC_2.2 __strcasecmp_l F -GLIBC_2.2 __strcasestr F -GLIBC_2.2 __strcoll_l F -GLIBC_2.2 __strcpy_small F -GLIBC_2.2 __strcspn_c1 F -GLIBC_2.2 __strcspn_c2 F -GLIBC_2.2 __strcspn_c3 F -GLIBC_2.2 __strfmon_l F -GLIBC_2.2 __strncasecmp_l F -GLIBC_2.2 __strndup F -GLIBC_2.2 __strpbrk_c2 F -GLIBC_2.2 __strpbrk_c3 F -GLIBC_2.2 __strsep_1c F -GLIBC_2.2 __strsep_2c F -GLIBC_2.2 __strsep_3c F -GLIBC_2.2 __strsep_g F -GLIBC_2.2 __strspn_c1 F -GLIBC_2.2 __strspn_c2 F -GLIBC_2.2 __strspn_c3 F -GLIBC_2.2 __strtod_l F -GLIBC_2.2 __strtof_l F -GLIBC_2.2 __strtok_r_1c F -GLIBC_2.2 __strtol_l F -GLIBC_2.2 __strtold_l F -GLIBC_2.2 __strtoll_l F -GLIBC_2.2 __strtoul_l F -GLIBC_2.2 __strtoull_l F -GLIBC_2.2 __strverscmp F -GLIBC_2.2 __strxfrm_l F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __toascii_l F -GLIBC_2.2 __tolower_l F -GLIBC_2.2 __toupper_l F -GLIBC_2.2 __towctrans F -GLIBC_2.2 __towctrans_l F -GLIBC_2.2 __towlower_l F -GLIBC_2.2 __towupper_l F -GLIBC_2.2 __vfork F -GLIBC_2.2 __wcscasecmp_l F -GLIBC_2.2 __wcscoll_l F -GLIBC_2.2 __wcsncasecmp_l F -GLIBC_2.2 __wcstod_l F -GLIBC_2.2 __wcstof_l F -GLIBC_2.2 __wcstol_l F -GLIBC_2.2 __wcstold_l F -GLIBC_2.2 __wcstoll_l F -GLIBC_2.2 __wcstoul_l F -GLIBC_2.2 __wcstoull_l F -GLIBC_2.2 __wcsxfrm_l F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __wctype_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _authenticate F -GLIBC_2.2 _dl_mcount_wrapper F -GLIBC_2.2 _dl_mcount_wrapper_check F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _res_hconf D 0x30 -GLIBC_2.2 _sys_errlist D 0x11b8 -GLIBC_2.2 _sys_nerr D 0x4 -GLIBC_2.2 _sys_siglist D 0x100 -GLIBC_2.2 _test_and_set F -GLIBC_2.2 addseverity F -GLIBC_2.2 alphasort64 F -GLIBC_2.2 argp_err_exit_status D 0x4 -GLIBC_2.2 argp_error F -GLIBC_2.2 argp_failure F -GLIBC_2.2 argp_help F -GLIBC_2.2 argp_parse F -GLIBC_2.2 argp_program_bug_address D 0x4 -GLIBC_2.2 argp_program_version D 0x4 -GLIBC_2.2 argp_program_version_hook D 0x4 -GLIBC_2.2 argp_state_help F -GLIBC_2.2 argp_usage F -GLIBC_2.2 authdes_create F -GLIBC_2.2 authdes_getucred F -GLIBC_2.2 authdes_pk_create F -GLIBC_2.2 backtrace F -GLIBC_2.2 backtrace_symbols F -GLIBC_2.2 backtrace_symbols_fd F -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 capget F -GLIBC_2.2 capset F -GLIBC_2.2 cbc_crypt F -GLIBC_2.2 clntunix_create F -GLIBC_2.2 creat64 F -GLIBC_2.2 dcngettext F -GLIBC_2.2 des_setparity F -GLIBC_2.2 dngettext F -GLIBC_2.2 ecb_crypt F -GLIBC_2.2 endutxent F -GLIBC_2.2 fattach F -GLIBC_2.2 fclose F -GLIBC_2.2 fdetach F -GLIBC_2.2 fdopen F -GLIBC_2.2 ffsl F -GLIBC_2.2 ffsll F -GLIBC_2.2 fgetc_unlocked F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgets_unlocked F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fmtmsg F -GLIBC_2.2 fopen F -GLIBC_2.2 fopen64 F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fputs_unlocked F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fread_unlocked F -GLIBC_2.2 freopen64 F -GLIBC_2.2 fseeko F -GLIBC_2.2 fseeko64 F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fstatfs64 F -GLIBC_2.2 fstatvfs F -GLIBC_2.2 fstatvfs64 F -GLIBC_2.2 ftello F -GLIBC_2.2 ftello64 F -GLIBC_2.2 ftruncate64 F -GLIBC_2.2 ftw64 F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwrite_unlocked F -GLIBC_2.2 fwscanf F -GLIBC_2.2 gai_strerror F -GLIBC_2.2 getaliasbyname_r F -GLIBC_2.2 getaliasent_r F -GLIBC_2.2 getcontext F -GLIBC_2.2 getdate F -GLIBC_2.2 getdate_err D 0x4 -GLIBC_2.2 getdate_r F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getgrent_r F -GLIBC_2.2 getgrgid_r F -GLIBC_2.2 getgrnam_r F -GLIBC_2.2 gethostbyaddr_r F -GLIBC_2.2 gethostbyname2_r F -GLIBC_2.2 gethostbyname_r F -GLIBC_2.2 gethostent_r F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getmsg F -GLIBC_2.2 getnameinfo F -GLIBC_2.2 getnetbyaddr_r F -GLIBC_2.2 getnetbyname_r F -GLIBC_2.2 getnetent_r F -GLIBC_2.2 getnetname F -GLIBC_2.2 getpmsg F -GLIBC_2.2 getprotobyname_r F -GLIBC_2.2 getprotobynumber_r F -GLIBC_2.2 getprotoent_r F -GLIBC_2.2 getpt F -GLIBC_2.2 getpwent_r F -GLIBC_2.2 getpwnam_r F -GLIBC_2.2 getpwuid_r F -GLIBC_2.2 getrlimit64 F -GLIBC_2.2 getrpcbyname_r F -GLIBC_2.2 getrpcbynumber_r F -GLIBC_2.2 getrpcent_r F -GLIBC_2.2 getservbyname_r F -GLIBC_2.2 getservbyport_r F -GLIBC_2.2 getservent_r F -GLIBC_2.2 getspent_r F -GLIBC_2.2 getspnam_r F -GLIBC_2.2 getutmp F -GLIBC_2.2 getutmpx F -GLIBC_2.2 getutxent F -GLIBC_2.2 getutxid F -GLIBC_2.2 getutxline F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 glob64 F -GLIBC_2.2 globfree64 F -GLIBC_2.2 gnu_get_libc_release F -GLIBC_2.2 gnu_get_libc_version F -GLIBC_2.2 grantpt F -GLIBC_2.2 host2netname F -GLIBC_2.2 iconv F -GLIBC_2.2 iconv_close F -GLIBC_2.2 iconv_open F -GLIBC_2.2 if_freenameindex F -GLIBC_2.2 if_indextoname F -GLIBC_2.2 if_nameindex F -GLIBC_2.2 if_nametoindex F -GLIBC_2.2 imaxabs F -GLIBC_2.2 imaxdiv F -GLIBC_2.2 in6addr_any D 0x10 -GLIBC_2.2 in6addr_loopback D 0x10 -GLIBC_2.2 iruserok_af F -GLIBC_2.2 isastream F -GLIBC_2.2 iswblank F -GLIBC_2.2 key_decryptsession F -GLIBC_2.2 key_decryptsession_pk F -GLIBC_2.2 key_encryptsession F -GLIBC_2.2 key_encryptsession_pk F -GLIBC_2.2 key_gendes F -GLIBC_2.2 key_get_conv F -GLIBC_2.2 key_secretkey_is_set F -GLIBC_2.2 key_setnet F -GLIBC_2.2 key_setsecret F -GLIBC_2.2 localeconv F -GLIBC_2.2 lockf64 F -GLIBC_2.2 lseek64 F -GLIBC_2.2 makecontext F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 mempcpy F -GLIBC_2.2 memrchr F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 mmap64 F -GLIBC_2.2 moncontrol F -GLIBC_2.2 msgctl F -GLIBC_2.2 netname2host F -GLIBC_2.2 netname2user F -GLIBC_2.2 nftw F -GLIBC_2.2 nftw64 F -GLIBC_2.2 ngettext F -GLIBC_2.2 ntp_adjtime F -GLIBC_2.2 ntp_gettime F -GLIBC_2.2 open64 F -GLIBC_2.2 passwd2des F -GLIBC_2.2 pclose F -GLIBC_2.2 popen F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 printf_size F -GLIBC_2.2 printf_size_info F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 ptsname F -GLIBC_2.2 ptsname_r F -GLIBC_2.2 putgrent F -GLIBC_2.2 putmsg F -GLIBC_2.2 putpmsg F -GLIBC_2.2 pututxline F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 rawmemchr F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 rtime F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 scandir64 F -GLIBC_2.2 semctl F -GLIBC_2.2 sendfile F -GLIBC_2.2 setrlimit64 F -GLIBC_2.2 setutxent F -GLIBC_2.2 shmctl F -GLIBC_2.2 sighold F -GLIBC_2.2 sigignore F -GLIBC_2.2 sigqueue F -GLIBC_2.2 sigrelse F -GLIBC_2.2 sigset F -GLIBC_2.2 sigtimedwait F -GLIBC_2.2 sigwaitinfo F -GLIBC_2.2 statfs64 F -GLIBC_2.2 statvfs F -GLIBC_2.2 statvfs64 F -GLIBC_2.2 strcasestr F -GLIBC_2.2 strchrnul F -GLIBC_2.2 strtoimax F -GLIBC_2.2 strtoumax F -GLIBC_2.2 strverscmp F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x4 -GLIBC_2.2 svcunix_create F -GLIBC_2.2 svcunixfd_create F -GLIBC_2.2 swapcontext F -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 sys_errlist D 0x11b8 -GLIBC_2.2 sys_nerr D 0x4 -GLIBC_2.2 sys_sigabbrev D 0x100 -GLIBC_2.2 sys_siglist D 0x100 -GLIBC_2.2 sysv_signal F -GLIBC_2.2 tcgetsid F -GLIBC_2.2 tdestroy F -GLIBC_2.2 tmpfile F -GLIBC_2.2 tmpfile64 F -GLIBC_2.2 truncate64 F -GLIBC_2.2 umount2 F -GLIBC_2.2 ungetwc F -GLIBC_2.2 unlockpt F -GLIBC_2.2 updwtmpx F -GLIBC_2.2 user2netname F -GLIBC_2.2 utmpxname F -GLIBC_2.2 versionsort F -GLIBC_2.2 versionsort64 F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 waitid F -GLIBC_2.2 wcscasecmp F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wcsncasecmp F -GLIBC_2.2 wcsnlen F -GLIBC_2.2 wcstoimax F -GLIBC_2.2 wcstoll F -GLIBC_2.2 wcstoull F -GLIBC_2.2 wcstoumax F -GLIBC_2.2 wcswcs F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wordexp F -GLIBC_2.2 wordfree F -GLIBC_2.2 wprintf F -GLIBC_2.2 wscanf F -GLIBC_2.2 xdecrypt F -GLIBC_2.2 xdr_authdes_cred F -GLIBC_2.2 xdr_authdes_verf F -GLIBC_2.2 xdr_getcredres F -GLIBC_2.2 xdr_hyper F -GLIBC_2.2 xdr_int16_t F -GLIBC_2.2 xdr_int32_t F -GLIBC_2.2 xdr_int64_t F -GLIBC_2.2 xdr_int8_t F -GLIBC_2.2 xdr_longlong_t F -GLIBC_2.2 xdr_netnamestr F -GLIBC_2.2 xdr_sizeof F -GLIBC_2.2 xdr_u_hyper F -GLIBC_2.2 xdr_u_longlong_t F -GLIBC_2.2 xdr_uint16_t F -GLIBC_2.2 xdr_uint32_t F -GLIBC_2.2 xdr_uint64_t F -GLIBC_2.2 xdr_uint8_t F -GLIBC_2.2 xdr_unixcred F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoll_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strtoull_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x200 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 posix_fadvise64 F -GLIBC_2.3.3 posix_fallocate64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 sys_sigabbrev D 0x200 -GLIBC_2.3.3 sys_siglist D 0x200 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 futimesat F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 symlinkat F -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fxstatat.c b/sysdeps/unix/sysv/linux/mips/mips32/fxstatat.c deleted file mode 100644 index 0f8b3135d8..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/fxstatat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/mips32/ld.abilist b/sysdeps/unix/sysv/linux/mips/mips32/ld.abilist deleted file mode 100644 index 651b952524..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/ld.abilist +++ /dev/null @@ -1,14 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _r_debug D 0x14 -GLIBC_2.0 calloc F -GLIBC_2.0 free F -GLIBC_2.0 malloc F -GLIBC_2.0 realloc F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __libc_stack_end D 0x4 -GLIBC_2.2 _dl_mcount F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __tls_get_addr F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __stack_chk_guard D 0x4 -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libBrokenLocale.abilist deleted file mode 100644 index 8c497b477e..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libBrokenLocale.abilist +++ /dev/null @@ -1,3 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __ctype_get_mb_cur_max F -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libanl.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libanl.abilist deleted file mode 100644 index bcfbf9e199..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libanl.abilist +++ /dev/null @@ -1,6 +0,0 @@ -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 gai_cancel F -GLIBC_2.2.3 gai_error F -GLIBC_2.2.3 gai_suspend F -GLIBC_2.2.3 getaddrinfo_a F -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libcidn.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libcidn.abilist deleted file mode 100644 index db6b02789d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libcidn.abilist +++ /dev/null @@ -1 +0,0 @@ -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libcrypt.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libcrypt.abilist deleted file mode 100644 index c9d2e54530..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libcrypt.abilist +++ /dev/null @@ -1,9 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 crypt F -GLIBC_2.0 crypt_r F -GLIBC_2.0 encrypt F -GLIBC_2.0 encrypt_r F -GLIBC_2.0 fcrypt F -GLIBC_2.0 setkey F -GLIBC_2.0 setkey_r F -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libdl.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libdl.abilist deleted file mode 100644 index 55f8a1e5e9..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libdl.abilist +++ /dev/null @@ -1,15 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 dladdr F -GLIBC_2.0 dlclose F -GLIBC_2.0 dlerror F -GLIBC_2.0 dlopen F -GLIBC_2.0 dlsym F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 dlopen F -GLIBC_2.2 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist deleted file mode 100644 index 000c011495..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ /dev/null @@ -1,435 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _LIB_VERSION D 0x4 -GLIBC_2.0 acos F -GLIBC_2.0 acosf F -GLIBC_2.0 acosh F -GLIBC_2.0 acoshf F -GLIBC_2.0 acoshl F -GLIBC_2.0 acosl F -GLIBC_2.0 asin F -GLIBC_2.0 asinf F -GLIBC_2.0 asinh F -GLIBC_2.0 asinhf F -GLIBC_2.0 asinhl F -GLIBC_2.0 asinl F -GLIBC_2.0 atan F -GLIBC_2.0 atan2 F -GLIBC_2.0 atan2f F -GLIBC_2.0 atan2l F -GLIBC_2.0 atanf F -GLIBC_2.0 atanh F -GLIBC_2.0 atanhf F -GLIBC_2.0 atanhl F -GLIBC_2.0 atanl F -GLIBC_2.0 cbrt F -GLIBC_2.0 cbrtf F -GLIBC_2.0 cbrtl F -GLIBC_2.0 ceil F -GLIBC_2.0 ceilf F -GLIBC_2.0 ceill F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 cos F -GLIBC_2.0 cosf F -GLIBC_2.0 cosh F -GLIBC_2.0 coshf F -GLIBC_2.0 coshl F -GLIBC_2.0 cosl F -GLIBC_2.0 drem F -GLIBC_2.0 dremf F -GLIBC_2.0 dreml F -GLIBC_2.0 erf F -GLIBC_2.0 erfc F -GLIBC_2.0 erfcf F -GLIBC_2.0 erfcl F -GLIBC_2.0 erff F -GLIBC_2.0 erfl F -GLIBC_2.0 exp F -GLIBC_2.0 expf F -GLIBC_2.0 expl F -GLIBC_2.0 expm1 F -GLIBC_2.0 expm1f F -GLIBC_2.0 expm1l F -GLIBC_2.0 fabs F -GLIBC_2.0 fabsf F -GLIBC_2.0 fabsl F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 floor F -GLIBC_2.0 floorf F -GLIBC_2.0 floorl F -GLIBC_2.0 fmod F -GLIBC_2.0 fmodf F -GLIBC_2.0 fmodl F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 gamma F -GLIBC_2.0 gammaf F -GLIBC_2.0 gammal F -GLIBC_2.0 hypot F -GLIBC_2.0 hypotf F -GLIBC_2.0 hypotl F -GLIBC_2.0 ilogb F -GLIBC_2.0 ilogbf F -GLIBC_2.0 ilogbl F -GLIBC_2.0 j0 F -GLIBC_2.0 j0f F -GLIBC_2.0 j0l F -GLIBC_2.0 j1 F -GLIBC_2.0 j1f F -GLIBC_2.0 j1l F -GLIBC_2.0 jn F -GLIBC_2.0 jnf F -GLIBC_2.0 jnl F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 lgamma F -GLIBC_2.0 lgamma_r F -GLIBC_2.0 lgammaf F -GLIBC_2.0 lgammaf_r F -GLIBC_2.0 lgammal F -GLIBC_2.0 lgammal_r F -GLIBC_2.0 log F -GLIBC_2.0 log10 F -GLIBC_2.0 log10f F -GLIBC_2.0 log10l F -GLIBC_2.0 log1p F -GLIBC_2.0 log1pf F -GLIBC_2.0 log1pl F -GLIBC_2.0 logb F -GLIBC_2.0 logbf F -GLIBC_2.0 logbl F -GLIBC_2.0 logf F -GLIBC_2.0 logl F -GLIBC_2.0 matherr F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 nextafter F -GLIBC_2.0 nextafterf F -GLIBC_2.0 nextafterl F -GLIBC_2.0 pow F -GLIBC_2.0 powf F -GLIBC_2.0 powl F -GLIBC_2.0 remainder F -GLIBC_2.0 remainderf F -GLIBC_2.0 remainderl F -GLIBC_2.0 rint F -GLIBC_2.0 rintf F -GLIBC_2.0 rintl F -GLIBC_2.0 scalb F -GLIBC_2.0 scalbf F -GLIBC_2.0 scalbl F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 signgam D 0x4 -GLIBC_2.0 significand F -GLIBC_2.0 significandf F -GLIBC_2.0 significandl F -GLIBC_2.0 sin F -GLIBC_2.0 sinf F -GLIBC_2.0 sinh F -GLIBC_2.0 sinhf F -GLIBC_2.0 sinhl F -GLIBC_2.0 sinl F -GLIBC_2.0 sqrt F -GLIBC_2.0 sqrtf F -GLIBC_2.0 sqrtl F -GLIBC_2.0 tan F -GLIBC_2.0 tanf F -GLIBC_2.0 tanh F -GLIBC_2.0 tanhf F -GLIBC_2.0 tanhl F -GLIBC_2.0 tanl F -GLIBC_2.0 y0 F -GLIBC_2.0 y0f F -GLIBC_2.0 y0l F -GLIBC_2.0 y1 F -GLIBC_2.0 y1f F -GLIBC_2.0 y1l F -GLIBC_2.0 yn F -GLIBC_2.0 ynf F -GLIBC_2.0 ynl F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __clog10 F -GLIBC_2.2 __clog10f F -GLIBC_2.2 __clog10l F -GLIBC_2.2 __finite F -GLIBC_2.2 __finitef F -GLIBC_2.2 __finitel F -GLIBC_2.2 __fpclassify F -GLIBC_2.2 __fpclassifyf F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 cabs F -GLIBC_2.2 cabsf F -GLIBC_2.2 cabsl F -GLIBC_2.2 cacos F -GLIBC_2.2 cacosf F -GLIBC_2.2 cacosh F -GLIBC_2.2 cacoshf F -GLIBC_2.2 cacoshl F -GLIBC_2.2 cacosl F -GLIBC_2.2 carg F -GLIBC_2.2 cargf F -GLIBC_2.2 cargl F -GLIBC_2.2 casin F -GLIBC_2.2 casinf F -GLIBC_2.2 casinh F -GLIBC_2.2 casinhf F -GLIBC_2.2 casinhl F -GLIBC_2.2 casinl F -GLIBC_2.2 catan F -GLIBC_2.2 catanf F -GLIBC_2.2 catanh F -GLIBC_2.2 catanhf F -GLIBC_2.2 catanhl F -GLIBC_2.2 catanl F -GLIBC_2.2 ccos F -GLIBC_2.2 ccosf F -GLIBC_2.2 ccosh F -GLIBC_2.2 ccoshf F -GLIBC_2.2 ccoshl F -GLIBC_2.2 ccosl F -GLIBC_2.2 cexp F -GLIBC_2.2 cexpf F -GLIBC_2.2 cexpl F -GLIBC_2.2 cimag F -GLIBC_2.2 cimagf F -GLIBC_2.2 cimagl F -GLIBC_2.2 clog F -GLIBC_2.2 clog10 F -GLIBC_2.2 clog10f F -GLIBC_2.2 clog10l F -GLIBC_2.2 clogf F -GLIBC_2.2 clogl F -GLIBC_2.2 conj F -GLIBC_2.2 conjf F -GLIBC_2.2 conjl F -GLIBC_2.2 cpow F -GLIBC_2.2 cpowf F -GLIBC_2.2 cpowl F -GLIBC_2.2 cproj F -GLIBC_2.2 cprojf F -GLIBC_2.2 cprojl F -GLIBC_2.2 creal F -GLIBC_2.2 crealf F -GLIBC_2.2 creall F -GLIBC_2.2 csin F -GLIBC_2.2 csinf F -GLIBC_2.2 csinh F -GLIBC_2.2 csinhf F -GLIBC_2.2 csinhl F -GLIBC_2.2 csinl F -GLIBC_2.2 csqrt F -GLIBC_2.2 csqrtf F -GLIBC_2.2 csqrtl F -GLIBC_2.2 ctan F -GLIBC_2.2 ctanf F -GLIBC_2.2 ctanh F -GLIBC_2.2 ctanhf F -GLIBC_2.2 ctanhl F -GLIBC_2.2 ctanl F -GLIBC_2.2 exp10 F -GLIBC_2.2 exp10f F -GLIBC_2.2 exp10l F -GLIBC_2.2 exp2 F -GLIBC_2.2 exp2f F -GLIBC_2.2 fdim F -GLIBC_2.2 fdimf F -GLIBC_2.2 fdiml F -GLIBC_2.2 feclearexcept F -GLIBC_2.2 fedisableexcept F -GLIBC_2.2 feenableexcept F -GLIBC_2.2 fegetenv F -GLIBC_2.2 fegetexcept F -GLIBC_2.2 fegetexceptflag F -GLIBC_2.2 fegetround F -GLIBC_2.2 feholdexcept F -GLIBC_2.2 feraiseexcept F -GLIBC_2.2 fesetenv F -GLIBC_2.2 fesetexceptflag F -GLIBC_2.2 fesetround F -GLIBC_2.2 fetestexcept F -GLIBC_2.2 feupdateenv F -GLIBC_2.2 fma F -GLIBC_2.2 fmaf F -GLIBC_2.2 fmal F -GLIBC_2.2 fmax F -GLIBC_2.2 fmaxf F -GLIBC_2.2 fmaxl F -GLIBC_2.2 fmin F -GLIBC_2.2 fminf F -GLIBC_2.2 fminl F -GLIBC_2.2 llrint F -GLIBC_2.2 llrintf F -GLIBC_2.2 llrintl F -GLIBC_2.2 llround F -GLIBC_2.2 llroundf F -GLIBC_2.2 llroundl F -GLIBC_2.2 log2 F -GLIBC_2.2 log2f F -GLIBC_2.2 log2l F -GLIBC_2.2 lrint F -GLIBC_2.2 lrintf F -GLIBC_2.2 lrintl F -GLIBC_2.2 lround F -GLIBC_2.2 lroundf F -GLIBC_2.2 lroundl F -GLIBC_2.2 nan F -GLIBC_2.2 nanf F -GLIBC_2.2 nanl F -GLIBC_2.2 nearbyint F -GLIBC_2.2 nearbyintf F -GLIBC_2.2 nearbyintl F -GLIBC_2.2 nexttoward F -GLIBC_2.2 nexttowardf F -GLIBC_2.2 nexttowardl F -GLIBC_2.2 pow10 F -GLIBC_2.2 pow10f F -GLIBC_2.2 pow10l F -GLIBC_2.2 remquo F -GLIBC_2.2 remquof F -GLIBC_2.2 remquol F -GLIBC_2.2 round F -GLIBC_2.2 roundf F -GLIBC_2.2 roundl F -GLIBC_2.2 scalbln F -GLIBC_2.2 scalblnf F -GLIBC_2.2 scalblnl F -GLIBC_2.2 sincos F -GLIBC_2.2 sincosf F -GLIBC_2.2 sincosl F -GLIBC_2.2 tgamma F -GLIBC_2.2 tgammaf F -GLIBC_2.2 tgammal F -GLIBC_2.2 trunc F -GLIBC_2.2 truncf F -GLIBC_2.2 truncl F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 exp2l F -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libnsl.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libnsl.abilist deleted file mode 100644 index 53b4608235..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libnsl.abilist +++ /dev/null @@ -1,124 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __yp_check F -GLIBC_2.0 xdr_domainname F -GLIBC_2.0 xdr_keydat F -GLIBC_2.0 xdr_mapname F -GLIBC_2.0 xdr_peername F -GLIBC_2.0 xdr_valdat F -GLIBC_2.0 xdr_yp_buf F -GLIBC_2.0 xdr_ypbind_binding F -GLIBC_2.0 xdr_ypbind_resp F -GLIBC_2.0 xdr_ypbind_resptype F -GLIBC_2.0 xdr_ypbind_setdom F -GLIBC_2.0 xdr_ypdelete_args F -GLIBC_2.0 xdr_ypmap_parms F -GLIBC_2.0 xdr_ypmaplist F -GLIBC_2.0 xdr_yppush_status F -GLIBC_2.0 xdr_yppushresp_xfr F -GLIBC_2.0 xdr_ypreq_key F -GLIBC_2.0 xdr_ypreq_nokey F -GLIBC_2.0 xdr_ypreq_xfr F -GLIBC_2.0 xdr_ypresp_all F -GLIBC_2.0 xdr_ypresp_key_val F -GLIBC_2.0 xdr_ypresp_maplist F -GLIBC_2.0 xdr_ypresp_master F -GLIBC_2.0 xdr_ypresp_order F -GLIBC_2.0 xdr_ypresp_val F -GLIBC_2.0 xdr_ypresp_xfr F -GLIBC_2.0 xdr_ypstat F -GLIBC_2.0 xdr_ypupdate_args F -GLIBC_2.0 xdr_ypxfrstat F -GLIBC_2.0 yp_all F -GLIBC_2.0 yp_bind F -GLIBC_2.0 yp_first F -GLIBC_2.0 yp_get_default_domain F -GLIBC_2.0 yp_maplist F -GLIBC_2.0 yp_master F -GLIBC_2.0 yp_match F -GLIBC_2.0 yp_next F -GLIBC_2.0 yp_order F -GLIBC_2.0 yp_unbind F -GLIBC_2.0 yp_update F -GLIBC_2.0 ypbinderr_string F -GLIBC_2.0 yperr_string F -GLIBC_2.0 ypprot_err F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __free_fdresult F -GLIBC_2.2 __nis_default_access F -GLIBC_2.2 __nis_default_group F -GLIBC_2.2 __nis_default_owner F -GLIBC_2.2 __nis_default_ttl F -GLIBC_2.2 __nis_finddirectory F -GLIBC_2.2 __nis_hash F -GLIBC_2.2 __nisbind_connect F -GLIBC_2.2 __nisbind_create F -GLIBC_2.2 __nisbind_destroy F -GLIBC_2.2 __nisbind_next F -GLIBC_2.2 nis_add F -GLIBC_2.2 nis_add_entry F -GLIBC_2.2 nis_addmember F -GLIBC_2.2 nis_checkpoint F -GLIBC_2.2 nis_clone_directory F -GLIBC_2.2 nis_clone_object F -GLIBC_2.2 nis_clone_result F -GLIBC_2.2 nis_creategroup F -GLIBC_2.2 nis_destroy_object F -GLIBC_2.2 nis_destroygroup F -GLIBC_2.2 nis_dir_cmp F -GLIBC_2.2 nis_domain_of F -GLIBC_2.2 nis_domain_of_r F -GLIBC_2.2 nis_first_entry F -GLIBC_2.2 nis_free_directory F -GLIBC_2.2 nis_free_object F -GLIBC_2.2 nis_free_request F -GLIBC_2.2 nis_freenames F -GLIBC_2.2 nis_freeresult F -GLIBC_2.2 nis_freeservlist F -GLIBC_2.2 nis_freetags F -GLIBC_2.2 nis_getnames F -GLIBC_2.2 nis_getservlist F -GLIBC_2.2 nis_ismember F -GLIBC_2.2 nis_leaf_of F -GLIBC_2.2 nis_leaf_of_r F -GLIBC_2.2 nis_lerror F -GLIBC_2.2 nis_list F -GLIBC_2.2 nis_local_directory F -GLIBC_2.2 nis_local_group F -GLIBC_2.2 nis_local_host F -GLIBC_2.2 nis_local_principal F -GLIBC_2.2 nis_lookup F -GLIBC_2.2 nis_mkdir F -GLIBC_2.2 nis_modify F -GLIBC_2.2 nis_modify_entry F -GLIBC_2.2 nis_name_of F -GLIBC_2.2 nis_name_of_r F -GLIBC_2.2 nis_next_entry F -GLIBC_2.2 nis_perror F -GLIBC_2.2 nis_ping F -GLIBC_2.2 nis_print_directory F -GLIBC_2.2 nis_print_entry F -GLIBC_2.2 nis_print_group F -GLIBC_2.2 nis_print_group_entry F -GLIBC_2.2 nis_print_link F -GLIBC_2.2 nis_print_object F -GLIBC_2.2 nis_print_result F -GLIBC_2.2 nis_print_rights F -GLIBC_2.2 nis_print_table F -GLIBC_2.2 nis_read_obj F -GLIBC_2.2 nis_remove F -GLIBC_2.2 nis_remove_entry F -GLIBC_2.2 nis_removemember F -GLIBC_2.2 nis_rmdir F -GLIBC_2.2 nis_servstate F -GLIBC_2.2 nis_sperrno F -GLIBC_2.2 nis_sperror F -GLIBC_2.2 nis_sperror_r F -GLIBC_2.2 nis_stats F -GLIBC_2.2 nis_verifygroup F -GLIBC_2.2 nis_write_obj F -GLIBC_2.2 readColdStartFile F -GLIBC_2.2 writeColdStartFile F -GLIBC_2.2 xdr_cback_data F -GLIBC_2.2 xdr_obj_p F -GLIBC_2.2 xdr_ypall F -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libnss_compat.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libnss_compat.abilist deleted file mode 100644 index db6b02789d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libnss_compat.abilist +++ /dev/null @@ -1 +0,0 @@ -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libnss_db.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libnss_db.abilist deleted file mode 100644 index db6b02789d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libnss_db.abilist +++ /dev/null @@ -1 +0,0 @@ -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libnss_dns.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libnss_dns.abilist deleted file mode 100644 index db6b02789d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libnss_dns.abilist +++ /dev/null @@ -1 +0,0 @@ -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libnss_files.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libnss_files.abilist deleted file mode 100644 index db6b02789d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libnss_files.abilist +++ /dev/null @@ -1 +0,0 @@ -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libnss_hesiod.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libnss_hesiod.abilist deleted file mode 100644 index db6b02789d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libnss_hesiod.abilist +++ /dev/null @@ -1 +0,0 @@ -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libnss_nis.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libnss_nis.abilist deleted file mode 100644 index db6b02789d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libnss_nis.abilist +++ /dev/null @@ -1 +0,0 @@ -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libnss_nisplus.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libnss_nisplus.abilist deleted file mode 100644 index db6b02789d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libnss_nisplus.abilist +++ /dev/null @@ -1 +0,0 @@ -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist deleted file mode 100644 index 280d99d974..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist +++ /dev/null @@ -1,257 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 __close F -GLIBC_2.0 __connect F -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __fork F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __lseek F -GLIBC_2.0 __open F -GLIBC_2.0 __pthread_getspecific F -GLIBC_2.0 __pthread_key_create F -GLIBC_2.0 __pthread_mutex_destroy F -GLIBC_2.0 __pthread_mutex_init F -GLIBC_2.0 __pthread_mutex_lock F -GLIBC_2.0 __pthread_mutex_trylock F -GLIBC_2.0 __pthread_mutex_unlock F -GLIBC_2.0 __pthread_mutexattr_destroy F -GLIBC_2.0 __pthread_mutexattr_init F -GLIBC_2.0 __pthread_mutexattr_settype F -GLIBC_2.0 __pthread_once F -GLIBC_2.0 __pthread_setspecific F -GLIBC_2.0 __read F -GLIBC_2.0 __send F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __wait F -GLIBC_2.0 __write F -GLIBC_2.0 _pthread_cleanup_pop F -GLIBC_2.0 _pthread_cleanup_pop_restore F -GLIBC_2.0 _pthread_cleanup_push F -GLIBC_2.0 _pthread_cleanup_push_defer F -GLIBC_2.0 accept F -GLIBC_2.0 close F -GLIBC_2.0 connect F -GLIBC_2.0 fcntl F -GLIBC_2.0 flockfile F -GLIBC_2.0 fork F -GLIBC_2.0 fsync F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 funlockfile F -GLIBC_2.0 longjmp F -GLIBC_2.0 lseek F -GLIBC_2.0 msync F -GLIBC_2.0 nanosleep F -GLIBC_2.0 open F -GLIBC_2.0 pause F -GLIBC_2.0 pthread_atfork F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cancel F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_create F -GLIBC_2.0 pthread_detach F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_getspecific F -GLIBC_2.0 pthread_join F -GLIBC_2.0 pthread_key_create F -GLIBC_2.0 pthread_key_delete F -GLIBC_2.0 pthread_kill F -GLIBC_2.0 pthread_kill_other_threads_np F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_trylock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_mutexattr_destroy F -GLIBC_2.0 pthread_mutexattr_getkind_np F -GLIBC_2.0 pthread_mutexattr_init F -GLIBC_2.0 pthread_mutexattr_setkind_np F -GLIBC_2.0 pthread_once F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 pthread_setspecific F -GLIBC_2.0 pthread_sigmask F -GLIBC_2.0 pthread_testcancel F -GLIBC_2.0 raise F -GLIBC_2.0 read F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 sem_destroy F -GLIBC_2.0 sem_getvalue F -GLIBC_2.0 sem_init F -GLIBC_2.0 sem_post F -GLIBC_2.0 sem_trywait F -GLIBC_2.0 sem_wait F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 sigaction F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 sigwait F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 vfork F -GLIBC_2.0 wait F -GLIBC_2.0 waitpid F -GLIBC_2.0 write F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __open64 F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pthread_rwlock_destroy F -GLIBC_2.2 __pthread_rwlock_init F -GLIBC_2.2 __pthread_rwlock_rdlock F -GLIBC_2.2 __pthread_rwlock_tryrdlock F -GLIBC_2.2 __pthread_rwlock_trywrlock F -GLIBC_2.2 __pthread_rwlock_unlock F -GLIBC_2.2 __pthread_rwlock_wrlock F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __res_state F -GLIBC_2.2 __vfork F -GLIBC_2.2 lseek64 F -GLIBC_2.2 open64 F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 pthread_attr_getguardsize F -GLIBC_2.2 pthread_attr_getstack F -GLIBC_2.2 pthread_attr_getstackaddr F -GLIBC_2.2 pthread_attr_getstacksize F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 pthread_attr_setguardsize F -GLIBC_2.2 pthread_attr_setstack F -GLIBC_2.2 pthread_attr_setstackaddr F -GLIBC_2.2 pthread_attr_setstacksize F -GLIBC_2.2 pthread_barrier_destroy F -GLIBC_2.2 pthread_barrier_init F -GLIBC_2.2 pthread_barrier_wait F -GLIBC_2.2 pthread_barrierattr_destroy F -GLIBC_2.2 pthread_barrierattr_init F -GLIBC_2.2 pthread_barrierattr_setpshared F -GLIBC_2.2 pthread_condattr_getpshared F -GLIBC_2.2 pthread_condattr_setpshared F -GLIBC_2.2 pthread_create F -GLIBC_2.2 pthread_getconcurrency F -GLIBC_2.2 pthread_getcpuclockid F -GLIBC_2.2 pthread_mutex_timedlock F -GLIBC_2.2 pthread_mutexattr_getpshared F -GLIBC_2.2 pthread_mutexattr_gettype F -GLIBC_2.2 pthread_mutexattr_setpshared F -GLIBC_2.2 pthread_mutexattr_settype F -GLIBC_2.2 pthread_rwlock_destroy F -GLIBC_2.2 pthread_rwlock_init F -GLIBC_2.2 pthread_rwlock_rdlock F -GLIBC_2.2 pthread_rwlock_timedrdlock F -GLIBC_2.2 pthread_rwlock_timedwrlock F -GLIBC_2.2 pthread_rwlock_tryrdlock F -GLIBC_2.2 pthread_rwlock_trywrlock F -GLIBC_2.2 pthread_rwlock_unlock F -GLIBC_2.2 pthread_rwlock_wrlock F -GLIBC_2.2 pthread_rwlockattr_destroy F -GLIBC_2.2 pthread_rwlockattr_getkind_np F -GLIBC_2.2 pthread_rwlockattr_getpshared F -GLIBC_2.2 pthread_rwlockattr_init F -GLIBC_2.2 pthread_rwlockattr_setkind_np F -GLIBC_2.2 pthread_rwlockattr_setpshared F -GLIBC_2.2 pthread_setconcurrency F -GLIBC_2.2 pthread_spin_destroy F -GLIBC_2.2 pthread_spin_init F -GLIBC_2.2 pthread_spin_lock F -GLIBC_2.2 pthread_spin_trylock F -GLIBC_2.2 pthread_spin_unlock F -GLIBC_2.2 pthread_yield F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 sem_close F -GLIBC_2.2 sem_destroy F -GLIBC_2.2 sem_getvalue F -GLIBC_2.2 sem_init F -GLIBC_2.2 sem_open F -GLIBC_2.2 sem_post F -GLIBC_2.2 sem_timedwait F -GLIBC_2.2 sem_trywait F -GLIBC_2.2 sem_unlink F -GLIBC_2.2 sem_wait F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 pthread_getattr_np F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_attr_setstack F -GLIBC_2.3.3 pthread_attr_setstacksize F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libresolv.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libresolv.abilist deleted file mode 100644 index 1f89eb6cd9..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libresolv.abilist +++ /dev/null @@ -1,101 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __b64_ntop F -GLIBC_2.0 __b64_pton F -GLIBC_2.0 __dn_comp F -GLIBC_2.0 __dn_count_labels F -GLIBC_2.0 __dn_skipname F -GLIBC_2.0 __fp_nquery F -GLIBC_2.0 __fp_query F -GLIBC_2.0 __fp_resstat F -GLIBC_2.0 __hostalias F -GLIBC_2.0 __loc_aton F -GLIBC_2.0 __loc_ntoa F -GLIBC_2.0 __p_cdname F -GLIBC_2.0 __p_cdnname F -GLIBC_2.0 __p_class F -GLIBC_2.0 __p_class_syms D 0x54 -GLIBC_2.0 __p_fqname F -GLIBC_2.0 __p_fqnname F -GLIBC_2.0 __p_option F -GLIBC_2.0 __p_query F -GLIBC_2.0 __p_secstodate F -GLIBC_2.0 __p_time F -GLIBC_2.0 __p_type F -GLIBC_2.0 __p_type_syms D 0x228 -GLIBC_2.0 __putlong F -GLIBC_2.0 __putshort F -GLIBC_2.0 __res_close F -GLIBC_2.0 __res_dnok F -GLIBC_2.0 __res_hnok F -GLIBC_2.0 __res_isourserver F -GLIBC_2.0 __res_mailok F -GLIBC_2.0 __res_nameinquery F -GLIBC_2.0 __res_ownok F -GLIBC_2.0 __res_queriesmatch F -GLIBC_2.0 __res_send F -GLIBC_2.0 __sym_ntop F -GLIBC_2.0 __sym_ntos F -GLIBC_2.0 __sym_ston F -GLIBC_2.0 _gethtbyaddr F -GLIBC_2.0 _gethtbyname F -GLIBC_2.0 _gethtbyname2 F -GLIBC_2.0 _gethtent F -GLIBC_2.0 _getlong F -GLIBC_2.0 _getshort F -GLIBC_2.0 _res_opcodes D 0x40 -GLIBC_2.0 _sethtent F -GLIBC_2.0 dn_expand F -GLIBC_2.0 inet_net_ntop F -GLIBC_2.0 inet_net_pton F -GLIBC_2.0 inet_neta F -GLIBC_2.0 res_gethostbyaddr F -GLIBC_2.0 res_gethostbyname F -GLIBC_2.0 res_gethostbyname2 F -GLIBC_2.0 res_mkquery F -GLIBC_2.0 res_query F -GLIBC_2.0 res_querydomain F -GLIBC_2.0 res_search F -GLIBC_2.0 res_send_setqhook F -GLIBC_2.0 res_send_setrhook F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __dn_expand F -GLIBC_2.2 __res_hostalias F -GLIBC_2.2 __res_mkquery F -GLIBC_2.2 __res_nmkquery F -GLIBC_2.2 __res_nquery F -GLIBC_2.2 __res_nquerydomain F -GLIBC_2.2 __res_nsearch F -GLIBC_2.2 __res_nsend F -GLIBC_2.2 __res_query F -GLIBC_2.2 __res_querydomain F -GLIBC_2.2 __res_search F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/librt.abilist b/sysdeps/unix/sysv/linux/mips/mips32/librt.abilist deleted file mode 100644 index 61f63e1524..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/librt.abilist +++ /dev/null @@ -1,47 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 aio_cancel F -GLIBC_2.2 aio_cancel64 F -GLIBC_2.2 aio_error F -GLIBC_2.2 aio_error64 F -GLIBC_2.2 aio_fsync F -GLIBC_2.2 aio_fsync64 F -GLIBC_2.2 aio_init F -GLIBC_2.2 aio_read F -GLIBC_2.2 aio_read64 F -GLIBC_2.2 aio_return F -GLIBC_2.2 aio_return64 F -GLIBC_2.2 aio_suspend F -GLIBC_2.2 aio_suspend64 F -GLIBC_2.2 aio_write F -GLIBC_2.2 aio_write64 F -GLIBC_2.2 clock_getcpuclockid F -GLIBC_2.2 clock_getres F -GLIBC_2.2 clock_gettime F -GLIBC_2.2 clock_nanosleep F -GLIBC_2.2 clock_settime F -GLIBC_2.2 lio_listio F -GLIBC_2.2 lio_listio64 F -GLIBC_2.2 shm_open F -GLIBC_2.2 shm_unlink F -GLIBC_2.2 timer_create F -GLIBC_2.2 timer_delete F -GLIBC_2.2 timer_getoverrun F -GLIBC_2.2 timer_gettime F -GLIBC_2.2 timer_settime F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libthread_db.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libthread_db.abilist deleted file mode 100644 index e47140b61c..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libthread_db.abilist +++ /dev/null @@ -1,45 +0,0 @@ -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 td_init F -GLIBC_2.1.3 td_log F -GLIBC_2.1.3 td_ta_clear_event F -GLIBC_2.1.3 td_ta_delete F -GLIBC_2.1.3 td_ta_enable_stats F -GLIBC_2.1.3 td_ta_event_addr F -GLIBC_2.1.3 td_ta_event_getmsg F -GLIBC_2.1.3 td_ta_get_nthreads F -GLIBC_2.1.3 td_ta_get_ph F -GLIBC_2.1.3 td_ta_get_stats F -GLIBC_2.1.3 td_ta_map_id2thr F -GLIBC_2.1.3 td_ta_map_lwp2thr F -GLIBC_2.1.3 td_ta_new F -GLIBC_2.1.3 td_ta_reset_stats F -GLIBC_2.1.3 td_ta_set_event F -GLIBC_2.1.3 td_ta_setconcurrency F -GLIBC_2.1.3 td_ta_thr_iter F -GLIBC_2.1.3 td_ta_tsd_iter F -GLIBC_2.1.3 td_thr_clear_event F -GLIBC_2.1.3 td_thr_dbresume F -GLIBC_2.1.3 td_thr_dbsuspend F -GLIBC_2.1.3 td_thr_event_enable F -GLIBC_2.1.3 td_thr_event_getmsg F -GLIBC_2.1.3 td_thr_get_info F -GLIBC_2.1.3 td_thr_getfpregs F -GLIBC_2.1.3 td_thr_getgregs F -GLIBC_2.1.3 td_thr_getxregs F -GLIBC_2.1.3 td_thr_getxregsize F -GLIBC_2.1.3 td_thr_set_event F -GLIBC_2.1.3 td_thr_setfpregs F -GLIBC_2.1.3 td_thr_setgregs F -GLIBC_2.1.3 td_thr_setprio F -GLIBC_2.1.3 td_thr_setsigpending F -GLIBC_2.1.3 td_thr_setxregs F -GLIBC_2.1.3 td_thr_sigsetmask F -GLIBC_2.1.3 td_thr_tsd F -GLIBC_2.1.3 td_thr_validate F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 td_symbol_list F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libutil.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libutil.abilist deleted file mode 100644 index ce712a238c..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/libutil.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 forkpty F -GLIBC_2.0 login F -GLIBC_2.0 login_tty F -GLIBC_2.0 logout F -GLIBC_2.0 logwtmp F -GLIBC_2.0 openpty F -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/lockf64.c b/sysdeps/unix/sysv/linux/mips/mips32/lockf64.c deleted file mode 100644 index a88f5a784a..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/lockf64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/Makefile b/sysdeps/unix/sysv/linux/mips/mips32/mips16/Makefile deleted file mode 100644 index fa9fcb7e6f..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -ifeq ($(subdir),misc) -sysdep_routines += mips16-syscall0 mips16-syscall1 mips16-syscall2 -sysdep_routines += mips16-syscall3 mips16-syscall4 mips16-syscall5 -sysdep_routines += mips16-syscall6 mips16-syscall7 -CFLAGS-mips16-syscall0.c += -fexceptions -CFLAGS-mips16-syscall1.c += -fexceptions -CFLAGS-mips16-syscall2.c += -fexceptions -CFLAGS-mips16-syscall3.c += -fexceptions -CFLAGS-mips16-syscall4.c += -fexceptions -CFLAGS-mips16-syscall5.c += -fexceptions -CFLAGS-mips16-syscall6.c += -fexceptions -CFLAGS-mips16-syscall7.c += -fexceptions -endif diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/Versions b/sysdeps/unix/sysv/linux/mips/mips32/mips16/Versions deleted file mode 100644 index 73bcfb566c..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/Versions +++ /dev/null @@ -1,6 +0,0 @@ -libc { - GLIBC_PRIVATE { - __mips16_syscall0; __mips16_syscall1; __mips16_syscall2; __mips16_syscall3; - __mips16_syscall4; __mips16_syscall5; __mips16_syscall6; __mips16_syscall7; - } -} diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall.h b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall.h deleted file mode 100644 index 880e9908e8..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall.h +++ /dev/null @@ -1,89 +0,0 @@ -/* MIPS16 syscall wrappers. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef MIPS16_SYSCALL_H -#define MIPS16_SYSCALL_H 1 - -#define __nomips16 __attribute__ ((nomips16)) - -union __mips16_syscall_return - { - long long val; - struct - { - long v0; - long v1; - } - reg; - }; - -long long __nomips16 __mips16_syscall0 (long number); -#define __mips16_syscall0(dummy, number) \ - __mips16_syscall0 ((long) (number)) - -long long __nomips16 __mips16_syscall1 (long a0, - long number); -#define __mips16_syscall1(a0, number) \ - __mips16_syscall1 ((long) (a0), \ - (long) (number)) - -long long __nomips16 __mips16_syscall2 (long a0, long a1, - long number); -#define __mips16_syscall2(a0, a1, number) \ - __mips16_syscall2 ((long) (a0), (long) (a1), \ - (long) (number)) - -long long __nomips16 __mips16_syscall3 (long a0, long a1, long a2, - long number); -#define __mips16_syscall3(a0, a1, a2, number) \ - __mips16_syscall3 ((long) (a0), (long) (a1), (long) (a2), \ - (long) (number)) - -long long __nomips16 __mips16_syscall4 (long a0, long a1, long a2, long a3, - long number); -#define __mips16_syscall4(a0, a1, a2, a3, number) \ - __mips16_syscall4 ((long) (a0), (long) (a1), (long) (a2), \ - (long) (a3), \ - (long) (number)) - -long long __nomips16 __mips16_syscall5 (long a0, long a1, long a2, long a3, - long a4, - long number); -#define __mips16_syscall5(a0, a1, a2, a3, a4, number) \ - __mips16_syscall5 ((long) (a0), (long) (a1), (long) (a2), \ - (long) (a3), (long) (a4), \ - (long) (number)) - -long long __nomips16 __mips16_syscall6 (long a0, long a1, long a2, long a3, - long a4, long a5, - long number); -#define __mips16_syscall6(a0, a1, a2, a3, a4, a5, number) \ - __mips16_syscall6 ((long) (a0), (long) (a1), (long) (a2), \ - (long) (a3), (long) (a4), (long) (a5), \ - (long) (number)) - -long long __nomips16 __mips16_syscall7 (long a0, long a1, long a2, long a3, - long a4, long a5, long a6, - long number); -#define __mips16_syscall7(a0, a1, a2, a3, a4, a5, a6, number) \ - __mips16_syscall7 ((long) (a0), (long) (a1), (long) (a2), \ - (long) (a3), (long) (a4), (long) (a5), \ - (long) (a6), \ - (long) (number)) - -#endif diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall0.c b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall0.c deleted file mode 100644 index 490245b34e..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall0.c +++ /dev/null @@ -1,30 +0,0 @@ -/* MIPS16 syscall wrappers. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef __mips16_syscall0 - -long long __nomips16 -__mips16_syscall0 (long number) -{ - union __mips16_syscall_return ret; - ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 0); - return ret.val; -} diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall1.c b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall1.c deleted file mode 100644 index 3061e8accb..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall1.c +++ /dev/null @@ -1,32 +0,0 @@ -/* MIPS16 syscall wrappers. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef __mips16_syscall1 - -long long __nomips16 -__mips16_syscall1 (long a0, - long number) -{ - union __mips16_syscall_return ret; - ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 1, - a0); - return ret.val; -} diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall2.c b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall2.c deleted file mode 100644 index 440a4ed285..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall2.c +++ /dev/null @@ -1,32 +0,0 @@ -/* MIPS16 syscall wrappers. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef __mips16_syscall2 - -long long __nomips16 -__mips16_syscall2 (long a0, long a1, - long number) -{ - union __mips16_syscall_return ret; - ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 2, - a0, a1); - return ret.val; -} diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall3.c b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall3.c deleted file mode 100644 index c3f83fc1f6..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall3.c +++ /dev/null @@ -1,32 +0,0 @@ -/* MIPS16 syscall wrappers. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef __mips16_syscall3 - -long long __nomips16 -__mips16_syscall3 (long a0, long a1, long a2, - long number) -{ - union __mips16_syscall_return ret; - ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 3, - a0, a1, a2); - return ret.val; -} diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall4.c b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall4.c deleted file mode 100644 index 496297d296..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall4.c +++ /dev/null @@ -1,32 +0,0 @@ -/* MIPS16 syscall wrappers. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef __mips16_syscall4 - -long long __nomips16 -__mips16_syscall4 (long a0, long a1, long a2, long a3, - long number) -{ - union __mips16_syscall_return ret; - ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 4, - a0, a1, a2, a3); - return ret.val; -} diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall5.c b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall5.c deleted file mode 100644 index ad265d88e2..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall5.c +++ /dev/null @@ -1,33 +0,0 @@ -/* MIPS16 syscall wrappers. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef __mips16_syscall5 - -long long __nomips16 -__mips16_syscall5 (long a0, long a1, long a2, long a3, - long a4, - long number) -{ - union __mips16_syscall_return ret; - ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 5, - a0, a1, a2, a3, a4); - return ret.val; -} diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall6.c b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall6.c deleted file mode 100644 index bfbd395ed3..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall6.c +++ /dev/null @@ -1,33 +0,0 @@ -/* MIPS16 syscall wrappers. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef __mips16_syscall6 - -long long __nomips16 -__mips16_syscall6 (long a0, long a1, long a2, long a3, - long a4, long a5, - long number) -{ - union __mips16_syscall_return ret; - ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 6, - a0, a1, a2, a3, a4, a5); - return ret.val; -} diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall7.c b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall7.c deleted file mode 100644 index e1267616dc..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall7.c +++ /dev/null @@ -1,33 +0,0 @@ -/* MIPS16 syscall wrappers. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#undef __mips16_syscall7 - -long long __nomips16 -__mips16_syscall7 (long a0, long a1, long a2, long a3, - long a4, long a5, long a6, - long number) -{ - union __mips16_syscall_return ret; - ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 7, - a0, a1, a2, a3, a4, a5, a6); - return ret.val; -} diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist deleted file mode 100644 index 36ee235d71..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist +++ /dev/null @@ -1,2254 +0,0 @@ -GCC_3.0 GCC_3.0 A -GCC_3.0 _Unwind_Find_FDE F -GCC_3.0 __deregister_frame_info_bases F -GCC_3.0 __register_frame_info_bases F -GCC_3.0 __register_frame_info_table_bases F -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_adjust_column F -GLIBC_2.0 _IO_default_doallocate F -GLIBC_2.0 _IO_default_finish F -GLIBC_2.0 _IO_default_pbackfail F -GLIBC_2.0 _IO_default_uflow F -GLIBC_2.0 _IO_default_xsgetn F -GLIBC_2.0 _IO_default_xsputn F -GLIBC_2.0 _IO_do_write F -GLIBC_2.0 _IO_doallocbuf F -GLIBC_2.0 _IO_fclose F -GLIBC_2.0 _IO_fdopen F -GLIBC_2.0 _IO_feof F -GLIBC_2.0 _IO_ferror F -GLIBC_2.0 _IO_fflush F -GLIBC_2.0 _IO_fgetpos F -GLIBC_2.0 _IO_fgets F -GLIBC_2.0 _IO_file_attach F -GLIBC_2.0 _IO_file_close F -GLIBC_2.0 _IO_file_close_it F -GLIBC_2.0 _IO_file_doallocate F -GLIBC_2.0 _IO_file_fopen F -GLIBC_2.0 _IO_file_init F -GLIBC_2.0 _IO_file_jumps D 0x54 -GLIBC_2.0 _IO_file_open F -GLIBC_2.0 _IO_file_overflow F -GLIBC_2.0 _IO_file_read F -GLIBC_2.0 _IO_file_seek F -GLIBC_2.0 _IO_file_seekoff F -GLIBC_2.0 _IO_file_setbuf F -GLIBC_2.0 _IO_file_stat F -GLIBC_2.0 _IO_file_sync F -GLIBC_2.0 _IO_file_underflow F -GLIBC_2.0 _IO_file_write F -GLIBC_2.0 _IO_file_xsputn F -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_flush_all F -GLIBC_2.0 _IO_flush_all_linebuffered F -GLIBC_2.0 _IO_fopen F -GLIBC_2.0 _IO_fprintf F -GLIBC_2.0 _IO_fputs F -GLIBC_2.0 _IO_fread F -GLIBC_2.0 _IO_free_backup_area F -GLIBC_2.0 _IO_fsetpos F -GLIBC_2.0 _IO_ftell F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 _IO_fwrite F -GLIBC_2.0 _IO_getc F -GLIBC_2.0 _IO_getline F -GLIBC_2.0 _IO_gets F -GLIBC_2.0 _IO_init F -GLIBC_2.0 _IO_init_marker F -GLIBC_2.0 _IO_link_in F -GLIBC_2.0 _IO_list_all D 0x4 -GLIBC_2.0 _IO_marker_delta F -GLIBC_2.0 _IO_marker_difference F -GLIBC_2.0 _IO_padn F -GLIBC_2.0 _IO_peekc_locked F -GLIBC_2.0 _IO_popen F -GLIBC_2.0 _IO_printf F -GLIBC_2.0 _IO_proc_close F -GLIBC_2.0 _IO_proc_open F -GLIBC_2.0 _IO_putc F -GLIBC_2.0 _IO_puts F -GLIBC_2.0 _IO_remove_marker F -GLIBC_2.0 _IO_seekmark F -GLIBC_2.0 _IO_seekoff F -GLIBC_2.0 _IO_seekpos F -GLIBC_2.0 _IO_setb F -GLIBC_2.0 _IO_setbuffer F -GLIBC_2.0 _IO_setvbuf F -GLIBC_2.0 _IO_sgetn F -GLIBC_2.0 _IO_sprintf F -GLIBC_2.0 _IO_sputbackc F -GLIBC_2.0 _IO_sscanf F -GLIBC_2.0 _IO_stderr_ D 0x50 -GLIBC_2.0 _IO_stdin_ D 0x50 -GLIBC_2.0 _IO_stdout_ D 0x50 -GLIBC_2.0 _IO_str_init_readonly F -GLIBC_2.0 _IO_str_init_static F -GLIBC_2.0 _IO_str_overflow F -GLIBC_2.0 _IO_str_pbackfail F -GLIBC_2.0 _IO_str_seekoff F -GLIBC_2.0 _IO_str_underflow F -GLIBC_2.0 _IO_sungetc F -GLIBC_2.0 _IO_switch_to_get_mode F -GLIBC_2.0 _IO_un_link F -GLIBC_2.0 _IO_ungetc F -GLIBC_2.0 _IO_unsave_markers F -GLIBC_2.0 _IO_vfprintf F -GLIBC_2.0 _IO_vfscanf F -GLIBC_2.0 _IO_vsprintf F -GLIBC_2.0 ___brk_addr D 0x4 -GLIBC_2.0 __adjtimex F -GLIBC_2.0 __after_morecore_hook D 0x4 -GLIBC_2.0 __argz_count F -GLIBC_2.0 __argz_next F -GLIBC_2.0 __argz_stringify F -GLIBC_2.0 __assert_fail F -GLIBC_2.0 __assert_perror_fail F -GLIBC_2.0 __bsd_getpgrp F -GLIBC_2.0 __bzero F -GLIBC_2.0 __check_rhosts_file D 0x4 -GLIBC_2.0 __clone F -GLIBC_2.0 __close F -GLIBC_2.0 __cmsg_nxthdr F -GLIBC_2.0 __connect F -GLIBC_2.0 __ctype32_b D 0x4 -GLIBC_2.0 __ctype_b D 0x4 -GLIBC_2.0 __ctype_get_mb_cur_max F -GLIBC_2.0 __ctype_tolower D 0x4 -GLIBC_2.0 __ctype_toupper D 0x4 -GLIBC_2.0 __curbrk D 0x4 -GLIBC_2.0 __daylight D 0x4 -GLIBC_2.0 __dcgettext F -GLIBC_2.0 __default_morecore F -GLIBC_2.0 __deregister_frame F -GLIBC_2.0 __deregister_frame_info F -GLIBC_2.0 __dgettext F -GLIBC_2.0 __dup2 F -GLIBC_2.0 __environ D 0x4 -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __ffs F -GLIBC_2.0 __finite F -GLIBC_2.0 __finitef F -GLIBC_2.0 __finitel F -GLIBC_2.0 __fork F -GLIBC_2.0 __fpu_control D 0x4 -GLIBC_2.0 __frame_state_for F -GLIBC_2.0 __free_hook D 0x4 -GLIBC_2.0 __fxstat F -GLIBC_2.0 __getdelim F -GLIBC_2.0 __getpagesize F -GLIBC_2.0 __getpgid F -GLIBC_2.0 __getpid F -GLIBC_2.0 __gettimeofday F -GLIBC_2.0 __gmtime_r F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __isinf F -GLIBC_2.0 __isinff F -GLIBC_2.0 __isinfl F -GLIBC_2.0 __isnan F -GLIBC_2.0 __isnanf F -GLIBC_2.0 __isnanl F -GLIBC_2.0 __iswctype F -GLIBC_2.0 __ivaliduser F -GLIBC_2.0 __libc_calloc F -GLIBC_2.0 __libc_free F -GLIBC_2.0 __libc_init_first F -GLIBC_2.0 __libc_mallinfo F -GLIBC_2.0 __libc_malloc F -GLIBC_2.0 __libc_mallopt F -GLIBC_2.0 __libc_memalign F -GLIBC_2.0 __libc_pvalloc F -GLIBC_2.0 __libc_realloc F -GLIBC_2.0 __libc_start_main F -GLIBC_2.0 __libc_valloc F -GLIBC_2.0 __lseek F -GLIBC_2.0 __lxstat F -GLIBC_2.0 __malloc_hook D 0x4 -GLIBC_2.0 __malloc_initialize_hook D 0x4 -GLIBC_2.0 __mbrlen F -GLIBC_2.0 __mbrtowc F -GLIBC_2.0 __memalign_hook D 0x4 -GLIBC_2.0 __mempcpy F -GLIBC_2.0 __monstartup F -GLIBC_2.0 __morecore D 0x4 -GLIBC_2.0 __nss_configure_lookup F -GLIBC_2.0 __nss_database_lookup F -GLIBC_2.0 __nss_group_lookup F -GLIBC_2.0 __nss_hosts_lookup F -GLIBC_2.0 __nss_next F -GLIBC_2.0 __nss_passwd_lookup F -GLIBC_2.0 __open F -GLIBC_2.0 __overflow F -GLIBC_2.0 __pipe F -GLIBC_2.0 __printf_fp F -GLIBC_2.0 __profile_frequency F -GLIBC_2.0 __progname D 0x4 -GLIBC_2.0 __progname_full D 0x4 -GLIBC_2.0 __rcmd_errstr D 0x4 -GLIBC_2.0 __read F -GLIBC_2.0 __realloc_hook D 0x4 -GLIBC_2.0 __register_frame F -GLIBC_2.0 __register_frame_info F -GLIBC_2.0 __register_frame_info_table F -GLIBC_2.0 __register_frame_table F -GLIBC_2.0 __res_randomid F -GLIBC_2.0 __sbrk F -GLIBC_2.0 __sched_get_priority_max F -GLIBC_2.0 __sched_get_priority_min F -GLIBC_2.0 __sched_getparam F -GLIBC_2.0 __sched_getscheduler F -GLIBC_2.0 __sched_setscheduler F -GLIBC_2.0 __sched_yield F -GLIBC_2.0 __secure_getenv F -GLIBC_2.0 __select F -GLIBC_2.0 __send F -GLIBC_2.0 __setpgid F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __sigaddset F -GLIBC_2.0 __sigdelset F -GLIBC_2.0 __sigismember F -GLIBC_2.0 __sigpause F -GLIBC_2.0 __sigsetjmp F -GLIBC_2.0 __stpcpy F -GLIBC_2.0 __stpncpy F -GLIBC_2.0 __strcasecmp F -GLIBC_2.0 __strdup F -GLIBC_2.0 __strerror_r F -GLIBC_2.0 __strtod_internal F -GLIBC_2.0 __strtof_internal F -GLIBC_2.0 __strtok_r F -GLIBC_2.0 __strtol_internal F -GLIBC_2.0 __strtold_internal F -GLIBC_2.0 __strtoll_internal F -GLIBC_2.0 __strtoq_internal F -GLIBC_2.0 __strtoul_internal F -GLIBC_2.0 __strtoull_internal F -GLIBC_2.0 __strtouq_internal F -GLIBC_2.0 __sysv_signal F -GLIBC_2.0 __timezone D 0x4 -GLIBC_2.0 __tzname D 0x8 -GLIBC_2.0 __uflow F -GLIBC_2.0 __underflow F -GLIBC_2.0 __vfscanf F -GLIBC_2.0 __vsnprintf F -GLIBC_2.0 __vsscanf F -GLIBC_2.0 __wait F -GLIBC_2.0 __waitpid F -GLIBC_2.0 __wcstod_internal F -GLIBC_2.0 __wcstof_internal F -GLIBC_2.0 __wcstol_internal F -GLIBC_2.0 __wcstold_internal F -GLIBC_2.0 __wcstoll_internal F -GLIBC_2.0 __wcstoul_internal F -GLIBC_2.0 __wcstoull_internal F -GLIBC_2.0 __write F -GLIBC_2.0 __xmknod F -GLIBC_2.0 __xpg_basename F -GLIBC_2.0 __xstat F -GLIBC_2.0 _environ D 0x4 -GLIBC_2.0 _exit F -GLIBC_2.0 _flush_cache F -GLIBC_2.0 _libc_intl_domainname D 0x5 -GLIBC_2.0 _longjmp F -GLIBC_2.0 _mcleanup F -GLIBC_2.0 _mcount F -GLIBC_2.0 _nl_default_dirname D 0x12 -GLIBC_2.0 _nl_domain_bindings D 0x4 -GLIBC_2.0 _nl_msg_cat_cntr D 0x4 -GLIBC_2.0 _null_auth D 0xc -GLIBC_2.0 _obstack D 0x4 -GLIBC_2.0 _obstack_allocated_p F -GLIBC_2.0 _obstack_begin F -GLIBC_2.0 _obstack_begin_1 F -GLIBC_2.0 _obstack_free F -GLIBC_2.0 _obstack_memory_used F -GLIBC_2.0 _obstack_newchunk F -GLIBC_2.0 _res D 0x200 -GLIBC_2.0 _rpc_dtablesize F -GLIBC_2.0 _seterr_reply F -GLIBC_2.0 _setjmp F -GLIBC_2.0 _sys_errlist D 0x1ec -GLIBC_2.0 _sys_nerr D 0x4 -GLIBC_2.0 _sys_siglist D 0x80 -GLIBC_2.0 _tolower F -GLIBC_2.0 _toupper F -GLIBC_2.0 a64l F -GLIBC_2.0 abort F -GLIBC_2.0 abs F -GLIBC_2.0 accept F -GLIBC_2.0 access F -GLIBC_2.0 acct F -GLIBC_2.0 addmntent F -GLIBC_2.0 adjtime F -GLIBC_2.0 adjtimex F -GLIBC_2.0 advance F -GLIBC_2.0 alarm F -GLIBC_2.0 alphasort F -GLIBC_2.0 argz_add F -GLIBC_2.0 argz_add_sep F -GLIBC_2.0 argz_append F -GLIBC_2.0 argz_count F -GLIBC_2.0 argz_create F -GLIBC_2.0 argz_create_sep F -GLIBC_2.0 argz_delete F -GLIBC_2.0 argz_extract F -GLIBC_2.0 argz_insert F -GLIBC_2.0 argz_next F -GLIBC_2.0 argz_replace F -GLIBC_2.0 argz_stringify F -GLIBC_2.0 asctime F -GLIBC_2.0 asctime_r F -GLIBC_2.0 asprintf F -GLIBC_2.0 atexit F -GLIBC_2.0 atof F -GLIBC_2.0 atoi F -GLIBC_2.0 atol F -GLIBC_2.0 atoll F -GLIBC_2.0 authnone_create F -GLIBC_2.0 authunix_create F -GLIBC_2.0 authunix_create_default F -GLIBC_2.0 basename F -GLIBC_2.0 bcmp F -GLIBC_2.0 bcopy F -GLIBC_2.0 bdflush F -GLIBC_2.0 bind F -GLIBC_2.0 bindresvport F -GLIBC_2.0 bindtextdomain F -GLIBC_2.0 brk F -GLIBC_2.0 bsd_signal F -GLIBC_2.0 bsearch F -GLIBC_2.0 btowc F -GLIBC_2.0 bzero F -GLIBC_2.0 cachectl F -GLIBC_2.0 cacheflush F -GLIBC_2.0 calloc F -GLIBC_2.0 callrpc F -GLIBC_2.0 canonicalize_file_name F -GLIBC_2.0 catclose F -GLIBC_2.0 catgets F -GLIBC_2.0 catopen F -GLIBC_2.0 cfgetispeed F -GLIBC_2.0 cfgetospeed F -GLIBC_2.0 cfmakeraw F -GLIBC_2.0 cfree F -GLIBC_2.0 cfsetispeed F -GLIBC_2.0 cfsetospeed F -GLIBC_2.0 cfsetspeed F -GLIBC_2.0 chdir F -GLIBC_2.0 chflags F -GLIBC_2.0 chmod F -GLIBC_2.0 chown F -GLIBC_2.0 chroot F -GLIBC_2.0 clearenv F -GLIBC_2.0 clearerr F -GLIBC_2.0 clearerr_unlocked F -GLIBC_2.0 clnt_broadcast F -GLIBC_2.0 clnt_create F -GLIBC_2.0 clnt_pcreateerror F -GLIBC_2.0 clnt_perrno F -GLIBC_2.0 clnt_perror F -GLIBC_2.0 clnt_spcreateerror F -GLIBC_2.0 clnt_sperrno F -GLIBC_2.0 clnt_sperror F -GLIBC_2.0 clntraw_create F -GLIBC_2.0 clnttcp_create F -GLIBC_2.0 clntudp_bufcreate F -GLIBC_2.0 clntudp_create F -GLIBC_2.0 clock F -GLIBC_2.0 clone F -GLIBC_2.0 close F -GLIBC_2.0 closedir F -GLIBC_2.0 closelog F -GLIBC_2.0 confstr F -GLIBC_2.0 connect F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 creat F -GLIBC_2.0 create_module F -GLIBC_2.0 ctermid F -GLIBC_2.0 ctime F -GLIBC_2.0 ctime_r F -GLIBC_2.0 cuserid F -GLIBC_2.0 daemon F -GLIBC_2.0 daylight D 0x4 -GLIBC_2.0 dcgettext F -GLIBC_2.0 delete_module F -GLIBC_2.0 dgettext F -GLIBC_2.0 difftime F -GLIBC_2.0 dirfd F -GLIBC_2.0 dirname F -GLIBC_2.0 div F -GLIBC_2.0 dprintf F -GLIBC_2.0 drand48 F -GLIBC_2.0 drand48_r F -GLIBC_2.0 dup F -GLIBC_2.0 dup2 F -GLIBC_2.0 dysize F -GLIBC_2.0 ecvt F -GLIBC_2.0 ecvt_r F -GLIBC_2.0 endaliasent F -GLIBC_2.0 endfsent F -GLIBC_2.0 endgrent F -GLIBC_2.0 endhostent F -GLIBC_2.0 endmntent F -GLIBC_2.0 endnetent F -GLIBC_2.0 endnetgrent F -GLIBC_2.0 endprotoent F -GLIBC_2.0 endpwent F -GLIBC_2.0 endrpcent F -GLIBC_2.0 endservent F -GLIBC_2.0 endspent F -GLIBC_2.0 endttyent F -GLIBC_2.0 endusershell F -GLIBC_2.0 endutent F -GLIBC_2.0 environ D 0x4 -GLIBC_2.0 envz_add F -GLIBC_2.0 envz_entry F -GLIBC_2.0 envz_get F -GLIBC_2.0 envz_merge F -GLIBC_2.0 envz_remove F -GLIBC_2.0 envz_strip F -GLIBC_2.0 erand48 F -GLIBC_2.0 erand48_r F -GLIBC_2.0 err F -GLIBC_2.0 error F -GLIBC_2.0 error_at_line F -GLIBC_2.0 error_message_count D 0x4 -GLIBC_2.0 error_one_per_line D 0x4 -GLIBC_2.0 error_print_progname D 0x4 -GLIBC_2.0 errx F -GLIBC_2.0 ether_aton F -GLIBC_2.0 ether_aton_r F -GLIBC_2.0 ether_hostton F -GLIBC_2.0 ether_line F -GLIBC_2.0 ether_ntoa F -GLIBC_2.0 ether_ntoa_r F -GLIBC_2.0 ether_ntohost F -GLIBC_2.0 euidaccess F -GLIBC_2.0 execl F -GLIBC_2.0 execle F -GLIBC_2.0 execlp F -GLIBC_2.0 execv F -GLIBC_2.0 execve F -GLIBC_2.0 execvp F -GLIBC_2.0 exit F -GLIBC_2.0 fchdir F -GLIBC_2.0 fchflags F -GLIBC_2.0 fchmod F -GLIBC_2.0 fchown F -GLIBC_2.0 fclose F -GLIBC_2.0 fcloseall F -GLIBC_2.0 fcntl F -GLIBC_2.0 fcvt F -GLIBC_2.0 fcvt_r F -GLIBC_2.0 fdatasync F -GLIBC_2.0 fdopen F -GLIBC_2.0 feof F -GLIBC_2.0 feof_unlocked F -GLIBC_2.0 ferror F -GLIBC_2.0 ferror_unlocked F -GLIBC_2.0 fexecve F -GLIBC_2.0 fflush F -GLIBC_2.0 fflush_unlocked F -GLIBC_2.0 ffs F -GLIBC_2.0 fgetc F -GLIBC_2.0 fgetgrent F -GLIBC_2.0 fgetgrent_r F -GLIBC_2.0 fgetpos F -GLIBC_2.0 fgetpwent F -GLIBC_2.0 fgetpwent_r F -GLIBC_2.0 fgets F -GLIBC_2.0 fgetspent F -GLIBC_2.0 fgetspent_r F -GLIBC_2.0 fileno F -GLIBC_2.0 fileno_unlocked F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 flock F -GLIBC_2.0 flockfile F -GLIBC_2.0 fnmatch F -GLIBC_2.0 fopen F -GLIBC_2.0 fopencookie F -GLIBC_2.0 fork F -GLIBC_2.0 fpathconf F -GLIBC_2.0 fprintf F -GLIBC_2.0 fputc F -GLIBC_2.0 fputc_unlocked F -GLIBC_2.0 fputs F -GLIBC_2.0 fread F -GLIBC_2.0 free F -GLIBC_2.0 freeaddrinfo F -GLIBC_2.0 freopen F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 fscanf F -GLIBC_2.0 fseek F -GLIBC_2.0 fsetpos F -GLIBC_2.0 fstatfs F -GLIBC_2.0 fsync F -GLIBC_2.0 ftell F -GLIBC_2.0 ftime F -GLIBC_2.0 ftok F -GLIBC_2.0 ftruncate F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 fts_children F -GLIBC_2.0 fts_close F -GLIBC_2.0 fts_open F -GLIBC_2.0 fts_read F -GLIBC_2.0 fts_set F -GLIBC_2.0 ftw F -GLIBC_2.0 funlockfile F -GLIBC_2.0 fwrite F -GLIBC_2.0 gcvt F -GLIBC_2.0 get_avphys_pages F -GLIBC_2.0 get_current_dir_name F -GLIBC_2.0 get_kernel_syms F -GLIBC_2.0 get_myaddress F -GLIBC_2.0 get_nprocs F -GLIBC_2.0 get_nprocs_conf F -GLIBC_2.0 get_phys_pages F -GLIBC_2.0 getaddrinfo F -GLIBC_2.0 getaliasbyname F -GLIBC_2.0 getaliasbyname_r F -GLIBC_2.0 getaliasent F -GLIBC_2.0 getaliasent_r F -GLIBC_2.0 getc F -GLIBC_2.0 getc_unlocked F -GLIBC_2.0 getchar F -GLIBC_2.0 getchar_unlocked F -GLIBC_2.0 getcwd F -GLIBC_2.0 getdelim F -GLIBC_2.0 getdirentries F -GLIBC_2.0 getdomainname F -GLIBC_2.0 getdtablesize F -GLIBC_2.0 getegid F -GLIBC_2.0 getenv F -GLIBC_2.0 geteuid F -GLIBC_2.0 getfsent F -GLIBC_2.0 getfsfile F -GLIBC_2.0 getfsspec F -GLIBC_2.0 getgid F -GLIBC_2.0 getgrent F -GLIBC_2.0 getgrent_r F -GLIBC_2.0 getgrgid F -GLIBC_2.0 getgrgid_r F -GLIBC_2.0 getgrnam F -GLIBC_2.0 getgrnam_r F -GLIBC_2.0 getgroups F -GLIBC_2.0 gethostbyaddr F -GLIBC_2.0 gethostbyaddr_r F -GLIBC_2.0 gethostbyname F -GLIBC_2.0 gethostbyname2 F -GLIBC_2.0 gethostbyname2_r F -GLIBC_2.0 gethostbyname_r F -GLIBC_2.0 gethostent F -GLIBC_2.0 gethostent_r F -GLIBC_2.0 gethostid F -GLIBC_2.0 gethostname F -GLIBC_2.0 getitimer F -GLIBC_2.0 getline F -GLIBC_2.0 getlogin F -GLIBC_2.0 getlogin_r F -GLIBC_2.0 getmntent F -GLIBC_2.0 getmntent_r F -GLIBC_2.0 getnetbyaddr F -GLIBC_2.0 getnetbyaddr_r F -GLIBC_2.0 getnetbyname F -GLIBC_2.0 getnetbyname_r F -GLIBC_2.0 getnetent F -GLIBC_2.0 getnetent_r F -GLIBC_2.0 getnetgrent F -GLIBC_2.0 getnetgrent_r F -GLIBC_2.0 getopt F -GLIBC_2.0 getopt_long F -GLIBC_2.0 getopt_long_only F -GLIBC_2.0 getpagesize F -GLIBC_2.0 getpass F -GLIBC_2.0 getpeername F -GLIBC_2.0 getpgid F -GLIBC_2.0 getpgrp F -GLIBC_2.0 getpid F -GLIBC_2.0 getppid F -GLIBC_2.0 getpriority F -GLIBC_2.0 getprotobyname F -GLIBC_2.0 getprotobyname_r F -GLIBC_2.0 getprotobynumber F -GLIBC_2.0 getprotobynumber_r F -GLIBC_2.0 getprotoent F -GLIBC_2.0 getprotoent_r F -GLIBC_2.0 getpublickey F -GLIBC_2.0 getpw F -GLIBC_2.0 getpwent F -GLIBC_2.0 getpwent_r F -GLIBC_2.0 getpwnam F -GLIBC_2.0 getpwnam_r F -GLIBC_2.0 getpwuid F -GLIBC_2.0 getpwuid_r F -GLIBC_2.0 getresgid F -GLIBC_2.0 getresuid F -GLIBC_2.0 getrlimit F -GLIBC_2.0 getrpcbyname F -GLIBC_2.0 getrpcbyname_r F -GLIBC_2.0 getrpcbynumber F -GLIBC_2.0 getrpcbynumber_r F -GLIBC_2.0 getrpcent F -GLIBC_2.0 getrpcent_r F -GLIBC_2.0 getrpcport F -GLIBC_2.0 getrusage F -GLIBC_2.0 gets F -GLIBC_2.0 getsecretkey F -GLIBC_2.0 getservbyname F -GLIBC_2.0 getservbyname_r F -GLIBC_2.0 getservbyport F -GLIBC_2.0 getservbyport_r F -GLIBC_2.0 getservent F -GLIBC_2.0 getservent_r F -GLIBC_2.0 getsid F -GLIBC_2.0 getsockname F -GLIBC_2.0 getsockopt F -GLIBC_2.0 getspent F -GLIBC_2.0 getspent_r F -GLIBC_2.0 getspnam F -GLIBC_2.0 getspnam_r F -GLIBC_2.0 getsubopt F -GLIBC_2.0 gettext F -GLIBC_2.0 gettimeofday F -GLIBC_2.0 getttyent F -GLIBC_2.0 getttynam F -GLIBC_2.0 getuid F -GLIBC_2.0 getusershell F -GLIBC_2.0 getutent F -GLIBC_2.0 getutent_r F -GLIBC_2.0 getutid F -GLIBC_2.0 getutid_r F -GLIBC_2.0 getutline F -GLIBC_2.0 getutline_r F -GLIBC_2.0 getw F -GLIBC_2.0 getwd F -GLIBC_2.0 glob F -GLIBC_2.0 glob_pattern_p F -GLIBC_2.0 globfree F -GLIBC_2.0 gmtime F -GLIBC_2.0 gmtime_r F -GLIBC_2.0 group_member F -GLIBC_2.0 gsignal F -GLIBC_2.0 gtty F -GLIBC_2.0 h_errlist D 0x14 -GLIBC_2.0 h_nerr D 0x4 -GLIBC_2.0 hasmntopt F -GLIBC_2.0 hcreate F -GLIBC_2.0 hcreate_r F -GLIBC_2.0 hdestroy F -GLIBC_2.0 hdestroy_r F -GLIBC_2.0 herror F -GLIBC_2.0 hsearch F -GLIBC_2.0 hsearch_r F -GLIBC_2.0 hstrerror F -GLIBC_2.0 htonl F -GLIBC_2.0 htons F -GLIBC_2.0 index F -GLIBC_2.0 inet_addr F -GLIBC_2.0 inet_aton F -GLIBC_2.0 inet_lnaof F -GLIBC_2.0 inet_makeaddr F -GLIBC_2.0 inet_netof F -GLIBC_2.0 inet_network F -GLIBC_2.0 inet_nsap_addr F -GLIBC_2.0 inet_nsap_ntoa F -GLIBC_2.0 inet_ntoa F -GLIBC_2.0 inet_ntop F -GLIBC_2.0 inet_pton F -GLIBC_2.0 init_module F -GLIBC_2.0 initgroups F -GLIBC_2.0 initstate F -GLIBC_2.0 initstate_r F -GLIBC_2.0 innetgr F -GLIBC_2.0 insque F -GLIBC_2.0 ioctl F -GLIBC_2.0 iruserok F -GLIBC_2.0 isalnum F -GLIBC_2.0 isalpha F -GLIBC_2.0 isascii F -GLIBC_2.0 isatty F -GLIBC_2.0 isblank F -GLIBC_2.0 iscntrl F -GLIBC_2.0 isdigit F -GLIBC_2.0 isfdtype F -GLIBC_2.0 isgraph F -GLIBC_2.0 isinf F -GLIBC_2.0 isinff F -GLIBC_2.0 isinfl F -GLIBC_2.0 islower F -GLIBC_2.0 isnan F -GLIBC_2.0 isnanf F -GLIBC_2.0 isnanl F -GLIBC_2.0 isprint F -GLIBC_2.0 ispunct F -GLIBC_2.0 isspace F -GLIBC_2.0 isupper F -GLIBC_2.0 iswalnum F -GLIBC_2.0 iswalpha F -GLIBC_2.0 iswcntrl F -GLIBC_2.0 iswctype F -GLIBC_2.0 iswdigit F -GLIBC_2.0 iswgraph F -GLIBC_2.0 iswlower F -GLIBC_2.0 iswprint F -GLIBC_2.0 iswpunct F -GLIBC_2.0 iswspace F -GLIBC_2.0 iswupper F -GLIBC_2.0 iswxdigit F -GLIBC_2.0 isxdigit F -GLIBC_2.0 jrand48 F -GLIBC_2.0 jrand48_r F -GLIBC_2.0 kill F -GLIBC_2.0 killpg F -GLIBC_2.0 klogctl F -GLIBC_2.0 l64a F -GLIBC_2.0 labs F -GLIBC_2.0 lchown F -GLIBC_2.0 lckpwdf F -GLIBC_2.0 lcong48 F -GLIBC_2.0 lcong48_r F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 ldiv F -GLIBC_2.0 lfind F -GLIBC_2.0 link F -GLIBC_2.0 listen F -GLIBC_2.0 llabs F -GLIBC_2.0 lldiv F -GLIBC_2.0 llseek F -GLIBC_2.0 loc1 D 0x4 -GLIBC_2.0 loc2 D 0x4 -GLIBC_2.0 localeconv F -GLIBC_2.0 localtime F -GLIBC_2.0 localtime_r F -GLIBC_2.0 lockf F -GLIBC_2.0 locs D 0x4 -GLIBC_2.0 longjmp F -GLIBC_2.0 lrand48 F -GLIBC_2.0 lrand48_r F -GLIBC_2.0 lsearch F -GLIBC_2.0 lseek F -GLIBC_2.0 madvise F -GLIBC_2.0 mallinfo F -GLIBC_2.0 malloc F -GLIBC_2.0 malloc_get_state F -GLIBC_2.0 malloc_set_state F -GLIBC_2.0 malloc_stats F -GLIBC_2.0 malloc_trim F -GLIBC_2.0 malloc_usable_size F -GLIBC_2.0 mallopt F -GLIBC_2.0 mallwatch D 0x4 -GLIBC_2.0 mblen F -GLIBC_2.0 mbrlen F -GLIBC_2.0 mbrtowc F -GLIBC_2.0 mbsinit F -GLIBC_2.0 mbsnrtowcs F -GLIBC_2.0 mbsrtowcs F -GLIBC_2.0 mbstowcs F -GLIBC_2.0 mbtowc F -GLIBC_2.0 mcheck F -GLIBC_2.0 memalign F -GLIBC_2.0 memccpy F -GLIBC_2.0 memchr F -GLIBC_2.0 memcmp F -GLIBC_2.0 memcpy F -GLIBC_2.0 memfrob F -GLIBC_2.0 memmem F -GLIBC_2.0 memmove F -GLIBC_2.0 memset F -GLIBC_2.0 mkdir F -GLIBC_2.0 mkfifo F -GLIBC_2.0 mkstemp F -GLIBC_2.0 mktemp F -GLIBC_2.0 mktime F -GLIBC_2.0 mlock F -GLIBC_2.0 mlockall F -GLIBC_2.0 mmap F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 monstartup F -GLIBC_2.0 mount F -GLIBC_2.0 mprobe F -GLIBC_2.0 mprotect F -GLIBC_2.0 mrand48 F -GLIBC_2.0 mrand48_r F -GLIBC_2.0 mremap F -GLIBC_2.0 msgctl F -GLIBC_2.0 msgget F -GLIBC_2.0 msgrcv F -GLIBC_2.0 msgsnd F -GLIBC_2.0 msync F -GLIBC_2.0 mtrace F -GLIBC_2.0 munlock F -GLIBC_2.0 munlockall F -GLIBC_2.0 munmap F -GLIBC_2.0 muntrace F -GLIBC_2.0 nanosleep F -GLIBC_2.0 nfsservctl F -GLIBC_2.0 nice F -GLIBC_2.0 nl_langinfo F -GLIBC_2.0 nrand48 F -GLIBC_2.0 nrand48_r F -GLIBC_2.0 ntohl F -GLIBC_2.0 ntohs F -GLIBC_2.0 obstack_alloc_failed_handler D 0x4 -GLIBC_2.0 obstack_exit_failure D 0x4 -GLIBC_2.0 obstack_free F -GLIBC_2.0 obstack_printf F -GLIBC_2.0 obstack_vprintf F -GLIBC_2.0 on_exit F -GLIBC_2.0 open F -GLIBC_2.0 open_memstream F -GLIBC_2.0 opendir F -GLIBC_2.0 openlog F -GLIBC_2.0 optarg D 0x4 -GLIBC_2.0 opterr D 0x4 -GLIBC_2.0 optind D 0x4 -GLIBC_2.0 optopt D 0x4 -GLIBC_2.0 parse_printf_format F -GLIBC_2.0 pathconf F -GLIBC_2.0 pause F -GLIBC_2.0 pclose F -GLIBC_2.0 perror F -GLIBC_2.0 personality F -GLIBC_2.0 pipe F -GLIBC_2.0 pmap_getmaps F -GLIBC_2.0 pmap_getport F -GLIBC_2.0 pmap_rmtcall F -GLIBC_2.0 pmap_set F -GLIBC_2.0 pmap_unset F -GLIBC_2.0 poll F -GLIBC_2.0 popen F -GLIBC_2.0 prctl F -GLIBC_2.0 printf F -GLIBC_2.0 profil F -GLIBC_2.0 program_invocation_name D 0x4 -GLIBC_2.0 program_invocation_short_name D 0x4 -GLIBC_2.0 pselect F -GLIBC_2.0 psignal F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 ptrace F -GLIBC_2.0 putc F -GLIBC_2.0 putc_unlocked F -GLIBC_2.0 putchar F -GLIBC_2.0 putchar_unlocked F -GLIBC_2.0 putenv F -GLIBC_2.0 putpwent F -GLIBC_2.0 puts F -GLIBC_2.0 putspent F -GLIBC_2.0 pututline F -GLIBC_2.0 putw F -GLIBC_2.0 pvalloc F -GLIBC_2.0 qecvt F -GLIBC_2.0 qecvt_r F -GLIBC_2.0 qfcvt F -GLIBC_2.0 qfcvt_r F -GLIBC_2.0 qgcvt F -GLIBC_2.0 qsort F -GLIBC_2.0 query_module F -GLIBC_2.0 quotactl F -GLIBC_2.0 raise F -GLIBC_2.0 rand F -GLIBC_2.0 rand_r F -GLIBC_2.0 random F -GLIBC_2.0 random_r F -GLIBC_2.0 rcmd F -GLIBC_2.0 re_comp F -GLIBC_2.0 re_compile_fastmap F -GLIBC_2.0 re_compile_pattern F -GLIBC_2.0 re_exec F -GLIBC_2.0 re_match F -GLIBC_2.0 re_match_2 F -GLIBC_2.0 re_max_failures D 0x4 -GLIBC_2.0 re_search F -GLIBC_2.0 re_search_2 F -GLIBC_2.0 re_set_registers F -GLIBC_2.0 re_set_syntax F -GLIBC_2.0 re_syntax_options D 0x4 -GLIBC_2.0 read F -GLIBC_2.0 readdir F -GLIBC_2.0 readdir_r F -GLIBC_2.0 readlink F -GLIBC_2.0 readv F -GLIBC_2.0 realloc F -GLIBC_2.0 realpath F -GLIBC_2.0 reboot F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 regcomp F -GLIBC_2.0 regerror F -GLIBC_2.0 regexec F -GLIBC_2.0 regfree F -GLIBC_2.0 register_printf_function F -GLIBC_2.0 registerrpc F -GLIBC_2.0 remove F -GLIBC_2.0 remque F -GLIBC_2.0 rename F -GLIBC_2.0 res_init F -GLIBC_2.0 revoke F -GLIBC_2.0 rewind F -GLIBC_2.0 rewinddir F -GLIBC_2.0 rexec F -GLIBC_2.0 rexecoptions D 0x4 -GLIBC_2.0 rindex F -GLIBC_2.0 rmdir F -GLIBC_2.0 rpc_createerr D 0x10 -GLIBC_2.0 rpmatch F -GLIBC_2.0 rresvport F -GLIBC_2.0 ruserok F -GLIBC_2.0 ruserpass F -GLIBC_2.0 sbrk F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 scandir F -GLIBC_2.0 scanf F -GLIBC_2.0 sched_get_priority_max F -GLIBC_2.0 sched_get_priority_min F -GLIBC_2.0 sched_getparam F -GLIBC_2.0 sched_getscheduler F -GLIBC_2.0 sched_rr_get_interval F -GLIBC_2.0 sched_setparam F -GLIBC_2.0 sched_setscheduler F -GLIBC_2.0 sched_yield F -GLIBC_2.0 seed48 F -GLIBC_2.0 seed48_r F -GLIBC_2.0 seekdir F -GLIBC_2.0 select F -GLIBC_2.0 semctl F -GLIBC_2.0 semget F -GLIBC_2.0 semop F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 setaliasent F -GLIBC_2.0 setbuf F -GLIBC_2.0 setbuffer F -GLIBC_2.0 setcontext F -GLIBC_2.0 setdomainname F -GLIBC_2.0 setegid F -GLIBC_2.0 setenv F -GLIBC_2.0 seteuid F -GLIBC_2.0 setfsent F -GLIBC_2.0 setfsgid F -GLIBC_2.0 setfsuid F -GLIBC_2.0 setgid F -GLIBC_2.0 setgrent F -GLIBC_2.0 setgroups F -GLIBC_2.0 sethostent F -GLIBC_2.0 sethostid F -GLIBC_2.0 sethostname F -GLIBC_2.0 setitimer F -GLIBC_2.0 setjmp F -GLIBC_2.0 setlinebuf F -GLIBC_2.0 setlocale F -GLIBC_2.0 setlogin F -GLIBC_2.0 setlogmask F -GLIBC_2.0 setmntent F -GLIBC_2.0 setnetent F -GLIBC_2.0 setnetgrent F -GLIBC_2.0 setpgid F -GLIBC_2.0 setpgrp F -GLIBC_2.0 setpriority F -GLIBC_2.0 setprotoent F -GLIBC_2.0 setpwent F -GLIBC_2.0 setregid F -GLIBC_2.0 setresgid F -GLIBC_2.0 setresuid F -GLIBC_2.0 setreuid F -GLIBC_2.0 setrlimit F -GLIBC_2.0 setrpcent F -GLIBC_2.0 setservent F -GLIBC_2.0 setsid F -GLIBC_2.0 setsockopt F -GLIBC_2.0 setspent F -GLIBC_2.0 setstate F -GLIBC_2.0 setstate_r F -GLIBC_2.0 settimeofday F -GLIBC_2.0 setttyent F -GLIBC_2.0 setuid F -GLIBC_2.0 setusershell F -GLIBC_2.0 setutent F -GLIBC_2.0 setvbuf F -GLIBC_2.0 sgetspent F -GLIBC_2.0 sgetspent_r F -GLIBC_2.0 shmat F -GLIBC_2.0 shmctl F -GLIBC_2.0 shmdt F -GLIBC_2.0 shmget F -GLIBC_2.0 shutdown F -GLIBC_2.0 sigaction F -GLIBC_2.0 sigaddset F -GLIBC_2.0 sigaltstack F -GLIBC_2.0 sigandset F -GLIBC_2.0 sigblock F -GLIBC_2.0 sigdelset F -GLIBC_2.0 sigemptyset F -GLIBC_2.0 sigfillset F -GLIBC_2.0 siggetmask F -GLIBC_2.0 siginterrupt F -GLIBC_2.0 sigisemptyset F -GLIBC_2.0 sigismember F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 signal F -GLIBC_2.0 sigorset F -GLIBC_2.0 sigpause F -GLIBC_2.0 sigpending F -GLIBC_2.0 sigprocmask F -GLIBC_2.0 sigreturn F -GLIBC_2.0 sigsetmask F -GLIBC_2.0 sigstack F -GLIBC_2.0 sigsuspend F -GLIBC_2.0 sigvec F -GLIBC_2.0 sigwait F -GLIBC_2.0 sleep F -GLIBC_2.0 snprintf F -GLIBC_2.0 socket F -GLIBC_2.0 socketpair F -GLIBC_2.0 sprintf F -GLIBC_2.0 srand F -GLIBC_2.0 srand48 F -GLIBC_2.0 srand48_r F -GLIBC_2.0 srandom F -GLIBC_2.0 srandom_r F -GLIBC_2.0 sscanf F -GLIBC_2.0 ssignal F -GLIBC_2.0 sstk F -GLIBC_2.0 statfs F -GLIBC_2.0 stderr D 0x4 -GLIBC_2.0 stdin D 0x4 -GLIBC_2.0 stdout D 0x4 -GLIBC_2.0 step F -GLIBC_2.0 stime F -GLIBC_2.0 stpcpy F -GLIBC_2.0 stpncpy F -GLIBC_2.0 strcasecmp F -GLIBC_2.0 strcat F -GLIBC_2.0 strchr F -GLIBC_2.0 strcmp F -GLIBC_2.0 strcoll F -GLIBC_2.0 strcpy F -GLIBC_2.0 strcspn F -GLIBC_2.0 strdup F -GLIBC_2.0 strerror F -GLIBC_2.0 strerror_r F -GLIBC_2.0 strfmon F -GLIBC_2.0 strfry F -GLIBC_2.0 strftime F -GLIBC_2.0 strlen F -GLIBC_2.0 strncasecmp F -GLIBC_2.0 strncat F -GLIBC_2.0 strncmp F -GLIBC_2.0 strncpy F -GLIBC_2.0 strndup F -GLIBC_2.0 strnlen F -GLIBC_2.0 strpbrk F -GLIBC_2.0 strptime F -GLIBC_2.0 strrchr F -GLIBC_2.0 strsep F -GLIBC_2.0 strsignal F -GLIBC_2.0 strspn F -GLIBC_2.0 strstr F -GLIBC_2.0 strtod F -GLIBC_2.0 strtof F -GLIBC_2.0 strtok F -GLIBC_2.0 strtok_r F -GLIBC_2.0 strtol F -GLIBC_2.0 strtold F -GLIBC_2.0 strtoll F -GLIBC_2.0 strtoq F -GLIBC_2.0 strtoul F -GLIBC_2.0 strtoull F -GLIBC_2.0 strtouq F -GLIBC_2.0 strxfrm F -GLIBC_2.0 stty F -GLIBC_2.0 svc_exit F -GLIBC_2.0 svc_fdset D 0x80 -GLIBC_2.0 svc_getreq F -GLIBC_2.0 svc_getreqset F -GLIBC_2.0 svc_register F -GLIBC_2.0 svc_run F -GLIBC_2.0 svc_sendreply F -GLIBC_2.0 svc_unregister F -GLIBC_2.0 svcauthdes_stats D 0xc -GLIBC_2.0 svcerr_auth F -GLIBC_2.0 svcerr_decode F -GLIBC_2.0 svcerr_noproc F -GLIBC_2.0 svcerr_noprog F -GLIBC_2.0 svcerr_progvers F -GLIBC_2.0 svcerr_systemerr F -GLIBC_2.0 svcerr_weakauth F -GLIBC_2.0 svcfd_create F -GLIBC_2.0 svcraw_create F -GLIBC_2.0 svctcp_create F -GLIBC_2.0 svcudp_bufcreate F -GLIBC_2.0 svcudp_create F -GLIBC_2.0 svcudp_enablecache F -GLIBC_2.0 swab F -GLIBC_2.0 swapoff F -GLIBC_2.0 swapon F -GLIBC_2.0 symlink F -GLIBC_2.0 sync F -GLIBC_2.0 sys_errlist D 0x1ec -GLIBC_2.0 sys_nerr D 0x4 -GLIBC_2.0 sys_sigabbrev D 0x80 -GLIBC_2.0 sys_siglist D 0x80 -GLIBC_2.0 syscall F -GLIBC_2.0 sysconf F -GLIBC_2.0 sysctl F -GLIBC_2.0 sysinfo F -GLIBC_2.0 syslog F -GLIBC_2.0 sysmips F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 tcflow F -GLIBC_2.0 tcflush F -GLIBC_2.0 tcgetattr F -GLIBC_2.0 tcgetpgrp F -GLIBC_2.0 tcsendbreak F -GLIBC_2.0 tcsetattr F -GLIBC_2.0 tcsetpgrp F -GLIBC_2.0 tdelete F -GLIBC_2.0 telldir F -GLIBC_2.0 tempnam F -GLIBC_2.0 textdomain F -GLIBC_2.0 tfind F -GLIBC_2.0 time F -GLIBC_2.0 timegm F -GLIBC_2.0 timelocal F -GLIBC_2.0 times F -GLIBC_2.0 timezone D 0x4 -GLIBC_2.0 tmpfile F -GLIBC_2.0 tmpnam F -GLIBC_2.0 tmpnam_r F -GLIBC_2.0 toascii F -GLIBC_2.0 tolower F -GLIBC_2.0 toupper F -GLIBC_2.0 towctrans F -GLIBC_2.0 towlower F -GLIBC_2.0 towupper F -GLIBC_2.0 tr_break F -GLIBC_2.0 truncate F -GLIBC_2.0 tsearch F -GLIBC_2.0 ttyname F -GLIBC_2.0 ttyname_r F -GLIBC_2.0 ttyslot F -GLIBC_2.0 twalk F -GLIBC_2.0 tzname D 0x8 -GLIBC_2.0 tzset F -GLIBC_2.0 ualarm F -GLIBC_2.0 ulckpwdf F -GLIBC_2.0 ulimit F -GLIBC_2.0 umask F -GLIBC_2.0 umount F -GLIBC_2.0 uname F -GLIBC_2.0 ungetc F -GLIBC_2.0 unlink F -GLIBC_2.0 unsetenv F -GLIBC_2.0 updwtmp F -GLIBC_2.0 uselib F -GLIBC_2.0 usleep F -GLIBC_2.0 ustat F -GLIBC_2.0 utime F -GLIBC_2.0 utimes F -GLIBC_2.0 utmpname F -GLIBC_2.0 valloc F -GLIBC_2.0 vasprintf F -GLIBC_2.0 vdprintf F -GLIBC_2.0 verr F -GLIBC_2.0 verrx F -GLIBC_2.0 vfork F -GLIBC_2.0 vfprintf F -GLIBC_2.0 vfscanf F -GLIBC_2.0 vhangup F -GLIBC_2.0 vlimit F -GLIBC_2.0 vprintf F -GLIBC_2.0 vscanf F -GLIBC_2.0 vsnprintf F -GLIBC_2.0 vsprintf F -GLIBC_2.0 vsscanf F -GLIBC_2.0 vsyslog F -GLIBC_2.0 vtimes F -GLIBC_2.0 vwarn F -GLIBC_2.0 vwarnx F -GLIBC_2.0 wait F -GLIBC_2.0 wait3 F -GLIBC_2.0 wait4 F -GLIBC_2.0 waitpid F -GLIBC_2.0 warn F -GLIBC_2.0 warnx F -GLIBC_2.0 wcpcpy F -GLIBC_2.0 wcpncpy F -GLIBC_2.0 wcrtomb F -GLIBC_2.0 wcscat F -GLIBC_2.0 wcschr F -GLIBC_2.0 wcscmp F -GLIBC_2.0 wcscoll F -GLIBC_2.0 wcscpy F -GLIBC_2.0 wcscspn F -GLIBC_2.0 wcsdup F -GLIBC_2.0 wcslen F -GLIBC_2.0 wcsncat F -GLIBC_2.0 wcsncmp F -GLIBC_2.0 wcsncpy F -GLIBC_2.0 wcsnrtombs F -GLIBC_2.0 wcspbrk F -GLIBC_2.0 wcsrchr F -GLIBC_2.0 wcsrtombs F -GLIBC_2.0 wcsspn F -GLIBC_2.0 wcsstr F -GLIBC_2.0 wcstod F -GLIBC_2.0 wcstof F -GLIBC_2.0 wcstok F -GLIBC_2.0 wcstol F -GLIBC_2.0 wcstold F -GLIBC_2.0 wcstombs F -GLIBC_2.0 wcstoq F -GLIBC_2.0 wcstoul F -GLIBC_2.0 wcstouq F -GLIBC_2.0 wcswidth F -GLIBC_2.0 wcsxfrm F -GLIBC_2.0 wctob F -GLIBC_2.0 wctomb F -GLIBC_2.0 wctrans F -GLIBC_2.0 wctype F -GLIBC_2.0 wcwidth F -GLIBC_2.0 wmemchr F -GLIBC_2.0 wmemcmp F -GLIBC_2.0 wmemcpy F -GLIBC_2.0 wmemmove F -GLIBC_2.0 wmemset F -GLIBC_2.0 write F -GLIBC_2.0 writev F -GLIBC_2.0 xdr_accepted_reply F -GLIBC_2.0 xdr_array F -GLIBC_2.0 xdr_authunix_parms F -GLIBC_2.0 xdr_bool F -GLIBC_2.0 xdr_bytes F -GLIBC_2.0 xdr_callhdr F -GLIBC_2.0 xdr_callmsg F -GLIBC_2.0 xdr_char F -GLIBC_2.0 xdr_cryptkeyarg F -GLIBC_2.0 xdr_cryptkeyarg2 F -GLIBC_2.0 xdr_cryptkeyres F -GLIBC_2.0 xdr_des_block F -GLIBC_2.0 xdr_double F -GLIBC_2.0 xdr_enum F -GLIBC_2.0 xdr_float F -GLIBC_2.0 xdr_free F -GLIBC_2.0 xdr_int F -GLIBC_2.0 xdr_key_netstarg F -GLIBC_2.0 xdr_key_netstres F -GLIBC_2.0 xdr_keybuf F -GLIBC_2.0 xdr_keystatus F -GLIBC_2.0 xdr_long F -GLIBC_2.0 xdr_netobj F -GLIBC_2.0 xdr_opaque F -GLIBC_2.0 xdr_opaque_auth F -GLIBC_2.0 xdr_pmap F -GLIBC_2.0 xdr_pmaplist F -GLIBC_2.0 xdr_pointer F -GLIBC_2.0 xdr_reference F -GLIBC_2.0 xdr_rejected_reply F -GLIBC_2.0 xdr_replymsg F -GLIBC_2.0 xdr_rmtcall_args F -GLIBC_2.0 xdr_rmtcallres F -GLIBC_2.0 xdr_short F -GLIBC_2.0 xdr_string F -GLIBC_2.0 xdr_u_char F -GLIBC_2.0 xdr_u_int F -GLIBC_2.0 xdr_u_long F -GLIBC_2.0 xdr_u_short F -GLIBC_2.0 xdr_union F -GLIBC_2.0 xdr_vector F -GLIBC_2.0 xdr_void F -GLIBC_2.0 xdr_wrapstring F -GLIBC_2.0 xdrmem_create F -GLIBC_2.0 xdrrec_create F -GLIBC_2.0 xdrrec_endofrecord F -GLIBC_2.0 xdrrec_eof F -GLIBC_2.0 xdrrec_skiprecord F -GLIBC_2.0 xdrstdio_create F -GLIBC_2.0 xencrypt F -GLIBC_2.0 xprt_register F -GLIBC_2.0 xprt_unregister F -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 fallocate64 F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.19 GLIBC_2.19 A -GLIBC_2.19 getrlimit64 F -GLIBC_2.19 setrlimit64 F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _Exit F -GLIBC_2.2 _IO_2_1_stderr_ D 0xa0 -GLIBC_2.2 _IO_2_1_stdin_ D 0xa0 -GLIBC_2.2 _IO_2_1_stdout_ D 0xa0 -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_do_write F -GLIBC_2.2 _IO_fclose F -GLIBC_2.2 _IO_fdopen F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_file_attach F -GLIBC_2.2 _IO_file_close_it F -GLIBC_2.2 _IO_file_finish F -GLIBC_2.2 _IO_file_fopen F -GLIBC_2.2 _IO_file_init F -GLIBC_2.2 _IO_file_overflow F -GLIBC_2.2 _IO_file_seekoff F -GLIBC_2.2 _IO_file_setbuf F -GLIBC_2.2 _IO_file_sync F -GLIBC_2.2 _IO_file_underflow F -GLIBC_2.2 _IO_file_write F -GLIBC_2.2 _IO_file_xsputn F -GLIBC_2.2 _IO_fopen F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_getline_info F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_popen F -GLIBC_2.2 _IO_proc_close F -GLIBC_2.2 _IO_proc_open F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0x54 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 __asprintf F -GLIBC_2.2 __assert F -GLIBC_2.2 __backtrace F -GLIBC_2.2 __backtrace_symbols F -GLIBC_2.2 __backtrace_symbols_fd F -GLIBC_2.2 __ctype32_tolower D 0x4 -GLIBC_2.2 __ctype32_toupper D 0x4 -GLIBC_2.2 __cxa_atexit F -GLIBC_2.2 __cxa_finalize F -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __duplocale F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpurge F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __freelocale F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __isalnum_l F -GLIBC_2.2 __isalpha_l F -GLIBC_2.2 __isascii_l F -GLIBC_2.2 __isblank_l F -GLIBC_2.2 __iscntrl_l F -GLIBC_2.2 __isdigit_l F -GLIBC_2.2 __isgraph_l F -GLIBC_2.2 __islower_l F -GLIBC_2.2 __isprint_l F -GLIBC_2.2 __ispunct_l F -GLIBC_2.2 __isspace_l F -GLIBC_2.2 __isupper_l F -GLIBC_2.2 __iswalnum_l F -GLIBC_2.2 __iswalpha_l F -GLIBC_2.2 __iswblank_l F -GLIBC_2.2 __iswcntrl_l F -GLIBC_2.2 __iswctype_l F -GLIBC_2.2 __iswdigit_l F -GLIBC_2.2 __iswgraph_l F -GLIBC_2.2 __iswlower_l F -GLIBC_2.2 __iswprint_l F -GLIBC_2.2 __iswpunct_l F -GLIBC_2.2 __iswspace_l F -GLIBC_2.2 __iswupper_l F -GLIBC_2.2 __iswxdigit_l F -GLIBC_2.2 __isxdigit_l F -GLIBC_2.2 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.2 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.2 __key_gendes_LOCAL D 0x4 -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __libc_freeres F -GLIBC_2.2 __libc_sa_len F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __mempcpy_small F -GLIBC_2.2 __newlocale F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __open64 F -GLIBC_2.2 __poll F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __rawmemchr F -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_state F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 __sigsuspend F -GLIBC_2.2 __statfs F -GLIBC_2.2 __stpcpy_small F -GLIBC_2.2 __strcasecmp_l F -GLIBC_2.2 __strcasestr F -GLIBC_2.2 __strcoll_l F -GLIBC_2.2 __strcpy_small F -GLIBC_2.2 __strcspn_c1 F -GLIBC_2.2 __strcspn_c2 F -GLIBC_2.2 __strcspn_c3 F -GLIBC_2.2 __strfmon_l F -GLIBC_2.2 __strncasecmp_l F -GLIBC_2.2 __strndup F -GLIBC_2.2 __strpbrk_c2 F -GLIBC_2.2 __strpbrk_c3 F -GLIBC_2.2 __strsep_1c F -GLIBC_2.2 __strsep_2c F -GLIBC_2.2 __strsep_3c F -GLIBC_2.2 __strsep_g F -GLIBC_2.2 __strspn_c1 F -GLIBC_2.2 __strspn_c2 F -GLIBC_2.2 __strspn_c3 F -GLIBC_2.2 __strtod_l F -GLIBC_2.2 __strtof_l F -GLIBC_2.2 __strtok_r_1c F -GLIBC_2.2 __strtol_l F -GLIBC_2.2 __strtold_l F -GLIBC_2.2 __strtoll_l F -GLIBC_2.2 __strtoul_l F -GLIBC_2.2 __strtoull_l F -GLIBC_2.2 __strverscmp F -GLIBC_2.2 __strxfrm_l F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __toascii_l F -GLIBC_2.2 __tolower_l F -GLIBC_2.2 __toupper_l F -GLIBC_2.2 __towctrans F -GLIBC_2.2 __towctrans_l F -GLIBC_2.2 __towlower_l F -GLIBC_2.2 __towupper_l F -GLIBC_2.2 __vfork F -GLIBC_2.2 __wcscasecmp_l F -GLIBC_2.2 __wcscoll_l F -GLIBC_2.2 __wcsncasecmp_l F -GLIBC_2.2 __wcstod_l F -GLIBC_2.2 __wcstof_l F -GLIBC_2.2 __wcstol_l F -GLIBC_2.2 __wcstold_l F -GLIBC_2.2 __wcstoll_l F -GLIBC_2.2 __wcstoul_l F -GLIBC_2.2 __wcstoull_l F -GLIBC_2.2 __wcsxfrm_l F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __wctype_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _authenticate F -GLIBC_2.2 _dl_mcount_wrapper F -GLIBC_2.2 _dl_mcount_wrapper_check F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _res_hconf D 0x30 -GLIBC_2.2 _sys_errlist D 0x11b8 -GLIBC_2.2 _sys_nerr D 0x4 -GLIBC_2.2 _sys_siglist D 0x100 -GLIBC_2.2 _test_and_set F -GLIBC_2.2 addseverity F -GLIBC_2.2 alphasort64 F -GLIBC_2.2 argp_err_exit_status D 0x4 -GLIBC_2.2 argp_error F -GLIBC_2.2 argp_failure F -GLIBC_2.2 argp_help F -GLIBC_2.2 argp_parse F -GLIBC_2.2 argp_program_bug_address D 0x4 -GLIBC_2.2 argp_program_version D 0x4 -GLIBC_2.2 argp_program_version_hook D 0x4 -GLIBC_2.2 argp_state_help F -GLIBC_2.2 argp_usage F -GLIBC_2.2 authdes_create F -GLIBC_2.2 authdes_getucred F -GLIBC_2.2 authdes_pk_create F -GLIBC_2.2 backtrace F -GLIBC_2.2 backtrace_symbols F -GLIBC_2.2 backtrace_symbols_fd F -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 capget F -GLIBC_2.2 capset F -GLIBC_2.2 cbc_crypt F -GLIBC_2.2 clntunix_create F -GLIBC_2.2 creat64 F -GLIBC_2.2 dcngettext F -GLIBC_2.2 des_setparity F -GLIBC_2.2 dngettext F -GLIBC_2.2 ecb_crypt F -GLIBC_2.2 endutxent F -GLIBC_2.2 fattach F -GLIBC_2.2 fclose F -GLIBC_2.2 fdetach F -GLIBC_2.2 fdopen F -GLIBC_2.2 ffsl F -GLIBC_2.2 ffsll F -GLIBC_2.2 fgetc_unlocked F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgets_unlocked F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fmtmsg F -GLIBC_2.2 fopen F -GLIBC_2.2 fopen64 F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fputs_unlocked F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fread_unlocked F -GLIBC_2.2 freopen64 F -GLIBC_2.2 fseeko F -GLIBC_2.2 fseeko64 F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fstatfs64 F -GLIBC_2.2 fstatvfs F -GLIBC_2.2 fstatvfs64 F -GLIBC_2.2 ftello F -GLIBC_2.2 ftello64 F -GLIBC_2.2 ftruncate64 F -GLIBC_2.2 ftw64 F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwrite_unlocked F -GLIBC_2.2 fwscanf F -GLIBC_2.2 gai_strerror F -GLIBC_2.2 getaliasbyname_r F -GLIBC_2.2 getaliasent_r F -GLIBC_2.2 getcontext F -GLIBC_2.2 getdate F -GLIBC_2.2 getdate_err D 0x4 -GLIBC_2.2 getdate_r F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getgrent_r F -GLIBC_2.2 getgrgid_r F -GLIBC_2.2 getgrnam_r F -GLIBC_2.2 gethostbyaddr_r F -GLIBC_2.2 gethostbyname2_r F -GLIBC_2.2 gethostbyname_r F -GLIBC_2.2 gethostent_r F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getmsg F -GLIBC_2.2 getnameinfo F -GLIBC_2.2 getnetbyaddr_r F -GLIBC_2.2 getnetbyname_r F -GLIBC_2.2 getnetent_r F -GLIBC_2.2 getnetname F -GLIBC_2.2 getpmsg F -GLIBC_2.2 getprotobyname_r F -GLIBC_2.2 getprotobynumber_r F -GLIBC_2.2 getprotoent_r F -GLIBC_2.2 getpt F -GLIBC_2.2 getpwent_r F -GLIBC_2.2 getpwnam_r F -GLIBC_2.2 getpwuid_r F -GLIBC_2.2 getrlimit64 F -GLIBC_2.2 getrpcbyname_r F -GLIBC_2.2 getrpcbynumber_r F -GLIBC_2.2 getrpcent_r F -GLIBC_2.2 getservbyname_r F -GLIBC_2.2 getservbyport_r F -GLIBC_2.2 getservent_r F -GLIBC_2.2 getspent_r F -GLIBC_2.2 getspnam_r F -GLIBC_2.2 getutmp F -GLIBC_2.2 getutmpx F -GLIBC_2.2 getutxent F -GLIBC_2.2 getutxid F -GLIBC_2.2 getutxline F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 glob64 F -GLIBC_2.2 globfree64 F -GLIBC_2.2 gnu_get_libc_release F -GLIBC_2.2 gnu_get_libc_version F -GLIBC_2.2 grantpt F -GLIBC_2.2 host2netname F -GLIBC_2.2 iconv F -GLIBC_2.2 iconv_close F -GLIBC_2.2 iconv_open F -GLIBC_2.2 if_freenameindex F -GLIBC_2.2 if_indextoname F -GLIBC_2.2 if_nameindex F -GLIBC_2.2 if_nametoindex F -GLIBC_2.2 imaxabs F -GLIBC_2.2 imaxdiv F -GLIBC_2.2 in6addr_any D 0x10 -GLIBC_2.2 in6addr_loopback D 0x10 -GLIBC_2.2 iruserok_af F -GLIBC_2.2 isastream F -GLIBC_2.2 iswblank F -GLIBC_2.2 key_decryptsession F -GLIBC_2.2 key_decryptsession_pk F -GLIBC_2.2 key_encryptsession F -GLIBC_2.2 key_encryptsession_pk F -GLIBC_2.2 key_gendes F -GLIBC_2.2 key_get_conv F -GLIBC_2.2 key_secretkey_is_set F -GLIBC_2.2 key_setnet F -GLIBC_2.2 key_setsecret F -GLIBC_2.2 localeconv F -GLIBC_2.2 lockf64 F -GLIBC_2.2 lseek64 F -GLIBC_2.2 makecontext F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 mempcpy F -GLIBC_2.2 memrchr F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 mmap64 F -GLIBC_2.2 moncontrol F -GLIBC_2.2 msgctl F -GLIBC_2.2 netname2host F -GLIBC_2.2 netname2user F -GLIBC_2.2 nftw F -GLIBC_2.2 nftw64 F -GLIBC_2.2 ngettext F -GLIBC_2.2 ntp_adjtime F -GLIBC_2.2 ntp_gettime F -GLIBC_2.2 open64 F -GLIBC_2.2 passwd2des F -GLIBC_2.2 pclose F -GLIBC_2.2 popen F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 printf_size F -GLIBC_2.2 printf_size_info F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 ptsname F -GLIBC_2.2 ptsname_r F -GLIBC_2.2 putgrent F -GLIBC_2.2 putmsg F -GLIBC_2.2 putpmsg F -GLIBC_2.2 pututxline F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 rawmemchr F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 rtime F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 scandir64 F -GLIBC_2.2 semctl F -GLIBC_2.2 sendfile F -GLIBC_2.2 setrlimit64 F -GLIBC_2.2 setutxent F -GLIBC_2.2 shmctl F -GLIBC_2.2 sighold F -GLIBC_2.2 sigignore F -GLIBC_2.2 sigqueue F -GLIBC_2.2 sigrelse F -GLIBC_2.2 sigset F -GLIBC_2.2 sigtimedwait F -GLIBC_2.2 sigwaitinfo F -GLIBC_2.2 statfs64 F -GLIBC_2.2 statvfs F -GLIBC_2.2 statvfs64 F -GLIBC_2.2 strcasestr F -GLIBC_2.2 strchrnul F -GLIBC_2.2 strtoimax F -GLIBC_2.2 strtoumax F -GLIBC_2.2 strverscmp F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x4 -GLIBC_2.2 svcunix_create F -GLIBC_2.2 svcunixfd_create F -GLIBC_2.2 swapcontext F -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 sys_errlist D 0x11b8 -GLIBC_2.2 sys_nerr D 0x4 -GLIBC_2.2 sys_sigabbrev D 0x100 -GLIBC_2.2 sys_siglist D 0x100 -GLIBC_2.2 sysv_signal F -GLIBC_2.2 tcgetsid F -GLIBC_2.2 tdestroy F -GLIBC_2.2 tmpfile F -GLIBC_2.2 tmpfile64 F -GLIBC_2.2 truncate64 F -GLIBC_2.2 umount2 F -GLIBC_2.2 ungetwc F -GLIBC_2.2 unlockpt F -GLIBC_2.2 updwtmpx F -GLIBC_2.2 user2netname F -GLIBC_2.2 utmpxname F -GLIBC_2.2 versionsort F -GLIBC_2.2 versionsort64 F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 waitid F -GLIBC_2.2 wcscasecmp F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wcsncasecmp F -GLIBC_2.2 wcsnlen F -GLIBC_2.2 wcstoimax F -GLIBC_2.2 wcstoll F -GLIBC_2.2 wcstoull F -GLIBC_2.2 wcstoumax F -GLIBC_2.2 wcswcs F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wordexp F -GLIBC_2.2 wordfree F -GLIBC_2.2 wprintf F -GLIBC_2.2 wscanf F -GLIBC_2.2 xdecrypt F -GLIBC_2.2 xdr_authdes_cred F -GLIBC_2.2 xdr_authdes_verf F -GLIBC_2.2 xdr_getcredres F -GLIBC_2.2 xdr_hyper F -GLIBC_2.2 xdr_int16_t F -GLIBC_2.2 xdr_int32_t F -GLIBC_2.2 xdr_int64_t F -GLIBC_2.2 xdr_int8_t F -GLIBC_2.2 xdr_longlong_t F -GLIBC_2.2 xdr_netnamestr F -GLIBC_2.2 xdr_sizeof F -GLIBC_2.2 xdr_u_hyper F -GLIBC_2.2 xdr_u_longlong_t F -GLIBC_2.2 xdr_uint16_t F -GLIBC_2.2 xdr_uint32_t F -GLIBC_2.2 xdr_uint64_t F -GLIBC_2.2 xdr_uint8_t F -GLIBC_2.2 xdr_unixcred F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoll_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strtoull_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x200 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 posix_fadvise64 F -GLIBC_2.3.3 posix_fallocate64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 sys_sigabbrev D 0x200 -GLIBC_2.3.3 sys_siglist D 0x200 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 futimesat F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 symlinkat F -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F -_gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips32/readahead.c b/sysdeps/unix/sysv/linux/mips/mips32/readahead.c deleted file mode 100644 index 80170c3e8a..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/readahead.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/mips32/syscalls.list b/sysdeps/unix/sysv/linux/mips/mips32/syscalls.list deleted file mode 100644 index f357b5c918..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/syscalls.list +++ /dev/null @@ -1,5 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -prlimit64 EXTRA prlimit64 i:iipp prlimit64 - -fanotify_mark EXTRA fanotify_mark i:iiiiis fanotify_mark diff --git a/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h deleted file mode 100644 index e9e3ee7e82..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h +++ /dev/null @@ -1,396 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINUX_MIPS_MIPS32_SYSDEP_H -#define _LINUX_MIPS_MIPS32_SYSDEP_H 1 - -/* There is some commonality. */ -#include -#include - -#include - -/* In order to get __set_errno() definition in INLINE_SYSCALL. */ -#ifndef __ASSEMBLER__ -#include -#endif - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -#ifdef __ASSEMBLER__ - -/* We don't want the label for the error handler to be visible in the symbol - table when we define it here. */ -#ifdef __PIC__ -# define SYSCALL_ERROR_LABEL 99b -#endif - -#else /* ! __ASSEMBLER__ */ - -/* Define a macro which expands into the inline wrapper code for a system - call. */ -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - ({ INTERNAL_SYSCALL_DECL (_sc_err); \ - long result_var = INTERNAL_SYSCALL (name, _sc_err, nr, args); \ - if ( INTERNAL_SYSCALL_ERROR_P (result_var, _sc_err) ) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (result_var, _sc_err)); \ - result_var = -1L; \ - } \ - result_var; }) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) long err __attribute__ ((unused)) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) ((void) (val), (long) (err)) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) ((void) (err), val) - -/* Note that the original Linux syscall restart convention required the - instruction immediately preceding SYSCALL to initialize $v0 with the - syscall number. Then if a restart triggered, $v0 would have been - clobbered by the syscall interrupted, and needed to be reinititalized. - The kernel would decrement the PC by 4 before switching back to the - user mode so that $v0 had been reloaded before SYSCALL was executed - again. This implied the place $v0 was loaded from must have been - preserved across a syscall, e.g. an immediate, static register, stack - slot, etc. - - The convention was relaxed in Linux with a change applied to the kernel - GIT repository as commit 96187fb0bc30cd7919759d371d810e928048249d, that - first appeared in the 2.6.36 release. Since then the kernel has had - code that reloads $v0 upon syscall restart and resumes right at the - SYSCALL instruction, so no special arrangement is needed anymore. - - For backwards compatibility with existing kernel binaries we support - the old convention by choosing the instruction preceding SYSCALL - carefully. This also means we have to force a 32-bit encoding of the - microMIPS MOVE instruction if one is used. */ - -#ifdef __mips_micromips -# define MOVE32 "move32" -#else -# define MOVE32 "move" -#endif - -#undef INTERNAL_SYSCALL -#undef INTERNAL_SYSCALL_NCS - -#ifdef __mips16 -/* There's no MIPS16 syscall instruction, so we go through out-of-line - standard MIPS wrappers. These do use inline snippets below though, - through INTERNAL_SYSCALL_MIPS16. Spilling the syscall number to - memory gives the best code in that case, avoiding the need to save - and restore a static register. */ - -# include - -# define INTERNAL_SYSCALL(name, err, nr, args...) \ - INTERNAL_SYSCALL_NCS (SYS_ify (name), err, nr, args) - -# define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ -({ \ - union __mips16_syscall_return _sc_ret; \ - _sc_ret.val = __mips16_syscall##nr (args, number); \ - err = _sc_ret.reg.v1; \ - _sc_ret.reg.v0; \ -}) - -# define INTERNAL_SYSCALL_MIPS16(number, err, nr, args...) \ - internal_syscall##nr ("lw\t%0, %2\n\t", \ - "R" (number), \ - 0, err, args) - -#else /* !__mips16 */ -# define INTERNAL_SYSCALL(name, err, nr, args...) \ - internal_syscall##nr ("li\t%0, %2\t\t\t# " #name "\n\t", \ - "IK" (SYS_ify (name)), \ - 0, err, args) - -# define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ - internal_syscall##nr (MOVE32 "\t%0, %2\n\t", \ - "r" (__s0), \ - number, err, args) - -#endif /* !__mips16 */ - -#define internal_syscall0(v0_init, input, number, err, dummy...) \ -({ \ - long _sys_result; \ - \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a3 asm ("$7"); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set reorder" \ - : "=r" (__v0), "=r" (__a3) \ - : input \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall1(v0_init, input, number, err, arg1) \ -({ \ - long _sys_result; \ - \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a0 asm ("$4") = (long) (arg1); \ - register long __a3 asm ("$7"); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set reorder" \ - : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall2(v0_init, input, number, err, arg1, arg2) \ -({ \ - long _sys_result; \ - \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a0 asm ("$4") = (long) (arg1); \ - register long __a1 asm ("$5") = (long) (arg2); \ - register long __a3 asm ("$7"); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0), "r" (__a1) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall3(v0_init, input, number, err, \ - arg1, arg2, arg3) \ -({ \ - long _sys_result; \ - \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a0 asm ("$4") = (long) (arg1); \ - register long __a1 asm ("$5") = (long) (arg2); \ - register long __a2 asm ("$6") = (long) (arg3); \ - register long __a3 asm ("$7"); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall4(v0_init, input, number, err, \ - arg1, arg2, arg3, arg4) \ -({ \ - long _sys_result; \ - \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a0 asm ("$4") = (long) (arg1); \ - register long __a1 asm ("$5") = (long) (arg2); \ - register long __a2 asm ("$6") = (long) (arg3); \ - register long __a3 asm ("$7") = (long) (arg4); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "+r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -/* We need to use a frame pointer for the functions in which we - adjust $sp around the syscall, or debug information and unwind - information will be $sp relative and thus wrong during the syscall. As - of GCC 4.7, this is sufficient. */ -#define FORCE_FRAME_POINTER \ - void *volatile __fp_force __attribute__ ((unused)) = alloca (4) - -#define internal_syscall5(v0_init, input, number, err, \ - arg1, arg2, arg3, arg4, arg5) \ -({ \ - long _sys_result; \ - \ - FORCE_FRAME_POINTER; \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a0 asm ("$4") = (long) (arg1); \ - register long __a1 asm ("$5") = (long) (arg2); \ - register long __a2 asm ("$6") = (long) (arg3); \ - register long __a3 asm ("$7") = (long) (arg4); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - "subu\t$29, 32\n\t" \ - "sw\t%6, 16($29)\n\t" \ - v0_init \ - "syscall\n\t" \ - "addiu\t$29, 32\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "+r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2), \ - "r" ((long) (arg5)) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall6(v0_init, input, number, err, \ - arg1, arg2, arg3, arg4, arg5, arg6) \ -({ \ - long _sys_result; \ - \ - FORCE_FRAME_POINTER; \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a0 asm ("$4") = (long) (arg1); \ - register long __a1 asm ("$5") = (long) (arg2); \ - register long __a2 asm ("$6") = (long) (arg3); \ - register long __a3 asm ("$7") = (long) (arg4); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - "subu\t$29, 32\n\t" \ - "sw\t%6, 16($29)\n\t" \ - "sw\t%7, 20($29)\n\t" \ - v0_init \ - "syscall\n\t" \ - "addiu\t$29, 32\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "+r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2), \ - "r" ((long) (arg5)), "r" ((long) (arg6)) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall7(v0_init, input, number, err, \ - arg1, arg2, arg3, arg4, arg5, arg6, arg7) \ -({ \ - long _sys_result; \ - \ - FORCE_FRAME_POINTER; \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a0 asm ("$4") = (long) (arg1); \ - register long __a1 asm ("$5") = (long) (arg2); \ - register long __a2 asm ("$6") = (long) (arg3); \ - register long __a3 asm ("$7") = (long) (arg4); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - "subu\t$29, 32\n\t" \ - "sw\t%6, 16($29)\n\t" \ - "sw\t%7, 20($29)\n\t" \ - "sw\t%8, 24($29)\n\t" \ - v0_init \ - "syscall\n\t" \ - "addiu\t$29, 32\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "+r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2), \ - "r" ((long) (arg5)), "r" ((long) (arg6)), "r" ((long) (arg7)) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define __SYSCALL_CLOBBERS "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", \ - "$14", "$15", "$24", "$25", "hi", "lo", "memory" - -/* Standard MIPS syscalls have an error flag, and return a positive errno - when the error flag is set. Emulate this behaviour for vsyscalls so that - the INTERNAL_SYSCALL_{ERROR_P,ERRNO} macros work correctly. */ -#define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...) \ - ({ \ - long _ret = funcptr (args); \ - err = ((unsigned long) (_ret) >= (unsigned long) -4095L); \ - if (err) \ - _ret = -_ret; \ - _ret; \ - }) - -/* List of system calls which are supported as vsyscalls. */ -#define HAVE_CLOCK_GETTIME_VSYSCALL 1 -#define HAVE_GETTIMEOFDAY_VSYSCALL 1 - -#endif /* __ASSEMBLER__ */ - -/* Pointer mangling is not yet supported for MIPS. */ -#define PTR_MANGLE(var) (void) (var) -#define PTR_DEMANGLE(var) (void) (var) - -#endif /* linux/mips/mips32/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/mips/mips64/Makefile b/sysdeps/unix/sysv/linux/mips/mips64/Makefile deleted file mode 100644 index b4fb190bba..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -ifeq ($(subdir),socket) -CFLAGS-recv.c += -fexceptions -CFLAGS-send.c += -fexceptions -endif - -ifeq ($(subdir),nptl) -CFLAGS-recv.c += -fexceptions -CFLAGS-send.c += -fexceptions -endif - -ifeq ($(subdir),signal) -# sigaction.c defines static functions in asms and refers to them from -# C code, resulting in "'restore_rt' used but never defined" (which -# has no corresponding warning option to allow it to be disabled with -# diagnostic pragmas). -CFLAGS-sigaction.c += -Wno-error -endif - -ifeq ($(subdir),nptl) -CFLAGS-sigaction.c += -Wno-error -endif diff --git a/sysdeps/unix/sysv/linux/mips/mips64/configure b/sysdeps/unix/sysv/linux/mips/mips64/configure deleted file mode 100644 index 26bed649db..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/configure +++ /dev/null @@ -1,4 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/mips/mips64. - -ldd_rewrite_script=$dir/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/mips/mips64/configure.ac b/sysdeps/unix/sysv/linux/mips/mips64/configure.ac deleted file mode 100644 index c137ec5552..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/configure.ac +++ /dev/null @@ -1,5 +0,0 @@ -sinclude(./aclocal.m4)dnl Autoconf lossage -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/mips/mips64. - -ldd_rewrite_script=$dir/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/mips/mips64/fxstat64.c b/sysdeps/unix/sysv/linux/mips/mips64/fxstat64.c deleted file mode 100644 index 5be899f2af..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/fxstat64.c +++ /dev/null @@ -1,44 +0,0 @@ -/* fxstat64 using 64-bit MIPS fstat system call. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include -#include - -#include - -/* Get information about the file FD in BUF. */ - -int -__fxstat64 (int vers, int fd, struct stat64 *buf) -{ - int result; - struct kernel_stat kbuf; - - result = INLINE_SYSCALL (fstat, 2, fd, &kbuf); - if (result == 0) - result = __xstat64_conv (vers, &kbuf, buf); - - return result; -} - -hidden_def (__fxstat64) diff --git a/sysdeps/unix/sysv/linux/mips/mips64/fxstatat64.c b/sysdeps/unix/sysv/linux/mips/mips64/fxstatat64.c deleted file mode 100644 index 0019359f72..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/fxstatat64.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -/* Get information about the file NAME in BUF. */ - -int -__fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag) -{ - if (__builtin_expect (vers != _STAT_VER_LINUX, 0)) - { - __set_errno (EINVAL); - return -1; - } - - int result; - INTERNAL_SYSCALL_DECL (err); - struct kernel_stat kst; - - result = INTERNAL_SYSCALL (newfstatat, err, 4, fd, file, &kst, flag); - if (!__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return __xstat64_conv (vers, &kst, st); - else - { - __set_errno (INTERNAL_SYSCALL_ERRNO (result, err)); - return -1; - } -} -libc_hidden_def (__fxstatat64) diff --git a/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h b/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h deleted file mode 100644 index de7bb68b37..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Old SysV permission definition for Linux. MIPS64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __IPC_64 0x100 - -struct __old_ipc_perm -{ - __key_t __key; /* Key. */ - int uid; /* Owner's user ID. */ - int gid; /* Owner's group ID. */ - int cuid; /* Creator's user ID. */ - int cgid; /* Creator's group ID. */ - int mode; /* Read/write permission. */ - unsigned short int __seq; /* Sequence number. */ -}; diff --git a/sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h b/sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h deleted file mode 100644 index 7430fb7718..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib32/ld.so.1", FLAG_ELF_LIBC6 }, \ - { "/lib64/ld.so.1", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/mips/mips64/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/mips/mips64/ldd-rewrite.sed deleted file mode 100644 index 2c327327e0..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/ldd-rewrite.sed +++ /dev/null @@ -1 +0,0 @@ -s_^\(RTLDLIST=\)\(.*lib\)\(\|32\|64\)\(/[^/]*\.so\.[0-9.]*\)[ ]*$_\1"\232\4 \264\4 \2\4"_ diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libBrokenLocale.abilist deleted file mode 100644 index 4a56bb68a3..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libanl.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libanl.abilist deleted file mode 100644 index edabfb436e..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 gai_cancel F -GLIBC_2.2.3 gai_error F -GLIBC_2.2.3 gai_suspend F -GLIBC_2.2.3 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libcrypt.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libcrypt.abilist deleted file mode 100644 index 4db2639336..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 crypt F -GLIBC_2.0 crypt_r F -GLIBC_2.0 encrypt F -GLIBC_2.0 encrypt_r F -GLIBC_2.0 fcrypt F -GLIBC_2.0 setkey F -GLIBC_2.0 setkey_r F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libdl.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libdl.abilist deleted file mode 100644 index b4c577e4a6..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/libdl.abilist +++ /dev/null @@ -1,14 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 dladdr F -GLIBC_2.0 dlclose F -GLIBC_2.0 dlerror F -GLIBC_2.0 dlopen F -GLIBC_2.0 dlsym F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 dlopen F -GLIBC_2.2 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist deleted file mode 100644 index b9599fee34..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ /dev/null @@ -1,465 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _LIB_VERSION D 0x4 -GLIBC_2.0 acos F -GLIBC_2.0 acosf F -GLIBC_2.0 acosh F -GLIBC_2.0 acoshf F -GLIBC_2.0 acoshl F -GLIBC_2.0 acosl F -GLIBC_2.0 asin F -GLIBC_2.0 asinf F -GLIBC_2.0 asinh F -GLIBC_2.0 asinhf F -GLIBC_2.0 asinhl F -GLIBC_2.0 asinl F -GLIBC_2.0 atan F -GLIBC_2.0 atan2 F -GLIBC_2.0 atan2f F -GLIBC_2.0 atan2l F -GLIBC_2.0 atanf F -GLIBC_2.0 atanh F -GLIBC_2.0 atanhf F -GLIBC_2.0 atanhl F -GLIBC_2.0 atanl F -GLIBC_2.0 cbrt F -GLIBC_2.0 cbrtf F -GLIBC_2.0 cbrtl F -GLIBC_2.0 ceil F -GLIBC_2.0 ceilf F -GLIBC_2.0 ceill F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 cos F -GLIBC_2.0 cosf F -GLIBC_2.0 cosh F -GLIBC_2.0 coshf F -GLIBC_2.0 coshl F -GLIBC_2.0 cosl F -GLIBC_2.0 drem F -GLIBC_2.0 dremf F -GLIBC_2.0 dreml F -GLIBC_2.0 erf F -GLIBC_2.0 erfc F -GLIBC_2.0 erfcf F -GLIBC_2.0 erfcl F -GLIBC_2.0 erff F -GLIBC_2.0 erfl F -GLIBC_2.0 exp F -GLIBC_2.0 expf F -GLIBC_2.0 expl F -GLIBC_2.0 expm1 F -GLIBC_2.0 expm1f F -GLIBC_2.0 expm1l F -GLIBC_2.0 fabs F -GLIBC_2.0 fabsf F -GLIBC_2.0 fabsl F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 floor F -GLIBC_2.0 floorf F -GLIBC_2.0 floorl F -GLIBC_2.0 fmod F -GLIBC_2.0 fmodf F -GLIBC_2.0 fmodl F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 gamma F -GLIBC_2.0 gammaf F -GLIBC_2.0 gammal F -GLIBC_2.0 hypot F -GLIBC_2.0 hypotf F -GLIBC_2.0 hypotl F -GLIBC_2.0 ilogb F -GLIBC_2.0 ilogbf F -GLIBC_2.0 ilogbl F -GLIBC_2.0 j0 F -GLIBC_2.0 j0f F -GLIBC_2.0 j0l F -GLIBC_2.0 j1 F -GLIBC_2.0 j1f F -GLIBC_2.0 j1l F -GLIBC_2.0 jn F -GLIBC_2.0 jnf F -GLIBC_2.0 jnl F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 lgamma F -GLIBC_2.0 lgamma_r F -GLIBC_2.0 lgammaf F -GLIBC_2.0 lgammaf_r F -GLIBC_2.0 lgammal F -GLIBC_2.0 lgammal_r F -GLIBC_2.0 log F -GLIBC_2.0 log10 F -GLIBC_2.0 log10f F -GLIBC_2.0 log10l F -GLIBC_2.0 log1p F -GLIBC_2.0 log1pf F -GLIBC_2.0 log1pl F -GLIBC_2.0 logb F -GLIBC_2.0 logbf F -GLIBC_2.0 logbl F -GLIBC_2.0 logf F -GLIBC_2.0 logl F -GLIBC_2.0 matherr F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 nextafter F -GLIBC_2.0 nextafterf F -GLIBC_2.0 nextafterl F -GLIBC_2.0 pow F -GLIBC_2.0 powf F -GLIBC_2.0 powl F -GLIBC_2.0 remainder F -GLIBC_2.0 remainderf F -GLIBC_2.0 remainderl F -GLIBC_2.0 rint F -GLIBC_2.0 rintf F -GLIBC_2.0 rintl F -GLIBC_2.0 scalb F -GLIBC_2.0 scalbf F -GLIBC_2.0 scalbl F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 signgam D 0x4 -GLIBC_2.0 significand F -GLIBC_2.0 significandf F -GLIBC_2.0 significandl F -GLIBC_2.0 sin F -GLIBC_2.0 sinf F -GLIBC_2.0 sinh F -GLIBC_2.0 sinhf F -GLIBC_2.0 sinhl F -GLIBC_2.0 sinl F -GLIBC_2.0 sqrt F -GLIBC_2.0 sqrtf F -GLIBC_2.0 sqrtl F -GLIBC_2.0 tan F -GLIBC_2.0 tanf F -GLIBC_2.0 tanh F -GLIBC_2.0 tanhf F -GLIBC_2.0 tanhl F -GLIBC_2.0 tanl F -GLIBC_2.0 y0 F -GLIBC_2.0 y0f F -GLIBC_2.0 y0l F -GLIBC_2.0 y1 F -GLIBC_2.0 y1f F -GLIBC_2.0 y1l F -GLIBC_2.0 yn F -GLIBC_2.0 ynf F -GLIBC_2.0 ynl F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __acoshl_finite F -GLIBC_2.15 __acosl_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __asinl_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atan2l_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __atanhl_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __coshl_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp10l_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp2l_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __expl_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __fmodl_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __gammal_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __hypotl_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j0l_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __j1l_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __jnl_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __lgammal_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log10l_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log2l_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __logl_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __powl_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __remainderl_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __scalbl_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sinhl_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __sqrtl_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y0l_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __y1l_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.15 __ynl_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __clog10 F -GLIBC_2.2 __clog10f F -GLIBC_2.2 __clog10l F -GLIBC_2.2 __finite F -GLIBC_2.2 __finitef F -GLIBC_2.2 __finitel F -GLIBC_2.2 __fpclassify F -GLIBC_2.2 __fpclassifyf F -GLIBC_2.2 __fpclassifyl F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 __signbitl F -GLIBC_2.2 cabs F -GLIBC_2.2 cabsf F -GLIBC_2.2 cabsl F -GLIBC_2.2 cacos F -GLIBC_2.2 cacosf F -GLIBC_2.2 cacosh F -GLIBC_2.2 cacoshf F -GLIBC_2.2 cacoshl F -GLIBC_2.2 cacosl F -GLIBC_2.2 carg F -GLIBC_2.2 cargf F -GLIBC_2.2 cargl F -GLIBC_2.2 casin F -GLIBC_2.2 casinf F -GLIBC_2.2 casinh F -GLIBC_2.2 casinhf F -GLIBC_2.2 casinhl F -GLIBC_2.2 casinl F -GLIBC_2.2 catan F -GLIBC_2.2 catanf F -GLIBC_2.2 catanh F -GLIBC_2.2 catanhf F -GLIBC_2.2 catanhl F -GLIBC_2.2 catanl F -GLIBC_2.2 ccos F -GLIBC_2.2 ccosf F -GLIBC_2.2 ccosh F -GLIBC_2.2 ccoshf F -GLIBC_2.2 ccoshl F -GLIBC_2.2 ccosl F -GLIBC_2.2 cexp F -GLIBC_2.2 cexpf F -GLIBC_2.2 cexpl F -GLIBC_2.2 cimag F -GLIBC_2.2 cimagf F -GLIBC_2.2 cimagl F -GLIBC_2.2 clog F -GLIBC_2.2 clog10 F -GLIBC_2.2 clog10f F -GLIBC_2.2 clog10l F -GLIBC_2.2 clogf F -GLIBC_2.2 clogl F -GLIBC_2.2 conj F -GLIBC_2.2 conjf F -GLIBC_2.2 conjl F -GLIBC_2.2 cpow F -GLIBC_2.2 cpowf F -GLIBC_2.2 cpowl F -GLIBC_2.2 cproj F -GLIBC_2.2 cprojf F -GLIBC_2.2 cprojl F -GLIBC_2.2 creal F -GLIBC_2.2 crealf F -GLIBC_2.2 creall F -GLIBC_2.2 csin F -GLIBC_2.2 csinf F -GLIBC_2.2 csinh F -GLIBC_2.2 csinhf F -GLIBC_2.2 csinhl F -GLIBC_2.2 csinl F -GLIBC_2.2 csqrt F -GLIBC_2.2 csqrtf F -GLIBC_2.2 csqrtl F -GLIBC_2.2 ctan F -GLIBC_2.2 ctanf F -GLIBC_2.2 ctanh F -GLIBC_2.2 ctanhf F -GLIBC_2.2 ctanhl F -GLIBC_2.2 ctanl F -GLIBC_2.2 exp10 F -GLIBC_2.2 exp10f F -GLIBC_2.2 exp10l F -GLIBC_2.2 exp2 F -GLIBC_2.2 exp2f F -GLIBC_2.2 exp2l F -GLIBC_2.2 fdim F -GLIBC_2.2 fdimf F -GLIBC_2.2 fdiml F -GLIBC_2.2 feclearexcept F -GLIBC_2.2 fedisableexcept F -GLIBC_2.2 feenableexcept F -GLIBC_2.2 fegetenv F -GLIBC_2.2 fegetexcept F -GLIBC_2.2 fegetexceptflag F -GLIBC_2.2 fegetround F -GLIBC_2.2 feholdexcept F -GLIBC_2.2 feraiseexcept F -GLIBC_2.2 fesetenv F -GLIBC_2.2 fesetexceptflag F -GLIBC_2.2 fesetround F -GLIBC_2.2 fetestexcept F -GLIBC_2.2 feupdateenv F -GLIBC_2.2 fma F -GLIBC_2.2 fmaf F -GLIBC_2.2 fmal F -GLIBC_2.2 fmax F -GLIBC_2.2 fmaxf F -GLIBC_2.2 fmaxl F -GLIBC_2.2 fmin F -GLIBC_2.2 fminf F -GLIBC_2.2 fminl F -GLIBC_2.2 llrint F -GLIBC_2.2 llrintf F -GLIBC_2.2 llrintl F -GLIBC_2.2 llround F -GLIBC_2.2 llroundf F -GLIBC_2.2 llroundl F -GLIBC_2.2 log2 F -GLIBC_2.2 log2f F -GLIBC_2.2 log2l F -GLIBC_2.2 lrint F -GLIBC_2.2 lrintf F -GLIBC_2.2 lrintl F -GLIBC_2.2 lround F -GLIBC_2.2 lroundf F -GLIBC_2.2 lroundl F -GLIBC_2.2 nan F -GLIBC_2.2 nanf F -GLIBC_2.2 nanl F -GLIBC_2.2 nearbyint F -GLIBC_2.2 nearbyintf F -GLIBC_2.2 nearbyintl F -GLIBC_2.2 nexttoward F -GLIBC_2.2 nexttowardf F -GLIBC_2.2 nexttowardl F -GLIBC_2.2 pow10 F -GLIBC_2.2 pow10f F -GLIBC_2.2 pow10l F -GLIBC_2.2 remquo F -GLIBC_2.2 remquof F -GLIBC_2.2 remquol F -GLIBC_2.2 round F -GLIBC_2.2 roundf F -GLIBC_2.2 roundl F -GLIBC_2.2 scalbln F -GLIBC_2.2 scalblnf F -GLIBC_2.2 scalblnl F -GLIBC_2.2 sincos F -GLIBC_2.2 sincosf F -GLIBC_2.2 sincosl F -GLIBC_2.2 tgamma F -GLIBC_2.2 tgammaf F -GLIBC_2.2 tgammal F -GLIBC_2.2 trunc F -GLIBC_2.2 truncf F -GLIBC_2.2 truncl F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libnsl.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libnsl.abilist deleted file mode 100644 index d5b6e6997d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/libnsl.abilist +++ /dev/null @@ -1,123 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __yp_check F -GLIBC_2.0 xdr_domainname F -GLIBC_2.0 xdr_keydat F -GLIBC_2.0 xdr_mapname F -GLIBC_2.0 xdr_peername F -GLIBC_2.0 xdr_valdat F -GLIBC_2.0 xdr_yp_buf F -GLIBC_2.0 xdr_ypbind_binding F -GLIBC_2.0 xdr_ypbind_resp F -GLIBC_2.0 xdr_ypbind_resptype F -GLIBC_2.0 xdr_ypbind_setdom F -GLIBC_2.0 xdr_ypdelete_args F -GLIBC_2.0 xdr_ypmap_parms F -GLIBC_2.0 xdr_ypmaplist F -GLIBC_2.0 xdr_yppush_status F -GLIBC_2.0 xdr_yppushresp_xfr F -GLIBC_2.0 xdr_ypreq_key F -GLIBC_2.0 xdr_ypreq_nokey F -GLIBC_2.0 xdr_ypreq_xfr F -GLIBC_2.0 xdr_ypresp_all F -GLIBC_2.0 xdr_ypresp_key_val F -GLIBC_2.0 xdr_ypresp_maplist F -GLIBC_2.0 xdr_ypresp_master F -GLIBC_2.0 xdr_ypresp_order F -GLIBC_2.0 xdr_ypresp_val F -GLIBC_2.0 xdr_ypresp_xfr F -GLIBC_2.0 xdr_ypstat F -GLIBC_2.0 xdr_ypupdate_args F -GLIBC_2.0 xdr_ypxfrstat F -GLIBC_2.0 yp_all F -GLIBC_2.0 yp_bind F -GLIBC_2.0 yp_first F -GLIBC_2.0 yp_get_default_domain F -GLIBC_2.0 yp_maplist F -GLIBC_2.0 yp_master F -GLIBC_2.0 yp_match F -GLIBC_2.0 yp_next F -GLIBC_2.0 yp_order F -GLIBC_2.0 yp_unbind F -GLIBC_2.0 yp_update F -GLIBC_2.0 ypbinderr_string F -GLIBC_2.0 yperr_string F -GLIBC_2.0 ypprot_err F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __free_fdresult F -GLIBC_2.2 __nis_default_access F -GLIBC_2.2 __nis_default_group F -GLIBC_2.2 __nis_default_owner F -GLIBC_2.2 __nis_default_ttl F -GLIBC_2.2 __nis_finddirectory F -GLIBC_2.2 __nis_hash F -GLIBC_2.2 __nisbind_connect F -GLIBC_2.2 __nisbind_create F -GLIBC_2.2 __nisbind_destroy F -GLIBC_2.2 __nisbind_next F -GLIBC_2.2 nis_add F -GLIBC_2.2 nis_add_entry F -GLIBC_2.2 nis_addmember F -GLIBC_2.2 nis_checkpoint F -GLIBC_2.2 nis_clone_directory F -GLIBC_2.2 nis_clone_object F -GLIBC_2.2 nis_clone_result F -GLIBC_2.2 nis_creategroup F -GLIBC_2.2 nis_destroy_object F -GLIBC_2.2 nis_destroygroup F -GLIBC_2.2 nis_dir_cmp F -GLIBC_2.2 nis_domain_of F -GLIBC_2.2 nis_domain_of_r F -GLIBC_2.2 nis_first_entry F -GLIBC_2.2 nis_free_directory F -GLIBC_2.2 nis_free_object F -GLIBC_2.2 nis_free_request F -GLIBC_2.2 nis_freenames F -GLIBC_2.2 nis_freeresult F -GLIBC_2.2 nis_freeservlist F -GLIBC_2.2 nis_freetags F -GLIBC_2.2 nis_getnames F -GLIBC_2.2 nis_getservlist F -GLIBC_2.2 nis_ismember F -GLIBC_2.2 nis_leaf_of F -GLIBC_2.2 nis_leaf_of_r F -GLIBC_2.2 nis_lerror F -GLIBC_2.2 nis_list F -GLIBC_2.2 nis_local_directory F -GLIBC_2.2 nis_local_group F -GLIBC_2.2 nis_local_host F -GLIBC_2.2 nis_local_principal F -GLIBC_2.2 nis_lookup F -GLIBC_2.2 nis_mkdir F -GLIBC_2.2 nis_modify F -GLIBC_2.2 nis_modify_entry F -GLIBC_2.2 nis_name_of F -GLIBC_2.2 nis_name_of_r F -GLIBC_2.2 nis_next_entry F -GLIBC_2.2 nis_perror F -GLIBC_2.2 nis_ping F -GLIBC_2.2 nis_print_directory F -GLIBC_2.2 nis_print_entry F -GLIBC_2.2 nis_print_group F -GLIBC_2.2 nis_print_group_entry F -GLIBC_2.2 nis_print_link F -GLIBC_2.2 nis_print_object F -GLIBC_2.2 nis_print_result F -GLIBC_2.2 nis_print_rights F -GLIBC_2.2 nis_print_table F -GLIBC_2.2 nis_read_obj F -GLIBC_2.2 nis_remove F -GLIBC_2.2 nis_remove_entry F -GLIBC_2.2 nis_removemember F -GLIBC_2.2 nis_rmdir F -GLIBC_2.2 nis_servstate F -GLIBC_2.2 nis_sperrno F -GLIBC_2.2 nis_sperror F -GLIBC_2.2 nis_sperror_r F -GLIBC_2.2 nis_stats F -GLIBC_2.2 nis_verifygroup F -GLIBC_2.2 nis_write_obj F -GLIBC_2.2 readColdStartFile F -GLIBC_2.2 writeColdStartFile F -GLIBC_2.2 xdr_cback_data F -GLIBC_2.2 xdr_obj_p F -GLIBC_2.2 xdr_ypall F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist deleted file mode 100644 index ad55bdd0e2..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist +++ /dev/null @@ -1,256 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 __close F -GLIBC_2.0 __connect F -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __fork F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __lseek F -GLIBC_2.0 __open F -GLIBC_2.0 __pthread_getspecific F -GLIBC_2.0 __pthread_key_create F -GLIBC_2.0 __pthread_mutex_destroy F -GLIBC_2.0 __pthread_mutex_init F -GLIBC_2.0 __pthread_mutex_lock F -GLIBC_2.0 __pthread_mutex_trylock F -GLIBC_2.0 __pthread_mutex_unlock F -GLIBC_2.0 __pthread_mutexattr_destroy F -GLIBC_2.0 __pthread_mutexattr_init F -GLIBC_2.0 __pthread_mutexattr_settype F -GLIBC_2.0 __pthread_once F -GLIBC_2.0 __pthread_setspecific F -GLIBC_2.0 __read F -GLIBC_2.0 __send F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __wait F -GLIBC_2.0 __write F -GLIBC_2.0 _pthread_cleanup_pop F -GLIBC_2.0 _pthread_cleanup_pop_restore F -GLIBC_2.0 _pthread_cleanup_push F -GLIBC_2.0 _pthread_cleanup_push_defer F -GLIBC_2.0 accept F -GLIBC_2.0 close F -GLIBC_2.0 connect F -GLIBC_2.0 fcntl F -GLIBC_2.0 flockfile F -GLIBC_2.0 fork F -GLIBC_2.0 fsync F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 funlockfile F -GLIBC_2.0 longjmp F -GLIBC_2.0 lseek F -GLIBC_2.0 msync F -GLIBC_2.0 nanosleep F -GLIBC_2.0 open F -GLIBC_2.0 pause F -GLIBC_2.0 pthread_atfork F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cancel F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_create F -GLIBC_2.0 pthread_detach F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_getspecific F -GLIBC_2.0 pthread_join F -GLIBC_2.0 pthread_key_create F -GLIBC_2.0 pthread_key_delete F -GLIBC_2.0 pthread_kill F -GLIBC_2.0 pthread_kill_other_threads_np F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_trylock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_mutexattr_destroy F -GLIBC_2.0 pthread_mutexattr_getkind_np F -GLIBC_2.0 pthread_mutexattr_init F -GLIBC_2.0 pthread_mutexattr_setkind_np F -GLIBC_2.0 pthread_once F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 pthread_setspecific F -GLIBC_2.0 pthread_sigmask F -GLIBC_2.0 pthread_testcancel F -GLIBC_2.0 raise F -GLIBC_2.0 read F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 sem_destroy F -GLIBC_2.0 sem_getvalue F -GLIBC_2.0 sem_init F -GLIBC_2.0 sem_post F -GLIBC_2.0 sem_trywait F -GLIBC_2.0 sem_wait F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 sigaction F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 sigwait F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 vfork F -GLIBC_2.0 wait F -GLIBC_2.0 waitpid F -GLIBC_2.0 write F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __open64 F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pthread_rwlock_destroy F -GLIBC_2.2 __pthread_rwlock_init F -GLIBC_2.2 __pthread_rwlock_rdlock F -GLIBC_2.2 __pthread_rwlock_tryrdlock F -GLIBC_2.2 __pthread_rwlock_trywrlock F -GLIBC_2.2 __pthread_rwlock_unlock F -GLIBC_2.2 __pthread_rwlock_wrlock F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __res_state F -GLIBC_2.2 __vfork F -GLIBC_2.2 lseek64 F -GLIBC_2.2 open64 F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 pthread_attr_getguardsize F -GLIBC_2.2 pthread_attr_getstack F -GLIBC_2.2 pthread_attr_getstackaddr F -GLIBC_2.2 pthread_attr_getstacksize F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 pthread_attr_setguardsize F -GLIBC_2.2 pthread_attr_setstack F -GLIBC_2.2 pthread_attr_setstackaddr F -GLIBC_2.2 pthread_attr_setstacksize F -GLIBC_2.2 pthread_barrier_destroy F -GLIBC_2.2 pthread_barrier_init F -GLIBC_2.2 pthread_barrier_wait F -GLIBC_2.2 pthread_barrierattr_destroy F -GLIBC_2.2 pthread_barrierattr_init F -GLIBC_2.2 pthread_barrierattr_setpshared F -GLIBC_2.2 pthread_condattr_getpshared F -GLIBC_2.2 pthread_condattr_setpshared F -GLIBC_2.2 pthread_create F -GLIBC_2.2 pthread_getconcurrency F -GLIBC_2.2 pthread_getcpuclockid F -GLIBC_2.2 pthread_mutex_timedlock F -GLIBC_2.2 pthread_mutexattr_getpshared F -GLIBC_2.2 pthread_mutexattr_gettype F -GLIBC_2.2 pthread_mutexattr_setpshared F -GLIBC_2.2 pthread_mutexattr_settype F -GLIBC_2.2 pthread_rwlock_destroy F -GLIBC_2.2 pthread_rwlock_init F -GLIBC_2.2 pthread_rwlock_rdlock F -GLIBC_2.2 pthread_rwlock_timedrdlock F -GLIBC_2.2 pthread_rwlock_timedwrlock F -GLIBC_2.2 pthread_rwlock_tryrdlock F -GLIBC_2.2 pthread_rwlock_trywrlock F -GLIBC_2.2 pthread_rwlock_unlock F -GLIBC_2.2 pthread_rwlock_wrlock F -GLIBC_2.2 pthread_rwlockattr_destroy F -GLIBC_2.2 pthread_rwlockattr_getkind_np F -GLIBC_2.2 pthread_rwlockattr_getpshared F -GLIBC_2.2 pthread_rwlockattr_init F -GLIBC_2.2 pthread_rwlockattr_setkind_np F -GLIBC_2.2 pthread_rwlockattr_setpshared F -GLIBC_2.2 pthread_setconcurrency F -GLIBC_2.2 pthread_spin_destroy F -GLIBC_2.2 pthread_spin_init F -GLIBC_2.2 pthread_spin_lock F -GLIBC_2.2 pthread_spin_trylock F -GLIBC_2.2 pthread_spin_unlock F -GLIBC_2.2 pthread_yield F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 sem_close F -GLIBC_2.2 sem_destroy F -GLIBC_2.2 sem_getvalue F -GLIBC_2.2 sem_init F -GLIBC_2.2 sem_open F -GLIBC_2.2 sem_post F -GLIBC_2.2 sem_timedwait F -GLIBC_2.2 sem_trywait F -GLIBC_2.2 sem_unlink F -GLIBC_2.2 sem_wait F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 pthread_getattr_np F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_attr_setstack F -GLIBC_2.3.3 pthread_attr_setstacksize F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/librt.abilist b/sysdeps/unix/sysv/linux/mips/mips64/librt.abilist deleted file mode 100644 index ff77db947e..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/librt.abilist +++ /dev/null @@ -1,46 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 aio_cancel F -GLIBC_2.2 aio_cancel64 F -GLIBC_2.2 aio_error F -GLIBC_2.2 aio_error64 F -GLIBC_2.2 aio_fsync F -GLIBC_2.2 aio_fsync64 F -GLIBC_2.2 aio_init F -GLIBC_2.2 aio_read F -GLIBC_2.2 aio_read64 F -GLIBC_2.2 aio_return F -GLIBC_2.2 aio_return64 F -GLIBC_2.2 aio_suspend F -GLIBC_2.2 aio_suspend64 F -GLIBC_2.2 aio_write F -GLIBC_2.2 aio_write64 F -GLIBC_2.2 clock_getcpuclockid F -GLIBC_2.2 clock_getres F -GLIBC_2.2 clock_gettime F -GLIBC_2.2 clock_nanosleep F -GLIBC_2.2 clock_settime F -GLIBC_2.2 lio_listio F -GLIBC_2.2 lio_listio64 F -GLIBC_2.2 shm_open F -GLIBC_2.2 shm_unlink F -GLIBC_2.2 timer_create F -GLIBC_2.2 timer_delete F -GLIBC_2.2 timer_getoverrun F -GLIBC_2.2 timer_gettime F -GLIBC_2.2 timer_settime F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libthread_db.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libthread_db.abilist deleted file mode 100644 index a8a8c2c68d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/libthread_db.abilist +++ /dev/null @@ -1,44 +0,0 @@ -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 td_init F -GLIBC_2.1.3 td_log F -GLIBC_2.1.3 td_ta_clear_event F -GLIBC_2.1.3 td_ta_delete F -GLIBC_2.1.3 td_ta_enable_stats F -GLIBC_2.1.3 td_ta_event_addr F -GLIBC_2.1.3 td_ta_event_getmsg F -GLIBC_2.1.3 td_ta_get_nthreads F -GLIBC_2.1.3 td_ta_get_ph F -GLIBC_2.1.3 td_ta_get_stats F -GLIBC_2.1.3 td_ta_map_id2thr F -GLIBC_2.1.3 td_ta_map_lwp2thr F -GLIBC_2.1.3 td_ta_new F -GLIBC_2.1.3 td_ta_reset_stats F -GLIBC_2.1.3 td_ta_set_event F -GLIBC_2.1.3 td_ta_setconcurrency F -GLIBC_2.1.3 td_ta_thr_iter F -GLIBC_2.1.3 td_ta_tsd_iter F -GLIBC_2.1.3 td_thr_clear_event F -GLIBC_2.1.3 td_thr_dbresume F -GLIBC_2.1.3 td_thr_dbsuspend F -GLIBC_2.1.3 td_thr_event_enable F -GLIBC_2.1.3 td_thr_event_getmsg F -GLIBC_2.1.3 td_thr_get_info F -GLIBC_2.1.3 td_thr_getfpregs F -GLIBC_2.1.3 td_thr_getgregs F -GLIBC_2.1.3 td_thr_getxregs F -GLIBC_2.1.3 td_thr_getxregsize F -GLIBC_2.1.3 td_thr_set_event F -GLIBC_2.1.3 td_thr_setfpregs F -GLIBC_2.1.3 td_thr_setgregs F -GLIBC_2.1.3 td_thr_setprio F -GLIBC_2.1.3 td_thr_setsigpending F -GLIBC_2.1.3 td_thr_setxregs F -GLIBC_2.1.3 td_thr_sigsetmask F -GLIBC_2.1.3 td_thr_tsd F -GLIBC_2.1.3 td_thr_validate F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 td_symbol_list F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libutil.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libutil.abilist deleted file mode 100644 index 89c67755c4..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 forkpty F -GLIBC_2.0 login F -GLIBC_2.0 login_tty F -GLIBC_2.0 logout F -GLIBC_2.0 logwtmp F -GLIBC_2.0 openpty F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/lxstat64.c b/sysdeps/unix/sysv/linux/mips/mips64/lxstat64.c deleted file mode 100644 index 1be716cc77..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/lxstat64.c +++ /dev/null @@ -1,43 +0,0 @@ -/* lxstat64 using 64-bit MIPS lstat system call. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include -#include - -#include - -/* Get information about the file NAME in BUF. */ -int -__lxstat64 (int vers, const char *name, struct stat64 *buf) -{ - int result; - struct kernel_stat kbuf; - - result = INLINE_SYSCALL (lstat, 2, name, &kbuf); - if (result == 0) - result = __xstat64_conv (vers, &kbuf, buf); - - return result; -} - -hidden_def (__lxstat64) diff --git a/sysdeps/unix/sysv/linux/mips/mips64/msgctl.c b/sysdeps/unix/sysv/linux/mips/mips64/msgctl.c deleted file mode 100644 index f379ecb7f5..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/msgctl.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#undef SHLIB_COMPAT -#define SHLIB_COMPAT(a, b, c) 0 - -#define DEFAULT_VERSION GLIBC_2_0 - -#include diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/Versions b/sysdeps/unix/sysv/linux/mips/mips64/n32/Versions deleted file mode 100644 index 9621fb5cae..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/Versions +++ /dev/null @@ -1,6 +0,0 @@ -libc { - GLIBC_2.19 { - getrlimit64; - setrlimit64; - } -} diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/c++-types.data b/sysdeps/unix/sysv/linux/mips/mips64/n32/c++-types.data deleted file mode 100644 index 39212e50bf..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:x -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c deleted file mode 100644 index ea951bc4f9..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist deleted file mode 100644 index bf55148c79..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist +++ /dev/null @@ -1,13 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _r_debug D 0x14 -GLIBC_2.0 calloc F -GLIBC_2.0 free F -GLIBC_2.0 malloc F -GLIBC_2.0 realloc F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __libc_stack_end D 0x4 -GLIBC_2.2 _dl_mcount F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __tls_get_addr F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __stack_chk_guard D 0x4 diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist deleted file mode 100644 index 783aa73ab7..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++ /dev/null @@ -1,2251 +0,0 @@ -GCC_3.0 GCC_3.0 A -GCC_3.0 _Unwind_Find_FDE F -GCC_3.0 __deregister_frame_info_bases F -GCC_3.0 __register_frame_info_bases F -GCC_3.0 __register_frame_info_table_bases F -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_adjust_column F -GLIBC_2.0 _IO_default_doallocate F -GLIBC_2.0 _IO_default_finish F -GLIBC_2.0 _IO_default_pbackfail F -GLIBC_2.0 _IO_default_uflow F -GLIBC_2.0 _IO_default_xsgetn F -GLIBC_2.0 _IO_default_xsputn F -GLIBC_2.0 _IO_do_write F -GLIBC_2.0 _IO_doallocbuf F -GLIBC_2.0 _IO_fclose F -GLIBC_2.0 _IO_fdopen F -GLIBC_2.0 _IO_feof F -GLIBC_2.0 _IO_ferror F -GLIBC_2.0 _IO_fflush F -GLIBC_2.0 _IO_fgetpos F -GLIBC_2.0 _IO_fgets F -GLIBC_2.0 _IO_file_attach F -GLIBC_2.0 _IO_file_close F -GLIBC_2.0 _IO_file_close_it F -GLIBC_2.0 _IO_file_doallocate F -GLIBC_2.0 _IO_file_fopen F -GLIBC_2.0 _IO_file_init F -GLIBC_2.0 _IO_file_jumps D 0x54 -GLIBC_2.0 _IO_file_open F -GLIBC_2.0 _IO_file_overflow F -GLIBC_2.0 _IO_file_read F -GLIBC_2.0 _IO_file_seek F -GLIBC_2.0 _IO_file_seekoff F -GLIBC_2.0 _IO_file_setbuf F -GLIBC_2.0 _IO_file_stat F -GLIBC_2.0 _IO_file_sync F -GLIBC_2.0 _IO_file_underflow F -GLIBC_2.0 _IO_file_write F -GLIBC_2.0 _IO_file_xsputn F -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_flush_all F -GLIBC_2.0 _IO_flush_all_linebuffered F -GLIBC_2.0 _IO_fopen F -GLIBC_2.0 _IO_fprintf F -GLIBC_2.0 _IO_fputs F -GLIBC_2.0 _IO_fread F -GLIBC_2.0 _IO_free_backup_area F -GLIBC_2.0 _IO_fsetpos F -GLIBC_2.0 _IO_ftell F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 _IO_fwrite F -GLIBC_2.0 _IO_getc F -GLIBC_2.0 _IO_getline F -GLIBC_2.0 _IO_gets F -GLIBC_2.0 _IO_init F -GLIBC_2.0 _IO_init_marker F -GLIBC_2.0 _IO_link_in F -GLIBC_2.0 _IO_list_all D 0x4 -GLIBC_2.0 _IO_marker_delta F -GLIBC_2.0 _IO_marker_difference F -GLIBC_2.0 _IO_padn F -GLIBC_2.0 _IO_peekc_locked F -GLIBC_2.0 _IO_popen F -GLIBC_2.0 _IO_printf F -GLIBC_2.0 _IO_proc_close F -GLIBC_2.0 _IO_proc_open F -GLIBC_2.0 _IO_putc F -GLIBC_2.0 _IO_puts F -GLIBC_2.0 _IO_remove_marker F -GLIBC_2.0 _IO_seekmark F -GLIBC_2.0 _IO_seekoff F -GLIBC_2.0 _IO_seekpos F -GLIBC_2.0 _IO_setb F -GLIBC_2.0 _IO_setbuffer F -GLIBC_2.0 _IO_setvbuf F -GLIBC_2.0 _IO_sgetn F -GLIBC_2.0 _IO_sprintf F -GLIBC_2.0 _IO_sputbackc F -GLIBC_2.0 _IO_sscanf F -GLIBC_2.0 _IO_stderr_ D 0x50 -GLIBC_2.0 _IO_stdin_ D 0x50 -GLIBC_2.0 _IO_stdout_ D 0x50 -GLIBC_2.0 _IO_str_init_readonly F -GLIBC_2.0 _IO_str_init_static F -GLIBC_2.0 _IO_str_overflow F -GLIBC_2.0 _IO_str_pbackfail F -GLIBC_2.0 _IO_str_seekoff F -GLIBC_2.0 _IO_str_underflow F -GLIBC_2.0 _IO_sungetc F -GLIBC_2.0 _IO_switch_to_get_mode F -GLIBC_2.0 _IO_un_link F -GLIBC_2.0 _IO_ungetc F -GLIBC_2.0 _IO_unsave_markers F -GLIBC_2.0 _IO_vfprintf F -GLIBC_2.0 _IO_vfscanf F -GLIBC_2.0 _IO_vsprintf F -GLIBC_2.0 ___brk_addr D 0x4 -GLIBC_2.0 __adjtimex F -GLIBC_2.0 __after_morecore_hook D 0x4 -GLIBC_2.0 __argz_count F -GLIBC_2.0 __argz_next F -GLIBC_2.0 __argz_stringify F -GLIBC_2.0 __assert_fail F -GLIBC_2.0 __assert_perror_fail F -GLIBC_2.0 __bsd_getpgrp F -GLIBC_2.0 __bzero F -GLIBC_2.0 __check_rhosts_file D 0x4 -GLIBC_2.0 __clone F -GLIBC_2.0 __close F -GLIBC_2.0 __cmsg_nxthdr F -GLIBC_2.0 __connect F -GLIBC_2.0 __ctype32_b D 0x4 -GLIBC_2.0 __ctype_b D 0x4 -GLIBC_2.0 __ctype_get_mb_cur_max F -GLIBC_2.0 __ctype_tolower D 0x4 -GLIBC_2.0 __ctype_toupper D 0x4 -GLIBC_2.0 __curbrk D 0x4 -GLIBC_2.0 __daylight D 0x4 -GLIBC_2.0 __dcgettext F -GLIBC_2.0 __default_morecore F -GLIBC_2.0 __deregister_frame F -GLIBC_2.0 __deregister_frame_info F -GLIBC_2.0 __dgettext F -GLIBC_2.0 __dup2 F -GLIBC_2.0 __environ D 0x4 -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __ffs F -GLIBC_2.0 __finite F -GLIBC_2.0 __finitef F -GLIBC_2.0 __finitel F -GLIBC_2.0 __fork F -GLIBC_2.0 __fpu_control D 0x4 -GLIBC_2.0 __frame_state_for F -GLIBC_2.0 __free_hook D 0x4 -GLIBC_2.0 __fxstat F -GLIBC_2.0 __getdelim F -GLIBC_2.0 __getpagesize F -GLIBC_2.0 __getpgid F -GLIBC_2.0 __getpid F -GLIBC_2.0 __gettimeofday F -GLIBC_2.0 __gmtime_r F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __isinf F -GLIBC_2.0 __isinff F -GLIBC_2.0 __isinfl F -GLIBC_2.0 __isnan F -GLIBC_2.0 __isnanf F -GLIBC_2.0 __isnanl F -GLIBC_2.0 __iswctype F -GLIBC_2.0 __ivaliduser F -GLIBC_2.0 __libc_calloc F -GLIBC_2.0 __libc_free F -GLIBC_2.0 __libc_init_first F -GLIBC_2.0 __libc_mallinfo F -GLIBC_2.0 __libc_malloc F -GLIBC_2.0 __libc_mallopt F -GLIBC_2.0 __libc_memalign F -GLIBC_2.0 __libc_pvalloc F -GLIBC_2.0 __libc_realloc F -GLIBC_2.0 __libc_start_main F -GLIBC_2.0 __libc_valloc F -GLIBC_2.0 __lseek F -GLIBC_2.0 __lxstat F -GLIBC_2.0 __malloc_hook D 0x4 -GLIBC_2.0 __malloc_initialize_hook D 0x4 -GLIBC_2.0 __mbrlen F -GLIBC_2.0 __mbrtowc F -GLIBC_2.0 __memalign_hook D 0x4 -GLIBC_2.0 __mempcpy F -GLIBC_2.0 __monstartup F -GLIBC_2.0 __morecore D 0x4 -GLIBC_2.0 __nss_configure_lookup F -GLIBC_2.0 __nss_database_lookup F -GLIBC_2.0 __nss_group_lookup F -GLIBC_2.0 __nss_hosts_lookup F -GLIBC_2.0 __nss_next F -GLIBC_2.0 __nss_passwd_lookup F -GLIBC_2.0 __open F -GLIBC_2.0 __overflow F -GLIBC_2.0 __pipe F -GLIBC_2.0 __printf_fp F -GLIBC_2.0 __profile_frequency F -GLIBC_2.0 __progname D 0x4 -GLIBC_2.0 __progname_full D 0x4 -GLIBC_2.0 __rcmd_errstr D 0x4 -GLIBC_2.0 __read F -GLIBC_2.0 __realloc_hook D 0x4 -GLIBC_2.0 __register_frame F -GLIBC_2.0 __register_frame_info F -GLIBC_2.0 __register_frame_info_table F -GLIBC_2.0 __register_frame_table F -GLIBC_2.0 __res_randomid F -GLIBC_2.0 __sbrk F -GLIBC_2.0 __sched_get_priority_max F -GLIBC_2.0 __sched_get_priority_min F -GLIBC_2.0 __sched_getparam F -GLIBC_2.0 __sched_getscheduler F -GLIBC_2.0 __sched_setscheduler F -GLIBC_2.0 __sched_yield F -GLIBC_2.0 __secure_getenv F -GLIBC_2.0 __select F -GLIBC_2.0 __send F -GLIBC_2.0 __setpgid F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __sigaddset F -GLIBC_2.0 __sigdelset F -GLIBC_2.0 __sigismember F -GLIBC_2.0 __sigpause F -GLIBC_2.0 __sigsetjmp F -GLIBC_2.0 __stpcpy F -GLIBC_2.0 __stpncpy F -GLIBC_2.0 __strcasecmp F -GLIBC_2.0 __strdup F -GLIBC_2.0 __strerror_r F -GLIBC_2.0 __strtod_internal F -GLIBC_2.0 __strtof_internal F -GLIBC_2.0 __strtok_r F -GLIBC_2.0 __strtol_internal F -GLIBC_2.0 __strtold_internal F -GLIBC_2.0 __strtoll_internal F -GLIBC_2.0 __strtoq_internal F -GLIBC_2.0 __strtoul_internal F -GLIBC_2.0 __strtoull_internal F -GLIBC_2.0 __strtouq_internal F -GLIBC_2.0 __sysv_signal F -GLIBC_2.0 __timezone D 0x4 -GLIBC_2.0 __tzname D 0x8 -GLIBC_2.0 __uflow F -GLIBC_2.0 __underflow F -GLIBC_2.0 __vfscanf F -GLIBC_2.0 __vsnprintf F -GLIBC_2.0 __vsscanf F -GLIBC_2.0 __wait F -GLIBC_2.0 __waitpid F -GLIBC_2.0 __wcstod_internal F -GLIBC_2.0 __wcstof_internal F -GLIBC_2.0 __wcstol_internal F -GLIBC_2.0 __wcstold_internal F -GLIBC_2.0 __wcstoll_internal F -GLIBC_2.0 __wcstoul_internal F -GLIBC_2.0 __wcstoull_internal F -GLIBC_2.0 __write F -GLIBC_2.0 __xmknod F -GLIBC_2.0 __xpg_basename F -GLIBC_2.0 __xstat F -GLIBC_2.0 _environ D 0x4 -GLIBC_2.0 _exit F -GLIBC_2.0 _flush_cache F -GLIBC_2.0 _libc_intl_domainname D 0x5 -GLIBC_2.0 _longjmp F -GLIBC_2.0 _mcleanup F -GLIBC_2.0 _mcount F -GLIBC_2.0 _nl_default_dirname D 0x12 -GLIBC_2.0 _nl_domain_bindings D 0x4 -GLIBC_2.0 _nl_msg_cat_cntr D 0x4 -GLIBC_2.0 _null_auth D 0xc -GLIBC_2.0 _obstack D 0x4 -GLIBC_2.0 _obstack_allocated_p F -GLIBC_2.0 _obstack_begin F -GLIBC_2.0 _obstack_begin_1 F -GLIBC_2.0 _obstack_free F -GLIBC_2.0 _obstack_memory_used F -GLIBC_2.0 _obstack_newchunk F -GLIBC_2.0 _res D 0x200 -GLIBC_2.0 _rpc_dtablesize F -GLIBC_2.0 _seterr_reply F -GLIBC_2.0 _setjmp F -GLIBC_2.0 _sys_errlist D 0x1ec -GLIBC_2.0 _sys_nerr D 0x4 -GLIBC_2.0 _sys_siglist D 0x80 -GLIBC_2.0 _tolower F -GLIBC_2.0 _toupper F -GLIBC_2.0 a64l F -GLIBC_2.0 abort F -GLIBC_2.0 abs F -GLIBC_2.0 accept F -GLIBC_2.0 access F -GLIBC_2.0 acct F -GLIBC_2.0 addmntent F -GLIBC_2.0 adjtime F -GLIBC_2.0 adjtimex F -GLIBC_2.0 advance F -GLIBC_2.0 alarm F -GLIBC_2.0 alphasort F -GLIBC_2.0 argz_add F -GLIBC_2.0 argz_add_sep F -GLIBC_2.0 argz_append F -GLIBC_2.0 argz_count F -GLIBC_2.0 argz_create F -GLIBC_2.0 argz_create_sep F -GLIBC_2.0 argz_delete F -GLIBC_2.0 argz_extract F -GLIBC_2.0 argz_insert F -GLIBC_2.0 argz_next F -GLIBC_2.0 argz_replace F -GLIBC_2.0 argz_stringify F -GLIBC_2.0 asctime F -GLIBC_2.0 asctime_r F -GLIBC_2.0 asprintf F -GLIBC_2.0 atexit F -GLIBC_2.0 atof F -GLIBC_2.0 atoi F -GLIBC_2.0 atol F -GLIBC_2.0 atoll F -GLIBC_2.0 authnone_create F -GLIBC_2.0 authunix_create F -GLIBC_2.0 authunix_create_default F -GLIBC_2.0 basename F -GLIBC_2.0 bcmp F -GLIBC_2.0 bcopy F -GLIBC_2.0 bdflush F -GLIBC_2.0 bind F -GLIBC_2.0 bindresvport F -GLIBC_2.0 bindtextdomain F -GLIBC_2.0 brk F -GLIBC_2.0 bsd_signal F -GLIBC_2.0 bsearch F -GLIBC_2.0 btowc F -GLIBC_2.0 bzero F -GLIBC_2.0 cachectl F -GLIBC_2.0 cacheflush F -GLIBC_2.0 calloc F -GLIBC_2.0 callrpc F -GLIBC_2.0 canonicalize_file_name F -GLIBC_2.0 catclose F -GLIBC_2.0 catgets F -GLIBC_2.0 catopen F -GLIBC_2.0 cfgetispeed F -GLIBC_2.0 cfgetospeed F -GLIBC_2.0 cfmakeraw F -GLIBC_2.0 cfree F -GLIBC_2.0 cfsetispeed F -GLIBC_2.0 cfsetospeed F -GLIBC_2.0 cfsetspeed F -GLIBC_2.0 chdir F -GLIBC_2.0 chflags F -GLIBC_2.0 chmod F -GLIBC_2.0 chown F -GLIBC_2.0 chroot F -GLIBC_2.0 clearenv F -GLIBC_2.0 clearerr F -GLIBC_2.0 clearerr_unlocked F -GLIBC_2.0 clnt_broadcast F -GLIBC_2.0 clnt_create F -GLIBC_2.0 clnt_pcreateerror F -GLIBC_2.0 clnt_perrno F -GLIBC_2.0 clnt_perror F -GLIBC_2.0 clnt_spcreateerror F -GLIBC_2.0 clnt_sperrno F -GLIBC_2.0 clnt_sperror F -GLIBC_2.0 clntraw_create F -GLIBC_2.0 clnttcp_create F -GLIBC_2.0 clntudp_bufcreate F -GLIBC_2.0 clntudp_create F -GLIBC_2.0 clock F -GLIBC_2.0 clone F -GLIBC_2.0 close F -GLIBC_2.0 closedir F -GLIBC_2.0 closelog F -GLIBC_2.0 confstr F -GLIBC_2.0 connect F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 creat F -GLIBC_2.0 create_module F -GLIBC_2.0 ctermid F -GLIBC_2.0 ctime F -GLIBC_2.0 ctime_r F -GLIBC_2.0 cuserid F -GLIBC_2.0 daemon F -GLIBC_2.0 daylight D 0x4 -GLIBC_2.0 dcgettext F -GLIBC_2.0 delete_module F -GLIBC_2.0 dgettext F -GLIBC_2.0 difftime F -GLIBC_2.0 dirfd F -GLIBC_2.0 dirname F -GLIBC_2.0 div F -GLIBC_2.0 dprintf F -GLIBC_2.0 drand48 F -GLIBC_2.0 drand48_r F -GLIBC_2.0 dup F -GLIBC_2.0 dup2 F -GLIBC_2.0 dysize F -GLIBC_2.0 ecvt F -GLIBC_2.0 ecvt_r F -GLIBC_2.0 endaliasent F -GLIBC_2.0 endfsent F -GLIBC_2.0 endgrent F -GLIBC_2.0 endhostent F -GLIBC_2.0 endmntent F -GLIBC_2.0 endnetent F -GLIBC_2.0 endnetgrent F -GLIBC_2.0 endprotoent F -GLIBC_2.0 endpwent F -GLIBC_2.0 endrpcent F -GLIBC_2.0 endservent F -GLIBC_2.0 endspent F -GLIBC_2.0 endttyent F -GLIBC_2.0 endusershell F -GLIBC_2.0 endutent F -GLIBC_2.0 environ D 0x4 -GLIBC_2.0 envz_add F -GLIBC_2.0 envz_entry F -GLIBC_2.0 envz_get F -GLIBC_2.0 envz_merge F -GLIBC_2.0 envz_remove F -GLIBC_2.0 envz_strip F -GLIBC_2.0 erand48 F -GLIBC_2.0 erand48_r F -GLIBC_2.0 err F -GLIBC_2.0 error F -GLIBC_2.0 error_at_line F -GLIBC_2.0 error_message_count D 0x4 -GLIBC_2.0 error_one_per_line D 0x4 -GLIBC_2.0 error_print_progname D 0x4 -GLIBC_2.0 errx F -GLIBC_2.0 ether_aton F -GLIBC_2.0 ether_aton_r F -GLIBC_2.0 ether_hostton F -GLIBC_2.0 ether_line F -GLIBC_2.0 ether_ntoa F -GLIBC_2.0 ether_ntoa_r F -GLIBC_2.0 ether_ntohost F -GLIBC_2.0 euidaccess F -GLIBC_2.0 execl F -GLIBC_2.0 execle F -GLIBC_2.0 execlp F -GLIBC_2.0 execv F -GLIBC_2.0 execve F -GLIBC_2.0 execvp F -GLIBC_2.0 exit F -GLIBC_2.0 fchdir F -GLIBC_2.0 fchflags F -GLIBC_2.0 fchmod F -GLIBC_2.0 fchown F -GLIBC_2.0 fclose F -GLIBC_2.0 fcloseall F -GLIBC_2.0 fcntl F -GLIBC_2.0 fcvt F -GLIBC_2.0 fcvt_r F -GLIBC_2.0 fdatasync F -GLIBC_2.0 fdopen F -GLIBC_2.0 feof F -GLIBC_2.0 feof_unlocked F -GLIBC_2.0 ferror F -GLIBC_2.0 ferror_unlocked F -GLIBC_2.0 fexecve F -GLIBC_2.0 fflush F -GLIBC_2.0 fflush_unlocked F -GLIBC_2.0 ffs F -GLIBC_2.0 fgetc F -GLIBC_2.0 fgetgrent F -GLIBC_2.0 fgetgrent_r F -GLIBC_2.0 fgetpos F -GLIBC_2.0 fgetpwent F -GLIBC_2.0 fgetpwent_r F -GLIBC_2.0 fgets F -GLIBC_2.0 fgetspent F -GLIBC_2.0 fgetspent_r F -GLIBC_2.0 fileno F -GLIBC_2.0 fileno_unlocked F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 flock F -GLIBC_2.0 flockfile F -GLIBC_2.0 fnmatch F -GLIBC_2.0 fopen F -GLIBC_2.0 fopencookie F -GLIBC_2.0 fork F -GLIBC_2.0 fpathconf F -GLIBC_2.0 fprintf F -GLIBC_2.0 fputc F -GLIBC_2.0 fputc_unlocked F -GLIBC_2.0 fputs F -GLIBC_2.0 fread F -GLIBC_2.0 free F -GLIBC_2.0 freeaddrinfo F -GLIBC_2.0 freopen F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 fscanf F -GLIBC_2.0 fseek F -GLIBC_2.0 fsetpos F -GLIBC_2.0 fstatfs F -GLIBC_2.0 fsync F -GLIBC_2.0 ftell F -GLIBC_2.0 ftime F -GLIBC_2.0 ftok F -GLIBC_2.0 ftruncate F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 fts_children F -GLIBC_2.0 fts_close F -GLIBC_2.0 fts_open F -GLIBC_2.0 fts_read F -GLIBC_2.0 fts_set F -GLIBC_2.0 ftw F -GLIBC_2.0 funlockfile F -GLIBC_2.0 fwrite F -GLIBC_2.0 gcvt F -GLIBC_2.0 get_avphys_pages F -GLIBC_2.0 get_current_dir_name F -GLIBC_2.0 get_kernel_syms F -GLIBC_2.0 get_myaddress F -GLIBC_2.0 get_nprocs F -GLIBC_2.0 get_nprocs_conf F -GLIBC_2.0 get_phys_pages F -GLIBC_2.0 getaddrinfo F -GLIBC_2.0 getaliasbyname F -GLIBC_2.0 getaliasbyname_r F -GLIBC_2.0 getaliasent F -GLIBC_2.0 getaliasent_r F -GLIBC_2.0 getc F -GLIBC_2.0 getc_unlocked F -GLIBC_2.0 getchar F -GLIBC_2.0 getchar_unlocked F -GLIBC_2.0 getcwd F -GLIBC_2.0 getdelim F -GLIBC_2.0 getdirentries F -GLIBC_2.0 getdomainname F -GLIBC_2.0 getdtablesize F -GLIBC_2.0 getegid F -GLIBC_2.0 getenv F -GLIBC_2.0 geteuid F -GLIBC_2.0 getfsent F -GLIBC_2.0 getfsfile F -GLIBC_2.0 getfsspec F -GLIBC_2.0 getgid F -GLIBC_2.0 getgrent F -GLIBC_2.0 getgrent_r F -GLIBC_2.0 getgrgid F -GLIBC_2.0 getgrgid_r F -GLIBC_2.0 getgrnam F -GLIBC_2.0 getgrnam_r F -GLIBC_2.0 getgroups F -GLIBC_2.0 gethostbyaddr F -GLIBC_2.0 gethostbyaddr_r F -GLIBC_2.0 gethostbyname F -GLIBC_2.0 gethostbyname2 F -GLIBC_2.0 gethostbyname2_r F -GLIBC_2.0 gethostbyname_r F -GLIBC_2.0 gethostent F -GLIBC_2.0 gethostent_r F -GLIBC_2.0 gethostid F -GLIBC_2.0 gethostname F -GLIBC_2.0 getitimer F -GLIBC_2.0 getline F -GLIBC_2.0 getlogin F -GLIBC_2.0 getlogin_r F -GLIBC_2.0 getmntent F -GLIBC_2.0 getmntent_r F -GLIBC_2.0 getnetbyaddr F -GLIBC_2.0 getnetbyaddr_r F -GLIBC_2.0 getnetbyname F -GLIBC_2.0 getnetbyname_r F -GLIBC_2.0 getnetent F -GLIBC_2.0 getnetent_r F -GLIBC_2.0 getnetgrent F -GLIBC_2.0 getnetgrent_r F -GLIBC_2.0 getopt F -GLIBC_2.0 getopt_long F -GLIBC_2.0 getopt_long_only F -GLIBC_2.0 getpagesize F -GLIBC_2.0 getpass F -GLIBC_2.0 getpeername F -GLIBC_2.0 getpgid F -GLIBC_2.0 getpgrp F -GLIBC_2.0 getpid F -GLIBC_2.0 getppid F -GLIBC_2.0 getpriority F -GLIBC_2.0 getprotobyname F -GLIBC_2.0 getprotobyname_r F -GLIBC_2.0 getprotobynumber F -GLIBC_2.0 getprotobynumber_r F -GLIBC_2.0 getprotoent F -GLIBC_2.0 getprotoent_r F -GLIBC_2.0 getpublickey F -GLIBC_2.0 getpw F -GLIBC_2.0 getpwent F -GLIBC_2.0 getpwent_r F -GLIBC_2.0 getpwnam F -GLIBC_2.0 getpwnam_r F -GLIBC_2.0 getpwuid F -GLIBC_2.0 getpwuid_r F -GLIBC_2.0 getresgid F -GLIBC_2.0 getresuid F -GLIBC_2.0 getrlimit F -GLIBC_2.0 getrpcbyname F -GLIBC_2.0 getrpcbyname_r F -GLIBC_2.0 getrpcbynumber F -GLIBC_2.0 getrpcbynumber_r F -GLIBC_2.0 getrpcent F -GLIBC_2.0 getrpcent_r F -GLIBC_2.0 getrpcport F -GLIBC_2.0 getrusage F -GLIBC_2.0 gets F -GLIBC_2.0 getsecretkey F -GLIBC_2.0 getservbyname F -GLIBC_2.0 getservbyname_r F -GLIBC_2.0 getservbyport F -GLIBC_2.0 getservbyport_r F -GLIBC_2.0 getservent F -GLIBC_2.0 getservent_r F -GLIBC_2.0 getsid F -GLIBC_2.0 getsockname F -GLIBC_2.0 getsockopt F -GLIBC_2.0 getspent F -GLIBC_2.0 getspent_r F -GLIBC_2.0 getspnam F -GLIBC_2.0 getspnam_r F -GLIBC_2.0 getsubopt F -GLIBC_2.0 gettext F -GLIBC_2.0 gettimeofday F -GLIBC_2.0 getttyent F -GLIBC_2.0 getttynam F -GLIBC_2.0 getuid F -GLIBC_2.0 getusershell F -GLIBC_2.0 getutent F -GLIBC_2.0 getutent_r F -GLIBC_2.0 getutid F -GLIBC_2.0 getutid_r F -GLIBC_2.0 getutline F -GLIBC_2.0 getutline_r F -GLIBC_2.0 getw F -GLIBC_2.0 getwd F -GLIBC_2.0 glob F -GLIBC_2.0 glob_pattern_p F -GLIBC_2.0 globfree F -GLIBC_2.0 gmtime F -GLIBC_2.0 gmtime_r F -GLIBC_2.0 group_member F -GLIBC_2.0 gsignal F -GLIBC_2.0 gtty F -GLIBC_2.0 h_errlist D 0x14 -GLIBC_2.0 h_nerr D 0x4 -GLIBC_2.0 hasmntopt F -GLIBC_2.0 hcreate F -GLIBC_2.0 hcreate_r F -GLIBC_2.0 hdestroy F -GLIBC_2.0 hdestroy_r F -GLIBC_2.0 herror F -GLIBC_2.0 hsearch F -GLIBC_2.0 hsearch_r F -GLIBC_2.0 hstrerror F -GLIBC_2.0 htonl F -GLIBC_2.0 htons F -GLIBC_2.0 index F -GLIBC_2.0 inet_addr F -GLIBC_2.0 inet_aton F -GLIBC_2.0 inet_lnaof F -GLIBC_2.0 inet_makeaddr F -GLIBC_2.0 inet_netof F -GLIBC_2.0 inet_network F -GLIBC_2.0 inet_nsap_addr F -GLIBC_2.0 inet_nsap_ntoa F -GLIBC_2.0 inet_ntoa F -GLIBC_2.0 inet_ntop F -GLIBC_2.0 inet_pton F -GLIBC_2.0 init_module F -GLIBC_2.0 initgroups F -GLIBC_2.0 initstate F -GLIBC_2.0 initstate_r F -GLIBC_2.0 innetgr F -GLIBC_2.0 insque F -GLIBC_2.0 ioctl F -GLIBC_2.0 iruserok F -GLIBC_2.0 isalnum F -GLIBC_2.0 isalpha F -GLIBC_2.0 isascii F -GLIBC_2.0 isatty F -GLIBC_2.0 isblank F -GLIBC_2.0 iscntrl F -GLIBC_2.0 isdigit F -GLIBC_2.0 isfdtype F -GLIBC_2.0 isgraph F -GLIBC_2.0 isinf F -GLIBC_2.0 isinff F -GLIBC_2.0 isinfl F -GLIBC_2.0 islower F -GLIBC_2.0 isnan F -GLIBC_2.0 isnanf F -GLIBC_2.0 isnanl F -GLIBC_2.0 isprint F -GLIBC_2.0 ispunct F -GLIBC_2.0 isspace F -GLIBC_2.0 isupper F -GLIBC_2.0 iswalnum F -GLIBC_2.0 iswalpha F -GLIBC_2.0 iswcntrl F -GLIBC_2.0 iswctype F -GLIBC_2.0 iswdigit F -GLIBC_2.0 iswgraph F -GLIBC_2.0 iswlower F -GLIBC_2.0 iswprint F -GLIBC_2.0 iswpunct F -GLIBC_2.0 iswspace F -GLIBC_2.0 iswupper F -GLIBC_2.0 iswxdigit F -GLIBC_2.0 isxdigit F -GLIBC_2.0 jrand48 F -GLIBC_2.0 jrand48_r F -GLIBC_2.0 kill F -GLIBC_2.0 killpg F -GLIBC_2.0 klogctl F -GLIBC_2.0 l64a F -GLIBC_2.0 labs F -GLIBC_2.0 lchown F -GLIBC_2.0 lckpwdf F -GLIBC_2.0 lcong48 F -GLIBC_2.0 lcong48_r F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 ldiv F -GLIBC_2.0 lfind F -GLIBC_2.0 link F -GLIBC_2.0 listen F -GLIBC_2.0 llabs F -GLIBC_2.0 lldiv F -GLIBC_2.0 llseek F -GLIBC_2.0 loc1 D 0x4 -GLIBC_2.0 loc2 D 0x4 -GLIBC_2.0 localeconv F -GLIBC_2.0 localtime F -GLIBC_2.0 localtime_r F -GLIBC_2.0 lockf F -GLIBC_2.0 locs D 0x4 -GLIBC_2.0 longjmp F -GLIBC_2.0 lrand48 F -GLIBC_2.0 lrand48_r F -GLIBC_2.0 lsearch F -GLIBC_2.0 lseek F -GLIBC_2.0 madvise F -GLIBC_2.0 mallinfo F -GLIBC_2.0 malloc F -GLIBC_2.0 malloc_get_state F -GLIBC_2.0 malloc_set_state F -GLIBC_2.0 malloc_stats F -GLIBC_2.0 malloc_trim F -GLIBC_2.0 malloc_usable_size F -GLIBC_2.0 mallopt F -GLIBC_2.0 mallwatch D 0x4 -GLIBC_2.0 mblen F -GLIBC_2.0 mbrlen F -GLIBC_2.0 mbrtowc F -GLIBC_2.0 mbsinit F -GLIBC_2.0 mbsnrtowcs F -GLIBC_2.0 mbsrtowcs F -GLIBC_2.0 mbstowcs F -GLIBC_2.0 mbtowc F -GLIBC_2.0 mcheck F -GLIBC_2.0 memalign F -GLIBC_2.0 memccpy F -GLIBC_2.0 memchr F -GLIBC_2.0 memcmp F -GLIBC_2.0 memcpy F -GLIBC_2.0 memfrob F -GLIBC_2.0 memmem F -GLIBC_2.0 memmove F -GLIBC_2.0 memset F -GLIBC_2.0 mkdir F -GLIBC_2.0 mkfifo F -GLIBC_2.0 mkstemp F -GLIBC_2.0 mktemp F -GLIBC_2.0 mktime F -GLIBC_2.0 mlock F -GLIBC_2.0 mlockall F -GLIBC_2.0 mmap F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 monstartup F -GLIBC_2.0 mount F -GLIBC_2.0 mprobe F -GLIBC_2.0 mprotect F -GLIBC_2.0 mrand48 F -GLIBC_2.0 mrand48_r F -GLIBC_2.0 mremap F -GLIBC_2.0 msgctl F -GLIBC_2.0 msgget F -GLIBC_2.0 msgrcv F -GLIBC_2.0 msgsnd F -GLIBC_2.0 msync F -GLIBC_2.0 mtrace F -GLIBC_2.0 munlock F -GLIBC_2.0 munlockall F -GLIBC_2.0 munmap F -GLIBC_2.0 muntrace F -GLIBC_2.0 nanosleep F -GLIBC_2.0 nfsservctl F -GLIBC_2.0 nice F -GLIBC_2.0 nl_langinfo F -GLIBC_2.0 nrand48 F -GLIBC_2.0 nrand48_r F -GLIBC_2.0 ntohl F -GLIBC_2.0 ntohs F -GLIBC_2.0 obstack_alloc_failed_handler D 0x4 -GLIBC_2.0 obstack_exit_failure D 0x4 -GLIBC_2.0 obstack_free F -GLIBC_2.0 obstack_printf F -GLIBC_2.0 obstack_vprintf F -GLIBC_2.0 on_exit F -GLIBC_2.0 open F -GLIBC_2.0 open_memstream F -GLIBC_2.0 opendir F -GLIBC_2.0 openlog F -GLIBC_2.0 optarg D 0x4 -GLIBC_2.0 opterr D 0x4 -GLIBC_2.0 optind D 0x4 -GLIBC_2.0 optopt D 0x4 -GLIBC_2.0 parse_printf_format F -GLIBC_2.0 pathconf F -GLIBC_2.0 pause F -GLIBC_2.0 pclose F -GLIBC_2.0 perror F -GLIBC_2.0 personality F -GLIBC_2.0 pipe F -GLIBC_2.0 pmap_getmaps F -GLIBC_2.0 pmap_getport F -GLIBC_2.0 pmap_rmtcall F -GLIBC_2.0 pmap_set F -GLIBC_2.0 pmap_unset F -GLIBC_2.0 poll F -GLIBC_2.0 popen F -GLIBC_2.0 prctl F -GLIBC_2.0 printf F -GLIBC_2.0 profil F -GLIBC_2.0 program_invocation_name D 0x4 -GLIBC_2.0 program_invocation_short_name D 0x4 -GLIBC_2.0 pselect F -GLIBC_2.0 psignal F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 ptrace F -GLIBC_2.0 putc F -GLIBC_2.0 putc_unlocked F -GLIBC_2.0 putchar F -GLIBC_2.0 putchar_unlocked F -GLIBC_2.0 putenv F -GLIBC_2.0 putpwent F -GLIBC_2.0 puts F -GLIBC_2.0 putspent F -GLIBC_2.0 pututline F -GLIBC_2.0 putw F -GLIBC_2.0 pvalloc F -GLIBC_2.0 qecvt F -GLIBC_2.0 qecvt_r F -GLIBC_2.0 qfcvt F -GLIBC_2.0 qfcvt_r F -GLIBC_2.0 qgcvt F -GLIBC_2.0 qsort F -GLIBC_2.0 query_module F -GLIBC_2.0 quotactl F -GLIBC_2.0 raise F -GLIBC_2.0 rand F -GLIBC_2.0 rand_r F -GLIBC_2.0 random F -GLIBC_2.0 random_r F -GLIBC_2.0 rcmd F -GLIBC_2.0 re_comp F -GLIBC_2.0 re_compile_fastmap F -GLIBC_2.0 re_compile_pattern F -GLIBC_2.0 re_exec F -GLIBC_2.0 re_match F -GLIBC_2.0 re_match_2 F -GLIBC_2.0 re_max_failures D 0x4 -GLIBC_2.0 re_search F -GLIBC_2.0 re_search_2 F -GLIBC_2.0 re_set_registers F -GLIBC_2.0 re_set_syntax F -GLIBC_2.0 re_syntax_options D 0x4 -GLIBC_2.0 read F -GLIBC_2.0 readdir F -GLIBC_2.0 readdir_r F -GLIBC_2.0 readlink F -GLIBC_2.0 readv F -GLIBC_2.0 realloc F -GLIBC_2.0 realpath F -GLIBC_2.0 reboot F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 regcomp F -GLIBC_2.0 regerror F -GLIBC_2.0 regexec F -GLIBC_2.0 regfree F -GLIBC_2.0 register_printf_function F -GLIBC_2.0 registerrpc F -GLIBC_2.0 remove F -GLIBC_2.0 remque F -GLIBC_2.0 rename F -GLIBC_2.0 res_init F -GLIBC_2.0 revoke F -GLIBC_2.0 rewind F -GLIBC_2.0 rewinddir F -GLIBC_2.0 rexec F -GLIBC_2.0 rexecoptions D 0x4 -GLIBC_2.0 rindex F -GLIBC_2.0 rmdir F -GLIBC_2.0 rpc_createerr D 0x10 -GLIBC_2.0 rpmatch F -GLIBC_2.0 rresvport F -GLIBC_2.0 ruserok F -GLIBC_2.0 ruserpass F -GLIBC_2.0 sbrk F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 scandir F -GLIBC_2.0 scanf F -GLIBC_2.0 sched_get_priority_max F -GLIBC_2.0 sched_get_priority_min F -GLIBC_2.0 sched_getparam F -GLIBC_2.0 sched_getscheduler F -GLIBC_2.0 sched_rr_get_interval F -GLIBC_2.0 sched_setparam F -GLIBC_2.0 sched_setscheduler F -GLIBC_2.0 sched_yield F -GLIBC_2.0 seed48 F -GLIBC_2.0 seed48_r F -GLIBC_2.0 seekdir F -GLIBC_2.0 select F -GLIBC_2.0 semctl F -GLIBC_2.0 semget F -GLIBC_2.0 semop F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 setaliasent F -GLIBC_2.0 setbuf F -GLIBC_2.0 setbuffer F -GLIBC_2.0 setcontext F -GLIBC_2.0 setdomainname F -GLIBC_2.0 setegid F -GLIBC_2.0 setenv F -GLIBC_2.0 seteuid F -GLIBC_2.0 setfsent F -GLIBC_2.0 setfsgid F -GLIBC_2.0 setfsuid F -GLIBC_2.0 setgid F -GLIBC_2.0 setgrent F -GLIBC_2.0 setgroups F -GLIBC_2.0 sethostent F -GLIBC_2.0 sethostid F -GLIBC_2.0 sethostname F -GLIBC_2.0 setitimer F -GLIBC_2.0 setjmp F -GLIBC_2.0 setlinebuf F -GLIBC_2.0 setlocale F -GLIBC_2.0 setlogin F -GLIBC_2.0 setlogmask F -GLIBC_2.0 setmntent F -GLIBC_2.0 setnetent F -GLIBC_2.0 setnetgrent F -GLIBC_2.0 setpgid F -GLIBC_2.0 setpgrp F -GLIBC_2.0 setpriority F -GLIBC_2.0 setprotoent F -GLIBC_2.0 setpwent F -GLIBC_2.0 setregid F -GLIBC_2.0 setresgid F -GLIBC_2.0 setresuid F -GLIBC_2.0 setreuid F -GLIBC_2.0 setrlimit F -GLIBC_2.0 setrpcent F -GLIBC_2.0 setservent F -GLIBC_2.0 setsid F -GLIBC_2.0 setsockopt F -GLIBC_2.0 setspent F -GLIBC_2.0 setstate F -GLIBC_2.0 setstate_r F -GLIBC_2.0 settimeofday F -GLIBC_2.0 setttyent F -GLIBC_2.0 setuid F -GLIBC_2.0 setusershell F -GLIBC_2.0 setutent F -GLIBC_2.0 setvbuf F -GLIBC_2.0 sgetspent F -GLIBC_2.0 sgetspent_r F -GLIBC_2.0 shmat F -GLIBC_2.0 shmctl F -GLIBC_2.0 shmdt F -GLIBC_2.0 shmget F -GLIBC_2.0 shutdown F -GLIBC_2.0 sigaction F -GLIBC_2.0 sigaddset F -GLIBC_2.0 sigaltstack F -GLIBC_2.0 sigandset F -GLIBC_2.0 sigblock F -GLIBC_2.0 sigdelset F -GLIBC_2.0 sigemptyset F -GLIBC_2.0 sigfillset F -GLIBC_2.0 siggetmask F -GLIBC_2.0 siginterrupt F -GLIBC_2.0 sigisemptyset F -GLIBC_2.0 sigismember F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 signal F -GLIBC_2.0 sigorset F -GLIBC_2.0 sigpause F -GLIBC_2.0 sigpending F -GLIBC_2.0 sigprocmask F -GLIBC_2.0 sigreturn F -GLIBC_2.0 sigsetmask F -GLIBC_2.0 sigstack F -GLIBC_2.0 sigsuspend F -GLIBC_2.0 sigvec F -GLIBC_2.0 sigwait F -GLIBC_2.0 sleep F -GLIBC_2.0 snprintf F -GLIBC_2.0 socket F -GLIBC_2.0 socketpair F -GLIBC_2.0 sprintf F -GLIBC_2.0 srand F -GLIBC_2.0 srand48 F -GLIBC_2.0 srand48_r F -GLIBC_2.0 srandom F -GLIBC_2.0 srandom_r F -GLIBC_2.0 sscanf F -GLIBC_2.0 ssignal F -GLIBC_2.0 sstk F -GLIBC_2.0 statfs F -GLIBC_2.0 stderr D 0x4 -GLIBC_2.0 stdin D 0x4 -GLIBC_2.0 stdout D 0x4 -GLIBC_2.0 step F -GLIBC_2.0 stime F -GLIBC_2.0 stpcpy F -GLIBC_2.0 stpncpy F -GLIBC_2.0 strcasecmp F -GLIBC_2.0 strcat F -GLIBC_2.0 strchr F -GLIBC_2.0 strcmp F -GLIBC_2.0 strcoll F -GLIBC_2.0 strcpy F -GLIBC_2.0 strcspn F -GLIBC_2.0 strdup F -GLIBC_2.0 strerror F -GLIBC_2.0 strerror_r F -GLIBC_2.0 strfmon F -GLIBC_2.0 strfry F -GLIBC_2.0 strftime F -GLIBC_2.0 strlen F -GLIBC_2.0 strncasecmp F -GLIBC_2.0 strncat F -GLIBC_2.0 strncmp F -GLIBC_2.0 strncpy F -GLIBC_2.0 strndup F -GLIBC_2.0 strnlen F -GLIBC_2.0 strpbrk F -GLIBC_2.0 strptime F -GLIBC_2.0 strrchr F -GLIBC_2.0 strsep F -GLIBC_2.0 strsignal F -GLIBC_2.0 strspn F -GLIBC_2.0 strstr F -GLIBC_2.0 strtod F -GLIBC_2.0 strtof F -GLIBC_2.0 strtok F -GLIBC_2.0 strtok_r F -GLIBC_2.0 strtol F -GLIBC_2.0 strtold F -GLIBC_2.0 strtoll F -GLIBC_2.0 strtoq F -GLIBC_2.0 strtoul F -GLIBC_2.0 strtoull F -GLIBC_2.0 strtouq F -GLIBC_2.0 strxfrm F -GLIBC_2.0 stty F -GLIBC_2.0 svc_exit F -GLIBC_2.0 svc_fdset D 0x80 -GLIBC_2.0 svc_getreq F -GLIBC_2.0 svc_getreqset F -GLIBC_2.0 svc_register F -GLIBC_2.0 svc_run F -GLIBC_2.0 svc_sendreply F -GLIBC_2.0 svc_unregister F -GLIBC_2.0 svcauthdes_stats D 0xc -GLIBC_2.0 svcerr_auth F -GLIBC_2.0 svcerr_decode F -GLIBC_2.0 svcerr_noproc F -GLIBC_2.0 svcerr_noprog F -GLIBC_2.0 svcerr_progvers F -GLIBC_2.0 svcerr_systemerr F -GLIBC_2.0 svcerr_weakauth F -GLIBC_2.0 svcfd_create F -GLIBC_2.0 svcraw_create F -GLIBC_2.0 svctcp_create F -GLIBC_2.0 svcudp_bufcreate F -GLIBC_2.0 svcudp_create F -GLIBC_2.0 svcudp_enablecache F -GLIBC_2.0 swab F -GLIBC_2.0 swapoff F -GLIBC_2.0 swapon F -GLIBC_2.0 symlink F -GLIBC_2.0 sync F -GLIBC_2.0 sys_errlist D 0x1ec -GLIBC_2.0 sys_nerr D 0x4 -GLIBC_2.0 sys_sigabbrev D 0x80 -GLIBC_2.0 sys_siglist D 0x80 -GLIBC_2.0 syscall F -GLIBC_2.0 sysconf F -GLIBC_2.0 sysctl F -GLIBC_2.0 sysinfo F -GLIBC_2.0 syslog F -GLIBC_2.0 sysmips F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 tcflow F -GLIBC_2.0 tcflush F -GLIBC_2.0 tcgetattr F -GLIBC_2.0 tcgetpgrp F -GLIBC_2.0 tcsendbreak F -GLIBC_2.0 tcsetattr F -GLIBC_2.0 tcsetpgrp F -GLIBC_2.0 tdelete F -GLIBC_2.0 telldir F -GLIBC_2.0 tempnam F -GLIBC_2.0 textdomain F -GLIBC_2.0 tfind F -GLIBC_2.0 time F -GLIBC_2.0 timegm F -GLIBC_2.0 timelocal F -GLIBC_2.0 times F -GLIBC_2.0 timezone D 0x4 -GLIBC_2.0 tmpfile F -GLIBC_2.0 tmpnam F -GLIBC_2.0 tmpnam_r F -GLIBC_2.0 toascii F -GLIBC_2.0 tolower F -GLIBC_2.0 toupper F -GLIBC_2.0 towctrans F -GLIBC_2.0 towlower F -GLIBC_2.0 towupper F -GLIBC_2.0 tr_break F -GLIBC_2.0 truncate F -GLIBC_2.0 tsearch F -GLIBC_2.0 ttyname F -GLIBC_2.0 ttyname_r F -GLIBC_2.0 ttyslot F -GLIBC_2.0 twalk F -GLIBC_2.0 tzname D 0x8 -GLIBC_2.0 tzset F -GLIBC_2.0 ualarm F -GLIBC_2.0 ulckpwdf F -GLIBC_2.0 ulimit F -GLIBC_2.0 umask F -GLIBC_2.0 umount F -GLIBC_2.0 uname F -GLIBC_2.0 ungetc F -GLIBC_2.0 unlink F -GLIBC_2.0 unsetenv F -GLIBC_2.0 updwtmp F -GLIBC_2.0 uselib F -GLIBC_2.0 usleep F -GLIBC_2.0 ustat F -GLIBC_2.0 utime F -GLIBC_2.0 utimes F -GLIBC_2.0 utmpname F -GLIBC_2.0 valloc F -GLIBC_2.0 vasprintf F -GLIBC_2.0 vdprintf F -GLIBC_2.0 verr F -GLIBC_2.0 verrx F -GLIBC_2.0 vfork F -GLIBC_2.0 vfprintf F -GLIBC_2.0 vfscanf F -GLIBC_2.0 vhangup F -GLIBC_2.0 vlimit F -GLIBC_2.0 vprintf F -GLIBC_2.0 vscanf F -GLIBC_2.0 vsnprintf F -GLIBC_2.0 vsprintf F -GLIBC_2.0 vsscanf F -GLIBC_2.0 vsyslog F -GLIBC_2.0 vtimes F -GLIBC_2.0 vwarn F -GLIBC_2.0 vwarnx F -GLIBC_2.0 wait F -GLIBC_2.0 wait3 F -GLIBC_2.0 wait4 F -GLIBC_2.0 waitpid F -GLIBC_2.0 warn F -GLIBC_2.0 warnx F -GLIBC_2.0 wcpcpy F -GLIBC_2.0 wcpncpy F -GLIBC_2.0 wcrtomb F -GLIBC_2.0 wcscat F -GLIBC_2.0 wcschr F -GLIBC_2.0 wcscmp F -GLIBC_2.0 wcscoll F -GLIBC_2.0 wcscpy F -GLIBC_2.0 wcscspn F -GLIBC_2.0 wcsdup F -GLIBC_2.0 wcslen F -GLIBC_2.0 wcsncat F -GLIBC_2.0 wcsncmp F -GLIBC_2.0 wcsncpy F -GLIBC_2.0 wcsnrtombs F -GLIBC_2.0 wcspbrk F -GLIBC_2.0 wcsrchr F -GLIBC_2.0 wcsrtombs F -GLIBC_2.0 wcsspn F -GLIBC_2.0 wcsstr F -GLIBC_2.0 wcstod F -GLIBC_2.0 wcstof F -GLIBC_2.0 wcstok F -GLIBC_2.0 wcstol F -GLIBC_2.0 wcstold F -GLIBC_2.0 wcstombs F -GLIBC_2.0 wcstoq F -GLIBC_2.0 wcstoul F -GLIBC_2.0 wcstouq F -GLIBC_2.0 wcswidth F -GLIBC_2.0 wcsxfrm F -GLIBC_2.0 wctob F -GLIBC_2.0 wctomb F -GLIBC_2.0 wctrans F -GLIBC_2.0 wctype F -GLIBC_2.0 wcwidth F -GLIBC_2.0 wmemchr F -GLIBC_2.0 wmemcmp F -GLIBC_2.0 wmemcpy F -GLIBC_2.0 wmemmove F -GLIBC_2.0 wmemset F -GLIBC_2.0 write F -GLIBC_2.0 writev F -GLIBC_2.0 xdr_accepted_reply F -GLIBC_2.0 xdr_array F -GLIBC_2.0 xdr_authunix_parms F -GLIBC_2.0 xdr_bool F -GLIBC_2.0 xdr_bytes F -GLIBC_2.0 xdr_callhdr F -GLIBC_2.0 xdr_callmsg F -GLIBC_2.0 xdr_char F -GLIBC_2.0 xdr_cryptkeyarg F -GLIBC_2.0 xdr_cryptkeyarg2 F -GLIBC_2.0 xdr_cryptkeyres F -GLIBC_2.0 xdr_des_block F -GLIBC_2.0 xdr_double F -GLIBC_2.0 xdr_enum F -GLIBC_2.0 xdr_float F -GLIBC_2.0 xdr_free F -GLIBC_2.0 xdr_int F -GLIBC_2.0 xdr_key_netstarg F -GLIBC_2.0 xdr_key_netstres F -GLIBC_2.0 xdr_keybuf F -GLIBC_2.0 xdr_keystatus F -GLIBC_2.0 xdr_long F -GLIBC_2.0 xdr_netobj F -GLIBC_2.0 xdr_opaque F -GLIBC_2.0 xdr_opaque_auth F -GLIBC_2.0 xdr_pmap F -GLIBC_2.0 xdr_pmaplist F -GLIBC_2.0 xdr_pointer F -GLIBC_2.0 xdr_reference F -GLIBC_2.0 xdr_rejected_reply F -GLIBC_2.0 xdr_replymsg F -GLIBC_2.0 xdr_rmtcall_args F -GLIBC_2.0 xdr_rmtcallres F -GLIBC_2.0 xdr_short F -GLIBC_2.0 xdr_string F -GLIBC_2.0 xdr_u_char F -GLIBC_2.0 xdr_u_int F -GLIBC_2.0 xdr_u_long F -GLIBC_2.0 xdr_u_short F -GLIBC_2.0 xdr_union F -GLIBC_2.0 xdr_vector F -GLIBC_2.0 xdr_void F -GLIBC_2.0 xdr_wrapstring F -GLIBC_2.0 xdrmem_create F -GLIBC_2.0 xdrrec_create F -GLIBC_2.0 xdrrec_endofrecord F -GLIBC_2.0 xdrrec_eof F -GLIBC_2.0 xdrrec_skiprecord F -GLIBC_2.0 xdrstdio_create F -GLIBC_2.0 xencrypt F -GLIBC_2.0 xprt_register F -GLIBC_2.0 xprt_unregister F -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 fallocate64 F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.19 GLIBC_2.19 A -GLIBC_2.19 getrlimit64 F -GLIBC_2.19 setrlimit64 F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _Exit F -GLIBC_2.2 _IO_2_1_stderr_ D 0xa0 -GLIBC_2.2 _IO_2_1_stdin_ D 0xa0 -GLIBC_2.2 _IO_2_1_stdout_ D 0xa0 -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_do_write F -GLIBC_2.2 _IO_fclose F -GLIBC_2.2 _IO_fdopen F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_file_attach F -GLIBC_2.2 _IO_file_close_it F -GLIBC_2.2 _IO_file_finish F -GLIBC_2.2 _IO_file_fopen F -GLIBC_2.2 _IO_file_init F -GLIBC_2.2 _IO_file_overflow F -GLIBC_2.2 _IO_file_seekoff F -GLIBC_2.2 _IO_file_setbuf F -GLIBC_2.2 _IO_file_sync F -GLIBC_2.2 _IO_file_underflow F -GLIBC_2.2 _IO_file_write F -GLIBC_2.2 _IO_file_xsputn F -GLIBC_2.2 _IO_fopen F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_getline_info F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_popen F -GLIBC_2.2 _IO_proc_close F -GLIBC_2.2 _IO_proc_open F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0x54 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 __asprintf F -GLIBC_2.2 __assert F -GLIBC_2.2 __backtrace F -GLIBC_2.2 __backtrace_symbols F -GLIBC_2.2 __backtrace_symbols_fd F -GLIBC_2.2 __ctype32_tolower D 0x4 -GLIBC_2.2 __ctype32_toupper D 0x4 -GLIBC_2.2 __cxa_atexit F -GLIBC_2.2 __cxa_finalize F -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __duplocale F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpurge F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __freelocale F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __isalnum_l F -GLIBC_2.2 __isalpha_l F -GLIBC_2.2 __isascii_l F -GLIBC_2.2 __isblank_l F -GLIBC_2.2 __iscntrl_l F -GLIBC_2.2 __isdigit_l F -GLIBC_2.2 __isgraph_l F -GLIBC_2.2 __islower_l F -GLIBC_2.2 __isprint_l F -GLIBC_2.2 __ispunct_l F -GLIBC_2.2 __isspace_l F -GLIBC_2.2 __isupper_l F -GLIBC_2.2 __iswalnum_l F -GLIBC_2.2 __iswalpha_l F -GLIBC_2.2 __iswblank_l F -GLIBC_2.2 __iswcntrl_l F -GLIBC_2.2 __iswctype_l F -GLIBC_2.2 __iswdigit_l F -GLIBC_2.2 __iswgraph_l F -GLIBC_2.2 __iswlower_l F -GLIBC_2.2 __iswprint_l F -GLIBC_2.2 __iswpunct_l F -GLIBC_2.2 __iswspace_l F -GLIBC_2.2 __iswupper_l F -GLIBC_2.2 __iswxdigit_l F -GLIBC_2.2 __isxdigit_l F -GLIBC_2.2 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.2 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.2 __key_gendes_LOCAL D 0x4 -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __libc_freeres F -GLIBC_2.2 __libc_sa_len F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __mempcpy_small F -GLIBC_2.2 __newlocale F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __open64 F -GLIBC_2.2 __poll F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __rawmemchr F -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_state F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 __signbitl F -GLIBC_2.2 __sigsuspend F -GLIBC_2.2 __statfs F -GLIBC_2.2 __stpcpy_small F -GLIBC_2.2 __strcasecmp_l F -GLIBC_2.2 __strcasestr F -GLIBC_2.2 __strcoll_l F -GLIBC_2.2 __strcpy_small F -GLIBC_2.2 __strcspn_c1 F -GLIBC_2.2 __strcspn_c2 F -GLIBC_2.2 __strcspn_c3 F -GLIBC_2.2 __strfmon_l F -GLIBC_2.2 __strncasecmp_l F -GLIBC_2.2 __strndup F -GLIBC_2.2 __strpbrk_c2 F -GLIBC_2.2 __strpbrk_c3 F -GLIBC_2.2 __strsep_1c F -GLIBC_2.2 __strsep_2c F -GLIBC_2.2 __strsep_3c F -GLIBC_2.2 __strsep_g F -GLIBC_2.2 __strspn_c1 F -GLIBC_2.2 __strspn_c2 F -GLIBC_2.2 __strspn_c3 F -GLIBC_2.2 __strtod_l F -GLIBC_2.2 __strtof_l F -GLIBC_2.2 __strtok_r_1c F -GLIBC_2.2 __strtol_l F -GLIBC_2.2 __strtold_l F -GLIBC_2.2 __strtoll_l F -GLIBC_2.2 __strtoul_l F -GLIBC_2.2 __strtoull_l F -GLIBC_2.2 __strverscmp F -GLIBC_2.2 __strxfrm_l F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __toascii_l F -GLIBC_2.2 __tolower_l F -GLIBC_2.2 __toupper_l F -GLIBC_2.2 __towctrans F -GLIBC_2.2 __towctrans_l F -GLIBC_2.2 __towlower_l F -GLIBC_2.2 __towupper_l F -GLIBC_2.2 __vfork F -GLIBC_2.2 __wcscasecmp_l F -GLIBC_2.2 __wcscoll_l F -GLIBC_2.2 __wcsncasecmp_l F -GLIBC_2.2 __wcstod_l F -GLIBC_2.2 __wcstof_l F -GLIBC_2.2 __wcstol_l F -GLIBC_2.2 __wcstold_l F -GLIBC_2.2 __wcstoll_l F -GLIBC_2.2 __wcstoul_l F -GLIBC_2.2 __wcstoull_l F -GLIBC_2.2 __wcsxfrm_l F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __wctype_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _authenticate F -GLIBC_2.2 _dl_mcount_wrapper F -GLIBC_2.2 _dl_mcount_wrapper_check F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _res_hconf D 0x30 -GLIBC_2.2 _sys_errlist D 0x11b8 -GLIBC_2.2 _sys_nerr D 0x4 -GLIBC_2.2 _sys_siglist D 0x100 -GLIBC_2.2 _test_and_set F -GLIBC_2.2 addseverity F -GLIBC_2.2 alphasort64 F -GLIBC_2.2 argp_err_exit_status D 0x4 -GLIBC_2.2 argp_error F -GLIBC_2.2 argp_failure F -GLIBC_2.2 argp_help F -GLIBC_2.2 argp_parse F -GLIBC_2.2 argp_program_bug_address D 0x4 -GLIBC_2.2 argp_program_version D 0x4 -GLIBC_2.2 argp_program_version_hook D 0x4 -GLIBC_2.2 argp_state_help F -GLIBC_2.2 argp_usage F -GLIBC_2.2 authdes_create F -GLIBC_2.2 authdes_getucred F -GLIBC_2.2 authdes_pk_create F -GLIBC_2.2 backtrace F -GLIBC_2.2 backtrace_symbols F -GLIBC_2.2 backtrace_symbols_fd F -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 capget F -GLIBC_2.2 capset F -GLIBC_2.2 cbc_crypt F -GLIBC_2.2 clntunix_create F -GLIBC_2.2 creat64 F -GLIBC_2.2 dcngettext F -GLIBC_2.2 des_setparity F -GLIBC_2.2 dngettext F -GLIBC_2.2 ecb_crypt F -GLIBC_2.2 endutxent F -GLIBC_2.2 fattach F -GLIBC_2.2 fclose F -GLIBC_2.2 fdetach F -GLIBC_2.2 fdopen F -GLIBC_2.2 ffsl F -GLIBC_2.2 ffsll F -GLIBC_2.2 fgetc_unlocked F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgets_unlocked F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fmtmsg F -GLIBC_2.2 fopen F -GLIBC_2.2 fopen64 F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fputs_unlocked F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fread_unlocked F -GLIBC_2.2 freopen64 F -GLIBC_2.2 fseeko F -GLIBC_2.2 fseeko64 F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fstatfs64 F -GLIBC_2.2 fstatvfs F -GLIBC_2.2 fstatvfs64 F -GLIBC_2.2 ftello F -GLIBC_2.2 ftello64 F -GLIBC_2.2 ftruncate64 F -GLIBC_2.2 ftw64 F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwrite_unlocked F -GLIBC_2.2 fwscanf F -GLIBC_2.2 gai_strerror F -GLIBC_2.2 getaliasbyname_r F -GLIBC_2.2 getaliasent_r F -GLIBC_2.2 getcontext F -GLIBC_2.2 getdate F -GLIBC_2.2 getdate_err D 0x4 -GLIBC_2.2 getdate_r F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getgrent_r F -GLIBC_2.2 getgrgid_r F -GLIBC_2.2 getgrnam_r F -GLIBC_2.2 gethostbyaddr_r F -GLIBC_2.2 gethostbyname2_r F -GLIBC_2.2 gethostbyname_r F -GLIBC_2.2 gethostent_r F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getmsg F -GLIBC_2.2 getnameinfo F -GLIBC_2.2 getnetbyaddr_r F -GLIBC_2.2 getnetbyname_r F -GLIBC_2.2 getnetent_r F -GLIBC_2.2 getnetname F -GLIBC_2.2 getpmsg F -GLIBC_2.2 getprotobyname_r F -GLIBC_2.2 getprotobynumber_r F -GLIBC_2.2 getprotoent_r F -GLIBC_2.2 getpt F -GLIBC_2.2 getpwent_r F -GLIBC_2.2 getpwnam_r F -GLIBC_2.2 getpwuid_r F -GLIBC_2.2 getrlimit64 F -GLIBC_2.2 getrpcbyname_r F -GLIBC_2.2 getrpcbynumber_r F -GLIBC_2.2 getrpcent_r F -GLIBC_2.2 getservbyname_r F -GLIBC_2.2 getservbyport_r F -GLIBC_2.2 getservent_r F -GLIBC_2.2 getspent_r F -GLIBC_2.2 getspnam_r F -GLIBC_2.2 getutmp F -GLIBC_2.2 getutmpx F -GLIBC_2.2 getutxent F -GLIBC_2.2 getutxid F -GLIBC_2.2 getutxline F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 glob64 F -GLIBC_2.2 globfree64 F -GLIBC_2.2 gnu_get_libc_release F -GLIBC_2.2 gnu_get_libc_version F -GLIBC_2.2 grantpt F -GLIBC_2.2 host2netname F -GLIBC_2.2 iconv F -GLIBC_2.2 iconv_close F -GLIBC_2.2 iconv_open F -GLIBC_2.2 if_freenameindex F -GLIBC_2.2 if_indextoname F -GLIBC_2.2 if_nameindex F -GLIBC_2.2 if_nametoindex F -GLIBC_2.2 imaxabs F -GLIBC_2.2 imaxdiv F -GLIBC_2.2 in6addr_any D 0x10 -GLIBC_2.2 in6addr_loopback D 0x10 -GLIBC_2.2 iruserok_af F -GLIBC_2.2 isastream F -GLIBC_2.2 iswblank F -GLIBC_2.2 key_decryptsession F -GLIBC_2.2 key_decryptsession_pk F -GLIBC_2.2 key_encryptsession F -GLIBC_2.2 key_encryptsession_pk F -GLIBC_2.2 key_gendes F -GLIBC_2.2 key_get_conv F -GLIBC_2.2 key_secretkey_is_set F -GLIBC_2.2 key_setnet F -GLIBC_2.2 key_setsecret F -GLIBC_2.2 localeconv F -GLIBC_2.2 lockf64 F -GLIBC_2.2 lseek64 F -GLIBC_2.2 makecontext F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 mempcpy F -GLIBC_2.2 memrchr F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 mmap64 F -GLIBC_2.2 moncontrol F -GLIBC_2.2 netname2host F -GLIBC_2.2 netname2user F -GLIBC_2.2 nftw F -GLIBC_2.2 nftw64 F -GLIBC_2.2 ngettext F -GLIBC_2.2 ntp_adjtime F -GLIBC_2.2 ntp_gettime F -GLIBC_2.2 open64 F -GLIBC_2.2 passwd2des F -GLIBC_2.2 pclose F -GLIBC_2.2 popen F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 printf_size F -GLIBC_2.2 printf_size_info F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 ptsname F -GLIBC_2.2 ptsname_r F -GLIBC_2.2 putgrent F -GLIBC_2.2 putmsg F -GLIBC_2.2 putpmsg F -GLIBC_2.2 pututxline F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 rawmemchr F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 rtime F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 scandir64 F -GLIBC_2.2 sendfile F -GLIBC_2.2 setrlimit64 F -GLIBC_2.2 setutxent F -GLIBC_2.2 sighold F -GLIBC_2.2 sigignore F -GLIBC_2.2 sigqueue F -GLIBC_2.2 sigrelse F -GLIBC_2.2 sigset F -GLIBC_2.2 sigtimedwait F -GLIBC_2.2 sigwaitinfo F -GLIBC_2.2 statfs64 F -GLIBC_2.2 statvfs F -GLIBC_2.2 statvfs64 F -GLIBC_2.2 strcasestr F -GLIBC_2.2 strchrnul F -GLIBC_2.2 strtoimax F -GLIBC_2.2 strtoumax F -GLIBC_2.2 strverscmp F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x4 -GLIBC_2.2 svcunix_create F -GLIBC_2.2 svcunixfd_create F -GLIBC_2.2 swapcontext F -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 sys_errlist D 0x11b8 -GLIBC_2.2 sys_nerr D 0x4 -GLIBC_2.2 sys_sigabbrev D 0x100 -GLIBC_2.2 sys_siglist D 0x100 -GLIBC_2.2 sysv_signal F -GLIBC_2.2 tcgetsid F -GLIBC_2.2 tdestroy F -GLIBC_2.2 tmpfile F -GLIBC_2.2 tmpfile64 F -GLIBC_2.2 truncate64 F -GLIBC_2.2 umount2 F -GLIBC_2.2 ungetwc F -GLIBC_2.2 unlockpt F -GLIBC_2.2 updwtmpx F -GLIBC_2.2 user2netname F -GLIBC_2.2 utmpxname F -GLIBC_2.2 versionsort F -GLIBC_2.2 versionsort64 F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 waitid F -GLIBC_2.2 wcscasecmp F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wcsncasecmp F -GLIBC_2.2 wcsnlen F -GLIBC_2.2 wcstoimax F -GLIBC_2.2 wcstoll F -GLIBC_2.2 wcstoull F -GLIBC_2.2 wcstoumax F -GLIBC_2.2 wcswcs F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wordexp F -GLIBC_2.2 wordfree F -GLIBC_2.2 wprintf F -GLIBC_2.2 wscanf F -GLIBC_2.2 xdecrypt F -GLIBC_2.2 xdr_authdes_cred F -GLIBC_2.2 xdr_authdes_verf F -GLIBC_2.2 xdr_getcredres F -GLIBC_2.2 xdr_hyper F -GLIBC_2.2 xdr_int16_t F -GLIBC_2.2 xdr_int32_t F -GLIBC_2.2 xdr_int64_t F -GLIBC_2.2 xdr_int8_t F -GLIBC_2.2 xdr_longlong_t F -GLIBC_2.2 xdr_netnamestr F -GLIBC_2.2 xdr_sizeof F -GLIBC_2.2 xdr_u_hyper F -GLIBC_2.2 xdr_u_longlong_t F -GLIBC_2.2 xdr_uint16_t F -GLIBC_2.2 xdr_uint32_t F -GLIBC_2.2 xdr_uint64_t F -GLIBC_2.2 xdr_uint8_t F -GLIBC_2.2 xdr_unixcred F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoll_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strtoull_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x200 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 posix_fadvise64 F -GLIBC_2.3.3 posix_fallocate64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 sys_sigabbrev D 0x200 -GLIBC_2.3.3 sys_siglist D 0x200 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 futimesat F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 symlinkat F -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libresolv.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libresolv.abilist deleted file mode 100644 index 4d50e7c8c6..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libresolv.abilist +++ /dev/null @@ -1,100 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __b64_ntop F -GLIBC_2.0 __b64_pton F -GLIBC_2.0 __dn_comp F -GLIBC_2.0 __dn_count_labels F -GLIBC_2.0 __dn_skipname F -GLIBC_2.0 __fp_nquery F -GLIBC_2.0 __fp_query F -GLIBC_2.0 __fp_resstat F -GLIBC_2.0 __hostalias F -GLIBC_2.0 __loc_aton F -GLIBC_2.0 __loc_ntoa F -GLIBC_2.0 __p_cdname F -GLIBC_2.0 __p_cdnname F -GLIBC_2.0 __p_class F -GLIBC_2.0 __p_class_syms D 0x54 -GLIBC_2.0 __p_fqname F -GLIBC_2.0 __p_fqnname F -GLIBC_2.0 __p_option F -GLIBC_2.0 __p_query F -GLIBC_2.0 __p_secstodate F -GLIBC_2.0 __p_time F -GLIBC_2.0 __p_type F -GLIBC_2.0 __p_type_syms D 0x228 -GLIBC_2.0 __putlong F -GLIBC_2.0 __putshort F -GLIBC_2.0 __res_close F -GLIBC_2.0 __res_dnok F -GLIBC_2.0 __res_hnok F -GLIBC_2.0 __res_isourserver F -GLIBC_2.0 __res_mailok F -GLIBC_2.0 __res_nameinquery F -GLIBC_2.0 __res_ownok F -GLIBC_2.0 __res_queriesmatch F -GLIBC_2.0 __res_send F -GLIBC_2.0 __sym_ntop F -GLIBC_2.0 __sym_ntos F -GLIBC_2.0 __sym_ston F -GLIBC_2.0 _gethtbyaddr F -GLIBC_2.0 _gethtbyname F -GLIBC_2.0 _gethtbyname2 F -GLIBC_2.0 _gethtent F -GLIBC_2.0 _getlong F -GLIBC_2.0 _getshort F -GLIBC_2.0 _res_opcodes D 0x40 -GLIBC_2.0 _sethtent F -GLIBC_2.0 dn_expand F -GLIBC_2.0 inet_net_ntop F -GLIBC_2.0 inet_net_pton F -GLIBC_2.0 inet_neta F -GLIBC_2.0 res_gethostbyaddr F -GLIBC_2.0 res_gethostbyname F -GLIBC_2.0 res_gethostbyname2 F -GLIBC_2.0 res_mkquery F -GLIBC_2.0 res_query F -GLIBC_2.0 res_querydomain F -GLIBC_2.0 res_search F -GLIBC_2.0 res_send_setqhook F -GLIBC_2.0 res_send_setrhook F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __dn_expand F -GLIBC_2.2 __res_hostalias F -GLIBC_2.2 __res_mkquery F -GLIBC_2.2 __res_nmkquery F -GLIBC_2.2 __res_nquery F -GLIBC_2.2 __res_nquerydomain F -GLIBC_2.2 __res_nsearch F -GLIBC_2.2 __res_nsend F -GLIBC_2.2 __res_query F -GLIBC_2.2 __res_querydomain F -GLIBC_2.2 __res_search F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/lockf64.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/lockf64.c deleted file mode 100644 index a88f5a784a..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/lockf64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/lseek.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/lseek.c deleted file mode 100644 index 26d2e11e13..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/lseek.c +++ /dev/null @@ -1,36 +0,0 @@ -/* MIPS n32 lseek implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -off_t -__lseek (int fd, off_t offset, int whence) -{ - off64_t res = __lseek64 (fd, offset, whence); - if (res != (off_t) res) - { - __set_errno (EOVERFLOW); - return (off_t) -1; - } - return (off_t) res; -} -libc_hidden_def (__lseek) -weak_alias (__lseek, lseek) -strong_alias (__lseek, __libc_lseek) diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/mmap_internal.h b/sysdeps/unix/sysv/linux/mips/mips64/n32/mmap_internal.h deleted file mode 100644 index 4b65559ecb..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/mmap_internal.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Common mmap definition for Linux implementation. MIPS n32 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef MMAP_MIPS_N32_INTERNAL_H -#define MMAP_MIPS_N32_INTERNAL_H - -/* To handle negative offsets consistently with other architectures, - the offset must be zero-extended to 64-bit. */ -#define MMAP_ADJUST_OFFSET(offset) (uint64_t) (uint32_t) offset - -#include_next - -#endif diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list b/sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list deleted file mode 100644 index 5f3d04728d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list +++ /dev/null @@ -1,13 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -# C syscall macros cannot be used because this syscall has a 64-bit -# return value. -lseek64 - lseek i:iii __lseek64 __libc_lseek64 lseek64 llseek - -readahead - readahead i:iii __readahead readahead - -prlimit64 EXTRA prlimit64 i:iipp prlimit64 - -fanotify_mark EXTRA fanotify_mark i:iiiis fanotify_mark - -personality EXTRA personality Ei:i __personality personality diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h deleted file mode 100644 index f27778bdf8..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h +++ /dev/null @@ -1,321 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINUX_MIPS_SYSDEP_H -#define _LINUX_MIPS_SYSDEP_H 1 - -/* There is some commonality. */ -#include -#include - -#include - -/* In order to get __set_errno() definition in INLINE_SYSCALL. */ -#ifndef __ASSEMBLER__ -#include -#endif - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -#ifdef __ASSEMBLER__ - -/* We don't want the label for the error handler to be visible in the symbol - table when we define it here. */ -# define SYSCALL_ERROR_LABEL 99b - -#else /* ! __ASSEMBLER__ */ - -/* Convert X to a long long, without losing any bits if it is one - already or warning if it is a 32-bit pointer. */ -#define ARGIFY(X) ((long long) (__typeof__ ((X) - (X))) (X)) - -/* Define a macro which expands into the inline wrapper code for a system - call. */ -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - ({ INTERNAL_SYSCALL_DECL (_sc_err); \ - long result_var = INTERNAL_SYSCALL (name, _sc_err, nr, args); \ - if ( INTERNAL_SYSCALL_ERROR_P (result_var, _sc_err) ) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (result_var, _sc_err)); \ - result_var = -1L; \ - } \ - result_var; }) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) long err __attribute__ ((unused)) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) ((void) (val), (long) (err)) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) ((void) (err), val) - -/* Note that the original Linux syscall restart convention required the - instruction immediately preceding SYSCALL to initialize $v0 with the - syscall number. Then if a restart triggered, $v0 would have been - clobbered by the syscall interrupted, and needed to be reinititalized. - The kernel would decrement the PC by 4 before switching back to the - user mode so that $v0 had been reloaded before SYSCALL was executed - again. This implied the place $v0 was loaded from must have been - preserved across a syscall, e.g. an immediate, static register, stack - slot, etc. - - The convention was relaxed in Linux with a change applied to the kernel - GIT repository as commit 96187fb0bc30cd7919759d371d810e928048249d, that - first appeared in the 2.6.36 release. Since then the kernel has had - code that reloads $v0 upon syscall restart and resumes right at the - SYSCALL instruction, so no special arrangement is needed anymore. - - For backwards compatibility with existing kernel binaries we support - the old convention by choosing the instruction preceding SYSCALL - carefully. This also means we have to force a 32-bit encoding of the - microMIPS MOVE instruction if one is used. */ - -#ifdef __mips_micromips -# define MOVE32 "move32" -#else -# define MOVE32 "move" -#endif - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - internal_syscall##nr ("li\t%0, %2\t\t\t# " #name "\n\t", \ - "IK" (SYS_ify (name)), \ - 0, err, args) - -#undef INTERNAL_SYSCALL_NCS -#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ - internal_syscall##nr (MOVE32 "\t%0, %2\n\t", \ - "r" (__s0), \ - number, err, args) - -#define internal_syscall0(v0_init, input, number, err, dummy...) \ -({ \ - long _sys_result; \ - \ - { \ - register long long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long long __v0 asm ("$2"); \ - register long long __a3 asm ("$7"); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set reorder" \ - : "=r" (__v0), "=r" (__a3) \ - : input \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall1(v0_init, input, number, err, arg1) \ -({ \ - long _sys_result; \ - \ - { \ - register long long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long long __v0 asm ("$2"); \ - register long long __a0 asm ("$4") = ARGIFY (arg1); \ - register long long __a3 asm ("$7"); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set reorder" \ - : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall2(v0_init, input, number, err, arg1, arg2) \ -({ \ - long _sys_result; \ - \ - { \ - register long long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long long __v0 asm ("$2"); \ - register long long __a0 asm ("$4") = ARGIFY (arg1); \ - register long long __a1 asm ("$5") = ARGIFY (arg2); \ - register long long __a3 asm ("$7"); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0), "r" (__a1) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall3(v0_init, input, number, err, \ - arg1, arg2, arg3) \ -({ \ - long _sys_result; \ - \ - { \ - register long long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long long __v0 asm ("$2"); \ - register long long __a0 asm ("$4") = ARGIFY (arg1); \ - register long long __a1 asm ("$5") = ARGIFY (arg2); \ - register long long __a2 asm ("$6") = ARGIFY (arg3); \ - register long long __a3 asm ("$7"); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall4(v0_init, input, number, err, \ - arg1, arg2, arg3, arg4) \ -({ \ - long _sys_result; \ - \ - { \ - register long long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long long __v0 asm ("$2"); \ - register long long __a0 asm ("$4") = ARGIFY (arg1); \ - register long long __a1 asm ("$5") = ARGIFY (arg2); \ - register long long __a2 asm ("$6") = ARGIFY (arg3); \ - register long long __a3 asm ("$7") = ARGIFY (arg4); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "+r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall5(v0_init, input, number, err, \ - arg1, arg2, arg3, arg4, arg5) \ -({ \ - long _sys_result; \ - \ - { \ - register long long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long long __v0 asm ("$2"); \ - register long long __a0 asm ("$4") = ARGIFY (arg1); \ - register long long __a1 asm ("$5") = ARGIFY (arg2); \ - register long long __a2 asm ("$6") = ARGIFY (arg3); \ - register long long __a3 asm ("$7") = ARGIFY (arg4); \ - register long long __a4 asm ("$8") = ARGIFY (arg5); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "+r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall6(v0_init, input, number, err, \ - arg1, arg2, arg3, arg4, arg5, arg6) \ -({ \ - long _sys_result; \ - \ - { \ - register long long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long long __v0 asm ("$2"); \ - register long long __a0 asm ("$4") = ARGIFY (arg1); \ - register long long __a1 asm ("$5") = ARGIFY (arg2); \ - register long long __a2 asm ("$6") = ARGIFY (arg3); \ - register long long __a3 asm ("$7") = ARGIFY (arg4); \ - register long long __a4 asm ("$8") = ARGIFY (arg5); \ - register long long __a5 asm ("$9") = ARGIFY (arg6); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "+r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4), \ - "r" (__a5) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define __SYSCALL_CLOBBERS "$1", "$3", "$10", "$11", "$12", "$13", \ - "$14", "$15", "$24", "$25", "hi", "lo", "memory" - -/* Standard MIPS syscalls have an error flag, and return a positive errno - when the error flag is set. Emulate this behaviour for vsyscalls so that - the INTERNAL_SYSCALL_{ERROR_P,ERRNO} macros work correctly. */ -#define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...) \ - ({ \ - long _ret = funcptr (args); \ - err = ((unsigned long) (_ret) >= (unsigned long) -4095L); \ - if (err) \ - _ret = -_ret; \ - _ret; \ - }) - -/* List of system calls which are supported as vsyscalls. */ -#define HAVE_CLOCK_GETTIME_VSYSCALL 1 -#define HAVE_GETTIMEOFDAY_VSYSCALL 1 - -#endif /* __ASSEMBLER__ */ - -/* Pointer mangling is not yet supported for MIPS. */ -#define PTR_MANGLE(var) (void) (var) -#define PTR_DEMANGLE(var) (void) (var) - -#endif /* linux/mips/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/c++-types.data b/sysdeps/unix/sysv/linux/mips/mips64/n64/c++-types.data deleted file mode 100644 index 23c11dc41b..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:l -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:m -fd_mask:l -fsblkcnt64_t:m -fsblkcnt_t:m -fsfilcnt64_t:m -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:m -ino_t:m -int16_t:s -int32_t:i -int64_t:l -int8_t:a -intptr_t:l -key_t:i -loff_t:l -mode_t:j -nlink_t:m -off64_t:l -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:l -register_t:l -rlim64_t:m -rlim_t:m -sigset_t:10__sigset_t -size_t:m -socklen_t:j -ssize_t:l -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:m -u_int8_t:h -ulong:m -u_long:m -u_quad_t:m -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/fstatfs64.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/fstatfs64.c deleted file mode 100644 index 6e25b021ab..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/fstatfs64.c +++ /dev/null @@ -1 +0,0 @@ -/* Empty. */ diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/fts.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/fts.c deleted file mode 100644 index d0c62e6195..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/fts.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/fts64.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/fts64.c deleted file mode 100644 index 2472f8bf75..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/fts64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/ftw.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/ftw.c deleted file mode 100644 index 46389568b2..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/ftw.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/ftw64.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/ftw64.c deleted file mode 100644 index cb02172b3e..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/ftw64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c deleted file mode 100644 index 33918ea6a5..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c +++ /dev/null @@ -1 +0,0 @@ -/* glob64 is in glob.c */ diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S b/sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S deleted file mode 100644 index ee5d11d240..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#include - -/* Sign-extend the ioctl number, since the kernel wants it as a - sign-extended 32-bit value, but our prototype is that of a long. */ - - .text -ENTRY (__ioctl) - sll a1, a1, 0 - li v0, __NR_ioctl - syscall /* Do the system call. */ - bne a3, zero, L(error) - ret - -L(error): - SETUP_GP64_REG (a0, __ioctl) - PTR_LA t9, __syscall_error - RESTORE_GP64_REG - jr t9 - -PSEUDO_END (__ioctl) - -weak_alias (__ioctl, ioctl) diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist deleted file mode 100644 index f7ba5fd730..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist +++ /dev/null @@ -1,13 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _r_debug D 0x28 -GLIBC_2.0 calloc F -GLIBC_2.0 free F -GLIBC_2.0 malloc F -GLIBC_2.0 realloc F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __libc_stack_end D 0x8 -GLIBC_2.2 _dl_mcount F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __tls_get_addr F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __stack_chk_guard D 0x8 diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist deleted file mode 100644 index e1275dfe28..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist +++ /dev/null @@ -1,2245 +0,0 @@ -GCC_3.0 GCC_3.0 A -GCC_3.0 _Unwind_Find_FDE F -GCC_3.0 __deregister_frame_info_bases F -GCC_3.0 __register_frame_info_bases F -GCC_3.0 __register_frame_info_table_bases F -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_adjust_column F -GLIBC_2.0 _IO_default_doallocate F -GLIBC_2.0 _IO_default_finish F -GLIBC_2.0 _IO_default_pbackfail F -GLIBC_2.0 _IO_default_uflow F -GLIBC_2.0 _IO_default_xsgetn F -GLIBC_2.0 _IO_default_xsputn F -GLIBC_2.0 _IO_do_write F -GLIBC_2.0 _IO_doallocbuf F -GLIBC_2.0 _IO_fclose F -GLIBC_2.0 _IO_fdopen F -GLIBC_2.0 _IO_feof F -GLIBC_2.0 _IO_ferror F -GLIBC_2.0 _IO_fflush F -GLIBC_2.0 _IO_fgetpos F -GLIBC_2.0 _IO_fgets F -GLIBC_2.0 _IO_file_attach F -GLIBC_2.0 _IO_file_close F -GLIBC_2.0 _IO_file_close_it F -GLIBC_2.0 _IO_file_doallocate F -GLIBC_2.0 _IO_file_fopen F -GLIBC_2.0 _IO_file_init F -GLIBC_2.0 _IO_file_jumps D 0xa8 -GLIBC_2.0 _IO_file_open F -GLIBC_2.0 _IO_file_overflow F -GLIBC_2.0 _IO_file_read F -GLIBC_2.0 _IO_file_seek F -GLIBC_2.0 _IO_file_seekoff F -GLIBC_2.0 _IO_file_setbuf F -GLIBC_2.0 _IO_file_stat F -GLIBC_2.0 _IO_file_sync F -GLIBC_2.0 _IO_file_underflow F -GLIBC_2.0 _IO_file_write F -GLIBC_2.0 _IO_file_xsputn F -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_flush_all F -GLIBC_2.0 _IO_flush_all_linebuffered F -GLIBC_2.0 _IO_fopen F -GLIBC_2.0 _IO_fprintf F -GLIBC_2.0 _IO_fputs F -GLIBC_2.0 _IO_fread F -GLIBC_2.0 _IO_free_backup_area F -GLIBC_2.0 _IO_fsetpos F -GLIBC_2.0 _IO_ftell F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 _IO_fwrite F -GLIBC_2.0 _IO_getc F -GLIBC_2.0 _IO_getline F -GLIBC_2.0 _IO_gets F -GLIBC_2.0 _IO_init F -GLIBC_2.0 _IO_init_marker F -GLIBC_2.0 _IO_link_in F -GLIBC_2.0 _IO_list_all D 0x8 -GLIBC_2.0 _IO_marker_delta F -GLIBC_2.0 _IO_marker_difference F -GLIBC_2.0 _IO_padn F -GLIBC_2.0 _IO_peekc_locked F -GLIBC_2.0 _IO_popen F -GLIBC_2.0 _IO_printf F -GLIBC_2.0 _IO_proc_close F -GLIBC_2.0 _IO_proc_open F -GLIBC_2.0 _IO_putc F -GLIBC_2.0 _IO_puts F -GLIBC_2.0 _IO_remove_marker F -GLIBC_2.0 _IO_seekmark F -GLIBC_2.0 _IO_seekoff F -GLIBC_2.0 _IO_seekpos F -GLIBC_2.0 _IO_setb F -GLIBC_2.0 _IO_setbuffer F -GLIBC_2.0 _IO_setvbuf F -GLIBC_2.0 _IO_sgetn F -GLIBC_2.0 _IO_sprintf F -GLIBC_2.0 _IO_sputbackc F -GLIBC_2.0 _IO_sscanf F -GLIBC_2.0 _IO_stderr_ D 0x98 -GLIBC_2.0 _IO_stdin_ D 0x98 -GLIBC_2.0 _IO_stdout_ D 0x98 -GLIBC_2.0 _IO_str_init_readonly F -GLIBC_2.0 _IO_str_init_static F -GLIBC_2.0 _IO_str_overflow F -GLIBC_2.0 _IO_str_pbackfail F -GLIBC_2.0 _IO_str_seekoff F -GLIBC_2.0 _IO_str_underflow F -GLIBC_2.0 _IO_sungetc F -GLIBC_2.0 _IO_switch_to_get_mode F -GLIBC_2.0 _IO_un_link F -GLIBC_2.0 _IO_ungetc F -GLIBC_2.0 _IO_unsave_markers F -GLIBC_2.0 _IO_vfprintf F -GLIBC_2.0 _IO_vfscanf F -GLIBC_2.0 _IO_vsprintf F -GLIBC_2.0 ___brk_addr D 0x8 -GLIBC_2.0 __adjtimex F -GLIBC_2.0 __after_morecore_hook D 0x8 -GLIBC_2.0 __argz_count F -GLIBC_2.0 __argz_next F -GLIBC_2.0 __argz_stringify F -GLIBC_2.0 __assert_fail F -GLIBC_2.0 __assert_perror_fail F -GLIBC_2.0 __bsd_getpgrp F -GLIBC_2.0 __bzero F -GLIBC_2.0 __check_rhosts_file D 0x4 -GLIBC_2.0 __clone F -GLIBC_2.0 __close F -GLIBC_2.0 __cmsg_nxthdr F -GLIBC_2.0 __connect F -GLIBC_2.0 __ctype32_b D 0x8 -GLIBC_2.0 __ctype_b D 0x8 -GLIBC_2.0 __ctype_get_mb_cur_max F -GLIBC_2.0 __ctype_tolower D 0x8 -GLIBC_2.0 __ctype_toupper D 0x8 -GLIBC_2.0 __curbrk D 0x8 -GLIBC_2.0 __daylight D 0x4 -GLIBC_2.0 __dcgettext F -GLIBC_2.0 __default_morecore F -GLIBC_2.0 __deregister_frame F -GLIBC_2.0 __deregister_frame_info F -GLIBC_2.0 __dgettext F -GLIBC_2.0 __dup2 F -GLIBC_2.0 __environ D 0x8 -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __ffs F -GLIBC_2.0 __finite F -GLIBC_2.0 __finitef F -GLIBC_2.0 __finitel F -GLIBC_2.0 __fork F -GLIBC_2.0 __fpu_control D 0x4 -GLIBC_2.0 __frame_state_for F -GLIBC_2.0 __free_hook D 0x8 -GLIBC_2.0 __fxstat F -GLIBC_2.0 __getdelim F -GLIBC_2.0 __getpagesize F -GLIBC_2.0 __getpgid F -GLIBC_2.0 __getpid F -GLIBC_2.0 __gettimeofday F -GLIBC_2.0 __gmtime_r F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __isinf F -GLIBC_2.0 __isinff F -GLIBC_2.0 __isinfl F -GLIBC_2.0 __isnan F -GLIBC_2.0 __isnanf F -GLIBC_2.0 __isnanl F -GLIBC_2.0 __iswctype F -GLIBC_2.0 __ivaliduser F -GLIBC_2.0 __libc_calloc F -GLIBC_2.0 __libc_free F -GLIBC_2.0 __libc_init_first F -GLIBC_2.0 __libc_mallinfo F -GLIBC_2.0 __libc_malloc F -GLIBC_2.0 __libc_mallopt F -GLIBC_2.0 __libc_memalign F -GLIBC_2.0 __libc_pvalloc F -GLIBC_2.0 __libc_realloc F -GLIBC_2.0 __libc_start_main F -GLIBC_2.0 __libc_valloc F -GLIBC_2.0 __lseek F -GLIBC_2.0 __lxstat F -GLIBC_2.0 __malloc_hook D 0x8 -GLIBC_2.0 __malloc_initialize_hook D 0x8 -GLIBC_2.0 __mbrlen F -GLIBC_2.0 __mbrtowc F -GLIBC_2.0 __memalign_hook D 0x8 -GLIBC_2.0 __mempcpy F -GLIBC_2.0 __monstartup F -GLIBC_2.0 __morecore D 0x8 -GLIBC_2.0 __nss_configure_lookup F -GLIBC_2.0 __nss_database_lookup F -GLIBC_2.0 __nss_group_lookup F -GLIBC_2.0 __nss_hosts_lookup F -GLIBC_2.0 __nss_next F -GLIBC_2.0 __nss_passwd_lookup F -GLIBC_2.0 __open F -GLIBC_2.0 __overflow F -GLIBC_2.0 __pipe F -GLIBC_2.0 __printf_fp F -GLIBC_2.0 __profile_frequency F -GLIBC_2.0 __progname D 0x8 -GLIBC_2.0 __progname_full D 0x8 -GLIBC_2.0 __rcmd_errstr D 0x8 -GLIBC_2.0 __read F -GLIBC_2.0 __realloc_hook D 0x8 -GLIBC_2.0 __register_frame F -GLIBC_2.0 __register_frame_info F -GLIBC_2.0 __register_frame_info_table F -GLIBC_2.0 __register_frame_table F -GLIBC_2.0 __res_randomid F -GLIBC_2.0 __sbrk F -GLIBC_2.0 __sched_get_priority_max F -GLIBC_2.0 __sched_get_priority_min F -GLIBC_2.0 __sched_getparam F -GLIBC_2.0 __sched_getscheduler F -GLIBC_2.0 __sched_setscheduler F -GLIBC_2.0 __sched_yield F -GLIBC_2.0 __secure_getenv F -GLIBC_2.0 __select F -GLIBC_2.0 __send F -GLIBC_2.0 __setpgid F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __sigaddset F -GLIBC_2.0 __sigdelset F -GLIBC_2.0 __sigismember F -GLIBC_2.0 __sigpause F -GLIBC_2.0 __sigsetjmp F -GLIBC_2.0 __stpcpy F -GLIBC_2.0 __stpncpy F -GLIBC_2.0 __strcasecmp F -GLIBC_2.0 __strdup F -GLIBC_2.0 __strerror_r F -GLIBC_2.0 __strtod_internal F -GLIBC_2.0 __strtof_internal F -GLIBC_2.0 __strtok_r F -GLIBC_2.0 __strtol_internal F -GLIBC_2.0 __strtold_internal F -GLIBC_2.0 __strtoll_internal F -GLIBC_2.0 __strtoul_internal F -GLIBC_2.0 __strtoull_internal F -GLIBC_2.0 __sysv_signal F -GLIBC_2.0 __timezone D 0x8 -GLIBC_2.0 __tzname D 0x10 -GLIBC_2.0 __uflow F -GLIBC_2.0 __underflow F -GLIBC_2.0 __vfscanf F -GLIBC_2.0 __vsnprintf F -GLIBC_2.0 __vsscanf F -GLIBC_2.0 __wait F -GLIBC_2.0 __waitpid F -GLIBC_2.0 __wcstod_internal F -GLIBC_2.0 __wcstof_internal F -GLIBC_2.0 __wcstol_internal F -GLIBC_2.0 __wcstold_internal F -GLIBC_2.0 __wcstoll_internal F -GLIBC_2.0 __wcstoul_internal F -GLIBC_2.0 __wcstoull_internal F -GLIBC_2.0 __write F -GLIBC_2.0 __xmknod F -GLIBC_2.0 __xpg_basename F -GLIBC_2.0 __xstat F -GLIBC_2.0 _environ D 0x8 -GLIBC_2.0 _exit F -GLIBC_2.0 _flush_cache F -GLIBC_2.0 _libc_intl_domainname D 0x5 -GLIBC_2.0 _longjmp F -GLIBC_2.0 _mcleanup F -GLIBC_2.0 _mcount F -GLIBC_2.0 _nl_default_dirname D 0x12 -GLIBC_2.0 _nl_domain_bindings D 0x8 -GLIBC_2.0 _nl_msg_cat_cntr D 0x4 -GLIBC_2.0 _null_auth D 0x18 -GLIBC_2.0 _obstack D 0x8 -GLIBC_2.0 _obstack_allocated_p F -GLIBC_2.0 _obstack_begin F -GLIBC_2.0 _obstack_begin_1 F -GLIBC_2.0 _obstack_free F -GLIBC_2.0 _obstack_memory_used F -GLIBC_2.0 _obstack_newchunk F -GLIBC_2.0 _res D 0x238 -GLIBC_2.0 _rpc_dtablesize F -GLIBC_2.0 _seterr_reply F -GLIBC_2.0 _setjmp F -GLIBC_2.0 _sys_errlist D 0x3d8 -GLIBC_2.0 _sys_nerr D 0x4 -GLIBC_2.0 _sys_siglist D 0x100 -GLIBC_2.0 _tolower F -GLIBC_2.0 _toupper F -GLIBC_2.0 a64l F -GLIBC_2.0 abort F -GLIBC_2.0 abs F -GLIBC_2.0 accept F -GLIBC_2.0 access F -GLIBC_2.0 acct F -GLIBC_2.0 addmntent F -GLIBC_2.0 adjtime F -GLIBC_2.0 adjtimex F -GLIBC_2.0 advance F -GLIBC_2.0 alarm F -GLIBC_2.0 alphasort F -GLIBC_2.0 argz_add F -GLIBC_2.0 argz_add_sep F -GLIBC_2.0 argz_append F -GLIBC_2.0 argz_count F -GLIBC_2.0 argz_create F -GLIBC_2.0 argz_create_sep F -GLIBC_2.0 argz_delete F -GLIBC_2.0 argz_extract F -GLIBC_2.0 argz_insert F -GLIBC_2.0 argz_next F -GLIBC_2.0 argz_replace F -GLIBC_2.0 argz_stringify F -GLIBC_2.0 asctime F -GLIBC_2.0 asctime_r F -GLIBC_2.0 asprintf F -GLIBC_2.0 atexit F -GLIBC_2.0 atof F -GLIBC_2.0 atoi F -GLIBC_2.0 atol F -GLIBC_2.0 atoll F -GLIBC_2.0 authnone_create F -GLIBC_2.0 authunix_create F -GLIBC_2.0 authunix_create_default F -GLIBC_2.0 basename F -GLIBC_2.0 bcmp F -GLIBC_2.0 bcopy F -GLIBC_2.0 bdflush F -GLIBC_2.0 bind F -GLIBC_2.0 bindresvport F -GLIBC_2.0 bindtextdomain F -GLIBC_2.0 brk F -GLIBC_2.0 bsd_signal F -GLIBC_2.0 bsearch F -GLIBC_2.0 btowc F -GLIBC_2.0 bzero F -GLIBC_2.0 cachectl F -GLIBC_2.0 cacheflush F -GLIBC_2.0 calloc F -GLIBC_2.0 callrpc F -GLIBC_2.0 canonicalize_file_name F -GLIBC_2.0 catclose F -GLIBC_2.0 catgets F -GLIBC_2.0 catopen F -GLIBC_2.0 cfgetispeed F -GLIBC_2.0 cfgetospeed F -GLIBC_2.0 cfmakeraw F -GLIBC_2.0 cfree F -GLIBC_2.0 cfsetispeed F -GLIBC_2.0 cfsetospeed F -GLIBC_2.0 cfsetspeed F -GLIBC_2.0 chdir F -GLIBC_2.0 chflags F -GLIBC_2.0 chmod F -GLIBC_2.0 chown F -GLIBC_2.0 chroot F -GLIBC_2.0 clearenv F -GLIBC_2.0 clearerr F -GLIBC_2.0 clearerr_unlocked F -GLIBC_2.0 clnt_broadcast F -GLIBC_2.0 clnt_create F -GLIBC_2.0 clnt_pcreateerror F -GLIBC_2.0 clnt_perrno F -GLIBC_2.0 clnt_perror F -GLIBC_2.0 clnt_spcreateerror F -GLIBC_2.0 clnt_sperrno F -GLIBC_2.0 clnt_sperror F -GLIBC_2.0 clntraw_create F -GLIBC_2.0 clnttcp_create F -GLIBC_2.0 clntudp_bufcreate F -GLIBC_2.0 clntudp_create F -GLIBC_2.0 clock F -GLIBC_2.0 clone F -GLIBC_2.0 close F -GLIBC_2.0 closedir F -GLIBC_2.0 closelog F -GLIBC_2.0 confstr F -GLIBC_2.0 connect F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 creat F -GLIBC_2.0 create_module F -GLIBC_2.0 ctermid F -GLIBC_2.0 ctime F -GLIBC_2.0 ctime_r F -GLIBC_2.0 cuserid F -GLIBC_2.0 daemon F -GLIBC_2.0 daylight D 0x4 -GLIBC_2.0 dcgettext F -GLIBC_2.0 delete_module F -GLIBC_2.0 dgettext F -GLIBC_2.0 difftime F -GLIBC_2.0 dirfd F -GLIBC_2.0 dirname F -GLIBC_2.0 div F -GLIBC_2.0 dprintf F -GLIBC_2.0 drand48 F -GLIBC_2.0 drand48_r F -GLIBC_2.0 dup F -GLIBC_2.0 dup2 F -GLIBC_2.0 dysize F -GLIBC_2.0 ecvt F -GLIBC_2.0 ecvt_r F -GLIBC_2.0 endaliasent F -GLIBC_2.0 endfsent F -GLIBC_2.0 endgrent F -GLIBC_2.0 endhostent F -GLIBC_2.0 endmntent F -GLIBC_2.0 endnetent F -GLIBC_2.0 endnetgrent F -GLIBC_2.0 endprotoent F -GLIBC_2.0 endpwent F -GLIBC_2.0 endrpcent F -GLIBC_2.0 endservent F -GLIBC_2.0 endspent F -GLIBC_2.0 endttyent F -GLIBC_2.0 endusershell F -GLIBC_2.0 endutent F -GLIBC_2.0 environ D 0x8 -GLIBC_2.0 envz_add F -GLIBC_2.0 envz_entry F -GLIBC_2.0 envz_get F -GLIBC_2.0 envz_merge F -GLIBC_2.0 envz_remove F -GLIBC_2.0 envz_strip F -GLIBC_2.0 erand48 F -GLIBC_2.0 erand48_r F -GLIBC_2.0 err F -GLIBC_2.0 error F -GLIBC_2.0 error_at_line F -GLIBC_2.0 error_message_count D 0x4 -GLIBC_2.0 error_one_per_line D 0x4 -GLIBC_2.0 error_print_progname D 0x8 -GLIBC_2.0 errx F -GLIBC_2.0 ether_aton F -GLIBC_2.0 ether_aton_r F -GLIBC_2.0 ether_hostton F -GLIBC_2.0 ether_line F -GLIBC_2.0 ether_ntoa F -GLIBC_2.0 ether_ntoa_r F -GLIBC_2.0 ether_ntohost F -GLIBC_2.0 euidaccess F -GLIBC_2.0 execl F -GLIBC_2.0 execle F -GLIBC_2.0 execlp F -GLIBC_2.0 execv F -GLIBC_2.0 execve F -GLIBC_2.0 execvp F -GLIBC_2.0 exit F -GLIBC_2.0 fchdir F -GLIBC_2.0 fchflags F -GLIBC_2.0 fchmod F -GLIBC_2.0 fchown F -GLIBC_2.0 fclose F -GLIBC_2.0 fcloseall F -GLIBC_2.0 fcntl F -GLIBC_2.0 fcvt F -GLIBC_2.0 fcvt_r F -GLIBC_2.0 fdatasync F -GLIBC_2.0 fdopen F -GLIBC_2.0 feof F -GLIBC_2.0 feof_unlocked F -GLIBC_2.0 ferror F -GLIBC_2.0 ferror_unlocked F -GLIBC_2.0 fexecve F -GLIBC_2.0 fflush F -GLIBC_2.0 fflush_unlocked F -GLIBC_2.0 ffs F -GLIBC_2.0 fgetc F -GLIBC_2.0 fgetgrent F -GLIBC_2.0 fgetgrent_r F -GLIBC_2.0 fgetpos F -GLIBC_2.0 fgetpwent F -GLIBC_2.0 fgetpwent_r F -GLIBC_2.0 fgets F -GLIBC_2.0 fgetspent F -GLIBC_2.0 fgetspent_r F -GLIBC_2.0 fileno F -GLIBC_2.0 fileno_unlocked F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 flock F -GLIBC_2.0 flockfile F -GLIBC_2.0 fnmatch F -GLIBC_2.0 fopen F -GLIBC_2.0 fopencookie F -GLIBC_2.0 fork F -GLIBC_2.0 fpathconf F -GLIBC_2.0 fprintf F -GLIBC_2.0 fputc F -GLIBC_2.0 fputc_unlocked F -GLIBC_2.0 fputs F -GLIBC_2.0 fread F -GLIBC_2.0 free F -GLIBC_2.0 freeaddrinfo F -GLIBC_2.0 freopen F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 fscanf F -GLIBC_2.0 fseek F -GLIBC_2.0 fsetpos F -GLIBC_2.0 fstatfs F -GLIBC_2.0 fsync F -GLIBC_2.0 ftell F -GLIBC_2.0 ftime F -GLIBC_2.0 ftok F -GLIBC_2.0 ftruncate F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 fts_children F -GLIBC_2.0 fts_close F -GLIBC_2.0 fts_open F -GLIBC_2.0 fts_read F -GLIBC_2.0 fts_set F -GLIBC_2.0 ftw F -GLIBC_2.0 funlockfile F -GLIBC_2.0 fwrite F -GLIBC_2.0 gcvt F -GLIBC_2.0 get_avphys_pages F -GLIBC_2.0 get_current_dir_name F -GLIBC_2.0 get_kernel_syms F -GLIBC_2.0 get_myaddress F -GLIBC_2.0 get_nprocs F -GLIBC_2.0 get_nprocs_conf F -GLIBC_2.0 get_phys_pages F -GLIBC_2.0 getaddrinfo F -GLIBC_2.0 getaliasbyname F -GLIBC_2.0 getaliasbyname_r F -GLIBC_2.0 getaliasent F -GLIBC_2.0 getaliasent_r F -GLIBC_2.0 getc F -GLIBC_2.0 getc_unlocked F -GLIBC_2.0 getchar F -GLIBC_2.0 getchar_unlocked F -GLIBC_2.0 getcwd F -GLIBC_2.0 getdelim F -GLIBC_2.0 getdirentries F -GLIBC_2.0 getdomainname F -GLIBC_2.0 getdtablesize F -GLIBC_2.0 getegid F -GLIBC_2.0 getenv F -GLIBC_2.0 geteuid F -GLIBC_2.0 getfsent F -GLIBC_2.0 getfsfile F -GLIBC_2.0 getfsspec F -GLIBC_2.0 getgid F -GLIBC_2.0 getgrent F -GLIBC_2.0 getgrent_r F -GLIBC_2.0 getgrgid F -GLIBC_2.0 getgrgid_r F -GLIBC_2.0 getgrnam F -GLIBC_2.0 getgrnam_r F -GLIBC_2.0 getgroups F -GLIBC_2.0 gethostbyaddr F -GLIBC_2.0 gethostbyaddr_r F -GLIBC_2.0 gethostbyname F -GLIBC_2.0 gethostbyname2 F -GLIBC_2.0 gethostbyname2_r F -GLIBC_2.0 gethostbyname_r F -GLIBC_2.0 gethostent F -GLIBC_2.0 gethostent_r F -GLIBC_2.0 gethostid F -GLIBC_2.0 gethostname F -GLIBC_2.0 getitimer F -GLIBC_2.0 getline F -GLIBC_2.0 getlogin F -GLIBC_2.0 getlogin_r F -GLIBC_2.0 getmntent F -GLIBC_2.0 getmntent_r F -GLIBC_2.0 getnetbyaddr F -GLIBC_2.0 getnetbyaddr_r F -GLIBC_2.0 getnetbyname F -GLIBC_2.0 getnetbyname_r F -GLIBC_2.0 getnetent F -GLIBC_2.0 getnetent_r F -GLIBC_2.0 getnetgrent F -GLIBC_2.0 getnetgrent_r F -GLIBC_2.0 getopt F -GLIBC_2.0 getopt_long F -GLIBC_2.0 getopt_long_only F -GLIBC_2.0 getpagesize F -GLIBC_2.0 getpass F -GLIBC_2.0 getpeername F -GLIBC_2.0 getpgid F -GLIBC_2.0 getpgrp F -GLIBC_2.0 getpid F -GLIBC_2.0 getppid F -GLIBC_2.0 getpriority F -GLIBC_2.0 getprotobyname F -GLIBC_2.0 getprotobyname_r F -GLIBC_2.0 getprotobynumber F -GLIBC_2.0 getprotobynumber_r F -GLIBC_2.0 getprotoent F -GLIBC_2.0 getprotoent_r F -GLIBC_2.0 getpublickey F -GLIBC_2.0 getpw F -GLIBC_2.0 getpwent F -GLIBC_2.0 getpwent_r F -GLIBC_2.0 getpwnam F -GLIBC_2.0 getpwnam_r F -GLIBC_2.0 getpwuid F -GLIBC_2.0 getpwuid_r F -GLIBC_2.0 getresgid F -GLIBC_2.0 getresuid F -GLIBC_2.0 getrlimit F -GLIBC_2.0 getrpcbyname F -GLIBC_2.0 getrpcbyname_r F -GLIBC_2.0 getrpcbynumber F -GLIBC_2.0 getrpcbynumber_r F -GLIBC_2.0 getrpcent F -GLIBC_2.0 getrpcent_r F -GLIBC_2.0 getrpcport F -GLIBC_2.0 getrusage F -GLIBC_2.0 gets F -GLIBC_2.0 getsecretkey F -GLIBC_2.0 getservbyname F -GLIBC_2.0 getservbyname_r F -GLIBC_2.0 getservbyport F -GLIBC_2.0 getservbyport_r F -GLIBC_2.0 getservent F -GLIBC_2.0 getservent_r F -GLIBC_2.0 getsid F -GLIBC_2.0 getsockname F -GLIBC_2.0 getsockopt F -GLIBC_2.0 getspent F -GLIBC_2.0 getspent_r F -GLIBC_2.0 getspnam F -GLIBC_2.0 getspnam_r F -GLIBC_2.0 getsubopt F -GLIBC_2.0 gettext F -GLIBC_2.0 gettimeofday F -GLIBC_2.0 getttyent F -GLIBC_2.0 getttynam F -GLIBC_2.0 getuid F -GLIBC_2.0 getusershell F -GLIBC_2.0 getutent F -GLIBC_2.0 getutent_r F -GLIBC_2.0 getutid F -GLIBC_2.0 getutid_r F -GLIBC_2.0 getutline F -GLIBC_2.0 getutline_r F -GLIBC_2.0 getw F -GLIBC_2.0 getwd F -GLIBC_2.0 glob F -GLIBC_2.0 glob_pattern_p F -GLIBC_2.0 globfree F -GLIBC_2.0 gmtime F -GLIBC_2.0 gmtime_r F -GLIBC_2.0 group_member F -GLIBC_2.0 gsignal F -GLIBC_2.0 gtty F -GLIBC_2.0 h_errlist D 0x28 -GLIBC_2.0 h_nerr D 0x4 -GLIBC_2.0 hasmntopt F -GLIBC_2.0 hcreate F -GLIBC_2.0 hcreate_r F -GLIBC_2.0 hdestroy F -GLIBC_2.0 hdestroy_r F -GLIBC_2.0 herror F -GLIBC_2.0 hsearch F -GLIBC_2.0 hsearch_r F -GLIBC_2.0 hstrerror F -GLIBC_2.0 htonl F -GLIBC_2.0 htons F -GLIBC_2.0 index F -GLIBC_2.0 inet_addr F -GLIBC_2.0 inet_aton F -GLIBC_2.0 inet_lnaof F -GLIBC_2.0 inet_makeaddr F -GLIBC_2.0 inet_netof F -GLIBC_2.0 inet_network F -GLIBC_2.0 inet_nsap_addr F -GLIBC_2.0 inet_nsap_ntoa F -GLIBC_2.0 inet_ntoa F -GLIBC_2.0 inet_ntop F -GLIBC_2.0 inet_pton F -GLIBC_2.0 init_module F -GLIBC_2.0 initgroups F -GLIBC_2.0 initstate F -GLIBC_2.0 initstate_r F -GLIBC_2.0 innetgr F -GLIBC_2.0 insque F -GLIBC_2.0 ioctl F -GLIBC_2.0 iruserok F -GLIBC_2.0 isalnum F -GLIBC_2.0 isalpha F -GLIBC_2.0 isascii F -GLIBC_2.0 isatty F -GLIBC_2.0 isblank F -GLIBC_2.0 iscntrl F -GLIBC_2.0 isdigit F -GLIBC_2.0 isfdtype F -GLIBC_2.0 isgraph F -GLIBC_2.0 isinf F -GLIBC_2.0 isinff F -GLIBC_2.0 isinfl F -GLIBC_2.0 islower F -GLIBC_2.0 isnan F -GLIBC_2.0 isnanf F -GLIBC_2.0 isnanl F -GLIBC_2.0 isprint F -GLIBC_2.0 ispunct F -GLIBC_2.0 isspace F -GLIBC_2.0 isupper F -GLIBC_2.0 iswalnum F -GLIBC_2.0 iswalpha F -GLIBC_2.0 iswcntrl F -GLIBC_2.0 iswctype F -GLIBC_2.0 iswdigit F -GLIBC_2.0 iswgraph F -GLIBC_2.0 iswlower F -GLIBC_2.0 iswprint F -GLIBC_2.0 iswpunct F -GLIBC_2.0 iswspace F -GLIBC_2.0 iswupper F -GLIBC_2.0 iswxdigit F -GLIBC_2.0 isxdigit F -GLIBC_2.0 jrand48 F -GLIBC_2.0 jrand48_r F -GLIBC_2.0 kill F -GLIBC_2.0 killpg F -GLIBC_2.0 klogctl F -GLIBC_2.0 l64a F -GLIBC_2.0 labs F -GLIBC_2.0 lchown F -GLIBC_2.0 lckpwdf F -GLIBC_2.0 lcong48 F -GLIBC_2.0 lcong48_r F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 ldiv F -GLIBC_2.0 lfind F -GLIBC_2.0 link F -GLIBC_2.0 listen F -GLIBC_2.0 llabs F -GLIBC_2.0 lldiv F -GLIBC_2.0 llseek F -GLIBC_2.0 loc1 D 0x8 -GLIBC_2.0 loc2 D 0x8 -GLIBC_2.0 localeconv F -GLIBC_2.0 localtime F -GLIBC_2.0 localtime_r F -GLIBC_2.0 lockf F -GLIBC_2.0 locs D 0x8 -GLIBC_2.0 longjmp F -GLIBC_2.0 lrand48 F -GLIBC_2.0 lrand48_r F -GLIBC_2.0 lsearch F -GLIBC_2.0 lseek F -GLIBC_2.0 madvise F -GLIBC_2.0 mallinfo F -GLIBC_2.0 malloc F -GLIBC_2.0 malloc_get_state F -GLIBC_2.0 malloc_set_state F -GLIBC_2.0 malloc_stats F -GLIBC_2.0 malloc_trim F -GLIBC_2.0 malloc_usable_size F -GLIBC_2.0 mallopt F -GLIBC_2.0 mallwatch D 0x8 -GLIBC_2.0 mblen F -GLIBC_2.0 mbrlen F -GLIBC_2.0 mbrtowc F -GLIBC_2.0 mbsinit F -GLIBC_2.0 mbsnrtowcs F -GLIBC_2.0 mbsrtowcs F -GLIBC_2.0 mbstowcs F -GLIBC_2.0 mbtowc F -GLIBC_2.0 mcheck F -GLIBC_2.0 memalign F -GLIBC_2.0 memccpy F -GLIBC_2.0 memchr F -GLIBC_2.0 memcmp F -GLIBC_2.0 memcpy F -GLIBC_2.0 memfrob F -GLIBC_2.0 memmem F -GLIBC_2.0 memmove F -GLIBC_2.0 memset F -GLIBC_2.0 mkdir F -GLIBC_2.0 mkfifo F -GLIBC_2.0 mkstemp F -GLIBC_2.0 mktemp F -GLIBC_2.0 mktime F -GLIBC_2.0 mlock F -GLIBC_2.0 mlockall F -GLIBC_2.0 mmap F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 monstartup F -GLIBC_2.0 mount F -GLIBC_2.0 mprobe F -GLIBC_2.0 mprotect F -GLIBC_2.0 mrand48 F -GLIBC_2.0 mrand48_r F -GLIBC_2.0 mremap F -GLIBC_2.0 msgctl F -GLIBC_2.0 msgget F -GLIBC_2.0 msgrcv F -GLIBC_2.0 msgsnd F -GLIBC_2.0 msync F -GLIBC_2.0 mtrace F -GLIBC_2.0 munlock F -GLIBC_2.0 munlockall F -GLIBC_2.0 munmap F -GLIBC_2.0 muntrace F -GLIBC_2.0 nanosleep F -GLIBC_2.0 nfsservctl F -GLIBC_2.0 nice F -GLIBC_2.0 nl_langinfo F -GLIBC_2.0 nrand48 F -GLIBC_2.0 nrand48_r F -GLIBC_2.0 ntohl F -GLIBC_2.0 ntohs F -GLIBC_2.0 obstack_alloc_failed_handler D 0x8 -GLIBC_2.0 obstack_exit_failure D 0x4 -GLIBC_2.0 obstack_free F -GLIBC_2.0 obstack_printf F -GLIBC_2.0 obstack_vprintf F -GLIBC_2.0 on_exit F -GLIBC_2.0 open F -GLIBC_2.0 open_memstream F -GLIBC_2.0 opendir F -GLIBC_2.0 openlog F -GLIBC_2.0 optarg D 0x8 -GLIBC_2.0 opterr D 0x4 -GLIBC_2.0 optind D 0x4 -GLIBC_2.0 optopt D 0x4 -GLIBC_2.0 parse_printf_format F -GLIBC_2.0 pathconf F -GLIBC_2.0 pause F -GLIBC_2.0 pclose F -GLIBC_2.0 perror F -GLIBC_2.0 personality F -GLIBC_2.0 pipe F -GLIBC_2.0 pmap_getmaps F -GLIBC_2.0 pmap_getport F -GLIBC_2.0 pmap_rmtcall F -GLIBC_2.0 pmap_set F -GLIBC_2.0 pmap_unset F -GLIBC_2.0 poll F -GLIBC_2.0 popen F -GLIBC_2.0 prctl F -GLIBC_2.0 printf F -GLIBC_2.0 profil F -GLIBC_2.0 program_invocation_name D 0x8 -GLIBC_2.0 program_invocation_short_name D 0x8 -GLIBC_2.0 pselect F -GLIBC_2.0 psignal F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 ptrace F -GLIBC_2.0 putc F -GLIBC_2.0 putc_unlocked F -GLIBC_2.0 putchar F -GLIBC_2.0 putchar_unlocked F -GLIBC_2.0 putenv F -GLIBC_2.0 putpwent F -GLIBC_2.0 puts F -GLIBC_2.0 putspent F -GLIBC_2.0 pututline F -GLIBC_2.0 putw F -GLIBC_2.0 pvalloc F -GLIBC_2.0 qecvt F -GLIBC_2.0 qecvt_r F -GLIBC_2.0 qfcvt F -GLIBC_2.0 qfcvt_r F -GLIBC_2.0 qgcvt F -GLIBC_2.0 qsort F -GLIBC_2.0 query_module F -GLIBC_2.0 quotactl F -GLIBC_2.0 raise F -GLIBC_2.0 rand F -GLIBC_2.0 rand_r F -GLIBC_2.0 random F -GLIBC_2.0 random_r F -GLIBC_2.0 rcmd F -GLIBC_2.0 re_comp F -GLIBC_2.0 re_compile_fastmap F -GLIBC_2.0 re_compile_pattern F -GLIBC_2.0 re_exec F -GLIBC_2.0 re_match F -GLIBC_2.0 re_match_2 F -GLIBC_2.0 re_max_failures D 0x4 -GLIBC_2.0 re_search F -GLIBC_2.0 re_search_2 F -GLIBC_2.0 re_set_registers F -GLIBC_2.0 re_set_syntax F -GLIBC_2.0 re_syntax_options D 0x8 -GLIBC_2.0 read F -GLIBC_2.0 readdir F -GLIBC_2.0 readdir_r F -GLIBC_2.0 readlink F -GLIBC_2.0 readv F -GLIBC_2.0 realloc F -GLIBC_2.0 realpath F -GLIBC_2.0 reboot F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 regcomp F -GLIBC_2.0 regerror F -GLIBC_2.0 regexec F -GLIBC_2.0 regfree F -GLIBC_2.0 register_printf_function F -GLIBC_2.0 registerrpc F -GLIBC_2.0 remove F -GLIBC_2.0 remque F -GLIBC_2.0 rename F -GLIBC_2.0 res_init F -GLIBC_2.0 revoke F -GLIBC_2.0 rewind F -GLIBC_2.0 rewinddir F -GLIBC_2.0 rexec F -GLIBC_2.0 rexecoptions D 0x4 -GLIBC_2.0 rindex F -GLIBC_2.0 rmdir F -GLIBC_2.0 rpc_createerr D 0x20 -GLIBC_2.0 rpmatch F -GLIBC_2.0 rresvport F -GLIBC_2.0 ruserok F -GLIBC_2.0 ruserpass F -GLIBC_2.0 sbrk F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 scandir F -GLIBC_2.0 scanf F -GLIBC_2.0 sched_get_priority_max F -GLIBC_2.0 sched_get_priority_min F -GLIBC_2.0 sched_getparam F -GLIBC_2.0 sched_getscheduler F -GLIBC_2.0 sched_rr_get_interval F -GLIBC_2.0 sched_setparam F -GLIBC_2.0 sched_setscheduler F -GLIBC_2.0 sched_yield F -GLIBC_2.0 seed48 F -GLIBC_2.0 seed48_r F -GLIBC_2.0 seekdir F -GLIBC_2.0 select F -GLIBC_2.0 semctl F -GLIBC_2.0 semget F -GLIBC_2.0 semop F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 setaliasent F -GLIBC_2.0 setbuf F -GLIBC_2.0 setbuffer F -GLIBC_2.0 setcontext F -GLIBC_2.0 setdomainname F -GLIBC_2.0 setegid F -GLIBC_2.0 setenv F -GLIBC_2.0 seteuid F -GLIBC_2.0 setfsent F -GLIBC_2.0 setfsgid F -GLIBC_2.0 setfsuid F -GLIBC_2.0 setgid F -GLIBC_2.0 setgrent F -GLIBC_2.0 setgroups F -GLIBC_2.0 sethostent F -GLIBC_2.0 sethostid F -GLIBC_2.0 sethostname F -GLIBC_2.0 setitimer F -GLIBC_2.0 setjmp F -GLIBC_2.0 setlinebuf F -GLIBC_2.0 setlocale F -GLIBC_2.0 setlogin F -GLIBC_2.0 setlogmask F -GLIBC_2.0 setmntent F -GLIBC_2.0 setnetent F -GLIBC_2.0 setnetgrent F -GLIBC_2.0 setpgid F -GLIBC_2.0 setpgrp F -GLIBC_2.0 setpriority F -GLIBC_2.0 setprotoent F -GLIBC_2.0 setpwent F -GLIBC_2.0 setregid F -GLIBC_2.0 setresgid F -GLIBC_2.0 setresuid F -GLIBC_2.0 setreuid F -GLIBC_2.0 setrlimit F -GLIBC_2.0 setrpcent F -GLIBC_2.0 setservent F -GLIBC_2.0 setsid F -GLIBC_2.0 setsockopt F -GLIBC_2.0 setspent F -GLIBC_2.0 setstate F -GLIBC_2.0 setstate_r F -GLIBC_2.0 settimeofday F -GLIBC_2.0 setttyent F -GLIBC_2.0 setuid F -GLIBC_2.0 setusershell F -GLIBC_2.0 setutent F -GLIBC_2.0 setvbuf F -GLIBC_2.0 sgetspent F -GLIBC_2.0 sgetspent_r F -GLIBC_2.0 shmat F -GLIBC_2.0 shmctl F -GLIBC_2.0 shmdt F -GLIBC_2.0 shmget F -GLIBC_2.0 shutdown F -GLIBC_2.0 sigaction F -GLIBC_2.0 sigaddset F -GLIBC_2.0 sigaltstack F -GLIBC_2.0 sigandset F -GLIBC_2.0 sigblock F -GLIBC_2.0 sigdelset F -GLIBC_2.0 sigemptyset F -GLIBC_2.0 sigfillset F -GLIBC_2.0 siggetmask F -GLIBC_2.0 siginterrupt F -GLIBC_2.0 sigisemptyset F -GLIBC_2.0 sigismember F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 signal F -GLIBC_2.0 sigorset F -GLIBC_2.0 sigpause F -GLIBC_2.0 sigpending F -GLIBC_2.0 sigprocmask F -GLIBC_2.0 sigreturn F -GLIBC_2.0 sigsetmask F -GLIBC_2.0 sigstack F -GLIBC_2.0 sigsuspend F -GLIBC_2.0 sigvec F -GLIBC_2.0 sigwait F -GLIBC_2.0 sleep F -GLIBC_2.0 snprintf F -GLIBC_2.0 socket F -GLIBC_2.0 socketpair F -GLIBC_2.0 sprintf F -GLIBC_2.0 srand F -GLIBC_2.0 srand48 F -GLIBC_2.0 srand48_r F -GLIBC_2.0 srandom F -GLIBC_2.0 srandom_r F -GLIBC_2.0 sscanf F -GLIBC_2.0 ssignal F -GLIBC_2.0 sstk F -GLIBC_2.0 statfs F -GLIBC_2.0 stderr D 0x8 -GLIBC_2.0 stdin D 0x8 -GLIBC_2.0 stdout D 0x8 -GLIBC_2.0 step F -GLIBC_2.0 stime F -GLIBC_2.0 stpcpy F -GLIBC_2.0 stpncpy F -GLIBC_2.0 strcasecmp F -GLIBC_2.0 strcat F -GLIBC_2.0 strchr F -GLIBC_2.0 strcmp F -GLIBC_2.0 strcoll F -GLIBC_2.0 strcpy F -GLIBC_2.0 strcspn F -GLIBC_2.0 strdup F -GLIBC_2.0 strerror F -GLIBC_2.0 strerror_r F -GLIBC_2.0 strfmon F -GLIBC_2.0 strfry F -GLIBC_2.0 strftime F -GLIBC_2.0 strlen F -GLIBC_2.0 strncasecmp F -GLIBC_2.0 strncat F -GLIBC_2.0 strncmp F -GLIBC_2.0 strncpy F -GLIBC_2.0 strndup F -GLIBC_2.0 strnlen F -GLIBC_2.0 strpbrk F -GLIBC_2.0 strptime F -GLIBC_2.0 strrchr F -GLIBC_2.0 strsep F -GLIBC_2.0 strsignal F -GLIBC_2.0 strspn F -GLIBC_2.0 strstr F -GLIBC_2.0 strtod F -GLIBC_2.0 strtof F -GLIBC_2.0 strtok F -GLIBC_2.0 strtok_r F -GLIBC_2.0 strtol F -GLIBC_2.0 strtold F -GLIBC_2.0 strtoll F -GLIBC_2.0 strtoq F -GLIBC_2.0 strtoul F -GLIBC_2.0 strtoull F -GLIBC_2.0 strtouq F -GLIBC_2.0 strxfrm F -GLIBC_2.0 stty F -GLIBC_2.0 svc_exit F -GLIBC_2.0 svc_fdset D 0x80 -GLIBC_2.0 svc_getreq F -GLIBC_2.0 svc_getreqset F -GLIBC_2.0 svc_register F -GLIBC_2.0 svc_run F -GLIBC_2.0 svc_sendreply F -GLIBC_2.0 svc_unregister F -GLIBC_2.0 svcauthdes_stats D 0x18 -GLIBC_2.0 svcerr_auth F -GLIBC_2.0 svcerr_decode F -GLIBC_2.0 svcerr_noproc F -GLIBC_2.0 svcerr_noprog F -GLIBC_2.0 svcerr_progvers F -GLIBC_2.0 svcerr_systemerr F -GLIBC_2.0 svcerr_weakauth F -GLIBC_2.0 svcfd_create F -GLIBC_2.0 svcraw_create F -GLIBC_2.0 svctcp_create F -GLIBC_2.0 svcudp_bufcreate F -GLIBC_2.0 svcudp_create F -GLIBC_2.0 svcudp_enablecache F -GLIBC_2.0 swab F -GLIBC_2.0 swapoff F -GLIBC_2.0 swapon F -GLIBC_2.0 symlink F -GLIBC_2.0 sync F -GLIBC_2.0 sys_errlist D 0x3d8 -GLIBC_2.0 sys_nerr D 0x4 -GLIBC_2.0 sys_sigabbrev D 0x100 -GLIBC_2.0 sys_siglist D 0x100 -GLIBC_2.0 syscall F -GLIBC_2.0 sysconf F -GLIBC_2.0 sysctl F -GLIBC_2.0 sysinfo F -GLIBC_2.0 syslog F -GLIBC_2.0 sysmips F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 tcflow F -GLIBC_2.0 tcflush F -GLIBC_2.0 tcgetattr F -GLIBC_2.0 tcgetpgrp F -GLIBC_2.0 tcsendbreak F -GLIBC_2.0 tcsetattr F -GLIBC_2.0 tcsetpgrp F -GLIBC_2.0 tdelete F -GLIBC_2.0 telldir F -GLIBC_2.0 tempnam F -GLIBC_2.0 textdomain F -GLIBC_2.0 tfind F -GLIBC_2.0 time F -GLIBC_2.0 timegm F -GLIBC_2.0 timelocal F -GLIBC_2.0 times F -GLIBC_2.0 timezone D 0x8 -GLIBC_2.0 tmpfile F -GLIBC_2.0 tmpnam F -GLIBC_2.0 tmpnam_r F -GLIBC_2.0 toascii F -GLIBC_2.0 tolower F -GLIBC_2.0 toupper F -GLIBC_2.0 towctrans F -GLIBC_2.0 towlower F -GLIBC_2.0 towupper F -GLIBC_2.0 tr_break F -GLIBC_2.0 truncate F -GLIBC_2.0 tsearch F -GLIBC_2.0 ttyname F -GLIBC_2.0 ttyname_r F -GLIBC_2.0 ttyslot F -GLIBC_2.0 twalk F -GLIBC_2.0 tzname D 0x10 -GLIBC_2.0 tzset F -GLIBC_2.0 ualarm F -GLIBC_2.0 ulckpwdf F -GLIBC_2.0 ulimit F -GLIBC_2.0 umask F -GLIBC_2.0 umount F -GLIBC_2.0 uname F -GLIBC_2.0 ungetc F -GLIBC_2.0 unlink F -GLIBC_2.0 unsetenv F -GLIBC_2.0 updwtmp F -GLIBC_2.0 uselib F -GLIBC_2.0 usleep F -GLIBC_2.0 ustat F -GLIBC_2.0 utime F -GLIBC_2.0 utimes F -GLIBC_2.0 utmpname F -GLIBC_2.0 valloc F -GLIBC_2.0 vasprintf F -GLIBC_2.0 vdprintf F -GLIBC_2.0 verr F -GLIBC_2.0 verrx F -GLIBC_2.0 vfork F -GLIBC_2.0 vfprintf F -GLIBC_2.0 vfscanf F -GLIBC_2.0 vhangup F -GLIBC_2.0 vlimit F -GLIBC_2.0 vprintf F -GLIBC_2.0 vscanf F -GLIBC_2.0 vsnprintf F -GLIBC_2.0 vsprintf F -GLIBC_2.0 vsscanf F -GLIBC_2.0 vsyslog F -GLIBC_2.0 vtimes F -GLIBC_2.0 vwarn F -GLIBC_2.0 vwarnx F -GLIBC_2.0 wait F -GLIBC_2.0 wait3 F -GLIBC_2.0 wait4 F -GLIBC_2.0 waitpid F -GLIBC_2.0 warn F -GLIBC_2.0 warnx F -GLIBC_2.0 wcpcpy F -GLIBC_2.0 wcpncpy F -GLIBC_2.0 wcrtomb F -GLIBC_2.0 wcscat F -GLIBC_2.0 wcschr F -GLIBC_2.0 wcscmp F -GLIBC_2.0 wcscoll F -GLIBC_2.0 wcscpy F -GLIBC_2.0 wcscspn F -GLIBC_2.0 wcsdup F -GLIBC_2.0 wcslen F -GLIBC_2.0 wcsncat F -GLIBC_2.0 wcsncmp F -GLIBC_2.0 wcsncpy F -GLIBC_2.0 wcsnrtombs F -GLIBC_2.0 wcspbrk F -GLIBC_2.0 wcsrchr F -GLIBC_2.0 wcsrtombs F -GLIBC_2.0 wcsspn F -GLIBC_2.0 wcsstr F -GLIBC_2.0 wcstod F -GLIBC_2.0 wcstof F -GLIBC_2.0 wcstok F -GLIBC_2.0 wcstol F -GLIBC_2.0 wcstold F -GLIBC_2.0 wcstombs F -GLIBC_2.0 wcstoq F -GLIBC_2.0 wcstoul F -GLIBC_2.0 wcstouq F -GLIBC_2.0 wcswidth F -GLIBC_2.0 wcsxfrm F -GLIBC_2.0 wctob F -GLIBC_2.0 wctomb F -GLIBC_2.0 wctrans F -GLIBC_2.0 wctype F -GLIBC_2.0 wcwidth F -GLIBC_2.0 wmemchr F -GLIBC_2.0 wmemcmp F -GLIBC_2.0 wmemcpy F -GLIBC_2.0 wmemmove F -GLIBC_2.0 wmemset F -GLIBC_2.0 write F -GLIBC_2.0 writev F -GLIBC_2.0 xdr_accepted_reply F -GLIBC_2.0 xdr_array F -GLIBC_2.0 xdr_authunix_parms F -GLIBC_2.0 xdr_bool F -GLIBC_2.0 xdr_bytes F -GLIBC_2.0 xdr_callhdr F -GLIBC_2.0 xdr_callmsg F -GLIBC_2.0 xdr_char F -GLIBC_2.0 xdr_cryptkeyarg F -GLIBC_2.0 xdr_cryptkeyarg2 F -GLIBC_2.0 xdr_cryptkeyres F -GLIBC_2.0 xdr_des_block F -GLIBC_2.0 xdr_double F -GLIBC_2.0 xdr_enum F -GLIBC_2.0 xdr_float F -GLIBC_2.0 xdr_free F -GLIBC_2.0 xdr_int F -GLIBC_2.0 xdr_key_netstarg F -GLIBC_2.0 xdr_key_netstres F -GLIBC_2.0 xdr_keybuf F -GLIBC_2.0 xdr_keystatus F -GLIBC_2.0 xdr_long F -GLIBC_2.0 xdr_netobj F -GLIBC_2.0 xdr_opaque F -GLIBC_2.0 xdr_opaque_auth F -GLIBC_2.0 xdr_pmap F -GLIBC_2.0 xdr_pmaplist F -GLIBC_2.0 xdr_pointer F -GLIBC_2.0 xdr_reference F -GLIBC_2.0 xdr_rejected_reply F -GLIBC_2.0 xdr_replymsg F -GLIBC_2.0 xdr_rmtcall_args F -GLIBC_2.0 xdr_rmtcallres F -GLIBC_2.0 xdr_short F -GLIBC_2.0 xdr_string F -GLIBC_2.0 xdr_u_char F -GLIBC_2.0 xdr_u_int F -GLIBC_2.0 xdr_u_long F -GLIBC_2.0 xdr_u_short F -GLIBC_2.0 xdr_union F -GLIBC_2.0 xdr_vector F -GLIBC_2.0 xdr_void F -GLIBC_2.0 xdr_wrapstring F -GLIBC_2.0 xdrmem_create F -GLIBC_2.0 xdrrec_create F -GLIBC_2.0 xdrrec_endofrecord F -GLIBC_2.0 xdrrec_eof F -GLIBC_2.0 xdrrec_skiprecord F -GLIBC_2.0 xdrstdio_create F -GLIBC_2.0 xencrypt F -GLIBC_2.0 xprt_register F -GLIBC_2.0 xprt_unregister F -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 fallocate64 F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _Exit F -GLIBC_2.2 _IO_2_1_stderr_ D 0xe0 -GLIBC_2.2 _IO_2_1_stdin_ D 0xe0 -GLIBC_2.2 _IO_2_1_stdout_ D 0xe0 -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_do_write F -GLIBC_2.2 _IO_fclose F -GLIBC_2.2 _IO_fdopen F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_file_attach F -GLIBC_2.2 _IO_file_close_it F -GLIBC_2.2 _IO_file_finish F -GLIBC_2.2 _IO_file_fopen F -GLIBC_2.2 _IO_file_init F -GLIBC_2.2 _IO_file_overflow F -GLIBC_2.2 _IO_file_seekoff F -GLIBC_2.2 _IO_file_setbuf F -GLIBC_2.2 _IO_file_sync F -GLIBC_2.2 _IO_file_underflow F -GLIBC_2.2 _IO_file_write F -GLIBC_2.2 _IO_file_xsputn F -GLIBC_2.2 _IO_fopen F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_getline_info F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_popen F -GLIBC_2.2 _IO_proc_close F -GLIBC_2.2 _IO_proc_open F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0xa8 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 __asprintf F -GLIBC_2.2 __assert F -GLIBC_2.2 __backtrace F -GLIBC_2.2 __backtrace_symbols F -GLIBC_2.2 __backtrace_symbols_fd F -GLIBC_2.2 __ctype32_tolower D 0x8 -GLIBC_2.2 __ctype32_toupper D 0x8 -GLIBC_2.2 __cxa_atexit F -GLIBC_2.2 __cxa_finalize F -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __duplocale F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpurge F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __freelocale F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __isalnum_l F -GLIBC_2.2 __isalpha_l F -GLIBC_2.2 __isascii_l F -GLIBC_2.2 __isblank_l F -GLIBC_2.2 __iscntrl_l F -GLIBC_2.2 __isdigit_l F -GLIBC_2.2 __isgraph_l F -GLIBC_2.2 __islower_l F -GLIBC_2.2 __isprint_l F -GLIBC_2.2 __ispunct_l F -GLIBC_2.2 __isspace_l F -GLIBC_2.2 __isupper_l F -GLIBC_2.2 __iswalnum_l F -GLIBC_2.2 __iswalpha_l F -GLIBC_2.2 __iswblank_l F -GLIBC_2.2 __iswcntrl_l F -GLIBC_2.2 __iswctype_l F -GLIBC_2.2 __iswdigit_l F -GLIBC_2.2 __iswgraph_l F -GLIBC_2.2 __iswlower_l F -GLIBC_2.2 __iswprint_l F -GLIBC_2.2 __iswpunct_l F -GLIBC_2.2 __iswspace_l F -GLIBC_2.2 __iswupper_l F -GLIBC_2.2 __iswxdigit_l F -GLIBC_2.2 __isxdigit_l F -GLIBC_2.2 __key_decryptsession_pk_LOCAL D 0x8 -GLIBC_2.2 __key_encryptsession_pk_LOCAL D 0x8 -GLIBC_2.2 __key_gendes_LOCAL D 0x8 -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __libc_freeres F -GLIBC_2.2 __libc_sa_len F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __mempcpy_small F -GLIBC_2.2 __newlocale F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __open64 F -GLIBC_2.2 __poll F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __rawmemchr F -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_state F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 __signbitl F -GLIBC_2.2 __sigsuspend F -GLIBC_2.2 __statfs F -GLIBC_2.2 __stpcpy_small F -GLIBC_2.2 __strcasecmp_l F -GLIBC_2.2 __strcasestr F -GLIBC_2.2 __strcoll_l F -GLIBC_2.2 __strcpy_small F -GLIBC_2.2 __strcspn_c1 F -GLIBC_2.2 __strcspn_c2 F -GLIBC_2.2 __strcspn_c3 F -GLIBC_2.2 __strfmon_l F -GLIBC_2.2 __strncasecmp_l F -GLIBC_2.2 __strndup F -GLIBC_2.2 __strpbrk_c2 F -GLIBC_2.2 __strpbrk_c3 F -GLIBC_2.2 __strsep_1c F -GLIBC_2.2 __strsep_2c F -GLIBC_2.2 __strsep_3c F -GLIBC_2.2 __strsep_g F -GLIBC_2.2 __strspn_c1 F -GLIBC_2.2 __strspn_c2 F -GLIBC_2.2 __strspn_c3 F -GLIBC_2.2 __strtod_l F -GLIBC_2.2 __strtof_l F -GLIBC_2.2 __strtok_r_1c F -GLIBC_2.2 __strtol_l F -GLIBC_2.2 __strtold_l F -GLIBC_2.2 __strtoll_l F -GLIBC_2.2 __strtoul_l F -GLIBC_2.2 __strtoull_l F -GLIBC_2.2 __strverscmp F -GLIBC_2.2 __strxfrm_l F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __toascii_l F -GLIBC_2.2 __tolower_l F -GLIBC_2.2 __toupper_l F -GLIBC_2.2 __towctrans F -GLIBC_2.2 __towctrans_l F -GLIBC_2.2 __towlower_l F -GLIBC_2.2 __towupper_l F -GLIBC_2.2 __vfork F -GLIBC_2.2 __wcscasecmp_l F -GLIBC_2.2 __wcscoll_l F -GLIBC_2.2 __wcsncasecmp_l F -GLIBC_2.2 __wcstod_l F -GLIBC_2.2 __wcstof_l F -GLIBC_2.2 __wcstol_l F -GLIBC_2.2 __wcstold_l F -GLIBC_2.2 __wcstoll_l F -GLIBC_2.2 __wcstoul_l F -GLIBC_2.2 __wcstoull_l F -GLIBC_2.2 __wcsxfrm_l F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __wctype_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _authenticate F -GLIBC_2.2 _dl_mcount_wrapper F -GLIBC_2.2 _dl_mcount_wrapper_check F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _res_hconf D 0x48 -GLIBC_2.2 _sys_errlist D 0x2370 -GLIBC_2.2 _sys_nerr D 0x4 -GLIBC_2.2 _sys_siglist D 0x200 -GLIBC_2.2 _test_and_set F -GLIBC_2.2 addseverity F -GLIBC_2.2 alphasort64 F -GLIBC_2.2 argp_err_exit_status D 0x4 -GLIBC_2.2 argp_error F -GLIBC_2.2 argp_failure F -GLIBC_2.2 argp_help F -GLIBC_2.2 argp_parse F -GLIBC_2.2 argp_program_bug_address D 0x8 -GLIBC_2.2 argp_program_version D 0x8 -GLIBC_2.2 argp_program_version_hook D 0x8 -GLIBC_2.2 argp_state_help F -GLIBC_2.2 argp_usage F -GLIBC_2.2 authdes_create F -GLIBC_2.2 authdes_getucred F -GLIBC_2.2 authdes_pk_create F -GLIBC_2.2 backtrace F -GLIBC_2.2 backtrace_symbols F -GLIBC_2.2 backtrace_symbols_fd F -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 capget F -GLIBC_2.2 capset F -GLIBC_2.2 cbc_crypt F -GLIBC_2.2 clntunix_create F -GLIBC_2.2 creat64 F -GLIBC_2.2 dcngettext F -GLIBC_2.2 des_setparity F -GLIBC_2.2 dngettext F -GLIBC_2.2 ecb_crypt F -GLIBC_2.2 endutxent F -GLIBC_2.2 fattach F -GLIBC_2.2 fclose F -GLIBC_2.2 fdetach F -GLIBC_2.2 fdopen F -GLIBC_2.2 ffsl F -GLIBC_2.2 ffsll F -GLIBC_2.2 fgetc_unlocked F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgets_unlocked F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fmtmsg F -GLIBC_2.2 fopen F -GLIBC_2.2 fopen64 F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fputs_unlocked F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fread_unlocked F -GLIBC_2.2 freopen64 F -GLIBC_2.2 fseeko F -GLIBC_2.2 fseeko64 F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fstatfs64 F -GLIBC_2.2 fstatvfs F -GLIBC_2.2 fstatvfs64 F -GLIBC_2.2 ftello F -GLIBC_2.2 ftello64 F -GLIBC_2.2 ftruncate64 F -GLIBC_2.2 ftw64 F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwrite_unlocked F -GLIBC_2.2 fwscanf F -GLIBC_2.2 gai_strerror F -GLIBC_2.2 getaliasbyname_r F -GLIBC_2.2 getaliasent_r F -GLIBC_2.2 getcontext F -GLIBC_2.2 getdate F -GLIBC_2.2 getdate_err D 0x4 -GLIBC_2.2 getdate_r F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getgrent_r F -GLIBC_2.2 getgrgid_r F -GLIBC_2.2 getgrnam_r F -GLIBC_2.2 gethostbyaddr_r F -GLIBC_2.2 gethostbyname2_r F -GLIBC_2.2 gethostbyname_r F -GLIBC_2.2 gethostent_r F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getmsg F -GLIBC_2.2 getnameinfo F -GLIBC_2.2 getnetbyaddr_r F -GLIBC_2.2 getnetbyname_r F -GLIBC_2.2 getnetent_r F -GLIBC_2.2 getnetname F -GLIBC_2.2 getpmsg F -GLIBC_2.2 getprotobyname_r F -GLIBC_2.2 getprotobynumber_r F -GLIBC_2.2 getprotoent_r F -GLIBC_2.2 getpt F -GLIBC_2.2 getpwent_r F -GLIBC_2.2 getpwnam_r F -GLIBC_2.2 getpwuid_r F -GLIBC_2.2 getrlimit64 F -GLIBC_2.2 getrpcbyname_r F -GLIBC_2.2 getrpcbynumber_r F -GLIBC_2.2 getrpcent_r F -GLIBC_2.2 getservbyname_r F -GLIBC_2.2 getservbyport_r F -GLIBC_2.2 getservent_r F -GLIBC_2.2 getspent_r F -GLIBC_2.2 getspnam_r F -GLIBC_2.2 getutmp F -GLIBC_2.2 getutmpx F -GLIBC_2.2 getutxent F -GLIBC_2.2 getutxid F -GLIBC_2.2 getutxline F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 glob64 F -GLIBC_2.2 globfree64 F -GLIBC_2.2 gnu_get_libc_release F -GLIBC_2.2 gnu_get_libc_version F -GLIBC_2.2 grantpt F -GLIBC_2.2 host2netname F -GLIBC_2.2 iconv F -GLIBC_2.2 iconv_close F -GLIBC_2.2 iconv_open F -GLIBC_2.2 if_freenameindex F -GLIBC_2.2 if_indextoname F -GLIBC_2.2 if_nameindex F -GLIBC_2.2 if_nametoindex F -GLIBC_2.2 imaxabs F -GLIBC_2.2 imaxdiv F -GLIBC_2.2 in6addr_any D 0x10 -GLIBC_2.2 in6addr_loopback D 0x10 -GLIBC_2.2 iruserok_af F -GLIBC_2.2 isastream F -GLIBC_2.2 iswblank F -GLIBC_2.2 key_decryptsession F -GLIBC_2.2 key_decryptsession_pk F -GLIBC_2.2 key_encryptsession F -GLIBC_2.2 key_encryptsession_pk F -GLIBC_2.2 key_gendes F -GLIBC_2.2 key_get_conv F -GLIBC_2.2 key_secretkey_is_set F -GLIBC_2.2 key_setnet F -GLIBC_2.2 key_setsecret F -GLIBC_2.2 localeconv F -GLIBC_2.2 lockf64 F -GLIBC_2.2 lseek64 F -GLIBC_2.2 makecontext F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 mempcpy F -GLIBC_2.2 memrchr F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 mmap64 F -GLIBC_2.2 moncontrol F -GLIBC_2.2 netname2host F -GLIBC_2.2 netname2user F -GLIBC_2.2 nftw F -GLIBC_2.2 nftw64 F -GLIBC_2.2 ngettext F -GLIBC_2.2 ntp_adjtime F -GLIBC_2.2 ntp_gettime F -GLIBC_2.2 open64 F -GLIBC_2.2 passwd2des F -GLIBC_2.2 pclose F -GLIBC_2.2 popen F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 printf_size F -GLIBC_2.2 printf_size_info F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 ptsname F -GLIBC_2.2 ptsname_r F -GLIBC_2.2 putgrent F -GLIBC_2.2 putmsg F -GLIBC_2.2 putpmsg F -GLIBC_2.2 pututxline F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 rawmemchr F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 rtime F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 scandir64 F -GLIBC_2.2 sendfile F -GLIBC_2.2 setrlimit64 F -GLIBC_2.2 setutxent F -GLIBC_2.2 sighold F -GLIBC_2.2 sigignore F -GLIBC_2.2 sigqueue F -GLIBC_2.2 sigrelse F -GLIBC_2.2 sigset F -GLIBC_2.2 sigtimedwait F -GLIBC_2.2 sigwaitinfo F -GLIBC_2.2 statfs64 F -GLIBC_2.2 statvfs F -GLIBC_2.2 statvfs64 F -GLIBC_2.2 strcasestr F -GLIBC_2.2 strchrnul F -GLIBC_2.2 strtoimax F -GLIBC_2.2 strtoumax F -GLIBC_2.2 strverscmp F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x8 -GLIBC_2.2 svcunix_create F -GLIBC_2.2 svcunixfd_create F -GLIBC_2.2 swapcontext F -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 sys_errlist D 0x2370 -GLIBC_2.2 sys_nerr D 0x4 -GLIBC_2.2 sys_sigabbrev D 0x200 -GLIBC_2.2 sys_siglist D 0x200 -GLIBC_2.2 sysv_signal F -GLIBC_2.2 tcgetsid F -GLIBC_2.2 tdestroy F -GLIBC_2.2 tmpfile F -GLIBC_2.2 tmpfile64 F -GLIBC_2.2 truncate64 F -GLIBC_2.2 umount2 F -GLIBC_2.2 ungetwc F -GLIBC_2.2 unlockpt F -GLIBC_2.2 updwtmpx F -GLIBC_2.2 user2netname F -GLIBC_2.2 utmpxname F -GLIBC_2.2 versionsort F -GLIBC_2.2 versionsort64 F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 waitid F -GLIBC_2.2 wcscasecmp F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wcsncasecmp F -GLIBC_2.2 wcsnlen F -GLIBC_2.2 wcstoimax F -GLIBC_2.2 wcstoll F -GLIBC_2.2 wcstoull F -GLIBC_2.2 wcstoumax F -GLIBC_2.2 wcswcs F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wordexp F -GLIBC_2.2 wordfree F -GLIBC_2.2 wprintf F -GLIBC_2.2 wscanf F -GLIBC_2.2 xdecrypt F -GLIBC_2.2 xdr_authdes_cred F -GLIBC_2.2 xdr_authdes_verf F -GLIBC_2.2 xdr_getcredres F -GLIBC_2.2 xdr_hyper F -GLIBC_2.2 xdr_int16_t F -GLIBC_2.2 xdr_int32_t F -GLIBC_2.2 xdr_int64_t F -GLIBC_2.2 xdr_int8_t F -GLIBC_2.2 xdr_longlong_t F -GLIBC_2.2 xdr_netnamestr F -GLIBC_2.2 xdr_sizeof F -GLIBC_2.2 xdr_u_hyper F -GLIBC_2.2 xdr_u_longlong_t F -GLIBC_2.2 xdr_uint16_t F -GLIBC_2.2 xdr_uint32_t F -GLIBC_2.2 xdr_uint64_t F -GLIBC_2.2 xdr_uint8_t F -GLIBC_2.2 xdr_unixcred F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x400 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 posix_fadvise64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 strtoll_l F -GLIBC_2.3.3 strtoull_l F -GLIBC_2.3.3 sys_sigabbrev D 0x400 -GLIBC_2.3.3 sys_siglist D 0x400 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 futimesat F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 symlinkat F -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libresolv.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libresolv.abilist deleted file mode 100644 index 2d92a35e81..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libresolv.abilist +++ /dev/null @@ -1,100 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __b64_ntop F -GLIBC_2.0 __b64_pton F -GLIBC_2.0 __dn_comp F -GLIBC_2.0 __dn_count_labels F -GLIBC_2.0 __dn_skipname F -GLIBC_2.0 __fp_nquery F -GLIBC_2.0 __fp_query F -GLIBC_2.0 __fp_resstat F -GLIBC_2.0 __hostalias F -GLIBC_2.0 __loc_aton F -GLIBC_2.0 __loc_ntoa F -GLIBC_2.0 __p_cdname F -GLIBC_2.0 __p_cdnname F -GLIBC_2.0 __p_class F -GLIBC_2.0 __p_class_syms D 0xa8 -GLIBC_2.0 __p_fqname F -GLIBC_2.0 __p_fqnname F -GLIBC_2.0 __p_option F -GLIBC_2.0 __p_query F -GLIBC_2.0 __p_secstodate F -GLIBC_2.0 __p_time F -GLIBC_2.0 __p_type F -GLIBC_2.0 __p_type_syms D 0x450 -GLIBC_2.0 __putlong F -GLIBC_2.0 __putshort F -GLIBC_2.0 __res_close F -GLIBC_2.0 __res_dnok F -GLIBC_2.0 __res_hnok F -GLIBC_2.0 __res_isourserver F -GLIBC_2.0 __res_mailok F -GLIBC_2.0 __res_nameinquery F -GLIBC_2.0 __res_ownok F -GLIBC_2.0 __res_queriesmatch F -GLIBC_2.0 __res_send F -GLIBC_2.0 __sym_ntop F -GLIBC_2.0 __sym_ntos F -GLIBC_2.0 __sym_ston F -GLIBC_2.0 _gethtbyaddr F -GLIBC_2.0 _gethtbyname F -GLIBC_2.0 _gethtbyname2 F -GLIBC_2.0 _gethtent F -GLIBC_2.0 _getlong F -GLIBC_2.0 _getshort F -GLIBC_2.0 _res_opcodes D 0x80 -GLIBC_2.0 _sethtent F -GLIBC_2.0 dn_expand F -GLIBC_2.0 inet_net_ntop F -GLIBC_2.0 inet_net_pton F -GLIBC_2.0 inet_neta F -GLIBC_2.0 res_gethostbyaddr F -GLIBC_2.0 res_gethostbyname F -GLIBC_2.0 res_gethostbyname2 F -GLIBC_2.0 res_mkquery F -GLIBC_2.0 res_query F -GLIBC_2.0 res_querydomain F -GLIBC_2.0 res_search F -GLIBC_2.0 res_send_setqhook F -GLIBC_2.0 res_send_setrhook F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __dn_expand F -GLIBC_2.2 __res_hostalias F -GLIBC_2.2 __res_mkquery F -GLIBC_2.2 __res_nmkquery F -GLIBC_2.2 __res_nquery F -GLIBC_2.2 __res_nquerydomain F -GLIBC_2.2 __res_nsearch F -GLIBC_2.2 __res_nsend F -GLIBC_2.2 __res_query F -GLIBC_2.2 __res_querydomain F -GLIBC_2.2 __res_search F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise64.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise64.c deleted file mode 100644 index 5a6379613b..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise64.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#undef weak_alias -#define weak_alias(a, b) -#undef strong_alias -#define strong_alias(a, b) - -#include - -/* Although both posix_fadvise and posix_fadvise64 has the same semantic - on mips64, there were were releases with both symbol versions (BZ#14044). - So we need to continue export them. */ -#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) -_strong_alias (__posix_fadvise64_l64, __posix_fadvise64_l32); -compat_symbol (libc, __posix_fadvise64_l32, posix_fadvise64, GLIBC_2_2); -versioned_symbol (libc, __posix_fadvise64_l64, posix_fadvise64, GLIBC_2_3_3); -#else -_weak_alias (posix_fadvise, posix_fadvise64); -#endif -_strong_alias (__posix_fadvise64_l64, posix_fadvise); diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/sendfile64.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/sendfile64.c deleted file mode 100644 index 4c451bd093..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/sendfile64.c +++ /dev/null @@ -1 +0,0 @@ -/* sendfile64 is alias of sendfile syscall. */ diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/statfs64.c b/sysdeps/unix/sysv/linux/mips/mips64/n64/statfs64.c deleted file mode 100644 index 6e25b021ab..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/statfs64.c +++ /dev/null @@ -1 +0,0 @@ -/* Empty. */ diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list b/sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list deleted file mode 100644 index 28664208d0..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list +++ /dev/null @@ -1,12 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -readahead - readahead i:iii __readahead readahead - -prlimit EXTRA prlimit64 i:iipp prlimit prlimit64 - -fanotify_mark EXTRA fanotify_mark i:iiiis fanotify_mark - -fstatfs - fstatfs i:ip __fstatfs fstatfs fstatfs64 __fstatfs64 -statfs - statfs i:sp __statfs statfs statfs64 __statfs64 - -sendfile - sendfile i:iipi sendfile sendfile64 diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h deleted file mode 100644 index 98283083b3..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h +++ /dev/null @@ -1,317 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _LINUX_MIPS_SYSDEP_H -#define _LINUX_MIPS_SYSDEP_H 1 - -/* There is some commonality. */ -#include -#include - -#include - -/* In order to get __set_errno() definition in INLINE_SYSCALL. */ -#ifndef __ASSEMBLER__ -#include -#endif - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -#ifdef __ASSEMBLER__ - -/* We don't want the label for the error handler to be visible in the symbol - table when we define it here. */ -# define SYSCALL_ERROR_LABEL 99b - -#else /* ! __ASSEMBLER__ */ - -/* Define a macro which expands into the inline wrapper code for a system - call. */ -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - ({ INTERNAL_SYSCALL_DECL (_sc_err); \ - long result_var = INTERNAL_SYSCALL (name, _sc_err, nr, args); \ - if ( INTERNAL_SYSCALL_ERROR_P (result_var, _sc_err) ) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (result_var, _sc_err)); \ - result_var = -1L; \ - } \ - result_var; }) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) long err __attribute__ ((unused)) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) ((void) (val), (long) (err)) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) ((void) (err), val) - -/* Note that the original Linux syscall restart convention required the - instruction immediately preceding SYSCALL to initialize $v0 with the - syscall number. Then if a restart triggered, $v0 would have been - clobbered by the syscall interrupted, and needed to be reinititalized. - The kernel would decrement the PC by 4 before switching back to the - user mode so that $v0 had been reloaded before SYSCALL was executed - again. This implied the place $v0 was loaded from must have been - preserved across a syscall, e.g. an immediate, static register, stack - slot, etc. - - The convention was relaxed in Linux with a change applied to the kernel - GIT repository as commit 96187fb0bc30cd7919759d371d810e928048249d, that - first appeared in the 2.6.36 release. Since then the kernel has had - code that reloads $v0 upon syscall restart and resumes right at the - SYSCALL instruction, so no special arrangement is needed anymore. - - For backwards compatibility with existing kernel binaries we support - the old convention by choosing the instruction preceding SYSCALL - carefully. This also means we have to force a 32-bit encoding of the - microMIPS MOVE instruction if one is used. */ - -#ifdef __mips_micromips -# define MOVE32 "move32" -#else -# define MOVE32 "move" -#endif - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - internal_syscall##nr ("li\t%0, %2\t\t\t# " #name "\n\t", \ - "IK" (SYS_ify (name)), \ - 0, err, args) - -#undef INTERNAL_SYSCALL_NCS -#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ - internal_syscall##nr (MOVE32 "\t%0, %2\n\t", \ - "r" (__s0), \ - number, err, args) - -#define internal_syscall0(v0_init, input, number, err, dummy...) \ -({ \ - long _sys_result; \ - \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a3 asm ("$7"); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set reorder" \ - : "=r" (__v0), "=r" (__a3) \ - : input \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall1(v0_init, input, number, err, arg1) \ -({ \ - long _sys_result; \ - \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a0 asm ("$4") = (long) (arg1); \ - register long __a3 asm ("$7"); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set reorder" \ - : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall2(v0_init, input, number, err, arg1, arg2) \ -({ \ - long _sys_result; \ - \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a0 asm ("$4") = (long) (arg1); \ - register long __a1 asm ("$5") = (long) (arg2); \ - register long __a3 asm ("$7"); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0), "r" (__a1) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall3(v0_init, input, number, err, \ - arg1, arg2, arg3) \ -({ \ - long _sys_result; \ - \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a0 asm ("$4") = (long) (arg1); \ - register long __a1 asm ("$5") = (long) (arg2); \ - register long __a2 asm ("$6") = (long) (arg3); \ - register long __a3 asm ("$7"); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "=r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall4(v0_init, input, number, err, \ - arg1, arg2, arg3, arg4) \ -({ \ - long _sys_result; \ - \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a0 asm ("$4") = (long) (arg1); \ - register long __a1 asm ("$5") = (long) (arg2); \ - register long __a2 asm ("$6") = (long) (arg3); \ - register long __a3 asm ("$7") = (long) (arg4); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "+r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall5(v0_init, input, number, err, \ - arg1, arg2, arg3, arg4, arg5) \ -({ \ - long _sys_result; \ - \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a0 asm ("$4") = (long) (arg1); \ - register long __a1 asm ("$5") = (long) (arg2); \ - register long __a2 asm ("$6") = (long) (arg3); \ - register long __a3 asm ("$7") = (long) (arg4); \ - register long __a4 asm ("$8") = (long) (arg5); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "+r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define internal_syscall6(v0_init, input, number, err, \ - arg1, arg2, arg3, arg4, arg5, arg6) \ -({ \ - long _sys_result; \ - \ - { \ - register long __s0 asm ("$16") __attribute__ ((unused)) \ - = (number); \ - register long __v0 asm ("$2"); \ - register long __a0 asm ("$4") = (long) (arg1); \ - register long __a1 asm ("$5") = (long) (arg2); \ - register long __a2 asm ("$6") = (long) (arg3); \ - register long __a3 asm ("$7") = (long) (arg4); \ - register long __a4 asm ("$8") = (long) (arg5); \ - register long __a5 asm ("$9") = (long) (arg6); \ - __asm__ volatile ( \ - ".set\tnoreorder\n\t" \ - v0_init \ - "syscall\n\t" \ - ".set\treorder" \ - : "=r" (__v0), "+r" (__a3) \ - : input, "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a4), \ - "r" (__a5) \ - : __SYSCALL_CLOBBERS); \ - err = __a3; \ - _sys_result = __v0; \ - } \ - _sys_result; \ -}) - -#define __SYSCALL_CLOBBERS "$1", "$3", "$10", "$11", "$12", "$13", \ - "$14", "$15", "$24", "$25", "hi", "lo", "memory" - -/* Standard MIPS syscalls have an error flag, and return a positive errno - when the error flag is set. Emulate this behaviour for vsyscalls so that - the INTERNAL_SYSCALL_{ERROR_P,ERRNO} macros work correctly. */ -#define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...) \ - ({ \ - long _ret = funcptr (args); \ - err = ((unsigned long) (_ret) >= (unsigned long) -4095L); \ - if (err) \ - _ret = -_ret; \ - _ret; \ - }) - -/* List of system calls which are supported as vsyscalls. */ -#define HAVE_CLOCK_GETTIME_VSYSCALL 1 -#define HAVE_GETTIMEOFDAY_VSYSCALL 1 - -#endif /* __ASSEMBLER__ */ - -/* Pointer mangling is not yet supported for MIPS. */ -#define PTR_MANGLE(var) (void) (var) -#define PTR_DEMANGLE(var) (void) (var) - -#endif /* linux/mips/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/mips/mips64/semctl.c b/sysdeps/unix/sysv/linux/mips/mips64/semctl.c deleted file mode 100644 index 2cd5d63af0..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/semctl.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#undef SHLIB_COMPAT -#define SHLIB_COMPAT(a, b, c) 0 - -#define DEFAULT_VERSION GLIBC_2_0 - -#include diff --git a/sysdeps/unix/sysv/linux/mips/mips64/shmctl.c b/sysdeps/unix/sysv/linux/mips/mips64/shmctl.c deleted file mode 100644 index f008110742..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/shmctl.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#undef SHLIB_COMPAT -#define SHLIB_COMPAT(a, b, c) 0 - -#define DEFAULT_VERSION GLIBC_2_0 - -#include <./sysdeps/unix/sysv/linux/shmctl.c> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/syscall.S b/sysdeps/unix/sysv/linux/mips/mips64/syscall.S deleted file mode 100644 index efaa4489c6..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/syscall.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#include - -/* Usage: - long syscall (syscall_number, arg1, arg2, arg3, arg4, arg5, arg6, arg7) - - We need to do some arg shifting, syscall_number will be in v0. */ - - - .text -NESTED (syscall, SZREG, ra) - .mask 0x00010000, -SZREG - .fmask 0x00000000, 0 - PTR_ADDIU sp, -SZREG - cfi_adjust_cfa_offset (SZREG) - REG_S s0, (sp) - cfi_rel_offset (s0, 0) - - move s0, a0 - move a0, a1 /* shift arg1 - arg7. */ - move a1, a2 - move a2, a3 - move a3, a4 - move a4, a5 - move a5, a6 - move a6, a7 - - move v0, s0 /* Syscall number -> v0 */ - syscall /* Do the system call. */ - - REG_L s0, (sp) - cfi_restore (s0) - PTR_ADDIU sp, SZREG - cfi_adjust_cfa_offset (-SZREG) - bne a3, zero, L(error) - - ret - -L(error): - SETUP_GP64_REG (a0, syscall) - PTR_LA t9, __syscall_error - RESTORE_GP64_REG - jr t9 - -END (syscall) diff --git a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h deleted file mode 100644 index 0ed3e3d62c..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h +++ /dev/null @@ -1,249 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif -#include - -/* Gas will put the initial save of $gp into the CIE, because it appears to - happen before any instructions. So we use cfi_same_value instead of - cfi_restore. */ - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -#ifdef __PIC__ -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .align 2; \ - L(pseudo_start): \ - cfi_startproc; \ - cfi_adjust_cfa_offset (STKSPACE); \ - cfi_rel_offset (gp, STKOFF_GP); \ - 99: PTR_LA t9,__syscall_error; \ - /* manual cpreturn */ \ - REG_L gp, STKOFF_GP(sp); \ - cfi_same_value (gp); \ - RESTORESTK; \ - jr t9; \ - .type __##syscall_name##_nocancel, @function; \ - .globl __##syscall_name##_nocancel; \ - __##syscall_name##_nocancel: \ - SAVESTK; \ - .cpsetup t9, STKOFF_GP, __##syscall_name##_nocancel; \ - cfi_rel_offset (gp, STKOFF_GP); \ - li v0, SYS_ify(syscall_name); \ - syscall; \ - bne a3, zero, SYSCALL_ERROR_LABEL; \ - /* manual cpreturn */ \ - REG_L gp, STKOFF_GP(sp); \ - cfi_same_value (gp); \ - RESTORESTK; \ - ret; \ - cfi_endproc; \ - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ - ENTRY (name) \ - SAVESTK; \ - .cpsetup t9, STKOFF_GP, name; \ - cfi_rel_offset (gp, STKOFF_GP); \ - SINGLE_THREAD_P(v1); \ - bne zero, v1, L(pseudo_cancel); \ - .set noreorder; \ - li v0, SYS_ify(syscall_name); \ - syscall; \ - .set reorder; \ - bne a3, zero, SYSCALL_ERROR_LABEL; \ - /* manual cpreturn */ \ - REG_L gp, STKOFF_GP(sp); \ - cfi_same_value (gp); \ - RESTORESTK; \ - ret; \ - L(pseudo_cancel): \ - cfi_adjust_cfa_offset (STKSPACE); \ - cfi_rel_offset (gp, STKOFF_GP); \ - REG_S ra, STKOFF_RA(sp); \ - cfi_rel_offset (ra, STKOFF_RA); \ - PUSHARGS_##args; /* save syscall args */ \ - CENABLE; \ - REG_S v0, STKOFF_SVMSK(sp); /* save mask */ \ - POPARGS_##args; /* restore syscall args */ \ - .set noreorder; \ - li v0, SYS_ify (syscall_name); \ - syscall; \ - .set reorder; \ - REG_S v0, STKOFF_SC_V0(sp); /* save syscall result */ \ - REG_S a3, STKOFF_SC_ERR(sp); /* save syscall error flag */ \ - REG_L a0, STKOFF_SVMSK(sp); /* pass mask as arg1 */ \ - CDISABLE; \ - REG_L a3, STKOFF_SC_ERR(sp); /* restore syscall error flag */ \ - REG_L ra, STKOFF_RA(sp); /* restore return address */ \ - REG_L v0, STKOFF_SC_V0(sp); /* restore syscall result */ \ - bne a3, zero, SYSCALL_ERROR_LABEL; \ - /* manual cpreturn */ \ - REG_L gp, STKOFF_GP(sp); \ - cfi_same_value (gp); \ - RESTORESTK; \ - L(pseudo_end): -#else -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .align 2; \ - L(pseudo_start): \ - cfi_startproc; \ - cfi_adjust_cfa_offset (STKSPACE); \ - 99: RESTORESTK; \ - j __syscall_error; \ - .type __##syscall_name##_nocancel, @function; \ - .globl __##syscall_name##_nocancel; \ - __##syscall_name##_nocancel: \ - SAVESTK; \ - li v0, SYS_ify(syscall_name); \ - syscall; \ - bne a3, zero, SYSCALL_ERROR_LABEL; \ - RESTORESTK; \ - ret; \ - cfi_endproc; \ - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ - ENTRY (name) \ - SAVESTK; \ - SINGLE_THREAD_P(v1); \ - bne zero, v1, L(pseudo_cancel); \ - .set noreorder; \ - li v0, SYS_ify(syscall_name); \ - syscall; \ - .set reorder; \ - bne a3, zero, SYSCALL_ERROR_LABEL; \ - RESTORESTK; \ - ret; \ - L(pseudo_cancel): \ - cfi_adjust_cfa_offset (STKSPACE); \ - REG_S ra, STKOFF_RA(sp); \ - cfi_rel_offset (ra, STKOFF_RA); \ - PUSHARGS_##args; /* save syscall args */ \ - CENABLE; \ - REG_S v0, STKOFF_SVMSK(sp); /* save mask */ \ - POPARGS_##args; /* restore syscall args */ \ - .set noreorder; \ - li v0, SYS_ify (syscall_name); \ - syscall; \ - .set reorder; \ - REG_S v0, STKOFF_SC_V0(sp); /* save syscall result */ \ - REG_S a3, STKOFF_SC_ERR(sp); /* save syscall error flag */ \ - REG_L a0, STKOFF_SVMSK(sp); /* pass mask as arg1 */ \ - CDISABLE; \ - REG_L a3, STKOFF_SC_ERR(sp); /* restore syscall error flag */ \ - REG_L ra, STKOFF_RA(sp); /* restore return address */ \ - REG_L v0, STKOFF_SC_V0(sp); /* restore syscall result */ \ - bne a3, zero, SYSCALL_ERROR_LABEL; \ - RESTORESTK; \ - L(pseudo_end): -#endif - -# undef PSEUDO_END -# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym - -# define PUSHARGS_0 /* nothing to do */ -# define PUSHARGS_1 PUSHARGS_0 REG_S a0, STKOFF_A0(sp); cfi_rel_offset (a0, STKOFF_A0); -# define PUSHARGS_2 PUSHARGS_1 REG_S a1, STKOFF_A1(sp); cfi_rel_offset (a1, STKOFF_A1); -# define PUSHARGS_3 PUSHARGS_2 REG_S a2, STKOFF_A2(sp); cfi_rel_offset (a2, STKOFF_A2); -# define PUSHARGS_4 PUSHARGS_3 REG_S a3, STKOFF_A3(sp); cfi_rel_offset (a3, STKOFF_A3); -# define PUSHARGS_5 PUSHARGS_4 REG_S a4, STKOFF_A4(sp); cfi_rel_offset (a3, STKOFF_A4); -# define PUSHARGS_6 PUSHARGS_5 REG_S a5, STKOFF_A5(sp); cfi_rel_offset (a3, STKOFF_A5); - -# define POPARGS_0 /* nothing to do */ -# define POPARGS_1 POPARGS_0 REG_L a0, STKOFF_A0(sp); -# define POPARGS_2 POPARGS_1 REG_L a1, STKOFF_A1(sp); -# define POPARGS_3 POPARGS_2 REG_L a2, STKOFF_A2(sp); -# define POPARGS_4 POPARGS_3 REG_L a3, STKOFF_A3(sp); -# define POPARGS_5 POPARGS_4 REG_L a4, STKOFF_A4(sp); -# define POPARGS_6 POPARGS_5 REG_L a5, STKOFF_A5(sp); - -/* Save an even number of slots. Should be 0 if an even number of slots - are used below, or SZREG if an odd number are used. */ -# ifdef __PIC__ -# define STK_PAD SZREG -# else -# define STK_PAD 0 -# endif - -/* Place values that we are more likely to use later in this sequence, i.e. - closer to the SP at function entry. If you do that, the are more - likely to already be in your d-cache. */ -# define STKOFF_A5 (STK_PAD) -# define STKOFF_A4 (STKOFF_A5 + SZREG) -# define STKOFF_A3 (STKOFF_A4 + SZREG) -# define STKOFF_A2 (STKOFF_A3 + SZREG) /* MT and more args. */ -# define STKOFF_A1 (STKOFF_A2 + SZREG) /* MT and 2 args. */ -# define STKOFF_A0 (STKOFF_A1 + SZREG) /* MT and 1 arg. */ -# define STKOFF_RA (STKOFF_A0 + SZREG) /* Used if MT. */ -# define STKOFF_SC_V0 (STKOFF_RA + SZREG) /* Used if MT. */ -# define STKOFF_SC_ERR (STKOFF_SC_V0 + SZREG) /* Used if MT. */ -# define STKOFF_SVMSK (STKOFF_SC_ERR + SZREG) /* Used if MT. */ - -# ifdef __PIC__ -# define STKOFF_GP (STKOFF_SVMSK + SZREG) /* Always used. */ -# define STKSPACE (STKOFF_GP + SZREG) -# else -# define STKSPACE (STKOFF_SVMSK + SZREG) -# endif - -# define SAVESTK PTR_SUBU sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE) -# define RESTORESTK PTR_ADDU sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE) - -# ifdef __PIC__ -# define PSEUDO_JMP(sym) PTR_LA t9, sym; jalr t9 -# else -# define PSEUDO_JMP(sym) jal sym -# endif - -# if IS_IN (libpthread) -# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel) -# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel) -# elif IS_IN (librt) -# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel) -# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel) -# else -# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel) -# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel) -# endif - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) \ - == 0, 1) -# else -# define SINGLE_THREAD_P(reg) \ - READ_THREAD_POINTER(reg); \ - lw reg, MULTIPLE_THREADS_OFFSET(reg) -#endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P 1 -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/mips/mips64/umount.c b/sysdeps/unix/sysv/linux/mips/mips64/umount.c deleted file mode 100644 index 64487c7819..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/umount.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Since we don't have an oldumount system call, do what the kernel - does down here. */ - -extern long int __umount2 (const char *name, int flags); - -long int -__umount (const char *name) -{ - return __umount2 (name, 0); -} - -weak_alias (__umount, umount); diff --git a/sysdeps/unix/sysv/linux/mips/mips64/xstat64.c b/sysdeps/unix/sysv/linux/mips/mips64/xstat64.c deleted file mode 100644 index 332ede92b9..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/xstat64.c +++ /dev/null @@ -1,44 +0,0 @@ -/* xstat64 using 64-bit MIPS stat system call. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include -#include - -#include - -/* Get information about the file NAME in BUF. */ - -int -__xstat64 (int vers, const char *name, struct stat64 *buf) -{ - int result; - struct kernel_stat kbuf; - - result = INLINE_SYSCALL (stat, 2, name, &kbuf); - if (result == 0) - result = __xstat64_conv (vers, &kbuf, buf); - - return result; -} - -hidden_def (__xstat64) diff --git a/sysdeps/unix/sysv/linux/mips/pipe.S b/sysdeps/unix/sysv/linux/mips/pipe.S deleted file mode 100644 index 1708888da4..0000000000 --- a/sysdeps/unix/sysv/linux/mips/pipe.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/profil-counter.h b/sysdeps/unix/sysv/linux/mips/profil-counter.h deleted file mode 100644 index 8a6a0bcf3d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/profil-counter.h +++ /dev/null @@ -1,2 +0,0 @@ -/* We can use the ix86 version. */ -#include diff --git a/sysdeps/unix/sysv/linux/mips/pt-vfork.S b/sysdeps/unix/sysv/linux/mips/pt-vfork.S deleted file mode 100644 index 65cc3823ac..0000000000 --- a/sysdeps/unix/sysv/linux/mips/pt-vfork.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/putmsg.c b/sysdeps/unix/sysv/linux/mips/putmsg.c deleted file mode 100644 index ebc1680ca7..0000000000 --- a/sysdeps/unix/sysv/linux/mips/putmsg.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/readelflib.c b/sysdeps/unix/sysv/linux/mips/readelflib.c deleted file mode 100644 index 243c85b69d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/readelflib.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Alexandre Oliva - Based on work ../x86_64/readelflib.c, - contributed by Andreas Jaeger , 1999 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -int process_elf32_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); -int process_elf64_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); - -/* Returns 0 if everything is ok, != 0 in case of error. */ -int -process_elf_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, void *file_contents, - size_t file_length) -{ - union - { - Elf64_Ehdr *eh64; - Elf32_Ehdr *eh32; - ElfW(Ehdr) *eh; - } - elf_header; - int ret; - - elf_header.eh = file_contents; - if (elf_header.eh->e_ident [EI_CLASS] == ELFCLASS32) - { - ret = process_elf32_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - if (!ret) - { - Elf32_Word flags = elf_header.eh32->e_flags; - int nan2008 = (flags & EF_MIPS_NAN2008) != 0; - - /* n32 libraries are always libc.so.6+, o32 only if 2008 NaN. */ - if ((flags & EF_MIPS_ABI2) != 0) - *flag = (nan2008 ? FLAG_MIPS64_LIBN32_NAN2008 - : FLAG_MIPS64_LIBN32) | FLAG_ELF_LIBC6; - else if (nan2008) - *flag = FLAG_MIPS_LIB32_NAN2008 | FLAG_ELF_LIBC6; - } - } - else - { - ret = process_elf64_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - /* n64 libraries are always libc.so.6+. */ - if (!ret) - { - Elf64_Word flags = elf_header.eh64->e_flags; - int nan2008 = (flags & EF_MIPS_NAN2008) != 0; - - *flag = (nan2008 ? FLAG_MIPS64_LIBN64_NAN2008 - : FLAG_MIPS64_LIBN64) | FLAG_ELF_LIBC6; - } - } - - return ret; -} - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf32_file -#define __ELF_NATIVE_CLASS 32 -#include "elf/readelflib.c" - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf64_file -#define __ELF_NATIVE_CLASS 64 -#include "elf/readelflib.c" diff --git a/sysdeps/unix/sysv/linux/mips/register-dump.h b/sysdeps/unix/sysv/linux/mips/register-dump.h deleted file mode 100644 index 803b9fdb5c..0000000000 --- a/sysdeps/unix/sysv/linux/mips/register-dump.h +++ /dev/null @@ -1,121 +0,0 @@ -/* Dump registers. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include <_itoa.h> - -#if _MIPS_SIM == _ABIO32 -# define CTX_TYPE struct sigcontext * -# define CTX_REG(ctx, i) ((ctx)->sc_regs[(i)]) -# define CTX_PC(ctx) ((ctx)->sc_pc) -# define CTX_MDHI(ctx) ((ctx)->sc_mdhi) -# define CTX_MDLO(ctx) ((ctx)->sc_mdlo) -# define REG_HEX_SIZE 8 -#else -# define CTX_TYPE ucontext_t * -# define CTX_REG(ctx, i) ((ctx)->uc_mcontext.gregs[(i)]) -# define CTX_PC(ctx) ((ctx)->uc_mcontext.pc) -# define CTX_MDHI(ctx) ((ctx)->uc_mcontext.mdhi) -# define CTX_MDLO(ctx) ((ctx)->uc_mcontext.mdhi) -# define REG_HEX_SIZE 16 -#endif - -/* We will print the register dump in this format: - - R0 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX - R8 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX - R16 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX - R24 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX - pc lo hi - XXXXXXXX XXXXXXXX XXXXXXXX - The FPU registers will not be printed. -*/ - -static void -hexvalue (_ITOA_WORD_TYPE value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -register_dump (int fd, CTX_TYPE ctx) -{ - char regs[38][REG_HEX_SIZE]; - struct iovec iov[38 * 2 + 10]; - size_t nr = 0; - int i; - -#define ADD_STRING(str) \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr -#define ADD_MEM(str, len) \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr - - /* Generate strings of register contents. */ - for (i = 0; i < 32; i++) - hexvalue (CTX_REG (ctx, i), regs[i], REG_HEX_SIZE); - hexvalue (CTX_PC (ctx), regs[32], REG_HEX_SIZE); - hexvalue (CTX_MDHI (ctx), regs[33], REG_HEX_SIZE); - hexvalue (CTX_MDLO (ctx), regs[34], REG_HEX_SIZE); - - /* Generate the output. */ - ADD_STRING ("Register dump:\n\n R0 "); - for (i = 0; i < 8; i++) - { - ADD_MEM (regs[i], REG_HEX_SIZE); - ADD_STRING (" "); - } - ADD_STRING ("\n R8 "); - for (i = 8; i < 16; i++) - { - ADD_MEM (regs[i], REG_HEX_SIZE); - ADD_STRING (" "); - } - ADD_STRING ("\n R16 "); - for (i = 16; i < 24; i++) - { - ADD_MEM (regs[i], REG_HEX_SIZE); - ADD_STRING (" "); - } - ADD_STRING ("\n R24 "); - for (i = 24; i < 32; i++) - { - ADD_MEM (regs[i], REG_HEX_SIZE); - ADD_STRING (" "); - } - ADD_STRING ("\n pc lo hi\n "); - for (i = 32; i < 35; i++) - { - ADD_MEM (regs[i], REG_HEX_SIZE); - ADD_STRING (" "); - } - ADD_STRING ("\n"); - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, ctx) diff --git a/sysdeps/unix/sysv/linux/mips/setcontext.S b/sysdeps/unix/sysv/linux/mips/setcontext.S deleted file mode 100644 index 4e363d98d0..0000000000 --- a/sysdeps/unix/sysv/linux/mips/setcontext.S +++ /dev/null @@ -1,196 +0,0 @@ -/* Set current context. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maciej W. Rozycki . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#include "ucontext_i.h" - -/* int setcontext (const ucontext_t *ucp) */ - - .text - .set nomips16 -LOCALSZ = 0 -ARGSZ = 0 -MASK = 0x00000000 -#ifdef __PIC__ -LOCALSZ = 1 /* save gp */ -#endif -#if _MIPS_SIM != _ABIO32 -ARGSZ = 1 /* save a0 */ -# ifdef __PIC__ -MASK = 0x10000000 -# endif -#endif -FRAMESZ = (((ARGSZ + LOCALSZ) * SZREG) + ALSZ) & ALMASK -GPOFF = FRAMESZ - ((ARGSZ + 1) * SZREG) -#if _MIPS_SIM != _ABIO32 -A0OFF = FRAMESZ - (1 * SZREG) /* callee-allocated */ -#else -A0OFF = FRAMESZ + (0 * SZREG) /* caller-allocated */ -#endif - -NESTED (__setcontext, FRAMESZ, ra) - .mask MASK, -(ARGSZ * SZREG) - .fmask 0x00000000, 0 - -#ifdef __PIC__ - SETUP_GP -#endif - - PTR_ADDIU sp, -FRAMESZ - cfi_adjust_cfa_offset (FRAMESZ) - -#ifdef __PIC__ - SETUP_GP64_STACK (GPOFF, __setcontext) - SAVE_GP (GPOFF) -#endif - -#ifdef PROF - .set noat - move AT, ra - jal _mcount - .set at -#endif - - /* Check for the magic flag. */ - li v0, 1 - REG_L v1, (0 * SZREG + MCONTEXT_GREGS)(a0) /* zero */ - bne v0, v1, 98f - - REG_S a0, A0OFF(sp) - -/* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8) */ - li a3, _NSIG8 - move a2, zero - PTR_ADDU a1, a0, UCONTEXT_SIGMASK - li a0, SIG_SETMASK - - li v0, SYS_ify (rt_sigprocmask) - syscall - bnez a3, 99f - - REG_L v0, A0OFF(sp) - -#ifdef __mips_hard_float -# if _MIPS_SIM == _ABI64 - l.d fs0, (24 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs1, (25 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs2, (26 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs3, (27 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs5, (29 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs6, (30 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs7, (31 * SZREG + MCONTEXT_FPREGS)(v0) - -# else /* _MIPS_SIM != _ABI64 */ - l.d fs0, (20 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs1, (22 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs2, (24 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs3, (26 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs5, (30 * SZREG + MCONTEXT_FPREGS)(v0) - -# endif /* _MIPS_SIM != _ABI64 */ - - lw v1, MCONTEXT_FPC_CSR(v0) - ctc1 v1, fcr31 -#endif /* __mips_hard_float */ - - /* Note the contents of argument registers will be random - unless makecontext() has been called. */ - REG_L a0, (4 * SZREG + MCONTEXT_GREGS)(v0) - REG_L a1, (5 * SZREG + MCONTEXT_GREGS)(v0) - REG_L a2, (6 * SZREG + MCONTEXT_GREGS)(v0) - REG_L a3, (7 * SZREG + MCONTEXT_GREGS)(v0) -#if _MIPS_SIM != _ABIO32 - REG_L a4, (8 * SZREG + MCONTEXT_GREGS)(v0) - REG_L a5, (9 * SZREG + MCONTEXT_GREGS)(v0) - REG_L a6, (10 * SZREG + MCONTEXT_GREGS)(v0) - REG_L a7, (11 * SZREG + MCONTEXT_GREGS)(v0) -#endif - - REG_L s0, (16 * SZREG + MCONTEXT_GREGS)(v0) - REG_L s1, (17 * SZREG + MCONTEXT_GREGS)(v0) - REG_L s2, (18 * SZREG + MCONTEXT_GREGS)(v0) - REG_L s3, (19 * SZREG + MCONTEXT_GREGS)(v0) - REG_L s4, (20 * SZREG + MCONTEXT_GREGS)(v0) - REG_L s5, (21 * SZREG + MCONTEXT_GREGS)(v0) - REG_L s6, (22 * SZREG + MCONTEXT_GREGS)(v0) - REG_L s7, (23 * SZREG + MCONTEXT_GREGS)(v0) -#if ! defined (__PIC__) || _MIPS_SIM != _ABIO32 - REG_L gp, (28 * SZREG + MCONTEXT_GREGS)(v0) -#endif - REG_L sp, (29 * SZREG + MCONTEXT_GREGS)(v0) - REG_L fp, (30 * SZREG + MCONTEXT_GREGS)(v0) - REG_L ra, (31 * SZREG + MCONTEXT_GREGS)(v0) - REG_L t9, MCONTEXT_PC(v0) - - move v0, zero - jr t9 - -98: - /* This is a context obtained from a signal handler. - Perform a full restore by pushing the context - passed onto a simulated signal frame on the stack - and call the signal return syscall as if a signal - handler exited normally. */ - PTR_ADDIU sp, -((RT_SIGFRAME_SIZE + ALSZ) & ALMASK) - cfi_adjust_cfa_offset ((RT_SIGFRAME_SIZE + ALSZ) & ALMASK) - - /* Only ucontext is referred to from rt_sigreturn, - copy it. */ - PTR_ADDIU t1, sp, RT_SIGFRAME_UCONTEXT - li t3, ((UCONTEXT_SIZE + SZREG - 1) / SZREG) - 1 -0: - REG_L t2, (a0) - PTR_ADDIU a0, SZREG - REG_S t2, (t1) - PTR_ADDIU t1, SZREG - .set noreorder - bgtz t3, 0b - addiu t3, -1 - .set reorder - -/* rt_sigreturn () -- no arguments, sp points to struct rt_sigframe. */ - li v0, SYS_ify (rt_sigreturn) - syscall - - /* Restore the stack and fall through to the error - path. Successful rt_sigreturn never returns to - its calling place. */ - PTR_ADDIU sp, ((RT_SIGFRAME_SIZE + ALSZ) & ALMASK) - cfi_adjust_cfa_offset (-((RT_SIGFRAME_SIZE + ALSZ) & ALMASK)) -99: -#ifdef __PIC__ - PTR_LA t9, JUMPTARGET (__syscall_error) - RESTORE_GP64_STACK - PTR_ADDIU sp, FRAMESZ - cfi_adjust_cfa_offset (-FRAMESZ) - jr t9 - -#else /* ! __PIC__ */ - - j JUMPTARGET (__syscall_error) -#endif /* ! __PIC__ */ -PSEUDO_END (__setcontext) - -weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/mips/setrlimit64.c b/sysdeps/unix/sysv/linux/mips/setrlimit64.c deleted file mode 100644 index d6feb59b30..0000000000 --- a/sysdeps/unix/sysv/linux/mips/setrlimit64.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if _MIPS_SIM == _ABIO32 || _MIPS_SIM == _ABIN32 - -# include - -# define setrlimit64 __new_setrlimit64 -# include -# undef setrlimit64 - -versioned_symbol (libc, __new_setrlimit64, setrlimit64, GLIBC_2_19); - -# if SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_19) - -/* RLIM64_INFINITY was supposed to be a glibc convention rather than - anything seen by the kernel, but it ended being passed to the kernel - through the prlimit64 syscall. Given that a lot of binaries with - the wrong constant value are in the wild, provide a wrapper function - fixing the value before the syscall. */ - -# define OLD_RLIM64_INFINITY 0x7fffffffffffffffULL - -int -attribute_compat_text_section -__old_setrlimit64 (enum __rlimit_resource resource, - const struct rlimit64 *rlimits) -{ - struct rlimit64 krlimits; - - if (rlimits->rlim_cur == OLD_RLIM64_INFINITY) - krlimits.rlim_cur = RLIM64_INFINITY; - else - krlimits.rlim_cur = rlimits->rlim_cur; - if (rlimits->rlim_max == OLD_RLIM64_INFINITY) - krlimits.rlim_max = RLIM64_INFINITY; - else - krlimits.rlim_max = rlimits->rlim_max; - - return __new_setrlimit64 (resource, &krlimits); -} - -compat_symbol (libc, __old_setrlimit64, setrlimit64, GLIBC_2_2); -# endif - -#else /* !_ABI_O32 && !_ABI_N32 */ -# include -#endif diff --git a/sysdeps/unix/sysv/linux/mips/shlib-versions b/sysdeps/unix/sysv/linux/mips/shlib-versions deleted file mode 100644 index c5bd7db098..0000000000 --- a/sysdeps/unix/sysv/linux/mips/shlib-versions +++ /dev/null @@ -1,27 +0,0 @@ -libm=6 GLIBC_2.0 GLIBC_2.2 - -# Working mips versions were never released between 2.0 and 2.2. -libc=6 GLIBC_2.0 GLIBC_2.2 - -%ifdef HAVE_MIPS_NAN2008 -ld=ld-linux-mipsn8.so.1 GLIBC_2.0 GLIBC_2.2 -%else -ld=ld.so.1 GLIBC_2.0 GLIBC_2.2 -%endif -libdl=2 GLIBC_2.0 GLIBC_2.2 - -libresolv=2 GLIBC_2.0 GLIBC_2.2 - -libnss_files=2 GLIBC_2.0 GLIBC_2.2 -libnss_dns=2 GLIBC_2.0 GLIBC_2.2 -libnss_compat=2 GLIBC_2.0 GLIBC_2.2 -libnss_nis=2 GLIBC_2.0 GLIBC_2.2 -libnss_nisplus=2 GLIBC_2.0 GLIBC_2.2 -libnss_ldap=2 GLIBC_2.0 GLIBC_2.2 -libnss_hesiod=2 GLIBC_2.0 GLIBC_2.2 - -libnsl=1 GLIBC_2.0 GLIBC_2.2 - -librt=1 GLIBC_2.0 GLIBC_2.2 - -libpthread=0 GLIBC_2.0 GLIBC_2.2 diff --git a/sysdeps/unix/sysv/linux/mips/sigaction.c b/sysdeps/unix/sysv/linux/mips/sigaction.c deleted file mode 100644 index f6be3f29b6..0000000000 --- a/sysdeps/unix/sysv/linux/mips/sigaction.c +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#include -#include - -#include - -/* The difference here is that the sigaction structure used in the - kernel is not the same as we use in the libc. Therefore we must - translate it here. */ -#include - -#if _MIPS_SIM != _ABIO32 - -# ifdef __NR_rt_sigreturn -static void restore_rt (void) asm ("__restore_rt"); -# endif -# ifdef __NR_sigreturn -static void restore (void) asm ("__restore"); -# endif -#endif - -/* If ACT is not NULL, change the action for SIG to *ACT. - If OACT is not NULL, put the old action for SIG in *OACT. */ -int -__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) -{ - int result; - - struct kernel_sigaction kact, koact; - - if (act) - { - kact.k_sa_handler = act->sa_handler; - memcpy (&kact.sa_mask, &act->sa_mask, sizeof (kernel_sigset_t)); - kact.sa_flags = act->sa_flags; -#ifdef HAVE_SA_RESTORER -# if _MIPS_SIM == _ABIO32 - kact.sa_restorer = act->sa_restorer; -# else - kact.sa_restorer = &restore_rt; -# endif -#endif - } - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - result = INLINE_SYSCALL (rt_sigaction, 4, sig, - act ? &kact : NULL, - oact ? &koact : NULL, - sizeof (kernel_sigset_t)); - - if (oact && result >= 0) - { - oact->sa_handler = koact.k_sa_handler; - memcpy (&oact->sa_mask, &koact.sa_mask, - sizeof (kernel_sigset_t)); - oact->sa_flags = koact.sa_flags; -#ifdef HAVE_SA_RESTORER - oact->sa_restorer = koact.sa_restorer; -#endif - } - return result; -} -libc_hidden_def (__libc_sigaction) - -#include - - -/* NOTE: Please think twice before making any changes to the bits of - code below. GDB needs some intimate knowledge about it to - recognize them as signal trampolines, and make backtraces through - signal handlers work right. Important are both the names - (__restore_rt) and the exact instruction sequence. - If you ever feel the need to make any changes, please notify the - appropriate GDB maintainer. */ - -#define RESTORE(name, syscall) RESTORE2 (name, syscall) -#define RESTORE2(name, syscall) \ -asm \ - ( \ - ".align 4\n" \ - "__" #name ":\n" \ - " li $2, " #syscall "\n" \ - " syscall\n" \ - ); - -/* The return code for realtime-signals. */ -#if _MIPS_SIM != _ABIO32 -# ifdef __NR_rt_sigreturn -RESTORE (restore_rt, __NR_rt_sigreturn) -# endif -# ifdef __NR_sigreturn -RESTORE (restore, __NR_sigreturn) -# endif -#endif diff --git a/sysdeps/unix/sysv/linux/mips/sigcontextinfo.h b/sysdeps/unix/sysv/linux/mips/sigcontextinfo.h deleted file mode 100644 index c9bc08363c..0000000000 --- a/sysdeps/unix/sysv/linux/mips/sigcontextinfo.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -#include - -#if _MIPS_SIM == _ABIO32 - -#define SIGCONTEXT unsigned long _code, struct sigcontext * -#define SIGCONTEXT_EXTRA_ARGS _code, -#define GET_PC(ctx) ((void *) (unsigned long) ctx->sc_pc) -#define GET_FRAME(ctx) ((void *) (unsigned long) ctx->sc_regs[30]) -#define GET_STACK(ctx) ((void *) (unsigned long) ctx->sc_regs[29]) -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) - -#else - -#define SIGCONTEXT unsigned long _code, ucontext_t * -#define SIGCONTEXT_EXTRA_ARGS _code, -#define GET_PC(ctx) ((void *) (unsigned long) ctx->uc_mcontext.pc) -#define GET_FRAME(ctx) ((void *) (unsigned long) ctx->uc_mcontext.gregs[30]) -#define GET_STACK(ctx) ((void *) (unsigned long) ctx->uc_mcontext.gregs[29]) -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) - -#endif diff --git a/sysdeps/unix/sysv/linux/mips/swapcontext.S b/sysdeps/unix/sysv/linux/mips/swapcontext.S deleted file mode 100644 index fde6e5e48a..0000000000 --- a/sysdeps/unix/sysv/linux/mips/swapcontext.S +++ /dev/null @@ -1,214 +0,0 @@ -/* Save and set current context. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Maciej W. Rozycki . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#include "ucontext_i.h" - -/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */ - - .text - .set nomips16 -LOCALSZ = 0 -ARGSZ = 0 -MASK = 0x00000000 -#ifdef __PIC__ -LOCALSZ = 1 /* save gp */ -#endif -#if _MIPS_SIM != _ABIO32 -ARGSZ = 1 /* save a1 */ -# ifdef __PIC__ -MASK = 0x10000000 -# endif -#endif -FRAMESZ = (((ARGSZ + LOCALSZ) * SZREG) + ALSZ) & ALMASK -GPOFF = FRAMESZ - ((ARGSZ + 1) * SZREG) -#if _MIPS_SIM != _ABIO32 -A1OFF = FRAMESZ - (1 * SZREG) /* callee-allocated */ -#else -A1OFF = FRAMESZ + (1 * SZREG) /* caller-allocated */ -#endif - -NESTED (__swapcontext, FRAMESZ, ra) - .mask MASK, -(ARGSZ * SZREG) - .fmask 0x00000000, 0 - -#ifdef __PIC__ - SETUP_GP - - move a2, sp -# define _SP a2 - -# if _MIPS_SIM != _ABIO32 - move a3, gp -# define _GP a3 -# endif - - PTR_ADDIU sp, -FRAMESZ - cfi_adjust_cfa_offset (FRAMESZ) - SETUP_GP64_STACK (GPOFF, __swapcontext) - SAVE_GP (GPOFF) - -#else /* ! __PIC__ */ -# define _SP sp -# define _GP gp - -#endif /* ! __PIC__ */ - -#ifdef PROF - .set noat - move AT, ra - jal _mcount - .set at -#endif - - /* Store a magic flag. */ - li v1, 1 - REG_S v1, (0 * SZREG + MCONTEXT_GREGS)(a0) /* zero */ - - REG_S s0, (16 * SZREG + MCONTEXT_GREGS)(a0) - REG_S s1, (17 * SZREG + MCONTEXT_GREGS)(a0) - REG_S s2, (18 * SZREG + MCONTEXT_GREGS)(a0) - REG_S s3, (19 * SZREG + MCONTEXT_GREGS)(a0) - REG_S s4, (20 * SZREG + MCONTEXT_GREGS)(a0) - REG_S s5, (21 * SZREG + MCONTEXT_GREGS)(a0) - REG_S s6, (22 * SZREG + MCONTEXT_GREGS)(a0) - REG_S s7, (23 * SZREG + MCONTEXT_GREGS)(a0) -#if ! defined (__PIC__) || _MIPS_SIM != _ABIO32 - REG_S _GP, (28 * SZREG + MCONTEXT_GREGS)(a0) -#endif - REG_S _SP, (29 * SZREG + MCONTEXT_GREGS)(a0) - REG_S fp, (30 * SZREG + MCONTEXT_GREGS)(a0) - REG_S ra, (31 * SZREG + MCONTEXT_GREGS)(a0) - REG_S ra, MCONTEXT_PC(a0) - -#ifdef __mips_hard_float -# if _MIPS_SIM == _ABI64 - s.d fs0, (24 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs1, (25 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs2, (26 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs3, (27 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs5, (29 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs6, (30 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs7, (31 * SZREG + MCONTEXT_FPREGS)(a0) - -# else /* _MIPS_SIM != _ABI64 */ - s.d fs0, (20 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs1, (22 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs2, (24 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs3, (26 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(a0) - s.d fs5, (30 * SZREG + MCONTEXT_FPREGS)(a0) - -# endif /* _MIPS_SIM != _ABI64 */ - - cfc1 v1, fcr31 - sw v1, MCONTEXT_FPC_CSR(a0) -#endif /* __mips_hard_float */ - - REG_S a1, A1OFF(sp) - -/* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, &oucp->uc_sigmask, _NSIG8) */ - li a3, _NSIG8 - PTR_ADDU a2, a0, UCONTEXT_SIGMASK - PTR_ADDU a1, a1, UCONTEXT_SIGMASK - li a0, SIG_SETMASK - - li v0, SYS_ify (rt_sigprocmask) - syscall - bnez a3, 99f - - REG_L v0, A1OFF(sp) - -#ifdef __mips_hard_float -# if _MIPS_SIM == _ABI64 - l.d fs0, (24 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs1, (25 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs2, (26 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs3, (27 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs5, (29 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs6, (30 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs7, (31 * SZREG + MCONTEXT_FPREGS)(v0) - -# else /* _MIPS_SIM != _ABI64 */ - l.d fs0, (20 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs1, (22 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs2, (24 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs3, (26 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs4, (28 * SZREG + MCONTEXT_FPREGS)(v0) - l.d fs5, (30 * SZREG + MCONTEXT_FPREGS)(v0) - -# endif /* _MIPS_SIM != _ABI64 */ - - lw v1, MCONTEXT_FPC_CSR(v0) - ctc1 v1, fcr31 -#endif /* __mips_hard_float */ - - /* Note the contents of argument registers will be random - unless makecontext() has been called. */ - REG_L a0, (4 * SZREG + MCONTEXT_GREGS)(v0) - REG_L a1, (5 * SZREG + MCONTEXT_GREGS)(v0) - REG_L a2, (6 * SZREG + MCONTEXT_GREGS)(v0) - REG_L a3, (7 * SZREG + MCONTEXT_GREGS)(v0) -#if _MIPS_SIM != _ABIO32 - REG_L a4, (8 * SZREG + MCONTEXT_GREGS)(v0) - REG_L a5, (9 * SZREG + MCONTEXT_GREGS)(v0) - REG_L a6, (10 * SZREG + MCONTEXT_GREGS)(v0) - REG_L a7, (11 * SZREG + MCONTEXT_GREGS)(v0) -#endif - - REG_L s0, (16 * SZREG + MCONTEXT_GREGS)(v0) - REG_L s1, (17 * SZREG + MCONTEXT_GREGS)(v0) - REG_L s2, (18 * SZREG + MCONTEXT_GREGS)(v0) - REG_L s3, (19 * SZREG + MCONTEXT_GREGS)(v0) - REG_L s4, (20 * SZREG + MCONTEXT_GREGS)(v0) - REG_L s5, (21 * SZREG + MCONTEXT_GREGS)(v0) - REG_L s6, (22 * SZREG + MCONTEXT_GREGS)(v0) - REG_L s7, (23 * SZREG + MCONTEXT_GREGS)(v0) -#if ! defined (__PIC__) || _MIPS_SIM != _ABIO32 - REG_L gp, (28 * SZREG + MCONTEXT_GREGS)(v0) -#endif - REG_L sp, (29 * SZREG + MCONTEXT_GREGS)(v0) - REG_L fp, (30 * SZREG + MCONTEXT_GREGS)(v0) - REG_L ra, (31 * SZREG + MCONTEXT_GREGS)(v0) - REG_L t9, MCONTEXT_PC(v0) - - move v0, zero - jr t9 - -99: -#ifdef __PIC__ - PTR_LA t9, JUMPTARGET (__syscall_error) - RESTORE_GP64_STACK - PTR_ADDIU sp, FRAMESZ - cfi_adjust_cfa_offset (-FRAMESZ) - jr t9 - -#else /* ! __PIC__ */ - - j JUMPTARGET (__syscall_error) -#endif /* ! __PIC__ */ -PSEUDO_END (__swapcontext) - -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/mips/sys/cachectl.h b/sysdeps/unix/sysv/linux/mips/sys/cachectl.h deleted file mode 100644 index 4bad3754b2..0000000000 --- a/sysdeps/unix/sysv/linux/mips/sys/cachectl.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_CACHECTL_H -#define _SYS_CACHECTL_H 1 - -#include - -/* - * Get the kernel definition for the op bits. - */ -#include - -__BEGIN_DECLS - -#ifdef __USE_MISC -extern int cachectl (void *__addr, const int __nbytes, const int __op) __THROW; -#endif -extern int __cachectl (void *__addr, const int __nbytes, const int __op) __THROW; -#ifdef __USE_MISC -extern int cacheflush (void *__addr, const int __nbytes, const int __op) __THROW; -#endif -extern int _flush_cache (char *__addr, const int __nbytes, const int __op) __THROW; - -__END_DECLS - -#endif /* sys/cachectl.h */ diff --git a/sysdeps/unix/sysv/linux/mips/sys/procfs.h b/sysdeps/unix/sysv/linux/mips/sys/procfs.h deleted file mode 100644 index 4c6001bd17..0000000000 --- a/sysdeps/unix/sysv/linux/mips/sys/procfs.h +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somehow modelled after the file of the same name on SysVr4 - systems. It provides a definition of the core file format for ELF - used on Linux. */ - -#include -#include -#include -#include -#include -#include - -/* ELF register definitions */ -#define ELF_NGREG 45 -#define ELF_NFPREG 33 - -#if _MIPS_SIM == _ABIN32 -__extension__ typedef unsigned long long elf_greg_t; -#else -typedef unsigned long elf_greg_t; -#endif -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -typedef double elf_fpreg_t; -typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; - -__BEGIN_DECLS - -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - gdb doesn't really use excluded. Fields present but not used are - marked with "XXX". */ -struct elf_prstatus - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ -#if _MIPS_SIM == _ABIN32 - __extension__ unsigned long long int pr_sigpend; - __extension__ unsigned long long int pr_sighold; -#else - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ -#endif - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ -#if _MIPS_SIM == _ABIN32 - __extension__ unsigned long long int pr_flag; -#else - unsigned long int pr_flag; /* Flags. */ -#endif - long pr_uid; - long pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore habe only ine PID type. */ -typedef __pid_t lwpid_t; - - -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/mips/sys/sysmips.h b/sysdeps/unix/sysv/linux/mips/sys/sysmips.h deleted file mode 100644 index a059b7094d..0000000000 --- a/sysdeps/unix/sysv/linux/mips/sys/sysmips.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_SYSMIPS_H -#define _SYS_SYSMIPS_H 1 - -#include - -/* - * Commands for the sysmips(2) call - * - * sysmips(2) is deprecated - though some existing software uses it. - * We only support the following commands. Sysmips exists for compatibility - * purposes only so new software should avoid it. - */ -#define SETNAME 1 /* set hostname */ -#define FLUSH_CACHE 3 /* writeback and invalidate caches */ -#define MIPS_FIXADE 7 /* control address error fixing */ -#define MIPS_RDNVRAM 10 /* read NVRAM */ -#define MIPS_ATOMIC_SET 2001 /* atomically set variable */ - -__BEGIN_DECLS - -extern int sysmips (const int __cmd, ...) __THROW; - -__END_DECLS - -#endif /* sys/sysmips.h */ diff --git a/sysdeps/unix/sysv/linux/mips/sys/ucontext.h b/sysdeps/unix/sysv/linux/mips/sys/ucontext.h deleted file mode 100644 index 048e9a46b7..0000000000 --- a/sysdeps/unix/sysv/linux/mips/sys/ucontext.h +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Don't rely on this, the interface is currently messed up and may need to - be broken to be fixed. */ -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - -#include - - -/* Type for general register. Even in o32 we assume 64-bit registers, - like the kernel. */ -__extension__ typedef unsigned long long int greg_t; - -/* Number of general registers. */ -#define __NGREG 32 -#define __NFPREG 32 -#ifdef __USE_MISC -# define NGREG __NGREG -# define NFPREG __NFPREG -#endif - -/* Container for all general registers. */ -typedef greg_t gregset_t[__NGREG]; - -#ifdef __USE_MISC -# define __ctx(fld) fld -#else -# define __ctx(fld) __ ## fld -#endif - -/* Container for all FPU registers. */ -typedef struct fpregset { - union { - double __ctx(fp_dregs)[__NFPREG]; - struct { - float _fp_fregs; - unsigned int _fp_pad; - } __ctx(fp_fregs)[__NFPREG]; - } __ctx(fp_r); -} fpregset_t; - - -/* Context to describe whole processor state. */ -#if _MIPS_SIM == _ABIO32 -/* Earlier versions of glibc for mips had an entirely different - definition of mcontext_t, that didn't even resemble the - corresponding kernel data structure. Fortunately, makecontext, - [gs]etcontext et all were not implemented back then, so this can - still be rectified. */ -typedef struct - { - unsigned int __ctx(regmask); - unsigned int __ctx(status); - greg_t __ctx(pc); - gregset_t __ctx(gregs); - fpregset_t __ctx(fpregs); - unsigned int __ctx(fp_owned); - unsigned int __ctx(fpc_csr); - unsigned int __ctx(fpc_eir); - unsigned int __ctx(used_math); - unsigned int __ctx(dsp); - greg_t __ctx(mdhi); - greg_t __ctx(mdlo); - unsigned long __ctx(hi1); - unsigned long __ctx(lo1); - unsigned long __ctx(hi2); - unsigned long __ctx(lo2); - unsigned long __ctx(hi3); - unsigned long __ctx(lo3); - } mcontext_t; -#else -typedef struct - { - gregset_t __ctx(gregs); - fpregset_t __ctx(fpregs); - greg_t __ctx(mdhi); - greg_t __ctx(hi1); - greg_t __ctx(hi2); - greg_t __ctx(hi3); - greg_t __ctx(mdlo); - greg_t __ctx(lo1); - greg_t __ctx(lo2); - greg_t __ctx(lo3); - greg_t __ctx(pc); - unsigned int __ctx(fpc_csr); - unsigned int __ctx(used_math); - unsigned int __ctx(dsp); - unsigned int __glibc_reserved1; - } mcontext_t; -#endif - -#undef __ctx - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - sigset_t uc_sigmask; - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/mips/sys/user.h b/sysdeps/unix/sysv/linux/mips/sys/user.h deleted file mode 100644 index 9d11d65880..0000000000 --- a/sysdeps/unix/sysv/linux/mips/sys/user.h +++ /dev/null @@ -1,210 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_USER_H -#define _SYS_USER_H 1 - -#include -#include - -/* The whole purpose of this file is for GDB and GDB only. Don't read - too much into it. Don't use it for anything other than GDB unless - you know what you are doing. */ - -/* #include */ -/* Instead of including the kernel header, that will vary depending on - whether the 32- or the 64-bit kernel is installed, we paste its - contents here. Note that the fact that the file is inline here, - instead of included separately, doesn't change in any way the - licensing status of a program that includes user.h. Since this is - for gdb alone, and gdb is GPLed, no surprises here. */ -#if _MIPS_SIM == _ABIO32 -/* - * Various register offset definitions for debuggers, core file - * examiners and whatnot. - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file "COPYING" in the main directory of this archive - * for more details. - * - * Copyright (C) 1995, 1999 by Ralf Baechle - */ -#ifndef __ASM_MIPS_REG_H -#define __ASM_MIPS_REG_H - -/* - * This defines/structures correspond to the register layout on stack - - * if the order here is changed, it needs to be updated in - * include/asm-mips/stackframe.h - */ -#define EF_REG0 6 -#define EF_REG1 7 -#define EF_REG2 8 -#define EF_REG3 9 -#define EF_REG4 10 -#define EF_REG5 11 -#define EF_REG6 12 -#define EF_REG7 13 -#define EF_REG8 14 -#define EF_REG9 15 -#define EF_REG10 16 -#define EF_REG11 17 -#define EF_REG12 18 -#define EF_REG13 19 -#define EF_REG14 20 -#define EF_REG15 21 -#define EF_REG16 22 -#define EF_REG17 23 -#define EF_REG18 24 -#define EF_REG19 25 -#define EF_REG20 26 -#define EF_REG21 27 -#define EF_REG22 28 -#define EF_REG23 29 -#define EF_REG24 30 -#define EF_REG25 31 -/* - * k0/k1 unsaved - */ -#define EF_REG28 34 -#define EF_REG29 35 -#define EF_REG30 36 -#define EF_REG31 37 - -/* - * Saved special registers - */ -#define EF_LO 38 -#define EF_HI 39 - -#define EF_CP0_EPC 40 -#define EF_CP0_BADVADDR 41 -#define EF_CP0_STATUS 42 -#define EF_CP0_CAUSE 43 - -#define EF_SIZE 180 /* size in bytes */ - -#endif /* __ASM_MIPS_REG_H */ - -#else /* _MIPS_SIM != _ABIO32 */ - -/* - * Various register offset definitions for debuggers, core file - * examiners and whatnot. - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file "COPYING" in the main directory of this archive - * for more details. - * - * Copyright (C) 1995, 1999 Ralf Baechle - * Copyright (C) 1995, 1999 Silicon Graphics - */ -#ifndef _ASM_REG_H -#define _ASM_REG_H - -/* - * This defines/structures correspond to the register layout on stack - - * if the order here is changed, it needs to be updated in - * include/asm-mips/stackframe.h - */ -#define EF_REG0 0 -#define EF_REG1 1 -#define EF_REG2 2 -#define EF_REG3 3 -#define EF_REG4 4 -#define EF_REG5 5 -#define EF_REG6 6 -#define EF_REG7 7 -#define EF_REG8 8 -#define EF_REG9 9 -#define EF_REG10 10 -#define EF_REG11 11 -#define EF_REG12 12 -#define EF_REG13 13 -#define EF_REG14 14 -#define EF_REG15 15 -#define EF_REG16 16 -#define EF_REG17 17 -#define EF_REG18 18 -#define EF_REG19 19 -#define EF_REG20 20 -#define EF_REG21 21 -#define EF_REG22 22 -#define EF_REG23 23 -#define EF_REG24 24 -#define EF_REG25 25 -/* - * k0/k1 unsaved - */ -#define EF_REG28 28 -#define EF_REG29 29 -#define EF_REG30 30 -#define EF_REG31 31 - -/* - * Saved special registers - */ -#define EF_LO 32 -#define EF_HI 33 - -#define EF_CP0_EPC 34 -#define EF_CP0_BADVADDR 35 -#define EF_CP0_STATUS 36 -#define EF_CP0_CAUSE 37 - -#define EF_SIZE 304 /* size in bytes */ - -#endif /* _ASM_REG_H */ - -#endif /* _MIPS_SIM != _ABIO32 */ - -#if _MIPS_SIM == _ABIO32 - -struct user -{ - unsigned long regs[EF_SIZE/4+64]; /* integer and fp regs */ - size_t u_tsize; /* text size (pages) */ - size_t u_dsize; /* data size (pages) */ - size_t u_ssize; /* stack size (pages) */ - unsigned long start_code; /* text starting address */ - unsigned long start_data; /* data starting address */ - unsigned long start_stack; /* stack starting address */ - long int signal; /* signal causing core dump */ - void* u_ar0; /* help gdb find registers */ - unsigned long magic; /* identifies a core file */ - char u_comm[32]; /* user command name */ -}; - -#else - -struct user { - __extension__ unsigned long regs[EF_SIZE/8+64]; /* integer and fp regs */ - __extension__ unsigned long u_tsize; /* text size (pages) */ - __extension__ unsigned long u_dsize; /* data size (pages) */ - __extension__ unsigned long u_ssize; /* stack size (pages) */ - __extension__ unsigned long long start_code; /* text starting address */ - __extension__ unsigned long long start_data; /* data starting address */ - __extension__ unsigned long long start_stack; /* stack starting address */ - __extension__ long long signal; /* signal causing core dump */ - __extension__ unsigned long long u_ar0; /* help gdb find registers */ - __extension__ unsigned long long magic; /* identifies a core file */ - char u_comm[32]; /* user command name */ -}; - -#endif - -#endif /* _SYS_USER_H */ diff --git a/sysdeps/unix/sysv/linux/mips/syscalls.list b/sysdeps/unix/sysv/linux/mips/syscalls.list deleted file mode 100644 index f3621cdd51..0000000000 --- a/sysdeps/unix/sysv/linux/mips/syscalls.list +++ /dev/null @@ -1,23 +0,0 @@ -# File name Caller Syscall name Args Strong name Weak names - -# -# Calls for compatibility with existing MIPS OS implementations and -# compilers. -# -cachectl - cachectl i:pii __cachectl cachectl -cacheflush - cacheflush i:pii _flush_cache cacheflush -sysmips - sysmips i:iiii __sysmips sysmips - -# -# Socket functions; Linux/MIPS doesn't use the socketcall(2) wrapper; -# it's provided for compatibility, though. -# -bind - bind i:ipi __bind bind -getpeername - getpeername i:ipp __getpeername getpeername -getsockname - getsockname i:ipp __getsockname getsockname -getsockopt - getsockopt i:iiiBN __getsockopt getsockopt -listen - listen i:ii __listen listen -setsockopt - setsockopt i:iiibn __setsockopt setsockopt -shutdown - shutdown i:ii __shutdown shutdown -socket - socket i:iii __socket socket -socketpair - socketpair i:iiif __socketpair socketpair diff --git a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h deleted file mode 100644 index 0e45f00242..0000000000 --- a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h +++ /dev/null @@ -1,190 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# ifdef __PIC__ -# define PSEUDO_CPLOAD .cpload t9; -# define PSEUDO_ERRJMP la t9, __syscall_error; jr t9; -# define PSEUDO_SAVEGP sw gp, 32(sp); cfi_rel_offset (gp, 32); -# define PSEUDO_LOADGP lw gp, 32(sp); -# else -# define PSEUDO_CPLOAD -# define PSEUDO_ERRJMP j __syscall_error; -# define PSEUDO_SAVEGP -# define PSEUDO_LOADGP -# endif - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .align 2; \ - .set nomips16; \ - L(pseudo_start): \ - cfi_startproc; \ - 99: PSEUDO_ERRJMP \ - .type __##syscall_name##_nocancel, @function; \ - .globl __##syscall_name##_nocancel; \ - __##syscall_name##_nocancel: \ - .set noreorder; \ - PSEUDO_CPLOAD \ - li v0, SYS_ify(syscall_name); \ - syscall; \ - .set reorder; \ - bne a3, zero, 99b; \ - ret; \ - cfi_endproc; \ - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ - ENTRY (name) \ - .set noreorder; \ - PSEUDO_CPLOAD \ - .set reorder; \ - SINGLE_THREAD_P(v1); \ - bne zero, v1, L(pseudo_cancel); \ - .set noreorder; \ - li v0, SYS_ify(syscall_name); \ - syscall; \ - .set reorder; \ - bne a3, zero, 99b; \ - ret; \ - L(pseudo_cancel): \ - SAVESTK_##args; \ - sw ra, 28(sp); \ - cfi_rel_offset (ra, 28); \ - PSEUDO_SAVEGP \ - PUSHARGS_##args; /* save syscall args */ \ - CENABLE; \ - PSEUDO_LOADGP \ - sw v0, 44(sp); /* save mask */ \ - POPARGS_##args; /* restore syscall args */ \ - .set noreorder; \ - li v0, SYS_ify (syscall_name); \ - syscall; \ - .set reorder; \ - sw v0, 36(sp); /* save syscall result */ \ - sw a3, 40(sp); /* save syscall error flag */ \ - lw a0, 44(sp); /* pass mask as arg1 */ \ - CDISABLE; \ - PSEUDO_LOADGP \ - lw v0, 36(sp); /* restore syscall result */ \ - lw a3, 40(sp); /* restore syscall error flag */ \ - lw ra, 28(sp); /* restore return address */ \ - .set noreorder; \ - bne a3, zero, 99b; \ - RESTORESTK; \ - L(pseudo_end): \ - .set reorder; - -# undef PSEUDO_END -# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym - -# define PUSHARGS_0 /* nothing to do */ -# define PUSHARGS_1 PUSHARGS_0 sw a0, 0(sp); cfi_rel_offset (a0, 0); -# define PUSHARGS_2 PUSHARGS_1 sw a1, 4(sp); cfi_rel_offset (a1, 4); -# define PUSHARGS_3 PUSHARGS_2 sw a2, 8(sp); cfi_rel_offset (a2, 8); -# define PUSHARGS_4 PUSHARGS_3 sw a3, 12(sp); cfi_rel_offset (a3, 12); -# define PUSHARGS_5 PUSHARGS_4 /* handled by SAVESTK_## */ -# define PUSHARGS_6 PUSHARGS_5 -# define PUSHARGS_7 PUSHARGS_6 - -# define POPARGS_0 /* nothing to do */ -# define POPARGS_1 POPARGS_0 lw a0, 0(sp); -# define POPARGS_2 POPARGS_1 lw a1, 4(sp); -# define POPARGS_3 POPARGS_2 lw a2, 8(sp); -# define POPARGS_4 POPARGS_3 lw a3, 12(sp); -# define POPARGS_5 POPARGS_4 /* args already in new stackframe */ -# define POPARGS_6 POPARGS_5 -# define POPARGS_7 POPARGS_6 - - -# define STKSPACE 48 -# define SAVESTK_0 subu sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE) -# define SAVESTK_1 SAVESTK_0 -# define SAVESTK_2 SAVESTK_1 -# define SAVESTK_3 SAVESTK_2 -# define SAVESTK_4 SAVESTK_3 -# define SAVESTK_5 lw t0, 16(sp); \ - SAVESTK_0; \ - sw t0, 16(sp) - -# define SAVESTK_6 lw t0, 16(sp); \ - lw t1, 20(sp); \ - SAVESTK_0; \ - sw t0, 16(sp); \ - sw t1, 20(sp) - -# define SAVESTK_7 lw t0, 16(sp); \ - lw t1, 20(sp); \ - lw t2, 24(sp); \ - SAVESTK_0; \ - sw t0, 16(sp); \ - sw t1, 20(sp); \ - sw t2, 24(sp) - -# define RESTORESTK addu sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE) - - -# ifdef __PIC__ -/* We use jalr rather than jal. This means that the assembler will not - automatically restore $gp (in case libc has multiple GOTs) so we must - do it manually - which we have to do anyway since we don't use .cprestore. - It also shuts up the assembler warning about not using .cprestore. */ -# define PSEUDO_JMP(sym) la t9, sym; jalr t9; -# else -# define PSEUDO_JMP(sym) jal sym; -# endif - -# if IS_IN (libpthread) -# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel) -# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel) -# elif IS_IN (librt) -# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel) -# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel) -# else -# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel) -# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel) -# endif - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) \ - == 0, 1) -# else -# define SINGLE_THREAD_P(reg) \ - READ_THREAD_POINTER(reg); \ - lw reg, MULTIPLE_THREADS_OFFSET(reg) -#endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P 1 -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/mips/ucontext_i.sym b/sysdeps/unix/sysv/linux/mips/ucontext_i.sym deleted file mode 100644 index f14b886407..0000000000 --- a/sysdeps/unix/sysv/linux/mips/ucontext_i.sym +++ /dev/null @@ -1,52 +0,0 @@ -#include -#include -#include -#include - -#include - --- Constants used by the rt_sigprocmask call. - -SIG_BLOCK -SIG_SETMASK - -_NSIG8 (_NSIG / 8) - --- Offsets of the fields in the kernel rt_sigframe_t structure. -#define rt_sigframe(member) offsetof (kernel_rt_sigframe_t, member) - -RT_SIGFRAME_UCONTEXT rt_sigframe (rs_uc) - -RT_SIGFRAME_SIZE sizeof (kernel_rt_sigframe_t) - --- Offsets of the fields in the ucontext_t structure. -#define ucontext(member) offsetof (ucontext_t, member) -#define stack(member) ucontext (uc_stack.member) -#define mcontext(member) ucontext (uc_mcontext.member) - -UCONTEXT_FLAGS ucontext (uc_flags) -UCONTEXT_LINK ucontext (uc_link) -UCONTEXT_STACK ucontext (uc_stack) -UCONTEXT_MCONTEXT ucontext (uc_mcontext) -UCONTEXT_SIGMASK ucontext (uc_sigmask) - -STACK_SP stack (ss_sp) -STACK_SIZE stack (ss_size) -STACK_FLAGS stack (ss_flags) - -MCONTEXT_GREGS mcontext (gregs) -MCONTEXT_FPREGS mcontext (fpregs) -MCONTEXT_MDHI mcontext (mdhi) -MCONTEXT_HI1 mcontext (hi1) -MCONTEXT_HI2 mcontext (hi2) -MCONTEXT_HI3 mcontext (hi3) -MCONTEXT_MDLO mcontext (mdlo) -MCONTEXT_LO1 mcontext (lo1) -MCONTEXT_LO2 mcontext (lo2) -MCONTEXT_LO3 mcontext (lo3) -MCONTEXT_PC mcontext (pc) -MCONTEXT_FPC_CSR mcontext (fpc_csr) -MCONTEXT_USED_MATH mcontext (used_math) -MCONTEXT_DSP mcontext (dsp) - -UCONTEXT_SIZE sizeof (ucontext_t) diff --git a/sysdeps/unix/sysv/linux/mips/ustat.c b/sysdeps/unix/sysv/linux/mips/ustat.c deleted file mode 100644 index 79e0736db0..0000000000 --- a/sysdeps/unix/sysv/linux/mips/ustat.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -#include -#include - -int -ustat (dev_t dev, struct ustat *ubuf) -{ - unsigned long k_dev; - - /* We must convert the value to dev_t type used by the kernel. */ - k_dev = ((major (dev) & 0xff) << 8) | (minor (dev) & 0xff); - - return INLINE_SYSCALL (ustat, 2, k_dev, ubuf); -} diff --git a/sysdeps/unix/sysv/linux/mips/vfork.S b/sysdeps/unix/sysv/linux/mips/vfork.S deleted file mode 100644 index f9763ca615..0000000000 --- a/sysdeps/unix/sysv/linux/mips/vfork.S +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* vfork() is just a special case of clone(). */ - -#include -#include -#include -#include -#include - - -/* int vfork() */ - - .text - .set nomips16 -LOCALSZ= 1 -FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK -GPOFF= FRAMESZ-(1*SZREG) -NESTED(__libc_vfork,FRAMESZ,sp) -#ifdef __PIC__ - SETUP_GP -#endif - PTR_SUBU sp, FRAMESZ - cfi_adjust_cfa_offset (FRAMESZ) - SETUP_GP64_REG (a5, __libc_vfork) -#ifdef __PIC__ - SAVE_GP (GPOFF) -#endif -#ifdef PROF -# if (_MIPS_SIM != _ABIO32) - PTR_S a5, GPOFF(sp) -# endif - .set noat - move $1, ra -# if (_MIPS_SIM == _ABIO32) - subu sp,sp,8 -# endif - jal _mcount - .set at -# if (_MIPS_SIM != _ABIO32) - PTR_L a5, GPOFF(sp) -# endif -#endif - - PTR_ADDU sp, FRAMESZ - cfi_adjust_cfa_offset (-FRAMESZ) - - li a0, 0x4112 /* CLONE_VM | CLONE_VFORK | SIGCHLD */ - move a1, sp - - /* Do the system call */ - li v0,__NR_clone - syscall - - cfi_remember_state - bnez a3,L(error) - - /* Successful return from the parent or child. */ - RESTORE_GP64_REG - ret - - /* Something bad happened -- no child created. */ -L(error): - cfi_restore_state -#ifdef __PIC__ - PTR_LA t9, __syscall_error - RESTORE_GP64_REG - jr t9 -#else - RESTORE_GP64_REG - j __syscall_error -#endif - END(__libc_vfork) - -#if IS_IN (libc) -weak_alias (__libc_vfork, vfork) -strong_alias (__libc_vfork, __vfork) -libc_hidden_def (__vfork) -#endif diff --git a/sysdeps/unix/sysv/linux/mips/xstatconv.c b/sysdeps/unix/sysv/linux/mips/xstatconv.c deleted file mode 100644 index b609b3d4f6..0000000000 --- a/sysdeps/unix/sysv/linux/mips/xstatconv.c +++ /dev/null @@ -1,201 +0,0 @@ -/* Convert between the kernel's `struct stat' format, and libc's. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -#include - -int -__xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf) -{ - switch (vers) - { - case _STAT_VER_KERNEL: - /* Nothing to do. The struct is in the form the kernel expects. - We should have short-circuted before we got here, but for - completeness... */ - *(struct kernel_stat *) ubuf = *kbuf; - break; - - case _STAT_VER_LINUX: - { - struct stat *buf = ubuf; - - /* Convert to current kernel version of `struct stat'. */ - buf->st_dev = kbuf->st_dev; - memset (&buf->st_pad1, 0, sizeof (buf->st_pad1)); - buf->st_ino = kbuf->st_ino; - /* Check for overflow. */ - if (buf->st_ino != kbuf->st_ino) - { - __set_errno (EOVERFLOW); - return -1; - } - buf->st_mode = kbuf->st_mode; - buf->st_nlink = kbuf->st_nlink; - buf->st_uid = kbuf->st_uid; - buf->st_gid = kbuf->st_gid; - buf->st_rdev = kbuf->st_rdev; - memset (&buf->st_pad2, 0, sizeof (buf->st_pad2)); - buf->st_size = kbuf->st_size; - /* Check for overflow. */ - if (buf->st_size != kbuf->st_size) - { - __set_errno (EOVERFLOW); - return -1; - } - buf->st_pad3 = 0; - buf->st_atim.tv_sec = kbuf->st_atime_sec; - buf->st_atim.tv_nsec = kbuf->st_atime_nsec; - buf->st_mtim.tv_sec = kbuf->st_mtime_sec; - buf->st_mtim.tv_nsec = kbuf->st_mtime_nsec; - buf->st_ctim.tv_sec = kbuf->st_ctime_sec; - buf->st_ctim.tv_nsec = kbuf->st_ctime_nsec; - buf->st_blksize = kbuf->st_blksize; - buf->st_blocks = kbuf->st_blocks; - /* Check for overflow. */ - if (buf->st_blocks != kbuf->st_blocks) - { - __set_errno (EOVERFLOW); - return -1; - } - memset (&buf->st_pad5, 0, sizeof (buf->st_pad5)); - } - break; - - default: - __set_errno (EINVAL); - return -1; - } - - return 0; -} - -int -__xstat64_conv (int vers, struct kernel_stat *kbuf, void *ubuf) -{ -#if XSTAT_IS_XSTAT64 - return xstat_conv (vers, kbuf, ubuf); -#else - switch (vers) - { - case _STAT_VER_LINUX: - { - struct stat64 *buf = ubuf; - - buf->st_dev = kbuf->st_dev; - memset (&buf->st_pad1, 0, sizeof (buf->st_pad1)); - buf->st_ino = kbuf->st_ino; - buf->st_mode = kbuf->st_mode; - buf->st_nlink = kbuf->st_nlink; - buf->st_uid = kbuf->st_uid; - buf->st_gid = kbuf->st_gid; - buf->st_rdev = kbuf->st_rdev; - memset (&buf->st_pad2, 0, sizeof (buf->st_pad2)); - buf->st_pad3 = 0; - buf->st_size = kbuf->st_size; - buf->st_blksize = kbuf->st_blksize; - buf->st_blocks = kbuf->st_blocks; - - buf->st_atim.tv_sec = kbuf->st_atime_sec; - buf->st_atim.tv_nsec = kbuf->st_atime_nsec; - buf->st_mtim.tv_sec = kbuf->st_mtime_sec; - buf->st_mtim.tv_nsec = kbuf->st_mtime_nsec; - buf->st_ctim.tv_sec = kbuf->st_ctime_sec; - buf->st_ctim.tv_nsec = kbuf->st_ctime_nsec; - - memset (&buf->st_pad4, 0, sizeof (buf->st_pad4)); - } - break; - - /* If struct stat64 is different from struct stat then - _STAT_VER_KERNEL does not make sense. */ - case _STAT_VER_KERNEL: - default: - __set_errno (EINVAL); - return -1; - } - - return 0; -#endif -} - -#if _MIPS_SIM == _ABIO32 -int -__xstat32_conv (int vers, struct stat64 *kbuf, struct stat *buf) -{ - switch (vers) - { - case _STAT_VER_LINUX: - /* Convert current kernel version of `struct stat64' to - `struct stat'. The layout of the fields in the kernel's - stat64 is the same as that in the user stat64; the only - difference is that the latter has more trailing padding. */ - buf->st_dev = kbuf->st_dev; - memset (&buf->st_pad1, 0, sizeof (buf->st_pad1)); - buf->st_ino = kbuf->st_ino; - /* Check for overflow. */ - if (buf->st_ino != kbuf->st_ino) - { - __set_errno (EOVERFLOW); - return -1; - } - buf->st_mode = kbuf->st_mode; - buf->st_nlink = kbuf->st_nlink; - buf->st_uid = kbuf->st_uid; - buf->st_gid = kbuf->st_gid; - buf->st_rdev = kbuf->st_rdev; - memset (&buf->st_pad2, 0, sizeof (buf->st_pad2)); - buf->st_size = kbuf->st_size; - /* Check for overflow. */ - if (buf->st_size != kbuf->st_size) - { - __set_errno (EOVERFLOW); - return -1; - } - buf->st_pad3 = 0; - buf->st_atim.tv_sec = kbuf->st_atim.tv_sec; - buf->st_atim.tv_nsec = kbuf->st_atim.tv_nsec; - buf->st_mtim.tv_sec = kbuf->st_mtim.tv_sec; - buf->st_mtim.tv_nsec = kbuf->st_mtim.tv_nsec; - buf->st_ctim.tv_sec = kbuf->st_ctim.tv_sec; - buf->st_ctim.tv_nsec = kbuf->st_ctim.tv_nsec; - buf->st_blksize = kbuf->st_blksize; - buf->st_blocks = kbuf->st_blocks; - /* Check for overflow. */ - if (buf->st_blocks != kbuf->st_blocks) - { - __set_errno (EOVERFLOW); - return -1; - } - memset (&buf->st_pad5, 0, sizeof (buf->st_pad5)); - break; - - /* If struct stat64 is different from struct stat then - _STAT_VER_KERNEL does not make sense. */ - case _STAT_VER_KERNEL: - default: - __set_errno (EINVAL); - return -1; - } - - return 0; -} -#endif /* _MIPS_SIM == _ABIO32 */ diff --git a/sysdeps/unix/sysv/linux/mmap.c b/sysdeps/unix/sysv/linux/mmap.c deleted file mode 100644 index b1f229f19c..0000000000 --- a/sysdeps/unix/sysv/linux/mmap.c +++ /dev/null @@ -1,51 +0,0 @@ -/* mmap - map files or devices into memory. Linux version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#ifndef __OFF_T_MATCHES_OFF64_T - -/* An architecture may override this. */ -# ifndef MMAP_ADJUST_OFFSET -# define MMAP_ADJUST_OFFSET(offset) offset -# endif - -void * -__mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset) -{ - MMAP_CHECK_PAGE_UNIT (); - - if (offset & MMAP_OFF_LOW_MASK) - return (__ptr_t) INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - -#ifdef __NR_mmap2 - return (void *) MMAP_CALL (mmap2, addr, len, prot, flags, fd, - offset / (uint32_t) MMAP2_PAGE_UNIT); -#else - return (void *) MMAP_CALL (mmap, addr, len, prot, flags, fd, - MMAP_ADJUST_OFFSET (offset)); -#endif -} -weak_alias (__mmap, mmap) - -#endif /* __OFF_T_MATCHES_OFF64_T */ diff --git a/sysdeps/unix/sysv/linux/mmap64.c b/sysdeps/unix/sysv/linux/mmap64.c deleted file mode 100644 index d3ea279afe..0000000000 --- a/sysdeps/unix/sysv/linux/mmap64.c +++ /dev/null @@ -1,60 +0,0 @@ -/* mmap - map files or devices into memory. Linux version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* To avoid silent truncation of offset when using mmap2, do not accept - offset larger than 1 << (page_shift + off_t bits). For archictures with - 32 bits off_t and page size of 4096 it would be 1^44. */ -#define MMAP_OFF_HIGH_MASK \ - ((-(MMAP2_PAGE_UNIT << 1) << (8 * sizeof (off_t) - 1))) - -#define MMAP_OFF_MASK (MMAP_OFF_HIGH_MASK | MMAP_OFF_LOW_MASK) - -/* An architecture may override this. */ -#ifndef MMAP_PREPARE -# define MMAP_PREPARE(addr, len, prot, flags, fd, offset) -#endif - -void * -__mmap64 (void *addr, size_t len, int prot, int flags, int fd, off64_t offset) -{ - MMAP_CHECK_PAGE_UNIT (); - - if (offset & MMAP_OFF_MASK) - return (void *) INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - - MMAP_PREPARE (addr, len, prot, flags, fd, offset); -#ifdef __NR_mmap2 - return (void *) MMAP_CALL (mmap2, addr, len, prot, flags, fd, - (off_t) (offset / MMAP2_PAGE_UNIT)); -#else - return (void *) MMAP_CALL (mmap, addr, len, prot, flags, fd, offset); -#endif -} -weak_alias (__mmap64, mmap64) - -#ifdef __OFF_T_MATCHES_OFF64_T -weak_alias (__mmap64, mmap) -weak_alias (__mmap64, __mmap) -#endif diff --git a/sysdeps/unix/sysv/linux/mmap_internal.h b/sysdeps/unix/sysv/linux/mmap_internal.h deleted file mode 100644 index 499e389605..0000000000 --- a/sysdeps/unix/sysv/linux/mmap_internal.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Common mmap definition for Linux implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef MMAP_INTERNAL_LINUX_H -#define MMAP_INTERNAL_LINUX_H 1 - -/* This is the minimum mmap2 unit size accept by the kernel. An architecture - with multiple minimum page sizes (such as m68k) might define it as -1 and - thus it will queried at runtime. */ -#ifndef MMAP2_PAGE_UNIT -# define MMAP2_PAGE_UNIT 4096ULL -#endif - -#if MMAP2_PAGE_UNIT == -1 -static int page_unit; - -# define MMAP_CHECK_PAGE_UNIT() \ - if (page_unit == 0) \ - page_unit = __getpagesize (); -#else -# define page_unit MMAP2_PAGE_UNIT -# define MMAP_CHECK_PAGE_UNIT() -#endif - -/* Do not accept offset not multiple of page size. */ -#define MMAP_OFF_LOW_MASK (MMAP2_PAGE_UNIT - 1) - -/* An architecture may override this. */ -#ifndef MMAP_CALL -# define MMAP_CALL(__nr, __addr, __len, __prot, __flags, __fd, __offset) \ - INLINE_SYSCALL_CALL (__nr, __addr, __len, __prot, __flags, __fd, __offset) -#endif - -#endif /* MMAP_INTERNAL_LINUX_H */ diff --git a/sysdeps/unix/sysv/linux/mq_close.c b/sysdeps/unix/sysv/linux/mq_close.c deleted file mode 100644 index 67ec2ce8cb..0000000000 --- a/sysdeps/unix/sysv/linux/mq_close.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#ifdef __NR_mq_open - -/* Removes the association between message queue descriptor MQDES and its - message queue. */ -int -mq_close (mqd_t mqdes) -{ - return INLINE_SYSCALL (close, 1, mqdes); -} - -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/mq_getattr.c b/sysdeps/unix/sysv/linux/mq_getattr.c deleted file mode 100644 index 0b3a50500f..0000000000 --- a/sysdeps/unix/sysv/linux/mq_getattr.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#ifdef __NR_mq_getsetattr - -/* Query status and attributes of message queue MQDES. */ -int -mq_getattr (mqd_t mqdes, struct mq_attr *mqstat) -{ - return mq_setattr (mqdes, NULL, mqstat); -} - -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/mq_notify.c b/sysdeps/unix/sysv/linux/mq_notify.c deleted file mode 100644 index 626430ccc7..0000000000 --- a/sysdeps/unix/sysv/linux/mq_notify.c +++ /dev/null @@ -1,282 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contribute by Ulrich Drepper , 2004. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#ifdef __NR_mq_notify - -/* Defined in the kernel headers: */ -#define NOTIFY_COOKIE_LEN 32 /* Length of the cookie used. */ -#define NOTIFY_WOKENUP 1 /* Code for notifcation. */ -#define NOTIFY_REMOVED 2 /* Code for closed message queue - of de-notifcation. */ - - -/* Data structure for the queued notification requests. */ -union notify_data -{ - struct - { - void (*fct) (union sigval); /* The function to run. */ - union sigval param; /* The parameter to pass. */ - pthread_attr_t *attr; /* Attributes to create the thread with. */ - /* NB: on 64-bit machines the struct as a size of 24 bytes. Which means - byte 31 can still be used for returning the status. */ - }; - char raw[NOTIFY_COOKIE_LEN]; -}; - - -/* Keep track of the initialization. */ -static pthread_once_t once = PTHREAD_ONCE_INIT; - - -/* The netlink socket. */ -static int netlink_socket = -1; - - -/* Barrier used to make sure data passed to the new thread is not - resused by the parent. */ -static pthread_barrier_t notify_barrier; - - -/* Modify the signal mask. We move this into a separate function so - that the stack space needed for sigset_t is not deducted from what - the thread can use. */ -static int -__attribute__ ((noinline)) -change_sigmask (int how, sigset_t *oss) -{ - sigset_t ss; - sigfillset (&ss); - return pthread_sigmask (how, &ss, oss); -} - - -/* The function used for the notification. */ -static void * -notification_function (void *arg) -{ - /* Copy the function and parameter so that the parent thread can go - on with its life. */ - volatile union notify_data *data = (volatile union notify_data *) arg; - void (*fct) (union sigval) = data->fct; - union sigval param = data->param; - - /* Let the parent go. */ - (void) __pthread_barrier_wait (¬ify_barrier); - - /* Make the thread detached. */ - (void) pthread_detach (pthread_self ()); - - /* The parent thread has all signals blocked. This is probably a - bit surprising for this thread. So we unblock all of them. */ - (void) change_sigmask (SIG_UNBLOCK, NULL); - - /* Now run the user code. */ - fct (param); - - /* And we are done. */ - return NULL; -} - - -/* Helper thread. */ -static void * -helper_thread (void *arg) -{ - while (1) - { - union notify_data data; - - ssize_t n = __recv (netlink_socket, &data, sizeof (data), - MSG_NOSIGNAL | MSG_WAITALL); - if (n < NOTIFY_COOKIE_LEN) - continue; - - if (data.raw[NOTIFY_COOKIE_LEN - 1] == NOTIFY_WOKENUP) - { - /* Just create the thread as instructed. There is no way to - report a problem with creating a thread. */ - pthread_t th; - if (__builtin_expect (pthread_create (&th, data.attr, - notification_function, &data) - == 0, 0)) - /* Since we passed a pointer to DATA to the new thread we have - to wait until it is done with it. */ - (void) __pthread_barrier_wait (¬ify_barrier); - } - else if (data.raw[NOTIFY_COOKIE_LEN - 1] == NOTIFY_REMOVED) - /* The only state we keep is the copy of the thread attributes. */ - free (data.attr); - } - return NULL; -} - - -static void -reset_once (void) -{ - once = PTHREAD_ONCE_INIT; -} - - -static void -init_mq_netlink (void) -{ - /* This code might be called a second time after fork(). The file - descriptor is inherited from the parent. */ - if (netlink_socket == -1) - { - /* Just a normal netlink socket, not bound. */ - netlink_socket = __socket (AF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, 0); - /* No need to do more if we have no socket. */ - if (netlink_socket == -1) - return; - } - - int err = 1; - - /* Initialize the barrier. */ - if (__builtin_expect (__pthread_barrier_init (¬ify_barrier, NULL, 2) == 0, - 0)) - { - /* Create the helper thread. */ - pthread_attr_t attr; - (void) pthread_attr_init (&attr); - (void) pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); - /* We do not need much stack space, the bare minimum will be enough. */ - (void) pthread_attr_setstacksize (&attr, __pthread_get_minstack (&attr)); - - /* Temporarily block all signals so that the newly created - thread inherits the mask. */ - sigset_t oss; - int have_no_oss = change_sigmask (SIG_BLOCK, &oss); - - pthread_t th; - err = pthread_create (&th, &attr, helper_thread, NULL); - - /* Reset the signal mask. */ - if (!have_no_oss) - pthread_sigmask (SIG_SETMASK, &oss, NULL); - - (void) pthread_attr_destroy (&attr); - - if (err == 0) - { - static int added_atfork; - - if (added_atfork == 0 - && pthread_atfork (NULL, NULL, reset_once) != 0) - { - /* The child thread will call recv() which is a - cancellation point. */ - (void) pthread_cancel (th); - err = 1; - } - else - added_atfork = 1; - } - } - - if (err != 0) - { - close_not_cancel_no_status (netlink_socket); - netlink_socket = -1; - } -} - - -/* Register notification upon message arrival to an empty message queue - MQDES. */ -int -mq_notify (mqd_t mqdes, const struct sigevent *notification) -{ - /* Make sure the type is correctly defined. */ - assert (sizeof (union notify_data) == NOTIFY_COOKIE_LEN); - - /* Special treatment needed for SIGEV_THREAD. */ - if (notification == NULL || notification->sigev_notify != SIGEV_THREAD) - return INLINE_SYSCALL (mq_notify, 2, mqdes, notification); - - /* The kernel cannot directly start threads. This will have to be - done at userlevel. Since we cannot start threads from signal - handlers we have to create a dedicated thread which waits for - notifications for arriving messages and creates threads in - response. */ - - /* Initialize only once. */ - pthread_once (&once, init_mq_netlink); - - /* If we cannot create the netlink socket we cannot provide - SIGEV_THREAD support. */ - if (__glibc_unlikely (netlink_socket == -1)) - { - __set_errno (ENOSYS); - return -1; - } - - /* Create the cookie. It will hold almost all the state. */ - union notify_data data; - memset (&data, '\0', sizeof (data)); - data.fct = notification->sigev_notify_function; - data.param = notification->sigev_value; - - if (notification->sigev_notify_attributes != NULL) - { - /* The thread attribute has to be allocated separately. */ - data.attr = (pthread_attr_t *) malloc (sizeof (pthread_attr_t)); - if (data.attr == NULL) - return -1; - - memcpy (data.attr, notification->sigev_notify_attributes, - sizeof (pthread_attr_t)); - } - - /* Construct the new request. */ - struct sigevent se; - se.sigev_notify = SIGEV_THREAD; - se.sigev_signo = netlink_socket; - se.sigev_value.sival_ptr = &data; - - /* Tell the kernel. */ - int retval = INLINE_SYSCALL (mq_notify, 2, mqdes, &se); - - /* If it failed, free the allocated memory. */ - if (__glibc_unlikely (retval != 0)) - free (data.attr); - - return retval; -} - -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/mq_open.c b/sysdeps/unix/sysv/linux/mq_open.c deleted file mode 100644 index 760f2db342..0000000000 --- a/sysdeps/unix/sysv/linux/mq_open.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#ifdef __NR_mq_open - -/* Establish connection between a process and a message queue NAME and - return message queue descriptor or (mqd_t) -1 on error. OFLAG determines - the type of access used. If O_CREAT is on OFLAG, the third argument is - taken as a `mode_t', the mode of the created message queue, and the fourth - argument is taken as `struct mq_attr *', pointer to message queue - attributes. If the fourth argument is NULL, default attributes are - used. */ -mqd_t -__mq_open (const char *name, int oflag, ...) -{ - if (name[0] != '/') - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - - mode_t mode = 0; - struct mq_attr *attr = NULL; - if (oflag & O_CREAT) - { - va_list ap; - - va_start (ap, oflag); - mode = va_arg (ap, mode_t); - attr = va_arg (ap, struct mq_attr *); - va_end (ap); - } - - return INLINE_SYSCALL (mq_open, 4, name + 1, oflag, mode, attr); -} -strong_alias (__mq_open, mq_open); - -mqd_t -__mq_open_2 (const char *name, int oflag) -{ - if (oflag & O_CREAT) - __fortify_fail ("invalid mq_open call: O_CREAT without mode and attr"); - - return __mq_open (name, oflag); -} -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/mq_receive.c b/sysdeps/unix/sysv/linux/mq_receive.c deleted file mode 100644 index 4c0c34a8ea..0000000000 --- a/sysdeps/unix/sysv/linux/mq_receive.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#ifdef __NR_mq_timedreceive - -/* Receive the oldest from highest priority messages in message queue - MQDES. */ -ssize_t -mq_receive (mqd_t mqdes, char *msg_ptr, size_t msg_len, - unsigned int *msg_prio) -{ - return __mq_timedreceive (mqdes, msg_ptr, msg_len, msg_prio, NULL); -} - -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/mq_send.c b/sysdeps/unix/sysv/linux/mq_send.c deleted file mode 100644 index 0f8e407ac3..0000000000 --- a/sysdeps/unix/sysv/linux/mq_send.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#ifdef __NR_mq_timedsend - -/* Add message pointed by MSG_PTR to message queue MQDES. */ -int -mq_send (mqd_t mqdes, const char *msg_ptr, size_t msg_len, - unsigned int msg_prio) -{ - return __mq_timedsend (mqdes, msg_ptr, msg_len, msg_prio, NULL); -} - -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/mq_timedreceive.c b/sysdeps/unix/sysv/linux/mq_timedreceive.c deleted file mode 100644 index 6d1c145c24..0000000000 --- a/sysdeps/unix/sysv/linux/mq_timedreceive.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Receive a message from a message queue with a timeout. Linux version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Receive the oldest from highest priority messages in message queue - MQDES, stop waiting if ABS_TIMEOUT expires. */ -ssize_t -__mq_timedreceive (mqd_t mqdes, char *__restrict msg_ptr, size_t msg_len, - unsigned int *__restrict msg_prio, - const struct timespec *__restrict abs_timeout) -{ - return SYSCALL_CANCEL (mq_timedreceive, mqdes, msg_ptr, msg_len, msg_prio, - abs_timeout); -} -hidden_def (__mq_timedreceive) -weak_alias (__mq_timedreceive, mq_timedreceive) -hidden_weak (mq_timedreceive) diff --git a/sysdeps/unix/sysv/linux/mq_timedsend.c b/sysdeps/unix/sysv/linux/mq_timedsend.c deleted file mode 100644 index 799555440e..0000000000 --- a/sysdeps/unix/sysv/linux/mq_timedsend.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Send a message to a message queue with a timeout. Linux version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Add message pointed by MSG_PTR to message queue MQDES, stop blocking - on full message queue if ABS_TIMEOUT expires. */ -int -__mq_timedsend (mqd_t mqdes, const char *msg_ptr, size_t msg_len, - unsigned int msg_prio, const struct timespec *abs_timeout) -{ - return SYSCALL_CANCEL (mq_timedsend, mqdes, msg_ptr, msg_len, msg_prio, - abs_timeout); -} -hidden_def (__mq_timedsend) -weak_alias (__mq_timedsend, mq_timedsend) -hidden_weak (mq_timedsend) diff --git a/sysdeps/unix/sysv/linux/mq_unlink.c b/sysdeps/unix/sysv/linux/mq_unlink.c deleted file mode 100644 index f635293f8a..0000000000 --- a/sysdeps/unix/sysv/linux/mq_unlink.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#ifdef __NR_mq_unlink - -/* Remove message queue named NAME. */ -int -mq_unlink (const char *name) -{ - if (name[0] != '/') - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - - INTERNAL_SYSCALL_DECL (err); - int ret = INTERNAL_SYSCALL (mq_unlink, err, 1, name + 1); - - /* While unlink can return either EPERM or EACCES, mq_unlink should - return just EACCES. */ - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (ret, err))) - { - ret = INTERNAL_SYSCALL_ERRNO (ret, err); - if (ret == EPERM) - ret = EACCES; - return INLINE_SYSCALL_ERROR_RETURN_VALUE (ret); - } - - return ret; -} - -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/msgctl.c b/sysdeps/unix/sysv/linux/msgctl.c deleted file mode 100644 index e5ae621420..0000000000 --- a/sysdeps/unix/sysv/linux/msgctl.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#ifndef DEFAULT_VERSION -# define DEFAULT_VERSION GLIBC_2_2 -#endif - -int -__new_msgctl (int msqid, int cmd, struct msqid_ds *buf) -{ -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return INLINE_SYSCALL_CALL (msgctl, msqid, cmd | __IPC_64, buf); -#else - return INLINE_SYSCALL_CALL (ipc, IPCOP_msgctl, msqid, cmd | __IPC_64, 0, - buf); -#endif -} -versioned_symbol (libc, __new_msgctl, msgctl, DEFAULT_VERSION); - - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2) -struct __old_msqid_ds -{ - struct __old_ipc_perm msg_perm; /* structure describing operation permission */ - struct msg *__msg_first; /* pointer to first message on queue */ - struct msg *__msg_last; /* pointer to last message on queue */ - __time_t msg_stime; /* time of last msgsnd command */ - __time_t msg_rtime; /* time of last msgrcv command */ - __time_t msg_ctime; /* time of last change */ - struct wait_queue *__wwait; /* ??? */ - struct wait_queue *__rwait; /* ??? */ - unsigned short int __msg_cbytes; /* current number of bytes on queue */ - unsigned short int msg_qnum; /* number of messages currently on queue */ - unsigned short int msg_qbytes; /* max number of bytes allowed on queue */ - __ipc_pid_t msg_lspid; /* pid of last msgsnd() */ - __ipc_pid_t msg_lrpid; /* pid of last msgrcv() */ -}; - -int -attribute_compat_text_section -__old_msgctl (int msqid, int cmd, struct __old_msqid_ds *buf) -{ -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return INLINE_SYSCALL_CALL (msgctl, msqid, cmd | __IPC_64, buf); -#else - return INLINE_SYSCALL_CALL (ipc, IPCOP_msgctl, msqid, cmd, 0, buf); -#endif -} -compat_symbol (libc, __old_msgctl, msgctl, GLIBC_2_0); -#endif diff --git a/sysdeps/unix/sysv/linux/msgget.c b/sysdeps/unix/sysv/linux/msgget.c deleted file mode 100644 index 91e71c208c..0000000000 --- a/sysdeps/unix/sysv/linux/msgget.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Return descriptor for message queue associated with KEY. The MSGFLG - parameter describes how to proceed with clashing of key values. */ - -int -msgget (key_t key, int msgflg) -{ -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return INLINE_SYSCALL_CALL (msgget, key, msgflg); -#else - return INLINE_SYSCALL_CALL (ipc, IPCOP_msgget, key, msgflg, 0, NULL); -#endif -} diff --git a/sysdeps/unix/sysv/linux/msgrcv.c b/sysdeps/unix/sysv/linux/msgrcv.c deleted file mode 100644 index 630284fa3c..0000000000 --- a/sysdeps/unix/sysv/linux/msgrcv.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -ssize_t -__libc_msgrcv (int msqid, void *msgp, size_t msgsz, long int msgtyp, - int msgflg) -{ -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return SYSCALL_CANCEL (msgrcv, msqid, msgp, msgsz, msgtyp, msgflg); -#else - return SYSCALL_CANCEL (ipc, IPCOP_msgrcv, msqid, msgsz, msgflg, - MSGRCV_ARGS (msgp, msgtyp)); -#endif -} -weak_alias (__libc_msgrcv, msgrcv) diff --git a/sysdeps/unix/sysv/linux/msgsnd.c b/sysdeps/unix/sysv/linux/msgsnd.c deleted file mode 100644 index 7884977908..0000000000 --- a/sysdeps/unix/sysv/linux/msgsnd.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__libc_msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg) -{ -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return SYSCALL_CANCEL (msgsnd, msqid, msgp, msgsz, msgflg); -#else - return SYSCALL_CANCEL (ipc, IPCOP_msgsnd, msqid, msgsz, msgflg, - msgp); -#endif -} -weak_alias (__libc_msgsnd, msgsnd) diff --git a/sysdeps/unix/sysv/linux/msync.c b/sysdeps/unix/sysv/linux/msync.c deleted file mode 100644 index 28aba111e0..0000000000 --- a/sysdeps/unix/sysv/linux/msync.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Linux synchronize a file with a memory map implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -msync (void *addr, size_t length, int flags) -{ - return SYSCALL_CANCEL (msync, addr, length, flags); -} diff --git a/sysdeps/unix/sysv/linux/nanosleep.c b/sysdeps/unix/sysv/linux/nanosleep.c deleted file mode 100644 index b352f84344..0000000000 --- a/sysdeps/unix/sysv/linux/nanosleep.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Linux high resolution nanosleep implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Pause execution for a number of nanoseconds. */ -int -__nanosleep (const struct timespec *requested_time, - struct timespec *remaining) -{ - return SYSCALL_CANCEL (nanosleep, requested_time, remaining); -} -libc_hidden_def (__nanosleep) -weak_alias (__nanosleep, nanosleep) diff --git a/sysdeps/unix/sysv/linux/net/ethernet.h b/sysdeps/unix/sysv/linux/net/ethernet.h deleted file mode 100644 index ef89c7b123..0000000000 --- a/sysdeps/unix/sysv/linux/net/ethernet.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Based on the FreeBSD version of this file. Curiously, that file - lacks a copyright in the header. */ - -#ifndef __NET_ETHERNET_H -#define __NET_ETHERNET_H 1 - -#include -#include - -#include /* IEEE 802.3 Ethernet constants */ - -__BEGIN_DECLS - -/* This is a name for the 48 bit ethernet address available on many - systems. */ -struct ether_addr -{ - uint8_t ether_addr_octet[ETH_ALEN]; -} __attribute__ ((__packed__)); - -/* 10Mb/s ethernet header */ -struct ether_header -{ - uint8_t ether_dhost[ETH_ALEN]; /* destination eth addr */ - uint8_t ether_shost[ETH_ALEN]; /* source ether addr */ - uint16_t ether_type; /* packet type ID field */ -} __attribute__ ((__packed__)); - -/* Ethernet protocol ID's */ -#define ETHERTYPE_PUP 0x0200 /* Xerox PUP */ -#define ETHERTYPE_SPRITE 0x0500 /* Sprite */ -#define ETHERTYPE_IP 0x0800 /* IP */ -#define ETHERTYPE_ARP 0x0806 /* Address resolution */ -#define ETHERTYPE_REVARP 0x8035 /* Reverse ARP */ -#define ETHERTYPE_AT 0x809B /* AppleTalk protocol */ -#define ETHERTYPE_AARP 0x80F3 /* AppleTalk ARP */ -#define ETHERTYPE_VLAN 0x8100 /* IEEE 802.1Q VLAN tagging */ -#define ETHERTYPE_IPX 0x8137 /* IPX */ -#define ETHERTYPE_IPV6 0x86dd /* IP protocol version 6 */ -#define ETHERTYPE_LOOPBACK 0x9000 /* used to test interfaces */ - - -#define ETHER_ADDR_LEN ETH_ALEN /* size of ethernet addr */ -#define ETHER_TYPE_LEN 2 /* bytes in type field */ -#define ETHER_CRC_LEN 4 /* bytes in CRC field */ -#define ETHER_HDR_LEN ETH_HLEN /* total octets in header */ -#define ETHER_MIN_LEN (ETH_ZLEN + ETHER_CRC_LEN) /* min packet length */ -#define ETHER_MAX_LEN (ETH_FRAME_LEN + ETHER_CRC_LEN) /* max packet length */ - -/* make sure ethenet length is valid */ -#define ETHER_IS_VALID_LEN(foo) \ - ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN) - -/* - * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have - * (type-ETHERTYPE_TRAIL)*512 bytes of data followed - * by an ETHER type (as given above) and then the (variable-length) header. - */ -#define ETHERTYPE_TRAIL 0x1000 /* Trailer packet */ -#define ETHERTYPE_NTRAILER 16 - -#define ETHERMTU ETH_DATA_LEN -#define ETHERMIN (ETHER_MIN_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN) - -__END_DECLS - -#endif /* net/ethernet.h */ diff --git a/sysdeps/unix/sysv/linux/net/if_arp.h b/sysdeps/unix/sysv/linux/net/if_arp.h deleted file mode 100644 index 9b00644c9d..0000000000 --- a/sysdeps/unix/sysv/linux/net/if_arp.h +++ /dev/null @@ -1,182 +0,0 @@ -/* Definitions for Address Resolution Protocol. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Based on the 4.4BSD and Linux version of this file. */ - -#ifndef _NET_IF_ARP_H -#define _NET_IF_ARP_H 1 - -#include -#include -#include - -__BEGIN_DECLS - -/* Some internals from deep down in the kernel. */ -#define MAX_ADDR_LEN 7 - - -/* This structure defines an ethernet arp header. */ - -/* ARP protocol opcodes. */ -#define ARPOP_REQUEST 1 /* ARP request. */ -#define ARPOP_REPLY 2 /* ARP reply. */ -#define ARPOP_RREQUEST 3 /* RARP request. */ -#define ARPOP_RREPLY 4 /* RARP reply. */ -#define ARPOP_InREQUEST 8 /* InARP request. */ -#define ARPOP_InREPLY 9 /* InARP reply. */ -#define ARPOP_NAK 10 /* (ATM)ARP NAK. */ - -/* See RFC 826 for protocol description. ARP packets are variable - in size; the arphdr structure defines the fixed-length portion. - Protocol type values are the same as those for 10 Mb/s Ethernet. - It is followed by the variable-sized fields ar_sha, arp_spa, - arp_tha and arp_tpa in that order, according to the lengths - specified. Field names used correspond to RFC 826. */ - -struct arphdr - { - unsigned short int ar_hrd; /* Format of hardware address. */ - unsigned short int ar_pro; /* Format of protocol address. */ - unsigned char ar_hln; /* Length of hardware address. */ - unsigned char ar_pln; /* Length of protocol address. */ - unsigned short int ar_op; /* ARP opcode (command). */ -#if 0 - /* Ethernet looks like this : This bit is variable sized - however... */ - unsigned char __ar_sha[ETH_ALEN]; /* Sender hardware address. */ - unsigned char __ar_sip[4]; /* Sender IP address. */ - unsigned char __ar_tha[ETH_ALEN]; /* Target hardware address. */ - unsigned char __ar_tip[4]; /* Target IP address. */ -#endif - }; - - -/* ARP protocol HARDWARE identifiers. */ -#define ARPHRD_NETROM 0 /* From KA9Q: NET/ROM pseudo. */ -#define ARPHRD_ETHER 1 /* Ethernet 10/100Mbps. */ -#define ARPHRD_EETHER 2 /* Experimental Ethernet. */ -#define ARPHRD_AX25 3 /* AX.25 Level 2. */ -#define ARPHRD_PRONET 4 /* PROnet token ring. */ -#define ARPHRD_CHAOS 5 /* Chaosnet. */ -#define ARPHRD_IEEE802 6 /* IEEE 802.2 Ethernet/TR/TB. */ -#define ARPHRD_ARCNET 7 /* ARCnet. */ -#define ARPHRD_APPLETLK 8 /* APPLEtalk. */ -#define ARPHRD_DLCI 15 /* Frame Relay DLCI. */ -#define ARPHRD_ATM 19 /* ATM. */ -#define ARPHRD_METRICOM 23 /* Metricom STRIP (new IANA id). */ -#define ARPHRD_IEEE1394 24 /* IEEE 1394 IPv4 - RFC 2734. */ -#define ARPHRD_EUI64 27 /* EUI-64. */ -#define ARPHRD_INFINIBAND 32 /* InfiniBand. */ - -/* Dummy types for non ARP hardware */ -#define ARPHRD_SLIP 256 -#define ARPHRD_CSLIP 257 -#define ARPHRD_SLIP6 258 -#define ARPHRD_CSLIP6 259 -#define ARPHRD_RSRVD 260 /* Notional KISS type. */ -#define ARPHRD_ADAPT 264 -#define ARPHRD_ROSE 270 -#define ARPHRD_X25 271 /* CCITT X.25. */ -#define ARPHRD_HWX25 272 /* Boards with X.25 in firmware. */ -#define ARPHRD_PPP 512 -#define ARPHRD_CISCO 513 /* Cisco HDLC. */ -#define ARPHRD_HDLC ARPHRD_CISCO -#define ARPHRD_LAPB 516 /* LAPB. */ -#define ARPHRD_DDCMP 517 /* Digital's DDCMP. */ -#define ARPHRD_RAWHDLC 518 /* Raw HDLC. */ - -#define ARPHRD_TUNNEL 768 /* IPIP tunnel. */ -#define ARPHRD_TUNNEL6 769 /* IPIP6 tunnel. */ -#define ARPHRD_FRAD 770 /* Frame Relay Access Device. */ -#define ARPHRD_SKIP 771 /* SKIP vif. */ -#define ARPHRD_LOOPBACK 772 /* Loopback device. */ -#define ARPHRD_LOCALTLK 773 /* Localtalk device. */ -#define ARPHRD_FDDI 774 /* Fiber Distributed Data Interface. */ -#define ARPHRD_BIF 775 /* AP1000 BIF. */ -#define ARPHRD_SIT 776 /* sit0 device - IPv6-in-IPv4. */ -#define ARPHRD_IPDDP 777 /* IP-in-DDP tunnel. */ -#define ARPHRD_IPGRE 778 /* GRE over IP. */ -#define ARPHRD_PIMREG 779 /* PIMSM register interface. */ -#define ARPHRD_HIPPI 780 /* High Performance Parallel I'face. */ -#define ARPHRD_ASH 781 /* (Nexus Electronics) Ash. */ -#define ARPHRD_ECONET 782 /* Acorn Econet. */ -#define ARPHRD_IRDA 783 /* Linux-IrDA. */ -#define ARPHRD_FCPP 784 /* Point to point fibrechanel. */ -#define ARPHRD_FCAL 785 /* Fibrechanel arbitrated loop. */ -#define ARPHRD_FCPL 786 /* Fibrechanel public loop. */ -#define ARPHRD_FCFABRIC 787 /* Fibrechanel fabric. */ -#define ARPHRD_IEEE802_TR 800 /* Magic type ident for TR. */ -#define ARPHRD_IEEE80211 801 /* IEEE 802.11. */ -#define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header. */ -#define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header. */ -#define ARPHRD_IEEE802154 804 /* IEEE 802.15.4 header. */ -#define ARPHRD_IEEE802154_PHY 805 /* IEEE 802.15.4 PHY header. */ - -#define ARPHRD_VOID 0xFFFF /* Void type, nothing is known. */ -#define ARPHRD_NONE 0xFFFE /* Zero header length. */ - - -/* ARP ioctl request. */ -struct arpreq - { - struct sockaddr arp_pa; /* Protocol address. */ - struct sockaddr arp_ha; /* Hardware address. */ - int arp_flags; /* Flags. */ - struct sockaddr arp_netmask; /* Netmask (only for proxy arps). */ - char arp_dev[16]; - }; - -struct arpreq_old - { - struct sockaddr arp_pa; /* Protocol address. */ - struct sockaddr arp_ha; /* Hardware address. */ - int arp_flags; /* Flags. */ - struct sockaddr arp_netmask; /* Netmask (only for proxy arps). */ - }; - -/* ARP Flag values. */ -#define ATF_COM 0x02 /* Completed entry (ha valid). */ -#define ATF_PERM 0x04 /* Permanent entry. */ -#define ATF_PUBL 0x08 /* Publish entry. */ -#define ATF_USETRAILERS 0x10 /* Has requested trailers. */ -#define ATF_NETMASK 0x20 /* Want to use a netmask (only - for proxy entries). */ -#define ATF_DONTPUB 0x40 /* Don't answer this addresses. */ -#define ATF_MAGIC 0x80 /* Automatically added entry. */ - - -/* Support for the user space arp daemon, arpd. */ -#define ARPD_UPDATE 0x01 -#define ARPD_LOOKUP 0x02 -#define ARPD_FLUSH 0x03 - -struct arpd_request - { - unsigned short int req; /* Request type. */ - uint32_t ip; /* IP address of entry. */ - unsigned long int dev; /* Device entry is tied to. */ - unsigned long int stamp; - unsigned long int updated; - unsigned char ha[MAX_ADDR_LEN]; /* Hardware address. */ - }; - -__END_DECLS - -#endif /* net/if_arp.h */ diff --git a/sysdeps/unix/sysv/linux/net/if_packet.h b/sysdeps/unix/sysv/linux/net/if_packet.h deleted file mode 100644 index 3895b4c957..0000000000 --- a/sysdeps/unix/sysv/linux/net/if_packet.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Definitions for use with Linux SOCK_PACKET sockets. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __IF_PACKET_H -#define __IF_PACKET_H - -#include -#include - -/* This is the SOCK_PACKET address structure as used in Linux 2.0. - From Linux 2.1 the AF_PACKET interface is preferred and you should - consider using it in place of this one. */ - -struct sockaddr_pkt - { - __SOCKADDR_COMMON (spkt_); - unsigned char spkt_device[14]; - unsigned short spkt_protocol; - }; - -#endif diff --git a/sysdeps/unix/sysv/linux/net/if_ppp.h b/sysdeps/unix/sysv/linux/net/if_ppp.h deleted file mode 100644 index 31a20766f0..0000000000 --- a/sysdeps/unix/sysv/linux/net/if_ppp.h +++ /dev/null @@ -1,171 +0,0 @@ -/* From: if_ppp.h,v 1.3 1995/06/12 11:36:50 paulus Exp */ - -/* - * if_ppp.h - Point-to-Point Protocol definitions. - * - * Copyright (c) 1989 Carnegie Mellon University. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -/* - * ==FILEVERSION 960926== - * - * NOTE TO MAINTAINERS: - * If you modify this file at all, please set the above date. - * if_ppp.h is shipped with a PPP distribution as well as with the kernel; - * if everyone increases the FILEVERSION number above, then scripts - * can do the right thing when deciding whether to install a new if_ppp.h - * file. Don't change the format of that line otherwise, so the - * installation script can recognize it. - */ - - -#ifndef __NET_IF_PPP_H -#define __NET_IF_PPP_H 1 - -#include -#include -#include -#include -#include - -__BEGIN_DECLS - -/* - * Packet sizes - */ - -#define PPP_MTU 1500 /* Default MTU (size of Info field) */ -#define PPP_MAXMRU 65000 /* Largest MRU we allow */ -#define PPP_VERSION "2.2.0" -#define PPP_MAGIC 0x5002 /* Magic value for the ppp structure */ -#define PROTO_IPX 0x002b /* protocol numbers */ -#define PROTO_DNA_RT 0x0027 /* DNA Routing */ - - -/* - * Bit definitions for flags. - */ - -#define SC_COMP_PROT 0x00000001 /* protocol compression (output) */ -#define SC_COMP_AC 0x00000002 /* header compression (output) */ -#define SC_COMP_TCP 0x00000004 /* TCP (VJ) compression (output) */ -#define SC_NO_TCP_CCID 0x00000008 /* disable VJ connection-id comp. */ -#define SC_REJ_COMP_AC 0x00000010 /* reject adrs/ctrl comp. on input */ -#define SC_REJ_COMP_TCP 0x00000020 /* reject TCP (VJ) comp. on input */ -#define SC_CCP_OPEN 0x00000040 /* Look at CCP packets */ -#define SC_CCP_UP 0x00000080 /* May send/recv compressed packets */ -#define SC_ENABLE_IP 0x00000100 /* IP packets may be exchanged */ -#define SC_COMP_RUN 0x00001000 /* compressor has been inited */ -#define SC_DECOMP_RUN 0x00002000 /* decompressor has been inited */ -#define SC_DEBUG 0x00010000 /* enable debug messages */ -#define SC_LOG_INPKT 0x00020000 /* log contents of good pkts recvd */ -#define SC_LOG_OUTPKT 0x00040000 /* log contents of pkts sent */ -#define SC_LOG_RAWIN 0x00080000 /* log all chars received */ -#define SC_LOG_FLUSH 0x00100000 /* log all chars flushed */ -#define SC_MASK 0x0fE0ffff /* bits that user can change */ - -/* state bits */ -#define SC_ESCAPED 0x80000000 /* saw a PPP_ESCAPE */ -#define SC_FLUSH 0x40000000 /* flush input until next PPP_FLAG */ -#define SC_VJ_RESET 0x20000000 /* Need to reset the VJ decompressor */ -#define SC_XMIT_BUSY 0x10000000 /* ppp_write_wakeup is active */ -#define SC_RCV_ODDP 0x08000000 /* have rcvd char with odd parity */ -#define SC_RCV_EVNP 0x04000000 /* have rcvd char with even parity */ -#define SC_RCV_B7_1 0x02000000 /* have rcvd char with bit 7 = 1 */ -#define SC_RCV_B7_0 0x01000000 /* have rcvd char with bit 7 = 0 */ -#define SC_DC_FERROR 0x00800000 /* fatal decomp error detected */ -#define SC_DC_ERROR 0x00400000 /* non-fatal decomp error detected */ - -/* - * Ioctl definitions. - */ - -struct npioctl { - int protocol; /* PPP protocol, e.g. PPP_IP */ - enum NPmode mode; -}; - -/* Structure describing a CCP configuration option, for PPPIOCSCOMPRESS */ -struct ppp_option_data { - uint8_t *ptr; - uint32_t length; - int transmit; -}; - -/* 'struct ifreq' is only available from net/if.h under __USE_MISC. */ -#ifdef __USE_MISC -struct ifpppstatsreq { - struct ifreq b; - struct ppp_stats stats; /* statistic information */ -}; - -struct ifpppcstatsreq { - struct ifreq b; - struct ppp_comp_stats stats; -}; - -#define ifr__name b.ifr_ifrn.ifrn_name -#define stats_ptr b.ifr_ifru.ifru_data -#endif - -/* - * Ioctl definitions. - */ - -#define PPPIOCGFLAGS _IOR('t', 90, int) /* get configuration flags */ -#define PPPIOCSFLAGS _IOW('t', 89, int) /* set configuration flags */ -#define PPPIOCGASYNCMAP _IOR('t', 88, int) /* get async map */ -#define PPPIOCSASYNCMAP _IOW('t', 87, int) /* set async map */ -#define PPPIOCGUNIT _IOR('t', 86, int) /* get ppp unit number */ -#define PPPIOCGRASYNCMAP _IOR('t', 85, int) /* get receive async map */ -#define PPPIOCSRASYNCMAP _IOW('t', 84, int) /* set receive async map */ -#define PPPIOCGMRU _IOR('t', 83, int) /* get max receive unit */ -#define PPPIOCSMRU _IOW('t', 82, int) /* set max receive unit */ -#define PPPIOCSMAXCID _IOW('t', 81, int) /* set VJ max slot ID */ -#define PPPIOCGXASYNCMAP _IOR('t', 80, ext_accm) /* get extended ACCM */ -#define PPPIOCSXASYNCMAP _IOW('t', 79, ext_accm) /* set extended ACCM */ -#define PPPIOCXFERUNIT _IO('t', 78) /* transfer PPP unit */ -#define PPPIOCSCOMPRESS _IOW('t', 77, struct ppp_option_data) -#define PPPIOCGNPMODE _IOWR('t', 76, struct npioctl) /* get NP mode */ -#define PPPIOCSNPMODE _IOW('t', 75, struct npioctl) /* set NP mode */ -#define PPPIOCGDEBUG _IOR('t', 65, int) /* Read debug level */ -#define PPPIOCSDEBUG _IOW('t', 64, int) /* Set debug level */ -#define PPPIOCGIDLE _IOR('t', 63, struct ppp_idle) /* get idle time */ - -#define SIOCGPPPSTATS (SIOCDEVPRIVATE + 0) -#define SIOCGPPPVER (SIOCDEVPRIVATE + 1) /* NEVER change this!! */ -#define SIOCGPPPCSTATS (SIOCDEVPRIVATE + 2) - -#if !defined(ifr_mtu) -#define ifr_mtu ifr_ifru.ifru_metric -#endif - -__END_DECLS - -#endif /* net/if_ppp.h */ diff --git a/sysdeps/unix/sysv/linux/net/if_shaper.h b/sysdeps/unix/sysv/linux/net/if_shaper.h deleted file mode 100644 index cc01ce3955..0000000000 --- a/sysdeps/unix/sysv/linux/net/if_shaper.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NET_IF_SHAPER_H -#define _NET_IF_SHAPER_H 1 - -#include -#include -#include -#include - -__BEGIN_DECLS - -#define SHAPER_QLEN 10 -/* - * This is a bit speed dependant (read it shouldnt be a constant!) - * - * 5 is about right for 28.8 upwards. Below that double for every - * halving of speed or so. - ie about 20 for 9600 baud. - */ -#define SHAPER_LATENCY (5 * HZ) -#define SHAPER_MAXSLIP 2 -#define SHAPER_BURST (HZ / 50) /* Good for >128K then */ - -#define SHAPER_SET_DEV 0x0001 -#define SHAPER_SET_SPEED 0x0002 -#define SHAPER_GET_DEV 0x0003 -#define SHAPER_GET_SPEED 0x0004 - -struct shaperconf -{ - uint16_t ss_cmd; - union - { - char ssu_name[14]; - uint32_t ssu_speed; - } ss_u; -#define ss_speed ss_u.ssu_speed -#define ss_name ss_u.ssu_name -}; - -__END_DECLS - -#endif /* net/if_shaper.h */ diff --git a/sysdeps/unix/sysv/linux/net/if_slip.h b/sysdeps/unix/sysv/linux/net/if_slip.h deleted file mode 100644 index 0a293dcc2d..0000000000 --- a/sysdeps/unix/sysv/linux/net/if_slip.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NET_IF_SLIP_H -#define _NET_IF_SLIP_H 1 - -/* We can use the kernel header. */ -#include - -#endif /* net/if_slip.h. */ diff --git a/sysdeps/unix/sysv/linux/net/ppp-comp.h b/sysdeps/unix/sysv/linux/net/ppp-comp.h deleted file mode 100644 index 4a992d5422..0000000000 --- a/sysdeps/unix/sysv/linux/net/ppp-comp.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/net/ppp_defs.h b/sysdeps/unix/sysv/linux/net/ppp_defs.h deleted file mode 100644 index 5e492e9dbf..0000000000 --- a/sysdeps/unix/sysv/linux/net/ppp_defs.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _NET_PPP_DEFS_H -#define _NET_PPP_DEFS_H 1 - -#include -#include -#include - -#endif /* net/ppp_defs.h */ diff --git a/sysdeps/unix/sysv/linux/net/route.h b/sysdeps/unix/sysv/linux/net/route.h deleted file mode 100644 index f9e1739937..0000000000 --- a/sysdeps/unix/sysv/linux/net/route.h +++ /dev/null @@ -1,144 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Based on the 4.4BSD and Linux version of this file. */ - -#ifndef _NET_ROUTE_H -#define _NET_ROUTE_H 1 - -#include -#include -#include -#include -#include - - -/* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */ -struct rtentry - { - unsigned long int rt_pad1; - struct sockaddr rt_dst; /* Target address. */ - struct sockaddr rt_gateway; /* Gateway addr (RTF_GATEWAY). */ - struct sockaddr rt_genmask; /* Target network mask (IP). */ - unsigned short int rt_flags; - short int rt_pad2; - unsigned long int rt_pad3; - unsigned char rt_tos; - unsigned char rt_class; -#if __WORDSIZE == 64 - short int rt_pad4[3]; -#else - short int rt_pad4; -#endif - short int rt_metric; /* +1 for binary compatibility! */ - char *rt_dev; /* Forcing the device at add. */ - unsigned long int rt_mtu; /* Per route MTU/Window. */ - unsigned long int rt_window; /* Window clamping. */ - unsigned short int rt_irtt; /* Initial RTT. */ - }; -/* Compatibility hack. */ -#define rt_mss rt_mtu - - -struct in6_rtmsg - { - struct in6_addr rtmsg_dst; - struct in6_addr rtmsg_src; - struct in6_addr rtmsg_gateway; - uint32_t rtmsg_type; - uint16_t rtmsg_dst_len; - uint16_t rtmsg_src_len; - uint32_t rtmsg_metric; - unsigned long int rtmsg_info; - uint32_t rtmsg_flags; - int rtmsg_ifindex; - }; - - -#define RTF_UP 0x0001 /* Route usable. */ -#define RTF_GATEWAY 0x0002 /* Destination is a gateway. */ - -#define RTF_HOST 0x0004 /* Host entry (net otherwise). */ -#define RTF_REINSTATE 0x0008 /* Reinstate route after timeout. */ -#define RTF_DYNAMIC 0x0010 /* Created dyn. (by redirect). */ -#define RTF_MODIFIED 0x0020 /* Modified dyn. (by redirect). */ -#define RTF_MTU 0x0040 /* Specific MTU for this route. */ -#define RTF_MSS RTF_MTU /* Compatibility. */ -#define RTF_WINDOW 0x0080 /* Per route window clamping. */ -#define RTF_IRTT 0x0100 /* Initial round trip time. */ -#define RTF_REJECT 0x0200 /* Reject route. */ -#define RTF_STATIC 0x0400 /* Manually injected route. */ -#define RTF_XRESOLVE 0x0800 /* External resolver. */ -#define RTF_NOFORWARD 0x1000 /* Forwarding inhibited. */ -#define RTF_THROW 0x2000 /* Go to next class. */ -#define RTF_NOPMTUDISC 0x4000 /* Do not send packets with DF. */ - -/* for IPv6 */ -#define RTF_DEFAULT 0x00010000 /* default - learned via ND */ -#define RTF_ALLONLINK 0x00020000 /* fallback, no routers on link */ -#define RTF_ADDRCONF 0x00040000 /* addrconf route - RA */ - -#define RTF_LINKRT 0x00100000 /* link specific - device match */ -#define RTF_NONEXTHOP 0x00200000 /* route with no nexthop */ - -#define RTF_CACHE 0x01000000 /* cache entry */ -#define RTF_FLOW 0x02000000 /* flow significant route */ -#define RTF_POLICY 0x04000000 /* policy route */ - -#define RTCF_VALVE 0x00200000 -#define RTCF_MASQ 0x00400000 -#define RTCF_NAT 0x00800000 -#define RTCF_DOREDIRECT 0x01000000 -#define RTCF_LOG 0x02000000 -#define RTCF_DIRECTSRC 0x04000000 - -#define RTF_LOCAL 0x80000000 -#define RTF_INTERFACE 0x40000000 -#define RTF_MULTICAST 0x20000000 -#define RTF_BROADCAST 0x10000000 -#define RTF_NAT 0x08000000 - -#define RTF_ADDRCLASSMASK 0xF8000000 -#define RT_ADDRCLASS(flags) ((uint32_t) flags >> 23) - -#define RT_TOS(tos) ((tos) & IPTOS_TOS_MASK) - -#define RT_LOCALADDR(flags) ((flags & RTF_ADDRCLASSMASK) \ - == (RTF_LOCAL|RTF_INTERFACE)) - -#define RT_CLASS_UNSPEC 0 -#define RT_CLASS_DEFAULT 253 - -#define RT_CLASS_MAIN 254 -#define RT_CLASS_LOCAL 255 -#define RT_CLASS_MAX 255 - - -#define RTMSG_ACK NLMSG_ACK -#define RTMSG_OVERRUN NLMSG_OVERRUN - -#define RTMSG_NEWDEVICE 0x11 -#define RTMSG_DELDEVICE 0x12 -#define RTMSG_NEWROUTE 0x21 -#define RTMSG_DELROUTE 0x22 -#define RTMSG_NEWRULE 0x31 -#define RTMSG_DELRULE 0x32 -#define RTMSG_CONTROL 0x40 - -#define RTMSG_AR_FAILED 0x51 /* Address Resolution failed. */ - -#endif /* net/route.h */ diff --git a/sysdeps/unix/sysv/linux/netash/ash.h b/sysdeps/unix/sysv/linux/netash/ash.h deleted file mode 100644 index 8068deb0d5..0000000000 --- a/sysdeps/unix/sysv/linux/netash/ash.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Definitions for use with Linux AF_ASH sockets. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NETASH_ASH_H -#define _NETASH_ASH_H 1 - -#include -#include - -struct sockaddr_ash - { - __SOCKADDR_COMMON (sash_); /* Common data: address family etc. */ - int sash_ifindex; /* Interface to use. */ - unsigned char sash_channel; /* Realtime or control. */ - unsigned int sash_plen; - unsigned char sash_prefix[16]; - }; - -/* Values for `channel' member. */ -#define ASH_CHANNEL_ANY 0 -#define ASH_CHANNEL_CONTROL 1 -#define ASH_CHANNEL_REALTIME 2 - -#endif /* netash/ash.h */ diff --git a/sysdeps/unix/sysv/linux/netatalk/at.h b/sysdeps/unix/sysv/linux/netatalk/at.h deleted file mode 100644 index 9b92147fff..0000000000 --- a/sysdeps/unix/sysv/linux/netatalk/at.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NETATALK_AT_H -#define _NETATALK_AT_H 1 - -#include -#include -#include -#include - -#define SOL_ATALK 258 /* sockopt level for atalk */ - -#endif /* netatalk/at.h */ diff --git a/sysdeps/unix/sysv/linux/netax25/ax25.h b/sysdeps/unix/sysv/linux/netax25/ax25.h deleted file mode 100644 index fce032477f..0000000000 --- a/sysdeps/unix/sysv/linux/netax25/ax25.h +++ /dev/null @@ -1,170 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NETAX25_AX25_H -#define _NETAX25_AX25_H 1 - -#include -#include - -/* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx. */ -#define SOL_AX25 257 - -/* AX.25 flags: */ -#define AX25_WINDOW 1 -#define AX25_T1 2 -#define AX25_T2 5 -#define AX25_T3 4 -#define AX25_N2 3 -#define AX25_BACKOFF 6 -#define AX25_EXTSEQ 7 -#define AX25_PIDINCL 8 -#define AX25_IDLE 9 -#define AX25_PACLEN 10 -#define AX25_IPMAXQUEUE 11 -#define AX25_IAMDIGI 12 -#define AX25_KILL 99 - -/* AX.25 socket ioctls: */ -#define SIOCAX25GETUID (SIOCPROTOPRIVATE) -#define SIOCAX25ADDUID (SIOCPROTOPRIVATE+1) -#define SIOCAX25DELUID (SIOCPROTOPRIVATE+2) -#define SIOCAX25NOUID (SIOCPROTOPRIVATE+3) -#define SIOCAX25BPQADDR (SIOCPROTOPRIVATE+4) -#define SIOCAX25GETPARMS (SIOCPROTOPRIVATE+5) -#define SIOCAX25SETPARMS (SIOCPROTOPRIVATE+6) -#define SIOCAX25OPTRT (SIOCPROTOPRIVATE+7) -#define SIOCAX25CTLCON (SIOCPROTOPRIVATE+8) -#define SIOCAX25GETINFO (SIOCPROTOPRIVATE+9) -#define SIOCAX25ADDFWD (SIOCPROTOPRIVATE+10) -#define SIOCAX25DELFWD (SIOCPROTOPRIVATE+11) - -/* unknown: */ -#define AX25_NOUID_DEFAULT 0 -#define AX25_NOUID_BLOCK 1 -#define AX25_SET_RT_IPMODE 2 - -/* Digipeating flags: */ -#define AX25_DIGI_INBAND 0x01 /* Allow digipeating within port */ -#define AX25_DIGI_XBAND 0x02 /* Allow digipeating across ports */ - -/* Maximim number of digipeaters: */ -#define AX25_MAX_DIGIS 8 - - -typedef struct - { - char ax25_call[7]; /* 6 call + SSID (shifted ascii) */ - } -ax25_address; - -struct sockaddr_ax25 - { - sa_family_t sax25_family; - ax25_address sax25_call; - int sax25_ndigis; - }; - -/* - * The sockaddr struct with the digipeater adresses: - */ -struct full_sockaddr_ax25 - { - struct sockaddr_ax25 fsa_ax25; - ax25_address fsa_digipeater[AX25_MAX_DIGIS]; - }; -#define sax25_uid sax25_ndigis - -struct ax25_routes_struct - { - ax25_address port_addr; - ax25_address dest_addr; - unsigned char digi_count; - ax25_address digi_addr[AX25_MAX_DIGIS]; - }; - -/* The AX.25 ioctl structure: */ -struct ax25_ctl_struct - { - ax25_address port_addr; - ax25_address source_addr; - ax25_address dest_addr; - unsigned int cmd; - unsigned long arg; - unsigned char digi_count; - ax25_address digi_addr[AX25_MAX_DIGIS]; - }; - -struct ax25_info_struct - { - unsigned int n2, n2count; - unsigned int t1, t1timer; - unsigned int t2, t2timer; - unsigned int t3, t3timer; - unsigned int idle, idletimer; - unsigned int state; - unsigned int rcv_q, snd_q; - }; - -struct ax25_fwd_struct - { - ax25_address port_from; - ax25_address port_to; - }; - -/* AX.25 route structure: */ -struct ax25_route_opt_struct - { - ax25_address port_addr; - ax25_address dest_addr; - int cmd; - int arg; - }; - -/* AX.25 BPQ stuff: */ -struct ax25_bpqaddr_struct - { - char dev[16]; - ax25_address addr; - }; - -/* Definitions for the AX.25 `values' fields: */ -#define AX25_VALUES_IPDEFMODE 0 /* 'D'=DG 'V'=VC */ -#define AX25_VALUES_AXDEFMODE 1 /* 8=Normal 128=Extended Seq Nos */ -#define AX25_VALUES_NETROM 2 /* Allow NET/ROM - 0=No 1=Yes */ -#define AX25_VALUES_TEXT 3 /* Allow PID=Text - 0=No 1=Yes */ -#define AX25_VALUES_BACKOFF 4 /* 'E'=Exponential 'L'=Linear */ -#define AX25_VALUES_CONMODE 5 /* Allow connected modes - 0=No 1=Yes */ -#define AX25_VALUES_WINDOW 6 /* Default window size for standard AX.25 */ -#define AX25_VALUES_EWINDOW 7 /* Default window size for extended AX.25 */ -#define AX25_VALUES_T1 8 /* Default T1 timeout value */ -#define AX25_VALUES_T2 9 /* Default T2 timeout value */ -#define AX25_VALUES_T3 10 /* Default T3 timeout value */ -#define AX25_VALUES_N2 11 /* Default N2 value */ -#define AX25_VALUES_DIGI 12 /* Digipeat mode */ -#define AX25_VALUES_IDLE 13 /* mode vc idle timer */ -#define AX25_VALUES_PACLEN 14 /* AX.25 MTU */ -#define AX25_VALUES_IPMAXQUEUE 15 /* Maximum number of buffers enqueued */ -#define AX25_MAX_VALUES 20 - -struct ax25_parms_struct - { - ax25_address port_addr; - unsigned short values[AX25_MAX_VALUES]; - }; - -#endif /* netax25/ax25.h */ diff --git a/sysdeps/unix/sysv/linux/neteconet/ec.h b/sysdeps/unix/sysv/linux/neteconet/ec.h deleted file mode 100644 index d1bc5638d6..0000000000 --- a/sysdeps/unix/sysv/linux/neteconet/ec.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Definitions for use with Linux AF_ECONET sockets. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NETECONET_EC_H -#define _NETECONET_EC_H 1 - -#include -#include - -struct ec_addr - { - unsigned char station; /* Station number. */ - unsigned char net; /* Network number. */ - }; - -struct sockaddr_ec - { - __SOCKADDR_COMMON (sec_); - unsigned char port; /* Port number. */ - unsigned char cb; /* Control/flag byte. */ - unsigned char type; /* Type of message. */ - struct ec_addr addr; - unsigned long cookie; - }; - -#define ECTYPE_PACKET_RECEIVED 0 /* Packet received */ -#define ECTYPE_TRANSMIT_STATUS 0x10 /* Transmit completed */ - -#define ECTYPE_TRANSMIT_OK 1 -#define ECTYPE_TRANSMIT_NOT_LISTENING 2 -#define ECTYPE_TRANSMIT_NET_ERROR 3 -#define ECTYPE_TRANSMIT_NO_CLOCK 4 -#define ECTYPE_TRANSMIT_LINE_JAMMED 5 -#define ECTYPE_TRANSMIT_NOT_PRESENT 6 - -#endif diff --git a/sysdeps/unix/sysv/linux/netinet/if_ether.h b/sysdeps/unix/sysv/linux/netinet/if_ether.h deleted file mode 100644 index 9977903a50..0000000000 --- a/sysdeps/unix/sysv/linux/netinet/if_ether.h +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __NETINET_IF_ETHER_H - -#define __NETINET_IF_ETHER_H 1 -#include -#include - -/* Get definitions from kernel header file. */ -#include - -#ifdef __USE_MISC -/* - * Copyright (c) 1982, 1986, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)if_ether.h 8.3 (Berkeley) 5/2/95 - * $FreeBSD$ - */ - -#include -#include - -__BEGIN_DECLS -/* - * Ethernet Address Resolution Protocol. - * - * See RFC 826 for protocol description. Structure below is adapted - * to resolving internet addresses. Field names used correspond to - * RFC 826. - */ -struct ether_arp { - struct arphdr ea_hdr; /* fixed-size header */ - uint8_t arp_sha[ETH_ALEN]; /* sender hardware address */ - uint8_t arp_spa[4]; /* sender protocol address */ - uint8_t arp_tha[ETH_ALEN]; /* target hardware address */ - uint8_t arp_tpa[4]; /* target protocol address */ -}; -#define arp_hrd ea_hdr.ar_hrd -#define arp_pro ea_hdr.ar_pro -#define arp_hln ea_hdr.ar_hln -#define arp_pln ea_hdr.ar_pln -#define arp_op ea_hdr.ar_op - -/* - * Macro to map an IP multicast address to an Ethernet multicast address. - * The high-order 25 bits of the Ethernet address are statically assigned, - * and the low-order 23 bits are taken from the low end of the IP address. - */ -#define ETHER_MAP_IP_MULTICAST(ipaddr, enaddr) \ - /* struct in_addr *ipaddr; */ \ - /* uint8_t enaddr[ETH_ALEN]; */ \ -{ \ - (enaddr)[0] = 0x01; \ - (enaddr)[1] = 0x00; \ - (enaddr)[2] = 0x5e; \ - (enaddr)[3] = ((uint8_t *)ipaddr)[1] & 0x7f; \ - (enaddr)[4] = ((uint8_t *)ipaddr)[2]; \ - (enaddr)[5] = ((uint8_t *)ipaddr)[3]; \ -} - -__END_DECLS -#endif /* __USE_MISC */ - -#endif /* netinet/if_ether.h */ diff --git a/sysdeps/unix/sysv/linux/netinet/if_fddi.h b/sysdeps/unix/sysv/linux/netinet/if_fddi.h deleted file mode 100644 index af0c8e76a9..0000000000 --- a/sysdeps/unix/sysv/linux/netinet/if_fddi.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NETINET_IF_FDDI_H -#define _NETINET_IF_FDDI_H 1 - -#include -#include -#include - -#ifdef __USE_MISC - -struct fddi_header { - uint8_t fddi_fc; /* Frame Control (FC) value */ - uint8_t fddi_dhost[FDDI_K_ALEN]; /* Destination host */ - uint8_t fddi_shost[FDDI_K_ALEN]; /* Source host */ -}; -#endif - -#endif /* netinet/if_fddi.h */ diff --git a/sysdeps/unix/sysv/linux/netinet/if_tr.h b/sysdeps/unix/sysv/linux/netinet/if_tr.h deleted file mode 100644 index 779a510b4b..0000000000 --- a/sysdeps/unix/sysv/linux/netinet/if_tr.h +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NETINET_IF_TR_H -#define _NETINET_IF_TR_H 1 - -#include -#include - -/* IEEE 802.5 Token-Ring magic constants. The frame sizes omit the preamble - and FCS/CRC (frame check sequence). */ -#define TR_ALEN 6 /* Octets in one token-ring addr */ -#define TR_HLEN (sizeof (struct trh_hdr) + sizeof (struct trllc)) -#define AC 0x10 -#define LLC_FRAME 0x40 - -/* LLC and SNAP constants */ -#define EXTENDED_SAP 0xAA -#define UI_CMD 0x03 - -/* This is an Token-Ring frame header. */ -struct trh_hdr -{ - uint8_t ac; /* access control field */ - uint8_t fc; /* frame control field */ - uint8_t daddr[TR_ALEN]; /* destination address */ - uint8_t saddr[TR_ALEN]; /* source address */ - uint16_t rcf; /* route control field */ - uint16_t rseg[8]; /* routing registers */ -}; - -/* This is an Token-Ring LLC structure */ -struct trllc -{ - uint8_t dsap; /* destination SAP */ - uint8_t ssap; /* source SAP */ - uint8_t llc; /* LLC control field */ - uint8_t protid[3]; /* protocol id */ - uint16_t ethertype; /* ether type field */ -}; - -/* Token-Ring statistics collection data. */ -struct tr_statistics -{ - unsigned long rx_packets; /* total packets received */ - unsigned long tx_packets; /* total packets transmitted */ - unsigned long rx_bytes; /* total bytes received */ - unsigned long tx_bytes; /* total bytes transmitted */ - unsigned long rx_errors; /* bad packets received */ - unsigned long tx_errors; /* packet transmit problems */ - unsigned long rx_dropped; /* no space in linux buffers */ - unsigned long tx_dropped; /* no space available in linux */ - unsigned long multicast; /* multicast packets received */ - unsigned long transmit_collision; - - /* detailed Token-Ring errors. See IBM Token-Ring Network - Architecture for more info */ - - unsigned long line_errors; - unsigned long internal_errors; - unsigned long burst_errors; - unsigned long A_C_errors; - unsigned long abort_delimiters; - unsigned long lost_frames; - unsigned long recv_congest_count; - unsigned long frame_copied_errors; - unsigned long frequency_errors; - unsigned long token_errors; - unsigned long dummy1; -}; - -/* source routing stuff */ -#define TR_RII 0x80 -#define TR_RCF_DIR_BIT 0x80 -#define TR_RCF_LEN_MASK 0x1f00 -#define TR_RCF_BROADCAST 0x8000 /* all-routes broadcast */ -#define TR_RCF_LIMITED_BROADCAST 0xC000 /* single-route broadcast */ -#define TR_RCF_FRAME2K 0x20 -#define TR_RCF_BROADCAST_MASK 0xC000 -#define TR_MAXRIFLEN 18 - -#ifdef __USE_MISC - -struct trn_hdr -{ - uint8_t trn_ac; /* access control field */ - uint8_t trn_fc; /* field control field */ - uint8_t trn_dhost[TR_ALEN]; /* destination host */ - uint8_t trn_shost[TR_ALEN]; /* source host */ - uint16_t trn_rcf; /* route control field */ - uint16_t trn_rseg[8]; /* routing registers */ -}; - -#endif - -#endif /* netinet/if_tr.h */ diff --git a/sysdeps/unix/sysv/linux/netipx/ipx.h b/sysdeps/unix/sysv/linux/netipx/ipx.h deleted file mode 100644 index f5a91c5398..0000000000 --- a/sysdeps/unix/sysv/linux/netipx/ipx.h +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __NETIPX_IPX_H -#define __NETIPX_IPX_H 1 - -#include -#include -#include - -__BEGIN_DECLS - -#define SOL_IPX 256 /* sockopt level */ - -#define IPX_TYPE 1 -#define IPX_NODE_LEN 6 -#define IPX_MTU 576 - -struct sockaddr_ipx - { - sa_family_t sipx_family; - uint16_t sipx_port; - uint32_t sipx_network; - unsigned char sipx_node[IPX_NODE_LEN]; - uint8_t sipx_type; - unsigned char sipx_zero; /* 16 byte fill */ - }; - -/* - * So we can fit the extra info for SIOCSIFADDR into the address nicely - */ - -#define sipx_special sipx_port -#define sipx_action sipx_zero -#define IPX_DLTITF 0 -#define IPX_CRTITF 1 - -typedef struct ipx_route_definition - { - unsigned long ipx_network; - unsigned long ipx_router_network; - unsigned char ipx_router_node[IPX_NODE_LEN]; - } -ipx_route_definition; - -typedef struct ipx_interface_definition - { - unsigned long ipx_network; - unsigned char ipx_device[16]; - unsigned char ipx_dlink_type; -#define IPX_FRAME_NONE 0 -#define IPX_FRAME_SNAP 1 -#define IPX_FRAME_8022 2 -#define IPX_FRAME_ETHERII 3 -#define IPX_FRAME_8023 4 -#define IPX_FRAME_TR_8022 5 - unsigned char ipx_special; -#define IPX_SPECIAL_NONE 0 -#define IPX_PRIMARY 1 -#define IPX_INTERNAL 2 - unsigned char ipx_node[IPX_NODE_LEN]; - } -ipx_interface_definition; - -typedef struct ipx_config_data - { - unsigned char ipxcfg_auto_select_primary; - unsigned char ipxcfg_auto_create_interfaces; - } -ipx_config_data; - -/* - * OLD Route Definition for backward compatibility. - */ - -struct ipx_route_def - { - unsigned long ipx_network; - unsigned long ipx_router_network; -#define IPX_ROUTE_NO_ROUTER 0 - unsigned char ipx_router_node[IPX_NODE_LEN]; - unsigned char ipx_device[16]; - unsigned short ipx_flags; -#define IPX_RT_SNAP 8 -#define IPX_RT_8022 4 -#define IPX_RT_BLUEBOOK 2 -#define IPX_RT_ROUTED 1 - }; - -#define SIOCAIPXITFCRT (SIOCPROTOPRIVATE) -#define SIOCAIPXPRISLT (SIOCPROTOPRIVATE + 1) -#define SIOCIPXCFGDATA (SIOCPROTOPRIVATE + 2) -#define SIOCIPXNCPCONN (SIOCPROTOPRIVATE + 3) - -__END_DECLS - -#endif /* netipx/ipx.h */ diff --git a/sysdeps/unix/sysv/linux/netiucv/iucv.h b/sysdeps/unix/sysv/linux/netiucv/iucv.h deleted file mode 100644 index 4f80258dff..0000000000 --- a/sysdeps/unix/sysv/linux/netiucv/iucv.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __NETIUCV_IUCV_H -#define __NETIUCV_IUCV_H 1 - -#include -#include - -__BEGIN_DECLS - -struct sockaddr_iucv - { - __SOCKADDR_COMMON (siucv_); - unsigned short siucv_port; /* Reserved */ - unsigned int siucv_addr; /* Reserved */ - char siucv_nodeid[8]; /* Reserved */ - char siucv_user_id[8]; /* Guest User Id */ - char siucv_name[8]; /* Application Name */ - }; - -__END_DECLS - -#define SOL_IUCV 277 /* IUCV level */ - -/* IUCV socket options (SOL_IUCV) */ -#define SO_IPRMDATA_MSG 0x0080 /* Send/recv IPRM_DATA msgs */ -#define SO_MSGLIMIT 0x1000 /* Get/set IUCV MSGLIMIT */ -#define SO_MSGSIZE 0x0800 /* Get maximum msgsize */ - -/* IUCV related control messages (scm) */ -#define SCM_IUCV_TRGCLS 0x0001 /* Target class control message */ - -#endif diff --git a/sysdeps/unix/sysv/linux/netlink_assert_response.c b/sysdeps/unix/sysv/linux/netlink_assert_response.c deleted file mode 100644 index d60eb1515e..0000000000 --- a/sysdeps/unix/sysv/linux/netlink_assert_response.c +++ /dev/null @@ -1,106 +0,0 @@ -/* Check recvmsg results for netlink sockets. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include "netlinkaccess.h" - -static int -get_address_family (int fd) -{ - struct sockaddr_storage sa; - socklen_t sa_len = sizeof (sa); - if (__getsockname (fd, (struct sockaddr *) &sa, &sa_len) < 0) - return -1; - /* Check that the socket family number is preserved despite in-band - signaling. */ - _Static_assert (sizeof (sa.ss_family) < sizeof (int), "address family size"); - _Static_assert (0 < (__typeof__ (sa.ss_family)) -1, - "address family unsigned"); - return sa.ss_family; -} - -void -internal_function -__netlink_assert_response (int fd, ssize_t result) -{ - if (result < 0) - { - /* Check if the error is unexpected. */ - bool terminate = false; - int error_code = errno; - int family = get_address_family (fd); - if (family != AF_NETLINK) - /* If the address family does not match (or getsockname - failed), report the original error. */ - terminate = true; - else if (error_code == EBADF - || error_code == ENOTCONN - || error_code == ENOTSOCK - || error_code == ECONNREFUSED) - /* These errors indicate that the descriptor is not a - connected socket. */ - terminate = true; - else if (error_code == EAGAIN || error_code == EWOULDBLOCK) - { - /* The kernel might return EAGAIN for other reasons than a - non-blocking socket. But if the socket is not blocking, - it is not ours, so report the error. */ - int mode = __fcntl (fd, F_GETFL, 0); - if (mode < 0 || (mode & O_NONBLOCK) != 0) - terminate = true; - } - if (terminate) - { - char message[200]; - if (family < 0) - __snprintf (message, sizeof (message), - "Unexpected error %d on netlink descriptor %d", - error_code, fd); - else - __snprintf (message, sizeof (message), - "Unexpected error %d on netlink descriptor %d" - " (address family %d)", - error_code, fd, family); - __libc_fatal (message); - } - else - /* Restore orignal errno value. */ - __set_errno (error_code); - } - else if (result < sizeof (struct nlmsghdr)) - { - char message[200]; - int family = get_address_family (fd); - if (family < 0) - __snprintf (message, sizeof (message), - "Unexpected netlink response of size %zd" - " on descriptor %d", - result, fd); - else - __snprintf (message, sizeof (message), - "Unexpected netlink response of size %zd" - " on descriptor %d (address family %d)", - result, fd, family); - __libc_fatal (message); - } -} -libc_hidden_def (__netlink_assert_response) diff --git a/sysdeps/unix/sysv/linux/netlinkaccess.h b/sysdeps/unix/sysv/linux/netlinkaccess.h deleted file mode 100644 index 6cffb65b14..0000000000 --- a/sysdeps/unix/sysv/linux/netlinkaccess.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NETLINKACCESS_H -#define _NETLINKACCESS_H 1 - -#include -#include -#include -#include -#include - - -struct netlink_res -{ - struct netlink_res *next; - struct nlmsghdr *nlh; - size_t size; /* Size of response. */ - uint32_t seq; /* sequential number we used. */ -}; - - -struct netlink_handle -{ - int fd; /* Netlink file descriptor. */ - pid_t pid; /* Process ID. */ - uint32_t seq; /* The sequence number we use currently. */ - struct netlink_res *nlm_list; /* Pointer to list of responses. */ - struct netlink_res *end_ptr; /* For faster append of new entries. */ -}; - - -extern int __netlink_open (struct netlink_handle *h); -extern void __netlink_close (struct netlink_handle *h); -extern void __netlink_free_handle (struct netlink_handle *h); -extern int __netlink_request (struct netlink_handle *h, int type); - -/* Terminate the process if RESULT is an invalid recvmsg result for - the netlink socket FD. */ -void __netlink_assert_response (int fd, ssize_t result) - internal_function; -libc_hidden_proto (__netlink_assert_response) - -#endif /* netlinkaccess.h */ diff --git a/sysdeps/unix/sysv/linux/netpacket/packet.h b/sysdeps/unix/sysv/linux/netpacket/packet.h deleted file mode 100644 index 1761af1478..0000000000 --- a/sysdeps/unix/sysv/linux/netpacket/packet.h +++ /dev/null @@ -1,80 +0,0 @@ -/* Definitions for use with Linux AF_PACKET sockets. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __NETPACKET_PACKET_H -#define __NETPACKET_PACKET_H 1 - -struct sockaddr_ll - { - unsigned short int sll_family; - unsigned short int sll_protocol; - int sll_ifindex; - unsigned short int sll_hatype; - unsigned char sll_pkttype; - unsigned char sll_halen; - unsigned char sll_addr[8]; - }; - -/* Packet types. */ - -#define PACKET_HOST 0 /* To us. */ -#define PACKET_BROADCAST 1 /* To all. */ -#define PACKET_MULTICAST 2 /* To group. */ -#define PACKET_OTHERHOST 3 /* To someone else. */ -#define PACKET_OUTGOING 4 /* Originated by us . */ -#define PACKET_LOOPBACK 5 -#define PACKET_FASTROUTE 6 - -/* Packet socket options. */ - -#define PACKET_ADD_MEMBERSHIP 1 -#define PACKET_DROP_MEMBERSHIP 2 -#define PACKET_RECV_OUTPUT 3 -#define PACKET_RX_RING 5 -#define PACKET_STATISTICS 6 -#define PACKET_COPY_THRESH 7 -#define PACKET_AUXDATA 8 -#define PACKET_ORIGDEV 9 -#define PACKET_VERSION 10 -#define PACKET_HDRLEN 11 -#define PACKET_RESERVE 12 -#define PACKET_TX_RING 13 -#define PACKET_LOSS 14 -#define PACKET_VNET_HDR 15 -#define PACKET_TX_TIMESTAMP 16 -#define PACKET_TIMESTAMP 17 -#define PACKET_FANOUT 18 -#define PACKET_TX_HAS_OFF 19 -#define PACKET_QDISC_BYPASS 20 -#define PACKET_ROLLOVER_STATS 21 -#define PACKET_FANOUT_DATA 22 - -struct packet_mreq - { - int mr_ifindex; - unsigned short int mr_type; - unsigned short int mr_alen; - unsigned char mr_address[8]; - }; - -#define PACKET_MR_MULTICAST 0 -#define PACKET_MR_PROMISC 1 -#define PACKET_MR_ALLMULTI 2 -#define PACKET_MR_UNICAST 3 - -#endif /* netpacket/packet.h */ diff --git a/sysdeps/unix/sysv/linux/netrom/netrom.h b/sysdeps/unix/sysv/linux/netrom/netrom.h deleted file mode 100644 index 5ed25cdd98..0000000000 --- a/sysdeps/unix/sysv/linux/netrom/netrom.h +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _NETROM_NETROM_H -#define _NETROM_NETROM_H 1 - -#include - -/* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx. */ -#define SOL_NETROM 259 - -/* NetRom control values: */ -#define NETROM_T1 1 -#define NETROM_T2 2 -#define NETROM_N2 3 -#define NETROM_PACLEN 5 -#define NETROM_T4 6 -#define NETROM_IDLE 7 - -#define NETROM_KILL 99 - -/* Type of route: */ -#define NETROM_NEIGH 0 -#define NETROM_NODE 1 - -struct nr_route_struct - { - int type; - ax25_address callsign; - char device[16]; - unsigned int quality; - char mnemonic[7]; - ax25_address neighbour; - unsigned int obs_count; - unsigned int ndigis; - ax25_address digipeaters[AX25_MAX_DIGIS]; - }; - -/* NetRom socket ioctls: */ -#define SIOCNRGETPARMS (SIOCPROTOPRIVATE+0) -#define SIOCNRSETPARMS (SIOCPROTOPRIVATE+1) -#define SIOCNRDECOBS (SIOCPROTOPRIVATE+2) -#define SIOCNRRTCTL (SIOCPROTOPRIVATE+3) -#define SIOCNRCTLCON (SIOCPROTOPRIVATE+4) - -/* NetRom parameter structure: */ -struct nr_parms_struct - { - unsigned int quality; - unsigned int obs_count; - unsigned int ttl; - unsigned int timeout; - unsigned int ack_delay; - unsigned int busy_delay; - unsigned int tries; - unsigned int window; - unsigned int paclen; - }; - -/* NetRom control structure: */ -struct nr_ctl_struct - { - unsigned char index; - unsigned char id; - unsigned int cmd; - unsigned long arg; - }; - -#endif /* netrom/netrom.h */ diff --git a/sysdeps/unix/sysv/linux/netrose/rose.h b/sysdeps/unix/sysv/linux/netrose/rose.h deleted file mode 100644 index c16803bbfb..0000000000 --- a/sysdeps/unix/sysv/linux/netrose/rose.h +++ /dev/null @@ -1,118 +0,0 @@ -/* Definitions for Rose packet radio address family. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* What follows is copied from the 2.1.93 . */ - -#ifndef _NETROSE_ROSE_H -#define _NETROSE_ROSE_H 1 - -#include -#include - -/* Socket level values. */ -#define SOL_ROSE 260 - - -/* These are the public elements of the Linux kernel Rose - implementation. For kernel AX.25 see the file ax25.h. This file - requires ax25.h for the definition of the ax25_address structure. */ -#define ROSE_MTU 251 - -#define ROSE_MAX_DIGIS 6 - -#define ROSE_DEFER 1 -#define ROSE_T1 2 -#define ROSE_T2 3 -#define ROSE_T3 4 -#define ROSE_IDLE 5 -#define ROSE_QBITINCL 6 -#define ROSE_HOLDBACK 7 - -#define SIOCRSGCAUSE (SIOCPROTOPRIVATE + 0) -#define SIOCRSSCAUSE (SIOCPROTOPRIVATE + 1) -#define SIOCRSL2CALL (SIOCPROTOPRIVATE + 2) -#define SIOCRSSL2CALL (SIOCPROTOPRIVATE + 2) -#define SIOCRSACCEPT (SIOCPROTOPRIVATE + 3) -#define SIOCRSCLRRT (SIOCPROTOPRIVATE + 4) -#define SIOCRSGL2CALL (SIOCPROTOPRIVATE + 5) -#define SIOCRSGFACILITIES (SIOCPROTOPRIVATE + 6) - -#define ROSE_DTE_ORIGINATED 0x00 -#define ROSE_NUMBER_BUSY 0x01 -#define ROSE_INVALID_FACILITY 0x03 -#define ROSE_NETWORK_CONGESTION 0x05 -#define ROSE_OUT_OF_ORDER 0x09 -#define ROSE_ACCESS_BARRED 0x0B -#define ROSE_NOT_OBTAINABLE 0x0D -#define ROSE_REMOTE_PROCEDURE 0x11 -#define ROSE_LOCAL_PROCEDURE 0x13 -#define ROSE_SHIP_ABSENT 0x39 - - -typedef struct -{ - char rose_addr[5]; -} rose_address; - -struct sockaddr_rose -{ - sa_family_t srose_family; - rose_address srose_addr; - ax25_address srose_call; - int srose_ndigis; - ax25_address srose_digi; -}; - -struct full_sockaddr_rose -{ - sa_family_t srose_family; - rose_address srose_addr; - ax25_address srose_call; - unsigned int srose_ndigis; - ax25_address srose_digis[ROSE_MAX_DIGIS]; -}; - -struct rose_route_struct -{ - rose_address address; - unsigned short int mask; - ax25_address neighbour; - char device[16]; - unsigned char ndigis; - ax25_address digipeaters[AX25_MAX_DIGIS]; -}; - -struct rose_cause_struct -{ - unsigned char cause; - unsigned char diagnostic; -}; - -struct rose_facilities_struct -{ - rose_address source_addr, dest_addr; - ax25_address source_call, dest_call; - unsigned char source_ndigis, dest_ndigis; - ax25_address source_digis[ROSE_MAX_DIGIS]; - ax25_address dest_digis[ROSE_MAX_DIGIS]; - unsigned int rand; - rose_address fail_addr; - ax25_address fail_call; -}; - -#endif /* netrose/rose.h */ diff --git a/sysdeps/unix/sysv/linux/nfs/nfs.h b/sysdeps/unix/sysv/linux/nfs/nfs.h deleted file mode 100644 index 61e4b656d7..0000000000 --- a/sysdeps/unix/sysv/linux/nfs/nfs.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/nice.c b/sysdeps/unix/sysv/linux/nice.c deleted file mode 100644 index 3bcbb1e89a..0000000000 --- a/sysdeps/unix/sysv/linux/nice.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/nios2/Implies b/sysdeps/unix/sysv/linux/nios2/Implies deleted file mode 100644 index 4d0478bf8f..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/Implies +++ /dev/null @@ -1,3 +0,0 @@ -nios2/nptl -unix/sysv/linux/generic/wordsize-32 -unix/sysv/linux/generic diff --git a/sysdeps/unix/sysv/linux/nios2/Makefile b/sysdeps/unix/sysv/linux/nios2/Makefile deleted file mode 100644 index d0af9ec559..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext_i.sym -endif - -ifeq ($(subdir),misc) -# MIPS/Tile-style cacheflush routine -sysdep_headers += sys/cachectl.h -sysdep_routines += cacheflush -endif - -ifeq ($(subdir),nptl) -libpthread-routines := $(filter-out pt-vfork,$(libpthread-routines)) -endif diff --git a/sysdeps/unix/sysv/linux/nios2/Versions b/sysdeps/unix/sysv/linux/nios2/Versions deleted file mode 100644 index e42c85f575..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/Versions +++ /dev/null @@ -1,6 +0,0 @@ -libc { - GLIBC_2.21 { - _flush_cache; - cacheflush; - } -} diff --git a/sysdeps/unix/sysv/linux/nios2/arch-fork.h b/sysdeps/unix/sysv/linux/nios2/arch-fork.h deleted file mode 100644 index a93cf4232f..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/arch-fork.h +++ /dev/null @@ -1,33 +0,0 @@ -/* ARCH_FORK definition for Linux fork implementation. Nios II version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Argument 1 - Clone flags. - 2 - Child stack pointer. - 3 - Parent tid pointer. - 4 - Child tid pointer. - 5 - New TLS area pointer. */ - -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 5, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ - NULL, NULL, &THREAD_SELF->tid, NULL) diff --git a/sysdeps/unix/sysv/linux/nios2/atomic-machine.h b/sysdeps/unix/sysv/linux/nios2/atomic-machine.h deleted file mode 100644 index d4dd025603..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/atomic-machine.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Low-level functions for atomic operations. Nios II version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _NIOS2_ATOMIC_MACHINE_H -#define _NIOS2_ATOMIC_MACHINE_H 1 - -#include - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#define __HAVE_64B_ATOMICS 0 -#define USE_ATOMIC_COMPILER_BUILTINS 0 - -/* XXX Is this actually correct? */ -#define ATOMIC_EXCHANGE_USES_CAS 1 - -#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) -#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) -#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) - -#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval) \ - (abort (), 0) -#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval) \ - (abort (), 0) -#define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \ - (abort (), 0) - -#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - ({ \ - register int r2 asm ("r2"); \ - register int* r4 asm ("r4") = (int*)(mem); \ - register int r5 asm ("r5"); \ - register int r6 asm ("r6") = (int)(newval); \ - int retval, orig_oldval = (int)(oldval); \ - long kernel_cmpxchg = 0x1004; \ - while (1) \ - { \ - r5 = *r4; \ - if (r5 != orig_oldval) \ - { \ - retval = r5; \ - break; \ - } \ - asm volatile ("callr %1\n" \ - : "=r" (r2) \ - : "r" (kernel_cmpxchg), "r" (r4), "r" (r5), "r" (r6) \ - : "ra", "memory"); \ - if (!r2) { retval = orig_oldval; break; } \ - } \ - (__typeof (*(mem))) retval; \ - }) - -#define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval) \ - ({ \ - register int r2 asm ("r2"); \ - register int *r4 asm ("r4") = (int*)(mem); \ - register int r5 asm ("r5") = (int)(oldval); \ - register int r6 asm ("r6") = (int)(newval); \ - long kernel_cmpxchg = 0x1004; \ - asm volatile ("callr %1\n" \ - : "=r" (r2) \ - : "r" (kernel_cmpxchg), "r" (r4), "r" (r5), "r" (r6) \ - : "ra", "memory"); \ - r2; \ - }) - -#define atomic_full_barrier() ({ asm volatile ("sync"); }) - -#endif /* _NIOS2_ATOMIC_MACHINE_H */ diff --git a/sysdeps/unix/sysv/linux/nios2/bits/mman.h b/sysdeps/unix/sysv/linux/nios2/bits/mman.h deleted file mode 100644 index dc90da1187..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/bits/mman.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/Nios II version. - - Copyright (C) 1997-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */ -# define MAP_DENYWRITE 0x00800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x02000 /* Lock the mapping. */ -# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */ -# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ -# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/nios2/c++-types.data b/sysdeps/unix/sysv/linux/nios2/c++-types.data deleted file mode 100644 index 303f4570c8..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:i -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:i -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/nios2/cacheflush.c b/sysdeps/unix/sysv/linux/nios2/cacheflush.c deleted file mode 100644 index 463d6ef4c2..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/cacheflush.c +++ /dev/null @@ -1,29 +0,0 @@ -/* cacheflush system call for Nios II Linux. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* Flush cache(s). */ -int -_flush_cache (char *addr, const int nbytes, const int op) -{ - return INLINE_SYSCALL (cacheflush, 3, addr, nbytes, op); -} -weak_alias (_flush_cache, cacheflush) diff --git a/sysdeps/unix/sysv/linux/nios2/clone.S b/sysdeps/unix/sysv/linux/nios2/clone.S deleted file mode 100644 index 7929dfa48a..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/clone.S +++ /dev/null @@ -1,95 +0,0 @@ -/* clone() implementation for Nios II. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andrew Jenner , 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#define _ERRNO_H 1 -#include -#include - -#define CLONE_VM 0x00000100 - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - void *parent_tidptr, void *tls, void *child_tidptr) */ - - .text -ENTRY(__clone) - /* Sanity check arguments. */ - movi r2, EINVAL - /* No NULL function pointers. */ - beq r4, zero, SYSCALL_ERROR_LABEL - /* No NULL stack pointers. */ - beq r5, zero, SYSCALL_ERROR_LABEL - - subi r5, r5, 8 /* Reserve argument save space. */ - stw r4, 4(r5) /* Save function pointer. */ - stw r7, 0(r5) /* Save argument pointer. */ - - /* Load arguments. */ - mov r4, r6 - ldw r6, 0(sp) - ldw r7, 8(sp) - ldw r8, 4(sp) - - /* Do the system call. */ - movi r2, SYS_ify (clone) - - /* End FDE now, because in the child the unwind info will be - wrong. */ - cfi_endproc - trap - - /* Check for errors. */ - bne r7, zero, SYSCALL_ERROR_LABEL - /* See if we're on the newly created thread. */ - beq r2, zero, thread_start - /* Successful return from the parent */ - ret - -thread_start: - cfi_startproc - cfi_undefined (ra) - - ldw r5, 4(sp) /* Function pointer. */ - ldw r4, 0(sp) /* Argument pointer. */ - addi sp, sp, 8 - - /* Call the user's function. */ - callr r5 - - /* _exit with the result. */ - mov r4, r2 -#ifdef PIC - nextpc r22 -1: movhi r8, %hiadj(_gp_got - 1b) - addi r8, r8, %lo(_gp_got - 1b) - add r22, r22, r8 - ldw r8, %call(HIDDEN_JUMPTARGET(_exit))(r22) - jmp r8 -#else - jmpi _exit -#endif - cfi_endproc - - cfi_startproc -PSEUDO_END (__clone) -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/nios2/configure b/sysdeps/unix/sysv/linux/nios2/configure deleted file mode 100644 index 56b710792e..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/configure +++ /dev/null @@ -1,4 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/nios2. - -arch_minimum_kernel=3.19.0 diff --git a/sysdeps/unix/sysv/linux/nios2/configure.ac b/sysdeps/unix/sysv/linux/nios2/configure.ac deleted file mode 100644 index a8ccc17ffe..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/configure.ac +++ /dev/null @@ -1,4 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/nios2. - -arch_minimum_kernel=3.19.0 diff --git a/sysdeps/unix/sysv/linux/nios2/getcontext.S b/sysdeps/unix/sysv/linux/nios2/getcontext.S deleted file mode 100644 index 373e80546a..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/getcontext.S +++ /dev/null @@ -1,66 +0,0 @@ -/* Save current context. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "ucontext_i.h" - -/* int getcontext (ucontext_t *ucp) - - Returns 0 on success -1 and errno on failure. - */ - .text -ENTRY(__getcontext) - stw r16, (UCONTEXT_MCONTEXT + 16*4)(r4) - stw r17, (UCONTEXT_MCONTEXT + 17*4)(r4) - stw r18, (UCONTEXT_MCONTEXT + 18*4)(r4) - stw r19, (UCONTEXT_MCONTEXT + 19*4)(r4) - stw r20, (UCONTEXT_MCONTEXT + 20*4)(r4) - stw r21, (UCONTEXT_MCONTEXT + 21*4)(r4) - stw r22, (UCONTEXT_MCONTEXT + 22*4)(r4) - stw ra, (UCONTEXT_MCONTEXT + 24*4)(r4) - stw fp, (UCONTEXT_MCONTEXT + 25*4)(r4) - stw gp, (UCONTEXT_MCONTEXT + 26*4)(r4) - /* Store return address at place for EA. */ - stw ra, (UCONTEXT_MCONTEXT + 28*4)(r4) - stw sp, (UCONTEXT_MCONTEXT + 29*4)(r4) - /* Store zero for return success. */ - stw zero, (UCONTEXT_MCONTEXT + 2*4)(r4) - - /* Store value "1" at uc_flags to recognize as getcontext created. */ - movi r2, 1 - stw r2, UCONTEXT_FLAGS(r4) - - /* Store MCONTEXT_VERSION at first word of mcontext_t. */ - movi r2, MCONTEXT_VERSION - stw r2, UCONTEXT_MCONTEXT(r4) - - /* Get signal mask. */ - /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ - movi r7, _NSIG8 - addi r6, r4, UCONTEXT_SIGMASK - mov r5, zero - movi r4, SIG_BLOCK - movi r2, SYS_ify (rt_sigprocmask) - trap - bne r7, zero, SYSCALL_ERROR_LABEL - - mov r2, zero - ret - -PSEUDO_END(__getcontext) -weak_alias(__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/nios2/ipc_priv.h b/sysdeps/unix/sysv/linux/nios2/ipc_priv.h deleted file mode 100644 index d5c6c0a730..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/ipc_priv.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Old SysV permission definition for Linux. Nios II version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include /* For __key_t */ - -#define __IPC_64 0x0 diff --git a/sysdeps/unix/sysv/linux/nios2/kernel_rt_sigframe.h b/sysdeps/unix/sysv/linux/nios2/kernel_rt_sigframe.h deleted file mode 100644 index f840effe92..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/kernel_rt_sigframe.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Linux kernel struct rt_sigframe declaration for Nios II. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This structure must have the same shape as the Linux kernel - equivalent. */ - -struct kernel_rt_sigframe -{ - siginfo_t info; - struct ucontext uc; -}; diff --git a/sysdeps/unix/sysv/linux/nios2/ld.abilist b/sysdeps/unix/sysv/linux/nios2/ld.abilist deleted file mode 100644 index a127464b4b..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/ld.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.21 GLIBC_2.21 A -GLIBC_2.21 __libc_stack_end D 0x4 -GLIBC_2.21 __stack_chk_guard D 0x4 -GLIBC_2.21 __tls_get_addr F -GLIBC_2.21 _dl_mcount F -GLIBC_2.21 _r_debug D 0x14 -GLIBC_2.21 calloc F -GLIBC_2.21 free F -GLIBC_2.21 malloc F -GLIBC_2.21 realloc F diff --git a/sysdeps/unix/sysv/linux/nios2/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/nios2/libBrokenLocale.abilist deleted file mode 100644 index 5acf5e6d61..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.21 GLIBC_2.21 A -GLIBC_2.21 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/nios2/libanl.abilist b/sysdeps/unix/sysv/linux/nios2/libanl.abilist deleted file mode 100644 index 04286b8fa1..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.21 GLIBC_2.21 A -GLIBC_2.21 gai_cancel F -GLIBC_2.21 gai_error F -GLIBC_2.21 gai_suspend F -GLIBC_2.21 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist deleted file mode 100644 index be252287d1..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist +++ /dev/null @@ -1,2146 +0,0 @@ -GLIBC_2.21 GLIBC_2.21 A -GLIBC_2.21 _Exit F -GLIBC_2.21 _IO_2_1_stderr_ D 0x98 -GLIBC_2.21 _IO_2_1_stdin_ D 0x98 -GLIBC_2.21 _IO_2_1_stdout_ D 0x98 -GLIBC_2.21 _IO_adjust_column F -GLIBC_2.21 _IO_adjust_wcolumn F -GLIBC_2.21 _IO_default_doallocate F -GLIBC_2.21 _IO_default_finish F -GLIBC_2.21 _IO_default_pbackfail F -GLIBC_2.21 _IO_default_uflow F -GLIBC_2.21 _IO_default_xsgetn F -GLIBC_2.21 _IO_default_xsputn F -GLIBC_2.21 _IO_do_write F -GLIBC_2.21 _IO_doallocbuf F -GLIBC_2.21 _IO_fclose F -GLIBC_2.21 _IO_fdopen F -GLIBC_2.21 _IO_feof F -GLIBC_2.21 _IO_ferror F -GLIBC_2.21 _IO_fflush F -GLIBC_2.21 _IO_fgetpos F -GLIBC_2.21 _IO_fgetpos64 F -GLIBC_2.21 _IO_fgets F -GLIBC_2.21 _IO_file_attach F -GLIBC_2.21 _IO_file_close F -GLIBC_2.21 _IO_file_close_it F -GLIBC_2.21 _IO_file_doallocate F -GLIBC_2.21 _IO_file_finish F -GLIBC_2.21 _IO_file_fopen F -GLIBC_2.21 _IO_file_init F -GLIBC_2.21 _IO_file_jumps D 0x54 -GLIBC_2.21 _IO_file_open F -GLIBC_2.21 _IO_file_overflow F -GLIBC_2.21 _IO_file_read F -GLIBC_2.21 _IO_file_seek F -GLIBC_2.21 _IO_file_seekoff F -GLIBC_2.21 _IO_file_setbuf F -GLIBC_2.21 _IO_file_stat F -GLIBC_2.21 _IO_file_sync F -GLIBC_2.21 _IO_file_underflow F -GLIBC_2.21 _IO_file_write F -GLIBC_2.21 _IO_file_xsputn F -GLIBC_2.21 _IO_flockfile F -GLIBC_2.21 _IO_flush_all F -GLIBC_2.21 _IO_flush_all_linebuffered F -GLIBC_2.21 _IO_fopen F -GLIBC_2.21 _IO_fprintf F -GLIBC_2.21 _IO_fputs F -GLIBC_2.21 _IO_fread F -GLIBC_2.21 _IO_free_backup_area F -GLIBC_2.21 _IO_free_wbackup_area F -GLIBC_2.21 _IO_fsetpos F -GLIBC_2.21 _IO_fsetpos64 F -GLIBC_2.21 _IO_ftell F -GLIBC_2.21 _IO_ftrylockfile F -GLIBC_2.21 _IO_funlockfile F -GLIBC_2.21 _IO_fwrite F -GLIBC_2.21 _IO_getc F -GLIBC_2.21 _IO_getline F -GLIBC_2.21 _IO_getline_info F -GLIBC_2.21 _IO_gets F -GLIBC_2.21 _IO_init F -GLIBC_2.21 _IO_init_marker F -GLIBC_2.21 _IO_init_wmarker F -GLIBC_2.21 _IO_iter_begin F -GLIBC_2.21 _IO_iter_end F -GLIBC_2.21 _IO_iter_file F -GLIBC_2.21 _IO_iter_next F -GLIBC_2.21 _IO_least_wmarker F -GLIBC_2.21 _IO_link_in F -GLIBC_2.21 _IO_list_all D 0x4 -GLIBC_2.21 _IO_list_lock F -GLIBC_2.21 _IO_list_resetlock F -GLIBC_2.21 _IO_list_unlock F -GLIBC_2.21 _IO_marker_delta F -GLIBC_2.21 _IO_marker_difference F -GLIBC_2.21 _IO_padn F -GLIBC_2.21 _IO_peekc_locked F -GLIBC_2.21 _IO_popen F -GLIBC_2.21 _IO_printf F -GLIBC_2.21 _IO_proc_close F -GLIBC_2.21 _IO_proc_open F -GLIBC_2.21 _IO_putc F -GLIBC_2.21 _IO_puts F -GLIBC_2.21 _IO_remove_marker F -GLIBC_2.21 _IO_seekmark F -GLIBC_2.21 _IO_seekoff F -GLIBC_2.21 _IO_seekpos F -GLIBC_2.21 _IO_seekwmark F -GLIBC_2.21 _IO_setb F -GLIBC_2.21 _IO_setbuffer F -GLIBC_2.21 _IO_setvbuf F -GLIBC_2.21 _IO_sgetn F -GLIBC_2.21 _IO_sprintf F -GLIBC_2.21 _IO_sputbackc F -GLIBC_2.21 _IO_sputbackwc F -GLIBC_2.21 _IO_sscanf F -GLIBC_2.21 _IO_str_init_readonly F -GLIBC_2.21 _IO_str_init_static F -GLIBC_2.21 _IO_str_overflow F -GLIBC_2.21 _IO_str_pbackfail F -GLIBC_2.21 _IO_str_seekoff F -GLIBC_2.21 _IO_str_underflow F -GLIBC_2.21 _IO_sungetc F -GLIBC_2.21 _IO_sungetwc F -GLIBC_2.21 _IO_switch_to_get_mode F -GLIBC_2.21 _IO_switch_to_main_wget_area F -GLIBC_2.21 _IO_switch_to_wbackup_area F -GLIBC_2.21 _IO_switch_to_wget_mode F -GLIBC_2.21 _IO_un_link F -GLIBC_2.21 _IO_ungetc F -GLIBC_2.21 _IO_unsave_markers F -GLIBC_2.21 _IO_unsave_wmarkers F -GLIBC_2.21 _IO_vfprintf F -GLIBC_2.21 _IO_vfscanf F -GLIBC_2.21 _IO_vsprintf F -GLIBC_2.21 _IO_wdefault_doallocate F -GLIBC_2.21 _IO_wdefault_finish F -GLIBC_2.21 _IO_wdefault_pbackfail F -GLIBC_2.21 _IO_wdefault_uflow F -GLIBC_2.21 _IO_wdefault_xsgetn F -GLIBC_2.21 _IO_wdefault_xsputn F -GLIBC_2.21 _IO_wdo_write F -GLIBC_2.21 _IO_wdoallocbuf F -GLIBC_2.21 _IO_wfile_jumps D 0x54 -GLIBC_2.21 _IO_wfile_overflow F -GLIBC_2.21 _IO_wfile_seekoff F -GLIBC_2.21 _IO_wfile_sync F -GLIBC_2.21 _IO_wfile_underflow F -GLIBC_2.21 _IO_wfile_xsputn F -GLIBC_2.21 _IO_wmarker_delta F -GLIBC_2.21 _IO_wsetb F -GLIBC_2.21 ___brk_addr D 0x4 -GLIBC_2.21 __adddf3 F -GLIBC_2.21 __addsf3 F -GLIBC_2.21 __adjtimex F -GLIBC_2.21 __after_morecore_hook D 0x4 -GLIBC_2.21 __argz_count F -GLIBC_2.21 __argz_next F -GLIBC_2.21 __argz_stringify F -GLIBC_2.21 __asprintf F -GLIBC_2.21 __asprintf_chk F -GLIBC_2.21 __assert F -GLIBC_2.21 __assert_fail F -GLIBC_2.21 __assert_perror_fail F -GLIBC_2.21 __backtrace F -GLIBC_2.21 __backtrace_symbols F -GLIBC_2.21 __backtrace_symbols_fd F -GLIBC_2.21 __bsd_getpgrp F -GLIBC_2.21 __bzero F -GLIBC_2.21 __check_rhosts_file D 0x4 -GLIBC_2.21 __chk_fail F -GLIBC_2.21 __clone F -GLIBC_2.21 __close F -GLIBC_2.21 __cmsg_nxthdr F -GLIBC_2.21 __confstr_chk F -GLIBC_2.21 __connect F -GLIBC_2.21 __ctype_b_loc F -GLIBC_2.21 __ctype_get_mb_cur_max F -GLIBC_2.21 __ctype_tolower_loc F -GLIBC_2.21 __ctype_toupper_loc F -GLIBC_2.21 __curbrk D 0x4 -GLIBC_2.21 __cxa_at_quick_exit F -GLIBC_2.21 __cxa_atexit F -GLIBC_2.21 __cxa_finalize F -GLIBC_2.21 __cxa_thread_atexit_impl F -GLIBC_2.21 __cyg_profile_func_enter F -GLIBC_2.21 __cyg_profile_func_exit F -GLIBC_2.21 __daylight D 0x4 -GLIBC_2.21 __dcgettext F -GLIBC_2.21 __default_morecore F -GLIBC_2.21 __dgettext F -GLIBC_2.21 __divdf3 F -GLIBC_2.21 __divsf3 F -GLIBC_2.21 __dprintf_chk F -GLIBC_2.21 __dup2 F -GLIBC_2.21 __duplocale F -GLIBC_2.21 __endmntent F -GLIBC_2.21 __environ D 0x4 -GLIBC_2.21 __eqdf2 F -GLIBC_2.21 __eqsf2 F -GLIBC_2.21 __errno_location F -GLIBC_2.21 __extendsfdf2 F -GLIBC_2.21 __fbufsize F -GLIBC_2.21 __fcntl F -GLIBC_2.21 __fdelt_chk F -GLIBC_2.21 __fdelt_warn F -GLIBC_2.21 __ffs F -GLIBC_2.21 __fgets_chk F -GLIBC_2.21 __fgets_unlocked_chk F -GLIBC_2.21 __fgetws_chk F -GLIBC_2.21 __fgetws_unlocked_chk F -GLIBC_2.21 __finite F -GLIBC_2.21 __finitef F -GLIBC_2.21 __finitel F -GLIBC_2.21 __fixdfdi F -GLIBC_2.21 __fixdfsi F -GLIBC_2.21 __fixsfdi F -GLIBC_2.21 __fixsfsi F -GLIBC_2.21 __fixunsdfdi F -GLIBC_2.21 __fixunsdfsi F -GLIBC_2.21 __fixunssfdi F -GLIBC_2.21 __fixunssfsi F -GLIBC_2.21 __flbf F -GLIBC_2.21 __floatdidf F -GLIBC_2.21 __floatdisf F -GLIBC_2.21 __floatsidf F -GLIBC_2.21 __floatsisf F -GLIBC_2.21 __floatundidf F -GLIBC_2.21 __floatundisf F -GLIBC_2.21 __floatunsidf F -GLIBC_2.21 __floatunsisf F -GLIBC_2.21 __fork F -GLIBC_2.21 __fpending F -GLIBC_2.21 __fprintf_chk F -GLIBC_2.21 __fpu_control D 0x4 -GLIBC_2.21 __fpurge F -GLIBC_2.21 __fread_chk F -GLIBC_2.21 __fread_unlocked_chk F -GLIBC_2.21 __freadable F -GLIBC_2.21 __freading F -GLIBC_2.21 __free_hook D 0x4 -GLIBC_2.21 __freelocale F -GLIBC_2.21 __fsetlocking F -GLIBC_2.21 __fwprintf_chk F -GLIBC_2.21 __fwritable F -GLIBC_2.21 __fwriting F -GLIBC_2.21 __fxstat F -GLIBC_2.21 __fxstat64 F -GLIBC_2.21 __fxstatat F -GLIBC_2.21 __fxstatat64 F -GLIBC_2.21 __gedf2 F -GLIBC_2.21 __gesf2 F -GLIBC_2.21 __getauxval F -GLIBC_2.21 __getcwd_chk F -GLIBC_2.21 __getdelim F -GLIBC_2.21 __getdomainname_chk F -GLIBC_2.21 __getgroups_chk F -GLIBC_2.21 __gethostname_chk F -GLIBC_2.21 __getlogin_r_chk F -GLIBC_2.21 __getmntent_r F -GLIBC_2.21 __getpagesize F -GLIBC_2.21 __getpgid F -GLIBC_2.21 __getpid F -GLIBC_2.21 __gets_chk F -GLIBC_2.21 __gettimeofday F -GLIBC_2.21 __getwd_chk F -GLIBC_2.21 __gmtime_r F -GLIBC_2.21 __gtdf2 F -GLIBC_2.21 __gtsf2 F -GLIBC_2.21 __h_errno_location F -GLIBC_2.21 __isalnum_l F -GLIBC_2.21 __isalpha_l F -GLIBC_2.21 __isascii_l F -GLIBC_2.21 __isblank_l F -GLIBC_2.21 __iscntrl_l F -GLIBC_2.21 __isctype F -GLIBC_2.21 __isdigit_l F -GLIBC_2.21 __isgraph_l F -GLIBC_2.21 __isinf F -GLIBC_2.21 __isinff F -GLIBC_2.21 __isinfl F -GLIBC_2.21 __islower_l F -GLIBC_2.21 __isnan F -GLIBC_2.21 __isnanf F -GLIBC_2.21 __isnanl F -GLIBC_2.21 __isoc99_fscanf F -GLIBC_2.21 __isoc99_fwscanf F -GLIBC_2.21 __isoc99_scanf F -GLIBC_2.21 __isoc99_sscanf F -GLIBC_2.21 __isoc99_swscanf F -GLIBC_2.21 __isoc99_vfscanf F -GLIBC_2.21 __isoc99_vfwscanf F -GLIBC_2.21 __isoc99_vscanf F -GLIBC_2.21 __isoc99_vsscanf F -GLIBC_2.21 __isoc99_vswscanf F -GLIBC_2.21 __isoc99_vwscanf F -GLIBC_2.21 __isoc99_wscanf F -GLIBC_2.21 __isprint_l F -GLIBC_2.21 __ispunct_l F -GLIBC_2.21 __isspace_l F -GLIBC_2.21 __isupper_l F -GLIBC_2.21 __iswalnum_l F -GLIBC_2.21 __iswalpha_l F -GLIBC_2.21 __iswblank_l F -GLIBC_2.21 __iswcntrl_l F -GLIBC_2.21 __iswctype F -GLIBC_2.21 __iswctype_l F -GLIBC_2.21 __iswdigit_l F -GLIBC_2.21 __iswgraph_l F -GLIBC_2.21 __iswlower_l F -GLIBC_2.21 __iswprint_l F -GLIBC_2.21 __iswpunct_l F -GLIBC_2.21 __iswspace_l F -GLIBC_2.21 __iswupper_l F -GLIBC_2.21 __iswxdigit_l F -GLIBC_2.21 __isxdigit_l F -GLIBC_2.21 __ivaliduser F -GLIBC_2.21 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.21 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.21 __key_gendes_LOCAL D 0x4 -GLIBC_2.21 __ledf2 F -GLIBC_2.21 __lesf2 F -GLIBC_2.21 __libc_allocate_rtsig F -GLIBC_2.21 __libc_calloc F -GLIBC_2.21 __libc_current_sigrtmax F -GLIBC_2.21 __libc_current_sigrtmin F -GLIBC_2.21 __libc_free F -GLIBC_2.21 __libc_freeres F -GLIBC_2.21 __libc_init_first F -GLIBC_2.21 __libc_mallinfo F -GLIBC_2.21 __libc_malloc F -GLIBC_2.21 __libc_mallopt F -GLIBC_2.21 __libc_memalign F -GLIBC_2.21 __libc_pvalloc F -GLIBC_2.21 __libc_realloc F -GLIBC_2.21 __libc_sa_len F -GLIBC_2.21 __libc_start_main F -GLIBC_2.21 __libc_valloc F -GLIBC_2.21 __longjmp_chk F -GLIBC_2.21 __lseek F -GLIBC_2.21 __ltdf2 F -GLIBC_2.21 __ltsf2 F -GLIBC_2.21 __lxstat F -GLIBC_2.21 __lxstat64 F -GLIBC_2.21 __malloc_hook D 0x4 -GLIBC_2.21 __malloc_initialize_hook D 0x4 -GLIBC_2.21 __mbrlen F -GLIBC_2.21 __mbrtowc F -GLIBC_2.21 __mbsnrtowcs_chk F -GLIBC_2.21 __mbsrtowcs_chk F -GLIBC_2.21 __mbstowcs_chk F -GLIBC_2.21 __memalign_hook D 0x4 -GLIBC_2.21 __memcpy_chk F -GLIBC_2.21 __memmove_chk F -GLIBC_2.21 __mempcpy F -GLIBC_2.21 __mempcpy_chk F -GLIBC_2.21 __mempcpy_small F -GLIBC_2.21 __memset_chk F -GLIBC_2.21 __monstartup F -GLIBC_2.21 __morecore D 0x4 -GLIBC_2.21 __muldf3 F -GLIBC_2.21 __mulsf3 F -GLIBC_2.21 __nanosleep F -GLIBC_2.21 __nedf2 F -GLIBC_2.21 __negdf2 F -GLIBC_2.21 __negsf2 F -GLIBC_2.21 __nesf2 F -GLIBC_2.21 __newlocale F -GLIBC_2.21 __nl_langinfo_l F -GLIBC_2.21 __nss_configure_lookup F -GLIBC_2.21 __nss_database_lookup F -GLIBC_2.21 __nss_group_lookup F -GLIBC_2.21 __nss_hostname_digits_dots F -GLIBC_2.21 __nss_hosts_lookup F -GLIBC_2.21 __nss_next F -GLIBC_2.21 __nss_passwd_lookup F -GLIBC_2.21 __obstack_printf_chk F -GLIBC_2.21 __obstack_vprintf_chk F -GLIBC_2.21 __open F -GLIBC_2.21 __open64 F -GLIBC_2.21 __open64_2 F -GLIBC_2.21 __open_2 F -GLIBC_2.21 __openat64_2 F -GLIBC_2.21 __openat_2 F -GLIBC_2.21 __overflow F -GLIBC_2.21 __pipe F -GLIBC_2.21 __poll F -GLIBC_2.21 __poll_chk F -GLIBC_2.21 __posix_getopt F -GLIBC_2.21 __ppoll_chk F -GLIBC_2.21 __pread64 F -GLIBC_2.21 __pread64_chk F -GLIBC_2.21 __pread_chk F -GLIBC_2.21 __printf_chk F -GLIBC_2.21 __printf_fp F -GLIBC_2.21 __profile_frequency F -GLIBC_2.21 __progname D 0x4 -GLIBC_2.21 __progname_full D 0x4 -GLIBC_2.21 __ptsname_r_chk F -GLIBC_2.21 __pwrite64 F -GLIBC_2.21 __rawmemchr F -GLIBC_2.21 __rcmd_errstr D 0x4 -GLIBC_2.21 __read F -GLIBC_2.21 __read_chk F -GLIBC_2.21 __readlink_chk F -GLIBC_2.21 __readlinkat_chk F -GLIBC_2.21 __realloc_hook D 0x4 -GLIBC_2.21 __realpath_chk F -GLIBC_2.21 __recv_chk F -GLIBC_2.21 __recvfrom_chk F -GLIBC_2.21 __register_atfork F -GLIBC_2.21 __res_init F -GLIBC_2.21 __res_nclose F -GLIBC_2.21 __res_ninit F -GLIBC_2.21 __res_randomid F -GLIBC_2.21 __res_state F -GLIBC_2.21 __rpc_thread_createerr F -GLIBC_2.21 __rpc_thread_svc_fdset F -GLIBC_2.21 __rpc_thread_svc_max_pollfd F -GLIBC_2.21 __rpc_thread_svc_pollfd F -GLIBC_2.21 __sbrk F -GLIBC_2.21 __sched_cpualloc F -GLIBC_2.21 __sched_cpucount F -GLIBC_2.21 __sched_cpufree F -GLIBC_2.21 __sched_get_priority_max F -GLIBC_2.21 __sched_get_priority_min F -GLIBC_2.21 __sched_getparam F -GLIBC_2.21 __sched_getscheduler F -GLIBC_2.21 __sched_setscheduler F -GLIBC_2.21 __sched_yield F -GLIBC_2.21 __select F -GLIBC_2.21 __setmntent F -GLIBC_2.21 __setpgid F -GLIBC_2.21 __sigaction F -GLIBC_2.21 __sigaddset F -GLIBC_2.21 __sigdelset F -GLIBC_2.21 __sigismember F -GLIBC_2.21 __signbit F -GLIBC_2.21 __signbitf F -GLIBC_2.21 __sigpause F -GLIBC_2.21 __sigsetjmp F -GLIBC_2.21 __sigsuspend F -GLIBC_2.21 __snprintf_chk F -GLIBC_2.21 __sprintf_chk F -GLIBC_2.21 __stack_chk_fail F -GLIBC_2.21 __statfs F -GLIBC_2.21 __stpcpy F -GLIBC_2.21 __stpcpy_chk F -GLIBC_2.21 __stpcpy_small F -GLIBC_2.21 __stpncpy F -GLIBC_2.21 __stpncpy_chk F -GLIBC_2.21 __strcasecmp F -GLIBC_2.21 __strcasecmp_l F -GLIBC_2.21 __strcasestr F -GLIBC_2.21 __strcat_chk F -GLIBC_2.21 __strcoll_l F -GLIBC_2.21 __strcpy_chk F -GLIBC_2.21 __strcpy_small F -GLIBC_2.21 __strcspn_c1 F -GLIBC_2.21 __strcspn_c2 F -GLIBC_2.21 __strcspn_c3 F -GLIBC_2.21 __strdup F -GLIBC_2.21 __strerror_r F -GLIBC_2.21 __strfmon_l F -GLIBC_2.21 __strftime_l F -GLIBC_2.21 __strncasecmp_l F -GLIBC_2.21 __strncat_chk F -GLIBC_2.21 __strncpy_chk F -GLIBC_2.21 __strndup F -GLIBC_2.21 __strpbrk_c2 F -GLIBC_2.21 __strpbrk_c3 F -GLIBC_2.21 __strsep_1c F -GLIBC_2.21 __strsep_2c F -GLIBC_2.21 __strsep_3c F -GLIBC_2.21 __strsep_g F -GLIBC_2.21 __strspn_c1 F -GLIBC_2.21 __strspn_c2 F -GLIBC_2.21 __strspn_c3 F -GLIBC_2.21 __strtod_internal F -GLIBC_2.21 __strtod_l F -GLIBC_2.21 __strtof_internal F -GLIBC_2.21 __strtof_l F -GLIBC_2.21 __strtok_r F -GLIBC_2.21 __strtok_r_1c F -GLIBC_2.21 __strtol_internal F -GLIBC_2.21 __strtol_l F -GLIBC_2.21 __strtold_internal F -GLIBC_2.21 __strtold_l F -GLIBC_2.21 __strtoll_internal F -GLIBC_2.21 __strtoll_l F -GLIBC_2.21 __strtoul_internal F -GLIBC_2.21 __strtoul_l F -GLIBC_2.21 __strtoull_internal F -GLIBC_2.21 __strtoull_l F -GLIBC_2.21 __strverscmp F -GLIBC_2.21 __strxfrm_l F -GLIBC_2.21 __subdf3 F -GLIBC_2.21 __subsf3 F -GLIBC_2.21 __swprintf_chk F -GLIBC_2.21 __sysconf F -GLIBC_2.21 __syslog_chk F -GLIBC_2.21 __sysv_signal F -GLIBC_2.21 __timezone D 0x4 -GLIBC_2.21 __toascii_l F -GLIBC_2.21 __tolower_l F -GLIBC_2.21 __toupper_l F -GLIBC_2.21 __towctrans F -GLIBC_2.21 __towctrans_l F -GLIBC_2.21 __towlower_l F -GLIBC_2.21 __towupper_l F -GLIBC_2.21 __truncdfsf2 F -GLIBC_2.21 __ttyname_r_chk F -GLIBC_2.21 __tzname D 0x8 -GLIBC_2.21 __uflow F -GLIBC_2.21 __underflow F -GLIBC_2.21 __unorddf2 F -GLIBC_2.21 __unordsf2 F -GLIBC_2.21 __uselocale F -GLIBC_2.21 __vasprintf_chk F -GLIBC_2.21 __vdprintf_chk F -GLIBC_2.21 __vfork F -GLIBC_2.21 __vfprintf_chk F -GLIBC_2.21 __vfscanf F -GLIBC_2.21 __vfwprintf_chk F -GLIBC_2.21 __vprintf_chk F -GLIBC_2.21 __vsnprintf F -GLIBC_2.21 __vsnprintf_chk F -GLIBC_2.21 __vsprintf_chk F -GLIBC_2.21 __vsscanf F -GLIBC_2.21 __vswprintf_chk F -GLIBC_2.21 __vsyslog_chk F -GLIBC_2.21 __vwprintf_chk F -GLIBC_2.21 __wait F -GLIBC_2.21 __waitpid F -GLIBC_2.21 __wcpcpy_chk F -GLIBC_2.21 __wcpncpy_chk F -GLIBC_2.21 __wcrtomb_chk F -GLIBC_2.21 __wcscasecmp_l F -GLIBC_2.21 __wcscat_chk F -GLIBC_2.21 __wcscoll_l F -GLIBC_2.21 __wcscpy_chk F -GLIBC_2.21 __wcsftime_l F -GLIBC_2.21 __wcsncasecmp_l F -GLIBC_2.21 __wcsncat_chk F -GLIBC_2.21 __wcsncpy_chk F -GLIBC_2.21 __wcsnrtombs_chk F -GLIBC_2.21 __wcsrtombs_chk F -GLIBC_2.21 __wcstod_internal F -GLIBC_2.21 __wcstod_l F -GLIBC_2.21 __wcstof_internal F -GLIBC_2.21 __wcstof_l F -GLIBC_2.21 __wcstol_internal F -GLIBC_2.21 __wcstol_l F -GLIBC_2.21 __wcstold_internal F -GLIBC_2.21 __wcstold_l F -GLIBC_2.21 __wcstoll_internal F -GLIBC_2.21 __wcstoll_l F -GLIBC_2.21 __wcstombs_chk F -GLIBC_2.21 __wcstoul_internal F -GLIBC_2.21 __wcstoul_l F -GLIBC_2.21 __wcstoull_internal F -GLIBC_2.21 __wcstoull_l F -GLIBC_2.21 __wcsxfrm_l F -GLIBC_2.21 __wctomb_chk F -GLIBC_2.21 __wctrans_l F -GLIBC_2.21 __wctype_l F -GLIBC_2.21 __wmemcpy_chk F -GLIBC_2.21 __wmemmove_chk F -GLIBC_2.21 __wmempcpy_chk F -GLIBC_2.21 __wmemset_chk F -GLIBC_2.21 __woverflow F -GLIBC_2.21 __wprintf_chk F -GLIBC_2.21 __write F -GLIBC_2.21 __wuflow F -GLIBC_2.21 __wunderflow F -GLIBC_2.21 __xmknod F -GLIBC_2.21 __xmknodat F -GLIBC_2.21 __xpg_basename F -GLIBC_2.21 __xpg_sigpause F -GLIBC_2.21 __xpg_strerror_r F -GLIBC_2.21 __xstat F -GLIBC_2.21 __xstat64 F -GLIBC_2.21 _authenticate F -GLIBC_2.21 _dl_mcount_wrapper F -GLIBC_2.21 _dl_mcount_wrapper_check F -GLIBC_2.21 _environ D 0x4 -GLIBC_2.21 _exit F -GLIBC_2.21 _flush_cache F -GLIBC_2.21 _flushlbf F -GLIBC_2.21 _libc_intl_domainname D 0x5 -GLIBC_2.21 _longjmp F -GLIBC_2.21 _mcleanup F -GLIBC_2.21 _mcount F -GLIBC_2.21 _nl_default_dirname D 0x12 -GLIBC_2.21 _nl_domain_bindings D 0x4 -GLIBC_2.21 _nl_msg_cat_cntr D 0x4 -GLIBC_2.21 _null_auth D 0xc -GLIBC_2.21 _obstack_allocated_p F -GLIBC_2.21 _obstack_begin F -GLIBC_2.21 _obstack_begin_1 F -GLIBC_2.21 _obstack_free F -GLIBC_2.21 _obstack_memory_used F -GLIBC_2.21 _obstack_newchunk F -GLIBC_2.21 _res D 0x200 -GLIBC_2.21 _res_hconf D 0x30 -GLIBC_2.21 _rpc_dtablesize F -GLIBC_2.21 _seterr_reply F -GLIBC_2.21 _setjmp F -GLIBC_2.21 _sys_errlist D 0x21c -GLIBC_2.21 _sys_nerr D 0x4 -GLIBC_2.21 _sys_siglist D 0x104 -GLIBC_2.21 _tolower F -GLIBC_2.21 _toupper F -GLIBC_2.21 a64l F -GLIBC_2.21 abort F -GLIBC_2.21 abs F -GLIBC_2.21 accept F -GLIBC_2.21 accept4 F -GLIBC_2.21 access F -GLIBC_2.21 acct F -GLIBC_2.21 addmntent F -GLIBC_2.21 addseverity F -GLIBC_2.21 adjtime F -GLIBC_2.21 adjtimex F -GLIBC_2.21 advance F -GLIBC_2.21 alarm F -GLIBC_2.21 aligned_alloc F -GLIBC_2.21 alphasort F -GLIBC_2.21 alphasort64 F -GLIBC_2.21 argp_err_exit_status D 0x4 -GLIBC_2.21 argp_error F -GLIBC_2.21 argp_failure F -GLIBC_2.21 argp_help F -GLIBC_2.21 argp_parse F -GLIBC_2.21 argp_program_bug_address D 0x4 -GLIBC_2.21 argp_program_version D 0x4 -GLIBC_2.21 argp_program_version_hook D 0x4 -GLIBC_2.21 argp_state_help F -GLIBC_2.21 argp_usage F -GLIBC_2.21 argz_add F -GLIBC_2.21 argz_add_sep F -GLIBC_2.21 argz_append F -GLIBC_2.21 argz_count F -GLIBC_2.21 argz_create F -GLIBC_2.21 argz_create_sep F -GLIBC_2.21 argz_delete F -GLIBC_2.21 argz_extract F -GLIBC_2.21 argz_insert F -GLIBC_2.21 argz_next F -GLIBC_2.21 argz_replace F -GLIBC_2.21 argz_stringify F -GLIBC_2.21 asctime F -GLIBC_2.21 asctime_r F -GLIBC_2.21 asprintf F -GLIBC_2.21 atof F -GLIBC_2.21 atoi F -GLIBC_2.21 atol F -GLIBC_2.21 atoll F -GLIBC_2.21 authdes_create F -GLIBC_2.21 authdes_getucred F -GLIBC_2.21 authdes_pk_create F -GLIBC_2.21 authnone_create F -GLIBC_2.21 authunix_create F -GLIBC_2.21 authunix_create_default F -GLIBC_2.21 backtrace F -GLIBC_2.21 backtrace_symbols F -GLIBC_2.21 backtrace_symbols_fd F -GLIBC_2.21 basename F -GLIBC_2.21 bcmp F -GLIBC_2.21 bcopy F -GLIBC_2.21 bdflush F -GLIBC_2.21 bind F -GLIBC_2.21 bind_textdomain_codeset F -GLIBC_2.21 bindresvport F -GLIBC_2.21 bindtextdomain F -GLIBC_2.21 brk F -GLIBC_2.21 bsd_signal F -GLIBC_2.21 bsearch F -GLIBC_2.21 btowc F -GLIBC_2.21 bzero F -GLIBC_2.21 c16rtomb F -GLIBC_2.21 c32rtomb F -GLIBC_2.21 cacheflush F -GLIBC_2.21 calloc F -GLIBC_2.21 callrpc F -GLIBC_2.21 canonicalize_file_name F -GLIBC_2.21 capget F -GLIBC_2.21 capset F -GLIBC_2.21 catclose F -GLIBC_2.21 catgets F -GLIBC_2.21 catopen F -GLIBC_2.21 cbc_crypt F -GLIBC_2.21 cfgetispeed F -GLIBC_2.21 cfgetospeed F -GLIBC_2.21 cfmakeraw F -GLIBC_2.21 cfree F -GLIBC_2.21 cfsetispeed F -GLIBC_2.21 cfsetospeed F -GLIBC_2.21 cfsetspeed F -GLIBC_2.21 chdir F -GLIBC_2.21 chflags F -GLIBC_2.21 chmod F -GLIBC_2.21 chown F -GLIBC_2.21 chroot F -GLIBC_2.21 clearenv F -GLIBC_2.21 clearerr F -GLIBC_2.21 clearerr_unlocked F -GLIBC_2.21 clnt_broadcast F -GLIBC_2.21 clnt_create F -GLIBC_2.21 clnt_pcreateerror F -GLIBC_2.21 clnt_perrno F -GLIBC_2.21 clnt_perror F -GLIBC_2.21 clnt_spcreateerror F -GLIBC_2.21 clnt_sperrno F -GLIBC_2.21 clnt_sperror F -GLIBC_2.21 clntraw_create F -GLIBC_2.21 clnttcp_create F -GLIBC_2.21 clntudp_bufcreate F -GLIBC_2.21 clntudp_create F -GLIBC_2.21 clntunix_create F -GLIBC_2.21 clock F -GLIBC_2.21 clock_adjtime F -GLIBC_2.21 clock_getcpuclockid F -GLIBC_2.21 clock_getres F -GLIBC_2.21 clock_gettime F -GLIBC_2.21 clock_nanosleep F -GLIBC_2.21 clock_settime F -GLIBC_2.21 clone F -GLIBC_2.21 close F -GLIBC_2.21 closedir F -GLIBC_2.21 closelog F -GLIBC_2.21 confstr F -GLIBC_2.21 connect F -GLIBC_2.21 copysign F -GLIBC_2.21 copysignf F -GLIBC_2.21 copysignl F -GLIBC_2.21 creat F -GLIBC_2.21 creat64 F -GLIBC_2.21 create_module F -GLIBC_2.21 ctermid F -GLIBC_2.21 ctime F -GLIBC_2.21 ctime_r F -GLIBC_2.21 cuserid F -GLIBC_2.21 daemon F -GLIBC_2.21 daylight D 0x4 -GLIBC_2.21 dcgettext F -GLIBC_2.21 dcngettext F -GLIBC_2.21 delete_module F -GLIBC_2.21 des_setparity F -GLIBC_2.21 dgettext F -GLIBC_2.21 difftime F -GLIBC_2.21 dirfd F -GLIBC_2.21 dirname F -GLIBC_2.21 div F -GLIBC_2.21 dl_iterate_phdr F -GLIBC_2.21 dngettext F -GLIBC_2.21 dprintf F -GLIBC_2.21 drand48 F -GLIBC_2.21 drand48_r F -GLIBC_2.21 dup F -GLIBC_2.21 dup2 F -GLIBC_2.21 dup3 F -GLIBC_2.21 duplocale F -GLIBC_2.21 dysize F -GLIBC_2.21 eaccess F -GLIBC_2.21 ecb_crypt F -GLIBC_2.21 ecvt F -GLIBC_2.21 ecvt_r F -GLIBC_2.21 endaliasent F -GLIBC_2.21 endfsent F -GLIBC_2.21 endgrent F -GLIBC_2.21 endhostent F -GLIBC_2.21 endmntent F -GLIBC_2.21 endnetent F -GLIBC_2.21 endnetgrent F -GLIBC_2.21 endprotoent F -GLIBC_2.21 endpwent F -GLIBC_2.21 endrpcent F -GLIBC_2.21 endservent F -GLIBC_2.21 endsgent F -GLIBC_2.21 endspent F -GLIBC_2.21 endttyent F -GLIBC_2.21 endusershell F -GLIBC_2.21 endutent F -GLIBC_2.21 endutxent F -GLIBC_2.21 environ D 0x4 -GLIBC_2.21 envz_add F -GLIBC_2.21 envz_entry F -GLIBC_2.21 envz_get F -GLIBC_2.21 envz_merge F -GLIBC_2.21 envz_remove F -GLIBC_2.21 envz_strip F -GLIBC_2.21 epoll_create F -GLIBC_2.21 epoll_create1 F -GLIBC_2.21 epoll_ctl F -GLIBC_2.21 epoll_pwait F -GLIBC_2.21 epoll_wait F -GLIBC_2.21 erand48 F -GLIBC_2.21 erand48_r F -GLIBC_2.21 err F -GLIBC_2.21 error F -GLIBC_2.21 error_at_line F -GLIBC_2.21 error_message_count D 0x4 -GLIBC_2.21 error_one_per_line D 0x4 -GLIBC_2.21 error_print_progname D 0x4 -GLIBC_2.21 errx F -GLIBC_2.21 ether_aton F -GLIBC_2.21 ether_aton_r F -GLIBC_2.21 ether_hostton F -GLIBC_2.21 ether_line F -GLIBC_2.21 ether_ntoa F -GLIBC_2.21 ether_ntoa_r F -GLIBC_2.21 ether_ntohost F -GLIBC_2.21 euidaccess F -GLIBC_2.21 eventfd F -GLIBC_2.21 eventfd_read F -GLIBC_2.21 eventfd_write F -GLIBC_2.21 execl F -GLIBC_2.21 execle F -GLIBC_2.21 execlp F -GLIBC_2.21 execv F -GLIBC_2.21 execve F -GLIBC_2.21 execvp F -GLIBC_2.21 execvpe F -GLIBC_2.21 exit F -GLIBC_2.21 faccessat F -GLIBC_2.21 fallocate F -GLIBC_2.21 fallocate64 F -GLIBC_2.21 fanotify_init F -GLIBC_2.21 fanotify_mark F -GLIBC_2.21 fattach F -GLIBC_2.21 fchdir F -GLIBC_2.21 fchflags F -GLIBC_2.21 fchmod F -GLIBC_2.21 fchmodat F -GLIBC_2.21 fchown F -GLIBC_2.21 fchownat F -GLIBC_2.21 fclose F -GLIBC_2.21 fcloseall F -GLIBC_2.21 fcntl F -GLIBC_2.21 fcvt F -GLIBC_2.21 fcvt_r F -GLIBC_2.21 fdatasync F -GLIBC_2.21 fdetach F -GLIBC_2.21 fdopen F -GLIBC_2.21 fdopendir F -GLIBC_2.21 feof F -GLIBC_2.21 feof_unlocked F -GLIBC_2.21 ferror F -GLIBC_2.21 ferror_unlocked F -GLIBC_2.21 fexecve F -GLIBC_2.21 fflush F -GLIBC_2.21 fflush_unlocked F -GLIBC_2.21 ffs F -GLIBC_2.21 ffsl F -GLIBC_2.21 ffsll F -GLIBC_2.21 fgetc F -GLIBC_2.21 fgetc_unlocked F -GLIBC_2.21 fgetgrent F -GLIBC_2.21 fgetgrent_r F -GLIBC_2.21 fgetpos F -GLIBC_2.21 fgetpos64 F -GLIBC_2.21 fgetpwent F -GLIBC_2.21 fgetpwent_r F -GLIBC_2.21 fgets F -GLIBC_2.21 fgets_unlocked F -GLIBC_2.21 fgetsgent F -GLIBC_2.21 fgetsgent_r F -GLIBC_2.21 fgetspent F -GLIBC_2.21 fgetspent_r F -GLIBC_2.21 fgetwc F -GLIBC_2.21 fgetwc_unlocked F -GLIBC_2.21 fgetws F -GLIBC_2.21 fgetws_unlocked F -GLIBC_2.21 fgetxattr F -GLIBC_2.21 fileno F -GLIBC_2.21 fileno_unlocked F -GLIBC_2.21 finite F -GLIBC_2.21 finitef F -GLIBC_2.21 finitel F -GLIBC_2.21 flistxattr F -GLIBC_2.21 flock F -GLIBC_2.21 flockfile F -GLIBC_2.21 fmemopen F -GLIBC_2.21 fmtmsg F -GLIBC_2.21 fnmatch F -GLIBC_2.21 fopen F -GLIBC_2.21 fopen64 F -GLIBC_2.21 fopencookie F -GLIBC_2.21 fork F -GLIBC_2.21 fpathconf F -GLIBC_2.21 fprintf F -GLIBC_2.21 fputc F -GLIBC_2.21 fputc_unlocked F -GLIBC_2.21 fputs F -GLIBC_2.21 fputs_unlocked F -GLIBC_2.21 fputwc F -GLIBC_2.21 fputwc_unlocked F -GLIBC_2.21 fputws F -GLIBC_2.21 fputws_unlocked F -GLIBC_2.21 fread F -GLIBC_2.21 fread_unlocked F -GLIBC_2.21 free F -GLIBC_2.21 freeaddrinfo F -GLIBC_2.21 freeifaddrs F -GLIBC_2.21 freelocale F -GLIBC_2.21 fremovexattr F -GLIBC_2.21 freopen F -GLIBC_2.21 freopen64 F -GLIBC_2.21 frexp F -GLIBC_2.21 frexpf F -GLIBC_2.21 frexpl F -GLIBC_2.21 fscanf F -GLIBC_2.21 fseek F -GLIBC_2.21 fseeko F -GLIBC_2.21 fseeko64 F -GLIBC_2.21 fsetpos F -GLIBC_2.21 fsetpos64 F -GLIBC_2.21 fsetxattr F -GLIBC_2.21 fstatfs F -GLIBC_2.21 fstatfs64 F -GLIBC_2.21 fstatvfs F -GLIBC_2.21 fstatvfs64 F -GLIBC_2.21 fsync F -GLIBC_2.21 ftell F -GLIBC_2.21 ftello F -GLIBC_2.21 ftello64 F -GLIBC_2.21 ftime F -GLIBC_2.21 ftok F -GLIBC_2.21 ftruncate F -GLIBC_2.21 ftruncate64 F -GLIBC_2.21 ftrylockfile F -GLIBC_2.21 fts_children F -GLIBC_2.21 fts_close F -GLIBC_2.21 fts_open F -GLIBC_2.21 fts_read F -GLIBC_2.21 fts_set F -GLIBC_2.21 ftw F -GLIBC_2.21 ftw64 F -GLIBC_2.21 funlockfile F -GLIBC_2.21 futimens F -GLIBC_2.21 futimes F -GLIBC_2.21 futimesat F -GLIBC_2.21 fwide F -GLIBC_2.21 fwprintf F -GLIBC_2.21 fwrite F -GLIBC_2.21 fwrite_unlocked F -GLIBC_2.21 fwscanf F -GLIBC_2.21 gai_strerror F -GLIBC_2.21 gcvt F -GLIBC_2.21 get_avphys_pages F -GLIBC_2.21 get_current_dir_name F -GLIBC_2.21 get_kernel_syms F -GLIBC_2.21 get_myaddress F -GLIBC_2.21 get_nprocs F -GLIBC_2.21 get_nprocs_conf F -GLIBC_2.21 get_phys_pages F -GLIBC_2.21 getaddrinfo F -GLIBC_2.21 getaliasbyname F -GLIBC_2.21 getaliasbyname_r F -GLIBC_2.21 getaliasent F -GLIBC_2.21 getaliasent_r F -GLIBC_2.21 getauxval F -GLIBC_2.21 getc F -GLIBC_2.21 getc_unlocked F -GLIBC_2.21 getchar F -GLIBC_2.21 getchar_unlocked F -GLIBC_2.21 getcontext F -GLIBC_2.21 getcwd F -GLIBC_2.21 getdate F -GLIBC_2.21 getdate_err D 0x4 -GLIBC_2.21 getdate_r F -GLIBC_2.21 getdelim F -GLIBC_2.21 getdirentries F -GLIBC_2.21 getdirentries64 F -GLIBC_2.21 getdomainname F -GLIBC_2.21 getdtablesize F -GLIBC_2.21 getegid F -GLIBC_2.21 getenv F -GLIBC_2.21 geteuid F -GLIBC_2.21 getfsent F -GLIBC_2.21 getfsfile F -GLIBC_2.21 getfsspec F -GLIBC_2.21 getgid F -GLIBC_2.21 getgrent F -GLIBC_2.21 getgrent_r F -GLIBC_2.21 getgrgid F -GLIBC_2.21 getgrgid_r F -GLIBC_2.21 getgrnam F -GLIBC_2.21 getgrnam_r F -GLIBC_2.21 getgrouplist F -GLIBC_2.21 getgroups F -GLIBC_2.21 gethostbyaddr F -GLIBC_2.21 gethostbyaddr_r F -GLIBC_2.21 gethostbyname F -GLIBC_2.21 gethostbyname2 F -GLIBC_2.21 gethostbyname2_r F -GLIBC_2.21 gethostbyname_r F -GLIBC_2.21 gethostent F -GLIBC_2.21 gethostent_r F -GLIBC_2.21 gethostid F -GLIBC_2.21 gethostname F -GLIBC_2.21 getifaddrs F -GLIBC_2.21 getipv4sourcefilter F -GLIBC_2.21 getitimer F -GLIBC_2.21 getline F -GLIBC_2.21 getloadavg F -GLIBC_2.21 getlogin F -GLIBC_2.21 getlogin_r F -GLIBC_2.21 getmntent F -GLIBC_2.21 getmntent_r F -GLIBC_2.21 getmsg F -GLIBC_2.21 getnameinfo F -GLIBC_2.21 getnetbyaddr F -GLIBC_2.21 getnetbyaddr_r F -GLIBC_2.21 getnetbyname F -GLIBC_2.21 getnetbyname_r F -GLIBC_2.21 getnetent F -GLIBC_2.21 getnetent_r F -GLIBC_2.21 getnetgrent F -GLIBC_2.21 getnetgrent_r F -GLIBC_2.21 getnetname F -GLIBC_2.21 getopt F -GLIBC_2.21 getopt_long F -GLIBC_2.21 getopt_long_only F -GLIBC_2.21 getpagesize F -GLIBC_2.21 getpass F -GLIBC_2.21 getpeername F -GLIBC_2.21 getpgid F -GLIBC_2.21 getpgrp F -GLIBC_2.21 getpid F -GLIBC_2.21 getpmsg F -GLIBC_2.21 getppid F -GLIBC_2.21 getpriority F -GLIBC_2.21 getprotobyname F -GLIBC_2.21 getprotobyname_r F -GLIBC_2.21 getprotobynumber F -GLIBC_2.21 getprotobynumber_r F -GLIBC_2.21 getprotoent F -GLIBC_2.21 getprotoent_r F -GLIBC_2.21 getpt F -GLIBC_2.21 getpublickey F -GLIBC_2.21 getpw F -GLIBC_2.21 getpwent F -GLIBC_2.21 getpwent_r F -GLIBC_2.21 getpwnam F -GLIBC_2.21 getpwnam_r F -GLIBC_2.21 getpwuid F -GLIBC_2.21 getpwuid_r F -GLIBC_2.21 getresgid F -GLIBC_2.21 getresuid F -GLIBC_2.21 getrlimit F -GLIBC_2.21 getrlimit64 F -GLIBC_2.21 getrpcbyname F -GLIBC_2.21 getrpcbyname_r F -GLIBC_2.21 getrpcbynumber F -GLIBC_2.21 getrpcbynumber_r F -GLIBC_2.21 getrpcent F -GLIBC_2.21 getrpcent_r F -GLIBC_2.21 getrpcport F -GLIBC_2.21 getrusage F -GLIBC_2.21 gets F -GLIBC_2.21 getsecretkey F -GLIBC_2.21 getservbyname F -GLIBC_2.21 getservbyname_r F -GLIBC_2.21 getservbyport F -GLIBC_2.21 getservbyport_r F -GLIBC_2.21 getservent F -GLIBC_2.21 getservent_r F -GLIBC_2.21 getsgent F -GLIBC_2.21 getsgent_r F -GLIBC_2.21 getsgnam F -GLIBC_2.21 getsgnam_r F -GLIBC_2.21 getsid F -GLIBC_2.21 getsockname F -GLIBC_2.21 getsockopt F -GLIBC_2.21 getsourcefilter F -GLIBC_2.21 getspent F -GLIBC_2.21 getspent_r F -GLIBC_2.21 getspnam F -GLIBC_2.21 getspnam_r F -GLIBC_2.21 getsubopt F -GLIBC_2.21 gettext F -GLIBC_2.21 gettimeofday F -GLIBC_2.21 getttyent F -GLIBC_2.21 getttynam F -GLIBC_2.21 getuid F -GLIBC_2.21 getusershell F -GLIBC_2.21 getutent F -GLIBC_2.21 getutent_r F -GLIBC_2.21 getutid F -GLIBC_2.21 getutid_r F -GLIBC_2.21 getutline F -GLIBC_2.21 getutline_r F -GLIBC_2.21 getutmp F -GLIBC_2.21 getutmpx F -GLIBC_2.21 getutxent F -GLIBC_2.21 getutxid F -GLIBC_2.21 getutxline F -GLIBC_2.21 getw F -GLIBC_2.21 getwc F -GLIBC_2.21 getwc_unlocked F -GLIBC_2.21 getwchar F -GLIBC_2.21 getwchar_unlocked F -GLIBC_2.21 getwd F -GLIBC_2.21 getxattr F -GLIBC_2.21 glob F -GLIBC_2.21 glob64 F -GLIBC_2.21 glob_pattern_p F -GLIBC_2.21 globfree F -GLIBC_2.21 globfree64 F -GLIBC_2.21 gmtime F -GLIBC_2.21 gmtime_r F -GLIBC_2.21 gnu_dev_major F -GLIBC_2.21 gnu_dev_makedev F -GLIBC_2.21 gnu_dev_minor F -GLIBC_2.21 gnu_get_libc_release F -GLIBC_2.21 gnu_get_libc_version F -GLIBC_2.21 grantpt F -GLIBC_2.21 group_member F -GLIBC_2.21 gsignal F -GLIBC_2.21 gtty F -GLIBC_2.21 h_errlist D 0x14 -GLIBC_2.21 h_nerr D 0x4 -GLIBC_2.21 hasmntopt F -GLIBC_2.21 hcreate F -GLIBC_2.21 hcreate_r F -GLIBC_2.21 hdestroy F -GLIBC_2.21 hdestroy_r F -GLIBC_2.21 herror F -GLIBC_2.21 host2netname F -GLIBC_2.21 hsearch F -GLIBC_2.21 hsearch_r F -GLIBC_2.21 hstrerror F -GLIBC_2.21 htonl F -GLIBC_2.21 htons F -GLIBC_2.21 iconv F -GLIBC_2.21 iconv_close F -GLIBC_2.21 iconv_open F -GLIBC_2.21 if_freenameindex F -GLIBC_2.21 if_indextoname F -GLIBC_2.21 if_nameindex F -GLIBC_2.21 if_nametoindex F -GLIBC_2.21 imaxabs F -GLIBC_2.21 imaxdiv F -GLIBC_2.21 in6addr_any D 0x10 -GLIBC_2.21 in6addr_loopback D 0x10 -GLIBC_2.21 index F -GLIBC_2.21 inet6_opt_append F -GLIBC_2.21 inet6_opt_find F -GLIBC_2.21 inet6_opt_finish F -GLIBC_2.21 inet6_opt_get_val F -GLIBC_2.21 inet6_opt_init F -GLIBC_2.21 inet6_opt_next F -GLIBC_2.21 inet6_opt_set_val F -GLIBC_2.21 inet6_option_alloc F -GLIBC_2.21 inet6_option_append F -GLIBC_2.21 inet6_option_find F -GLIBC_2.21 inet6_option_init F -GLIBC_2.21 inet6_option_next F -GLIBC_2.21 inet6_option_space F -GLIBC_2.21 inet6_rth_add F -GLIBC_2.21 inet6_rth_getaddr F -GLIBC_2.21 inet6_rth_init F -GLIBC_2.21 inet6_rth_reverse F -GLIBC_2.21 inet6_rth_segments F -GLIBC_2.21 inet6_rth_space F -GLIBC_2.21 inet_addr F -GLIBC_2.21 inet_aton F -GLIBC_2.21 inet_lnaof F -GLIBC_2.21 inet_makeaddr F -GLIBC_2.21 inet_netof F -GLIBC_2.21 inet_network F -GLIBC_2.21 inet_nsap_addr F -GLIBC_2.21 inet_nsap_ntoa F -GLIBC_2.21 inet_ntoa F -GLIBC_2.21 inet_ntop F -GLIBC_2.21 inet_pton F -GLIBC_2.21 init_module F -GLIBC_2.21 initgroups F -GLIBC_2.21 initstate F -GLIBC_2.21 initstate_r F -GLIBC_2.21 innetgr F -GLIBC_2.21 inotify_add_watch F -GLIBC_2.21 inotify_init F -GLIBC_2.21 inotify_init1 F -GLIBC_2.21 inotify_rm_watch F -GLIBC_2.21 insque F -GLIBC_2.21 ioctl F -GLIBC_2.21 iruserok F -GLIBC_2.21 iruserok_af F -GLIBC_2.21 isalnum F -GLIBC_2.21 isalnum_l F -GLIBC_2.21 isalpha F -GLIBC_2.21 isalpha_l F -GLIBC_2.21 isascii F -GLIBC_2.21 isastream F -GLIBC_2.21 isatty F -GLIBC_2.21 isblank F -GLIBC_2.21 isblank_l F -GLIBC_2.21 iscntrl F -GLIBC_2.21 iscntrl_l F -GLIBC_2.21 isctype F -GLIBC_2.21 isdigit F -GLIBC_2.21 isdigit_l F -GLIBC_2.21 isfdtype F -GLIBC_2.21 isgraph F -GLIBC_2.21 isgraph_l F -GLIBC_2.21 isinf F -GLIBC_2.21 isinff F -GLIBC_2.21 isinfl F -GLIBC_2.21 islower F -GLIBC_2.21 islower_l F -GLIBC_2.21 isnan F -GLIBC_2.21 isnanf F -GLIBC_2.21 isnanl F -GLIBC_2.21 isprint F -GLIBC_2.21 isprint_l F -GLIBC_2.21 ispunct F -GLIBC_2.21 ispunct_l F -GLIBC_2.21 isspace F -GLIBC_2.21 isspace_l F -GLIBC_2.21 isupper F -GLIBC_2.21 isupper_l F -GLIBC_2.21 iswalnum F -GLIBC_2.21 iswalnum_l F -GLIBC_2.21 iswalpha F -GLIBC_2.21 iswalpha_l F -GLIBC_2.21 iswblank F -GLIBC_2.21 iswblank_l F -GLIBC_2.21 iswcntrl F -GLIBC_2.21 iswcntrl_l F -GLIBC_2.21 iswctype F -GLIBC_2.21 iswctype_l F -GLIBC_2.21 iswdigit F -GLIBC_2.21 iswdigit_l F -GLIBC_2.21 iswgraph F -GLIBC_2.21 iswgraph_l F -GLIBC_2.21 iswlower F -GLIBC_2.21 iswlower_l F -GLIBC_2.21 iswprint F -GLIBC_2.21 iswprint_l F -GLIBC_2.21 iswpunct F -GLIBC_2.21 iswpunct_l F -GLIBC_2.21 iswspace F -GLIBC_2.21 iswspace_l F -GLIBC_2.21 iswupper F -GLIBC_2.21 iswupper_l F -GLIBC_2.21 iswxdigit F -GLIBC_2.21 iswxdigit_l F -GLIBC_2.21 isxdigit F -GLIBC_2.21 isxdigit_l F -GLIBC_2.21 jrand48 F -GLIBC_2.21 jrand48_r F -GLIBC_2.21 key_decryptsession F -GLIBC_2.21 key_decryptsession_pk F -GLIBC_2.21 key_encryptsession F -GLIBC_2.21 key_encryptsession_pk F -GLIBC_2.21 key_gendes F -GLIBC_2.21 key_get_conv F -GLIBC_2.21 key_secretkey_is_set F -GLIBC_2.21 key_setnet F -GLIBC_2.21 key_setsecret F -GLIBC_2.21 kill F -GLIBC_2.21 killpg F -GLIBC_2.21 klogctl F -GLIBC_2.21 l64a F -GLIBC_2.21 labs F -GLIBC_2.21 lchmod F -GLIBC_2.21 lchown F -GLIBC_2.21 lckpwdf F -GLIBC_2.21 lcong48 F -GLIBC_2.21 lcong48_r F -GLIBC_2.21 ldexp F -GLIBC_2.21 ldexpf F -GLIBC_2.21 ldexpl F -GLIBC_2.21 ldiv F -GLIBC_2.21 lfind F -GLIBC_2.21 lgetxattr F -GLIBC_2.21 link F -GLIBC_2.21 linkat F -GLIBC_2.21 listen F -GLIBC_2.21 listxattr F -GLIBC_2.21 llabs F -GLIBC_2.21 lldiv F -GLIBC_2.21 llistxattr F -GLIBC_2.21 llseek F -GLIBC_2.21 loc1 D 0x4 -GLIBC_2.21 loc2 D 0x4 -GLIBC_2.21 localeconv F -GLIBC_2.21 localtime F -GLIBC_2.21 localtime_r F -GLIBC_2.21 lockf F -GLIBC_2.21 lockf64 F -GLIBC_2.21 locs D 0x4 -GLIBC_2.21 longjmp F -GLIBC_2.21 lrand48 F -GLIBC_2.21 lrand48_r F -GLIBC_2.21 lremovexattr F -GLIBC_2.21 lsearch F -GLIBC_2.21 lseek F -GLIBC_2.21 lseek64 F -GLIBC_2.21 lsetxattr F -GLIBC_2.21 lutimes F -GLIBC_2.21 madvise F -GLIBC_2.21 makecontext F -GLIBC_2.21 mallinfo F -GLIBC_2.21 malloc F -GLIBC_2.21 malloc_get_state F -GLIBC_2.21 malloc_info F -GLIBC_2.21 malloc_set_state F -GLIBC_2.21 malloc_stats F -GLIBC_2.21 malloc_trim F -GLIBC_2.21 malloc_usable_size F -GLIBC_2.21 mallopt F -GLIBC_2.21 mallwatch D 0x4 -GLIBC_2.21 mblen F -GLIBC_2.21 mbrlen F -GLIBC_2.21 mbrtoc16 F -GLIBC_2.21 mbrtoc32 F -GLIBC_2.21 mbrtowc F -GLIBC_2.21 mbsinit F -GLIBC_2.21 mbsnrtowcs F -GLIBC_2.21 mbsrtowcs F -GLIBC_2.21 mbstowcs F -GLIBC_2.21 mbtowc F -GLIBC_2.21 mcheck F -GLIBC_2.21 mcheck_check_all F -GLIBC_2.21 mcheck_pedantic F -GLIBC_2.21 memalign F -GLIBC_2.21 memccpy F -GLIBC_2.21 memchr F -GLIBC_2.21 memcmp F -GLIBC_2.21 memcpy F -GLIBC_2.21 memfrob F -GLIBC_2.21 memmem F -GLIBC_2.21 memmove F -GLIBC_2.21 mempcpy F -GLIBC_2.21 memrchr F -GLIBC_2.21 memset F -GLIBC_2.21 mincore F -GLIBC_2.21 mkdir F -GLIBC_2.21 mkdirat F -GLIBC_2.21 mkdtemp F -GLIBC_2.21 mkfifo F -GLIBC_2.21 mkfifoat F -GLIBC_2.21 mkostemp F -GLIBC_2.21 mkostemp64 F -GLIBC_2.21 mkostemps F -GLIBC_2.21 mkostemps64 F -GLIBC_2.21 mkstemp F -GLIBC_2.21 mkstemp64 F -GLIBC_2.21 mkstemps F -GLIBC_2.21 mkstemps64 F -GLIBC_2.21 mktemp F -GLIBC_2.21 mktime F -GLIBC_2.21 mlock F -GLIBC_2.21 mlockall F -GLIBC_2.21 mmap F -GLIBC_2.21 mmap64 F -GLIBC_2.21 modf F -GLIBC_2.21 modff F -GLIBC_2.21 modfl F -GLIBC_2.21 moncontrol F -GLIBC_2.21 monstartup F -GLIBC_2.21 mount F -GLIBC_2.21 mprobe F -GLIBC_2.21 mprotect F -GLIBC_2.21 mrand48 F -GLIBC_2.21 mrand48_r F -GLIBC_2.21 mremap F -GLIBC_2.21 msgctl F -GLIBC_2.21 msgget F -GLIBC_2.21 msgrcv F -GLIBC_2.21 msgsnd F -GLIBC_2.21 msync F -GLIBC_2.21 mtrace F -GLIBC_2.21 munlock F -GLIBC_2.21 munlockall F -GLIBC_2.21 munmap F -GLIBC_2.21 muntrace F -GLIBC_2.21 name_to_handle_at F -GLIBC_2.21 nanosleep F -GLIBC_2.21 netname2host F -GLIBC_2.21 netname2user F -GLIBC_2.21 newlocale F -GLIBC_2.21 nfsservctl F -GLIBC_2.21 nftw F -GLIBC_2.21 nftw64 F -GLIBC_2.21 ngettext F -GLIBC_2.21 nice F -GLIBC_2.21 nl_langinfo F -GLIBC_2.21 nl_langinfo_l F -GLIBC_2.21 nrand48 F -GLIBC_2.21 nrand48_r F -GLIBC_2.21 ntohl F -GLIBC_2.21 ntohs F -GLIBC_2.21 ntp_adjtime F -GLIBC_2.21 ntp_gettime F -GLIBC_2.21 ntp_gettimex F -GLIBC_2.21 obstack_alloc_failed_handler D 0x4 -GLIBC_2.21 obstack_exit_failure D 0x4 -GLIBC_2.21 obstack_free F -GLIBC_2.21 obstack_printf F -GLIBC_2.21 obstack_vprintf F -GLIBC_2.21 on_exit F -GLIBC_2.21 open F -GLIBC_2.21 open64 F -GLIBC_2.21 open_by_handle_at F -GLIBC_2.21 open_memstream F -GLIBC_2.21 open_wmemstream F -GLIBC_2.21 openat F -GLIBC_2.21 openat64 F -GLIBC_2.21 opendir F -GLIBC_2.21 openlog F -GLIBC_2.21 optarg D 0x4 -GLIBC_2.21 opterr D 0x4 -GLIBC_2.21 optind D 0x4 -GLIBC_2.21 optopt D 0x4 -GLIBC_2.21 parse_printf_format F -GLIBC_2.21 passwd2des F -GLIBC_2.21 pathconf F -GLIBC_2.21 pause F -GLIBC_2.21 pclose F -GLIBC_2.21 perror F -GLIBC_2.21 personality F -GLIBC_2.21 pipe F -GLIBC_2.21 pipe2 F -GLIBC_2.21 pivot_root F -GLIBC_2.21 pmap_getmaps F -GLIBC_2.21 pmap_getport F -GLIBC_2.21 pmap_rmtcall F -GLIBC_2.21 pmap_set F -GLIBC_2.21 pmap_unset F -GLIBC_2.21 poll F -GLIBC_2.21 popen F -GLIBC_2.21 posix_fadvise F -GLIBC_2.21 posix_fadvise64 F -GLIBC_2.21 posix_fallocate F -GLIBC_2.21 posix_fallocate64 F -GLIBC_2.21 posix_madvise F -GLIBC_2.21 posix_memalign F -GLIBC_2.21 posix_openpt F -GLIBC_2.21 posix_spawn F -GLIBC_2.21 posix_spawn_file_actions_addclose F -GLIBC_2.21 posix_spawn_file_actions_adddup2 F -GLIBC_2.21 posix_spawn_file_actions_addopen F -GLIBC_2.21 posix_spawn_file_actions_destroy F -GLIBC_2.21 posix_spawn_file_actions_init F -GLIBC_2.21 posix_spawnattr_destroy F -GLIBC_2.21 posix_spawnattr_getflags F -GLIBC_2.21 posix_spawnattr_getpgroup F -GLIBC_2.21 posix_spawnattr_getschedparam F -GLIBC_2.21 posix_spawnattr_getschedpolicy F -GLIBC_2.21 posix_spawnattr_getsigdefault F -GLIBC_2.21 posix_spawnattr_getsigmask F -GLIBC_2.21 posix_spawnattr_init F -GLIBC_2.21 posix_spawnattr_setflags F -GLIBC_2.21 posix_spawnattr_setpgroup F -GLIBC_2.21 posix_spawnattr_setschedparam F -GLIBC_2.21 posix_spawnattr_setschedpolicy F -GLIBC_2.21 posix_spawnattr_setsigdefault F -GLIBC_2.21 posix_spawnattr_setsigmask F -GLIBC_2.21 posix_spawnp F -GLIBC_2.21 ppoll F -GLIBC_2.21 prctl F -GLIBC_2.21 pread F -GLIBC_2.21 pread64 F -GLIBC_2.21 preadv F -GLIBC_2.21 preadv64 F -GLIBC_2.21 printf F -GLIBC_2.21 printf_size F -GLIBC_2.21 printf_size_info F -GLIBC_2.21 prlimit F -GLIBC_2.21 prlimit64 F -GLIBC_2.21 process_vm_readv F -GLIBC_2.21 process_vm_writev F -GLIBC_2.21 profil F -GLIBC_2.21 program_invocation_name D 0x4 -GLIBC_2.21 program_invocation_short_name D 0x4 -GLIBC_2.21 pselect F -GLIBC_2.21 psiginfo F -GLIBC_2.21 psignal F -GLIBC_2.21 pthread_attr_destroy F -GLIBC_2.21 pthread_attr_getdetachstate F -GLIBC_2.21 pthread_attr_getinheritsched F -GLIBC_2.21 pthread_attr_getschedparam F -GLIBC_2.21 pthread_attr_getschedpolicy F -GLIBC_2.21 pthread_attr_getscope F -GLIBC_2.21 pthread_attr_init F -GLIBC_2.21 pthread_attr_setdetachstate F -GLIBC_2.21 pthread_attr_setinheritsched F -GLIBC_2.21 pthread_attr_setschedparam F -GLIBC_2.21 pthread_attr_setschedpolicy F -GLIBC_2.21 pthread_attr_setscope F -GLIBC_2.21 pthread_cond_broadcast F -GLIBC_2.21 pthread_cond_destroy F -GLIBC_2.21 pthread_cond_init F -GLIBC_2.21 pthread_cond_signal F -GLIBC_2.21 pthread_cond_timedwait F -GLIBC_2.21 pthread_cond_wait F -GLIBC_2.21 pthread_condattr_destroy F -GLIBC_2.21 pthread_condattr_init F -GLIBC_2.21 pthread_equal F -GLIBC_2.21 pthread_exit F -GLIBC_2.21 pthread_getschedparam F -GLIBC_2.21 pthread_mutex_destroy F -GLIBC_2.21 pthread_mutex_init F -GLIBC_2.21 pthread_mutex_lock F -GLIBC_2.21 pthread_mutex_unlock F -GLIBC_2.21 pthread_self F -GLIBC_2.21 pthread_setcancelstate F -GLIBC_2.21 pthread_setcanceltype F -GLIBC_2.21 pthread_setschedparam F -GLIBC_2.21 ptrace F -GLIBC_2.21 ptsname F -GLIBC_2.21 ptsname_r F -GLIBC_2.21 putc F -GLIBC_2.21 putc_unlocked F -GLIBC_2.21 putchar F -GLIBC_2.21 putchar_unlocked F -GLIBC_2.21 putenv F -GLIBC_2.21 putgrent F -GLIBC_2.21 putmsg F -GLIBC_2.21 putpmsg F -GLIBC_2.21 putpwent F -GLIBC_2.21 puts F -GLIBC_2.21 putsgent F -GLIBC_2.21 putspent F -GLIBC_2.21 pututline F -GLIBC_2.21 pututxline F -GLIBC_2.21 putw F -GLIBC_2.21 putwc F -GLIBC_2.21 putwc_unlocked F -GLIBC_2.21 putwchar F -GLIBC_2.21 putwchar_unlocked F -GLIBC_2.21 pvalloc F -GLIBC_2.21 pwrite F -GLIBC_2.21 pwrite64 F -GLIBC_2.21 pwritev F -GLIBC_2.21 pwritev64 F -GLIBC_2.21 qecvt F -GLIBC_2.21 qecvt_r F -GLIBC_2.21 qfcvt F -GLIBC_2.21 qfcvt_r F -GLIBC_2.21 qgcvt F -GLIBC_2.21 qsort F -GLIBC_2.21 qsort_r F -GLIBC_2.21 query_module F -GLIBC_2.21 quick_exit F -GLIBC_2.21 quotactl F -GLIBC_2.21 raise F -GLIBC_2.21 rand F -GLIBC_2.21 rand_r F -GLIBC_2.21 random F -GLIBC_2.21 random_r F -GLIBC_2.21 rawmemchr F -GLIBC_2.21 rcmd F -GLIBC_2.21 rcmd_af F -GLIBC_2.21 re_comp F -GLIBC_2.21 re_compile_fastmap F -GLIBC_2.21 re_compile_pattern F -GLIBC_2.21 re_exec F -GLIBC_2.21 re_match F -GLIBC_2.21 re_match_2 F -GLIBC_2.21 re_search F -GLIBC_2.21 re_search_2 F -GLIBC_2.21 re_set_registers F -GLIBC_2.21 re_set_syntax F -GLIBC_2.21 re_syntax_options D 0x4 -GLIBC_2.21 read F -GLIBC_2.21 readahead F -GLIBC_2.21 readdir F -GLIBC_2.21 readdir64 F -GLIBC_2.21 readdir64_r F -GLIBC_2.21 readdir_r F -GLIBC_2.21 readlink F -GLIBC_2.21 readlinkat F -GLIBC_2.21 readv F -GLIBC_2.21 realloc F -GLIBC_2.21 realpath F -GLIBC_2.21 reboot F -GLIBC_2.21 recv F -GLIBC_2.21 recvfrom F -GLIBC_2.21 recvmmsg F -GLIBC_2.21 recvmsg F -GLIBC_2.21 regcomp F -GLIBC_2.21 regerror F -GLIBC_2.21 regexec F -GLIBC_2.21 regfree F -GLIBC_2.21 register_printf_function F -GLIBC_2.21 register_printf_modifier F -GLIBC_2.21 register_printf_specifier F -GLIBC_2.21 register_printf_type F -GLIBC_2.21 registerrpc F -GLIBC_2.21 remap_file_pages F -GLIBC_2.21 remove F -GLIBC_2.21 removexattr F -GLIBC_2.21 remque F -GLIBC_2.21 rename F -GLIBC_2.21 renameat F -GLIBC_2.21 revoke F -GLIBC_2.21 rewind F -GLIBC_2.21 rewinddir F -GLIBC_2.21 rexec F -GLIBC_2.21 rexec_af F -GLIBC_2.21 rexecoptions D 0x4 -GLIBC_2.21 rindex F -GLIBC_2.21 rmdir F -GLIBC_2.21 rpc_createerr D 0x10 -GLIBC_2.21 rpmatch F -GLIBC_2.21 rresvport F -GLIBC_2.21 rresvport_af F -GLIBC_2.21 rtime F -GLIBC_2.21 ruserok F -GLIBC_2.21 ruserok_af F -GLIBC_2.21 ruserpass F -GLIBC_2.21 sbrk F -GLIBC_2.21 scalbn F -GLIBC_2.21 scalbnf F -GLIBC_2.21 scalbnl F -GLIBC_2.21 scandir F -GLIBC_2.21 scandir64 F -GLIBC_2.21 scandirat F -GLIBC_2.21 scandirat64 F -GLIBC_2.21 scanf F -GLIBC_2.21 sched_get_priority_max F -GLIBC_2.21 sched_get_priority_min F -GLIBC_2.21 sched_getaffinity F -GLIBC_2.21 sched_getcpu F -GLIBC_2.21 sched_getparam F -GLIBC_2.21 sched_getscheduler F -GLIBC_2.21 sched_rr_get_interval F -GLIBC_2.21 sched_setaffinity F -GLIBC_2.21 sched_setparam F -GLIBC_2.21 sched_setscheduler F -GLIBC_2.21 sched_yield F -GLIBC_2.21 secure_getenv F -GLIBC_2.21 seed48 F -GLIBC_2.21 seed48_r F -GLIBC_2.21 seekdir F -GLIBC_2.21 select F -GLIBC_2.21 semctl F -GLIBC_2.21 semget F -GLIBC_2.21 semop F -GLIBC_2.21 semtimedop F -GLIBC_2.21 send F -GLIBC_2.21 sendfile F -GLIBC_2.21 sendfile64 F -GLIBC_2.21 sendmmsg F -GLIBC_2.21 sendmsg F -GLIBC_2.21 sendto F -GLIBC_2.21 setaliasent F -GLIBC_2.21 setbuf F -GLIBC_2.21 setbuffer F -GLIBC_2.21 setcontext F -GLIBC_2.21 setdomainname F -GLIBC_2.21 setegid F -GLIBC_2.21 setenv F -GLIBC_2.21 seteuid F -GLIBC_2.21 setfsent F -GLIBC_2.21 setfsgid F -GLIBC_2.21 setfsuid F -GLIBC_2.21 setgid F -GLIBC_2.21 setgrent F -GLIBC_2.21 setgroups F -GLIBC_2.21 sethostent F -GLIBC_2.21 sethostid F -GLIBC_2.21 sethostname F -GLIBC_2.21 setipv4sourcefilter F -GLIBC_2.21 setitimer F -GLIBC_2.21 setjmp F -GLIBC_2.21 setlinebuf F -GLIBC_2.21 setlocale F -GLIBC_2.21 setlogin F -GLIBC_2.21 setlogmask F -GLIBC_2.21 setmntent F -GLIBC_2.21 setnetent F -GLIBC_2.21 setnetgrent F -GLIBC_2.21 setns F -GLIBC_2.21 setpgid F -GLIBC_2.21 setpgrp F -GLIBC_2.21 setpriority F -GLIBC_2.21 setprotoent F -GLIBC_2.21 setpwent F -GLIBC_2.21 setregid F -GLIBC_2.21 setresgid F -GLIBC_2.21 setresuid F -GLIBC_2.21 setreuid F -GLIBC_2.21 setrlimit F -GLIBC_2.21 setrlimit64 F -GLIBC_2.21 setrpcent F -GLIBC_2.21 setservent F -GLIBC_2.21 setsgent F -GLIBC_2.21 setsid F -GLIBC_2.21 setsockopt F -GLIBC_2.21 setsourcefilter F -GLIBC_2.21 setspent F -GLIBC_2.21 setstate F -GLIBC_2.21 setstate_r F -GLIBC_2.21 settimeofday F -GLIBC_2.21 setttyent F -GLIBC_2.21 setuid F -GLIBC_2.21 setusershell F -GLIBC_2.21 setutent F -GLIBC_2.21 setutxent F -GLIBC_2.21 setvbuf F -GLIBC_2.21 setxattr F -GLIBC_2.21 sgetsgent F -GLIBC_2.21 sgetsgent_r F -GLIBC_2.21 sgetspent F -GLIBC_2.21 sgetspent_r F -GLIBC_2.21 shmat F -GLIBC_2.21 shmctl F -GLIBC_2.21 shmdt F -GLIBC_2.21 shmget F -GLIBC_2.21 shutdown F -GLIBC_2.21 sigaction F -GLIBC_2.21 sigaddset F -GLIBC_2.21 sigaltstack F -GLIBC_2.21 sigandset F -GLIBC_2.21 sigblock F -GLIBC_2.21 sigdelset F -GLIBC_2.21 sigemptyset F -GLIBC_2.21 sigfillset F -GLIBC_2.21 siggetmask F -GLIBC_2.21 sighold F -GLIBC_2.21 sigignore F -GLIBC_2.21 siginterrupt F -GLIBC_2.21 sigisemptyset F -GLIBC_2.21 sigismember F -GLIBC_2.21 siglongjmp F -GLIBC_2.21 signal F -GLIBC_2.21 signalfd F -GLIBC_2.21 sigorset F -GLIBC_2.21 sigpause F -GLIBC_2.21 sigpending F -GLIBC_2.21 sigprocmask F -GLIBC_2.21 sigqueue F -GLIBC_2.21 sigrelse F -GLIBC_2.21 sigreturn F -GLIBC_2.21 sigset F -GLIBC_2.21 sigsetmask F -GLIBC_2.21 sigstack F -GLIBC_2.21 sigsuspend F -GLIBC_2.21 sigtimedwait F -GLIBC_2.21 sigwait F -GLIBC_2.21 sigwaitinfo F -GLIBC_2.21 sleep F -GLIBC_2.21 snprintf F -GLIBC_2.21 sockatmark F -GLIBC_2.21 socket F -GLIBC_2.21 socketpair F -GLIBC_2.21 splice F -GLIBC_2.21 sprintf F -GLIBC_2.21 sprofil F -GLIBC_2.21 srand F -GLIBC_2.21 srand48 F -GLIBC_2.21 srand48_r F -GLIBC_2.21 srandom F -GLIBC_2.21 srandom_r F -GLIBC_2.21 sscanf F -GLIBC_2.21 ssignal F -GLIBC_2.21 sstk F -GLIBC_2.21 statfs F -GLIBC_2.21 statfs64 F -GLIBC_2.21 statvfs F -GLIBC_2.21 statvfs64 F -GLIBC_2.21 stderr D 0x4 -GLIBC_2.21 stdin D 0x4 -GLIBC_2.21 stdout D 0x4 -GLIBC_2.21 step F -GLIBC_2.21 stime F -GLIBC_2.21 stpcpy F -GLIBC_2.21 stpncpy F -GLIBC_2.21 strcasecmp F -GLIBC_2.21 strcasecmp_l F -GLIBC_2.21 strcasestr F -GLIBC_2.21 strcat F -GLIBC_2.21 strchr F -GLIBC_2.21 strchrnul F -GLIBC_2.21 strcmp F -GLIBC_2.21 strcoll F -GLIBC_2.21 strcoll_l F -GLIBC_2.21 strcpy F -GLIBC_2.21 strcspn F -GLIBC_2.21 strdup F -GLIBC_2.21 strerror F -GLIBC_2.21 strerror_l F -GLIBC_2.21 strerror_r F -GLIBC_2.21 strfmon F -GLIBC_2.21 strfmon_l F -GLIBC_2.21 strfry F -GLIBC_2.21 strftime F -GLIBC_2.21 strftime_l F -GLIBC_2.21 strlen F -GLIBC_2.21 strncasecmp F -GLIBC_2.21 strncasecmp_l F -GLIBC_2.21 strncat F -GLIBC_2.21 strncmp F -GLIBC_2.21 strncpy F -GLIBC_2.21 strndup F -GLIBC_2.21 strnlen F -GLIBC_2.21 strpbrk F -GLIBC_2.21 strptime F -GLIBC_2.21 strptime_l F -GLIBC_2.21 strrchr F -GLIBC_2.21 strsep F -GLIBC_2.21 strsignal F -GLIBC_2.21 strspn F -GLIBC_2.21 strstr F -GLIBC_2.21 strtod F -GLIBC_2.21 strtod_l F -GLIBC_2.21 strtof F -GLIBC_2.21 strtof_l F -GLIBC_2.21 strtoimax F -GLIBC_2.21 strtok F -GLIBC_2.21 strtok_r F -GLIBC_2.21 strtol F -GLIBC_2.21 strtol_l F -GLIBC_2.21 strtold F -GLIBC_2.21 strtold_l F -GLIBC_2.21 strtoll F -GLIBC_2.21 strtoll_l F -GLIBC_2.21 strtoq F -GLIBC_2.21 strtoul F -GLIBC_2.21 strtoul_l F -GLIBC_2.21 strtoull F -GLIBC_2.21 strtoull_l F -GLIBC_2.21 strtoumax F -GLIBC_2.21 strtouq F -GLIBC_2.21 strverscmp F -GLIBC_2.21 strxfrm F -GLIBC_2.21 strxfrm_l F -GLIBC_2.21 stty F -GLIBC_2.21 svc_exit F -GLIBC_2.21 svc_fdset D 0x80 -GLIBC_2.21 svc_getreq F -GLIBC_2.21 svc_getreq_common F -GLIBC_2.21 svc_getreq_poll F -GLIBC_2.21 svc_getreqset F -GLIBC_2.21 svc_max_pollfd D 0x4 -GLIBC_2.21 svc_pollfd D 0x4 -GLIBC_2.21 svc_register F -GLIBC_2.21 svc_run F -GLIBC_2.21 svc_sendreply F -GLIBC_2.21 svc_unregister F -GLIBC_2.21 svcauthdes_stats D 0xc -GLIBC_2.21 svcerr_auth F -GLIBC_2.21 svcerr_decode F -GLIBC_2.21 svcerr_noproc F -GLIBC_2.21 svcerr_noprog F -GLIBC_2.21 svcerr_progvers F -GLIBC_2.21 svcerr_systemerr F -GLIBC_2.21 svcerr_weakauth F -GLIBC_2.21 svcfd_create F -GLIBC_2.21 svcraw_create F -GLIBC_2.21 svctcp_create F -GLIBC_2.21 svcudp_bufcreate F -GLIBC_2.21 svcudp_create F -GLIBC_2.21 svcudp_enablecache F -GLIBC_2.21 svcunix_create F -GLIBC_2.21 svcunixfd_create F -GLIBC_2.21 swab F -GLIBC_2.21 swapcontext F -GLIBC_2.21 swapoff F -GLIBC_2.21 swapon F -GLIBC_2.21 swprintf F -GLIBC_2.21 swscanf F -GLIBC_2.21 symlink F -GLIBC_2.21 symlinkat F -GLIBC_2.21 sync F -GLIBC_2.21 sync_file_range F -GLIBC_2.21 syncfs F -GLIBC_2.21 sys_errlist D 0x21c -GLIBC_2.21 sys_nerr D 0x4 -GLIBC_2.21 sys_sigabbrev D 0x104 -GLIBC_2.21 sys_siglist D 0x104 -GLIBC_2.21 syscall F -GLIBC_2.21 sysconf F -GLIBC_2.21 sysctl F -GLIBC_2.21 sysinfo F -GLIBC_2.21 syslog F -GLIBC_2.21 system F -GLIBC_2.21 sysv_signal F -GLIBC_2.21 tcdrain F -GLIBC_2.21 tcflow F -GLIBC_2.21 tcflush F -GLIBC_2.21 tcgetattr F -GLIBC_2.21 tcgetpgrp F -GLIBC_2.21 tcgetsid F -GLIBC_2.21 tcsendbreak F -GLIBC_2.21 tcsetattr F -GLIBC_2.21 tcsetpgrp F -GLIBC_2.21 tdelete F -GLIBC_2.21 tdestroy F -GLIBC_2.21 tee F -GLIBC_2.21 telldir F -GLIBC_2.21 tempnam F -GLIBC_2.21 textdomain F -GLIBC_2.21 tfind F -GLIBC_2.21 time F -GLIBC_2.21 timegm F -GLIBC_2.21 timelocal F -GLIBC_2.21 timerfd_create F -GLIBC_2.21 timerfd_gettime F -GLIBC_2.21 timerfd_settime F -GLIBC_2.21 times F -GLIBC_2.21 timespec_get F -GLIBC_2.21 timezone D 0x4 -GLIBC_2.21 tmpfile F -GLIBC_2.21 tmpfile64 F -GLIBC_2.21 tmpnam F -GLIBC_2.21 tmpnam_r F -GLIBC_2.21 toascii F -GLIBC_2.21 tolower F -GLIBC_2.21 tolower_l F -GLIBC_2.21 toupper F -GLIBC_2.21 toupper_l F -GLIBC_2.21 towctrans F -GLIBC_2.21 towctrans_l F -GLIBC_2.21 towlower F -GLIBC_2.21 towlower_l F -GLIBC_2.21 towupper F -GLIBC_2.21 towupper_l F -GLIBC_2.21 tr_break F -GLIBC_2.21 truncate F -GLIBC_2.21 truncate64 F -GLIBC_2.21 tsearch F -GLIBC_2.21 ttyname F -GLIBC_2.21 ttyname_r F -GLIBC_2.21 ttyslot F -GLIBC_2.21 twalk F -GLIBC_2.21 tzname D 0x8 -GLIBC_2.21 tzset F -GLIBC_2.21 ualarm F -GLIBC_2.21 ulckpwdf F -GLIBC_2.21 ulimit F -GLIBC_2.21 umask F -GLIBC_2.21 umount F -GLIBC_2.21 umount2 F -GLIBC_2.21 uname F -GLIBC_2.21 ungetc F -GLIBC_2.21 ungetwc F -GLIBC_2.21 unlink F -GLIBC_2.21 unlinkat F -GLIBC_2.21 unlockpt F -GLIBC_2.21 unsetenv F -GLIBC_2.21 unshare F -GLIBC_2.21 updwtmp F -GLIBC_2.21 updwtmpx F -GLIBC_2.21 uselib F -GLIBC_2.21 uselocale F -GLIBC_2.21 user2netname F -GLIBC_2.21 usleep F -GLIBC_2.21 ustat F -GLIBC_2.21 utime F -GLIBC_2.21 utimensat F -GLIBC_2.21 utimes F -GLIBC_2.21 utmpname F -GLIBC_2.21 utmpxname F -GLIBC_2.21 valloc F -GLIBC_2.21 vasprintf F -GLIBC_2.21 vdprintf F -GLIBC_2.21 verr F -GLIBC_2.21 verrx F -GLIBC_2.21 versionsort F -GLIBC_2.21 versionsort64 F -GLIBC_2.21 vfork F -GLIBC_2.21 vfprintf F -GLIBC_2.21 vfscanf F -GLIBC_2.21 vfwprintf F -GLIBC_2.21 vfwscanf F -GLIBC_2.21 vhangup F -GLIBC_2.21 vlimit F -GLIBC_2.21 vmsplice F -GLIBC_2.21 vprintf F -GLIBC_2.21 vscanf F -GLIBC_2.21 vsnprintf F -GLIBC_2.21 vsprintf F -GLIBC_2.21 vsscanf F -GLIBC_2.21 vswprintf F -GLIBC_2.21 vswscanf F -GLIBC_2.21 vsyslog F -GLIBC_2.21 vtimes F -GLIBC_2.21 vwarn F -GLIBC_2.21 vwarnx F -GLIBC_2.21 vwprintf F -GLIBC_2.21 vwscanf F -GLIBC_2.21 wait F -GLIBC_2.21 wait3 F -GLIBC_2.21 wait4 F -GLIBC_2.21 waitid F -GLIBC_2.21 waitpid F -GLIBC_2.21 warn F -GLIBC_2.21 warnx F -GLIBC_2.21 wcpcpy F -GLIBC_2.21 wcpncpy F -GLIBC_2.21 wcrtomb F -GLIBC_2.21 wcscasecmp F -GLIBC_2.21 wcscasecmp_l F -GLIBC_2.21 wcscat F -GLIBC_2.21 wcschr F -GLIBC_2.21 wcschrnul F -GLIBC_2.21 wcscmp F -GLIBC_2.21 wcscoll F -GLIBC_2.21 wcscoll_l F -GLIBC_2.21 wcscpy F -GLIBC_2.21 wcscspn F -GLIBC_2.21 wcsdup F -GLIBC_2.21 wcsftime F -GLIBC_2.21 wcsftime_l F -GLIBC_2.21 wcslen F -GLIBC_2.21 wcsncasecmp F -GLIBC_2.21 wcsncasecmp_l F -GLIBC_2.21 wcsncat F -GLIBC_2.21 wcsncmp F -GLIBC_2.21 wcsncpy F -GLIBC_2.21 wcsnlen F -GLIBC_2.21 wcsnrtombs F -GLIBC_2.21 wcspbrk F -GLIBC_2.21 wcsrchr F -GLIBC_2.21 wcsrtombs F -GLIBC_2.21 wcsspn F -GLIBC_2.21 wcsstr F -GLIBC_2.21 wcstod F -GLIBC_2.21 wcstod_l F -GLIBC_2.21 wcstof F -GLIBC_2.21 wcstof_l F -GLIBC_2.21 wcstoimax F -GLIBC_2.21 wcstok F -GLIBC_2.21 wcstol F -GLIBC_2.21 wcstol_l F -GLIBC_2.21 wcstold F -GLIBC_2.21 wcstold_l F -GLIBC_2.21 wcstoll F -GLIBC_2.21 wcstoll_l F -GLIBC_2.21 wcstombs F -GLIBC_2.21 wcstoq F -GLIBC_2.21 wcstoul F -GLIBC_2.21 wcstoul_l F -GLIBC_2.21 wcstoull F -GLIBC_2.21 wcstoull_l F -GLIBC_2.21 wcstoumax F -GLIBC_2.21 wcstouq F -GLIBC_2.21 wcswcs F -GLIBC_2.21 wcswidth F -GLIBC_2.21 wcsxfrm F -GLIBC_2.21 wcsxfrm_l F -GLIBC_2.21 wctob F -GLIBC_2.21 wctomb F -GLIBC_2.21 wctrans F -GLIBC_2.21 wctrans_l F -GLIBC_2.21 wctype F -GLIBC_2.21 wctype_l F -GLIBC_2.21 wcwidth F -GLIBC_2.21 wmemchr F -GLIBC_2.21 wmemcmp F -GLIBC_2.21 wmemcpy F -GLIBC_2.21 wmemmove F -GLIBC_2.21 wmempcpy F -GLIBC_2.21 wmemset F -GLIBC_2.21 wordexp F -GLIBC_2.21 wordfree F -GLIBC_2.21 wprintf F -GLIBC_2.21 write F -GLIBC_2.21 writev F -GLIBC_2.21 wscanf F -GLIBC_2.21 xdecrypt F -GLIBC_2.21 xdr_accepted_reply F -GLIBC_2.21 xdr_array F -GLIBC_2.21 xdr_authdes_cred F -GLIBC_2.21 xdr_authdes_verf F -GLIBC_2.21 xdr_authunix_parms F -GLIBC_2.21 xdr_bool F -GLIBC_2.21 xdr_bytes F -GLIBC_2.21 xdr_callhdr F -GLIBC_2.21 xdr_callmsg F -GLIBC_2.21 xdr_char F -GLIBC_2.21 xdr_cryptkeyarg F -GLIBC_2.21 xdr_cryptkeyarg2 F -GLIBC_2.21 xdr_cryptkeyres F -GLIBC_2.21 xdr_des_block F -GLIBC_2.21 xdr_double F -GLIBC_2.21 xdr_enum F -GLIBC_2.21 xdr_float F -GLIBC_2.21 xdr_free F -GLIBC_2.21 xdr_getcredres F -GLIBC_2.21 xdr_hyper F -GLIBC_2.21 xdr_int F -GLIBC_2.21 xdr_int16_t F -GLIBC_2.21 xdr_int32_t F -GLIBC_2.21 xdr_int64_t F -GLIBC_2.21 xdr_int8_t F -GLIBC_2.21 xdr_key_netstarg F -GLIBC_2.21 xdr_key_netstres F -GLIBC_2.21 xdr_keybuf F -GLIBC_2.21 xdr_keystatus F -GLIBC_2.21 xdr_long F -GLIBC_2.21 xdr_longlong_t F -GLIBC_2.21 xdr_netnamestr F -GLIBC_2.21 xdr_netobj F -GLIBC_2.21 xdr_opaque F -GLIBC_2.21 xdr_opaque_auth F -GLIBC_2.21 xdr_pmap F -GLIBC_2.21 xdr_pmaplist F -GLIBC_2.21 xdr_pointer F -GLIBC_2.21 xdr_quad_t F -GLIBC_2.21 xdr_reference F -GLIBC_2.21 xdr_rejected_reply F -GLIBC_2.21 xdr_replymsg F -GLIBC_2.21 xdr_rmtcall_args F -GLIBC_2.21 xdr_rmtcallres F -GLIBC_2.21 xdr_short F -GLIBC_2.21 xdr_sizeof F -GLIBC_2.21 xdr_string F -GLIBC_2.21 xdr_u_char F -GLIBC_2.21 xdr_u_hyper F -GLIBC_2.21 xdr_u_int F -GLIBC_2.21 xdr_u_long F -GLIBC_2.21 xdr_u_longlong_t F -GLIBC_2.21 xdr_u_quad_t F -GLIBC_2.21 xdr_u_short F -GLIBC_2.21 xdr_uint16_t F -GLIBC_2.21 xdr_uint32_t F -GLIBC_2.21 xdr_uint64_t F -GLIBC_2.21 xdr_uint8_t F -GLIBC_2.21 xdr_union F -GLIBC_2.21 xdr_unixcred F -GLIBC_2.21 xdr_vector F -GLIBC_2.21 xdr_void F -GLIBC_2.21 xdr_wrapstring F -GLIBC_2.21 xdrmem_create F -GLIBC_2.21 xdrrec_create F -GLIBC_2.21 xdrrec_endofrecord F -GLIBC_2.21 xdrrec_eof F -GLIBC_2.21 xdrrec_skiprecord F -GLIBC_2.21 xdrstdio_create F -GLIBC_2.21 xencrypt F -GLIBC_2.21 xprt_register F -GLIBC_2.21 xprt_unregister F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F diff --git a/sysdeps/unix/sysv/linux/nios2/libcrypt.abilist b/sysdeps/unix/sysv/linux/nios2/libcrypt.abilist deleted file mode 100644 index dae6b522ac..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.21 GLIBC_2.21 A -GLIBC_2.21 crypt F -GLIBC_2.21 crypt_r F -GLIBC_2.21 encrypt F -GLIBC_2.21 encrypt_r F -GLIBC_2.21 fcrypt F -GLIBC_2.21 setkey F -GLIBC_2.21 setkey_r F diff --git a/sysdeps/unix/sysv/linux/nios2/libdl.abilist b/sysdeps/unix/sysv/linux/nios2/libdl.abilist deleted file mode 100644 index ae62e3f80e..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/libdl.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.21 GLIBC_2.21 A -GLIBC_2.21 dladdr F -GLIBC_2.21 dladdr1 F -GLIBC_2.21 dlclose F -GLIBC_2.21 dlerror F -GLIBC_2.21 dlinfo F -GLIBC_2.21 dlmopen F -GLIBC_2.21 dlopen F -GLIBC_2.21 dlsym F -GLIBC_2.21 dlvsym F diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist deleted file mode 100644 index c858ed5907..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/libm.abilist +++ /dev/null @@ -1,430 +0,0 @@ -GLIBC_2.21 GLIBC_2.21 A -GLIBC_2.21 _LIB_VERSION D 0x4 -GLIBC_2.21 __acos_finite F -GLIBC_2.21 __acosf_finite F -GLIBC_2.21 __acosh_finite F -GLIBC_2.21 __acoshf_finite F -GLIBC_2.21 __asin_finite F -GLIBC_2.21 __asinf_finite F -GLIBC_2.21 __atan2_finite F -GLIBC_2.21 __atan2f_finite F -GLIBC_2.21 __atanh_finite F -GLIBC_2.21 __atanhf_finite F -GLIBC_2.21 __clog10 F -GLIBC_2.21 __clog10f F -GLIBC_2.21 __clog10l F -GLIBC_2.21 __cosh_finite F -GLIBC_2.21 __coshf_finite F -GLIBC_2.21 __exp10_finite F -GLIBC_2.21 __exp10f_finite F -GLIBC_2.21 __exp2_finite F -GLIBC_2.21 __exp2f_finite F -GLIBC_2.21 __exp_finite F -GLIBC_2.21 __expf_finite F -GLIBC_2.21 __finite F -GLIBC_2.21 __finitef F -GLIBC_2.21 __finitel F -GLIBC_2.21 __fmod_finite F -GLIBC_2.21 __fmodf_finite F -GLIBC_2.21 __fpclassify F -GLIBC_2.21 __fpclassifyf F -GLIBC_2.21 __gamma_r_finite F -GLIBC_2.21 __gammaf_r_finite F -GLIBC_2.21 __hypot_finite F -GLIBC_2.21 __hypotf_finite F -GLIBC_2.21 __issignaling F -GLIBC_2.21 __issignalingf F -GLIBC_2.21 __j0_finite F -GLIBC_2.21 __j0f_finite F -GLIBC_2.21 __j1_finite F -GLIBC_2.21 __j1f_finite F -GLIBC_2.21 __jn_finite F -GLIBC_2.21 __jnf_finite F -GLIBC_2.21 __lgamma_r_finite F -GLIBC_2.21 __lgammaf_r_finite F -GLIBC_2.21 __log10_finite F -GLIBC_2.21 __log10f_finite F -GLIBC_2.21 __log2_finite F -GLIBC_2.21 __log2f_finite F -GLIBC_2.21 __log_finite F -GLIBC_2.21 __logf_finite F -GLIBC_2.21 __pow_finite F -GLIBC_2.21 __powf_finite F -GLIBC_2.21 __remainder_finite F -GLIBC_2.21 __remainderf_finite F -GLIBC_2.21 __scalb_finite F -GLIBC_2.21 __scalbf_finite F -GLIBC_2.21 __signbit F -GLIBC_2.21 __signbitf F -GLIBC_2.21 __sinh_finite F -GLIBC_2.21 __sinhf_finite F -GLIBC_2.21 __sqrt_finite F -GLIBC_2.21 __sqrtf_finite F -GLIBC_2.21 __y0_finite F -GLIBC_2.21 __y0f_finite F -GLIBC_2.21 __y1_finite F -GLIBC_2.21 __y1f_finite F -GLIBC_2.21 __yn_finite F -GLIBC_2.21 __ynf_finite F -GLIBC_2.21 acos F -GLIBC_2.21 acosf F -GLIBC_2.21 acosh F -GLIBC_2.21 acoshf F -GLIBC_2.21 acoshl F -GLIBC_2.21 acosl F -GLIBC_2.21 asin F -GLIBC_2.21 asinf F -GLIBC_2.21 asinh F -GLIBC_2.21 asinhf F -GLIBC_2.21 asinhl F -GLIBC_2.21 asinl F -GLIBC_2.21 atan F -GLIBC_2.21 atan2 F -GLIBC_2.21 atan2f F -GLIBC_2.21 atan2l F -GLIBC_2.21 atanf F -GLIBC_2.21 atanh F -GLIBC_2.21 atanhf F -GLIBC_2.21 atanhl F -GLIBC_2.21 atanl F -GLIBC_2.21 cabs F -GLIBC_2.21 cabsf F -GLIBC_2.21 cabsl F -GLIBC_2.21 cacos F -GLIBC_2.21 cacosf F -GLIBC_2.21 cacosh F -GLIBC_2.21 cacoshf F -GLIBC_2.21 cacoshl F -GLIBC_2.21 cacosl F -GLIBC_2.21 carg F -GLIBC_2.21 cargf F -GLIBC_2.21 cargl F -GLIBC_2.21 casin F -GLIBC_2.21 casinf F -GLIBC_2.21 casinh F -GLIBC_2.21 casinhf F -GLIBC_2.21 casinhl F -GLIBC_2.21 casinl F -GLIBC_2.21 catan F -GLIBC_2.21 catanf F -GLIBC_2.21 catanh F -GLIBC_2.21 catanhf F -GLIBC_2.21 catanhl F -GLIBC_2.21 catanl F -GLIBC_2.21 cbrt F -GLIBC_2.21 cbrtf F -GLIBC_2.21 cbrtl F -GLIBC_2.21 ccos F -GLIBC_2.21 ccosf F -GLIBC_2.21 ccosh F -GLIBC_2.21 ccoshf F -GLIBC_2.21 ccoshl F -GLIBC_2.21 ccosl F -GLIBC_2.21 ceil F -GLIBC_2.21 ceilf F -GLIBC_2.21 ceill F -GLIBC_2.21 cexp F -GLIBC_2.21 cexpf F -GLIBC_2.21 cexpl F -GLIBC_2.21 cimag F -GLIBC_2.21 cimagf F -GLIBC_2.21 cimagl F -GLIBC_2.21 clog F -GLIBC_2.21 clog10 F -GLIBC_2.21 clog10f F -GLIBC_2.21 clog10l F -GLIBC_2.21 clogf F -GLIBC_2.21 clogl F -GLIBC_2.21 conj F -GLIBC_2.21 conjf F -GLIBC_2.21 conjl F -GLIBC_2.21 copysign F -GLIBC_2.21 copysignf F -GLIBC_2.21 copysignl F -GLIBC_2.21 cos F -GLIBC_2.21 cosf F -GLIBC_2.21 cosh F -GLIBC_2.21 coshf F -GLIBC_2.21 coshl F -GLIBC_2.21 cosl F -GLIBC_2.21 cpow F -GLIBC_2.21 cpowf F -GLIBC_2.21 cpowl F -GLIBC_2.21 cproj F -GLIBC_2.21 cprojf F -GLIBC_2.21 cprojl F -GLIBC_2.21 creal F -GLIBC_2.21 crealf F -GLIBC_2.21 creall F -GLIBC_2.21 csin F -GLIBC_2.21 csinf F -GLIBC_2.21 csinh F -GLIBC_2.21 csinhf F -GLIBC_2.21 csinhl F -GLIBC_2.21 csinl F -GLIBC_2.21 csqrt F -GLIBC_2.21 csqrtf F -GLIBC_2.21 csqrtl F -GLIBC_2.21 ctan F -GLIBC_2.21 ctanf F -GLIBC_2.21 ctanh F -GLIBC_2.21 ctanhf F -GLIBC_2.21 ctanhl F -GLIBC_2.21 ctanl F -GLIBC_2.21 drem F -GLIBC_2.21 dremf F -GLIBC_2.21 dreml F -GLIBC_2.21 erf F -GLIBC_2.21 erfc F -GLIBC_2.21 erfcf F -GLIBC_2.21 erfcl F -GLIBC_2.21 erff F -GLIBC_2.21 erfl F -GLIBC_2.21 exp F -GLIBC_2.21 exp10 F -GLIBC_2.21 exp10f F -GLIBC_2.21 exp10l F -GLIBC_2.21 exp2 F -GLIBC_2.21 exp2f F -GLIBC_2.21 exp2l F -GLIBC_2.21 expf F -GLIBC_2.21 expl F -GLIBC_2.21 expm1 F -GLIBC_2.21 expm1f F -GLIBC_2.21 expm1l F -GLIBC_2.21 fabs F -GLIBC_2.21 fabsf F -GLIBC_2.21 fabsl F -GLIBC_2.21 fdim F -GLIBC_2.21 fdimf F -GLIBC_2.21 fdiml F -GLIBC_2.21 feclearexcept F -GLIBC_2.21 fedisableexcept F -GLIBC_2.21 feenableexcept F -GLIBC_2.21 fegetenv F -GLIBC_2.21 fegetexcept F -GLIBC_2.21 fegetexceptflag F -GLIBC_2.21 fegetround F -GLIBC_2.21 feholdexcept F -GLIBC_2.21 feraiseexcept F -GLIBC_2.21 fesetenv F -GLIBC_2.21 fesetexceptflag F -GLIBC_2.21 fesetround F -GLIBC_2.21 fetestexcept F -GLIBC_2.21 feupdateenv F -GLIBC_2.21 finite F -GLIBC_2.21 finitef F -GLIBC_2.21 finitel F -GLIBC_2.21 floor F -GLIBC_2.21 floorf F -GLIBC_2.21 floorl F -GLIBC_2.21 fma F -GLIBC_2.21 fmaf F -GLIBC_2.21 fmal F -GLIBC_2.21 fmax F -GLIBC_2.21 fmaxf F -GLIBC_2.21 fmaxl F -GLIBC_2.21 fmin F -GLIBC_2.21 fminf F -GLIBC_2.21 fminl F -GLIBC_2.21 fmod F -GLIBC_2.21 fmodf F -GLIBC_2.21 fmodl F -GLIBC_2.21 frexp F -GLIBC_2.21 frexpf F -GLIBC_2.21 frexpl F -GLIBC_2.21 gamma F -GLIBC_2.21 gammaf F -GLIBC_2.21 gammal F -GLIBC_2.21 hypot F -GLIBC_2.21 hypotf F -GLIBC_2.21 hypotl F -GLIBC_2.21 ilogb F -GLIBC_2.21 ilogbf F -GLIBC_2.21 ilogbl F -GLIBC_2.21 j0 F -GLIBC_2.21 j0f F -GLIBC_2.21 j0l F -GLIBC_2.21 j1 F -GLIBC_2.21 j1f F -GLIBC_2.21 j1l F -GLIBC_2.21 jn F -GLIBC_2.21 jnf F -GLIBC_2.21 jnl F -GLIBC_2.21 ldexp F -GLIBC_2.21 ldexpf F -GLIBC_2.21 ldexpl F -GLIBC_2.21 lgamma F -GLIBC_2.21 lgamma_r F -GLIBC_2.21 lgammaf F -GLIBC_2.21 lgammaf_r F -GLIBC_2.21 lgammal F -GLIBC_2.21 lgammal_r F -GLIBC_2.21 llrint F -GLIBC_2.21 llrintf F -GLIBC_2.21 llrintl F -GLIBC_2.21 llround F -GLIBC_2.21 llroundf F -GLIBC_2.21 llroundl F -GLIBC_2.21 log F -GLIBC_2.21 log10 F -GLIBC_2.21 log10f F -GLIBC_2.21 log10l F -GLIBC_2.21 log1p F -GLIBC_2.21 log1pf F -GLIBC_2.21 log1pl F -GLIBC_2.21 log2 F -GLIBC_2.21 log2f F -GLIBC_2.21 log2l F -GLIBC_2.21 logb F -GLIBC_2.21 logbf F -GLIBC_2.21 logbl F -GLIBC_2.21 logf F -GLIBC_2.21 logl F -GLIBC_2.21 lrint F -GLIBC_2.21 lrintf F -GLIBC_2.21 lrintl F -GLIBC_2.21 lround F -GLIBC_2.21 lroundf F -GLIBC_2.21 lroundl F -GLIBC_2.21 matherr F -GLIBC_2.21 modf F -GLIBC_2.21 modff F -GLIBC_2.21 modfl F -GLIBC_2.21 nan F -GLIBC_2.21 nanf F -GLIBC_2.21 nanl F -GLIBC_2.21 nearbyint F -GLIBC_2.21 nearbyintf F -GLIBC_2.21 nearbyintl F -GLIBC_2.21 nextafter F -GLIBC_2.21 nextafterf F -GLIBC_2.21 nextafterl F -GLIBC_2.21 nexttoward F -GLIBC_2.21 nexttowardf F -GLIBC_2.21 nexttowardl F -GLIBC_2.21 pow F -GLIBC_2.21 pow10 F -GLIBC_2.21 pow10f F -GLIBC_2.21 pow10l F -GLIBC_2.21 powf F -GLIBC_2.21 powl F -GLIBC_2.21 remainder F -GLIBC_2.21 remainderf F -GLIBC_2.21 remainderl F -GLIBC_2.21 remquo F -GLIBC_2.21 remquof F -GLIBC_2.21 remquol F -GLIBC_2.21 rint F -GLIBC_2.21 rintf F -GLIBC_2.21 rintl F -GLIBC_2.21 round F -GLIBC_2.21 roundf F -GLIBC_2.21 roundl F -GLIBC_2.21 scalb F -GLIBC_2.21 scalbf F -GLIBC_2.21 scalbl F -GLIBC_2.21 scalbln F -GLIBC_2.21 scalblnf F -GLIBC_2.21 scalblnl F -GLIBC_2.21 scalbn F -GLIBC_2.21 scalbnf F -GLIBC_2.21 scalbnl F -GLIBC_2.21 signgam D 0x4 -GLIBC_2.21 significand F -GLIBC_2.21 significandf F -GLIBC_2.21 significandl F -GLIBC_2.21 sin F -GLIBC_2.21 sincos F -GLIBC_2.21 sincosf F -GLIBC_2.21 sincosl F -GLIBC_2.21 sinf F -GLIBC_2.21 sinh F -GLIBC_2.21 sinhf F -GLIBC_2.21 sinhl F -GLIBC_2.21 sinl F -GLIBC_2.21 sqrt F -GLIBC_2.21 sqrtf F -GLIBC_2.21 sqrtl F -GLIBC_2.21 tan F -GLIBC_2.21 tanf F -GLIBC_2.21 tanh F -GLIBC_2.21 tanhf F -GLIBC_2.21 tanhl F -GLIBC_2.21 tanl F -GLIBC_2.21 tgamma F -GLIBC_2.21 tgammaf F -GLIBC_2.21 tgammal F -GLIBC_2.21 trunc F -GLIBC_2.21 truncf F -GLIBC_2.21 truncl F -GLIBC_2.21 y0 F -GLIBC_2.21 y0f F -GLIBC_2.21 y0l F -GLIBC_2.21 y1 F -GLIBC_2.21 y1f F -GLIBC_2.21 y1l F -GLIBC_2.21 yn F -GLIBC_2.21 ynf F -GLIBC_2.21 ynl F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F diff --git a/sysdeps/unix/sysv/linux/nios2/libnsl.abilist b/sysdeps/unix/sysv/linux/nios2/libnsl.abilist deleted file mode 100644 index 40856aba99..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/libnsl.abilist +++ /dev/null @@ -1,122 +0,0 @@ -GLIBC_2.21 GLIBC_2.21 A -GLIBC_2.21 __free_fdresult F -GLIBC_2.21 __nis_default_access F -GLIBC_2.21 __nis_default_group F -GLIBC_2.21 __nis_default_owner F -GLIBC_2.21 __nis_default_ttl F -GLIBC_2.21 __nis_finddirectory F -GLIBC_2.21 __nis_hash F -GLIBC_2.21 __nisbind_connect F -GLIBC_2.21 __nisbind_create F -GLIBC_2.21 __nisbind_destroy F -GLIBC_2.21 __nisbind_next F -GLIBC_2.21 __yp_check F -GLIBC_2.21 nis_add F -GLIBC_2.21 nis_add_entry F -GLIBC_2.21 nis_addmember F -GLIBC_2.21 nis_checkpoint F -GLIBC_2.21 nis_clone_directory F -GLIBC_2.21 nis_clone_object F -GLIBC_2.21 nis_clone_result F -GLIBC_2.21 nis_creategroup F -GLIBC_2.21 nis_destroy_object F -GLIBC_2.21 nis_destroygroup F -GLIBC_2.21 nis_dir_cmp F -GLIBC_2.21 nis_domain_of F -GLIBC_2.21 nis_domain_of_r F -GLIBC_2.21 nis_first_entry F -GLIBC_2.21 nis_free_directory F -GLIBC_2.21 nis_free_object F -GLIBC_2.21 nis_free_request F -GLIBC_2.21 nis_freenames F -GLIBC_2.21 nis_freeresult F -GLIBC_2.21 nis_freeservlist F -GLIBC_2.21 nis_freetags F -GLIBC_2.21 nis_getnames F -GLIBC_2.21 nis_getservlist F -GLIBC_2.21 nis_ismember F -GLIBC_2.21 nis_leaf_of F -GLIBC_2.21 nis_leaf_of_r F -GLIBC_2.21 nis_lerror F -GLIBC_2.21 nis_list F -GLIBC_2.21 nis_local_directory F -GLIBC_2.21 nis_local_group F -GLIBC_2.21 nis_local_host F -GLIBC_2.21 nis_local_principal F -GLIBC_2.21 nis_lookup F -GLIBC_2.21 nis_mkdir F -GLIBC_2.21 nis_modify F -GLIBC_2.21 nis_modify_entry F -GLIBC_2.21 nis_name_of F -GLIBC_2.21 nis_name_of_r F -GLIBC_2.21 nis_next_entry F -GLIBC_2.21 nis_perror F -GLIBC_2.21 nis_ping F -GLIBC_2.21 nis_print_directory F -GLIBC_2.21 nis_print_entry F -GLIBC_2.21 nis_print_group F -GLIBC_2.21 nis_print_group_entry F -GLIBC_2.21 nis_print_link F -GLIBC_2.21 nis_print_object F -GLIBC_2.21 nis_print_result F -GLIBC_2.21 nis_print_rights F -GLIBC_2.21 nis_print_table F -GLIBC_2.21 nis_read_obj F -GLIBC_2.21 nis_remove F -GLIBC_2.21 nis_remove_entry F -GLIBC_2.21 nis_removemember F -GLIBC_2.21 nis_rmdir F -GLIBC_2.21 nis_servstate F -GLIBC_2.21 nis_sperrno F -GLIBC_2.21 nis_sperror F -GLIBC_2.21 nis_sperror_r F -GLIBC_2.21 nis_stats F -GLIBC_2.21 nis_verifygroup F -GLIBC_2.21 nis_write_obj F -GLIBC_2.21 readColdStartFile F -GLIBC_2.21 writeColdStartFile F -GLIBC_2.21 xdr_cback_data F -GLIBC_2.21 xdr_domainname F -GLIBC_2.21 xdr_keydat F -GLIBC_2.21 xdr_mapname F -GLIBC_2.21 xdr_obj_p F -GLIBC_2.21 xdr_peername F -GLIBC_2.21 xdr_valdat F -GLIBC_2.21 xdr_yp_buf F -GLIBC_2.21 xdr_ypall F -GLIBC_2.21 xdr_ypbind_binding F -GLIBC_2.21 xdr_ypbind_resp F -GLIBC_2.21 xdr_ypbind_resptype F -GLIBC_2.21 xdr_ypbind_setdom F -GLIBC_2.21 xdr_ypdelete_args F -GLIBC_2.21 xdr_ypmap_parms F -GLIBC_2.21 xdr_ypmaplist F -GLIBC_2.21 xdr_yppush_status F -GLIBC_2.21 xdr_yppushresp_xfr F -GLIBC_2.21 xdr_ypreq_key F -GLIBC_2.21 xdr_ypreq_nokey F -GLIBC_2.21 xdr_ypreq_xfr F -GLIBC_2.21 xdr_ypresp_all F -GLIBC_2.21 xdr_ypresp_key_val F -GLIBC_2.21 xdr_ypresp_maplist F -GLIBC_2.21 xdr_ypresp_master F -GLIBC_2.21 xdr_ypresp_order F -GLIBC_2.21 xdr_ypresp_val F -GLIBC_2.21 xdr_ypresp_xfr F -GLIBC_2.21 xdr_ypstat F -GLIBC_2.21 xdr_ypupdate_args F -GLIBC_2.21 xdr_ypxfrstat F -GLIBC_2.21 yp_all F -GLIBC_2.21 yp_bind F -GLIBC_2.21 yp_first F -GLIBC_2.21 yp_get_default_domain F -GLIBC_2.21 yp_maplist F -GLIBC_2.21 yp_master F -GLIBC_2.21 yp_match F -GLIBC_2.21 yp_next F -GLIBC_2.21 yp_order F -GLIBC_2.21 yp_unbind F -GLIBC_2.21 yp_update F -GLIBC_2.21 ypbinderr_string F -GLIBC_2.21 yperr_string F -GLIBC_2.21 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist deleted file mode 100644 index a10bbdec87..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist +++ /dev/null @@ -1,223 +0,0 @@ -GLIBC_2.21 GLIBC_2.21 A -GLIBC_2.21 _IO_flockfile F -GLIBC_2.21 _IO_ftrylockfile F -GLIBC_2.21 _IO_funlockfile F -GLIBC_2.21 __close F -GLIBC_2.21 __connect F -GLIBC_2.21 __errno_location F -GLIBC_2.21 __fcntl F -GLIBC_2.21 __fork F -GLIBC_2.21 __h_errno_location F -GLIBC_2.21 __libc_allocate_rtsig F -GLIBC_2.21 __libc_current_sigrtmax F -GLIBC_2.21 __libc_current_sigrtmin F -GLIBC_2.21 __lseek F -GLIBC_2.21 __nanosleep F -GLIBC_2.21 __open F -GLIBC_2.21 __open64 F -GLIBC_2.21 __pread64 F -GLIBC_2.21 __pthread_cleanup_routine F -GLIBC_2.21 __pthread_getspecific F -GLIBC_2.21 __pthread_key_create F -GLIBC_2.21 __pthread_mutex_destroy F -GLIBC_2.21 __pthread_mutex_init F -GLIBC_2.21 __pthread_mutex_lock F -GLIBC_2.21 __pthread_mutex_trylock F -GLIBC_2.21 __pthread_mutex_unlock F -GLIBC_2.21 __pthread_mutexattr_destroy F -GLIBC_2.21 __pthread_mutexattr_init F -GLIBC_2.21 __pthread_mutexattr_settype F -GLIBC_2.21 __pthread_once F -GLIBC_2.21 __pthread_register_cancel F -GLIBC_2.21 __pthread_register_cancel_defer F -GLIBC_2.21 __pthread_rwlock_destroy F -GLIBC_2.21 __pthread_rwlock_init F -GLIBC_2.21 __pthread_rwlock_rdlock F -GLIBC_2.21 __pthread_rwlock_tryrdlock F -GLIBC_2.21 __pthread_rwlock_trywrlock F -GLIBC_2.21 __pthread_rwlock_unlock F -GLIBC_2.21 __pthread_rwlock_wrlock F -GLIBC_2.21 __pthread_setspecific F -GLIBC_2.21 __pthread_unregister_cancel F -GLIBC_2.21 __pthread_unregister_cancel_restore F -GLIBC_2.21 __pthread_unwind_next F -GLIBC_2.21 __pwrite64 F -GLIBC_2.21 __read F -GLIBC_2.21 __res_state F -GLIBC_2.21 __send F -GLIBC_2.21 __sigaction F -GLIBC_2.21 __wait F -GLIBC_2.21 __write F -GLIBC_2.21 _pthread_cleanup_pop F -GLIBC_2.21 _pthread_cleanup_pop_restore F -GLIBC_2.21 _pthread_cleanup_push F -GLIBC_2.21 _pthread_cleanup_push_defer F -GLIBC_2.21 accept F -GLIBC_2.21 close F -GLIBC_2.21 connect F -GLIBC_2.21 fcntl F -GLIBC_2.21 flockfile F -GLIBC_2.21 fork F -GLIBC_2.21 fsync F -GLIBC_2.21 ftrylockfile F -GLIBC_2.21 funlockfile F -GLIBC_2.21 longjmp F -GLIBC_2.21 lseek F -GLIBC_2.21 lseek64 F -GLIBC_2.21 msync F -GLIBC_2.21 nanosleep F -GLIBC_2.21 open F -GLIBC_2.21 open64 F -GLIBC_2.21 pause F -GLIBC_2.21 pread F -GLIBC_2.21 pread64 F -GLIBC_2.21 pthread_attr_destroy F -GLIBC_2.21 pthread_attr_getaffinity_np F -GLIBC_2.21 pthread_attr_getdetachstate F -GLIBC_2.21 pthread_attr_getguardsize F -GLIBC_2.21 pthread_attr_getinheritsched F -GLIBC_2.21 pthread_attr_getschedparam F -GLIBC_2.21 pthread_attr_getschedpolicy F -GLIBC_2.21 pthread_attr_getscope F -GLIBC_2.21 pthread_attr_getstack F -GLIBC_2.21 pthread_attr_getstackaddr F -GLIBC_2.21 pthread_attr_getstacksize F -GLIBC_2.21 pthread_attr_init F -GLIBC_2.21 pthread_attr_setaffinity_np F -GLIBC_2.21 pthread_attr_setdetachstate F -GLIBC_2.21 pthread_attr_setguardsize F -GLIBC_2.21 pthread_attr_setinheritsched F -GLIBC_2.21 pthread_attr_setschedparam F -GLIBC_2.21 pthread_attr_setschedpolicy F -GLIBC_2.21 pthread_attr_setscope F -GLIBC_2.21 pthread_attr_setstack F -GLIBC_2.21 pthread_attr_setstackaddr F -GLIBC_2.21 pthread_attr_setstacksize F -GLIBC_2.21 pthread_barrier_destroy F -GLIBC_2.21 pthread_barrier_init F -GLIBC_2.21 pthread_barrier_wait F -GLIBC_2.21 pthread_barrierattr_destroy F -GLIBC_2.21 pthread_barrierattr_getpshared F -GLIBC_2.21 pthread_barrierattr_init F -GLIBC_2.21 pthread_barrierattr_setpshared F -GLIBC_2.21 pthread_cancel F -GLIBC_2.21 pthread_cond_broadcast F -GLIBC_2.21 pthread_cond_destroy F -GLIBC_2.21 pthread_cond_init F -GLIBC_2.21 pthread_cond_signal F -GLIBC_2.21 pthread_cond_timedwait F -GLIBC_2.21 pthread_cond_wait F -GLIBC_2.21 pthread_condattr_destroy F -GLIBC_2.21 pthread_condattr_getclock F -GLIBC_2.21 pthread_condattr_getpshared F -GLIBC_2.21 pthread_condattr_init F -GLIBC_2.21 pthread_condattr_setclock F -GLIBC_2.21 pthread_condattr_setpshared F -GLIBC_2.21 pthread_create F -GLIBC_2.21 pthread_detach F -GLIBC_2.21 pthread_equal F -GLIBC_2.21 pthread_exit F -GLIBC_2.21 pthread_getaffinity_np F -GLIBC_2.21 pthread_getattr_default_np F -GLIBC_2.21 pthread_getattr_np F -GLIBC_2.21 pthread_getconcurrency F -GLIBC_2.21 pthread_getcpuclockid F -GLIBC_2.21 pthread_getname_np F -GLIBC_2.21 pthread_getschedparam F -GLIBC_2.21 pthread_getspecific F -GLIBC_2.21 pthread_join F -GLIBC_2.21 pthread_key_create F -GLIBC_2.21 pthread_key_delete F -GLIBC_2.21 pthread_kill F -GLIBC_2.21 pthread_kill_other_threads_np F -GLIBC_2.21 pthread_mutex_consistent F -GLIBC_2.21 pthread_mutex_consistent_np F -GLIBC_2.21 pthread_mutex_destroy F -GLIBC_2.21 pthread_mutex_getprioceiling F -GLIBC_2.21 pthread_mutex_init F -GLIBC_2.21 pthread_mutex_lock F -GLIBC_2.21 pthread_mutex_setprioceiling F -GLIBC_2.21 pthread_mutex_timedlock F -GLIBC_2.21 pthread_mutex_trylock F -GLIBC_2.21 pthread_mutex_unlock F -GLIBC_2.21 pthread_mutexattr_destroy F -GLIBC_2.21 pthread_mutexattr_getkind_np F -GLIBC_2.21 pthread_mutexattr_getprioceiling F -GLIBC_2.21 pthread_mutexattr_getprotocol F -GLIBC_2.21 pthread_mutexattr_getpshared F -GLIBC_2.21 pthread_mutexattr_getrobust F -GLIBC_2.21 pthread_mutexattr_getrobust_np F -GLIBC_2.21 pthread_mutexattr_gettype F -GLIBC_2.21 pthread_mutexattr_init F -GLIBC_2.21 pthread_mutexattr_setkind_np F -GLIBC_2.21 pthread_mutexattr_setprioceiling F -GLIBC_2.21 pthread_mutexattr_setprotocol F -GLIBC_2.21 pthread_mutexattr_setpshared F -GLIBC_2.21 pthread_mutexattr_setrobust F -GLIBC_2.21 pthread_mutexattr_setrobust_np F -GLIBC_2.21 pthread_mutexattr_settype F -GLIBC_2.21 pthread_once F -GLIBC_2.21 pthread_rwlock_destroy F -GLIBC_2.21 pthread_rwlock_init F -GLIBC_2.21 pthread_rwlock_rdlock F -GLIBC_2.21 pthread_rwlock_timedrdlock F -GLIBC_2.21 pthread_rwlock_timedwrlock F -GLIBC_2.21 pthread_rwlock_tryrdlock F -GLIBC_2.21 pthread_rwlock_trywrlock F -GLIBC_2.21 pthread_rwlock_unlock F -GLIBC_2.21 pthread_rwlock_wrlock F -GLIBC_2.21 pthread_rwlockattr_destroy F -GLIBC_2.21 pthread_rwlockattr_getkind_np F -GLIBC_2.21 pthread_rwlockattr_getpshared F -GLIBC_2.21 pthread_rwlockattr_init F -GLIBC_2.21 pthread_rwlockattr_setkind_np F -GLIBC_2.21 pthread_rwlockattr_setpshared F -GLIBC_2.21 pthread_self F -GLIBC_2.21 pthread_setaffinity_np F -GLIBC_2.21 pthread_setattr_default_np F -GLIBC_2.21 pthread_setcancelstate F -GLIBC_2.21 pthread_setcanceltype F -GLIBC_2.21 pthread_setconcurrency F -GLIBC_2.21 pthread_setname_np F -GLIBC_2.21 pthread_setschedparam F -GLIBC_2.21 pthread_setschedprio F -GLIBC_2.21 pthread_setspecific F -GLIBC_2.21 pthread_sigmask F -GLIBC_2.21 pthread_sigqueue F -GLIBC_2.21 pthread_spin_destroy F -GLIBC_2.21 pthread_spin_init F -GLIBC_2.21 pthread_spin_lock F -GLIBC_2.21 pthread_spin_trylock F -GLIBC_2.21 pthread_spin_unlock F -GLIBC_2.21 pthread_testcancel F -GLIBC_2.21 pthread_timedjoin_np F -GLIBC_2.21 pthread_tryjoin_np F -GLIBC_2.21 pthread_yield F -GLIBC_2.21 pwrite F -GLIBC_2.21 pwrite64 F -GLIBC_2.21 raise F -GLIBC_2.21 read F -GLIBC_2.21 recv F -GLIBC_2.21 recvfrom F -GLIBC_2.21 recvmsg F -GLIBC_2.21 sem_close F -GLIBC_2.21 sem_destroy F -GLIBC_2.21 sem_getvalue F -GLIBC_2.21 sem_init F -GLIBC_2.21 sem_open F -GLIBC_2.21 sem_post F -GLIBC_2.21 sem_timedwait F -GLIBC_2.21 sem_trywait F -GLIBC_2.21 sem_unlink F -GLIBC_2.21 sem_wait F -GLIBC_2.21 send F -GLIBC_2.21 sendmsg F -GLIBC_2.21 sendto F -GLIBC_2.21 sigaction F -GLIBC_2.21 siglongjmp F -GLIBC_2.21 sigwait F -GLIBC_2.21 system F -GLIBC_2.21 tcdrain F -GLIBC_2.21 wait F -GLIBC_2.21 waitpid F -GLIBC_2.21 write F diff --git a/sysdeps/unix/sysv/linux/nios2/libresolv.abilist b/sysdeps/unix/sysv/linux/nios2/libresolv.abilist deleted file mode 100644 index b006fcafe7..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/libresolv.abilist +++ /dev/null @@ -1,92 +0,0 @@ -GLIBC_2.21 GLIBC_2.21 A -GLIBC_2.21 __b64_ntop F -GLIBC_2.21 __b64_pton F -GLIBC_2.21 __dn_comp F -GLIBC_2.21 __dn_count_labels F -GLIBC_2.21 __dn_expand F -GLIBC_2.21 __dn_skipname F -GLIBC_2.21 __fp_nquery F -GLIBC_2.21 __fp_query F -GLIBC_2.21 __fp_resstat F -GLIBC_2.21 __hostalias F -GLIBC_2.21 __loc_aton F -GLIBC_2.21 __loc_ntoa F -GLIBC_2.21 __p_cdname F -GLIBC_2.21 __p_cdnname F -GLIBC_2.21 __p_class F -GLIBC_2.21 __p_class_syms D 0x54 -GLIBC_2.21 __p_fqname F -GLIBC_2.21 __p_fqnname F -GLIBC_2.21 __p_option F -GLIBC_2.21 __p_query F -GLIBC_2.21 __p_rcode F -GLIBC_2.21 __p_secstodate F -GLIBC_2.21 __p_time F -GLIBC_2.21 __p_type F -GLIBC_2.21 __p_type_syms D 0x228 -GLIBC_2.21 __putlong F -GLIBC_2.21 __putshort F -GLIBC_2.21 __res_close F -GLIBC_2.21 __res_dnok F -GLIBC_2.21 __res_hnok F -GLIBC_2.21 __res_hostalias F -GLIBC_2.21 __res_isourserver F -GLIBC_2.21 __res_mailok F -GLIBC_2.21 __res_mkquery F -GLIBC_2.21 __res_nameinquery F -GLIBC_2.21 __res_nmkquery F -GLIBC_2.21 __res_nquery F -GLIBC_2.21 __res_nquerydomain F -GLIBC_2.21 __res_nsearch F -GLIBC_2.21 __res_nsend F -GLIBC_2.21 __res_ownok F -GLIBC_2.21 __res_queriesmatch F -GLIBC_2.21 __res_query F -GLIBC_2.21 __res_querydomain F -GLIBC_2.21 __res_search F -GLIBC_2.21 __res_send F -GLIBC_2.21 __sym_ntop F -GLIBC_2.21 __sym_ntos F -GLIBC_2.21 __sym_ston F -GLIBC_2.21 _gethtbyaddr F -GLIBC_2.21 _gethtbyname F -GLIBC_2.21 _gethtbyname2 F -GLIBC_2.21 _gethtent F -GLIBC_2.21 _getlong F -GLIBC_2.21 _getshort F -GLIBC_2.21 _res_opcodes D 0x40 -GLIBC_2.21 _sethtent F -GLIBC_2.21 inet_net_ntop F -GLIBC_2.21 inet_net_pton F -GLIBC_2.21 inet_neta F -GLIBC_2.21 ns_datetosecs F -GLIBC_2.21 ns_format_ttl F -GLIBC_2.21 ns_get16 F -GLIBC_2.21 ns_get32 F -GLIBC_2.21 ns_initparse F -GLIBC_2.21 ns_makecanon F -GLIBC_2.21 ns_msg_getflag F -GLIBC_2.21 ns_name_compress F -GLIBC_2.21 ns_name_ntol F -GLIBC_2.21 ns_name_ntop F -GLIBC_2.21 ns_name_pack F -GLIBC_2.21 ns_name_pton F -GLIBC_2.21 ns_name_rollback F -GLIBC_2.21 ns_name_skip F -GLIBC_2.21 ns_name_uncompress F -GLIBC_2.21 ns_name_unpack F -GLIBC_2.21 ns_parse_ttl F -GLIBC_2.21 ns_parserr F -GLIBC_2.21 ns_put16 F -GLIBC_2.21 ns_put32 F -GLIBC_2.21 ns_samedomain F -GLIBC_2.21 ns_samename F -GLIBC_2.21 ns_skiprr F -GLIBC_2.21 ns_sprintrr F -GLIBC_2.21 ns_sprintrrf F -GLIBC_2.21 ns_subdomain F -GLIBC_2.21 res_gethostbyaddr F -GLIBC_2.21 res_gethostbyname F -GLIBC_2.21 res_gethostbyname2 F -GLIBC_2.21 res_send_setqhook F -GLIBC_2.21 res_send_setrhook F diff --git a/sysdeps/unix/sysv/linux/nios2/librt.abilist b/sysdeps/unix/sysv/linux/nios2/librt.abilist deleted file mode 100644 index 51b1c5bc03..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/librt.abilist +++ /dev/null @@ -1,36 +0,0 @@ -GLIBC_2.21 GLIBC_2.21 A -GLIBC_2.21 __mq_open_2 F -GLIBC_2.21 aio_cancel F -GLIBC_2.21 aio_cancel64 F -GLIBC_2.21 aio_error F -GLIBC_2.21 aio_error64 F -GLIBC_2.21 aio_fsync F -GLIBC_2.21 aio_fsync64 F -GLIBC_2.21 aio_init F -GLIBC_2.21 aio_read F -GLIBC_2.21 aio_read64 F -GLIBC_2.21 aio_return F -GLIBC_2.21 aio_return64 F -GLIBC_2.21 aio_suspend F -GLIBC_2.21 aio_suspend64 F -GLIBC_2.21 aio_write F -GLIBC_2.21 aio_write64 F -GLIBC_2.21 lio_listio F -GLIBC_2.21 lio_listio64 F -GLIBC_2.21 mq_close F -GLIBC_2.21 mq_getattr F -GLIBC_2.21 mq_notify F -GLIBC_2.21 mq_open F -GLIBC_2.21 mq_receive F -GLIBC_2.21 mq_send F -GLIBC_2.21 mq_setattr F -GLIBC_2.21 mq_timedreceive F -GLIBC_2.21 mq_timedsend F -GLIBC_2.21 mq_unlink F -GLIBC_2.21 shm_open F -GLIBC_2.21 shm_unlink F -GLIBC_2.21 timer_create F -GLIBC_2.21 timer_delete F -GLIBC_2.21 timer_getoverrun F -GLIBC_2.21 timer_gettime F -GLIBC_2.21 timer_settime F diff --git a/sysdeps/unix/sysv/linux/nios2/libthread_db.abilist b/sysdeps/unix/sysv/linux/nios2/libthread_db.abilist deleted file mode 100644 index 96be90f65b..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/libthread_db.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.21 GLIBC_2.21 A -GLIBC_2.21 td_init F -GLIBC_2.21 td_log F -GLIBC_2.21 td_symbol_list F -GLIBC_2.21 td_ta_clear_event F -GLIBC_2.21 td_ta_delete F -GLIBC_2.21 td_ta_enable_stats F -GLIBC_2.21 td_ta_event_addr F -GLIBC_2.21 td_ta_event_getmsg F -GLIBC_2.21 td_ta_get_nthreads F -GLIBC_2.21 td_ta_get_ph F -GLIBC_2.21 td_ta_get_stats F -GLIBC_2.21 td_ta_map_id2thr F -GLIBC_2.21 td_ta_map_lwp2thr F -GLIBC_2.21 td_ta_new F -GLIBC_2.21 td_ta_reset_stats F -GLIBC_2.21 td_ta_set_event F -GLIBC_2.21 td_ta_setconcurrency F -GLIBC_2.21 td_ta_thr_iter F -GLIBC_2.21 td_ta_tsd_iter F -GLIBC_2.21 td_thr_clear_event F -GLIBC_2.21 td_thr_dbresume F -GLIBC_2.21 td_thr_dbsuspend F -GLIBC_2.21 td_thr_event_enable F -GLIBC_2.21 td_thr_event_getmsg F -GLIBC_2.21 td_thr_get_info F -GLIBC_2.21 td_thr_getfpregs F -GLIBC_2.21 td_thr_getgregs F -GLIBC_2.21 td_thr_getxregs F -GLIBC_2.21 td_thr_getxregsize F -GLIBC_2.21 td_thr_set_event F -GLIBC_2.21 td_thr_setfpregs F -GLIBC_2.21 td_thr_setgregs F -GLIBC_2.21 td_thr_setprio F -GLIBC_2.21 td_thr_setsigpending F -GLIBC_2.21 td_thr_setxregs F -GLIBC_2.21 td_thr_sigsetmask F -GLIBC_2.21 td_thr_tls_get_addr F -GLIBC_2.21 td_thr_tlsbase F -GLIBC_2.21 td_thr_tsd F -GLIBC_2.21 td_thr_validate F diff --git a/sysdeps/unix/sysv/linux/nios2/libutil.abilist b/sysdeps/unix/sysv/linux/nios2/libutil.abilist deleted file mode 100644 index 0c21934dc0..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.21 GLIBC_2.21 A -GLIBC_2.21 forkpty F -GLIBC_2.21 login F -GLIBC_2.21 login_tty F -GLIBC_2.21 logout F -GLIBC_2.21 logwtmp F -GLIBC_2.21 openpty F diff --git a/sysdeps/unix/sysv/linux/nios2/localplt.data b/sysdeps/unix/sysv/linux/nios2/localplt.data deleted file mode 100644 index 584963d202..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/localplt.data +++ /dev/null @@ -1,38 +0,0 @@ -libc.so: realloc -libc.so: __floatsisf -libc.so: __gtdf2 -libc.so: __ltdf2 -libc.so: __gedf2 -libc.so: malloc -libc.so: __gtsf2 -libc.so: __nesf2 -libc.so: memalign -libc.so: __mulsf3 -libc.so: __floatunsisf -libc.so: __addsf3 -libc.so: __fixsfsi -libc.so: __subsf3 -libc.so: __unorddf2 -libc.so: calloc -libc.so: __muldf3 -libc.so: __unordsf2 -libc.so: free -libc.so: __subdf3 -libc.so: __ledf2 -libc.so: __adddf3 -libc.so: __divdf3 -libc.so: __floatsidf -libc.so: __divsf3 -libc.so: __nedf2 -libc.so: __eqdf2 -libc.so: __extendsfdf2 -libm.so: matherr -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/unix/sysv/linux/nios2/makecontext.c b/sysdeps/unix/sysv/linux/nios2/makecontext.c deleted file mode 100644 index b4c45cd3d4..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/makecontext.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Create new context. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* makecontext sets up a stack and the registers for the - user context. The stack looks like this: - - +-----------------------+ - | padding as required | - +-----------------------+ - sp -> | parameters 5 to n | - +-----------------------+ - - The registers are set up like this: - r4--r7 : parameter 1 to 4 - r16 : uc_link - sp : stack pointer. -*/ - -void -__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) -{ - extern void __startcontext (void); - unsigned long *sp; - va_list ap; - int i; - - sp = (unsigned long *) - ((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); - - /* Allocate stack arguments. */ - sp -= argc < 4 ? 0 : argc - 4; - - /* Keep the stack aligned. */ - sp = (unsigned long*) (((uintptr_t) sp) & -4L); - - /* Init version field. */ - ucp->uc_mcontext.version = 2; - /* Keep uc_link in r16. */ - ucp->uc_mcontext.regs[15] = (uintptr_t) ucp->uc_link; - /* Return address points to __startcontext(). */ - ucp->uc_mcontext.regs[23] = (uintptr_t) &__startcontext; - /* Frame pointer is null. */ - ucp->uc_mcontext.regs[24] = (uintptr_t) 0; - /* Restart in user-space starting at 'func'. */ - ucp->uc_mcontext.regs[27] = (uintptr_t) func; - /* Set stack pointer. */ - ucp->uc_mcontext.regs[28] = (uintptr_t) sp; - - va_start (ap, argc); - for (i = 0; i < argc; ++i) - if (i < 4) - ucp->uc_mcontext.regs[i + 3] = va_arg (ap, unsigned long); - else - sp[i - 4] = va_arg (ap, unsigned long); - - va_end (ap); -} - -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/nios2/profil-counter.h b/sysdeps/unix/sysv/linux/nios2/profil-counter.h deleted file mode 100644 index 8a6a0bcf3d..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/profil-counter.h +++ /dev/null @@ -1,2 +0,0 @@ -/* We can use the ix86 version. */ -#include diff --git a/sysdeps/unix/sysv/linux/nios2/setcontext.S b/sysdeps/unix/sysv/linux/nios2/setcontext.S deleted file mode 100644 index bb6122b5b2..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/setcontext.S +++ /dev/null @@ -1,115 +0,0 @@ -/* Set current context. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "ucontext_i.h" - -/* int setcontext (const ucontext_t *ucp) */ - .text -ENTRY(__setcontext) - ldw r5, UCONTEXT_FLAGS(r4) - movi r6, 1 - bne r5, r6, .Lsigreturn - - mov r10, r4 - - /* Restore signal mask. */ - /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8) */ - movi r7, _NSIG8 - addi r5, r4, UCONTEXT_SIGMASK - mov r6, zero - movi r4, SIG_SETMASK - movi r2, SYS_ify (rt_sigprocmask) - trap - bne r7, zero, SYSCALL_ERROR_LABEL - - /* Restore argument registers, for the makecontext() case. */ - ldw r4, (UCONTEXT_MCONTEXT + 4*4)(r10) - ldw r5, (UCONTEXT_MCONTEXT + 5*4)(r10) - ldw r6, (UCONTEXT_MCONTEXT + 6*4)(r10) - ldw r7, (UCONTEXT_MCONTEXT + 7*4)(r10) - - ldw r16, (UCONTEXT_MCONTEXT + 16*4)(r10) - ldw r17, (UCONTEXT_MCONTEXT + 17*4)(r10) - ldw r18, (UCONTEXT_MCONTEXT + 18*4)(r10) - ldw r19, (UCONTEXT_MCONTEXT + 19*4)(r10) - ldw r20, (UCONTEXT_MCONTEXT + 20*4)(r10) - ldw r21, (UCONTEXT_MCONTEXT + 21*4)(r10) - ldw r22, (UCONTEXT_MCONTEXT + 22*4)(r10) - ldw ra, (UCONTEXT_MCONTEXT + 24*4)(r10) - ldw fp, (UCONTEXT_MCONTEXT + 25*4)(r10) - ldw gp, (UCONTEXT_MCONTEXT + 26*4)(r10) - /* Load address to continue execution. */ - ldw r3, (UCONTEXT_MCONTEXT + 28*4)(r10) - ldw sp, (UCONTEXT_MCONTEXT + 29*4)(r10) - - mov r2, zero - jmp r3 - -.Lsigreturn: - addi sp, sp, -RT_SIGFRAME_SIZE - cfi_adjust_cfa_offset (RT_SIGFRAME_SIZE) - - addi r2, sp, RT_SIGFRAME_UCONTEXT - movi r3, UCONTEXT_SIZE-4 -1: - add r6, r4, r3 - ldw r5, 0(r6) - add r7, r2, r3 - addi r3, r3, -4 - stw r5, 0(r7) - bgt r3, zero, 1b - - movi r2, SYS_ify (rt_sigreturn) - trap - - addi sp, sp, RT_SIGFRAME_SIZE - cfi_adjust_cfa_offset (-RT_SIGFRAME_SIZE) - br SYSCALL_ERROR_LABEL - -PSEUDO_END (__setcontext) -weak_alias (__setcontext, setcontext) - - /* We add an NOP here to separate between __setcontext/__startcontext. - The wanted behavior that happens is: when unwinding from a function - called inside a makecontext() context, FDE lookup will use - '&__startcontext - 1', then returns NULL for no FDE found, - and immediately ends the unwind, in a normal fashion. - - If this NOP word does not exist, FDE lookup just repeatedly finds - __setcontext's FDE in an infinite loop, due to the convention of - using 'address - 1' for FDE lookup. Modifiying/deleting the below - __startcontext's FDE has no help on this. */ - nop - -ENTRY(__startcontext) - mov r4, r16 - bne r4, zero, __setcontext - - /* If uc_link == zero, call exit. */ -#ifdef PIC - nextpc r22 -1: movhi r8, %hiadj(_gp_got - 1b) - addi r8, r8, %lo(_gp_got - 1b) - add r22, r22, r8 - ldw r8, %call(HIDDEN_JUMPTARGET(exit))(r22) - jmp r8 -#else - jmpi exit -#endif -END(__startcontext) diff --git a/sysdeps/unix/sysv/linux/nios2/shlib-versions b/sysdeps/unix/sysv/linux/nios2/shlib-versions deleted file mode 100644 index 443fd4df23..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/shlib-versions +++ /dev/null @@ -1,2 +0,0 @@ -DEFAULT GLIBC_2.21 -ld=ld-linux-nios2.so.1 diff --git a/sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h b/sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h deleted file mode 100644 index 51b715c308..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Nios II definitions for signal handling calling conventions. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "kernel-features.h" - -#define SIGCONTEXT siginfo_t *_si, struct ucontext * -#define GET_PC(ctx) ((void *) (ctx)->uc_mcontext.regs[27]) - -/* There is no reliable way to get the sigcontext unless we use a - three-argument signal handler. */ -#define __sigaction(sig, act, oact) ({ \ - (act)->sa_flags |= SA_SIGINFO; \ - (__sigaction) (sig, act, oact); \ -}) - -#define sigaction(sig, act, oact) ({ \ - (act)->sa_flags |= SA_SIGINFO; \ - (sigaction) (sig, act, oact); \ -}) diff --git a/sysdeps/unix/sysv/linux/nios2/swapcontext.S b/sysdeps/unix/sysv/linux/nios2/swapcontext.S deleted file mode 100644 index 00871c2979..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/swapcontext.S +++ /dev/null @@ -1,125 +0,0 @@ -/* Modify saved context. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "ucontext_i.h" - -/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */ - .text -ENTRY(__swapcontext) - - /* Same as getcontext(). */ - stw r16, (UCONTEXT_MCONTEXT + 16*4)(r4) - stw r17, (UCONTEXT_MCONTEXT + 17*4)(r4) - stw r18, (UCONTEXT_MCONTEXT + 18*4)(r4) - stw r19, (UCONTEXT_MCONTEXT + 19*4)(r4) - stw r20, (UCONTEXT_MCONTEXT + 20*4)(r4) - stw r21, (UCONTEXT_MCONTEXT + 21*4)(r4) - stw r22, (UCONTEXT_MCONTEXT + 22*4)(r4) - stw ra, (UCONTEXT_MCONTEXT + 24*4)(r4) - stw fp, (UCONTEXT_MCONTEXT + 25*4)(r4) - stw gp, (UCONTEXT_MCONTEXT + 26*4)(r4) - /* Store return address at place for EA. */ - stw ra, (UCONTEXT_MCONTEXT + 28*4)(r4) - stw sp, (UCONTEXT_MCONTEXT + 29*4)(r4) - /* Store zero for return success. */ - stw zero, (UCONTEXT_MCONTEXT + 2*4)(r4) - - /* Store value "1" at uc_flags to recognize as getcontext created. */ - movi r2, 1 - stw r2, UCONTEXT_FLAGS(r4) - - /* Store MCONTEXT_VERSION at first word of mcontext_t. */ - movi r2, MCONTEXT_VERSION - stw r2, UCONTEXT_MCONTEXT(r4) - - /* Save ucp to non-argument syscall preserved register. */ - mov r10, r5 - - /* Get signal mask. */ - /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ - movi r7, _NSIG8 - addi r6, r4, UCONTEXT_SIGMASK - mov r5, zero - movi r4, SIG_BLOCK - movi r2, SYS_ify (rt_sigprocmask) - trap - bne r7, zero, SYSCALL_ERROR_LABEL - - - /* Same as setcontext(). */ - ldw r5, UCONTEXT_FLAGS(r10) - movi r6, 1 - bne r5, r6, .Lsigreturn - - /* Restore signal mask. */ - /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8) */ - movi r7, _NSIG8 - addi r5, r10, UCONTEXT_SIGMASK - mov r6, zero - movi r4, SIG_SETMASK - movi r2, SYS_ify (rt_sigprocmask) - trap - bne r7, zero, SYSCALL_ERROR_LABEL - - /* Restore argument registers, for the makecontext() case. */ - ldw r4, (UCONTEXT_MCONTEXT + 4*4)(r10) - ldw r5, (UCONTEXT_MCONTEXT + 5*4)(r10) - ldw r6, (UCONTEXT_MCONTEXT + 6*4)(r10) - ldw r7, (UCONTEXT_MCONTEXT + 7*4)(r10) - - ldw r16, (UCONTEXT_MCONTEXT + 16*4)(r10) - ldw r17, (UCONTEXT_MCONTEXT + 17*4)(r10) - ldw r18, (UCONTEXT_MCONTEXT + 18*4)(r10) - ldw r19, (UCONTEXT_MCONTEXT + 19*4)(r10) - ldw r20, (UCONTEXT_MCONTEXT + 20*4)(r10) - ldw r21, (UCONTEXT_MCONTEXT + 21*4)(r10) - ldw r22, (UCONTEXT_MCONTEXT + 22*4)(r10) - ldw ra, (UCONTEXT_MCONTEXT + 24*4)(r10) - ldw fp, (UCONTEXT_MCONTEXT + 25*4)(r10) - ldw gp, (UCONTEXT_MCONTEXT + 26*4)(r10) - /* Load address to continue execution. */ - ldw r3, (UCONTEXT_MCONTEXT + 28*4)(r10) - ldw sp, (UCONTEXT_MCONTEXT + 29*4)(r10) - - mov r2, zero - jmp r3 - -.Lsigreturn: - addi sp, sp, -RT_SIGFRAME_SIZE - cfi_adjust_cfa_offset (RT_SIGFRAME_SIZE) - - addi r2, sp, RT_SIGFRAME_UCONTEXT - movi r3, UCONTEXT_SIZE-4 -1: - add r6, r4, r3 - ldw r5, 0(r6) - add r7, r2, r3 - addi r3, r3, -4 - stw r5, 0(r7) - bgt r3, zero, 1b - - movi r2, SYS_ify (rt_sigreturn) - trap - - addi sp, sp, RT_SIGFRAME_SIZE - cfi_adjust_cfa_offset (-RT_SIGFRAME_SIZE) - br SYSCALL_ERROR_LABEL - -PSEUDO_END (__swapcontext) -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/nios2/sys/cachectl.h b/sysdeps/unix/sysv/linux/nios2/sys/cachectl.h deleted file mode 100644 index 442f354e16..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/sys/cachectl.h +++ /dev/null @@ -1,33 +0,0 @@ -/* cacheflush - flush contents of instruction and/or data cache. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_CACHECTL_H -#define _SYS_CACHECTL_H 1 - -#include - -__BEGIN_DECLS - -#ifdef __USE_MISC -extern int cacheflush (void *__addr, const int __nbytes, const int __op) __THROW; -#endif -extern int _flush_cache (char *__addr, const int __nbytes, const int __op) __THROW; - -__END_DECLS - -#endif /* sys/cachectl.h */ diff --git a/sysdeps/unix/sysv/linux/nios2/sys/procfs.h b/sysdeps/unix/sysv/linux/nios2/sys/procfs.h deleted file mode 100644 index c9ae7f90c8..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/sys/procfs.h +++ /dev/null @@ -1,123 +0,0 @@ -/* Core image file related definitions, Nios II version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somewhat modelled after the file of the same name on SVR4 - systems. It provides a definition of the core file format for ELF - used on Linux. It doesn't have anything to do with the /proc file - system, even though Linux has one. - - Anyway, the whole purpose of this file is for GDB and GDB only. - Don't read too much into it. Don't use it for anything other than - GDB unless you know what you are doing. */ - -#include -#include -#include -#include - -__BEGIN_DECLS - -/* Type for a general-purpose register. */ -typedef unsigned long elf_greg_t; - -/* And the whole bunch of them. We could have used `struct - user_regs' directly in the typedef, but tradition says that - the register set is an array, which does have some peculiar - semantics, so leave it that way. */ -#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -/* Register set for the floating-point registers. */ -typedef struct user_fpregs elf_fpregset_t; - -/* Signal info. */ -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with Linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - GDB doesn't really use excluded. */ - -struct elf_prstatus - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args. */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned short int pr_uid; - unsigned short int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -/* The rest of this file provides the types for emulation of the - Solaris interfaces that should be implemented by - users of libthread_db. */ - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore have only one PID type. */ -typedef __pid_t lwpid_t; - -/* Process status and info. In the end we do provide typedefs for them. */ -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h b/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h deleted file mode 100644 index af8d75c435..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h +++ /dev/null @@ -1,62 +0,0 @@ -/* struct ucontext definition, Nios II version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* System V/Nios II ABI compliant context switching support. */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - - -/* These definitions must be in sync with the kernel. */ - -#ifdef __USE_MISC -# define MCONTEXT_VERSION 2 -#endif - -#ifdef __USE_MISC -# define __ctx(fld) fld -#else -# define __ctx(fld) __ ## fld -#endif - -/* Context to describe whole processor state. */ -typedef struct mcontext - { - int __ctx(version); - unsigned long __ctx(regs)[32]; - } mcontext_t; - -#undef __ctx - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - sigset_t uc_sigmask; - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/nios2/sys/user.h b/sysdeps/unix/sysv/linux/nios2/sys/user.h deleted file mode 100644 index 7570ca6072..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/sys/user.h +++ /dev/null @@ -1,58 +0,0 @@ -/* ptrace register data format definitions. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_USER_H -#define _SYS_USER_H 1 - -/* The whole purpose of this file is for GDB and GDB only. Don't read - too much into it. Don't use it for anything other than GDB unless - you know what you are doing. */ - -struct user_fpregs -{ -}; - -struct user_regs -{ - unsigned long int uregs[49]; -}; - -struct user -{ - struct user_regs regs; /* General registers */ - int u_fpvalid; /* True if math co-processor being used. */ - - unsigned long int u_tsize; /* Text segment size (pages). */ - unsigned long int u_dsize; /* Data segment size (pages). */ - unsigned long int u_ssize; /* Stack segment size (pages). */ - - unsigned long start_code; /* Starting virtual address of text. */ - unsigned long start_stack; /* Starting virtual address of stack. */ - - long int signal; /* Signal that caused the core dump. */ - int reserved; /* No longer used */ - struct user_regs *u_ar0; /* help gdb to find the general registers. */ - - unsigned long magic; /* uniquely identify a core file */ - char u_comm[32]; /* User command that was responsible */ - int u_debugreg[8]; - struct user_fpregs u_fp; /* Floating point registers */ - struct user_fpregs *u_fp0; /* help gdb to find the FP registers. */ -}; - -#endif /* sys/user.h */ diff --git a/sysdeps/unix/sysv/linux/nios2/syscall.S b/sysdeps/unix/sysv/linux/nios2/syscall.S deleted file mode 100644 index 552ddf0523..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/syscall.S +++ /dev/null @@ -1,36 +0,0 @@ -/* syscall - indirect system call. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* We don't need a special syscall to implement syscall(). It won't work - reliably with 64-bit arguments (but that is true on many modern platforms). -*/ - -ENTRY (syscall) - mov r2, r4 - mov r4, r5 - mov r5, r6 - mov r6, r7 - ldw r7, 0(sp) - ldw r8, 4(sp) - ldw r9, 8(sp) - trap - bne r7, zero, SYSCALL_ERROR_LABEL - ret -PSEUDO_END (syscall) diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h deleted file mode 100644 index 47b92d99b6..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h +++ /dev/null @@ -1,141 +0,0 @@ -/* Assembler macros with cancellation support, Nios II version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .type __##syscall_name##_nocancel, @function; \ - .globl __##syscall_name##_nocancel; \ - __##syscall_name##_nocancel: \ - cfi_startproc; \ - DO_CALL (syscall_name, args); \ - bne r7, zero, SYSCALL_ERROR_LABEL; \ - ret; \ - cfi_endproc; \ - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ - ENTRY (name) \ - SINGLE_THREAD_P(r2); \ - bne r2, zero, pseudo_cancel; \ - DO_CALL (syscall_name, args); \ - bne r7, zero, SYSCALL_ERROR_LABEL; \ - ret; \ - pseudo_cancel: \ - SAVESTK_##args; /* save syscall args and adjust stack */ \ - SAVEREG(ra, 0); /* save return address */ \ - SAVEREG(r22, 4); /* save GOT pointer */ \ - nextpc r22; \ -1: movhi r2, %hiadj(_gp_got - 1b); \ - addi r2, r2, %lo(_gp_got - 1b); \ - add r22, r22, r2; \ - CENABLE; \ - callr r3; \ - stw r2, 8(sp); /* save mask */ \ - LOADARGS_##args; \ - movi r2, SYS_ify(syscall_name); \ - trap; \ - stw r2, 12(sp); /* save syscall result */ \ - stw r7, 16(sp); /* save syscall error flag */ \ - ldw r4, 8(sp); /* pass mask as argument 1 */ \ - CDISABLE; \ - callr r3; \ - ldw r7, 16(sp); /* restore syscall error flag */ \ - ldw r2, 12(sp); /* restore syscall result */ \ - ldw ra, 0(sp); /* restore return address */ \ - ldw r22, 4(sp); /* restore GOT pointer */ \ - RESTORESTK_##args; \ - bne r7, zero, SYSCALL_ERROR_LABEL; - - -# undef PSEUDO_END -# define PSEUDO_END(sym) \ - SYSCALL_ERROR_HANDLER \ - END (sym) - -#define SAVEREG(REG, LOC) stw REG, LOC(sp); cfi_rel_offset (REG, LOC) -#define SAVESTK(X) subi sp, sp, X; cfi_adjust_cfa_offset(X) -#define SAVESTK_0 SAVESTK(20) -#define SAVEARG_1 SAVEREG(r4, 20) -#define SAVESTK_1 SAVESTK(24); SAVEARG_1 -#define SAVEARG_2 SAVEREG(r5, 24); SAVEARG_1 -#define SAVESTK_2 SAVESTK(28); SAVEARG_2 -#define SAVEARG_3 SAVEREG(r6, 28); SAVEARG_2 -#define SAVESTK_3 SAVESTK(32); SAVEARG_3 -#define SAVEARG_4 SAVEREG(r7, 32); SAVEARG_3 -#define SAVESTK_4 SAVESTK(36); SAVEARG_4 -#define SAVESTK_5 SAVESTK_4 -#define SAVESTK_6 SAVESTK_5 - -#define LOADARGS_0 -#define LOADARGS_1 ldw r4, 20(sp) -#define LOADARGS_2 LOADARGS_1; ldw r5, 24(sp) -#define LOADARGS_3 LOADARGS_2; ldw r6, 28(sp) -#define LOADARGS_4 LOADARGS_3; ldw r7, 32(sp) -#define LOADARGS_5 LOADARGS_4; ldw r8, 36(sp) -#define LOADARGS_6 LOADARGS_5; ldw r9, 40(sp) - -#define RESTORESTK(X) addi sp, sp, X; cfi_adjust_cfa_offset(-X) -#define RESTORESTK_0 RESTORESTK(20) -#define RESTORESTK_1 RESTORESTK(24) -#define RESTORESTK_2 RESTORESTK(28) -#define RESTORESTK_3 RESTORESTK(32) -#define RESTORESTK_4 RESTORESTK(36) -#define RESTORESTK_5 RESTORESTK(36) -#define RESTORESTK_6 RESTORESTK(36) - -# if IS_IN (libpthread) -# define CENABLE ldw r3, %call(__pthread_enable_asynccancel)(r22) -# define CDISABLE ldw r3, %call(__pthread_disable_asynccancel)(r22) -# elif IS_IN (librt) -# define CENABLE ldw r3, %call(__librt_enable_asynccancel)(r22) -# define CDISABLE ldw r3, %call(__librt_disable_asynccancel)(r22) -# elif IS_IN (libc) -# define CENABLE ldw r3, %call(__libc_enable_asynccancel)(r22) -# define CDISABLE ldw r3, %call(__libc_disable_asynccancel)(r22) -# else -# error Unsupported library -# endif - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) \ - == 0, 1) -# else -# define SINGLE_THREAD_P(reg) \ - ldw reg, MULTIPLE_THREADS_OFFSET(r23) -#endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P 1 -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep.S b/sysdeps/unix/sysv/linux/nios2/sysdep.S deleted file mode 100644 index 5cf87c6eb3..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/sysdep.S +++ /dev/null @@ -1,50 +0,0 @@ -/* Static library error handling code fragment for Nios II. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* The following code is only used in the static library. In the shared - library, the error handling code is at the end of each function. */ - -#ifndef PIC - -/* In the static library, the syscall stubs jump here when they detect - an error. */ - -# undef CALL_MCOUNT -# define CALL_MCOUNT /* Don't insert the profiling call, it clobbers r2. */ - -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif - .text -ENTRY (__syscall_error) - nextpc r3 -1: - movhi r8, %hiadj(_gp_got - 1b) - addi r8, r8, %lo(_gp_got - 1b) - add r3, r3, r8 - ldw r3, %tls_ie(SYSCALL_ERROR_ERRNO)(r3) - add r3, r23, r3 - stw r2, 0(r3) - movi r2, -1 - ret -END (__syscall_error) -#endif diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep.h b/sysdeps/unix/sysv/linux/nios2/sysdep.h deleted file mode 100644 index c7b065bd8a..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/sysdep.h +++ /dev/null @@ -1,264 +0,0 @@ -/* Assembler macros for Nios II. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_NIOS2_SYSDEP_H -#define _LINUX_NIOS2_SYSDEP_H 1 - -#include -#include -#include -#include - -/* For RTLD_PRIVATE_ERRNO. */ -#include - -#include - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -#ifdef __ASSEMBLER__ - -#define SYSCALL_ERROR_LABEL __local_syscall_error - -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - ENTRY (name) \ - DO_CALL (syscall_name, args) \ - bne r7, zero, SYSCALL_ERROR_LABEL; \ - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - SYSCALL_ERROR_HANDLER \ - END (name) - -#undef PSEUDO_NOERRNO -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - ENTRY (name) \ - DO_CALL (syscall_name, args) - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ - END (name) - -#undef ret_NOERRNO -#define ret_NOERRNO ret - -#undef DO_CALL -#define DO_CALL(syscall_name, args) \ - DOARGS_##args \ - movi r2, SYS_ify(syscall_name); \ - trap; - -#if defined(__PIC__) || defined(PIC) - -# if RTLD_PRIVATE_ERRNO - -# define SYSCALL_ERROR_HANDLER \ - SYSCALL_ERROR_LABEL: \ - nextpc r3; \ -1: \ - movhi r8, %hiadj(rtld_errno - 1b); \ - addi r8, r8, %lo(rtld_errno - 1b); \ - add r3, r3, r8; \ - stw r2, 0(r3); \ - movi r2, -1; \ - ret; - -# else - -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif -# define SYSCALL_ERROR_HANDLER \ - SYSCALL_ERROR_LABEL: \ - nextpc r3; \ -1: \ - movhi r8, %hiadj(_gp_got - 1b); \ - addi r8, r8, %lo(_gp_got - 1b); \ - add r3, r3, r8; \ - ldw r3, %tls_ie(SYSCALL_ERROR_ERRNO)(r3); \ - add r3, r23, r3; \ - stw r2, 0(r3); \ - movi r2, -1; \ - ret; - -# endif - -#else - -/* We can use a single error handler in the static library. */ -#define SYSCALL_ERROR_HANDLER \ - SYSCALL_ERROR_LABEL: \ - jmpi __syscall_error; - -#endif - -#define DOARGS_0 /* nothing */ -#define DOARGS_1 /* nothing */ -#define DOARGS_2 /* nothing */ -#define DOARGS_3 /* nothing */ -#define DOARGS_4 /* nothing */ -#define DOARGS_5 ldw r8, 0(sp); -#define DOARGS_6 ldw r9, 4(sp); ldw r8, 0(sp); - -/* The function has to return the error code. */ -#undef PSEUDO_ERRVAL -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - ENTRY (name) \ - DO_CALL (syscall_name, args) - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) \ - END (name) - -#define ret_ERRVAL ret - -#else /* __ASSEMBLER__ */ - -/* In order to get __set_errno() definition in INLINE_SYSCALL. */ -#include - -/* Previously Nios2 used the generic version without the libc_hidden_def - which lead in a non existent __send symbol in libc.so. */ -# undef HAVE_INTERNAL_SEND_SYMBOL - -/* Define a macro which expands into the inline wrapper code for a system - call. */ -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - ({ INTERNAL_SYSCALL_DECL(err); \ - unsigned int result_var = INTERNAL_SYSCALL (name, err, nr, args); \ - if ( INTERNAL_SYSCALL_ERROR_P (result_var, err) ) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (result_var, err)); \ - result_var = -1L; \ - } \ - (int) result_var; }) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) unsigned int err __attribute__((unused)) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) ((void) (val), (unsigned int) (err)) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) ((void) (err), val) - -#undef INTERNAL_SYSCALL_RAW -#define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ - ({ unsigned int _sys_result; \ - { \ - /* Load argument values in temporary variables - to perform side effects like function calls - before the call-used registers are set. */ \ - LOAD_ARGS_##nr (args) \ - LOAD_REGS_##nr \ - register int _r2 asm ("r2") = (int)(name); \ - register int _err asm ("r7"); \ - asm volatile ("trap" \ - : "+r" (_r2), "=r" (_err) \ - : ASM_ARGS_##nr \ - : __SYSCALL_CLOBBERS); \ - _sys_result = _r2; \ - err = _err; \ - } \ - (int) _sys_result; }) - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - INTERNAL_SYSCALL_RAW(SYS_ify(name), err, nr, args) - -#undef INTERNAL_SYSCALL_NCS -#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ - INTERNAL_SYSCALL_RAW(number, err, nr, args) - -#define LOAD_ARGS_0() -#define LOAD_REGS_0 -#define ASM_ARGS_0 -#define LOAD_ARGS_1(a1) \ - LOAD_ARGS_0 () \ - int __arg1 = (int) (a1); -#define LOAD_REGS_1 \ - register int _r4 asm ("r4") = __arg1; \ - LOAD_REGS_0 -#define ASM_ARGS_1 "r" (_r4) -#define LOAD_ARGS_2(a1, a2) \ - LOAD_ARGS_1 (a1) \ - int __arg2 = (int) (a2); -#define LOAD_REGS_2 \ - register int _r5 asm ("r5") = __arg2; \ - LOAD_REGS_1 -#define ASM_ARGS_2 ASM_ARGS_1, "r" (_r5) -#define LOAD_ARGS_3(a1, a2, a3) \ - LOAD_ARGS_2 (a1, a2) \ - int __arg3 = (int) (a3); -#define LOAD_REGS_3 \ - register int _r6 asm ("r6") = __arg3; \ - LOAD_REGS_2 -#define ASM_ARGS_3 ASM_ARGS_2, "r" (_r6) -#define LOAD_ARGS_4(a1, a2, a3, a4) \ - LOAD_ARGS_3 (a1, a2, a3) \ - int __arg4 = (int) (a4); -#define LOAD_REGS_4 \ - register int _r7 asm ("r7") = __arg4; \ - LOAD_REGS_3 -#define ASM_ARGS_4 ASM_ARGS_3, "r" (_r7) -#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ - LOAD_ARGS_4 (a1, a2, a3, a4) \ - int __arg5 = (int) (a5); -#define LOAD_REGS_5 \ - register int _r8 asm ("r8") = __arg5; \ - LOAD_REGS_4 -#define ASM_ARGS_5 ASM_ARGS_4, "r" (_r8) -#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ - LOAD_ARGS_5 (a1, a2, a3, a4, a5) \ - int __arg6 = (int) (a6); -#define LOAD_REGS_6 \ - register int _r9 asm ("r9") = __arg6; \ - LOAD_REGS_5 -#define ASM_ARGS_6 ASM_ARGS_5, "r" (_r9) - -#define __SYSCALL_CLOBBERS "memory" - -#endif /* __ASSEMBLER__ */ - -/* Pointer mangling support. */ -#if IS_IN (rtld) -/* We cannot use the thread descriptor because in ld.so we use setjmp - earlier than the descriptor is initialized. */ -#else -# ifdef __ASSEMBLER__ -# define PTR_MANGLE_GUARD(guard) ldw guard, POINTER_GUARD(r23) -# define PTR_MANGLE(dst, src, guard) xor dst, src, guard -# define PTR_DEMANGLE(dst, src, guard) PTR_MANGLE (dst, src, guard) -# else -# define PTR_MANGLE(var) \ - (var) = (__typeof (var)) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#endif - - -#endif /* linux/nios2/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/nios2/ucontext_i.sym b/sysdeps/unix/sysv/linux/nios2/ucontext_i.sym deleted file mode 100644 index a844c96796..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/ucontext_i.sym +++ /dev/null @@ -1,29 +0,0 @@ -#include -#include -#include -#include - -#include "kernel_rt_sigframe.h" - -SIG_BLOCK -SIG_SETMASK - -_NSIG8 (_NSIG / 8) - -MCONTEXT_VERSION - --- Offsets of the fields in the kernel rt_sigframe_t structure. -#define rt_sigframe(member) offsetof (struct kernel_rt_sigframe, member) - -RT_SIGFRAME_SIZE sizeof (struct kernel_rt_sigframe) -RT_SIGFRAME_UCONTEXT rt_sigframe (uc) - --- Offsets of the fields in the ucontext_t structure. -#define ucontext(member) offsetof (ucontext_t, member) - -UCONTEXT_FLAGS ucontext (uc_flags) -UCONTEXT_LINK ucontext (uc_link) -UCONTEXT_STACK ucontext (uc_stack) -UCONTEXT_MCONTEXT ucontext (uc_mcontext) -UCONTEXT_SIGMASK ucontext (uc_sigmask) -UCONTEXT_SIZE sizeof (ucontext_t) diff --git a/sysdeps/unix/sysv/linux/nios2/vfork.S b/sysdeps/unix/sysv/linux/nios2/vfork.S deleted file mode 100644 index eb8a579f79..0000000000 --- a/sysdeps/unix/sysv/linux/nios2/vfork.S +++ /dev/null @@ -1,34 +0,0 @@ -/* vfork for Nios II Linux. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ENTRY(__vfork) - - movi r4, 0x4111 /* (CLONE_VM | CLONE_VFORK | SIGCHLD) */ - mov r5, zero - DO_CALL (clone, 2) - - bne r7, zero, SYSCALL_ERROR_LABEL - ret - -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) - -weak_alias (__vfork, vfork) diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h deleted file mode 100644 index 43959bad83..0000000000 --- a/sysdeps/unix/sysv/linux/not-cancel.h +++ /dev/null @@ -1,109 +0,0 @@ -/* Uncancelable versions of cancelable interfaces. Linux/NPTL version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef NOT_CANCEL_H -# define NOT_CANCEL_H - -#include -#include -#include -#include - -/* Uncancelable open. */ -#ifdef __NR_open -# define open_not_cancel(name, flags, mode) \ - INLINE_SYSCALL (open, 3, name, flags, mode) -# define open_not_cancel_2(name, flags) \ - INLINE_SYSCALL (open, 2, name, flags) -#else -# define open_not_cancel(name, flags, mode) \ - INLINE_SYSCALL (openat, 4, AT_FDCWD, name, flags, mode) -# define open_not_cancel_2(name, flags) \ - INLINE_SYSCALL (openat, 3, AT_FDCWD, name, flags) -#endif - -/* Uncancelable read. */ -#define __read_nocancel(fd, buf, len) \ - INLINE_SYSCALL (read, 3, fd, buf, len) - -/* Uncancelable write. */ -#define __write_nocancel(fd, buf, len) \ - INLINE_SYSCALL (write, 3, fd, buf, len) - -/* Uncancelable openat. */ -#define openat_not_cancel(fd, fname, oflag, mode) \ - INLINE_SYSCALL (openat, 4, fd, fname, oflag, mode) -#define openat_not_cancel_3(fd, fname, oflag) \ - INLINE_SYSCALL (openat, 3, fd, fname, oflag) -#define openat64_not_cancel(fd, fname, oflag, mode) \ - INLINE_SYSCALL (openat, 4, fd, fname, oflag | O_LARGEFILE, mode) -#define openat64_not_cancel_3(fd, fname, oflag) \ - INLINE_SYSCALL (openat, 3, fd, fname, oflag | O_LARGEFILE) - -/* Uncancelable close. */ -#define __close_nocancel(fd) \ - INLINE_SYSCALL (close, 1, fd) -#define close_not_cancel(fd) \ - __close_nocancel (fd) -#define close_not_cancel_no_status(fd) \ - (void) ({ INTERNAL_SYSCALL_DECL (err); \ - INTERNAL_SYSCALL (close, err, 1, (fd)); }) - -/* Uncancelable read. */ -#define read_not_cancel(fd, buf, n) \ - __read_nocancel (fd, buf, n) - -/* Uncancelable write. */ -#define write_not_cancel(fd, buf, n) \ - __write_nocancel (fd, buf, n) - -/* Uncancelable writev. */ -#define writev_not_cancel_no_status(fd, iov, n) \ - (void) ({ INTERNAL_SYSCALL_DECL (err); \ - INTERNAL_SYSCALL (writev, err, 3, (fd), (iov), (n)); }) - -/* Uncancelable fcntl. */ -#define fcntl_not_cancel(fd, cmd, val) \ - __fcntl_nocancel (fd, cmd, val) - -/* Uncancelable waitpid. */ -#define __waitpid_nocancel(pid, stat_loc, options) \ - INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL) -#define waitpid_not_cancel(pid, stat_loc, options) \ - __waitpid_nocancel(pid, stat_loc, options) - -/* Uncancelable pause. */ -#define pause_not_cancel() \ - ({ sigset_t set; \ - int __rc = INLINE_SYSCALL (rt_sigprocmask, 4, SIG_BLOCK, NULL, &set, \ - _NSIG / 8); \ - if (__rc == 0) \ - __rc = INLINE_SYSCALL (rt_sigsuspend, 2, &set, _NSIG / 8); \ - __rc; \ - }) - -/* Uncancelable nanosleep. */ -#define nanosleep_not_cancel(requested_time, remaining) \ - INLINE_SYSCALL (nanosleep, 2, requested_time, remaining) - -/* Uncancelable sigsuspend. */ -#define sigsuspend_not_cancel(set) \ - INLINE_SYSCALL (rt_sigsuspend, 2, set, _NSIG / 8) - -#endif /* NOT_CANCEL_H */ diff --git a/sysdeps/unix/sysv/linux/nptl-signals.h b/sysdeps/unix/sysv/linux/nptl-signals.h deleted file mode 100644 index f30c597c0e..0000000000 --- a/sysdeps/unix/sysv/linux/nptl-signals.h +++ /dev/null @@ -1,85 +0,0 @@ -/* Special use of signals in NPTL internals. Linux version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* The signal used for asynchronous cancelation. */ -#define SIGCANCEL __SIGRTMIN - - -/* Signal needed for the kernel-supported POSIX timer implementation. - We can reuse the cancellation signal since we can distinguish - cancellation from timer expirations. */ -#define SIGTIMER SIGCANCEL - - -/* Signal used to implement the setuid et.al. functions. */ -#define SIGSETXID (__SIGRTMIN + 1) - - -/* Return is sig is used internally. */ -static inline int -__nptl_is_internal_signal (int sig) -{ - return (sig == SIGCANCEL) || (sig == SIGTIMER) || (sig == SIGSETXID); -} - -/* Remove internal glibc signal from the mask. */ -static inline void -__nptl_clear_internal_signals (sigset_t *set) -{ - __sigdelset (set, SIGCANCEL); - __sigdelset (set, SIGTIMER); - __sigdelset (set, SIGSETXID); -} - -#define SIGALL_SET \ - ((__sigset_t) { .__val = {[0 ... _SIGSET_NWORDS-1 ] = -1 } }) - -/* Block all signals, including internal glibc ones. */ -static inline int -__libc_signal_block_all (sigset_t *set) -{ - INTERNAL_SYSCALL_DECL (err); - return INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_BLOCK, &SIGALL_SET, - set, _NSIG / 8); -} - -/* Block all application signals (excluding internal glibc ones). */ -static inline int -__libc_signal_block_app (sigset_t *set) -{ - sigset_t allset = SIGALL_SET; - __nptl_clear_internal_signals (&allset); - INTERNAL_SYSCALL_DECL (err); - return INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_BLOCK, &allset, set, - _NSIG / 8); -} - -/* Restore current process signal mask. */ -static inline int -__libc_signal_restore_set (const sigset_t *set) -{ - INTERNAL_SYSCALL_DECL (err); - return INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, set, NULL, - _NSIG / 8); -} - -/* Used to communicate with signal handler. */ -extern struct xid_command *__xidcmd attribute_hidden; diff --git a/sysdeps/unix/sysv/linux/nscd_setup_thread.c b/sysdeps/unix/sysv/linux/nscd_setup_thread.c deleted file mode 100644 index 0c5694dc15..0000000000 --- a/sysdeps/unix/sysv/linux/nscd_setup_thread.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Setup of nscd worker threads. Linux verison. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2004. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#include -#include -#include -#include - - -int -setup_thread (struct database_dyn *db) -{ -#ifdef __NR_set_tid_address - /* Only supported when NPTL is used. */ - char buf[100]; - if (confstr (_CS_GNU_LIBPTHREAD_VERSION, buf, sizeof (buf)) >= sizeof (buf) - || strncmp (buf, "NPTL", 4) != 0) - return 0; - - /* Do not try this at home, kids. We play with the SETTID address - even thought the process is multi-threaded. This can only work - since none of the threads ever terminates. */ - INTERNAL_SYSCALL_DECL (err); - int r = INTERNAL_SYSCALL (set_tid_address, err, 1, - &db->head->nscd_certainly_running); - if (!INTERNAL_SYSCALL_ERROR_P (r, err)) - /* We know the kernel can reset this field when nscd terminates. - So, set the field to a nonzero value which indicates that nscd - is certainly running and clients can skip the test. */ - return db->head->nscd_certainly_running = 1; -#endif - - return 0; -} diff --git a/sysdeps/unix/sysv/linux/ntp_gettime.c b/sysdeps/unix/sysv/linux/ntp_gettime.c deleted file mode 100644 index 915b099dc5..0000000000 --- a/sysdeps/unix/sysv/linux/ntp_gettime.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define ntp_gettime ntp_gettime_redirect - -#include - -#undef ntp_gettime - -#ifndef MOD_OFFSET -# define modes mode -#endif - - -int -ntp_gettime (struct ntptimeval *ntv) -{ - struct timex tntx; - int result; - - tntx.modes = 0; - result = __adjtimex (&tntx); - ntv->time = tntx.time; - ntv->maxerror = tntx.maxerror; - ntv->esterror = tntx.esterror; - return result; -} diff --git a/sysdeps/unix/sysv/linux/ntp_gettimex.c b/sysdeps/unix/sysv/linux/ntp_gettimex.c deleted file mode 100644 index 8ac180163d..0000000000 --- a/sysdeps/unix/sysv/linux/ntp_gettimex.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef MOD_OFFSET -# define modes mode -#endif - - -int -ntp_gettimex (struct ntptimeval *ntv) -{ - struct timex tntx; - int result; - - tntx.modes = 0; - result = __adjtimex (&tntx); - ntv->time = tntx.time; - ntv->maxerror = tntx.maxerror; - ntv->esterror = tntx.esterror; - ntv->tai = tntx.tai; - ntv->__glibc_reserved1 = 0; - ntv->__glibc_reserved2 = 0; - ntv->__glibc_reserved3 = 0; - ntv->__glibc_reserved4 = 0; - return result; -} diff --git a/sysdeps/unix/sysv/linux/open.c b/sysdeps/unix/sysv/linux/open.c deleted file mode 100644 index b3912d5554..0000000000 --- a/sysdeps/unix/sysv/linux/open.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#include - -#ifndef __OFF_T_MATCHES_OFF64_T - -/* Open FILE with access OFLAG. If O_CREAT or O_TMPFILE is in OFLAG, - a third argument is the file protection. */ -int -__libc_open (const char *file, int oflag, ...) -{ - int mode = 0; - - if (__OPEN_NEEDS_MODE (oflag)) - { - va_list arg; - va_start (arg, oflag); - mode = va_arg (arg, int); - va_end (arg); - } - - return SYSCALL_CANCEL (openat, AT_FDCWD, file, oflag, mode); -} -libc_hidden_def (__libc_open) - -weak_alias (__libc_open, __open) -libc_hidden_weak (__open) -weak_alias (__libc_open, open) - -#endif diff --git a/sysdeps/unix/sysv/linux/open64.c b/sysdeps/unix/sysv/linux/open64.c deleted file mode 100644 index fcac984d22..0000000000 --- a/sysdeps/unix/sysv/linux/open64.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include - -/* Open FILE with access OFLAG. If O_CREAT or O_TMPFILE is in OFLAG, - a third argument is the file protection. */ -int -__libc_open64 (const char *file, int oflag, ...) -{ - int mode = 0; - - if (__OPEN_NEEDS_MODE (oflag)) - { - va_list arg; - va_start (arg, oflag); - mode = va_arg (arg, int); - va_end (arg); - } - -#ifdef __OFF_T_MATCHES_OFF64_T -# define EXTRA_OPEN_FLAGS 0 -#else -# define EXTRA_OPEN_FLAGS O_LARGEFILE -#endif - - return SYSCALL_CANCEL (openat, AT_FDCWD, file, oflag | EXTRA_OPEN_FLAGS, - mode); -} - -strong_alias (__libc_open64, __open64) -libc_hidden_weak (__open64) -weak_alias (__libc_open64, open64) - -#ifdef __OFF_T_MATCHES_OFF64_T -strong_alias (__libc_open64, __libc_open) -strong_alias (__libc_open64, __open) -libc_hidden_weak (__open) -weak_alias (__libc_open64, open) -#endif diff --git a/sysdeps/unix/sysv/linux/open_by_handle_at.c b/sysdeps/unix/sysv/linux/open_by_handle_at.c deleted file mode 100644 index e69f041280..0000000000 --- a/sysdeps/unix/sysv/linux/open_by_handle_at.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Obtain handle for an open file via a handle. Linux implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -open_by_handle_at (int mount_fd, struct file_handle *handle, int flags) -{ -#ifdef __NR_open_by_handle_at - return SYSCALL_CANCEL (open_by_handle_at, mount_fd, handle, flags); -#else - __set_errno (ENOSYS); - return -1; -#endif -} - -#ifndef __NR_open_by_handle_at -stub_warning (open_by_handle_at) -#endif diff --git a/sysdeps/unix/sysv/linux/openat.c b/sysdeps/unix/sysv/linux/openat.c deleted file mode 100644 index 2c620d81cc..0000000000 --- a/sysdeps/unix/sysv/linux/openat.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#ifndef OPENAT -# define OPENAT openat -#endif - -#define UNDERIZE(name) UNDERIZE_1 (name) -#define UNDERIZE_1(name) __##name -#define __OPENAT UNDERIZE (OPENAT) - - -/* Open FILE with access OFLAG. Interpret relative paths relative to - the directory associated with FD. If OFLAG includes O_CREAT or - O_TMPFILE, a fourth argument is the file protection. */ -int -__OPENAT (int fd, const char *file, int oflag, ...) -{ - mode_t mode = 0; - if (__OPEN_NEEDS_MODE (oflag)) - { - va_list arg; - va_start (arg, oflag); - mode = va_arg (arg, mode_t); - va_end (arg); - } - - /* We have to add the O_LARGEFILE flag for openat64. */ -#ifdef MORE_OFLAGS - oflag |= MORE_OFLAGS; -#endif - - return SYSCALL_CANCEL (openat, fd, file, oflag, mode); -} -libc_hidden_def (__OPENAT) -weak_alias (__OPENAT, OPENAT) diff --git a/sysdeps/unix/sysv/linux/openat64.c b/sysdeps/unix/sysv/linux/openat64.c deleted file mode 100644 index 9e7a2b3737..0000000000 --- a/sysdeps/unix/sysv/linux/openat64.c +++ /dev/null @@ -1,4 +0,0 @@ -#define OPENAT openat64 -#define MORE_OFLAGS O_LARGEFILE - -#include "openat.c" diff --git a/sysdeps/unix/sysv/linux/opendir.c b/sysdeps/unix/sysv/linux/opendir.c deleted file mode 100644 index 20bcdfde8e..0000000000 --- a/sysdeps/unix/sysv/linux/opendir.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define O_DIRECTORY_WORKS 1 - -#include diff --git a/sysdeps/unix/sysv/linux/opensock.c b/sysdeps/unix/sysv/linux/opensock.c deleted file mode 100644 index b8fd27f863..0000000000 --- a/sysdeps/unix/sysv/linux/opensock.c +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Return a socket of any type. The socket can be used in subsequent - ioctl calls to talk to the kernel. */ -int internal_function -__opensock (void) -{ - static int last_family; /* Available socket family we will use. */ - static int last_type; - static const struct - { - int family; - const char procname[15]; - } afs[] = - { - { AF_UNIX, "net/unix" }, - { AF_INET, "" }, - { AF_INET6, "net/if_inet6" }, - { AF_AX25, "net/ax25" }, - { AF_NETROM, "net/nr" }, - { AF_ROSE, "net/rose" }, - { AF_IPX, "net/ipx" }, - { AF_APPLETALK, "net/appletalk" }, - { AF_ECONET, "sys/net/econet" }, - { AF_ASH, "sys/net/ash" }, - { AF_X25, "net/x25" }, -#ifdef NEED_AF_IUCV - { AF_IUCV, "net/iucv" } -#endif - }; -#define nafs (sizeof (afs) / sizeof (afs[0])) - char fname[sizeof "/proc/" + 14]; - int result; - int has_proc; - size_t cnt; - - /* We already know which family to use from the last call. Use it - again. */ - if (last_family != 0) - { - assert (last_type != 0); - - result = __socket (last_family, last_type | SOCK_CLOEXEC, 0); - if (result != -1 || errno != EAFNOSUPPORT) - /* Maybe the socket type isn't supported anymore (module is - unloaded). In this case again try to find the type. */ - return result; - - /* Reset the values. They seem not valid anymore. */ - last_family = 0; - last_type = 0; - } - - /* Check whether the /proc filesystem is available. */ - has_proc = __access ("/proc/net", R_OK) != -1; - strcpy (fname, "/proc/"); - - /* Iterate over the interface families and find one which is - available. */ - for (cnt = 0; cnt < nafs; ++cnt) - { - int type = SOCK_DGRAM; - - if (has_proc && afs[cnt].procname[0] != '\0') - { - strcpy (fname + 6, afs[cnt].procname); - if (__access (fname, R_OK) == -1) - /* The /proc entry is not available. I.e., we cannot - create a socket of this type (without loading the - module). Don't look for it since this might trigger - loading the module. */ - continue; - } - - if (afs[cnt].family == AF_NETROM || afs[cnt].family == AF_X25) - type = SOCK_SEQPACKET; - - result = __socket (afs[cnt].family, type | SOCK_CLOEXEC, 0); - if (result != -1) - { - /* Found an available family. */ - last_type = type; - last_family = afs[cnt].family; - return result; - } - } - - /* None of the protocol families is available. It is unclear what kind - of error is returned. ENOENT seems like a reasonable choice. */ - __set_errno (ENOENT); - return -1; -} diff --git a/sysdeps/unix/sysv/linux/pathconf.c b/sysdeps/unix/sysv/linux/pathconf.c deleted file mode 100644 index 01d8c2bedd..0000000000 --- a/sysdeps/unix/sysv/linux/pathconf.c +++ /dev/null @@ -1,293 +0,0 @@ -/* Get file-specific information about a file. Linux version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#include "pathconf.h" -#include "linux_fsinfo.h" -#include - -static long int posix_pathconf (const char *file, int name); - -/* Define this first, so it can be inlined. */ -#define __pathconf static posix_pathconf -#include - - -/* Get file-specific information about FILE. */ -long int -__pathconf (const char *file, int name) -{ - struct statfs fsbuf; - - switch (name) - { - case _PC_LINK_MAX: - return __statfs_link_max (__statfs (file, &fsbuf), &fsbuf, file, -1); - - case _PC_FILESIZEBITS: - return __statfs_filesize_max (__statfs (file, &fsbuf), &fsbuf); - - case _PC_2_SYMLINKS: - return __statfs_symlinks (__statfs (file, &fsbuf), &fsbuf); - - case _PC_CHOWN_RESTRICTED: - return __statfs_chown_restricted (__statfs (file, &fsbuf), &fsbuf); - - default: - return posix_pathconf (file, name); - } -} - - -static long int -distinguish_extX (const struct statfs *fsbuf, const char *file, int fd) -{ - char buf[64]; - char path[PATH_MAX]; - struct stat64 st; - - if ((file == NULL ? fstat64 (fd, &st) : stat64 (file, &st)) != 0) - /* Strange. The statfd call worked, but stat fails. Default to - the more pessimistic value. */ - return EXT2_LINK_MAX; - - __snprintf (buf, sizeof (buf), "/sys/dev/block/%u:%u", - gnu_dev_major (st.st_dev), gnu_dev_minor (st.st_dev)); - - ssize_t n = __readlink (buf, path, sizeof (path)); - if (n != -1 && n < sizeof (path)) - { - path[n] = '\0'; - char *base = strdupa (__basename (path)); - __snprintf (path, sizeof (path), "/sys/fs/ext4/%s", base); - - return __access (path, F_OK) == 0 ? EXT4_LINK_MAX : EXT2_LINK_MAX; - } - - /* XXX Is there a better way to distinguish ext2/3 from ext4 than - iterating over the mounted filesystems and compare the device - numbers? */ - FILE *mtab = __setmntent ("/proc/mounts", "r"); - if (mtab == NULL) - mtab = __setmntent (_PATH_MOUNTED, "r"); - - /* By default be conservative. */ - long int result = EXT2_LINK_MAX; - if (mtab != NULL) - { - struct mntent mntbuf; - char tmpbuf[1024]; - - /* No locking needed. */ - (void) __fsetlocking (mtab, FSETLOCKING_BYCALLER); - - while (__getmntent_r (mtab, &mntbuf, tmpbuf, sizeof (tmpbuf))) - { - if (strcmp (mntbuf.mnt_type, "ext2") != 0 - && strcmp (mntbuf.mnt_type, "ext3") != 0 - && strcmp (mntbuf.mnt_type, "ext4") != 0) - continue; - - struct stat64 fsst; - if (stat64 (mntbuf.mnt_dir, &fsst) >= 0 - && st.st_dev == fsst.st_dev) - { - if (strcmp (mntbuf.mnt_type, "ext4") == 0) - result = EXT4_LINK_MAX; - break; - } - } - - /* Close the file. */ - __endmntent (mtab); - } - - return result; -} - - -/* Used like: return statfs_link_max (__statfs (name, &buf), &buf); */ -long int -__statfs_link_max (int result, const struct statfs *fsbuf, const char *file, - int fd) -{ - if (result < 0) - { - if (errno == ENOSYS) - /* Not possible, return the default value. */ - return LINUX_LINK_MAX; - - /* Some error occured. */ - return -1; - } - - switch (fsbuf->f_type) - { - case EXT2_SUPER_MAGIC: - /* Unfortunately the kernel does not return a different magic number - for ext4. This would be necessary to easily detect etx4 since it - has a different LINK_MAX value. Therefore we have to find it out - the hard way. */ - return distinguish_extX (fsbuf, file, fd); - - case F2FS_SUPER_MAGIC: - return F2FS_LINK_MAX; - - case MINIX_SUPER_MAGIC: - case MINIX_SUPER_MAGIC2: - return MINIX_LINK_MAX; - - case MINIX2_SUPER_MAGIC: - case MINIX2_SUPER_MAGIC2: - return MINIX2_LINK_MAX; - - case XENIX_SUPER_MAGIC: - return XENIX_LINK_MAX; - - case SYSV4_SUPER_MAGIC: - case SYSV2_SUPER_MAGIC: - return SYSV_LINK_MAX; - - case COH_SUPER_MAGIC: - return COH_LINK_MAX; - - case UFS_MAGIC: - case UFS_CIGAM: - return UFS_LINK_MAX; - - case REISERFS_SUPER_MAGIC: - return REISERFS_LINK_MAX; - - case XFS_SUPER_MAGIC: - return XFS_LINK_MAX; - - case LUSTRE_SUPER_MAGIC: - return LUSTRE_LINK_MAX; - - default: - return LINUX_LINK_MAX; - } -} - - -/* Used like: return statfs_filesize_max (__statfs (name, &buf), &buf); */ -long int -__statfs_filesize_max (int result, const struct statfs *fsbuf) -{ - if (result < 0) - { - if (errno == ENOSYS) - /* Not possible, return the default value. */ - return 32; - - /* Some error occured. */ - return -1; - } - - switch (fsbuf->f_type) - { - case F2FS_SUPER_MAGIC: - return 256; - - case BTRFS_SUPER_MAGIC: - return 255; - - case EXT2_SUPER_MAGIC: - case UFS_MAGIC: - case UFS_CIGAM: - case REISERFS_SUPER_MAGIC: - case XFS_SUPER_MAGIC: - case SMB_SUPER_MAGIC: - case NTFS_SUPER_MAGIC: - case UDF_SUPER_MAGIC: - case JFS_SUPER_MAGIC: - case VXFS_SUPER_MAGIC: - case CGROUP_SUPER_MAGIC: - case LUSTRE_SUPER_MAGIC: - return 64; - - case MSDOS_SUPER_MAGIC: - case JFFS_SUPER_MAGIC: - case JFFS2_SUPER_MAGIC: - case NCP_SUPER_MAGIC: - case ROMFS_SUPER_MAGIC: - return 32; - - default: - return 32; - } -} - - -/* Used like: return statfs_link_max (__statfs (name, &buf), &buf); */ -long int -__statfs_symlinks (int result, const struct statfs *fsbuf) -{ - if (result < 0) - { - if (errno == ENOSYS) - /* Not possible, return the default value. */ - return 1; - - /* Some error occured. */ - return -1; - } - - switch (fsbuf->f_type) - { - case ADFS_SUPER_MAGIC: - case BFS_MAGIC: - case CRAMFS_MAGIC: - case DEVPTS_SUPER_MAGIC: - case EFS_SUPER_MAGIC: - case EFS_MAGIC: - case MSDOS_SUPER_MAGIC: - case NTFS_SUPER_MAGIC: - case QNX4_SUPER_MAGIC: - case ROMFS_SUPER_MAGIC: - /* No symlink support. */ - return 0; - - default: - return 1; - } -} - - -/* Used like: return __statfs_chown_restricted (__statfs (name, &buf), &buf);*/ -long int -__statfs_chown_restricted (int result, const struct statfs *fsbuf) -{ - if (result < 0) - { - if (errno == ENOSYS) - /* Not possible, return the default value. */ - return 1; - - /* Some error occured. */ - return -1; - } - - return 1; -} diff --git a/sysdeps/unix/sysv/linux/pathconf.h b/sysdeps/unix/sysv/linux/pathconf.h deleted file mode 100644 index 5de2915f40..0000000000 --- a/sysdeps/unix/sysv/linux/pathconf.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Common parts of Linux implementation of pathconf and fpathconf. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -/* Used like: return __statfs_link_max (__statfs (name, &buf), &buf, - name, -1); */ -extern long int __statfs_link_max (int result, const struct statfs *fsbuf, - const char *file, int fd); - - -/* Used like: return __statfs_filesize_max (__statfs (name, &buf), &buf); */ -extern long int __statfs_filesize_max (int result, const struct statfs *fsbuf); - - -/* Used like: return __statfs_link_max (__statfs (name, &buf), &buf); */ -extern long int __statfs_symlinks (int result, const struct statfs *fsbuf); - - -/* Used like: return __statfs_chown_restricted (__statfs (name, &buf), &buf);*/ -extern long int __statfs_chown_restricted (int result, - const struct statfs *fsbuf); diff --git a/sysdeps/unix/sysv/linux/paths.h b/sysdeps/unix/sysv/linux/paths.h deleted file mode 100644 index 1342ab3a96..0000000000 --- a/sysdeps/unix/sysv/linux/paths.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 1989, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)paths.h 8.1 (Berkeley) 6/2/93 - */ - -#ifndef _PATHS_H_ -#define _PATHS_H_ - -/* Default search path. */ -#define _PATH_DEFPATH "/usr/bin:/bin" -/* All standard utilities path. */ -#define _PATH_STDPATH \ - "/usr/bin:/bin:/usr/sbin:/sbin" - -#define _PATH_BSHELL "/bin/sh" -#define _PATH_CONSOLE "/dev/console" -#define _PATH_CSHELL "/bin/csh" -#define _PATH_DEVDB "/var/run/dev.db" -#define _PATH_DEVNULL "/dev/null" -#define _PATH_DRUM "/dev/drum" -#define _PATH_GSHADOW "/etc/gshadow" -#define _PATH_KLOG "/proc/kmsg" -#define _PATH_KMEM "/dev/kmem" -#define _PATH_LASTLOG "/var/log/lastlog" -#define _PATH_MAILDIR "/var/mail" -#define _PATH_MAN "/usr/share/man" -#define _PATH_MEM "/dev/mem" -#define _PATH_MNTTAB "/etc/fstab" -#define _PATH_MOUNTED "/etc/mtab" -#define _PATH_NOLOGIN "/etc/nologin" -#define _PATH_PRESERVE "/var/lib" -#define _PATH_RWHODIR "/var/spool/rwho" -#define _PATH_SENDMAIL "/usr/sbin/sendmail" -#define _PATH_SHADOW "/etc/shadow" -#define _PATH_SHELLS "/etc/shells" -#define _PATH_TTY "/dev/tty" -#define _PATH_UNIX "/boot/vmlinux" -#define _PATH_UTMP "/var/run/utmp" -#define _PATH_VI "/usr/bin/vi" -#define _PATH_WTMP "/var/log/wtmp" - -/* Provide trailing slash, since mostly used for building pathnames. */ -#define _PATH_DEV "/dev/" -#define _PATH_TMP "/tmp/" -#define _PATH_VARDB "/var/db/" -#define _PATH_VARRUN "/var/run/" -#define _PATH_VARTMP "/var/tmp/" - -#endif /* !_PATHS_H_ */ diff --git a/sysdeps/unix/sysv/linux/pause.c b/sysdeps/unix/sysv/linux/pause.c deleted file mode 100644 index 4ccce9ebd8..0000000000 --- a/sysdeps/unix/sysv/linux/pause.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Linux pause syscall implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* Suspend the process until a signal arrives. - This always returns -1 and sets errno to EINTR. */ - -int -__libc_pause (void) -{ -#ifdef __NR_pause - return SYSCALL_CANCEL (pause); -#else - return SYSCALL_CANCEL (ppoll, NULL, 0, NULL, NULL); -#endif -} -weak_alias (__libc_pause, pause) diff --git a/sysdeps/unix/sysv/linux/personality.c b/sysdeps/unix/sysv/linux/personality.c deleted file mode 100644 index 6913a2bc62..0000000000 --- a/sysdeps/unix/sysv/linux/personality.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -extern __typeof (personality) __personality; - -int -__personality (unsigned long persona) -{ -#ifdef PERSONALITY_TRUNCATE_ARGUMENT - /* Starting with kernel commit v2.6.21-3117-g97dc32c, the type of - task_struct->pesonality is "unsigned int". - Starting with kernel commit v2.6.35-rc1-372-g485d527, the personality - syscall accepts "unsigned int" instead of "long unsigned int". - Inbetween, a personality argument that does not fit into "unsigned int" - would result to system call returning -EINVAL. - We explicitly truncate the personality argument to "unsigned int" - to eliminate the uncertainty. */ - persona = (unsigned int) persona; -#endif - - INTERNAL_SYSCALL_DECL (err); - long ret = INTERNAL_SYSCALL (personality, err, 1, persona); - - /* Starting with kernel commit v2.6.29-6609-g11d06b2, the personality syscall - never fails. However, 32-bit kernels might flag valid values as errors, so - we need to reverse the error setting. We can't use the raw result as some - arches split the return/error values. */ - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (ret, err))) - ret = -INTERNAL_SYSCALL_ERRNO (ret, err); - return ret; -} -weak_alias (__personality, personality) diff --git a/sysdeps/unix/sysv/linux/poll.c b/sysdeps/unix/sysv/linux/poll.c deleted file mode 100644 index 5a781ddf48..0000000000 --- a/sysdeps/unix/sysv/linux/poll.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Linux poll implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -#include -#include - -int -__poll (struct pollfd *fds, nfds_t nfds, int timeout) -{ -#ifdef __NR_poll - return SYSCALL_CANCEL (poll, fds, nfds, timeout); -#else - struct timespec timeout_ts; - struct timespec *timeout_ts_p = NULL; - - if (timeout >= 0) - { - timeout_ts.tv_sec = timeout / 1000; - timeout_ts.tv_nsec = (timeout % 1000) * 1000000; - timeout_ts_p = &timeout_ts; - } - - return SYSCALL_CANCEL (ppoll, fds, nfds, timeout_ts_p, NULL, 0); -#endif -} -libc_hidden_def (__poll) -weak_alias (__poll, poll) -strong_alias (__poll, __libc_poll) diff --git a/sysdeps/unix/sysv/linux/posix_fadvise.c b/sysdeps/unix/sysv/linux/posix_fadvise.c deleted file mode 100644 index 222ac978e2..0000000000 --- a/sysdeps/unix/sysv/linux/posix_fadvise.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Advice the system about the expected behaviour of the application with - respect to the file associated with FD. */ - -#ifndef __OFF_T_MATCHES_OFF64_T - -/* Default implementation will use __NR_fadvise64 with expected argument - positions (for instance i386 and powerpc32 that uses __ALIGNMENT_ARG). - - Second option will be used by arm which define __NR_arm_fadvise64_64 - (redefined to __NR_fadvise64_64 in kernel-features.h) that behaves as - __NR_fadvise64_64 (without the aligment argument required for the ABI). - - Third option will be used by both tile 32-bits and mips o32. Tile - will set __ASSUME_FADVISE64_64_NO_ALIGN to issue a 6 argument syscall, - while mips will use a 7 argument one with __NR_fadvise64. - - s390 implements fadvice64_64 using a specific struct with arguments - packed inside. This is the only implementation handled in arch-specific - code. */ - -int -posix_fadvise (int fd, off_t offset, off_t len, int advise) -{ - INTERNAL_SYSCALL_DECL (err); -# if defined (__NR_fadvise64) && !defined (__ASSUME_FADVISE64_AS_64_64) - int ret = INTERNAL_SYSCALL_CALL (fadvise64, err, fd, - __ALIGNMENT_ARG SYSCALL_LL (offset), - len, advise); -# else -# ifdef __ASSUME_FADVISE64_64_6ARG - int ret = INTERNAL_SYSCALL_CALL (fadvise64_64, err, fd, advise, - SYSCALL_LL (offset), SYSCALL_LL (len)); -# else - -# ifdef __ASSUME_FADVISE64_64_NO_ALIGN -# undef __ALIGNMENT_ARG -# define __ALIGNMENT_ARG -# endif - -# ifndef __NR_fadvise64_64 -# define __NR_fadvise64_64 __NR_fadvise64 -# endif - - int ret = INTERNAL_SYSCALL_CALL (fadvise64_64, err, fd, - __ALIGNMENT_ARG SYSCALL_LL (offset), - SYSCALL_LL (len), advise); -# endif -# endif - if (INTERNAL_SYSCALL_ERROR_P (ret, err)) - return INTERNAL_SYSCALL_ERRNO (ret, err); - return 0; -} -#endif /* __OFF_T_MATCHES_OFF64_T */ diff --git a/sysdeps/unix/sysv/linux/posix_fadvise64.c b/sysdeps/unix/sysv/linux/posix_fadvise64.c deleted file mode 100644 index aaee60add7..0000000000 --- a/sysdeps/unix/sysv/linux/posix_fadvise64.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise); - -/* Both arm and powerpc implements fadvise64_64 with last 'advise' argument - just after 'fd' to avoid the requirement of implementing 7-arg syscalls. - ARM also defines __NR_fadvise64_64 as __NR_arm_fadvise64_64. - - tile requires __ASSUME_ALIGNED_REGISTER_PAIRS but implements the 32-bit - fadvise64_64 without the padding 0 after fd. - - s390 implements fadvice64_64 using a specific struct with arguments - packed inside. This is the only implementation handled in arch-specific - code. */ - -#ifdef __ASSUME_FADVISE64_64_NO_ALIGN -# undef __ALIGNMENT_ARG -# define __ALIGNMENT_ARG -#endif - -#ifndef __NR_fadvise64_64 -# define __NR_fadvise64_64 __NR_fadvise64 -#endif - -/* Advice the system about the expected behaviour of the application with - respect to the file associated with FD. */ - -int -__posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise) -{ - INTERNAL_SYSCALL_DECL (err); -#ifdef __ASSUME_FADVISE64_64_6ARG - int ret = INTERNAL_SYSCALL_CALL (fadvise64_64, err, fd, advise, - SYSCALL_LL64 (offset), SYSCALL_LL64 (len)); -#else - int ret = INTERNAL_SYSCALL_CALL (fadvise64_64, err, fd, - __ALIGNMENT_ARG SYSCALL_LL64 (offset), - SYSCALL_LL64 (len), advise); -#endif - if (!INTERNAL_SYSCALL_ERROR_P (ret, err)) - return 0; - return INTERNAL_SYSCALL_ERRNO (ret, err); -} - -/* The type of the len argument was changed from size_t to off_t in - POSIX.1-2003 TC1. */ -#ifndef __OFF_T_MATCHES_OFF64_T -# if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) -int __posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise); - -int -attribute_compat_text_section -__posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise) -{ - return __posix_fadvise64_l64 (fd, offset, len, advise); -} - -versioned_symbol (libc, __posix_fadvise64_l64, posix_fadvise64, GLIBC_2_3_3); -compat_symbol (libc, __posix_fadvise64_l32, posix_fadvise64, GLIBC_2_2); -# else -weak_alias (__posix_fadvise64_l64, posix_fadvise64); -# endif -#else -weak_alias (__posix_fadvise64_l64, posix_fadvise64); -strong_alias (__posix_fadvise64_l64, posix_fadvise); -#endif diff --git a/sysdeps/unix/sysv/linux/posix_fallocate.c b/sysdeps/unix/sysv/linux/posix_fallocate.c deleted file mode 100644 index 257e1aad55..0000000000 --- a/sysdeps/unix/sysv/linux/posix_fallocate.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define posix_fallocate static internal_fallocate -#include -#undef posix_fallocate - -/* Reserve storage for the data of the file associated with FD. */ -int -posix_fallocate (int fd, __off_t offset, __off_t len) -{ - INTERNAL_SYSCALL_DECL (err); - int res = INTERNAL_SYSCALL_CALL (fallocate, err, fd, 0, - SYSCALL_LL (offset), SYSCALL_LL (len)); - if (! INTERNAL_SYSCALL_ERROR_P (res, err)) - return 0; - if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) - return INTERNAL_SYSCALL_ERRNO (res, err); - return internal_fallocate (fd, offset, len); -} diff --git a/sysdeps/unix/sysv/linux/posix_fallocate64.c b/sysdeps/unix/sysv/linux/posix_fallocate64.c deleted file mode 100644 index eb05f7c5d0..0000000000 --- a/sysdeps/unix/sysv/linux/posix_fallocate64.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -extern int __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len); -#define __posix_fallocate64_l64 static internal_fallocate64 -#include -#undef __posix_fallocate64_l64 - -/* Reserve storage for the data of the file associated with FD. */ -int -__posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len) -{ - INTERNAL_SYSCALL_DECL (err); -#ifdef INTERNAL_SYSCALL_TYPES - int res = INTERNAL_SYSCALL_TYPES (fallocate, err, 4, int, fd, - int, 0, off_t, offset, - off_t, len); -#else - int res = INTERNAL_SYSCALL_CALL (fallocate, err, fd, 0, - SYSCALL_LL64 (offset), SYSCALL_LL64 (len)); -#endif - if (! INTERNAL_SYSCALL_ERROR_P (res, err)) - return 0; - if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) - return INTERNAL_SYSCALL_ERRNO (res, err); - return internal_fallocate64 (fd, offset, len); -} diff --git a/sysdeps/unix/sysv/linux/posix_madvise.c b/sysdeps/unix/sysv/linux/posix_madvise.c deleted file mode 100644 index 87b5c17557..0000000000 --- a/sysdeps/unix/sysv/linux/posix_madvise.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -int -posix_madvise (void *addr, size_t len, int advice) -{ - /* We have one problem: the kernel's MADV_DONTNEED does not - correspond to POSIX's POSIX_MADV_DONTNEED. The former simply - discards changes made to the memory without writing it back to - disk, if this would be necessary. The POSIX behavior does not - allow this. There is no functionality mapping the POSIX behavior - so far so we ignore that advice for now. */ - if (advice == POSIX_MADV_DONTNEED) - return 0; - - INTERNAL_SYSCALL_DECL (err); - int result = INTERNAL_SYSCALL (madvise, err, 3, addr, len, advice); - return INTERNAL_SYSCALL_ERRNO (result, err); -} diff --git a/sysdeps/unix/sysv/linux/powerpc/Implies b/sysdeps/unix/sysv/linux/powerpc/Implies deleted file mode 100644 index 466b7f4b4a..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/nptl diff --git a/sysdeps/unix/sysv/linux/powerpc/Makefile b/sysdeps/unix/sysv/linux/powerpc/Makefile deleted file mode 100644 index 2cfb46eca3..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -abi-variants := 32 64-v1 64-v2 -abi-32-options := -U__powerpc64__ -abi-32-condition := __WORDSIZE == 32 -abi-64-v1-options := -D__powerpc64__ -U_CALL_ELF -D_CALL_ELF=1 -abi-64-v1-condition := __WORDSIZE == 64 && _CALL_ELF != 2 -abi-64-v2-options := -D__powerpc64__ -U_CALL_ELF -D_CALL_ELF=2 -abi-64-v2-condition := __WORDSIZE == 64 && _CALL_ELF == 2 - -ifeq ($(subdir),rt) -librt-routines += rt-sysdep -librt-shared-only-routines += rt-sysdep -endif - -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext_i.sym -endif - -ifeq ($(subdir),elf) -sysdep_routines += dl-vdso -ifeq ($(build-shared),yes) -# This is needed for DSO loading from static binaries. -sysdep-dl-routines += dl-static -endif -# Otherwise tst-tls-dlinfo fails due to tst-tlsmod2.so using static tls. -LDFLAGS-tst-tlsmod2.so += -Wl,--no-tls-get-addr-optimize -endif - -ifeq ($(subdir),misc) -sysdep_headers += bits/ppc.h -sysdep_routines += get_timebase_freq -tests += test-gettimebasefreq -endif - -ifeq ($(subdir),nptl) -libpthread-routines += sysdep -libpthread-sysdep_routines += elision-lock elision-unlock elision-timed \ - elision-trylock -libpthread-shared-only-routines += sysdep -endif diff --git a/sysdeps/unix/sysv/linux/powerpc/Versions b/sysdeps/unix/sysv/linux/powerpc/Versions deleted file mode 100644 index 8ebeea15a1..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/Versions +++ /dev/null @@ -1,19 +0,0 @@ -ld { - GLIBC_PRIVATE { - # used for loading by static libraries - _dl_var_init; - } -} -libc { - GLIBC_PRIVATE { - __vdso_get_tbfreq; - __vdso_clock_gettime; - __vdso_clock_getres; - __vdso_getcpu; - __vdso_time; - } -} -libm { - GLIBC_2.19 { - } -} diff --git a/sysdeps/unix/sysv/linux/powerpc/arch-fork.h b/sysdeps/unix/sysv/linux/powerpc/arch-fork.h deleted file mode 100644 index 5f945378ee..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/arch-fork.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/environments.h b/sysdeps/unix/sysv/linux/powerpc/bits/environments.h deleted file mode 100644 index 475d5648d0..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/environments.h +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _UNISTD_H -# error "Never include this file directly. Use instead" -#endif - -#include - -/* This header should define the following symbols under the described - situations. A value `1' means that the model is always supported, - `-1' means it is never supported. Undefined means it cannot be - statically decided. - - _POSIX_V7_ILP32_OFF32 32bit int, long, pointers, and off_t type - _POSIX_V7_ILP32_OFFBIG 32bit int, long, and pointers and larger off_t type - - _POSIX_V7_LP64_OFF32 64bit long and pointers and 32bit off_t type - _POSIX_V7_LPBIG_OFFBIG 64bit long and pointers and large off_t type - - The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG, - _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32, - _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were - used in previous versions of the Unix standard and are available - only for compatibility. -*/ - -#if __WORDSIZE == 64 - -/* Environments with 32-bit wide pointers are optionally provided. - Therefore following macros aren't defined: - # undef _POSIX_V7_ILP32_OFF32 - # undef _POSIX_V7_ILP32_OFFBIG - # undef _POSIX_V6_ILP32_OFF32 - # undef _POSIX_V6_ILP32_OFFBIG - # undef _XBS5_ILP32_OFF32 - # undef _XBS5_ILP32_OFFBIG - and users need to check at runtime. */ - -/* We also have no use (for now) for an environment with bigger pointers - and offsets. */ -# define _POSIX_V7_LPBIG_OFFBIG -1 -# define _POSIX_V6_LPBIG_OFFBIG -1 -# define _XBS5_LPBIG_OFFBIG -1 - -/* By default we have 64-bit wide `long int', pointers and `off_t'. */ -# define _POSIX_V7_LP64_OFF64 1 -# define _POSIX_V6_LP64_OFF64 1 -# define _XBS5_LP64_OFF64 1 - -#else /* __WORDSIZE == 32 */ - -/* By default we have 32-bit wide `int', `long int', pointers and `off_t' - and all platforms support LFS. */ -# define _POSIX_V7_ILP32_OFF32 1 -# define _POSIX_V7_ILP32_OFFBIG 1 -# define _POSIX_V6_ILP32_OFF32 1 -# define _POSIX_V6_ILP32_OFFBIG 1 -# define _XBS5_ILP32_OFF32 1 -# define _XBS5_ILP32_OFFBIG 1 - -/* We optionally provide an environment with the above size but an 64-bit - side `off_t'. Therefore we don't define _POSIX_V7_ILP32_OFFBIG. */ - -/* Environments with 64-bit wide pointers can be provided, - so these macros aren't defined: - # undef _POSIX_V7_LP64_OFF64 - # undef _POSIX_V7_LPBIG_OFFBIG - # undef _POSIX_V6_LP64_OFF64 - # undef _POSIX_V6_LPBIG_OFFBIG - # undef _XBS5_LP64_OFF64 - # undef _XBS5_LPBIG_OFFBIG - and sysconf tests for it at runtime. */ - -#endif /* __WORDSIZE == 32 */ - -#define __ILP32_OFF32_CFLAGS "-m32" -#define __ILP32_OFFBIG_CFLAGS "-m32 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" -#define __ILP32_OFF32_LDFLAGS "-m32" -#define __ILP32_OFFBIG_LDFLAGS "-m32" -#define __LP64_OFF64_CFLAGS "-m64" -#define __LP64_OFF64_LDFLAGS "-m64" diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h b/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h deleted file mode 100644 index 48bb5adc03..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h +++ /dev/null @@ -1,62 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux/PowerPC. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -#include - -#define __O_DIRECTORY 040000 /* Must be a directory. */ -#define __O_NOFOLLOW 0100000 /* Do not follow links. */ -#define __O_DIRECT 0400000 /* Direct disk access. */ - -#if __WORDSIZE == 64 -/* Not necessary, files are always with 64bit off_t. */ -# define __O_LARGEFILE 0 -#else -# define __O_LARGEFILE 0200000 -#endif - -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#ifndef __USE_FILE_OFFSET64 - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/ioctl-types.h b/sysdeps/unix/sysv/linux/powerpc/bits/ioctl-types.h deleted file mode 100644 index b52e4c1403..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/ioctl-types.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Structure types for pre-termios terminal ioctls. Linux/powerpc version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IOCTL_H -# error "Never use directly; include instead." -#endif - -/* Get definition of constants for use with `ioctl'. */ -#include - - -struct winsize - { - unsigned short int ws_row; - unsigned short int ws_col; - unsigned short int ws_xpixel; - unsigned short int ws_ypixel; - }; - -#define NCC 10 -struct termio - { - unsigned short int c_iflag; /* input mode flags */ - unsigned short int c_oflag; /* output mode flags */ - unsigned short int c_cflag; /* control mode flags */ - unsigned short int c_lflag; /* local mode flags */ - unsigned char c_line; /* line discipline */ - unsigned char c_cc[NCC]; /* control characters */ -}; - -/* modem lines */ -#define TIOCM_LE 0x001 -#define TIOCM_DTR 0x002 -#define TIOCM_RTS 0x004 -#define TIOCM_ST 0x008 -#define TIOCM_SR 0x010 -#define TIOCM_CTS 0x020 -#define TIOCM_CAR 0x040 -#define TIOCM_RNG 0x080 -#define TIOCM_DSR 0x100 -#define TIOCM_CD TIOCM_CAR -#define TIOCM_RI TIOCM_RNG - -/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ - -/* line disciplines */ -#define N_TTY 0 -#define N_SLIP 1 -#define N_MOUSE 2 -#define N_PPP 3 -#define N_STRIP 4 -#define N_AX25 5 -#define N_X25 6 /* X.25 async */ -#define N_6PACK 7 -#define N_MASC 8 /* Mobitex module */ -#define N_R3964 9 /* Simatic R3964 module */ -#define N_PROFIBUS_FDL 10 /* Profibus */ -#define N_IRDA 11 /* Linux IR */ -#define N_SMSBLOCK 12 /* SMS block mode */ -#define N_HDLC 13 /* synchronous HDLC */ -#define N_SYNC_PPP 14 /* synchronous PPP */ -#define N_HCI 15 /* Bluetooth HCI UART */ diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/ipc.h b/sysdeps/unix/sysv/linux/powerpc/bits/ipc.h deleted file mode 100644 index bd8196967d..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/ipc.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IPC_H -# error "Never use directly; include instead." -#endif - -#include - -/* Mode bits for `msgget', `semget', and `shmget'. */ -#define IPC_CREAT 01000 /* Create key if key does not exist. */ -#define IPC_EXCL 02000 /* Fail if key exists. */ -#define IPC_NOWAIT 04000 /* Return error on wait. */ - -/* Control commands for `msgctl', `semctl', and `shmctl'. */ -#define IPC_RMID 0 /* Remove identifier. */ -#define IPC_SET 1 /* Set `ipc_perm' options. */ -#define IPC_STAT 2 /* Get `ipc_perm' options. */ -#ifdef __USE_GNU -# define IPC_INFO 3 /* See ipcs. */ -#endif - -/* Special key values. */ -#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ - - -/* Data structure used to pass permission information to IPC operations. */ -struct ipc_perm - { - __key_t __key; /* Key. */ - __uid_t uid; /* Owner's user ID. */ - __gid_t gid; /* Owner's group ID. */ - __uid_t cuid; /* Creator's user ID. */ - __gid_t cgid; /* Creator's group ID. */ - __mode_t mode; /* Read/write permission. */ - __uint32_t __seq; /* Sequence number. */ - __uint32_t __pad1; - __uint64_t __glibc_reserved1; - __uint64_t __glibc_reserved2; - }; diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h b/sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h deleted file mode 100644 index 12b2b767ae..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h +++ /dev/null @@ -1,100 +0,0 @@ -/* Minimum guaranteed maximum values for system limits. Linux/PPC version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -/* The kernel header pollutes the namespace with the NR_OPEN symbol - and defines LINK_MAX although filesystems have different maxima. A - similar thing is true for OPEN_MAX: the limit can be changed at - runtime and therefore the macro must not be defined. Remove this - after including the header if necessary. */ -#ifndef NR_OPEN -# define __undef_NR_OPEN -#endif -#ifndef LINK_MAX -# define __undef_LINK_MAX -#endif -#ifndef OPEN_MAX -# define __undef_OPEN_MAX -#endif -#ifndef ARG_MAX -# define __undef_ARG_MAX -#endif - -/* The kernel sources contain a file with all the needed information. */ -#include - -/* Have to remove NR_OPEN? */ -#ifdef __undef_NR_OPEN -# undef NR_OPEN -# undef __undef_NR_OPEN -#endif -/* Have to remove LINK_MAX? */ -#ifdef __undef_LINK_MAX -# undef LINK_MAX -# undef __undef_LINK_MAX -#endif -/* Have to remove OPEN_MAX? */ -#ifdef __undef_OPEN_MAX -# undef OPEN_MAX -# undef __undef_OPEN_MAX -#endif -/* Have to remove ARG_MAX? */ -#ifdef __undef_ARG_MAX -# undef ARG_MAX -# undef __undef_ARG_MAX -#endif - -/* The number of data keys per process. */ -#define _POSIX_THREAD_KEYS_MAX 128 -/* This is the value this implementation supports. */ -#define PTHREAD_KEYS_MAX 1024 - -/* Controlling the iterations of destructors for thread-specific data. */ -#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 -/* Number of iterations this implementation does. */ -#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS - -/* The number of threads per process. */ -#define _POSIX_THREAD_THREADS_MAX 64 -/* We have no predefined limit on the number of threads. */ -#undef PTHREAD_THREADS_MAX - -/* Maximum amount by which a process can descrease its asynchronous I/O - priority level. */ -#define AIO_PRIO_DELTA_MAX 20 - -/* Minimum size for a thread. At least two pages for systems with 64k - pages. */ -#define PTHREAD_STACK_MIN 131072 - -/* Maximum number of timer expiration overruns. */ -#define DELAYTIMER_MAX 2147483647 - -/* Maximum tty name length. */ -#define TTY_NAME_MAX 32 - -/* Maximum login name length. This is arbitrary. */ -#define LOGIN_NAME_MAX 256 - -/* Maximum host name length. */ -#define HOST_NAME_MAX 64 - -/* Maximum message queue priority level. */ -#define MQ_PRIO_MAX 32768 - -/* Maximum value the semaphore can have. */ -#define SEM_VALUE_MAX (2147483647) diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/mman.h b/sysdeps/unix/sysv/linux/powerpc/bits/mman.h deleted file mode 100644 index 53bc198d7b..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/mman.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/PowerPC version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - -#define PROT_SAO 0x10 /* Strong Access Ordering. */ - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */ -# define MAP_DENYWRITE 0x00800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x00080 /* Lock the mapping. */ -# define MAP_NORESERVE 0x00040 /* Don't check for reservations. */ -# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ -# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ -#endif - -/* Flags for `mlockall'. */ -#define MCL_CURRENT 0x2000 /* Lock all currently mapped pages. */ -#define MCL_FUTURE 0x4000 /* Lock all additions to address - space. */ -#define MCL_ONFAULT 0x8000 /* Lock all pages that are - faulted in. */ - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/msq.h b/sysdeps/unix/sysv/linux/powerpc/bits/msq.h deleted file mode 100644 index f056c99547..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/msq.h +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_MSG_H -# error "Never use directly; include instead." -#endif - -#include - -/* Define options for message queue functions. */ -#define MSG_NOERROR 010000 /* no error if message is too big */ -#ifdef __USE_GNU -# define MSG_EXCEPT 020000 /* recv any msg except of specified type */ -# define MSG_COPY 040000 /* copy (not remove) all queue messages */ -#endif - -/* Types used in the structure definition. */ -typedef unsigned long int msgqnum_t; -typedef unsigned long int msglen_t; - - -/* Structure of record for one message inside the kernel. - The type `struct msg' is opaque. */ -struct msqid_ds -{ - struct ipc_perm msg_perm; /* structure describing operation permission */ -#if __WORDSIZE == 32 - unsigned int __glibc_reserved1; -#endif - __time_t msg_stime; /* time of last msgsnd command */ -#if __WORDSIZE == 32 - unsigned int __glibc_reserved2; -#endif - __time_t msg_rtime; /* time of last msgrcv command */ -#if __WORDSIZE == 32 - unsigned int __glibc_reserved3; -#endif - __time_t msg_ctime; /* time of last change */ - unsigned long __msg_cbytes; /* current number of bytes on queue */ - msgqnum_t msg_qnum; /* number of messages currently on queue */ - msglen_t msg_qbytes; /* max number of bytes allowed on queue */ - __pid_t msg_lspid; /* pid of last msgsnd() */ - __pid_t msg_lrpid; /* pid of last msgrcv() */ - unsigned long __glibc_reserved4; - unsigned long __glibc_reserved5; -}; - -#ifdef __USE_MISC - -# define msg_cbytes __msg_cbytes - -/* ipcs ctl commands */ -# define MSG_STAT 11 -# define MSG_INFO 12 - -/* buffer for msgctl calls IPC_INFO, MSG_INFO */ -struct msginfo - { - int msgpool; - int msgmap; - int msgmax; - int msgmnb; - int msgmni; - int msgssz; - int msgtql; - unsigned short int msgseg; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/ppc.h b/sysdeps/unix/sysv/linux/powerpc/bits/ppc.h deleted file mode 100644 index 1d0a39737b..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/ppc.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Facilities specific to the PowerPC architecture on Linux - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_PPC_H -#define _BITS_PPC_H - -#ifndef _SYS_PLATFORM_PPC_H -# error "Never include this file directly; use instead." -#endif - -__BEGIN_DECLS - -/* Read the time base frequency. */ -extern uint64_t __ppc_get_timebase_freq (void); - -__END_DECLS - -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/sem.h b/sysdeps/unix/sysv/linux/powerpc/bits/sem.h deleted file mode 100644 index b5ba64c95c..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/sem.h +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SEM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Flags for `semop'. */ -#define SEM_UNDO 0x1000 /* undo the operation on exit */ - -/* Commands for `semctl'. */ -#define GETPID 11 /* get sempid */ -#define GETVAL 12 /* get semval */ -#define GETALL 13 /* get all semval's */ -#define GETNCNT 14 /* get semncnt */ -#define GETZCNT 15 /* get semzcnt */ -#define SETVAL 16 /* set semval */ -#define SETALL 17 /* set all semval's */ - - -/* Data structure describing a set of semaphores. */ -struct semid_ds -{ - struct ipc_perm sem_perm; /* operation permission struct */ -#if __WORDSIZE == 32 - unsigned int __glibc_reserved1; -#endif - __time_t sem_otime; /* last semop() time */ -#if __WORDSIZE == 32 - unsigned int __glibc_reserved2; -#endif - __time_t sem_ctime; /* last time changed by semctl() */ - unsigned long int sem_nsems; /* number of semaphores in set */ - unsigned long __glibc_reserved3; - unsigned long __glibc_reserved4; -}; - -/* The user should define a union like the following to use it for arguments - for `semctl'. - - union semun - { - int val; <= value for SETVAL - struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET - unsigned short int *array; <= array for GETALL & SETALL - struct seminfo *__buf; <= buffer for IPC_INFO - }; - - Previous versions of this file used to define this union but this is - incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether - one must define the union or not. */ -#define _SEM_SEMUN_UNDEFINED 1 - -#ifdef __USE_MISC - -/* ipcs ctl cmds */ -# define SEM_STAT 18 -# define SEM_INFO 19 - -struct seminfo -{ - int semmap; - int semmni; - int semmns; - int semmnu; - int semmsl; - int semopm; - int semume; - int semusz; - int semvmx; - int semaem; -}; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h b/sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h deleted file mode 100644 index 05e68d4342..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Machine-specific POSIX semaphore type layouts. PowerPC version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Paul Mackerras , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - -#include - -#if __WORDSIZE == 64 -# define __SIZEOF_SEM_T 32 -#else -# define __SIZEOF_SEM_T 16 -#endif - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/shm.h b/sysdeps/unix/sysv/linux/powerpc/bits/shm.h deleted file mode 100644 index 3812e73944..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/shm.h +++ /dev/null @@ -1,112 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SHM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from */ -#define SHM_W 0200 /* or S_IWUGO from */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ -#define SHM_EXEC 0100000 /* execution access */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -__BEGIN_DECLS - -/* Segment low boundary address multiple. */ -#define SHMLBA (__getpagesize ()) -extern int __getpagesize (void) __THROW __attribute__ ((__const__)); - - -/* Type to count number of attaches. */ -typedef unsigned long int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ -#if __WORDSIZE == 32 - unsigned int __glibc_reserved1; -#endif - __time_t shm_atime; /* time of last shmat() */ -#if __WORDSIZE == 32 - unsigned int __glibc_reserved2; -#endif - __time_t shm_dtime; /* time of last shmdt() */ -#if __WORDSIZE == 32 - unsigned int __glibc_reserved3; -#endif - __time_t shm_ctime; /* time of last change by shmctl() */ -#if __WORDSIZE == 32 - unsigned int __glibc_reserved4; -#endif - size_t shm_segsz; /* size of segment in bytes */ - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned long __glibc_reserved5; - unsigned long __glibc_reserved6; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - unsigned long int shmmax; - unsigned long int shmmin; - unsigned long int shmmni; - unsigned long int shmseg; - unsigned long int shmall; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - unsigned long int __glibc_reserved3; - unsigned long int __glibc_reserved4; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h b/sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h deleted file mode 100644 index 74670cb037..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h +++ /dev/null @@ -1,32 +0,0 @@ -/* sigstack, sigaltstack definitions. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SIGSTACK_H -#define _BITS_SIGSTACK_H 1 - -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H -# error "Never include this file directly. Use instead" -#endif - -/* Minimum stack size for a signal handler. */ -#define MINSIGSTKSZ 4096 - -/* System default stack size. */ -#define SIGSTKSZ 16384 - -#endif /* bits/sigstack.h */ diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/stat.h b/sysdeps/unix/sysv/linux/powerpc/bits/stat.h deleted file mode 100644 index e95a52822e..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/stat.h +++ /dev/null @@ -1,275 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STAT_H -#define _BITS_STAT_H 1 - -#include - -/* Versions of the `struct stat' data structure. */ -#define _STAT_VER_LINUX_OLD 1 -#define _STAT_VER_KERNEL 1 -#define _STAT_VER_SVR4 2 -#define _STAT_VER_LINUX 3 -#if __WORDSIZE == 32 -# define _STAT_VER _STAT_VER_LINUX -#else -# define _STAT_VER _STAT_VER_KERNEL -#endif - -/* Versions of the `xmknod' interface. */ -#define _MKNOD_VER_LINUX 1 -#define _MKNOD_VER_SVR4 2 -#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */ - - -#if __WORDSIZE == 32 - -struct stat - { - __dev_t st_dev; /* Device. */ -# ifndef __USE_FILE_OFFSET64 - unsigned short int __pad1; - __ino_t st_ino; /* File serial number. */ -# else - __ino64_t st_ino; /* File serial number. */ -# endif - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - unsigned short int __pad2; -# ifndef __USE_FILE_OFFSET64 - __off_t st_size; /* Size of file, in bytes. */ -# else - __off64_t st_size; /* Size of file, in bytes. */ -# endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - -# ifndef __USE_FILE_OFFSET64 - __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */ -# else - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -# endif -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; - }; - - -# ifdef __USE_LARGEFILE64 -struct stat64 - { - __dev_t st_dev; /* Device. */ - __ino64_t st_ino; /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - unsigned short int __pad2; - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; - }; -# endif /* __USE_LARGEFILE64 */ - -#else /* __WORDSIZE == 32 */ - -struct stat - { - __dev_t st_dev; /* Device. */ -# ifndef __USE_FILE_OFFSET64 - __ino_t st_ino; /* File serial number. */ -# else - __ino64_t st_ino; /* File serial number. */ -# endif - __nlink_t st_nlink; /* Link count. */ - __mode_t st_mode; /* File mode. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - int __pad2; - __dev_t st_rdev; /* Device number, if device. */ -# ifndef __USE_FILE_OFFSET64 - __off_t st_size; /* Size of file, in bytes. */ -# else - __off64_t st_size; /* Size of file, in bytes. */ -# endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - -# ifndef __USE_FILE_OFFSET64 - __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */ -# else - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -# endif -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; - unsigned long int __glibc_reserved6; - }; - -# ifdef __USE_LARGEFILE64 -struct stat64 - { - __dev_t st_dev; /* Device. */ - __ino64_t st_ino; /* File serial number. */ - __nlink_t st_nlink; /* Link count. */ - __mode_t st_mode; /* File mode. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - int __pad2; - __dev_t st_rdev; /* Device number, if device. */ - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; - unsigned long int __glibc_reserved6; - }; -# endif /* __USE_LARGEFILE64 */ -#endif - - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -/* Nanosecond resolution time values are supported. */ -#define _STATBUF_ST_NSEC - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFIFO 0010000 /* FIFO. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ - -/* POSIX.1b objects. Note that these macros always evaluate to zero. But - they do it by enforcing the correct use of the macros. */ -#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 0400 /* Read by owner. */ -#define __S_IWRITE 0200 /* Write by owner. */ -#define __S_IEXEC 0100 /* Execute by owner. */ - -#ifdef __USE_ATFILE -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) -#endif - -#endif /* bits/stat.h */ diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/termios.h b/sysdeps/unix/sysv/linux/powerpc/bits/termios.h deleted file mode 100644 index 4811486c64..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/termios.h +++ /dev/null @@ -1,279 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TERMIOS_H -# error "Never include directly; use instead." -#endif - -typedef unsigned char cc_t; -typedef unsigned int speed_t; -typedef unsigned int tcflag_t; - -/* - * termios type and macro definitions. Be careful about adding stuff - * to this file since it's used in GNU libc and there are strict rules - * concerning namespace pollution. - */ - -#define NCCS 32 -struct termios { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline (== c_cc[19]) */ - cc_t c_cc[NCCS]; /* control characters */ - speed_t c_ispeed; /* input speed */ - speed_t c_ospeed; /* output speed */ -#define _HAVE_STRUCT_TERMIOS_C_ISPEED 1 -#define _HAVE_STRUCT_TERMIOS_C_OSPEED 1 -}; - -/* c_cc characters */ -#define VINTR 0 -#define VQUIT 1 -#define VERASE 2 -#define VKILL 3 -#define VEOF 4 -#define VMIN 5 -#define VEOL 6 -#define VTIME 7 -#define VEOL2 8 -#define VSWTC 9 - -#define VWERASE 10 -#define VREPRINT 11 -#define VSUSP 12 -#define VSTART 13 -#define VSTOP 14 -#define VLNEXT 15 -#define VDISCARD 16 - -/* c_iflag bits */ -#define IGNBRK 0000001 -#define BRKINT 0000002 -#define IGNPAR 0000004 -#define PARMRK 0000010 -#define INPCK 0000020 -#define ISTRIP 0000040 -#define INLCR 0000100 -#define IGNCR 0000200 -#define ICRNL 0000400 -#define IXON 0001000 -#define IXOFF 0002000 -#define IXANY 0004000 -#define IUCLC 0010000 -#define IMAXBEL 0020000 -#define IUTF8 0040000 - -/* c_oflag bits */ -#define OPOST 0000001 -#define ONLCR 0000002 -#define OLCUC 0000004 - -#define OCRNL 0000010 -#define ONOCR 0000020 -#define ONLRET 0000040 - -#define OFILL 00000100 -#define OFDEL 00000200 -#if defined __USE_MISC || defined __USE_XOPEN -# define NLDLY 00001400 -# define NL0 00000000 -# define NL1 00000400 -# if defined __USE_MISC -# define NL2 00001000 -# define NL3 00001400 -# endif -# define TABDLY 00006000 -# define TAB0 00000000 -# define TAB1 00002000 -# define TAB2 00004000 -# define TAB3 00006000 -# define CRDLY 00030000 -# define CR0 00000000 -# define CR1 00010000 -# define CR2 00020000 -# define CR3 00030000 -# define FFDLY 00040000 -# define FF0 00000000 -# define FF1 00040000 -# define BSDLY 00100000 -# define BS0 00000000 -# define BS1 00100000 -#endif -#define VTDLY 00200000 -#define VT0 00000000 -#define VT1 00200000 - -#ifdef __USE_MISC -# define XTABS 00006000 -#endif - -/* c_cflag bit meaning */ -#ifdef __USE_MISC -# define CBAUD 0000377 -#endif -#define B0 0000000 /* hang up */ -#define B50 0000001 -#define B75 0000002 -#define B110 0000003 -#define B134 0000004 -#define B150 0000005 -#define B200 0000006 -#define B300 0000007 -#define B600 0000010 -#define B1200 0000011 -#define B1800 0000012 -#define B2400 0000013 -#define B4800 0000014 -#define B9600 0000015 -#define B19200 0000016 -#define B38400 0000017 -#ifdef __USE_MISC -# define EXTA B19200 -# define EXTB B38400 -# define CBAUDEX 0000020 -#endif -#define B57600 00020 -#define B115200 00021 -#define B230400 00022 -#define B460800 00023 -#define B500000 00024 -#define B576000 00025 -#define B921600 00026 -#define B1000000 00027 -#define B1152000 00030 -#define B1500000 00031 -#define B2000000 00032 -#define B2500000 00033 -#define B3000000 00034 -#define B3500000 00035 -#define B4000000 00036 -#define __MAX_BAUD B4000000 - -#define CSIZE 00001400 -#define CS5 00000000 -#define CS6 00000400 -#define CS7 00001000 -#define CS8 00001400 - -#define CSTOPB 00002000 -#define CREAD 00004000 -#define PARENB 00010000 -#define PARODD 00020000 -#define HUPCL 00040000 - -#define CLOCAL 00100000 -#ifdef __USE_MISC -# define CMSPAR 010000000000 /* mark or space (stick) parity */ -# define CRTSCTS 020000000000 /* flow control */ -#endif - -/* c_lflag bits */ -#define ISIG 0x00000080 -#define ICANON 0x00000100 -#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K) -# define XCASE 0x00004000 -#endif -#define ECHO 0x00000008 -#define ECHOE 0x00000002 -#define ECHOK 0x00000004 -#define ECHONL 0x00000010 -#define NOFLSH 0x80000000 -#define TOSTOP 0x00400000 -#ifdef __USE_MISC -# define ECHOCTL 0x00000040 -# define ECHOPRT 0x00000020 -# define ECHOKE 0x00000001 -# define FLUSHO 0x00800000 -# define PENDIN 0x20000000 -#endif -#define IEXTEN 0x00000400 -#ifdef __USE_MISC -# define EXTPROC 0x10000000 -#endif - -/* Values for the ACTION argument to `tcflow'. */ -#define TCOOFF 0 -#define TCOON 1 -#define TCIOFF 2 -#define TCION 3 - -/* Values for the QUEUE_SELECTOR argument to `tcflush'. */ -#define TCIFLUSH 0 -#define TCOFLUSH 1 -#define TCIOFLUSH 2 - -/* Values for the OPTIONAL_ACTIONS argument to `tcsetattr'. */ -#define TCSANOW 0 -#define TCSADRAIN 1 -#define TCSAFLUSH 2 - -#ifdef __USE_MISC - -struct sgttyb { - char sg_ispeed; - char sg_ospeed; - char sg_erase; - char sg_kill; - short sg_flags; -}; - -struct tchars { - char t_intrc; - char t_quitc; - char t_startc; - char t_stopc; - char t_eofc; - char t_brkc; -}; - -struct ltchars { - char t_suspc; - char t_dsuspc; - char t_rprntc; - char t_flushc; - char t_werasc; - char t_lnextc; -}; - -/* Used for packet mode */ -#define TIOCPKT_DATA 0 -#define TIOCPKT_FLUSHREAD 1 -#define TIOCPKT_FLUSHWRITE 2 -#define TIOCPKT_STOP 4 -#define TIOCPKT_START 8 -#define TIOCPKT_NOSTOP 16 -#define TIOCPKT_DOSTOP 32 - -/* c_cc characters */ -#define _VINTR 0 -#define _VQUIT 1 -#define _VERASE 2 -#define _VKILL 3 -#define _VEOF 4 -#define _VMIN 5 -#define _VEOL 6 -#define _VTIME 7 -#define _VEOL2 8 -#define _VSWTC 9 - -/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ -#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h b/sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h deleted file mode 100644 index 04ca9debf0..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h +++ /dev/null @@ -1,11 +0,0 @@ -/* Determine the wordsize from the preprocessor defines. */ - -#if defined __powerpc64__ -# define __WORDSIZE 64 -# define __WORDSIZE_TIME64_COMPAT32 1 -#else -# define __WORDSIZE 32 -# define __WORDSIZE_TIME64_COMPAT32 0 -# define __WORDSIZE32_SIZE_ULONG 0 -# define __WORDSIZE32_PTRDIFF_LONG 0 -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/configure b/sysdeps/unix/sysv/linux/powerpc/configure deleted file mode 100644 index 6f883de396..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/configure +++ /dev/null @@ -1,79 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/powerpc/. - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC $CFLAGS -mlong-double-128 uses IBM extended format" >&5 -$as_echo_n "checking whether $CC $CFLAGS -mlong-double-128 uses IBM extended format... " >&6; } -if ${libc_cv_mlong_double_128ibm+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -mlong-double-128" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - -#if LDBL_MANT_DIG != 106 -# error "compiler doesn't implement IBM extended format of long double" -#endif -long double foobar (long double x) { return x; } - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_cv_mlong_double_128ibm=yes -else - libc_cv_mlong_double_128ibm=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -CFLAGS="$save_CFLAGS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mlong_double_128ibm" >&5 -$as_echo "$libc_cv_mlong_double_128ibm" >&6; } - -if test "$libc_cv_mlong_double_128ibm" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC $CFLAGS supports -mabi=ibmlongdouble" >&5 -$as_echo_n "checking whether $CC $CFLAGS supports -mabi=ibmlongdouble... " >&6; } -if ${libc_cv_mabi_ibmlongdouble+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -mlong-double-128 -mabi=ibmlongdouble" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - -#if LDBL_MANT_DIG != 106 -# error "compiler doesn't implement IBM extended format of long double" -#endif -long double foobar (long double x) { return x; } - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_cv_mabi_ibmlongdouble=yes -else - libc_cv_mabi_ibmlongdouble=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$save_CFLAGS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_mabi_ibmlongdouble" >&5 -$as_echo "$libc_cv_mabi_ibmlongdouble" >&6; } - - if test "$libc_cv_mabi_ibmlongdouble" = yes; then - CFLAGS="$CFLAGS -mabi=ibmlongdouble" - else - as_fn_error $? "this configuration requires -mlong-double-128 IBM extended format support" "$LINENO" 5 - fi -fi - -ldd_rewrite_script=sysdeps/unix/sysv/linux/powerpc/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/powerpc/configure.ac b/sysdeps/unix/sysv/linux/powerpc/configure.ac deleted file mode 100644 index b8e5f9ac32..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/configure.ac +++ /dev/null @@ -1,39 +0,0 @@ -sinclude(./aclocal.m4)dnl Autoconf lossage -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/powerpc/. - -AC_CACHE_CHECK(whether $CC $CFLAGS -mlong-double-128 uses IBM extended format, - libc_cv_mlong_double_128ibm, [dnl -save_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -mlong-double-128" -AC_TRY_COMPILE([#include ], [ -#if LDBL_MANT_DIG != 106 -# error "compiler doesn't implement IBM extended format of long double" -#endif -long double foobar (long double x) { return x; }], - libc_cv_mlong_double_128ibm=yes, - libc_cv_mlong_double_128ibm=no) -CFLAGS="$save_CFLAGS"]) - -if test "$libc_cv_mlong_double_128ibm" = no; then - AC_CACHE_CHECK(whether $CC $CFLAGS supports -mabi=ibmlongdouble, - libc_cv_mabi_ibmlongdouble, [dnl - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -mlong-double-128 -mabi=ibmlongdouble" - AC_TRY_COMPILE([#include ], [ -#if LDBL_MANT_DIG != 106 -# error "compiler doesn't implement IBM extended format of long double" -#endif -long double foobar (long double x) { return x; }], - libc_cv_mabi_ibmlongdouble=yes, - libc_cv_mabi_ibmlongdouble=no) - CFLAGS="$save_CFLAGS"]) - - if test "$libc_cv_mabi_ibmlongdouble" = yes; then - CFLAGS="$CFLAGS -mabi=ibmlongdouble" - else - AC_MSG_ERROR([this configuration requires -mlong-double-128 IBM extended format support]) - fi -fi - -ldd_rewrite_script=sysdeps/unix/sysv/linux/powerpc/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/powerpc/dl-brk.S b/sysdeps/unix/sysv/linux/powerpc/dl-brk.S deleted file mode 100644 index eeb96544e3..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/dl-brk.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/dl-cache.h b/sysdeps/unix/sysv/linux/powerpc/dl-cache.h deleted file mode 100644 index 766bba4265..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/dl-cache.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/dl-static.c b/sysdeps/unix/sysv/linux/powerpc/dl-static.c deleted file mode 100644 index 38772797b4..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/dl-static.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Variable initialization. PowerPC version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifdef SHARED - -void -_dl_var_init (void *array[]) -{ - /* It has to match "variables" below. */ - enum - { - DL_PAGESIZE = 0 - }; - - GLRO(dl_pagesize) = *((size_t *) array[DL_PAGESIZE]); -} - -#else - -static void *variables[] = -{ - &GLRO(dl_pagesize) -}; - -static void -_dl_unprotect_relro (struct link_map *l) -{ - ElfW(Addr) start = ((l->l_addr + l->l_relro_addr) - & ~(GLRO(dl_pagesize) - 1)); - ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size) - & ~(GLRO(dl_pagesize) - 1)); - - if (start != end) - __mprotect ((void *) start, end - start, PROT_READ | PROT_WRITE); -} - -void -_dl_static_init (struct link_map *l) -{ - struct link_map *rtld_map = l; - struct r_scope_elem **scope; - const ElfW(Sym) *ref = NULL; - lookup_t loadbase; - void (*f) (void *[]); - size_t i; - - loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope, - NULL, 0, 1, NULL); - - for (scope = l->l_local_scope; *scope != NULL; scope++) - for (i = 0; i < (*scope)->r_nlist; i++) - if ((*scope)->r_list[i] == loadbase) - { - rtld_map = (*scope)->r_list[i]; - break; - } - - if (ref != NULL) - { - f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref); - _dl_unprotect_relro (rtld_map); - f (variables); - _dl_protect_relro (rtld_map); - } -} - -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c b/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c deleted file mode 100644 index 23f5d5d388..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Operating system support for run-time dynamic linker. Linux/PPC version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int __cache_line_size attribute_hidden; - -/* Scan the Aux Vector for the "Data Cache Block Size" entry. If found - verify that the static extern __cache_line_size is defined by checking - for not NULL. If it is defined then assign the cache block size - value to __cache_line_size. */ -#define DL_PLATFORM_AUXV \ - case AT_DCACHEBSIZE: \ - __cache_line_size = av->a_un.a_val; \ - break; - -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/elision-conf.c b/sysdeps/unix/sysv/linux/powerpc/elision-conf.c deleted file mode 100644 index f631f0a035..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/elision-conf.c +++ /dev/null @@ -1,83 +0,0 @@ -/* elision-conf.c: Lock elision tunable parameters. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "config.h" -#include -#include -#include -#include - -/* Reasonable initial tuning values, may be revised in the future. - This is a conservative initial value. */ - -struct elision_config __elision_aconf = - { - /* How many times to use a non-transactional lock after a transactional - failure has occurred because the lock is already acquired. Expressed - in number of lock acquisition attempts. */ - .skip_lock_busy = 3, - /* How often to not attempt to use elision if a transaction aborted due - to reasons other than other threads' memory accesses. Expressed in - number of lock acquisition attempts. */ - .skip_lock_internal_abort = 3, - /* How often to not attempt to use elision if a lock used up all retries - without success. Expressed in number of lock acquisition attempts. */ - .skip_lock_out_of_tbegin_retries = 3, - /* How often we retry using elision if there is chance for the transaction - to finish execution (e.g., it wasn't aborted due to the lock being - already acquired. */ - .try_tbegin = 3, - /* Same as SKIP_LOCK_INTERNAL_ABORT but for trylock. */ - .skip_trylock_internal_abort = 3, - }; - -/* Force elision for all new locks. This is used to decide whether existing - DEFAULT locks should be automatically use elision in pthread_mutex_lock(). - Disabled for suid programs. Only used when elision is available. */ - -int __pthread_force_elision attribute_hidden; - -/* Initialize elision. */ - -static void -elision_init (int argc __attribute__ ((unused)), - char **argv __attribute__ ((unused)), - char **environ) -{ -#ifdef ENABLE_LOCK_ELISION - int elision_available = (GLRO (dl_hwcap2) & PPC_FEATURE2_HAS_HTM) ? 1 : 0; - __pthread_force_elision = __libc_enable_secure ? 0 : elision_available; -#endif - if (!__pthread_force_elision) - /* Disable elision on rwlocks. */ - __elision_aconf.try_tbegin = 0; -} - -#ifdef SHARED -# define INIT_SECTION ".init_array" -# define MAYBE_CONST -#else -# define INIT_SECTION ".preinit_array" -# define MAYBE_CONST const -#endif - -void (*MAYBE_CONST __pthread_init_array []) (int, char **, char **) - __attribute__ ((section (INIT_SECTION), aligned (sizeof (void *)))) = -{ - &elision_init -}; diff --git a/sysdeps/unix/sysv/linux/powerpc/elision-conf.h b/sysdeps/unix/sysv/linux/powerpc/elision-conf.h deleted file mode 100644 index 75ffd9741d..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/elision-conf.h +++ /dev/null @@ -1,42 +0,0 @@ -/* elision-conf.h: Lock elision tunable parameters. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _ELISION_CONF_H -#define _ELISION_CONF_H 1 - -#include -#include - -/* Should make sure there is no false sharing on this. */ -struct elision_config -{ - int skip_lock_busy; - int skip_lock_internal_abort; - int skip_lock_out_of_tbegin_retries; - int try_tbegin; - int skip_trylock_internal_abort; -} __attribute__ ((__aligned__ (128))); - -extern struct elision_config __elision_aconf attribute_hidden; - -extern int __pthread_force_elision attribute_hidden; - -/* Tell the test suite to test elision for this architecture. */ -#define HAVE_ELISION 1 - -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/elision-lock.c b/sysdeps/unix/sysv/linux/powerpc/elision-lock.c deleted file mode 100644 index f7a5cbcd3a..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/elision-lock.c +++ /dev/null @@ -1,86 +0,0 @@ -/* elision-lock.c: Elided pthread mutex lock. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include "htm.h" - -#if !defined(LLL_LOCK) && !defined(EXTRAARG) -/* Make sure the configuration code is always linked in for static - libraries. */ -#include "elision-conf.c" -#endif - -#ifndef EXTRAARG -# define EXTRAARG -#endif -#ifndef LLL_LOCK -# define LLL_LOCK(a,b) lll_lock(a,b), 0 -#endif - -#define aconf __elision_aconf - -/* Adaptive lock using transactions. - By default the lock region is run as a transaction, and when it - aborts or the lock is busy the lock adapts itself. */ - -int -__lll_lock_elision (int *lock, short *adapt_count, EXTRAARG int pshared) -{ - /* adapt_count is accessed concurrently but is just a hint. Thus, - use atomic accesses but relaxed MO is sufficient. */ - if (atomic_load_relaxed (adapt_count) > 0) - { - goto use_lock; - } - - for (int i = aconf.try_tbegin; i > 0; i--) - { - if (__libc_tbegin (0)) - { - if (*lock == 0) - return 0; - /* Lock was busy. Fall back to normal locking. */ - __libc_tabort (_ABORT_LOCK_BUSY); - } - else - { - /* A persistent failure indicates that a retry will probably - result in another failure. Use normal locking now and - for the next couple of calls. */ - if (_TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ())) - { - if (aconf.skip_lock_internal_abort > 0) - atomic_store_relaxed (adapt_count, - aconf.skip_lock_internal_abort); - goto use_lock; - } - } - } - - /* Fall back to locks for a bit if retries have been exhausted */ - if (aconf.try_tbegin > 0 && aconf.skip_lock_out_of_tbegin_retries > 0) - atomic_store_relaxed (adapt_count, - aconf.skip_lock_out_of_tbegin_retries); - -use_lock: - return LLL_LOCK ((*lock), pshared); -} diff --git a/sysdeps/unix/sysv/linux/powerpc/elision-timed.c b/sysdeps/unix/sysv/linux/powerpc/elision-timed.c deleted file mode 100644 index 95317c96eb..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/elision-timed.c +++ /dev/null @@ -1,28 +0,0 @@ -/* elision-timed.c: Lock elision timed lock. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "lowlevellock.h" - -#define __lll_lock_elision __lll_timedlock_elision -#define EXTRAARG const struct timespec *t, -#undef LLL_LOCK -#define LLL_LOCK(a, b) lll_timedlock(a, t, b) - -#include "elision-lock.c" diff --git a/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c b/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c deleted file mode 100644 index ed244d3f12..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/elision-trylock.c +++ /dev/null @@ -1,69 +0,0 @@ -/* elision-trylock.c: Lock eliding trylock for pthreads. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include "htm.h" - -#define aconf __elision_aconf - -/* Try to elide a futex trylock. FUTEX is the futex variable. ADAPT_COUNT is - the adaptation counter in the mutex. */ - -int -__lll_trylock_elision (int *futex, short *adapt_count) -{ - /* Implement POSIX semantics by forbiding nesting elided trylocks. */ - __libc_tabort (_ABORT_NESTED_TRYLOCK); - - /* Only try a transaction if it's worth it. */ - if (atomic_load_relaxed (adapt_count) > 0) - { - goto use_lock; - } - - if (__libc_tbegin (0)) - { - if (*futex == 0) - return 0; - - /* Lock was busy. This is never a nested transaction. - End it, and set the adapt count. */ - __libc_tend (0); - - if (aconf.skip_lock_busy > 0) - atomic_store_relaxed (adapt_count, aconf.skip_lock_busy); - } - else - { - if (_TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ())) - { - /* A persistent failure indicates that a retry will probably - result in another failure. Use normal locking now and - for the next couple of calls. */ - if (aconf.skip_trylock_internal_abort > 0) - atomic_store_relaxed (adapt_count, - aconf.skip_trylock_internal_abort); - } - } - -use_lock: - return lll_trylock (*futex); -} diff --git a/sysdeps/unix/sysv/linux/powerpc/elision-unlock.c b/sysdeps/unix/sysv/linux/powerpc/elision-unlock.c deleted file mode 100644 index e3fe58e3f1..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/elision-unlock.c +++ /dev/null @@ -1,43 +0,0 @@ -/* elision-unlock.c: Commit an elided pthread lock. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "pthreadP.h" -#include "lowlevellock.h" -#include "htm.h" - -int -__lll_unlock_elision (int *lock, short *adapt_count, int pshared) -{ - /* When the lock was free we're in a transaction. */ - if (*lock == 0) - __libc_tend (0); - else - { - /* Update adapt_count in the critical section to prevent a - write-after-destroy error as mentioned in BZ 20822. The - following update of adapt_count has to be contained within - the critical region of the fall-back lock in order to not violate - the mutex destruction requirements. */ - short __tmp = atomic_load_relaxed (adapt_count); - if (__tmp > 0) - atomic_store_relaxed (adapt_count, __tmp - 1); - - lll_unlock ((*lock), pshared); - } - return 0; -} diff --git a/sysdeps/unix/sysv/linux/powerpc/force-elision.h b/sysdeps/unix/sysv/linux/powerpc/force-elision.h deleted file mode 100644 index 318f7915c7..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/force-elision.h +++ /dev/null @@ -1,28 +0,0 @@ -/* force-elision.h: Automatic enabling of elision for mutexes - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef ENABLE_LOCK_ELISION -/* Automatically enable elision for existing user lock kinds. */ -#define FORCE_ELISION(m, s) \ - if (__pthread_force_elision \ - && (m->__data.__kind & PTHREAD_MUTEX_ELISION_FLAGS_NP) == 0) \ - { \ - mutex->__data.__kind |= PTHREAD_MUTEX_ELISION_NP; \ - s; \ - } -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c b/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c deleted file mode 100644 index b8d01d8ca6..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Get frequency of the system processor. powerpc/Linux version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - -hp_timing_t -__get_clockfreq (void) -{ - hp_timing_t result = 0L; - -#ifdef SHARED - /* The vDSO does not return an error (it clear cr0.so on returning). */ - INTERNAL_SYSCALL_DECL (err); - result = - INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK (get_tbfreq, err, uint64_t, 0); -#else - /* We read the information from the /proc filesystem. /proc/cpuinfo - contains at least one line like: - timebase : 33333333 - We search for this line and convert the number into an integer. */ - int fd = open_not_cancel_2 ("/proc/cpuinfo", O_RDONLY); - if (__glibc_likely (fd != -1)) - return result; - - /* The timebase will be in the 1st 1024 bytes for systems with up - to 8 processors. If the first read returns less then 1024 - bytes read, we have the whole cpuinfo and can start the scan. - Otherwise we will have to read more to insure we have the - timebase value in the scan. */ - char buf[1024]; - ssize_t n; - - n = __read_nocancel (fd, buf, sizeof (buf)); - if (n == sizeof (buf)) - { - /* We are here because the 1st read returned exactly sizeof - (buf) bytes. This implies that we are not at EOF and may - not have read the timebase value yet. So we need to read - more bytes until we know we have EOF. We copy the lower - half of buf to the upper half and read sizeof (buf)/2 - bytes into the lower half of buf and repeat until we - reach EOF. We can assume that the timebase will be in - the last 512 bytes of cpuinfo, so two 512 byte half_bufs - will be sufficient to contain the timebase and will - handle the case where the timebase spans the half_buf - boundry. */ - const ssize_t half_buf = sizeof (buf) / 2; - while (n >= half_buf) - { - memcpy (buf, buf + half_buf, half_buf); - n = __read_nocancel (fd, buf + half_buf, half_buf); - } - if (n >= 0) - n += half_buf; - } - __close_nocancel (fd); - - if (__glibc_likely (n > 0)) - { - char *mhz = memmem (buf, n, "timebase", 7); - - if (__glibc_likely (mhz != NULL)) - { - char *endp = buf + n; - - /* Search for the beginning of the string. */ - while (mhz < endp && (*mhz < '0' || *mhz > '9') && *mhz != '\n') - ++mhz; - - while (mhz < endp && *mhz != '\n') - { - if (*mhz >= '0' && *mhz <= '9') - { - result *= 10; - result += *mhz - '0'; - } - - ++mhz; - } - } - } -#endif - - return result; -} diff --git a/sysdeps/unix/sysv/linux/powerpc/get_timebase_freq.c b/sysdeps/unix/sysv/linux/powerpc/get_timebase_freq.c deleted file mode 100644 index a905d5cd5f..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/get_timebase_freq.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Get the frequency of the time base. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -uint64_t -__get_timebase_freq (void) -{ - return (uint64_t) __get_clockfreq (); -} -weak_alias (__get_timebase_freq, __ppc_get_timebase_freq) diff --git a/sysdeps/unix/sysv/linux/powerpc/getdents64.c b/sysdeps/unix/sysv/linux/powerpc/getdents64.c deleted file mode 100644 index 0c75fb5a06..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/getdents64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/getmsg.c b/sysdeps/unix/sysv/linux/powerpc/getmsg.c deleted file mode 100644 index 3a1fa08525..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/getmsg.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c b/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c deleted file mode 100644 index 6f09fa20d3..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined SHARED && !defined __powerpc64__ -# define __gettimeofday __redirect___gettimeofday -#else -# define __redirect___gettimeofday __gettimeofday -#endif - -#include - -#ifdef SHARED - -# include -# include -# include - -# ifndef __powerpc64__ -# undef __gettimeofday - -int -__gettimeofday_vsyscall (struct timeval *tv, struct timezone *tz) -{ - return INLINE_VSYSCALL (gettimeofday, 2, tv, tz); -} - -/* __GI___gettimeofday is defined as hidden and for ppc32 it enables the - compiler make a local call (symbol@local) for internal GLIBC usage. It - means the PLT won't be used and the ifunc resolver will be called directly. - For ppc64 a call to a function in another translation unit might use a - different toc pointer thus disallowing direct branchess and making internal - ifuncs calls safe. */ -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__gettimeofday_vsyscall, __GI___gettimeofday, \ - __gettimeofday_vsyscall); - -# endif /* !__powerpc64__ */ - -static int -__gettimeofday_syscall (struct timeval *tv, struct timezone *tz) -{ - return INLINE_SYSCALL (gettimeofday, 2, tv, tz); -} - -# define INIT_ARCH() \ - PREPARE_VERSION (linux2615, "LINUX_2.6.15", 123718565); \ - void *vdso_gettimeofday = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2615); - -/* If the vDSO is not available we fall back syscall. */ -libc_ifunc_hidden (__redirect___gettimeofday, __gettimeofday, - vdso_gettimeofday - ? VDSO_IFUNC_RET (vdso_gettimeofday) - : (void *) __gettimeofday_syscall); -libc_hidden_def (__gettimeofday) - -#else - -# include -# include - -int -__gettimeofday (struct timeval *tv, struct timezone *tz) -{ - return INLINE_SYSCALL (gettimeofday, 2, tv, tz); -} -libc_hidden_def (__gettimeofday) - -#endif -weak_alias (__gettimeofday, gettimeofday) -libc_hidden_weak (gettimeofday) diff --git a/sysdeps/unix/sysv/linux/powerpc/htm.h b/sysdeps/unix/sysv/linux/powerpc/htm.h deleted file mode 100644 index e8e9688b12..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/htm.h +++ /dev/null @@ -1,171 +0,0 @@ -/* Shared HTM header. Emulate transactional execution facility intrinsics for - compilers and assemblers that do not support the intrinsics and instructions - yet. - - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _HTM_H -#define _HTM_H 1 - -#ifdef __ASSEMBLER__ - -/* tbegin. */ -.macro TBEGIN - .long 0x7c00051d -.endm - -/* tend. 0 */ -.macro TEND - .long 0x7c00055d -.endm - -/* tabort. code */ -.macro TABORT code - .byte 0x7c - .byte \code - .byte 0x07 - .byte 0x1d -.endm - -/*"TEXASR - Transaction EXception And Summary Register" - mfspr %dst,130 */ -.macro TEXASR dst - mfspr \dst,130 -.endm - -#else - -#include - -/* Official HTM intrinsics interface matching GCC, but works - on older GCC compatible compilers and binutils. - We should somehow detect if the compiler supports it, because - it may be able to generate slightly better code. */ - -#define TBEGIN ".long 0x7c00051d" -#define TEND ".long 0x7c00055d" -#if __BYTE_ORDER == __LITTLE_ENDIAN -# define TABORT ".byte 0x1d,0x07,%1,0x7c" -#else -# define TABORT ".byte 0x7c,%1,0x07,0x1d" -#endif - -#define __force_inline inline __attribute__((__always_inline__)) - -#ifndef __HTM__ - -#define _TEXASRU_EXTRACT_BITS(TEXASR,BITNUM,SIZE) \ - (((TEXASR) >> (31-(BITNUM))) & ((1<<(SIZE))-1)) -#define _TEXASRU_FAILURE_PERSISTENT(TEXASRU) \ - _TEXASRU_EXTRACT_BITS(TEXASRU, 7, 1) - -#define _tbegin() \ - ({ unsigned int __ret; \ - asm volatile ( \ - TBEGIN "\t\n" \ - "mfcr %0\t\n" \ - "rlwinm %0,%0,3,1\t\n" \ - "xori %0,%0,1\t\n" \ - : "=r" (__ret) : \ - : "cr0", "memory"); \ - __ret; \ - }) - -#define _tend() \ - ({ unsigned int __ret; \ - asm volatile ( \ - TEND "\t\n" \ - "mfcr %0\t\n" \ - "rlwinm %0,%0,3,1\t\n" \ - "xori %0,%0,1\t\n" \ - : "=r" (__ret) : \ - : "cr0", "memory"); \ - __ret; \ - }) - -#define _tabort(__code) \ - ({ unsigned int __ret; \ - asm volatile ( \ - TABORT "\t\n" \ - "mfcr %0\t\n" \ - "rlwinm %0,%0,3,1\t\n" \ - "xori %0,%0,1\t\n" \ - : "=r" (__ret) : "r" (__code) \ - : "cr0", "memory"); \ - __ret; \ - }) - -#define _texasru() \ - ({ unsigned long __ret; \ - asm volatile ( \ - "mfspr %0,131\t\n" \ - : "=r" (__ret)); \ - __ret; \ - }) - -#define __libc_tbegin(tdb) _tbegin () -#define __libc_tend(nested) _tend () -#define __libc_tabort(abortcode) _tabort (abortcode) -#define __builtin_get_texasru() _texasru () - -#else -# include - -# ifdef __TM_FENCE__ - /* New GCC behavior. */ -# define __libc_tbegin(R) __builtin_tbegin (R) -# define __libc_tend(R) __builtin_tend (R) -# define __libc_tabort(R) __builtin_tabort (R) -# else - /* Workaround an old GCC behavior. Earlier releases of GCC 4.9 and 5.0, - didn't use to treat __builtin_tbegin, __builtin_tend and - __builtin_tabort as compiler barriers, moving instructions into and - out the transaction. - Remove this when glibc drops support for GCC 5.0. */ -# define __libc_tbegin(R) \ - ({ __asm__ volatile("" ::: "memory"); \ - unsigned int __ret = __builtin_tbegin (R); \ - __asm__ volatile("" ::: "memory"); \ - __ret; \ - }) -# define __libc_tabort(R) \ - ({ __asm__ volatile("" ::: "memory"); \ - unsigned int __ret = __builtin_tabort (R); \ - __asm__ volatile("" ::: "memory"); \ - __ret; \ - }) -# define __libc_tend(R) \ - ({ __asm__ volatile("" ::: "memory"); \ - unsigned int __ret = __builtin_tend (R); \ - __asm__ volatile("" ::: "memory"); \ - __ret; \ - }) -# endif /* __TM_FENCE__ */ -#endif /* __HTM__ */ - -#endif /* __ASSEMBLER__ */ - -/* Definitions used for TEXASR Failure code (bits 0:7). If the failure - should be persistent, the abort code must be odd. 0xd0 through 0xff - are reserved for the kernel and potential hypervisor. */ -#define _ABORT_PERSISTENT 0x01 /* An unspecified persistent abort. */ -#define _ABORT_LOCK_BUSY 0x34 /* Busy lock, not persistent. */ -#define _ABORT_NESTED_TRYLOCK (0x32 | _ABORT_PERSISTENT) -#define _ABORT_SYSCALL (0x30 | _ABORT_PERSISTENT) - -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/init-first.c b/sysdeps/unix/sysv/linux/powerpc/init-first.c deleted file mode 100644 index 64b7589c1f..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/init-first.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Initialization code run first thing by the ELF startup code. Linux/PowerPC. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef SHARED -# include -# include - -int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) - attribute_hidden; -int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *); -int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *); -unsigned long long (*VDSO_SYMBOL(get_tbfreq)) (void); -int (*VDSO_SYMBOL(getcpu)) (unsigned *, unsigned *); -time_t (*VDSO_SYMBOL(time)) (time_t *); - -#if defined(__PPC64__) || defined(__powerpc64__) -void *VDSO_SYMBOL(sigtramp_rt64); -#else -void *VDSO_SYMBOL(sigtramp32); -void *VDSO_SYMBOL(sigtramp_rt32); -#endif - -static inline void -_libc_vdso_platform_setup (void) -{ - PREPARE_VERSION (linux2615, "LINUX_2.6.15", 123718565); - - void *p = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2615); - PTR_MANGLE (p); - VDSO_SYMBOL (gettimeofday) = p; - - p = _dl_vdso_vsym ("__kernel_clock_gettime", &linux2615); - PTR_MANGLE (p); - VDSO_SYMBOL (clock_gettime) = p; - - p = _dl_vdso_vsym ("__kernel_clock_getres", &linux2615); - PTR_MANGLE (p); - VDSO_SYMBOL (clock_getres) = p; - - p = _dl_vdso_vsym ("__kernel_get_tbfreq", &linux2615); - PTR_MANGLE (p); - VDSO_SYMBOL (get_tbfreq) = p; - - p = _dl_vdso_vsym ("__kernel_getcpu", &linux2615); - PTR_MANGLE (p); - VDSO_SYMBOL (getcpu) = p; - - p = _dl_vdso_vsym ("__kernel_time", &linux2615); - PTR_MANGLE (p); - VDSO_SYMBOL (time) = p; - - /* PPC64 uses only one signal trampoline symbol, while PPC32 will use - two depending if SA_SIGINFO is used (__kernel_sigtramp_rt32) or not - (__kernel_sigtramp32). - There is no need to pointer mangle these symbol because they will - used only for pointer comparison. */ -#if defined(__PPC64__) || defined(__powerpc64__) - VDSO_SYMBOL(sigtramp_rt64) = _dl_vdso_vsym ("__kernel_sigtramp_rt64", - &linux2615); -#else - VDSO_SYMBOL(sigtramp32) = _dl_vdso_vsym ("__kernel_sigtramp32", &linux2615); - VDSO_SYMBOL(sigtramp_rt32) = _dl_vdso_vsym ("__kernel_sigtramp_rt32", - &linux2615); -#endif -} - -# define VDSO_SETUP _libc_vdso_platform_setup -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/ioctl.c b/sysdeps/unix/sysv/linux/powerpc/ioctl.c deleted file mode 100644 index e2e3d3357f..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/ioctl.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* The user-visible size of struct termios has changed. Catch ioctl calls - using the new-style struct termios, and translate them to old-style. */ - -int -__ioctl (int fd, unsigned long int request, ...) -{ - void *arg; - va_list ap; - int result; - - va_start (ap, request); - arg = va_arg (ap, void *); - - switch (request) - { - case TCGETS: - result = __tcgetattr (fd, (struct termios *) arg); - break; - - case TCSETS: - result = tcsetattr (fd, TCSANOW, (struct termios *) arg); - break; - - case TCSETSW: - result = tcsetattr (fd, TCSADRAIN, (struct termios *) arg); - break; - - case TCSETSF: - result = tcsetattr (fd, TCSAFLUSH, (struct termios *) arg); - break; - - default: - result = INLINE_SYSCALL (ioctl, 3, fd, request, arg); - break; - } - - va_end (ap); - - return result; -} -weak_alias (__ioctl, ioctl) diff --git a/sysdeps/unix/sysv/linux/powerpc/ipc_priv.h b/sysdeps/unix/sysv/linux/powerpc/ipc_priv.h deleted file mode 100644 index 849190c67b..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/ipc_priv.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Old SysV permission definition for Linux. PowerPC version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include /* For __key_t */ - -#define __IPC_64 0x100 - -struct __old_ipc_perm -{ - __key_t __key; /* Key. */ - unsigned int uid; /* Owner's user ID. */ - unsigned int gid; /* Owner's group ID. */ - unsigned int cuid; /* Creator's user ID. */ - unsigned int cgid; /* Creator's group ID. */ - unsigned int mode; /* Read/write permission. */ - unsigned short int __seq; /* Sequence number. */ -}; - -#define SEMCTL_ARG_ADDRESS(__arg) &__arg.array - -#define MSGRCV_ARGS(__msgp, __msgtyp) \ - ((long int []){ (long int) __msgp, __msgtyp }) - -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h deleted file mode 100644 index e026394422..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. PowerPC version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* PowerPC uses socketcall. */ -#define __ASSUME_SOCKETCALL 1 - -/* New syscalls added for PowerPC in 2.6.37. */ -#define __ASSUME_SOCKET_SYSCALL 1 -#define __ASSUME_BIND_SYSCALL 1 -#define __ASSUME_CONNECT_SYSCALL 1 -#define __ASSUME_LISTEN_SYSCALL 1 -#define __ASSUME_GETSOCKNAME_SYSCALL 1 -#define __ASSUME_GETPEERNAME_SYSCALL 1 -#define __ASSUME_SOCKETPAIR_SYSCALL 1 -#define __ASSUME_SEND_SYSCALL 1 -#define __ASSUME_RECV_SYSCALL 1 -#define __ASSUME_SHUTDOWN_SYSCALL 1 -#define __ASSUME_GETSOCKOPT_SYSCALL 1 -#define __ASSUME_SETSOCKOPT_SYSCALL 1 - -/* Define this if your 32-bit syscall API requires 64-bit register - pairs to start with an even-number register. */ -#ifndef __powerpc64__ -# define __ASSUME_ALIGNED_REGISTER_PAIRS 1 -#endif - -/* powerpc compat fadvise64_64 reorganize the syscall argument. */ -#ifndef __powerpc64__ -# define __ASSUME_FADVISE64_64_6ARG 1 -#endif - -#include_next - -/* powerpc only supports ipc syscall. */ -#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS diff --git a/sysdeps/unix/sysv/linux/powerpc/kernel_termios.h b/sysdeps/unix/sysv/linux/powerpc/kernel_termios.h deleted file mode 100644 index ec80de3f50..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/kernel_termios.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _KERNEL_TERMIOS_H -#define _KERNEL_TERMIOS_H 1 - -/* We need the definition of tcflag_t, cc_t, and speed_t. */ -#include - -#define __KERNEL_NCCS 19 - -struct __kernel_termios - { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_cc[__KERNEL_NCCS]; /* control characters */ - cc_t c_line; /* line discipline */ - speed_t c_ispeed; /* input speed */ - speed_t c_ospeed; /* output speed */ - }; - -#define _HAVE_C_ISPEED 1 -#define _HAVE_C_OSPEED 1 - -/* We have the kernel termios structure, so we can presume this code knows - what it's doing... */ - -#undef TCGETS -#undef TCSETS -#undef TCSETSW -#undef TCSETSF -#define TCGETS _IOR ('t', 19, struct __kernel_termios) -#define TCSETS _IOW ('t', 20, struct __kernel_termios) -#define TCSETSW _IOW ('t', 21, struct __kernel_termios) -#define TCSETSF _IOW ('t', 22, struct __kernel_termios) - -#endif /* kernel_termios.h */ diff --git a/sysdeps/unix/sysv/linux/powerpc/ldconfig.h b/sysdeps/unix/sysv/linux/powerpc/ldconfig.h deleted file mode 100644 index 178e6e6236..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/ldconfig.h +++ /dev/null @@ -1,27 +0,0 @@ -/* ldconfig default paths and libraries. Linux/PowerPC version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld.so.1", FLAG_ELF_LIBC6 }, \ - { "/lib64/ld64.so.1", FLAG_ELF_LIBC6 }, \ - { "/lib64/ld64.so.2", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/powerpc/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/powerpc/ldd-rewrite.sed deleted file mode 100644 index 9039b69548..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/ldd-rewrite.sed +++ /dev/null @@ -1,15 +0,0 @@ -/LD_TRACE_LOADED_OBJECTS=1/a\ -add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out" - -# ldd is generated from elf/ldd.bash.in with the name -# of ld.so as generated in Makeconfig - -# that name is replaced by a pair referring to both -# the 32bit and 64bit dynamic linker. - -# /lib(64|)/*(64|).so* is replaced with /lib/*.so* and /lib64/*64.so* -# this works for /lib64/ld64.so.x and /lib/ld.so.x as input -s_lib64_lib_ -s_64\.so_\.so_ -s_^RTLDLIST=\(.*lib\)\(/[^/]*\)\(\.so\.[0-9.]*\)[[:blank:]]*$_RTLDLIST="\1\2\3 \164\264\3"_ - diff --git a/sysdeps/unix/sysv/linux/powerpc/ldsodefs.h b/sysdeps/unix/sysv/linux/powerpc/ldsodefs.h deleted file mode 100644 index d51a560b6a..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/ldsodefs.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - PowerPC version. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LDSODEFS_H - -/* Get the real definitions. */ -#include_next - -/* Now define our stuff. */ - -/* We need special support to initialize DSO loaded for statically linked - binaries. */ -extern void _dl_static_init (struct link_map *map); -#undef DL_STATIC_INIT -#define DL_STATIC_INIT(map) _dl_static_init (map) - -#endif /* ldsodefs.h */ diff --git a/sysdeps/unix/sysv/linux/powerpc/libc-start.c b/sysdeps/unix/sysv/linux/powerpc/libc-start.c deleted file mode 100644 index ad036c1e4b..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/libc-start.c +++ /dev/null @@ -1,105 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#ifndef SHARED -#include -#endif - -int __cache_line_size attribute_hidden; -/* The main work is done in the generic function. */ -#define LIBC_START_MAIN generic_start_main -#define LIBC_START_DISABLE_INLINE -#define LIBC_START_MAIN_AUXVEC_ARG -#define MAIN_AUXVEC_ARG -#define INIT_MAIN_ARGS -#include - -struct startup_info - { - void *sda_base; - int (*main) (int, char **, char **, void *); - int (*init) (int, char **, char **, void *); - void (*fini) (void); - }; - -int -__libc_start_main (int argc, char **argv, - char **ev, - ElfW (auxv_t) * auxvec, - void (*rtld_fini) (void), - struct startup_info *stinfo, - char **stack_on_entry) -{ - /* the PPC SVR4 ABI says that the top thing on the stack will - be a NULL pointer, so if not we assume that we're being called - as a statically-linked program by Linux... */ - if (*stack_on_entry != NULL) - { - char **temp; - /* ...in which case, we have argc as the top thing on the - stack, followed by argv (NULL-terminated), envp (likewise), - and the auxiliary vector. */ - /* 32/64-bit agnostic load from stack */ - argc = *(long int *) stack_on_entry; - argv = stack_on_entry + 1; - ev = argv + argc + 1; -#ifdef HAVE_AUX_VECTOR - temp = ev; - while (*temp != NULL) - ++temp; - auxvec = (ElfW (auxv_t) *)++ temp; -#endif - rtld_fini = NULL; - } - - /* Initialize the __cache_line_size variable from the aux vector. For the - static case, we also need _dl_hwcap, _dl_hwcap2 and _dl_platform, so we - can call __tcb_parse_hwcap_and_convert_at_platform (). */ - for (ElfW (auxv_t) * av = auxvec; av->a_type != AT_NULL; ++av) - switch (av->a_type) - { - case AT_DCACHEBSIZE: - __cache_line_size = av->a_un.a_val; - break; -#ifndef SHARED - case AT_HWCAP: - _dl_hwcap = (unsigned long int) av->a_un.a_val; - break; - case AT_HWCAP2: - _dl_hwcap2 = (unsigned long int) av->a_un.a_val; - break; - case AT_PLATFORM: - _dl_platform = (void *) av->a_un.a_val; - break; -#endif - } - - /* Initialize hwcap/hwcap2 and platform data so it can be copied to - the TCB later in __libc_setup_tls (). (static case only). */ -#ifndef SHARED - __tcb_parse_hwcap_and_convert_at_platform (); -#endif - - return generic_start_main (stinfo->main, argc, argv, auxvec, - stinfo->init, stinfo->fini, rtld_fini, - stack_on_entry); -} diff --git a/sysdeps/unix/sysv/linux/powerpc/libc-vdso.h b/sysdeps/unix/sysv/linux/powerpc/libc-vdso.h deleted file mode 100644 index fb9509e2e7..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/libc-vdso.h +++ /dev/null @@ -1,74 +0,0 @@ -/* Resolve function pointers to VDSO functions. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#ifndef _LIBC_VDSO_H -#define _LIBC_VDSO_H - -#ifdef SHARED - -#include - -extern int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) - attribute_hidden; -extern int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *); -extern int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *); -extern unsigned long long (*VDSO_SYMBOL(get_tbfreq)) (void); -extern int (*VDSO_SYMBOL(getcpu)) (unsigned *, unsigned *); -extern time_t (*VDSO_SYMBOL(time)) (time_t *); - -#if defined(__PPC64__) || defined(__powerpc64__) -extern void *VDSO_SYMBOL(sigtramp_rt64); -#else -extern void *VDSO_SYMBOL(sigtramp32); -extern void *VDSO_SYMBOL(sigtramp_rt32); -#endif - -#if (defined(__PPC64__) || defined(__powerpc64__)) && _CALL_ELF != 2 -/* The correct solution is for _dl_vdso_vsym to return the address of the OPD - for the kernel VDSO function. That address would then be stored in the - __vdso_* variables and returned as the result of the IFUNC resolver function. - Yet, the kernel does not contain any OPD entries for the VDSO functions - (incomplete implementation). However, PLT relocations for IFUNCs still expect - the address of an OPD to be returned from the IFUNC resolver function (since - PLT entries on PPC64 are just copies of OPDs). The solution for now is to - create an artificial static OPD for each VDSO function returned by a resolver - function. The TOC value is set to a non-zero value to avoid triggering lazy - symbol resolution via .glink0/.plt0 for a zero TOC (requires thread-safe PLT - sequences) when the dynamic linker isn't prepared for it e.g. RTLD_NOW. None - of the kernel VDSO routines use the TOC or AUX values so any non-zero value - will work. Note that function pointer comparisons will not use this artificial - static OPD since those are resolved via ADDR64 relocations and will point at - the non-IFUNC default OPD for the symbol. Lastly, because the IFUNC relocations - are processed immediately at startup the resolver functions and this code need - not be thread-safe, but if the caller writes to a PLT slot it must do so in a - thread-safe manner with all the required barriers. */ -#define VDSO_IFUNC_RET(value) \ - ({ \ - static Elf64_FuncDesc vdso_opd = { .fd_toc = ~0x0 }; \ - vdso_opd.fd_func = (Elf64_Addr)value; \ - &vdso_opd; \ - }) - -#else -#define VDSO_IFUNC_RET(value) ((void *) (value)) -#endif - -#endif - -#endif /* _LIBC_VDSO_H */ diff --git a/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h b/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h deleted file mode 100644 index 7e81b8f198..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h +++ /dev/null @@ -1,48 +0,0 @@ -/* PowerPC specific lock definitions. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _POWERPC_LOWLEVELLOCK_H -#define _POWERPC_LOWLEVELLOCK_H 1 - -#include - -/* Transactional lock elision definitions. */ -extern int __lll_timedlock_elision - (int *futex, short *adapt_count, const struct timespec *timeout, int private) - attribute_hidden; - -#define lll_timedlock_elision(futex, adapt_count, timeout, private) \ - __lll_timedlock_elision(&(futex), &(adapt_count), timeout, private) - -extern int __lll_lock_elision (int *futex, short *adapt_count, int private) - attribute_hidden; - -extern int __lll_unlock_elision (int *lock, short *adapt_count, int private) - attribute_hidden; - -extern int __lll_trylock_elision(int *lock, short *adapt_count) - attribute_hidden; - -#define lll_lock_elision(futex, adapt_count, private) \ - __lll_lock_elision (&(futex), &(adapt_count), private) -#define lll_unlock_elision(futex, adapt_count, private) \ - __lll_unlock_elision (&(futex), &(adapt_count), private) -#define lll_trylock_elision(futex, adapt_count) \ - __lll_trylock_elision (&(futex), &(adapt_count)) - -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h b/sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h deleted file mode 100644 index bd985cc59c..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/nldbl-abi.h +++ /dev/null @@ -1,8 +0,0 @@ -/* ABI version for long double switch. - This is used by the Versions and math_ldbl_opt.h files in - sysdeps/ieee754/ldbl-opt/. It gives the ABI version where - long double == double was replaced with proper long double - for libm *l functions and libc functions using long double. */ - -#define NLDBL_VERSION GLIBC_2.4 -#define LONG_DOUBLE_COMPAT_VERSION GLIBC_2_4 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/405/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/405/Implies deleted file mode 100644 index 70c0d2eda3..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/405/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/405/fpu -powerpc/powerpc32/405 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/440/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/440/Implies deleted file mode 100644 index c3e52c5504..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/440/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/440/fpu -powerpc/powerpc32/440 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/464/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/464/Implies deleted file mode 100644 index 2829f9ccaf..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/464/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/464/fpu -powerpc/powerpc32/464 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/476/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/476/Implies deleted file mode 100644 index 80f917079e..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/476/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/476/fpu -powerpc/powerpc32/476 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/970/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/970/Implies deleted file mode 100644 index 0c018834af..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/970/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/970/fpu -powerpc/powerpc32/970 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile b/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile deleted file mode 100644 index 1f45659ed1..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -# See Makeconfig regarding the use of default-abi. -default-abi := 32 - -ifeq ($(subdir),csu) -ifeq (yes,$(build-shared)) -sysdep_routines += divdi3 -shared-only-routines += divdi3 -CPPFLAGS-divdi3.c = -Din_divdi3_c -endif -endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/Versions b/sysdeps/unix/sysv/linux/powerpc/powerpc32/Versions deleted file mode 100644 index e13d20b93b..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/Versions +++ /dev/null @@ -1,46 +0,0 @@ -libc { - GLIBC_2.0 { - # Exception handling support functions from libgcc - __register_frame; __register_frame_table; __deregister_frame; - __frame_state_for; __register_frame_info_table; - } - GLIBC_2.2 { - # functions used in other libraries - __xstat64; __fxstat64; __lxstat64; - - # g* - glob64; - - # New rlimit interface - getrlimit; setrlimit; getrlimit64; setrlimit64; - - # r* - readdir64; readdir64_r; - - # s* - scandir64; - } - GLIBC_2.3.3 { - posix_fadvise64; posix_fallocate64; - setcontext; getcontext; swapcontext; makecontext; - } - GLIBC_2.3.4 { - setcontext; getcontext; swapcontext; makecontext; - } - GLIBC_2.11 { - fallocate64; - } - GLIBC_2.17 { - __ppc_get_timebase_freq; - } -} - -libpthread { - GLIBC_2.3.4 { - longjmp; siglongjmp; - } - GLIBC_2.6 { - # Changed PTHREAD_STACK_MIN. - pthread_attr_setstack; pthread_attr_setstacksize; - } -} diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/____longjmp_chk.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/____longjmp_chk.S deleted file mode 100644 index f61398c6b2..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/____longjmp_chk.S +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section .rodata.str1.4,"aMS",@progbits,1 - .align 2 -.LC0: - .string "longjmp causes uninitialized stack frame" - .text - -#define __longjmp_symbol ____longjmp_chk - -#ifdef PIC -# define LOAD_ARG \ - SETUP_GOT_ACCESS(r3,got_label2); \ - addis r3,r3,_GLOBAL_OFFSET_TABLE_-got_label2@ha; \ - addi r3,r3,_GLOBAL_OFFSET_TABLE_-got_label2@l; \ - lwz r3,.LC0@got(r3) -#else -# define LOAD_ARG \ - lis r3,.LC0@ha; \ - la r3,.LC0@l(r3) -#endif - -#define CHECK_SP(reg) \ - cmplw reg, r1; \ - bge+ .Lok; \ - mflr r0; \ - stwu r1,-32(r1); \ - cfi_remember_state; \ - cfi_adjust_cfa_offset (32); \ - stw r0,36(r1); \ - cfi_offset (lr, 4); \ - mr r31,r3; \ - mr r30,r4; \ - li r3,0; \ - addi r4,r1,8; \ - li r0,__NR_sigaltstack; \ - sc; \ - /* Without working sigaltstack we cannot perform the test. */ \ - bso .Lok2; \ - lwz r0,12(r1); \ - andi. r3,r0,1; \ - beq .Lfail; \ - lwz r0,16(r1); \ - lwz r3,8(r1); \ - add r3,r3,r0; \ - sub r3,r3,reg; \ - cmplw r3,r0; \ - bge+ .Lok2; \ -.Lfail: \ - LOAD_ARG; \ - bl HIDDEN_JUMPTARGET (__fortify_fail); \ -.Lok2: \ - mr r3,r31; \ - mr r4,r30; \ - cfi_restore_state; \ -.Lok: - -#include <__longjmp-common.S> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/a2/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/a2/Implies deleted file mode 100644 index 6d72414e55..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/a2/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/a2/fpu -powerpc/powerpc32/a2 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S deleted file mode 100644 index 736fc89200..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S +++ /dev/null @@ -1,52 +0,0 @@ -/* brk system call for Linux/ppc. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include - - .comm __curbrk,4,4 - .section ".text" -ENTRY (__brk) - mflr r0 - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - stw r3,8(r1) - stw r0,20(r1) - cfi_offset (lr, 4) - DO_CALL(SYS_ify(brk)) - lwz r6,8(r1) -#ifdef PIC - SETUP_GOT_ACCESS(r5,got_label) - addis r5,r5,__curbrk-got_label@ha - stw r3,__curbrk-got_label@l(r5) -#else - lis r4,__curbrk@ha - stw r3,__curbrk@l(r4) -#endif - lwz r0,20(r1) - cmplw r6,r3 - addi r1,r1,16 - mtlr r0 - li r3,0 - blelr+ - li r3,ENOMEM - b __syscall_error@local -END (__brk) - -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/c++-types.data b/sysdeps/unix/sysv/linux/powerpc/powerpc32/c++-types.data deleted file mode 100644 index fde53bf337..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:i -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/cell/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/cell/Implies deleted file mode 100644 index 29c49a4c24..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/cell/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/cell/fpu -powerpc/powerpc32/cell diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/cell/fpu/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/cell/fpu/Implies deleted file mode 100644 index 7c381f043c..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/cell/fpu/Implies +++ /dev/null @@ -1,3 +0,0 @@ -# Make sure this comes before the powerpc/powerpc32/fpu that's -# listed in unix/sysv/linux/powerpc/powerpc32/fpu/Implies. -powerpc/powerpc32/cell/fpu diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S deleted file mode 100644 index a07b7d3238..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S +++ /dev/null @@ -1,101 +0,0 @@ -/* Wrapper around clone system call. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include - -#define CLONE_VM 0x00000100 -#define CLONE_THREAD 0x00010000 - - -/* This is the only really unusual system call in PPC linux, but not - because of any weirdness in the system call itself; because of - all the freaky stuff we have to do to make the call useful. */ - -/* int [r3] clone(int (*fn)(void *arg) [r3], void *child_stack [r4], - int flags [r5], void *arg [r6], void *parent_tid [r7], - void *tls [r8], void *child_tid [r9]); */ - -ENTRY (__clone) - - /* Check for child_stack == NULL || fn == NULL. */ - cmpwi cr0,r4,0 - cmpwi cr1,r3,0 - cror cr0*4+eq,cr1*4+eq,cr0*4+eq - beq- cr0,L(badargs) - - /* Set up stack frame for parent. */ - stwu r1,-32(r1) - cfi_adjust_cfa_offset (32) - stmw r28,16(r1) - - /* Set up stack frame for child. */ - clrrwi r4,r4,4 - li r0,0 - stwu r0,-16(r4) - - /* Save fn, args, stack across syscall. */ - mr r30,r3 /* Function in r30. */ - mr r28,r5 - mr r31,r6 /* Argument in r31. */ - - /* 'flags' argument is first parameter to clone syscall. (The other - argument is the stack pointer, already in r4.) */ - mr r3,r5 - - /* Move the parent_tid, child_tid and tls arguments. */ - mr r5,r7 - mr r6,r8 - mr r7,r9 - - /* End FDE now, because in the child the unwind info will be - wrong. */ - cfi_endproc - - /* Do the call. */ - DO_CALL(SYS_ify(clone)) - - /* Check for child process. */ - cmpwi cr1,r3,0 - crandc cr1*4+eq,cr1*4+eq,cr0*4+so - bne- cr1,L(parent) /* The '-' is to minimise the race. */ - - /* Call procedure. */ - mtctr r30 - mr r3,r31 - bctrl - /* Call _exit with result from procedure. */ - b HIDDEN_JUMPTARGET(_exit) - -L(parent): - /* Parent. Restore registers & return. */ - lmw r28,16(r1) - addi r1,r1,32 - bnslr+ - b __syscall_error@local - -L(badargs): - li r3,EINVAL - b __syscall_error@local - - cfi_startproc -END (__clone) - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/configure b/sysdeps/unix/sysv/linux/powerpc/powerpc32/configure deleted file mode 100644 index eb58187ff4..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/configure +++ /dev/null @@ -1,4 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/powerpc/powerpc32. - -libc_cv_gcc_unwind_find_fde=yes diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/configure.ac b/sysdeps/unix/sysv/linux/powerpc/powerpc32/configure.ac deleted file mode 100644 index e1c4c0d357..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/configure.ac +++ /dev/null @@ -1,4 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/powerpc/powerpc32. - -libc_cv_gcc_unwind_find_fde=yes diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/e500/nofpu/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/e500/nofpu/Implies deleted file mode 100644 index 00365c1cfd..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/e500/nofpu/Implies +++ /dev/null @@ -1,3 +0,0 @@ -powerpc/powerpc32/e500/nofpu -powerpc/nofpu -powerpc/soft-fp diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c deleted file mode 100644 index ea951bc4f9..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_mask.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_mask.c deleted file mode 100644 index 58a4f3f393..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_mask.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Procedure definition for FE_MASK_ENV for Linux/ppc. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -const fenv_t * -__fe_mask_env (void) -{ - INTERNAL_SYSCALL_DECL (err); - INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, PR_FP_EXC_DISABLED); - - return FE_DFL_ENV; -} diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_nomask.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_nomask.c deleted file mode 100644 index 8b45ba384a..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_nomask.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Procedure definition for FE_NOMASK_ENV for Linux/ppc. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -const fenv_t * -__fe_nomask_env_priv (void) -{ - INTERNAL_SYSCALL_DECL (err); - INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, PR_FP_EXC_PRECISE); - - return FE_ENABLED_ENV; -} -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_19) -compat_symbol (libm, __fe_nomask_env_priv, __fe_nomask_env, GLIBC_2_1); -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist deleted file mode 100644 index e213895c71..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++ /dev/null @@ -1,2475 +0,0 @@ -GCC_3.0 GCC_3.0 A -GCC_3.0 _Unwind_Find_FDE F -GCC_3.0 __deregister_frame_info_bases F -GCC_3.0 __register_frame_info_bases F -GCC_3.0 __register_frame_info_table_bases F -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_adjust_column F -GLIBC_2.0 _IO_default_doallocate F -GLIBC_2.0 _IO_default_finish F -GLIBC_2.0 _IO_default_pbackfail F -GLIBC_2.0 _IO_default_uflow F -GLIBC_2.0 _IO_default_xsgetn F -GLIBC_2.0 _IO_default_xsputn F -GLIBC_2.0 _IO_do_write F -GLIBC_2.0 _IO_doallocbuf F -GLIBC_2.0 _IO_fclose F -GLIBC_2.0 _IO_fdopen F -GLIBC_2.0 _IO_feof F -GLIBC_2.0 _IO_ferror F -GLIBC_2.0 _IO_fflush F -GLIBC_2.0 _IO_fgetpos F -GLIBC_2.0 _IO_fgets F -GLIBC_2.0 _IO_file_attach F -GLIBC_2.0 _IO_file_close F -GLIBC_2.0 _IO_file_close_it F -GLIBC_2.0 _IO_file_doallocate F -GLIBC_2.0 _IO_file_fopen F -GLIBC_2.0 _IO_file_init F -GLIBC_2.0 _IO_file_jumps D 0x54 -GLIBC_2.0 _IO_file_open F -GLIBC_2.0 _IO_file_overflow F -GLIBC_2.0 _IO_file_read F -GLIBC_2.0 _IO_file_seek F -GLIBC_2.0 _IO_file_seekoff F -GLIBC_2.0 _IO_file_setbuf F -GLIBC_2.0 _IO_file_stat F -GLIBC_2.0 _IO_file_sync F -GLIBC_2.0 _IO_file_underflow F -GLIBC_2.0 _IO_file_write F -GLIBC_2.0 _IO_file_xsputn F -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_flush_all F -GLIBC_2.0 _IO_flush_all_linebuffered F -GLIBC_2.0 _IO_fopen F -GLIBC_2.0 _IO_fprintf F -GLIBC_2.0 _IO_fputs F -GLIBC_2.0 _IO_fread F -GLIBC_2.0 _IO_free_backup_area F -GLIBC_2.0 _IO_fsetpos F -GLIBC_2.0 _IO_ftell F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 _IO_fwrite F -GLIBC_2.0 _IO_getc F -GLIBC_2.0 _IO_getline F -GLIBC_2.0 _IO_gets F -GLIBC_2.0 _IO_init F -GLIBC_2.0 _IO_init_marker F -GLIBC_2.0 _IO_link_in F -GLIBC_2.0 _IO_list_all D 0x4 -GLIBC_2.0 _IO_marker_delta F -GLIBC_2.0 _IO_marker_difference F -GLIBC_2.0 _IO_padn F -GLIBC_2.0 _IO_peekc_locked F -GLIBC_2.0 _IO_popen F -GLIBC_2.0 _IO_printf F -GLIBC_2.0 _IO_proc_close F -GLIBC_2.0 _IO_proc_open F -GLIBC_2.0 _IO_putc F -GLIBC_2.0 _IO_puts F -GLIBC_2.0 _IO_remove_marker F -GLIBC_2.0 _IO_seekmark F -GLIBC_2.0 _IO_seekoff F -GLIBC_2.0 _IO_seekpos F -GLIBC_2.0 _IO_setb F -GLIBC_2.0 _IO_setbuffer F -GLIBC_2.0 _IO_setvbuf F -GLIBC_2.0 _IO_sgetn F -GLIBC_2.0 _IO_sprintf F -GLIBC_2.0 _IO_sputbackc F -GLIBC_2.0 _IO_sscanf F -GLIBC_2.0 _IO_stderr_ D 0x50 -GLIBC_2.0 _IO_stdin_ D 0x50 -GLIBC_2.0 _IO_stdout_ D 0x50 -GLIBC_2.0 _IO_str_init_readonly F -GLIBC_2.0 _IO_str_init_static F -GLIBC_2.0 _IO_str_overflow F -GLIBC_2.0 _IO_str_pbackfail F -GLIBC_2.0 _IO_str_seekoff F -GLIBC_2.0 _IO_str_underflow F -GLIBC_2.0 _IO_sungetc F -GLIBC_2.0 _IO_switch_to_get_mode F -GLIBC_2.0 _IO_un_link F -GLIBC_2.0 _IO_ungetc F -GLIBC_2.0 _IO_unsave_markers F -GLIBC_2.0 _IO_vfprintf F -GLIBC_2.0 _IO_vfscanf F -GLIBC_2.0 _IO_vsprintf F -GLIBC_2.0 __adjtimex F -GLIBC_2.0 __after_morecore_hook D 0x4 -GLIBC_2.0 __argz_count F -GLIBC_2.0 __argz_next F -GLIBC_2.0 __argz_stringify F -GLIBC_2.0 __ashldi3 F -GLIBC_2.0 __ashrdi3 F -GLIBC_2.0 __assert_fail F -GLIBC_2.0 __assert_perror_fail F -GLIBC_2.0 __bsd_getpgrp F -GLIBC_2.0 __bzero F -GLIBC_2.0 __check_rhosts_file D 0x4 -GLIBC_2.0 __clone F -GLIBC_2.0 __close F -GLIBC_2.0 __cmpdi2 F -GLIBC_2.0 __cmsg_nxthdr F -GLIBC_2.0 __connect F -GLIBC_2.0 __ctype32_b D 0x4 -GLIBC_2.0 __ctype_b D 0x4 -GLIBC_2.0 __ctype_get_mb_cur_max F -GLIBC_2.0 __ctype_tolower D 0x4 -GLIBC_2.0 __ctype_toupper D 0x4 -GLIBC_2.0 __curbrk D 0x4 -GLIBC_2.0 __daylight D 0x4 -GLIBC_2.0 __dcgettext F -GLIBC_2.0 __default_morecore F -GLIBC_2.0 __deregister_frame F -GLIBC_2.0 __deregister_frame_info F -GLIBC_2.0 __dgettext F -GLIBC_2.0 __divdi3 F -GLIBC_2.0 __dup2 F -GLIBC_2.0 __environ D 0x4 -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __ffs F -GLIBC_2.0 __finite F -GLIBC_2.0 __finitef F -GLIBC_2.0 __finitel F -GLIBC_2.0 __fixdfdi F -GLIBC_2.0 __fixsfdi F -GLIBC_2.0 __fixunsdfdi F -GLIBC_2.0 __fixunssfdi F -GLIBC_2.0 __floatdidf F -GLIBC_2.0 __floatdisf F -GLIBC_2.0 __fork F -GLIBC_2.0 __fpu_control D 0x4 -GLIBC_2.0 __frame_state_for F -GLIBC_2.0 __free_hook D 0x4 -GLIBC_2.0 __fxstat F -GLIBC_2.0 __getdelim F -GLIBC_2.0 __getpagesize F -GLIBC_2.0 __getpgid F -GLIBC_2.0 __getpid F -GLIBC_2.0 __gettimeofday F -GLIBC_2.0 __gmtime_r F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __isinf F -GLIBC_2.0 __isinff F -GLIBC_2.0 __isinfl F -GLIBC_2.0 __isnan F -GLIBC_2.0 __isnanf F -GLIBC_2.0 __isnanl F -GLIBC_2.0 __iswctype F -GLIBC_2.0 __ivaliduser F -GLIBC_2.0 __libc_calloc F -GLIBC_2.0 __libc_free F -GLIBC_2.0 __libc_init_first F -GLIBC_2.0 __libc_mallinfo F -GLIBC_2.0 __libc_malloc F -GLIBC_2.0 __libc_mallopt F -GLIBC_2.0 __libc_memalign F -GLIBC_2.0 __libc_pvalloc F -GLIBC_2.0 __libc_realloc F -GLIBC_2.0 __libc_start_main F -GLIBC_2.0 __libc_valloc F -GLIBC_2.0 __lseek F -GLIBC_2.0 __lshrdi3 F -GLIBC_2.0 __lxstat F -GLIBC_2.0 __malloc_hook D 0x4 -GLIBC_2.0 __malloc_initialize_hook D 0x4 -GLIBC_2.0 __mbrlen F -GLIBC_2.0 __mbrtowc F -GLIBC_2.0 __memalign_hook D 0x4 -GLIBC_2.0 __mempcpy F -GLIBC_2.0 __moddi3 F -GLIBC_2.0 __monstartup F -GLIBC_2.0 __morecore D 0x4 -GLIBC_2.0 __nss_configure_lookup F -GLIBC_2.0 __nss_database_lookup F -GLIBC_2.0 __nss_group_lookup F -GLIBC_2.0 __nss_hosts_lookup F -GLIBC_2.0 __nss_next F -GLIBC_2.0 __nss_passwd_lookup F -GLIBC_2.0 __open F -GLIBC_2.0 __overflow F -GLIBC_2.0 __pipe F -GLIBC_2.0 __printf_fp F -GLIBC_2.0 __profile_frequency F -GLIBC_2.0 __progname D 0x4 -GLIBC_2.0 __progname_full D 0x4 -GLIBC_2.0 __rcmd_errstr D 0x4 -GLIBC_2.0 __read F -GLIBC_2.0 __realloc_hook D 0x4 -GLIBC_2.0 __register_frame F -GLIBC_2.0 __register_frame_info F -GLIBC_2.0 __register_frame_info_table F -GLIBC_2.0 __register_frame_table F -GLIBC_2.0 __res_randomid F -GLIBC_2.0 __sbrk F -GLIBC_2.0 __sched_get_priority_max F -GLIBC_2.0 __sched_get_priority_min F -GLIBC_2.0 __sched_getparam F -GLIBC_2.0 __sched_getscheduler F -GLIBC_2.0 __sched_setscheduler F -GLIBC_2.0 __sched_yield F -GLIBC_2.0 __secure_getenv F -GLIBC_2.0 __select F -GLIBC_2.0 __send F -GLIBC_2.0 __setpgid F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __sigaddset F -GLIBC_2.0 __sigdelset F -GLIBC_2.0 __sigismember F -GLIBC_2.0 __sigpause F -GLIBC_2.0 __sigsetjmp F -GLIBC_2.0 __stpcpy F -GLIBC_2.0 __stpncpy F -GLIBC_2.0 __strcasecmp F -GLIBC_2.0 __strdup F -GLIBC_2.0 __strerror_r F -GLIBC_2.0 __strtod_internal F -GLIBC_2.0 __strtof_internal F -GLIBC_2.0 __strtok_r F -GLIBC_2.0 __strtol_internal F -GLIBC_2.0 __strtold_internal F -GLIBC_2.0 __strtoll_internal F -GLIBC_2.0 __strtoq_internal F -GLIBC_2.0 __strtoul_internal F -GLIBC_2.0 __strtoull_internal F -GLIBC_2.0 __strtouq_internal F -GLIBC_2.0 __sysv_signal F -GLIBC_2.0 __timezone D 0x4 -GLIBC_2.0 __tzname D 0x8 -GLIBC_2.0 __ucmpdi2 F -GLIBC_2.0 __udivdi3 F -GLIBC_2.0 __uflow F -GLIBC_2.0 __umoddi3 F -GLIBC_2.0 __underflow F -GLIBC_2.0 __vfscanf F -GLIBC_2.0 __vsnprintf F -GLIBC_2.0 __vsscanf F -GLIBC_2.0 __wait F -GLIBC_2.0 __waitpid F -GLIBC_2.0 __wcstod_internal F -GLIBC_2.0 __wcstof_internal F -GLIBC_2.0 __wcstol_internal F -GLIBC_2.0 __wcstold_internal F -GLIBC_2.0 __wcstoll_internal F -GLIBC_2.0 __wcstoul_internal F -GLIBC_2.0 __wcstoull_internal F -GLIBC_2.0 __write F -GLIBC_2.0 __xmknod F -GLIBC_2.0 __xpg_basename F -GLIBC_2.0 __xstat F -GLIBC_2.0 _environ D 0x4 -GLIBC_2.0 _exit F -GLIBC_2.0 _libc_intl_domainname D 0x5 -GLIBC_2.0 _longjmp F -GLIBC_2.0 _mcleanup F -GLIBC_2.0 _mcount F -GLIBC_2.0 _nl_default_dirname D 0x12 -GLIBC_2.0 _nl_domain_bindings D 0x4 -GLIBC_2.0 _nl_msg_cat_cntr D 0x4 -GLIBC_2.0 _null_auth D 0xc -GLIBC_2.0 _obstack D 0x4 -GLIBC_2.0 _obstack_allocated_p F -GLIBC_2.0 _obstack_begin F -GLIBC_2.0 _obstack_begin_1 F -GLIBC_2.0 _obstack_free F -GLIBC_2.0 _obstack_memory_used F -GLIBC_2.0 _obstack_newchunk F -GLIBC_2.0 _res D 0x200 -GLIBC_2.0 _rpc_dtablesize F -GLIBC_2.0 _seterr_reply F -GLIBC_2.0 _setjmp F -GLIBC_2.0 _sys_errlist D 0x1ec -GLIBC_2.0 _sys_nerr D 0x4 -GLIBC_2.0 _sys_siglist D 0x80 -GLIBC_2.0 _tolower F -GLIBC_2.0 _toupper F -GLIBC_2.0 a64l F -GLIBC_2.0 abort F -GLIBC_2.0 abs F -GLIBC_2.0 accept F -GLIBC_2.0 access F -GLIBC_2.0 acct F -GLIBC_2.0 addmntent F -GLIBC_2.0 adjtime F -GLIBC_2.0 adjtimex F -GLIBC_2.0 advance F -GLIBC_2.0 alarm F -GLIBC_2.0 alphasort F -GLIBC_2.0 argz_add F -GLIBC_2.0 argz_add_sep F -GLIBC_2.0 argz_append F -GLIBC_2.0 argz_count F -GLIBC_2.0 argz_create F -GLIBC_2.0 argz_create_sep F -GLIBC_2.0 argz_delete F -GLIBC_2.0 argz_extract F -GLIBC_2.0 argz_insert F -GLIBC_2.0 argz_next F -GLIBC_2.0 argz_replace F -GLIBC_2.0 argz_stringify F -GLIBC_2.0 asctime F -GLIBC_2.0 asctime_r F -GLIBC_2.0 asprintf F -GLIBC_2.0 atexit F -GLIBC_2.0 atof F -GLIBC_2.0 atoi F -GLIBC_2.0 atol F -GLIBC_2.0 atoll F -GLIBC_2.0 authnone_create F -GLIBC_2.0 authunix_create F -GLIBC_2.0 authunix_create_default F -GLIBC_2.0 basename F -GLIBC_2.0 bcmp F -GLIBC_2.0 bcopy F -GLIBC_2.0 bdflush F -GLIBC_2.0 bind F -GLIBC_2.0 bindresvport F -GLIBC_2.0 bindtextdomain F -GLIBC_2.0 brk F -GLIBC_2.0 bsd_signal F -GLIBC_2.0 bsearch F -GLIBC_2.0 btowc F -GLIBC_2.0 bzero F -GLIBC_2.0 calloc F -GLIBC_2.0 callrpc F -GLIBC_2.0 canonicalize_file_name F -GLIBC_2.0 catclose F -GLIBC_2.0 catgets F -GLIBC_2.0 catopen F -GLIBC_2.0 cfgetispeed F -GLIBC_2.0 cfgetospeed F -GLIBC_2.0 cfmakeraw F -GLIBC_2.0 cfree F -GLIBC_2.0 cfsetispeed F -GLIBC_2.0 cfsetospeed F -GLIBC_2.0 cfsetspeed F -GLIBC_2.0 chdir F -GLIBC_2.0 chflags F -GLIBC_2.0 chmod F -GLIBC_2.0 chown F -GLIBC_2.0 chroot F -GLIBC_2.0 clearenv F -GLIBC_2.0 clearerr F -GLIBC_2.0 clearerr_unlocked F -GLIBC_2.0 clnt_broadcast F -GLIBC_2.0 clnt_create F -GLIBC_2.0 clnt_pcreateerror F -GLIBC_2.0 clnt_perrno F -GLIBC_2.0 clnt_perror F -GLIBC_2.0 clnt_spcreateerror F -GLIBC_2.0 clnt_sperrno F -GLIBC_2.0 clnt_sperror F -GLIBC_2.0 clntraw_create F -GLIBC_2.0 clnttcp_create F -GLIBC_2.0 clntudp_bufcreate F -GLIBC_2.0 clntudp_create F -GLIBC_2.0 clock F -GLIBC_2.0 clone F -GLIBC_2.0 close F -GLIBC_2.0 closedir F -GLIBC_2.0 closelog F -GLIBC_2.0 confstr F -GLIBC_2.0 connect F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 creat F -GLIBC_2.0 create_module F -GLIBC_2.0 ctermid F -GLIBC_2.0 ctime F -GLIBC_2.0 ctime_r F -GLIBC_2.0 cuserid F -GLIBC_2.0 daemon F -GLIBC_2.0 daylight D 0x4 -GLIBC_2.0 dcgettext F -GLIBC_2.0 delete_module F -GLIBC_2.0 dgettext F -GLIBC_2.0 difftime F -GLIBC_2.0 dirfd F -GLIBC_2.0 dirname F -GLIBC_2.0 div F -GLIBC_2.0 dprintf F -GLIBC_2.0 drand48 F -GLIBC_2.0 drand48_r F -GLIBC_2.0 dup F -GLIBC_2.0 dup2 F -GLIBC_2.0 dysize F -GLIBC_2.0 ecvt F -GLIBC_2.0 ecvt_r F -GLIBC_2.0 endaliasent F -GLIBC_2.0 endfsent F -GLIBC_2.0 endgrent F -GLIBC_2.0 endhostent F -GLIBC_2.0 endmntent F -GLIBC_2.0 endnetent F -GLIBC_2.0 endnetgrent F -GLIBC_2.0 endprotoent F -GLIBC_2.0 endpwent F -GLIBC_2.0 endrpcent F -GLIBC_2.0 endservent F -GLIBC_2.0 endspent F -GLIBC_2.0 endttyent F -GLIBC_2.0 endusershell F -GLIBC_2.0 endutent F -GLIBC_2.0 environ D 0x4 -GLIBC_2.0 envz_add F -GLIBC_2.0 envz_entry F -GLIBC_2.0 envz_get F -GLIBC_2.0 envz_merge F -GLIBC_2.0 envz_remove F -GLIBC_2.0 envz_strip F -GLIBC_2.0 erand48 F -GLIBC_2.0 erand48_r F -GLIBC_2.0 err F -GLIBC_2.0 error F -GLIBC_2.0 error_at_line F -GLIBC_2.0 error_message_count D 0x4 -GLIBC_2.0 error_one_per_line D 0x4 -GLIBC_2.0 error_print_progname D 0x4 -GLIBC_2.0 errx F -GLIBC_2.0 ether_aton F -GLIBC_2.0 ether_aton_r F -GLIBC_2.0 ether_hostton F -GLIBC_2.0 ether_line F -GLIBC_2.0 ether_ntoa F -GLIBC_2.0 ether_ntoa_r F -GLIBC_2.0 ether_ntohost F -GLIBC_2.0 euidaccess F -GLIBC_2.0 execl F -GLIBC_2.0 execle F -GLIBC_2.0 execlp F -GLIBC_2.0 execv F -GLIBC_2.0 execve F -GLIBC_2.0 execvp F -GLIBC_2.0 exit F -GLIBC_2.0 fchdir F -GLIBC_2.0 fchflags F -GLIBC_2.0 fchmod F -GLIBC_2.0 fchown F -GLIBC_2.0 fclose F -GLIBC_2.0 fcloseall F -GLIBC_2.0 fcntl F -GLIBC_2.0 fcvt F -GLIBC_2.0 fcvt_r F -GLIBC_2.0 fdatasync F -GLIBC_2.0 fdopen F -GLIBC_2.0 feof F -GLIBC_2.0 feof_unlocked F -GLIBC_2.0 ferror F -GLIBC_2.0 ferror_unlocked F -GLIBC_2.0 fexecve F -GLIBC_2.0 fflush F -GLIBC_2.0 fflush_unlocked F -GLIBC_2.0 ffs F -GLIBC_2.0 fgetc F -GLIBC_2.0 fgetgrent F -GLIBC_2.0 fgetgrent_r F -GLIBC_2.0 fgetpos F -GLIBC_2.0 fgetpwent F -GLIBC_2.0 fgetpwent_r F -GLIBC_2.0 fgets F -GLIBC_2.0 fgetspent F -GLIBC_2.0 fgetspent_r F -GLIBC_2.0 fileno F -GLIBC_2.0 fileno_unlocked F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 flock F -GLIBC_2.0 flockfile F -GLIBC_2.0 fnmatch F -GLIBC_2.0 fopen F -GLIBC_2.0 fopencookie F -GLIBC_2.0 fork F -GLIBC_2.0 fpathconf F -GLIBC_2.0 fprintf F -GLIBC_2.0 fputc F -GLIBC_2.0 fputc_unlocked F -GLIBC_2.0 fputs F -GLIBC_2.0 fread F -GLIBC_2.0 free F -GLIBC_2.0 freeaddrinfo F -GLIBC_2.0 freopen F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 fscanf F -GLIBC_2.0 fseek F -GLIBC_2.0 fsetpos F -GLIBC_2.0 fstatfs F -GLIBC_2.0 fsync F -GLIBC_2.0 ftell F -GLIBC_2.0 ftime F -GLIBC_2.0 ftok F -GLIBC_2.0 ftruncate F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 fts_children F -GLIBC_2.0 fts_close F -GLIBC_2.0 fts_open F -GLIBC_2.0 fts_read F -GLIBC_2.0 fts_set F -GLIBC_2.0 ftw F -GLIBC_2.0 funlockfile F -GLIBC_2.0 fwrite F -GLIBC_2.0 gcvt F -GLIBC_2.0 get_avphys_pages F -GLIBC_2.0 get_current_dir_name F -GLIBC_2.0 get_kernel_syms F -GLIBC_2.0 get_myaddress F -GLIBC_2.0 get_nprocs F -GLIBC_2.0 get_nprocs_conf F -GLIBC_2.0 get_phys_pages F -GLIBC_2.0 getaddrinfo F -GLIBC_2.0 getaliasbyname F -GLIBC_2.0 getaliasbyname_r F -GLIBC_2.0 getaliasent F -GLIBC_2.0 getaliasent_r F -GLIBC_2.0 getc F -GLIBC_2.0 getc_unlocked F -GLIBC_2.0 getchar F -GLIBC_2.0 getchar_unlocked F -GLIBC_2.0 getcwd F -GLIBC_2.0 getdelim F -GLIBC_2.0 getdirentries F -GLIBC_2.0 getdomainname F -GLIBC_2.0 getdtablesize F -GLIBC_2.0 getegid F -GLIBC_2.0 getenv F -GLIBC_2.0 geteuid F -GLIBC_2.0 getfsent F -GLIBC_2.0 getfsfile F -GLIBC_2.0 getfsspec F -GLIBC_2.0 getgid F -GLIBC_2.0 getgrent F -GLIBC_2.0 getgrent_r F -GLIBC_2.0 getgrgid F -GLIBC_2.0 getgrgid_r F -GLIBC_2.0 getgrnam F -GLIBC_2.0 getgrnam_r F -GLIBC_2.0 getgroups F -GLIBC_2.0 gethostbyaddr F -GLIBC_2.0 gethostbyaddr_r F -GLIBC_2.0 gethostbyname F -GLIBC_2.0 gethostbyname2 F -GLIBC_2.0 gethostbyname2_r F -GLIBC_2.0 gethostbyname_r F -GLIBC_2.0 gethostent F -GLIBC_2.0 gethostent_r F -GLIBC_2.0 gethostid F -GLIBC_2.0 gethostname F -GLIBC_2.0 getitimer F -GLIBC_2.0 getline F -GLIBC_2.0 getlogin F -GLIBC_2.0 getlogin_r F -GLIBC_2.0 getmntent F -GLIBC_2.0 getmntent_r F -GLIBC_2.0 getnetbyaddr F -GLIBC_2.0 getnetbyaddr_r F -GLIBC_2.0 getnetbyname F -GLIBC_2.0 getnetbyname_r F -GLIBC_2.0 getnetent F -GLIBC_2.0 getnetent_r F -GLIBC_2.0 getnetgrent F -GLIBC_2.0 getnetgrent_r F -GLIBC_2.0 getopt F -GLIBC_2.0 getopt_long F -GLIBC_2.0 getopt_long_only F -GLIBC_2.0 getpagesize F -GLIBC_2.0 getpass F -GLIBC_2.0 getpeername F -GLIBC_2.0 getpgid F -GLIBC_2.0 getpgrp F -GLIBC_2.0 getpid F -GLIBC_2.0 getppid F -GLIBC_2.0 getpriority F -GLIBC_2.0 getprotobyname F -GLIBC_2.0 getprotobyname_r F -GLIBC_2.0 getprotobynumber F -GLIBC_2.0 getprotobynumber_r F -GLIBC_2.0 getprotoent F -GLIBC_2.0 getprotoent_r F -GLIBC_2.0 getpublickey F -GLIBC_2.0 getpw F -GLIBC_2.0 getpwent F -GLIBC_2.0 getpwent_r F -GLIBC_2.0 getpwnam F -GLIBC_2.0 getpwnam_r F -GLIBC_2.0 getpwuid F -GLIBC_2.0 getpwuid_r F -GLIBC_2.0 getresgid F -GLIBC_2.0 getresuid F -GLIBC_2.0 getrlimit F -GLIBC_2.0 getrpcbyname F -GLIBC_2.0 getrpcbyname_r F -GLIBC_2.0 getrpcbynumber F -GLIBC_2.0 getrpcbynumber_r F -GLIBC_2.0 getrpcent F -GLIBC_2.0 getrpcent_r F -GLIBC_2.0 getrpcport F -GLIBC_2.0 getrusage F -GLIBC_2.0 gets F -GLIBC_2.0 getsecretkey F -GLIBC_2.0 getservbyname F -GLIBC_2.0 getservbyname_r F -GLIBC_2.0 getservbyport F -GLIBC_2.0 getservbyport_r F -GLIBC_2.0 getservent F -GLIBC_2.0 getservent_r F -GLIBC_2.0 getsid F -GLIBC_2.0 getsockname F -GLIBC_2.0 getsockopt F -GLIBC_2.0 getspent F -GLIBC_2.0 getspent_r F -GLIBC_2.0 getspnam F -GLIBC_2.0 getspnam_r F -GLIBC_2.0 getsubopt F -GLIBC_2.0 gettext F -GLIBC_2.0 gettimeofday F -GLIBC_2.0 getttyent F -GLIBC_2.0 getttynam F -GLIBC_2.0 getuid F -GLIBC_2.0 getusershell F -GLIBC_2.0 getutent F -GLIBC_2.0 getutent_r F -GLIBC_2.0 getutid F -GLIBC_2.0 getutid_r F -GLIBC_2.0 getutline F -GLIBC_2.0 getutline_r F -GLIBC_2.0 getw F -GLIBC_2.0 getwd F -GLIBC_2.0 glob F -GLIBC_2.0 glob_pattern_p F -GLIBC_2.0 globfree F -GLIBC_2.0 gmtime F -GLIBC_2.0 gmtime_r F -GLIBC_2.0 group_member F -GLIBC_2.0 gsignal F -GLIBC_2.0 gtty F -GLIBC_2.0 h_errlist D 0x14 -GLIBC_2.0 h_nerr D 0x4 -GLIBC_2.0 hasmntopt F -GLIBC_2.0 hcreate F -GLIBC_2.0 hcreate_r F -GLIBC_2.0 hdestroy F -GLIBC_2.0 hdestroy_r F -GLIBC_2.0 herror F -GLIBC_2.0 hsearch F -GLIBC_2.0 hsearch_r F -GLIBC_2.0 hstrerror F -GLIBC_2.0 htonl F -GLIBC_2.0 htons F -GLIBC_2.0 index F -GLIBC_2.0 inet_addr F -GLIBC_2.0 inet_aton F -GLIBC_2.0 inet_lnaof F -GLIBC_2.0 inet_makeaddr F -GLIBC_2.0 inet_netof F -GLIBC_2.0 inet_network F -GLIBC_2.0 inet_nsap_addr F -GLIBC_2.0 inet_nsap_ntoa F -GLIBC_2.0 inet_ntoa F -GLIBC_2.0 inet_ntop F -GLIBC_2.0 inet_pton F -GLIBC_2.0 init_module F -GLIBC_2.0 initgroups F -GLIBC_2.0 initstate F -GLIBC_2.0 initstate_r F -GLIBC_2.0 innetgr F -GLIBC_2.0 insque F -GLIBC_2.0 ioctl F -GLIBC_2.0 iruserok F -GLIBC_2.0 isalnum F -GLIBC_2.0 isalpha F -GLIBC_2.0 isascii F -GLIBC_2.0 isatty F -GLIBC_2.0 isblank F -GLIBC_2.0 iscntrl F -GLIBC_2.0 isdigit F -GLIBC_2.0 isfdtype F -GLIBC_2.0 isgraph F -GLIBC_2.0 isinf F -GLIBC_2.0 isinff F -GLIBC_2.0 isinfl F -GLIBC_2.0 islower F -GLIBC_2.0 isnan F -GLIBC_2.0 isnanf F -GLIBC_2.0 isnanl F -GLIBC_2.0 isprint F -GLIBC_2.0 ispunct F -GLIBC_2.0 isspace F -GLIBC_2.0 isupper F -GLIBC_2.0 iswalnum F -GLIBC_2.0 iswalpha F -GLIBC_2.0 iswcntrl F -GLIBC_2.0 iswctype F -GLIBC_2.0 iswdigit F -GLIBC_2.0 iswgraph F -GLIBC_2.0 iswlower F -GLIBC_2.0 iswprint F -GLIBC_2.0 iswpunct F -GLIBC_2.0 iswspace F -GLIBC_2.0 iswupper F -GLIBC_2.0 iswxdigit F -GLIBC_2.0 isxdigit F -GLIBC_2.0 jrand48 F -GLIBC_2.0 jrand48_r F -GLIBC_2.0 kill F -GLIBC_2.0 killpg F -GLIBC_2.0 klogctl F -GLIBC_2.0 l64a F -GLIBC_2.0 labs F -GLIBC_2.0 lchown F -GLIBC_2.0 lckpwdf F -GLIBC_2.0 lcong48 F -GLIBC_2.0 lcong48_r F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 ldiv F -GLIBC_2.0 lfind F -GLIBC_2.0 link F -GLIBC_2.0 listen F -GLIBC_2.0 llabs F -GLIBC_2.0 lldiv F -GLIBC_2.0 llseek F -GLIBC_2.0 loc1 D 0x4 -GLIBC_2.0 loc2 D 0x4 -GLIBC_2.0 localeconv F -GLIBC_2.0 localtime F -GLIBC_2.0 localtime_r F -GLIBC_2.0 lockf F -GLIBC_2.0 locs D 0x4 -GLIBC_2.0 longjmp F -GLIBC_2.0 lrand48 F -GLIBC_2.0 lrand48_r F -GLIBC_2.0 lsearch F -GLIBC_2.0 lseek F -GLIBC_2.0 madvise F -GLIBC_2.0 mallinfo F -GLIBC_2.0 malloc F -GLIBC_2.0 malloc_get_state F -GLIBC_2.0 malloc_set_state F -GLIBC_2.0 malloc_stats F -GLIBC_2.0 malloc_trim F -GLIBC_2.0 malloc_usable_size F -GLIBC_2.0 mallopt F -GLIBC_2.0 mallwatch D 0x4 -GLIBC_2.0 mblen F -GLIBC_2.0 mbrlen F -GLIBC_2.0 mbrtowc F -GLIBC_2.0 mbsinit F -GLIBC_2.0 mbsnrtowcs F -GLIBC_2.0 mbsrtowcs F -GLIBC_2.0 mbstowcs F -GLIBC_2.0 mbtowc F -GLIBC_2.0 mcheck F -GLIBC_2.0 memalign F -GLIBC_2.0 memccpy F -GLIBC_2.0 memchr F -GLIBC_2.0 memcmp F -GLIBC_2.0 memcpy F -GLIBC_2.0 memfrob F -GLIBC_2.0 memmem F -GLIBC_2.0 memmove F -GLIBC_2.0 memset F -GLIBC_2.0 mkdir F -GLIBC_2.0 mkfifo F -GLIBC_2.0 mkstemp F -GLIBC_2.0 mktemp F -GLIBC_2.0 mktime F -GLIBC_2.0 mlock F -GLIBC_2.0 mlockall F -GLIBC_2.0 mmap F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 monstartup F -GLIBC_2.0 mount F -GLIBC_2.0 mprobe F -GLIBC_2.0 mprotect F -GLIBC_2.0 mrand48 F -GLIBC_2.0 mrand48_r F -GLIBC_2.0 mremap F -GLIBC_2.0 msgctl F -GLIBC_2.0 msgget F -GLIBC_2.0 msgrcv F -GLIBC_2.0 msgsnd F -GLIBC_2.0 msync F -GLIBC_2.0 mtrace F -GLIBC_2.0 munlock F -GLIBC_2.0 munlockall F -GLIBC_2.0 munmap F -GLIBC_2.0 muntrace F -GLIBC_2.0 nanosleep F -GLIBC_2.0 nfsservctl F -GLIBC_2.0 nice F -GLIBC_2.0 nl_langinfo F -GLIBC_2.0 nrand48 F -GLIBC_2.0 nrand48_r F -GLIBC_2.0 ntohl F -GLIBC_2.0 ntohs F -GLIBC_2.0 obstack_alloc_failed_handler D 0x4 -GLIBC_2.0 obstack_exit_failure D 0x4 -GLIBC_2.0 obstack_free F -GLIBC_2.0 obstack_printf F -GLIBC_2.0 obstack_vprintf F -GLIBC_2.0 on_exit F -GLIBC_2.0 open F -GLIBC_2.0 open_memstream F -GLIBC_2.0 opendir F -GLIBC_2.0 openlog F -GLIBC_2.0 optarg D 0x4 -GLIBC_2.0 opterr D 0x4 -GLIBC_2.0 optind D 0x4 -GLIBC_2.0 optopt D 0x4 -GLIBC_2.0 parse_printf_format F -GLIBC_2.0 pathconf F -GLIBC_2.0 pause F -GLIBC_2.0 pclose F -GLIBC_2.0 perror F -GLIBC_2.0 personality F -GLIBC_2.0 pipe F -GLIBC_2.0 pmap_getmaps F -GLIBC_2.0 pmap_getport F -GLIBC_2.0 pmap_rmtcall F -GLIBC_2.0 pmap_set F -GLIBC_2.0 pmap_unset F -GLIBC_2.0 poll F -GLIBC_2.0 popen F -GLIBC_2.0 prctl F -GLIBC_2.0 printf F -GLIBC_2.0 profil F -GLIBC_2.0 program_invocation_name D 0x4 -GLIBC_2.0 program_invocation_short_name D 0x4 -GLIBC_2.0 pselect F -GLIBC_2.0 psignal F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 ptrace F -GLIBC_2.0 putc F -GLIBC_2.0 putc_unlocked F -GLIBC_2.0 putchar F -GLIBC_2.0 putchar_unlocked F -GLIBC_2.0 putenv F -GLIBC_2.0 putpwent F -GLIBC_2.0 puts F -GLIBC_2.0 putspent F -GLIBC_2.0 pututline F -GLIBC_2.0 putw F -GLIBC_2.0 pvalloc F -GLIBC_2.0 qecvt F -GLIBC_2.0 qecvt_r F -GLIBC_2.0 qfcvt F -GLIBC_2.0 qfcvt_r F -GLIBC_2.0 qgcvt F -GLIBC_2.0 qsort F -GLIBC_2.0 query_module F -GLIBC_2.0 quotactl F -GLIBC_2.0 raise F -GLIBC_2.0 rand F -GLIBC_2.0 rand_r F -GLIBC_2.0 random F -GLIBC_2.0 random_r F -GLIBC_2.0 rcmd F -GLIBC_2.0 re_comp F -GLIBC_2.0 re_compile_fastmap F -GLIBC_2.0 re_compile_pattern F -GLIBC_2.0 re_exec F -GLIBC_2.0 re_match F -GLIBC_2.0 re_match_2 F -GLIBC_2.0 re_max_failures D 0x4 -GLIBC_2.0 re_search F -GLIBC_2.0 re_search_2 F -GLIBC_2.0 re_set_registers F -GLIBC_2.0 re_set_syntax F -GLIBC_2.0 re_syntax_options D 0x4 -GLIBC_2.0 read F -GLIBC_2.0 readdir F -GLIBC_2.0 readdir_r F -GLIBC_2.0 readlink F -GLIBC_2.0 readv F -GLIBC_2.0 realloc F -GLIBC_2.0 realpath F -GLIBC_2.0 reboot F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 regcomp F -GLIBC_2.0 regerror F -GLIBC_2.0 regexec F -GLIBC_2.0 regfree F -GLIBC_2.0 register_printf_function F -GLIBC_2.0 registerrpc F -GLIBC_2.0 remove F -GLIBC_2.0 remque F -GLIBC_2.0 rename F -GLIBC_2.0 res_init F -GLIBC_2.0 revoke F -GLIBC_2.0 rewind F -GLIBC_2.0 rewinddir F -GLIBC_2.0 rexec F -GLIBC_2.0 rexecoptions D 0x4 -GLIBC_2.0 rindex F -GLIBC_2.0 rmdir F -GLIBC_2.0 rpc_createerr D 0x10 -GLIBC_2.0 rpmatch F -GLIBC_2.0 rresvport F -GLIBC_2.0 ruserok F -GLIBC_2.0 ruserpass F -GLIBC_2.0 sbrk F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 scandir F -GLIBC_2.0 scanf F -GLIBC_2.0 sched_get_priority_max F -GLIBC_2.0 sched_get_priority_min F -GLIBC_2.0 sched_getparam F -GLIBC_2.0 sched_getscheduler F -GLIBC_2.0 sched_rr_get_interval F -GLIBC_2.0 sched_setparam F -GLIBC_2.0 sched_setscheduler F -GLIBC_2.0 sched_yield F -GLIBC_2.0 seed48 F -GLIBC_2.0 seed48_r F -GLIBC_2.0 seekdir F -GLIBC_2.0 select F -GLIBC_2.0 semctl F -GLIBC_2.0 semget F -GLIBC_2.0 semop F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 setaliasent F -GLIBC_2.0 setbuf F -GLIBC_2.0 setbuffer F -GLIBC_2.0 setcontext F -GLIBC_2.0 setdomainname F -GLIBC_2.0 setegid F -GLIBC_2.0 setenv F -GLIBC_2.0 seteuid F -GLIBC_2.0 setfsent F -GLIBC_2.0 setfsgid F -GLIBC_2.0 setfsuid F -GLIBC_2.0 setgid F -GLIBC_2.0 setgrent F -GLIBC_2.0 setgroups F -GLIBC_2.0 sethostent F -GLIBC_2.0 sethostid F -GLIBC_2.0 sethostname F -GLIBC_2.0 setitimer F -GLIBC_2.0 setjmp F -GLIBC_2.0 setlinebuf F -GLIBC_2.0 setlocale F -GLIBC_2.0 setlogin F -GLIBC_2.0 setlogmask F -GLIBC_2.0 setmntent F -GLIBC_2.0 setnetent F -GLIBC_2.0 setnetgrent F -GLIBC_2.0 setpgid F -GLIBC_2.0 setpgrp F -GLIBC_2.0 setpriority F -GLIBC_2.0 setprotoent F -GLIBC_2.0 setpwent F -GLIBC_2.0 setregid F -GLIBC_2.0 setresgid F -GLIBC_2.0 setresuid F -GLIBC_2.0 setreuid F -GLIBC_2.0 setrlimit F -GLIBC_2.0 setrpcent F -GLIBC_2.0 setservent F -GLIBC_2.0 setsid F -GLIBC_2.0 setsockopt F -GLIBC_2.0 setspent F -GLIBC_2.0 setstate F -GLIBC_2.0 setstate_r F -GLIBC_2.0 settimeofday F -GLIBC_2.0 setttyent F -GLIBC_2.0 setuid F -GLIBC_2.0 setusershell F -GLIBC_2.0 setutent F -GLIBC_2.0 setvbuf F -GLIBC_2.0 sgetspent F -GLIBC_2.0 sgetspent_r F -GLIBC_2.0 shmat F -GLIBC_2.0 shmctl F -GLIBC_2.0 shmdt F -GLIBC_2.0 shmget F -GLIBC_2.0 shutdown F -GLIBC_2.0 sigaction F -GLIBC_2.0 sigaddset F -GLIBC_2.0 sigaltstack F -GLIBC_2.0 sigandset F -GLIBC_2.0 sigblock F -GLIBC_2.0 sigdelset F -GLIBC_2.0 sigemptyset F -GLIBC_2.0 sigfillset F -GLIBC_2.0 siggetmask F -GLIBC_2.0 siginterrupt F -GLIBC_2.0 sigisemptyset F -GLIBC_2.0 sigismember F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 signal F -GLIBC_2.0 sigorset F -GLIBC_2.0 sigpause F -GLIBC_2.0 sigpending F -GLIBC_2.0 sigprocmask F -GLIBC_2.0 sigreturn F -GLIBC_2.0 sigsetmask F -GLIBC_2.0 sigstack F -GLIBC_2.0 sigsuspend F -GLIBC_2.0 sigvec F -GLIBC_2.0 sigwait F -GLIBC_2.0 sleep F -GLIBC_2.0 snprintf F -GLIBC_2.0 socket F -GLIBC_2.0 socketpair F -GLIBC_2.0 sprintf F -GLIBC_2.0 srand F -GLIBC_2.0 srand48 F -GLIBC_2.0 srand48_r F -GLIBC_2.0 srandom F -GLIBC_2.0 srandom_r F -GLIBC_2.0 sscanf F -GLIBC_2.0 ssignal F -GLIBC_2.0 sstk F -GLIBC_2.0 statfs F -GLIBC_2.0 stderr D 0x4 -GLIBC_2.0 stdin D 0x4 -GLIBC_2.0 stdout D 0x4 -GLIBC_2.0 step F -GLIBC_2.0 stime F -GLIBC_2.0 stpcpy F -GLIBC_2.0 stpncpy F -GLIBC_2.0 strcasecmp F -GLIBC_2.0 strcat F -GLIBC_2.0 strchr F -GLIBC_2.0 strcmp F -GLIBC_2.0 strcoll F -GLIBC_2.0 strcpy F -GLIBC_2.0 strcspn F -GLIBC_2.0 strdup F -GLIBC_2.0 strerror F -GLIBC_2.0 strerror_r F -GLIBC_2.0 strfmon F -GLIBC_2.0 strfry F -GLIBC_2.0 strftime F -GLIBC_2.0 strlen F -GLIBC_2.0 strncasecmp F -GLIBC_2.0 strncat F -GLIBC_2.0 strncmp F -GLIBC_2.0 strncpy F -GLIBC_2.0 strndup F -GLIBC_2.0 strnlen F -GLIBC_2.0 strpbrk F -GLIBC_2.0 strptime F -GLIBC_2.0 strrchr F -GLIBC_2.0 strsep F -GLIBC_2.0 strsignal F -GLIBC_2.0 strspn F -GLIBC_2.0 strstr F -GLIBC_2.0 strtod F -GLIBC_2.0 strtof F -GLIBC_2.0 strtok F -GLIBC_2.0 strtok_r F -GLIBC_2.0 strtol F -GLIBC_2.0 strtold F -GLIBC_2.0 strtoll F -GLIBC_2.0 strtoq F -GLIBC_2.0 strtoul F -GLIBC_2.0 strtoull F -GLIBC_2.0 strtouq F -GLIBC_2.0 strxfrm F -GLIBC_2.0 stty F -GLIBC_2.0 svc_exit F -GLIBC_2.0 svc_fdset D 0x80 -GLIBC_2.0 svc_getreq F -GLIBC_2.0 svc_getreqset F -GLIBC_2.0 svc_register F -GLIBC_2.0 svc_run F -GLIBC_2.0 svc_sendreply F -GLIBC_2.0 svc_unregister F -GLIBC_2.0 svcauthdes_stats D 0xc -GLIBC_2.0 svcerr_auth F -GLIBC_2.0 svcerr_decode F -GLIBC_2.0 svcerr_noproc F -GLIBC_2.0 svcerr_noprog F -GLIBC_2.0 svcerr_progvers F -GLIBC_2.0 svcerr_systemerr F -GLIBC_2.0 svcerr_weakauth F -GLIBC_2.0 svcfd_create F -GLIBC_2.0 svcraw_create F -GLIBC_2.0 svctcp_create F -GLIBC_2.0 svcudp_bufcreate F -GLIBC_2.0 svcudp_create F -GLIBC_2.0 svcudp_enablecache F -GLIBC_2.0 swab F -GLIBC_2.0 swapoff F -GLIBC_2.0 swapon F -GLIBC_2.0 symlink F -GLIBC_2.0 sync F -GLIBC_2.0 sys_errlist D 0x1ec -GLIBC_2.0 sys_nerr D 0x4 -GLIBC_2.0 sys_sigabbrev D 0x80 -GLIBC_2.0 sys_siglist D 0x80 -GLIBC_2.0 syscall F -GLIBC_2.0 sysconf F -GLIBC_2.0 sysctl F -GLIBC_2.0 sysinfo F -GLIBC_2.0 syslog F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 tcflow F -GLIBC_2.0 tcflush F -GLIBC_2.0 tcgetattr F -GLIBC_2.0 tcgetpgrp F -GLIBC_2.0 tcsendbreak F -GLIBC_2.0 tcsetattr F -GLIBC_2.0 tcsetpgrp F -GLIBC_2.0 tdelete F -GLIBC_2.0 telldir F -GLIBC_2.0 tempnam F -GLIBC_2.0 textdomain F -GLIBC_2.0 tfind F -GLIBC_2.0 time F -GLIBC_2.0 timegm F -GLIBC_2.0 timelocal F -GLIBC_2.0 times F -GLIBC_2.0 timezone D 0x4 -GLIBC_2.0 tmpfile F -GLIBC_2.0 tmpnam F -GLIBC_2.0 tmpnam_r F -GLIBC_2.0 toascii F -GLIBC_2.0 tolower F -GLIBC_2.0 toupper F -GLIBC_2.0 towctrans F -GLIBC_2.0 towlower F -GLIBC_2.0 towupper F -GLIBC_2.0 tr_break F -GLIBC_2.0 truncate F -GLIBC_2.0 tsearch F -GLIBC_2.0 ttyname F -GLIBC_2.0 ttyname_r F -GLIBC_2.0 ttyslot F -GLIBC_2.0 twalk F -GLIBC_2.0 tzname D 0x8 -GLIBC_2.0 tzset F -GLIBC_2.0 ualarm F -GLIBC_2.0 ulckpwdf F -GLIBC_2.0 ulimit F -GLIBC_2.0 umask F -GLIBC_2.0 umount F -GLIBC_2.0 uname F -GLIBC_2.0 ungetc F -GLIBC_2.0 unlink F -GLIBC_2.0 unsetenv F -GLIBC_2.0 updwtmp F -GLIBC_2.0 uselib F -GLIBC_2.0 usleep F -GLIBC_2.0 ustat F -GLIBC_2.0 utime F -GLIBC_2.0 utimes F -GLIBC_2.0 utmpname F -GLIBC_2.0 valloc F -GLIBC_2.0 vasprintf F -GLIBC_2.0 vdprintf F -GLIBC_2.0 verr F -GLIBC_2.0 verrx F -GLIBC_2.0 vfork F -GLIBC_2.0 vfprintf F -GLIBC_2.0 vfscanf F -GLIBC_2.0 vhangup F -GLIBC_2.0 vlimit F -GLIBC_2.0 vprintf F -GLIBC_2.0 vscanf F -GLIBC_2.0 vsnprintf F -GLIBC_2.0 vsprintf F -GLIBC_2.0 vsscanf F -GLIBC_2.0 vsyslog F -GLIBC_2.0 vtimes F -GLIBC_2.0 vwarn F -GLIBC_2.0 vwarnx F -GLIBC_2.0 wait F -GLIBC_2.0 wait3 F -GLIBC_2.0 wait4 F -GLIBC_2.0 waitpid F -GLIBC_2.0 warn F -GLIBC_2.0 warnx F -GLIBC_2.0 wcpcpy F -GLIBC_2.0 wcpncpy F -GLIBC_2.0 wcrtomb F -GLIBC_2.0 wcscat F -GLIBC_2.0 wcschr F -GLIBC_2.0 wcscmp F -GLIBC_2.0 wcscoll F -GLIBC_2.0 wcscpy F -GLIBC_2.0 wcscspn F -GLIBC_2.0 wcsdup F -GLIBC_2.0 wcslen F -GLIBC_2.0 wcsncat F -GLIBC_2.0 wcsncmp F -GLIBC_2.0 wcsncpy F -GLIBC_2.0 wcsnrtombs F -GLIBC_2.0 wcspbrk F -GLIBC_2.0 wcsrchr F -GLIBC_2.0 wcsrtombs F -GLIBC_2.0 wcsspn F -GLIBC_2.0 wcsstr F -GLIBC_2.0 wcstod F -GLIBC_2.0 wcstof F -GLIBC_2.0 wcstok F -GLIBC_2.0 wcstol F -GLIBC_2.0 wcstold F -GLIBC_2.0 wcstombs F -GLIBC_2.0 wcstoq F -GLIBC_2.0 wcstoul F -GLIBC_2.0 wcstouq F -GLIBC_2.0 wcswidth F -GLIBC_2.0 wcsxfrm F -GLIBC_2.0 wctob F -GLIBC_2.0 wctomb F -GLIBC_2.0 wctrans F -GLIBC_2.0 wctype F -GLIBC_2.0 wcwidth F -GLIBC_2.0 wmemchr F -GLIBC_2.0 wmemcmp F -GLIBC_2.0 wmemcpy F -GLIBC_2.0 wmemmove F -GLIBC_2.0 wmemset F -GLIBC_2.0 write F -GLIBC_2.0 writev F -GLIBC_2.0 xdr_accepted_reply F -GLIBC_2.0 xdr_array F -GLIBC_2.0 xdr_authunix_parms F -GLIBC_2.0 xdr_bool F -GLIBC_2.0 xdr_bytes F -GLIBC_2.0 xdr_callhdr F -GLIBC_2.0 xdr_callmsg F -GLIBC_2.0 xdr_char F -GLIBC_2.0 xdr_cryptkeyarg F -GLIBC_2.0 xdr_cryptkeyarg2 F -GLIBC_2.0 xdr_cryptkeyres F -GLIBC_2.0 xdr_des_block F -GLIBC_2.0 xdr_double F -GLIBC_2.0 xdr_enum F -GLIBC_2.0 xdr_float F -GLIBC_2.0 xdr_free F -GLIBC_2.0 xdr_int F -GLIBC_2.0 xdr_key_netstarg F -GLIBC_2.0 xdr_key_netstres F -GLIBC_2.0 xdr_keybuf F -GLIBC_2.0 xdr_keystatus F -GLIBC_2.0 xdr_long F -GLIBC_2.0 xdr_netobj F -GLIBC_2.0 xdr_opaque F -GLIBC_2.0 xdr_opaque_auth F -GLIBC_2.0 xdr_pmap F -GLIBC_2.0 xdr_pmaplist F -GLIBC_2.0 xdr_pointer F -GLIBC_2.0 xdr_reference F -GLIBC_2.0 xdr_rejected_reply F -GLIBC_2.0 xdr_replymsg F -GLIBC_2.0 xdr_rmtcall_args F -GLIBC_2.0 xdr_rmtcallres F -GLIBC_2.0 xdr_short F -GLIBC_2.0 xdr_string F -GLIBC_2.0 xdr_u_char F -GLIBC_2.0 xdr_u_int F -GLIBC_2.0 xdr_u_long F -GLIBC_2.0 xdr_u_short F -GLIBC_2.0 xdr_union F -GLIBC_2.0 xdr_vector F -GLIBC_2.0 xdr_void F -GLIBC_2.0 xdr_wrapstring F -GLIBC_2.0 xdrmem_create F -GLIBC_2.0 xdrrec_create F -GLIBC_2.0 xdrrec_endofrecord F -GLIBC_2.0 xdrrec_eof F -GLIBC_2.0 xdrrec_skiprecord F -GLIBC_2.0 xdrstdio_create F -GLIBC_2.0 xencrypt F -GLIBC_2.0 xprt_register F -GLIBC_2.0 xprt_unregister F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 _IO_2_1_stderr_ D 0xa0 -GLIBC_2.1 _IO_2_1_stdin_ D 0xa0 -GLIBC_2.1 _IO_2_1_stdout_ D 0xa0 -GLIBC_2.1 _IO_do_write F -GLIBC_2.1 _IO_fclose F -GLIBC_2.1 _IO_fdopen F -GLIBC_2.1 _IO_fgetpos64 F -GLIBC_2.1 _IO_file_attach F -GLIBC_2.1 _IO_file_close_it F -GLIBC_2.1 _IO_file_finish F -GLIBC_2.1 _IO_file_fopen F -GLIBC_2.1 _IO_file_init F -GLIBC_2.1 _IO_file_overflow F -GLIBC_2.1 _IO_file_seekoff F -GLIBC_2.1 _IO_file_setbuf F -GLIBC_2.1 _IO_file_sync F -GLIBC_2.1 _IO_file_underflow F -GLIBC_2.1 _IO_file_write F -GLIBC_2.1 _IO_file_xsputn F -GLIBC_2.1 _IO_fopen F -GLIBC_2.1 _IO_fsetpos64 F -GLIBC_2.1 _IO_getline_info F -GLIBC_2.1 _IO_popen F -GLIBC_2.1 _IO_proc_close F -GLIBC_2.1 _IO_proc_open F -GLIBC_2.1 __asprintf F -GLIBC_2.1 __backtrace F -GLIBC_2.1 __backtrace_symbols F -GLIBC_2.1 __backtrace_symbols_fd F -GLIBC_2.1 __duplocale F -GLIBC_2.1 __freelocale F -GLIBC_2.1 __fxstat64 F -GLIBC_2.1 __isalnum_l F -GLIBC_2.1 __isalpha_l F -GLIBC_2.1 __isascii_l F -GLIBC_2.1 __isblank_l F -GLIBC_2.1 __iscntrl_l F -GLIBC_2.1 __isdigit_l F -GLIBC_2.1 __isgraph_l F -GLIBC_2.1 __islower_l F -GLIBC_2.1 __isprint_l F -GLIBC_2.1 __ispunct_l F -GLIBC_2.1 __isspace_l F -GLIBC_2.1 __isupper_l F -GLIBC_2.1 __iswalnum_l F -GLIBC_2.1 __iswalpha_l F -GLIBC_2.1 __iswblank_l F -GLIBC_2.1 __iswcntrl_l F -GLIBC_2.1 __iswctype_l F -GLIBC_2.1 __iswdigit_l F -GLIBC_2.1 __iswgraph_l F -GLIBC_2.1 __iswlower_l F -GLIBC_2.1 __iswprint_l F -GLIBC_2.1 __iswpunct_l F -GLIBC_2.1 __iswspace_l F -GLIBC_2.1 __iswupper_l F -GLIBC_2.1 __iswxdigit_l F -GLIBC_2.1 __isxdigit_l F -GLIBC_2.1 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.1 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.1 __key_gendes_LOCAL D 0x4 -GLIBC_2.1 __libc_allocate_rtsig F -GLIBC_2.1 __libc_current_sigrtmax F -GLIBC_2.1 __libc_current_sigrtmin F -GLIBC_2.1 __libc_freeres F -GLIBC_2.1 __libc_sa_len F -GLIBC_2.1 __lxstat64 F -GLIBC_2.1 __newlocale F -GLIBC_2.1 __poll F -GLIBC_2.1 __pread64 F -GLIBC_2.1 __pwrite64 F -GLIBC_2.1 __rawmemchr F -GLIBC_2.1 __signbit F -GLIBC_2.1 __signbitf F -GLIBC_2.1 __strcasecmp_l F -GLIBC_2.1 __strcasestr F -GLIBC_2.1 __strcoll_l F -GLIBC_2.1 __strfmon_l F -GLIBC_2.1 __strncasecmp_l F -GLIBC_2.1 __strtod_l F -GLIBC_2.1 __strtof_l F -GLIBC_2.1 __strtol_l F -GLIBC_2.1 __strtold_l F -GLIBC_2.1 __strtoll_l F -GLIBC_2.1 __strtoul_l F -GLIBC_2.1 __strtoull_l F -GLIBC_2.1 __strxfrm_l F -GLIBC_2.1 __toascii_l F -GLIBC_2.1 __tolower_l F -GLIBC_2.1 __toupper_l F -GLIBC_2.1 __towctrans F -GLIBC_2.1 __towctrans_l F -GLIBC_2.1 __towlower_l F -GLIBC_2.1 __towupper_l F -GLIBC_2.1 __wcscasecmp_l F -GLIBC_2.1 __wcscoll_l F -GLIBC_2.1 __wcsncasecmp_l F -GLIBC_2.1 __wcstod_l F -GLIBC_2.1 __wcstof_l F -GLIBC_2.1 __wcstol_l F -GLIBC_2.1 __wcstold_l F -GLIBC_2.1 __wcstoll_l F -GLIBC_2.1 __wcstoul_l F -GLIBC_2.1 __wcstoull_l F -GLIBC_2.1 __wcsxfrm_l F -GLIBC_2.1 __wctype_l F -GLIBC_2.1 __xstat64 F -GLIBC_2.1 _authenticate F -GLIBC_2.1 _dl_mcount_wrapper F -GLIBC_2.1 _dl_mcount_wrapper_check F -GLIBC_2.1 _sys_errlist D 0x1f4 -GLIBC_2.1 _sys_nerr D 0x4 -GLIBC_2.1 _sys_siglist D 0x100 -GLIBC_2.1 addseverity F -GLIBC_2.1 alphasort64 F -GLIBC_2.1 argp_err_exit_status D 0x4 -GLIBC_2.1 argp_error F -GLIBC_2.1 argp_failure F -GLIBC_2.1 argp_help F -GLIBC_2.1 argp_parse F -GLIBC_2.1 argp_program_bug_address D 0x4 -GLIBC_2.1 argp_program_version D 0x4 -GLIBC_2.1 argp_program_version_hook D 0x4 -GLIBC_2.1 argp_state_help F -GLIBC_2.1 argp_usage F -GLIBC_2.1 authdes_create F -GLIBC_2.1 authdes_getucred F -GLIBC_2.1 authdes_pk_create F -GLIBC_2.1 backtrace F -GLIBC_2.1 backtrace_symbols F -GLIBC_2.1 backtrace_symbols_fd F -GLIBC_2.1 capget F -GLIBC_2.1 capset F -GLIBC_2.1 cbc_crypt F -GLIBC_2.1 chown F -GLIBC_2.1 clntunix_create F -GLIBC_2.1 creat64 F -GLIBC_2.1 des_setparity F -GLIBC_2.1 ecb_crypt F -GLIBC_2.1 endutxent F -GLIBC_2.1 fattach F -GLIBC_2.1 fclose F -GLIBC_2.1 fdetach F -GLIBC_2.1 fdopen F -GLIBC_2.1 ffsl F -GLIBC_2.1 ffsll F -GLIBC_2.1 fgetc_unlocked F -GLIBC_2.1 fgetpos64 F -GLIBC_2.1 fgets_unlocked F -GLIBC_2.1 fmtmsg F -GLIBC_2.1 fopen F -GLIBC_2.1 fopen64 F -GLIBC_2.1 fputs_unlocked F -GLIBC_2.1 fread_unlocked F -GLIBC_2.1 freopen64 F -GLIBC_2.1 fseeko F -GLIBC_2.1 fseeko64 F -GLIBC_2.1 fsetpos64 F -GLIBC_2.1 fstatfs64 F -GLIBC_2.1 fstatvfs F -GLIBC_2.1 fstatvfs64 F -GLIBC_2.1 ftello F -GLIBC_2.1 ftello64 F -GLIBC_2.1 ftruncate64 F -GLIBC_2.1 ftw64 F -GLIBC_2.1 fwrite_unlocked F -GLIBC_2.1 gai_strerror F -GLIBC_2.1 getcontext F -GLIBC_2.1 getdate F -GLIBC_2.1 getdate_err D 0x4 -GLIBC_2.1 getdate_r F -GLIBC_2.1 getmsg F -GLIBC_2.1 getnameinfo F -GLIBC_2.1 getnetname F -GLIBC_2.1 getpmsg F -GLIBC_2.1 getpt F -GLIBC_2.1 getrlimit64 F -GLIBC_2.1 getutxent F -GLIBC_2.1 getutxid F -GLIBC_2.1 getutxline F -GLIBC_2.1 glob64 F -GLIBC_2.1 globfree64 F -GLIBC_2.1 gnu_get_libc_release F -GLIBC_2.1 gnu_get_libc_version F -GLIBC_2.1 grantpt F -GLIBC_2.1 host2netname F -GLIBC_2.1 iconv F -GLIBC_2.1 iconv_close F -GLIBC_2.1 iconv_open F -GLIBC_2.1 if_freenameindex F -GLIBC_2.1 if_indextoname F -GLIBC_2.1 if_nameindex F -GLIBC_2.1 if_nametoindex F -GLIBC_2.1 in6addr_any D 0x10 -GLIBC_2.1 in6addr_loopback D 0x10 -GLIBC_2.1 isastream F -GLIBC_2.1 iswblank F -GLIBC_2.1 key_decryptsession F -GLIBC_2.1 key_decryptsession_pk F -GLIBC_2.1 key_encryptsession F -GLIBC_2.1 key_encryptsession_pk F -GLIBC_2.1 key_gendes F -GLIBC_2.1 key_get_conv F -GLIBC_2.1 key_secretkey_is_set F -GLIBC_2.1 key_setnet F -GLIBC_2.1 key_setsecret F -GLIBC_2.1 lockf64 F -GLIBC_2.1 lseek64 F -GLIBC_2.1 makecontext F -GLIBC_2.1 mempcpy F -GLIBC_2.1 mmap64 F -GLIBC_2.1 netname2host F -GLIBC_2.1 netname2user F -GLIBC_2.1 nftw F -GLIBC_2.1 nftw64 F -GLIBC_2.1 ntp_adjtime F -GLIBC_2.1 ntp_gettime F -GLIBC_2.1 open64 F -GLIBC_2.1 passwd2des F -GLIBC_2.1 pclose F -GLIBC_2.1 popen F -GLIBC_2.1 pread F -GLIBC_2.1 pread64 F -GLIBC_2.1 printf_size F -GLIBC_2.1 printf_size_info F -GLIBC_2.1 pthread_attr_init F -GLIBC_2.1 ptsname F -GLIBC_2.1 ptsname_r F -GLIBC_2.1 putgrent F -GLIBC_2.1 putmsg F -GLIBC_2.1 putpmsg F -GLIBC_2.1 pututxline F -GLIBC_2.1 pwrite F -GLIBC_2.1 pwrite64 F -GLIBC_2.1 rawmemchr F -GLIBC_2.1 readdir64 F -GLIBC_2.1 readdir64_r F -GLIBC_2.1 rtime F -GLIBC_2.1 scandir64 F -GLIBC_2.1 sendfile F -GLIBC_2.1 setrlimit64 F -GLIBC_2.1 setutxent F -GLIBC_2.1 sighold F -GLIBC_2.1 sigignore F -GLIBC_2.1 sigqueue F -GLIBC_2.1 sigrelse F -GLIBC_2.1 sigset F -GLIBC_2.1 sigtimedwait F -GLIBC_2.1 sigwaitinfo F -GLIBC_2.1 statfs64 F -GLIBC_2.1 statvfs F -GLIBC_2.1 statvfs64 F -GLIBC_2.1 strcasestr F -GLIBC_2.1 strtoimax F -GLIBC_2.1 strtoumax F -GLIBC_2.1 strverscmp F -GLIBC_2.1 svcunix_create F -GLIBC_2.1 svcunixfd_create F -GLIBC_2.1 swapcontext F -GLIBC_2.1 sys_errlist D 0x1f4 -GLIBC_2.1 sys_nerr D 0x4 -GLIBC_2.1 sys_sigabbrev D 0x100 -GLIBC_2.1 sys_siglist D 0x100 -GLIBC_2.1 sysv_signal F -GLIBC_2.1 tcgetsid F -GLIBC_2.1 tdestroy F -GLIBC_2.1 tmpfile F -GLIBC_2.1 tmpfile64 F -GLIBC_2.1 truncate64 F -GLIBC_2.1 umount2 F -GLIBC_2.1 unlockpt F -GLIBC_2.1 updwtmpx F -GLIBC_2.1 user2netname F -GLIBC_2.1 utmpxname F -GLIBC_2.1 versionsort F -GLIBC_2.1 versionsort64 F -GLIBC_2.1 waitid F -GLIBC_2.1 wcscasecmp F -GLIBC_2.1 wcsncasecmp F -GLIBC_2.1 wcsnlen F -GLIBC_2.1 wcstoimax F -GLIBC_2.1 wcstoll F -GLIBC_2.1 wcstoull F -GLIBC_2.1 wcstoumax F -GLIBC_2.1 wcswcs F -GLIBC_2.1 wordexp F -GLIBC_2.1 wordfree F -GLIBC_2.1 xdecrypt F -GLIBC_2.1 xdr_authdes_cred F -GLIBC_2.1 xdr_authdes_verf F -GLIBC_2.1 xdr_getcredres F -GLIBC_2.1 xdr_int16_t F -GLIBC_2.1 xdr_int32_t F -GLIBC_2.1 xdr_int8_t F -GLIBC_2.1 xdr_netnamestr F -GLIBC_2.1 xdr_sizeof F -GLIBC_2.1 xdr_uint16_t F -GLIBC_2.1 xdr_uint32_t F -GLIBC_2.1 xdr_uint8_t F -GLIBC_2.1 xdr_unixcred F -GLIBC_2.1.1 GLIBC_2.1.1 A -GLIBC_2.1.1 _Exit F -GLIBC_2.1.1 __mempcpy_small F -GLIBC_2.1.1 __stpcpy_small F -GLIBC_2.1.1 __strcpy_small F -GLIBC_2.1.1 __strcspn_c1 F -GLIBC_2.1.1 __strcspn_c2 F -GLIBC_2.1.1 __strcspn_c3 F -GLIBC_2.1.1 __strpbrk_c2 F -GLIBC_2.1.1 __strpbrk_c3 F -GLIBC_2.1.1 __strsep_1c F -GLIBC_2.1.1 __strsep_2c F -GLIBC_2.1.1 __strsep_3c F -GLIBC_2.1.1 __strsep_g F -GLIBC_2.1.1 __strspn_c1 F -GLIBC_2.1.1 __strspn_c2 F -GLIBC_2.1.1 __strspn_c3 F -GLIBC_2.1.1 __strtok_r_1c F -GLIBC_2.1.1 __strverscmp F -GLIBC_2.1.1 getutmp F -GLIBC_2.1.1 getutmpx F -GLIBC_2.1.1 imaxabs F -GLIBC_2.1.1 imaxdiv F -GLIBC_2.1.1 strchrnul F -GLIBC_2.1.1 xdr_hyper F -GLIBC_2.1.1 xdr_int64_t F -GLIBC_2.1.1 xdr_longlong_t F -GLIBC_2.1.1 xdr_u_hyper F -GLIBC_2.1.1 xdr_u_longlong_t F -GLIBC_2.1.1 xdr_uint64_t F -GLIBC_2.1.2 GLIBC_2.1.2 A -GLIBC_2.1.2 __vfork F -GLIBC_2.1.2 getaliasbyname_r F -GLIBC_2.1.2 getaliasent_r F -GLIBC_2.1.2 getgrent_r F -GLIBC_2.1.2 getgrgid_r F -GLIBC_2.1.2 getgrnam_r F -GLIBC_2.1.2 gethostbyaddr_r F -GLIBC_2.1.2 gethostbyname2_r F -GLIBC_2.1.2 gethostbyname_r F -GLIBC_2.1.2 gethostent_r F -GLIBC_2.1.2 getnetbyaddr_r F -GLIBC_2.1.2 getnetbyname_r F -GLIBC_2.1.2 getnetent_r F -GLIBC_2.1.2 getprotobyname_r F -GLIBC_2.1.2 getprotobynumber_r F -GLIBC_2.1.2 getprotoent_r F -GLIBC_2.1.2 getpwent_r F -GLIBC_2.1.2 getpwnam_r F -GLIBC_2.1.2 getpwuid_r F -GLIBC_2.1.2 getrpcbyname_r F -GLIBC_2.1.2 getrpcbynumber_r F -GLIBC_2.1.2 getrpcent_r F -GLIBC_2.1.2 getservbyname_r F -GLIBC_2.1.2 getservbyport_r F -GLIBC_2.1.2 getservent_r F -GLIBC_2.1.2 getspent_r F -GLIBC_2.1.2 getspnam_r F -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 __cxa_atexit F -GLIBC_2.1.3 __cxa_finalize F -GLIBC_2.1.3 __sigsuspend F -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 fallocate64 F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _sys_errlist D 0x21c -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x21c -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __mcount_internal F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 __ppc_get_timebase_freq F -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0x54 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 __assert F -GLIBC_2.2 __ctype32_tolower D 0x4 -GLIBC_2.2 __ctype32_toupper D 0x4 -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpurge F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __open64 F -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_state F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __statfs F -GLIBC_2.2 __strndup F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _res_hconf D 0x30 -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 dcngettext F -GLIBC_2.2 dngettext F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwscanf F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getrlimit F -GLIBC_2.2 getrlimit64 F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 glob64 F -GLIBC_2.2 iruserok_af F -GLIBC_2.2 localeconv F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 memrchr F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 moncontrol F -GLIBC_2.2 msgctl F -GLIBC_2.2 ngettext F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 scandir64 F -GLIBC_2.2 semctl F -GLIBC_2.2 setrlimit F -GLIBC_2.2 shmctl F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x4 -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 ungetwc F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wprintf F -GLIBC_2.2 wscanf F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 _sys_errlist D 0x1f8 -GLIBC_2.3 _sys_nerr D 0x4 -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoll_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strtoull_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 sys_errlist D 0x1f8 -GLIBC_2.3 sys_nerr D 0x4 -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x104 -GLIBC_2.3.3 getcontext F -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 makecontext F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 posix_fadvise64 F -GLIBC_2.3.3 posix_fallocate64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 setcontext F -GLIBC_2.3.3 swapcontext F -GLIBC_2.3.3 sys_sigabbrev D 0x104 -GLIBC_2.3.3 sys_siglist D 0x104 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __sigsetjmp F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 _longjmp F -GLIBC_2.3.4 _setjmp F -GLIBC_2.3.4 getcontext F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 longjmp F -GLIBC_2.3.4 makecontext F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setcontext F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setjmp F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 siglongjmp F -GLIBC_2.3.4 swapcontext F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 _IO_fprintf F -GLIBC_2.4 _IO_printf F -GLIBC_2.4 _IO_sprintf F -GLIBC_2.4 _IO_sscanf F -GLIBC_2.4 _IO_vfprintf F -GLIBC_2.4 _IO_vfscanf F -GLIBC_2.4 _IO_vsprintf F -GLIBC_2.4 __asprintf F -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fprintf_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __isinfl F -GLIBC_2.4 __isnanl F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __nldbl__IO_fprintf F -GLIBC_2.4 __nldbl__IO_printf F -GLIBC_2.4 __nldbl__IO_sprintf F -GLIBC_2.4 __nldbl__IO_sscanf F -GLIBC_2.4 __nldbl__IO_vfprintf F -GLIBC_2.4 __nldbl__IO_vfscanf F -GLIBC_2.4 __nldbl__IO_vsprintf F -GLIBC_2.4 __nldbl___asprintf F -GLIBC_2.4 __nldbl___fprintf_chk F -GLIBC_2.4 __nldbl___fwprintf_chk F -GLIBC_2.4 __nldbl___printf_chk F -GLIBC_2.4 __nldbl___printf_fp F -GLIBC_2.4 __nldbl___snprintf_chk F -GLIBC_2.4 __nldbl___sprintf_chk F -GLIBC_2.4 __nldbl___strfmon_l F -GLIBC_2.4 __nldbl___swprintf_chk F -GLIBC_2.4 __nldbl___syslog_chk F -GLIBC_2.4 __nldbl___vfprintf_chk F -GLIBC_2.4 __nldbl___vfscanf F -GLIBC_2.4 __nldbl___vfwprintf_chk F -GLIBC_2.4 __nldbl___vprintf_chk F -GLIBC_2.4 __nldbl___vsnprintf F -GLIBC_2.4 __nldbl___vsnprintf_chk F -GLIBC_2.4 __nldbl___vsprintf_chk F -GLIBC_2.4 __nldbl___vsscanf F -GLIBC_2.4 __nldbl___vstrfmon F -GLIBC_2.4 __nldbl___vstrfmon_l F -GLIBC_2.4 __nldbl___vswprintf_chk F -GLIBC_2.4 __nldbl___vsyslog_chk F -GLIBC_2.4 __nldbl___vwprintf_chk F -GLIBC_2.4 __nldbl___wprintf_chk F -GLIBC_2.4 __nldbl_asprintf F -GLIBC_2.4 __nldbl_dprintf F -GLIBC_2.4 __nldbl_fprintf F -GLIBC_2.4 __nldbl_fscanf F -GLIBC_2.4 __nldbl_fwprintf F -GLIBC_2.4 __nldbl_fwscanf F -GLIBC_2.4 __nldbl_obstack_printf F -GLIBC_2.4 __nldbl_obstack_vprintf F -GLIBC_2.4 __nldbl_printf F -GLIBC_2.4 __nldbl_printf_size F -GLIBC_2.4 __nldbl_scanf F -GLIBC_2.4 __nldbl_snprintf F -GLIBC_2.4 __nldbl_sprintf F -GLIBC_2.4 __nldbl_sscanf F -GLIBC_2.4 __nldbl_strfmon F -GLIBC_2.4 __nldbl_strfmon_l F -GLIBC_2.4 __nldbl_swprintf F -GLIBC_2.4 __nldbl_swscanf F -GLIBC_2.4 __nldbl_syslog F -GLIBC_2.4 __nldbl_vasprintf F -GLIBC_2.4 __nldbl_vdprintf F -GLIBC_2.4 __nldbl_vfprintf F -GLIBC_2.4 __nldbl_vfscanf F -GLIBC_2.4 __nldbl_vfwprintf F -GLIBC_2.4 __nldbl_vfwscanf F -GLIBC_2.4 __nldbl_vprintf F -GLIBC_2.4 __nldbl_vscanf F -GLIBC_2.4 __nldbl_vsnprintf F -GLIBC_2.4 __nldbl_vsprintf F -GLIBC_2.4 __nldbl_vsscanf F -GLIBC_2.4 __nldbl_vswprintf F -GLIBC_2.4 __nldbl_vswscanf F -GLIBC_2.4 __nldbl_vsyslog F -GLIBC_2.4 __nldbl_vwprintf F -GLIBC_2.4 __nldbl_vwscanf F -GLIBC_2.4 __nldbl_wprintf F -GLIBC_2.4 __nldbl_wscanf F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __printf_chk F -GLIBC_2.4 __printf_fp F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __signbitl F -GLIBC_2.4 __snprintf_chk F -GLIBC_2.4 __sprintf_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __strfmon_l F -GLIBC_2.4 __strtold_internal F -GLIBC_2.4 __strtold_l F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfprintf_chk F -GLIBC_2.4 __vfscanf F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vprintf_chk F -GLIBC_2.4 __vsnprintf F -GLIBC_2.4 __vsnprintf_chk F -GLIBC_2.4 __vsprintf_chk F -GLIBC_2.4 __vsscanf F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstold_internal F -GLIBC_2.4 __wcstold_l F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 _sys_errlist D 0x210 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 asprintf F -GLIBC_2.4 copysignl F -GLIBC_2.4 dprintf F -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 finitel F -GLIBC_2.4 fprintf F -GLIBC_2.4 frexpl F -GLIBC_2.4 fscanf F -GLIBC_2.4 futimesat F -GLIBC_2.4 fwprintf F -GLIBC_2.4 fwscanf F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 isinfl F -GLIBC_2.4 isnanl F -GLIBC_2.4 ldexpl F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 modfl F -GLIBC_2.4 obstack_printf F -GLIBC_2.4 obstack_vprintf F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 printf F -GLIBC_2.4 printf_size F -GLIBC_2.4 qecvt F -GLIBC_2.4 qecvt_r F -GLIBC_2.4 qfcvt F -GLIBC_2.4 qfcvt_r F -GLIBC_2.4 qgcvt F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 scalbnl F -GLIBC_2.4 scanf F -GLIBC_2.4 snprintf F -GLIBC_2.4 sprintf F -GLIBC_2.4 sscanf F -GLIBC_2.4 strfmon F -GLIBC_2.4 strfmon_l F -GLIBC_2.4 strtold F -GLIBC_2.4 strtold_l F -GLIBC_2.4 swprintf F -GLIBC_2.4 swscanf F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sys_errlist D 0x210 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 syslog F -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.4 vasprintf F -GLIBC_2.4 vdprintf F -GLIBC_2.4 vfprintf F -GLIBC_2.4 vfscanf F -GLIBC_2.4 vfwprintf F -GLIBC_2.4 vfwscanf F -GLIBC_2.4 vprintf F -GLIBC_2.4 vscanf F -GLIBC_2.4 vsnprintf F -GLIBC_2.4 vsprintf F -GLIBC_2.4 vsscanf F -GLIBC_2.4 vswprintf F -GLIBC_2.4 vswscanf F -GLIBC_2.4 vsyslog F -GLIBC_2.4 vwprintf F -GLIBC_2.4 vwscanf F -GLIBC_2.4 wcstold F -GLIBC_2.4 wcstold_l F -GLIBC_2.4 wprintf F -GLIBC_2.4 wscanf F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __nldbl___isoc99_fscanf F -GLIBC_2.7 __nldbl___isoc99_fwscanf F -GLIBC_2.7 __nldbl___isoc99_scanf F -GLIBC_2.7 __nldbl___isoc99_sscanf F -GLIBC_2.7 __nldbl___isoc99_swscanf F -GLIBC_2.7 __nldbl___isoc99_vfscanf F -GLIBC_2.7 __nldbl___isoc99_vfwscanf F -GLIBC_2.7 __nldbl___isoc99_vscanf F -GLIBC_2.7 __nldbl___isoc99_vsscanf F -GLIBC_2.7 __nldbl___isoc99_vswscanf F -GLIBC_2.7 __nldbl___isoc99_vwscanf F -GLIBC_2.7 __nldbl___isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __nldbl___asprintf_chk F -GLIBC_2.8 __nldbl___dprintf_chk F -GLIBC_2.8 __nldbl___obstack_printf_chk F -GLIBC_2.8 __nldbl___obstack_vprintf_chk F -GLIBC_2.8 __nldbl___vasprintf_chk F -GLIBC_2.8 __nldbl___vdprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist deleted file mode 100644 index 13ea493ac8..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ /dev/null @@ -1,578 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _LIB_VERSION D 0x4 -GLIBC_2.0 acos F -GLIBC_2.0 acosf F -GLIBC_2.0 acosh F -GLIBC_2.0 acoshf F -GLIBC_2.0 acoshl F -GLIBC_2.0 acosl F -GLIBC_2.0 asin F -GLIBC_2.0 asinf F -GLIBC_2.0 asinh F -GLIBC_2.0 asinhf F -GLIBC_2.0 asinhl F -GLIBC_2.0 asinl F -GLIBC_2.0 atan F -GLIBC_2.0 atan2 F -GLIBC_2.0 atan2f F -GLIBC_2.0 atan2l F -GLIBC_2.0 atanf F -GLIBC_2.0 atanh F -GLIBC_2.0 atanhf F -GLIBC_2.0 atanhl F -GLIBC_2.0 atanl F -GLIBC_2.0 cbrt F -GLIBC_2.0 cbrtf F -GLIBC_2.0 cbrtl F -GLIBC_2.0 ceil F -GLIBC_2.0 ceilf F -GLIBC_2.0 ceill F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 cos F -GLIBC_2.0 cosf F -GLIBC_2.0 cosh F -GLIBC_2.0 coshf F -GLIBC_2.0 coshl F -GLIBC_2.0 cosl F -GLIBC_2.0 drem F -GLIBC_2.0 dremf F -GLIBC_2.0 dreml F -GLIBC_2.0 erf F -GLIBC_2.0 erfc F -GLIBC_2.0 erfcf F -GLIBC_2.0 erfcl F -GLIBC_2.0 erff F -GLIBC_2.0 erfl F -GLIBC_2.0 exp F -GLIBC_2.0 expf F -GLIBC_2.0 expl F -GLIBC_2.0 expm1 F -GLIBC_2.0 expm1f F -GLIBC_2.0 expm1l F -GLIBC_2.0 fabs F -GLIBC_2.0 fabsf F -GLIBC_2.0 fabsl F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 floor F -GLIBC_2.0 floorf F -GLIBC_2.0 floorl F -GLIBC_2.0 fmod F -GLIBC_2.0 fmodf F -GLIBC_2.0 fmodl F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 gamma F -GLIBC_2.0 gammaf F -GLIBC_2.0 gammal F -GLIBC_2.0 hypot F -GLIBC_2.0 hypotf F -GLIBC_2.0 hypotl F -GLIBC_2.0 ilogb F -GLIBC_2.0 ilogbf F -GLIBC_2.0 ilogbl F -GLIBC_2.0 j0 F -GLIBC_2.0 j0f F -GLIBC_2.0 j0l F -GLIBC_2.0 j1 F -GLIBC_2.0 j1f F -GLIBC_2.0 j1l F -GLIBC_2.0 jn F -GLIBC_2.0 jnf F -GLIBC_2.0 jnl F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 lgamma F -GLIBC_2.0 lgamma_r F -GLIBC_2.0 lgammaf F -GLIBC_2.0 lgammaf_r F -GLIBC_2.0 lgammal F -GLIBC_2.0 lgammal_r F -GLIBC_2.0 log F -GLIBC_2.0 log10 F -GLIBC_2.0 log10f F -GLIBC_2.0 log10l F -GLIBC_2.0 log1p F -GLIBC_2.0 log1pf F -GLIBC_2.0 log1pl F -GLIBC_2.0 logb F -GLIBC_2.0 logbf F -GLIBC_2.0 logbl F -GLIBC_2.0 logf F -GLIBC_2.0 logl F -GLIBC_2.0 matherr F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 nextafter F -GLIBC_2.0 nextafterf F -GLIBC_2.0 nextafterl F -GLIBC_2.0 pow F -GLIBC_2.0 powf F -GLIBC_2.0 powl F -GLIBC_2.0 remainder F -GLIBC_2.0 remainderf F -GLIBC_2.0 remainderl F -GLIBC_2.0 rint F -GLIBC_2.0 rintf F -GLIBC_2.0 rintl F -GLIBC_2.0 scalb F -GLIBC_2.0 scalbf F -GLIBC_2.0 scalbl F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 signgam D 0x4 -GLIBC_2.0 significand F -GLIBC_2.0 significandf F -GLIBC_2.0 significandl F -GLIBC_2.0 sin F -GLIBC_2.0 sinf F -GLIBC_2.0 sinh F -GLIBC_2.0 sinhf F -GLIBC_2.0 sinhl F -GLIBC_2.0 sinl F -GLIBC_2.0 sqrt F -GLIBC_2.0 sqrtf F -GLIBC_2.0 sqrtl F -GLIBC_2.0 tan F -GLIBC_2.0 tanf F -GLIBC_2.0 tanh F -GLIBC_2.0 tanhf F -GLIBC_2.0 tanhl F -GLIBC_2.0 tanl F -GLIBC_2.0 y0 F -GLIBC_2.0 y0f F -GLIBC_2.0 y0l F -GLIBC_2.0 y1 F -GLIBC_2.0 y1f F -GLIBC_2.0 y1l F -GLIBC_2.0 yn F -GLIBC_2.0 ynf F -GLIBC_2.0 ynl F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __clog10 F -GLIBC_2.1 __clog10f F -GLIBC_2.1 __clog10l F -GLIBC_2.1 __fe_dfl_env D 0x8 -GLIBC_2.1 __fe_enabled_env D 0x8 -GLIBC_2.1 __fe_nomask_env F -GLIBC_2.1 __fe_nonieee_env D 0x8 -GLIBC_2.1 __finite F -GLIBC_2.1 __finitef F -GLIBC_2.1 __finitel F -GLIBC_2.1 __fpclassify F -GLIBC_2.1 __fpclassifyf F -GLIBC_2.1 __signbit F -GLIBC_2.1 __signbitf F -GLIBC_2.1 cabs F -GLIBC_2.1 cabsf F -GLIBC_2.1 cabsl F -GLIBC_2.1 cacos F -GLIBC_2.1 cacosf F -GLIBC_2.1 cacosh F -GLIBC_2.1 cacoshf F -GLIBC_2.1 cacoshl F -GLIBC_2.1 cacosl F -GLIBC_2.1 carg F -GLIBC_2.1 cargf F -GLIBC_2.1 cargl F -GLIBC_2.1 casin F -GLIBC_2.1 casinf F -GLIBC_2.1 casinh F -GLIBC_2.1 casinhf F -GLIBC_2.1 casinhl F -GLIBC_2.1 casinl F -GLIBC_2.1 catan F -GLIBC_2.1 catanf F -GLIBC_2.1 catanh F -GLIBC_2.1 catanhf F -GLIBC_2.1 catanhl F -GLIBC_2.1 catanl F -GLIBC_2.1 ccos F -GLIBC_2.1 ccosf F -GLIBC_2.1 ccosh F -GLIBC_2.1 ccoshf F -GLIBC_2.1 ccoshl F -GLIBC_2.1 ccosl F -GLIBC_2.1 cexp F -GLIBC_2.1 cexpf F -GLIBC_2.1 cexpl F -GLIBC_2.1 cimag F -GLIBC_2.1 cimagf F -GLIBC_2.1 cimagl F -GLIBC_2.1 clog F -GLIBC_2.1 clog10 F -GLIBC_2.1 clog10f F -GLIBC_2.1 clog10l F -GLIBC_2.1 clogf F -GLIBC_2.1 clogl F -GLIBC_2.1 conj F -GLIBC_2.1 conjf F -GLIBC_2.1 conjl F -GLIBC_2.1 cpow F -GLIBC_2.1 cpowf F -GLIBC_2.1 cpowl F -GLIBC_2.1 cproj F -GLIBC_2.1 cprojf F -GLIBC_2.1 cprojl F -GLIBC_2.1 creal F -GLIBC_2.1 crealf F -GLIBC_2.1 creall F -GLIBC_2.1 csin F -GLIBC_2.1 csinf F -GLIBC_2.1 csinh F -GLIBC_2.1 csinhf F -GLIBC_2.1 csinhl F -GLIBC_2.1 csinl F -GLIBC_2.1 csqrt F -GLIBC_2.1 csqrtf F -GLIBC_2.1 csqrtl F -GLIBC_2.1 ctan F -GLIBC_2.1 ctanf F -GLIBC_2.1 ctanh F -GLIBC_2.1 ctanhf F -GLIBC_2.1 ctanhl F -GLIBC_2.1 ctanl F -GLIBC_2.1 exp10 F -GLIBC_2.1 exp10f F -GLIBC_2.1 exp10l F -GLIBC_2.1 exp2 F -GLIBC_2.1 exp2f F -GLIBC_2.1 fdim F -GLIBC_2.1 fdimf F -GLIBC_2.1 fdiml F -GLIBC_2.1 feclearexcept F -GLIBC_2.1 fegetenv F -GLIBC_2.1 fegetexceptflag F -GLIBC_2.1 fegetround F -GLIBC_2.1 feholdexcept F -GLIBC_2.1 feraiseexcept F -GLIBC_2.1 fesetenv F -GLIBC_2.1 fesetexceptflag F -GLIBC_2.1 fesetround F -GLIBC_2.1 fetestexcept F -GLIBC_2.1 feupdateenv F -GLIBC_2.1 fma F -GLIBC_2.1 fmaf F -GLIBC_2.1 fmal F -GLIBC_2.1 fmax F -GLIBC_2.1 fmaxf F -GLIBC_2.1 fmaxl F -GLIBC_2.1 fmin F -GLIBC_2.1 fminf F -GLIBC_2.1 fminl F -GLIBC_2.1 llrint F -GLIBC_2.1 llrintf F -GLIBC_2.1 llrintl F -GLIBC_2.1 llround F -GLIBC_2.1 llroundf F -GLIBC_2.1 llroundl F -GLIBC_2.1 log2 F -GLIBC_2.1 log2f F -GLIBC_2.1 log2l F -GLIBC_2.1 lrint F -GLIBC_2.1 lrintf F -GLIBC_2.1 lrintl F -GLIBC_2.1 lround F -GLIBC_2.1 lroundf F -GLIBC_2.1 lroundl F -GLIBC_2.1 nan F -GLIBC_2.1 nanf F -GLIBC_2.1 nanl F -GLIBC_2.1 nearbyint F -GLIBC_2.1 nearbyintf F -GLIBC_2.1 nearbyintl F -GLIBC_2.1 nexttoward F -GLIBC_2.1 nexttowardf F -GLIBC_2.1 nexttowardl F -GLIBC_2.1 pow10 F -GLIBC_2.1 pow10f F -GLIBC_2.1 pow10l F -GLIBC_2.1 remquo F -GLIBC_2.1 remquof F -GLIBC_2.1 remquol F -GLIBC_2.1 round F -GLIBC_2.1 roundf F -GLIBC_2.1 roundl F -GLIBC_2.1 scalbln F -GLIBC_2.1 scalblnf F -GLIBC_2.1 scalblnl F -GLIBC_2.1 sincos F -GLIBC_2.1 sincosf F -GLIBC_2.1 sincosl F -GLIBC_2.1 tgamma F -GLIBC_2.1 tgammaf F -GLIBC_2.1 tgammal F -GLIBC_2.1 trunc F -GLIBC_2.1 truncf F -GLIBC_2.1 truncl F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __acoshl_finite F -GLIBC_2.15 __acosl_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __asinl_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atan2l_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __atanhl_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __coshl_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp10l_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp2l_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __expl_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __fmodl_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __gammal_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __hypotl_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j0l_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __j1l_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __jnl_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __lgammal_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log10l_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log2l_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __logl_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __powl_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __remainderl_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __scalbl_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sinhl_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __sqrtl_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y0l_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __y1l_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.15 __ynl_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 feclearexcept F -GLIBC_2.2 fedisableexcept F -GLIBC_2.2 feenableexcept F -GLIBC_2.2 fegetenv F -GLIBC_2.2 fegetexcept F -GLIBC_2.2 fegetexceptflag F -GLIBC_2.2 feraiseexcept F -GLIBC_2.2 fesetenv F -GLIBC_2.2 fesetexceptflag F -GLIBC_2.2 feupdateenv F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __fe_dfl_mode D 0x8 -GLIBC_2.25 __iscanonicall F -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __clog10l F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fpclassifyl F -GLIBC_2.4 __nldbl_nexttowardf F -GLIBC_2.4 __signbitl F -GLIBC_2.4 acoshl F -GLIBC_2.4 acosl F -GLIBC_2.4 asinhl F -GLIBC_2.4 asinl F -GLIBC_2.4 atan2l F -GLIBC_2.4 atanhl F -GLIBC_2.4 atanl F -GLIBC_2.4 cabsl F -GLIBC_2.4 cacoshl F -GLIBC_2.4 cacosl F -GLIBC_2.4 cargl F -GLIBC_2.4 casinhl F -GLIBC_2.4 casinl F -GLIBC_2.4 catanhl F -GLIBC_2.4 catanl F -GLIBC_2.4 cbrtl F -GLIBC_2.4 ccoshl F -GLIBC_2.4 ccosl F -GLIBC_2.4 ceill F -GLIBC_2.4 cexpl F -GLIBC_2.4 cimagl F -GLIBC_2.4 clog10l F -GLIBC_2.4 clogl F -GLIBC_2.4 conjl F -GLIBC_2.4 copysignl F -GLIBC_2.4 coshl F -GLIBC_2.4 cosl F -GLIBC_2.4 cpowl F -GLIBC_2.4 cprojl F -GLIBC_2.4 creall F -GLIBC_2.4 csinhl F -GLIBC_2.4 csinl F -GLIBC_2.4 csqrtl F -GLIBC_2.4 ctanhl F -GLIBC_2.4 ctanl F -GLIBC_2.4 dreml F -GLIBC_2.4 erfcl F -GLIBC_2.4 erfl F -GLIBC_2.4 exp10l F -GLIBC_2.4 exp2l F -GLIBC_2.4 expl F -GLIBC_2.4 expm1l F -GLIBC_2.4 fabsl F -GLIBC_2.4 fdiml F -GLIBC_2.4 finitel F -GLIBC_2.4 floorl F -GLIBC_2.4 fmal F -GLIBC_2.4 fmaxl F -GLIBC_2.4 fminl F -GLIBC_2.4 fmodl F -GLIBC_2.4 frexpl F -GLIBC_2.4 gammal F -GLIBC_2.4 hypotl F -GLIBC_2.4 ilogbl F -GLIBC_2.4 j0l F -GLIBC_2.4 j1l F -GLIBC_2.4 jnl F -GLIBC_2.4 ldexpl F -GLIBC_2.4 lgammal F -GLIBC_2.4 lgammal_r F -GLIBC_2.4 llrintl F -GLIBC_2.4 llroundl F -GLIBC_2.4 log10l F -GLIBC_2.4 log1pl F -GLIBC_2.4 log2l F -GLIBC_2.4 logbl F -GLIBC_2.4 logl F -GLIBC_2.4 lrintl F -GLIBC_2.4 lroundl F -GLIBC_2.4 modfl F -GLIBC_2.4 nanl F -GLIBC_2.4 nearbyintl F -GLIBC_2.4 nextafterl F -GLIBC_2.4 nexttoward F -GLIBC_2.4 nexttowardf F -GLIBC_2.4 nexttowardl F -GLIBC_2.4 pow10l F -GLIBC_2.4 powl F -GLIBC_2.4 remainderl F -GLIBC_2.4 remquol F -GLIBC_2.4 rintl F -GLIBC_2.4 roundl F -GLIBC_2.4 scalbl F -GLIBC_2.4 scalblnl F -GLIBC_2.4 scalbnl F -GLIBC_2.4 significandl F -GLIBC_2.4 sincosl F -GLIBC_2.4 sinhl F -GLIBC_2.4 sinl F -GLIBC_2.4 sqrtl F -GLIBC_2.4 tanhl F -GLIBC_2.4 tanl F -GLIBC_2.4 tgammal F -GLIBC_2.4 truncl F -GLIBC_2.4 y0l F -GLIBC_2.4 y1l F -GLIBC_2.4 ynl F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data deleted file mode 100644 index 50006317c7..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/localplt.data +++ /dev/null @@ -1,16 +0,0 @@ -libc.so: _Unwind_Find_FDE -libc.so: calloc -libc.so: free -libc.so: malloc -libc.so: memalign -libc.so: realloc -libm.so: matherr -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fxstat.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fxstat.c deleted file mode 100644 index 4f219f0b9d..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fxstatat.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fxstatat.c deleted file mode 100644 index 0f8b3135d8..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fxstatat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S deleted file mode 100644 index ae2470f1fd..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S +++ /dev/null @@ -1,284 +0,0 @@ -/* Save current context, powerpc32 common. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This is the common implementation of getcontext for powerpc32. - It not complete in itself should be included in to a framework that - defines: - __CONTEXT_FUNC_NAME - and if appropriate: - __CONTEXT_ENABLE_FPRS - __CONTEXT_ENABLE_VRS - Any architecture that implements the Vector unit is assumed to also - implement the floating unit. */ - -/* Stack frame offsets. */ -#define _FRAME_BACKCHAIN 0 -#define _FRAME_LR_SAVE 4 -#define _FRAME_PARM_SAVE1 8 -#define _FRAME_PARM_SAVE2 12 -#define _FRAME_PARM_SAVE3 16 -#define _FRAME_PARM_SAVE4 20 - -#ifdef __CONTEXT_ENABLE_VRS - .machine "altivec" -#endif -ENTRY(__CONTEXT_FUNC_NAME) - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) -/* Insure that the _UC_REGS start on a quadword boundary. */ - stw r3,_FRAME_PARM_SAVE1(r1) - addi r3,r3,_UC_REG_SPACE+12 - clrrwi r3,r3,4 - -/* Save the general purpose registers */ - stw r0,_UC_GREGS+(PT_R0*4)(r3) - mflr r0 - stw r2,_UC_GREGS+(PT_R2*4)(r3) - stw r4,_UC_GREGS+(PT_R4*4)(r3) -/* Set the callers LR_SAVE, and the ucontext LR and NIP to the callers - return address. */ - stw r0,_UC_GREGS+(PT_LNK*4)(r3) - stw r0,_UC_GREGS+(PT_NIP*4)(r3) - stw r0,_FRAME_LR_SAVE+16(r1) - cfi_offset (lr, _FRAME_LR_SAVE) - stw r5,_UC_GREGS+(PT_R5*4)(r3) - stw r6,_UC_GREGS+(PT_R6*4)(r3) - stw r7,_UC_GREGS+(PT_R7*4)(r3) - stw r8,_UC_GREGS+(PT_R8*4)(r3) - stw r9,_UC_GREGS+(PT_R9*4)(r3) - stw r10,_UC_GREGS+(PT_R10*4)(r3) - stw r11,_UC_GREGS+(PT_R11*4)(r3) - stw r12,_UC_GREGS+(PT_R12*4)(r3) - stw r13,_UC_GREGS+(PT_R13*4)(r3) - stw r14,_UC_GREGS+(PT_R14*4)(r3) - stw r15,_UC_GREGS+(PT_R15*4)(r3) - stw r16,_UC_GREGS+(PT_R16*4)(r3) - stw r17,_UC_GREGS+(PT_R17*4)(r3) - stw r18,_UC_GREGS+(PT_R18*4)(r3) - stw r19,_UC_GREGS+(PT_R19*4)(r3) - stw r20,_UC_GREGS+(PT_R20*4)(r3) - stw r21,_UC_GREGS+(PT_R21*4)(r3) - stw r22,_UC_GREGS+(PT_R22*4)(r3) - stw r23,_UC_GREGS+(PT_R23*4)(r3) - stw r24,_UC_GREGS+(PT_R24*4)(r3) - stw r25,_UC_GREGS+(PT_R25*4)(r3) - stw r26,_UC_GREGS+(PT_R26*4)(r3) - stw r27,_UC_GREGS+(PT_R27*4)(r3) - stw r28,_UC_GREGS+(PT_R28*4)(r3) - stw r29,_UC_GREGS+(PT_R29*4)(r3) - stw r30,_UC_GREGS+(PT_R30*4)(r3) - stw r31,_UC_GREGS+(PT_R31*4)(r3) -/* Save the value of R1. We had to push the stack before we - had the address of uc_reg_space. So compute the address of - the callers stack pointer and save it as R1. */ - addi r8,r1,16 - li r0,0 -/* Save the count, exception and condition registers. */ - mfctr r11 - mfxer r10 - mfcr r9 - stw r8,_UC_GREGS+(PT_R1*4)(r3) - stw r11,_UC_GREGS+(PT_CTR*4)(r3) - stw r10,_UC_GREGS+(PT_XER*4)(r3) - stw r9,_UC_GREGS+(PT_CCR*4)(r3) -/* Set the return value of getcontext to "success". R3 is the only - register whose value is not preserved in the saved context. */ - stw r0,_UC_GREGS+(PT_R3*4)(r3) - -/* Zero fill fields that can't be set in user state. */ - stw r0,_UC_GREGS+(PT_MSR*4)(r3) - stw r0,_UC_GREGS+(PT_MQ*4)(r3) - -#ifdef __CONTEXT_ENABLE_FPRS -/* Save the floating-point registers */ - stfd fp0,_UC_FREGS+(0*8)(r3) - stfd fp1,_UC_FREGS+(1*8)(r3) - stfd fp2,_UC_FREGS+(2*8)(r3) - stfd fp3,_UC_FREGS+(3*8)(r3) - stfd fp4,_UC_FREGS+(4*8)(r3) - stfd fp5,_UC_FREGS+(5*8)(r3) - stfd fp6,_UC_FREGS+(6*8)(r3) - stfd fp7,_UC_FREGS+(7*8)(r3) - stfd fp8,_UC_FREGS+(8*8)(r3) - stfd fp9,_UC_FREGS+(9*8)(r3) - stfd fp10,_UC_FREGS+(10*8)(r3) - stfd fp11,_UC_FREGS+(11*8)(r3) - stfd fp12,_UC_FREGS+(12*8)(r3) - stfd fp13,_UC_FREGS+(13*8)(r3) - stfd fp14,_UC_FREGS+(14*8)(r3) - stfd fp15,_UC_FREGS+(15*8)(r3) - stfd fp16,_UC_FREGS+(16*8)(r3) - stfd fp17,_UC_FREGS+(17*8)(r3) - stfd fp18,_UC_FREGS+(18*8)(r3) - stfd fp19,_UC_FREGS+(19*8)(r3) - stfd fp20,_UC_FREGS+(20*8)(r3) - stfd fp21,_UC_FREGS+(21*8)(r3) - stfd fp22,_UC_FREGS+(22*8)(r3) - stfd fp23,_UC_FREGS+(23*8)(r3) - stfd fp24,_UC_FREGS+(24*8)(r3) - stfd fp25,_UC_FREGS+(25*8)(r3) - stfd fp26,_UC_FREGS+(26*8)(r3) - stfd fp27,_UC_FREGS+(27*8)(r3) - stfd fp28,_UC_FREGS+(28*8)(r3) - stfd fp29,_UC_FREGS+(29*8)(r3) - mffs fp0 - stfd fp30,_UC_FREGS+(30*8)(r3) - stfd fp31,_UC_FREGS+(31*8)(r3) - stfd fp0,_UC_FREGS+(32*8)(r3) - -# ifdef __CONTEXT_ENABLE_VRS -# ifdef PIC - mflr r8 -# define got_label GENERATE_GOT_LABEL (__CONTEXT_FUNC_NAME) - SETUP_GOT_ACCESS(r7,got_label) - addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha - addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l -# ifdef SHARED - lwz r7,_rtld_global_ro@got(r7) - mtlr r8 - lwz r7,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+LOWORD(r7) -# else - lwz r7,_dl_hwcap@got(r7) - mtlr r8 - lwz r7,LOWORD(r7) -# endif -# else - lis r7,(_dl_hwcap+LOWORD)@ha - lwz r7,(_dl_hwcap+LOWORD)@l(r7) -# endif - andis. r7,r7,(PPC_FEATURE_HAS_ALTIVEC >> 16) - - la r10,(_UC_VREGS)(r3) - la r9,(_UC_VREGS+16)(r3) - - beq 2f /* L(no_vec) */ -/* address of the combined VSCR/VSAVE quadword. */ - la r8,(_UC_VREGS+512)(r3) - -/* Save the vector registers */ - stvx v0,0,r10 - stvx v1,0,r9 - addi r10,r10,32 - addi r9,r9,32 -/* We need to get the Vector Status and Control Register early to avoid - store order problems later with the VSAVE register that shares the - same quadword. */ - mfvscr v0 - - stvx v2,0,r10 - stvx v3,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v0,0,r8 - - stvx v4,0,r10 - stvx v5,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v6,0,r10 - stvx v7,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v8,0,r10 - stvx v9,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v10,0,r10 - stvx v11,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v12,0,r10 - stvx v13,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v14,0,r10 - stvx v15,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v16,0,r10 - stvx v17,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v18,0,r10 - stvx v19,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v20,0,r10 - stvx v21,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v22,0,r10 - stvx v23,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v24,0,r10 - stvx v25,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v26,0,r10 - stvx v27,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v28,0,r10 - stvx v29,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - mfspr r0,VRSAVE - stvx v30,0,r10 - stvx v31,0,r9 - - stw r0,0(r8) - -2: /* L(no_vec): */ -# endif -#endif - -#ifdef __CONTEXT_ENABLE_E500 - getcontext_e500 -#endif - -/* We need to set up parms and call sigprocmask which will clobber - volatile registers. So before the call we need to retrieve the - original ucontext ptr (parm1) from stack and store the UC_REGS_PTR - (current R3). */ - lwz r12,_FRAME_PARM_SAVE1(r1) - li r4,0 - stw r3,_UC_REGS_PTR(r12) - addi r5,r12,_UC_SIGMASK - li r3,SIG_BLOCK - bl __sigprocmask@local - - lwz r0,_FRAME_LR_SAVE+16(r1) - addi r1,r1,16 - mtlr r0 - blr -END(__CONTEXT_FUNC_NAME) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S deleted file mode 100644 index 10f8857d81..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S +++ /dev/null @@ -1,78 +0,0 @@ -/* Save current context. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define __ASSEMBLY__ -#include -#include "ucontext_i.h" - -#define __CONTEXT_FUNC_NAME __getcontext -#define __CONTEXT_ENABLE_FPRS 1 -#define __CONTEXT_ENABLE_VRS 1 - -/* Size of ucontext in GLIBC_2.3.4 and later. */ -#define _UC_SIZE_2_3_4 1184 - - .section ".text"; -ENTRY (__getcontext) - li r4,0 - li r5,_UC_SIZE_2_3_4; - DO_CALL (SYS_ify (swapcontext)); - bso- cr0,1f -/* the kernel does not set the return code for the success case */ - li r3,0 - blr -1: - b __syscall_error@local -END(__getcontext) - -versioned_symbol (libc, __getcontext, getcontext, GLIBC_2_3_4) - -#if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_3_4) - compat_text_section - -# undef __CONTEXT_FUNC_NAME -# define __CONTEXT_FUNC_NAME __novec_getcontext -# undef __CONTEXT_ENABLE_VRS - -# include "getcontext-common.S" - - .previous - -compat_symbol (libc, __novec_getcontext, getcontext, GLIBC_2_3_3) - -#endif - -#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3_3) - -# define _ERRNO_H 1 -# include - - compat_text_section -ENTRY (__getcontext_stub) - li r3,ENOSYS - b __syscall_error@local -END (__getcontext_stub) - .previous - -compat_symbol (libc, __getcontext_stub, getcontext, GLIBC_2_1) - -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/glob64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/glob64.c deleted file mode 100644 index 82a9a296a7..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/glob64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/kernel_stat.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/kernel_stat.h deleted file mode 100644 index 708ae0f71f..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/kernel_stat.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Definition of `struct stat' used in the kernel. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -struct kernel_stat - { - unsigned int st_dev; - unsigned int st_ino; - unsigned int st_mode; - unsigned short st_nlink; - unsigned int st_uid; - unsigned int st_gid; - unsigned int st_rdev; - unsigned long int st_size; - unsigned long int st_blksize; - unsigned long int st_blocks; - struct timespec st_atim; - struct timespec st_mtim; - struct timespec st_ctim; - unsigned long int __glibc_reserved4; -#define _HAVE___UNUSED4 - unsigned long int __glibc_reserved5; -#define _HAVE___UNUSED5 - }; - -#define _HAVE_STAT___UNUSED4 -#define _HAVE_STAT___UNUSED5 -#define _HAVE_STAT___PAD1 -#define _HAVE_STAT___PAD2 -#define _HAVE_STAT_NSEC -#define _HAVE_STAT64___UNUSED4 -#define _HAVE_STAT64___UNUSED5 -#define _HAVE_STAT64___PAD2 -#define _HAVE_STAT64_NSEC - -#define XSTAT_IS_XSTAT64 0 -#define STATFS_IS_STATFS64 0 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist deleted file mode 100644 index 100d133495..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist +++ /dev/null @@ -1,16 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _r_debug D 0x14 -GLIBC_2.0 calloc F -GLIBC_2.0 free F -GLIBC_2.0 malloc F -GLIBC_2.0 realloc F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __libc_stack_end D 0x4 -GLIBC_2.1 _dl_mcount F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 __tls_get_addr_opt F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __parse_hwcap_and_convert_at_platform F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __tls_get_addr F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libBrokenLocale.abilist deleted file mode 100644 index 4a56bb68a3..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libanl.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libanl.abilist deleted file mode 100644 index edabfb436e..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 gai_cancel F -GLIBC_2.2.3 gai_error F -GLIBC_2.2.3 gai_suspend F -GLIBC_2.2.3 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libcrypt.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libcrypt.abilist deleted file mode 100644 index 4db2639336..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 crypt F -GLIBC_2.0 crypt_r F -GLIBC_2.0 encrypt F -GLIBC_2.0 encrypt_r F -GLIBC_2.0 fcrypt F -GLIBC_2.0 setkey F -GLIBC_2.0 setkey_r F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libdl.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libdl.abilist deleted file mode 100644 index 5536f6e0a9..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libdl.abilist +++ /dev/null @@ -1,14 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 dladdr F -GLIBC_2.0 dlclose F -GLIBC_2.0 dlerror F -GLIBC_2.0 dlopen F -GLIBC_2.0 dlsym F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 dlopen F -GLIBC_2.1 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libnsl.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libnsl.abilist deleted file mode 100644 index a23db2aeaf..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libnsl.abilist +++ /dev/null @@ -1,124 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __yp_check F -GLIBC_2.0 xdr_domainname F -GLIBC_2.0 xdr_keydat F -GLIBC_2.0 xdr_mapname F -GLIBC_2.0 xdr_peername F -GLIBC_2.0 xdr_valdat F -GLIBC_2.0 xdr_yp_buf F -GLIBC_2.0 xdr_ypbind_binding F -GLIBC_2.0 xdr_ypbind_resp F -GLIBC_2.0 xdr_ypbind_resptype F -GLIBC_2.0 xdr_ypbind_setdom F -GLIBC_2.0 xdr_ypdelete_args F -GLIBC_2.0 xdr_ypmap_parms F -GLIBC_2.0 xdr_ypmaplist F -GLIBC_2.0 xdr_yppush_status F -GLIBC_2.0 xdr_yppushresp_xfr F -GLIBC_2.0 xdr_ypreq_key F -GLIBC_2.0 xdr_ypreq_nokey F -GLIBC_2.0 xdr_ypreq_xfr F -GLIBC_2.0 xdr_ypresp_all F -GLIBC_2.0 xdr_ypresp_key_val F -GLIBC_2.0 xdr_ypresp_maplist F -GLIBC_2.0 xdr_ypresp_master F -GLIBC_2.0 xdr_ypresp_order F -GLIBC_2.0 xdr_ypresp_val F -GLIBC_2.0 xdr_ypresp_xfr F -GLIBC_2.0 xdr_ypstat F -GLIBC_2.0 xdr_ypupdate_args F -GLIBC_2.0 xdr_ypxfrstat F -GLIBC_2.0 yp_all F -GLIBC_2.0 yp_bind F -GLIBC_2.0 yp_first F -GLIBC_2.0 yp_get_default_domain F -GLIBC_2.0 yp_maplist F -GLIBC_2.0 yp_master F -GLIBC_2.0 yp_match F -GLIBC_2.0 yp_next F -GLIBC_2.0 yp_order F -GLIBC_2.0 yp_unbind F -GLIBC_2.0 yp_update F -GLIBC_2.0 ypbinderr_string F -GLIBC_2.0 yperr_string F -GLIBC_2.0 ypprot_err F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __free_fdresult F -GLIBC_2.1 __nis_default_access F -GLIBC_2.1 __nis_default_group F -GLIBC_2.1 __nis_default_owner F -GLIBC_2.1 __nis_default_ttl F -GLIBC_2.1 __nis_finddirectory F -GLIBC_2.1 __nis_hash F -GLIBC_2.1 __nisbind_connect F -GLIBC_2.1 __nisbind_create F -GLIBC_2.1 __nisbind_destroy F -GLIBC_2.1 __nisbind_next F -GLIBC_2.1 nis_add F -GLIBC_2.1 nis_add_entry F -GLIBC_2.1 nis_addmember F -GLIBC_2.1 nis_checkpoint F -GLIBC_2.1 nis_clone_directory F -GLIBC_2.1 nis_clone_object F -GLIBC_2.1 nis_clone_result F -GLIBC_2.1 nis_creategroup F -GLIBC_2.1 nis_destroy_object F -GLIBC_2.1 nis_destroygroup F -GLIBC_2.1 nis_dir_cmp F -GLIBC_2.1 nis_domain_of F -GLIBC_2.1 nis_domain_of_r F -GLIBC_2.1 nis_first_entry F -GLIBC_2.1 nis_free_directory F -GLIBC_2.1 nis_free_object F -GLIBC_2.1 nis_free_request F -GLIBC_2.1 nis_freenames F -GLIBC_2.1 nis_freeresult F -GLIBC_2.1 nis_freeservlist F -GLIBC_2.1 nis_freetags F -GLIBC_2.1 nis_getnames F -GLIBC_2.1 nis_getservlist F -GLIBC_2.1 nis_ismember F -GLIBC_2.1 nis_leaf_of F -GLIBC_2.1 nis_leaf_of_r F -GLIBC_2.1 nis_lerror F -GLIBC_2.1 nis_list F -GLIBC_2.1 nis_local_directory F -GLIBC_2.1 nis_local_group F -GLIBC_2.1 nis_local_host F -GLIBC_2.1 nis_local_principal F -GLIBC_2.1 nis_lookup F -GLIBC_2.1 nis_mkdir F -GLIBC_2.1 nis_modify F -GLIBC_2.1 nis_modify_entry F -GLIBC_2.1 nis_name_of F -GLIBC_2.1 nis_name_of_r F -GLIBC_2.1 nis_next_entry F -GLIBC_2.1 nis_perror F -GLIBC_2.1 nis_ping F -GLIBC_2.1 nis_print_directory F -GLIBC_2.1 nis_print_entry F -GLIBC_2.1 nis_print_group F -GLIBC_2.1 nis_print_group_entry F -GLIBC_2.1 nis_print_link F -GLIBC_2.1 nis_print_object F -GLIBC_2.1 nis_print_result F -GLIBC_2.1 nis_print_rights F -GLIBC_2.1 nis_print_table F -GLIBC_2.1 nis_read_obj F -GLIBC_2.1 nis_remove F -GLIBC_2.1 nis_remove_entry F -GLIBC_2.1 nis_removemember F -GLIBC_2.1 nis_rmdir F -GLIBC_2.1 nis_servstate F -GLIBC_2.1 nis_sperrno F -GLIBC_2.1 nis_sperror F -GLIBC_2.1 nis_sperror_r F -GLIBC_2.1 nis_stats F -GLIBC_2.1 nis_verifygroup F -GLIBC_2.1 nis_write_obj F -GLIBC_2.1 readColdStartFile F -GLIBC_2.1 writeColdStartFile F -GLIBC_2.1 xdr_cback_data F -GLIBC_2.1 xdr_obj_p F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 xdr_ypall F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist deleted file mode 100644 index 14c3a86b75..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist +++ /dev/null @@ -1,262 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 __close F -GLIBC_2.0 __connect F -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __fork F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __lseek F -GLIBC_2.0 __open F -GLIBC_2.0 __pthread_getspecific F -GLIBC_2.0 __pthread_key_create F -GLIBC_2.0 __pthread_mutex_destroy F -GLIBC_2.0 __pthread_mutex_init F -GLIBC_2.0 __pthread_mutex_lock F -GLIBC_2.0 __pthread_mutex_trylock F -GLIBC_2.0 __pthread_mutex_unlock F -GLIBC_2.0 __pthread_mutexattr_destroy F -GLIBC_2.0 __pthread_mutexattr_init F -GLIBC_2.0 __pthread_mutexattr_settype F -GLIBC_2.0 __pthread_once F -GLIBC_2.0 __pthread_setspecific F -GLIBC_2.0 __read F -GLIBC_2.0 __send F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __wait F -GLIBC_2.0 __write F -GLIBC_2.0 _pthread_cleanup_pop F -GLIBC_2.0 _pthread_cleanup_pop_restore F -GLIBC_2.0 _pthread_cleanup_push F -GLIBC_2.0 _pthread_cleanup_push_defer F -GLIBC_2.0 accept F -GLIBC_2.0 close F -GLIBC_2.0 connect F -GLIBC_2.0 fcntl F -GLIBC_2.0 flockfile F -GLIBC_2.0 fork F -GLIBC_2.0 fsync F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 funlockfile F -GLIBC_2.0 longjmp F -GLIBC_2.0 lseek F -GLIBC_2.0 msync F -GLIBC_2.0 nanosleep F -GLIBC_2.0 open F -GLIBC_2.0 pause F -GLIBC_2.0 pthread_atfork F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cancel F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_create F -GLIBC_2.0 pthread_detach F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_getspecific F -GLIBC_2.0 pthread_join F -GLIBC_2.0 pthread_key_create F -GLIBC_2.0 pthread_key_delete F -GLIBC_2.0 pthread_kill F -GLIBC_2.0 pthread_kill_other_threads_np F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_trylock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_mutexattr_destroy F -GLIBC_2.0 pthread_mutexattr_getkind_np F -GLIBC_2.0 pthread_mutexattr_init F -GLIBC_2.0 pthread_mutexattr_setkind_np F -GLIBC_2.0 pthread_once F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 pthread_setspecific F -GLIBC_2.0 pthread_sigmask F -GLIBC_2.0 pthread_testcancel F -GLIBC_2.0 raise F -GLIBC_2.0 read F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 sem_destroy F -GLIBC_2.0 sem_getvalue F -GLIBC_2.0 sem_init F -GLIBC_2.0 sem_post F -GLIBC_2.0 sem_trywait F -GLIBC_2.0 sem_wait F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 sigaction F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 sigwait F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 vfork F -GLIBC_2.0 wait F -GLIBC_2.0 waitpid F -GLIBC_2.0 write F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __libc_allocate_rtsig F -GLIBC_2.1 __libc_current_sigrtmax F -GLIBC_2.1 __libc_current_sigrtmin F -GLIBC_2.1 pthread_attr_getguardsize F -GLIBC_2.1 pthread_attr_getstackaddr F -GLIBC_2.1 pthread_attr_getstacksize F -GLIBC_2.1 pthread_attr_init F -GLIBC_2.1 pthread_attr_setguardsize F -GLIBC_2.1 pthread_attr_setstackaddr F -GLIBC_2.1 pthread_attr_setstacksize F -GLIBC_2.1 pthread_create F -GLIBC_2.1 pthread_getconcurrency F -GLIBC_2.1 pthread_mutexattr_gettype F -GLIBC_2.1 pthread_mutexattr_settype F -GLIBC_2.1 pthread_rwlock_destroy F -GLIBC_2.1 pthread_rwlock_init F -GLIBC_2.1 pthread_rwlock_rdlock F -GLIBC_2.1 pthread_rwlock_tryrdlock F -GLIBC_2.1 pthread_rwlock_trywrlock F -GLIBC_2.1 pthread_rwlock_unlock F -GLIBC_2.1 pthread_rwlock_wrlock F -GLIBC_2.1 pthread_rwlockattr_destroy F -GLIBC_2.1 pthread_rwlockattr_getkind_np F -GLIBC_2.1 pthread_rwlockattr_getpshared F -GLIBC_2.1 pthread_rwlockattr_init F -GLIBC_2.1 pthread_rwlockattr_setkind_np F -GLIBC_2.1 pthread_rwlockattr_setpshared F -GLIBC_2.1 pthread_setconcurrency F -GLIBC_2.1 sem_destroy F -GLIBC_2.1 sem_getvalue F -GLIBC_2.1 sem_init F -GLIBC_2.1 sem_post F -GLIBC_2.1 sem_trywait F -GLIBC_2.1 sem_wait F -GLIBC_2.1.1 GLIBC_2.1.1 A -GLIBC_2.1.1 sem_close F -GLIBC_2.1.1 sem_open F -GLIBC_2.1.1 sem_unlink F -GLIBC_2.1.2 GLIBC_2.1.2 A -GLIBC_2.1.2 __vfork F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __open64 F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pthread_rwlock_destroy F -GLIBC_2.2 __pthread_rwlock_init F -GLIBC_2.2 __pthread_rwlock_rdlock F -GLIBC_2.2 __pthread_rwlock_tryrdlock F -GLIBC_2.2 __pthread_rwlock_trywrlock F -GLIBC_2.2 __pthread_rwlock_unlock F -GLIBC_2.2 __pthread_rwlock_wrlock F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __res_state F -GLIBC_2.2 lseek64 F -GLIBC_2.2 open64 F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 pthread_attr_getstack F -GLIBC_2.2 pthread_attr_setstack F -GLIBC_2.2 pthread_barrier_destroy F -GLIBC_2.2 pthread_barrier_init F -GLIBC_2.2 pthread_barrier_wait F -GLIBC_2.2 pthread_barrierattr_destroy F -GLIBC_2.2 pthread_barrierattr_init F -GLIBC_2.2 pthread_barrierattr_setpshared F -GLIBC_2.2 pthread_condattr_getpshared F -GLIBC_2.2 pthread_condattr_setpshared F -GLIBC_2.2 pthread_getcpuclockid F -GLIBC_2.2 pthread_mutex_timedlock F -GLIBC_2.2 pthread_mutexattr_getpshared F -GLIBC_2.2 pthread_mutexattr_setpshared F -GLIBC_2.2 pthread_rwlock_timedrdlock F -GLIBC_2.2 pthread_rwlock_timedwrlock F -GLIBC_2.2 pthread_spin_destroy F -GLIBC_2.2 pthread_spin_init F -GLIBC_2.2 pthread_spin_lock F -GLIBC_2.2 pthread_spin_trylock F -GLIBC_2.2 pthread_spin_unlock F -GLIBC_2.2 pthread_yield F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 sem_timedwait F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 pthread_getattr_np F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 longjmp F -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.3.4 siglongjmp F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 pthread_attr_setstack F -GLIBC_2.6 pthread_attr_setstacksize F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libresolv.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libresolv.abilist deleted file mode 100644 index 4d50e7c8c6..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libresolv.abilist +++ /dev/null @@ -1,100 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __b64_ntop F -GLIBC_2.0 __b64_pton F -GLIBC_2.0 __dn_comp F -GLIBC_2.0 __dn_count_labels F -GLIBC_2.0 __dn_skipname F -GLIBC_2.0 __fp_nquery F -GLIBC_2.0 __fp_query F -GLIBC_2.0 __fp_resstat F -GLIBC_2.0 __hostalias F -GLIBC_2.0 __loc_aton F -GLIBC_2.0 __loc_ntoa F -GLIBC_2.0 __p_cdname F -GLIBC_2.0 __p_cdnname F -GLIBC_2.0 __p_class F -GLIBC_2.0 __p_class_syms D 0x54 -GLIBC_2.0 __p_fqname F -GLIBC_2.0 __p_fqnname F -GLIBC_2.0 __p_option F -GLIBC_2.0 __p_query F -GLIBC_2.0 __p_secstodate F -GLIBC_2.0 __p_time F -GLIBC_2.0 __p_type F -GLIBC_2.0 __p_type_syms D 0x228 -GLIBC_2.0 __putlong F -GLIBC_2.0 __putshort F -GLIBC_2.0 __res_close F -GLIBC_2.0 __res_dnok F -GLIBC_2.0 __res_hnok F -GLIBC_2.0 __res_isourserver F -GLIBC_2.0 __res_mailok F -GLIBC_2.0 __res_nameinquery F -GLIBC_2.0 __res_ownok F -GLIBC_2.0 __res_queriesmatch F -GLIBC_2.0 __res_send F -GLIBC_2.0 __sym_ntop F -GLIBC_2.0 __sym_ntos F -GLIBC_2.0 __sym_ston F -GLIBC_2.0 _gethtbyaddr F -GLIBC_2.0 _gethtbyname F -GLIBC_2.0 _gethtbyname2 F -GLIBC_2.0 _gethtent F -GLIBC_2.0 _getlong F -GLIBC_2.0 _getshort F -GLIBC_2.0 _res_opcodes D 0x40 -GLIBC_2.0 _sethtent F -GLIBC_2.0 dn_expand F -GLIBC_2.0 inet_net_ntop F -GLIBC_2.0 inet_net_pton F -GLIBC_2.0 inet_neta F -GLIBC_2.0 res_gethostbyaddr F -GLIBC_2.0 res_gethostbyname F -GLIBC_2.0 res_gethostbyname2 F -GLIBC_2.0 res_mkquery F -GLIBC_2.0 res_query F -GLIBC_2.0 res_querydomain F -GLIBC_2.0 res_search F -GLIBC_2.0 res_send_setqhook F -GLIBC_2.0 res_send_setrhook F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __dn_expand F -GLIBC_2.2 __res_hostalias F -GLIBC_2.2 __res_mkquery F -GLIBC_2.2 __res_nmkquery F -GLIBC_2.2 __res_nquery F -GLIBC_2.2 __res_nquerydomain F -GLIBC_2.2 __res_nsearch F -GLIBC_2.2 __res_nsend F -GLIBC_2.2 __res_query F -GLIBC_2.2 __res_querydomain F -GLIBC_2.2 __res_search F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/librt.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/librt.abilist deleted file mode 100644 index 15e4418863..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/librt.abilist +++ /dev/null @@ -1,47 +0,0 @@ -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 aio_cancel F -GLIBC_2.1 aio_cancel64 F -GLIBC_2.1 aio_error F -GLIBC_2.1 aio_error64 F -GLIBC_2.1 aio_fsync F -GLIBC_2.1 aio_fsync64 F -GLIBC_2.1 aio_init F -GLIBC_2.1 aio_read F -GLIBC_2.1 aio_read64 F -GLIBC_2.1 aio_return F -GLIBC_2.1 aio_return64 F -GLIBC_2.1 aio_suspend F -GLIBC_2.1 aio_suspend64 F -GLIBC_2.1 aio_write F -GLIBC_2.1 aio_write64 F -GLIBC_2.1 lio_listio F -GLIBC_2.1 lio_listio64 F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 clock_getcpuclockid F -GLIBC_2.2 clock_getres F -GLIBC_2.2 clock_gettime F -GLIBC_2.2 clock_nanosleep F -GLIBC_2.2 clock_settime F -GLIBC_2.2 shm_open F -GLIBC_2.2 shm_unlink F -GLIBC_2.2 timer_create F -GLIBC_2.2 timer_delete F -GLIBC_2.2 timer_getoverrun F -GLIBC_2.2 timer_gettime F -GLIBC_2.2 timer_settime F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libthread_db.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libthread_db.abilist deleted file mode 100644 index a8a8c2c68d..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libthread_db.abilist +++ /dev/null @@ -1,44 +0,0 @@ -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 td_init F -GLIBC_2.1.3 td_log F -GLIBC_2.1.3 td_ta_clear_event F -GLIBC_2.1.3 td_ta_delete F -GLIBC_2.1.3 td_ta_enable_stats F -GLIBC_2.1.3 td_ta_event_addr F -GLIBC_2.1.3 td_ta_event_getmsg F -GLIBC_2.1.3 td_ta_get_nthreads F -GLIBC_2.1.3 td_ta_get_ph F -GLIBC_2.1.3 td_ta_get_stats F -GLIBC_2.1.3 td_ta_map_id2thr F -GLIBC_2.1.3 td_ta_map_lwp2thr F -GLIBC_2.1.3 td_ta_new F -GLIBC_2.1.3 td_ta_reset_stats F -GLIBC_2.1.3 td_ta_set_event F -GLIBC_2.1.3 td_ta_setconcurrency F -GLIBC_2.1.3 td_ta_thr_iter F -GLIBC_2.1.3 td_ta_tsd_iter F -GLIBC_2.1.3 td_thr_clear_event F -GLIBC_2.1.3 td_thr_dbresume F -GLIBC_2.1.3 td_thr_dbsuspend F -GLIBC_2.1.3 td_thr_event_enable F -GLIBC_2.1.3 td_thr_event_getmsg F -GLIBC_2.1.3 td_thr_get_info F -GLIBC_2.1.3 td_thr_getfpregs F -GLIBC_2.1.3 td_thr_getgregs F -GLIBC_2.1.3 td_thr_getxregs F -GLIBC_2.1.3 td_thr_getxregsize F -GLIBC_2.1.3 td_thr_set_event F -GLIBC_2.1.3 td_thr_setfpregs F -GLIBC_2.1.3 td_thr_setgregs F -GLIBC_2.1.3 td_thr_setprio F -GLIBC_2.1.3 td_thr_setsigpending F -GLIBC_2.1.3 td_thr_setxregs F -GLIBC_2.1.3 td_thr_sigsetmask F -GLIBC_2.1.3 td_thr_tsd F -GLIBC_2.1.3 td_thr_validate F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 td_symbol_list F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libutil.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libutil.abilist deleted file mode 100644 index 89c67755c4..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 forkpty F -GLIBC_2.0 login F -GLIBC_2.0 login_tty F -GLIBC_2.0 logout F -GLIBC_2.0 logwtmp F -GLIBC_2.0 openpty F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/lockf64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/lockf64.c deleted file mode 100644 index a88f5a784a..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/lockf64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/lxstat.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/lxstat.c deleted file mode 100644 index 2371cd9719..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/lxstat.c +++ /dev/null @@ -1,2 +0,0 @@ -#include - diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S deleted file mode 100644 index fdacea2a36..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S +++ /dev/null @@ -1,226 +0,0 @@ -/* Set up a context to call a function. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define __ASSEMBLY__ -#include -#include "ucontext_i.h" - -ENTRY(__makecontext) - /* Set up the first 7 args to the function in its registers */ - lwz r11,_UC_REGS_PTR(r3) - stw r6,_UC_GREGS+(PT_R3*4)(r11) - stw r7,_UC_GREGS+(PT_R4*4)(r11) - stw r8,_UC_GREGS+(PT_R5*4)(r11) - stw r9,_UC_GREGS+(PT_R6*4)(r11) - stw r10,_UC_GREGS+(PT_R7*4)(r11) - lwz r8,8(r1) - lwz r9,12(r1) - stw r8,_UC_GREGS+(PT_R8*4)(r11) - stw r9,_UC_GREGS+(PT_R9*4)(r11) - - /* Set the NIP to the start of the function */ - stw r4,_UC_GREGS+(PT_NIP*4)(r11) - - /* Set the function's r31 to ucp->uc_link for the exitcode below. */ - lwz r7,_UC_LINK(r3) - stw r7,_UC_GREGS+(PT_R31*4)(r11) - - /* Set the function's LR to point to the exitcode below. */ -#ifdef PIC - mflr r0 - cfi_register(lr,r0) - /* Use this conditional form of branch and link to avoid destroying - the cpu link stack used to predict blr return addresses. */ - bcl 20,31,1f -1: mflr r6 - addi r6,r6,L(exitcode)-1b - mtlr r0 - cfi_same_value (lr) -#else - lis r6,L(exitcode)@ha - addi r6,r6,L(exitcode)@l -#endif - stw r6,_UC_GREGS+(PT_LNK*4)(r11) - - /* - * Set up the stack frame for the function. - * If we have more than 5 args to the function (8 args to makecontext), - * there will be some arguments on the stack which have to end up - * in registers. If there are more than 8 args to the function, - * we have to copy (argc - 8) args from our stack to the functions' - * stack (and allow space for them in the frame). - */ - lwz r4,_UC_STACK_SP(r3) - lwz r8,_UC_STACK_SIZE(r3) - add r4,r4,r8 - rlwinm r4,r4,0,0,27 /* round down to 16-byte boundary */ - addi r7,r4,-16 /* stack frame for fn's caller */ - cmpwi r5,8 - blt 2f /* less than 8 args is easy */ - lwz r10,16(r1) - stw r10,_UC_GREGS+(PT_R10*4)(r11) - beq 2f /* if exactly 8 args */ - subi r9,r5,3 - subi r5,r5,8 - rlwinm r9,r9,2,0,27 - subf r7,r9,r4 - mtctr r5 /* copy the 9th and following args */ - addi r6,r1,16 - addi r8,r7,4 -3: lwzu r10,4(r6) - stwu r10,4(r8) - bdnz 3b -2: stw r7,_UC_GREGS+(PT_R1*4)(r11) - li r6,0 - stw r6,0(r7) - - blr - - cfi_endproc - nop -/* - * If the function returns, it comes here. We put ucp->uc_link in - * r31, which is a callee-saved register. We have to continue with - * the context that r31 points to, or exit if it is 0. - */ -L(exitcode): - mr. r3,r31 - beq 4f - bl __setcontext@local -4: bl HIDDEN_JUMPTARGET(exit) - b 4b - - cfi_startproc -END(__makecontext) - -versioned_symbol (libc, __makecontext, makecontext, GLIBC_2_3_4) - -#if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_3_4) - - compat_text_section -ENTRY(__novec_makecontext) - /* Set up the first 7 args to the function in its registers */ - addi r11,r3,_UC_REG_SPACE - stw r11,_UC_REGS_PTR(r3) - stw r6,_UC_GREGS+(PT_R3*4)(r11) - stw r7,_UC_GREGS+(PT_R4*4)(r11) - stw r8,_UC_GREGS+(PT_R5*4)(r11) - stw r9,_UC_GREGS+(PT_R6*4)(r11) - stw r10,_UC_GREGS+(PT_R7*4)(r11) - lwz r8,8(r1) - lwz r9,12(r1) - stw r8,_UC_GREGS+(PT_R8*4)(r11) - stw r9,_UC_GREGS+(PT_R9*4)(r11) - - /* Set the NIP to the start of the function */ - stw r4,_UC_GREGS+(PT_NIP*4)(r11) - - /* Set the function's r31 to ucp->uc_link for the exitcode below. */ - lwz r7,_UC_LINK(r3) - stw r7,_UC_GREGS+(PT_R31*4)(r11) - - /* Set the function's LR to point to the exitcode below. */ -#ifdef PIC - mflr r0 - cfi_register(lr,r0) - /* Use this conditional form of branch and link to avoid destroying - the cpu link stack used to predict blr return addresses. */ - bcl 20,31,1f -1: mflr r6 - addi r6,r6,L(novec_exitcode)-1b - mtlr r0 - cfi_same_value (lr) -#else - lis r6,L(novec_exitcode)@ha - addi r6,r6,L(novec_exitcode)@l -#endif - stw r6,_UC_GREGS+(PT_LNK*4)(r11) - - /* - * Set up the stack frame for the function. - * If we have more than 5 args to the function (8 args to makecontext), - * there will be some arguments on the stack which have to end up - * in registers. If there are more than 8 args to the function, - * we have to copy (argc - 8) args from our stack to the functions' - * stack (and allow space for them in the frame). - */ - lwz r4,_UC_STACK_SP(r3) - lwz r8,_UC_STACK_SIZE(r3) - add r4,r4,r8 - rlwinm r4,r4,0,0,27 /* round down to 16-byte boundary */ - addi r7,r4,-16 /* stack frame for fn's caller */ - cmpwi r5,8 - blt 2f /* less than 8 args is easy */ - lwz r10,16(r1) - stw r10,_UC_GREGS+(PT_R10*4)(r11) - beq 2f /* if exactly 8 args */ - subi r9,r5,3 - subi r5,r5,8 - rlwinm r9,r9,2,0,27 - subf r7,r9,r4 - mtctr r5 /* copy the 9th and following args */ - addi r6,r1,16 - addi r8,r7,4 -3: lwzu r10,4(r6) - stwu r10,4(r8) - bdnz 3b -2: stw r7,_UC_GREGS+(PT_R1*4)(r11) - li r6,0 - stw r6,0(r7) - - blr - - cfi_endproc - nop -/* - * If the function returns, it comes here. We put ucp->uc_link in - * r31, which is a callee-saved register. We have to continue with - * the context that r31 points to, or exit if it is 0. - */ -L(novec_exitcode): - mr. r3,r31 - beq 4f - bl __novec_setcontext@local -4: bl HIDDEN_JUMPTARGET(exit) - b 4b - - cfi_startproc -END(__novec_makecontext) - .previous - -compat_symbol (libc, __novec_makecontext, makecontext, GLIBC_2_3_3) -#endif - -#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3_3) - -#define _ERRNO_H 1 -#include - - compat_text_section -ENTRY (__makecontext_stub) - li r3,ENOSYS - b __syscall_error@local -END (__makecontext_stub) - .previous - -compat_symbol (libc, __makecontext_stub, makecontext, GLIBC_2_1) - -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/Implies deleted file mode 100644 index 40836b6fb4..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/nofpu -powerpc/soft-fp diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/context-e500.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/context-e500.h deleted file mode 100644 index 9ca14bb76b..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/context-e500.h +++ /dev/null @@ -1,144 +0,0 @@ -/* getcontext/setcontext/makecontext support for e500 high parts of registers. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _CONTEXT_E500_H -#define _CONTEXT_E500_H 1 - -#if defined __SPE__ || (defined __NO_FPRS__ && !defined _SOFT_FLOAT) - -# define __CONTEXT_ENABLE_E500 1 - -/* We follow the kernel's layout, which saves the high parts of the - SPE registers in the vregs area, immediately followed by the ACC - value (call-clobbered, not handled here) and the SPEFSCR value. */ - -.macro getcontext_e500 - la r10,(_UC_VREGS)(r3) - evstwwe r0,(0*4)(r10) - evstwwe r1,(1*4)(r10) - evstwwe r2,(2*4)(r10) - evstwwe r3,(3*4)(r10) - evstwwe r4,(4*4)(r10) - evstwwe r5,(5*4)(r10) - evstwwe r6,(6*4)(r10) - evstwwe r7,(7*4)(r10) - evstwwe r8,(8*4)(r10) - evstwwe r9,(9*4)(r10) - evstwwe r10,(10*4)(r10) - evstwwe r11,(11*4)(r10) - evstwwe r12,(12*4)(r10) - evstwwe r13,(13*4)(r10) - evstwwe r14,(14*4)(r10) - evstwwe r15,(15*4)(r10) - evstwwe r16,(16*4)(r10) - evstwwe r17,(17*4)(r10) - evstwwe r18,(18*4)(r10) - evstwwe r19,(19*4)(r10) - evstwwe r20,(20*4)(r10) - evstwwe r21,(21*4)(r10) - evstwwe r22,(22*4)(r10) - evstwwe r23,(23*4)(r10) - evstwwe r24,(24*4)(r10) - evstwwe r25,(25*4)(r10) - evstwwe r26,(26*4)(r10) - evstwwe r27,(27*4)(r10) - evstwwe r28,(28*4)(r10) - evstwwe r29,(29*4)(r10) - evstwwe r30,(30*4)(r10) - evstwwe r31,(31*4)(r10) - mfspefscr r9 - stw r9,(34*4)(r10) -.endm - -.macro setcontext_e500 - lwz r3,_UC_VREGS+(0*4)(r31) - evmergelo r0,r3,r0 - lwz r3,_UC_VREGS+(1*4)(r31) - evmergelo r1,r3,r1 - lwz r3,_UC_VREGS+(2*4)(r31) - evmergelo r2,r3,r2 - lwz r3,_UC_VREGS+(1*4)(r31) - evmergelo r1,r3,r1 - lwz r3,_UC_VREGS+(2*4)(r31) - evmergelo r2,r3,r2 - lwz r3,_UC_VREGS+(3*4)(r31) - evmergelo r3,r3,r3 - lwz r3,_UC_VREGS+(4*4)(r31) - evmergelo r4,r3,r4 - lwz r3,_UC_VREGS+(5*4)(r31) - evmergelo r5,r3,r5 - lwz r3,_UC_VREGS+(6*4)(r31) - evmergelo r6,r3,r6 - lwz r3,_UC_VREGS+(7*4)(r31) - evmergelo r7,r3,r7 - lwz r3,_UC_VREGS+(8*4)(r31) - evmergelo r8,r3,r8 - lwz r3,_UC_VREGS+(9*4)(r31) - evmergelo r9,r3,r9 - lwz r3,_UC_VREGS+(10*4)(r31) - evmergelo r10,r3,r10 - lwz r3,_UC_VREGS+(11*4)(r31) - evmergelo r11,r3,r11 - lwz r3,_UC_VREGS+(12*4)(r31) - evmergelo r12,r3,r12 - lwz r3,_UC_VREGS+(13*4)(r31) - evmergelo r13,r3,r13 - lwz r3,_UC_VREGS+(14*4)(r31) - evmergelo r14,r3,r14 - lwz r3,_UC_VREGS+(15*4)(r31) - evmergelo r15,r3,r15 - lwz r3,_UC_VREGS+(16*4)(r31) - evmergelo r16,r3,r16 - lwz r3,_UC_VREGS+(17*4)(r31) - evmergelo r17,r3,r17 - lwz r3,_UC_VREGS+(18*4)(r31) - evmergelo r18,r3,r18 - lwz r3,_UC_VREGS+(19*4)(r31) - evmergelo r19,r3,r19 - lwz r3,_UC_VREGS+(20*4)(r31) - evmergelo r20,r3,r20 - lwz r3,_UC_VREGS+(21*4)(r31) - evmergelo r21,r3,r21 - lwz r3,_UC_VREGS+(22*4)(r31) - evmergelo r22,r3,r22 - lwz r3,_UC_VREGS+(23*4)(r31) - evmergelo r23,r3,r23 - lwz r3,_UC_VREGS+(24*4)(r31) - evmergelo r24,r3,r24 - lwz r3,_UC_VREGS+(25*4)(r31) - evmergelo r25,r3,r25 - lwz r3,_UC_VREGS+(26*4)(r31) - evmergelo r26,r3,r26 - lwz r3,_UC_VREGS+(27*4)(r31) - evmergelo r27,r3,r27 - lwz r3,_UC_VREGS+(28*4)(r31) - evmergelo r28,r3,r28 - lwz r3,_UC_VREGS+(29*4)(r31) - evmergelo r29,r3,r29 - lwz r3,_UC_VREGS+(30*4)(r31) - evmergelo r30,r3,r30 - lwz r3,_UC_VREGS+(31*4)(r31) - evmergelo r31,r3,r31 - lwz r3,_UC_VREGS+(34*4)(r31) - mtspefscr r3 -.endm -#else -# undef __CONTEXT_ENABLE_E500 -#endif - -#endif /* context-e500.h */ diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/getcontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/getcontext.S deleted file mode 100644 index 2cd9ce98e5..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/getcontext.S +++ /dev/null @@ -1,60 +0,0 @@ -/* Save current context. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -#define __ASSEMBLY__ -#include -#include "ucontext_i.h" - -#include - -#define __CONTEXT_FUNC_NAME __getcontext -#undef __CONTEXT_ENABLE_FPRS -#undef __CONTEXT_ENABLE_VRS - -#include "getcontext-common.S" - -versioned_symbol (libc, __getcontext, getcontext, GLIBC_2_3_4) - -#if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_3_4) - -/* For the nofpu case the old/new versions are the same function. */ -strong_alias (__getcontext, __novec_getcontext) - -compat_symbol (libc, __novec_getcontext, getcontext, GLIBC_2_3_3) - -#endif - -#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3_3) - -#define _ERRNO_H 1 -#include - - compat_text_section -ENTRY (__getcontext_stub) - li r3,ENOSYS - b __syscall_error@local -END (__getcontext_stub) - .previous - -compat_symbol (libc, __getcontext_stub, getcontext, GLIBC_2_1) - -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist deleted file mode 100644 index d25aefd1ae..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist +++ /dev/null @@ -1,2521 +0,0 @@ -GCC_3.0 GCC_3.0 A -GCC_3.0 _Unwind_Find_FDE F -GCC_3.0 __deregister_frame_info_bases F -GCC_3.0 __register_frame_info_bases F -GCC_3.0 __register_frame_info_table_bases F -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_adjust_column F -GLIBC_2.0 _IO_default_doallocate F -GLIBC_2.0 _IO_default_finish F -GLIBC_2.0 _IO_default_pbackfail F -GLIBC_2.0 _IO_default_uflow F -GLIBC_2.0 _IO_default_xsgetn F -GLIBC_2.0 _IO_default_xsputn F -GLIBC_2.0 _IO_do_write F -GLIBC_2.0 _IO_doallocbuf F -GLIBC_2.0 _IO_fclose F -GLIBC_2.0 _IO_fdopen F -GLIBC_2.0 _IO_feof F -GLIBC_2.0 _IO_ferror F -GLIBC_2.0 _IO_fflush F -GLIBC_2.0 _IO_fgetpos F -GLIBC_2.0 _IO_fgets F -GLIBC_2.0 _IO_file_attach F -GLIBC_2.0 _IO_file_close F -GLIBC_2.0 _IO_file_close_it F -GLIBC_2.0 _IO_file_doallocate F -GLIBC_2.0 _IO_file_fopen F -GLIBC_2.0 _IO_file_init F -GLIBC_2.0 _IO_file_jumps D 0x54 -GLIBC_2.0 _IO_file_open F -GLIBC_2.0 _IO_file_overflow F -GLIBC_2.0 _IO_file_read F -GLIBC_2.0 _IO_file_seek F -GLIBC_2.0 _IO_file_seekoff F -GLIBC_2.0 _IO_file_setbuf F -GLIBC_2.0 _IO_file_stat F -GLIBC_2.0 _IO_file_sync F -GLIBC_2.0 _IO_file_underflow F -GLIBC_2.0 _IO_file_write F -GLIBC_2.0 _IO_file_xsputn F -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_flush_all F -GLIBC_2.0 _IO_flush_all_linebuffered F -GLIBC_2.0 _IO_fopen F -GLIBC_2.0 _IO_fprintf F -GLIBC_2.0 _IO_fputs F -GLIBC_2.0 _IO_fread F -GLIBC_2.0 _IO_free_backup_area F -GLIBC_2.0 _IO_fsetpos F -GLIBC_2.0 _IO_ftell F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 _IO_fwrite F -GLIBC_2.0 _IO_getc F -GLIBC_2.0 _IO_getline F -GLIBC_2.0 _IO_gets F -GLIBC_2.0 _IO_init F -GLIBC_2.0 _IO_init_marker F -GLIBC_2.0 _IO_link_in F -GLIBC_2.0 _IO_list_all D 0x4 -GLIBC_2.0 _IO_marker_delta F -GLIBC_2.0 _IO_marker_difference F -GLIBC_2.0 _IO_padn F -GLIBC_2.0 _IO_peekc_locked F -GLIBC_2.0 _IO_popen F -GLIBC_2.0 _IO_printf F -GLIBC_2.0 _IO_proc_close F -GLIBC_2.0 _IO_proc_open F -GLIBC_2.0 _IO_putc F -GLIBC_2.0 _IO_puts F -GLIBC_2.0 _IO_remove_marker F -GLIBC_2.0 _IO_seekmark F -GLIBC_2.0 _IO_seekoff F -GLIBC_2.0 _IO_seekpos F -GLIBC_2.0 _IO_setb F -GLIBC_2.0 _IO_setbuffer F -GLIBC_2.0 _IO_setvbuf F -GLIBC_2.0 _IO_sgetn F -GLIBC_2.0 _IO_sprintf F -GLIBC_2.0 _IO_sputbackc F -GLIBC_2.0 _IO_sscanf F -GLIBC_2.0 _IO_stderr_ D 0x50 -GLIBC_2.0 _IO_stdin_ D 0x50 -GLIBC_2.0 _IO_stdout_ D 0x50 -GLIBC_2.0 _IO_str_init_readonly F -GLIBC_2.0 _IO_str_init_static F -GLIBC_2.0 _IO_str_overflow F -GLIBC_2.0 _IO_str_pbackfail F -GLIBC_2.0 _IO_str_seekoff F -GLIBC_2.0 _IO_str_underflow F -GLIBC_2.0 _IO_sungetc F -GLIBC_2.0 _IO_switch_to_get_mode F -GLIBC_2.0 _IO_un_link F -GLIBC_2.0 _IO_ungetc F -GLIBC_2.0 _IO_unsave_markers F -GLIBC_2.0 _IO_vfprintf F -GLIBC_2.0 _IO_vfscanf F -GLIBC_2.0 _IO_vsprintf F -GLIBC_2.0 __adjtimex F -GLIBC_2.0 __after_morecore_hook D 0x4 -GLIBC_2.0 __argz_count F -GLIBC_2.0 __argz_next F -GLIBC_2.0 __argz_stringify F -GLIBC_2.0 __ashldi3 F -GLIBC_2.0 __ashrdi3 F -GLIBC_2.0 __assert_fail F -GLIBC_2.0 __assert_perror_fail F -GLIBC_2.0 __bsd_getpgrp F -GLIBC_2.0 __bzero F -GLIBC_2.0 __check_rhosts_file D 0x4 -GLIBC_2.0 __clone F -GLIBC_2.0 __close F -GLIBC_2.0 __cmpdi2 F -GLIBC_2.0 __cmsg_nxthdr F -GLIBC_2.0 __connect F -GLIBC_2.0 __ctype32_b D 0x4 -GLIBC_2.0 __ctype_b D 0x4 -GLIBC_2.0 __ctype_get_mb_cur_max F -GLIBC_2.0 __ctype_tolower D 0x4 -GLIBC_2.0 __ctype_toupper D 0x4 -GLIBC_2.0 __curbrk D 0x4 -GLIBC_2.0 __daylight D 0x4 -GLIBC_2.0 __dcgettext F -GLIBC_2.0 __default_morecore F -GLIBC_2.0 __deregister_frame F -GLIBC_2.0 __deregister_frame_info F -GLIBC_2.0 __dgettext F -GLIBC_2.0 __divdi3 F -GLIBC_2.0 __dup2 F -GLIBC_2.0 __environ D 0x4 -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __ffs F -GLIBC_2.0 __finite F -GLIBC_2.0 __finitef F -GLIBC_2.0 __finitel F -GLIBC_2.0 __fixdfdi F -GLIBC_2.0 __fixsfdi F -GLIBC_2.0 __fixunsdfdi F -GLIBC_2.0 __fixunssfdi F -GLIBC_2.0 __floatdidf F -GLIBC_2.0 __floatdisf F -GLIBC_2.0 __fork F -GLIBC_2.0 __fpu_control D 0x4 -GLIBC_2.0 __frame_state_for F -GLIBC_2.0 __free_hook D 0x4 -GLIBC_2.0 __fxstat F -GLIBC_2.0 __getdelim F -GLIBC_2.0 __getpagesize F -GLIBC_2.0 __getpgid F -GLIBC_2.0 __getpid F -GLIBC_2.0 __gettimeofday F -GLIBC_2.0 __gmtime_r F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __isinf F -GLIBC_2.0 __isinff F -GLIBC_2.0 __isinfl F -GLIBC_2.0 __isnan F -GLIBC_2.0 __isnanf F -GLIBC_2.0 __isnanl F -GLIBC_2.0 __iswctype F -GLIBC_2.0 __ivaliduser F -GLIBC_2.0 __libc_calloc F -GLIBC_2.0 __libc_free F -GLIBC_2.0 __libc_init_first F -GLIBC_2.0 __libc_mallinfo F -GLIBC_2.0 __libc_malloc F -GLIBC_2.0 __libc_mallopt F -GLIBC_2.0 __libc_memalign F -GLIBC_2.0 __libc_pvalloc F -GLIBC_2.0 __libc_realloc F -GLIBC_2.0 __libc_start_main F -GLIBC_2.0 __libc_valloc F -GLIBC_2.0 __lseek F -GLIBC_2.0 __lshrdi3 F -GLIBC_2.0 __lxstat F -GLIBC_2.0 __malloc_hook D 0x4 -GLIBC_2.0 __malloc_initialize_hook D 0x4 -GLIBC_2.0 __mbrlen F -GLIBC_2.0 __mbrtowc F -GLIBC_2.0 __memalign_hook D 0x4 -GLIBC_2.0 __mempcpy F -GLIBC_2.0 __moddi3 F -GLIBC_2.0 __monstartup F -GLIBC_2.0 __morecore D 0x4 -GLIBC_2.0 __nss_configure_lookup F -GLIBC_2.0 __nss_database_lookup F -GLIBC_2.0 __nss_group_lookup F -GLIBC_2.0 __nss_hosts_lookup F -GLIBC_2.0 __nss_next F -GLIBC_2.0 __nss_passwd_lookup F -GLIBC_2.0 __open F -GLIBC_2.0 __overflow F -GLIBC_2.0 __pipe F -GLIBC_2.0 __printf_fp F -GLIBC_2.0 __profile_frequency F -GLIBC_2.0 __progname D 0x4 -GLIBC_2.0 __progname_full D 0x4 -GLIBC_2.0 __rcmd_errstr D 0x4 -GLIBC_2.0 __read F -GLIBC_2.0 __realloc_hook D 0x4 -GLIBC_2.0 __register_frame F -GLIBC_2.0 __register_frame_info F -GLIBC_2.0 __register_frame_info_table F -GLIBC_2.0 __register_frame_table F -GLIBC_2.0 __res_randomid F -GLIBC_2.0 __sbrk F -GLIBC_2.0 __sched_get_priority_max F -GLIBC_2.0 __sched_get_priority_min F -GLIBC_2.0 __sched_getparam F -GLIBC_2.0 __sched_getscheduler F -GLIBC_2.0 __sched_setscheduler F -GLIBC_2.0 __sched_yield F -GLIBC_2.0 __secure_getenv F -GLIBC_2.0 __select F -GLIBC_2.0 __send F -GLIBC_2.0 __setpgid F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __sigaddset F -GLIBC_2.0 __sigdelset F -GLIBC_2.0 __sigismember F -GLIBC_2.0 __sigpause F -GLIBC_2.0 __sigsetjmp F -GLIBC_2.0 __stpcpy F -GLIBC_2.0 __stpncpy F -GLIBC_2.0 __strcasecmp F -GLIBC_2.0 __strdup F -GLIBC_2.0 __strerror_r F -GLIBC_2.0 __strtod_internal F -GLIBC_2.0 __strtof_internal F -GLIBC_2.0 __strtok_r F -GLIBC_2.0 __strtol_internal F -GLIBC_2.0 __strtold_internal F -GLIBC_2.0 __strtoll_internal F -GLIBC_2.0 __strtoq_internal F -GLIBC_2.0 __strtoul_internal F -GLIBC_2.0 __strtoull_internal F -GLIBC_2.0 __strtouq_internal F -GLIBC_2.0 __sysv_signal F -GLIBC_2.0 __timezone D 0x4 -GLIBC_2.0 __tzname D 0x8 -GLIBC_2.0 __ucmpdi2 F -GLIBC_2.0 __udivdi3 F -GLIBC_2.0 __uflow F -GLIBC_2.0 __umoddi3 F -GLIBC_2.0 __underflow F -GLIBC_2.0 __vfscanf F -GLIBC_2.0 __vsnprintf F -GLIBC_2.0 __vsscanf F -GLIBC_2.0 __wait F -GLIBC_2.0 __waitpid F -GLIBC_2.0 __wcstod_internal F -GLIBC_2.0 __wcstof_internal F -GLIBC_2.0 __wcstol_internal F -GLIBC_2.0 __wcstold_internal F -GLIBC_2.0 __wcstoll_internal F -GLIBC_2.0 __wcstoul_internal F -GLIBC_2.0 __wcstoull_internal F -GLIBC_2.0 __write F -GLIBC_2.0 __xmknod F -GLIBC_2.0 __xpg_basename F -GLIBC_2.0 __xstat F -GLIBC_2.0 _environ D 0x4 -GLIBC_2.0 _exit F -GLIBC_2.0 _libc_intl_domainname D 0x5 -GLIBC_2.0 _longjmp F -GLIBC_2.0 _mcleanup F -GLIBC_2.0 _mcount F -GLIBC_2.0 _nl_default_dirname D 0x12 -GLIBC_2.0 _nl_domain_bindings D 0x4 -GLIBC_2.0 _nl_msg_cat_cntr D 0x4 -GLIBC_2.0 _null_auth D 0xc -GLIBC_2.0 _obstack D 0x4 -GLIBC_2.0 _obstack_allocated_p F -GLIBC_2.0 _obstack_begin F -GLIBC_2.0 _obstack_begin_1 F -GLIBC_2.0 _obstack_free F -GLIBC_2.0 _obstack_memory_used F -GLIBC_2.0 _obstack_newchunk F -GLIBC_2.0 _res D 0x200 -GLIBC_2.0 _rpc_dtablesize F -GLIBC_2.0 _seterr_reply F -GLIBC_2.0 _setjmp F -GLIBC_2.0 _sys_errlist D 0x1ec -GLIBC_2.0 _sys_nerr D 0x4 -GLIBC_2.0 _sys_siglist D 0x80 -GLIBC_2.0 _tolower F -GLIBC_2.0 _toupper F -GLIBC_2.0 a64l F -GLIBC_2.0 abort F -GLIBC_2.0 abs F -GLIBC_2.0 accept F -GLIBC_2.0 access F -GLIBC_2.0 acct F -GLIBC_2.0 addmntent F -GLIBC_2.0 adjtime F -GLIBC_2.0 adjtimex F -GLIBC_2.0 advance F -GLIBC_2.0 alarm F -GLIBC_2.0 alphasort F -GLIBC_2.0 argz_add F -GLIBC_2.0 argz_add_sep F -GLIBC_2.0 argz_append F -GLIBC_2.0 argz_count F -GLIBC_2.0 argz_create F -GLIBC_2.0 argz_create_sep F -GLIBC_2.0 argz_delete F -GLIBC_2.0 argz_extract F -GLIBC_2.0 argz_insert F -GLIBC_2.0 argz_next F -GLIBC_2.0 argz_replace F -GLIBC_2.0 argz_stringify F -GLIBC_2.0 asctime F -GLIBC_2.0 asctime_r F -GLIBC_2.0 asprintf F -GLIBC_2.0 atexit F -GLIBC_2.0 atof F -GLIBC_2.0 atoi F -GLIBC_2.0 atol F -GLIBC_2.0 atoll F -GLIBC_2.0 authnone_create F -GLIBC_2.0 authunix_create F -GLIBC_2.0 authunix_create_default F -GLIBC_2.0 basename F -GLIBC_2.0 bcmp F -GLIBC_2.0 bcopy F -GLIBC_2.0 bdflush F -GLIBC_2.0 bind F -GLIBC_2.0 bindresvport F -GLIBC_2.0 bindtextdomain F -GLIBC_2.0 brk F -GLIBC_2.0 bsd_signal F -GLIBC_2.0 bsearch F -GLIBC_2.0 btowc F -GLIBC_2.0 bzero F -GLIBC_2.0 calloc F -GLIBC_2.0 callrpc F -GLIBC_2.0 canonicalize_file_name F -GLIBC_2.0 catclose F -GLIBC_2.0 catgets F -GLIBC_2.0 catopen F -GLIBC_2.0 cfgetispeed F -GLIBC_2.0 cfgetospeed F -GLIBC_2.0 cfmakeraw F -GLIBC_2.0 cfree F -GLIBC_2.0 cfsetispeed F -GLIBC_2.0 cfsetospeed F -GLIBC_2.0 cfsetspeed F -GLIBC_2.0 chdir F -GLIBC_2.0 chflags F -GLIBC_2.0 chmod F -GLIBC_2.0 chown F -GLIBC_2.0 chroot F -GLIBC_2.0 clearenv F -GLIBC_2.0 clearerr F -GLIBC_2.0 clearerr_unlocked F -GLIBC_2.0 clnt_broadcast F -GLIBC_2.0 clnt_create F -GLIBC_2.0 clnt_pcreateerror F -GLIBC_2.0 clnt_perrno F -GLIBC_2.0 clnt_perror F -GLIBC_2.0 clnt_spcreateerror F -GLIBC_2.0 clnt_sperrno F -GLIBC_2.0 clnt_sperror F -GLIBC_2.0 clntraw_create F -GLIBC_2.0 clnttcp_create F -GLIBC_2.0 clntudp_bufcreate F -GLIBC_2.0 clntudp_create F -GLIBC_2.0 clock F -GLIBC_2.0 clone F -GLIBC_2.0 close F -GLIBC_2.0 closedir F -GLIBC_2.0 closelog F -GLIBC_2.0 confstr F -GLIBC_2.0 connect F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 creat F -GLIBC_2.0 create_module F -GLIBC_2.0 ctermid F -GLIBC_2.0 ctime F -GLIBC_2.0 ctime_r F -GLIBC_2.0 cuserid F -GLIBC_2.0 daemon F -GLIBC_2.0 daylight D 0x4 -GLIBC_2.0 dcgettext F -GLIBC_2.0 delete_module F -GLIBC_2.0 dgettext F -GLIBC_2.0 difftime F -GLIBC_2.0 dirfd F -GLIBC_2.0 dirname F -GLIBC_2.0 div F -GLIBC_2.0 dprintf F -GLIBC_2.0 drand48 F -GLIBC_2.0 drand48_r F -GLIBC_2.0 dup F -GLIBC_2.0 dup2 F -GLIBC_2.0 dysize F -GLIBC_2.0 ecvt F -GLIBC_2.0 ecvt_r F -GLIBC_2.0 endaliasent F -GLIBC_2.0 endfsent F -GLIBC_2.0 endgrent F -GLIBC_2.0 endhostent F -GLIBC_2.0 endmntent F -GLIBC_2.0 endnetent F -GLIBC_2.0 endnetgrent F -GLIBC_2.0 endprotoent F -GLIBC_2.0 endpwent F -GLIBC_2.0 endrpcent F -GLIBC_2.0 endservent F -GLIBC_2.0 endspent F -GLIBC_2.0 endttyent F -GLIBC_2.0 endusershell F -GLIBC_2.0 endutent F -GLIBC_2.0 environ D 0x4 -GLIBC_2.0 envz_add F -GLIBC_2.0 envz_entry F -GLIBC_2.0 envz_get F -GLIBC_2.0 envz_merge F -GLIBC_2.0 envz_remove F -GLIBC_2.0 envz_strip F -GLIBC_2.0 erand48 F -GLIBC_2.0 erand48_r F -GLIBC_2.0 err F -GLIBC_2.0 error F -GLIBC_2.0 error_at_line F -GLIBC_2.0 error_message_count D 0x4 -GLIBC_2.0 error_one_per_line D 0x4 -GLIBC_2.0 error_print_progname D 0x4 -GLIBC_2.0 errx F -GLIBC_2.0 ether_aton F -GLIBC_2.0 ether_aton_r F -GLIBC_2.0 ether_hostton F -GLIBC_2.0 ether_line F -GLIBC_2.0 ether_ntoa F -GLIBC_2.0 ether_ntoa_r F -GLIBC_2.0 ether_ntohost F -GLIBC_2.0 euidaccess F -GLIBC_2.0 execl F -GLIBC_2.0 execle F -GLIBC_2.0 execlp F -GLIBC_2.0 execv F -GLIBC_2.0 execve F -GLIBC_2.0 execvp F -GLIBC_2.0 exit F -GLIBC_2.0 fchdir F -GLIBC_2.0 fchflags F -GLIBC_2.0 fchmod F -GLIBC_2.0 fchown F -GLIBC_2.0 fclose F -GLIBC_2.0 fcloseall F -GLIBC_2.0 fcntl F -GLIBC_2.0 fcvt F -GLIBC_2.0 fcvt_r F -GLIBC_2.0 fdatasync F -GLIBC_2.0 fdopen F -GLIBC_2.0 feof F -GLIBC_2.0 feof_unlocked F -GLIBC_2.0 ferror F -GLIBC_2.0 ferror_unlocked F -GLIBC_2.0 fexecve F -GLIBC_2.0 fflush F -GLIBC_2.0 fflush_unlocked F -GLIBC_2.0 ffs F -GLIBC_2.0 fgetc F -GLIBC_2.0 fgetgrent F -GLIBC_2.0 fgetgrent_r F -GLIBC_2.0 fgetpos F -GLIBC_2.0 fgetpwent F -GLIBC_2.0 fgetpwent_r F -GLIBC_2.0 fgets F -GLIBC_2.0 fgetspent F -GLIBC_2.0 fgetspent_r F -GLIBC_2.0 fileno F -GLIBC_2.0 fileno_unlocked F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 flock F -GLIBC_2.0 flockfile F -GLIBC_2.0 fnmatch F -GLIBC_2.0 fopen F -GLIBC_2.0 fopencookie F -GLIBC_2.0 fork F -GLIBC_2.0 fpathconf F -GLIBC_2.0 fprintf F -GLIBC_2.0 fputc F -GLIBC_2.0 fputc_unlocked F -GLIBC_2.0 fputs F -GLIBC_2.0 fread F -GLIBC_2.0 free F -GLIBC_2.0 freeaddrinfo F -GLIBC_2.0 freopen F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 fscanf F -GLIBC_2.0 fseek F -GLIBC_2.0 fsetpos F -GLIBC_2.0 fstatfs F -GLIBC_2.0 fsync F -GLIBC_2.0 ftell F -GLIBC_2.0 ftime F -GLIBC_2.0 ftok F -GLIBC_2.0 ftruncate F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 fts_children F -GLIBC_2.0 fts_close F -GLIBC_2.0 fts_open F -GLIBC_2.0 fts_read F -GLIBC_2.0 fts_set F -GLIBC_2.0 ftw F -GLIBC_2.0 funlockfile F -GLIBC_2.0 fwrite F -GLIBC_2.0 gcvt F -GLIBC_2.0 get_avphys_pages F -GLIBC_2.0 get_current_dir_name F -GLIBC_2.0 get_kernel_syms F -GLIBC_2.0 get_myaddress F -GLIBC_2.0 get_nprocs F -GLIBC_2.0 get_nprocs_conf F -GLIBC_2.0 get_phys_pages F -GLIBC_2.0 getaddrinfo F -GLIBC_2.0 getaliasbyname F -GLIBC_2.0 getaliasbyname_r F -GLIBC_2.0 getaliasent F -GLIBC_2.0 getaliasent_r F -GLIBC_2.0 getc F -GLIBC_2.0 getc_unlocked F -GLIBC_2.0 getchar F -GLIBC_2.0 getchar_unlocked F -GLIBC_2.0 getcwd F -GLIBC_2.0 getdelim F -GLIBC_2.0 getdirentries F -GLIBC_2.0 getdomainname F -GLIBC_2.0 getdtablesize F -GLIBC_2.0 getegid F -GLIBC_2.0 getenv F -GLIBC_2.0 geteuid F -GLIBC_2.0 getfsent F -GLIBC_2.0 getfsfile F -GLIBC_2.0 getfsspec F -GLIBC_2.0 getgid F -GLIBC_2.0 getgrent F -GLIBC_2.0 getgrent_r F -GLIBC_2.0 getgrgid F -GLIBC_2.0 getgrgid_r F -GLIBC_2.0 getgrnam F -GLIBC_2.0 getgrnam_r F -GLIBC_2.0 getgroups F -GLIBC_2.0 gethostbyaddr F -GLIBC_2.0 gethostbyaddr_r F -GLIBC_2.0 gethostbyname F -GLIBC_2.0 gethostbyname2 F -GLIBC_2.0 gethostbyname2_r F -GLIBC_2.0 gethostbyname_r F -GLIBC_2.0 gethostent F -GLIBC_2.0 gethostent_r F -GLIBC_2.0 gethostid F -GLIBC_2.0 gethostname F -GLIBC_2.0 getitimer F -GLIBC_2.0 getline F -GLIBC_2.0 getlogin F -GLIBC_2.0 getlogin_r F -GLIBC_2.0 getmntent F -GLIBC_2.0 getmntent_r F -GLIBC_2.0 getnetbyaddr F -GLIBC_2.0 getnetbyaddr_r F -GLIBC_2.0 getnetbyname F -GLIBC_2.0 getnetbyname_r F -GLIBC_2.0 getnetent F -GLIBC_2.0 getnetent_r F -GLIBC_2.0 getnetgrent F -GLIBC_2.0 getnetgrent_r F -GLIBC_2.0 getopt F -GLIBC_2.0 getopt_long F -GLIBC_2.0 getopt_long_only F -GLIBC_2.0 getpagesize F -GLIBC_2.0 getpass F -GLIBC_2.0 getpeername F -GLIBC_2.0 getpgid F -GLIBC_2.0 getpgrp F -GLIBC_2.0 getpid F -GLIBC_2.0 getppid F -GLIBC_2.0 getpriority F -GLIBC_2.0 getprotobyname F -GLIBC_2.0 getprotobyname_r F -GLIBC_2.0 getprotobynumber F -GLIBC_2.0 getprotobynumber_r F -GLIBC_2.0 getprotoent F -GLIBC_2.0 getprotoent_r F -GLIBC_2.0 getpublickey F -GLIBC_2.0 getpw F -GLIBC_2.0 getpwent F -GLIBC_2.0 getpwent_r F -GLIBC_2.0 getpwnam F -GLIBC_2.0 getpwnam_r F -GLIBC_2.0 getpwuid F -GLIBC_2.0 getpwuid_r F -GLIBC_2.0 getresgid F -GLIBC_2.0 getresuid F -GLIBC_2.0 getrlimit F -GLIBC_2.0 getrpcbyname F -GLIBC_2.0 getrpcbyname_r F -GLIBC_2.0 getrpcbynumber F -GLIBC_2.0 getrpcbynumber_r F -GLIBC_2.0 getrpcent F -GLIBC_2.0 getrpcent_r F -GLIBC_2.0 getrpcport F -GLIBC_2.0 getrusage F -GLIBC_2.0 gets F -GLIBC_2.0 getsecretkey F -GLIBC_2.0 getservbyname F -GLIBC_2.0 getservbyname_r F -GLIBC_2.0 getservbyport F -GLIBC_2.0 getservbyport_r F -GLIBC_2.0 getservent F -GLIBC_2.0 getservent_r F -GLIBC_2.0 getsid F -GLIBC_2.0 getsockname F -GLIBC_2.0 getsockopt F -GLIBC_2.0 getspent F -GLIBC_2.0 getspent_r F -GLIBC_2.0 getspnam F -GLIBC_2.0 getspnam_r F -GLIBC_2.0 getsubopt F -GLIBC_2.0 gettext F -GLIBC_2.0 gettimeofday F -GLIBC_2.0 getttyent F -GLIBC_2.0 getttynam F -GLIBC_2.0 getuid F -GLIBC_2.0 getusershell F -GLIBC_2.0 getutent F -GLIBC_2.0 getutent_r F -GLIBC_2.0 getutid F -GLIBC_2.0 getutid_r F -GLIBC_2.0 getutline F -GLIBC_2.0 getutline_r F -GLIBC_2.0 getw F -GLIBC_2.0 getwd F -GLIBC_2.0 glob F -GLIBC_2.0 glob_pattern_p F -GLIBC_2.0 globfree F -GLIBC_2.0 gmtime F -GLIBC_2.0 gmtime_r F -GLIBC_2.0 group_member F -GLIBC_2.0 gsignal F -GLIBC_2.0 gtty F -GLIBC_2.0 h_errlist D 0x14 -GLIBC_2.0 h_nerr D 0x4 -GLIBC_2.0 hasmntopt F -GLIBC_2.0 hcreate F -GLIBC_2.0 hcreate_r F -GLIBC_2.0 hdestroy F -GLIBC_2.0 hdestroy_r F -GLIBC_2.0 herror F -GLIBC_2.0 hsearch F -GLIBC_2.0 hsearch_r F -GLIBC_2.0 hstrerror F -GLIBC_2.0 htonl F -GLIBC_2.0 htons F -GLIBC_2.0 index F -GLIBC_2.0 inet_addr F -GLIBC_2.0 inet_aton F -GLIBC_2.0 inet_lnaof F -GLIBC_2.0 inet_makeaddr F -GLIBC_2.0 inet_netof F -GLIBC_2.0 inet_network F -GLIBC_2.0 inet_nsap_addr F -GLIBC_2.0 inet_nsap_ntoa F -GLIBC_2.0 inet_ntoa F -GLIBC_2.0 inet_ntop F -GLIBC_2.0 inet_pton F -GLIBC_2.0 init_module F -GLIBC_2.0 initgroups F -GLIBC_2.0 initstate F -GLIBC_2.0 initstate_r F -GLIBC_2.0 innetgr F -GLIBC_2.0 insque F -GLIBC_2.0 ioctl F -GLIBC_2.0 iruserok F -GLIBC_2.0 isalnum F -GLIBC_2.0 isalpha F -GLIBC_2.0 isascii F -GLIBC_2.0 isatty F -GLIBC_2.0 isblank F -GLIBC_2.0 iscntrl F -GLIBC_2.0 isdigit F -GLIBC_2.0 isfdtype F -GLIBC_2.0 isgraph F -GLIBC_2.0 isinf F -GLIBC_2.0 isinff F -GLIBC_2.0 isinfl F -GLIBC_2.0 islower F -GLIBC_2.0 isnan F -GLIBC_2.0 isnanf F -GLIBC_2.0 isnanl F -GLIBC_2.0 isprint F -GLIBC_2.0 ispunct F -GLIBC_2.0 isspace F -GLIBC_2.0 isupper F -GLIBC_2.0 iswalnum F -GLIBC_2.0 iswalpha F -GLIBC_2.0 iswcntrl F -GLIBC_2.0 iswctype F -GLIBC_2.0 iswdigit F -GLIBC_2.0 iswgraph F -GLIBC_2.0 iswlower F -GLIBC_2.0 iswprint F -GLIBC_2.0 iswpunct F -GLIBC_2.0 iswspace F -GLIBC_2.0 iswupper F -GLIBC_2.0 iswxdigit F -GLIBC_2.0 isxdigit F -GLIBC_2.0 jrand48 F -GLIBC_2.0 jrand48_r F -GLIBC_2.0 kill F -GLIBC_2.0 killpg F -GLIBC_2.0 klogctl F -GLIBC_2.0 l64a F -GLIBC_2.0 labs F -GLIBC_2.0 lchown F -GLIBC_2.0 lckpwdf F -GLIBC_2.0 lcong48 F -GLIBC_2.0 lcong48_r F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 ldiv F -GLIBC_2.0 lfind F -GLIBC_2.0 link F -GLIBC_2.0 listen F -GLIBC_2.0 llabs F -GLIBC_2.0 lldiv F -GLIBC_2.0 llseek F -GLIBC_2.0 loc1 D 0x4 -GLIBC_2.0 loc2 D 0x4 -GLIBC_2.0 localeconv F -GLIBC_2.0 localtime F -GLIBC_2.0 localtime_r F -GLIBC_2.0 lockf F -GLIBC_2.0 locs D 0x4 -GLIBC_2.0 longjmp F -GLIBC_2.0 lrand48 F -GLIBC_2.0 lrand48_r F -GLIBC_2.0 lsearch F -GLIBC_2.0 lseek F -GLIBC_2.0 madvise F -GLIBC_2.0 mallinfo F -GLIBC_2.0 malloc F -GLIBC_2.0 malloc_get_state F -GLIBC_2.0 malloc_set_state F -GLIBC_2.0 malloc_stats F -GLIBC_2.0 malloc_trim F -GLIBC_2.0 malloc_usable_size F -GLIBC_2.0 mallopt F -GLIBC_2.0 mallwatch D 0x4 -GLIBC_2.0 mblen F -GLIBC_2.0 mbrlen F -GLIBC_2.0 mbrtowc F -GLIBC_2.0 mbsinit F -GLIBC_2.0 mbsnrtowcs F -GLIBC_2.0 mbsrtowcs F -GLIBC_2.0 mbstowcs F -GLIBC_2.0 mbtowc F -GLIBC_2.0 mcheck F -GLIBC_2.0 memalign F -GLIBC_2.0 memccpy F -GLIBC_2.0 memchr F -GLIBC_2.0 memcmp F -GLIBC_2.0 memcpy F -GLIBC_2.0 memfrob F -GLIBC_2.0 memmem F -GLIBC_2.0 memmove F -GLIBC_2.0 memset F -GLIBC_2.0 mkdir F -GLIBC_2.0 mkfifo F -GLIBC_2.0 mkstemp F -GLIBC_2.0 mktemp F -GLIBC_2.0 mktime F -GLIBC_2.0 mlock F -GLIBC_2.0 mlockall F -GLIBC_2.0 mmap F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 monstartup F -GLIBC_2.0 mount F -GLIBC_2.0 mprobe F -GLIBC_2.0 mprotect F -GLIBC_2.0 mrand48 F -GLIBC_2.0 mrand48_r F -GLIBC_2.0 mremap F -GLIBC_2.0 msgctl F -GLIBC_2.0 msgget F -GLIBC_2.0 msgrcv F -GLIBC_2.0 msgsnd F -GLIBC_2.0 msync F -GLIBC_2.0 mtrace F -GLIBC_2.0 munlock F -GLIBC_2.0 munlockall F -GLIBC_2.0 munmap F -GLIBC_2.0 muntrace F -GLIBC_2.0 nanosleep F -GLIBC_2.0 nfsservctl F -GLIBC_2.0 nice F -GLIBC_2.0 nl_langinfo F -GLIBC_2.0 nrand48 F -GLIBC_2.0 nrand48_r F -GLIBC_2.0 ntohl F -GLIBC_2.0 ntohs F -GLIBC_2.0 obstack_alloc_failed_handler D 0x4 -GLIBC_2.0 obstack_exit_failure D 0x4 -GLIBC_2.0 obstack_free F -GLIBC_2.0 obstack_printf F -GLIBC_2.0 obstack_vprintf F -GLIBC_2.0 on_exit F -GLIBC_2.0 open F -GLIBC_2.0 open_memstream F -GLIBC_2.0 opendir F -GLIBC_2.0 openlog F -GLIBC_2.0 optarg D 0x4 -GLIBC_2.0 opterr D 0x4 -GLIBC_2.0 optind D 0x4 -GLIBC_2.0 optopt D 0x4 -GLIBC_2.0 parse_printf_format F -GLIBC_2.0 pathconf F -GLIBC_2.0 pause F -GLIBC_2.0 pclose F -GLIBC_2.0 perror F -GLIBC_2.0 personality F -GLIBC_2.0 pipe F -GLIBC_2.0 pmap_getmaps F -GLIBC_2.0 pmap_getport F -GLIBC_2.0 pmap_rmtcall F -GLIBC_2.0 pmap_set F -GLIBC_2.0 pmap_unset F -GLIBC_2.0 poll F -GLIBC_2.0 popen F -GLIBC_2.0 prctl F -GLIBC_2.0 printf F -GLIBC_2.0 profil F -GLIBC_2.0 program_invocation_name D 0x4 -GLIBC_2.0 program_invocation_short_name D 0x4 -GLIBC_2.0 pselect F -GLIBC_2.0 psignal F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 ptrace F -GLIBC_2.0 putc F -GLIBC_2.0 putc_unlocked F -GLIBC_2.0 putchar F -GLIBC_2.0 putchar_unlocked F -GLIBC_2.0 putenv F -GLIBC_2.0 putpwent F -GLIBC_2.0 puts F -GLIBC_2.0 putspent F -GLIBC_2.0 pututline F -GLIBC_2.0 putw F -GLIBC_2.0 pvalloc F -GLIBC_2.0 qecvt F -GLIBC_2.0 qecvt_r F -GLIBC_2.0 qfcvt F -GLIBC_2.0 qfcvt_r F -GLIBC_2.0 qgcvt F -GLIBC_2.0 qsort F -GLIBC_2.0 query_module F -GLIBC_2.0 quotactl F -GLIBC_2.0 raise F -GLIBC_2.0 rand F -GLIBC_2.0 rand_r F -GLIBC_2.0 random F -GLIBC_2.0 random_r F -GLIBC_2.0 rcmd F -GLIBC_2.0 re_comp F -GLIBC_2.0 re_compile_fastmap F -GLIBC_2.0 re_compile_pattern F -GLIBC_2.0 re_exec F -GLIBC_2.0 re_match F -GLIBC_2.0 re_match_2 F -GLIBC_2.0 re_max_failures D 0x4 -GLIBC_2.0 re_search F -GLIBC_2.0 re_search_2 F -GLIBC_2.0 re_set_registers F -GLIBC_2.0 re_set_syntax F -GLIBC_2.0 re_syntax_options D 0x4 -GLIBC_2.0 read F -GLIBC_2.0 readdir F -GLIBC_2.0 readdir_r F -GLIBC_2.0 readlink F -GLIBC_2.0 readv F -GLIBC_2.0 realloc F -GLIBC_2.0 realpath F -GLIBC_2.0 reboot F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 regcomp F -GLIBC_2.0 regerror F -GLIBC_2.0 regexec F -GLIBC_2.0 regfree F -GLIBC_2.0 register_printf_function F -GLIBC_2.0 registerrpc F -GLIBC_2.0 remove F -GLIBC_2.0 remque F -GLIBC_2.0 rename F -GLIBC_2.0 res_init F -GLIBC_2.0 revoke F -GLIBC_2.0 rewind F -GLIBC_2.0 rewinddir F -GLIBC_2.0 rexec F -GLIBC_2.0 rexecoptions D 0x4 -GLIBC_2.0 rindex F -GLIBC_2.0 rmdir F -GLIBC_2.0 rpc_createerr D 0x10 -GLIBC_2.0 rpmatch F -GLIBC_2.0 rresvport F -GLIBC_2.0 ruserok F -GLIBC_2.0 ruserpass F -GLIBC_2.0 sbrk F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 scandir F -GLIBC_2.0 scanf F -GLIBC_2.0 sched_get_priority_max F -GLIBC_2.0 sched_get_priority_min F -GLIBC_2.0 sched_getparam F -GLIBC_2.0 sched_getscheduler F -GLIBC_2.0 sched_rr_get_interval F -GLIBC_2.0 sched_setparam F -GLIBC_2.0 sched_setscheduler F -GLIBC_2.0 sched_yield F -GLIBC_2.0 seed48 F -GLIBC_2.0 seed48_r F -GLIBC_2.0 seekdir F -GLIBC_2.0 select F -GLIBC_2.0 semctl F -GLIBC_2.0 semget F -GLIBC_2.0 semop F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 setaliasent F -GLIBC_2.0 setbuf F -GLIBC_2.0 setbuffer F -GLIBC_2.0 setcontext F -GLIBC_2.0 setdomainname F -GLIBC_2.0 setegid F -GLIBC_2.0 setenv F -GLIBC_2.0 seteuid F -GLIBC_2.0 setfsent F -GLIBC_2.0 setfsgid F -GLIBC_2.0 setfsuid F -GLIBC_2.0 setgid F -GLIBC_2.0 setgrent F -GLIBC_2.0 setgroups F -GLIBC_2.0 sethostent F -GLIBC_2.0 sethostid F -GLIBC_2.0 sethostname F -GLIBC_2.0 setitimer F -GLIBC_2.0 setjmp F -GLIBC_2.0 setlinebuf F -GLIBC_2.0 setlocale F -GLIBC_2.0 setlogin F -GLIBC_2.0 setlogmask F -GLIBC_2.0 setmntent F -GLIBC_2.0 setnetent F -GLIBC_2.0 setnetgrent F -GLIBC_2.0 setpgid F -GLIBC_2.0 setpgrp F -GLIBC_2.0 setpriority F -GLIBC_2.0 setprotoent F -GLIBC_2.0 setpwent F -GLIBC_2.0 setregid F -GLIBC_2.0 setresgid F -GLIBC_2.0 setresuid F -GLIBC_2.0 setreuid F -GLIBC_2.0 setrlimit F -GLIBC_2.0 setrpcent F -GLIBC_2.0 setservent F -GLIBC_2.0 setsid F -GLIBC_2.0 setsockopt F -GLIBC_2.0 setspent F -GLIBC_2.0 setstate F -GLIBC_2.0 setstate_r F -GLIBC_2.0 settimeofday F -GLIBC_2.0 setttyent F -GLIBC_2.0 setuid F -GLIBC_2.0 setusershell F -GLIBC_2.0 setutent F -GLIBC_2.0 setvbuf F -GLIBC_2.0 sgetspent F -GLIBC_2.0 sgetspent_r F -GLIBC_2.0 shmat F -GLIBC_2.0 shmctl F -GLIBC_2.0 shmdt F -GLIBC_2.0 shmget F -GLIBC_2.0 shutdown F -GLIBC_2.0 sigaction F -GLIBC_2.0 sigaddset F -GLIBC_2.0 sigaltstack F -GLIBC_2.0 sigandset F -GLIBC_2.0 sigblock F -GLIBC_2.0 sigdelset F -GLIBC_2.0 sigemptyset F -GLIBC_2.0 sigfillset F -GLIBC_2.0 siggetmask F -GLIBC_2.0 siginterrupt F -GLIBC_2.0 sigisemptyset F -GLIBC_2.0 sigismember F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 signal F -GLIBC_2.0 sigorset F -GLIBC_2.0 sigpause F -GLIBC_2.0 sigpending F -GLIBC_2.0 sigprocmask F -GLIBC_2.0 sigreturn F -GLIBC_2.0 sigsetmask F -GLIBC_2.0 sigstack F -GLIBC_2.0 sigsuspend F -GLIBC_2.0 sigvec F -GLIBC_2.0 sigwait F -GLIBC_2.0 sleep F -GLIBC_2.0 snprintf F -GLIBC_2.0 socket F -GLIBC_2.0 socketpair F -GLIBC_2.0 sprintf F -GLIBC_2.0 srand F -GLIBC_2.0 srand48 F -GLIBC_2.0 srand48_r F -GLIBC_2.0 srandom F -GLIBC_2.0 srandom_r F -GLIBC_2.0 sscanf F -GLIBC_2.0 ssignal F -GLIBC_2.0 sstk F -GLIBC_2.0 statfs F -GLIBC_2.0 stderr D 0x4 -GLIBC_2.0 stdin D 0x4 -GLIBC_2.0 stdout D 0x4 -GLIBC_2.0 step F -GLIBC_2.0 stime F -GLIBC_2.0 stpcpy F -GLIBC_2.0 stpncpy F -GLIBC_2.0 strcasecmp F -GLIBC_2.0 strcat F -GLIBC_2.0 strchr F -GLIBC_2.0 strcmp F -GLIBC_2.0 strcoll F -GLIBC_2.0 strcpy F -GLIBC_2.0 strcspn F -GLIBC_2.0 strdup F -GLIBC_2.0 strerror F -GLIBC_2.0 strerror_r F -GLIBC_2.0 strfmon F -GLIBC_2.0 strfry F -GLIBC_2.0 strftime F -GLIBC_2.0 strlen F -GLIBC_2.0 strncasecmp F -GLIBC_2.0 strncat F -GLIBC_2.0 strncmp F -GLIBC_2.0 strncpy F -GLIBC_2.0 strndup F -GLIBC_2.0 strnlen F -GLIBC_2.0 strpbrk F -GLIBC_2.0 strptime F -GLIBC_2.0 strrchr F -GLIBC_2.0 strsep F -GLIBC_2.0 strsignal F -GLIBC_2.0 strspn F -GLIBC_2.0 strstr F -GLIBC_2.0 strtod F -GLIBC_2.0 strtof F -GLIBC_2.0 strtok F -GLIBC_2.0 strtok_r F -GLIBC_2.0 strtol F -GLIBC_2.0 strtold F -GLIBC_2.0 strtoll F -GLIBC_2.0 strtoq F -GLIBC_2.0 strtoul F -GLIBC_2.0 strtoull F -GLIBC_2.0 strtouq F -GLIBC_2.0 strxfrm F -GLIBC_2.0 stty F -GLIBC_2.0 svc_exit F -GLIBC_2.0 svc_fdset D 0x80 -GLIBC_2.0 svc_getreq F -GLIBC_2.0 svc_getreqset F -GLIBC_2.0 svc_register F -GLIBC_2.0 svc_run F -GLIBC_2.0 svc_sendreply F -GLIBC_2.0 svc_unregister F -GLIBC_2.0 svcauthdes_stats D 0xc -GLIBC_2.0 svcerr_auth F -GLIBC_2.0 svcerr_decode F -GLIBC_2.0 svcerr_noproc F -GLIBC_2.0 svcerr_noprog F -GLIBC_2.0 svcerr_progvers F -GLIBC_2.0 svcerr_systemerr F -GLIBC_2.0 svcerr_weakauth F -GLIBC_2.0 svcfd_create F -GLIBC_2.0 svcraw_create F -GLIBC_2.0 svctcp_create F -GLIBC_2.0 svcudp_bufcreate F -GLIBC_2.0 svcudp_create F -GLIBC_2.0 svcudp_enablecache F -GLIBC_2.0 swab F -GLIBC_2.0 swapoff F -GLIBC_2.0 swapon F -GLIBC_2.0 symlink F -GLIBC_2.0 sync F -GLIBC_2.0 sys_errlist D 0x1ec -GLIBC_2.0 sys_nerr D 0x4 -GLIBC_2.0 sys_sigabbrev D 0x80 -GLIBC_2.0 sys_siglist D 0x80 -GLIBC_2.0 syscall F -GLIBC_2.0 sysconf F -GLIBC_2.0 sysctl F -GLIBC_2.0 sysinfo F -GLIBC_2.0 syslog F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 tcflow F -GLIBC_2.0 tcflush F -GLIBC_2.0 tcgetattr F -GLIBC_2.0 tcgetpgrp F -GLIBC_2.0 tcsendbreak F -GLIBC_2.0 tcsetattr F -GLIBC_2.0 tcsetpgrp F -GLIBC_2.0 tdelete F -GLIBC_2.0 telldir F -GLIBC_2.0 tempnam F -GLIBC_2.0 textdomain F -GLIBC_2.0 tfind F -GLIBC_2.0 time F -GLIBC_2.0 timegm F -GLIBC_2.0 timelocal F -GLIBC_2.0 times F -GLIBC_2.0 timezone D 0x4 -GLIBC_2.0 tmpfile F -GLIBC_2.0 tmpnam F -GLIBC_2.0 tmpnam_r F -GLIBC_2.0 toascii F -GLIBC_2.0 tolower F -GLIBC_2.0 toupper F -GLIBC_2.0 towctrans F -GLIBC_2.0 towlower F -GLIBC_2.0 towupper F -GLIBC_2.0 tr_break F -GLIBC_2.0 truncate F -GLIBC_2.0 tsearch F -GLIBC_2.0 ttyname F -GLIBC_2.0 ttyname_r F -GLIBC_2.0 ttyslot F -GLIBC_2.0 twalk F -GLIBC_2.0 tzname D 0x8 -GLIBC_2.0 tzset F -GLIBC_2.0 ualarm F -GLIBC_2.0 ulckpwdf F -GLIBC_2.0 ulimit F -GLIBC_2.0 umask F -GLIBC_2.0 umount F -GLIBC_2.0 uname F -GLIBC_2.0 ungetc F -GLIBC_2.0 unlink F -GLIBC_2.0 unsetenv F -GLIBC_2.0 updwtmp F -GLIBC_2.0 uselib F -GLIBC_2.0 usleep F -GLIBC_2.0 ustat F -GLIBC_2.0 utime F -GLIBC_2.0 utimes F -GLIBC_2.0 utmpname F -GLIBC_2.0 valloc F -GLIBC_2.0 vasprintf F -GLIBC_2.0 vdprintf F -GLIBC_2.0 verr F -GLIBC_2.0 verrx F -GLIBC_2.0 vfork F -GLIBC_2.0 vfprintf F -GLIBC_2.0 vfscanf F -GLIBC_2.0 vhangup F -GLIBC_2.0 vlimit F -GLIBC_2.0 vprintf F -GLIBC_2.0 vscanf F -GLIBC_2.0 vsnprintf F -GLIBC_2.0 vsprintf F -GLIBC_2.0 vsscanf F -GLIBC_2.0 vsyslog F -GLIBC_2.0 vtimes F -GLIBC_2.0 vwarn F -GLIBC_2.0 vwarnx F -GLIBC_2.0 wait F -GLIBC_2.0 wait3 F -GLIBC_2.0 wait4 F -GLIBC_2.0 waitpid F -GLIBC_2.0 warn F -GLIBC_2.0 warnx F -GLIBC_2.0 wcpcpy F -GLIBC_2.0 wcpncpy F -GLIBC_2.0 wcrtomb F -GLIBC_2.0 wcscat F -GLIBC_2.0 wcschr F -GLIBC_2.0 wcscmp F -GLIBC_2.0 wcscoll F -GLIBC_2.0 wcscpy F -GLIBC_2.0 wcscspn F -GLIBC_2.0 wcsdup F -GLIBC_2.0 wcslen F -GLIBC_2.0 wcsncat F -GLIBC_2.0 wcsncmp F -GLIBC_2.0 wcsncpy F -GLIBC_2.0 wcsnrtombs F -GLIBC_2.0 wcspbrk F -GLIBC_2.0 wcsrchr F -GLIBC_2.0 wcsrtombs F -GLIBC_2.0 wcsspn F -GLIBC_2.0 wcsstr F -GLIBC_2.0 wcstod F -GLIBC_2.0 wcstof F -GLIBC_2.0 wcstok F -GLIBC_2.0 wcstol F -GLIBC_2.0 wcstold F -GLIBC_2.0 wcstombs F -GLIBC_2.0 wcstoq F -GLIBC_2.0 wcstoul F -GLIBC_2.0 wcstouq F -GLIBC_2.0 wcswidth F -GLIBC_2.0 wcsxfrm F -GLIBC_2.0 wctob F -GLIBC_2.0 wctomb F -GLIBC_2.0 wctrans F -GLIBC_2.0 wctype F -GLIBC_2.0 wcwidth F -GLIBC_2.0 wmemchr F -GLIBC_2.0 wmemcmp F -GLIBC_2.0 wmemcpy F -GLIBC_2.0 wmemmove F -GLIBC_2.0 wmemset F -GLIBC_2.0 write F -GLIBC_2.0 writev F -GLIBC_2.0 xdr_accepted_reply F -GLIBC_2.0 xdr_array F -GLIBC_2.0 xdr_authunix_parms F -GLIBC_2.0 xdr_bool F -GLIBC_2.0 xdr_bytes F -GLIBC_2.0 xdr_callhdr F -GLIBC_2.0 xdr_callmsg F -GLIBC_2.0 xdr_char F -GLIBC_2.0 xdr_cryptkeyarg F -GLIBC_2.0 xdr_cryptkeyarg2 F -GLIBC_2.0 xdr_cryptkeyres F -GLIBC_2.0 xdr_des_block F -GLIBC_2.0 xdr_double F -GLIBC_2.0 xdr_enum F -GLIBC_2.0 xdr_float F -GLIBC_2.0 xdr_free F -GLIBC_2.0 xdr_int F -GLIBC_2.0 xdr_key_netstarg F -GLIBC_2.0 xdr_key_netstres F -GLIBC_2.0 xdr_keybuf F -GLIBC_2.0 xdr_keystatus F -GLIBC_2.0 xdr_long F -GLIBC_2.0 xdr_netobj F -GLIBC_2.0 xdr_opaque F -GLIBC_2.0 xdr_opaque_auth F -GLIBC_2.0 xdr_pmap F -GLIBC_2.0 xdr_pmaplist F -GLIBC_2.0 xdr_pointer F -GLIBC_2.0 xdr_reference F -GLIBC_2.0 xdr_rejected_reply F -GLIBC_2.0 xdr_replymsg F -GLIBC_2.0 xdr_rmtcall_args F -GLIBC_2.0 xdr_rmtcallres F -GLIBC_2.0 xdr_short F -GLIBC_2.0 xdr_string F -GLIBC_2.0 xdr_u_char F -GLIBC_2.0 xdr_u_int F -GLIBC_2.0 xdr_u_long F -GLIBC_2.0 xdr_u_short F -GLIBC_2.0 xdr_union F -GLIBC_2.0 xdr_vector F -GLIBC_2.0 xdr_void F -GLIBC_2.0 xdr_wrapstring F -GLIBC_2.0 xdrmem_create F -GLIBC_2.0 xdrrec_create F -GLIBC_2.0 xdrrec_endofrecord F -GLIBC_2.0 xdrrec_eof F -GLIBC_2.0 xdrrec_skiprecord F -GLIBC_2.0 xdrstdio_create F -GLIBC_2.0 xencrypt F -GLIBC_2.0 xprt_register F -GLIBC_2.0 xprt_unregister F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 _IO_2_1_stderr_ D 0xa0 -GLIBC_2.1 _IO_2_1_stdin_ D 0xa0 -GLIBC_2.1 _IO_2_1_stdout_ D 0xa0 -GLIBC_2.1 _IO_do_write F -GLIBC_2.1 _IO_fclose F -GLIBC_2.1 _IO_fdopen F -GLIBC_2.1 _IO_fgetpos64 F -GLIBC_2.1 _IO_file_attach F -GLIBC_2.1 _IO_file_close_it F -GLIBC_2.1 _IO_file_finish F -GLIBC_2.1 _IO_file_fopen F -GLIBC_2.1 _IO_file_init F -GLIBC_2.1 _IO_file_overflow F -GLIBC_2.1 _IO_file_seekoff F -GLIBC_2.1 _IO_file_setbuf F -GLIBC_2.1 _IO_file_sync F -GLIBC_2.1 _IO_file_underflow F -GLIBC_2.1 _IO_file_write F -GLIBC_2.1 _IO_file_xsputn F -GLIBC_2.1 _IO_fopen F -GLIBC_2.1 _IO_fsetpos64 F -GLIBC_2.1 _IO_getline_info F -GLIBC_2.1 _IO_popen F -GLIBC_2.1 _IO_proc_close F -GLIBC_2.1 _IO_proc_open F -GLIBC_2.1 __asprintf F -GLIBC_2.1 __backtrace F -GLIBC_2.1 __backtrace_symbols F -GLIBC_2.1 __backtrace_symbols_fd F -GLIBC_2.1 __duplocale F -GLIBC_2.1 __freelocale F -GLIBC_2.1 __fxstat64 F -GLIBC_2.1 __isalnum_l F -GLIBC_2.1 __isalpha_l F -GLIBC_2.1 __isascii_l F -GLIBC_2.1 __isblank_l F -GLIBC_2.1 __iscntrl_l F -GLIBC_2.1 __isdigit_l F -GLIBC_2.1 __isgraph_l F -GLIBC_2.1 __islower_l F -GLIBC_2.1 __isprint_l F -GLIBC_2.1 __ispunct_l F -GLIBC_2.1 __isspace_l F -GLIBC_2.1 __isupper_l F -GLIBC_2.1 __iswalnum_l F -GLIBC_2.1 __iswalpha_l F -GLIBC_2.1 __iswblank_l F -GLIBC_2.1 __iswcntrl_l F -GLIBC_2.1 __iswctype_l F -GLIBC_2.1 __iswdigit_l F -GLIBC_2.1 __iswgraph_l F -GLIBC_2.1 __iswlower_l F -GLIBC_2.1 __iswprint_l F -GLIBC_2.1 __iswpunct_l F -GLIBC_2.1 __iswspace_l F -GLIBC_2.1 __iswupper_l F -GLIBC_2.1 __iswxdigit_l F -GLIBC_2.1 __isxdigit_l F -GLIBC_2.1 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.1 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.1 __key_gendes_LOCAL D 0x4 -GLIBC_2.1 __libc_allocate_rtsig F -GLIBC_2.1 __libc_current_sigrtmax F -GLIBC_2.1 __libc_current_sigrtmin F -GLIBC_2.1 __libc_freeres F -GLIBC_2.1 __libc_sa_len F -GLIBC_2.1 __lxstat64 F -GLIBC_2.1 __newlocale F -GLIBC_2.1 __poll F -GLIBC_2.1 __pread64 F -GLIBC_2.1 __pwrite64 F -GLIBC_2.1 __rawmemchr F -GLIBC_2.1 __signbit F -GLIBC_2.1 __signbitf F -GLIBC_2.1 __strcasecmp_l F -GLIBC_2.1 __strcasestr F -GLIBC_2.1 __strcoll_l F -GLIBC_2.1 __strfmon_l F -GLIBC_2.1 __strncasecmp_l F -GLIBC_2.1 __strtod_l F -GLIBC_2.1 __strtof_l F -GLIBC_2.1 __strtol_l F -GLIBC_2.1 __strtold_l F -GLIBC_2.1 __strtoll_l F -GLIBC_2.1 __strtoul_l F -GLIBC_2.1 __strtoull_l F -GLIBC_2.1 __strxfrm_l F -GLIBC_2.1 __toascii_l F -GLIBC_2.1 __tolower_l F -GLIBC_2.1 __toupper_l F -GLIBC_2.1 __towctrans F -GLIBC_2.1 __towctrans_l F -GLIBC_2.1 __towlower_l F -GLIBC_2.1 __towupper_l F -GLIBC_2.1 __wcscasecmp_l F -GLIBC_2.1 __wcscoll_l F -GLIBC_2.1 __wcsncasecmp_l F -GLIBC_2.1 __wcstod_l F -GLIBC_2.1 __wcstof_l F -GLIBC_2.1 __wcstol_l F -GLIBC_2.1 __wcstold_l F -GLIBC_2.1 __wcstoll_l F -GLIBC_2.1 __wcstoul_l F -GLIBC_2.1 __wcstoull_l F -GLIBC_2.1 __wcsxfrm_l F -GLIBC_2.1 __wctype_l F -GLIBC_2.1 __xstat64 F -GLIBC_2.1 _authenticate F -GLIBC_2.1 _dl_mcount_wrapper F -GLIBC_2.1 _dl_mcount_wrapper_check F -GLIBC_2.1 _sys_errlist D 0x1f4 -GLIBC_2.1 _sys_nerr D 0x4 -GLIBC_2.1 _sys_siglist D 0x100 -GLIBC_2.1 addseverity F -GLIBC_2.1 alphasort64 F -GLIBC_2.1 argp_err_exit_status D 0x4 -GLIBC_2.1 argp_error F -GLIBC_2.1 argp_failure F -GLIBC_2.1 argp_help F -GLIBC_2.1 argp_parse F -GLIBC_2.1 argp_program_bug_address D 0x4 -GLIBC_2.1 argp_program_version D 0x4 -GLIBC_2.1 argp_program_version_hook D 0x4 -GLIBC_2.1 argp_state_help F -GLIBC_2.1 argp_usage F -GLIBC_2.1 authdes_create F -GLIBC_2.1 authdes_getucred F -GLIBC_2.1 authdes_pk_create F -GLIBC_2.1 backtrace F -GLIBC_2.1 backtrace_symbols F -GLIBC_2.1 backtrace_symbols_fd F -GLIBC_2.1 capget F -GLIBC_2.1 capset F -GLIBC_2.1 cbc_crypt F -GLIBC_2.1 chown F -GLIBC_2.1 clntunix_create F -GLIBC_2.1 creat64 F -GLIBC_2.1 des_setparity F -GLIBC_2.1 ecb_crypt F -GLIBC_2.1 endutxent F -GLIBC_2.1 fattach F -GLIBC_2.1 fclose F -GLIBC_2.1 fdetach F -GLIBC_2.1 fdopen F -GLIBC_2.1 ffsl F -GLIBC_2.1 ffsll F -GLIBC_2.1 fgetc_unlocked F -GLIBC_2.1 fgetpos64 F -GLIBC_2.1 fgets_unlocked F -GLIBC_2.1 fmtmsg F -GLIBC_2.1 fopen F -GLIBC_2.1 fopen64 F -GLIBC_2.1 fputs_unlocked F -GLIBC_2.1 fread_unlocked F -GLIBC_2.1 freopen64 F -GLIBC_2.1 fseeko F -GLIBC_2.1 fseeko64 F -GLIBC_2.1 fsetpos64 F -GLIBC_2.1 fstatfs64 F -GLIBC_2.1 fstatvfs F -GLIBC_2.1 fstatvfs64 F -GLIBC_2.1 ftello F -GLIBC_2.1 ftello64 F -GLIBC_2.1 ftruncate64 F -GLIBC_2.1 ftw64 F -GLIBC_2.1 fwrite_unlocked F -GLIBC_2.1 gai_strerror F -GLIBC_2.1 getcontext F -GLIBC_2.1 getdate F -GLIBC_2.1 getdate_err D 0x4 -GLIBC_2.1 getdate_r F -GLIBC_2.1 getmsg F -GLIBC_2.1 getnameinfo F -GLIBC_2.1 getnetname F -GLIBC_2.1 getpmsg F -GLIBC_2.1 getpt F -GLIBC_2.1 getrlimit64 F -GLIBC_2.1 getutxent F -GLIBC_2.1 getutxid F -GLIBC_2.1 getutxline F -GLIBC_2.1 glob64 F -GLIBC_2.1 globfree64 F -GLIBC_2.1 gnu_get_libc_release F -GLIBC_2.1 gnu_get_libc_version F -GLIBC_2.1 grantpt F -GLIBC_2.1 host2netname F -GLIBC_2.1 iconv F -GLIBC_2.1 iconv_close F -GLIBC_2.1 iconv_open F -GLIBC_2.1 if_freenameindex F -GLIBC_2.1 if_indextoname F -GLIBC_2.1 if_nameindex F -GLIBC_2.1 if_nametoindex F -GLIBC_2.1 in6addr_any D 0x10 -GLIBC_2.1 in6addr_loopback D 0x10 -GLIBC_2.1 isastream F -GLIBC_2.1 iswblank F -GLIBC_2.1 key_decryptsession F -GLIBC_2.1 key_decryptsession_pk F -GLIBC_2.1 key_encryptsession F -GLIBC_2.1 key_encryptsession_pk F -GLIBC_2.1 key_gendes F -GLIBC_2.1 key_get_conv F -GLIBC_2.1 key_secretkey_is_set F -GLIBC_2.1 key_setnet F -GLIBC_2.1 key_setsecret F -GLIBC_2.1 lockf64 F -GLIBC_2.1 lseek64 F -GLIBC_2.1 makecontext F -GLIBC_2.1 mempcpy F -GLIBC_2.1 mmap64 F -GLIBC_2.1 netname2host F -GLIBC_2.1 netname2user F -GLIBC_2.1 nftw F -GLIBC_2.1 nftw64 F -GLIBC_2.1 ntp_adjtime F -GLIBC_2.1 ntp_gettime F -GLIBC_2.1 open64 F -GLIBC_2.1 passwd2des F -GLIBC_2.1 pclose F -GLIBC_2.1 popen F -GLIBC_2.1 pread F -GLIBC_2.1 pread64 F -GLIBC_2.1 printf_size F -GLIBC_2.1 printf_size_info F -GLIBC_2.1 pthread_attr_init F -GLIBC_2.1 ptsname F -GLIBC_2.1 ptsname_r F -GLIBC_2.1 putgrent F -GLIBC_2.1 putmsg F -GLIBC_2.1 putpmsg F -GLIBC_2.1 pututxline F -GLIBC_2.1 pwrite F -GLIBC_2.1 pwrite64 F -GLIBC_2.1 rawmemchr F -GLIBC_2.1 readdir64 F -GLIBC_2.1 readdir64_r F -GLIBC_2.1 rtime F -GLIBC_2.1 scandir64 F -GLIBC_2.1 sendfile F -GLIBC_2.1 setrlimit64 F -GLIBC_2.1 setutxent F -GLIBC_2.1 sighold F -GLIBC_2.1 sigignore F -GLIBC_2.1 sigqueue F -GLIBC_2.1 sigrelse F -GLIBC_2.1 sigset F -GLIBC_2.1 sigtimedwait F -GLIBC_2.1 sigwaitinfo F -GLIBC_2.1 statfs64 F -GLIBC_2.1 statvfs F -GLIBC_2.1 statvfs64 F -GLIBC_2.1 strcasestr F -GLIBC_2.1 strtoimax F -GLIBC_2.1 strtoumax F -GLIBC_2.1 strverscmp F -GLIBC_2.1 svcunix_create F -GLIBC_2.1 svcunixfd_create F -GLIBC_2.1 swapcontext F -GLIBC_2.1 sys_errlist D 0x1f4 -GLIBC_2.1 sys_nerr D 0x4 -GLIBC_2.1 sys_sigabbrev D 0x100 -GLIBC_2.1 sys_siglist D 0x100 -GLIBC_2.1 sysv_signal F -GLIBC_2.1 tcgetsid F -GLIBC_2.1 tdestroy F -GLIBC_2.1 tmpfile F -GLIBC_2.1 tmpfile64 F -GLIBC_2.1 truncate64 F -GLIBC_2.1 umount2 F -GLIBC_2.1 unlockpt F -GLIBC_2.1 updwtmpx F -GLIBC_2.1 user2netname F -GLIBC_2.1 utmpxname F -GLIBC_2.1 versionsort F -GLIBC_2.1 versionsort64 F -GLIBC_2.1 waitid F -GLIBC_2.1 wcscasecmp F -GLIBC_2.1 wcsncasecmp F -GLIBC_2.1 wcsnlen F -GLIBC_2.1 wcstoimax F -GLIBC_2.1 wcstoll F -GLIBC_2.1 wcstoull F -GLIBC_2.1 wcstoumax F -GLIBC_2.1 wcswcs F -GLIBC_2.1 wordexp F -GLIBC_2.1 wordfree F -GLIBC_2.1 xdecrypt F -GLIBC_2.1 xdr_authdes_cred F -GLIBC_2.1 xdr_authdes_verf F -GLIBC_2.1 xdr_getcredres F -GLIBC_2.1 xdr_int16_t F -GLIBC_2.1 xdr_int32_t F -GLIBC_2.1 xdr_int8_t F -GLIBC_2.1 xdr_netnamestr F -GLIBC_2.1 xdr_sizeof F -GLIBC_2.1 xdr_uint16_t F -GLIBC_2.1 xdr_uint32_t F -GLIBC_2.1 xdr_uint8_t F -GLIBC_2.1 xdr_unixcred F -GLIBC_2.1.1 GLIBC_2.1.1 A -GLIBC_2.1.1 _Exit F -GLIBC_2.1.1 __mempcpy_small F -GLIBC_2.1.1 __stpcpy_small F -GLIBC_2.1.1 __strcpy_small F -GLIBC_2.1.1 __strcspn_c1 F -GLIBC_2.1.1 __strcspn_c2 F -GLIBC_2.1.1 __strcspn_c3 F -GLIBC_2.1.1 __strpbrk_c2 F -GLIBC_2.1.1 __strpbrk_c3 F -GLIBC_2.1.1 __strsep_1c F -GLIBC_2.1.1 __strsep_2c F -GLIBC_2.1.1 __strsep_3c F -GLIBC_2.1.1 __strsep_g F -GLIBC_2.1.1 __strspn_c1 F -GLIBC_2.1.1 __strspn_c2 F -GLIBC_2.1.1 __strspn_c3 F -GLIBC_2.1.1 __strtok_r_1c F -GLIBC_2.1.1 __strverscmp F -GLIBC_2.1.1 getutmp F -GLIBC_2.1.1 getutmpx F -GLIBC_2.1.1 imaxabs F -GLIBC_2.1.1 imaxdiv F -GLIBC_2.1.1 strchrnul F -GLIBC_2.1.1 xdr_hyper F -GLIBC_2.1.1 xdr_int64_t F -GLIBC_2.1.1 xdr_longlong_t F -GLIBC_2.1.1 xdr_u_hyper F -GLIBC_2.1.1 xdr_u_longlong_t F -GLIBC_2.1.1 xdr_uint64_t F -GLIBC_2.1.2 GLIBC_2.1.2 A -GLIBC_2.1.2 __vfork F -GLIBC_2.1.2 getaliasbyname_r F -GLIBC_2.1.2 getaliasent_r F -GLIBC_2.1.2 getgrent_r F -GLIBC_2.1.2 getgrgid_r F -GLIBC_2.1.2 getgrnam_r F -GLIBC_2.1.2 gethostbyaddr_r F -GLIBC_2.1.2 gethostbyname2_r F -GLIBC_2.1.2 gethostbyname_r F -GLIBC_2.1.2 gethostent_r F -GLIBC_2.1.2 getnetbyaddr_r F -GLIBC_2.1.2 getnetbyname_r F -GLIBC_2.1.2 getnetent_r F -GLIBC_2.1.2 getprotobyname_r F -GLIBC_2.1.2 getprotobynumber_r F -GLIBC_2.1.2 getprotoent_r F -GLIBC_2.1.2 getpwent_r F -GLIBC_2.1.2 getpwnam_r F -GLIBC_2.1.2 getpwuid_r F -GLIBC_2.1.2 getrpcbyname_r F -GLIBC_2.1.2 getrpcbynumber_r F -GLIBC_2.1.2 getrpcent_r F -GLIBC_2.1.2 getservbyname_r F -GLIBC_2.1.2 getservbyport_r F -GLIBC_2.1.2 getservent_r F -GLIBC_2.1.2 getspent_r F -GLIBC_2.1.2 getspnam_r F -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 __cxa_atexit F -GLIBC_2.1.3 __cxa_finalize F -GLIBC_2.1.3 __sigsuspend F -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 fallocate64 F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _sys_errlist D 0x21c -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x21c -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __mcount_internal F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 __ppc_get_timebase_freq F -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.19 GLIBC_2.19 A -GLIBC_2.19 __atomic_feclearexcept F -GLIBC_2.19 __atomic_feholdexcept F -GLIBC_2.19 __atomic_feupdateenv F -GLIBC_2.19 __flt_rounds F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0x54 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 __assert F -GLIBC_2.2 __ctype32_tolower D 0x4 -GLIBC_2.2 __ctype32_toupper D 0x4 -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpurge F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __open64 F -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_state F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __statfs F -GLIBC_2.2 __strndup F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _res_hconf D 0x30 -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 dcngettext F -GLIBC_2.2 dngettext F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwscanf F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getrlimit F -GLIBC_2.2 getrlimit64 F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 glob64 F -GLIBC_2.2 iruserok_af F -GLIBC_2.2 localeconv F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 memrchr F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 moncontrol F -GLIBC_2.2 msgctl F -GLIBC_2.2 ngettext F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 scandir64 F -GLIBC_2.2 semctl F -GLIBC_2.2 setrlimit F -GLIBC_2.2 shmctl F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x4 -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 ungetwc F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wprintf F -GLIBC_2.2 wscanf F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 _sys_errlist D 0x1f8 -GLIBC_2.3 _sys_nerr D 0x4 -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoll_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strtoull_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 sys_errlist D 0x1f8 -GLIBC_2.3 sys_nerr D 0x4 -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __adddf3 F -GLIBC_2.3.2 __addsf3 F -GLIBC_2.3.2 __divdf3 F -GLIBC_2.3.2 __divsf3 F -GLIBC_2.3.2 __eqdf2 F -GLIBC_2.3.2 __eqsf2 F -GLIBC_2.3.2 __extendsfdf2 F -GLIBC_2.3.2 __fixdfsi F -GLIBC_2.3.2 __fixsfsi F -GLIBC_2.3.2 __fixunsdfsi F -GLIBC_2.3.2 __fixunssfsi F -GLIBC_2.3.2 __floatsidf F -GLIBC_2.3.2 __floatsisf F -GLIBC_2.3.2 __gedf2 F -GLIBC_2.3.2 __gesf2 F -GLIBC_2.3.2 __ledf2 F -GLIBC_2.3.2 __lesf2 F -GLIBC_2.3.2 __muldf3 F -GLIBC_2.3.2 __mulsf3 F -GLIBC_2.3.2 __negdf2 F -GLIBC_2.3.2 __negsf2 F -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 __sim_disabled_exceptions D 0x4 -GLIBC_2.3.2 __sim_exceptions D 0x4 -GLIBC_2.3.2 __sim_round_mode D 0x4 -GLIBC_2.3.2 __sqrtdf2 F -GLIBC_2.3.2 __sqrtsf2 F -GLIBC_2.3.2 __subdf3 F -GLIBC_2.3.2 __subsf3 F -GLIBC_2.3.2 __truncdfsf2 F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x104 -GLIBC_2.3.3 getcontext F -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 makecontext F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 posix_fadvise64 F -GLIBC_2.3.3 posix_fallocate64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 setcontext F -GLIBC_2.3.3 swapcontext F -GLIBC_2.3.3 sys_sigabbrev D 0x104 -GLIBC_2.3.3 sys_siglist D 0x104 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __sigsetjmp F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 _longjmp F -GLIBC_2.3.4 _setjmp F -GLIBC_2.3.4 getcontext F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 longjmp F -GLIBC_2.3.4 makecontext F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setcontext F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setjmp F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 siglongjmp F -GLIBC_2.3.4 swapcontext F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 _IO_fprintf F -GLIBC_2.4 _IO_printf F -GLIBC_2.4 _IO_sprintf F -GLIBC_2.4 _IO_sscanf F -GLIBC_2.4 _IO_vfprintf F -GLIBC_2.4 _IO_vfscanf F -GLIBC_2.4 _IO_vsprintf F -GLIBC_2.4 __asprintf F -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __finitel F -GLIBC_2.4 __floatundidf F -GLIBC_2.4 __floatundisf F -GLIBC_2.4 __floatunsidf F -GLIBC_2.4 __floatunsisf F -GLIBC_2.4 __fprintf_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __gtdf2 F -GLIBC_2.4 __gtsf2 F -GLIBC_2.4 __isinfl F -GLIBC_2.4 __isnanl F -GLIBC_2.4 __ltdf2 F -GLIBC_2.4 __ltsf2 F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __nedf2 F -GLIBC_2.4 __nesf2 F -GLIBC_2.4 __nldbl__IO_fprintf F -GLIBC_2.4 __nldbl__IO_printf F -GLIBC_2.4 __nldbl__IO_sprintf F -GLIBC_2.4 __nldbl__IO_sscanf F -GLIBC_2.4 __nldbl__IO_vfprintf F -GLIBC_2.4 __nldbl__IO_vfscanf F -GLIBC_2.4 __nldbl__IO_vsprintf F -GLIBC_2.4 __nldbl___asprintf F -GLIBC_2.4 __nldbl___fprintf_chk F -GLIBC_2.4 __nldbl___fwprintf_chk F -GLIBC_2.4 __nldbl___printf_chk F -GLIBC_2.4 __nldbl___printf_fp F -GLIBC_2.4 __nldbl___snprintf_chk F -GLIBC_2.4 __nldbl___sprintf_chk F -GLIBC_2.4 __nldbl___strfmon_l F -GLIBC_2.4 __nldbl___swprintf_chk F -GLIBC_2.4 __nldbl___syslog_chk F -GLIBC_2.4 __nldbl___vfprintf_chk F -GLIBC_2.4 __nldbl___vfscanf F -GLIBC_2.4 __nldbl___vfwprintf_chk F -GLIBC_2.4 __nldbl___vprintf_chk F -GLIBC_2.4 __nldbl___vsnprintf F -GLIBC_2.4 __nldbl___vsnprintf_chk F -GLIBC_2.4 __nldbl___vsprintf_chk F -GLIBC_2.4 __nldbl___vsscanf F -GLIBC_2.4 __nldbl___vstrfmon F -GLIBC_2.4 __nldbl___vstrfmon_l F -GLIBC_2.4 __nldbl___vswprintf_chk F -GLIBC_2.4 __nldbl___vsyslog_chk F -GLIBC_2.4 __nldbl___vwprintf_chk F -GLIBC_2.4 __nldbl___wprintf_chk F -GLIBC_2.4 __nldbl_asprintf F -GLIBC_2.4 __nldbl_dprintf F -GLIBC_2.4 __nldbl_fprintf F -GLIBC_2.4 __nldbl_fscanf F -GLIBC_2.4 __nldbl_fwprintf F -GLIBC_2.4 __nldbl_fwscanf F -GLIBC_2.4 __nldbl_obstack_printf F -GLIBC_2.4 __nldbl_obstack_vprintf F -GLIBC_2.4 __nldbl_printf F -GLIBC_2.4 __nldbl_printf_size F -GLIBC_2.4 __nldbl_scanf F -GLIBC_2.4 __nldbl_snprintf F -GLIBC_2.4 __nldbl_sprintf F -GLIBC_2.4 __nldbl_sscanf F -GLIBC_2.4 __nldbl_strfmon F -GLIBC_2.4 __nldbl_strfmon_l F -GLIBC_2.4 __nldbl_swprintf F -GLIBC_2.4 __nldbl_swscanf F -GLIBC_2.4 __nldbl_syslog F -GLIBC_2.4 __nldbl_vasprintf F -GLIBC_2.4 __nldbl_vdprintf F -GLIBC_2.4 __nldbl_vfprintf F -GLIBC_2.4 __nldbl_vfscanf F -GLIBC_2.4 __nldbl_vfwprintf F -GLIBC_2.4 __nldbl_vfwscanf F -GLIBC_2.4 __nldbl_vprintf F -GLIBC_2.4 __nldbl_vscanf F -GLIBC_2.4 __nldbl_vsnprintf F -GLIBC_2.4 __nldbl_vsprintf F -GLIBC_2.4 __nldbl_vsscanf F -GLIBC_2.4 __nldbl_vswprintf F -GLIBC_2.4 __nldbl_vswscanf F -GLIBC_2.4 __nldbl_vsyslog F -GLIBC_2.4 __nldbl_vwprintf F -GLIBC_2.4 __nldbl_vwscanf F -GLIBC_2.4 __nldbl_wprintf F -GLIBC_2.4 __nldbl_wscanf F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __printf_chk F -GLIBC_2.4 __printf_fp F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __signbitl F -GLIBC_2.4 __snprintf_chk F -GLIBC_2.4 __sprintf_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __strfmon_l F -GLIBC_2.4 __strtold_internal F -GLIBC_2.4 __strtold_l F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __unorddf2 F -GLIBC_2.4 __unordsf2 F -GLIBC_2.4 __vfprintf_chk F -GLIBC_2.4 __vfscanf F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vprintf_chk F -GLIBC_2.4 __vsnprintf F -GLIBC_2.4 __vsnprintf_chk F -GLIBC_2.4 __vsprintf_chk F -GLIBC_2.4 __vsscanf F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstold_internal F -GLIBC_2.4 __wcstold_l F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 _sys_errlist D 0x210 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 asprintf F -GLIBC_2.4 copysignl F -GLIBC_2.4 dprintf F -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 finitel F -GLIBC_2.4 fprintf F -GLIBC_2.4 frexpl F -GLIBC_2.4 fscanf F -GLIBC_2.4 futimesat F -GLIBC_2.4 fwprintf F -GLIBC_2.4 fwscanf F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 isinfl F -GLIBC_2.4 isnanl F -GLIBC_2.4 ldexpl F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 modfl F -GLIBC_2.4 obstack_printf F -GLIBC_2.4 obstack_vprintf F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 printf F -GLIBC_2.4 printf_size F -GLIBC_2.4 qecvt F -GLIBC_2.4 qecvt_r F -GLIBC_2.4 qfcvt F -GLIBC_2.4 qfcvt_r F -GLIBC_2.4 qgcvt F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 scalbnl F -GLIBC_2.4 scanf F -GLIBC_2.4 snprintf F -GLIBC_2.4 sprintf F -GLIBC_2.4 sscanf F -GLIBC_2.4 strfmon F -GLIBC_2.4 strfmon_l F -GLIBC_2.4 strtold F -GLIBC_2.4 strtold_l F -GLIBC_2.4 swprintf F -GLIBC_2.4 swscanf F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sys_errlist D 0x210 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 syslog F -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.4 vasprintf F -GLIBC_2.4 vdprintf F -GLIBC_2.4 vfprintf F -GLIBC_2.4 vfscanf F -GLIBC_2.4 vfwprintf F -GLIBC_2.4 vfwscanf F -GLIBC_2.4 vprintf F -GLIBC_2.4 vscanf F -GLIBC_2.4 vsnprintf F -GLIBC_2.4 vsprintf F -GLIBC_2.4 vsscanf F -GLIBC_2.4 vswprintf F -GLIBC_2.4 vswscanf F -GLIBC_2.4 vsyslog F -GLIBC_2.4 vwprintf F -GLIBC_2.4 vwscanf F -GLIBC_2.4 wcstold F -GLIBC_2.4 wcstold_l F -GLIBC_2.4 wprintf F -GLIBC_2.4 wscanf F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __nldbl___isoc99_fscanf F -GLIBC_2.7 __nldbl___isoc99_fwscanf F -GLIBC_2.7 __nldbl___isoc99_scanf F -GLIBC_2.7 __nldbl___isoc99_sscanf F -GLIBC_2.7 __nldbl___isoc99_swscanf F -GLIBC_2.7 __nldbl___isoc99_vfscanf F -GLIBC_2.7 __nldbl___isoc99_vfwscanf F -GLIBC_2.7 __nldbl___isoc99_vscanf F -GLIBC_2.7 __nldbl___isoc99_vsscanf F -GLIBC_2.7 __nldbl___isoc99_vswscanf F -GLIBC_2.7 __nldbl___isoc99_vwscanf F -GLIBC_2.7 __nldbl___isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __nldbl___asprintf_chk F -GLIBC_2.8 __nldbl___dprintf_chk F -GLIBC_2.8 __nldbl___obstack_printf_chk F -GLIBC_2.8 __nldbl___obstack_vprintf_chk F -GLIBC_2.8 __nldbl___vasprintf_chk F -GLIBC_2.8 __nldbl___vdprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist deleted file mode 100644 index ff6dc7a361..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist +++ /dev/null @@ -1,577 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _LIB_VERSION D 0x4 -GLIBC_2.0 acos F -GLIBC_2.0 acosf F -GLIBC_2.0 acosh F -GLIBC_2.0 acoshf F -GLIBC_2.0 acoshl F -GLIBC_2.0 acosl F -GLIBC_2.0 asin F -GLIBC_2.0 asinf F -GLIBC_2.0 asinh F -GLIBC_2.0 asinhf F -GLIBC_2.0 asinhl F -GLIBC_2.0 asinl F -GLIBC_2.0 atan F -GLIBC_2.0 atan2 F -GLIBC_2.0 atan2f F -GLIBC_2.0 atan2l F -GLIBC_2.0 atanf F -GLIBC_2.0 atanh F -GLIBC_2.0 atanhf F -GLIBC_2.0 atanhl F -GLIBC_2.0 atanl F -GLIBC_2.0 cbrt F -GLIBC_2.0 cbrtf F -GLIBC_2.0 cbrtl F -GLIBC_2.0 ceil F -GLIBC_2.0 ceilf F -GLIBC_2.0 ceill F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 cos F -GLIBC_2.0 cosf F -GLIBC_2.0 cosh F -GLIBC_2.0 coshf F -GLIBC_2.0 coshl F -GLIBC_2.0 cosl F -GLIBC_2.0 drem F -GLIBC_2.0 dremf F -GLIBC_2.0 dreml F -GLIBC_2.0 erf F -GLIBC_2.0 erfc F -GLIBC_2.0 erfcf F -GLIBC_2.0 erfcl F -GLIBC_2.0 erff F -GLIBC_2.0 erfl F -GLIBC_2.0 exp F -GLIBC_2.0 expf F -GLIBC_2.0 expl F -GLIBC_2.0 expm1 F -GLIBC_2.0 expm1f F -GLIBC_2.0 expm1l F -GLIBC_2.0 fabs F -GLIBC_2.0 fabsf F -GLIBC_2.0 fabsl F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 floor F -GLIBC_2.0 floorf F -GLIBC_2.0 floorl F -GLIBC_2.0 fmod F -GLIBC_2.0 fmodf F -GLIBC_2.0 fmodl F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 gamma F -GLIBC_2.0 gammaf F -GLIBC_2.0 gammal F -GLIBC_2.0 hypot F -GLIBC_2.0 hypotf F -GLIBC_2.0 hypotl F -GLIBC_2.0 ilogb F -GLIBC_2.0 ilogbf F -GLIBC_2.0 ilogbl F -GLIBC_2.0 j0 F -GLIBC_2.0 j0f F -GLIBC_2.0 j0l F -GLIBC_2.0 j1 F -GLIBC_2.0 j1f F -GLIBC_2.0 j1l F -GLIBC_2.0 jn F -GLIBC_2.0 jnf F -GLIBC_2.0 jnl F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 lgamma F -GLIBC_2.0 lgamma_r F -GLIBC_2.0 lgammaf F -GLIBC_2.0 lgammaf_r F -GLIBC_2.0 lgammal F -GLIBC_2.0 lgammal_r F -GLIBC_2.0 log F -GLIBC_2.0 log10 F -GLIBC_2.0 log10f F -GLIBC_2.0 log10l F -GLIBC_2.0 log1p F -GLIBC_2.0 log1pf F -GLIBC_2.0 log1pl F -GLIBC_2.0 logb F -GLIBC_2.0 logbf F -GLIBC_2.0 logbl F -GLIBC_2.0 logf F -GLIBC_2.0 logl F -GLIBC_2.0 matherr F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 nextafter F -GLIBC_2.0 nextafterf F -GLIBC_2.0 nextafterl F -GLIBC_2.0 pow F -GLIBC_2.0 powf F -GLIBC_2.0 powl F -GLIBC_2.0 remainder F -GLIBC_2.0 remainderf F -GLIBC_2.0 remainderl F -GLIBC_2.0 rint F -GLIBC_2.0 rintf F -GLIBC_2.0 rintl F -GLIBC_2.0 scalb F -GLIBC_2.0 scalbf F -GLIBC_2.0 scalbl F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 signgam D 0x4 -GLIBC_2.0 significand F -GLIBC_2.0 significandf F -GLIBC_2.0 significandl F -GLIBC_2.0 sin F -GLIBC_2.0 sinf F -GLIBC_2.0 sinh F -GLIBC_2.0 sinhf F -GLIBC_2.0 sinhl F -GLIBC_2.0 sinl F -GLIBC_2.0 sqrt F -GLIBC_2.0 sqrtf F -GLIBC_2.0 sqrtl F -GLIBC_2.0 tan F -GLIBC_2.0 tanf F -GLIBC_2.0 tanh F -GLIBC_2.0 tanhf F -GLIBC_2.0 tanhl F -GLIBC_2.0 tanl F -GLIBC_2.0 y0 F -GLIBC_2.0 y0f F -GLIBC_2.0 y0l F -GLIBC_2.0 y1 F -GLIBC_2.0 y1f F -GLIBC_2.0 y1l F -GLIBC_2.0 yn F -GLIBC_2.0 ynf F -GLIBC_2.0 ynl F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __clog10 F -GLIBC_2.1 __clog10f F -GLIBC_2.1 __clog10l F -GLIBC_2.1 __fe_dfl_env D 0x8 -GLIBC_2.1 __fe_enabled_env D 0x8 -GLIBC_2.1 __fe_nonieee_env D 0x8 -GLIBC_2.1 __finite F -GLIBC_2.1 __finitef F -GLIBC_2.1 __finitel F -GLIBC_2.1 __fpclassify F -GLIBC_2.1 __fpclassifyf F -GLIBC_2.1 __signbit F -GLIBC_2.1 __signbitf F -GLIBC_2.1 cabs F -GLIBC_2.1 cabsf F -GLIBC_2.1 cabsl F -GLIBC_2.1 cacos F -GLIBC_2.1 cacosf F -GLIBC_2.1 cacosh F -GLIBC_2.1 cacoshf F -GLIBC_2.1 cacoshl F -GLIBC_2.1 cacosl F -GLIBC_2.1 carg F -GLIBC_2.1 cargf F -GLIBC_2.1 cargl F -GLIBC_2.1 casin F -GLIBC_2.1 casinf F -GLIBC_2.1 casinh F -GLIBC_2.1 casinhf F -GLIBC_2.1 casinhl F -GLIBC_2.1 casinl F -GLIBC_2.1 catan F -GLIBC_2.1 catanf F -GLIBC_2.1 catanh F -GLIBC_2.1 catanhf F -GLIBC_2.1 catanhl F -GLIBC_2.1 catanl F -GLIBC_2.1 ccos F -GLIBC_2.1 ccosf F -GLIBC_2.1 ccosh F -GLIBC_2.1 ccoshf F -GLIBC_2.1 ccoshl F -GLIBC_2.1 ccosl F -GLIBC_2.1 cexp F -GLIBC_2.1 cexpf F -GLIBC_2.1 cexpl F -GLIBC_2.1 cimag F -GLIBC_2.1 cimagf F -GLIBC_2.1 cimagl F -GLIBC_2.1 clog F -GLIBC_2.1 clog10 F -GLIBC_2.1 clog10f F -GLIBC_2.1 clog10l F -GLIBC_2.1 clogf F -GLIBC_2.1 clogl F -GLIBC_2.1 conj F -GLIBC_2.1 conjf F -GLIBC_2.1 conjl F -GLIBC_2.1 cpow F -GLIBC_2.1 cpowf F -GLIBC_2.1 cpowl F -GLIBC_2.1 cproj F -GLIBC_2.1 cprojf F -GLIBC_2.1 cprojl F -GLIBC_2.1 creal F -GLIBC_2.1 crealf F -GLIBC_2.1 creall F -GLIBC_2.1 csin F -GLIBC_2.1 csinf F -GLIBC_2.1 csinh F -GLIBC_2.1 csinhf F -GLIBC_2.1 csinhl F -GLIBC_2.1 csinl F -GLIBC_2.1 csqrt F -GLIBC_2.1 csqrtf F -GLIBC_2.1 csqrtl F -GLIBC_2.1 ctan F -GLIBC_2.1 ctanf F -GLIBC_2.1 ctanh F -GLIBC_2.1 ctanhf F -GLIBC_2.1 ctanhl F -GLIBC_2.1 ctanl F -GLIBC_2.1 exp10 F -GLIBC_2.1 exp10f F -GLIBC_2.1 exp10l F -GLIBC_2.1 exp2 F -GLIBC_2.1 exp2f F -GLIBC_2.1 fdim F -GLIBC_2.1 fdimf F -GLIBC_2.1 fdiml F -GLIBC_2.1 feclearexcept F -GLIBC_2.1 fegetenv F -GLIBC_2.1 fegetexceptflag F -GLIBC_2.1 fegetround F -GLIBC_2.1 feholdexcept F -GLIBC_2.1 feraiseexcept F -GLIBC_2.1 fesetenv F -GLIBC_2.1 fesetexceptflag F -GLIBC_2.1 fesetround F -GLIBC_2.1 fetestexcept F -GLIBC_2.1 feupdateenv F -GLIBC_2.1 fma F -GLIBC_2.1 fmaf F -GLIBC_2.1 fmal F -GLIBC_2.1 fmax F -GLIBC_2.1 fmaxf F -GLIBC_2.1 fmaxl F -GLIBC_2.1 fmin F -GLIBC_2.1 fminf F -GLIBC_2.1 fminl F -GLIBC_2.1 llrint F -GLIBC_2.1 llrintf F -GLIBC_2.1 llrintl F -GLIBC_2.1 llround F -GLIBC_2.1 llroundf F -GLIBC_2.1 llroundl F -GLIBC_2.1 log2 F -GLIBC_2.1 log2f F -GLIBC_2.1 log2l F -GLIBC_2.1 lrint F -GLIBC_2.1 lrintf F -GLIBC_2.1 lrintl F -GLIBC_2.1 lround F -GLIBC_2.1 lroundf F -GLIBC_2.1 lroundl F -GLIBC_2.1 nan F -GLIBC_2.1 nanf F -GLIBC_2.1 nanl F -GLIBC_2.1 nearbyint F -GLIBC_2.1 nearbyintf F -GLIBC_2.1 nearbyintl F -GLIBC_2.1 nexttoward F -GLIBC_2.1 nexttowardf F -GLIBC_2.1 nexttowardl F -GLIBC_2.1 pow10 F -GLIBC_2.1 pow10f F -GLIBC_2.1 pow10l F -GLIBC_2.1 remquo F -GLIBC_2.1 remquof F -GLIBC_2.1 remquol F -GLIBC_2.1 round F -GLIBC_2.1 roundf F -GLIBC_2.1 roundl F -GLIBC_2.1 scalbln F -GLIBC_2.1 scalblnf F -GLIBC_2.1 scalblnl F -GLIBC_2.1 sincos F -GLIBC_2.1 sincosf F -GLIBC_2.1 sincosl F -GLIBC_2.1 tgamma F -GLIBC_2.1 tgammaf F -GLIBC_2.1 tgammal F -GLIBC_2.1 trunc F -GLIBC_2.1 truncf F -GLIBC_2.1 truncl F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __acoshl_finite F -GLIBC_2.15 __acosl_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __asinl_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atan2l_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __atanhl_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __coshl_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp10l_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp2l_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __expl_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __fmodl_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __gammal_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __hypotl_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j0l_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __j1l_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __jnl_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __lgammal_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log10l_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log2l_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __logl_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __powl_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __remainderl_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __scalbl_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sinhl_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __sqrtl_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y0l_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __y1l_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.15 __ynl_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 feclearexcept F -GLIBC_2.2 fedisableexcept F -GLIBC_2.2 feenableexcept F -GLIBC_2.2 fegetenv F -GLIBC_2.2 fegetexcept F -GLIBC_2.2 fegetexceptflag F -GLIBC_2.2 feraiseexcept F -GLIBC_2.2 fesetenv F -GLIBC_2.2 fesetexceptflag F -GLIBC_2.2 feupdateenv F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __fe_dfl_mode D 0x8 -GLIBC_2.25 __iscanonicall F -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __clog10l F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fpclassifyl F -GLIBC_2.4 __nldbl_nexttowardf F -GLIBC_2.4 __signbitl F -GLIBC_2.4 acoshl F -GLIBC_2.4 acosl F -GLIBC_2.4 asinhl F -GLIBC_2.4 asinl F -GLIBC_2.4 atan2l F -GLIBC_2.4 atanhl F -GLIBC_2.4 atanl F -GLIBC_2.4 cabsl F -GLIBC_2.4 cacoshl F -GLIBC_2.4 cacosl F -GLIBC_2.4 cargl F -GLIBC_2.4 casinhl F -GLIBC_2.4 casinl F -GLIBC_2.4 catanhl F -GLIBC_2.4 catanl F -GLIBC_2.4 cbrtl F -GLIBC_2.4 ccoshl F -GLIBC_2.4 ccosl F -GLIBC_2.4 ceill F -GLIBC_2.4 cexpl F -GLIBC_2.4 cimagl F -GLIBC_2.4 clog10l F -GLIBC_2.4 clogl F -GLIBC_2.4 conjl F -GLIBC_2.4 copysignl F -GLIBC_2.4 coshl F -GLIBC_2.4 cosl F -GLIBC_2.4 cpowl F -GLIBC_2.4 cprojl F -GLIBC_2.4 creall F -GLIBC_2.4 csinhl F -GLIBC_2.4 csinl F -GLIBC_2.4 csqrtl F -GLIBC_2.4 ctanhl F -GLIBC_2.4 ctanl F -GLIBC_2.4 dreml F -GLIBC_2.4 erfcl F -GLIBC_2.4 erfl F -GLIBC_2.4 exp10l F -GLIBC_2.4 exp2l F -GLIBC_2.4 expl F -GLIBC_2.4 expm1l F -GLIBC_2.4 fabsl F -GLIBC_2.4 fdiml F -GLIBC_2.4 finitel F -GLIBC_2.4 floorl F -GLIBC_2.4 fmal F -GLIBC_2.4 fmaxl F -GLIBC_2.4 fminl F -GLIBC_2.4 fmodl F -GLIBC_2.4 frexpl F -GLIBC_2.4 gammal F -GLIBC_2.4 hypotl F -GLIBC_2.4 ilogbl F -GLIBC_2.4 j0l F -GLIBC_2.4 j1l F -GLIBC_2.4 jnl F -GLIBC_2.4 ldexpl F -GLIBC_2.4 lgammal F -GLIBC_2.4 lgammal_r F -GLIBC_2.4 llrintl F -GLIBC_2.4 llroundl F -GLIBC_2.4 log10l F -GLIBC_2.4 log1pl F -GLIBC_2.4 log2l F -GLIBC_2.4 logbl F -GLIBC_2.4 logl F -GLIBC_2.4 lrintl F -GLIBC_2.4 lroundl F -GLIBC_2.4 modfl F -GLIBC_2.4 nanl F -GLIBC_2.4 nearbyintl F -GLIBC_2.4 nextafterl F -GLIBC_2.4 nexttoward F -GLIBC_2.4 nexttowardf F -GLIBC_2.4 nexttowardl F -GLIBC_2.4 pow10l F -GLIBC_2.4 powl F -GLIBC_2.4 remainderl F -GLIBC_2.4 remquol F -GLIBC_2.4 rintl F -GLIBC_2.4 roundl F -GLIBC_2.4 scalbl F -GLIBC_2.4 scalblnl F -GLIBC_2.4 scalbnl F -GLIBC_2.4 significandl F -GLIBC_2.4 sincosl F -GLIBC_2.4 sinhl F -GLIBC_2.4 sinl F -GLIBC_2.4 sqrtl F -GLIBC_2.4 tanhl F -GLIBC_2.4 tanl F -GLIBC_2.4 tgammal F -GLIBC_2.4 truncl F -GLIBC_2.4 y0l F -GLIBC_2.4 y1l F -GLIBC_2.4 ynl F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data deleted file mode 100644 index 1c20d2f2b4..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/localplt.data +++ /dev/null @@ -1,46 +0,0 @@ -libc.so: _Unwind_Find_FDE -libc.so: __adddf3 ? -libc.so: __addsf3 ? -libc.so: __divdf3 ? -libc.so: __divsf3 ? -libc.so: __eqdf2 ? -libc.so: __eqsf2 ? -libc.so: __extendsfdf2 ? -libc.so: __fixdfsi ? -libc.so: __fixsfsi ? -libc.so: __fixunsdfsi ? -libc.so: __floatsidf ? -libc.so: __floatsisf ? -libc.so: __floatunsidf ? -libc.so: __floatunsisf ? -libc.so: __gedf2 ? -libc.so: __gtdf2 ? -libc.so: __gtsf2 ? -libc.so: __ledf2 ? -libc.so: __ltdf2 ? -libc.so: __muldf3 ? -libc.so: __mulsf3 ? -libc.so: __nedf2 ? -libc.so: __subdf3 ? -libc.so: __subsf3 ? -libc.so: __truncdfsf2 ? -libc.so: __unorddf2 ? -libc.so: __unordsf2 ? -libc.so: abort ? -libc.so: calloc -libc.so: free -libc.so: malloc -libc.so: memalign -libc.so: realloc -libm.so: copysignl ? -libm.so: fabsl -libm.so: matherr -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/setcontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/setcontext.S deleted file mode 100644 index c5809a4741..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/setcontext.S +++ /dev/null @@ -1,60 +0,0 @@ -/* Jump to a new context. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -#define __ASSEMBLY__ -#include -#include "ucontext_i.h" - -#include - -#define __CONTEXT_FUNC_NAME __setcontext -#undef __CONTEXT_ENABLE_FPRS -#undef __CONTEXT_ENABLE_VRS - -#include "setcontext-common.S" - -versioned_symbol (libc, __setcontext, setcontext, GLIBC_2_3_4) - -#if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_3_4) - -/* For the nofpu case the old/new versions are the same function. */ -strong_alias (__setcontext, __novec_setcontext) - -compat_symbol (libc, __novec_setcontext, setcontext, GLIBC_2_3_3) - -#endif - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_3) - -#define _ERRNO_H 1 -#include - - compat_text_section -ENTRY (__setcontext_stub) - li r3,ENOSYS - b __syscall_error@local -END (__setcontext_stub) - .previous - -compat_symbol (libc, __setcontext_stub, setcontext, GLIBC_2_0) - -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/swapcontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/swapcontext.S deleted file mode 100644 index 41b3698130..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/swapcontext.S +++ /dev/null @@ -1,60 +0,0 @@ -/* Save current context and jump to a new context. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -#define __ASSEMBLY__ -#include -#include "ucontext_i.h" - -#include - -#define __CONTEXT_FUNC_NAME __swapcontext -#undef __CONTEXT_ENABLE_FPRS -#undef __CONTEXT_ENABLE_VRS - -# include "swapcontext-common.S" - -versioned_symbol (libc, __swapcontext, swapcontext, GLIBC_2_3_4) - -#if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_3_4) - -/* For the nofpu case the old/new versions are the same function. */ -strong_alias (__swapcontext, __novec_swapcontext) - -compat_symbol (libc, __novec_swapcontext, swapcontext, GLIBC_2_3_3) - -#endif - -#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3_3) - -#define _ERRNO_H 1 -#include - - compat_text_section -ENTRY (__swapcontext_stub) - li r3,ENOSYS - b __syscall_error@local -END (__swapcontext_stub) - .previous - -compat_symbol (libc, __swapcontext_stub, swapcontext, GLIBC_2_1) - -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/scandir64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/scandir64.c deleted file mode 100644 index 506fd8877c..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/scandir64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S deleted file mode 100644 index 3c5e262f1b..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S +++ /dev/null @@ -1,306 +0,0 @@ -/* Jump to a new context powerpc32 common. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This is the common implementation of setcontext for powerpc32. - It not complete in itself should be included in to a framework that - defines: - __CONTEXT_FUNC_NAME - and if appropriate: - __CONTEXT_ENABLE_FPRS - __CONTEXT_ENABLE_VRS - Any architecture that implements the Vector unit is assumed to also - implement the floating unit. */ - -/* Stack frame offsets. */ -#define _FRAME_BACKCHAIN 0 -#define _FRAME_LR_SAVE 4 -#define _FRAME_PARM_SAVE1 8 -#define _FRAME_PARM_SAVE2 12 -#define _FRAME_PARM_SAVE3 16 -#define _FRAME_PARM_SAVE4 20 - -#ifdef __CONTEXT_ENABLE_VRS - .machine "altivec" -#endif -ENTRY(__CONTEXT_FUNC_NAME) - mflr r0 - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - stw r0,20(r1) - cfi_offset (lr, _FRAME_LR_SAVE) - stw r31,12(r1) - cfi_offset(r31,-4) - lwz r31,_UC_REGS_PTR(r3) - - /* - * If this ucontext refers to the point where we were interrupted - * by a signal, we have to use the rt_sigreturn system call to - * return to the context so we get both LR and CTR restored. - * - * Otherwise, the context we are restoring is either just after - * a procedure call (getcontext/swapcontext) or at the beginning - * of a procedure call (makecontext), so we don't need to restore - * r0, xer, ctr. We don't restore r2 since it will be used as - * the TLS pointer. - */ - lwz r0,_UC_GREGS+(PT_MSR*4)(r31) - cmpwi r0,0 - bne 4f /* L(do_sigret) */ - - /* Restore the signal mask */ - li r5,0 - addi r4,r3,_UC_SIGMASK - li r3,SIG_SETMASK - bl __sigprocmask@local - cmpwi r3,0 - bne 3f /* L(error_exit) */ - -#ifdef PIC - mflr r8 -# define got_label GENERATE_GOT_LABEL (__CONTEXT_FUNC_NAME) - SETUP_GOT_ACCESS(r7,got_label) - addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha - addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l -# ifdef SHARED - lwz r7,_rtld_global_ro@got(r7) - mtlr r8 - lwz r7,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+LOWORD(r7) -# else - lwz r7,_dl_hwcap@got(r7) - mtlr r8 - lwz r7,LOWORD(r7) -# endif -#else - lis r7,(_dl_hwcap+LOWORD)@ha - lwz r7,(_dl_hwcap+LOWORD)@l(r7) -#endif - -#ifdef __CONTEXT_ENABLE_FPRS -# ifdef __CONTEXT_ENABLE_VRS - andis. r6,r7,(PPC_FEATURE_HAS_ALTIVEC >> 16) - la r10,(_UC_VREGS)(r31) - beq 2f /* L(has_no_vec) */ - - lwz r0,(32*16)(r10) - li r9,(32*16) - cmpwi r0,0 - mtspr VRSAVE,r0 - beq 2f /* L(has_no_vec) */ - - lvx v19,r9,r10 - la r9,(16)(r10) - - lvx v0,0,r10 - lvx v1,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - mtvscr v19 - lvx v2,0,r10 - lvx v3,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v4,0,r10 - lvx v5,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v6,0,r10 - lvx v7,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v8,0,r10 - lvx v9,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v10,0,r10 - lvx v11,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v12,0,r10 - lvx v13,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v14,0,r10 - lvx v15,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v16,0,r10 - lvx v17,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v18,0,r10 - lvx v19,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v20,0,r10 - lvx v21,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v22,0,r10 - lvx v23,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v24,0,r10 - lvx v25,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v26,0,r10 - lvx v27,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v28,0,r10 - lvx v29,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v30,0,r10 - lvx v31,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v10,0,r10 - lvx v11,0,r9 - -2: /* L(has_no_vec): */ -# endif /* __CONTEXT_ENABLE_VRS */ - /* Restore the floating-point registers */ - lfd fp31,_UC_FREGS+(32*8)(r31) - lfd fp0,_UC_FREGS+(0*8)(r31) -# ifdef _ARCH_PWR6 - /* Use the extended four-operand version of the mtfsf insn. */ - mtfsf 0xff,fp31,1,0 -# else - .machine push - .machine "power6" - /* Availability of DFP indicates a 64-bit FPSCR. */ - andi. r6,r7,PPC_FEATURE_HAS_DFP - beq 7f - /* Use the extended four-operand version of the mtfsf insn. */ - mtfsf 0xff,fp31,1,0 - b 8f - /* Continue to operate on the FPSCR as if it were 32-bits. */ -7: mtfsf 0xff,fp31 -8: .machine pop -# endif /* _ARCH_PWR6 */ - lfd fp1,_UC_FREGS+(1*8)(r31) - lfd fp2,_UC_FREGS+(2*8)(r31) - lfd fp3,_UC_FREGS+(3*8)(r31) - lfd fp4,_UC_FREGS+(4*8)(r31) - lfd fp5,_UC_FREGS+(5*8)(r31) - lfd fp6,_UC_FREGS+(6*8)(r31) - lfd fp7,_UC_FREGS+(7*8)(r31) - lfd fp8,_UC_FREGS+(8*8)(r31) - lfd fp9,_UC_FREGS+(9*8)(r31) - lfd fp10,_UC_FREGS+(10*8)(r31) - lfd fp11,_UC_FREGS+(11*8)(r31) - lfd fp12,_UC_FREGS+(12*8)(r31) - lfd fp13,_UC_FREGS+(13*8)(r31) - lfd fp14,_UC_FREGS+(14*8)(r31) - lfd fp15,_UC_FREGS+(15*8)(r31) - lfd fp16,_UC_FREGS+(16*8)(r31) - lfd fp17,_UC_FREGS+(17*8)(r31) - lfd fp18,_UC_FREGS+(18*8)(r31) - lfd fp19,_UC_FREGS+(19*8)(r31) - lfd fp20,_UC_FREGS+(20*8)(r31) - lfd fp21,_UC_FREGS+(21*8)(r31) - lfd fp22,_UC_FREGS+(22*8)(r31) - lfd fp23,_UC_FREGS+(23*8)(r31) - lfd fp24,_UC_FREGS+(24*8)(r31) - lfd fp25,_UC_FREGS+(25*8)(r31) - lfd fp26,_UC_FREGS+(26*8)(r31) - lfd fp27,_UC_FREGS+(27*8)(r31) - lfd fp28,_UC_FREGS+(28*8)(r31) - lfd fp29,_UC_FREGS+(29*8)(r31) - lfd fp30,_UC_FREGS+(30*8)(r31) - lfd fp31,_UC_FREGS+(31*8)(r31) -#endif /* __CONTEXT_ENABLE_FPRS */ - -#ifdef __CONTEXT_ENABLE_E500 - setcontext_e500 -#endif - - /* Restore LR and CCR, and set CTR to the NIP value */ - lwz r3,_UC_GREGS+(PT_LNK*4)(r31) - lwz r4,_UC_GREGS+(PT_NIP*4)(r31) - lwz r5,_UC_GREGS+(PT_CCR*4)(r31) - mtlr r3 - mtctr r4 - mtcr r5 - - /* Restore the general registers */ - lwz r1,_UC_GREGS+(PT_R1*4)(r31) - lwz r3,_UC_GREGS+(PT_R3*4)(r31) - lwz r4,_UC_GREGS+(PT_R4*4)(r31) - lwz r5,_UC_GREGS+(PT_R5*4)(r31) - lwz r6,_UC_GREGS+(PT_R6*4)(r31) - lwz r7,_UC_GREGS+(PT_R7*4)(r31) - lwz r8,_UC_GREGS+(PT_R8*4)(r31) - lwz r9,_UC_GREGS+(PT_R9*4)(r31) - lwz r10,_UC_GREGS+(PT_R10*4)(r31) - lwz r11,_UC_GREGS+(PT_R11*4)(r31) - lwz r12,_UC_GREGS+(PT_R12*4)(r31) - lwz r13,_UC_GREGS+(PT_R13*4)(r31) - lwz r14,_UC_GREGS+(PT_R14*4)(r31) - lwz r15,_UC_GREGS+(PT_R15*4)(r31) - lwz r16,_UC_GREGS+(PT_R16*4)(r31) - lwz r17,_UC_GREGS+(PT_R17*4)(r31) - lwz r18,_UC_GREGS+(PT_R18*4)(r31) - lwz r19,_UC_GREGS+(PT_R19*4)(r31) - lwz r20,_UC_GREGS+(PT_R20*4)(r31) - lwz r21,_UC_GREGS+(PT_R21*4)(r31) - lwz r22,_UC_GREGS+(PT_R22*4)(r31) - lwz r23,_UC_GREGS+(PT_R23*4)(r31) - lwz r24,_UC_GREGS+(PT_R24*4)(r31) - lwz r25,_UC_GREGS+(PT_R25*4)(r31) - lwz r26,_UC_GREGS+(PT_R26*4)(r31) - lwz r27,_UC_GREGS+(PT_R27*4)(r31) - lwz r28,_UC_GREGS+(PT_R28*4)(r31) - lwz r29,_UC_GREGS+(PT_R29*4)(r31) - lwz r30,_UC_GREGS+(PT_R30*4)(r31) - lwz r31,_UC_GREGS+(PT_R31*4)(r31) - - bctr - -3: /* L(error_exit): */ - lwz r31,12(r1) - lwz r0,20(r1) - addi r1,r1,16 - mtlr r0 - blr - - -4: /* L(do_sigret): */ - addi r1,r3,-0xd0 - li r0,SYS_ify(rt_sigreturn) - sc - /* NOTREACHED */ - -END (__CONTEXT_FUNC_NAME) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S deleted file mode 100644 index e24a692ebb..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S +++ /dev/null @@ -1,80 +0,0 @@ -/* Jump to a new context. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define __ASSEMBLY__ -#include -#include "ucontext_i.h" - -#define __CONTEXT_FUNC_NAME __setcontext -#define __CONTEXT_ENABLE_FPRS 1 -#define __CONTEXT_ENABLE_VRS 1 - -/* Size of ucontext in GLIBC_2.3.4 and later. */ -#define _UC_SIZE_2_3_4 1184 - - .section ".text"; -ENTRY (__setcontext) - mr r4,r3 - li r3,0 - li r5,_UC_SIZE_2_3_4; - DO_CALL (SYS_ify (swapcontext)); - bso- cr0,1f -/* the kernel does not set the return code for the success case */ - li r3,0 - blr -1: - b __syscall_error@local -END(__setcontext) - -versioned_symbol (libc, __setcontext, setcontext, GLIBC_2_3_4) - -#if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_3_4) - - compat_text_section - -# undef __CONTEXT_FUNC_NAME -# define __CONTEXT_FUNC_NAME __novec_setcontext -# undef __CONTEXT_ENABLE_VRS - -# include "setcontext-common.S" - - .previous - -compat_symbol (libc, __novec_setcontext, setcontext, GLIBC_2_3_3) - -#endif - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_3) - -# define _ERRNO_H 1 -# include - - compat_text_section -ENTRY (__setcontext_stub) - li r3,ENOSYS - b __syscall_error@local -END (__setcontext_stub) - .previous - -compat_symbol (libc, __setcontext_stub, setcontext, GLIBC_2_0) - -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S deleted file mode 100644 index 6696d540dc..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S +++ /dev/null @@ -1,529 +0,0 @@ -/* Save current context and jump to a new context. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This is the common implementation of setcontext for powerpc32. - It not complete in itself should be included in to a framework that - defines: - __CONTEXT_FUNC_NAME - and if appropriate: - __CONTEXT_ENABLE_FPRS - __CONTEXT_ENABLE_VRS - Any architecture that implements the Vector unit is assumed to also - implement the floating unit. */ - -/* Stack frame offsets. */ -#define _FRAME_BACKCHAIN 0 -#define _FRAME_LR_SAVE 4 -#define _FRAME_PARM_SAVE1 8 -#define _FRAME_PARM_SAVE2 12 -#define _FRAME_PARM_SAVE3 16 -#define _FRAME_PARM_SAVE4 20 - -#ifdef __CONTEXT_ENABLE_VRS - .machine "altivec" -#endif -ENTRY(__CONTEXT_FUNC_NAME) - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) -/* Insure that the _UC_REGS start on a quadword boundary. */ - stw r3,_FRAME_PARM_SAVE1(r1) - addi r3,r3,_UC_REG_SPACE+12 - stw r4,_FRAME_PARM_SAVE2(r1) /* new context pointer */ - clrrwi r3,r3,4 - -/* Save the general purpose registers */ - stw r0,_UC_GREGS+(PT_R0*4)(r3) - mflr r0 - stw r2,_UC_GREGS+(PT_R2*4)(r3) - stw r4,_UC_GREGS+(PT_R4*4)(r3) -/* Set the callers LR_SAVE, and the ucontext LR and NIP to the callers - return address. */ - stw r0,_UC_GREGS+(PT_LNK*4)(r3) - stw r0,_UC_GREGS+(PT_NIP*4)(r3) - stw r0,_FRAME_LR_SAVE+16(r1) - cfi_offset (lr, _FRAME_LR_SAVE) - stw r5,_UC_GREGS+(PT_R5*4)(r3) - stw r6,_UC_GREGS+(PT_R6*4)(r3) - stw r7,_UC_GREGS+(PT_R7*4)(r3) - stw r8,_UC_GREGS+(PT_R8*4)(r3) - stw r9,_UC_GREGS+(PT_R9*4)(r3) - stw r10,_UC_GREGS+(PT_R10*4)(r3) - stw r11,_UC_GREGS+(PT_R11*4)(r3) - stw r12,_UC_GREGS+(PT_R12*4)(r3) - stw r13,_UC_GREGS+(PT_R13*4)(r3) - stw r14,_UC_GREGS+(PT_R14*4)(r3) - stw r15,_UC_GREGS+(PT_R15*4)(r3) - stw r16,_UC_GREGS+(PT_R16*4)(r3) - stw r17,_UC_GREGS+(PT_R17*4)(r3) - stw r18,_UC_GREGS+(PT_R18*4)(r3) - stw r19,_UC_GREGS+(PT_R19*4)(r3) - stw r20,_UC_GREGS+(PT_R20*4)(r3) - stw r21,_UC_GREGS+(PT_R21*4)(r3) - stw r22,_UC_GREGS+(PT_R22*4)(r3) - stw r23,_UC_GREGS+(PT_R23*4)(r3) - stw r24,_UC_GREGS+(PT_R24*4)(r3) - stw r25,_UC_GREGS+(PT_R25*4)(r3) - stw r26,_UC_GREGS+(PT_R26*4)(r3) - stw r27,_UC_GREGS+(PT_R27*4)(r3) - stw r28,_UC_GREGS+(PT_R28*4)(r3) - stw r29,_UC_GREGS+(PT_R29*4)(r3) - stw r30,_UC_GREGS+(PT_R30*4)(r3) - stw r31,_UC_GREGS+(PT_R31*4)(r3) - -/* Save the value of R1. We had to push the stack before we - had the address of uc_reg_space. So compute the address of - the callers stack pointer and save it as R1. */ - addi r8,r1,16 - li r0,0 -/* Save the count, exception and condition registers. */ - mfctr r11 - mfxer r10 - mfcr r9 - stw r8,_UC_GREGS+(PT_R1*4)(r3) - stw r11,_UC_GREGS+(PT_CTR*4)(r3) - stw r10,_UC_GREGS+(PT_XER*4)(r3) - stw r9,_UC_GREGS+(PT_CCR*4)(r3) -/* Set the return value of getcontext to "success". R3 is the only - register whose value is not preserved in the saved context. */ - stw r0,_UC_GREGS+(PT_R3*4)(r3) - - /* Zero fill fields that can't be set in user state. */ - stw r0,_UC_GREGS+(PT_MSR*4)(r3) - stw r0,_UC_GREGS+(PT_MQ*4)(r3) - -#ifdef __CONTEXT_ENABLE_FPRS - /* Save the floating-point registers */ - stfd fp0,_UC_FREGS+(0*8)(r3) - stfd fp1,_UC_FREGS+(1*8)(r3) - stfd fp2,_UC_FREGS+(2*8)(r3) - stfd fp3,_UC_FREGS+(3*8)(r3) - stfd fp4,_UC_FREGS+(4*8)(r3) - stfd fp5,_UC_FREGS+(5*8)(r3) - stfd fp6,_UC_FREGS+(6*8)(r3) - stfd fp7,_UC_FREGS+(7*8)(r3) - stfd fp8,_UC_FREGS+(8*8)(r3) - stfd fp9,_UC_FREGS+(9*8)(r3) - stfd fp10,_UC_FREGS+(10*8)(r3) - stfd fp11,_UC_FREGS+(11*8)(r3) - stfd fp12,_UC_FREGS+(12*8)(r3) - stfd fp13,_UC_FREGS+(13*8)(r3) - stfd fp14,_UC_FREGS+(14*8)(r3) - stfd fp15,_UC_FREGS+(15*8)(r3) - stfd fp16,_UC_FREGS+(16*8)(r3) - stfd fp17,_UC_FREGS+(17*8)(r3) - stfd fp18,_UC_FREGS+(18*8)(r3) - stfd fp19,_UC_FREGS+(19*8)(r3) - stfd fp20,_UC_FREGS+(20*8)(r3) - stfd fp21,_UC_FREGS+(21*8)(r3) - stfd fp22,_UC_FREGS+(22*8)(r3) - stfd fp23,_UC_FREGS+(23*8)(r3) - stfd fp24,_UC_FREGS+(24*8)(r3) - stfd fp25,_UC_FREGS+(25*8)(r3) - stfd fp26,_UC_FREGS+(26*8)(r3) - stfd fp27,_UC_FREGS+(27*8)(r3) - stfd fp28,_UC_FREGS+(28*8)(r3) - stfd fp29,_UC_FREGS+(29*8)(r3) - mffs fp0 - stfd fp30,_UC_FREGS+(30*8)(r3) - stfd fp31,_UC_FREGS+(31*8)(r3) - stfd fp0,_UC_FREGS+(32*8)(r3) - -# ifdef PIC - mflr r8 -# define got_label GENERATE_GOT_LABEL (__CONTEXT_FUNC_NAME) - SETUP_GOT_ACCESS(r7,got_label) - addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha - addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l -# ifdef SHARED - lwz r7,_rtld_global_ro@got(r7) - mtlr r8 - lwz r7,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+LOWORD(r7) -# else - lwz r7,_dl_hwcap@got(r7) - mtlr r8 - lwz r7,LOWORD(r7) -# endif -# else - lis r7,(_dl_hwcap+LOWORD)@ha - lwz r7,(_dl_hwcap+LOWORD)@l(r7) -# endif - -# ifdef __CONTEXT_ENABLE_VRS - andis. r6,r7,(PPC_FEATURE_HAS_ALTIVEC >> 16) - - la r10,(_UC_VREGS)(r3) - la r9,(_UC_VREGS+16)(r3) - -/* beq L(no_vec)*/ - beq 2f -/* address of the combined VSCR/VSAVE quadword. */ - la r8,(_UC_VREGS+512)(r3) - -/* Save the vector registers */ - stvx v0,0,r10 - stvx v1,0,r9 - addi r10,r10,32 - addi r9,r9,32 -/* We need to get the Vector Status and Control Register early to avoid - store order problems later with the VSAVE register that shares the - same quadword. */ - mfvscr v0 - - stvx v2,0,r10 - stvx v3,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v0,0,r8 - - stvx v4,0,r10 - stvx v5,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v6,0,r10 - stvx v7,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v8,0,r10 - stvx v9,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v10,0,r10 - stvx v11,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v12,0,r10 - stvx v13,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v14,0,r10 - stvx v15,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v16,0,r10 - stvx v17,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v18,0,r10 - stvx v19,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v20,0,r10 - stvx v21,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v22,0,r10 - stvx v23,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v24,0,r10 - stvx v25,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v26,0,r10 - stvx v27,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v28,0,r10 - stvx v29,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - mfvscr v0 - stvx v30,0,r10 - stvx v31,0,r9 - stw r0,0(r8) - -2: /*L(no_vec):*/ -# endif /* __CONTEXT_ENABLE_VRS */ -#endif /* __CONTEXT_ENABLE_FPRS */ - -#ifdef __CONTEXT_ENABLE_E500 - getcontext_e500 -#endif - -/* Restore ucontext (parm1) from stack. */ - lwz r12,_FRAME_PARM_SAVE1(r1) - lwz r4,_FRAME_PARM_SAVE2(r1) - addi r4,r4,_UC_SIGMASK - stw r3,_UC_REGS_PTR(r12) - addi r5,r12,_UC_SIGMASK - li r3,SIG_SETMASK - bl __sigprocmask@local - cmpwi r3,0 - bne 3f /* L(error_exit) */ - - /* - * If the new ucontext refers to the point where we were interrupted - * by a signal, we have to use the rt_sigreturn system call to - * return to the context so we get both LR and CTR restored. - * - * Otherwise, the context we are restoring is either just after - * a procedure call (getcontext/swapcontext) or at the beginning - * of a procedure call (makecontext), so we don't need to restore - * r0, xer, ctr. We don't restore r2 since it will be used as - * the TLS pointer. - */ - lwz r4,_FRAME_PARM_SAVE2(r1) - lwz r31,_UC_REGS_PTR(r4) - lwz r0,_UC_GREGS+(PT_MSR*4)(r31) - cmpwi r0,0 - bne 4f /* L(do_sigret) */ - -#ifdef __CONTEXT_ENABLE_FPRS -# ifdef __CONTEXT_ENABLE_VRS - -# ifdef PIC - mflr r8 - SETUP_GOT_ACCESS(r7,got_label) - addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha - addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l - mtlr r8 -# ifdef SHARED - lwz r7,_rtld_global_ro@got(r7) - lwz r7,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+LOWORD(r7) -# else - lwz r7,_dl_hwcap@got(r7) - lwz r7,LOWORD(r7) -# endif -# else - lis r7,(_dl_hwcap+LOWORD)@ha - lwz r7,(_dl_hwcap+LOWORD)@l(r7) -# endif - andis. r7,r7,(PPC_FEATURE_HAS_ALTIVEC >> 16) - la r10,(_UC_VREGS)(r31) - beq 6f /* L(has_no_vec) */ - - lwz r0,(32*16)(r10) - li r9,(32*16) - cmpwi r0,0 - mtspr VRSAVE,r0 - beq 6f /* L(has_no_vec) */ - - lvx v19,r9,r10 - la r9,(16)(r10) - - lvx v0,0,r10 - lvx v1,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - mtvscr v19 - lvx v2,0,r10 - lvx v3,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v4,0,r10 - lvx v5,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v6,0,r10 - lvx v7,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v8,0,r10 - lvx v9,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v10,0,r10 - lvx v11,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v12,0,r10 - lvx v13,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v14,0,r10 - lvx v15,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v16,0,r10 - lvx v17,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v18,0,r10 - lvx v19,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v20,0,r10 - lvx v21,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v22,0,r10 - lvx v23,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v24,0,r10 - lvx v25,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v26,0,r10 - lvx v27,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v28,0,r10 - lvx v29,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v30,0,r10 - lvx v31,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v10,0,r10 - lvx v11,0,r9 - -6: /* L(has_no_vec): */ -# endif /* __CONTEXT_ENABLE_VRS */ - /* Restore the floating-point registers */ - lfd fp31,_UC_FREGS+(32*8)(r31) - lfd fp0,_UC_FREGS+(0*8)(r31) -# ifdef _ARCH_PWR6 - /* Use the extended four-operand version of the mtfsf insn. */ - mtfsf 0xff,fp31,1,0 -# else - .machine push - .machine "power6" - /* Availability of DFP indicates a 64-bit FPSCR. */ - andi. r6,r7,PPC_FEATURE_HAS_DFP - beq 7f - /* Use the extended four-operand version of the mtfsf insn. */ - mtfsf 0xff,fp31,1,0 - b 8f - /* Continue to operate on the FPSCR as if it were 32-bits. */ -7: mtfsf 0xff,fp31 -8: .machine pop -#endif /* _ARCH_PWR6 */ - lfd fp1,_UC_FREGS+(1*8)(r31) - lfd fp2,_UC_FREGS+(2*8)(r31) - lfd fp3,_UC_FREGS+(3*8)(r31) - lfd fp4,_UC_FREGS+(4*8)(r31) - lfd fp5,_UC_FREGS+(5*8)(r31) - lfd fp6,_UC_FREGS+(6*8)(r31) - lfd fp7,_UC_FREGS+(7*8)(r31) - lfd fp8,_UC_FREGS+(8*8)(r31) - lfd fp9,_UC_FREGS+(9*8)(r31) - lfd fp10,_UC_FREGS+(10*8)(r31) - lfd fp11,_UC_FREGS+(11*8)(r31) - lfd fp12,_UC_FREGS+(12*8)(r31) - lfd fp13,_UC_FREGS+(13*8)(r31) - lfd fp14,_UC_FREGS+(14*8)(r31) - lfd fp15,_UC_FREGS+(15*8)(r31) - lfd fp16,_UC_FREGS+(16*8)(r31) - lfd fp17,_UC_FREGS+(17*8)(r31) - lfd fp18,_UC_FREGS+(18*8)(r31) - lfd fp19,_UC_FREGS+(19*8)(r31) - lfd fp20,_UC_FREGS+(20*8)(r31) - lfd fp21,_UC_FREGS+(21*8)(r31) - lfd fp22,_UC_FREGS+(22*8)(r31) - lfd fp23,_UC_FREGS+(23*8)(r31) - lfd fp24,_UC_FREGS+(24*8)(r31) - lfd fp25,_UC_FREGS+(25*8)(r31) - lfd fp26,_UC_FREGS+(26*8)(r31) - lfd fp27,_UC_FREGS+(27*8)(r31) - lfd fp28,_UC_FREGS+(28*8)(r31) - lfd fp29,_UC_FREGS+(29*8)(r31) - lfd fp30,_UC_FREGS+(30*8)(r31) - lfd fp31,_UC_FREGS+(31*8)(r31) -#endif /* __CONTEXT_ENABLE_FPRS */ - -#ifdef __CONTEXT_ENABLE_E500 - setcontext_e500 -#endif - - /* Restore LR and CCR, and set CTR to the NIP value */ - lwz r3,_UC_GREGS+(PT_LNK*4)(r31) - lwz r4,_UC_GREGS+(PT_NIP*4)(r31) - lwz r5,_UC_GREGS+(PT_CCR*4)(r31) - mtlr r3 - mtctr r4 - mtcr r5 - - /* Restore the general registers */ - lwz r3,_UC_GREGS+(PT_R3*4)(r31) - lwz r4,_UC_GREGS+(PT_R4*4)(r31) - lwz r5,_UC_GREGS+(PT_R5*4)(r31) - lwz r6,_UC_GREGS+(PT_R6*4)(r31) - lwz r7,_UC_GREGS+(PT_R7*4)(r31) - lwz r8,_UC_GREGS+(PT_R8*4)(r31) - lwz r9,_UC_GREGS+(PT_R9*4)(r31) - lwz r10,_UC_GREGS+(PT_R10*4)(r31) - lwz r11,_UC_GREGS+(PT_R11*4)(r31) - lwz r12,_UC_GREGS+(PT_R12*4)(r31) - lwz r13,_UC_GREGS+(PT_R13*4)(r31) - lwz r14,_UC_GREGS+(PT_R14*4)(r31) - lwz r15,_UC_GREGS+(PT_R15*4)(r31) - lwz r16,_UC_GREGS+(PT_R16*4)(r31) - lwz r17,_UC_GREGS+(PT_R17*4)(r31) - lwz r18,_UC_GREGS+(PT_R18*4)(r31) - lwz r19,_UC_GREGS+(PT_R19*4)(r31) - lwz r20,_UC_GREGS+(PT_R20*4)(r31) - lwz r21,_UC_GREGS+(PT_R21*4)(r31) - lwz r22,_UC_GREGS+(PT_R22*4)(r31) - lwz r23,_UC_GREGS+(PT_R23*4)(r31) - lwz r24,_UC_GREGS+(PT_R24*4)(r31) - lwz r25,_UC_GREGS+(PT_R25*4)(r31) - lwz r26,_UC_GREGS+(PT_R26*4)(r31) - lwz r27,_UC_GREGS+(PT_R27*4)(r31) - lwz r28,_UC_GREGS+(PT_R28*4)(r31) - lwz r29,_UC_GREGS+(PT_R29*4)(r31) - lwz r30,_UC_GREGS+(PT_R30*4)(r31) - lwz r1,_UC_GREGS+(PT_R1*4)(r31) - lwz r31,_UC_GREGS+(PT_R31*4)(r31) - - bctr - -3:/*L(error_exit):*/ - lwz r0,_FRAME_LR_SAVE+16(r1) - addi r1,r1,16 - mtlr r0 - blr - -4:/*L(do_sigret):*/ - addi r1,r4,-0xd0 - li r0,SYS_ify(rt_sigreturn) - sc - /* NOTREACHED */ - -END(__CONTEXT_FUNC_NAME) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S deleted file mode 100644 index 491b560c6c..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S +++ /dev/null @@ -1,78 +0,0 @@ -/* Save current context and jump to a new context. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define __ASSEMBLY__ -#include -#include "ucontext_i.h" - -#define __CONTEXT_FUNC_NAME __swapcontext -#define __CONTEXT_ENABLE_FPRS 1 -#define __CONTEXT_ENABLE_VRS 1 - -/* Size of ucontext in GLIBC_2.3.4 and later. */ -#define _UC_SIZE_2_3_4 1184 - - .section ".text"; -ENTRY (__swapcontext) - li r5,_UC_SIZE_2_3_4; - DO_CALL (SYS_ify (swapcontext)); - bso- cr0,1f -/* the kernel does not set the return code for the success case */ - li r3,0 - blr -1: - b __syscall_error@local -END(__swapcontext) - -versioned_symbol (libc, __swapcontext, swapcontext, GLIBC_2_3_4) - -#if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_3_4) - - compat_text_section - -# undef __CONTEXT_FUNC_NAME -# define __CONTEXT_FUNC_NAME __novec_swapcontext -# undef __CONTEXT_ENABLE_VRS - -# include "swapcontext-common.S" - - .previous - -compat_symbol (libc, __novec_swapcontext, swapcontext, GLIBC_2_3_3) - -#endif - -#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3_3) - -# define _ERRNO_H 1 -# include - - compat_text_section -ENTRY (__swapcontext_stub) - li r3,ENOSYS - b __syscall_error@local -END (__swapcontext_stub) - .previous - -compat_symbol (libc, __swapcontext_stub, swapcontext, GLIBC_2_1) - -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list b/sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list deleted file mode 100644 index 931374776a..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list +++ /dev/null @@ -1,10 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -chown - chown i:sii __chown chown@@GLIBC_2.1 -lchown - lchown i:sii __lchown lchown@@GLIBC_2.0 chown@GLIBC_2.0 - -# Due to 64bit alignment there is a dummy second parameter -readahead - readahead i:iiiii __readahead readahead - -prlimit64 EXTRA prlimit64 i:iipp prlimit64 -fanotify_mark EXTRA fanotify_mark i:iiiiis fanotify_mark diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h deleted file mode 100644 index 35d3f0508c..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h +++ /dev/null @@ -1,118 +0,0 @@ -/* Cancellable system call stubs. Linux/PowerPC version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Franz Sirl , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .section ".text"; \ - ENTRY (name) \ - SINGLE_THREAD_P; \ - bne- .Lpseudo_cancel; \ - .type __##syscall_name##_nocancel,@function; \ - .globl __##syscall_name##_nocancel; \ - __##syscall_name##_nocancel: \ - DO_CALL (SYS_ify (syscall_name)); \ - PSEUDO_RET; \ - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ - .Lpseudo_cancel: \ - stwu 1,-48(1); \ - cfi_adjust_cfa_offset (48); \ - mflr 9; \ - stw 9,52(1); \ - cfi_offset (lr, 4); \ - DOCARGS_##args; /* save syscall args around CENABLE. */ \ - CENABLE; \ - stw 3,16(1); /* store CENABLE return value (MASK). */ \ - UNDOCARGS_##args; /* restore syscall args. */ \ - DO_CALL (SYS_ify (syscall_name)); \ - mfcr 0; /* save CR/R3 around CDISABLE. */ \ - stw 3,8(1); \ - stw 0,12(1); \ - lwz 3,16(1); /* pass MASK to CDISABLE. */ \ - CDISABLE; \ - lwz 4,52(1); \ - lwz 0,12(1); /* restore CR/R3. */ \ - lwz 3,8(1); \ - mtlr 4; \ - mtcr 0; \ - addi 1,1,48; - -# define DOCARGS_0 -# define UNDOCARGS_0 - -# define DOCARGS_1 stw 3,20(1); DOCARGS_0 -# define UNDOCARGS_1 lwz 3,20(1); UNDOCARGS_0 - -# define DOCARGS_2 stw 4,24(1); DOCARGS_1 -# define UNDOCARGS_2 lwz 4,24(1); UNDOCARGS_1 - -# define DOCARGS_3 stw 5,28(1); DOCARGS_2 -# define UNDOCARGS_3 lwz 5,28(1); UNDOCARGS_2 - -# define DOCARGS_4 stw 6,32(1); DOCARGS_3 -# define UNDOCARGS_4 lwz 6,32(1); UNDOCARGS_3 - -# define DOCARGS_5 stw 7,36(1); DOCARGS_4 -# define UNDOCARGS_5 lwz 7,36(1); UNDOCARGS_4 - -# define DOCARGS_6 stw 8,40(1); DOCARGS_5 -# define UNDOCARGS_6 lwz 8,40(1); UNDOCARGS_5 - -# if IS_IN (libpthread) -# define CENABLE bl __pthread_enable_asynccancel@local -# define CDISABLE bl __pthread_disable_asynccancel@local -# elif IS_IN (libc) -# define CENABLE bl __libc_enable_asynccancel@local -# define CDISABLE bl __libc_disable_asynccancel@local -# elif IS_IN (librt) -# define CENABLE bl __librt_enable_asynccancel@local -# define CDISABLE bl __librt_disable_asynccancel@local -# else -# error Unsupported library -# endif - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P \ - lwz 10,MULTIPLE_THREADS_OFFSET(2); \ - cmpwi 10,0 -# endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h deleted file mode 100644 index a88f164961..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h +++ /dev/null @@ -1,234 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_POWERPC_SYSDEP_H -#define _LINUX_POWERPC_SYSDEP_H 1 - -#include -#include -#include - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -#ifndef __ASSEMBLER__ - -# include - -/* Define a macro which expands inline into the wrapper code for a VDSO - call. This use is for internal calls that do not need to handle errors - normally. It will never touch errno. - On powerpc a system call basically clobbers the same registers like a - function call, with the exception of LR (which is needed for the - "sc; bnslr+" sequence) and CR (where only CR0.SO is clobbered to signal - an error return status). */ -# define INTERNAL_VSYSCALL_CALL_TYPE(funcptr, err, nr, type, args...) \ - ({ \ - register void *r0 __asm__ ("r0"); \ - register long int r3 __asm__ ("r3"); \ - register long int r4 __asm__ ("r4"); \ - register long int r5 __asm__ ("r5"); \ - register long int r6 __asm__ ("r6"); \ - register long int r7 __asm__ ("r7"); \ - register long int r8 __asm__ ("r8"); \ - register long int r9 __asm__ ("r9"); \ - register long int r10 __asm__ ("r10"); \ - register long int r11 __asm__ ("r11"); \ - register long int r12 __asm__ ("r12"); \ - register type rval __asm__ ("r3"); \ - LOADARGS_##nr (funcptr, args); \ - __asm__ __volatile__ \ - ("mtctr %0\n\t" \ - "bctrl\n\t" \ - "mfcr %0" \ - : "+r" (r0), "+r" (r3), "+r" (r4), "+r" (r5), "+r" (r6), "+r" (r7), \ - "+r" (r8), "+r" (r9), "+r" (r10), "+r" (r11), "+r" (r12) \ - : : "cr0", "ctr", "lr", "memory"); \ - err = (long int) r0; \ - __asm__ __volatile__ ("" : "=r" (rval) : "r" (r3), "r" (r4)); \ - rval; \ - }) - -#define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...) \ - INTERNAL_VSYSCALL_CALL_TYPE(funcptr, err, nr, long int, args) - -# undef INLINE_SYSCALL -# define INLINE_SYSCALL(name, nr, args...) \ - ({ \ - INTERNAL_SYSCALL_DECL (sc_err); \ - long int sc_ret = INTERNAL_SYSCALL (name, sc_err, nr, args); \ - if (INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err)); \ - sc_ret = -1L; \ - } \ - sc_ret; \ - }) - -/* Define a macro which expands inline into the wrapper code for a system - call. This use is for internal calls that do not need to handle errors - normally. It will never touch errno. - On powerpc a system call basically clobbers the same registers like a - function call, with the exception of LR (which is needed for the - "sc; bnslr+" sequence) and CR (where only CR0.SO is clobbered to signal - an error return status). */ - -# undef INTERNAL_SYSCALL_DECL -# define INTERNAL_SYSCALL_DECL(err) long int err __attribute__ ((unused)) - -# undef INTERNAL_SYSCALL -# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - ({ \ - register long int r0 __asm__ ("r0"); \ - register long int r3 __asm__ ("r3"); \ - register long int r4 __asm__ ("r4"); \ - register long int r5 __asm__ ("r5"); \ - register long int r6 __asm__ ("r6"); \ - register long int r7 __asm__ ("r7"); \ - register long int r8 __asm__ ("r8"); \ - register long int r9 __asm__ ("r9"); \ - register long int r10 __asm__ ("r10"); \ - register long int r11 __asm__ ("r11"); \ - register long int r12 __asm__ ("r12"); \ - LOADARGS_##nr(name, args); \ - ABORT_TRANSACTION; \ - __asm__ __volatile__ \ - ("sc \n\t" \ - "mfcr %0" \ - : "=&r" (r0), \ - "=&r" (r3), "=&r" (r4), "=&r" (r5), "=&r" (r6), "=&r" (r7), \ - "=&r" (r8), "=&r" (r9), "=&r" (r10), "=&r" (r11), "=&r" (r12) \ - : ASM_INPUT_##nr \ - : "cr0", "ctr", "memory"); \ - err = r0; \ - (int) r3; \ - }) -# define INTERNAL_SYSCALL(name, err, nr, args...) \ - INTERNAL_SYSCALL_NCS (__NR_##name, err, nr, ##args) - -# undef INTERNAL_SYSCALL_ERROR_P -# define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((void) (val), __builtin_expect ((err) & (1 << 28), 0)) - -# undef INTERNAL_SYSCALL_ERRNO -# define INTERNAL_SYSCALL_ERRNO(val, err) (val) - -# define INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK(name, err, type, nr, args...) \ - ({ \ - type sc_ret = ENOSYS; \ - \ - __typeof (__vdso_##name) vdsop = __vdso_##name; \ - PTR_DEMANGLE (vdsop); \ - if (vdsop != NULL) \ - sc_ret = \ - INTERNAL_VSYSCALL_CALL_TYPE (vdsop, err, nr, type, ##args); \ - else \ - err = 1 << 28; \ - sc_ret; \ - }) - -/* List of system calls which are supported as vsyscalls. */ -# define HAVE_CLOCK_GETRES_VSYSCALL 1 -# define HAVE_CLOCK_GETTIME_VSYSCALL 1 -# define HAVE_GETCPU_VSYSCALL 1 - - -# define LOADARGS_0(name, dummy) \ - r0 = name -# define LOADARGS_1(name, __arg1) \ - long int arg1 = (long int) (__arg1); \ - LOADARGS_0(name, 0); \ - extern void __illegally_sized_syscall_arg1 (void); \ - if (__builtin_classify_type (__arg1) != 5 && sizeof (__arg1) > 4) \ - __illegally_sized_syscall_arg1 (); \ - r3 = arg1 -# define LOADARGS_2(name, __arg1, __arg2) \ - long int arg2 = (long int) (__arg2); \ - LOADARGS_1(name, __arg1); \ - extern void __illegally_sized_syscall_arg2 (void); \ - if (__builtin_classify_type (__arg2) != 5 && sizeof (__arg2) > 4) \ - __illegally_sized_syscall_arg2 (); \ - r4 = arg2 -# define LOADARGS_3(name, __arg1, __arg2, __arg3) \ - long int arg3 = (long int) (__arg3); \ - LOADARGS_2(name, __arg1, __arg2); \ - extern void __illegally_sized_syscall_arg3 (void); \ - if (__builtin_classify_type (__arg3) != 5 && sizeof (__arg3) > 4) \ - __illegally_sized_syscall_arg3 (); \ - r5 = arg3 -# define LOADARGS_4(name, __arg1, __arg2, __arg3, __arg4) \ - long int arg4 = (long int) (__arg4); \ - LOADARGS_3(name, __arg1, __arg2, __arg3); \ - extern void __illegally_sized_syscall_arg4 (void); \ - if (__builtin_classify_type (__arg4) != 5 && sizeof (__arg4) > 4) \ - __illegally_sized_syscall_arg4 (); \ - r6 = arg4 -# define LOADARGS_5(name, __arg1, __arg2, __arg3, __arg4, __arg5) \ - long int arg5 = (long int) (__arg5); \ - LOADARGS_4(name, __arg1, __arg2, __arg3, __arg4); \ - extern void __illegally_sized_syscall_arg5 (void); \ - if (__builtin_classify_type (__arg5) != 5 && sizeof (__arg5) > 4) \ - __illegally_sized_syscall_arg5 (); \ - r7 = arg5 -# define LOADARGS_6(name, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6) \ - long int arg6 = (long int) (__arg6); \ - LOADARGS_5(name, __arg1, __arg2, __arg3, __arg4, __arg5); \ - extern void __illegally_sized_syscall_arg6 (void); \ - if (__builtin_classify_type (__arg6) != 5 && sizeof (__arg6) > 4) \ - __illegally_sized_syscall_arg6 (); \ - r8 = arg6 - -# define ASM_INPUT_0 "0" (r0) -# define ASM_INPUT_1 ASM_INPUT_0, "1" (r3) -# define ASM_INPUT_2 ASM_INPUT_1, "2" (r4) -# define ASM_INPUT_3 ASM_INPUT_2, "3" (r5) -# define ASM_INPUT_4 ASM_INPUT_3, "4" (r6) -# define ASM_INPUT_5 ASM_INPUT_4, "5" (r7) -# define ASM_INPUT_6 ASM_INPUT_5, "6" (r8) - -#endif /* __ASSEMBLER__ */ - - -/* Pointer mangling support. */ -#if IS_IN (rtld) -/* We cannot use the thread descriptor because in ld.so we use setjmp - earlier than the descriptor is initialized. */ -#else -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(reg, tmpreg) \ - lwz tmpreg,POINTER_GUARD(r2); \ - xor reg,tmpreg,reg -# define PTR_MANGLE2(reg, tmpreg) \ - xor reg,tmpreg,reg -# define PTR_MANGLE3(destreg, reg, tmpreg) \ - lwz tmpreg,POINTER_GUARD(r2); \ - xor destreg,tmpreg,reg -# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) -# define PTR_DEMANGLE2(reg, tmpreg) PTR_MANGLE2 (reg, tmpreg) -# define PTR_DEMANGLE3(destreg, reg, tmpreg) PTR_MANGLE3 (destreg, reg, tmpreg) -# else -# define PTR_MANGLE(var) \ - (var) = (__typeof (var)) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#endif - -#endif /* linux/powerpc/powerpc32/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ucontext_i.sym b/sysdeps/unix/sysv/linux/powerpc/powerpc32/ucontext_i.sym deleted file mode 100644 index 293761f260..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ucontext_i.sym +++ /dev/null @@ -1,26 +0,0 @@ -#include -#include -#include - --- - -SIG_BLOCK -SIG_SETMASK - --- Offsets in ucontext_t. -#define ucontext(member) offsetof (ucontext_t, member) -_UC_LINK ucontext (uc_link) -_UC_STACK_SP ucontext (uc_stack.ss_sp) -_UC_STACK_SIZE ucontext (uc_stack.ss_size) -_UC_REGS_PTR ucontext (uc_mcontext.uc_regs) -_UC_SIGMASK ucontext (uc_sigmask) -_UC_REG_SPACE ucontext (uc_reg_space) - --- Offsets in mcontext_t. -#define mcontext(member) offsetof (mcontext_t, member) -_UC_GREGS mcontext (gregs) -_UC_FREGS mcontext (fpregs) -_UC_VREGS mcontext (vrregs) -_UC_VREGS mcontext (vrregs) -_UC_VSCR mcontext (vrregs.vscr) -_UC_VRSAVE mcontext (vrregs.vrsave) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S deleted file mode 100644 index d1529769fe..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include -#include - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__vfork) - - DO_CALL (SYS_ify (vfork)) - - PSEUDO_RET - -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) - -weak_alias (__vfork, vfork) -strong_alias (__vfork, __libc_vfork) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/xstat.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/xstat.c deleted file mode 100644 index e9869f5508..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/xstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/970/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc64/970/Implies deleted file mode 100644 index 76a32ce7b5..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/970/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc64/970/fpu -powerpc/powerpc64/970 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc64/Implies deleted file mode 100644 index 8d91c80097..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/Implies +++ /dev/null @@ -1 +0,0 @@ -unix/sysv/linux/wordsize-64 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions b/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions deleted file mode 100644 index a8e88b89db..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions +++ /dev/null @@ -1,43 +0,0 @@ -libc { - GLIBC_2.2 { - # functions used in other libraries - - # g* - glob64; - - # New rlimit interface - getrlimit; setrlimit; getrlimit64; setrlimit64; - - # r* - readdir64; readdir64_r; - - # s* - scandir64; - } - GLIBC_2.3.4 { - getcontext; - setcontext; - swapcontext; - } - GLIBC_2.17 { - __ppc_get_timebase_freq; - } -} - -librt { - GLIBC_2.3.3 { - # Changed timer_t. - timer_create; timer_delete; timer_getoverrun; timer_gettime; - timer_settime; - } -} - -libpthread { - GLIBC_2.3.4 { - longjmp; siglongjmp; - } - GLIBC_2.6 { - # Changed PTHREAD_STACK_MIN. - pthread_attr_setstack; pthread_attr_setstacksize; - } -} diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/____longjmp_chk.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/____longjmp_chk.S deleted file mode 100644 index 0941dd22a7..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/____longjmp_chk.S +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section .rodata.str1.8,"aMS",@progbits,1 - .align 3 -.LC0: - .string "longjmp causes uninitialized stack frame" - .section .toc,"aw" -.LC1: - .tc .LC0[TC],.LC0 - .text - -#define __longjmp ____longjmp_chk - -#define CHECK_SP(reg) \ - cmpld reg, r1; \ - bge+ .Lok; \ - mflr r0; \ - std r0,FRAME_LR_SAVE(r1); \ - mr r31,r3; \ - mr r30,r4; \ - stdu r1,-FRAME_MIN_SIZE-32(r1); \ - cfi_remember_state; \ - cfi_adjust_cfa_offset (FRAME_MIN_SIZE+32); \ - cfi_offset (lr, FRAME_LR_SAVE); \ - li r3,0; \ - addi r4,r1,FRAME_MIN_SIZE; \ - li r0,__NR_sigaltstack; \ - sc; \ - /* Without working sigaltstack we cannot perform the test. */ \ - bso .Lok2; \ - lwz r0,FRAME_MIN_SIZE+8(r1); \ - andi. r4,r0,1; \ - beq .Lfail; \ - ld r0,FRAME_MIN_SIZE+16(r1); \ - ld r4,FRAME_MIN_SIZE(r1); \ - add r4,r4,r0; \ - sub r3,r3,reg; \ - cmpld r3,r0; \ - bge+ .Lok2; \ -.Lfail: \ - ld r3,.LC1@toc(2); \ - bl HIDDEN_JUMPTARGET (__fortify_fail); \ - nop; \ -.Lok2: \ - mr r3,r31; \ - mr r4,r30; \ - cfi_restore_state; \ -.Lok: - -#include <__longjmp-common.S> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/a2/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc64/a2/Implies deleted file mode 100644 index 39b19e9c1f..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/a2/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc64/a2/fpu -powerpc/powerpc64/a2 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S deleted file mode 100644 index 733f452b5a..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S +++ /dev/null @@ -1,43 +0,0 @@ -/* brk system call for Linux. PowerPC64 version. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include - - .comm __curbrk,8,8 - .section ".toc","aw" -.LC__curbrk: - .tc __curbrk[TC],__curbrk - .section ".text" -ENTRY (__brk) - CALL_MCOUNT 1 - - std r3,-8(r1) - DO_CALL(SYS_ify(brk)) - ld r6,-8(r1) - ld r5,.LC__curbrk@toc(r2) - std r3,0(r5) - cmpld r6,r3 - li r3,0 - blelr+ - li r3,ENOMEM - TAIL_CALL_SYSCALL_ERROR -END (__brk) - -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/c++-types.data b/sysdeps/unix/sysv/linux/powerpc/powerpc64/c++-types.data deleted file mode 100644 index 23c11dc41b..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:l -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:m -fd_mask:l -fsblkcnt64_t:m -fsblkcnt_t:m -fsfilcnt64_t:m -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:m -ino_t:m -int16_t:s -int32_t:i -int64_t:l -int8_t:a -intptr_t:l -key_t:i -loff_t:l -mode_t:j -nlink_t:m -off64_t:l -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:l -register_t:l -rlim64_t:m -rlim_t:m -sigset_t:10__sigset_t -size_t:m -socklen_t:j -ssize_t:l -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:m -u_int8_t:h -ulong:m -u_long:m -u_quad_t:m -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/cell/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc64/cell/Implies deleted file mode 100644 index 583d4084a4..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/cell/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc64/cell/fpu -powerpc/powerpc64/cell diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/cell/fpu/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc64/cell/fpu/Implies deleted file mode 100644 index b6720ecda5..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/cell/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -powerpc/powerpc64/cell/fpu diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S deleted file mode 100644 index 9e5bfd2d03..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S +++ /dev/null @@ -1,119 +0,0 @@ -/* Wrapper around clone system call. PowerPC64 version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include - -#define CLONE_VM 0x00000100 -#define CLONE_THREAD 0x00010000 - -/* This is the only really unusual system call in PPC linux, but not - because of any weirdness in the system call itself; because of - all the freaky stuff we have to do to make the call useful. */ - -/* int [r3] clone(int (*fn)(void *arg) [r3], void *child_stack [r4], - int flags [r5], void *arg [r6], void *parent_tid [r7], - void *tls [r8], void *child_tid [r9]); */ - -ENTRY (__clone) - CALL_MCOUNT 7 - - /* Check for child_stack == NULL || fn == NULL. */ - cmpdi cr0,r4,0 - cmpdi cr1,r3,0 - cror cr0*4+eq,cr1*4+eq,cr0*4+eq - beq- cr0,L(badargs) - - /* Save some regs in the "red zone". */ - std r29,-24(r1) - std r30,-16(r1) - std r31,-8(r1) - cfi_offset(r29,-24) - cfi_offset(r30,-16) - cfi_offset(r31,-8) - - /* Set up stack frame for child. */ - clrrdi r4,r4,4 - li r0,0 - stdu r0,-FRAME_MIN_SIZE_PARM(r4) - - /* Save fn, args, stack across syscall. */ - mr r30,r3 /* Function in r30. */ - mr r29,r5 /* Flags in r29. */ - mr r31,r6 /* Argument in r31. */ - - /* 'flags' argument is first parameter to clone syscall. - Second is the stack pointer, already in r4. */ - mr r3,r5 - /* Move the parent_tid, child_tid and tls arguments. */ - mr r5,r7 - mr r6,r8 - mr r7,r9 - - /* End FDE now, because in the child the unwind info will be - wrong. */ - cfi_endproc - - /* Do the call. */ - DO_CALL(SYS_ify(clone)) - - /* Check for child process. */ - cmpdi cr1,r3,0 - crandc cr1*4+eq,cr1*4+eq,cr0*4+so - bne- cr1,L(parent) /* The '-' is to minimise the race. */ - - std r2,FRAME_TOC_SAVE(r1) - /* Call procedure. */ - PPC64_LOAD_FUNCPTR r30 - mr r3,r31 - bctrl - ld r2,FRAME_TOC_SAVE(r1) - /* Call _exit with result from procedure. */ -#ifdef SHARED - b JUMPTARGET(__GI__exit) -#else - bl JUMPTARGET(_exit) - /* We won't ever get here but provide a nop so that the linker - will insert a toc adjusting stub if necessary. */ - nop -#endif - -L(badargs): - cfi_startproc - li r3,EINVAL - TAIL_CALL_SYSCALL_ERROR - -L(parent): - /* Parent. Restore registers & return. */ - cfi_offset(r29,-24) - cfi_offset(r30,-16) - cfi_offset(r31,-8) - ld r29,-24(r1) - ld r30,-16(r1) - ld r31,-8(r1) - cfi_restore(r29) - cfi_restore(r30) - cfi_restore(r31) - - PSEUDO_RET - -END (__clone) - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure b/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure deleted file mode 100644 index 4e7fcf1d97..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure +++ /dev/null @@ -1,233 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/powerpc/powerpc64/. - -test -n "$libc_cv_slibdir" || -case "$prefix" in -/usr | /usr/) - libc_cv_slibdir=/lib64 - libc_cv_rtlddir=/lib64 - if test "$libdir" = '${exec_prefix}/lib'; then - libdir='${exec_prefix}/lib64'; - # Locale data can be shared between 32-bit and 64-bit libraries. - libc_cv_complocaledir='${exec_prefix}/lib/locale' - fi - ;; -esac - -# Define default-abi according to compiler flags. - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler is using the PowerPC64 ELFv2 ABI" >&5 -$as_echo_n "checking whether the compiler is using the PowerPC64 ELFv2 ABI... " >&6; } -if ${libc_cv_ppc64_elfv2_abi+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if _CALL_ELF == 2 - yes - #endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - libc_cv_ppc64_elfv2_abi=yes -else - libc_cv_ppc64_elfv2_abi=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ppc64_elfv2_abi" >&5 -$as_echo "$libc_cv_ppc64_elfv2_abi" >&6; } -if test $libc_cv_ppc64_elfv2_abi = yes; then - config_vars="$config_vars -default-abi = 64-v2" - # For shlib-versions. - $as_echo "#define HAVE_ELFV2_ABI 1" >>confdefs.h - -else - config_vars="$config_vars -default-abi = 64-v1" - # Compiler that do not support ELFv2 ABI does not define _CALL_ELF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler defines _CALL_ELF" >&5 -$as_echo_n "checking whether the compiler defines _CALL_ELF... " >&6; } -if ${libc_cv_ppc64_def_call_elf+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef _CALL_ELF - yes - #endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - libc_cv_ppc64_def_call_elf=yes -else - libc_cv_ppc64_def_call_elf=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ppc64_def_call_elf" >&5 -$as_echo "$libc_cv_ppc64_def_call_elf" >&6; } - if test $libc_cv_ppc64_def_call_elf = no; then - libc_extra_cppflags="$libc_extra_cppflags -D_CALL_ELF=1" - fi -fi -# Set minimum kernel version for ppc64le. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the machine type to set minimum kernel version" >&5 -$as_echo_n "checking the machine type to set minimum kernel version... " >&6; } -if ${libc_cv_ppc64_le+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - yes - #endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - arch_minimum_kernel=3.10.0 -else - libc_cv_ppc64_le=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ppc64_le" >&5 -$as_echo "$libc_cv_ppc64_le" >&6; } diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac b/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac deleted file mode 100644 index f9cba6e15d..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac +++ /dev/null @@ -1,36 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/powerpc/powerpc64/. - -LIBC_SLIBDIR_RTLDDIR([lib64], [lib64]) - -# Define default-abi according to compiler flags. -AC_CACHE_CHECK([whether the compiler is using the PowerPC64 ELFv2 ABI], - [libc_cv_ppc64_elfv2_abi], - [AC_EGREP_CPP(yes,[#if _CALL_ELF == 2 - yes - #endif - ], libc_cv_ppc64_elfv2_abi=yes, libc_cv_ppc64_elfv2_abi=no)]) -if test $libc_cv_ppc64_elfv2_abi = yes; then - LIBC_CONFIG_VAR([default-abi], [64-v2]) - # For shlib-versions. - AC_DEFINE(HAVE_ELFV2_ABI) -else - LIBC_CONFIG_VAR([default-abi], [64-v1]) - # Compiler that do not support ELFv2 ABI does not define _CALL_ELF - AC_CACHE_CHECK([whether the compiler defines _CALL_ELF], - [libc_cv_ppc64_def_call_elf], - [AC_EGREP_CPP(yes,[#ifdef _CALL_ELF - yes - #endif - ], libc_cv_ppc64_def_call_elf=yes, libc_cv_ppc64_def_call_elf=no)]) - if test $libc_cv_ppc64_def_call_elf = no; then - libc_extra_cppflags="$libc_extra_cppflags -D_CALL_ELF=1" - fi -fi -# Set minimum kernel version for ppc64le. -AC_CACHE_CHECK([the machine type to set minimum kernel version], - [libc_cv_ppc64_le], - [AC_EGREP_CPP(yes,[#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - yes - #endif - ], arch_minimum_kernel=3.10.0, libc_cv_ppc64_le=no)]) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/dl-cache.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/dl-cache.h deleted file mode 100644 index 44eb95c693..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/dl-cache.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define _DL_CACHE_DEFAULT_ID 0x503 - -#define _dl_cache_check_flags(flags) \ - ((flags) == _DL_CACHE_DEFAULT_ID) - -#include_next diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c deleted file mode 100644 index 85ae8a2752..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include /* Must come before . */ -#include -#include - -#include - - -#ifndef NO_CANCELLATION -int -__fcntl_nocancel (int fd, int cmd, ...) -{ - va_list ap; - void *arg; - - va_start (ap, cmd); - arg = va_arg (ap, void *); - va_end (ap); - - return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg); -} -#endif - - -int -__libc_fcntl (int fd, int cmd, ...) -{ - va_list ap; - void *arg; - - va_start (ap, cmd); - arg = va_arg (ap, void *); - va_end (ap); - - if (cmd >= F_GETLK64 && cmd <= F_SETLKW64) - cmd -= F_GETLK64 - F_GETLK; - - if (cmd != F_SETLKW) - return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg); - - return SYSCALL_CANCEL (fcntl, fd, cmd, arg); -} -libc_hidden_def (__libc_fcntl) - -weak_alias (__libc_fcntl, __fcntl) -libc_hidden_weak (__fcntl) -weak_alias (__libc_fcntl, fcntl) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_mask.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_mask.c deleted file mode 100644 index 494d4931af..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_mask.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Procedure definition for FE_MASK_ENV for Linux/ppc64. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -const fenv_t * -__fe_mask_env (void) -{ -#if defined PR_SET_FPEXC && defined PR_FP_EXC_DISABLED - INTERNAL_SYSCALL_DECL (err); - INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, PR_FP_EXC_DISABLED); -#else - __set_errno (ENOSYS); -#endif - return FE_DFL_ENV; -} diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_nomask.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_nomask.c deleted file mode 100644 index dc2252b936..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_nomask.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Procedure definition for FE_NOMASK_ENV for Linux/ppc64. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -const fenv_t * -__fe_nomask_env_priv (void) -{ -#if defined PR_SET_FPEXC && defined PR_FP_EXC_PRECISE - INTERNAL_SYSCALL_DECL (err); - INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, PR_FP_EXC_PRECISE); -#else - __set_errno (ENOSYS); -#endif - return FE_ENABLED_ENV; -} -#if SHLIB_COMPAT (libm, GLIBC_2_3, GLIBC_2_19) -compat_symbol (libm, __fe_nomask_env_priv, __fe_nomask_env, GLIBC_2_3); -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/getcontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/getcontext.S deleted file mode 100644 index 49e7a5f272..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/getcontext.S +++ /dev/null @@ -1,383 +0,0 @@ -/* Save current context. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define __ASSEMBLY__ -#include -#include -#include "ucontext_i.h" - - -#if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4) -ENTRY(__novec_getcontext) - CALL_MCOUNT 1 - std r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r3) - std r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r3) - mflr r0 - std r2,(SIGCONTEXT_GP_REGS+(PT_R2*8))(r3) - std r0,FRAME_LR_SAVE(r1) - cfi_offset (lr, FRAME_LR_SAVE) - std r0,(SIGCONTEXT_GP_REGS+(PT_LNK*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(PT_NIP*8))(r3) - stdu r1,-128(r1) - cfi_adjust_cfa_offset (128) - std r4,(SIGCONTEXT_GP_REGS+(PT_R4*8))(r3) - std r5,(SIGCONTEXT_GP_REGS+(PT_R5*8))(r3) - std r6,(SIGCONTEXT_GP_REGS+(PT_R6*8))(r3) - std r7,(SIGCONTEXT_GP_REGS+(PT_R7*8))(r3) - std r8,(SIGCONTEXT_GP_REGS+(PT_R8*8))(r3) - std r9,(SIGCONTEXT_GP_REGS+(PT_R9*8))(r3) - std r10,(SIGCONTEXT_GP_REGS+(PT_R10*8))(r3) - std r11,(SIGCONTEXT_GP_REGS+(PT_R11*8))(r3) - std r12,(SIGCONTEXT_GP_REGS+(PT_R12*8))(r3) - std r13,(SIGCONTEXT_GP_REGS+(PT_R13*8))(r3) - std r14,(SIGCONTEXT_GP_REGS+(PT_R14*8))(r3) - std r15,(SIGCONTEXT_GP_REGS+(PT_R15*8))(r3) - std r16,(SIGCONTEXT_GP_REGS+(PT_R16*8))(r3) - std r17,(SIGCONTEXT_GP_REGS+(PT_R17*8))(r3) - std r18,(SIGCONTEXT_GP_REGS+(PT_R18*8))(r3) - std r19,(SIGCONTEXT_GP_REGS+(PT_R19*8))(r3) - std r20,(SIGCONTEXT_GP_REGS+(PT_R20*8))(r3) - std r21,(SIGCONTEXT_GP_REGS+(PT_R21*8))(r3) - std r22,(SIGCONTEXT_GP_REGS+(PT_R22*8))(r3) - std r23,(SIGCONTEXT_GP_REGS+(PT_R23*8))(r3) - std r24,(SIGCONTEXT_GP_REGS+(PT_R24*8))(r3) - std r25,(SIGCONTEXT_GP_REGS+(PT_R25*8))(r3) - std r26,(SIGCONTEXT_GP_REGS+(PT_R26*8))(r3) - std r27,(SIGCONTEXT_GP_REGS+(PT_R27*8))(r3) - std r28,(SIGCONTEXT_GP_REGS+(PT_R28*8))(r3) - std r29,(SIGCONTEXT_GP_REGS+(PT_R29*8))(r3) - std r30,(SIGCONTEXT_GP_REGS+(PT_R30*8))(r3) - std r31,(SIGCONTEXT_GP_REGS+(PT_R31*8))(r3) - mfctr r0 - std r0,(SIGCONTEXT_GP_REGS+(PT_CTR*8))(r3) - mfxer r0 - std r0,(SIGCONTEXT_GP_REGS+(PT_XER*8))(r3) - mfcr r0 - std r0,(SIGCONTEXT_GP_REGS+(PT_CCR*8))(r3) - - /* Set the return value of swapcontext to "success". R3 is the only - register whose value is not preserved in the saved context. */ - li r0,0 - std r0,(SIGCONTEXT_GP_REGS+(PT_R3*8))(r3) - - /* Zero fill fields that can't be set in user state or are unused. */ - std r0,(SIGCONTEXT_GP_REGS+(PT_MSR*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(34*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(PT_SOFTE*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(40*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(41*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(42*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(PT_RESULT*8))(r3) - - /* Set the PT_REGS pointer to the address of sigcontext's gp_regs - field. Struct pt_regs and elf_gregset_t are the same thing. - We kept the regs field for backwards compatibility with - libraries built before we extended sigcontext. */ - addi r0,r3,SIGCONTEXT_GP_REGS - std r0,SIGCONTEXT_PT_REGS(r3) - - stfd fp0,(SIGCONTEXT_FP_REGS+(PT_R0*8))(r3) - stfd fp1,(SIGCONTEXT_FP_REGS+(PT_R1*8))(r3) - stfd fp2,(SIGCONTEXT_FP_REGS+(PT_R2*8))(r3) - stfd fp3,(SIGCONTEXT_FP_REGS+(PT_R3*8))(r3) - stfd fp4,(SIGCONTEXT_FP_REGS+(PT_R4*8))(r3) - stfd fp5,(SIGCONTEXT_FP_REGS+(PT_R5*8))(r3) - stfd fp6,(SIGCONTEXT_FP_REGS+(PT_R6*8))(r3) - stfd fp7,(SIGCONTEXT_FP_REGS+(PT_R7*8))(r3) - stfd fp8,(SIGCONTEXT_FP_REGS+(PT_R8*8))(r3) - stfd fp9,(SIGCONTEXT_FP_REGS+(PT_R9*8))(r3) - stfd fp10,(SIGCONTEXT_FP_REGS+(PT_R10*8))(r3) - stfd fp11,(SIGCONTEXT_FP_REGS+(PT_R11*8))(r3) - stfd fp12,(SIGCONTEXT_FP_REGS+(PT_R12*8))(r3) - stfd fp13,(SIGCONTEXT_FP_REGS+(PT_R13*8))(r3) - stfd fp14,(SIGCONTEXT_FP_REGS+(PT_R14*8))(r3) - stfd fp15,(SIGCONTEXT_FP_REGS+(PT_R15*8))(r3) - stfd fp16,(SIGCONTEXT_FP_REGS+(PT_R16*8))(r3) - stfd fp17,(SIGCONTEXT_FP_REGS+(PT_R17*8))(r3) - stfd fp18,(SIGCONTEXT_FP_REGS+(PT_R18*8))(r3) - stfd fp19,(SIGCONTEXT_FP_REGS+(PT_R19*8))(r3) - stfd fp20,(SIGCONTEXT_FP_REGS+(PT_R20*8))(r3) - stfd fp21,(SIGCONTEXT_FP_REGS+(PT_R21*8))(r3) - stfd fp22,(SIGCONTEXT_FP_REGS+(PT_R22*8))(r3) - stfd fp23,(SIGCONTEXT_FP_REGS+(PT_R23*8))(r3) - stfd fp24,(SIGCONTEXT_FP_REGS+(PT_R24*8))(r3) - stfd fp25,(SIGCONTEXT_FP_REGS+(PT_R25*8))(r3) - stfd fp26,(SIGCONTEXT_FP_REGS+(PT_R26*8))(r3) - stfd fp27,(SIGCONTEXT_FP_REGS+(PT_R27*8))(r3) - stfd fp28,(SIGCONTEXT_FP_REGS+(PT_R28*8))(r3) - stfd fp29,(SIGCONTEXT_FP_REGS+(PT_R29*8))(r3) - mffs fp0 - stfd fp30,(SIGCONTEXT_FP_REGS+(PT_R30*8))(r3) - stfd fp31,(SIGCONTEXT_FP_REGS+(PT_R31*8))(r3) - stfd fp0,(SIGCONTEXT_FP_REGS+(32*8))(r3) - - addi r5,r3,UCONTEXT_SIGMASK - li r4,0 - li r3,SIG_BLOCK - bl JUMPTARGET(__sigprocmask) - nop - - ld r0,128+FRAME_LR_SAVE(r1) - addi r1,r1,128 - mtlr r0 - blr -PSEUDO_END(__novec_getcontext) - -compat_symbol (libc, __novec_getcontext, getcontext, GLIBC_2_3) - -#endif - - .section ".toc","aw" -.LC__dl_hwcap: -#ifdef SHARED - .tc _rtld_global_ro[TC],_rtld_global_ro -#else - .tc _dl_hwcap[TC],_dl_hwcap -#endif - .section ".text" - - .machine "altivec" -ENTRY(__getcontext) - CALL_MCOUNT 1 - std r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r3) - std r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r3) - mflr r0 - std r2,(SIGCONTEXT_GP_REGS+(PT_R2*8))(r3) - std r0,FRAME_LR_SAVE(r1) - cfi_offset (lr, FRAME_LR_SAVE) - std r0,(SIGCONTEXT_GP_REGS+(PT_LNK*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(PT_NIP*8))(r3) - stdu r1,-128(r1) - cfi_adjust_cfa_offset (128) - std r4,(SIGCONTEXT_GP_REGS+(PT_R4*8))(r3) - std r5,(SIGCONTEXT_GP_REGS+(PT_R5*8))(r3) - std r6,(SIGCONTEXT_GP_REGS+(PT_R6*8))(r3) - std r7,(SIGCONTEXT_GP_REGS+(PT_R7*8))(r3) - std r8,(SIGCONTEXT_GP_REGS+(PT_R8*8))(r3) - std r9,(SIGCONTEXT_GP_REGS+(PT_R9*8))(r3) - std r10,(SIGCONTEXT_GP_REGS+(PT_R10*8))(r3) - std r11,(SIGCONTEXT_GP_REGS+(PT_R11*8))(r3) - std r12,(SIGCONTEXT_GP_REGS+(PT_R12*8))(r3) - std r13,(SIGCONTEXT_GP_REGS+(PT_R13*8))(r3) - std r14,(SIGCONTEXT_GP_REGS+(PT_R14*8))(r3) - std r15,(SIGCONTEXT_GP_REGS+(PT_R15*8))(r3) - std r16,(SIGCONTEXT_GP_REGS+(PT_R16*8))(r3) - std r17,(SIGCONTEXT_GP_REGS+(PT_R17*8))(r3) - std r18,(SIGCONTEXT_GP_REGS+(PT_R18*8))(r3) - std r19,(SIGCONTEXT_GP_REGS+(PT_R19*8))(r3) - std r20,(SIGCONTEXT_GP_REGS+(PT_R20*8))(r3) - std r21,(SIGCONTEXT_GP_REGS+(PT_R21*8))(r3) - std r22,(SIGCONTEXT_GP_REGS+(PT_R22*8))(r3) - std r23,(SIGCONTEXT_GP_REGS+(PT_R23*8))(r3) - std r24,(SIGCONTEXT_GP_REGS+(PT_R24*8))(r3) - std r25,(SIGCONTEXT_GP_REGS+(PT_R25*8))(r3) - std r26,(SIGCONTEXT_GP_REGS+(PT_R26*8))(r3) - std r27,(SIGCONTEXT_GP_REGS+(PT_R27*8))(r3) - std r28,(SIGCONTEXT_GP_REGS+(PT_R28*8))(r3) - std r29,(SIGCONTEXT_GP_REGS+(PT_R29*8))(r3) - std r30,(SIGCONTEXT_GP_REGS+(PT_R30*8))(r3) - std r31,(SIGCONTEXT_GP_REGS+(PT_R31*8))(r3) - mfctr r0 - std r0,(SIGCONTEXT_GP_REGS+(PT_CTR*8))(r3) - mfxer r0 - std r0,(SIGCONTEXT_GP_REGS+(PT_XER*8))(r3) - mfcr r0 - std r0,(SIGCONTEXT_GP_REGS+(PT_CCR*8))(r3) - - /* Set the return value of swapcontext to "success". R3 is the only - register whose value is not preserved in the saved context. */ - li r0,0 - std r0,(SIGCONTEXT_GP_REGS+(PT_R3*8))(r3) - - /* Zero fill fields that can't be set in user state or are unused. */ - std r0,(SIGCONTEXT_GP_REGS+(PT_MSR*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(34*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(PT_SOFTE*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(40*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(41*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(42*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(PT_RESULT*8))(r3) - - /* Set the PT_REGS pointer to the address of sigcontext's gp_regs - field. Struct pt_regs and elf_gregset_t are the same thing. - We kept the regs field for backwards compatibility with - libraries built before we extended sigcontext. */ - addi r0,r3,SIGCONTEXT_GP_REGS - std r0,SIGCONTEXT_PT_REGS(r3) - - stfd fp0,(SIGCONTEXT_FP_REGS+(PT_R0*8))(r3) - stfd fp1,(SIGCONTEXT_FP_REGS+(PT_R1*8))(r3) - stfd fp2,(SIGCONTEXT_FP_REGS+(PT_R2*8))(r3) - stfd fp3,(SIGCONTEXT_FP_REGS+(PT_R3*8))(r3) - stfd fp4,(SIGCONTEXT_FP_REGS+(PT_R4*8))(r3) - stfd fp5,(SIGCONTEXT_FP_REGS+(PT_R5*8))(r3) - stfd fp6,(SIGCONTEXT_FP_REGS+(PT_R6*8))(r3) - stfd fp7,(SIGCONTEXT_FP_REGS+(PT_R7*8))(r3) - stfd fp8,(SIGCONTEXT_FP_REGS+(PT_R8*8))(r3) - stfd fp9,(SIGCONTEXT_FP_REGS+(PT_R9*8))(r3) - stfd fp10,(SIGCONTEXT_FP_REGS+(PT_R10*8))(r3) - stfd fp11,(SIGCONTEXT_FP_REGS+(PT_R11*8))(r3) - stfd fp12,(SIGCONTEXT_FP_REGS+(PT_R12*8))(r3) - stfd fp13,(SIGCONTEXT_FP_REGS+(PT_R13*8))(r3) - stfd fp14,(SIGCONTEXT_FP_REGS+(PT_R14*8))(r3) - stfd fp15,(SIGCONTEXT_FP_REGS+(PT_R15*8))(r3) - stfd fp16,(SIGCONTEXT_FP_REGS+(PT_R16*8))(r3) - stfd fp17,(SIGCONTEXT_FP_REGS+(PT_R17*8))(r3) - stfd fp18,(SIGCONTEXT_FP_REGS+(PT_R18*8))(r3) - stfd fp19,(SIGCONTEXT_FP_REGS+(PT_R19*8))(r3) - stfd fp20,(SIGCONTEXT_FP_REGS+(PT_R20*8))(r3) - stfd fp21,(SIGCONTEXT_FP_REGS+(PT_R21*8))(r3) - stfd fp22,(SIGCONTEXT_FP_REGS+(PT_R22*8))(r3) - stfd fp23,(SIGCONTEXT_FP_REGS+(PT_R23*8))(r3) - stfd fp24,(SIGCONTEXT_FP_REGS+(PT_R24*8))(r3) - stfd fp25,(SIGCONTEXT_FP_REGS+(PT_R25*8))(r3) - stfd fp26,(SIGCONTEXT_FP_REGS+(PT_R26*8))(r3) - stfd fp27,(SIGCONTEXT_FP_REGS+(PT_R27*8))(r3) - stfd fp28,(SIGCONTEXT_FP_REGS+(PT_R28*8))(r3) - stfd fp29,(SIGCONTEXT_FP_REGS+(PT_R29*8))(r3) - mffs fp0 - stfd fp30,(SIGCONTEXT_FP_REGS+(PT_R30*8))(r3) - stfd fp31,(SIGCONTEXT_FP_REGS+(PT_R31*8))(r3) - stfd fp0,(SIGCONTEXT_FP_REGS+(32*8))(r3) - - ld r5,.LC__dl_hwcap@toc(r2) -# ifdef SHARED -/* Load _rtld-global._dl_hwcap. */ - ld r5,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET(r5) -# else - ld r5,0(r5) /* Load extern _dl_hwcap. */ -# endif - la r10,(SIGCONTEXT_V_RESERVE+8)(r3) - la r9,(SIGCONTEXT_V_RESERVE+24)(r3) - - andis. r5,r5,(PPC_FEATURE_HAS_ALTIVEC >> 16) - - clrrdi r10,r10,4 - beq L(has_no_vec) - clrrdi r9,r9,4 - mr r5,r10 /* Capture *v_regs value in r5. */ - - stvx v0,0,r10 - stvx v1,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v2,0,r10 - stvx v3,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v4,0,r10 - stvx v5,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v6,0,r10 - stvx v7,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v8,0,r10 - stvx v9,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v10,0,r10 - stvx v11,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v12,0,r10 - stvx v13,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v14,0,r10 - stvx v15,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v16,0,r10 - stvx v17,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v18,0,r10 - stvx v19,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v20,0,r10 - stvx v21,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v22,0,r10 - stvx v23,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v24,0,r10 - stvx v25,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v26,0,r10 - stvx v27,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v28,0,r10 - stvx v29,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v30,0,r10 - stvx v31,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - mfvscr v0 - mfspr r0,VRSAVE - stvx v0,0,r10 - stw r0,0(9) - -L(has_no_vec): -/* - Store either a NULL or a quadword aligned pointer to the Vector register - array into *v_regs. -*/ - std r5,(SIGCONTEXT_V_REGS_PTR)(r3) - - addi r5,r3,UCONTEXT_SIGMASK - li r4,0 - li r3,SIG_BLOCK - bl JUMPTARGET(__sigprocmask) - nop - - ld r0,128+FRAME_LR_SAVE(r1) - addi r1,r1,128 - mtlr r0 - blr -PSEUDO_END(__getcontext) - -versioned_symbol (libc, __getcontext, getcontext, GLIBC_2_3_4) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/kernel_stat.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/kernel_stat.h deleted file mode 100644 index df9798b72e..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/kernel_stat.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Definition of `struct stat' used in the kernel. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define STAT_IS_KERNEL_STAT 1 -#define XSTAT_IS_XSTAT64 1 -#define STATFS_IS_STATFS64 0 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/ld-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/ld-le.abilist deleted file mode 100644 index ef6159baa8..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/ld-le.abilist +++ /dev/null @@ -1,13 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 __libc_stack_end D 0x8 -GLIBC_2.17 __tls_get_addr F -GLIBC_2.17 _dl_mcount F -GLIBC_2.17 _r_debug D 0x28 -GLIBC_2.17 calloc F -GLIBC_2.17 free F -GLIBC_2.17 malloc F -GLIBC_2.17 realloc F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 __tls_get_addr_opt F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __parse_hwcap_and_convert_at_platform F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/ld.abilist deleted file mode 100644 index 2c3b74cc20..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/ld.abilist +++ /dev/null @@ -1,14 +0,0 @@ -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 __tls_get_addr_opt F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __parse_hwcap_and_convert_at_platform F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __libc_stack_end D 0x8 -GLIBC_2.3 __tls_get_addr F -GLIBC_2.3 _dl_mcount F -GLIBC_2.3 _r_debug D 0x28 -GLIBC_2.3 calloc F -GLIBC_2.3 free F -GLIBC_2.3 malloc F -GLIBC_2.3 realloc F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h deleted file mode 100644 index 4d7d076410..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h +++ /dev/null @@ -1,80 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LDSODEFS_H - -/* Get the real definitions. */ -#include_next - -/* Now define our stuff. */ - -#if _CALL_ELF != 2 - -static __always_inline bool -_dl_ppc64_is_opd_sym (const struct link_map *l, const ElfW(Sym) *sym) -{ - return (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC - && l->l_addr + sym->st_value >= (ElfW(Addr)) l->l_ld - && l->l_addr + sym->st_value < l->l_map_end - && sym->st_size != 0); -} - -static __always_inline bool -_dl_ppc64_addr_sym_match (const struct link_map *l, const ElfW(Sym) *sym, - const ElfW(Sym) *matchsym, ElfW(Addr) addr) -{ - ElfW(Addr) value = l->l_addr + sym->st_value; - if (_dl_ppc64_is_opd_sym (l, sym)) - { - if (addr < value || addr >= value + 24) - { - value = *(ElfW(Addr) *) value; - if (addr < value || addr >= value + sym->st_size) - return false; - } - } - else if (sym->st_shndx == SHN_UNDEF || sym->st_size == 0) - { - if (addr != value) - return false; - } - else if (addr < value || addr >= value + sym->st_size) - return false; - - if (matchsym == NULL) - return true; - - ElfW(Addr) matchvalue = l->l_addr + matchsym->st_value; - if (_dl_ppc64_is_opd_sym (l, matchsym) - && (addr < matchvalue || addr > matchvalue + 24)) - matchvalue = *(ElfW(Addr) *) matchvalue; - - return matchvalue < value; -} - -/* If this is a function symbol defined past the end of our dynamic - section, then it must be a function descriptor. Allow these symbols - to match their associated function code range as well as the - descriptor addresses. */ -#undef DL_ADDR_SYM_MATCH -#define DL_ADDR_SYM_MATCH(L, SYM, MATCHSYM, ADDR) \ - _dl_ppc64_addr_sym_match (L, SYM, MATCHSYM, ADDR) - -#endif - -#endif /* ldsodefs.h */ diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libBrokenLocale-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libBrokenLocale-le.abilist deleted file mode 100644 index 5e54974368..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libBrokenLocale-le.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libBrokenLocale.abilist deleted file mode 100644 index 40f6e08b75..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libanl-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libanl-le.abilist deleted file mode 100644 index 21330fc8d5..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libanl-le.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 gai_cancel F -GLIBC_2.17 gai_error F -GLIBC_2.17 gai_suspend F -GLIBC_2.17 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libanl.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libanl.abilist deleted file mode 100644 index 9036592d30..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 gai_cancel F -GLIBC_2.3 gai_error F -GLIBC_2.3 gai_suspend F -GLIBC_2.3 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist deleted file mode 100644 index 443d89f663..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist +++ /dev/null @@ -1,2193 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 _Exit F -GLIBC_2.17 _IO_2_1_stderr_ D 0xe0 -GLIBC_2.17 _IO_2_1_stdin_ D 0xe0 -GLIBC_2.17 _IO_2_1_stdout_ D 0xe0 -GLIBC_2.17 _IO_adjust_column F -GLIBC_2.17 _IO_adjust_wcolumn F -GLIBC_2.17 _IO_default_doallocate F -GLIBC_2.17 _IO_default_finish F -GLIBC_2.17 _IO_default_pbackfail F -GLIBC_2.17 _IO_default_uflow F -GLIBC_2.17 _IO_default_xsgetn F -GLIBC_2.17 _IO_default_xsputn F -GLIBC_2.17 _IO_do_write F -GLIBC_2.17 _IO_doallocbuf F -GLIBC_2.17 _IO_fclose F -GLIBC_2.17 _IO_fdopen F -GLIBC_2.17 _IO_feof F -GLIBC_2.17 _IO_ferror F -GLIBC_2.17 _IO_fflush F -GLIBC_2.17 _IO_fgetpos F -GLIBC_2.17 _IO_fgetpos64 F -GLIBC_2.17 _IO_fgets F -GLIBC_2.17 _IO_file_attach F -GLIBC_2.17 _IO_file_close F -GLIBC_2.17 _IO_file_close_it F -GLIBC_2.17 _IO_file_doallocate F -GLIBC_2.17 _IO_file_finish F -GLIBC_2.17 _IO_file_fopen F -GLIBC_2.17 _IO_file_init F -GLIBC_2.17 _IO_file_jumps D 0xa8 -GLIBC_2.17 _IO_file_open F -GLIBC_2.17 _IO_file_overflow F -GLIBC_2.17 _IO_file_read F -GLIBC_2.17 _IO_file_seek F -GLIBC_2.17 _IO_file_seekoff F -GLIBC_2.17 _IO_file_setbuf F -GLIBC_2.17 _IO_file_stat F -GLIBC_2.17 _IO_file_sync F -GLIBC_2.17 _IO_file_underflow F -GLIBC_2.17 _IO_file_write F -GLIBC_2.17 _IO_file_xsputn F -GLIBC_2.17 _IO_flockfile F -GLIBC_2.17 _IO_flush_all F -GLIBC_2.17 _IO_flush_all_linebuffered F -GLIBC_2.17 _IO_fopen F -GLIBC_2.17 _IO_fprintf F -GLIBC_2.17 _IO_fputs F -GLIBC_2.17 _IO_fread F -GLIBC_2.17 _IO_free_backup_area F -GLIBC_2.17 _IO_free_wbackup_area F -GLIBC_2.17 _IO_fsetpos F -GLIBC_2.17 _IO_fsetpos64 F -GLIBC_2.17 _IO_ftell F -GLIBC_2.17 _IO_ftrylockfile F -GLIBC_2.17 _IO_funlockfile F -GLIBC_2.17 _IO_fwrite F -GLIBC_2.17 _IO_getc F -GLIBC_2.17 _IO_getline F -GLIBC_2.17 _IO_getline_info F -GLIBC_2.17 _IO_gets F -GLIBC_2.17 _IO_init F -GLIBC_2.17 _IO_init_marker F -GLIBC_2.17 _IO_init_wmarker F -GLIBC_2.17 _IO_iter_begin F -GLIBC_2.17 _IO_iter_end F -GLIBC_2.17 _IO_iter_file F -GLIBC_2.17 _IO_iter_next F -GLIBC_2.17 _IO_least_wmarker F -GLIBC_2.17 _IO_link_in F -GLIBC_2.17 _IO_list_all D 0x8 -GLIBC_2.17 _IO_list_lock F -GLIBC_2.17 _IO_list_resetlock F -GLIBC_2.17 _IO_list_unlock F -GLIBC_2.17 _IO_marker_delta F -GLIBC_2.17 _IO_marker_difference F -GLIBC_2.17 _IO_padn F -GLIBC_2.17 _IO_peekc_locked F -GLIBC_2.17 _IO_popen F -GLIBC_2.17 _IO_printf F -GLIBC_2.17 _IO_proc_close F -GLIBC_2.17 _IO_proc_open F -GLIBC_2.17 _IO_putc F -GLIBC_2.17 _IO_puts F -GLIBC_2.17 _IO_remove_marker F -GLIBC_2.17 _IO_seekmark F -GLIBC_2.17 _IO_seekoff F -GLIBC_2.17 _IO_seekpos F -GLIBC_2.17 _IO_seekwmark F -GLIBC_2.17 _IO_setb F -GLIBC_2.17 _IO_setbuffer F -GLIBC_2.17 _IO_setvbuf F -GLIBC_2.17 _IO_sgetn F -GLIBC_2.17 _IO_sprintf F -GLIBC_2.17 _IO_sputbackc F -GLIBC_2.17 _IO_sputbackwc F -GLIBC_2.17 _IO_sscanf F -GLIBC_2.17 _IO_str_init_readonly F -GLIBC_2.17 _IO_str_init_static F -GLIBC_2.17 _IO_str_overflow F -GLIBC_2.17 _IO_str_pbackfail F -GLIBC_2.17 _IO_str_seekoff F -GLIBC_2.17 _IO_str_underflow F -GLIBC_2.17 _IO_sungetc F -GLIBC_2.17 _IO_sungetwc F -GLIBC_2.17 _IO_switch_to_get_mode F -GLIBC_2.17 _IO_switch_to_main_wget_area F -GLIBC_2.17 _IO_switch_to_wbackup_area F -GLIBC_2.17 _IO_switch_to_wget_mode F -GLIBC_2.17 _IO_un_link F -GLIBC_2.17 _IO_ungetc F -GLIBC_2.17 _IO_unsave_markers F -GLIBC_2.17 _IO_unsave_wmarkers F -GLIBC_2.17 _IO_vfprintf F -GLIBC_2.17 _IO_vfscanf F -GLIBC_2.17 _IO_vsprintf F -GLIBC_2.17 _IO_wdefault_doallocate F -GLIBC_2.17 _IO_wdefault_finish F -GLIBC_2.17 _IO_wdefault_pbackfail F -GLIBC_2.17 _IO_wdefault_uflow F -GLIBC_2.17 _IO_wdefault_xsgetn F -GLIBC_2.17 _IO_wdefault_xsputn F -GLIBC_2.17 _IO_wdo_write F -GLIBC_2.17 _IO_wdoallocbuf F -GLIBC_2.17 _IO_wfile_jumps D 0xa8 -GLIBC_2.17 _IO_wfile_overflow F -GLIBC_2.17 _IO_wfile_seekoff F -GLIBC_2.17 _IO_wfile_sync F -GLIBC_2.17 _IO_wfile_underflow F -GLIBC_2.17 _IO_wfile_xsputn F -GLIBC_2.17 _IO_wmarker_delta F -GLIBC_2.17 _IO_wsetb F -GLIBC_2.17 __adjtimex F -GLIBC_2.17 __after_morecore_hook D 0x8 -GLIBC_2.17 __argz_count F -GLIBC_2.17 __argz_next F -GLIBC_2.17 __argz_stringify F -GLIBC_2.17 __asprintf F -GLIBC_2.17 __asprintf_chk F -GLIBC_2.17 __assert F -GLIBC_2.17 __assert_fail F -GLIBC_2.17 __assert_perror_fail F -GLIBC_2.17 __backtrace F -GLIBC_2.17 __backtrace_symbols F -GLIBC_2.17 __backtrace_symbols_fd F -GLIBC_2.17 __bsd_getpgrp F -GLIBC_2.17 __bzero F -GLIBC_2.17 __check_rhosts_file D 0x4 -GLIBC_2.17 __chk_fail F -GLIBC_2.17 __clone F -GLIBC_2.17 __close F -GLIBC_2.17 __cmsg_nxthdr F -GLIBC_2.17 __confstr_chk F -GLIBC_2.17 __connect F -GLIBC_2.17 __ctype_b_loc F -GLIBC_2.17 __ctype_get_mb_cur_max F -GLIBC_2.17 __ctype_tolower_loc F -GLIBC_2.17 __ctype_toupper_loc F -GLIBC_2.17 __curbrk D 0x8 -GLIBC_2.17 __cxa_at_quick_exit F -GLIBC_2.17 __cxa_atexit F -GLIBC_2.17 __cxa_finalize F -GLIBC_2.17 __cyg_profile_func_enter F -GLIBC_2.17 __cyg_profile_func_exit F -GLIBC_2.17 __daylight D 0x4 -GLIBC_2.17 __dcgettext F -GLIBC_2.17 __default_morecore F -GLIBC_2.17 __dgettext F -GLIBC_2.17 __dprintf_chk F -GLIBC_2.17 __dup2 F -GLIBC_2.17 __duplocale F -GLIBC_2.17 __endmntent F -GLIBC_2.17 __environ D 0x8 -GLIBC_2.17 __errno_location F -GLIBC_2.17 __fbufsize F -GLIBC_2.17 __fcntl F -GLIBC_2.17 __fdelt_chk F -GLIBC_2.17 __fdelt_warn F -GLIBC_2.17 __ffs F -GLIBC_2.17 __fgets_chk F -GLIBC_2.17 __fgets_unlocked_chk F -GLIBC_2.17 __fgetws_chk F -GLIBC_2.17 __fgetws_unlocked_chk F -GLIBC_2.17 __finite F -GLIBC_2.17 __finitef F -GLIBC_2.17 __finitel F -GLIBC_2.17 __flbf F -GLIBC_2.17 __fork F -GLIBC_2.17 __fpending F -GLIBC_2.17 __fprintf_chk F -GLIBC_2.17 __fpu_control D 0x4 -GLIBC_2.17 __fpurge F -GLIBC_2.17 __fread_chk F -GLIBC_2.17 __fread_unlocked_chk F -GLIBC_2.17 __freadable F -GLIBC_2.17 __freading F -GLIBC_2.17 __free_hook D 0x8 -GLIBC_2.17 __freelocale F -GLIBC_2.17 __fsetlocking F -GLIBC_2.17 __fwprintf_chk F -GLIBC_2.17 __fwritable F -GLIBC_2.17 __fwriting F -GLIBC_2.17 __fxstat F -GLIBC_2.17 __fxstat64 F -GLIBC_2.17 __fxstatat F -GLIBC_2.17 __fxstatat64 F -GLIBC_2.17 __getauxval F -GLIBC_2.17 __getcwd_chk F -GLIBC_2.17 __getdelim F -GLIBC_2.17 __getdomainname_chk F -GLIBC_2.17 __getgroups_chk F -GLIBC_2.17 __gethostname_chk F -GLIBC_2.17 __getlogin_r_chk F -GLIBC_2.17 __getmntent_r F -GLIBC_2.17 __getpagesize F -GLIBC_2.17 __getpgid F -GLIBC_2.17 __getpid F -GLIBC_2.17 __gets_chk F -GLIBC_2.17 __gettimeofday F -GLIBC_2.17 __getwd_chk F -GLIBC_2.17 __gmtime_r F -GLIBC_2.17 __h_errno_location F -GLIBC_2.17 __isalnum_l F -GLIBC_2.17 __isalpha_l F -GLIBC_2.17 __isascii_l F -GLIBC_2.17 __isblank_l F -GLIBC_2.17 __iscntrl_l F -GLIBC_2.17 __isctype F -GLIBC_2.17 __isdigit_l F -GLIBC_2.17 __isgraph_l F -GLIBC_2.17 __isinf F -GLIBC_2.17 __isinff F -GLIBC_2.17 __isinfl F -GLIBC_2.17 __islower_l F -GLIBC_2.17 __isnan F -GLIBC_2.17 __isnanf F -GLIBC_2.17 __isnanl F -GLIBC_2.17 __isoc99_fscanf F -GLIBC_2.17 __isoc99_fwscanf F -GLIBC_2.17 __isoc99_scanf F -GLIBC_2.17 __isoc99_sscanf F -GLIBC_2.17 __isoc99_swscanf F -GLIBC_2.17 __isoc99_vfscanf F -GLIBC_2.17 __isoc99_vfwscanf F -GLIBC_2.17 __isoc99_vscanf F -GLIBC_2.17 __isoc99_vsscanf F -GLIBC_2.17 __isoc99_vswscanf F -GLIBC_2.17 __isoc99_vwscanf F -GLIBC_2.17 __isoc99_wscanf F -GLIBC_2.17 __isprint_l F -GLIBC_2.17 __ispunct_l F -GLIBC_2.17 __isspace_l F -GLIBC_2.17 __isupper_l F -GLIBC_2.17 __iswalnum_l F -GLIBC_2.17 __iswalpha_l F -GLIBC_2.17 __iswblank_l F -GLIBC_2.17 __iswcntrl_l F -GLIBC_2.17 __iswctype F -GLIBC_2.17 __iswctype_l F -GLIBC_2.17 __iswdigit_l F -GLIBC_2.17 __iswgraph_l F -GLIBC_2.17 __iswlower_l F -GLIBC_2.17 __iswprint_l F -GLIBC_2.17 __iswpunct_l F -GLIBC_2.17 __iswspace_l F -GLIBC_2.17 __iswupper_l F -GLIBC_2.17 __iswxdigit_l F -GLIBC_2.17 __isxdigit_l F -GLIBC_2.17 __ivaliduser F -GLIBC_2.17 __key_decryptsession_pk_LOCAL D 0x8 -GLIBC_2.17 __key_encryptsession_pk_LOCAL D 0x8 -GLIBC_2.17 __key_gendes_LOCAL D 0x8 -GLIBC_2.17 __libc_allocate_rtsig F -GLIBC_2.17 __libc_calloc F -GLIBC_2.17 __libc_current_sigrtmax F -GLIBC_2.17 __libc_current_sigrtmin F -GLIBC_2.17 __libc_free F -GLIBC_2.17 __libc_freeres F -GLIBC_2.17 __libc_init_first F -GLIBC_2.17 __libc_mallinfo F -GLIBC_2.17 __libc_malloc F -GLIBC_2.17 __libc_mallopt F -GLIBC_2.17 __libc_memalign F -GLIBC_2.17 __libc_pvalloc F -GLIBC_2.17 __libc_realloc F -GLIBC_2.17 __libc_sa_len F -GLIBC_2.17 __libc_start_main F -GLIBC_2.17 __libc_valloc F -GLIBC_2.17 __longjmp_chk F -GLIBC_2.17 __lseek F -GLIBC_2.17 __lxstat F -GLIBC_2.17 __lxstat64 F -GLIBC_2.17 __malloc_hook D 0x8 -GLIBC_2.17 __malloc_initialize_hook D 0x8 -GLIBC_2.17 __mbrlen F -GLIBC_2.17 __mbrtowc F -GLIBC_2.17 __mbsnrtowcs_chk F -GLIBC_2.17 __mbsrtowcs_chk F -GLIBC_2.17 __mbstowcs_chk F -GLIBC_2.17 __memalign_hook D 0x8 -GLIBC_2.17 __memcpy_chk F -GLIBC_2.17 __memmove_chk F -GLIBC_2.17 __mempcpy F -GLIBC_2.17 __mempcpy_chk F -GLIBC_2.17 __mempcpy_small F -GLIBC_2.17 __memset_chk F -GLIBC_2.17 __monstartup F -GLIBC_2.17 __morecore D 0x8 -GLIBC_2.17 __nanosleep F -GLIBC_2.17 __newlocale F -GLIBC_2.17 __nl_langinfo_l F -GLIBC_2.17 __nldbl__IO_fprintf F -GLIBC_2.17 __nldbl__IO_printf F -GLIBC_2.17 __nldbl__IO_sprintf F -GLIBC_2.17 __nldbl__IO_sscanf F -GLIBC_2.17 __nldbl__IO_vfprintf F -GLIBC_2.17 __nldbl__IO_vfscanf F -GLIBC_2.17 __nldbl__IO_vsprintf F -GLIBC_2.17 __nldbl___asprintf F -GLIBC_2.17 __nldbl___asprintf_chk F -GLIBC_2.17 __nldbl___dprintf_chk F -GLIBC_2.17 __nldbl___fprintf_chk F -GLIBC_2.17 __nldbl___fwprintf_chk F -GLIBC_2.17 __nldbl___isoc99_fscanf F -GLIBC_2.17 __nldbl___isoc99_fwscanf F -GLIBC_2.17 __nldbl___isoc99_scanf F -GLIBC_2.17 __nldbl___isoc99_sscanf F -GLIBC_2.17 __nldbl___isoc99_swscanf F -GLIBC_2.17 __nldbl___isoc99_vfscanf F -GLIBC_2.17 __nldbl___isoc99_vfwscanf F -GLIBC_2.17 __nldbl___isoc99_vscanf F -GLIBC_2.17 __nldbl___isoc99_vsscanf F -GLIBC_2.17 __nldbl___isoc99_vswscanf F -GLIBC_2.17 __nldbl___isoc99_vwscanf F -GLIBC_2.17 __nldbl___isoc99_wscanf F -GLIBC_2.17 __nldbl___obstack_printf_chk F -GLIBC_2.17 __nldbl___obstack_vprintf_chk F -GLIBC_2.17 __nldbl___printf_chk F -GLIBC_2.17 __nldbl___printf_fp F -GLIBC_2.17 __nldbl___snprintf_chk F -GLIBC_2.17 __nldbl___sprintf_chk F -GLIBC_2.17 __nldbl___strfmon_l F -GLIBC_2.17 __nldbl___swprintf_chk F -GLIBC_2.17 __nldbl___syslog_chk F -GLIBC_2.17 __nldbl___vasprintf_chk F -GLIBC_2.17 __nldbl___vdprintf_chk F -GLIBC_2.17 __nldbl___vfprintf_chk F -GLIBC_2.17 __nldbl___vfscanf F -GLIBC_2.17 __nldbl___vfwprintf_chk F -GLIBC_2.17 __nldbl___vprintf_chk F -GLIBC_2.17 __nldbl___vsnprintf F -GLIBC_2.17 __nldbl___vsnprintf_chk F -GLIBC_2.17 __nldbl___vsprintf_chk F -GLIBC_2.17 __nldbl___vsscanf F -GLIBC_2.17 __nldbl___vstrfmon F -GLIBC_2.17 __nldbl___vstrfmon_l F -GLIBC_2.17 __nldbl___vswprintf_chk F -GLIBC_2.17 __nldbl___vsyslog_chk F -GLIBC_2.17 __nldbl___vwprintf_chk F -GLIBC_2.17 __nldbl___wprintf_chk F -GLIBC_2.17 __nldbl_asprintf F -GLIBC_2.17 __nldbl_dprintf F -GLIBC_2.17 __nldbl_fprintf F -GLIBC_2.17 __nldbl_fscanf F -GLIBC_2.17 __nldbl_fwprintf F -GLIBC_2.17 __nldbl_fwscanf F -GLIBC_2.17 __nldbl_obstack_printf F -GLIBC_2.17 __nldbl_obstack_vprintf F -GLIBC_2.17 __nldbl_printf F -GLIBC_2.17 __nldbl_printf_size F -GLIBC_2.17 __nldbl_scanf F -GLIBC_2.17 __nldbl_snprintf F -GLIBC_2.17 __nldbl_sprintf F -GLIBC_2.17 __nldbl_sscanf F -GLIBC_2.17 __nldbl_strfmon F -GLIBC_2.17 __nldbl_strfmon_l F -GLIBC_2.17 __nldbl_swprintf F -GLIBC_2.17 __nldbl_swscanf F -GLIBC_2.17 __nldbl_syslog F -GLIBC_2.17 __nldbl_vasprintf F -GLIBC_2.17 __nldbl_vdprintf F -GLIBC_2.17 __nldbl_vfprintf F -GLIBC_2.17 __nldbl_vfscanf F -GLIBC_2.17 __nldbl_vfwprintf F -GLIBC_2.17 __nldbl_vfwscanf F -GLIBC_2.17 __nldbl_vprintf F -GLIBC_2.17 __nldbl_vscanf F -GLIBC_2.17 __nldbl_vsnprintf F -GLIBC_2.17 __nldbl_vsprintf F -GLIBC_2.17 __nldbl_vsscanf F -GLIBC_2.17 __nldbl_vswprintf F -GLIBC_2.17 __nldbl_vswscanf F -GLIBC_2.17 __nldbl_vsyslog F -GLIBC_2.17 __nldbl_vwprintf F -GLIBC_2.17 __nldbl_vwscanf F -GLIBC_2.17 __nldbl_wprintf F -GLIBC_2.17 __nldbl_wscanf F -GLIBC_2.17 __nss_configure_lookup F -GLIBC_2.17 __nss_database_lookup F -GLIBC_2.17 __nss_group_lookup F -GLIBC_2.17 __nss_hostname_digits_dots F -GLIBC_2.17 __nss_hosts_lookup F -GLIBC_2.17 __nss_next F -GLIBC_2.17 __nss_passwd_lookup F -GLIBC_2.17 __obstack_printf_chk F -GLIBC_2.17 __obstack_vprintf_chk F -GLIBC_2.17 __open F -GLIBC_2.17 __open64 F -GLIBC_2.17 __open64_2 F -GLIBC_2.17 __open_2 F -GLIBC_2.17 __openat64_2 F -GLIBC_2.17 __openat_2 F -GLIBC_2.17 __overflow F -GLIBC_2.17 __pipe F -GLIBC_2.17 __poll F -GLIBC_2.17 __poll_chk F -GLIBC_2.17 __posix_getopt F -GLIBC_2.17 __ppc_get_timebase_freq F -GLIBC_2.17 __ppoll_chk F -GLIBC_2.17 __pread64 F -GLIBC_2.17 __pread64_chk F -GLIBC_2.17 __pread_chk F -GLIBC_2.17 __printf_chk F -GLIBC_2.17 __printf_fp F -GLIBC_2.17 __profile_frequency F -GLIBC_2.17 __progname D 0x8 -GLIBC_2.17 __progname_full D 0x8 -GLIBC_2.17 __ptsname_r_chk F -GLIBC_2.17 __pwrite64 F -GLIBC_2.17 __rawmemchr F -GLIBC_2.17 __rcmd_errstr D 0x8 -GLIBC_2.17 __read F -GLIBC_2.17 __read_chk F -GLIBC_2.17 __readlink_chk F -GLIBC_2.17 __readlinkat_chk F -GLIBC_2.17 __realloc_hook D 0x8 -GLIBC_2.17 __realpath_chk F -GLIBC_2.17 __recv_chk F -GLIBC_2.17 __recvfrom_chk F -GLIBC_2.17 __register_atfork F -GLIBC_2.17 __res_init F -GLIBC_2.17 __res_nclose F -GLIBC_2.17 __res_ninit F -GLIBC_2.17 __res_randomid F -GLIBC_2.17 __res_state F -GLIBC_2.17 __rpc_thread_createerr F -GLIBC_2.17 __rpc_thread_svc_fdset F -GLIBC_2.17 __rpc_thread_svc_max_pollfd F -GLIBC_2.17 __rpc_thread_svc_pollfd F -GLIBC_2.17 __sbrk F -GLIBC_2.17 __sched_cpualloc F -GLIBC_2.17 __sched_cpucount F -GLIBC_2.17 __sched_cpufree F -GLIBC_2.17 __sched_get_priority_max F -GLIBC_2.17 __sched_get_priority_min F -GLIBC_2.17 __sched_getparam F -GLIBC_2.17 __sched_getscheduler F -GLIBC_2.17 __sched_setscheduler F -GLIBC_2.17 __sched_yield F -GLIBC_2.17 __select F -GLIBC_2.17 __send F -GLIBC_2.17 __setmntent F -GLIBC_2.17 __setpgid F -GLIBC_2.17 __sigaction F -GLIBC_2.17 __sigaddset F -GLIBC_2.17 __sigdelset F -GLIBC_2.17 __sigismember F -GLIBC_2.17 __signbit F -GLIBC_2.17 __signbitf F -GLIBC_2.17 __signbitl F -GLIBC_2.17 __sigpause F -GLIBC_2.17 __sigsetjmp F -GLIBC_2.17 __sigsuspend F -GLIBC_2.17 __snprintf_chk F -GLIBC_2.17 __sprintf_chk F -GLIBC_2.17 __stack_chk_fail F -GLIBC_2.17 __statfs F -GLIBC_2.17 __stpcpy F -GLIBC_2.17 __stpcpy_chk F -GLIBC_2.17 __stpcpy_small F -GLIBC_2.17 __stpncpy F -GLIBC_2.17 __stpncpy_chk F -GLIBC_2.17 __strcasecmp F -GLIBC_2.17 __strcasecmp_l F -GLIBC_2.17 __strcasestr F -GLIBC_2.17 __strcat_chk F -GLIBC_2.17 __strcoll_l F -GLIBC_2.17 __strcpy_chk F -GLIBC_2.17 __strcpy_small F -GLIBC_2.17 __strcspn_c1 F -GLIBC_2.17 __strcspn_c2 F -GLIBC_2.17 __strcspn_c3 F -GLIBC_2.17 __strdup F -GLIBC_2.17 __strerror_r F -GLIBC_2.17 __strfmon_l F -GLIBC_2.17 __strftime_l F -GLIBC_2.17 __strncasecmp_l F -GLIBC_2.17 __strncat_chk F -GLIBC_2.17 __strncpy_chk F -GLIBC_2.17 __strndup F -GLIBC_2.17 __strpbrk_c2 F -GLIBC_2.17 __strpbrk_c3 F -GLIBC_2.17 __strsep_1c F -GLIBC_2.17 __strsep_2c F -GLIBC_2.17 __strsep_3c F -GLIBC_2.17 __strsep_g F -GLIBC_2.17 __strspn_c1 F -GLIBC_2.17 __strspn_c2 F -GLIBC_2.17 __strspn_c3 F -GLIBC_2.17 __strtod_internal F -GLIBC_2.17 __strtod_l F -GLIBC_2.17 __strtof_internal F -GLIBC_2.17 __strtof_l F -GLIBC_2.17 __strtok_r F -GLIBC_2.17 __strtok_r_1c F -GLIBC_2.17 __strtol_internal F -GLIBC_2.17 __strtol_l F -GLIBC_2.17 __strtold_internal F -GLIBC_2.17 __strtold_l F -GLIBC_2.17 __strtoll_internal F -GLIBC_2.17 __strtoll_l F -GLIBC_2.17 __strtoul_internal F -GLIBC_2.17 __strtoul_l F -GLIBC_2.17 __strtoull_internal F -GLIBC_2.17 __strtoull_l F -GLIBC_2.17 __strverscmp F -GLIBC_2.17 __strxfrm_l F -GLIBC_2.17 __swprintf_chk F -GLIBC_2.17 __sysconf F -GLIBC_2.17 __sysctl F -GLIBC_2.17 __syslog_chk F -GLIBC_2.17 __sysv_signal F -GLIBC_2.17 __timezone D 0x8 -GLIBC_2.17 __toascii_l F -GLIBC_2.17 __tolower_l F -GLIBC_2.17 __toupper_l F -GLIBC_2.17 __towctrans F -GLIBC_2.17 __towctrans_l F -GLIBC_2.17 __towlower_l F -GLIBC_2.17 __towupper_l F -GLIBC_2.17 __ttyname_r_chk F -GLIBC_2.17 __tzname D 0x10 -GLIBC_2.17 __uflow F -GLIBC_2.17 __underflow F -GLIBC_2.17 __uselocale F -GLIBC_2.17 __vasprintf_chk F -GLIBC_2.17 __vdprintf_chk F -GLIBC_2.17 __vfork F -GLIBC_2.17 __vfprintf_chk F -GLIBC_2.17 __vfscanf F -GLIBC_2.17 __vfwprintf_chk F -GLIBC_2.17 __vprintf_chk F -GLIBC_2.17 __vsnprintf F -GLIBC_2.17 __vsnprintf_chk F -GLIBC_2.17 __vsprintf_chk F -GLIBC_2.17 __vsscanf F -GLIBC_2.17 __vswprintf_chk F -GLIBC_2.17 __vsyslog_chk F -GLIBC_2.17 __vwprintf_chk F -GLIBC_2.17 __wait F -GLIBC_2.17 __waitpid F -GLIBC_2.17 __wcpcpy_chk F -GLIBC_2.17 __wcpncpy_chk F -GLIBC_2.17 __wcrtomb_chk F -GLIBC_2.17 __wcscasecmp_l F -GLIBC_2.17 __wcscat_chk F -GLIBC_2.17 __wcscoll_l F -GLIBC_2.17 __wcscpy_chk F -GLIBC_2.17 __wcsftime_l F -GLIBC_2.17 __wcsncasecmp_l F -GLIBC_2.17 __wcsncat_chk F -GLIBC_2.17 __wcsncpy_chk F -GLIBC_2.17 __wcsnrtombs_chk F -GLIBC_2.17 __wcsrtombs_chk F -GLIBC_2.17 __wcstod_internal F -GLIBC_2.17 __wcstod_l F -GLIBC_2.17 __wcstof_internal F -GLIBC_2.17 __wcstof_l F -GLIBC_2.17 __wcstol_internal F -GLIBC_2.17 __wcstol_l F -GLIBC_2.17 __wcstold_internal F -GLIBC_2.17 __wcstold_l F -GLIBC_2.17 __wcstoll_internal F -GLIBC_2.17 __wcstoll_l F -GLIBC_2.17 __wcstombs_chk F -GLIBC_2.17 __wcstoul_internal F -GLIBC_2.17 __wcstoul_l F -GLIBC_2.17 __wcstoull_internal F -GLIBC_2.17 __wcstoull_l F -GLIBC_2.17 __wcsxfrm_l F -GLIBC_2.17 __wctomb_chk F -GLIBC_2.17 __wctrans_l F -GLIBC_2.17 __wctype_l F -GLIBC_2.17 __wmemcpy_chk F -GLIBC_2.17 __wmemmove_chk F -GLIBC_2.17 __wmempcpy_chk F -GLIBC_2.17 __wmemset_chk F -GLIBC_2.17 __woverflow F -GLIBC_2.17 __wprintf_chk F -GLIBC_2.17 __write F -GLIBC_2.17 __wuflow F -GLIBC_2.17 __wunderflow F -GLIBC_2.17 __xmknod F -GLIBC_2.17 __xmknodat F -GLIBC_2.17 __xpg_basename F -GLIBC_2.17 __xpg_sigpause F -GLIBC_2.17 __xpg_strerror_r F -GLIBC_2.17 __xstat F -GLIBC_2.17 __xstat64 F -GLIBC_2.17 _authenticate F -GLIBC_2.17 _dl_mcount_wrapper F -GLIBC_2.17 _dl_mcount_wrapper_check F -GLIBC_2.17 _environ D 0x8 -GLIBC_2.17 _exit F -GLIBC_2.17 _flushlbf F -GLIBC_2.17 _libc_intl_domainname D 0x5 -GLIBC_2.17 _longjmp F -GLIBC_2.17 _mcleanup F -GLIBC_2.17 _mcount F -GLIBC_2.17 _nl_default_dirname D 0x12 -GLIBC_2.17 _nl_domain_bindings D 0x8 -GLIBC_2.17 _nl_msg_cat_cntr D 0x4 -GLIBC_2.17 _null_auth D 0x18 -GLIBC_2.17 _obstack_allocated_p F -GLIBC_2.17 _obstack_begin F -GLIBC_2.17 _obstack_begin_1 F -GLIBC_2.17 _obstack_free F -GLIBC_2.17 _obstack_memory_used F -GLIBC_2.17 _obstack_newchunk F -GLIBC_2.17 _res D 0x238 -GLIBC_2.17 _res_hconf D 0x48 -GLIBC_2.17 _rpc_dtablesize F -GLIBC_2.17 _seterr_reply F -GLIBC_2.17 _setjmp F -GLIBC_2.17 _sys_errlist D 0x438 -GLIBC_2.17 _sys_nerr D 0x4 -GLIBC_2.17 _sys_siglist D 0x208 -GLIBC_2.17 _tolower F -GLIBC_2.17 _toupper F -GLIBC_2.17 a64l F -GLIBC_2.17 abort F -GLIBC_2.17 abs F -GLIBC_2.17 accept F -GLIBC_2.17 accept4 F -GLIBC_2.17 access F -GLIBC_2.17 acct F -GLIBC_2.17 addmntent F -GLIBC_2.17 addseverity F -GLIBC_2.17 adjtime F -GLIBC_2.17 adjtimex F -GLIBC_2.17 advance F -GLIBC_2.17 alarm F -GLIBC_2.17 aligned_alloc F -GLIBC_2.17 alphasort F -GLIBC_2.17 alphasort64 F -GLIBC_2.17 argp_err_exit_status D 0x4 -GLIBC_2.17 argp_error F -GLIBC_2.17 argp_failure F -GLIBC_2.17 argp_help F -GLIBC_2.17 argp_parse F -GLIBC_2.17 argp_program_bug_address D 0x8 -GLIBC_2.17 argp_program_version D 0x8 -GLIBC_2.17 argp_program_version_hook D 0x8 -GLIBC_2.17 argp_state_help F -GLIBC_2.17 argp_usage F -GLIBC_2.17 argz_add F -GLIBC_2.17 argz_add_sep F -GLIBC_2.17 argz_append F -GLIBC_2.17 argz_count F -GLIBC_2.17 argz_create F -GLIBC_2.17 argz_create_sep F -GLIBC_2.17 argz_delete F -GLIBC_2.17 argz_extract F -GLIBC_2.17 argz_insert F -GLIBC_2.17 argz_next F -GLIBC_2.17 argz_replace F -GLIBC_2.17 argz_stringify F -GLIBC_2.17 asctime F -GLIBC_2.17 asctime_r F -GLIBC_2.17 asprintf F -GLIBC_2.17 atof F -GLIBC_2.17 atoi F -GLIBC_2.17 atol F -GLIBC_2.17 atoll F -GLIBC_2.17 authdes_create F -GLIBC_2.17 authdes_getucred F -GLIBC_2.17 authdes_pk_create F -GLIBC_2.17 authnone_create F -GLIBC_2.17 authunix_create F -GLIBC_2.17 authunix_create_default F -GLIBC_2.17 backtrace F -GLIBC_2.17 backtrace_symbols F -GLIBC_2.17 backtrace_symbols_fd F -GLIBC_2.17 basename F -GLIBC_2.17 bcmp F -GLIBC_2.17 bcopy F -GLIBC_2.17 bdflush F -GLIBC_2.17 bind F -GLIBC_2.17 bind_textdomain_codeset F -GLIBC_2.17 bindresvport F -GLIBC_2.17 bindtextdomain F -GLIBC_2.17 brk F -GLIBC_2.17 bsd_signal F -GLIBC_2.17 bsearch F -GLIBC_2.17 btowc F -GLIBC_2.17 bzero F -GLIBC_2.17 c16rtomb F -GLIBC_2.17 c32rtomb F -GLIBC_2.17 calloc F -GLIBC_2.17 callrpc F -GLIBC_2.17 canonicalize_file_name F -GLIBC_2.17 capget F -GLIBC_2.17 capset F -GLIBC_2.17 catclose F -GLIBC_2.17 catgets F -GLIBC_2.17 catopen F -GLIBC_2.17 cbc_crypt F -GLIBC_2.17 cfgetispeed F -GLIBC_2.17 cfgetospeed F -GLIBC_2.17 cfmakeraw F -GLIBC_2.17 cfree F -GLIBC_2.17 cfsetispeed F -GLIBC_2.17 cfsetospeed F -GLIBC_2.17 cfsetspeed F -GLIBC_2.17 chdir F -GLIBC_2.17 chflags F -GLIBC_2.17 chmod F -GLIBC_2.17 chown F -GLIBC_2.17 chroot F -GLIBC_2.17 clearenv F -GLIBC_2.17 clearerr F -GLIBC_2.17 clearerr_unlocked F -GLIBC_2.17 clnt_broadcast F -GLIBC_2.17 clnt_create F -GLIBC_2.17 clnt_pcreateerror F -GLIBC_2.17 clnt_perrno F -GLIBC_2.17 clnt_perror F -GLIBC_2.17 clnt_spcreateerror F -GLIBC_2.17 clnt_sperrno F -GLIBC_2.17 clnt_sperror F -GLIBC_2.17 clntraw_create F -GLIBC_2.17 clnttcp_create F -GLIBC_2.17 clntudp_bufcreate F -GLIBC_2.17 clntudp_create F -GLIBC_2.17 clntunix_create F -GLIBC_2.17 clock F -GLIBC_2.17 clock_adjtime F -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 clone F -GLIBC_2.17 close F -GLIBC_2.17 closedir F -GLIBC_2.17 closelog F -GLIBC_2.17 confstr F -GLIBC_2.17 connect F -GLIBC_2.17 copysign F -GLIBC_2.17 copysignf F -GLIBC_2.17 copysignl F -GLIBC_2.17 creat F -GLIBC_2.17 creat64 F -GLIBC_2.17 create_module F -GLIBC_2.17 ctermid F -GLIBC_2.17 ctime F -GLIBC_2.17 ctime_r F -GLIBC_2.17 cuserid F -GLIBC_2.17 daemon F -GLIBC_2.17 daylight D 0x4 -GLIBC_2.17 dcgettext F -GLIBC_2.17 dcngettext F -GLIBC_2.17 delete_module F -GLIBC_2.17 des_setparity F -GLIBC_2.17 dgettext F -GLIBC_2.17 difftime F -GLIBC_2.17 dirfd F -GLIBC_2.17 dirname F -GLIBC_2.17 div F -GLIBC_2.17 dl_iterate_phdr F -GLIBC_2.17 dngettext F -GLIBC_2.17 dprintf F -GLIBC_2.17 drand48 F -GLIBC_2.17 drand48_r F -GLIBC_2.17 dup F -GLIBC_2.17 dup2 F -GLIBC_2.17 dup3 F -GLIBC_2.17 duplocale F -GLIBC_2.17 dysize F -GLIBC_2.17 eaccess F -GLIBC_2.17 ecb_crypt F -GLIBC_2.17 ecvt F -GLIBC_2.17 ecvt_r F -GLIBC_2.17 endaliasent F -GLIBC_2.17 endfsent F -GLIBC_2.17 endgrent F -GLIBC_2.17 endhostent F -GLIBC_2.17 endmntent F -GLIBC_2.17 endnetent F -GLIBC_2.17 endnetgrent F -GLIBC_2.17 endprotoent F -GLIBC_2.17 endpwent F -GLIBC_2.17 endrpcent F -GLIBC_2.17 endservent F -GLIBC_2.17 endsgent F -GLIBC_2.17 endspent F -GLIBC_2.17 endttyent F -GLIBC_2.17 endusershell F -GLIBC_2.17 endutent F -GLIBC_2.17 endutxent F -GLIBC_2.17 environ D 0x8 -GLIBC_2.17 envz_add F -GLIBC_2.17 envz_entry F -GLIBC_2.17 envz_get F -GLIBC_2.17 envz_merge F -GLIBC_2.17 envz_remove F -GLIBC_2.17 envz_strip F -GLIBC_2.17 epoll_create F -GLIBC_2.17 epoll_create1 F -GLIBC_2.17 epoll_ctl F -GLIBC_2.17 epoll_pwait F -GLIBC_2.17 epoll_wait F -GLIBC_2.17 erand48 F -GLIBC_2.17 erand48_r F -GLIBC_2.17 err F -GLIBC_2.17 error F -GLIBC_2.17 error_at_line F -GLIBC_2.17 error_message_count D 0x4 -GLIBC_2.17 error_one_per_line D 0x4 -GLIBC_2.17 error_print_progname D 0x8 -GLIBC_2.17 errx F -GLIBC_2.17 ether_aton F -GLIBC_2.17 ether_aton_r F -GLIBC_2.17 ether_hostton F -GLIBC_2.17 ether_line F -GLIBC_2.17 ether_ntoa F -GLIBC_2.17 ether_ntoa_r F -GLIBC_2.17 ether_ntohost F -GLIBC_2.17 euidaccess F -GLIBC_2.17 eventfd F -GLIBC_2.17 eventfd_read F -GLIBC_2.17 eventfd_write F -GLIBC_2.17 execl F -GLIBC_2.17 execle F -GLIBC_2.17 execlp F -GLIBC_2.17 execv F -GLIBC_2.17 execve F -GLIBC_2.17 execvp F -GLIBC_2.17 execvpe F -GLIBC_2.17 exit F -GLIBC_2.17 faccessat F -GLIBC_2.17 fallocate F -GLIBC_2.17 fallocate64 F -GLIBC_2.17 fanotify_init F -GLIBC_2.17 fanotify_mark F -GLIBC_2.17 fattach F -GLIBC_2.17 fchdir F -GLIBC_2.17 fchflags F -GLIBC_2.17 fchmod F -GLIBC_2.17 fchmodat F -GLIBC_2.17 fchown F -GLIBC_2.17 fchownat F -GLIBC_2.17 fclose F -GLIBC_2.17 fcloseall F -GLIBC_2.17 fcntl F -GLIBC_2.17 fcvt F -GLIBC_2.17 fcvt_r F -GLIBC_2.17 fdatasync F -GLIBC_2.17 fdetach F -GLIBC_2.17 fdopen F -GLIBC_2.17 fdopendir F -GLIBC_2.17 feof F -GLIBC_2.17 feof_unlocked F -GLIBC_2.17 ferror F -GLIBC_2.17 ferror_unlocked F -GLIBC_2.17 fexecve F -GLIBC_2.17 fflush F -GLIBC_2.17 fflush_unlocked F -GLIBC_2.17 ffs F -GLIBC_2.17 ffsl F -GLIBC_2.17 ffsll F -GLIBC_2.17 fgetc F -GLIBC_2.17 fgetc_unlocked F -GLIBC_2.17 fgetgrent F -GLIBC_2.17 fgetgrent_r F -GLIBC_2.17 fgetpos F -GLIBC_2.17 fgetpos64 F -GLIBC_2.17 fgetpwent F -GLIBC_2.17 fgetpwent_r F -GLIBC_2.17 fgets F -GLIBC_2.17 fgets_unlocked F -GLIBC_2.17 fgetsgent F -GLIBC_2.17 fgetsgent_r F -GLIBC_2.17 fgetspent F -GLIBC_2.17 fgetspent_r F -GLIBC_2.17 fgetwc F -GLIBC_2.17 fgetwc_unlocked F -GLIBC_2.17 fgetws F -GLIBC_2.17 fgetws_unlocked F -GLIBC_2.17 fgetxattr F -GLIBC_2.17 fileno F -GLIBC_2.17 fileno_unlocked F -GLIBC_2.17 finite F -GLIBC_2.17 finitef F -GLIBC_2.17 finitel F -GLIBC_2.17 flistxattr F -GLIBC_2.17 flock F -GLIBC_2.17 flockfile F -GLIBC_2.17 fmemopen F -GLIBC_2.17 fmtmsg F -GLIBC_2.17 fnmatch F -GLIBC_2.17 fopen F -GLIBC_2.17 fopen64 F -GLIBC_2.17 fopencookie F -GLIBC_2.17 fork F -GLIBC_2.17 fpathconf F -GLIBC_2.17 fprintf F -GLIBC_2.17 fputc F -GLIBC_2.17 fputc_unlocked F -GLIBC_2.17 fputs F -GLIBC_2.17 fputs_unlocked F -GLIBC_2.17 fputwc F -GLIBC_2.17 fputwc_unlocked F -GLIBC_2.17 fputws F -GLIBC_2.17 fputws_unlocked F -GLIBC_2.17 fread F -GLIBC_2.17 fread_unlocked F -GLIBC_2.17 free F -GLIBC_2.17 freeaddrinfo F -GLIBC_2.17 freeifaddrs F -GLIBC_2.17 freelocale F -GLIBC_2.17 fremovexattr F -GLIBC_2.17 freopen F -GLIBC_2.17 freopen64 F -GLIBC_2.17 frexp F -GLIBC_2.17 frexpf F -GLIBC_2.17 frexpl F -GLIBC_2.17 fscanf F -GLIBC_2.17 fseek F -GLIBC_2.17 fseeko F -GLIBC_2.17 fseeko64 F -GLIBC_2.17 fsetpos F -GLIBC_2.17 fsetpos64 F -GLIBC_2.17 fsetxattr F -GLIBC_2.17 fstatfs F -GLIBC_2.17 fstatfs64 F -GLIBC_2.17 fstatvfs F -GLIBC_2.17 fstatvfs64 F -GLIBC_2.17 fsync F -GLIBC_2.17 ftell F -GLIBC_2.17 ftello F -GLIBC_2.17 ftello64 F -GLIBC_2.17 ftime F -GLIBC_2.17 ftok F -GLIBC_2.17 ftruncate F -GLIBC_2.17 ftruncate64 F -GLIBC_2.17 ftrylockfile F -GLIBC_2.17 fts_children F -GLIBC_2.17 fts_close F -GLIBC_2.17 fts_open F -GLIBC_2.17 fts_read F -GLIBC_2.17 fts_set F -GLIBC_2.17 ftw F -GLIBC_2.17 ftw64 F -GLIBC_2.17 funlockfile F -GLIBC_2.17 futimens F -GLIBC_2.17 futimes F -GLIBC_2.17 futimesat F -GLIBC_2.17 fwide F -GLIBC_2.17 fwprintf F -GLIBC_2.17 fwrite F -GLIBC_2.17 fwrite_unlocked F -GLIBC_2.17 fwscanf F -GLIBC_2.17 gai_strerror F -GLIBC_2.17 gcvt F -GLIBC_2.17 get_avphys_pages F -GLIBC_2.17 get_current_dir_name F -GLIBC_2.17 get_kernel_syms F -GLIBC_2.17 get_myaddress F -GLIBC_2.17 get_nprocs F -GLIBC_2.17 get_nprocs_conf F -GLIBC_2.17 get_phys_pages F -GLIBC_2.17 getaddrinfo F -GLIBC_2.17 getaliasbyname F -GLIBC_2.17 getaliasbyname_r F -GLIBC_2.17 getaliasent F -GLIBC_2.17 getaliasent_r F -GLIBC_2.17 getauxval F -GLIBC_2.17 getc F -GLIBC_2.17 getc_unlocked F -GLIBC_2.17 getchar F -GLIBC_2.17 getchar_unlocked F -GLIBC_2.17 getcontext F -GLIBC_2.17 getcwd F -GLIBC_2.17 getdate F -GLIBC_2.17 getdate_err D 0x4 -GLIBC_2.17 getdate_r F -GLIBC_2.17 getdelim F -GLIBC_2.17 getdirentries F -GLIBC_2.17 getdirentries64 F -GLIBC_2.17 getdomainname F -GLIBC_2.17 getdtablesize F -GLIBC_2.17 getegid F -GLIBC_2.17 getenv F -GLIBC_2.17 geteuid F -GLIBC_2.17 getfsent F -GLIBC_2.17 getfsfile F -GLIBC_2.17 getfsspec F -GLIBC_2.17 getgid F -GLIBC_2.17 getgrent F -GLIBC_2.17 getgrent_r F -GLIBC_2.17 getgrgid F -GLIBC_2.17 getgrgid_r F -GLIBC_2.17 getgrnam F -GLIBC_2.17 getgrnam_r F -GLIBC_2.17 getgrouplist F -GLIBC_2.17 getgroups F -GLIBC_2.17 gethostbyaddr F -GLIBC_2.17 gethostbyaddr_r F -GLIBC_2.17 gethostbyname F -GLIBC_2.17 gethostbyname2 F -GLIBC_2.17 gethostbyname2_r F -GLIBC_2.17 gethostbyname_r F -GLIBC_2.17 gethostent F -GLIBC_2.17 gethostent_r F -GLIBC_2.17 gethostid F -GLIBC_2.17 gethostname F -GLIBC_2.17 getifaddrs F -GLIBC_2.17 getipv4sourcefilter F -GLIBC_2.17 getitimer F -GLIBC_2.17 getline F -GLIBC_2.17 getloadavg F -GLIBC_2.17 getlogin F -GLIBC_2.17 getlogin_r F -GLIBC_2.17 getmntent F -GLIBC_2.17 getmntent_r F -GLIBC_2.17 getmsg F -GLIBC_2.17 getnameinfo F -GLIBC_2.17 getnetbyaddr F -GLIBC_2.17 getnetbyaddr_r F -GLIBC_2.17 getnetbyname F -GLIBC_2.17 getnetbyname_r F -GLIBC_2.17 getnetent F -GLIBC_2.17 getnetent_r F -GLIBC_2.17 getnetgrent F -GLIBC_2.17 getnetgrent_r F -GLIBC_2.17 getnetname F -GLIBC_2.17 getopt F -GLIBC_2.17 getopt_long F -GLIBC_2.17 getopt_long_only F -GLIBC_2.17 getpagesize F -GLIBC_2.17 getpass F -GLIBC_2.17 getpeername F -GLIBC_2.17 getpgid F -GLIBC_2.17 getpgrp F -GLIBC_2.17 getpid F -GLIBC_2.17 getpmsg F -GLIBC_2.17 getppid F -GLIBC_2.17 getpriority F -GLIBC_2.17 getprotobyname F -GLIBC_2.17 getprotobyname_r F -GLIBC_2.17 getprotobynumber F -GLIBC_2.17 getprotobynumber_r F -GLIBC_2.17 getprotoent F -GLIBC_2.17 getprotoent_r F -GLIBC_2.17 getpt F -GLIBC_2.17 getpublickey F -GLIBC_2.17 getpw F -GLIBC_2.17 getpwent F -GLIBC_2.17 getpwent_r F -GLIBC_2.17 getpwnam F -GLIBC_2.17 getpwnam_r F -GLIBC_2.17 getpwuid F -GLIBC_2.17 getpwuid_r F -GLIBC_2.17 getresgid F -GLIBC_2.17 getresuid F -GLIBC_2.17 getrlimit F -GLIBC_2.17 getrlimit64 F -GLIBC_2.17 getrpcbyname F -GLIBC_2.17 getrpcbyname_r F -GLIBC_2.17 getrpcbynumber F -GLIBC_2.17 getrpcbynumber_r F -GLIBC_2.17 getrpcent F -GLIBC_2.17 getrpcent_r F -GLIBC_2.17 getrpcport F -GLIBC_2.17 getrusage F -GLIBC_2.17 gets F -GLIBC_2.17 getsecretkey F -GLIBC_2.17 getservbyname F -GLIBC_2.17 getservbyname_r F -GLIBC_2.17 getservbyport F -GLIBC_2.17 getservbyport_r F -GLIBC_2.17 getservent F -GLIBC_2.17 getservent_r F -GLIBC_2.17 getsgent F -GLIBC_2.17 getsgent_r F -GLIBC_2.17 getsgnam F -GLIBC_2.17 getsgnam_r F -GLIBC_2.17 getsid F -GLIBC_2.17 getsockname F -GLIBC_2.17 getsockopt F -GLIBC_2.17 getsourcefilter F -GLIBC_2.17 getspent F -GLIBC_2.17 getspent_r F -GLIBC_2.17 getspnam F -GLIBC_2.17 getspnam_r F -GLIBC_2.17 getsubopt F -GLIBC_2.17 gettext F -GLIBC_2.17 gettimeofday F -GLIBC_2.17 getttyent F -GLIBC_2.17 getttynam F -GLIBC_2.17 getuid F -GLIBC_2.17 getusershell F -GLIBC_2.17 getutent F -GLIBC_2.17 getutent_r F -GLIBC_2.17 getutid F -GLIBC_2.17 getutid_r F -GLIBC_2.17 getutline F -GLIBC_2.17 getutline_r F -GLIBC_2.17 getutmp F -GLIBC_2.17 getutmpx F -GLIBC_2.17 getutxent F -GLIBC_2.17 getutxid F -GLIBC_2.17 getutxline F -GLIBC_2.17 getw F -GLIBC_2.17 getwc F -GLIBC_2.17 getwc_unlocked F -GLIBC_2.17 getwchar F -GLIBC_2.17 getwchar_unlocked F -GLIBC_2.17 getwd F -GLIBC_2.17 getxattr F -GLIBC_2.17 glob F -GLIBC_2.17 glob64 F -GLIBC_2.17 glob_pattern_p F -GLIBC_2.17 globfree F -GLIBC_2.17 globfree64 F -GLIBC_2.17 gmtime F -GLIBC_2.17 gmtime_r F -GLIBC_2.17 gnu_dev_major F -GLIBC_2.17 gnu_dev_makedev F -GLIBC_2.17 gnu_dev_minor F -GLIBC_2.17 gnu_get_libc_release F -GLIBC_2.17 gnu_get_libc_version F -GLIBC_2.17 grantpt F -GLIBC_2.17 group_member F -GLIBC_2.17 gsignal F -GLIBC_2.17 gtty F -GLIBC_2.17 h_errlist D 0x28 -GLIBC_2.17 h_nerr D 0x4 -GLIBC_2.17 hasmntopt F -GLIBC_2.17 hcreate F -GLIBC_2.17 hcreate_r F -GLIBC_2.17 hdestroy F -GLIBC_2.17 hdestroy_r F -GLIBC_2.17 herror F -GLIBC_2.17 host2netname F -GLIBC_2.17 hsearch F -GLIBC_2.17 hsearch_r F -GLIBC_2.17 hstrerror F -GLIBC_2.17 htonl F -GLIBC_2.17 htons F -GLIBC_2.17 iconv F -GLIBC_2.17 iconv_close F -GLIBC_2.17 iconv_open F -GLIBC_2.17 if_freenameindex F -GLIBC_2.17 if_indextoname F -GLIBC_2.17 if_nameindex F -GLIBC_2.17 if_nametoindex F -GLIBC_2.17 imaxabs F -GLIBC_2.17 imaxdiv F -GLIBC_2.17 in6addr_any D 0x10 -GLIBC_2.17 in6addr_loopback D 0x10 -GLIBC_2.17 index F -GLIBC_2.17 inet6_opt_append F -GLIBC_2.17 inet6_opt_find F -GLIBC_2.17 inet6_opt_finish F -GLIBC_2.17 inet6_opt_get_val F -GLIBC_2.17 inet6_opt_init F -GLIBC_2.17 inet6_opt_next F -GLIBC_2.17 inet6_opt_set_val F -GLIBC_2.17 inet6_option_alloc F -GLIBC_2.17 inet6_option_append F -GLIBC_2.17 inet6_option_find F -GLIBC_2.17 inet6_option_init F -GLIBC_2.17 inet6_option_next F -GLIBC_2.17 inet6_option_space F -GLIBC_2.17 inet6_rth_add F -GLIBC_2.17 inet6_rth_getaddr F -GLIBC_2.17 inet6_rth_init F -GLIBC_2.17 inet6_rth_reverse F -GLIBC_2.17 inet6_rth_segments F -GLIBC_2.17 inet6_rth_space F -GLIBC_2.17 inet_addr F -GLIBC_2.17 inet_aton F -GLIBC_2.17 inet_lnaof F -GLIBC_2.17 inet_makeaddr F -GLIBC_2.17 inet_netof F -GLIBC_2.17 inet_network F -GLIBC_2.17 inet_nsap_addr F -GLIBC_2.17 inet_nsap_ntoa F -GLIBC_2.17 inet_ntoa F -GLIBC_2.17 inet_ntop F -GLIBC_2.17 inet_pton F -GLIBC_2.17 init_module F -GLIBC_2.17 initgroups F -GLIBC_2.17 initstate F -GLIBC_2.17 initstate_r F -GLIBC_2.17 innetgr F -GLIBC_2.17 inotify_add_watch F -GLIBC_2.17 inotify_init F -GLIBC_2.17 inotify_init1 F -GLIBC_2.17 inotify_rm_watch F -GLIBC_2.17 insque F -GLIBC_2.17 ioctl F -GLIBC_2.17 iruserok F -GLIBC_2.17 iruserok_af F -GLIBC_2.17 isalnum F -GLIBC_2.17 isalnum_l F -GLIBC_2.17 isalpha F -GLIBC_2.17 isalpha_l F -GLIBC_2.17 isascii F -GLIBC_2.17 isastream F -GLIBC_2.17 isatty F -GLIBC_2.17 isblank F -GLIBC_2.17 isblank_l F -GLIBC_2.17 iscntrl F -GLIBC_2.17 iscntrl_l F -GLIBC_2.17 isctype F -GLIBC_2.17 isdigit F -GLIBC_2.17 isdigit_l F -GLIBC_2.17 isfdtype F -GLIBC_2.17 isgraph F -GLIBC_2.17 isgraph_l F -GLIBC_2.17 isinf F -GLIBC_2.17 isinff F -GLIBC_2.17 isinfl F -GLIBC_2.17 islower F -GLIBC_2.17 islower_l F -GLIBC_2.17 isnan F -GLIBC_2.17 isnanf F -GLIBC_2.17 isnanl F -GLIBC_2.17 isprint F -GLIBC_2.17 isprint_l F -GLIBC_2.17 ispunct F -GLIBC_2.17 ispunct_l F -GLIBC_2.17 isspace F -GLIBC_2.17 isspace_l F -GLIBC_2.17 isupper F -GLIBC_2.17 isupper_l F -GLIBC_2.17 iswalnum F -GLIBC_2.17 iswalnum_l F -GLIBC_2.17 iswalpha F -GLIBC_2.17 iswalpha_l F -GLIBC_2.17 iswblank F -GLIBC_2.17 iswblank_l F -GLIBC_2.17 iswcntrl F -GLIBC_2.17 iswcntrl_l F -GLIBC_2.17 iswctype F -GLIBC_2.17 iswctype_l F -GLIBC_2.17 iswdigit F -GLIBC_2.17 iswdigit_l F -GLIBC_2.17 iswgraph F -GLIBC_2.17 iswgraph_l F -GLIBC_2.17 iswlower F -GLIBC_2.17 iswlower_l F -GLIBC_2.17 iswprint F -GLIBC_2.17 iswprint_l F -GLIBC_2.17 iswpunct F -GLIBC_2.17 iswpunct_l F -GLIBC_2.17 iswspace F -GLIBC_2.17 iswspace_l F -GLIBC_2.17 iswupper F -GLIBC_2.17 iswupper_l F -GLIBC_2.17 iswxdigit F -GLIBC_2.17 iswxdigit_l F -GLIBC_2.17 isxdigit F -GLIBC_2.17 isxdigit_l F -GLIBC_2.17 jrand48 F -GLIBC_2.17 jrand48_r F -GLIBC_2.17 key_decryptsession F -GLIBC_2.17 key_decryptsession_pk F -GLIBC_2.17 key_encryptsession F -GLIBC_2.17 key_encryptsession_pk F -GLIBC_2.17 key_gendes F -GLIBC_2.17 key_get_conv F -GLIBC_2.17 key_secretkey_is_set F -GLIBC_2.17 key_setnet F -GLIBC_2.17 key_setsecret F -GLIBC_2.17 kill F -GLIBC_2.17 killpg F -GLIBC_2.17 klogctl F -GLIBC_2.17 l64a F -GLIBC_2.17 labs F -GLIBC_2.17 lchmod F -GLIBC_2.17 lchown F -GLIBC_2.17 lckpwdf F -GLIBC_2.17 lcong48 F -GLIBC_2.17 lcong48_r F -GLIBC_2.17 ldexp F -GLIBC_2.17 ldexpf F -GLIBC_2.17 ldexpl F -GLIBC_2.17 ldiv F -GLIBC_2.17 lfind F -GLIBC_2.17 lgetxattr F -GLIBC_2.17 link F -GLIBC_2.17 linkat F -GLIBC_2.17 listen F -GLIBC_2.17 listxattr F -GLIBC_2.17 llabs F -GLIBC_2.17 lldiv F -GLIBC_2.17 llistxattr F -GLIBC_2.17 llseek F -GLIBC_2.17 loc1 D 0x8 -GLIBC_2.17 loc2 D 0x8 -GLIBC_2.17 localeconv F -GLIBC_2.17 localtime F -GLIBC_2.17 localtime_r F -GLIBC_2.17 lockf F -GLIBC_2.17 lockf64 F -GLIBC_2.17 locs D 0x8 -GLIBC_2.17 longjmp F -GLIBC_2.17 lrand48 F -GLIBC_2.17 lrand48_r F -GLIBC_2.17 lremovexattr F -GLIBC_2.17 lsearch F -GLIBC_2.17 lseek F -GLIBC_2.17 lseek64 F -GLIBC_2.17 lsetxattr F -GLIBC_2.17 lutimes F -GLIBC_2.17 madvise F -GLIBC_2.17 makecontext F -GLIBC_2.17 mallinfo F -GLIBC_2.17 malloc F -GLIBC_2.17 malloc_get_state F -GLIBC_2.17 malloc_info F -GLIBC_2.17 malloc_set_state F -GLIBC_2.17 malloc_stats F -GLIBC_2.17 malloc_trim F -GLIBC_2.17 malloc_usable_size F -GLIBC_2.17 mallopt F -GLIBC_2.17 mallwatch D 0x8 -GLIBC_2.17 mblen F -GLIBC_2.17 mbrlen F -GLIBC_2.17 mbrtoc16 F -GLIBC_2.17 mbrtoc32 F -GLIBC_2.17 mbrtowc F -GLIBC_2.17 mbsinit F -GLIBC_2.17 mbsnrtowcs F -GLIBC_2.17 mbsrtowcs F -GLIBC_2.17 mbstowcs F -GLIBC_2.17 mbtowc F -GLIBC_2.17 mcheck F -GLIBC_2.17 mcheck_check_all F -GLIBC_2.17 mcheck_pedantic F -GLIBC_2.17 memalign F -GLIBC_2.17 memccpy F -GLIBC_2.17 memchr F -GLIBC_2.17 memcmp F -GLIBC_2.17 memcpy F -GLIBC_2.17 memfrob F -GLIBC_2.17 memmem F -GLIBC_2.17 memmove F -GLIBC_2.17 mempcpy F -GLIBC_2.17 memrchr F -GLIBC_2.17 memset F -GLIBC_2.17 mincore F -GLIBC_2.17 mkdir F -GLIBC_2.17 mkdirat F -GLIBC_2.17 mkdtemp F -GLIBC_2.17 mkfifo F -GLIBC_2.17 mkfifoat F -GLIBC_2.17 mkostemp F -GLIBC_2.17 mkostemp64 F -GLIBC_2.17 mkostemps F -GLIBC_2.17 mkostemps64 F -GLIBC_2.17 mkstemp F -GLIBC_2.17 mkstemp64 F -GLIBC_2.17 mkstemps F -GLIBC_2.17 mkstemps64 F -GLIBC_2.17 mktemp F -GLIBC_2.17 mktime F -GLIBC_2.17 mlock F -GLIBC_2.17 mlockall F -GLIBC_2.17 mmap F -GLIBC_2.17 mmap64 F -GLIBC_2.17 modf F -GLIBC_2.17 modff F -GLIBC_2.17 modfl F -GLIBC_2.17 moncontrol F -GLIBC_2.17 monstartup F -GLIBC_2.17 mount F -GLIBC_2.17 mprobe F -GLIBC_2.17 mprotect F -GLIBC_2.17 mrand48 F -GLIBC_2.17 mrand48_r F -GLIBC_2.17 mremap F -GLIBC_2.17 msgctl F -GLIBC_2.17 msgget F -GLIBC_2.17 msgrcv F -GLIBC_2.17 msgsnd F -GLIBC_2.17 msync F -GLIBC_2.17 mtrace F -GLIBC_2.17 munlock F -GLIBC_2.17 munlockall F -GLIBC_2.17 munmap F -GLIBC_2.17 muntrace F -GLIBC_2.17 name_to_handle_at F -GLIBC_2.17 nanosleep F -GLIBC_2.17 netname2host F -GLIBC_2.17 netname2user F -GLIBC_2.17 newlocale F -GLIBC_2.17 nfsservctl F -GLIBC_2.17 nftw F -GLIBC_2.17 nftw64 F -GLIBC_2.17 ngettext F -GLIBC_2.17 nice F -GLIBC_2.17 nl_langinfo F -GLIBC_2.17 nl_langinfo_l F -GLIBC_2.17 nrand48 F -GLIBC_2.17 nrand48_r F -GLIBC_2.17 ntohl F -GLIBC_2.17 ntohs F -GLIBC_2.17 ntp_adjtime F -GLIBC_2.17 ntp_gettime F -GLIBC_2.17 ntp_gettimex F -GLIBC_2.17 obstack_alloc_failed_handler D 0x8 -GLIBC_2.17 obstack_exit_failure D 0x4 -GLIBC_2.17 obstack_free F -GLIBC_2.17 obstack_printf F -GLIBC_2.17 obstack_vprintf F -GLIBC_2.17 on_exit F -GLIBC_2.17 open F -GLIBC_2.17 open64 F -GLIBC_2.17 open_by_handle_at F -GLIBC_2.17 open_memstream F -GLIBC_2.17 open_wmemstream F -GLIBC_2.17 openat F -GLIBC_2.17 openat64 F -GLIBC_2.17 opendir F -GLIBC_2.17 openlog F -GLIBC_2.17 optarg D 0x8 -GLIBC_2.17 opterr D 0x4 -GLIBC_2.17 optind D 0x4 -GLIBC_2.17 optopt D 0x4 -GLIBC_2.17 parse_printf_format F -GLIBC_2.17 passwd2des F -GLIBC_2.17 pathconf F -GLIBC_2.17 pause F -GLIBC_2.17 pclose F -GLIBC_2.17 perror F -GLIBC_2.17 personality F -GLIBC_2.17 pipe F -GLIBC_2.17 pipe2 F -GLIBC_2.17 pivot_root F -GLIBC_2.17 pmap_getmaps F -GLIBC_2.17 pmap_getport F -GLIBC_2.17 pmap_rmtcall F -GLIBC_2.17 pmap_set F -GLIBC_2.17 pmap_unset F -GLIBC_2.17 poll F -GLIBC_2.17 popen F -GLIBC_2.17 posix_fadvise F -GLIBC_2.17 posix_fadvise64 F -GLIBC_2.17 posix_fallocate F -GLIBC_2.17 posix_fallocate64 F -GLIBC_2.17 posix_madvise F -GLIBC_2.17 posix_memalign F -GLIBC_2.17 posix_openpt F -GLIBC_2.17 posix_spawn F -GLIBC_2.17 posix_spawn_file_actions_addclose F -GLIBC_2.17 posix_spawn_file_actions_adddup2 F -GLIBC_2.17 posix_spawn_file_actions_addopen F -GLIBC_2.17 posix_spawn_file_actions_destroy F -GLIBC_2.17 posix_spawn_file_actions_init F -GLIBC_2.17 posix_spawnattr_destroy F -GLIBC_2.17 posix_spawnattr_getflags F -GLIBC_2.17 posix_spawnattr_getpgroup F -GLIBC_2.17 posix_spawnattr_getschedparam F -GLIBC_2.17 posix_spawnattr_getschedpolicy F -GLIBC_2.17 posix_spawnattr_getsigdefault F -GLIBC_2.17 posix_spawnattr_getsigmask F -GLIBC_2.17 posix_spawnattr_init F -GLIBC_2.17 posix_spawnattr_setflags F -GLIBC_2.17 posix_spawnattr_setpgroup F -GLIBC_2.17 posix_spawnattr_setschedparam F -GLIBC_2.17 posix_spawnattr_setschedpolicy F -GLIBC_2.17 posix_spawnattr_setsigdefault F -GLIBC_2.17 posix_spawnattr_setsigmask F -GLIBC_2.17 posix_spawnp F -GLIBC_2.17 ppoll F -GLIBC_2.17 prctl F -GLIBC_2.17 pread F -GLIBC_2.17 pread64 F -GLIBC_2.17 preadv F -GLIBC_2.17 preadv64 F -GLIBC_2.17 printf F -GLIBC_2.17 printf_size F -GLIBC_2.17 printf_size_info F -GLIBC_2.17 prlimit F -GLIBC_2.17 prlimit64 F -GLIBC_2.17 process_vm_readv F -GLIBC_2.17 process_vm_writev F -GLIBC_2.17 profil F -GLIBC_2.17 program_invocation_name D 0x8 -GLIBC_2.17 program_invocation_short_name D 0x8 -GLIBC_2.17 pselect F -GLIBC_2.17 psiginfo F -GLIBC_2.17 psignal F -GLIBC_2.17 pthread_attr_destroy F -GLIBC_2.17 pthread_attr_getdetachstate F -GLIBC_2.17 pthread_attr_getinheritsched F -GLIBC_2.17 pthread_attr_getschedparam F -GLIBC_2.17 pthread_attr_getschedpolicy F -GLIBC_2.17 pthread_attr_getscope F -GLIBC_2.17 pthread_attr_init F -GLIBC_2.17 pthread_attr_setdetachstate F -GLIBC_2.17 pthread_attr_setinheritsched F -GLIBC_2.17 pthread_attr_setschedparam F -GLIBC_2.17 pthread_attr_setschedpolicy F -GLIBC_2.17 pthread_attr_setscope F -GLIBC_2.17 pthread_cond_broadcast F -GLIBC_2.17 pthread_cond_destroy F -GLIBC_2.17 pthread_cond_init F -GLIBC_2.17 pthread_cond_signal F -GLIBC_2.17 pthread_cond_timedwait F -GLIBC_2.17 pthread_cond_wait F -GLIBC_2.17 pthread_condattr_destroy F -GLIBC_2.17 pthread_condattr_init F -GLIBC_2.17 pthread_equal F -GLIBC_2.17 pthread_exit F -GLIBC_2.17 pthread_getschedparam F -GLIBC_2.17 pthread_mutex_destroy F -GLIBC_2.17 pthread_mutex_init F -GLIBC_2.17 pthread_mutex_lock F -GLIBC_2.17 pthread_mutex_unlock F -GLIBC_2.17 pthread_self F -GLIBC_2.17 pthread_setcancelstate F -GLIBC_2.17 pthread_setcanceltype F -GLIBC_2.17 pthread_setschedparam F -GLIBC_2.17 ptrace F -GLIBC_2.17 ptsname F -GLIBC_2.17 ptsname_r F -GLIBC_2.17 putc F -GLIBC_2.17 putc_unlocked F -GLIBC_2.17 putchar F -GLIBC_2.17 putchar_unlocked F -GLIBC_2.17 putenv F -GLIBC_2.17 putgrent F -GLIBC_2.17 putmsg F -GLIBC_2.17 putpmsg F -GLIBC_2.17 putpwent F -GLIBC_2.17 puts F -GLIBC_2.17 putsgent F -GLIBC_2.17 putspent F -GLIBC_2.17 pututline F -GLIBC_2.17 pututxline F -GLIBC_2.17 putw F -GLIBC_2.17 putwc F -GLIBC_2.17 putwc_unlocked F -GLIBC_2.17 putwchar F -GLIBC_2.17 putwchar_unlocked F -GLIBC_2.17 pvalloc F -GLIBC_2.17 pwrite F -GLIBC_2.17 pwrite64 F -GLIBC_2.17 pwritev F -GLIBC_2.17 pwritev64 F -GLIBC_2.17 qecvt F -GLIBC_2.17 qecvt_r F -GLIBC_2.17 qfcvt F -GLIBC_2.17 qfcvt_r F -GLIBC_2.17 qgcvt F -GLIBC_2.17 qsort F -GLIBC_2.17 qsort_r F -GLIBC_2.17 query_module F -GLIBC_2.17 quick_exit F -GLIBC_2.17 quotactl F -GLIBC_2.17 raise F -GLIBC_2.17 rand F -GLIBC_2.17 rand_r F -GLIBC_2.17 random F -GLIBC_2.17 random_r F -GLIBC_2.17 rawmemchr F -GLIBC_2.17 rcmd F -GLIBC_2.17 rcmd_af F -GLIBC_2.17 re_comp F -GLIBC_2.17 re_compile_fastmap F -GLIBC_2.17 re_compile_pattern F -GLIBC_2.17 re_exec F -GLIBC_2.17 re_match F -GLIBC_2.17 re_match_2 F -GLIBC_2.17 re_search F -GLIBC_2.17 re_search_2 F -GLIBC_2.17 re_set_registers F -GLIBC_2.17 re_set_syntax F -GLIBC_2.17 re_syntax_options D 0x8 -GLIBC_2.17 read F -GLIBC_2.17 readahead F -GLIBC_2.17 readdir F -GLIBC_2.17 readdir64 F -GLIBC_2.17 readdir64_r F -GLIBC_2.17 readdir_r F -GLIBC_2.17 readlink F -GLIBC_2.17 readlinkat F -GLIBC_2.17 readv F -GLIBC_2.17 realloc F -GLIBC_2.17 realpath F -GLIBC_2.17 reboot F -GLIBC_2.17 recv F -GLIBC_2.17 recvfrom F -GLIBC_2.17 recvmmsg F -GLIBC_2.17 recvmsg F -GLIBC_2.17 regcomp F -GLIBC_2.17 regerror F -GLIBC_2.17 regexec F -GLIBC_2.17 regfree F -GLIBC_2.17 register_printf_function F -GLIBC_2.17 register_printf_modifier F -GLIBC_2.17 register_printf_specifier F -GLIBC_2.17 register_printf_type F -GLIBC_2.17 registerrpc F -GLIBC_2.17 remap_file_pages F -GLIBC_2.17 remove F -GLIBC_2.17 removexattr F -GLIBC_2.17 remque F -GLIBC_2.17 rename F -GLIBC_2.17 renameat F -GLIBC_2.17 revoke F -GLIBC_2.17 rewind F -GLIBC_2.17 rewinddir F -GLIBC_2.17 rexec F -GLIBC_2.17 rexec_af F -GLIBC_2.17 rexecoptions D 0x4 -GLIBC_2.17 rindex F -GLIBC_2.17 rmdir F -GLIBC_2.17 rpc_createerr D 0x20 -GLIBC_2.17 rpmatch F -GLIBC_2.17 rresvport F -GLIBC_2.17 rresvport_af F -GLIBC_2.17 rtime F -GLIBC_2.17 ruserok F -GLIBC_2.17 ruserok_af F -GLIBC_2.17 ruserpass F -GLIBC_2.17 sbrk F -GLIBC_2.17 scalbn F -GLIBC_2.17 scalbnf F -GLIBC_2.17 scalbnl F -GLIBC_2.17 scandir F -GLIBC_2.17 scandir64 F -GLIBC_2.17 scandirat F -GLIBC_2.17 scandirat64 F -GLIBC_2.17 scanf F -GLIBC_2.17 sched_get_priority_max F -GLIBC_2.17 sched_get_priority_min F -GLIBC_2.17 sched_getaffinity F -GLIBC_2.17 sched_getcpu F -GLIBC_2.17 sched_getparam F -GLIBC_2.17 sched_getscheduler F -GLIBC_2.17 sched_rr_get_interval F -GLIBC_2.17 sched_setaffinity F -GLIBC_2.17 sched_setparam F -GLIBC_2.17 sched_setscheduler F -GLIBC_2.17 sched_yield F -GLIBC_2.17 secure_getenv F -GLIBC_2.17 seed48 F -GLIBC_2.17 seed48_r F -GLIBC_2.17 seekdir F -GLIBC_2.17 select F -GLIBC_2.17 semctl F -GLIBC_2.17 semget F -GLIBC_2.17 semop F -GLIBC_2.17 semtimedop F -GLIBC_2.17 send F -GLIBC_2.17 sendfile F -GLIBC_2.17 sendfile64 F -GLIBC_2.17 sendmmsg F -GLIBC_2.17 sendmsg F -GLIBC_2.17 sendto F -GLIBC_2.17 setaliasent F -GLIBC_2.17 setbuf F -GLIBC_2.17 setbuffer F -GLIBC_2.17 setcontext F -GLIBC_2.17 setdomainname F -GLIBC_2.17 setegid F -GLIBC_2.17 setenv F -GLIBC_2.17 seteuid F -GLIBC_2.17 setfsent F -GLIBC_2.17 setfsgid F -GLIBC_2.17 setfsuid F -GLIBC_2.17 setgid F -GLIBC_2.17 setgrent F -GLIBC_2.17 setgroups F -GLIBC_2.17 sethostent F -GLIBC_2.17 sethostid F -GLIBC_2.17 sethostname F -GLIBC_2.17 setipv4sourcefilter F -GLIBC_2.17 setitimer F -GLIBC_2.17 setjmp F -GLIBC_2.17 setlinebuf F -GLIBC_2.17 setlocale F -GLIBC_2.17 setlogin F -GLIBC_2.17 setlogmask F -GLIBC_2.17 setmntent F -GLIBC_2.17 setnetent F -GLIBC_2.17 setnetgrent F -GLIBC_2.17 setns F -GLIBC_2.17 setpgid F -GLIBC_2.17 setpgrp F -GLIBC_2.17 setpriority F -GLIBC_2.17 setprotoent F -GLIBC_2.17 setpwent F -GLIBC_2.17 setregid F -GLIBC_2.17 setresgid F -GLIBC_2.17 setresuid F -GLIBC_2.17 setreuid F -GLIBC_2.17 setrlimit F -GLIBC_2.17 setrlimit64 F -GLIBC_2.17 setrpcent F -GLIBC_2.17 setservent F -GLIBC_2.17 setsgent F -GLIBC_2.17 setsid F -GLIBC_2.17 setsockopt F -GLIBC_2.17 setsourcefilter F -GLIBC_2.17 setspent F -GLIBC_2.17 setstate F -GLIBC_2.17 setstate_r F -GLIBC_2.17 settimeofday F -GLIBC_2.17 setttyent F -GLIBC_2.17 setuid F -GLIBC_2.17 setusershell F -GLIBC_2.17 setutent F -GLIBC_2.17 setutxent F -GLIBC_2.17 setvbuf F -GLIBC_2.17 setxattr F -GLIBC_2.17 sgetsgent F -GLIBC_2.17 sgetsgent_r F -GLIBC_2.17 sgetspent F -GLIBC_2.17 sgetspent_r F -GLIBC_2.17 shmat F -GLIBC_2.17 shmctl F -GLIBC_2.17 shmdt F -GLIBC_2.17 shmget F -GLIBC_2.17 shutdown F -GLIBC_2.17 sigaction F -GLIBC_2.17 sigaddset F -GLIBC_2.17 sigaltstack F -GLIBC_2.17 sigandset F -GLIBC_2.17 sigblock F -GLIBC_2.17 sigdelset F -GLIBC_2.17 sigemptyset F -GLIBC_2.17 sigfillset F -GLIBC_2.17 siggetmask F -GLIBC_2.17 sighold F -GLIBC_2.17 sigignore F -GLIBC_2.17 siginterrupt F -GLIBC_2.17 sigisemptyset F -GLIBC_2.17 sigismember F -GLIBC_2.17 siglongjmp F -GLIBC_2.17 signal F -GLIBC_2.17 signalfd F -GLIBC_2.17 sigorset F -GLIBC_2.17 sigpause F -GLIBC_2.17 sigpending F -GLIBC_2.17 sigprocmask F -GLIBC_2.17 sigqueue F -GLIBC_2.17 sigrelse F -GLIBC_2.17 sigreturn F -GLIBC_2.17 sigset F -GLIBC_2.17 sigsetmask F -GLIBC_2.17 sigstack F -GLIBC_2.17 sigsuspend F -GLIBC_2.17 sigtimedwait F -GLIBC_2.17 sigvec F -GLIBC_2.17 sigwait F -GLIBC_2.17 sigwaitinfo F -GLIBC_2.17 sleep F -GLIBC_2.17 snprintf F -GLIBC_2.17 sockatmark F -GLIBC_2.17 socket F -GLIBC_2.17 socketpair F -GLIBC_2.17 splice F -GLIBC_2.17 sprintf F -GLIBC_2.17 sprofil F -GLIBC_2.17 srand F -GLIBC_2.17 srand48 F -GLIBC_2.17 srand48_r F -GLIBC_2.17 srandom F -GLIBC_2.17 srandom_r F -GLIBC_2.17 sscanf F -GLIBC_2.17 ssignal F -GLIBC_2.17 sstk F -GLIBC_2.17 statfs F -GLIBC_2.17 statfs64 F -GLIBC_2.17 statvfs F -GLIBC_2.17 statvfs64 F -GLIBC_2.17 stderr D 0x8 -GLIBC_2.17 stdin D 0x8 -GLIBC_2.17 stdout D 0x8 -GLIBC_2.17 step F -GLIBC_2.17 stime F -GLIBC_2.17 stpcpy F -GLIBC_2.17 stpncpy F -GLIBC_2.17 strcasecmp F -GLIBC_2.17 strcasecmp_l F -GLIBC_2.17 strcasestr F -GLIBC_2.17 strcat F -GLIBC_2.17 strchr F -GLIBC_2.17 strchrnul F -GLIBC_2.17 strcmp F -GLIBC_2.17 strcoll F -GLIBC_2.17 strcoll_l F -GLIBC_2.17 strcpy F -GLIBC_2.17 strcspn F -GLIBC_2.17 strdup F -GLIBC_2.17 strerror F -GLIBC_2.17 strerror_l F -GLIBC_2.17 strerror_r F -GLIBC_2.17 strfmon F -GLIBC_2.17 strfmon_l F -GLIBC_2.17 strfry F -GLIBC_2.17 strftime F -GLIBC_2.17 strftime_l F -GLIBC_2.17 strlen F -GLIBC_2.17 strncasecmp F -GLIBC_2.17 strncasecmp_l F -GLIBC_2.17 strncat F -GLIBC_2.17 strncmp F -GLIBC_2.17 strncpy F -GLIBC_2.17 strndup F -GLIBC_2.17 strnlen F -GLIBC_2.17 strpbrk F -GLIBC_2.17 strptime F -GLIBC_2.17 strptime_l F -GLIBC_2.17 strrchr F -GLIBC_2.17 strsep F -GLIBC_2.17 strsignal F -GLIBC_2.17 strspn F -GLIBC_2.17 strstr F -GLIBC_2.17 strtod F -GLIBC_2.17 strtod_l F -GLIBC_2.17 strtof F -GLIBC_2.17 strtof_l F -GLIBC_2.17 strtoimax F -GLIBC_2.17 strtok F -GLIBC_2.17 strtok_r F -GLIBC_2.17 strtol F -GLIBC_2.17 strtol_l F -GLIBC_2.17 strtold F -GLIBC_2.17 strtold_l F -GLIBC_2.17 strtoll F -GLIBC_2.17 strtoll_l F -GLIBC_2.17 strtoq F -GLIBC_2.17 strtoul F -GLIBC_2.17 strtoul_l F -GLIBC_2.17 strtoull F -GLIBC_2.17 strtoull_l F -GLIBC_2.17 strtoumax F -GLIBC_2.17 strtouq F -GLIBC_2.17 strverscmp F -GLIBC_2.17 strxfrm F -GLIBC_2.17 strxfrm_l F -GLIBC_2.17 stty F -GLIBC_2.17 svc_exit F -GLIBC_2.17 svc_fdset D 0x80 -GLIBC_2.17 svc_getreq F -GLIBC_2.17 svc_getreq_common F -GLIBC_2.17 svc_getreq_poll F -GLIBC_2.17 svc_getreqset F -GLIBC_2.17 svc_max_pollfd D 0x4 -GLIBC_2.17 svc_pollfd D 0x8 -GLIBC_2.17 svc_register F -GLIBC_2.17 svc_run F -GLIBC_2.17 svc_sendreply F -GLIBC_2.17 svc_unregister F -GLIBC_2.17 svcauthdes_stats D 0x18 -GLIBC_2.17 svcerr_auth F -GLIBC_2.17 svcerr_decode F -GLIBC_2.17 svcerr_noproc F -GLIBC_2.17 svcerr_noprog F -GLIBC_2.17 svcerr_progvers F -GLIBC_2.17 svcerr_systemerr F -GLIBC_2.17 svcerr_weakauth F -GLIBC_2.17 svcfd_create F -GLIBC_2.17 svcraw_create F -GLIBC_2.17 svctcp_create F -GLIBC_2.17 svcudp_bufcreate F -GLIBC_2.17 svcudp_create F -GLIBC_2.17 svcudp_enablecache F -GLIBC_2.17 svcunix_create F -GLIBC_2.17 svcunixfd_create F -GLIBC_2.17 swab F -GLIBC_2.17 swapcontext F -GLIBC_2.17 swapoff F -GLIBC_2.17 swapon F -GLIBC_2.17 swprintf F -GLIBC_2.17 swscanf F -GLIBC_2.17 symlink F -GLIBC_2.17 symlinkat F -GLIBC_2.17 sync F -GLIBC_2.17 sync_file_range F -GLIBC_2.17 syncfs F -GLIBC_2.17 sys_errlist D 0x438 -GLIBC_2.17 sys_nerr D 0x4 -GLIBC_2.17 sys_sigabbrev D 0x208 -GLIBC_2.17 sys_siglist D 0x208 -GLIBC_2.17 syscall F -GLIBC_2.17 sysconf F -GLIBC_2.17 sysctl F -GLIBC_2.17 sysinfo F -GLIBC_2.17 syslog F -GLIBC_2.17 system F -GLIBC_2.17 sysv_signal F -GLIBC_2.17 tcdrain F -GLIBC_2.17 tcflow F -GLIBC_2.17 tcflush F -GLIBC_2.17 tcgetattr F -GLIBC_2.17 tcgetpgrp F -GLIBC_2.17 tcgetsid F -GLIBC_2.17 tcsendbreak F -GLIBC_2.17 tcsetattr F -GLIBC_2.17 tcsetpgrp F -GLIBC_2.17 tdelete F -GLIBC_2.17 tdestroy F -GLIBC_2.17 tee F -GLIBC_2.17 telldir F -GLIBC_2.17 tempnam F -GLIBC_2.17 textdomain F -GLIBC_2.17 tfind F -GLIBC_2.17 time F -GLIBC_2.17 timegm F -GLIBC_2.17 timelocal F -GLIBC_2.17 timerfd_create F -GLIBC_2.17 timerfd_gettime F -GLIBC_2.17 timerfd_settime F -GLIBC_2.17 times F -GLIBC_2.17 timespec_get F -GLIBC_2.17 timezone D 0x8 -GLIBC_2.17 tmpfile F -GLIBC_2.17 tmpfile64 F -GLIBC_2.17 tmpnam F -GLIBC_2.17 tmpnam_r F -GLIBC_2.17 toascii F -GLIBC_2.17 tolower F -GLIBC_2.17 tolower_l F -GLIBC_2.17 toupper F -GLIBC_2.17 toupper_l F -GLIBC_2.17 towctrans F -GLIBC_2.17 towctrans_l F -GLIBC_2.17 towlower F -GLIBC_2.17 towlower_l F -GLIBC_2.17 towupper F -GLIBC_2.17 towupper_l F -GLIBC_2.17 tr_break F -GLIBC_2.17 truncate F -GLIBC_2.17 truncate64 F -GLIBC_2.17 tsearch F -GLIBC_2.17 ttyname F -GLIBC_2.17 ttyname_r F -GLIBC_2.17 ttyslot F -GLIBC_2.17 twalk F -GLIBC_2.17 tzname D 0x10 -GLIBC_2.17 tzset F -GLIBC_2.17 ualarm F -GLIBC_2.17 ulckpwdf F -GLIBC_2.17 ulimit F -GLIBC_2.17 umask F -GLIBC_2.17 umount F -GLIBC_2.17 umount2 F -GLIBC_2.17 uname F -GLIBC_2.17 ungetc F -GLIBC_2.17 ungetwc F -GLIBC_2.17 unlink F -GLIBC_2.17 unlinkat F -GLIBC_2.17 unlockpt F -GLIBC_2.17 unsetenv F -GLIBC_2.17 unshare F -GLIBC_2.17 updwtmp F -GLIBC_2.17 updwtmpx F -GLIBC_2.17 uselib F -GLIBC_2.17 uselocale F -GLIBC_2.17 user2netname F -GLIBC_2.17 usleep F -GLIBC_2.17 ustat F -GLIBC_2.17 utime F -GLIBC_2.17 utimensat F -GLIBC_2.17 utimes F -GLIBC_2.17 utmpname F -GLIBC_2.17 utmpxname F -GLIBC_2.17 valloc F -GLIBC_2.17 vasprintf F -GLIBC_2.17 vdprintf F -GLIBC_2.17 verr F -GLIBC_2.17 verrx F -GLIBC_2.17 versionsort F -GLIBC_2.17 versionsort64 F -GLIBC_2.17 vfork F -GLIBC_2.17 vfprintf F -GLIBC_2.17 vfscanf F -GLIBC_2.17 vfwprintf F -GLIBC_2.17 vfwscanf F -GLIBC_2.17 vhangup F -GLIBC_2.17 vlimit F -GLIBC_2.17 vmsplice F -GLIBC_2.17 vprintf F -GLIBC_2.17 vscanf F -GLIBC_2.17 vsnprintf F -GLIBC_2.17 vsprintf F -GLIBC_2.17 vsscanf F -GLIBC_2.17 vswprintf F -GLIBC_2.17 vswscanf F -GLIBC_2.17 vsyslog F -GLIBC_2.17 vtimes F -GLIBC_2.17 vwarn F -GLIBC_2.17 vwarnx F -GLIBC_2.17 vwprintf F -GLIBC_2.17 vwscanf F -GLIBC_2.17 wait F -GLIBC_2.17 wait3 F -GLIBC_2.17 wait4 F -GLIBC_2.17 waitid F -GLIBC_2.17 waitpid F -GLIBC_2.17 warn F -GLIBC_2.17 warnx F -GLIBC_2.17 wcpcpy F -GLIBC_2.17 wcpncpy F -GLIBC_2.17 wcrtomb F -GLIBC_2.17 wcscasecmp F -GLIBC_2.17 wcscasecmp_l F -GLIBC_2.17 wcscat F -GLIBC_2.17 wcschr F -GLIBC_2.17 wcschrnul F -GLIBC_2.17 wcscmp F -GLIBC_2.17 wcscoll F -GLIBC_2.17 wcscoll_l F -GLIBC_2.17 wcscpy F -GLIBC_2.17 wcscspn F -GLIBC_2.17 wcsdup F -GLIBC_2.17 wcsftime F -GLIBC_2.17 wcsftime_l F -GLIBC_2.17 wcslen F -GLIBC_2.17 wcsncasecmp F -GLIBC_2.17 wcsncasecmp_l F -GLIBC_2.17 wcsncat F -GLIBC_2.17 wcsncmp F -GLIBC_2.17 wcsncpy F -GLIBC_2.17 wcsnlen F -GLIBC_2.17 wcsnrtombs F -GLIBC_2.17 wcspbrk F -GLIBC_2.17 wcsrchr F -GLIBC_2.17 wcsrtombs F -GLIBC_2.17 wcsspn F -GLIBC_2.17 wcsstr F -GLIBC_2.17 wcstod F -GLIBC_2.17 wcstod_l F -GLIBC_2.17 wcstof F -GLIBC_2.17 wcstof_l F -GLIBC_2.17 wcstoimax F -GLIBC_2.17 wcstok F -GLIBC_2.17 wcstol F -GLIBC_2.17 wcstol_l F -GLIBC_2.17 wcstold F -GLIBC_2.17 wcstold_l F -GLIBC_2.17 wcstoll F -GLIBC_2.17 wcstoll_l F -GLIBC_2.17 wcstombs F -GLIBC_2.17 wcstoq F -GLIBC_2.17 wcstoul F -GLIBC_2.17 wcstoul_l F -GLIBC_2.17 wcstoull F -GLIBC_2.17 wcstoull_l F -GLIBC_2.17 wcstoumax F -GLIBC_2.17 wcstouq F -GLIBC_2.17 wcswcs F -GLIBC_2.17 wcswidth F -GLIBC_2.17 wcsxfrm F -GLIBC_2.17 wcsxfrm_l F -GLIBC_2.17 wctob F -GLIBC_2.17 wctomb F -GLIBC_2.17 wctrans F -GLIBC_2.17 wctrans_l F -GLIBC_2.17 wctype F -GLIBC_2.17 wctype_l F -GLIBC_2.17 wcwidth F -GLIBC_2.17 wmemchr F -GLIBC_2.17 wmemcmp F -GLIBC_2.17 wmemcpy F -GLIBC_2.17 wmemmove F -GLIBC_2.17 wmempcpy F -GLIBC_2.17 wmemset F -GLIBC_2.17 wordexp F -GLIBC_2.17 wordfree F -GLIBC_2.17 wprintf F -GLIBC_2.17 write F -GLIBC_2.17 writev F -GLIBC_2.17 wscanf F -GLIBC_2.17 xdecrypt F -GLIBC_2.17 xdr_accepted_reply F -GLIBC_2.17 xdr_array F -GLIBC_2.17 xdr_authdes_cred F -GLIBC_2.17 xdr_authdes_verf F -GLIBC_2.17 xdr_authunix_parms F -GLIBC_2.17 xdr_bool F -GLIBC_2.17 xdr_bytes F -GLIBC_2.17 xdr_callhdr F -GLIBC_2.17 xdr_callmsg F -GLIBC_2.17 xdr_char F -GLIBC_2.17 xdr_cryptkeyarg F -GLIBC_2.17 xdr_cryptkeyarg2 F -GLIBC_2.17 xdr_cryptkeyres F -GLIBC_2.17 xdr_des_block F -GLIBC_2.17 xdr_double F -GLIBC_2.17 xdr_enum F -GLIBC_2.17 xdr_float F -GLIBC_2.17 xdr_free F -GLIBC_2.17 xdr_getcredres F -GLIBC_2.17 xdr_hyper F -GLIBC_2.17 xdr_int F -GLIBC_2.17 xdr_int16_t F -GLIBC_2.17 xdr_int32_t F -GLIBC_2.17 xdr_int64_t F -GLIBC_2.17 xdr_int8_t F -GLIBC_2.17 xdr_key_netstarg F -GLIBC_2.17 xdr_key_netstres F -GLIBC_2.17 xdr_keybuf F -GLIBC_2.17 xdr_keystatus F -GLIBC_2.17 xdr_long F -GLIBC_2.17 xdr_longlong_t F -GLIBC_2.17 xdr_netnamestr F -GLIBC_2.17 xdr_netobj F -GLIBC_2.17 xdr_opaque F -GLIBC_2.17 xdr_opaque_auth F -GLIBC_2.17 xdr_pmap F -GLIBC_2.17 xdr_pmaplist F -GLIBC_2.17 xdr_pointer F -GLIBC_2.17 xdr_quad_t F -GLIBC_2.17 xdr_reference F -GLIBC_2.17 xdr_rejected_reply F -GLIBC_2.17 xdr_replymsg F -GLIBC_2.17 xdr_rmtcall_args F -GLIBC_2.17 xdr_rmtcallres F -GLIBC_2.17 xdr_short F -GLIBC_2.17 xdr_sizeof F -GLIBC_2.17 xdr_string F -GLIBC_2.17 xdr_u_char F -GLIBC_2.17 xdr_u_hyper F -GLIBC_2.17 xdr_u_int F -GLIBC_2.17 xdr_u_long F -GLIBC_2.17 xdr_u_longlong_t F -GLIBC_2.17 xdr_u_quad_t F -GLIBC_2.17 xdr_u_short F -GLIBC_2.17 xdr_uint16_t F -GLIBC_2.17 xdr_uint32_t F -GLIBC_2.17 xdr_uint64_t F -GLIBC_2.17 xdr_uint8_t F -GLIBC_2.17 xdr_union F -GLIBC_2.17 xdr_unixcred F -GLIBC_2.17 xdr_vector F -GLIBC_2.17 xdr_void F -GLIBC_2.17 xdr_wrapstring F -GLIBC_2.17 xdrmem_create F -GLIBC_2.17 xdrrec_create F -GLIBC_2.17 xdrrec_endofrecord F -GLIBC_2.17 xdrrec_eof F -GLIBC_2.17 xdrrec_skiprecord F -GLIBC_2.17 xdrstdio_create F -GLIBC_2.17 xencrypt F -GLIBC_2.17 xprt_register F -GLIBC_2.17 xprt_unregister F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist deleted file mode 100644 index 5eb056baf5..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist +++ /dev/null @@ -1,2327 +0,0 @@ -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fallocate64 F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _sys_errlist D 0x438 -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x438 -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 __ppc_get_timebase_freq F -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 _Exit F -GLIBC_2.3 _IO_2_1_stderr_ D 0xe0 -GLIBC_2.3 _IO_2_1_stdin_ D 0xe0 -GLIBC_2.3 _IO_2_1_stdout_ D 0xe0 -GLIBC_2.3 _IO_adjust_column F -GLIBC_2.3 _IO_adjust_wcolumn F -GLIBC_2.3 _IO_default_doallocate F -GLIBC_2.3 _IO_default_finish F -GLIBC_2.3 _IO_default_pbackfail F -GLIBC_2.3 _IO_default_uflow F -GLIBC_2.3 _IO_default_xsgetn F -GLIBC_2.3 _IO_default_xsputn F -GLIBC_2.3 _IO_do_write F -GLIBC_2.3 _IO_doallocbuf F -GLIBC_2.3 _IO_fclose F -GLIBC_2.3 _IO_fdopen F -GLIBC_2.3 _IO_feof F -GLIBC_2.3 _IO_ferror F -GLIBC_2.3 _IO_fflush F -GLIBC_2.3 _IO_fgetpos F -GLIBC_2.3 _IO_fgetpos64 F -GLIBC_2.3 _IO_fgets F -GLIBC_2.3 _IO_file_attach F -GLIBC_2.3 _IO_file_close F -GLIBC_2.3 _IO_file_close_it F -GLIBC_2.3 _IO_file_doallocate F -GLIBC_2.3 _IO_file_finish F -GLIBC_2.3 _IO_file_fopen F -GLIBC_2.3 _IO_file_init F -GLIBC_2.3 _IO_file_jumps D 0xa8 -GLIBC_2.3 _IO_file_open F -GLIBC_2.3 _IO_file_overflow F -GLIBC_2.3 _IO_file_read F -GLIBC_2.3 _IO_file_seek F -GLIBC_2.3 _IO_file_seekoff F -GLIBC_2.3 _IO_file_setbuf F -GLIBC_2.3 _IO_file_stat F -GLIBC_2.3 _IO_file_sync F -GLIBC_2.3 _IO_file_underflow F -GLIBC_2.3 _IO_file_write F -GLIBC_2.3 _IO_file_xsputn F -GLIBC_2.3 _IO_flockfile F -GLIBC_2.3 _IO_flush_all F -GLIBC_2.3 _IO_flush_all_linebuffered F -GLIBC_2.3 _IO_fopen F -GLIBC_2.3 _IO_fprintf F -GLIBC_2.3 _IO_fputs F -GLIBC_2.3 _IO_fread F -GLIBC_2.3 _IO_free_backup_area F -GLIBC_2.3 _IO_free_wbackup_area F -GLIBC_2.3 _IO_fsetpos F -GLIBC_2.3 _IO_fsetpos64 F -GLIBC_2.3 _IO_ftell F -GLIBC_2.3 _IO_ftrylockfile F -GLIBC_2.3 _IO_funlockfile F -GLIBC_2.3 _IO_fwrite F -GLIBC_2.3 _IO_getc F -GLIBC_2.3 _IO_getline F -GLIBC_2.3 _IO_getline_info F -GLIBC_2.3 _IO_gets F -GLIBC_2.3 _IO_init F -GLIBC_2.3 _IO_init_marker F -GLIBC_2.3 _IO_init_wmarker F -GLIBC_2.3 _IO_iter_begin F -GLIBC_2.3 _IO_iter_end F -GLIBC_2.3 _IO_iter_file F -GLIBC_2.3 _IO_iter_next F -GLIBC_2.3 _IO_least_wmarker F -GLIBC_2.3 _IO_link_in F -GLIBC_2.3 _IO_list_all D 0x8 -GLIBC_2.3 _IO_list_lock F -GLIBC_2.3 _IO_list_resetlock F -GLIBC_2.3 _IO_list_unlock F -GLIBC_2.3 _IO_marker_delta F -GLIBC_2.3 _IO_marker_difference F -GLIBC_2.3 _IO_padn F -GLIBC_2.3 _IO_peekc_locked F -GLIBC_2.3 _IO_popen F -GLIBC_2.3 _IO_printf F -GLIBC_2.3 _IO_proc_close F -GLIBC_2.3 _IO_proc_open F -GLIBC_2.3 _IO_putc F -GLIBC_2.3 _IO_puts F -GLIBC_2.3 _IO_remove_marker F -GLIBC_2.3 _IO_seekmark F -GLIBC_2.3 _IO_seekoff F -GLIBC_2.3 _IO_seekpos F -GLIBC_2.3 _IO_seekwmark F -GLIBC_2.3 _IO_setb F -GLIBC_2.3 _IO_setbuffer F -GLIBC_2.3 _IO_setvbuf F -GLIBC_2.3 _IO_sgetn F -GLIBC_2.3 _IO_sprintf F -GLIBC_2.3 _IO_sputbackc F -GLIBC_2.3 _IO_sputbackwc F -GLIBC_2.3 _IO_sscanf F -GLIBC_2.3 _IO_str_init_readonly F -GLIBC_2.3 _IO_str_init_static F -GLIBC_2.3 _IO_str_overflow F -GLIBC_2.3 _IO_str_pbackfail F -GLIBC_2.3 _IO_str_seekoff F -GLIBC_2.3 _IO_str_underflow F -GLIBC_2.3 _IO_sungetc F -GLIBC_2.3 _IO_sungetwc F -GLIBC_2.3 _IO_switch_to_get_mode F -GLIBC_2.3 _IO_switch_to_main_wget_area F -GLIBC_2.3 _IO_switch_to_wbackup_area F -GLIBC_2.3 _IO_switch_to_wget_mode F -GLIBC_2.3 _IO_un_link F -GLIBC_2.3 _IO_ungetc F -GLIBC_2.3 _IO_unsave_markers F -GLIBC_2.3 _IO_unsave_wmarkers F -GLIBC_2.3 _IO_vfprintf F -GLIBC_2.3 _IO_vfscanf F -GLIBC_2.3 _IO_vsprintf F -GLIBC_2.3 _IO_wdefault_doallocate F -GLIBC_2.3 _IO_wdefault_finish F -GLIBC_2.3 _IO_wdefault_pbackfail F -GLIBC_2.3 _IO_wdefault_uflow F -GLIBC_2.3 _IO_wdefault_xsgetn F -GLIBC_2.3 _IO_wdefault_xsputn F -GLIBC_2.3 _IO_wdo_write F -GLIBC_2.3 _IO_wdoallocbuf F -GLIBC_2.3 _IO_wfile_jumps D 0xa8 -GLIBC_2.3 _IO_wfile_overflow F -GLIBC_2.3 _IO_wfile_seekoff F -GLIBC_2.3 _IO_wfile_sync F -GLIBC_2.3 _IO_wfile_underflow F -GLIBC_2.3 _IO_wfile_xsputn F -GLIBC_2.3 _IO_wmarker_delta F -GLIBC_2.3 _IO_wsetb F -GLIBC_2.3 __adjtimex F -GLIBC_2.3 __after_morecore_hook D 0x8 -GLIBC_2.3 __argz_count F -GLIBC_2.3 __argz_next F -GLIBC_2.3 __argz_stringify F -GLIBC_2.3 __asprintf F -GLIBC_2.3 __assert F -GLIBC_2.3 __assert_fail F -GLIBC_2.3 __assert_perror_fail F -GLIBC_2.3 __backtrace F -GLIBC_2.3 __backtrace_symbols F -GLIBC_2.3 __backtrace_symbols_fd F -GLIBC_2.3 __bsd_getpgrp F -GLIBC_2.3 __bzero F -GLIBC_2.3 __check_rhosts_file D 0x4 -GLIBC_2.3 __clone F -GLIBC_2.3 __close F -GLIBC_2.3 __cmsg_nxthdr F -GLIBC_2.3 __connect F -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_get_mb_cur_max F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __curbrk D 0x8 -GLIBC_2.3 __cxa_atexit F -GLIBC_2.3 __cxa_finalize F -GLIBC_2.3 __cyg_profile_func_enter F -GLIBC_2.3 __cyg_profile_func_exit F -GLIBC_2.3 __daylight D 0x4 -GLIBC_2.3 __dcgettext F -GLIBC_2.3 __default_morecore F -GLIBC_2.3 __dgettext F -GLIBC_2.3 __dup2 F -GLIBC_2.3 __duplocale F -GLIBC_2.3 __endmntent F -GLIBC_2.3 __environ D 0x8 -GLIBC_2.3 __errno_location F -GLIBC_2.3 __fbufsize F -GLIBC_2.3 __fcntl F -GLIBC_2.3 __ffs F -GLIBC_2.3 __finite F -GLIBC_2.3 __finitef F -GLIBC_2.3 __finitel F -GLIBC_2.3 __flbf F -GLIBC_2.3 __fork F -GLIBC_2.3 __fpending F -GLIBC_2.3 __fpu_control D 0x4 -GLIBC_2.3 __fpurge F -GLIBC_2.3 __freadable F -GLIBC_2.3 __freading F -GLIBC_2.3 __free_hook D 0x8 -GLIBC_2.3 __freelocale F -GLIBC_2.3 __fsetlocking F -GLIBC_2.3 __fwritable F -GLIBC_2.3 __fwriting F -GLIBC_2.3 __fxstat F -GLIBC_2.3 __fxstat64 F -GLIBC_2.3 __getdelim F -GLIBC_2.3 __getmntent_r F -GLIBC_2.3 __getpagesize F -GLIBC_2.3 __getpgid F -GLIBC_2.3 __getpid F -GLIBC_2.3 __gettimeofday F -GLIBC_2.3 __gmtime_r F -GLIBC_2.3 __h_errno_location F -GLIBC_2.3 __isalnum_l F -GLIBC_2.3 __isalpha_l F -GLIBC_2.3 __isascii_l F -GLIBC_2.3 __isblank_l F -GLIBC_2.3 __iscntrl_l F -GLIBC_2.3 __isctype F -GLIBC_2.3 __isdigit_l F -GLIBC_2.3 __isgraph_l F -GLIBC_2.3 __isinf F -GLIBC_2.3 __isinff F -GLIBC_2.3 __isinfl F -GLIBC_2.3 __islower_l F -GLIBC_2.3 __isnan F -GLIBC_2.3 __isnanf F -GLIBC_2.3 __isnanl F -GLIBC_2.3 __isprint_l F -GLIBC_2.3 __ispunct_l F -GLIBC_2.3 __isspace_l F -GLIBC_2.3 __isupper_l F -GLIBC_2.3 __iswalnum_l F -GLIBC_2.3 __iswalpha_l F -GLIBC_2.3 __iswblank_l F -GLIBC_2.3 __iswcntrl_l F -GLIBC_2.3 __iswctype F -GLIBC_2.3 __iswctype_l F -GLIBC_2.3 __iswdigit_l F -GLIBC_2.3 __iswgraph_l F -GLIBC_2.3 __iswlower_l F -GLIBC_2.3 __iswprint_l F -GLIBC_2.3 __iswpunct_l F -GLIBC_2.3 __iswspace_l F -GLIBC_2.3 __iswupper_l F -GLIBC_2.3 __iswxdigit_l F -GLIBC_2.3 __isxdigit_l F -GLIBC_2.3 __ivaliduser F -GLIBC_2.3 __key_decryptsession_pk_LOCAL D 0x8 -GLIBC_2.3 __key_encryptsession_pk_LOCAL D 0x8 -GLIBC_2.3 __key_gendes_LOCAL D 0x8 -GLIBC_2.3 __libc_allocate_rtsig F -GLIBC_2.3 __libc_calloc F -GLIBC_2.3 __libc_current_sigrtmax F -GLIBC_2.3 __libc_current_sigrtmin F -GLIBC_2.3 __libc_free F -GLIBC_2.3 __libc_freeres F -GLIBC_2.3 __libc_init_first F -GLIBC_2.3 __libc_mallinfo F -GLIBC_2.3 __libc_malloc F -GLIBC_2.3 __libc_mallopt F -GLIBC_2.3 __libc_memalign F -GLIBC_2.3 __libc_pvalloc F -GLIBC_2.3 __libc_realloc F -GLIBC_2.3 __libc_sa_len F -GLIBC_2.3 __libc_start_main F -GLIBC_2.3 __libc_valloc F -GLIBC_2.3 __lseek F -GLIBC_2.3 __lxstat F -GLIBC_2.3 __lxstat64 F -GLIBC_2.3 __malloc_hook D 0x8 -GLIBC_2.3 __malloc_initialize_hook D 0x8 -GLIBC_2.3 __mbrlen F -GLIBC_2.3 __mbrtowc F -GLIBC_2.3 __memalign_hook D 0x8 -GLIBC_2.3 __mempcpy F -GLIBC_2.3 __mempcpy_small F -GLIBC_2.3 __monstartup F -GLIBC_2.3 __morecore D 0x8 -GLIBC_2.3 __nanosleep F -GLIBC_2.3 __newlocale F -GLIBC_2.3 __nl_langinfo_l F -GLIBC_2.3 __nss_configure_lookup F -GLIBC_2.3 __nss_database_lookup F -GLIBC_2.3 __nss_group_lookup F -GLIBC_2.3 __nss_hostname_digits_dots F -GLIBC_2.3 __nss_hosts_lookup F -GLIBC_2.3 __nss_next F -GLIBC_2.3 __nss_passwd_lookup F -GLIBC_2.3 __open F -GLIBC_2.3 __open64 F -GLIBC_2.3 __overflow F -GLIBC_2.3 __pipe F -GLIBC_2.3 __poll F -GLIBC_2.3 __pread64 F -GLIBC_2.3 __printf_fp F -GLIBC_2.3 __profile_frequency F -GLIBC_2.3 __progname D 0x8 -GLIBC_2.3 __progname_full D 0x8 -GLIBC_2.3 __pwrite64 F -GLIBC_2.3 __rawmemchr F -GLIBC_2.3 __rcmd_errstr D 0x8 -GLIBC_2.3 __read F -GLIBC_2.3 __realloc_hook D 0x8 -GLIBC_2.3 __res_init F -GLIBC_2.3 __res_nclose F -GLIBC_2.3 __res_ninit F -GLIBC_2.3 __res_randomid F -GLIBC_2.3 __res_state F -GLIBC_2.3 __rpc_thread_createerr F -GLIBC_2.3 __rpc_thread_svc_fdset F -GLIBC_2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.3 __rpc_thread_svc_pollfd F -GLIBC_2.3 __sbrk F -GLIBC_2.3 __sched_get_priority_max F -GLIBC_2.3 __sched_get_priority_min F -GLIBC_2.3 __sched_getparam F -GLIBC_2.3 __sched_getscheduler F -GLIBC_2.3 __sched_setscheduler F -GLIBC_2.3 __sched_yield F -GLIBC_2.3 __secure_getenv F -GLIBC_2.3 __select F -GLIBC_2.3 __send F -GLIBC_2.3 __setmntent F -GLIBC_2.3 __setpgid F -GLIBC_2.3 __sigaction F -GLIBC_2.3 __sigaddset F -GLIBC_2.3 __sigdelset F -GLIBC_2.3 __sigismember F -GLIBC_2.3 __signbit F -GLIBC_2.3 __signbitf F -GLIBC_2.3 __sigpause F -GLIBC_2.3 __sigsetjmp F -GLIBC_2.3 __sigsuspend F -GLIBC_2.3 __statfs F -GLIBC_2.3 __stpcpy F -GLIBC_2.3 __stpcpy_small F -GLIBC_2.3 __stpncpy F -GLIBC_2.3 __strcasecmp F -GLIBC_2.3 __strcasecmp_l F -GLIBC_2.3 __strcasestr F -GLIBC_2.3 __strcoll_l F -GLIBC_2.3 __strcpy_small F -GLIBC_2.3 __strcspn_c1 F -GLIBC_2.3 __strcspn_c2 F -GLIBC_2.3 __strcspn_c3 F -GLIBC_2.3 __strdup F -GLIBC_2.3 __strerror_r F -GLIBC_2.3 __strfmon_l F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __strncasecmp_l F -GLIBC_2.3 __strndup F -GLIBC_2.3 __strpbrk_c2 F -GLIBC_2.3 __strpbrk_c3 F -GLIBC_2.3 __strsep_1c F -GLIBC_2.3 __strsep_2c F -GLIBC_2.3 __strsep_3c F -GLIBC_2.3 __strsep_g F -GLIBC_2.3 __strspn_c1 F -GLIBC_2.3 __strspn_c2 F -GLIBC_2.3 __strspn_c3 F -GLIBC_2.3 __strtod_internal F -GLIBC_2.3 __strtod_l F -GLIBC_2.3 __strtof_internal F -GLIBC_2.3 __strtof_l F -GLIBC_2.3 __strtok_r F -GLIBC_2.3 __strtok_r_1c F -GLIBC_2.3 __strtol_internal F -GLIBC_2.3 __strtol_l F -GLIBC_2.3 __strtold_internal F -GLIBC_2.3 __strtold_l F -GLIBC_2.3 __strtoll_internal F -GLIBC_2.3 __strtoll_l F -GLIBC_2.3 __strtoul_internal F -GLIBC_2.3 __strtoul_l F -GLIBC_2.3 __strtoull_internal F -GLIBC_2.3 __strtoull_l F -GLIBC_2.3 __strverscmp F -GLIBC_2.3 __strxfrm_l F -GLIBC_2.3 __sysconf F -GLIBC_2.3 __sysctl F -GLIBC_2.3 __sysv_signal F -GLIBC_2.3 __timezone D 0x8 -GLIBC_2.3 __toascii_l F -GLIBC_2.3 __tolower_l F -GLIBC_2.3 __toupper_l F -GLIBC_2.3 __towctrans F -GLIBC_2.3 __towctrans_l F -GLIBC_2.3 __towlower_l F -GLIBC_2.3 __towupper_l F -GLIBC_2.3 __tzname D 0x10 -GLIBC_2.3 __uflow F -GLIBC_2.3 __underflow F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __vfork F -GLIBC_2.3 __vfscanf F -GLIBC_2.3 __vsnprintf F -GLIBC_2.3 __vsscanf F -GLIBC_2.3 __wait F -GLIBC_2.3 __waitpid F -GLIBC_2.3 __wcscasecmp_l F -GLIBC_2.3 __wcscoll_l F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 __wcsncasecmp_l F -GLIBC_2.3 __wcstod_internal F -GLIBC_2.3 __wcstod_l F -GLIBC_2.3 __wcstof_internal F -GLIBC_2.3 __wcstof_l F -GLIBC_2.3 __wcstol_internal F -GLIBC_2.3 __wcstol_l F -GLIBC_2.3 __wcstold_internal F -GLIBC_2.3 __wcstold_l F -GLIBC_2.3 __wcstoll_internal F -GLIBC_2.3 __wcstoll_l F -GLIBC_2.3 __wcstoul_internal F -GLIBC_2.3 __wcstoul_l F -GLIBC_2.3 __wcstoull_internal F -GLIBC_2.3 __wcstoull_l F -GLIBC_2.3 __wcsxfrm_l F -GLIBC_2.3 __wctrans_l F -GLIBC_2.3 __wctype_l F -GLIBC_2.3 __woverflow F -GLIBC_2.3 __write F -GLIBC_2.3 __wuflow F -GLIBC_2.3 __wunderflow F -GLIBC_2.3 __xmknod F -GLIBC_2.3 __xpg_basename F -GLIBC_2.3 __xpg_sigpause F -GLIBC_2.3 __xstat F -GLIBC_2.3 __xstat64 F -GLIBC_2.3 _authenticate F -GLIBC_2.3 _dl_mcount_wrapper F -GLIBC_2.3 _dl_mcount_wrapper_check F -GLIBC_2.3 _environ D 0x8 -GLIBC_2.3 _exit F -GLIBC_2.3 _flushlbf F -GLIBC_2.3 _libc_intl_domainname D 0x5 -GLIBC_2.3 _longjmp F -GLIBC_2.3 _mcleanup F -GLIBC_2.3 _mcount F -GLIBC_2.3 _nl_default_dirname D 0x12 -GLIBC_2.3 _nl_domain_bindings D 0x8 -GLIBC_2.3 _nl_msg_cat_cntr D 0x4 -GLIBC_2.3 _null_auth D 0x18 -GLIBC_2.3 _obstack D 0x8 -GLIBC_2.3 _obstack_allocated_p F -GLIBC_2.3 _obstack_begin F -GLIBC_2.3 _obstack_begin_1 F -GLIBC_2.3 _obstack_free F -GLIBC_2.3 _obstack_memory_used F -GLIBC_2.3 _obstack_newchunk F -GLIBC_2.3 _res D 0x238 -GLIBC_2.3 _res_hconf D 0x48 -GLIBC_2.3 _rpc_dtablesize F -GLIBC_2.3 _seterr_reply F -GLIBC_2.3 _setjmp F -GLIBC_2.3 _sys_errlist D 0x3f0 -GLIBC_2.3 _sys_nerr D 0x4 -GLIBC_2.3 _sys_siglist D 0x200 -GLIBC_2.3 _tolower F -GLIBC_2.3 _toupper F -GLIBC_2.3 a64l F -GLIBC_2.3 abort F -GLIBC_2.3 abs F -GLIBC_2.3 accept F -GLIBC_2.3 access F -GLIBC_2.3 acct F -GLIBC_2.3 addmntent F -GLIBC_2.3 addseverity F -GLIBC_2.3 adjtime F -GLIBC_2.3 adjtimex F -GLIBC_2.3 advance F -GLIBC_2.3 alarm F -GLIBC_2.3 alphasort F -GLIBC_2.3 alphasort64 F -GLIBC_2.3 argp_err_exit_status D 0x4 -GLIBC_2.3 argp_error F -GLIBC_2.3 argp_failure F -GLIBC_2.3 argp_help F -GLIBC_2.3 argp_parse F -GLIBC_2.3 argp_program_bug_address D 0x8 -GLIBC_2.3 argp_program_version D 0x8 -GLIBC_2.3 argp_program_version_hook D 0x8 -GLIBC_2.3 argp_state_help F -GLIBC_2.3 argp_usage F -GLIBC_2.3 argz_add F -GLIBC_2.3 argz_add_sep F -GLIBC_2.3 argz_append F -GLIBC_2.3 argz_count F -GLIBC_2.3 argz_create F -GLIBC_2.3 argz_create_sep F -GLIBC_2.3 argz_delete F -GLIBC_2.3 argz_extract F -GLIBC_2.3 argz_insert F -GLIBC_2.3 argz_next F -GLIBC_2.3 argz_replace F -GLIBC_2.3 argz_stringify F -GLIBC_2.3 asctime F -GLIBC_2.3 asctime_r F -GLIBC_2.3 asprintf F -GLIBC_2.3 atof F -GLIBC_2.3 atoi F -GLIBC_2.3 atol F -GLIBC_2.3 atoll F -GLIBC_2.3 authdes_create F -GLIBC_2.3 authdes_getucred F -GLIBC_2.3 authdes_pk_create F -GLIBC_2.3 authnone_create F -GLIBC_2.3 authunix_create F -GLIBC_2.3 authunix_create_default F -GLIBC_2.3 backtrace F -GLIBC_2.3 backtrace_symbols F -GLIBC_2.3 backtrace_symbols_fd F -GLIBC_2.3 basename F -GLIBC_2.3 bcmp F -GLIBC_2.3 bcopy F -GLIBC_2.3 bdflush F -GLIBC_2.3 bind F -GLIBC_2.3 bind_textdomain_codeset F -GLIBC_2.3 bindresvport F -GLIBC_2.3 bindtextdomain F -GLIBC_2.3 brk F -GLIBC_2.3 bsd_signal F -GLIBC_2.3 bsearch F -GLIBC_2.3 btowc F -GLIBC_2.3 bzero F -GLIBC_2.3 calloc F -GLIBC_2.3 callrpc F -GLIBC_2.3 canonicalize_file_name F -GLIBC_2.3 capget F -GLIBC_2.3 capset F -GLIBC_2.3 catclose F -GLIBC_2.3 catgets F -GLIBC_2.3 catopen F -GLIBC_2.3 cbc_crypt F -GLIBC_2.3 cfgetispeed F -GLIBC_2.3 cfgetospeed F -GLIBC_2.3 cfmakeraw F -GLIBC_2.3 cfree F -GLIBC_2.3 cfsetispeed F -GLIBC_2.3 cfsetospeed F -GLIBC_2.3 cfsetspeed F -GLIBC_2.3 chdir F -GLIBC_2.3 chflags F -GLIBC_2.3 chmod F -GLIBC_2.3 chown F -GLIBC_2.3 chroot F -GLIBC_2.3 clearenv F -GLIBC_2.3 clearerr F -GLIBC_2.3 clearerr_unlocked F -GLIBC_2.3 clnt_broadcast F -GLIBC_2.3 clnt_create F -GLIBC_2.3 clnt_pcreateerror F -GLIBC_2.3 clnt_perrno F -GLIBC_2.3 clnt_perror F -GLIBC_2.3 clnt_spcreateerror F -GLIBC_2.3 clnt_sperrno F -GLIBC_2.3 clnt_sperror F -GLIBC_2.3 clntraw_create F -GLIBC_2.3 clnttcp_create F -GLIBC_2.3 clntudp_bufcreate F -GLIBC_2.3 clntudp_create F -GLIBC_2.3 clntunix_create F -GLIBC_2.3 clock F -GLIBC_2.3 clone F -GLIBC_2.3 close F -GLIBC_2.3 closedir F -GLIBC_2.3 closelog F -GLIBC_2.3 confstr F -GLIBC_2.3 connect F -GLIBC_2.3 copysign F -GLIBC_2.3 copysignf F -GLIBC_2.3 copysignl F -GLIBC_2.3 creat F -GLIBC_2.3 creat64 F -GLIBC_2.3 create_module F -GLIBC_2.3 ctermid F -GLIBC_2.3 ctime F -GLIBC_2.3 ctime_r F -GLIBC_2.3 cuserid F -GLIBC_2.3 daemon F -GLIBC_2.3 daylight D 0x4 -GLIBC_2.3 dcgettext F -GLIBC_2.3 dcngettext F -GLIBC_2.3 delete_module F -GLIBC_2.3 des_setparity F -GLIBC_2.3 dgettext F -GLIBC_2.3 difftime F -GLIBC_2.3 dirfd F -GLIBC_2.3 dirname F -GLIBC_2.3 div F -GLIBC_2.3 dl_iterate_phdr F -GLIBC_2.3 dngettext F -GLIBC_2.3 dprintf F -GLIBC_2.3 drand48 F -GLIBC_2.3 drand48_r F -GLIBC_2.3 dup F -GLIBC_2.3 dup2 F -GLIBC_2.3 duplocale F -GLIBC_2.3 dysize F -GLIBC_2.3 ecb_crypt F -GLIBC_2.3 ecvt F -GLIBC_2.3 ecvt_r F -GLIBC_2.3 endaliasent F -GLIBC_2.3 endfsent F -GLIBC_2.3 endgrent F -GLIBC_2.3 endhostent F -GLIBC_2.3 endmntent F -GLIBC_2.3 endnetent F -GLIBC_2.3 endnetgrent F -GLIBC_2.3 endprotoent F -GLIBC_2.3 endpwent F -GLIBC_2.3 endrpcent F -GLIBC_2.3 endservent F -GLIBC_2.3 endspent F -GLIBC_2.3 endttyent F -GLIBC_2.3 endusershell F -GLIBC_2.3 endutent F -GLIBC_2.3 endutxent F -GLIBC_2.3 environ D 0x8 -GLIBC_2.3 envz_add F -GLIBC_2.3 envz_entry F -GLIBC_2.3 envz_get F -GLIBC_2.3 envz_merge F -GLIBC_2.3 envz_remove F -GLIBC_2.3 envz_strip F -GLIBC_2.3 erand48 F -GLIBC_2.3 erand48_r F -GLIBC_2.3 err F -GLIBC_2.3 error F -GLIBC_2.3 error_at_line F -GLIBC_2.3 error_message_count D 0x4 -GLIBC_2.3 error_one_per_line D 0x4 -GLIBC_2.3 error_print_progname D 0x8 -GLIBC_2.3 errx F -GLIBC_2.3 ether_aton F -GLIBC_2.3 ether_aton_r F -GLIBC_2.3 ether_hostton F -GLIBC_2.3 ether_line F -GLIBC_2.3 ether_ntoa F -GLIBC_2.3 ether_ntoa_r F -GLIBC_2.3 ether_ntohost F -GLIBC_2.3 euidaccess F -GLIBC_2.3 execl F -GLIBC_2.3 execle F -GLIBC_2.3 execlp F -GLIBC_2.3 execv F -GLIBC_2.3 execve F -GLIBC_2.3 execvp F -GLIBC_2.3 exit F -GLIBC_2.3 fattach F -GLIBC_2.3 fchdir F -GLIBC_2.3 fchflags F -GLIBC_2.3 fchmod F -GLIBC_2.3 fchown F -GLIBC_2.3 fclose F -GLIBC_2.3 fcloseall F -GLIBC_2.3 fcntl F -GLIBC_2.3 fcvt F -GLIBC_2.3 fcvt_r F -GLIBC_2.3 fdatasync F -GLIBC_2.3 fdetach F -GLIBC_2.3 fdopen F -GLIBC_2.3 feof F -GLIBC_2.3 feof_unlocked F -GLIBC_2.3 ferror F -GLIBC_2.3 ferror_unlocked F -GLIBC_2.3 fexecve F -GLIBC_2.3 fflush F -GLIBC_2.3 fflush_unlocked F -GLIBC_2.3 ffs F -GLIBC_2.3 ffsl F -GLIBC_2.3 ffsll F -GLIBC_2.3 fgetc F -GLIBC_2.3 fgetc_unlocked F -GLIBC_2.3 fgetgrent F -GLIBC_2.3 fgetgrent_r F -GLIBC_2.3 fgetpos F -GLIBC_2.3 fgetpos64 F -GLIBC_2.3 fgetpwent F -GLIBC_2.3 fgetpwent_r F -GLIBC_2.3 fgets F -GLIBC_2.3 fgets_unlocked F -GLIBC_2.3 fgetspent F -GLIBC_2.3 fgetspent_r F -GLIBC_2.3 fgetwc F -GLIBC_2.3 fgetwc_unlocked F -GLIBC_2.3 fgetws F -GLIBC_2.3 fgetws_unlocked F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 fileno F -GLIBC_2.3 fileno_unlocked F -GLIBC_2.3 finite F -GLIBC_2.3 finitef F -GLIBC_2.3 finitel F -GLIBC_2.3 flistxattr F -GLIBC_2.3 flock F -GLIBC_2.3 flockfile F -GLIBC_2.3 fmemopen F -GLIBC_2.3 fmtmsg F -GLIBC_2.3 fnmatch F -GLIBC_2.3 fopen F -GLIBC_2.3 fopen64 F -GLIBC_2.3 fopencookie F -GLIBC_2.3 fork F -GLIBC_2.3 fpathconf F -GLIBC_2.3 fprintf F -GLIBC_2.3 fputc F -GLIBC_2.3 fputc_unlocked F -GLIBC_2.3 fputs F -GLIBC_2.3 fputs_unlocked F -GLIBC_2.3 fputwc F -GLIBC_2.3 fputwc_unlocked F -GLIBC_2.3 fputws F -GLIBC_2.3 fputws_unlocked F -GLIBC_2.3 fread F -GLIBC_2.3 fread_unlocked F -GLIBC_2.3 free F -GLIBC_2.3 freeaddrinfo F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 freopen F -GLIBC_2.3 freopen64 F -GLIBC_2.3 frexp F -GLIBC_2.3 frexpf F -GLIBC_2.3 frexpl F -GLIBC_2.3 fscanf F -GLIBC_2.3 fseek F -GLIBC_2.3 fseeko F -GLIBC_2.3 fseeko64 F -GLIBC_2.3 fsetpos F -GLIBC_2.3 fsetpos64 F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 fstatfs F -GLIBC_2.3 fstatfs64 F -GLIBC_2.3 fstatvfs F -GLIBC_2.3 fstatvfs64 F -GLIBC_2.3 fsync F -GLIBC_2.3 ftell F -GLIBC_2.3 ftello F -GLIBC_2.3 ftello64 F -GLIBC_2.3 ftime F -GLIBC_2.3 ftok F -GLIBC_2.3 ftruncate F -GLIBC_2.3 ftruncate64 F -GLIBC_2.3 ftrylockfile F -GLIBC_2.3 fts_children F -GLIBC_2.3 fts_close F -GLIBC_2.3 fts_open F -GLIBC_2.3 fts_read F -GLIBC_2.3 fts_set F -GLIBC_2.3 ftw F -GLIBC_2.3 ftw64 F -GLIBC_2.3 funlockfile F -GLIBC_2.3 futimes F -GLIBC_2.3 fwide F -GLIBC_2.3 fwprintf F -GLIBC_2.3 fwrite F -GLIBC_2.3 fwrite_unlocked F -GLIBC_2.3 fwscanf F -GLIBC_2.3 gai_strerror F -GLIBC_2.3 gcvt F -GLIBC_2.3 get_avphys_pages F -GLIBC_2.3 get_current_dir_name F -GLIBC_2.3 get_kernel_syms F -GLIBC_2.3 get_myaddress F -GLIBC_2.3 get_nprocs F -GLIBC_2.3 get_nprocs_conf F -GLIBC_2.3 get_phys_pages F -GLIBC_2.3 getaddrinfo F -GLIBC_2.3 getaliasbyname F -GLIBC_2.3 getaliasbyname_r F -GLIBC_2.3 getaliasent F -GLIBC_2.3 getaliasent_r F -GLIBC_2.3 getc F -GLIBC_2.3 getc_unlocked F -GLIBC_2.3 getchar F -GLIBC_2.3 getchar_unlocked F -GLIBC_2.3 getcontext F -GLIBC_2.3 getcwd F -GLIBC_2.3 getdate F -GLIBC_2.3 getdate_err D 0x4 -GLIBC_2.3 getdate_r F -GLIBC_2.3 getdelim F -GLIBC_2.3 getdirentries F -GLIBC_2.3 getdirentries64 F -GLIBC_2.3 getdomainname F -GLIBC_2.3 getdtablesize F -GLIBC_2.3 getegid F -GLIBC_2.3 getenv F -GLIBC_2.3 geteuid F -GLIBC_2.3 getfsent F -GLIBC_2.3 getfsfile F -GLIBC_2.3 getfsspec F -GLIBC_2.3 getgid F -GLIBC_2.3 getgrent F -GLIBC_2.3 getgrent_r F -GLIBC_2.3 getgrgid F -GLIBC_2.3 getgrgid_r F -GLIBC_2.3 getgrnam F -GLIBC_2.3 getgrnam_r F -GLIBC_2.3 getgrouplist F -GLIBC_2.3 getgroups F -GLIBC_2.3 gethostbyaddr F -GLIBC_2.3 gethostbyaddr_r F -GLIBC_2.3 gethostbyname F -GLIBC_2.3 gethostbyname2 F -GLIBC_2.3 gethostbyname2_r F -GLIBC_2.3 gethostbyname_r F -GLIBC_2.3 gethostent F -GLIBC_2.3 gethostent_r F -GLIBC_2.3 gethostid F -GLIBC_2.3 gethostname F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getitimer F -GLIBC_2.3 getline F -GLIBC_2.3 getloadavg F -GLIBC_2.3 getlogin F -GLIBC_2.3 getlogin_r F -GLIBC_2.3 getmntent F -GLIBC_2.3 getmntent_r F -GLIBC_2.3 getmsg F -GLIBC_2.3 getnameinfo F -GLIBC_2.3 getnetbyaddr F -GLIBC_2.3 getnetbyaddr_r F -GLIBC_2.3 getnetbyname F -GLIBC_2.3 getnetbyname_r F -GLIBC_2.3 getnetent F -GLIBC_2.3 getnetent_r F -GLIBC_2.3 getnetgrent F -GLIBC_2.3 getnetgrent_r F -GLIBC_2.3 getnetname F -GLIBC_2.3 getopt F -GLIBC_2.3 getopt_long F -GLIBC_2.3 getopt_long_only F -GLIBC_2.3 getpagesize F -GLIBC_2.3 getpass F -GLIBC_2.3 getpeername F -GLIBC_2.3 getpgid F -GLIBC_2.3 getpgrp F -GLIBC_2.3 getpid F -GLIBC_2.3 getpmsg F -GLIBC_2.3 getppid F -GLIBC_2.3 getpriority F -GLIBC_2.3 getprotobyname F -GLIBC_2.3 getprotobyname_r F -GLIBC_2.3 getprotobynumber F -GLIBC_2.3 getprotobynumber_r F -GLIBC_2.3 getprotoent F -GLIBC_2.3 getprotoent_r F -GLIBC_2.3 getpt F -GLIBC_2.3 getpublickey F -GLIBC_2.3 getpw F -GLIBC_2.3 getpwent F -GLIBC_2.3 getpwent_r F -GLIBC_2.3 getpwnam F -GLIBC_2.3 getpwnam_r F -GLIBC_2.3 getpwuid F -GLIBC_2.3 getpwuid_r F -GLIBC_2.3 getresgid F -GLIBC_2.3 getresuid F -GLIBC_2.3 getrlimit F -GLIBC_2.3 getrlimit64 F -GLIBC_2.3 getrpcbyname F -GLIBC_2.3 getrpcbyname_r F -GLIBC_2.3 getrpcbynumber F -GLIBC_2.3 getrpcbynumber_r F -GLIBC_2.3 getrpcent F -GLIBC_2.3 getrpcent_r F -GLIBC_2.3 getrpcport F -GLIBC_2.3 getrusage F -GLIBC_2.3 gets F -GLIBC_2.3 getsecretkey F -GLIBC_2.3 getservbyname F -GLIBC_2.3 getservbyname_r F -GLIBC_2.3 getservbyport F -GLIBC_2.3 getservbyport_r F -GLIBC_2.3 getservent F -GLIBC_2.3 getservent_r F -GLIBC_2.3 getsid F -GLIBC_2.3 getsockname F -GLIBC_2.3 getsockopt F -GLIBC_2.3 getspent F -GLIBC_2.3 getspent_r F -GLIBC_2.3 getspnam F -GLIBC_2.3 getspnam_r F -GLIBC_2.3 getsubopt F -GLIBC_2.3 gettext F -GLIBC_2.3 gettimeofday F -GLIBC_2.3 getttyent F -GLIBC_2.3 getttynam F -GLIBC_2.3 getuid F -GLIBC_2.3 getusershell F -GLIBC_2.3 getutent F -GLIBC_2.3 getutent_r F -GLIBC_2.3 getutid F -GLIBC_2.3 getutid_r F -GLIBC_2.3 getutline F -GLIBC_2.3 getutline_r F -GLIBC_2.3 getutmp F -GLIBC_2.3 getutmpx F -GLIBC_2.3 getutxent F -GLIBC_2.3 getutxid F -GLIBC_2.3 getutxline F -GLIBC_2.3 getw F -GLIBC_2.3 getwc F -GLIBC_2.3 getwc_unlocked F -GLIBC_2.3 getwchar F -GLIBC_2.3 getwchar_unlocked F -GLIBC_2.3 getwd F -GLIBC_2.3 getxattr F -GLIBC_2.3 glob F -GLIBC_2.3 glob64 F -GLIBC_2.3 glob_pattern_p F -GLIBC_2.3 globfree F -GLIBC_2.3 globfree64 F -GLIBC_2.3 gmtime F -GLIBC_2.3 gmtime_r F -GLIBC_2.3 gnu_get_libc_release F -GLIBC_2.3 gnu_get_libc_version F -GLIBC_2.3 grantpt F -GLIBC_2.3 group_member F -GLIBC_2.3 gsignal F -GLIBC_2.3 gtty F -GLIBC_2.3 h_errlist D 0x28 -GLIBC_2.3 h_nerr D 0x4 -GLIBC_2.3 hasmntopt F -GLIBC_2.3 hcreate F -GLIBC_2.3 hcreate_r F -GLIBC_2.3 hdestroy F -GLIBC_2.3 hdestroy_r F -GLIBC_2.3 herror F -GLIBC_2.3 host2netname F -GLIBC_2.3 hsearch F -GLIBC_2.3 hsearch_r F -GLIBC_2.3 hstrerror F -GLIBC_2.3 htonl F -GLIBC_2.3 htons F -GLIBC_2.3 iconv F -GLIBC_2.3 iconv_close F -GLIBC_2.3 iconv_open F -GLIBC_2.3 if_freenameindex F -GLIBC_2.3 if_indextoname F -GLIBC_2.3 if_nameindex F -GLIBC_2.3 if_nametoindex F -GLIBC_2.3 imaxabs F -GLIBC_2.3 imaxdiv F -GLIBC_2.3 in6addr_any D 0x10 -GLIBC_2.3 in6addr_loopback D 0x10 -GLIBC_2.3 index F -GLIBC_2.3 inet_addr F -GLIBC_2.3 inet_aton F -GLIBC_2.3 inet_lnaof F -GLIBC_2.3 inet_makeaddr F -GLIBC_2.3 inet_netof F -GLIBC_2.3 inet_network F -GLIBC_2.3 inet_nsap_addr F -GLIBC_2.3 inet_nsap_ntoa F -GLIBC_2.3 inet_ntoa F -GLIBC_2.3 inet_ntop F -GLIBC_2.3 inet_pton F -GLIBC_2.3 init_module F -GLIBC_2.3 initgroups F -GLIBC_2.3 initstate F -GLIBC_2.3 initstate_r F -GLIBC_2.3 innetgr F -GLIBC_2.3 insque F -GLIBC_2.3 ioctl F -GLIBC_2.3 iruserok F -GLIBC_2.3 iruserok_af F -GLIBC_2.3 isalnum F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isascii F -GLIBC_2.3 isastream F -GLIBC_2.3 isatty F -GLIBC_2.3 isblank F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isfdtype F -GLIBC_2.3 isgraph F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 isinf F -GLIBC_2.3 isinff F -GLIBC_2.3 isinfl F -GLIBC_2.3 islower F -GLIBC_2.3 islower_l F -GLIBC_2.3 isnan F -GLIBC_2.3 isnanf F -GLIBC_2.3 isnanl F -GLIBC_2.3 isprint F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 jrand48 F -GLIBC_2.3 jrand48_r F -GLIBC_2.3 key_decryptsession F -GLIBC_2.3 key_decryptsession_pk F -GLIBC_2.3 key_encryptsession F -GLIBC_2.3 key_encryptsession_pk F -GLIBC_2.3 key_gendes F -GLIBC_2.3 key_get_conv F -GLIBC_2.3 key_secretkey_is_set F -GLIBC_2.3 key_setnet F -GLIBC_2.3 key_setsecret F -GLIBC_2.3 kill F -GLIBC_2.3 killpg F -GLIBC_2.3 klogctl F -GLIBC_2.3 l64a F -GLIBC_2.3 labs F -GLIBC_2.3 lchown F -GLIBC_2.3 lckpwdf F -GLIBC_2.3 lcong48 F -GLIBC_2.3 lcong48_r F -GLIBC_2.3 ldexp F -GLIBC_2.3 ldexpf F -GLIBC_2.3 ldexpl F -GLIBC_2.3 ldiv F -GLIBC_2.3 lfind F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 link F -GLIBC_2.3 listen F -GLIBC_2.3 listxattr F -GLIBC_2.3 llabs F -GLIBC_2.3 lldiv F -GLIBC_2.3 llistxattr F -GLIBC_2.3 llseek F -GLIBC_2.3 loc1 D 0x8 -GLIBC_2.3 loc2 D 0x8 -GLIBC_2.3 localeconv F -GLIBC_2.3 localtime F -GLIBC_2.3 localtime_r F -GLIBC_2.3 lockf F -GLIBC_2.3 lockf64 F -GLIBC_2.3 locs D 0x8 -GLIBC_2.3 longjmp F -GLIBC_2.3 lrand48 F -GLIBC_2.3 lrand48_r F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsearch F -GLIBC_2.3 lseek F -GLIBC_2.3 lseek64 F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 madvise F -GLIBC_2.3 makecontext F -GLIBC_2.3 mallinfo F -GLIBC_2.3 malloc F -GLIBC_2.3 malloc_get_state F -GLIBC_2.3 malloc_set_state F -GLIBC_2.3 malloc_stats F -GLIBC_2.3 malloc_trim F -GLIBC_2.3 malloc_usable_size F -GLIBC_2.3 mallopt F -GLIBC_2.3 mallwatch D 0x8 -GLIBC_2.3 mblen F -GLIBC_2.3 mbrlen F -GLIBC_2.3 mbrtowc F -GLIBC_2.3 mbsinit F -GLIBC_2.3 mbsnrtowcs F -GLIBC_2.3 mbsrtowcs F -GLIBC_2.3 mbstowcs F -GLIBC_2.3 mbtowc F -GLIBC_2.3 mcheck F -GLIBC_2.3 mcheck_check_all F -GLIBC_2.3 mcheck_pedantic F -GLIBC_2.3 memalign F -GLIBC_2.3 memccpy F -GLIBC_2.3 memchr F -GLIBC_2.3 memcmp F -GLIBC_2.3 memcpy F -GLIBC_2.3 memfrob F -GLIBC_2.3 memmem F -GLIBC_2.3 memmove F -GLIBC_2.3 mempcpy F -GLIBC_2.3 memrchr F -GLIBC_2.3 memset F -GLIBC_2.3 mincore F -GLIBC_2.3 mkdir F -GLIBC_2.3 mkdtemp F -GLIBC_2.3 mkfifo F -GLIBC_2.3 mkstemp F -GLIBC_2.3 mkstemp64 F -GLIBC_2.3 mktemp F -GLIBC_2.3 mktime F -GLIBC_2.3 mlock F -GLIBC_2.3 mlockall F -GLIBC_2.3 mmap F -GLIBC_2.3 mmap64 F -GLIBC_2.3 modf F -GLIBC_2.3 modff F -GLIBC_2.3 modfl F -GLIBC_2.3 moncontrol F -GLIBC_2.3 monstartup F -GLIBC_2.3 mount F -GLIBC_2.3 mprobe F -GLIBC_2.3 mprotect F -GLIBC_2.3 mrand48 F -GLIBC_2.3 mrand48_r F -GLIBC_2.3 mremap F -GLIBC_2.3 msgctl F -GLIBC_2.3 msgget F -GLIBC_2.3 msgrcv F -GLIBC_2.3 msgsnd F -GLIBC_2.3 msync F -GLIBC_2.3 mtrace F -GLIBC_2.3 munlock F -GLIBC_2.3 munlockall F -GLIBC_2.3 munmap F -GLIBC_2.3 muntrace F -GLIBC_2.3 nanosleep F -GLIBC_2.3 netname2host F -GLIBC_2.3 netname2user F -GLIBC_2.3 newlocale F -GLIBC_2.3 nfsservctl F -GLIBC_2.3 nftw F -GLIBC_2.3 nftw64 F -GLIBC_2.3 ngettext F -GLIBC_2.3 nice F -GLIBC_2.3 nl_langinfo F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 nrand48 F -GLIBC_2.3 nrand48_r F -GLIBC_2.3 ntohl F -GLIBC_2.3 ntohs F -GLIBC_2.3 ntp_adjtime F -GLIBC_2.3 ntp_gettime F -GLIBC_2.3 obstack_alloc_failed_handler D 0x8 -GLIBC_2.3 obstack_exit_failure D 0x4 -GLIBC_2.3 obstack_free F -GLIBC_2.3 obstack_printf F -GLIBC_2.3 obstack_vprintf F -GLIBC_2.3 on_exit F -GLIBC_2.3 open F -GLIBC_2.3 open64 F -GLIBC_2.3 open_memstream F -GLIBC_2.3 opendir F -GLIBC_2.3 openlog F -GLIBC_2.3 optarg D 0x8 -GLIBC_2.3 opterr D 0x4 -GLIBC_2.3 optind D 0x4 -GLIBC_2.3 optopt D 0x4 -GLIBC_2.3 parse_printf_format F -GLIBC_2.3 passwd2des F -GLIBC_2.3 pathconf F -GLIBC_2.3 pause F -GLIBC_2.3 pclose F -GLIBC_2.3 perror F -GLIBC_2.3 personality F -GLIBC_2.3 pipe F -GLIBC_2.3 pivot_root F -GLIBC_2.3 pmap_getmaps F -GLIBC_2.3 pmap_getport F -GLIBC_2.3 pmap_rmtcall F -GLIBC_2.3 pmap_set F -GLIBC_2.3 pmap_unset F -GLIBC_2.3 poll F -GLIBC_2.3 popen F -GLIBC_2.3 posix_fadvise F -GLIBC_2.3 posix_fadvise64 F -GLIBC_2.3 posix_fallocate F -GLIBC_2.3 posix_fallocate64 F -GLIBC_2.3 posix_madvise F -GLIBC_2.3 posix_memalign F -GLIBC_2.3 posix_openpt F -GLIBC_2.3 posix_spawn F -GLIBC_2.3 posix_spawn_file_actions_addclose F -GLIBC_2.3 posix_spawn_file_actions_adddup2 F -GLIBC_2.3 posix_spawn_file_actions_addopen F -GLIBC_2.3 posix_spawn_file_actions_destroy F -GLIBC_2.3 posix_spawn_file_actions_init F -GLIBC_2.3 posix_spawnattr_destroy F -GLIBC_2.3 posix_spawnattr_getflags F -GLIBC_2.3 posix_spawnattr_getpgroup F -GLIBC_2.3 posix_spawnattr_getschedparam F -GLIBC_2.3 posix_spawnattr_getschedpolicy F -GLIBC_2.3 posix_spawnattr_getsigdefault F -GLIBC_2.3 posix_spawnattr_getsigmask F -GLIBC_2.3 posix_spawnattr_init F -GLIBC_2.3 posix_spawnattr_setflags F -GLIBC_2.3 posix_spawnattr_setpgroup F -GLIBC_2.3 posix_spawnattr_setschedparam F -GLIBC_2.3 posix_spawnattr_setschedpolicy F -GLIBC_2.3 posix_spawnattr_setsigdefault F -GLIBC_2.3 posix_spawnattr_setsigmask F -GLIBC_2.3 posix_spawnp F -GLIBC_2.3 prctl F -GLIBC_2.3 pread F -GLIBC_2.3 pread64 F -GLIBC_2.3 printf F -GLIBC_2.3 printf_size F -GLIBC_2.3 printf_size_info F -GLIBC_2.3 profil F -GLIBC_2.3 program_invocation_name D 0x8 -GLIBC_2.3 program_invocation_short_name D 0x8 -GLIBC_2.3 pselect F -GLIBC_2.3 psignal F -GLIBC_2.3 pthread_attr_destroy F -GLIBC_2.3 pthread_attr_getdetachstate F -GLIBC_2.3 pthread_attr_getinheritsched F -GLIBC_2.3 pthread_attr_getschedparam F -GLIBC_2.3 pthread_attr_getschedpolicy F -GLIBC_2.3 pthread_attr_getscope F -GLIBC_2.3 pthread_attr_init F -GLIBC_2.3 pthread_attr_setdetachstate F -GLIBC_2.3 pthread_attr_setinheritsched F -GLIBC_2.3 pthread_attr_setschedparam F -GLIBC_2.3 pthread_attr_setschedpolicy F -GLIBC_2.3 pthread_attr_setscope F -GLIBC_2.3 pthread_cond_broadcast F -GLIBC_2.3 pthread_cond_destroy F -GLIBC_2.3 pthread_cond_init F -GLIBC_2.3 pthread_cond_signal F -GLIBC_2.3 pthread_cond_timedwait F -GLIBC_2.3 pthread_cond_wait F -GLIBC_2.3 pthread_condattr_destroy F -GLIBC_2.3 pthread_condattr_init F -GLIBC_2.3 pthread_equal F -GLIBC_2.3 pthread_exit F -GLIBC_2.3 pthread_getschedparam F -GLIBC_2.3 pthread_mutex_destroy F -GLIBC_2.3 pthread_mutex_init F -GLIBC_2.3 pthread_mutex_lock F -GLIBC_2.3 pthread_mutex_unlock F -GLIBC_2.3 pthread_self F -GLIBC_2.3 pthread_setcancelstate F -GLIBC_2.3 pthread_setcanceltype F -GLIBC_2.3 pthread_setschedparam F -GLIBC_2.3 ptrace F -GLIBC_2.3 ptsname F -GLIBC_2.3 ptsname_r F -GLIBC_2.3 putc F -GLIBC_2.3 putc_unlocked F -GLIBC_2.3 putchar F -GLIBC_2.3 putchar_unlocked F -GLIBC_2.3 putenv F -GLIBC_2.3 putgrent F -GLIBC_2.3 putmsg F -GLIBC_2.3 putpmsg F -GLIBC_2.3 putpwent F -GLIBC_2.3 puts F -GLIBC_2.3 putspent F -GLIBC_2.3 pututline F -GLIBC_2.3 pututxline F -GLIBC_2.3 putw F -GLIBC_2.3 putwc F -GLIBC_2.3 putwc_unlocked F -GLIBC_2.3 putwchar F -GLIBC_2.3 putwchar_unlocked F -GLIBC_2.3 pvalloc F -GLIBC_2.3 pwrite F -GLIBC_2.3 pwrite64 F -GLIBC_2.3 qecvt F -GLIBC_2.3 qecvt_r F -GLIBC_2.3 qfcvt F -GLIBC_2.3 qfcvt_r F -GLIBC_2.3 qgcvt F -GLIBC_2.3 qsort F -GLIBC_2.3 query_module F -GLIBC_2.3 quotactl F -GLIBC_2.3 raise F -GLIBC_2.3 rand F -GLIBC_2.3 rand_r F -GLIBC_2.3 random F -GLIBC_2.3 random_r F -GLIBC_2.3 rawmemchr F -GLIBC_2.3 rcmd F -GLIBC_2.3 rcmd_af F -GLIBC_2.3 re_comp F -GLIBC_2.3 re_compile_fastmap F -GLIBC_2.3 re_compile_pattern F -GLIBC_2.3 re_exec F -GLIBC_2.3 re_match F -GLIBC_2.3 re_match_2 F -GLIBC_2.3 re_search F -GLIBC_2.3 re_search_2 F -GLIBC_2.3 re_set_registers F -GLIBC_2.3 re_set_syntax F -GLIBC_2.3 re_syntax_options D 0x8 -GLIBC_2.3 read F -GLIBC_2.3 readahead F -GLIBC_2.3 readdir F -GLIBC_2.3 readdir64 F -GLIBC_2.3 readdir64_r F -GLIBC_2.3 readdir_r F -GLIBC_2.3 readlink F -GLIBC_2.3 readv F -GLIBC_2.3 realloc F -GLIBC_2.3 realpath F -GLIBC_2.3 reboot F -GLIBC_2.3 recv F -GLIBC_2.3 recvfrom F -GLIBC_2.3 recvmsg F -GLIBC_2.3 regcomp F -GLIBC_2.3 regerror F -GLIBC_2.3 regexec F -GLIBC_2.3 regfree F -GLIBC_2.3 register_printf_function F -GLIBC_2.3 registerrpc F -GLIBC_2.3 remove F -GLIBC_2.3 removexattr F -GLIBC_2.3 remque F -GLIBC_2.3 rename F -GLIBC_2.3 revoke F -GLIBC_2.3 rewind F -GLIBC_2.3 rewinddir F -GLIBC_2.3 rexec F -GLIBC_2.3 rexec_af F -GLIBC_2.3 rexecoptions D 0x4 -GLIBC_2.3 rindex F -GLIBC_2.3 rmdir F -GLIBC_2.3 rpc_createerr D 0x20 -GLIBC_2.3 rpmatch F -GLIBC_2.3 rresvport F -GLIBC_2.3 rresvport_af F -GLIBC_2.3 rtime F -GLIBC_2.3 ruserok F -GLIBC_2.3 ruserok_af F -GLIBC_2.3 ruserpass F -GLIBC_2.3 sbrk F -GLIBC_2.3 scalbn F -GLIBC_2.3 scalbnf F -GLIBC_2.3 scalbnl F -GLIBC_2.3 scandir F -GLIBC_2.3 scandir64 F -GLIBC_2.3 scanf F -GLIBC_2.3 sched_get_priority_max F -GLIBC_2.3 sched_get_priority_min F -GLIBC_2.3 sched_getparam F -GLIBC_2.3 sched_getscheduler F -GLIBC_2.3 sched_rr_get_interval F -GLIBC_2.3 sched_setparam F -GLIBC_2.3 sched_setscheduler F -GLIBC_2.3 sched_yield F -GLIBC_2.3 seed48 F -GLIBC_2.3 seed48_r F -GLIBC_2.3 seekdir F -GLIBC_2.3 select F -GLIBC_2.3 semctl F -GLIBC_2.3 semget F -GLIBC_2.3 semop F -GLIBC_2.3 send F -GLIBC_2.3 sendfile F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 sendmsg F -GLIBC_2.3 sendto F -GLIBC_2.3 setaliasent F -GLIBC_2.3 setbuf F -GLIBC_2.3 setbuffer F -GLIBC_2.3 setcontext F -GLIBC_2.3 setdomainname F -GLIBC_2.3 setegid F -GLIBC_2.3 setenv F -GLIBC_2.3 seteuid F -GLIBC_2.3 setfsent F -GLIBC_2.3 setfsgid F -GLIBC_2.3 setfsuid F -GLIBC_2.3 setgid F -GLIBC_2.3 setgrent F -GLIBC_2.3 setgroups F -GLIBC_2.3 sethostent F -GLIBC_2.3 sethostid F -GLIBC_2.3 sethostname F -GLIBC_2.3 setitimer F -GLIBC_2.3 setjmp F -GLIBC_2.3 setlinebuf F -GLIBC_2.3 setlocale F -GLIBC_2.3 setlogin F -GLIBC_2.3 setlogmask F -GLIBC_2.3 setmntent F -GLIBC_2.3 setnetent F -GLIBC_2.3 setnetgrent F -GLIBC_2.3 setpgid F -GLIBC_2.3 setpgrp F -GLIBC_2.3 setpriority F -GLIBC_2.3 setprotoent F -GLIBC_2.3 setpwent F -GLIBC_2.3 setregid F -GLIBC_2.3 setresgid F -GLIBC_2.3 setresuid F -GLIBC_2.3 setreuid F -GLIBC_2.3 setrlimit F -GLIBC_2.3 setrlimit64 F -GLIBC_2.3 setrpcent F -GLIBC_2.3 setservent F -GLIBC_2.3 setsid F -GLIBC_2.3 setsockopt F -GLIBC_2.3 setspent F -GLIBC_2.3 setstate F -GLIBC_2.3 setstate_r F -GLIBC_2.3 settimeofday F -GLIBC_2.3 setttyent F -GLIBC_2.3 setuid F -GLIBC_2.3 setusershell F -GLIBC_2.3 setutent F -GLIBC_2.3 setutxent F -GLIBC_2.3 setvbuf F -GLIBC_2.3 setxattr F -GLIBC_2.3 sgetspent F -GLIBC_2.3 sgetspent_r F -GLIBC_2.3 shmat F -GLIBC_2.3 shmctl F -GLIBC_2.3 shmdt F -GLIBC_2.3 shmget F -GLIBC_2.3 shutdown F -GLIBC_2.3 sigaction F -GLIBC_2.3 sigaddset F -GLIBC_2.3 sigaltstack F -GLIBC_2.3 sigandset F -GLIBC_2.3 sigblock F -GLIBC_2.3 sigdelset F -GLIBC_2.3 sigemptyset F -GLIBC_2.3 sigfillset F -GLIBC_2.3 siggetmask F -GLIBC_2.3 sighold F -GLIBC_2.3 sigignore F -GLIBC_2.3 siginterrupt F -GLIBC_2.3 sigisemptyset F -GLIBC_2.3 sigismember F -GLIBC_2.3 siglongjmp F -GLIBC_2.3 signal F -GLIBC_2.3 sigorset F -GLIBC_2.3 sigpause F -GLIBC_2.3 sigpending F -GLIBC_2.3 sigprocmask F -GLIBC_2.3 sigqueue F -GLIBC_2.3 sigrelse F -GLIBC_2.3 sigreturn F -GLIBC_2.3 sigset F -GLIBC_2.3 sigsetmask F -GLIBC_2.3 sigstack F -GLIBC_2.3 sigsuspend F -GLIBC_2.3 sigtimedwait F -GLIBC_2.3 sigvec F -GLIBC_2.3 sigwait F -GLIBC_2.3 sigwaitinfo F -GLIBC_2.3 sleep F -GLIBC_2.3 snprintf F -GLIBC_2.3 sockatmark F -GLIBC_2.3 socket F -GLIBC_2.3 socketpair F -GLIBC_2.3 sprintf F -GLIBC_2.3 sprofil F -GLIBC_2.3 srand F -GLIBC_2.3 srand48 F -GLIBC_2.3 srand48_r F -GLIBC_2.3 srandom F -GLIBC_2.3 srandom_r F -GLIBC_2.3 sscanf F -GLIBC_2.3 ssignal F -GLIBC_2.3 sstk F -GLIBC_2.3 statfs F -GLIBC_2.3 statfs64 F -GLIBC_2.3 statvfs F -GLIBC_2.3 statvfs64 F -GLIBC_2.3 stderr D 0x8 -GLIBC_2.3 stdin D 0x8 -GLIBC_2.3 stdout D 0x8 -GLIBC_2.3 step F -GLIBC_2.3 stime F -GLIBC_2.3 stpcpy F -GLIBC_2.3 stpncpy F -GLIBC_2.3 strcasecmp F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcasestr F -GLIBC_2.3 strcat F -GLIBC_2.3 strchr F -GLIBC_2.3 strchrnul F -GLIBC_2.3 strcmp F -GLIBC_2.3 strcoll F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strcpy F -GLIBC_2.3 strcspn F -GLIBC_2.3 strdup F -GLIBC_2.3 strerror F -GLIBC_2.3 strerror_r F -GLIBC_2.3 strfmon F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strfry F -GLIBC_2.3 strftime F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strlen F -GLIBC_2.3 strncasecmp F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strncat F -GLIBC_2.3 strncmp F -GLIBC_2.3 strncpy F -GLIBC_2.3 strndup F -GLIBC_2.3 strnlen F -GLIBC_2.3 strpbrk F -GLIBC_2.3 strptime F -GLIBC_2.3 strrchr F -GLIBC_2.3 strsep F -GLIBC_2.3 strsignal F -GLIBC_2.3 strspn F -GLIBC_2.3 strstr F -GLIBC_2.3 strtod F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtoimax F -GLIBC_2.3 strtok F -GLIBC_2.3 strtok_r F -GLIBC_2.3 strtol F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoll F -GLIBC_2.3 strtoq F -GLIBC_2.3 strtoul F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strtoull F -GLIBC_2.3 strtoumax F -GLIBC_2.3 strtouq F -GLIBC_2.3 strverscmp F -GLIBC_2.3 strxfrm F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 stty F -GLIBC_2.3 svc_exit F -GLIBC_2.3 svc_fdset D 0x80 -GLIBC_2.3 svc_getreq F -GLIBC_2.3 svc_getreq_common F -GLIBC_2.3 svc_getreq_poll F -GLIBC_2.3 svc_getreqset F -GLIBC_2.3 svc_max_pollfd D 0x4 -GLIBC_2.3 svc_pollfd D 0x8 -GLIBC_2.3 svc_register F -GLIBC_2.3 svc_run F -GLIBC_2.3 svc_sendreply F -GLIBC_2.3 svc_unregister F -GLIBC_2.3 svcauthdes_stats D 0x18 -GLIBC_2.3 svcerr_auth F -GLIBC_2.3 svcerr_decode F -GLIBC_2.3 svcerr_noproc F -GLIBC_2.3 svcerr_noprog F -GLIBC_2.3 svcerr_progvers F -GLIBC_2.3 svcerr_systemerr F -GLIBC_2.3 svcerr_weakauth F -GLIBC_2.3 svcfd_create F -GLIBC_2.3 svcraw_create F -GLIBC_2.3 svctcp_create F -GLIBC_2.3 svcudp_bufcreate F -GLIBC_2.3 svcudp_create F -GLIBC_2.3 svcudp_enablecache F -GLIBC_2.3 svcunix_create F -GLIBC_2.3 svcunixfd_create F -GLIBC_2.3 swab F -GLIBC_2.3 swapcontext F -GLIBC_2.3 swapoff F -GLIBC_2.3 swapon F -GLIBC_2.3 swprintf F -GLIBC_2.3 swscanf F -GLIBC_2.3 symlink F -GLIBC_2.3 sync F -GLIBC_2.3 sys_errlist D 0x3f0 -GLIBC_2.3 sys_nerr D 0x4 -GLIBC_2.3 sys_sigabbrev D 0x200 -GLIBC_2.3 sys_siglist D 0x200 -GLIBC_2.3 syscall F -GLIBC_2.3 sysconf F -GLIBC_2.3 sysctl F -GLIBC_2.3 sysinfo F -GLIBC_2.3 syslog F -GLIBC_2.3 system F -GLIBC_2.3 sysv_signal F -GLIBC_2.3 tcdrain F -GLIBC_2.3 tcflow F -GLIBC_2.3 tcflush F -GLIBC_2.3 tcgetattr F -GLIBC_2.3 tcgetpgrp F -GLIBC_2.3 tcgetsid F -GLIBC_2.3 tcsendbreak F -GLIBC_2.3 tcsetattr F -GLIBC_2.3 tcsetpgrp F -GLIBC_2.3 tdelete F -GLIBC_2.3 tdestroy F -GLIBC_2.3 telldir F -GLIBC_2.3 tempnam F -GLIBC_2.3 textdomain F -GLIBC_2.3 tfind F -GLIBC_2.3 time F -GLIBC_2.3 timegm F -GLIBC_2.3 timelocal F -GLIBC_2.3 times F -GLIBC_2.3 timezone D 0x8 -GLIBC_2.3 tmpfile F -GLIBC_2.3 tmpfile64 F -GLIBC_2.3 tmpnam F -GLIBC_2.3 tmpnam_r F -GLIBC_2.3 toascii F -GLIBC_2.3 tolower F -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper F -GLIBC_2.3 towupper_l F -GLIBC_2.3 tr_break F -GLIBC_2.3 truncate F -GLIBC_2.3 truncate64 F -GLIBC_2.3 tsearch F -GLIBC_2.3 ttyname F -GLIBC_2.3 ttyname_r F -GLIBC_2.3 ttyslot F -GLIBC_2.3 twalk F -GLIBC_2.3 tzname D 0x10 -GLIBC_2.3 tzset F -GLIBC_2.3 ualarm F -GLIBC_2.3 ulckpwdf F -GLIBC_2.3 ulimit F -GLIBC_2.3 umask F -GLIBC_2.3 umount F -GLIBC_2.3 umount2 F -GLIBC_2.3 uname F -GLIBC_2.3 ungetc F -GLIBC_2.3 ungetwc F -GLIBC_2.3 unlink F -GLIBC_2.3 unlockpt F -GLIBC_2.3 unsetenv F -GLIBC_2.3 updwtmp F -GLIBC_2.3 updwtmpx F -GLIBC_2.3 uselib F -GLIBC_2.3 uselocale F -GLIBC_2.3 user2netname F -GLIBC_2.3 usleep F -GLIBC_2.3 ustat F -GLIBC_2.3 utime F -GLIBC_2.3 utimes F -GLIBC_2.3 utmpname F -GLIBC_2.3 utmpxname F -GLIBC_2.3 valloc F -GLIBC_2.3 vasprintf F -GLIBC_2.3 vdprintf F -GLIBC_2.3 verr F -GLIBC_2.3 verrx F -GLIBC_2.3 versionsort F -GLIBC_2.3 versionsort64 F -GLIBC_2.3 vfork F -GLIBC_2.3 vfprintf F -GLIBC_2.3 vfscanf F -GLIBC_2.3 vfwprintf F -GLIBC_2.3 vfwscanf F -GLIBC_2.3 vhangup F -GLIBC_2.3 vlimit F -GLIBC_2.3 vprintf F -GLIBC_2.3 vscanf F -GLIBC_2.3 vsnprintf F -GLIBC_2.3 vsprintf F -GLIBC_2.3 vsscanf F -GLIBC_2.3 vswprintf F -GLIBC_2.3 vswscanf F -GLIBC_2.3 vsyslog F -GLIBC_2.3 vtimes F -GLIBC_2.3 vwarn F -GLIBC_2.3 vwarnx F -GLIBC_2.3 vwprintf F -GLIBC_2.3 vwscanf F -GLIBC_2.3 wait F -GLIBC_2.3 wait3 F -GLIBC_2.3 wait4 F -GLIBC_2.3 waitid F -GLIBC_2.3 waitpid F -GLIBC_2.3 warn F -GLIBC_2.3 warnx F -GLIBC_2.3 wcpcpy F -GLIBC_2.3 wcpncpy F -GLIBC_2.3 wcrtomb F -GLIBC_2.3 wcscasecmp F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscat F -GLIBC_2.3 wcschr F -GLIBC_2.3 wcschrnul F -GLIBC_2.3 wcscmp F -GLIBC_2.3 wcscoll F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcscpy F -GLIBC_2.3 wcscspn F -GLIBC_2.3 wcsdup F -GLIBC_2.3 wcsftime F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcslen F -GLIBC_2.3 wcsncasecmp F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcsncat F -GLIBC_2.3 wcsncmp F -GLIBC_2.3 wcsncpy F -GLIBC_2.3 wcsnlen F -GLIBC_2.3 wcsnrtombs F -GLIBC_2.3 wcspbrk F -GLIBC_2.3 wcsrchr F -GLIBC_2.3 wcsrtombs F -GLIBC_2.3 wcsspn F -GLIBC_2.3 wcsstr F -GLIBC_2.3 wcstod F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstoimax F -GLIBC_2.3 wcstok F -GLIBC_2.3 wcstol F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstombs F -GLIBC_2.3 wcstoq F -GLIBC_2.3 wcstoul F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcstoumax F -GLIBC_2.3 wcstouq F -GLIBC_2.3 wcswcs F -GLIBC_2.3 wcswidth F -GLIBC_2.3 wcsxfrm F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctob F -GLIBC_2.3 wctomb F -GLIBC_2.3 wctrans F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype F -GLIBC_2.3 wctype_l F -GLIBC_2.3 wcwidth F -GLIBC_2.3 wmemchr F -GLIBC_2.3 wmemcmp F -GLIBC_2.3 wmemcpy F -GLIBC_2.3 wmemmove F -GLIBC_2.3 wmempcpy F -GLIBC_2.3 wmemset F -GLIBC_2.3 wordexp F -GLIBC_2.3 wordfree F -GLIBC_2.3 wprintf F -GLIBC_2.3 write F -GLIBC_2.3 writev F -GLIBC_2.3 wscanf F -GLIBC_2.3 xdecrypt F -GLIBC_2.3 xdr_accepted_reply F -GLIBC_2.3 xdr_array F -GLIBC_2.3 xdr_authdes_cred F -GLIBC_2.3 xdr_authdes_verf F -GLIBC_2.3 xdr_authunix_parms F -GLIBC_2.3 xdr_bool F -GLIBC_2.3 xdr_bytes F -GLIBC_2.3 xdr_callhdr F -GLIBC_2.3 xdr_callmsg F -GLIBC_2.3 xdr_char F -GLIBC_2.3 xdr_cryptkeyarg F -GLIBC_2.3 xdr_cryptkeyarg2 F -GLIBC_2.3 xdr_cryptkeyres F -GLIBC_2.3 xdr_des_block F -GLIBC_2.3 xdr_double F -GLIBC_2.3 xdr_enum F -GLIBC_2.3 xdr_float F -GLIBC_2.3 xdr_free F -GLIBC_2.3 xdr_getcredres F -GLIBC_2.3 xdr_hyper F -GLIBC_2.3 xdr_int F -GLIBC_2.3 xdr_int16_t F -GLIBC_2.3 xdr_int32_t F -GLIBC_2.3 xdr_int64_t F -GLIBC_2.3 xdr_int8_t F -GLIBC_2.3 xdr_key_netstarg F -GLIBC_2.3 xdr_key_netstres F -GLIBC_2.3 xdr_keybuf F -GLIBC_2.3 xdr_keystatus F -GLIBC_2.3 xdr_long F -GLIBC_2.3 xdr_longlong_t F -GLIBC_2.3 xdr_netnamestr F -GLIBC_2.3 xdr_netobj F -GLIBC_2.3 xdr_opaque F -GLIBC_2.3 xdr_opaque_auth F -GLIBC_2.3 xdr_pmap F -GLIBC_2.3 xdr_pmaplist F -GLIBC_2.3 xdr_pointer F -GLIBC_2.3 xdr_reference F -GLIBC_2.3 xdr_rejected_reply F -GLIBC_2.3 xdr_replymsg F -GLIBC_2.3 xdr_rmtcall_args F -GLIBC_2.3 xdr_rmtcallres F -GLIBC_2.3 xdr_short F -GLIBC_2.3 xdr_sizeof F -GLIBC_2.3 xdr_string F -GLIBC_2.3 xdr_u_char F -GLIBC_2.3 xdr_u_hyper F -GLIBC_2.3 xdr_u_int F -GLIBC_2.3 xdr_u_long F -GLIBC_2.3 xdr_u_longlong_t F -GLIBC_2.3 xdr_u_short F -GLIBC_2.3 xdr_uint16_t F -GLIBC_2.3 xdr_uint32_t F -GLIBC_2.3 xdr_uint64_t F -GLIBC_2.3 xdr_uint8_t F -GLIBC_2.3 xdr_union F -GLIBC_2.3 xdr_unixcred F -GLIBC_2.3 xdr_vector F -GLIBC_2.3 xdr_void F -GLIBC_2.3 xdr_wrapstring F -GLIBC_2.3 xdrmem_create F -GLIBC_2.3 xdrrec_create F -GLIBC_2.3 xdrrec_endofrecord F -GLIBC_2.3 xdrrec_eof F -GLIBC_2.3 xdrrec_skiprecord F -GLIBC_2.3 xdrstdio_create F -GLIBC_2.3 xencrypt F -GLIBC_2.3 xprt_register F -GLIBC_2.3 xprt_unregister F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x208 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 strtoll_l F -GLIBC_2.3.3 strtoull_l F -GLIBC_2.3.3 sys_sigabbrev D 0x208 -GLIBC_2.3.3 sys_siglist D 0x208 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __sigsetjmp F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 _longjmp F -GLIBC_2.3.4 _setjmp F -GLIBC_2.3.4 getcontext F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 longjmp F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setcontext F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setjmp F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 siglongjmp F -GLIBC_2.3.4 swapcontext F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 _IO_fprintf F -GLIBC_2.4 _IO_printf F -GLIBC_2.4 _IO_sprintf F -GLIBC_2.4 _IO_sscanf F -GLIBC_2.4 _IO_vfprintf F -GLIBC_2.4 _IO_vfscanf F -GLIBC_2.4 _IO_vsprintf F -GLIBC_2.4 __asprintf F -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fprintf_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __isinfl F -GLIBC_2.4 __isnanl F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __nldbl__IO_fprintf F -GLIBC_2.4 __nldbl__IO_printf F -GLIBC_2.4 __nldbl__IO_sprintf F -GLIBC_2.4 __nldbl__IO_sscanf F -GLIBC_2.4 __nldbl__IO_vfprintf F -GLIBC_2.4 __nldbl__IO_vfscanf F -GLIBC_2.4 __nldbl__IO_vsprintf F -GLIBC_2.4 __nldbl___asprintf F -GLIBC_2.4 __nldbl___fprintf_chk F -GLIBC_2.4 __nldbl___fwprintf_chk F -GLIBC_2.4 __nldbl___printf_chk F -GLIBC_2.4 __nldbl___printf_fp F -GLIBC_2.4 __nldbl___snprintf_chk F -GLIBC_2.4 __nldbl___sprintf_chk F -GLIBC_2.4 __nldbl___strfmon_l F -GLIBC_2.4 __nldbl___swprintf_chk F -GLIBC_2.4 __nldbl___syslog_chk F -GLIBC_2.4 __nldbl___vfprintf_chk F -GLIBC_2.4 __nldbl___vfscanf F -GLIBC_2.4 __nldbl___vfwprintf_chk F -GLIBC_2.4 __nldbl___vprintf_chk F -GLIBC_2.4 __nldbl___vsnprintf F -GLIBC_2.4 __nldbl___vsnprintf_chk F -GLIBC_2.4 __nldbl___vsprintf_chk F -GLIBC_2.4 __nldbl___vsscanf F -GLIBC_2.4 __nldbl___vstrfmon F -GLIBC_2.4 __nldbl___vstrfmon_l F -GLIBC_2.4 __nldbl___vswprintf_chk F -GLIBC_2.4 __nldbl___vsyslog_chk F -GLIBC_2.4 __nldbl___vwprintf_chk F -GLIBC_2.4 __nldbl___wprintf_chk F -GLIBC_2.4 __nldbl_asprintf F -GLIBC_2.4 __nldbl_dprintf F -GLIBC_2.4 __nldbl_fprintf F -GLIBC_2.4 __nldbl_fscanf F -GLIBC_2.4 __nldbl_fwprintf F -GLIBC_2.4 __nldbl_fwscanf F -GLIBC_2.4 __nldbl_obstack_printf F -GLIBC_2.4 __nldbl_obstack_vprintf F -GLIBC_2.4 __nldbl_printf F -GLIBC_2.4 __nldbl_printf_size F -GLIBC_2.4 __nldbl_scanf F -GLIBC_2.4 __nldbl_snprintf F -GLIBC_2.4 __nldbl_sprintf F -GLIBC_2.4 __nldbl_sscanf F -GLIBC_2.4 __nldbl_strfmon F -GLIBC_2.4 __nldbl_strfmon_l F -GLIBC_2.4 __nldbl_swprintf F -GLIBC_2.4 __nldbl_swscanf F -GLIBC_2.4 __nldbl_syslog F -GLIBC_2.4 __nldbl_vasprintf F -GLIBC_2.4 __nldbl_vdprintf F -GLIBC_2.4 __nldbl_vfprintf F -GLIBC_2.4 __nldbl_vfscanf F -GLIBC_2.4 __nldbl_vfwprintf F -GLIBC_2.4 __nldbl_vfwscanf F -GLIBC_2.4 __nldbl_vprintf F -GLIBC_2.4 __nldbl_vscanf F -GLIBC_2.4 __nldbl_vsnprintf F -GLIBC_2.4 __nldbl_vsprintf F -GLIBC_2.4 __nldbl_vsscanf F -GLIBC_2.4 __nldbl_vswprintf F -GLIBC_2.4 __nldbl_vswscanf F -GLIBC_2.4 __nldbl_vsyslog F -GLIBC_2.4 __nldbl_vwprintf F -GLIBC_2.4 __nldbl_vwscanf F -GLIBC_2.4 __nldbl_wprintf F -GLIBC_2.4 __nldbl_wscanf F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __printf_chk F -GLIBC_2.4 __printf_fp F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __signbitl F -GLIBC_2.4 __snprintf_chk F -GLIBC_2.4 __sprintf_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __strfmon_l F -GLIBC_2.4 __strtold_internal F -GLIBC_2.4 __strtold_l F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfprintf_chk F -GLIBC_2.4 __vfscanf F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vprintf_chk F -GLIBC_2.4 __vsnprintf F -GLIBC_2.4 __vsnprintf_chk F -GLIBC_2.4 __vsprintf_chk F -GLIBC_2.4 __vsscanf F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstold_internal F -GLIBC_2.4 __wcstold_l F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 _sys_errlist D 0x420 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 asprintf F -GLIBC_2.4 copysignl F -GLIBC_2.4 dprintf F -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 finitel F -GLIBC_2.4 fprintf F -GLIBC_2.4 frexpl F -GLIBC_2.4 fscanf F -GLIBC_2.4 futimesat F -GLIBC_2.4 fwprintf F -GLIBC_2.4 fwscanf F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 isinfl F -GLIBC_2.4 isnanl F -GLIBC_2.4 ldexpl F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 modfl F -GLIBC_2.4 obstack_printf F -GLIBC_2.4 obstack_vprintf F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 printf F -GLIBC_2.4 printf_size F -GLIBC_2.4 qecvt F -GLIBC_2.4 qecvt_r F -GLIBC_2.4 qfcvt F -GLIBC_2.4 qfcvt_r F -GLIBC_2.4 qgcvt F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 scalbnl F -GLIBC_2.4 scanf F -GLIBC_2.4 snprintf F -GLIBC_2.4 sprintf F -GLIBC_2.4 sscanf F -GLIBC_2.4 strfmon F -GLIBC_2.4 strfmon_l F -GLIBC_2.4 strtold F -GLIBC_2.4 strtold_l F -GLIBC_2.4 swprintf F -GLIBC_2.4 swscanf F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sys_errlist D 0x420 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 syslog F -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.4 vasprintf F -GLIBC_2.4 vdprintf F -GLIBC_2.4 vfprintf F -GLIBC_2.4 vfscanf F -GLIBC_2.4 vfwprintf F -GLIBC_2.4 vfwscanf F -GLIBC_2.4 vprintf F -GLIBC_2.4 vscanf F -GLIBC_2.4 vsnprintf F -GLIBC_2.4 vsprintf F -GLIBC_2.4 vsscanf F -GLIBC_2.4 vswprintf F -GLIBC_2.4 vswscanf F -GLIBC_2.4 vsyslog F -GLIBC_2.4 vwprintf F -GLIBC_2.4 vwscanf F -GLIBC_2.4 wcstold F -GLIBC_2.4 wcstold_l F -GLIBC_2.4 wprintf F -GLIBC_2.4 wscanf F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __nldbl___isoc99_fscanf F -GLIBC_2.7 __nldbl___isoc99_fwscanf F -GLIBC_2.7 __nldbl___isoc99_scanf F -GLIBC_2.7 __nldbl___isoc99_sscanf F -GLIBC_2.7 __nldbl___isoc99_swscanf F -GLIBC_2.7 __nldbl___isoc99_vfscanf F -GLIBC_2.7 __nldbl___isoc99_vfwscanf F -GLIBC_2.7 __nldbl___isoc99_vscanf F -GLIBC_2.7 __nldbl___isoc99_vsscanf F -GLIBC_2.7 __nldbl___isoc99_vswscanf F -GLIBC_2.7 __nldbl___isoc99_vwscanf F -GLIBC_2.7 __nldbl___isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __nldbl___asprintf_chk F -GLIBC_2.8 __nldbl___dprintf_chk F -GLIBC_2.8 __nldbl___obstack_printf_chk F -GLIBC_2.8 __nldbl___obstack_vprintf_chk F -GLIBC_2.8 __nldbl___vasprintf_chk F -GLIBC_2.8 __nldbl___vdprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libcrypt-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libcrypt-le.abilist deleted file mode 100644 index 58944b3d83..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libcrypt-le.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 crypt F -GLIBC_2.17 crypt_r F -GLIBC_2.17 encrypt F -GLIBC_2.17 encrypt_r F -GLIBC_2.17 fcrypt F -GLIBC_2.17 setkey F -GLIBC_2.17 setkey_r F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libcrypt.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libcrypt.abilist deleted file mode 100644 index 52cf1ac766..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 crypt F -GLIBC_2.3 crypt_r F -GLIBC_2.3 encrypt F -GLIBC_2.3 encrypt_r F -GLIBC_2.3 fcrypt F -GLIBC_2.3 setkey F -GLIBC_2.3 setkey_r F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libdl-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libdl-le.abilist deleted file mode 100644 index 1b4b1f77ed..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libdl-le.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 dladdr F -GLIBC_2.17 dladdr1 F -GLIBC_2.17 dlclose F -GLIBC_2.17 dlerror F -GLIBC_2.17 dlinfo F -GLIBC_2.17 dlmopen F -GLIBC_2.17 dlopen F -GLIBC_2.17 dlsym F -GLIBC_2.17 dlvsym F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libdl.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libdl.abilist deleted file mode 100644 index 764ddc1c19..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libdl.abilist +++ /dev/null @@ -1,12 +0,0 @@ -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 dladdr F -GLIBC_2.3 dlclose F -GLIBC_2.3 dlerror F -GLIBC_2.3 dlopen F -GLIBC_2.3 dlsym F -GLIBC_2.3 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist deleted file mode 100644 index 9658ded223..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist +++ /dev/null @@ -1,469 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 _LIB_VERSION D 0x4 -GLIBC_2.17 __acos_finite F -GLIBC_2.17 __acosf_finite F -GLIBC_2.17 __acosh_finite F -GLIBC_2.17 __acoshf_finite F -GLIBC_2.17 __acoshl_finite F -GLIBC_2.17 __acosl_finite F -GLIBC_2.17 __asin_finite F -GLIBC_2.17 __asinf_finite F -GLIBC_2.17 __asinl_finite F -GLIBC_2.17 __atan2_finite F -GLIBC_2.17 __atan2f_finite F -GLIBC_2.17 __atan2l_finite F -GLIBC_2.17 __atanh_finite F -GLIBC_2.17 __atanhf_finite F -GLIBC_2.17 __atanhl_finite F -GLIBC_2.17 __clog10 F -GLIBC_2.17 __clog10f F -GLIBC_2.17 __clog10l F -GLIBC_2.17 __cosh_finite F -GLIBC_2.17 __coshf_finite F -GLIBC_2.17 __coshl_finite F -GLIBC_2.17 __exp10_finite F -GLIBC_2.17 __exp10f_finite F -GLIBC_2.17 __exp10l_finite F -GLIBC_2.17 __exp2_finite F -GLIBC_2.17 __exp2f_finite F -GLIBC_2.17 __exp2l_finite F -GLIBC_2.17 __exp_finite F -GLIBC_2.17 __expf_finite F -GLIBC_2.17 __expl_finite F -GLIBC_2.17 __fe_dfl_env D 0x8 -GLIBC_2.17 __fe_enabled_env D 0x8 -GLIBC_2.17 __fe_nomask_env F -GLIBC_2.17 __fe_nonieee_env D 0x8 -GLIBC_2.17 __finite F -GLIBC_2.17 __finitef F -GLIBC_2.17 __finitel F -GLIBC_2.17 __fmod_finite F -GLIBC_2.17 __fmodf_finite F -GLIBC_2.17 __fmodl_finite F -GLIBC_2.17 __fpclassify F -GLIBC_2.17 __fpclassifyf F -GLIBC_2.17 __fpclassifyl F -GLIBC_2.17 __gamma_r_finite F -GLIBC_2.17 __gammaf_r_finite F -GLIBC_2.17 __gammal_r_finite F -GLIBC_2.17 __hypot_finite F -GLIBC_2.17 __hypotf_finite F -GLIBC_2.17 __hypotl_finite F -GLIBC_2.17 __j0_finite F -GLIBC_2.17 __j0f_finite F -GLIBC_2.17 __j0l_finite F -GLIBC_2.17 __j1_finite F -GLIBC_2.17 __j1f_finite F -GLIBC_2.17 __j1l_finite F -GLIBC_2.17 __jn_finite F -GLIBC_2.17 __jnf_finite F -GLIBC_2.17 __jnl_finite F -GLIBC_2.17 __lgamma_r_finite F -GLIBC_2.17 __lgammaf_r_finite F -GLIBC_2.17 __lgammal_r_finite F -GLIBC_2.17 __log10_finite F -GLIBC_2.17 __log10f_finite F -GLIBC_2.17 __log10l_finite F -GLIBC_2.17 __log2_finite F -GLIBC_2.17 __log2f_finite F -GLIBC_2.17 __log2l_finite F -GLIBC_2.17 __log_finite F -GLIBC_2.17 __logf_finite F -GLIBC_2.17 __logl_finite F -GLIBC_2.17 __nldbl_nexttowardf F -GLIBC_2.17 __pow_finite F -GLIBC_2.17 __powf_finite F -GLIBC_2.17 __powl_finite F -GLIBC_2.17 __remainder_finite F -GLIBC_2.17 __remainderf_finite F -GLIBC_2.17 __remainderl_finite F -GLIBC_2.17 __scalb_finite F -GLIBC_2.17 __scalbf_finite F -GLIBC_2.17 __scalbl_finite F -GLIBC_2.17 __signbit F -GLIBC_2.17 __signbitf F -GLIBC_2.17 __signbitl F -GLIBC_2.17 __sinh_finite F -GLIBC_2.17 __sinhf_finite F -GLIBC_2.17 __sinhl_finite F -GLIBC_2.17 __sqrt_finite F -GLIBC_2.17 __sqrtf_finite F -GLIBC_2.17 __sqrtl_finite F -GLIBC_2.17 __y0_finite F -GLIBC_2.17 __y0f_finite F -GLIBC_2.17 __y0l_finite F -GLIBC_2.17 __y1_finite F -GLIBC_2.17 __y1f_finite F -GLIBC_2.17 __y1l_finite F -GLIBC_2.17 __yn_finite F -GLIBC_2.17 __ynf_finite F -GLIBC_2.17 __ynl_finite F -GLIBC_2.17 acos F -GLIBC_2.17 acosf F -GLIBC_2.17 acosh F -GLIBC_2.17 acoshf F -GLIBC_2.17 acoshl F -GLIBC_2.17 acosl F -GLIBC_2.17 asin F -GLIBC_2.17 asinf F -GLIBC_2.17 asinh F -GLIBC_2.17 asinhf F -GLIBC_2.17 asinhl F -GLIBC_2.17 asinl F -GLIBC_2.17 atan F -GLIBC_2.17 atan2 F -GLIBC_2.17 atan2f F -GLIBC_2.17 atan2l F -GLIBC_2.17 atanf F -GLIBC_2.17 atanh F -GLIBC_2.17 atanhf F -GLIBC_2.17 atanhl F -GLIBC_2.17 atanl F -GLIBC_2.17 cabs F -GLIBC_2.17 cabsf F -GLIBC_2.17 cabsl F -GLIBC_2.17 cacos F -GLIBC_2.17 cacosf F -GLIBC_2.17 cacosh F -GLIBC_2.17 cacoshf F -GLIBC_2.17 cacoshl F -GLIBC_2.17 cacosl F -GLIBC_2.17 carg F -GLIBC_2.17 cargf F -GLIBC_2.17 cargl F -GLIBC_2.17 casin F -GLIBC_2.17 casinf F -GLIBC_2.17 casinh F -GLIBC_2.17 casinhf F -GLIBC_2.17 casinhl F -GLIBC_2.17 casinl F -GLIBC_2.17 catan F -GLIBC_2.17 catanf F -GLIBC_2.17 catanh F -GLIBC_2.17 catanhf F -GLIBC_2.17 catanhl F -GLIBC_2.17 catanl F -GLIBC_2.17 cbrt F -GLIBC_2.17 cbrtf F -GLIBC_2.17 cbrtl F -GLIBC_2.17 ccos F -GLIBC_2.17 ccosf F -GLIBC_2.17 ccosh F -GLIBC_2.17 ccoshf F -GLIBC_2.17 ccoshl F -GLIBC_2.17 ccosl F -GLIBC_2.17 ceil F -GLIBC_2.17 ceilf F -GLIBC_2.17 ceill F -GLIBC_2.17 cexp F -GLIBC_2.17 cexpf F -GLIBC_2.17 cexpl F -GLIBC_2.17 cimag F -GLIBC_2.17 cimagf F -GLIBC_2.17 cimagl F -GLIBC_2.17 clog F -GLIBC_2.17 clog10 F -GLIBC_2.17 clog10f F -GLIBC_2.17 clog10l F -GLIBC_2.17 clogf F -GLIBC_2.17 clogl F -GLIBC_2.17 conj F -GLIBC_2.17 conjf F -GLIBC_2.17 conjl F -GLIBC_2.17 copysign F -GLIBC_2.17 copysignf F -GLIBC_2.17 copysignl F -GLIBC_2.17 cos F -GLIBC_2.17 cosf F -GLIBC_2.17 cosh F -GLIBC_2.17 coshf F -GLIBC_2.17 coshl F -GLIBC_2.17 cosl F -GLIBC_2.17 cpow F -GLIBC_2.17 cpowf F -GLIBC_2.17 cpowl F -GLIBC_2.17 cproj F -GLIBC_2.17 cprojf F -GLIBC_2.17 cprojl F -GLIBC_2.17 creal F -GLIBC_2.17 crealf F -GLIBC_2.17 creall F -GLIBC_2.17 csin F -GLIBC_2.17 csinf F -GLIBC_2.17 csinh F -GLIBC_2.17 csinhf F -GLIBC_2.17 csinhl F -GLIBC_2.17 csinl F -GLIBC_2.17 csqrt F -GLIBC_2.17 csqrtf F -GLIBC_2.17 csqrtl F -GLIBC_2.17 ctan F -GLIBC_2.17 ctanf F -GLIBC_2.17 ctanh F -GLIBC_2.17 ctanhf F -GLIBC_2.17 ctanhl F -GLIBC_2.17 ctanl F -GLIBC_2.17 drem F -GLIBC_2.17 dremf F -GLIBC_2.17 dreml F -GLIBC_2.17 erf F -GLIBC_2.17 erfc F -GLIBC_2.17 erfcf F -GLIBC_2.17 erfcl F -GLIBC_2.17 erff F -GLIBC_2.17 erfl F -GLIBC_2.17 exp F -GLIBC_2.17 exp10 F -GLIBC_2.17 exp10f F -GLIBC_2.17 exp10l F -GLIBC_2.17 exp2 F -GLIBC_2.17 exp2f F -GLIBC_2.17 exp2l F -GLIBC_2.17 expf F -GLIBC_2.17 expl F -GLIBC_2.17 expm1 F -GLIBC_2.17 expm1f F -GLIBC_2.17 expm1l F -GLIBC_2.17 fabs F -GLIBC_2.17 fabsf F -GLIBC_2.17 fabsl F -GLIBC_2.17 fdim F -GLIBC_2.17 fdimf F -GLIBC_2.17 fdiml F -GLIBC_2.17 feclearexcept F -GLIBC_2.17 fedisableexcept F -GLIBC_2.17 feenableexcept F -GLIBC_2.17 fegetenv F -GLIBC_2.17 fegetexcept F -GLIBC_2.17 fegetexceptflag F -GLIBC_2.17 fegetround F -GLIBC_2.17 feholdexcept F -GLIBC_2.17 feraiseexcept F -GLIBC_2.17 fesetenv F -GLIBC_2.17 fesetexceptflag F -GLIBC_2.17 fesetround F -GLIBC_2.17 fetestexcept F -GLIBC_2.17 feupdateenv F -GLIBC_2.17 finite F -GLIBC_2.17 finitef F -GLIBC_2.17 finitel F -GLIBC_2.17 floor F -GLIBC_2.17 floorf F -GLIBC_2.17 floorl F -GLIBC_2.17 fma F -GLIBC_2.17 fmaf F -GLIBC_2.17 fmal F -GLIBC_2.17 fmax F -GLIBC_2.17 fmaxf F -GLIBC_2.17 fmaxl F -GLIBC_2.17 fmin F -GLIBC_2.17 fminf F -GLIBC_2.17 fminl F -GLIBC_2.17 fmod F -GLIBC_2.17 fmodf F -GLIBC_2.17 fmodl F -GLIBC_2.17 frexp F -GLIBC_2.17 frexpf F -GLIBC_2.17 frexpl F -GLIBC_2.17 gamma F -GLIBC_2.17 gammaf F -GLIBC_2.17 gammal F -GLIBC_2.17 hypot F -GLIBC_2.17 hypotf F -GLIBC_2.17 hypotl F -GLIBC_2.17 ilogb F -GLIBC_2.17 ilogbf F -GLIBC_2.17 ilogbl F -GLIBC_2.17 j0 F -GLIBC_2.17 j0f F -GLIBC_2.17 j0l F -GLIBC_2.17 j1 F -GLIBC_2.17 j1f F -GLIBC_2.17 j1l F -GLIBC_2.17 jn F -GLIBC_2.17 jnf F -GLIBC_2.17 jnl F -GLIBC_2.17 ldexp F -GLIBC_2.17 ldexpf F -GLIBC_2.17 ldexpl F -GLIBC_2.17 lgamma F -GLIBC_2.17 lgamma_r F -GLIBC_2.17 lgammaf F -GLIBC_2.17 lgammaf_r F -GLIBC_2.17 lgammal F -GLIBC_2.17 lgammal_r F -GLIBC_2.17 llrint F -GLIBC_2.17 llrintf F -GLIBC_2.17 llrintl F -GLIBC_2.17 llround F -GLIBC_2.17 llroundf F -GLIBC_2.17 llroundl F -GLIBC_2.17 log F -GLIBC_2.17 log10 F -GLIBC_2.17 log10f F -GLIBC_2.17 log10l F -GLIBC_2.17 log1p F -GLIBC_2.17 log1pf F -GLIBC_2.17 log1pl F -GLIBC_2.17 log2 F -GLIBC_2.17 log2f F -GLIBC_2.17 log2l F -GLIBC_2.17 logb F -GLIBC_2.17 logbf F -GLIBC_2.17 logbl F -GLIBC_2.17 logf F -GLIBC_2.17 logl F -GLIBC_2.17 lrint F -GLIBC_2.17 lrintf F -GLIBC_2.17 lrintl F -GLIBC_2.17 lround F -GLIBC_2.17 lroundf F -GLIBC_2.17 lroundl F -GLIBC_2.17 matherr F -GLIBC_2.17 modf F -GLIBC_2.17 modff F -GLIBC_2.17 modfl F -GLIBC_2.17 nan F -GLIBC_2.17 nanf F -GLIBC_2.17 nanl F -GLIBC_2.17 nearbyint F -GLIBC_2.17 nearbyintf F -GLIBC_2.17 nearbyintl F -GLIBC_2.17 nextafter F -GLIBC_2.17 nextafterf F -GLIBC_2.17 nextafterl F -GLIBC_2.17 nexttoward F -GLIBC_2.17 nexttowardf F -GLIBC_2.17 nexttowardl F -GLIBC_2.17 pow F -GLIBC_2.17 pow10 F -GLIBC_2.17 pow10f F -GLIBC_2.17 pow10l F -GLIBC_2.17 powf F -GLIBC_2.17 powl F -GLIBC_2.17 remainder F -GLIBC_2.17 remainderf F -GLIBC_2.17 remainderl F -GLIBC_2.17 remquo F -GLIBC_2.17 remquof F -GLIBC_2.17 remquol F -GLIBC_2.17 rint F -GLIBC_2.17 rintf F -GLIBC_2.17 rintl F -GLIBC_2.17 round F -GLIBC_2.17 roundf F -GLIBC_2.17 roundl F -GLIBC_2.17 scalb F -GLIBC_2.17 scalbf F -GLIBC_2.17 scalbl F -GLIBC_2.17 scalbln F -GLIBC_2.17 scalblnf F -GLIBC_2.17 scalblnl F -GLIBC_2.17 scalbn F -GLIBC_2.17 scalbnf F -GLIBC_2.17 scalbnl F -GLIBC_2.17 signgam D 0x4 -GLIBC_2.17 significand F -GLIBC_2.17 significandf F -GLIBC_2.17 significandl F -GLIBC_2.17 sin F -GLIBC_2.17 sincos F -GLIBC_2.17 sincosf F -GLIBC_2.17 sincosl F -GLIBC_2.17 sinf F -GLIBC_2.17 sinh F -GLIBC_2.17 sinhf F -GLIBC_2.17 sinhl F -GLIBC_2.17 sinl F -GLIBC_2.17 sqrt F -GLIBC_2.17 sqrtf F -GLIBC_2.17 sqrtl F -GLIBC_2.17 tan F -GLIBC_2.17 tanf F -GLIBC_2.17 tanh F -GLIBC_2.17 tanhf F -GLIBC_2.17 tanhl F -GLIBC_2.17 tanl F -GLIBC_2.17 tgamma F -GLIBC_2.17 tgammaf F -GLIBC_2.17 tgammal F -GLIBC_2.17 trunc F -GLIBC_2.17 truncf F -GLIBC_2.17 truncl F -GLIBC_2.17 y0 F -GLIBC_2.17 y0f F -GLIBC_2.17 y0l F -GLIBC_2.17 y1 F -GLIBC_2.17 y1f F -GLIBC_2.17 y1l F -GLIBC_2.17 yn F -GLIBC_2.17 ynf F -GLIBC_2.17 ynl F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __fe_dfl_mode D 0x8 -GLIBC_2.25 __iscanonicall F -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist deleted file mode 100644 index afd381791a..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist +++ /dev/null @@ -1,569 +0,0 @@ -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __acoshl_finite F -GLIBC_2.15 __acosl_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __asinl_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atan2l_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __atanhl_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __coshl_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp10l_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp2l_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __expl_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __fmodl_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __gammal_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __hypotl_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j0l_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __j1l_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __jnl_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __lgammal_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log10l_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log2l_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __logl_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __powl_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __remainderl_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __scalbl_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sinhl_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __sqrtl_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y0l_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __y1l_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.15 __ynl_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __fe_dfl_mode D 0x8 -GLIBC_2.25 __iscanonicall F -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 _LIB_VERSION D 0x4 -GLIBC_2.3 __clog10 F -GLIBC_2.3 __clog10f F -GLIBC_2.3 __clog10l F -GLIBC_2.3 __fe_dfl_env D 0x8 -GLIBC_2.3 __fe_enabled_env D 0x8 -GLIBC_2.3 __fe_nomask_env F -GLIBC_2.3 __fe_nonieee_env D 0x8 -GLIBC_2.3 __finite F -GLIBC_2.3 __finitef F -GLIBC_2.3 __finitel F -GLIBC_2.3 __fpclassify F -GLIBC_2.3 __fpclassifyf F -GLIBC_2.3 __signbit F -GLIBC_2.3 __signbitf F -GLIBC_2.3 acos F -GLIBC_2.3 acosf F -GLIBC_2.3 acosh F -GLIBC_2.3 acoshf F -GLIBC_2.3 acoshl F -GLIBC_2.3 acosl F -GLIBC_2.3 asin F -GLIBC_2.3 asinf F -GLIBC_2.3 asinh F -GLIBC_2.3 asinhf F -GLIBC_2.3 asinhl F -GLIBC_2.3 asinl F -GLIBC_2.3 atan F -GLIBC_2.3 atan2 F -GLIBC_2.3 atan2f F -GLIBC_2.3 atan2l F -GLIBC_2.3 atanf F -GLIBC_2.3 atanh F -GLIBC_2.3 atanhf F -GLIBC_2.3 atanhl F -GLIBC_2.3 atanl F -GLIBC_2.3 cabs F -GLIBC_2.3 cabsf F -GLIBC_2.3 cabsl F -GLIBC_2.3 cacos F -GLIBC_2.3 cacosf F -GLIBC_2.3 cacosh F -GLIBC_2.3 cacoshf F -GLIBC_2.3 cacoshl F -GLIBC_2.3 cacosl F -GLIBC_2.3 carg F -GLIBC_2.3 cargf F -GLIBC_2.3 cargl F -GLIBC_2.3 casin F -GLIBC_2.3 casinf F -GLIBC_2.3 casinh F -GLIBC_2.3 casinhf F -GLIBC_2.3 casinhl F -GLIBC_2.3 casinl F -GLIBC_2.3 catan F -GLIBC_2.3 catanf F -GLIBC_2.3 catanh F -GLIBC_2.3 catanhf F -GLIBC_2.3 catanhl F -GLIBC_2.3 catanl F -GLIBC_2.3 cbrt F -GLIBC_2.3 cbrtf F -GLIBC_2.3 cbrtl F -GLIBC_2.3 ccos F -GLIBC_2.3 ccosf F -GLIBC_2.3 ccosh F -GLIBC_2.3 ccoshf F -GLIBC_2.3 ccoshl F -GLIBC_2.3 ccosl F -GLIBC_2.3 ceil F -GLIBC_2.3 ceilf F -GLIBC_2.3 ceill F -GLIBC_2.3 cexp F -GLIBC_2.3 cexpf F -GLIBC_2.3 cexpl F -GLIBC_2.3 cimag F -GLIBC_2.3 cimagf F -GLIBC_2.3 cimagl F -GLIBC_2.3 clog F -GLIBC_2.3 clog10 F -GLIBC_2.3 clog10f F -GLIBC_2.3 clog10l F -GLIBC_2.3 clogf F -GLIBC_2.3 clogl F -GLIBC_2.3 conj F -GLIBC_2.3 conjf F -GLIBC_2.3 conjl F -GLIBC_2.3 copysign F -GLIBC_2.3 copysignf F -GLIBC_2.3 copysignl F -GLIBC_2.3 cos F -GLIBC_2.3 cosf F -GLIBC_2.3 cosh F -GLIBC_2.3 coshf F -GLIBC_2.3 coshl F -GLIBC_2.3 cosl F -GLIBC_2.3 cpow F -GLIBC_2.3 cpowf F -GLIBC_2.3 cpowl F -GLIBC_2.3 cproj F -GLIBC_2.3 cprojf F -GLIBC_2.3 cprojl F -GLIBC_2.3 creal F -GLIBC_2.3 crealf F -GLIBC_2.3 creall F -GLIBC_2.3 csin F -GLIBC_2.3 csinf F -GLIBC_2.3 csinh F -GLIBC_2.3 csinhf F -GLIBC_2.3 csinhl F -GLIBC_2.3 csinl F -GLIBC_2.3 csqrt F -GLIBC_2.3 csqrtf F -GLIBC_2.3 csqrtl F -GLIBC_2.3 ctan F -GLIBC_2.3 ctanf F -GLIBC_2.3 ctanh F -GLIBC_2.3 ctanhf F -GLIBC_2.3 ctanhl F -GLIBC_2.3 ctanl F -GLIBC_2.3 drem F -GLIBC_2.3 dremf F -GLIBC_2.3 dreml F -GLIBC_2.3 erf F -GLIBC_2.3 erfc F -GLIBC_2.3 erfcf F -GLIBC_2.3 erfcl F -GLIBC_2.3 erff F -GLIBC_2.3 erfl F -GLIBC_2.3 exp F -GLIBC_2.3 exp10 F -GLIBC_2.3 exp10f F -GLIBC_2.3 exp10l F -GLIBC_2.3 exp2 F -GLIBC_2.3 exp2f F -GLIBC_2.3 expf F -GLIBC_2.3 expl F -GLIBC_2.3 expm1 F -GLIBC_2.3 expm1f F -GLIBC_2.3 expm1l F -GLIBC_2.3 fabs F -GLIBC_2.3 fabsf F -GLIBC_2.3 fabsl F -GLIBC_2.3 fdim F -GLIBC_2.3 fdimf F -GLIBC_2.3 fdiml F -GLIBC_2.3 feclearexcept F -GLIBC_2.3 fedisableexcept F -GLIBC_2.3 feenableexcept F -GLIBC_2.3 fegetenv F -GLIBC_2.3 fegetexcept F -GLIBC_2.3 fegetexceptflag F -GLIBC_2.3 fegetround F -GLIBC_2.3 feholdexcept F -GLIBC_2.3 feraiseexcept F -GLIBC_2.3 fesetenv F -GLIBC_2.3 fesetexceptflag F -GLIBC_2.3 fesetround F -GLIBC_2.3 fetestexcept F -GLIBC_2.3 feupdateenv F -GLIBC_2.3 finite F -GLIBC_2.3 finitef F -GLIBC_2.3 finitel F -GLIBC_2.3 floor F -GLIBC_2.3 floorf F -GLIBC_2.3 floorl F -GLIBC_2.3 fma F -GLIBC_2.3 fmaf F -GLIBC_2.3 fmal F -GLIBC_2.3 fmax F -GLIBC_2.3 fmaxf F -GLIBC_2.3 fmaxl F -GLIBC_2.3 fmin F -GLIBC_2.3 fminf F -GLIBC_2.3 fminl F -GLIBC_2.3 fmod F -GLIBC_2.3 fmodf F -GLIBC_2.3 fmodl F -GLIBC_2.3 frexp F -GLIBC_2.3 frexpf F -GLIBC_2.3 frexpl F -GLIBC_2.3 gamma F -GLIBC_2.3 gammaf F -GLIBC_2.3 gammal F -GLIBC_2.3 hypot F -GLIBC_2.3 hypotf F -GLIBC_2.3 hypotl F -GLIBC_2.3 ilogb F -GLIBC_2.3 ilogbf F -GLIBC_2.3 ilogbl F -GLIBC_2.3 j0 F -GLIBC_2.3 j0f F -GLIBC_2.3 j0l F -GLIBC_2.3 j1 F -GLIBC_2.3 j1f F -GLIBC_2.3 j1l F -GLIBC_2.3 jn F -GLIBC_2.3 jnf F -GLIBC_2.3 jnl F -GLIBC_2.3 ldexp F -GLIBC_2.3 ldexpf F -GLIBC_2.3 ldexpl F -GLIBC_2.3 lgamma F -GLIBC_2.3 lgamma_r F -GLIBC_2.3 lgammaf F -GLIBC_2.3 lgammaf_r F -GLIBC_2.3 lgammal F -GLIBC_2.3 lgammal_r F -GLIBC_2.3 llrint F -GLIBC_2.3 llrintf F -GLIBC_2.3 llrintl F -GLIBC_2.3 llround F -GLIBC_2.3 llroundf F -GLIBC_2.3 llroundl F -GLIBC_2.3 log F -GLIBC_2.3 log10 F -GLIBC_2.3 log10f F -GLIBC_2.3 log10l F -GLIBC_2.3 log1p F -GLIBC_2.3 log1pf F -GLIBC_2.3 log1pl F -GLIBC_2.3 log2 F -GLIBC_2.3 log2f F -GLIBC_2.3 log2l F -GLIBC_2.3 logb F -GLIBC_2.3 logbf F -GLIBC_2.3 logbl F -GLIBC_2.3 logf F -GLIBC_2.3 logl F -GLIBC_2.3 lrint F -GLIBC_2.3 lrintf F -GLIBC_2.3 lrintl F -GLIBC_2.3 lround F -GLIBC_2.3 lroundf F -GLIBC_2.3 lroundl F -GLIBC_2.3 matherr F -GLIBC_2.3 modf F -GLIBC_2.3 modff F -GLIBC_2.3 modfl F -GLIBC_2.3 nan F -GLIBC_2.3 nanf F -GLIBC_2.3 nanl F -GLIBC_2.3 nearbyint F -GLIBC_2.3 nearbyintf F -GLIBC_2.3 nearbyintl F -GLIBC_2.3 nextafter F -GLIBC_2.3 nextafterf F -GLIBC_2.3 nextafterl F -GLIBC_2.3 nexttoward F -GLIBC_2.3 nexttowardf F -GLIBC_2.3 nexttowardl F -GLIBC_2.3 pow F -GLIBC_2.3 pow10 F -GLIBC_2.3 pow10f F -GLIBC_2.3 pow10l F -GLIBC_2.3 powf F -GLIBC_2.3 powl F -GLIBC_2.3 remainder F -GLIBC_2.3 remainderf F -GLIBC_2.3 remainderl F -GLIBC_2.3 remquo F -GLIBC_2.3 remquof F -GLIBC_2.3 remquol F -GLIBC_2.3 rint F -GLIBC_2.3 rintf F -GLIBC_2.3 rintl F -GLIBC_2.3 round F -GLIBC_2.3 roundf F -GLIBC_2.3 roundl F -GLIBC_2.3 scalb F -GLIBC_2.3 scalbf F -GLIBC_2.3 scalbl F -GLIBC_2.3 scalbln F -GLIBC_2.3 scalblnf F -GLIBC_2.3 scalblnl F -GLIBC_2.3 scalbn F -GLIBC_2.3 scalbnf F -GLIBC_2.3 scalbnl F -GLIBC_2.3 signgam D 0x4 -GLIBC_2.3 significand F -GLIBC_2.3 significandf F -GLIBC_2.3 significandl F -GLIBC_2.3 sin F -GLIBC_2.3 sincos F -GLIBC_2.3 sincosf F -GLIBC_2.3 sincosl F -GLIBC_2.3 sinf F -GLIBC_2.3 sinh F -GLIBC_2.3 sinhf F -GLIBC_2.3 sinhl F -GLIBC_2.3 sinl F -GLIBC_2.3 sqrt F -GLIBC_2.3 sqrtf F -GLIBC_2.3 sqrtl F -GLIBC_2.3 tan F -GLIBC_2.3 tanf F -GLIBC_2.3 tanh F -GLIBC_2.3 tanhf F -GLIBC_2.3 tanhl F -GLIBC_2.3 tanl F -GLIBC_2.3 tgamma F -GLIBC_2.3 tgammaf F -GLIBC_2.3 tgammal F -GLIBC_2.3 trunc F -GLIBC_2.3 truncf F -GLIBC_2.3 truncl F -GLIBC_2.3 y0 F -GLIBC_2.3 y0f F -GLIBC_2.3 y0l F -GLIBC_2.3 y1 F -GLIBC_2.3 y1f F -GLIBC_2.3 y1l F -GLIBC_2.3 yn F -GLIBC_2.3 ynf F -GLIBC_2.3 ynl F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __clog10l F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fpclassifyl F -GLIBC_2.4 __nldbl_nexttowardf F -GLIBC_2.4 __signbitl F -GLIBC_2.4 acoshl F -GLIBC_2.4 acosl F -GLIBC_2.4 asinhl F -GLIBC_2.4 asinl F -GLIBC_2.4 atan2l F -GLIBC_2.4 atanhl F -GLIBC_2.4 atanl F -GLIBC_2.4 cabsl F -GLIBC_2.4 cacoshl F -GLIBC_2.4 cacosl F -GLIBC_2.4 cargl F -GLIBC_2.4 casinhl F -GLIBC_2.4 casinl F -GLIBC_2.4 catanhl F -GLIBC_2.4 catanl F -GLIBC_2.4 cbrtl F -GLIBC_2.4 ccoshl F -GLIBC_2.4 ccosl F -GLIBC_2.4 ceill F -GLIBC_2.4 cexpl F -GLIBC_2.4 cimagl F -GLIBC_2.4 clog10l F -GLIBC_2.4 clogl F -GLIBC_2.4 conjl F -GLIBC_2.4 copysignl F -GLIBC_2.4 coshl F -GLIBC_2.4 cosl F -GLIBC_2.4 cpowl F -GLIBC_2.4 cprojl F -GLIBC_2.4 creall F -GLIBC_2.4 csinhl F -GLIBC_2.4 csinl F -GLIBC_2.4 csqrtl F -GLIBC_2.4 ctanhl F -GLIBC_2.4 ctanl F -GLIBC_2.4 dreml F -GLIBC_2.4 erfcl F -GLIBC_2.4 erfl F -GLIBC_2.4 exp10l F -GLIBC_2.4 exp2l F -GLIBC_2.4 expl F -GLIBC_2.4 expm1l F -GLIBC_2.4 fabsl F -GLIBC_2.4 fdiml F -GLIBC_2.4 finitel F -GLIBC_2.4 floorl F -GLIBC_2.4 fmal F -GLIBC_2.4 fmaxl F -GLIBC_2.4 fminl F -GLIBC_2.4 fmodl F -GLIBC_2.4 frexpl F -GLIBC_2.4 gammal F -GLIBC_2.4 hypotl F -GLIBC_2.4 ilogbl F -GLIBC_2.4 j0l F -GLIBC_2.4 j1l F -GLIBC_2.4 jnl F -GLIBC_2.4 ldexpl F -GLIBC_2.4 lgammal F -GLIBC_2.4 lgammal_r F -GLIBC_2.4 llrintl F -GLIBC_2.4 llroundl F -GLIBC_2.4 log10l F -GLIBC_2.4 log1pl F -GLIBC_2.4 log2l F -GLIBC_2.4 logbl F -GLIBC_2.4 logl F -GLIBC_2.4 lrintl F -GLIBC_2.4 lroundl F -GLIBC_2.4 modfl F -GLIBC_2.4 nanl F -GLIBC_2.4 nearbyintl F -GLIBC_2.4 nextafterl F -GLIBC_2.4 nexttoward F -GLIBC_2.4 nexttowardf F -GLIBC_2.4 nexttowardl F -GLIBC_2.4 pow10l F -GLIBC_2.4 powl F -GLIBC_2.4 remainderl F -GLIBC_2.4 remquol F -GLIBC_2.4 rintl F -GLIBC_2.4 roundl F -GLIBC_2.4 scalbl F -GLIBC_2.4 scalblnl F -GLIBC_2.4 scalbnl F -GLIBC_2.4 significandl F -GLIBC_2.4 sincosl F -GLIBC_2.4 sinhl F -GLIBC_2.4 sinl F -GLIBC_2.4 sqrtl F -GLIBC_2.4 tanhl F -GLIBC_2.4 tanl F -GLIBC_2.4 tgammal F -GLIBC_2.4 truncl F -GLIBC_2.4 y0l F -GLIBC_2.4 y1l F -GLIBC_2.4 ynl F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libnsl-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libnsl-le.abilist deleted file mode 100644 index 63d47aef79..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libnsl-le.abilist +++ /dev/null @@ -1,122 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 __free_fdresult F -GLIBC_2.17 __nis_default_access F -GLIBC_2.17 __nis_default_group F -GLIBC_2.17 __nis_default_owner F -GLIBC_2.17 __nis_default_ttl F -GLIBC_2.17 __nis_finddirectory F -GLIBC_2.17 __nis_hash F -GLIBC_2.17 __nisbind_connect F -GLIBC_2.17 __nisbind_create F -GLIBC_2.17 __nisbind_destroy F -GLIBC_2.17 __nisbind_next F -GLIBC_2.17 __yp_check F -GLIBC_2.17 nis_add F -GLIBC_2.17 nis_add_entry F -GLIBC_2.17 nis_addmember F -GLIBC_2.17 nis_checkpoint F -GLIBC_2.17 nis_clone_directory F -GLIBC_2.17 nis_clone_object F -GLIBC_2.17 nis_clone_result F -GLIBC_2.17 nis_creategroup F -GLIBC_2.17 nis_destroy_object F -GLIBC_2.17 nis_destroygroup F -GLIBC_2.17 nis_dir_cmp F -GLIBC_2.17 nis_domain_of F -GLIBC_2.17 nis_domain_of_r F -GLIBC_2.17 nis_first_entry F -GLIBC_2.17 nis_free_directory F -GLIBC_2.17 nis_free_object F -GLIBC_2.17 nis_free_request F -GLIBC_2.17 nis_freenames F -GLIBC_2.17 nis_freeresult F -GLIBC_2.17 nis_freeservlist F -GLIBC_2.17 nis_freetags F -GLIBC_2.17 nis_getnames F -GLIBC_2.17 nis_getservlist F -GLIBC_2.17 nis_ismember F -GLIBC_2.17 nis_leaf_of F -GLIBC_2.17 nis_leaf_of_r F -GLIBC_2.17 nis_lerror F -GLIBC_2.17 nis_list F -GLIBC_2.17 nis_local_directory F -GLIBC_2.17 nis_local_group F -GLIBC_2.17 nis_local_host F -GLIBC_2.17 nis_local_principal F -GLIBC_2.17 nis_lookup F -GLIBC_2.17 nis_mkdir F -GLIBC_2.17 nis_modify F -GLIBC_2.17 nis_modify_entry F -GLIBC_2.17 nis_name_of F -GLIBC_2.17 nis_name_of_r F -GLIBC_2.17 nis_next_entry F -GLIBC_2.17 nis_perror F -GLIBC_2.17 nis_ping F -GLIBC_2.17 nis_print_directory F -GLIBC_2.17 nis_print_entry F -GLIBC_2.17 nis_print_group F -GLIBC_2.17 nis_print_group_entry F -GLIBC_2.17 nis_print_link F -GLIBC_2.17 nis_print_object F -GLIBC_2.17 nis_print_result F -GLIBC_2.17 nis_print_rights F -GLIBC_2.17 nis_print_table F -GLIBC_2.17 nis_read_obj F -GLIBC_2.17 nis_remove F -GLIBC_2.17 nis_remove_entry F -GLIBC_2.17 nis_removemember F -GLIBC_2.17 nis_rmdir F -GLIBC_2.17 nis_servstate F -GLIBC_2.17 nis_sperrno F -GLIBC_2.17 nis_sperror F -GLIBC_2.17 nis_sperror_r F -GLIBC_2.17 nis_stats F -GLIBC_2.17 nis_verifygroup F -GLIBC_2.17 nis_write_obj F -GLIBC_2.17 readColdStartFile F -GLIBC_2.17 writeColdStartFile F -GLIBC_2.17 xdr_cback_data F -GLIBC_2.17 xdr_domainname F -GLIBC_2.17 xdr_keydat F -GLIBC_2.17 xdr_mapname F -GLIBC_2.17 xdr_obj_p F -GLIBC_2.17 xdr_peername F -GLIBC_2.17 xdr_valdat F -GLIBC_2.17 xdr_yp_buf F -GLIBC_2.17 xdr_ypall F -GLIBC_2.17 xdr_ypbind_binding F -GLIBC_2.17 xdr_ypbind_resp F -GLIBC_2.17 xdr_ypbind_resptype F -GLIBC_2.17 xdr_ypbind_setdom F -GLIBC_2.17 xdr_ypdelete_args F -GLIBC_2.17 xdr_ypmap_parms F -GLIBC_2.17 xdr_ypmaplist F -GLIBC_2.17 xdr_yppush_status F -GLIBC_2.17 xdr_yppushresp_xfr F -GLIBC_2.17 xdr_ypreq_key F -GLIBC_2.17 xdr_ypreq_nokey F -GLIBC_2.17 xdr_ypreq_xfr F -GLIBC_2.17 xdr_ypresp_all F -GLIBC_2.17 xdr_ypresp_key_val F -GLIBC_2.17 xdr_ypresp_maplist F -GLIBC_2.17 xdr_ypresp_master F -GLIBC_2.17 xdr_ypresp_order F -GLIBC_2.17 xdr_ypresp_val F -GLIBC_2.17 xdr_ypresp_xfr F -GLIBC_2.17 xdr_ypstat F -GLIBC_2.17 xdr_ypupdate_args F -GLIBC_2.17 xdr_ypxfrstat F -GLIBC_2.17 yp_all F -GLIBC_2.17 yp_bind F -GLIBC_2.17 yp_first F -GLIBC_2.17 yp_get_default_domain F -GLIBC_2.17 yp_maplist F -GLIBC_2.17 yp_master F -GLIBC_2.17 yp_match F -GLIBC_2.17 yp_next F -GLIBC_2.17 yp_order F -GLIBC_2.17 yp_unbind F -GLIBC_2.17 yp_update F -GLIBC_2.17 ypbinderr_string F -GLIBC_2.17 yperr_string F -GLIBC_2.17 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libnsl.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libnsl.abilist deleted file mode 100644 index 23ef56053e..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libnsl.abilist +++ /dev/null @@ -1,122 +0,0 @@ -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __free_fdresult F -GLIBC_2.3 __nis_default_access F -GLIBC_2.3 __nis_default_group F -GLIBC_2.3 __nis_default_owner F -GLIBC_2.3 __nis_default_ttl F -GLIBC_2.3 __nis_finddirectory F -GLIBC_2.3 __nis_hash F -GLIBC_2.3 __nisbind_connect F -GLIBC_2.3 __nisbind_create F -GLIBC_2.3 __nisbind_destroy F -GLIBC_2.3 __nisbind_next F -GLIBC_2.3 __yp_check F -GLIBC_2.3 nis_add F -GLIBC_2.3 nis_add_entry F -GLIBC_2.3 nis_addmember F -GLIBC_2.3 nis_checkpoint F -GLIBC_2.3 nis_clone_directory F -GLIBC_2.3 nis_clone_object F -GLIBC_2.3 nis_clone_result F -GLIBC_2.3 nis_creategroup F -GLIBC_2.3 nis_destroy_object F -GLIBC_2.3 nis_destroygroup F -GLIBC_2.3 nis_dir_cmp F -GLIBC_2.3 nis_domain_of F -GLIBC_2.3 nis_domain_of_r F -GLIBC_2.3 nis_first_entry F -GLIBC_2.3 nis_free_directory F -GLIBC_2.3 nis_free_object F -GLIBC_2.3 nis_free_request F -GLIBC_2.3 nis_freenames F -GLIBC_2.3 nis_freeresult F -GLIBC_2.3 nis_freeservlist F -GLIBC_2.3 nis_freetags F -GLIBC_2.3 nis_getnames F -GLIBC_2.3 nis_getservlist F -GLIBC_2.3 nis_ismember F -GLIBC_2.3 nis_leaf_of F -GLIBC_2.3 nis_leaf_of_r F -GLIBC_2.3 nis_lerror F -GLIBC_2.3 nis_list F -GLIBC_2.3 nis_local_directory F -GLIBC_2.3 nis_local_group F -GLIBC_2.3 nis_local_host F -GLIBC_2.3 nis_local_principal F -GLIBC_2.3 nis_lookup F -GLIBC_2.3 nis_mkdir F -GLIBC_2.3 nis_modify F -GLIBC_2.3 nis_modify_entry F -GLIBC_2.3 nis_name_of F -GLIBC_2.3 nis_name_of_r F -GLIBC_2.3 nis_next_entry F -GLIBC_2.3 nis_perror F -GLIBC_2.3 nis_ping F -GLIBC_2.3 nis_print_directory F -GLIBC_2.3 nis_print_entry F -GLIBC_2.3 nis_print_group F -GLIBC_2.3 nis_print_group_entry F -GLIBC_2.3 nis_print_link F -GLIBC_2.3 nis_print_object F -GLIBC_2.3 nis_print_result F -GLIBC_2.3 nis_print_rights F -GLIBC_2.3 nis_print_table F -GLIBC_2.3 nis_read_obj F -GLIBC_2.3 nis_remove F -GLIBC_2.3 nis_remove_entry F -GLIBC_2.3 nis_removemember F -GLIBC_2.3 nis_rmdir F -GLIBC_2.3 nis_servstate F -GLIBC_2.3 nis_sperrno F -GLIBC_2.3 nis_sperror F -GLIBC_2.3 nis_sperror_r F -GLIBC_2.3 nis_stats F -GLIBC_2.3 nis_verifygroup F -GLIBC_2.3 nis_write_obj F -GLIBC_2.3 readColdStartFile F -GLIBC_2.3 writeColdStartFile F -GLIBC_2.3 xdr_cback_data F -GLIBC_2.3 xdr_domainname F -GLIBC_2.3 xdr_keydat F -GLIBC_2.3 xdr_mapname F -GLIBC_2.3 xdr_obj_p F -GLIBC_2.3 xdr_peername F -GLIBC_2.3 xdr_valdat F -GLIBC_2.3 xdr_yp_buf F -GLIBC_2.3 xdr_ypall F -GLIBC_2.3 xdr_ypbind_binding F -GLIBC_2.3 xdr_ypbind_resp F -GLIBC_2.3 xdr_ypbind_resptype F -GLIBC_2.3 xdr_ypbind_setdom F -GLIBC_2.3 xdr_ypdelete_args F -GLIBC_2.3 xdr_ypmap_parms F -GLIBC_2.3 xdr_ypmaplist F -GLIBC_2.3 xdr_yppush_status F -GLIBC_2.3 xdr_yppushresp_xfr F -GLIBC_2.3 xdr_ypreq_key F -GLIBC_2.3 xdr_ypreq_nokey F -GLIBC_2.3 xdr_ypreq_xfr F -GLIBC_2.3 xdr_ypresp_all F -GLIBC_2.3 xdr_ypresp_key_val F -GLIBC_2.3 xdr_ypresp_maplist F -GLIBC_2.3 xdr_ypresp_master F -GLIBC_2.3 xdr_ypresp_order F -GLIBC_2.3 xdr_ypresp_val F -GLIBC_2.3 xdr_ypresp_xfr F -GLIBC_2.3 xdr_ypstat F -GLIBC_2.3 xdr_ypupdate_args F -GLIBC_2.3 xdr_ypxfrstat F -GLIBC_2.3 yp_all F -GLIBC_2.3 yp_bind F -GLIBC_2.3 yp_first F -GLIBC_2.3 yp_get_default_domain F -GLIBC_2.3 yp_maplist F -GLIBC_2.3 yp_master F -GLIBC_2.3 yp_match F -GLIBC_2.3 yp_next F -GLIBC_2.3 yp_order F -GLIBC_2.3 yp_unbind F -GLIBC_2.3 yp_update F -GLIBC_2.3 ypbinderr_string F -GLIBC_2.3 yperr_string F -GLIBC_2.3 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist deleted file mode 100644 index 0cf30ee02f..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist +++ /dev/null @@ -1,226 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 _IO_flockfile F -GLIBC_2.17 _IO_ftrylockfile F -GLIBC_2.17 _IO_funlockfile F -GLIBC_2.17 __close F -GLIBC_2.17 __connect F -GLIBC_2.17 __errno_location F -GLIBC_2.17 __fcntl F -GLIBC_2.17 __fork F -GLIBC_2.17 __h_errno_location F -GLIBC_2.17 __libc_allocate_rtsig F -GLIBC_2.17 __libc_current_sigrtmax F -GLIBC_2.17 __libc_current_sigrtmin F -GLIBC_2.17 __lseek F -GLIBC_2.17 __nanosleep F -GLIBC_2.17 __open F -GLIBC_2.17 __open64 F -GLIBC_2.17 __pread64 F -GLIBC_2.17 __pthread_cleanup_routine F -GLIBC_2.17 __pthread_getspecific F -GLIBC_2.17 __pthread_key_create F -GLIBC_2.17 __pthread_mutex_destroy F -GLIBC_2.17 __pthread_mutex_init F -GLIBC_2.17 __pthread_mutex_lock F -GLIBC_2.17 __pthread_mutex_trylock F -GLIBC_2.17 __pthread_mutex_unlock F -GLIBC_2.17 __pthread_mutexattr_destroy F -GLIBC_2.17 __pthread_mutexattr_init F -GLIBC_2.17 __pthread_mutexattr_settype F -GLIBC_2.17 __pthread_once F -GLIBC_2.17 __pthread_register_cancel F -GLIBC_2.17 __pthread_register_cancel_defer F -GLIBC_2.17 __pthread_rwlock_destroy F -GLIBC_2.17 __pthread_rwlock_init F -GLIBC_2.17 __pthread_rwlock_rdlock F -GLIBC_2.17 __pthread_rwlock_tryrdlock F -GLIBC_2.17 __pthread_rwlock_trywrlock F -GLIBC_2.17 __pthread_rwlock_unlock F -GLIBC_2.17 __pthread_rwlock_wrlock F -GLIBC_2.17 __pthread_setspecific F -GLIBC_2.17 __pthread_unregister_cancel F -GLIBC_2.17 __pthread_unregister_cancel_restore F -GLIBC_2.17 __pthread_unwind_next F -GLIBC_2.17 __pwrite64 F -GLIBC_2.17 __read F -GLIBC_2.17 __res_state F -GLIBC_2.17 __send F -GLIBC_2.17 __sigaction F -GLIBC_2.17 __vfork F -GLIBC_2.17 __wait F -GLIBC_2.17 __write F -GLIBC_2.17 _pthread_cleanup_pop F -GLIBC_2.17 _pthread_cleanup_pop_restore F -GLIBC_2.17 _pthread_cleanup_push F -GLIBC_2.17 _pthread_cleanup_push_defer F -GLIBC_2.17 accept F -GLIBC_2.17 close F -GLIBC_2.17 connect F -GLIBC_2.17 fcntl F -GLIBC_2.17 flockfile F -GLIBC_2.17 fork F -GLIBC_2.17 fsync F -GLIBC_2.17 ftrylockfile F -GLIBC_2.17 funlockfile F -GLIBC_2.17 longjmp F -GLIBC_2.17 lseek F -GLIBC_2.17 lseek64 F -GLIBC_2.17 msync F -GLIBC_2.17 nanosleep F -GLIBC_2.17 open F -GLIBC_2.17 open64 F -GLIBC_2.17 pause F -GLIBC_2.17 pread F -GLIBC_2.17 pread64 F -GLIBC_2.17 pthread_attr_destroy F -GLIBC_2.17 pthread_attr_getaffinity_np F -GLIBC_2.17 pthread_attr_getdetachstate F -GLIBC_2.17 pthread_attr_getguardsize F -GLIBC_2.17 pthread_attr_getinheritsched F -GLIBC_2.17 pthread_attr_getschedparam F -GLIBC_2.17 pthread_attr_getschedpolicy F -GLIBC_2.17 pthread_attr_getscope F -GLIBC_2.17 pthread_attr_getstack F -GLIBC_2.17 pthread_attr_getstackaddr F -GLIBC_2.17 pthread_attr_getstacksize F -GLIBC_2.17 pthread_attr_init F -GLIBC_2.17 pthread_attr_setaffinity_np F -GLIBC_2.17 pthread_attr_setdetachstate F -GLIBC_2.17 pthread_attr_setguardsize F -GLIBC_2.17 pthread_attr_setinheritsched F -GLIBC_2.17 pthread_attr_setschedparam F -GLIBC_2.17 pthread_attr_setschedpolicy F -GLIBC_2.17 pthread_attr_setscope F -GLIBC_2.17 pthread_attr_setstack F -GLIBC_2.17 pthread_attr_setstackaddr F -GLIBC_2.17 pthread_attr_setstacksize F -GLIBC_2.17 pthread_barrier_destroy F -GLIBC_2.17 pthread_barrier_init F -GLIBC_2.17 pthread_barrier_wait F -GLIBC_2.17 pthread_barrierattr_destroy F -GLIBC_2.17 pthread_barrierattr_getpshared F -GLIBC_2.17 pthread_barrierattr_init F -GLIBC_2.17 pthread_barrierattr_setpshared F -GLIBC_2.17 pthread_cancel F -GLIBC_2.17 pthread_cond_broadcast F -GLIBC_2.17 pthread_cond_destroy F -GLIBC_2.17 pthread_cond_init F -GLIBC_2.17 pthread_cond_signal F -GLIBC_2.17 pthread_cond_timedwait F -GLIBC_2.17 pthread_cond_wait F -GLIBC_2.17 pthread_condattr_destroy F -GLIBC_2.17 pthread_condattr_getclock F -GLIBC_2.17 pthread_condattr_getpshared F -GLIBC_2.17 pthread_condattr_init F -GLIBC_2.17 pthread_condattr_setclock F -GLIBC_2.17 pthread_condattr_setpshared F -GLIBC_2.17 pthread_create F -GLIBC_2.17 pthread_detach F -GLIBC_2.17 pthread_equal F -GLIBC_2.17 pthread_exit F -GLIBC_2.17 pthread_getaffinity_np F -GLIBC_2.17 pthread_getattr_np F -GLIBC_2.17 pthread_getconcurrency F -GLIBC_2.17 pthread_getcpuclockid F -GLIBC_2.17 pthread_getname_np F -GLIBC_2.17 pthread_getschedparam F -GLIBC_2.17 pthread_getspecific F -GLIBC_2.17 pthread_join F -GLIBC_2.17 pthread_key_create F -GLIBC_2.17 pthread_key_delete F -GLIBC_2.17 pthread_kill F -GLIBC_2.17 pthread_kill_other_threads_np F -GLIBC_2.17 pthread_mutex_consistent F -GLIBC_2.17 pthread_mutex_consistent_np F -GLIBC_2.17 pthread_mutex_destroy F -GLIBC_2.17 pthread_mutex_getprioceiling F -GLIBC_2.17 pthread_mutex_init F -GLIBC_2.17 pthread_mutex_lock F -GLIBC_2.17 pthread_mutex_setprioceiling F -GLIBC_2.17 pthread_mutex_timedlock F -GLIBC_2.17 pthread_mutex_trylock F -GLIBC_2.17 pthread_mutex_unlock F -GLIBC_2.17 pthread_mutexattr_destroy F -GLIBC_2.17 pthread_mutexattr_getkind_np F -GLIBC_2.17 pthread_mutexattr_getprioceiling F -GLIBC_2.17 pthread_mutexattr_getprotocol F -GLIBC_2.17 pthread_mutexattr_getpshared F -GLIBC_2.17 pthread_mutexattr_getrobust F -GLIBC_2.17 pthread_mutexattr_getrobust_np F -GLIBC_2.17 pthread_mutexattr_gettype F -GLIBC_2.17 pthread_mutexattr_init F -GLIBC_2.17 pthread_mutexattr_setkind_np F -GLIBC_2.17 pthread_mutexattr_setprioceiling F -GLIBC_2.17 pthread_mutexattr_setprotocol F -GLIBC_2.17 pthread_mutexattr_setpshared F -GLIBC_2.17 pthread_mutexattr_setrobust F -GLIBC_2.17 pthread_mutexattr_setrobust_np F -GLIBC_2.17 pthread_mutexattr_settype F -GLIBC_2.17 pthread_once F -GLIBC_2.17 pthread_rwlock_destroy F -GLIBC_2.17 pthread_rwlock_init F -GLIBC_2.17 pthread_rwlock_rdlock F -GLIBC_2.17 pthread_rwlock_timedrdlock F -GLIBC_2.17 pthread_rwlock_timedwrlock F -GLIBC_2.17 pthread_rwlock_tryrdlock F -GLIBC_2.17 pthread_rwlock_trywrlock F -GLIBC_2.17 pthread_rwlock_unlock F -GLIBC_2.17 pthread_rwlock_wrlock F -GLIBC_2.17 pthread_rwlockattr_destroy F -GLIBC_2.17 pthread_rwlockattr_getkind_np F -GLIBC_2.17 pthread_rwlockattr_getpshared F -GLIBC_2.17 pthread_rwlockattr_init F -GLIBC_2.17 pthread_rwlockattr_setkind_np F -GLIBC_2.17 pthread_rwlockattr_setpshared F -GLIBC_2.17 pthread_self F -GLIBC_2.17 pthread_setaffinity_np F -GLIBC_2.17 pthread_setcancelstate F -GLIBC_2.17 pthread_setcanceltype F -GLIBC_2.17 pthread_setconcurrency F -GLIBC_2.17 pthread_setname_np F -GLIBC_2.17 pthread_setschedparam F -GLIBC_2.17 pthread_setschedprio F -GLIBC_2.17 pthread_setspecific F -GLIBC_2.17 pthread_sigmask F -GLIBC_2.17 pthread_sigqueue F -GLIBC_2.17 pthread_spin_destroy F -GLIBC_2.17 pthread_spin_init F -GLIBC_2.17 pthread_spin_lock F -GLIBC_2.17 pthread_spin_trylock F -GLIBC_2.17 pthread_spin_unlock F -GLIBC_2.17 pthread_testcancel F -GLIBC_2.17 pthread_timedjoin_np F -GLIBC_2.17 pthread_tryjoin_np F -GLIBC_2.17 pthread_yield F -GLIBC_2.17 pwrite F -GLIBC_2.17 pwrite64 F -GLIBC_2.17 raise F -GLIBC_2.17 read F -GLIBC_2.17 recv F -GLIBC_2.17 recvfrom F -GLIBC_2.17 recvmsg F -GLIBC_2.17 sem_close F -GLIBC_2.17 sem_destroy F -GLIBC_2.17 sem_getvalue F -GLIBC_2.17 sem_init F -GLIBC_2.17 sem_open F -GLIBC_2.17 sem_post F -GLIBC_2.17 sem_timedwait F -GLIBC_2.17 sem_trywait F -GLIBC_2.17 sem_unlink F -GLIBC_2.17 sem_wait F -GLIBC_2.17 send F -GLIBC_2.17 sendmsg F -GLIBC_2.17 sendto F -GLIBC_2.17 sigaction F -GLIBC_2.17 siglongjmp F -GLIBC_2.17 sigwait F -GLIBC_2.17 system F -GLIBC_2.17 tcdrain F -GLIBC_2.17 vfork F -GLIBC_2.17 wait F -GLIBC_2.17 waitpid F -GLIBC_2.17 write F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist deleted file mode 100644 index 464b91a61d..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist +++ /dev/null @@ -1,247 +0,0 @@ -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 _IO_flockfile F -GLIBC_2.3 _IO_ftrylockfile F -GLIBC_2.3 _IO_funlockfile F -GLIBC_2.3 __close F -GLIBC_2.3 __connect F -GLIBC_2.3 __errno_location F -GLIBC_2.3 __fcntl F -GLIBC_2.3 __fork F -GLIBC_2.3 __h_errno_location F -GLIBC_2.3 __libc_allocate_rtsig F -GLIBC_2.3 __libc_current_sigrtmax F -GLIBC_2.3 __libc_current_sigrtmin F -GLIBC_2.3 __lseek F -GLIBC_2.3 __nanosleep F -GLIBC_2.3 __open F -GLIBC_2.3 __open64 F -GLIBC_2.3 __pread64 F -GLIBC_2.3 __pthread_getspecific F -GLIBC_2.3 __pthread_key_create F -GLIBC_2.3 __pthread_mutex_destroy F -GLIBC_2.3 __pthread_mutex_init F -GLIBC_2.3 __pthread_mutex_lock F -GLIBC_2.3 __pthread_mutex_trylock F -GLIBC_2.3 __pthread_mutex_unlock F -GLIBC_2.3 __pthread_mutexattr_destroy F -GLIBC_2.3 __pthread_mutexattr_init F -GLIBC_2.3 __pthread_mutexattr_settype F -GLIBC_2.3 __pthread_once F -GLIBC_2.3 __pthread_rwlock_destroy F -GLIBC_2.3 __pthread_rwlock_init F -GLIBC_2.3 __pthread_rwlock_rdlock F -GLIBC_2.3 __pthread_rwlock_tryrdlock F -GLIBC_2.3 __pthread_rwlock_trywrlock F -GLIBC_2.3 __pthread_rwlock_unlock F -GLIBC_2.3 __pthread_rwlock_wrlock F -GLIBC_2.3 __pthread_setspecific F -GLIBC_2.3 __pwrite64 F -GLIBC_2.3 __read F -GLIBC_2.3 __res_state F -GLIBC_2.3 __send F -GLIBC_2.3 __sigaction F -GLIBC_2.3 __vfork F -GLIBC_2.3 __wait F -GLIBC_2.3 __write F -GLIBC_2.3 _pthread_cleanup_pop F -GLIBC_2.3 _pthread_cleanup_pop_restore F -GLIBC_2.3 _pthread_cleanup_push F -GLIBC_2.3 _pthread_cleanup_push_defer F -GLIBC_2.3 accept F -GLIBC_2.3 close F -GLIBC_2.3 connect F -GLIBC_2.3 fcntl F -GLIBC_2.3 flockfile F -GLIBC_2.3 fork F -GLIBC_2.3 fsync F -GLIBC_2.3 ftrylockfile F -GLIBC_2.3 funlockfile F -GLIBC_2.3 longjmp F -GLIBC_2.3 lseek F -GLIBC_2.3 lseek64 F -GLIBC_2.3 msync F -GLIBC_2.3 nanosleep F -GLIBC_2.3 open F -GLIBC_2.3 open64 F -GLIBC_2.3 pause F -GLIBC_2.3 pread F -GLIBC_2.3 pread64 F -GLIBC_2.3 pthread_attr_destroy F -GLIBC_2.3 pthread_attr_getdetachstate F -GLIBC_2.3 pthread_attr_getguardsize F -GLIBC_2.3 pthread_attr_getinheritsched F -GLIBC_2.3 pthread_attr_getschedparam F -GLIBC_2.3 pthread_attr_getschedpolicy F -GLIBC_2.3 pthread_attr_getscope F -GLIBC_2.3 pthread_attr_getstack F -GLIBC_2.3 pthread_attr_getstackaddr F -GLIBC_2.3 pthread_attr_getstacksize F -GLIBC_2.3 pthread_attr_init F -GLIBC_2.3 pthread_attr_setdetachstate F -GLIBC_2.3 pthread_attr_setguardsize F -GLIBC_2.3 pthread_attr_setinheritsched F -GLIBC_2.3 pthread_attr_setschedparam F -GLIBC_2.3 pthread_attr_setschedpolicy F -GLIBC_2.3 pthread_attr_setscope F -GLIBC_2.3 pthread_attr_setstack F -GLIBC_2.3 pthread_attr_setstackaddr F -GLIBC_2.3 pthread_attr_setstacksize F -GLIBC_2.3 pthread_barrier_destroy F -GLIBC_2.3 pthread_barrier_init F -GLIBC_2.3 pthread_barrier_wait F -GLIBC_2.3 pthread_barrierattr_destroy F -GLIBC_2.3 pthread_barrierattr_init F -GLIBC_2.3 pthread_barrierattr_setpshared F -GLIBC_2.3 pthread_cancel F -GLIBC_2.3 pthread_cond_broadcast F -GLIBC_2.3 pthread_cond_destroy F -GLIBC_2.3 pthread_cond_init F -GLIBC_2.3 pthread_cond_signal F -GLIBC_2.3 pthread_cond_timedwait F -GLIBC_2.3 pthread_cond_wait F -GLIBC_2.3 pthread_condattr_destroy F -GLIBC_2.3 pthread_condattr_getpshared F -GLIBC_2.3 pthread_condattr_init F -GLIBC_2.3 pthread_condattr_setpshared F -GLIBC_2.3 pthread_create F -GLIBC_2.3 pthread_detach F -GLIBC_2.3 pthread_equal F -GLIBC_2.3 pthread_exit F -GLIBC_2.3 pthread_getattr_np F -GLIBC_2.3 pthread_getconcurrency F -GLIBC_2.3 pthread_getcpuclockid F -GLIBC_2.3 pthread_getschedparam F -GLIBC_2.3 pthread_getspecific F -GLIBC_2.3 pthread_join F -GLIBC_2.3 pthread_key_create F -GLIBC_2.3 pthread_key_delete F -GLIBC_2.3 pthread_kill F -GLIBC_2.3 pthread_kill_other_threads_np F -GLIBC_2.3 pthread_mutex_destroy F -GLIBC_2.3 pthread_mutex_init F -GLIBC_2.3 pthread_mutex_lock F -GLIBC_2.3 pthread_mutex_timedlock F -GLIBC_2.3 pthread_mutex_trylock F -GLIBC_2.3 pthread_mutex_unlock F -GLIBC_2.3 pthread_mutexattr_destroy F -GLIBC_2.3 pthread_mutexattr_getkind_np F -GLIBC_2.3 pthread_mutexattr_getpshared F -GLIBC_2.3 pthread_mutexattr_gettype F -GLIBC_2.3 pthread_mutexattr_init F -GLIBC_2.3 pthread_mutexattr_setkind_np F -GLIBC_2.3 pthread_mutexattr_setpshared F -GLIBC_2.3 pthread_mutexattr_settype F -GLIBC_2.3 pthread_once F -GLIBC_2.3 pthread_rwlock_destroy F -GLIBC_2.3 pthread_rwlock_init F -GLIBC_2.3 pthread_rwlock_rdlock F -GLIBC_2.3 pthread_rwlock_timedrdlock F -GLIBC_2.3 pthread_rwlock_timedwrlock F -GLIBC_2.3 pthread_rwlock_tryrdlock F -GLIBC_2.3 pthread_rwlock_trywrlock F -GLIBC_2.3 pthread_rwlock_unlock F -GLIBC_2.3 pthread_rwlock_wrlock F -GLIBC_2.3 pthread_rwlockattr_destroy F -GLIBC_2.3 pthread_rwlockattr_getkind_np F -GLIBC_2.3 pthread_rwlockattr_getpshared F -GLIBC_2.3 pthread_rwlockattr_init F -GLIBC_2.3 pthread_rwlockattr_setkind_np F -GLIBC_2.3 pthread_rwlockattr_setpshared F -GLIBC_2.3 pthread_self F -GLIBC_2.3 pthread_setcancelstate F -GLIBC_2.3 pthread_setcanceltype F -GLIBC_2.3 pthread_setconcurrency F -GLIBC_2.3 pthread_setschedparam F -GLIBC_2.3 pthread_setspecific F -GLIBC_2.3 pthread_sigmask F -GLIBC_2.3 pthread_spin_destroy F -GLIBC_2.3 pthread_spin_init F -GLIBC_2.3 pthread_spin_lock F -GLIBC_2.3 pthread_spin_trylock F -GLIBC_2.3 pthread_spin_unlock F -GLIBC_2.3 pthread_testcancel F -GLIBC_2.3 pthread_yield F -GLIBC_2.3 pwrite F -GLIBC_2.3 pwrite64 F -GLIBC_2.3 raise F -GLIBC_2.3 read F -GLIBC_2.3 recv F -GLIBC_2.3 recvfrom F -GLIBC_2.3 recvmsg F -GLIBC_2.3 sem_close F -GLIBC_2.3 sem_destroy F -GLIBC_2.3 sem_getvalue F -GLIBC_2.3 sem_init F -GLIBC_2.3 sem_open F -GLIBC_2.3 sem_post F -GLIBC_2.3 sem_timedwait F -GLIBC_2.3 sem_trywait F -GLIBC_2.3 sem_unlink F -GLIBC_2.3 sem_wait F -GLIBC_2.3 send F -GLIBC_2.3 sendmsg F -GLIBC_2.3 sendto F -GLIBC_2.3 sigaction F -GLIBC_2.3 siglongjmp F -GLIBC_2.3 sigwait F -GLIBC_2.3 system F -GLIBC_2.3 tcdrain F -GLIBC_2.3 vfork F -GLIBC_2.3 wait F -GLIBC_2.3 waitpid F -GLIBC_2.3 write F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 longjmp F -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.3.4 siglongjmp F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 pthread_attr_setstack F -GLIBC_2.6 pthread_attr_setstacksize F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libresolv-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libresolv-le.abilist deleted file mode 100644 index cf278eedb3..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libresolv-le.abilist +++ /dev/null @@ -1,92 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 __b64_ntop F -GLIBC_2.17 __b64_pton F -GLIBC_2.17 __dn_comp F -GLIBC_2.17 __dn_count_labels F -GLIBC_2.17 __dn_expand F -GLIBC_2.17 __dn_skipname F -GLIBC_2.17 __fp_nquery F -GLIBC_2.17 __fp_query F -GLIBC_2.17 __fp_resstat F -GLIBC_2.17 __hostalias F -GLIBC_2.17 __loc_aton F -GLIBC_2.17 __loc_ntoa F -GLIBC_2.17 __p_cdname F -GLIBC_2.17 __p_cdnname F -GLIBC_2.17 __p_class F -GLIBC_2.17 __p_class_syms D 0xa8 -GLIBC_2.17 __p_fqname F -GLIBC_2.17 __p_fqnname F -GLIBC_2.17 __p_option F -GLIBC_2.17 __p_query F -GLIBC_2.17 __p_rcode F -GLIBC_2.17 __p_secstodate F -GLIBC_2.17 __p_time F -GLIBC_2.17 __p_type F -GLIBC_2.17 __p_type_syms D 0x450 -GLIBC_2.17 __putlong F -GLIBC_2.17 __putshort F -GLIBC_2.17 __res_close F -GLIBC_2.17 __res_dnok F -GLIBC_2.17 __res_hnok F -GLIBC_2.17 __res_hostalias F -GLIBC_2.17 __res_isourserver F -GLIBC_2.17 __res_mailok F -GLIBC_2.17 __res_mkquery F -GLIBC_2.17 __res_nameinquery F -GLIBC_2.17 __res_nmkquery F -GLIBC_2.17 __res_nquery F -GLIBC_2.17 __res_nquerydomain F -GLIBC_2.17 __res_nsearch F -GLIBC_2.17 __res_nsend F -GLIBC_2.17 __res_ownok F -GLIBC_2.17 __res_queriesmatch F -GLIBC_2.17 __res_query F -GLIBC_2.17 __res_querydomain F -GLIBC_2.17 __res_search F -GLIBC_2.17 __res_send F -GLIBC_2.17 __sym_ntop F -GLIBC_2.17 __sym_ntos F -GLIBC_2.17 __sym_ston F -GLIBC_2.17 _gethtbyaddr F -GLIBC_2.17 _gethtbyname F -GLIBC_2.17 _gethtbyname2 F -GLIBC_2.17 _gethtent F -GLIBC_2.17 _getlong F -GLIBC_2.17 _getshort F -GLIBC_2.17 _res_opcodes D 0x80 -GLIBC_2.17 _sethtent F -GLIBC_2.17 inet_net_ntop F -GLIBC_2.17 inet_net_pton F -GLIBC_2.17 inet_neta F -GLIBC_2.17 ns_datetosecs F -GLIBC_2.17 ns_format_ttl F -GLIBC_2.17 ns_get16 F -GLIBC_2.17 ns_get32 F -GLIBC_2.17 ns_initparse F -GLIBC_2.17 ns_makecanon F -GLIBC_2.17 ns_msg_getflag F -GLIBC_2.17 ns_name_compress F -GLIBC_2.17 ns_name_ntol F -GLIBC_2.17 ns_name_ntop F -GLIBC_2.17 ns_name_pack F -GLIBC_2.17 ns_name_pton F -GLIBC_2.17 ns_name_rollback F -GLIBC_2.17 ns_name_skip F -GLIBC_2.17 ns_name_uncompress F -GLIBC_2.17 ns_name_unpack F -GLIBC_2.17 ns_parse_ttl F -GLIBC_2.17 ns_parserr F -GLIBC_2.17 ns_put16 F -GLIBC_2.17 ns_put32 F -GLIBC_2.17 ns_samedomain F -GLIBC_2.17 ns_samename F -GLIBC_2.17 ns_skiprr F -GLIBC_2.17 ns_sprintrr F -GLIBC_2.17 ns_sprintrrf F -GLIBC_2.17 ns_subdomain F -GLIBC_2.17 res_gethostbyaddr F -GLIBC_2.17 res_gethostbyname F -GLIBC_2.17 res_gethostbyname2 F -GLIBC_2.17 res_send_setqhook F -GLIBC_2.17 res_send_setrhook F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libresolv.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libresolv.abilist deleted file mode 100644 index 95def8eb0f..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libresolv.abilist +++ /dev/null @@ -1,94 +0,0 @@ -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __b64_ntop F -GLIBC_2.3 __b64_pton F -GLIBC_2.3 __dn_comp F -GLIBC_2.3 __dn_count_labels F -GLIBC_2.3 __dn_expand F -GLIBC_2.3 __dn_skipname F -GLIBC_2.3 __fp_nquery F -GLIBC_2.3 __fp_query F -GLIBC_2.3 __fp_resstat F -GLIBC_2.3 __hostalias F -GLIBC_2.3 __loc_aton F -GLIBC_2.3 __loc_ntoa F -GLIBC_2.3 __p_cdname F -GLIBC_2.3 __p_cdnname F -GLIBC_2.3 __p_class F -GLIBC_2.3 __p_class_syms D 0xa8 -GLIBC_2.3 __p_fqname F -GLIBC_2.3 __p_fqnname F -GLIBC_2.3 __p_option F -GLIBC_2.3 __p_query F -GLIBC_2.3 __p_secstodate F -GLIBC_2.3 __p_time F -GLIBC_2.3 __p_type F -GLIBC_2.3 __p_type_syms D 0x450 -GLIBC_2.3 __putlong F -GLIBC_2.3 __putshort F -GLIBC_2.3 __res_close F -GLIBC_2.3 __res_dnok F -GLIBC_2.3 __res_hnok F -GLIBC_2.3 __res_hostalias F -GLIBC_2.3 __res_isourserver F -GLIBC_2.3 __res_mailok F -GLIBC_2.3 __res_mkquery F -GLIBC_2.3 __res_nameinquery F -GLIBC_2.3 __res_nmkquery F -GLIBC_2.3 __res_nquery F -GLIBC_2.3 __res_nquerydomain F -GLIBC_2.3 __res_nsearch F -GLIBC_2.3 __res_nsend F -GLIBC_2.3 __res_ownok F -GLIBC_2.3 __res_queriesmatch F -GLIBC_2.3 __res_query F -GLIBC_2.3 __res_querydomain F -GLIBC_2.3 __res_search F -GLIBC_2.3 __res_send F -GLIBC_2.3 __sym_ntop F -GLIBC_2.3 __sym_ntos F -GLIBC_2.3 __sym_ston F -GLIBC_2.3 _gethtbyaddr F -GLIBC_2.3 _gethtbyname F -GLIBC_2.3 _gethtbyname2 F -GLIBC_2.3 _gethtent F -GLIBC_2.3 _getlong F -GLIBC_2.3 _getshort F -GLIBC_2.3 _res_opcodes D 0x80 -GLIBC_2.3 _sethtent F -GLIBC_2.3 inet_net_ntop F -GLIBC_2.3 inet_net_pton F -GLIBC_2.3 inet_neta F -GLIBC_2.3 res_gethostbyaddr F -GLIBC_2.3 res_gethostbyname F -GLIBC_2.3 res_gethostbyname2 F -GLIBC_2.3 res_send_setqhook F -GLIBC_2.3 res_send_setrhook F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/librt-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/librt-le.abilist deleted file mode 100644 index 523d22249a..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/librt-le.abilist +++ /dev/null @@ -1,36 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 __mq_open_2 F -GLIBC_2.17 aio_cancel F -GLIBC_2.17 aio_cancel64 F -GLIBC_2.17 aio_error F -GLIBC_2.17 aio_error64 F -GLIBC_2.17 aio_fsync F -GLIBC_2.17 aio_fsync64 F -GLIBC_2.17 aio_init F -GLIBC_2.17 aio_read F -GLIBC_2.17 aio_read64 F -GLIBC_2.17 aio_return F -GLIBC_2.17 aio_return64 F -GLIBC_2.17 aio_suspend F -GLIBC_2.17 aio_suspend64 F -GLIBC_2.17 aio_write F -GLIBC_2.17 aio_write64 F -GLIBC_2.17 lio_listio F -GLIBC_2.17 lio_listio64 F -GLIBC_2.17 mq_close F -GLIBC_2.17 mq_getattr F -GLIBC_2.17 mq_notify F -GLIBC_2.17 mq_open F -GLIBC_2.17 mq_receive F -GLIBC_2.17 mq_send F -GLIBC_2.17 mq_setattr F -GLIBC_2.17 mq_timedreceive F -GLIBC_2.17 mq_timedsend F -GLIBC_2.17 mq_unlink F -GLIBC_2.17 shm_open F -GLIBC_2.17 shm_unlink F -GLIBC_2.17 timer_create F -GLIBC_2.17 timer_delete F -GLIBC_2.17 timer_getoverrun F -GLIBC_2.17 timer_gettime F -GLIBC_2.17 timer_settime F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/librt.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/librt.abilist deleted file mode 100644 index e5b41488a2..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/librt.abilist +++ /dev/null @@ -1,52 +0,0 @@ -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 aio_cancel F -GLIBC_2.3 aio_cancel64 F -GLIBC_2.3 aio_error F -GLIBC_2.3 aio_error64 F -GLIBC_2.3 aio_fsync F -GLIBC_2.3 aio_fsync64 F -GLIBC_2.3 aio_init F -GLIBC_2.3 aio_read F -GLIBC_2.3 aio_read64 F -GLIBC_2.3 aio_return F -GLIBC_2.3 aio_return64 F -GLIBC_2.3 aio_suspend F -GLIBC_2.3 aio_suspend64 F -GLIBC_2.3 aio_write F -GLIBC_2.3 aio_write64 F -GLIBC_2.3 clock_getcpuclockid F -GLIBC_2.3 clock_getres F -GLIBC_2.3 clock_gettime F -GLIBC_2.3 clock_nanosleep F -GLIBC_2.3 clock_settime F -GLIBC_2.3 lio_listio F -GLIBC_2.3 lio_listio64 F -GLIBC_2.3 shm_open F -GLIBC_2.3 shm_unlink F -GLIBC_2.3 timer_create F -GLIBC_2.3 timer_delete F -GLIBC_2.3 timer_getoverrun F -GLIBC_2.3 timer_gettime F -GLIBC_2.3 timer_settime F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 timer_create F -GLIBC_2.3.3 timer_delete F -GLIBC_2.3.3 timer_getoverrun F -GLIBC_2.3.3 timer_gettime F -GLIBC_2.3.3 timer_settime F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libthread_db-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libthread_db-le.abilist deleted file mode 100644 index 3e382bf79d..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libthread_db-le.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 td_init F -GLIBC_2.17 td_log F -GLIBC_2.17 td_symbol_list F -GLIBC_2.17 td_ta_clear_event F -GLIBC_2.17 td_ta_delete F -GLIBC_2.17 td_ta_enable_stats F -GLIBC_2.17 td_ta_event_addr F -GLIBC_2.17 td_ta_event_getmsg F -GLIBC_2.17 td_ta_get_nthreads F -GLIBC_2.17 td_ta_get_ph F -GLIBC_2.17 td_ta_get_stats F -GLIBC_2.17 td_ta_map_id2thr F -GLIBC_2.17 td_ta_map_lwp2thr F -GLIBC_2.17 td_ta_new F -GLIBC_2.17 td_ta_reset_stats F -GLIBC_2.17 td_ta_set_event F -GLIBC_2.17 td_ta_setconcurrency F -GLIBC_2.17 td_ta_thr_iter F -GLIBC_2.17 td_ta_tsd_iter F -GLIBC_2.17 td_thr_clear_event F -GLIBC_2.17 td_thr_dbresume F -GLIBC_2.17 td_thr_dbsuspend F -GLIBC_2.17 td_thr_event_enable F -GLIBC_2.17 td_thr_event_getmsg F -GLIBC_2.17 td_thr_get_info F -GLIBC_2.17 td_thr_getfpregs F -GLIBC_2.17 td_thr_getgregs F -GLIBC_2.17 td_thr_getxregs F -GLIBC_2.17 td_thr_getxregsize F -GLIBC_2.17 td_thr_set_event F -GLIBC_2.17 td_thr_setfpregs F -GLIBC_2.17 td_thr_setgregs F -GLIBC_2.17 td_thr_setprio F -GLIBC_2.17 td_thr_setsigpending F -GLIBC_2.17 td_thr_setxregs F -GLIBC_2.17 td_thr_sigsetmask F -GLIBC_2.17 td_thr_tls_get_addr F -GLIBC_2.17 td_thr_tlsbase F -GLIBC_2.17 td_thr_tsd F -GLIBC_2.17 td_thr_validate F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libthread_db.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libthread_db.abilist deleted file mode 100644 index cd466b942b..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libthread_db.abilist +++ /dev/null @@ -1,42 +0,0 @@ -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_init F -GLIBC_2.3 td_log F -GLIBC_2.3 td_symbol_list F -GLIBC_2.3 td_ta_clear_event F -GLIBC_2.3 td_ta_delete F -GLIBC_2.3 td_ta_enable_stats F -GLIBC_2.3 td_ta_event_addr F -GLIBC_2.3 td_ta_event_getmsg F -GLIBC_2.3 td_ta_get_nthreads F -GLIBC_2.3 td_ta_get_ph F -GLIBC_2.3 td_ta_get_stats F -GLIBC_2.3 td_ta_map_id2thr F -GLIBC_2.3 td_ta_map_lwp2thr F -GLIBC_2.3 td_ta_new F -GLIBC_2.3 td_ta_reset_stats F -GLIBC_2.3 td_ta_set_event F -GLIBC_2.3 td_ta_setconcurrency F -GLIBC_2.3 td_ta_thr_iter F -GLIBC_2.3 td_ta_tsd_iter F -GLIBC_2.3 td_thr_clear_event F -GLIBC_2.3 td_thr_dbresume F -GLIBC_2.3 td_thr_dbsuspend F -GLIBC_2.3 td_thr_event_enable F -GLIBC_2.3 td_thr_event_getmsg F -GLIBC_2.3 td_thr_get_info F -GLIBC_2.3 td_thr_getfpregs F -GLIBC_2.3 td_thr_getgregs F -GLIBC_2.3 td_thr_getxregs F -GLIBC_2.3 td_thr_getxregsize F -GLIBC_2.3 td_thr_set_event F -GLIBC_2.3 td_thr_setfpregs F -GLIBC_2.3 td_thr_setgregs F -GLIBC_2.3 td_thr_setprio F -GLIBC_2.3 td_thr_setsigpending F -GLIBC_2.3 td_thr_setxregs F -GLIBC_2.3 td_thr_sigsetmask F -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3 td_thr_tsd F -GLIBC_2.3 td_thr_validate F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libutil-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libutil-le.abilist deleted file mode 100644 index 9c075bc0bd..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libutil-le.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 forkpty F -GLIBC_2.17 login F -GLIBC_2.17 login_tty F -GLIBC_2.17 logout F -GLIBC_2.17 logwtmp F -GLIBC_2.17 openpty F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libutil.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libutil.abilist deleted file mode 100644 index 812701762c..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 forkpty F -GLIBC_2.3 login F -GLIBC_2.3 login_tty F -GLIBC_2.3 logout F -GLIBC_2.3 logwtmp F -GLIBC_2.3 openpty F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data b/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data deleted file mode 100644 index 6f8ed25922..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/localplt.data +++ /dev/null @@ -1,15 +0,0 @@ -libc.so: calloc -libc.so: free -libc.so: malloc -libc.so: memalign -libc.so: realloc -libm.so: matherr -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S deleted file mode 100644 index ff2ed265ee..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S +++ /dev/null @@ -1,187 +0,0 @@ -/* Create new context. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define __ASSEMBLY__ -#include -#include "ucontext_i.h" -#include - -ENTRY(__makecontext) - CALL_MCOUNT 3 - /* Save parameters into the parameter save area of callers frame. */ - std r3,FRAME_PARM1_SAVE(r1) /* ucontext_t *ucp */ - std r4,FRAME_PARM2_SAVE(r1) /* void (*func)(void) */ - std r5,FRAME_PARM3_SAVE(r1) /* int argc */ - std r6,FRAME_PARM4_SAVE(r1) /* ... */ - std r7,FRAME_PARM5_SAVE(r1) - std r8,FRAME_PARM6_SAVE(r1) - std r9,FRAME_PARM7_SAVE(r1) - std r10,FRAME_PARM8_SAVE(r1) - mflr r0 - /* Get the address of the target functions first parameter. */ - addi r6,r1,FRAME_PARM4_SAVE - std r0,FRAME_LR_SAVE(r1) - cfi_offset (lr, FRAME_LR_SAVE) - stdu r1,-128(r1) - cfi_adjust_cfa_offset (128) - - /* Get the ucontexts stack pointer and size. Compute the top of stack - and round down to a quadword boundary. Then stack a dummy frame - with a null back chain. We store the context pointer in the frames - "compiler double word" field so we can recover if is the function - returns. Finally save the callers link register and TOC pointer - into this frame so the debugger can display a backtrace. - */ - ld r7,UCONTEXT_STACK_SP(r3) - ld r0,UCONTEXT_STACK_SIZE(r3) - add r7,r7,r0 - clrrdi r7,r7,4 - li r0,0 - stdu r0,-64(r7) - std r3,FRAME_PARM1_SAVE(r7) /* Store context in dummy parm1. */ - mflr r0 - std r2,FRAME_TOC_SAVE(r7) /* Store the TOC pointer for later. */ - std r0,FRAME_LR_SAVE(r7) - - /* Now we need to stack another frame to hold the parameter save area - for the function. We need to allocate a frame with the minimum 48 - byte header and 8 parameter register. However if there are more - than 8 parameters addition space is need to hold all the parameters. - The total size it rounded up to a quadword multiple then a frame is - stacked. This address is stored in the ucontext as GPR 1. */ - - cmpdi cr1,r5,8 - sldi r8,r5,3 - bgt cr1,L(gt8) - li r8,64 -L(gt8): - addi r8,r8,FRAME_PARM_SAVE+8 /* Add header plus rounding factor. */ - clrrdi r8,r8,4 /* Round down to quadword. */ - - subf r8,r8,r7 - std r7,0(r8) /* Stack the frame. */ - std r8,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r3) - - /* Now we need to copy the target functions parameters. The functions - parameters are saved in the parameter save area. We skip over the - first three parameters and copy up to 8 double word into the - SIGCONTEXT_GP_REGS starting with R3. If there are more than 8 - parameters then doublewords 8-N are copied into the parameter - save area of the context frame. */ - cmpdi r5,0 - beq L(noparms) - mr r0,r5 - ble cr1,L(le8) - li r0,8 -L(le8): - mtctr r0 - addi r7,r6,-8 - addi r9,r3,(SIGCONTEXT_GP_REGS+(PT_R3*8)-8) -L(parmloop2): - ldu r0,8(r7) - stdu r0,8(r9) - bdnz L(parmloop2) - - addi r0,r5,-8 - ble cr1,L(noparms) - mtctr r0 - addi r9,r8,FRAME_PARM9_SAVE-8 -L(parmloop): - ldu r0,8(r7) - stdu r0,8(r9) - bdnz L(parmloop) - -L(noparms): - -#if _CALL_ELF != 2 - /* Load the function address and TOC from the function descriptor - and store them in the ucontext as NIP and r2. Store the 3rd - field of the function descriptor into the ucontext as r11 in case - the calling language needs the "environment pointer". */ - ld r0,0(r4) - ld r10,8(r4); - ld r9,16(r4); - std r0,(SIGCONTEXT_GP_REGS+(PT_NIP*8))(r3) - std r10,(SIGCONTEXT_GP_REGS+(PT_R2*8))(r3) - std r9,(SIGCONTEXT_GP_REGS+(PT_R11*8))(r3) -#else - /* In the ELFv2 ABI, the function pointer is already the address. - Store it as NIP and r12 as required by the ABI. */ - std r4,(SIGCONTEXT_GP_REGS+(PT_NIP*8))(r3) - std r4,(SIGCONTEXT_GP_REGS+(PT_R12*8))(r3) -#endif - - /* If the target function returns we need to do some cleanup. We use a - code trick to get the address of our cleanup function into the link - register. Do not add any code between here and L(exitcode). - Use this conditional form of branch and link to avoid destroying - the cpu link stack used to predict blr return addresses. */ - bcl 20,31,L(gotexitcodeaddr); - - /* End FDE now, because while executing on the context's stack - the unwind info would be wrong otherwise. */ - cfi_endproc - - /* This is the helper code which gets called if a function which - is registered with 'makecontext' returns. In this case we - have to install the context listed in the uc_link element of - the context 'makecontext' manipulated at the time of the - 'makecontext' call. If the pointer is NULL the process must - terminate. */ -L(exitcode): - /* Recover the ucontext and TOC from the dummy frame. */ - ld r1,FRAME_BACKCHAIN(r1) /* Unstack the parameter save area frame. */ - ld r3,FRAME_PARM1_SAVE(r1) - ld r2,FRAME_TOC_SAVE(r1) - ld r3,UCONTEXT_LINK(r3) /* Load the resume context. */ - cmpdi r3,0 - beq L(do_exit) - bl JUMPTARGET(__setcontext) - nop - /* If setcontext returns (which can happen if the syscall fails) we will - exit the program with error status (-1). */ - li r3,-1 -L(do_exit): -#ifdef SHARED - b JUMPTARGET(__GI_exit); -#else - b JUMPTARGET(exit); - nop -#endif - b L(do_exit) - - /* Re-establish FDE for the rest of the actual makecontext routine. */ - cfi_startproc - cfi_offset (lr, FRAME_LR_SAVE) - cfi_adjust_cfa_offset (128) - - /* The address of the exit code is in the link register. Store the lr - in the ucontext as LNK so the target function will return to our - exit code. */ -L(gotexitcodeaddr): - mflr r0 - std r0,(SIGCONTEXT_GP_REGS+(PT_LNK*8))(r3) - ld r0,128+FRAME_LR_SAVE(r1) - addi r1,r1,128 - mtlr r0 - blr -END(__makecontext) - -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S deleted file mode 100644 index e258b9da41..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S +++ /dev/null @@ -1,513 +0,0 @@ -/* Switch to context. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define __ASSEMBLY__ -#include -#include "ucontext_i.h" -#include - - .section ".toc","aw" -.LC__dl_hwcap: -#ifdef SHARED - .tc _rtld_global_ro[TC],_rtld_global_ro -#else - .tc _dl_hwcap[TC],_dl_hwcap -#endif - .section ".text" - -#if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4) -ENTRY(__novec_setcontext) - CALL_MCOUNT 1 - mflr r0 - std r31,-8(1) - cfi_offset(r31,-8) - std r0,FRAME_LR_SAVE(r1) - cfi_offset (lr, FRAME_LR_SAVE) - stdu r1,-128(r1) - cfi_adjust_cfa_offset (128) - mr r31,r3 - -/* - * If this ucontext refers to the point where we were interrupted - * by a signal, we have to use the rt_sigreturn system call to - * return to the context so we get both LR and CTR restored. - * - * Otherwise, the context we are restoring is either just after - * a procedure call (getcontext/swapcontext) or at the beginning - * of a procedure call (makecontext), so we don't need to restore - * msr and ctr. We don't restore r13 since it will be used as - * the TLS pointer. */ - ld r0,(SIGCONTEXT_GP_REGS+(PT_MSR*8))(r31) - cmpdi r0,0 - bne L(nv_do_sigret) - - li r5,0 - addi r4,r3,UCONTEXT_SIGMASK - li r3,SIG_SETMASK - bl JUMPTARGET(__sigprocmask) - nop - cmpdi r3,0 - bne L(nv_error_exit) - -# ifdef SHARED -/* Load _rtld-global._dl_hwcap. */ - ld r5,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET(r5) -# else - ld r5,0(r5) /* Load extern _dl_hwcap. */ -# endif - - lfd fp0,(SIGCONTEXT_FP_REGS+(32*8))(r31) - lfd fp31,(SIGCONTEXT_FP_REGS+(PT_R31*8))(r31) - lfd fp30,(SIGCONTEXT_FP_REGS+(PT_R30*8))(r31) - -# ifdef _ARCH_PWR6 - /* Use the extended four-operand version of the mtfsf insn. */ - .machine push - .machine "power6" - - mtfsf 0xff,fp0,1,0 - - .machine pop -# else - /* Availability of DFP indicates a 64-bit FPSCR. */ - andi. r6,r5,PPC_FEATURE_HAS_DFP - beq 5f - /* Use the extended four-operand version of the mtfsf insn. */ - .machine push - .machine "power6" - - mtfsf 0xff,fp0,1,0 - - .machine pop - - b 6f - /* Continue to operate on the FPSCR as if it were 32-bits. */ -5: - mtfsf 0xff,fp0 -6: -# endif /* _ARCH_PWR6 */ - - lfd fp29,(SIGCONTEXT_FP_REGS+(PT_R29*8))(r31) - lfd fp28,(SIGCONTEXT_FP_REGS+(PT_R28*8))(r31) - lfd fp27,(SIGCONTEXT_FP_REGS+(PT_R27*8))(r31) - lfd fp26,(SIGCONTEXT_FP_REGS+(PT_R26*8))(r31) - lfd fp25,(SIGCONTEXT_FP_REGS+(PT_R25*8))(r31) - lfd fp24,(SIGCONTEXT_FP_REGS+(PT_R24*8))(r31) - lfd fp23,(SIGCONTEXT_FP_REGS+(PT_R23*8))(r31) - lfd fp22,(SIGCONTEXT_FP_REGS+(PT_R22*8))(r31) - lfd fp21,(SIGCONTEXT_FP_REGS+(PT_R21*8))(r31) - lfd fp20,(SIGCONTEXT_FP_REGS+(PT_R20*8))(r31) - lfd fp19,(SIGCONTEXT_FP_REGS+(PT_R19*8))(r31) - lfd fp18,(SIGCONTEXT_FP_REGS+(PT_R18*8))(r31) - lfd fp17,(SIGCONTEXT_FP_REGS+(PT_R17*8))(r31) - lfd fp16,(SIGCONTEXT_FP_REGS+(PT_R16*8))(r31) - lfd fp15,(SIGCONTEXT_FP_REGS+(PT_R15*8))(r31) - lfd fp14,(SIGCONTEXT_FP_REGS+(PT_R14*8))(r31) - lfd fp13,(SIGCONTEXT_FP_REGS+(PT_R13*8))(r31) - lfd fp12,(SIGCONTEXT_FP_REGS+(PT_R12*8))(r31) - lfd fp11,(SIGCONTEXT_FP_REGS+(PT_R11*8))(r31) - lfd fp10,(SIGCONTEXT_FP_REGS+(PT_R10*8))(r31) - lfd fp9,(SIGCONTEXT_FP_REGS+(PT_R9*8))(r31) - lfd fp8,(SIGCONTEXT_FP_REGS+(PT_R8*8))(r31) - lfd fp7,(SIGCONTEXT_FP_REGS+(PT_R7*8))(r31) - lfd fp6,(SIGCONTEXT_FP_REGS+(PT_R6*8))(r31) - lfd fp5,(SIGCONTEXT_FP_REGS+(PT_R5*8))(r31) - lfd fp4,(SIGCONTEXT_FP_REGS+(PT_R4*8))(r31) - lfd fp3,(SIGCONTEXT_FP_REGS+(PT_R3*8))(r31) - lfd fp2,(SIGCONTEXT_FP_REGS+(PT_R2*8))(r31) - lfd fp1,(SIGCONTEXT_FP_REGS+(PT_R1*8))(r31) - lfd fp0,(SIGCONTEXT_FP_REGS+(PT_R0*8))(r31) - - /* End FDE now, because the unwind info would be wrong while - we're reloading registers to switch to the new context. */ - cfi_endproc - - ld r0,(SIGCONTEXT_GP_REGS+(PT_LNK*8))(r31) - ld r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r31) - mtlr r0 - ld r2,(SIGCONTEXT_GP_REGS+(PT_R2*8))(r31) - ld r0,(SIGCONTEXT_GP_REGS+(PT_XER*8))(r31) - ld r3,(SIGCONTEXT_GP_REGS+(PT_R3*8))(r31) - mtxer r0 - ld r4,(SIGCONTEXT_GP_REGS+(PT_R4*8))(r31) - ld r0,(SIGCONTEXT_GP_REGS+(PT_CCR*8))(r31) - ld r5,(SIGCONTEXT_GP_REGS+(PT_R5*8))(r31) - mtcr r0 - ld r6,(SIGCONTEXT_GP_REGS+(PT_R6*8))(r31) - ld r7,(SIGCONTEXT_GP_REGS+(PT_R7*8))(r31) - ld r8,(SIGCONTEXT_GP_REGS+(PT_R8*8))(r31) - ld r9,(SIGCONTEXT_GP_REGS+(PT_R9*8))(r31) - ld r10,(SIGCONTEXT_GP_REGS+(PT_R10*8))(r31) - ld r11,(SIGCONTEXT_GP_REGS+(PT_R11*8))(r31) - ld r12,(SIGCONTEXT_GP_REGS+(PT_R12*8))(r31) - /* Don't reload the thread ID or TLS pointer (r13). */ - ld r14,(SIGCONTEXT_GP_REGS+(PT_R14*8))(r31) - ld r15,(SIGCONTEXT_GP_REGS+(PT_R15*8))(r31) - ld r16,(SIGCONTEXT_GP_REGS+(PT_R16*8))(r31) - ld r17,(SIGCONTEXT_GP_REGS+(PT_R17*8))(r31) - ld r18,(SIGCONTEXT_GP_REGS+(PT_R18*8))(r31) - ld r19,(SIGCONTEXT_GP_REGS+(PT_R19*8))(r31) - ld r20,(SIGCONTEXT_GP_REGS+(PT_R20*8))(r31) - ld r21,(SIGCONTEXT_GP_REGS+(PT_R21*8))(r31) - ld r22,(SIGCONTEXT_GP_REGS+(PT_R22*8))(r31) - ld r23,(SIGCONTEXT_GP_REGS+(PT_R23*8))(r31) - ld r24,(SIGCONTEXT_GP_REGS+(PT_R24*8))(r31) - ld r25,(SIGCONTEXT_GP_REGS+(PT_R25*8))(r31) - ld r26,(SIGCONTEXT_GP_REGS+(PT_R26*8))(r31) - ld r27,(SIGCONTEXT_GP_REGS+(PT_R27*8))(r31) - ld r28,(SIGCONTEXT_GP_REGS+(PT_R28*8))(r31) - ld r29,(SIGCONTEXT_GP_REGS+(PT_R29*8))(r31) - ld r30,(SIGCONTEXT_GP_REGS+(PT_R30*8))(r31) - - /* Now we branch to the "Next Instruction Pointer" from the saved - context. With the powerpc64 instruction set there is no good way to - do this (from user state) without clobbering either the LR or CTR. - The makecontext and swapcontext functions depend on the callers - LR being preserved so we use the CTR. */ - ld r0,(SIGCONTEXT_GP_REGS+(PT_NIP*8))(r31) - mtctr r0 - ld r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r31) - ld r31,(SIGCONTEXT_GP_REGS+(PT_R31*8))(r31) - bctr - - /* Re-establish FDE for the rest of the actual setcontext routine. */ - cfi_startproc - cfi_offset (lr, FRAME_LR_SAVE) - cfi_adjust_cfa_offset (128) - -L(nv_error_exit): - ld r0,128+FRAME_LR_SAVE(r1) - addi r1,r1,128 - mtlr r0 - ld r31,-8(r1) - blr - - /* At this point we assume that the ucontext was created by a - rt_signal and we should use rt_sigreturn to restore the original - state. As of the 2.4.21 kernel the ucontext is the first thing - (offset 0) in the rt_signal frame and rt_sigreturn expects the - ucontext address in R1. Normally the rt-signal trampoline handles - this by popping dummy frame before the rt_signal syscall. In our - case the stack may not be in its original (signal handler return with - R1 pointing at the dummy frame) state. We do have the ucontext - address in R3, so simply copy R3 to R1 before the syscall. */ -L(nv_do_sigret): - mr r1,r3, - li r0,SYS_ify(rt_sigreturn) - sc - /* No return. */ - -PSEUDO_END(__novec_setcontext) - -compat_symbol (libc, __novec_setcontext, setcontext, GLIBC_2_3) - -#endif - - .section ".text" - .machine "altivec" -ENTRY(__setcontext) - CALL_MCOUNT 1 - mflr r0 - std r31,-8(1) - cfi_offset(r31,-8) - std r0,FRAME_LR_SAVE(r1) - cfi_offset (lr, FRAME_LR_SAVE) - stdu r1,-128(r1) - cfi_adjust_cfa_offset (128) - mr r31,r3 - -/* - * If this ucontext refers to the point where we were interrupted - * by a signal, we have to use the rt_sigreturn system call to - * return to the context so we get both LR and CTR restored. - * - * Otherwise, the context we are restoring is either just after - * a procedure call (getcontext/swapcontext) or at the beginning - * of a procedure call (makecontext), so we don't need to restore - * msr and ctr. We don't restore r13 since it will be used as - * the TLS pointer. */ - ld r0,(SIGCONTEXT_GP_REGS+(PT_MSR*8))(r31) - cmpdi r0,0 - bne L(do_sigret) - - li r5,0 - addi r4,r3,UCONTEXT_SIGMASK - li r3,SIG_SETMASK - bl JUMPTARGET(__sigprocmask) - nop - cmpdi r3,0 - bne L(error_exit) - - ld r5,.LC__dl_hwcap@toc(r2) - ld r10,(SIGCONTEXT_V_REGS_PTR)(r31) -# ifdef SHARED -/* Load _rtld-global._dl_hwcap. */ - ld r5,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET(r5) -# else - ld r5,0(r5) /* Load extern _dl_hwcap. */ -# endif - andis. r6,r5,(PPC_FEATURE_HAS_ALTIVEC >> 16) - beq L(has_no_vec) - - cmpdi r10,0 - beq L(has_no_vec) - lwz r0,(33*16)(r10) - - li r9,(16*32) - mtspr VRSAVE,r0 - cmpwi r0,0 - beq L(has_no_vec) - - lvx v19,r9,r10 - la r9,(16)(r10) - - lvx v0,0,r10 - lvx v1,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - mtvscr v19 - lvx v2,0,r10 - lvx v3,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v4,0,r10 - lvx v5,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v6,0,r10 - lvx v7,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v8,0,r10 - lvx v9,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v10,0,r10 - lvx v11,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v12,0,r10 - lvx v13,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v14,0,r10 - lvx v15,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v16,0,r10 - lvx v17,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v18,0,r10 - lvx v19,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v20,0,r10 - lvx v21,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v22,0,r10 - lvx v23,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v24,0,r10 - lvx v25,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v26,0,r10 - lvx v27,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v28,0,r10 - lvx v29,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v30,0,r10 - lvx v31,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v10,0,r10 - lvx v11,0,r9 - addi r10,r10,32 - addi r9,r9,32 - -L(has_no_vec): - lfd fp0,(SIGCONTEXT_FP_REGS+(32*8))(r31) - lfd fp31,(SIGCONTEXT_FP_REGS+(PT_R31*8))(r31) - lfd fp30,(SIGCONTEXT_FP_REGS+(PT_R30*8))(r31) - -# ifdef _ARCH_PWR6 - /* Use the extended four-operand version of the mtfsf insn. */ - .machine push - .machine "power6" - - mtfsf 0xff,fp0,1,0 - - .machine pop -# else - /* Availability of DFP indicates a 64-bit FPSCR. */ - andi. r6,r5,PPC_FEATURE_HAS_DFP - beq 7f - /* Use the extended four-operand version of the mtfsf insn. */ - .machine push - .machine "power6" - - mtfsf 0xff,fp0,1,0 - - .machine pop - - b 8f - /* Continue to operate on the FPSCR as if it were 32-bits. */ -7: - mtfsf 0xff,fp0 -8: -# endif /* _ARCH_PWR6 */ - - lfd fp29,(SIGCONTEXT_FP_REGS+(PT_R29*8))(r31) - lfd fp28,(SIGCONTEXT_FP_REGS+(PT_R28*8))(r31) - lfd fp27,(SIGCONTEXT_FP_REGS+(PT_R27*8))(r31) - lfd fp26,(SIGCONTEXT_FP_REGS+(PT_R26*8))(r31) - lfd fp25,(SIGCONTEXT_FP_REGS+(PT_R25*8))(r31) - lfd fp24,(SIGCONTEXT_FP_REGS+(PT_R24*8))(r31) - lfd fp23,(SIGCONTEXT_FP_REGS+(PT_R23*8))(r31) - lfd fp22,(SIGCONTEXT_FP_REGS+(PT_R22*8))(r31) - lfd fp21,(SIGCONTEXT_FP_REGS+(PT_R21*8))(r31) - lfd fp20,(SIGCONTEXT_FP_REGS+(PT_R20*8))(r31) - lfd fp19,(SIGCONTEXT_FP_REGS+(PT_R19*8))(r31) - lfd fp18,(SIGCONTEXT_FP_REGS+(PT_R18*8))(r31) - lfd fp17,(SIGCONTEXT_FP_REGS+(PT_R17*8))(r31) - lfd fp16,(SIGCONTEXT_FP_REGS+(PT_R16*8))(r31) - lfd fp15,(SIGCONTEXT_FP_REGS+(PT_R15*8))(r31) - lfd fp14,(SIGCONTEXT_FP_REGS+(PT_R14*8))(r31) - lfd fp13,(SIGCONTEXT_FP_REGS+(PT_R13*8))(r31) - lfd fp12,(SIGCONTEXT_FP_REGS+(PT_R12*8))(r31) - lfd fp11,(SIGCONTEXT_FP_REGS+(PT_R11*8))(r31) - lfd fp10,(SIGCONTEXT_FP_REGS+(PT_R10*8))(r31) - lfd fp9,(SIGCONTEXT_FP_REGS+(PT_R9*8))(r31) - lfd fp8,(SIGCONTEXT_FP_REGS+(PT_R8*8))(r31) - lfd fp7,(SIGCONTEXT_FP_REGS+(PT_R7*8))(r31) - lfd fp6,(SIGCONTEXT_FP_REGS+(PT_R6*8))(r31) - lfd fp5,(SIGCONTEXT_FP_REGS+(PT_R5*8))(r31) - lfd fp4,(SIGCONTEXT_FP_REGS+(PT_R4*8))(r31) - lfd fp3,(SIGCONTEXT_FP_REGS+(PT_R3*8))(r31) - lfd fp2,(SIGCONTEXT_FP_REGS+(PT_R2*8))(r31) - lfd fp1,(SIGCONTEXT_FP_REGS+(PT_R1*8))(r31) - lfd fp0,(SIGCONTEXT_FP_REGS+(PT_R0*8))(r31) - - /* End FDE now, because the unwind info would be wrong while - we're reloading registers to switch to the new context. */ - cfi_endproc - - ld r0,(SIGCONTEXT_GP_REGS+(PT_LNK*8))(r31) - ld r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r31) - mtlr r0 - ld r2,(SIGCONTEXT_GP_REGS+(PT_R2*8))(r31) - ld r0,(SIGCONTEXT_GP_REGS+(PT_XER*8))(r31) - ld r3,(SIGCONTEXT_GP_REGS+(PT_R3*8))(r31) - mtxer r0 - ld r4,(SIGCONTEXT_GP_REGS+(PT_R4*8))(r31) - ld r0,(SIGCONTEXT_GP_REGS+(PT_CCR*8))(r31) - ld r5,(SIGCONTEXT_GP_REGS+(PT_R5*8))(r31) - ld r6,(SIGCONTEXT_GP_REGS+(PT_R6*8))(r31) - ld r7,(SIGCONTEXT_GP_REGS+(PT_R7*8))(r31) - ld r8,(SIGCONTEXT_GP_REGS+(PT_R8*8))(r31) - ld r9,(SIGCONTEXT_GP_REGS+(PT_R9*8))(r31) - mtcr r0 - ld r10,(SIGCONTEXT_GP_REGS+(PT_R10*8))(r31) - ld r11,(SIGCONTEXT_GP_REGS+(PT_R11*8))(r31) - ld r12,(SIGCONTEXT_GP_REGS+(PT_R12*8))(r31) - /* Don't reload the thread ID or TLS pointer (r13). */ - ld r14,(SIGCONTEXT_GP_REGS+(PT_R14*8))(r31) - ld r15,(SIGCONTEXT_GP_REGS+(PT_R15*8))(r31) - ld r16,(SIGCONTEXT_GP_REGS+(PT_R16*8))(r31) - ld r17,(SIGCONTEXT_GP_REGS+(PT_R17*8))(r31) - ld r18,(SIGCONTEXT_GP_REGS+(PT_R18*8))(r31) - ld r19,(SIGCONTEXT_GP_REGS+(PT_R19*8))(r31) - ld r20,(SIGCONTEXT_GP_REGS+(PT_R20*8))(r31) - ld r21,(SIGCONTEXT_GP_REGS+(PT_R21*8))(r31) - ld r22,(SIGCONTEXT_GP_REGS+(PT_R22*8))(r31) - ld r23,(SIGCONTEXT_GP_REGS+(PT_R23*8))(r31) - ld r24,(SIGCONTEXT_GP_REGS+(PT_R24*8))(r31) - ld r25,(SIGCONTEXT_GP_REGS+(PT_R25*8))(r31) - ld r26,(SIGCONTEXT_GP_REGS+(PT_R26*8))(r31) - ld r27,(SIGCONTEXT_GP_REGS+(PT_R27*8))(r31) - ld r28,(SIGCONTEXT_GP_REGS+(PT_R28*8))(r31) - ld r29,(SIGCONTEXT_GP_REGS+(PT_R29*8))(r31) - ld r30,(SIGCONTEXT_GP_REGS+(PT_R30*8))(r31) - - /* Now we branch to the "Next Instruction Pointer" from the saved - context. With the powerpc64 instruction set there is no good way to - do this (from user state) without clobbering either the LR or CTR. - The makecontext and swapcontext functions depend on the callers - LR being preserved so we use the CTR. */ - ld r0,(SIGCONTEXT_GP_REGS+(PT_NIP*8))(r31) - mtctr r0 - ld r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r31) - ld r31,(SIGCONTEXT_GP_REGS+(PT_R31*8))(r31) - bctr - - /* Re-establish FDE for the rest of the actual setcontext routine. */ - cfi_startproc - cfi_offset (lr, FRAME_LR_SAVE) - cfi_adjust_cfa_offset (128) - -L(error_exit): - ld r0,128+FRAME_LR_SAVE(r1) - addi r1,r1,128 - mtlr r0 - ld r31,-8(r1) - blr - - /* At this point we assume that the ucontext was created by a - rt_signal and we should use rt_sigreturn to restore the original - state. As of the 2.4.21 kernel the ucontext is the first thing - (offset 0) in the rt_signal frame and rt_sigreturn expects the - ucontext address in R1. Normally the rt-signal trampoline handles - this by popping dummy frame before the rt_signal syscall. In our - case the stack may not be in its original (signal handler return with - R1 pointing at the dummy frame) state. We do have the ucontext - address in R3, so simply copy R3 to R1 before the syscall. */ -L(do_sigret): - mr r1,r3, - li r0,SYS_ify(rt_sigreturn) - sc - /* No return. */ - -PSEUDO_END(__setcontext) - -versioned_symbol (libc, __setcontext, setcontext, GLIBC_2_3_4) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/shlib-versions b/sysdeps/unix/sysv/linux/powerpc/powerpc64/shlib-versions deleted file mode 100644 index bc6debaf69..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/shlib-versions +++ /dev/null @@ -1,7 +0,0 @@ -%ifdef HAVE_ELFV2_ABI -DEFAULT GLIBC_2.17 -ld=ld64.so.2 -%else -DEFAULT GLIBC_2.3 -ld=ld64.so.1 -%endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S deleted file mode 100644 index b08d269424..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S +++ /dev/null @@ -1,797 +0,0 @@ -/* Save current context and install the given one. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define __ASSEMBLY__ -#include -#include "ucontext_i.h" -#include - - .section ".toc","aw" -.LC__dl_hwcap: -#ifdef SHARED - .tc _rtld_global_ro[TC],_rtld_global_ro -#else - .tc _dl_hwcap[TC],_dl_hwcap -#endif - -#if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4) - .section ".text" -ENTRY(__novec_swapcontext) - CALL_MCOUNT 2 - std r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r3) - std r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r3) - mflr r0 - std r31,-8(1) - cfi_offset(r31,-8) - std r2,(SIGCONTEXT_GP_REGS+(PT_R2*8))(r3) - std r0,FRAME_LR_SAVE(r1) - cfi_offset (lr, FRAME_LR_SAVE) - std r0,(SIGCONTEXT_GP_REGS+(PT_LNK*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(PT_NIP*8))(r3) - stdu r1,-128(r1) - cfi_adjust_cfa_offset (128) - std r4,(SIGCONTEXT_GP_REGS+(PT_R4*8))(r3) - std r5,(SIGCONTEXT_GP_REGS+(PT_R5*8))(r3) - std r6,(SIGCONTEXT_GP_REGS+(PT_R6*8))(r3) - std r7,(SIGCONTEXT_GP_REGS+(PT_R7*8))(r3) - std r8,(SIGCONTEXT_GP_REGS+(PT_R8*8))(r3) - std r9,(SIGCONTEXT_GP_REGS+(PT_R9*8))(r3) - std r10,(SIGCONTEXT_GP_REGS+(PT_R10*8))(r3) - std r11,(SIGCONTEXT_GP_REGS+(PT_R11*8))(r3) - std r12,(SIGCONTEXT_GP_REGS+(PT_R12*8))(r3) - std r13,(SIGCONTEXT_GP_REGS+(PT_R13*8))(r3) - std r14,(SIGCONTEXT_GP_REGS+(PT_R14*8))(r3) - std r15,(SIGCONTEXT_GP_REGS+(PT_R15*8))(r3) - std r16,(SIGCONTEXT_GP_REGS+(PT_R16*8))(r3) - std r17,(SIGCONTEXT_GP_REGS+(PT_R17*8))(r3) - std r18,(SIGCONTEXT_GP_REGS+(PT_R18*8))(r3) - std r19,(SIGCONTEXT_GP_REGS+(PT_R19*8))(r3) - std r20,(SIGCONTEXT_GP_REGS+(PT_R20*8))(r3) - std r21,(SIGCONTEXT_GP_REGS+(PT_R21*8))(r3) - std r22,(SIGCONTEXT_GP_REGS+(PT_R22*8))(r3) - std r23,(SIGCONTEXT_GP_REGS+(PT_R23*8))(r3) - std r24,(SIGCONTEXT_GP_REGS+(PT_R24*8))(r3) - std r25,(SIGCONTEXT_GP_REGS+(PT_R25*8))(r3) - std r26,(SIGCONTEXT_GP_REGS+(PT_R26*8))(r3) - std r27,(SIGCONTEXT_GP_REGS+(PT_R27*8))(r3) - std r28,(SIGCONTEXT_GP_REGS+(PT_R28*8))(r3) - std r29,(SIGCONTEXT_GP_REGS+(PT_R29*8))(r3) - std r30,(SIGCONTEXT_GP_REGS+(PT_R30*8))(r3) - std r31,(SIGCONTEXT_GP_REGS+(PT_R31*8))(r3) - mfctr r0 - std r0,(SIGCONTEXT_GP_REGS+(PT_CTR*8))(r3) - mfxer r0 - std r0,(SIGCONTEXT_GP_REGS+(PT_XER*8))(r3) - mfcr r0 - std r0,(SIGCONTEXT_GP_REGS+(PT_CCR*8))(r3) - - /* Set the return value of swapcontext to "success". R3 is the only - register whose value is not preserved in the saved context. */ - li r0,0 - std r0,(SIGCONTEXT_GP_REGS+(PT_R3*8))(r3) - - /* Zero fill fields that can't be set in user state or are unused. */ - std r0,(SIGCONTEXT_GP_REGS+(PT_MSR*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(34*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(PT_SOFTE*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(40*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(41*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(42*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(PT_RESULT*8))(r3) - - /* Set the PT_REGS pointer to the address of sigcontext gp_regs - field. Struct pt_regs and elf_gregset_t are the same thing. - We kept the regs field for backwards compatibility with - libraries built before we extended sigcontext. */ - addi r0,r3,SIGCONTEXT_GP_REGS - std r0,SIGCONTEXT_PT_REGS(r3) - - stfd fp0,(SIGCONTEXT_FP_REGS+(PT_R0*8))(r3) - stfd fp1,(SIGCONTEXT_FP_REGS+(PT_R1*8))(r3) - stfd fp2,(SIGCONTEXT_FP_REGS+(PT_R2*8))(r3) - stfd fp3,(SIGCONTEXT_FP_REGS+(PT_R3*8))(r3) - stfd fp4,(SIGCONTEXT_FP_REGS+(PT_R4*8))(r3) - stfd fp5,(SIGCONTEXT_FP_REGS+(PT_R5*8))(r3) - stfd fp6,(SIGCONTEXT_FP_REGS+(PT_R6*8))(r3) - stfd fp7,(SIGCONTEXT_FP_REGS+(PT_R7*8))(r3) - stfd fp8,(SIGCONTEXT_FP_REGS+(PT_R8*8))(r3) - stfd fp9,(SIGCONTEXT_FP_REGS+(PT_R9*8))(r3) - stfd fp10,(SIGCONTEXT_FP_REGS+(PT_R10*8))(r3) - stfd fp11,(SIGCONTEXT_FP_REGS+(PT_R11*8))(r3) - stfd fp12,(SIGCONTEXT_FP_REGS+(PT_R12*8))(r3) - stfd fp13,(SIGCONTEXT_FP_REGS+(PT_R13*8))(r3) - stfd fp14,(SIGCONTEXT_FP_REGS+(PT_R14*8))(r3) - stfd fp15,(SIGCONTEXT_FP_REGS+(PT_R15*8))(r3) - stfd fp16,(SIGCONTEXT_FP_REGS+(PT_R16*8))(r3) - stfd fp17,(SIGCONTEXT_FP_REGS+(PT_R17*8))(r3) - stfd fp18,(SIGCONTEXT_FP_REGS+(PT_R18*8))(r3) - stfd fp19,(SIGCONTEXT_FP_REGS+(PT_R19*8))(r3) - stfd fp20,(SIGCONTEXT_FP_REGS+(PT_R20*8))(r3) - stfd fp21,(SIGCONTEXT_FP_REGS+(PT_R21*8))(r3) - stfd fp22,(SIGCONTEXT_FP_REGS+(PT_R22*8))(r3) - stfd fp23,(SIGCONTEXT_FP_REGS+(PT_R23*8))(r3) - stfd fp24,(SIGCONTEXT_FP_REGS+(PT_R24*8))(r3) - stfd fp25,(SIGCONTEXT_FP_REGS+(PT_R25*8))(r3) - stfd fp26,(SIGCONTEXT_FP_REGS+(PT_R26*8))(r3) - stfd fp27,(SIGCONTEXT_FP_REGS+(PT_R27*8))(r3) - stfd fp28,(SIGCONTEXT_FP_REGS+(PT_R28*8))(r3) - stfd fp29,(SIGCONTEXT_FP_REGS+(PT_R29*8))(r3) - mffs fp0 - stfd fp30,(SIGCONTEXT_FP_REGS+(PT_R30*8))(r3) - stfd fp31,(SIGCONTEXT_FP_REGS+(PT_R31*8))(r3) - stfd fp0,(SIGCONTEXT_FP_REGS+(32*8))(r3) - - mr r31,r4 - addi r5,r3,UCONTEXT_SIGMASK - addi r4,r4,UCONTEXT_SIGMASK - li r3,SIG_SETMASK - bl JUMPTARGET(__sigprocmask) - nop - cmpdi r3,0 - bne L(nv_error_exit) - -/* - * If this new ucontext refers to the point where we were interrupted - * by a signal, we have to use the rt_sigreturn system call to - * return to the context so we get both LR and CTR restored. - * - * Otherwise, the context we are restoring is either just after - * a procedure call (getcontext/swapcontext) or at the beginning - * of a procedure call (makecontext), so we don't need to restore - * msr and ctr. We don't restore r13 since it will be used as - * the TLS pointer. */ - ld r0,(SIGCONTEXT_GP_REGS+(PT_MSR*8))(r31) - cmpdi r0,0 - bne L(nv_do_sigret) - - ld r8,.LC__dl_hwcap@toc(r2) -# ifdef SHARED -/* Load _rtld-global._dl_hwcap. */ - ld r8,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET(r8) -# else - ld r8,0(r8) /* Load extern _dl_hwcap. */ -# endif - - lfd fp0,(SIGCONTEXT_FP_REGS+(32*8))(r31) - lfd fp31,(SIGCONTEXT_FP_REGS+(PT_R31*8))(r31) - lfd fp30,(SIGCONTEXT_FP_REGS+(PT_R30*8))(r31) - -# ifdef _ARCH_PWR6 - /* Use the extended four-operand version of the mtfsf insn. */ - .machine push - .machine "power6" - - mtfsf 0xff,fp0,1,0 - - .machine pop -# else - /* Availability of DFP indicates a 64-bit FPSCR. */ - andi. r6,r8,PPC_FEATURE_HAS_DFP - beq 5f - - .machine push - .machine "power6" - - mtfsf 0xff,fp0,1,0 - - .machine pop - - b 6f - /* Continue to operate on the FPSCR as if it were 32-bits. */ -5: - mtfsf 0xff,fp0 -6: -#endif /* _ARCH_PWR6 */ - - lfd fp29,(SIGCONTEXT_FP_REGS+(PT_R29*8))(r31) - lfd fp28,(SIGCONTEXT_FP_REGS+(PT_R28*8))(r31) - lfd fp27,(SIGCONTEXT_FP_REGS+(PT_R27*8))(r31) - lfd fp26,(SIGCONTEXT_FP_REGS+(PT_R26*8))(r31) - lfd fp25,(SIGCONTEXT_FP_REGS+(PT_R25*8))(r31) - lfd fp24,(SIGCONTEXT_FP_REGS+(PT_R24*8))(r31) - lfd fp23,(SIGCONTEXT_FP_REGS+(PT_R23*8))(r31) - lfd fp22,(SIGCONTEXT_FP_REGS+(PT_R22*8))(r31) - lfd fp21,(SIGCONTEXT_FP_REGS+(PT_R21*8))(r31) - lfd fp20,(SIGCONTEXT_FP_REGS+(PT_R20*8))(r31) - lfd fp19,(SIGCONTEXT_FP_REGS+(PT_R19*8))(r31) - lfd fp18,(SIGCONTEXT_FP_REGS+(PT_R18*8))(r31) - lfd fp17,(SIGCONTEXT_FP_REGS+(PT_R17*8))(r31) - lfd fp16,(SIGCONTEXT_FP_REGS+(PT_R16*8))(r31) - lfd fp15,(SIGCONTEXT_FP_REGS+(PT_R15*8))(r31) - lfd fp14,(SIGCONTEXT_FP_REGS+(PT_R14*8))(r31) - lfd fp13,(SIGCONTEXT_FP_REGS+(PT_R13*8))(r31) - lfd fp12,(SIGCONTEXT_FP_REGS+(PT_R12*8))(r31) - lfd fp11,(SIGCONTEXT_FP_REGS+(PT_R11*8))(r31) - lfd fp10,(SIGCONTEXT_FP_REGS+(PT_R10*8))(r31) - lfd fp9,(SIGCONTEXT_FP_REGS+(PT_R9*8))(r31) - lfd fp8,(SIGCONTEXT_FP_REGS+(PT_R8*8))(r31) - lfd fp7,(SIGCONTEXT_FP_REGS+(PT_R7*8))(r31) - lfd fp6,(SIGCONTEXT_FP_REGS+(PT_R6*8))(r31) - lfd fp5,(SIGCONTEXT_FP_REGS+(PT_R5*8))(r31) - lfd fp4,(SIGCONTEXT_FP_REGS+(PT_R4*8))(r31) - lfd fp3,(SIGCONTEXT_FP_REGS+(PT_R3*8))(r31) - lfd fp2,(SIGCONTEXT_FP_REGS+(PT_R2*8))(r31) - lfd fp1,(SIGCONTEXT_FP_REGS+(PT_R1*8))(r31) - lfd fp0,(SIGCONTEXT_FP_REGS+(PT_R0*8))(r31) - - ld r0,(SIGCONTEXT_GP_REGS+(PT_LNK*8))(r31) - ld r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r31) - mtlr r0 - ld r2,(SIGCONTEXT_GP_REGS+(PT_R2*8))(r31) - ld r0,(SIGCONTEXT_GP_REGS+(PT_XER*8))(r31) - ld r3,(SIGCONTEXT_GP_REGS+(PT_R3*8))(r31) - mtxer r0 - ld r4,(SIGCONTEXT_GP_REGS+(PT_R4*8))(r31) - ld r0,(SIGCONTEXT_GP_REGS+(PT_CCR*8))(r31) - ld r5,(SIGCONTEXT_GP_REGS+(PT_R5*8))(r31) - mtcr r0 - ld r6,(SIGCONTEXT_GP_REGS+(PT_R6*8))(r31) - ld r7,(SIGCONTEXT_GP_REGS+(PT_R7*8))(r31) - ld r8,(SIGCONTEXT_GP_REGS+(PT_R8*8))(r31) - ld r9,(SIGCONTEXT_GP_REGS+(PT_R9*8))(r31) - ld r10,(SIGCONTEXT_GP_REGS+(PT_R10*8))(r31) - ld r11,(SIGCONTEXT_GP_REGS+(PT_R11*8))(r31) - ld r12,(SIGCONTEXT_GP_REGS+(PT_R12*8))(r31) - /* Don't reload the thread ID or TLS pointer (r13). */ - ld r14,(SIGCONTEXT_GP_REGS+(PT_R14*8))(r31) - ld r15,(SIGCONTEXT_GP_REGS+(PT_R15*8))(r31) - ld r16,(SIGCONTEXT_GP_REGS+(PT_R16*8))(r31) - ld r17,(SIGCONTEXT_GP_REGS+(PT_R17*8))(r31) - ld r18,(SIGCONTEXT_GP_REGS+(PT_R18*8))(r31) - ld r19,(SIGCONTEXT_GP_REGS+(PT_R19*8))(r31) - ld r20,(SIGCONTEXT_GP_REGS+(PT_R20*8))(r31) - ld r21,(SIGCONTEXT_GP_REGS+(PT_R21*8))(r31) - ld r22,(SIGCONTEXT_GP_REGS+(PT_R22*8))(r31) - ld r23,(SIGCONTEXT_GP_REGS+(PT_R23*8))(r31) - ld r24,(SIGCONTEXT_GP_REGS+(PT_R24*8))(r31) - ld r25,(SIGCONTEXT_GP_REGS+(PT_R25*8))(r31) - ld r26,(SIGCONTEXT_GP_REGS+(PT_R26*8))(r31) - ld r27,(SIGCONTEXT_GP_REGS+(PT_R27*8))(r31) - ld r28,(SIGCONTEXT_GP_REGS+(PT_R28*8))(r31) - ld r29,(SIGCONTEXT_GP_REGS+(PT_R29*8))(r31) - ld r30,(SIGCONTEXT_GP_REGS+(PT_R30*8))(r31) - - /* Now we branch to the "Next Instruction Pointer" from the saved - context. With the powerpc64 instruction set there is no good way to - do this (from user state) without clobbering either the LR or CTR. - The makecontext and swapcontext functions depend on the callers - LR being preserved so we use the CTR. */ - ld r0,(SIGCONTEXT_GP_REGS+(PT_NIP*8))(r31) - mtctr r0 - ld r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r31) - ld r31,(SIGCONTEXT_GP_REGS+(PT_R31*8))(r31) - bctr - -L(nv_error_exit): - ld r0,128+FRAME_LR_SAVE(r1) - addi r1,r1,128 - mtlr r0 - ld r31,-8(r1) - blr - - /* At this point we assume that the ucontext was created by a - rt_signal and we should use rt_sigreturn to restore the original - state. As of the 2.4.21 kernel the ucontext is the first thing - (offset 0) in the rt_signal frame and rt_sigreturn expects the - ucontext address in R1. Normally the rt-signal trampoline handles - this by popping dummy frame before the rt_signal syscall. In our - case the stack may not be in its original (signal handler return with - R1 pointing at the dummy frame) state. We do have the ucontext - address in R3, so simply copy R3 to R1 before the syscall. */ -L(nv_do_sigret): - mr r1,r3, - li r0,SYS_ify(rt_sigreturn) - sc - /* No return. */ - -PSEUDO_END(__novec_swapcontext) - -compat_symbol (libc, __novec_swapcontext, swapcontext, GLIBC_2_3) - -#endif - - .section ".text" - .machine "altivec" -ENTRY(__swapcontext) - CALL_MCOUNT 2 - std r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r3) - std r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r3) - mflr r0 - std r31,-8(1) - cfi_offset(r31,-8) - std r2,(SIGCONTEXT_GP_REGS+(PT_R2*8))(r3) - std r0,FRAME_LR_SAVE(r1) - cfi_offset (lr, FRAME_LR_SAVE) - std r0,(SIGCONTEXT_GP_REGS+(PT_LNK*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(PT_NIP*8))(r3) - stdu r1,-128(r1) - cfi_adjust_cfa_offset(128) - std r4,(SIGCONTEXT_GP_REGS+(PT_R4*8))(r3) - std r5,(SIGCONTEXT_GP_REGS+(PT_R5*8))(r3) - std r6,(SIGCONTEXT_GP_REGS+(PT_R6*8))(r3) - std r7,(SIGCONTEXT_GP_REGS+(PT_R7*8))(r3) - std r8,(SIGCONTEXT_GP_REGS+(PT_R8*8))(r3) - std r9,(SIGCONTEXT_GP_REGS+(PT_R9*8))(r3) - std r10,(SIGCONTEXT_GP_REGS+(PT_R10*8))(r3) - std r11,(SIGCONTEXT_GP_REGS+(PT_R11*8))(r3) - std r12,(SIGCONTEXT_GP_REGS+(PT_R12*8))(r3) - std r13,(SIGCONTEXT_GP_REGS+(PT_R13*8))(r3) - std r14,(SIGCONTEXT_GP_REGS+(PT_R14*8))(r3) - std r15,(SIGCONTEXT_GP_REGS+(PT_R15*8))(r3) - std r16,(SIGCONTEXT_GP_REGS+(PT_R16*8))(r3) - std r17,(SIGCONTEXT_GP_REGS+(PT_R17*8))(r3) - std r18,(SIGCONTEXT_GP_REGS+(PT_R18*8))(r3) - std r19,(SIGCONTEXT_GP_REGS+(PT_R19*8))(r3) - std r20,(SIGCONTEXT_GP_REGS+(PT_R20*8))(r3) - std r21,(SIGCONTEXT_GP_REGS+(PT_R21*8))(r3) - std r22,(SIGCONTEXT_GP_REGS+(PT_R22*8))(r3) - std r23,(SIGCONTEXT_GP_REGS+(PT_R23*8))(r3) - std r24,(SIGCONTEXT_GP_REGS+(PT_R24*8))(r3) - std r25,(SIGCONTEXT_GP_REGS+(PT_R25*8))(r3) - std r26,(SIGCONTEXT_GP_REGS+(PT_R26*8))(r3) - std r27,(SIGCONTEXT_GP_REGS+(PT_R27*8))(r3) - std r28,(SIGCONTEXT_GP_REGS+(PT_R28*8))(r3) - std r29,(SIGCONTEXT_GP_REGS+(PT_R29*8))(r3) - std r30,(SIGCONTEXT_GP_REGS+(PT_R30*8))(r3) - std r31,(SIGCONTEXT_GP_REGS+(PT_R31*8))(r3) - mfctr r0 - std r0,(SIGCONTEXT_GP_REGS+(PT_CTR*8))(r3) - mfxer r0 - std r0,(SIGCONTEXT_GP_REGS+(PT_XER*8))(r3) - mfcr r0 - std r0,(SIGCONTEXT_GP_REGS+(PT_CCR*8))(r3) - - /* Set the return value of swapcontext to "success". R3 is the only - register whose value is not preserved in the saved context. */ - li r0,0 - std r0,(SIGCONTEXT_GP_REGS+(PT_R3*8))(r3) - - /* Zero fill fields that can't be set in user state or are unused. */ - std r0,(SIGCONTEXT_GP_REGS+(PT_MSR*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(34*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(PT_SOFTE*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(40*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(41*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(42*8))(r3) - std r0,(SIGCONTEXT_GP_REGS+(PT_RESULT*8))(r3) - - /* Set the PT_REGS pointer to the address of sigcontext gp_regs - field. Struct pt_regs and elf_gregset_t are the same thing. - We kept the regs field for backwards compatibility with - libraries built before we extended sigcontext. */ - addi r0,r3,SIGCONTEXT_GP_REGS - std r0,SIGCONTEXT_PT_REGS(r3) - - stfd fp0,(SIGCONTEXT_FP_REGS+(PT_R0*8))(r3) - stfd fp1,(SIGCONTEXT_FP_REGS+(PT_R1*8))(r3) - stfd fp2,(SIGCONTEXT_FP_REGS+(PT_R2*8))(r3) - stfd fp3,(SIGCONTEXT_FP_REGS+(PT_R3*8))(r3) - stfd fp4,(SIGCONTEXT_FP_REGS+(PT_R4*8))(r3) - stfd fp5,(SIGCONTEXT_FP_REGS+(PT_R5*8))(r3) - stfd fp6,(SIGCONTEXT_FP_REGS+(PT_R6*8))(r3) - stfd fp7,(SIGCONTEXT_FP_REGS+(PT_R7*8))(r3) - stfd fp8,(SIGCONTEXT_FP_REGS+(PT_R8*8))(r3) - stfd fp9,(SIGCONTEXT_FP_REGS+(PT_R9*8))(r3) - stfd fp10,(SIGCONTEXT_FP_REGS+(PT_R10*8))(r3) - stfd fp11,(SIGCONTEXT_FP_REGS+(PT_R11*8))(r3) - stfd fp12,(SIGCONTEXT_FP_REGS+(PT_R12*8))(r3) - stfd fp13,(SIGCONTEXT_FP_REGS+(PT_R13*8))(r3) - stfd fp14,(SIGCONTEXT_FP_REGS+(PT_R14*8))(r3) - stfd fp15,(SIGCONTEXT_FP_REGS+(PT_R15*8))(r3) - stfd fp16,(SIGCONTEXT_FP_REGS+(PT_R16*8))(r3) - stfd fp17,(SIGCONTEXT_FP_REGS+(PT_R17*8))(r3) - stfd fp18,(SIGCONTEXT_FP_REGS+(PT_R18*8))(r3) - stfd fp19,(SIGCONTEXT_FP_REGS+(PT_R19*8))(r3) - stfd fp20,(SIGCONTEXT_FP_REGS+(PT_R20*8))(r3) - stfd fp21,(SIGCONTEXT_FP_REGS+(PT_R21*8))(r3) - stfd fp22,(SIGCONTEXT_FP_REGS+(PT_R22*8))(r3) - stfd fp23,(SIGCONTEXT_FP_REGS+(PT_R23*8))(r3) - stfd fp24,(SIGCONTEXT_FP_REGS+(PT_R24*8))(r3) - stfd fp25,(SIGCONTEXT_FP_REGS+(PT_R25*8))(r3) - stfd fp26,(SIGCONTEXT_FP_REGS+(PT_R26*8))(r3) - stfd fp27,(SIGCONTEXT_FP_REGS+(PT_R27*8))(r3) - stfd fp28,(SIGCONTEXT_FP_REGS+(PT_R28*8))(r3) - stfd fp29,(SIGCONTEXT_FP_REGS+(PT_R29*8))(r3) - mffs fp0 - stfd fp30,(SIGCONTEXT_FP_REGS+(PT_R30*8))(r3) - stfd fp31,(SIGCONTEXT_FP_REGS+(PT_R31*8))(r3) - stfd fp0,(SIGCONTEXT_FP_REGS+(32*8))(r3) - - ld r8,.LC__dl_hwcap@toc(r2) -#ifdef SHARED -/* Load _rtld-global._dl_hwcap. */ - ld r8,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET(r8) -#else - ld r8,0(r8) /* Load extern _dl_hwcap. */ -#endif - la r10,(SIGCONTEXT_V_RESERVE+8)(r3) - la r9,(SIGCONTEXT_V_RESERVE+24)(r3) - - andis. r6,r8,(PPC_FEATURE_HAS_ALTIVEC >> 16) - - clrrdi r10,r10,4 - beq L(has_no_vec) - - clrrdi r9,r9,4 - mr r8,r10 /* Capture *v_regs value in r5. */ - - stvx v0,0,r10 - stvx v1,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v2,0,r10 - stvx v3,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v4,0,r10 - stvx v5,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v6,0,r10 - stvx v7,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v8,0,r10 - stvx v9,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v10,0,r10 - stvx v11,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v12,0,r10 - stvx v13,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v14,0,r10 - stvx v15,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v16,0,r10 - stvx v17,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v18,0,r10 - stvx v19,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v20,0,r10 - stvx v21,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v22,0,r10 - stvx v23,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v24,0,r10 - stvx v25,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v26,0,r10 - stvx v27,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v28,0,r10 - stvx v29,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - stvx v30,0,r10 - stvx v31,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - mfvscr v0 - mfspr r0,VRSAVE - stvx v0,0,r10 - stw r0,0(r9) - -L(has_no_vec): -/* - Store either a NULL or a quadword aligned pointer to the Vector register - array into *v_regs. -*/ - std r8,(SIGCONTEXT_V_REGS_PTR)(r3) - - mr r31,r4 - addi r5,r3,UCONTEXT_SIGMASK - addi r4,r4,UCONTEXT_SIGMASK - li r3,SIG_SETMASK - bl JUMPTARGET(__sigprocmask) - nop - cmpdi r3,0 - bne L(error_exit) - -/* - * If this new ucontext refers to the point where we were interrupted - * by a signal, we have to use the rt_sigreturn system call to - * return to the context so we get both LR and CTR restored. - * - * Otherwise, the context we are restoring is either just after - * a procedure call (getcontext/swapcontext) or at the beginning - * of a procedure call (makecontext), so we don't need to restore - * msr and ctr. We don't restore r13 since it will be used as - * the TLS pointer. */ - ld r0,(SIGCONTEXT_GP_REGS+(PT_MSR*8))(r31) - cmpdi r0,0 - bne L(do_sigret) - - ld r8,.LC__dl_hwcap@toc(r2) - ld r10,(SIGCONTEXT_V_REGS_PTR)(r31) -# ifdef SHARED -/* Load _rtld-global._dl_hwcap. */ - ld r8,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET(r8) -# else - ld r8,0(r8) /* Load extern _dl_hwcap. */ -# endif - andis. r6,r8,(PPC_FEATURE_HAS_ALTIVEC >> 16) - beq L(has_no_vec2) - - cmpdi r10,0 - beq L(has_no_vec2) - lwz r0,(33*16)(r10) - - li r9,(16*32) - mtspr VRSAVE,r0 - cmpwi r0,0 - beq L(has_no_vec2) - - lvx v19,r9,r10 - la r9,(16)(r10) - - lvx v0,0,r10 - lvx v1,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - mtvscr v19 - lvx v2,0,r10 - lvx v3,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v4,0,r10 - lvx v5,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v6,0,r10 - lvx v7,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v8,0,r10 - lvx v9,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v10,0,r10 - lvx v11,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v12,0,r10 - lvx v13,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v14,0,r10 - lvx v15,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v16,0,r10 - lvx v17,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v18,0,r10 - lvx v19,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v20,0,r10 - lvx v21,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v22,0,r10 - lvx v23,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v24,0,r10 - lvx v25,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v26,0,r10 - lvx v27,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v28,0,r10 - lvx v29,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v30,0,r10 - lvx v31,0,r9 - addi r10,r10,32 - addi r9,r9,32 - - lvx v10,0,r10 - lvx v11,0,r9 - addi r10,r10,32 - addi r9,r9,32 - -L(has_no_vec2): - - lfd fp0,(SIGCONTEXT_FP_REGS+(32*8))(r31) - lfd fp31,(SIGCONTEXT_FP_REGS+(PT_R31*8))(r31) - lfd fp30,(SIGCONTEXT_FP_REGS+(PT_R30*8))(r31) - -# ifdef _ARCH_PWR6 - /* Use the extended four-operand version of the mtfsf insn. */ - .machine push - .machine "power6" - - mtfsf 0xff,fp0,1,0 - - .machine pop -# else - /* Availability of DFP indicates a 64-bit FPSCR. */ - andi. r6,r8,PPC_FEATURE_HAS_DFP - beq 7f - - .machine push - .machine "power6" - - mtfsf 0xff,fp0,1,0 - - .machine pop - - b 8f - /* Continue to operate on the FPSCR as if it were 32-bits. */ -7: - mtfsf 0xff,fp0 -8: -#endif /* _ARCH_PWR6 */ - - lfd fp29,(SIGCONTEXT_FP_REGS+(PT_R29*8))(r31) - lfd fp28,(SIGCONTEXT_FP_REGS+(PT_R28*8))(r31) - lfd fp27,(SIGCONTEXT_FP_REGS+(PT_R27*8))(r31) - lfd fp26,(SIGCONTEXT_FP_REGS+(PT_R26*8))(r31) - lfd fp25,(SIGCONTEXT_FP_REGS+(PT_R25*8))(r31) - lfd fp24,(SIGCONTEXT_FP_REGS+(PT_R24*8))(r31) - lfd fp23,(SIGCONTEXT_FP_REGS+(PT_R23*8))(r31) - lfd fp22,(SIGCONTEXT_FP_REGS+(PT_R22*8))(r31) - lfd fp21,(SIGCONTEXT_FP_REGS+(PT_R21*8))(r31) - lfd fp20,(SIGCONTEXT_FP_REGS+(PT_R20*8))(r31) - lfd fp19,(SIGCONTEXT_FP_REGS+(PT_R19*8))(r31) - lfd fp18,(SIGCONTEXT_FP_REGS+(PT_R18*8))(r31) - lfd fp17,(SIGCONTEXT_FP_REGS+(PT_R17*8))(r31) - lfd fp16,(SIGCONTEXT_FP_REGS+(PT_R16*8))(r31) - lfd fp15,(SIGCONTEXT_FP_REGS+(PT_R15*8))(r31) - lfd fp14,(SIGCONTEXT_FP_REGS+(PT_R14*8))(r31) - lfd fp13,(SIGCONTEXT_FP_REGS+(PT_R13*8))(r31) - lfd fp12,(SIGCONTEXT_FP_REGS+(PT_R12*8))(r31) - lfd fp11,(SIGCONTEXT_FP_REGS+(PT_R11*8))(r31) - lfd fp10,(SIGCONTEXT_FP_REGS+(PT_R10*8))(r31) - lfd fp9,(SIGCONTEXT_FP_REGS+(PT_R9*8))(r31) - lfd fp8,(SIGCONTEXT_FP_REGS+(PT_R8*8))(r31) - lfd fp7,(SIGCONTEXT_FP_REGS+(PT_R7*8))(r31) - lfd fp6,(SIGCONTEXT_FP_REGS+(PT_R6*8))(r31) - lfd fp5,(SIGCONTEXT_FP_REGS+(PT_R5*8))(r31) - lfd fp4,(SIGCONTEXT_FP_REGS+(PT_R4*8))(r31) - lfd fp3,(SIGCONTEXT_FP_REGS+(PT_R3*8))(r31) - lfd fp2,(SIGCONTEXT_FP_REGS+(PT_R2*8))(r31) - lfd fp1,(SIGCONTEXT_FP_REGS+(PT_R1*8))(r31) - lfd fp0,(SIGCONTEXT_FP_REGS+(PT_R0*8))(r31) - - ld r0,(SIGCONTEXT_GP_REGS+(PT_LNK*8))(r31) - ld r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r31) - mtlr r0 - ld r2,(SIGCONTEXT_GP_REGS+(PT_R2*8))(r31) - ld r0,(SIGCONTEXT_GP_REGS+(PT_XER*8))(r31) - ld r3,(SIGCONTEXT_GP_REGS+(PT_R3*8))(r31) - mtxer r0 - ld r4,(SIGCONTEXT_GP_REGS+(PT_R4*8))(r31) - ld r0,(SIGCONTEXT_GP_REGS+(PT_CCR*8))(r31) - ld r5,(SIGCONTEXT_GP_REGS+(PT_R5*8))(r31) - ld r6,(SIGCONTEXT_GP_REGS+(PT_R6*8))(r31) - ld r7,(SIGCONTEXT_GP_REGS+(PT_R7*8))(r31) - ld r8,(SIGCONTEXT_GP_REGS+(PT_R8*8))(r31) - ld r9,(SIGCONTEXT_GP_REGS+(PT_R9*8))(r31) - mtcr r0 - ld r10,(SIGCONTEXT_GP_REGS+(PT_R10*8))(r31) - ld r11,(SIGCONTEXT_GP_REGS+(PT_R11*8))(r31) - ld r12,(SIGCONTEXT_GP_REGS+(PT_R12*8))(r31) - /* Don't reload the thread ID or TLS pointer (r13). */ - ld r14,(SIGCONTEXT_GP_REGS+(PT_R14*8))(r31) - ld r15,(SIGCONTEXT_GP_REGS+(PT_R15*8))(r31) - ld r16,(SIGCONTEXT_GP_REGS+(PT_R16*8))(r31) - ld r17,(SIGCONTEXT_GP_REGS+(PT_R17*8))(r31) - ld r18,(SIGCONTEXT_GP_REGS+(PT_R18*8))(r31) - ld r19,(SIGCONTEXT_GP_REGS+(PT_R19*8))(r31) - ld r20,(SIGCONTEXT_GP_REGS+(PT_R20*8))(r31) - ld r21,(SIGCONTEXT_GP_REGS+(PT_R21*8))(r31) - ld r22,(SIGCONTEXT_GP_REGS+(PT_R22*8))(r31) - ld r23,(SIGCONTEXT_GP_REGS+(PT_R23*8))(r31) - ld r24,(SIGCONTEXT_GP_REGS+(PT_R24*8))(r31) - ld r25,(SIGCONTEXT_GP_REGS+(PT_R25*8))(r31) - ld r26,(SIGCONTEXT_GP_REGS+(PT_R26*8))(r31) - ld r27,(SIGCONTEXT_GP_REGS+(PT_R27*8))(r31) - ld r28,(SIGCONTEXT_GP_REGS+(PT_R28*8))(r31) - ld r29,(SIGCONTEXT_GP_REGS+(PT_R29*8))(r31) - ld r30,(SIGCONTEXT_GP_REGS+(PT_R30*8))(r31) - - /* Now we branch to the "Next Instruction Pointer" from the saved - context. With the powerpc64 instruction set there is no good way to - do this (from user state) without clobbering either the LR or CTR. - The makecontext and swapcontext functions depend on the callers - LR being preserved so we use the CTR. */ - ld r0,(SIGCONTEXT_GP_REGS+(PT_NIP*8))(r31) - mtctr r0 - ld r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r31) - ld r31,(SIGCONTEXT_GP_REGS+(PT_R31*8))(r31) - bctr - -L(error_exit): - ld r0,128+FRAME_LR_SAVE(r1) - addi r1,r1,128 - mtlr r0 - ld r31,-8(r1) - blr - - /* At this point we assume that the ucontext was created by a - rt_signal and we should use rt_sigreturn to restore the original - state. As of the 2.4.21 kernel the ucontext is the first thing - (offset 0) in the rt_signal frame and rt_sigreturn expects the - ucontext address in R1. Normally the rt-signal trampoline handles - this by popping dummy frame before the rt_signal syscall. In our - case the stack may not be in its original (signal handler return with - R1 pointing at the dummy frame) state. We do have the ucontext - address in R3, so simply copy R3 to R1 before the syscall. */ -L(do_sigret): - mr r1,r3, - li r0,SYS_ify(rt_sigreturn) - sc - /* No return. */ - -PSEUDO_END(__swapcontext) - -versioned_symbol (libc, __swapcontext, swapcontext, GLIBC_2_3_4) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h deleted file mode 100644 index cad13da3ba..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h +++ /dev/null @@ -1,147 +0,0 @@ -/* Cancellable system call stubs. Linux/PowerPC64 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Franz Sirl , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# define DASHDASHPFX(str) __##str - -#if _CALL_ELF == 2 -#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16+48) -#define CANCEL_PARM_SAVE (FRAME_MIN_SIZE+16) -#else -#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16) -#define CANCEL_PARM_SAVE (CANCEL_FRAMESIZE+FRAME_PARM_SAVE) -#endif - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .section ".text"; \ - ENTRY (name) \ - SINGLE_THREAD_P; \ - bne- .Lpseudo_cancel; \ - .type DASHDASHPFX(syscall_name##_nocancel),@function; \ - .globl DASHDASHPFX(syscall_name##_nocancel); \ - DASHDASHPFX(syscall_name##_nocancel): \ - DO_CALL (SYS_ify (syscall_name)); \ - PSEUDO_RET; \ - .size DASHDASHPFX(syscall_name##_nocancel),.-DASHDASHPFX(syscall_name##_nocancel); \ - .Lpseudo_cancel: \ - stdu 1,-CANCEL_FRAMESIZE(1); \ - cfi_adjust_cfa_offset (CANCEL_FRAMESIZE); \ - mflr 9; \ - std 9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1); \ - cfi_offset (lr, FRAME_LR_SAVE); \ - DOCARGS_##args; /* save syscall args around CENABLE. */ \ - CENABLE; \ - std 3,FRAME_MIN_SIZE(1); /* store CENABLE return value (MASK). */ \ - UNDOCARGS_##args; /* restore syscall args. */ \ - DO_CALL (SYS_ify (syscall_name)); \ - mfcr 0; /* save CR/R3 around CDISABLE. */ \ - std 3,FRAME_MIN_SIZE+8(1); \ - std 0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1); \ - cfi_offset (cr, FRAME_CR_SAVE); \ - ld 3,FRAME_MIN_SIZE(1); /* pass MASK to CDISABLE. */ \ - CDISABLE; \ - ld 9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1); \ - ld 0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1); /* restore CR/R3. */ \ - ld 3,FRAME_MIN_SIZE+8(1); \ - mtlr 9; \ - mtcr 0; \ - addi 1,1,CANCEL_FRAMESIZE; \ - cfi_adjust_cfa_offset (-CANCEL_FRAMESIZE); \ - cfi_restore (lr); \ - cfi_restore (cr) - -# define DOCARGS_0 -# define UNDOCARGS_0 - -# define DOCARGS_1 std 3,CANCEL_PARM_SAVE(1); DOCARGS_0 -# define UNDOCARGS_1 ld 3,CANCEL_PARM_SAVE(1); UNDOCARGS_0 - -# define DOCARGS_2 std 4,CANCEL_PARM_SAVE+8(1); DOCARGS_1 -# define UNDOCARGS_2 ld 4,CANCEL_PARM_SAVE+8(1); UNDOCARGS_1 - -# define DOCARGS_3 std 5,CANCEL_PARM_SAVE+16(1); DOCARGS_2 -# define UNDOCARGS_3 ld 5,CANCEL_PARM_SAVE+16(1); UNDOCARGS_2 - -# define DOCARGS_4 std 6,CANCEL_PARM_SAVE+24(1); DOCARGS_3 -# define UNDOCARGS_4 ld 6,CANCEL_PARM_SAVE+24(1); UNDOCARGS_3 - -# define DOCARGS_5 std 7,CANCEL_PARM_SAVE+32(1); DOCARGS_4 -# define UNDOCARGS_5 ld 7,CANCEL_PARM_SAVE+32(1); UNDOCARGS_4 - -# define DOCARGS_6 std 8,CANCEL_PARM_SAVE+40(1); DOCARGS_5 -# define UNDOCARGS_6 ld 8,CANCEL_PARM_SAVE+40(1); UNDOCARGS_5 - -# if IS_IN (libpthread) -# ifdef SHARED -# define CENABLE bl JUMPTARGET(__pthread_enable_asynccancel) -# define CDISABLE bl JUMPTARGET(__pthread_disable_asynccancel) -# else -# define CENABLE bl JUMPTARGET(__pthread_enable_asynccancel); nop -# define CDISABLE bl JUMPTARGET(__pthread_disable_asynccancel); nop -# endif -# elif IS_IN (libc) -# ifdef SHARED -# define CENABLE bl JUMPTARGET(__libc_enable_asynccancel) -# define CDISABLE bl JUMPTARGET(__libc_disable_asynccancel) -# else -# define CENABLE bl JUMPTARGET(__libc_enable_asynccancel); nop -# define CDISABLE bl JUMPTARGET(__libc_disable_asynccancel); nop -# endif -# elif IS_IN (librt) -# ifdef SHARED -# define CENABLE bl JUMPTARGET(__librt_enable_asynccancel) -# define CDISABLE bl JUMPTARGET(__librt_disable_asynccancel) -# else -# define CENABLE bl JUMPTARGET(__librt_enable_asynccancel); nop -# define CDISABLE bl JUMPTARGET(__librt_disable_asynccancel); nop -# endif -# else -# error Unsupported library -# endif - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P \ - lwz 10,MULTIPLE_THREADS_OFFSET(13); \ - cmpwi 10,0 -# endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h deleted file mode 100644 index cc8f931626..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h +++ /dev/null @@ -1,239 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Alan Modra rewrote the INLINE_SYSCALL macro */ - -#ifndef _LINUX_POWERPC_SYSDEP_H -#define _LINUX_POWERPC_SYSDEP_H 1 - -#include -#include -#include - -/* Define __set_errno() for INLINE_SYSCALL macro below. */ -#ifndef __ASSEMBLER__ -#include -#endif - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -#ifdef __ASSEMBLER__ - -/* This seems to always be the case on PPC. */ -# define ALIGNARG(log2) log2 -# define ASM_SIZE_DIRECTIVE(name) .size name,.-name - -#endif /* __ASSEMBLER__ */ - -/* This version is for internal uses when there is no desire - to set errno */ -#define INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK(name, err, type, nr, args...) \ - ({ \ - type sc_ret = ENOSYS; \ - \ - __typeof (__vdso_##name) vdsop = __vdso_##name; \ - PTR_DEMANGLE (vdsop); \ - if (vdsop != NULL) \ - sc_ret = \ - INTERNAL_VSYSCALL_CALL_TYPE (vdsop, err, type, nr, ##args); \ - else \ - err = 1 << 28; \ - sc_ret; \ - }) - -/* List of system calls which are supported as vsyscalls. */ -#define HAVE_CLOCK_GETRES_VSYSCALL 1 -#define HAVE_CLOCK_GETTIME_VSYSCALL 1 -#define HAVE_GETCPU_VSYSCALL 1 - -/* Define a macro which expands inline into the wrapper code for a system - call. This use is for internal calls that do not need to handle errors - normally. It will never touch errno. This returns just what the kernel - gave back in the non-error (CR0.SO cleared) case, otherwise (CR0.SO set) - the negation of the return value in the kernel gets reverted. */ - -#define INTERNAL_VSYSCALL_CALL_TYPE(funcptr, err, type, nr, args...) \ - ({ \ - register void *r0 __asm__ ("r0"); \ - register long int r3 __asm__ ("r3"); \ - register long int r4 __asm__ ("r4"); \ - register long int r5 __asm__ ("r5"); \ - register long int r6 __asm__ ("r6"); \ - register long int r7 __asm__ ("r7"); \ - register long int r8 __asm__ ("r8"); \ - register type rval __asm__ ("r3"); \ - LOADARGS_##nr (funcptr, args); \ - __asm__ __volatile__ \ - ("mtctr %0\n\t" \ - "bctrl\n\t" \ - "mfcr %0\n\t" \ - "0:" \ - : "+r" (r0), "+r" (r3), "+r" (r4), "+r" (r5), "+r" (r6), \ - "+r" (r7), "+r" (r8) \ - : : "r9", "r10", "r11", "r12", "cr0", "ctr", "lr", "memory"); \ - err = (long int) r0; \ - __asm__ __volatile__ ("" : "=r" (rval) : "r" (r3)); \ - rval; \ - }) - -#define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...) \ - INTERNAL_VSYSCALL_CALL_TYPE(funcptr, err, long int, nr, args) - -#undef INLINE_SYSCALL - -/* This version is for kernels that implement system calls that - behave like function calls as far as register saving. */ -#define INLINE_SYSCALL(name, nr, args...) \ - ({ \ - INTERNAL_SYSCALL_DECL (sc_err); \ - long int sc_ret = INTERNAL_SYSCALL (name, sc_err, nr, args); \ - if (INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err)); \ - sc_ret = -1L; \ - } \ - sc_ret; \ - }) - -/* Define a macro which expands inline into the wrapper code for a system - call. This use is for internal calls that do not need to handle errors - normally. It will never touch errno. This returns just what the kernel - gave back in the non-error (CR0.SO cleared) case, otherwise (CR0.SO set) - the negation of the return value in the kernel gets reverted. */ - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - ({ \ - register long int r0 __asm__ ("r0"); \ - register long int r3 __asm__ ("r3"); \ - register long int r4 __asm__ ("r4"); \ - register long int r5 __asm__ ("r5"); \ - register long int r6 __asm__ ("r6"); \ - register long int r7 __asm__ ("r7"); \ - register long int r8 __asm__ ("r8"); \ - LOADARGS_##nr (name, ##args); \ - ABORT_TRANSACTION; \ - __asm__ __volatile__ \ - ("sc\n\t" \ - "mfcr %0\n\t" \ - "0:" \ - : "=&r" (r0), \ - "=&r" (r3), "=&r" (r4), "=&r" (r5), \ - "=&r" (r6), "=&r" (r7), "=&r" (r8) \ - : ASM_INPUT_##nr \ - : "r9", "r10", "r11", "r12", \ - "cr0", "ctr", "memory"); \ - err = r0; \ - r3; \ - }) -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - INTERNAL_SYSCALL_NCS (__NR_##name, err, nr, args) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) long int err __attribute__ ((unused)) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((void) (val), __builtin_expect ((err) & (1 << 28), 0)) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) (val) - -#define LOADARGS_0(name, dummy) \ - r0 = name -#define LOADARGS_1(name, __arg1) \ - long int arg1 = (long int) (__arg1); \ - LOADARGS_0(name, 0); \ - extern void __illegally_sized_syscall_arg1 (void); \ - if (__builtin_classify_type (__arg1) != 5 && sizeof (__arg1) > 8) \ - __illegally_sized_syscall_arg1 (); \ - r3 = arg1 -#define LOADARGS_2(name, __arg1, __arg2) \ - long int arg2 = (long int) (__arg2); \ - LOADARGS_1(name, __arg1); \ - extern void __illegally_sized_syscall_arg2 (void); \ - if (__builtin_classify_type (__arg2) != 5 && sizeof (__arg2) > 8) \ - __illegally_sized_syscall_arg2 (); \ - r4 = arg2 -#define LOADARGS_3(name, __arg1, __arg2, __arg3) \ - long int arg3 = (long int) (__arg3); \ - LOADARGS_2(name, __arg1, __arg2); \ - extern void __illegally_sized_syscall_arg3 (void); \ - if (__builtin_classify_type (__arg3) != 5 && sizeof (__arg3) > 8) \ - __illegally_sized_syscall_arg3 (); \ - r5 = arg3 -#define LOADARGS_4(name, __arg1, __arg2, __arg3, __arg4) \ - long int arg4 = (long int) (__arg4); \ - LOADARGS_3(name, __arg1, __arg2, __arg3); \ - extern void __illegally_sized_syscall_arg4 (void); \ - if (__builtin_classify_type (__arg4) != 5 && sizeof (__arg4) > 8) \ - __illegally_sized_syscall_arg4 (); \ - r6 = arg4 -#define LOADARGS_5(name, __arg1, __arg2, __arg3, __arg4, __arg5) \ - long int arg5 = (long int) (__arg5); \ - LOADARGS_4(name, __arg1, __arg2, __arg3, __arg4); \ - extern void __illegally_sized_syscall_arg5 (void); \ - if (__builtin_classify_type (__arg5) != 5 && sizeof (__arg5) > 8) \ - __illegally_sized_syscall_arg5 (); \ - r7 = arg5 -#define LOADARGS_6(name, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6) \ - long int arg6 = (long int) (__arg6); \ - LOADARGS_5(name, __arg1, __arg2, __arg3, __arg4, __arg5); \ - extern void __illegally_sized_syscall_arg6 (void); \ - if (__builtin_classify_type (__arg6) != 5 && sizeof (__arg6) > 8) \ - __illegally_sized_syscall_arg6 (); \ - r8 = arg6 - -#define ASM_INPUT_0 "0" (r0) -#define ASM_INPUT_1 ASM_INPUT_0, "1" (r3) -#define ASM_INPUT_2 ASM_INPUT_1, "2" (r4) -#define ASM_INPUT_3 ASM_INPUT_2, "3" (r5) -#define ASM_INPUT_4 ASM_INPUT_3, "4" (r6) -#define ASM_INPUT_5 ASM_INPUT_4, "5" (r7) -#define ASM_INPUT_6 ASM_INPUT_5, "6" (r8) - - -/* Pointer mangling support. */ -#if IS_IN (rtld) -/* We cannot use the thread descriptor because in ld.so we use setjmp - earlier than the descriptor is initialized. */ -#else -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(reg, tmpreg) \ - ld tmpreg,POINTER_GUARD(r13); \ - xor reg,tmpreg,reg -# define PTR_MANGLE2(reg, tmpreg) \ - xor reg,tmpreg,reg -# define PTR_MANGLE3(destreg, reg, tmpreg) \ - ld tmpreg,POINTER_GUARD(r13); \ - xor destreg,tmpreg,reg -# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) -# define PTR_DEMANGLE2(reg, tmpreg) PTR_MANGLE2 (reg, tmpreg) -# define PTR_DEMANGLE3(destreg, reg, tmpreg) PTR_MANGLE3 (destreg, reg, tmpreg) -# else -# define PTR_MANGLE(var) \ - (var) = (__typeof (var)) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#endif - -#endif /* linux/powerpc/powerpc64/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_create.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_create.c deleted file mode 100644 index d307135003..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_create.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_delete.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_delete.c deleted file mode 100644 index 2dd94f5c7a..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_delete.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_getoverr.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_getoverr.c deleted file mode 100644 index 22eaff5cda..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_getoverr.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_gettime.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_gettime.c deleted file mode 100644 index cea524bae5..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_gettime.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_settime.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_settime.c deleted file mode 100644 index fa231149d5..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/timer_settime.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/ucontext_i.sym b/sysdeps/unix/sysv/linux/powerpc/powerpc64/ucontext_i.sym deleted file mode 100644 index 8364e4614f..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/ucontext_i.sym +++ /dev/null @@ -1,29 +0,0 @@ -#include -#include -#include - --- - -SIG_BLOCK -SIG_SETMASK - - --- Offsets of the fields in the ucontext_t structure. -#define ucontext(member) offsetof (ucontext_t, member) -#define mcontext(member) ucontext (uc_mcontext.member) - -UCONTEXT_LINK ucontext (uc_link) -UCONTEXT_STACK ucontext (uc_stack) -UCONTEXT_STACK_SP ucontext (uc_stack.ss_sp) -UCONTEXT_STACK_FLAGS ucontext (uc_stack.ss_flags) -UCONTEXT_STACK_SIZE ucontext (uc_stack.ss_size) -UCONTEXT_SIGMASK ucontext (uc_sigmask) -UCONTEXT_MCONTEXT ucontext (uc_mcontext) -SIGCONTEXT_SIGNAL mcontext (signal) -SIGCONTEXT_HANDLER mcontext (handler) -SIGCONTEXT_OLDMASK mcontext (oldmask) -SIGCONTEXT_PT_REGS mcontext (regs) -SIGCONTEXT_GP_REGS mcontext (gp_regs) -SIGCONTEXT_FP_REGS mcontext (fp_regs) -SIGCONTEXT_V_REGS_PTR mcontext (v_regs) -SIGCONTEXT_V_RESERVE mcontext (vmx_reserve) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/umount.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/umount.c deleted file mode 100644 index e10b40f96c..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/umount.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S deleted file mode 100644 index f4fdfe2ffb..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include -#include - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__vfork) - CALL_MCOUNT 0 - - DO_CALL (SYS_ify (vfork)) - - PSEUDO_RET - -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) - -weak_alias (__vfork, vfork) -strong_alias (__vfork, __libc_vfork) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64le/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc64le/Implies deleted file mode 100644 index 4eacd3ae86..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64le/Implies +++ /dev/null @@ -1 +0,0 @@ -unix/sysv/linux/powerpc/powerpc64 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64le/fpu/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc64le/fpu/Implies deleted file mode 100644 index 5da96db05b..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64le/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -unix/sysv/linux/powerpc/powerpc64/fpu diff --git a/sysdeps/unix/sysv/linux/powerpc/profil-counter.h b/sysdeps/unix/sysv/linux/powerpc/profil-counter.h deleted file mode 100644 index 8a6a0bcf3d..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/profil-counter.h +++ /dev/null @@ -1,2 +0,0 @@ -/* We can use the ix86 version. */ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c b/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c deleted file mode 100644 index 0a977136b6..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "pthreadP.h" -#include -#if defined SHARED && SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_3_4) - -/* These functions are not declared anywhere since they shouldn't be - used at another place but here. */ -extern void __novmx__libc_siglongjmp (sigjmp_buf env, int val) - __attribute__ ((noreturn)); -extern void __novmx__libc_longjmp (sigjmp_buf env, int val) - __attribute__ ((noreturn)); - - -void __novmx_siglongjmp (sigjmp_buf env, int val) -{ - __novmx__libc_siglongjmp (env, val); -} - -void __novmx_longjmp (jmp_buf env, int val) -{ - __novmx__libc_longjmp (env, val); -} - -compat_symbol (libpthread, __novmx_longjmp, longjmp, GLIBC_2_0); -compat_symbol (libpthread, __novmx_siglongjmp, siglongjmp, GLIBC_2_0); -#endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)) */ - -void -__vmx_longjmp (jmp_buf env, int val) -{ - __libc_longjmp (env, val); -} - -void -__vmx_siglongjmp (jmp_buf env, int val) -{ - __libc_siglongjmp (env, val); -} - -versioned_symbol (libpthread, __vmx_longjmp, longjmp, GLIBC_2_3_4); -versioned_symbol (libpthread, __vmx_siglongjmp, siglongjmp, GLIBC_2_3_4); diff --git a/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstack.c b/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstack.c deleted file mode 100644 index 2cb0a13bcb..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstack.c +++ /dev/null @@ -1,2 +0,0 @@ -#define NEW_VERNUM GLIBC_2_6 -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstacksize.c b/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstacksize.c deleted file mode 100644 index 6fedac1b33..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstacksize.c +++ /dev/null @@ -1,9 +0,0 @@ -#include /* For __getpagesize. */ -#define NEW_VERNUM GLIBC_2_6 -#define STACKSIZE_ADJUST \ - do { \ - size_t ps = __getpagesize (); \ - if (stacksize < 2 * ps) \ - stacksize = 2 * ps; \ - } while (0) -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/pthread_mutex_cond_lock.c b/sysdeps/unix/sysv/linux/powerpc/pthread_mutex_cond_lock.c deleted file mode 100644 index 22f9f745a1..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/pthread_mutex_cond_lock.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The cond lock is not actually elided yet, but we still need to handle - already elided locks. */ -#include - -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/pthread_mutex_lock.c b/sysdeps/unix/sysv/linux/powerpc/pthread_mutex_lock.c deleted file mode 100644 index 927b32d597..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/pthread_mutex_lock.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Elided version of pthread_mutex_lock. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/pthread_mutex_timedlock.c b/sysdeps/unix/sysv/linux/powerpc/pthread_mutex_timedlock.c deleted file mode 100644 index 1073ae05eb..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/pthread_mutex_timedlock.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Elided version of pthread_mutex_timedlock. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/pthread_mutex_trylock.c b/sysdeps/unix/sysv/linux/powerpc/pthread_mutex_trylock.c deleted file mode 100644 index 80e7743ef8..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/pthread_mutex_trylock.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Elided version of pthread_mutex_trylock. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/putmsg.c b/sysdeps/unix/sysv/linux/powerpc/putmsg.c deleted file mode 100644 index ebc1680ca7..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/putmsg.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/readdir64.c b/sysdeps/unix/sysv/linux/powerpc/readdir64.c deleted file mode 100644 index 2ea26dd409..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/readdir64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/readdir64_r.c b/sysdeps/unix/sysv/linux/powerpc/readdir64_r.c deleted file mode 100644 index 9f54f897e3..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/readdir64_r.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/readelflib.c b/sysdeps/unix/sysv/linux/powerpc/readelflib.c deleted file mode 100644 index 0b789e7f41..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/readelflib.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Special checks on libraries for ldconfig. Linux/PowerPC version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -int process_elf32_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); -int process_elf64_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); - -/* Returns 0 if everything is ok, != 0 in case of error. */ -int -process_elf_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, void *file_contents, - size_t file_length) -{ - ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; - int ret; - - if (elf_header->e_ident [EI_CLASS] == ELFCLASS32) - return process_elf32_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - else - { - ret = process_elf64_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - /* PowerPC 64bit libraries are always libc.so.6+. */ - if (!ret) - *flag = FLAG_POWERPC_LIB64|FLAG_ELF_LIBC6; - return ret; - } -} - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf32_file -#define __ELF_NATIVE_CLASS 32 -#include "elf/readelflib.c" - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf64_file -#define __ELF_NATIVE_CLASS 64 -#include "elf/readelflib.c" diff --git a/sysdeps/unix/sysv/linux/powerpc/rt-sysdep.c b/sysdeps/unix/sysv/linux/powerpc/rt-sysdep.c deleted file mode 100644 index 3ff55952e2..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/rt-sysdep.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h b/sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h deleted file mode 100644 index b8b59970f9..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define SIGCONTEXT struct sigcontext * -#define SIGCONTEXT_EXTRA_ARGS -#define GET_PC(ctx) ((void *)((ctx)->regs->nip)) -#define GET_FRAME(ctx) (*(void **)((ctx)->regs->gpr[1])) -#define GET_STACK(ctx) ((void *)((ctx)->regs->gpr[1])) -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff --git a/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h b/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h deleted file mode 100644 index 61ded22955..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h +++ /dev/null @@ -1,139 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somehow modelled after the file of the same name on SysVr4 - systems. It provides a definition of the core file format for ELF - used on Linux. */ - -#include -#include -#include -#include -#include -#include - -__BEGIN_DECLS - -/* These definitions are normally provided by ucontext.h via - asm/sigcontext.h, asm/ptrace.h, and asm/elf.h. Otherwise we define - them here. */ -#if !defined __PPC64_ELF_H && !defined _ASM_POWERPC_ELF_H -#define ELF_NGREG 48 /* includes nip, msr, lr, etc. */ -#define ELF_NFPREG 33 /* includes fpscr */ -#if __WORDSIZE == 32 -# define ELF_NVRREG 33 /* includes vscr */ -#else -# define ELF_NVRREG 34 /* includes vscr */ -#endif - -typedef unsigned long elf_greg_t; -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -typedef double elf_fpreg_t; -typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; - -/* Altivec registers */ -typedef struct { - unsigned int u[4]; -} __attribute__ ((__aligned__ (16))) elf_vrreg_t; -typedef elf_vrreg_t elf_vrregset_t[ELF_NVRREG]; -#endif - -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - gdb doesn't really use excluded. Fields present but not used are - marked with "XXX". */ -struct elf_prstatus - { -#if 0 - long int pr_flags; /* XXX Process flags. */ - short int pr_why; /* XXX Reason for process halt. */ - short int pr_what; /* XXX More detailed reason. */ -#endif - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ -#if 0 - stack_t pr_altstack; /* Alternate stack info. */ - struct sigaction pr_action; /* Signal action for current sig. */ -#endif - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ -#if 0 - long int pr_instr; /* Current instruction. */ -#endif - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - __uid_t pr_uid; - __gid_t pr_gid; - __pid_t pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore habe only ine PID type. */ -typedef __pid_t lwpid_t; - - -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h b/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h deleted file mode 100644 index ed1ed63cca..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h +++ /dev/null @@ -1,199 +0,0 @@ -/* `ptrace' debugger support interface. Linux version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PTRACE_H -#define _SYS_PTRACE_H 1 - -#include -#include - -__BEGIN_DECLS - -/* Type of the REQUEST argument to `ptrace.' */ -enum __ptrace_request -{ - /* Indicate that the process making this request should be traced. - All signals received by this process can be intercepted by its - parent, and its parent can use the other `ptrace' requests. */ - PTRACE_TRACEME = 0, -#define PT_TRACE_ME PTRACE_TRACEME - - /* Return the word in the process's text space at address ADDR. */ - PTRACE_PEEKTEXT = 1, -#define PT_READ_I PTRACE_PEEKTEXT - - /* Return the word in the process's data space at address ADDR. */ - PTRACE_PEEKDATA = 2, -#define PT_READ_D PTRACE_PEEKDATA - - /* Return the word in the process's user area at offset ADDR. */ - PTRACE_PEEKUSER = 3, -#define PT_READ_U PTRACE_PEEKUSER - - /* Write the word DATA into the process's text space at address ADDR. */ - PTRACE_POKETEXT = 4, -#define PT_WRITE_I PTRACE_POKETEXT - - /* Write the word DATA into the process's data space at address ADDR. */ - PTRACE_POKEDATA = 5, -#define PT_WRITE_D PTRACE_POKEDATA - - /* Write the word DATA into the process's user area at offset ADDR. */ - PTRACE_POKEUSER = 6, -#define PT_WRITE_U PTRACE_POKEUSER - - /* Continue the process. */ - PTRACE_CONT = 7, -#define PT_CONTINUE PTRACE_CONT - - /* Kill the process. */ - PTRACE_KILL = 8, -#define PT_KILL PTRACE_KILL - - /* Single step the process. - This is not supported on all machines. */ - PTRACE_SINGLESTEP = 9, -#define PT_STEP PTRACE_SINGLESTEP - - /* Attach to a process that is already running. */ - PTRACE_ATTACH = 16, -#define PT_ATTACH PTRACE_ATTACH - - /* Detach from a process attached to with PTRACE_ATTACH. */ - PTRACE_DETACH = 17, -#define PT_DETACH PTRACE_DETACH - - /* Continue and stop at the next (return from) syscall. */ - PTRACE_SYSCALL = 24, -#define PT_SYSCALL PTRACE_SYSCALL - - /* Set ptrace filter options. */ - PTRACE_SETOPTIONS = 0x4200, -#define PT_SETOPTIONS PTRACE_SETOPTIONS - - /* Get last ptrace message. */ - PTRACE_GETEVENTMSG = 0x4201, -#define PT_GETEVENTMSG PTRACE_GETEVENTMSG - - /* Get siginfo for process. */ - PTRACE_GETSIGINFO = 0x4202, -#define PT_GETSIGINFO PTRACE_GETSIGINFO - - /* Set new siginfo for process. */ - PTRACE_SETSIGINFO = 0x4203, -#define PT_SETSIGINFO PTRACE_SETSIGINFO - - /* Get register content. */ - PTRACE_GETREGSET = 0x4204, -#define PTRACE_GETREGSET PTRACE_GETREGSET - - /* Set register content. */ - PTRACE_SETREGSET = 0x4205, -#define PTRACE_SETREGSET PTRACE_SETREGSET - - /* Like PTRACE_ATTACH, but do not force tracee to trap and do not affect - signal or group stop state. */ - PTRACE_SEIZE = 0x4206, -#define PTRACE_SEIZE PTRACE_SEIZE - - /* Trap seized tracee. */ - PTRACE_INTERRUPT = 0x4207, -#define PTRACE_INTERRUPT PTRACE_INTERRUPT - - /* Wait for next group event. */ - PTRACE_LISTEN = 0x4208, -#define PTRACE_LISTEN PTRACE_LISTEN - - PTRACE_PEEKSIGINFO = 0x4209, -#define PTRACE_PEEKSIGINFO PTRACE_PEEKSIGINFO - - PTRACE_GETSIGMASK = 0x420a, -#define PTRACE_GETSIGMASK PTRACE_GETSIGMASK - - PTRACE_SETSIGMASK = 0x420b, -#define PTRACE_SETSIGMASK PTRACE_SETSIGMASK - - PTRACE_SECCOMP_GET_FILTER = 0x420c -#define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER -}; - - -/* Flag for PTRACE_LISTEN. */ -enum __ptrace_flags -{ - PTRACE_SEIZE_DEVEL = 0x80000000 -}; - -/* Options set using PTRACE_SETOPTIONS. */ -enum __ptrace_setoptions -{ - PTRACE_O_TRACESYSGOOD = 0x00000001, - PTRACE_O_TRACEFORK = 0x00000002, - PTRACE_O_TRACEVFORK = 0x00000004, - PTRACE_O_TRACECLONE = 0x00000008, - PTRACE_O_TRACEEXEC = 0x00000010, - PTRACE_O_TRACEVFORKDONE = 0x00000020, - PTRACE_O_TRACEEXIT = 0x00000040, - PTRACE_O_TRACESECCOMP = 0x00000080, - PTRACE_O_EXITKILL = 0x00100000, - PTRACE_O_SUSPEND_SECCOMP = 0x00200000, - PTRACE_O_MASK = 0x003000ff -}; - -enum __ptrace_eventcodes -{ -/* Wait extended result codes for the above trace options. */ - PTRACE_EVENT_FORK = 1, - PTRACE_EVENT_VFORK = 2, - PTRACE_EVENT_CLONE = 3, - PTRACE_EVENT_EXEC = 4, - PTRACE_EVENT_VFORK_DONE = 5, - PTRACE_EVENT_EXIT = 6, - PTRACE_EVENT_SECCOMP = 7, -/* Extended result codes enabled by means other than options. */ - PTRACE_EVENT_STOP = 128 -}; - -/* Arguments for PTRACE_PEEKSIGINFO. */ -struct __ptrace_peeksiginfo_args -{ - __uint64_t off; /* From which siginfo to start. */ - __uint32_t flags; /* Flags for peeksiginfo. */ - __int32_t nr; /* How many siginfos to take. */ -}; - -enum __ptrace_peeksiginfo_flags -{ - /* Read signals from a shared (process wide) queue. */ - PTRACE_PEEKSIGINFO_SHARED = (1 << 0) -}; - -/* Perform process tracing functions. REQUEST is one of the values - above, and determines the action to be taken. - For all requests except PTRACE_TRACEME, PID specifies the process to be - traced. - - PID and the other arguments described above for the various requests should - appear (those that are used for the particular request) as: - pid_t PID, void *ADDR, int DATA, void *ADDR2 - after REQUEST. */ -extern long int ptrace (enum __ptrace_request __request, ...) __THROW; - -__END_DECLS - -#endif /* _SYS_PTRACE_H */ diff --git a/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h b/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h deleted file mode 100644 index b460f23bc9..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h +++ /dev/null @@ -1,193 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - - -#ifdef __USE_MISC -# define __ctx(fld) fld -#else -# define __ctx(fld) __ ## fld -#endif - -#if __WORDSIZE == 32 - -/* Number of general registers. */ -# define __NGREG 48 -# ifdef __USE_MISC -# define NGREG __NGREG -# endif - -/* Container for all general registers. */ -typedef unsigned long gregset_t[__NGREG]; - -/* Container for floating-point registers and status */ -typedef struct _libc_fpstate -{ - double __ctx(fpregs)[32]; - double __ctx(fpscr); - unsigned int _pad[2]; -} fpregset_t; - -/* Container for Altivec/VMX registers and status. - Needs to be aligned on a 16-byte boundary. */ -typedef struct _libc_vrstate -{ - unsigned int __ctx(vrregs)[32][4]; - unsigned int __ctx(vrsave); - unsigned int _pad[2]; - unsigned int __ctx(vscr); -} vrregset_t; - -/* Context to describe whole processor state. */ -typedef struct -{ - gregset_t __ctx(gregs); - fpregset_t __ctx(fpregs); - vrregset_t __ctx(vrregs) __attribute__((__aligned__(16))); -} mcontext_t; - -#else - -/* For 64-bit kernels with Altivec support, a machine context is exactly - * a sigcontext. For older kernel (without Altivec) the sigcontext matches - * the mcontext upto but not including the v_regs field. For kernels that - * don't set AT_HWCAP or return AT_HWCAP without PPC_FEATURE_HAS_ALTIVEC the - * v_regs field may not exist and should not be referenced. The v_regd field - * can be refernced safely only after verifying that PPC_FEATURE_HAS_ALTIVEC - * is set in AT_HWCAP. */ - -/* Number of general registers. */ -# define __NGREG 48 /* includes r0-r31, nip, msr, lr, etc. */ -# define __NFPREG 33 /* includes fp0-fp31 &fpscr. */ -# define __NVRREG 34 /* includes v0-v31, vscr, & vrsave in - split vectors */ -# ifdef __USE_MISC -# define NGREG __NGREG -# define NFPREG __NFPREG -# define NVRREG __NVRREG -# endif - -typedef unsigned long gregset_t[__NGREG]; -typedef double fpregset_t[__NFPREG]; - -/* Container for Altivec/VMX Vector Status and Control Register. Only 32-bits - but can only be copied to/from a 128-bit vector register. So we allocated - a whole quadword speedup save/restore. */ -typedef struct _libc_vscr -{ - unsigned int __pad[3]; - unsigned int __ctx(vscr_word); -} vscr_t; - -/* Container for Altivec/VMX registers and status. - Must to be aligned on a 16-byte boundary. */ -typedef struct _libc_vrstate -{ - unsigned int __ctx(vrregs)[32][4]; - vscr_t __ctx(vscr); - unsigned int __ctx(vrsave); - unsigned int __pad[3]; -} vrregset_t __attribute__((__aligned__(16))); - -typedef struct { - unsigned long __glibc_reserved[4]; - int __ctx(signal); - int __pad0; - unsigned long __ctx(handler); - unsigned long __ctx(oldmask); - struct pt_regs *__ctx(regs); - gregset_t __ctx(gp_regs); - fpregset_t __ctx(fp_regs); -/* - * To maintain compatibility with current implementations the sigcontext is - * extended by appending a pointer (v_regs) to a quadword type (elf_vrreg_t) - * followed by an unstructured (vmx_reserve) field of 69 doublewords. This - * allows the array of vector registers to be quadword aligned independent of - * the alignment of the containing sigcontext or ucontext. It is the - * responsibility of the code setting the sigcontext to set this pointer to - * either NULL (if this processor does not support the VMX feature) or the - * address of the first quadword within the allocated (vmx_reserve) area. - * - * The pointer (v_regs) of vector type (elf_vrreg_t) is essentually - * an array of 34 quadword entries. The entries with - * indexes 0-31 contain the corresponding vector registers. The entry with - * index 32 contains the vscr as the last word (offset 12) within the - * quadword. This allows the vscr to be stored as either a quadword (since - * it must be copied via a vector register to/from storage) or as a word. - * The entry with index 33 contains the vrsave as the first word (offset 0) - * within the quadword. - */ - vrregset_t *__ctx(v_regs); - long __ctx(vmx_reserve)[__NVRREG+__NVRREG+1]; -} mcontext_t; - -#endif - -#undef __ctx - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; -#if __WORDSIZE == 32 - /* - * These fields are set up this way to maximize source and - * binary compatibility with code written for the old - * ucontext_t definition, which didn't include space for the - * registers. - * - * Different versions of the kernel have stored the registers on - * signal delivery at different offsets from the ucontext struct. - * Programs should thus use the uc_mcontext.uc_regs pointer to - * find where the registers are actually stored. The registers - * will be stored within the ucontext_t struct but not necessarily - * at a fixed address. As a side-effect, this lets us achieve - * 16-byte alignment for the register storage space if the - * Altivec registers are to be saved, without requiring 16-byte - * alignment on the whole ucontext_t. - * - * The uc_mcontext.regs field is included for source compatibility - * with programs written against the older ucontext_t definition, - * and its name should therefore not change. The uc_pad field - * is for binary compatibility with programs compiled against the - * old ucontext_t; it ensures that uc_mcontext.regs and uc_sigmask - * are at the same offset as previously. - */ - int uc_pad[7]; - union uc_regs_ptr { - struct pt_regs *regs; - mcontext_t *uc_regs; - } uc_mcontext; - sigset_t uc_sigmask; - char uc_reg_space[sizeof(mcontext_t) + 12]; /* last for extensibility */ -#else /* 64-bit */ - sigset_t uc_sigmask; - mcontext_t uc_mcontext; /* last for extensibility */ -#endif - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/powerpc/sys/user.h b/sysdeps/unix/sysv/linux/powerpc/sys/user.h deleted file mode 100644 index a56697d0e9..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/sys/user.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_USER_H - -#define _SYS_USER_H 1 -#include -#include - -#include - -struct user { - struct pt_regs regs; /* entire machine state */ - size_t u_tsize; /* text size (pages) */ - size_t u_dsize; /* data size (pages) */ - size_t u_ssize; /* stack size (pages) */ - unsigned long start_code; /* text starting address */ - unsigned long start_data; /* data starting address */ - unsigned long start_stack; /* stack starting address */ - long int signal; /* signal causing core dump */ - struct regs * u_ar0; /* help gdb find registers */ - unsigned long magic; /* identifies a core file */ - char u_comm[32]; /* user command name */ -}; - -#endif /* sys/user.h */ diff --git a/sysdeps/unix/sysv/linux/powerpc/syscall.S b/sysdeps/unix/sysv/linux/powerpc/syscall.S deleted file mode 100644 index 0522ccd1ee..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/syscall.S +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (syscall) - ABORT_TRANSACTION - mr r0,r3 - mr r3,r4 - mr r4,r5 - mr r5,r6 - mr r6,r7 - mr r7,r8 - mr r8,r9 - sc - PSEUDO_RET -PSEUDO_END (syscall) diff --git a/sysdeps/unix/sysv/linux/powerpc/sysdep.c b/sysdeps/unix/sysv/linux/powerpc/sysdep.c deleted file mode 100644 index 6df0b35448..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/sysdep.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* This routine is jumped to by all the syscall handlers, to stash - an error number into errno. */ -int -__syscall_error (int err_no) -{ - __set_errno (err_no); - return -1; -} diff --git a/sysdeps/unix/sysv/linux/powerpc/test-gettimebasefreq.c b/sysdeps/unix/sysv/linux/powerpc/test-gettimebasefreq.c deleted file mode 100644 index 81cb8aa746..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/test-gettimebasefreq.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Check __ppc_get_timebase_freq() for architecture changes - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Test if __ppc_get_timebase_freq() works and is different from zero. A read - failure might indicate a Linux Kernel change. - This test also use the frequency to compute the real elapsed time. */ - -#include -#include -#include - -#include - -/* Maximum value of the Time Base Register: 2^60 - 1. */ -#define MAX_TB 0xFFFFFFFFFFFFFFF - -static int -do_test (void) -{ - uint64_t t1, t2, f, diff; - - t1 = __ppc_get_timebase (); - printf ("t1 = %"PRIu64"\n", t1); - - f = __ppc_get_timebase_freq (); - printf ("Time Base frequency = %"PRIu64" Hz\n", f); - - if (f == 0) { - printf ("Fail: The time base frequency can't be zero.\n"); - return 1; - } - - t2 = __ppc_get_timebase (); - printf ("t2 = %"PRIu64"\n", t2); - - if (t2 > t1) { - diff = t2 - t1; - } else { - diff = (MAX_TB - t2) + t1; - } - - printf ("Elapsed time = %1.2f usecs\n", (double) diff * 1000000 / f ); - - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/unix/sysv/linux/powerpc/time.c b/sysdeps/unix/sysv/linux/powerpc/time.c deleted file mode 100644 index 8fc901ee22..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/time.c +++ /dev/null @@ -1,84 +0,0 @@ -/* time system call for Linux/PowerPC. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef SHARED -# ifndef __powerpc64__ -# define time __redirect_time -# else -# define __redirect_time time -# endif - -# include -# include -# include -# include -# include - -# ifndef __powerpc64__ -# undef time - -time_t -__time_vsyscall (time_t *t) -{ - return INLINE_VSYSCALL (time, 1, t); -} - -/* __GI_time is defined as hidden and for ppc32 it enables the - compiler make a local call (symbol@local) for internal GLIBC usage. It - means the PLT won't be used and the ifunc resolver will be called directly. - For ppc64 a call to a function in another translation unit might use a - different toc pointer thus disallowing direct branchess and making internal - ifuncs calls safe. */ -# undef libc_hidden_def -# define libc_hidden_def(name) \ - __hidden_ver1 (__time_vsyscall, __GI_time, __time_vsyscall); - -# endif /* !__powerpc64__ */ - -static time_t -time_syscall (time_t *t) -{ - struct timeval tv; - time_t result; - - if (INLINE_VSYSCALL (gettimeofday, 2, &tv, NULL) < 0) - result = (time_t) -1; - else - result = (time_t) tv.tv_sec; - - if (t != NULL) - *t = result; - return result; -} - -# define INIT_ARCH() \ - PREPARE_VERSION (linux2615, "LINUX_2.6.15", 123718565); \ - void *vdso_time = _dl_vdso_vsym ("__kernel_time", &linux2615); - -/* If the vDSO is not available we fall back to the syscall. */ -libc_ifunc_hidden (__redirect_time, time, - vdso_time - ? VDSO_IFUNC_RET (vdso_time) - : (void *) time_syscall); -libc_hidden_def (time) - -#else - -#include - -#endif /* !SHARED */ diff --git a/sysdeps/unix/sysv/linux/ppoll.c b/sysdeps/unix/sysv/linux/ppoll.c deleted file mode 100644 index 8e336518b5..0000000000 --- a/sysdeps/unix/sysv/linux/ppoll.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2006. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - -int -ppoll (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout, - const sigset_t *sigmask) -{ - /* The Linux kernel can in some situations update the timeout value. - We do not want that so use a local variable. */ - struct timespec tval; - if (timeout != NULL) - { - tval = *timeout; - timeout = &tval; - } - - return SYSCALL_CANCEL (ppoll, fds, nfds, timeout, sigmask, _NSIG / 8); -} -libc_hidden_def (ppoll) diff --git a/sysdeps/unix/sysv/linux/pread.c b/sysdeps/unix/sysv/linux/pread.c deleted file mode 100644 index 96df99747a..0000000000 --- a/sysdeps/unix/sysv/linux/pread.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef __OFF_T_MATCHES_OFF64_T - -# ifndef __NR_pread -# define __NR_pread __NR_pread64 -# endif - -ssize_t -__libc_pread (int fd, void *buf, size_t count, off_t offset) -{ - return SYSCALL_CANCEL (pread, fd, buf, count, SYSCALL_LL_PRW (offset)); -} - -strong_alias (__libc_pread, __pread) -libc_hidden_weak (__pread) -weak_alias (__libc_pread, pread) -#endif diff --git a/sysdeps/unix/sysv/linux/pread64.c b/sysdeps/unix/sysv/linux/pread64.c deleted file mode 100644 index 0c2c80e9e2..0000000000 --- a/sysdeps/unix/sysv/linux/pread64.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef __NR_pread64 -# define __NR_pread64 __NR_pread -#endif - -ssize_t -__libc_pread64 (int fd, void *buf, size_t count, off64_t offset) -{ - return SYSCALL_CANCEL (pread64, fd, buf, count, SYSCALL_LL64_PRW (offset)); -} - -weak_alias (__libc_pread64, __pread64) -libc_hidden_weak (__pread64) -weak_alias (__libc_pread64, pread64) - -#ifdef __OFF_T_MATCHES_OFF64_T -strong_alias (__libc_pread64, __libc_pread) -weak_alias (__libc_pread64, __pread) -weak_alias (__libc_pread64, pread) -#endif diff --git a/sysdeps/unix/sysv/linux/preadv.c b/sysdeps/unix/sysv/linux/preadv.c deleted file mode 100644 index ecabc8c9c6..0000000000 --- a/sysdeps/unix/sysv/linux/preadv.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef __OFF_T_MATCHES_OFF64_T - -# ifdef __ASSUME_PREADV - -# ifndef __NR_preadv -# define __NR_preadv __NR_preadv64 -# endif - -ssize_t -preadv (int fd, const struct iovec *vector, int count, off_t offset) -{ - return SYSCALL_CANCEL (preadv, fd, vector, count, LO_HI_LONG (offset)); -} -# else -static ssize_t __atomic_preadv_replacement (int, const struct iovec *, - int, off_t) internal_function; -ssize_t -preadv (int fd, const struct iovec *vector, int count, off_t offset) -{ -# ifdef __NR_preadv - ssize_t result = SYSCALL_CANCEL (preadv, fd, vector, count, - LO_HI_LONG (offset)); - if (result >= 0 || errno != ENOSYS) - return result; -# endif - return __atomic_preadv_replacement (fd, vector, count, offset); -} -# define PREADV static internal_function __atomic_preadv_replacement -# define PREAD __pread -# define OFF_T off_t -# include -# endif /* __ASSUME_PREADV */ - -libc_hidden_def (preadv) -#endif diff --git a/sysdeps/unix/sysv/linux/preadv2.c b/sysdeps/unix/sysv/linux/preadv2.c deleted file mode 100644 index 11fe85eaa8..0000000000 --- a/sysdeps/unix/sysv/linux/preadv2.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Linux implementation of preadv2. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef __OFF_T_MATCHES_OFF64_T - -# if !defined (__NR_preadv2) && defined (__NR_pread64v2) -# define __NR_preadv2 __NR_pread64v2 -# endif - -ssize_t -preadv2 (int fd, const struct iovec *vector, int count, off_t offset, - int flags) -{ -# ifdef __NR_preadv2 - ssize_t result = SYSCALL_CANCEL (preadv2, fd, vector, count, - LO_HI_LONG (offset), flags); - if (result >= 0 || errno != ENOSYS) - return result; -# endif - /* Trying to emulate the preadv2 syscall flags is troublesome: - - * We can not temporary change the file state of the O_DSYNC and O_SYNC - flags to emulate RWF_{D}SYNC (attempts to change the state of using - fcntl are silently ignored). - - * IOCB_HIPRI requires the file opened in O_DIRECT and uses an internal - semantic not provided by any other flag (O_NONBLOCK for instance). */ - - if (flags != 0) - { - __set_errno (EOPNOTSUPP); - return -1; - } - return preadv (fd, vector, count, offset); -} - -#endif diff --git a/sysdeps/unix/sysv/linux/preadv64.c b/sysdeps/unix/sysv/linux/preadv64.c deleted file mode 100644 index c96b2142e3..0000000000 --- a/sysdeps/unix/sysv/linux/preadv64.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifdef __ASSUME_PREADV - -# ifndef __NR_preadv64 -# define __NR_preadv64 __NR_preadv -# endif - -ssize_t -preadv64 (int fd, const struct iovec *vector, int count, off64_t offset) -{ - return SYSCALL_CANCEL (preadv64, fd, vector, count, LO_HI_LONG (offset)); -} -#else -static ssize_t __atomic_preadv64_replacement (int, const struct iovec *, - int, off64_t) internal_function; -ssize_t -preadv64 (int fd, const struct iovec *vector, int count, off64_t offset) -{ -#ifdef __NR_preadv64 - ssize_t result = SYSCALL_CANCEL (preadv64, fd, vector, count, - LO_HI_LONG (offset)); - if (result >= 0 || errno != ENOSYS) - return result; -#endif - return __atomic_preadv64_replacement (fd, vector, count, offset); -} -# define PREADV static internal_function __atomic_preadv64_replacement -# define PREAD __pread64 -# define OFF_T off64_t -# include -#endif -libc_hidden_def (preadv64) - -#ifdef __OFF_T_MATCHES_OFF64_T -strong_alias (preadv64, preadv) -libc_hidden_def (preadv) -#endif diff --git a/sysdeps/unix/sysv/linux/preadv64v2.c b/sysdeps/unix/sysv/linux/preadv64v2.c deleted file mode 100644 index 9d7f8c9893..0000000000 --- a/sysdeps/unix/sysv/linux/preadv64v2.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Linux implementation of preadv2 (LFS version). - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if !defined(__NR_preadv64v2) && defined(__NR_preadv2) -# define __NR_preadv64v2 __NR_preadv2 -#endif - -ssize_t -preadv64v2 (int fd, const struct iovec *vector, int count, off64_t offset, - int flags) -{ -#ifdef __NR_preadv64v2 - ssize_t result = SYSCALL_CANCEL (preadv64v2, fd, vector, count, - LO_HI_LONG (offset), flags); - if (result >= 0 || errno != ENOSYS) - return result; -#endif - /* Trying to emulate the preadv2 syscall flags is troublesome: - - * We can not temporary change the file state of the O_DSYNC and O_SYNC - flags to emulate RWF_{D}SYNC (attempts to change the state of using - fcntl are silently ignored). - - * IOCB_HIPRI requires the file opened in O_DIRECT and uses an internal - semantic not provided by any other flag (O_NONBLOCK for instance). */ - - if (flags != 0) - { - __set_errno (EOPNOTSUPP); - return -1; - } - return preadv64 (fd, vector, count, offset); -} - -#ifdef __OFF_T_MATCHES_OFF64_T -strong_alias (preadv64v2, preadv2) -#endif diff --git a/sysdeps/unix/sysv/linux/prlimit.c b/sysdeps/unix/sysv/linux/prlimit.c deleted file mode 100644 index d31980f10c..0000000000 --- a/sysdeps/unix/sysv/linux/prlimit.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -int -prlimit (__pid_t pid, enum __rlimit_resource resource, - const struct rlimit *new_rlimit, struct rlimit *old_rlimit) -{ - struct rlimit64 new_rlimit64_mem; - struct rlimit64 *new_rlimit64 = NULL; - struct rlimit64 old_rlimit64_mem; - struct rlimit64 *old_rlimit64 = (old_rlimit != NULL - ? &old_rlimit64_mem : NULL); - - if (new_rlimit != NULL) - { - if (new_rlimit->rlim_cur == RLIM_INFINITY) - new_rlimit64_mem.rlim_cur = RLIM64_INFINITY; - else - new_rlimit64_mem.rlim_cur = new_rlimit->rlim_cur; - if (new_rlimit->rlim_max == RLIM_INFINITY) - new_rlimit64_mem.rlim_max = RLIM64_INFINITY; - else - new_rlimit64_mem.rlim_max = new_rlimit->rlim_max; - new_rlimit64 = &new_rlimit64_mem; - } - - int res = INLINE_SYSCALL (prlimit64, 4, pid, resource, new_rlimit64, - old_rlimit64); - - if (res == 0 && old_rlimit != NULL) - { - /* The prlimit64 syscall is ill-designed for 32-bit machines. - We have to provide a 32-bit variant since otherwise the LFS - system would not work. But what shall we do if the syscall - succeeds but the old values do not fit into a rlimit - structure? We cannot return an error because the operation - itself worked. Best is perhaps to return RLIM_INFINITY. */ - old_rlimit->rlim_cur = old_rlimit64_mem.rlim_cur; - if (old_rlimit->rlim_cur != old_rlimit64_mem.rlim_cur) - { - if (new_rlimit == NULL) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EOVERFLOW); - old_rlimit->rlim_cur = RLIM_INFINITY; - } - old_rlimit->rlim_max = old_rlimit64_mem.rlim_max; - if (old_rlimit->rlim_max != old_rlimit64_mem.rlim_max) - { - if (new_rlimit == NULL) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EOVERFLOW); - old_rlimit->rlim_max = RLIM_INFINITY; - } - } - - return res; -} diff --git a/sysdeps/unix/sysv/linux/prof-freq.c b/sysdeps/unix/sysv/linux/prof-freq.c deleted file mode 100644 index b8cb6d0f5e..0000000000 --- a/sysdeps/unix/sysv/linux/prof-freq.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Determine realtime clock frequency. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -int -__profile_frequency (void) -{ - return GLRO(dl_clktck); -} -libc_hidden_def (__profile_frequency) diff --git a/sysdeps/unix/sysv/linux/profil.c b/sysdeps/unix/sysv/linux/profil.c deleted file mode 100644 index 5918ecebfc..0000000000 --- a/sysdeps/unix/sysv/linux/profil.c +++ /dev/null @@ -1,3 +0,0 @@ -/* Linux defines the profil system call but doesn't actually implement - it. Use the generic posix implementation. */ -#include diff --git a/sysdeps/unix/sysv/linux/pselect.c b/sysdeps/unix/sysv/linux/pselect.c deleted file mode 100644 index b5e8c7fbcd..0000000000 --- a/sysdeps/unix/sysv/linux/pselect.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2006. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - -#ifdef __NR_pselect6 -# ifndef __ASSUME_PSELECT -static int __generic_pselect (int nfds, fd_set *readfds, fd_set *writefds, - fd_set *exceptfds, - const struct timespec *timeout, - const sigset_t *sigmask); -# endif - - -int -__pselect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, - const struct timespec *timeout, const sigset_t *sigmask) -{ - /* The Linux kernel can in some situations update the timeout value. - We do not want that so use a local variable. */ - struct timespec tval; - if (timeout != NULL) - { - tval = *timeout; - timeout = &tval; - } - - /* Note: the system call expects 7 values but on most architectures - we can only pass in 6 directly. If there is an architecture with - support for more parameters a new version of this file needs to - be created. */ - struct - { - __syscall_ulong_t ss; - __syscall_ulong_t ss_len; - } data; - - data.ss = (__syscall_ulong_t) (uintptr_t) sigmask; - data.ss_len = _NSIG / 8; - - int result; - -#ifndef CALL_PSELECT6 -# define CALL_PSELECT6(nfds, readfds, writefds, exceptfds, timeout, data) \ - SYSCALL_CANCEL (pselect6, nfds, readfds, writefds, exceptfds, timeout, data) -#endif - - result = CALL_PSELECT6 (nfds, readfds, writefds, exceptfds, timeout, - &data); - -# ifndef __ASSUME_PSELECT - if (result == -1 && errno == ENOSYS) - result = __generic_pselect (nfds, readfds, writefds, exceptfds, timeout, - sigmask); -# endif - - return result; -} -weak_alias (__pselect, pselect) - -# ifndef __ASSUME_PSELECT -# define __pselect static __generic_pselect -# endif -#endif - -#ifndef __ASSUME_PSELECT -# include -#endif diff --git a/sysdeps/unix/sysv/linux/pt-raise.c b/sysdeps/unix/sysv/linux/pt-raise.c deleted file mode 100644 index 171fcddf5d..0000000000 --- a/sysdeps/unix/sysv/linux/pt-raise.c +++ /dev/null @@ -1,20 +0,0 @@ -/* ISO C raise function for libpthread. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include diff --git a/sysdeps/unix/sysv/linux/pthread-pids.h b/sysdeps/unix/sysv/linux/pthread-pids.h deleted file mode 100644 index e67e4f7d5e..0000000000 --- a/sysdeps/unix/sysv/linux/pthread-pids.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Initialize pid and tid fields of struct pthread. Linux version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Initialize PD->pid and PD->tid for the initial thread. If there is - setup required to arrange that __exit_thread causes PD->tid to be - cleared and futex-woken, then this function should do that as well. */ -static inline void -__pthread_initialize_pids (struct pthread *pd) -{ - INTERNAL_SYSCALL_DECL (err); - pd->tid = INTERNAL_SYSCALL_CALL (set_tid_address, err, &pd->tid); -} diff --git a/sysdeps/unix/sysv/linux/pthread_getaffinity.c b/sysdeps/unix/sysv/linux/pthread_getaffinity.c deleted file mode 100644 index 08a9a46645..0000000000 --- a/sysdeps/unix/sysv/linux/pthread_getaffinity.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -int -__pthread_getaffinity_new (pthread_t th, size_t cpusetsize, cpu_set_t *cpuset) -{ - const struct pthread *pd = (const struct pthread *) th; - - INTERNAL_SYSCALL_DECL (err); - int res = INTERNAL_SYSCALL (sched_getaffinity, err, 3, pd->tid, - MIN (INT_MAX, cpusetsize), cpuset); - if (INTERNAL_SYSCALL_ERROR_P (res, err)) - return INTERNAL_SYSCALL_ERRNO (res, err); - - /* Clean the rest of the memory the kernel didn't do. */ - memset ((char *) cpuset + res, '\0', cpusetsize - res); - - return 0; -} -strong_alias (__pthread_getaffinity_new, __pthread_getaffinity_np) -versioned_symbol (libpthread, __pthread_getaffinity_new, - pthread_getaffinity_np, GLIBC_2_3_4); - - -#if SHLIB_COMPAT (libpthread, GLIBC_2_3_3, GLIBC_2_3_4) -int -__pthread_getaffinity_old (pthread_t th, cpu_set_t *cpuset) -{ - /* The old interface by default assumed a 1024 processor bitmap. */ - return __pthread_getaffinity_new (th, 128, cpuset); -} -compat_symbol (libpthread, __pthread_getaffinity_old, pthread_getaffinity_np, - GLIBC_2_3_3); -#endif diff --git a/sysdeps/unix/sysv/linux/pthread_getcpuclockid.c b/sysdeps/unix/sysv/linux/pthread_getcpuclockid.c deleted file mode 100644 index f5af64ea88..0000000000 --- a/sysdeps/unix/sysv/linux/pthread_getcpuclockid.c +++ /dev/null @@ -1,42 +0,0 @@ -/* pthread_getcpuclockid -- Get POSIX clockid_t for a pthread_t. Linux version - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include - - -int -pthread_getcpuclockid (pthread_t threadid, clockid_t *clockid) -{ - struct pthread *pd = (struct pthread *) threadid; - - /* Make sure the descriptor is valid. */ - if (INVALID_TD_P (pd)) - /* Not a valid thread handle. */ - return ESRCH; - - /* The clockid_t value is a simple computation from the TID. */ - - const clockid_t tidclock = MAKE_THREAD_CPUCLOCK (pd->tid, CPUCLOCK_SCHED); - - *clockid = tidclock; - return 0; -} diff --git a/sysdeps/unix/sysv/linux/pthread_getname.c b/sysdeps/unix/sysv/linux/pthread_getname.c deleted file mode 100644 index 9a5343a1d5..0000000000 --- a/sysdeps/unix/sysv/linux/pthread_getname.c +++ /dev/null @@ -1,69 +0,0 @@ -/* pthread_getname_np -- Get thread name. Linux version - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include -#include -#include - -#include - - -int -pthread_getname_np (pthread_t th, char *buf, size_t len) -{ - const struct pthread *pd = (const struct pthread *) th; - - /* Unfortunately the kernel headers do not export the TASK_COMM_LEN - macro. So we have to define it here. */ -#define TASK_COMM_LEN 16 - if (len < TASK_COMM_LEN) - return ERANGE; - - if (pd == THREAD_SELF) - return prctl (PR_GET_NAME, buf) ? errno : 0; - -#define FMT "/proc/self/task/%u/comm" - char fname[sizeof (FMT) + 8]; - sprintf (fname, FMT, (unsigned int) pd->tid); - - int fd = open_not_cancel_2 (fname, O_RDONLY); - if (fd == -1) - return errno; - - int res = 0; - ssize_t n = TEMP_FAILURE_RETRY (read_not_cancel (fd, buf, len)); - if (n < 0) - res = errno; - else - { - if (buf[n - 1] == '\n') - buf[n - 1] = '\0'; - else if (n == len) - res = ERANGE; - else - buf[n] = '\0'; - } - - close_not_cancel_no_status (fd); - - return res; -} diff --git a/sysdeps/unix/sysv/linux/pthread_kill.c b/sysdeps/unix/sysv/linux/pthread_kill.c deleted file mode 100644 index cd6f16e955..0000000000 --- a/sysdeps/unix/sysv/linux/pthread_kill.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - -int -__pthread_kill (pthread_t threadid, int signo) -{ - struct pthread *pd = (struct pthread *) threadid; - - /* Make sure the descriptor is valid. */ - if (DEBUGGING_P && INVALID_TD_P (pd)) - /* Not a valid thread handle. */ - return ESRCH; - - /* Force load of pd->tid into local variable or register. Otherwise - if a thread exits between ESRCH test and tgkill, we might return - EINVAL, because pd->tid would be cleared by the kernel. */ - pid_t tid = atomic_forced_read (pd->tid); - if (__glibc_unlikely (tid <= 0)) - /* Not a valid thread handle. */ - return ESRCH; - - /* Disallow sending the signal we use for cancellation, timers, - for the setxid implementation. */ - if (signo == SIGCANCEL || signo == SIGTIMER || signo == SIGSETXID) - return EINVAL; - - /* We have a special syscall to do the work. */ - INTERNAL_SYSCALL_DECL (err); - - pid_t pid = __getpid (); - - int val = INTERNAL_SYSCALL_CALL (tgkill, err, pid, tid, signo); - return (INTERNAL_SYSCALL_ERROR_P (val, err) - ? INTERNAL_SYSCALL_ERRNO (val, err) : 0); -} -strong_alias (__pthread_kill, pthread_kill) diff --git a/sysdeps/unix/sysv/linux/pthread_setaffinity.c b/sysdeps/unix/sysv/linux/pthread_setaffinity.c deleted file mode 100644 index a3167717b9..0000000000 --- a/sysdeps/unix/sysv/linux/pthread_setaffinity.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - -int -__pthread_setaffinity_new (pthread_t th, size_t cpusetsize, - const cpu_set_t *cpuset) -{ - const struct pthread *pd = (const struct pthread *) th; - INTERNAL_SYSCALL_DECL (err); - int res; - - res = INTERNAL_SYSCALL (sched_setaffinity, err, 3, pd->tid, cpusetsize, - cpuset); - -#ifdef RESET_VGETCPU_CACHE - if (!INTERNAL_SYSCALL_ERROR_P (res, err)) - RESET_VGETCPU_CACHE (); -#endif - - return (INTERNAL_SYSCALL_ERROR_P (res, err) - ? INTERNAL_SYSCALL_ERRNO (res, err) - : 0); -} -versioned_symbol (libpthread, __pthread_setaffinity_new, - pthread_setaffinity_np, GLIBC_2_3_4); - - -#if SHLIB_COMPAT (libpthread, GLIBC_2_3_3, GLIBC_2_3_4) -int -__pthread_setaffinity_old (pthread_t th, cpu_set_t *cpuset) -{ - /* The old interface by default assumed a 1024 processor bitmap. */ - return __pthread_setaffinity_new (th, 128, cpuset); -} -compat_symbol (libpthread, __pthread_setaffinity_old, pthread_setaffinity_np, - GLIBC_2_3_3); -#endif diff --git a/sysdeps/unix/sysv/linux/pthread_setname.c b/sysdeps/unix/sysv/linux/pthread_setname.c deleted file mode 100644 index 5769c5b460..0000000000 --- a/sysdeps/unix/sysv/linux/pthread_setname.c +++ /dev/null @@ -1,63 +0,0 @@ -/* pthread_setname_np -- Set thread name. Linux version - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include -#include -#include - -#include - - -int -pthread_setname_np (pthread_t th, const char *name) -{ - const struct pthread *pd = (const struct pthread *) th; - - /* Unfortunately the kernel headers do not export the TASK_COMM_LEN - macro. So we have to define it here. */ -#define TASK_COMM_LEN 16 - size_t name_len = strlen (name); - if (name_len >= TASK_COMM_LEN) - return ERANGE; - - if (pd == THREAD_SELF) - return prctl (PR_SET_NAME, name) ? errno : 0; - -#define FMT "/proc/self/task/%u/comm" - char fname[sizeof (FMT) + 8]; - sprintf (fname, FMT, (unsigned int) pd->tid); - - int fd = open_not_cancel_2 (fname, O_RDWR); - if (fd == -1) - return errno; - - int res = 0; - ssize_t n = TEMP_FAILURE_RETRY (write_not_cancel (fd, name, name_len)); - if (n < 0) - res = errno; - else if (n != name_len) - res = EIO; - - close_not_cancel_no_status (fd); - - return res; -} diff --git a/sysdeps/unix/sysv/linux/pthread_sigmask.c b/sysdeps/unix/sysv/linux/pthread_sigmask.c deleted file mode 100644 index 99fdd43cd5..0000000000 --- a/sysdeps/unix/sysv/linux/pthread_sigmask.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -int -pthread_sigmask (int how, const sigset_t *newmask, sigset_t *oldmask) -{ - sigset_t local_newmask; - - /* The only thing we have to make sure here is that SIGCANCEL and - SIGSETXID is not blocked. */ - if (newmask != NULL - && (__builtin_expect (__sigismember (newmask, SIGCANCEL), 0) - || __builtin_expect (__sigismember (newmask, SIGSETXID), 0))) - { - local_newmask = *newmask; - __sigdelset (&local_newmask, SIGCANCEL); - __sigdelset (&local_newmask, SIGSETXID); - newmask = &local_newmask; - } - -#ifdef INTERNAL_SYSCALL - /* We know that realtime signals are available if NPTL is used. */ - INTERNAL_SYSCALL_DECL (err); - int result = INTERNAL_SYSCALL (rt_sigprocmask, err, 4, how, newmask, - oldmask, _NSIG / 8); - - return (INTERNAL_SYSCALL_ERROR_P (result, err) - ? INTERNAL_SYSCALL_ERRNO (result, err) - : 0); -#else - return sigprocmask (how, newmask, oldmask) == -1 ? errno : 0; -#endif -} diff --git a/sysdeps/unix/sysv/linux/pthread_sigqueue.c b/sysdeps/unix/sysv/linux/pthread_sigqueue.c deleted file mode 100644 index c73b92e2da..0000000000 --- a/sysdeps/unix/sysv/linux/pthread_sigqueue.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - - -int -pthread_sigqueue (pthread_t threadid, int signo, const union sigval value) -{ -#ifdef __NR_rt_tgsigqueueinfo - struct pthread *pd = (struct pthread *) threadid; - - /* Make sure the descriptor is valid. */ - if (DEBUGGING_P && INVALID_TD_P (pd)) - /* Not a valid thread handle. */ - return ESRCH; - - /* Force load of pd->tid into local variable or register. Otherwise - if a thread exits between ESRCH test and tgkill, we might return - EINVAL, because pd->tid would be cleared by the kernel. */ - pid_t tid = atomic_forced_read (pd->tid); - if (__glibc_unlikely (tid <= 0)) - /* Not a valid thread handle. */ - return ESRCH; - - /* Disallow sending the signal we use for cancellation, timers, - for the setxid implementation. */ - if (signo == SIGCANCEL || signo == SIGTIMER || signo == SIGSETXID) - return EINVAL; - - pid_t pid = getpid (); - - /* Set up the siginfo_t structure. */ - siginfo_t info; - memset (&info, '\0', sizeof (siginfo_t)); - info.si_signo = signo; - info.si_code = SI_QUEUE; - info.si_pid = pid; - info.si_uid = getuid (); - info.si_value = value; - - /* We have a special syscall to do the work. */ - INTERNAL_SYSCALL_DECL (err); - - int val = INTERNAL_SYSCALL_CALL (rt_tgsigqueueinfo, err, pid, tid, signo, - &info); - return (INTERNAL_SYSCALL_ERROR_P (val, err) - ? INTERNAL_SYSCALL_ERRNO (val, err) : 0); -#else - return ENOSYS; -#endif -} diff --git a/sysdeps/unix/sysv/linux/ptrace.c b/sysdeps/unix/sysv/linux/ptrace.c deleted file mode 100644 index e39127e1cf..0000000000 --- a/sysdeps/unix/sysv/linux/ptrace.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#include -#include - -long int -ptrace (enum __ptrace_request request, ...) -{ - long int res, ret; - va_list ap; - pid_t pid; - void *addr, *data; - - va_start (ap, request); - pid = va_arg (ap, pid_t); - addr = va_arg (ap, void *); - data = va_arg (ap, void *); - va_end (ap); - - if (request > 0 && request < 4) - data = &ret; - - res = INLINE_SYSCALL (ptrace, 4, request, pid, addr, data); - if (res >= 0 && request > 0 && request < 4) - { - __set_errno (0); - return ret; - } - - return res; -} diff --git a/sysdeps/unix/sysv/linux/ptsname.c b/sysdeps/unix/sysv/linux/ptsname.c deleted file mode 100644 index 41bb0bbb0e..0000000000 --- a/sysdeps/unix/sysv/linux/ptsname.c +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Zack Weinberg , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include <_itoa.h> - -/* Check if DEV corresponds to a master pseudo terminal device. */ -#define MASTER_P(Dev) \ - (major ((Dev)) == 2 \ - || (major ((Dev)) == 4 && minor ((Dev)) >= 128 && minor ((Dev)) < 192) \ - || (major ((Dev)) >= 128 && major ((Dev)) < 136)) - -/* Check if DEV corresponds to a slave pseudo terminal device. */ -#define SLAVE_P(Dev) \ - (major ((Dev)) == 3 \ - || (major ((Dev)) == 4 && minor ((Dev)) >= 192 && minor ((Dev)) < 256) \ - || (major ((Dev)) >= 136 && major ((Dev)) < 144)) - -/* Note that major number 4 corresponds to the old BSD style pseudo - terminal devices. As of Linux 2.1.115 these are no longer - supported. They have been replaced by major numbers 2 (masters) - and 3 (slaves). */ - -/* Directory where we can find the slave pty nodes. */ -#define _PATH_DEVPTS "/dev/pts/" - -/* The are declared in getpt.c. */ -extern const char __libc_ptyname1[] attribute_hidden; -extern const char __libc_ptyname2[] attribute_hidden; - -/* Static buffer for `ptsname'. */ -static char buffer[sizeof (_PATH_DEVPTS) + 20]; - - -/* Return the pathname of the pseudo terminal slave associated with - the master FD is open on, or NULL on errors. - The returned storage is good until the next call to this function. */ -char * -ptsname (int fd) -{ - return __ptsname_r (fd, buffer, sizeof (buffer)) != 0 ? NULL : buffer; -} - - -int -__ptsname_internal (int fd, char *buf, size_t buflen, struct stat64 *stp) -{ - int save_errno = errno; - unsigned int ptyno; - - if (!__isatty (fd)) - { - __set_errno (ENOTTY); - return ENOTTY; - } - -#ifdef TIOCGPTN - if (__ioctl (fd, TIOCGPTN, &ptyno) == 0) - { - /* Buffer we use to print the number in. For a maximum size for - `int' of 8 bytes we never need more than 20 digits. */ - char numbuf[21]; - const char *devpts = _PATH_DEVPTS; - const size_t devptslen = strlen (_PATH_DEVPTS); - char *p; - - numbuf[sizeof (numbuf) - 1] = '\0'; - p = _itoa_word (ptyno, &numbuf[sizeof (numbuf) - 1], 10, 0); - - if (buflen < devptslen + (&numbuf[sizeof (numbuf)] - p)) - { - __set_errno (ERANGE); - return ERANGE; - } - - memcpy (__stpcpy (buf, devpts), p, &numbuf[sizeof (numbuf)] - p); - } - else if (errno != EINVAL) - return errno; - else -#endif - { - char *p; - - if (buflen < strlen (_PATH_TTY) + 3) - { - __set_errno (ERANGE); - return ERANGE; - } - - if (__fxstat64 (_STAT_VER, fd, stp) < 0) - return errno; - - /* Check if FD really is a master pseudo terminal. */ - if (! MASTER_P (stp->st_rdev)) - { - __set_errno (ENOTTY); - return ENOTTY; - } - - ptyno = minor (stp->st_rdev); - - if (ptyno / 16 >= strlen (__libc_ptyname1)) - { - __set_errno (ENOTTY); - return ENOTTY; - } - - p = __stpcpy (buf, _PATH_TTY); - p[0] = __libc_ptyname1[ptyno / 16]; - p[1] = __libc_ptyname2[ptyno % 16]; - p[2] = '\0'; - } - - if (__xstat64 (_STAT_VER, buf, stp) < 0) - return errno; - - /* Check if the name we're about to return really corresponds to a - slave pseudo terminal. */ - if (! S_ISCHR (stp->st_mode) || ! SLAVE_P (stp->st_rdev)) - { - /* This really is a configuration problem. */ - __set_errno (ENOTTY); - return ENOTTY; - } - - __set_errno (save_errno); - return 0; -} - - -/* Store at most BUFLEN characters of the pathname of the slave pseudo - terminal associated with the master FD is open on in BUF. - Return 0 on success, otherwise an error number. */ -int -__ptsname_r (int fd, char *buf, size_t buflen) -{ - struct stat64 st; - return __ptsname_internal (fd, buf, buflen, &st); -} -weak_alias (__ptsname_r, ptsname_r) diff --git a/sysdeps/unix/sysv/linux/pwrite.c b/sysdeps/unix/sysv/linux/pwrite.c deleted file mode 100644 index ef11d8f8a1..0000000000 --- a/sysdeps/unix/sysv/linux/pwrite.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef __OFF_T_MATCHES_OFF64_T - -# ifndef __NR_pwrite -# define __NR_pwrite __NR_pwrite64 -# endif - -ssize_t -__libc_pwrite (int fd, const void *buf, size_t count, off_t offset) -{ - return SYSCALL_CANCEL (pwrite, fd, buf, count, SYSCALL_LL_PRW (offset)); -} - -strong_alias (__libc_pwrite, __pwrite) -libc_hidden_weak (__pwrite) -weak_alias (__libc_pwrite, pwrite) -#endif diff --git a/sysdeps/unix/sysv/linux/pwrite64.c b/sysdeps/unix/sysv/linux/pwrite64.c deleted file mode 100644 index 71959c0de2..0000000000 --- a/sysdeps/unix/sysv/linux/pwrite64.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef __NR_pwrite64 -# define __NR_pwrite64 __NR_pwrite -#endif - -ssize_t -__libc_pwrite64 (int fd, const void *buf, size_t count, off64_t offset) -{ - return SYSCALL_CANCEL (pwrite64, fd, buf, count, SYSCALL_LL64_PRW (offset)); -} - -weak_alias (__libc_pwrite64, __pwrite64) -libc_hidden_weak (__pwrite64) -weak_alias (__libc_pwrite64, pwrite64) - -#ifdef __OFF_T_MATCHES_OFF64_T -strong_alias (__libc_pwrite64, __libc_pwrite) -weak_alias (__libc_pwrite64, __pwrite) -weak_alias (__libc_pwrite64, pwrite) -#endif diff --git a/sysdeps/unix/sysv/linux/pwritev.c b/sysdeps/unix/sysv/linux/pwritev.c deleted file mode 100644 index 7545cb3e1e..0000000000 --- a/sysdeps/unix/sysv/linux/pwritev.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef __OFF_T_MATCHES_OFF64_T - -# ifdef __ASSUME_PREADV - -# ifndef __NR_pwritev -# define __NR_pwritev __NR_pwritev64 -# endif - -ssize_t -pwritev (int fd, const struct iovec *vector, int count, off_t offset) -{ - return SYSCALL_CANCEL (pwritev, fd, vector, count, LO_HI_LONG (offset)); -} -# else -static ssize_t __atomic_pwritev_replacement (int, const struct iovec *, - int, off_t) internal_function; -ssize_t -pwritev (int fd, const struct iovec *vector, int count, off_t offset) -{ -# ifdef __NR_pwritev - ssize_t result = SYSCALL_CANCEL (pwritev, fd, vector, count, - LO_HI_LONG (offset)); - if (result >= 0 || errno != ENOSYS) - return result; -# endif - return __atomic_pwritev_replacement (fd, vector, count, offset); -} -# define PWRITEV static internal_function __atomic_pwritev_replacement -# define PWRITE __pwrite -# define OFF_T off_t -# include -# endif /* __ASSUME_PREADV */ - -libc_hidden_def (pwritev) -#endif diff --git a/sysdeps/unix/sysv/linux/pwritev2.c b/sysdeps/unix/sysv/linux/pwritev2.c deleted file mode 100644 index 72f0471f96..0000000000 --- a/sysdeps/unix/sysv/linux/pwritev2.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Linux implementation of pwritev2. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef __OFF_T_MATCHES_OFF64_T - -ssize_t -pwritev2 (int fd, const struct iovec *vector, int count, off_t offset, - int flags) -{ -# ifdef __NR_pwritev2 - ssize_t result = SYSCALL_CANCEL (pwritev2, fd, vector, count, - LO_HI_LONG (offset), flags); - if (result >= 0 || errno != ENOSYS) - return result; -# endif - /* Trying to emulate the pwritev2 syscall flags is troublesome: - - * We can not temporary change the file state of the O_DSYNC and O_SYNC - flags to emulate RWF_{D}SYNC (attempts to change the state of using - fcntl are silently ignored). - - * IOCB_HIPRI requires the file opened in O_DIRECT and uses an internal - semantic not provided by any other flag (O_NONBLOCK for instance). */ - - if (flags != 0) - { - __set_errno (EOPNOTSUPP); - return -1; - } - return pwritev (fd, vector, count, offset); -} - -#endif diff --git a/sysdeps/unix/sysv/linux/pwritev64.c b/sysdeps/unix/sysv/linux/pwritev64.c deleted file mode 100644 index 9dc4e55f96..0000000000 --- a/sysdeps/unix/sysv/linux/pwritev64.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifdef __ASSUME_PWRITEV - -# ifndef __NR_pwritev64 -# define __NR_pwritev64 __NR_pwritev -# endif - -ssize_t -pwritev64 (int fd, const struct iovec *vector, int count, off64_t offset) -{ - return SYSCALL_CANCEL (pwritev64, fd, vector, count, LO_HI_LONG (offset)); -} -#else -static ssize_t __atomic_pwritev64_replacement (int, const struct iovec *, - int, off64_t) internal_function; -ssize_t -pwritev64 (int fd, const struct iovec *vector, int count, off64_t offset) -{ -#ifdef __NR_pwritev64 - ssize_t result = SYSCALL_CANCEL (pwritev64, fd, vector, count, - LO_HI_LONG (offset)); - if (result >= 0 || errno != ENOSYS) - return result; -#endif - return __atomic_pwritev64_replacement (fd, vector, count, offset); -} -# define PWRITEV static internal_function __atomic_pwritev64_replacement -# define PWRITE __pwrite64 -# define OFF_T off64_t -# include -#endif -libc_hidden_def (pwritev64) - -#ifdef __OFF_T_MATCHES_OFF64_T -strong_alias (pwritev64, pwritev) -libc_hidden_def (pwritev) -#endif diff --git a/sysdeps/unix/sysv/linux/pwritev64v2.c b/sysdeps/unix/sysv/linux/pwritev64v2.c deleted file mode 100644 index def9a0bc57..0000000000 --- a/sysdeps/unix/sysv/linux/pwritev64v2.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Linux implementation of pwritev2 (LFS version). - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if !defined(__NR_pwritev64v2) && defined(__NR_pwritev2) -# define __NR_pwritev64v2 __NR_pwritev2 -#endif - -ssize_t -pwritev64v2 (int fd, const struct iovec *vector, int count, off64_t offset, - int flags) -{ -#ifdef __NR_pwritev64v2 - ssize_t result = SYSCALL_CANCEL (pwritev64v2, fd, vector, count, - LO_HI_LONG (offset), flags); - if (result >= 0 || errno != ENOSYS) - return result; -#endif - /* Trying to emulate the pwritev2 syscall flags is troublesome: - - * We can not temporary change the file state of the O_DSYNC and O_SYNC - flags to emulate RWF_{D}SYNC (attempts to change the state of using - fcntl are silently ignored). - - * IOCB_HIPRI requires the file opened in O_DIRECT and uses an internal - semantic not provided by any other flag (O_NONBLOCK for instance). */ - - if (flags != 0) - { - __set_errno (EOPNOTSUPP); - return -1; - } - return pwritev64 (fd, vector, count, offset); -} - -#ifdef __OFF_T_MATCHES_OFF64_T -strong_alias (pwritev64v2, pwritev2) -#endif diff --git a/sysdeps/unix/sysv/linux/raise.c b/sysdeps/unix/sysv/linux/raise.c deleted file mode 100644 index 70e5a98922..0000000000 --- a/sysdeps/unix/sysv/linux/raise.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -int -raise (int sig) -{ - /* rt_sigprocmask may fail if: - - 1. sigsetsize != sizeof (sigset_t) (EINVAL) - 2. a failure in copy from/to user space (EFAULT) - 3. an invalid 'how' operation (EINVAL) - - The first case is already handle in glibc syscall call by using the arch - defined _NSIG. Second case is handled by using a stack allocated mask. - The last one should be handled by the block/unblock functions. */ - - sigset_t set; - __libc_signal_block_app (&set); - - INTERNAL_SYSCALL_DECL (err); - pid_t pid = INTERNAL_SYSCALL (getpid, err, 0); - pid_t tid = INTERNAL_SYSCALL (gettid, err, 0); - - int ret = INLINE_SYSCALL (tgkill, 3, pid, tid, sig); - - __libc_signal_restore_set (&set); - - return ret; -} -libc_hidden_def (raise) -weak_alias (raise, gsignal) diff --git a/sysdeps/unix/sysv/linux/read.c b/sysdeps/unix/sysv/linux/read.c deleted file mode 100644 index 2a02c1bae4..0000000000 --- a/sysdeps/unix/sysv/linux/read.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Linux read syscall implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Read NBYTES into BUF from FD. Return the number read or -1. */ -ssize_t -__libc_read (int fd, void *buf, size_t nbytes) -{ - return SYSCALL_CANCEL (read, fd, buf, nbytes); -} -libc_hidden_def (__libc_read) - -libc_hidden_def (__read) -weak_alias (__libc_read, __read) -libc_hidden_def (read) -weak_alias (__libc_read, read) diff --git a/sysdeps/unix/sysv/linux/readahead.c b/sysdeps/unix/sysv/linux/readahead.c deleted file mode 100644 index 8adcc9a81b..0000000000 --- a/sysdeps/unix/sysv/linux/readahead.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Provide kernel hint to read ahead. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - - -#ifdef __NR_readahead - -ssize_t -__readahead (int fd, off64_t offset, size_t count) -{ - return INLINE_SYSCALL (readahead, 4, fd, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff)), - count); -} -#else -ssize_t -__readahead (int fd, off64_t offset, size_t count) -{ - return INLINE_SYSCALL_ERROR_RETURN_VALUE (ENOSYS); -} -stub_warning (readahead) -#endif - -weak_alias (__readahead, readahead) diff --git a/sysdeps/unix/sysv/linux/readdir64.c b/sysdeps/unix/sysv/linux/readdir64.c deleted file mode 100644 index 224f53db88..0000000000 --- a/sysdeps/unix/sysv/linux/readdir64.c +++ /dev/null @@ -1,7 +0,0 @@ -#define __READDIR __readdir64 -#define __GETDENTS __getdents64 -#define DIRENT_TYPE struct dirent64 - -#include - -weak_alias (__readdir64, readdir64) diff --git a/sysdeps/unix/sysv/linux/readdir64_r.c b/sysdeps/unix/sysv/linux/readdir64_r.c deleted file mode 100644 index 3dfbf4fd2c..0000000000 --- a/sysdeps/unix/sysv/linux/readdir64_r.c +++ /dev/null @@ -1,7 +0,0 @@ -#define __READDIR_R __readdir64_r -#define __GETDENTS __getdents64 -#define DIRENT_TYPE struct dirent64 - -#include - -weak_alias (__readdir64_r, readdir64_r) diff --git a/sysdeps/unix/sysv/linux/readonly-area.c b/sysdeps/unix/sysv/linux/readonly-area.c deleted file mode 100644 index e2288e98d6..0000000000 --- a/sysdeps/unix/sysv/linux/readonly-area.c +++ /dev/null @@ -1,102 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include "libio/libioP.h" - -/* Return 1 if the whole area PTR .. PTR+SIZE is not writable. - Return -1 if it is writable. */ - -int -__readonly_area (const char *ptr, size_t size) -{ - const void *ptr_end = ptr + size; - - FILE *fp = fopen ("/proc/self/maps", "rce"); - if (fp == NULL) - { - /* It is the system administrator's choice to not have /proc - available to this process (e.g., because it runs in a chroot - environment. Don't fail in this case. */ - if (errno == ENOENT - /* The kernel has a bug in that a process is denied access - to the /proc filesystem if it is set[ug]id. There has - been no willingness to change this in the kernel so - far. */ - || errno == EACCES) - return 1; - return -1; - } - - /* We need no locking. */ - __fsetlocking (fp, FSETLOCKING_BYCALLER); - - char *line = NULL; - size_t linelen = 0; - - while (! feof_unlocked (fp)) - { - if (_IO_getdelim (&line, &linelen, '\n', fp) <= 0) - break; - - char *p; - uintptr_t from = strtoul (line, &p, 16); - - if (p == line || *p++ != '-') - break; - - char *q; - uintptr_t to = strtoul (p, &q, 16); - - if (q == p || *q++ != ' ') - break; - - if (from < (uintptr_t) ptr_end && to > (uintptr_t) ptr) - { - /* Found an entry that at least partially covers the area. */ - if (*q++ != 'r' || *q++ != '-') - break; - - if (from <= (uintptr_t) ptr && to >= (uintptr_t) ptr_end) - { - size = 0; - break; - } - else if (from <= (uintptr_t) ptr) - size -= to - (uintptr_t) ptr; - else if (to >= (uintptr_t) ptr_end) - size -= (uintptr_t) ptr_end - from; - else - size -= to - from; - - if (!size) - break; - } - } - - fclose (fp); - free (line); - - /* If the whole area between ptr and ptr_end is covered by read-only - VMAs, return 1. Otherwise return -1. */ - return size == 0 ? 1 : -1; -} diff --git a/sysdeps/unix/sysv/linux/readv.c b/sysdeps/unix/sysv/linux/readv.c deleted file mode 100644 index 142a0a92a7..0000000000 --- a/sysdeps/unix/sysv/linux/readv.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Linux implementation for readv syscall. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ssize_t -__readv (int fd, const struct iovec *iov, int iovcnt) -{ - return SYSCALL_CANCEL (readv, fd, iov, iovcnt); -} -weak_alias (__readv, readv) diff --git a/sysdeps/unix/sysv/linux/reboot.c b/sysdeps/unix/sysv/linux/reboot.c deleted file mode 100644 index dfaed404eb..0000000000 --- a/sysdeps/unix/sysv/linux/reboot.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include -#include - -/* Call kernel with additional two arguments the syscall requires. */ -int -reboot (int howto) -{ - return INLINE_SYSCALL (reboot, 3, (int) 0xfee1dead, 672274793, howto); -} diff --git a/sysdeps/unix/sysv/linux/recv.c b/sysdeps/unix/sysv/linux/recv.c deleted file mode 100644 index 2467d9955d..0000000000 --- a/sysdeps/unix/sysv/linux/recv.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -ssize_t -__libc_recv (int fd, void *buf, size_t len, int flags) -{ -#ifdef __ASSUME_RECV_SYSCALL - return SYSCALL_CANCEL (recv, fd, buf, len, flags); -#elif defined __ASSUME_RECVFROM_SYSCALL - return SYSCALL_CANCEL (recvfrom, fd, buf, len, flags, NULL, NULL); -#else - return SOCKETCALL_CANCEL (recv, fd, buf, len, flags); -#endif -} -weak_alias (__libc_recv, recv) -weak_alias (__libc_recv, __recv) -libc_hidden_weak (__recv) diff --git a/sysdeps/unix/sysv/linux/recvfrom.c b/sysdeps/unix/sysv/linux/recvfrom.c deleted file mode 100644 index 27c2360f64..0000000000 --- a/sysdeps/unix/sysv/linux/recvfrom.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -ssize_t -__libc_recvfrom (int fd, void *buf, size_t len, int flags, - __SOCKADDR_ARG addr, socklen_t *addrlen) -{ -#ifdef __ASSUME_RECVFROM_SYSCALL - return SYSCALL_CANCEL (recvfrom, fd, buf, len, flags, addr.__sockaddr__, - addrlen); -#else - return SOCKETCALL_CANCEL (recvfrom, fd, buf, len, flags, addr.__sockaddr__, - addrlen); -#endif -} -weak_alias (__libc_recvfrom, recvfrom) -weak_alias (__libc_recvfrom, __recvfrom) diff --git a/sysdeps/unix/sysv/linux/recvmmsg.c b/sysdeps/unix/sysv/linux/recvmmsg.c deleted file mode 100644 index 60e06b7754..0000000000 --- a/sysdeps/unix/sysv/linux/recvmmsg.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab , 2010. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include -#include -#include -#include - -int -recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags, - struct timespec *tmo) -{ -#ifdef __ASSUME_RECVMMSG_SYSCALL - return SYSCALL_CANCEL (recvmmsg, fd, vmessages, vlen, flags, tmo); -#else - return SOCKETCALL_CANCEL (recvmmsg, fd, vmessages, vlen, flags, tmo); -#endif -} diff --git a/sysdeps/unix/sysv/linux/recvmsg.c b/sysdeps/unix/sysv/linux/recvmsg.c deleted file mode 100644 index 020be8bf56..0000000000 --- a/sysdeps/unix/sysv/linux/recvmsg.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Linux recvmsg syscall wrapper. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -ssize_t -__libc_recvmsg (int fd, struct msghdr *msg, int flags) -{ -# ifdef __ASSUME_RECVMSG_SYSCALL - return SYSCALL_CANCEL (recvmsg, fd, msg, flags); -# else - return SOCKETCALL_CANCEL (recvmsg, fd, msg, flags); -# endif -} -weak_alias (__libc_recvmsg, recvmsg) -weak_alias (__libc_recvmsg, __recvmsg) diff --git a/sysdeps/unix/sysv/linux/remove.c b/sysdeps/unix/sysv/linux/remove.c deleted file mode 100644 index 4abf34a73d..0000000000 --- a/sysdeps/unix/sysv/linux/remove.c +++ /dev/null @@ -1,2 +0,0 @@ -#define IS_NO_DIRECTORY_ERROR errno != EISDIR -#include diff --git a/sysdeps/unix/sysv/linux/rename.c b/sysdeps/unix/sysv/linux/rename.c deleted file mode 100644 index ebf59bc39c..0000000000 --- a/sysdeps/unix/sysv/linux/rename.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Linux implementation for rename function. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -/* Rename the file OLD to NEW. */ -int -rename (const char *old, const char *new) -{ -#if defined (__NR_rename) - return INLINE_SYSCALL_CALL (rename, old, new); -#elif defined (__NR_renameat) - return INLINE_SYSCALL_CALL (renameat, AT_FDCWD, old, AT_FDCWD, new); -#else - return INLINE_SYSCALL_CALL (renameat2, AT_FDCWD, old, AT_FDCWD, new, 0); -#endif -} diff --git a/sysdeps/unix/sysv/linux/renameat.c b/sysdeps/unix/sysv/linux/renameat.c deleted file mode 100644 index 603159ccc4..0000000000 --- a/sysdeps/unix/sysv/linux/renameat.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Linux implementation for renameat function. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -int -renameat (int oldfd, const char *old, int newfd, const char *new) -{ -#ifdef __NR_renameat - return INLINE_SYSCALL_CALL (renameat, oldfd, old, newfd, new); -#else - return INLINE_SYSCALL_CALL (renameat2, oldfd, old, newfd, new, 0); -#endif -} diff --git a/sysdeps/unix/sysv/linux/s390/Implies b/sysdeps/unix/sysv/linux/s390/Implies deleted file mode 100644 index e6e51fa5a7..0000000000 --- a/sysdeps/unix/sysv/linux/s390/Implies +++ /dev/null @@ -1,5 +0,0 @@ -s390/nptl - -# These supply the ABI compatibility for when long double was double. -ieee754/ldbl-64-128 -ieee754/ldbl-opt diff --git a/sysdeps/unix/sysv/linux/s390/Makefile b/sysdeps/unix/sysv/linux/s390/Makefile deleted file mode 100644 index 3867c33d91..0000000000 --- a/sysdeps/unix/sysv/linux/s390/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -abi-variants := 32 64 -abi-32-options := -U__s390x__ -abi-32-condition := __WORDSIZE == 32 -abi-64-options := -D__s390x__ -abi-64-condition := __WORDSIZE == 64 - -ifeq ($(subdir),rt) -librt-routines += rt-sysdep -librt-shared-only-routines += rt-sysdep -endif - -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext_i.sym -endif - -ifeq ($(subdir),elf) -sysdep_routines += dl-vdso -endif - -ifeq ($(subdir),nptl) -ifeq ($(enable-lock-elision),yes) -libpthread-sysdep_routines += elision-lock elision-unlock elision-timed \ - elision-trylock - -elision-CFLAGS = -mhtm -msoft-float -CFLAGS-elision-lock.c = $(elision-CFLAGS) -CFLAGS-elision-timed.c = $(elision-CFLAGS) -CFLAGS-elision-trylock.c = $(elision-CFLAGS) -CFLAGS-elision-unlock.c = $(elision-CFLAGS) -endif -endif diff --git a/sysdeps/unix/sysv/linux/s390/Versions b/sysdeps/unix/sysv/linux/s390/Versions deleted file mode 100644 index 55518a7e5f..0000000000 --- a/sysdeps/unix/sysv/linux/s390/Versions +++ /dev/null @@ -1,16 +0,0 @@ -libc { - GLIBC_2.19 { - __longjmp_chk; - getcontext; - } - GLIBC_PRIVATE { - __vdso_clock_gettime; - __vdso_clock_getres; - } -} - -libpthread { - GLIBC_2.19 { - longjmp; siglongjmp; - } -} diff --git a/sysdeps/unix/sysv/linux/s390/arch-fork.h b/sysdeps/unix/sysv/linux/s390/arch-fork.h deleted file mode 100644 index 299e638ce8..0000000000 --- a/sysdeps/unix/sysv/linux/s390/arch-fork.h +++ /dev/null @@ -1,29 +0,0 @@ -/* ARCH_FORK definition for Linux fork implementation. S390 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 5, \ - 0, CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ - NULL, &THREAD_SELF->tid, NULL) diff --git a/sysdeps/unix/sysv/linux/s390/bits/elfclass.h b/sysdeps/unix/sysv/linux/s390/bits/elfclass.h deleted file mode 100644 index 723f75158e..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/elfclass.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file specifies the native word size of the machine, which indicates - the ELF file class used for executables and shared objects on this - machine. */ - -#ifndef _LINK_H -# error "Never use directly; include instead." -#endif - -#include - -#define __ELF_NATIVE_CLASS __WORDSIZE - -#if __WORDSIZE == 64 -/* 64 bit Linux for S/390 is exceptional as it has .hash section with - 64 bit entries. */ -typedef uint64_t Elf_Symndx; -#else -/* 32 bit Linux for S/390 has normal .hash section entries with 32 bits. */ -typedef uint32_t Elf_Symndx; -#endif diff --git a/sysdeps/unix/sysv/linux/s390/bits/environments.h b/sysdeps/unix/sysv/linux/s390/bits/environments.h deleted file mode 100644 index ab29ebfcc1..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/environments.h +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _UNISTD_H -# error "Never include this file directly. Use instead" -#endif - -#include - -/* This header should define the following symbols under the described - situations. A value `1' means that the model is always supported, - `-1' means it is never supported. Undefined means it cannot be - statically decided. - - _POSIX_V7_ILP32_OFF32 32bit int, long, pointers, and off_t type - _POSIX_V7_ILP32_OFFBIG 32bit int, long, and pointers and larger off_t type - - _POSIX_V7_LP64_OFF32 64bit long and pointers and 32bit off_t type - _POSIX_V7_LPBIG_OFFBIG 64bit long and pointers and large off_t type - - The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG, - _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32, - _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were - used in previous versions of the Unix standard and are available - only for compatibility. -*/ - -#if __WORDSIZE == 64 - -/* Environments with 32-bit wide pointers are optionally provided. - Therefore following macros aren't defined: - # undef _POSIX_V7_ILP32_OFF32 - # undef _POSIX_V7_ILP32_OFFBIG - # undef _POSIX_V6_ILP32_OFF32 - # undef _POSIX_V6_ILP32_OFFBIG - # undef _XBS5_ILP32_OFF32 - # undef _XBS5_ILP32_OFFBIG - and users need to check at runtime. */ - -/* We also have no use (for now) for an environment with bigger pointers - and offsets. */ -# define _POSIX_V7_LPBIG_OFFBIG -1 -# define _POSIX_V6_LPBIG_OFFBIG -1 -# define _XBS5_LPBIG_OFFBIG -1 - -/* By default we have 64-bit wide `long int', pointers and `off_t'. */ -# define _POSIX_V7_LP64_OFF64 1 -# define _POSIX_V6_LP64_OFF64 1 -# define _XBS5_LP64_OFF64 1 - -#else /* __WORDSIZE == 32 */ - -/* By default we have 32-bit wide `int', `long int', pointers and `off_t' - and all platforms support LFS. */ -# define _POSIX_V7_ILP32_OFF32 1 -# define _POSIX_V7_ILP32_OFFBIG 1 -# define _POSIX_V6_ILP32_OFF32 1 -# define _POSIX_V6_ILP32_OFFBIG 1 -# define _XBS5_ILP32_OFF32 1 -# define _XBS5_ILP32_OFFBIG 1 - -/* We optionally provide an environment with the above size but an 64-bit - side `off_t'. Therefore we don't define _POSIX_V7_ILP32_OFFBIG. */ - -/* Environments with 64-bit wide pointers can be provided, - so these macros aren't defined: - # undef _POSIX_V7_LP64_OFF64 - # undef _POSIX_V7_LPBIG_OFFBIG - # undef _POSIX_V6_LP64_OFF64 - # undef _POSIX_V6_LPBIG_OFFBIG - # undef _XBS5_LP64_OFF64 - # undef _XBS5_LPBIG_OFFBIG - and sysconf tests for it at runtime. */ - -#endif /* __WORDSIZE == 32 */ - -#define __ILP32_OFF32_CFLAGS "-m31" -#define __ILP32_OFFBIG_CFLAGS "-m31 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" -#define __ILP32_OFF32_LDFLAGS "-m31" -#define __ILP32_OFFBIG_LDFLAGS "-m31" -#define __LP64_OFF64_CFLAGS "-m64" -#define __LP64_OFF64_LDFLAGS "-m64" diff --git a/sysdeps/unix/sysv/linux/s390/bits/fcntl.h b/sysdeps/unix/sysv/linux/s390/bits/fcntl.h deleted file mode 100644 index bce5f1a577..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/fcntl.h +++ /dev/null @@ -1,71 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -#include - -#if __WORDSIZE == 64 -/* Not necessary, files are always with 64bit off_t. */ -# define __O_LARGEFILE 0 -#endif - -#if __WORDSIZE == 64 -/* Not necessary, we always have 64-bit offsets. */ -# define F_GETLK64 5 /* Get record locking info. */ -# define F_SETLK64 6 /* Set record locking info (non-blocking). */ -# define F_SETLKW64 7 /* Set record locking info (blocking). */ -#endif - -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#if __WORDSIZE == 64 || !defined __USE_FILE_OFFSET64 - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -#if __WORDSIZE == 64 -# define __POSIX_FADV_DONTNEED 6 /* Don't need these pages. */ -# define __POSIX_FADV_NOREUSE 7 /* Data will be accessed once. */ -#else -# define __POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ -# define __POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/s390/bits/hwcap.h b/sysdeps/unix/sysv/linux/s390/bits/hwcap.h deleted file mode 100644 index 6a7e4328c0..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/hwcap.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Defines for bits in AT_HWCAP. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_AUXV_H -# error "Never include directly; use instead." -#endif - -/* - * The following must match the kernels asm/elf.h. - * Note that these are *not* the same as the STORE FACILITY LIST bits. - */ -#define HWCAP_S390_ESAN3 1 -#define HWCAP_S390_ZARCH 2 -#define HWCAP_S390_STFLE 4 -#define HWCAP_S390_MSA 8 -#define HWCAP_S390_LDISP 16 -#define HWCAP_S390_EIMM 32 -#define HWCAP_S390_DFP 64 -#define HWCAP_S390_HPAGE 128 -#define HWCAP_S390_ETF3EH 256 -#define HWCAP_S390_HIGH_GPRS 512 -#define HWCAP_S390_TE 1024 -#define HWCAP_S390_VX 2048 diff --git a/sysdeps/unix/sysv/linux/s390/bits/ipc.h b/sysdeps/unix/sysv/linux/s390/bits/ipc.h deleted file mode 100644 index 3d462dbca4..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/ipc.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IPC_H -# error "Never use directly; include instead." -#endif - -#include -#include - -/* Mode bits for `msgget', `semget', and `shmget'. */ -#define IPC_CREAT 01000 /* Create key if key does not exist. */ -#define IPC_EXCL 02000 /* Fail if key exists. */ -#define IPC_NOWAIT 04000 /* Return error on wait. */ - -/* Control commands for `msgctl', `semctl', and `shmctl'. */ -#define IPC_RMID 0 /* Remove identifier. */ -#define IPC_SET 1 /* Set `ipc_perm' options. */ -#define IPC_STAT 2 /* Get `ipc_perm' options. */ -#ifdef __USE_GNU -#define IPC_INFO 3 /* See ipcs. */ -#endif - -/* Special key values. */ -#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ - - -/* Data structure used to pass permission information to IPC operations. */ -struct ipc_perm - { - __key_t __key; /* Key. */ - __uid_t uid; /* Owner's user ID. */ - __gid_t gid; /* Owner's group ID. */ - __uid_t cuid; /* Creator's user ID. */ - __gid_t cgid; /* Creator's group ID. */ -#if __WORDSIZE == 64 - __mode_t mode; /* Read/write permission. */ -#else - unsigned short int mode; /* Read/write permission. */ - unsigned short int __pad1; -#endif - unsigned short int __seq; /* Sequence number. */ - unsigned short int __pad2; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - }; diff --git a/sysdeps/unix/sysv/linux/s390/bits/mman.h b/sysdeps/unix/sysv/linux/s390/bits/mman.h deleted file mode 100644 index 922cd4dfbb..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/mman.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/s390 version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */ -# define MAP_DENYWRITE 0x00800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x02000 /* Lock the mapping. */ -# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */ -# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ -# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/s390/bits/msq.h b/sysdeps/unix/sysv/linux/s390/bits/msq.h deleted file mode 100644 index 5eb0b9a155..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/msq.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_MSG_H -# error "Never use directly; include instead." -#endif - -#include -#include - -/* Define options for message queue functions. */ -#define MSG_NOERROR 010000 /* no error if message is too big */ -#ifdef __USE_GNU -# define MSG_EXCEPT 020000 /* recv any msg except of specified type */ -# define MSG_COPY 040000 /* copy (not remove) all queue messages */ -#endif - -/* Types used in the structure definition. */ -typedef unsigned long int msgqnum_t; -typedef unsigned long int msglen_t; - - -/* Structure of record for one message inside the kernel. - The type `struct msg' is opaque. */ -struct msqid_ds -{ - struct ipc_perm msg_perm; /* structure describing operation permission */ - __time_t msg_stime; /* time of last msgsnd command */ -#if __WORDSIZE != 64 - unsigned long int __glibc_reserved1; -#endif - __time_t msg_rtime; /* time of last msgrcv command */ -#if __WORDSIZE != 64 - unsigned long int __glibc_reserved2; -#endif - __time_t msg_ctime; /* time of last change */ -#if __WORDSIZE != 64 - unsigned long int __glibc_reserved3; -#endif - unsigned long int __msg_cbytes; /* current number of bytes on queue */ - msgqnum_t msg_qnum; /* number of messages currently on queue */ - msglen_t msg_qbytes; /* max number of bytes allowed on queue */ - __pid_t msg_lspid; /* pid of last msgsnd() */ - __pid_t msg_lrpid; /* pid of last msgrcv() */ - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; -}; - -#ifdef __USE_MISC - -# define msg_cbytes __msg_cbytes - -/* ipcs ctl commands */ -# define MSG_STAT 11 -# define MSG_INFO 12 - -/* buffer for msgctl calls IPC_INFO, MSG_INFO */ -struct msginfo - { - int msgpool; - int msgmap; - int msgmax; - int msgmnb; - int msgmni; - int msgssz; - int msgtql; - unsigned short int msgseg; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/s390/bits/sem.h b/sysdeps/unix/sysv/linux/s390/bits/sem.h deleted file mode 100644 index 0ff0be10ef..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/sem.h +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SEM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Flags for `semop'. */ -#define SEM_UNDO 0x1000 /* undo the operation on exit */ - -/* Commands for `semctl'. */ -#define GETPID 11 /* get sempid */ -#define GETVAL 12 /* get semval */ -#define GETALL 13 /* get all semval's */ -#define GETNCNT 14 /* get semncnt */ -#define GETZCNT 15 /* get semzcnt */ -#define SETVAL 16 /* set semval */ -#define SETALL 17 /* set all semval's */ - - -/* Data structure describing a set of semaphores. */ -struct semid_ds -{ - struct ipc_perm sem_perm; /* operation permission struct */ - __time_t sem_otime; /* last semop() time */ -#if __WORDSIZE != 64 - unsigned long int __glibc_reserved1; -#endif - __time_t sem_ctime; /* last time changed by semctl() */ -#if __WORDSIZE != 64 - unsigned long int __glibc_reserved2; -#endif - unsigned long int sem_nsems; /* number of semaphores in set */ - unsigned long int __glibc_reserved3; - unsigned long int __glibc_reserved4; -}; - -/* The user should define a union like the following to use it for arguments - for `semctl'. - - union semun - { - int val; <= value for SETVAL - struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET - unsigned short int *array; <= array for GETALL & SETALL - struct seminfo *__buf; <= buffer for IPC_INFO - }; - - Previous versions of this file used to define this union but this is - incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether - one must define the union or not. */ -#define _SEM_SEMUN_UNDEFINED 1 - -#ifdef __USE_MISC - -/* ipcs ctl cmds */ -# define SEM_STAT 18 -# define SEM_INFO 19 - -struct seminfo -{ - int semmap; - int semmni; - int semmns; - int semmnu; - int semmsl; - int semopm; - int semume; - int semusz; - int semvmx; - int semaem; -}; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/s390/bits/shm.h b/sysdeps/unix/sysv/linux/s390/bits/shm.h deleted file mode 100644 index 768b16929a..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/shm.h +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SHM_H -# error "Never include directly; use instead." -#endif - -#include -#include - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from */ -#define SHM_W 0200 /* or S_IWUGO from */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ -#define SHM_EXEC 0100000 /* execution access */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -__BEGIN_DECLS - -/* Segment low boundary address multiple. */ -#define SHMLBA (__getpagesize ()) -extern int __getpagesize (void) __THROW __attribute__ ((__const__)); - - -/* Type to count number of attaches. */ -typedef unsigned long int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ - size_t shm_segsz; /* size of segment in bytes */ - __time_t shm_atime; /* time of last shmat() */ -#if __WORDSIZE != 64 - unsigned long int __glibc_reserved1; -#endif - __time_t shm_dtime; /* time of last shmdt() */ -#if __WORDSIZE != 64 - unsigned long int __glibc_reserved2; -#endif - __time_t shm_ctime; /* time of last change by shmctl() */ -#if __WORDSIZE != 64 - unsigned long int __glibc_reserved3; -#endif - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - unsigned long int shmmax; - unsigned long int shmmin; - unsigned long int shmmni; - unsigned long int shmseg; - unsigned long int shmall; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - unsigned long int __glibc_reserved3; - unsigned long int __glibc_reserved4; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/s390/bits/sigaction.h b/sysdeps/unix/sysv/linux/s390/bits/sigaction.h deleted file mode 100644 index 9fc4ba41ca..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/sigaction.h +++ /dev/null @@ -1,112 +0,0 @@ -/* Definitions for 31 & 64 bit S/390 sigaction. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SIGNAL_H -# error "Never include directly; use instead." -#endif - -#include - -#if __WORDSIZE == 64 -/* Structure describing the action to be taken when a signal arrives. */ -struct sigaction - { - /* Signal handler. */ -#ifdef __USE_POSIX199309 - union - { - /* Used if SA_SIGINFO is not set. */ - __sighandler_t sa_handler; - /* Used if SA_SIGINFO is set. */ - void (*sa_sigaction) (int, siginfo_t *, void *); - } - __sigaction_handler; -# define sa_handler __sigaction_handler.sa_handler -# define sa_sigaction __sigaction_handler.sa_sigaction -#else - __sighandler_t sa_handler; -#endif - - /* Special flags. */ - int __glibc_reserved0; - int sa_flags; - - /* Restore handler. */ - void (*sa_restorer) (void); - - /* Additional set of signals to be blocked. */ - __sigset_t sa_mask; - }; -#else -/* Structure describing the action to be taken when a signal arrives. */ -struct sigaction - { - /* Signal handler. */ -#ifdef __USE_POSIX199309 - union - { - /* Used if SA_SIGINFO is not set. */ - __sighandler_t sa_handler; - /* Used if SA_SIGINFO is set. */ - void (*sa_sigaction) (int, siginfo_t *, void *); - } - __sigaction_handler; -# define sa_handler __sigaction_handler.sa_handler -# define sa_sigaction __sigaction_handler.sa_sigaction -#else - __sighandler_t sa_handler; -#endif - - /* Additional set of signals to be blocked. */ - __sigset_t sa_mask; - - /* Special flags. */ - int sa_flags; - - /* Restore handler. */ - void (*sa_restorer) (void); - }; -#endif - -/* Bits in `sa_flags'. */ -#define SA_NOCLDSTOP 1 /* Don't send SIGCHLD when children stop. */ -#define SA_NOCLDWAIT 2 /* Don't create zombie on child death. */ -#define SA_SIGINFO 4 /* Invoke signal-catching function with - three arguments instead of one. */ -#if defined __USE_UNIX98 || defined __USE_MISC -# define SA_ONSTACK 0x08000000 /* Use signal stack by using `sa_restorer'. */ -#endif -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 -# define SA_RESTART 0x10000000 /* Restart syscall on signal return. */ -# define SA_NODEFER 0x40000000 /* Don't automatically block the signal when - its handler is being executed. */ -# define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler. */ -#endif -#ifdef __USE_MISC -# define SA_INTERRUPT 0x20000000 /* Historical no-op. */ - -/* Some aliases for the SA_ constants. */ -# define SA_NOMASK SA_NODEFER -# define SA_ONESHOT SA_RESETHAND -# define SA_STACK SA_ONSTACK -#endif - -/* Values for the HOW argument to `sigprocmask'. */ -#define SIG_BLOCK 0 /* Block signals. */ -#define SIG_UNBLOCK 1 /* Unblock signals. */ -#define SIG_SETMASK 2 /* Set the set of blocked signals. */ diff --git a/sysdeps/unix/sysv/linux/s390/bits/stat.h b/sysdeps/unix/sysv/linux/s390/bits/stat.h deleted file mode 100644 index c13b697737..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/stat.h +++ /dev/null @@ -1,265 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STAT_H -#define _BITS_STAT_H 1 - -#include - -#if __WORDSIZE == 64 -/* Versions of the `struct stat' data structure. */ -# define _STAT_VER_KERNEL 0 -# define _STAT_VER_LINUX 1 -# define _STAT_VER _STAT_VER_LINUX - -/* Versions of the `xmknod' interface. */ -#define _MKNOD_VER_LINUX 0 -#else -/* Versions of the `struct stat' data structure. */ -# define _STAT_VER_LINUX_OLD 1 -# define _STAT_VER_KERNEL 1 -# define _STAT_VER_SVR4 2 -# define _STAT_VER_LINUX 3 -# define _STAT_VER _STAT_VER_LINUX - -/* Versions of the `xmknod' interface. */ -# define _MKNOD_VER_LINUX 1 -# define _MKNOD_VER_SVR4 2 -# define _MKNOD_VER _MKNOD_VER_LINUX -#endif - -#if __WORDSIZE == 64 -struct stat - { - __dev_t st_dev; /* Device. */ - __ino_t st_ino; /* File serial number. */ - __nlink_t st_nlink; /* Link count. */ - __mode_t st_mode; /* File mode. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - int __glibc_reserved0; - __dev_t st_rdev; /* Device number, if device. */ - __off_t st_size; /* Size of file, in bytes. */ -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - __blkcnt_t st_blocks; /* Nr. 512-byte blocks allocated. */ - long int __glibc_reserved[3]; - }; -#else -struct stat - { - __dev_t st_dev; /* Device. */ - unsigned int __pad1; -# ifndef __USE_FILE_OFFSET64 - __ino_t st_ino; /* File serial number. */ -# else - __ino_t __st_ino; /* 32bit file serial number. */ -# endif - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - unsigned int __pad2; -# ifndef __USE_FILE_OFFSET64 - __off_t st_size; /* Size of file, in bytes. */ -# else - __off64_t st_size; /* Size of file, in bytes. */ -# endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - -# ifndef __USE_FILE_OFFSET64 - __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */ -# else - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -# endif -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif -# ifndef __USE_FILE_OFFSET64 - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; -# else - __ino64_t st_ino; /* File serial number. */ -# endif - }; -#endif - -#ifdef __USE_LARGEFILE64 -# if __WORDSIZE == 64 -/* Note stat64 is the same shape as stat. */ -struct stat64 - { - __dev_t st_dev; /* Device. */ - __ino64_t st_ino; /* File serial number. */ - __nlink_t st_nlink; /* Link count. */ - __mode_t st_mode; /* File mode. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - int __glibc_reserved0; - __dev_t st_rdev; /* Device number, if device. */ - __off_t st_size; /* Size of file, in bytes. */ -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ - long int __glibc_reserved[3]; - }; -# else -struct stat64 - { - __dev_t st_dev; /* Device. */ - unsigned int __pad1; - - __ino_t __st_ino; /* 32bit file serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - unsigned int __pad2; - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - __ino64_t st_ino; /* File serial number. */ - }; -# endif -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -/* Nanosecond resolution time values are supported. */ -#define _STATBUF_ST_NSEC - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFIFO 0010000 /* FIFO. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ - -/* POSIX.1b objects. Note that these macros always evaluate to zero. But - they do it by enforcing the correct use of the macros. */ -#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 0400 /* Read by owner. */ -#define __S_IWRITE 0200 /* Write by owner. */ -#define __S_IEXEC 0100 /* Execute by owner. */ - -#ifdef __USE_ATFILE -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) -#endif - -#endif /* bits/stat.h */ diff --git a/sysdeps/unix/sysv/linux/s390/bits/statfs.h b/sysdeps/unix/sysv/linux/s390/bits/statfs.h deleted file mode 100644 index 4413da4f57..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/statfs.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_STATFS_H -# error "Never include directly; use instead." -#endif - -#include /* for __fsid_t and __fsblkcnt_t. */ - -struct statfs - { - unsigned int f_type; - unsigned int f_bsize; -#ifndef __USE_FILE_OFFSET64 - __fsblkcnt_t f_blocks; - __fsblkcnt_t f_bfree; - __fsblkcnt_t f_bavail; - __fsfilcnt_t f_files; - __fsfilcnt_t f_ffree; -#else - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; -#endif - __fsid_t f_fsid; - unsigned int f_namelen; - unsigned int f_frsize; - unsigned int f_flags; - unsigned int f_spare[4]; - }; - -#ifdef __USE_LARGEFILE64 -struct statfs64 - { - unsigned int f_type; - unsigned int f_bsize; - __fsblkcnt64_t f_blocks; - __fsblkcnt64_t f_bfree; - __fsblkcnt64_t f_bavail; - __fsfilcnt64_t f_files; - __fsfilcnt64_t f_ffree; - __fsid_t f_fsid; - unsigned int f_namelen; - unsigned int f_frsize; - unsigned int f_flags; - unsigned int f_spare[4]; - }; -#endif - -/* Tell code we have this member. */ -#define _STATFS_F_NAMELEN -#define _STATFS_F_FRSIZE -#define _STATFS_F_FLAGS diff --git a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h deleted file mode 100644 index 566849c8ec..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h +++ /dev/null @@ -1,89 +0,0 @@ -/* bits/typesizes.h -- underlying types for *_t. Linux/s390 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_TYPES_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_TYPESIZES_H -#define _BITS_TYPESIZES_H 1 - -/* See for the meaning of these macros. This file exists so - that need not vary across different GNU platforms. */ - -#define __DEV_T_TYPE __UQUAD_TYPE -#define __UID_T_TYPE __U32_TYPE -#define __GID_T_TYPE __U32_TYPE -#define __INO_T_TYPE __ULONGWORD_TYPE -#define __INO64_T_TYPE __UQUAD_TYPE -#define __MODE_T_TYPE __U32_TYPE -#define __NLINK_T_TYPE __UWORD_TYPE -#define __OFF_T_TYPE __SLONGWORD_TYPE -#define __OFF64_T_TYPE __SQUAD_TYPE -#define __PID_T_TYPE __S32_TYPE -#define __RLIM_T_TYPE __ULONGWORD_TYPE -#define __RLIM64_T_TYPE __UQUAD_TYPE -#define __BLKCNT_T_TYPE __SLONGWORD_TYPE -#define __BLKCNT64_T_TYPE __SQUAD_TYPE -#define __FSBLKCNT_T_TYPE __ULONGWORD_TYPE -#define __FSBLKCNT64_T_TYPE __UQUAD_TYPE -#define __FSFILCNT_T_TYPE __ULONGWORD_TYPE -#define __FSFILCNT64_T_TYPE __UQUAD_TYPE -#define __FSWORD_T_TYPE __SWORD_TYPE -#define __ID_T_TYPE __U32_TYPE -#define __CLOCK_T_TYPE __SLONGWORD_TYPE -#define __TIME_T_TYPE __SLONGWORD_TYPE -#define __USECONDS_T_TYPE __U32_TYPE -#define __SUSECONDS_T_TYPE __SLONGWORD_TYPE -#define __DADDR_T_TYPE __S32_TYPE -#define __KEY_T_TYPE __S32_TYPE -#define __CLOCKID_T_TYPE __S32_TYPE -#define __TIMER_T_TYPE void * -#define __BLKSIZE_T_TYPE __SLONGWORD_TYPE -#define __FSID_T_TYPE struct { int __val[2]; } -#if defined __GNUC__ && __GNUC__ <= 2 -/* Compatibility with g++ 2.95.x. */ -#define __SSIZE_T_TYPE __SWORD_TYPE -#else -/* size_t is unsigned long int on s390 -m31. */ -#define __SSIZE_T_TYPE __SLONGWORD_TYPE -#endif -#define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE -#define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE -#define __CPU_MASK_TYPE __ULONGWORD_TYPE - -#ifdef __s390x__ -/* Tell the libc code that off_t and off64_t are actually the same type - for all ABI purposes, even if possibly expressed as different base types - for C type-checking purposes. */ -# define __OFF_T_MATCHES_OFF64_T 1 - -/* Same for ino_t and ino64_t. */ -# define __INO_T_MATCHES_INO64_T 1 - -/* And for __rlim_t and __rlim64_t. */ -# define __RLIM_T_MATCHES_RLIM64_T 1 -#else -# define __RLIM_T_MATCHES_RLIM64_T 0 -#endif - -/* Number of descriptors that can fit in an `fd_set'. */ -#define __FD_SETSIZE 1024 - - -#endif /* bits/typesizes.h */ diff --git a/sysdeps/unix/sysv/linux/s390/bits/utmp.h b/sysdeps/unix/sysv/linux/s390/bits/utmp.h deleted file mode 100644 index 36114c3b0e..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/utmp.h +++ /dev/null @@ -1,123 +0,0 @@ -/* The `struct utmp' type, describing entries in the utmp file. GNU version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _UTMP_H -# error "Never include directly; use instead." -#endif - -#include -#include -#include -#include - - -#define UT_LINESIZE 32 -#define UT_NAMESIZE 32 -#define UT_HOSTSIZE 256 - - -/* The structure describing an entry in the database of - previous logins. */ -struct lastlog - { -#if __WORDSIZE == 32 - int64_t ll_time; -#else - __time_t ll_time; -#endif - char ll_line[UT_LINESIZE]; - char ll_host[UT_HOSTSIZE]; - }; - - -/* The structure describing the status of a terminated process. This - type is used in `struct utmp' below. */ -struct exit_status - { - short int e_termination; /* Process termination status. */ - short int e_exit; /* Process exit status. */ - }; - - -/* The structure describing an entry in the user accounting database. */ -struct utmp -{ - short int ut_type; /* Type of login. */ - pid_t ut_pid; /* Process ID of login process. */ - char ut_line[UT_LINESIZE]; /* Devicename. */ - char ut_id[4]; /* Inittab ID. */ - char ut_user[UT_NAMESIZE]; /* Username. */ - char ut_host[UT_HOSTSIZE]; /* Hostname for remote login. */ - struct exit_status ut_exit; /* Exit status of a process marked - as DEAD_PROCESS. */ -/* The ut_session and ut_tv fields must be the same size when compiled - 32- and 64-bit. This allows data files and shared memory to be - shared between 32- and 64-bit applications. */ -#if __WORDSIZE == 32 - int64_t ut_session; /* Session ID, used for windowing. */ - struct - { - int64_t tv_sec; /* Seconds. */ - int64_t tv_usec; /* Microseconds. */ - } ut_tv; /* Time entry was made. */ -#else - long int ut_session; /* Session ID, used for windowing. */ - struct timeval ut_tv; /* Time entry was made. */ -#endif - - int32_t ut_addr_v6[4]; /* Internet address of remote host. */ - char __glibc_reserved[20]; /* Reserved for future use. */ -}; - -/* Backwards compatibility hacks. */ -#define ut_name ut_user -#ifndef _NO_UT_TIME -/* We have a problem here: `ut_time' is also used otherwise. Define - _NO_UT_TIME if the compiler complains. */ -# define ut_time ut_tv.tv_sec -#endif -#define ut_xtime ut_tv.tv_sec -#define ut_addr ut_addr_v6[0] - - -/* Values for the `ut_type' field of a `struct utmp'. */ -#define EMPTY 0 /* No valid user accounting information. */ - -#define RUN_LVL 1 /* The system's runlevel. */ -#define BOOT_TIME 2 /* Time of system boot. */ -#define NEW_TIME 3 /* Time after system clock changed. */ -#define OLD_TIME 4 /* Time when system clock changed. */ - -#define INIT_PROCESS 5 /* Process spawned by the init process. */ -#define LOGIN_PROCESS 6 /* Session leader of a logged in user. */ -#define USER_PROCESS 7 /* Normal process. */ -#define DEAD_PROCESS 8 /* Terminated process. */ - -#define ACCOUNTING 9 - -/* Old Linux name for the EMPTY type. */ -#define UT_UNKNOWN EMPTY - - -/* Tell the user that we have a modern system with UT_HOST, UT_PID, - UT_TYPE, UT_ID and UT_TV fields. */ -#define _HAVE_UT_TYPE 1 -#define _HAVE_UT_PID 1 -#define _HAVE_UT_ID 1 -#define _HAVE_UT_TV 1 -#define _HAVE_UT_HOST 1 diff --git a/sysdeps/unix/sysv/linux/s390/bits/utmpx.h b/sysdeps/unix/sysv/linux/s390/bits/utmpx.h deleted file mode 100644 index 5850c1ec63..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/utmpx.h +++ /dev/null @@ -1,102 +0,0 @@ -/* Structures and definitions for the user accounting database. GNU version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _UTMPX_H -# error "Never include directly; use instead." -#endif - -#include -#include -#include - - -#ifdef __USE_GNU -# include -# define _PATH_UTMPX _PATH_UTMP -# define _PATH_WTMPX _PATH_WTMP -#endif - - -#define __UT_LINESIZE 32 -#define __UT_NAMESIZE 32 -#define __UT_HOSTSIZE 256 - - -/* The structure describing the status of a terminated process. This - type is used in `struct utmpx' below. */ -struct __exit_status - { -#ifdef __USE_GNU - short int e_termination; /* Process termination status. */ - short int e_exit; /* Process exit status. */ -#else - short int __e_termination; /* Process termination status. */ - short int __e_exit; /* Process exit status. */ -#endif - }; - - -/* The structure describing an entry in the user accounting database. */ -struct utmpx -{ - short int ut_type; /* Type of login. */ - __pid_t ut_pid; /* Process ID of login process. */ - char ut_line[__UT_LINESIZE]; /* Devicename. */ - char ut_id[4]; /* Inittab ID. */ - char ut_user[__UT_NAMESIZE]; /* Username. */ - char ut_host[__UT_HOSTSIZE]; /* Hostname for remote login. */ - struct __exit_status ut_exit; /* Exit status of a process marked - as DEAD_PROCESS. */ - -/* The fields ut_session and ut_tv must be the same size when compiled - 32- and 64-bit. This allows files and shared memory to be shared - between 32- and 64-bit applications. */ -#if __WORDSIZE == 32 - __int64_t ut_session; /* Session ID, used for windowing. */ - struct - { - __int64_t tv_sec; /* Seconds. */ - __int64_t tv_usec; /* Microseconds. */ - } ut_tv; /* Time entry was made. */ -#else - long int ut_session; /* Session ID, used for windowing. */ - struct timeval ut_tv; /* Time entry was made. */ -#endif - __int32_t ut_addr_v6[4]; /* Internet address of remote host. */ - char __glibc_reserved[20]; /* Reserved for future use. */ -}; - - -/* Values for the `ut_type' field of a `struct utmpx'. */ -#define EMPTY 0 /* No valid user accounting information. */ - -#ifdef __USE_GNU -# define RUN_LVL 1 /* The system's runlevel. */ -#endif -#define BOOT_TIME 2 /* Time of system boot. */ -#define NEW_TIME 3 /* Time after system clock changed. */ -#define OLD_TIME 4 /* Time when system clock changed. */ - -#define INIT_PROCESS 5 /* Process spawned by the init process. */ -#define LOGIN_PROCESS 6 /* Session leader of a logged in user. */ -#define USER_PROCESS 7 /* Normal process. */ -#define DEAD_PROCESS 8 /* Terminated process. */ - -#ifdef __USE_GNU -# define ACCOUNTING 9 /* System accounting. */ -#endif diff --git a/sysdeps/unix/sysv/linux/s390/brk.c b/sysdeps/unix/sysv/linux/s390/brk.c deleted file mode 100644 index 2e5ad701ff..0000000000 --- a/sysdeps/unix/sysv/linux/s390/brk.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -void *__curbrk = 0; - -/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt - to work around different old braindamage in the old Linux/x86 ELF - dynamic linker. Sigh. */ -weak_alias (__curbrk, ___brk_addr) - -int -__brk (void *addr) -{ - void *newbrk; - - { - register void *__addr __asm__("2") = addr; - - __asm__ ("svc %b1\n\t" /* call sys_brk */ - : "=d" (__addr) - : "I" (SYS_ify(brk)), "r" (__addr) - : "cc", "memory" ); - newbrk = __addr; - } - __curbrk = newbrk; - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/s390/configure b/sysdeps/unix/sysv/linux/s390/configure deleted file mode 100644 index 1d735d7b9c..0000000000 --- a/sysdeps/unix/sysv/linux/s390/configure +++ /dev/null @@ -1,5 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/s390. - -libc_cv_gcc_unwind_find_fde=yes -ldd_rewrite_script=sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/s390/configure.ac b/sysdeps/unix/sysv/linux/s390/configure.ac deleted file mode 100644 index 978450c94b..0000000000 --- a/sysdeps/unix/sysv/linux/s390/configure.ac +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/s390. - -libc_cv_gcc_unwind_find_fde=yes -ldd_rewrite_script=sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/s390/dl-cache.h b/sysdeps/unix/sysv/linux/s390/dl-cache.h deleted file mode 100644 index 766bba4265..0000000000 --- a/sysdeps/unix/sysv/linux/s390/dl-cache.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/dl-procinfo.h b/sysdeps/unix/sysv/linux/s390/dl-procinfo.h deleted file mode 100644 index 7cbce0a043..0000000000 --- a/sysdeps/unix/sysv/linux/s390/dl-procinfo.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Linux/s390 version of processor capability information handling macros. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky , 2006. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_S390_PROCINFO_H -#define _DL_S390_PROCINFO_H 1 -#include -#include - - -#undef _dl_procinfo -static inline int -__attribute__ ((unused)) -_dl_procinfo (unsigned int type, unsigned long int word) -{ - /* This table should match the information from arch/s390/kernel/setup.c - in the kernel sources. */ - int i; - - /* Fallback to unknown output mechanism. */ - if (type == AT_HWCAP2) - return -1; - - _dl_printf ("AT_HWCAP: "); - - for (i = 0; i < _DL_HWCAP_COUNT; ++i) - if (word & (1UL << i)) - _dl_printf (" %s", GLRO(dl_s390_cap_flags)[i]); - - _dl_printf ("\n"); - - return 0; -} -#endif diff --git a/sysdeps/unix/sysv/linux/s390/elision-conf.c b/sysdeps/unix/sysv/linux/s390/elision-conf.c deleted file mode 100644 index cc0fdef2aa..0000000000 --- a/sysdeps/unix/sysv/linux/s390/elision-conf.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Lock elision tunable parameters. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Reasonable initial tuning values, may be revised in the future. - This is a conservative initial value. */ - -struct elision_config __elision_aconf = - { - /* How often to not attempt to use elision if a transaction aborted - because the lock is already acquired. Expressed in number of lock - acquisition attempts. */ - .skip_lock_busy = 3, - /* How often to not attempt to use elision if a transaction aborted due - to reasons other than other threads' memory accesses. Expressed in - number of lock acquisition attempts. */ - .skip_lock_internal_abort = 3, - /* How often to not attempt to use elision if a lock used up all retries - without success. Expressed in number of lock acquisition attempts. */ - .skip_lock_out_of_tbegin_retries = 3, - /* How often we try using elision if there is chance for the transaction - to finish execution (e.g., it wasn't aborted due to the lock being - already acquired. */ - .try_tbegin = 3, - /* Same as SKIP_LOCK_INTERNAL_ABORT but for trylock. */ - .skip_trylock_internal_abort = 3, - }; - -/* Force elision for all new locks. This is used to decide whether existing - DEFAULT locks should be automatically upgraded to elision in - pthread_mutex_lock(). Disabled for suid programs. Only used when elision - is available. */ - -int __pthread_force_elision attribute_hidden = 0; - -/* Initialize elison. */ - -static void -elision_init (int argc __attribute__ ((unused)), - char **argv __attribute__ ((unused)), - char **environ) -{ - /* Set when the CPU and the kernel supports transactional execution. - When false elision is never attempted. */ - int elision_available = (GLRO (dl_hwcap) & HWCAP_S390_TE) ? 1 : 0; - - __pthread_force_elision = __libc_enable_secure ? 0 : elision_available; -} - -#ifdef SHARED -# define INIT_SECTION ".init_array" -# define MAYBE_CONST -#else -# define INIT_SECTION ".preinit_array" -# define MAYBE_CONST const -#endif - -void (*MAYBE_CONST __pthread_init_array []) (int, char **, char **) - __attribute__ ((section (INIT_SECTION), aligned (sizeof (void *)))) = -{ - &elision_init -}; diff --git a/sysdeps/unix/sysv/linux/s390/elision-conf.h b/sysdeps/unix/sysv/linux/s390/elision-conf.h deleted file mode 100644 index 3143f3b114..0000000000 --- a/sysdeps/unix/sysv/linux/s390/elision-conf.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Lock elision tunable parameters. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ -#ifdef ENABLE_LOCK_ELISION -#ifndef _ELISION_CONF_H -#define _ELISION_CONF_H 1 - -#include -#include - -/* Should make sure there is no false sharing on this. */ - -struct elision_config -{ - int skip_lock_busy; - int skip_lock_internal_abort; - int skip_lock_out_of_tbegin_retries; - int try_tbegin; - int skip_trylock_internal_abort; -}; - -extern struct elision_config __elision_aconf attribute_hidden; - -extern int __pthread_force_elision attribute_hidden; - -/* Tell the test suite to test elision for this architecture. */ -#define HAVE_ELISION 1 - -#endif -#endif diff --git a/sysdeps/unix/sysv/linux/s390/elision-lock.c b/sysdeps/unix/sysv/linux/s390/elision-lock.c deleted file mode 100644 index 00815375c7..0000000000 --- a/sysdeps/unix/sysv/linux/s390/elision-lock.c +++ /dev/null @@ -1,125 +0,0 @@ -/* Elided pthread mutex lock. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -#if !defined(LLL_LOCK) && !defined(EXTRAARG) -/* Make sure the configuration code is always linked in for static - libraries. */ -#include "elision-conf.c" -#endif - -#ifndef EXTRAARG -#define EXTRAARG -#endif -#ifndef LLL_LOCK -#define LLL_LOCK(a,b) lll_lock(a,b), 0 -#endif - -#define aconf __elision_aconf - -/* Adaptive lock using transactions. - By default the lock region is run as a transaction, and when it - aborts or the lock is busy the lock adapts itself. */ - -int -__lll_lock_elision (int *futex, short *adapt_count, EXTRAARG int private) -{ - /* adapt_count can be accessed concurrently; these accesses can be both - inside of transactions (if critical sections are nested and the outer - critical section uses lock elision) and outside of transactions. Thus, - we need to use atomic accesses to avoid data races. However, the - value of adapt_count is just a hint, so relaxed MO accesses are - sufficient. */ - if (atomic_load_relaxed (adapt_count) <= 0 && aconf.try_tbegin > 0) - { - /* Start a transaction and retry it automatically if it aborts with - _HTM_TBEGIN_TRANSIENT. This macro calls tbegin at most retry_cnt - + 1 times. The second argument is considered as retry_cnt. */ - int status = __libc_tbegin_retry ((void *) 0, aconf.try_tbegin - 1); - if (__glibc_likely (status == _HTM_TBEGIN_STARTED)) - { - /* Check the futex to make sure nobody has touched it in the - mean time. This forces the futex into the cache and makes - sure the transaction aborts if another thread acquires the lock - concurrently. */ - if (__glibc_likely (atomic_load_relaxed (futex) == 0)) - /* Lock was free. Return to user code in a transaction. */ - return 0; - - /* Lock was busy. Fall back to normal locking. - This can be the case if e.g. adapt_count was decremented to zero - by a former release and another thread has been waken up and - acquired it. */ - if (__glibc_likely (__libc_tx_nesting_depth () <= 1)) - { - /* In a non-nested transaction there is no need to abort, - which is expensive. Simply end the started transaction. */ - __libc_tend (); - /* Don't try to use transactions for the next couple of times. - See above for why relaxed MO is sufficient. */ - if (aconf.skip_lock_busy > 0) - atomic_store_relaxed (adapt_count, aconf.skip_lock_busy); - } - else /* nesting depth is > 1 */ - { - /* A nested transaction will abort eventually because it - cannot make any progress before *futex changes back to 0. - So we may as well abort immediately. - This persistently aborts the outer transaction to force - the outer mutex use the default lock instead of retrying - with transactions until the try_tbegin of the outer mutex - is zero. - The adapt_count of this inner mutex is not changed, - because using the default lock with the inner mutex - would abort the outer transaction. */ - __libc_tabort (_HTM_FIRST_USER_ABORT_CODE | 1); - __builtin_unreachable (); - } - } - else if (status != _HTM_TBEGIN_TRANSIENT) - { - /* A persistent abort (cc 1 or 3) indicates that a retry is - probably futile. Use the normal locking now and for the - next couple of calls. - Be careful to avoid writing to the lock. See above for why - relaxed MO is sufficient. */ - if (aconf.skip_lock_internal_abort > 0) - atomic_store_relaxed (adapt_count, - aconf.skip_lock_internal_abort); - } - else - { - /* The transaction failed for some retries with - _HTM_TBEGIN_TRANSIENT. Use the normal locking now and for the - next couple of calls. */ - if (aconf.skip_lock_out_of_tbegin_retries > 0) - atomic_store_relaxed (adapt_count, - aconf.skip_lock_out_of_tbegin_retries); - } - } - - /* Use normal locking as fallback path if the transaction does not - succeed. */ - return LLL_LOCK ((*futex), private); -} diff --git a/sysdeps/unix/sysv/linux/s390/elision-timed.c b/sysdeps/unix/sysv/linux/s390/elision-timed.c deleted file mode 100644 index 8096ca14ad..0000000000 --- a/sysdeps/unix/sysv/linux/s390/elision-timed.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Lock elision timed lock. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#define __lll_lock_elision __lll_timedlock_elision -#define EXTRAARG const struct timespec *t, -#undef LLL_LOCK -#define LLL_LOCK(a, b) lll_timedlock(a, t, b) -#include "elision-lock.c" diff --git a/sysdeps/unix/sysv/linux/s390/elision-trylock.c b/sysdeps/unix/sysv/linux/s390/elision-trylock.c deleted file mode 100644 index aa09073324..0000000000 --- a/sysdeps/unix/sysv/linux/s390/elision-trylock.c +++ /dev/null @@ -1,97 +0,0 @@ -/* Elided pthread mutex trylock. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#define aconf __elision_aconf - -/* Try to elide a futex trylock. FUTEX is the futex variable. ADAPT_COUNT is - the adaptation counter in the mutex. */ - -int -__lll_trylock_elision (int *futex, short *adapt_count) -{ - /* Implement POSIX semantics by forbiding nesting elided trylocks. - Sorry. After the abort the code is re-executed - non transactional and if the lock was already locked - return an error. */ - if (__libc_tx_nesting_depth () > 0) - { - /* Note that this abort may terminate an outermost transaction that - was created outside glibc. - This persistently aborts the current transactions to force - them to use the default lock instead of retrying transactions - until their try_tbegin is zero. - */ - __libc_tabort (_HTM_FIRST_USER_ABORT_CODE | 1); - __builtin_unreachable (); - } - - /* adapt_count can be accessed concurrently; these accesses can be both - inside of transactions (if critical sections are nested and the outer - critical section uses lock elision) and outside of transactions. Thus, - we need to use atomic accesses to avoid data races. However, the - value of adapt_count is just a hint, so relaxed MO accesses are - sufficient. */ - if (atomic_load_relaxed (adapt_count) <= 0 && aconf.try_tbegin > 0) - { - int status = __libc_tbegin ((void *) 0); - if (__glibc_likely (status == _HTM_TBEGIN_STARTED)) - { - /* Check the futex to make sure nobody has touched it in the - mean time. This forces the futex into the cache and makes - sure the transaction aborts if another thread acquires the lock - concurrently. */ - if (__glibc_likely (atomic_load_relaxed (futex) == 0)) - /* Lock was free. Return to user code in a transaction. */ - return 0; - - /* Lock was busy. Fall back to normal locking. - This can be the case if e.g. adapt_count was decremented to zero - by a former release and another thread has been waken up and - acquired it. - Since we are in a non-nested transaction there is no need to abort, - which is expensive. Simply end the started transaction. */ - __libc_tend (); - /* Note: Changing the adapt_count here might abort a transaction on a - different CPU, but that could happen anyway when the futex is - acquired, so there's no need to check the nesting depth here. - See above for why relaxed MO is sufficient. */ - if (aconf.skip_lock_busy > 0) - atomic_store_relaxed (adapt_count, aconf.skip_lock_busy); - } - else if (status != _HTM_TBEGIN_TRANSIENT) - { - /* A persistent abort (cc 1 or 3) indicates that a retry is - probably futile. Use the normal locking now and for the - next couple of calls. - Be careful to avoid writing to the lock. */ - if (aconf.skip_trylock_internal_abort > 0) - *adapt_count = aconf.skip_trylock_internal_abort; - } - /* Could do some retries here. */ - } - - /* Use normal locking as fallback path if the transaction does not - succeed. */ - return lll_trylock (*futex); -} diff --git a/sysdeps/unix/sysv/linux/s390/elision-unlock.c b/sysdeps/unix/sysv/linux/s390/elision-unlock.c deleted file mode 100644 index c062d71b77..0000000000 --- a/sysdeps/unix/sysv/linux/s390/elision-unlock.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Commit an elided pthread lock. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__lll_unlock_elision(int *futex, short *adapt_count, int private) -{ - /* If the lock is free, we elided the lock earlier. This does not - necessarily mean that we are in a transaction, because the user code may - have closed the transaction, but that is impossible to detect reliably. - Relaxed MO access to futex is sufficient because a correct program - will only release a lock it has acquired; therefore, it must either - changed the futex word's value to something !=0 or it must have used - elision; these are actions by the same thread, so these actions are - sequenced-before the relaxed load (and thus also happens-before the - relaxed load). Therefore, relaxed MO is sufficient. */ - if (atomic_load_relaxed (futex) == 0) - { - __libc_tend (); - } - else - { - /* Update the adapt_count while unlocking before completing the critical - section. adapt_count is accessed concurrently outside of a - transaction or a critical section (e.g. in elision-lock.c). So we need - to use atomic accesses. However, the value of adapt_count is just a - hint, so relaxed MO accesses are sufficient. - If adapt_count would be decremented while locking, multiple - CPUs, trying to lock the acquired mutex, will decrement adapt_count to - zero and another CPU will try to start a transaction, which will be - immediately aborted as the mutex is locked. - The update of adapt_count is done before releasing the lock as POSIX' - mutex destruction requirements disallow accesses to the mutex after it - has been released and thus could have been acquired or destroyed by - another thread. */ - short adapt_count_val = atomic_load_relaxed (adapt_count); - if (adapt_count_val > 0) - atomic_store_relaxed (adapt_count, adapt_count_val - 1); - - lll_unlock ((*futex), private); - } - return 0; -} diff --git a/sysdeps/unix/sysv/linux/s390/force-elision.h b/sysdeps/unix/sysv/linux/s390/force-elision.h deleted file mode 100644 index 3ae3bcd566..0000000000 --- a/sysdeps/unix/sysv/linux/s390/force-elision.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Automatic enabling of elision for mutexes - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef ENABLE_LOCK_ELISION -/* Automatically enable elision for existing user lock kinds. */ -#define FORCE_ELISION(m, s) \ - if (__pthread_force_elision \ - && (m->__data.__kind & PTHREAD_MUTEX_ELISION_FLAGS_NP) == 0) \ - { \ - mutex->__data.__kind |= PTHREAD_MUTEX_ELISION_NP; \ - s; \ - } -#endif diff --git a/sysdeps/unix/sysv/linux/s390/fpu/Implies b/sysdeps/unix/sysv/linux/s390/fpu/Implies deleted file mode 100644 index 3a8e225986..0000000000 --- a/sysdeps/unix/sysv/linux/s390/fpu/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# Override ldbl-opt with s390 specific routines. -s390/fpu diff --git a/sysdeps/unix/sysv/linux/s390/fpu/s_fma.c b/sysdeps/unix/sysv/linux/s390/fpu/s_fma.c deleted file mode 100644 index 2b2d505030..0000000000 --- a/sysdeps/unix/sysv/linux/s390/fpu/s_fma.c +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include -#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -compat_symbol (libm, __fma, fmal, GLIBC_2_1); -#endif diff --git a/sysdeps/unix/sysv/linux/s390/htm.h b/sysdeps/unix/sysv/linux/s390/htm.h deleted file mode 100644 index 70d7f66000..0000000000 --- a/sysdeps/unix/sysv/linux/s390/htm.h +++ /dev/null @@ -1,187 +0,0 @@ -/* Shared HTM header. Work around false transactional execution facility - intrinsics. - - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _HTM_H -#define _HTM_H 1 - -#include - -#ifdef __s390x__ -# define TX_FPRS_BYTES 64 -# define TX_SAVE_FPRS \ - " std %%f8, 0(%[R_FPRS])\n\t" \ - " std %%f9, 8(%[R_FPRS])\n\t" \ - " std %%f10, 16(%[R_FPRS])\n\t" \ - " std %%f11, 24(%[R_FPRS])\n\t" \ - " std %%f12, 32(%[R_FPRS])\n\t" \ - " std %%f13, 40(%[R_FPRS])\n\t" \ - " std %%f14, 48(%[R_FPRS])\n\t" \ - " std %%f15, 56(%[R_FPRS])\n\t" - -# define TX_RESTORE_FPRS \ - " ld %%f8, 0(%[R_FPRS])\n\t" \ - " ld %%f9, 8(%[R_FPRS])\n\t" \ - " ld %%f10, 16(%[R_FPRS])\n\t" \ - " ld %%f11, 24(%[R_FPRS])\n\t" \ - " ld %%f12, 32(%[R_FPRS])\n\t" \ - " ld %%f13, 40(%[R_FPRS])\n\t" \ - " ld %%f14, 48(%[R_FPRS])\n\t" \ - " ld %%f15, 56(%[R_FPRS])\n\t" - -#else - -# define TX_FPRS_BYTES 16 -# define TX_SAVE_FPRS \ - " std %%f4, 0(%[R_FPRS])\n\t" \ - " std %%f6, 8(%[R_FPRS])\n\t" - -# define TX_RESTORE_FPRS \ - " ld %%f4, 0(%[R_FPRS])\n\t" \ - " ld %%f6, 8(%[R_FPRS])\n\t" - -#endif /* ! __s390x__ */ - -/* Use own inline assembly instead of __builtin_tbegin, as tbegin - has to filter program interruptions which can't be done with the builtin. - Now the fprs have to be saved / restored here, too. - The fpc is also not saved / restored with the builtin. - The used inline assembly does not clobber the volatile fprs / vrs! - Clobbering the latter ones would force the compiler to save / restore - the call saved fprs as those overlap with the vrs, but they only need to be - restored if the transaction fails but not if the transaction is successfully - started. Thus the user of the tbegin macros in this header file has to - compile the file / function with -msoft-float. It prevents gcc from using - fprs / vrs. */ -#define __libc_tbegin(tdb) __libc_tbegin_base(tdb,,,) - -#define __libc_tbegin_retry_output_regs , [R_TX_CNT] "+&d" (__tx_cnt) -#define __libc_tbegin_retry_input_regs(retry_cnt) , [R_RETRY] "d" (retry_cnt) -#define __libc_tbegin_retry_abort_path_insn \ - /* If tbegin returned _HTM_TBEGIN_TRANSIENT, retry immediately so \ - that max tbegin_cnt transactions are tried. Otherwise return and \ - let the caller of this macro do the fallback path. */ \ - " jnh 1f\n\t" /* cc 1/3: jump to fallback path. */ \ - /* tbegin returned _HTM_TBEGIN_TRANSIENT: retry with transaction. */ \ - " crje %[R_TX_CNT], %[R_RETRY], 1f\n\t" /* Reached max retries? */ \ - " ahi %[R_TX_CNT], 1\n\t" \ - " ppa %[R_TX_CNT], 0, 1\n\t" /* Transaction-Abort Assist. */ \ - " j 2b\n\t" /* Loop to tbegin. */ - -/* Same as __libc_tbegin except if tbegin aborts with _HTM_TBEGIN_TRANSIENT. - Then this macros restores the fpc, fprs and automatically retries up to - retry_cnt tbegins. Further saving of the state is omitted as it is already - saved. This macro calls tbegin at most as retry_cnt + 1 times. */ -#define __libc_tbegin_retry(tdb, retry_cnt) \ - ({ int __ret; \ - int __tx_cnt = 0; \ - __ret = __libc_tbegin_base(tdb, \ - __libc_tbegin_retry_abort_path_insn, \ - __libc_tbegin_retry_output_regs, \ - __libc_tbegin_retry_input_regs(retry_cnt)); \ - __ret; \ - }) - -#define __libc_tbegin_base(tdb, abort_path_insn, output_regs, input_regs) \ - ({ int __ret; \ - int __fpc; \ - char __fprs[TX_FPRS_BYTES]; \ - __asm__ __volatile__ (".machine push\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - ".machine \"all\"\n\t" \ - /* Save state at the outermost transaction. \ - As extracting nesting depth is expensive \ - on at least zEC12, save fprs at inner \ - transactions, too. \ - The fpc and fprs are saved here as they \ - are not saved by tbegin. There exist no \ - call-saved vrs, thus they are not saved \ - here. */ \ - " efpc %[R_FPC]\n\t" \ - TX_SAVE_FPRS \ - /* Begin transaction: save all gprs, allow \ - ar modification and fp operations. Some \ - program-interruptions (e.g. a null \ - pointer access) are filtered and the \ - transaction will abort. In this case \ - the normal lock path will execute it \ - again and result in a core dump wich does \ - now show at tbegin but the real executed \ - instruction. \ - However it is not guaranteed that this \ - retry operate on the same data and thus \ - may not end in an program-interruption. \ - Note: This could also be used to probe \ - memory for being accessible! */ \ - "2: tbegin 0, 0xFF0E\n\t" \ - /* Branch away in abort case (this is the \ - prefered sequence. See PoP in chapter 5 \ - Transactional-Execution Facility \ - Operation). */ \ - " jnz 0f\n\t" \ - /* Transaction has successfully started. */ \ - " lhi %[R_RET], 0\n\t" \ - " j 1f\n\t" \ - /* Transaction has aborted. Now we are at \ - the outermost transaction. Restore fprs \ - and fpc. */ \ - "0: ipm %[R_RET]\n\t" \ - " srl %[R_RET], 28\n\t" \ - " sfpc %[R_FPC]\n\t" \ - TX_RESTORE_FPRS \ - abort_path_insn \ - "1:\n\t" \ - ".machine pop\n" \ - : [R_RET] "=&d" (__ret), \ - [R_FPC] "=&d" (__fpc) \ - output_regs \ - : [R_FPRS] "a" (__fprs) \ - input_regs \ - : "cc", "memory"); \ - __ret; \ - }) - -/* These builtins are usable in context of glibc lock elision code without any - changes. Use them. */ -#define __libc_tend() \ - ({ __asm__ __volatile__ (".machine push\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - ".machine \"all\"\n\t"); \ - int __ret = __builtin_tend (); \ - __asm__ __volatile__ (".machine pop"); \ - __ret; \ - }) - -#define __libc_tabort(abortcode) \ - __asm__ __volatile__ (".machine push\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - ".machine \"all\"\n\t"); \ - __builtin_tabort (abortcode); \ - __asm__ __volatile__ (".machine pop") - -#define __libc_tx_nesting_depth() \ - ({ __asm__ __volatile__ (".machine push\n\t" \ - ".machinemode \"zarch_nohighgprs\"\n\t" \ - ".machine \"all\"\n\t"); \ - int __ret = __builtin_tx_nesting_depth (); \ - __asm__ __volatile__ (".machine pop"); \ - __ret; \ - }) - -#endif diff --git a/sysdeps/unix/sysv/linux/s390/init-first.c b/sysdeps/unix/sysv/linux/s390/init-first.c deleted file mode 100644 index 8bc86cf473..0000000000 --- a/sysdeps/unix/sysv/linux/s390/init-first.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Initialization code run first thing by the ELF startup code. Linux/s390. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef SHARED -# include -# include - -long int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) - attribute_hidden; - -long int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *) - __attribute__ ((nocommon)); - -long int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *) - __attribute__ ((nocommon)); - -long int (*VDSO_SYMBOL(getcpu)) (unsigned *, unsigned *, void *) - attribute_hidden; - -static inline void -_libc_vdso_platform_setup (void) -{ - PREPARE_VERSION (linux2629, "LINUX_2.6.29", 123718585); - - void *p = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2629); - PTR_MANGLE (p); - VDSO_SYMBOL (gettimeofday) = p; - - p = _dl_vdso_vsym ("__kernel_clock_gettime", &linux2629); - PTR_MANGLE (p); - VDSO_SYMBOL (clock_gettime) = p; - - p = _dl_vdso_vsym ("__kernel_clock_getres", &linux2629); - PTR_MANGLE (p); - VDSO_SYMBOL (clock_getres) = p; - - p = _dl_vdso_vsym ("__kernel_getcpu", &linux2629); - PTR_MANGLE (p); - VDSO_SYMBOL (getcpu) = p; -} - -# define VDSO_SETUP _libc_vdso_platform_setup -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/s390/jmp-unwind.c b/sysdeps/unix/sysv/linux/s390/jmp-unwind.c deleted file mode 100644 index 3d9d4bc0b0..0000000000 --- a/sysdeps/unix/sysv/linux/s390/jmp-unwind.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Clean up stack frames unwound by longjmp. Linux/s390 version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -extern void __pthread_cleanup_upto (__jmp_buf env, char *targetframe); -#pragma weak __pthread_cleanup_upto - - -void -_longjmp_unwind (jmp_buf env, int val) -{ - char local_var; - - __libc_ptf_call (__pthread_cleanup_upto, (env->__jmpbuf, &local_var), 0); -} diff --git a/sysdeps/unix/sysv/linux/s390/kernel-features.h b/sysdeps/unix/sysv/linux/s390/kernel-features.h deleted file mode 100644 index f44d429365..0000000000 --- a/sysdeps/unix/sysv/linux/s390/kernel-features.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. S/390 version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* S/390 uses socketcall. */ -#define __ASSUME_SOCKETCALL 1 - -/* Direct socketcalls available with kernel 4.3. */ -#if __LINUX_KERNEL_VERSION >= 0x040300 -# define __ASSUME_SOCKET_SYSCALL 1 -# define __ASSUME_SOCKETPAIR_SYSCALL 1 -# define __ASSUME_BIND_SYSCALL 1 -# define __ASSUME_LISTEN_SYSCALL 1 -# define __ASSUME_GETSOCKOPT_SYSCALL 1 -# define __ASSUME_SETSOCKOPT_SYSCALL 1 -# define __ASSUME_GETSOCKNAME_SYSCALL 1 -# define __ASSUME_GETPEERNAME_SYSCALL 1 -# define __ASSUME_SHUTDOWN_SYSCALL 1 -#endif - -#include_next - -#undef __ASSUME_ACCEPT_SYSCALL - -#if __LINUX_KERNEL_VERSION < 0x040300 -# undef __ASSUME_ACCEPT4_SYSCALL -# undef __ASSUME_RECVMMSG_SYSCALL -# undef __ASSUME_SENDMMSG_SYSCALL -# undef __ASSUME_SENDMSG_SYSCALL -# undef __ASSUME_RECVMSG_SYSCALL -# undef __ASSUME_CONNECT_SYSCALL -# undef __ASSUME_RECVFROM_SYSCALL -# undef __ASSUME_SENDTO_SYSCALL -#endif - -/* s390 only supports ipc syscall. */ -#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS diff --git a/sysdeps/unix/sysv/linux/s390/ldconfig.h b/sysdeps/unix/sysv/linux/s390/ldconfig.h deleted file mode 100644 index f5f1c33692..0000000000 --- a/sysdeps/unix/sysv/linux/s390/ldconfig.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld.so.1", FLAG_ELF_LIBC6 }, \ - { "/lib/ld64.so.1", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed deleted file mode 100644 index 6b4f1bfcad..0000000000 --- a/sysdeps/unix/sysv/linux/s390/ldd-rewrite.sed +++ /dev/null @@ -1,15 +0,0 @@ -/LD_TRACE_LOADED_OBJECTS=1/a\ -add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out" - -# ldd is generated from elf/ldd.bash.in with the name -# of ld.so as generated in Makeconfig - -# that name is replaced by a pair referring to both -# the 32bit and 64bit dynamic linker. - -# /lib(64|)/*(64|).so* is replaced with /lib/*.so* and /lib/*64.so* -# this works for /lib64/ld64.so.x and /lib/ld.so.x as input -s_lib64_lib_ -s_64\.so_\.so_ -s_^RTLDLIST=\(.*lib\)\(/[^/]*\)\(\.so\.[0-9.]*\)[[:blank:]]*$_RTLDLIST="\1\2\3 \1\264\3"_ - diff --git a/sysdeps/unix/sysv/linux/s390/libanl.abilist b/sysdeps/unix/sysv/linux/s390/libanl.abilist deleted file mode 100644 index edabfb436e..0000000000 --- a/sysdeps/unix/sysv/linux/s390/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 gai_cancel F -GLIBC_2.2.3 gai_error F -GLIBC_2.2.3 gai_suspend F -GLIBC_2.2.3 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/s390/libc-vdso.h b/sysdeps/unix/sysv/linux/s390/libc-vdso.h deleted file mode 100644 index 077e4aeac9..0000000000 --- a/sysdeps/unix/sysv/linux/s390/libc-vdso.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Resolve function pointers to VDSO functions. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#ifndef _LIBC_VDSO_H -#define _LIBC_VDSO_H - -#ifdef SHARED - -#include - -extern long int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) - attribute_hidden; - -extern long int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *); - -extern long int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *); - -extern long int (*VDSO_SYMBOL(getcpu)) (unsigned *, unsigned *, void *) - attribute_hidden; -#endif - -#endif /* _LIBC_VDSO_H */ diff --git a/sysdeps/unix/sysv/linux/s390/localplt.data b/sysdeps/unix/sysv/linux/s390/localplt.data deleted file mode 100644 index 50006317c7..0000000000 --- a/sysdeps/unix/sysv/linux/s390/localplt.data +++ /dev/null @@ -1,16 +0,0 @@ -libc.so: _Unwind_Find_FDE -libc.so: calloc -libc.so: free -libc.so: malloc -libc.so: memalign -libc.so: realloc -libm.so: matherr -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/unix/sysv/linux/s390/longjmp_chk.c b/sysdeps/unix/sysv/linux/s390/longjmp_chk.c deleted file mode 100644 index 878cbd4850..0000000000 --- a/sysdeps/unix/sysv/linux/s390/longjmp_chk.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . - - Versioned copy of debug/longjmp_chk.c modified for versioning - the reverted jmpbuf extension. */ - -#include - -#if IS_IN (libc) && defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) -/* this is a copy from debug/longjmp_chk.c because we need an unique name - for __longjmp_chk, but it is already named via a define - for __libc_siglongjmp in debug/longjmp_chk.c. */ -# include - -// XXX Should move to include/setjmp.h -extern void ____longjmp_chk (__jmp_buf __env, int __val) - __attribute__ ((__noreturn__)); - -# define __longjmp ____longjmp_chk -# define __libc_siglongjmp __v1__longjmp_chk - -# include - -/* In glibc release 2.19 a new versions of __longjmp_chk was introduced, - but was reverted before 2.20. Thus both versions are the same function. */ -strong_alias (__v1__longjmp_chk, __v2__longjmp_chk); -versioned_symbol (libc, __v1__longjmp_chk, __longjmp_chk, GLIBC_2_11); -compat_symbol (libc, __v2__longjmp_chk, __longjmp_chk, GLIBC_2_19); - -#else - -# include - -#endif diff --git a/sysdeps/unix/sysv/linux/s390/lowlevellock.h b/sysdeps/unix/sysv/linux/s390/lowlevellock.h deleted file mode 100644 index 604137f7f2..0000000000 --- a/sysdeps/unix/sysv/linux/s390/lowlevellock.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _S390_LOWLEVELLOCK_H -#define _S390_LOWLEVELLOCK_H 1 - -#include - -/* Transactional lock elision definitions. */ -# ifdef ENABLE_LOCK_ELISION -extern int __lll_timedlock_elision - (int *futex, short *adapt_count, const struct timespec *timeout, int private) - attribute_hidden; - -# define lll_timedlock_elision(futex, adapt_count, timeout, private) \ - __lll_timedlock_elision(&(futex), &(adapt_count), timeout, private) - -extern int __lll_lock_elision (int *futex, short *adapt_count, int private) - attribute_hidden; - -extern int __lll_unlock_elision(int *futex, short *adapt_count, int private) - attribute_hidden; - -extern int __lll_trylock_elision(int *futex, short *adapt_count) - attribute_hidden; - -# define lll_lock_elision(futex, adapt_count, private) \ - __lll_lock_elision (&(futex), &(adapt_count), private) -# define lll_unlock_elision(futex, adapt_count, private) \ - __lll_unlock_elision (&(futex), &(adapt_count), private) -# define lll_trylock_elision(futex, adapt_count) \ - __lll_trylock_elision(&(futex), &(adapt_count)) -# endif /* ENABLE_LOCK_ELISION */ - -#endif /* lowlevellock.h */ diff --git a/sysdeps/unix/sysv/linux/s390/mmap_internal.h b/sysdeps/unix/sysv/linux/s390/mmap_internal.h deleted file mode 100644 index 2b11ce4e68..0000000000 --- a/sysdeps/unix/sysv/linux/s390/mmap_internal.h +++ /dev/null @@ -1,32 +0,0 @@ -/* mmap - map files or devices into memory. Linux/s390 version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef MMAP_S390_INTERNAL_H -# define MMAP_S390_INTERNAL_H - -#define MMAP_CALL(__nr, __addr, __len, __prot, __flags, __fd, __offset) \ - ({ \ - long int __args[6] = { (long int) (__addr), (long int) (__len), \ - (long int) (__prot), (long int) (__flags), \ - (long int) (__fd), (long int) (__offset) }; \ - INLINE_SYSCALL_CALL (__nr, __args); \ - }) - -#include_next - -#endif diff --git a/sysdeps/unix/sysv/linux/s390/nldbl-abi.h b/sysdeps/unix/sysv/linux/s390/nldbl-abi.h deleted file mode 100644 index bd985cc59c..0000000000 --- a/sysdeps/unix/sysv/linux/s390/nldbl-abi.h +++ /dev/null @@ -1,8 +0,0 @@ -/* ABI version for long double switch. - This is used by the Versions and math_ldbl_opt.h files in - sysdeps/ieee754/ldbl-opt/. It gives the ABI version where - long double == double was replaced with proper long double - for libm *l functions and libc functions using long double. */ - -#define NLDBL_VERSION GLIBC_2.4 -#define LONG_DOUBLE_COMPAT_VERSION GLIBC_2_4 diff --git a/sysdeps/unix/sysv/linux/s390/opensock.c b/sysdeps/unix/sysv/linux/s390/opensock.c deleted file mode 100644 index f099d651ff..0000000000 --- a/sysdeps/unix/sysv/linux/s390/opensock.c +++ /dev/null @@ -1,2 +0,0 @@ -#define NEED_AF_IUCV 1 -#include "../opensock.c" diff --git a/sysdeps/unix/sysv/linux/s390/pt-longjmp.c b/sysdeps/unix/sysv/linux/s390/pt-longjmp.c deleted file mode 100644 index d324237edd..0000000000 --- a/sysdeps/unix/sysv/linux/s390/pt-longjmp.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . - - Versioned copy of nptl/pt-longjmp.c modified for versioning - the reverted jmpbuf extension. */ - -#include - -#include - -#if SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20) -/* In glibc release 2.19 new versions of longjmp-functions were introduced, - but were reverted before 2.20. Thus both versions are the same function. */ - -strong_alias (longjmp_ifunc, __v2longjmp) -compat_symbol (libpthread, __v2longjmp, longjmp, GLIBC_2_19); -strong_alias (siglongjmp_ifunc, __v2siglongjmp) -compat_symbol (libpthread, __v2siglongjmp, siglongjmp, GLIBC_2_19); -#endif /* SHLIB_COMPAT (libpthread, GLIBC_2_19, GLIBC_2_20)) */ diff --git a/sysdeps/unix/sysv/linux/s390/pt-vfork.S b/sysdeps/unix/sysv/linux/s390/pt-vfork.S deleted file mode 100644 index 65cc3823ac..0000000000 --- a/sysdeps/unix/sysv/linux/s390/pt-vfork.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/pthread_mutex_cond_lock.c b/sysdeps/unix/sysv/linux/s390/pthread_mutex_cond_lock.c deleted file mode 100644 index 15889799a5..0000000000 --- a/sysdeps/unix/sysv/linux/s390/pthread_mutex_cond_lock.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The cond lock is not actually elided yet, but we still need to handle - already elided locks. */ -#include - -#include diff --git a/sysdeps/unix/sysv/linux/s390/pthread_mutex_lock.c b/sysdeps/unix/sysv/linux/s390/pthread_mutex_lock.c deleted file mode 100644 index eb02b02033..0000000000 --- a/sysdeps/unix/sysv/linux/s390/pthread_mutex_lock.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Elided version of pthread_mutex_lock. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include diff --git a/sysdeps/unix/sysv/linux/s390/pthread_mutex_timedlock.c b/sysdeps/unix/sysv/linux/s390/pthread_mutex_timedlock.c deleted file mode 100644 index 096e2d83d8..0000000000 --- a/sysdeps/unix/sysv/linux/s390/pthread_mutex_timedlock.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Elided version of pthread_mutex_timedlock. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include diff --git a/sysdeps/unix/sysv/linux/s390/pthread_mutex_trylock.c b/sysdeps/unix/sysv/linux/s390/pthread_mutex_trylock.c deleted file mode 100644 index 75349e0c3a..0000000000 --- a/sysdeps/unix/sysv/linux/s390/pthread_mutex_trylock.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Elided version of pthread_mutex_trylock. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include diff --git a/sysdeps/unix/sysv/linux/s390/readelflib.c b/sysdeps/unix/sysv/linux/s390/readelflib.c deleted file mode 100644 index df8e5ab72d..0000000000 --- a/sysdeps/unix/sysv/linux/s390/readelflib.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -int process_elf32_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); -int process_elf64_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); - -/* Returns 0 if everything is ok, != 0 in case of error. */ -int -process_elf_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, void *file_contents, - size_t file_length) -{ - ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; - int ret; - - if (elf_header->e_ident [EI_CLASS] == ELFCLASS32) - return process_elf32_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - else - { - ret = process_elf64_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - /* S/390 64bit libraries are always libc.so.6+. */ - if (!ret) - *flag = FLAG_S390_LIB64|FLAG_ELF_LIBC6; - return ret; - } -} - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf32_file -#define __ELF_NATIVE_CLASS 32 -#include "elf/readelflib.c" - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf64_file -#define __ELF_NATIVE_CLASS 64 -#include "elf/readelflib.c" diff --git a/sysdeps/unix/sysv/linux/s390/rt-sysdep.S b/sysdeps/unix/sysv/linux/s390/rt-sysdep.S deleted file mode 100644 index f966bf1e59..0000000000 --- a/sysdeps/unix/sysv/linux/s390/rt-sysdep.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/Makefile b/sysdeps/unix/sysv/linux/s390/s390-32/Makefile deleted file mode 100644 index fd8cf92633..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -# See Makeconfig regarding the use of default-abi. -default-abi := 32 - -ifeq ($(subdir),login) -sysdep_routines += utmp32 utmpx32 -libutil-routines += login32 -endif - -ifeq ($(subdir),misc) -sysdep_headers += sys/elf.h -endif - -ifeq ($(subdir),elf) -ifeq (yes,$(build-shared)) -# This is needed to support g++ v2 and v3. -sysdep_routines += framestate -shared-only-routines += framestate -endif -endif - -ifeq ($(subdir),stdlib) -sysdep_routines += __makecontext_ret -endif - -ifeq ($(subdir),csu) -ifeq (yes,$(build-shared)) -sysdep_routines += divdi3 -shared-only-routines += divdi3 -CPPFLAGS-divdi3.c = -Din_divdi3_c -endif -endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/Versions b/sysdeps/unix/sysv/linux/s390/s390-32/Versions deleted file mode 100644 index 1c120e8cbe..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/Versions +++ /dev/null @@ -1,58 +0,0 @@ -libc { - GLIBC_2.0 { - # Exception handling support functions from libgcc - __register_frame; __register_frame_table; __deregister_frame; - __frame_state_for; __register_frame_info_table; - } - GLIBC_2.1 { - __chown; - } - GLIBC_2.2 { - # functions used in other libraries - __xstat64; __fxstat64; __lxstat64; - - # a* - alphasort64; - - # New rlimit interface - getrlimit; setrlimit; getrlimit64; - - # r* - readdir64; readdir64_r; - - # s* - scandir64; - - # v* - versionsort64; - } - GLIBC_2.3.3 { - posix_fadvise64; posix_fallocate64; - } - GLIBC_2.9 { - getutent; - getutid; - getutline; - pututline; - updwtmp; - getutent_r; - getutid_r; - getutline_r; - getutxent; - getutxid; - getutxline; - pututxline; - updwtmpx; - getutmp; - getutmpx; - } - GLIBC_2.11 { - fallocate64; - } -} - -libutil { - GLIBC_2.9 { - login; - } -} diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c b/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c deleted file mode 100644 index e25130179d..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define __longjmp ____longjmp_chk - -#define CHECK_SP(env, guard) \ - do \ - { \ - uintptr_t cur_sp; \ - uintptr_t new_sp = env->__gregs[9]; \ - __asm__ ("lr %0, %%r15" : "=r" (cur_sp)); \ - new_sp ^= guard; \ - if (new_sp < cur_sp) \ - { \ - stack_t oss; \ - INTERNAL_SYSCALL_DECL (err); \ - int res = INTERNAL_SYSCALL (sigaltstack, err, 2, NULL, &oss); \ - if (!INTERNAL_SYSCALL_ERROR_P (res, err)) \ - { \ - if ((oss.ss_flags & SS_ONSTACK) == 0 \ - || ((uintptr_t) (oss.ss_sp + oss.ss_size) - new_sp \ - < oss.ss_size)) \ - __fortify_fail ("longjmp causes uninitialized stack frame");\ - } \ - } \ - } while (0) - -#include "__longjmp.c" diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S b/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S deleted file mode 100644 index f32cd3ca39..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* We do not want .eh_frame info so that __makecontext_ret stops unwinding - if backtrace was called within a context created by makecontext. (There - is also no .eh_frame info for _start or thread_start.) */ -#undef cfi_startproc -#define cfi_startproc -#undef cfi_endproc -#define cfi_endproc - -ENTRY(__makecontext_ret) - basr %r14,%r7 - ltr %r8,%r8 /* Check whether uc_link is 0. */ - jz 1f - lr %r2,%r8 - br %r9 -1: lhi %r2,0 /* EXIT return value. */ - basr %r13,0 -2: -#ifdef PIC - l %r12,4f-2b(%r13) - la %r12,0(%r12,%r13) /* GOT pointer in r12 after this. */ - l %r1,3f-2b(%r13) - bas %r14,0(%r1,%r12) - .align 4 -3: - .long HIDDEN_JUMPTARGET (exit)@GOTOFF -4: - .long _GLOBAL_OFFSET_TABLE_-2b -#else - l %r1,3f-2b(%r13) - basr %r14,%r1 - .align 4 -3: - .long HIDDEN_JUMPTARGET (exit) -#endif - .align 2 - j .+2 /* Trap if exit returns for some reason. */ -END(__makecontext_ret) diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c b/sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c deleted file mode 100644 index 0b5ae47d2f..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/c++-types.data b/sysdeps/unix/sysv/linux/s390/s390-32/c++-types.data deleted file mode 100644 index 6e2036ec01..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:i -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:m -socklen_t:j -ssize_t:l -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/clone.S b/sysdeps/unix/sysv/linux/s390/s390-32/clone.S deleted file mode 100644 index a8b4dbc90f..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/clone.S +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* clone is even more special than fork as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#include -#define _ERRNO_H 1 -#include - -/* int __clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - pid_t *parent_tid, void *tls, pid_t *child_tid); */ -/* sys_clone (void *child_stack, unsigned long flags, - pid_t *parent_tid, pid_t *child_tid, void *tls); */ - - .text -ENTRY(__clone) - st %r6,24(%r15) /* store %r6 to save area */ - cfi_offset (%r6, -72) - lr %r0,%r5 /* move *arg out of the way */ - ltr %r1,%r2 /* check fn and move to %r1 */ - jz error /* no NULL function pointers */ - ltr %r2,%r3 /* check child_stack and move to %r2 */ - jz error /* no NULL stack pointers */ - lr %r3,%r4 /* move flags to %r3 */ - lr %r4,%r6 /* move parent_tid to %r4 */ - l %r5,100(%r15) /* load child_tid from stack */ - l %r6,96(%r15) /* load tls from stack */ - svc SYS_ify(clone) - ltr %r2,%r2 /* check return code */ - jz thread_start - l %r6,24(%r15) /* restore %r6 */ - jm SYSCALL_ERROR_LABEL - br %r14 -error: - lhi %r2,-EINVAL - j SYSCALL_ERROR_LABEL -PSEUDO_END (__clone) - -thread_start: - /* fn is in gpr 1, arg in gpr 0 */ - lr %r2,%r0 /* set first parameter to void *arg */ - ahi %r15,-96 /* make room on the stack for the save area */ - xc 0(4,%r15),0(%r15) - basr %r14,%r1 /* jump to fn */ - DO_CALL (exit, 1) - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c b/sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c deleted file mode 100644 index ea951bc4f9..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c b/sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c deleted file mode 100644 index 4f219f0b9d..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/fxstatat.c b/sysdeps/unix/sysv/linux/s390/s390-32/fxstatat.c deleted file mode 100644 index 0f8b3135d8..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/fxstatat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S b/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S deleted file mode 100644 index 5b931831ae..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "ucontext_i.h" - -#include - -/* __getcontext (const ucontext_t *ucp) - - Saves the machine context in UCP such that when it is activated, - it appears as if __getcontext() returned again. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to save anything - other than the PRESERVED state. */ - -ENTRY(__getcontext) - lr %r1,%r2 - - /* rt_sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask, sigsetsize). */ - la %r2,SIG_BLOCK - slr %r3,%r3 - la %r4,SC_MASK(%r1) - lhi %r5,_NSIG8 - svc SYS_ify(rt_sigprocmask) - - /* Store fpu context. */ - stfpc SC_FPC(%r1) - std %f0,SC_FPRS(%r1) - std %f1,SC_FPRS+8(%r1) - std %f2,SC_FPRS+16(%r1) - std %f3,SC_FPRS+24(%r1) - std %f4,SC_FPRS+32(%r1) - std %f5,SC_FPRS+40(%r1) - std %f6,SC_FPRS+48(%r1) - std %f7,SC_FPRS+56(%r1) - std %f8,SC_FPRS+64(%r1) - std %f9,SC_FPRS+72(%r1) - std %f10,SC_FPRS+80(%r1) - std %f11,SC_FPRS+88(%r1) - std %f12,SC_FPRS+96(%r1) - std %f13,SC_FPRS+104(%r1) - std %f14,SC_FPRS+112(%r1) - std %f15,SC_FPRS+120(%r1) - - /* Set __getcontext return value to 0. */ - slr %r2,%r2 - - /* Store access registers. */ - stam %a0,%a15,SC_ACRS(%r1) - - /* Store general purpose registers. */ - stm %r0,%r15,SC_GPRS(%r1) - - /* Return. */ - br %r14 -END(__getcontext) - -#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) -/* In glibc release 2.19 a new version of getcontext was introduced, - but was reverted before 2.20. Thus both versions are the same function. */ -weak_alias (__getcontext, __v1__getcontext) -weak_alias (__getcontext, __v2__getcontext) -versioned_symbol (libc, __v1__getcontext, getcontext, GLIBC_2_1) -compat_symbol (libc, __v2__getcontext, getcontext, GLIBC_2_19) - -#else - -weak_alias (__getcontext, getcontext) - -#endif /* !(defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)) */ diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c b/sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c deleted file mode 100644 index 0c75fb5a06..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getutent.c b/sysdeps/unix/sysv/linux/s390/s390-32/getutent.c deleted file mode 100644 index 0c34565bb0..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/getutent.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "utmp-compat.h" - -#if defined SHARED -# undef weak_alias -# define weak_alias(n,a) -#endif -#include "login/getutent.c" - -#if defined SHARED -default_symbol_version (__getutent, getutent, UTMP_COMPAT_BASE); -#endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getutent_r.c b/sysdeps/unix/sysv/linux/s390/s390-32/getutent_r.c deleted file mode 100644 index 99bc11a062..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/getutent_r.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include "utmp-compat.h" -#include "utmp-private.h" - -#if defined SHARED -weak_alias (__setutent, setutent) -weak_alias (__endutent, endutent) - -# undef weak_alias -# define weak_alias(n,a) -#endif -#include "login/getutent_r.c" - -#if defined SHARED -default_symbol_version (__getutent_r, getutent_r, UTMP_COMPAT_BASE); -default_symbol_version (__pututline, pututline, UTMP_COMPAT_BASE); -#endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getutid.c b/sysdeps/unix/sysv/linux/s390/s390-32/getutid.c deleted file mode 100644 index 41e59936b1..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/getutid.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "utmp-compat.h" - -#if defined SHARED -# undef weak_alias -# define weak_alias(n,a) -#endif -#include "login/getutid.c" - -#if defined SHARED -default_symbol_version (__getutid, getutid, UTMP_COMPAT_BASE); -#endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getutid_r.c b/sysdeps/unix/sysv/linux/s390/s390-32/getutid_r.c deleted file mode 100644 index 815e37372e..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/getutid_r.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include "utmp-compat.h" -#include "utmp-private.h" - -#if defined SHARED -# undef weak_alias -# define weak_alias(n,a) -#endif -#include "login/getutid_r.c" - -#if defined SHARED -default_symbol_version (__getutid_r, getutid_r, UTMP_COMPAT_BASE); -#endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getutline.c b/sysdeps/unix/sysv/linux/s390/s390-32/getutline.c deleted file mode 100644 index 25b94d980d..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/getutline.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "utmp-compat.h" - -#if defined SHARED -# undef weak_alias -# define weak_alias(n,a) -#endif -#include "login/getutline.c" - -#if defined SHARED -default_symbol_version (__getutline, getutline, UTMP_COMPAT_BASE); -#endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getutline_r.c b/sysdeps/unix/sysv/linux/s390/s390-32/getutline_r.c deleted file mode 100644 index b118acc1bc..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/getutline_r.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include "utmp-compat.h" -#include "utmp-private.h" - -#if defined SHARED -# undef weak_alias -# define weak_alias(n,a) -#endif -#include "login/getutline_r.c" - -#if defined SHARED -default_symbol_version (__getutline_r, getutline_r, UTMP_COMPAT_BASE);; -#endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getutmp.c b/sysdeps/unix/sysv/linux/s390/s390-32/getutmp.c deleted file mode 100644 index 11b7ef012b..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/getutmp.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -/* This is an ugly hack but we must not see the getutmpx declaration. */ -#define getutmpx XXXgetutmpx -#include -#undef getutmpx - -#include "utmp-compat.h" - -#undef weak_alias -#define weak_alias(n,a) -#define getutmp __getutmp -#define getutmpx __getutmpx -#include "sysdeps/gnu/getutmp.c" -#undef getutmp -#undef getutmpx - -default_symbol_version (__getutmp, getutmp, UTMP_COMPAT_BASE); -default_symbol_version (__getutmpx, getutmpx, UTMP_COMPAT_BASE); diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getutxent.c b/sysdeps/unix/sysv/linux/s390/s390-32/getutxent.c deleted file mode 100644 index c1d967c6a2..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/getutxent.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "utmp-compat.h" - -#undef weak_alias -#define weak_alias(n,a) -#define getutxent __getutxent -#include "login/getutxent.c" -#undef getutxent - -default_symbol_version (__getutxent, getutxent, UTMP_COMPAT_BASE); diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getutxid.c b/sysdeps/unix/sysv/linux/s390/s390-32/getutxid.c deleted file mode 100644 index 18251fdef6..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/getutxid.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "utmp-compat.h" - -#undef weak_alias -#define weak_alias(n,a) -#define getutxid __getutxid -#include "login/getutxid.c" -#undef getutxid - -default_symbol_version (__getutxid, getutxid, UTMP_COMPAT_BASE); diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getutxline.c b/sysdeps/unix/sysv/linux/s390/s390-32/getutxline.c deleted file mode 100644 index 63f79ea68d..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/getutxline.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "utmp-compat.h" - -#undef weak_alias -#define weak_alias(n,a) -#define getutxline __getutxline -#include "login/getutxline.c" -#undef getutxline - -default_symbol_version (__getutxline, getutxline, UTMP_COMPAT_BASE); diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist deleted file mode 100644 index c16b2c1344..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist +++ /dev/null @@ -1,12 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _r_debug D 0x14 -GLIBC_2.0 calloc F -GLIBC_2.0 free F -GLIBC_2.0 malloc F -GLIBC_2.0 realloc F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __libc_stack_end D 0x4 -GLIBC_2.1 _dl_mcount F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __tls_get_offset F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libBrokenLocale.abilist deleted file mode 100644 index 4a56bb68a3..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist deleted file mode 100644 index 63d33e8b37..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++ /dev/null @@ -1,2476 +0,0 @@ -GCC_3.0 GCC_3.0 A -GCC_3.0 _Unwind_Find_FDE F -GCC_3.0 __deregister_frame_info_bases F -GCC_3.0 __register_frame_info_bases F -GCC_3.0 __register_frame_info_table_bases F -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_adjust_column F -GLIBC_2.0 _IO_default_doallocate F -GLIBC_2.0 _IO_default_finish F -GLIBC_2.0 _IO_default_pbackfail F -GLIBC_2.0 _IO_default_uflow F -GLIBC_2.0 _IO_default_xsgetn F -GLIBC_2.0 _IO_default_xsputn F -GLIBC_2.0 _IO_do_write F -GLIBC_2.0 _IO_doallocbuf F -GLIBC_2.0 _IO_fclose F -GLIBC_2.0 _IO_fdopen F -GLIBC_2.0 _IO_feof F -GLIBC_2.0 _IO_ferror F -GLIBC_2.0 _IO_fflush F -GLIBC_2.0 _IO_fgetpos F -GLIBC_2.0 _IO_fgets F -GLIBC_2.0 _IO_file_attach F -GLIBC_2.0 _IO_file_close F -GLIBC_2.0 _IO_file_close_it F -GLIBC_2.0 _IO_file_doallocate F -GLIBC_2.0 _IO_file_fopen F -GLIBC_2.0 _IO_file_init F -GLIBC_2.0 _IO_file_jumps D 0x54 -GLIBC_2.0 _IO_file_open F -GLIBC_2.0 _IO_file_overflow F -GLIBC_2.0 _IO_file_read F -GLIBC_2.0 _IO_file_seek F -GLIBC_2.0 _IO_file_seekoff F -GLIBC_2.0 _IO_file_setbuf F -GLIBC_2.0 _IO_file_stat F -GLIBC_2.0 _IO_file_sync F -GLIBC_2.0 _IO_file_underflow F -GLIBC_2.0 _IO_file_write F -GLIBC_2.0 _IO_file_xsputn F -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_flush_all F -GLIBC_2.0 _IO_flush_all_linebuffered F -GLIBC_2.0 _IO_fopen F -GLIBC_2.0 _IO_fprintf F -GLIBC_2.0 _IO_fputs F -GLIBC_2.0 _IO_fread F -GLIBC_2.0 _IO_free_backup_area F -GLIBC_2.0 _IO_fsetpos F -GLIBC_2.0 _IO_ftell F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 _IO_fwrite F -GLIBC_2.0 _IO_getc F -GLIBC_2.0 _IO_getline F -GLIBC_2.0 _IO_gets F -GLIBC_2.0 _IO_init F -GLIBC_2.0 _IO_init_marker F -GLIBC_2.0 _IO_link_in F -GLIBC_2.0 _IO_list_all D 0x4 -GLIBC_2.0 _IO_marker_delta F -GLIBC_2.0 _IO_marker_difference F -GLIBC_2.0 _IO_padn F -GLIBC_2.0 _IO_peekc_locked F -GLIBC_2.0 _IO_popen F -GLIBC_2.0 _IO_printf F -GLIBC_2.0 _IO_proc_close F -GLIBC_2.0 _IO_proc_open F -GLIBC_2.0 _IO_putc F -GLIBC_2.0 _IO_puts F -GLIBC_2.0 _IO_remove_marker F -GLIBC_2.0 _IO_seekmark F -GLIBC_2.0 _IO_seekoff F -GLIBC_2.0 _IO_seekpos F -GLIBC_2.0 _IO_setb F -GLIBC_2.0 _IO_setbuffer F -GLIBC_2.0 _IO_setvbuf F -GLIBC_2.0 _IO_sgetn F -GLIBC_2.0 _IO_sprintf F -GLIBC_2.0 _IO_sputbackc F -GLIBC_2.0 _IO_sscanf F -GLIBC_2.0 _IO_stderr_ D 0x50 -GLIBC_2.0 _IO_stdin_ D 0x50 -GLIBC_2.0 _IO_stdout_ D 0x50 -GLIBC_2.0 _IO_str_init_readonly F -GLIBC_2.0 _IO_str_init_static F -GLIBC_2.0 _IO_str_overflow F -GLIBC_2.0 _IO_str_pbackfail F -GLIBC_2.0 _IO_str_seekoff F -GLIBC_2.0 _IO_str_underflow F -GLIBC_2.0 _IO_sungetc F -GLIBC_2.0 _IO_switch_to_get_mode F -GLIBC_2.0 _IO_un_link F -GLIBC_2.0 _IO_ungetc F -GLIBC_2.0 _IO_unsave_markers F -GLIBC_2.0 _IO_vfprintf F -GLIBC_2.0 _IO_vfscanf F -GLIBC_2.0 _IO_vsprintf F -GLIBC_2.0 ___brk_addr D 0x4 -GLIBC_2.0 __adjtimex F -GLIBC_2.0 __after_morecore_hook D 0x4 -GLIBC_2.0 __argz_count F -GLIBC_2.0 __argz_next F -GLIBC_2.0 __argz_stringify F -GLIBC_2.0 __assert_fail F -GLIBC_2.0 __assert_perror_fail F -GLIBC_2.0 __bsd_getpgrp F -GLIBC_2.0 __bzero F -GLIBC_2.0 __check_rhosts_file D 0x4 -GLIBC_2.0 __clone F -GLIBC_2.0 __close F -GLIBC_2.0 __cmsg_nxthdr F -GLIBC_2.0 __connect F -GLIBC_2.0 __ctype32_b D 0x4 -GLIBC_2.0 __ctype_b D 0x4 -GLIBC_2.0 __ctype_get_mb_cur_max F -GLIBC_2.0 __ctype_tolower D 0x4 -GLIBC_2.0 __ctype_toupper D 0x4 -GLIBC_2.0 __curbrk D 0x4 -GLIBC_2.0 __daylight D 0x4 -GLIBC_2.0 __dcgettext F -GLIBC_2.0 __default_morecore F -GLIBC_2.0 __deregister_frame F -GLIBC_2.0 __deregister_frame_info F -GLIBC_2.0 __dgettext F -GLIBC_2.0 __divdi3 F -GLIBC_2.0 __dup2 F -GLIBC_2.0 __environ D 0x4 -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __ffs F -GLIBC_2.0 __finite F -GLIBC_2.0 __finitef F -GLIBC_2.0 __finitel F -GLIBC_2.0 __fork F -GLIBC_2.0 __fpu_control D 0x4 -GLIBC_2.0 __frame_state_for F -GLIBC_2.0 __free_hook D 0x4 -GLIBC_2.0 __fxstat F -GLIBC_2.0 __getdelim F -GLIBC_2.0 __getpagesize F -GLIBC_2.0 __getpgid F -GLIBC_2.0 __getpid F -GLIBC_2.0 __gettimeofday F -GLIBC_2.0 __gmtime_r F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __isinf F -GLIBC_2.0 __isinff F -GLIBC_2.0 __isinfl F -GLIBC_2.0 __isnan F -GLIBC_2.0 __isnanf F -GLIBC_2.0 __isnanl F -GLIBC_2.0 __iswctype F -GLIBC_2.0 __ivaliduser F -GLIBC_2.0 __libc_calloc F -GLIBC_2.0 __libc_free F -GLIBC_2.0 __libc_init_first F -GLIBC_2.0 __libc_mallinfo F -GLIBC_2.0 __libc_malloc F -GLIBC_2.0 __libc_mallopt F -GLIBC_2.0 __libc_memalign F -GLIBC_2.0 __libc_pvalloc F -GLIBC_2.0 __libc_realloc F -GLIBC_2.0 __libc_start_main F -GLIBC_2.0 __libc_valloc F -GLIBC_2.0 __lseek F -GLIBC_2.0 __lxstat F -GLIBC_2.0 __malloc_hook D 0x4 -GLIBC_2.0 __malloc_initialize_hook D 0x4 -GLIBC_2.0 __mbrlen F -GLIBC_2.0 __mbrtowc F -GLIBC_2.0 __memalign_hook D 0x4 -GLIBC_2.0 __mempcpy F -GLIBC_2.0 __moddi3 F -GLIBC_2.0 __monstartup F -GLIBC_2.0 __morecore D 0x4 -GLIBC_2.0 __nss_configure_lookup F -GLIBC_2.0 __nss_database_lookup F -GLIBC_2.0 __nss_group_lookup F -GLIBC_2.0 __nss_hosts_lookup F -GLIBC_2.0 __nss_next F -GLIBC_2.0 __nss_passwd_lookup F -GLIBC_2.0 __open F -GLIBC_2.0 __overflow F -GLIBC_2.0 __pipe F -GLIBC_2.0 __printf_fp F -GLIBC_2.0 __profile_frequency F -GLIBC_2.0 __progname D 0x4 -GLIBC_2.0 __progname_full D 0x4 -GLIBC_2.0 __rcmd_errstr D 0x4 -GLIBC_2.0 __read F -GLIBC_2.0 __realloc_hook D 0x4 -GLIBC_2.0 __register_frame F -GLIBC_2.0 __register_frame_info F -GLIBC_2.0 __register_frame_info_table F -GLIBC_2.0 __register_frame_table F -GLIBC_2.0 __res_randomid F -GLIBC_2.0 __sbrk F -GLIBC_2.0 __sched_get_priority_max F -GLIBC_2.0 __sched_get_priority_min F -GLIBC_2.0 __sched_getparam F -GLIBC_2.0 __sched_getscheduler F -GLIBC_2.0 __sched_setscheduler F -GLIBC_2.0 __sched_yield F -GLIBC_2.0 __secure_getenv F -GLIBC_2.0 __select F -GLIBC_2.0 __send F -GLIBC_2.0 __setpgid F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __sigaddset F -GLIBC_2.0 __sigdelset F -GLIBC_2.0 __sigismember F -GLIBC_2.0 __sigpause F -GLIBC_2.0 __sigsetjmp F -GLIBC_2.0 __stpcpy F -GLIBC_2.0 __stpncpy F -GLIBC_2.0 __strcasecmp F -GLIBC_2.0 __strdup F -GLIBC_2.0 __strerror_r F -GLIBC_2.0 __strtod_internal F -GLIBC_2.0 __strtof_internal F -GLIBC_2.0 __strtok_r F -GLIBC_2.0 __strtol_internal F -GLIBC_2.0 __strtold_internal F -GLIBC_2.0 __strtoll_internal F -GLIBC_2.0 __strtoq_internal F -GLIBC_2.0 __strtoul_internal F -GLIBC_2.0 __strtoull_internal F -GLIBC_2.0 __strtouq_internal F -GLIBC_2.0 __sysv_signal F -GLIBC_2.0 __timezone D 0x4 -GLIBC_2.0 __tzname D 0x8 -GLIBC_2.0 __udivdi3 F -GLIBC_2.0 __uflow F -GLIBC_2.0 __umoddi3 F -GLIBC_2.0 __underflow F -GLIBC_2.0 __vfscanf F -GLIBC_2.0 __vsnprintf F -GLIBC_2.0 __vsscanf F -GLIBC_2.0 __wait F -GLIBC_2.0 __waitpid F -GLIBC_2.0 __wcstod_internal F -GLIBC_2.0 __wcstof_internal F -GLIBC_2.0 __wcstol_internal F -GLIBC_2.0 __wcstold_internal F -GLIBC_2.0 __wcstoll_internal F -GLIBC_2.0 __wcstoul_internal F -GLIBC_2.0 __wcstoull_internal F -GLIBC_2.0 __write F -GLIBC_2.0 __xmknod F -GLIBC_2.0 __xpg_basename F -GLIBC_2.0 __xstat F -GLIBC_2.0 _environ D 0x4 -GLIBC_2.0 _exit F -GLIBC_2.0 _libc_intl_domainname D 0x5 -GLIBC_2.0 _longjmp F -GLIBC_2.0 _mcleanup F -GLIBC_2.0 _mcount F -GLIBC_2.0 _nl_default_dirname D 0x12 -GLIBC_2.0 _nl_domain_bindings D 0x4 -GLIBC_2.0 _nl_msg_cat_cntr D 0x4 -GLIBC_2.0 _null_auth D 0xc -GLIBC_2.0 _obstack D 0x4 -GLIBC_2.0 _obstack_allocated_p F -GLIBC_2.0 _obstack_begin F -GLIBC_2.0 _obstack_begin_1 F -GLIBC_2.0 _obstack_free F -GLIBC_2.0 _obstack_memory_used F -GLIBC_2.0 _obstack_newchunk F -GLIBC_2.0 _res D 0x200 -GLIBC_2.0 _rpc_dtablesize F -GLIBC_2.0 _seterr_reply F -GLIBC_2.0 _setjmp F -GLIBC_2.0 _sys_errlist D 0x1ec -GLIBC_2.0 _sys_nerr D 0x4 -GLIBC_2.0 _sys_siglist D 0x80 -GLIBC_2.0 _tolower F -GLIBC_2.0 _toupper F -GLIBC_2.0 a64l F -GLIBC_2.0 abort F -GLIBC_2.0 abs F -GLIBC_2.0 accept F -GLIBC_2.0 access F -GLIBC_2.0 acct F -GLIBC_2.0 addmntent F -GLIBC_2.0 adjtime F -GLIBC_2.0 adjtimex F -GLIBC_2.0 advance F -GLIBC_2.0 alarm F -GLIBC_2.0 alphasort F -GLIBC_2.0 argz_add F -GLIBC_2.0 argz_add_sep F -GLIBC_2.0 argz_append F -GLIBC_2.0 argz_count F -GLIBC_2.0 argz_create F -GLIBC_2.0 argz_create_sep F -GLIBC_2.0 argz_delete F -GLIBC_2.0 argz_extract F -GLIBC_2.0 argz_insert F -GLIBC_2.0 argz_next F -GLIBC_2.0 argz_replace F -GLIBC_2.0 argz_stringify F -GLIBC_2.0 asctime F -GLIBC_2.0 asctime_r F -GLIBC_2.0 asprintf F -GLIBC_2.0 atexit F -GLIBC_2.0 atof F -GLIBC_2.0 atoi F -GLIBC_2.0 atol F -GLIBC_2.0 atoll F -GLIBC_2.0 authnone_create F -GLIBC_2.0 authunix_create F -GLIBC_2.0 authunix_create_default F -GLIBC_2.0 basename F -GLIBC_2.0 bcmp F -GLIBC_2.0 bcopy F -GLIBC_2.0 bdflush F -GLIBC_2.0 bind F -GLIBC_2.0 bindresvport F -GLIBC_2.0 bindtextdomain F -GLIBC_2.0 brk F -GLIBC_2.0 bsd_signal F -GLIBC_2.0 bsearch F -GLIBC_2.0 btowc F -GLIBC_2.0 bzero F -GLIBC_2.0 calloc F -GLIBC_2.0 callrpc F -GLIBC_2.0 canonicalize_file_name F -GLIBC_2.0 catclose F -GLIBC_2.0 catgets F -GLIBC_2.0 catopen F -GLIBC_2.0 cfgetispeed F -GLIBC_2.0 cfgetospeed F -GLIBC_2.0 cfmakeraw F -GLIBC_2.0 cfree F -GLIBC_2.0 cfsetispeed F -GLIBC_2.0 cfsetospeed F -GLIBC_2.0 cfsetspeed F -GLIBC_2.0 chdir F -GLIBC_2.0 chflags F -GLIBC_2.0 chmod F -GLIBC_2.0 chown F -GLIBC_2.0 chroot F -GLIBC_2.0 clearenv F -GLIBC_2.0 clearerr F -GLIBC_2.0 clearerr_unlocked F -GLIBC_2.0 clnt_broadcast F -GLIBC_2.0 clnt_create F -GLIBC_2.0 clnt_pcreateerror F -GLIBC_2.0 clnt_perrno F -GLIBC_2.0 clnt_perror F -GLIBC_2.0 clnt_spcreateerror F -GLIBC_2.0 clnt_sperrno F -GLIBC_2.0 clnt_sperror F -GLIBC_2.0 clntraw_create F -GLIBC_2.0 clnttcp_create F -GLIBC_2.0 clntudp_bufcreate F -GLIBC_2.0 clntudp_create F -GLIBC_2.0 clock F -GLIBC_2.0 clone F -GLIBC_2.0 close F -GLIBC_2.0 closedir F -GLIBC_2.0 closelog F -GLIBC_2.0 confstr F -GLIBC_2.0 connect F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 creat F -GLIBC_2.0 create_module F -GLIBC_2.0 ctermid F -GLIBC_2.0 ctime F -GLIBC_2.0 ctime_r F -GLIBC_2.0 cuserid F -GLIBC_2.0 daemon F -GLIBC_2.0 daylight D 0x4 -GLIBC_2.0 dcgettext F -GLIBC_2.0 delete_module F -GLIBC_2.0 dgettext F -GLIBC_2.0 difftime F -GLIBC_2.0 dirfd F -GLIBC_2.0 dirname F -GLIBC_2.0 div F -GLIBC_2.0 dprintf F -GLIBC_2.0 drand48 F -GLIBC_2.0 drand48_r F -GLIBC_2.0 dup F -GLIBC_2.0 dup2 F -GLIBC_2.0 dysize F -GLIBC_2.0 ecvt F -GLIBC_2.0 ecvt_r F -GLIBC_2.0 endaliasent F -GLIBC_2.0 endfsent F -GLIBC_2.0 endgrent F -GLIBC_2.0 endhostent F -GLIBC_2.0 endmntent F -GLIBC_2.0 endnetent F -GLIBC_2.0 endnetgrent F -GLIBC_2.0 endprotoent F -GLIBC_2.0 endpwent F -GLIBC_2.0 endrpcent F -GLIBC_2.0 endservent F -GLIBC_2.0 endspent F -GLIBC_2.0 endttyent F -GLIBC_2.0 endusershell F -GLIBC_2.0 endutent F -GLIBC_2.0 environ D 0x4 -GLIBC_2.0 envz_add F -GLIBC_2.0 envz_entry F -GLIBC_2.0 envz_get F -GLIBC_2.0 envz_merge F -GLIBC_2.0 envz_remove F -GLIBC_2.0 envz_strip F -GLIBC_2.0 erand48 F -GLIBC_2.0 erand48_r F -GLIBC_2.0 err F -GLIBC_2.0 error F -GLIBC_2.0 error_at_line F -GLIBC_2.0 error_message_count D 0x4 -GLIBC_2.0 error_one_per_line D 0x4 -GLIBC_2.0 error_print_progname D 0x4 -GLIBC_2.0 errx F -GLIBC_2.0 ether_aton F -GLIBC_2.0 ether_aton_r F -GLIBC_2.0 ether_hostton F -GLIBC_2.0 ether_line F -GLIBC_2.0 ether_ntoa F -GLIBC_2.0 ether_ntoa_r F -GLIBC_2.0 ether_ntohost F -GLIBC_2.0 euidaccess F -GLIBC_2.0 execl F -GLIBC_2.0 execle F -GLIBC_2.0 execlp F -GLIBC_2.0 execv F -GLIBC_2.0 execve F -GLIBC_2.0 execvp F -GLIBC_2.0 exit F -GLIBC_2.0 fchdir F -GLIBC_2.0 fchflags F -GLIBC_2.0 fchmod F -GLIBC_2.0 fchown F -GLIBC_2.0 fclose F -GLIBC_2.0 fcloseall F -GLIBC_2.0 fcntl F -GLIBC_2.0 fcvt F -GLIBC_2.0 fcvt_r F -GLIBC_2.0 fdatasync F -GLIBC_2.0 fdopen F -GLIBC_2.0 feof F -GLIBC_2.0 feof_unlocked F -GLIBC_2.0 ferror F -GLIBC_2.0 ferror_unlocked F -GLIBC_2.0 fexecve F -GLIBC_2.0 fflush F -GLIBC_2.0 fflush_unlocked F -GLIBC_2.0 ffs F -GLIBC_2.0 fgetc F -GLIBC_2.0 fgetgrent F -GLIBC_2.0 fgetgrent_r F -GLIBC_2.0 fgetpos F -GLIBC_2.0 fgetpwent F -GLIBC_2.0 fgetpwent_r F -GLIBC_2.0 fgets F -GLIBC_2.0 fgetspent F -GLIBC_2.0 fgetspent_r F -GLIBC_2.0 fileno F -GLIBC_2.0 fileno_unlocked F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 flock F -GLIBC_2.0 flockfile F -GLIBC_2.0 fnmatch F -GLIBC_2.0 fopen F -GLIBC_2.0 fopencookie F -GLIBC_2.0 fork F -GLIBC_2.0 fpathconf F -GLIBC_2.0 fprintf F -GLIBC_2.0 fputc F -GLIBC_2.0 fputc_unlocked F -GLIBC_2.0 fputs F -GLIBC_2.0 fread F -GLIBC_2.0 free F -GLIBC_2.0 freeaddrinfo F -GLIBC_2.0 freopen F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 fscanf F -GLIBC_2.0 fseek F -GLIBC_2.0 fsetpos F -GLIBC_2.0 fstatfs F -GLIBC_2.0 fsync F -GLIBC_2.0 ftell F -GLIBC_2.0 ftime F -GLIBC_2.0 ftok F -GLIBC_2.0 ftruncate F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 fts_children F -GLIBC_2.0 fts_close F -GLIBC_2.0 fts_open F -GLIBC_2.0 fts_read F -GLIBC_2.0 fts_set F -GLIBC_2.0 ftw F -GLIBC_2.0 funlockfile F -GLIBC_2.0 fwrite F -GLIBC_2.0 gcvt F -GLIBC_2.0 get_avphys_pages F -GLIBC_2.0 get_current_dir_name F -GLIBC_2.0 get_kernel_syms F -GLIBC_2.0 get_myaddress F -GLIBC_2.0 get_nprocs F -GLIBC_2.0 get_nprocs_conf F -GLIBC_2.0 get_phys_pages F -GLIBC_2.0 getaddrinfo F -GLIBC_2.0 getaliasbyname F -GLIBC_2.0 getaliasbyname_r F -GLIBC_2.0 getaliasent F -GLIBC_2.0 getaliasent_r F -GLIBC_2.0 getc F -GLIBC_2.0 getc_unlocked F -GLIBC_2.0 getchar F -GLIBC_2.0 getchar_unlocked F -GLIBC_2.0 getcwd F -GLIBC_2.0 getdelim F -GLIBC_2.0 getdirentries F -GLIBC_2.0 getdomainname F -GLIBC_2.0 getdtablesize F -GLIBC_2.0 getegid F -GLIBC_2.0 getenv F -GLIBC_2.0 geteuid F -GLIBC_2.0 getfsent F -GLIBC_2.0 getfsfile F -GLIBC_2.0 getfsspec F -GLIBC_2.0 getgid F -GLIBC_2.0 getgrent F -GLIBC_2.0 getgrent_r F -GLIBC_2.0 getgrgid F -GLIBC_2.0 getgrgid_r F -GLIBC_2.0 getgrnam F -GLIBC_2.0 getgrnam_r F -GLIBC_2.0 getgroups F -GLIBC_2.0 gethostbyaddr F -GLIBC_2.0 gethostbyaddr_r F -GLIBC_2.0 gethostbyname F -GLIBC_2.0 gethostbyname2 F -GLIBC_2.0 gethostbyname2_r F -GLIBC_2.0 gethostbyname_r F -GLIBC_2.0 gethostent F -GLIBC_2.0 gethostent_r F -GLIBC_2.0 gethostid F -GLIBC_2.0 gethostname F -GLIBC_2.0 getitimer F -GLIBC_2.0 getline F -GLIBC_2.0 getlogin F -GLIBC_2.0 getlogin_r F -GLIBC_2.0 getmntent F -GLIBC_2.0 getmntent_r F -GLIBC_2.0 getnetbyaddr F -GLIBC_2.0 getnetbyaddr_r F -GLIBC_2.0 getnetbyname F -GLIBC_2.0 getnetbyname_r F -GLIBC_2.0 getnetent F -GLIBC_2.0 getnetent_r F -GLIBC_2.0 getnetgrent F -GLIBC_2.0 getnetgrent_r F -GLIBC_2.0 getopt F -GLIBC_2.0 getopt_long F -GLIBC_2.0 getopt_long_only F -GLIBC_2.0 getpagesize F -GLIBC_2.0 getpass F -GLIBC_2.0 getpeername F -GLIBC_2.0 getpgid F -GLIBC_2.0 getpgrp F -GLIBC_2.0 getpid F -GLIBC_2.0 getppid F -GLIBC_2.0 getpriority F -GLIBC_2.0 getprotobyname F -GLIBC_2.0 getprotobyname_r F -GLIBC_2.0 getprotobynumber F -GLIBC_2.0 getprotobynumber_r F -GLIBC_2.0 getprotoent F -GLIBC_2.0 getprotoent_r F -GLIBC_2.0 getpublickey F -GLIBC_2.0 getpw F -GLIBC_2.0 getpwent F -GLIBC_2.0 getpwent_r F -GLIBC_2.0 getpwnam F -GLIBC_2.0 getpwnam_r F -GLIBC_2.0 getpwuid F -GLIBC_2.0 getpwuid_r F -GLIBC_2.0 getresgid F -GLIBC_2.0 getresuid F -GLIBC_2.0 getrlimit F -GLIBC_2.0 getrpcbyname F -GLIBC_2.0 getrpcbyname_r F -GLIBC_2.0 getrpcbynumber F -GLIBC_2.0 getrpcbynumber_r F -GLIBC_2.0 getrpcent F -GLIBC_2.0 getrpcent_r F -GLIBC_2.0 getrpcport F -GLIBC_2.0 getrusage F -GLIBC_2.0 gets F -GLIBC_2.0 getsecretkey F -GLIBC_2.0 getservbyname F -GLIBC_2.0 getservbyname_r F -GLIBC_2.0 getservbyport F -GLIBC_2.0 getservbyport_r F -GLIBC_2.0 getservent F -GLIBC_2.0 getservent_r F -GLIBC_2.0 getsid F -GLIBC_2.0 getsockname F -GLIBC_2.0 getsockopt F -GLIBC_2.0 getspent F -GLIBC_2.0 getspent_r F -GLIBC_2.0 getspnam F -GLIBC_2.0 getspnam_r F -GLIBC_2.0 getsubopt F -GLIBC_2.0 gettext F -GLIBC_2.0 gettimeofday F -GLIBC_2.0 getttyent F -GLIBC_2.0 getttynam F -GLIBC_2.0 getuid F -GLIBC_2.0 getusershell F -GLIBC_2.0 getutent F -GLIBC_2.0 getutent_r F -GLIBC_2.0 getutid F -GLIBC_2.0 getutid_r F -GLIBC_2.0 getutline F -GLIBC_2.0 getutline_r F -GLIBC_2.0 getw F -GLIBC_2.0 getwd F -GLIBC_2.0 glob F -GLIBC_2.0 glob_pattern_p F -GLIBC_2.0 globfree F -GLIBC_2.0 gmtime F -GLIBC_2.0 gmtime_r F -GLIBC_2.0 group_member F -GLIBC_2.0 gsignal F -GLIBC_2.0 gtty F -GLIBC_2.0 h_errlist D 0x14 -GLIBC_2.0 h_nerr D 0x4 -GLIBC_2.0 hasmntopt F -GLIBC_2.0 hcreate F -GLIBC_2.0 hcreate_r F -GLIBC_2.0 hdestroy F -GLIBC_2.0 hdestroy_r F -GLIBC_2.0 herror F -GLIBC_2.0 hsearch F -GLIBC_2.0 hsearch_r F -GLIBC_2.0 hstrerror F -GLIBC_2.0 htonl F -GLIBC_2.0 htons F -GLIBC_2.0 index F -GLIBC_2.0 inet_addr F -GLIBC_2.0 inet_aton F -GLIBC_2.0 inet_lnaof F -GLIBC_2.0 inet_makeaddr F -GLIBC_2.0 inet_netof F -GLIBC_2.0 inet_network F -GLIBC_2.0 inet_nsap_addr F -GLIBC_2.0 inet_nsap_ntoa F -GLIBC_2.0 inet_ntoa F -GLIBC_2.0 inet_ntop F -GLIBC_2.0 inet_pton F -GLIBC_2.0 init_module F -GLIBC_2.0 initgroups F -GLIBC_2.0 initstate F -GLIBC_2.0 initstate_r F -GLIBC_2.0 innetgr F -GLIBC_2.0 insque F -GLIBC_2.0 ioctl F -GLIBC_2.0 iruserok F -GLIBC_2.0 isalnum F -GLIBC_2.0 isalpha F -GLIBC_2.0 isascii F -GLIBC_2.0 isatty F -GLIBC_2.0 isblank F -GLIBC_2.0 iscntrl F -GLIBC_2.0 isdigit F -GLIBC_2.0 isfdtype F -GLIBC_2.0 isgraph F -GLIBC_2.0 isinf F -GLIBC_2.0 isinff F -GLIBC_2.0 isinfl F -GLIBC_2.0 islower F -GLIBC_2.0 isnan F -GLIBC_2.0 isnanf F -GLIBC_2.0 isnanl F -GLIBC_2.0 isprint F -GLIBC_2.0 ispunct F -GLIBC_2.0 isspace F -GLIBC_2.0 isupper F -GLIBC_2.0 iswalnum F -GLIBC_2.0 iswalpha F -GLIBC_2.0 iswcntrl F -GLIBC_2.0 iswctype F -GLIBC_2.0 iswdigit F -GLIBC_2.0 iswgraph F -GLIBC_2.0 iswlower F -GLIBC_2.0 iswprint F -GLIBC_2.0 iswpunct F -GLIBC_2.0 iswspace F -GLIBC_2.0 iswupper F -GLIBC_2.0 iswxdigit F -GLIBC_2.0 isxdigit F -GLIBC_2.0 jrand48 F -GLIBC_2.0 jrand48_r F -GLIBC_2.0 kill F -GLIBC_2.0 killpg F -GLIBC_2.0 klogctl F -GLIBC_2.0 l64a F -GLIBC_2.0 labs F -GLIBC_2.0 lchown F -GLIBC_2.0 lckpwdf F -GLIBC_2.0 lcong48 F -GLIBC_2.0 lcong48_r F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 ldiv F -GLIBC_2.0 lfind F -GLIBC_2.0 link F -GLIBC_2.0 listen F -GLIBC_2.0 llabs F -GLIBC_2.0 lldiv F -GLIBC_2.0 llseek F -GLIBC_2.0 loc1 D 0x4 -GLIBC_2.0 loc2 D 0x4 -GLIBC_2.0 localeconv F -GLIBC_2.0 localtime F -GLIBC_2.0 localtime_r F -GLIBC_2.0 lockf F -GLIBC_2.0 locs D 0x4 -GLIBC_2.0 longjmp F -GLIBC_2.0 lrand48 F -GLIBC_2.0 lrand48_r F -GLIBC_2.0 lsearch F -GLIBC_2.0 lseek F -GLIBC_2.0 madvise F -GLIBC_2.0 mallinfo F -GLIBC_2.0 malloc F -GLIBC_2.0 malloc_get_state F -GLIBC_2.0 malloc_set_state F -GLIBC_2.0 malloc_stats F -GLIBC_2.0 malloc_trim F -GLIBC_2.0 malloc_usable_size F -GLIBC_2.0 mallopt F -GLIBC_2.0 mallwatch D 0x4 -GLIBC_2.0 mblen F -GLIBC_2.0 mbrlen F -GLIBC_2.0 mbrtowc F -GLIBC_2.0 mbsinit F -GLIBC_2.0 mbsnrtowcs F -GLIBC_2.0 mbsrtowcs F -GLIBC_2.0 mbstowcs F -GLIBC_2.0 mbtowc F -GLIBC_2.0 mcheck F -GLIBC_2.0 mcount F -GLIBC_2.0 memalign F -GLIBC_2.0 memccpy F -GLIBC_2.0 memchr F -GLIBC_2.0 memcmp F -GLIBC_2.0 memcpy F -GLIBC_2.0 memfrob F -GLIBC_2.0 memmem F -GLIBC_2.0 memmove F -GLIBC_2.0 memset F -GLIBC_2.0 mkdir F -GLIBC_2.0 mkfifo F -GLIBC_2.0 mkstemp F -GLIBC_2.0 mktemp F -GLIBC_2.0 mktime F -GLIBC_2.0 mlock F -GLIBC_2.0 mlockall F -GLIBC_2.0 mmap F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 monstartup F -GLIBC_2.0 mount F -GLIBC_2.0 mprobe F -GLIBC_2.0 mprotect F -GLIBC_2.0 mrand48 F -GLIBC_2.0 mrand48_r F -GLIBC_2.0 mremap F -GLIBC_2.0 msgctl F -GLIBC_2.0 msgget F -GLIBC_2.0 msgrcv F -GLIBC_2.0 msgsnd F -GLIBC_2.0 msync F -GLIBC_2.0 mtrace F -GLIBC_2.0 munlock F -GLIBC_2.0 munlockall F -GLIBC_2.0 munmap F -GLIBC_2.0 muntrace F -GLIBC_2.0 nanosleep F -GLIBC_2.0 nfsservctl F -GLIBC_2.0 nice F -GLIBC_2.0 nl_langinfo F -GLIBC_2.0 nrand48 F -GLIBC_2.0 nrand48_r F -GLIBC_2.0 ntohl F -GLIBC_2.0 ntohs F -GLIBC_2.0 obstack_alloc_failed_handler D 0x4 -GLIBC_2.0 obstack_exit_failure D 0x4 -GLIBC_2.0 obstack_free F -GLIBC_2.0 obstack_printf F -GLIBC_2.0 obstack_vprintf F -GLIBC_2.0 on_exit F -GLIBC_2.0 open F -GLIBC_2.0 open_memstream F -GLIBC_2.0 opendir F -GLIBC_2.0 openlog F -GLIBC_2.0 optarg D 0x4 -GLIBC_2.0 opterr D 0x4 -GLIBC_2.0 optind D 0x4 -GLIBC_2.0 optopt D 0x4 -GLIBC_2.0 parse_printf_format F -GLIBC_2.0 pathconf F -GLIBC_2.0 pause F -GLIBC_2.0 pclose F -GLIBC_2.0 perror F -GLIBC_2.0 personality F -GLIBC_2.0 pipe F -GLIBC_2.0 pmap_getmaps F -GLIBC_2.0 pmap_getport F -GLIBC_2.0 pmap_rmtcall F -GLIBC_2.0 pmap_set F -GLIBC_2.0 pmap_unset F -GLIBC_2.0 poll F -GLIBC_2.0 popen F -GLIBC_2.0 prctl F -GLIBC_2.0 printf F -GLIBC_2.0 profil F -GLIBC_2.0 program_invocation_name D 0x4 -GLIBC_2.0 program_invocation_short_name D 0x4 -GLIBC_2.0 pselect F -GLIBC_2.0 psignal F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 ptrace F -GLIBC_2.0 putc F -GLIBC_2.0 putc_unlocked F -GLIBC_2.0 putchar F -GLIBC_2.0 putchar_unlocked F -GLIBC_2.0 putenv F -GLIBC_2.0 putpwent F -GLIBC_2.0 puts F -GLIBC_2.0 putspent F -GLIBC_2.0 pututline F -GLIBC_2.0 putw F -GLIBC_2.0 pvalloc F -GLIBC_2.0 qecvt F -GLIBC_2.0 qecvt_r F -GLIBC_2.0 qfcvt F -GLIBC_2.0 qfcvt_r F -GLIBC_2.0 qgcvt F -GLIBC_2.0 qsort F -GLIBC_2.0 query_module F -GLIBC_2.0 quotactl F -GLIBC_2.0 raise F -GLIBC_2.0 rand F -GLIBC_2.0 rand_r F -GLIBC_2.0 random F -GLIBC_2.0 random_r F -GLIBC_2.0 rcmd F -GLIBC_2.0 re_comp F -GLIBC_2.0 re_compile_fastmap F -GLIBC_2.0 re_compile_pattern F -GLIBC_2.0 re_exec F -GLIBC_2.0 re_match F -GLIBC_2.0 re_match_2 F -GLIBC_2.0 re_max_failures D 0x4 -GLIBC_2.0 re_search F -GLIBC_2.0 re_search_2 F -GLIBC_2.0 re_set_registers F -GLIBC_2.0 re_set_syntax F -GLIBC_2.0 re_syntax_options D 0x4 -GLIBC_2.0 read F -GLIBC_2.0 readdir F -GLIBC_2.0 readdir_r F -GLIBC_2.0 readlink F -GLIBC_2.0 readv F -GLIBC_2.0 realloc F -GLIBC_2.0 realpath F -GLIBC_2.0 reboot F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 regcomp F -GLIBC_2.0 regerror F -GLIBC_2.0 regexec F -GLIBC_2.0 regfree F -GLIBC_2.0 register_printf_function F -GLIBC_2.0 registerrpc F -GLIBC_2.0 remove F -GLIBC_2.0 remque F -GLIBC_2.0 rename F -GLIBC_2.0 res_init F -GLIBC_2.0 revoke F -GLIBC_2.0 rewind F -GLIBC_2.0 rewinddir F -GLIBC_2.0 rexec F -GLIBC_2.0 rexecoptions D 0x4 -GLIBC_2.0 rindex F -GLIBC_2.0 rmdir F -GLIBC_2.0 rpc_createerr D 0x10 -GLIBC_2.0 rpmatch F -GLIBC_2.0 rresvport F -GLIBC_2.0 ruserok F -GLIBC_2.0 ruserpass F -GLIBC_2.0 sbrk F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 scandir F -GLIBC_2.0 scanf F -GLIBC_2.0 sched_get_priority_max F -GLIBC_2.0 sched_get_priority_min F -GLIBC_2.0 sched_getparam F -GLIBC_2.0 sched_getscheduler F -GLIBC_2.0 sched_rr_get_interval F -GLIBC_2.0 sched_setparam F -GLIBC_2.0 sched_setscheduler F -GLIBC_2.0 sched_yield F -GLIBC_2.0 seed48 F -GLIBC_2.0 seed48_r F -GLIBC_2.0 seekdir F -GLIBC_2.0 select F -GLIBC_2.0 semctl F -GLIBC_2.0 semget F -GLIBC_2.0 semop F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 setaliasent F -GLIBC_2.0 setbuf F -GLIBC_2.0 setbuffer F -GLIBC_2.0 setcontext F -GLIBC_2.0 setdomainname F -GLIBC_2.0 setegid F -GLIBC_2.0 setenv F -GLIBC_2.0 seteuid F -GLIBC_2.0 setfsent F -GLIBC_2.0 setfsgid F -GLIBC_2.0 setfsuid F -GLIBC_2.0 setgid F -GLIBC_2.0 setgrent F -GLIBC_2.0 setgroups F -GLIBC_2.0 sethostent F -GLIBC_2.0 sethostid F -GLIBC_2.0 sethostname F -GLIBC_2.0 setitimer F -GLIBC_2.0 setjmp F -GLIBC_2.0 setlinebuf F -GLIBC_2.0 setlocale F -GLIBC_2.0 setlogin F -GLIBC_2.0 setlogmask F -GLIBC_2.0 setmntent F -GLIBC_2.0 setnetent F -GLIBC_2.0 setnetgrent F -GLIBC_2.0 setpgid F -GLIBC_2.0 setpgrp F -GLIBC_2.0 setpriority F -GLIBC_2.0 setprotoent F -GLIBC_2.0 setpwent F -GLIBC_2.0 setregid F -GLIBC_2.0 setresgid F -GLIBC_2.0 setresuid F -GLIBC_2.0 setreuid F -GLIBC_2.0 setrlimit F -GLIBC_2.0 setrpcent F -GLIBC_2.0 setservent F -GLIBC_2.0 setsid F -GLIBC_2.0 setsockopt F -GLIBC_2.0 setspent F -GLIBC_2.0 setstate F -GLIBC_2.0 setstate_r F -GLIBC_2.0 settimeofday F -GLIBC_2.0 setttyent F -GLIBC_2.0 setuid F -GLIBC_2.0 setusershell F -GLIBC_2.0 setutent F -GLIBC_2.0 setvbuf F -GLIBC_2.0 sgetspent F -GLIBC_2.0 sgetspent_r F -GLIBC_2.0 shmat F -GLIBC_2.0 shmctl F -GLIBC_2.0 shmdt F -GLIBC_2.0 shmget F -GLIBC_2.0 shutdown F -GLIBC_2.0 sigaction F -GLIBC_2.0 sigaddset F -GLIBC_2.0 sigaltstack F -GLIBC_2.0 sigandset F -GLIBC_2.0 sigblock F -GLIBC_2.0 sigdelset F -GLIBC_2.0 sigemptyset F -GLIBC_2.0 sigfillset F -GLIBC_2.0 siggetmask F -GLIBC_2.0 siginterrupt F -GLIBC_2.0 sigisemptyset F -GLIBC_2.0 sigismember F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 signal F -GLIBC_2.0 sigorset F -GLIBC_2.0 sigpause F -GLIBC_2.0 sigpending F -GLIBC_2.0 sigprocmask F -GLIBC_2.0 sigreturn F -GLIBC_2.0 sigsetmask F -GLIBC_2.0 sigstack F -GLIBC_2.0 sigsuspend F -GLIBC_2.0 sigvec F -GLIBC_2.0 sigwait F -GLIBC_2.0 sleep F -GLIBC_2.0 snprintf F -GLIBC_2.0 socket F -GLIBC_2.0 socketpair F -GLIBC_2.0 sprintf F -GLIBC_2.0 srand F -GLIBC_2.0 srand48 F -GLIBC_2.0 srand48_r F -GLIBC_2.0 srandom F -GLIBC_2.0 srandom_r F -GLIBC_2.0 sscanf F -GLIBC_2.0 ssignal F -GLIBC_2.0 sstk F -GLIBC_2.0 statfs F -GLIBC_2.0 stderr D 0x4 -GLIBC_2.0 stdin D 0x4 -GLIBC_2.0 stdout D 0x4 -GLIBC_2.0 step F -GLIBC_2.0 stime F -GLIBC_2.0 stpcpy F -GLIBC_2.0 stpncpy F -GLIBC_2.0 strcasecmp F -GLIBC_2.0 strcat F -GLIBC_2.0 strchr F -GLIBC_2.0 strcmp F -GLIBC_2.0 strcoll F -GLIBC_2.0 strcpy F -GLIBC_2.0 strcspn F -GLIBC_2.0 strdup F -GLIBC_2.0 strerror F -GLIBC_2.0 strerror_r F -GLIBC_2.0 strfmon F -GLIBC_2.0 strfry F -GLIBC_2.0 strftime F -GLIBC_2.0 strlen F -GLIBC_2.0 strncasecmp F -GLIBC_2.0 strncat F -GLIBC_2.0 strncmp F -GLIBC_2.0 strncpy F -GLIBC_2.0 strndup F -GLIBC_2.0 strnlen F -GLIBC_2.0 strpbrk F -GLIBC_2.0 strptime F -GLIBC_2.0 strrchr F -GLIBC_2.0 strsep F -GLIBC_2.0 strsignal F -GLIBC_2.0 strspn F -GLIBC_2.0 strstr F -GLIBC_2.0 strtod F -GLIBC_2.0 strtof F -GLIBC_2.0 strtok F -GLIBC_2.0 strtok_r F -GLIBC_2.0 strtol F -GLIBC_2.0 strtold F -GLIBC_2.0 strtoll F -GLIBC_2.0 strtoq F -GLIBC_2.0 strtoul F -GLIBC_2.0 strtoull F -GLIBC_2.0 strtouq F -GLIBC_2.0 strxfrm F -GLIBC_2.0 stty F -GLIBC_2.0 svc_exit F -GLIBC_2.0 svc_fdset D 0x80 -GLIBC_2.0 svc_getreq F -GLIBC_2.0 svc_getreqset F -GLIBC_2.0 svc_register F -GLIBC_2.0 svc_run F -GLIBC_2.0 svc_sendreply F -GLIBC_2.0 svc_unregister F -GLIBC_2.0 svcauthdes_stats D 0xc -GLIBC_2.0 svcerr_auth F -GLIBC_2.0 svcerr_decode F -GLIBC_2.0 svcerr_noproc F -GLIBC_2.0 svcerr_noprog F -GLIBC_2.0 svcerr_progvers F -GLIBC_2.0 svcerr_systemerr F -GLIBC_2.0 svcerr_weakauth F -GLIBC_2.0 svcfd_create F -GLIBC_2.0 svcraw_create F -GLIBC_2.0 svctcp_create F -GLIBC_2.0 svcudp_bufcreate F -GLIBC_2.0 svcudp_create F -GLIBC_2.0 svcudp_enablecache F -GLIBC_2.0 swab F -GLIBC_2.0 swapoff F -GLIBC_2.0 swapon F -GLIBC_2.0 symlink F -GLIBC_2.0 sync F -GLIBC_2.0 sys_errlist D 0x1ec -GLIBC_2.0 sys_nerr D 0x4 -GLIBC_2.0 sys_sigabbrev D 0x80 -GLIBC_2.0 sys_siglist D 0x80 -GLIBC_2.0 syscall F -GLIBC_2.0 sysconf F -GLIBC_2.0 sysctl F -GLIBC_2.0 sysinfo F -GLIBC_2.0 syslog F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 tcflow F -GLIBC_2.0 tcflush F -GLIBC_2.0 tcgetattr F -GLIBC_2.0 tcgetpgrp F -GLIBC_2.0 tcsendbreak F -GLIBC_2.0 tcsetattr F -GLIBC_2.0 tcsetpgrp F -GLIBC_2.0 tdelete F -GLIBC_2.0 telldir F -GLIBC_2.0 tempnam F -GLIBC_2.0 textdomain F -GLIBC_2.0 tfind F -GLIBC_2.0 time F -GLIBC_2.0 timegm F -GLIBC_2.0 timelocal F -GLIBC_2.0 times F -GLIBC_2.0 timezone D 0x4 -GLIBC_2.0 tmpfile F -GLIBC_2.0 tmpnam F -GLIBC_2.0 tmpnam_r F -GLIBC_2.0 toascii F -GLIBC_2.0 tolower F -GLIBC_2.0 toupper F -GLIBC_2.0 towctrans F -GLIBC_2.0 towlower F -GLIBC_2.0 towupper F -GLIBC_2.0 tr_break F -GLIBC_2.0 truncate F -GLIBC_2.0 tsearch F -GLIBC_2.0 ttyname F -GLIBC_2.0 ttyname_r F -GLIBC_2.0 ttyslot F -GLIBC_2.0 twalk F -GLIBC_2.0 tzname D 0x8 -GLIBC_2.0 tzset F -GLIBC_2.0 ualarm F -GLIBC_2.0 ulckpwdf F -GLIBC_2.0 ulimit F -GLIBC_2.0 umask F -GLIBC_2.0 umount F -GLIBC_2.0 uname F -GLIBC_2.0 ungetc F -GLIBC_2.0 unlink F -GLIBC_2.0 unsetenv F -GLIBC_2.0 updwtmp F -GLIBC_2.0 uselib F -GLIBC_2.0 usleep F -GLIBC_2.0 ustat F -GLIBC_2.0 utime F -GLIBC_2.0 utimes F -GLIBC_2.0 utmpname F -GLIBC_2.0 valloc F -GLIBC_2.0 vasprintf F -GLIBC_2.0 vdprintf F -GLIBC_2.0 verr F -GLIBC_2.0 verrx F -GLIBC_2.0 vfork F -GLIBC_2.0 vfprintf F -GLIBC_2.0 vfscanf F -GLIBC_2.0 vhangup F -GLIBC_2.0 vlimit F -GLIBC_2.0 vprintf F -GLIBC_2.0 vscanf F -GLIBC_2.0 vsnprintf F -GLIBC_2.0 vsprintf F -GLIBC_2.0 vsscanf F -GLIBC_2.0 vsyslog F -GLIBC_2.0 vtimes F -GLIBC_2.0 vwarn F -GLIBC_2.0 vwarnx F -GLIBC_2.0 wait F -GLIBC_2.0 wait3 F -GLIBC_2.0 wait4 F -GLIBC_2.0 waitpid F -GLIBC_2.0 warn F -GLIBC_2.0 warnx F -GLIBC_2.0 wcpcpy F -GLIBC_2.0 wcpncpy F -GLIBC_2.0 wcrtomb F -GLIBC_2.0 wcscat F -GLIBC_2.0 wcschr F -GLIBC_2.0 wcscmp F -GLIBC_2.0 wcscoll F -GLIBC_2.0 wcscpy F -GLIBC_2.0 wcscspn F -GLIBC_2.0 wcsdup F -GLIBC_2.0 wcslen F -GLIBC_2.0 wcsncat F -GLIBC_2.0 wcsncmp F -GLIBC_2.0 wcsncpy F -GLIBC_2.0 wcsnrtombs F -GLIBC_2.0 wcspbrk F -GLIBC_2.0 wcsrchr F -GLIBC_2.0 wcsrtombs F -GLIBC_2.0 wcsspn F -GLIBC_2.0 wcsstr F -GLIBC_2.0 wcstod F -GLIBC_2.0 wcstof F -GLIBC_2.0 wcstok F -GLIBC_2.0 wcstol F -GLIBC_2.0 wcstold F -GLIBC_2.0 wcstombs F -GLIBC_2.0 wcstoq F -GLIBC_2.0 wcstoul F -GLIBC_2.0 wcstouq F -GLIBC_2.0 wcswidth F -GLIBC_2.0 wcsxfrm F -GLIBC_2.0 wctob F -GLIBC_2.0 wctomb F -GLIBC_2.0 wctrans F -GLIBC_2.0 wctype F -GLIBC_2.0 wcwidth F -GLIBC_2.0 wmemchr F -GLIBC_2.0 wmemcmp F -GLIBC_2.0 wmemcpy F -GLIBC_2.0 wmemmove F -GLIBC_2.0 wmemset F -GLIBC_2.0 write F -GLIBC_2.0 writev F -GLIBC_2.0 xdr_accepted_reply F -GLIBC_2.0 xdr_array F -GLIBC_2.0 xdr_authunix_parms F -GLIBC_2.0 xdr_bool F -GLIBC_2.0 xdr_bytes F -GLIBC_2.0 xdr_callhdr F -GLIBC_2.0 xdr_callmsg F -GLIBC_2.0 xdr_char F -GLIBC_2.0 xdr_cryptkeyarg F -GLIBC_2.0 xdr_cryptkeyarg2 F -GLIBC_2.0 xdr_cryptkeyres F -GLIBC_2.0 xdr_des_block F -GLIBC_2.0 xdr_double F -GLIBC_2.0 xdr_enum F -GLIBC_2.0 xdr_float F -GLIBC_2.0 xdr_free F -GLIBC_2.0 xdr_int F -GLIBC_2.0 xdr_key_netstarg F -GLIBC_2.0 xdr_key_netstres F -GLIBC_2.0 xdr_keybuf F -GLIBC_2.0 xdr_keystatus F -GLIBC_2.0 xdr_long F -GLIBC_2.0 xdr_netobj F -GLIBC_2.0 xdr_opaque F -GLIBC_2.0 xdr_opaque_auth F -GLIBC_2.0 xdr_pmap F -GLIBC_2.0 xdr_pmaplist F -GLIBC_2.0 xdr_pointer F -GLIBC_2.0 xdr_reference F -GLIBC_2.0 xdr_rejected_reply F -GLIBC_2.0 xdr_replymsg F -GLIBC_2.0 xdr_rmtcall_args F -GLIBC_2.0 xdr_rmtcallres F -GLIBC_2.0 xdr_short F -GLIBC_2.0 xdr_string F -GLIBC_2.0 xdr_u_char F -GLIBC_2.0 xdr_u_int F -GLIBC_2.0 xdr_u_long F -GLIBC_2.0 xdr_u_short F -GLIBC_2.0 xdr_union F -GLIBC_2.0 xdr_vector F -GLIBC_2.0 xdr_void F -GLIBC_2.0 xdr_wrapstring F -GLIBC_2.0 xdrmem_create F -GLIBC_2.0 xdrrec_create F -GLIBC_2.0 xdrrec_endofrecord F -GLIBC_2.0 xdrrec_eof F -GLIBC_2.0 xdrrec_skiprecord F -GLIBC_2.0 xdrstdio_create F -GLIBC_2.0 xencrypt F -GLIBC_2.0 xprt_register F -GLIBC_2.0 xprt_unregister F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 _IO_2_1_stderr_ D 0xa0 -GLIBC_2.1 _IO_2_1_stdin_ D 0xa0 -GLIBC_2.1 _IO_2_1_stdout_ D 0xa0 -GLIBC_2.1 _IO_do_write F -GLIBC_2.1 _IO_fclose F -GLIBC_2.1 _IO_fdopen F -GLIBC_2.1 _IO_fgetpos64 F -GLIBC_2.1 _IO_file_attach F -GLIBC_2.1 _IO_file_close_it F -GLIBC_2.1 _IO_file_finish F -GLIBC_2.1 _IO_file_fopen F -GLIBC_2.1 _IO_file_init F -GLIBC_2.1 _IO_file_overflow F -GLIBC_2.1 _IO_file_seekoff F -GLIBC_2.1 _IO_file_setbuf F -GLIBC_2.1 _IO_file_sync F -GLIBC_2.1 _IO_file_underflow F -GLIBC_2.1 _IO_file_write F -GLIBC_2.1 _IO_file_xsputn F -GLIBC_2.1 _IO_fopen F -GLIBC_2.1 _IO_fsetpos64 F -GLIBC_2.1 _IO_getline_info F -GLIBC_2.1 _IO_popen F -GLIBC_2.1 _IO_proc_close F -GLIBC_2.1 _IO_proc_open F -GLIBC_2.1 __asprintf F -GLIBC_2.1 __backtrace F -GLIBC_2.1 __backtrace_symbols F -GLIBC_2.1 __backtrace_symbols_fd F -GLIBC_2.1 __chown F -GLIBC_2.1 __duplocale F -GLIBC_2.1 __freelocale F -GLIBC_2.1 __fxstat64 F -GLIBC_2.1 __isalnum_l F -GLIBC_2.1 __isalpha_l F -GLIBC_2.1 __isascii_l F -GLIBC_2.1 __isblank_l F -GLIBC_2.1 __iscntrl_l F -GLIBC_2.1 __isdigit_l F -GLIBC_2.1 __isgraph_l F -GLIBC_2.1 __islower_l F -GLIBC_2.1 __isprint_l F -GLIBC_2.1 __ispunct_l F -GLIBC_2.1 __isspace_l F -GLIBC_2.1 __isupper_l F -GLIBC_2.1 __iswalnum_l F -GLIBC_2.1 __iswalpha_l F -GLIBC_2.1 __iswblank_l F -GLIBC_2.1 __iswcntrl_l F -GLIBC_2.1 __iswctype_l F -GLIBC_2.1 __iswdigit_l F -GLIBC_2.1 __iswgraph_l F -GLIBC_2.1 __iswlower_l F -GLIBC_2.1 __iswprint_l F -GLIBC_2.1 __iswpunct_l F -GLIBC_2.1 __iswspace_l F -GLIBC_2.1 __iswupper_l F -GLIBC_2.1 __iswxdigit_l F -GLIBC_2.1 __isxdigit_l F -GLIBC_2.1 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.1 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.1 __key_gendes_LOCAL D 0x4 -GLIBC_2.1 __libc_allocate_rtsig F -GLIBC_2.1 __libc_current_sigrtmax F -GLIBC_2.1 __libc_current_sigrtmin F -GLIBC_2.1 __libc_freeres F -GLIBC_2.1 __libc_sa_len F -GLIBC_2.1 __lxstat64 F -GLIBC_2.1 __newlocale F -GLIBC_2.1 __poll F -GLIBC_2.1 __pread64 F -GLIBC_2.1 __pwrite64 F -GLIBC_2.1 __rawmemchr F -GLIBC_2.1 __signbit F -GLIBC_2.1 __signbitf F -GLIBC_2.1 __strcasecmp_l F -GLIBC_2.1 __strcasestr F -GLIBC_2.1 __strcoll_l F -GLIBC_2.1 __strfmon_l F -GLIBC_2.1 __strncasecmp_l F -GLIBC_2.1 __strtod_l F -GLIBC_2.1 __strtof_l F -GLIBC_2.1 __strtol_l F -GLIBC_2.1 __strtold_l F -GLIBC_2.1 __strtoll_l F -GLIBC_2.1 __strtoul_l F -GLIBC_2.1 __strtoull_l F -GLIBC_2.1 __strxfrm_l F -GLIBC_2.1 __toascii_l F -GLIBC_2.1 __tolower_l F -GLIBC_2.1 __toupper_l F -GLIBC_2.1 __towctrans F -GLIBC_2.1 __towctrans_l F -GLIBC_2.1 __towlower_l F -GLIBC_2.1 __towupper_l F -GLIBC_2.1 __wcscasecmp_l F -GLIBC_2.1 __wcscoll_l F -GLIBC_2.1 __wcsncasecmp_l F -GLIBC_2.1 __wcstod_l F -GLIBC_2.1 __wcstof_l F -GLIBC_2.1 __wcstol_l F -GLIBC_2.1 __wcstold_l F -GLIBC_2.1 __wcstoll_l F -GLIBC_2.1 __wcstoul_l F -GLIBC_2.1 __wcstoull_l F -GLIBC_2.1 __wcsxfrm_l F -GLIBC_2.1 __wctype_l F -GLIBC_2.1 __xstat64 F -GLIBC_2.1 _authenticate F -GLIBC_2.1 _dl_mcount_wrapper F -GLIBC_2.1 _dl_mcount_wrapper_check F -GLIBC_2.1 _sys_errlist D 0x1f4 -GLIBC_2.1 _sys_nerr D 0x4 -GLIBC_2.1 _sys_siglist D 0x100 -GLIBC_2.1 addseverity F -GLIBC_2.1 alphasort64 F -GLIBC_2.1 argp_err_exit_status D 0x4 -GLIBC_2.1 argp_error F -GLIBC_2.1 argp_failure F -GLIBC_2.1 argp_help F -GLIBC_2.1 argp_parse F -GLIBC_2.1 argp_program_bug_address D 0x4 -GLIBC_2.1 argp_program_version D 0x4 -GLIBC_2.1 argp_program_version_hook D 0x4 -GLIBC_2.1 argp_state_help F -GLIBC_2.1 argp_usage F -GLIBC_2.1 authdes_create F -GLIBC_2.1 authdes_getucred F -GLIBC_2.1 authdes_pk_create F -GLIBC_2.1 backtrace F -GLIBC_2.1 backtrace_symbols F -GLIBC_2.1 backtrace_symbols_fd F -GLIBC_2.1 capget F -GLIBC_2.1 capset F -GLIBC_2.1 cbc_crypt F -GLIBC_2.1 chown F -GLIBC_2.1 clntunix_create F -GLIBC_2.1 creat64 F -GLIBC_2.1 des_setparity F -GLIBC_2.1 ecb_crypt F -GLIBC_2.1 endutxent F -GLIBC_2.1 fattach F -GLIBC_2.1 fclose F -GLIBC_2.1 fdetach F -GLIBC_2.1 fdopen F -GLIBC_2.1 ffsl F -GLIBC_2.1 ffsll F -GLIBC_2.1 fgetc_unlocked F -GLIBC_2.1 fgetpos64 F -GLIBC_2.1 fgets_unlocked F -GLIBC_2.1 fmtmsg F -GLIBC_2.1 fopen F -GLIBC_2.1 fopen64 F -GLIBC_2.1 fputs_unlocked F -GLIBC_2.1 fread_unlocked F -GLIBC_2.1 freopen64 F -GLIBC_2.1 fseeko F -GLIBC_2.1 fseeko64 F -GLIBC_2.1 fsetpos64 F -GLIBC_2.1 fstatfs64 F -GLIBC_2.1 fstatvfs F -GLIBC_2.1 fstatvfs64 F -GLIBC_2.1 ftello F -GLIBC_2.1 ftello64 F -GLIBC_2.1 ftruncate64 F -GLIBC_2.1 ftw64 F -GLIBC_2.1 fwrite_unlocked F -GLIBC_2.1 gai_strerror F -GLIBC_2.1 getcontext F -GLIBC_2.1 getdate F -GLIBC_2.1 getdate_err D 0x4 -GLIBC_2.1 getdate_r F -GLIBC_2.1 getmsg F -GLIBC_2.1 getnameinfo F -GLIBC_2.1 getnetname F -GLIBC_2.1 getpmsg F -GLIBC_2.1 getpt F -GLIBC_2.1 getrlimit64 F -GLIBC_2.1 getutxent F -GLIBC_2.1 getutxid F -GLIBC_2.1 getutxline F -GLIBC_2.1 glob64 F -GLIBC_2.1 globfree64 F -GLIBC_2.1 gnu_get_libc_release F -GLIBC_2.1 gnu_get_libc_version F -GLIBC_2.1 grantpt F -GLIBC_2.1 host2netname F -GLIBC_2.1 iconv F -GLIBC_2.1 iconv_close F -GLIBC_2.1 iconv_open F -GLIBC_2.1 if_freenameindex F -GLIBC_2.1 if_indextoname F -GLIBC_2.1 if_nameindex F -GLIBC_2.1 if_nametoindex F -GLIBC_2.1 in6addr_any D 0x10 -GLIBC_2.1 in6addr_loopback D 0x10 -GLIBC_2.1 isastream F -GLIBC_2.1 iswblank F -GLIBC_2.1 key_decryptsession F -GLIBC_2.1 key_decryptsession_pk F -GLIBC_2.1 key_encryptsession F -GLIBC_2.1 key_encryptsession_pk F -GLIBC_2.1 key_gendes F -GLIBC_2.1 key_get_conv F -GLIBC_2.1 key_secretkey_is_set F -GLIBC_2.1 key_setnet F -GLIBC_2.1 key_setsecret F -GLIBC_2.1 lockf64 F -GLIBC_2.1 lseek64 F -GLIBC_2.1 makecontext F -GLIBC_2.1 mempcpy F -GLIBC_2.1 mmap64 F -GLIBC_2.1 netname2host F -GLIBC_2.1 netname2user F -GLIBC_2.1 nftw F -GLIBC_2.1 nftw64 F -GLIBC_2.1 ntp_adjtime F -GLIBC_2.1 ntp_gettime F -GLIBC_2.1 open64 F -GLIBC_2.1 passwd2des F -GLIBC_2.1 pclose F -GLIBC_2.1 popen F -GLIBC_2.1 pread F -GLIBC_2.1 pread64 F -GLIBC_2.1 printf_size F -GLIBC_2.1 printf_size_info F -GLIBC_2.1 pthread_attr_init F -GLIBC_2.1 ptsname F -GLIBC_2.1 ptsname_r F -GLIBC_2.1 putgrent F -GLIBC_2.1 putmsg F -GLIBC_2.1 putpmsg F -GLIBC_2.1 pututxline F -GLIBC_2.1 pwrite F -GLIBC_2.1 pwrite64 F -GLIBC_2.1 rawmemchr F -GLIBC_2.1 readdir64 F -GLIBC_2.1 readdir64_r F -GLIBC_2.1 rtime F -GLIBC_2.1 scandir64 F -GLIBC_2.1 sendfile F -GLIBC_2.1 setrlimit64 F -GLIBC_2.1 setutxent F -GLIBC_2.1 sighold F -GLIBC_2.1 sigignore F -GLIBC_2.1 sigqueue F -GLIBC_2.1 sigrelse F -GLIBC_2.1 sigset F -GLIBC_2.1 sigtimedwait F -GLIBC_2.1 sigwaitinfo F -GLIBC_2.1 statfs64 F -GLIBC_2.1 statvfs F -GLIBC_2.1 statvfs64 F -GLIBC_2.1 strcasestr F -GLIBC_2.1 strtoimax F -GLIBC_2.1 strtoumax F -GLIBC_2.1 strverscmp F -GLIBC_2.1 svcunix_create F -GLIBC_2.1 svcunixfd_create F -GLIBC_2.1 swapcontext F -GLIBC_2.1 sys_errlist D 0x1f4 -GLIBC_2.1 sys_nerr D 0x4 -GLIBC_2.1 sys_sigabbrev D 0x100 -GLIBC_2.1 sys_siglist D 0x100 -GLIBC_2.1 sysv_signal F -GLIBC_2.1 tcgetsid F -GLIBC_2.1 tdestroy F -GLIBC_2.1 tmpfile F -GLIBC_2.1 tmpfile64 F -GLIBC_2.1 truncate64 F -GLIBC_2.1 umount2 F -GLIBC_2.1 unlockpt F -GLIBC_2.1 updwtmpx F -GLIBC_2.1 user2netname F -GLIBC_2.1 utmpxname F -GLIBC_2.1 versionsort F -GLIBC_2.1 versionsort64 F -GLIBC_2.1 waitid F -GLIBC_2.1 wcscasecmp F -GLIBC_2.1 wcsncasecmp F -GLIBC_2.1 wcsnlen F -GLIBC_2.1 wcstoimax F -GLIBC_2.1 wcstoll F -GLIBC_2.1 wcstoull F -GLIBC_2.1 wcstoumax F -GLIBC_2.1 wcswcs F -GLIBC_2.1 wordexp F -GLIBC_2.1 wordfree F -GLIBC_2.1 xdecrypt F -GLIBC_2.1 xdr_authdes_cred F -GLIBC_2.1 xdr_authdes_verf F -GLIBC_2.1 xdr_getcredres F -GLIBC_2.1 xdr_int16_t F -GLIBC_2.1 xdr_int32_t F -GLIBC_2.1 xdr_int8_t F -GLIBC_2.1 xdr_netnamestr F -GLIBC_2.1 xdr_sizeof F -GLIBC_2.1 xdr_uint16_t F -GLIBC_2.1 xdr_uint32_t F -GLIBC_2.1 xdr_uint8_t F -GLIBC_2.1 xdr_unixcred F -GLIBC_2.1.1 GLIBC_2.1.1 A -GLIBC_2.1.1 _Exit F -GLIBC_2.1.1 __mempcpy_small F -GLIBC_2.1.1 __stpcpy_small F -GLIBC_2.1.1 __strcpy_small F -GLIBC_2.1.1 __strcspn_c1 F -GLIBC_2.1.1 __strcspn_c2 F -GLIBC_2.1.1 __strcspn_c3 F -GLIBC_2.1.1 __strpbrk_c2 F -GLIBC_2.1.1 __strpbrk_c3 F -GLIBC_2.1.1 __strsep_1c F -GLIBC_2.1.1 __strsep_2c F -GLIBC_2.1.1 __strsep_3c F -GLIBC_2.1.1 __strsep_g F -GLIBC_2.1.1 __strspn_c1 F -GLIBC_2.1.1 __strspn_c2 F -GLIBC_2.1.1 __strspn_c3 F -GLIBC_2.1.1 __strtok_r_1c F -GLIBC_2.1.1 __strverscmp F -GLIBC_2.1.1 getutmp F -GLIBC_2.1.1 getutmpx F -GLIBC_2.1.1 imaxabs F -GLIBC_2.1.1 imaxdiv F -GLIBC_2.1.1 strchrnul F -GLIBC_2.1.1 xdr_hyper F -GLIBC_2.1.1 xdr_int64_t F -GLIBC_2.1.1 xdr_longlong_t F -GLIBC_2.1.1 xdr_u_hyper F -GLIBC_2.1.1 xdr_u_longlong_t F -GLIBC_2.1.1 xdr_uint64_t F -GLIBC_2.1.2 GLIBC_2.1.2 A -GLIBC_2.1.2 __vfork F -GLIBC_2.1.2 getaliasbyname_r F -GLIBC_2.1.2 getaliasent_r F -GLIBC_2.1.2 getgrent_r F -GLIBC_2.1.2 getgrgid_r F -GLIBC_2.1.2 getgrnam_r F -GLIBC_2.1.2 gethostbyaddr_r F -GLIBC_2.1.2 gethostbyname2_r F -GLIBC_2.1.2 gethostbyname_r F -GLIBC_2.1.2 gethostent_r F -GLIBC_2.1.2 getnetbyaddr_r F -GLIBC_2.1.2 getnetbyname_r F -GLIBC_2.1.2 getnetent_r F -GLIBC_2.1.2 getprotobyname_r F -GLIBC_2.1.2 getprotobynumber_r F -GLIBC_2.1.2 getprotoent_r F -GLIBC_2.1.2 getpwent_r F -GLIBC_2.1.2 getpwnam_r F -GLIBC_2.1.2 getpwuid_r F -GLIBC_2.1.2 getrpcbyname_r F -GLIBC_2.1.2 getrpcbynumber_r F -GLIBC_2.1.2 getrpcent_r F -GLIBC_2.1.2 getservbyname_r F -GLIBC_2.1.2 getservbyport_r F -GLIBC_2.1.2 getservent_r F -GLIBC_2.1.2 getspent_r F -GLIBC_2.1.2 getspnam_r F -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 __cxa_atexit F -GLIBC_2.1.3 __cxa_finalize F -GLIBC_2.1.3 __sigsuspend F -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 fallocate64 F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _sys_errlist D 0x21c -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x21c -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.19 GLIBC_2.19 A -GLIBC_2.19 __longjmp_chk F -GLIBC_2.19 __sigsetjmp F -GLIBC_2.19 _longjmp F -GLIBC_2.19 _setjmp F -GLIBC_2.19 getcontext F -GLIBC_2.19 longjmp F -GLIBC_2.19 setjmp F -GLIBC_2.19 siglongjmp F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0x54 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 __assert F -GLIBC_2.2 __ctype32_tolower D 0x4 -GLIBC_2.2 __ctype32_toupper D 0x4 -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpurge F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __open64 F -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_state F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __statfs F -GLIBC_2.2 __strndup F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _res_hconf D 0x30 -GLIBC_2.2 alphasort64 F -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 dcngettext F -GLIBC_2.2 dngettext F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwscanf F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getrlimit F -GLIBC_2.2 getrlimit64 F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 iruserok_af F -GLIBC_2.2 localeconv F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 memrchr F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 moncontrol F -GLIBC_2.2 msgctl F -GLIBC_2.2 ngettext F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 scandir64 F -GLIBC_2.2 semctl F -GLIBC_2.2 setrlimit F -GLIBC_2.2 shmctl F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x4 -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 ungetwc F -GLIBC_2.2 versionsort64 F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wprintf F -GLIBC_2.2 wscanf F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 _sys_errlist D 0x1f8 -GLIBC_2.3 _sys_nerr D 0x4 -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoll_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strtoull_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 sys_errlist D 0x1f8 -GLIBC_2.3 sys_nerr D 0x4 -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x104 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 posix_fadvise64 F -GLIBC_2.3.3 posix_fallocate64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 sys_sigabbrev D 0x104 -GLIBC_2.3.3 sys_siglist D 0x104 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 _IO_fprintf F -GLIBC_2.4 _IO_printf F -GLIBC_2.4 _IO_sprintf F -GLIBC_2.4 _IO_sscanf F -GLIBC_2.4 _IO_vfprintf F -GLIBC_2.4 _IO_vfscanf F -GLIBC_2.4 _IO_vsprintf F -GLIBC_2.4 __asprintf F -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fprintf_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __isinfl F -GLIBC_2.4 __isnanl F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __nldbl__IO_fprintf F -GLIBC_2.4 __nldbl__IO_printf F -GLIBC_2.4 __nldbl__IO_sprintf F -GLIBC_2.4 __nldbl__IO_sscanf F -GLIBC_2.4 __nldbl__IO_vfprintf F -GLIBC_2.4 __nldbl__IO_vfscanf F -GLIBC_2.4 __nldbl__IO_vsprintf F -GLIBC_2.4 __nldbl___asprintf F -GLIBC_2.4 __nldbl___fprintf_chk F -GLIBC_2.4 __nldbl___fwprintf_chk F -GLIBC_2.4 __nldbl___printf_chk F -GLIBC_2.4 __nldbl___printf_fp F -GLIBC_2.4 __nldbl___snprintf_chk F -GLIBC_2.4 __nldbl___sprintf_chk F -GLIBC_2.4 __nldbl___strfmon_l F -GLIBC_2.4 __nldbl___swprintf_chk F -GLIBC_2.4 __nldbl___syslog_chk F -GLIBC_2.4 __nldbl___vfprintf_chk F -GLIBC_2.4 __nldbl___vfscanf F -GLIBC_2.4 __nldbl___vfwprintf_chk F -GLIBC_2.4 __nldbl___vprintf_chk F -GLIBC_2.4 __nldbl___vsnprintf F -GLIBC_2.4 __nldbl___vsnprintf_chk F -GLIBC_2.4 __nldbl___vsprintf_chk F -GLIBC_2.4 __nldbl___vsscanf F -GLIBC_2.4 __nldbl___vstrfmon F -GLIBC_2.4 __nldbl___vstrfmon_l F -GLIBC_2.4 __nldbl___vswprintf_chk F -GLIBC_2.4 __nldbl___vsyslog_chk F -GLIBC_2.4 __nldbl___vwprintf_chk F -GLIBC_2.4 __nldbl___wprintf_chk F -GLIBC_2.4 __nldbl_asprintf F -GLIBC_2.4 __nldbl_dprintf F -GLIBC_2.4 __nldbl_fprintf F -GLIBC_2.4 __nldbl_fscanf F -GLIBC_2.4 __nldbl_fwprintf F -GLIBC_2.4 __nldbl_fwscanf F -GLIBC_2.4 __nldbl_obstack_printf F -GLIBC_2.4 __nldbl_obstack_vprintf F -GLIBC_2.4 __nldbl_printf F -GLIBC_2.4 __nldbl_printf_size F -GLIBC_2.4 __nldbl_scanf F -GLIBC_2.4 __nldbl_snprintf F -GLIBC_2.4 __nldbl_sprintf F -GLIBC_2.4 __nldbl_sscanf F -GLIBC_2.4 __nldbl_strfmon F -GLIBC_2.4 __nldbl_strfmon_l F -GLIBC_2.4 __nldbl_swprintf F -GLIBC_2.4 __nldbl_swscanf F -GLIBC_2.4 __nldbl_syslog F -GLIBC_2.4 __nldbl_vasprintf F -GLIBC_2.4 __nldbl_vdprintf F -GLIBC_2.4 __nldbl_vfprintf F -GLIBC_2.4 __nldbl_vfscanf F -GLIBC_2.4 __nldbl_vfwprintf F -GLIBC_2.4 __nldbl_vfwscanf F -GLIBC_2.4 __nldbl_vprintf F -GLIBC_2.4 __nldbl_vscanf F -GLIBC_2.4 __nldbl_vsnprintf F -GLIBC_2.4 __nldbl_vsprintf F -GLIBC_2.4 __nldbl_vsscanf F -GLIBC_2.4 __nldbl_vswprintf F -GLIBC_2.4 __nldbl_vswscanf F -GLIBC_2.4 __nldbl_vsyslog F -GLIBC_2.4 __nldbl_vwprintf F -GLIBC_2.4 __nldbl_vwscanf F -GLIBC_2.4 __nldbl_wprintf F -GLIBC_2.4 __nldbl_wscanf F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __printf_chk F -GLIBC_2.4 __printf_fp F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __signbitl F -GLIBC_2.4 __snprintf_chk F -GLIBC_2.4 __sprintf_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __strfmon_l F -GLIBC_2.4 __strtold_internal F -GLIBC_2.4 __strtold_l F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfprintf_chk F -GLIBC_2.4 __vfscanf F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vprintf_chk F -GLIBC_2.4 __vsnprintf F -GLIBC_2.4 __vsnprintf_chk F -GLIBC_2.4 __vsprintf_chk F -GLIBC_2.4 __vsscanf F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstold_internal F -GLIBC_2.4 __wcstold_l F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 _sys_errlist D 0x210 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 asprintf F -GLIBC_2.4 copysignl F -GLIBC_2.4 dprintf F -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 finitel F -GLIBC_2.4 fprintf F -GLIBC_2.4 frexpl F -GLIBC_2.4 fscanf F -GLIBC_2.4 futimesat F -GLIBC_2.4 fwprintf F -GLIBC_2.4 fwscanf F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 isinfl F -GLIBC_2.4 isnanl F -GLIBC_2.4 ldexpl F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 modfl F -GLIBC_2.4 obstack_printf F -GLIBC_2.4 obstack_vprintf F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 printf F -GLIBC_2.4 printf_size F -GLIBC_2.4 qecvt F -GLIBC_2.4 qecvt_r F -GLIBC_2.4 qfcvt F -GLIBC_2.4 qfcvt_r F -GLIBC_2.4 qgcvt F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 scalbnl F -GLIBC_2.4 scanf F -GLIBC_2.4 snprintf F -GLIBC_2.4 sprintf F -GLIBC_2.4 sscanf F -GLIBC_2.4 strfmon F -GLIBC_2.4 strfmon_l F -GLIBC_2.4 strtold F -GLIBC_2.4 strtold_l F -GLIBC_2.4 swprintf F -GLIBC_2.4 swscanf F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sys_errlist D 0x210 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 syslog F -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.4 vasprintf F -GLIBC_2.4 vdprintf F -GLIBC_2.4 vfprintf F -GLIBC_2.4 vfscanf F -GLIBC_2.4 vfwprintf F -GLIBC_2.4 vfwscanf F -GLIBC_2.4 vprintf F -GLIBC_2.4 vscanf F -GLIBC_2.4 vsnprintf F -GLIBC_2.4 vsprintf F -GLIBC_2.4 vsscanf F -GLIBC_2.4 vswprintf F -GLIBC_2.4 vswscanf F -GLIBC_2.4 vsyslog F -GLIBC_2.4 vwprintf F -GLIBC_2.4 vwscanf F -GLIBC_2.4 wcstold F -GLIBC_2.4 wcstold_l F -GLIBC_2.4 wprintf F -GLIBC_2.4 wscanf F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __nldbl___isoc99_fscanf F -GLIBC_2.7 __nldbl___isoc99_fwscanf F -GLIBC_2.7 __nldbl___isoc99_scanf F -GLIBC_2.7 __nldbl___isoc99_sscanf F -GLIBC_2.7 __nldbl___isoc99_swscanf F -GLIBC_2.7 __nldbl___isoc99_vfscanf F -GLIBC_2.7 __nldbl___isoc99_vfwscanf F -GLIBC_2.7 __nldbl___isoc99_vscanf F -GLIBC_2.7 __nldbl___isoc99_vsscanf F -GLIBC_2.7 __nldbl___isoc99_vswscanf F -GLIBC_2.7 __nldbl___isoc99_vwscanf F -GLIBC_2.7 __nldbl___isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __nldbl___asprintf_chk F -GLIBC_2.8 __nldbl___dprintf_chk F -GLIBC_2.8 __nldbl___obstack_printf_chk F -GLIBC_2.8 __nldbl___obstack_vprintf_chk F -GLIBC_2.8 __nldbl___vasprintf_chk F -GLIBC_2.8 __nldbl___vdprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 getutent F -GLIBC_2.9 getutent_r F -GLIBC_2.9 getutid F -GLIBC_2.9 getutid_r F -GLIBC_2.9 getutline F -GLIBC_2.9 getutline_r F -GLIBC_2.9 getutmp F -GLIBC_2.9 getutmpx F -GLIBC_2.9 getutxent F -GLIBC_2.9 getutxid F -GLIBC_2.9 getutxline F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F -GLIBC_2.9 pututline F -GLIBC_2.9 pututxline F -GLIBC_2.9 updwtmp F -GLIBC_2.9 updwtmpx F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libcrypt.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libcrypt.abilist deleted file mode 100644 index 4db2639336..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 crypt F -GLIBC_2.0 crypt_r F -GLIBC_2.0 encrypt F -GLIBC_2.0 encrypt_r F -GLIBC_2.0 fcrypt F -GLIBC_2.0 setkey F -GLIBC_2.0 setkey_r F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libdl.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libdl.abilist deleted file mode 100644 index 5536f6e0a9..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libdl.abilist +++ /dev/null @@ -1,14 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 dladdr F -GLIBC_2.0 dlclose F -GLIBC_2.0 dlerror F -GLIBC_2.0 dlopen F -GLIBC_2.0 dlsym F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 dlopen F -GLIBC_2.1 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist deleted file mode 100644 index 604dff18d4..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist +++ /dev/null @@ -1,565 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _LIB_VERSION D 0x4 -GLIBC_2.0 acos F -GLIBC_2.0 acosf F -GLIBC_2.0 acosh F -GLIBC_2.0 acoshf F -GLIBC_2.0 acoshl F -GLIBC_2.0 acosl F -GLIBC_2.0 asin F -GLIBC_2.0 asinf F -GLIBC_2.0 asinh F -GLIBC_2.0 asinhf F -GLIBC_2.0 asinhl F -GLIBC_2.0 asinl F -GLIBC_2.0 atan F -GLIBC_2.0 atan2 F -GLIBC_2.0 atan2f F -GLIBC_2.0 atan2l F -GLIBC_2.0 atanf F -GLIBC_2.0 atanh F -GLIBC_2.0 atanhf F -GLIBC_2.0 atanhl F -GLIBC_2.0 atanl F -GLIBC_2.0 cbrt F -GLIBC_2.0 cbrtf F -GLIBC_2.0 cbrtl F -GLIBC_2.0 ceil F -GLIBC_2.0 ceilf F -GLIBC_2.0 ceill F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 copysignl F -GLIBC_2.0 cos F -GLIBC_2.0 cosf F -GLIBC_2.0 cosh F -GLIBC_2.0 coshf F -GLIBC_2.0 coshl F -GLIBC_2.0 cosl F -GLIBC_2.0 drem F -GLIBC_2.0 dremf F -GLIBC_2.0 dreml F -GLIBC_2.0 erf F -GLIBC_2.0 erfc F -GLIBC_2.0 erfcf F -GLIBC_2.0 erfcl F -GLIBC_2.0 erff F -GLIBC_2.0 erfl F -GLIBC_2.0 exp F -GLIBC_2.0 expf F -GLIBC_2.0 expl F -GLIBC_2.0 expm1 F -GLIBC_2.0 expm1f F -GLIBC_2.0 expm1l F -GLIBC_2.0 fabs F -GLIBC_2.0 fabsf F -GLIBC_2.0 fabsl F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 floor F -GLIBC_2.0 floorf F -GLIBC_2.0 floorl F -GLIBC_2.0 fmod F -GLIBC_2.0 fmodf F -GLIBC_2.0 fmodl F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 gamma F -GLIBC_2.0 gammaf F -GLIBC_2.0 gammal F -GLIBC_2.0 hypot F -GLIBC_2.0 hypotf F -GLIBC_2.0 hypotl F -GLIBC_2.0 ilogb F -GLIBC_2.0 ilogbf F -GLIBC_2.0 ilogbl F -GLIBC_2.0 j0 F -GLIBC_2.0 j0f F -GLIBC_2.0 j0l F -GLIBC_2.0 j1 F -GLIBC_2.0 j1f F -GLIBC_2.0 j1l F -GLIBC_2.0 jn F -GLIBC_2.0 jnf F -GLIBC_2.0 jnl F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 lgamma F -GLIBC_2.0 lgamma_r F -GLIBC_2.0 lgammaf F -GLIBC_2.0 lgammaf_r F -GLIBC_2.0 lgammal F -GLIBC_2.0 lgammal_r F -GLIBC_2.0 log F -GLIBC_2.0 log10 F -GLIBC_2.0 log10f F -GLIBC_2.0 log10l F -GLIBC_2.0 log1p F -GLIBC_2.0 log1pf F -GLIBC_2.0 log1pl F -GLIBC_2.0 logb F -GLIBC_2.0 logbf F -GLIBC_2.0 logbl F -GLIBC_2.0 logf F -GLIBC_2.0 logl F -GLIBC_2.0 matherr F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 nextafter F -GLIBC_2.0 nextafterf F -GLIBC_2.0 nextafterl F -GLIBC_2.0 pow F -GLIBC_2.0 powf F -GLIBC_2.0 powl F -GLIBC_2.0 remainder F -GLIBC_2.0 remainderf F -GLIBC_2.0 remainderl F -GLIBC_2.0 rint F -GLIBC_2.0 rintf F -GLIBC_2.0 rintl F -GLIBC_2.0 scalb F -GLIBC_2.0 scalbf F -GLIBC_2.0 scalbl F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 signgam D 0x4 -GLIBC_2.0 significand F -GLIBC_2.0 significandf F -GLIBC_2.0 significandl F -GLIBC_2.0 sin F -GLIBC_2.0 sinf F -GLIBC_2.0 sinh F -GLIBC_2.0 sinhf F -GLIBC_2.0 sinhl F -GLIBC_2.0 sinl F -GLIBC_2.0 sqrt F -GLIBC_2.0 sqrtf F -GLIBC_2.0 sqrtl F -GLIBC_2.0 tan F -GLIBC_2.0 tanf F -GLIBC_2.0 tanh F -GLIBC_2.0 tanhf F -GLIBC_2.0 tanhl F -GLIBC_2.0 tanl F -GLIBC_2.0 y0 F -GLIBC_2.0 y0f F -GLIBC_2.0 y0l F -GLIBC_2.0 y1 F -GLIBC_2.0 y1f F -GLIBC_2.0 y1l F -GLIBC_2.0 yn F -GLIBC_2.0 ynf F -GLIBC_2.0 ynl F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __clog10 F -GLIBC_2.1 __clog10f F -GLIBC_2.1 __clog10l F -GLIBC_2.1 __finite F -GLIBC_2.1 __finitef F -GLIBC_2.1 __finitel F -GLIBC_2.1 __fpclassify F -GLIBC_2.1 __fpclassifyf F -GLIBC_2.1 __signbit F -GLIBC_2.1 __signbitf F -GLIBC_2.1 cabs F -GLIBC_2.1 cabsf F -GLIBC_2.1 cabsl F -GLIBC_2.1 cacos F -GLIBC_2.1 cacosf F -GLIBC_2.1 cacosh F -GLIBC_2.1 cacoshf F -GLIBC_2.1 cacoshl F -GLIBC_2.1 cacosl F -GLIBC_2.1 carg F -GLIBC_2.1 cargf F -GLIBC_2.1 cargl F -GLIBC_2.1 casin F -GLIBC_2.1 casinf F -GLIBC_2.1 casinh F -GLIBC_2.1 casinhf F -GLIBC_2.1 casinhl F -GLIBC_2.1 casinl F -GLIBC_2.1 catan F -GLIBC_2.1 catanf F -GLIBC_2.1 catanh F -GLIBC_2.1 catanhf F -GLIBC_2.1 catanhl F -GLIBC_2.1 catanl F -GLIBC_2.1 ccos F -GLIBC_2.1 ccosf F -GLIBC_2.1 ccosh F -GLIBC_2.1 ccoshf F -GLIBC_2.1 ccoshl F -GLIBC_2.1 ccosl F -GLIBC_2.1 cexp F -GLIBC_2.1 cexpf F -GLIBC_2.1 cexpl F -GLIBC_2.1 cimag F -GLIBC_2.1 cimagf F -GLIBC_2.1 cimagl F -GLIBC_2.1 clog F -GLIBC_2.1 clog10 F -GLIBC_2.1 clog10f F -GLIBC_2.1 clog10l F -GLIBC_2.1 clogf F -GLIBC_2.1 clogl F -GLIBC_2.1 conj F -GLIBC_2.1 conjf F -GLIBC_2.1 conjl F -GLIBC_2.1 cpow F -GLIBC_2.1 cpowf F -GLIBC_2.1 cpowl F -GLIBC_2.1 cproj F -GLIBC_2.1 cprojf F -GLIBC_2.1 cprojl F -GLIBC_2.1 creal F -GLIBC_2.1 crealf F -GLIBC_2.1 creall F -GLIBC_2.1 csin F -GLIBC_2.1 csinf F -GLIBC_2.1 csinh F -GLIBC_2.1 csinhf F -GLIBC_2.1 csinhl F -GLIBC_2.1 csinl F -GLIBC_2.1 csqrt F -GLIBC_2.1 csqrtf F -GLIBC_2.1 csqrtl F -GLIBC_2.1 ctan F -GLIBC_2.1 ctanf F -GLIBC_2.1 ctanh F -GLIBC_2.1 ctanhf F -GLIBC_2.1 ctanhl F -GLIBC_2.1 ctanl F -GLIBC_2.1 exp10 F -GLIBC_2.1 exp10f F -GLIBC_2.1 exp10l F -GLIBC_2.1 exp2 F -GLIBC_2.1 exp2f F -GLIBC_2.1 fdim F -GLIBC_2.1 fdimf F -GLIBC_2.1 fdiml F -GLIBC_2.1 feclearexcept F -GLIBC_2.1 fegetenv F -GLIBC_2.1 fegetexceptflag F -GLIBC_2.1 fegetround F -GLIBC_2.1 feholdexcept F -GLIBC_2.1 feraiseexcept F -GLIBC_2.1 fesetenv F -GLIBC_2.1 fesetexceptflag F -GLIBC_2.1 fesetround F -GLIBC_2.1 fetestexcept F -GLIBC_2.1 feupdateenv F -GLIBC_2.1 fma F -GLIBC_2.1 fmaf F -GLIBC_2.1 fmal F -GLIBC_2.1 fmax F -GLIBC_2.1 fmaxf F -GLIBC_2.1 fmaxl F -GLIBC_2.1 fmin F -GLIBC_2.1 fminf F -GLIBC_2.1 fminl F -GLIBC_2.1 llrint F -GLIBC_2.1 llrintf F -GLIBC_2.1 llrintl F -GLIBC_2.1 llround F -GLIBC_2.1 llroundf F -GLIBC_2.1 llroundl F -GLIBC_2.1 log2 F -GLIBC_2.1 log2f F -GLIBC_2.1 log2l F -GLIBC_2.1 lrint F -GLIBC_2.1 lrintf F -GLIBC_2.1 lrintl F -GLIBC_2.1 lround F -GLIBC_2.1 lroundf F -GLIBC_2.1 lroundl F -GLIBC_2.1 nan F -GLIBC_2.1 nanf F -GLIBC_2.1 nanl F -GLIBC_2.1 nearbyint F -GLIBC_2.1 nearbyintf F -GLIBC_2.1 nearbyintl F -GLIBC_2.1 nexttoward F -GLIBC_2.1 nexttowardf F -GLIBC_2.1 nexttowardl F -GLIBC_2.1 pow10 F -GLIBC_2.1 pow10f F -GLIBC_2.1 pow10l F -GLIBC_2.1 remquo F -GLIBC_2.1 remquof F -GLIBC_2.1 remquol F -GLIBC_2.1 round F -GLIBC_2.1 roundf F -GLIBC_2.1 roundl F -GLIBC_2.1 scalbln F -GLIBC_2.1 scalblnf F -GLIBC_2.1 scalblnl F -GLIBC_2.1 sincos F -GLIBC_2.1 sincosf F -GLIBC_2.1 sincosl F -GLIBC_2.1 tgamma F -GLIBC_2.1 tgammaf F -GLIBC_2.1 tgammal F -GLIBC_2.1 trunc F -GLIBC_2.1 truncf F -GLIBC_2.1 truncl F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __acoshl_finite F -GLIBC_2.15 __acosl_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __asinl_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atan2l_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __atanhl_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __coshl_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp10l_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp2l_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __expl_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __fmodl_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __gammal_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __hypotl_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j0l_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __j1l_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __jnl_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __lgammal_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log10l_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log2l_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __logl_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __powl_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __remainderl_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __scalbl_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sinhl_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __sqrtl_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y0l_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __y1l_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.15 __ynl_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 fedisableexcept F -GLIBC_2.2 feenableexcept F -GLIBC_2.2 fegetexcept F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __clog10l F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fpclassifyl F -GLIBC_2.4 __nldbl_nexttowardf F -GLIBC_2.4 __signbitl F -GLIBC_2.4 acoshl F -GLIBC_2.4 acosl F -GLIBC_2.4 asinhl F -GLIBC_2.4 asinl F -GLIBC_2.4 atan2l F -GLIBC_2.4 atanhl F -GLIBC_2.4 atanl F -GLIBC_2.4 cabsl F -GLIBC_2.4 cacoshl F -GLIBC_2.4 cacosl F -GLIBC_2.4 cargl F -GLIBC_2.4 casinhl F -GLIBC_2.4 casinl F -GLIBC_2.4 catanhl F -GLIBC_2.4 catanl F -GLIBC_2.4 cbrtl F -GLIBC_2.4 ccoshl F -GLIBC_2.4 ccosl F -GLIBC_2.4 ceill F -GLIBC_2.4 cexpl F -GLIBC_2.4 cimagl F -GLIBC_2.4 clog10l F -GLIBC_2.4 clogl F -GLIBC_2.4 conjl F -GLIBC_2.4 copysignl F -GLIBC_2.4 coshl F -GLIBC_2.4 cosl F -GLIBC_2.4 cpowl F -GLIBC_2.4 cprojl F -GLIBC_2.4 creall F -GLIBC_2.4 csinhl F -GLIBC_2.4 csinl F -GLIBC_2.4 csqrtl F -GLIBC_2.4 ctanhl F -GLIBC_2.4 ctanl F -GLIBC_2.4 dreml F -GLIBC_2.4 erfcl F -GLIBC_2.4 erfl F -GLIBC_2.4 exp10l F -GLIBC_2.4 exp2l F -GLIBC_2.4 expl F -GLIBC_2.4 expm1l F -GLIBC_2.4 fabsl F -GLIBC_2.4 fdiml F -GLIBC_2.4 finitel F -GLIBC_2.4 floorl F -GLIBC_2.4 fmal F -GLIBC_2.4 fmaxl F -GLIBC_2.4 fminl F -GLIBC_2.4 fmodl F -GLIBC_2.4 frexpl F -GLIBC_2.4 gammal F -GLIBC_2.4 hypotl F -GLIBC_2.4 ilogbl F -GLIBC_2.4 j0l F -GLIBC_2.4 j1l F -GLIBC_2.4 jnl F -GLIBC_2.4 ldexpl F -GLIBC_2.4 lgammal F -GLIBC_2.4 lgammal_r F -GLIBC_2.4 llrintl F -GLIBC_2.4 llroundl F -GLIBC_2.4 log10l F -GLIBC_2.4 log1pl F -GLIBC_2.4 log2l F -GLIBC_2.4 logbl F -GLIBC_2.4 logl F -GLIBC_2.4 lrintl F -GLIBC_2.4 lroundl F -GLIBC_2.4 modfl F -GLIBC_2.4 nanl F -GLIBC_2.4 nearbyintl F -GLIBC_2.4 nextafterl F -GLIBC_2.4 nexttoward F -GLIBC_2.4 nexttowardf F -GLIBC_2.4 nexttowardl F -GLIBC_2.4 pow10l F -GLIBC_2.4 powl F -GLIBC_2.4 remainderl F -GLIBC_2.4 remquol F -GLIBC_2.4 rintl F -GLIBC_2.4 roundl F -GLIBC_2.4 scalbl F -GLIBC_2.4 scalblnl F -GLIBC_2.4 scalbnl F -GLIBC_2.4 significandl F -GLIBC_2.4 sincosl F -GLIBC_2.4 sinhl F -GLIBC_2.4 sinl F -GLIBC_2.4 sqrtl F -GLIBC_2.4 tanhl F -GLIBC_2.4 tanl F -GLIBC_2.4 tgammal F -GLIBC_2.4 truncl F -GLIBC_2.4 y0l F -GLIBC_2.4 y1l F -GLIBC_2.4 ynl F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libnsl.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libnsl.abilist deleted file mode 100644 index a23db2aeaf..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libnsl.abilist +++ /dev/null @@ -1,124 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __yp_check F -GLIBC_2.0 xdr_domainname F -GLIBC_2.0 xdr_keydat F -GLIBC_2.0 xdr_mapname F -GLIBC_2.0 xdr_peername F -GLIBC_2.0 xdr_valdat F -GLIBC_2.0 xdr_yp_buf F -GLIBC_2.0 xdr_ypbind_binding F -GLIBC_2.0 xdr_ypbind_resp F -GLIBC_2.0 xdr_ypbind_resptype F -GLIBC_2.0 xdr_ypbind_setdom F -GLIBC_2.0 xdr_ypdelete_args F -GLIBC_2.0 xdr_ypmap_parms F -GLIBC_2.0 xdr_ypmaplist F -GLIBC_2.0 xdr_yppush_status F -GLIBC_2.0 xdr_yppushresp_xfr F -GLIBC_2.0 xdr_ypreq_key F -GLIBC_2.0 xdr_ypreq_nokey F -GLIBC_2.0 xdr_ypreq_xfr F -GLIBC_2.0 xdr_ypresp_all F -GLIBC_2.0 xdr_ypresp_key_val F -GLIBC_2.0 xdr_ypresp_maplist F -GLIBC_2.0 xdr_ypresp_master F -GLIBC_2.0 xdr_ypresp_order F -GLIBC_2.0 xdr_ypresp_val F -GLIBC_2.0 xdr_ypresp_xfr F -GLIBC_2.0 xdr_ypstat F -GLIBC_2.0 xdr_ypupdate_args F -GLIBC_2.0 xdr_ypxfrstat F -GLIBC_2.0 yp_all F -GLIBC_2.0 yp_bind F -GLIBC_2.0 yp_first F -GLIBC_2.0 yp_get_default_domain F -GLIBC_2.0 yp_maplist F -GLIBC_2.0 yp_master F -GLIBC_2.0 yp_match F -GLIBC_2.0 yp_next F -GLIBC_2.0 yp_order F -GLIBC_2.0 yp_unbind F -GLIBC_2.0 yp_update F -GLIBC_2.0 ypbinderr_string F -GLIBC_2.0 yperr_string F -GLIBC_2.0 ypprot_err F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __free_fdresult F -GLIBC_2.1 __nis_default_access F -GLIBC_2.1 __nis_default_group F -GLIBC_2.1 __nis_default_owner F -GLIBC_2.1 __nis_default_ttl F -GLIBC_2.1 __nis_finddirectory F -GLIBC_2.1 __nis_hash F -GLIBC_2.1 __nisbind_connect F -GLIBC_2.1 __nisbind_create F -GLIBC_2.1 __nisbind_destroy F -GLIBC_2.1 __nisbind_next F -GLIBC_2.1 nis_add F -GLIBC_2.1 nis_add_entry F -GLIBC_2.1 nis_addmember F -GLIBC_2.1 nis_checkpoint F -GLIBC_2.1 nis_clone_directory F -GLIBC_2.1 nis_clone_object F -GLIBC_2.1 nis_clone_result F -GLIBC_2.1 nis_creategroup F -GLIBC_2.1 nis_destroy_object F -GLIBC_2.1 nis_destroygroup F -GLIBC_2.1 nis_dir_cmp F -GLIBC_2.1 nis_domain_of F -GLIBC_2.1 nis_domain_of_r F -GLIBC_2.1 nis_first_entry F -GLIBC_2.1 nis_free_directory F -GLIBC_2.1 nis_free_object F -GLIBC_2.1 nis_free_request F -GLIBC_2.1 nis_freenames F -GLIBC_2.1 nis_freeresult F -GLIBC_2.1 nis_freeservlist F -GLIBC_2.1 nis_freetags F -GLIBC_2.1 nis_getnames F -GLIBC_2.1 nis_getservlist F -GLIBC_2.1 nis_ismember F -GLIBC_2.1 nis_leaf_of F -GLIBC_2.1 nis_leaf_of_r F -GLIBC_2.1 nis_lerror F -GLIBC_2.1 nis_list F -GLIBC_2.1 nis_local_directory F -GLIBC_2.1 nis_local_group F -GLIBC_2.1 nis_local_host F -GLIBC_2.1 nis_local_principal F -GLIBC_2.1 nis_lookup F -GLIBC_2.1 nis_mkdir F -GLIBC_2.1 nis_modify F -GLIBC_2.1 nis_modify_entry F -GLIBC_2.1 nis_name_of F -GLIBC_2.1 nis_name_of_r F -GLIBC_2.1 nis_next_entry F -GLIBC_2.1 nis_perror F -GLIBC_2.1 nis_ping F -GLIBC_2.1 nis_print_directory F -GLIBC_2.1 nis_print_entry F -GLIBC_2.1 nis_print_group F -GLIBC_2.1 nis_print_group_entry F -GLIBC_2.1 nis_print_link F -GLIBC_2.1 nis_print_object F -GLIBC_2.1 nis_print_result F -GLIBC_2.1 nis_print_rights F -GLIBC_2.1 nis_print_table F -GLIBC_2.1 nis_read_obj F -GLIBC_2.1 nis_remove F -GLIBC_2.1 nis_remove_entry F -GLIBC_2.1 nis_removemember F -GLIBC_2.1 nis_rmdir F -GLIBC_2.1 nis_servstate F -GLIBC_2.1 nis_sperrno F -GLIBC_2.1 nis_sperror F -GLIBC_2.1 nis_sperror_r F -GLIBC_2.1 nis_stats F -GLIBC_2.1 nis_verifygroup F -GLIBC_2.1 nis_write_obj F -GLIBC_2.1 readColdStartFile F -GLIBC_2.1 writeColdStartFile F -GLIBC_2.1 xdr_cback_data F -GLIBC_2.1 xdr_obj_p F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 xdr_ypall F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist deleted file mode 100644 index 3c5e11aafe..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist +++ /dev/null @@ -1,260 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 __close F -GLIBC_2.0 __connect F -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __fork F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __lseek F -GLIBC_2.0 __open F -GLIBC_2.0 __pthread_getspecific F -GLIBC_2.0 __pthread_key_create F -GLIBC_2.0 __pthread_mutex_destroy F -GLIBC_2.0 __pthread_mutex_init F -GLIBC_2.0 __pthread_mutex_lock F -GLIBC_2.0 __pthread_mutex_trylock F -GLIBC_2.0 __pthread_mutex_unlock F -GLIBC_2.0 __pthread_mutexattr_destroy F -GLIBC_2.0 __pthread_mutexattr_init F -GLIBC_2.0 __pthread_mutexattr_settype F -GLIBC_2.0 __pthread_once F -GLIBC_2.0 __pthread_setspecific F -GLIBC_2.0 __read F -GLIBC_2.0 __send F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __wait F -GLIBC_2.0 __write F -GLIBC_2.0 _pthread_cleanup_pop F -GLIBC_2.0 _pthread_cleanup_pop_restore F -GLIBC_2.0 _pthread_cleanup_push F -GLIBC_2.0 _pthread_cleanup_push_defer F -GLIBC_2.0 accept F -GLIBC_2.0 close F -GLIBC_2.0 connect F -GLIBC_2.0 fcntl F -GLIBC_2.0 flockfile F -GLIBC_2.0 fork F -GLIBC_2.0 fsync F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 funlockfile F -GLIBC_2.0 longjmp F -GLIBC_2.0 lseek F -GLIBC_2.0 msync F -GLIBC_2.0 nanosleep F -GLIBC_2.0 open F -GLIBC_2.0 pause F -GLIBC_2.0 pthread_atfork F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cancel F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_create F -GLIBC_2.0 pthread_detach F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_getspecific F -GLIBC_2.0 pthread_join F -GLIBC_2.0 pthread_key_create F -GLIBC_2.0 pthread_key_delete F -GLIBC_2.0 pthread_kill F -GLIBC_2.0 pthread_kill_other_threads_np F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_trylock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_mutexattr_destroy F -GLIBC_2.0 pthread_mutexattr_getkind_np F -GLIBC_2.0 pthread_mutexattr_init F -GLIBC_2.0 pthread_mutexattr_setkind_np F -GLIBC_2.0 pthread_once F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 pthread_setspecific F -GLIBC_2.0 pthread_sigmask F -GLIBC_2.0 pthread_testcancel F -GLIBC_2.0 raise F -GLIBC_2.0 read F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 sem_destroy F -GLIBC_2.0 sem_getvalue F -GLIBC_2.0 sem_init F -GLIBC_2.0 sem_post F -GLIBC_2.0 sem_trywait F -GLIBC_2.0 sem_wait F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 sigaction F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 sigwait F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 vfork F -GLIBC_2.0 wait F -GLIBC_2.0 waitpid F -GLIBC_2.0 write F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __libc_allocate_rtsig F -GLIBC_2.1 __libc_current_sigrtmax F -GLIBC_2.1 __libc_current_sigrtmin F -GLIBC_2.1 pthread_attr_getguardsize F -GLIBC_2.1 pthread_attr_getstackaddr F -GLIBC_2.1 pthread_attr_getstacksize F -GLIBC_2.1 pthread_attr_init F -GLIBC_2.1 pthread_attr_setguardsize F -GLIBC_2.1 pthread_attr_setstackaddr F -GLIBC_2.1 pthread_attr_setstacksize F -GLIBC_2.1 pthread_create F -GLIBC_2.1 pthread_getconcurrency F -GLIBC_2.1 pthread_mutexattr_gettype F -GLIBC_2.1 pthread_mutexattr_settype F -GLIBC_2.1 pthread_rwlock_destroy F -GLIBC_2.1 pthread_rwlock_init F -GLIBC_2.1 pthread_rwlock_rdlock F -GLIBC_2.1 pthread_rwlock_tryrdlock F -GLIBC_2.1 pthread_rwlock_trywrlock F -GLIBC_2.1 pthread_rwlock_unlock F -GLIBC_2.1 pthread_rwlock_wrlock F -GLIBC_2.1 pthread_rwlockattr_destroy F -GLIBC_2.1 pthread_rwlockattr_getkind_np F -GLIBC_2.1 pthread_rwlockattr_getpshared F -GLIBC_2.1 pthread_rwlockattr_init F -GLIBC_2.1 pthread_rwlockattr_setkind_np F -GLIBC_2.1 pthread_rwlockattr_setpshared F -GLIBC_2.1 pthread_setconcurrency F -GLIBC_2.1 sem_destroy F -GLIBC_2.1 sem_getvalue F -GLIBC_2.1 sem_init F -GLIBC_2.1 sem_post F -GLIBC_2.1 sem_trywait F -GLIBC_2.1 sem_wait F -GLIBC_2.1.1 GLIBC_2.1.1 A -GLIBC_2.1.1 sem_close F -GLIBC_2.1.1 sem_open F -GLIBC_2.1.1 sem_unlink F -GLIBC_2.1.2 GLIBC_2.1.2 A -GLIBC_2.1.2 __vfork F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.19 GLIBC_2.19 A -GLIBC_2.19 longjmp F -GLIBC_2.19 siglongjmp F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __open64 F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pthread_rwlock_destroy F -GLIBC_2.2 __pthread_rwlock_init F -GLIBC_2.2 __pthread_rwlock_rdlock F -GLIBC_2.2 __pthread_rwlock_tryrdlock F -GLIBC_2.2 __pthread_rwlock_trywrlock F -GLIBC_2.2 __pthread_rwlock_unlock F -GLIBC_2.2 __pthread_rwlock_wrlock F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __res_state F -GLIBC_2.2 lseek64 F -GLIBC_2.2 open64 F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 pthread_attr_getstack F -GLIBC_2.2 pthread_attr_setstack F -GLIBC_2.2 pthread_barrier_destroy F -GLIBC_2.2 pthread_barrier_init F -GLIBC_2.2 pthread_barrier_wait F -GLIBC_2.2 pthread_barrierattr_destroy F -GLIBC_2.2 pthread_barrierattr_init F -GLIBC_2.2 pthread_barrierattr_setpshared F -GLIBC_2.2 pthread_condattr_getpshared F -GLIBC_2.2 pthread_condattr_setpshared F -GLIBC_2.2 pthread_getcpuclockid F -GLIBC_2.2 pthread_mutex_timedlock F -GLIBC_2.2 pthread_mutexattr_getpshared F -GLIBC_2.2 pthread_mutexattr_setpshared F -GLIBC_2.2 pthread_rwlock_timedrdlock F -GLIBC_2.2 pthread_rwlock_timedwrlock F -GLIBC_2.2 pthread_spin_destroy F -GLIBC_2.2 pthread_spin_init F -GLIBC_2.2 pthread_spin_lock F -GLIBC_2.2 pthread_spin_trylock F -GLIBC_2.2 pthread_spin_unlock F -GLIBC_2.2 pthread_yield F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 sem_timedwait F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 pthread_getattr_np F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libresolv.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libresolv.abilist deleted file mode 100644 index 4d50e7c8c6..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libresolv.abilist +++ /dev/null @@ -1,100 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __b64_ntop F -GLIBC_2.0 __b64_pton F -GLIBC_2.0 __dn_comp F -GLIBC_2.0 __dn_count_labels F -GLIBC_2.0 __dn_skipname F -GLIBC_2.0 __fp_nquery F -GLIBC_2.0 __fp_query F -GLIBC_2.0 __fp_resstat F -GLIBC_2.0 __hostalias F -GLIBC_2.0 __loc_aton F -GLIBC_2.0 __loc_ntoa F -GLIBC_2.0 __p_cdname F -GLIBC_2.0 __p_cdnname F -GLIBC_2.0 __p_class F -GLIBC_2.0 __p_class_syms D 0x54 -GLIBC_2.0 __p_fqname F -GLIBC_2.0 __p_fqnname F -GLIBC_2.0 __p_option F -GLIBC_2.0 __p_query F -GLIBC_2.0 __p_secstodate F -GLIBC_2.0 __p_time F -GLIBC_2.0 __p_type F -GLIBC_2.0 __p_type_syms D 0x228 -GLIBC_2.0 __putlong F -GLIBC_2.0 __putshort F -GLIBC_2.0 __res_close F -GLIBC_2.0 __res_dnok F -GLIBC_2.0 __res_hnok F -GLIBC_2.0 __res_isourserver F -GLIBC_2.0 __res_mailok F -GLIBC_2.0 __res_nameinquery F -GLIBC_2.0 __res_ownok F -GLIBC_2.0 __res_queriesmatch F -GLIBC_2.0 __res_send F -GLIBC_2.0 __sym_ntop F -GLIBC_2.0 __sym_ntos F -GLIBC_2.0 __sym_ston F -GLIBC_2.0 _gethtbyaddr F -GLIBC_2.0 _gethtbyname F -GLIBC_2.0 _gethtbyname2 F -GLIBC_2.0 _gethtent F -GLIBC_2.0 _getlong F -GLIBC_2.0 _getshort F -GLIBC_2.0 _res_opcodes D 0x40 -GLIBC_2.0 _sethtent F -GLIBC_2.0 dn_expand F -GLIBC_2.0 inet_net_ntop F -GLIBC_2.0 inet_net_pton F -GLIBC_2.0 inet_neta F -GLIBC_2.0 res_gethostbyaddr F -GLIBC_2.0 res_gethostbyname F -GLIBC_2.0 res_gethostbyname2 F -GLIBC_2.0 res_mkquery F -GLIBC_2.0 res_query F -GLIBC_2.0 res_querydomain F -GLIBC_2.0 res_search F -GLIBC_2.0 res_send_setqhook F -GLIBC_2.0 res_send_setrhook F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __dn_expand F -GLIBC_2.2 __res_hostalias F -GLIBC_2.2 __res_mkquery F -GLIBC_2.2 __res_nmkquery F -GLIBC_2.2 __res_nquery F -GLIBC_2.2 __res_nquerydomain F -GLIBC_2.2 __res_nsearch F -GLIBC_2.2 __res_nsend F -GLIBC_2.2 __res_query F -GLIBC_2.2 __res_querydomain F -GLIBC_2.2 __res_search F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/librt.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/librt.abilist deleted file mode 100644 index 15e4418863..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/librt.abilist +++ /dev/null @@ -1,47 +0,0 @@ -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 aio_cancel F -GLIBC_2.1 aio_cancel64 F -GLIBC_2.1 aio_error F -GLIBC_2.1 aio_error64 F -GLIBC_2.1 aio_fsync F -GLIBC_2.1 aio_fsync64 F -GLIBC_2.1 aio_init F -GLIBC_2.1 aio_read F -GLIBC_2.1 aio_read64 F -GLIBC_2.1 aio_return F -GLIBC_2.1 aio_return64 F -GLIBC_2.1 aio_suspend F -GLIBC_2.1 aio_suspend64 F -GLIBC_2.1 aio_write F -GLIBC_2.1 aio_write64 F -GLIBC_2.1 lio_listio F -GLIBC_2.1 lio_listio64 F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 clock_getcpuclockid F -GLIBC_2.2 clock_getres F -GLIBC_2.2 clock_gettime F -GLIBC_2.2 clock_nanosleep F -GLIBC_2.2 clock_settime F -GLIBC_2.2 shm_open F -GLIBC_2.2 shm_unlink F -GLIBC_2.2 timer_create F -GLIBC_2.2 timer_delete F -GLIBC_2.2 timer_getoverrun F -GLIBC_2.2 timer_gettime F -GLIBC_2.2 timer_settime F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libthread_db.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libthread_db.abilist deleted file mode 100644 index a8a8c2c68d..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libthread_db.abilist +++ /dev/null @@ -1,44 +0,0 @@ -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 td_init F -GLIBC_2.1.3 td_log F -GLIBC_2.1.3 td_ta_clear_event F -GLIBC_2.1.3 td_ta_delete F -GLIBC_2.1.3 td_ta_enable_stats F -GLIBC_2.1.3 td_ta_event_addr F -GLIBC_2.1.3 td_ta_event_getmsg F -GLIBC_2.1.3 td_ta_get_nthreads F -GLIBC_2.1.3 td_ta_get_ph F -GLIBC_2.1.3 td_ta_get_stats F -GLIBC_2.1.3 td_ta_map_id2thr F -GLIBC_2.1.3 td_ta_map_lwp2thr F -GLIBC_2.1.3 td_ta_new F -GLIBC_2.1.3 td_ta_reset_stats F -GLIBC_2.1.3 td_ta_set_event F -GLIBC_2.1.3 td_ta_setconcurrency F -GLIBC_2.1.3 td_ta_thr_iter F -GLIBC_2.1.3 td_ta_tsd_iter F -GLIBC_2.1.3 td_thr_clear_event F -GLIBC_2.1.3 td_thr_dbresume F -GLIBC_2.1.3 td_thr_dbsuspend F -GLIBC_2.1.3 td_thr_event_enable F -GLIBC_2.1.3 td_thr_event_getmsg F -GLIBC_2.1.3 td_thr_get_info F -GLIBC_2.1.3 td_thr_getfpregs F -GLIBC_2.1.3 td_thr_getgregs F -GLIBC_2.1.3 td_thr_getxregs F -GLIBC_2.1.3 td_thr_getxregsize F -GLIBC_2.1.3 td_thr_set_event F -GLIBC_2.1.3 td_thr_setfpregs F -GLIBC_2.1.3 td_thr_setgregs F -GLIBC_2.1.3 td_thr_setprio F -GLIBC_2.1.3 td_thr_setsigpending F -GLIBC_2.1.3 td_thr_setxregs F -GLIBC_2.1.3 td_thr_sigsetmask F -GLIBC_2.1.3 td_thr_tsd F -GLIBC_2.1.3 td_thr_validate F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 td_symbol_list F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libutil.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libutil.abilist deleted file mode 100644 index 8a99773ccf..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libutil.abilist +++ /dev/null @@ -1,9 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 forkpty F -GLIBC_2.0 login F -GLIBC_2.0 login_tty F -GLIBC_2.0 logout F -GLIBC_2.0 logwtmp F -GLIBC_2.0 openpty F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 login F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c b/sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c deleted file mode 100644 index a88f5a784a..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/login.c b/sysdeps/unix/sysv/linux/s390/s390-32/login.c deleted file mode 100644 index c9fc8a4845..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/login.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -#include "utmp-compat.h" - -#undef weak_alias -#define weak_alias(n,a) -#define login __login -#include "login/login.c" -#undef login - -default_symbol_version (__login, login, UTMP_COMPAT_BASE); diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/login32.c b/sysdeps/unix/sysv/linux/s390/s390-32/login32.c deleted file mode 100644 index 339b13d900..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/login32.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include "utmp32.h" -#include "utmp-convert.h" - -/* Write the given entry into utmp and wtmp. */ -void -login32 (const struct utmp32 *entry) -{ - struct utmp in64; - - utmp_convert32to64 (entry, &in64); - login (&in64); -} - -symbol_version (login32, login, GLIBC_2.0); diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c b/sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c deleted file mode 100644 index 0efa0aea49..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/makecontext.c b/sysdeps/unix/sysv/linux/s390/s390-32/makecontext.c deleted file mode 100644 index de828fd8f3..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/makecontext.c +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* This implementation can handle any ARGC value but only - normal integer type parameters. Parameters of type float, - double, complex and structure with sizes 0, 2, 4 or 8 - won't work. - makecontext sets up a stack and the registers for the - user context. The stack looks like this: - size offset - %r15 -> +-----------------------+ - 4 | back chain (zero) | 0 - 4 | reserved | 4 - 88 | save area for (*func) | 8 - +-----------------------+ - n | overflow parameters | 96 - +-----------------------+ - The registers are set up like this: - %r2-%r6: parameters 1 to 5 - %r7 : (*func) pointer - %r8 : uc_link from ucontext structure - %r9 : address of setcontext - %r14 : return address to uc_link trampoline - %r15 : stack pointer. - - The trampoline looks like this: - basr %r14,%r7 - lr %r2,%r8 - br %r9. */ - -void -__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) -{ - extern void __makecontext_ret (void); - unsigned long int *sp; - va_list ap; - - sp = (unsigned long int *) (((unsigned long int) ucp->uc_stack.ss_sp - + ucp->uc_stack.ss_size) & -8L); - - /* Set the return address to trampoline. */ - ucp->uc_mcontext.gregs[14] = (long int) __makecontext_ret; - - /* Set register parameters. */ - va_start (ap, argc); - for (int i = 0; i < argc && i < 5; ++i) - ucp->uc_mcontext.gregs[2 + i] = va_arg (ap, long int); - - /* The remaining arguments go to the overflow area. */ - if (argc > 5) - { - sp -= argc - 5; - for (int i = 5; i < argc; ++i) - sp[i - 5] = va_arg (ap, long int); - } - va_end (ap); - - /* Make room for the save area and set the backchain. */ - sp -= 24; - *sp = 0; - - /* Pass (*func) to __makecontext_ret in %r7. */ - ucp->uc_mcontext.gregs[7] = (long int) func; - - /* Pass ucp->uc_link to __makecontext_ret in %r8. */ - ucp->uc_mcontext.gregs[8] = (long int) ucp->uc_link; - - /* Pass address of setcontext in %r9. */ - ucp->uc_mcontext.gregs[9] = (long int) &setcontext; - - /* Set stack pointer. */ - ucp->uc_mcontext.gregs[15] = (long int) sp; -} - -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/posix_fadvise64.c b/sysdeps/unix/sysv/linux/s390/s390-32/posix_fadvise64.c deleted file mode 100644 index 1ca2853b23..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/posix_fadvise64.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise); -int __posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise); - -/* Advice the system about the expected behaviour of the application with - respect to the file associated with FD. */ - -struct fadvise64_64_layout -{ - int fd; - off64_t offset; - off64_t len; - int advise; -}; - -int -__posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise) -{ - struct fadvise64_64_layout parameters; - INTERNAL_SYSCALL_DECL (err); - - parameters.fd = fd; - parameters.offset = offset; - parameters.len = len; - parameters.advise = advise; - int ret = INTERNAL_SYSCALL (fadvise64_64, err, 1, ¶meters); - if (!INTERNAL_SYSCALL_ERROR_P (ret, err)) - return 0; - return INTERNAL_SYSCALL_ERRNO (ret, err); -} - -#include - -#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) - -int -attribute_compat_text_section -__posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise) -{ - return __posix_fadvise64_l64 (fd, offset, len, advise); -} - -versioned_symbol (libc, __posix_fadvise64_l64, posix_fadvise64, GLIBC_2_3_3); -compat_symbol (libc, __posix_fadvise64_l32, posix_fadvise64, GLIBC_2_2); -#else -strong_alias (__posix_fadvise64_l64, posix_fadvise64); -#endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/profil-counter.h b/sysdeps/unix/sysv/linux/s390/s390-32/profil-counter.h deleted file mode 100644 index f84940787f..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/profil-counter.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Low-level statistical profiling support function. Linux/s390 version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -static void -__profil_counter (int signo, SIGCONTEXT scp) -{ - profil_count((void *) ((unsigned long) GET_PC (scp) & 0x7fffffffUL)); -} diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/pututxline.c b/sysdeps/unix/sysv/linux/s390/s390-32/pututxline.c deleted file mode 100644 index ca88836747..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/pututxline.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "utmp-compat.h" - -#undef weak_alias -#define weak_alias(n,a) -#define pututxline __pututxline -#include "login/pututxline.c" -#undef pututxline - -default_symbol_version (__pututxline, pututxline, UTMP_COMPAT_BASE); diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c b/sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c deleted file mode 100644 index 2ea26dd409..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c b/sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c deleted file mode 100644 index 9f54f897e3..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h b/sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h deleted file mode 100644 index 8a9ea87688..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h +++ /dev/null @@ -1,129 +0,0 @@ -/* Dump registers. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include <_itoa.h> - -/* We will print the register dump in this format: - - GPR0: XXXXXXXX GPR1: XXXXXXXX GPR2: XXXXXXXX GPR3: XXXXXXXX - GPR4: XXXXXXXX GPR5: XXXXXXXX GPR6: XXXXXXXX GPR7: XXXXXXXX - GPR8: XXXXXXXX GPR9: XXXXXXXX GPRA: XXXXXXXX GPRB: XXXXXXXX - GPRC: XXXXXXXX GPRD: XXXXXXXX GPRE: XXXXXXXX GPRF: XXXXXXXX - - PSW.MASK: XXXXXXXX PSW.ADDR: XXXXXXXX - - ST(0) XXXX XXXXXXXXXXXXXXXX ST(1) XXXX XXXXXXXXXXXXXXXX - ST(2) XXXX XXXXXXXXXXXXXXXX ST(3) XXXX XXXXXXXXXXXXXXXX - ST(4) XXXX XXXXXXXXXXXXXXXX ST(5) XXXX XXXXXXXXXXXXXXXX - ST(6) XXXX XXXXXXXXXXXXXXXX ST(7) XXXX XXXXXXXXXXXXXXXX - - */ - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -register_dump (int fd, struct sigcontext *ctx) -{ - char regs[19][8]; - struct iovec iov[40]; - size_t nr = 0; - -#define ADD_STRING(str) \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr -#define ADD_MEM(str, len) \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr - - /* Generate strings of register contents. */ - hexvalue (ctx->sregs->regs.gprs[0], regs[0], 8); - hexvalue (ctx->sregs->regs.gprs[1], regs[1], 8); - hexvalue (ctx->sregs->regs.gprs[2], regs[2], 8); - hexvalue (ctx->sregs->regs.gprs[3], regs[3], 8); - hexvalue (ctx->sregs->regs.gprs[4], regs[4], 8); - hexvalue (ctx->sregs->regs.gprs[5], regs[5], 8); - hexvalue (ctx->sregs->regs.gprs[6], regs[6], 8); - hexvalue (ctx->sregs->regs.gprs[7], regs[7], 8); - hexvalue (ctx->sregs->regs.gprs[8], regs[8], 8); - hexvalue (ctx->sregs->regs.gprs[9], regs[9], 8); - hexvalue (ctx->sregs->regs.gprs[10], regs[10], 8); - hexvalue (ctx->sregs->regs.gprs[11], regs[11], 8); - hexvalue (ctx->sregs->regs.gprs[12], regs[12], 8); - hexvalue (ctx->sregs->regs.gprs[13], regs[13], 8); - hexvalue (ctx->sregs->regs.gprs[14], regs[14], 8); - hexvalue (ctx->sregs->regs.gprs[15], regs[15], 8); - hexvalue (ctx->sregs->regs.psw.mask, regs[16], 8); - hexvalue (ctx->sregs->regs.psw.addr, regs[17], 8); - - /* Generate the output. */ - ADD_STRING ("Register dump:\n\n GPR0: "); - ADD_MEM (regs[0], 8); - ADD_STRING (" GPR1: "); - ADD_MEM (regs[1], 8); - ADD_STRING (" GPR2: "); - ADD_MEM (regs[2], 8); - ADD_STRING (" GPR3: "); - ADD_MEM (regs[3], 8); - ADD_STRING ("\n GPR4: "); - ADD_MEM (regs[4], 8); - ADD_STRING (" GPR5: "); - ADD_MEM (regs[5], 8); - ADD_STRING (" GPR6: "); - ADD_MEM (regs[6], 8); - ADD_STRING (" GPR7: "); - ADD_MEM (regs[7], 8); - ADD_STRING ("\n GPR8: "); - ADD_MEM (regs[8], 8); - ADD_STRING (" GPR9: "); - ADD_MEM (regs[9], 8); - ADD_STRING (" GPRA: "); - ADD_MEM (regs[10], 8); - ADD_STRING (" GPRB: "); - ADD_MEM (regs[11], 8); - ADD_STRING ("\n GPRC: "); - ADD_MEM (regs[12], 8); - ADD_STRING (" GPRD: "); - ADD_MEM (regs[13], 8); - ADD_STRING (" GPRE: "); - ADD_MEM (regs[14], 8); - ADD_STRING (" GPRF: "); - ADD_MEM (regs[15], 8); - ADD_STRING ("\n\n PSW.MASK: "); - ADD_MEM (regs[16], 8); - ADD_STRING (" PSW.ADDR: "); - ADD_MEM (regs[17], 8); - ADD_STRING (" TRAP: "); - ADD_MEM (regs[18], 4); - ADD_STRING ("\n"); - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, ctx) diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c b/sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c deleted file mode 100644 index 506fd8877c..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S b/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S deleted file mode 100644 index b70eef0cec..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "ucontext_i.h" - -/* __setcontext (const ucontext_t *ucp) - - Restores the machine context in UCP and thereby resumes execution - in that context. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to restore anything - other than the PRESERVED state. */ - -ENTRY(__setcontext) - lr %r1,%r2 - - /* rt_sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL, sigsetsize). */ - la %r2,SIG_SETMASK - la %r3,SC_MASK(%r1) - slr %r4,%r4 - lhi %r5,_NSIG8 - svc SYS_ify(rt_sigprocmask) - - /* Load fpu context. */ - lfpc SC_FPC(%r1) - ld %f0,SC_FPRS(%r1) - ld %f1,SC_FPRS+8(%r1) - ld %f2,SC_FPRS+16(%r1) - ld %f3,SC_FPRS+24(%r1) - ld %f4,SC_FPRS+32(%r1) - ld %f5,SC_FPRS+40(%r1) - ld %f6,SC_FPRS+48(%r1) - ld %f7,SC_FPRS+56(%r1) - ld %f8,SC_FPRS+64(%r1) - ld %f9,SC_FPRS+72(%r1) - ld %f10,SC_FPRS+80(%r1) - ld %f11,SC_FPRS+88(%r1) - ld %f12,SC_FPRS+96(%r1) - ld %f13,SC_FPRS+104(%r1) - ld %f14,SC_FPRS+112(%r1) - ld %f15,SC_FPRS+120(%r1) - - /* Don't touch %a0, used for thread purposes. */ - lam %a1,%a15,SC_ACRS+4(%r1) - - /* Load general purpose registers. */ - lm %r0,%r15,SC_GPRS(%r1) - - /* Return. */ - br %r14 -END(__setcontext) - -weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S b/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S deleted file mode 100644 index f08d30cd7f..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S +++ /dev/null @@ -1,108 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "ucontext_i.h" - -/* __swapcontext (ucontext_t *oucp, const ucontext_t *ucp) - - Saves the machine context in oucp such that when it is activated, - it appears as if __swapcontext() returned again, restores the - machine context in ucp and thereby resumes execution in that - context. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to save anything - other than the PRESERVED state. */ - -ENTRY(__swapcontext) - /* While not part of the ABI a system call never clobbers r0 - or r1. So keeping the values here while calling - rt_sigprocmask is ok. */ - lr %r1,%r2 - lr %r0,%r3 - - /* Store fpu context. */ - stfpc SC_FPC(%r1) - std %f0,SC_FPRS(%r1) - std %f1,SC_FPRS+8(%r1) - std %f2,SC_FPRS+16(%r1) - std %f3,SC_FPRS+24(%r1) - std %f4,SC_FPRS+32(%r1) - std %f5,SC_FPRS+40(%r1) - std %f6,SC_FPRS+48(%r1) - std %f7,SC_FPRS+56(%r1) - std %f8,SC_FPRS+64(%r1) - std %f9,SC_FPRS+72(%r1) - std %f10,SC_FPRS+80(%r1) - std %f11,SC_FPRS+88(%r1) - std %f12,SC_FPRS+96(%r1) - std %f13,SC_FPRS+104(%r1) - std %f14,SC_FPRS+112(%r1) - std %f15,SC_FPRS+120(%r1) - - /* Set __swapcontext return value to 0. */ - slr %r2,%r2 - - /* Store access registers. */ - stam %a0,%a15,SC_ACRS(%r1) - - /* Store general purpose registers. */ - stm %r0,%r15,SC_GPRS(%r1) - - /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, &oucp->uc_sigmask, - sigsetsize). */ - la %r2,SIG_SETMASK - lr %r5,%r0 - la %r3,SC_MASK(%r5) - la %r4,SC_MASK(%r1) - lhi %r5,_NSIG8 - svc SYS_ify(rt_sigprocmask) - - /* Load fpu context. */ - lr %r5,%r0 - lfpc SC_FPC(%r5) - ld %f0,SC_FPRS(%r5) - ld %f1,SC_FPRS+8(%r5) - ld %f2,SC_FPRS+16(%r5) - ld %f3,SC_FPRS+24(%r5) - ld %f4,SC_FPRS+32(%r5) - ld %f5,SC_FPRS+40(%r5) - ld %f6,SC_FPRS+48(%r5) - ld %f7,SC_FPRS+56(%r5) - ld %f8,SC_FPRS+64(%r5) - ld %f9,SC_FPRS+72(%r5) - ld %f10,SC_FPRS+80(%r5) - ld %f11,SC_FPRS+88(%r5) - ld %f12,SC_FPRS+96(%r5) - ld %f13,SC_FPRS+104(%r5) - ld %f14,SC_FPRS+112(%r5) - ld %f15,SC_FPRS+120(%r5) - - /* Don't touch %a0, used for thread purposes. */ - lam %a1,%a15,SC_ACRS+4(%r5) - - /* Load general purpose registers. */ - lm %r0,%r15,SC_GPRS(%r5) - - /* Return. */ - br %r14 -END(__swapcontext) -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S b/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S deleted file mode 100644 index 8506db1cc1..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Please consult the file sysdeps/unix/sysv/linux/s390/sysdep.h for - more information about the value -4095 used below.*/ - -ENTRY (syscall) - /* Save registers and setup stack. */ - stm %r6,%r15,24(%r15) /* save registers */ - cfi_offset (%r15, -36) - cfi_offset (%r14, -40) - cfi_offset (%r13, -44) - cfi_offset (%r12, -48) - cfi_offset (%r11, -52) - cfi_offset (%r10, -56) - cfi_offset (%r9, -60) - cfi_offset (%r8, -64) - cfi_offset (%r7, -68) - cfi_offset (%r6, -72) - lr %r1,%r15 - l %r0,4(0,%r15) /* load eos */ - ahi %r15,-96 /* buy stack space */ - cfi_adjust_cfa_offset (96) - st %r1,0(0,%r15) /* store back chain */ - st %r0,4(0,%r15) /* store eos */ - - lr %r1,%r2 /* move syscall number */ - lr %r2,%r3 /* first parameter */ - lr %r3,%r4 /* second parameter */ - lr %r4,%r5 /* third parameter */ - lr %r5,%r6 /* fourth parameter */ - l %r6,192(%r15) /* fifth parameter */ - l %r7,196(%r15) /* sixth parameter */ - - basr %r8,0 -0: cl %r1,4f-0b(%r8) /* svc number < 256? */ - jl 2f -1: svc 0 - j 3f -2: ex %r1,1b-0b(%r8) /* lsb of R1 is subsituted as SVC number */ -3: l %r15,0(%r15) /* load back chain */ - cfi_adjust_cfa_offset (-96) - lm %r6,15,24(%r15) /* load registers */ - - lhi %r0,-4095 - clr %r2,%r0 /* check R2 for error */ - jnl SYSCALL_ERROR_LABEL - br %r14 /* return to caller */ -4: .long 256 -PSEUDO_END (syscall) diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list b/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list deleted file mode 100644 index 300b13dd01..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list +++ /dev/null @@ -1,20 +0,0 @@ -# File name Caller Syscall name Args Strong name Weak names - -chown - chown32 i:sii __chown chown@@GLIBC_2.1 -lchown - lchown32 i:sii __lchown lchown@@GLIBC_2.0 chown@GLIBC_2.0 -fchown - fchown32 i:iii __fchown fchown - -getegid - getegid32 Ei: __getegid getegid -geteuid - geteuid32 Ei: __geteuid geteuid -getgid - getgid32 Ei: __getgid getgid -getuid - getuid32 Ei: __getuid getuid -getresgid - getresgid32 i:ppp __getresgid getresgid -getresuid - getresuid32 i:ppp __getresuid getresuid -getgroups - getgroups32 i:ip __getgroups getgroups - -setfsgid - setfsgid32 Ei:i setfsgid -setfsuid - setfsuid32 Ei:i setfsuid - -prlimit64 EXTRA prlimit64 i:iipp prlimit64 -fanotify_mark EXTRA fanotify_mark i:iiiiis fanotify_mark -personality EXTRA personality Ei:i __personality personality diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h deleted file mode 100644 index b1e80bcfcd..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h +++ /dev/null @@ -1,139 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ -L(pseudo_cancel): \ - cfi_startproc; \ - STM_##args \ - stm %r12,%r15,48(%r15); \ - cfi_offset (%r15, -36); \ - cfi_offset (%r14, -40); \ - cfi_offset (%r13, -44); \ - cfi_offset (%r12, -48); \ - lr %r14,%r15; \ - ahi %r15,-96; \ - cfi_adjust_cfa_offset (96); \ - st %r14,0(%r15); \ - basr %r13,0; \ -0: l %r1,1f-0b(%r13); \ - bas %r14,0(%r1,%r13); \ - lr %r0,%r2; \ - LM_##args \ - .if SYS_ify (syscall_name) < 256; \ - svc SYS_ify (syscall_name); \ - .else; \ - lhi %r1,SYS_ify (syscall_name); \ - svc 0; \ - .endif; \ - LR7_##args \ - l %r1,2f-0b(%r13); \ - lr %r12,%r2; \ - lr %r2,%r0; \ - bas %r14,0(%r1,%r13); \ - lr %r2,%r12; \ - lm %r12,%r15,48+96(%r15); \ - cfi_endproc; \ - j L(pseudo_check); \ -1: .long CENABLE-0b; \ -2: .long CDISABLE-0b; \ -ENTRY(name) \ - SINGLE_THREAD_P(%r1) \ - jne L(pseudo_cancel); \ -.type __##syscall_name##_nocancel,@function; \ -.globl __##syscall_name##_nocancel; \ -__##syscall_name##_nocancel: \ - DO_CALL(syscall_name, args); \ -L(pseudo_check): \ - lhi %r4,-4095; \ - clr %r2,%r4; \ - jnl SYSCALL_ERROR_LABEL; \ -.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ -L(pseudo_end): - -# if IS_IN (libpthread) -# define CENABLE __pthread_enable_asynccancel -# define CDISABLE __pthread_disable_asynccancel -# elif IS_IN (libc) -# define CENABLE __libc_enable_asynccancel -# define CDISABLE __libc_disable_asynccancel -# elif IS_IN (librt) -# define CENABLE __librt_enable_asynccancel -# define CDISABLE __librt_disable_asynccancel -# else -# error Unsupported library -# endif - -#define STM_0 /* Nothing */ -#define STM_1 st %r2,8(%r15); -#define STM_2 stm %r2,%r3,8(%r15); -#define STM_3 stm %r2,%r4,8(%r15); -#define STM_4 stm %r2,%r5,8(%r15); -#define STM_5 stm %r2,%r5,8(%r15); -#define STM_6 stm %r2,%r7,8(%r15); - -#define LM_0 /* Nothing */ -#define LM_1 l %r2,8+96(%r15); -#define LM_2 lm %r2,%r3,8+96(%r15); -#define LM_3 lm %r2,%r4,8+96(%r15); -#define LM_4 lm %r2,%r5,8+96(%r15); -#define LM_5 lm %r2,%r5,8+96(%r15); -#define LM_6 lm %r2,%r5,8+96(%r15); \ - cfi_offset (%r7, -68); \ - l %r7,96+96(%r15); - -#define LR7_0 /* Nothing */ -#define LR7_1 /* Nothing */ -#define LR7_2 /* Nothing */ -#define LR7_3 /* Nothing */ -#define LR7_4 /* Nothing */ -#define LR7_5 /* Nothing */ -#define LR7_6 l %r7,28+96(%r15); \ - cfi_restore (%r7); - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P(reg) \ - ear reg,%a0; \ - icm reg,15,MULTIPLE_THREADS_OFFSET(reg); -# endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S deleted file mode 100644 index e07fd48488..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* The following code is only used in the shared library when we - compile the reentrant version. Otherwise each system call defines - each own version. */ - -/* The syscall stubs jump here when they detect an error. */ - -#undef CALL_MCOUNT -#define CALL_MCOUNT - - .text -ENTRY(__syscall_error) -#ifndef PIC -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif - basr %r1,0 -0: l %r1,1f-0b(%r1) - ear %r3,%a0 - lcr %r2,%r2 - st %r2,0(%r1,%r3) - lhi %r2,-1 - br %r14 -1: .long SYSCALL_ERROR_ERRNO@ntpoff -#else -# if RTLD_PRIVATE_ERRNO - basr %r1,0 -0: al %r1,1f-0b(%r1) - lcr %r2,%r2 - st %r2,0(%r1) - lhi %r2,-1 - br %r14 -1: .long rtld_errno - 0b -# else -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif - basr %r1,0 -0: al %r1,1f-0b(%r1) - ear %r3,%a0 - l %r1,SYSCALL_ERROR_ERRNO@gotntpoff(%r1) - lcr %r2,%r2 - st %r2,0(%r1,%r3) - lhi %r2,-1 - br %r14 -1: .long _GLOBAL_OFFSET_TABLE_-0b -# endif -#endif - -END (__syscall_error) diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h deleted file mode 100644 index e56fc3234f..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h +++ /dev/null @@ -1,337 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_S390_SYSDEP_H -#define _LINUX_S390_SYSDEP_H - -#include -#include -#include -#include /* For RTLD_PRIVATE_ERRNO. */ -#include - -/* Define __set_errno() for INLINE_SYSCALL macro below. */ -#ifndef __ASSEMBLER__ -#include -#endif - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -/* in newer 2.1 kernels __NR_syscall is missing so we define it here */ -#define __NR_syscall 0 - -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -#ifdef __ASSEMBLER__ - -/* Linux uses a negative return value to indicate syscall errors, unlike - most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be negative - even if the call succeeded. E.g., the `lseek' system call might return - a large offset. Therefore we must not anymore test for < 0, but test - for a real error by making sure the value in gpr2 is a real error - number. Linus said he will make sure that no syscall returns a value - in -1 .. -4095 as a valid result so we can savely test with -4095. */ - -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - lhi %r4,-4095 ; \ - clr %r2,%r4 ; \ - jnl SYSCALL_ERROR_LABEL - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - SYSCALL_ERROR_HANDLER; \ - END (name) - -#undef PSEUDO_NOERRNO -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args) - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ - END (name) - -#undef PSEUDO_ERRVAL -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - lcr %r2,%r2 - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) \ - END (name) - -#ifndef PIC -# define SYSCALL_ERROR_LABEL 0f -# define SYSCALL_ERROR_HANDLER \ -0: basr %r1,0; \ -1: l %r1,2f-1b(%r1); \ - br %r1; \ -2: .long syscall_error -#else -# if RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_LABEL 0f -# define SYSCALL_ERROR_HANDLER \ -0: basr %r1,0; \ -1: al %r1,2f-1b(%r1); \ - lcr %r2,%r2; \ - st %r2,0(%r1); \ - lhi %r2,-1; \ - br %r14; \ -2: .long rtld_errno-1b -# elif defined _LIBC_REENTRANT -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif -# define SYSCALL_ERROR_LABEL 0f -# define SYSCALL_ERROR_HANDLER \ -0: lcr %r0,%r2; \ - basr %r1,0; \ -1: al %r1,2f-1b(%r1); \ - l %r1,SYSCALL_ERROR_ERRNO@gotntpoff(%r1); \ - ear %r2,%a0; \ - st %r0,0(%r1,%r2); \ - lhi %r2,-1; \ - br %r14; \ -2: .long _GLOBAL_OFFSET_TABLE_-1b -# else -# define SYSCALL_ERROR_LABEL 0f -# define SYSCALL_ERROR_HANDLER \ -0: basr %r1,0; \ -1: al %r1,2f-1b(%r1); \ - l %r1,errno@GOT(%r1); \ - lcr %r2,%r2; \ - st %r2,0(%r1); \ - lhi %r2,-1; \ - br %r14; \ -2: .long _GLOBAL_OFFSET_TABLE_-1b -# endif /* _LIBC_REENTRANT */ -#endif /* PIC */ - -/* Linux takes system call arguments in registers: - - syscall number 1 call-clobbered - arg 1 2 call-clobbered - arg 2 3 call-clobbered - arg 3 4 call-clobbered - arg 4 5 call-clobbered - arg 5 6 call-saved - arg 6 7 call-saved - - (Of course a function with say 3 arguments does not have entries for - arguments 4 and 5.) - For system calls with 6 parameters a stack operation is required - to load the 6th parameter to register 7. Call saved register 7 is - moved to register 0 and back to avoid an additional stack frame. - */ - -#define DO_CALL(syscall, args) \ - .if args > 5; \ - lr %r0,%r7; \ - l %r7,96(%r15); \ - .endif; \ - .if SYS_ify (syscall) < 256; \ - svc SYS_ify (syscall); \ - .else; \ - lhi %r1,SYS_ify (syscall); \ - svc 0; \ - .endif; \ - .if args > 5; \ - lr %r7,%r0; \ - .endif - -#define ret \ - br 14 - -#define ret_NOERRNO \ - br 14 - -#define ret_ERRVAL \ - br 14 - -#endif /* __ASSEMBLER__ */ - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - ({ \ - unsigned int _ret = INTERNAL_SYSCALL (name, , nr, args); \ - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (_ret, ))) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (_ret, )); \ - _ret = 0xffffffff; \ - } \ - (int) _ret; }) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) do { } while (0) - -#undef INTERNAL_SYSCALL_DIRECT -#define INTERNAL_SYSCALL_DIRECT(name, err, nr, args...) \ - ({ \ - DECLARGS_##nr(args) \ - register int _ret __asm__("2"); \ - __asm__ __volatile__ ( \ - "svc %b1\n\t" \ - : "=d" (_ret) \ - : "i" (__NR_##name) ASMFMT_##nr \ - : "memory" ); \ - _ret; }) - -#undef INTERNAL_SYSCALL_SVC0 -#define INTERNAL_SYSCALL_SVC0(name, err, nr, args...) \ - ({ \ - DECLARGS_##nr(args) \ - register unsigned long _nr __asm__("1") = (unsigned long)(__NR_##name); \ - register int _ret __asm__("2"); \ - __asm__ __volatile__ ( \ - "svc 0\n\t" \ - : "=d" (_ret) \ - : "d" (_nr) ASMFMT_##nr \ - : "memory" ); \ - _ret; }) - -#undef INTERNAL_SYSCALL_NCS -#define INTERNAL_SYSCALL_NCS(no, err, nr, args...) \ - ({ \ - DECLARGS_##nr(args) \ - register unsigned long _nr __asm__("1") = (unsigned long)(no); \ - register int _ret __asm__("2"); \ - __asm__ __volatile__ ( \ - "svc 0\n\t" \ - : "=d" (_ret) \ - : "d" (_nr) ASMFMT_##nr \ - : "memory" ); \ - _ret; }) - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - (((__NR_##name) < 256) ? \ - INTERNAL_SYSCALL_DIRECT(name, err, nr, args) : \ - INTERNAL_SYSCALL_SVC0(name, err,nr, args)) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((unsigned int) (val) >= 0xfffff001u) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) - -#define DECLARGS_0() -#define DECLARGS_1(arg1) \ - register unsigned long gpr2 __asm__ ("2") = (unsigned long)(arg1); -#define DECLARGS_2(arg1, arg2) \ - DECLARGS_1(arg1) \ - register unsigned long gpr3 __asm__ ("3") = (unsigned long)(arg2); -#define DECLARGS_3(arg1, arg2, arg3) \ - DECLARGS_2(arg1, arg2) \ - register unsigned long gpr4 __asm__ ("4") = (unsigned long)(arg3); -#define DECLARGS_4(arg1, arg2, arg3, arg4) \ - DECLARGS_3(arg1, arg2, arg3) \ - register unsigned long gpr5 __asm__ ("5") = (unsigned long)(arg4); -#define DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \ - DECLARGS_4(arg1, arg2, arg3, arg4) \ - register unsigned long gpr6 __asm__ ("6") = (unsigned long)(arg5); -#define DECLARGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \ - DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \ - register unsigned long gpr7 __asm__ ("7") = (unsigned long)(arg6); - -#define ASMFMT_0 -#define ASMFMT_1 , "0" (gpr2) -#define ASMFMT_2 , "0" (gpr2), "d" (gpr3) -#define ASMFMT_3 , "0" (gpr2), "d" (gpr3), "d" (gpr4) -#define ASMFMT_4 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5) -#define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6) -#define ASMFMT_6 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6), "d" (gpr7) - -#define CLOBBER_0 , "3", "4", "5" -#define CLOBBER_1 , "3", "4", "5" -#define CLOBBER_2 , "4", "5" -#define CLOBBER_3 , "5" -#define CLOBBER_4 -#define CLOBBER_5 -#define CLOBBER_6 - -/* List of system calls which are supported as vsyscalls. */ -#define HAVE_CLOCK_GETRES_VSYSCALL 1 -#define HAVE_CLOCK_GETTIME_VSYSCALL 1 -#define HAVE_GETTIMEOFDAY_VSYSCALL 1 -#define HAVE_GETCPU_VSYSCALL 1 - -/* This version is for internal uses when there is no desire - to set errno */ -#define INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK(name, err, nr, args...) \ - ({ \ - long int _ret = ENOSYS; \ - \ - __typeof (__vdso_##name) vdsop = __vdso_##name; \ - PTR_DEMANGLE (vdsop); \ - if (vdsop != NULL) \ - _ret = INTERNAL_VSYSCALL_CALL (vdsop, err, nr, ##args); \ - else \ - err = 1 << 28; \ - _ret; \ - }) - -#define INTERNAL_VSYSCALL_CALL(fn, err, nr, args...) \ - ({ \ - DECLARGS_##nr(args) \ - register long _ret __asm__("2"); \ - __asm__ __volatile__ ( \ - "lr 10,14\n\t" \ - "basr 14,%1\n\t" \ - "lr 14,10\n\t" \ - : "=d" (_ret) \ - : "d" (fn) ASMFMT_##nr \ - : "cc", "memory", "0", "1", "10" CLOBBER_##nr); \ - _ret; }) - -/* Pointer mangling support. */ -#if IS_IN (rtld) -/* We cannot use the thread descriptor because in ld.so we use setjmp - earlier than the descriptor is initialized. */ -#else -/* For the time being just use stack_guard rather than a separate - pointer_guard. */ -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(reg, tmpreg) \ - ear tmpreg,%a0; \ - x reg,STACK_GUARD(tmpreg) -# define PTR_MANGLE2(reg, tmpreg) \ - x reg,STACK_GUARD(tmpreg) -# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) -# else -# define PTR_MANGLE(var) \ - (var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#endif - -#endif /* _LINUX_S390_SYSDEP_H */ diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/updwtmp.c b/sysdeps/unix/sysv/linux/s390/s390-32/updwtmp.c deleted file mode 100644 index b40abd5dd8..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/updwtmp.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "utmp-compat.h" -#include "utmp-private.h" - -#if defined SHARED -# undef weak_alias -# define weak_alias(n,a) -#endif -#include "sysdeps/gnu/updwtmp.c" - -#if defined SHARED -default_symbol_version (__updwtmp, updwtmp, UTMP_COMPAT_BASE); -#endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/updwtmpx.c b/sysdeps/unix/sysv/linux/s390/s390-32/updwtmpx.c deleted file mode 100644 index a344fb1e2b..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/updwtmpx.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "utmp-compat.h" - -#undef weak_alias -#define weak_alias(n,a) -#define updwtmpx __updwtmpx -#include "login/updwtmpx.c" -#undef updwtmpx - -default_symbol_version (__updwtmpx, updwtmpx, UTMP_COMPAT_BASE); diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/utmp-compat.h b/sysdeps/unix/sysv/linux/s390/s390-32/utmp-compat.h deleted file mode 100644 index fe54c23e6b..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/utmp-compat.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This macro defines the glibc version tag at which the 64 bit struct - utmp functions have been added to the 32 bit glibc. */ -#define UTMP_COMPAT_BASE GLIBC_2.9 diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/utmp-convert.h b/sysdeps/unix/sysv/linux/s390/s390-32/utmp-convert.h deleted file mode 100644 index 5a2af614c9..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/utmp-convert.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* This file provides functions converting between the 32 and 64 bit - struct utmp variants. */ - -#ifndef _UTMP_CONVERT_H -#define _UTMP_CONVERT_H 1 - -#include - -#include "utmp32.h" - -/* Convert the 64 bit struct utmp value in FROM to the 32 bit version - returned in TO. */ -static inline void -utmp_convert64to32 (const struct utmp *from, struct utmp32 *to) -{ -#if _HAVE_UT_TYPE - 0 - to->ut_type = from->ut_type; -#endif -#if _HAVE_UT_PID - 0 - to->ut_pid = from->ut_pid; -#endif - memcpy (to->ut_line, from->ut_line, UT_LINESIZE); - memcpy (to->ut_user, from->ut_user, UT_NAMESIZE); -#if _HAVE_UT_ID - 0 - memcpy (to->ut_id, from->ut_id, 4); -#endif -#if _HAVE_UT_HOST - 0 - memcpy (to->ut_host, from->ut_host, UT_HOSTSIZE); -#endif - to->ut_exit = from->ut_exit; - to->ut_session = (int32_t) from->ut_session; -#if _HAVE_UT_TV - 0 - to->ut_tv.tv_sec = (int32_t) from->ut_tv.tv_sec; - to->ut_tv.tv_usec = (int32_t) from->ut_tv.tv_usec; -#endif - memcpy (to->ut_addr_v6, from->ut_addr_v6, 4 * 4); -} - -/* Convert the 32 bit struct utmp value in FROM to the 64 bit version - returned in TO. */ -static inline void -utmp_convert32to64 (const struct utmp32 *from, struct utmp *to) -{ -#if _HAVE_UT_TYPE - 0 - to->ut_type = from->ut_type; -#endif -#if _HAVE_UT_PID - 0 - to->ut_pid = from->ut_pid; -#endif - memcpy (to->ut_line, from->ut_line, UT_LINESIZE); - memcpy (to->ut_user, from->ut_user, UT_NAMESIZE); -#if _HAVE_UT_ID - 0 - memcpy (to->ut_id, from->ut_id, 4); -#endif -#if _HAVE_UT_HOST - 0 - memcpy (to->ut_host, from->ut_host, UT_HOSTSIZE); -#endif - to->ut_exit = from->ut_exit; - to->ut_session = (int64_t) from->ut_session; -#if _HAVE_UT_TV - 0 - to->ut_tv.tv_sec = (int64_t) from->ut_tv.tv_sec; - to->ut_tv.tv_usec = (int64_t) from->ut_tv.tv_usec; -#endif - memcpy (to->ut_addr_v6, from->ut_addr_v6, 4 * 4); -} - -#endif /* utmp-convert.h */ diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.c b/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.c deleted file mode 100644 index eb8a478a82..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.c +++ /dev/null @@ -1,184 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include "utmp32.h" -#include "utmp-convert.h" - -/* Allocate a static buffer to be returned to the caller. As well as - with the existing version of these functions the caller has to be - aware that the contents of this buffer will change with subsequent - calls. */ -#define ALLOCATE_UTMP32_OUT(OUT) \ - static struct utmp32 *OUT = NULL; \ - \ - if (OUT == NULL) \ - { \ - OUT = malloc (sizeof (struct utmp32)); \ - if (OUT == NULL) \ - return NULL; \ - } - -/* Perform a lookup for a utmp entry matching FIELD using function - FUNC. FIELD is converted to a 64 bit utmp and the result is - converted back to 32 bit utmp. */ -#define ACCESS_UTMP_ENTRY(FUNC, FIELD) \ - struct utmp in64; \ - struct utmp *out64; \ - ALLOCATE_UTMP32_OUT (out32); \ - \ - utmp_convert32to64 (FIELD, &in64); \ - out64 = FUNC (&in64); \ - \ - if (out64 == NULL) \ - return NULL; \ - \ - utmp_convert64to32 (out64, out32); \ - \ - return out32; - -/* Search forward from the current point in the utmp file until the - next entry with a ut_type matching ID->ut_type. */ -struct utmp32 * -getutid32 (const struct utmp32 *id) -{ - ACCESS_UTMP_ENTRY (__getutid, id) -} -symbol_version (getutid32, getutid, GLIBC_2.0); - -/* Search forward from the current point in the utmp file until the - next entry with a ut_line matching LINE->ut_line. */ -struct utmp32 * -getutline32 (const struct utmp32 *line) -{ - ACCESS_UTMP_ENTRY (__getutline, line) -} -symbol_version (getutline32, getutline, GLIBC_2.0); - -/* Write out entry pointed to by UTMP_PTR into the utmp file. */ -struct utmp32 * -pututline32 (const struct utmp32 *utmp_ptr) -{ - ACCESS_UTMP_ENTRY (__pututline, utmp_ptr) -} -symbol_version (pututline32, pututline, GLIBC_2.0); - -/* Read next entry from a utmp-like file. */ -struct utmp32 * -getutent32 (void) -{ - struct utmp *out64; - ALLOCATE_UTMP32_OUT (out32); - - out64 = __getutent (); - if (!out64) - return NULL; - - utmp_convert64to32 (out64, out32); - return out32; -} -symbol_version (getutent32, getutent, GLIBC_2.0); - -/* Reentrant versions of the file for handling utmp files. */ - -int -getutent32_r (struct utmp32 *buffer, struct utmp32 **result) -{ - struct utmp out64; - struct utmp *out64p; - int ret; - - ret = __getutent_r (&out64, &out64p); - if (ret == -1) - { - *result = NULL; - return -1; - } - - utmp_convert64to32 (out64p, buffer); - *result = buffer; - - return 0; -} -symbol_version (getutent32_r, getutent_r, GLIBC_2.0); - -int -getutid32_r (const struct utmp32 *id, struct utmp32 *buffer, - struct utmp32 **result) -{ - struct utmp in64; - struct utmp out64; - struct utmp *out64p; - int ret; - - utmp_convert32to64 (id, &in64); - - ret = __getutid_r (&in64, &out64, &out64p); - if (ret == -1) - { - *result = NULL; - return -1; - } - - utmp_convert64to32 (out64p, buffer); - *result = buffer; - - return 0; -} -symbol_version (getutid32_r, getutid_r, GLIBC_2.0); - -int -getutline32_r (const struct utmp32 *line, - struct utmp32 *buffer, struct utmp32 **result) -{ - struct utmp in64; - struct utmp out64; - struct utmp *out64p; - int ret; - - utmp_convert32to64 (line, &in64); - - ret = __getutline_r (&in64, &out64, &out64p); - if (ret == -1) - { - *result = NULL; - return -1; - } - - utmp_convert64to32 (out64p, buffer); - *result = buffer; - - return 0; - -} -symbol_version (getutline32_r, getutline_r, GLIBC_2.0); - -/* Append entry UTMP to the wtmp-like file WTMP_FILE. */ -void -updwtmp32 (const char *wtmp_file, const struct utmp32 *utmp) -{ - struct utmp in32; - - utmp_convert32to64 (utmp, &in32); - __updwtmp (wtmp_file, &in32); -} -symbol_version (updwtmp32, updwtmp, GLIBC_2.0); diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.h b/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.h deleted file mode 100644 index d5019292c1..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.h +++ /dev/null @@ -1,51 +0,0 @@ -/* The `struct utmp' type, describing entries in the utmp file. GNU version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _UTMP32_H -#define _UTMP32_H 1 - -#include -#include -#include -#include -#include - -/* The structure describing an entry in the user accounting database. */ -struct utmp32 -{ - short int ut_type; /* Type of login. */ - pid_t ut_pid; /* Process ID of login process. */ - char ut_line[UT_LINESIZE]; /* Devicename. */ - char ut_id[4]; /* Inittab ID. */ - char ut_user[UT_NAMESIZE]; /* Username. */ - char ut_host[UT_HOSTSIZE]; /* Hostname for remote login. */ - struct exit_status ut_exit; /* Exit status of a process marked - as DEAD_PROCESS. */ - int32_t ut_session; /* Session ID, used for windowing. */ - struct - { - int32_t tv_sec; /* Seconds. */ - int32_t tv_usec; /* Microseconds. */ - } ut_tv; /* Time entry was made. */ - - int32_t ut_addr_v6[4]; /* Internet address of remote host. */ - char __glibc_reserved[20]; /* Reserved for future use. */ -}; - - -#endif /* utmp32.h */ diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/utmpx-convert.h b/sysdeps/unix/sysv/linux/s390/s390-32/utmpx-convert.h deleted file mode 100644 index c10bd165aa..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/utmpx-convert.h +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* This file provides functions converting between the 32 and 64 bit - struct utmp variants. */ - -#ifndef _UTMPX_CONVERT_H -#define _UTMPX_CONVERT_H 1 - -#include -#include "utmpx32.h" - -/* Convert the 64 bit struct utmpx value in FROM to the 32 bit version - returned in TO. */ -static inline void -utmpx_convert64to32 (const struct utmpx *from, struct utmpx32 *to) -{ -#if _HAVE_UT_TYPE - 0 - to->ut_type = from->ut_type; -#endif -#if _HAVE_UT_PID - 0 - to->ut_pid = from->ut_pid; -#endif - memcpy (to->ut_line, from->ut_line, __UT_LINESIZE); - memcpy (to->ut_user, from->ut_user, __UT_NAMESIZE); -#if _HAVE_UT_ID - 0 - memcpy (to->ut_id, from->ut_id, 4); -#endif -#if _HAVE_UT_HOST - 0 - memcpy (to->ut_host, from->ut_host, __UT_HOSTSIZE); -#endif - to->ut_exit = from->ut_exit; - to->ut_session = (int32_t) from->ut_session; -#if _HAVE_UT_TV - 0 - to->ut_tv.tv_sec = (int32_t) from->ut_tv.tv_sec; - to->ut_tv.tv_usec = (int32_t) from->ut_tv.tv_usec; -#endif - memcpy (to->ut_addr_v6, from->ut_addr_v6, 4 * 4); -} - -/* Convert the 32 bit struct utmpx value in FROM to the 64 bit version - returned in TO. */ -static inline void -utmpx_convert32to64 (const struct utmpx32 *from, struct utmpx *to) -{ -#if _HAVE_UT_TYPE - 0 - to->ut_type = from->ut_type; -#endif -#if _HAVE_UT_PID - 0 - to->ut_pid = from->ut_pid; -#endif - memcpy (to->ut_line, from->ut_line, __UT_LINESIZE); - memcpy (to->ut_user, from->ut_user, __UT_NAMESIZE); -#if _HAVE_UT_ID - 0 - memcpy (to->ut_id, from->ut_id, 4); -#endif -#if _HAVE_UT_HOST - 0 - memcpy (to->ut_host, from->ut_host, __UT_HOSTSIZE); -#endif - to->ut_exit = from->ut_exit; - to->ut_session = (int64_t) from->ut_session; -#if _HAVE_UT_TV - 0 - to->ut_tv.tv_sec = (int64_t) from->ut_tv.tv_sec; - to->ut_tv.tv_usec = (int64_t) from->ut_tv.tv_usec; -#endif - memcpy (to->ut_addr_v6, from->ut_addr_v6, 4 * 4); -} - -#endif /* utmpx-convert.h */ diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.c b/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.c deleted file mode 100644 index eb312f6bdb..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.c +++ /dev/null @@ -1,139 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Andreas Krebbel . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include "utmp32.h" -#include "utmp-convert.h" - -#include "utmpx32.h" -#include "utmpx-convert.h" - -/* Allocate a static buffer to be returned to the caller. As well as - with the existing version of these functions the caller has to be - aware that the contents of this buffer will change with subsequent - calls. */ -#define ALLOCATE_UTMPX32_OUT(OUT) \ - static struct utmpx32 *OUT = NULL; \ - \ - if (OUT == NULL) \ - { \ - OUT = malloc (sizeof (struct utmpx32)); \ - if (OUT == NULL) \ - return NULL; \ - } - -/* Perform a lookup for a utmpx entry matching FIELD using function - FUNC. FIELD is converted to a 64 bit utmpx and the result is - converted back to 32 bit utmpx. */ -#define ACCESS_UTMPX_ENTRY(FUNC, FIELD) \ - struct utmpx in64; \ - struct utmpx *out64; \ - ALLOCATE_UTMPX32_OUT (out32); \ - \ - utmpx_convert32to64 (FIELD, &in64); \ - out64 = FUNC (&in64); \ - \ - if (out64 == NULL) \ - return NULL; \ - \ - utmpx_convert64to32 (out64, out32); \ - \ - return out32; - - -/* Get the next entry from the user accounting database. */ -struct utmpx32 * -getutxent32 (void) -{ - struct utmpx *out64; - ALLOCATE_UTMPX32_OUT (out32); - - out64 = __getutxent (); - if (!out64) - return NULL; - - utmpx_convert64to32 (out64, out32); - return out32; - -} -symbol_version (getutxent32, getutxent, GLIBC_2.1); - -/* Get the user accounting database entry corresponding to ID. */ -struct utmpx32 * -getutxid32 (const struct utmpx32 *id) -{ - ACCESS_UTMPX_ENTRY (__getutxid, id); -} -symbol_version (getutxid32, getutxid, GLIBC_2.1); - -/* Get the user accounting database entry corresponding to LINE. */ -struct utmpx32 * -getutxline32 (const struct utmpx32 *line) -{ - ACCESS_UTMPX_ENTRY (__getutxline, line); -} -symbol_version (getutxline32, getutxline, GLIBC_2.1); - -/* Write the entry UTMPX into the user accounting database. */ -struct utmpx32 * -pututxline32 (const struct utmpx32 *utmpx) -{ - ACCESS_UTMPX_ENTRY (__pututxline, utmpx); -} -symbol_version (pututxline32, pututxline, GLIBC_2.1); - -/* Append entry UTMP to the wtmpx-like file WTMPX_FILE. */ -void -updwtmpx32 (const char *wtmpx_file, const struct utmpx32 *utmpx) -{ - struct utmpx in64; - - utmpx_convert32to64 (utmpx, &in64); - __updwtmpx (wtmpx_file, &in64); -} -symbol_version (updwtmpx32, updwtmpx, GLIBC_2.1); - -/* Copy the information in UTMPX to UTMP. */ -void -getutmp32 (const struct utmpx32 *utmpx, struct utmp32 *utmp) -{ - struct utmpx in64; - struct utmp out64; - - utmpx_convert32to64 (utmpx, &in64); - __getutmp (&in64, &out64); - utmp_convert64to32 (&out64, utmp); -} -symbol_version (getutmp32, getutmp, GLIBC_2.1.1); - -/* Copy the information in UTMP to UTMPX. */ -void -getutmpx32 (const struct utmp32 *utmp, struct utmpx32 *utmpx) -{ - struct utmp in64; - struct utmpx out64; - - utmp_convert32to64 (utmp, &in64); - __getutmpx (&in64, &out64); - utmpx_convert64to32 (&out64, utmpx); -} -symbol_version (getutmpx32, getutmpx, GLIBC_2.1.1); diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.h b/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.h deleted file mode 100644 index ca5e60c3c4..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.h +++ /dev/null @@ -1,59 +0,0 @@ -/* The `struct utmp' type, describing entries in the utmp file. GNU version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _UTMPX32_H -#define _UTMPX32_H 1 - -#include -#include -#include -#include -#include - -/* The structure describing an entry in the user accounting database. */ -struct utmpx32 -{ - short int ut_type; /* Type of login. */ - __pid_t ut_pid; /* Process ID of login process. */ - char ut_line[__UT_LINESIZE]; /* Devicename. */ - char ut_id[4]; /* Inittab ID. */ - char ut_user[__UT_NAMESIZE]; /* Username. */ - char ut_host[__UT_HOSTSIZE]; /* Hostname for remote login. */ - struct __exit_status ut_exit; /* Exit status of a process marked - as DEAD_PROCESS. */ - __int64_t ut_session; /* Session ID, used for windowing. */ - struct - { - __int64_t tv_sec; /* Seconds. */ - __int64_t tv_usec; /* Microseconds. */ - } ut_tv; /* Time entry was made. */ - - __int32_t ut_addr_v6[4]; /* Internet address of remote host. */ - char __glibc_reserved[20]; /* Reserved for future use. */ -}; - -/* The internal interface needed by the compat wrapper functions. */ -extern struct utmpx *__getutxent (void); -extern struct utmpx *__getutxid (const struct utmpx *__id); -extern struct utmpx *__getutxline (const struct utmpx *__line); -extern struct utmpx *__pututxline (const struct utmpx *__utmpx); -extern void __updwtmpx (const char *__wtmpx_file, const struct utmpx *__utmpx); -extern void __getutmp (const struct utmpx *__utmpx, struct utmp *__utmp); -extern void __getutmpx (const struct utmp *__utmp, struct utmpx *__utmpx); - -#endif /* utmpx32.h */ diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c b/sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c deleted file mode 100644 index 144b691e56..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S b/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S deleted file mode 100644 index 4da2345836..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2004. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include -#include -#include - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__libc_vfork) - /* Do vfork system call. */ - svc SYS_ify (vfork) - - /* Check for error. */ - lhi %r4,-4095 - clr %r2,%r4 - jnl SYSCALL_ERROR_LABEL - - /* Normal return. */ - br %r14 -PSEUDO_END (__libc_vfork) - -#if IS_IN (libc) -weak_alias (__libc_vfork, vfork) -strong_alias (__libc_vfork, __vfork) -libc_hidden_def (__vfork) -#endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/xstat.c b/sysdeps/unix/sysv/linux/s390/s390-32/xstat.c deleted file mode 100644 index e9869f5508..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/xstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/Implies b/sysdeps/unix/sysv/linux/s390/s390-64/Implies deleted file mode 100644 index 8d91c80097..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/Implies +++ /dev/null @@ -1 +0,0 @@ -unix/sysv/linux/wordsize-64 diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/Makefile b/sysdeps/unix/sysv/linux/s390/s390-64/Makefile deleted file mode 100644 index 6795734747..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -# See Makeconfig regarding the use of default-abi. -default-abi := 64 - -ifeq ($(subdir),misc) -sysdep_headers += sys/elf.h -endif - -ifeq ($(subdir),elf) -ifeq (yes,$(build-shared)) -# This is needed to support g++ v2 and v3. -sysdep_routines += framestate -shared-only-routines += framestate -endif -endif - -ifeq ($(subdir),stdlib) -sysdep_routines += __makecontext_ret -endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/Versions b/sysdeps/unix/sysv/linux/s390/s390-64/Versions deleted file mode 100644 index 3f4d960421..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/Versions +++ /dev/null @@ -1,15 +0,0 @@ -libc { - GLIBC_2.2 { - # Exception handling support functions from libgcc - __register_frame; __register_frame_table; __deregister_frame; - __frame_state_for; __register_frame_info_table; - } -} - -librt { - GLIBC_2.3.3 { - # Changed timer_t. - timer_create; timer_delete; timer_getoverrun; timer_gettime; - timer_settime; - } -} diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c b/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c deleted file mode 100644 index 7a4492c567..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define __longjmp ____longjmp_chk - -#define CHECK_SP(env, guard) \ - do \ - { \ - uintptr_t cur_sp; \ - uintptr_t new_sp = env->__gregs[9]; \ - __asm__ ("lgr %0, %%r15" : "=r" (cur_sp)); \ - new_sp ^= guard; \ - if (new_sp < cur_sp) \ - { \ - stack_t oss; \ - INTERNAL_SYSCALL_DECL (err); \ - int res = INTERNAL_SYSCALL (sigaltstack, err, 2, NULL, &oss); \ - if (!INTERNAL_SYSCALL_ERROR_P (res, err)) \ - { \ - if ((oss.ss_flags & SS_ONSTACK) == 0 \ - || ((uintptr_t) (oss.ss_sp + oss.ss_size) - new_sp \ - < oss.ss_size)) \ - __fortify_fail ("longjmp causes uninitialized stack frame");\ - } \ - } \ - } while (0) - -#include "__longjmp.c" diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S b/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S deleted file mode 100644 index 16901638b5..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* We do not want .eh_frame info so that __makecontext_ret stops unwinding - if backtrace was called within a context created by makecontext. (There - is also no .eh_frame info for _start or thread_start.) */ -#undef cfi_startproc -#define cfi_startproc -#undef cfi_endproc -#define cfi_endproc - -ENTRY(__makecontext_ret) - basr %r14,%r7 - ltgr %r8,%r8 /* Check whether uc_link is 0. */ - jz 1f - lgr %r2,%r8 - br %r9 -1: lghi %r2,0 - brasl %r14,HIDDEN_JUMPTARGET (exit) - j .+2 /* Trap if exit returns. */ -END(__makecontext_ret) diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/c++-types.data b/sysdeps/unix/sysv/linux/s390/s390-64/c++-types.data deleted file mode 100644 index 23c11dc41b..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:l -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:m -fd_mask:l -fsblkcnt64_t:m -fsblkcnt_t:m -fsfilcnt64_t:m -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:m -ino_t:m -int16_t:s -int32_t:i -int64_t:l -int8_t:a -intptr_t:l -key_t:i -loff_t:l -mode_t:j -nlink_t:m -off64_t:l -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:l -register_t:l -rlim64_t:m -rlim_t:m -sigset_t:10__sigset_t -size_t:m -socklen_t:j -ssize_t:l -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:m -u_int8_t:h -ulong:m -u_long:m -u_quad_t:m -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/clone.S b/sysdeps/unix/sysv/linux/s390/s390-64/clone.S deleted file mode 100644 index daf8a58326..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/clone.S +++ /dev/null @@ -1,66 +0,0 @@ -/* Wrapper around clone system call. 64 bit S/390 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* clone is even more special than fork as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#include -#define _ERRNO_H 1 -#include - -/* int __clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - pid_t *parent_tid, void *tls, pid_t *child_tid); */ -/* sys_clone (void *child_stack, unsigned long flags, - pid_t *parent_tid, pid_t *child_tid, void *tls); */ - - .text -ENTRY(__clone) - stg %r6,48(%r15) /* store %r6 to save area */ - cfi_offset (%r6,-112) - lgr %r0,%r5 /* move *arg out of the way */ - ltgr %r1,%r2 /* check fn and move to %r1 */ - jz error /* no NULL function pointers */ - ltgr %r2,%r3 /* check child_stack and move to %r2 */ - jz error /* no NULL stack pointers */ - lgr %r3,%r4 /* move flags to %r3 */ - lgr %r4,%r6 /* move parent_tid to %r4 */ - lg %r5,168(%r15) /* load child_tid from stack */ - lg %r6,160(%r15) /* load tls from stack */ - svc SYS_ify(clone) - ltgr %r2,%r2 /* check return code */ - jz thread_start - lg %r6,48(%r15) /* restore %r6 */ - jgm SYSCALL_ERROR_LABEL - br %r14 -error: - lghi %r2,-EINVAL - jg SYSCALL_ERROR_LABEL -PSEUDO_END (__clone) - -thread_start: - /* fn is in gpr 1, arg in gpr 0 */ - lgr %r2,%r0 /* set first parameter to void *arg */ - aghi %r15,-160 /* make room on the stack for the save area */ - xc 0(8,%r15),0(%r15) - basr %r14,%r1 /* jump to fn */ - DO_CALL (exit, 1) - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/configure b/sysdeps/unix/sysv/linux/s390/s390-64/configure deleted file mode 100644 index 7392cdfb42..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/configure +++ /dev/null @@ -1,15 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/s390/s390-64. - -test -n "$libc_cv_slibdir" || -case "$prefix" in -/usr | /usr/) - libc_cv_slibdir=/lib64 - libc_cv_rtlddir=/lib - if test "$libdir" = '${exec_prefix}/lib'; then - libdir='${exec_prefix}/lib64'; - # Locale data can be shared between 32-bit and 64-bit libraries. - libc_cv_complocaledir='${exec_prefix}/lib/locale' - fi - ;; -esac diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/configure.ac b/sysdeps/unix/sysv/linux/s390/s390-64/configure.ac deleted file mode 100644 index 8c75888b62..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/configure.ac +++ /dev/null @@ -1,4 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/s390/s390-64. - -LIBC_SLIBDIR_RTLDDIR([lib64], [lib]) diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/dl-cache.h b/sysdeps/unix/sysv/linux/s390/s390-64/dl-cache.h deleted file mode 100644 index 391d1b72f3..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/dl-cache.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define _DL_CACHE_DEFAULT_ID 0x403 - -#define _dl_cache_check_flags(flags) \ - ((flags) == _DL_CACHE_DEFAULT_ID) - -#include_next diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S b/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S deleted file mode 100644 index 4b031aafdb..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "ucontext_i.h" - -#include - -/* __getcontext (const ucontext_t *ucp) - - Saves the machine context in UCP such that when it is activated, - it appears as if __getcontext() returned again. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to save anything - other than the PRESERVED state. */ - -ENTRY(__getcontext) - lgr %r1,%r2 - - /* rt_sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask, sigsetsize). */ - la %r2,SIG_BLOCK - slgr %r3,%r3 - la %r4,SC_MASK(%r1) - lghi %r5,_NSIG8 - svc SYS_ify(rt_sigprocmask) - - /* Store fpu context. */ - stfpc SC_FPC(%r1) - std %f0,SC_FPRS(%r1) - std %f1,SC_FPRS+8(%r1) - std %f2,SC_FPRS+16(%r1) - std %f3,SC_FPRS+24(%r1) - std %f4,SC_FPRS+32(%r1) - std %f5,SC_FPRS+40(%r1) - std %f6,SC_FPRS+48(%r1) - std %f7,SC_FPRS+56(%r1) - std %f8,SC_FPRS+64(%r1) - std %f9,SC_FPRS+72(%r1) - std %f10,SC_FPRS+80(%r1) - std %f11,SC_FPRS+88(%r1) - std %f12,SC_FPRS+96(%r1) - std %f13,SC_FPRS+104(%r1) - std %f14,SC_FPRS+112(%r1) - std %f15,SC_FPRS+120(%r1) - - /* Set __getcontext return value to 0. */ - slgr %r2,%r2 - - /* Store access registers. */ - stam %a0,%a15,SC_ACRS(%r1) - - /* Store general purpose registers. */ - stmg %r0,%r15,SC_GPRS(%r1) - - /* Return. */ - br %r14 -END(__getcontext) - -#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) -/* In glibc release 2.19 a new version of getcontext was introduced, - but was reverted before 2.20. Thus both versions are the same function. */ -weak_alias (__getcontext, __v1__getcontext) -weak_alias (__getcontext, __v2__getcontext) -versioned_symbol (libc, __v1__getcontext, getcontext, GLIBC_2_1) -compat_symbol (libc, __v2__getcontext, getcontext, GLIBC_2_19) - -#else - -weak_alias (__getcontext, getcontext) - -#endif /* !(defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)) */ diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h b/sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h deleted file mode 100644 index 945c02930c..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Definition of `struct stat' used in the kernel. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define STAT_IS_KERNEL_STAT 1 -#define XSTAT_IS_XSTAT64 1 -#define STATFS_IS_STATFS64 0 diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist deleted file mode 100644 index 5e604f5376..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist +++ /dev/null @@ -1,11 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __libc_stack_end D 0x8 -GLIBC_2.2 _dl_mcount F -GLIBC_2.2 _r_debug D 0x28 -GLIBC_2.2 calloc F -GLIBC_2.2 free F -GLIBC_2.2 malloc F -GLIBC_2.2 realloc F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __tls_get_offset F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libBrokenLocale.abilist deleted file mode 100644 index 21343df781..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist deleted file mode 100644 index b1b2b29c94..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist +++ /dev/null @@ -1,2360 +0,0 @@ -GCC_3.0 GCC_3.0 A -GCC_3.0 _Unwind_Find_FDE F -GCC_3.0 __deregister_frame_info_bases F -GCC_3.0 __register_frame_info_bases F -GCC_3.0 __register_frame_info_table_bases F -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fallocate64 F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _sys_errlist D 0x438 -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x438 -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.19 GLIBC_2.19 A -GLIBC_2.19 __longjmp_chk F -GLIBC_2.19 __sigsetjmp F -GLIBC_2.19 _longjmp F -GLIBC_2.19 _setjmp F -GLIBC_2.19 getcontext F -GLIBC_2.19 longjmp F -GLIBC_2.19 setjmp F -GLIBC_2.19 siglongjmp F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _Exit F -GLIBC_2.2 _IO_2_1_stderr_ D 0xe0 -GLIBC_2.2 _IO_2_1_stdin_ D 0xe0 -GLIBC_2.2 _IO_2_1_stdout_ D 0xe0 -GLIBC_2.2 _IO_adjust_column F -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_default_doallocate F -GLIBC_2.2 _IO_default_finish F -GLIBC_2.2 _IO_default_pbackfail F -GLIBC_2.2 _IO_default_uflow F -GLIBC_2.2 _IO_default_xsgetn F -GLIBC_2.2 _IO_default_xsputn F -GLIBC_2.2 _IO_do_write F -GLIBC_2.2 _IO_doallocbuf F -GLIBC_2.2 _IO_fclose F -GLIBC_2.2 _IO_fdopen F -GLIBC_2.2 _IO_feof F -GLIBC_2.2 _IO_ferror F -GLIBC_2.2 _IO_fflush F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_fgets F -GLIBC_2.2 _IO_file_attach F -GLIBC_2.2 _IO_file_close F -GLIBC_2.2 _IO_file_close_it F -GLIBC_2.2 _IO_file_doallocate F -GLIBC_2.2 _IO_file_finish F -GLIBC_2.2 _IO_file_fopen F -GLIBC_2.2 _IO_file_init F -GLIBC_2.2 _IO_file_jumps D 0xa8 -GLIBC_2.2 _IO_file_open F -GLIBC_2.2 _IO_file_overflow F -GLIBC_2.2 _IO_file_read F -GLIBC_2.2 _IO_file_seek F -GLIBC_2.2 _IO_file_seekoff F -GLIBC_2.2 _IO_file_setbuf F -GLIBC_2.2 _IO_file_stat F -GLIBC_2.2 _IO_file_sync F -GLIBC_2.2 _IO_file_underflow F -GLIBC_2.2 _IO_file_write F -GLIBC_2.2 _IO_file_xsputn F -GLIBC_2.2 _IO_flockfile F -GLIBC_2.2 _IO_flush_all F -GLIBC_2.2 _IO_flush_all_linebuffered F -GLIBC_2.2 _IO_fopen F -GLIBC_2.2 _IO_fprintf F -GLIBC_2.2 _IO_fputs F -GLIBC_2.2 _IO_fread F -GLIBC_2.2 _IO_free_backup_area F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_ftell F -GLIBC_2.2 _IO_ftrylockfile F -GLIBC_2.2 _IO_funlockfile F -GLIBC_2.2 _IO_fwrite F -GLIBC_2.2 _IO_getc F -GLIBC_2.2 _IO_getline F -GLIBC_2.2 _IO_getline_info F -GLIBC_2.2 _IO_gets F -GLIBC_2.2 _IO_init F -GLIBC_2.2 _IO_init_marker F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_link_in F -GLIBC_2.2 _IO_list_all D 0x8 -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_marker_delta F -GLIBC_2.2 _IO_marker_difference F -GLIBC_2.2 _IO_padn F -GLIBC_2.2 _IO_peekc_locked F -GLIBC_2.2 _IO_popen F -GLIBC_2.2 _IO_printf F -GLIBC_2.2 _IO_proc_close F -GLIBC_2.2 _IO_proc_open F -GLIBC_2.2 _IO_putc F -GLIBC_2.2 _IO_puts F -GLIBC_2.2 _IO_remove_marker F -GLIBC_2.2 _IO_seekmark F -GLIBC_2.2 _IO_seekoff F -GLIBC_2.2 _IO_seekpos F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_setb F -GLIBC_2.2 _IO_setbuffer F -GLIBC_2.2 _IO_setvbuf F -GLIBC_2.2 _IO_sgetn F -GLIBC_2.2 _IO_sprintf F -GLIBC_2.2 _IO_sputbackc F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sscanf F -GLIBC_2.2 _IO_str_init_readonly F -GLIBC_2.2 _IO_str_init_static F -GLIBC_2.2 _IO_str_overflow F -GLIBC_2.2 _IO_str_pbackfail F -GLIBC_2.2 _IO_str_seekoff F -GLIBC_2.2 _IO_str_underflow F -GLIBC_2.2 _IO_sungetc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_get_mode F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_un_link F -GLIBC_2.2 _IO_ungetc F -GLIBC_2.2 _IO_unsave_markers F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_vfprintf F -GLIBC_2.2 _IO_vfscanf F -GLIBC_2.2 _IO_vsprintf F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0xa8 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 ___brk_addr D 0x8 -GLIBC_2.2 __adjtimex F -GLIBC_2.2 __after_morecore_hook D 0x8 -GLIBC_2.2 __argz_count F -GLIBC_2.2 __argz_next F -GLIBC_2.2 __argz_stringify F -GLIBC_2.2 __asprintf F -GLIBC_2.2 __assert F -GLIBC_2.2 __assert_fail F -GLIBC_2.2 __assert_perror_fail F -GLIBC_2.2 __backtrace F -GLIBC_2.2 __backtrace_symbols F -GLIBC_2.2 __backtrace_symbols_fd F -GLIBC_2.2 __bsd_getpgrp F -GLIBC_2.2 __bzero F -GLIBC_2.2 __check_rhosts_file D 0x4 -GLIBC_2.2 __clone F -GLIBC_2.2 __close F -GLIBC_2.2 __cmsg_nxthdr F -GLIBC_2.2 __connect F -GLIBC_2.2 __ctype32_b D 0x8 -GLIBC_2.2 __ctype32_tolower D 0x8 -GLIBC_2.2 __ctype32_toupper D 0x8 -GLIBC_2.2 __ctype_b D 0x8 -GLIBC_2.2 __ctype_get_mb_cur_max F -GLIBC_2.2 __ctype_tolower D 0x8 -GLIBC_2.2 __ctype_toupper D 0x8 -GLIBC_2.2 __curbrk D 0x8 -GLIBC_2.2 __cxa_atexit F -GLIBC_2.2 __cxa_finalize F -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __daylight D 0x4 -GLIBC_2.2 __dcgettext F -GLIBC_2.2 __default_morecore F -GLIBC_2.2 __deregister_frame F -GLIBC_2.2 __deregister_frame_info F -GLIBC_2.2 __dgettext F -GLIBC_2.2 __dup2 F -GLIBC_2.2 __duplocale F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __environ D 0x8 -GLIBC_2.2 __errno_location F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __fcntl F -GLIBC_2.2 __ffs F -GLIBC_2.2 __finite F -GLIBC_2.2 __finitef F -GLIBC_2.2 __finitel F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fork F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpu_control D 0x4 -GLIBC_2.2 __fpurge F -GLIBC_2.2 __frame_state_for F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __free_hook D 0x8 -GLIBC_2.2 __freelocale F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getdelim F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __getpagesize F -GLIBC_2.2 __getpgid F -GLIBC_2.2 __getpid F -GLIBC_2.2 __gettimeofday F -GLIBC_2.2 __gmtime_r F -GLIBC_2.2 __h_errno_location F -GLIBC_2.2 __isalnum_l F -GLIBC_2.2 __isalpha_l F -GLIBC_2.2 __isascii_l F -GLIBC_2.2 __isblank_l F -GLIBC_2.2 __iscntrl_l F -GLIBC_2.2 __isdigit_l F -GLIBC_2.2 __isgraph_l F -GLIBC_2.2 __isinf F -GLIBC_2.2 __isinff F -GLIBC_2.2 __isinfl F -GLIBC_2.2 __islower_l F -GLIBC_2.2 __isnan F -GLIBC_2.2 __isnanf F -GLIBC_2.2 __isnanl F -GLIBC_2.2 __isprint_l F -GLIBC_2.2 __ispunct_l F -GLIBC_2.2 __isspace_l F -GLIBC_2.2 __isupper_l F -GLIBC_2.2 __iswalnum_l F -GLIBC_2.2 __iswalpha_l F -GLIBC_2.2 __iswblank_l F -GLIBC_2.2 __iswcntrl_l F -GLIBC_2.2 __iswctype F -GLIBC_2.2 __iswctype_l F -GLIBC_2.2 __iswdigit_l F -GLIBC_2.2 __iswgraph_l F -GLIBC_2.2 __iswlower_l F -GLIBC_2.2 __iswprint_l F -GLIBC_2.2 __iswpunct_l F -GLIBC_2.2 __iswspace_l F -GLIBC_2.2 __iswupper_l F -GLIBC_2.2 __iswxdigit_l F -GLIBC_2.2 __isxdigit_l F -GLIBC_2.2 __ivaliduser F -GLIBC_2.2 __key_decryptsession_pk_LOCAL D 0x8 -GLIBC_2.2 __key_encryptsession_pk_LOCAL D 0x8 -GLIBC_2.2 __key_gendes_LOCAL D 0x8 -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_calloc F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __libc_free F -GLIBC_2.2 __libc_freeres F -GLIBC_2.2 __libc_init_first F -GLIBC_2.2 __libc_mallinfo F -GLIBC_2.2 __libc_malloc F -GLIBC_2.2 __libc_mallopt F -GLIBC_2.2 __libc_memalign F -GLIBC_2.2 __libc_pvalloc F -GLIBC_2.2 __libc_realloc F -GLIBC_2.2 __libc_sa_len F -GLIBC_2.2 __libc_start_main F -GLIBC_2.2 __libc_valloc F -GLIBC_2.2 __lseek F -GLIBC_2.2 __lxstat F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __malloc_hook D 0x8 -GLIBC_2.2 __malloc_initialize_hook D 0x8 -GLIBC_2.2 __mbrlen F -GLIBC_2.2 __mbrtowc F -GLIBC_2.2 __memalign_hook D 0x8 -GLIBC_2.2 __mempcpy F -GLIBC_2.2 __mempcpy_small F -GLIBC_2.2 __monstartup F -GLIBC_2.2 __morecore D 0x8 -GLIBC_2.2 __newlocale F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __nss_configure_lookup F -GLIBC_2.2 __nss_database_lookup F -GLIBC_2.2 __nss_group_lookup F -GLIBC_2.2 __nss_hosts_lookup F -GLIBC_2.2 __nss_next F -GLIBC_2.2 __nss_passwd_lookup F -GLIBC_2.2 __open F -GLIBC_2.2 __open64 F -GLIBC_2.2 __overflow F -GLIBC_2.2 __pipe F -GLIBC_2.2 __poll F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __printf_fp F -GLIBC_2.2 __profile_frequency F -GLIBC_2.2 __progname D 0x8 -GLIBC_2.2 __progname_full D 0x8 -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __rawmemchr F -GLIBC_2.2 __rcmd_errstr D 0x8 -GLIBC_2.2 __read F -GLIBC_2.2 __realloc_hook D 0x8 -GLIBC_2.2 __register_frame F -GLIBC_2.2 __register_frame_info F -GLIBC_2.2 __register_frame_info_table F -GLIBC_2.2 __register_frame_table F -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_randomid F -GLIBC_2.2 __res_state F -GLIBC_2.2 __sbrk F -GLIBC_2.2 __sched_get_priority_max F -GLIBC_2.2 __sched_get_priority_min F -GLIBC_2.2 __sched_getparam F -GLIBC_2.2 __sched_getscheduler F -GLIBC_2.2 __sched_setscheduler F -GLIBC_2.2 __sched_yield F -GLIBC_2.2 __secure_getenv F -GLIBC_2.2 __select F -GLIBC_2.2 __send F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __setpgid F -GLIBC_2.2 __sigaction F -GLIBC_2.2 __sigaddset F -GLIBC_2.2 __sigdelset F -GLIBC_2.2 __sigismember F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 __sigpause F -GLIBC_2.2 __sigsetjmp F -GLIBC_2.2 __sigsuspend F -GLIBC_2.2 __statfs F -GLIBC_2.2 __stpcpy F -GLIBC_2.2 __stpcpy_small F -GLIBC_2.2 __stpncpy F -GLIBC_2.2 __strcasecmp F -GLIBC_2.2 __strcasecmp_l F -GLIBC_2.2 __strcasestr F -GLIBC_2.2 __strcoll_l F -GLIBC_2.2 __strcpy_small F -GLIBC_2.2 __strcspn_c1 F -GLIBC_2.2 __strcspn_c2 F -GLIBC_2.2 __strcspn_c3 F -GLIBC_2.2 __strdup F -GLIBC_2.2 __strerror_r F -GLIBC_2.2 __strfmon_l F -GLIBC_2.2 __strncasecmp_l F -GLIBC_2.2 __strndup F -GLIBC_2.2 __strpbrk_c2 F -GLIBC_2.2 __strpbrk_c3 F -GLIBC_2.2 __strsep_1c F -GLIBC_2.2 __strsep_2c F -GLIBC_2.2 __strsep_3c F -GLIBC_2.2 __strsep_g F -GLIBC_2.2 __strspn_c1 F -GLIBC_2.2 __strspn_c2 F -GLIBC_2.2 __strspn_c3 F -GLIBC_2.2 __strtod_internal F -GLIBC_2.2 __strtod_l F -GLIBC_2.2 __strtof_internal F -GLIBC_2.2 __strtof_l F -GLIBC_2.2 __strtok_r F -GLIBC_2.2 __strtok_r_1c F -GLIBC_2.2 __strtol_internal F -GLIBC_2.2 __strtol_l F -GLIBC_2.2 __strtold_internal F -GLIBC_2.2 __strtold_l F -GLIBC_2.2 __strtoll_internal F -GLIBC_2.2 __strtoll_l F -GLIBC_2.2 __strtoul_internal F -GLIBC_2.2 __strtoul_l F -GLIBC_2.2 __strtoull_internal F -GLIBC_2.2 __strtoull_l F -GLIBC_2.2 __strverscmp F -GLIBC_2.2 __strxfrm_l F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __sysv_signal F -GLIBC_2.2 __timezone D 0x8 -GLIBC_2.2 __toascii_l F -GLIBC_2.2 __tolower_l F -GLIBC_2.2 __toupper_l F -GLIBC_2.2 __towctrans F -GLIBC_2.2 __towctrans_l F -GLIBC_2.2 __towlower_l F -GLIBC_2.2 __towupper_l F -GLIBC_2.2 __tzname D 0x10 -GLIBC_2.2 __uflow F -GLIBC_2.2 __underflow F -GLIBC_2.2 __vfork F -GLIBC_2.2 __vfscanf F -GLIBC_2.2 __vsnprintf F -GLIBC_2.2 __vsscanf F -GLIBC_2.2 __wait F -GLIBC_2.2 __waitpid F -GLIBC_2.2 __wcscasecmp_l F -GLIBC_2.2 __wcscoll_l F -GLIBC_2.2 __wcsncasecmp_l F -GLIBC_2.2 __wcstod_internal F -GLIBC_2.2 __wcstod_l F -GLIBC_2.2 __wcstof_internal F -GLIBC_2.2 __wcstof_l F -GLIBC_2.2 __wcstol_internal F -GLIBC_2.2 __wcstol_l F -GLIBC_2.2 __wcstold_internal F -GLIBC_2.2 __wcstold_l F -GLIBC_2.2 __wcstoll_internal F -GLIBC_2.2 __wcstoll_l F -GLIBC_2.2 __wcstoul_internal F -GLIBC_2.2 __wcstoul_l F -GLIBC_2.2 __wcstoull_internal F -GLIBC_2.2 __wcstoull_l F -GLIBC_2.2 __wcsxfrm_l F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __wctype_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __write F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xmknod F -GLIBC_2.2 __xpg_basename F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _authenticate F -GLIBC_2.2 _dl_mcount_wrapper F -GLIBC_2.2 _dl_mcount_wrapper_check F -GLIBC_2.2 _environ D 0x8 -GLIBC_2.2 _exit F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _libc_intl_domainname D 0x5 -GLIBC_2.2 _longjmp F -GLIBC_2.2 _mcleanup F -GLIBC_2.2 _mcount F -GLIBC_2.2 _nl_default_dirname D 0x12 -GLIBC_2.2 _nl_domain_bindings D 0x8 -GLIBC_2.2 _nl_msg_cat_cntr D 0x4 -GLIBC_2.2 _null_auth D 0x18 -GLIBC_2.2 _obstack D 0x8 -GLIBC_2.2 _obstack_allocated_p F -GLIBC_2.2 _obstack_begin F -GLIBC_2.2 _obstack_begin_1 F -GLIBC_2.2 _obstack_free F -GLIBC_2.2 _obstack_memory_used F -GLIBC_2.2 _obstack_newchunk F -GLIBC_2.2 _res D 0x238 -GLIBC_2.2 _res_hconf D 0x48 -GLIBC_2.2 _rpc_dtablesize F -GLIBC_2.2 _seterr_reply F -GLIBC_2.2 _setjmp F -GLIBC_2.2 _sys_errlist D 0x3e8 -GLIBC_2.2 _sys_nerr D 0x4 -GLIBC_2.2 _sys_siglist D 0x200 -GLIBC_2.2 _tolower F -GLIBC_2.2 _toupper F -GLIBC_2.2 a64l F -GLIBC_2.2 abort F -GLIBC_2.2 abs F -GLIBC_2.2 accept F -GLIBC_2.2 access F -GLIBC_2.2 acct F -GLIBC_2.2 addmntent F -GLIBC_2.2 addseverity F -GLIBC_2.2 adjtime F -GLIBC_2.2 adjtimex F -GLIBC_2.2 advance F -GLIBC_2.2 alarm F -GLIBC_2.2 alphasort F -GLIBC_2.2 alphasort64 F -GLIBC_2.2 argp_err_exit_status D 0x4 -GLIBC_2.2 argp_error F -GLIBC_2.2 argp_failure F -GLIBC_2.2 argp_help F -GLIBC_2.2 argp_parse F -GLIBC_2.2 argp_program_bug_address D 0x8 -GLIBC_2.2 argp_program_version D 0x8 -GLIBC_2.2 argp_program_version_hook D 0x8 -GLIBC_2.2 argp_state_help F -GLIBC_2.2 argp_usage F -GLIBC_2.2 argz_add F -GLIBC_2.2 argz_add_sep F -GLIBC_2.2 argz_append F -GLIBC_2.2 argz_count F -GLIBC_2.2 argz_create F -GLIBC_2.2 argz_create_sep F -GLIBC_2.2 argz_delete F -GLIBC_2.2 argz_extract F -GLIBC_2.2 argz_insert F -GLIBC_2.2 argz_next F -GLIBC_2.2 argz_replace F -GLIBC_2.2 argz_stringify F -GLIBC_2.2 asctime F -GLIBC_2.2 asctime_r F -GLIBC_2.2 asprintf F -GLIBC_2.2 atexit F -GLIBC_2.2 atof F -GLIBC_2.2 atoi F -GLIBC_2.2 atol F -GLIBC_2.2 atoll F -GLIBC_2.2 authdes_create F -GLIBC_2.2 authdes_getucred F -GLIBC_2.2 authdes_pk_create F -GLIBC_2.2 authnone_create F -GLIBC_2.2 authunix_create F -GLIBC_2.2 authunix_create_default F -GLIBC_2.2 backtrace F -GLIBC_2.2 backtrace_symbols F -GLIBC_2.2 backtrace_symbols_fd F -GLIBC_2.2 basename F -GLIBC_2.2 bcmp F -GLIBC_2.2 bcopy F -GLIBC_2.2 bdflush F -GLIBC_2.2 bind F -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 bindresvport F -GLIBC_2.2 bindtextdomain F -GLIBC_2.2 brk F -GLIBC_2.2 bsd_signal F -GLIBC_2.2 bsearch F -GLIBC_2.2 btowc F -GLIBC_2.2 bzero F -GLIBC_2.2 calloc F -GLIBC_2.2 callrpc F -GLIBC_2.2 canonicalize_file_name F -GLIBC_2.2 capget F -GLIBC_2.2 capset F -GLIBC_2.2 catclose F -GLIBC_2.2 catgets F -GLIBC_2.2 catopen F -GLIBC_2.2 cbc_crypt F -GLIBC_2.2 cfgetispeed F -GLIBC_2.2 cfgetospeed F -GLIBC_2.2 cfmakeraw F -GLIBC_2.2 cfree F -GLIBC_2.2 cfsetispeed F -GLIBC_2.2 cfsetospeed F -GLIBC_2.2 cfsetspeed F -GLIBC_2.2 chdir F -GLIBC_2.2 chflags F -GLIBC_2.2 chmod F -GLIBC_2.2 chown F -GLIBC_2.2 chroot F -GLIBC_2.2 clearenv F -GLIBC_2.2 clearerr F -GLIBC_2.2 clearerr_unlocked F -GLIBC_2.2 clnt_broadcast F -GLIBC_2.2 clnt_create F -GLIBC_2.2 clnt_pcreateerror F -GLIBC_2.2 clnt_perrno F -GLIBC_2.2 clnt_perror F -GLIBC_2.2 clnt_spcreateerror F -GLIBC_2.2 clnt_sperrno F -GLIBC_2.2 clnt_sperror F -GLIBC_2.2 clntraw_create F -GLIBC_2.2 clnttcp_create F -GLIBC_2.2 clntudp_bufcreate F -GLIBC_2.2 clntudp_create F -GLIBC_2.2 clntunix_create F -GLIBC_2.2 clock F -GLIBC_2.2 clone F -GLIBC_2.2 close F -GLIBC_2.2 closedir F -GLIBC_2.2 closelog F -GLIBC_2.2 confstr F -GLIBC_2.2 connect F -GLIBC_2.2 copysign F -GLIBC_2.2 copysignf F -GLIBC_2.2 copysignl F -GLIBC_2.2 creat F -GLIBC_2.2 creat64 F -GLIBC_2.2 create_module F -GLIBC_2.2 ctermid F -GLIBC_2.2 ctime F -GLIBC_2.2 ctime_r F -GLIBC_2.2 cuserid F -GLIBC_2.2 daemon F -GLIBC_2.2 daylight D 0x4 -GLIBC_2.2 dcgettext F -GLIBC_2.2 dcngettext F -GLIBC_2.2 delete_module F -GLIBC_2.2 des_setparity F -GLIBC_2.2 dgettext F -GLIBC_2.2 difftime F -GLIBC_2.2 dirfd F -GLIBC_2.2 dirname F -GLIBC_2.2 div F -GLIBC_2.2 dngettext F -GLIBC_2.2 dprintf F -GLIBC_2.2 drand48 F -GLIBC_2.2 drand48_r F -GLIBC_2.2 dup F -GLIBC_2.2 dup2 F -GLIBC_2.2 dysize F -GLIBC_2.2 ecb_crypt F -GLIBC_2.2 ecvt F -GLIBC_2.2 ecvt_r F -GLIBC_2.2 endaliasent F -GLIBC_2.2 endfsent F -GLIBC_2.2 endgrent F -GLIBC_2.2 endhostent F -GLIBC_2.2 endmntent F -GLIBC_2.2 endnetent F -GLIBC_2.2 endnetgrent F -GLIBC_2.2 endprotoent F -GLIBC_2.2 endpwent F -GLIBC_2.2 endrpcent F -GLIBC_2.2 endservent F -GLIBC_2.2 endspent F -GLIBC_2.2 endttyent F -GLIBC_2.2 endusershell F -GLIBC_2.2 endutent F -GLIBC_2.2 endutxent F -GLIBC_2.2 environ D 0x8 -GLIBC_2.2 envz_add F -GLIBC_2.2 envz_entry F -GLIBC_2.2 envz_get F -GLIBC_2.2 envz_merge F -GLIBC_2.2 envz_remove F -GLIBC_2.2 envz_strip F -GLIBC_2.2 erand48 F -GLIBC_2.2 erand48_r F -GLIBC_2.2 err F -GLIBC_2.2 error F -GLIBC_2.2 error_at_line F -GLIBC_2.2 error_message_count D 0x4 -GLIBC_2.2 error_one_per_line D 0x4 -GLIBC_2.2 error_print_progname D 0x8 -GLIBC_2.2 errx F -GLIBC_2.2 ether_aton F -GLIBC_2.2 ether_aton_r F -GLIBC_2.2 ether_hostton F -GLIBC_2.2 ether_line F -GLIBC_2.2 ether_ntoa F -GLIBC_2.2 ether_ntoa_r F -GLIBC_2.2 ether_ntohost F -GLIBC_2.2 euidaccess F -GLIBC_2.2 execl F -GLIBC_2.2 execle F -GLIBC_2.2 execlp F -GLIBC_2.2 execv F -GLIBC_2.2 execve F -GLIBC_2.2 execvp F -GLIBC_2.2 exit F -GLIBC_2.2 fattach F -GLIBC_2.2 fchdir F -GLIBC_2.2 fchflags F -GLIBC_2.2 fchmod F -GLIBC_2.2 fchown F -GLIBC_2.2 fclose F -GLIBC_2.2 fcloseall F -GLIBC_2.2 fcntl F -GLIBC_2.2 fcvt F -GLIBC_2.2 fcvt_r F -GLIBC_2.2 fdatasync F -GLIBC_2.2 fdetach F -GLIBC_2.2 fdopen F -GLIBC_2.2 feof F -GLIBC_2.2 feof_unlocked F -GLIBC_2.2 ferror F -GLIBC_2.2 ferror_unlocked F -GLIBC_2.2 fexecve F -GLIBC_2.2 fflush F -GLIBC_2.2 fflush_unlocked F -GLIBC_2.2 ffs F -GLIBC_2.2 ffsl F -GLIBC_2.2 ffsll F -GLIBC_2.2 fgetc F -GLIBC_2.2 fgetc_unlocked F -GLIBC_2.2 fgetgrent F -GLIBC_2.2 fgetgrent_r F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgetpwent F -GLIBC_2.2 fgetpwent_r F -GLIBC_2.2 fgets F -GLIBC_2.2 fgets_unlocked F -GLIBC_2.2 fgetspent F -GLIBC_2.2 fgetspent_r F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fileno F -GLIBC_2.2 fileno_unlocked F -GLIBC_2.2 finite F -GLIBC_2.2 finitef F -GLIBC_2.2 finitel F -GLIBC_2.2 flock F -GLIBC_2.2 flockfile F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fmtmsg F -GLIBC_2.2 fnmatch F -GLIBC_2.2 fopen F -GLIBC_2.2 fopen64 F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fork F -GLIBC_2.2 fpathconf F -GLIBC_2.2 fprintf F -GLIBC_2.2 fputc F -GLIBC_2.2 fputc_unlocked F -GLIBC_2.2 fputs F -GLIBC_2.2 fputs_unlocked F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fread F -GLIBC_2.2 fread_unlocked F -GLIBC_2.2 free F -GLIBC_2.2 freeaddrinfo F -GLIBC_2.2 freopen F -GLIBC_2.2 freopen64 F -GLIBC_2.2 frexp F -GLIBC_2.2 frexpf F -GLIBC_2.2 frexpl F -GLIBC_2.2 fscanf F -GLIBC_2.2 fseek F -GLIBC_2.2 fseeko F -GLIBC_2.2 fseeko64 F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fstatfs F -GLIBC_2.2 fstatfs64 F -GLIBC_2.2 fstatvfs F -GLIBC_2.2 fstatvfs64 F -GLIBC_2.2 fsync F -GLIBC_2.2 ftell F -GLIBC_2.2 ftello F -GLIBC_2.2 ftello64 F -GLIBC_2.2 ftime F -GLIBC_2.2 ftok F -GLIBC_2.2 ftruncate F -GLIBC_2.2 ftruncate64 F -GLIBC_2.2 ftrylockfile F -GLIBC_2.2 fts_children F -GLIBC_2.2 fts_close F -GLIBC_2.2 fts_open F -GLIBC_2.2 fts_read F -GLIBC_2.2 fts_set F -GLIBC_2.2 ftw F -GLIBC_2.2 ftw64 F -GLIBC_2.2 funlockfile F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwrite F -GLIBC_2.2 fwrite_unlocked F -GLIBC_2.2 fwscanf F -GLIBC_2.2 gai_strerror F -GLIBC_2.2 gcvt F -GLIBC_2.2 get_avphys_pages F -GLIBC_2.2 get_current_dir_name F -GLIBC_2.2 get_kernel_syms F -GLIBC_2.2 get_myaddress F -GLIBC_2.2 get_nprocs F -GLIBC_2.2 get_nprocs_conf F -GLIBC_2.2 get_phys_pages F -GLIBC_2.2 getaddrinfo F -GLIBC_2.2 getaliasbyname F -GLIBC_2.2 getaliasbyname_r F -GLIBC_2.2 getaliasent F -GLIBC_2.2 getaliasent_r F -GLIBC_2.2 getc F -GLIBC_2.2 getc_unlocked F -GLIBC_2.2 getchar F -GLIBC_2.2 getchar_unlocked F -GLIBC_2.2 getcontext F -GLIBC_2.2 getcwd F -GLIBC_2.2 getdate F -GLIBC_2.2 getdate_err D 0x4 -GLIBC_2.2 getdate_r F -GLIBC_2.2 getdelim F -GLIBC_2.2 getdirentries F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getdomainname F -GLIBC_2.2 getdtablesize F -GLIBC_2.2 getegid F -GLIBC_2.2 getenv F -GLIBC_2.2 geteuid F -GLIBC_2.2 getfsent F -GLIBC_2.2 getfsfile F -GLIBC_2.2 getfsspec F -GLIBC_2.2 getgid F -GLIBC_2.2 getgrent F -GLIBC_2.2 getgrent_r F -GLIBC_2.2 getgrgid F -GLIBC_2.2 getgrgid_r F -GLIBC_2.2 getgrnam F -GLIBC_2.2 getgrnam_r F -GLIBC_2.2 getgroups F -GLIBC_2.2 gethostbyaddr F -GLIBC_2.2 gethostbyaddr_r F -GLIBC_2.2 gethostbyname F -GLIBC_2.2 gethostbyname2 F -GLIBC_2.2 gethostbyname2_r F -GLIBC_2.2 gethostbyname_r F -GLIBC_2.2 gethostent F -GLIBC_2.2 gethostent_r F -GLIBC_2.2 gethostid F -GLIBC_2.2 gethostname F -GLIBC_2.2 getitimer F -GLIBC_2.2 getline F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getlogin F -GLIBC_2.2 getlogin_r F -GLIBC_2.2 getmntent F -GLIBC_2.2 getmntent_r F -GLIBC_2.2 getmsg F -GLIBC_2.2 getnameinfo F -GLIBC_2.2 getnetbyaddr F -GLIBC_2.2 getnetbyaddr_r F -GLIBC_2.2 getnetbyname F -GLIBC_2.2 getnetbyname_r F -GLIBC_2.2 getnetent F -GLIBC_2.2 getnetent_r F -GLIBC_2.2 getnetgrent F -GLIBC_2.2 getnetgrent_r F -GLIBC_2.2 getnetname F -GLIBC_2.2 getopt F -GLIBC_2.2 getopt_long F -GLIBC_2.2 getopt_long_only F -GLIBC_2.2 getpagesize F -GLIBC_2.2 getpass F -GLIBC_2.2 getpeername F -GLIBC_2.2 getpgid F -GLIBC_2.2 getpgrp F -GLIBC_2.2 getpid F -GLIBC_2.2 getpmsg F -GLIBC_2.2 getppid F -GLIBC_2.2 getpriority F -GLIBC_2.2 getprotobyname F -GLIBC_2.2 getprotobyname_r F -GLIBC_2.2 getprotobynumber F -GLIBC_2.2 getprotobynumber_r F -GLIBC_2.2 getprotoent F -GLIBC_2.2 getprotoent_r F -GLIBC_2.2 getpt F -GLIBC_2.2 getpublickey F -GLIBC_2.2 getpw F -GLIBC_2.2 getpwent F -GLIBC_2.2 getpwent_r F -GLIBC_2.2 getpwnam F -GLIBC_2.2 getpwnam_r F -GLIBC_2.2 getpwuid F -GLIBC_2.2 getpwuid_r F -GLIBC_2.2 getresgid F -GLIBC_2.2 getresuid F -GLIBC_2.2 getrlimit F -GLIBC_2.2 getrlimit64 F -GLIBC_2.2 getrpcbyname F -GLIBC_2.2 getrpcbyname_r F -GLIBC_2.2 getrpcbynumber F -GLIBC_2.2 getrpcbynumber_r F -GLIBC_2.2 getrpcent F -GLIBC_2.2 getrpcent_r F -GLIBC_2.2 getrpcport F -GLIBC_2.2 getrusage F -GLIBC_2.2 gets F -GLIBC_2.2 getsecretkey F -GLIBC_2.2 getservbyname F -GLIBC_2.2 getservbyname_r F -GLIBC_2.2 getservbyport F -GLIBC_2.2 getservbyport_r F -GLIBC_2.2 getservent F -GLIBC_2.2 getservent_r F -GLIBC_2.2 getsid F -GLIBC_2.2 getsockname F -GLIBC_2.2 getsockopt F -GLIBC_2.2 getspent F -GLIBC_2.2 getspent_r F -GLIBC_2.2 getspnam F -GLIBC_2.2 getspnam_r F -GLIBC_2.2 getsubopt F -GLIBC_2.2 gettext F -GLIBC_2.2 gettimeofday F -GLIBC_2.2 getttyent F -GLIBC_2.2 getttynam F -GLIBC_2.2 getuid F -GLIBC_2.2 getusershell F -GLIBC_2.2 getutent F -GLIBC_2.2 getutent_r F -GLIBC_2.2 getutid F -GLIBC_2.2 getutid_r F -GLIBC_2.2 getutline F -GLIBC_2.2 getutline_r F -GLIBC_2.2 getutmp F -GLIBC_2.2 getutmpx F -GLIBC_2.2 getutxent F -GLIBC_2.2 getutxid F -GLIBC_2.2 getutxline F -GLIBC_2.2 getw F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 getwd F -GLIBC_2.2 glob F -GLIBC_2.2 glob64 F -GLIBC_2.2 glob_pattern_p F -GLIBC_2.2 globfree F -GLIBC_2.2 globfree64 F -GLIBC_2.2 gmtime F -GLIBC_2.2 gmtime_r F -GLIBC_2.2 gnu_get_libc_release F -GLIBC_2.2 gnu_get_libc_version F -GLIBC_2.2 grantpt F -GLIBC_2.2 group_member F -GLIBC_2.2 gsignal F -GLIBC_2.2 gtty F -GLIBC_2.2 h_errlist D 0x28 -GLIBC_2.2 h_nerr D 0x4 -GLIBC_2.2 hasmntopt F -GLIBC_2.2 hcreate F -GLIBC_2.2 hcreate_r F -GLIBC_2.2 hdestroy F -GLIBC_2.2 hdestroy_r F -GLIBC_2.2 herror F -GLIBC_2.2 host2netname F -GLIBC_2.2 hsearch F -GLIBC_2.2 hsearch_r F -GLIBC_2.2 hstrerror F -GLIBC_2.2 htonl F -GLIBC_2.2 htons F -GLIBC_2.2 iconv F -GLIBC_2.2 iconv_close F -GLIBC_2.2 iconv_open F -GLIBC_2.2 if_freenameindex F -GLIBC_2.2 if_indextoname F -GLIBC_2.2 if_nameindex F -GLIBC_2.2 if_nametoindex F -GLIBC_2.2 imaxabs F -GLIBC_2.2 imaxdiv F -GLIBC_2.2 in6addr_any D 0x10 -GLIBC_2.2 in6addr_loopback D 0x10 -GLIBC_2.2 index F -GLIBC_2.2 inet_addr F -GLIBC_2.2 inet_aton F -GLIBC_2.2 inet_lnaof F -GLIBC_2.2 inet_makeaddr F -GLIBC_2.2 inet_netof F -GLIBC_2.2 inet_network F -GLIBC_2.2 inet_nsap_addr F -GLIBC_2.2 inet_nsap_ntoa F -GLIBC_2.2 inet_ntoa F -GLIBC_2.2 inet_ntop F -GLIBC_2.2 inet_pton F -GLIBC_2.2 init_module F -GLIBC_2.2 initgroups F -GLIBC_2.2 initstate F -GLIBC_2.2 initstate_r F -GLIBC_2.2 innetgr F -GLIBC_2.2 insque F -GLIBC_2.2 ioctl F -GLIBC_2.2 iruserok F -GLIBC_2.2 iruserok_af F -GLIBC_2.2 isalnum F -GLIBC_2.2 isalpha F -GLIBC_2.2 isascii F -GLIBC_2.2 isastream F -GLIBC_2.2 isatty F -GLIBC_2.2 isblank F -GLIBC_2.2 iscntrl F -GLIBC_2.2 isdigit F -GLIBC_2.2 isfdtype F -GLIBC_2.2 isgraph F -GLIBC_2.2 isinf F -GLIBC_2.2 isinff F -GLIBC_2.2 isinfl F -GLIBC_2.2 islower F -GLIBC_2.2 isnan F -GLIBC_2.2 isnanf F -GLIBC_2.2 isnanl F -GLIBC_2.2 isprint F -GLIBC_2.2 ispunct F -GLIBC_2.2 isspace F -GLIBC_2.2 isupper F -GLIBC_2.2 iswalnum F -GLIBC_2.2 iswalpha F -GLIBC_2.2 iswblank F -GLIBC_2.2 iswcntrl F -GLIBC_2.2 iswctype F -GLIBC_2.2 iswdigit F -GLIBC_2.2 iswgraph F -GLIBC_2.2 iswlower F -GLIBC_2.2 iswprint F -GLIBC_2.2 iswpunct F -GLIBC_2.2 iswspace F -GLIBC_2.2 iswupper F -GLIBC_2.2 iswxdigit F -GLIBC_2.2 isxdigit F -GLIBC_2.2 jrand48 F -GLIBC_2.2 jrand48_r F -GLIBC_2.2 key_decryptsession F -GLIBC_2.2 key_decryptsession_pk F -GLIBC_2.2 key_encryptsession F -GLIBC_2.2 key_encryptsession_pk F -GLIBC_2.2 key_gendes F -GLIBC_2.2 key_get_conv F -GLIBC_2.2 key_secretkey_is_set F -GLIBC_2.2 key_setnet F -GLIBC_2.2 key_setsecret F -GLIBC_2.2 kill F -GLIBC_2.2 killpg F -GLIBC_2.2 klogctl F -GLIBC_2.2 l64a F -GLIBC_2.2 labs F -GLIBC_2.2 lchown F -GLIBC_2.2 lckpwdf F -GLIBC_2.2 lcong48 F -GLIBC_2.2 lcong48_r F -GLIBC_2.2 ldexp F -GLIBC_2.2 ldexpf F -GLIBC_2.2 ldexpl F -GLIBC_2.2 ldiv F -GLIBC_2.2 lfind F -GLIBC_2.2 link F -GLIBC_2.2 listen F -GLIBC_2.2 llabs F -GLIBC_2.2 lldiv F -GLIBC_2.2 llseek F -GLIBC_2.2 loc1 D 0x8 -GLIBC_2.2 loc2 D 0x8 -GLIBC_2.2 localeconv F -GLIBC_2.2 localtime F -GLIBC_2.2 localtime_r F -GLIBC_2.2 lockf F -GLIBC_2.2 lockf64 F -GLIBC_2.2 locs D 0x8 -GLIBC_2.2 longjmp F -GLIBC_2.2 lrand48 F -GLIBC_2.2 lrand48_r F -GLIBC_2.2 lsearch F -GLIBC_2.2 lseek F -GLIBC_2.2 lseek64 F -GLIBC_2.2 madvise F -GLIBC_2.2 makecontext F -GLIBC_2.2 mallinfo F -GLIBC_2.2 malloc F -GLIBC_2.2 malloc_get_state F -GLIBC_2.2 malloc_set_state F -GLIBC_2.2 malloc_stats F -GLIBC_2.2 malloc_trim F -GLIBC_2.2 malloc_usable_size F -GLIBC_2.2 mallopt F -GLIBC_2.2 mallwatch D 0x8 -GLIBC_2.2 mblen F -GLIBC_2.2 mbrlen F -GLIBC_2.2 mbrtowc F -GLIBC_2.2 mbsinit F -GLIBC_2.2 mbsnrtowcs F -GLIBC_2.2 mbsrtowcs F -GLIBC_2.2 mbstowcs F -GLIBC_2.2 mbtowc F -GLIBC_2.2 mcheck F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 mcount F -GLIBC_2.2 memalign F -GLIBC_2.2 memccpy F -GLIBC_2.2 memchr F -GLIBC_2.2 memcmp F -GLIBC_2.2 memcpy F -GLIBC_2.2 memfrob F -GLIBC_2.2 memmem F -GLIBC_2.2 memmove F -GLIBC_2.2 mempcpy F -GLIBC_2.2 memrchr F -GLIBC_2.2 memset F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdir F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkfifo F -GLIBC_2.2 mkstemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 mktemp F -GLIBC_2.2 mktime F -GLIBC_2.2 mlock F -GLIBC_2.2 mlockall F -GLIBC_2.2 mmap F -GLIBC_2.2 mmap64 F -GLIBC_2.2 modf F -GLIBC_2.2 modff F -GLIBC_2.2 modfl F -GLIBC_2.2 moncontrol F -GLIBC_2.2 monstartup F -GLIBC_2.2 mount F -GLIBC_2.2 mprobe F -GLIBC_2.2 mprotect F -GLIBC_2.2 mrand48 F -GLIBC_2.2 mrand48_r F -GLIBC_2.2 mremap F -GLIBC_2.2 msgctl F -GLIBC_2.2 msgget F -GLIBC_2.2 msgrcv F -GLIBC_2.2 msgsnd F -GLIBC_2.2 msync F -GLIBC_2.2 mtrace F -GLIBC_2.2 munlock F -GLIBC_2.2 munlockall F -GLIBC_2.2 munmap F -GLIBC_2.2 muntrace F -GLIBC_2.2 nanosleep F -GLIBC_2.2 netname2host F -GLIBC_2.2 netname2user F -GLIBC_2.2 nfsservctl F -GLIBC_2.2 nftw F -GLIBC_2.2 nftw64 F -GLIBC_2.2 ngettext F -GLIBC_2.2 nice F -GLIBC_2.2 nl_langinfo F -GLIBC_2.2 nrand48 F -GLIBC_2.2 nrand48_r F -GLIBC_2.2 ntohl F -GLIBC_2.2 ntohs F -GLIBC_2.2 ntp_adjtime F -GLIBC_2.2 ntp_gettime F -GLIBC_2.2 obstack_alloc_failed_handler D 0x8 -GLIBC_2.2 obstack_exit_failure D 0x4 -GLIBC_2.2 obstack_free F -GLIBC_2.2 obstack_printf F -GLIBC_2.2 obstack_vprintf F -GLIBC_2.2 on_exit F -GLIBC_2.2 open F -GLIBC_2.2 open64 F -GLIBC_2.2 open_memstream F -GLIBC_2.2 opendir F -GLIBC_2.2 openlog F -GLIBC_2.2 optarg D 0x8 -GLIBC_2.2 opterr D 0x4 -GLIBC_2.2 optind D 0x4 -GLIBC_2.2 optopt D 0x4 -GLIBC_2.2 parse_printf_format F -GLIBC_2.2 passwd2des F -GLIBC_2.2 pathconf F -GLIBC_2.2 pause F -GLIBC_2.2 pclose F -GLIBC_2.2 perror F -GLIBC_2.2 personality F -GLIBC_2.2 pipe F -GLIBC_2.2 pmap_getmaps F -GLIBC_2.2 pmap_getport F -GLIBC_2.2 pmap_rmtcall F -GLIBC_2.2 pmap_set F -GLIBC_2.2 pmap_unset F -GLIBC_2.2 poll F -GLIBC_2.2 popen F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 prctl F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 printf F -GLIBC_2.2 printf_size F -GLIBC_2.2 printf_size_info F -GLIBC_2.2 profil F -GLIBC_2.2 program_invocation_name D 0x8 -GLIBC_2.2 program_invocation_short_name D 0x8 -GLIBC_2.2 pselect F -GLIBC_2.2 psignal F -GLIBC_2.2 pthread_attr_destroy F -GLIBC_2.2 pthread_attr_getdetachstate F -GLIBC_2.2 pthread_attr_getinheritsched F -GLIBC_2.2 pthread_attr_getschedparam F -GLIBC_2.2 pthread_attr_getschedpolicy F -GLIBC_2.2 pthread_attr_getscope F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 pthread_attr_setdetachstate F -GLIBC_2.2 pthread_attr_setinheritsched F -GLIBC_2.2 pthread_attr_setschedparam F -GLIBC_2.2 pthread_attr_setschedpolicy F -GLIBC_2.2 pthread_attr_setscope F -GLIBC_2.2 pthread_cond_broadcast F -GLIBC_2.2 pthread_cond_destroy F -GLIBC_2.2 pthread_cond_init F -GLIBC_2.2 pthread_cond_signal F -GLIBC_2.2 pthread_cond_timedwait F -GLIBC_2.2 pthread_cond_wait F -GLIBC_2.2 pthread_condattr_destroy F -GLIBC_2.2 pthread_condattr_init F -GLIBC_2.2 pthread_equal F -GLIBC_2.2 pthread_exit F -GLIBC_2.2 pthread_getschedparam F -GLIBC_2.2 pthread_mutex_destroy F -GLIBC_2.2 pthread_mutex_init F -GLIBC_2.2 pthread_mutex_lock F -GLIBC_2.2 pthread_mutex_unlock F -GLIBC_2.2 pthread_self F -GLIBC_2.2 pthread_setcancelstate F -GLIBC_2.2 pthread_setcanceltype F -GLIBC_2.2 pthread_setschedparam F -GLIBC_2.2 ptrace F -GLIBC_2.2 ptsname F -GLIBC_2.2 ptsname_r F -GLIBC_2.2 putc F -GLIBC_2.2 putc_unlocked F -GLIBC_2.2 putchar F -GLIBC_2.2 putchar_unlocked F -GLIBC_2.2 putenv F -GLIBC_2.2 putgrent F -GLIBC_2.2 putmsg F -GLIBC_2.2 putpmsg F -GLIBC_2.2 putpwent F -GLIBC_2.2 puts F -GLIBC_2.2 putspent F -GLIBC_2.2 pututline F -GLIBC_2.2 pututxline F -GLIBC_2.2 putw F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 pvalloc F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 qecvt F -GLIBC_2.2 qecvt_r F -GLIBC_2.2 qfcvt F -GLIBC_2.2 qfcvt_r F -GLIBC_2.2 qgcvt F -GLIBC_2.2 qsort F -GLIBC_2.2 query_module F -GLIBC_2.2 quotactl F -GLIBC_2.2 raise F -GLIBC_2.2 rand F -GLIBC_2.2 rand_r F -GLIBC_2.2 random F -GLIBC_2.2 random_r F -GLIBC_2.2 rawmemchr F -GLIBC_2.2 rcmd F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 re_comp F -GLIBC_2.2 re_compile_fastmap F -GLIBC_2.2 re_compile_pattern F -GLIBC_2.2 re_exec F -GLIBC_2.2 re_match F -GLIBC_2.2 re_match_2 F -GLIBC_2.2 re_max_failures D 0x4 -GLIBC_2.2 re_search F -GLIBC_2.2 re_search_2 F -GLIBC_2.2 re_set_registers F -GLIBC_2.2 re_set_syntax F -GLIBC_2.2 re_syntax_options D 0x8 -GLIBC_2.2 read F -GLIBC_2.2 readdir F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 readdir_r F -GLIBC_2.2 readlink F -GLIBC_2.2 readv F -GLIBC_2.2 realloc F -GLIBC_2.2 realpath F -GLIBC_2.2 reboot F -GLIBC_2.2 recv F -GLIBC_2.2 recvfrom F -GLIBC_2.2 recvmsg F -GLIBC_2.2 regcomp F -GLIBC_2.2 regerror F -GLIBC_2.2 regexec F -GLIBC_2.2 regfree F -GLIBC_2.2 register_printf_function F -GLIBC_2.2 registerrpc F -GLIBC_2.2 remove F -GLIBC_2.2 remque F -GLIBC_2.2 rename F -GLIBC_2.2 revoke F -GLIBC_2.2 rewind F -GLIBC_2.2 rewinddir F -GLIBC_2.2 rexec F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rexecoptions D 0x4 -GLIBC_2.2 rindex F -GLIBC_2.2 rmdir F -GLIBC_2.2 rpc_createerr D 0x20 -GLIBC_2.2 rpmatch F -GLIBC_2.2 rresvport F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 rtime F -GLIBC_2.2 ruserok F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 ruserpass F -GLIBC_2.2 sbrk F -GLIBC_2.2 scalbn F -GLIBC_2.2 scalbnf F -GLIBC_2.2 scalbnl F -GLIBC_2.2 scandir F -GLIBC_2.2 scandir64 F -GLIBC_2.2 scanf F -GLIBC_2.2 sched_get_priority_max F -GLIBC_2.2 sched_get_priority_min F -GLIBC_2.2 sched_getparam F -GLIBC_2.2 sched_getscheduler F -GLIBC_2.2 sched_rr_get_interval F -GLIBC_2.2 sched_setparam F -GLIBC_2.2 sched_setscheduler F -GLIBC_2.2 sched_yield F -GLIBC_2.2 seed48 F -GLIBC_2.2 seed48_r F -GLIBC_2.2 seekdir F -GLIBC_2.2 select F -GLIBC_2.2 semctl F -GLIBC_2.2 semget F -GLIBC_2.2 semop F -GLIBC_2.2 send F -GLIBC_2.2 sendfile F -GLIBC_2.2 sendmsg F -GLIBC_2.2 sendto F -GLIBC_2.2 setaliasent F -GLIBC_2.2 setbuf F -GLIBC_2.2 setbuffer F -GLIBC_2.2 setcontext F -GLIBC_2.2 setdomainname F -GLIBC_2.2 setegid F -GLIBC_2.2 setenv F -GLIBC_2.2 seteuid F -GLIBC_2.2 setfsent F -GLIBC_2.2 setfsgid F -GLIBC_2.2 setfsuid F -GLIBC_2.2 setgid F -GLIBC_2.2 setgrent F -GLIBC_2.2 setgroups F -GLIBC_2.2 sethostent F -GLIBC_2.2 sethostid F -GLIBC_2.2 sethostname F -GLIBC_2.2 setitimer F -GLIBC_2.2 setjmp F -GLIBC_2.2 setlinebuf F -GLIBC_2.2 setlocale F -GLIBC_2.2 setlogin F -GLIBC_2.2 setlogmask F -GLIBC_2.2 setmntent F -GLIBC_2.2 setnetent F -GLIBC_2.2 setnetgrent F -GLIBC_2.2 setpgid F -GLIBC_2.2 setpgrp F -GLIBC_2.2 setpriority F -GLIBC_2.2 setprotoent F -GLIBC_2.2 setpwent F -GLIBC_2.2 setregid F -GLIBC_2.2 setresgid F -GLIBC_2.2 setresuid F -GLIBC_2.2 setreuid F -GLIBC_2.2 setrlimit F -GLIBC_2.2 setrlimit64 F -GLIBC_2.2 setrpcent F -GLIBC_2.2 setservent F -GLIBC_2.2 setsid F -GLIBC_2.2 setsockopt F -GLIBC_2.2 setspent F -GLIBC_2.2 setstate F -GLIBC_2.2 setstate_r F -GLIBC_2.2 settimeofday F -GLIBC_2.2 setttyent F -GLIBC_2.2 setuid F -GLIBC_2.2 setusershell F -GLIBC_2.2 setutent F -GLIBC_2.2 setutxent F -GLIBC_2.2 setvbuf F -GLIBC_2.2 sgetspent F -GLIBC_2.2 sgetspent_r F -GLIBC_2.2 shmat F -GLIBC_2.2 shmctl F -GLIBC_2.2 shmdt F -GLIBC_2.2 shmget F -GLIBC_2.2 shutdown F -GLIBC_2.2 sigaction F -GLIBC_2.2 sigaddset F -GLIBC_2.2 sigaltstack F -GLIBC_2.2 sigandset F -GLIBC_2.2 sigblock F -GLIBC_2.2 sigdelset F -GLIBC_2.2 sigemptyset F -GLIBC_2.2 sigfillset F -GLIBC_2.2 siggetmask F -GLIBC_2.2 sighold F -GLIBC_2.2 sigignore F -GLIBC_2.2 siginterrupt F -GLIBC_2.2 sigisemptyset F -GLIBC_2.2 sigismember F -GLIBC_2.2 siglongjmp F -GLIBC_2.2 signal F -GLIBC_2.2 sigorset F -GLIBC_2.2 sigpause F -GLIBC_2.2 sigpending F -GLIBC_2.2 sigprocmask F -GLIBC_2.2 sigqueue F -GLIBC_2.2 sigrelse F -GLIBC_2.2 sigreturn F -GLIBC_2.2 sigset F -GLIBC_2.2 sigsetmask F -GLIBC_2.2 sigstack F -GLIBC_2.2 sigsuspend F -GLIBC_2.2 sigtimedwait F -GLIBC_2.2 sigvec F -GLIBC_2.2 sigwait F -GLIBC_2.2 sigwaitinfo F -GLIBC_2.2 sleep F -GLIBC_2.2 snprintf F -GLIBC_2.2 socket F -GLIBC_2.2 socketpair F -GLIBC_2.2 sprintf F -GLIBC_2.2 srand F -GLIBC_2.2 srand48 F -GLIBC_2.2 srand48_r F -GLIBC_2.2 srandom F -GLIBC_2.2 srandom_r F -GLIBC_2.2 sscanf F -GLIBC_2.2 ssignal F -GLIBC_2.2 sstk F -GLIBC_2.2 statfs F -GLIBC_2.2 statfs64 F -GLIBC_2.2 statvfs F -GLIBC_2.2 statvfs64 F -GLIBC_2.2 stderr D 0x8 -GLIBC_2.2 stdin D 0x8 -GLIBC_2.2 stdout D 0x8 -GLIBC_2.2 step F -GLIBC_2.2 stime F -GLIBC_2.2 stpcpy F -GLIBC_2.2 stpncpy F -GLIBC_2.2 strcasecmp F -GLIBC_2.2 strcasestr F -GLIBC_2.2 strcat F -GLIBC_2.2 strchr F -GLIBC_2.2 strchrnul F -GLIBC_2.2 strcmp F -GLIBC_2.2 strcoll F -GLIBC_2.2 strcpy F -GLIBC_2.2 strcspn F -GLIBC_2.2 strdup F -GLIBC_2.2 strerror F -GLIBC_2.2 strerror_r F -GLIBC_2.2 strfmon F -GLIBC_2.2 strfry F -GLIBC_2.2 strftime F -GLIBC_2.2 strlen F -GLIBC_2.2 strncasecmp F -GLIBC_2.2 strncat F -GLIBC_2.2 strncmp F -GLIBC_2.2 strncpy F -GLIBC_2.2 strndup F -GLIBC_2.2 strnlen F -GLIBC_2.2 strpbrk F -GLIBC_2.2 strptime F -GLIBC_2.2 strrchr F -GLIBC_2.2 strsep F -GLIBC_2.2 strsignal F -GLIBC_2.2 strspn F -GLIBC_2.2 strstr F -GLIBC_2.2 strtod F -GLIBC_2.2 strtof F -GLIBC_2.2 strtoimax F -GLIBC_2.2 strtok F -GLIBC_2.2 strtok_r F -GLIBC_2.2 strtol F -GLIBC_2.2 strtold F -GLIBC_2.2 strtoll F -GLIBC_2.2 strtoq F -GLIBC_2.2 strtoul F -GLIBC_2.2 strtoull F -GLIBC_2.2 strtoumax F -GLIBC_2.2 strtouq F -GLIBC_2.2 strverscmp F -GLIBC_2.2 strxfrm F -GLIBC_2.2 stty F -GLIBC_2.2 svc_exit F -GLIBC_2.2 svc_fdset D 0x80 -GLIBC_2.2 svc_getreq F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_getreqset F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x8 -GLIBC_2.2 svc_register F -GLIBC_2.2 svc_run F -GLIBC_2.2 svc_sendreply F -GLIBC_2.2 svc_unregister F -GLIBC_2.2 svcauthdes_stats D 0x18 -GLIBC_2.2 svcerr_auth F -GLIBC_2.2 svcerr_decode F -GLIBC_2.2 svcerr_noproc F -GLIBC_2.2 svcerr_noprog F -GLIBC_2.2 svcerr_progvers F -GLIBC_2.2 svcerr_systemerr F -GLIBC_2.2 svcerr_weakauth F -GLIBC_2.2 svcfd_create F -GLIBC_2.2 svcraw_create F -GLIBC_2.2 svctcp_create F -GLIBC_2.2 svcudp_bufcreate F -GLIBC_2.2 svcudp_create F -GLIBC_2.2 svcudp_enablecache F -GLIBC_2.2 svcunix_create F -GLIBC_2.2 svcunixfd_create F -GLIBC_2.2 swab F -GLIBC_2.2 swapcontext F -GLIBC_2.2 swapoff F -GLIBC_2.2 swapon F -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 symlink F -GLIBC_2.2 sync F -GLIBC_2.2 sys_errlist D 0x3e8 -GLIBC_2.2 sys_nerr D 0x4 -GLIBC_2.2 sys_sigabbrev D 0x200 -GLIBC_2.2 sys_siglist D 0x200 -GLIBC_2.2 syscall F -GLIBC_2.2 sysconf F -GLIBC_2.2 sysctl F -GLIBC_2.2 sysinfo F -GLIBC_2.2 syslog F -GLIBC_2.2 system F -GLIBC_2.2 sysv_signal F -GLIBC_2.2 tcdrain F -GLIBC_2.2 tcflow F -GLIBC_2.2 tcflush F -GLIBC_2.2 tcgetattr F -GLIBC_2.2 tcgetpgrp F -GLIBC_2.2 tcgetsid F -GLIBC_2.2 tcsendbreak F -GLIBC_2.2 tcsetattr F -GLIBC_2.2 tcsetpgrp F -GLIBC_2.2 tdelete F -GLIBC_2.2 tdestroy F -GLIBC_2.2 telldir F -GLIBC_2.2 tempnam F -GLIBC_2.2 textdomain F -GLIBC_2.2 tfind F -GLIBC_2.2 time F -GLIBC_2.2 timegm F -GLIBC_2.2 timelocal F -GLIBC_2.2 times F -GLIBC_2.2 timezone D 0x8 -GLIBC_2.2 tmpfile F -GLIBC_2.2 tmpfile64 F -GLIBC_2.2 tmpnam F -GLIBC_2.2 tmpnam_r F -GLIBC_2.2 toascii F -GLIBC_2.2 tolower F -GLIBC_2.2 toupper F -GLIBC_2.2 towctrans F -GLIBC_2.2 towlower F -GLIBC_2.2 towupper F -GLIBC_2.2 tr_break F -GLIBC_2.2 truncate F -GLIBC_2.2 truncate64 F -GLIBC_2.2 tsearch F -GLIBC_2.2 ttyname F -GLIBC_2.2 ttyname_r F -GLIBC_2.2 ttyslot F -GLIBC_2.2 twalk F -GLIBC_2.2 tzname D 0x10 -GLIBC_2.2 tzset F -GLIBC_2.2 ualarm F -GLIBC_2.2 ulckpwdf F -GLIBC_2.2 ulimit F -GLIBC_2.2 umask F -GLIBC_2.2 umount F -GLIBC_2.2 umount2 F -GLIBC_2.2 uname F -GLIBC_2.2 ungetc F -GLIBC_2.2 ungetwc F -GLIBC_2.2 unlink F -GLIBC_2.2 unlockpt F -GLIBC_2.2 unsetenv F -GLIBC_2.2 updwtmp F -GLIBC_2.2 updwtmpx F -GLIBC_2.2 uselib F -GLIBC_2.2 user2netname F -GLIBC_2.2 usleep F -GLIBC_2.2 ustat F -GLIBC_2.2 utime F -GLIBC_2.2 utimes F -GLIBC_2.2 utmpname F -GLIBC_2.2 utmpxname F -GLIBC_2.2 valloc F -GLIBC_2.2 vasprintf F -GLIBC_2.2 vdprintf F -GLIBC_2.2 verr F -GLIBC_2.2 verrx F -GLIBC_2.2 versionsort F -GLIBC_2.2 versionsort64 F -GLIBC_2.2 vfork F -GLIBC_2.2 vfprintf F -GLIBC_2.2 vfscanf F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vhangup F -GLIBC_2.2 vlimit F -GLIBC_2.2 vprintf F -GLIBC_2.2 vscanf F -GLIBC_2.2 vsnprintf F -GLIBC_2.2 vsprintf F -GLIBC_2.2 vsscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vsyslog F -GLIBC_2.2 vtimes F -GLIBC_2.2 vwarn F -GLIBC_2.2 vwarnx F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 wait F -GLIBC_2.2 wait3 F -GLIBC_2.2 wait4 F -GLIBC_2.2 waitid F -GLIBC_2.2 waitpid F -GLIBC_2.2 warn F -GLIBC_2.2 warnx F -GLIBC_2.2 wcpcpy F -GLIBC_2.2 wcpncpy F -GLIBC_2.2 wcrtomb F -GLIBC_2.2 wcscasecmp F -GLIBC_2.2 wcscat F -GLIBC_2.2 wcschr F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcscmp F -GLIBC_2.2 wcscoll F -GLIBC_2.2 wcscpy F -GLIBC_2.2 wcscspn F -GLIBC_2.2 wcsdup F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wcslen F -GLIBC_2.2 wcsncasecmp F -GLIBC_2.2 wcsncat F -GLIBC_2.2 wcsncmp F -GLIBC_2.2 wcsncpy F -GLIBC_2.2 wcsnlen F -GLIBC_2.2 wcsnrtombs F -GLIBC_2.2 wcspbrk F -GLIBC_2.2 wcsrchr F -GLIBC_2.2 wcsrtombs F -GLIBC_2.2 wcsspn F -GLIBC_2.2 wcsstr F -GLIBC_2.2 wcstod F -GLIBC_2.2 wcstof F -GLIBC_2.2 wcstoimax F -GLIBC_2.2 wcstok F -GLIBC_2.2 wcstol F -GLIBC_2.2 wcstold F -GLIBC_2.2 wcstoll F -GLIBC_2.2 wcstombs F -GLIBC_2.2 wcstoq F -GLIBC_2.2 wcstoul F -GLIBC_2.2 wcstoull F -GLIBC_2.2 wcstoumax F -GLIBC_2.2 wcstouq F -GLIBC_2.2 wcswcs F -GLIBC_2.2 wcswidth F -GLIBC_2.2 wcsxfrm F -GLIBC_2.2 wctob F -GLIBC_2.2 wctomb F -GLIBC_2.2 wctrans F -GLIBC_2.2 wctype F -GLIBC_2.2 wcwidth F -GLIBC_2.2 wmemchr F -GLIBC_2.2 wmemcmp F -GLIBC_2.2 wmemcpy F -GLIBC_2.2 wmemmove F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wmemset F -GLIBC_2.2 wordexp F -GLIBC_2.2 wordfree F -GLIBC_2.2 wprintf F -GLIBC_2.2 write F -GLIBC_2.2 writev F -GLIBC_2.2 wscanf F -GLIBC_2.2 xdecrypt F -GLIBC_2.2 xdr_accepted_reply F -GLIBC_2.2 xdr_array F -GLIBC_2.2 xdr_authdes_cred F -GLIBC_2.2 xdr_authdes_verf F -GLIBC_2.2 xdr_authunix_parms F -GLIBC_2.2 xdr_bool F -GLIBC_2.2 xdr_bytes F -GLIBC_2.2 xdr_callhdr F -GLIBC_2.2 xdr_callmsg F -GLIBC_2.2 xdr_char F -GLIBC_2.2 xdr_cryptkeyarg F -GLIBC_2.2 xdr_cryptkeyarg2 F -GLIBC_2.2 xdr_cryptkeyres F -GLIBC_2.2 xdr_des_block F -GLIBC_2.2 xdr_double F -GLIBC_2.2 xdr_enum F -GLIBC_2.2 xdr_float F -GLIBC_2.2 xdr_free F -GLIBC_2.2 xdr_getcredres F -GLIBC_2.2 xdr_hyper F -GLIBC_2.2 xdr_int F -GLIBC_2.2 xdr_int16_t F -GLIBC_2.2 xdr_int32_t F -GLIBC_2.2 xdr_int64_t F -GLIBC_2.2 xdr_int8_t F -GLIBC_2.2 xdr_key_netstarg F -GLIBC_2.2 xdr_key_netstres F -GLIBC_2.2 xdr_keybuf F -GLIBC_2.2 xdr_keystatus F -GLIBC_2.2 xdr_long F -GLIBC_2.2 xdr_longlong_t F -GLIBC_2.2 xdr_netnamestr F -GLIBC_2.2 xdr_netobj F -GLIBC_2.2 xdr_opaque F -GLIBC_2.2 xdr_opaque_auth F -GLIBC_2.2 xdr_pmap F -GLIBC_2.2 xdr_pmaplist F -GLIBC_2.2 xdr_pointer F -GLIBC_2.2 xdr_reference F -GLIBC_2.2 xdr_rejected_reply F -GLIBC_2.2 xdr_replymsg F -GLIBC_2.2 xdr_rmtcall_args F -GLIBC_2.2 xdr_rmtcallres F -GLIBC_2.2 xdr_short F -GLIBC_2.2 xdr_sizeof F -GLIBC_2.2 xdr_string F -GLIBC_2.2 xdr_u_char F -GLIBC_2.2 xdr_u_hyper F -GLIBC_2.2 xdr_u_int F -GLIBC_2.2 xdr_u_long F -GLIBC_2.2 xdr_u_longlong_t F -GLIBC_2.2 xdr_u_short F -GLIBC_2.2 xdr_uint16_t F -GLIBC_2.2 xdr_uint32_t F -GLIBC_2.2 xdr_uint64_t F -GLIBC_2.2 xdr_uint8_t F -GLIBC_2.2 xdr_union F -GLIBC_2.2 xdr_unixcred F -GLIBC_2.2 xdr_vector F -GLIBC_2.2 xdr_void F -GLIBC_2.2 xdr_wrapstring F -GLIBC_2.2 xdrmem_create F -GLIBC_2.2 xdrrec_create F -GLIBC_2.2 xdrrec_endofrecord F -GLIBC_2.2 xdrrec_eof F -GLIBC_2.2 xdrrec_skiprecord F -GLIBC_2.2 xdrstdio_create F -GLIBC_2.2 xencrypt F -GLIBC_2.2 xprt_register F -GLIBC_2.2 xprt_unregister F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 _sys_errlist D 0x3f0 -GLIBC_2.3 _sys_nerr D 0x4 -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 sys_errlist D 0x3f0 -GLIBC_2.3 sys_nerr D 0x4 -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x208 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 strtoll_l F -GLIBC_2.3.3 strtoull_l F -GLIBC_2.3.3 sys_sigabbrev D 0x208 -GLIBC_2.3.3 sys_siglist D 0x208 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 _IO_fprintf F -GLIBC_2.4 _IO_printf F -GLIBC_2.4 _IO_sprintf F -GLIBC_2.4 _IO_sscanf F -GLIBC_2.4 _IO_vfprintf F -GLIBC_2.4 _IO_vfscanf F -GLIBC_2.4 _IO_vsprintf F -GLIBC_2.4 __asprintf F -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fprintf_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __isinfl F -GLIBC_2.4 __isnanl F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __nldbl__IO_fprintf F -GLIBC_2.4 __nldbl__IO_printf F -GLIBC_2.4 __nldbl__IO_sprintf F -GLIBC_2.4 __nldbl__IO_sscanf F -GLIBC_2.4 __nldbl__IO_vfprintf F -GLIBC_2.4 __nldbl__IO_vfscanf F -GLIBC_2.4 __nldbl__IO_vsprintf F -GLIBC_2.4 __nldbl___asprintf F -GLIBC_2.4 __nldbl___fprintf_chk F -GLIBC_2.4 __nldbl___fwprintf_chk F -GLIBC_2.4 __nldbl___printf_chk F -GLIBC_2.4 __nldbl___printf_fp F -GLIBC_2.4 __nldbl___snprintf_chk F -GLIBC_2.4 __nldbl___sprintf_chk F -GLIBC_2.4 __nldbl___strfmon_l F -GLIBC_2.4 __nldbl___swprintf_chk F -GLIBC_2.4 __nldbl___syslog_chk F -GLIBC_2.4 __nldbl___vfprintf_chk F -GLIBC_2.4 __nldbl___vfscanf F -GLIBC_2.4 __nldbl___vfwprintf_chk F -GLIBC_2.4 __nldbl___vprintf_chk F -GLIBC_2.4 __nldbl___vsnprintf F -GLIBC_2.4 __nldbl___vsnprintf_chk F -GLIBC_2.4 __nldbl___vsprintf_chk F -GLIBC_2.4 __nldbl___vsscanf F -GLIBC_2.4 __nldbl___vstrfmon F -GLIBC_2.4 __nldbl___vstrfmon_l F -GLIBC_2.4 __nldbl___vswprintf_chk F -GLIBC_2.4 __nldbl___vsyslog_chk F -GLIBC_2.4 __nldbl___vwprintf_chk F -GLIBC_2.4 __nldbl___wprintf_chk F -GLIBC_2.4 __nldbl_asprintf F -GLIBC_2.4 __nldbl_dprintf F -GLIBC_2.4 __nldbl_fprintf F -GLIBC_2.4 __nldbl_fscanf F -GLIBC_2.4 __nldbl_fwprintf F -GLIBC_2.4 __nldbl_fwscanf F -GLIBC_2.4 __nldbl_obstack_printf F -GLIBC_2.4 __nldbl_obstack_vprintf F -GLIBC_2.4 __nldbl_printf F -GLIBC_2.4 __nldbl_printf_size F -GLIBC_2.4 __nldbl_scanf F -GLIBC_2.4 __nldbl_snprintf F -GLIBC_2.4 __nldbl_sprintf F -GLIBC_2.4 __nldbl_sscanf F -GLIBC_2.4 __nldbl_strfmon F -GLIBC_2.4 __nldbl_strfmon_l F -GLIBC_2.4 __nldbl_swprintf F -GLIBC_2.4 __nldbl_swscanf F -GLIBC_2.4 __nldbl_syslog F -GLIBC_2.4 __nldbl_vasprintf F -GLIBC_2.4 __nldbl_vdprintf F -GLIBC_2.4 __nldbl_vfprintf F -GLIBC_2.4 __nldbl_vfscanf F -GLIBC_2.4 __nldbl_vfwprintf F -GLIBC_2.4 __nldbl_vfwscanf F -GLIBC_2.4 __nldbl_vprintf F -GLIBC_2.4 __nldbl_vscanf F -GLIBC_2.4 __nldbl_vsnprintf F -GLIBC_2.4 __nldbl_vsprintf F -GLIBC_2.4 __nldbl_vsscanf F -GLIBC_2.4 __nldbl_vswprintf F -GLIBC_2.4 __nldbl_vswscanf F -GLIBC_2.4 __nldbl_vsyslog F -GLIBC_2.4 __nldbl_vwprintf F -GLIBC_2.4 __nldbl_vwscanf F -GLIBC_2.4 __nldbl_wprintf F -GLIBC_2.4 __nldbl_wscanf F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __printf_chk F -GLIBC_2.4 __printf_fp F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __signbitl F -GLIBC_2.4 __snprintf_chk F -GLIBC_2.4 __sprintf_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __strfmon_l F -GLIBC_2.4 __strtold_internal F -GLIBC_2.4 __strtold_l F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfprintf_chk F -GLIBC_2.4 __vfscanf F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vprintf_chk F -GLIBC_2.4 __vsnprintf F -GLIBC_2.4 __vsnprintf_chk F -GLIBC_2.4 __vsprintf_chk F -GLIBC_2.4 __vsscanf F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstold_internal F -GLIBC_2.4 __wcstold_l F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 _sys_errlist D 0x420 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 asprintf F -GLIBC_2.4 copysignl F -GLIBC_2.4 dprintf F -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 finitel F -GLIBC_2.4 fprintf F -GLIBC_2.4 frexpl F -GLIBC_2.4 fscanf F -GLIBC_2.4 futimesat F -GLIBC_2.4 fwprintf F -GLIBC_2.4 fwscanf F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 isinfl F -GLIBC_2.4 isnanl F -GLIBC_2.4 ldexpl F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 modfl F -GLIBC_2.4 obstack_printf F -GLIBC_2.4 obstack_vprintf F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 printf F -GLIBC_2.4 printf_size F -GLIBC_2.4 qecvt F -GLIBC_2.4 qecvt_r F -GLIBC_2.4 qfcvt F -GLIBC_2.4 qfcvt_r F -GLIBC_2.4 qgcvt F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 scalbnl F -GLIBC_2.4 scanf F -GLIBC_2.4 snprintf F -GLIBC_2.4 sprintf F -GLIBC_2.4 sscanf F -GLIBC_2.4 strfmon F -GLIBC_2.4 strfmon_l F -GLIBC_2.4 strtold F -GLIBC_2.4 strtold_l F -GLIBC_2.4 swprintf F -GLIBC_2.4 swscanf F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sys_errlist D 0x420 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 syslog F -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.4 vasprintf F -GLIBC_2.4 vdprintf F -GLIBC_2.4 vfprintf F -GLIBC_2.4 vfscanf F -GLIBC_2.4 vfwprintf F -GLIBC_2.4 vfwscanf F -GLIBC_2.4 vprintf F -GLIBC_2.4 vscanf F -GLIBC_2.4 vsnprintf F -GLIBC_2.4 vsprintf F -GLIBC_2.4 vsscanf F -GLIBC_2.4 vswprintf F -GLIBC_2.4 vswscanf F -GLIBC_2.4 vsyslog F -GLIBC_2.4 vwprintf F -GLIBC_2.4 vwscanf F -GLIBC_2.4 wcstold F -GLIBC_2.4 wcstold_l F -GLIBC_2.4 wprintf F -GLIBC_2.4 wscanf F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __nldbl___isoc99_fscanf F -GLIBC_2.7 __nldbl___isoc99_fwscanf F -GLIBC_2.7 __nldbl___isoc99_scanf F -GLIBC_2.7 __nldbl___isoc99_sscanf F -GLIBC_2.7 __nldbl___isoc99_swscanf F -GLIBC_2.7 __nldbl___isoc99_vfscanf F -GLIBC_2.7 __nldbl___isoc99_vfwscanf F -GLIBC_2.7 __nldbl___isoc99_vscanf F -GLIBC_2.7 __nldbl___isoc99_vsscanf F -GLIBC_2.7 __nldbl___isoc99_vswscanf F -GLIBC_2.7 __nldbl___isoc99_vwscanf F -GLIBC_2.7 __nldbl___isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __nldbl___asprintf_chk F -GLIBC_2.8 __nldbl___dprintf_chk F -GLIBC_2.8 __nldbl___obstack_printf_chk F -GLIBC_2.8 __nldbl___obstack_vprintf_chk F -GLIBC_2.8 __nldbl___vasprintf_chk F -GLIBC_2.8 __nldbl___vdprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libcrypt.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libcrypt.abilist deleted file mode 100644 index f2854f3a0a..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 crypt F -GLIBC_2.2 crypt_r F -GLIBC_2.2 encrypt F -GLIBC_2.2 encrypt_r F -GLIBC_2.2 fcrypt F -GLIBC_2.2 setkey F -GLIBC_2.2 setkey_r F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libdl.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libdl.abilist deleted file mode 100644 index 98b031bc6d..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libdl.abilist +++ /dev/null @@ -1,12 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 dladdr F -GLIBC_2.2 dlclose F -GLIBC_2.2 dlerror F -GLIBC_2.2 dlopen F -GLIBC_2.2 dlsym F -GLIBC_2.2 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist deleted file mode 100644 index b56701e350..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist +++ /dev/null @@ -1,563 +0,0 @@ -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __acoshl_finite F -GLIBC_2.15 __acosl_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __asinl_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atan2l_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __atanhl_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __coshl_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp10l_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp2l_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __expl_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __fmodl_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __gammal_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __hypotl_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j0l_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __j1l_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __jnl_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __lgammal_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log10l_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log2l_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __logl_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __powl_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __remainderl_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __scalbl_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sinhl_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __sqrtl_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y0l_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __y1l_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.15 __ynl_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _LIB_VERSION D 0x4 -GLIBC_2.2 __clog10 F -GLIBC_2.2 __clog10f F -GLIBC_2.2 __clog10l F -GLIBC_2.2 __finite F -GLIBC_2.2 __finitef F -GLIBC_2.2 __finitel F -GLIBC_2.2 __fpclassify F -GLIBC_2.2 __fpclassifyf F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 acos F -GLIBC_2.2 acosf F -GLIBC_2.2 acosh F -GLIBC_2.2 acoshf F -GLIBC_2.2 acoshl F -GLIBC_2.2 acosl F -GLIBC_2.2 asin F -GLIBC_2.2 asinf F -GLIBC_2.2 asinh F -GLIBC_2.2 asinhf F -GLIBC_2.2 asinhl F -GLIBC_2.2 asinl F -GLIBC_2.2 atan F -GLIBC_2.2 atan2 F -GLIBC_2.2 atan2f F -GLIBC_2.2 atan2l F -GLIBC_2.2 atanf F -GLIBC_2.2 atanh F -GLIBC_2.2 atanhf F -GLIBC_2.2 atanhl F -GLIBC_2.2 atanl F -GLIBC_2.2 cabs F -GLIBC_2.2 cabsf F -GLIBC_2.2 cabsl F -GLIBC_2.2 cacos F -GLIBC_2.2 cacosf F -GLIBC_2.2 cacosh F -GLIBC_2.2 cacoshf F -GLIBC_2.2 cacoshl F -GLIBC_2.2 cacosl F -GLIBC_2.2 carg F -GLIBC_2.2 cargf F -GLIBC_2.2 cargl F -GLIBC_2.2 casin F -GLIBC_2.2 casinf F -GLIBC_2.2 casinh F -GLIBC_2.2 casinhf F -GLIBC_2.2 casinhl F -GLIBC_2.2 casinl F -GLIBC_2.2 catan F -GLIBC_2.2 catanf F -GLIBC_2.2 catanh F -GLIBC_2.2 catanhf F -GLIBC_2.2 catanhl F -GLIBC_2.2 catanl F -GLIBC_2.2 cbrt F -GLIBC_2.2 cbrtf F -GLIBC_2.2 cbrtl F -GLIBC_2.2 ccos F -GLIBC_2.2 ccosf F -GLIBC_2.2 ccosh F -GLIBC_2.2 ccoshf F -GLIBC_2.2 ccoshl F -GLIBC_2.2 ccosl F -GLIBC_2.2 ceil F -GLIBC_2.2 ceilf F -GLIBC_2.2 ceill F -GLIBC_2.2 cexp F -GLIBC_2.2 cexpf F -GLIBC_2.2 cexpl F -GLIBC_2.2 cimag F -GLIBC_2.2 cimagf F -GLIBC_2.2 cimagl F -GLIBC_2.2 clog F -GLIBC_2.2 clog10 F -GLIBC_2.2 clog10f F -GLIBC_2.2 clog10l F -GLIBC_2.2 clogf F -GLIBC_2.2 clogl F -GLIBC_2.2 conj F -GLIBC_2.2 conjf F -GLIBC_2.2 conjl F -GLIBC_2.2 copysign F -GLIBC_2.2 copysignf F -GLIBC_2.2 copysignl F -GLIBC_2.2 cos F -GLIBC_2.2 cosf F -GLIBC_2.2 cosh F -GLIBC_2.2 coshf F -GLIBC_2.2 coshl F -GLIBC_2.2 cosl F -GLIBC_2.2 cpow F -GLIBC_2.2 cpowf F -GLIBC_2.2 cpowl F -GLIBC_2.2 cproj F -GLIBC_2.2 cprojf F -GLIBC_2.2 cprojl F -GLIBC_2.2 creal F -GLIBC_2.2 crealf F -GLIBC_2.2 creall F -GLIBC_2.2 csin F -GLIBC_2.2 csinf F -GLIBC_2.2 csinh F -GLIBC_2.2 csinhf F -GLIBC_2.2 csinhl F -GLIBC_2.2 csinl F -GLIBC_2.2 csqrt F -GLIBC_2.2 csqrtf F -GLIBC_2.2 csqrtl F -GLIBC_2.2 ctan F -GLIBC_2.2 ctanf F -GLIBC_2.2 ctanh F -GLIBC_2.2 ctanhf F -GLIBC_2.2 ctanhl F -GLIBC_2.2 ctanl F -GLIBC_2.2 drem F -GLIBC_2.2 dremf F -GLIBC_2.2 dreml F -GLIBC_2.2 erf F -GLIBC_2.2 erfc F -GLIBC_2.2 erfcf F -GLIBC_2.2 erfcl F -GLIBC_2.2 erff F -GLIBC_2.2 erfl F -GLIBC_2.2 exp F -GLIBC_2.2 exp10 F -GLIBC_2.2 exp10f F -GLIBC_2.2 exp10l F -GLIBC_2.2 exp2 F -GLIBC_2.2 exp2f F -GLIBC_2.2 expf F -GLIBC_2.2 expl F -GLIBC_2.2 expm1 F -GLIBC_2.2 expm1f F -GLIBC_2.2 expm1l F -GLIBC_2.2 fabs F -GLIBC_2.2 fabsf F -GLIBC_2.2 fabsl F -GLIBC_2.2 fdim F -GLIBC_2.2 fdimf F -GLIBC_2.2 fdiml F -GLIBC_2.2 feclearexcept F -GLIBC_2.2 fedisableexcept F -GLIBC_2.2 feenableexcept F -GLIBC_2.2 fegetenv F -GLIBC_2.2 fegetexcept F -GLIBC_2.2 fegetexceptflag F -GLIBC_2.2 fegetround F -GLIBC_2.2 feholdexcept F -GLIBC_2.2 feraiseexcept F -GLIBC_2.2 fesetenv F -GLIBC_2.2 fesetexceptflag F -GLIBC_2.2 fesetround F -GLIBC_2.2 fetestexcept F -GLIBC_2.2 feupdateenv F -GLIBC_2.2 finite F -GLIBC_2.2 finitef F -GLIBC_2.2 finitel F -GLIBC_2.2 floor F -GLIBC_2.2 floorf F -GLIBC_2.2 floorl F -GLIBC_2.2 fma F -GLIBC_2.2 fmaf F -GLIBC_2.2 fmal F -GLIBC_2.2 fmax F -GLIBC_2.2 fmaxf F -GLIBC_2.2 fmaxl F -GLIBC_2.2 fmin F -GLIBC_2.2 fminf F -GLIBC_2.2 fminl F -GLIBC_2.2 fmod F -GLIBC_2.2 fmodf F -GLIBC_2.2 fmodl F -GLIBC_2.2 frexp F -GLIBC_2.2 frexpf F -GLIBC_2.2 frexpl F -GLIBC_2.2 gamma F -GLIBC_2.2 gammaf F -GLIBC_2.2 gammal F -GLIBC_2.2 hypot F -GLIBC_2.2 hypotf F -GLIBC_2.2 hypotl F -GLIBC_2.2 ilogb F -GLIBC_2.2 ilogbf F -GLIBC_2.2 ilogbl F -GLIBC_2.2 j0 F -GLIBC_2.2 j0f F -GLIBC_2.2 j0l F -GLIBC_2.2 j1 F -GLIBC_2.2 j1f F -GLIBC_2.2 j1l F -GLIBC_2.2 jn F -GLIBC_2.2 jnf F -GLIBC_2.2 jnl F -GLIBC_2.2 ldexp F -GLIBC_2.2 ldexpf F -GLIBC_2.2 ldexpl F -GLIBC_2.2 lgamma F -GLIBC_2.2 lgamma_r F -GLIBC_2.2 lgammaf F -GLIBC_2.2 lgammaf_r F -GLIBC_2.2 lgammal F -GLIBC_2.2 lgammal_r F -GLIBC_2.2 llrint F -GLIBC_2.2 llrintf F -GLIBC_2.2 llrintl F -GLIBC_2.2 llround F -GLIBC_2.2 llroundf F -GLIBC_2.2 llroundl F -GLIBC_2.2 log F -GLIBC_2.2 log10 F -GLIBC_2.2 log10f F -GLIBC_2.2 log10l F -GLIBC_2.2 log1p F -GLIBC_2.2 log1pf F -GLIBC_2.2 log1pl F -GLIBC_2.2 log2 F -GLIBC_2.2 log2f F -GLIBC_2.2 log2l F -GLIBC_2.2 logb F -GLIBC_2.2 logbf F -GLIBC_2.2 logbl F -GLIBC_2.2 logf F -GLIBC_2.2 logl F -GLIBC_2.2 lrint F -GLIBC_2.2 lrintf F -GLIBC_2.2 lrintl F -GLIBC_2.2 lround F -GLIBC_2.2 lroundf F -GLIBC_2.2 lroundl F -GLIBC_2.2 matherr F -GLIBC_2.2 modf F -GLIBC_2.2 modff F -GLIBC_2.2 modfl F -GLIBC_2.2 nan F -GLIBC_2.2 nanf F -GLIBC_2.2 nanl F -GLIBC_2.2 nearbyint F -GLIBC_2.2 nearbyintf F -GLIBC_2.2 nearbyintl F -GLIBC_2.2 nextafter F -GLIBC_2.2 nextafterf F -GLIBC_2.2 nextafterl F -GLIBC_2.2 nexttoward F -GLIBC_2.2 nexttowardf F -GLIBC_2.2 nexttowardl F -GLIBC_2.2 pow F -GLIBC_2.2 pow10 F -GLIBC_2.2 pow10f F -GLIBC_2.2 pow10l F -GLIBC_2.2 powf F -GLIBC_2.2 powl F -GLIBC_2.2 remainder F -GLIBC_2.2 remainderf F -GLIBC_2.2 remainderl F -GLIBC_2.2 remquo F -GLIBC_2.2 remquof F -GLIBC_2.2 remquol F -GLIBC_2.2 rint F -GLIBC_2.2 rintf F -GLIBC_2.2 rintl F -GLIBC_2.2 round F -GLIBC_2.2 roundf F -GLIBC_2.2 roundl F -GLIBC_2.2 scalb F -GLIBC_2.2 scalbf F -GLIBC_2.2 scalbl F -GLIBC_2.2 scalbln F -GLIBC_2.2 scalblnf F -GLIBC_2.2 scalblnl F -GLIBC_2.2 scalbn F -GLIBC_2.2 scalbnf F -GLIBC_2.2 scalbnl F -GLIBC_2.2 signgam D 0x4 -GLIBC_2.2 significand F -GLIBC_2.2 significandf F -GLIBC_2.2 significandl F -GLIBC_2.2 sin F -GLIBC_2.2 sincos F -GLIBC_2.2 sincosf F -GLIBC_2.2 sincosl F -GLIBC_2.2 sinf F -GLIBC_2.2 sinh F -GLIBC_2.2 sinhf F -GLIBC_2.2 sinhl F -GLIBC_2.2 sinl F -GLIBC_2.2 sqrt F -GLIBC_2.2 sqrtf F -GLIBC_2.2 sqrtl F -GLIBC_2.2 tan F -GLIBC_2.2 tanf F -GLIBC_2.2 tanh F -GLIBC_2.2 tanhf F -GLIBC_2.2 tanhl F -GLIBC_2.2 tanl F -GLIBC_2.2 tgamma F -GLIBC_2.2 tgammaf F -GLIBC_2.2 tgammal F -GLIBC_2.2 trunc F -GLIBC_2.2 truncf F -GLIBC_2.2 truncl F -GLIBC_2.2 y0 F -GLIBC_2.2 y0f F -GLIBC_2.2 y0l F -GLIBC_2.2 y1 F -GLIBC_2.2 y1f F -GLIBC_2.2 y1l F -GLIBC_2.2 yn F -GLIBC_2.2 ynf F -GLIBC_2.2 ynl F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __clog10l F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fpclassifyl F -GLIBC_2.4 __nldbl_nexttowardf F -GLIBC_2.4 __signbitl F -GLIBC_2.4 acoshl F -GLIBC_2.4 acosl F -GLIBC_2.4 asinhl F -GLIBC_2.4 asinl F -GLIBC_2.4 atan2l F -GLIBC_2.4 atanhl F -GLIBC_2.4 atanl F -GLIBC_2.4 cabsl F -GLIBC_2.4 cacoshl F -GLIBC_2.4 cacosl F -GLIBC_2.4 cargl F -GLIBC_2.4 casinhl F -GLIBC_2.4 casinl F -GLIBC_2.4 catanhl F -GLIBC_2.4 catanl F -GLIBC_2.4 cbrtl F -GLIBC_2.4 ccoshl F -GLIBC_2.4 ccosl F -GLIBC_2.4 ceill F -GLIBC_2.4 cexpl F -GLIBC_2.4 cimagl F -GLIBC_2.4 clog10l F -GLIBC_2.4 clogl F -GLIBC_2.4 conjl F -GLIBC_2.4 copysignl F -GLIBC_2.4 coshl F -GLIBC_2.4 cosl F -GLIBC_2.4 cpowl F -GLIBC_2.4 cprojl F -GLIBC_2.4 creall F -GLIBC_2.4 csinhl F -GLIBC_2.4 csinl F -GLIBC_2.4 csqrtl F -GLIBC_2.4 ctanhl F -GLIBC_2.4 ctanl F -GLIBC_2.4 dreml F -GLIBC_2.4 erfcl F -GLIBC_2.4 erfl F -GLIBC_2.4 exp10l F -GLIBC_2.4 exp2l F -GLIBC_2.4 expl F -GLIBC_2.4 expm1l F -GLIBC_2.4 fabsl F -GLIBC_2.4 fdiml F -GLIBC_2.4 finitel F -GLIBC_2.4 floorl F -GLIBC_2.4 fmal F -GLIBC_2.4 fmaxl F -GLIBC_2.4 fminl F -GLIBC_2.4 fmodl F -GLIBC_2.4 frexpl F -GLIBC_2.4 gammal F -GLIBC_2.4 hypotl F -GLIBC_2.4 ilogbl F -GLIBC_2.4 j0l F -GLIBC_2.4 j1l F -GLIBC_2.4 jnl F -GLIBC_2.4 ldexpl F -GLIBC_2.4 lgammal F -GLIBC_2.4 lgammal_r F -GLIBC_2.4 llrintl F -GLIBC_2.4 llroundl F -GLIBC_2.4 log10l F -GLIBC_2.4 log1pl F -GLIBC_2.4 log2l F -GLIBC_2.4 logbl F -GLIBC_2.4 logl F -GLIBC_2.4 lrintl F -GLIBC_2.4 lroundl F -GLIBC_2.4 modfl F -GLIBC_2.4 nanl F -GLIBC_2.4 nearbyintl F -GLIBC_2.4 nextafterl F -GLIBC_2.4 nexttoward F -GLIBC_2.4 nexttowardf F -GLIBC_2.4 nexttowardl F -GLIBC_2.4 pow10l F -GLIBC_2.4 powl F -GLIBC_2.4 remainderl F -GLIBC_2.4 remquol F -GLIBC_2.4 rintl F -GLIBC_2.4 roundl F -GLIBC_2.4 scalbl F -GLIBC_2.4 scalblnl F -GLIBC_2.4 scalbnl F -GLIBC_2.4 significandl F -GLIBC_2.4 sincosl F -GLIBC_2.4 sinhl F -GLIBC_2.4 sinl F -GLIBC_2.4 sqrtl F -GLIBC_2.4 tanhl F -GLIBC_2.4 tanl F -GLIBC_2.4 tgammal F -GLIBC_2.4 truncl F -GLIBC_2.4 y0l F -GLIBC_2.4 y1l F -GLIBC_2.4 ynl F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libnsl.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libnsl.abilist deleted file mode 100644 index ff0199f313..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libnsl.abilist +++ /dev/null @@ -1,122 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __free_fdresult F -GLIBC_2.2 __nis_default_access F -GLIBC_2.2 __nis_default_group F -GLIBC_2.2 __nis_default_owner F -GLIBC_2.2 __nis_default_ttl F -GLIBC_2.2 __nis_finddirectory F -GLIBC_2.2 __nis_hash F -GLIBC_2.2 __nisbind_connect F -GLIBC_2.2 __nisbind_create F -GLIBC_2.2 __nisbind_destroy F -GLIBC_2.2 __nisbind_next F -GLIBC_2.2 __yp_check F -GLIBC_2.2 nis_add F -GLIBC_2.2 nis_add_entry F -GLIBC_2.2 nis_addmember F -GLIBC_2.2 nis_checkpoint F -GLIBC_2.2 nis_clone_directory F -GLIBC_2.2 nis_clone_object F -GLIBC_2.2 nis_clone_result F -GLIBC_2.2 nis_creategroup F -GLIBC_2.2 nis_destroy_object F -GLIBC_2.2 nis_destroygroup F -GLIBC_2.2 nis_dir_cmp F -GLIBC_2.2 nis_domain_of F -GLIBC_2.2 nis_domain_of_r F -GLIBC_2.2 nis_first_entry F -GLIBC_2.2 nis_free_directory F -GLIBC_2.2 nis_free_object F -GLIBC_2.2 nis_free_request F -GLIBC_2.2 nis_freenames F -GLIBC_2.2 nis_freeresult F -GLIBC_2.2 nis_freeservlist F -GLIBC_2.2 nis_freetags F -GLIBC_2.2 nis_getnames F -GLIBC_2.2 nis_getservlist F -GLIBC_2.2 nis_ismember F -GLIBC_2.2 nis_leaf_of F -GLIBC_2.2 nis_leaf_of_r F -GLIBC_2.2 nis_lerror F -GLIBC_2.2 nis_list F -GLIBC_2.2 nis_local_directory F -GLIBC_2.2 nis_local_group F -GLIBC_2.2 nis_local_host F -GLIBC_2.2 nis_local_principal F -GLIBC_2.2 nis_lookup F -GLIBC_2.2 nis_mkdir F -GLIBC_2.2 nis_modify F -GLIBC_2.2 nis_modify_entry F -GLIBC_2.2 nis_name_of F -GLIBC_2.2 nis_name_of_r F -GLIBC_2.2 nis_next_entry F -GLIBC_2.2 nis_perror F -GLIBC_2.2 nis_ping F -GLIBC_2.2 nis_print_directory F -GLIBC_2.2 nis_print_entry F -GLIBC_2.2 nis_print_group F -GLIBC_2.2 nis_print_group_entry F -GLIBC_2.2 nis_print_link F -GLIBC_2.2 nis_print_object F -GLIBC_2.2 nis_print_result F -GLIBC_2.2 nis_print_rights F -GLIBC_2.2 nis_print_table F -GLIBC_2.2 nis_read_obj F -GLIBC_2.2 nis_remove F -GLIBC_2.2 nis_remove_entry F -GLIBC_2.2 nis_removemember F -GLIBC_2.2 nis_rmdir F -GLIBC_2.2 nis_servstate F -GLIBC_2.2 nis_sperrno F -GLIBC_2.2 nis_sperror F -GLIBC_2.2 nis_sperror_r F -GLIBC_2.2 nis_stats F -GLIBC_2.2 nis_verifygroup F -GLIBC_2.2 nis_write_obj F -GLIBC_2.2 readColdStartFile F -GLIBC_2.2 writeColdStartFile F -GLIBC_2.2 xdr_cback_data F -GLIBC_2.2 xdr_domainname F -GLIBC_2.2 xdr_keydat F -GLIBC_2.2 xdr_mapname F -GLIBC_2.2 xdr_obj_p F -GLIBC_2.2 xdr_peername F -GLIBC_2.2 xdr_valdat F -GLIBC_2.2 xdr_yp_buf F -GLIBC_2.2 xdr_ypall F -GLIBC_2.2 xdr_ypbind_binding F -GLIBC_2.2 xdr_ypbind_resp F -GLIBC_2.2 xdr_ypbind_resptype F -GLIBC_2.2 xdr_ypbind_setdom F -GLIBC_2.2 xdr_ypdelete_args F -GLIBC_2.2 xdr_ypmap_parms F -GLIBC_2.2 xdr_ypmaplist F -GLIBC_2.2 xdr_yppush_status F -GLIBC_2.2 xdr_yppushresp_xfr F -GLIBC_2.2 xdr_ypreq_key F -GLIBC_2.2 xdr_ypreq_nokey F -GLIBC_2.2 xdr_ypreq_xfr F -GLIBC_2.2 xdr_ypresp_all F -GLIBC_2.2 xdr_ypresp_key_val F -GLIBC_2.2 xdr_ypresp_maplist F -GLIBC_2.2 xdr_ypresp_master F -GLIBC_2.2 xdr_ypresp_order F -GLIBC_2.2 xdr_ypresp_val F -GLIBC_2.2 xdr_ypresp_xfr F -GLIBC_2.2 xdr_ypstat F -GLIBC_2.2 xdr_ypupdate_args F -GLIBC_2.2 xdr_ypxfrstat F -GLIBC_2.2 yp_all F -GLIBC_2.2 yp_bind F -GLIBC_2.2 yp_first F -GLIBC_2.2 yp_get_default_domain F -GLIBC_2.2 yp_maplist F -GLIBC_2.2 yp_master F -GLIBC_2.2 yp_match F -GLIBC_2.2 yp_next F -GLIBC_2.2 yp_order F -GLIBC_2.2 yp_unbind F -GLIBC_2.2 yp_update F -GLIBC_2.2 ypbinderr_string F -GLIBC_2.2 yperr_string F -GLIBC_2.2 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist deleted file mode 100644 index 83a1fcd239..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist +++ /dev/null @@ -1,248 +0,0 @@ -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.19 GLIBC_2.19 A -GLIBC_2.19 longjmp F -GLIBC_2.19 siglongjmp F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _IO_flockfile F -GLIBC_2.2 _IO_ftrylockfile F -GLIBC_2.2 _IO_funlockfile F -GLIBC_2.2 __close F -GLIBC_2.2 __connect F -GLIBC_2.2 __errno_location F -GLIBC_2.2 __fcntl F -GLIBC_2.2 __fork F -GLIBC_2.2 __h_errno_location F -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __lseek F -GLIBC_2.2 __open F -GLIBC_2.2 __open64 F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pthread_getspecific F -GLIBC_2.2 __pthread_key_create F -GLIBC_2.2 __pthread_mutex_destroy F -GLIBC_2.2 __pthread_mutex_init F -GLIBC_2.2 __pthread_mutex_lock F -GLIBC_2.2 __pthread_mutex_trylock F -GLIBC_2.2 __pthread_mutex_unlock F -GLIBC_2.2 __pthread_mutexattr_destroy F -GLIBC_2.2 __pthread_mutexattr_init F -GLIBC_2.2 __pthread_mutexattr_settype F -GLIBC_2.2 __pthread_once F -GLIBC_2.2 __pthread_rwlock_destroy F -GLIBC_2.2 __pthread_rwlock_init F -GLIBC_2.2 __pthread_rwlock_rdlock F -GLIBC_2.2 __pthread_rwlock_tryrdlock F -GLIBC_2.2 __pthread_rwlock_trywrlock F -GLIBC_2.2 __pthread_rwlock_unlock F -GLIBC_2.2 __pthread_rwlock_wrlock F -GLIBC_2.2 __pthread_setspecific F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __read F -GLIBC_2.2 __res_state F -GLIBC_2.2 __send F -GLIBC_2.2 __sigaction F -GLIBC_2.2 __vfork F -GLIBC_2.2 __wait F -GLIBC_2.2 __write F -GLIBC_2.2 _pthread_cleanup_pop F -GLIBC_2.2 _pthread_cleanup_pop_restore F -GLIBC_2.2 _pthread_cleanup_push F -GLIBC_2.2 _pthread_cleanup_push_defer F -GLIBC_2.2 accept F -GLIBC_2.2 close F -GLIBC_2.2 connect F -GLIBC_2.2 fcntl F -GLIBC_2.2 flockfile F -GLIBC_2.2 fork F -GLIBC_2.2 fsync F -GLIBC_2.2 ftrylockfile F -GLIBC_2.2 funlockfile F -GLIBC_2.2 longjmp F -GLIBC_2.2 lseek F -GLIBC_2.2 lseek64 F -GLIBC_2.2 msync F -GLIBC_2.2 nanosleep F -GLIBC_2.2 open F -GLIBC_2.2 open64 F -GLIBC_2.2 pause F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 pthread_atfork F -GLIBC_2.2 pthread_attr_destroy F -GLIBC_2.2 pthread_attr_getdetachstate F -GLIBC_2.2 pthread_attr_getguardsize F -GLIBC_2.2 pthread_attr_getinheritsched F -GLIBC_2.2 pthread_attr_getschedparam F -GLIBC_2.2 pthread_attr_getschedpolicy F -GLIBC_2.2 pthread_attr_getscope F -GLIBC_2.2 pthread_attr_getstack F -GLIBC_2.2 pthread_attr_getstackaddr F -GLIBC_2.2 pthread_attr_getstacksize F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 pthread_attr_setdetachstate F -GLIBC_2.2 pthread_attr_setguardsize F -GLIBC_2.2 pthread_attr_setinheritsched F -GLIBC_2.2 pthread_attr_setschedparam F -GLIBC_2.2 pthread_attr_setschedpolicy F -GLIBC_2.2 pthread_attr_setscope F -GLIBC_2.2 pthread_attr_setstack F -GLIBC_2.2 pthread_attr_setstackaddr F -GLIBC_2.2 pthread_attr_setstacksize F -GLIBC_2.2 pthread_barrier_destroy F -GLIBC_2.2 pthread_barrier_init F -GLIBC_2.2 pthread_barrier_wait F -GLIBC_2.2 pthread_barrierattr_destroy F -GLIBC_2.2 pthread_barrierattr_init F -GLIBC_2.2 pthread_barrierattr_setpshared F -GLIBC_2.2 pthread_cancel F -GLIBC_2.2 pthread_cond_broadcast F -GLIBC_2.2 pthread_cond_destroy F -GLIBC_2.2 pthread_cond_init F -GLIBC_2.2 pthread_cond_signal F -GLIBC_2.2 pthread_cond_timedwait F -GLIBC_2.2 pthread_cond_wait F -GLIBC_2.2 pthread_condattr_destroy F -GLIBC_2.2 pthread_condattr_getpshared F -GLIBC_2.2 pthread_condattr_init F -GLIBC_2.2 pthread_condattr_setpshared F -GLIBC_2.2 pthread_create F -GLIBC_2.2 pthread_detach F -GLIBC_2.2 pthread_equal F -GLIBC_2.2 pthread_exit F -GLIBC_2.2 pthread_getconcurrency F -GLIBC_2.2 pthread_getcpuclockid F -GLIBC_2.2 pthread_getschedparam F -GLIBC_2.2 pthread_getspecific F -GLIBC_2.2 pthread_join F -GLIBC_2.2 pthread_key_create F -GLIBC_2.2 pthread_key_delete F -GLIBC_2.2 pthread_kill F -GLIBC_2.2 pthread_kill_other_threads_np F -GLIBC_2.2 pthread_mutex_destroy F -GLIBC_2.2 pthread_mutex_init F -GLIBC_2.2 pthread_mutex_lock F -GLIBC_2.2 pthread_mutex_timedlock F -GLIBC_2.2 pthread_mutex_trylock F -GLIBC_2.2 pthread_mutex_unlock F -GLIBC_2.2 pthread_mutexattr_destroy F -GLIBC_2.2 pthread_mutexattr_getkind_np F -GLIBC_2.2 pthread_mutexattr_getpshared F -GLIBC_2.2 pthread_mutexattr_gettype F -GLIBC_2.2 pthread_mutexattr_init F -GLIBC_2.2 pthread_mutexattr_setkind_np F -GLIBC_2.2 pthread_mutexattr_setpshared F -GLIBC_2.2 pthread_mutexattr_settype F -GLIBC_2.2 pthread_once F -GLIBC_2.2 pthread_rwlock_destroy F -GLIBC_2.2 pthread_rwlock_init F -GLIBC_2.2 pthread_rwlock_rdlock F -GLIBC_2.2 pthread_rwlock_timedrdlock F -GLIBC_2.2 pthread_rwlock_timedwrlock F -GLIBC_2.2 pthread_rwlock_tryrdlock F -GLIBC_2.2 pthread_rwlock_trywrlock F -GLIBC_2.2 pthread_rwlock_unlock F -GLIBC_2.2 pthread_rwlock_wrlock F -GLIBC_2.2 pthread_rwlockattr_destroy F -GLIBC_2.2 pthread_rwlockattr_getkind_np F -GLIBC_2.2 pthread_rwlockattr_getpshared F -GLIBC_2.2 pthread_rwlockattr_init F -GLIBC_2.2 pthread_rwlockattr_setkind_np F -GLIBC_2.2 pthread_rwlockattr_setpshared F -GLIBC_2.2 pthread_self F -GLIBC_2.2 pthread_setcancelstate F -GLIBC_2.2 pthread_setcanceltype F -GLIBC_2.2 pthread_setconcurrency F -GLIBC_2.2 pthread_setschedparam F -GLIBC_2.2 pthread_setspecific F -GLIBC_2.2 pthread_sigmask F -GLIBC_2.2 pthread_spin_destroy F -GLIBC_2.2 pthread_spin_init F -GLIBC_2.2 pthread_spin_lock F -GLIBC_2.2 pthread_spin_trylock F -GLIBC_2.2 pthread_spin_unlock F -GLIBC_2.2 pthread_testcancel F -GLIBC_2.2 pthread_yield F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 raise F -GLIBC_2.2 read F -GLIBC_2.2 recv F -GLIBC_2.2 recvfrom F -GLIBC_2.2 recvmsg F -GLIBC_2.2 sem_close F -GLIBC_2.2 sem_destroy F -GLIBC_2.2 sem_getvalue F -GLIBC_2.2 sem_init F -GLIBC_2.2 sem_open F -GLIBC_2.2 sem_post F -GLIBC_2.2 sem_timedwait F -GLIBC_2.2 sem_trywait F -GLIBC_2.2 sem_unlink F -GLIBC_2.2 sem_wait F -GLIBC_2.2 send F -GLIBC_2.2 sendmsg F -GLIBC_2.2 sendto F -GLIBC_2.2 sigaction F -GLIBC_2.2 siglongjmp F -GLIBC_2.2 sigwait F -GLIBC_2.2 system F -GLIBC_2.2 tcdrain F -GLIBC_2.2 vfork F -GLIBC_2.2 wait F -GLIBC_2.2 waitpid F -GLIBC_2.2 write F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 pthread_getattr_np F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libresolv.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libresolv.abilist deleted file mode 100644 index 3cb1405aed..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libresolv.abilist +++ /dev/null @@ -1,94 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __b64_ntop F -GLIBC_2.2 __b64_pton F -GLIBC_2.2 __dn_comp F -GLIBC_2.2 __dn_count_labels F -GLIBC_2.2 __dn_expand F -GLIBC_2.2 __dn_skipname F -GLIBC_2.2 __fp_nquery F -GLIBC_2.2 __fp_query F -GLIBC_2.2 __fp_resstat F -GLIBC_2.2 __hostalias F -GLIBC_2.2 __loc_aton F -GLIBC_2.2 __loc_ntoa F -GLIBC_2.2 __p_cdname F -GLIBC_2.2 __p_cdnname F -GLIBC_2.2 __p_class F -GLIBC_2.2 __p_class_syms D 0xa8 -GLIBC_2.2 __p_fqname F -GLIBC_2.2 __p_fqnname F -GLIBC_2.2 __p_option F -GLIBC_2.2 __p_query F -GLIBC_2.2 __p_secstodate F -GLIBC_2.2 __p_time F -GLIBC_2.2 __p_type F -GLIBC_2.2 __p_type_syms D 0x450 -GLIBC_2.2 __putlong F -GLIBC_2.2 __putshort F -GLIBC_2.2 __res_close F -GLIBC_2.2 __res_dnok F -GLIBC_2.2 __res_hnok F -GLIBC_2.2 __res_hostalias F -GLIBC_2.2 __res_isourserver F -GLIBC_2.2 __res_mailok F -GLIBC_2.2 __res_mkquery F -GLIBC_2.2 __res_nameinquery F -GLIBC_2.2 __res_nmkquery F -GLIBC_2.2 __res_nquery F -GLIBC_2.2 __res_nquerydomain F -GLIBC_2.2 __res_nsearch F -GLIBC_2.2 __res_nsend F -GLIBC_2.2 __res_ownok F -GLIBC_2.2 __res_queriesmatch F -GLIBC_2.2 __res_query F -GLIBC_2.2 __res_querydomain F -GLIBC_2.2 __res_search F -GLIBC_2.2 __res_send F -GLIBC_2.2 __sym_ntop F -GLIBC_2.2 __sym_ntos F -GLIBC_2.2 __sym_ston F -GLIBC_2.2 _gethtbyaddr F -GLIBC_2.2 _gethtbyname F -GLIBC_2.2 _gethtbyname2 F -GLIBC_2.2 _gethtent F -GLIBC_2.2 _getlong F -GLIBC_2.2 _getshort F -GLIBC_2.2 _res_opcodes D 0x80 -GLIBC_2.2 _sethtent F -GLIBC_2.2 inet_net_ntop F -GLIBC_2.2 inet_net_pton F -GLIBC_2.2 inet_neta F -GLIBC_2.2 res_gethostbyaddr F -GLIBC_2.2 res_gethostbyname F -GLIBC_2.2 res_gethostbyname2 F -GLIBC_2.2 res_send_setqhook F -GLIBC_2.2 res_send_setrhook F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/librt.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/librt.abilist deleted file mode 100644 index 41c442bf60..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/librt.abilist +++ /dev/null @@ -1,52 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 aio_cancel F -GLIBC_2.2 aio_cancel64 F -GLIBC_2.2 aio_error F -GLIBC_2.2 aio_error64 F -GLIBC_2.2 aio_fsync F -GLIBC_2.2 aio_fsync64 F -GLIBC_2.2 aio_init F -GLIBC_2.2 aio_read F -GLIBC_2.2 aio_read64 F -GLIBC_2.2 aio_return F -GLIBC_2.2 aio_return64 F -GLIBC_2.2 aio_suspend F -GLIBC_2.2 aio_suspend64 F -GLIBC_2.2 aio_write F -GLIBC_2.2 aio_write64 F -GLIBC_2.2 clock_getcpuclockid F -GLIBC_2.2 clock_getres F -GLIBC_2.2 clock_gettime F -GLIBC_2.2 clock_nanosleep F -GLIBC_2.2 clock_settime F -GLIBC_2.2 lio_listio F -GLIBC_2.2 lio_listio64 F -GLIBC_2.2 shm_open F -GLIBC_2.2 shm_unlink F -GLIBC_2.2 timer_create F -GLIBC_2.2 timer_delete F -GLIBC_2.2 timer_getoverrun F -GLIBC_2.2 timer_gettime F -GLIBC_2.2 timer_settime F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 timer_create F -GLIBC_2.3.3 timer_delete F -GLIBC_2.3.3 timer_getoverrun F -GLIBC_2.3.3 timer_gettime F -GLIBC_2.3.3 timer_settime F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libthread_db.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libthread_db.abilist deleted file mode 100644 index 228bbc9de8..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libthread_db.abilist +++ /dev/null @@ -1,44 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 td_init F -GLIBC_2.2 td_log F -GLIBC_2.2 td_ta_clear_event F -GLIBC_2.2 td_ta_delete F -GLIBC_2.2 td_ta_enable_stats F -GLIBC_2.2 td_ta_event_addr F -GLIBC_2.2 td_ta_event_getmsg F -GLIBC_2.2 td_ta_get_nthreads F -GLIBC_2.2 td_ta_get_ph F -GLIBC_2.2 td_ta_get_stats F -GLIBC_2.2 td_ta_map_id2thr F -GLIBC_2.2 td_ta_map_lwp2thr F -GLIBC_2.2 td_ta_new F -GLIBC_2.2 td_ta_reset_stats F -GLIBC_2.2 td_ta_set_event F -GLIBC_2.2 td_ta_setconcurrency F -GLIBC_2.2 td_ta_thr_iter F -GLIBC_2.2 td_ta_tsd_iter F -GLIBC_2.2 td_thr_clear_event F -GLIBC_2.2 td_thr_dbresume F -GLIBC_2.2 td_thr_dbsuspend F -GLIBC_2.2 td_thr_event_enable F -GLIBC_2.2 td_thr_event_getmsg F -GLIBC_2.2 td_thr_get_info F -GLIBC_2.2 td_thr_getfpregs F -GLIBC_2.2 td_thr_getgregs F -GLIBC_2.2 td_thr_getxregs F -GLIBC_2.2 td_thr_getxregsize F -GLIBC_2.2 td_thr_set_event F -GLIBC_2.2 td_thr_setfpregs F -GLIBC_2.2 td_thr_setgregs F -GLIBC_2.2 td_thr_setprio F -GLIBC_2.2 td_thr_setsigpending F -GLIBC_2.2 td_thr_setxregs F -GLIBC_2.2 td_thr_sigsetmask F -GLIBC_2.2 td_thr_tsd F -GLIBC_2.2 td_thr_validate F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 td_symbol_list F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libutil.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libutil.abilist deleted file mode 100644 index cff37bb42e..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 forkpty F -GLIBC_2.2 login F -GLIBC_2.2 login_tty F -GLIBC_2.2 logout F -GLIBC_2.2 logwtmp F -GLIBC_2.2 openpty F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/makecontext.c b/sysdeps/unix/sysv/linux/s390/s390-64/makecontext.c deleted file mode 100644 index 01ba5255f6..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/makecontext.c +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* This implementation can handle any ARGC value but only - normal integer type parameters. Parameters of type float, - double, complex and structure with sizes 0, 2, 4 or 8 - won't work. - makecontext sets up a stack and the registers for the - user context. The stack looks like this: - size offset - %r15 -> +-----------------------+ - 8 | back chain (zero) | 0 - 8 | reserved | 8 - 144 | save area for (*func) | 16 - +-----------------------+ - n | overflow parameters | 160 - +-----------------------+ - The registers are set up like this: - %r2-%r6: parameters 1 to 5 - %r7 : (*func) pointer - %r8 : uc_link from ucontext structure - %r9 : address of setcontext - %r14 : return address to uc_link trampoline - %r15 : stack pointer. - - The trampoline looks like this: - basr %r14,%r7 - lgr %r2,%r8 - br %r9. */ - -void -__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) -{ - extern void __makecontext_ret (void); - unsigned long int *sp; - va_list ap; - - sp = (unsigned long int *) (((unsigned long int) ucp->uc_stack.ss_sp - + ucp->uc_stack.ss_size) & -8L); - - /* Set the return address to trampoline. */ - ucp->uc_mcontext.gregs[14] = (long int) __makecontext_ret; - - /* Set register parameters. */ - va_start (ap, argc); - for (int i = 0; i < argc && i < 5; ++i) - ucp->uc_mcontext.gregs[2 + i] = va_arg (ap, long int); - - /* The remaining arguments go to the overflow area. */ - if (argc > 5) - { - sp -= argc - 5; - for (int i = 5; i < argc; ++i) - sp[i - 5] = va_arg (ap, long int); - } - va_end (ap); - - /* Make room for the save area and set the backchain. */ - sp -= 20; - *sp = 0; - - /* Pass (*func) to __makecontext_ret in %r7. */ - ucp->uc_mcontext.gregs[7] = (long int) func; - - /* Pass ucp->uc_link to __makecontext_ret in %r8. */ - ucp->uc_mcontext.gregs[8] = (long int) ucp->uc_link; - - /* Pass address of setcontext in %r9. */ - ucp->uc_mcontext.gregs[9] = (long int) &setcontext; - - /* Set stack pointer. */ - ucp->uc_mcontext.gregs[15] = (long int) sp; -} - -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/profil-counter.h b/sysdeps/unix/sysv/linux/s390/s390-64/profil-counter.h deleted file mode 100644 index 29a1731abb..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/profil-counter.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Low-level statistical profiling support function. Linux/s390 version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -static void -__profil_counter (int signo, SIGCONTEXT scp) -{ - profil_count ((void *) GET_PC (scp)); -} diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h b/sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h deleted file mode 100644 index 1b7bbeb7b2..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h +++ /dev/null @@ -1,132 +0,0 @@ -/* Dump registers. 64 bit S/390 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include <_itoa.h> - -/* We will print the register dump in this format: - - GPR0: XXXXXXXXXXXXXXXX GPR1: XXXXXXXXXXXXXXXX - GPR2: XXXXXXXXXXXXXXXX GPR3: XXXXXXXXXXXXXXXX - GPR4: XXXXXXXXXXXXXXXX GPR5: XXXXXXXXXXXXXXXX - GPR6: XXXXXXXXXXXXXXXX GPR7: XXXXXXXXXXXXXXXX - GPR8: XXXXXXXXXXXXXXXX GPR9: XXXXXXXXXXXXXXXX - GPRA: XXXXXXXXXXXXXXXX GPRB: XXXXXXXXXXXXXXXX - GPRC: XXXXXXXXXXXXXXXX GPRD: XXXXXXXXXXXXXXXX - GPRE: XXXXXXXXXXXXXXXX GPRF: XXXXXXXXXXXXXXXX - - PSW.MASK: XXXXXXXXXXXXXXXX PSW.ADDR: XXXXXXXXXXXXXXXX - - ST(0) XXXX XXXXXXXXXXXXXXXX ST(1) XXXX XXXXXXXXXXXXXXXX - ST(2) XXXX XXXXXXXXXXXXXXXX ST(3) XXXX XXXXXXXXXXXXXXXX - ST(4) XXXX XXXXXXXXXXXXXXXX ST(5) XXXX XXXXXXXXXXXXXXXX - ST(6) XXXX XXXXXXXXXXXXXXXX ST(7) XXXX XXXXXXXXXXXXXXXX - */ - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -register_dump (int fd, struct sigcontext *ctx) -{ - char regs[19][16]; - struct iovec iov[40]; - size_t nr = 0; - -#define ADD_STRING(str) \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr -#define ADD_MEM(str, len) \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr - - /* Generate strings of register contents. */ - hexvalue (ctx->sregs->regs.gprs[0], regs[0], 16); - hexvalue (ctx->sregs->regs.gprs[1], regs[1], 16); - hexvalue (ctx->sregs->regs.gprs[2], regs[2], 16); - hexvalue (ctx->sregs->regs.gprs[3], regs[3], 16); - hexvalue (ctx->sregs->regs.gprs[4], regs[4], 16); - hexvalue (ctx->sregs->regs.gprs[5], regs[5], 16); - hexvalue (ctx->sregs->regs.gprs[6], regs[6], 16); - hexvalue (ctx->sregs->regs.gprs[7], regs[7], 16); - hexvalue (ctx->sregs->regs.gprs[8], regs[8], 16); - hexvalue (ctx->sregs->regs.gprs[9], regs[9], 16); - hexvalue (ctx->sregs->regs.gprs[10], regs[10], 16); - hexvalue (ctx->sregs->regs.gprs[11], regs[11], 16); - hexvalue (ctx->sregs->regs.gprs[12], regs[12], 16); - hexvalue (ctx->sregs->regs.gprs[13], regs[13], 16); - hexvalue (ctx->sregs->regs.gprs[14], regs[14], 16); - hexvalue (ctx->sregs->regs.gprs[15], regs[15], 16); - hexvalue (ctx->sregs->regs.psw.mask, regs[16], 16); - hexvalue (ctx->sregs->regs.psw.addr, regs[17], 16); - - /* Generate the output. */ - ADD_STRING ("Register dump:\n\n GPR0: "); - ADD_MEM (regs[0], 16); - ADD_STRING (" GPR1: "); - ADD_MEM (regs[1], 16); - ADD_STRING (" GPR2: "); - ADD_MEM (regs[2], 16); - ADD_STRING (" GPR3: "); - ADD_MEM (regs[3], 16); - ADD_STRING ("\n GPR4: "); - ADD_MEM (regs[4], 16); - ADD_STRING (" GPR5: "); - ADD_MEM (regs[5], 16); - ADD_STRING (" GPR6: "); - ADD_MEM (regs[6], 16); - ADD_STRING (" GPR7: "); - ADD_MEM (regs[7], 16); - ADD_STRING ("\n GPR8: "); - ADD_MEM (regs[8], 16); - ADD_STRING (" GPR9: "); - ADD_MEM (regs[9], 16); - ADD_STRING (" GPRA: "); - ADD_MEM (regs[10], 16); - ADD_STRING (" GPRB: "); - ADD_MEM (regs[11], 16); - ADD_STRING ("\n GPRC: "); - ADD_MEM (regs[12], 16); - ADD_STRING (" GPRD: "); - ADD_MEM (regs[13], 16); - ADD_STRING (" GPRE: "); - ADD_MEM (regs[14], 16); - ADD_STRING (" GPRF: "); - ADD_MEM (regs[15], 16); - ADD_STRING ("\n\n PSW.MASK: "); - ADD_MEM (regs[16], 16); - ADD_STRING (" PSW.ADDR: "); - ADD_MEM (regs[17], 16); - ADD_STRING (" TRAP: "); - ADD_MEM (regs[18], 4); - ADD_STRING ("\n"); - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, ctx) diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S b/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S deleted file mode 100644 index f96ee2dc85..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "ucontext_i.h" - -/* __setcontext (const ucontext_t *ucp) - - Restores the machine context in UCP and thereby resumes execution - in that context. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to restore anything - other than the PRESERVED state. */ - -ENTRY(__setcontext) - lgr %r1,%r2 - - /* sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL). */ - la %r2,SIG_SETMASK - la %r3,SC_MASK(%r1) - slgr %r4,%r4 - lghi %r5,_NSIG8 - svc SYS_ify(rt_sigprocmask) - - /* Load fpu context. */ - lfpc SC_FPC(%r1) - ld %f0,SC_FPRS(%r1) - ld %f1,SC_FPRS+8(%r1) - ld %f2,SC_FPRS+16(%r1) - ld %f3,SC_FPRS+24(%r1) - ld %f4,SC_FPRS+32(%r1) - ld %f5,SC_FPRS+40(%r1) - ld %f6,SC_FPRS+48(%r1) - ld %f7,SC_FPRS+56(%r1) - ld %f8,SC_FPRS+64(%r1) - ld %f9,SC_FPRS+72(%r1) - ld %f10,SC_FPRS+80(%r1) - ld %f11,SC_FPRS+88(%r1) - ld %f12,SC_FPRS+96(%r1) - ld %f13,SC_FPRS+104(%r1) - ld %f14,SC_FPRS+112(%r1) - ld %f15,SC_FPRS+120(%r1) - - /* Don't touch %a0 and %a1, used for thread purposes. */ - lam %a2,%a15,SC_ACRS+8(%r1) - - /* Load general purpose registers. */ - lmg %r0,%r15,SC_GPRS(%r1) - - /* Return. */ - br %r14 -END(__setcontext) - -weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/shlib-versions b/sysdeps/unix/sysv/linux/s390/s390-64/shlib-versions deleted file mode 100644 index 669a0c9869..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/shlib-versions +++ /dev/null @@ -1,2 +0,0 @@ -DEFAULT GLIBC_2.2 -ld=ld64.so.1 diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c b/sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c deleted file mode 100644 index a3de0ead69..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* 64 bit Linux for S/390 only has rt signals, thus we do not even want to try - falling back to the old style signals as the default Linux handler does. */ - -#include -#include -#include - -#include -#include - -/* The variable is shared between all wrappers around signal handling - functions which have RT equivalents. This is the definition. */ - - -/* If ACT is not NULL, change the action for SIG to *ACT. - If OACT is not NULL, put the old action for SIG in *OACT. */ -int -__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) -{ - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - return INLINE_SYSCALL (rt_sigaction, 4, sig, act, oact, _NSIG / 8); -} -libc_hidden_def (__libc_sigaction) - -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c b/sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c deleted file mode 100644 index daf8cfd1b8..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* 64 bit Linux for S/390 only has rt signals, thus we do not even want to try - falling back to the old style signals as the default Linux handler does. */ - -#include -#include -#include - -#include -#include - -/* Change the set of blocked signals to SET, - wait until a signal arrives, and restore the set of blocked signals. */ -int -sigpending (sigset_t *set) -{ - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - return INLINE_SYSCALL (rt_sigpending, 2, set, _NSIG / 8); -} diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c b/sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c deleted file mode 100644 index 4cbbc8e133..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* 64 bit Linux for S/390 only has rt signals, thus we do not even want to try - falling back to the old style signals as the default Linux handler does. */ - -#include -#include -#include - -#include -#include - -/* Get and/or change the set of blocked signals. */ -int -__sigprocmask (int how, const sigset_t *set, sigset_t *oset) -{ - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - return INLINE_SYSCALL (rt_sigprocmask, 4, how, set, oset, _NSIG / 8); -} -weak_alias (__sigprocmask, sigprocmask) diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S b/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S deleted file mode 100644 index e033ec1672..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S +++ /dev/null @@ -1,108 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "ucontext_i.h" - -/* __swapcontext (ucontext_t *oucp, const ucontext_t *ucp) - - Saves the machine context in oucp such that when it is activated, - it appears as if __swapcontext() returned again, restores the - machine context in ucp and thereby resumes execution in that - context. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to save anything - other than the PRESERVED state. */ - -ENTRY(__swapcontext) - /* While not part of the ABI a system call never clobbers r0 - or r1. So keeping the values here while calling - rt_sigprocmask is ok. */ - lgr %r1,%r2 - lgr %r0,%r3 - - /* Store fpu context. */ - stfpc SC_FPC(%r1) - std %f0,SC_FPRS(%r1) - std %f1,SC_FPRS+8(%r1) - std %f2,SC_FPRS+16(%r1) - std %f3,SC_FPRS+24(%r1) - std %f4,SC_FPRS+32(%r1) - std %f5,SC_FPRS+40(%r1) - std %f6,SC_FPRS+48(%r1) - std %f7,SC_FPRS+56(%r1) - std %f8,SC_FPRS+64(%r1) - std %f9,SC_FPRS+72(%r1) - std %f10,SC_FPRS+80(%r1) - std %f11,SC_FPRS+88(%r1) - std %f12,SC_FPRS+96(%r1) - std %f13,SC_FPRS+104(%r1) - std %f14,SC_FPRS+112(%r1) - std %f15,SC_FPRS+120(%r1) - - /* Set __swapcontext return value to 0. */ - slgr %r2,%r2 - - /* Store access registers. */ - stam %a0,%a15,SC_ACRS(%r1) - - /* Store general purpose registers. */ - stmg %r0,%r15,SC_GPRS(%r1) - - /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, &oucp->uc_sigmask, - sigsetsize). */ - la %r2,SIG_SETMASK - lgr %r5,%r0 - la %r3,SC_MASK(%r5) - la %r4,SC_MASK(%r1) - lghi %r5,_NSIG8 - svc SYS_ify(rt_sigprocmask) - - /* Load fpu context. */ - lgr %r5,%r0 - lfpc SC_FPC(%r5) - ld %f0,SC_FPRS(%r5) - ld %f1,SC_FPRS+8(%r5) - ld %f2,SC_FPRS+16(%r5) - ld %f3,SC_FPRS+24(%r5) - ld %f4,SC_FPRS+32(%r5) - ld %f5,SC_FPRS+40(%r5) - ld %f6,SC_FPRS+48(%r5) - ld %f7,SC_FPRS+56(%r5) - ld %f8,SC_FPRS+64(%r5) - ld %f9,SC_FPRS+72(%r5) - ld %f10,SC_FPRS+80(%r5) - ld %f11,SC_FPRS+88(%r5) - ld %f12,SC_FPRS+96(%r5) - ld %f13,SC_FPRS+104(%r5) - ld %f14,SC_FPRS+112(%r5) - ld %f15,SC_FPRS+120(%r5) - - /* Don't touch %a0 and %a1, used for thread purposes. */ - lam %a2,%a15,SC_ACRS+8(%r5) - - /* Load general purpose registers. */ - lmg %r0,%r15,SC_GPRS(%r5) - - /* Return. */ - br %r14 -END(__swapcontext) -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S b/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S deleted file mode 100644 index 24c47cb75a..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Please consult the file sysdeps/unix/sysv/linux/s390/sysdep.h for - more information about the value -4095 used below.*/ - -ENTRY (syscall) - /* Save registers and setup stack. */ - stmg %r6,%r15,48(%r15) /* Save registers. */ - cfi_offset (%r15,-40) - cfi_offset (%r14,-48) - cfi_offset (%r13,-56) - cfi_offset (%r12,-64) - cfi_offset (%r11,-72) - cfi_offset (%r10,-80) - cfi_offset (%r9,-88) - cfi_offset (%r8,-96) - cfi_offset (%r7,-104) - cfi_offset (%r6,-112) - lgr %r1,%r15 - lg %r0,8(%r15) /* Load eos. */ - aghi %r15,-160 /* Buy stack space. */ - cfi_adjust_cfa_offset (160) - stg %r1,0(%r15) /* Store back chain. */ - stg %r0,8(%r15) /* Store eos. */ - - lgr %r1,%r2 /* Move syscall number. */ - lgr %r2,%r3 /* First parameter. */ - lgr %r3,%r4 /* Second parameter. */ - lgr %r4,%r5 /* Third parameter. */ - lgr %r5,%r6 /* Fourth parameter. */ - lg %r6,320(%r15) /* Fifth parameter. */ - lg %r7,328(%r15) /* Sixth parameter. */ - - basr %r8,0 -0: clg %r1,4f-0b(%r8) /* svc number < 256? */ - jl 2f -1: svc 0 - j 3f -2: ex %r1,1b-0b(%r8) /* lsb of R1 is subsituted as SVC number */ -3: lg %r15,0(%r15) /* load back chain */ - cfi_adjust_cfa_offset (-160) - lmg %r6,15,48(%r15) /* Load registers. */ - - lghi %r0,-4095 - clgr %r2,%r0 /* Check R2 for error. */ - jgnl SYSCALL_ERROR_LABEL - br %r14 /* Return to caller. */ -4: .quad 256 -PSEUDO_END (syscall) - diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h deleted file mode 100644 index 9b2c546b9d..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h +++ /dev/null @@ -1,152 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ -L(pseudo_cancel): \ - cfi_startproc; \ - STM_##args \ - stmg %r13,%r15,104(%r15); \ - cfi_offset (%r15,-40); \ - cfi_offset (%r14,-48); \ - cfi_offset (%r13,-56); \ - lgr %r14,%r15; \ - aghi %r15,-160; \ - cfi_adjust_cfa_offset (160); \ - stg %r14,0(%r15); \ - brasl %r14,CENABLE; \ - lgr %r0,%r2; \ - LM_##args \ - .if SYS_ify (syscall_name) < 256; \ - svc SYS_ify (syscall_name); \ - .else; \ - lghi %r1,SYS_ify (syscall_name); \ - svc 0; \ - .endif; \ - LR7_##args \ - lgr %r13,%r2; \ - lgr %r2,%r0; \ - brasl %r14,CDISABLE; \ - lgr %r2,%r13; \ - lmg %r13,%r15,104+160(%r15); \ - cfi_endproc; \ - j L(pseudo_check); \ -ENTRY(name) \ - SINGLE_THREAD_P \ - jne L(pseudo_cancel); \ -.type __##syscall_name##_nocancel,@function; \ -.globl __##syscall_name##_nocancel; \ -__##syscall_name##_nocancel: \ - DO_CALL(syscall_name, args); \ -L(pseudo_check): \ - lghi %r4,-4095; \ - clgr %r2,%r4; \ - jgnl SYSCALL_ERROR_LABEL; \ -.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ -L(pseudo_end): - -# if IS_IN (libpthread) -# define CENABLE __pthread_enable_asynccancel -# define CDISABLE __pthread_disable_asynccancel -# define __local_multiple_threads __pthread_multiple_threads -# elif IS_IN (libc) -# define CENABLE __libc_enable_asynccancel -# define CDISABLE __libc_disable_asynccancel -# define __local_multiple_threads __libc_multiple_threads -# elif IS_IN (librt) -# define CENABLE __librt_enable_asynccancel -# define CDISABLE __librt_disable_asynccancel -# else -# error Unsupported library -# endif - -#define STM_0 /* Nothing */ -#define STM_1 stg %r2,16(%r15); -#define STM_2 stmg %r2,%r3,16(%r15); -#define STM_3 stmg %r2,%r4,16(%r15); -#define STM_4 stmg %r2,%r5,16(%r15); -#define STM_5 stmg %r2,%r5,16(%r15); -#define STM_6 stmg %r2,%r7,16(%r15); - -#define LM_0 /* Nothing */ -#define LM_1 lg %r2,16+160(%r15); -#define LM_2 lmg %r2,%r3,16+160(%r15); -#define LM_3 lmg %r2,%r4,16+160(%r15); -#define LM_4 lmg %r2,%r5,16+160(%r15); -#define LM_5 lmg %r2,%r5,16+160(%r15); -#define LM_6 lmg %r2,%r5,16+160(%r15); \ - cfi_offset (%r7, -104); \ - lg %r7,160+160(%r15); - -#define LR7_0 /* Nothing */ -#define LR7_1 /* Nothing */ -#define LR7_2 /* Nothing */ -#define LR7_3 /* Nothing */ -#define LR7_4 /* Nothing */ -#define LR7_5 /* Nothing */ -#define LR7_6 lg %r7,56+160(%r15); \ - cfi_restore (%r7); - -# if IS_IN (libpthread) || IS_IN (libc) -# ifndef __ASSEMBLER__ -extern int __local_multiple_threads attribute_hidden; -# define SINGLE_THREAD_P \ - __builtin_expect (__local_multiple_threads == 0, 1) -# else -# define SINGLE_THREAD_P \ - larl %r1,__local_multiple_threads; \ - icm %r0,15,0(%r1); -# endif - -# else - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P \ - ear %r1,%a0; \ - sllg %r1,%r1,32; \ - ear %r1,%a1; \ - icm %r1,15,MULTIPLE_THREADS_OFFSET(%r1); -# endif - -# endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S deleted file mode 100644 index a08a2ff188..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -/* The following code is only used in the shared library when we - compile the reentrant version. Otherwise each system call defines - each own version. */ - -/* The syscall stubs jump here when they detect an error. */ - -#undef CALL_MCOUNT -#define CALL_MCOUNT - -.text -ENTRY(__syscall_error) -#ifndef PIC -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif - basr %r1,0 -0: lg %r1,1f-0b(%r1) - ear %r3,%a0 - sllg %r3,%r3,32 - ear %r3,%a1 - lcr %r2,%r2 - st %r2,0(%r1,%r3) - lghi %r2,-1 - br %r14 -1: .quad SYSCALL_ERROR_ERRNO@ntpoff -#else -# if RTLD_PRIVATE_ERRNO - larl %r1,rtld_errno - lcr %r2,%r2 - st %r2,0(%r1) - lghi %r2,-1 - br %r14 -# else -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif - larl %r1,_GLOBAL_OFFSET_TABLE_ - lg %r1,SYSCALL_ERROR_ERRNO@gotntpoff(%r1) - ear %r3,%a0 - sllg %r3,%r3,32 - ear %r3,%a1 - lcr %r2,%r2 - st %r2,0(%r1,%r3) - lghi %r2,-1 - br %r14 -# endif -#endif - -END (__syscall_error) diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h deleted file mode 100644 index e22d9b6b13..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h +++ /dev/null @@ -1,345 +0,0 @@ -/* Assembler macros for 64 bit S/390. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_S390_SYSDEP_H -#define _LINUX_S390_SYSDEP_H - -#include -#include -#include -#include /* For RTLD_PRIVATE_ERRNO. */ -#include - -/* Define __set_errno() for INLINE_SYSCALL macro below. */ -#ifndef __ASSEMBLER__ -#include -#endif - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -/* In newer 2.1 kernels __NR_syscall is missing so we define it here. */ -#define __NR_syscall 0 - -/* - * Newer kernel versions redefined __NR_pread and __NR_pwrite to - * __NR_pread64 and __NR_pwrite64. - */ -#ifndef __NR_pread -# define __NR_pread __NR_pread64 -#endif -#ifndef __NR_pwrite -# define __NR_pwrite __NR_pwrite64 -#endif - -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -#ifdef __ASSEMBLER__ - -/* Linux uses a negative return value to indicate syscall errors, unlike - most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be negative - even if the call succeeded. E.g., the `lseek' system call might return - a large offset. Therefore we must not anymore test for < 0, but test - for a real error by making sure the value in gpr2 is a real error - number. Linus said he will make sure that no syscall returns a value - in -1 .. -4095 as a valid result so we can savely test with -4095. */ - -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - lghi %r4,-4095 ; \ - clgr %r2,%r4 ; \ - jgnl SYSCALL_ERROR_LABEL - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - SYSCALL_ERROR_HANDLER; \ - END (name) - -#undef PSEUDO_NOERRNO -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args) - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ - SYSCALL_ERROR_HANDLER; \ - END (name) - -#undef PSEUDO_ERRVAL -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - lcgr %r2,%r2 - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) \ - SYSCALL_ERROR_HANDLER; \ - END (name) - -#ifndef PIC -# define SYSCALL_ERROR_LABEL syscall_error -# define SYSCALL_ERROR_HANDLER -#else -# if RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_LABEL 0f -# define SYSCALL_ERROR_HANDLER \ -0: larl %r1,rtld_errno; \ - lcr %r2,%r2; \ - st %r2,0(%r1); \ - lghi %r2,-1; \ - br %r14 -# elif defined _LIBC_REENTRANT -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif -# define SYSCALL_ERROR_LABEL 0f -# define SYSCALL_ERROR_HANDLER \ -0: lcr %r0,%r2; \ - larl %r1,SYSCALL_ERROR_ERRNO@indntpoff; \ - lg %r1,0(%r1); \ - ear %r2,%a0; \ - sllg %r2,%r2,32; \ - ear %r2,%a1; \ - st %r0,0(%r1,%r2); \ - lghi %r2,-1; \ - br %r14 -# else -# define SYSCALL_ERROR_LABEL 0f -# define SYSCALL_ERROR_HANDLER \ -0: larl %r1,_GLOBAL_OFFSET_TABLE_; \ - lg %r1,errno@GOT(%r1); \ - lcr %r2,%r2; \ - st %r2,0(%r1); \ - lghi %r2,-1; \ - br %r14 -# endif /* _LIBC_REENTRANT */ -#endif /* PIC */ - -/* Linux takes system call arguments in registers: - - syscall number 1 call-clobbered - arg 1 2 call-clobbered - arg 2 3 call-clobbered - arg 3 4 call-clobbered - arg 4 5 call-clobbered - arg 5 6 call-saved - arg 6 7 call-saved - - (Of course a function with say 3 arguments does not have entries for - arguments 4 and 5.) - For system calls with 6 parameters a stack operation is required - to load the 6th parameter to register 7. Call saved register 7 is - moved to register 0 and back to avoid an additional stack frame. - */ - -#define DO_CALL(syscall, args) \ - .if args > 5; \ - lgr %r0,%r7; \ - lg %r7,160(%r15); \ - .endif; \ - .if SYS_ify (syscall) < 256; \ - svc SYS_ify (syscall); \ - .else; \ - lghi %r1,SYS_ify (syscall); \ - svc 0; \ - .endif; \ - .if args > 5; \ - lgr %r7,%r0; \ - .endif - -#define ret \ - br 14 - -#define ret_NOERRNO \ - br 14 - -#define ret_ERRVAL \ - br 14 - -#endif /* __ASSEMBLER__ */ - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - ({ \ - long _ret = INTERNAL_SYSCALL (name, , nr, args); \ - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (_ret, ))) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (_ret, )); \ - _ret = -1; \ - } \ - _ret; }) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) do { } while (0) - -#undef INTERNAL_SYSCALL_DIRECT -#define INTERNAL_SYSCALL_DIRECT(name, err, nr, args...) \ - ({ \ - DECLARGS_##nr(args) \ - register long _ret __asm__("2"); \ - __asm__ __volatile__ ( \ - "svc %b1\n\t" \ - : "=d" (_ret) \ - : "i" (__NR_##name) ASMFMT_##nr \ - : "memory" ); \ - _ret; }) - -#undef INTERNAL_SYSCALL_SVC0 -#define INTERNAL_SYSCALL_SVC0(name, err, nr, args...) \ - ({ \ - DECLARGS_##nr(args) \ - register unsigned long _nr __asm__("1") = (unsigned long)(__NR_##name); \ - register long _ret __asm__("2"); \ - __asm__ __volatile__ ( \ - "svc 0\n\t" \ - : "=d" (_ret) \ - : "d" (_nr) ASMFMT_##nr \ - : "memory" ); \ - _ret; }) - -#undef INTERNAL_SYSCALL_NCS -#define INTERNAL_SYSCALL_NCS(no, err, nr, args...) \ - ({ \ - DECLARGS_##nr(args) \ - register unsigned long _nr __asm__("1") = (unsigned long)(no); \ - register long _ret __asm__("2"); \ - __asm__ __volatile__ ( \ - "svc 0\n\t" \ - : "=d" (_ret) \ - : "d" (_nr) ASMFMT_##nr \ - : "memory" ); \ - _ret; }) - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - (((__NR_##name) < 256) ? \ - INTERNAL_SYSCALL_DIRECT(name, err, nr, args) : \ - INTERNAL_SYSCALL_SVC0(name, err,nr, args)) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((unsigned long) (val) >= -4095UL) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) - -#define DECLARGS_0() -#define DECLARGS_1(arg1) \ - register unsigned long gpr2 __asm__ ("2") = (unsigned long)(arg1); -#define DECLARGS_2(arg1, arg2) \ - DECLARGS_1(arg1) \ - register unsigned long gpr3 __asm__ ("3") = (unsigned long)(arg2); -#define DECLARGS_3(arg1, arg2, arg3) \ - DECLARGS_2(arg1, arg2) \ - register unsigned long gpr4 __asm__ ("4") = (unsigned long)(arg3); -#define DECLARGS_4(arg1, arg2, arg3, arg4) \ - DECLARGS_3(arg1, arg2, arg3) \ - register unsigned long gpr5 __asm__ ("5") = (unsigned long)(arg4); -#define DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \ - DECLARGS_4(arg1, arg2, arg3, arg4) \ - register unsigned long gpr6 __asm__ ("6") = (unsigned long)(arg5); -#define DECLARGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \ - DECLARGS_5(arg1, arg2, arg3, arg4, arg5) \ - register unsigned long gpr7 __asm__ ("7") = (unsigned long)(arg6); - -#define ASMFMT_0 -#define ASMFMT_1 , "0" (gpr2) -#define ASMFMT_2 , "0" (gpr2), "d" (gpr3) -#define ASMFMT_3 , "0" (gpr2), "d" (gpr3), "d" (gpr4) -#define ASMFMT_4 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5) -#define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6) -#define ASMFMT_6 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6), "d" (gpr7) - -#define CLOBBER_0 , "3", "4", "5" -#define CLOBBER_1 , "3", "4", "5" -#define CLOBBER_2 , "4", "5" -#define CLOBBER_3 , "5" -#define CLOBBER_4 -#define CLOBBER_5 -#define CLOBBER_6 - -/* List of system calls which are supported as vsyscalls. */ -#define HAVE_CLOCK_GETRES_VSYSCALL 1 -#define HAVE_CLOCK_GETTIME_VSYSCALL 1 -#define HAVE_GETTIMEOFDAY_VSYSCALL 1 -#define HAVE_GETCPU_VSYSCALL 1 - -/* This version is for internal uses when there is no desire - to set errno */ -#define INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK(name, err, nr, args...) \ - ({ \ - long int _ret = ENOSYS; \ - \ - __typeof (__vdso_##name) vdsop = __vdso_##name; \ - PTR_DEMANGLE (vdsop); \ - if (vdsop != NULL) \ - _ret = INTERNAL_VSYSCALL_CALL (vdsop, err, nr, ##args); \ - else \ - err = 1 << 28; \ - _ret; \ - }) - -#define INTERNAL_VSYSCALL_CALL(fn, err, nr, args...) \ - ({ \ - DECLARGS_##nr(args) \ - register long _ret __asm__("2"); \ - __asm__ __volatile__ ( \ - "lgr 10,14\n\t" \ - "basr 14,%1\n\t" \ - "lgr 14,10\n\t" \ - : "=d" (_ret) \ - : "a" (fn) ASMFMT_##nr \ - : "cc", "memory", "0", "1", "10" CLOBBER_##nr); \ - _ret; }) - -/* Pointer mangling support. */ -#if IS_IN (rtld) -/* We cannot use the thread descriptor because in ld.so we use setjmp - earlier than the descriptor is initialized. */ -#else -/* For the time being just use stack_guard rather than a separate - pointer_guard. */ -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(reg, tmpreg) \ - ear tmpreg,%a0; \ - sllg tmpreg,tmpreg,32; \ - ear tmpreg,%a1; \ - xg reg,STACK_GUARD(tmpreg) -# define PTR_MANGLE2(reg, tmpreg) \ - xg reg,STACK_GUARD(tmpreg) -# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) -# else -# define PTR_MANGLE(var) \ - (var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#endif - -#endif /* _LINUX_S390_SYSDEP_H */ diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/timer_create.c b/sysdeps/unix/sysv/linux/s390/s390-64/timer_create.c deleted file mode 100644 index d307135003..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/timer_create.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/timer_delete.c b/sysdeps/unix/sysv/linux/s390/s390-64/timer_delete.c deleted file mode 100644 index 2dd94f5c7a..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/timer_delete.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/timer_getoverr.c b/sysdeps/unix/sysv/linux/s390/s390-64/timer_getoverr.c deleted file mode 100644 index 22eaff5cda..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/timer_getoverr.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/timer_gettime.c b/sysdeps/unix/sysv/linux/s390/s390-64/timer_gettime.c deleted file mode 100644 index cea524bae5..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/timer_gettime.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/timer_settime.c b/sysdeps/unix/sysv/linux/s390/s390-64/timer_settime.c deleted file mode 100644 index fa231149d5..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/timer_settime.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S b/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S deleted file mode 100644 index 5f3c9c5028..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2004. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include -#include -#include - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__libc_vfork) - /* Do vfork system call. */ - svc SYS_ify (vfork) - - /* Check for error. */ - lghi %r4,-4095 - clgr %r2,%r4 - jgnl SYSCALL_ERROR_LABEL - - /* Normal return. */ - br %r14 -PSEUDO_END (__libc_vfork) - -#if IS_IN (libc) -weak_alias (__libc_vfork, vfork) -strong_alias (__libc_vfork, __vfork) -libc_hidden_def (__vfork) -#endif diff --git a/sysdeps/unix/sysv/linux/s390/sa_len.c b/sysdeps/unix/sysv/linux/s390/sa_len.c deleted file mode 100644 index 7b47aa8d67..0000000000 --- a/sysdeps/unix/sysv/linux/s390/sa_len.c +++ /dev/null @@ -1,3 +0,0 @@ -#define HAVE_NETIUCV_IUCV_H - -#include diff --git a/sysdeps/unix/sysv/linux/s390/semtimedop.c b/sysdeps/unix/sysv/linux/s390/semtimedop.c deleted file mode 100644 index 6f4ca186b4..0000000000 --- a/sysdeps/unix/sysv/linux/s390/semtimedop.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Martin Schwidefsky , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Perform user-defined atomical operation of array of semaphores. */ - -int -semtimedop (int semid, struct sembuf *sops, size_t nsops, - const struct timespec *timeout) -{ - /* The s390 sys_ipc variant has only five parameters instead of six - (as for default variant) and the only difference is the handling of - SEMTIMEDOP where on s390 the third parameter is used as a pointer - to a struct timespec where the generic variant uses fifth parameter. */ - return INLINE_SYSCALL_CALL (ipc, IPCOP_semtimedop, semid, nsops, timeout, - sops); -} diff --git a/sysdeps/unix/sysv/linux/s390/sigcontextinfo.h b/sysdeps/unix/sysv/linux/s390/sigcontextinfo.h deleted file mode 100644 index 90ead3f43c..0000000000 --- a/sysdeps/unix/sysv/linux/s390/sigcontextinfo.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define SIGCONTEXT struct sigcontext * -#define SIGCONTEXT_EXTRA_ARGS -#define GET_PC(ctx) ((void *)((ctx)->sregs->regs.psw.addr)) -#define GET_FRAME(ctx) (*(void **)((ctx)->sregs->regs.gprs[11])) -#define GET_STACK(ctx) ((void *)((ctx)->sregs->regs.gprs[15])) -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff --git a/sysdeps/unix/sysv/linux/s390/sys/elf.h b/sysdeps/unix/sysv/linux/s390/sys/elf.h deleted file mode 100644 index 9a093ba273..0000000000 --- a/sysdeps/unix/sysv/linux/s390/sys/elf.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_ELF_H -#define _SYS_ELF_H 1 - -#warning "This header is obsolete; use instead." - -#include - -#endif /* _SYS_ELF_H */ diff --git a/sysdeps/unix/sysv/linux/s390/sys/procfs.h b/sysdeps/unix/sysv/linux/s390/sys/procfs.h deleted file mode 100644 index 2445f110f9..0000000000 --- a/sysdeps/unix/sysv/linux/s390/sys/procfs.h +++ /dev/null @@ -1,176 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somewhat modelled after the file of the same name on SVR4 - systems. It provides a definition of the core file format for ELF - used on Linux. It doesn't have anything to do with the /proc file - system, even though Linux has one. - - Anyway, the whole purpose of this file is for GDB and GDB only. - Don't read too much into it. Don't use it for anything other than - GDB unless you know what you are doing. */ - -#include -#include -#include -#include -#include - -__BEGIN_DECLS - -typedef greg_t elf_greg_t; -#define ELF_NGREG NGREG -typedef gregset_t elf_gregset_t; -typedef fpreg_t elf_fpreg_t; -typedef fpregset_t elf_fpregset_t; - -/* Signal info. */ -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with Linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - GDB doesn't really use excluded. */ - -struct elf_prstatus - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args. */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ -#if __WORDSIZE == 64 - unsigned int pr_uid; - unsigned int pr_gid; -#else - unsigned short int pr_uid; - unsigned short int pr_gid; -#endif - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -/* The rest of this file provides the types for emulation of the - Solaris interfaces that should be implemented by - users of libthread_db. */ - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore have only one PID type. */ -typedef __pid_t lwpid_t; - -/* Process status and info. In the end we do provide typedefs for them. */ -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -#if __WORDSIZE == 64 - -/* Provide 32-bit variants so that BFD can read 32-bit - core files. */ -#define ELF_NGREG32 36 -typedef unsigned int elf_greg_t32; -typedef elf_greg_t32 - elf_gregset_t32[ELF_NGREG32] __attribute__ ((__aligned__ (8))); -typedef elf_fpregset_t elf_fpregset_t32; - -struct elf_prstatus32 - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned int pr_sigpend; /* Set of pending signals. */ - unsigned int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct - { - int tv_sec, tv_usec; - } pr_utime, /* User time. */ - pr_stime, /* System time. */ - pr_cutime, /* Cumulative user time. */ - pr_cstime; /* Cumulative system time. */ - elf_gregset_t32 pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - -struct elf_prpsinfo32 - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned int pr_flag; /* Flags. */ - unsigned short int pr_uid; - unsigned short int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -typedef elf_gregset_t32 prgregset32_t; -typedef elf_fpregset_t32 prfpregset32_t; - -typedef struct elf_prstatus32 prstatus32_t; -typedef struct elf_prpsinfo32 prpsinfo32_t; - -#endif - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/s390/sys/ptrace.h b/sysdeps/unix/sysv/linux/s390/sys/ptrace.h deleted file mode 100644 index 7caf1015b2..0000000000 --- a/sysdeps/unix/sysv/linux/s390/sys/ptrace.h +++ /dev/null @@ -1,238 +0,0 @@ -/* `ptrace' debugger support interface. Linux version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PTRACE_H -#define _SYS_PTRACE_H 1 - -#include -#include - -__BEGIN_DECLS -#ifdef _LINUX_PTRACE_H -/* Kludge to stop stuff gdb & strace compiles from getting upset - */ -#undef PTRACE_TRACEME -#undef PTRACE_PEEKTEXT -#undef PTRACE_PEEKDATA -#undef PTRACE_PEEKUSR -#undef PTRACE_POKETEXT -#undef PTRACE_POKEDATA -#undef PTRACE_POKEUSR -#undef PTRACE_CONT -#undef PTRACE_KILL -#undef PTRACE_SINGLESTEP - -#undef PTRACE_ATTACH -#undef PTRACE_DETACH - -#undef PTRACE_SYSCALL -#endif -/* Type of the REQUEST argument to `ptrace.' */ -enum __ptrace_request -{ - /* Indicate that the process making this request should be traced. - All signals received by this process can be intercepted by its - parent, and its parent can use the other `ptrace' requests. */ - PTRACE_TRACEME = 0, -#define PT_TRACE_ME PTRACE_TRACEME - - /* Return the word in the process's text space at address ADDR. */ - PTRACE_PEEKTEXT = 1, -#define PT_READ_I PTRACE_PEEKTEXT - - /* Return the word in the process's data space at address ADDR. */ - PTRACE_PEEKDATA = 2, -#define PT_READ_D PTRACE_PEEKDATA - - /* Return the word in the process's user area at offset ADDR. */ - PTRACE_PEEKUSER = 3, -#define PT_READ_U PTRACE_PEEKUSER - - /* Write the word DATA into the process's text space at address ADDR. */ - PTRACE_POKETEXT = 4, -#define PT_WRITE_I PTRACE_POKETEXT - - /* Write the word DATA into the process's data space at address ADDR. */ - PTRACE_POKEDATA = 5, -#define PT_WRITE_D PTRACE_POKEDATA - - /* Write the word DATA into the process's user area at offset ADDR. */ - PTRACE_POKEUSER = 6, -#define PT_WRITE_U PTRACE_POKEUSER - - /* Continue the process. */ - PTRACE_CONT = 7, -#define PT_CONTINUE PTRACE_CONT - - /* Kill the process. */ - PTRACE_KILL = 8, -#define PT_KILL PTRACE_KILL - - /* Single step the process. - This is not supported on all machines. */ - PTRACE_SINGLESTEP = 9, -#define PT_STEP PTRACE_SINGLESTEP - - /* Get all general purpose registers used by a processes. - This is not supported on all machines. */ - PTRACE_GETREGS = 12, -#define PT_GETREGS PTRACE_GETREGS - - /* Set all general purpose registers used by a processes. - This is not supported on all machines. */ - PTRACE_SETREGS = 13, -#define PT_SETREGS PTRACE_SETREGS - - /* Get all floating point registers used by a processes. - This is not supported on all machines. */ - PTRACE_GETFPREGS = 14, -#define PT_GETFPREGS PTRACE_GETFPREGS - - /* Set all floating point registers used by a processes. - This is not supported on all machines. */ - PTRACE_SETFPREGS = 15, -#define PT_SETFPREGS PTRACE_SETFPREGS - - /* Attach to a process that is already running. */ - PTRACE_ATTACH = 16, -#define PT_ATTACH PTRACE_ATTACH - - /* Detach from a process attached to with PTRACE_ATTACH. */ - PTRACE_DETACH = 17, -#define PT_DETACH PTRACE_DETACH - - /* Continue and stop at the next (return from) syscall. */ - PTRACE_SYSCALL = 24, -#define PT_SYSCALL PTRACE_SYSCALL - - /* Set ptrace filter options. */ - PTRACE_SETOPTIONS = 0x4200, -#define PT_SETOPTIONS PTRACE_SETOPTIONS - - /* Get last ptrace message. */ - PTRACE_GETEVENTMSG = 0x4201, -#define PT_GETEVENTMSG PTRACE_GETEVENTMSG - - /* Get siginfo for process. */ - PTRACE_GETSIGINFO = 0x4202, -#define PT_GETSIGINFO PTRACE_GETSIGINFO - - /* Set new siginfo for process. */ - PTRACE_SETSIGINFO = 0x4203, -#define PT_SETSIGINFO PTRACE_SETSIGINFO - - /* Get register content. */ - PTRACE_GETREGSET = 0x4204, -#define PTRACE_GETREGSET PTRACE_GETREGSET - - /* Set register content. */ - PTRACE_SETREGSET = 0x4205, -#define PTRACE_SETREGSET PTRACE_SETREGSET - - /* Like PTRACE_ATTACH, but do not force tracee to trap and do not affect - signal or group stop state. */ - PTRACE_SEIZE = 0x4206, -#define PTRACE_SEIZE PTRACE_SEIZE - - /* Trap seized tracee. */ - PTRACE_INTERRUPT = 0x4207, -#define PTRACE_INTERRUPT PTRACE_INTERRUPT - - /* Wait for next group event. */ - PTRACE_LISTEN = 0x4208, -#define PTRACE_LISTEN PTRACE_LISTEN - - PTRACE_PEEKSIGINFO = 0x4209, -#define PTRACE_PEEKSIGINFO PTRACE_PEEKSIGINFO - - PTRACE_GETSIGMASK = 0x420a, -#define PTRACE_GETSIGMASK PTRACE_GETSIGMASK - - PTRACE_SETSIGMASK = 0x420b, -#define PTRACE_SETSIGMASK PTRACE_SETSIGMASK - - PTRACE_SECCOMP_GET_FILTER = 0x420c -#define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER -}; - - -/* Flag for PTRACE_LISTEN. */ -enum __ptrace_flags -{ - PTRACE_SEIZE_DEVEL = 0x80000000 -}; - -/* Options set using PTRACE_SETOPTIONS. */ -enum __ptrace_setoptions -{ - PTRACE_O_TRACESYSGOOD = 0x00000001, - PTRACE_O_TRACEFORK = 0x00000002, - PTRACE_O_TRACEVFORK = 0x00000004, - PTRACE_O_TRACECLONE = 0x00000008, - PTRACE_O_TRACEEXEC = 0x00000010, - PTRACE_O_TRACEVFORKDONE = 0x00000020, - PTRACE_O_TRACEEXIT = 0x00000040, - PTRACE_O_TRACESECCOMP = 0x00000080, - PTRACE_O_EXITKILL = 0x00100000, - PTRACE_O_SUSPEND_SECCOMP = 0x00200000, - PTRACE_O_MASK = 0x003000ff -}; - -enum __ptrace_eventcodes -{ -/* Wait extended result codes for the above trace options. */ - PTRACE_EVENT_FORK = 1, - PTRACE_EVENT_VFORK = 2, - PTRACE_EVENT_CLONE = 3, - PTRACE_EVENT_EXEC = 4, - PTRACE_EVENT_VFORK_DONE = 5, - PTRACE_EVENT_EXIT = 6, - PTRACE_EVENT_SECCOMP = 7, -/* Extended result codes enabled by means other than options. */ - PTRACE_EVENT_STOP = 128 -}; - -/* Arguments for PTRACE_PEEKSIGINFO. */ -struct __ptrace_peeksiginfo_args -{ - __uint64_t off; /* From which siginfo to start. */ - __uint32_t flags; /* Flags for peeksiginfo. */ - __int32_t nr; /* How many siginfos to take. */ -}; - -enum __ptrace_peeksiginfo_flags -{ - /* Read signals from a shared (process wide) queue. */ - PTRACE_PEEKSIGINFO_SHARED = (1 << 0) -}; - -/* Perform process tracing functions. REQUEST is one of the values - above, and determines the action to be taken. - For all requests except PTRACE_TRACEME, PID specifies the process to be - traced. - - PID and the other arguments described above for the various requests should - appear (those that are used for the particular request) as: - pid_t PID, void *ADDR, int DATA, void *ADDR2 - after REQUEST. */ -extern long int ptrace (enum __ptrace_request __request, ...) __THROW; - -__END_DECLS - -#endif /* _SYS_PTRACE_H */ diff --git a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h deleted file mode 100644 index 183da5c8f9..0000000000 --- a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - - -#ifdef __USE_MISC -# define __ctx(fld) fld -#else -# define __ctx(fld) __ ## fld -#endif - -/* Type for a program status word. */ -typedef struct -{ - unsigned long __ctx(mask); - unsigned long __ctx(addr); -} __attribute__ ((__aligned__(8))) __psw_t; - -/* Type for a general-purpose register. */ -typedef unsigned long greg_t; - -/* And the whole bunch of them. We should have used `struct s390_regs', - but to avoid name space pollution and since the tradition says that - the register set is an array, we make gregset_t a simple array - that has the same size as s390_regs. This is needed for the - elf_prstatus structure. */ -#if __WORDSIZE == 64 -# define __NGREG 27 -#else -# define __NGREG 36 -#endif -#ifdef __USE_MISC -# define NGREG __NGREG -#endif -/* Must match kernels psw_t alignment. */ -typedef greg_t gregset_t[__NGREG] __attribute__ ((__aligned__(8))); - -typedef union - { - double __ctx(d); - float __ctx(f); - } fpreg_t; - -/* Register set for the floating-point registers. */ -typedef struct - { - unsigned int __ctx(fpc); - fpreg_t __ctx(fprs)[16]; - } fpregset_t; - -/* Context to describe whole processor state. */ -typedef struct - { - __psw_t __ctx(psw); - unsigned long __ctx(gregs)[16]; - unsigned int __ctx(aregs)[16]; - fpregset_t __ctx(fpregs); - } mcontext_t; - -#undef __ctx - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - sigset_t uc_sigmask; - } ucontext_t; - - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/s390/sys/user.h b/sysdeps/unix/sysv/linux/s390/sys/user.h deleted file mode 100644 index 8f8fcca59f..0000000000 --- a/sysdeps/unix/sysv/linux/s390/sys/user.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_USER_H -#define _SYS_USER_H 1 - -/* The whole purpose of this file is for GDB and GDB only. Don't read - too much into it. Don't use it for anything other than GDB unless - you know what you are doing. */ - -struct _user_psw_struct -{ - unsigned long mask; - unsigned long addr; -}; - -struct _user_fpregs_struct -{ - unsigned int fpc; - double fprs[16]; -}; - -struct _user_per_struct -{ - unsigned long control_regs[3]; - unsigned single_step : 1; - unsigned instruction_fetch : 1; - unsigned : 30; - unsigned long starting_addr; - unsigned long ending_addr; - unsigned short perc_atmid; - unsigned long address; - unsigned char access_id; -}; - -struct _user_regs_struct -{ - struct _user_psw_struct psw; /* Program status word. */ - unsigned long gprs[16]; /* General purpose registers. */ - unsigned int acrs[16]; /* Access registers. */ - unsigned long orig_gpr2; /* Original gpr2. */ - struct _user_fpregs_struct fp_regs; /* Floating point registers. */ - struct _user_per_struct per_info; /* Hardware tracing registers. */ - unsigned long ieee_instruction_pointer; /* Always 0. */ -}; - -struct user { - struct _user_regs_struct regs; /* User registers. */ - unsigned long int u_tsize; /* Text segment size (pages). */ - unsigned long int u_dsize; /* Data segment size (pages). */ - unsigned long int u_ssize; /* Stack segment size (pages). */ - unsigned long start_code; /* Starting address of text. */ - unsigned long start_stack; /* Starting address of stack area. */ - long int signal; /* Signal causing the core dump. */ - struct _user_regs_struct *u_ar0; /* Help gdb find registers. */ - unsigned long magic; /* Identifies a core file. */ - char u_comm[32]; /* User command naem. */ -}; - -#define PAGE_SHIFT 12 -#define PAGE_SIZE (1UL << PAGE_SHIFT) -#define PAGE_MASK (~(PAGE_SIZE-1)) -#define NBPG PAGE_SIZE -#define UPAGES 1 -#define HOST_TEXT_START_ADDR (u.start_code) -#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) - -#endif /* _SYS_USER_H */ diff --git a/sysdeps/unix/sysv/linux/s390/sysconf.c b/sysdeps/unix/sysv/linux/s390/sysconf.c deleted file mode 100644 index 5d78fdd073..0000000000 --- a/sysdeps/unix/sysv/linux/s390/sysconf.c +++ /dev/null @@ -1,230 +0,0 @@ -/* Get system parameters, e.g. cache information. S390/S390x version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -static long int linux_sysconf (int name); - -/* Possible arguments for get_cache_info. - The values are reflecting the level/attribute/type indications - of ecag-instruction (extract cpu attribue). */ -#define CACHE_LEVEL_MAX 8 -#define CACHE_ATTR_LINESIZE 1 -#define CACHE_ATTR_SIZE 2 -#define CACHE_ATTR_ASSOC 3 -#define CACHE_TYPE_DATA 0 -#define CACHE_TYPE_INSTRUCTION 1 - -static long -get_cache_info (int level, int attr, int type) -{ - unsigned long int val; - unsigned int cmd; - unsigned long int arg; - - /* Check arguments. */ - if (level < 1 || level > CACHE_LEVEL_MAX - || attr < CACHE_ATTR_LINESIZE || attr > CACHE_ATTR_ASSOC - || type < CACHE_TYPE_DATA || type > CACHE_TYPE_INSTRUCTION) - return 0L; - - /* Check if ecag-instruction is available. - ecag - extract CPU attribute (only in zarch; arch >= z10; in as 2.24) */ - if (!(GLRO (dl_hwcap) & HWCAP_S390_STFLE) -#if !defined __s390x__ - || !(GLRO (dl_hwcap) & HWCAP_S390_ZARCH) - || !(GLRO (dl_hwcap) & HWCAP_S390_HIGH_GPRS) -#endif /* !__s390x__ */ - ) - { - /* stfle (or zarch, high-gprs on s390-32) is not available. - We are on an old machine. Return 256byte for LINESIZE for L1 d/i-cache, - otherwise 0. */ - if (level == 1 && attr == CACHE_ATTR_LINESIZE) - return 256L; - else - return 0L; - } - - /* Store facility list and check for z10. - (see ifunc-resolver for details) */ - register unsigned long reg0 __asm__("0") = 0; -#ifdef __s390x__ - unsigned long stfle_bits; -# define STFLE_Z10_MASK (1UL << (63 - 34)) -#else - unsigned long long stfle_bits; -# define STFLE_Z10_MASK (1ULL << (63 - 34)) -#endif /* !__s390x__ */ - __asm__ __volatile__(".machine push" "\n\t" - ".machinemode \"zarch_nohighgprs\"\n\t" - ".machine \"z9-109\"" "\n\t" - "stfle %0" "\n\t" - ".machine pop" "\n" - : "=QS" (stfle_bits), "+d" (reg0) - : : "cc"); - - if (!(stfle_bits & STFLE_Z10_MASK)) - { - /* We are at least on a z9 machine. - Return 256byte for LINESIZE for L1 d/i-cache, - otherwise 0. */ - if (level == 1 && attr == CACHE_ATTR_LINESIZE) - return 256L; - else - return 0L; - } - - /* Check cache topology, if cache is available at this level. */ - arg = (CACHE_LEVEL_MAX - level) * 8; - __asm__ __volatile__ (".machine push\n\t" - ".machine \"z10\"\n\t" - ".machinemode \"zarch_nohighgprs\"\n\t" - "ecag %0,%%r0,0\n\t" /* returns 64bit unsigned integer. */ - "srlg %0,%0,0(%1)\n\t" /* right align 8bit cache info field. */ - ".machine pop" - : "=&d" (val) - : "a" (arg) - ); - val &= 0xCUL; /* Extract cache scope information from cache topology summary. - (bits 4-5 of 8bit-field; 00 means cache does not exist). */ - if (val == 0) - return 0L; - - /* Get cache information for level, attribute and type. */ - cmd = (attr << 4) | ((level - 1) << 1) | type; - __asm__ __volatile__ (".machine push\n\t" - ".machine \"z10\"\n\t" - ".machinemode \"zarch_nohighgprs\"\n\t" - "ecag %0,%%r0,0(%1)\n\t" - ".machine pop" - : "=d" (val) - : "a" (cmd) - ); - return val; -} - -long int -__sysconf (int name) -{ - if (name >= _SC_LEVEL1_ICACHE_SIZE && name <= _SC_LEVEL4_CACHE_LINESIZE) - { - int level; - int attr; - int type; - - switch (name) - { - case _SC_LEVEL1_ICACHE_SIZE: - level = 1; - attr = CACHE_ATTR_SIZE; - type = CACHE_TYPE_INSTRUCTION; - break; - case _SC_LEVEL1_ICACHE_ASSOC: - level = 1; - attr = CACHE_ATTR_ASSOC; - type = CACHE_TYPE_INSTRUCTION; - break; - case _SC_LEVEL1_ICACHE_LINESIZE: - level = 1; - attr = CACHE_ATTR_LINESIZE; - type = CACHE_TYPE_INSTRUCTION; - break; - - case _SC_LEVEL1_DCACHE_SIZE: - level = 1; - attr = CACHE_ATTR_SIZE; - type = CACHE_TYPE_DATA; - break; - case _SC_LEVEL1_DCACHE_ASSOC: - level = 1; - attr = CACHE_ATTR_ASSOC; - type = CACHE_TYPE_DATA; - break; - case _SC_LEVEL1_DCACHE_LINESIZE: - level = 1; - attr = CACHE_ATTR_LINESIZE; - type = CACHE_TYPE_DATA; - break; - - case _SC_LEVEL2_CACHE_SIZE: - level = 2; - attr = CACHE_ATTR_SIZE; - type = CACHE_TYPE_DATA; - break; - case _SC_LEVEL2_CACHE_ASSOC: - level = 2; - attr = CACHE_ATTR_ASSOC; - type = CACHE_TYPE_DATA; - break; - case _SC_LEVEL2_CACHE_LINESIZE: - level = 2; - attr = CACHE_ATTR_LINESIZE; - type = CACHE_TYPE_DATA; - break; - - case _SC_LEVEL3_CACHE_SIZE: - level = 3; - attr = CACHE_ATTR_SIZE; - type = CACHE_TYPE_DATA; - break; - case _SC_LEVEL3_CACHE_ASSOC: - level = 3; - attr = CACHE_ATTR_ASSOC; - type = CACHE_TYPE_DATA; - break; - case _SC_LEVEL3_CACHE_LINESIZE: - level = 3; - attr = CACHE_ATTR_LINESIZE; - type = CACHE_TYPE_DATA; - break; - - case _SC_LEVEL4_CACHE_SIZE: - level = 4; - attr = CACHE_ATTR_SIZE; - type = CACHE_TYPE_DATA; - break; - case _SC_LEVEL4_CACHE_ASSOC: - level = 4; - attr = CACHE_ATTR_ASSOC; - type = CACHE_TYPE_DATA; - break; - case _SC_LEVEL4_CACHE_LINESIZE: - level = 4; - attr = CACHE_ATTR_LINESIZE; - type = CACHE_TYPE_DATA; - break; - - default: - level = 0; - attr = 0; - type = 0; - break; - } - - return get_cache_info (level, attr, type); - } - - return linux_sysconf (name); -} - -/* Now the generic Linux version. */ -#undef __sysconf -#define __sysconf static linux_sysconf -#include diff --git a/sysdeps/unix/sysv/linux/s390/system.c b/sysdeps/unix/sysv/linux/s390/system.c deleted file mode 100644 index da90073a9d..0000000000 --- a/sysdeps/unix/sysv/linux/s390/system.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* We have to and actually can handle cancelable system(). The big - problem: we have to kill the child process if necessary. To do - this a cleanup handler has to be registered and is has to be able - to find the PID of the child. The main problem is to reliable have - the PID when needed. It is not necessary for the parent thread to - return. It might still be in the kernel when the cancellation - request comes. Therefore we have to use the clone() calls ability - to have the kernel write the PID into the user-level variable. */ -#define FORK() \ - INLINE_SYSCALL (clone, 3, 0, CLONE_PARENT_SETTID | SIGCHLD, &pid) - -#include "../system.c" diff --git a/sysdeps/unix/sysv/linux/s390/ucontext_i.sym b/sysdeps/unix/sysv/linux/s390/ucontext_i.sym deleted file mode 100644 index 6cc9f19624..0000000000 --- a/sysdeps/unix/sysv/linux/s390/ucontext_i.sym +++ /dev/null @@ -1,25 +0,0 @@ -#include -#include -#include - --- - -SIG_BLOCK -SIG_UNBLOCK -SIG_SETMASK - -_NSIG8 (_NSIG / 8) - -#define ucontext(member) offsetof (ucontext_t, member) -#define mcontext(member) ucontext (uc_mcontext.member) - -SC_FLGS ucontext (uc_flags) -SC_LINK ucontext (uc_link) -SC_STCK ucontext (uc_stack.ss_sp) -SC_STSZ ucontext (uc_stack.ss_size) -SC_PSW mcontext (psw) -SC_GPRS mcontext (gregs) -SC_ACRS mcontext (aregs) -SC_FPC mcontext (fpregs.fpc) -SC_FPRS mcontext (fpregs.fprs) -SC_MASK ucontext (uc_sigmask) diff --git a/sysdeps/unix/sysv/linux/sa_len.c b/sysdeps/unix/sysv/linux/sa_len.c deleted file mode 100644 index 0e657fa094..0000000000 --- a/sysdeps/unix/sysv/linux/sa_len.c +++ /dev/null @@ -1,9 +0,0 @@ -#define HAVE_NETASH_ASH_H -#define HAVE_NETATALK_AT_H -#define HAVE_NETAX25_AX25_H -#define HAVE_NETECONET_EC_H -#define HAVE_NETIPX_IPX_H -#define HAVE_NETPACKET_PACKET_H -#define HAVE_NETROSE_ROSE_H - -#include diff --git a/sysdeps/unix/sysv/linux/safe-fatal.h b/sysdeps/unix/sysv/linux/safe-fatal.h deleted file mode 100644 index 0bd759bd15..0000000000 --- a/sysdeps/unix/sysv/linux/safe-fatal.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Crash the process immediately, without possibility of deadlock. Linux. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SAFE_FATAL_H -#define _SAFE_FATAL_H 1 - -#include -#include - -static inline void -__safe_fatal (void) -{ - INTERNAL_SYSCALL_DECL (err); - pid_t self = INTERNAL_SYSCALL (getpid, err, 0); - INTERNAL_SYSCALL (kill, err, 2, self, SIGKILL); -} - -#endif /* safe-fatal.h */ diff --git a/sysdeps/unix/sysv/linux/sched_getaffinity.c b/sysdeps/unix/sysv/linux/sched_getaffinity.c deleted file mode 100644 index d531d0a79f..0000000000 --- a/sysdeps/unix/sysv/linux/sched_getaffinity.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - - -#ifdef __NR_sched_getaffinity -# if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_3_4) -extern int __sched_getaffinity_new (pid_t, size_t, cpu_set_t *); -libc_hidden_proto (__sched_getaffinity_new) -# endif - -int -__sched_getaffinity_new (pid_t pid, size_t cpusetsize, cpu_set_t *cpuset) -{ - int res = INLINE_SYSCALL (sched_getaffinity, 3, pid, - MIN (INT_MAX, cpusetsize), cpuset); - if (res != -1) - { - /* Clean the rest of the memory the kernel didn't do. */ - memset ((char *) cpuset + res, '\0', cpusetsize - res); - - res = 0; - } - return res; -} -versioned_symbol (libc, __sched_getaffinity_new, sched_getaffinity, - GLIBC_2_3_4); - - -# if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_3_4) -libc_hidden_def (__sched_getaffinity_new) - -int -attribute_compat_text_section -__sched_getaffinity_old (pid_t pid, cpu_set_t *cpuset) -{ - /* The old interface by default assumed a 1024 processor bitmap. */ - return __sched_getaffinity_new (pid, 128, cpuset); -} -compat_symbol (libc, __sched_getaffinity_old, sched_getaffinity, GLIBC_2_3_3); -# endif -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/sched_getcpu.c b/sysdeps/unix/sysv/linux/sched_getcpu.c deleted file mode 100644 index 58ac60b7a8..0000000000 --- a/sysdeps/unix/sysv/linux/sched_getcpu.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#ifdef HAVE_GETCPU_VSYSCALL -# define HAVE_VSYSCALL -#endif -#include - -int -sched_getcpu (void) -{ -#ifdef __NR_getcpu - unsigned int cpu; - int r = INLINE_VSYSCALL (getcpu, 3, &cpu, NULL, NULL); - - return r == -1 ? r : cpu; -#else - __set_errno (ENOSYS); - return -1; -#endif -} diff --git a/sysdeps/unix/sysv/linux/sched_setaffinity.c b/sysdeps/unix/sysv/linux/sched_setaffinity.c deleted file mode 100644 index 8854e72c67..0000000000 --- a/sysdeps/unix/sysv/linux/sched_setaffinity.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - - -#ifdef __NR_sched_setaffinity - -int -__sched_setaffinity_new (pid_t pid, size_t cpusetsize, const cpu_set_t *cpuset) -{ - int result = INLINE_SYSCALL (sched_setaffinity, 3, pid, cpusetsize, cpuset); - -#ifdef RESET_VGETCPU_CACHE - if (result != -1) - RESET_VGETCPU_CACHE (); -#endif - - return result; -} -versioned_symbol (libc, __sched_setaffinity_new, sched_setaffinity, - GLIBC_2_3_4); - - -# if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_3_4) -int -attribute_compat_text_section -__sched_setaffinity_old (pid_t pid, const cpu_set_t *cpuset) -{ - /* The old interface by default assumed a 1024 processor bitmap. */ - return __sched_setaffinity_new (pid, 128, cpuset); -} -compat_symbol (libc, __sched_setaffinity_old, sched_setaffinity, GLIBC_2_3_3); -# endif -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/scsi/scsi.h b/sysdeps/unix/sysv/linux/scsi/scsi.h deleted file mode 100644 index 630834a26e..0000000000 --- a/sysdeps/unix/sysv/linux/scsi/scsi.h +++ /dev/null @@ -1,225 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * This header file contains public constants and structures used by - * the scsi code for linux. - */ - -#ifndef _SCSI_SCSI_H -#define _SCSI_SCSI_H 1 - -#include - -/* - * SCSI opcodes - */ - -#define TEST_UNIT_READY 0x00 -#define REZERO_UNIT 0x01 -#define REQUEST_SENSE 0x03 -#define FORMAT_UNIT 0x04 -#define READ_BLOCK_LIMITS 0x05 -#define REASSIGN_BLOCKS 0x07 -#define READ_6 0x08 -#define WRITE_6 0x0a -#define SEEK_6 0x0b -#define READ_REVERSE 0x0f -#define WRITE_FILEMARKS 0x10 -#define SPACE 0x11 -#define INQUIRY 0x12 -#define RECOVER_BUFFERED_DATA 0x14 -#define MODE_SELECT 0x15 -#define RESERVE 0x16 -#define RELEASE 0x17 -#define COPY 0x18 -#define ERASE 0x19 -#define MODE_SENSE 0x1a -#define START_STOP 0x1b -#define RECEIVE_DIAGNOSTIC 0x1c -#define SEND_DIAGNOSTIC 0x1d -#define ALLOW_MEDIUM_REMOVAL 0x1e - -#define SET_WINDOW 0x24 -#define READ_CAPACITY 0x25 -#define READ_10 0x28 -#define WRITE_10 0x2a -#define SEEK_10 0x2b -#define WRITE_VERIFY 0x2e -#define VERIFY 0x2f -#define SEARCH_HIGH 0x30 -#define SEARCH_EQUAL 0x31 -#define SEARCH_LOW 0x32 -#define SET_LIMITS 0x33 -#define PRE_FETCH 0x34 -#define READ_POSITION 0x34 -#define SYNCHRONIZE_CACHE 0x35 -#define LOCK_UNLOCK_CACHE 0x36 -#define READ_DEFECT_DATA 0x37 -#define MEDIUM_SCAN 0x38 -#define COMPARE 0x39 -#define COPY_VERIFY 0x3a -#define WRITE_BUFFER 0x3b -#define READ_BUFFER 0x3c -#define UPDATE_BLOCK 0x3d -#define READ_LONG 0x3e -#define WRITE_LONG 0x3f -#define CHANGE_DEFINITION 0x40 -#define WRITE_SAME 0x41 -#define READ_TOC 0x43 -#define LOG_SELECT 0x4c -#define LOG_SENSE 0x4d -#define MODE_SELECT_10 0x55 -#define RESERVE_10 0x56 -#define RELEASE_10 0x57 -#define MODE_SENSE_10 0x5a -#define PERSISTENT_RESERVE_IN 0x5e -#define PERSISTENT_RESERVE_OUT 0x5f -#define MOVE_MEDIUM 0xa5 -#define READ_12 0xa8 -#define WRITE_12 0xaa -#define WRITE_VERIFY_12 0xae -#define SEARCH_HIGH_12 0xb0 -#define SEARCH_EQUAL_12 0xb1 -#define SEARCH_LOW_12 0xb2 -#define READ_ELEMENT_STATUS 0xb8 -#define SEND_VOLUME_TAG 0xb6 -#define WRITE_LONG_2 0xea - -/* - * Status codes - */ - -#define GOOD 0x00 -#define CHECK_CONDITION 0x01 -#define CONDITION_GOOD 0x02 -#define BUSY 0x04 -#define INTERMEDIATE_GOOD 0x08 -#define INTERMEDIATE_C_GOOD 0x0a -#define RESERVATION_CONFLICT 0x0c -#define COMMAND_TERMINATED 0x11 -#define QUEUE_FULL 0x14 - -#define STATUS_MASK 0x3e - -/* - * SENSE KEYS - */ - -#define NO_SENSE 0x00 -#define RECOVERED_ERROR 0x01 -#define NOT_READY 0x02 -#define MEDIUM_ERROR 0x03 -#define HARDWARE_ERROR 0x04 -#define ILLEGAL_REQUEST 0x05 -#define UNIT_ATTENTION 0x06 -#define DATA_PROTECT 0x07 -#define BLANK_CHECK 0x08 -#define COPY_ABORTED 0x0a -#define ABORTED_COMMAND 0x0b -#define VOLUME_OVERFLOW 0x0d -#define MISCOMPARE 0x0e - - -/* - * DEVICE TYPES - */ - -#define TYPE_DISK 0x00 -#define TYPE_TAPE 0x01 -#define TYPE_PROCESSOR 0x03 /* HP scanners use this */ -#define TYPE_WORM 0x04 /* Treated as ROM by our system */ -#define TYPE_ROM 0x05 -#define TYPE_SCANNER 0x06 -#define TYPE_MOD 0x07 /* Magneto-optical disk - - * - treated as TYPE_DISK */ -#define TYPE_MEDIUM_CHANGER 0x08 -#define TYPE_ENCLOSURE 0x0d /* Enclosure Services Device */ -#define TYPE_NO_LUN 0x7f - -/* - * standard mode-select header prepended to all mode-select commands - * - * moved here from cdrom.h -- kraxel - */ - -struct ccs_modesel_head - { - unsigned char _r1; /* reserved. */ - unsigned char medium; /* device-specific medium type. */ - unsigned char _r2; /* reserved. */ - unsigned char block_desc_length; /* block descriptor length. */ - unsigned char density; /* device-specific density code. */ - unsigned char number_blocks_hi; /* number of blocks in this block - desc. */ - unsigned char number_blocks_med; - unsigned char number_blocks_lo; - unsigned char _r3; - unsigned char block_length_hi; /* block length for blocks in this - desc. */ - unsigned char block_length_med; - unsigned char block_length_lo; - }; - -/* - * MESSAGE CODES - */ - -#define COMMAND_COMPLETE 0x00 -#define EXTENDED_MESSAGE 0x01 -#define EXTENDED_MODIFY_DATA_POINTER 0x00 -#define EXTENDED_SDTR 0x01 -#define EXTENDED_EXTENDED_IDENTIFY 0x02 /* SCSI-I only */ -#define EXTENDED_WDTR 0x03 -#define SAVE_POINTERS 0x02 -#define RESTORE_POINTERS 0x03 -#define DISCONNECT 0x04 -#define INITIATOR_ERROR 0x05 -#define ABORT 0x06 -#define MESSAGE_REJECT 0x07 -#define NOP 0x08 -#define MSG_PARITY_ERROR 0x09 -#define LINKED_CMD_COMPLETE 0x0a -#define LINKED_FLG_CMD_COMPLETE 0x0b -#define BUS_DEVICE_RESET 0x0c - -#define INITIATE_RECOVERY 0x0f /* SCSI-II only */ -#define RELEASE_RECOVERY 0x10 /* SCSI-II only */ - -#define SIMPLE_QUEUE_TAG 0x20 -#define HEAD_OF_QUEUE_TAG 0x21 -#define ORDERED_QUEUE_TAG 0x22 - -/* - * Here are some scsi specific ioctl commands which are sometimes useful. - */ -/* These are a few other constants only used by scsi devices. */ - -#define SCSI_IOCTL_GET_IDLUN 0x5382 - -/* Used to turn on and off tagged queuing for scsi devices. */ - -#define SCSI_IOCTL_TAGGED_ENABLE 0x5383 -#define SCSI_IOCTL_TAGGED_DISABLE 0x5384 - -/* Used to obtain the host number of a device. */ -#define SCSI_IOCTL_PROBE_HOST 0x5385 - -/* Used to get the bus number for a device. */ -#define SCSI_IOCTL_GET_BUS_NUMBER 0x5386 - -#endif /* scsi/scsi.h */ diff --git a/sysdeps/unix/sysv/linux/scsi/scsi_ioctl.h b/sysdeps/unix/sysv/linux/scsi/scsi_ioctl.h deleted file mode 100644 index a746898c2d..0000000000 --- a/sysdeps/unix/sysv/linux/scsi/scsi_ioctl.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SCSI_IOCTL_H -#define _SCSI_IOCTL_H - -/* IOCTLs for SCSI. */ -#define SCSI_IOCTL_SEND_COMMAND 1 /* Send a command to the SCSI host. */ -#define SCSI_IOCTL_TEST_UNIT_READY 2 /* Test if unit is ready. */ -#define SCSI_IOCTL_BENCHMARK_COMMAND 3 -#define SCSI_IOCTL_SYNC 4 /* Request synchronous parameters. */ -#define SCSI_IOCTL_START_UNIT 5 -#define SCSI_IOCTL_STOP_UNIT 6 -#define SCSI_IOCTL_DOORLOCK 0x5380 /* Lock the eject mechanism. */ -#define SCSI_IOCTL_DOORUNLOCK 0x5381 /* Unlock the mechanism. */ - -#endif diff --git a/sysdeps/unix/sysv/linux/scsi/sg.h b/sysdeps/unix/sysv/linux/scsi/sg.h deleted file mode 100644 index 04bbdafc74..0000000000 --- a/sysdeps/unix/sysv/linux/scsi/sg.h +++ /dev/null @@ -1,276 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - History: - Started: Aug 9 by Lawrence Foard (entropy@world.std.com), to allow user - process control of SCSI devices. - Development Sponsored by Killy Corp. NY NY -*/ - -#ifndef _SCSI_SG_H -#define _SCSI_SG_H 1 - -#include -#define __need_size_t -#include - - -/* New interface introduced in the 3.x SG drivers follows */ - -/* Same structure as used by readv() Linux system call. It defines one - scatter-gather element. */ -typedef struct sg_iovec -{ - void * iov_base; /* Starting address */ - size_t iov_len; /* Length in bytes */ -} sg_iovec_t; - - -typedef struct sg_io_hdr -{ - int interface_id; /* [i] 'S' for SCSI generic (required) */ - int dxfer_direction; /* [i] data transfer direction */ - unsigned char cmd_len; /* [i] SCSI command length ( <= 16 bytes) */ - unsigned char mx_sb_len; /* [i] max length to write to sbp */ - unsigned short int iovec_count; /* [i] 0 implies no scatter gather */ - unsigned int dxfer_len; /* [i] byte count of data transfer */ - void * dxferp; /* [i], [*io] points to data transfer memory - or scatter gather list */ - unsigned char * cmdp; /* [i], [*i] points to command to perform */ - unsigned char * sbp; /* [i], [*o] points to sense_buffer memory */ - unsigned int timeout; /* [i] MAX_UINT->no timeout (unit: millisec) */ - unsigned int flags; /* [i] 0 -> default, see SG_FLAG... */ - int pack_id; /* [i->o] unused internally (normally) */ - void * usr_ptr; /* [i->o] unused internally */ - unsigned char status; /* [o] scsi status */ - unsigned char masked_status;/* [o] shifted, masked scsi status */ - unsigned char msg_status; /* [o] messaging level data (optional) */ - unsigned char sb_len_wr; /* [o] byte count actually written to sbp */ - unsigned short int host_status; /* [o] errors from host adapter */ - unsigned short int driver_status;/* [o] errors from software driver */ - int resid; /* [o] dxfer_len - actual_transferred */ - unsigned int duration; /* [o] time taken by cmd (unit: millisec) */ - unsigned int info; /* [o] auxiliary information */ -} sg_io_hdr_t; - - -/* Use negative values to flag difference from original sg_header structure. */ -#define SG_DXFER_NONE -1 /* e.g. a SCSI Test Unit Ready command */ -#define SG_DXFER_TO_DEV -2 /* e.g. a SCSI WRITE command */ -#define SG_DXFER_FROM_DEV -3 /* e.g. a SCSI READ command */ -#define SG_DXFER_TO_FROM_DEV -4 /* treated like SG_DXFER_FROM_DEV with the - additional property than during indirect - IO the user buffer is copied into the - kernel buffers before the transfer */ - - -/* following flag values can be "or"-ed together */ -#define SG_FLAG_DIRECT_IO 1 /* default is indirect IO */ -#define SG_FLAG_LUN_INHIBIT 2 /* default is to put device's lun into */ - /* the 2nd byte of SCSI command */ -#define SG_FLAG_NO_DXFER 0x10000 /* no transfer of kernel buffers to/from */ - /* user space (debug indirect IO) */ - -/* The following 'info' values are "or"-ed together. */ -#define SG_INFO_OK_MASK 0x1 -#define SG_INFO_OK 0x0 /* no sense, host nor driver "noise" */ -#define SG_INFO_CHECK 0x1 /* something abnormal happened */ - -#define SG_INFO_DIRECT_IO_MASK 0x6 -#define SG_INFO_INDIRECT_IO 0x0 /* data xfer via kernel buffers (or no xfer) */ -#define SG_INFO_DIRECT_IO 0x2 /* direct IO requested and performed */ -#define SG_INFO_MIXED_IO 0x4 /* part direct, part indirect IO */ - - -/* Request information about a specific SG device, used by - SG_GET_SCSI_ID ioctl (). */ -struct sg_scsi_id { - /* Host number as in "scsi" where 'n' is one of 0, 1, 2 etc. */ - int host_no; - int channel; - /* SCSI id of target device. */ - int scsi_id; - int lun; - /* TYPE_... defined in . */ - int scsi_type; - /* Host (adapter) maximum commands per lun. */ - short int h_cmd_per_lun; - /* Device (or adapter) maximum queue length. */ - short int d_queue_depth; - /* Unused, set to 0 for now. */ - int unused[2]; -}; - -/* Used by SG_GET_REQUEST_TABLE ioctl(). */ -typedef struct sg_req_info { - char req_state; /* 0 -> not used, 1 -> written, 2 -> ready to read */ - char orphan; /* 0 -> normal request, 1 -> from interruped SG_IO */ - char sg_io_owned; /* 0 -> complete with read(), 1 -> owned by SG_IO */ - char problem; /* 0 -> no problem detected, 1 -> error to report */ - int pack_id; /* pack_id associated with request */ - void * usr_ptr; /* user provided pointer (in new interface) */ - unsigned int duration; /* millisecs elapsed since written (req_state==1) - or request duration (req_state==2) */ - int unused; -} sg_req_info_t; - - -/* IOCTLs: Those ioctls that are relevant to the SG 3.x drivers follow. - [Those that only apply to the SG 2.x drivers are at the end of the file.] - (_GET_s yield result via 'int *' 3rd argument unless otherwise indicated) */ - -#define SG_EMULATED_HOST 0x2203 /* true for emulated host adapter (ATAPI) */ - -/* Used to configure SCSI command transformation layer for ATAPI devices */ -/* Only supported by the ide-scsi driver */ -#define SG_SET_TRANSFORM 0x2204 /* N.B. 3rd arg is not pointer but value: */ - /* 3rd arg = 0 to disable transform, 1 to enable it */ -#define SG_GET_TRANSFORM 0x2205 - -#define SG_SET_RESERVED_SIZE 0x2275 /* request a new reserved buffer size */ -#define SG_GET_RESERVED_SIZE 0x2272 /* actual size of reserved buffer */ - -/* The following ioctl has a 'sg_scsi_id_t *' object as its 3rd argument. */ -#define SG_GET_SCSI_ID 0x2276 /* Yields fd's bus, chan, dev, lun + type */ -/* SCSI id information can also be obtained from SCSI_IOCTL_GET_IDLUN */ - -/* Override host setting and always DMA using low memory ( <16MB on i386) */ -#define SG_SET_FORCE_LOW_DMA 0x2279 /* 0-> use adapter setting, 1-> force */ -#define SG_GET_LOW_DMA 0x227a /* 0-> use all ram for dma; 1-> low dma ram */ - -/* When SG_SET_FORCE_PACK_ID set to 1, pack_id is input to read() which - tries to fetch a packet with a matching pack_id, waits, or returns EAGAIN. - If pack_id is -1 then read oldest waiting. When ...FORCE_PACK_ID set to 0 - then pack_id ignored by read() and oldest readable fetched. */ -#define SG_SET_FORCE_PACK_ID 0x227b -#define SG_GET_PACK_ID 0x227c /* Yields oldest readable pack_id (or -1) */ - -#define SG_GET_NUM_WAITING 0x227d /* Number of commands awaiting read() */ - -/* Yields max scatter gather tablesize allowed by current host adapter */ -#define SG_GET_SG_TABLESIZE 0x227F /* 0 implies can't do scatter gather */ - -#define SG_GET_VERSION_NUM 0x2282 /* Example: version 2.1.34 yields 20134 */ - -/* Returns -EBUSY if occupied. 3rd argument pointer to int (see next) */ -#define SG_SCSI_RESET 0x2284 -/* Associated values that can be given to SG_SCSI_RESET follow */ -#define SG_SCSI_RESET_NOTHING 0 -#define SG_SCSI_RESET_DEVICE 1 -#define SG_SCSI_RESET_BUS 2 -#define SG_SCSI_RESET_HOST 3 - -/* synchronous SCSI command ioctl, (only in version 3 interface) */ -#define SG_IO 0x2285 /* similar effect as write() followed by read() */ - -#define SG_GET_REQUEST_TABLE 0x2286 /* yields table of active requests */ - -/* How to treat EINTR during SG_IO ioctl(), only in SG 3.x series */ -#define SG_SET_KEEP_ORPHAN 0x2287 /* 1 -> hold for read(), 0 -> drop (def) */ -#define SG_GET_KEEP_ORPHAN 0x2288 - - -#define SG_SCATTER_SZ (8 * 4096) /* PAGE_SIZE not available to user */ -/* Largest size (in bytes) a single scatter-gather list element can have. - The value must be a power of 2 and <= (PAGE_SIZE * 32) [131072 bytes on - i386]. The minimum value is PAGE_SIZE. If scatter-gather not supported - by adapter then this value is the largest data block that can be - read/written by a single scsi command. The user can find the value of - PAGE_SIZE by calling getpagesize() defined in unistd.h . */ - -#define SG_DEFAULT_RETRIES 1 - -/* Defaults, commented if they differ from original sg driver */ -#define SG_DEF_FORCE_LOW_DMA 0 /* was 1 -> memory below 16MB on i386 */ -#define SG_DEF_FORCE_PACK_ID 0 -#define SG_DEF_KEEP_ORPHAN 0 -#define SG_DEF_RESERVED_SIZE SG_SCATTER_SZ /* load time option */ - -/* maximum outstanding requests, write() yields EDOM if exceeded */ -#define SG_MAX_QUEUE 16 - -#define SG_BIG_BUFF SG_DEF_RESERVED_SIZE /* for backward compatibility */ - -/* Alternate style type names, "..._t" variants preferred */ -typedef struct sg_io_hdr Sg_io_hdr; -typedef struct sg_io_vec Sg_io_vec; -typedef struct sg_scsi_id Sg_scsi_id; -typedef struct sg_req_info Sg_req_info; - - -/* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ -/* The older SG interface based on the 'sg_header' structure follows. */ -/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */ - -#define SG_MAX_SENSE 16 /* this only applies to the sg_header interface */ - -struct sg_header - { - /* Length of incoming packet (including header). */ - int pack_len; - /* Maximal length of expected reply. */ - int reply_len; - /* Id number of packet. */ - int pack_id; - /* 0==ok, otherwise error number. */ - int result; - /* Force 12 byte command length for group 6 & 7 commands. */ - unsigned int twelve_byte:1; - /* SCSI status from target. */ - unsigned int target_status:5; - /* Host status (see "DID" codes). */ - unsigned int host_status:8; - /* Driver status+suggestion. */ - unsigned int driver_status:8; - /* Unused. */ - unsigned int other_flags:10; - /* Output in 3 cases: - when target_status is CHECK_CONDITION or - when target_status is COMMAND_TERMINATED or - when (driver_status & DRIVER_SENSE) is true. */ - unsigned char sense_buffer[SG_MAX_SENSE]; - }; - - -/* IOCTLs: The following are not required (or ignored) when the sg_io_hdr_t - interface is used. They are kept for backward compatibility with - the original and version 2 drivers. */ - -#define SG_SET_TIMEOUT 0x2201 /* Set timeout; *(int *)arg==timeout. */ -#define SG_GET_TIMEOUT 0x2202 /* Get timeout; return timeout. */ - -/* Get/set command queuing state per fd (default is SG_DEF_COMMAND_Q). */ -#define SG_GET_COMMAND_Q 0x2270 /* Yields 0 (queuing off) or 1 (on). */ -#define SG_SET_COMMAND_Q 0x2271 /* Change queuing state with 0 or 1. */ - -/* Turn on error sense trace (1..8), dump this device to log/console (9) - or dump all sg device states ( >9 ) to log/console. */ -#define SG_SET_DEBUG 0x227e /* 0 -> turn off debug */ - -#define SG_NEXT_CMD_LEN 0x2283 /* Override SCSI command length with given - number on the next write() on this file - descriptor. */ - -/* Defaults, commented if they differ from original sg driver */ -#define SG_DEFAULT_TIMEOUT (60*HZ) /* HZ == 'jiffies in 1 second' */ -#define SG_DEF_COMMAND_Q 0 /* command queuing is always on when - the new interface is used */ -#define SG_DEF_UNDERRUN_FLAG 0 - - -#endif /* scsi/sg.h */ diff --git a/sysdeps/unix/sysv/linux/segfault.c b/sysdeps/unix/sysv/linux/segfault.c deleted file mode 100644 index a417df9c41..0000000000 --- a/sysdeps/unix/sysv/linux/segfault.c +++ /dev/null @@ -1,2 +0,0 @@ -#define HAVE_PROC_SELF 1 -#include diff --git a/sysdeps/unix/sysv/linux/select.c b/sysdeps/unix/sysv/linux/select.c deleted file mode 100644 index be4a456a51..0000000000 --- a/sysdeps/unix/sysv/linux/select.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Linux select implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include - -/* Check the first NFDS descriptors each in READFDS (if not NULL) for read - readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS - (if not NULL) for exceptional conditions. If TIMEOUT is not NULL, time out - after waiting the interval specified therein. Returns the number of ready - descriptors, or -1 for errors. */ - -#ifdef __NR__newselect -# undef __NR_select -# define __NR_select __NR__newselect -#endif - -int -__select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, - struct timeval *timeout) -{ -#ifdef __NR_select - return SYSCALL_CANCEL (select, nfds, readfds, writefds, exceptfds, - timeout); -#else - int result; - struct timespec ts, *tsp = NULL; - - if (timeout) - { - TIMEVAL_TO_TIMESPEC (timeout, &ts); - tsp = &ts; - } - - result = SYSCALL_CANCEL (pselect6, nfds, readfds, writefds, exceptfds, tsp, - NULL); - - if (timeout) - { - /* Linux by default will update the timeout after a pselect6 syscall - (though the pselect() glibc call suppresses this behavior). - Since select() on Linux has the same behavior as the pselect6 - syscall, we update the timeout here. */ - TIMESPEC_TO_TIMEVAL (timeout, &ts); - } - - return result; -#endif -} -libc_hidden_def (__select) - -weak_alias (__select, select) -weak_alias (__select, __libc_select) diff --git a/sysdeps/unix/sysv/linux/semctl.c b/sysdeps/unix/sysv/linux/semctl.c deleted file mode 100644 index b4bd7d3ca7..0000000000 --- a/sysdeps/unix/sysv/linux/semctl.c +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* Define a `union semun' suitable for Linux here. */ -union semun -{ - int val; /* value for SETVAL */ - struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */ - unsigned short int *array; /* array for GETALL & SETALL */ - struct seminfo *__buf; /* buffer for IPC_INFO */ -}; - -#ifndef DEFAULT_VERSION -# define DEFAULT_VERSION GLIBC_2_2 -#endif - -int -__new_semctl (int semid, int semnum, int cmd, ...) -{ - union semun arg = { 0 }; - va_list ap; - - /* Get the argument only if required. */ - switch (cmd) - { - case SETVAL: /* arg.val */ - case GETALL: /* arg.array */ - case SETALL: - case IPC_STAT: /* arg.buf */ - case IPC_SET: - case SEM_STAT: - case IPC_INFO: /* arg.__buf */ - case SEM_INFO: - va_start (ap, cmd); - arg = va_arg (ap, union semun); - va_end (ap); - break; - } - -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return INLINE_SYSCALL_CALL (semctl, semid, semnum, cmd | __IPC_64, - arg.array); -#else - return INLINE_SYSCALL_CALL (ipc, IPCOP_semctl, semid, semnum, cmd | __IPC_64, - SEMCTL_ARG_ADDRESS (arg)); -#endif -} -versioned_symbol (libc, __new_semctl, semctl, DEFAULT_VERSION); - - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2) -/* Since semctl use a variadic argument for semid_ds there is not need to - define and tie the compatibility symbol to the old 'union semun' - definition. */ -int -attribute_compat_text_section -__old_semctl (int semid, int semnum, int cmd, ...) -{ - union semun arg = { 0 }; - va_list ap; - - /* Get the argument only if required. */ - switch (cmd) - { - case SETVAL: /* arg.val */ - case GETALL: /* arg.array */ - case SETALL: - case IPC_STAT: /* arg.buf */ - case IPC_SET: - case SEM_STAT: - case IPC_INFO: /* arg.__buf */ - case SEM_INFO: - va_start (ap, cmd); - arg = va_arg (ap, union semun); - va_end (ap); - break; - } - -# ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return INLINE_SYSCALL_CALL (semctl, semid, semnum, cmd, arg.array); -# else - return INLINE_SYSCALL_CALL (ipc, IPCOP_semctl, semid, semnum, cmd, - SEMCTL_ARG_ADDRESS (arg)); -# endif -} -compat_symbol (libc, __old_semctl, semctl, GLIBC_2_0); -#endif diff --git a/sysdeps/unix/sysv/linux/semget.c b/sysdeps/unix/sysv/linux/semget.c deleted file mode 100644 index f269da2618..0000000000 --- a/sysdeps/unix/sysv/linux/semget.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Return identifier for array of NSEMS semaphores associated with - KEY. */ - -int -semget (key_t key, int nsems, int semflg) -{ -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return INLINE_SYSCALL_CALL (semget, key, nsems, semflg); -#else - return INLINE_SYSCALL_CALL (ipc, IPCOP_semget, key, nsems, semflg, NULL); -#endif -} diff --git a/sysdeps/unix/sysv/linux/semop.c b/sysdeps/unix/sysv/linux/semop.c deleted file mode 100644 index 628a7d871f..0000000000 --- a/sysdeps/unix/sysv/linux/semop.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Perform user-defined atomical operation of array of semaphores. */ - -int -semop (int semid, struct sembuf *sops, size_t nsops) -{ -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return INLINE_SYSCALL_CALL (semop, semid, sops, nsops); -#else - return INLINE_SYSCALL_CALL (ipc, IPCOP_semop, semid, nsops, 0, sops); -#endif -} diff --git a/sysdeps/unix/sysv/linux/semtimedop.c b/sysdeps/unix/sysv/linux/semtimedop.c deleted file mode 100644 index 5b7f6db34d..0000000000 --- a/sysdeps/unix/sysv/linux/semtimedop.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Perform user-defined atomical operation of array of semaphores. */ - -int -semtimedop (int semid, struct sembuf *sops, size_t nsops, - const struct timespec *timeout) -{ -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return INLINE_SYSCALL_CALL (semtimedop, semid, sops, nsops, timeout); -#else - return INLINE_SYSCALL_CALL (ipc, IPCOP_semtimedop, semid, nsops, 0, sops, - timeout); -#endif -} diff --git a/sysdeps/unix/sysv/linux/send.c b/sysdeps/unix/sysv/linux/send.c deleted file mode 100644 index c2e3b37b17..0000000000 --- a/sysdeps/unix/sysv/linux/send.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -ssize_t -__libc_send (int fd, const void *buf, size_t len, int flags) -{ -#ifdef __ASSUME_SEND_SYSCALL - return SYSCALL_CANCEL (send, fd, buf, len, flags); -#elif defined __ASSUME_SENDTO_SYSCALL - return SYSCALL_CANCEL (sendto, fd, buf, len, flags, NULL, 0); -#else - return SOCKETCALL_CANCEL (send, fd, buf, len, flags); -#endif -} -weak_alias (__libc_send, send) -weak_alias (__libc_send, __send) -#ifdef HAVE_INTERNAL_SEND_SYMBOL -libc_hidden_def (__send) -#endif diff --git a/sysdeps/unix/sysv/linux/sendmmsg.c b/sysdeps/unix/sysv/linux/sendmmsg.c deleted file mode 100644 index e0c2556309..0000000000 --- a/sysdeps/unix/sysv/linux/sendmmsg.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include -#include -#include -#include - -int -__sendmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags) -{ -#ifdef __ASSUME_SENDMMSG_SYSCALL - return SYSCALL_CANCEL (sendmmsg, fd, vmessages, vlen, flags); -#else - return SOCKETCALL_CANCEL (sendmmsg, fd, vmessages, vlen, flags); -#endif -} -libc_hidden_def (__sendmmsg) -weak_alias (__sendmmsg, sendmmsg) diff --git a/sysdeps/unix/sysv/linux/sendmsg.c b/sysdeps/unix/sysv/linux/sendmsg.c deleted file mode 100644 index 01cc58ced0..0000000000 --- a/sysdeps/unix/sysv/linux/sendmsg.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Compatibility implementation of sendmsg. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -ssize_t -__libc_sendmsg (int fd, const struct msghdr *msg, int flags) -{ -# ifdef __ASSUME_SENDMSG_SYSCALL - return SYSCALL_CANCEL (sendmsg, fd, msg, flags); -# else - return SOCKETCALL_CANCEL (sendmsg, fd, msg, flags); -# endif -} -weak_alias (__libc_sendmsg, sendmsg) -weak_alias (__libc_sendmsg, __sendmsg) diff --git a/sysdeps/unix/sysv/linux/sendto.c b/sysdeps/unix/sysv/linux/sendto.c deleted file mode 100644 index be1bc6fd99..0000000000 --- a/sysdeps/unix/sysv/linux/sendto.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -ssize_t -__libc_sendto (int fd, const void *buf, size_t len, int flags, - __CONST_SOCKADDR_ARG addr, socklen_t addrlen) -{ -#ifdef __ASSUME_SENDTO_SYSCALL - return SYSCALL_CANCEL (sendto, fd, buf, len, flags, addr.__sockaddr__, - addrlen); -#else - return SOCKETCALL_CANCEL (sendto, fd, buf, len, flags, addr.__sockaddr__, - addrlen); -#endif -} -weak_alias (__libc_sendto, sendto) -weak_alias (__libc_sendto, __sendto) diff --git a/sysdeps/unix/sysv/linux/setegid.c b/sysdeps/unix/sysv/linux/setegid.c deleted file mode 100644 index 7d08027762..0000000000 --- a/sysdeps/unix/sysv/linux/setegid.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -int -setegid (gid_t gid) -{ - int result; - - if (gid == (gid_t) ~0) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - -#ifdef __NR_setresgid32 - result = INLINE_SETXID_SYSCALL (setresgid32, 3, -1, gid, -1); -#else - result = INLINE_SETXID_SYSCALL (setresgid, 3, -1, gid, -1); -#endif - - return result; -} -#ifndef setegid -libc_hidden_def (setegid) -#endif diff --git a/sysdeps/unix/sysv/linux/seteuid.c b/sysdeps/unix/sysv/linux/seteuid.c deleted file mode 100644 index ece0f45ce5..0000000000 --- a/sysdeps/unix/sysv/linux/seteuid.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -int -seteuid (uid_t uid) -{ - int result; - - if (uid == (uid_t) ~0) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - -#ifdef __NR_setresuid32 - result = INLINE_SETXID_SYSCALL (setresuid32, 3, -1, uid, -1); -#else - result = INLINE_SETXID_SYSCALL (setresuid, 3, -1, uid, -1); -#endif - - return result; -} -#ifndef seteuid -libc_hidden_def (seteuid) -#endif diff --git a/sysdeps/unix/sysv/linux/setgid.c b/sysdeps/unix/sysv/linux/setgid.c deleted file mode 100644 index 59aaa10153..0000000000 --- a/sysdeps/unix/sysv/linux/setgid.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -int -__setgid (gid_t gid) -{ -#ifdef __NR_setgid32 - return INLINE_SETXID_SYSCALL (setgid32, 1, gid); -#else - return INLINE_SETXID_SYSCALL (setgid, 1, gid); -#endif -} -#ifndef __setgid -weak_alias (__setgid, setgid) -#endif diff --git a/sysdeps/unix/sysv/linux/setgroups.c b/sysdeps/unix/sysv/linux/setgroups.c deleted file mode 100644 index c556ebbbfe..0000000000 --- a/sysdeps/unix/sysv/linux/setgroups.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -/* Set the group set for the current user to GROUPS (N of them). For - Linux we must convert the array of groups into the format that the - kernel expects. */ -int -setgroups (size_t n, const gid_t *groups) -{ -#ifdef __NR_setgroups32 - return INLINE_SETXID_SYSCALL (setgroups32, 2, n, groups); -#else - return INLINE_SETXID_SYSCALL (setgroups, 2, n, groups); -#endif -} -libc_hidden_def (setgroups) diff --git a/sysdeps/unix/sysv/linux/sethostid.c b/sysdeps/unix/sysv/linux/sethostid.c deleted file mode 100644 index eb71b74a1d..0000000000 --- a/sysdeps/unix/sysv/linux/sethostid.c +++ /dev/null @@ -1,2 +0,0 @@ -#define SET_PROCEDURE 1 -#include "gethostid.c" diff --git a/sysdeps/unix/sysv/linux/setipv4sourcefilter.c b/sysdeps/unix/sysv/linux/setipv4sourcefilter.c deleted file mode 100644 index c4370f90ee..0000000000 --- a/sysdeps/unix/sysv/linux/setipv4sourcefilter.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Set IPv4 source filter. Linux version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2004. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - - -int -setipv4sourcefilter (int s, struct in_addr interface, struct in_addr group, - uint32_t fmode, uint32_t numsrc, - const struct in_addr *slist) -{ - /* We have to create an struct ip_msfilter object which we can pass - to the kernel. */ - size_t needed = IP_MSFILTER_SIZE (numsrc); - int use_alloca = __libc_use_alloca (needed); - - struct ip_msfilter *imsf; - if (use_alloca) - imsf = (struct ip_msfilter *) alloca (needed); - else - { - imsf = (struct ip_msfilter *) malloc (needed); - if (imsf == NULL) - return -1; - } - - imsf->imsf_multiaddr = group; - imsf->imsf_interface = interface; - imsf->imsf_fmode = fmode; - imsf->imsf_numsrc = numsrc; - memcpy (imsf->imsf_slist, slist, numsrc * sizeof (struct in_addr)); - - int result = __setsockopt (s, SOL_IP, IP_MSFILTER, imsf, needed); - - if (! use_alloca) - { - int save_errno = errno; - free (imsf); - __set_errno (save_errno); - } - - return result; -} diff --git a/sysdeps/unix/sysv/linux/setregid.c b/sysdeps/unix/sysv/linux/setregid.c deleted file mode 100644 index b50842b7c0..0000000000 --- a/sysdeps/unix/sysv/linux/setregid.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -int -__setregid (gid_t rgid, gid_t egid) -{ -#ifdef __NR_setregid32 - return INLINE_SETXID_SYSCALL (setregid32, 2, rgid, egid); -#else - return INLINE_SETXID_SYSCALL (setregid, 2, rgid, egid); -#endif -} -#ifndef __setregid -weak_alias (__setregid, setregid) -#endif diff --git a/sysdeps/unix/sysv/linux/setresgid.c b/sysdeps/unix/sysv/linux/setresgid.c deleted file mode 100644 index 1e9a9b7ec6..0000000000 --- a/sysdeps/unix/sysv/linux/setresgid.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -int -__setresgid (gid_t rgid, gid_t egid, gid_t sgid) -{ -#ifdef __NR_setresgid32 - return INLINE_SETXID_SYSCALL (setresgid32, 3, rgid, egid, sgid); -#else - return INLINE_SETXID_SYSCALL (setresgid, 3, rgid, egid, sgid); -#endif -} -libc_hidden_def (__setresgid) -#ifndef __setresgid -weak_alias (__setresgid, setresgid) -#endif diff --git a/sysdeps/unix/sysv/linux/setresuid.c b/sysdeps/unix/sysv/linux/setresuid.c deleted file mode 100644 index 3d3faa9e39..0000000000 --- a/sysdeps/unix/sysv/linux/setresuid.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -int -__setresuid (uid_t ruid, uid_t euid, uid_t suid) -{ -#ifdef __NR_setresuid32 - return INLINE_SETXID_SYSCALL (setresuid32, 3, ruid, euid, suid); -#else - return INLINE_SETXID_SYSCALL (setresuid, 3, ruid, euid, suid); -#endif -} -libc_hidden_def (__setresuid) -#ifndef __setresuid -weak_alias (__setresuid, setresuid) -#endif diff --git a/sysdeps/unix/sysv/linux/setreuid.c b/sysdeps/unix/sysv/linux/setreuid.c deleted file mode 100644 index 5cc68ae28d..0000000000 --- a/sysdeps/unix/sysv/linux/setreuid.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -int -__setreuid (uid_t ruid, uid_t euid) -{ -#ifdef __NR_setreuid32 - return INLINE_SETXID_SYSCALL (setreuid32, 2, ruid, euid); -#else - return INLINE_SETXID_SYSCALL (setreuid, 2, ruid, euid); -#endif -} -#ifndef __setreuid -weak_alias (__setreuid, setreuid) -#endif diff --git a/sysdeps/unix/sysv/linux/setrlimit.c b/sysdeps/unix/sysv/linux/setrlimit.c deleted file mode 100644 index 8773c78236..0000000000 --- a/sysdeps/unix/sysv/linux/setrlimit.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Linux setrlimit implementation (32 bits off_t). - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#if !__RLIM_T_MATCHES_RLIM64_T - -/* The compatibility symbol is meant to match the old __NR_getrlimit syscall - (with broken RLIM_INFINITY definition). It should be provided iff - __NR_getrlimit and __NR_ugetrlimit are both defined. */ -# ifndef __NR_ugetrlimit -# undef SHLIB_COMPAT -# define SHLIB_COMPAT(a, b, c) 0 -# endif - -int -__setrlimit (enum __rlimit_resource resource, const struct rlimit *rlim) -{ - struct rlimit64 rlim64; - - if (rlim->rlim_cur == RLIM_INFINITY) - rlim64.rlim_cur = RLIM64_INFINITY; - else - rlim64.rlim_cur = rlim->rlim_cur; - if (rlim->rlim_max == RLIM_INFINITY) - rlim64.rlim_max = RLIM64_INFINITY; - else - rlim64.rlim_max = rlim->rlim_max; - - return INLINE_SYSCALL_CALL (prlimit64, 0, resource, &rlim64, NULL); -} - -# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2) -strong_alias (__setrlimit, __setrlimit_1) -compat_symbol (libc, __setrlimit, setrlimit, GLIBC_2_0); -versioned_symbol (libc, __setrlimit_1, setrlimit, GLIBC_2_2); -# else -weak_alias (__setrlimit, setrlimit) -# endif - -#endif /* __RLIM_T_MATCHES_RLIM64_T */ diff --git a/sysdeps/unix/sysv/linux/setrlimit64.c b/sysdeps/unix/sysv/linux/setrlimit64.c deleted file mode 100644 index db1960fc18..0000000000 --- a/sysdeps/unix/sysv/linux/setrlimit64.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Linux setrlimit64 implementation (64 bits off_t). - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Add this redirection so the strong_alias for __RLIM_T_MATCHES_RLIM64_T - linking setlimit64 to {__}setrlimit does not throw a type error. */ -#undef settrlimit -#undef __sttrlimit -#define setrlimit setrlimit_redirect -#define __setrlimit __setrlimit_redirect -#include -#undef setrlimit -#undef __setrlimit - -/* Set the soft and hard limits for RESOURCE to *RLIMITS. - Only the super-user can increase hard limits. - Return 0 if successful, -1 if not (and sets errno). */ -int -__setrlimit64 (enum __rlimit_resource resource, const struct rlimit64 *rlimits) -{ - return INLINE_SYSCALL_CALL (prlimit64, 0, resource, rlimits, NULL); -} -weak_alias (__setrlimit64, setrlimit64) - -#if __RLIM_T_MATCHES_RLIM64_T -strong_alias (__setrlimit64, __setrlimit) -weak_alias (__setrlimit64, setrlimit) -#endif diff --git a/sysdeps/unix/sysv/linux/setsockopt.c b/sysdeps/unix/sysv/linux/setsockopt.c deleted file mode 100644 index 9252305d59..0000000000 --- a/sysdeps/unix/sysv/linux/setsockopt.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include -#include - -int -setsockopt (int fd, int level, int optname, const void *optval, socklen_t len) -{ -#ifdef __ASSUME_SETSOCKOPT_SYSCALL - return INLINE_SYSCALL (setsockopt, 5, fd, level, optname, optval, len); -#else - return SOCKETCALL (setsockopt, fd, level, optname, optval, len); -#endif -} -weak_alias (setsockopt, __setsockopt) diff --git a/sysdeps/unix/sysv/linux/setsourcefilter.c b/sysdeps/unix/sysv/linux/setsourcefilter.c deleted file mode 100644 index b4160ff4d8..0000000000 --- a/sysdeps/unix/sysv/linux/setsourcefilter.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Set source filter. Linux version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2004. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - - -/* Defined in getsourcefilter.c. */ -extern int __get_sol (int af, socklen_t len); - - -int -setsourcefilter (int s, uint32_t interface, const struct sockaddr *group, - socklen_t grouplen, uint32_t fmode, uint32_t numsrc, - const struct sockaddr_storage *slist) -{ - /* We have to create an struct ip_msfilter object which we can pass - to the kernel. */ - size_t needed = GROUP_FILTER_SIZE (numsrc); - int use_alloca = __libc_use_alloca (needed); - - struct group_filter *gf; - if (use_alloca) - gf = (struct group_filter *) alloca (needed); - else - { - gf = (struct group_filter *) malloc (needed); - if (gf == NULL) - return -1; - } - - gf->gf_interface = interface; - memcpy (&gf->gf_group, group, grouplen); - gf->gf_fmode = fmode; - gf->gf_numsrc = numsrc; - memcpy (gf->gf_slist, slist, numsrc * sizeof (struct sockaddr_storage)); - - /* We need to provide the appropriate socket level value. */ - int result; - int sol = __get_sol (group->sa_family, grouplen); - if (sol == -1) - { - __set_errno (EINVAL); - result = -1; - } - else - result = __setsockopt (s, sol, MCAST_MSFILTER, gf, needed); - - if (! use_alloca) - { - int save_errno = errno; - free (gf); - __set_errno (save_errno); - } - - return result; -} diff --git a/sysdeps/unix/sysv/linux/setuid.c b/sysdeps/unix/sysv/linux/setuid.c deleted file mode 100644 index 2d0775279f..0000000000 --- a/sysdeps/unix/sysv/linux/setuid.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__setuid (uid_t uid) -{ -#ifdef __NR_setuid32 - return INLINE_SETXID_SYSCALL (setuid32, 1, uid); -#else - return INLINE_SETXID_SYSCALL (setuid, 1, uid); -#endif -} -#ifndef __setuid -weak_alias (__setuid, setuid) -#endif diff --git a/sysdeps/unix/sysv/linux/sh/Implies b/sysdeps/unix/sysv/linux/sh/Implies deleted file mode 100644 index c15a97e222..0000000000 --- a/sysdeps/unix/sysv/linux/sh/Implies +++ /dev/null @@ -1 +0,0 @@ -sh/nptl diff --git a/sysdeps/unix/sysv/linux/sh/Makefile b/sysdeps/unix/sysv/linux/sh/Makefile deleted file mode 100644 index dd3b382ac1..0000000000 --- a/sysdeps/unix/sysv/linux/sh/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -ifeq ($(subdir),io) -sysdep_routines += pipe -endif - -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext_i.sym -endif - -ifeq ($(subdir),misc) -gen-as-const-headers += sigaltstack-offsets.sym -endif - -ifeq ($(subdir),math) -# The libm.so link can't find __fpscr_values -libm.so-no-z-defs = yes -endif diff --git a/sysdeps/unix/sysv/linux/sh/Versions b/sysdeps/unix/sysv/linux/sh/Versions deleted file mode 100644 index e0938c4165..0000000000 --- a/sysdeps/unix/sysv/linux/sh/Versions +++ /dev/null @@ -1,33 +0,0 @@ -libc { - GLIBC_2.2 { - # functions used in other libraries - __xstat64; __fxstat64; __lxstat64; - - # a* - alphasort64; - - # g* - glob64; - - # New rlimit interface - getrlimit; setrlimit; getrlimit64; - - # r* - readdir64; readdir64_r; - - # s* - scandir64; - - # v* - versionsort64; - } - GLIBC_2.3.3 { - posix_fadvise64; posix_fallocate64; - } - GLIBC_2.11 { - fallocate64; - } - GLIBC_2.16 { - fanotify_mark; - } -} diff --git a/sysdeps/unix/sysv/linux/sh/____longjmp_chk.S b/sysdeps/unix/sysv/linux/sh/____longjmp_chk.S deleted file mode 100644 index 386d7038a5..0000000000 --- a/sysdeps/unix/sysv/linux/sh/____longjmp_chk.S +++ /dev/null @@ -1,122 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - .section .rodata.str1.1,"aMS",@progbits,1 - .type longjmp_msg,@object -longjmp_msg: - .string "longjmp causes uninitialized stack frame" - .size longjmp_msg, .-longjmp_msg - .text - -#define __longjmp ____longjmp_chk - -#ifdef PIC -# define CALL_FAIL \ - mov.l .Lfail, r1; \ - mov.l .Lstr, r4; \ - mov.l r12, @-r15; \ - cfi_remember_state; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (r12, 0); \ - mova .Lgot, r0; \ - mov.l .Lgot, r12; \ - add r0, r12; \ - sts.l pr, @-r15; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (pr, 0); \ - bsrf r1; \ - add r12, r4; \ -.Lfail0: \ - /* Unreachable. */ \ - .align 2; \ -.Lgot: \ - .long _GLOBAL_OFFSET_TABLE_; \ -.Lstr: \ - .long longjmp_msg@GOTOFF; \ -.Lfail: \ - .long __GI___fortify_fail@PLT-(.Lfail0-.); \ - cfi_restore_state; -#else -# define CALL_FAIL \ - mov.l .Lfail, r1; \ - mov.l .Lstr, r4; \ - sts.l pr, @-r15; \ - cfi_remember_state; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (pr, 0); \ - jsr @r1; \ - nop; \ - /* Unreachable. */ \ - .align 2; \ -.Lstr: \ - .long longjmp_msg; \ -.Lfail: \ - .long __fortify_fail; \ - cfi_restore_state; -#endif - -#define CHECK_SP(reg) \ - /* Jumping to a higher-address frame is always allowed. */ \ - cmp/hs r15, reg; \ - bt .Lok; \ - \ - mov.l r0, @-r15; /* The return value is already in here. */ \ - cfi_adjust_cfa_offset (4); \ - mov.l r1, @-r15; /* PTR_DEMANGLE helper. */ \ - cfi_adjust_cfa_offset (4); \ - mov.l r2, @-r15; /* The new SP value is already in here. */ \ - cfi_adjust_cfa_offset (4); \ - mov.l r4, @-r15; /* We'll still need this one. */ \ - cfi_adjust_cfa_offset (4); \ - add #-sizeSS, r15; \ - cfi_adjust_cfa_offset (sizeSS); \ - mov #0, r4; \ - mov r15, r5; \ - DO_CALL (sigaltstack, 2); \ - /* Without working sigaltstack we cannot perform the test. */ \ - tst r0, r0; \ - bf .Lok2; \ - mov.l @(oSS_FLAGS, r15), r0; \ - tst #SS_ONSTACK, r0; \ - bt .Lcall_fail; \ - mov.l @(oSS_SIZE, r15), r2; \ - mov.l @(oSS_SP, r15), r1; \ - add r2, r1; \ - sub r8, r1; \ - cmp/hi r1, r2; \ - bf .Lok2; \ -.Lcall_fail: \ - CALL_FAIL \ - \ -.Lok2: \ - add #sizeSS, r15; \ - cfi_adjust_cfa_offset (-sizeSS); \ - mov.l @r15+, r4; \ - cfi_adjust_cfa_offset (-4); \ - mov.l @r15+, r2; \ - cfi_adjust_cfa_offset (-4); \ - mov.l @r15+, r1; \ - cfi_adjust_cfa_offset (-4); \ - mov.l @r15+, r0; \ - cfi_adjust_cfa_offset (-4); \ -.Lok: - -#include <__longjmp.S> diff --git a/sysdeps/unix/sysv/linux/sh/arch-fork.h b/sysdeps/unix/sysv/linux/sh/arch-fork.h deleted file mode 100644 index ca42758989..0000000000 --- a/sysdeps/unix/sysv/linux/sh/arch-fork.h +++ /dev/null @@ -1,28 +0,0 @@ -/* ARCH_FORK definition for Linux fork implementation. SH version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* TLS pointer argument is passed as the 5-th argument. */ -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 5, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0, \ - NULL, &THREAD_SELF->tid, NULL) diff --git a/sysdeps/unix/sysv/linux/sh/atomic-machine.h b/sysdeps/unix/sysv/linux/sh/atomic-machine.h deleted file mode 100644 index 5a7e953ac4..0000000000 --- a/sysdeps/unix/sysv/linux/sh/atomic-machine.h +++ /dev/null @@ -1,425 +0,0 @@ -/* Atomic operations used inside libc. Linux/SH version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int16_t atomic16_t; -typedef uint16_t uatomic16_t; -typedef int_fast16_t atomic_fast16_t; -typedef uint_fast16_t uatomic_fast16_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#define __HAVE_64B_ATOMICS 0 -#define USE_ATOMIC_COMPILER_BUILTINS 0 - -/* XXX Is this actually correct? */ -#define ATOMIC_EXCHANGE_USES_CAS 1 - -/* SH kernel has implemented a gUSA ("g" User Space Atomicity) support - for the user space atomicity. The atomicity macros use this scheme. - - Reference: - Niibe Yutaka, "gUSA: Simple and Efficient User Space Atomicity - Emulation with Little Kernel Modification", Linux Conference 2002, - Japan. http://lc.linux.or.jp/lc2002/papers/niibe0919h.pdf (in - Japanese). - - B.N. Bershad, D. Redell, and J. Ellis, "Fast Mutual Exclusion for - Uniprocessors", Proceedings of the Fifth Architectural Support for - Programming Languages and Operating Systems (ASPLOS), pp. 223-233, - October 1992. http://www.cs.washington.edu/homes/bershad/Papers/Rcs.ps - - SuperH ABI: - r15: -(size of atomic instruction sequence) < 0 - r0: end point - r1: saved stack pointer -*/ - -#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \ - ({ __typeof (*(mem)) __result; \ - __asm __volatile ("\ - mova 1f,r0\n\ - .align 2\n\ - mov r15,r1\n\ - mov #(0f-1f),r15\n\ - 0: mov.b @%1,%0\n\ - cmp/eq %0,%3\n\ - bf 1f\n\ - mov.b %2,@%1\n\ - 1: mov r1,r15"\ - : "=&r" (__result) : "u" (mem), "u" (newval), "u" (oldval) \ - : "r0", "r1", "t", "memory"); \ - __result; }) - -#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \ - ({ __typeof (*(mem)) __result; \ - __asm __volatile ("\ - mova 1f,r0\n\ - mov r15,r1\n\ - .align 2\n\ - mov #(0f-1f),r15\n\ - mov #-8,r15\n\ - 0: mov.w @%1,%0\n\ - cmp/eq %0,%3\n\ - bf 1f\n\ - mov.w %2,@%1\n\ - 1: mov r1,r15"\ - : "=&r" (__result) : "u" (mem), "u" (newval), "u" (oldval) \ - : "r0", "r1", "t", "memory"); \ - __result; }) - -#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - ({ __typeof (*(mem)) __result; \ - __asm __volatile ("\ - mova 1f,r0\n\ - .align 2\n\ - mov r15,r1\n\ - mov #(0f-1f),r15\n\ - 0: mov.l @%1,%0\n\ - cmp/eq %0,%3\n\ - bf 1f\n\ - mov.l %2,@%1\n\ - 1: mov r1,r15"\ - : "=&r" (__result) : "u" (mem), "u" (newval), "u" (oldval) \ - : "r0", "r1", "t", "memory"); \ - __result; }) - -/* XXX We do not really need 64-bit compare-and-exchange. At least - not in the moment. Using it would mean causing portability - problems since not many other 32-bit architectures have support for - such an operation. So don't define any code for now. */ - -# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) - -#define atomic_exchange_and_add(mem, value) \ - ({ __typeof (*(mem)) __result, __tmp, __value = (value); \ - if (sizeof (*(mem)) == 1) \ - __asm __volatile ("\ - mova 1f,r0\n\ - .align 2\n\ - mov r15,r1\n\ - mov #(0f-1f),r15\n\ - 0: mov.b @%2,%0\n\ - mov %1,r2\n\ - add %0,r2\n\ - mov.b r2,@%2\n\ - 1: mov r1,r15"\ - : "=&r" (__result), "=&r" (__tmp) : "u" (mem), "1" (__value) \ - : "r0", "r1", "r2", "memory"); \ - else if (sizeof (*(mem)) == 2) \ - __asm __volatile ("\ - mova 1f,r0\n\ - .align 2\n\ - mov r15,r1\n\ - mov #(0f-1f),r15\n\ - 0: mov.w @%2,%0\n\ - mov %1,r2\n\ - add %0,r2\n\ - mov.w r2,@%2\n\ - 1: mov r1,r15"\ - : "=&r" (__result), "=&r" (__tmp) : "u" (mem), "1" (__value) \ - : "r0", "r1", "r2", "memory"); \ - else if (sizeof (*(mem)) == 4) \ - __asm __volatile ("\ - mova 1f,r0\n\ - .align 2\n\ - mov r15,r1\n\ - mov #(0f-1f),r15\n\ - 0: mov.l @%2,%0\n\ - mov %1,r2\n\ - add %0,r2\n\ - mov.l r2,@%2\n\ - 1: mov r1,r15"\ - : "=&r" (__result), "=&r" (__tmp) : "u" (mem), "1" (__value) \ - : "r0", "r1", "r2", "memory"); \ - else \ - { \ - __typeof (mem) memp = (mem); \ - do \ - __result = *memp; \ - while (__arch_compare_and_exchange_val_64_acq \ - (memp, __result + __value, __result) == __result); \ - (void) __value; \ - } \ - __result; }) - -#define atomic_add(mem, value) \ - (void) ({ __typeof (*(mem)) __tmp, __value = (value); \ - if (sizeof (*(mem)) == 1) \ - __asm __volatile ("\ - mova 1f,r0\n\ - mov r15,r1\n\ - .align 2\n\ - mov #(0f-1f),r15\n\ - 0: mov.b @%1,r2\n\ - add %0,r2\n\ - mov.b r2,@%1\n\ - 1: mov r1,r15"\ - : "=&r" (__tmp) : "u" (mem), "0" (__value) \ - : "r0", "r1", "r2", "memory"); \ - else if (sizeof (*(mem)) == 2) \ - __asm __volatile ("\ - mova 1f,r0\n\ - mov r15,r1\n\ - .align 2\n\ - mov #(0f-1f),r15\n\ - 0: mov.w @%1,r2\n\ - add %0,r2\n\ - mov.w r2,@%1\n\ - 1: mov r1,r15"\ - : "=&r" (__tmp) : "u" (mem), "0" (__value) \ - : "r0", "r1", "r2", "memory"); \ - else if (sizeof (*(mem)) == 4) \ - __asm __volatile ("\ - mova 1f,r0\n\ - mov r15,r1\n\ - .align 2\n\ - mov #(0f-1f),r15\n\ - 0: mov.l @%1,r2\n\ - add %0,r2\n\ - mov.l r2,@%1\n\ - 1: mov r1,r15"\ - : "=&r" (__tmp) : "u" (mem), "0" (__value) \ - : "r0", "r1", "r2", "memory"); \ - else \ - { \ - __typeof (*(mem)) oldval; \ - __typeof (mem) memp = (mem); \ - do \ - oldval = *memp; \ - while (__arch_compare_and_exchange_val_64_acq \ - (memp, oldval + __value, oldval) == oldval); \ - (void) __value; \ - } \ - }) - -#define atomic_add_negative(mem, value) \ - ({ unsigned char __result; \ - __typeof (*(mem)) __tmp, __value = (value); \ - if (sizeof (*(mem)) == 1) \ - __asm __volatile ("\ - mova 1f,r0\n\ - mov r15,r1\n\ - .align 2\n\ - mov #(0f-1f),r15\n\ - 0: mov.b @%2,r2\n\ - add %1,r2\n\ - mov.b r2,@%2\n\ - 1: mov r1,r15\n\ - shal r2\n\ - movt %0"\ - : "=r" (__result), "=&r" (__tmp) : "u" (mem), "1" (__value) \ - : "r0", "r1", "r2", "t", "memory"); \ - else if (sizeof (*(mem)) == 2) \ - __asm __volatile ("\ - mova 1f,r0\n\ - mov r15,r1\n\ - .align 2\n\ - mov #(0f-1f),r15\n\ - 0: mov.w @%2,r2\n\ - add %1,r2\n\ - mov.w r2,@%2\n\ - 1: mov r1,r15\n\ - shal r2\n\ - movt %0"\ - : "=r" (__result), "=&r" (__tmp) : "u" (mem), "1" (__value) \ - : "r0", "r1", "r2", "t", "memory"); \ - else if (sizeof (*(mem)) == 4) \ - __asm __volatile ("\ - mova 1f,r0\n\ - mov r15,r1\n\ - .align 2\n\ - mov #(0f-1f),r15\n\ - 0: mov.l @%2,r2\n\ - add %1,r2\n\ - mov.l r2,@%2\n\ - 1: mov r1,r15\n\ - shal r2\n\ - movt %0"\ - : "=r" (__result), "=&r" (__tmp) : "u" (mem), "1" (__value) \ - : "r0", "r1", "r2", "t", "memory"); \ - else \ - abort (); \ - __result; }) - -#define atomic_add_zero(mem, value) \ - ({ unsigned char __result; \ - __typeof (*(mem)) __tmp, __value = (value); \ - if (sizeof (*(mem)) == 1) \ - __asm __volatile ("\ - mova 1f,r0\n\ - mov r15,r1\n\ - .align 2\n\ - mov #(0f-1f),r15\n\ - 0: mov.b @%2,r2\n\ - add %1,r2\n\ - mov.b r2,@%2\n\ - 1: mov r1,r15\n\ - tst r2,r2\n\ - movt %0"\ - : "=r" (__result), "=&r" (__tmp) : "u" (mem), "1" (__value) \ - : "r0", "r1", "r2", "t", "memory"); \ - else if (sizeof (*(mem)) == 2) \ - __asm __volatile ("\ - mova 1f,r0\n\ - mov r15,r1\n\ - .align 2\n\ - mov #(0f-1f),r15\n\ - 0: mov.w @%2,r2\n\ - add %1,r2\n\ - mov.w r2,@%2\n\ - 1: mov r1,r15\n\ - tst r2,r2\n\ - movt %0"\ - : "=r" (__result), "=&r" (__tmp) : "u" (mem), "1" (__value) \ - : "r0", "r1", "r2", "t", "memory"); \ - else if (sizeof (*(mem)) == 4) \ - __asm __volatile ("\ - mova 1f,r0\n\ - mov r15,r1\n\ - .align 2\n\ - mov #(0f-1f),r15\n\ - 0: mov.l @%2,r2\n\ - add %1,r2\n\ - mov.l r2,@%2\n\ - 1: mov r1,r15\n\ - tst r2,r2\n\ - movt %0"\ - : "=r" (__result), "=&r" (__tmp) : "u" (mem), "1" (__value) \ - : "r0", "r1", "r2", "t", "memory"); \ - else \ - abort (); \ - __result; }) - -#define atomic_increment_and_test(mem) atomic_add_zero((mem), 1) -#define atomic_decrement_and_test(mem) atomic_add_zero((mem), -1) - -#define atomic_bit_set(mem, bit) \ - (void) ({ unsigned int __mask = 1 << (bit); \ - if (sizeof (*(mem)) == 1) \ - __asm __volatile ("\ - mova 1f,r0\n\ - mov r15,r1\n\ - .align 2\n\ - mov #(0f-1f),r15\n\ - 0: mov.b @%0,r2\n\ - or %1,r2\n\ - mov.b r2,@%0\n\ - 1: mov r1,r15"\ - : : "u" (mem), "u" (__mask) \ - : "r0", "r1", "r2", "memory"); \ - else if (sizeof (*(mem)) == 2) \ - __asm __volatile ("\ - mova 1f,r0\n\ - mov r15,r1\n\ - .align 2\n\ - mov #(0f-1f),r15\n\ - 0: mov.w @%0,r2\n\ - or %1,r2\n\ - mov.w r2,@%0\n\ - 1: mov r1,r15"\ - : : "u" (mem), "u" (__mask) \ - : "r0", "r1", "r2", "memory"); \ - else if (sizeof (*(mem)) == 4) \ - __asm __volatile ("\ - mova 1f,r0\n\ - mov r15,r1\n\ - .align 2\n\ - mov #(0f-1f),r15\n\ - 0: mov.l @%0,r2\n\ - or %1,r2\n\ - mov.l r2,@%0\n\ - 1: mov r1,r15"\ - : : "u" (mem), "u" (__mask) \ - : "r0", "r1", "r2", "memory"); \ - else \ - abort (); \ - }) - -#define atomic_bit_test_set(mem, bit) \ - ({ unsigned int __mask = 1 << (bit); \ - unsigned int __result = __mask; \ - if (sizeof (*(mem)) == 1) \ - __asm __volatile ("\ - mova 1f,r0\n\ - .align 2\n\ - mov r15,r1\n\ - mov #(0f-1f),r15\n\ - 0: mov.b @%2,r2\n\ - mov r2,r3\n\ - or %1,r2\n\ - mov.b r2,@%2\n\ - 1: mov r1,r15\n\ - and r3,%0"\ - : "=&r" (__result), "=&r" (__mask) \ - : "u" (mem), "0" (__result), "1" (__mask) \ - : "r0", "r1", "r2", "r3", "memory"); \ - else if (sizeof (*(mem)) == 2) \ - __asm __volatile ("\ - mova 1f,r0\n\ - .align 2\n\ - mov r15,r1\n\ - mov #(0f-1f),r15\n\ - 0: mov.w @%2,r2\n\ - mov r2,r3\n\ - or %1,r2\n\ - mov.w %1,@%2\n\ - 1: mov r1,r15\n\ - and r3,%0"\ - : "=&r" (__result), "=&r" (__mask) \ - : "u" (mem), "0" (__result), "1" (__mask) \ - : "r0", "r1", "r2", "r3", "memory"); \ - else if (sizeof (*(mem)) == 4) \ - __asm __volatile ("\ - mova 1f,r0\n\ - .align 2\n\ - mov r15,r1\n\ - mov #(0f-1f),r15\n\ - 0: mov.l @%2,r2\n\ - mov r2,r3\n\ - or r2,%1\n\ - mov.l %1,@%2\n\ - 1: mov r1,r15\n\ - and r3,%0"\ - : "=&r" (__result), "=&r" (__mask) \ - : "u" (mem), "0" (__result), "1" (__mask) \ - : "r0", "r1", "r2", "r3", "memory"); \ - else \ - abort (); \ - __result; }) diff --git a/sysdeps/unix/sysv/linux/sh/bits/fcntl.h b/sysdeps/unix/sysv/linux/sh/bits/fcntl.h deleted file mode 100644 index 49ed86b460..0000000000 --- a/sysdeps/unix/sysv/linux/sh/bits/fcntl.h +++ /dev/null @@ -1,50 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux/SH. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - - -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#ifndef __USE_FILE_OFFSET64 - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/sh/bits/mman.h b/sysdeps/unix/sysv/linux/sh/bits/mman.h deleted file mode 100644 index 02588c6d6a..0000000000 --- a/sysdeps/unix/sysv/linux/sh/bits/mman.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/SH version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never include this file directly. Use instead" -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */ -# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x2000 /* Lock the mapping. */ -# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */ -# define MAP_POPULATE 0x8000 /* Populate (prefault) pagetables. */ -# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/sh/bits/shm.h b/sysdeps/unix/sysv/linux/sh/bits/shm.h deleted file mode 100644 index d1f47ec820..0000000000 --- a/sysdeps/unix/sysv/linux/sh/bits/shm.h +++ /dev/null @@ -1,101 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SHM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from */ -#define SHM_W 0200 /* or S_IWUGO from */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ -#define SHM_EXEC 0100000 /* execution access */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -__BEGIN_DECLS - -/* Segment low boundary address multiple. */ -#define SHMLBA 0x4000 - -/* Type to count number of attaches. */ -typedef unsigned long int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ - size_t shm_segsz; /* size of segment in bytes */ - __time_t shm_atime; /* time of last shmat() */ - unsigned long int __glibc_reserved1; - __time_t shm_dtime; /* time of last shmdt() */ - unsigned long int __glibc_reserved2; - __time_t shm_ctime; /* time of last change by shmctl() */ - unsigned long int __glibc_reserved3; - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - unsigned long int shmmax; - unsigned long int shmmin; - unsigned long int shmmni; - unsigned long int shmseg; - unsigned long int shmall; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - unsigned long int __glibc_reserved3; - unsigned long int __glibc_reserved4; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/sh/brk.c b/sysdeps/unix/sysv/linux/sh/brk.c deleted file mode 100644 index 4d83acf3f5..0000000000 --- a/sysdeps/unix/sysv/linux/sh/brk.c +++ /dev/null @@ -1,47 +0,0 @@ -/* brk system call for Linux/SH. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -int -__brk (void *addr) -{ - void *newbrk; - register long r3 asm ("%r3") = SYS_ify (brk); - register long r4 asm ("%r4") = (long)addr; - - asm volatile ("trapa #0x11\n\t" SYSCALL_INST_PAD - : "=z"(newbrk) - : "r" (r3), "r" (r4)); - - __curbrk = newbrk; - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/sh/c++-types.data b/sysdeps/unix/sysv/linux/sh/c++-types.data deleted file mode 100644 index fde53bf337..0000000000 --- a/sysdeps/unix/sysv/linux/sh/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:i -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/sh/clone.S b/sysdeps/unix/sysv/linux/sh/clone.S deleted file mode 100644 index 9063b21928..0000000000 --- a/sysdeps/unix/sysv/linux/sh/clone.S +++ /dev/null @@ -1,103 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#define _ERRNO_H 1 -#include -#include - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - pid_t *ptid, void *tls, pid_t *ctid); */ - - .text -ENTRY(__clone) - /* sanity check arguments. */ - tst r4, r4 - bt/s 0f - tst r5, r5 - bf 1f -0: - bra .Lsyscall_error - mov #-EINVAL,r0 -1: - /* insert the args onto the new stack */ - mov.l r7, @-r5 - /* save the function pointer as the 0th element */ - mov.l r4, @-r5 - - /* do the system call */ - mov r6, r4 - mov.l @r15, r6 - mov.l @(8,r15), r7 - mov.l @(4,r15), r0 - mov #+SYS_ify(clone), r3 - trapa #0x15 - mov r0, r1 - mov #-12, r2 - shad r2, r1 - not r1, r1 // r1=0 means r0 = -1 to -4095 - tst r1, r1 // i.e. error in linux - bf .Lclone_end -.Lsyscall_error: - SYSCALL_ERROR_HANDLER -.Lclone_end: - tst r0, r0 - bt 2f -.Lpseudo_end: - rts - nop -2: - /* terminate the stack frame */ - mov #0, r14 - - /* thread starts */ - mov.l @r15, r1 - jsr @r1 - mov.l @(4,r15), r4 - - /* we are done, passing the return value through r0 */ - mov.l .L3, r1 -#ifdef SHARED - mov.l r12, @-r15 - sts.l pr, @-r15 - mov r0, r4 - mova .LG, r0 - mov.l .LG, r12 - add r0, r12 - mova .L3, r0 - add r0, r1 - jsr @r1 - nop - lds.l @r15+, pr - rts - mov.l @r15+, r12 -#else - jmp @r1 - mov r0, r4 -#endif - .align 2 -.LG: - .long _GLOBAL_OFFSET_TABLE_ -.L3: - .long PLTJMP(C_SYMBOL_NAME(_exit)) -PSEUDO_END (__clone) - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/sh/configure b/sysdeps/unix/sysv/linux/sh/configure deleted file mode 100644 index 6c31f5e249..0000000000 --- a/sysdeps/unix/sysv/linux/sh/configure +++ /dev/null @@ -1,4 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/sh. - -libc_cv_gcc_unwind_find_fde=yes diff --git a/sysdeps/unix/sysv/linux/sh/configure.ac b/sysdeps/unix/sysv/linux/sh/configure.ac deleted file mode 100644 index 85ef0f8ffd..0000000000 --- a/sysdeps/unix/sysv/linux/sh/configure.ac +++ /dev/null @@ -1,4 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/sh. - -libc_cv_gcc_unwind_find_fde=yes diff --git a/sysdeps/unix/sysv/linux/sh/fcntl.c b/sysdeps/unix/sysv/linux/sh/fcntl.c deleted file mode 100644 index ea951bc4f9..0000000000 --- a/sysdeps/unix/sysv/linux/sh/fcntl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sh/fxstat.c b/sysdeps/unix/sysv/linux/sh/fxstat.c deleted file mode 100644 index 4f219f0b9d..0000000000 --- a/sysdeps/unix/sysv/linux/sh/fxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sh/fxstatat.c b/sysdeps/unix/sysv/linux/sh/fxstatat.c deleted file mode 100644 index 0f8b3135d8..0000000000 --- a/sysdeps/unix/sysv/linux/sh/fxstatat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sh/kernel-features.h b/sysdeps/unix/sysv/linux/sh/kernel-features.h deleted file mode 100644 index 175b4f5433..0000000000 --- a/sysdeps/unix/sysv/linux/sh/kernel-features.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. SH version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef __KERNEL_FEATURES_SH__ -# define __KERNEL_FEATURES_SH__ - -/* SH uses socketcall. */ -#define __ASSUME_SOCKETCALL 1 - -/* These syscalls were added for SH in 2.6.37. */ -#define __ASSUME_SOCKET_SYSCALL 1 -#define __ASSUME_BIND_SYSCALL 1 -#define __ASSUME_CONNECT_SYSCALL 1 -#define __ASSUME_LISTEN_SYSCALL 1 -#define __ASSUME_GETSOCKNAME_SYSCALL 1 -#define __ASSUME_GETPEERNAME_SYSCALL 1 -#define __ASSUME_SOCKETPAIR_SYSCALL 1 -#define __ASSUME_SEND_SYSCALL 1 -#define __ASSUME_RECV_SYSCALL 1 -#define __ASSUME_SHUTDOWN_SYSCALL 1 -#define __ASSUME_GETSOCKOPT_SYSCALL 1 -#define __ASSUME_SETSOCKOPT_SYSCALL 1 - -#include_next - -/* SH does not have a 64-bit inode field. */ -#undef __ASSUME_ST_INO_64_BIT -#define __ASSUME_ST_INO_64_BIT 0 - -/* SH4 ABI does not really require argument alignment for 64-bits, but - the kernel interface for p{read,write}64 adds a dummy long argument - before the offset. */ -#define __ASSUME_PRW_DUMMY_ARG 1 - -/* sh only supports ipc syscall. */ -#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - -#endif diff --git a/sysdeps/unix/sysv/linux/sh/ld.abilist b/sysdeps/unix/sysv/linux/sh/ld.abilist deleted file mode 100644 index fc1c60ea17..0000000000 --- a/sysdeps/unix/sysv/linux/sh/ld.abilist +++ /dev/null @@ -1,12 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __libc_stack_end D 0x4 -GLIBC_2.2 _dl_mcount F -GLIBC_2.2 _r_debug D 0x14 -GLIBC_2.2 calloc F -GLIBC_2.2 free F -GLIBC_2.2 malloc F -GLIBC_2.2 realloc F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __tls_get_addr F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __stack_chk_guard D 0x4 diff --git a/sysdeps/unix/sysv/linux/sh/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/sh/libBrokenLocale.abilist deleted file mode 100644 index 21343df781..0000000000 --- a/sysdeps/unix/sysv/linux/sh/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/sh/libanl.abilist b/sysdeps/unix/sysv/linux/sh/libanl.abilist deleted file mode 100644 index edabfb436e..0000000000 --- a/sysdeps/unix/sysv/linux/sh/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 gai_cancel F -GLIBC_2.2.3 gai_error F -GLIBC_2.2.3 gai_suspend F -GLIBC_2.2.3 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/sh/libc.abilist b/sysdeps/unix/sysv/linux/sh/libc.abilist deleted file mode 100644 index f3a70a0f6f..0000000000 --- a/sysdeps/unix/sysv/linux/sh/libc.abilist +++ /dev/null @@ -1,2178 +0,0 @@ -GCC_3.0 GCC_3.0 A -GCC_3.0 _Unwind_Find_FDE F -GCC_3.0 __deregister_frame_info_bases F -GCC_3.0 __register_frame_info_bases F -GCC_3.0 __register_frame_info_table_bases F -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 fallocate64 F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _sys_errlist D 0x21c -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x21c -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 fanotify_mark F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _Exit F -GLIBC_2.2 _IO_2_1_stderr_ D 0x98 -GLIBC_2.2 _IO_2_1_stdin_ D 0x98 -GLIBC_2.2 _IO_2_1_stdout_ D 0x98 -GLIBC_2.2 _IO_adjust_column F -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_default_doallocate F -GLIBC_2.2 _IO_default_finish F -GLIBC_2.2 _IO_default_pbackfail F -GLIBC_2.2 _IO_default_uflow F -GLIBC_2.2 _IO_default_xsgetn F -GLIBC_2.2 _IO_default_xsputn F -GLIBC_2.2 _IO_do_write F -GLIBC_2.2 _IO_doallocbuf F -GLIBC_2.2 _IO_fclose F -GLIBC_2.2 _IO_fdopen F -GLIBC_2.2 _IO_feof F -GLIBC_2.2 _IO_ferror F -GLIBC_2.2 _IO_fflush F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_fgets F -GLIBC_2.2 _IO_file_attach F -GLIBC_2.2 _IO_file_close F -GLIBC_2.2 _IO_file_close_it F -GLIBC_2.2 _IO_file_doallocate F -GLIBC_2.2 _IO_file_finish F -GLIBC_2.2 _IO_file_fopen F -GLIBC_2.2 _IO_file_init F -GLIBC_2.2 _IO_file_jumps D 0x54 -GLIBC_2.2 _IO_file_open F -GLIBC_2.2 _IO_file_overflow F -GLIBC_2.2 _IO_file_read F -GLIBC_2.2 _IO_file_seek F -GLIBC_2.2 _IO_file_seekoff F -GLIBC_2.2 _IO_file_setbuf F -GLIBC_2.2 _IO_file_stat F -GLIBC_2.2 _IO_file_sync F -GLIBC_2.2 _IO_file_underflow F -GLIBC_2.2 _IO_file_write F -GLIBC_2.2 _IO_file_xsputn F -GLIBC_2.2 _IO_flockfile F -GLIBC_2.2 _IO_flush_all F -GLIBC_2.2 _IO_flush_all_linebuffered F -GLIBC_2.2 _IO_fopen F -GLIBC_2.2 _IO_fprintf F -GLIBC_2.2 _IO_fputs F -GLIBC_2.2 _IO_fread F -GLIBC_2.2 _IO_free_backup_area F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_ftell F -GLIBC_2.2 _IO_ftrylockfile F -GLIBC_2.2 _IO_funlockfile F -GLIBC_2.2 _IO_fwrite F -GLIBC_2.2 _IO_getc F -GLIBC_2.2 _IO_getline F -GLIBC_2.2 _IO_getline_info F -GLIBC_2.2 _IO_gets F -GLIBC_2.2 _IO_init F -GLIBC_2.2 _IO_init_marker F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_link_in F -GLIBC_2.2 _IO_list_all D 0x4 -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_marker_delta F -GLIBC_2.2 _IO_marker_difference F -GLIBC_2.2 _IO_padn F -GLIBC_2.2 _IO_peekc_locked F -GLIBC_2.2 _IO_popen F -GLIBC_2.2 _IO_printf F -GLIBC_2.2 _IO_proc_close F -GLIBC_2.2 _IO_proc_open F -GLIBC_2.2 _IO_putc F -GLIBC_2.2 _IO_puts F -GLIBC_2.2 _IO_remove_marker F -GLIBC_2.2 _IO_seekmark F -GLIBC_2.2 _IO_seekoff F -GLIBC_2.2 _IO_seekpos F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_setb F -GLIBC_2.2 _IO_setbuffer F -GLIBC_2.2 _IO_setvbuf F -GLIBC_2.2 _IO_sgetn F -GLIBC_2.2 _IO_sprintf F -GLIBC_2.2 _IO_sputbackc F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sscanf F -GLIBC_2.2 _IO_str_init_readonly F -GLIBC_2.2 _IO_str_init_static F -GLIBC_2.2 _IO_str_overflow F -GLIBC_2.2 _IO_str_pbackfail F -GLIBC_2.2 _IO_str_seekoff F -GLIBC_2.2 _IO_str_underflow F -GLIBC_2.2 _IO_sungetc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_get_mode F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_un_link F -GLIBC_2.2 _IO_ungetc F -GLIBC_2.2 _IO_unsave_markers F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_vfprintf F -GLIBC_2.2 _IO_vfscanf F -GLIBC_2.2 _IO_vsprintf F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0x54 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 __adjtimex F -GLIBC_2.2 __after_morecore_hook D 0x4 -GLIBC_2.2 __argz_count F -GLIBC_2.2 __argz_next F -GLIBC_2.2 __argz_stringify F -GLIBC_2.2 __asprintf F -GLIBC_2.2 __assert F -GLIBC_2.2 __assert_fail F -GLIBC_2.2 __assert_perror_fail F -GLIBC_2.2 __backtrace F -GLIBC_2.2 __backtrace_symbols F -GLIBC_2.2 __backtrace_symbols_fd F -GLIBC_2.2 __bsd_getpgrp F -GLIBC_2.2 __bzero F -GLIBC_2.2 __check_rhosts_file D 0x4 -GLIBC_2.2 __clone F -GLIBC_2.2 __close F -GLIBC_2.2 __cmsg_nxthdr F -GLIBC_2.2 __connect F -GLIBC_2.2 __ctype32_b D 0x4 -GLIBC_2.2 __ctype32_tolower D 0x4 -GLIBC_2.2 __ctype32_toupper D 0x4 -GLIBC_2.2 __ctype_b D 0x4 -GLIBC_2.2 __ctype_get_mb_cur_max F -GLIBC_2.2 __ctype_tolower D 0x4 -GLIBC_2.2 __ctype_toupper D 0x4 -GLIBC_2.2 __curbrk D 0x4 -GLIBC_2.2 __cxa_atexit F -GLIBC_2.2 __cxa_finalize F -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __daylight D 0x4 -GLIBC_2.2 __dcgettext F -GLIBC_2.2 __default_morecore F -GLIBC_2.2 __deregister_frame_info F -GLIBC_2.2 __dgettext F -GLIBC_2.2 __dup2 F -GLIBC_2.2 __duplocale F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __environ D 0x4 -GLIBC_2.2 __errno_location F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __fcntl F -GLIBC_2.2 __ffs F -GLIBC_2.2 __finite F -GLIBC_2.2 __finitef F -GLIBC_2.2 __finitel F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fork F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpu_control D 0x4 -GLIBC_2.2 __fpurge F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __free_hook D 0x4 -GLIBC_2.2 __freelocale F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getdelim F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __getpagesize F -GLIBC_2.2 __getpgid F -GLIBC_2.2 __getpid F -GLIBC_2.2 __gettimeofday F -GLIBC_2.2 __gmtime_r F -GLIBC_2.2 __h_errno_location F -GLIBC_2.2 __isalnum_l F -GLIBC_2.2 __isalpha_l F -GLIBC_2.2 __isascii_l F -GLIBC_2.2 __isblank_l F -GLIBC_2.2 __iscntrl_l F -GLIBC_2.2 __isdigit_l F -GLIBC_2.2 __isgraph_l F -GLIBC_2.2 __isinf F -GLIBC_2.2 __isinff F -GLIBC_2.2 __isinfl F -GLIBC_2.2 __islower_l F -GLIBC_2.2 __isnan F -GLIBC_2.2 __isnanf F -GLIBC_2.2 __isnanl F -GLIBC_2.2 __isprint_l F -GLIBC_2.2 __ispunct_l F -GLIBC_2.2 __isspace_l F -GLIBC_2.2 __isupper_l F -GLIBC_2.2 __iswalnum_l F -GLIBC_2.2 __iswalpha_l F -GLIBC_2.2 __iswblank_l F -GLIBC_2.2 __iswcntrl_l F -GLIBC_2.2 __iswctype F -GLIBC_2.2 __iswctype_l F -GLIBC_2.2 __iswdigit_l F -GLIBC_2.2 __iswgraph_l F -GLIBC_2.2 __iswlower_l F -GLIBC_2.2 __iswprint_l F -GLIBC_2.2 __iswpunct_l F -GLIBC_2.2 __iswspace_l F -GLIBC_2.2 __iswupper_l F -GLIBC_2.2 __iswxdigit_l F -GLIBC_2.2 __isxdigit_l F -GLIBC_2.2 __ivaliduser F -GLIBC_2.2 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.2 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.2 __key_gendes_LOCAL D 0x4 -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_calloc F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __libc_free F -GLIBC_2.2 __libc_freeres F -GLIBC_2.2 __libc_init_first F -GLIBC_2.2 __libc_mallinfo F -GLIBC_2.2 __libc_malloc F -GLIBC_2.2 __libc_mallopt F -GLIBC_2.2 __libc_memalign F -GLIBC_2.2 __libc_pvalloc F -GLIBC_2.2 __libc_realloc F -GLIBC_2.2 __libc_sa_len F -GLIBC_2.2 __libc_start_main F -GLIBC_2.2 __libc_valloc F -GLIBC_2.2 __lseek F -GLIBC_2.2 __lxstat F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __malloc_hook D 0x4 -GLIBC_2.2 __malloc_initialize_hook D 0x4 -GLIBC_2.2 __mbrlen F -GLIBC_2.2 __mbrtowc F -GLIBC_2.2 __memalign_hook D 0x4 -GLIBC_2.2 __mempcpy F -GLIBC_2.2 __mempcpy_small F -GLIBC_2.2 __monstartup F -GLIBC_2.2 __morecore D 0x4 -GLIBC_2.2 __newlocale F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __nss_configure_lookup F -GLIBC_2.2 __nss_database_lookup F -GLIBC_2.2 __nss_group_lookup F -GLIBC_2.2 __nss_hosts_lookup F -GLIBC_2.2 __nss_next F -GLIBC_2.2 __nss_passwd_lookup F -GLIBC_2.2 __open F -GLIBC_2.2 __open64 F -GLIBC_2.2 __overflow F -GLIBC_2.2 __pipe F -GLIBC_2.2 __poll F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __printf_fp F -GLIBC_2.2 __profile_frequency F -GLIBC_2.2 __progname D 0x4 -GLIBC_2.2 __progname_full D 0x4 -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __rawmemchr F -GLIBC_2.2 __rcmd_errstr D 0x4 -GLIBC_2.2 __read F -GLIBC_2.2 __realloc_hook D 0x4 -GLIBC_2.2 __register_frame_info F -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_randomid F -GLIBC_2.2 __res_state F -GLIBC_2.2 __sbrk F -GLIBC_2.2 __sched_get_priority_max F -GLIBC_2.2 __sched_get_priority_min F -GLIBC_2.2 __sched_getparam F -GLIBC_2.2 __sched_getscheduler F -GLIBC_2.2 __sched_setscheduler F -GLIBC_2.2 __sched_yield F -GLIBC_2.2 __secure_getenv F -GLIBC_2.2 __select F -GLIBC_2.2 __send F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __setpgid F -GLIBC_2.2 __sigaction F -GLIBC_2.2 __sigaddset F -GLIBC_2.2 __sigdelset F -GLIBC_2.2 __sigismember F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 __sigpause F -GLIBC_2.2 __sigsetjmp F -GLIBC_2.2 __sigsuspend F -GLIBC_2.2 __statfs F -GLIBC_2.2 __stpcpy F -GLIBC_2.2 __stpcpy_small F -GLIBC_2.2 __stpncpy F -GLIBC_2.2 __strcasecmp F -GLIBC_2.2 __strcasecmp_l F -GLIBC_2.2 __strcasestr F -GLIBC_2.2 __strcoll_l F -GLIBC_2.2 __strcpy_small F -GLIBC_2.2 __strcspn_c1 F -GLIBC_2.2 __strcspn_c2 F -GLIBC_2.2 __strcspn_c3 F -GLIBC_2.2 __strdup F -GLIBC_2.2 __strerror_r F -GLIBC_2.2 __strfmon_l F -GLIBC_2.2 __strncasecmp_l F -GLIBC_2.2 __strndup F -GLIBC_2.2 __strpbrk_c2 F -GLIBC_2.2 __strpbrk_c3 F -GLIBC_2.2 __strsep_1c F -GLIBC_2.2 __strsep_2c F -GLIBC_2.2 __strsep_3c F -GLIBC_2.2 __strsep_g F -GLIBC_2.2 __strspn_c1 F -GLIBC_2.2 __strspn_c2 F -GLIBC_2.2 __strspn_c3 F -GLIBC_2.2 __strtod_internal F -GLIBC_2.2 __strtod_l F -GLIBC_2.2 __strtof_internal F -GLIBC_2.2 __strtof_l F -GLIBC_2.2 __strtok_r F -GLIBC_2.2 __strtok_r_1c F -GLIBC_2.2 __strtol_internal F -GLIBC_2.2 __strtol_l F -GLIBC_2.2 __strtold_internal F -GLIBC_2.2 __strtold_l F -GLIBC_2.2 __strtoll_internal F -GLIBC_2.2 __strtoll_l F -GLIBC_2.2 __strtoul_internal F -GLIBC_2.2 __strtoul_l F -GLIBC_2.2 __strtoull_internal F -GLIBC_2.2 __strtoull_l F -GLIBC_2.2 __strverscmp F -GLIBC_2.2 __strxfrm_l F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __sysv_signal F -GLIBC_2.2 __timezone D 0x4 -GLIBC_2.2 __toascii_l F -GLIBC_2.2 __tolower_l F -GLIBC_2.2 __toupper_l F -GLIBC_2.2 __towctrans F -GLIBC_2.2 __towctrans_l F -GLIBC_2.2 __towlower_l F -GLIBC_2.2 __towupper_l F -GLIBC_2.2 __tzname D 0x8 -GLIBC_2.2 __uflow F -GLIBC_2.2 __underflow F -GLIBC_2.2 __vfork F -GLIBC_2.2 __vfscanf F -GLIBC_2.2 __vsnprintf F -GLIBC_2.2 __vsscanf F -GLIBC_2.2 __wait F -GLIBC_2.2 __waitpid F -GLIBC_2.2 __wcscasecmp_l F -GLIBC_2.2 __wcscoll_l F -GLIBC_2.2 __wcsncasecmp_l F -GLIBC_2.2 __wcstod_internal F -GLIBC_2.2 __wcstod_l F -GLIBC_2.2 __wcstof_internal F -GLIBC_2.2 __wcstof_l F -GLIBC_2.2 __wcstol_internal F -GLIBC_2.2 __wcstol_l F -GLIBC_2.2 __wcstold_internal F -GLIBC_2.2 __wcstold_l F -GLIBC_2.2 __wcstoll_internal F -GLIBC_2.2 __wcstoll_l F -GLIBC_2.2 __wcstoul_internal F -GLIBC_2.2 __wcstoul_l F -GLIBC_2.2 __wcstoull_internal F -GLIBC_2.2 __wcstoull_l F -GLIBC_2.2 __wcsxfrm_l F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __wctype_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __write F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xmknod F -GLIBC_2.2 __xpg_basename F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _authenticate F -GLIBC_2.2 _dl_mcount_wrapper F -GLIBC_2.2 _dl_mcount_wrapper_check F -GLIBC_2.2 _environ D 0x4 -GLIBC_2.2 _exit F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _libc_intl_domainname D 0x5 -GLIBC_2.2 _longjmp F -GLIBC_2.2 _mcleanup F -GLIBC_2.2 _mcount F -GLIBC_2.2 _nl_default_dirname D 0x12 -GLIBC_2.2 _nl_domain_bindings D 0x4 -GLIBC_2.2 _nl_msg_cat_cntr D 0x4 -GLIBC_2.2 _null_auth D 0xc -GLIBC_2.2 _obstack D 0x4 -GLIBC_2.2 _obstack_allocated_p F -GLIBC_2.2 _obstack_begin F -GLIBC_2.2 _obstack_begin_1 F -GLIBC_2.2 _obstack_free F -GLIBC_2.2 _obstack_memory_used F -GLIBC_2.2 _obstack_newchunk F -GLIBC_2.2 _res D 0x200 -GLIBC_2.2 _res_hconf D 0x30 -GLIBC_2.2 _rpc_dtablesize F -GLIBC_2.2 _seterr_reply F -GLIBC_2.2 _setjmp F -GLIBC_2.2 _sys_errlist D 0x1f4 -GLIBC_2.2 _sys_nerr D 0x4 -GLIBC_2.2 _sys_siglist D 0x100 -GLIBC_2.2 _tolower F -GLIBC_2.2 _toupper F -GLIBC_2.2 a64l F -GLIBC_2.2 abort F -GLIBC_2.2 abs F -GLIBC_2.2 accept F -GLIBC_2.2 access F -GLIBC_2.2 acct F -GLIBC_2.2 addmntent F -GLIBC_2.2 addseverity F -GLIBC_2.2 adjtime F -GLIBC_2.2 adjtimex F -GLIBC_2.2 advance F -GLIBC_2.2 alarm F -GLIBC_2.2 alphasort F -GLIBC_2.2 alphasort64 F -GLIBC_2.2 argp_err_exit_status D 0x4 -GLIBC_2.2 argp_error F -GLIBC_2.2 argp_failure F -GLIBC_2.2 argp_help F -GLIBC_2.2 argp_parse F -GLIBC_2.2 argp_program_bug_address D 0x4 -GLIBC_2.2 argp_program_version D 0x4 -GLIBC_2.2 argp_program_version_hook D 0x4 -GLIBC_2.2 argp_state_help F -GLIBC_2.2 argp_usage F -GLIBC_2.2 argz_add F -GLIBC_2.2 argz_add_sep F -GLIBC_2.2 argz_append F -GLIBC_2.2 argz_count F -GLIBC_2.2 argz_create F -GLIBC_2.2 argz_create_sep F -GLIBC_2.2 argz_delete F -GLIBC_2.2 argz_extract F -GLIBC_2.2 argz_insert F -GLIBC_2.2 argz_next F -GLIBC_2.2 argz_replace F -GLIBC_2.2 argz_stringify F -GLIBC_2.2 asctime F -GLIBC_2.2 asctime_r F -GLIBC_2.2 asprintf F -GLIBC_2.2 atexit F -GLIBC_2.2 atof F -GLIBC_2.2 atoi F -GLIBC_2.2 atol F -GLIBC_2.2 atoll F -GLIBC_2.2 authdes_create F -GLIBC_2.2 authdes_getucred F -GLIBC_2.2 authdes_pk_create F -GLIBC_2.2 authnone_create F -GLIBC_2.2 authunix_create F -GLIBC_2.2 authunix_create_default F -GLIBC_2.2 backtrace F -GLIBC_2.2 backtrace_symbols F -GLIBC_2.2 backtrace_symbols_fd F -GLIBC_2.2 basename F -GLIBC_2.2 bcmp F -GLIBC_2.2 bcopy F -GLIBC_2.2 bdflush F -GLIBC_2.2 bind F -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 bindresvport F -GLIBC_2.2 bindtextdomain F -GLIBC_2.2 brk F -GLIBC_2.2 bsd_signal F -GLIBC_2.2 bsearch F -GLIBC_2.2 btowc F -GLIBC_2.2 bzero F -GLIBC_2.2 calloc F -GLIBC_2.2 callrpc F -GLIBC_2.2 canonicalize_file_name F -GLIBC_2.2 capget F -GLIBC_2.2 capset F -GLIBC_2.2 catclose F -GLIBC_2.2 catgets F -GLIBC_2.2 catopen F -GLIBC_2.2 cbc_crypt F -GLIBC_2.2 cfgetispeed F -GLIBC_2.2 cfgetospeed F -GLIBC_2.2 cfmakeraw F -GLIBC_2.2 cfree F -GLIBC_2.2 cfsetispeed F -GLIBC_2.2 cfsetospeed F -GLIBC_2.2 cfsetspeed F -GLIBC_2.2 chdir F -GLIBC_2.2 chflags F -GLIBC_2.2 chmod F -GLIBC_2.2 chown F -GLIBC_2.2 chroot F -GLIBC_2.2 clearenv F -GLIBC_2.2 clearerr F -GLIBC_2.2 clearerr_unlocked F -GLIBC_2.2 clnt_broadcast F -GLIBC_2.2 clnt_create F -GLIBC_2.2 clnt_pcreateerror F -GLIBC_2.2 clnt_perrno F -GLIBC_2.2 clnt_perror F -GLIBC_2.2 clnt_spcreateerror F -GLIBC_2.2 clnt_sperrno F -GLIBC_2.2 clnt_sperror F -GLIBC_2.2 clntraw_create F -GLIBC_2.2 clnttcp_create F -GLIBC_2.2 clntudp_bufcreate F -GLIBC_2.2 clntudp_create F -GLIBC_2.2 clntunix_create F -GLIBC_2.2 clock F -GLIBC_2.2 clone F -GLIBC_2.2 close F -GLIBC_2.2 closedir F -GLIBC_2.2 closelog F -GLIBC_2.2 confstr F -GLIBC_2.2 connect F -GLIBC_2.2 copysign F -GLIBC_2.2 copysignf F -GLIBC_2.2 copysignl F -GLIBC_2.2 creat F -GLIBC_2.2 creat64 F -GLIBC_2.2 create_module F -GLIBC_2.2 ctermid F -GLIBC_2.2 ctime F -GLIBC_2.2 ctime_r F -GLIBC_2.2 cuserid F -GLIBC_2.2 daemon F -GLIBC_2.2 daylight D 0x4 -GLIBC_2.2 dcgettext F -GLIBC_2.2 dcngettext F -GLIBC_2.2 delete_module F -GLIBC_2.2 des_setparity F -GLIBC_2.2 dgettext F -GLIBC_2.2 difftime F -GLIBC_2.2 dirfd F -GLIBC_2.2 dirname F -GLIBC_2.2 div F -GLIBC_2.2 dngettext F -GLIBC_2.2 dprintf F -GLIBC_2.2 drand48 F -GLIBC_2.2 drand48_r F -GLIBC_2.2 dup F -GLIBC_2.2 dup2 F -GLIBC_2.2 dysize F -GLIBC_2.2 ecb_crypt F -GLIBC_2.2 ecvt F -GLIBC_2.2 ecvt_r F -GLIBC_2.2 endaliasent F -GLIBC_2.2 endfsent F -GLIBC_2.2 endgrent F -GLIBC_2.2 endhostent F -GLIBC_2.2 endmntent F -GLIBC_2.2 endnetent F -GLIBC_2.2 endnetgrent F -GLIBC_2.2 endprotoent F -GLIBC_2.2 endpwent F -GLIBC_2.2 endrpcent F -GLIBC_2.2 endservent F -GLIBC_2.2 endspent F -GLIBC_2.2 endttyent F -GLIBC_2.2 endusershell F -GLIBC_2.2 endutent F -GLIBC_2.2 endutxent F -GLIBC_2.2 environ D 0x4 -GLIBC_2.2 envz_add F -GLIBC_2.2 envz_entry F -GLIBC_2.2 envz_get F -GLIBC_2.2 envz_merge F -GLIBC_2.2 envz_remove F -GLIBC_2.2 envz_strip F -GLIBC_2.2 erand48 F -GLIBC_2.2 erand48_r F -GLIBC_2.2 err F -GLIBC_2.2 error F -GLIBC_2.2 error_at_line F -GLIBC_2.2 error_message_count D 0x4 -GLIBC_2.2 error_one_per_line D 0x4 -GLIBC_2.2 error_print_progname D 0x4 -GLIBC_2.2 errx F -GLIBC_2.2 ether_aton F -GLIBC_2.2 ether_aton_r F -GLIBC_2.2 ether_hostton F -GLIBC_2.2 ether_line F -GLIBC_2.2 ether_ntoa F -GLIBC_2.2 ether_ntoa_r F -GLIBC_2.2 ether_ntohost F -GLIBC_2.2 euidaccess F -GLIBC_2.2 execl F -GLIBC_2.2 execle F -GLIBC_2.2 execlp F -GLIBC_2.2 execv F -GLIBC_2.2 execve F -GLIBC_2.2 execvp F -GLIBC_2.2 exit F -GLIBC_2.2 fattach F -GLIBC_2.2 fchdir F -GLIBC_2.2 fchflags F -GLIBC_2.2 fchmod F -GLIBC_2.2 fchown F -GLIBC_2.2 fclose F -GLIBC_2.2 fcloseall F -GLIBC_2.2 fcntl F -GLIBC_2.2 fcvt F -GLIBC_2.2 fcvt_r F -GLIBC_2.2 fdatasync F -GLIBC_2.2 fdetach F -GLIBC_2.2 fdopen F -GLIBC_2.2 feof F -GLIBC_2.2 feof_unlocked F -GLIBC_2.2 ferror F -GLIBC_2.2 ferror_unlocked F -GLIBC_2.2 fexecve F -GLIBC_2.2 fflush F -GLIBC_2.2 fflush_unlocked F -GLIBC_2.2 ffs F -GLIBC_2.2 ffsl F -GLIBC_2.2 ffsll F -GLIBC_2.2 fgetc F -GLIBC_2.2 fgetc_unlocked F -GLIBC_2.2 fgetgrent F -GLIBC_2.2 fgetgrent_r F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgetpwent F -GLIBC_2.2 fgetpwent_r F -GLIBC_2.2 fgets F -GLIBC_2.2 fgets_unlocked F -GLIBC_2.2 fgetspent F -GLIBC_2.2 fgetspent_r F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fileno F -GLIBC_2.2 fileno_unlocked F -GLIBC_2.2 finite F -GLIBC_2.2 finitef F -GLIBC_2.2 finitel F -GLIBC_2.2 flock F -GLIBC_2.2 flockfile F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fmtmsg F -GLIBC_2.2 fnmatch F -GLIBC_2.2 fopen F -GLIBC_2.2 fopen64 F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fork F -GLIBC_2.2 fpathconf F -GLIBC_2.2 fprintf F -GLIBC_2.2 fputc F -GLIBC_2.2 fputc_unlocked F -GLIBC_2.2 fputs F -GLIBC_2.2 fputs_unlocked F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fread F -GLIBC_2.2 fread_unlocked F -GLIBC_2.2 free F -GLIBC_2.2 freeaddrinfo F -GLIBC_2.2 freopen F -GLIBC_2.2 freopen64 F -GLIBC_2.2 frexp F -GLIBC_2.2 frexpf F -GLIBC_2.2 frexpl F -GLIBC_2.2 fscanf F -GLIBC_2.2 fseek F -GLIBC_2.2 fseeko F -GLIBC_2.2 fseeko64 F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fstatfs F -GLIBC_2.2 fstatfs64 F -GLIBC_2.2 fstatvfs F -GLIBC_2.2 fstatvfs64 F -GLIBC_2.2 fsync F -GLIBC_2.2 ftell F -GLIBC_2.2 ftello F -GLIBC_2.2 ftello64 F -GLIBC_2.2 ftime F -GLIBC_2.2 ftok F -GLIBC_2.2 ftruncate F -GLIBC_2.2 ftruncate64 F -GLIBC_2.2 ftrylockfile F -GLIBC_2.2 fts_children F -GLIBC_2.2 fts_close F -GLIBC_2.2 fts_open F -GLIBC_2.2 fts_read F -GLIBC_2.2 fts_set F -GLIBC_2.2 ftw F -GLIBC_2.2 ftw64 F -GLIBC_2.2 funlockfile F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwrite F -GLIBC_2.2 fwrite_unlocked F -GLIBC_2.2 fwscanf F -GLIBC_2.2 gai_strerror F -GLIBC_2.2 gcvt F -GLIBC_2.2 get_avphys_pages F -GLIBC_2.2 get_current_dir_name F -GLIBC_2.2 get_kernel_syms F -GLIBC_2.2 get_myaddress F -GLIBC_2.2 get_nprocs F -GLIBC_2.2 get_nprocs_conf F -GLIBC_2.2 get_phys_pages F -GLIBC_2.2 getaddrinfo F -GLIBC_2.2 getaliasbyname F -GLIBC_2.2 getaliasbyname_r F -GLIBC_2.2 getaliasent F -GLIBC_2.2 getaliasent_r F -GLIBC_2.2 getc F -GLIBC_2.2 getc_unlocked F -GLIBC_2.2 getchar F -GLIBC_2.2 getchar_unlocked F -GLIBC_2.2 getcontext F -GLIBC_2.2 getcwd F -GLIBC_2.2 getdate F -GLIBC_2.2 getdate_err D 0x4 -GLIBC_2.2 getdate_r F -GLIBC_2.2 getdelim F -GLIBC_2.2 getdirentries F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getdomainname F -GLIBC_2.2 getdtablesize F -GLIBC_2.2 getegid F -GLIBC_2.2 getenv F -GLIBC_2.2 geteuid F -GLIBC_2.2 getfsent F -GLIBC_2.2 getfsfile F -GLIBC_2.2 getfsspec F -GLIBC_2.2 getgid F -GLIBC_2.2 getgrent F -GLIBC_2.2 getgrent_r F -GLIBC_2.2 getgrgid F -GLIBC_2.2 getgrgid_r F -GLIBC_2.2 getgrnam F -GLIBC_2.2 getgrnam_r F -GLIBC_2.2 getgroups F -GLIBC_2.2 gethostbyaddr F -GLIBC_2.2 gethostbyaddr_r F -GLIBC_2.2 gethostbyname F -GLIBC_2.2 gethostbyname2 F -GLIBC_2.2 gethostbyname2_r F -GLIBC_2.2 gethostbyname_r F -GLIBC_2.2 gethostent F -GLIBC_2.2 gethostent_r F -GLIBC_2.2 gethostid F -GLIBC_2.2 gethostname F -GLIBC_2.2 getitimer F -GLIBC_2.2 getline F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getlogin F -GLIBC_2.2 getlogin_r F -GLIBC_2.2 getmntent F -GLIBC_2.2 getmntent_r F -GLIBC_2.2 getmsg F -GLIBC_2.2 getnameinfo F -GLIBC_2.2 getnetbyaddr F -GLIBC_2.2 getnetbyaddr_r F -GLIBC_2.2 getnetbyname F -GLIBC_2.2 getnetbyname_r F -GLIBC_2.2 getnetent F -GLIBC_2.2 getnetent_r F -GLIBC_2.2 getnetgrent F -GLIBC_2.2 getnetgrent_r F -GLIBC_2.2 getnetname F -GLIBC_2.2 getopt F -GLIBC_2.2 getopt_long F -GLIBC_2.2 getopt_long_only F -GLIBC_2.2 getpagesize F -GLIBC_2.2 getpass F -GLIBC_2.2 getpeername F -GLIBC_2.2 getpgid F -GLIBC_2.2 getpgrp F -GLIBC_2.2 getpid F -GLIBC_2.2 getpmsg F -GLIBC_2.2 getppid F -GLIBC_2.2 getpriority F -GLIBC_2.2 getprotobyname F -GLIBC_2.2 getprotobyname_r F -GLIBC_2.2 getprotobynumber F -GLIBC_2.2 getprotobynumber_r F -GLIBC_2.2 getprotoent F -GLIBC_2.2 getprotoent_r F -GLIBC_2.2 getpt F -GLIBC_2.2 getpublickey F -GLIBC_2.2 getpw F -GLIBC_2.2 getpwent F -GLIBC_2.2 getpwent_r F -GLIBC_2.2 getpwnam F -GLIBC_2.2 getpwnam_r F -GLIBC_2.2 getpwuid F -GLIBC_2.2 getpwuid_r F -GLIBC_2.2 getresgid F -GLIBC_2.2 getresuid F -GLIBC_2.2 getrlimit F -GLIBC_2.2 getrlimit64 F -GLIBC_2.2 getrpcbyname F -GLIBC_2.2 getrpcbyname_r F -GLIBC_2.2 getrpcbynumber F -GLIBC_2.2 getrpcbynumber_r F -GLIBC_2.2 getrpcent F -GLIBC_2.2 getrpcent_r F -GLIBC_2.2 getrpcport F -GLIBC_2.2 getrusage F -GLIBC_2.2 gets F -GLIBC_2.2 getsecretkey F -GLIBC_2.2 getservbyname F -GLIBC_2.2 getservbyname_r F -GLIBC_2.2 getservbyport F -GLIBC_2.2 getservbyport_r F -GLIBC_2.2 getservent F -GLIBC_2.2 getservent_r F -GLIBC_2.2 getsid F -GLIBC_2.2 getsockname F -GLIBC_2.2 getsockopt F -GLIBC_2.2 getspent F -GLIBC_2.2 getspent_r F -GLIBC_2.2 getspnam F -GLIBC_2.2 getspnam_r F -GLIBC_2.2 getsubopt F -GLIBC_2.2 gettext F -GLIBC_2.2 gettimeofday F -GLIBC_2.2 getttyent F -GLIBC_2.2 getttynam F -GLIBC_2.2 getuid F -GLIBC_2.2 getusershell F -GLIBC_2.2 getutent F -GLIBC_2.2 getutent_r F -GLIBC_2.2 getutid F -GLIBC_2.2 getutid_r F -GLIBC_2.2 getutline F -GLIBC_2.2 getutline_r F -GLIBC_2.2 getutmp F -GLIBC_2.2 getutmpx F -GLIBC_2.2 getutxent F -GLIBC_2.2 getutxid F -GLIBC_2.2 getutxline F -GLIBC_2.2 getw F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 getwd F -GLIBC_2.2 glob F -GLIBC_2.2 glob64 F -GLIBC_2.2 glob_pattern_p F -GLIBC_2.2 globfree F -GLIBC_2.2 globfree64 F -GLIBC_2.2 gmtime F -GLIBC_2.2 gmtime_r F -GLIBC_2.2 gnu_get_libc_release F -GLIBC_2.2 gnu_get_libc_version F -GLIBC_2.2 grantpt F -GLIBC_2.2 group_member F -GLIBC_2.2 gsignal F -GLIBC_2.2 gtty F -GLIBC_2.2 h_errlist D 0x14 -GLIBC_2.2 h_nerr D 0x4 -GLIBC_2.2 hasmntopt F -GLIBC_2.2 hcreate F -GLIBC_2.2 hcreate_r F -GLIBC_2.2 hdestroy F -GLIBC_2.2 hdestroy_r F -GLIBC_2.2 herror F -GLIBC_2.2 host2netname F -GLIBC_2.2 hsearch F -GLIBC_2.2 hsearch_r F -GLIBC_2.2 hstrerror F -GLIBC_2.2 htonl F -GLIBC_2.2 htons F -GLIBC_2.2 iconv F -GLIBC_2.2 iconv_close F -GLIBC_2.2 iconv_open F -GLIBC_2.2 if_freenameindex F -GLIBC_2.2 if_indextoname F -GLIBC_2.2 if_nameindex F -GLIBC_2.2 if_nametoindex F -GLIBC_2.2 imaxabs F -GLIBC_2.2 imaxdiv F -GLIBC_2.2 in6addr_any D 0x10 -GLIBC_2.2 in6addr_loopback D 0x10 -GLIBC_2.2 index F -GLIBC_2.2 inet_addr F -GLIBC_2.2 inet_aton F -GLIBC_2.2 inet_lnaof F -GLIBC_2.2 inet_makeaddr F -GLIBC_2.2 inet_netof F -GLIBC_2.2 inet_network F -GLIBC_2.2 inet_nsap_addr F -GLIBC_2.2 inet_nsap_ntoa F -GLIBC_2.2 inet_ntoa F -GLIBC_2.2 inet_ntop F -GLIBC_2.2 inet_pton F -GLIBC_2.2 init_module F -GLIBC_2.2 initgroups F -GLIBC_2.2 initstate F -GLIBC_2.2 initstate_r F -GLIBC_2.2 innetgr F -GLIBC_2.2 insque F -GLIBC_2.2 ioctl F -GLIBC_2.2 iruserok F -GLIBC_2.2 iruserok_af F -GLIBC_2.2 isalnum F -GLIBC_2.2 isalpha F -GLIBC_2.2 isascii F -GLIBC_2.2 isastream F -GLIBC_2.2 isatty F -GLIBC_2.2 isblank F -GLIBC_2.2 iscntrl F -GLIBC_2.2 isdigit F -GLIBC_2.2 isfdtype F -GLIBC_2.2 isgraph F -GLIBC_2.2 isinf F -GLIBC_2.2 isinff F -GLIBC_2.2 isinfl F -GLIBC_2.2 islower F -GLIBC_2.2 isnan F -GLIBC_2.2 isnanf F -GLIBC_2.2 isnanl F -GLIBC_2.2 isprint F -GLIBC_2.2 ispunct F -GLIBC_2.2 isspace F -GLIBC_2.2 isupper F -GLIBC_2.2 iswalnum F -GLIBC_2.2 iswalpha F -GLIBC_2.2 iswblank F -GLIBC_2.2 iswcntrl F -GLIBC_2.2 iswctype F -GLIBC_2.2 iswdigit F -GLIBC_2.2 iswgraph F -GLIBC_2.2 iswlower F -GLIBC_2.2 iswprint F -GLIBC_2.2 iswpunct F -GLIBC_2.2 iswspace F -GLIBC_2.2 iswupper F -GLIBC_2.2 iswxdigit F -GLIBC_2.2 isxdigit F -GLIBC_2.2 jrand48 F -GLIBC_2.2 jrand48_r F -GLIBC_2.2 key_decryptsession F -GLIBC_2.2 key_decryptsession_pk F -GLIBC_2.2 key_encryptsession F -GLIBC_2.2 key_encryptsession_pk F -GLIBC_2.2 key_gendes F -GLIBC_2.2 key_get_conv F -GLIBC_2.2 key_secretkey_is_set F -GLIBC_2.2 key_setnet F -GLIBC_2.2 key_setsecret F -GLIBC_2.2 kill F -GLIBC_2.2 killpg F -GLIBC_2.2 klogctl F -GLIBC_2.2 l64a F -GLIBC_2.2 labs F -GLIBC_2.2 lchown F -GLIBC_2.2 lckpwdf F -GLIBC_2.2 lcong48 F -GLIBC_2.2 lcong48_r F -GLIBC_2.2 ldexp F -GLIBC_2.2 ldexpf F -GLIBC_2.2 ldexpl F -GLIBC_2.2 ldiv F -GLIBC_2.2 lfind F -GLIBC_2.2 link F -GLIBC_2.2 listen F -GLIBC_2.2 llabs F -GLIBC_2.2 lldiv F -GLIBC_2.2 llseek F -GLIBC_2.2 loc1 D 0x4 -GLIBC_2.2 loc2 D 0x4 -GLIBC_2.2 localeconv F -GLIBC_2.2 localtime F -GLIBC_2.2 localtime_r F -GLIBC_2.2 lockf F -GLIBC_2.2 lockf64 F -GLIBC_2.2 locs D 0x4 -GLIBC_2.2 longjmp F -GLIBC_2.2 lrand48 F -GLIBC_2.2 lrand48_r F -GLIBC_2.2 lsearch F -GLIBC_2.2 lseek F -GLIBC_2.2 lseek64 F -GLIBC_2.2 madvise F -GLIBC_2.2 makecontext F -GLIBC_2.2 mallinfo F -GLIBC_2.2 malloc F -GLIBC_2.2 malloc_get_state F -GLIBC_2.2 malloc_set_state F -GLIBC_2.2 malloc_stats F -GLIBC_2.2 malloc_trim F -GLIBC_2.2 malloc_usable_size F -GLIBC_2.2 mallopt F -GLIBC_2.2 mallwatch D 0x4 -GLIBC_2.2 mblen F -GLIBC_2.2 mbrlen F -GLIBC_2.2 mbrtowc F -GLIBC_2.2 mbsinit F -GLIBC_2.2 mbsnrtowcs F -GLIBC_2.2 mbsrtowcs F -GLIBC_2.2 mbstowcs F -GLIBC_2.2 mbtowc F -GLIBC_2.2 mcheck F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 mcount F -GLIBC_2.2 memalign F -GLIBC_2.2 memccpy F -GLIBC_2.2 memchr F -GLIBC_2.2 memcmp F -GLIBC_2.2 memcpy F -GLIBC_2.2 memfrob F -GLIBC_2.2 memmem F -GLIBC_2.2 memmove F -GLIBC_2.2 mempcpy F -GLIBC_2.2 memrchr F -GLIBC_2.2 memset F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdir F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkfifo F -GLIBC_2.2 mkstemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 mktemp F -GLIBC_2.2 mktime F -GLIBC_2.2 mlock F -GLIBC_2.2 mlockall F -GLIBC_2.2 mmap F -GLIBC_2.2 mmap64 F -GLIBC_2.2 modf F -GLIBC_2.2 modff F -GLIBC_2.2 modfl F -GLIBC_2.2 moncontrol F -GLIBC_2.2 monstartup F -GLIBC_2.2 mount F -GLIBC_2.2 mprobe F -GLIBC_2.2 mprotect F -GLIBC_2.2 mrand48 F -GLIBC_2.2 mrand48_r F -GLIBC_2.2 mremap F -GLIBC_2.2 msgctl F -GLIBC_2.2 msgget F -GLIBC_2.2 msgrcv F -GLIBC_2.2 msgsnd F -GLIBC_2.2 msync F -GLIBC_2.2 mtrace F -GLIBC_2.2 munlock F -GLIBC_2.2 munlockall F -GLIBC_2.2 munmap F -GLIBC_2.2 muntrace F -GLIBC_2.2 nanosleep F -GLIBC_2.2 netname2host F -GLIBC_2.2 netname2user F -GLIBC_2.2 nfsservctl F -GLIBC_2.2 nftw F -GLIBC_2.2 nftw64 F -GLIBC_2.2 ngettext F -GLIBC_2.2 nice F -GLIBC_2.2 nl_langinfo F -GLIBC_2.2 nrand48 F -GLIBC_2.2 nrand48_r F -GLIBC_2.2 ntohl F -GLIBC_2.2 ntohs F -GLIBC_2.2 ntp_adjtime F -GLIBC_2.2 ntp_gettime F -GLIBC_2.2 obstack_alloc_failed_handler D 0x4 -GLIBC_2.2 obstack_exit_failure D 0x4 -GLIBC_2.2 obstack_free F -GLIBC_2.2 obstack_printf F -GLIBC_2.2 obstack_vprintf F -GLIBC_2.2 on_exit F -GLIBC_2.2 open F -GLIBC_2.2 open64 F -GLIBC_2.2 open_memstream F -GLIBC_2.2 opendir F -GLIBC_2.2 openlog F -GLIBC_2.2 optarg D 0x4 -GLIBC_2.2 opterr D 0x4 -GLIBC_2.2 optind D 0x4 -GLIBC_2.2 optopt D 0x4 -GLIBC_2.2 parse_printf_format F -GLIBC_2.2 passwd2des F -GLIBC_2.2 pathconf F -GLIBC_2.2 pause F -GLIBC_2.2 pclose F -GLIBC_2.2 perror F -GLIBC_2.2 personality F -GLIBC_2.2 pipe F -GLIBC_2.2 pmap_getmaps F -GLIBC_2.2 pmap_getport F -GLIBC_2.2 pmap_rmtcall F -GLIBC_2.2 pmap_set F -GLIBC_2.2 pmap_unset F -GLIBC_2.2 poll F -GLIBC_2.2 popen F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 prctl F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 printf F -GLIBC_2.2 printf_size F -GLIBC_2.2 printf_size_info F -GLIBC_2.2 profil F -GLIBC_2.2 program_invocation_name D 0x4 -GLIBC_2.2 program_invocation_short_name D 0x4 -GLIBC_2.2 pselect F -GLIBC_2.2 psignal F -GLIBC_2.2 pthread_attr_destroy F -GLIBC_2.2 pthread_attr_getdetachstate F -GLIBC_2.2 pthread_attr_getinheritsched F -GLIBC_2.2 pthread_attr_getschedparam F -GLIBC_2.2 pthread_attr_getschedpolicy F -GLIBC_2.2 pthread_attr_getscope F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 pthread_attr_setdetachstate F -GLIBC_2.2 pthread_attr_setinheritsched F -GLIBC_2.2 pthread_attr_setschedparam F -GLIBC_2.2 pthread_attr_setschedpolicy F -GLIBC_2.2 pthread_attr_setscope F -GLIBC_2.2 pthread_cond_broadcast F -GLIBC_2.2 pthread_cond_destroy F -GLIBC_2.2 pthread_cond_init F -GLIBC_2.2 pthread_cond_signal F -GLIBC_2.2 pthread_cond_timedwait F -GLIBC_2.2 pthread_cond_wait F -GLIBC_2.2 pthread_condattr_destroy F -GLIBC_2.2 pthread_condattr_init F -GLIBC_2.2 pthread_equal F -GLIBC_2.2 pthread_exit F -GLIBC_2.2 pthread_getschedparam F -GLIBC_2.2 pthread_mutex_destroy F -GLIBC_2.2 pthread_mutex_init F -GLIBC_2.2 pthread_mutex_lock F -GLIBC_2.2 pthread_mutex_unlock F -GLIBC_2.2 pthread_self F -GLIBC_2.2 pthread_setcancelstate F -GLIBC_2.2 pthread_setcanceltype F -GLIBC_2.2 pthread_setschedparam F -GLIBC_2.2 ptrace F -GLIBC_2.2 ptsname F -GLIBC_2.2 ptsname_r F -GLIBC_2.2 putc F -GLIBC_2.2 putc_unlocked F -GLIBC_2.2 putchar F -GLIBC_2.2 putchar_unlocked F -GLIBC_2.2 putenv F -GLIBC_2.2 putgrent F -GLIBC_2.2 putmsg F -GLIBC_2.2 putpmsg F -GLIBC_2.2 putpwent F -GLIBC_2.2 puts F -GLIBC_2.2 putspent F -GLIBC_2.2 pututline F -GLIBC_2.2 pututxline F -GLIBC_2.2 putw F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 pvalloc F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 qecvt F -GLIBC_2.2 qecvt_r F -GLIBC_2.2 qfcvt F -GLIBC_2.2 qfcvt_r F -GLIBC_2.2 qgcvt F -GLIBC_2.2 qsort F -GLIBC_2.2 query_module F -GLIBC_2.2 quotactl F -GLIBC_2.2 raise F -GLIBC_2.2 rand F -GLIBC_2.2 rand_r F -GLIBC_2.2 random F -GLIBC_2.2 random_r F -GLIBC_2.2 rawmemchr F -GLIBC_2.2 rcmd F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 re_comp F -GLIBC_2.2 re_compile_fastmap F -GLIBC_2.2 re_compile_pattern F -GLIBC_2.2 re_exec F -GLIBC_2.2 re_match F -GLIBC_2.2 re_match_2 F -GLIBC_2.2 re_max_failures D 0x4 -GLIBC_2.2 re_search F -GLIBC_2.2 re_search_2 F -GLIBC_2.2 re_set_registers F -GLIBC_2.2 re_set_syntax F -GLIBC_2.2 re_syntax_options D 0x4 -GLIBC_2.2 read F -GLIBC_2.2 readdir F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 readdir_r F -GLIBC_2.2 readlink F -GLIBC_2.2 readv F -GLIBC_2.2 realloc F -GLIBC_2.2 realpath F -GLIBC_2.2 reboot F -GLIBC_2.2 recv F -GLIBC_2.2 recvfrom F -GLIBC_2.2 recvmsg F -GLIBC_2.2 regcomp F -GLIBC_2.2 regerror F -GLIBC_2.2 regexec F -GLIBC_2.2 regfree F -GLIBC_2.2 register_printf_function F -GLIBC_2.2 registerrpc F -GLIBC_2.2 remove F -GLIBC_2.2 remque F -GLIBC_2.2 rename F -GLIBC_2.2 revoke F -GLIBC_2.2 rewind F -GLIBC_2.2 rewinddir F -GLIBC_2.2 rexec F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rexecoptions D 0x4 -GLIBC_2.2 rindex F -GLIBC_2.2 rmdir F -GLIBC_2.2 rpc_createerr D 0x10 -GLIBC_2.2 rpmatch F -GLIBC_2.2 rresvport F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 rtime F -GLIBC_2.2 ruserok F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 ruserpass F -GLIBC_2.2 sbrk F -GLIBC_2.2 scalbn F -GLIBC_2.2 scalbnf F -GLIBC_2.2 scalbnl F -GLIBC_2.2 scandir F -GLIBC_2.2 scandir64 F -GLIBC_2.2 scanf F -GLIBC_2.2 sched_get_priority_max F -GLIBC_2.2 sched_get_priority_min F -GLIBC_2.2 sched_getparam F -GLIBC_2.2 sched_getscheduler F -GLIBC_2.2 sched_rr_get_interval F -GLIBC_2.2 sched_setparam F -GLIBC_2.2 sched_setscheduler F -GLIBC_2.2 sched_yield F -GLIBC_2.2 seed48 F -GLIBC_2.2 seed48_r F -GLIBC_2.2 seekdir F -GLIBC_2.2 select F -GLIBC_2.2 semctl F -GLIBC_2.2 semget F -GLIBC_2.2 semop F -GLIBC_2.2 send F -GLIBC_2.2 sendfile F -GLIBC_2.2 sendmsg F -GLIBC_2.2 sendto F -GLIBC_2.2 setaliasent F -GLIBC_2.2 setbuf F -GLIBC_2.2 setbuffer F -GLIBC_2.2 setcontext F -GLIBC_2.2 setdomainname F -GLIBC_2.2 setegid F -GLIBC_2.2 setenv F -GLIBC_2.2 seteuid F -GLIBC_2.2 setfsent F -GLIBC_2.2 setfsgid F -GLIBC_2.2 setfsuid F -GLIBC_2.2 setgid F -GLIBC_2.2 setgrent F -GLIBC_2.2 setgroups F -GLIBC_2.2 sethostent F -GLIBC_2.2 sethostid F -GLIBC_2.2 sethostname F -GLIBC_2.2 setitimer F -GLIBC_2.2 setjmp F -GLIBC_2.2 setlinebuf F -GLIBC_2.2 setlocale F -GLIBC_2.2 setlogin F -GLIBC_2.2 setlogmask F -GLIBC_2.2 setmntent F -GLIBC_2.2 setnetent F -GLIBC_2.2 setnetgrent F -GLIBC_2.2 setpgid F -GLIBC_2.2 setpgrp F -GLIBC_2.2 setpriority F -GLIBC_2.2 setprotoent F -GLIBC_2.2 setpwent F -GLIBC_2.2 setregid F -GLIBC_2.2 setresgid F -GLIBC_2.2 setresuid F -GLIBC_2.2 setreuid F -GLIBC_2.2 setrlimit F -GLIBC_2.2 setrlimit64 F -GLIBC_2.2 setrpcent F -GLIBC_2.2 setservent F -GLIBC_2.2 setsid F -GLIBC_2.2 setsockopt F -GLIBC_2.2 setspent F -GLIBC_2.2 setstate F -GLIBC_2.2 setstate_r F -GLIBC_2.2 settimeofday F -GLIBC_2.2 setttyent F -GLIBC_2.2 setuid F -GLIBC_2.2 setusershell F -GLIBC_2.2 setutent F -GLIBC_2.2 setutxent F -GLIBC_2.2 setvbuf F -GLIBC_2.2 sgetspent F -GLIBC_2.2 sgetspent_r F -GLIBC_2.2 shmat F -GLIBC_2.2 shmctl F -GLIBC_2.2 shmdt F -GLIBC_2.2 shmget F -GLIBC_2.2 shutdown F -GLIBC_2.2 sigaction F -GLIBC_2.2 sigaddset F -GLIBC_2.2 sigaltstack F -GLIBC_2.2 sigandset F -GLIBC_2.2 sigblock F -GLIBC_2.2 sigdelset F -GLIBC_2.2 sigemptyset F -GLIBC_2.2 sigfillset F -GLIBC_2.2 siggetmask F -GLIBC_2.2 sighold F -GLIBC_2.2 sigignore F -GLIBC_2.2 siginterrupt F -GLIBC_2.2 sigisemptyset F -GLIBC_2.2 sigismember F -GLIBC_2.2 siglongjmp F -GLIBC_2.2 signal F -GLIBC_2.2 sigorset F -GLIBC_2.2 sigpause F -GLIBC_2.2 sigpending F -GLIBC_2.2 sigprocmask F -GLIBC_2.2 sigqueue F -GLIBC_2.2 sigrelse F -GLIBC_2.2 sigreturn F -GLIBC_2.2 sigset F -GLIBC_2.2 sigsetmask F -GLIBC_2.2 sigstack F -GLIBC_2.2 sigsuspend F -GLIBC_2.2 sigtimedwait F -GLIBC_2.2 sigvec F -GLIBC_2.2 sigwait F -GLIBC_2.2 sigwaitinfo F -GLIBC_2.2 sleep F -GLIBC_2.2 snprintf F -GLIBC_2.2 socket F -GLIBC_2.2 socketpair F -GLIBC_2.2 sprintf F -GLIBC_2.2 srand F -GLIBC_2.2 srand48 F -GLIBC_2.2 srand48_r F -GLIBC_2.2 srandom F -GLIBC_2.2 srandom_r F -GLIBC_2.2 sscanf F -GLIBC_2.2 ssignal F -GLIBC_2.2 sstk F -GLIBC_2.2 statfs F -GLIBC_2.2 statfs64 F -GLIBC_2.2 statvfs F -GLIBC_2.2 statvfs64 F -GLIBC_2.2 stderr D 0x4 -GLIBC_2.2 stdin D 0x4 -GLIBC_2.2 stdout D 0x4 -GLIBC_2.2 step F -GLIBC_2.2 stime F -GLIBC_2.2 stpcpy F -GLIBC_2.2 stpncpy F -GLIBC_2.2 strcasecmp F -GLIBC_2.2 strcasestr F -GLIBC_2.2 strcat F -GLIBC_2.2 strchr F -GLIBC_2.2 strchrnul F -GLIBC_2.2 strcmp F -GLIBC_2.2 strcoll F -GLIBC_2.2 strcpy F -GLIBC_2.2 strcspn F -GLIBC_2.2 strdup F -GLIBC_2.2 strerror F -GLIBC_2.2 strerror_r F -GLIBC_2.2 strfmon F -GLIBC_2.2 strfry F -GLIBC_2.2 strftime F -GLIBC_2.2 strlen F -GLIBC_2.2 strncasecmp F -GLIBC_2.2 strncat F -GLIBC_2.2 strncmp F -GLIBC_2.2 strncpy F -GLIBC_2.2 strndup F -GLIBC_2.2 strnlen F -GLIBC_2.2 strpbrk F -GLIBC_2.2 strptime F -GLIBC_2.2 strrchr F -GLIBC_2.2 strsep F -GLIBC_2.2 strsignal F -GLIBC_2.2 strspn F -GLIBC_2.2 strstr F -GLIBC_2.2 strtod F -GLIBC_2.2 strtof F -GLIBC_2.2 strtoimax F -GLIBC_2.2 strtok F -GLIBC_2.2 strtok_r F -GLIBC_2.2 strtol F -GLIBC_2.2 strtold F -GLIBC_2.2 strtoll F -GLIBC_2.2 strtoq F -GLIBC_2.2 strtoul F -GLIBC_2.2 strtoull F -GLIBC_2.2 strtoumax F -GLIBC_2.2 strtouq F -GLIBC_2.2 strverscmp F -GLIBC_2.2 strxfrm F -GLIBC_2.2 stty F -GLIBC_2.2 svc_exit F -GLIBC_2.2 svc_fdset D 0x80 -GLIBC_2.2 svc_getreq F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_getreqset F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x4 -GLIBC_2.2 svc_register F -GLIBC_2.2 svc_run F -GLIBC_2.2 svc_sendreply F -GLIBC_2.2 svc_unregister F -GLIBC_2.2 svcauthdes_stats D 0xc -GLIBC_2.2 svcerr_auth F -GLIBC_2.2 svcerr_decode F -GLIBC_2.2 svcerr_noproc F -GLIBC_2.2 svcerr_noprog F -GLIBC_2.2 svcerr_progvers F -GLIBC_2.2 svcerr_systemerr F -GLIBC_2.2 svcerr_weakauth F -GLIBC_2.2 svcfd_create F -GLIBC_2.2 svcraw_create F -GLIBC_2.2 svctcp_create F -GLIBC_2.2 svcudp_bufcreate F -GLIBC_2.2 svcudp_create F -GLIBC_2.2 svcudp_enablecache F -GLIBC_2.2 svcunix_create F -GLIBC_2.2 svcunixfd_create F -GLIBC_2.2 swab F -GLIBC_2.2 swapcontext F -GLIBC_2.2 swapoff F -GLIBC_2.2 swapon F -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 symlink F -GLIBC_2.2 sync F -GLIBC_2.2 sys_errlist D 0x1f4 -GLIBC_2.2 sys_nerr D 0x4 -GLIBC_2.2 sys_sigabbrev D 0x100 -GLIBC_2.2 sys_siglist D 0x100 -GLIBC_2.2 syscall F -GLIBC_2.2 sysconf F -GLIBC_2.2 sysctl F -GLIBC_2.2 sysinfo F -GLIBC_2.2 syslog F -GLIBC_2.2 system F -GLIBC_2.2 sysv_signal F -GLIBC_2.2 tcdrain F -GLIBC_2.2 tcflow F -GLIBC_2.2 tcflush F -GLIBC_2.2 tcgetattr F -GLIBC_2.2 tcgetpgrp F -GLIBC_2.2 tcgetsid F -GLIBC_2.2 tcsendbreak F -GLIBC_2.2 tcsetattr F -GLIBC_2.2 tcsetpgrp F -GLIBC_2.2 tdelete F -GLIBC_2.2 tdestroy F -GLIBC_2.2 telldir F -GLIBC_2.2 tempnam F -GLIBC_2.2 textdomain F -GLIBC_2.2 tfind F -GLIBC_2.2 time F -GLIBC_2.2 timegm F -GLIBC_2.2 timelocal F -GLIBC_2.2 times F -GLIBC_2.2 timezone D 0x4 -GLIBC_2.2 tmpfile F -GLIBC_2.2 tmpfile64 F -GLIBC_2.2 tmpnam F -GLIBC_2.2 tmpnam_r F -GLIBC_2.2 toascii F -GLIBC_2.2 tolower F -GLIBC_2.2 toupper F -GLIBC_2.2 towctrans F -GLIBC_2.2 towlower F -GLIBC_2.2 towupper F -GLIBC_2.2 tr_break F -GLIBC_2.2 truncate F -GLIBC_2.2 truncate64 F -GLIBC_2.2 tsearch F -GLIBC_2.2 ttyname F -GLIBC_2.2 ttyname_r F -GLIBC_2.2 ttyslot F -GLIBC_2.2 twalk F -GLIBC_2.2 tzname D 0x8 -GLIBC_2.2 tzset F -GLIBC_2.2 ualarm F -GLIBC_2.2 ulckpwdf F -GLIBC_2.2 ulimit F -GLIBC_2.2 umask F -GLIBC_2.2 umount F -GLIBC_2.2 umount2 F -GLIBC_2.2 uname F -GLIBC_2.2 ungetc F -GLIBC_2.2 ungetwc F -GLIBC_2.2 unlink F -GLIBC_2.2 unlockpt F -GLIBC_2.2 unsetenv F -GLIBC_2.2 updwtmp F -GLIBC_2.2 updwtmpx F -GLIBC_2.2 uselib F -GLIBC_2.2 user2netname F -GLIBC_2.2 usleep F -GLIBC_2.2 ustat F -GLIBC_2.2 utime F -GLIBC_2.2 utimes F -GLIBC_2.2 utmpname F -GLIBC_2.2 utmpxname F -GLIBC_2.2 valloc F -GLIBC_2.2 vasprintf F -GLIBC_2.2 vdprintf F -GLIBC_2.2 verr F -GLIBC_2.2 verrx F -GLIBC_2.2 versionsort F -GLIBC_2.2 versionsort64 F -GLIBC_2.2 vfork F -GLIBC_2.2 vfprintf F -GLIBC_2.2 vfscanf F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vhangup F -GLIBC_2.2 vlimit F -GLIBC_2.2 vprintf F -GLIBC_2.2 vscanf F -GLIBC_2.2 vsnprintf F -GLIBC_2.2 vsprintf F -GLIBC_2.2 vsscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vsyslog F -GLIBC_2.2 vtimes F -GLIBC_2.2 vwarn F -GLIBC_2.2 vwarnx F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 wait F -GLIBC_2.2 wait3 F -GLIBC_2.2 wait4 F -GLIBC_2.2 waitid F -GLIBC_2.2 waitpid F -GLIBC_2.2 warn F -GLIBC_2.2 warnx F -GLIBC_2.2 wcpcpy F -GLIBC_2.2 wcpncpy F -GLIBC_2.2 wcrtomb F -GLIBC_2.2 wcscasecmp F -GLIBC_2.2 wcscat F -GLIBC_2.2 wcschr F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcscmp F -GLIBC_2.2 wcscoll F -GLIBC_2.2 wcscpy F -GLIBC_2.2 wcscspn F -GLIBC_2.2 wcsdup F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wcslen F -GLIBC_2.2 wcsncasecmp F -GLIBC_2.2 wcsncat F -GLIBC_2.2 wcsncmp F -GLIBC_2.2 wcsncpy F -GLIBC_2.2 wcsnlen F -GLIBC_2.2 wcsnrtombs F -GLIBC_2.2 wcspbrk F -GLIBC_2.2 wcsrchr F -GLIBC_2.2 wcsrtombs F -GLIBC_2.2 wcsspn F -GLIBC_2.2 wcsstr F -GLIBC_2.2 wcstod F -GLIBC_2.2 wcstof F -GLIBC_2.2 wcstoimax F -GLIBC_2.2 wcstok F -GLIBC_2.2 wcstol F -GLIBC_2.2 wcstold F -GLIBC_2.2 wcstoll F -GLIBC_2.2 wcstombs F -GLIBC_2.2 wcstoq F -GLIBC_2.2 wcstoul F -GLIBC_2.2 wcstoull F -GLIBC_2.2 wcstoumax F -GLIBC_2.2 wcstouq F -GLIBC_2.2 wcswcs F -GLIBC_2.2 wcswidth F -GLIBC_2.2 wcsxfrm F -GLIBC_2.2 wctob F -GLIBC_2.2 wctomb F -GLIBC_2.2 wctrans F -GLIBC_2.2 wctype F -GLIBC_2.2 wcwidth F -GLIBC_2.2 wmemchr F -GLIBC_2.2 wmemcmp F -GLIBC_2.2 wmemcpy F -GLIBC_2.2 wmemmove F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wmemset F -GLIBC_2.2 wordexp F -GLIBC_2.2 wordfree F -GLIBC_2.2 wprintf F -GLIBC_2.2 write F -GLIBC_2.2 writev F -GLIBC_2.2 wscanf F -GLIBC_2.2 xdecrypt F -GLIBC_2.2 xdr_accepted_reply F -GLIBC_2.2 xdr_array F -GLIBC_2.2 xdr_authdes_cred F -GLIBC_2.2 xdr_authdes_verf F -GLIBC_2.2 xdr_authunix_parms F -GLIBC_2.2 xdr_bool F -GLIBC_2.2 xdr_bytes F -GLIBC_2.2 xdr_callhdr F -GLIBC_2.2 xdr_callmsg F -GLIBC_2.2 xdr_char F -GLIBC_2.2 xdr_cryptkeyarg F -GLIBC_2.2 xdr_cryptkeyarg2 F -GLIBC_2.2 xdr_cryptkeyres F -GLIBC_2.2 xdr_des_block F -GLIBC_2.2 xdr_double F -GLIBC_2.2 xdr_enum F -GLIBC_2.2 xdr_float F -GLIBC_2.2 xdr_free F -GLIBC_2.2 xdr_getcredres F -GLIBC_2.2 xdr_hyper F -GLIBC_2.2 xdr_int F -GLIBC_2.2 xdr_int16_t F -GLIBC_2.2 xdr_int32_t F -GLIBC_2.2 xdr_int64_t F -GLIBC_2.2 xdr_int8_t F -GLIBC_2.2 xdr_key_netstarg F -GLIBC_2.2 xdr_key_netstres F -GLIBC_2.2 xdr_keybuf F -GLIBC_2.2 xdr_keystatus F -GLIBC_2.2 xdr_long F -GLIBC_2.2 xdr_longlong_t F -GLIBC_2.2 xdr_netnamestr F -GLIBC_2.2 xdr_netobj F -GLIBC_2.2 xdr_opaque F -GLIBC_2.2 xdr_opaque_auth F -GLIBC_2.2 xdr_pmap F -GLIBC_2.2 xdr_pmaplist F -GLIBC_2.2 xdr_pointer F -GLIBC_2.2 xdr_reference F -GLIBC_2.2 xdr_rejected_reply F -GLIBC_2.2 xdr_replymsg F -GLIBC_2.2 xdr_rmtcall_args F -GLIBC_2.2 xdr_rmtcallres F -GLIBC_2.2 xdr_short F -GLIBC_2.2 xdr_sizeof F -GLIBC_2.2 xdr_string F -GLIBC_2.2 xdr_u_char F -GLIBC_2.2 xdr_u_hyper F -GLIBC_2.2 xdr_u_int F -GLIBC_2.2 xdr_u_long F -GLIBC_2.2 xdr_u_longlong_t F -GLIBC_2.2 xdr_u_short F -GLIBC_2.2 xdr_uint16_t F -GLIBC_2.2 xdr_uint32_t F -GLIBC_2.2 xdr_uint64_t F -GLIBC_2.2 xdr_uint8_t F -GLIBC_2.2 xdr_union F -GLIBC_2.2 xdr_unixcred F -GLIBC_2.2 xdr_vector F -GLIBC_2.2 xdr_void F -GLIBC_2.2 xdr_wrapstring F -GLIBC_2.2 xdrmem_create F -GLIBC_2.2 xdrrec_create F -GLIBC_2.2 xdrrec_endofrecord F -GLIBC_2.2 xdrrec_eof F -GLIBC_2.2 xdrrec_skiprecord F -GLIBC_2.2 xdrstdio_create F -GLIBC_2.2 xencrypt F -GLIBC_2.2 xprt_register F -GLIBC_2.2 xprt_unregister F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 _sys_errlist D 0x1f8 -GLIBC_2.3 _sys_nerr D 0x4 -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoll_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strtoull_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 sys_errlist D 0x1f8 -GLIBC_2.3 sys_nerr D 0x4 -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x104 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 posix_fadvise64 F -GLIBC_2.3.3 posix_fallocate64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 sys_sigabbrev D 0x104 -GLIBC_2.3.3 sys_siglist D 0x104 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 _sys_errlist D 0x210 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 futimesat F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sys_errlist D 0x210 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/sh/libcrypt.abilist b/sysdeps/unix/sysv/linux/sh/libcrypt.abilist deleted file mode 100644 index 4db2639336..0000000000 --- a/sysdeps/unix/sysv/linux/sh/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 crypt F -GLIBC_2.0 crypt_r F -GLIBC_2.0 encrypt F -GLIBC_2.0 encrypt_r F -GLIBC_2.0 fcrypt F -GLIBC_2.0 setkey F -GLIBC_2.0 setkey_r F diff --git a/sysdeps/unix/sysv/linux/sh/libdl.abilist b/sysdeps/unix/sysv/linux/sh/libdl.abilist deleted file mode 100644 index 5536f6e0a9..0000000000 --- a/sysdeps/unix/sysv/linux/sh/libdl.abilist +++ /dev/null @@ -1,14 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 dladdr F -GLIBC_2.0 dlclose F -GLIBC_2.0 dlerror F -GLIBC_2.0 dlopen F -GLIBC_2.0 dlsym F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 dlopen F -GLIBC_2.1 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F diff --git a/sysdeps/unix/sysv/linux/sh/libm.abilist b/sysdeps/unix/sysv/linux/sh/libm.abilist deleted file mode 100644 index 6b24852b68..0000000000 --- a/sysdeps/unix/sysv/linux/sh/libm.abilist +++ /dev/null @@ -1,433 +0,0 @@ -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _LIB_VERSION D 0x4 -GLIBC_2.2 __clog10 F -GLIBC_2.2 __clog10f F -GLIBC_2.2 __clog10l F -GLIBC_2.2 __finite F -GLIBC_2.2 __finitef F -GLIBC_2.2 __finitel F -GLIBC_2.2 __fpclassify F -GLIBC_2.2 __fpclassifyf F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 acos F -GLIBC_2.2 acosf F -GLIBC_2.2 acosh F -GLIBC_2.2 acoshf F -GLIBC_2.2 acoshl F -GLIBC_2.2 acosl F -GLIBC_2.2 asin F -GLIBC_2.2 asinf F -GLIBC_2.2 asinh F -GLIBC_2.2 asinhf F -GLIBC_2.2 asinhl F -GLIBC_2.2 asinl F -GLIBC_2.2 atan F -GLIBC_2.2 atan2 F -GLIBC_2.2 atan2f F -GLIBC_2.2 atan2l F -GLIBC_2.2 atanf F -GLIBC_2.2 atanh F -GLIBC_2.2 atanhf F -GLIBC_2.2 atanhl F -GLIBC_2.2 atanl F -GLIBC_2.2 cabs F -GLIBC_2.2 cabsf F -GLIBC_2.2 cabsl F -GLIBC_2.2 cacos F -GLIBC_2.2 cacosf F -GLIBC_2.2 cacosh F -GLIBC_2.2 cacoshf F -GLIBC_2.2 cacoshl F -GLIBC_2.2 cacosl F -GLIBC_2.2 carg F -GLIBC_2.2 cargf F -GLIBC_2.2 cargl F -GLIBC_2.2 casin F -GLIBC_2.2 casinf F -GLIBC_2.2 casinh F -GLIBC_2.2 casinhf F -GLIBC_2.2 casinhl F -GLIBC_2.2 casinl F -GLIBC_2.2 catan F -GLIBC_2.2 catanf F -GLIBC_2.2 catanh F -GLIBC_2.2 catanhf F -GLIBC_2.2 catanhl F -GLIBC_2.2 catanl F -GLIBC_2.2 cbrt F -GLIBC_2.2 cbrtf F -GLIBC_2.2 cbrtl F -GLIBC_2.2 ccos F -GLIBC_2.2 ccosf F -GLIBC_2.2 ccosh F -GLIBC_2.2 ccoshf F -GLIBC_2.2 ccoshl F -GLIBC_2.2 ccosl F -GLIBC_2.2 ceil F -GLIBC_2.2 ceilf F -GLIBC_2.2 ceill F -GLIBC_2.2 cexp F -GLIBC_2.2 cexpf F -GLIBC_2.2 cexpl F -GLIBC_2.2 cimag F -GLIBC_2.2 cimagf F -GLIBC_2.2 cimagl F -GLIBC_2.2 clog F -GLIBC_2.2 clog10 F -GLIBC_2.2 clog10f F -GLIBC_2.2 clog10l F -GLIBC_2.2 clogf F -GLIBC_2.2 clogl F -GLIBC_2.2 conj F -GLIBC_2.2 conjf F -GLIBC_2.2 conjl F -GLIBC_2.2 copysign F -GLIBC_2.2 copysignf F -GLIBC_2.2 copysignl F -GLIBC_2.2 cos F -GLIBC_2.2 cosf F -GLIBC_2.2 cosh F -GLIBC_2.2 coshf F -GLIBC_2.2 coshl F -GLIBC_2.2 cosl F -GLIBC_2.2 cpow F -GLIBC_2.2 cpowf F -GLIBC_2.2 cpowl F -GLIBC_2.2 cproj F -GLIBC_2.2 cprojf F -GLIBC_2.2 cprojl F -GLIBC_2.2 creal F -GLIBC_2.2 crealf F -GLIBC_2.2 creall F -GLIBC_2.2 csin F -GLIBC_2.2 csinf F -GLIBC_2.2 csinh F -GLIBC_2.2 csinhf F -GLIBC_2.2 csinhl F -GLIBC_2.2 csinl F -GLIBC_2.2 csqrt F -GLIBC_2.2 csqrtf F -GLIBC_2.2 csqrtl F -GLIBC_2.2 ctan F -GLIBC_2.2 ctanf F -GLIBC_2.2 ctanh F -GLIBC_2.2 ctanhf F -GLIBC_2.2 ctanhl F -GLIBC_2.2 ctanl F -GLIBC_2.2 drem F -GLIBC_2.2 dremf F -GLIBC_2.2 dreml F -GLIBC_2.2 erf F -GLIBC_2.2 erfc F -GLIBC_2.2 erfcf F -GLIBC_2.2 erfcl F -GLIBC_2.2 erff F -GLIBC_2.2 erfl F -GLIBC_2.2 exp F -GLIBC_2.2 exp10 F -GLIBC_2.2 exp10f F -GLIBC_2.2 exp10l F -GLIBC_2.2 exp2 F -GLIBC_2.2 exp2f F -GLIBC_2.2 expf F -GLIBC_2.2 expl F -GLIBC_2.2 expm1 F -GLIBC_2.2 expm1f F -GLIBC_2.2 expm1l F -GLIBC_2.2 fabs F -GLIBC_2.2 fabsf F -GLIBC_2.2 fabsl F -GLIBC_2.2 fdim F -GLIBC_2.2 fdimf F -GLIBC_2.2 fdiml F -GLIBC_2.2 feclearexcept F -GLIBC_2.2 fedisableexcept F -GLIBC_2.2 feenableexcept F -GLIBC_2.2 fegetenv F -GLIBC_2.2 fegetexcept F -GLIBC_2.2 fegetexceptflag F -GLIBC_2.2 fegetround F -GLIBC_2.2 feholdexcept F -GLIBC_2.2 feraiseexcept F -GLIBC_2.2 fesetenv F -GLIBC_2.2 fesetexceptflag F -GLIBC_2.2 fesetround F -GLIBC_2.2 fetestexcept F -GLIBC_2.2 feupdateenv F -GLIBC_2.2 finite F -GLIBC_2.2 finitef F -GLIBC_2.2 finitel F -GLIBC_2.2 floor F -GLIBC_2.2 floorf F -GLIBC_2.2 floorl F -GLIBC_2.2 fma F -GLIBC_2.2 fmaf F -GLIBC_2.2 fmal F -GLIBC_2.2 fmax F -GLIBC_2.2 fmaxf F -GLIBC_2.2 fmaxl F -GLIBC_2.2 fmin F -GLIBC_2.2 fminf F -GLIBC_2.2 fminl F -GLIBC_2.2 fmod F -GLIBC_2.2 fmodf F -GLIBC_2.2 fmodl F -GLIBC_2.2 frexp F -GLIBC_2.2 frexpf F -GLIBC_2.2 frexpl F -GLIBC_2.2 gamma F -GLIBC_2.2 gammaf F -GLIBC_2.2 gammal F -GLIBC_2.2 hypot F -GLIBC_2.2 hypotf F -GLIBC_2.2 hypotl F -GLIBC_2.2 ilogb F -GLIBC_2.2 ilogbf F -GLIBC_2.2 ilogbl F -GLIBC_2.2 j0 F -GLIBC_2.2 j0f F -GLIBC_2.2 j0l F -GLIBC_2.2 j1 F -GLIBC_2.2 j1f F -GLIBC_2.2 j1l F -GLIBC_2.2 jn F -GLIBC_2.2 jnf F -GLIBC_2.2 jnl F -GLIBC_2.2 ldexp F -GLIBC_2.2 ldexpf F -GLIBC_2.2 ldexpl F -GLIBC_2.2 lgamma F -GLIBC_2.2 lgamma_r F -GLIBC_2.2 lgammaf F -GLIBC_2.2 lgammaf_r F -GLIBC_2.2 lgammal F -GLIBC_2.2 lgammal_r F -GLIBC_2.2 llrint F -GLIBC_2.2 llrintf F -GLIBC_2.2 llrintl F -GLIBC_2.2 llround F -GLIBC_2.2 llroundf F -GLIBC_2.2 llroundl F -GLIBC_2.2 log F -GLIBC_2.2 log10 F -GLIBC_2.2 log10f F -GLIBC_2.2 log10l F -GLIBC_2.2 log1p F -GLIBC_2.2 log1pf F -GLIBC_2.2 log1pl F -GLIBC_2.2 log2 F -GLIBC_2.2 log2f F -GLIBC_2.2 log2l F -GLIBC_2.2 logb F -GLIBC_2.2 logbf F -GLIBC_2.2 logbl F -GLIBC_2.2 logf F -GLIBC_2.2 logl F -GLIBC_2.2 lrint F -GLIBC_2.2 lrintf F -GLIBC_2.2 lrintl F -GLIBC_2.2 lround F -GLIBC_2.2 lroundf F -GLIBC_2.2 lroundl F -GLIBC_2.2 matherr F -GLIBC_2.2 modf F -GLIBC_2.2 modff F -GLIBC_2.2 modfl F -GLIBC_2.2 nan F -GLIBC_2.2 nanf F -GLIBC_2.2 nanl F -GLIBC_2.2 nearbyint F -GLIBC_2.2 nearbyintf F -GLIBC_2.2 nearbyintl F -GLIBC_2.2 nextafter F -GLIBC_2.2 nextafterf F -GLIBC_2.2 nextafterl F -GLIBC_2.2 nexttoward F -GLIBC_2.2 nexttowardf F -GLIBC_2.2 nexttowardl F -GLIBC_2.2 pow F -GLIBC_2.2 pow10 F -GLIBC_2.2 pow10f F -GLIBC_2.2 pow10l F -GLIBC_2.2 powf F -GLIBC_2.2 powl F -GLIBC_2.2 remainder F -GLIBC_2.2 remainderf F -GLIBC_2.2 remainderl F -GLIBC_2.2 remquo F -GLIBC_2.2 remquof F -GLIBC_2.2 remquol F -GLIBC_2.2 rint F -GLIBC_2.2 rintf F -GLIBC_2.2 rintl F -GLIBC_2.2 round F -GLIBC_2.2 roundf F -GLIBC_2.2 roundl F -GLIBC_2.2 scalb F -GLIBC_2.2 scalbf F -GLIBC_2.2 scalbl F -GLIBC_2.2 scalbln F -GLIBC_2.2 scalblnf F -GLIBC_2.2 scalblnl F -GLIBC_2.2 scalbn F -GLIBC_2.2 scalbnf F -GLIBC_2.2 scalbnl F -GLIBC_2.2 signgam D 0x4 -GLIBC_2.2 significand F -GLIBC_2.2 significandf F -GLIBC_2.2 significandl F -GLIBC_2.2 sin F -GLIBC_2.2 sincos F -GLIBC_2.2 sincosf F -GLIBC_2.2 sincosl F -GLIBC_2.2 sinf F -GLIBC_2.2 sinh F -GLIBC_2.2 sinhf F -GLIBC_2.2 sinhl F -GLIBC_2.2 sinl F -GLIBC_2.2 sqrt F -GLIBC_2.2 sqrtf F -GLIBC_2.2 sqrtl F -GLIBC_2.2 tan F -GLIBC_2.2 tanf F -GLIBC_2.2 tanh F -GLIBC_2.2 tanhf F -GLIBC_2.2 tanhl F -GLIBC_2.2 tanl F -GLIBC_2.2 tgamma F -GLIBC_2.2 tgammaf F -GLIBC_2.2 tgammal F -GLIBC_2.2 trunc F -GLIBC_2.2 truncf F -GLIBC_2.2 truncl F -GLIBC_2.2 y0 F -GLIBC_2.2 y0f F -GLIBC_2.2 y0l F -GLIBC_2.2 y1 F -GLIBC_2.2 y1f F -GLIBC_2.2 y1l F -GLIBC_2.2 yn F -GLIBC_2.2 ynf F -GLIBC_2.2 ynl F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 exp2l F diff --git a/sysdeps/unix/sysv/linux/sh/libnsl.abilist b/sysdeps/unix/sysv/linux/sh/libnsl.abilist deleted file mode 100644 index a23db2aeaf..0000000000 --- a/sysdeps/unix/sysv/linux/sh/libnsl.abilist +++ /dev/null @@ -1,124 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __yp_check F -GLIBC_2.0 xdr_domainname F -GLIBC_2.0 xdr_keydat F -GLIBC_2.0 xdr_mapname F -GLIBC_2.0 xdr_peername F -GLIBC_2.0 xdr_valdat F -GLIBC_2.0 xdr_yp_buf F -GLIBC_2.0 xdr_ypbind_binding F -GLIBC_2.0 xdr_ypbind_resp F -GLIBC_2.0 xdr_ypbind_resptype F -GLIBC_2.0 xdr_ypbind_setdom F -GLIBC_2.0 xdr_ypdelete_args F -GLIBC_2.0 xdr_ypmap_parms F -GLIBC_2.0 xdr_ypmaplist F -GLIBC_2.0 xdr_yppush_status F -GLIBC_2.0 xdr_yppushresp_xfr F -GLIBC_2.0 xdr_ypreq_key F -GLIBC_2.0 xdr_ypreq_nokey F -GLIBC_2.0 xdr_ypreq_xfr F -GLIBC_2.0 xdr_ypresp_all F -GLIBC_2.0 xdr_ypresp_key_val F -GLIBC_2.0 xdr_ypresp_maplist F -GLIBC_2.0 xdr_ypresp_master F -GLIBC_2.0 xdr_ypresp_order F -GLIBC_2.0 xdr_ypresp_val F -GLIBC_2.0 xdr_ypresp_xfr F -GLIBC_2.0 xdr_ypstat F -GLIBC_2.0 xdr_ypupdate_args F -GLIBC_2.0 xdr_ypxfrstat F -GLIBC_2.0 yp_all F -GLIBC_2.0 yp_bind F -GLIBC_2.0 yp_first F -GLIBC_2.0 yp_get_default_domain F -GLIBC_2.0 yp_maplist F -GLIBC_2.0 yp_master F -GLIBC_2.0 yp_match F -GLIBC_2.0 yp_next F -GLIBC_2.0 yp_order F -GLIBC_2.0 yp_unbind F -GLIBC_2.0 yp_update F -GLIBC_2.0 ypbinderr_string F -GLIBC_2.0 yperr_string F -GLIBC_2.0 ypprot_err F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __free_fdresult F -GLIBC_2.1 __nis_default_access F -GLIBC_2.1 __nis_default_group F -GLIBC_2.1 __nis_default_owner F -GLIBC_2.1 __nis_default_ttl F -GLIBC_2.1 __nis_finddirectory F -GLIBC_2.1 __nis_hash F -GLIBC_2.1 __nisbind_connect F -GLIBC_2.1 __nisbind_create F -GLIBC_2.1 __nisbind_destroy F -GLIBC_2.1 __nisbind_next F -GLIBC_2.1 nis_add F -GLIBC_2.1 nis_add_entry F -GLIBC_2.1 nis_addmember F -GLIBC_2.1 nis_checkpoint F -GLIBC_2.1 nis_clone_directory F -GLIBC_2.1 nis_clone_object F -GLIBC_2.1 nis_clone_result F -GLIBC_2.1 nis_creategroup F -GLIBC_2.1 nis_destroy_object F -GLIBC_2.1 nis_destroygroup F -GLIBC_2.1 nis_dir_cmp F -GLIBC_2.1 nis_domain_of F -GLIBC_2.1 nis_domain_of_r F -GLIBC_2.1 nis_first_entry F -GLIBC_2.1 nis_free_directory F -GLIBC_2.1 nis_free_object F -GLIBC_2.1 nis_free_request F -GLIBC_2.1 nis_freenames F -GLIBC_2.1 nis_freeresult F -GLIBC_2.1 nis_freeservlist F -GLIBC_2.1 nis_freetags F -GLIBC_2.1 nis_getnames F -GLIBC_2.1 nis_getservlist F -GLIBC_2.1 nis_ismember F -GLIBC_2.1 nis_leaf_of F -GLIBC_2.1 nis_leaf_of_r F -GLIBC_2.1 nis_lerror F -GLIBC_2.1 nis_list F -GLIBC_2.1 nis_local_directory F -GLIBC_2.1 nis_local_group F -GLIBC_2.1 nis_local_host F -GLIBC_2.1 nis_local_principal F -GLIBC_2.1 nis_lookup F -GLIBC_2.1 nis_mkdir F -GLIBC_2.1 nis_modify F -GLIBC_2.1 nis_modify_entry F -GLIBC_2.1 nis_name_of F -GLIBC_2.1 nis_name_of_r F -GLIBC_2.1 nis_next_entry F -GLIBC_2.1 nis_perror F -GLIBC_2.1 nis_ping F -GLIBC_2.1 nis_print_directory F -GLIBC_2.1 nis_print_entry F -GLIBC_2.1 nis_print_group F -GLIBC_2.1 nis_print_group_entry F -GLIBC_2.1 nis_print_link F -GLIBC_2.1 nis_print_object F -GLIBC_2.1 nis_print_result F -GLIBC_2.1 nis_print_rights F -GLIBC_2.1 nis_print_table F -GLIBC_2.1 nis_read_obj F -GLIBC_2.1 nis_remove F -GLIBC_2.1 nis_remove_entry F -GLIBC_2.1 nis_removemember F -GLIBC_2.1 nis_rmdir F -GLIBC_2.1 nis_servstate F -GLIBC_2.1 nis_sperrno F -GLIBC_2.1 nis_sperror F -GLIBC_2.1 nis_sperror_r F -GLIBC_2.1 nis_stats F -GLIBC_2.1 nis_verifygroup F -GLIBC_2.1 nis_write_obj F -GLIBC_2.1 readColdStartFile F -GLIBC_2.1 writeColdStartFile F -GLIBC_2.1 xdr_cback_data F -GLIBC_2.1 xdr_obj_p F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 xdr_ypall F diff --git a/sysdeps/unix/sysv/linux/sh/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/libpthread.abilist deleted file mode 100644 index a73aa43c55..0000000000 --- a/sysdeps/unix/sysv/linux/sh/libpthread.abilist +++ /dev/null @@ -1,245 +0,0 @@ -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _IO_flockfile F -GLIBC_2.2 _IO_ftrylockfile F -GLIBC_2.2 _IO_funlockfile F -GLIBC_2.2 __close F -GLIBC_2.2 __connect F -GLIBC_2.2 __errno_location F -GLIBC_2.2 __fcntl F -GLIBC_2.2 __fork F -GLIBC_2.2 __h_errno_location F -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __lseek F -GLIBC_2.2 __open F -GLIBC_2.2 __open64 F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pthread_getspecific F -GLIBC_2.2 __pthread_key_create F -GLIBC_2.2 __pthread_mutex_destroy F -GLIBC_2.2 __pthread_mutex_init F -GLIBC_2.2 __pthread_mutex_lock F -GLIBC_2.2 __pthread_mutex_trylock F -GLIBC_2.2 __pthread_mutex_unlock F -GLIBC_2.2 __pthread_mutexattr_destroy F -GLIBC_2.2 __pthread_mutexattr_init F -GLIBC_2.2 __pthread_mutexattr_settype F -GLIBC_2.2 __pthread_once F -GLIBC_2.2 __pthread_rwlock_destroy F -GLIBC_2.2 __pthread_rwlock_init F -GLIBC_2.2 __pthread_rwlock_rdlock F -GLIBC_2.2 __pthread_rwlock_tryrdlock F -GLIBC_2.2 __pthread_rwlock_trywrlock F -GLIBC_2.2 __pthread_rwlock_unlock F -GLIBC_2.2 __pthread_rwlock_wrlock F -GLIBC_2.2 __pthread_setspecific F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __read F -GLIBC_2.2 __res_state F -GLIBC_2.2 __send F -GLIBC_2.2 __sigaction F -GLIBC_2.2 __vfork F -GLIBC_2.2 __wait F -GLIBC_2.2 __write F -GLIBC_2.2 _pthread_cleanup_pop F -GLIBC_2.2 _pthread_cleanup_pop_restore F -GLIBC_2.2 _pthread_cleanup_push F -GLIBC_2.2 _pthread_cleanup_push_defer F -GLIBC_2.2 accept F -GLIBC_2.2 close F -GLIBC_2.2 connect F -GLIBC_2.2 fcntl F -GLIBC_2.2 flockfile F -GLIBC_2.2 fork F -GLIBC_2.2 fsync F -GLIBC_2.2 ftrylockfile F -GLIBC_2.2 funlockfile F -GLIBC_2.2 longjmp F -GLIBC_2.2 lseek F -GLIBC_2.2 lseek64 F -GLIBC_2.2 msync F -GLIBC_2.2 nanosleep F -GLIBC_2.2 open F -GLIBC_2.2 open64 F -GLIBC_2.2 pause F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 pthread_atfork F -GLIBC_2.2 pthread_attr_destroy F -GLIBC_2.2 pthread_attr_getdetachstate F -GLIBC_2.2 pthread_attr_getguardsize F -GLIBC_2.2 pthread_attr_getinheritsched F -GLIBC_2.2 pthread_attr_getschedparam F -GLIBC_2.2 pthread_attr_getschedpolicy F -GLIBC_2.2 pthread_attr_getscope F -GLIBC_2.2 pthread_attr_getstack F -GLIBC_2.2 pthread_attr_getstackaddr F -GLIBC_2.2 pthread_attr_getstacksize F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 pthread_attr_setdetachstate F -GLIBC_2.2 pthread_attr_setguardsize F -GLIBC_2.2 pthread_attr_setinheritsched F -GLIBC_2.2 pthread_attr_setschedparam F -GLIBC_2.2 pthread_attr_setschedpolicy F -GLIBC_2.2 pthread_attr_setscope F -GLIBC_2.2 pthread_attr_setstack F -GLIBC_2.2 pthread_attr_setstackaddr F -GLIBC_2.2 pthread_attr_setstacksize F -GLIBC_2.2 pthread_barrier_destroy F -GLIBC_2.2 pthread_barrier_init F -GLIBC_2.2 pthread_barrier_wait F -GLIBC_2.2 pthread_barrierattr_destroy F -GLIBC_2.2 pthread_barrierattr_init F -GLIBC_2.2 pthread_barrierattr_setpshared F -GLIBC_2.2 pthread_cancel F -GLIBC_2.2 pthread_cond_broadcast F -GLIBC_2.2 pthread_cond_destroy F -GLIBC_2.2 pthread_cond_init F -GLIBC_2.2 pthread_cond_signal F -GLIBC_2.2 pthread_cond_timedwait F -GLIBC_2.2 pthread_cond_wait F -GLIBC_2.2 pthread_condattr_destroy F -GLIBC_2.2 pthread_condattr_getpshared F -GLIBC_2.2 pthread_condattr_init F -GLIBC_2.2 pthread_condattr_setpshared F -GLIBC_2.2 pthread_create F -GLIBC_2.2 pthread_detach F -GLIBC_2.2 pthread_equal F -GLIBC_2.2 pthread_exit F -GLIBC_2.2 pthread_getconcurrency F -GLIBC_2.2 pthread_getcpuclockid F -GLIBC_2.2 pthread_getschedparam F -GLIBC_2.2 pthread_getspecific F -GLIBC_2.2 pthread_join F -GLIBC_2.2 pthread_key_create F -GLIBC_2.2 pthread_key_delete F -GLIBC_2.2 pthread_kill F -GLIBC_2.2 pthread_kill_other_threads_np F -GLIBC_2.2 pthread_mutex_destroy F -GLIBC_2.2 pthread_mutex_init F -GLIBC_2.2 pthread_mutex_lock F -GLIBC_2.2 pthread_mutex_timedlock F -GLIBC_2.2 pthread_mutex_trylock F -GLIBC_2.2 pthread_mutex_unlock F -GLIBC_2.2 pthread_mutexattr_destroy F -GLIBC_2.2 pthread_mutexattr_getkind_np F -GLIBC_2.2 pthread_mutexattr_getpshared F -GLIBC_2.2 pthread_mutexattr_gettype F -GLIBC_2.2 pthread_mutexattr_init F -GLIBC_2.2 pthread_mutexattr_setkind_np F -GLIBC_2.2 pthread_mutexattr_setpshared F -GLIBC_2.2 pthread_mutexattr_settype F -GLIBC_2.2 pthread_once F -GLIBC_2.2 pthread_rwlock_destroy F -GLIBC_2.2 pthread_rwlock_init F -GLIBC_2.2 pthread_rwlock_rdlock F -GLIBC_2.2 pthread_rwlock_timedrdlock F -GLIBC_2.2 pthread_rwlock_timedwrlock F -GLIBC_2.2 pthread_rwlock_tryrdlock F -GLIBC_2.2 pthread_rwlock_trywrlock F -GLIBC_2.2 pthread_rwlock_unlock F -GLIBC_2.2 pthread_rwlock_wrlock F -GLIBC_2.2 pthread_rwlockattr_destroy F -GLIBC_2.2 pthread_rwlockattr_getkind_np F -GLIBC_2.2 pthread_rwlockattr_getpshared F -GLIBC_2.2 pthread_rwlockattr_init F -GLIBC_2.2 pthread_rwlockattr_setkind_np F -GLIBC_2.2 pthread_rwlockattr_setpshared F -GLIBC_2.2 pthread_self F -GLIBC_2.2 pthread_setcancelstate F -GLIBC_2.2 pthread_setcanceltype F -GLIBC_2.2 pthread_setconcurrency F -GLIBC_2.2 pthread_setschedparam F -GLIBC_2.2 pthread_setspecific F -GLIBC_2.2 pthread_sigmask F -GLIBC_2.2 pthread_spin_destroy F -GLIBC_2.2 pthread_spin_init F -GLIBC_2.2 pthread_spin_lock F -GLIBC_2.2 pthread_spin_trylock F -GLIBC_2.2 pthread_spin_unlock F -GLIBC_2.2 pthread_testcancel F -GLIBC_2.2 pthread_yield F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 raise F -GLIBC_2.2 read F -GLIBC_2.2 recv F -GLIBC_2.2 recvfrom F -GLIBC_2.2 recvmsg F -GLIBC_2.2 sem_close F -GLIBC_2.2 sem_destroy F -GLIBC_2.2 sem_getvalue F -GLIBC_2.2 sem_init F -GLIBC_2.2 sem_open F -GLIBC_2.2 sem_post F -GLIBC_2.2 sem_timedwait F -GLIBC_2.2 sem_trywait F -GLIBC_2.2 sem_unlink F -GLIBC_2.2 sem_wait F -GLIBC_2.2 send F -GLIBC_2.2 sendmsg F -GLIBC_2.2 sendto F -GLIBC_2.2 sigaction F -GLIBC_2.2 siglongjmp F -GLIBC_2.2 sigwait F -GLIBC_2.2 system F -GLIBC_2.2 tcdrain F -GLIBC_2.2 vfork F -GLIBC_2.2 wait F -GLIBC_2.2 waitpid F -GLIBC_2.2 write F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 pthread_getattr_np F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F diff --git a/sysdeps/unix/sysv/linux/sh/libresolv.abilist b/sysdeps/unix/sysv/linux/sh/libresolv.abilist deleted file mode 100644 index 4d50e7c8c6..0000000000 --- a/sysdeps/unix/sysv/linux/sh/libresolv.abilist +++ /dev/null @@ -1,100 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __b64_ntop F -GLIBC_2.0 __b64_pton F -GLIBC_2.0 __dn_comp F -GLIBC_2.0 __dn_count_labels F -GLIBC_2.0 __dn_skipname F -GLIBC_2.0 __fp_nquery F -GLIBC_2.0 __fp_query F -GLIBC_2.0 __fp_resstat F -GLIBC_2.0 __hostalias F -GLIBC_2.0 __loc_aton F -GLIBC_2.0 __loc_ntoa F -GLIBC_2.0 __p_cdname F -GLIBC_2.0 __p_cdnname F -GLIBC_2.0 __p_class F -GLIBC_2.0 __p_class_syms D 0x54 -GLIBC_2.0 __p_fqname F -GLIBC_2.0 __p_fqnname F -GLIBC_2.0 __p_option F -GLIBC_2.0 __p_query F -GLIBC_2.0 __p_secstodate F -GLIBC_2.0 __p_time F -GLIBC_2.0 __p_type F -GLIBC_2.0 __p_type_syms D 0x228 -GLIBC_2.0 __putlong F -GLIBC_2.0 __putshort F -GLIBC_2.0 __res_close F -GLIBC_2.0 __res_dnok F -GLIBC_2.0 __res_hnok F -GLIBC_2.0 __res_isourserver F -GLIBC_2.0 __res_mailok F -GLIBC_2.0 __res_nameinquery F -GLIBC_2.0 __res_ownok F -GLIBC_2.0 __res_queriesmatch F -GLIBC_2.0 __res_send F -GLIBC_2.0 __sym_ntop F -GLIBC_2.0 __sym_ntos F -GLIBC_2.0 __sym_ston F -GLIBC_2.0 _gethtbyaddr F -GLIBC_2.0 _gethtbyname F -GLIBC_2.0 _gethtbyname2 F -GLIBC_2.0 _gethtent F -GLIBC_2.0 _getlong F -GLIBC_2.0 _getshort F -GLIBC_2.0 _res_opcodes D 0x40 -GLIBC_2.0 _sethtent F -GLIBC_2.0 dn_expand F -GLIBC_2.0 inet_net_ntop F -GLIBC_2.0 inet_net_pton F -GLIBC_2.0 inet_neta F -GLIBC_2.0 res_gethostbyaddr F -GLIBC_2.0 res_gethostbyname F -GLIBC_2.0 res_gethostbyname2 F -GLIBC_2.0 res_mkquery F -GLIBC_2.0 res_query F -GLIBC_2.0 res_querydomain F -GLIBC_2.0 res_search F -GLIBC_2.0 res_send_setqhook F -GLIBC_2.0 res_send_setrhook F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __dn_expand F -GLIBC_2.2 __res_hostalias F -GLIBC_2.2 __res_mkquery F -GLIBC_2.2 __res_nmkquery F -GLIBC_2.2 __res_nquery F -GLIBC_2.2 __res_nquerydomain F -GLIBC_2.2 __res_nsearch F -GLIBC_2.2 __res_nsend F -GLIBC_2.2 __res_query F -GLIBC_2.2 __res_querydomain F -GLIBC_2.2 __res_search F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/sh/librt.abilist b/sysdeps/unix/sysv/linux/sh/librt.abilist deleted file mode 100644 index 15e4418863..0000000000 --- a/sysdeps/unix/sysv/linux/sh/librt.abilist +++ /dev/null @@ -1,47 +0,0 @@ -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 aio_cancel F -GLIBC_2.1 aio_cancel64 F -GLIBC_2.1 aio_error F -GLIBC_2.1 aio_error64 F -GLIBC_2.1 aio_fsync F -GLIBC_2.1 aio_fsync64 F -GLIBC_2.1 aio_init F -GLIBC_2.1 aio_read F -GLIBC_2.1 aio_read64 F -GLIBC_2.1 aio_return F -GLIBC_2.1 aio_return64 F -GLIBC_2.1 aio_suspend F -GLIBC_2.1 aio_suspend64 F -GLIBC_2.1 aio_write F -GLIBC_2.1 aio_write64 F -GLIBC_2.1 lio_listio F -GLIBC_2.1 lio_listio64 F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 clock_getcpuclockid F -GLIBC_2.2 clock_getres F -GLIBC_2.2 clock_gettime F -GLIBC_2.2 clock_nanosleep F -GLIBC_2.2 clock_settime F -GLIBC_2.2 shm_open F -GLIBC_2.2 shm_unlink F -GLIBC_2.2 timer_create F -GLIBC_2.2 timer_delete F -GLIBC_2.2 timer_getoverrun F -GLIBC_2.2 timer_gettime F -GLIBC_2.2 timer_settime F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/sh/libthread_db.abilist b/sysdeps/unix/sysv/linux/sh/libthread_db.abilist deleted file mode 100644 index a8a8c2c68d..0000000000 --- a/sysdeps/unix/sysv/linux/sh/libthread_db.abilist +++ /dev/null @@ -1,44 +0,0 @@ -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 td_init F -GLIBC_2.1.3 td_log F -GLIBC_2.1.3 td_ta_clear_event F -GLIBC_2.1.3 td_ta_delete F -GLIBC_2.1.3 td_ta_enable_stats F -GLIBC_2.1.3 td_ta_event_addr F -GLIBC_2.1.3 td_ta_event_getmsg F -GLIBC_2.1.3 td_ta_get_nthreads F -GLIBC_2.1.3 td_ta_get_ph F -GLIBC_2.1.3 td_ta_get_stats F -GLIBC_2.1.3 td_ta_map_id2thr F -GLIBC_2.1.3 td_ta_map_lwp2thr F -GLIBC_2.1.3 td_ta_new F -GLIBC_2.1.3 td_ta_reset_stats F -GLIBC_2.1.3 td_ta_set_event F -GLIBC_2.1.3 td_ta_setconcurrency F -GLIBC_2.1.3 td_ta_thr_iter F -GLIBC_2.1.3 td_ta_tsd_iter F -GLIBC_2.1.3 td_thr_clear_event F -GLIBC_2.1.3 td_thr_dbresume F -GLIBC_2.1.3 td_thr_dbsuspend F -GLIBC_2.1.3 td_thr_event_enable F -GLIBC_2.1.3 td_thr_event_getmsg F -GLIBC_2.1.3 td_thr_get_info F -GLIBC_2.1.3 td_thr_getfpregs F -GLIBC_2.1.3 td_thr_getgregs F -GLIBC_2.1.3 td_thr_getxregs F -GLIBC_2.1.3 td_thr_getxregsize F -GLIBC_2.1.3 td_thr_set_event F -GLIBC_2.1.3 td_thr_setfpregs F -GLIBC_2.1.3 td_thr_setgregs F -GLIBC_2.1.3 td_thr_setprio F -GLIBC_2.1.3 td_thr_setsigpending F -GLIBC_2.1.3 td_thr_setxregs F -GLIBC_2.1.3 td_thr_sigsetmask F -GLIBC_2.1.3 td_thr_tsd F -GLIBC_2.1.3 td_thr_validate F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 td_symbol_list F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F diff --git a/sysdeps/unix/sysv/linux/sh/libutil.abilist b/sysdeps/unix/sysv/linux/sh/libutil.abilist deleted file mode 100644 index 89c67755c4..0000000000 --- a/sysdeps/unix/sysv/linux/sh/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 forkpty F -GLIBC_2.0 login F -GLIBC_2.0 login_tty F -GLIBC_2.0 logout F -GLIBC_2.0 logwtmp F -GLIBC_2.0 openpty F diff --git a/sysdeps/unix/sysv/linux/sh/localplt.data b/sysdeps/unix/sysv/linux/sh/localplt.data deleted file mode 100644 index f1f5effc24..0000000000 --- a/sysdeps/unix/sysv/linux/sh/localplt.data +++ /dev/null @@ -1,21 +0,0 @@ -# See scripts/check-localplt.awk for how this file is processed. -# PLT use is required for the malloc family and for matherr because -# users can define their own functions and have library internals call them. -libc.so: calloc -libc.so: free -libc.so: malloc -libc.so: memalign -libc.so: realloc -libc.so: _Unwind_Find_FDE -libc.so: _exit -libc.so: __errno_location -libm.so: matherr -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/unix/sysv/linux/sh/lockf64.c b/sysdeps/unix/sysv/linux/sh/lockf64.c deleted file mode 100644 index a88f5a784a..0000000000 --- a/sysdeps/unix/sysv/linux/sh/lockf64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h b/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h deleted file mode 100644 index b8cc5b2c4c..0000000000 --- a/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef __ASSEMBLER__ - -#define _IMP1 #1 -#define _IMM1 #-1 -#define _IMM4 #-4 -#define _IMM6 #-6 -#define _IMM8 #-8 - -#define INC(mem, reg) \ - .align 2; \ - mova 99f, r0; \ - mov r15, r1; \ - mov _IMM6, r15; \ -98: mov.l mem, reg; \ - add _IMP1, reg; \ - mov.l reg, mem; \ -99: mov r1, r15 - -#define DEC(mem, reg) \ - .align 2; \ - mova 99f, r0; \ - mov r15, r1; \ - mov _IMM6, r15; \ -98: mov.l mem, reg; \ - add _IMM1, reg; \ - mov.l reg, mem; \ -99: mov r1, r15 - -#define XADD(reg, mem, old, tmp) \ - .align 2; \ - mova 99f, r0; \ - nop; \ - mov r15, r1; \ - mov _IMM8, r15; \ -98: mov.l mem, old; \ - mov reg, tmp; \ - add old, tmp; \ - mov.l tmp, mem; \ -99: mov r1, r15 - -#define XCHG(reg, mem, old) \ - .align 2; \ - mova 99f, r0; \ - nop; \ - mov r15, r1; \ - mov _IMM4, r15; \ -98: mov.l mem, old; \ - mov.l reg, mem; \ -99: mov r1, r15 - -#define CMPXCHG(reg, mem, new, old) \ - .align 2; \ - mova 99f, r0; \ - nop; \ - mov r15, r1; \ - mov _IMM8, r15; \ -98: mov.l mem, old; \ - cmp/eq old, reg; \ - bf 99f; \ - mov.l new, mem; \ -99: mov r1, r15 - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/unix/sysv/linux/sh/lxstat.c b/sysdeps/unix/sysv/linux/sh/lxstat.c deleted file mode 100644 index 2371cd9719..0000000000 --- a/sysdeps/unix/sysv/linux/sh/lxstat.c +++ /dev/null @@ -1,2 +0,0 @@ -#include - diff --git a/sysdeps/unix/sysv/linux/sh/makecontext.S b/sysdeps/unix/sysv/linux/sh/makecontext.S deleted file mode 100644 index 4506961007..0000000000 --- a/sysdeps/unix/sysv/linux/sh/makecontext.S +++ /dev/null @@ -1,160 +0,0 @@ -/* Create new context. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "ucontext_i.h" - -/* void __makecontext (struct ucontext *ucp, void (*func)(), int argc, ...); - __makecontext sets up a stack and registers for context to run a given - function. The registers are set up like this: - r4-r7: parameters 1 to 4 - r8 : uc_link from ucontext structure - pc : (*func) pointer - pr : address of exitcode - r15 : stack pointer for func. */ - - .text - .align 5 -ENTRY(__makecontext) - mov #4, r3 - mov.l @(oSS_SP,r4), r1 /* r1 <- ucb->stack_base */ - mov.l @(oSS_SIZE,r4), r2 /* r2 <- ucb->stack_size */ - add r1, r2 /* r2 <- stack_top */ - cmp/gt r3, r6 /* argc > 4? */ - bf/s 1f - shlr2 r2 /* r2 <- stack_top / 4 */ - sub r6, r2 - add r3, r2 -1: - shll2 r2 /* r2 <- stack_top - ((argc > 4) ? 4 * (argc - 4) : 0 */ - mov #oR15, r0 - mov.l @(oLINK,r4), r1 - mov.l r2, @(r0,r4) /* ucp->r15 <- r2 */ - mov.l r1, @(oR8,r4) /* ucp->r8 <- ucp->uc_link */ - mov #oPC, r0 - mov.l r5, @(r0,r4) /* ucp->PC <- func */ - - cmp/pl r6 /* argc > 0? */ - bf/s .L1 - dt r6 - mov.l r7, @(oR4,r4) /* ucp->r4 <- argv[0] */ - cmp/pl r6 /* argc > 1? */ - bf/s .L1 - dt r6 - mov.l @(0,r15), r1 - mov.l r1, @(oR5,r4) /* ucp->r5 <- argv[1] */ - cmp/pl r6 /* argc > 2? */ - bf/s .L1 - dt r6 - mov.l @(4,r15), r1 - mov.l r1, @(oR6,r4) /* ucp->r6 <- argv[2] */ - cmp/pl r6 /* argc > 3? */ - bf/s .L1 - dt r6 - mov.l @(8,r15), r1 - mov.l r1, @(oR7,r4) /* ucp->r7 <- argv[3] */ - mov #12,r0 -.L0: /* Save remaining argv[] on the stack. */ - cmp/pl r6 - bf/s .L1 - dt r6 - mov.l @(r0,r15), r1 - mov.l r1, @r2 - add #4, r0 - bra .L0 - add #4, r2 -.L1: -#ifdef PIC - mova .Lexitcode, r0 -#else - mov.l .L2, r0 -#endif - add #oPR, r4 - rts - mov.l r0, @r4 /* ucp->pr <- exitcode */ -#ifndef PIC - .align 2 -.L2: - .long .Lexitcode -#endif - cfi_endproc - - .align 5 - cfi_startproc -.Lexitcode: -#ifdef PIC - mov.l r12, @-r15 - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r12, 0) - mova .Lgot, r0 - mov.l .Lgot, r12 - add r0, r12 -#endif - tst r8, r8 /* ucb->uc_link == NULL? */ - bt/s 2f - mov r8, r4 /* r4 <- ucb->uc_link */ - mov.l .Lsetcontext, r1 - sts.l pr, @-r15 - cfi_adjust_cfa_offset (4) - cfi_rel_offset (pr, 0) -#ifdef PIC - bsrf r1 -.LPCS0: - nop -#else - jsr @r1 - nop -#endif - /* Restore to keep CFI/CFA balanced. */ - lds.l @r15+, pr - cfi_adjust_cfa_offset (-4) - cfi_restore (pr) - /* If this returns (which can happen if the syscall fails) we'll exit - the program with the return error value (-1). */ - mov r0, r4 - -2: - mov.l .Lexit, r1 -#ifdef PIC - add r12, r1 -#endif - jsr @r1 - nop - /* The 'exit' call should never return. In case it does cause the - process to terminate. */ - ABORT_INSTRUCTION_ASM - - .align 2 -#ifdef PIC -.Lgot: - .long _GLOBAL_OFFSET_TABLE_ -.Lsetcontext: - .long __setcontext@PLT-(.LPCS0+2-(.)) -.Lexit: - .long HIDDEN_JUMPTARGET(exit)@GOTOFF -#else -.Lsetcontext: - .long __setcontext -.Lexit: - .long HIDDEN_JUMPTARGET(exit) -#endif -PSEUDO_END(__makecontext) - -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/sh/pipe.S b/sysdeps/unix/sysv/linux/sh/pipe.S deleted file mode 100644 index 994d11ad5c..0000000000 --- a/sysdeps/unix/sysv/linux/sh/pipe.S +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__libc_pipe) - mov #+__NR_pipe, r3 - trapa #0x10 - mov r0, r3 - mov #-12, r2 - shad r2, r3 - not r3, r3 // r1=0 means r0 = -1 to -4095 - tst r3, r3 // i.e. error in linux - bt 1f - mov.l r0, @r4 - mov.l r1, @(4, r4) - rts - mov #0, r0 -1: - SYSCALL_ERROR_HANDLER -.Lpseudo_end: - rts - nop -PSEUDO_END (__libc_pipe) - -weak_alias (__libc_pipe, __pipe) -libc_hidden_def (__pipe) -weak_alias (__libc_pipe, pipe) diff --git a/sysdeps/unix/sysv/linux/sh/profil-counter.h b/sysdeps/unix/sysv/linux/sh/profil-counter.h deleted file mode 100644 index 98db140e04..0000000000 --- a/sysdeps/unix/sysv/linux/sh/profil-counter.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Low-level statistical profiling support function. Linux/SH version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -static void -__profil_counter (int signo, int _a2, int _a3, int _a4, struct sigcontext sc) -{ - void *pc; - pc = (void *) sc.sc_pc; - profil_count (pc); - - /* This is a hack to prevent the compiler from implementing the - above function call as a sibcall. The sibcall would overwrite - the signal context. */ - asm volatile (""); -} diff --git a/sysdeps/unix/sysv/linux/sh/pt-vfork.S b/sysdeps/unix/sysv/linux/sh/pt-vfork.S deleted file mode 100644 index 65cc3823ac..0000000000 --- a/sysdeps/unix/sysv/linux/sh/pt-vfork.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sh/sh3/getcontext.S b/sysdeps/unix/sysv/linux/sh/sh3/getcontext.S deleted file mode 100644 index c09c16937c..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sh3/getcontext.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Save current context. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - -/* int __getcontext (ucontext_t *uc); */ - - .text - .align 5 -ENTRY(__getcontext) - - /* Return value of getcontext. R0 is the only register whose - value is not preserved. */ - mov #0, r0 - mov.l r0, @(oR0,r4) - mov.l r1, @(oR1,r4) - mov.l r2, @(oR2,r4) - mov.l r3, @(oR3,r4) - mov.l r4, @(oR4,r4) - mov.l r5, @(oR5,r4) - mov.l r6, @(oR6,r4) - mov.l r7, @(oR7,r4) - mov r4, r0 - add #(oMACL+4), r0 - sts.l macl, @-r0 - sts.l mach, @-r0 - stc.l gbr, @-r0 - - /* Save T flag to SR. */ - movt r1 - mov.l r1, @-r0 - sts.l pr, @-r0 - - /* The return address of getcontext is the restart pc. */ - sts.l pr, @-r0 - - mov.l r15, @-r0 - mov.l r14, @-r0 - mov.l r13, @-r0 - mov.l r12, @-r0 - mov.l r11, @-r0 - mov.l r10, @-r0 - mov.l r9, @-r0 - mov.l r8, @-r0 - - /* sigprocmask (SIG_BLOCK, NULL, &uc->uc_sigmask). */ - mov r4, r6 - add #oSIGMASK, r6 - mov #SIG_BLOCK, r4 - mov #0, r5 - mov #+SYS_ify(sigprocmask), r3 - trapa #0x13 - mov r0, r1 - mov #-12, r2 - shad r2, r1 - not r1, r1 // r1=0 means r0 = -1 to -4095 - tst r1, r1 // i.e. error in linux - bf .Lgetcontext_end -.Lsyscall_error: - SYSCALL_ERROR_HANDLER -.Lgetcontext_end: - /* All done, return 0 for success. */ - mov #0, r0 -.Lpseudo_end: - rts - nop - -PSEUDO_END(__getcontext) - -weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/sh/sh3/register-dump.h b/sysdeps/unix/sysv/linux/sh/sh3/register-dump.h deleted file mode 100644 index f8530c43c0..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sh3/register-dump.h +++ /dev/null @@ -1,150 +0,0 @@ -/* Dump registers. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include <_itoa.h> - -/* We will print the register dump in this format: - - R0: XXXXXXXX R1: XXXXXXXX R2: XXXXXXXX R3: XXXXXXXX - R4: XXXXXXXX R5: XXXXXXXX R6: XXXXXXXX R7: XXXXXXXX - R8: XXXXXXXX R9: XXXXXXXX R10: XXXXXXXX R11: XXXXXXXX - R12: XXXXXXXX R13: XXXXXXXX R14: XXXXXXXX R15: XXXXXXXX - -MACL: XXXXXXXX MACH: XXXXXXXX - - PC: XXXXXXXX PR: XXXXXXXX GBR: XXXXXXXX SR: XXXXXXXX - - FR0: XXXXXXXX FR1: XXXXXXXX FR2: XXXXXXXX FR3: XXXXXXXX - FR4: XXXXXXXX FR5: XXXXXXXX FR6: XXXXXXXX FR7: XXXXXXXX - FR8: XXXXXXXX FR9: XXXXXXXX FR10: XXXXXXXX FR11: XXXXXXXX -FR12: XXXXXXXX FR13: XXXXXXXX FR14: XXXXXXXX FR15: XXXXXXXX - - XR0: XXXXXXXX XR1: XXXXXXXX XR2: XXXXXXXX XR3: XXXXXXXX - XR4: XXXXXXXX XR5: XXXXXXXX XR6: XXXXXXXX XR7: XXXXXXXX - XR8: XXXXXXXX XR9: XXXXXXXX XR10: XXXXXXXX XR11: XXXXXXXX -XR12: XXXXXXXX XR13: XXXXXXXX XR14: XXXXXXXX XR15: XXXXXXXX - -FPSCR: XXXXXXXX FPUL: XXXXXXXX - - */ - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -register_dump (int fd, struct sigcontext *ctx) -{ - char regs[22][8]; - struct iovec iov[112]; - size_t nr = 0; - -#define ADD_STRING(str) \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr -#define ADD_MEM(str, len) \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr - - /* Generate strings of register contents. */ - hexvalue (ctx->sc_regs[0], regs[0], 8); - hexvalue (ctx->sc_regs[1], regs[1], 8); - hexvalue (ctx->sc_regs[2], regs[2], 8); - hexvalue (ctx->sc_regs[3], regs[3], 8); - hexvalue (ctx->sc_regs[4], regs[4], 8); - hexvalue (ctx->sc_regs[5], regs[5], 8); - hexvalue (ctx->sc_regs[6], regs[6], 8); - hexvalue (ctx->sc_regs[7], regs[7], 8); - hexvalue (ctx->sc_regs[8], regs[8], 8); - hexvalue (ctx->sc_regs[9], regs[9], 8); - hexvalue (ctx->sc_regs[10], regs[10], 8); - hexvalue (ctx->sc_regs[11], regs[11], 8); - hexvalue (ctx->sc_regs[12], regs[12], 8); - hexvalue (ctx->sc_regs[13], regs[13], 8); - hexvalue (ctx->sc_regs[14], regs[14], 8); - hexvalue (ctx->sc_regs[15], regs[15], 8); - hexvalue (ctx->sc_macl, regs[16], 8); - hexvalue (ctx->sc_mach, regs[17], 8); - hexvalue (ctx->sc_pc, regs[18], 8); - hexvalue (ctx->sc_pr, regs[19], 8); - hexvalue (ctx->sc_gbr, regs[20], 8); - hexvalue (ctx->sc_sr, regs[21], 8); - - /* Generate the output. */ - ADD_STRING ("Register dump:\n\n R0: "); - ADD_MEM (regs[0], 8); - ADD_STRING (" R1: "); - ADD_MEM (regs[1], 8); - ADD_STRING (" R2: "); - ADD_MEM (regs[2], 8); - ADD_STRING (" R3: "); - ADD_MEM (regs[3], 8); - ADD_STRING ("\n R4: "); - ADD_MEM (regs[4], 8); - ADD_STRING (" R5: "); - ADD_MEM (regs[5], 8); - ADD_STRING (" R6: "); - ADD_MEM (regs[6], 8); - ADD_STRING (" R7: "); - ADD_MEM (regs[7], 8); - ADD_STRING ("\n R8: "); - ADD_MEM (regs[8], 8); - ADD_STRING (" R9: "); - ADD_MEM (regs[9], 8); - ADD_STRING (" R10: "); - ADD_MEM (regs[10], 8); - ADD_STRING (" R11: "); - ADD_MEM (regs[11], 8); - ADD_STRING ("\n R12: "); - ADD_MEM (regs[12], 8); - ADD_STRING (" R13: "); - ADD_MEM (regs[13], 8); - ADD_STRING (" R14: "); - ADD_MEM (regs[14], 8); - ADD_STRING (" R15: "); - ADD_MEM (regs[15], 8); - - ADD_STRING ("\n\nMACL: "); - ADD_MEM (regs[16], 8); - ADD_STRING (" MACH: "); - ADD_MEM (regs[17], 8); - - ADD_STRING ("\n\n PC: "); - ADD_MEM (regs[18], 8); - ADD_STRING (" PR: "); - ADD_MEM (regs[19], 8); - ADD_STRING (" GBR: "); - ADD_MEM (regs[20], 8); - ADD_STRING (" SR: "); - ADD_MEM (regs[21], 8); - - ADD_STRING ("\n"); - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, &ctx) diff --git a/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S b/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S deleted file mode 100644 index d97b064d2f..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S +++ /dev/null @@ -1,99 +0,0 @@ -/* Install given context. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - -/* int __setcontext (const ucontext_t *uc); */ - - .text - .align 5 -ENTRY(__setcontext) - - mov r4, r8 - - /* sigprocmask (SIG_SETMASK, &uc->uc_sigmask, NULL). */ - mov r4, r5 - add #oSIGMASK, r5 - mov #SIG_SETMASK, r4 - mov #0, r6 - mov #+SYS_ify(sigprocmask), r3 - trapa #0x13 - mov r0, r1 - mov #-12, r2 - shad r2, r1 - not r1, r1 // r1=0 means r0 = -1 to -4095 - tst r1, r1 // i.e. error in linux - bf .Lsetcontext_restore -.Lsyscall_error: - SYSCALL_ERROR_HANDLER -.Lpseudo_end: - rts - nop - -.Lsetcontext_restore: - mov r8, r0 - add #(oPC), r0 - mov.l @r0+, r2 - lds.l @r0+, pr - - /* Restore T frag. */ - mov.l @r0+, r1 - shlr r1 - /* Skip GBR which is used for thread pointer. */ - add #4, r0 - - lds.l @r0+, mach - lds.l @r0+, macl - - mov r8, r0 - add #(oR9), r0 - mov.l @r0+, r9 - mov.l @r0+, r10 - mov.l @r0+, r11 - mov.l @r0+, r12 - mov.l @r0+, r13 - mov.l @r0+, r14 - mov.l @r0+, r15 - - mov r8, r0 - mov.l @(oR0,r0), r1 - mov.l r1, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r1, 0) - mov.l r2, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r2, 0) - - mov.l @(oR1,r0), r1 - mov.l @(oR2,r0), r2 - mov.l @(oR3,r0), r3 - mov.l @(oR4,r0), r4 - mov.l @(oR5,r0), r5 - mov.l @(oR6,r0), r6 - mov.l @(oR7,r0), r7 - mov.l @(oR8,r0), r8 - mov.l @r15+, r0 - cfi_adjust_cfa_offset(-4) - jmp @r0 - mov.l @r15+, r0 - -PSEUDO_END(__setcontext) - -weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S b/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S deleted file mode 100644 index 986fcee47a..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S +++ /dev/null @@ -1,132 +0,0 @@ -/* Save current context and install the given one. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - -/* int __swapcontext (ucontext_t *ouc, const ucontext_t *uc); */ - - .text - .align 5 -ENTRY(__swapcontext) - - /* Return value of getcontext. R0 is the only register whose - value is not preserved. */ - mov #0, r0 - mov.l r0, @(oR0,r4) - mov.l r1, @(oR1,r4) - mov.l r2, @(oR2,r4) - mov.l r3, @(oR3,r4) - mov.l r4, @(oR4,r4) - mov.l r5, @(oR5,r4) - mov.l r6, @(oR6,r4) - mov.l r7, @(oR7,r4) - mov r4, r0 - add #(oMACL+4), r0 - sts.l macl, @-r0 - sts.l mach, @-r0 - stc.l gbr, @-r0 - - /* Save T flag to SR. */ - movt r1 - mov.l r1, @-r0 - sts.l pr, @-r0 - - /* The return address of getcontext is the restart pc. */ - sts.l pr, @-r0 - - mov.l r15, @-r0 - mov.l r14, @-r0 - mov.l r13, @-r0 - mov.l r12, @-r0 - mov.l r11, @-r0 - mov.l r10, @-r0 - mov.l r9, @-r0 - mov.l r8, @-r0 - - mov r5, r8 - - /* sigprocmask (SIG_SETMASK, &uc->uc_sigmask, &ouc->uc_sigmask). */ - add #oSIGMASK, r5 - mov r4, r6 - add #oSIGMASK, r6 - mov #SIG_SETMASK, r4 - mov #+SYS_ify(sigprocmask), r3 - trapa #0x13 - mov r0, r1 - mov #-12, r2 - shad r2, r1 - not r1, r1 // r1=0 means r0 = -1 to -4095 - tst r1, r1 // i.e. error in linux - bf .Lswapcontext_restore -.Lsyscall_error: - SYSCALL_ERROR_HANDLER -.Lpseudo_end: - rts - nop -.Lswapcontext_restore: - mov r8, r0 - add #(oPC), r0 - mov.l @r0+, r2 - lds.l @r0+, pr - - /* Restore T frag. */ - mov.l @r0+, r1 - shlr r1 - /* Skip GBR which is used for thread pointer. */ - add #4, r0 - - lds.l @r0+, mach - lds.l @r0+, macl - - mov r8, r0 - add #(oR9), r0 - mov.l @r0+, r9 - mov.l @r0+, r10 - mov.l @r0+, r11 - mov.l @r0+, r12 - mov.l @r0+, r13 - mov.l @r0+, r14 - mov.l @r0+, r15 - - mov r8, r0 - mov.l @(oR0,r0), r1 - mov.l r1, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r1, 0) - mov.l r2, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r2, 0) - - mov.l @(oR1,r0), r1 - mov.l @(oR2,r0), r2 - mov.l @(oR3,r0), r3 - mov.l @(oR4,r0), r4 - mov.l @(oR5,r0), r5 - mov.l @(oR6,r0), r6 - mov.l @(oR7,r0), r7 - mov.l @(oR8,r0), r8 - mov.l @r15+, r0 - cfi_adjust_cfa_offset(-4) - jmp @r0 - mov.l @r15+, r0 - -PSEUDO_END(__swapcontext) - -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/sh/sh3/ucontext_i.sym b/sysdeps/unix/sysv/linux/sh/sh3/ucontext_i.sym deleted file mode 100644 index 25f914a93b..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sh3/ucontext_i.sym +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include -#include - --- - -SIG_BLOCK -SIG_SETMASK - -#define ucontext(member) offsetof (ucontext_t, member) -#define mcontext(member) ucontext (uc_mcontext.member) - -oLINK ucontext (uc_link) -oSS_SP ucontext (uc_stack.ss_sp) -oSS_SIZE ucontext (uc_stack.ss_size) -oR0 mcontext (gregs[REG_R0]) -oR1 mcontext (gregs[REG_R1]) -oR2 mcontext (gregs[REG_R2]) -oR3 mcontext (gregs[REG_R3]) -oR4 mcontext (gregs[REG_R4]) -oR5 mcontext (gregs[REG_R5]) -oR6 mcontext (gregs[REG_R6]) -oR7 mcontext (gregs[REG_R7]) -oR8 mcontext (gregs[REG_R8]) -oR9 mcontext (gregs[REG_R9]) -oR10 mcontext (gregs[REG_R10]) -oR11 mcontext (gregs[REG_R11]) -oR12 mcontext (gregs[REG_R12]) -oR13 mcontext (gregs[REG_R13]) -oR14 mcontext (gregs[REG_R14]) -oR15 mcontext (gregs[REG_R15]) -oPC mcontext (pc) -oPR mcontext (pr) -oSR mcontext (sr) -oGBR mcontext (gbr) -oMACH mcontext (mach) -oMACL mcontext (macl) -oSIGMASK ucontext (uc_sigmask) diff --git a/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S b/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S deleted file mode 100644 index 40cabd1d91..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S +++ /dev/null @@ -1,132 +0,0 @@ -/* Save current context. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - -/* int __getcontext (ucontext_t *uc); */ - - .text - .align 5 -ENTRY(__getcontext) - - /* Return value of getcontext. R0 is the only register whose - value is not preserved. */ - mov #0, r0 - mov.l r0, @(oR0,r4) - mov.l r1, @(oR1,r4) - mov.l r2, @(oR2,r4) - mov.l r3, @(oR3,r4) - mov.l r4, @(oR4,r4) - mov.l r5, @(oR5,r4) - mov.l r6, @(oR6,r4) - mov.l r7, @(oR7,r4) - mov r4, r0 - add #(oMACL+4), r0 - sts.l macl, @-r0 - sts.l mach, @-r0 - stc.l gbr, @-r0 - - /* Save T flag to SR. */ - movt r1 - mov.l r1, @-r0 - sts.l pr, @-r0 - - /* The return address of getcontext is the restart pc. */ - sts.l pr, @-r0 - - mov.l r15, @-r0 - mov.l r14, @-r0 - mov.l r13, @-r0 - mov.l r12, @-r0 - mov.l r11, @-r0 - mov.l r10, @-r0 - mov.l r9, @-r0 - mov.l r8, @-r0 - -#ifdef __SH_FPU_ANY__ - mov r4, r0 - /* We need 2 add instruction because oFPUL+4 > 127. */ - add #124,r0 - add #(oFPUL+4-124),r0 - sts.l fpul, @-r0 - sts.l fpscr, @-r0 - frchg - fmov.s fr15, @-r0 - fmov.s fr14, @-r0 - fmov.s fr13, @-r0 - fmov.s fr12, @-r0 - fmov.s fr11, @-r0 - fmov.s fr10, @-r0 - fmov.s fr9, @-r0 - fmov.s fr8, @-r0 - fmov.s fr7, @-r0 - fmov.s fr6, @-r0 - fmov.s fr5, @-r0 - fmov.s fr4, @-r0 - fmov.s fr3, @-r0 - fmov.s fr2, @-r0 - fmov.s fr1, @-r0 - fmov.s fr0, @-r0 - frchg - fmov.s fr15, @-r0 - fmov.s fr14, @-r0 - fmov.s fr13, @-r0 - fmov.s fr12, @-r0 - fmov.s fr11, @-r0 - fmov.s fr10, @-r0 - fmov.s fr9, @-r0 - fmov.s fr8, @-r0 - fmov.s fr7, @-r0 - fmov.s fr6, @-r0 - fmov.s fr5, @-r0 - fmov.s fr4, @-r0 - fmov.s fr3, @-r0 - fmov.s fr2, @-r0 - fmov.s fr1, @-r0 - fmov.s fr0, @-r0 -#endif /* __SH_FPU_ANY__ */ - - /* sigprocmask (SIG_BLOCK, NULL, &uc->uc_sigmask). */ - mov r4, r6 - /* We need 2 add instruction because oSIGMASK > 127. */ - add #(oSIGMASK/2), r6 - add #(oSIGMASK/2), r6 - mov #SIG_BLOCK, r4 - mov #0, r5 - mov #+SYS_ify(sigprocmask), r3 - trapa #0x13 - mov r0, r1 - mov #-12, r2 - shad r2, r1 - not r1, r1 // r1=0 means r0 = -1 to -4095 - tst r1, r1 // i.e. error in linux - bf .Lgetcontext_end -.Lsyscall_error: - SYSCALL_ERROR_HANDLER -.Lgetcontext_end: - /* All done, return 0 for success. */ - mov #0, r0 -.Lpseudo_end: - rts - nop - -PSEUDO_END(__getcontext) - -weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/sh/sh4/register-dump.h b/sysdeps/unix/sysv/linux/sh/sh4/register-dump.h deleted file mode 100644 index 5595e90d91..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sh4/register-dump.h +++ /dev/null @@ -1,263 +0,0 @@ -/* Dump registers. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include <_itoa.h> - -/* We will print the register dump in this format: - - R0: XXXXXXXX R1: XXXXXXXX R2: XXXXXXXX R3: XXXXXXXX - R4: XXXXXXXX R5: XXXXXXXX R6: XXXXXXXX R7: XXXXXXXX - R8: XXXXXXXX R9: XXXXXXXX R10: XXXXXXXX R11: XXXXXXXX - R12: XXXXXXXX R13: XXXXXXXX R14: XXXXXXXX R15: XXXXXXXX - -MACL: XXXXXXXX MACH: XXXXXXXX - - PC: XXXXXXXX PR: XXXXXXXX GBR: XXXXXXXX SR: XXXXXXXX - - FR0: XXXXXXXX FR1: XXXXXXXX FR2: XXXXXXXX FR3: XXXXXXXX - FR4: XXXXXXXX FR5: XXXXXXXX FR6: XXXXXXXX FR7: XXXXXXXX - FR8: XXXXXXXX FR9: XXXXXXXX FR10: XXXXXXXX FR11: XXXXXXXX -FR12: XXXXXXXX FR13: XXXXXXXX FR14: XXXXXXXX FR15: XXXXXXXX - - XR0: XXXXXXXX XR1: XXXXXXXX XR2: XXXXXXXX XR3: XXXXXXXX - XR4: XXXXXXXX XR5: XXXXXXXX XR6: XXXXXXXX XR7: XXXXXXXX - XR8: XXXXXXXX XR9: XXXXXXXX XR10: XXXXXXXX XR11: XXXXXXXX -XR12: XXXXXXXX XR13: XXXXXXXX XR14: XXXXXXXX XR15: XXXXXXXX - -FPSCR: XXXXXXXX FPUL: XXXXXXXX - - */ - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -register_dump (int fd, struct sigcontext *ctx) -{ - char regs[22][8]; - struct iovec iov[22 * 2 + 34 * 2 + 2]; - size_t nr = 0; - -#define ADD_STRING(str) \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr -#define ADD_MEM(str, len) \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr - - /* Generate strings of register contents. */ - hexvalue (ctx->sc_regs[0], regs[0], 8); - hexvalue (ctx->sc_regs[1], regs[1], 8); - hexvalue (ctx->sc_regs[2], regs[2], 8); - hexvalue (ctx->sc_regs[3], regs[3], 8); - hexvalue (ctx->sc_regs[4], regs[4], 8); - hexvalue (ctx->sc_regs[5], regs[5], 8); - hexvalue (ctx->sc_regs[6], regs[6], 8); - hexvalue (ctx->sc_regs[7], regs[7], 8); - hexvalue (ctx->sc_regs[8], regs[8], 8); - hexvalue (ctx->sc_regs[9], regs[9], 8); - hexvalue (ctx->sc_regs[10], regs[10], 8); - hexvalue (ctx->sc_regs[11], regs[11], 8); - hexvalue (ctx->sc_regs[12], regs[12], 8); - hexvalue (ctx->sc_regs[13], regs[13], 8); - hexvalue (ctx->sc_regs[14], regs[14], 8); - hexvalue (ctx->sc_regs[15], regs[15], 8); - hexvalue (ctx->sc_macl, regs[16], 8); - hexvalue (ctx->sc_mach, regs[17], 8); - hexvalue (ctx->sc_pc, regs[18], 8); - hexvalue (ctx->sc_pr, regs[19], 8); - hexvalue (ctx->sc_gbr, regs[20], 8); - hexvalue (ctx->sc_sr, regs[21], 8); - - /* Generate the output. */ - ADD_STRING ("Register dump:\n\n R0: "); - ADD_MEM (regs[0], 8); - ADD_STRING (" R1: "); - ADD_MEM (regs[1], 8); - ADD_STRING (" R2: "); - ADD_MEM (regs[2], 8); - ADD_STRING (" R3: "); - ADD_MEM (regs[3], 8); - ADD_STRING ("\n R4: "); - ADD_MEM (regs[4], 8); - ADD_STRING (" R5: "); - ADD_MEM (regs[5], 8); - ADD_STRING (" R6: "); - ADD_MEM (regs[6], 8); - ADD_STRING (" R7: "); - ADD_MEM (regs[7], 8); - ADD_STRING ("\n R8: "); - ADD_MEM (regs[8], 8); - ADD_STRING (" R9: "); - ADD_MEM (regs[9], 8); - ADD_STRING (" R10: "); - ADD_MEM (regs[10], 8); - ADD_STRING (" R11: "); - ADD_MEM (regs[11], 8); - ADD_STRING ("\n R12: "); - ADD_MEM (regs[12], 8); - ADD_STRING (" R13: "); - ADD_MEM (regs[13], 8); - ADD_STRING (" R14: "); - ADD_MEM (regs[14], 8); - ADD_STRING (" R15: "); - ADD_MEM (regs[15], 8); - - ADD_STRING ("\n\nMACL: "); - ADD_MEM (regs[16], 8); - ADD_STRING (" MACH: "); - ADD_MEM (regs[17], 8); - - ADD_STRING ("\n\n PC: "); - ADD_MEM (regs[18], 8); - ADD_STRING (" PR: "); - ADD_MEM (regs[19], 8); - ADD_STRING (" GBR: "); - ADD_MEM (regs[20], 8); - ADD_STRING (" SR: "); - ADD_MEM (regs[21], 8); - - ADD_STRING ("\n"); - -#ifdef __SH_FPU_ANY__ - char fpregs[34][8]; - if (ctx->sc_ownedfp != 0) - { - hexvalue (ctx->sc_fpregs[0], fpregs[0], 8); - hexvalue (ctx->sc_fpregs[1], fpregs[1], 8); - hexvalue (ctx->sc_fpregs[2], fpregs[2], 8); - hexvalue (ctx->sc_fpregs[3], fpregs[3], 8); - hexvalue (ctx->sc_fpregs[4], fpregs[4], 8); - hexvalue (ctx->sc_fpregs[5], fpregs[5], 8); - hexvalue (ctx->sc_fpregs[6], fpregs[6], 8); - hexvalue (ctx->sc_fpregs[7], fpregs[7], 8); - hexvalue (ctx->sc_fpregs[8], fpregs[8], 8); - hexvalue (ctx->sc_fpregs[9], fpregs[9], 8); - hexvalue (ctx->sc_fpregs[10], fpregs[10], 8); - hexvalue (ctx->sc_fpregs[11], fpregs[11], 8); - hexvalue (ctx->sc_fpregs[12], fpregs[12], 8); - hexvalue (ctx->sc_fpregs[13], fpregs[13], 8); - hexvalue (ctx->sc_fpregs[14], fpregs[14], 8); - hexvalue (ctx->sc_fpregs[15], fpregs[15], 8); - hexvalue (ctx->sc_xfpregs[0], fpregs[16], 8); - hexvalue (ctx->sc_xfpregs[1], fpregs[17], 8); - hexvalue (ctx->sc_xfpregs[2], fpregs[18], 8); - hexvalue (ctx->sc_xfpregs[3], fpregs[19], 8); - hexvalue (ctx->sc_xfpregs[4], fpregs[20], 8); - hexvalue (ctx->sc_xfpregs[5], fpregs[21], 8); - hexvalue (ctx->sc_xfpregs[6], fpregs[22], 8); - hexvalue (ctx->sc_xfpregs[7], fpregs[23], 8); - hexvalue (ctx->sc_xfpregs[8], fpregs[24], 8); - hexvalue (ctx->sc_xfpregs[9], fpregs[25], 8); - hexvalue (ctx->sc_xfpregs[10], fpregs[26], 8); - hexvalue (ctx->sc_xfpregs[11], fpregs[27], 8); - hexvalue (ctx->sc_xfpregs[12], fpregs[28], 8); - hexvalue (ctx->sc_xfpregs[13], fpregs[29], 8); - hexvalue (ctx->sc_xfpregs[14], fpregs[30], 8); - hexvalue (ctx->sc_xfpregs[15], fpregs[31], 8); - hexvalue (ctx->sc_fpscr, fpregs[32], 8); - hexvalue (ctx->sc_fpul, fpregs[33], 8); - - ADD_STRING ("\n\n FR0: "); - ADD_MEM (fpregs[0], 8); - ADD_STRING (" FR1: "); - ADD_MEM (fpregs[1], 8); - ADD_STRING (" FR2: "); - ADD_MEM (fpregs[2], 8); - ADD_STRING (" FR3: "); - ADD_MEM (fpregs[3], 8); - ADD_STRING ("\n FR4: "); - ADD_MEM (fpregs[4], 8); - ADD_STRING (" FR5: "); - ADD_MEM (fpregs[5], 8); - ADD_STRING (" FR6: "); - ADD_MEM (fpregs[6], 8); - ADD_STRING (" FR7: "); - ADD_MEM (fpregs[7], 8); - ADD_STRING ("\n FR8: "); - ADD_MEM (fpregs[8], 8); - ADD_STRING (" FR9: "); - ADD_MEM (fpregs[9], 8); - ADD_STRING (" FR10: "); - ADD_MEM (fpregs[10], 8); - ADD_STRING (" FR11: "); - ADD_MEM (fpregs[11], 8); - ADD_STRING ("\nFR12: "); - ADD_MEM (fpregs[12], 8); - ADD_STRING (" FR13: "); - ADD_MEM (fpregs[13], 8); - ADD_STRING (" FR14: "); - ADD_MEM (fpregs[14], 8); - ADD_STRING (" FR15: "); - ADD_MEM (fpregs[15], 8); - ADD_STRING ("\n\n XR0: "); - ADD_MEM (fpregs[16], 8); - ADD_STRING (" XR1: "); - ADD_MEM (fpregs[17], 8); - ADD_STRING (" XR2: "); - ADD_MEM (fpregs[18], 8); - ADD_STRING (" XR3: "); - ADD_MEM (fpregs[19], 8); - ADD_STRING ("\n XR4: "); - ADD_MEM (fpregs[20], 8); - ADD_STRING (" XR5: "); - ADD_MEM (fpregs[21], 8); - ADD_STRING (" XR6: "); - ADD_MEM (fpregs[22], 8); - ADD_STRING (" XR7: "); - ADD_MEM (fpregs[23], 8); - ADD_STRING ("\n XR8: "); - ADD_MEM (fpregs[24], 8); - ADD_STRING (" XR9: "); - ADD_MEM (fpregs[25], 8); - ADD_STRING (" XR10: "); - ADD_MEM (fpregs[26], 8); - ADD_STRING (" XR11: "); - ADD_MEM (fpregs[27], 8); - ADD_STRING ("\nXR12: "); - ADD_MEM (fpregs[28], 8); - ADD_STRING (" XR13: "); - ADD_MEM (fpregs[29], 8); - ADD_STRING (" XR14: "); - ADD_MEM (fpregs[30], 8); - ADD_STRING (" XR15: "); - ADD_MEM (fpregs[31], 8); - - ADD_STRING ("\n\nFPSCR: "); - ADD_MEM (fpregs[32], 8); - ADD_STRING (" FPUL: "); - ADD_MEM (fpregs[33], 8); - - ADD_STRING ("\n"); - } -#endif /* __SH_FPU_ANY__ */ - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, &ctx) diff --git a/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S b/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S deleted file mode 100644 index e6672a6585..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S +++ /dev/null @@ -1,141 +0,0 @@ -/* Install given context. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - -/* int __setcontext (const ucontext_t *uc); */ - - .text - .align 5 -ENTRY(__setcontext) - - mov r4, r8 - - /* sigprocmask (SIG_SETMASK, &uc->uc_sigmask, NULL). */ - mov r4, r5 - add #(oSIGMASK/2), r5 - add #(oSIGMASK/2), r5 - mov #SIG_SETMASK, r4 - mov #0, r6 - mov #+SYS_ify(sigprocmask), r3 - trapa #0x13 - mov r0, r1 - mov #-12, r2 - shad r2, r1 - not r1, r1 // r1=0 means r0 = -1 to -4095 - tst r1, r1 // i.e. error in linux - bf .Lsetcontext_restore -.Lsyscall_error: - SYSCALL_ERROR_HANDLER -.Lpseudo_end: - rts - nop - -.Lsetcontext_restore: -#ifdef __SH_FPU_ANY__ - mov r8, r0 - add #(oFR0),r0 - fmov.s @r0+, fr0 - fmov.s @r0+, fr1 - fmov.s @r0+, fr2 - fmov.s @r0+, fr3 - fmov.s @r0+, fr4 - fmov.s @r0+, fr5 - fmov.s @r0+, fr6 - fmov.s @r0+, fr7 - fmov.s @r0+, fr8 - fmov.s @r0+, fr9 - fmov.s @r0+, fr10 - fmov.s @r0+, fr11 - fmov.s @r0+, fr12 - fmov.s @r0+, fr13 - fmov.s @r0+, fr14 - fmov.s @r0+, fr15 - frchg - fmov.s @r0+, fr0 - fmov.s @r0+, fr1 - fmov.s @r0+, fr2 - fmov.s @r0+, fr3 - fmov.s @r0+, fr4 - fmov.s @r0+, fr5 - fmov.s @r0+, fr6 - fmov.s @r0+, fr7 - fmov.s @r0+, fr8 - fmov.s @r0+, fr9 - fmov.s @r0+, fr10 - fmov.s @r0+, fr11 - fmov.s @r0+, fr12 - fmov.s @r0+, fr13 - fmov.s @r0+, fr14 - fmov.s @r0+, fr15 - frchg - lds.l @r0+, fpscr - lds.l @r0+, fpul -#endif /* __SH_FPU_ANY__ */ - - mov r8, r0 - add #(oPC), r0 - mov.l @r0+, r2 - lds.l @r0+, pr - - /* Restore T frag. */ - mov.l @r0+, r1 - shlr r1 - /* Skip GBR which is used for thread pointer. */ - add #4, r0 - - lds.l @r0+, mach - lds.l @r0+, macl - - mov r8, r0 - add #(oR9), r0 - mov.l @r0+, r9 - mov.l @r0+, r10 - mov.l @r0+, r11 - mov.l @r0+, r12 - mov.l @r0+, r13 - mov.l @r0+, r14 - mov.l @r0+, r15 - - mov r8, r0 - mov.l @(oR0,r0), r1 - mov.l r1, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r1, 0) - mov.l r2, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r2, 0) - - mov.l @(oR1,r0), r1 - mov.l @(oR2,r0), r2 - mov.l @(oR3,r0), r3 - mov.l @(oR4,r0), r4 - mov.l @(oR5,r0), r5 - mov.l @(oR6,r0), r6 - mov.l @(oR7,r0), r7 - mov.l @(oR8,r0), r8 - mov.l @r15+, r0 - cfi_adjust_cfa_offset(-4) - jmp @r0 - mov.l @r15+, r0 - -PSEUDO_END(__setcontext) - -weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S b/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S deleted file mode 100644 index 5f96790be1..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S +++ /dev/null @@ -1,218 +0,0 @@ -/* Save current context and install the given one. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - -/* int __swapcontext (ucontext_t *ouc, const ucontext_t *uc); */ - - .text - .align 5 -ENTRY(__swapcontext) - - /* Return value of getcontext. R0 is the only register whose - value is not preserved. */ - mov #0, r0 - mov.l r0, @(oR0,r4) - mov.l r1, @(oR1,r4) - mov.l r2, @(oR2,r4) - mov.l r3, @(oR3,r4) - mov.l r4, @(oR4,r4) - mov.l r5, @(oR5,r4) - mov.l r6, @(oR6,r4) - mov.l r7, @(oR7,r4) - mov r4, r0 - add #(oMACL+4), r0 - sts.l macl, @-r0 - sts.l mach, @-r0 - stc.l gbr, @-r0 - - /* Save T flag to SR. */ - movt r1 - mov.l r1, @-r0 - sts.l pr, @-r0 - - /* The return address of getcontext is the restart pc. */ - sts.l pr, @-r0 - - mov.l r15, @-r0 - mov.l r14, @-r0 - mov.l r13, @-r0 - mov.l r12, @-r0 - mov.l r11, @-r0 - mov.l r10, @-r0 - mov.l r9, @-r0 - mov.l r8, @-r0 - -#ifdef __SH_FPU_ANY__ - mov r4, r0 - /* We need 2 add instruction because oFPUL+4 >= 127. */ - add #124,r0 - add #(oFPUL+4-124),r0 - sts.l fpul, @-r0 - sts.l fpscr, @-r0 - frchg - fmov.s fr15, @-r0 - fmov.s fr14, @-r0 - fmov.s fr13, @-r0 - fmov.s fr12, @-r0 - fmov.s fr11, @-r0 - fmov.s fr10, @-r0 - fmov.s fr9, @-r0 - fmov.s fr8, @-r0 - fmov.s fr7, @-r0 - fmov.s fr6, @-r0 - fmov.s fr5, @-r0 - fmov.s fr4, @-r0 - fmov.s fr3, @-r0 - fmov.s fr2, @-r0 - fmov.s fr1, @-r0 - fmov.s fr0, @-r0 - frchg - fmov.s fr15, @-r0 - fmov.s fr14, @-r0 - fmov.s fr13, @-r0 - fmov.s fr12, @-r0 - fmov.s fr11, @-r0 - fmov.s fr10, @-r0 - fmov.s fr9, @-r0 - fmov.s fr8, @-r0 - fmov.s fr7, @-r0 - fmov.s fr6, @-r0 - fmov.s fr5, @-r0 - fmov.s fr4, @-r0 - fmov.s fr3, @-r0 - fmov.s fr2, @-r0 - fmov.s fr1, @-r0 - fmov.s fr0, @-r0 -#endif /* __SH_FPU_ANY__ */ - - mov r5, r8 - - /* sigprocmask (SIG_SETMASK, &uc->uc_sigmask, &ouc->uc_sigmask). */ - mov #oSIGMASK, r1 - extu.b r1, r1 - add r1, r5 - mov r4, r6 - add r1, r6 - mov #SIG_SETMASK, r4 - mov #+SYS_ify(sigprocmask), r3 - trapa #0x13 - mov r0, r1 - mov #-12, r2 - shad r2, r1 - not r1, r1 // r1=0 means r0 = -1 to -4095 - tst r1, r1 // i.e. error in linux - bf .Lswapcontext_restore -.Lsyscall_error: - SYSCALL_ERROR_HANDLER -.Lpseudo_end: - rts - nop -.Lswapcontext_restore: -#ifdef __SH_FPU_ANY__ - mov r8, r0 - add #(oFR0),r0 - fmov.s @r0+, fr0 - fmov.s @r0+, fr1 - fmov.s @r0+, fr2 - fmov.s @r0+, fr3 - fmov.s @r0+, fr4 - fmov.s @r0+, fr5 - fmov.s @r0+, fr6 - fmov.s @r0+, fr7 - fmov.s @r0+, fr8 - fmov.s @r0+, fr9 - fmov.s @r0+, fr10 - fmov.s @r0+, fr11 - fmov.s @r0+, fr12 - fmov.s @r0+, fr13 - fmov.s @r0+, fr14 - fmov.s @r0+, fr15 - frchg - fmov.s @r0+, fr0 - fmov.s @r0+, fr1 - fmov.s @r0+, fr2 - fmov.s @r0+, fr3 - fmov.s @r0+, fr4 - fmov.s @r0+, fr5 - fmov.s @r0+, fr6 - fmov.s @r0+, fr7 - fmov.s @r0+, fr8 - fmov.s @r0+, fr9 - fmov.s @r0+, fr10 - fmov.s @r0+, fr11 - fmov.s @r0+, fr12 - fmov.s @r0+, fr13 - fmov.s @r0+, fr14 - fmov.s @r0+, fr15 - frchg - lds.l @r0+, fpscr - lds.l @r0+, fpul -#endif /* __SH_FPU_ANY__ */ - - mov r8, r0 - add #(oPC), r0 - mov.l @r0+, r2 - lds.l @r0+, pr - - /* Restore T frag. */ - mov.l @r0+, r1 - shlr r1 - /* Skip GBR which is used for thread pointer. */ - add #4, r0 - - lds.l @r0+, mach - lds.l @r0+, macl - - mov r8, r0 - add #(oR9), r0 - mov.l @r0+, r9 - mov.l @r0+, r10 - mov.l @r0+, r11 - mov.l @r0+, r12 - mov.l @r0+, r13 - mov.l @r0+, r14 - mov.l @r0+, r15 - - mov r8, r0 - mov.l @(oR0,r0), r1 - mov.l r1, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r1, 0) - mov.l r2, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r2, 0) - - mov.l @(oR1,r0), r1 - mov.l @(oR2,r0), r2 - mov.l @(oR3,r0), r3 - mov.l @(oR4,r0), r4 - mov.l @(oR5,r0), r5 - mov.l @(oR6,r0), r6 - mov.l @(oR7,r0), r7 - mov.l @(oR8,r0), r8 - mov.l @r15+, r0 - cfi_adjust_cfa_offset(-4) - jmp @r0 - mov.l @r15+, r0 - -PSEUDO_END(__swapcontext) - -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/sh/sh4/sysdep.h b/sysdeps/unix/sysv/linux/sh/sh4/sysdep.h deleted file mode 100644 index 852f8eed7f..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sh4/sysdep.h +++ /dev/null @@ -1,4 +0,0 @@ -/* 4 instruction cycles not accessing cache and TLB are needed after - trapa instruction to avoid an SH-4 silicon bug. */ -#define NEED_SYSCALL_INST_PAD -#include diff --git a/sysdeps/unix/sysv/linux/sh/sh4/ucontext_i.sym b/sysdeps/unix/sysv/linux/sh/sh4/ucontext_i.sym deleted file mode 100644 index 130f60cd96..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sh4/ucontext_i.sym +++ /dev/null @@ -1,73 +0,0 @@ -#include -#include -#include - --- - -SIG_BLOCK -SIG_SETMASK - -#define ucontext(member) offsetof (ucontext_t, member) -#define mcontext(member) ucontext (uc_mcontext.member) - -oLINK ucontext (uc_link) -oSS_SP ucontext (uc_stack.ss_sp) -oSS_SIZE ucontext (uc_stack.ss_size) -oR0 mcontext (gregs[REG_R0]) -oR1 mcontext (gregs[REG_R1]) -oR2 mcontext (gregs[REG_R2]) -oR3 mcontext (gregs[REG_R3]) -oR4 mcontext (gregs[REG_R4]) -oR5 mcontext (gregs[REG_R5]) -oR6 mcontext (gregs[REG_R6]) -oR7 mcontext (gregs[REG_R7]) -oR8 mcontext (gregs[REG_R8]) -oR9 mcontext (gregs[REG_R9]) -oR10 mcontext (gregs[REG_R10]) -oR11 mcontext (gregs[REG_R11]) -oR12 mcontext (gregs[REG_R12]) -oR13 mcontext (gregs[REG_R13]) -oR14 mcontext (gregs[REG_R14]) -oR15 mcontext (gregs[REG_R15]) -oPC mcontext (pc) -oPR mcontext (pr) -oSR mcontext (sr) -oGBR mcontext (gbr) -oMACH mcontext (mach) -oMACL mcontext (macl) -oFR0 mcontext (fpregs[0]) -oFR1 mcontext (fpregs[1]) -oFR2 mcontext (fpregs[2]) -oFR3 mcontext (fpregs[3]) -oFR4 mcontext (fpregs[4]) -oFR5 mcontext (fpregs[5]) -oFR6 mcontext (fpregs[6]) -oFR7 mcontext (fpregs[7]) -oFR8 mcontext (fpregs[8]) -oFR9 mcontext (fpregs[9]) -oFR10 mcontext (fpregs[10]) -oFR11 mcontext (fpregs[11]) -oFR12 mcontext (fpregs[12]) -oFR13 mcontext (fpregs[13]) -oFR14 mcontext (fpregs[14]) -oFR15 mcontext (fpregs[15]) -oXFR0 mcontext (xfpregs[0]) -oXFR1 mcontext (xfpregs[1]) -oXFR2 mcontext (xfpregs[2]) -oXFR3 mcontext (xfpregs[3]) -oXFR4 mcontext (xfpregs[4]) -oXFR5 mcontext (xfpregs[5]) -oXFR6 mcontext (xfpregs[6]) -oXFR7 mcontext (xfpregs[7]) -oXFR8 mcontext (xfpregs[8]) -oXFR9 mcontext (xfpregs[9]) -oXFR10 mcontext (xfpregs[10]) -oXFR11 mcontext (xfpregs[11]) -oXFR12 mcontext (xfpregs[12]) -oXFR13 mcontext (xfpregs[13]) -oXFR14 mcontext (xfpregs[14]) -oXFR15 mcontext (xfpregs[15]) -oFPSCR mcontext (fpscr) -oFPUL mcontext (fpul) -oOWNEDFP mcontext (ownedfp) -oSIGMASK ucontext (uc_sigmask) diff --git a/sysdeps/unix/sysv/linux/sh/shlib-versions b/sysdeps/unix/sysv/linux/sh/shlib-versions deleted file mode 100644 index 9333bbd7a3..0000000000 --- a/sysdeps/unix/sysv/linux/sh/shlib-versions +++ /dev/null @@ -1,5 +0,0 @@ -libm=6 GLIBC_2.2 -libc=6 GLIBC_2.2 -ld=ld-linux.so.2 GLIBC_2.2 -libBrokenLocale=1 GLIBC_2.2 -libpthread=0 GLIBC_2.2 diff --git a/sysdeps/unix/sysv/linux/sh/sigaltstack-offsets.sym b/sysdeps/unix/sysv/linux/sh/sigaltstack-offsets.sym deleted file mode 100644 index f73446941a..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sigaltstack-offsets.sym +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include - --- - -#define sigaltstack(member) offsetof (stack_t, member) - -sizeSS sizeof (stack_t) -oSS_SP sigaltstack (ss_sp) -oSS_FLAGS sigaltstack (ss_flags) -oSS_SIZE sigaltstack (ss_size) - -SS_ONSTACK diff --git a/sysdeps/unix/sysv/linux/sh/sigcontextinfo.h b/sysdeps/unix/sysv/linux/sh/sigcontextinfo.h deleted file mode 100644 index 546f23bb3e..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sigcontextinfo.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define SIGCONTEXT int _a2, int _a3, int _a4, struct sigcontext - -#define SIGCONTEXT_EXTRA_ARGS _a2, _a3, _a4, -#define GET_PC(ctx) ((void *) ctx.sc_pc) -#define GET_FRAME(ctx) ((void *) ctx.sc_regs[14]) -#define GET_STACK(ctx) ((void *) ctx.sc_regs[15]) -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff --git a/sysdeps/unix/sysv/linux/sh/smp.h b/sysdeps/unix/sysv/linux/sh/smp.h deleted file mode 100644 index 8914a5b10c..0000000000 --- a/sysdeps/unix/sysv/linux/sh/smp.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Determine whether the host has multiple processors. SH version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -static inline int -is_smp_system (void) -{ - return 0; -} diff --git a/sysdeps/unix/sysv/linux/sh/sys/procfs.h b/sysdeps/unix/sysv/linux/sh/sys/procfs.h deleted file mode 100644 index 414911a661..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sys/procfs.h +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somehow modelled after the file of the same name on SysVr4 - systems. It provides a definition of the core file format for ELF - used on Linux. */ - -#include -#include -#include -#include - -__BEGIN_DECLS - -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - gdb doesn't really use excluded. Fields present but not used are - marked with "XXX". */ -struct elf_prstatus - { -#if 0 - long int pr_flags; /* XXX Process flags. */ - short int pr_why; /* XXX Reason for process halt. */ - short int pr_what; /* XXX More detailed reason. */ -#endif - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ -#if 0 - stack_t pr_altstack; /* Alternate stack info. */ - struct sigaction pr_action; /* Signal action for current sig. */ -#endif - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ -#if 0 - long int pr_instr; /* Current instruction. */ -#endif - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned short int pr_uid; - unsigned short int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore habe only ine PID type. */ -typedef __pid_t lwpid_t; - - -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/sh/sys/ucontext.h b/sysdeps/unix/sysv/linux/sh/sys/ucontext.h deleted file mode 100644 index d44f95e0f9..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sys/ucontext.h +++ /dev/null @@ -1,127 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Where is System V/SH ABI? */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - - -typedef int greg_t; - -/* Number of general registers. */ -#define __NGREG 16 -#ifdef __USE_MISC -# define NGREG __NGREG -#endif - -/* Container for all general registers. */ -typedef greg_t gregset_t[__NGREG]; - -#ifdef __USE_MISC -/* Number of each register is the `gregset_t' array. */ -enum -{ - REG_R0 = 0, -# define REG_R0 REG_R0 - REG_R1 = 1, -# define REG_R1 REG_R1 - REG_R2 = 2, -# define REG_R2 REG_R2 - REG_R3 = 3, -# define REG_R3 REG_R3 - REG_R4 = 4, -# define REG_R4 REG_R4 - REG_R5 = 5, -# define REG_R5 REG_R5 - REG_R6 = 6, -# define REG_R6 REG_R6 - REG_R7 = 7, -# define REG_R7 REG_R7 - REG_R8 = 8, -# define REG_R8 REG_R8 - REG_R9 = 9, -# define REG_R9 REG_R9 - REG_R10 = 10, -# define REG_R10 REG_R10 - REG_R11 = 11, -# define REG_R11 REG_R11 - REG_R12 = 12, -# define REG_R12 REG_R12 - REG_R13 = 13, -# define REG_R13 REG_R13 - REG_R14 = 14, -# define REG_R14 REG_R14 - REG_R15 = 15, -# define REG_R15 REG_R15 -}; -#endif - -typedef int freg_t; - -/* Number of FPU registers. */ -#define __NFPREG 16 -#ifdef __USE_MISC -# define NFPREG __NFPREG -#endif - -/* Structure to describe FPU registers. */ -typedef freg_t fpregset_t[__NFPREG]; - -#ifdef __USE_MISC -# define __ctx(fld) fld -#else -# define __ctx(fld) __ ## fld -#endif - -/* Context to describe whole processor state. */ -typedef struct - { - unsigned int __ctx(oldmask); - gregset_t __ctx(gregs); - unsigned int __ctx(pc); - unsigned int __ctx(pr); - unsigned int __ctx(sr); - unsigned int __ctx(gbr); - unsigned int __ctx(mach); - unsigned int __ctx(macl); - fpregset_t __ctx(fpregs); - fpregset_t __ctx(xfpregs); - unsigned int __ctx(fpscr); - unsigned int __ctx(fpul); - unsigned int __ctx(ownedfp); - } mcontext_t; - -#undef __ctx - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - sigset_t uc_sigmask; - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/sh/sys/user.h b/sysdeps/unix/sysv/linux/sh/sys/user.h deleted file mode 100644 index 2ecda2d962..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sys/user.h +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_USER_H -#define _SYS_USER_H 1 - -#include -#include - -/* asm/ptrace.h polutes the namespace. */ -#undef PTRACE_GETREGS -#undef PTRACE_SETREGS -#undef PTRACE_GETFPREGS -#undef PTRACE_SETFPREGS -#undef PTRACE_GETFDPIC -#undef PTRACE_GETFDPIC_EXEC -#undef PTRACE_GETFDPIC_INTERP -#undef PTRACE_GETDSPREGS -#undef PTRACE_SETDSPREGS - -typedef unsigned long elf_greg_t; - -#define ELF_NGREG (sizeof (struct pt_regs) / sizeof (elf_greg_t)) -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -struct user_fpu_struct - { - unsigned long fp_regs[16]; - unsigned long xfp_regs[16]; - unsigned long fpscr; - unsigned long fpul; - }; -typedef struct user_fpu_struct elf_fpregset_t; - -struct user - { - struct pt_regs regs; - struct user_fpu_struct fpu; - int u_fpvalid; - size_t u_tsize; - size_t u_dsize; - size_t u_ssize; - unsigned long start_code; - unsigned long start_data; - unsigned long start_stack; - long int signal; - unsigned long u_ar0; - struct user_fpu_struct *u_fpstate; - unsigned long magic; - char u_comm[32]; - }; - -#endif /* sys/user.h */ diff --git a/sysdeps/unix/sysv/linux/sh/syscall.S b/sysdeps/unix/sysv/linux/sh/syscall.S deleted file mode 100644 index af1695bc44..0000000000 --- a/sysdeps/unix/sysv/linux/sh/syscall.S +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY (__syscall) - mov r4, r3 // syscall number - mov r5, r4 // p1 - mov r6, r5 // p2 - mov r7, r6 // p3 - mov.l @r15, r7 // p4 - mov.l @(4,r15), r0 // p5 - mov.l @(8,r15), r1 // p6 - mov.l @(12,r15), r2 // p7 - trapa #0x17 - mov r0, r1 - mov #-12, r2 - shad r2, r1 - not r1, r1 // r1=0 means r0 = -1 to -4095 - tst r1, r1 // i.e. error in linux - bf .Lpseudo_end - SYSCALL_ERROR_HANDLER -.Lpseudo_end: - rts - nop - -PSEUDO_END (__syscall) - -weak_alias (__syscall, syscall) diff --git a/sysdeps/unix/sysv/linux/sh/syscalls.list b/sysdeps/unix/sysv/linux/sh/syscalls.list deleted file mode 100644 index 32badd1ee0..0000000000 --- a/sysdeps/unix/sysv/linux/sh/syscalls.list +++ /dev/null @@ -1,22 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -chown - chown32 i:sii __chown chown -lchown - lchown32 i:sii __lchown lchown -fchown - fchown32 i:iii __fchown fchown - -getegid - getegid32 Ei: __getegid getegid -geteuid - geteuid32 Ei: __geteuid geteuid -getgid - getgid32 Ei: __getgid getgid -getuid - getuid32 Ei: __getuid getuid -getresgid - getresgid32 i:ppp __getresgid getresgid -getresuid - getresuid32 i:ppp __getresuid getresuid -getgroups - getgroups32 i:ip __getgroups getgroups - -setfsgid - setfsgid32 Ei:i setfsgid -setfsuid - setfsuid32 Ei:i setfsuid - -prlimit64 EXTRA prlimit64 i:iipp prlimit64 - -fanotify_mark EXTRA fanotify_mark i:iiiiis __fanotify_mark fanotify_mark@@GLIBC_2.16 - -personality EXTRA personality Ei:i __personality personality diff --git a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h deleted file mode 100644 index 5645cadbcd..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h +++ /dev/null @@ -1,169 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# define _IMM12 #-12 -# define _IMM16 #-16 -# define _IMP16 #16 -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name); \ - .Lpseudo_start: \ - SINGLE_THREAD_P; \ - bf .Lpseudo_cancel; \ - .type __##syscall_name##_nocancel,@function; \ - .globl __##syscall_name##_nocancel; \ - __##syscall_name##_nocancel: \ - DO_CALL (syscall_name, args); \ - mov r0,r1; \ - mov _IMM12,r2; \ - shad r2,r1; \ - not r1,r1; \ - tst r1,r1; \ - bt .Lsyscall_error; \ - bra .Lpseudo_end; \ - nop; \ - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ - .Lpseudo_cancel: \ - sts.l pr,@-r15; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (pr, 0); \ - add _IMM16,r15; \ - cfi_adjust_cfa_offset (16); \ - SAVE_ARGS_##args; \ - CENABLE; \ - LOAD_ARGS_##args; \ - add _IMP16,r15; \ - cfi_adjust_cfa_offset (-16); \ - lds.l @r15+,pr; \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (pr); \ - DO_CALL(syscall_name, args); \ - SYSCALL_INST_PAD; \ - sts.l pr,@-r15; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (pr, 0); \ - mov.l r0,@-r15; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (r0, 0); \ - CDISABLE; \ - mov.l @r15+,r0; \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (r0); \ - lds.l @r15+,pr; \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (pr); \ - mov r0,r1; \ - mov _IMM12,r2; \ - shad r2,r1; \ - not r1,r1; \ - tst r1,r1; \ - bf .Lpseudo_end; \ - .Lsyscall_error: \ - SYSCALL_ERROR_HANDLER; \ - .Lpseudo_end: - -# undef PSEUDO_END -# define PSEUDO_END(sym) \ - END (sym) - -# define SAVE_ARGS_0 /* Nothing. */ -# define SAVE_ARGS_1 SAVE_ARGS_0; mov.l r4,@(0,r15); cfi_offset (r4,-4) -# define SAVE_ARGS_2 SAVE_ARGS_1; mov.l r5,@(4,r15); cfi_offset (r5,-8) -# define SAVE_ARGS_3 SAVE_ARGS_2; mov.l r6,@(8,r15); cfi_offset (r6,-12) -# define SAVE_ARGS_4 SAVE_ARGS_3; mov.l r7,@(12,r15); cfi_offset (r7,-16) -# define SAVE_ARGS_5 SAVE_ARGS_4 -# define SAVE_ARGS_6 SAVE_ARGS_5 - -# define LOAD_ARGS_0 /* Nothing. */ -# define LOAD_ARGS_1 LOAD_ARGS_0; mov.l @(0,r15),r4; cfi_restore (r4) -# define LOAD_ARGS_2 LOAD_ARGS_1; mov.l @(4,r15),r5; cfi_restore (r5) -# define LOAD_ARGS_3 LOAD_ARGS_2; mov.l @(8,r15),r6; cfi_restore (r6) -# define LOAD_ARGS_4 LOAD_ARGS_3; mov.l @(12,r15),r7; cfi_restore (r7) -# define LOAD_ARGS_5 LOAD_ARGS_4 -# define LOAD_ARGS_6 LOAD_ARGS_5 - -# if IS_IN (libpthread) -# define __local_enable_asynccancel __pthread_enable_asynccancel -# define __local_disable_asynccancel __pthread_disable_asynccancel -# elif IS_IN (libc) -# define __local_enable_asynccancel __libc_enable_asynccancel -# define __local_disable_asynccancel __libc_disable_asynccancel -# elif IS_IN (librt) -# define __local_enable_asynccancel __librt_enable_asynccancel -# define __local_disable_asynccancel __librt_disable_asynccancel -# else -# error Unsupported library -# endif - -# define CENABLE \ - mov.l 1f,r0; \ - bsrf r0; \ - nop; \ - 0: bra 2f; \ - mov r0,r2; \ - .align 2; \ - 1: .long __local_enable_asynccancel - 0b; \ - 2: - -# define CDISABLE \ - mov.l 1f,r0; \ - bsrf r0; \ - mov r2,r4; \ - 0: bra 2f; \ - nop; \ - .align 2; \ - 1: .long __local_disable_asynccancel - 0b; \ - 2: - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P \ - stc gbr,r0; \ - mov.w 0f,r1; \ - sub r1,r0; \ - mov.l @(MULTIPLE_THREADS_OFFSET,r0),r0; \ - bra 1f; \ - tst r0,r0; \ - 0: .word TLS_PRE_TCB_SIZE; \ - 1: - -# endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/sh/sysdep.S b/sysdeps/unix/sysv/linux/sh/sysdep.S deleted file mode 100644 index 5f11bc737b..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sysdep.S +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* The syscall stubs jump here when they detect an error. - The code for Linux is almost identical to the canonical Unix - code, except that the error number in R0 is negated. */ - -#undef CALL_MCOUNT -#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers R0. */ - -ENTRY (__syscall_error) - neg r4, r0 - cfi_endproc - -#define __syscall_error __syscall_error_1 -#include diff --git a/sysdeps/unix/sysv/linux/sh/sysdep.h b/sysdeps/unix/sysv/linux/sh/sysdep.h deleted file mode 100644 index b76140cd90..0000000000 --- a/sysdeps/unix/sysv/linux/sh/sysdep.h +++ /dev/null @@ -1,360 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper, , August 1995. - Changed by Kaz Kojima, . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_SH_SYSDEP_H -#define _LINUX_SH_SYSDEP_H 1 - -/* There is some commonality. */ -#include -#include -#include - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) (__NR_##syscall_name) - - -#ifdef __ASSEMBLER__ - -/* Linux uses a negative return value to indicate syscall errors, - unlike most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be - negative even if the call succeeded. E.g., the `lseek' system call - might return a large offset. Therefore we must not anymore test - for < 0, but test for a real error by making sure the value in R0 - is a real error number. Linus said he will make sure the no syscall - returns a value in -1 .. -4095 as a valid result so we can savely - test with -4095. */ - -#define _IMM1 #-1 -#define _IMM12 #-12 -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name); \ - DO_CALL (syscall_name, args); \ - mov r0,r1; \ - mov _IMM12,r2; \ - shad r2,r1; \ - not r1,r1; \ - tst r1,r1; \ - bf .Lpseudo_end; \ - SYSCALL_ERROR_HANDLER; \ - .Lpseudo_end: - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - END (name) - -#undef PSEUDO_NOERRNO -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - .text; \ - ENTRY (name); \ - DO_CALL (syscall_name, args) - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ - END (name) - -#define ret_NOERRNO ret - -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .text; \ - ENTRY (name); \ - DO_CALL (syscall_name, args); - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) \ - END (name) - -#define ret_ERRVAL ret - -#ifndef PIC -# define SYSCALL_ERROR_HANDLER \ - mov.l 0f,r1; \ - jmp @r1; \ - mov r0,r4; \ - .align 2; \ - 0: .long __syscall_error -#else -# if RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_HANDLER \ - neg r0,r1; \ - mov r12,r2; \ - cfi_register (r12, r2); \ - mov.l 0f,r12; \ - mova 0f,r0; \ - add r0,r12; \ - mov.l 1f,r0; \ - mov.l r1,@(r0,r12); \ - mov r2,r12; \ - cfi_restore (r12); \ - bra .Lpseudo_end; \ - mov _IMM1,r0; \ - .align 2; \ - 0: .long _GLOBAL_OFFSET_TABLE_; \ - 1: .long rtld_errno@GOTOFF - -# elif defined _LIBC_REENTRANT - -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif -# define SYSCALL_ERROR_HANDLER \ - neg r0,r1; \ - mov r12,r2; \ - cfi_register (r12, r2); \ - mov.l 0f,r12; \ - mova 0f,r0; \ - add r0,r12; \ - mov.l 1f,r0; \ - stc gbr, r4; \ - mov.l @(r0,r12),r0; \ - mov r2,r12; \ - cfi_restore (r12); \ - add r4,r0; \ - mov.l r1,@r0; \ - bra .Lpseudo_end; \ - mov _IMM1,r0; \ - .align 2; \ - 0: .long _GLOBAL_OFFSET_TABLE_; \ - 1: .long SYSCALL_ERROR_ERRNO@GOTTPOFF -# else -/* Store (-r0) into errno through the GOT. */ -# define SYSCALL_ERROR_HANDLER \ - neg r0,r1; \ - mov r12,r2; \ - cfi_register (r12, r2); \ - mov.l 0f,r12; \ - mova 0f,r0; \ - add r0,r12; \ - mov.l 1f,r0; \ - mov.l @(r0,r12),r0; \ - mov r2,r12; \ - cfi_restore (r12); \ - mov.l r1,@r0; \ - bra .Lpseudo_end; \ - mov _IMM1,r0; \ - .align 2; \ - 0: .long _GLOBAL_OFFSET_TABLE_; \ - 1: .long errno@GOT -# endif /* _LIBC_REENTRANT */ -#endif /* PIC */ - -# ifdef NEED_SYSCALL_INST_PAD -# define SYSCALL_INST_PAD \ - or r0,r0; or r0,r0; or r0,r0; or r0,r0; or r0,r0 -# else -# define SYSCALL_INST_PAD -# endif - -#define SYSCALL_INST0 trapa #0x10 -#define SYSCALL_INST1 trapa #0x11 -#define SYSCALL_INST2 trapa #0x12 -#define SYSCALL_INST3 trapa #0x13 -#define SYSCALL_INST4 trapa #0x14 -#define SYSCALL_INST5 mov.l @(0,r15),r0; trapa #0x15 -#define SYSCALL_INST6 mov.l @(0,r15),r0; mov.l @(4,r15),r1; trapa #0x16 - -#undef DO_CALL -#define DO_CALL(syscall_name, args) \ - mov.l 1f,r3; \ - SYSCALL_INST##args; \ - SYSCALL_INST_PAD; \ - bra 2f; \ - nop; \ - .align 2; \ - 1: .long SYS_ify (syscall_name); \ - 2: - -#else /* not __ASSEMBLER__ */ - -#define SYSCALL_INST_STR0 "trapa #0x10\n\t" -#define SYSCALL_INST_STR1 "trapa #0x11\n\t" -#define SYSCALL_INST_STR2 "trapa #0x12\n\t" -#define SYSCALL_INST_STR3 "trapa #0x13\n\t" -#define SYSCALL_INST_STR4 "trapa #0x14\n\t" -#define SYSCALL_INST_STR5 "trapa #0x15\n\t" -#define SYSCALL_INST_STR6 "trapa #0x16\n\t" - -# ifdef NEED_SYSCALL_INST_PAD -# define SYSCALL_INST_PAD "\ - or r0,r0; or r0,r0; or r0,r0; or r0,r0; or r0,r0" -# else -# define SYSCALL_INST_PAD -# endif - -#define ASMFMT_0 -#define ASMFMT_1 \ - , "r" (r4) -#define ASMFMT_2 \ - , "r" (r4), "r" (r5) -#define ASMFMT_3 \ - , "r" (r4), "r" (r5), "r" (r6) -#define ASMFMT_4 \ - , "r" (r4), "r" (r5), "r" (r6), "r" (r7) -#define ASMFMT_5 \ - , "r" (r4), "r" (r5), "r" (r6), "r" (r7), "0" (r0) -#define ASMFMT_6 \ - , "r" (r4), "r" (r5), "r" (r6), "r" (r7), "0" (r0), "r" (r1) -#define ASMFMT_7 \ - , "r" (r4), "r" (r5), "r" (r6), "r" (r7), "0" (r0), "r" (r1), "r" (r2) - -#define SUBSTITUTE_ARGS_0() -#define SUBSTITUTE_ARGS_1(arg1) \ - long int _arg1 = (long int) (arg1); \ - register long int r4 asm ("%r4") = (long int) (_arg1) -#define SUBSTITUTE_ARGS_2(arg1, arg2) \ - long int _arg1 = (long int) (arg1); \ - long int _arg2 = (long int) (arg2); \ - register long int r4 asm ("%r4") = (long int) (_arg1); \ - register long int r5 asm ("%r5") = (long int) (_arg2) -#define SUBSTITUTE_ARGS_3(arg1, arg2, arg3) \ - long int _arg1 = (long int) (arg1); \ - long int _arg2 = (long int) (arg2); \ - long int _arg3 = (long int) (arg3); \ - register long int r4 asm ("%r4") = (long int) (_arg1); \ - register long int r5 asm ("%r5") = (long int) (_arg2); \ - register long int r6 asm ("%r6") = (long int) (_arg3) -#define SUBSTITUTE_ARGS_4(arg1, arg2, arg3, arg4) \ - long int _arg1 = (long int) (arg1); \ - long int _arg2 = (long int) (arg2); \ - long int _arg3 = (long int) (arg3); \ - long int _arg4 = (long int) (arg4); \ - register long int r4 asm ("%r4") = (long int) (_arg1); \ - register long int r5 asm ("%r5") = (long int) (_arg2); \ - register long int r6 asm ("%r6") = (long int) (_arg3); \ - register long int r7 asm ("%r7") = (long int) (_arg4) -#define SUBSTITUTE_ARGS_5(arg1, arg2, arg3, arg4, arg5) \ - long int _arg1 = (long int) (arg1); \ - long int _arg2 = (long int) (arg2); \ - long int _arg3 = (long int) (arg3); \ - long int _arg4 = (long int) (arg4); \ - long int _arg5 = (long int) (arg5); \ - register long int r4 asm ("%r4") = (long int) (_arg1); \ - register long int r5 asm ("%r5") = (long int) (_arg2); \ - register long int r6 asm ("%r6") = (long int) (_arg3); \ - register long int r7 asm ("%r7") = (long int) (_arg4); \ - register long int r0 asm ("%r0") = (long int) (_arg5) -#define SUBSTITUTE_ARGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \ - long int _arg1 = (long int) (arg1); \ - long int _arg2 = (long int) (arg2); \ - long int _arg3 = (long int) (arg3); \ - long int _arg4 = (long int) (arg4); \ - long int _arg5 = (long int) (arg5); \ - long int _arg6 = (long int) (arg6); \ - register long int r4 asm ("%r4") = (long int)(_arg1); \ - register long int r5 asm ("%r5") = (long int) (_arg2); \ - register long int r6 asm ("%r6") = (long int) (_arg3); \ - register long int r7 asm ("%r7") = (long int) (_arg4); \ - register long int r0 asm ("%r0") = (long int) (_arg5); \ - register long int r1 asm ("%r1") = (long int) (_arg6) -#define SUBSTITUTE_ARGS_7(arg1, arg2, arg3, arg4, arg5, arg6, arg7) \ - long int _arg1 = (long int) (arg1); \ - long int _arg2 = (long int) (arg2); \ - long int _arg3 = (long int) (arg3); \ - long int _arg4 = (long int) (arg4); \ - long int _arg5 = (long int) (arg5); \ - long int _arg6 = (long int) (arg6); \ - long int _arg7 = (long int) (arg7); \ - register long int r4 asm ("%r4") = (long int) (_arg1); \ - register long int r5 asm ("%r5") = (long int) (_arg2); \ - register long int r6 asm ("%r6") = (long int) (_arg3); \ - register long int r7 asm ("%r7") = (long int) (_arg4); \ - register long int r0 asm ("%r0") = (long int) (_arg5); \ - register long int r1 asm ("%r1") = (long int) (_arg6); \ - register long int r2 asm ("%r2") = (long int) (_arg7) - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - ({ \ - unsigned int resultvar = INTERNAL_SYSCALL (name, , nr, args); \ - if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (resultvar, ), 0)) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, )); \ - resultvar = 0xffffffff; \ - } \ - (int) resultvar; }) - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - ({ \ - unsigned long int resultvar; \ - register long int r3 asm ("%r3") = SYS_ify (name); \ - SUBSTITUTE_ARGS_##nr(args); \ - \ - asm volatile (SYSCALL_INST_STR##nr SYSCALL_INST_PAD \ - : "=z" (resultvar) \ - : "r" (r3) ASMFMT_##nr \ - : "memory", "t"); \ - \ - (int) resultvar; }) - -/* The _NCS variant allows non-constant syscall numbers. */ -#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - ({ \ - unsigned long int resultvar; \ - register long int r3 asm ("%r3") = (name); \ - SUBSTITUTE_ARGS_##nr(args); \ - \ - asm volatile (SYSCALL_INST_STR##nr SYSCALL_INST_PAD \ - : "=z" (resultvar) \ - : "r" (r3) ASMFMT_##nr \ - : "memory", "t"); \ - \ - (int) resultvar; }) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) do { } while (0) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((unsigned int) (val) >= 0xfffff001u) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) - -#endif /* __ASSEMBLER__ */ - -/* Pointer mangling support. */ -#if IS_IN (rtld) -/* We cannot use the thread descriptor because in ld.so we use setjmp - earlier than the descriptor is initialized. Using a global variable - is too complicated here since we have no PC-relative addressing mode. */ -#else -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(reg, tmp) \ - stc gbr,tmp; mov.l @(POINTER_GUARD,tmp),tmp; xor tmp,reg -# define PTR_MANGLE2(reg, tmp) xor tmp,reg -# define PTR_DEMANGLE(reg, tmp) PTR_MANGLE (reg, tmp) -# define PTR_DEMANGLE2(reg, tmp) PTR_MANGLE2 (reg, tmp) -# else -# define PTR_MANGLE(var) \ - (var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#endif - -#endif /* linux/sh/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/sh/vfork.S b/sysdeps/unix/sysv/linux/sh/vfork.S deleted file mode 100644 index 0626bda2df..0000000000 --- a/sysdeps/unix/sysv/linux/sh/vfork.S +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include -#include - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__libc_vfork) - - mov.w .L1, r3 - trapa #0x10 - mov r0, r1 - - mov #-12, r2 - shad r2, r1 - not r1, r1 // r1=0 means r0 = -1 to -4095 - tst r1, r1 // i.e. error in linux - bf .Lpseudo_end - SYSCALL_ERROR_HANDLER -.Lpseudo_end: - rts - nop -.L1: - .word __NR_vfork - .align 2 -PSEUDO_END (__libc_vfork) - -#if IS_IN (libc) -weak_alias (__libc_vfork, vfork) -strong_alias (__libc_vfork, __vfork) -libc_hidden_def (__vfork) -#endif diff --git a/sysdeps/unix/sysv/linux/sh/xstat.c b/sysdeps/unix/sysv/linux/sh/xstat.c deleted file mode 100644 index e9869f5508..0000000000 --- a/sysdeps/unix/sysv/linux/sh/xstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/shlib-versions b/sysdeps/unix/sysv/linux/shlib-versions deleted file mode 100644 index 9160557733..0000000000 --- a/sysdeps/unix/sysv/linux/shlib-versions +++ /dev/null @@ -1,2 +0,0 @@ -libm=6 -libc=6 diff --git a/sysdeps/unix/sysv/linux/shm-directory.c b/sysdeps/unix/sysv/linux/shm-directory.c deleted file mode 100644 index f2c27b188e..0000000000 --- a/sysdeps/unix/sysv/linux/shm-directory.c +++ /dev/null @@ -1,147 +0,0 @@ -/* Determine directory for shm/sem files. Linux version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "shm-directory.h" - -#include -#include -#include -#include -#include -#include -#include -#include "linux_fsinfo.h" - - -/* Mount point of the shared memory filesystem. */ -static struct -{ - char *dir; - size_t dirlen; -} mountpoint; - -/* This is the default directory. */ -static const char defaultdir[] = "/dev/shm/"; - -/* Protect the `mountpoint' variable above. */ -__libc_once_define (static, once); - - -/* Determine where the shmfs is mounted (if at all). */ -static void -where_is_shmfs (void) -{ - char buf[512]; - struct statfs f; - struct mntent resmem; - struct mntent *mp; - FILE *fp; - - /* The canonical place is /dev/shm. This is at least what the - documentation tells everybody to do. */ - if (__statfs (defaultdir, &f) == 0 && (f.f_type == SHMFS_SUPER_MAGIC - || f.f_type == RAMFS_MAGIC)) - { - /* It is in the normal place. */ - mountpoint.dir = (char *) defaultdir; - mountpoint.dirlen = sizeof (defaultdir) - 1; - - return; - } - - /* OK, do it the hard way. Look through the /proc/mounts file and if - this does not exist through /etc/fstab to find the mount point. */ - fp = __setmntent ("/proc/mounts", "r"); - if (__glibc_unlikely (fp == NULL)) - { - fp = __setmntent (_PATH_MNTTAB, "r"); - if (__glibc_unlikely (fp == NULL)) - /* There is nothing we can do. Blind guesses are not helpful. */ - return; - } - - /* Now read the entries. */ - while ((mp = __getmntent_r (fp, &resmem, buf, sizeof buf)) != NULL) - /* The original name is "shm" but this got changed in early Linux - 2.4.x to "tmpfs". */ - if (strcmp (mp->mnt_type, "tmpfs") == 0 - || strcmp (mp->mnt_type, "shm") == 0) - { - /* Found it. There might be more than one place where the - filesystem is mounted but one is enough for us. */ - size_t namelen; - - /* First make sure this really is the correct entry. At least - some versions of the kernel give wrong information because - of the implicit mount of the shmfs for SysV IPC. */ - if (__statfs (mp->mnt_dir, &f) != 0 || (f.f_type != SHMFS_SUPER_MAGIC - && f.f_type != RAMFS_MAGIC)) - continue; - - namelen = strlen (mp->mnt_dir); - - if (namelen == 0) - /* Hum, maybe some crippled entry. Keep on searching. */ - continue; - - mountpoint.dir = (char *) malloc (namelen + 2); - if (mountpoint.dir != NULL) - { - char *cp = __mempcpy (mountpoint.dir, mp->mnt_dir, namelen); - if (cp[-1] != '/') - *cp++ = '/'; - *cp = '\0'; - mountpoint.dirlen = cp - mountpoint.dir; - } - - break; - } - - /* Close the stream. */ - __endmntent (fp); -} - - -const char * -__shm_directory (size_t *len) -{ - /* Determine where the shmfs is mounted. */ - __libc_once (once, where_is_shmfs); - - /* If we don't know the mount points there is nothing we can do. Ever. */ - if (__glibc_unlikely (mountpoint.dir == NULL)) - { - __set_errno (ENOSYS); - return NULL; - } - - *len = mountpoint.dirlen; - return mountpoint.dir; -} -#if IS_IN (libpthread) -hidden_def (__shm_directory) -#endif - - -/* Make sure the table is freed if we want to free everything before - exiting. */ -libc_freeres_fn (freeit) -{ - if (mountpoint.dir != defaultdir) - free (mountpoint.dir); -} diff --git a/sysdeps/unix/sysv/linux/shmat.c b/sysdeps/unix/sysv/linux/shmat.c deleted file mode 100644 index 98dcec609b..0000000000 --- a/sysdeps/unix/sysv/linux/shmat.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Attach the shared memory segment associated with SHMID to the data - segment of the calling process. SHMADDR and SHMFLG determine how - and where the segment is attached. */ - -void * -shmat (int shmid, const void *shmaddr, int shmflg) -{ -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return (void*) INLINE_SYSCALL_CALL (shmat, shmid, shmaddr, shmflg); -#else - INTERNAL_SYSCALL_DECL(err); - unsigned long resultvar; - void *raddr; - - resultvar = INTERNAL_SYSCALL_CALL (ipc, err, IPCOP_shmat, shmid, shmflg, - &raddr, shmaddr); - if (INTERNAL_SYSCALL_ERROR_P (resultvar, err)) - return (void *) INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (resultvar, - err)); - - return raddr; -#endif -} diff --git a/sysdeps/unix/sysv/linux/shmctl.c b/sysdeps/unix/sysv/linux/shmctl.c deleted file mode 100644 index 96365b51fc..0000000000 --- a/sysdeps/unix/sysv/linux/shmctl.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - -#ifndef DEFAULT_VERSION -# define DEFAULT_VERSION GLIBC_2_2 -#endif - - -/* Provide operations to control over shared memory segments. */ -int -__new_shmctl (int shmid, int cmd, struct shmid_ds *buf) -{ -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return INLINE_SYSCALL_CALL (shmctl, shmid, cmd | __IPC_64, buf); -#else - return INLINE_SYSCALL_CALL (ipc, IPCOP_shmctl, shmid, cmd | __IPC_64, 0, - buf); -#endif -} -versioned_symbol (libc, __new_shmctl, shmctl, DEFAULT_VERSION); - - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2) -struct __old_shmid_ds -{ - struct __old_ipc_perm shm_perm; /* operation permission struct */ - int shm_segsz; /* size of segment in bytes */ - __time_t shm_atime; /* time of last shmat() */ - __time_t shm_dtime; /* time of last shmdt() */ - __time_t shm_ctime; /* time of last change by shmctl() */ - __ipc_pid_t shm_cpid; /* pid of creator */ - __ipc_pid_t shm_lpid; /* pid of last shmop */ - unsigned short int shm_nattch; /* number of current attaches */ - unsigned short int __shm_npages; /* size of segment (pages) */ - unsigned long int *__shm_pages; /* array of ptrs to frames -> SHMMAX */ - struct vm_area_struct *__attaches; /* descriptors for attaches */ -}; - -int -attribute_compat_text_section -__old_shmctl (int shmid, int cmd, struct __old_shmid_ds *buf) -{ -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return INLINE_SYSCALL_CALL (shmctl, shmid, cmd, buf); -#else - return INLINE_SYSCALL_CALL (ipc, IPCOP_shmctl, shmid, cmd, 0, buf); -#endif -} -compat_symbol (libc, __old_shmctl, shmctl, GLIBC_2_0); -#endif diff --git a/sysdeps/unix/sysv/linux/shmdt.c b/sysdeps/unix/sysv/linux/shmdt.c deleted file mode 100644 index ee0668b7ce..0000000000 --- a/sysdeps/unix/sysv/linux/shmdt.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Detach shared memory segment starting at address specified by SHMADDR - from the caller's data segment. */ - -int -shmdt (const void *shmaddr) -{ -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return INLINE_SYSCALL_CALL (shmdt, shmaddr); -#else - return INLINE_SYSCALL_CALL (ipc, IPCOP_shmdt, 0, 0, 0, shmaddr); -#endif -} diff --git a/sysdeps/unix/sysv/linux/shmget.c b/sysdeps/unix/sysv/linux/shmget.c deleted file mode 100644 index ed8ca7d226..0000000000 --- a/sysdeps/unix/sysv/linux/shmget.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Return an identifier for an shared memory segment of at least size SIZE - which is associated with KEY. */ - -int -shmget (key_t key, size_t size, int shmflg) -{ -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS - return INLINE_SYSCALL_CALL (shmget, key, size, shmflg, NULL); -#else - return INLINE_SYSCALL_CALL (ipc, IPCOP_shmget, key, size, shmflg, NULL); -#endif -} diff --git a/sysdeps/unix/sysv/linux/shutdown.c b/sysdeps/unix/sysv/linux/shutdown.c deleted file mode 100644 index 4de4f9c25d..0000000000 --- a/sysdeps/unix/sysv/linux/shutdown.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include -#include - -int -__shutdown (int fd, int how) -{ -#ifdef __ASSUME_SHUTDOWN_SYSCALL - return INLINE_SYSCALL (shutdown, 2, fd, how); -#else - return SOCKETCALL (shutdown, fd, how); -#endif -} -weak_alias (__shutdown, shutdown) diff --git a/sysdeps/unix/sysv/linux/sigaction.c b/sysdeps/unix/sysv/linux/sigaction.c deleted file mode 100644 index c76c9374c9..0000000000 --- a/sysdeps/unix/sysv/linux/sigaction.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -/* The difference here is that the sigaction structure used in the - kernel is not the same as we use in the libc. Therefore we must - translate it here. */ -#include - - -/* If ACT is not NULL, change the action for SIG to *ACT. - If OACT is not NULL, put the old action for SIG in *OACT. */ -int -__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) -{ - int result; - - struct kernel_sigaction kact, koact; - - if (act) - { - kact.k_sa_handler = act->sa_handler; - memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t)); - kact.sa_flags = act->sa_flags; -#ifdef HAVE_SA_RESTORER - kact.sa_restorer = act->sa_restorer; -#endif - } - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - result = INLINE_SYSCALL (rt_sigaction, 4, sig, - act ? &kact : NULL, - oact ? &koact : NULL, _NSIG / 8); - - if (oact && result >= 0) - { - oact->sa_handler = koact.k_sa_handler; - memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t)); - oact->sa_flags = koact.sa_flags; -#ifdef HAVE_SA_RESTORER - oact->sa_restorer = koact.sa_restorer; -#endif - } - return result; -} -libc_hidden_def (__libc_sigaction) - -#include diff --git a/sysdeps/unix/sysv/linux/siglist.h b/sysdeps/unix/sysv/linux/siglist.h deleted file mode 100644 index 7735a4d25d..0000000000 --- a/sysdeps/unix/sysv/linux/siglist.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file is included multiple times. */ - -#include_next /* Get the canonical list. */ - -#define OLD_SIGLIST_SIZE 32 /* For GLIBC_2.0 binary compatibility. */ - -#define OLD2_SIGLIST_SIZE 64 /* For GLIBC_2.1 binary compatibility. */ diff --git a/sysdeps/unix/sysv/linux/signal.c b/sysdeps/unix/sysv/linux/signal.c deleted file mode 100644 index bc4e4e8447..0000000000 --- a/sysdeps/unix/sysv/linux/signal.c +++ /dev/null @@ -1,3 +0,0 @@ -/* We need this file since otherwise `signal' would be handled as a - system call. */ -#include diff --git a/sysdeps/unix/sysv/linux/signalfd.c b/sysdeps/unix/sysv/linux/signalfd.c deleted file mode 100644 index 5133443558..0000000000 --- a/sysdeps/unix/sysv/linux/signalfd.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -int -signalfd (int fd, const sigset_t *mask, int flags) -{ - return INLINE_SYSCALL (signalfd4, 4, fd, mask, _NSIG / 8, flags); -} diff --git a/sysdeps/unix/sysv/linux/sigpending.c b/sysdeps/unix/sysv/linux/sigpending.c deleted file mode 100644 index ee50be6b87..0000000000 --- a/sysdeps/unix/sysv/linux/sigpending.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - - -/* Change the set of blocked signals to SET, - wait until a signal arrives, and restore the set of blocked signals. */ -int -sigpending (sigset_t *set) -{ - return INLINE_SYSCALL (rt_sigpending, 2, set, _NSIG / 8); -} diff --git a/sysdeps/unix/sysv/linux/sigprocmask.c b/sysdeps/unix/sysv/linux/sigprocmask.c deleted file mode 100644 index e39e5f6872..0000000000 --- a/sysdeps/unix/sysv/linux/sigprocmask.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include /* Needed for string function builtin redirection. */ -#include - -#include -#include - -#include /* SIGCANCEL, SIGSETXID */ - - -/* Get and/or change the set of blocked signals. */ -int -__sigprocmask (int how, const sigset_t *set, sigset_t *oset) -{ -#ifdef SIGCANCEL - sigset_t local_newmask; - - /* The only thing we have to make sure here is that SIGCANCEL and - SIGSETXID are not blocked. */ - if (set != NULL - && (__builtin_expect (__sigismember (set, SIGCANCEL), 0) -# ifdef SIGSETXID - || __builtin_expect (__sigismember (set, SIGSETXID), 0) -# endif - )) - { - local_newmask = *set; - __sigdelset (&local_newmask, SIGCANCEL); -# ifdef SIGSETXID - __sigdelset (&local_newmask, SIGSETXID); -# endif - set = &local_newmask; - } -#endif - - return INLINE_SYSCALL (rt_sigprocmask, 4, how, set, oset, _NSIG / 8); -} -weak_alias (__sigprocmask, sigprocmask) diff --git a/sysdeps/unix/sysv/linux/sigqueue.c b/sysdeps/unix/sysv/linux/sigqueue.c deleted file mode 100644 index 059e524528..0000000000 --- a/sysdeps/unix/sysv/linux/sigqueue.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include -#include - -#ifdef __NR_rt_sigqueueinfo -/* Return any pending signal or wait for one for the given time. */ -int -__sigqueue (pid_t pid, int sig, const union sigval val) -{ - siginfo_t info; - - /* First, clear the siginfo_t structure, so that we don't pass our - stack content to other tasks. */ - memset (&info, 0, sizeof (siginfo_t)); - /* We must pass the information about the data in a siginfo_t value. */ - info.si_signo = sig; - info.si_code = SI_QUEUE; - info.si_pid = __getpid (); - info.si_uid = __getuid (); - info.si_value = val; - - return INLINE_SYSCALL (rt_sigqueueinfo, 3, pid, sig, &info); -} -weak_alias (__sigqueue, sigqueue) -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/sigreturn.c b/sysdeps/unix/sysv/linux/sigreturn.c deleted file mode 100644 index 626b1eb8af..0000000000 --- a/sysdeps/unix/sysv/linux/sigreturn.c +++ /dev/null @@ -1,3 +0,0 @@ -/* The sigreturn syscall cannot be explicitly called on Linux, only - implicitly by returning from a signal handler. */ -#include diff --git a/sysdeps/unix/sysv/linux/sigset-cvt-mask.h b/sysdeps/unix/sysv/linux/sigset-cvt-mask.h deleted file mode 100644 index 2620059e9c..0000000000 --- a/sysdeps/unix/sysv/linux/sigset-cvt-mask.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Convert between lowlevel sigmask and libc representation of sigset_t. - Linux version. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Joe Keane . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -static inline int __attribute__ ((unused)) -sigset_set_old_mask (sigset_t *set, int mask) -{ - unsigned long int *ptr; - int cnt; - - ptr = &set->__val[0]; - - *ptr++ = (unsigned int) mask; - - cnt = _SIGSET_NWORDS - 2; - do - *ptr++ = 0ul; - while (--cnt >= 0); - - return 0; -} - -static inline int __attribute__ ((unused)) -sigset_get_old_mask (const sigset_t *set) -{ - return (unsigned int) set->__val[0]; -} diff --git a/sysdeps/unix/sysv/linux/sigsetops.h b/sysdeps/unix/sysv/linux/sigsetops.h deleted file mode 100644 index 05a605ff3f..0000000000 --- a/sysdeps/unix/sysv/linux/sigsetops.h +++ /dev/null @@ -1,108 +0,0 @@ -/* __sigset_t manipulators. Linux version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SIGSETOPS_H -#define _SIGSETOPS_H 1 - -#include - -/* Return a mask that includes the bit for SIG only. */ -# define __sigmask(sig) \ - (((unsigned long int) 1) << (((sig) - 1) % (8 * sizeof (unsigned long int)))) - -/* Return the word index for SIG. */ -# define __sigword(sig) (((sig) - 1) / (8 * sizeof (unsigned long int))) - -# define __sigemptyset(set) \ - (__extension__ ({ \ - int __cnt = _SIGSET_NWORDS; \ - sigset_t *__set = (set); \ - while (--__cnt >= 0) \ - __set->__val[__cnt] = 0; \ - (void)0; \ - })) - -# define __sigfillset(set) \ - (__extension__ ({ \ - int __cnt = _SIGSET_NWORDS; \ - sigset_t *__set = (set); \ - while (--__cnt >= 0) \ - __set->__val[__cnt] = ~0UL; \ - (void)0; \ - })) - -# define __sigisemptyset(set) \ - (__extension__ ({ \ - int __cnt = _SIGSET_NWORDS; \ - const sigset_t *__set = (set); \ - int __ret = __set->__val[--__cnt]; \ - while (!__ret && --__cnt >= 0) \ - __ret = __set->__val[__cnt]; \ - __ret == 0; \ - })) - -# define __sigandset(dest, left, right) \ - (__extension__ ({ \ - int __cnt = _SIGSET_NWORDS; \ - sigset_t *__dest = (dest); \ - const sigset_t *__left = (left); \ - const sigset_t *__right = (right); \ - while (--__cnt >= 0) \ - __dest->__val[__cnt] = (__left->__val[__cnt] \ - & __right->__val[__cnt]); \ - (void)0; \ - })) - -# define __sigorset(dest, left, right) \ - (__extension__ ({ \ - int __cnt = _SIGSET_NWORDS; \ - sigset_t *__dest = (dest); \ - const sigset_t *__left = (left); \ - const sigset_t *__right = (right); \ - while (--__cnt >= 0) \ - __dest->__val[__cnt] = (__left->__val[__cnt] \ - | __right->__val[__cnt]); \ - (void)0; \ - })) - -/* These macros needn't check for a bogus signal number; - error checking is done in the non-__ versions. */ -# define __sigismember(set, sig) \ - (__extension__ ({ \ - unsigned long int __mask = __sigmask (sig); \ - unsigned long int __word = __sigword (sig); \ - (set)->__val[__word] & __mask ? 1 : 0; \ - })) - -# define __sigaddset(set, sig) \ - (__extension__ ({ \ - unsigned long int __mask = __sigmask (sig); \ - unsigned long int __word = __sigword (sig); \ - (set)->__val[__word] |= __mask; \ - (void)0; \ - })) - -# define __sigdelset(set, sig) \ - (__extension__ ({ \ - unsigned long int __mask = __sigmask (sig); \ - unsigned long int __word = __sigword (sig); \ - (set)->__val[__word] &= ~__mask; \ - (void)0; \ - })) - -#endif /* bits/sigsetops.h */ diff --git a/sysdeps/unix/sysv/linux/sigstack.c b/sysdeps/unix/sysv/linux/sigstack.c deleted file mode 100644 index 94d9935fc4..0000000000 --- a/sysdeps/unix/sysv/linux/sigstack.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Emulate sigstack function using sigaltstack. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -#ifdef __NR_sigaltstack -int -sigstack (struct sigstack *ss, struct sigstack *oss) -{ - stack_t sas; - stack_t *sasp = NULL; - stack_t osas; - stack_t *osasp = oss == NULL ? NULL : &osas; - int result; - - if (ss != NULL) - { - /* We have to convert the information. */ - sas.ss_sp = ss->ss_sp; - sas.ss_flags = ss->ss_onstack ? SS_ONSTACK : 0; - - /* For the size of the stack we have no value we can pass to the - kernel. This is why this function should not be used. We simply - assume that all the memory down to address zero (in case the stack - grows down) is available. */ - sas.ss_size = ss->ss_sp - NULL; - - sasp = &sas; - } - - /* Call the kernel. */ - result = __sigaltstack (sasp, osasp); - - /* Convert the result, if wanted and possible. */ - if (result == 0 && oss != NULL) - { - oss->ss_sp = osas.ss_sp; - oss->ss_onstack = (osas.ss_flags & SS_ONSTACK) != 0; - } - - return result; -} - -link_warning (sigstack, "the `sigstack' function is dangerous. `sigaltstack' should be used instead.") -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/sigsuspend.c b/sysdeps/unix/sysv/linux/sigsuspend.c deleted file mode 100644 index df29abfbe9..0000000000 --- a/sysdeps/unix/sysv/linux/sigsuspend.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Change the set of blocked signals to SET, - wait until a signal arrives, and restore the set of blocked signals. */ -int -__sigsuspend (const sigset_t *set) -{ - return SYSCALL_CANCEL (rt_sigsuspend, set, _NSIG / 8); -} -libc_hidden_def (__sigsuspend) -weak_alias (__sigsuspend, sigsuspend) -strong_alias (__sigsuspend, __libc_sigsuspend) diff --git a/sysdeps/unix/sysv/linux/sigtimedwait.c b/sysdeps/unix/sysv/linux/sigtimedwait.c deleted file mode 100644 index ab1a84ef1c..0000000000 --- a/sysdeps/unix/sysv/linux/sigtimedwait.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include -#include - -#ifdef __NR_rt_sigtimedwait - -int -__sigtimedwait (const sigset_t *set, siginfo_t *info, - const struct timespec *timeout) -{ -#ifdef SIGCANCEL - sigset_t tmpset; - if (set != NULL - && (__builtin_expect (__sigismember (set, SIGCANCEL), 0) -# ifdef SIGSETXID - || __builtin_expect (__sigismember (set, SIGSETXID), 0) -# endif - )) - { - /* Create a temporary mask without the bit for SIGCANCEL set. */ - // We are not copying more than we have to. - memcpy (&tmpset, set, _NSIG / 8); - __sigdelset (&tmpset, SIGCANCEL); -# ifdef SIGSETXID - __sigdelset (&tmpset, SIGSETXID); -# endif - set = &tmpset; - } -#endif - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - int result = SYSCALL_CANCEL (rt_sigtimedwait, set, info, timeout, _NSIG / 8); - - /* The kernel generates a SI_TKILL code in si_code in case tkill is - used. tkill is transparently used in raise(). Since having - SI_TKILL as a code is useful in general we fold the results - here. */ - if (result != -1 && info != NULL && info->si_code == SI_TKILL) - info->si_code = SI_USER; - - return result; -} -libc_hidden_def (__sigtimedwait) -weak_alias (__sigtimedwait, sigtimedwait) -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/sigwait.c b/sysdeps/unix/sysv/linux/sigwait.c deleted file mode 100644 index 48bcd2fda7..0000000000 --- a/sysdeps/unix/sysv/linux/sigwait.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#define __need_NULL -#include -#include - -#include -#include -#include - -#ifdef __NR_rt_sigtimedwait - -/* Return any pending signal or wait for one for the given time. */ -static int -do_sigwait (const sigset_t *set, int *sig) -{ - int ret; - -#ifdef SIGCANCEL - sigset_t tmpset; - if (set != NULL - && (__builtin_expect (__sigismember (set, SIGCANCEL), 0) -# ifdef SIGSETXID - || __builtin_expect (__sigismember (set, SIGSETXID), 0) -# endif - )) - { - /* Create a temporary mask without the bit for SIGCANCEL set. */ - // We are not copying more than we have to. - memcpy (&tmpset, set, _NSIG / 8); - __sigdelset (&tmpset, SIGCANCEL); -# ifdef SIGSETXID - __sigdelset (&tmpset, SIGSETXID); -# endif - set = &tmpset; - } -#endif - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ -#ifdef INTERNAL_SYSCALL - INTERNAL_SYSCALL_DECL (err); - do - ret = INTERNAL_SYSCALL (rt_sigtimedwait, err, 4, set, - NULL, NULL, _NSIG / 8); - while (INTERNAL_SYSCALL_ERROR_P (ret, err) - && INTERNAL_SYSCALL_ERRNO (ret, err) == EINTR); - if (! INTERNAL_SYSCALL_ERROR_P (ret, err)) - { - *sig = ret; - ret = 0; - } - else - ret = INTERNAL_SYSCALL_ERRNO (ret, err); -#else - do - ret = INLINE_SYSCALL (rt_sigtimedwait, 4, set, NULL, NULL, _NSIG / 8); - while (ret == -1 && errno == EINTR); - if (ret != -1) - { - *sig = ret; - ret = 0; - } - else - ret = errno; -#endif - - return ret; -} - -int -__sigwait (const sigset_t *set, int *sig) -{ - if (SINGLE_THREAD_P) - return do_sigwait (set, sig); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = do_sigwait (set, sig); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} -libc_hidden_def (__sigwait) -weak_alias (__sigwait, sigwait) -#else -# include -#endif -strong_alias (__sigwait, __libc_sigwait) diff --git a/sysdeps/unix/sysv/linux/sigwaitinfo.c b/sysdeps/unix/sysv/linux/sigwaitinfo.c deleted file mode 100644 index 5a044f08e3..0000000000 --- a/sysdeps/unix/sysv/linux/sigwaitinfo.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#define __need_NULL -#include -#include - -#include -#include -#include - -#ifdef __NR_rt_sigtimedwait - -/* Return any pending signal or wait for one for the given time. */ -int -__sigwaitinfo (const sigset_t *set, siginfo_t *info) -{ -#ifdef SIGCANCEL - sigset_t tmpset; - if (set != NULL - && (__builtin_expect (__sigismember (set, SIGCANCEL), 0) -# ifdef SIGSETXID - || __builtin_expect (__sigismember (set, SIGSETXID), 0) -# endif - )) - { - /* Create a temporary mask without the bit for SIGCANCEL set. */ - // We are not copying more than we have to. - memcpy (&tmpset, set, _NSIG / 8); - __sigdelset (&tmpset, SIGCANCEL); -# ifdef SIGSETXID - __sigdelset (&tmpset, SIGSETXID); -# endif - set = &tmpset; - } -#endif - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - int result = SYSCALL_CANCEL (rt_sigtimedwait, set, info, NULL, _NSIG / 8); - - /* The kernel generates a SI_TKILL code in si_code in case tkill is - used. tkill is transparently used in raise(). Since having - SI_TKILL as a code is useful in general we fold the results - here. */ - if (result != -1 && info != NULL && info->si_code == SI_TKILL) - info->si_code = SI_USER; - - return result; -} - -libc_hidden_def (__sigwaitinfo) -weak_alias (__sigwaitinfo, sigwaitinfo) -#else -# include -#endif -strong_alias (__sigwaitinfo, __libc_sigwaitinfo) diff --git a/sysdeps/unix/sysv/linux/sizes.h b/sysdeps/unix/sysv/linux/sizes.h deleted file mode 100644 index 5de696d348..0000000000 --- a/sysdeps/unix/sysv/linux/sizes.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SIZES_H -#define _SIZES_H 1 - -#define PTR_SIZE_STR "4" - -#endif /* sizes.h */ diff --git a/sysdeps/unix/sysv/linux/socket.c b/sysdeps/unix/sysv/linux/socket.c deleted file mode 100644 index 99109d4b93..0000000000 --- a/sysdeps/unix/sysv/linux/socket.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include -#include - -int -__socket (int fd, int type, int domain) -{ -#ifdef __ASSUME_SOCKET_SYSCALL - return INLINE_SYSCALL (socket, 3, fd, type, domain); -#else - return SOCKETCALL (socket, fd, type, domain); -#endif -} -libc_hidden_def (__socket) -weak_alias (__socket, socket) diff --git a/sysdeps/unix/sysv/linux/socketcall.h b/sysdeps/unix/sysv/linux/socketcall.h deleted file mode 100644 index 75f70d0a42..0000000000 --- a/sysdeps/unix/sysv/linux/socketcall.h +++ /dev/null @@ -1,104 +0,0 @@ -/* ID for functions called via socketcall system call. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SOCKETCALL_H -#define _SYS_SOCKETCALL_H 1 - -/* Define unique numbers for the operations permitted on socket. Linux - uses a single system call for all these functions. The relevant code - file is /usr/include/linux/net.h. - We cannot use an enum here because the values are used in assembler - code. */ - -#define SOCKOP_invalid -1 -#define SOCKOP_socket 1 -#define SOCKOP_bind 2 -#define SOCKOP_connect 3 -#define SOCKOP_listen 4 -#define SOCKOP_accept 5 -#define SOCKOP_getsockname 6 -#define SOCKOP_getpeername 7 -#define SOCKOP_socketpair 8 -#define SOCKOP_send 9 -#define SOCKOP_recv 10 -#define SOCKOP_sendto 11 -#define SOCKOP_recvfrom 12 -#define SOCKOP_shutdown 13 -#define SOCKOP_setsockopt 14 -#define SOCKOP_getsockopt 15 -#define SOCKOP_sendmsg 16 -#define SOCKOP_recvmsg 17 -#define SOCKOP_accept4 18 -#define SOCKOP_recvmmsg 19 -#define SOCKOP_sendmmsg 20 - -#define __SOCKETCALL1(name, a1) \ - INLINE_SYSCALL (socketcall, 2, name, \ - ((long int [1]) { (long int) (a1) })) -#define __SOCKETCALL2(name, a1, a2) \ - INLINE_SYSCALL (socketcall, 2, name, \ - ((long int [2]) { (long int) (a1), (long int) (a2) })) -#define __SOCKETCALL3(name, a1, a2, a3) \ - INLINE_SYSCALL (socketcall, 2, name, \ - ((long int [3]) { (long int) (a1), (long int) (a2), (long int) (a3) })) -#define __SOCKETCALL4(name, a1, a2, a3, a4) \ - INLINE_SYSCALL (socketcall, 2, name, \ - ((long int [4]) { (long int) (a1), (long int) (a2), (long int) (a3), \ - (long int) (a4) })) -#define __SOCKETCALL5(name, a1, a2, a3, a4, a5) \ - INLINE_SYSCALL (socketcall, 2, name, \ - ((long int [5]) { (long int) (a1), (long int) (a2), (long int) (a3), \ - (long int) (a4), (long int) (a5) })) -#define __SOCKETCALL6(name, a1, a2, a3, a4, a5, a6) \ - INLINE_SYSCALL (socketcall, 2, name, \ - ((long int [6]) { (long int) (a1), (long int) (a2), (long int) (a3), \ - (long int) (a4), (long int) (a5), (long int) (a6) })) - -#define __SOCKETCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n -#define __SOCKETCALL_NARGS(...) \ - __SOCKETCALL_NARGS_X (__VA_ARGS__,7,6,5,4,3,2,1,0,) -#define __SOCKETCALL_CONCAT_X(a,b) a##b -#define __SOCKETCALL_CONCAT(a,b) __SOCKETCALL_CONCAT_X (a, b) -#define __SOCKETCALL_DISP(b,...) \ - __SOCKETCALL_CONCAT (b,__SOCKETCALL_NARGS(__VA_ARGS__))(__VA_ARGS__) - -#define __SOCKETCALL(...) __SOCKETCALL_DISP (__SOCKETCALL, __VA_ARGS__) - - -#define SOCKETCALL(name, args...) \ - ({ \ - long int sc_ret = __SOCKETCALL (SOCKOP_##name, args); \ - sc_ret; \ - }) - - -#if IS_IN (libc) -# define __pthread_enable_asynccancel __libc_enable_asynccancel -# define __pthread_disable_asynccancel __libc_disable_asynccancel -#endif - -#define SOCKETCALL_CANCEL(name, args...) \ - ({ \ - int oldtype = LIBC_CANCEL_ASYNC (); \ - long int sc_ret = __SOCKETCALL (SOCKOP_##name, args); \ - LIBC_CANCEL_RESET (oldtype); \ - sc_ret; \ - }) - - -#endif /* sys/socketcall.h */ diff --git a/sysdeps/unix/sysv/linux/socketpair.c b/sysdeps/unix/sysv/linux/socketpair.c deleted file mode 100644 index 66d6da1c23..0000000000 --- a/sysdeps/unix/sysv/linux/socketpair.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include -#include - -int -__socketpair (int domain, int type, int protocol, int sv[2]) -{ -#ifdef __ASSUME_SOCKETPAIR_SYSCALL - return INLINE_SYSCALL (socketpair, 4, domain, type, protocol, &sv[0]); -#else - return SOCKETCALL (socketpair, domain, type, protocol, sv); -#endif -} -weak_alias (__socketpair, socketpair) diff --git a/sysdeps/unix/sysv/linux/sparc/Implies b/sysdeps/unix/sysv/linux/sparc/Implies deleted file mode 100644 index a8cc375171..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/Implies +++ /dev/null @@ -1 +0,0 @@ -sparc/nptl diff --git a/sysdeps/unix/sysv/linux/sparc/Makefile b/sysdeps/unix/sysv/linux/sparc/Makefile deleted file mode 100644 index a67d199eb5..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -abi-variants := 32 64 -abi-32-options := -U__sparc_v9__ -U__arch64__ -abi-32-condition := __WORDSIZE == 32 -abi-64-options := -D__sparc_v9__ -D__arch64__ -abi-64-condition := __WORDSIZE == 64 - -ifeq ($(subdir),rt) -librt-routines += rt-sysdep -librt-shared-only-routines += rt-sysdep -endif - -ifeq ($(subdir),sysvipc) -sysdep_routines += getshmlba -endif - -ifeq ($(subdir),nptl) -# pull in __syscall_error routine -libpthread-routines += sysdep -libpthread-shared-only-routines += sysdep -endif diff --git a/sysdeps/unix/sysv/linux/sparc/Versions b/sysdeps/unix/sysv/linux/sparc/Versions deleted file mode 100644 index 4dc1cd720b..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/Versions +++ /dev/null @@ -1,46 +0,0 @@ -libc { - # The comment lines with "#errlist-compat" are magic; see errlist-compat.awk. - # When you get an error from errlist-compat.awk, you need to add a new - # version here. - - GLIBC_2.0 { - #errlist-compat 127 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.1 { - #errlist-compat 127 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.3 { - #errlist-compat 128 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.4 { - #errlist-compat 134 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.12 { - #errlist-compat 135 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.16 { - #errlist-compat 136 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - - __getshmlba; - } -} - -libpthread { - GLIBC_2.3.3 { - # Changed PTHREAD_STACK_MIN. - pthread_attr_setstack; pthread_attr_setstacksize; - } -} - -librt { - GLIBC_2.3 { - # AIO functions. - aio_cancel; aio_cancel64; - } -} diff --git a/sysdeps/unix/sysv/linux/sparc/a.out.h b/sysdeps/unix/sysv/linux/sparc/a.out.h deleted file mode 100644 index 593c4cccf4..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/a.out.h +++ /dev/null @@ -1,174 +0,0 @@ -#ifndef __A_OUT_GNU_H__ -#define __A_OUT_GNU_H__ - -#include - -#define __GNU_EXEC_MACROS__ - -struct exec -{ - unsigned char a_dynamic:1; /* A __DYNAMIC is in this image. */ - unsigned char a_toolversion:7; - unsigned char a_machtype; - unsigned short a_info; - unsigned int a_text; /* Length of text, in bytes. */ - unsigned int a_data; /* Length of data, in bytes. */ - unsigned int a_bss; /* Length of bss, in bytes. */ - unsigned int a_syms; /* Length of symbol table, in bytes. */ - unsigned int a_entry; /* Where program begins. */ - unsigned int a_trsize; - unsigned int a_drsize; -}; - -enum machine_type -{ - M_OLDSUN2 = 0, - M_68010 = 1, - M_68020 = 2, - M_SPARC = 3, - M_386 = 100, - M_MIPS1 = 151, - M_MIPS2 = 152 -}; - -#define N_MAGIC(exec) ((exec).a_info & 0xffff) -#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff)) -#define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff) -#define N_SET_INFO(exec, magic, type, flags) \ - ((exec).a_info = ((magic) & 0xffff) \ - | (((int)(type) & 0xff) << 16) \ - | (((flags) & 0xff) << 24)) -#define N_SET_MAGIC(exec, magic) \ - ((exec).a_info = ((exec).a_info & 0xffff0000) | ((magic) & 0xffff)) -#define N_SET_MACHTYPE(exec, machtype) \ - ((exec).a_info = \ - ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16)) -#define N_SET_FLAGS(exec, flags) \ - ((exec).a_info = \ - ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24)) - -/* Code indicating object file or impure executable. */ -#define OMAGIC 0407 -/* Code indicating pure executable. */ -#define NMAGIC 0410 -/* Code indicating demand-paged executable. */ -#define ZMAGIC 0413 -/* This indicates a demand-paged executable with the header in the text. - The first page is unmapped to help trap NULL pointer references. */ -#define QMAGIC 0314 -/* Code indicating core file. */ -#define CMAGIC 0421 - -#define N_TRSIZE(a) ((a).a_trsize) -#define N_DRSIZE(a) ((a).a_drsize) -#define N_SYMSIZE(a) ((a).a_syms) -#define N_BADMAG(x) \ - (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \ - && N_MAGIC(x) != ZMAGIC && N_MAGIC(x) != QMAGIC) -#define _N_HDROFF(x) (1024 - sizeof (struct exec)) -#define N_TXTOFF(x) \ - (N_MAGIC(x) == ZMAGIC ? 0 : sizeof (struct exec)) -#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text) -#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data) -#define N_DRELOFF(x) (N_TRELOFF(x) + N_TRSIZE(x)) -#define N_SYMOFF(x) \ - (N_TXTOFF(x) + (x).a_text + (x).a_data + (x).a_trsize + (x).a_drsize) -#define N_STROFF(x) (N_SYMOFF(x) + N_SYMSIZE(x)) - -#define SPARC_PGSIZE 0x2000 - -/* Address of text segment in memory after it is loaded. */ -#define N_TXTADDR(x) \ - (unsigned long)(((N_MAGIC(x) == ZMAGIC) && ((x).a_entry < SPARC_PGSIZE)) \ - ? 0 : SPARC_PGSIZE) - -/* Address of data segment in memory after it is loaded. */ -#define SEGMENT_SIZE SPARC_PGSIZE - -#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1)) -#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text) - -#define N_DATADDR(x) \ - (N_MAGIC(x)==OMAGIC \ - ? (N_TXTADDR(x) + (x).a_text) \ - : (unsigned long)(_N_SEGMENT_ROUND (_N_TXTENDADDR(x)))) -#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data) - -#if !defined (N_NLIST_DECLARED) -struct nlist -{ - union - { - char *n_name; - struct nlist *n_next; - long n_strx; - } n_un; - unsigned char n_type; - char n_other; - short n_desc; - unsigned long n_value; -}; -#endif /* no N_NLIST_DECLARED. */ - -#define N_UNDF 0 -#define N_ABS 2 -#define N_TEXT 4 -#define N_DATA 6 -#define N_BSS 8 -#define N_FN 15 -#define N_EXT 1 -#define N_TYPE 036 -#define N_STAB 0340 -#define N_INDR 0xa -#define N_SETA 0x14 /* Absolute set element symbol. */ -#define N_SETT 0x16 /* Text set element symbol. */ -#define N_SETD 0x18 /* Data set element symbol. */ -#define N_SETB 0x1A /* Bss set element symbol. */ -#define N_SETV 0x1C /* Pointer to set vector in data area. */ - -#if !defined (N_RELOCATION_INFO_DECLARED) -enum reloc_type -{ - RELOC_8, - RELOC_16, - RELOC_32, - RELOC_DISP8, - RELOC_DISP16, - RELOC_DISP32, - RELOC_WDISP30, - RELOC_WDISP22, - RELOC_HI22, - RELOC_22, - RELOC_13, - RELOC_LO10, - RELOC_SFA_BASE, - RELOC_SFA_OFF13, - RELOC_BASE10, - RELOC_BASE13, - RELOC_BASE22, - RELOC_PC10, - RELOC_PC22, - RELOC_JMP_TBL, - RELOC_SEGOFF16, - RELOC_GLOB_DAT, - RELOC_JMP_SLOT, - RELOC_RELATIVE -}; - -/* This structure describes a single relocation to be performed. - The text-relocation section of the file is a vector of these structures, - all of which apply to the text section. - Likewise, the data-relocation section applies to the data section. */ - -struct relocation_info -{ - unsigned int r_address; - unsigned int r_index:24; - unsigned int r_extern:1; - int r_pad:2; - enum reloc_type r_type:5; - int r_addend; -}; -#endif /* no N_RELOCATION_INFO_DECLARED. */ - -#endif /* __A_OUT_GNU_H__ */ diff --git a/sysdeps/unix/sysv/linux/sparc/aio_cancel.c b/sysdeps/unix/sysv/linux/sparc/aio_cancel.c deleted file mode 100644 index 0d6da82919..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/aio_cancel.c +++ /dev/null @@ -1,33 +0,0 @@ -#include - -#define aio_cancel64 XXX -#include -#undef aio_cancel64 -#include - -extern __typeof (aio_cancel) __new_aio_cancel; -extern __typeof (aio_cancel) __old_aio_cancel; - -#define aio_cancel __new_aio_cancel - -#include - -#undef aio_cancel -strong_alias (__new_aio_cancel, __new_aio_cancel64); -versioned_symbol (librt, __new_aio_cancel, aio_cancel, GLIBC_2_3); -versioned_symbol (librt, __new_aio_cancel64, aio_cancel64, GLIBC_2_3); - -#if SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_3) - -#undef ECANCELED -#define aio_cancel __old_aio_cancel -#define ECANCELED 125 - -#include - -#undef aio_cancel -strong_alias (__old_aio_cancel, __old_aio_cancel64); -compat_symbol (librt, __old_aio_cancel, aio_cancel, GLIBC_2_1); -compat_symbol (librt, __old_aio_cancel64, aio_cancel64, GLIBC_2_1); - -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/arch-fork.h b/sysdeps/unix/sysv/linux/sparc/arch-fork.h deleted file mode 100644 index f4c67fb132..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/arch-fork.h +++ /dev/null @@ -1,27 +0,0 @@ -/* ARCH_FORK definition for Linux fork implementation. SPARC version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#define ARCH_FORK() \ - INLINE_CLONE_SYSCALL (CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ - 0, NULL, NULL, &THREAD_SELF->tid) diff --git a/sysdeps/unix/sysv/linux/sparc/bits/a.out.h b/sysdeps/unix/sysv/linux/sparc/bits/a.out.h deleted file mode 100644 index 228a8d41af..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/a.out.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef __A_OUT_GNU_H__ -# error "Never use directly; include instead." -#endif - -#include - -#if __WORDSIZE == 64 - -/* Signal to users of this header that this architecture really doesn't - support a.out binary format. */ -#define __NO_A_OUT_SUPPORT 1 - -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/bits/environments.h b/sysdeps/unix/sysv/linux/sparc/bits/environments.h deleted file mode 100644 index 475d5648d0..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/environments.h +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _UNISTD_H -# error "Never include this file directly. Use instead" -#endif - -#include - -/* This header should define the following symbols under the described - situations. A value `1' means that the model is always supported, - `-1' means it is never supported. Undefined means it cannot be - statically decided. - - _POSIX_V7_ILP32_OFF32 32bit int, long, pointers, and off_t type - _POSIX_V7_ILP32_OFFBIG 32bit int, long, and pointers and larger off_t type - - _POSIX_V7_LP64_OFF32 64bit long and pointers and 32bit off_t type - _POSIX_V7_LPBIG_OFFBIG 64bit long and pointers and large off_t type - - The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG, - _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32, - _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were - used in previous versions of the Unix standard and are available - only for compatibility. -*/ - -#if __WORDSIZE == 64 - -/* Environments with 32-bit wide pointers are optionally provided. - Therefore following macros aren't defined: - # undef _POSIX_V7_ILP32_OFF32 - # undef _POSIX_V7_ILP32_OFFBIG - # undef _POSIX_V6_ILP32_OFF32 - # undef _POSIX_V6_ILP32_OFFBIG - # undef _XBS5_ILP32_OFF32 - # undef _XBS5_ILP32_OFFBIG - and users need to check at runtime. */ - -/* We also have no use (for now) for an environment with bigger pointers - and offsets. */ -# define _POSIX_V7_LPBIG_OFFBIG -1 -# define _POSIX_V6_LPBIG_OFFBIG -1 -# define _XBS5_LPBIG_OFFBIG -1 - -/* By default we have 64-bit wide `long int', pointers and `off_t'. */ -# define _POSIX_V7_LP64_OFF64 1 -# define _POSIX_V6_LP64_OFF64 1 -# define _XBS5_LP64_OFF64 1 - -#else /* __WORDSIZE == 32 */ - -/* By default we have 32-bit wide `int', `long int', pointers and `off_t' - and all platforms support LFS. */ -# define _POSIX_V7_ILP32_OFF32 1 -# define _POSIX_V7_ILP32_OFFBIG 1 -# define _POSIX_V6_ILP32_OFF32 1 -# define _POSIX_V6_ILP32_OFFBIG 1 -# define _XBS5_ILP32_OFF32 1 -# define _XBS5_ILP32_OFFBIG 1 - -/* We optionally provide an environment with the above size but an 64-bit - side `off_t'. Therefore we don't define _POSIX_V7_ILP32_OFFBIG. */ - -/* Environments with 64-bit wide pointers can be provided, - so these macros aren't defined: - # undef _POSIX_V7_LP64_OFF64 - # undef _POSIX_V7_LPBIG_OFFBIG - # undef _POSIX_V6_LP64_OFF64 - # undef _POSIX_V6_LPBIG_OFFBIG - # undef _XBS5_LP64_OFF64 - # undef _XBS5_LPBIG_OFFBIG - and sysconf tests for it at runtime. */ - -#endif /* __WORDSIZE == 32 */ - -#define __ILP32_OFF32_CFLAGS "-m32" -#define __ILP32_OFFBIG_CFLAGS "-m32 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" -#define __ILP32_OFF32_LDFLAGS "-m32" -#define __ILP32_OFFBIG_LDFLAGS "-m32" -#define __LP64_OFF64_CFLAGS "-m64" -#define __LP64_OFF64_LDFLAGS "-m64" diff --git a/sysdeps/unix/sysv/linux/sparc/bits/epoll.h b/sysdeps/unix/sysv/linux/sparc/bits/epoll.h deleted file mode 100644 index 69388004f6..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/epoll.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_EPOLL_H -# error "Never use directly; include instead." -#endif - -/* Flags to be passed to epoll_create1. */ -enum - { - EPOLL_CLOEXEC = 0x400000 -#define EPOLL_CLOEXEC EPOLL_CLOEXEC - }; diff --git a/sysdeps/unix/sysv/linux/sparc/bits/errno.h b/sysdeps/unix/sysv/linux/sparc/bits/errno.h deleted file mode 100644 index 4a8d8a0879..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/errno.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Error constants. Linux/Sparc specific version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef _ERRNO_H - -# undef EDOM -# undef EILSEQ -# undef ERANGE -# include - -/* Linux has no ENOTSUP error code. */ -# define ENOTSUP EOPNOTSUPP - -# ifndef ECANCELED -# define ECANCELED 127 -# endif - -/* Support for error codes to support robust mutexes was added later, too. */ -# ifndef EOWNERDEAD -# define EOWNERDEAD 132 -# define ENOTRECOVERABLE 133 -# endif - -# ifndef ERFKILL -# define ERFKILL 134 -# endif - -# ifndef EHWPOISON -# define EHWPOISON 135 -# endif - -# ifndef __ASSEMBLER__ -/* Function to get address of global `errno' variable. */ -extern int *__errno_location (void) __THROW __attribute__ ((__const__)); - -# if !defined _LIBC || defined _LIBC_REENTRANT -/* When using threads, errno is a per-thread value. */ -# define errno (*__errno_location ()) -# endif -# endif /* !__ASSEMBLER__ */ -#endif /* _ERRNO_H */ - -#if !defined _ERRNO_H && defined __need_Emath -/* This is ugly but the kernel header is not clean enough. We must - define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is - defined. */ -# define EDOM 33 /* Math argument out of domain of function. */ -# define EILSEQ 122 /* Illegal byte sequence. */ -# define ERANGE 34 /* Math result not representable. */ -#endif /* !_ERRNO_H && __need_Emath */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/eventfd.h b/sysdeps/unix/sysv/linux/sparc/bits/eventfd.h deleted file mode 100644 index 963761c888..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/eventfd.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_EVENTFD_H -# error "Never use directly; include instead." -#endif - -/* Flags for eventfd. */ -enum - { - EFD_SEMAPHORE = 0x000001, -#define EFD_SEMAPHORE EFD_SEMAPHORE - EFD_CLOEXEC = 0x400000, -#define EFD_CLOEXEC EFD_CLOEXEC - EFD_NONBLOCK = 0x004000 -#define EFD_NONBLOCK EFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h b/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h deleted file mode 100644 index bde61c59d8..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h +++ /dev/null @@ -1,101 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux/SPARC. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -#include - -#define O_APPEND 0x0008 -#define O_ASYNC 0x0040 -#define O_CREAT 0x0200 /* not fcntl */ -#define O_TRUNC 0x0400 /* not fcntl */ -#define O_EXCL 0x0800 /* not fcntl */ -#define O_SYNC 0x802000 -#define O_NONBLOCK 0x4000 -#define O_NDELAY (0x0004 | O_NONBLOCK) -#define O_NOCTTY 0x8000 /* not fcntl */ - -#define __O_DIRECTORY 0x10000 /* must be a directory */ -#define __O_NOFOLLOW 0x20000 /* don't follow links */ -#define __O_CLOEXEC 0x400000 /* Set close_on_exit. */ - -#define __O_DIRECT 0x100000 /* direct disk access hint */ -#define __O_NOATIME 0x200000 /* Do not set atime. */ -#define __O_PATH 0x1000000 /* Resolve pathname but do not open file. */ -#define __O_TMPFILE 0x2010000 /* Atomically create nameless file. */ - -#if __WORDSIZE == 64 -# define __O_LARGEFILE 0 -#else -# define __O_LARGEFILE 0x40000 -#endif - -#define __O_DSYNC 0x2000 /* Synchronize data. */ - - -#define __F_GETOWN 5 /* Get owner (process receiving SIGIO). */ -#define __F_SETOWN 6 /* Set owner (process receiving SIGIO). */ - -#ifndef __USE_FILE_OFFSET64 -# define F_GETLK 7 /* Get record locking info. */ -# define F_SETLK 8 /* Set record locking info (non-blocking). */ -# define F_SETLKW 9 /* Set record locking info (blocking). */ -#endif - -#if __WORDSIZE == 64 -# define F_GETLK64 7 /* Get record locking info. */ -# define F_SETLK64 8 /* Set record locking info (non-blocking). */ -# define F_SETLKW64 9 /* Set record locking info (blocking). */ -#endif - -/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ -#define F_RDLCK 1 /* Read lock. */ -#define F_WRLCK 2 /* Write lock. */ -#define F_UNLCK 3 /* Remove lock. */ - -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#ifndef __USE_FILE_OFFSET64 - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif - __pid_t l_pid; /* Process holding the lock. */ - short int __glibc_reserved; - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - short int __glibc_reserved; - }; -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/bits/inotify.h b/sysdeps/unix/sysv/linux/sparc/bits/inotify.h deleted file mode 100644 index 1130da9646..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/inotify.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_INOTIFY_H -# error "Never use directly; include instead." -#endif - -/* Flags for the parameter of inotify_init1. */ -enum - { - IN_CLOEXEC = 0x400000, -#define IN_CLOEXEC IN_CLOEXEC - IN_NONBLOCK = 0x004000 -#define IN_NONBLOCK IN_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/sparc/bits/ioctls.h b/sysdeps/unix/sysv/linux/sparc/bits/ioctls.h deleted file mode 100644 index 07796fd0ac..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/ioctls.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IOCTL_H -# error "Never use directly; include instead." -#endif - -/* Use the definitions from the kernel header files. */ -#include - -/* Oh well, this is necessary since the kernel data structure is - different from the user-level version. */ -#undef TCGETS -#undef TCSETS -#undef TCSETSW -#undef TCSETSF -#define TCGETS _IOR ('T', 8, char[36]) -#define TCSETS _IOW ('T', 9, char[36]) -#define TCSETSW _IOW ('T', 10, char[36]) -#define TCSETSF _IOW ('T', 11, char[36]) - -#include diff --git a/sysdeps/unix/sysv/linux/sparc/bits/ipc.h b/sysdeps/unix/sysv/linux/sparc/bits/ipc.h deleted file mode 100644 index 9e4d1517f1..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/ipc.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IPC_H -# error "Never use directly; include instead." -#endif - -#include -#include - -/* Mode bits for `msgget', `semget', and `shmget'. */ -#define IPC_CREAT 01000 /* Create key if key does not exist. */ -#define IPC_EXCL 02000 /* Fail if key exists. */ -#define IPC_NOWAIT 04000 /* Return error on wait. */ - -/* Control commands for `msgctl', `semctl', and `shmctl'. */ -#define IPC_RMID 0 /* Remove identifier. */ -#define IPC_SET 1 /* Set `ipc_perm' options. */ -#define IPC_STAT 2 /* Get `ipc_perm' options. */ -#ifdef __USE_GNU -# define IPC_INFO 3 /* See ipcs. */ -#endif - -/* Special key values. */ -#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ - - -/* Data structure used to pass permission information to IPC operations. */ -struct ipc_perm - { - __key_t __key; /* Key. */ - __uid_t uid; /* Owner's user ID. */ - __gid_t gid; /* Owner's group ID. */ - __uid_t cuid; /* Creator's user ID. */ - __gid_t cgid; /* Creator's group ID. */ -#if __WORDSIZE == 32 - unsigned short int __pad1; - unsigned short int mode; /* Read/write permission. */ - unsigned short int __pad2; -#else - __mode_t mode; /* Read/write permission. */ - unsigned short int __pad1; -#endif - unsigned short int __seq; /* Sequence number. */ - __extension__ unsigned long long int __glibc_reserved1; - __extension__ unsigned long long int __glibc_reserved2; - }; diff --git a/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h b/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h deleted file mode 100644 index 090fc6dca1..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Minimum guaranteed maximum values for system limits. Linux/SPARC version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -/* The kernel header pollutes the namespace with the NR_OPEN symbol - and defines LINK_MAX although filesystems have different maxima. A - similar thing is true for OPEN_MAX: the limit can be changed at - runtime and therefore the macro must not be defined. Remove this - after including the header if necessary. */ -#ifndef NR_OPEN -# define __undef_NR_OPEN -#endif -#ifndef LINK_MAX -# define __undef_LINK_MAX -#endif -#ifndef OPEN_MAX -# define __undef_OPEN_MAX -#endif -#ifndef ARG_MAX -# define __undef_ARG_MAX -#endif - -/* The kernel sources contain a file with all the needed information. */ -#include - -/* Have to remove NR_OPEN? */ -#ifdef __undef_NR_OPEN -# undef NR_OPEN -# undef __undef_NR_OPEN -#endif -/* Have to remove LINK_MAX? */ -#ifdef __undef_LINK_MAX -# undef LINK_MAX -# undef __undef_LINK_MAX -#endif -/* Have to remove OPEN_MAX? */ -#ifdef __undef_OPEN_MAX -# undef OPEN_MAX -# undef __undef_OPEN_MAX -#endif -/* Have to remove ARG_MAX? */ -#ifdef __undef_ARG_MAX -# undef ARG_MAX -# undef __undef_ARG_MAX -#endif - -/* The number of data keys per process. */ -#define _POSIX_THREAD_KEYS_MAX 128 -/* This is the value this implementation supports. */ -#define PTHREAD_KEYS_MAX 1024 - -/* Controlling the iterations of destructors for thread-specific data. */ -#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 -/* Number of iterations this implementation does. */ -#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS - -/* The number of threads per process. */ -#define _POSIX_THREAD_THREADS_MAX 64 -/* We have no predefined limit on the number of threads. */ -#undef PTHREAD_THREADS_MAX - -/* Maximum amount by which a process can descrease its asynchronous I/O - priority level. */ -#define AIO_PRIO_DELTA_MAX 20 - -/* Minimum size for a thread. We are free to choose a reasonable value. */ -#define PTHREAD_STACK_MIN 24576 - -/* Maximum number of timer expiration overruns. */ -#define DELAYTIMER_MAX 2147483647 - -/* Maximum tty name length. */ -#define TTY_NAME_MAX 32 - -/* Maximum login name length. This is arbitrary. */ -#define LOGIN_NAME_MAX 256 - -/* Maximum host name length. */ -#define HOST_NAME_MAX 64 - -/* Maximum message queue priority level. */ -#define MQ_PRIO_MAX 32768 - -/* Maximum value the semaphore can have. */ -#define SEM_VALUE_MAX (2147483647) diff --git a/sysdeps/unix/sysv/linux/sparc/bits/long-double.h b/sysdeps/unix/sysv/linux/sparc/bits/long-double.h deleted file mode 100644 index 094e05124b..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/long-double.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Properties of long double type. SPARC version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if !defined __NO_LONG_DOUBLE_MATH && __WORDSIZE == 32 -# define __LONG_DOUBLE_MATH_OPTIONAL 1 -# ifndef __LONG_DOUBLE_128__ -# define __NO_LONG_DOUBLE_MATH 1 -# endif -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/bits/mman.h b/sysdeps/unix/sysv/linux/sparc/bits/mman.h deleted file mode 100644 index d20361f5ec..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/mman.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/SPARC version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_GROWSDOWN 0x0200 /* Stack-like segment. */ -# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x0100 /* Lock the mapping. */ -# define MAP_NORESERVE 0x0040 /* Don't check for reservations. */ -# define _MAP_NEW 0x80000000 /* Binary compatibility with SunOS. */ -# define MAP_POPULATE 0x8000 /* Populate (prefault) pagetables. */ -# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ -#endif - -/* Flags for `mlockall'. */ -#define MCL_CURRENT 0x2000 /* Lock all currently mapped pages. */ -#define MCL_FUTURE 0x4000 /* Lock all additions to address - space. */ -#define MCL_ONFAULT 0x8000 /* Lock all pages that are - faulted in. */ -/* Include generic Linux declarations. */ -#include - -/* Other flags. */ -#ifdef __USE_MISC -# define MAP_RENAME MAP_ANONYMOUS -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/bits/msq.h b/sysdeps/unix/sysv/linux/sparc/bits/msq.h deleted file mode 100644 index 79572212cb..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/msq.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_MSG_H -# error "Never use directly; include instead." -#endif - -#include -#include - -/* Define options for message queue functions. */ -#define MSG_NOERROR 010000 /* no error if message is too big */ -#ifdef __USE_GNU -# define MSG_EXCEPT 020000 /* recv any msg except of specified type */ -# define MSG_COPY 040000 /* copy (not remove) all queue messages */ -#endif - -/* Types used in the structure definition. */ -typedef unsigned long int msgqnum_t; -typedef unsigned long int msglen_t; - - -/* Structure of record for one message inside the kernel. - The type `struct msg' is opaque. */ -struct msqid_ds -{ - struct ipc_perm msg_perm; /* structure describing operation permission */ -#if __WORDSIZE == 32 - unsigned int __pad1; -#endif - __time_t msg_stime; /* time of last msgsnd command */ -#if __WORDSIZE == 32 - unsigned int __pad2; -#endif - __time_t msg_rtime; /* time of last msgrcv command */ -#if __WORDSIZE == 32 - unsigned int __pad3; -#endif - __time_t msg_ctime; /* time of last change */ - unsigned long int __msg_cbytes; /* current number of bytes on queue */ - msgqnum_t msg_qnum; /* number of messages currently on queue */ - msglen_t msg_qbytes; /* max number of bytes allowed on queue */ - __pid_t msg_lspid; /* pid of last msgsnd() */ - __pid_t msg_lrpid; /* pid of last msgrcv() */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; -}; - -#ifdef __USE_MISC - -# define msg_cbytes __msg_cbytes - -/* ipcs ctl commands */ -# define MSG_STAT 11 -# define MSG_INFO 12 - -/* buffer for msgctl calls IPC_INFO, MSG_INFO */ -struct msginfo - { - int msgpool; - int msgmap; - int msgmax; - int msgmnb; - int msgmni; - int msgssz; - int msgtql; - unsigned short int msgseg; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/poll.h b/sysdeps/unix/sysv/linux/sparc/bits/poll.h deleted file mode 100644 index ace1594786..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/poll.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_POLL_H -# error "Never use directly; include instead." -#endif - -/* Event types that can be polled for. These bits may be set in `events' - to indicate the interesting event types; they will appear in `revents' - to indicate the status of the file descriptor. */ -#define POLLIN 0x001 /* There is data to read. */ -#define POLLPRI 0x002 /* There is urgent data to read. */ -#define POLLOUT 0x004 /* Writing now will not block. */ - -#if defined __USE_XOPEN || defined __USE_XOPEN2K8 -/* These values are defined in XPG4.2. */ -# define POLLRDNORM 0x040 /* Normal data may be read. */ -# define POLLRDBAND 0x080 /* Priority data may be read. */ -# define POLLWRNORM POLLOUT /* Writing now will not block. */ -# define POLLWRBAND 0x100 /* Priority data may be written. */ -#endif - -#ifdef __USE_GNU -/* These are extensions for Linux. */ -# define POLLMSG 0x200 -# define POLLREMOVE 0x400 -# define POLLRDHUP 0x800 -#endif - -/* Event types always implicitly polled for. These bits need not be set in - `events', but they will appear in `revents' to indicate the status of - the file descriptor. */ -#define POLLERR 0x008 /* Error condition. */ -#define POLLHUP 0x010 /* Hung up. */ -#define POLLNVAL 0x020 /* Invalid polling request. */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/resource.h b/sysdeps/unix/sysv/linux/sparc/bits/resource.h deleted file mode 100644 index 6b65d3aac7..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/resource.h +++ /dev/null @@ -1,280 +0,0 @@ -/* Bit values & structures for resource limits. Linux/SPARC version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_RESOURCE_H -# error "Never use directly; include instead." -#endif - -#include - -/* Transmute defines to enumerations. The macro re-definitions are - necessary because some programs want to test for operating system - features with #ifdef RUSAGE_SELF. In ISO C the reflexive - definition is a no-op. */ - -/* Kinds of resource limit. */ -enum __rlimit_resource -{ - /* Per-process CPU limit, in seconds. */ - RLIMIT_CPU = 0, -#define RLIMIT_CPU RLIMIT_CPU - - /* Largest file that can be created, in bytes. */ - RLIMIT_FSIZE = 1, -#define RLIMIT_FSIZE RLIMIT_FSIZE - - /* Maximum size of data segment, in bytes. */ - RLIMIT_DATA = 2, -#define RLIMIT_DATA RLIMIT_DATA - - /* Maximum size of stack segment, in bytes. */ - RLIMIT_STACK = 3, -#define RLIMIT_STACK RLIMIT_STACK - - /* Largest core file that can be created, in bytes. */ - RLIMIT_CORE = 4, -#define RLIMIT_CORE RLIMIT_CORE - - /* Largest resident set size, in bytes. - This affects swapping; processes that are exceeding their - resident set size will be more likely to have physical memory - taken from them. */ - __RLIMIT_RSS = 5, -#define RLIMIT_RSS __RLIMIT_RSS - - /* Number of open files. */ - RLIMIT_NOFILE = 6, - __RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */ -#define RLIMIT_NOFILE RLIMIT_NOFILE -#define RLIMIT_OFILE __RLIMIT_OFILE - - /* Address space limit (?) */ - RLIMIT_AS = 9, -#define RLIMIT_AS RLIMIT_AS - - /* Number of processes. */ - __RLIMIT_NPROC = 7, -#define RLIMIT_NPROC __RLIMIT_NPROC - - /* Locked-in-memory address space. */ - __RLIMIT_MEMLOCK = 8, -#define RLIMIT_MEMLOCK __RLIMIT_MEMLOCK - - /* Maximum number of file locks. */ - __RLIMIT_LOCKS = 10, -#define RLIMIT_LOCKS __RLIMIT_LOCKS - - /* Maximum number of pending signals. */ - __RLIMIT_SIGPENDING = 11, -#define RLIMIT_SIGPENDING __RLIMIT_SIGPENDING - - /* Maximum bytes in POSIX message queues. */ - __RLIMIT_MSGQUEUE = 12, -#define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE - - /* Maximum nice priority allowed to raise to. - Nice levels 19 .. -20 correspond to 0 .. 39 - values of this resource limit. */ - __RLIMIT_NICE = 13, -#define RLIMIT_NICE __RLIMIT_NICE - - /* Maximum realtime priority allowed for non-priviledged - processes. */ - __RLIMIT_RTPRIO = 14, -#define RLIMIT_RTPRIO __RLIMIT_RTPRIO - - /* Maximum CPU time in µs that a process scheduled under a real-time - scheduling policy may consume without making a blocking system - call before being forcibly descheduled. */ - __RLIMIT_RTTIME = 15, -#define RLIMIT_RTTIME __RLIMIT_RTTIME - - __RLIMIT_NLIMITS = 16, - __RLIM_NLIMITS = __RLIMIT_NLIMITS -#define RLIMIT_NLIMITS __RLIMIT_NLIMITS -#define RLIM_NLIMITS __RLIM_NLIMITS -}; - -/* Value to indicate that there is no limit. */ -#if __WORDSIZE == 64 - -#ifndef __USE_FILE_OFFSET64 -# define RLIM_INFINITY ((unsigned long int)(~0UL)) -#else -# define RLIM_INFINITY 0xffffffffffffffffuLL -#endif - -#ifdef __USE_LARGEFILE64 -# define RLIM64_INFINITY 0xffffffffffffffffuLL -#endif - -#else - -#ifndef __USE_FILE_OFFSET64 -# define RLIM_INFINITY ((long int)(~0UL >> 1)) -#else -# define RLIM_INFINITY 0xffffffffffffffffLL -#endif - -#ifdef __USE_LARGEFILE64 -# define RLIM64_INFINITY 0xffffffffffffffffLL -#endif - -#endif - -/* We can represent all limits. */ -#define RLIM_SAVED_MAX RLIM_INFINITY -#define RLIM_SAVED_CUR RLIM_INFINITY - - -/* Type for resource quantity measurement. */ -#ifndef __USE_FILE_OFFSET64 -typedef __rlim_t rlim_t; -#else -typedef __rlim64_t rlim_t; -#endif -#ifdef __USE_LARGEFILE64 -typedef __rlim64_t rlim64_t; -#endif - -struct rlimit - { - /* The current (soft) limit. */ - rlim_t rlim_cur; - /* The hard limit. */ - rlim_t rlim_max; - }; - -#ifdef __USE_LARGEFILE64 -struct rlimit64 - { - /* The current (soft) limit. */ - rlim64_t rlim_cur; - /* The hard limit. */ - rlim64_t rlim_max; - }; -#endif - -/* Whose usage statistics do you want? */ -enum __rusage_who -{ - /* The calling process. */ - RUSAGE_SELF = 0, -#define RUSAGE_SELF RUSAGE_SELF - - /* All of its terminated child processes. */ - RUSAGE_CHILDREN = -1 -#define RUSAGE_CHILDREN RUSAGE_CHILDREN - -#ifdef __USE_GNU - , - /* The calling thread. */ - RUSAGE_THREAD = 1 -# define RUSAGE_THREAD RUSAGE_THREAD - /* Name for the same functionality on Solaris. */ -# define RUSAGE_LWP RUSAGE_THREAD -#endif -}; - -#include - -/* Structure which says how much of each resource has been used. */ -struct rusage - { - /* Total amount of user time used. */ - struct timeval ru_utime; - /* Total amount of system time used. */ - struct timeval ru_stime; - /* Maximum resident set size (in kilobytes). */ - long int ru_maxrss; - /* Amount of sharing of text segment memory - with other processes (kilobyte-seconds). */ - long int ru_ixrss; - /* Amount of data segment memory used (kilobyte-seconds). */ - long int ru_idrss; - /* Amount of stack memory used (kilobyte-seconds). */ - long int ru_isrss; - /* Number of soft page faults (i.e. those serviced by reclaiming - a page from the list of pages awaiting reallocation. */ - long int ru_minflt; - /* Number of hard page faults (i.e. those that required I/O). */ - long int ru_majflt; - /* Number of times a process was swapped out of physical memory. */ - long int ru_nswap; - /* Number of input operations via the file system. Note: This - and `ru_oublock' do not include operations with the cache. */ - long int ru_inblock; - /* Number of output operations via the file system. */ - long int ru_oublock; - /* Number of IPC messages sent. */ - long int ru_msgsnd; - /* Number of IPC messages received. */ - long int ru_msgrcv; - /* Number of signals delivered. */ - long int ru_nsignals; - /* Number of voluntary context switches, i.e. because the process - gave up the process before it had to (usually to wait for some - resource to be available). */ - long int ru_nvcsw; - /* Number of involuntary context switches, i.e. a higher priority process - became runnable or the current process used up its time slice. */ - long int ru_nivcsw; - }; - -/* Priority limits. */ -#define PRIO_MIN -20 /* Minimum priority a process can have. */ -#define PRIO_MAX 20 /* Maximum priority a process can have. */ - -/* The type of the WHICH argument to `getpriority' and `setpriority', - indicating what flavor of entity the WHO argument specifies. */ -enum __priority_which -{ - PRIO_PROCESS = 0, /* WHO is a process ID. */ -#define PRIO_PROCESS PRIO_PROCESS - PRIO_PGRP = 1, /* WHO is a process group ID. */ -#define PRIO_PGRP PRIO_PGRP - PRIO_USER = 2 /* WHO is a user ID. */ -#define PRIO_USER PRIO_USER -}; - -__BEGIN_DECLS - -#ifdef __USE_GNU -/* Modify and return resource limits of a process atomically. */ -# ifndef __USE_FILE_OFFSET64 -extern int prlimit (__pid_t __pid, enum __rlimit_resource __resource, - const struct rlimit *__new_limit, - struct rlimit *__old_limit) __THROW; -# else -# ifdef __REDIRECT_NTH -extern int __REDIRECT_NTH (prlimit, (__pid_t __pid, - enum __rlimit_resource __resource, - const struct rlimit *__new_limit, - struct rlimit *__old_limit), prlimit64); -# else -# define prlimit prlimit64 -# endif -# endif -# ifdef __USE_LARGEFILE64 -extern int prlimit64 (__pid_t __pid, enum __rlimit_resource __resource, - const struct rlimit64 *__new_limit, - struct rlimit64 *__old_limit) __THROW; -# endif -#endif - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sem.h b/sysdeps/unix/sysv/linux/sparc/bits/sem.h deleted file mode 100644 index c3cf059eb8..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/sem.h +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SEM_H -# error "Never include directly; use instead." -#endif - -#include -#include - -/* Flags for `semop'. */ -#define SEM_UNDO 0x1000 /* undo the operation on exit */ - -/* Commands for `semctl'. */ -#define GETPID 11 /* get sempid */ -#define GETVAL 12 /* get semval */ -#define GETALL 13 /* get all semval's */ -#define GETNCNT 14 /* get semncnt */ -#define GETZCNT 15 /* get semzcnt */ -#define SETVAL 16 /* set semval */ -#define SETALL 17 /* set all semval's */ - - -/* Data structure describing a set of semaphores. */ -struct semid_ds -{ - struct ipc_perm sem_perm; /* operation permission struct */ -#if __WORDSIZE == 32 - unsigned int __pad1; -#endif - __time_t sem_otime; /* last semop() time */ -#if __WORDSIZE == 32 - unsigned int __pad2; -#endif - __time_t sem_ctime; /* last time changed by semctl() */ - unsigned long int sem_nsems; /* number of semaphores in set */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; -}; - -/* The user should define a union like the following to use it for arguments - for `semctl'. - - union semun - { - int val; <= value for SETVAL - struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET - unsigned short int *array; <= array for GETALL & SETALL - struct seminfo *__buf; <= buffer for IPC_INFO - }; - - Previous versions of this file used to define this union but this is - incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether - one must define the union or not. */ -#define _SEM_SEMUN_UNDEFINED 1 - -#ifdef __USE_MISC - -/* ipcs ctl cmds */ -# define SEM_STAT 18 -# define SEM_INFO 19 - -struct seminfo -{ - int semmap; - int semmni; - int semmns; - int semmnu; - int semmsl; - int semopm; - int semume; - int semusz; - int semvmx; - int semaem; -}; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/setjmp.h b/sysdeps/unix/sysv/linux/sparc/bits/setjmp.h deleted file mode 100644 index 5e92e829d5..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/setjmp.h +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include directly; use instead." -#endif - -#include - -#if __WORDSIZE == 64 - -#ifndef _ASM -typedef struct __sparc64_jmp_buf - { - struct __sparc64_jmp_buf *__uc_link; - unsigned long __uc_flags; - unsigned long __uc_sigmask; - struct __sparc64_jmp_buf_mcontext - { - unsigned long __mc_gregs[19]; - unsigned long __mc_fp; - unsigned long __mc_i7; - struct __sparc64_jmp_buf_fpu - { - union - { - unsigned int __sregs[32]; - unsigned long __dregs[32]; - long double __qregs[16]; - } __mcfpu_fpregs; - unsigned long __mcfpu_fprs; - unsigned long __mcfpu_gsr; - void *__mcfpu_fq; - unsigned char __mcfpu_qcnt; - unsigned char __mcfpu_qentsz; - unsigned char __mcfpu_enab; - } __mc_fpregs; - } __uc_mcontext; - } __jmp_buf[1]; -#endif - -#else - -#ifndef _ASM -typedef int __jmp_buf[3]; -#endif - -#endif - -#endif /* bits/setjmp.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/shm.h b/sysdeps/unix/sysv/linux/sparc/bits/shm.h deleted file mode 100644 index c7857cc4fa..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/shm.h +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SHM_H -# error "Never include directly; use instead." -#endif - -#include -#include - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from */ -#define SHM_W 0200 /* or S_IWUGO from */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ -#define SHM_EXEC 0100000 /* execution access */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -__BEGIN_DECLS - -/* Segment low boundary address multiple. */ -#define SHMLBA (__getshmlba ()) -extern int __getshmlba (void) __attribute__ ((__const__)); - - -/* Type to count number of attaches. */ -typedef unsigned long int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ -#if __WORDSIZE == 32 - unsigned int __pad1; -#endif - __time_t shm_atime; /* time of last shmat() */ -#if __WORDSIZE == 32 - unsigned int __pad2; -#endif - __time_t shm_dtime; /* time of last shmdt() */ -#if __WORDSIZE == 32 - unsigned int __pad3; -#endif - __time_t shm_ctime; /* time of last change by shmctl() */ - size_t shm_segsz; /* size of segment in bytes */ - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - unsigned long shmmax; - unsigned long shmmin; - unsigned long shmmni; - unsigned long shmseg; - unsigned long shmall; - unsigned long __glibc_reserved1; - unsigned long __glibc_reserved2; - unsigned long __glibc_reserved3; - unsigned long __glibc_reserved4; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h b/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h deleted file mode 100644 index 6ab47f416c..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h +++ /dev/null @@ -1,82 +0,0 @@ -/* The proper definitions for Linux/SPARC sigaction. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SIGNAL_H -# error "Never include directly; use instead." -#endif - -#include - -/* Structure describing the action to be taken when a signal arrives. */ -struct sigaction - { - /* Signal handler. */ -#ifdef __USE_POSIX199309 - union - { - /* Used if SA_SIGINFO is not set. */ - __sighandler_t sa_handler; - /* Used if SA_SIGINFO is set. */ - void (*sa_sigaction) (int, siginfo_t *, void *); - } - __sigaction_handler; -# define sa_handler __sigaction_handler.sa_handler -# define sa_sigaction __sigaction_handler.sa_sigaction -#else - __sighandler_t sa_handler; -#endif - - /* Additional set of signals to be blocked. */ - __sigset_t sa_mask; - - /* Special flags. */ -#if __WORDSIZE == 64 - int __glibc_reserved0; -#endif - int sa_flags; - - /* Not used by Linux/Sparc yet. */ - void (*sa_restorer) (void); - }; - - -/* Bits in `sa_flags'. */ -#define SA_NOCLDSTOP 0x00000008 /* Don't send SIGCHLD when children stop. */ -#define SA_NOCLDWAIT 0x00000100 /* Don't create zombie on child death. */ -#define SA_SIGINFO 0x00000200 /* Invoke signal-catching function with - three arguments instead of one. */ -#if defined __USE_UNIX98 || defined __USE_MISC -# define SA_ONSTACK 0x00000001 /* Use signal stack by using `sa_restorer'. */ -#endif -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 -# define SA_RESTART 0x00000002 /* Restart syscall on signal return. */ -# define SA_INTERRUPT 0x00000010 /* Historical no-op. */ -# define SA_NOMASK 0x00000020 /* Don't automatically block the signal when - its handler is being executed. */ -# define SA_ONESHOT 0x00000004 /* Reset to SIG_DFL on entry to handler. */ - -/* Some aliases for the SA_ constants. */ -# define SA_NODEFER SA_NOMASK -# define SA_RESETHAND SA_ONESHOT -# define SA_STACK SA_ONSTACK -#endif - -/* Values for the HOW argument to `sigprocmask'. */ -#define SIG_BLOCK 1 /* Block signals. */ -#define SIG_UNBLOCK 2 /* Unblock signals. */ -#define SIG_SETMASK 4 /* Set the set of blocked signals. */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sigcontext.h b/sysdeps/unix/sysv/linux/sparc/bits/sigcontext.h deleted file mode 100644 index 78e09a5809..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/sigcontext.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SIGCONTEXT_H -#define _BITS_SIGCONTEXT_H 1 - -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H -# error "Never use directly; include instead." -#endif - -#include - -#if __WORDSIZE == 32 - -/* It is quite hard to choose what to put here, because - Linux/sparc32 had at least 3 totally incompatible - signal stack layouts. - This one is for the "new" style signals, which are - now delivered unless SA_SIGINFO is requested. */ - -struct sigcontext - { - struct - { - unsigned int psr; - unsigned int pc; - unsigned int npc; - unsigned int y; - unsigned int u_regs[16]; /* globals and ins */ - } si_regs; - int si_mask; - }; - -#else /* sparc64 */ - -typedef struct - { - unsigned int si_float_regs [64]; - unsigned long si_fsr; - unsigned long si_gsr; - unsigned long si_fprs; - } __siginfo_fpu_t; - -struct sigcontext - { - char sigc_info[128]; - struct - { - unsigned long u_regs[16]; /* globals and ins */ - unsigned long tstate; - unsigned long tpc; - unsigned long tnpc; - unsigned int y; - unsigned int fprs; - } sigc_regs; - __siginfo_fpu_t * sigc_fpu_save; - struct - { - void * ss_sp; - int ss_flags; - unsigned long ss_size; - } sigc_stack; - unsigned long sigc_mask; -}; - -#endif /* sparc64 */ - -#endif /* bits/sigcontext.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h b/sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h deleted file mode 100644 index 9f79715ebe..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h +++ /dev/null @@ -1,12 +0,0 @@ -/* Architecture-specific adjustments to siginfo_t. SPARC version. */ -#ifndef _BITS_SIGINFO_ARCH_H -#define _BITS_SIGINFO_ARCH_H 1 - -#define __SI_BAND_TYPE int - -#define __SI_SIGFAULT_ADDL \ - int _si_trapno; - -#define si_trapno _sifields._sigfault._si_trapno - -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/bits/siginfo-consts-arch.h b/sysdeps/unix/sysv/linux/sparc/bits/siginfo-consts-arch.h deleted file mode 100644 index 721dc9cd43..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/siginfo-consts-arch.h +++ /dev/null @@ -1,12 +0,0 @@ -/* Architecture-specific additional siginfo constants. SPARC version. */ -#ifndef _BITS_SIGINFO_CONSTS_ARCH_H -#define _BITS_SIGINFO_CONSTS_ARCH_H 1 - -/* `si_code' values for SIGEMT signal. */ -enum -{ - EMT_TAGOVF = 1 /* Tag overflow. */ -#define EMT_TAGOVF EMT_TAGOVF -}; - -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/bits/signalfd.h b/sysdeps/unix/sysv/linux/sparc/bits/signalfd.h deleted file mode 100644 index 6a5bea24b7..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/signalfd.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SIGNALFD_H -# error "Never use directly; include instead." -#endif - -/* Flags for signalfd. */ -enum - { - SFD_CLOEXEC = 0x400000, -#define SFD_CLOEXEC SFD_CLOEXEC - SFD_NONBLOCK = 0x004000 -#define SFD_NONBLOCK SFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/sparc/bits/signum.h b/sysdeps/unix/sysv/linux/sparc/bits/signum.h deleted file mode 100644 index a0c5be5fa5..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/signum.h +++ /dev/null @@ -1,83 +0,0 @@ -/* Signal number definitions. Linux/SPARC version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef _SIGNAL_H - -/* Fake signal functions. */ -#define SIG_ERR ((__sighandler_t) -1) /* Error return. */ -#define SIG_DFL ((__sighandler_t) 0) /* Default action. */ -#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */ - -#ifdef __USE_XOPEN -# define SIG_HOLD ((__sighandler_t) 2) /* Add signal to hold mask. */ -#endif - -/* - * Linux/SPARC has different signal numbers that Linux/i386: I'm trying - * to make it OSF/1 binary compatible, at least for normal binaries. - */ -#define SIGHUP 1 -#define SIGINT 2 -#define SIGQUIT 3 -#define SIGILL 4 -#define SIGTRAP 5 -#define SIGABRT 6 -#define SIGIOT 6 -#define SIGEMT 7 -#define SIGFPE 8 -#define SIGKILL 9 -#define SIGBUS 10 -#define SIGSEGV 11 -#define SIGSYS 12 -#define SIGPIPE 13 -#define SIGALRM 14 -#define SIGTERM 15 -#define SIGURG 16 - -/* SunOS values which deviate from the Linux/i386 ones */ -#define SIGSTOP 17 -#define SIGTSTP 18 -#define SIGCONT 19 -#define SIGCHLD 20 -#define SIGCLD SIGCHLD /* Same as SIGCHLD (System V). */ -#define SIGTTIN 21 -#define SIGTTOU 22 -#define SIGIO 23 -#define SIGPOLL SIGIO /* SysV name for SIGIO */ -#define SIGXCPU 24 -#define SIGXFSZ 25 -#define SIGVTALRM 26 -#define SIGPROF 27 -#define SIGWINCH 28 -#define SIGLOST 29 -#define SIGPWR SIGLOST -#define SIGUSR1 30 -#define SIGUSR2 31 - -#define _NSIG 65 /* Biggest signal number + 1 - (including real-time signals). */ - -#define SIGRTMIN (__libc_current_sigrtmin ()) -#define SIGRTMAX (__libc_current_sigrtmax ()) - -/* These are the hard limits of the kernel. These values should not be - used directly at user level. */ -#define __SIGRTMIN 32 -#define __SIGRTMAX (_NSIG - 1) - -#endif /* included. */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sigstack.h b/sysdeps/unix/sysv/linux/sparc/bits/sigstack.h deleted file mode 100644 index 74670cb037..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/sigstack.h +++ /dev/null @@ -1,32 +0,0 @@ -/* sigstack, sigaltstack definitions. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SIGSTACK_H -#define _BITS_SIGSTACK_H 1 - -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H -# error "Never include this file directly. Use instead" -#endif - -/* Minimum stack size for a signal handler. */ -#define MINSIGSTKSZ 4096 - -/* System default stack size. */ -#define SIGSTKSZ 16384 - -#endif /* bits/sigstack.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/socket_type.h b/sysdeps/unix/sysv/linux/sparc/bits/socket_type.h deleted file mode 100644 index 53fcd0c018..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/socket_type.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Define enum __socket_type for Linux/SPARC. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SOCKET_H -# error "Never include directly; use instead." -#endif - -/* Types of sockets. */ -enum __socket_type -{ - SOCK_STREAM = 1, /* Sequenced, reliable, connection-based - byte streams. */ -#define SOCK_STREAM SOCK_STREAM - SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams - of fixed maximum length. */ -#define SOCK_DGRAM SOCK_DGRAM - SOCK_RAW = 3, /* Raw protocol interface. */ -#define SOCK_RAW SOCK_RAW - SOCK_RDM = 4, /* Reliably-delivered messages. */ -#define SOCK_RDM SOCK_RDM - SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based, - datagrams of fixed maximum length. */ -#define SOCK_SEQPACKET SOCK_SEQPACKET - SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */ -#define SOCK_DCCP SOCK_DCCP - SOCK_PACKET = 10, /* Linux specific way of getting packets - at the dev level. For writing rarp and - other similar things on the user level. */ -#define SOCK_PACKET SOCK_PACKET - - /* Flags to be ORed into the type parameter of socket and socketpair and - used for the flags parameter of paccept. */ - - SOCK_CLOEXEC = 0x400000, /* Atomically set close-on-exec flag for the - new descriptor(s). */ -#define SOCK_CLOEXEC SOCK_CLOEXEC - SOCK_NONBLOCK = 0x004000 /* Atomically mark descriptor(s) as - non-blocking. */ -#define SOCK_NONBLOCK SOCK_NONBLOCK -}; diff --git a/sysdeps/unix/sysv/linux/sparc/bits/stat.h b/sysdeps/unix/sysv/linux/sparc/bits/stat.h deleted file mode 100644 index 87b1c9d1ca..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/stat.h +++ /dev/null @@ -1,173 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STAT_H -#define _BITS_STAT_H 1 - -/* Versions of the `struct stat' data structure. */ -#define _STAT_VER_LINUX_OLD 1 -#define _STAT_VER_KERNEL 1 -#define _STAT_VER_SVR4 2 -#define _STAT_VER_LINUX 3 -#define _STAT_VER _STAT_VER_LINUX /* The one defined below. */ - -/* Versions of the `xmknod' interface. */ -#define _MKNOD_VER_LINUX 1 -#define _MKNOD_VER_SVR4 2 -#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */ - - -struct stat - { - __dev_t st_dev; /* Device. */ -#if __WORDSIZE == 64 || !defined __USE_FILE_OFFSET64 - unsigned short int __pad1; - __ino_t st_ino; /* File serial number. */ -#else - __ino64_t st_ino; /* File serial number. */ -#endif - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - unsigned short int __pad2; -#ifndef __USE_FILE_OFFSET64 - __off_t st_size; /* Size of file, in bytes. */ -#else - __off64_t st_size; /* Size of file, in bytes. */ -#endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - -#ifndef __USE_FILE_OFFSET64 - __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */ -#else - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -#endif -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -#endif - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; - }; - -#ifdef __USE_LARGEFILE64 -struct stat64 - { - __dev_t st_dev; /* Device. */ -# if __WORDSIZE == 64 - unsigned short int __pad1; -# endif - __ino64_t st_ino; /* File serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ - __dev_t st_rdev; /* Device number, if device. */ - unsigned short int __pad2; - __off64_t st_size; /* Size of file, in bytes. */ - __blksize_t st_blksize; /* Optimal block size for I/O. */ - - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -# else - __time_t st_atime; /* Time of last access. */ - unsigned long int st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - unsigned long int st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - unsigned long int st_ctimensec; /* Nsecs of last status change. */ -# endif - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; - }; -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -/* Nanosecond resolution time values are supported. */ -#define _STATBUF_ST_NSEC - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFIFO 0010000 /* FIFO. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ - -/* POSIX.1b objects. Note that these macros always evaluate to zero. But - they do it by enforcing the correct use of the macros. */ -#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 0400 /* Read by owner. */ -#define __S_IWRITE 0200 /* Write by owner. */ -#define __S_IEXEC 0100 /* Execute by owner. */ - -#ifdef __USE_ATFILE -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) -#endif - -#endif /* bits/stat.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/termios.h b/sysdeps/unix/sysv/linux/sparc/bits/termios.h deleted file mode 100644 index 82678ea156..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/termios.h +++ /dev/null @@ -1,225 +0,0 @@ -/* termios type and macro definitions. Linux/SPARC version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TERMIOS_H -# error "Never include directly; use instead." -#endif - -typedef unsigned char cc_t; -typedef unsigned int speed_t; -typedef unsigned int tcflag_t; - -#define NCCS 17 -struct termios - { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline */ - cc_t c_cc[NCCS]; /* control characters */ - }; - -/* c_cc characters */ -#define VINTR 0 -#define VQUIT 1 -#define VERASE 2 -#define VKILL 3 -#define VEOF 4 -#define VEOL 5 -#define VEOL2 6 -#define VSWTC 7 -#define VSTART 8 -#define VSTOP 9 -#define VSUSP 10 -#define VDSUSP 11 /* SunOS POSIX nicety I do believe... */ -#define VREPRINT 12 -#define VDISCARD 13 -#define VWERASE 14 -#define VLNEXT 15 - -/* User apps assume vmin/vtime is shared with eof/eol */ -#define VMIN VEOF -#define VTIME VEOL - -/* c_iflag bits */ -#define IGNBRK 0x00000001 -#define BRKINT 0x00000002 -#define IGNPAR 0x00000004 -#define PARMRK 0x00000008 -#define INPCK 0x00000010 -#define ISTRIP 0x00000020 -#define INLCR 0x00000040 -#define IGNCR 0x00000080 -#define ICRNL 0x00000100 -#define IUCLC 0x00000200 -#define IXON 0x00000400 -#define IXANY 0x00000800 -#define IXOFF 0x00001000 -#define IMAXBEL 0x00002000 -#define IUTF8 0x00004000 - -/* c_oflag bits */ -#define OPOST 0x00000001 -#define OLCUC 0x00000002 -#define ONLCR 0x00000004 -#define OCRNL 0x00000008 -#define ONOCR 0x00000010 -#define ONLRET 0x00000020 -#define OFILL 0x00000040 -#define OFDEL 0x00000080 -#if defined __USE_MISC || defined __USE_XOPEN -# define NLDLY 0x00000100 -# define NL0 0x00000000 -# define NL1 0x00000100 -# define CRDLY 0x00000600 -# define CR0 0x00000000 -# define CR1 0x00000200 -# define CR2 0x00000400 -# define CR3 0x00000600 -# define TABDLY 0x00001800 -# define TAB0 0x00000000 -# define TAB1 0x00000800 -# define TAB2 0x00001000 -# define TAB3 0x00001800 -# define BSDLY 0x00002000 -# define BS0 0x00000000 -# define BS1 0x00002000 -#define FFDLY 0x00008000 -#define FF0 0x00000000 -#define FF1 0x00008000 -#endif -#define VTDLY 0x00004000 -#define VT0 0x00000000 -#define VT1 0x00004000 - -# if defined __USE_GNU -#define PAGEOUT 0x00010000 /* SUNOS specific */ -#define WRAP 0x00020000 /* SUNOS specific */ -# endif - -#ifdef __USE_MISC -# define XTABS 0x00001800 -#endif - -/* c_cflag bit meaning */ -#ifdef __USE_MISC -# define CBAUD 0x0000100f -#endif -#define B0 0x00000000 /* hang up */ -#define B50 0x00000001 -#define B75 0x00000002 -#define B110 0x00000003 -#define B134 0x00000004 -#define B150 0x00000005 -#define B200 0x00000006 -#define B300 0x00000007 -#define B600 0x00000008 -#define B1200 0x00000009 -#define B1800 0x0000000a -#define B2400 0x0000000b -#define B4800 0x0000000c -#define B9600 0x0000000d -#define B19200 0x0000000e -#define B38400 0x0000000f -#ifdef __USE_MISC -# define EXTA B19200 -# define EXTB B38400 -#endif -#define CSIZE 0x00000030 -#define CS5 0x00000000 -#define CS6 0x00000010 -#define CS7 0x00000020 -#define CS8 0x00000030 -#define CSTOPB 0x00000040 -#define CREAD 0x00000080 -#define PARENB 0x00000100 -#define PARODD 0x00000200 -#define HUPCL 0x00000400 -#define CLOCAL 0x00000800 -#ifdef __USE_MISC -# define CBAUDEX 0x00001000 -#endif -#define B57600 0x00001001 -#define B115200 0x00001002 -#define B230400 0x00001003 -#define B460800 0x00001004 -#define B76800 0x00001005 -#define B153600 0x00001006 -#define B307200 0x00001007 -#define B614400 0x00001008 -#define B921600 0x00001009 -#define B500000 0x0000100a -#define B576000 0x0000100b -#define B1000000 0x0000100c -#define B1152000 0x0000100d -#define B1500000 0x0000100e -#define B2000000 0x0000100f -#define __MAX_BAUD B2000000 - -#ifdef __USE_MISC -# define CIBAUD 0x100f0000 /* input baud rate (not used) */ -# define CMSPAR 0x40000000 /* mark or space (stick) parity */ -# define CRTSCTS 0x80000000 /* flow control */ -#endif - -/* c_lflag bits */ -#define ISIG 0x00000001 -#define ICANON 0x00000002 -#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K) -# define XCASE 0x00000004 -#endif -#define ECHO 0x00000008 -#define ECHOE 0x00000010 -#define ECHOK 0x00000020 -#define ECHONL 0x00000040 -#define NOFLSH 0x00000080 -#define TOSTOP 0x00000100 -#ifdef __USE_MISC -# define ECHOCTL 0x00000200 -# define ECHOPRT 0x00000400 -# define ECHOKE 0x00000800 -# define DEFECHO 0x00001000 /* SUNOS thing, what is it? */ -# define FLUSHO 0x00002000 -# define PENDIN 0x00004000 -#endif -#define IEXTEN 0x00008000 -#ifdef __USE_MISC -# define EXTPROC 0x00010000 -#endif - -# if defined __USE_GNU -/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ -#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ -#endif - -/* tcflow() and TCXONC use these */ -#define TCOOFF 0 -#define TCOON 1 -#define TCIOFF 2 -#define TCION 3 - -/* tcflush() and TCFLSH use these */ -#define TCIFLUSH 0 -#define TCOFLUSH 1 -#define TCIOFLUSH 2 - -/* tcsetattr uses these */ -#define TCSANOW 0 -#define TCSADRAIN 1 -#define TCSAFLUSH 2 diff --git a/sysdeps/unix/sysv/linux/sparc/bits/timerfd.h b/sysdeps/unix/sysv/linux/sparc/bits/timerfd.h deleted file mode 100644 index d484c352e6..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/timerfd.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_TIMERFD_H -# error "Never use directly; include instead." -#endif - -/* Bits to be set in the FLAGS parameter of `timerfd_create'. */ -enum - { - TFD_CLOEXEC = 0x400000, -#define TFD_CLOEXEC TFD_CLOEXEC - TFD_NONBLOCK = 0x004000 -#define TFD_NONBLOCK TFD_NONBLOCK - }; diff --git a/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h b/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h deleted file mode 100644 index e3f9127b05..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h +++ /dev/null @@ -1,83 +0,0 @@ -/* bits/typesizes.h -- underlying types for *_t. Linux/SPARC version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_TYPES_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_TYPESIZES_H -#define _BITS_TYPESIZES_H 1 - -/* See for the meaning of these macros. This file exists so - that need not vary across different GNU platforms. */ - -#define __DEV_T_TYPE __UQUAD_TYPE -#define __UID_T_TYPE __U32_TYPE -#define __GID_T_TYPE __U32_TYPE -#define __INO_T_TYPE __ULONGWORD_TYPE -#define __INO64_T_TYPE __UQUAD_TYPE -#define __MODE_T_TYPE __U32_TYPE -#define __NLINK_T_TYPE __U32_TYPE -#define __OFF_T_TYPE __SLONGWORD_TYPE -#define __OFF64_T_TYPE __SQUAD_TYPE -#define __PID_T_TYPE __S32_TYPE -#define __RLIM_T_TYPE __ULONGWORD_TYPE -#define __RLIM64_T_TYPE __UQUAD_TYPE -#define __BLKCNT_T_TYPE __SLONGWORD_TYPE -#define __BLKCNT64_T_TYPE __SQUAD_TYPE -#define __FSBLKCNT_T_TYPE __ULONGWORD_TYPE -#define __FSBLKCNT64_T_TYPE __UQUAD_TYPE -#define __FSFILCNT_T_TYPE __ULONGWORD_TYPE -#define __FSFILCNT64_T_TYPE __UQUAD_TYPE -#define __FSWORD_T_TYPE __SWORD_TYPE -#define __ID_T_TYPE __U32_TYPE -#define __CLOCK_T_TYPE __SLONGWORD_TYPE -#define __TIME_T_TYPE __SLONGWORD_TYPE -#define __USECONDS_T_TYPE __U32_TYPE -#define __SUSECONDS_T_TYPE __S32_TYPE -#define __DADDR_T_TYPE __S32_TYPE -#define __KEY_T_TYPE __S32_TYPE -#define __CLOCKID_T_TYPE __S32_TYPE -#define __TIMER_T_TYPE void * -#define __BLKSIZE_T_TYPE __SLONGWORD_TYPE -#define __FSID_T_TYPE struct { int __val[2]; } -#define __SSIZE_T_TYPE __SWORD_TYPE -#define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE -#define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE -#define __CPU_MASK_TYPE __ULONGWORD_TYPE - -#if defined __arch64__ || defined __sparcv9 -/* Tell the libc code that off_t and off64_t are actually the same type - for all ABI purposes, even if possibly expressed as different base types - for C type-checking purposes. */ -# define __OFF_T_MATCHES_OFF64_T 1 - -/* Same for ino_t and ino64_t. */ -# define __INO_T_MATCHES_INO64_T 1 - -/* And for __rlim_t and __rlim64_t. */ -# define __RLIM_T_MATCHES_RLIM64_T 1 -#else -# define __RLIM_T_MATCHES_RLIM64_T 0 -#endif - -/* Number of descriptors that can fit in an `fd_set'. */ -#define __FD_SETSIZE 1024 - - -#endif /* bits/typesizes.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/wordsize.h b/sysdeps/unix/sysv/linux/sparc/bits/wordsize.h deleted file mode 100644 index 7562875ee2..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/wordsize.h +++ /dev/null @@ -1,11 +0,0 @@ -/* Determine the wordsize from the preprocessor defines. */ - -#if defined __arch64__ || defined __sparcv9 -# define __WORDSIZE 64 -# define __WORDSIZE_TIME64_COMPAT32 1 -#else -# define __WORDSIZE 32 -# define __WORDSIZE32_SIZE_ULONG 0 -# define __WORDSIZE32_PTRDIFF_LONG 0 -# define __WORDSIZE_TIME64_COMPAT32 0 -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/configure b/sysdeps/unix/sysv/linux/sparc/configure deleted file mode 100644 index 00fb21e156..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/configure +++ /dev/null @@ -1,5 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/sparc. - -libc_cv_gcc_unwind_find_fde=yes -ldd_rewrite_script=sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/sparc/configure.ac b/sysdeps/unix/sysv/linux/sparc/configure.ac deleted file mode 100644 index 7e2af9847a..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/configure.ac +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/sparc. - -libc_cv_gcc_unwind_find_fde=yes -ldd_rewrite_script=sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/sparc/dl-cache.h b/sysdeps/unix/sysv/linux/sparc/dl-cache.h deleted file mode 100644 index 86f4cf4919..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/dl-cache.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define add_system_dir(dir) \ - do \ - { \ - size_t len = strlen (dir); \ - char path[len + 3]; \ - memcpy (path, dir, len + 1); \ - if (len >= 6 && ! memcmp (path + len - 6, "/lib64", 6)) \ - { \ - len -= 2; \ - path[len] = '\0'; \ - } \ - add_dir (path); \ - if (len >= 4 && ! memcmp (path + len - 4, "/lib", 4)) \ - { \ - memcpy (path + len, "64", 3); \ - add_dir (path); \ - } \ - } while (0) - -#include diff --git a/sysdeps/unix/sysv/linux/sparc/getrlimit64.c b/sysdeps/unix/sysv/linux/sparc/getrlimit64.c deleted file mode 100644 index 7ffc7dd5dd..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/getrlimit64.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Linux getrlimit64 sparc32 implementation (64 bits rlim_t). - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef SHLIB_COMPAT -#define SHLIB_COMPAT(a,b,c) 0 - -#include diff --git a/sysdeps/unix/sysv/linux/sparc/getshmlba.c b/sysdeps/unix/sysv/linux/sparc/getshmlba.c deleted file mode 100644 index 26a90e707a..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/getshmlba.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -__getshmlba (void) -{ - uint64_t hwcap = GLRO(dl_hwcap); - int pgsz = GLRO(dl_pagesize); - - if (hwcap & HWCAP_SPARC_V9) - { - if (pgsz < (16 * 1024)) - return 16 * 1024; - else - return pgsz; - } - else if (!(hwcap & HWCAP_SPARC_FLUSH)) - return 64 * 1024; - else - return 256 * 1024; -} diff --git a/sysdeps/unix/sysv/linux/sparc/getsysstats.c b/sysdeps/unix/sysv/linux/sparc/getsysstats.c deleted file mode 100644 index 49708495ff..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/getsysstats.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Determine various system internal values, Linux/Sparc version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Schwab and - Jakub Jelinek - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* We need to define a special parser for /proc/cpuinfo. */ -#define GET_NPROCS_PARSER(FD, BUFFER, CP, RE, BUFFER_END, RESULT) \ - do \ - { \ - (RESULT) = 0; \ - /* Find the line that contains the information about the number of \ - active cpus. We don't have to fear extremely long lines since \ - the kernel will not generate them. 8192 bytes are really \ - enough. */ \ - char *l; \ - while ((l = next_line (FD, BUFFER, &CP, &RE, BUFFER_END)) != NULL) \ - if (sscanf (l, "ncpus active : %d", &(RESULT)) == 1) \ - break; \ - } \ - while (0) - - -/* On the Sparc we can distinguish between the number of configured and - active cpus. */ -#define GET_NPROCS_CONF_PARSER(FP, BUFFER, RESULT) \ - do \ - { \ - (RESULT) = 0; \ - /* Find the line that contains the information about the number of \ - probed cpus. We don't have to fear extremely long lines since \ - the kernel will not generate them. 8192 bytes are really \ - enough. */ \ - while (__fgets_unlocked ((BUFFER), sizeof (BUFFER), (FP)) != NULL) \ - if (sscanf (buffer, "ncpus probed : %d", &(RESULT)) == 1) \ - break; \ - } \ - while (0) - -#include diff --git a/sysdeps/unix/sysv/linux/sparc/kernel-features.h b/sysdeps/unix/sysv/linux/sparc/kernel-features.h deleted file mode 100644 index 3fafab359c..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/kernel-features.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. SPARC version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* SPARC uses socketcall. */ -#define __ASSUME_SOCKETCALL 1 - -#include_next - -/* 32-bit SPARC kernels do not support - futex_atomic_cmpxchg_inatomic. */ -#if !defined __arch64__ && !defined __sparc_v9__ -# undef __ASSUME_SET_ROBUST_LIST -#endif - -#if !defined __arch64__ -# undef __ASSUME_ACCEPT_SYSCALL -# undef __ASSUME_CONNECT_SYSCALL -# undef __ASSUME_RECVFROM_SYSCALL -#else -/* sparc64 defines __NR_pause, however it is not supported (ENOSYS). - Undefine so pause.c can use a correct alternative. */ -# undef __NR_pause -#endif - -/* sparc only supports ipc syscall. */ -#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS diff --git a/sysdeps/unix/sysv/linux/sparc/kernel_termios.h b/sysdeps/unix/sysv/linux/sparc/kernel_termios.h deleted file mode 100644 index 464ddf8135..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/kernel_termios.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _KERNEL_TERMIOS_H -#define _KERNEL_TERMIOS_H 1 -/* The following corresponds to the values from the Linux 2.1.20 kernel. */ - -/* We need the definition of tcflag_t, cc_t, and speed_t. */ -#include - -#define __KERNEL_NCCS 17 - -struct __kernel_termios - { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline */ - cc_t c_cc[__KERNEL_NCCS]; /* control characters */ - }; - -#endif /* kernel_termios.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed deleted file mode 100644 index 7dc2698fa8..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed +++ /dev/null @@ -1,3 +0,0 @@ -/LD_TRACE_LOADED_OBJECTS=1/a\ -add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out" -s_^\(RTLDLIST=\)\(.*lib\)\(\|64\)\(/[^/]*\.so\.[0-9.]*\)[ ]*$_\1"\2\4 \264\4"_ diff --git a/sysdeps/unix/sysv/linux/sparc/lowlevellock.h b/sysdeps/unix/sysv/linux/sparc/lowlevellock.h deleted file mode 100644 index e36fde6cae..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/lowlevellock.h +++ /dev/null @@ -1,135 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LOWLEVELLOCK_H -#define _LOWLEVELLOCK_H 1 - -#include -#include -#include -#include -#include - -#include - -static inline int -__attribute__ ((always_inline)) -__lll_trylock (int *futex) -{ - return atomic_compare_and_exchange_val_24_acq (futex, 1, 0) != 0; -} -#define lll_trylock(futex) __lll_trylock (&(futex)) - -static inline int -__attribute__ ((always_inline)) -__lll_cond_trylock (int *futex) -{ - return atomic_compare_and_exchange_val_24_acq (futex, 2, 0) != 0; -} -#define lll_cond_trylock(futex) __lll_cond_trylock (&(futex)) - - -extern void __lll_lock_wait_private (int *futex) attribute_hidden; -extern void __lll_lock_wait (int *futex, int private) attribute_hidden; - -static inline void -__attribute__ ((always_inline)) -__lll_lock (int *futex, int private) -{ - int val = atomic_compare_and_exchange_val_24_acq (futex, 1, 0); - - if (__glibc_unlikely (val != 0)) - { - if (__builtin_constant_p (private) && private == LLL_PRIVATE) - __lll_lock_wait_private (futex); - else - __lll_lock_wait (futex, private); - } -} -#define lll_lock(futex, private) __lll_lock (&(futex), private) - -static inline void -__attribute__ ((always_inline)) -__lll_cond_lock (int *futex, int private) -{ - int val = atomic_compare_and_exchange_val_24_acq (futex, 2, 0); - - if (__glibc_unlikely (val != 0)) - __lll_lock_wait (futex, private); -} -#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private) - - -extern int __lll_timedlock_wait (int *futex, const struct timespec *, - int private) attribute_hidden; - -static inline int -__attribute__ ((always_inline)) -__lll_timedlock (int *futex, const struct timespec *abstime, int private) -{ - int val = atomic_compare_and_exchange_val_24_acq (futex, 1, 0); - int result = 0; - - if (__glibc_unlikely (val != 0)) - result = __lll_timedlock_wait (futex, abstime, private); - return result; -} -#define lll_timedlock(futex, abstime, private) \ - __lll_timedlock (&(futex), abstime, private) - -#define lll_unlock(lock, private) \ - ((void) ({ \ - int *__futex = &(lock); \ - int __private = (private); \ - int __val = atomic_exchange_24_rel (__futex, 0); \ - if (__glibc_unlikely (__val > 1)) \ - lll_futex_wake (__futex, 1, __private); \ - })) - -#define lll_islocked(futex) \ - (futex != 0) - -/* Initializers for lock. */ -#define LLL_LOCK_INITIALIZER (0) -#define LLL_LOCK_INITIALIZER_LOCKED (1) - -/* The kernel notifies a process which uses CLONE_CHILD_CLEARTID via futex - wakeup when the clone terminates. The memory location contains the - thread ID while the clone is running and is reset to zero - afterwards. */ -#define lll_wait_tid(tid) \ - do \ - { \ - __typeof (tid) __tid; \ - while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid, LLL_SHARED); \ - } \ - while (0) - -extern int __lll_timedwait_tid (int *, const struct timespec *) - attribute_hidden; - -#define lll_timedwait_tid(tid, abstime) \ - ({ \ - int __res = 0; \ - if ((tid) != 0) \ - __res = __lll_timedwait_tid (&(tid), (abstime)); \ - __res; \ - }) - -#endif /* lowlevellock.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/pt-vfork.S b/sysdeps/unix/sysv/linux/sparc/pt-vfork.S deleted file mode 100644 index 65cc3823ac..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/pt-vfork.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/readelflib.c b/sysdeps/unix/sysv/linux/sparc/readelflib.c deleted file mode 100644 index a9737fe89a..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/readelflib.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1999 and - Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -int process_elf32_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); -int process_elf64_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); - -/* Returns 0 if everything is ok, != 0 in case of error. */ -int -process_elf_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, void *file_contents, - size_t file_length) -{ - ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; - int ret; - - if (elf_header->e_ident [EI_CLASS] == ELFCLASS32) - return process_elf32_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - else - { - ret = process_elf64_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - /* Sparc 64bit libraries are always libc.so.6+. */ - if (!ret) - *flag = FLAG_SPARC_LIB64|FLAG_ELF_LIBC6; - return ret; - } -} - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf32_file -#define __ELF_NATIVE_CLASS 32 -#include "elf/readelflib.c" - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf64_file -#define __ELF_NATIVE_CLASS 64 -#include "elf/readelflib.c" diff --git a/sysdeps/unix/sysv/linux/sparc/rt-sysdep.c b/sysdeps/unix/sysv/linux/sparc/rt-sysdep.c deleted file mode 100644 index 3ff55952e2..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/rt-sysdep.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/Implies b/sysdeps/unix/sysv/linux/sparc/sparc32/Implies deleted file mode 100644 index efda9d27c0..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/Implies +++ /dev/null @@ -1,3 +0,0 @@ -# These supply the ABI compatibility for when long double was double. -ieee754/ldbl-64-128 -ieee754/ldbl-opt diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile b/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile deleted file mode 100644 index 21c7dc1680..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -# See Makeconfig regarding the use of default-abi. -default-abi := 32 - -asm-CPPFLAGS = -D__ASSEMBLY__ -ASFLAGS-.os += -fPIC -LD += -melf32_sparc - -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext_i.sym -endif - -# When I get this to work, this is the right thing -ifeq ($(subdir),elf) -CFLAGS-rtld.c += -mcpu=v8 -#rtld-routines += dl-sysdepsparc -sysdep-others += lddlibc4 -install-bin += lddlibc4 -endif # elf - -ifeq ($(subdir),math) -# These 2 routines are normally in libgcc{.a,_s.so.1}. -# However, sparc32 -mlong-double-128 libgcc relies on -# glibc providing _Q_* routines and without these files -# glibc relies on __multc3/__divtc3 only provided -# by libgcc if configured with -mlong-double-128. -# Provide these routines here as well. -libm-routines += multc3 divtc3 -endif # math diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/Versions b/sysdeps/unix/sysv/linux/sparc/sparc32/Versions deleted file mode 100644 index c9a5b3e9d5..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/Versions +++ /dev/null @@ -1,26 +0,0 @@ -libc { - GLIBC_2.0 { - # Exception handling support functions from libgcc - __register_frame; __register_frame_table; __deregister_frame; - __frame_state_for; __register_frame_info_table; - } - GLIBC_2.2 { - # functions used in other libraries - __xstat64; __fxstat64; __lxstat64; - - # g* - glob64; - - # r* - readdir64; readdir64_r; - - # s* - scandir64; - } - GLIBC_2.3.3 { - posix_fadvise64; posix_fallocate64; - } - GLIBC_2.11 { - fallocate64; - } -} diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S b/sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S deleted file mode 100644 index ff65bbd487..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S +++ /dev/null @@ -1,113 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define ENV(base,reg) [%base + (reg * 4)] -#define ST_FLUSH_WINDOWS 3 - -.section .rodata.str1.1,"aMS",@progbits,1 - .type longjmp_msg,@object -longjmp_msg: - .string "longjmp causes uninitialized stack frame" - .size longjmp_msg, .-longjmp_msg - - .text -ENTRY (____longjmp_chk) - ld ENV(o0,JB_SP), %g5 -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (%g5, %g5, %g4) -#endif - - cmp %sp, %g5 - bleu .Lok_norestore - nop - - save %sp, -80, %sp - cfi_remember_state - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) - - clr %o0 - add %sp, 64, %o1 - LOADSYSCALL(sigaltstack) - ta 0x10 - bcs .Lok - ld [%sp + 64 + 4], %o2 - andcc %o2, 0x1, %g0 - be .Lfail - ld [%sp + 64 + 0], %o0 - - ld [%sp + 64 + 8], %o1 - add %o0, %o1, %o0 - sub %o0, %g5, %o0 - cmp %o0, %o1 - bgeu .Lok - nop - -.Lfail: -#ifndef PIC - sethi %hi(longjmp_msg), %o0 - or %o0, %lo(longjmp_msg), %o0 -#else - SETUP_PIC_REG(l7) - sethi %gdop_hix22(longjmp_msg), %o0 - xor %o0, %gdop_lox10(longjmp_msg), %o0 - ld [%l7 + %o0], %o0, %gdop(longjmp_msg) -#endif - call HIDDEN_JUMPTARGET(__fortify_fail) - nop - -.Lok: - restore - cfi_restore_state - -.Lok_norestore: - ld ENV(o0,JB_FP), %g3 /* Cache target FP in register %g3. */ -#ifdef PTR_DEMANGLE - PTR_DEMANGLE2 (%g3, %g3, %g4) -#endif - - mov %o0, %g1 /* ENV in %g1 */ - orcc %o1, %g0, %g2 /* VAL in %g2 */ - be,a 0f /* Branch if zero; else skip delay slot. */ - mov 1, %g2 /* Delay slot only hit if zero: VAL = 1. */ -0: - - save %sp, -96, %sp - /* - * Do a "flush register windows trap". The trap handler in the - * kernel writes all the register windows to their stack slots, and - * marks them all as invalid (needing to be sucked up from the - * stack when used). This ensures that all information needed to - * unwind to these callers is in memory, not in the register - * windows. - */ - ta ST_FLUSH_WINDOWS -#ifdef PTR_DEMANGLE - ld ENV(g1,JB_PC), %g1 /* Set return PC. */ - PTR_DEMANGLE2 (%i7, %g1, %g4) -#else - ld ENV(g1,JB_PC), %i7 /* Set return PC. */ -#endif - mov %g5, %fp - jmp %i7 + 8 - restore %g2, 0, %o0 /* Restore values from above register frame. */ - -END(____longjmp_chk) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/brk.c b/sysdeps/unix/sysv/linux/sparc/sparc32/brk.c deleted file mode 100644 index 7162eb27b7..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/brk.c +++ /dev/null @@ -1,54 +0,0 @@ -/* brk system call for Linux/SPARC. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt - to work around different old braindamage in the old Linux ELF dynamic - linker. */ -weak_alias (__curbrk, ___brk_addr) - -int -__brk (void *addr) -{ - void *newbrk; - - { - register void *o0 __asm__("%o0") = addr; - register int g1 __asm__("%g1") = __NR_brk; - __asm ("t 0x10" : "=r"(o0) : "r"(g1), "0"(o0) : "cc"); - newbrk = o0; - } - - __curbrk = newbrk; - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/c++-types.data b/sysdeps/unix/sysv/linux/sparc/sparc32/c++-types.data deleted file mode 100644 index b3c19d9c61..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:i -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:i -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S deleted file mode 100644 index 6d2f5bd55f..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@tamu.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#include -#include -#include - -#define CLONE_VM 0x00000100 - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - pid_t *ptid, void *tls, pid_t *ctid); */ - - .text -ENTRY (__clone) - save %sp,-96,%sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) - - /* sanity check arguments */ - orcc %i0,%g0,%g2 - be .Leinval - orcc %i1,%g0,%o1 - be .Leinval - mov %i2,%o0 - - /* The child_stack is the top of the stack, allocate one - whole stack frame from that as this is what the kernel - expects. */ - sub %o1, 96, %o1 - mov %i3, %g3 - - /* ptid */ - mov %i4,%o2 - /* tls */ - mov %i5,%o3 - /* ctid */ - ld [%fp+92],%o4 - - /* Do the system call */ - set __NR_clone,%g1 - ta 0x10 - bcs .Lerror - tst %o1 - bne __thread_start - nop - jmpl %i7 + 8, %g0 - restore %o0,%g0,%o0 - -.Leinval: - mov EINVAL, %o0 -.Lerror: - call HIDDEN_JUMPTARGET(__errno_location) - mov %o0, %i0 - st %i0,[%o0] - jmpl %i7 + 8, %g0 - restore %g0,-1,%o0 -END(__clone) - - .type __thread_start,@function -__thread_start: - mov %g0, %fp /* terminate backtrace */ - call %g2 - mov %g3,%o0 - call HIDDEN_JUMPTARGET(_exit),0 - nop - - .size __thread_start, .-__thread_start - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c b/sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c deleted file mode 100644 index ea951bc4f9..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/fpu/Implies b/sysdeps/unix/sysv/linux/sparc/sparc32/fpu/Implies deleted file mode 100644 index dbcd1e9e6f..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/fpu/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# We must list this here to move it ahead of the ldbl-opt code. -sparc/sparc32/fpu diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/fxstat.c b/sysdeps/unix/sysv/linux/sparc/sparc32/fxstat.c deleted file mode 100644 index 4f219f0b9d..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/fxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/fxstatat.c b/sysdeps/unix/sysv/linux/sparc/sparc32/fxstatat.c deleted file mode 100644 index 0f8b3135d8..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/fxstatat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/getcontext.S b/sysdeps/unix/sysv/linux/sparc/sparc32/getcontext.S deleted file mode 100644 index 893d7bf5b5..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/getcontext.S +++ /dev/null @@ -1,84 +0,0 @@ -/* Save current context. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - -/* int __getcontext (ucontext_t *ucp) - - Saves the machine context in UCP such that when it is activated, - it appears as if __getcontext() returned again. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to save anything - other than the PRESERVED state. */ - - -ENTRY(__getcontext) - save %sp, -112, %sp - st %g0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_PSR] - - /* In reality, we only use the GREG_PC value when setting - or swapping contexts. But we fill in NPC for completeness. */ - add %i7, 8, %o0 - st %o0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_PC] - add %o0, 4, %o0 - st %o0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_NPC] - - rd %y, %o1 - st %o1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_Y] - - st %g1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G1] - st %g2, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G2] - st %g3, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G3] - st %g4, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G4] - st %g5, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G5] - st %g6, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G6] - st %g7, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G7] - - mov SIG_BLOCK, %o0 - clr %o1 - add %i0, UC_SIGMASK, %o2 - mov 8, %o3 - mov __NR_rt_sigprocmask, %g1 - ta 0x10 - - /* Zero, success, return value. */ - st %g0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O0] - st %i1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O1] - st %i2, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O2] - st %i3, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O3] - st %i4, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O4] - st %i5, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O5] - st %i6, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O6] - st %i7, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O7] - - st %g0, [%i0 + UC_MCONTEXT + MC_GWINS] - - /* Do not save FPU state, it is volatile across calls. */ - stb %g0, [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_EN] - - st %g0, [%i0 + UC_MCONTEXT + MC_XRS + XRS_ID] - st %g0, [%i0 + UC_MCONTEXT + MC_XRS + XRS_PTR] - jmpl %i7 + 8, %g0 - restore %g0, %g0, %o0 -END(__getcontext) - -weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/getdents64.c b/sysdeps/unix/sysv/linux/sparc/sparc32/getdents64.c deleted file mode 100644 index 0c75fb5a06..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/getdents64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c b/sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c deleted file mode 100644 index 82a9a296a7..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/kernel_stat.h b/sysdeps/unix/sysv/linux/sparc/sparc32/kernel_stat.h deleted file mode 100644 index a4416009f1..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/kernel_stat.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Definition of `struct stat' used in the kernel */ -struct kernel_stat - { - unsigned short int st_dev; - unsigned long int st_ino; - unsigned short int st_mode; - short int st_nlink; - unsigned short int st_uid; - unsigned short int st_gid; - unsigned short int st_rdev; - long int st_size; - struct timespec st_atim; - struct timespec st_mtim; - struct timespec st_ctim; - long int st_blksize; - long int st_blocks; - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; - }; - -#define _HAVE___UNUSED4 -#define _HAVE___UNUSED5 - -#define _HAVE_STAT___UNUSED4 -#define _HAVE_STAT___UNUSED5 -#define _HAVE_STAT___PAD1 -#define _HAVE_STAT___PAD2 -#define _HAVE_STAT64___UNUSED4 -#define _HAVE_STAT64___UNUSED5 -#define _HAVE_STAT64___PAD2 -#define _HAVE_STAT_NSEC -#define _HAVE_STAT64_NSEC - -#define XSTAT_IS_XSTAT64 0 -#define STATFS_IS_STATFS64 0 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist deleted file mode 100644 index fb4bcb016d..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist +++ /dev/null @@ -1,12 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _r_debug D 0x14 -GLIBC_2.0 calloc F -GLIBC_2.0 free F -GLIBC_2.0 malloc F -GLIBC_2.0 realloc F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __libc_stack_end D 0x4 -GLIBC_2.1 _dl_mcount F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __tls_get_addr F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libBrokenLocale.abilist deleted file mode 100644 index 4a56bb68a3..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libanl.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libanl.abilist deleted file mode 100644 index edabfb436e..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 gai_cancel F -GLIBC_2.2.3 gai_error F -GLIBC_2.2.3 gai_suspend F -GLIBC_2.2.3 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist deleted file mode 100644 index 8c4c2e502c..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++ /dev/null @@ -1,2479 +0,0 @@ -GCC_3.0 GCC_3.0 A -GCC_3.0 _Unwind_Find_FDE F -GCC_3.0 __deregister_frame_info_bases F -GCC_3.0 __register_frame_info_bases F -GCC_3.0 __register_frame_info_table_bases F -GLIBC_2.0 .div F -GLIBC_2.0 .mul F -GLIBC_2.0 .rem F -GLIBC_2.0 .udiv F -GLIBC_2.0 .umul F -GLIBC_2.0 .urem F -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_adjust_column F -GLIBC_2.0 _IO_default_doallocate F -GLIBC_2.0 _IO_default_finish F -GLIBC_2.0 _IO_default_pbackfail F -GLIBC_2.0 _IO_default_uflow F -GLIBC_2.0 _IO_default_xsgetn F -GLIBC_2.0 _IO_default_xsputn F -GLIBC_2.0 _IO_do_write F -GLIBC_2.0 _IO_doallocbuf F -GLIBC_2.0 _IO_fclose F -GLIBC_2.0 _IO_fdopen F -GLIBC_2.0 _IO_feof F -GLIBC_2.0 _IO_ferror F -GLIBC_2.0 _IO_fflush F -GLIBC_2.0 _IO_fgetpos F -GLIBC_2.0 _IO_fgets F -GLIBC_2.0 _IO_file_attach F -GLIBC_2.0 _IO_file_close F -GLIBC_2.0 _IO_file_close_it F -GLIBC_2.0 _IO_file_doallocate F -GLIBC_2.0 _IO_file_fopen F -GLIBC_2.0 _IO_file_init F -GLIBC_2.0 _IO_file_jumps D 0x54 -GLIBC_2.0 _IO_file_open F -GLIBC_2.0 _IO_file_overflow F -GLIBC_2.0 _IO_file_read F -GLIBC_2.0 _IO_file_seek F -GLIBC_2.0 _IO_file_seekoff F -GLIBC_2.0 _IO_file_setbuf F -GLIBC_2.0 _IO_file_stat F -GLIBC_2.0 _IO_file_sync F -GLIBC_2.0 _IO_file_underflow F -GLIBC_2.0 _IO_file_write F -GLIBC_2.0 _IO_file_xsputn F -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_flush_all F -GLIBC_2.0 _IO_flush_all_linebuffered F -GLIBC_2.0 _IO_fopen F -GLIBC_2.0 _IO_fprintf F -GLIBC_2.0 _IO_fputs F -GLIBC_2.0 _IO_fread F -GLIBC_2.0 _IO_free_backup_area F -GLIBC_2.0 _IO_fsetpos F -GLIBC_2.0 _IO_ftell F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 _IO_fwrite F -GLIBC_2.0 _IO_getc F -GLIBC_2.0 _IO_getline F -GLIBC_2.0 _IO_gets F -GLIBC_2.0 _IO_init F -GLIBC_2.0 _IO_init_marker F -GLIBC_2.0 _IO_link_in F -GLIBC_2.0 _IO_list_all D 0x4 -GLIBC_2.0 _IO_marker_delta F -GLIBC_2.0 _IO_marker_difference F -GLIBC_2.0 _IO_padn F -GLIBC_2.0 _IO_peekc_locked F -GLIBC_2.0 _IO_popen F -GLIBC_2.0 _IO_printf F -GLIBC_2.0 _IO_proc_close F -GLIBC_2.0 _IO_proc_open F -GLIBC_2.0 _IO_putc F -GLIBC_2.0 _IO_puts F -GLIBC_2.0 _IO_remove_marker F -GLIBC_2.0 _IO_seekmark F -GLIBC_2.0 _IO_seekoff F -GLIBC_2.0 _IO_seekpos F -GLIBC_2.0 _IO_setb F -GLIBC_2.0 _IO_setbuffer F -GLIBC_2.0 _IO_setvbuf F -GLIBC_2.0 _IO_sgetn F -GLIBC_2.0 _IO_sprintf F -GLIBC_2.0 _IO_sputbackc F -GLIBC_2.0 _IO_sscanf F -GLIBC_2.0 _IO_stderr_ D 0x50 -GLIBC_2.0 _IO_stdin_ D 0x50 -GLIBC_2.0 _IO_stdout_ D 0x50 -GLIBC_2.0 _IO_str_init_readonly F -GLIBC_2.0 _IO_str_init_static F -GLIBC_2.0 _IO_str_overflow F -GLIBC_2.0 _IO_str_pbackfail F -GLIBC_2.0 _IO_str_seekoff F -GLIBC_2.0 _IO_str_underflow F -GLIBC_2.0 _IO_sungetc F -GLIBC_2.0 _IO_switch_to_get_mode F -GLIBC_2.0 _IO_un_link F -GLIBC_2.0 _IO_ungetc F -GLIBC_2.0 _IO_unsave_markers F -GLIBC_2.0 _IO_vfprintf F -GLIBC_2.0 _IO_vfscanf F -GLIBC_2.0 _IO_vsprintf F -GLIBC_2.0 ___brk_addr D 0x4 -GLIBC_2.0 __adjtimex F -GLIBC_2.0 __after_morecore_hook D 0x4 -GLIBC_2.0 __argz_count F -GLIBC_2.0 __argz_next F -GLIBC_2.0 __argz_stringify F -GLIBC_2.0 __assert_fail F -GLIBC_2.0 __assert_perror_fail F -GLIBC_2.0 __bsd_getpgrp F -GLIBC_2.0 __bzero F -GLIBC_2.0 __check_rhosts_file D 0x4 -GLIBC_2.0 __clone F -GLIBC_2.0 __close F -GLIBC_2.0 __cmsg_nxthdr F -GLIBC_2.0 __connect F -GLIBC_2.0 __ctype32_b D 0x4 -GLIBC_2.0 __ctype_b D 0x4 -GLIBC_2.0 __ctype_get_mb_cur_max F -GLIBC_2.0 __ctype_tolower D 0x4 -GLIBC_2.0 __ctype_toupper D 0x4 -GLIBC_2.0 __curbrk D 0x4 -GLIBC_2.0 __daylight D 0x4 -GLIBC_2.0 __dcgettext F -GLIBC_2.0 __default_morecore F -GLIBC_2.0 __deregister_frame F -GLIBC_2.0 __deregister_frame_info F -GLIBC_2.0 __dgettext F -GLIBC_2.0 __dup2 F -GLIBC_2.0 __environ D 0x4 -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __ffs F -GLIBC_2.0 __finite F -GLIBC_2.0 __finitef F -GLIBC_2.0 __finitel F -GLIBC_2.0 __fork F -GLIBC_2.0 __fpu_control D 0x4 -GLIBC_2.0 __frame_state_for F -GLIBC_2.0 __free_hook D 0x4 -GLIBC_2.0 __fxstat F -GLIBC_2.0 __getdelim F -GLIBC_2.0 __getpagesize F -GLIBC_2.0 __getpgid F -GLIBC_2.0 __getpid F -GLIBC_2.0 __gettimeofday F -GLIBC_2.0 __gmtime_r F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __isinf F -GLIBC_2.0 __isinff F -GLIBC_2.0 __isinfl F -GLIBC_2.0 __isnan F -GLIBC_2.0 __isnanf F -GLIBC_2.0 __isnanl F -GLIBC_2.0 __iswctype F -GLIBC_2.0 __ivaliduser F -GLIBC_2.0 __libc_calloc F -GLIBC_2.0 __libc_free F -GLIBC_2.0 __libc_init_first F -GLIBC_2.0 __libc_mallinfo F -GLIBC_2.0 __libc_malloc F -GLIBC_2.0 __libc_mallopt F -GLIBC_2.0 __libc_memalign F -GLIBC_2.0 __libc_pvalloc F -GLIBC_2.0 __libc_realloc F -GLIBC_2.0 __libc_start_main F -GLIBC_2.0 __libc_valloc F -GLIBC_2.0 __lseek F -GLIBC_2.0 __lxstat F -GLIBC_2.0 __malloc_hook D 0x4 -GLIBC_2.0 __malloc_initialize_hook D 0x4 -GLIBC_2.0 __mbrlen F -GLIBC_2.0 __mbrtowc F -GLIBC_2.0 __memalign_hook D 0x4 -GLIBC_2.0 __mempcpy F -GLIBC_2.0 __monstartup F -GLIBC_2.0 __morecore D 0x4 -GLIBC_2.0 __nss_configure_lookup F -GLIBC_2.0 __nss_database_lookup F -GLIBC_2.0 __nss_group_lookup F -GLIBC_2.0 __nss_hosts_lookup F -GLIBC_2.0 __nss_next F -GLIBC_2.0 __nss_passwd_lookup F -GLIBC_2.0 __open F -GLIBC_2.0 __overflow F -GLIBC_2.0 __pipe F -GLIBC_2.0 __printf_fp F -GLIBC_2.0 __profile_frequency F -GLIBC_2.0 __progname D 0x4 -GLIBC_2.0 __progname_full D 0x4 -GLIBC_2.0 __rcmd_errstr D 0x4 -GLIBC_2.0 __read F -GLIBC_2.0 __realloc_hook D 0x4 -GLIBC_2.0 __register_frame F -GLIBC_2.0 __register_frame_info F -GLIBC_2.0 __register_frame_info_table F -GLIBC_2.0 __register_frame_table F -GLIBC_2.0 __res_randomid F -GLIBC_2.0 __sbrk F -GLIBC_2.0 __sched_get_priority_max F -GLIBC_2.0 __sched_get_priority_min F -GLIBC_2.0 __sched_getparam F -GLIBC_2.0 __sched_getscheduler F -GLIBC_2.0 __sched_setscheduler F -GLIBC_2.0 __sched_yield F -GLIBC_2.0 __secure_getenv F -GLIBC_2.0 __select F -GLIBC_2.0 __send F -GLIBC_2.0 __setpgid F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __sigaddset F -GLIBC_2.0 __sigdelset F -GLIBC_2.0 __sigismember F -GLIBC_2.0 __sigpause F -GLIBC_2.0 __sigsetjmp F -GLIBC_2.0 __stpcpy F -GLIBC_2.0 __stpncpy F -GLIBC_2.0 __strcasecmp F -GLIBC_2.0 __strdup F -GLIBC_2.0 __strerror_r F -GLIBC_2.0 __strtod_internal F -GLIBC_2.0 __strtof_internal F -GLIBC_2.0 __strtok_r F -GLIBC_2.0 __strtol_internal F -GLIBC_2.0 __strtold_internal F -GLIBC_2.0 __strtoll_internal F -GLIBC_2.0 __strtoq_internal F -GLIBC_2.0 __strtoul_internal F -GLIBC_2.0 __strtoull_internal F -GLIBC_2.0 __strtouq_internal F -GLIBC_2.0 __sysv_signal F -GLIBC_2.0 __timezone D 0x4 -GLIBC_2.0 __tzname D 0x8 -GLIBC_2.0 __uflow F -GLIBC_2.0 __underflow F -GLIBC_2.0 __vfscanf F -GLIBC_2.0 __vsnprintf F -GLIBC_2.0 __vsscanf F -GLIBC_2.0 __wait F -GLIBC_2.0 __waitpid F -GLIBC_2.0 __wcstod_internal F -GLIBC_2.0 __wcstof_internal F -GLIBC_2.0 __wcstol_internal F -GLIBC_2.0 __wcstold_internal F -GLIBC_2.0 __wcstoll_internal F -GLIBC_2.0 __wcstoul_internal F -GLIBC_2.0 __wcstoull_internal F -GLIBC_2.0 __write F -GLIBC_2.0 __xmknod F -GLIBC_2.0 __xpg_basename F -GLIBC_2.0 __xstat F -GLIBC_2.0 _environ D 0x4 -GLIBC_2.0 _exit F -GLIBC_2.0 _libc_intl_domainname D 0x5 -GLIBC_2.0 _longjmp F -GLIBC_2.0 _mcleanup F -GLIBC_2.0 _mcount F -GLIBC_2.0 _nl_default_dirname D 0x12 -GLIBC_2.0 _nl_domain_bindings D 0x4 -GLIBC_2.0 _nl_msg_cat_cntr D 0x4 -GLIBC_2.0 _null_auth D 0xc -GLIBC_2.0 _obstack D 0x4 -GLIBC_2.0 _obstack_allocated_p F -GLIBC_2.0 _obstack_begin F -GLIBC_2.0 _obstack_begin_1 F -GLIBC_2.0 _obstack_free F -GLIBC_2.0 _obstack_memory_used F -GLIBC_2.0 _obstack_newchunk F -GLIBC_2.0 _res D 0x200 -GLIBC_2.0 _rpc_dtablesize F -GLIBC_2.0 _seterr_reply F -GLIBC_2.0 _setjmp F -GLIBC_2.0 _sys_errlist D 0x1fc -GLIBC_2.0 _sys_nerr D 0x4 -GLIBC_2.0 _sys_siglist D 0x80 -GLIBC_2.0 _tolower F -GLIBC_2.0 _toupper F -GLIBC_2.0 a64l F -GLIBC_2.0 abort F -GLIBC_2.0 abs F -GLIBC_2.0 accept F -GLIBC_2.0 access F -GLIBC_2.0 acct F -GLIBC_2.0 addmntent F -GLIBC_2.0 adjtime F -GLIBC_2.0 adjtimex F -GLIBC_2.0 advance F -GLIBC_2.0 alarm F -GLIBC_2.0 alphasort F -GLIBC_2.0 argz_add F -GLIBC_2.0 argz_add_sep F -GLIBC_2.0 argz_append F -GLIBC_2.0 argz_count F -GLIBC_2.0 argz_create F -GLIBC_2.0 argz_create_sep F -GLIBC_2.0 argz_delete F -GLIBC_2.0 argz_extract F -GLIBC_2.0 argz_insert F -GLIBC_2.0 argz_next F -GLIBC_2.0 argz_replace F -GLIBC_2.0 argz_stringify F -GLIBC_2.0 asctime F -GLIBC_2.0 asctime_r F -GLIBC_2.0 asprintf F -GLIBC_2.0 atexit F -GLIBC_2.0 atof F -GLIBC_2.0 atoi F -GLIBC_2.0 atol F -GLIBC_2.0 atoll F -GLIBC_2.0 authnone_create F -GLIBC_2.0 authunix_create F -GLIBC_2.0 authunix_create_default F -GLIBC_2.0 basename F -GLIBC_2.0 bcmp F -GLIBC_2.0 bcopy F -GLIBC_2.0 bdflush F -GLIBC_2.0 bind F -GLIBC_2.0 bindresvport F -GLIBC_2.0 bindtextdomain F -GLIBC_2.0 brk F -GLIBC_2.0 bsd_signal F -GLIBC_2.0 bsearch F -GLIBC_2.0 btowc F -GLIBC_2.0 bzero F -GLIBC_2.0 calloc F -GLIBC_2.0 callrpc F -GLIBC_2.0 canonicalize_file_name F -GLIBC_2.0 catclose F -GLIBC_2.0 catgets F -GLIBC_2.0 catopen F -GLIBC_2.0 cfgetispeed F -GLIBC_2.0 cfgetospeed F -GLIBC_2.0 cfmakeraw F -GLIBC_2.0 cfree F -GLIBC_2.0 cfsetispeed F -GLIBC_2.0 cfsetospeed F -GLIBC_2.0 cfsetspeed F -GLIBC_2.0 chdir F -GLIBC_2.0 chflags F -GLIBC_2.0 chmod F -GLIBC_2.0 chown F -GLIBC_2.0 chroot F -GLIBC_2.0 clearenv F -GLIBC_2.0 clearerr F -GLIBC_2.0 clearerr_unlocked F -GLIBC_2.0 clnt_broadcast F -GLIBC_2.0 clnt_create F -GLIBC_2.0 clnt_pcreateerror F -GLIBC_2.0 clnt_perrno F -GLIBC_2.0 clnt_perror F -GLIBC_2.0 clnt_spcreateerror F -GLIBC_2.0 clnt_sperrno F -GLIBC_2.0 clnt_sperror F -GLIBC_2.0 clntraw_create F -GLIBC_2.0 clnttcp_create F -GLIBC_2.0 clntudp_bufcreate F -GLIBC_2.0 clntudp_create F -GLIBC_2.0 clock F -GLIBC_2.0 clone F -GLIBC_2.0 close F -GLIBC_2.0 closedir F -GLIBC_2.0 closelog F -GLIBC_2.0 confstr F -GLIBC_2.0 connect F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 creat F -GLIBC_2.0 create_module F -GLIBC_2.0 ctermid F -GLIBC_2.0 ctime F -GLIBC_2.0 ctime_r F -GLIBC_2.0 cuserid F -GLIBC_2.0 daemon F -GLIBC_2.0 daylight D 0x4 -GLIBC_2.0 dcgettext F -GLIBC_2.0 delete_module F -GLIBC_2.0 dgettext F -GLIBC_2.0 difftime F -GLIBC_2.0 dirfd F -GLIBC_2.0 dirname F -GLIBC_2.0 div F -GLIBC_2.0 dprintf F -GLIBC_2.0 drand48 F -GLIBC_2.0 drand48_r F -GLIBC_2.0 dup F -GLIBC_2.0 dup2 F -GLIBC_2.0 dysize F -GLIBC_2.0 ecvt F -GLIBC_2.0 ecvt_r F -GLIBC_2.0 endaliasent F -GLIBC_2.0 endfsent F -GLIBC_2.0 endgrent F -GLIBC_2.0 endhostent F -GLIBC_2.0 endmntent F -GLIBC_2.0 endnetent F -GLIBC_2.0 endnetgrent F -GLIBC_2.0 endprotoent F -GLIBC_2.0 endpwent F -GLIBC_2.0 endrpcent F -GLIBC_2.0 endservent F -GLIBC_2.0 endspent F -GLIBC_2.0 endttyent F -GLIBC_2.0 endusershell F -GLIBC_2.0 endutent F -GLIBC_2.0 environ D 0x4 -GLIBC_2.0 envz_add F -GLIBC_2.0 envz_entry F -GLIBC_2.0 envz_get F -GLIBC_2.0 envz_merge F -GLIBC_2.0 envz_remove F -GLIBC_2.0 envz_strip F -GLIBC_2.0 erand48 F -GLIBC_2.0 erand48_r F -GLIBC_2.0 err F -GLIBC_2.0 error F -GLIBC_2.0 error_at_line F -GLIBC_2.0 error_message_count D 0x4 -GLIBC_2.0 error_one_per_line D 0x4 -GLIBC_2.0 error_print_progname D 0x4 -GLIBC_2.0 errx F -GLIBC_2.0 ether_aton F -GLIBC_2.0 ether_aton_r F -GLIBC_2.0 ether_hostton F -GLIBC_2.0 ether_line F -GLIBC_2.0 ether_ntoa F -GLIBC_2.0 ether_ntoa_r F -GLIBC_2.0 ether_ntohost F -GLIBC_2.0 euidaccess F -GLIBC_2.0 execl F -GLIBC_2.0 execle F -GLIBC_2.0 execlp F -GLIBC_2.0 execv F -GLIBC_2.0 execve F -GLIBC_2.0 execvp F -GLIBC_2.0 exit F -GLIBC_2.0 fchdir F -GLIBC_2.0 fchflags F -GLIBC_2.0 fchmod F -GLIBC_2.0 fchown F -GLIBC_2.0 fclose F -GLIBC_2.0 fcloseall F -GLIBC_2.0 fcntl F -GLIBC_2.0 fcvt F -GLIBC_2.0 fcvt_r F -GLIBC_2.0 fdatasync F -GLIBC_2.0 fdopen F -GLIBC_2.0 feof F -GLIBC_2.0 feof_unlocked F -GLIBC_2.0 ferror F -GLIBC_2.0 ferror_unlocked F -GLIBC_2.0 fexecve F -GLIBC_2.0 fflush F -GLIBC_2.0 fflush_unlocked F -GLIBC_2.0 ffs F -GLIBC_2.0 fgetc F -GLIBC_2.0 fgetgrent F -GLIBC_2.0 fgetgrent_r F -GLIBC_2.0 fgetpos F -GLIBC_2.0 fgetpwent F -GLIBC_2.0 fgetpwent_r F -GLIBC_2.0 fgets F -GLIBC_2.0 fgetspent F -GLIBC_2.0 fgetspent_r F -GLIBC_2.0 fileno F -GLIBC_2.0 fileno_unlocked F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 flock F -GLIBC_2.0 flockfile F -GLIBC_2.0 fnmatch F -GLIBC_2.0 fopen F -GLIBC_2.0 fopencookie F -GLIBC_2.0 fork F -GLIBC_2.0 fpathconf F -GLIBC_2.0 fprintf F -GLIBC_2.0 fputc F -GLIBC_2.0 fputc_unlocked F -GLIBC_2.0 fputs F -GLIBC_2.0 fread F -GLIBC_2.0 free F -GLIBC_2.0 freeaddrinfo F -GLIBC_2.0 freopen F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 fscanf F -GLIBC_2.0 fseek F -GLIBC_2.0 fsetpos F -GLIBC_2.0 fstatfs F -GLIBC_2.0 fsync F -GLIBC_2.0 ftell F -GLIBC_2.0 ftime F -GLIBC_2.0 ftok F -GLIBC_2.0 ftruncate F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 fts_children F -GLIBC_2.0 fts_close F -GLIBC_2.0 fts_open F -GLIBC_2.0 fts_read F -GLIBC_2.0 fts_set F -GLIBC_2.0 ftw F -GLIBC_2.0 funlockfile F -GLIBC_2.0 fwrite F -GLIBC_2.0 gcvt F -GLIBC_2.0 get_avphys_pages F -GLIBC_2.0 get_current_dir_name F -GLIBC_2.0 get_kernel_syms F -GLIBC_2.0 get_myaddress F -GLIBC_2.0 get_nprocs F -GLIBC_2.0 get_nprocs_conf F -GLIBC_2.0 get_phys_pages F -GLIBC_2.0 getaddrinfo F -GLIBC_2.0 getaliasbyname F -GLIBC_2.0 getaliasbyname_r F -GLIBC_2.0 getaliasent F -GLIBC_2.0 getaliasent_r F -GLIBC_2.0 getc F -GLIBC_2.0 getc_unlocked F -GLIBC_2.0 getchar F -GLIBC_2.0 getchar_unlocked F -GLIBC_2.0 getcwd F -GLIBC_2.0 getdelim F -GLIBC_2.0 getdirentries F -GLIBC_2.0 getdomainname F -GLIBC_2.0 getdtablesize F -GLIBC_2.0 getegid F -GLIBC_2.0 getenv F -GLIBC_2.0 geteuid F -GLIBC_2.0 getfsent F -GLIBC_2.0 getfsfile F -GLIBC_2.0 getfsspec F -GLIBC_2.0 getgid F -GLIBC_2.0 getgrent F -GLIBC_2.0 getgrent_r F -GLIBC_2.0 getgrgid F -GLIBC_2.0 getgrgid_r F -GLIBC_2.0 getgrnam F -GLIBC_2.0 getgrnam_r F -GLIBC_2.0 getgroups F -GLIBC_2.0 gethostbyaddr F -GLIBC_2.0 gethostbyaddr_r F -GLIBC_2.0 gethostbyname F -GLIBC_2.0 gethostbyname2 F -GLIBC_2.0 gethostbyname2_r F -GLIBC_2.0 gethostbyname_r F -GLIBC_2.0 gethostent F -GLIBC_2.0 gethostent_r F -GLIBC_2.0 gethostid F -GLIBC_2.0 gethostname F -GLIBC_2.0 getitimer F -GLIBC_2.0 getline F -GLIBC_2.0 getlogin F -GLIBC_2.0 getlogin_r F -GLIBC_2.0 getmntent F -GLIBC_2.0 getmntent_r F -GLIBC_2.0 getnetbyaddr F -GLIBC_2.0 getnetbyaddr_r F -GLIBC_2.0 getnetbyname F -GLIBC_2.0 getnetbyname_r F -GLIBC_2.0 getnetent F -GLIBC_2.0 getnetent_r F -GLIBC_2.0 getnetgrent F -GLIBC_2.0 getnetgrent_r F -GLIBC_2.0 getopt F -GLIBC_2.0 getopt_long F -GLIBC_2.0 getopt_long_only F -GLIBC_2.0 getpagesize F -GLIBC_2.0 getpass F -GLIBC_2.0 getpeername F -GLIBC_2.0 getpgid F -GLIBC_2.0 getpgrp F -GLIBC_2.0 getpid F -GLIBC_2.0 getppid F -GLIBC_2.0 getpriority F -GLIBC_2.0 getprotobyname F -GLIBC_2.0 getprotobyname_r F -GLIBC_2.0 getprotobynumber F -GLIBC_2.0 getprotobynumber_r F -GLIBC_2.0 getprotoent F -GLIBC_2.0 getprotoent_r F -GLIBC_2.0 getpublickey F -GLIBC_2.0 getpw F -GLIBC_2.0 getpwent F -GLIBC_2.0 getpwent_r F -GLIBC_2.0 getpwnam F -GLIBC_2.0 getpwnam_r F -GLIBC_2.0 getpwuid F -GLIBC_2.0 getpwuid_r F -GLIBC_2.0 getresgid F -GLIBC_2.0 getresuid F -GLIBC_2.0 getrlimit F -GLIBC_2.0 getrpcbyname F -GLIBC_2.0 getrpcbyname_r F -GLIBC_2.0 getrpcbynumber F -GLIBC_2.0 getrpcbynumber_r F -GLIBC_2.0 getrpcent F -GLIBC_2.0 getrpcent_r F -GLIBC_2.0 getrpcport F -GLIBC_2.0 getrusage F -GLIBC_2.0 gets F -GLIBC_2.0 getsecretkey F -GLIBC_2.0 getservbyname F -GLIBC_2.0 getservbyname_r F -GLIBC_2.0 getservbyport F -GLIBC_2.0 getservbyport_r F -GLIBC_2.0 getservent F -GLIBC_2.0 getservent_r F -GLIBC_2.0 getsid F -GLIBC_2.0 getsockname F -GLIBC_2.0 getsockopt F -GLIBC_2.0 getspent F -GLIBC_2.0 getspent_r F -GLIBC_2.0 getspnam F -GLIBC_2.0 getspnam_r F -GLIBC_2.0 getsubopt F -GLIBC_2.0 gettext F -GLIBC_2.0 gettimeofday F -GLIBC_2.0 getttyent F -GLIBC_2.0 getttynam F -GLIBC_2.0 getuid F -GLIBC_2.0 getusershell F -GLIBC_2.0 getutent F -GLIBC_2.0 getutent_r F -GLIBC_2.0 getutid F -GLIBC_2.0 getutid_r F -GLIBC_2.0 getutline F -GLIBC_2.0 getutline_r F -GLIBC_2.0 getw F -GLIBC_2.0 getwd F -GLIBC_2.0 glob F -GLIBC_2.0 glob_pattern_p F -GLIBC_2.0 globfree F -GLIBC_2.0 gmtime F -GLIBC_2.0 gmtime_r F -GLIBC_2.0 group_member F -GLIBC_2.0 gsignal F -GLIBC_2.0 gtty F -GLIBC_2.0 h_errlist D 0x14 -GLIBC_2.0 h_nerr D 0x4 -GLIBC_2.0 hasmntopt F -GLIBC_2.0 hcreate F -GLIBC_2.0 hcreate_r F -GLIBC_2.0 hdestroy F -GLIBC_2.0 hdestroy_r F -GLIBC_2.0 herror F -GLIBC_2.0 hsearch F -GLIBC_2.0 hsearch_r F -GLIBC_2.0 hstrerror F -GLIBC_2.0 htonl F -GLIBC_2.0 htons F -GLIBC_2.0 index F -GLIBC_2.0 inet_addr F -GLIBC_2.0 inet_aton F -GLIBC_2.0 inet_lnaof F -GLIBC_2.0 inet_makeaddr F -GLIBC_2.0 inet_netof F -GLIBC_2.0 inet_network F -GLIBC_2.0 inet_nsap_addr F -GLIBC_2.0 inet_nsap_ntoa F -GLIBC_2.0 inet_ntoa F -GLIBC_2.0 inet_ntop F -GLIBC_2.0 inet_pton F -GLIBC_2.0 init_module F -GLIBC_2.0 initgroups F -GLIBC_2.0 initstate F -GLIBC_2.0 initstate_r F -GLIBC_2.0 innetgr F -GLIBC_2.0 insque F -GLIBC_2.0 ioctl F -GLIBC_2.0 iruserok F -GLIBC_2.0 isalnum F -GLIBC_2.0 isalpha F -GLIBC_2.0 isascii F -GLIBC_2.0 isatty F -GLIBC_2.0 isblank F -GLIBC_2.0 iscntrl F -GLIBC_2.0 isdigit F -GLIBC_2.0 isfdtype F -GLIBC_2.0 isgraph F -GLIBC_2.0 isinf F -GLIBC_2.0 isinff F -GLIBC_2.0 isinfl F -GLIBC_2.0 islower F -GLIBC_2.0 isnan F -GLIBC_2.0 isnanf F -GLIBC_2.0 isnanl F -GLIBC_2.0 isprint F -GLIBC_2.0 ispunct F -GLIBC_2.0 isspace F -GLIBC_2.0 isupper F -GLIBC_2.0 iswalnum F -GLIBC_2.0 iswalpha F -GLIBC_2.0 iswcntrl F -GLIBC_2.0 iswctype F -GLIBC_2.0 iswdigit F -GLIBC_2.0 iswgraph F -GLIBC_2.0 iswlower F -GLIBC_2.0 iswprint F -GLIBC_2.0 iswpunct F -GLIBC_2.0 iswspace F -GLIBC_2.0 iswupper F -GLIBC_2.0 iswxdigit F -GLIBC_2.0 isxdigit F -GLIBC_2.0 jrand48 F -GLIBC_2.0 jrand48_r F -GLIBC_2.0 kill F -GLIBC_2.0 killpg F -GLIBC_2.0 klogctl F -GLIBC_2.0 l64a F -GLIBC_2.0 labs F -GLIBC_2.0 lchown F -GLIBC_2.0 lckpwdf F -GLIBC_2.0 lcong48 F -GLIBC_2.0 lcong48_r F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 ldiv F -GLIBC_2.0 lfind F -GLIBC_2.0 link F -GLIBC_2.0 listen F -GLIBC_2.0 llabs F -GLIBC_2.0 lldiv F -GLIBC_2.0 llseek F -GLIBC_2.0 loc1 D 0x4 -GLIBC_2.0 loc2 D 0x4 -GLIBC_2.0 localeconv F -GLIBC_2.0 localtime F -GLIBC_2.0 localtime_r F -GLIBC_2.0 lockf F -GLIBC_2.0 locs D 0x4 -GLIBC_2.0 longjmp F -GLIBC_2.0 lrand48 F -GLIBC_2.0 lrand48_r F -GLIBC_2.0 lsearch F -GLIBC_2.0 lseek F -GLIBC_2.0 madvise F -GLIBC_2.0 mallinfo F -GLIBC_2.0 malloc F -GLIBC_2.0 malloc_get_state F -GLIBC_2.0 malloc_set_state F -GLIBC_2.0 malloc_stats F -GLIBC_2.0 malloc_trim F -GLIBC_2.0 malloc_usable_size F -GLIBC_2.0 mallopt F -GLIBC_2.0 mallwatch D 0x4 -GLIBC_2.0 mblen F -GLIBC_2.0 mbrlen F -GLIBC_2.0 mbrtowc F -GLIBC_2.0 mbsinit F -GLIBC_2.0 mbsnrtowcs F -GLIBC_2.0 mbsrtowcs F -GLIBC_2.0 mbstowcs F -GLIBC_2.0 mbtowc F -GLIBC_2.0 mcheck F -GLIBC_2.0 mcount F -GLIBC_2.0 memalign F -GLIBC_2.0 memccpy F -GLIBC_2.0 memchr F -GLIBC_2.0 memcmp F -GLIBC_2.0 memcpy F -GLIBC_2.0 memfrob F -GLIBC_2.0 memmem F -GLIBC_2.0 memmove F -GLIBC_2.0 memset F -GLIBC_2.0 mkdir F -GLIBC_2.0 mkfifo F -GLIBC_2.0 mkstemp F -GLIBC_2.0 mktemp F -GLIBC_2.0 mktime F -GLIBC_2.0 mlock F -GLIBC_2.0 mlockall F -GLIBC_2.0 mmap F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 monstartup F -GLIBC_2.0 mount F -GLIBC_2.0 mprobe F -GLIBC_2.0 mprotect F -GLIBC_2.0 mrand48 F -GLIBC_2.0 mrand48_r F -GLIBC_2.0 mremap F -GLIBC_2.0 msgctl F -GLIBC_2.0 msgget F -GLIBC_2.0 msgrcv F -GLIBC_2.0 msgsnd F -GLIBC_2.0 msync F -GLIBC_2.0 mtrace F -GLIBC_2.0 munlock F -GLIBC_2.0 munlockall F -GLIBC_2.0 munmap F -GLIBC_2.0 muntrace F -GLIBC_2.0 nanosleep F -GLIBC_2.0 nfsservctl F -GLIBC_2.0 nice F -GLIBC_2.0 nl_langinfo F -GLIBC_2.0 nrand48 F -GLIBC_2.0 nrand48_r F -GLIBC_2.0 ntohl F -GLIBC_2.0 ntohs F -GLIBC_2.0 obstack_alloc_failed_handler D 0x4 -GLIBC_2.0 obstack_exit_failure D 0x4 -GLIBC_2.0 obstack_free F -GLIBC_2.0 obstack_printf F -GLIBC_2.0 obstack_vprintf F -GLIBC_2.0 on_exit F -GLIBC_2.0 open F -GLIBC_2.0 open_memstream F -GLIBC_2.0 opendir F -GLIBC_2.0 openlog F -GLIBC_2.0 optarg D 0x4 -GLIBC_2.0 opterr D 0x4 -GLIBC_2.0 optind D 0x4 -GLIBC_2.0 optopt D 0x4 -GLIBC_2.0 parse_printf_format F -GLIBC_2.0 pathconf F -GLIBC_2.0 pause F -GLIBC_2.0 pclose F -GLIBC_2.0 perror F -GLIBC_2.0 personality F -GLIBC_2.0 pipe F -GLIBC_2.0 pmap_getmaps F -GLIBC_2.0 pmap_getport F -GLIBC_2.0 pmap_rmtcall F -GLIBC_2.0 pmap_set F -GLIBC_2.0 pmap_unset F -GLIBC_2.0 poll F -GLIBC_2.0 popen F -GLIBC_2.0 prctl F -GLIBC_2.0 printf F -GLIBC_2.0 profil F -GLIBC_2.0 profil_counter F -GLIBC_2.0 program_invocation_name D 0x4 -GLIBC_2.0 program_invocation_short_name D 0x4 -GLIBC_2.0 pselect F -GLIBC_2.0 psignal F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 ptrace F -GLIBC_2.0 putc F -GLIBC_2.0 putc_unlocked F -GLIBC_2.0 putchar F -GLIBC_2.0 putchar_unlocked F -GLIBC_2.0 putenv F -GLIBC_2.0 putpwent F -GLIBC_2.0 puts F -GLIBC_2.0 putspent F -GLIBC_2.0 pututline F -GLIBC_2.0 putw F -GLIBC_2.0 pvalloc F -GLIBC_2.0 qecvt F -GLIBC_2.0 qecvt_r F -GLIBC_2.0 qfcvt F -GLIBC_2.0 qfcvt_r F -GLIBC_2.0 qgcvt F -GLIBC_2.0 qsort F -GLIBC_2.0 query_module F -GLIBC_2.0 quotactl F -GLIBC_2.0 raise F -GLIBC_2.0 rand F -GLIBC_2.0 rand_r F -GLIBC_2.0 random F -GLIBC_2.0 random_r F -GLIBC_2.0 rcmd F -GLIBC_2.0 re_comp F -GLIBC_2.0 re_compile_fastmap F -GLIBC_2.0 re_compile_pattern F -GLIBC_2.0 re_exec F -GLIBC_2.0 re_match F -GLIBC_2.0 re_match_2 F -GLIBC_2.0 re_max_failures D 0x4 -GLIBC_2.0 re_search F -GLIBC_2.0 re_search_2 F -GLIBC_2.0 re_set_registers F -GLIBC_2.0 re_set_syntax F -GLIBC_2.0 re_syntax_options D 0x4 -GLIBC_2.0 read F -GLIBC_2.0 readdir F -GLIBC_2.0 readdir_r F -GLIBC_2.0 readlink F -GLIBC_2.0 readv F -GLIBC_2.0 realloc F -GLIBC_2.0 realpath F -GLIBC_2.0 reboot F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 regcomp F -GLIBC_2.0 regerror F -GLIBC_2.0 regexec F -GLIBC_2.0 regfree F -GLIBC_2.0 register_printf_function F -GLIBC_2.0 registerrpc F -GLIBC_2.0 remove F -GLIBC_2.0 remque F -GLIBC_2.0 rename F -GLIBC_2.0 res_init F -GLIBC_2.0 revoke F -GLIBC_2.0 rewind F -GLIBC_2.0 rewinddir F -GLIBC_2.0 rexec F -GLIBC_2.0 rexecoptions D 0x4 -GLIBC_2.0 rindex F -GLIBC_2.0 rmdir F -GLIBC_2.0 rpc_createerr D 0x10 -GLIBC_2.0 rpmatch F -GLIBC_2.0 rresvport F -GLIBC_2.0 ruserok F -GLIBC_2.0 ruserpass F -GLIBC_2.0 sbrk F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 scandir F -GLIBC_2.0 scanf F -GLIBC_2.0 sched_get_priority_max F -GLIBC_2.0 sched_get_priority_min F -GLIBC_2.0 sched_getparam F -GLIBC_2.0 sched_getscheduler F -GLIBC_2.0 sched_rr_get_interval F -GLIBC_2.0 sched_setparam F -GLIBC_2.0 sched_setscheduler F -GLIBC_2.0 sched_yield F -GLIBC_2.0 seed48 F -GLIBC_2.0 seed48_r F -GLIBC_2.0 seekdir F -GLIBC_2.0 select F -GLIBC_2.0 semctl F -GLIBC_2.0 semget F -GLIBC_2.0 semop F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 setaliasent F -GLIBC_2.0 setbuf F -GLIBC_2.0 setbuffer F -GLIBC_2.0 setcontext F -GLIBC_2.0 setdomainname F -GLIBC_2.0 setegid F -GLIBC_2.0 setenv F -GLIBC_2.0 seteuid F -GLIBC_2.0 setfsent F -GLIBC_2.0 setfsgid F -GLIBC_2.0 setfsuid F -GLIBC_2.0 setgid F -GLIBC_2.0 setgrent F -GLIBC_2.0 setgroups F -GLIBC_2.0 sethostent F -GLIBC_2.0 sethostid F -GLIBC_2.0 sethostname F -GLIBC_2.0 setitimer F -GLIBC_2.0 setjmp F -GLIBC_2.0 setlinebuf F -GLIBC_2.0 setlocale F -GLIBC_2.0 setlogin F -GLIBC_2.0 setlogmask F -GLIBC_2.0 setmntent F -GLIBC_2.0 setnetent F -GLIBC_2.0 setnetgrent F -GLIBC_2.0 setpgid F -GLIBC_2.0 setpgrp F -GLIBC_2.0 setpriority F -GLIBC_2.0 setprotoent F -GLIBC_2.0 setpwent F -GLIBC_2.0 setregid F -GLIBC_2.0 setresgid F -GLIBC_2.0 setresuid F -GLIBC_2.0 setreuid F -GLIBC_2.0 setrlimit F -GLIBC_2.0 setrpcent F -GLIBC_2.0 setservent F -GLIBC_2.0 setsid F -GLIBC_2.0 setsockopt F -GLIBC_2.0 setspent F -GLIBC_2.0 setstate F -GLIBC_2.0 setstate_r F -GLIBC_2.0 settimeofday F -GLIBC_2.0 setttyent F -GLIBC_2.0 setuid F -GLIBC_2.0 setusershell F -GLIBC_2.0 setutent F -GLIBC_2.0 setvbuf F -GLIBC_2.0 sgetspent F -GLIBC_2.0 sgetspent_r F -GLIBC_2.0 shmat F -GLIBC_2.0 shmctl F -GLIBC_2.0 shmdt F -GLIBC_2.0 shmget F -GLIBC_2.0 shutdown F -GLIBC_2.0 sigaction F -GLIBC_2.0 sigaddset F -GLIBC_2.0 sigaltstack F -GLIBC_2.0 sigandset F -GLIBC_2.0 sigblock F -GLIBC_2.0 sigdelset F -GLIBC_2.0 sigemptyset F -GLIBC_2.0 sigfillset F -GLIBC_2.0 siggetmask F -GLIBC_2.0 siginterrupt F -GLIBC_2.0 sigisemptyset F -GLIBC_2.0 sigismember F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 signal F -GLIBC_2.0 sigorset F -GLIBC_2.0 sigpause F -GLIBC_2.0 sigpending F -GLIBC_2.0 sigprocmask F -GLIBC_2.0 sigreturn F -GLIBC_2.0 sigsetmask F -GLIBC_2.0 sigstack F -GLIBC_2.0 sigsuspend F -GLIBC_2.0 sigvec F -GLIBC_2.0 sigwait F -GLIBC_2.0 sleep F -GLIBC_2.0 snprintf F -GLIBC_2.0 socket F -GLIBC_2.0 socketpair F -GLIBC_2.0 sprintf F -GLIBC_2.0 srand F -GLIBC_2.0 srand48 F -GLIBC_2.0 srand48_r F -GLIBC_2.0 srandom F -GLIBC_2.0 srandom_r F -GLIBC_2.0 sscanf F -GLIBC_2.0 ssignal F -GLIBC_2.0 sstk F -GLIBC_2.0 statfs F -GLIBC_2.0 stderr D 0x4 -GLIBC_2.0 stdin D 0x4 -GLIBC_2.0 stdout D 0x4 -GLIBC_2.0 step F -GLIBC_2.0 stime F -GLIBC_2.0 stpcpy F -GLIBC_2.0 stpncpy F -GLIBC_2.0 strcasecmp F -GLIBC_2.0 strcat F -GLIBC_2.0 strchr F -GLIBC_2.0 strcmp F -GLIBC_2.0 strcoll F -GLIBC_2.0 strcpy F -GLIBC_2.0 strcspn F -GLIBC_2.0 strdup F -GLIBC_2.0 strerror F -GLIBC_2.0 strerror_r F -GLIBC_2.0 strfmon F -GLIBC_2.0 strfry F -GLIBC_2.0 strftime F -GLIBC_2.0 strlen F -GLIBC_2.0 strncasecmp F -GLIBC_2.0 strncat F -GLIBC_2.0 strncmp F -GLIBC_2.0 strncpy F -GLIBC_2.0 strndup F -GLIBC_2.0 strnlen F -GLIBC_2.0 strpbrk F -GLIBC_2.0 strptime F -GLIBC_2.0 strrchr F -GLIBC_2.0 strsep F -GLIBC_2.0 strsignal F -GLIBC_2.0 strspn F -GLIBC_2.0 strstr F -GLIBC_2.0 strtod F -GLIBC_2.0 strtof F -GLIBC_2.0 strtok F -GLIBC_2.0 strtok_r F -GLIBC_2.0 strtol F -GLIBC_2.0 strtold F -GLIBC_2.0 strtoll F -GLIBC_2.0 strtoq F -GLIBC_2.0 strtoul F -GLIBC_2.0 strtoull F -GLIBC_2.0 strtouq F -GLIBC_2.0 strxfrm F -GLIBC_2.0 stty F -GLIBC_2.0 svc_exit F -GLIBC_2.0 svc_fdset D 0x80 -GLIBC_2.0 svc_getreq F -GLIBC_2.0 svc_getreqset F -GLIBC_2.0 svc_register F -GLIBC_2.0 svc_run F -GLIBC_2.0 svc_sendreply F -GLIBC_2.0 svc_unregister F -GLIBC_2.0 svcauthdes_stats D 0xc -GLIBC_2.0 svcerr_auth F -GLIBC_2.0 svcerr_decode F -GLIBC_2.0 svcerr_noproc F -GLIBC_2.0 svcerr_noprog F -GLIBC_2.0 svcerr_progvers F -GLIBC_2.0 svcerr_systemerr F -GLIBC_2.0 svcerr_weakauth F -GLIBC_2.0 svcfd_create F -GLIBC_2.0 svcraw_create F -GLIBC_2.0 svctcp_create F -GLIBC_2.0 svcudp_bufcreate F -GLIBC_2.0 svcudp_create F -GLIBC_2.0 svcudp_enablecache F -GLIBC_2.0 swab F -GLIBC_2.0 swapoff F -GLIBC_2.0 swapon F -GLIBC_2.0 symlink F -GLIBC_2.0 sync F -GLIBC_2.0 sys_errlist D 0x1fc -GLIBC_2.0 sys_nerr D 0x4 -GLIBC_2.0 sys_sigabbrev D 0x80 -GLIBC_2.0 sys_siglist D 0x80 -GLIBC_2.0 syscall F -GLIBC_2.0 sysconf F -GLIBC_2.0 sysctl F -GLIBC_2.0 sysinfo F -GLIBC_2.0 syslog F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 tcflow F -GLIBC_2.0 tcflush F -GLIBC_2.0 tcgetattr F -GLIBC_2.0 tcgetpgrp F -GLIBC_2.0 tcsendbreak F -GLIBC_2.0 tcsetattr F -GLIBC_2.0 tcsetpgrp F -GLIBC_2.0 tdelete F -GLIBC_2.0 telldir F -GLIBC_2.0 tempnam F -GLIBC_2.0 textdomain F -GLIBC_2.0 tfind F -GLIBC_2.0 time F -GLIBC_2.0 timegm F -GLIBC_2.0 timelocal F -GLIBC_2.0 times F -GLIBC_2.0 timezone D 0x4 -GLIBC_2.0 tmpfile F -GLIBC_2.0 tmpnam F -GLIBC_2.0 tmpnam_r F -GLIBC_2.0 toascii F -GLIBC_2.0 tolower F -GLIBC_2.0 toupper F -GLIBC_2.0 towctrans F -GLIBC_2.0 towlower F -GLIBC_2.0 towupper F -GLIBC_2.0 tr_break F -GLIBC_2.0 truncate F -GLIBC_2.0 tsearch F -GLIBC_2.0 ttyname F -GLIBC_2.0 ttyname_r F -GLIBC_2.0 ttyslot F -GLIBC_2.0 twalk F -GLIBC_2.0 tzname D 0x8 -GLIBC_2.0 tzset F -GLIBC_2.0 ualarm F -GLIBC_2.0 ulckpwdf F -GLIBC_2.0 ulimit F -GLIBC_2.0 umask F -GLIBC_2.0 umount F -GLIBC_2.0 uname F -GLIBC_2.0 ungetc F -GLIBC_2.0 unlink F -GLIBC_2.0 unsetenv F -GLIBC_2.0 updwtmp F -GLIBC_2.0 uselib F -GLIBC_2.0 usleep F -GLIBC_2.0 ustat F -GLIBC_2.0 utime F -GLIBC_2.0 utimes F -GLIBC_2.0 utmpname F -GLIBC_2.0 valloc F -GLIBC_2.0 vasprintf F -GLIBC_2.0 vdprintf F -GLIBC_2.0 verr F -GLIBC_2.0 verrx F -GLIBC_2.0 vfork F -GLIBC_2.0 vfprintf F -GLIBC_2.0 vfscanf F -GLIBC_2.0 vhangup F -GLIBC_2.0 vlimit F -GLIBC_2.0 vprintf F -GLIBC_2.0 vscanf F -GLIBC_2.0 vsnprintf F -GLIBC_2.0 vsprintf F -GLIBC_2.0 vsscanf F -GLIBC_2.0 vsyslog F -GLIBC_2.0 vtimes F -GLIBC_2.0 vwarn F -GLIBC_2.0 vwarnx F -GLIBC_2.0 wait F -GLIBC_2.0 wait3 F -GLIBC_2.0 wait4 F -GLIBC_2.0 waitpid F -GLIBC_2.0 warn F -GLIBC_2.0 warnx F -GLIBC_2.0 wcpcpy F -GLIBC_2.0 wcpncpy F -GLIBC_2.0 wcrtomb F -GLIBC_2.0 wcscat F -GLIBC_2.0 wcschr F -GLIBC_2.0 wcscmp F -GLIBC_2.0 wcscoll F -GLIBC_2.0 wcscpy F -GLIBC_2.0 wcscspn F -GLIBC_2.0 wcsdup F -GLIBC_2.0 wcslen F -GLIBC_2.0 wcsncat F -GLIBC_2.0 wcsncmp F -GLIBC_2.0 wcsncpy F -GLIBC_2.0 wcsnrtombs F -GLIBC_2.0 wcspbrk F -GLIBC_2.0 wcsrchr F -GLIBC_2.0 wcsrtombs F -GLIBC_2.0 wcsspn F -GLIBC_2.0 wcsstr F -GLIBC_2.0 wcstod F -GLIBC_2.0 wcstof F -GLIBC_2.0 wcstok F -GLIBC_2.0 wcstol F -GLIBC_2.0 wcstold F -GLIBC_2.0 wcstombs F -GLIBC_2.0 wcstoq F -GLIBC_2.0 wcstoul F -GLIBC_2.0 wcstouq F -GLIBC_2.0 wcswidth F -GLIBC_2.0 wcsxfrm F -GLIBC_2.0 wctob F -GLIBC_2.0 wctomb F -GLIBC_2.0 wctrans F -GLIBC_2.0 wctype F -GLIBC_2.0 wcwidth F -GLIBC_2.0 wmemchr F -GLIBC_2.0 wmemcmp F -GLIBC_2.0 wmemcpy F -GLIBC_2.0 wmemmove F -GLIBC_2.0 wmemset F -GLIBC_2.0 write F -GLIBC_2.0 writev F -GLIBC_2.0 xdr_accepted_reply F -GLIBC_2.0 xdr_array F -GLIBC_2.0 xdr_authunix_parms F -GLIBC_2.0 xdr_bool F -GLIBC_2.0 xdr_bytes F -GLIBC_2.0 xdr_callhdr F -GLIBC_2.0 xdr_callmsg F -GLIBC_2.0 xdr_char F -GLIBC_2.0 xdr_cryptkeyarg F -GLIBC_2.0 xdr_cryptkeyarg2 F -GLIBC_2.0 xdr_cryptkeyres F -GLIBC_2.0 xdr_des_block F -GLIBC_2.0 xdr_double F -GLIBC_2.0 xdr_enum F -GLIBC_2.0 xdr_float F -GLIBC_2.0 xdr_free F -GLIBC_2.0 xdr_int F -GLIBC_2.0 xdr_key_netstarg F -GLIBC_2.0 xdr_key_netstres F -GLIBC_2.0 xdr_keybuf F -GLIBC_2.0 xdr_keystatus F -GLIBC_2.0 xdr_long F -GLIBC_2.0 xdr_netobj F -GLIBC_2.0 xdr_opaque F -GLIBC_2.0 xdr_opaque_auth F -GLIBC_2.0 xdr_pmap F -GLIBC_2.0 xdr_pmaplist F -GLIBC_2.0 xdr_pointer F -GLIBC_2.0 xdr_reference F -GLIBC_2.0 xdr_rejected_reply F -GLIBC_2.0 xdr_replymsg F -GLIBC_2.0 xdr_rmtcall_args F -GLIBC_2.0 xdr_rmtcallres F -GLIBC_2.0 xdr_short F -GLIBC_2.0 xdr_string F -GLIBC_2.0 xdr_u_char F -GLIBC_2.0 xdr_u_int F -GLIBC_2.0 xdr_u_long F -GLIBC_2.0 xdr_u_short F -GLIBC_2.0 xdr_union F -GLIBC_2.0 xdr_vector F -GLIBC_2.0 xdr_void F -GLIBC_2.0 xdr_wrapstring F -GLIBC_2.0 xdrmem_create F -GLIBC_2.0 xdrrec_create F -GLIBC_2.0 xdrrec_endofrecord F -GLIBC_2.0 xdrrec_eof F -GLIBC_2.0 xdrrec_skiprecord F -GLIBC_2.0 xdrstdio_create F -GLIBC_2.0 xencrypt F -GLIBC_2.0 xprt_register F -GLIBC_2.0 xprt_unregister F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 _IO_2_1_stderr_ D 0xa0 -GLIBC_2.1 _IO_2_1_stdin_ D 0xa0 -GLIBC_2.1 _IO_2_1_stdout_ D 0xa0 -GLIBC_2.1 _IO_do_write F -GLIBC_2.1 _IO_fclose F -GLIBC_2.1 _IO_fdopen F -GLIBC_2.1 _IO_fgetpos64 F -GLIBC_2.1 _IO_file_attach F -GLIBC_2.1 _IO_file_close_it F -GLIBC_2.1 _IO_file_finish F -GLIBC_2.1 _IO_file_fopen F -GLIBC_2.1 _IO_file_init F -GLIBC_2.1 _IO_file_overflow F -GLIBC_2.1 _IO_file_seekoff F -GLIBC_2.1 _IO_file_setbuf F -GLIBC_2.1 _IO_file_sync F -GLIBC_2.1 _IO_file_underflow F -GLIBC_2.1 _IO_file_write F -GLIBC_2.1 _IO_file_xsputn F -GLIBC_2.1 _IO_fopen F -GLIBC_2.1 _IO_fsetpos64 F -GLIBC_2.1 _IO_getline_info F -GLIBC_2.1 _IO_popen F -GLIBC_2.1 _IO_proc_close F -GLIBC_2.1 _IO_proc_open F -GLIBC_2.1 __asprintf F -GLIBC_2.1 __backtrace F -GLIBC_2.1 __backtrace_symbols F -GLIBC_2.1 __backtrace_symbols_fd F -GLIBC_2.1 __duplocale F -GLIBC_2.1 __freelocale F -GLIBC_2.1 __fxstat64 F -GLIBC_2.1 __isalnum_l F -GLIBC_2.1 __isalpha_l F -GLIBC_2.1 __isascii_l F -GLIBC_2.1 __isblank_l F -GLIBC_2.1 __iscntrl_l F -GLIBC_2.1 __isdigit_l F -GLIBC_2.1 __isgraph_l F -GLIBC_2.1 __islower_l F -GLIBC_2.1 __isprint_l F -GLIBC_2.1 __ispunct_l F -GLIBC_2.1 __isspace_l F -GLIBC_2.1 __isupper_l F -GLIBC_2.1 __iswalnum_l F -GLIBC_2.1 __iswalpha_l F -GLIBC_2.1 __iswblank_l F -GLIBC_2.1 __iswcntrl_l F -GLIBC_2.1 __iswctype_l F -GLIBC_2.1 __iswdigit_l F -GLIBC_2.1 __iswgraph_l F -GLIBC_2.1 __iswlower_l F -GLIBC_2.1 __iswprint_l F -GLIBC_2.1 __iswpunct_l F -GLIBC_2.1 __iswspace_l F -GLIBC_2.1 __iswupper_l F -GLIBC_2.1 __iswxdigit_l F -GLIBC_2.1 __isxdigit_l F -GLIBC_2.1 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.1 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.1 __key_gendes_LOCAL D 0x4 -GLIBC_2.1 __libc_allocate_rtsig F -GLIBC_2.1 __libc_current_sigrtmax F -GLIBC_2.1 __libc_current_sigrtmin F -GLIBC_2.1 __libc_freeres F -GLIBC_2.1 __libc_sa_len F -GLIBC_2.1 __lxstat64 F -GLIBC_2.1 __newlocale F -GLIBC_2.1 __poll F -GLIBC_2.1 __pread64 F -GLIBC_2.1 __pwrite64 F -GLIBC_2.1 __rawmemchr F -GLIBC_2.1 __signbit F -GLIBC_2.1 __signbitf F -GLIBC_2.1 __strcasecmp_l F -GLIBC_2.1 __strcasestr F -GLIBC_2.1 __strcoll_l F -GLIBC_2.1 __strfmon_l F -GLIBC_2.1 __strncasecmp_l F -GLIBC_2.1 __strtod_l F -GLIBC_2.1 __strtof_l F -GLIBC_2.1 __strtol_l F -GLIBC_2.1 __strtold_l F -GLIBC_2.1 __strtoll_l F -GLIBC_2.1 __strtoul_l F -GLIBC_2.1 __strtoull_l F -GLIBC_2.1 __strxfrm_l F -GLIBC_2.1 __toascii_l F -GLIBC_2.1 __tolower_l F -GLIBC_2.1 __toupper_l F -GLIBC_2.1 __towctrans F -GLIBC_2.1 __towctrans_l F -GLIBC_2.1 __towlower_l F -GLIBC_2.1 __towupper_l F -GLIBC_2.1 __wcscasecmp_l F -GLIBC_2.1 __wcscoll_l F -GLIBC_2.1 __wcsncasecmp_l F -GLIBC_2.1 __wcstod_l F -GLIBC_2.1 __wcstof_l F -GLIBC_2.1 __wcstol_l F -GLIBC_2.1 __wcstold_l F -GLIBC_2.1 __wcstoll_l F -GLIBC_2.1 __wcstoul_l F -GLIBC_2.1 __wcstoull_l F -GLIBC_2.1 __wcsxfrm_l F -GLIBC_2.1 __wctype_l F -GLIBC_2.1 __xstat64 F -GLIBC_2.1 _authenticate F -GLIBC_2.1 _dl_mcount_wrapper F -GLIBC_2.1 _dl_mcount_wrapper_check F -GLIBC_2.1 _sys_errlist D 0x1fc -GLIBC_2.1 _sys_nerr D 0x4 -GLIBC_2.1 _sys_siglist D 0x100 -GLIBC_2.1 addseverity F -GLIBC_2.1 alphasort64 F -GLIBC_2.1 argp_err_exit_status D 0x4 -GLIBC_2.1 argp_error F -GLIBC_2.1 argp_failure F -GLIBC_2.1 argp_help F -GLIBC_2.1 argp_parse F -GLIBC_2.1 argp_program_bug_address D 0x4 -GLIBC_2.1 argp_program_version D 0x4 -GLIBC_2.1 argp_program_version_hook D 0x4 -GLIBC_2.1 argp_state_help F -GLIBC_2.1 argp_usage F -GLIBC_2.1 authdes_create F -GLIBC_2.1 authdes_getucred F -GLIBC_2.1 authdes_pk_create F -GLIBC_2.1 backtrace F -GLIBC_2.1 backtrace_symbols F -GLIBC_2.1 backtrace_symbols_fd F -GLIBC_2.1 capget F -GLIBC_2.1 capset F -GLIBC_2.1 cbc_crypt F -GLIBC_2.1 clntunix_create F -GLIBC_2.1 creat64 F -GLIBC_2.1 des_setparity F -GLIBC_2.1 ecb_crypt F -GLIBC_2.1 endutxent F -GLIBC_2.1 fattach F -GLIBC_2.1 fclose F -GLIBC_2.1 fdetach F -GLIBC_2.1 fdopen F -GLIBC_2.1 ffsl F -GLIBC_2.1 ffsll F -GLIBC_2.1 fgetc_unlocked F -GLIBC_2.1 fgetpos64 F -GLIBC_2.1 fgets_unlocked F -GLIBC_2.1 fmtmsg F -GLIBC_2.1 fopen F -GLIBC_2.1 fopen64 F -GLIBC_2.1 fputs_unlocked F -GLIBC_2.1 fread_unlocked F -GLIBC_2.1 freopen64 F -GLIBC_2.1 fseeko F -GLIBC_2.1 fseeko64 F -GLIBC_2.1 fsetpos64 F -GLIBC_2.1 fstatfs64 F -GLIBC_2.1 fstatvfs F -GLIBC_2.1 fstatvfs64 F -GLIBC_2.1 ftello F -GLIBC_2.1 ftello64 F -GLIBC_2.1 ftruncate64 F -GLIBC_2.1 ftw64 F -GLIBC_2.1 fwrite_unlocked F -GLIBC_2.1 gai_strerror F -GLIBC_2.1 getcontext F -GLIBC_2.1 getdate F -GLIBC_2.1 getdate_err D 0x4 -GLIBC_2.1 getdate_r F -GLIBC_2.1 getmsg F -GLIBC_2.1 getnameinfo F -GLIBC_2.1 getnetname F -GLIBC_2.1 getpmsg F -GLIBC_2.1 getpt F -GLIBC_2.1 getrlimit64 F -GLIBC_2.1 getutxent F -GLIBC_2.1 getutxid F -GLIBC_2.1 getutxline F -GLIBC_2.1 glob64 F -GLIBC_2.1 globfree64 F -GLIBC_2.1 gnu_get_libc_release F -GLIBC_2.1 gnu_get_libc_version F -GLIBC_2.1 grantpt F -GLIBC_2.1 host2netname F -GLIBC_2.1 iconv F -GLIBC_2.1 iconv_close F -GLIBC_2.1 iconv_open F -GLIBC_2.1 if_freenameindex F -GLIBC_2.1 if_indextoname F -GLIBC_2.1 if_nameindex F -GLIBC_2.1 if_nametoindex F -GLIBC_2.1 in6addr_any D 0x10 -GLIBC_2.1 in6addr_loopback D 0x10 -GLIBC_2.1 isastream F -GLIBC_2.1 iswblank F -GLIBC_2.1 key_decryptsession F -GLIBC_2.1 key_decryptsession_pk F -GLIBC_2.1 key_encryptsession F -GLIBC_2.1 key_encryptsession_pk F -GLIBC_2.1 key_gendes F -GLIBC_2.1 key_get_conv F -GLIBC_2.1 key_secretkey_is_set F -GLIBC_2.1 key_setnet F -GLIBC_2.1 key_setsecret F -GLIBC_2.1 lockf64 F -GLIBC_2.1 lseek64 F -GLIBC_2.1 makecontext F -GLIBC_2.1 mempcpy F -GLIBC_2.1 mmap64 F -GLIBC_2.1 netname2host F -GLIBC_2.1 netname2user F -GLIBC_2.1 nftw F -GLIBC_2.1 nftw64 F -GLIBC_2.1 ntp_adjtime F -GLIBC_2.1 ntp_gettime F -GLIBC_2.1 open64 F -GLIBC_2.1 passwd2des F -GLIBC_2.1 pclose F -GLIBC_2.1 popen F -GLIBC_2.1 pread F -GLIBC_2.1 pread64 F -GLIBC_2.1 printf_size F -GLIBC_2.1 printf_size_info F -GLIBC_2.1 pthread_attr_init F -GLIBC_2.1 ptsname F -GLIBC_2.1 ptsname_r F -GLIBC_2.1 putgrent F -GLIBC_2.1 putmsg F -GLIBC_2.1 putpmsg F -GLIBC_2.1 pututxline F -GLIBC_2.1 pwrite F -GLIBC_2.1 pwrite64 F -GLIBC_2.1 rawmemchr F -GLIBC_2.1 readdir64 F -GLIBC_2.1 readdir64_r F -GLIBC_2.1 rtime F -GLIBC_2.1 scandir64 F -GLIBC_2.1 sendfile F -GLIBC_2.1 setrlimit64 F -GLIBC_2.1 setutxent F -GLIBC_2.1 sighold F -GLIBC_2.1 sigignore F -GLIBC_2.1 sigqueue F -GLIBC_2.1 sigrelse F -GLIBC_2.1 sigset F -GLIBC_2.1 sigtimedwait F -GLIBC_2.1 sigwaitinfo F -GLIBC_2.1 statfs64 F -GLIBC_2.1 statvfs F -GLIBC_2.1 statvfs64 F -GLIBC_2.1 strcasestr F -GLIBC_2.1 strtoimax F -GLIBC_2.1 strtoumax F -GLIBC_2.1 strverscmp F -GLIBC_2.1 svcunix_create F -GLIBC_2.1 svcunixfd_create F -GLIBC_2.1 swapcontext F -GLIBC_2.1 sys_errlist D 0x1fc -GLIBC_2.1 sys_nerr D 0x4 -GLIBC_2.1 sys_sigabbrev D 0x100 -GLIBC_2.1 sys_siglist D 0x100 -GLIBC_2.1 sysv_signal F -GLIBC_2.1 tcgetsid F -GLIBC_2.1 tdestroy F -GLIBC_2.1 tmpfile F -GLIBC_2.1 tmpfile64 F -GLIBC_2.1 truncate64 F -GLIBC_2.1 umount2 F -GLIBC_2.1 unlockpt F -GLIBC_2.1 updwtmpx F -GLIBC_2.1 user2netname F -GLIBC_2.1 utmpxname F -GLIBC_2.1 versionsort F -GLIBC_2.1 versionsort64 F -GLIBC_2.1 waitid F -GLIBC_2.1 wcscasecmp F -GLIBC_2.1 wcsncasecmp F -GLIBC_2.1 wcsnlen F -GLIBC_2.1 wcstoimax F -GLIBC_2.1 wcstoll F -GLIBC_2.1 wcstoull F -GLIBC_2.1 wcstoumax F -GLIBC_2.1 wcswcs F -GLIBC_2.1 wordexp F -GLIBC_2.1 wordfree F -GLIBC_2.1 xdecrypt F -GLIBC_2.1 xdr_authdes_cred F -GLIBC_2.1 xdr_authdes_verf F -GLIBC_2.1 xdr_getcredres F -GLIBC_2.1 xdr_int16_t F -GLIBC_2.1 xdr_int32_t F -GLIBC_2.1 xdr_int8_t F -GLIBC_2.1 xdr_netnamestr F -GLIBC_2.1 xdr_sizeof F -GLIBC_2.1 xdr_uint16_t F -GLIBC_2.1 xdr_uint32_t F -GLIBC_2.1 xdr_uint8_t F -GLIBC_2.1 xdr_unixcred F -GLIBC_2.1.1 GLIBC_2.1.1 A -GLIBC_2.1.1 _Exit F -GLIBC_2.1.1 __mempcpy_small F -GLIBC_2.1.1 __stpcpy_small F -GLIBC_2.1.1 __strcpy_small F -GLIBC_2.1.1 __strcspn_c1 F -GLIBC_2.1.1 __strcspn_c2 F -GLIBC_2.1.1 __strcspn_c3 F -GLIBC_2.1.1 __strpbrk_c2 F -GLIBC_2.1.1 __strpbrk_c3 F -GLIBC_2.1.1 __strsep_1c F -GLIBC_2.1.1 __strsep_2c F -GLIBC_2.1.1 __strsep_3c F -GLIBC_2.1.1 __strsep_g F -GLIBC_2.1.1 __strspn_c1 F -GLIBC_2.1.1 __strspn_c2 F -GLIBC_2.1.1 __strspn_c3 F -GLIBC_2.1.1 __strtok_r_1c F -GLIBC_2.1.1 __strverscmp F -GLIBC_2.1.1 getutmp F -GLIBC_2.1.1 getutmpx F -GLIBC_2.1.1 imaxabs F -GLIBC_2.1.1 imaxdiv F -GLIBC_2.1.1 strchrnul F -GLIBC_2.1.1 xdr_hyper F -GLIBC_2.1.1 xdr_int64_t F -GLIBC_2.1.1 xdr_longlong_t F -GLIBC_2.1.1 xdr_u_hyper F -GLIBC_2.1.1 xdr_u_longlong_t F -GLIBC_2.1.1 xdr_uint64_t F -GLIBC_2.1.2 GLIBC_2.1.2 A -GLIBC_2.1.2 __vfork F -GLIBC_2.1.2 getaliasbyname_r F -GLIBC_2.1.2 getaliasent_r F -GLIBC_2.1.2 getgrent_r F -GLIBC_2.1.2 getgrgid_r F -GLIBC_2.1.2 getgrnam_r F -GLIBC_2.1.2 gethostbyaddr_r F -GLIBC_2.1.2 gethostbyname2_r F -GLIBC_2.1.2 gethostbyname_r F -GLIBC_2.1.2 gethostent_r F -GLIBC_2.1.2 getnetbyaddr_r F -GLIBC_2.1.2 getnetbyname_r F -GLIBC_2.1.2 getnetent_r F -GLIBC_2.1.2 getprotobyname_r F -GLIBC_2.1.2 getprotobynumber_r F -GLIBC_2.1.2 getprotoent_r F -GLIBC_2.1.2 getpwent_r F -GLIBC_2.1.2 getpwnam_r F -GLIBC_2.1.2 getpwuid_r F -GLIBC_2.1.2 getrpcbyname_r F -GLIBC_2.1.2 getrpcbynumber_r F -GLIBC_2.1.2 getrpcent_r F -GLIBC_2.1.2 getservbyname_r F -GLIBC_2.1.2 getservbyport_r F -GLIBC_2.1.2 getservent_r F -GLIBC_2.1.2 getspent_r F -GLIBC_2.1.2 getspnam_r F -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 __cxa_atexit F -GLIBC_2.1.3 __cxa_finalize F -GLIBC_2.1.3 __sigsuspend F -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 fallocate64 F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _sys_errlist D 0x21c -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x21c -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __getshmlba F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 _sys_errlist D 0x220 -GLIBC_2.16 _sys_nerr D 0x4 -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 sys_errlist D 0x220 -GLIBC_2.16 sys_nerr D 0x4 -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0x54 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 __assert F -GLIBC_2.2 __ctype32_tolower D 0x4 -GLIBC_2.2 __ctype32_toupper D 0x4 -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpurge F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __open64 F -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_state F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __statfs F -GLIBC_2.2 __strndup F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _res_hconf D 0x30 -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 dcngettext F -GLIBC_2.2 dngettext F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwscanf F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 glob64 F -GLIBC_2.2 iruserok_af F -GLIBC_2.2 localeconv F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 memrchr F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 moncontrol F -GLIBC_2.2 msgctl F -GLIBC_2.2 ngettext F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 scandir64 F -GLIBC_2.2 semctl F -GLIBC_2.2 shmctl F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x4 -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 ungetwc F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wprintf F -GLIBC_2.2 wscanf F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 _sys_errlist D 0x200 -GLIBC_2.3 _sys_nerr D 0x4 -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoll_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strtoull_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 sys_errlist D 0x200 -GLIBC_2.3 sys_nerr D 0x4 -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x104 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 posix_fadvise64 F -GLIBC_2.3.3 posix_fallocate64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 sys_sigabbrev D 0x104 -GLIBC_2.3.3 sys_siglist D 0x104 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 _IO_fprintf F -GLIBC_2.4 _IO_printf F -GLIBC_2.4 _IO_sprintf F -GLIBC_2.4 _IO_sscanf F -GLIBC_2.4 _IO_vfprintf F -GLIBC_2.4 _IO_vfscanf F -GLIBC_2.4 _IO_vsprintf F -GLIBC_2.4 _Q_add F -GLIBC_2.4 _Q_cmp F -GLIBC_2.4 _Q_cmpe F -GLIBC_2.4 _Q_div F -GLIBC_2.4 _Q_dtoq F -GLIBC_2.4 _Q_feq F -GLIBC_2.4 _Q_fge F -GLIBC_2.4 _Q_fgt F -GLIBC_2.4 _Q_fle F -GLIBC_2.4 _Q_flt F -GLIBC_2.4 _Q_fne F -GLIBC_2.4 _Q_itoq F -GLIBC_2.4 _Q_lltoq F -GLIBC_2.4 _Q_mul F -GLIBC_2.4 _Q_neg F -GLIBC_2.4 _Q_qtod F -GLIBC_2.4 _Q_qtoi F -GLIBC_2.4 _Q_qtoll F -GLIBC_2.4 _Q_qtos F -GLIBC_2.4 _Q_qtou F -GLIBC_2.4 _Q_qtoull F -GLIBC_2.4 _Q_sqrt F -GLIBC_2.4 _Q_stoq F -GLIBC_2.4 _Q_sub F -GLIBC_2.4 _Q_ulltoq F -GLIBC_2.4 _Q_utoq F -GLIBC_2.4 __asprintf F -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fprintf_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __isinfl F -GLIBC_2.4 __isnanl F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __nldbl__IO_fprintf F -GLIBC_2.4 __nldbl__IO_printf F -GLIBC_2.4 __nldbl__IO_sprintf F -GLIBC_2.4 __nldbl__IO_sscanf F -GLIBC_2.4 __nldbl__IO_vfprintf F -GLIBC_2.4 __nldbl__IO_vfscanf F -GLIBC_2.4 __nldbl__IO_vsprintf F -GLIBC_2.4 __nldbl___asprintf F -GLIBC_2.4 __nldbl___fprintf_chk F -GLIBC_2.4 __nldbl___fwprintf_chk F -GLIBC_2.4 __nldbl___printf_chk F -GLIBC_2.4 __nldbl___printf_fp F -GLIBC_2.4 __nldbl___snprintf_chk F -GLIBC_2.4 __nldbl___sprintf_chk F -GLIBC_2.4 __nldbl___strfmon_l F -GLIBC_2.4 __nldbl___swprintf_chk F -GLIBC_2.4 __nldbl___syslog_chk F -GLIBC_2.4 __nldbl___vfprintf_chk F -GLIBC_2.4 __nldbl___vfscanf F -GLIBC_2.4 __nldbl___vfwprintf_chk F -GLIBC_2.4 __nldbl___vprintf_chk F -GLIBC_2.4 __nldbl___vsnprintf F -GLIBC_2.4 __nldbl___vsnprintf_chk F -GLIBC_2.4 __nldbl___vsprintf_chk F -GLIBC_2.4 __nldbl___vsscanf F -GLIBC_2.4 __nldbl___vstrfmon F -GLIBC_2.4 __nldbl___vstrfmon_l F -GLIBC_2.4 __nldbl___vswprintf_chk F -GLIBC_2.4 __nldbl___vsyslog_chk F -GLIBC_2.4 __nldbl___vwprintf_chk F -GLIBC_2.4 __nldbl___wprintf_chk F -GLIBC_2.4 __nldbl_asprintf F -GLIBC_2.4 __nldbl_dprintf F -GLIBC_2.4 __nldbl_fprintf F -GLIBC_2.4 __nldbl_fscanf F -GLIBC_2.4 __nldbl_fwprintf F -GLIBC_2.4 __nldbl_fwscanf F -GLIBC_2.4 __nldbl_obstack_printf F -GLIBC_2.4 __nldbl_obstack_vprintf F -GLIBC_2.4 __nldbl_printf F -GLIBC_2.4 __nldbl_printf_size F -GLIBC_2.4 __nldbl_scanf F -GLIBC_2.4 __nldbl_snprintf F -GLIBC_2.4 __nldbl_sprintf F -GLIBC_2.4 __nldbl_sscanf F -GLIBC_2.4 __nldbl_strfmon F -GLIBC_2.4 __nldbl_strfmon_l F -GLIBC_2.4 __nldbl_swprintf F -GLIBC_2.4 __nldbl_swscanf F -GLIBC_2.4 __nldbl_syslog F -GLIBC_2.4 __nldbl_vasprintf F -GLIBC_2.4 __nldbl_vdprintf F -GLIBC_2.4 __nldbl_vfprintf F -GLIBC_2.4 __nldbl_vfscanf F -GLIBC_2.4 __nldbl_vfwprintf F -GLIBC_2.4 __nldbl_vfwscanf F -GLIBC_2.4 __nldbl_vprintf F -GLIBC_2.4 __nldbl_vscanf F -GLIBC_2.4 __nldbl_vsnprintf F -GLIBC_2.4 __nldbl_vsprintf F -GLIBC_2.4 __nldbl_vsscanf F -GLIBC_2.4 __nldbl_vswprintf F -GLIBC_2.4 __nldbl_vswscanf F -GLIBC_2.4 __nldbl_vsyslog F -GLIBC_2.4 __nldbl_vwprintf F -GLIBC_2.4 __nldbl_vwscanf F -GLIBC_2.4 __nldbl_wprintf F -GLIBC_2.4 __nldbl_wscanf F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __printf_chk F -GLIBC_2.4 __printf_fp F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __signbitl F -GLIBC_2.4 __snprintf_chk F -GLIBC_2.4 __sprintf_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __strfmon_l F -GLIBC_2.4 __strtold_internal F -GLIBC_2.4 __strtold_l F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfprintf_chk F -GLIBC_2.4 __vfscanf F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vprintf_chk F -GLIBC_2.4 __vsnprintf F -GLIBC_2.4 __vsnprintf_chk F -GLIBC_2.4 __vsprintf_chk F -GLIBC_2.4 __vsscanf F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstold_internal F -GLIBC_2.4 __wcstold_l F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 _sys_errlist D 0x218 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 asprintf F -GLIBC_2.4 copysignl F -GLIBC_2.4 dprintf F -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 finitel F -GLIBC_2.4 fprintf F -GLIBC_2.4 frexpl F -GLIBC_2.4 fscanf F -GLIBC_2.4 futimesat F -GLIBC_2.4 fwprintf F -GLIBC_2.4 fwscanf F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 isinfl F -GLIBC_2.4 isnanl F -GLIBC_2.4 ldexpl F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 modfl F -GLIBC_2.4 obstack_printf F -GLIBC_2.4 obstack_vprintf F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 printf F -GLIBC_2.4 printf_size F -GLIBC_2.4 qecvt F -GLIBC_2.4 qecvt_r F -GLIBC_2.4 qfcvt F -GLIBC_2.4 qfcvt_r F -GLIBC_2.4 qgcvt F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 scalbnl F -GLIBC_2.4 scanf F -GLIBC_2.4 snprintf F -GLIBC_2.4 sprintf F -GLIBC_2.4 sscanf F -GLIBC_2.4 strfmon F -GLIBC_2.4 strfmon_l F -GLIBC_2.4 strtold F -GLIBC_2.4 strtold_l F -GLIBC_2.4 swprintf F -GLIBC_2.4 swscanf F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sys_errlist D 0x218 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 syslog F -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.4 vasprintf F -GLIBC_2.4 vdprintf F -GLIBC_2.4 vfprintf F -GLIBC_2.4 vfscanf F -GLIBC_2.4 vfwprintf F -GLIBC_2.4 vfwscanf F -GLIBC_2.4 vprintf F -GLIBC_2.4 vscanf F -GLIBC_2.4 vsnprintf F -GLIBC_2.4 vsprintf F -GLIBC_2.4 vsscanf F -GLIBC_2.4 vswprintf F -GLIBC_2.4 vswscanf F -GLIBC_2.4 vsyslog F -GLIBC_2.4 vwprintf F -GLIBC_2.4 vwscanf F -GLIBC_2.4 wcstold F -GLIBC_2.4 wcstold_l F -GLIBC_2.4 wprintf F -GLIBC_2.4 wscanf F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __nldbl___isoc99_fscanf F -GLIBC_2.7 __nldbl___isoc99_fwscanf F -GLIBC_2.7 __nldbl___isoc99_scanf F -GLIBC_2.7 __nldbl___isoc99_sscanf F -GLIBC_2.7 __nldbl___isoc99_swscanf F -GLIBC_2.7 __nldbl___isoc99_vfscanf F -GLIBC_2.7 __nldbl___isoc99_vfwscanf F -GLIBC_2.7 __nldbl___isoc99_vscanf F -GLIBC_2.7 __nldbl___isoc99_vsscanf F -GLIBC_2.7 __nldbl___isoc99_vswscanf F -GLIBC_2.7 __nldbl___isoc99_vwscanf F -GLIBC_2.7 __nldbl___isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __nldbl___asprintf_chk F -GLIBC_2.8 __nldbl___dprintf_chk F -GLIBC_2.8 __nldbl___obstack_printf_chk F -GLIBC_2.8 __nldbl___obstack_vprintf_chk F -GLIBC_2.8 __nldbl___vasprintf_chk F -GLIBC_2.8 __nldbl___vdprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libcrypt.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libcrypt.abilist deleted file mode 100644 index 4db2639336..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 crypt F -GLIBC_2.0 crypt_r F -GLIBC_2.0 encrypt F -GLIBC_2.0 encrypt_r F -GLIBC_2.0 fcrypt F -GLIBC_2.0 setkey F -GLIBC_2.0 setkey_r F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libdl.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libdl.abilist deleted file mode 100644 index 5536f6e0a9..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libdl.abilist +++ /dev/null @@ -1,14 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 dladdr F -GLIBC_2.0 dlclose F -GLIBC_2.0 dlerror F -GLIBC_2.0 dlopen F -GLIBC_2.0 dlsym F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 dlopen F -GLIBC_2.1 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist deleted file mode 100644 index f73af6f224..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ /dev/null @@ -1,568 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _LIB_VERSION D 0x4 -GLIBC_2.0 acos F -GLIBC_2.0 acosf F -GLIBC_2.0 acosh F -GLIBC_2.0 acoshf F -GLIBC_2.0 acoshl F -GLIBC_2.0 acosl F -GLIBC_2.0 asin F -GLIBC_2.0 asinf F -GLIBC_2.0 asinh F -GLIBC_2.0 asinhf F -GLIBC_2.0 asinhl F -GLIBC_2.0 asinl F -GLIBC_2.0 atan F -GLIBC_2.0 atan2 F -GLIBC_2.0 atan2f F -GLIBC_2.0 atan2l F -GLIBC_2.0 atanf F -GLIBC_2.0 atanh F -GLIBC_2.0 atanhf F -GLIBC_2.0 atanhl F -GLIBC_2.0 atanl F -GLIBC_2.0 cbrt F -GLIBC_2.0 cbrtf F -GLIBC_2.0 cbrtl F -GLIBC_2.0 ceil F -GLIBC_2.0 ceilf F -GLIBC_2.0 ceill F -GLIBC_2.0 copysign F -GLIBC_2.0 copysignf F -GLIBC_2.0 cos F -GLIBC_2.0 cosf F -GLIBC_2.0 cosh F -GLIBC_2.0 coshf F -GLIBC_2.0 coshl F -GLIBC_2.0 cosl F -GLIBC_2.0 drem F -GLIBC_2.0 dremf F -GLIBC_2.0 dreml F -GLIBC_2.0 erf F -GLIBC_2.0 erfc F -GLIBC_2.0 erfcf F -GLIBC_2.0 erfcl F -GLIBC_2.0 erff F -GLIBC_2.0 erfl F -GLIBC_2.0 exp F -GLIBC_2.0 expf F -GLIBC_2.0 expl F -GLIBC_2.0 expm1 F -GLIBC_2.0 expm1f F -GLIBC_2.0 expm1l F -GLIBC_2.0 fabs F -GLIBC_2.0 fabsf F -GLIBC_2.0 finite F -GLIBC_2.0 finitef F -GLIBC_2.0 finitel F -GLIBC_2.0 floor F -GLIBC_2.0 floorf F -GLIBC_2.0 floorl F -GLIBC_2.0 fmod F -GLIBC_2.0 fmodf F -GLIBC_2.0 fmodl F -GLIBC_2.0 frexp F -GLIBC_2.0 frexpf F -GLIBC_2.0 frexpl F -GLIBC_2.0 gamma F -GLIBC_2.0 gammaf F -GLIBC_2.0 gammal F -GLIBC_2.0 hypot F -GLIBC_2.0 hypotf F -GLIBC_2.0 hypotl F -GLIBC_2.0 ilogb F -GLIBC_2.0 ilogbf F -GLIBC_2.0 ilogbl F -GLIBC_2.0 j0 F -GLIBC_2.0 j0f F -GLIBC_2.0 j0l F -GLIBC_2.0 j1 F -GLIBC_2.0 j1f F -GLIBC_2.0 j1l F -GLIBC_2.0 jn F -GLIBC_2.0 jnf F -GLIBC_2.0 jnl F -GLIBC_2.0 ldexp F -GLIBC_2.0 ldexpf F -GLIBC_2.0 ldexpl F -GLIBC_2.0 lgamma F -GLIBC_2.0 lgamma_r F -GLIBC_2.0 lgammaf F -GLIBC_2.0 lgammaf_r F -GLIBC_2.0 lgammal F -GLIBC_2.0 lgammal_r F -GLIBC_2.0 log F -GLIBC_2.0 log10 F -GLIBC_2.0 log10f F -GLIBC_2.0 log10l F -GLIBC_2.0 log1p F -GLIBC_2.0 log1pf F -GLIBC_2.0 log1pl F -GLIBC_2.0 logb F -GLIBC_2.0 logbf F -GLIBC_2.0 logbl F -GLIBC_2.0 logf F -GLIBC_2.0 logl F -GLIBC_2.0 matherr F -GLIBC_2.0 modf F -GLIBC_2.0 modff F -GLIBC_2.0 modfl F -GLIBC_2.0 nextafter F -GLIBC_2.0 nextafterf F -GLIBC_2.0 nextafterl F -GLIBC_2.0 pow F -GLIBC_2.0 powf F -GLIBC_2.0 powl F -GLIBC_2.0 remainder F -GLIBC_2.0 remainderf F -GLIBC_2.0 remainderl F -GLIBC_2.0 rint F -GLIBC_2.0 rintf F -GLIBC_2.0 rintl F -GLIBC_2.0 scalb F -GLIBC_2.0 scalbf F -GLIBC_2.0 scalbl F -GLIBC_2.0 scalbn F -GLIBC_2.0 scalbnf F -GLIBC_2.0 scalbnl F -GLIBC_2.0 signgam D 0x4 -GLIBC_2.0 significand F -GLIBC_2.0 significandf F -GLIBC_2.0 significandl F -GLIBC_2.0 sin F -GLIBC_2.0 sinf F -GLIBC_2.0 sinh F -GLIBC_2.0 sinhf F -GLIBC_2.0 sinhl F -GLIBC_2.0 sinl F -GLIBC_2.0 sqrt F -GLIBC_2.0 sqrtf F -GLIBC_2.0 tan F -GLIBC_2.0 tanf F -GLIBC_2.0 tanh F -GLIBC_2.0 tanhf F -GLIBC_2.0 tanhl F -GLIBC_2.0 tanl F -GLIBC_2.0 y0 F -GLIBC_2.0 y0f F -GLIBC_2.0 y0l F -GLIBC_2.0 y1 F -GLIBC_2.0 y1f F -GLIBC_2.0 y1l F -GLIBC_2.0 yn F -GLIBC_2.0 ynf F -GLIBC_2.0 ynl F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __clog10 F -GLIBC_2.1 __clog10f F -GLIBC_2.1 __clog10l F -GLIBC_2.1 __finite F -GLIBC_2.1 __finitef F -GLIBC_2.1 __finitel F -GLIBC_2.1 __fpclassify F -GLIBC_2.1 __fpclassifyf F -GLIBC_2.1 __signbit F -GLIBC_2.1 __signbitf F -GLIBC_2.1 cabs F -GLIBC_2.1 cabsf F -GLIBC_2.1 cabsl F -GLIBC_2.1 cacos F -GLIBC_2.1 cacosf F -GLIBC_2.1 cacosh F -GLIBC_2.1 cacoshf F -GLIBC_2.1 cacoshl F -GLIBC_2.1 cacosl F -GLIBC_2.1 carg F -GLIBC_2.1 cargf F -GLIBC_2.1 cargl F -GLIBC_2.1 casin F -GLIBC_2.1 casinf F -GLIBC_2.1 casinh F -GLIBC_2.1 casinhf F -GLIBC_2.1 casinhl F -GLIBC_2.1 casinl F -GLIBC_2.1 catan F -GLIBC_2.1 catanf F -GLIBC_2.1 catanh F -GLIBC_2.1 catanhf F -GLIBC_2.1 catanhl F -GLIBC_2.1 catanl F -GLIBC_2.1 ccos F -GLIBC_2.1 ccosf F -GLIBC_2.1 ccosh F -GLIBC_2.1 ccoshf F -GLIBC_2.1 ccoshl F -GLIBC_2.1 ccosl F -GLIBC_2.1 cexp F -GLIBC_2.1 cexpf F -GLIBC_2.1 cexpl F -GLIBC_2.1 cimag F -GLIBC_2.1 cimagf F -GLIBC_2.1 cimagl F -GLIBC_2.1 clog F -GLIBC_2.1 clog10 F -GLIBC_2.1 clog10f F -GLIBC_2.1 clog10l F -GLIBC_2.1 clogf F -GLIBC_2.1 clogl F -GLIBC_2.1 conj F -GLIBC_2.1 conjf F -GLIBC_2.1 conjl F -GLIBC_2.1 cpow F -GLIBC_2.1 cpowf F -GLIBC_2.1 cpowl F -GLIBC_2.1 cproj F -GLIBC_2.1 cprojf F -GLIBC_2.1 cprojl F -GLIBC_2.1 creal F -GLIBC_2.1 crealf F -GLIBC_2.1 creall F -GLIBC_2.1 csin F -GLIBC_2.1 csinf F -GLIBC_2.1 csinh F -GLIBC_2.1 csinhf F -GLIBC_2.1 csinhl F -GLIBC_2.1 csinl F -GLIBC_2.1 csqrt F -GLIBC_2.1 csqrtf F -GLIBC_2.1 csqrtl F -GLIBC_2.1 ctan F -GLIBC_2.1 ctanf F -GLIBC_2.1 ctanh F -GLIBC_2.1 ctanhf F -GLIBC_2.1 ctanhl F -GLIBC_2.1 ctanl F -GLIBC_2.1 exp10 F -GLIBC_2.1 exp10f F -GLIBC_2.1 exp10l F -GLIBC_2.1 exp2 F -GLIBC_2.1 exp2f F -GLIBC_2.1 fdim F -GLIBC_2.1 fdimf F -GLIBC_2.1 fdiml F -GLIBC_2.1 feclearexcept F -GLIBC_2.1 fegetenv F -GLIBC_2.1 fegetexceptflag F -GLIBC_2.1 fegetround F -GLIBC_2.1 feholdexcept F -GLIBC_2.1 feraiseexcept F -GLIBC_2.1 fesetenv F -GLIBC_2.1 fesetexceptflag F -GLIBC_2.1 fesetround F -GLIBC_2.1 fetestexcept F -GLIBC_2.1 feupdateenv F -GLIBC_2.1 fma F -GLIBC_2.1 fmaf F -GLIBC_2.1 fmax F -GLIBC_2.1 fmaxf F -GLIBC_2.1 fmaxl F -GLIBC_2.1 fmin F -GLIBC_2.1 fminf F -GLIBC_2.1 fminl F -GLIBC_2.1 llrint F -GLIBC_2.1 llrintf F -GLIBC_2.1 llrintl F -GLIBC_2.1 llround F -GLIBC_2.1 llroundf F -GLIBC_2.1 llroundl F -GLIBC_2.1 log2 F -GLIBC_2.1 log2f F -GLIBC_2.1 log2l F -GLIBC_2.1 lrint F -GLIBC_2.1 lrintf F -GLIBC_2.1 lrintl F -GLIBC_2.1 lround F -GLIBC_2.1 lroundf F -GLIBC_2.1 lroundl F -GLIBC_2.1 nan F -GLIBC_2.1 nanf F -GLIBC_2.1 nanl F -GLIBC_2.1 nearbyint F -GLIBC_2.1 nearbyintf F -GLIBC_2.1 nearbyintl F -GLIBC_2.1 nexttoward F -GLIBC_2.1 nexttowardf F -GLIBC_2.1 nexttowardl F -GLIBC_2.1 pow10 F -GLIBC_2.1 pow10f F -GLIBC_2.1 pow10l F -GLIBC_2.1 remquo F -GLIBC_2.1 remquof F -GLIBC_2.1 remquol F -GLIBC_2.1 round F -GLIBC_2.1 roundf F -GLIBC_2.1 roundl F -GLIBC_2.1 scalbln F -GLIBC_2.1 scalblnf F -GLIBC_2.1 scalblnl F -GLIBC_2.1 sincos F -GLIBC_2.1 sincosf F -GLIBC_2.1 sincosl F -GLIBC_2.1 tgamma F -GLIBC_2.1 tgammaf F -GLIBC_2.1 tgammal F -GLIBC_2.1 trunc F -GLIBC_2.1 truncf F -GLIBC_2.1 truncl F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __acoshl_finite F -GLIBC_2.15 __acosl_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __asinl_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atan2l_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __atanhl_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __coshl_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp10l_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp2l_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __expl_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __fmodl_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __gammal_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __hypotl_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j0l_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __j1l_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __jnl_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __lgammal_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log10l_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log2l_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __logl_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __powl_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __remainderl_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __scalbl_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sinhl_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y0l_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __y1l_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.15 __ynl_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 feclearexcept F -GLIBC_2.2 fedisableexcept F -GLIBC_2.2 feenableexcept F -GLIBC_2.2 fegetenv F -GLIBC_2.2 fegetexcept F -GLIBC_2.2 fegetexceptflag F -GLIBC_2.2 feraiseexcept F -GLIBC_2.2 fesetenv F -GLIBC_2.2 fesetexceptflag F -GLIBC_2.2 feupdateenv F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 __sqrtl_finite F -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __clog10l F -GLIBC_2.4 __finitel F -GLIBC_2.4 __fpclassifyl F -GLIBC_2.4 __nldbl_nexttowardf F -GLIBC_2.4 __signbitl F -GLIBC_2.4 acoshl F -GLIBC_2.4 acosl F -GLIBC_2.4 asinhl F -GLIBC_2.4 asinl F -GLIBC_2.4 atan2l F -GLIBC_2.4 atanhl F -GLIBC_2.4 atanl F -GLIBC_2.4 cabsl F -GLIBC_2.4 cacoshl F -GLIBC_2.4 cacosl F -GLIBC_2.4 cargl F -GLIBC_2.4 casinhl F -GLIBC_2.4 casinl F -GLIBC_2.4 catanhl F -GLIBC_2.4 catanl F -GLIBC_2.4 cbrtl F -GLIBC_2.4 ccoshl F -GLIBC_2.4 ccosl F -GLIBC_2.4 ceill F -GLIBC_2.4 cexpl F -GLIBC_2.4 cimagl F -GLIBC_2.4 clog10l F -GLIBC_2.4 clogl F -GLIBC_2.4 conjl F -GLIBC_2.4 copysignl F -GLIBC_2.4 coshl F -GLIBC_2.4 cosl F -GLIBC_2.4 cpowl F -GLIBC_2.4 cprojl F -GLIBC_2.4 creall F -GLIBC_2.4 csinhl F -GLIBC_2.4 csinl F -GLIBC_2.4 csqrtl F -GLIBC_2.4 ctanhl F -GLIBC_2.4 ctanl F -GLIBC_2.4 dreml F -GLIBC_2.4 erfcl F -GLIBC_2.4 erfl F -GLIBC_2.4 exp10l F -GLIBC_2.4 exp2l F -GLIBC_2.4 expl F -GLIBC_2.4 expm1l F -GLIBC_2.4 fabsl F -GLIBC_2.4 fdiml F -GLIBC_2.4 finitel F -GLIBC_2.4 floorl F -GLIBC_2.4 fmal F -GLIBC_2.4 fmaxl F -GLIBC_2.4 fminl F -GLIBC_2.4 fmodl F -GLIBC_2.4 frexpl F -GLIBC_2.4 gammal F -GLIBC_2.4 hypotl F -GLIBC_2.4 ilogbl F -GLIBC_2.4 j0l F -GLIBC_2.4 j1l F -GLIBC_2.4 jnl F -GLIBC_2.4 ldexpl F -GLIBC_2.4 lgammal F -GLIBC_2.4 lgammal_r F -GLIBC_2.4 llrintl F -GLIBC_2.4 llroundl F -GLIBC_2.4 log10l F -GLIBC_2.4 log1pl F -GLIBC_2.4 log2l F -GLIBC_2.4 logbl F -GLIBC_2.4 logl F -GLIBC_2.4 lrintl F -GLIBC_2.4 lroundl F -GLIBC_2.4 modfl F -GLIBC_2.4 nanl F -GLIBC_2.4 nearbyintl F -GLIBC_2.4 nextafterl F -GLIBC_2.4 nexttoward F -GLIBC_2.4 nexttowardf F -GLIBC_2.4 nexttowardl F -GLIBC_2.4 pow10l F -GLIBC_2.4 powl F -GLIBC_2.4 remainderl F -GLIBC_2.4 remquol F -GLIBC_2.4 rintl F -GLIBC_2.4 roundl F -GLIBC_2.4 scalbl F -GLIBC_2.4 scalblnl F -GLIBC_2.4 scalbnl F -GLIBC_2.4 significandl F -GLIBC_2.4 sincosl F -GLIBC_2.4 sinhl F -GLIBC_2.4 sinl F -GLIBC_2.4 sqrtl F -GLIBC_2.4 tanhl F -GLIBC_2.4 tanl F -GLIBC_2.4 tgammal F -GLIBC_2.4 truncl F -GLIBC_2.4 y0l F -GLIBC_2.4 y1l F -GLIBC_2.4 ynl F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libnsl.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libnsl.abilist deleted file mode 100644 index a23db2aeaf..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libnsl.abilist +++ /dev/null @@ -1,124 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __yp_check F -GLIBC_2.0 xdr_domainname F -GLIBC_2.0 xdr_keydat F -GLIBC_2.0 xdr_mapname F -GLIBC_2.0 xdr_peername F -GLIBC_2.0 xdr_valdat F -GLIBC_2.0 xdr_yp_buf F -GLIBC_2.0 xdr_ypbind_binding F -GLIBC_2.0 xdr_ypbind_resp F -GLIBC_2.0 xdr_ypbind_resptype F -GLIBC_2.0 xdr_ypbind_setdom F -GLIBC_2.0 xdr_ypdelete_args F -GLIBC_2.0 xdr_ypmap_parms F -GLIBC_2.0 xdr_ypmaplist F -GLIBC_2.0 xdr_yppush_status F -GLIBC_2.0 xdr_yppushresp_xfr F -GLIBC_2.0 xdr_ypreq_key F -GLIBC_2.0 xdr_ypreq_nokey F -GLIBC_2.0 xdr_ypreq_xfr F -GLIBC_2.0 xdr_ypresp_all F -GLIBC_2.0 xdr_ypresp_key_val F -GLIBC_2.0 xdr_ypresp_maplist F -GLIBC_2.0 xdr_ypresp_master F -GLIBC_2.0 xdr_ypresp_order F -GLIBC_2.0 xdr_ypresp_val F -GLIBC_2.0 xdr_ypresp_xfr F -GLIBC_2.0 xdr_ypstat F -GLIBC_2.0 xdr_ypupdate_args F -GLIBC_2.0 xdr_ypxfrstat F -GLIBC_2.0 yp_all F -GLIBC_2.0 yp_bind F -GLIBC_2.0 yp_first F -GLIBC_2.0 yp_get_default_domain F -GLIBC_2.0 yp_maplist F -GLIBC_2.0 yp_master F -GLIBC_2.0 yp_match F -GLIBC_2.0 yp_next F -GLIBC_2.0 yp_order F -GLIBC_2.0 yp_unbind F -GLIBC_2.0 yp_update F -GLIBC_2.0 ypbinderr_string F -GLIBC_2.0 yperr_string F -GLIBC_2.0 ypprot_err F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __free_fdresult F -GLIBC_2.1 __nis_default_access F -GLIBC_2.1 __nis_default_group F -GLIBC_2.1 __nis_default_owner F -GLIBC_2.1 __nis_default_ttl F -GLIBC_2.1 __nis_finddirectory F -GLIBC_2.1 __nis_hash F -GLIBC_2.1 __nisbind_connect F -GLIBC_2.1 __nisbind_create F -GLIBC_2.1 __nisbind_destroy F -GLIBC_2.1 __nisbind_next F -GLIBC_2.1 nis_add F -GLIBC_2.1 nis_add_entry F -GLIBC_2.1 nis_addmember F -GLIBC_2.1 nis_checkpoint F -GLIBC_2.1 nis_clone_directory F -GLIBC_2.1 nis_clone_object F -GLIBC_2.1 nis_clone_result F -GLIBC_2.1 nis_creategroup F -GLIBC_2.1 nis_destroy_object F -GLIBC_2.1 nis_destroygroup F -GLIBC_2.1 nis_dir_cmp F -GLIBC_2.1 nis_domain_of F -GLIBC_2.1 nis_domain_of_r F -GLIBC_2.1 nis_first_entry F -GLIBC_2.1 nis_free_directory F -GLIBC_2.1 nis_free_object F -GLIBC_2.1 nis_free_request F -GLIBC_2.1 nis_freenames F -GLIBC_2.1 nis_freeresult F -GLIBC_2.1 nis_freeservlist F -GLIBC_2.1 nis_freetags F -GLIBC_2.1 nis_getnames F -GLIBC_2.1 nis_getservlist F -GLIBC_2.1 nis_ismember F -GLIBC_2.1 nis_leaf_of F -GLIBC_2.1 nis_leaf_of_r F -GLIBC_2.1 nis_lerror F -GLIBC_2.1 nis_list F -GLIBC_2.1 nis_local_directory F -GLIBC_2.1 nis_local_group F -GLIBC_2.1 nis_local_host F -GLIBC_2.1 nis_local_principal F -GLIBC_2.1 nis_lookup F -GLIBC_2.1 nis_mkdir F -GLIBC_2.1 nis_modify F -GLIBC_2.1 nis_modify_entry F -GLIBC_2.1 nis_name_of F -GLIBC_2.1 nis_name_of_r F -GLIBC_2.1 nis_next_entry F -GLIBC_2.1 nis_perror F -GLIBC_2.1 nis_ping F -GLIBC_2.1 nis_print_directory F -GLIBC_2.1 nis_print_entry F -GLIBC_2.1 nis_print_group F -GLIBC_2.1 nis_print_group_entry F -GLIBC_2.1 nis_print_link F -GLIBC_2.1 nis_print_object F -GLIBC_2.1 nis_print_result F -GLIBC_2.1 nis_print_rights F -GLIBC_2.1 nis_print_table F -GLIBC_2.1 nis_read_obj F -GLIBC_2.1 nis_remove F -GLIBC_2.1 nis_remove_entry F -GLIBC_2.1 nis_removemember F -GLIBC_2.1 nis_rmdir F -GLIBC_2.1 nis_servstate F -GLIBC_2.1 nis_sperrno F -GLIBC_2.1 nis_sperror F -GLIBC_2.1 nis_sperror_r F -GLIBC_2.1 nis_stats F -GLIBC_2.1 nis_verifygroup F -GLIBC_2.1 nis_write_obj F -GLIBC_2.1 readColdStartFile F -GLIBC_2.1 writeColdStartFile F -GLIBC_2.1 xdr_cback_data F -GLIBC_2.1 xdr_obj_p F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 xdr_ypall F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist deleted file mode 100644 index 7e121d45f8..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist +++ /dev/null @@ -1,259 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 _IO_flockfile F -GLIBC_2.0 _IO_ftrylockfile F -GLIBC_2.0 _IO_funlockfile F -GLIBC_2.0 __close F -GLIBC_2.0 __connect F -GLIBC_2.0 __errno_location F -GLIBC_2.0 __fcntl F -GLIBC_2.0 __fork F -GLIBC_2.0 __h_errno_location F -GLIBC_2.0 __lseek F -GLIBC_2.0 __open F -GLIBC_2.0 __pthread_getspecific F -GLIBC_2.0 __pthread_key_create F -GLIBC_2.0 __pthread_mutex_destroy F -GLIBC_2.0 __pthread_mutex_init F -GLIBC_2.0 __pthread_mutex_lock F -GLIBC_2.0 __pthread_mutex_trylock F -GLIBC_2.0 __pthread_mutex_unlock F -GLIBC_2.0 __pthread_mutexattr_destroy F -GLIBC_2.0 __pthread_mutexattr_init F -GLIBC_2.0 __pthread_mutexattr_settype F -GLIBC_2.0 __pthread_once F -GLIBC_2.0 __pthread_setspecific F -GLIBC_2.0 __read F -GLIBC_2.0 __send F -GLIBC_2.0 __sigaction F -GLIBC_2.0 __wait F -GLIBC_2.0 __write F -GLIBC_2.0 _pthread_cleanup_pop F -GLIBC_2.0 _pthread_cleanup_pop_restore F -GLIBC_2.0 _pthread_cleanup_push F -GLIBC_2.0 _pthread_cleanup_push_defer F -GLIBC_2.0 accept F -GLIBC_2.0 close F -GLIBC_2.0 connect F -GLIBC_2.0 fcntl F -GLIBC_2.0 flockfile F -GLIBC_2.0 fork F -GLIBC_2.0 fsync F -GLIBC_2.0 ftrylockfile F -GLIBC_2.0 funlockfile F -GLIBC_2.0 longjmp F -GLIBC_2.0 lseek F -GLIBC_2.0 msync F -GLIBC_2.0 nanosleep F -GLIBC_2.0 open F -GLIBC_2.0 pause F -GLIBC_2.0 pthread_atfork F -GLIBC_2.0 pthread_attr_destroy F -GLIBC_2.0 pthread_attr_getdetachstate F -GLIBC_2.0 pthread_attr_getinheritsched F -GLIBC_2.0 pthread_attr_getschedparam F -GLIBC_2.0 pthread_attr_getschedpolicy F -GLIBC_2.0 pthread_attr_getscope F -GLIBC_2.0 pthread_attr_init F -GLIBC_2.0 pthread_attr_setdetachstate F -GLIBC_2.0 pthread_attr_setinheritsched F -GLIBC_2.0 pthread_attr_setschedparam F -GLIBC_2.0 pthread_attr_setschedpolicy F -GLIBC_2.0 pthread_attr_setscope F -GLIBC_2.0 pthread_cancel F -GLIBC_2.0 pthread_cond_broadcast F -GLIBC_2.0 pthread_cond_destroy F -GLIBC_2.0 pthread_cond_init F -GLIBC_2.0 pthread_cond_signal F -GLIBC_2.0 pthread_cond_timedwait F -GLIBC_2.0 pthread_cond_wait F -GLIBC_2.0 pthread_condattr_destroy F -GLIBC_2.0 pthread_condattr_init F -GLIBC_2.0 pthread_create F -GLIBC_2.0 pthread_detach F -GLIBC_2.0 pthread_equal F -GLIBC_2.0 pthread_exit F -GLIBC_2.0 pthread_getschedparam F -GLIBC_2.0 pthread_getspecific F -GLIBC_2.0 pthread_join F -GLIBC_2.0 pthread_key_create F -GLIBC_2.0 pthread_key_delete F -GLIBC_2.0 pthread_kill F -GLIBC_2.0 pthread_kill_other_threads_np F -GLIBC_2.0 pthread_mutex_destroy F -GLIBC_2.0 pthread_mutex_init F -GLIBC_2.0 pthread_mutex_lock F -GLIBC_2.0 pthread_mutex_trylock F -GLIBC_2.0 pthread_mutex_unlock F -GLIBC_2.0 pthread_mutexattr_destroy F -GLIBC_2.0 pthread_mutexattr_getkind_np F -GLIBC_2.0 pthread_mutexattr_init F -GLIBC_2.0 pthread_mutexattr_setkind_np F -GLIBC_2.0 pthread_once F -GLIBC_2.0 pthread_self F -GLIBC_2.0 pthread_setcancelstate F -GLIBC_2.0 pthread_setcanceltype F -GLIBC_2.0 pthread_setschedparam F -GLIBC_2.0 pthread_setspecific F -GLIBC_2.0 pthread_sigmask F -GLIBC_2.0 pthread_testcancel F -GLIBC_2.0 raise F -GLIBC_2.0 read F -GLIBC_2.0 recv F -GLIBC_2.0 recvfrom F -GLIBC_2.0 recvmsg F -GLIBC_2.0 sem_destroy F -GLIBC_2.0 sem_getvalue F -GLIBC_2.0 sem_init F -GLIBC_2.0 sem_post F -GLIBC_2.0 sem_trywait F -GLIBC_2.0 sem_wait F -GLIBC_2.0 send F -GLIBC_2.0 sendmsg F -GLIBC_2.0 sendto F -GLIBC_2.0 sigaction F -GLIBC_2.0 siglongjmp F -GLIBC_2.0 sigwait F -GLIBC_2.0 system F -GLIBC_2.0 tcdrain F -GLIBC_2.0 vfork F -GLIBC_2.0 wait F -GLIBC_2.0 waitpid F -GLIBC_2.0 write F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __libc_allocate_rtsig F -GLIBC_2.1 __libc_current_sigrtmax F -GLIBC_2.1 __libc_current_sigrtmin F -GLIBC_2.1 pthread_attr_getguardsize F -GLIBC_2.1 pthread_attr_getstackaddr F -GLIBC_2.1 pthread_attr_getstacksize F -GLIBC_2.1 pthread_attr_init F -GLIBC_2.1 pthread_attr_setguardsize F -GLIBC_2.1 pthread_attr_setstackaddr F -GLIBC_2.1 pthread_attr_setstacksize F -GLIBC_2.1 pthread_create F -GLIBC_2.1 pthread_getconcurrency F -GLIBC_2.1 pthread_mutexattr_gettype F -GLIBC_2.1 pthread_mutexattr_settype F -GLIBC_2.1 pthread_rwlock_destroy F -GLIBC_2.1 pthread_rwlock_init F -GLIBC_2.1 pthread_rwlock_rdlock F -GLIBC_2.1 pthread_rwlock_tryrdlock F -GLIBC_2.1 pthread_rwlock_trywrlock F -GLIBC_2.1 pthread_rwlock_unlock F -GLIBC_2.1 pthread_rwlock_wrlock F -GLIBC_2.1 pthread_rwlockattr_destroy F -GLIBC_2.1 pthread_rwlockattr_getkind_np F -GLIBC_2.1 pthread_rwlockattr_getpshared F -GLIBC_2.1 pthread_rwlockattr_init F -GLIBC_2.1 pthread_rwlockattr_setkind_np F -GLIBC_2.1 pthread_rwlockattr_setpshared F -GLIBC_2.1 pthread_setconcurrency F -GLIBC_2.1 sem_destroy F -GLIBC_2.1 sem_getvalue F -GLIBC_2.1 sem_init F -GLIBC_2.1 sem_post F -GLIBC_2.1 sem_trywait F -GLIBC_2.1 sem_wait F -GLIBC_2.1.1 GLIBC_2.1.1 A -GLIBC_2.1.1 sem_close F -GLIBC_2.1.1 sem_open F -GLIBC_2.1.1 sem_unlink F -GLIBC_2.1.2 GLIBC_2.1.2 A -GLIBC_2.1.2 __vfork F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __open64 F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pthread_rwlock_destroy F -GLIBC_2.2 __pthread_rwlock_init F -GLIBC_2.2 __pthread_rwlock_rdlock F -GLIBC_2.2 __pthread_rwlock_tryrdlock F -GLIBC_2.2 __pthread_rwlock_trywrlock F -GLIBC_2.2 __pthread_rwlock_unlock F -GLIBC_2.2 __pthread_rwlock_wrlock F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __res_state F -GLIBC_2.2 lseek64 F -GLIBC_2.2 open64 F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 pthread_attr_getstack F -GLIBC_2.2 pthread_attr_setstack F -GLIBC_2.2 pthread_barrier_destroy F -GLIBC_2.2 pthread_barrier_init F -GLIBC_2.2 pthread_barrier_wait F -GLIBC_2.2 pthread_barrierattr_destroy F -GLIBC_2.2 pthread_barrierattr_init F -GLIBC_2.2 pthread_barrierattr_setpshared F -GLIBC_2.2 pthread_condattr_getpshared F -GLIBC_2.2 pthread_condattr_setpshared F -GLIBC_2.2 pthread_getcpuclockid F -GLIBC_2.2 pthread_mutex_timedlock F -GLIBC_2.2 pthread_mutexattr_getpshared F -GLIBC_2.2 pthread_mutexattr_setpshared F -GLIBC_2.2 pthread_rwlock_timedrdlock F -GLIBC_2.2 pthread_rwlock_timedwrlock F -GLIBC_2.2 pthread_spin_destroy F -GLIBC_2.2 pthread_spin_init F -GLIBC_2.2 pthread_spin_lock F -GLIBC_2.2 pthread_spin_trylock F -GLIBC_2.2 pthread_spin_unlock F -GLIBC_2.2 pthread_yield F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 sem_timedwait F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 pthread_getattr_np F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_attr_setstack F -GLIBC_2.3.3 pthread_attr_setstacksize F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libresolv.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libresolv.abilist deleted file mode 100644 index 4d50e7c8c6..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libresolv.abilist +++ /dev/null @@ -1,100 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __b64_ntop F -GLIBC_2.0 __b64_pton F -GLIBC_2.0 __dn_comp F -GLIBC_2.0 __dn_count_labels F -GLIBC_2.0 __dn_skipname F -GLIBC_2.0 __fp_nquery F -GLIBC_2.0 __fp_query F -GLIBC_2.0 __fp_resstat F -GLIBC_2.0 __hostalias F -GLIBC_2.0 __loc_aton F -GLIBC_2.0 __loc_ntoa F -GLIBC_2.0 __p_cdname F -GLIBC_2.0 __p_cdnname F -GLIBC_2.0 __p_class F -GLIBC_2.0 __p_class_syms D 0x54 -GLIBC_2.0 __p_fqname F -GLIBC_2.0 __p_fqnname F -GLIBC_2.0 __p_option F -GLIBC_2.0 __p_query F -GLIBC_2.0 __p_secstodate F -GLIBC_2.0 __p_time F -GLIBC_2.0 __p_type F -GLIBC_2.0 __p_type_syms D 0x228 -GLIBC_2.0 __putlong F -GLIBC_2.0 __putshort F -GLIBC_2.0 __res_close F -GLIBC_2.0 __res_dnok F -GLIBC_2.0 __res_hnok F -GLIBC_2.0 __res_isourserver F -GLIBC_2.0 __res_mailok F -GLIBC_2.0 __res_nameinquery F -GLIBC_2.0 __res_ownok F -GLIBC_2.0 __res_queriesmatch F -GLIBC_2.0 __res_send F -GLIBC_2.0 __sym_ntop F -GLIBC_2.0 __sym_ntos F -GLIBC_2.0 __sym_ston F -GLIBC_2.0 _gethtbyaddr F -GLIBC_2.0 _gethtbyname F -GLIBC_2.0 _gethtbyname2 F -GLIBC_2.0 _gethtent F -GLIBC_2.0 _getlong F -GLIBC_2.0 _getshort F -GLIBC_2.0 _res_opcodes D 0x40 -GLIBC_2.0 _sethtent F -GLIBC_2.0 dn_expand F -GLIBC_2.0 inet_net_ntop F -GLIBC_2.0 inet_net_pton F -GLIBC_2.0 inet_neta F -GLIBC_2.0 res_gethostbyaddr F -GLIBC_2.0 res_gethostbyname F -GLIBC_2.0 res_gethostbyname2 F -GLIBC_2.0 res_mkquery F -GLIBC_2.0 res_query F -GLIBC_2.0 res_querydomain F -GLIBC_2.0 res_search F -GLIBC_2.0 res_send_setqhook F -GLIBC_2.0 res_send_setrhook F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __dn_expand F -GLIBC_2.2 __res_hostalias F -GLIBC_2.2 __res_mkquery F -GLIBC_2.2 __res_nmkquery F -GLIBC_2.2 __res_nquery F -GLIBC_2.2 __res_nquerydomain F -GLIBC_2.2 __res_nsearch F -GLIBC_2.2 __res_nsend F -GLIBC_2.2 __res_query F -GLIBC_2.2 __res_querydomain F -GLIBC_2.2 __res_search F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/librt.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/librt.abilist deleted file mode 100644 index 07056199bc..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/librt.abilist +++ /dev/null @@ -1,50 +0,0 @@ -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 aio_cancel F -GLIBC_2.1 aio_cancel64 F -GLIBC_2.1 aio_error F -GLIBC_2.1 aio_error64 F -GLIBC_2.1 aio_fsync F -GLIBC_2.1 aio_fsync64 F -GLIBC_2.1 aio_init F -GLIBC_2.1 aio_read F -GLIBC_2.1 aio_read64 F -GLIBC_2.1 aio_return F -GLIBC_2.1 aio_return64 F -GLIBC_2.1 aio_suspend F -GLIBC_2.1 aio_suspend64 F -GLIBC_2.1 aio_write F -GLIBC_2.1 aio_write64 F -GLIBC_2.1 lio_listio F -GLIBC_2.1 lio_listio64 F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 clock_getcpuclockid F -GLIBC_2.2 clock_getres F -GLIBC_2.2 clock_gettime F -GLIBC_2.2 clock_nanosleep F -GLIBC_2.2 clock_settime F -GLIBC_2.2 shm_open F -GLIBC_2.2 shm_unlink F -GLIBC_2.2 timer_create F -GLIBC_2.2 timer_delete F -GLIBC_2.2 timer_getoverrun F -GLIBC_2.2 timer_gettime F -GLIBC_2.2 timer_settime F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 aio_cancel F -GLIBC_2.3 aio_cancel64 F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libthread_db.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libthread_db.abilist deleted file mode 100644 index a8a8c2c68d..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libthread_db.abilist +++ /dev/null @@ -1,44 +0,0 @@ -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 td_init F -GLIBC_2.1.3 td_log F -GLIBC_2.1.3 td_ta_clear_event F -GLIBC_2.1.3 td_ta_delete F -GLIBC_2.1.3 td_ta_enable_stats F -GLIBC_2.1.3 td_ta_event_addr F -GLIBC_2.1.3 td_ta_event_getmsg F -GLIBC_2.1.3 td_ta_get_nthreads F -GLIBC_2.1.3 td_ta_get_ph F -GLIBC_2.1.3 td_ta_get_stats F -GLIBC_2.1.3 td_ta_map_id2thr F -GLIBC_2.1.3 td_ta_map_lwp2thr F -GLIBC_2.1.3 td_ta_new F -GLIBC_2.1.3 td_ta_reset_stats F -GLIBC_2.1.3 td_ta_set_event F -GLIBC_2.1.3 td_ta_setconcurrency F -GLIBC_2.1.3 td_ta_thr_iter F -GLIBC_2.1.3 td_ta_tsd_iter F -GLIBC_2.1.3 td_thr_clear_event F -GLIBC_2.1.3 td_thr_dbresume F -GLIBC_2.1.3 td_thr_dbsuspend F -GLIBC_2.1.3 td_thr_event_enable F -GLIBC_2.1.3 td_thr_event_getmsg F -GLIBC_2.1.3 td_thr_get_info F -GLIBC_2.1.3 td_thr_getfpregs F -GLIBC_2.1.3 td_thr_getgregs F -GLIBC_2.1.3 td_thr_getxregs F -GLIBC_2.1.3 td_thr_getxregsize F -GLIBC_2.1.3 td_thr_set_event F -GLIBC_2.1.3 td_thr_setfpregs F -GLIBC_2.1.3 td_thr_setgregs F -GLIBC_2.1.3 td_thr_setprio F -GLIBC_2.1.3 td_thr_setsigpending F -GLIBC_2.1.3 td_thr_setxregs F -GLIBC_2.1.3 td_thr_sigsetmask F -GLIBC_2.1.3 td_thr_tsd F -GLIBC_2.1.3 td_thr_validate F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 td_symbol_list F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libutil.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libutil.abilist deleted file mode 100644 index 89c67755c4..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 forkpty F -GLIBC_2.0 login F -GLIBC_2.0 login_tty F -GLIBC_2.0 logout F -GLIBC_2.0 logwtmp F -GLIBC_2.0 openpty F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data b/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data deleted file mode 100644 index c9786fd6ea..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data +++ /dev/null @@ -1,27 +0,0 @@ -libc.so: _Q_add ? -libc.so: _Q_cmp ? -libc.so: _Q_div ? -libc.so: _Q_feq ? -libc.so: _Q_fge ? -libc.so: _Q_fle ? -libc.so: _Q_flt ? -libc.so: _Q_fne ? -libc.so: _Q_itoq ? -libc.so: _Q_mul ? -libc.so: _Q_sub ? -libc.so: _Unwind_Find_FDE -libc.so: calloc -libc.so: free -libc.so: malloc -libc.so: memalign -libc.so: realloc -libm.so: matherr -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/lockf64.c b/sysdeps/unix/sysv/linux/sparc/sparc32/lockf64.c deleted file mode 100644 index a88f5a784a..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/lockf64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/lxstat.c b/sysdeps/unix/sysv/linux/sparc/sparc32/lxstat.c deleted file mode 100644 index 2371cd9719..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/lxstat.c +++ /dev/null @@ -1,2 +0,0 @@ -#include - diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/makecontext.c b/sysdeps/unix/sysv/linux/sparc/sparc32/makecontext.c deleted file mode 100644 index 2756bf5346..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/makecontext.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Create new context. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Sets up the outgoing arguments and the program counter for a user - context for the requested function call. - - Returning to the correct parent context is pretty simple on - Sparc. We only need to link up the register windows correctly. - Since global registers are clobbered by calls, we need not be - concerned about those, and thus is all could be worked out without - using a trampoline. - - Except that we must deal with the signal mask, thus a trampoline - is unavoidable. 32-bit stackframe layout: - +-----------------------------------------+ - | 7th and further parameters | - +-----------------------------------------+ - | backup storage for initial 6 parameters | - +-----------------------------------------+ - | struct return pointer | - +-----------------------------------------+ - | 8 incoming registers | - +-----------------------------------------+ - | 8 local registers | - %sp --> +-----------------------------------------+ - -*/ - -void -__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) -{ - extern void __start_context (void); - unsigned long int *sp; - va_list ap; - int i; - - sp = (unsigned long int *) (ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); - sp -= 16 + 7 + argc; - sp = (unsigned long int *) (((uintptr_t) sp) & ~(8 - 1)); - - for (i = 0; i < 8; i++) - sp[i + 8] = ucp->uc_mcontext.gregs[REG_O0 + i]; - - /* The struct return pointer is essentially unused, so we can - place the link there. */ - sp[16] = (unsigned long int) ucp->uc_link; - - va_start (ap, argc); - - /* Fill in outgoing arguments, including those which will - end up being passed on the stack. */ - for (i = 0; i < argc; i++) - { - unsigned long int arg = va_arg (ap, unsigned long int); - if (i < 6) - ucp->uc_mcontext.gregs[REG_O0 + i] = arg; - else - sp[i + 23 - 6] = arg; - } - - va_end (ap); - - ucp->uc_mcontext.gregs[REG_O6] = (unsigned long int) sp; - - ucp->uc_mcontext.gregs[REG_O7] = ((unsigned long int) __start_context) - 8; - - ucp->uc_mcontext.gregs[REG_PC] = (unsigned long int) func; - ucp->uc_mcontext.gregs[REG_nPC] = ucp->uc_mcontext.gregs[REG_PC] + 4; -} - -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/nldbl-abi.h b/sysdeps/unix/sysv/linux/sparc/sparc32/nldbl-abi.h deleted file mode 100644 index bd985cc59c..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/nldbl-abi.h +++ /dev/null @@ -1,8 +0,0 @@ -/* ABI version for long double switch. - This is used by the Versions and math_ldbl_opt.h files in - sysdeps/ieee754/ldbl-opt/. It gives the ABI version where - long double == double was replaced with proper long double - for libm *l functions and libc functions using long double. */ - -#define NLDBL_VERSION GLIBC_2.4 -#define LONG_DOUBLE_COMPAT_VERSION GLIBC_2_4 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/pipe.S b/sysdeps/unix/sysv/linux/sparc/sparc32/pipe.S deleted file mode 100644 index 5d06aadbe7..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/pipe.S +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Miguel de Icaza , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text - .globl __syscall_error -ENTRY(__libc_pipe) - mov %o0, %o2 /* Save PIPEDES. */ - mov SYS_ify(pipe),%g1 - ta 0x10 - bcc 1f - mov %o7, %g1 - call __syscall_error - mov %g1, %o7 -1: st %o0, [%o2] /* PIPEDES[0] = %o0; */ - st %o1, [%o2 + 4] /* PIPEDES[1] = %o1; */ - retl - clr %o0 -END(__libc_pipe) - -weak_alias (__libc_pipe, __pipe) -libc_hidden_def (__pipe) -weak_alias (__libc_pipe, pipe) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/profil-counter.h b/sysdeps/unix/sysv/linux/sparc/sparc32/profil-counter.h deleted file mode 100644 index 44b655a964..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/profil-counter.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Low-level statistical profiling support function. Linux/SPARC version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -void -__profil_counter (int signo, struct sigcontext *si) -{ - profil_count ((void *) si->si_regs.pc); -} -#ifndef __profil_counter -weak_alias (__profil_counter, profil_counter) -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c b/sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c deleted file mode 100644 index 2ea26dd409..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/readdir64_r.c b/sysdeps/unix/sysv/linux/sparc/sparc32/readdir64_r.c deleted file mode 100644 index 9f54f897e3..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/readdir64_r.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/register-dump.h b/sysdeps/unix/sysv/linux/sparc/sparc32/register-dump.h deleted file mode 100644 index 62485e8431..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/register-dump.h +++ /dev/null @@ -1,335 +0,0 @@ -/* Dump registers. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include <_itoa.h> - -/* We will print the register dump in this format: - - PSR: XXXXXXXX PC: XXXXXXXX NPC: XXXXXXXX Y: XXXXXXXX - g0: 00000000 g1: XXXXXXXX g2: XXXXXXXX g3: XXXXXXXX - g4: XXXXXXXX g5: XXXXXXXX g6: XXXXXXXX g7: XXXXXXXX - o0: XXXXXXXX o1: XXXXXXXX o2: XXXXXXXX o3: XXXXXXXX - o4: XXXXXXXX o5: XXXXXXXX sp: XXXXXXXX o7: XXXXXXXX - l0: XXXXXXXX l1: XXXXXXXX l2: XXXXXXXX l3: XXXXXXXX - l4: XXXXXXXX l5: XXXXXXXX l6: XXXXXXXX l7: XXXXXXXX - i0: XXXXXXXX i1: XXXXXXXX i2: XXXXXXXX i3: XXXXXXXX - i4: XXXXXXXX i5: XXXXXXXX fp: XXXXXXXX i7: XXXXXXXX - - followed on sun4, sun4c, sun4d, sun4m by: - - Old mask: XXXXXXXX FSR: XXXXXXXX FPQ: XXXXXXXX - f0: XXXXXXXXXXXXXXXX f2: XXXXXXXXXXXXXXXX f4: XXXXXXXXXXXXXXXX - f6: XXXXXXXXXXXXXXXX f8: XXXXXXXXXXXXXXXX f10: XXXXXXXXXXXXXXXX - f12: XXXXXXXXXXXXXXXX f14: XXXXXXXXXXXXXXXX f16: XXXXXXXXXXXXXXXX - f18: XXXXXXXXXXXXXXXX f20: XXXXXXXXXXXXXXXX f22: XXXXXXXXXXXXXXXX - f24: XXXXXXXXXXXXXXXX f26: XXXXXXXXXXXXXXXX f28: XXXXXXXXXXXXXXXX - f30: XXXXXXXXXXXXXXXX - - and on sun4u by: - - Old mask: XXXXXXXX XFSR: XXXXXXXXXXXXXXXX GSR: XX FPRS: X - f0: XXXXXXXXXXXXXXXX f2: XXXXXXXXXXXXXXXX f4: XXXXXXXXXXXXXXXX - f6: XXXXXXXXXXXXXXXX f8: XXXXXXXXXXXXXXXX f10: XXXXXXXXXXXXXXXX - f12: XXXXXXXXXXXXXXXX f14: XXXXXXXXXXXXXXXX f16: XXXXXXXXXXXXXXXX - f18: XXXXXXXXXXXXXXXX f20: XXXXXXXXXXXXXXXX f22: XXXXXXXXXXXXXXXX - f24: XXXXXXXXXXXXXXXX f26: XXXXXXXXXXXXXXXX f28: XXXXXXXXXXXXXXXX - f30: XXXXXXXXXXXXXXXX f32: XXXXXXXXXXXXXXXX f34: XXXXXXXXXXXXXXXX - f36: XXXXXXXXXXXXXXXX f38: XXXXXXXXXXXXXXXX f40: XXXXXXXXXXXXXXXX - f42: XXXXXXXXXXXXXXXX f44: XXXXXXXXXXXXXXXX f46: XXXXXXXXXXXXXXXX - f48: XXXXXXXXXXXXXXXX f50: XXXXXXXXXXXXXXXX f52: XXXXXXXXXXXXXXXX - f54: XXXXXXXXXXXXXXXX f56: XXXXXXXXXXXXXXXX f58: XXXXXXXXXXXXXXXX - f60: XXXXXXXXXXXXXXXX f62: XXXXXXXXXXXXXXXX - - */ - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -struct __siginfo_sparc32_fpu -{ - unsigned int si_float_regs[32]; - unsigned int si_fsr; - unsigned int si_fpq; -}; -struct __siginfo_sparc64_fpu -{ - unsigned int si_float_regs[64]; - unsigned int si_xfsr; - unsigned int si_fsr; - unsigned int _pad1; - unsigned int si_gsr; - unsigned int _pad2; - unsigned int si_fprs; -}; - -static void -register_dump (int fd, SIGCONTEXT ctx) -{ - char regs[36][8]; - char fregs[68][8]; - struct iovec iov[150]; - size_t nr = 0; - int i; - unsigned int *r = (unsigned int *) - ctx->si_regs.u_regs[14]; - -#define ADD_STRING(str) \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr -#define ADD_MEM(str, len) \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr - - /* Generate strings of register contents. */ - hexvalue (ctx->si_regs.psr, regs[0], 8); - hexvalue (ctx->si_regs.pc, regs[1], 8); - hexvalue (ctx->si_regs.npc, regs[2], 8); - hexvalue (ctx->si_regs.y, regs[3], 8); - for (i = 1; i <= 15; i++) - hexvalue (ctx->si_regs.u_regs[i], regs[3+i], 8); - for (i = 0; i <= 15; i++) - hexvalue (r[i], regs[19+i], 8); - hexvalue (ctx->si_mask, regs[35], 8); - - /* Generate the output. */ - ADD_STRING ("Register dump:\n\n PSR: "); - ADD_MEM (regs[0], 8); - ADD_STRING (" PC: "); - ADD_MEM (regs[1], 8); - ADD_STRING (" NPC: "); - ADD_MEM (regs[2], 8); - ADD_STRING (" Y: "); - ADD_MEM (regs[3], 8); - ADD_STRING ("\n g0: 00000000 g1: "); - ADD_MEM (regs[4], 8); - ADD_STRING (" g2: "); - ADD_MEM (regs[5], 8); - ADD_STRING (" g3: "); - ADD_MEM (regs[6], 8); - ADD_STRING ("\n g4: "); - ADD_MEM (regs[7], 8); - ADD_STRING (" g5: "); - ADD_MEM (regs[8], 8); - ADD_STRING (" g6: "); - ADD_MEM (regs[9], 8); - ADD_STRING (" g7: "); - ADD_MEM (regs[10], 8); - ADD_STRING ("\n o0: "); - ADD_MEM (regs[11], 8); - ADD_STRING (" o1: "); - ADD_MEM (regs[12], 8); - ADD_STRING (" o2: "); - ADD_MEM (regs[13], 8); - ADD_STRING (" o3: "); - ADD_MEM (regs[14], 8); - ADD_STRING ("\n o4: "); - ADD_MEM (regs[15], 8); - ADD_STRING (" o5: "); - ADD_MEM (regs[16], 8); - ADD_STRING (" sp: "); - ADD_MEM (regs[17], 8); - ADD_STRING (" o7: "); - ADD_MEM (regs[18], 8); - ADD_STRING ("\n l0: "); - ADD_MEM (regs[19], 8); - ADD_STRING (" l1: "); - ADD_MEM (regs[20], 8); - ADD_STRING (" l2: "); - ADD_MEM (regs[21], 8); - ADD_STRING (" l3: "); - ADD_MEM (regs[22], 8); - ADD_STRING ("\n l4: "); - ADD_MEM (regs[23], 8); - ADD_STRING (" l5: "); - ADD_MEM (regs[24], 8); - ADD_STRING (" l6: "); - ADD_MEM (regs[25], 8); - ADD_STRING (" l7: "); - ADD_MEM (regs[26], 8); - ADD_STRING ("\n i0: "); - ADD_MEM (regs[27], 8); - ADD_STRING (" i1: "); - ADD_MEM (regs[28], 8); - ADD_STRING (" i2: "); - ADD_MEM (regs[29], 8); - ADD_STRING (" i3: "); - ADD_MEM (regs[30], 8); - ADD_STRING ("\n i4: "); - ADD_MEM (regs[31], 8); - ADD_STRING (" i5: "); - ADD_MEM (regs[32], 8); - ADD_STRING (" fp: "); - ADD_MEM (regs[33], 8); - ADD_STRING (" i7: "); - ADD_MEM (regs[34], 8); - ADD_STRING ("\n\n Old mask: "); - ADD_MEM (regs[35], 8); - - if ((ctx->si_regs.psr & 0xff000000) == 0xff000000) - { - struct __siginfo_sparc64_fpu *f; - - f = *(struct __siginfo_sparc64_fpu **) (ctx + 1); - if (f != NULL) - { - for (i = 0; i < 64; i++) - hexvalue (f->si_float_regs[i], fregs[i], 8); - hexvalue (f->si_xfsr, fregs[64], 8); - hexvalue (f->si_fsr, fregs[65], 8); - hexvalue (f->si_gsr, fregs[66], 2); - hexvalue (f->si_fprs, fregs[67], 1); - ADD_STRING (" XFSR: "); - ADD_MEM (fregs[64], 8); - ADD_MEM (fregs[65], 8); - ADD_STRING (" GSR: "); - ADD_MEM (fregs[66], 2); - ADD_STRING (" FPRS: "); - ADD_MEM (fregs[67], 1); - ADD_STRING ("\n f0: "); - ADD_MEM (fregs[0], 16); - ADD_STRING (" f2: "); - ADD_MEM (fregs[2], 16); - ADD_STRING (" f4: "); - ADD_MEM (fregs[4], 16); - ADD_STRING ("\n f6: "); - ADD_MEM (fregs[6], 16); - ADD_STRING (" f8: "); - ADD_MEM (fregs[8], 16); - ADD_STRING (" f10: "); - ADD_MEM (fregs[10], 16); - ADD_STRING ("\n f12: "); - ADD_MEM (fregs[12], 16); - ADD_STRING (" f14: "); - ADD_MEM (fregs[14], 16); - ADD_STRING (" f16: "); - ADD_MEM (fregs[16], 16); - ADD_STRING ("\n f18: "); - ADD_MEM (fregs[18], 16); - ADD_STRING (" f20: "); - ADD_MEM (fregs[20], 16); - ADD_STRING (" f22: "); - ADD_MEM (fregs[22], 16); - ADD_STRING ("\n f24: "); - ADD_MEM (fregs[24], 16); - ADD_STRING (" f26: "); - ADD_MEM (fregs[26], 16); - ADD_STRING (" f28: "); - ADD_MEM (fregs[28], 16); - ADD_STRING ("\n f30: "); - ADD_MEM (fregs[30], 16); - ADD_STRING (" f32: "); - ADD_MEM (fregs[32], 16); - ADD_STRING (" f34: "); - ADD_MEM (fregs[34], 16); - ADD_STRING ("\n f36: "); - ADD_MEM (fregs[36], 16); - ADD_STRING (" f38: "); - ADD_MEM (fregs[38], 16); - ADD_STRING (" f40: "); - ADD_MEM (fregs[40], 16); - ADD_STRING ("\n f42: "); - ADD_MEM (fregs[42], 16); - ADD_STRING (" f44: "); - ADD_MEM (fregs[44], 16); - ADD_STRING (" f46: "); - ADD_MEM (fregs[46], 16); - ADD_STRING ("\n f48: "); - ADD_MEM (fregs[48], 16); - ADD_STRING (" f50: "); - ADD_MEM (fregs[50], 16); - ADD_STRING (" f52: "); - ADD_MEM (fregs[52], 16); - ADD_STRING ("\n f54: "); - ADD_MEM (fregs[54], 16); - ADD_STRING (" f56: "); - ADD_MEM (fregs[56], 16); - ADD_STRING (" f58: "); - ADD_MEM (fregs[58], 16); - ADD_STRING ("\n f60: "); - ADD_MEM (fregs[60], 16); - ADD_STRING (" f62: "); - ADD_MEM (fregs[62], 16); - } - } - else - { - struct __siginfo_sparc32_fpu *f; - - f = *(struct __siginfo_sparc32_fpu **) (ctx + 1); - if (f != NULL) - { - for (i = 0; i < 32; i++) - hexvalue (f->si_float_regs[i], fregs[i], 8); - hexvalue (f->si_fsr, fregs[64], 8); - hexvalue (f->si_fpq, fregs[65], 8); - ADD_STRING (" FSR: "); - ADD_MEM (fregs[64], 8); - ADD_STRING (" FPQ: "); - ADD_MEM (fregs[65], 8); - ADD_STRING ("\n f0: "); - ADD_MEM (fregs[0], 16); - ADD_STRING (" f2: "); - ADD_MEM (fregs[2], 16); - ADD_STRING (" f4: "); - ADD_MEM (fregs[4], 16); - ADD_STRING ("\n f6: "); - ADD_MEM (fregs[6], 16); - ADD_STRING (" f8: "); - ADD_MEM (fregs[8], 16); - ADD_STRING (" f10: "); - ADD_MEM (fregs[10], 16); - ADD_STRING ("\n f12: "); - ADD_MEM (fregs[12], 16); - ADD_STRING (" f14: "); - ADD_MEM (fregs[14], 16); - ADD_STRING (" f16: "); - ADD_MEM (fregs[16], 16); - ADD_STRING ("\n f18: "); - ADD_MEM (fregs[18], 16); - ADD_STRING (" f20: "); - ADD_MEM (fregs[20], 16); - ADD_STRING (" f22: "); - ADD_MEM (fregs[22], 16); - ADD_STRING ("\n f24: "); - ADD_MEM (fregs[24], 16); - ADD_STRING (" f26: "); - ADD_MEM (fregs[26], 16); - ADD_STRING (" f28: "); - ADD_MEM (fregs[28], 16); - ADD_STRING ("\n f30: "); - ADD_MEM (fregs[30], 16); - } - } - - ADD_STRING ("\n"); - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, ctx) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/scandir64.c b/sysdeps/unix/sysv/linux/sparc/sparc32/scandir64.c deleted file mode 100644 index 506fd8877c..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/scandir64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S b/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S deleted file mode 100644 index 1a5f2de823..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S +++ /dev/null @@ -1,118 +0,0 @@ -/* Install given context. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "ucontext_i.h" - - -/* int __setcontext (const ucontext_t *ucp) - - Restores the machine context in UCP and thereby resumes execution - in that context. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to restore anything - other than the PRESERVED state. */ - -ENTRY(__setcontext) - save %sp, -112, %sp - - mov SIG_SETMASK, %o0 - add %i0, UC_SIGMASK, %o1 - clr %o2 - mov 8, %o3 - mov __NR_rt_sigprocmask, %g1 - ta 0x10 - - /* This is a bit on the expensive side, and we could optimize - the unwind similar to how the 32-bit sparc longjmp code - does if performance of this routine really matters. */ - ta ST_FLUSH_WINDOWS - - ldub [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_EN], %g1 - cmp %g1, 0 - be 1f - nop - ld [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_FSR], %fsr - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D0], %f0 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D2], %f2 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D4], %f4 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D6], %f6 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D8], %f8 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D10], %f10 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D12], %f12 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D14], %f14 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D16], %f16 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D18], %f18 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D20], %f20 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D22], %f22 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D24], %f24 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D26], %f26 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D28], %f28 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D30], %f30 -1: - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_Y], %g1 - wr %g1, 0x0, %y - - /* We specifically do not restore %g1 since we need it here as - a temporary. */ - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G2], %g2 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G3], %g3 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G4], %g4 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G5], %g5 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G6], %g6 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G7], %g7 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O1], %i1 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O2], %i2 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O3], %i3 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O4], %i4 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O5], %i5 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O6], %i6 - restore - ld [%o0 + UC_MCONTEXT + MC_GREGS + GREG_O7], %o7 - ld [%o0 + UC_MCONTEXT + MC_GREGS + GREG_PC], %g1 - jmpl %g1, %g0 - ld [%o0 + UC_MCONTEXT + MC_GREGS + GREG_O0], %o0 -END(__setcontext) - -weak_alias (__setcontext, setcontext) - -/* This is the helper code which gets called if a function which is - registered with 'makecontext' returns. In this case we have to - install the context listed in the uc_link element of the context - 'makecontext' manipulated at the time of the 'makecontext' call. - If the pointer is NULL the process must terminate. */ - -ENTRY(__start_context) - ld [%sp + (16 * 4)], %g1 - cmp %g1, 0 - be,a 1f - clr %o0 - call __setcontext - mov %g1, %o0 - /* If this returns (which can happen if the syscall fails) we'll - exit the program with the return error value (-1). */ -1: call HIDDEN_JUMPTARGET(exit) - nop - /* The 'exit' call should never return. In case it does cause - the process to terminate. */ - unimp -END(__start_context) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/shlib-versions b/sysdeps/unix/sysv/linux/sparc/sparc32/shlib-versions deleted file mode 100644 index ca5d15b1df..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/shlib-versions +++ /dev/null @@ -1 +0,0 @@ -ld=ld-linux.so.2 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c b/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c deleted file mode 100644 index 295bfb2d15..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c +++ /dev/null @@ -1,88 +0,0 @@ -/* POSIX.1 sigaction call for Linux/SPARC. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Miguel de Icaza , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -static void __rt_sigreturn_stub (void); -static void __sigreturn_stub (void); - -int -__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) -{ - struct kernel_sigaction kact, koact; - unsigned long stub = 0; - int ret; - - if (act) - { - kact.k_sa_handler = act->sa_handler; - memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t)); - if (((kact.sa_flags = act->sa_flags) & SA_SIGINFO) != 0) - stub = (unsigned long) &__rt_sigreturn_stub; - else - stub = (unsigned long) &__sigreturn_stub; - stub -= 8; - kact.sa_restorer = NULL; - } - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - ret = INLINE_SYSCALL (rt_sigaction, 5, sig, act ? &kact : 0, - oact ? &koact : 0, stub, _NSIG / 8); - - if (oact && ret >= 0) - { - oact->sa_handler = koact.k_sa_handler; - memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t)); - oact->sa_flags = koact.sa_flags; - oact->sa_restorer = koact.sa_restorer; - } - return ret; -} -libc_hidden_def (__libc_sigaction) - -#include - - -static -inhibit_stack_protector -void -__rt_sigreturn_stub (void) -{ - __asm__ ("mov %0, %%g1\n\t" - "ta 0x10\n\t" - : /* no outputs */ - : "i" (__NR_rt_sigreturn)); -} - -static -inhibit_stack_protector -void -__sigreturn_stub (void) -{ - __asm__ ("mov %0, %%g1\n\t" - "ta 0x10\n\t" - : /* no outputs */ - : "i" (__NR_sigreturn)); -} diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h deleted file mode 100644 index 99cf6ab7f4..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define SIGCONTEXT struct sigcontext * -#define SIGCONTEXT_EXTRA_ARGS -#define GET_PC(__ctx) ((void *) ((__ctx)->si_regs.pc)) -#define FIRST_FRAME_POINTER \ - ({ void *ret; \ - asm volatile ("ta 3; add %%fp, 56, %0" : "=r" (ret)); ret; }) -#define ADVANCE_STACK_FRAME(__next) \ - ((void *) (((unsigned *)(__next))+14)) - -#define GET_STACK(__ctx) ((void *) (__ctx)->si_regs.u_regs[14]) -#define GET_FRAME(__ctx) ADVANCE_STACK_FRAME (GET_STACK(__ctx)) -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/fpu/Implies b/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/fpu/Implies deleted file mode 100644 index 70568c5d17..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/fpu/Implies +++ /dev/null @@ -1,3 +0,0 @@ -# We must list this here to move it ahead of the ldbl-opt code. -sparc/sparc32/sparcv9/fpu -sparc/sparc32/fpu diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/fpu/multiarch/Implies b/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/fpu/multiarch/Implies deleted file mode 100644 index a380d8a739..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/fpu/multiarch/Implies +++ /dev/null @@ -1,4 +0,0 @@ -# We must list this here to move it ahead of the ldbl-opt code. -sparc/sparc32/sparcv9/fpu/multiarch -sparc/sparc32/sparcv9/fpu -sparc/sparc32/fpu diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/get_clockfreq.c b/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/get_clockfreq.c deleted file mode 100644 index 4191085d1f..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/get_clockfreq.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/swapcontext.S b/sysdeps/unix/sysv/linux/sparc/sparc32/swapcontext.S deleted file mode 100644 index 7ef57e989b..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/swapcontext.S +++ /dev/null @@ -1,118 +0,0 @@ -/* Save current context and install the given one. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller , 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include "ucontext_i.h" - - -/* int __swapcontext (ucontext_t *oucp, const ucontext_t *ucp); - - Saves the machine context in oucp such that when it is activated, - it appears as if __swapcontext() returned again, restores the - machine context in ucp and thereby resumes execution in that - context. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to save anything - other than the PRESERVED state. */ - -ENTRY(__swapcontext) - save %sp, -112, %sp - ta ST_FLUSH_WINDOWS - st %g0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_PSR] - add %i7, 8, %o0 - st %o0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_PC] - add %o0, 4, %o0 - st %o0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_NPC] - rd %y, %o1 - st %o1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_Y] - st %g1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G1] - st %g2, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G2] - st %g3, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G3] - st %g4, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G4] - st %g5, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G5] - st %g6, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G6] - st %g7, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G7] - st %g0, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O0] - st %i1, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O1] - st %i2, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O2] - st %i3, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O3] - st %i4, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O4] - st %i5, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O5] - st %i6, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O6] - st %i7, [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O7] - st %g0, [%i0 + UC_MCONTEXT + MC_GWINS] - stb %g0, [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_EN] - st %g0, [%i0 + UC_MCONTEXT + MC_XRS + XRS_ID] - st %g0, [%i0 + UC_MCONTEXT + MC_XRS + XRS_PTR] - - mov SIG_SETMASK, %o0 - add %i1, UC_SIGMASK, %o1 - add %i0, UC_SIGMASK, %o2 - mov 8, %o3 - mov __NR_rt_sigprocmask, %g1 - ta 0x10 - - mov %i1, %i0 - ldub [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_EN], %g1 - cmp %g1, 0 - be 1f - nop - ld [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_FSR], %fsr - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D0], %f0 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D2], %f2 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D4], %f4 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D6], %f6 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D8], %f8 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D10], %f10 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D12], %f12 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D14], %f14 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D16], %f16 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D18], %f18 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D20], %f20 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D22], %f22 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D24], %f24 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D26], %f26 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D28], %f28 - ldd [%i0 + UC_MCONTEXT + MC_FPREGS + FPU_D30], %f30 -1: - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_Y], %g1 - wr %g1, 0x0, %y - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G2], %g2 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G3], %g3 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G4], %g4 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G5], %g5 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G6], %g6 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_G7], %g7 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O1], %i1 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O2], %i2 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O3], %i3 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O4], %i4 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O5], %i5 - ld [%i0 + UC_MCONTEXT + MC_GREGS + GREG_O6], %i6 - restore - ld [%o0 + UC_MCONTEXT + MC_GREGS + GREG_O7], %o7 - ld [%o0 + UC_MCONTEXT + MC_GREGS + GREG_PC], %g1 - jmpl %g1, %g0 - ld [%o0 + UC_MCONTEXT + MC_GREGS + GREG_O0], %o0 -END(__swapcontext) - -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/syscall.S b/sysdeps/unix/sysv/linux/sparc/sparc32/syscall.S deleted file mode 100644 index 5a2ea17d8e..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/syscall.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text - .globl __syscall_error -ENTRY(syscall) - mov %o0, %g1 - mov %o1, %o0 - mov %o2, %o1 - mov %o3, %o2 - mov %o4, %o3 - mov %o5, %o4 - ld [%sp + 92], %o5 - ta 0x10 - bcc 1f - mov %o7, %g1 - call __syscall_error - mov %g1, %o7 -1: retl - nop -END(syscall) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list deleted file mode 100644 index 0b6095ffab..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list +++ /dev/null @@ -1,19 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -chown - chown32 i:sii __chown chown -lchown - lchown32 i:sii __lchown lchown -fchown - fchown32 i:iii __fchown fchown - -getegid - getegid32 Ei: __getegid getegid -geteuid - geteuid32 Ei: __geteuid geteuid -getgid - getgid32 Ei: __getgid getgid -getuid - getuid32 Ei: __getuid getuid -getresuid - getresuid32 3 getresuid -getresgid - getresgid32 3 getresgid -getgroups - getgroups32 i:ip __getgroups getgroups - -setfsgid - setfsgid32 Ei:i setfsgid -setfsuid - setfsuid32 Ei:i setfsuid - -prlimit64 EXTRA prlimit64 i:iipp prlimit64 -fanotify_mark EXTRA fanotify_mark i:iiiiis fanotify_mark diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h deleted file mode 100644 index c513212f1e..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ - .globl __syscall_error; \ -ENTRY(name) \ - ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\ - cmp %g1, 0; \ - bne 1f; \ -.type __##syscall_name##_nocancel,@function; \ -.globl __##syscall_name##_nocancel; \ -__##syscall_name##_nocancel: \ - mov SYS_ify(syscall_name), %g1; \ - ta 0x10; \ - bcc 8f; \ - mov %o7, %g1; \ - call __syscall_error; \ - mov %g1, %o7; \ -8: jmpl %o7 + 8, %g0; \ - nop; \ -.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\ -1: save %sp, -96, %sp; \ - cfi_def_cfa_register(%fp); \ - cfi_window_save; \ - cfi_register(%o7, %i7); \ - CENABLE; \ - nop; \ - mov %o0, %l0; \ - COPY_ARGS_##args \ - mov SYS_ify(syscall_name), %g1; \ - ta 0x10; \ - bcc 1f; \ - mov %o0, %l1; \ - CDISABLE; \ - mov %l0, %o0; \ - call __syscall_error; \ - mov %l1, %o0; \ - b 2f; \ - mov -1, %l1; \ -1: CDISABLE; \ - mov %l0, %o0; \ -2: jmpl %i7 + 8, %g0; \ - restore %g0, %l1, %o0; - - -# if IS_IN (libpthread) -# define CENABLE call __pthread_enable_asynccancel -# define CDISABLE call __pthread_disable_asynccancel -# elif IS_IN (libc) -# define CENABLE call __libc_enable_asynccancel -# define CDISABLE call __libc_disable_asynccancel -# elif IS_IN (librt) -# define CENABLE call __librt_enable_asynccancel -# define CDISABLE call __librt_disable_asynccancel -# else -# error Unsupported library -# endif - -#define COPY_ARGS_0 /* Nothing */ -#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0; -#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1; -#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2; -#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3; -#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4; -#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5; - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1 -# endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h deleted file mode 100644 index 30aab691e7..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h +++ /dev/null @@ -1,147 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Miguel de Icaza , January 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_SPARC32_SYSDEP_H -#define _LINUX_SPARC32_SYSDEP_H 1 - -#include - -#if IS_IN (rtld) -# include /* Defines RTLD_PRIVATE_ERRNO. */ -#endif -#include - -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -#ifdef __ASSEMBLER__ - -#define LOADSYSCALL(x) mov __NR_##x, %g1 - -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - .text; \ -ENTRY(name); \ - LOADSYSCALL(syscall_name); \ - ta 0x10; \ - bcc 1f; \ - nop; \ - SYSCALL_ERROR_HANDLER \ -1: - -#undef PSEUDO_NOERRNO -#define PSEUDO_NOERRNO(name, syscall_name, args)\ - .text; \ -ENTRY(name); \ - LOADSYSCALL(syscall_name); \ - ta 0x10; - -#undef PSEUDO_ERRVAL -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .text; \ -ENTRY(name); \ - LOADSYSCALL(syscall_name); \ - ta 0x10; - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - END(name) - -#ifndef PIC -# define SYSCALL_ERROR_HANDLER \ - mov %o7, %g1; \ - call __syscall_error; \ - mov %g1, %o7; -#else -# if RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_HANDLER \ -0: SETUP_PIC_REG_LEAF(o2,g1) \ - sethi %gdop_hix22(rtld_errno), %g1; \ - xor %g1, %gdop_lox10(rtld_errno), %g1;\ - ld [%o2 + %g1], %g1, %gdop(rtld_errno); \ - st %o0, [%g1]; \ - jmp %o7 + 8; \ - mov -1, %o0; -# elif defined _LIBC_REENTRANT - -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif -# define SYSCALL_ERROR_HANDLER \ -0: SETUP_PIC_REG_LEAF(o2,g1) \ - sethi %tie_hi22(SYSCALL_ERROR_ERRNO), %g1; \ - add %g1, %tie_lo10(SYSCALL_ERROR_ERRNO), %g1; \ - ld [%o2 + %g1], %g1, %tie_ld(SYSCALL_ERROR_ERRNO); \ - st %o0, [%g7 + %g1]; \ - jmp %o7 + 8; \ - mov -1, %o0; -# else -# define SYSCALL_ERROR_HANDLER \ -0: SETUP_PIC_REG_LEAF(o2,g1) \ - sethi %gdop_hix22(errno), %g1;\ - xor %g1, %gdop_lox10(errno), %g1;\ - ld [%o2 + %g1], %g1, %gdop(errno);\ - st %o0, [%g1]; \ - jmp %o7 + 8; \ - mov -1, %o0; -# endif /* _LIBC_REENTRANT */ -#endif /* PIC */ - - -#else /* __ASSEMBLER__ */ - -#define __SYSCALL_STRING \ - "ta 0x10;" \ - "bcc 1f;" \ - " mov 0, %%g1;" \ - "sub %%g0, %%o0, %%o0;" \ - "mov 1, %%g1;" \ - "1:" - -#define __SYSCALL_CLOBBERS \ - "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ - "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \ - "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \ - "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \ - "cc", "memory" - -#endif /* __ASSEMBLER__ */ - -/* Pointer mangling support. */ -#if IS_IN (rtld) -/* We cannot use the thread descriptor because in ld.so we use setjmp - earlier than the descriptor is initialized. */ -#else -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(dreg, reg, tmpreg) \ - ld [%g7 + POINTER_GUARD], tmpreg; \ - xor reg, tmpreg, dreg -# define PTR_DEMANGLE(dreg, reg, tmpreg) PTR_MANGLE (dreg, reg, tmpreg) -# define PTR_MANGLE2(dreg, reg, tmpreg) \ - xor reg, tmpreg, dreg -# define PTR_DEMANGLE2(dreg, reg, tmpreg) PTR_MANGLE2 (dreg, reg, tmpreg) -# else -# define PTR_MANGLE(var) \ - (var) = (__typeof (var)) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#endif - -#endif /* linux/sparc/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym b/sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym deleted file mode 100644 index 544030ce8b..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym +++ /dev/null @@ -1,61 +0,0 @@ -#include -#include -#include - --- - -SIG_BLOCK -SIG_SETMASK - -UC_FLAGS offsetof (ucontext_t, uc_flags) -UC_LINK offsetof (ucontext_t, uc_link) -UC_SIGMASK offsetof (ucontext_t, uc_sigmask) -UC_STACK offsetof (ucontext_t, uc_stack) -UC_MCONTEXT offsetof (ucontext_t, uc_mcontext) -MC_GREGS offsetof (mcontext_t, gregs) -MC_GWINS offsetof (mcontext_t, gwins) -MC_FPREGS offsetof (mcontext_t, fpregs) -MC_XRS offsetof (mcontext_t, xrs) -MC_FILLER offsetof (mcontext_t, filler) -GREG_PSR (REG_PSR * sizeof(greg_t)) -GREG_PC (REG_PC * sizeof(greg_t)) -GREG_NPC (REG_nPC * sizeof(greg_t)) -GREG_Y (REG_Y * sizeof(greg_t)) -GREG_G1 (REG_G1 * sizeof(greg_t)) -GREG_G2 (REG_G2 * sizeof(greg_t)) -GREG_G3 (REG_G3 * sizeof(greg_t)) -GREG_G4 (REG_G4 * sizeof(greg_t)) -GREG_G5 (REG_G5 * sizeof(greg_t)) -GREG_G6 (REG_G6 * sizeof(greg_t)) -GREG_G7 (REG_G7 * sizeof(greg_t)) -GREG_O0 (REG_O0 * sizeof(greg_t)) -GREG_O1 (REG_O1 * sizeof(greg_t)) -GREG_O2 (REG_O2 * sizeof(greg_t)) -GREG_O3 (REG_O3 * sizeof(greg_t)) -GREG_O4 (REG_O4 * sizeof(greg_t)) -GREG_O5 (REG_O5 * sizeof(greg_t)) -GREG_O6 (REG_O6 * sizeof(greg_t)) -GREG_O7 (REG_O7 * sizeof(greg_t)) -FPU_D0 offsetof (fpregset_t, fpu_fr.fpu_dregs[0]) -FPU_D2 offsetof (fpregset_t, fpu_fr.fpu_dregs[1]) -FPU_D4 offsetof (fpregset_t, fpu_fr.fpu_dregs[2]) -FPU_D6 offsetof (fpregset_t, fpu_fr.fpu_dregs[3]) -FPU_D8 offsetof (fpregset_t, fpu_fr.fpu_dregs[4]) -FPU_D10 offsetof (fpregset_t, fpu_fr.fpu_dregs[5]) -FPU_D12 offsetof (fpregset_t, fpu_fr.fpu_dregs[6]) -FPU_D14 offsetof (fpregset_t, fpu_fr.fpu_dregs[7]) -FPU_D16 offsetof (fpregset_t, fpu_fr.fpu_dregs[8]) -FPU_D18 offsetof (fpregset_t, fpu_fr.fpu_dregs[9]) -FPU_D20 offsetof (fpregset_t, fpu_fr.fpu_dregs[10]) -FPU_D22 offsetof (fpregset_t, fpu_fr.fpu_dregs[11]) -FPU_D24 offsetof (fpregset_t, fpu_fr.fpu_dregs[12]) -FPU_D26 offsetof (fpregset_t, fpu_fr.fpu_dregs[13]) -FPU_D28 offsetof (fpregset_t, fpu_fr.fpu_dregs[14]) -FPU_D30 offsetof (fpregset_t, fpu_fr.fpu_dregs[15]) -FPU_Q offsetof (fpregset_t, fpu_q) -FPU_FSR offsetof (fpregset_t, fpu_fsr) -FPU_QCNT offsetof (fpregset_t, fpu_qcnt) -FPU_Q_ENTRY_SZ offsetof (fpregset_t, fpu_q_entrysize) -FPU_EN offsetof (fpregset_t, fpu_en) -XRS_ID offsetof (xrs_t, xrs_id) -XRS_PTR offsetof (xrs_t, xrs_ptr) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S b/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S deleted file mode 100644 index fb43b1766f..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2004. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text - .globl __syscall_error -ENTRY(__libc_vfork) - LOADSYSCALL(vfork) - ta 0x10 - bcc 2f - mov %o7, %g1 - call __syscall_error - mov %g1, %o7 -2: sub %o1, 1, %o1 - andcc %o0, %o1, %o0 -1: retl - nop -END(__libc_vfork) - -#if IS_IN (libc) -weak_alias (__libc_vfork, vfork) -strong_alias (__libc_vfork, __vfork) -libc_hidden_def (__vfork) -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/xstat.c b/sysdeps/unix/sysv/linux/sparc/sparc32/xstat.c deleted file mode 100644 index e9869f5508..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/xstat.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/Implies b/sysdeps/unix/sysv/linux/sparc/sparc64/Implies deleted file mode 100644 index 8d91c80097..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/Implies +++ /dev/null @@ -1 +0,0 @@ -unix/sysv/linux/wordsize-64 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile b/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile deleted file mode 100644 index 715af3df7b..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# See Makeconfig regarding the use of default-abi. -default-abi := 64 - -sysdep-CFLAGS += -fcall-used-g6 -LD += -melf64_sparc - -ifeq ($(subdir),stdlib) -sysdep_routines += __start_context -endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/Versions b/sysdeps/unix/sysv/linux/sparc/sparc64/Versions deleted file mode 100644 index fbea1bb2ef..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/Versions +++ /dev/null @@ -1,19 +0,0 @@ -libc { - GLIBC_2.0 { - # Exception handling support functions from libgcc - __register_frame; __register_frame_table; __deregister_frame; - __frame_state_for; __register_frame_info_table; - } - GLIBC_2.2.2 { - # w* - wordexp; - } -} - -librt { - GLIBC_2.3.3 { - # Changed timer_t. - timer_create; timer_delete; timer_getoverrun; timer_gettime; - timer_settime; - } -} diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S deleted file mode 100644 index aff42306c9..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* longjmp is implemented in terms of the setcontext trap on Linux/Sparc64. */ - -#include - -/* Offsets into the jmp_buf structure. */ - -#define O_mask_was_saved 512 -#define O_gregs 32 -#define O_g1 (O_gregs + 4*8) -#define O_sp (O_gregs + 17*8) - -.section .rodata.str1.1,"aMS",@progbits,1 - .type longjmp_msg,@object -longjmp_msg: - .string "longjmp causes uninitialized stack frame" - .size longjmp_msg, .-longjmp_msg - - .text -ENTRY (____longjmp_chk) - ldx [%o0 + O_sp], %o2 - cmp %sp, %o2 - bleu,pt %xcc, .Lok - nop - - save %sp, -208, %sp - cfi_remember_state - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) - add %fp, 2023, %o1 - clr %o0 - LOADSYSCALL(sigaltstack) - ta 0x6d - bcs,pn %xcc, .Lok2 - lduw [%fp + 2031], %l2 - andcc %l2, 0x1, %g0 - be,pn %xcc, .Lfail - ldx [%fp + 2023], %l0 - ldx [%fp + 2039], %l1 - sub %l0, STACK_BIAS, %l0 - add %l0, %l1, %l0 - sub %l0, %i2, %l0 - cmp %l0, %l1 - bgeu,pt %xcc, .Lok2 - nop - -.Lfail: -#ifndef PIC - sethi %hi(longjmp_msg), %o0 - or %o0, %lo(longjmp_msg), %o0 -#else - SETUP_PIC_REG(l7) - sethi %gdop_hix22(longjmp_msg), %o0 - xor %o0, %gdop_lox10(longjmp_msg), %o0 - ldx [%l7 + %o0], %o0, %gdop(longjmp_msg) -#endif - call HIDDEN_JUMPTARGET(__fortify_fail) - nop - -.Lok2: restore - cfi_restore_state - -.Lok: - /* Modify the context with the value we want to return. */ - movre %o1, 1, %o1 - stx %o1, [%o0 + O_g1] - - /* Let setcontext know if we want to modify the current sigmask. */ - ld [%o0 + O_mask_was_saved], %o1 - - /* And bamf back to where we belong! */ - ta 0x6f -END(____longjmp_chk) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/__longjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/__longjmp.S deleted file mode 100644 index 3107179fdc..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/__longjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* There is no need for __longjmp what with setcontext. */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/__start_context.S b/sysdeps/unix/sysv/linux/sparc/sparc64/__start_context.S deleted file mode 100644 index 1e6fcaede0..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/__start_context.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text - -/* This is the helper code which gets called if a function which is - registered with 'makecontext' returns. In this case we have to - install the context listed in the uc_link element of the context - 'makecontext' manipulated at the time of the 'makecontext' call. - If the pointer is NULL the process must terminate. */ - -ENTRY(__start_context) - brz,pn %i0, 1f - mov 1, %o1 - call __setcontext - mov %i0, %o0 -1: call HIDDEN_JUMPTARGET(exit) - mov 0, %o0 - unimp 0 -END(__start_context) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S deleted file mode 100644 index 32fd3e75d1..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S +++ /dev/null @@ -1,105 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* __brk is a special syscall under Linux since it never returns an - error. Instead, the error condition is indicated by returning the old - break value (instead of the new, requested one). */ - -#include -#define _ERRNO_H -#include - -#ifdef PIC -.section .bss - .align 8 - .globl __curbrk -__curbrk: .skip 8 - .type __curbrk,@object - .size __curbrk,8 -#else -.common __curbrk, 8, 8 -#endif - - .text -ENTRY (__brk) - save %sp, -192, %sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) -#ifdef PIC - SETUP_PIC_REG(l7) -#endif - - LOADSYSCALL(brk) - mov %i0, %o0 - - ta 0x6d - - /* All the ways we can fail... */ - bcs,pn %xcc, .Lerr1 - nop - brz,pt %i0, .Lok - subcc %i0, %o0, %g0 - bne,pn %xcc, .Lerr0 - nop - - /* Update __curbrk and return cleanly. */ -.Lok: -#ifndef PIC - sethi %hi(__curbrk), %g1 - or %g1, %lo(__curbrk), %g1 -#else - sethi %gdop_hix22(__curbrk), %g1 - xor %g1, %gdop_lox10(__curbrk), %g1 - ldx [%l7 + %g1], %g1, %gdop(__curbrk) -#endif - stx %o0, [%g1] - mov %g0, %i0 - - /* Don't use "ret" cause the preprocessor will eat it. */ - jmpl %i7+8, %g0 - restore - - /* What a horrible way to die. */ -.Lerr0: set ENOMEM, %o0 -.Lerr1: -#ifndef _LIBC_REENTRANT -#ifndef PIC - sethi %hi(errno), %g1 - or %g1, %lo(errno), %g1 -#else - sethi %gdop_hix22(errno), %g1 - xor %g1, %gdop_lox10(errno), %g1 - ldx [%l7 + %g1], %g1, %gdop(errno) -#endif - st %o0, [%g1] -#else -#if IS_IN (libc) - call HIDDEN_JUMPTARGET(__errno_location) -#else - call __errno_location -#endif - mov %o0,%l1 - st %l1, [%o0] -#endif - sub %g0, 1, %i0 - jmpl %i7+8, %g0 - restore -END (__brk) - -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/bsd-_setjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/bsd-_setjmp.S deleted file mode 100644 index 4e6a2da560..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/bsd-_setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* _setjmp is in setjmp.S */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/bsd-setjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/bsd-setjmp.S deleted file mode 100644 index 1da848d2f1..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/bsd-setjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* setjmp is in setjmp.S */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/c++-types.data b/sysdeps/unix/sysv/linux/sparc/sparc64/c++-types.data deleted file mode 100644 index 5a04f4939a..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:l -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:m -fd_mask:l -fsblkcnt64_t:m -fsblkcnt_t:m -fsfilcnt64_t:m -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:m -ino_t:m -int16_t:s -int32_t:i -int64_t:l -int8_t:a -intptr_t:l -key_t:i -loff_t:l -mode_t:j -nlink_t:j -off64_t:l -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:l -register_t:l -rlim64_t:m -rlim_t:m -sigset_t:10__sigset_t -size_t:m -socklen_t:j -ssize_t:l -suseconds_t:i -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:m -u_int8_t:h -ulong:m -u_long:m -u_quad_t:m -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S deleted file mode 100644 index fc28539a59..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@tamu.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#include -#include -#include - -#define CLONE_VM 0x00000100 - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - pid_t *ptid, void *tls, pid_t *ctid); */ - - .register %g2,#scratch - .register %g3,#scratch - - .text - -ENTRY (__clone) - save %sp, -192, %sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) - - /* sanity check arguments */ - brz,pn %i0, 99f /* fn non-NULL? */ - mov %i0, %g2 - brz,pn %i1, 99f /* child_stack non-NULL? */ - mov %i2, %o0 /* clone flags */ - - /* The child_stack is the top of the stack, allocate one - whole stack frame from that as this is what the kernel - expects. Also, subtract STACK_BIAS. */ - sub %i1, 192 + 0x7ff, %o1 - mov %i3, %g3 - - mov %i4,%o2 /* PTID */ - mov %i5,%o3 /* TLS */ - ldx [%fp+0x7ff+176],%o4 /* CTID */ - - /* Do the system call */ - set __NR_clone, %g1 - ta 0x6d - bcs,pn %xcc, 98f - nop - brnz,pn %o1, __thread_start - nop - jmpl %i7 + 8, %g0 - restore %o0, %g0, %o0 -99: mov EINVAL, %o0 -98: call HIDDEN_JUMPTARGET(__errno_location) - mov %o0, %i0 - st %i0, [%o0] - jmpl %i7 + 8, %g0 - restore %g0,-1,%o0 -END(__clone) - - .type __thread_start,@function -__thread_start: - mov %g0, %fp /* terminate backtrace */ - call %g2 - mov %g3,%o0 - call HIDDEN_JUMPTARGET(_exit),0 - nop - - .size __thread_start, .-__thread_start - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/configure b/sysdeps/unix/sysv/linux/sparc/sparc64/configure deleted file mode 100644 index 8f88eff4a3..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/configure +++ /dev/null @@ -1,15 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/sparc/sparc64. - -test -n "$libc_cv_slibdir" || -case "$prefix" in -/usr | /usr/) - libc_cv_slibdir=/lib64 - libc_cv_rtlddir=/lib64 - if test "$libdir" = '${exec_prefix}/lib'; then - libdir='${exec_prefix}/lib64'; - # Locale data can be shared between 32-bit and 64-bit libraries. - libc_cv_complocaledir='${exec_prefix}/lib/locale' - fi - ;; -esac diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/configure.ac b/sysdeps/unix/sysv/linux/sparc/sparc64/configure.ac deleted file mode 100644 index 979bb8d923..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/configure.ac +++ /dev/null @@ -1,4 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/sparc/sparc64. - -LIBC_SLIBDIR_RTLDDIR([lib64], [lib64]) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/dl-brk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/dl-brk.S deleted file mode 100644 index eeb96544e3..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/dl-brk.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/dl-cache.h b/sysdeps/unix/sysv/linux/sparc/sparc64/dl-cache.h deleted file mode 100644 index 57c5769179..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/dl-cache.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define _DL_CACHE_DEFAULT_ID 0x103 - -#define _dl_cache_check_flags(flags) \ - ((flags) == _DL_CACHE_DEFAULT_ID) - -#include_next diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/dl-fxstatat64.c b/sysdeps/unix/sysv/linux/sparc/sparc64/dl-fxstatat64.c deleted file mode 100644 index 330b33f7c7..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/dl-fxstatat64.c +++ /dev/null @@ -1 +0,0 @@ -#include "fxstatat.c" diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c b/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c deleted file mode 100644 index e328ccbab0..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../i386/fxstat.c" diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/fxstatat.c b/sysdeps/unix/sysv/linux/sparc/sparc64/fxstatat.c deleted file mode 100644 index db08af8e0f..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/fxstatat.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../i386/fxstatat.c" diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c b/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c deleted file mode 100644 index a0349790dc..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c +++ /dev/null @@ -1,250 +0,0 @@ -/* Get frequency of the system processor. sparc64 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static hp_timing_t -__get_clockfreq_via_cpuinfo (void) -{ - hp_timing_t result; - int fd; - - result = 0; - - fd = __open ("/proc/cpuinfo", O_RDONLY); - if (fd != -1) - { - char buf[8192]; - ssize_t n; - - n = __read (fd, buf, sizeof buf); - if (n > 0) - { - char *mhz = memmem (buf, n, "Cpu0ClkTck", 7); - - if (mhz != NULL) - { - char *endp = buf + n; - - /* Search for the beginning of the string. */ - while (mhz < endp - && (*mhz < '0' || *mhz > '9') - && (*mhz < 'a' || *mhz > 'f') - && *mhz != '\n') - ++mhz; - - while (mhz < endp && *mhz != '\n') - { - if ((*mhz >= '0' && *mhz <= '9') || - (*mhz >= 'a' && *mhz <= 'f')) - { - result <<= 4; - if (*mhz >= '0' && *mhz <= '9') - result += *mhz - '0'; - else - result += (*mhz - 'a') + 10; - } - ++mhz; - } - } - } - - __close (fd); - } - - return result; -} - -static hp_timing_t -__get_clockfreq_via_proc_openprom (void) -{ - hp_timing_t result; - int obp_fd; - - result = 0; - - obp_fd = __open ("/proc/openprom", O_RDONLY); - if (obp_fd != -1) - { - unsigned long int buf[4096 / sizeof (unsigned long int)]; - struct dirent *dirp = (struct dirent *) buf; - ssize_t len; - - while ((len = __getdents (obp_fd, (char *) dirp, sizeof (buf))) > 0) - { - struct dirent *this_dirp = dirp; - - while (len > 0) - { - char node[strlen ("/proc/openprom/") - + _D_ALLOC_NAMLEN (this_dirp) - + strlen ("/clock-frequency")]; - char *prop; - int fd; - - /* Note that - strlen("/clock-frequency") > strlen("/device_type") - */ - __stpcpy (prop = __stpcpy (__stpcpy (node, "/proc/openprom/"), - this_dirp->d_name), - "/device_type"); - fd = __open (node, O_RDONLY); - if (fd != -1) - { - char type_string[128]; - int ret; - - ret = __read (fd, type_string, sizeof (type_string)); - if (ret > 0 && strncmp (type_string, "'cpu'", 5) == 0) - { - int clkfreq_fd; - - __stpcpy (prop, "/clock-frequency"); - clkfreq_fd = __open (node, O_RDONLY); - if (clkfreq_fd != -1) - { - if (__read (clkfreq_fd, type_string, - sizeof (type_string)) > 0) - result = (hp_timing_t) - strtoumax (type_string, NULL, 16); - __close (clkfreq_fd); - } - } - __close (fd); - } - - if (result != 0) - break; - - len -= this_dirp->d_reclen; - this_dirp = (struct dirent *) - ((char *) this_dirp + this_dirp->d_reclen); - } - if (result != 0) - break; - } - __close (obp_fd); - } - - return result; -} - -static void set_obp_int (struct openpromio *op, int val) -{ - char *cp = op->oprom_array; - int *ip = (int *) cp; - - *ip = val; -} - -static int get_obp_int (struct openpromio *op) -{ - char *cp = op->oprom_array; - int *ip = (int *) cp; - - return *ip; -} - -static hp_timing_t -__get_clockfreq_via_dev_openprom (void) -{ - hp_timing_t result; - int obp_dev_fd; - - result = 0; - - obp_dev_fd = __open ("/dev/openprom", O_RDONLY); - if (obp_dev_fd != -1) - { - char obp_buf[8192]; - struct openpromio *obp_cmd = (struct openpromio *)obp_buf; - int ret; - - obp_cmd->oprom_size = - sizeof (obp_buf) - sizeof (unsigned int); - set_obp_int (obp_cmd, 0); - ret = __ioctl (obp_dev_fd, OPROMCHILD, (char *) obp_cmd); - if (ret == 0) - { - int cur_node = get_obp_int (obp_cmd); - - while (cur_node != 0 && cur_node != -1) - { - obp_cmd->oprom_size = sizeof (obp_buf) - sizeof (unsigned int); - strcpy (obp_cmd->oprom_array, "device_type"); - ret = __ioctl (obp_dev_fd, OPROMGETPROP, (char *) obp_cmd); - if (ret == 0 - && strncmp (obp_cmd->oprom_array, "cpu", 3) == 0) - { - obp_cmd->oprom_size = (sizeof (obp_buf) - - sizeof (unsigned int)); - strcpy (obp_cmd->oprom_array, "clock-frequency"); - ret = __ioctl (obp_dev_fd, OPROMGETPROP, (char *) obp_cmd); - if (ret == 0) - result = (hp_timing_t) get_obp_int (obp_cmd); - } - obp_cmd->oprom_size = sizeof (obp_buf) - sizeof (unsigned int); - set_obp_int (obp_cmd, cur_node); - ret = __ioctl (obp_dev_fd, OPROMNEXT, (char *) obp_cmd); - if (ret < 0) - break; - cur_node = get_obp_int (obp_cmd); - } - } - } - - return result; -} - -hp_timing_t -__get_clockfreq (void) -{ - static hp_timing_t result; - - /* If this function was called before, we know the result. */ - if (result != 0) - return result; - - /* We first read the information from the /proc/cpuinfo file. - It contains at least one line like - Cpu0ClkTick : 000000002cb41780 - We search for this line and convert the number in an integer. */ - result = __get_clockfreq_via_cpuinfo (); - if (result != 0) - return result; - - /* If that did not work, try to find an OpenPROM node - with device_type equal to 'cpu' using /dev/openprom - and fetch the clock-frequency property from there. */ - result = __get_clockfreq_via_dev_openprom (); - if (result != 0) - return result; - - /* Finally, try the same lookup as above but using /proc/openprom. */ - result = __get_clockfreq_via_proc_openprom (); - - return result; -} diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S b/sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S deleted file mode 100644 index 9cdaff9545..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@tamu.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "ucontext_i.h" - -/* int getcontext(ucontext_t *); */ - -ENTRY(__getcontext) - - ldx [%o0 + UC_LINK], %o1 /* Preserve uc_link field, the - trap clears it. */ - ta 0x6e -1: - ldx [%o0 + UC_M_PC], %o2 - ldx [%o0 + UC_M_NPC], %o3 - ldx [%o0 + __UC_SIGMASK], %o4 - stx %o1, [%o0 + UC_LINK] - add %o2, 2f - 1b, %o2 - stx %o2, [%o0 + UC_M_PC] - add %o3, 2f - 1b, %o3 - stx %o3, [%o0 + UC_M_NPC] -#if SIGMASK_WORDS == 16 - stx %o4, [%o0 + UC_SIGMASK] - stx %g0, [%o0 + UC_SIGMASK + 8] - stx %g0, [%o0 + UC_SIGMASK + 16] - stx %g0, [%o0 + UC_SIGMASK + 24] - stx %g0, [%o0 + UC_SIGMASK + 32] - stx %g0, [%o0 + UC_SIGMASK + 40] - stx %g0, [%o0 + UC_SIGMASK + 48] - stx %g0, [%o0 + UC_SIGMASK + 56] - stx %g0, [%o0 + UC_SIGMASK + 64] - stx %g0, [%o0 + UC_SIGMASK + 72] - stx %g0, [%o0 + UC_SIGMASK + 80] - stx %g0, [%o0 + UC_SIGMASK + 88] - stx %g0, [%o0 + UC_SIGMASK + 96] - stx %g0, [%o0 + UC_SIGMASK + 104] - stx %g0, [%o0 + UC_SIGMASK + 112] - stx %g0, [%o0 + UC_SIGMASK + 120] -#else -# error Adjust __getcontext -#endif -2: - retl - clr %o0 - -END(__getcontext) - -weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h b/sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h deleted file mode 100644 index c588c41908..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Old SysV permission definition for Linux. x86_64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include /* For __key_t */ - -#define __IPC_64 0x0 - -struct __old_ipc_perm -{ - __key_t __key; /* Key. */ - unsigned int uid; /* Owner's user ID. */ - unsigned int gid; /* Owner's group ID. */ - unsigned int cuid; /* Creator's user ID. */ - unsigned int cgid; /* Creator's group ID. */ - unsigned int mode; /* Read/write permission. */ - unsigned short int __seq; /* Sequence number. */ -}; - -/* SPARC semctl multiplex syscall expects the union pointed address, not - the union address itself. */ -#define SEMCTL_ARG_ADDRESS(__arg) __arg.array - -/* Also for msgrcv it does not use the kludge on final 2 arguments. */ -#define MSGRCV_ARGS(__msgp, __msgtyp) __msgp, __msgtyp - -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h b/sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h deleted file mode 100644 index 30afb553b9..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Definition of `struct stat' used in the kernel */ -struct kernel_stat - { - unsigned int st_dev; - unsigned long int st_ino; - unsigned int st_mode; - short int st_nlink; - unsigned int st_uid; - unsigned int st_gid; - unsigned int st_rdev; - long int st_size; - long int st_atime_sec; - long int st_mtime_sec; - long int st_ctime_sec; - long int st_blksize; - long int st_blocks; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - }; - -/* Definition of `struct stat64' used in the kernel. */ -struct kernel_stat64 - { - unsigned long int st_dev; - unsigned long int st_ino; - unsigned long int st_nlink; - - unsigned int st_mode; - unsigned int st_uid; - unsigned int st_gid; - unsigned int __pad0; - - unsigned long int st_rdev; - long int st_size; - long int st_blksize; - long int st_blocks; - - unsigned long int st_atime_sec; - unsigned long int st_atime_nsec; - unsigned long int st_mtime_sec; - unsigned long int st_mtime_nsec; - unsigned long int st_ctime_sec; - unsigned long int st_ctime_nsec; - long int __glibc_reserved[3]; - }; - -#define XSTAT_IS_XSTAT64 1 -#define STATFS_IS_STATFS64 0 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist deleted file mode 100644 index 9b45d5e90c..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist +++ /dev/null @@ -1,11 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __libc_stack_end D 0x8 -GLIBC_2.2 _dl_mcount F -GLIBC_2.2 _r_debug D 0x28 -GLIBC_2.2 calloc F -GLIBC_2.2 free F -GLIBC_2.2 malloc F -GLIBC_2.2 realloc F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __tls_get_addr F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libBrokenLocale.abilist deleted file mode 100644 index 21343df781..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libanl.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libanl.abilist deleted file mode 100644 index edabfb436e..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 gai_cancel F -GLIBC_2.2.3 gai_error F -GLIBC_2.2.3 gai_suspend F -GLIBC_2.2.3 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist deleted file mode 100644 index 1653164d9e..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist +++ /dev/null @@ -1,2220 +0,0 @@ -GCC_3.0 GCC_3.0 A -GCC_3.0 _Unwind_Find_FDE F -GCC_3.0 __deregister_frame_info_bases F -GCC_3.0 __register_frame_info_bases F -GCC_3.0 __register_frame_info_table_bases F -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fallocate64 F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _sys_errlist D 0x438 -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x438 -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __getshmlba F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 _sys_errlist D 0x440 -GLIBC_2.16 _sys_nerr D 0x4 -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 sys_errlist D 0x440 -GLIBC_2.16 sys_nerr D 0x4 -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _Exit F -GLIBC_2.2 _IO_2_1_stderr_ D 0xe0 -GLIBC_2.2 _IO_2_1_stdin_ D 0xe0 -GLIBC_2.2 _IO_2_1_stdout_ D 0xe0 -GLIBC_2.2 _IO_adjust_column F -GLIBC_2.2 _IO_adjust_wcolumn F -GLIBC_2.2 _IO_default_doallocate F -GLIBC_2.2 _IO_default_finish F -GLIBC_2.2 _IO_default_pbackfail F -GLIBC_2.2 _IO_default_uflow F -GLIBC_2.2 _IO_default_xsgetn F -GLIBC_2.2 _IO_default_xsputn F -GLIBC_2.2 _IO_do_write F -GLIBC_2.2 _IO_doallocbuf F -GLIBC_2.2 _IO_fclose F -GLIBC_2.2 _IO_fdopen F -GLIBC_2.2 _IO_feof F -GLIBC_2.2 _IO_ferror F -GLIBC_2.2 _IO_fflush F -GLIBC_2.2 _IO_fgetpos F -GLIBC_2.2 _IO_fgetpos64 F -GLIBC_2.2 _IO_fgets F -GLIBC_2.2 _IO_file_attach F -GLIBC_2.2 _IO_file_close F -GLIBC_2.2 _IO_file_close_it F -GLIBC_2.2 _IO_file_doallocate F -GLIBC_2.2 _IO_file_finish F -GLIBC_2.2 _IO_file_fopen F -GLIBC_2.2 _IO_file_init F -GLIBC_2.2 _IO_file_jumps D 0xa8 -GLIBC_2.2 _IO_file_open F -GLIBC_2.2 _IO_file_overflow F -GLIBC_2.2 _IO_file_read F -GLIBC_2.2 _IO_file_seek F -GLIBC_2.2 _IO_file_seekoff F -GLIBC_2.2 _IO_file_setbuf F -GLIBC_2.2 _IO_file_stat F -GLIBC_2.2 _IO_file_sync F -GLIBC_2.2 _IO_file_underflow F -GLIBC_2.2 _IO_file_write F -GLIBC_2.2 _IO_file_xsputn F -GLIBC_2.2 _IO_flockfile F -GLIBC_2.2 _IO_flush_all F -GLIBC_2.2 _IO_flush_all_linebuffered F -GLIBC_2.2 _IO_fopen F -GLIBC_2.2 _IO_fprintf F -GLIBC_2.2 _IO_fputs F -GLIBC_2.2 _IO_fread F -GLIBC_2.2 _IO_free_backup_area F -GLIBC_2.2 _IO_free_wbackup_area F -GLIBC_2.2 _IO_fsetpos F -GLIBC_2.2 _IO_fsetpos64 F -GLIBC_2.2 _IO_ftell F -GLIBC_2.2 _IO_ftrylockfile F -GLIBC_2.2 _IO_funlockfile F -GLIBC_2.2 _IO_fwrite F -GLIBC_2.2 _IO_getc F -GLIBC_2.2 _IO_getline F -GLIBC_2.2 _IO_getline_info F -GLIBC_2.2 _IO_gets F -GLIBC_2.2 _IO_init F -GLIBC_2.2 _IO_init_marker F -GLIBC_2.2 _IO_init_wmarker F -GLIBC_2.2 _IO_iter_begin F -GLIBC_2.2 _IO_iter_end F -GLIBC_2.2 _IO_iter_file F -GLIBC_2.2 _IO_iter_next F -GLIBC_2.2 _IO_least_wmarker F -GLIBC_2.2 _IO_link_in F -GLIBC_2.2 _IO_list_all D 0x8 -GLIBC_2.2 _IO_list_lock F -GLIBC_2.2 _IO_list_resetlock F -GLIBC_2.2 _IO_list_unlock F -GLIBC_2.2 _IO_marker_delta F -GLIBC_2.2 _IO_marker_difference F -GLIBC_2.2 _IO_padn F -GLIBC_2.2 _IO_peekc_locked F -GLIBC_2.2 _IO_popen F -GLIBC_2.2 _IO_printf F -GLIBC_2.2 _IO_proc_close F -GLIBC_2.2 _IO_proc_open F -GLIBC_2.2 _IO_putc F -GLIBC_2.2 _IO_puts F -GLIBC_2.2 _IO_remove_marker F -GLIBC_2.2 _IO_seekmark F -GLIBC_2.2 _IO_seekoff F -GLIBC_2.2 _IO_seekpos F -GLIBC_2.2 _IO_seekwmark F -GLIBC_2.2 _IO_setb F -GLIBC_2.2 _IO_setbuffer F -GLIBC_2.2 _IO_setvbuf F -GLIBC_2.2 _IO_sgetn F -GLIBC_2.2 _IO_sprintf F -GLIBC_2.2 _IO_sputbackc F -GLIBC_2.2 _IO_sputbackwc F -GLIBC_2.2 _IO_sscanf F -GLIBC_2.2 _IO_str_init_readonly F -GLIBC_2.2 _IO_str_init_static F -GLIBC_2.2 _IO_str_overflow F -GLIBC_2.2 _IO_str_pbackfail F -GLIBC_2.2 _IO_str_seekoff F -GLIBC_2.2 _IO_str_underflow F -GLIBC_2.2 _IO_sungetc F -GLIBC_2.2 _IO_sungetwc F -GLIBC_2.2 _IO_switch_to_get_mode F -GLIBC_2.2 _IO_switch_to_main_wget_area F -GLIBC_2.2 _IO_switch_to_wbackup_area F -GLIBC_2.2 _IO_switch_to_wget_mode F -GLIBC_2.2 _IO_un_link F -GLIBC_2.2 _IO_ungetc F -GLIBC_2.2 _IO_unsave_markers F -GLIBC_2.2 _IO_unsave_wmarkers F -GLIBC_2.2 _IO_vfprintf F -GLIBC_2.2 _IO_vfscanf F -GLIBC_2.2 _IO_vsprintf F -GLIBC_2.2 _IO_wdefault_doallocate F -GLIBC_2.2 _IO_wdefault_finish F -GLIBC_2.2 _IO_wdefault_pbackfail F -GLIBC_2.2 _IO_wdefault_uflow F -GLIBC_2.2 _IO_wdefault_xsgetn F -GLIBC_2.2 _IO_wdefault_xsputn F -GLIBC_2.2 _IO_wdo_write F -GLIBC_2.2 _IO_wdoallocbuf F -GLIBC_2.2 _IO_wfile_jumps D 0xa8 -GLIBC_2.2 _IO_wfile_overflow F -GLIBC_2.2 _IO_wfile_seekoff F -GLIBC_2.2 _IO_wfile_sync F -GLIBC_2.2 _IO_wfile_underflow F -GLIBC_2.2 _IO_wfile_xsputn F -GLIBC_2.2 _IO_wmarker_delta F -GLIBC_2.2 _IO_wsetb F -GLIBC_2.2 _Qp_add F -GLIBC_2.2 _Qp_cmp F -GLIBC_2.2 _Qp_cmpe F -GLIBC_2.2 _Qp_div F -GLIBC_2.2 _Qp_dtoq F -GLIBC_2.2 _Qp_feq F -GLIBC_2.2 _Qp_fge F -GLIBC_2.2 _Qp_fgt F -GLIBC_2.2 _Qp_fle F -GLIBC_2.2 _Qp_flt F -GLIBC_2.2 _Qp_fne F -GLIBC_2.2 _Qp_itoq F -GLIBC_2.2 _Qp_mul F -GLIBC_2.2 _Qp_neg F -GLIBC_2.2 _Qp_qtod F -GLIBC_2.2 _Qp_qtoi F -GLIBC_2.2 _Qp_qtos F -GLIBC_2.2 _Qp_qtoui F -GLIBC_2.2 _Qp_qtoux F -GLIBC_2.2 _Qp_qtox F -GLIBC_2.2 _Qp_sqrt F -GLIBC_2.2 _Qp_stoq F -GLIBC_2.2 _Qp_sub F -GLIBC_2.2 _Qp_uitoq F -GLIBC_2.2 _Qp_uxtoq F -GLIBC_2.2 _Qp_xtoq F -GLIBC_2.2 __adjtimex F -GLIBC_2.2 __after_morecore_hook D 0x8 -GLIBC_2.2 __align_cpy_1 F -GLIBC_2.2 __align_cpy_16 F -GLIBC_2.2 __align_cpy_2 F -GLIBC_2.2 __align_cpy_4 F -GLIBC_2.2 __align_cpy_8 F -GLIBC_2.2 __argz_count F -GLIBC_2.2 __argz_next F -GLIBC_2.2 __argz_stringify F -GLIBC_2.2 __asprintf F -GLIBC_2.2 __assert F -GLIBC_2.2 __assert_fail F -GLIBC_2.2 __assert_perror_fail F -GLIBC_2.2 __backtrace F -GLIBC_2.2 __backtrace_symbols F -GLIBC_2.2 __backtrace_symbols_fd F -GLIBC_2.2 __bsd_getpgrp F -GLIBC_2.2 __bzero F -GLIBC_2.2 __check_rhosts_file D 0x4 -GLIBC_2.2 __clone F -GLIBC_2.2 __close F -GLIBC_2.2 __cmsg_nxthdr F -GLIBC_2.2 __connect F -GLIBC_2.2 __ctype32_b D 0x8 -GLIBC_2.2 __ctype32_tolower D 0x8 -GLIBC_2.2 __ctype32_toupper D 0x8 -GLIBC_2.2 __ctype_b D 0x8 -GLIBC_2.2 __ctype_get_mb_cur_max F -GLIBC_2.2 __ctype_tolower D 0x8 -GLIBC_2.2 __ctype_toupper D 0x8 -GLIBC_2.2 __curbrk D 0x8 -GLIBC_2.2 __cxa_atexit F -GLIBC_2.2 __cxa_finalize F -GLIBC_2.2 __cyg_profile_func_enter F -GLIBC_2.2 __cyg_profile_func_exit F -GLIBC_2.2 __daylight D 0x4 -GLIBC_2.2 __dcgettext F -GLIBC_2.2 __default_morecore F -GLIBC_2.2 __deregister_frame F -GLIBC_2.2 __deregister_frame_info F -GLIBC_2.2 __dgettext F -GLIBC_2.2 __dup2 F -GLIBC_2.2 __duplocale F -GLIBC_2.2 __endmntent F -GLIBC_2.2 __environ D 0x8 -GLIBC_2.2 __errno_location F -GLIBC_2.2 __fbufsize F -GLIBC_2.2 __fcntl F -GLIBC_2.2 __ffs F -GLIBC_2.2 __finite F -GLIBC_2.2 __finitef F -GLIBC_2.2 __finitel F -GLIBC_2.2 __flbf F -GLIBC_2.2 __fork F -GLIBC_2.2 __fpending F -GLIBC_2.2 __fpu_control D 0x8 -GLIBC_2.2 __fpurge F -GLIBC_2.2 __frame_state_for F -GLIBC_2.2 __freadable F -GLIBC_2.2 __freading F -GLIBC_2.2 __free_hook D 0x8 -GLIBC_2.2 __freelocale F -GLIBC_2.2 __fsetlocking F -GLIBC_2.2 __fwritable F -GLIBC_2.2 __fwriting F -GLIBC_2.2 __fxstat F -GLIBC_2.2 __fxstat64 F -GLIBC_2.2 __getdelim F -GLIBC_2.2 __getmntent_r F -GLIBC_2.2 __getpagesize F -GLIBC_2.2 __getpgid F -GLIBC_2.2 __getpid F -GLIBC_2.2 __gettimeofday F -GLIBC_2.2 __gmtime_r F -GLIBC_2.2 __h_errno_location F -GLIBC_2.2 __isalnum_l F -GLIBC_2.2 __isalpha_l F -GLIBC_2.2 __isascii_l F -GLIBC_2.2 __isblank_l F -GLIBC_2.2 __iscntrl_l F -GLIBC_2.2 __isdigit_l F -GLIBC_2.2 __isgraph_l F -GLIBC_2.2 __isinf F -GLIBC_2.2 __isinff F -GLIBC_2.2 __isinfl F -GLIBC_2.2 __islower_l F -GLIBC_2.2 __isnan F -GLIBC_2.2 __isnanf F -GLIBC_2.2 __isnanl F -GLIBC_2.2 __isprint_l F -GLIBC_2.2 __ispunct_l F -GLIBC_2.2 __isspace_l F -GLIBC_2.2 __isupper_l F -GLIBC_2.2 __iswalnum_l F -GLIBC_2.2 __iswalpha_l F -GLIBC_2.2 __iswblank_l F -GLIBC_2.2 __iswcntrl_l F -GLIBC_2.2 __iswctype F -GLIBC_2.2 __iswctype_l F -GLIBC_2.2 __iswdigit_l F -GLIBC_2.2 __iswgraph_l F -GLIBC_2.2 __iswlower_l F -GLIBC_2.2 __iswprint_l F -GLIBC_2.2 __iswpunct_l F -GLIBC_2.2 __iswspace_l F -GLIBC_2.2 __iswupper_l F -GLIBC_2.2 __iswxdigit_l F -GLIBC_2.2 __isxdigit_l F -GLIBC_2.2 __ivaliduser F -GLIBC_2.2 __key_decryptsession_pk_LOCAL D 0x8 -GLIBC_2.2 __key_encryptsession_pk_LOCAL D 0x8 -GLIBC_2.2 __key_gendes_LOCAL D 0x8 -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_calloc F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __libc_free F -GLIBC_2.2 __libc_freeres F -GLIBC_2.2 __libc_init_first F -GLIBC_2.2 __libc_mallinfo F -GLIBC_2.2 __libc_malloc F -GLIBC_2.2 __libc_mallopt F -GLIBC_2.2 __libc_memalign F -GLIBC_2.2 __libc_pvalloc F -GLIBC_2.2 __libc_realloc F -GLIBC_2.2 __libc_sa_len F -GLIBC_2.2 __libc_start_main F -GLIBC_2.2 __libc_valloc F -GLIBC_2.2 __lseek F -GLIBC_2.2 __lxstat F -GLIBC_2.2 __lxstat64 F -GLIBC_2.2 __malloc_hook D 0x8 -GLIBC_2.2 __malloc_initialize_hook D 0x8 -GLIBC_2.2 __mbrlen F -GLIBC_2.2 __mbrtowc F -GLIBC_2.2 __memalign_hook D 0x8 -GLIBC_2.2 __mempcpy F -GLIBC_2.2 __mempcpy_small F -GLIBC_2.2 __monstartup F -GLIBC_2.2 __morecore D 0x8 -GLIBC_2.2 __newlocale F -GLIBC_2.2 __nl_langinfo_l F -GLIBC_2.2 __nss_configure_lookup F -GLIBC_2.2 __nss_database_lookup F -GLIBC_2.2 __nss_group_lookup F -GLIBC_2.2 __nss_hosts_lookup F -GLIBC_2.2 __nss_next F -GLIBC_2.2 __nss_passwd_lookup F -GLIBC_2.2 __open F -GLIBC_2.2 __open64 F -GLIBC_2.2 __overflow F -GLIBC_2.2 __pipe F -GLIBC_2.2 __poll F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __printf_fp F -GLIBC_2.2 __profile_frequency F -GLIBC_2.2 __progname D 0x8 -GLIBC_2.2 __progname_full D 0x8 -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __rawmemchr F -GLIBC_2.2 __rcmd_errstr D 0x8 -GLIBC_2.2 __read F -GLIBC_2.2 __realloc_hook D 0x8 -GLIBC_2.2 __register_frame F -GLIBC_2.2 __register_frame_info F -GLIBC_2.2 __register_frame_info_table F -GLIBC_2.2 __register_frame_table F -GLIBC_2.2 __res_init F -GLIBC_2.2 __res_nclose F -GLIBC_2.2 __res_ninit F -GLIBC_2.2 __res_randomid F -GLIBC_2.2 __res_state F -GLIBC_2.2 __sbrk F -GLIBC_2.2 __sched_get_priority_max F -GLIBC_2.2 __sched_get_priority_min F -GLIBC_2.2 __sched_getparam F -GLIBC_2.2 __sched_getscheduler F -GLIBC_2.2 __sched_setscheduler F -GLIBC_2.2 __sched_yield F -GLIBC_2.2 __secure_getenv F -GLIBC_2.2 __select F -GLIBC_2.2 __send F -GLIBC_2.2 __setmntent F -GLIBC_2.2 __setpgid F -GLIBC_2.2 __sigaction F -GLIBC_2.2 __sigaddset F -GLIBC_2.2 __sigdelset F -GLIBC_2.2 __sigismember F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 __signbitl F -GLIBC_2.2 __sigpause F -GLIBC_2.2 __sigsetjmp F -GLIBC_2.2 __sigsuspend F -GLIBC_2.2 __statfs F -GLIBC_2.2 __stpcpy F -GLIBC_2.2 __stpcpy_small F -GLIBC_2.2 __stpncpy F -GLIBC_2.2 __strcasecmp F -GLIBC_2.2 __strcasecmp_l F -GLIBC_2.2 __strcasestr F -GLIBC_2.2 __strcoll_l F -GLIBC_2.2 __strcpy_small F -GLIBC_2.2 __strcspn_c1 F -GLIBC_2.2 __strcspn_c2 F -GLIBC_2.2 __strcspn_c3 F -GLIBC_2.2 __strdup F -GLIBC_2.2 __strerror_r F -GLIBC_2.2 __strfmon_l F -GLIBC_2.2 __strncasecmp_l F -GLIBC_2.2 __strndup F -GLIBC_2.2 __strpbrk_c2 F -GLIBC_2.2 __strpbrk_c3 F -GLIBC_2.2 __strsep_1c F -GLIBC_2.2 __strsep_2c F -GLIBC_2.2 __strsep_3c F -GLIBC_2.2 __strsep_g F -GLIBC_2.2 __strspn_c1 F -GLIBC_2.2 __strspn_c2 F -GLIBC_2.2 __strspn_c3 F -GLIBC_2.2 __strtod_internal F -GLIBC_2.2 __strtod_l F -GLIBC_2.2 __strtof_internal F -GLIBC_2.2 __strtof_l F -GLIBC_2.2 __strtok_r F -GLIBC_2.2 __strtok_r_1c F -GLIBC_2.2 __strtol_internal F -GLIBC_2.2 __strtol_l F -GLIBC_2.2 __strtold_internal F -GLIBC_2.2 __strtold_l F -GLIBC_2.2 __strtoll_internal F -GLIBC_2.2 __strtoll_l F -GLIBC_2.2 __strtoul_internal F -GLIBC_2.2 __strtoul_l F -GLIBC_2.2 __strtoull_internal F -GLIBC_2.2 __strtoull_l F -GLIBC_2.2 __strverscmp F -GLIBC_2.2 __strxfrm_l F -GLIBC_2.2 __sysconf F -GLIBC_2.2 __sysctl F -GLIBC_2.2 __sysv_signal F -GLIBC_2.2 __timezone D 0x8 -GLIBC_2.2 __toascii_l F -GLIBC_2.2 __tolower_l F -GLIBC_2.2 __toupper_l F -GLIBC_2.2 __towctrans F -GLIBC_2.2 __towctrans_l F -GLIBC_2.2 __towlower_l F -GLIBC_2.2 __towupper_l F -GLIBC_2.2 __tzname D 0x10 -GLIBC_2.2 __uflow F -GLIBC_2.2 __underflow F -GLIBC_2.2 __vfork F -GLIBC_2.2 __vfscanf F -GLIBC_2.2 __vsnprintf F -GLIBC_2.2 __vsscanf F -GLIBC_2.2 __wait F -GLIBC_2.2 __waitpid F -GLIBC_2.2 __wcscasecmp_l F -GLIBC_2.2 __wcscoll_l F -GLIBC_2.2 __wcsncasecmp_l F -GLIBC_2.2 __wcstod_internal F -GLIBC_2.2 __wcstod_l F -GLIBC_2.2 __wcstof_internal F -GLIBC_2.2 __wcstof_l F -GLIBC_2.2 __wcstol_internal F -GLIBC_2.2 __wcstol_l F -GLIBC_2.2 __wcstold_internal F -GLIBC_2.2 __wcstold_l F -GLIBC_2.2 __wcstoll_internal F -GLIBC_2.2 __wcstoll_l F -GLIBC_2.2 __wcstoul_internal F -GLIBC_2.2 __wcstoul_l F -GLIBC_2.2 __wcstoull_internal F -GLIBC_2.2 __wcstoull_l F -GLIBC_2.2 __wcsxfrm_l F -GLIBC_2.2 __wctrans_l F -GLIBC_2.2 __wctype_l F -GLIBC_2.2 __woverflow F -GLIBC_2.2 __write F -GLIBC_2.2 __wuflow F -GLIBC_2.2 __wunderflow F -GLIBC_2.2 __xmknod F -GLIBC_2.2 __xpg_basename F -GLIBC_2.2 __xpg_sigpause F -GLIBC_2.2 __xstat F -GLIBC_2.2 __xstat64 F -GLIBC_2.2 _authenticate F -GLIBC_2.2 _dl_mcount_wrapper F -GLIBC_2.2 _dl_mcount_wrapper_check F -GLIBC_2.2 _environ D 0x8 -GLIBC_2.2 _exit F -GLIBC_2.2 _flushlbf F -GLIBC_2.2 _libc_intl_domainname D 0x5 -GLIBC_2.2 _longjmp F -GLIBC_2.2 _mcleanup F -GLIBC_2.2 _mcount F -GLIBC_2.2 _nl_default_dirname D 0x12 -GLIBC_2.2 _nl_domain_bindings D 0x8 -GLIBC_2.2 _nl_msg_cat_cntr D 0x4 -GLIBC_2.2 _null_auth D 0x18 -GLIBC_2.2 _obstack D 0x8 -GLIBC_2.2 _obstack_allocated_p F -GLIBC_2.2 _obstack_begin F -GLIBC_2.2 _obstack_begin_1 F -GLIBC_2.2 _obstack_free F -GLIBC_2.2 _obstack_memory_used F -GLIBC_2.2 _obstack_newchunk F -GLIBC_2.2 _res D 0x238 -GLIBC_2.2 _res_hconf D 0x48 -GLIBC_2.2 _rpc_dtablesize F -GLIBC_2.2 _seterr_reply F -GLIBC_2.2 _setjmp F -GLIBC_2.2 _sys_errlist D 0x3f8 -GLIBC_2.2 _sys_nerr D 0x4 -GLIBC_2.2 _sys_siglist D 0x200 -GLIBC_2.2 _tolower F -GLIBC_2.2 _toupper F -GLIBC_2.2 a64l F -GLIBC_2.2 abort F -GLIBC_2.2 abs F -GLIBC_2.2 accept F -GLIBC_2.2 access F -GLIBC_2.2 acct F -GLIBC_2.2 addmntent F -GLIBC_2.2 addseverity F -GLIBC_2.2 adjtime F -GLIBC_2.2 adjtimex F -GLIBC_2.2 advance F -GLIBC_2.2 alarm F -GLIBC_2.2 alphasort F -GLIBC_2.2 alphasort64 F -GLIBC_2.2 argp_err_exit_status D 0x4 -GLIBC_2.2 argp_error F -GLIBC_2.2 argp_failure F -GLIBC_2.2 argp_help F -GLIBC_2.2 argp_parse F -GLIBC_2.2 argp_program_bug_address D 0x8 -GLIBC_2.2 argp_program_version D 0x8 -GLIBC_2.2 argp_program_version_hook D 0x8 -GLIBC_2.2 argp_state_help F -GLIBC_2.2 argp_usage F -GLIBC_2.2 argz_add F -GLIBC_2.2 argz_add_sep F -GLIBC_2.2 argz_append F -GLIBC_2.2 argz_count F -GLIBC_2.2 argz_create F -GLIBC_2.2 argz_create_sep F -GLIBC_2.2 argz_delete F -GLIBC_2.2 argz_extract F -GLIBC_2.2 argz_insert F -GLIBC_2.2 argz_next F -GLIBC_2.2 argz_replace F -GLIBC_2.2 argz_stringify F -GLIBC_2.2 asctime F -GLIBC_2.2 asctime_r F -GLIBC_2.2 asprintf F -GLIBC_2.2 atexit F -GLIBC_2.2 atof F -GLIBC_2.2 atoi F -GLIBC_2.2 atol F -GLIBC_2.2 atoll F -GLIBC_2.2 authdes_create F -GLIBC_2.2 authdes_getucred F -GLIBC_2.2 authdes_pk_create F -GLIBC_2.2 authnone_create F -GLIBC_2.2 authunix_create F -GLIBC_2.2 authunix_create_default F -GLIBC_2.2 backtrace F -GLIBC_2.2 backtrace_symbols F -GLIBC_2.2 backtrace_symbols_fd F -GLIBC_2.2 basename F -GLIBC_2.2 bcmp F -GLIBC_2.2 bcopy F -GLIBC_2.2 bdflush F -GLIBC_2.2 bind F -GLIBC_2.2 bind_textdomain_codeset F -GLIBC_2.2 bindresvport F -GLIBC_2.2 bindtextdomain F -GLIBC_2.2 brk F -GLIBC_2.2 bsd_signal F -GLIBC_2.2 bsearch F -GLIBC_2.2 btowc F -GLIBC_2.2 bzero F -GLIBC_2.2 calloc F -GLIBC_2.2 callrpc F -GLIBC_2.2 canonicalize_file_name F -GLIBC_2.2 capget F -GLIBC_2.2 capset F -GLIBC_2.2 catclose F -GLIBC_2.2 catgets F -GLIBC_2.2 catopen F -GLIBC_2.2 cbc_crypt F -GLIBC_2.2 cfgetispeed F -GLIBC_2.2 cfgetospeed F -GLIBC_2.2 cfmakeraw F -GLIBC_2.2 cfree F -GLIBC_2.2 cfsetispeed F -GLIBC_2.2 cfsetospeed F -GLIBC_2.2 cfsetspeed F -GLIBC_2.2 chdir F -GLIBC_2.2 chflags F -GLIBC_2.2 chmod F -GLIBC_2.2 chown F -GLIBC_2.2 chroot F -GLIBC_2.2 clearenv F -GLIBC_2.2 clearerr F -GLIBC_2.2 clearerr_unlocked F -GLIBC_2.2 clnt_broadcast F -GLIBC_2.2 clnt_create F -GLIBC_2.2 clnt_pcreateerror F -GLIBC_2.2 clnt_perrno F -GLIBC_2.2 clnt_perror F -GLIBC_2.2 clnt_spcreateerror F -GLIBC_2.2 clnt_sperrno F -GLIBC_2.2 clnt_sperror F -GLIBC_2.2 clntraw_create F -GLIBC_2.2 clnttcp_create F -GLIBC_2.2 clntudp_bufcreate F -GLIBC_2.2 clntudp_create F -GLIBC_2.2 clntunix_create F -GLIBC_2.2 clock F -GLIBC_2.2 clone F -GLIBC_2.2 close F -GLIBC_2.2 closedir F -GLIBC_2.2 closelog F -GLIBC_2.2 confstr F -GLIBC_2.2 connect F -GLIBC_2.2 copysign F -GLIBC_2.2 copysignf F -GLIBC_2.2 copysignl F -GLIBC_2.2 creat F -GLIBC_2.2 creat64 F -GLIBC_2.2 create_module F -GLIBC_2.2 ctermid F -GLIBC_2.2 ctime F -GLIBC_2.2 ctime_r F -GLIBC_2.2 cuserid F -GLIBC_2.2 daemon F -GLIBC_2.2 daylight D 0x4 -GLIBC_2.2 dcgettext F -GLIBC_2.2 dcngettext F -GLIBC_2.2 delete_module F -GLIBC_2.2 des_setparity F -GLIBC_2.2 dgettext F -GLIBC_2.2 difftime F -GLIBC_2.2 dirfd F -GLIBC_2.2 dirname F -GLIBC_2.2 div F -GLIBC_2.2 dngettext F -GLIBC_2.2 dprintf F -GLIBC_2.2 drand48 F -GLIBC_2.2 drand48_r F -GLIBC_2.2 dup F -GLIBC_2.2 dup2 F -GLIBC_2.2 dysize F -GLIBC_2.2 ecb_crypt F -GLIBC_2.2 ecvt F -GLIBC_2.2 ecvt_r F -GLIBC_2.2 endaliasent F -GLIBC_2.2 endfsent F -GLIBC_2.2 endgrent F -GLIBC_2.2 endhostent F -GLIBC_2.2 endmntent F -GLIBC_2.2 endnetent F -GLIBC_2.2 endnetgrent F -GLIBC_2.2 endprotoent F -GLIBC_2.2 endpwent F -GLIBC_2.2 endrpcent F -GLIBC_2.2 endservent F -GLIBC_2.2 endspent F -GLIBC_2.2 endttyent F -GLIBC_2.2 endusershell F -GLIBC_2.2 endutent F -GLIBC_2.2 endutxent F -GLIBC_2.2 environ D 0x8 -GLIBC_2.2 envz_add F -GLIBC_2.2 envz_entry F -GLIBC_2.2 envz_get F -GLIBC_2.2 envz_merge F -GLIBC_2.2 envz_remove F -GLIBC_2.2 envz_strip F -GLIBC_2.2 erand48 F -GLIBC_2.2 erand48_r F -GLIBC_2.2 err F -GLIBC_2.2 error F -GLIBC_2.2 error_at_line F -GLIBC_2.2 error_message_count D 0x4 -GLIBC_2.2 error_one_per_line D 0x4 -GLIBC_2.2 error_print_progname D 0x8 -GLIBC_2.2 errx F -GLIBC_2.2 ether_aton F -GLIBC_2.2 ether_aton_r F -GLIBC_2.2 ether_hostton F -GLIBC_2.2 ether_line F -GLIBC_2.2 ether_ntoa F -GLIBC_2.2 ether_ntoa_r F -GLIBC_2.2 ether_ntohost F -GLIBC_2.2 euidaccess F -GLIBC_2.2 execl F -GLIBC_2.2 execle F -GLIBC_2.2 execlp F -GLIBC_2.2 execv F -GLIBC_2.2 execve F -GLIBC_2.2 execvp F -GLIBC_2.2 exit F -GLIBC_2.2 fattach F -GLIBC_2.2 fchdir F -GLIBC_2.2 fchflags F -GLIBC_2.2 fchmod F -GLIBC_2.2 fchown F -GLIBC_2.2 fclose F -GLIBC_2.2 fcloseall F -GLIBC_2.2 fcntl F -GLIBC_2.2 fcvt F -GLIBC_2.2 fcvt_r F -GLIBC_2.2 fdatasync F -GLIBC_2.2 fdetach F -GLIBC_2.2 fdopen F -GLIBC_2.2 feof F -GLIBC_2.2 feof_unlocked F -GLIBC_2.2 ferror F -GLIBC_2.2 ferror_unlocked F -GLIBC_2.2 fexecve F -GLIBC_2.2 fflush F -GLIBC_2.2 fflush_unlocked F -GLIBC_2.2 ffs F -GLIBC_2.2 ffsl F -GLIBC_2.2 ffsll F -GLIBC_2.2 fgetc F -GLIBC_2.2 fgetc_unlocked F -GLIBC_2.2 fgetgrent F -GLIBC_2.2 fgetgrent_r F -GLIBC_2.2 fgetpos F -GLIBC_2.2 fgetpos64 F -GLIBC_2.2 fgetpwent F -GLIBC_2.2 fgetpwent_r F -GLIBC_2.2 fgets F -GLIBC_2.2 fgets_unlocked F -GLIBC_2.2 fgetspent F -GLIBC_2.2 fgetspent_r F -GLIBC_2.2 fgetwc F -GLIBC_2.2 fgetwc_unlocked F -GLIBC_2.2 fgetws F -GLIBC_2.2 fgetws_unlocked F -GLIBC_2.2 fileno F -GLIBC_2.2 fileno_unlocked F -GLIBC_2.2 finite F -GLIBC_2.2 finitef F -GLIBC_2.2 finitel F -GLIBC_2.2 flock F -GLIBC_2.2 flockfile F -GLIBC_2.2 fmemopen F -GLIBC_2.2 fmtmsg F -GLIBC_2.2 fnmatch F -GLIBC_2.2 fopen F -GLIBC_2.2 fopen64 F -GLIBC_2.2 fopencookie F -GLIBC_2.2 fork F -GLIBC_2.2 fpathconf F -GLIBC_2.2 fprintf F -GLIBC_2.2 fputc F -GLIBC_2.2 fputc_unlocked F -GLIBC_2.2 fputs F -GLIBC_2.2 fputs_unlocked F -GLIBC_2.2 fputwc F -GLIBC_2.2 fputwc_unlocked F -GLIBC_2.2 fputws F -GLIBC_2.2 fputws_unlocked F -GLIBC_2.2 fread F -GLIBC_2.2 fread_unlocked F -GLIBC_2.2 free F -GLIBC_2.2 freeaddrinfo F -GLIBC_2.2 freopen F -GLIBC_2.2 freopen64 F -GLIBC_2.2 frexp F -GLIBC_2.2 frexpf F -GLIBC_2.2 frexpl F -GLIBC_2.2 fscanf F -GLIBC_2.2 fseek F -GLIBC_2.2 fseeko F -GLIBC_2.2 fseeko64 F -GLIBC_2.2 fsetpos F -GLIBC_2.2 fsetpos64 F -GLIBC_2.2 fstatfs F -GLIBC_2.2 fstatfs64 F -GLIBC_2.2 fstatvfs F -GLIBC_2.2 fstatvfs64 F -GLIBC_2.2 fsync F -GLIBC_2.2 ftell F -GLIBC_2.2 ftello F -GLIBC_2.2 ftello64 F -GLIBC_2.2 ftime F -GLIBC_2.2 ftok F -GLIBC_2.2 ftruncate F -GLIBC_2.2 ftruncate64 F -GLIBC_2.2 ftrylockfile F -GLIBC_2.2 fts_children F -GLIBC_2.2 fts_close F -GLIBC_2.2 fts_open F -GLIBC_2.2 fts_read F -GLIBC_2.2 fts_set F -GLIBC_2.2 ftw F -GLIBC_2.2 ftw64 F -GLIBC_2.2 funlockfile F -GLIBC_2.2 fwide F -GLIBC_2.2 fwprintf F -GLIBC_2.2 fwrite F -GLIBC_2.2 fwrite_unlocked F -GLIBC_2.2 fwscanf F -GLIBC_2.2 gai_strerror F -GLIBC_2.2 gcvt F -GLIBC_2.2 get_avphys_pages F -GLIBC_2.2 get_current_dir_name F -GLIBC_2.2 get_kernel_syms F -GLIBC_2.2 get_myaddress F -GLIBC_2.2 get_nprocs F -GLIBC_2.2 get_nprocs_conf F -GLIBC_2.2 get_phys_pages F -GLIBC_2.2 getaddrinfo F -GLIBC_2.2 getaliasbyname F -GLIBC_2.2 getaliasbyname_r F -GLIBC_2.2 getaliasent F -GLIBC_2.2 getaliasent_r F -GLIBC_2.2 getc F -GLIBC_2.2 getc_unlocked F -GLIBC_2.2 getchar F -GLIBC_2.2 getchar_unlocked F -GLIBC_2.2 getcontext F -GLIBC_2.2 getcwd F -GLIBC_2.2 getdate F -GLIBC_2.2 getdate_err D 0x4 -GLIBC_2.2 getdate_r F -GLIBC_2.2 getdelim F -GLIBC_2.2 getdirentries F -GLIBC_2.2 getdirentries64 F -GLIBC_2.2 getdomainname F -GLIBC_2.2 getdtablesize F -GLIBC_2.2 getegid F -GLIBC_2.2 getenv F -GLIBC_2.2 geteuid F -GLIBC_2.2 getfsent F -GLIBC_2.2 getfsfile F -GLIBC_2.2 getfsspec F -GLIBC_2.2 getgid F -GLIBC_2.2 getgrent F -GLIBC_2.2 getgrent_r F -GLIBC_2.2 getgrgid F -GLIBC_2.2 getgrgid_r F -GLIBC_2.2 getgrnam F -GLIBC_2.2 getgrnam_r F -GLIBC_2.2 getgroups F -GLIBC_2.2 gethostbyaddr F -GLIBC_2.2 gethostbyaddr_r F -GLIBC_2.2 gethostbyname F -GLIBC_2.2 gethostbyname2 F -GLIBC_2.2 gethostbyname2_r F -GLIBC_2.2 gethostbyname_r F -GLIBC_2.2 gethostent F -GLIBC_2.2 gethostent_r F -GLIBC_2.2 gethostid F -GLIBC_2.2 gethostname F -GLIBC_2.2 getitimer F -GLIBC_2.2 getline F -GLIBC_2.2 getloadavg F -GLIBC_2.2 getlogin F -GLIBC_2.2 getlogin_r F -GLIBC_2.2 getmntent F -GLIBC_2.2 getmntent_r F -GLIBC_2.2 getmsg F -GLIBC_2.2 getnameinfo F -GLIBC_2.2 getnetbyaddr F -GLIBC_2.2 getnetbyaddr_r F -GLIBC_2.2 getnetbyname F -GLIBC_2.2 getnetbyname_r F -GLIBC_2.2 getnetent F -GLIBC_2.2 getnetent_r F -GLIBC_2.2 getnetgrent F -GLIBC_2.2 getnetgrent_r F -GLIBC_2.2 getnetname F -GLIBC_2.2 getopt F -GLIBC_2.2 getopt_long F -GLIBC_2.2 getopt_long_only F -GLIBC_2.2 getpagesize F -GLIBC_2.2 getpass F -GLIBC_2.2 getpeername F -GLIBC_2.2 getpgid F -GLIBC_2.2 getpgrp F -GLIBC_2.2 getpid F -GLIBC_2.2 getpmsg F -GLIBC_2.2 getppid F -GLIBC_2.2 getpriority F -GLIBC_2.2 getprotobyname F -GLIBC_2.2 getprotobyname_r F -GLIBC_2.2 getprotobynumber F -GLIBC_2.2 getprotobynumber_r F -GLIBC_2.2 getprotoent F -GLIBC_2.2 getprotoent_r F -GLIBC_2.2 getpt F -GLIBC_2.2 getpublickey F -GLIBC_2.2 getpw F -GLIBC_2.2 getpwent F -GLIBC_2.2 getpwent_r F -GLIBC_2.2 getpwnam F -GLIBC_2.2 getpwnam_r F -GLIBC_2.2 getpwuid F -GLIBC_2.2 getpwuid_r F -GLIBC_2.2 getresgid F -GLIBC_2.2 getresuid F -GLIBC_2.2 getrlimit F -GLIBC_2.2 getrlimit64 F -GLIBC_2.2 getrpcbyname F -GLIBC_2.2 getrpcbyname_r F -GLIBC_2.2 getrpcbynumber F -GLIBC_2.2 getrpcbynumber_r F -GLIBC_2.2 getrpcent F -GLIBC_2.2 getrpcent_r F -GLIBC_2.2 getrpcport F -GLIBC_2.2 getrusage F -GLIBC_2.2 gets F -GLIBC_2.2 getsecretkey F -GLIBC_2.2 getservbyname F -GLIBC_2.2 getservbyname_r F -GLIBC_2.2 getservbyport F -GLIBC_2.2 getservbyport_r F -GLIBC_2.2 getservent F -GLIBC_2.2 getservent_r F -GLIBC_2.2 getsid F -GLIBC_2.2 getsockname F -GLIBC_2.2 getsockopt F -GLIBC_2.2 getspent F -GLIBC_2.2 getspent_r F -GLIBC_2.2 getspnam F -GLIBC_2.2 getspnam_r F -GLIBC_2.2 getsubopt F -GLIBC_2.2 gettext F -GLIBC_2.2 gettimeofday F -GLIBC_2.2 getttyent F -GLIBC_2.2 getttynam F -GLIBC_2.2 getuid F -GLIBC_2.2 getusershell F -GLIBC_2.2 getutent F -GLIBC_2.2 getutent_r F -GLIBC_2.2 getutid F -GLIBC_2.2 getutid_r F -GLIBC_2.2 getutline F -GLIBC_2.2 getutline_r F -GLIBC_2.2 getutmp F -GLIBC_2.2 getutmpx F -GLIBC_2.2 getutxent F -GLIBC_2.2 getutxid F -GLIBC_2.2 getutxline F -GLIBC_2.2 getw F -GLIBC_2.2 getwc F -GLIBC_2.2 getwc_unlocked F -GLIBC_2.2 getwchar F -GLIBC_2.2 getwchar_unlocked F -GLIBC_2.2 getwd F -GLIBC_2.2 glob F -GLIBC_2.2 glob64 F -GLIBC_2.2 glob_pattern_p F -GLIBC_2.2 globfree F -GLIBC_2.2 globfree64 F -GLIBC_2.2 gmtime F -GLIBC_2.2 gmtime_r F -GLIBC_2.2 gnu_get_libc_release F -GLIBC_2.2 gnu_get_libc_version F -GLIBC_2.2 grantpt F -GLIBC_2.2 group_member F -GLIBC_2.2 gsignal F -GLIBC_2.2 gtty F -GLIBC_2.2 h_errlist D 0x28 -GLIBC_2.2 h_nerr D 0x4 -GLIBC_2.2 hasmntopt F -GLIBC_2.2 hcreate F -GLIBC_2.2 hcreate_r F -GLIBC_2.2 hdestroy F -GLIBC_2.2 hdestroy_r F -GLIBC_2.2 herror F -GLIBC_2.2 host2netname F -GLIBC_2.2 hsearch F -GLIBC_2.2 hsearch_r F -GLIBC_2.2 hstrerror F -GLIBC_2.2 htonl F -GLIBC_2.2 htons F -GLIBC_2.2 iconv F -GLIBC_2.2 iconv_close F -GLIBC_2.2 iconv_open F -GLIBC_2.2 if_freenameindex F -GLIBC_2.2 if_indextoname F -GLIBC_2.2 if_nameindex F -GLIBC_2.2 if_nametoindex F -GLIBC_2.2 imaxabs F -GLIBC_2.2 imaxdiv F -GLIBC_2.2 in6addr_any D 0x10 -GLIBC_2.2 in6addr_loopback D 0x10 -GLIBC_2.2 index F -GLIBC_2.2 inet_addr F -GLIBC_2.2 inet_aton F -GLIBC_2.2 inet_lnaof F -GLIBC_2.2 inet_makeaddr F -GLIBC_2.2 inet_netof F -GLIBC_2.2 inet_network F -GLIBC_2.2 inet_nsap_addr F -GLIBC_2.2 inet_nsap_ntoa F -GLIBC_2.2 inet_ntoa F -GLIBC_2.2 inet_ntop F -GLIBC_2.2 inet_pton F -GLIBC_2.2 init_module F -GLIBC_2.2 initgroups F -GLIBC_2.2 initstate F -GLIBC_2.2 initstate_r F -GLIBC_2.2 innetgr F -GLIBC_2.2 insque F -GLIBC_2.2 ioctl F -GLIBC_2.2 iruserok F -GLIBC_2.2 iruserok_af F -GLIBC_2.2 isalnum F -GLIBC_2.2 isalpha F -GLIBC_2.2 isascii F -GLIBC_2.2 isastream F -GLIBC_2.2 isatty F -GLIBC_2.2 isblank F -GLIBC_2.2 iscntrl F -GLIBC_2.2 isdigit F -GLIBC_2.2 isfdtype F -GLIBC_2.2 isgraph F -GLIBC_2.2 isinf F -GLIBC_2.2 isinff F -GLIBC_2.2 isinfl F -GLIBC_2.2 islower F -GLIBC_2.2 isnan F -GLIBC_2.2 isnanf F -GLIBC_2.2 isnanl F -GLIBC_2.2 isprint F -GLIBC_2.2 ispunct F -GLIBC_2.2 isspace F -GLIBC_2.2 isupper F -GLIBC_2.2 iswalnum F -GLIBC_2.2 iswalpha F -GLIBC_2.2 iswblank F -GLIBC_2.2 iswcntrl F -GLIBC_2.2 iswctype F -GLIBC_2.2 iswdigit F -GLIBC_2.2 iswgraph F -GLIBC_2.2 iswlower F -GLIBC_2.2 iswprint F -GLIBC_2.2 iswpunct F -GLIBC_2.2 iswspace F -GLIBC_2.2 iswupper F -GLIBC_2.2 iswxdigit F -GLIBC_2.2 isxdigit F -GLIBC_2.2 jrand48 F -GLIBC_2.2 jrand48_r F -GLIBC_2.2 key_decryptsession F -GLIBC_2.2 key_decryptsession_pk F -GLIBC_2.2 key_encryptsession F -GLIBC_2.2 key_encryptsession_pk F -GLIBC_2.2 key_gendes F -GLIBC_2.2 key_get_conv F -GLIBC_2.2 key_secretkey_is_set F -GLIBC_2.2 key_setnet F -GLIBC_2.2 key_setsecret F -GLIBC_2.2 kill F -GLIBC_2.2 killpg F -GLIBC_2.2 klogctl F -GLIBC_2.2 l64a F -GLIBC_2.2 labs F -GLIBC_2.2 lchown F -GLIBC_2.2 lckpwdf F -GLIBC_2.2 lcong48 F -GLIBC_2.2 lcong48_r F -GLIBC_2.2 ldexp F -GLIBC_2.2 ldexpf F -GLIBC_2.2 ldexpl F -GLIBC_2.2 ldiv F -GLIBC_2.2 lfind F -GLIBC_2.2 link F -GLIBC_2.2 listen F -GLIBC_2.2 llabs F -GLIBC_2.2 lldiv F -GLIBC_2.2 llseek F -GLIBC_2.2 loc1 D 0x8 -GLIBC_2.2 loc2 D 0x8 -GLIBC_2.2 localeconv F -GLIBC_2.2 localtime F -GLIBC_2.2 localtime_r F -GLIBC_2.2 lockf F -GLIBC_2.2 lockf64 F -GLIBC_2.2 locs D 0x8 -GLIBC_2.2 longjmp F -GLIBC_2.2 lrand48 F -GLIBC_2.2 lrand48_r F -GLIBC_2.2 lsearch F -GLIBC_2.2 lseek F -GLIBC_2.2 lseek64 F -GLIBC_2.2 madvise F -GLIBC_2.2 makecontext F -GLIBC_2.2 mallinfo F -GLIBC_2.2 malloc F -GLIBC_2.2 malloc_get_state F -GLIBC_2.2 malloc_set_state F -GLIBC_2.2 malloc_stats F -GLIBC_2.2 malloc_trim F -GLIBC_2.2 malloc_usable_size F -GLIBC_2.2 mallopt F -GLIBC_2.2 mallwatch D 0x8 -GLIBC_2.2 mblen F -GLIBC_2.2 mbrlen F -GLIBC_2.2 mbrtowc F -GLIBC_2.2 mbsinit F -GLIBC_2.2 mbsnrtowcs F -GLIBC_2.2 mbsrtowcs F -GLIBC_2.2 mbstowcs F -GLIBC_2.2 mbtowc F -GLIBC_2.2 mcheck F -GLIBC_2.2 mcheck_check_all F -GLIBC_2.2 mcheck_pedantic F -GLIBC_2.2 mcount F -GLIBC_2.2 memalign F -GLIBC_2.2 memccpy F -GLIBC_2.2 memchr F -GLIBC_2.2 memcmp F -GLIBC_2.2 memcpy F -GLIBC_2.2 memfrob F -GLIBC_2.2 memmem F -GLIBC_2.2 memmove F -GLIBC_2.2 mempcpy F -GLIBC_2.2 memrchr F -GLIBC_2.2 memset F -GLIBC_2.2 mincore F -GLIBC_2.2 mkdir F -GLIBC_2.2 mkdtemp F -GLIBC_2.2 mkfifo F -GLIBC_2.2 mkstemp F -GLIBC_2.2 mkstemp64 F -GLIBC_2.2 mktemp F -GLIBC_2.2 mktime F -GLIBC_2.2 mlock F -GLIBC_2.2 mlockall F -GLIBC_2.2 mmap F -GLIBC_2.2 mmap64 F -GLIBC_2.2 modf F -GLIBC_2.2 modff F -GLIBC_2.2 modfl F -GLIBC_2.2 moncontrol F -GLIBC_2.2 monstartup F -GLIBC_2.2 mount F -GLIBC_2.2 mprobe F -GLIBC_2.2 mprotect F -GLIBC_2.2 mrand48 F -GLIBC_2.2 mrand48_r F -GLIBC_2.2 mremap F -GLIBC_2.2 msgctl F -GLIBC_2.2 msgget F -GLIBC_2.2 msgrcv F -GLIBC_2.2 msgsnd F -GLIBC_2.2 msync F -GLIBC_2.2 mtrace F -GLIBC_2.2 munlock F -GLIBC_2.2 munlockall F -GLIBC_2.2 munmap F -GLIBC_2.2 muntrace F -GLIBC_2.2 nanosleep F -GLIBC_2.2 netname2host F -GLIBC_2.2 netname2user F -GLIBC_2.2 nfsservctl F -GLIBC_2.2 nftw F -GLIBC_2.2 nftw64 F -GLIBC_2.2 ngettext F -GLIBC_2.2 nice F -GLIBC_2.2 nl_langinfo F -GLIBC_2.2 nrand48 F -GLIBC_2.2 nrand48_r F -GLIBC_2.2 ntohl F -GLIBC_2.2 ntohs F -GLIBC_2.2 ntp_adjtime F -GLIBC_2.2 ntp_gettime F -GLIBC_2.2 obstack_alloc_failed_handler D 0x8 -GLIBC_2.2 obstack_exit_failure D 0x4 -GLIBC_2.2 obstack_free F -GLIBC_2.2 obstack_printf F -GLIBC_2.2 obstack_vprintf F -GLIBC_2.2 on_exit F -GLIBC_2.2 open F -GLIBC_2.2 open64 F -GLIBC_2.2 open_memstream F -GLIBC_2.2 opendir F -GLIBC_2.2 openlog F -GLIBC_2.2 optarg D 0x8 -GLIBC_2.2 opterr D 0x4 -GLIBC_2.2 optind D 0x4 -GLIBC_2.2 optopt D 0x4 -GLIBC_2.2 parse_printf_format F -GLIBC_2.2 passwd2des F -GLIBC_2.2 pathconf F -GLIBC_2.2 pause F -GLIBC_2.2 pclose F -GLIBC_2.2 perror F -GLIBC_2.2 personality F -GLIBC_2.2 pipe F -GLIBC_2.2 pmap_getmaps F -GLIBC_2.2 pmap_getport F -GLIBC_2.2 pmap_rmtcall F -GLIBC_2.2 pmap_set F -GLIBC_2.2 pmap_unset F -GLIBC_2.2 poll F -GLIBC_2.2 popen F -GLIBC_2.2 posix_fadvise F -GLIBC_2.2 posix_fadvise64 F -GLIBC_2.2 posix_fallocate F -GLIBC_2.2 posix_fallocate64 F -GLIBC_2.2 posix_madvise F -GLIBC_2.2 posix_memalign F -GLIBC_2.2 posix_spawn F -GLIBC_2.2 posix_spawn_file_actions_addclose F -GLIBC_2.2 posix_spawn_file_actions_adddup2 F -GLIBC_2.2 posix_spawn_file_actions_addopen F -GLIBC_2.2 posix_spawn_file_actions_destroy F -GLIBC_2.2 posix_spawn_file_actions_init F -GLIBC_2.2 posix_spawnattr_destroy F -GLIBC_2.2 posix_spawnattr_getflags F -GLIBC_2.2 posix_spawnattr_getpgroup F -GLIBC_2.2 posix_spawnattr_getschedparam F -GLIBC_2.2 posix_spawnattr_getschedpolicy F -GLIBC_2.2 posix_spawnattr_getsigdefault F -GLIBC_2.2 posix_spawnattr_getsigmask F -GLIBC_2.2 posix_spawnattr_init F -GLIBC_2.2 posix_spawnattr_setflags F -GLIBC_2.2 posix_spawnattr_setpgroup F -GLIBC_2.2 posix_spawnattr_setschedparam F -GLIBC_2.2 posix_spawnattr_setschedpolicy F -GLIBC_2.2 posix_spawnattr_setsigdefault F -GLIBC_2.2 posix_spawnattr_setsigmask F -GLIBC_2.2 posix_spawnp F -GLIBC_2.2 prctl F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 printf F -GLIBC_2.2 printf_size F -GLIBC_2.2 printf_size_info F -GLIBC_2.2 profil F -GLIBC_2.2 profil_counter F -GLIBC_2.2 program_invocation_name D 0x8 -GLIBC_2.2 program_invocation_short_name D 0x8 -GLIBC_2.2 pselect F -GLIBC_2.2 psignal F -GLIBC_2.2 pthread_attr_destroy F -GLIBC_2.2 pthread_attr_getdetachstate F -GLIBC_2.2 pthread_attr_getinheritsched F -GLIBC_2.2 pthread_attr_getschedparam F -GLIBC_2.2 pthread_attr_getschedpolicy F -GLIBC_2.2 pthread_attr_getscope F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 pthread_attr_setdetachstate F -GLIBC_2.2 pthread_attr_setinheritsched F -GLIBC_2.2 pthread_attr_setschedparam F -GLIBC_2.2 pthread_attr_setschedpolicy F -GLIBC_2.2 pthread_attr_setscope F -GLIBC_2.2 pthread_cond_broadcast F -GLIBC_2.2 pthread_cond_destroy F -GLIBC_2.2 pthread_cond_init F -GLIBC_2.2 pthread_cond_signal F -GLIBC_2.2 pthread_cond_timedwait F -GLIBC_2.2 pthread_cond_wait F -GLIBC_2.2 pthread_condattr_destroy F -GLIBC_2.2 pthread_condattr_init F -GLIBC_2.2 pthread_equal F -GLIBC_2.2 pthread_exit F -GLIBC_2.2 pthread_getschedparam F -GLIBC_2.2 pthread_mutex_destroy F -GLIBC_2.2 pthread_mutex_init F -GLIBC_2.2 pthread_mutex_lock F -GLIBC_2.2 pthread_mutex_unlock F -GLIBC_2.2 pthread_self F -GLIBC_2.2 pthread_setcancelstate F -GLIBC_2.2 pthread_setcanceltype F -GLIBC_2.2 pthread_setschedparam F -GLIBC_2.2 ptrace F -GLIBC_2.2 ptsname F -GLIBC_2.2 ptsname_r F -GLIBC_2.2 putc F -GLIBC_2.2 putc_unlocked F -GLIBC_2.2 putchar F -GLIBC_2.2 putchar_unlocked F -GLIBC_2.2 putenv F -GLIBC_2.2 putgrent F -GLIBC_2.2 putmsg F -GLIBC_2.2 putpmsg F -GLIBC_2.2 putpwent F -GLIBC_2.2 puts F -GLIBC_2.2 putspent F -GLIBC_2.2 pututline F -GLIBC_2.2 pututxline F -GLIBC_2.2 putw F -GLIBC_2.2 putwc F -GLIBC_2.2 putwc_unlocked F -GLIBC_2.2 putwchar F -GLIBC_2.2 putwchar_unlocked F -GLIBC_2.2 pvalloc F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 qecvt F -GLIBC_2.2 qecvt_r F -GLIBC_2.2 qfcvt F -GLIBC_2.2 qfcvt_r F -GLIBC_2.2 qgcvt F -GLIBC_2.2 qsort F -GLIBC_2.2 query_module F -GLIBC_2.2 quotactl F -GLIBC_2.2 raise F -GLIBC_2.2 rand F -GLIBC_2.2 rand_r F -GLIBC_2.2 random F -GLIBC_2.2 random_r F -GLIBC_2.2 rawmemchr F -GLIBC_2.2 rcmd F -GLIBC_2.2 rcmd_af F -GLIBC_2.2 re_comp F -GLIBC_2.2 re_compile_fastmap F -GLIBC_2.2 re_compile_pattern F -GLIBC_2.2 re_exec F -GLIBC_2.2 re_match F -GLIBC_2.2 re_match_2 F -GLIBC_2.2 re_max_failures D 0x4 -GLIBC_2.2 re_search F -GLIBC_2.2 re_search_2 F -GLIBC_2.2 re_set_registers F -GLIBC_2.2 re_set_syntax F -GLIBC_2.2 re_syntax_options D 0x8 -GLIBC_2.2 read F -GLIBC_2.2 readdir F -GLIBC_2.2 readdir64 F -GLIBC_2.2 readdir64_r F -GLIBC_2.2 readdir_r F -GLIBC_2.2 readlink F -GLIBC_2.2 readv F -GLIBC_2.2 realloc F -GLIBC_2.2 realpath F -GLIBC_2.2 reboot F -GLIBC_2.2 recv F -GLIBC_2.2 recvfrom F -GLIBC_2.2 recvmsg F -GLIBC_2.2 regcomp F -GLIBC_2.2 regerror F -GLIBC_2.2 regexec F -GLIBC_2.2 regfree F -GLIBC_2.2 register_printf_function F -GLIBC_2.2 registerrpc F -GLIBC_2.2 remove F -GLIBC_2.2 remque F -GLIBC_2.2 rename F -GLIBC_2.2 revoke F -GLIBC_2.2 rewind F -GLIBC_2.2 rewinddir F -GLIBC_2.2 rexec F -GLIBC_2.2 rexec_af F -GLIBC_2.2 rexecoptions D 0x4 -GLIBC_2.2 rindex F -GLIBC_2.2 rmdir F -GLIBC_2.2 rpc_createerr D 0x20 -GLIBC_2.2 rpmatch F -GLIBC_2.2 rresvport F -GLIBC_2.2 rresvport_af F -GLIBC_2.2 rtime F -GLIBC_2.2 ruserok F -GLIBC_2.2 ruserok_af F -GLIBC_2.2 ruserpass F -GLIBC_2.2 sbrk F -GLIBC_2.2 scalbn F -GLIBC_2.2 scalbnf F -GLIBC_2.2 scalbnl F -GLIBC_2.2 scandir F -GLIBC_2.2 scandir64 F -GLIBC_2.2 scanf F -GLIBC_2.2 sched_get_priority_max F -GLIBC_2.2 sched_get_priority_min F -GLIBC_2.2 sched_getparam F -GLIBC_2.2 sched_getscheduler F -GLIBC_2.2 sched_rr_get_interval F -GLIBC_2.2 sched_setparam F -GLIBC_2.2 sched_setscheduler F -GLIBC_2.2 sched_yield F -GLIBC_2.2 seed48 F -GLIBC_2.2 seed48_r F -GLIBC_2.2 seekdir F -GLIBC_2.2 select F -GLIBC_2.2 semctl F -GLIBC_2.2 semget F -GLIBC_2.2 semop F -GLIBC_2.2 send F -GLIBC_2.2 sendfile F -GLIBC_2.2 sendmsg F -GLIBC_2.2 sendto F -GLIBC_2.2 setaliasent F -GLIBC_2.2 setbuf F -GLIBC_2.2 setbuffer F -GLIBC_2.2 setcontext F -GLIBC_2.2 setdomainname F -GLIBC_2.2 setegid F -GLIBC_2.2 setenv F -GLIBC_2.2 seteuid F -GLIBC_2.2 setfsent F -GLIBC_2.2 setfsgid F -GLIBC_2.2 setfsuid F -GLIBC_2.2 setgid F -GLIBC_2.2 setgrent F -GLIBC_2.2 setgroups F -GLIBC_2.2 sethostent F -GLIBC_2.2 sethostid F -GLIBC_2.2 sethostname F -GLIBC_2.2 setitimer F -GLIBC_2.2 setjmp F -GLIBC_2.2 setlinebuf F -GLIBC_2.2 setlocale F -GLIBC_2.2 setlogin F -GLIBC_2.2 setlogmask F -GLIBC_2.2 setmntent F -GLIBC_2.2 setnetent F -GLIBC_2.2 setnetgrent F -GLIBC_2.2 setpgid F -GLIBC_2.2 setpgrp F -GLIBC_2.2 setpriority F -GLIBC_2.2 setprotoent F -GLIBC_2.2 setpwent F -GLIBC_2.2 setregid F -GLIBC_2.2 setresgid F -GLIBC_2.2 setresuid F -GLIBC_2.2 setreuid F -GLIBC_2.2 setrlimit F -GLIBC_2.2 setrlimit64 F -GLIBC_2.2 setrpcent F -GLIBC_2.2 setservent F -GLIBC_2.2 setsid F -GLIBC_2.2 setsockopt F -GLIBC_2.2 setspent F -GLIBC_2.2 setstate F -GLIBC_2.2 setstate_r F -GLIBC_2.2 settimeofday F -GLIBC_2.2 setttyent F -GLIBC_2.2 setuid F -GLIBC_2.2 setusershell F -GLIBC_2.2 setutent F -GLIBC_2.2 setutxent F -GLIBC_2.2 setvbuf F -GLIBC_2.2 sgetspent F -GLIBC_2.2 sgetspent_r F -GLIBC_2.2 shmat F -GLIBC_2.2 shmctl F -GLIBC_2.2 shmdt F -GLIBC_2.2 shmget F -GLIBC_2.2 shutdown F -GLIBC_2.2 sigaction F -GLIBC_2.2 sigaddset F -GLIBC_2.2 sigaltstack F -GLIBC_2.2 sigandset F -GLIBC_2.2 sigblock F -GLIBC_2.2 sigdelset F -GLIBC_2.2 sigemptyset F -GLIBC_2.2 sigfillset F -GLIBC_2.2 siggetmask F -GLIBC_2.2 sighold F -GLIBC_2.2 sigignore F -GLIBC_2.2 siginterrupt F -GLIBC_2.2 sigisemptyset F -GLIBC_2.2 sigismember F -GLIBC_2.2 siglongjmp F -GLIBC_2.2 signal F -GLIBC_2.2 sigorset F -GLIBC_2.2 sigpause F -GLIBC_2.2 sigpending F -GLIBC_2.2 sigprocmask F -GLIBC_2.2 sigqueue F -GLIBC_2.2 sigrelse F -GLIBC_2.2 sigreturn F -GLIBC_2.2 sigset F -GLIBC_2.2 sigsetmask F -GLIBC_2.2 sigstack F -GLIBC_2.2 sigsuspend F -GLIBC_2.2 sigtimedwait F -GLIBC_2.2 sigvec F -GLIBC_2.2 sigwait F -GLIBC_2.2 sigwaitinfo F -GLIBC_2.2 sleep F -GLIBC_2.2 snprintf F -GLIBC_2.2 socket F -GLIBC_2.2 socketpair F -GLIBC_2.2 sprintf F -GLIBC_2.2 srand F -GLIBC_2.2 srand48 F -GLIBC_2.2 srand48_r F -GLIBC_2.2 srandom F -GLIBC_2.2 srandom_r F -GLIBC_2.2 sscanf F -GLIBC_2.2 ssignal F -GLIBC_2.2 sstk F -GLIBC_2.2 statfs F -GLIBC_2.2 statfs64 F -GLIBC_2.2 statvfs F -GLIBC_2.2 statvfs64 F -GLIBC_2.2 stderr D 0x8 -GLIBC_2.2 stdin D 0x8 -GLIBC_2.2 stdout D 0x8 -GLIBC_2.2 step F -GLIBC_2.2 stime F -GLIBC_2.2 stpcpy F -GLIBC_2.2 stpncpy F -GLIBC_2.2 strcasecmp F -GLIBC_2.2 strcasestr F -GLIBC_2.2 strcat F -GLIBC_2.2 strchr F -GLIBC_2.2 strchrnul F -GLIBC_2.2 strcmp F -GLIBC_2.2 strcoll F -GLIBC_2.2 strcpy F -GLIBC_2.2 strcspn F -GLIBC_2.2 strdup F -GLIBC_2.2 strerror F -GLIBC_2.2 strerror_r F -GLIBC_2.2 strfmon F -GLIBC_2.2 strfry F -GLIBC_2.2 strftime F -GLIBC_2.2 strlen F -GLIBC_2.2 strncasecmp F -GLIBC_2.2 strncat F -GLIBC_2.2 strncmp F -GLIBC_2.2 strncpy F -GLIBC_2.2 strndup F -GLIBC_2.2 strnlen F -GLIBC_2.2 strpbrk F -GLIBC_2.2 strptime F -GLIBC_2.2 strrchr F -GLIBC_2.2 strsep F -GLIBC_2.2 strsignal F -GLIBC_2.2 strspn F -GLIBC_2.2 strstr F -GLIBC_2.2 strtod F -GLIBC_2.2 strtof F -GLIBC_2.2 strtoimax F -GLIBC_2.2 strtok F -GLIBC_2.2 strtok_r F -GLIBC_2.2 strtol F -GLIBC_2.2 strtold F -GLIBC_2.2 strtoll F -GLIBC_2.2 strtoq F -GLIBC_2.2 strtoul F -GLIBC_2.2 strtoull F -GLIBC_2.2 strtoumax F -GLIBC_2.2 strtouq F -GLIBC_2.2 strverscmp F -GLIBC_2.2 strxfrm F -GLIBC_2.2 stty F -GLIBC_2.2 svc_exit F -GLIBC_2.2 svc_fdset D 0x80 -GLIBC_2.2 svc_getreq F -GLIBC_2.2 svc_getreq_common F -GLIBC_2.2 svc_getreq_poll F -GLIBC_2.2 svc_getreqset F -GLIBC_2.2 svc_max_pollfd D 0x4 -GLIBC_2.2 svc_pollfd D 0x8 -GLIBC_2.2 svc_register F -GLIBC_2.2 svc_run F -GLIBC_2.2 svc_sendreply F -GLIBC_2.2 svc_unregister F -GLIBC_2.2 svcauthdes_stats D 0x18 -GLIBC_2.2 svcerr_auth F -GLIBC_2.2 svcerr_decode F -GLIBC_2.2 svcerr_noproc F -GLIBC_2.2 svcerr_noprog F -GLIBC_2.2 svcerr_progvers F -GLIBC_2.2 svcerr_systemerr F -GLIBC_2.2 svcerr_weakauth F -GLIBC_2.2 svcfd_create F -GLIBC_2.2 svcraw_create F -GLIBC_2.2 svctcp_create F -GLIBC_2.2 svcudp_bufcreate F -GLIBC_2.2 svcudp_create F -GLIBC_2.2 svcudp_enablecache F -GLIBC_2.2 svcunix_create F -GLIBC_2.2 svcunixfd_create F -GLIBC_2.2 swab F -GLIBC_2.2 swapcontext F -GLIBC_2.2 swapoff F -GLIBC_2.2 swapon F -GLIBC_2.2 swprintf F -GLIBC_2.2 swscanf F -GLIBC_2.2 symlink F -GLIBC_2.2 sync F -GLIBC_2.2 sys_errlist D 0x3f8 -GLIBC_2.2 sys_nerr D 0x4 -GLIBC_2.2 sys_sigabbrev D 0x200 -GLIBC_2.2 sys_siglist D 0x200 -GLIBC_2.2 syscall F -GLIBC_2.2 sysconf F -GLIBC_2.2 sysctl F -GLIBC_2.2 sysinfo F -GLIBC_2.2 syslog F -GLIBC_2.2 system F -GLIBC_2.2 sysv_signal F -GLIBC_2.2 tcdrain F -GLIBC_2.2 tcflow F -GLIBC_2.2 tcflush F -GLIBC_2.2 tcgetattr F -GLIBC_2.2 tcgetpgrp F -GLIBC_2.2 tcgetsid F -GLIBC_2.2 tcsendbreak F -GLIBC_2.2 tcsetattr F -GLIBC_2.2 tcsetpgrp F -GLIBC_2.2 tdelete F -GLIBC_2.2 tdestroy F -GLIBC_2.2 telldir F -GLIBC_2.2 tempnam F -GLIBC_2.2 textdomain F -GLIBC_2.2 tfind F -GLIBC_2.2 time F -GLIBC_2.2 timegm F -GLIBC_2.2 timelocal F -GLIBC_2.2 times F -GLIBC_2.2 timezone D 0x8 -GLIBC_2.2 tmpfile F -GLIBC_2.2 tmpfile64 F -GLIBC_2.2 tmpnam F -GLIBC_2.2 tmpnam_r F -GLIBC_2.2 toascii F -GLIBC_2.2 tolower F -GLIBC_2.2 toupper F -GLIBC_2.2 towctrans F -GLIBC_2.2 towlower F -GLIBC_2.2 towupper F -GLIBC_2.2 tr_break F -GLIBC_2.2 truncate F -GLIBC_2.2 truncate64 F -GLIBC_2.2 tsearch F -GLIBC_2.2 ttyname F -GLIBC_2.2 ttyname_r F -GLIBC_2.2 ttyslot F -GLIBC_2.2 twalk F -GLIBC_2.2 tzname D 0x10 -GLIBC_2.2 tzset F -GLIBC_2.2 ualarm F -GLIBC_2.2 ulckpwdf F -GLIBC_2.2 ulimit F -GLIBC_2.2 umask F -GLIBC_2.2 umount F -GLIBC_2.2 umount2 F -GLIBC_2.2 uname F -GLIBC_2.2 ungetc F -GLIBC_2.2 ungetwc F -GLIBC_2.2 unlink F -GLIBC_2.2 unlockpt F -GLIBC_2.2 unsetenv F -GLIBC_2.2 updwtmp F -GLIBC_2.2 updwtmpx F -GLIBC_2.2 uselib F -GLIBC_2.2 user2netname F -GLIBC_2.2 usleep F -GLIBC_2.2 ustat F -GLIBC_2.2 utime F -GLIBC_2.2 utimes F -GLIBC_2.2 utmpname F -GLIBC_2.2 utmpxname F -GLIBC_2.2 valloc F -GLIBC_2.2 vasprintf F -GLIBC_2.2 vdprintf F -GLIBC_2.2 verr F -GLIBC_2.2 verrx F -GLIBC_2.2 versionsort F -GLIBC_2.2 versionsort64 F -GLIBC_2.2 vfork F -GLIBC_2.2 vfprintf F -GLIBC_2.2 vfscanf F -GLIBC_2.2 vfwprintf F -GLIBC_2.2 vfwscanf F -GLIBC_2.2 vhangup F -GLIBC_2.2 vlimit F -GLIBC_2.2 vprintf F -GLIBC_2.2 vscanf F -GLIBC_2.2 vsnprintf F -GLIBC_2.2 vsprintf F -GLIBC_2.2 vsscanf F -GLIBC_2.2 vswprintf F -GLIBC_2.2 vswscanf F -GLIBC_2.2 vsyslog F -GLIBC_2.2 vtimes F -GLIBC_2.2 vwarn F -GLIBC_2.2 vwarnx F -GLIBC_2.2 vwprintf F -GLIBC_2.2 vwscanf F -GLIBC_2.2 wait F -GLIBC_2.2 wait3 F -GLIBC_2.2 wait4 F -GLIBC_2.2 waitid F -GLIBC_2.2 waitpid F -GLIBC_2.2 warn F -GLIBC_2.2 warnx F -GLIBC_2.2 wcpcpy F -GLIBC_2.2 wcpncpy F -GLIBC_2.2 wcrtomb F -GLIBC_2.2 wcscasecmp F -GLIBC_2.2 wcscat F -GLIBC_2.2 wcschr F -GLIBC_2.2 wcschrnul F -GLIBC_2.2 wcscmp F -GLIBC_2.2 wcscoll F -GLIBC_2.2 wcscpy F -GLIBC_2.2 wcscspn F -GLIBC_2.2 wcsdup F -GLIBC_2.2 wcsftime F -GLIBC_2.2 wcslen F -GLIBC_2.2 wcsncasecmp F -GLIBC_2.2 wcsncat F -GLIBC_2.2 wcsncmp F -GLIBC_2.2 wcsncpy F -GLIBC_2.2 wcsnlen F -GLIBC_2.2 wcsnrtombs F -GLIBC_2.2 wcspbrk F -GLIBC_2.2 wcsrchr F -GLIBC_2.2 wcsrtombs F -GLIBC_2.2 wcsspn F -GLIBC_2.2 wcsstr F -GLIBC_2.2 wcstod F -GLIBC_2.2 wcstof F -GLIBC_2.2 wcstoimax F -GLIBC_2.2 wcstok F -GLIBC_2.2 wcstol F -GLIBC_2.2 wcstold F -GLIBC_2.2 wcstoll F -GLIBC_2.2 wcstombs F -GLIBC_2.2 wcstoq F -GLIBC_2.2 wcstoul F -GLIBC_2.2 wcstoull F -GLIBC_2.2 wcstoumax F -GLIBC_2.2 wcstouq F -GLIBC_2.2 wcswcs F -GLIBC_2.2 wcswidth F -GLIBC_2.2 wcsxfrm F -GLIBC_2.2 wctob F -GLIBC_2.2 wctomb F -GLIBC_2.2 wctrans F -GLIBC_2.2 wctype F -GLIBC_2.2 wcwidth F -GLIBC_2.2 wmemchr F -GLIBC_2.2 wmemcmp F -GLIBC_2.2 wmemcpy F -GLIBC_2.2 wmemmove F -GLIBC_2.2 wmempcpy F -GLIBC_2.2 wmemset F -GLIBC_2.2 wordexp F -GLIBC_2.2 wordfree F -GLIBC_2.2 wprintf F -GLIBC_2.2 write F -GLIBC_2.2 writev F -GLIBC_2.2 wscanf F -GLIBC_2.2 xdecrypt F -GLIBC_2.2 xdr_accepted_reply F -GLIBC_2.2 xdr_array F -GLIBC_2.2 xdr_authdes_cred F -GLIBC_2.2 xdr_authdes_verf F -GLIBC_2.2 xdr_authunix_parms F -GLIBC_2.2 xdr_bool F -GLIBC_2.2 xdr_bytes F -GLIBC_2.2 xdr_callhdr F -GLIBC_2.2 xdr_callmsg F -GLIBC_2.2 xdr_char F -GLIBC_2.2 xdr_cryptkeyarg F -GLIBC_2.2 xdr_cryptkeyarg2 F -GLIBC_2.2 xdr_cryptkeyres F -GLIBC_2.2 xdr_des_block F -GLIBC_2.2 xdr_double F -GLIBC_2.2 xdr_enum F -GLIBC_2.2 xdr_float F -GLIBC_2.2 xdr_free F -GLIBC_2.2 xdr_getcredres F -GLIBC_2.2 xdr_hyper F -GLIBC_2.2 xdr_int F -GLIBC_2.2 xdr_int16_t F -GLIBC_2.2 xdr_int32_t F -GLIBC_2.2 xdr_int64_t F -GLIBC_2.2 xdr_int8_t F -GLIBC_2.2 xdr_key_netstarg F -GLIBC_2.2 xdr_key_netstres F -GLIBC_2.2 xdr_keybuf F -GLIBC_2.2 xdr_keystatus F -GLIBC_2.2 xdr_long F -GLIBC_2.2 xdr_longlong_t F -GLIBC_2.2 xdr_netnamestr F -GLIBC_2.2 xdr_netobj F -GLIBC_2.2 xdr_opaque F -GLIBC_2.2 xdr_opaque_auth F -GLIBC_2.2 xdr_pmap F -GLIBC_2.2 xdr_pmaplist F -GLIBC_2.2 xdr_pointer F -GLIBC_2.2 xdr_reference F -GLIBC_2.2 xdr_rejected_reply F -GLIBC_2.2 xdr_replymsg F -GLIBC_2.2 xdr_rmtcall_args F -GLIBC_2.2 xdr_rmtcallres F -GLIBC_2.2 xdr_short F -GLIBC_2.2 xdr_sizeof F -GLIBC_2.2 xdr_string F -GLIBC_2.2 xdr_u_char F -GLIBC_2.2 xdr_u_hyper F -GLIBC_2.2 xdr_u_int F -GLIBC_2.2 xdr_u_long F -GLIBC_2.2 xdr_u_longlong_t F -GLIBC_2.2 xdr_u_short F -GLIBC_2.2 xdr_uint16_t F -GLIBC_2.2 xdr_uint32_t F -GLIBC_2.2 xdr_uint64_t F -GLIBC_2.2 xdr_uint8_t F -GLIBC_2.2 xdr_union F -GLIBC_2.2 xdr_unixcred F -GLIBC_2.2 xdr_vector F -GLIBC_2.2 xdr_void F -GLIBC_2.2 xdr_wrapstring F -GLIBC_2.2 xdrmem_create F -GLIBC_2.2 xdrrec_create F -GLIBC_2.2 xdrrec_endofrecord F -GLIBC_2.2 xdrrec_eof F -GLIBC_2.2 xdrrec_skiprecord F -GLIBC_2.2 xdrstdio_create F -GLIBC_2.2 xencrypt F -GLIBC_2.2 xprt_register F -GLIBC_2.2 xprt_unregister F -GLIBC_2.2.1 GLIBC_2.2.1 A -GLIBC_2.2.1 pivot_root F -GLIBC_2.2.1 posix_openpt F -GLIBC_2.2.2 GLIBC_2.2.2 A -GLIBC_2.2.2 __nss_hostname_digits_dots F -GLIBC_2.2.2 wordexp F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 __rpc_thread_createerr F -GLIBC_2.2.3 __rpc_thread_svc_fdset F -GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.3 __rpc_thread_svc_pollfd F -GLIBC_2.2.3 fnmatch F -GLIBC_2.2.3 sprofil F -GLIBC_2.2.4 GLIBC_2.2.4 A -GLIBC_2.2.4 dl_iterate_phdr F -GLIBC_2.2.4 getgrouplist F -GLIBC_2.2.4 sockatmark F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 _sys_errlist D 0x400 -GLIBC_2.3 _sys_nerr D 0x4 -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 sys_errlist D 0x400 -GLIBC_2.3 sys_nerr D 0x4 -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x208 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 strtoll_l F -GLIBC_2.3.3 strtoull_l F -GLIBC_2.3.3 sys_sigabbrev D 0x208 -GLIBC_2.3.3 sys_siglist D 0x208 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 _sys_errlist D 0x430 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 futimesat F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sys_errlist D 0x430 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libcrypt.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libcrypt.abilist deleted file mode 100644 index 4db2639336..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 crypt F -GLIBC_2.0 crypt_r F -GLIBC_2.0 encrypt F -GLIBC_2.0 encrypt_r F -GLIBC_2.0 fcrypt F -GLIBC_2.0 setkey F -GLIBC_2.0 setkey_r F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libdl.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libdl.abilist deleted file mode 100644 index 5536f6e0a9..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libdl.abilist +++ /dev/null @@ -1,14 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 dladdr F -GLIBC_2.0 dlclose F -GLIBC_2.0 dlerror F -GLIBC_2.0 dlopen F -GLIBC_2.0 dlsym F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 dlopen F -GLIBC_2.1 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist deleted file mode 100644 index d071835880..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist +++ /dev/null @@ -1,464 +0,0 @@ -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __acoshl_finite F -GLIBC_2.15 __acosl_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __asinl_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atan2l_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __atanhl_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __coshl_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp10l_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp2l_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __expl_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __fmodl_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __gammal_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __hypotl_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j0l_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __j1l_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __jnl_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __lgammal_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log10l_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log2l_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __logl_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __powl_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __remainderl_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __scalbl_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sinhl_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __sqrtl_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y0l_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __y1l_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.15 __ynl_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _LIB_VERSION D 0x4 -GLIBC_2.2 __clog10 F -GLIBC_2.2 __clog10f F -GLIBC_2.2 __clog10l F -GLIBC_2.2 __finite F -GLIBC_2.2 __finitef F -GLIBC_2.2 __finitel F -GLIBC_2.2 __fpclassify F -GLIBC_2.2 __fpclassifyf F -GLIBC_2.2 __fpclassifyl F -GLIBC_2.2 __signbit F -GLIBC_2.2 __signbitf F -GLIBC_2.2 __signbitl F -GLIBC_2.2 acos F -GLIBC_2.2 acosf F -GLIBC_2.2 acosh F -GLIBC_2.2 acoshf F -GLIBC_2.2 acoshl F -GLIBC_2.2 acosl F -GLIBC_2.2 asin F -GLIBC_2.2 asinf F -GLIBC_2.2 asinh F -GLIBC_2.2 asinhf F -GLIBC_2.2 asinhl F -GLIBC_2.2 asinl F -GLIBC_2.2 atan F -GLIBC_2.2 atan2 F -GLIBC_2.2 atan2f F -GLIBC_2.2 atan2l F -GLIBC_2.2 atanf F -GLIBC_2.2 atanh F -GLIBC_2.2 atanhf F -GLIBC_2.2 atanhl F -GLIBC_2.2 atanl F -GLIBC_2.2 cabs F -GLIBC_2.2 cabsf F -GLIBC_2.2 cabsl F -GLIBC_2.2 cacos F -GLIBC_2.2 cacosf F -GLIBC_2.2 cacosh F -GLIBC_2.2 cacoshf F -GLIBC_2.2 cacoshl F -GLIBC_2.2 cacosl F -GLIBC_2.2 carg F -GLIBC_2.2 cargf F -GLIBC_2.2 cargl F -GLIBC_2.2 casin F -GLIBC_2.2 casinf F -GLIBC_2.2 casinh F -GLIBC_2.2 casinhf F -GLIBC_2.2 casinhl F -GLIBC_2.2 casinl F -GLIBC_2.2 catan F -GLIBC_2.2 catanf F -GLIBC_2.2 catanh F -GLIBC_2.2 catanhf F -GLIBC_2.2 catanhl F -GLIBC_2.2 catanl F -GLIBC_2.2 cbrt F -GLIBC_2.2 cbrtf F -GLIBC_2.2 cbrtl F -GLIBC_2.2 ccos F -GLIBC_2.2 ccosf F -GLIBC_2.2 ccosh F -GLIBC_2.2 ccoshf F -GLIBC_2.2 ccoshl F -GLIBC_2.2 ccosl F -GLIBC_2.2 ceil F -GLIBC_2.2 ceilf F -GLIBC_2.2 ceill F -GLIBC_2.2 cexp F -GLIBC_2.2 cexpf F -GLIBC_2.2 cexpl F -GLIBC_2.2 cimag F -GLIBC_2.2 cimagf F -GLIBC_2.2 cimagl F -GLIBC_2.2 clog F -GLIBC_2.2 clog10 F -GLIBC_2.2 clog10f F -GLIBC_2.2 clog10l F -GLIBC_2.2 clogf F -GLIBC_2.2 clogl F -GLIBC_2.2 conj F -GLIBC_2.2 conjf F -GLIBC_2.2 conjl F -GLIBC_2.2 copysign F -GLIBC_2.2 copysignf F -GLIBC_2.2 copysignl F -GLIBC_2.2 cos F -GLIBC_2.2 cosf F -GLIBC_2.2 cosh F -GLIBC_2.2 coshf F -GLIBC_2.2 coshl F -GLIBC_2.2 cosl F -GLIBC_2.2 cpow F -GLIBC_2.2 cpowf F -GLIBC_2.2 cpowl F -GLIBC_2.2 cproj F -GLIBC_2.2 cprojf F -GLIBC_2.2 cprojl F -GLIBC_2.2 creal F -GLIBC_2.2 crealf F -GLIBC_2.2 creall F -GLIBC_2.2 csin F -GLIBC_2.2 csinf F -GLIBC_2.2 csinh F -GLIBC_2.2 csinhf F -GLIBC_2.2 csinhl F -GLIBC_2.2 csinl F -GLIBC_2.2 csqrt F -GLIBC_2.2 csqrtf F -GLIBC_2.2 csqrtl F -GLIBC_2.2 ctan F -GLIBC_2.2 ctanf F -GLIBC_2.2 ctanh F -GLIBC_2.2 ctanhf F -GLIBC_2.2 ctanhl F -GLIBC_2.2 ctanl F -GLIBC_2.2 drem F -GLIBC_2.2 dremf F -GLIBC_2.2 dreml F -GLIBC_2.2 erf F -GLIBC_2.2 erfc F -GLIBC_2.2 erfcf F -GLIBC_2.2 erfcl F -GLIBC_2.2 erff F -GLIBC_2.2 erfl F -GLIBC_2.2 exp F -GLIBC_2.2 exp10 F -GLIBC_2.2 exp10f F -GLIBC_2.2 exp10l F -GLIBC_2.2 exp2 F -GLIBC_2.2 exp2f F -GLIBC_2.2 exp2l F -GLIBC_2.2 expf F -GLIBC_2.2 expl F -GLIBC_2.2 expm1 F -GLIBC_2.2 expm1f F -GLIBC_2.2 expm1l F -GLIBC_2.2 fabs F -GLIBC_2.2 fabsf F -GLIBC_2.2 fabsl F -GLIBC_2.2 fdim F -GLIBC_2.2 fdimf F -GLIBC_2.2 fdiml F -GLIBC_2.2 feclearexcept F -GLIBC_2.2 fedisableexcept F -GLIBC_2.2 feenableexcept F -GLIBC_2.2 fegetenv F -GLIBC_2.2 fegetexcept F -GLIBC_2.2 fegetexceptflag F -GLIBC_2.2 fegetround F -GLIBC_2.2 feholdexcept F -GLIBC_2.2 feraiseexcept F -GLIBC_2.2 fesetenv F -GLIBC_2.2 fesetexceptflag F -GLIBC_2.2 fesetround F -GLIBC_2.2 fetestexcept F -GLIBC_2.2 feupdateenv F -GLIBC_2.2 finite F -GLIBC_2.2 finitef F -GLIBC_2.2 finitel F -GLIBC_2.2 floor F -GLIBC_2.2 floorf F -GLIBC_2.2 floorl F -GLIBC_2.2 fma F -GLIBC_2.2 fmaf F -GLIBC_2.2 fmal F -GLIBC_2.2 fmax F -GLIBC_2.2 fmaxf F -GLIBC_2.2 fmaxl F -GLIBC_2.2 fmin F -GLIBC_2.2 fminf F -GLIBC_2.2 fminl F -GLIBC_2.2 fmod F -GLIBC_2.2 fmodf F -GLIBC_2.2 fmodl F -GLIBC_2.2 frexp F -GLIBC_2.2 frexpf F -GLIBC_2.2 frexpl F -GLIBC_2.2 gamma F -GLIBC_2.2 gammaf F -GLIBC_2.2 gammal F -GLIBC_2.2 hypot F -GLIBC_2.2 hypotf F -GLIBC_2.2 hypotl F -GLIBC_2.2 ilogb F -GLIBC_2.2 ilogbf F -GLIBC_2.2 ilogbl F -GLIBC_2.2 j0 F -GLIBC_2.2 j0f F -GLIBC_2.2 j0l F -GLIBC_2.2 j1 F -GLIBC_2.2 j1f F -GLIBC_2.2 j1l F -GLIBC_2.2 jn F -GLIBC_2.2 jnf F -GLIBC_2.2 jnl F -GLIBC_2.2 ldexp F -GLIBC_2.2 ldexpf F -GLIBC_2.2 ldexpl F -GLIBC_2.2 lgamma F -GLIBC_2.2 lgamma_r F -GLIBC_2.2 lgammaf F -GLIBC_2.2 lgammaf_r F -GLIBC_2.2 lgammal F -GLIBC_2.2 lgammal_r F -GLIBC_2.2 llrint F -GLIBC_2.2 llrintf F -GLIBC_2.2 llrintl F -GLIBC_2.2 llround F -GLIBC_2.2 llroundf F -GLIBC_2.2 llroundl F -GLIBC_2.2 log F -GLIBC_2.2 log10 F -GLIBC_2.2 log10f F -GLIBC_2.2 log10l F -GLIBC_2.2 log1p F -GLIBC_2.2 log1pf F -GLIBC_2.2 log1pl F -GLIBC_2.2 log2 F -GLIBC_2.2 log2f F -GLIBC_2.2 log2l F -GLIBC_2.2 logb F -GLIBC_2.2 logbf F -GLIBC_2.2 logbl F -GLIBC_2.2 logf F -GLIBC_2.2 logl F -GLIBC_2.2 lrint F -GLIBC_2.2 lrintf F -GLIBC_2.2 lrintl F -GLIBC_2.2 lround F -GLIBC_2.2 lroundf F -GLIBC_2.2 lroundl F -GLIBC_2.2 matherr F -GLIBC_2.2 modf F -GLIBC_2.2 modff F -GLIBC_2.2 modfl F -GLIBC_2.2 nan F -GLIBC_2.2 nanf F -GLIBC_2.2 nanl F -GLIBC_2.2 nearbyint F -GLIBC_2.2 nearbyintf F -GLIBC_2.2 nearbyintl F -GLIBC_2.2 nextafter F -GLIBC_2.2 nextafterf F -GLIBC_2.2 nextafterl F -GLIBC_2.2 nexttoward F -GLIBC_2.2 nexttowardf F -GLIBC_2.2 nexttowardl F -GLIBC_2.2 pow F -GLIBC_2.2 pow10 F -GLIBC_2.2 pow10f F -GLIBC_2.2 pow10l F -GLIBC_2.2 powf F -GLIBC_2.2 powl F -GLIBC_2.2 remainder F -GLIBC_2.2 remainderf F -GLIBC_2.2 remainderl F -GLIBC_2.2 remquo F -GLIBC_2.2 remquof F -GLIBC_2.2 remquol F -GLIBC_2.2 rint F -GLIBC_2.2 rintf F -GLIBC_2.2 rintl F -GLIBC_2.2 round F -GLIBC_2.2 roundf F -GLIBC_2.2 roundl F -GLIBC_2.2 scalb F -GLIBC_2.2 scalbf F -GLIBC_2.2 scalbl F -GLIBC_2.2 scalbln F -GLIBC_2.2 scalblnf F -GLIBC_2.2 scalblnl F -GLIBC_2.2 scalbn F -GLIBC_2.2 scalbnf F -GLIBC_2.2 scalbnl F -GLIBC_2.2 signgam D 0x4 -GLIBC_2.2 significand F -GLIBC_2.2 significandf F -GLIBC_2.2 significandl F -GLIBC_2.2 sin F -GLIBC_2.2 sincos F -GLIBC_2.2 sincosf F -GLIBC_2.2 sincosl F -GLIBC_2.2 sinf F -GLIBC_2.2 sinh F -GLIBC_2.2 sinhf F -GLIBC_2.2 sinhl F -GLIBC_2.2 sinl F -GLIBC_2.2 sqrt F -GLIBC_2.2 sqrtf F -GLIBC_2.2 sqrtl F -GLIBC_2.2 tan F -GLIBC_2.2 tanf F -GLIBC_2.2 tanh F -GLIBC_2.2 tanhf F -GLIBC_2.2 tanhl F -GLIBC_2.2 tanl F -GLIBC_2.2 tgamma F -GLIBC_2.2 tgammaf F -GLIBC_2.2 tgammal F -GLIBC_2.2 trunc F -GLIBC_2.2 truncf F -GLIBC_2.2 truncl F -GLIBC_2.2 y0 F -GLIBC_2.2 y0f F -GLIBC_2.2 y0l F -GLIBC_2.2 y1 F -GLIBC_2.2 y1f F -GLIBC_2.2 y1l F -GLIBC_2.2 yn F -GLIBC_2.2 ynf F -GLIBC_2.2 ynl F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libnsl.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libnsl.abilist deleted file mode 100644 index a23db2aeaf..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libnsl.abilist +++ /dev/null @@ -1,124 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __yp_check F -GLIBC_2.0 xdr_domainname F -GLIBC_2.0 xdr_keydat F -GLIBC_2.0 xdr_mapname F -GLIBC_2.0 xdr_peername F -GLIBC_2.0 xdr_valdat F -GLIBC_2.0 xdr_yp_buf F -GLIBC_2.0 xdr_ypbind_binding F -GLIBC_2.0 xdr_ypbind_resp F -GLIBC_2.0 xdr_ypbind_resptype F -GLIBC_2.0 xdr_ypbind_setdom F -GLIBC_2.0 xdr_ypdelete_args F -GLIBC_2.0 xdr_ypmap_parms F -GLIBC_2.0 xdr_ypmaplist F -GLIBC_2.0 xdr_yppush_status F -GLIBC_2.0 xdr_yppushresp_xfr F -GLIBC_2.0 xdr_ypreq_key F -GLIBC_2.0 xdr_ypreq_nokey F -GLIBC_2.0 xdr_ypreq_xfr F -GLIBC_2.0 xdr_ypresp_all F -GLIBC_2.0 xdr_ypresp_key_val F -GLIBC_2.0 xdr_ypresp_maplist F -GLIBC_2.0 xdr_ypresp_master F -GLIBC_2.0 xdr_ypresp_order F -GLIBC_2.0 xdr_ypresp_val F -GLIBC_2.0 xdr_ypresp_xfr F -GLIBC_2.0 xdr_ypstat F -GLIBC_2.0 xdr_ypupdate_args F -GLIBC_2.0 xdr_ypxfrstat F -GLIBC_2.0 yp_all F -GLIBC_2.0 yp_bind F -GLIBC_2.0 yp_first F -GLIBC_2.0 yp_get_default_domain F -GLIBC_2.0 yp_maplist F -GLIBC_2.0 yp_master F -GLIBC_2.0 yp_match F -GLIBC_2.0 yp_next F -GLIBC_2.0 yp_order F -GLIBC_2.0 yp_unbind F -GLIBC_2.0 yp_update F -GLIBC_2.0 ypbinderr_string F -GLIBC_2.0 yperr_string F -GLIBC_2.0 ypprot_err F -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 __free_fdresult F -GLIBC_2.1 __nis_default_access F -GLIBC_2.1 __nis_default_group F -GLIBC_2.1 __nis_default_owner F -GLIBC_2.1 __nis_default_ttl F -GLIBC_2.1 __nis_finddirectory F -GLIBC_2.1 __nis_hash F -GLIBC_2.1 __nisbind_connect F -GLIBC_2.1 __nisbind_create F -GLIBC_2.1 __nisbind_destroy F -GLIBC_2.1 __nisbind_next F -GLIBC_2.1 nis_add F -GLIBC_2.1 nis_add_entry F -GLIBC_2.1 nis_addmember F -GLIBC_2.1 nis_checkpoint F -GLIBC_2.1 nis_clone_directory F -GLIBC_2.1 nis_clone_object F -GLIBC_2.1 nis_clone_result F -GLIBC_2.1 nis_creategroup F -GLIBC_2.1 nis_destroy_object F -GLIBC_2.1 nis_destroygroup F -GLIBC_2.1 nis_dir_cmp F -GLIBC_2.1 nis_domain_of F -GLIBC_2.1 nis_domain_of_r F -GLIBC_2.1 nis_first_entry F -GLIBC_2.1 nis_free_directory F -GLIBC_2.1 nis_free_object F -GLIBC_2.1 nis_free_request F -GLIBC_2.1 nis_freenames F -GLIBC_2.1 nis_freeresult F -GLIBC_2.1 nis_freeservlist F -GLIBC_2.1 nis_freetags F -GLIBC_2.1 nis_getnames F -GLIBC_2.1 nis_getservlist F -GLIBC_2.1 nis_ismember F -GLIBC_2.1 nis_leaf_of F -GLIBC_2.1 nis_leaf_of_r F -GLIBC_2.1 nis_lerror F -GLIBC_2.1 nis_list F -GLIBC_2.1 nis_local_directory F -GLIBC_2.1 nis_local_group F -GLIBC_2.1 nis_local_host F -GLIBC_2.1 nis_local_principal F -GLIBC_2.1 nis_lookup F -GLIBC_2.1 nis_mkdir F -GLIBC_2.1 nis_modify F -GLIBC_2.1 nis_modify_entry F -GLIBC_2.1 nis_name_of F -GLIBC_2.1 nis_name_of_r F -GLIBC_2.1 nis_next_entry F -GLIBC_2.1 nis_perror F -GLIBC_2.1 nis_ping F -GLIBC_2.1 nis_print_directory F -GLIBC_2.1 nis_print_entry F -GLIBC_2.1 nis_print_group F -GLIBC_2.1 nis_print_group_entry F -GLIBC_2.1 nis_print_link F -GLIBC_2.1 nis_print_object F -GLIBC_2.1 nis_print_result F -GLIBC_2.1 nis_print_rights F -GLIBC_2.1 nis_print_table F -GLIBC_2.1 nis_read_obj F -GLIBC_2.1 nis_remove F -GLIBC_2.1 nis_remove_entry F -GLIBC_2.1 nis_removemember F -GLIBC_2.1 nis_rmdir F -GLIBC_2.1 nis_servstate F -GLIBC_2.1 nis_sperrno F -GLIBC_2.1 nis_sperror F -GLIBC_2.1 nis_sperror_r F -GLIBC_2.1 nis_stats F -GLIBC_2.1 nis_verifygroup F -GLIBC_2.1 nis_write_obj F -GLIBC_2.1 readColdStartFile F -GLIBC_2.1 writeColdStartFile F -GLIBC_2.1 xdr_cback_data F -GLIBC_2.1 xdr_obj_p F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 xdr_ypall F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist deleted file mode 100644 index d4c8dedd6c..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist +++ /dev/null @@ -1,247 +0,0 @@ -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 _IO_flockfile F -GLIBC_2.2 _IO_ftrylockfile F -GLIBC_2.2 _IO_funlockfile F -GLIBC_2.2 __close F -GLIBC_2.2 __connect F -GLIBC_2.2 __errno_location F -GLIBC_2.2 __fcntl F -GLIBC_2.2 __fork F -GLIBC_2.2 __h_errno_location F -GLIBC_2.2 __libc_allocate_rtsig F -GLIBC_2.2 __libc_current_sigrtmax F -GLIBC_2.2 __libc_current_sigrtmin F -GLIBC_2.2 __lseek F -GLIBC_2.2 __open F -GLIBC_2.2 __open64 F -GLIBC_2.2 __pread64 F -GLIBC_2.2 __pthread_getspecific F -GLIBC_2.2 __pthread_key_create F -GLIBC_2.2 __pthread_mutex_destroy F -GLIBC_2.2 __pthread_mutex_init F -GLIBC_2.2 __pthread_mutex_lock F -GLIBC_2.2 __pthread_mutex_trylock F -GLIBC_2.2 __pthread_mutex_unlock F -GLIBC_2.2 __pthread_mutexattr_destroy F -GLIBC_2.2 __pthread_mutexattr_init F -GLIBC_2.2 __pthread_mutexattr_settype F -GLIBC_2.2 __pthread_once F -GLIBC_2.2 __pthread_rwlock_destroy F -GLIBC_2.2 __pthread_rwlock_init F -GLIBC_2.2 __pthread_rwlock_rdlock F -GLIBC_2.2 __pthread_rwlock_tryrdlock F -GLIBC_2.2 __pthread_rwlock_trywrlock F -GLIBC_2.2 __pthread_rwlock_unlock F -GLIBC_2.2 __pthread_rwlock_wrlock F -GLIBC_2.2 __pthread_setspecific F -GLIBC_2.2 __pwrite64 F -GLIBC_2.2 __read F -GLIBC_2.2 __res_state F -GLIBC_2.2 __send F -GLIBC_2.2 __sigaction F -GLIBC_2.2 __vfork F -GLIBC_2.2 __wait F -GLIBC_2.2 __write F -GLIBC_2.2 _pthread_cleanup_pop F -GLIBC_2.2 _pthread_cleanup_pop_restore F -GLIBC_2.2 _pthread_cleanup_push F -GLIBC_2.2 _pthread_cleanup_push_defer F -GLIBC_2.2 accept F -GLIBC_2.2 close F -GLIBC_2.2 connect F -GLIBC_2.2 fcntl F -GLIBC_2.2 flockfile F -GLIBC_2.2 fork F -GLIBC_2.2 fsync F -GLIBC_2.2 ftrylockfile F -GLIBC_2.2 funlockfile F -GLIBC_2.2 longjmp F -GLIBC_2.2 lseek F -GLIBC_2.2 lseek64 F -GLIBC_2.2 msync F -GLIBC_2.2 nanosleep F -GLIBC_2.2 open F -GLIBC_2.2 open64 F -GLIBC_2.2 pause F -GLIBC_2.2 pread F -GLIBC_2.2 pread64 F -GLIBC_2.2 pthread_atfork F -GLIBC_2.2 pthread_attr_destroy F -GLIBC_2.2 pthread_attr_getdetachstate F -GLIBC_2.2 pthread_attr_getguardsize F -GLIBC_2.2 pthread_attr_getinheritsched F -GLIBC_2.2 pthread_attr_getschedparam F -GLIBC_2.2 pthread_attr_getschedpolicy F -GLIBC_2.2 pthread_attr_getscope F -GLIBC_2.2 pthread_attr_getstack F -GLIBC_2.2 pthread_attr_getstackaddr F -GLIBC_2.2 pthread_attr_getstacksize F -GLIBC_2.2 pthread_attr_init F -GLIBC_2.2 pthread_attr_setdetachstate F -GLIBC_2.2 pthread_attr_setguardsize F -GLIBC_2.2 pthread_attr_setinheritsched F -GLIBC_2.2 pthread_attr_setschedparam F -GLIBC_2.2 pthread_attr_setschedpolicy F -GLIBC_2.2 pthread_attr_setscope F -GLIBC_2.2 pthread_attr_setstack F -GLIBC_2.2 pthread_attr_setstackaddr F -GLIBC_2.2 pthread_attr_setstacksize F -GLIBC_2.2 pthread_barrier_destroy F -GLIBC_2.2 pthread_barrier_init F -GLIBC_2.2 pthread_barrier_wait F -GLIBC_2.2 pthread_barrierattr_destroy F -GLIBC_2.2 pthread_barrierattr_init F -GLIBC_2.2 pthread_barrierattr_setpshared F -GLIBC_2.2 pthread_cancel F -GLIBC_2.2 pthread_cond_broadcast F -GLIBC_2.2 pthread_cond_destroy F -GLIBC_2.2 pthread_cond_init F -GLIBC_2.2 pthread_cond_signal F -GLIBC_2.2 pthread_cond_timedwait F -GLIBC_2.2 pthread_cond_wait F -GLIBC_2.2 pthread_condattr_destroy F -GLIBC_2.2 pthread_condattr_getpshared F -GLIBC_2.2 pthread_condattr_init F -GLIBC_2.2 pthread_condattr_setpshared F -GLIBC_2.2 pthread_create F -GLIBC_2.2 pthread_detach F -GLIBC_2.2 pthread_equal F -GLIBC_2.2 pthread_exit F -GLIBC_2.2 pthread_getconcurrency F -GLIBC_2.2 pthread_getcpuclockid F -GLIBC_2.2 pthread_getschedparam F -GLIBC_2.2 pthread_getspecific F -GLIBC_2.2 pthread_join F -GLIBC_2.2 pthread_key_create F -GLIBC_2.2 pthread_key_delete F -GLIBC_2.2 pthread_kill F -GLIBC_2.2 pthread_kill_other_threads_np F -GLIBC_2.2 pthread_mutex_destroy F -GLIBC_2.2 pthread_mutex_init F -GLIBC_2.2 pthread_mutex_lock F -GLIBC_2.2 pthread_mutex_timedlock F -GLIBC_2.2 pthread_mutex_trylock F -GLIBC_2.2 pthread_mutex_unlock F -GLIBC_2.2 pthread_mutexattr_destroy F -GLIBC_2.2 pthread_mutexattr_getkind_np F -GLIBC_2.2 pthread_mutexattr_getpshared F -GLIBC_2.2 pthread_mutexattr_gettype F -GLIBC_2.2 pthread_mutexattr_init F -GLIBC_2.2 pthread_mutexattr_setkind_np F -GLIBC_2.2 pthread_mutexattr_setpshared F -GLIBC_2.2 pthread_mutexattr_settype F -GLIBC_2.2 pthread_once F -GLIBC_2.2 pthread_rwlock_destroy F -GLIBC_2.2 pthread_rwlock_init F -GLIBC_2.2 pthread_rwlock_rdlock F -GLIBC_2.2 pthread_rwlock_timedrdlock F -GLIBC_2.2 pthread_rwlock_timedwrlock F -GLIBC_2.2 pthread_rwlock_tryrdlock F -GLIBC_2.2 pthread_rwlock_trywrlock F -GLIBC_2.2 pthread_rwlock_unlock F -GLIBC_2.2 pthread_rwlock_wrlock F -GLIBC_2.2 pthread_rwlockattr_destroy F -GLIBC_2.2 pthread_rwlockattr_getkind_np F -GLIBC_2.2 pthread_rwlockattr_getpshared F -GLIBC_2.2 pthread_rwlockattr_init F -GLIBC_2.2 pthread_rwlockattr_setkind_np F -GLIBC_2.2 pthread_rwlockattr_setpshared F -GLIBC_2.2 pthread_self F -GLIBC_2.2 pthread_setcancelstate F -GLIBC_2.2 pthread_setcanceltype F -GLIBC_2.2 pthread_setconcurrency F -GLIBC_2.2 pthread_setschedparam F -GLIBC_2.2 pthread_setspecific F -GLIBC_2.2 pthread_sigmask F -GLIBC_2.2 pthread_spin_destroy F -GLIBC_2.2 pthread_spin_init F -GLIBC_2.2 pthread_spin_lock F -GLIBC_2.2 pthread_spin_trylock F -GLIBC_2.2 pthread_spin_unlock F -GLIBC_2.2 pthread_testcancel F -GLIBC_2.2 pthread_yield F -GLIBC_2.2 pwrite F -GLIBC_2.2 pwrite64 F -GLIBC_2.2 raise F -GLIBC_2.2 read F -GLIBC_2.2 recv F -GLIBC_2.2 recvfrom F -GLIBC_2.2 recvmsg F -GLIBC_2.2 sem_close F -GLIBC_2.2 sem_destroy F -GLIBC_2.2 sem_getvalue F -GLIBC_2.2 sem_init F -GLIBC_2.2 sem_open F -GLIBC_2.2 sem_post F -GLIBC_2.2 sem_timedwait F -GLIBC_2.2 sem_trywait F -GLIBC_2.2 sem_unlink F -GLIBC_2.2 sem_wait F -GLIBC_2.2 send F -GLIBC_2.2 sendmsg F -GLIBC_2.2 sendto F -GLIBC_2.2 sigaction F -GLIBC_2.2 siglongjmp F -GLIBC_2.2 sigwait F -GLIBC_2.2 system F -GLIBC_2.2 tcdrain F -GLIBC_2.2 vfork F -GLIBC_2.2 wait F -GLIBC_2.2 waitpid F -GLIBC_2.2 write F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 pthread_getattr_np F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_attr_setstack F -GLIBC_2.3.3 pthread_attr_setstacksize F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libresolv.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libresolv.abilist deleted file mode 100644 index 2d92a35e81..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libresolv.abilist +++ /dev/null @@ -1,100 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 __b64_ntop F -GLIBC_2.0 __b64_pton F -GLIBC_2.0 __dn_comp F -GLIBC_2.0 __dn_count_labels F -GLIBC_2.0 __dn_skipname F -GLIBC_2.0 __fp_nquery F -GLIBC_2.0 __fp_query F -GLIBC_2.0 __fp_resstat F -GLIBC_2.0 __hostalias F -GLIBC_2.0 __loc_aton F -GLIBC_2.0 __loc_ntoa F -GLIBC_2.0 __p_cdname F -GLIBC_2.0 __p_cdnname F -GLIBC_2.0 __p_class F -GLIBC_2.0 __p_class_syms D 0xa8 -GLIBC_2.0 __p_fqname F -GLIBC_2.0 __p_fqnname F -GLIBC_2.0 __p_option F -GLIBC_2.0 __p_query F -GLIBC_2.0 __p_secstodate F -GLIBC_2.0 __p_time F -GLIBC_2.0 __p_type F -GLIBC_2.0 __p_type_syms D 0x450 -GLIBC_2.0 __putlong F -GLIBC_2.0 __putshort F -GLIBC_2.0 __res_close F -GLIBC_2.0 __res_dnok F -GLIBC_2.0 __res_hnok F -GLIBC_2.0 __res_isourserver F -GLIBC_2.0 __res_mailok F -GLIBC_2.0 __res_nameinquery F -GLIBC_2.0 __res_ownok F -GLIBC_2.0 __res_queriesmatch F -GLIBC_2.0 __res_send F -GLIBC_2.0 __sym_ntop F -GLIBC_2.0 __sym_ntos F -GLIBC_2.0 __sym_ston F -GLIBC_2.0 _gethtbyaddr F -GLIBC_2.0 _gethtbyname F -GLIBC_2.0 _gethtbyname2 F -GLIBC_2.0 _gethtent F -GLIBC_2.0 _getlong F -GLIBC_2.0 _getshort F -GLIBC_2.0 _res_opcodes D 0x80 -GLIBC_2.0 _sethtent F -GLIBC_2.0 dn_expand F -GLIBC_2.0 inet_net_ntop F -GLIBC_2.0 inet_net_pton F -GLIBC_2.0 inet_neta F -GLIBC_2.0 res_gethostbyaddr F -GLIBC_2.0 res_gethostbyname F -GLIBC_2.0 res_gethostbyname2 F -GLIBC_2.0 res_mkquery F -GLIBC_2.0 res_query F -GLIBC_2.0 res_querydomain F -GLIBC_2.0 res_search F -GLIBC_2.0 res_send_setqhook F -GLIBC_2.0 res_send_setrhook F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 __dn_expand F -GLIBC_2.2 __res_hostalias F -GLIBC_2.2 __res_mkquery F -GLIBC_2.2 __res_nmkquery F -GLIBC_2.2 __res_nquery F -GLIBC_2.2 __res_nquerydomain F -GLIBC_2.2 __res_nsearch F -GLIBC_2.2 __res_nsend F -GLIBC_2.2 __res_query F -GLIBC_2.2 __res_querydomain F -GLIBC_2.2 __res_search F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/librt.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/librt.abilist deleted file mode 100644 index 8699f6ccc4..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/librt.abilist +++ /dev/null @@ -1,56 +0,0 @@ -GLIBC_2.1 GLIBC_2.1 A -GLIBC_2.1 aio_cancel F -GLIBC_2.1 aio_cancel64 F -GLIBC_2.1 aio_error F -GLIBC_2.1 aio_error64 F -GLIBC_2.1 aio_fsync F -GLIBC_2.1 aio_fsync64 F -GLIBC_2.1 aio_init F -GLIBC_2.1 aio_read F -GLIBC_2.1 aio_read64 F -GLIBC_2.1 aio_return F -GLIBC_2.1 aio_return64 F -GLIBC_2.1 aio_suspend F -GLIBC_2.1 aio_suspend64 F -GLIBC_2.1 aio_write F -GLIBC_2.1 aio_write64 F -GLIBC_2.1 lio_listio F -GLIBC_2.1 lio_listio64 F -GLIBC_2.2 GLIBC_2.2 A -GLIBC_2.2 clock_getcpuclockid F -GLIBC_2.2 clock_getres F -GLIBC_2.2 clock_gettime F -GLIBC_2.2 clock_nanosleep F -GLIBC_2.2 clock_settime F -GLIBC_2.2 shm_open F -GLIBC_2.2 shm_unlink F -GLIBC_2.2 timer_create F -GLIBC_2.2 timer_delete F -GLIBC_2.2 timer_getoverrun F -GLIBC_2.2 timer_gettime F -GLIBC_2.2 timer_settime F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 aio_cancel F -GLIBC_2.3 aio_cancel64 F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 timer_create F -GLIBC_2.3.3 timer_delete F -GLIBC_2.3.3 timer_getoverrun F -GLIBC_2.3.3 timer_gettime F -GLIBC_2.3.3 timer_settime F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libthread_db.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libthread_db.abilist deleted file mode 100644 index a8a8c2c68d..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libthread_db.abilist +++ /dev/null @@ -1,44 +0,0 @@ -GLIBC_2.1.3 GLIBC_2.1.3 A -GLIBC_2.1.3 td_init F -GLIBC_2.1.3 td_log F -GLIBC_2.1.3 td_ta_clear_event F -GLIBC_2.1.3 td_ta_delete F -GLIBC_2.1.3 td_ta_enable_stats F -GLIBC_2.1.3 td_ta_event_addr F -GLIBC_2.1.3 td_ta_event_getmsg F -GLIBC_2.1.3 td_ta_get_nthreads F -GLIBC_2.1.3 td_ta_get_ph F -GLIBC_2.1.3 td_ta_get_stats F -GLIBC_2.1.3 td_ta_map_id2thr F -GLIBC_2.1.3 td_ta_map_lwp2thr F -GLIBC_2.1.3 td_ta_new F -GLIBC_2.1.3 td_ta_reset_stats F -GLIBC_2.1.3 td_ta_set_event F -GLIBC_2.1.3 td_ta_setconcurrency F -GLIBC_2.1.3 td_ta_thr_iter F -GLIBC_2.1.3 td_ta_tsd_iter F -GLIBC_2.1.3 td_thr_clear_event F -GLIBC_2.1.3 td_thr_dbresume F -GLIBC_2.1.3 td_thr_dbsuspend F -GLIBC_2.1.3 td_thr_event_enable F -GLIBC_2.1.3 td_thr_event_getmsg F -GLIBC_2.1.3 td_thr_get_info F -GLIBC_2.1.3 td_thr_getfpregs F -GLIBC_2.1.3 td_thr_getgregs F -GLIBC_2.1.3 td_thr_getxregs F -GLIBC_2.1.3 td_thr_getxregsize F -GLIBC_2.1.3 td_thr_set_event F -GLIBC_2.1.3 td_thr_setfpregs F -GLIBC_2.1.3 td_thr_setgregs F -GLIBC_2.1.3 td_thr_setprio F -GLIBC_2.1.3 td_thr_setsigpending F -GLIBC_2.1.3 td_thr_setxregs F -GLIBC_2.1.3 td_thr_sigsetmask F -GLIBC_2.1.3 td_thr_tsd F -GLIBC_2.1.3 td_thr_validate F -GLIBC_2.2.3 GLIBC_2.2.3 A -GLIBC_2.2.3 td_symbol_list F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libutil.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libutil.abilist deleted file mode 100644 index 89c67755c4..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.0 GLIBC_2.0 A -GLIBC_2.0 forkpty F -GLIBC_2.0 login F -GLIBC_2.0 login_tty F -GLIBC_2.0 logout F -GLIBC_2.0 logwtmp F -GLIBC_2.0 openpty F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data b/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data deleted file mode 100644 index 912bd1a16e..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data +++ /dev/null @@ -1,29 +0,0 @@ -libc.so: _Qp_add ? -libc.so: _Qp_cmp ? -libc.so: _Qp_div ? -libc.so: _Qp_feq ? -libc.so: _Qp_fge ? -libc.so: _Qp_fle ? -libc.so: _Qp_flt ? -libc.so: _Qp_fne ? -libc.so: _Qp_itoq ? -libc.so: _Qp_mul ? -libc.so: _Qp_qtod ? -libc.so: _Qp_sub ? -libc.so: _Qp_xtoq ? -libc.so: _Unwind_Find_FDE -libc.so: calloc -libc.so: free -libc.so: malloc -libc.so: memalign -libc.so: realloc -libm.so: matherr -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc -ld.so: calloc -ld.so: realloc -ld.so: free -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error -ld.so: _dl_catch_error diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S deleted file mode 100644 index 770e4def41..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@tamu.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* longjmp is implemented in terms of the setcontext trap on Linux/Sparc64. */ - -#include - -/* Offsets into the jmp_buf structure. */ - -#define O_mask_was_saved 512 -#define O_gregs 32 -#define O_g1 (O_gregs + 4*8) - - -/* void longjmp (sigjmp_buf env, int val) */ - -ENTRY(__libc_siglongjmp) - - /* Modify the context with the value we want to return. */ - movre %o1, 1, %o1 - stx %o1, [%o0 + O_g1] - - /* Let setcontext know if we want to modify the current sigmask. */ - ld [%o0 + O_mask_was_saved], %o1 - - /* And bamf back to where we belong! */ - ta 0x6f - -END(__libc_siglongjmp) - -strong_alias(__libc_siglongjmp, __longjmp) -strong_alias(__libc_siglongjmp, __libc_longjmp) -libc_hidden_def (__libc_longjmp) -weak_alias (__libc_siglongjmp, longjmp) -weak_alias (__libc_siglongjmp, _longjmp) -weak_alias (__libc_siglongjmp, siglongjmp) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/lxstat.c b/sysdeps/unix/sysv/linux/sparc/sparc64/lxstat.c deleted file mode 100644 index 7f1e98e433..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/lxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../i386/lxstat.c" diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c b/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c deleted file mode 100644 index ca174d01c1..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -extern void __start_context (struct ucontext *ucp); - -void -__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) -{ - extern void __makecontext_ret (void); - unsigned long *sp, *topsp; - va_list ap; - int i; - - sp = (unsigned long *) ((long) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); - sp -= (argc > 6 ? argc : 6) + 32; - sp = (unsigned long *) (((long) sp) & -16L); - topsp = sp + (argc > 6 ? argc : 6) + 16; - - ucp->uc_mcontext.mc_gregs[MC_PC] = (long) func; - ucp->uc_mcontext.mc_gregs[MC_NPC] = ((long) func) + 4; - ucp->uc_mcontext.mc_gregs[MC_O6] = ((long) sp) - 0x7ff; - ucp->uc_mcontext.mc_gregs[MC_O7] = ((long) __start_context) - 8; - ucp->uc_mcontext.mc_fp = ((long) topsp) - 0x7ff; - ucp->uc_mcontext.mc_i7 = 0; - topsp[14] = 0; - topsp[15] = 0; - sp[8] = (long) ucp->uc_link; - va_start (ap, argc); - for (i = 0; i < argc; ++i) - if (i < 6) - ucp->uc_mcontext.mc_gregs[MC_O0 + i] = va_arg (ap, long); - else - sp[16 + i] = va_arg (ap, long); - va_end (ap); -} - -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/personality.c b/sysdeps/unix/sysv/linux/sparc/sparc64/personality.c deleted file mode 100644 index 250e501d91..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/personality.c +++ /dev/null @@ -1,3 +0,0 @@ -/* Work around sign extension bug in the kernel. */ -#define PERSONALITY_TRUNCATE_ARGUMENT -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S b/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S deleted file mode 100644 index 83394cd3d0..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Miguel de Icaza , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text - - .globl __syscall_error -ENTRY(__libc_pipe) - mov %o0, %o2 /* Save PIPEDES. */ - LOADSYSCALL(pipe) - ta 0x6d - bcc,pt %xcc, 1f - mov %o7, %g1 - call __syscall_error - mov %g1, %o7 -1: st %o0, [%o2] /* PIPEDES[0] = %o0; */ - st %o1, [%o2 + 4] /* PIPEDES[1] = %o1; */ - retl - clr %o0 -END(__libc_pipe) - -weak_alias (__libc_pipe, __pipe) -libc_hidden_def (__pipe) -weak_alias (__libc_pipe, pipe) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/profil-counter.h b/sysdeps/unix/sysv/linux/sparc/sparc64/profil-counter.h deleted file mode 100644 index e68083b63d..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/profil-counter.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Low-level statistical profiling support function. Linux/Sparc64 version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -void -__profil_counter (int signo, struct sigcontext *si) -{ - profil_count ((void *) si->sigc_regs.tpc); -} -#ifndef __profil_counter -weak_alias (__profil_counter, profil_counter) -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/register-dump.h b/sysdeps/unix/sysv/linux/sparc/sparc64/register-dump.h deleted file mode 100644 index 7f1d85471e..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/register-dump.h +++ /dev/null @@ -1,256 +0,0 @@ -/* Dump registers. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include <_itoa.h> - -/* We will print the register dump in this format: - - TSTATE: XXXXXXXXXXXXXXXX TPC: XXXXXXXXXXXXXXXX TNPC: XXXXXXXXXXXXXXXX - Y: XXXXXXXX - g0: 0000000000000000 g1: XXXXXXXXXXXXXXXX g2: XXXXXXXXXXXXXXXX - g3: XXXXXXXXXXXXXXXX g4: XXXXXXXXXXXXXXXX g5: XXXXXXXXXXXXXXXX - g6: XXXXXXXXXXXXXXXX g7: XXXXXXXXXXXXXXXX - o0: XXXXXXXXXXXXXXXX o1: XXXXXXXXXXXXXXXX o2: XXXXXXXXXXXXXXXX - o3: XXXXXXXXXXXXXXXX o4: XXXXXXXXXXXXXXXX o5: XXXXXXXXXXXXXXXX - sp: XXXXXXXXXXXXXXXX o7: XXXXXXXXXXXXXXXX - l0: XXXXXXXXXXXXXXXX l1: XXXXXXXXXXXXXXXX l2: XXXXXXXXXXXXXXXX - l3: XXXXXXXXXXXXXXXX l4: XXXXXXXXXXXXXXXX l5: XXXXXXXXXXXXXXXX - l6: XXXXXXXXXXXXXXXX l7: XXXXXXXXXXXXXXXX - i0: XXXXXXXXXXXXXXXX i1: XXXXXXXXXXXXXXXX i2: XXXXXXXXXXXXXXXX - i3: XXXXXXXXXXXXXXXX i4: XXXXXXXXXXXXXXXX i5: XXXXXXXXXXXXXXXX - fp: XXXXXXXXXXXXXXXX i7: XXXXXXXXXXXXXXXX - - Mask: XXXXXXXXXXXXXXXX XFSR: XXXXXXXXXXXXXXXX GSR: XX FPRS: X - f0: XXXXXXXXXXXXXXXX f2: XXXXXXXXXXXXXXXX f4: XXXXXXXXXXXXXXXX - f6: XXXXXXXXXXXXXXXX f8: XXXXXXXXXXXXXXXX f10: XXXXXXXXXXXXXXXX - f12: XXXXXXXXXXXXXXXX f14: XXXXXXXXXXXXXXXX f16: XXXXXXXXXXXXXXXX - f18: XXXXXXXXXXXXXXXX f20: XXXXXXXXXXXXXXXX f22: XXXXXXXXXXXXXXXX - f24: XXXXXXXXXXXXXXXX f26: XXXXXXXXXXXXXXXX f28: XXXXXXXXXXXXXXXX - f30: XXXXXXXXXXXXXXXX f32: XXXXXXXXXXXXXXXX f34: XXXXXXXXXXXXXXXX - f36: XXXXXXXXXXXXXXXX f38: XXXXXXXXXXXXXXXX f40: XXXXXXXXXXXXXXXX - f42: XXXXXXXXXXXXXXXX f44: XXXXXXXXXXXXXXXX f46: XXXXXXXXXXXXXXXX - f48: XXXXXXXXXXXXXXXX f50: XXXXXXXXXXXXXXXX f52: XXXXXXXXXXXXXXXX - f54: XXXXXXXXXXXXXXXX f56: XXXXXXXXXXXXXXXX f58: XXXXXXXXXXXXXXXX - f60: XXXXXXXXXXXXXXXX f62: XXXXXXXXXXXXXXXX - - */ - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -register_dump (int fd, SIGCONTEXT ctx) -{ - char regs[36][16]; - char fregs[68][8]; - struct iovec iov[150]; - size_t nr = 0; - int i; - unsigned long *r = (unsigned long *) - (ctx->sigc_regs.u_regs[14] + STACK_BIAS); - __siginfo_fpu_t *f; - -#define ADD_STRING(str) \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr -#define ADD_MEM(str, len) \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr - - /* Generate strings of register contents. */ - hexvalue (ctx->sigc_regs.tstate, regs[0], 16); - hexvalue (ctx->sigc_regs.tpc, regs[1], 16); - hexvalue (ctx->sigc_regs.tnpc, regs[2], 16); - hexvalue (ctx->sigc_regs.y, regs[3], 8); - for (i = 1; i <= 15; i++) - hexvalue (ctx->sigc_regs.u_regs[i], regs[3+i], 16); - for (i = 0; i <= 15; i++) - hexvalue (r[i], regs[19+i], 16); - hexvalue (ctx->sigc_mask, regs[35], 16); - - /* Generate the output. */ - ADD_STRING ("Register dump:\n\n TSTATE: "); - ADD_MEM (regs[0], 16); - ADD_STRING (" TPC: "); - ADD_MEM (regs[1], 16); - ADD_STRING (" TNPC: "); - ADD_MEM (regs[2], 16); - ADD_STRING ("\n Y: "); - ADD_MEM (regs[3], 8); - ADD_STRING ("\n g0: 0000000000000000 g1: "); - ADD_MEM (regs[4], 16); - ADD_STRING (" g2: "); - ADD_MEM (regs[5], 16); - ADD_STRING ("\n g3: "); - ADD_MEM (regs[6], 16); - ADD_STRING (" g4: "); - ADD_MEM (regs[7], 16); - ADD_STRING (" g5: "); - ADD_MEM (regs[8], 16); - ADD_STRING ("\n g6: "); - ADD_MEM (regs[9], 16); - ADD_STRING (" g7: "); - ADD_MEM (regs[10], 16); - ADD_STRING ("\n o0: "); - ADD_MEM (regs[11], 16); - ADD_STRING (" o1: "); - ADD_MEM (regs[12], 16); - ADD_STRING (" o2: "); - ADD_MEM (regs[13], 16); - ADD_STRING ("\n o3: "); - ADD_MEM (regs[14], 16); - ADD_STRING (" o4: "); - ADD_MEM (regs[15], 16); - ADD_STRING (" o5: "); - ADD_MEM (regs[16], 16); - ADD_STRING ("\n sp: "); - ADD_MEM (regs[17], 16); - ADD_STRING (" o7: "); - ADD_MEM (regs[18], 16); - ADD_STRING ("\n l0: "); - ADD_MEM (regs[19], 16); - ADD_STRING (" l1: "); - ADD_MEM (regs[20], 16); - ADD_STRING (" l2: "); - ADD_MEM (regs[21], 16); - ADD_STRING ("\n l3: "); - ADD_MEM (regs[22], 16); - ADD_STRING (" l4: "); - ADD_MEM (regs[23], 16); - ADD_STRING (" l5: "); - ADD_MEM (regs[24], 16); - ADD_STRING ("\n l6: "); - ADD_MEM (regs[25], 16); - ADD_STRING (" l7: "); - ADD_MEM (regs[26], 16); - ADD_STRING ("\n i0: "); - ADD_MEM (regs[27], 16); - ADD_STRING (" i1: "); - ADD_MEM (regs[28], 16); - ADD_STRING (" i2: "); - ADD_MEM (regs[29], 16); - ADD_STRING ("\n i3: "); - ADD_MEM (regs[30], 16); - ADD_STRING (" i4: "); - ADD_MEM (regs[31], 16); - ADD_STRING (" i5: "); - ADD_MEM (regs[32], 16); - ADD_STRING ("\n fp: "); - ADD_MEM (regs[33], 16); - ADD_STRING (" i7: "); - ADD_MEM (regs[34], 16); - ADD_STRING ("\n\n Mask: "); - ADD_MEM (regs[35], 16); - - f = ctx->sigc_fpu_save; - if (f != NULL) - { - for (i = 0; i < 64; i++) - hexvalue (f->si_float_regs[i], fregs[i], 8); - hexvalue (f->si_fsr, fregs[64], 16); - hexvalue (f->si_gsr, fregs[66], 2); - hexvalue (f->si_fprs, fregs[67], 1); - ADD_STRING (" XFSR: "); - ADD_MEM (fregs[64], 16); - ADD_STRING (" GSR: "); - ADD_MEM (fregs[66], 2); - ADD_STRING (" FPRS: "); - ADD_MEM (fregs[67], 1); - ADD_STRING ("\n f0: "); - ADD_MEM (fregs[0], 16); - ADD_STRING (" f2: "); - ADD_MEM (fregs[2], 16); - ADD_STRING (" f4: "); - ADD_MEM (fregs[4], 16); - ADD_STRING ("\n f6: "); - ADD_MEM (fregs[6], 16); - ADD_STRING (" f8: "); - ADD_MEM (fregs[8], 16); - ADD_STRING (" f10: "); - ADD_MEM (fregs[10], 16); - ADD_STRING ("\n f12: "); - ADD_MEM (fregs[12], 16); - ADD_STRING (" f14: "); - ADD_MEM (fregs[14], 16); - ADD_STRING (" f16: "); - ADD_MEM (fregs[16], 16); - ADD_STRING ("\n f18: "); - ADD_MEM (fregs[18], 16); - ADD_STRING (" f20: "); - ADD_MEM (fregs[20], 16); - ADD_STRING (" f22: "); - ADD_MEM (fregs[22], 16); - ADD_STRING ("\n f24: "); - ADD_MEM (fregs[24], 16); - ADD_STRING (" f26: "); - ADD_MEM (fregs[26], 16); - ADD_STRING (" f28: "); - ADD_MEM (fregs[28], 16); - ADD_STRING ("\n f30: "); - ADD_MEM (fregs[30], 16); - ADD_STRING (" f32: "); - ADD_MEM (fregs[32], 16); - ADD_STRING (" f34: "); - ADD_MEM (fregs[34], 16); - ADD_STRING ("\n f36: "); - ADD_MEM (fregs[36], 16); - ADD_STRING (" f38: "); - ADD_MEM (fregs[38], 16); - ADD_STRING (" f40: "); - ADD_MEM (fregs[40], 16); - ADD_STRING ("\n f42: "); - ADD_MEM (fregs[42], 16); - ADD_STRING (" f44: "); - ADD_MEM (fregs[44], 16); - ADD_STRING (" f46: "); - ADD_MEM (fregs[46], 16); - ADD_STRING ("\n f48: "); - ADD_MEM (fregs[48], 16); - ADD_STRING (" f50: "); - ADD_MEM (fregs[50], 16); - ADD_STRING (" f52: "); - ADD_MEM (fregs[52], 16); - ADD_STRING ("\n f54: "); - ADD_MEM (fregs[54], 16); - ADD_STRING (" f56: "); - ADD_MEM (fregs[56], 16); - ADD_STRING (" f58: "); - ADD_MEM (fregs[58], 16); - ADD_STRING ("\n f60: "); - ADD_MEM (fregs[60], 16); - ADD_STRING (" f62: "); - ADD_MEM (fregs[62], 16); - } - - ADD_STRING ("\n"); - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, ctx) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S b/sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S deleted file mode 100644 index 085db5c0ee..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@tamu.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "ucontext_i.h" - -/* int setcontext(ucontext_t *ctx); */ -.weak setcontext -ENTRY(setcontext) - - ba,pt %xcc, 1f - mov 1, %o1 - -END(setcontext) - -/* int __setcontext(ucontext_t *ctx, int restoremask); */ -ENTRY(__setcontext) - -1: ldx [%o0 + UC_SIGMASK], %o2 - stx %o2, [%o0 + __UC_SIGMASK] - ta 0x6f - -END(__setcontext) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S deleted file mode 100644 index ba32db9c93..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/setjmp.S +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@tamu.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* __sigsetjmp is implemented in terms of the getcontext trap on - Linux/Sparc64. */ - -#include - -/* Offsets into the jmp_buf structure. */ - -#define O_mask_was_saved 512 -#define O_gregs 32 -#define O_g1 (O_gregs + 4*8) - -/* int _setjmp(jmp_buf) */ - -ENTRY(_setjmp) - ba __sigsetjmp_local - set 0, %o1 -END(_setjmp) -libc_hidden_def (_setjmp) - -/* int setjmp(jmp_buf) */ - -ENTRY(setjmp) - ba,pt %xcc, __sigsetjmp_local - set 1, %o1 -END(setjmp) - -/* int __sigsetjmp(jmp_buf, savemask) */ - -ENTRY(__sigsetjmp) -__sigsetjmp_local: - - /* Record whether the user is intending to save the sigmask. */ - st %o1, [%o0 + O_mask_was_saved] - - /* Load up our return value, as longjmp is going to override - the jmp_buf on its way back. */ - mov %g0, %g1 - - /* And call getcontext! */ - ta 0x6e - - retl - mov %g1, %o0 - -END(__sigsetjmp) -hidden_def (__sigsetjmp) - -weak_extern(_setjmp) -weak_extern(setjmp) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/shlib-versions b/sysdeps/unix/sysv/linux/sparc/sparc64/shlib-versions deleted file mode 100644 index 9333bbd7a3..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/shlib-versions +++ /dev/null @@ -1,5 +0,0 @@ -libm=6 GLIBC_2.2 -libc=6 GLIBC_2.2 -ld=ld-linux.so.2 GLIBC_2.2 -libBrokenLocale=1 GLIBC_2.2 -libpthread=0 GLIBC_2.2 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c b/sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c deleted file mode 100644 index 78f8a18907..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c +++ /dev/null @@ -1,78 +0,0 @@ -/* POSIX.1 sigaction call for Linux/SPARC64. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Miguel de Icaza and - Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#include - -/* SPARC 64bit userland requires a kernel that has rt signals anyway. */ - -static void __rt_sigreturn_stub (void); - -int -__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) -{ - int ret; - struct kernel_sigaction kact, koact; - unsigned long stub = ((unsigned long) &__rt_sigreturn_stub) - 8; - - if (act) - { - kact.k_sa_handler = act->sa_handler; - memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t)); - kact.sa_flags = act->sa_flags; - kact.sa_restorer = NULL; - } - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - ret = INLINE_SYSCALL (rt_sigaction, 5, sig, - act ? &kact : 0, - oact ? &koact : 0, stub, _NSIG / 8); - - if (oact && ret >= 0) - { - oact->sa_handler = koact.k_sa_handler; - memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t)); - oact->sa_flags = koact.sa_flags; - oact->sa_restorer = koact.sa_restorer; - } - - return ret; -} -libc_hidden_def (__libc_sigaction) - -#include - - -static -inhibit_stack_protector -void -__rt_sigreturn_stub (void) -{ - __asm__ ("mov %0, %%g1\n\t" - "ta 0x6d\n\t" - : /* no outputs */ - : "i" (__NR_rt_sigreturn)); -} diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sigcontextinfo.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sigcontextinfo.h deleted file mode 100644 index ba53b4a6e2..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sigcontextinfo.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef STACK_BIAS -#define STACK_BIAS 2047 -#endif -#define SIGCONTEXT struct sigcontext * -#define SIGCONTEXT_EXTRA_ARGS -#define GET_PC(__ctx) ((void *) ((__ctx)->sigc_regs.tpc)) -#define ADVANCE_STACK_FRAME(__next) \ - ((void *) (((unsigned long *) (((unsigned long int) (__next)) \ - + STACK_BIAS))+14)) -#define GET_STACK(__ctx) ((void *) ((__ctx)->sigc_regs.u_regs[14])) -#define GET_FRAME(__ctx) ADVANCE_STACK_FRAME (GET_STACK (__ctx)) -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sigjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/sigjmp.S deleted file mode 100644 index 940ccbcf68..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sigjmp.S +++ /dev/null @@ -1 +0,0 @@ -/* There is no need for __sigjmp_save what with getcontext. */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sigpending.c b/sysdeps/unix/sysv/linux/sparc/sparc64/sigpending.c deleted file mode 100644 index 7e82927435..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sigpending.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -/* Change the set of blocked signals to SET, - wait until a signal arrives, and restore the set of blocked signals. */ -int -sigpending (sigset_t *set) -{ - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - return INLINE_SYSCALL (rt_sigpending, 2, set, _NSIG / 8); -} diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sigprocmask.c b/sysdeps/unix/sysv/linux/sparc/sparc64/sigprocmask.c deleted file mode 100644 index c2205d0044..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sigprocmask.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -/* Get and/or change the set of blocked signals. */ -int -__sigprocmask (int how, const sigset_t *set, sigset_t *oset) -{ - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - return INLINE_SYSCALL (rt_sigprocmask, 4, how, set, oset, _NSIG / 8); -} -weak_alias (__sigprocmask, sigprocmask) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sizes.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sizes.h deleted file mode 100644 index 24915f6cfb..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sizes.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SIZES_H -#define _SIZES_H 1 - -#define PTR_SIZE_STR "8" - -#endif /* sizes.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c b/sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c deleted file mode 100644 index e871ea3d12..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -extern int __getcontext (ucontext_t *ucp); -extern int __setcontext (const ucontext_t *ucp, int restoremask); - -int -__swapcontext (ucontext_t *oucp, const ucontext_t *ucp) -{ - extern void __swapcontext_ret (void); - /* Save the current machine context to oucp. */ - __getcontext (oucp); - /* Modify oucp to skip the __setcontext call on reactivation. */ - oucp->uc_mcontext.mc_gregs[MC_PC] = (long) __swapcontext_ret; - oucp->uc_mcontext.mc_gregs[MC_NPC] = ((long) __swapcontext_ret) + 4; - /* Restore the machine context in ucp. */ - __setcontext (ucp, 1); - return 0; -} - -asm (" \n\ - .text \n\ - .type __swapcontext_ret, #function \n\ -__swapcontext_ret: \n\ - return %i7 + 8 \n\ - clr %o0 \n\ - .size __swapcontext_ret, .-__swapcontext_ret \n\ - "); - -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S b/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S deleted file mode 100644 index ac14a7e7de..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - .text - - .globl __syscall_error -ENTRY(syscall) - mov %o0,%g1 - mov %o1,%o0 - mov %o2,%o1 - mov %o3,%o2 - mov %o4,%o3 - mov %o5,%o4 - ldx [%sp + STACK_BIAS + 176],%o5 - - ta 0x6d - - bcc,pt %xcc, 1f - mov %o7, %g1 - call __syscall_error - mov %g1, %o7 -1: retl - nop -END(syscall) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list deleted file mode 100644 index 33082f31eb..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list +++ /dev/null @@ -1,10 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -bind - bind 3 __bind bind -getpeername - getpeername 3 __getpeername getpeername -getsockname - getsockname 3 __getsockname getsockname -getsockopt - getsockopt 5 __getsockopt getsockopt -listen - listen 2 __listen listen -setsockopt - setsockopt 5 __setsockopt setsockopt -shutdown - shutdown 2 __shutdown shutdown -socketpair - socketpair 4 __socketpair socketpair diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h deleted file mode 100644 index 45fbd737e0..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ - .globl __syscall_error; \ -ENTRY(name) \ - ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\ - brnz,pn %g1, 1f; \ -.type __##syscall_name##_nocancel,@function; \ -.globl __##syscall_name##_nocancel; \ -__##syscall_name##_nocancel: \ - mov SYS_ify(syscall_name), %g1; \ - ta 0x6d; \ - bcc,pt %xcc, 8f; \ - mov %o7, %g1; \ - call __syscall_error; \ - mov %g1, %o7; \ -8: jmpl %o7 + 8, %g0; \ - nop; \ -.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\ -1: save %sp, -192, %sp; \ - cfi_def_cfa_register(%fp); \ - cfi_window_save; \ - cfi_register(%o7, %i7); \ - CENABLE; \ - nop; \ - mov %o0, %l0; \ - COPY_ARGS_##args \ - mov SYS_ify(syscall_name), %g1; \ - ta 0x6d; \ - bcc,pt %xcc, 1f; \ - mov %o0, %l1; \ - CDISABLE; \ - mov %l0, %o0; \ - call __syscall_error; \ - mov %l1, %o0; \ - ba,pt %xcc, 2f; \ - mov -1, %l1; \ -1: CDISABLE; \ - mov %l0, %o0; \ -2: jmpl %i7 + 8, %g0; \ - restore %g0, %l1, %o0; - -# if IS_IN (libpthread) -# define CENABLE call __pthread_enable_asynccancel -# define CDISABLE call __pthread_disable_asynccancel -# elif IS_IN (libc) -# define CENABLE call __libc_enable_asynccancel -# define CDISABLE call __libc_disable_asynccancel -# elif IS_IN (librt) -# define CENABLE call __librt_enable_asynccancel -# define CDISABLE call __librt_disable_asynccancel -# else -# error Unsupported library -# endif - -#define COPY_ARGS_0 /* Nothing */ -#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0; -#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1; -#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2; -#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3; -#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4; -#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5; - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1 -# endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h deleted file mode 100644 index ea6bf5146a..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_SPARC64_SYSDEP_H -#define _LINUX_SPARC64_SYSDEP_H 1 - -#include - -#if IS_IN (rtld) -# include /* Defines RTLD_PRIVATE_ERRNO. */ -#endif -#include - -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -/* This is a kludge to make syscalls.list find these under the names - pread and pwrite, since some kernel headers define those names - and some define the *64 names for the same system calls. */ -#if !defined __NR_pread && defined __NR_pread64 -# define __NR_pread __NR_pread64 -#endif -#if !defined __NR_pwrite && defined __NR_pwrite64 -# define __NR_pwrite __NR_pwrite64 -#endif - -#ifdef __ASSEMBLER__ - -#define LOADSYSCALL(x) mov __NR_##x, %g1 - -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - .text; \ -ENTRY(name); \ - LOADSYSCALL(syscall_name); \ - ta 0x6d; \ - bcc,pt %xcc, 1f; \ - nop; \ - SYSCALL_ERROR_HANDLER \ -1: - -#undef PSEUDO_NOERRNO -#define PSEUDO_NOERRNO(name, syscall_name, args)\ - .text; \ -ENTRY(name); \ - LOADSYSCALL(syscall_name); \ - ta 0x6d; - -#undef PSEUDO_ERRVAL -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .text; \ -ENTRY(name); \ - LOADSYSCALL(syscall_name); \ - ta 0x6d; - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - END(name) - -#ifndef PIC -# define SYSCALL_ERROR_HANDLER \ - mov %o7, %g1; \ - call __syscall_error; \ - mov %g1, %o7; -#else -# if RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_HANDLER \ -0: SETUP_PIC_REG_LEAF(o2,g1) \ - sethi %gdop_hix22(rtld_errno), %g1; \ - xor %g1, %gdop_lox10(rtld_errno), %g1;\ - ldx [%o2 + %g1], %g1, %gdop(rtld_errno); \ - st %o0, [%g1]; \ - jmp %o7 + 8; \ - mov -1, %o0; -# elif defined _LIBC_REENTRANT - -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif -# define SYSCALL_ERROR_HANDLER \ -0: SETUP_PIC_REG_LEAF(o2,g1) \ - sethi %tie_hi22(SYSCALL_ERROR_ERRNO), %g1; \ - add %g1, %tie_lo10(SYSCALL_ERROR_ERRNO), %g1; \ - ldx [%o2 + %g1], %g1, %tie_ldx(SYSCALL_ERROR_ERRNO);\ - st %o0, [%g7 + %g1]; \ - jmp %o7 + 8; \ - mov -1, %o0; -# else -# define SYSCALL_ERROR_HANDLER \ -0: SETUP_PIC_REG_LEAF(o2,g1) \ - sethi %gdop_hix22(errno), %g1;\ - xor %g1, %gdop_lox10(errno), %g1;\ - ldx [%o2 + %g1], %g1, %gdop(errno);\ - st %o0, [%g1]; \ - jmp %o7 + 8; \ - mov -1, %o0; -# endif /* _LIBC_REENTRANT */ -#endif /* PIC */ - -#else /* __ASSEMBLER__ */ - -#define __SYSCALL_STRING \ - "ta 0x6d;" \ - "bcc,pt %%xcc, 1f;" \ - " mov 0, %%g1;" \ - "sub %%g0, %%o0, %%o0;" \ - "mov 1, %%g1;" \ - "1:" - -#define __SYSCALL_CLOBBERS \ - "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \ - "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \ - "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \ - "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \ - "f32", "f34", "f36", "f38", "f40", "f42", "f44", "f46", \ - "f48", "f50", "f52", "f54", "f56", "f58", "f60", "f62", \ - "cc", "memory" - -#endif /* __ASSEMBLER__ */ - -/* This is the offset from the %sp to the backing store above the - register windows. So if you poke stack memory directly you add this. */ -#define STACK_BIAS 2047 - -/* Pointer mangling support. */ -#if IS_IN (rtld) -/* We cannot use the thread descriptor because in ld.so we use setjmp - earlier than the descriptor is initialized. */ -#else -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(dreg, reg, tmpreg) \ - ldx [%g7 + POINTER_GUARD], tmpreg; \ - xor reg, tmpreg, dreg -# define PTR_DEMANGLE(dreg, reg, tmpreg) PTR_MANGLE (dreg, reg, tmpreg) -# define PTR_MANGLE2(dreg, reg, tmpreg) \ - xor reg, tmpreg, dreg -# define PTR_DEMANGLE2(dreg, reg, tmpreg) PTR_MANGLE2 (dreg, reg, tmpreg) -# else -# define PTR_MANGLE(var) \ - (var) = (__typeof (var)) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#endif - -#endif /* linux/sparc64/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/time.c b/sysdeps/unix/sysv/linux/sparc/sparc64/time.c deleted file mode 100644 index 509b580c55..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/time.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c b/sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c deleted file mode 100644 index d307135003..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c b/sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c deleted file mode 100644 index 2dd94f5c7a..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/timer_getoverr.c b/sysdeps/unix/sysv/linux/sparc/sparc64/timer_getoverr.c deleted file mode 100644 index 22eaff5cda..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/timer_getoverr.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/timer_gettime.c b/sysdeps/unix/sysv/linux/sparc/sparc64/timer_gettime.c deleted file mode 100644 index cea524bae5..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/timer_gettime.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/timer_settime.c b/sysdeps/unix/sysv/linux/sparc/sparc64/timer_settime.c deleted file mode 100644 index fa231149d5..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/timer_settime.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h b/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h deleted file mode 100644 index bd6599ed02..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Constants shared between setcontext() and getcontext(). Don't - install this header file. */ - -#define UC_LINK 0 -#define __UC_SIGMASK 16 -#define UC_M_PC 40 -#define UC_M_NPC 48 -#define UC_SIGMASK 536 -#define SIGMASK_WORDS 16 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S b/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S deleted file mode 100644 index 5ff1cca898..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2004. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text - .globl __syscall_error -ENTRY(__libc_vfork) - LOADSYSCALL(vfork) - ta 0x6d - bcc,pt %xcc, 2f - mov %o7, %g1 - call __syscall_error - mov %g1, %o7 -2: sub %o1, 1, %o1 - andcc %o0, %o1, %o0 -1: retl - nop -END(__libc_vfork) - -#if IS_IN (libc) -weak_alias (__libc_vfork, vfork) -strong_alias (__libc_vfork, __vfork) -libc_hidden_def (__vfork) -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/wordexp.c b/sysdeps/unix/sysv/linux/sparc/sparc64/wordexp.c deleted file mode 100644 index 45178d106d..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/wordexp.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* For Linux/Alpha we have to make the wordexp symbols versioned. */ -#define wordexp(words, pwordexp, flags) \ - __new_wordexp (words, pwordexp, flags) - -#include - -versioned_symbol (libc, __new_wordexp, wordexp, GLIBC_2_2_2); - - -#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2_2) -/* The old, incorrect wordexp_t definition. */ -typedef struct - { - int we_wordc; /* Count of words matched. */ - char **we_wordv; /* List of expanded words. */ - int we_offs; /* Slots to reserve in `we_wordv'. */ - } old_wordexp_t; - - -int -attribute_compat_text_section -__old_wordexp (const char *words, old_wordexp_t *pwordexp, int flags) -{ - wordexp_t we; - int result; - - we.we_wordc = pwordexp->we_wordc; - we.we_wordv = pwordexp->we_wordv; - we.we_offs = pwordexp->we_offs; - - result = __new_wordexp (words, &we, flags); - - pwordexp->we_wordc = we.we_wordc; - pwordexp->we_wordv = we.we_wordv; - pwordexp->we_offs = we.we_offs; - - return result; -} -compat_symbol (libc, __old_wordexp, wordexp, GLIBC_2_1); -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c b/sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c deleted file mode 100644 index c3b00cb1d4..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../i386/xstat.c" diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/xstatconv.c b/sysdeps/unix/sysv/linux/sparc/sparc64/xstatconv.c deleted file mode 100644 index 8bc62b815c..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/xstatconv.c +++ /dev/null @@ -1,124 +0,0 @@ -/* Convert between the kernel's `struct stat' format, and libc's. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -int -__xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf) -{ - switch (vers) - { - case _STAT_VER_KERNEL: - /* Nothing to do. The struct is in the form the kernel expects. - We should have short-circuted before we got here, but for - completeness... */ - *(struct kernel_stat *) ubuf = *kbuf; - break; - - case _STAT_VER_LINUX: - { - struct stat *buf = ubuf; - - /* Convert to current kernel version of `struct stat'. */ - buf->st_dev = kbuf->st_dev; - buf->__pad1 = 0; - buf->st_ino = kbuf->st_ino; - buf->st_mode = kbuf->st_mode; - buf->st_nlink = kbuf->st_nlink; - buf->st_uid = kbuf->st_uid; - buf->st_gid = kbuf->st_gid; - buf->st_rdev = kbuf->st_rdev; - buf->__pad2 = 0; - buf->st_size = kbuf->st_size; - buf->st_blksize = kbuf->st_blksize; - buf->st_blocks = kbuf->st_blocks; - buf->st_atim.tv_sec = kbuf->st_atime_sec; - buf->st_atim.tv_nsec = 0; - buf->st_mtim.tv_sec = kbuf->st_mtime_sec; - buf->st_mtim.tv_nsec = 0; - buf->st_ctim.tv_sec = kbuf->st_ctime_sec; - buf->st_ctim.tv_nsec = 0; - buf->__glibc_reserved4 = 0; - buf->__glibc_reserved5 = 0; - } - break; - - default: - __set_errno (EINVAL); - return -1; - } - - return 0; -} - -int -__xstat32_conv (int vers, struct stat64 *sbuf, struct stat *buf) -{ - struct kernel_stat64 *kbuf; - - /* *stat64 syscalls on sparc64 really fill in struct kernel_stat64, - rather than struct stat64. But it is the same size as - struct kernel_stat64, so use this hack so that we can reuse - i386 {,f,l}xstat{,at}.c routines. */ - __asm ("" : "=r" (kbuf) : "0" (sbuf)); - assert (sizeof (struct stat) == sizeof (struct stat64)); - assert (sizeof (struct stat64) >= sizeof (struct kernel_stat64)); - - switch (vers) - { - case _STAT_VER_LINUX: - { - /* Convert current kernel version of `struct stat64' to - `struct stat'. */ - buf->st_dev = kbuf->st_dev; - buf->__pad1 = 0; - buf->st_ino = kbuf->st_ino; - buf->st_mode = kbuf->st_mode; - buf->st_nlink = kbuf->st_nlink; - buf->st_uid = kbuf->st_uid; - buf->st_gid = kbuf->st_gid; - buf->st_rdev = kbuf->st_rdev; - buf->__pad2 = 0; - buf->st_size = kbuf->st_size; - buf->st_blksize = kbuf->st_blksize; - buf->st_blocks = kbuf->st_blocks; - buf->st_atim.tv_sec = kbuf->st_atime_sec; - buf->st_atim.tv_nsec = kbuf->st_atime_nsec; - buf->st_mtim.tv_sec = kbuf->st_mtime_sec; - buf->st_mtim.tv_nsec = kbuf->st_mtime_nsec; - buf->st_ctim.tv_sec = kbuf->st_ctime_sec; - buf->st_ctim.tv_nsec = kbuf->st_ctime_nsec; - buf->__glibc_reserved4 = 0; - buf->__glibc_reserved5 = 0; - } - break; - - /* If struct stat64 is different from struct stat then - _STAT_VER_KERNEL does not make sense. */ - case _STAT_VER_KERNEL: - default: - __set_errno (EINVAL); - return -1; - } - - return 0; -} diff --git a/sysdeps/unix/sysv/linux/sparc/sys/procfs.h b/sysdeps/unix/sysv/linux/sparc/sys/procfs.h deleted file mode 100644 index e41331ac7c..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sys/procfs.h +++ /dev/null @@ -1,210 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somehow modelled after the file of the same name on SysVr4 - systems. It provides a definition of the core file format for ELF - used on Linux. */ - -#include -#include -#include -#include -#include -#include -#include - -__BEGIN_DECLS - -#if __WORDSIZE == 64 - -#define ELF_NGREG 36 - -typedef struct - { - unsigned long pr_regs[32]; - unsigned long pr_fsr; - unsigned long pr_gsr; - unsigned long pr_fprs; - } elf_fpregset_t; - -#else /* sparc32 */ - -#define ELF_NGREG 38 - -typedef struct - { - union - { - unsigned long pr_regs[32]; - double pr_dregs[16]; - } pr_fr; - unsigned long __glibc_reserved; - unsigned long pr_fsr; - unsigned char pr_qcnt; - unsigned char pr_q_entrysize; - unsigned char pr_en; - unsigned int pr_q[64]; - } elf_fpregset_t; - -#endif /* sparc32 */ - -typedef unsigned long elf_greg_t; -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - gdb doesn't really use excluded. Fields present but not used are - marked with "XXX". */ -struct elf_prstatus - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ -#if __WORDSIZE == 64 - unsigned int pr_uid; - unsigned int pr_gid; -#else - unsigned short int pr_uid; - unsigned short int pr_gid; -#endif - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore have only one PID type. */ -typedef __pid_t lwpid_t; - - -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -#if __WORDSIZE == 64 - -/* Provide 32-bit variants so that BFD can read 32-bit - core files. */ -#define ELF_NGREG32 38 -typedef struct - { - union - { - unsigned int pr_regs[32]; - double pr_dregs[16]; - } pr_fr; - unsigned int __glibc_reserved; - unsigned int pr_fsr; - unsigned char pr_qcnt; - unsigned char pr_q_entrysize; - unsigned char pr_en; - unsigned int pr_q[64]; - } elf_fpregset_t32; - -typedef unsigned int elf_greg_t32; -typedef elf_greg_t32 elf_gregset_t32[ELF_NGREG32]; - -struct elf_prstatus32 - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned int pr_sigpend; /* Set of pending signals. */ - unsigned int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct - { - int tv_sec, tv_usec; - } pr_utime, /* User time. */ - pr_stime, /* System time. */ - pr_cutime, /* Cumulative user time. */ - pr_cstime; /* Cumulative system time. */ - elf_gregset_t32 pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - -struct elf_prpsinfo32 - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned int pr_flag; /* Flags. */ - unsigned short int pr_uid; - unsigned short int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -typedef elf_gregset_t32 prgregset32_t; -typedef elf_fpregset_t32 prfpregset32_t; - -typedef struct elf_prstatus32 prstatus32_t; -typedef struct elf_prpsinfo32 prpsinfo32_t; - -#endif /* sparc64 */ - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h b/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h deleted file mode 100644 index f60549427f..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h +++ /dev/null @@ -1,281 +0,0 @@ -/* `ptrace' debugger support interface. Linux/SPARC version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PTRACE_H -#define _SYS_PTRACE_H 1 - -#include -#include -#include - -/* Linux/SPARC kernels up to 2.3.18 do not care much - about what namespace polution, so use a kludge now. */ -#undef PTRACE_GETREGS -#undef PTRACE_SETREGS -#undef PTRACE_GETFPREGS -#undef PTRACE_SETFPREGS -#undef PTRACE_READDATA -#undef PTRACE_WRITEDATA -#undef PTRACE_READTEXT -#undef PTRACE_WRITETEXT -#undef PTRACE_SUNDETACH - -__BEGIN_DECLS - -/* Type of the REQUEST argument to `ptrace.' */ -enum __ptrace_request -{ - /* Indicate that the process making this request should be traced. - All signals received by this process can be intercepted by its - parent, and its parent can use the other `ptrace' requests. */ - PTRACE_TRACEME = 0, -#define PT_TRACE_ME PTRACE_TRACEME - - /* Return the word in the process's text space at address ADDR. */ - PTRACE_PEEKTEXT = 1, -#define PT_READ_I PTRACE_PEEKTEXT - - /* Return the word in the process's data space at address ADDR. */ - PTRACE_PEEKDATA = 2, -#define PT_READ_D PTRACE_PEEKDATA - - /* Return the word in the process's user area at offset ADDR. */ - PTRACE_PEEKUSER = 3, -#define PT_READ_U PTRACE_PEEKUSER - - /* Write the word DATA into the process's text space at address ADDR. */ - PTRACE_POKETEXT = 4, -#define PT_WRITE_I PTRACE_POKETEXT - - /* Write the word DATA into the process's data space at address ADDR. */ - PTRACE_POKEDATA = 5, -#define PT_WRITE_D PTRACE_POKEDATA - - /* Write the word DATA into the process's user area at offset ADDR. */ - PTRACE_POKEUSER = 6, -#define PT_WRITE_U PTRACE_POKEUSER - - /* Continue the process. */ - PTRACE_CONT = 7, -#define PT_CONTINUE PTRACE_CONT - - /* Kill the process. */ - PTRACE_KILL = 8, -#define PT_KILL PTRACE_KILL - - /* Single step the process. - This is not supported on all machines. */ - PTRACE_SINGLESTEP = 9, -#define PT_STEP PTRACE_SINGLESTEP - - /* Detach from a process attached to with PTRACE_ATTACH. */ - PTRACE_DETACH = 11, -#define PT_DETACH PTRACE_DETACH - - /* This define is needed for older programs which were - trying to work around sparc-linux ptrace nastiness. */ -#define PTRACE_SUNDETACH PTRACE_DETACH - -#if __WORDSIZE == 32 - - /* Get all general purpose registers used by a processes. - This is not supported on all machines. */ - PTRACE_GETREGS = 12, -#define PT_GETREGS PTRACE_GETREGS - - /* Set all general purpose registers used by a processes. - This is not supported on all machines. */ - PTRACE_SETREGS = 13, -#define PT_SETREGS PTRACE_SETREGS - - /* Get all floating point registers used by a processes. - This is not supported on all machines. */ - PTRACE_GETFPREGS = 14, -#define PT_GETFPREGS PTRACE_GETFPREGS - - /* Set all floating point registers used by a processes. - This is not supported on all machines. */ - PTRACE_SETFPREGS = 15, -#define PT_SETFPREGS PTRACE_SETFPREGS - -#endif - - /* Attach to a process that is already running. */ - PTRACE_ATTACH = 16, -#define PT_ATTACH PTRACE_ATTACH - - /* Write several bytes at a time. */ - PTRACE_WRITEDATA = 17, -#define PTRACE_WRITEDATA PTRACE_WRITEDATA - - /* Read several bytes at a time. */ - PTRACE_READTEXT = 18, -#define PTRACE_READTEXT PTRACE_READTEXT -#define PTRACE_READDATA PTRACE_READTEXT - - /* Write several bytes at a time. */ - PTRACE_WRITETEXT = 19, -#define PTRACE_WRITETEXT PTRACE_WRITETEXT - -#if __WORDSIZE == 64 - - /* Get all general purpose registers used by a processes. - This is not supported on all machines. */ - PTRACE_GETREGS = 22, -#define PT_GETREGS PTRACE_GETREGS - - /* Set all general purpose registers used by a processes. - This is not supported on all machines. */ - PTRACE_SETREGS = 23, -#define PT_SETREGS PTRACE_SETREGS - -#endif - - /* Continue and stop at the next (return from) syscall. */ - PTRACE_SYSCALL = 24, -#define PTRACE_SYSCALL PTRACE_SYSCALL - -#if __WORDSIZE == 64 - - /* Get all floating point registers used by a processes. - This is not supported on all machines. */ - PTRACE_GETFPREGS = 25, -#define PT_GETFPREGS PTRACE_GETFPREGS - - /* Set all floating point registers used by a processes. - This is not supported on all machines. */ - PTRACE_SETFPREGS = 26, -#define PT_SETFPREGS PTRACE_SETFPREGS - -#endif - - /* Set ptrace filter options. */ - PTRACE_SETOPTIONS = 0x4200, -#define PT_SETOPTIONS PTRACE_SETOPTIONS - - /* Get last ptrace message. */ - PTRACE_GETEVENTMSG = 0x4201, -#define PT_GETEVENTMSG PTRACE_GETEVENTMSG - - /* Get siginfo for process. */ - PTRACE_GETSIGINFO = 0x4202, -#define PT_GETSIGINFO PTRACE_GETSIGINFO - - /* Set new siginfo for process. */ - PTRACE_SETSIGINFO = 0x4203, -#define PT_SETSIGINFO PTRACE_SETSIGINFO - - /* Get register content. */ - PTRACE_GETREGSET = 0x4204, -#define PTRACE_GETREGSET PTRACE_GETREGSET - - /* Set register content. */ - PTRACE_SETREGSET = 0x4205, -#define PTRACE_SETREGSET PTRACE_SETREGSET - - /* Like PTRACE_ATTACH, but do not force tracee to trap and do not affect - signal or group stop state. */ - PTRACE_SEIZE = 0x4206, -#define PTRACE_SEIZE PTRACE_SEIZE - - /* Trap seized tracee. */ - PTRACE_INTERRUPT = 0x4207, -#define PTRACE_INTERRUPT PTRACE_INTERRUPT - - /* Wait for next group event. */ - PTRACE_LISTEN = 0x4208, -#define PTRACE_LISTEN PTRACE_LISTEN - - PTRACE_PEEKSIGINFO = 0x4209, -#define PTRACE_PEEKSIGINFO PTRACE_PEEKSIGINFO - - PTRACE_GETSIGMASK = 0x420a, -#define PTRACE_GETSIGMASK PTRACE_GETSIGMASK - - PTRACE_SETSIGMASK = 0x420b, -#define PTRACE_SETSIGMASK PTRACE_SETSIGMASK - - PTRACE_SECCOMP_GET_FILTER = 0x420c -#define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER -}; - - -/* Flag for PTRACE_LISTEN. */ -enum __ptrace_flags -{ - PTRACE_SEIZE_DEVEL = 0x80000000 -}; - -/* Options set using PTRACE_SETOPTIONS. */ -enum __ptrace_setoptions -{ - PTRACE_O_TRACESYSGOOD = 0x00000001, - PTRACE_O_TRACEFORK = 0x00000002, - PTRACE_O_TRACEVFORK = 0x00000004, - PTRACE_O_TRACECLONE = 0x00000008, - PTRACE_O_TRACEEXEC = 0x00000010, - PTRACE_O_TRACEVFORKDONE = 0x00000020, - PTRACE_O_TRACEEXIT = 0x00000040, - PTRACE_O_TRACESECCOMP = 0x00000080, - PTRACE_O_EXITKILL = 0x00100000, - PTRACE_O_SUSPEND_SECCOMP = 0x00200000, - PTRACE_O_MASK = 0x003000ff -}; - -enum __ptrace_eventcodes -{ -/* Wait extended result codes for the above trace options. */ - PTRACE_EVENT_FORK = 1, - PTRACE_EVENT_VFORK = 2, - PTRACE_EVENT_CLONE = 3, - PTRACE_EVENT_EXEC = 4, - PTRACE_EVENT_VFORK_DONE = 5, - PTRACE_EVENT_EXIT = 6, - PTRACE_EVENT_SECCOMP = 7, -/* Extended result codes enabled by means other than options. */ - PTRACE_EVENT_STOP = 128 -}; - -/* Arguments for PTRACE_PEEKSIGINFO. */ -struct __ptrace_peeksiginfo_args -{ - __uint64_t off; /* From which siginfo to start. */ - __uint32_t flags; /* Flags for peeksiginfo. */ - __int32_t nr; /* How many siginfos to take. */ -}; - -enum __ptrace_peeksiginfo_flags -{ - /* Read signals from a shared (process wide) queue. */ - PTRACE_PEEKSIGINFO_SHARED = (1 << 0) -}; - -/* Perform process tracing functions. REQUEST is one of the values - above, and determines the action to be taken. - For all requests except PTRACE_TRACEME, PID specifies the process to be - traced. - - PID and the other arguments described above for the various requests should - appear (those that are used for the particular request) as: - pid_t PID, void *ADDR, int DATA, void *ADDR2 - after REQUEST. */ -extern long int ptrace (enum __ptrace_request __request, ...) __THROW; - -__END_DECLS - -#endif /* _SYS_PTRACE_H */ diff --git a/sysdeps/unix/sysv/linux/sparc/sys/trap.h b/sysdeps/unix/sysv/linux/sparc/sys/trap.h deleted file mode 100644 index 99b9c60e06..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sys/trap.h +++ /dev/null @@ -1,7 +0,0 @@ -/* Include Linux/SPARC specific trap definitions. */ -#ifndef _SYS_TRAP_H -#define _SYS_TRAP_H 1 - -#include - -#endif /* sys/trap.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h b/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h deleted file mode 100644 index 7ce5f2b881..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h +++ /dev/null @@ -1,274 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - -#include - - -#if __WORDSIZE == 64 - -#define MC_TSTATE 0 -#define MC_PC 1 -#define MC_NPC 2 -#define MC_Y 3 -#define MC_G1 4 -#define MC_G2 5 -#define MC_G3 6 -#define MC_G4 7 -#define MC_G5 8 -#define MC_G6 9 -#define MC_G7 10 -#define MC_O0 11 -#define MC_O1 12 -#define MC_O2 13 -#define MC_O3 14 -#define MC_O4 15 -#define MC_O5 16 -#define MC_O6 17 -#define MC_O7 18 -#define MC_NGREG 19 - -typedef unsigned long mc_greg_t; -typedef mc_greg_t mc_gregset_t[MC_NGREG]; - -#define MC_MAXFPQ 16 -struct mc_fq { - unsigned long *mcfq_addr; - unsigned int mcfq_insn; -}; - -struct mc_fpu { - union { - unsigned int sregs[32]; - unsigned long dregs[32]; - long double qregs[16]; - } mcfpu_fregs; - unsigned long mcfpu_fsr; - unsigned long mcfpu_fprs; - unsigned long mcfpu_gsr; - struct mc_fq *mcfpu_fq; - unsigned char mcfpu_qcnt; - unsigned char mcfpu_qentsz; - unsigned char mcfpu_enab; -}; -typedef struct mc_fpu mc_fpu_t; - -typedef struct { - mc_gregset_t mc_gregs; - mc_greg_t mc_fp; - mc_greg_t mc_i7; - mc_fpu_t mc_fpregs; -} mcontext_t; - -typedef struct ucontext { - struct ucontext *uc_link; - unsigned long uc_flags; - unsigned long __uc_sigmask; - mcontext_t uc_mcontext; - stack_t uc_stack; - sigset_t uc_sigmask; -} ucontext_t; - -#endif /* __WORDISIZE == 64 */ - -/* - * Location of the users' stored registers relative to R0. - * Usage is as an index into a gregset_t array or as u.u_ar0[XX]. - */ -#define REG_PSR (0) -#define REG_PC (1) -#define REG_nPC (2) -#define REG_Y (3) -#define REG_G1 (4) -#define REG_G2 (5) -#define REG_G3 (6) -#define REG_G4 (7) -#define REG_G5 (8) -#define REG_G6 (9) -#define REG_G7 (10) -#define REG_O0 (11) -#define REG_O1 (12) -#define REG_O2 (13) -#define REG_O3 (14) -#define REG_O4 (15) -#define REG_O5 (16) -#define REG_O6 (17) -#define REG_O7 (18) - -/* - * A gregset_t is defined as an array type for compatibility with the reference - * source. This is important due to differences in the way the C language - * treats arrays and structures as parameters. - * - * Note that NGREG is really (sizeof (struct regs) / sizeof (greg_t)), - * but that the ABI defines it absolutely to be 21 (resp. 19). - */ - -#if __WORDSIZE == 64 - -#define REG_ASI (19) -#define REG_FPRS (20) - -#define NGREG 21 -typedef long greg_t; - -#else /* __WORDSIZE == 32 */ - -#define NGREG 19 -typedef int greg_t; - -#endif /* __WORDSIZE == 32 */ - -typedef greg_t gregset_t[NGREG]; - -/* - * The following structures define how a register window can appear on the - * stack. This structure is available (when required) through the `gwins' - * field of an mcontext (nested within ucontext). SPARC_MAXWINDOW is the - * maximum number of outstanding regiters window defined in the SPARC - * architecture (*not* implementation). - */ -#define SPARC_MAXREGWINDOW 31 /* max windows in SPARC arch. */ -struct rwindow - { - greg_t rw_local[8]; /* locals */ - greg_t rw_in[8]; /* ins */ - }; - -#define rw_fp rw_in[6] /* frame pointer */ -#define rw_rtn rw_in[7] /* return address */ - -typedef struct gwindows - { - int wbcnt; - int *spbuf[SPARC_MAXREGWINDOW]; - struct rwindow wbuf[SPARC_MAXREGWINDOW]; - } gwindows_t; - -/* - * Floating point definitions. - */ - -#define MAXFPQ 16 /* max # of fpu queue entries currently supported */ - -/* - * struct fq defines the minimal format of a floating point instruction queue - * entry. The size of entries in the floating point queue are implementation - * dependent. The union FQu is guarenteed to be the first field in any ABI - * conformant system implementation. Any additional fields provided by an - * implementation should not be used applications designed to be ABI conformant. */ - -struct fpq - { - unsigned long *fpq_addr; /* address */ - unsigned long fpq_instr; /* instruction */ - }; - -struct fq - { - union /* FPU inst/addr queue */ - { - double whole; - struct fpq fpq; - } FQu; - }; - -#define FPU_REGS_TYPE unsigned -#define FPU_DREGS_TYPE unsigned long long -#define V7_FPU_FSR_TYPE unsigned -#define V9_FPU_FSR_TYPE unsigned long long -#define V9_FPU_FPRS_TYPE unsigned - -#if __WORDSIZE == 64 - -typedef struct fpu - { - union { /* FPU floating point regs */ - unsigned fpu_regs[32]; /* 32 singles */ - double fpu_dregs[32]; /* 32 doubles */ - long double fpu_qregs[16]; /* 16 quads */ - } fpu_fr; - struct fq *fpu_q; /* ptr to array of FQ entries */ - unsigned long fpu_fsr; /* FPU status register */ - unsigned char fpu_qcnt; /* # of entries in saved FQ */ - unsigned char fpu_q_entrysize; /* # of bytes per FQ entry */ - unsigned char fpu_en; /* flag signifying fpu in use */ - } fpregset_t; - -#else /* __WORDSIZE == 32 */ - -typedef struct fpu - { - union { /* FPU floating point regs */ - __extension__ unsigned long long fpu_regs[32]; /* 32 singles */ - double fpu_dregs[16]; /* 16 doubles */ - } fpu_fr; - struct fq *fpu_q; /* ptr to array of FQ entries */ - unsigned fpu_fsr; /* FPU status register */ - unsigned char fpu_qcnt; /* # of entries in saved FQ */ - unsigned char fpu_q_entrysize; /* # of bytes per FQ entry */ - unsigned char fpu_en; /* flag signifying fpu in use */ - } fpregset_t; - -/* - * The following structure is for associating extra register state with - * the ucontext structure and is kept within the uc_mcontext filler area. - * - * If (xrs_id == XRS_ID) then the xrs_ptr field is a valid pointer to - * extra register state. The exact format of the extra register state - * pointed to by xrs_ptr is platform-dependent. - * - * Note: a platform may or may not manage extra register state. - */ -typedef struct - { - unsigned int xrs_id; /* indicates xrs_ptr validity */ - void * xrs_ptr; /* ptr to extra reg state */ - } xrs_t; - -#define XRS_ID 0x78727300 /* the string "xrs" */ - -typedef struct - { - gregset_t gregs; /* general register set */ - gwindows_t *gwins; /* POSSIBLE pointer to register windows */ - fpregset_t fpregs; /* floating point register set */ - xrs_t xrs; /* POSSIBLE extra register state association */ - long filler[19]; - } mcontext_t; - - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long uc_flags; - struct ucontext *uc_link; - sigset_t uc_sigmask; - stack_t uc_stack; - mcontext_t uc_mcontext; - } ucontext_t; - -#endif /* __WORDSIZE == 32 */ -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/sys/user.h b/sysdeps/unix/sysv/linux/sparc/sys/user.h deleted file mode 100644 index e9e41ed64e..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sys/user.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_USER_H -#define _SYS_USER_H 1 - -#include - -struct sunos_regs -{ - unsigned int psr, pc, npc, y; - unsigned int regs[15]; -}; - -struct sunos_fpqueue -{ - unsigned int *addr; - unsigned int inst; -}; - -struct sunos_fp -{ - union - { - unsigned int regs[32]; - double reg_dbls[16]; - } fregs; - unsigned int fsr; - unsigned int flags; - unsigned int extra; - unsigned int fpq_count; - struct sunos_fpqueue fpq[16]; -}; - -struct sunos_fpu -{ - struct sunos_fp fpstatus; -}; - -/* The SunOS core file header layout. */ -struct user { - unsigned int magic; - unsigned int len; - struct sunos_regs regs; - struct - { - unsigned char a_dynamic :1; - unsigned char a_toolversion :7; - unsigned char a_machtype; - unsigned short a_info; - unsigned int a_text; - unsigned int a_data; - unsigned int a_bss; - unsigned int a_syms; - unsigned int a_entry; - unsigned int a_trsize; - unsigned int a_drsize; - } uexec; - int signal; - size_t u_tsize; - size_t u_dsize; - size_t u_ssize; - char u_comm[17]; - struct sunos_fpu fpu; - unsigned int sigcode; -}; - -#define NBPG 0x2000 -#define UPAGES 1 -#define SUNOS_CORE_MAGIC 0x080456 - -#endif diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.c b/sysdeps/unix/sysv/linux/sparc/sysdep.c deleted file mode 100644 index f86414570d..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sysdep.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sysdep.h deleted file mode 100644 index 3400f6959a..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sysdep.h +++ /dev/null @@ -1,185 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_SPARC_SYSDEP_H -#define _LINUX_SPARC_SYSDEP_H 1 - -#include -#include -#include - -#ifdef __ASSEMBLER__ - -#define ret retl; nop -#define ret_NOERRNO retl; nop -#define ret_ERRVAL retl; nop -#define r0 %o0 -#define r1 %o1 -#define MOVE(x,y) mov x, y - -#else /* __ASSEMBLER__ */ - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ -({ INTERNAL_SYSCALL_DECL(err); \ - unsigned long resultvar = INTERNAL_SYSCALL(name, err, nr, args);\ - if (INTERNAL_SYSCALL_ERROR_P (resultvar, err)) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, err)); \ - resultvar = (unsigned long) -1; \ - } \ - (long) resultvar; \ -}) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) \ - register long err __asm__("g1"); - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - inline_syscall##nr(__SYSCALL_STRING, err, __NR_##name, args) - -#undef INTERNAL_SYSCALL_NCS -#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - inline_syscall##nr(__SYSCALL_STRING, err, name, args) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((void) (val), __builtin_expect((err) != 0, 0)) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) - -#define inline_syscall0(string,err,name,dummy...) \ -({ \ - register long __o0 __asm__ ("o0"); \ - err = name; \ - __asm __volatile (string : "=r" (err), "=r" (__o0) : \ - "0" (err) : \ - __SYSCALL_CLOBBERS); \ - __o0; \ -}) - -#define inline_syscall1(string,err,name,arg1) \ -({ \ - register long __o0 __asm__ ("o0") = (long)(arg1); \ - err = name; \ - __asm __volatile (string : "=r" (err), "=r" (__o0) : \ - "0" (err), "1" (__o0) : \ - __SYSCALL_CLOBBERS); \ - __o0; \ -}) - -#define inline_syscall2(string,err,name,arg1,arg2) \ -({ \ - register long __o0 __asm__ ("o0") = (long)(arg1); \ - register long __o1 __asm__ ("o1") = (long)(arg2); \ - err = name; \ - __asm __volatile (string : "=r" (err), "=r" (__o0) : \ - "0" (err), "1" (__o0), "r" (__o1) : \ - __SYSCALL_CLOBBERS); \ - __o0; \ -}) - -#define inline_syscall3(string,err,name,arg1,arg2,arg3) \ -({ \ - register long __o0 __asm__ ("o0") = (long)(arg1); \ - register long __o1 __asm__ ("o1") = (long)(arg2); \ - register long __o2 __asm__ ("o2") = (long)(arg3); \ - err = name; \ - __asm __volatile (string : "=r" (err), "=r" (__o0) : \ - "0" (err), "1" (__o0), "r" (__o1), \ - "r" (__o2) : \ - __SYSCALL_CLOBBERS); \ - __o0; \ -}) - -#define inline_syscall4(string,err,name,arg1,arg2,arg3,arg4) \ -({ \ - register long __o0 __asm__ ("o0") = (long)(arg1); \ - register long __o1 __asm__ ("o1") = (long)(arg2); \ - register long __o2 __asm__ ("o2") = (long)(arg3); \ - register long __o3 __asm__ ("o3") = (long)(arg4); \ - err = name; \ - __asm __volatile (string : "=r" (err), "=r" (__o0) : \ - "0" (err), "1" (__o0), "r" (__o1), \ - "r" (__o2), "r" (__o3) : \ - __SYSCALL_CLOBBERS); \ - __o0; \ -}) - -#define inline_syscall5(string,err,name,arg1,arg2,arg3,arg4,arg5) \ -({ \ - register long __o0 __asm__ ("o0") = (long)(arg1); \ - register long __o1 __asm__ ("o1") = (long)(arg2); \ - register long __o2 __asm__ ("o2") = (long)(arg3); \ - register long __o3 __asm__ ("o3") = (long)(arg4); \ - register long __o4 __asm__ ("o4") = (long)(arg5); \ - err = name; \ - __asm __volatile (string : "=r" (err), "=r" (__o0) : \ - "0" (err), "1" (__o0), "r" (__o1), \ - "r" (__o2), "r" (__o3), "r" (__o4) : \ - __SYSCALL_CLOBBERS); \ - __o0; \ -}) - -#define inline_syscall6(string,err,name,arg1,arg2,arg3,arg4,arg5,arg6) \ -({ \ - register long __o0 __asm__ ("o0") = (long)(arg1); \ - register long __o1 __asm__ ("o1") = (long)(arg2); \ - register long __o2 __asm__ ("o2") = (long)(arg3); \ - register long __o3 __asm__ ("o3") = (long)(arg4); \ - register long __o4 __asm__ ("o4") = (long)(arg5); \ - register long __o5 __asm__ ("o5") = (long)(arg6); \ - err = name; \ - __asm __volatile (string : "=r" (err), "=r" (__o0) : \ - "0" (err), "1" (__o0), "r" (__o1), \ - "r" (__o2), "r" (__o3), "r" (__o4), \ - "r" (__o5) : \ - __SYSCALL_CLOBBERS); \ - __o0; \ -}) - -#define INLINE_CLONE_SYSCALL(arg1,arg2,arg3,arg4,arg5) \ -({ \ - register long __o0 __asm__ ("o0") = (long)(arg1); \ - register long __o1 __asm__ ("o1") = (long)(arg2); \ - register long __o2 __asm__ ("o2") = (long)(arg3); \ - register long __o3 __asm__ ("o3") = (long)(arg4); \ - register long __o4 __asm__ ("o4") = (long)(arg5); \ - register long __g1 __asm__ ("g1") = __NR_clone; \ - __asm __volatile (__SYSCALL_STRING : \ - "=r" (__g1), "=r" (__o0), "=r" (__o1) : \ - "0" (__g1), "1" (__o0), "2" (__o1), \ - "r" (__o2), "r" (__o3), "r" (__o4) : \ - __SYSCALL_CLOBBERS); \ - if (INTERNAL_SYSCALL_ERROR_P (__o0, __g1)) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (__o0, __g1)); \ - __o0 = -1L; \ - } \ - else \ - { \ - __o0 &= (__o1 - 1); \ - } \ - __o0; \ -}) - -#endif /* __ASSEMBLER__ */ - -#endif /* _LINUX_SPARC_SYSDEP_H */ diff --git a/sysdeps/unix/sysv/linux/sparc/system.c b/sysdeps/unix/sysv/linux/sparc/system.c deleted file mode 100644 index 2fc196bf5a..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/system.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* We have to and actually can handle cancelable system(). The big - problem: we have to kill the child process if necessary. To do - this a cleanup handler has to be registered and is has to be able - to find the PID of the child. The main problem is to reliable have - the PID when needed. It is not necessary for the parent thread to - return. It might still be in the kernel when the cancellation - request comes. Therefore we have to use the clone() calls ability - to have the kernel write the PID into the user-level variable. */ -#define FORK() \ - INLINE_CLONE_SYSCALL (CLONE_PARENT_SETTID | SIGCHLD, 0, &pid, NULL, NULL) - -#include "../system.c" diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c deleted file mode 100644 index c56f894a82..0000000000 --- a/sysdeps/unix/sysv/linux/spawni.c +++ /dev/null @@ -1,397 +0,0 @@ -/* POSIX spawn interface. Linux version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "spawn_int.h" - -/* The Linux implementation of posix_spawn{p} uses the clone syscall directly - with CLONE_VM and CLONE_VFORK flags and an allocated stack. The new stack - and start function solves most the vfork limitation (possible parent - clobber due stack spilling). The remaining issue are: - - 1. That no signal handlers must run in child context, to avoid corrupting - parent's state. - 2. The parent must ensure child's stack freeing. - 3. Child must synchronize with parent to enforce 2. and to possible - return execv issues. - - The first issue is solved by blocking all signals in child, even - the NPTL-internal ones (SIGCANCEL and SIGSETXID). The second and - third issue is done by a stack allocation in parent, and by using a - field in struct spawn_args where the child can write an error - code. CLONE_VFORK ensures that the parent does not run until the - child has either exec'ed successfully or exited. */ - - -/* The Unix standard contains a long explanation of the way to signal - an error after the fork() was successful. Since no new wait status - was wanted there is no way to signal an error using one of the - available methods. The committee chose to signal an error by a - normal program exit with the exit code 127. */ -#define SPAWN_ERROR 127 - -#ifdef __ia64__ -# define CLONE(__fn, __stackbase, __stacksize, __flags, __args) \ - __clone2 (__fn, __stackbase, __stacksize, __flags, __args, 0, 0, 0) -#else -# define CLONE(__fn, __stack, __stacksize, __flags, __args) \ - __clone (__fn, __stack, __flags, __args) -#endif - -/* Since ia64 wants the stackbase w/clone2, re-use the grows-up macro. */ -#if _STACK_GROWS_UP || defined (__ia64__) -# define STACK(__stack, __stack_size) (__stack) -#elif _STACK_GROWS_DOWN -# define STACK(__stack, __stack_size) (__stack + __stack_size) -#endif - - -struct posix_spawn_args -{ - sigset_t oldmask; - const char *file; - int (*exec) (const char *, char *const *, char *const *); - const posix_spawn_file_actions_t *fa; - const posix_spawnattr_t *restrict attr; - char *const *argv; - ptrdiff_t argc; - char *const *envp; - int xflags; - int err; -}; - -/* Older version requires that shell script without shebang definition - to be called explicitly using /bin/sh (_PATH_BSHELL). */ -static void -maybe_script_execute (struct posix_spawn_args *args) -{ - if (SHLIB_COMPAT (libc, GLIBC_2_2, GLIBC_2_15) - && (args->xflags & SPAWN_XFLAGS_TRY_SHELL) && errno == ENOEXEC) - { - char *const *argv = args->argv; - ptrdiff_t argc = args->argc; - - /* Construct an argument list for the shell. */ - char *new_argv[argc + 1]; - new_argv[0] = (char *) _PATH_BSHELL; - new_argv[1] = (char *) args->file; - if (argc > 1) - memcpy (new_argv + 2, argv + 1, argc * sizeof(char *)); - else - new_argv[2] = NULL; - - /* Execute the shell. */ - args->exec (new_argv[0], new_argv, args->envp); - } -} - -/* Function used in the clone call to setup the signals mask, posix_spawn - attributes, and file actions. It run on its own stack (provided by the - posix_spawn call). */ -static int -__spawni_child (void *arguments) -{ - struct posix_spawn_args *args = arguments; - const posix_spawnattr_t *restrict attr = args->attr; - const posix_spawn_file_actions_t *file_actions = args->fa; - - /* The child must ensure that no signal handler are enabled because it shared - memory with parent, so the signal disposition must be either SIG_DFL or - SIG_IGN. It does by iterating over all signals and although it could - possibly be more optimized (by tracking which signal potentially have a - signal handler), it might requires system specific solutions (since the - sigset_t data type can be very different on different architectures). */ - struct sigaction sa; - memset (&sa, '\0', sizeof (sa)); - - sigset_t hset; - __sigprocmask (SIG_BLOCK, 0, &hset); - for (int sig = 1; sig < _NSIG; ++sig) - { - if ((attr->__flags & POSIX_SPAWN_SETSIGDEF) - && sigismember (&attr->__sd, sig)) - { - sa.sa_handler = SIG_DFL; - } - else if (sigismember (&hset, sig)) - { - if (__nptl_is_internal_signal (sig)) - sa.sa_handler = SIG_IGN; - else - { - __libc_sigaction (sig, 0, &sa); - if (sa.sa_handler == SIG_IGN) - continue; - sa.sa_handler = SIG_DFL; - } - } - else - continue; - - __libc_sigaction (sig, &sa, 0); - } - -#ifdef _POSIX_PRIORITY_SCHEDULING - /* Set the scheduling algorithm and parameters. */ - if ((attr->__flags & (POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER)) - == POSIX_SPAWN_SETSCHEDPARAM) - { - if (__sched_setparam (0, &attr->__sp) == -1) - goto fail; - } - else if ((attr->__flags & POSIX_SPAWN_SETSCHEDULER) != 0) - { - if (__sched_setscheduler (0, attr->__policy, &attr->__sp) == -1) - goto fail; - } -#endif - - if ((attr->__flags & POSIX_SPAWN_SETSID) != 0 - && __setsid () < 0) - goto fail; - - /* Set the process group ID. */ - if ((attr->__flags & POSIX_SPAWN_SETPGROUP) != 0 - && __setpgid (0, attr->__pgrp) != 0) - goto fail; - - /* Set the effective user and group IDs. */ - if ((attr->__flags & POSIX_SPAWN_RESETIDS) != 0 - && (local_seteuid (__getuid ()) != 0 - || local_setegid (__getgid ()) != 0)) - goto fail; - - /* Execute the file actions. */ - if (file_actions != 0) - { - int cnt; - struct rlimit64 fdlimit; - bool have_fdlimit = false; - - for (cnt = 0; cnt < file_actions->__used; ++cnt) - { - struct __spawn_action *action = &file_actions->__actions[cnt]; - - switch (action->tag) - { - case spawn_do_close: - if (close_not_cancel (action->action.close_action.fd) != 0) - { - if (!have_fdlimit) - { - __getrlimit64 (RLIMIT_NOFILE, &fdlimit); - have_fdlimit = true; - } - - /* Signal errors only for file descriptors out of range. */ - if (action->action.close_action.fd < 0 - || action->action.close_action.fd >= fdlimit.rlim_cur) - goto fail; - } - break; - - case spawn_do_open: - { - /* POSIX states that if fildes was already an open file descriptor, - it shall be closed before the new file is opened. This avoid - pontential issues when posix_spawn plus addopen action is called - with the process already at maximum number of file descriptor - opened and also for multiple actions on single-open special - paths (like /dev/watchdog). */ - close_not_cancel (action->action.open_action.fd); - - int ret = open_not_cancel (action->action.open_action.path, - action->action. - open_action.oflag | O_LARGEFILE, - action->action.open_action.mode); - - if (ret == -1) - goto fail; - - int new_fd = ret; - - /* Make sure the desired file descriptor is used. */ - if (ret != action->action.open_action.fd) - { - if (__dup2 (new_fd, action->action.open_action.fd) - != action->action.open_action.fd) - goto fail; - - if (close_not_cancel (new_fd) != 0) - goto fail; - } - } - break; - - case spawn_do_dup2: - if (__dup2 (action->action.dup2_action.fd, - action->action.dup2_action.newfd) - != action->action.dup2_action.newfd) - goto fail; - break; - } - } - } - - /* Set the initial signal mask of the child if POSIX_SPAWN_SETSIGMASK - is set, otherwise restore the previous one. */ - __sigprocmask (SIG_SETMASK, (attr->__flags & POSIX_SPAWN_SETSIGMASK) - ? &attr->__ss : &args->oldmask, 0); - - args->err = 0; - args->exec (args->file, args->argv, args->envp); - - /* This is compatibility function required to enable posix_spawn run - script without shebang definition for older posix_spawn versions - (2.15). */ - maybe_script_execute (args); - -fail: - /* errno should have an appropriate non-zero value; otherwise, - there's a bug in glibc or the kernel. For lack of an error code - (EINTERNALBUG) describing that, use ECHILD. Another option would - be to set args->err to some negative sentinel and have the parent - abort(), but that seems needlessly harsh. */ - args->err = errno ? : ECHILD; - _exit (SPAWN_ERROR); -} - -/* Spawn a new process executing PATH with the attributes describes in *ATTRP. - Before running the process perform the actions described in FILE-ACTIONS. */ -static int -__spawnix (pid_t * pid, const char *file, - const posix_spawn_file_actions_t * file_actions, - const posix_spawnattr_t * attrp, char *const argv[], - char *const envp[], int xflags, - int (*exec) (const char *, char *const *, char *const *)) -{ - pid_t new_pid; - struct posix_spawn_args args; - int ec; - - /* To avoid imposing hard limits on posix_spawn{p} the total number of - arguments is first calculated to allocate a mmap to hold all possible - values. */ - ptrdiff_t argc = 0; - /* Linux allows at most max (0x7FFFFFFF, 1/4 stack size) arguments - to be used in a execve call. We limit to INT_MAX minus one due the - compatiblity code that may execute a shell script (maybe_script_execute) - where it will construct another argument list with an additional - argument. */ - ptrdiff_t limit = INT_MAX - 1; - while (argv[argc++] != NULL) - if (argc == limit) - { - errno = E2BIG; - return errno; - } - - int prot = (PROT_READ | PROT_WRITE - | ((GL (dl_stack_flags) & PF_X) ? PROT_EXEC : 0)); - - /* Add a slack area for child's stack. */ - size_t argv_size = (argc * sizeof (void *)) + 512; - /* We need at least a few pages in case the compiler's stack checking is - enabled. In some configs, it is known to use at least 24KiB. We use - 32KiB to be "safe" from anything the compiler might do. Besides, the - extra pages won't actually be allocated unless they get used. */ - argv_size += (32 * 1024); - size_t stack_size = ALIGN_UP (argv_size, GLRO(dl_pagesize)); - void *stack = __mmap (NULL, stack_size, prot, - MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0); - if (__glibc_unlikely (stack == MAP_FAILED)) - return errno; - - /* Disable asynchronous cancellation. */ - int state; - __libc_ptf_call (__pthread_setcancelstate, - (PTHREAD_CANCEL_DISABLE, &state), 0); - - /* Child must set args.err to something non-negative - we rely on - the parent and child sharing VM. */ - args.err = -1; - args.file = file; - args.exec = exec; - args.fa = file_actions; - args.attr = attrp ? attrp : &(const posix_spawnattr_t) { 0 }; - args.argv = argv; - args.argc = argc; - args.envp = envp; - args.xflags = xflags; - - __libc_signal_block_all (&args.oldmask); - - /* The clone flags used will create a new child that will run in the same - memory space (CLONE_VM) and the execution of calling thread will be - suspend until the child calls execve or _exit. - - Also since the calling thread execution will be suspend, there is not - need for CLONE_SETTLS. Although parent and child share the same TLS - namespace, there will be no concurrent access for TLS variables (errno - for instance). */ - new_pid = CLONE (__spawni_child, STACK (stack, stack_size), stack_size, - CLONE_VM | CLONE_VFORK | SIGCHLD, &args); - - if (new_pid > 0) - { - ec = args.err; - assert (ec >= 0); - if (ec != 0) - __waitpid (new_pid, NULL, 0); - } - else - ec = -new_pid; - - __munmap (stack, stack_size); - - if ((ec == 0) && (pid != NULL)) - *pid = new_pid; - - __libc_signal_restore_set (&args.oldmask); - - __libc_ptf_call (__pthread_setcancelstate, (state, NULL), 0); - - return ec; -} - -/* Spawn a new process executing PATH with the attributes describes in *ATTRP. - Before running the process perform the actions described in FILE-ACTIONS. */ -int -__spawni (pid_t * pid, const char *file, - const posix_spawn_file_actions_t * acts, - const posix_spawnattr_t * attrp, char *const argv[], - char *const envp[], int xflags) -{ - return __spawnix (pid, file, acts, attrp, argv, envp, xflags, - xflags & SPAWN_XFLAGS_USE_PATH ? __execvpe : __execve); -} diff --git a/sysdeps/unix/sysv/linux/speed.c b/sysdeps/unix/sysv/linux/speed.c deleted file mode 100644 index c91be94af3..0000000000 --- a/sysdeps/unix/sysv/linux/speed.c +++ /dev/null @@ -1,97 +0,0 @@ -/* `struct termios' speed frobnication functions. Linux version. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -/* This is a gross hack around a kernel bug. If the cfsetispeed functions - is called with the SPEED argument set to zero this means use the same - speed as for output. But we don't have independent input and output - speeds and therefore cannot record this. - - We use an unused bit in the `c_iflag' field to keep track of this - use of `cfsetispeed'. The value here must correspond to the one used - in `tcsetattr.c'. */ -#define IBAUD0 020000000000 - - -/* Return the output baud rate stored in *TERMIOS_P. */ -speed_t -cfgetospeed (const struct termios *termios_p) -{ - return termios_p->c_cflag & (CBAUD | CBAUDEX); -} - -/* Return the input baud rate stored in *TERMIOS_P. - Although for Linux there is no difference between input and output - speed, the numerical 0 is a special case for the input baud rate. It - should set the input baud rate to the output baud rate. */ -speed_t -cfgetispeed (const struct termios *termios_p) -{ - return ((termios_p->c_iflag & IBAUD0) - ? 0 : termios_p->c_cflag & (CBAUD | CBAUDEX)); -} - -/* Set the output baud rate stored in *TERMIOS_P to SPEED. */ -int -cfsetospeed (struct termios *termios_p, speed_t speed) -{ - if ((speed & ~CBAUD) != 0 - && (speed < B57600 || speed > __MAX_BAUD)) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - -#ifdef _HAVE_STRUCT_TERMIOS_C_OSPEED - termios_p->c_ospeed = speed; -#endif - termios_p->c_cflag &= ~(CBAUD | CBAUDEX); - termios_p->c_cflag |= speed; - - return 0; -} -libc_hidden_def (cfsetospeed) - - -/* Set the input baud rate stored in *TERMIOS_P to SPEED. - Although for Linux there is no difference between input and output - speed, the numerical 0 is a special case for the input baud rate. It - should set the input baud rate to the output baud rate. */ -int -cfsetispeed (struct termios *termios_p, speed_t speed) -{ - if ((speed & ~CBAUD) != 0 - && (speed < B57600 || speed > __MAX_BAUD)) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - -#ifdef _HAVE_STRUCT_TERMIOS_C_ISPEED - termios_p->c_ispeed = speed; -#endif - if (speed == 0) - termios_p->c_iflag |= IBAUD0; - else - { - termios_p->c_iflag &= ~IBAUD0; - termios_p->c_cflag &= ~(CBAUD | CBAUDEX); - termios_p->c_cflag |= speed; - } - - return 0; -} -libc_hidden_def (cfsetispeed) diff --git a/sysdeps/unix/sysv/linux/splice.c b/sysdeps/unix/sysv/linux/splice.c deleted file mode 100644 index 2aaf878c60..0000000000 --- a/sysdeps/unix/sysv/linux/splice.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Splice data to/from a pipe Linux implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ssize_t -splice (int fd_in, loff_t *off_in, int fd_out, loff_t *off_out, size_t len, - unsigned int flags) -{ - return SYSCALL_CANCEL (splice, fd_in, off_in, fd_out, off_out, len, flags); -} diff --git a/sysdeps/unix/sysv/linux/statfs64.c b/sysdeps/unix/sysv/linux/statfs64.c deleted file mode 100644 index 291e421927..0000000000 --- a/sysdeps/unix/sysv/linux/statfs64.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Return information about the filesystem on which FILE resides. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Hide the prototypes for __statfs and statfs so that GCC will not - complain about the different function signatures if they are aliased - to __stat64. If STATFS_IS_STATFS64 is not zero then the statfs and - statfs64 structures have an identical layout but different type names. */ - -#if STATFS_IS_STATFS64 -# define __statfs __statfs_disable -# define statfs statfs_disable -#endif -#include - -#include - - -# if __ASSUME_STATFS64 == 0 -int __no_statfs64 attribute_hidden; -#endif - -/* Return information about the filesystem on which FILE resides. */ -int -__statfs64 (const char *file, struct statfs64 *buf) -{ -#ifdef __NR_statfs64 -# if __ASSUME_STATFS64 == 0 - if (! __no_statfs64) -# endif - { - int result = INLINE_SYSCALL (statfs64, 3, file, sizeof (*buf), buf); - -# if __ASSUME_STATFS64 == 0 - if (result == 0 || errno != ENOSYS) -# endif - return result; - -# if __ASSUME_STATFS64 == 0 - __no_statfs64 = 1; -# endif - } -#endif - -#if __ASSUME_STATFS64 == 0 - struct statfs buf32; - - if (__statfs (file, &buf32) < 0) - return -1; - - buf->f_type = buf32.f_type; - buf->f_bsize = buf32.f_bsize; - buf->f_blocks = buf32.f_blocks; - buf->f_bfree = buf32.f_bfree; - buf->f_bavail = buf32.f_bavail; - buf->f_files = buf32.f_files; - buf->f_ffree = buf32.f_ffree; - buf->f_fsid = buf32.f_fsid; - buf->f_namelen = buf32.f_namelen; - buf->f_frsize = buf32.f_frsize; - memcpy (buf->f_spare, buf32.f_spare, sizeof (buf32.f_spare)); - - return 0; -#endif -} -weak_alias (__statfs64, statfs64) - -#undef __statfs -#undef statfs - -#if STATFS_IS_STATFS64 -weak_alias (__statfs64, __statfs) -weak_alias (__statfs64, statfs) -libc_hidden_ver (__statfs64, __statfs) -#endif diff --git a/sysdeps/unix/sysv/linux/statvfs.c b/sysdeps/unix/sysv/linux/statvfs.c deleted file mode 100644 index 744336e33b..0000000000 --- a/sysdeps/unix/sysv/linux/statvfs.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -extern void __internal_statvfs (const char *name, struct statvfs *buf, - struct statfs *fsbuf, int fd); - - -int -__statvfs (const char *file, struct statvfs *buf) -{ - struct statfs fsbuf; - - /* Get as much information as possible from the system. */ - if (__statfs (file, &fsbuf) < 0) - return -1; - - /* Convert the result. */ - __internal_statvfs (file, buf, &fsbuf, -1); - - /* We signal success if the statfs call succeeded. */ - return 0; -} -weak_alias (__statvfs, statvfs) -libc_hidden_weak (statvfs) diff --git a/sysdeps/unix/sysv/linux/statvfs64.c b/sysdeps/unix/sysv/linux/statvfs64.c deleted file mode 100644 index a89f720b38..0000000000 --- a/sysdeps/unix/sysv/linux/statvfs64.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Return information about the filesystem on which FILE resides. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - - -extern void __internal_statvfs64 (const char *name, struct statvfs64 *buf, - struct statfs64 *fsbuf, int fd); - - -/* Return information about the filesystem on which FILE resides. */ -int -__statvfs64 (const char *file, struct statvfs64 *buf) -{ - struct statfs64 fsbuf; - int res = __statfs64 (file, &fsbuf); - -#ifndef __ASSUME_STATFS64 - if (res < 0 && errno == ENOSYS) - { - struct statvfs buf32; - - res = statvfs (file, &buf32); - if (res == 0) - { - buf->f_bsize = buf32.f_bsize; - buf->f_frsize = buf32.f_frsize; - buf->f_blocks = buf32.f_blocks; - buf->f_bfree = buf32.f_bfree; - buf->f_bavail = buf32.f_bavail; - buf->f_files = buf32.f_files; - buf->f_ffree = buf32.f_ffree; - buf->f_favail = buf32.f_favail; - buf->f_fsid = buf32.f_fsid; - buf->f_flag = buf32.f_flag; - buf->f_namemax = buf32.f_namemax; - memcpy (buf->__f_spare, buf32.__f_spare, sizeof (buf32.__f_spare)); - } - } -#endif - - if (res == 0) - /* Convert the result. */ - __internal_statvfs64 (file, buf, &fsbuf, -1); - - return res; -} -weak_alias (__statvfs64, statvfs64) diff --git a/sysdeps/unix/sysv/linux/sync_file_range.c b/sysdeps/unix/sysv/linux/sync_file_range.c deleted file mode 100644 index 356d522faf..0000000000 --- a/sysdeps/unix/sysv/linux/sync_file_range.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Selective file content synch'ing. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -sync_file_range (int fd, __off64_t offset, __off64_t len, unsigned int flags) -{ -#if defined (__NR_sync_file_range2) - return SYSCALL_CANCEL (sync_file_range2, fd, flags, SYSCALL_LL64 (offset), - SYSCALL_LL64 (len)); -#elif defined (__NR_sync_file_range) - return SYSCALL_CANCEL (sync_file_range, fd, - __ALIGNMENT_ARG SYSCALL_LL64 (offset), - SYSCALL_LL64 (len), flags); -#endif -} diff --git a/sysdeps/unix/sysv/linux/sys/acct.h b/sysdeps/unix/sysv/linux/sys/acct.h deleted file mode 100644 index b4809ce9af..0000000000 --- a/sysdeps/unix/sysv/linux/sys/acct.h +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_ACCT_H -#define _SYS_ACCT_H 1 - -#include -#include -#include -#include - -__BEGIN_DECLS - -#define ACCT_COMM 16 - -/* - comp_t is a 16-bit "floating" point number with a 3-bit base 8 - exponent and a 13-bit fraction. See linux/kernel/acct.c for the - specific encoding system used. -*/ - -typedef uint16_t comp_t; - -struct acct -{ - char ac_flag; /* Flags. */ - uint16_t ac_uid; /* Real user ID. */ - uint16_t ac_gid; /* Real group ID. */ - uint16_t ac_tty; /* Controlling terminal. */ - uint32_t ac_btime; /* Beginning time. */ - comp_t ac_utime; /* User time. */ - comp_t ac_stime; /* System time. */ - comp_t ac_etime; /* Elapsed time. */ - comp_t ac_mem; /* Average memory usage. */ - comp_t ac_io; /* Chars transferred. */ - comp_t ac_rw; /* Blocks read or written. */ - comp_t ac_minflt; /* Minor pagefaults. */ - comp_t ac_majflt; /* Major pagefaults. */ - comp_t ac_swaps; /* Number of swaps. */ - uint32_t ac_exitcode; /* Process exitcode. */ - char ac_comm[ACCT_COMM+1]; /* Command name. */ - char ac_pad[10]; /* Padding bytes. */ -}; - - -struct acct_v3 -{ - char ac_flag; /* Flags */ - char ac_version; /* Always set to ACCT_VERSION */ - uint16_t ac_tty; /* Control Terminal */ - uint32_t ac_exitcode; /* Exitcode */ - uint32_t ac_uid; /* Real User ID */ - uint32_t ac_gid; /* Real Group ID */ - uint32_t ac_pid; /* Process ID */ - uint32_t ac_ppid; /* Parent Process ID */ - uint32_t ac_btime; /* Process Creation Time */ - float ac_etime; /* Elapsed Time */ - comp_t ac_utime; /* User Time */ - comp_t ac_stime; /* System Time */ - comp_t ac_mem; /* Average Memory Usage */ - comp_t ac_io; /* Chars Transferred */ - comp_t ac_rw; /* Blocks Read or Written */ - comp_t ac_minflt; /* Minor Pagefaults */ - comp_t ac_majflt; /* Major Pagefaults */ - comp_t ac_swaps; /* Number of Swaps */ - char ac_comm[ACCT_COMM]; /* Command Name */ -}; - - -enum - { - AFORK = 0x01, /* Has executed fork, but no exec. */ - ASU = 0x02, /* Used super-user privileges. */ - ACORE = 0x08, /* Dumped core. */ - AXSIG = 0x10 /* Killed by a signal. */ - }; - -#if __BYTE_ORDER == __BIG_ENDIAN -# define ACCT_BYTEORDER 0x80 /* Accounting file is big endian. */ -#else -# define ACCT_BYTEORDER 0x00 /* Accounting file is little endian. */ -#endif - -#define AHZ 100 - - -/* Switch process accounting on and off. */ -extern int acct (const char *__filename) __THROW; - -__END_DECLS - -#endif /* sys/acct.h */ diff --git a/sysdeps/unix/sysv/linux/sys/epoll.h b/sysdeps/unix/sysv/linux/sys/epoll.h deleted file mode 100644 index 1498058396..0000000000 --- a/sysdeps/unix/sysv/linux/sys/epoll.h +++ /dev/null @@ -1,138 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_EPOLL_H -#define _SYS_EPOLL_H 1 - -#include -#include - -#include - -/* Get the platform-dependent flags. */ -#include - -#ifndef __EPOLL_PACKED -# define __EPOLL_PACKED -#endif - - -enum EPOLL_EVENTS - { - EPOLLIN = 0x001, -#define EPOLLIN EPOLLIN - EPOLLPRI = 0x002, -#define EPOLLPRI EPOLLPRI - EPOLLOUT = 0x004, -#define EPOLLOUT EPOLLOUT - EPOLLRDNORM = 0x040, -#define EPOLLRDNORM EPOLLRDNORM - EPOLLRDBAND = 0x080, -#define EPOLLRDBAND EPOLLRDBAND - EPOLLWRNORM = 0x100, -#define EPOLLWRNORM EPOLLWRNORM - EPOLLWRBAND = 0x200, -#define EPOLLWRBAND EPOLLWRBAND - EPOLLMSG = 0x400, -#define EPOLLMSG EPOLLMSG - EPOLLERR = 0x008, -#define EPOLLERR EPOLLERR - EPOLLHUP = 0x010, -#define EPOLLHUP EPOLLHUP - EPOLLRDHUP = 0x2000, -#define EPOLLRDHUP EPOLLRDHUP - EPOLLEXCLUSIVE = 1u << 28, -#define EPOLLEXCLUSIVE EPOLLEXCLUSIVE - EPOLLWAKEUP = 1u << 29, -#define EPOLLWAKEUP EPOLLWAKEUP - EPOLLONESHOT = 1u << 30, -#define EPOLLONESHOT EPOLLONESHOT - EPOLLET = 1u << 31 -#define EPOLLET EPOLLET - }; - - -/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). */ -#define EPOLL_CTL_ADD 1 /* Add a file descriptor to the interface. */ -#define EPOLL_CTL_DEL 2 /* Remove a file descriptor from the interface. */ -#define EPOLL_CTL_MOD 3 /* Change file descriptor epoll_event structure. */ - - -typedef union epoll_data -{ - void *ptr; - int fd; - uint32_t u32; - uint64_t u64; -} epoll_data_t; - -struct epoll_event -{ - uint32_t events; /* Epoll events */ - epoll_data_t data; /* User data variable */ -} __EPOLL_PACKED; - - -__BEGIN_DECLS - -/* Creates an epoll instance. Returns an fd for the new instance. - The "size" parameter is a hint specifying the number of file - descriptors to be associated with the new instance. The fd - returned by epoll_create() should be closed with close(). */ -extern int epoll_create (int __size) __THROW; - -/* Same as epoll_create but with an FLAGS parameter. The unused SIZE - parameter has been dropped. */ -extern int epoll_create1 (int __flags) __THROW; - - -/* Manipulate an epoll instance "epfd". Returns 0 in case of success, - -1 in case of error ( the "errno" variable will contain the - specific error code ) The "op" parameter is one of the EPOLL_CTL_* - constants defined above. The "fd" parameter is the target of the - operation. The "event" parameter describes which events the caller - is interested in and any associated user data. */ -extern int epoll_ctl (int __epfd, int __op, int __fd, - struct epoll_event *__event) __THROW; - - -/* Wait for events on an epoll instance "epfd". Returns the number of - triggered events returned in "events" buffer. Or -1 in case of - error with the "errno" variable set to the specific error code. The - "events" parameter is a buffer that will contain triggered - events. The "maxevents" is the maximum number of events to be - returned ( usually size of "events" ). The "timeout" parameter - specifies the maximum wait time in milliseconds (-1 == infinite). - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int epoll_wait (int __epfd, struct epoll_event *__events, - int __maxevents, int __timeout); - - -/* Same as epoll_wait, but the thread's signal mask is temporarily - and atomically replaced with the one provided as parameter. - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int epoll_pwait (int __epfd, struct epoll_event *__events, - int __maxevents, int __timeout, - const __sigset_t *__ss); - -__END_DECLS - -#endif /* sys/epoll.h */ diff --git a/sysdeps/unix/sysv/linux/sys/eventfd.h b/sysdeps/unix/sysv/linux/sys/eventfd.h deleted file mode 100644 index 74d836a5d6..0000000000 --- a/sysdeps/unix/sysv/linux/sys/eventfd.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_EVENTFD_H -#define _SYS_EVENTFD_H 1 - -#include - -/* Get the platform-dependent flags. */ -#include - -/* Type for event counter. */ -typedef uint64_t eventfd_t; - - -__BEGIN_DECLS - -/* Return file descriptor for generic event channel. Set initial - value to COUNT. */ -extern int eventfd (unsigned int __count, int __flags) __THROW; - -/* Read event counter and possibly wait for events. */ -extern int eventfd_read (int __fd, eventfd_t *__value); - -/* Increment event counter. */ -extern int eventfd_write (int __fd, eventfd_t __value); - -__END_DECLS - -#endif /* sys/eventfd.h */ diff --git a/sysdeps/unix/sysv/linux/sys/fanotify.h b/sysdeps/unix/sysv/linux/sys/fanotify.h deleted file mode 100644 index d7e921e595..0000000000 --- a/sysdeps/unix/sysv/linux/sys/fanotify.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_FANOTIFY_H -#define _SYS_FANOTIFY_H 1 - -#include -#include - - -__BEGIN_DECLS - -/* Create and initialize fanotify group. */ -extern int fanotify_init (unsigned int __flags, unsigned int __event_f_flags) - __THROW; - -/* Add, remove, or modify an fanotify mark on a filesystem object. */ -extern int fanotify_mark (int __fanotify_fd, unsigned int __flags, - uint64_t __mask, int __dfd, const char *__pathname) - __THROW; - -__END_DECLS - -#endif /* sys/fanotify.h */ diff --git a/sysdeps/unix/sysv/linux/sys/fsuid.h b/sysdeps/unix/sysv/linux/sys/fsuid.h deleted file mode 100644 index 3b6b2b6b32..0000000000 --- a/sysdeps/unix/sysv/linux/sys/fsuid.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_FSUID_H -#define _SYS_FSUID_H 1 - -#include -#include - -__BEGIN_DECLS - -/* Change uid used for file access control to UID, without affecting - other privileges (such as who can send signals at the process). */ -extern int setfsuid (__uid_t __uid) __THROW; - -/* Ditto for group id. */ -extern int setfsgid (__gid_t __gid) __THROW; - -__END_DECLS - -#endif /* fsuid.h */ diff --git a/sysdeps/unix/sysv/linux/sys/inotify.h b/sysdeps/unix/sysv/linux/sys/inotify.h deleted file mode 100644 index c74477873b..0000000000 --- a/sysdeps/unix/sysv/linux/sys/inotify.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_INOTIFY_H -#define _SYS_INOTIFY_H 1 - -#include - -/* Get the platform-dependent flags. */ -#include - - -/* Structure describing an inotify event. */ -struct inotify_event -{ - int wd; /* Watch descriptor. */ - uint32_t mask; /* Watch mask. */ - uint32_t cookie; /* Cookie to synchronize two events. */ - uint32_t len; /* Length (including NULs) of name. */ - char name __flexarr; /* Name. */ -}; - - -/* Supported events suitable for MASK parameter of INOTIFY_ADD_WATCH. */ -#define IN_ACCESS 0x00000001 /* File was accessed. */ -#define IN_MODIFY 0x00000002 /* File was modified. */ -#define IN_ATTRIB 0x00000004 /* Metadata changed. */ -#define IN_CLOSE_WRITE 0x00000008 /* Writtable file was closed. */ -#define IN_CLOSE_NOWRITE 0x00000010 /* Unwrittable file closed. */ -#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close. */ -#define IN_OPEN 0x00000020 /* File was opened. */ -#define IN_MOVED_FROM 0x00000040 /* File was moved from X. */ -#define IN_MOVED_TO 0x00000080 /* File was moved to Y. */ -#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* Moves. */ -#define IN_CREATE 0x00000100 /* Subfile was created. */ -#define IN_DELETE 0x00000200 /* Subfile was deleted. */ -#define IN_DELETE_SELF 0x00000400 /* Self was deleted. */ -#define IN_MOVE_SELF 0x00000800 /* Self was moved. */ - -/* Events sent by the kernel. */ -#define IN_UNMOUNT 0x00002000 /* Backing fs was unmounted. */ -#define IN_Q_OVERFLOW 0x00004000 /* Event queued overflowed. */ -#define IN_IGNORED 0x00008000 /* File was ignored. */ - -/* Helper events. */ -#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close. */ -#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* Moves. */ - -/* Special flags. */ -#define IN_ONLYDIR 0x01000000 /* Only watch the path if it is a - directory. */ -#define IN_DONT_FOLLOW 0x02000000 /* Do not follow a sym link. */ -#define IN_EXCL_UNLINK 0x04000000 /* Exclude events on unlinked - objects. */ -#define IN_MASK_ADD 0x20000000 /* Add to the mask of an already - existing watch. */ -#define IN_ISDIR 0x40000000 /* Event occurred against dir. */ -#define IN_ONESHOT 0x80000000 /* Only send event once. */ - -/* All events which a program can wait on. */ -#define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE \ - | IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM \ - | IN_MOVED_TO | IN_CREATE | IN_DELETE \ - | IN_DELETE_SELF | IN_MOVE_SELF) - - -__BEGIN_DECLS - -/* Create and initialize inotify instance. */ -extern int inotify_init (void) __THROW; - -/* Create and initialize inotify instance. */ -extern int inotify_init1 (int __flags) __THROW; - -/* Add watch of object NAME to inotify instance FD. Notify about - events specified by MASK. */ -extern int inotify_add_watch (int __fd, const char *__name, uint32_t __mask) - __THROW; - -/* Remove the watch specified by WD from the inotify instance FD. */ -extern int inotify_rm_watch (int __fd, int __wd) __THROW; - -__END_DECLS - -#endif /* sys/inotify.h */ diff --git a/sysdeps/unix/sysv/linux/sys/kd.h b/sysdeps/unix/sysv/linux/sys/kd.h deleted file mode 100644 index 272b7d62ea..0000000000 --- a/sysdeps/unix/sysv/linux/sys/kd.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_KD_H -#define _SYS_KD_H 1 - -/* Make sure the header is not loaded. */ -#ifndef _LINUX_TYPES_H -# define _LINUX_TYPES_H 1 -# define __undef_LINUX_TYPES_H -#endif - -#include - -#ifdef __undef_LINUX_TYPES_H -# undef _LINUX_TYPES_H -# undef __undef_LINUX_TYPES_H -#endif - -#endif /* sys/kd.h */ diff --git a/sysdeps/unix/sysv/linux/sys/klog.h b/sysdeps/unix/sysv/linux/sys/klog.h deleted file mode 100644 index 33bd751341..0000000000 --- a/sysdeps/unix/sysv/linux/sys/klog.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_KLOG_H - -#define _SYS_KLOG_H 1 -#include - -__BEGIN_DECLS - -/* Control the kernel's logging facility. This corresponds exactly to - the kernel's syslog system call, but that name is easily confused - with the user-level syslog facility, which is something completely - different. */ -extern int klogctl (int __type, char *__bufp, int __len) __THROW; - -__END_DECLS - -#endif /* _SYS_KLOG_H */ diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h deleted file mode 100644 index 55424e77ea..0000000000 --- a/sysdeps/unix/sysv/linux/sys/mount.h +++ /dev/null @@ -1,150 +0,0 @@ -/* Header file for mounting/unmount Linux filesystems. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This is taken from /usr/include/linux/fs.h. */ - -#ifndef _SYS_MOUNT_H -#define _SYS_MOUNT_H 1 - -#include -#include - -#define BLOCK_SIZE 1024 -#define BLOCK_SIZE_BITS 10 - - -/* These are the fs-independent mount-flags: up to 16 flags are - supported */ -enum -{ - MS_RDONLY = 1, /* Mount read-only. */ -#define MS_RDONLY MS_RDONLY - MS_NOSUID = 2, /* Ignore suid and sgid bits. */ -#define MS_NOSUID MS_NOSUID - MS_NODEV = 4, /* Disallow access to device special files. */ -#define MS_NODEV MS_NODEV - MS_NOEXEC = 8, /* Disallow program execution. */ -#define MS_NOEXEC MS_NOEXEC - MS_SYNCHRONOUS = 16, /* Writes are synced at once. */ -#define MS_SYNCHRONOUS MS_SYNCHRONOUS - MS_REMOUNT = 32, /* Alter flags of a mounted FS. */ -#define MS_REMOUNT MS_REMOUNT - MS_MANDLOCK = 64, /* Allow mandatory locks on an FS. */ -#define MS_MANDLOCK MS_MANDLOCK - MS_DIRSYNC = 128, /* Directory modifications are synchronous. */ -#define MS_DIRSYNC MS_DIRSYNC - MS_NOATIME = 1024, /* Do not update access times. */ -#define MS_NOATIME MS_NOATIME - MS_NODIRATIME = 2048, /* Do not update directory access times. */ -#define MS_NODIRATIME MS_NODIRATIME - MS_BIND = 4096, /* Bind directory at different place. */ -#define MS_BIND MS_BIND - MS_MOVE = 8192, -#define MS_MOVE MS_MOVE - MS_REC = 16384, -#define MS_REC MS_REC - MS_SILENT = 32768, -#define MS_SILENT MS_SILENT - MS_POSIXACL = 1 << 16, /* VFS does not apply the umask. */ -#define MS_POSIXACL MS_POSIXACL - MS_UNBINDABLE = 1 << 17, /* Change to unbindable. */ -#define MS_UNBINDABLE MS_UNBINDABLE - MS_PRIVATE = 1 << 18, /* Change to private. */ -#define MS_PRIVATE MS_PRIVATE - MS_SLAVE = 1 << 19, /* Change to slave. */ -#define MS_SLAVE MS_SLAVE - MS_SHARED = 1 << 20, /* Change to shared. */ -#define MS_SHARED MS_SHARED - MS_RELATIME = 1 << 21, /* Update atime relative to mtime/ctime. */ -#define MS_RELATIME MS_RELATIME - MS_KERNMOUNT = 1 << 22, /* This is a kern_mount call. */ -#define MS_KERNMOUNT MS_KERNMOUNT - MS_I_VERSION = 1 << 23, /* Update inode I_version field. */ -#define MS_I_VERSION MS_I_VERSION - MS_STRICTATIME = 1 << 24, /* Always perform atime updates. */ -#define MS_STRICTATIME MS_STRICTATIME - MS_LAZYTIME = 1 << 25, /* Update the on-disk [acm]times lazily. */ -#define MS_LAZYTIME MS_LAZYTIME - MS_ACTIVE = 1 << 30, -#define MS_ACTIVE MS_ACTIVE - MS_NOUSER = 1 << 31 -#define MS_NOUSER MS_NOUSER -}; - -/* Flags that can be altered by MS_REMOUNT */ -#define MS_RMT_MASK (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION \ - |MS_LAZYTIME) - - -/* Magic mount flag number. Has to be or-ed to the flag values. */ - -#define MS_MGC_VAL 0xc0ed0000 /* Magic flag number to indicate "new" flags */ -#define MS_MGC_MSK 0xffff0000 /* Magic flag number mask */ - - -/* The read-only stuff doesn't really belong here, but any other place - is probably as bad and I don't want to create yet another include - file. */ - -#define BLKROSET _IO(0x12, 93) /* Set device read-only (0 = read-write). */ -#define BLKROGET _IO(0x12, 94) /* Get read-only status (0 = read_write). */ -#define BLKRRPART _IO(0x12, 95) /* Re-read partition table. */ -#define BLKGETSIZE _IO(0x12, 96) /* Return device size. */ -#define BLKFLSBUF _IO(0x12, 97) /* Flush buffer cache. */ -#define BLKRASET _IO(0x12, 98) /* Set read ahead for block device. */ -#define BLKRAGET _IO(0x12, 99) /* Get current read ahead setting. */ -#define BLKFRASET _IO(0x12,100) /* Set filesystem read-ahead. */ -#define BLKFRAGET _IO(0x12,101) /* Get filesystem read-ahead. */ -#define BLKSECTSET _IO(0x12,102) /* Set max sectors per request. */ -#define BLKSECTGET _IO(0x12,103) /* Get max sectors per request. */ -#define BLKSSZGET _IO(0x12,104) /* Get block device sector size. */ -#define BLKBSZGET _IOR(0x12,112,size_t) -#define BLKBSZSET _IOW(0x12,113,size_t) -#define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size. */ - - -/* Possible value for FLAGS parameter of `umount2'. */ -enum -{ - MNT_FORCE = 1, /* Force unmounting. */ -#define MNT_FORCE MNT_FORCE - MNT_DETACH = 2, /* Just detach from the tree. */ -#define MNT_DETACH MNT_DETACH - MNT_EXPIRE = 4, /* Mark for expiry. */ -#define MNT_EXPIRE MNT_EXPIRE - UMOUNT_NOFOLLOW = 8 /* Don't follow symlink on umount. */ -#define UMOUNT_NOFOLLOW UMOUNT_NOFOLLOW -}; - - -__BEGIN_DECLS - -/* Mount a filesystem. */ -extern int mount (const char *__special_file, const char *__dir, - const char *__fstype, unsigned long int __rwflag, - const void *__data) __THROW; - -/* Unmount a filesystem. */ -extern int umount (const char *__special_file) __THROW; - -/* Unmount a filesystem. Force unmounting if FLAGS is set to MNT_FORCE. */ -extern int umount2 (const char *__special_file, int __flags) __THROW; - -__END_DECLS - -#endif /* _SYS_MOUNT_H */ diff --git a/sysdeps/unix/sysv/linux/sys/pci.h b/sysdeps/unix/sysv/linux/sys/pci.h deleted file mode 100644 index 49cd2d5048..0000000000 --- a/sysdeps/unix/sysv/linux/sys/pci.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PCI_H -#define _SYS_PCI_H 1 - -/* We use the constants from the kernel. */ -#include - -#endif /* sys/pci.h */ diff --git a/sysdeps/unix/sysv/linux/sys/personality.h b/sysdeps/unix/sysv/linux/sys/personality.h deleted file mode 100644 index 114695cb15..0000000000 --- a/sysdeps/unix/sysv/linux/sys/personality.h +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Taken verbatim from Linux 2.6 (include/linux/personality.h). */ - -#ifndef _SYS_PERSONALITY_H -#define _SYS_PERSONALITY_H 1 - -#include - -/* Flags for bug emulation. - These occupy the top three bytes. */ -enum - { - UNAME26 = 0x0020000, - ADDR_NO_RANDOMIZE = 0x0040000, - FDPIC_FUNCPTRS = 0x0080000, - MMAP_PAGE_ZERO = 0x0100000, - ADDR_COMPAT_LAYOUT = 0x0200000, - READ_IMPLIES_EXEC = 0x0400000, - ADDR_LIMIT_32BIT = 0x0800000, - SHORT_INODE = 0x1000000, - WHOLE_SECONDS = 0x2000000, - STICKY_TIMEOUTS = 0x4000000, - ADDR_LIMIT_3GB = 0x8000000 - }; - -/* Personality types. - - These go in the low byte. Avoid using the top bit, it will - conflict with error returns. */ -enum - { - PER_LINUX = 0x0000, - PER_LINUX_32BIT = 0x0000 | ADDR_LIMIT_32BIT, - PER_LINUX_FDPIC = 0x0000 | FDPIC_FUNCPTRS, - PER_SVR4 = 0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO, - PER_SVR3 = 0x0002 | STICKY_TIMEOUTS | SHORT_INODE, - PER_SCOSVR3 = 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS | SHORT_INODE, - PER_OSR5 = 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS, - PER_WYSEV386 = 0x0004 | STICKY_TIMEOUTS | SHORT_INODE, - PER_ISCR4 = 0x0005 | STICKY_TIMEOUTS, - PER_BSD = 0x0006, - PER_SUNOS = 0x0006 | STICKY_TIMEOUTS, - PER_XENIX = 0x0007 | STICKY_TIMEOUTS | SHORT_INODE, - PER_LINUX32 = 0x0008, - PER_LINUX32_3GB = 0x0008 | ADDR_LIMIT_3GB, - PER_IRIX32 = 0x0009 | STICKY_TIMEOUTS, /* IRIX5 32-bit */ - PER_IRIXN32 = 0x000a | STICKY_TIMEOUTS, /* IRIX6 new 32-bit */ - PER_IRIX64 = 0x000b | STICKY_TIMEOUTS, /* IRIX6 64-bit */ - PER_RISCOS = 0x000c, - PER_SOLARIS = 0x000d | STICKY_TIMEOUTS, - PER_UW7 = 0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO, - PER_OSF4 = 0x000f, - PER_HPUX = 0x0010, - PER_MASK = 0x00ff, - }; - -__BEGIN_DECLS - -/* Set different ABIs (personalities). */ -extern int personality (unsigned long int __persona) __THROW; - -__END_DECLS - -#endif /* sys/personality.h */ diff --git a/sysdeps/unix/sysv/linux/sys/prctl.h b/sysdeps/unix/sysv/linux/sys/prctl.h deleted file mode 100644 index 446ca202d3..0000000000 --- a/sysdeps/unix/sysv/linux/sys/prctl.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PRCTL_H -#define _SYS_PRCTL_H 1 - -#include -#include /* The magic values come from here */ - -__BEGIN_DECLS - -/* Control process execution. */ -extern int prctl (int __option, ...) __THROW; - -__END_DECLS - -#endif /* sys/prctl.h */ diff --git a/sysdeps/unix/sysv/linux/sys/procfs.h b/sysdeps/unix/sysv/linux/sys/procfs.h deleted file mode 100644 index b3b2cf3e12..0000000000 --- a/sysdeps/unix/sysv/linux/sys/procfs.h +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somehow modelled after the file of the same name on SysVr4 - systems. It provides a definition of the core file format for ELF - used on Linux. */ - -#include -#include -#include -#include -#include -#include -#include - -__BEGIN_DECLS - -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - gdb doesn't really use excluded. Fields present but not used are - marked with "XXX". */ -struct elf_prstatus - { -#if 0 - long int pr_flags; /* XXX Process flags. */ - short int pr_why; /* XXX Reason for process halt. */ - short int pr_what; /* XXX More detailed reason. */ -#endif - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ -#if 0 - stack_t pr_altstack; /* Alternate stack info. */ - struct sigaction pr_action; /* Signal action for current sig. */ -#endif - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ -#if 0 - long int pr_instr; /* Current instruction. */ -#endif - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned short int pr_uid; - unsigned short int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef gregset_t prgregset_t; -typedef fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore habe only ine PID type. */ -typedef __pid_t lwpid_t; - - -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/sys/ptrace.h b/sysdeps/unix/sysv/linux/sys/ptrace.h deleted file mode 100644 index 1daadd1950..0000000000 --- a/sysdeps/unix/sysv/linux/sys/ptrace.h +++ /dev/null @@ -1,229 +0,0 @@ -/* `ptrace' debugger support interface. Linux version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PTRACE_H -#define _SYS_PTRACE_H 1 - -#include -#include - -__BEGIN_DECLS - -/* Type of the REQUEST argument to `ptrace.' */ -enum __ptrace_request -{ - /* Indicate that the process making this request should be traced. - All signals received by this process can be intercepted by its - parent, and its parent can use the other `ptrace' requests. */ - PTRACE_TRACEME = 0, -#define PT_TRACE_ME PTRACE_TRACEME - - /* Return the word in the process's text space at address ADDR. */ - PTRACE_PEEKTEXT = 1, -#define PT_READ_I PTRACE_PEEKTEXT - - /* Return the word in the process's data space at address ADDR. */ - PTRACE_PEEKDATA = 2, -#define PT_READ_D PTRACE_PEEKDATA - - /* Return the word in the process's user area at offset ADDR. */ - PTRACE_PEEKUSER = 3, -#define PT_READ_U PTRACE_PEEKUSER - - /* Write the word DATA into the process's text space at address ADDR. */ - PTRACE_POKETEXT = 4, -#define PT_WRITE_I PTRACE_POKETEXT - - /* Write the word DATA into the process's data space at address ADDR. */ - PTRACE_POKEDATA = 5, -#define PT_WRITE_D PTRACE_POKEDATA - - /* Write the word DATA into the process's user area at offset ADDR. */ - PTRACE_POKEUSER = 6, -#define PT_WRITE_U PTRACE_POKEUSER - - /* Continue the process. */ - PTRACE_CONT = 7, -#define PT_CONTINUE PTRACE_CONT - - /* Kill the process. */ - PTRACE_KILL = 8, -#define PT_KILL PTRACE_KILL - - /* Single step the process. - This is not supported on all machines. */ - PTRACE_SINGLESTEP = 9, -#define PT_STEP PTRACE_SINGLESTEP - - /* Get all general purpose registers used by a processes. - This is not supported on all machines. */ - PTRACE_GETREGS = 12, -#define PT_GETREGS PTRACE_GETREGS - - /* Set all general purpose registers used by a processes. - This is not supported on all machines. */ - PTRACE_SETREGS = 13, -#define PT_SETREGS PTRACE_SETREGS - - /* Get all floating point registers used by a processes. - This is not supported on all machines. */ - PTRACE_GETFPREGS = 14, -#define PT_GETFPREGS PTRACE_GETFPREGS - - /* Set all floating point registers used by a processes. - This is not supported on all machines. */ - PTRACE_SETFPREGS = 15, -#define PT_SETFPREGS PTRACE_SETFPREGS - - /* Attach to a process that is already running. */ - PTRACE_ATTACH = 16, -#define PT_ATTACH PTRACE_ATTACH - - /* Detach from a process attached to with PTRACE_ATTACH. */ - PTRACE_DETACH = 17, -#define PT_DETACH PTRACE_DETACH - - /* Get all extended floating point registers used by a processes. - This is not supported on all machines. */ - PTRACE_GETFPXREGS = 18, -#define PT_GETFPXREGS PTRACE_GETFPXREGS - - /* Set all extended floating point registers used by a processes. - This is not supported on all machines. */ - PTRACE_SETFPXREGS = 19, -#define PT_SETFPXREGS PTRACE_SETFPXREGS - - /* Continue and stop at the next (return from) syscall. */ - PTRACE_SYSCALL = 24, -#define PT_SYSCALL PTRACE_SYSCALL - - /* Set ptrace filter options. */ - PTRACE_SETOPTIONS = 0x4200, -#define PT_SETOPTIONS PTRACE_SETOPTIONS - - /* Get last ptrace message. */ - PTRACE_GETEVENTMSG = 0x4201, -#define PT_GETEVENTMSG PTRACE_GETEVENTMSG - - /* Get siginfo for process. */ - PTRACE_GETSIGINFO = 0x4202, -#define PT_GETSIGINFO PTRACE_GETSIGINFO - - /* Set new siginfo for process. */ - PTRACE_SETSIGINFO = 0x4203, -#define PT_SETSIGINFO PTRACE_SETSIGINFO - - /* Get register content. */ - PTRACE_GETREGSET = 0x4204, -#define PTRACE_GETREGSET PTRACE_GETREGSET - - /* Set register content. */ - PTRACE_SETREGSET = 0x4205, -#define PTRACE_SETREGSET PTRACE_SETREGSET - - /* Like PTRACE_ATTACH, but do not force tracee to trap and do not affect - signal or group stop state. */ - PTRACE_SEIZE = 0x4206, -#define PTRACE_SEIZE PTRACE_SEIZE - - /* Trap seized tracee. */ - PTRACE_INTERRUPT = 0x4207, -#define PTRACE_INTERRUPT PTRACE_INTERRUPT - - /* Wait for next group event. */ - PTRACE_LISTEN = 0x4208, -#define PTRACE_LISTEN PTRACE_LISTEN - - PTRACE_PEEKSIGINFO = 0x4209, -#define PTRACE_PEEKSIGINFO PTRACE_PEEKSIGINFO - - PTRACE_GETSIGMASK = 0x420a, -#define PTRACE_GETSIGMASK PTRACE_GETSIGMASK - - PTRACE_SETSIGMASK = 0x420b, -#define PTRACE_SETSIGMASK PTRACE_SETSIGMASK - - PTRACE_SECCOMP_GET_FILTER = 0x420c -#define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER -}; - - -/* Flag for PTRACE_LISTEN. */ -enum __ptrace_flags -{ - PTRACE_SEIZE_DEVEL = 0x80000000 -}; - -/* Options set using PTRACE_SETOPTIONS. */ -enum __ptrace_setoptions -{ - PTRACE_O_TRACESYSGOOD = 0x00000001, - PTRACE_O_TRACEFORK = 0x00000002, - PTRACE_O_TRACEVFORK = 0x00000004, - PTRACE_O_TRACECLONE = 0x00000008, - PTRACE_O_TRACEEXEC = 0x00000010, - PTRACE_O_TRACEVFORKDONE = 0x00000020, - PTRACE_O_TRACEEXIT = 0x00000040, - PTRACE_O_TRACESECCOMP = 0x00000080, - PTRACE_O_EXITKILL = 0x00100000, - PTRACE_O_SUSPEND_SECCOMP = 0x00200000, - PTRACE_O_MASK = 0x003000ff -}; - -enum __ptrace_eventcodes -{ -/* Wait extended result codes for the above trace options. */ - PTRACE_EVENT_FORK = 1, - PTRACE_EVENT_VFORK = 2, - PTRACE_EVENT_CLONE = 3, - PTRACE_EVENT_EXEC = 4, - PTRACE_EVENT_VFORK_DONE = 5, - PTRACE_EVENT_EXIT = 6, - PTRACE_EVENT_SECCOMP = 7, -/* Extended result codes enabled by means other than options. */ - PTRACE_EVENT_STOP = 128 -}; - -/* Arguments for PTRACE_PEEKSIGINFO. */ -struct __ptrace_peeksiginfo_args -{ - __uint64_t off; /* From which siginfo to start. */ - __uint32_t flags; /* Flags for peeksiginfo. */ - __int32_t nr; /* How many siginfos to take. */ -}; - -enum __ptrace_peeksiginfo_flags -{ - /* Read signals from a shared (process wide) queue. */ - PTRACE_PEEKSIGINFO_SHARED = (1 << 0) -}; - -/* Perform process tracing functions. REQUEST is one of the values - above, and determines the action to be taken. - For all requests except PTRACE_TRACEME, PID specifies the process to be - traced. - - PID and the other arguments described above for the various requests should - appear (those that are used for the particular request) as: - pid_t PID, void *ADDR, int DATA, void *ADDR2 - after REQUEST. */ -extern long int ptrace (enum __ptrace_request __request, ...) __THROW; - -__END_DECLS - -#endif /* _SYS_PTRACE_H */ diff --git a/sysdeps/unix/sysv/linux/sys/quota.h b/sysdeps/unix/sysv/linux/sys/quota.h deleted file mode 100644 index 13c28a7b6c..0000000000 --- a/sysdeps/unix/sysv/linux/sys/quota.h +++ /dev/null @@ -1,135 +0,0 @@ -/* This just represents the non-kernel parts of . - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* - * Copyright (c) 1982, 1986 Regents of the University of California. - * All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Robert Elz at The University of Melbourne. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef _SYS_QUOTA_H -#define _SYS_QUOTA_H 1 - -#include -#include - -#include - -/* - * Convert diskblocks to blocks and the other way around. - * currently only to fool the BSD source. :-) - */ -#define dbtob(num) ((num) << 10) -#define btodb(num) ((num) >> 10) - -/* - * Convert count of filesystem blocks to diskquota blocks, meant for - * filesystems where i_blksize != 1024. - */ -#define fs_to_dq_blocks(num, blksize) (((num) * (blksize)) / 1024) - -/* - * Definitions for disk quotas imposed on the average user - * (big brother finally hits Linux). - * - * The following constants define the amount of time given a user - * before the soft limits are treated as hard limits (usually resulting - * in an allocation failure). The timer is started when the user crosses - * their soft limit, it is reset when they go below their soft limit. - */ -#define MAX_IQ_TIME 604800 /* (7*24*60*60) 1 week */ -#define MAX_DQ_TIME 604800 /* (7*24*60*60) 1 week */ - -#define QUOTAFILENAME "quota" -#define QUOTAGROUP "staff" - -#define NR_DQHASH 43 /* Just an arbitrary number any suggestions ? */ -#define NR_DQUOTS 256 /* Number of quotas active at one time */ - -/* Old name for struct if_dqblk. */ -struct dqblk - { - __uint64_t dqb_bhardlimit; /* absolute limit on disk quota blocks alloc */ - __uint64_t dqb_bsoftlimit; /* preferred limit on disk quota blocks */ - __uint64_t dqb_curspace; /* current quota block count */ - __uint64_t dqb_ihardlimit; /* maximum # allocated inodes */ - __uint64_t dqb_isoftlimit; /* preferred inode limit */ - __uint64_t dqb_curinodes; /* current # allocated inodes */ - __uint64_t dqb_btime; /* time limit for excessive disk use */ - __uint64_t dqb_itime; /* time limit for excessive files */ - __uint32_t dqb_valid; /* bitmask of QIF_* constants */ - }; - -/* - * Shorthand notation. - */ -#define dq_bhardlimit dq_dqb.dqb_bhardlimit -#define dq_bsoftlimit dq_dqb.dqb_bsoftlimit -#define dq_curspace dq_dqb.dqb_curspace -#define dq_valid dq_dqb.dqb_valid -#define dq_ihardlimit dq_dqb.dqb_ihardlimit -#define dq_isoftlimit dq_dqb.dqb_isoftlimit -#define dq_curinodes dq_dqb.dqb_curinodes -#define dq_btime dq_dqb.dqb_btime -#define dq_itime dq_dqb.dqb_itime - -#define dqoff(UID) ((loff_t)((UID) * sizeof (struct dqblk))) - -/* Old name for struct if_dqinfo. */ -struct dqinfo - { - __uint64_t dqi_bgrace; - __uint64_t dqi_igrace; - __uint32_t dqi_flags; - __uint32_t dqi_valid; - }; - -__BEGIN_DECLS - -extern int quotactl (int __cmd, const char *__special, int __id, - __caddr_t __addr) __THROW; - -__END_DECLS - -#endif /* sys/quota.h */ diff --git a/sysdeps/unix/sysv/linux/sys/raw.h b/sysdeps/unix/sysv/linux/sys/raw.h deleted file mode 100644 index 0713a0521c..0000000000 --- a/sysdeps/unix/sysv/linux/sys/raw.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_RAW_H -#define _SYS_RAW_H 1 - -#include -#include - -/* The major device number for raw devices. */ -#define RAW_MAJOR 162 - -/* `ioctl' commands for raw devices. */ -#define RAW_SETBIND _IO(0xac, 0) -#define RAW_GETBIND _IO(0xac, 1) - -struct raw_config_request -{ - int raw_minor; - uint64_t block_major; - uint64_t block_minor; -}; - -#endif /* sys/raw.h */ diff --git a/sysdeps/unix/sysv/linux/sys/reboot.h b/sysdeps/unix/sysv/linux/sys/reboot.h deleted file mode 100644 index fafd2fb0c1..0000000000 --- a/sysdeps/unix/sysv/linux/sys/reboot.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file should define RB_* macros to be used as flag - bits in the argument to the `reboot' system call. */ - -#ifndef _SYS_REBOOT_H -#define _SYS_REBOOT_H 1 - -#include - -/* Perform a hard reset now. */ -#define RB_AUTOBOOT 0x01234567 - -/* Halt the system. */ -#define RB_HALT_SYSTEM 0xcdef0123 - -/* Enable reboot using Ctrl-Alt-Delete keystroke. */ -#define RB_ENABLE_CAD 0x89abcdef - -/* Disable reboot using Ctrl-Alt-Delete keystroke. */ -#define RB_DISABLE_CAD 0 - -/* Stop system and switch power off if possible. */ -#define RB_POWER_OFF 0x4321fedc - -/* Suspend system using software suspend. */ -#define RB_SW_SUSPEND 0xd000fce2 - -/* Reboot system into new kernel. */ -#define RB_KEXEC 0x45584543 - -__BEGIN_DECLS - -/* Reboot or halt the system. */ -extern int reboot (int __howto) __THROW; - -__END_DECLS - -#endif /* _SYS_REBOOT_H */ diff --git a/sysdeps/unix/sysv/linux/sys/signalfd.h b/sysdeps/unix/sysv/linux/sys/signalfd.h deleted file mode 100644 index a01c7d1cc1..0000000000 --- a/sysdeps/unix/sysv/linux/sys/signalfd.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SIGNALFD_H -#define _SYS_SIGNALFD_H 1 - -#include -#include - -/* Get the platform-dependent flags. */ -#include - -struct signalfd_siginfo -{ - uint32_t ssi_signo; - int32_t ssi_errno; - int32_t ssi_code; - uint32_t ssi_pid; - uint32_t ssi_uid; - int32_t ssi_fd; - uint32_t ssi_tid; - uint32_t ssi_band; - uint32_t ssi_overrun; - uint32_t ssi_trapno; - int32_t ssi_status; - int32_t ssi_int; - uint64_t ssi_ptr; - uint64_t ssi_utime; - uint64_t ssi_stime; - uint64_t ssi_addr; - uint8_t __pad[48]; -}; - -__BEGIN_DECLS - -/* Request notification for delivery of signals in MASK to be - performed using descriptor FD.*/ -extern int signalfd (int __fd, const sigset_t *__mask, int __flags) - __THROW __nonnull ((2)); - -__END_DECLS - -#endif /* sys/signalfd.h */ diff --git a/sysdeps/unix/sysv/linux/sys/soundcard.h b/sysdeps/unix/sysv/linux/sys/soundcard.h deleted file mode 100644 index fade986fe4..0000000000 --- a/sysdeps/unix/sysv/linux/sys/soundcard.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sys/swap.h b/sysdeps/unix/sysv/linux/sys/swap.h deleted file mode 100644 index 5201c78e7a..0000000000 --- a/sysdeps/unix/sysv/linux/sys/swap.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Calls to enable and disable swapping on specified locations. Linux version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SWAP_H - -#define _SYS_SWAP_H 1 -#include - -/* The swap priority is encoded as: - (prio << SWAP_FLAG_PRIO_SHIFT) & SWAP_FLAG_PRIO_MASK -*/ -#define SWAP_FLAG_PREFER 0x8000 /* Set if swap priority is specified. */ -#define SWAP_FLAG_PRIO_MASK 0x7fff -#define SWAP_FLAG_PRIO_SHIFT 0 -#define SWAP_FLAG_DISCARD 0x10000 /* Discard swap cluster after use. */ - -__BEGIN_DECLS - -/* Make the block special device PATH available to the system for swapping. - This call is restricted to the super-user. */ -extern int swapon (const char *__path, int __flags) __THROW; - -/* Stop using block special device PATH for swapping. */ -extern int swapoff (const char *__path) __THROW; - -__END_DECLS - -#endif /* _SYS_SWAP_H */ diff --git a/sysdeps/unix/sysv/linux/sys/syscall.h b/sysdeps/unix/sysv/linux/sys/syscall.h deleted file mode 100644 index b54fad3fa1..0000000000 --- a/sysdeps/unix/sysv/linux/sys/syscall.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYSCALL_H -#define _SYSCALL_H 1 - -/* This file should list the numbers of the system calls the system knows. - But instead of duplicating this we use the information available - from the kernel sources. */ -#include - -#ifndef _LIBC -/* The Linux kernel header file defines macros `__NR_', but some - programs expect the traditional form `SYS_'. So in building libc - we scan the kernel's list and produce with macros for - all the `SYS_' names. */ -# include -#endif - -#endif diff --git a/sysdeps/unix/sysv/linux/sys/sysctl.h b/sysdeps/unix/sysv/linux/sys/sysctl.h deleted file mode 100644 index f646fe8765..0000000000 --- a/sysdeps/unix/sysv/linux/sys/sysctl.h +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SYSCTL_H -#define _SYS_SYSCTL_H 1 - -#include -#define __need_size_t -#include -/* Prevent more kernel headers than necessary to be included. */ -#ifndef _LINUX_KERNEL_H -# define _LINUX_KERNEL_H 1 -# define __undef_LINUX_KERNEL_H -#endif -#ifndef _LINUX_TYPES_H -# define _LINUX_TYPES_H 1 -# define __undef_LINUX_TYPES_H -#endif -#ifndef _LINUX_LIST_H -# define _LINUX_LIST_H 1 -# define __undef_LINUX_LIST_H -#endif -#ifndef __LINUX_COMPILER_H -# define __LINUX_COMPILER_H 1 -# define __user -# define __undef__LINUX_COMPILER_H -#endif - -#include - -#ifdef __undef_LINUX_KERNEL_H -# undef _LINUX_KERNEL_H -# undef __undef_LINUX_KERNEL_H -#endif -#ifdef __undef_LINUX_TYPES_H -# undef _LINUX_TYPES_H -# undef __undef_LINUX_TYPES_H -#endif -#ifdef __undef_LINUX_LIST_H -# undef _LINUX_LIST_H -# undef __undef_LINUX_LIST_H -#endif -#ifdef __undef__LINUX_COMPILER_H -# undef __LINUX_COMPILER_H -# undef __user -# undef __undef__LINUX_COMPILER_H -#endif - -#include - -__BEGIN_DECLS - -/* Read or write system parameters. */ -extern int sysctl (int *__name, int __nlen, void *__oldval, - size_t *__oldlenp, void *__newval, size_t __newlen) __THROW; - -__END_DECLS - -#endif /* _SYS_SYSCTL_H */ diff --git a/sysdeps/unix/sysv/linux/sys/sysinfo.h b/sysdeps/unix/sysv/linux/sys/sysinfo.h deleted file mode 100644 index 72797eac2d..0000000000 --- a/sysdeps/unix/sysv/linux/sys/sysinfo.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SYSINFO_H -#define _SYS_SYSINFO_H 1 - -#include - -/* Get sysinfo structure from kernel header. */ -#include - -__BEGIN_DECLS - -/* Returns information on overall system statistics. */ -extern int sysinfo (struct sysinfo *__info) __THROW; - - -/* Return number of configured processors. */ -extern int get_nprocs_conf (void) __THROW; - -/* Return number of available processors. */ -extern int get_nprocs (void) __THROW; - - -/* Return number of physical pages of memory in the system. */ -extern long int get_phys_pages (void) __THROW; - -/* Return number of available physical pages of memory in the system. */ -extern long int get_avphys_pages (void) __THROW; - -__END_DECLS - -#endif /* sys/sysinfo.h */ diff --git a/sysdeps/unix/sysv/linux/sys/timerfd.h b/sysdeps/unix/sysv/linux/sys/timerfd.h deleted file mode 100644 index 9811afe0fa..0000000000 --- a/sysdeps/unix/sysv/linux/sys/timerfd.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_TIMERFD_H -#define _SYS_TIMERFD_H 1 - -#include -#include - -/* Get the platform-dependent flags. */ -#include - - -/* Bits to be set in the FLAGS parameter of `timerfd_settime'. */ -enum - { - TFD_TIMER_ABSTIME = 1 << 0, -#define TFD_TIMER_ABSTIME TFD_TIMER_ABSTIME - TFD_TIMER_CANCEL_ON_SET = 1 << 1 -#define TFD_TIMER_CANCEL_ON_SET TFD_TIMER_CANCEL_ON_SET - }; - - -__BEGIN_DECLS - -/* Return file descriptor for new interval timer source. */ -extern int timerfd_create (__clockid_t __clock_id, int __flags) __THROW; - -/* Set next expiration time of interval timer source UFD to UTMR. If - FLAGS has the TFD_TIMER_ABSTIME flag set the timeout value is - absolute. Optionally return the old expiration time in OTMR. */ -extern int timerfd_settime (int __ufd, int __flags, - const struct itimerspec *__utmr, - struct itimerspec *__otmr) __THROW; - -/* Return the next expiration time of UFD. */ -extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW; - -__END_DECLS - -#endif /* sys/timerfd.h */ diff --git a/sysdeps/unix/sysv/linux/sys/timex.h b/sysdeps/unix/sysv/linux/sys/timex.h deleted file mode 100644 index 3f1b013afd..0000000000 --- a/sysdeps/unix/sysv/linux/sys/timex.h +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_TIMEX_H -#define _SYS_TIMEX_H 1 - -#include -#include - -/* These definitions from linux/timex.h as of 2.6.30. */ - -#include - -#define NTP_API 4 /* NTP API version */ - -struct ntptimeval -{ - struct timeval time; /* current time (ro) */ - long int maxerror; /* maximum error (us) (ro) */ - long int esterror; /* estimated error (us) (ro) */ - long int tai; /* TAI offset (ro) */ - - long int __glibc_reserved1; - long int __glibc_reserved2; - long int __glibc_reserved3; - long int __glibc_reserved4; -}; - -/* Clock states (time_state) */ -#define TIME_OK 0 /* clock synchronized, no leap second */ -#define TIME_INS 1 /* insert leap second */ -#define TIME_DEL 2 /* delete leap second */ -#define TIME_OOP 3 /* leap second in progress */ -#define TIME_WAIT 4 /* leap second has occurred */ -#define TIME_ERROR 5 /* clock not synchronized */ -#define TIME_BAD TIME_ERROR /* bw compat */ - -/* Maximum time constant of the PLL. */ -#define MAXTC 6 - -__BEGIN_DECLS - -extern int __adjtimex (struct timex *__ntx) __THROW; -extern int adjtimex (struct timex *__ntx) __THROW; - -#ifdef __REDIRECT_NTH -extern int __REDIRECT_NTH (ntp_gettime, (struct ntptimeval *__ntv), - ntp_gettimex); -#else -extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW; -# define ntp_gettime ntp_gettimex -#endif -extern int ntp_adjtime (struct timex *__tntx) __THROW; - -__END_DECLS - -#endif /* sys/timex.h */ diff --git a/sysdeps/unix/sysv/linux/sys/ttydefaults.h b/sysdeps/unix/sysv/linux/sys/ttydefaults.h deleted file mode 100644 index 9be168b831..0000000000 --- a/sysdeps/unix/sysv/linux/sys/ttydefaults.h +++ /dev/null @@ -1,100 +0,0 @@ -/*- - * Copyright (c) 1982, 1986, 1993 - * The Regents of the University of California. All rights reserved. - * (c) UNIX System Laboratories, Inc. - * All or some portions of this file are derived from material licensed - * to the University of California by American Telephone and Telegraph - * Co. or Unix System Laboratories, Inc. and are reproduced herein with - * the permission of UNIX System Laboratories, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)ttydefaults.h 8.4 (Berkeley) 1/21/94 - */ - -/* - * System wide defaults for terminal state. Linux version. - */ -#ifndef _SYS_TTYDEFAULTS_H_ -#define _SYS_TTYDEFAULTS_H_ - -/* - * Defaults on "first" open. - */ -#define TTYDEF_IFLAG (BRKINT | ISTRIP | ICRNL | IMAXBEL | IXON | IXANY) -#define TTYDEF_OFLAG (OPOST | ONLCR | XTABS) -#define TTYDEF_LFLAG (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL) -#define TTYDEF_CFLAG (CREAD | CS7 | PARENB | HUPCL) -#define TTYDEF_SPEED (B9600) - -/* - * Control Character Defaults - */ -#define CTRL(x) (x&037) -#define CEOF CTRL('d') -#ifdef _POSIX_VDISABLE -# define CEOL _POSIX_VDISABLE -#else -# define CEOL '\0' /* XXX avoid _POSIX_VDISABLE */ -#endif -#define CERASE 0177 -#define CINTR CTRL('c') -#ifdef _POSIX_VDISABLE -# define CSTATUS _POSIX_VDISABLE -#else -# define CSTATUS '\0' /* XXX avoid _POSIX_VDISABLE */ -#endif -#define CKILL CTRL('u') -#define CMIN 1 -#define CQUIT 034 /* FS, ^\ */ -#define CSUSP CTRL('z') -#define CTIME 0 -#define CDSUSP CTRL('y') -#define CSTART CTRL('q') -#define CSTOP CTRL('s') -#define CLNEXT CTRL('v') -#define CDISCARD CTRL('o') -#define CWERASE CTRL('w') -#define CREPRINT CTRL('r') -#define CEOT CEOF -/* compat */ -#define CBRK CEOL -#define CRPRNT CREPRINT -#define CFLUSH CDISCARD - -/* PROTECTED INCLUSION ENDS HERE */ -#endif /* !_SYS_TTYDEFAULTS_H_ */ - -/* - * #define TTYDEFCHARS to include an array of default control characters. - */ -#ifdef TTYDEFCHARS -cc_t ttydefchars[NCCS] = { - CEOF, CEOL, CEOL, CERASE, CWERASE, CKILL, CREPRINT, - _POSIX_VDISABLE, CINTR, CQUIT, CSUSP, CDSUSP, CSTART, CSTOP, CLNEXT, - CDISCARD, CMIN, CTIME, CSTATUS, _POSIX_VDISABLE -}; -#undef TTYDEFCHARS -#endif diff --git a/sysdeps/unix/sysv/linux/sys/user.h b/sysdeps/unix/sysv/linux/sys/user.h deleted file mode 100644 index 03e56c3d7f..0000000000 --- a/sysdeps/unix/sysv/linux/sys/user.h +++ /dev/null @@ -1 +0,0 @@ -#error "This file is machine-dependent and not provided for this machine." diff --git a/sysdeps/unix/sysv/linux/sys/vt.h b/sysdeps/unix/sysv/linux/sys/vt.h deleted file mode 100644 index 834abfbc8f..0000000000 --- a/sysdeps/unix/sysv/linux/sys/vt.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list deleted file mode 100644 index 8bfb080d80..0000000000 --- a/sysdeps/unix/sysv/linux/syscalls.list +++ /dev/null @@ -1,111 +0,0 @@ -# File name Caller Syscall name Args Strong name Weak names - -adjtimex adjtime adjtimex i:p __adjtimex adjtimex ntp_adjtime -alarm - alarm i:i alarm -bdflush EXTRA bdflush i:ii __compat_bdflush bdflush@GLIBC_2.0:GLIBC_2.23 -capget EXTRA capget i:pp capget -capset EXTRA capset i:pp capset -clock_adjtime EXTRA clock_adjtime i:ip clock_adjtime -create_module EXTRA create_module 3 __compat_create_module create_module@GLIBC_2.0:GLIBC_2.23 -delete_module EXTRA delete_module 3 delete_module -epoll_create EXTRA epoll_create i:i epoll_create -epoll_create1 EXTRA epoll_create1 i:i epoll_create1 -epoll_ctl EXTRA epoll_ctl i:iiip epoll_ctl -eventfd EXTRA eventfd2 i:ii eventfd -execve - execve i:spp __execve execve -flock - flock i:ii __flock flock -get_kernel_syms EXTRA get_kernel_syms i:p __compat_get_kernel_syms get_kernel_syms@GLIBC_2.0:GLIBC_2.23 -getpid - getpid Ei: __getpid getpid -getegid - getegid Ei: __getegid getegid -geteuid - geteuid Ei: __geteuid geteuid -getpgid - getpgid i:i __getpgid getpgid -getpgrp - getpgrp Ei: getpgrp -getpmsg - getpmsg i:ipppp getpmsg -getppid - getppid Ei: __getppid getppid -getresuid - getresuid i:ppp getresuid -getresgid - getresgid i:ppp getresgid -getsid - getsid i:i getsid -init_module EXTRA init_module 5 init_module -inotify_add_watch EXTRA inotify_add_watch i:isi inotify_add_watch -inotify_init EXTRA inotify_init i: inotify_init -inotify_init1 EXTRA inotify_init1 i:I inotify_init1 -inotify_rm_watch EXTRA inotify_rm_watch i:ii inotify_rm_watch -ioperm - ioperm i:iii ioperm -iopl - iopl i:i iopl -klogctl EXTRA syslog i:isi klogctl -lchown - lchown i:sii __lchown lchown -mincore - mincore i:anV mincore -mlock - mlock i:bn mlock -mlockall - mlockall i:i mlockall -mount EXTRA mount i:sssip __mount mount -mremap EXTRA mremap b:ainip __mremap mremap -munlock - munlock i:ai munlock -munlockall - munlockall i: munlockall -nfsservctl EXTRA nfsservctl i:ipp nfsservctl -pipe - pipe i:f __pipe pipe -pipe2 - pipe2 i:fi __pipe2 pipe2 -pivot_root EXTRA pivot_root i:ss pivot_root -prctl EXTRA prctl i:iiiii __prctl prctl -putpmsg - putpmsg i:ippii putpmsg -query_module EXTRA query_module i:sipip __compat_query_module query_module@GLIBC_2.0:GLIBC_2.23 -quotactl EXTRA quotactl i:isip quotactl -remap_file_pages - remap_file_pages i:piiii __remap_file_pages remap_file_pages -sched_getp - sched_getparam i:ip __sched_getparam sched_getparam -sched_gets - sched_getscheduler i:i __sched_getscheduler sched_getscheduler -sched_primax - sched_get_priority_max i:i __sched_get_priority_max sched_get_priority_max -sched_primin - sched_get_priority_min i:i __sched_get_priority_min sched_get_priority_min -sched_rr_gi - sched_rr_get_interval i:ip __sched_rr_get_interval sched_rr_get_interval -sched_setp - sched_setparam i:ip __sched_setparam sched_setparam -sched_sets - sched_setscheduler i:iip __sched_setscheduler sched_setscheduler -sched_yield - sched_yield i: __sched_yield sched_yield -sendfile - sendfile i:iipi sendfile -sendfile64 - sendfile64 i:iipi sendfile64 -setfsgid EXTRA setfsgid i:i setfsgid -setfsuid EXTRA setfsuid i:i setfsuid -setpgid - setpgid i:ii __setpgid setpgid -sigaltstack - sigaltstack i:PP __sigaltstack sigaltstack -stime - stime i:p stime -sysinfo EXTRA sysinfo i:p __sysinfo sysinfo -swapon - swapon i:si __swapon swapon -swapoff - swapoff i:s __swapoff swapoff -unshare EXTRA unshare i:i unshare -uselib EXTRA uselib i:s __compat_uselib uselib@GLIBC_2.0:GLIBC_2.23 -utime - utime i:sP utime -wait4 - wait4 i:iWiP __wait4 wait4 - -chown - chown i:sii __libc_chown __chown chown - -fchownat - fchownat i:isiii fchownat -linkat - linkat i:isisi linkat -mkdirat - mkdirat i:isi mkdirat -readlinkat - readlinkat i:issi readlinkat -symlinkat - symlinkat i:sis symlinkat -unlinkat - unlinkat i:isi unlinkat - -setxattr - setxattr i:sspii setxattr -lsetxattr - lsetxattr i:sspii lsetxattr -fsetxattr - fsetxattr i:ispii fsetxattr -getxattr - getxattr i:sspi getxattr -lgetxattr - lgetxattr i:sspi lgetxattr -fgetxattr - fgetxattr i:ispi fgetxattr -listxattr - listxattr i:ssi listxattr -llistxattr - llistxattr i:ssi llistxattr -flistxattr - flistxattr i:isi flistxattr -removexattr - removexattr i:ss removexattr -lremovexattr - lremovexattr i:ss lremovexattr -fremovexattr - fremovexattr i:is fremovexattr - -mq_setattr - mq_getsetattr i:ipp mq_setattr - -timerfd_create EXTRA timerfd_create i:ii timerfd_create -timerfd_settime EXTRA timerfd_settime i:iipp timerfd_settime -timerfd_gettime EXTRA timerfd_gettime i:ip timerfd_gettime - -fanotify_init EXTRA fanotify_init i:ii fanotify_init - -name_to_handle_at EXTRA name_to_handle_at i:isppi name_to_handle_at - -setns EXTRA setns i:ii setns - -process_vm_readv EXTRA process_vm_readv i:ipipii process_vm_readv -process_vm_writev EXTRA process_vm_writev i:ipipii process_vm_writev diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c deleted file mode 100644 index db20977cb8..0000000000 --- a/sysdeps/unix/sysv/linux/sysconf.c +++ /dev/null @@ -1,146 +0,0 @@ -/* Get file-specific information about a file. Linux version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* Legacy value of ARG_MAX. The macro is now not defined since the - actual value varies based on the stack size. */ -#define legacy_ARG_MAX 131072 - - -static long int posix_sysconf (int name); - - -#ifndef HAS_CPUCLOCK -static long int -has_cpuclock (int name) -{ -# if defined __NR_clock_getres || HP_TIMING_AVAIL - /* If we have HP_TIMING, we will fall back on that if the system - call does not work, so we support it either way. */ -# if !HP_TIMING_AVAIL - /* Check using the clock_getres system call. */ - struct timespec ts; - INTERNAL_SYSCALL_DECL (err); - int r = INTERNAL_SYSCALL (clock_getres, err, 2, - (name == _SC_CPUTIME - ? CLOCK_PROCESS_CPUTIME_ID - : CLOCK_THREAD_CPUTIME_ID), - &ts); - if (INTERNAL_SYSCALL_ERROR_P (r, err)) - return -1; -# endif - return _POSIX_VERSION; -# else - return -1; -# endif -} -# define HAS_CPUCLOCK(name) has_cpuclock (name) -#endif - - -/* Get the value of the system variable NAME. */ -long int -__sysconf (int name) -{ - const char *procfname = NULL; - - switch (name) - { - struct rlimit rlimit; -#ifdef __NR_clock_getres - case _SC_MONOTONIC_CLOCK: - /* Check using the clock_getres system call. */ - { - struct timespec ts; - INTERNAL_SYSCALL_DECL (err); - int r; - r = INTERNAL_SYSCALL (clock_getres, err, 2, CLOCK_MONOTONIC, &ts); - return INTERNAL_SYSCALL_ERROR_P (r, err) ? -1 : _POSIX_VERSION; - } -#endif - - case _SC_CPUTIME: - case _SC_THREAD_CPUTIME: - return HAS_CPUCLOCK (name); - - case _SC_ARG_MAX: - /* Use getrlimit to get the stack limit. */ - if (__getrlimit (RLIMIT_STACK, &rlimit) == 0) - return MAX (legacy_ARG_MAX, rlimit.rlim_cur / 4); - - return legacy_ARG_MAX; - - case _SC_NGROUPS_MAX: - /* Try to read the information from the /proc/sys/kernel/ngroups_max - file. */ - procfname = "/proc/sys/kernel/ngroups_max"; - break; - - case _SC_SIGQUEUE_MAX: - if (__getrlimit (RLIMIT_SIGPENDING, &rlimit) == 0) - return rlimit.rlim_cur; - - /* The /proc/sys/kernel/rtsig-max file contains the answer. */ - procfname = "/proc/sys/kernel/rtsig-max"; - break; - - default: - break; - } - - if (procfname != NULL) - { - int fd = open_not_cancel_2 (procfname, O_RDONLY); - if (fd != -1) - { - /* This is more than enough, the file contains a single integer. */ - char buf[32]; - ssize_t n; - n = TEMP_FAILURE_RETRY (read_not_cancel (fd, buf, sizeof (buf) - 1)); - close_not_cancel_no_status (fd); - - if (n > 0) - { - /* Terminate the string. */ - buf[n] = '\0'; - - char *endp; - long int res = strtol (buf, &endp, 10); - if (endp != buf && (*endp == '\0' || *endp == '\n')) - return res; - } - } - } - - return posix_sysconf (name); -} - -/* Now the POSIX version. */ -#undef __sysconf -#define __sysconf static posix_sysconf -#include diff --git a/sysdeps/unix/sysv/linux/sysctl.c b/sysdeps/unix/sysv/linux/sysctl.c deleted file mode 100644 index 52f21e3869..0000000000 --- a/sysdeps/unix/sysv/linux/sysctl.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Read or write system information. Linux version. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include /* For the real memset prototype. */ -#include - -#include -#include - -int -__sysctl (int *name, int nlen, void *oldval, size_t *oldlenp, - void *newval, size_t newlen) -{ - struct __sysctl_args args = - { - .name = name, - .nlen = nlen, - .oldval = oldval, - .oldlenp = oldlenp, - .newval = newval, - .newlen = newlen - }; - - return INLINE_SYSCALL (_sysctl, 1, &args); -} -libc_hidden_def (__sysctl) -weak_alias (__sysctl, sysctl) diff --git a/sysdeps/unix/sysv/linux/sysctl.mk b/sysdeps/unix/sysv/linux/sysctl.mk deleted file mode 100644 index 8d04d12e25..0000000000 --- a/sysdeps/unix/sysv/linux/sysctl.mk +++ /dev/null @@ -1,3 +0,0 @@ -# sysctl system call has been deprecated. It is provided for backward -# compatility. New target shouldn't add it (see x86_64/x32/sysctl.mk). -sysdep_routines += sysctl diff --git a/sysdeps/unix/sysv/linux/sysdep-vdso.h b/sysdeps/unix/sysv/linux/sysdep-vdso.h deleted file mode 100644 index faf5698b61..0000000000 --- a/sysdeps/unix/sysv/linux/sysdep-vdso.h +++ /dev/null @@ -1,98 +0,0 @@ -/* vDSO common definition for Linux. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef SYSDEP_VDSO_LINUX_H -# define SYSDEP_VDSO_LINUX_H - -#define VDSO_SYMBOL(__name) __vdso_##__name - -#ifndef INTERNAL_VSYSCALL_CALL -# define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...) \ - funcptr (args) -#endif - -#ifdef SHARED - -# ifdef HAVE_VSYSCALL - -# include - -# define INLINE_VSYSCALL(name, nr, args...) \ - ({ \ - __label__ out; \ - __label__ iserr; \ - INTERNAL_SYSCALL_DECL (sc_err); \ - long int sc_ret; \ - \ - __typeof (__vdso_##name) vdsop = __vdso_##name; \ - PTR_DEMANGLE (vdsop); \ - if (vdsop != NULL) \ - { \ - sc_ret = INTERNAL_VSYSCALL_CALL (vdsop, sc_err, nr, ##args); \ - if (!INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ - goto out; \ - if (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err) != ENOSYS) \ - goto iserr; \ - } \ - \ - sc_ret = INTERNAL_SYSCALL (name, sc_err, nr, ##args); \ - if (INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ - { \ - iserr: \ - __set_errno (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err)); \ - sc_ret = -1L; \ - } \ - out: \ - sc_ret; \ - }) - -# define INTERNAL_VSYSCALL(name, err, nr, args...) \ - ({ \ - __label__ out; \ - long v_ret; \ - \ - __typeof (__vdso_##name) vdsop = __vdso_##name; \ - PTR_DEMANGLE (vdsop); \ - if (vdsop != NULL) \ - { \ - v_ret = INTERNAL_VSYSCALL_CALL (vdsop, err, nr, ##args); \ - if (!INTERNAL_SYSCALL_ERROR_P (v_ret, err) \ - || INTERNAL_SYSCALL_ERRNO (v_ret, err) != ENOSYS) \ - goto out; \ - } \ - v_ret = INTERNAL_SYSCALL (name, err, nr, ##args); \ - out: \ - v_ret; \ - }) -# else -# define INLINE_VSYSCALL(name, nr, args...) \ - INLINE_SYSCALL (name, nr, ##args) -# define INTERNAL_VSYSCALL(name, err, nr, args...) \ - INTERNAL_SYSCALL (name, err, nr, ##args) -# endif /* HAVE_VSYSCALL */ - -# else /* SHARED */ - -# define INLINE_VSYSCALL(name, nr, args...) \ - INLINE_SYSCALL (name, nr, ##args) -# define INTERNAL_VSYSCALL(name, err, nr, args...) \ - INTERNAL_SYSCALL (name, err, nr, ##args) - -#endif /* SHARED */ - -#endif /* SYSDEP_VDSO_LINUX_H */ diff --git a/sysdeps/unix/sysv/linux/sysdep.h b/sysdeps/unix/sysv/linux/sysdep.h deleted file mode 100644 index 1c24766e48..0000000000 --- a/sysdeps/unix/sysv/linux/sysdep.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Set error number and return -1. A target may choose to return the - internal function, __syscall_error, which sets errno and returns -1. - We use -1l, instead of -1, so that it can be casted to (void *). */ -#define INLINE_SYSCALL_ERROR_RETURN_VALUE(err) \ - ({ \ - __set_errno (err); \ - -1l; \ - }) - -/* Provide a dummy argument that can be used to force register - alignment for register pairs if required by the syscall ABI. */ -#ifdef __ASSUME_ALIGNED_REGISTER_PAIRS -#define __ALIGNMENT_ARG 0, -#define __ALIGNMENT_COUNT(a,b) b -#else -#define __ALIGNMENT_ARG -#define __ALIGNMENT_COUNT(a,b) a -#endif - -/* Provide a common macro to pass 64-bit value on syscalls. */ -#if __WORDSIZE == 64 || defined __ASSUME_WORDSIZE64_ILP32 -# define SYSCALL_LL(val) (val) -# define SYSCALL_LL64(val) (val) -#else -#define SYSCALL_LL(val) \ - __LONG_LONG_PAIR ((val) >> 31, (val)) -#define SYSCALL_LL64(val) \ - __LONG_LONG_PAIR ((long) ((val) >> 32), (long) ((val) & 0xffffffff)) -#endif - -/* Provide a common macro to pass 64-bit value on pread and pwrite - syscalls. */ -#ifdef __ASSUME_PRW_DUMMY_ARG -# define SYSCALL_LL_PRW(val) 0, SYSCALL_LL (val) -# define SYSCALL_LL64_PRW(val) 0, SYSCALL_LL64 (val) -#else -# define SYSCALL_LL_PRW(val) __ALIGNMENT_ARG SYSCALL_LL (val) -# define SYSCALL_LL64_PRW(val) __ALIGNMENT_ARG SYSCALL_LL64 (val) -#endif - -/* Provide a macro to pass the off{64}_t argument on p{readv,writev}{64}. */ -#define LO_HI_LONG(val) \ - (long) (val), \ - (long) (((uint64_t) (val)) >> 32) - -/* Exports the __send symbol on send.c linux implementation (some ABI have - it missing due the usage of a old generic version without it). */ -#define HAVE_INTERNAL_SEND_SYMBOL 1 diff --git a/sysdeps/unix/sysv/linux/syslog.c b/sysdeps/unix/sysv/linux/syslog.c deleted file mode 100644 index cf8ce23385..0000000000 --- a/sysdeps/unix/sysv/linux/syslog.c +++ /dev/null @@ -1,4 +0,0 @@ -#define NO_SIGPIPE -#define send_flags MSG_NOSIGNAL - -#include diff --git a/sysdeps/unix/sysv/linux/system.c b/sysdeps/unix/sysv/linux/system.c deleted file mode 100644 index 012ffd828d..0000000000 --- a/sysdeps/unix/sysv/linux/system.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include /* For the real memset prototype. */ -#include -#include -#include -#include - -/* We have to and actually can handle cancelable system(). The big - problem: we have to kill the child process if necessary. To do - this a cleanup handler has to be registered and is has to be able - to find the PID of the child. The main problem is to reliable have - the PID when needed. It is not necessary for the parent thread to - return. It might still be in the kernel when the cancellation - request comes. Therefore we have to use the clone() calls ability - to have the kernel write the PID into the user-level variable. */ -#ifndef FORK -# define FORK() \ - INLINE_SYSCALL (clone, 3, CLONE_PARENT_SETTID | SIGCHLD, 0, &pid) -#endif - -#ifdef _LIBC_REENTRANT -static void cancel_handler (void *arg); - -# define CLEANUP_HANDLER \ - __libc_cleanup_region_start (1, cancel_handler, &pid) - -# define CLEANUP_RESET \ - __libc_cleanup_region_end (0) -#endif - - -/* Linux has waitpid(), so override the generic unix version. */ -#include - - -#ifdef _LIBC_REENTRANT -/* The cancellation handler. */ -static void -cancel_handler (void *arg) -{ - pid_t child = *(pid_t *) arg; - - INTERNAL_SYSCALL_DECL (err); - INTERNAL_SYSCALL (kill, err, 2, child, SIGKILL); - - TEMP_FAILURE_RETRY (__waitpid (child, NULL, 0)); - - DO_LOCK (); - - if (SUB_REF () == 0) - { - (void) __sigaction (SIGQUIT, &quit, (struct sigaction *) NULL); - (void) __sigaction (SIGINT, &intr, (struct sigaction *) NULL); - } - - DO_UNLOCK (); -} -#endif diff --git a/sysdeps/unix/sysv/linux/tcdrain.c b/sysdeps/unix/sysv/linux/tcdrain.c deleted file mode 100644 index 07f20c172f..0000000000 --- a/sysdeps/unix/sysv/linux/tcdrain.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Wait for pending output to be written on FD. */ -int -__libc_tcdrain (int fd) -{ - /* With an argument of 1, TCSBRK for output to be drain. */ - return SYSCALL_CANCEL (ioctl, fd, TCSBRK, 1); -} -weak_alias (__libc_tcdrain, tcdrain) diff --git a/sysdeps/unix/sysv/linux/tcflow.c b/sysdeps/unix/sysv/linux/tcflow.c deleted file mode 100644 index da3f1554c7..0000000000 --- a/sysdeps/unix/sysv/linux/tcflow.c +++ /dev/null @@ -1,28 +0,0 @@ -/* tcflow -- Suspend or restart transmission on termios file descriptor. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Suspend or restart transmission on FD. */ -int -tcflow (int fd, int action) -{ - return __ioctl (fd, TCXONC, action); -} diff --git a/sysdeps/unix/sysv/linux/tcflush.c b/sysdeps/unix/sysv/linux/tcflush.c deleted file mode 100644 index e5fec93c4d..0000000000 --- a/sysdeps/unix/sysv/linux/tcflush.c +++ /dev/null @@ -1,28 +0,0 @@ -/* tcflush -- Flush pending data on termios file descriptor. Linux version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Flush pending data on FD. */ -int -tcflush (int fd, int queue_selector) -{ - return __ioctl (fd, TCFLSH, queue_selector); -} diff --git a/sysdeps/unix/sysv/linux/tcgetattr.c b/sysdeps/unix/sysv/linux/tcgetattr.c deleted file mode 100644 index b1d73d042a..0000000000 --- a/sysdeps/unix/sysv/linux/tcgetattr.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -/* The difference here is that the termios structure used in the - kernel is not the same as we use in the libc. Therefore we must - translate it here. */ -#include - -/* Put the state of FD into *TERMIOS_P. */ -int -__tcgetattr (int fd, struct termios *termios_p) -{ - struct __kernel_termios k_termios; - int retval; - - retval = INLINE_SYSCALL (ioctl, 3, fd, TCGETS, &k_termios); - - if (__glibc_likely (retval == 0)) - { - termios_p->c_iflag = k_termios.c_iflag; - termios_p->c_oflag = k_termios.c_oflag; - termios_p->c_cflag = k_termios.c_cflag; - termios_p->c_lflag = k_termios.c_lflag; - termios_p->c_line = k_termios.c_line; -#ifdef _HAVE_STRUCT_TERMIOS_C_ISPEED -# ifdef _HAVE_C_ISPEED - termios_p->c_ispeed = k_termios.c_ispeed; -# else - termios_p->c_ispeed = k_termios.c_cflag & (CBAUD | CBAUDEX); -# endif -#endif -#ifdef _HAVE_STRUCT_TERMIOS_C_OSPEED -# ifdef _HAVE_C_OSPEED - termios_p->c_ospeed = k_termios.c_ospeed; -# else - termios_p->c_ospeed = k_termios.c_cflag & (CBAUD | CBAUDEX); -# endif -#endif - if (sizeof (cc_t) == 1 || _POSIX_VDISABLE == 0 - || (unsigned char) _POSIX_VDISABLE == (unsigned char) -1) - memset (__mempcpy (&termios_p->c_cc[0], &k_termios.c_cc[0], - __KERNEL_NCCS * sizeof (cc_t)), - _POSIX_VDISABLE, (NCCS - __KERNEL_NCCS) * sizeof (cc_t)); - else - { - memcpy (&termios_p->c_cc[0], &k_termios.c_cc[0], - __KERNEL_NCCS * sizeof (cc_t)); - - for (size_t cnt = __KERNEL_NCCS; cnt < NCCS; ++cnt) - termios_p->c_cc[cnt] = _POSIX_VDISABLE; - } - } - - return retval; -} - -weak_alias (__tcgetattr, tcgetattr) diff --git a/sysdeps/unix/sysv/linux/tcgetpgrp.c b/sysdeps/unix/sysv/linux/tcgetpgrp.c deleted file mode 100644 index d899fc78f8..0000000000 --- a/sysdeps/unix/sysv/linux/tcgetpgrp.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/tcsendbrk.c b/sysdeps/unix/sysv/linux/tcsendbrk.c deleted file mode 100644 index 3197020c97..0000000000 --- a/sysdeps/unix/sysv/linux/tcsendbrk.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Send break to terminal. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Send zero bits on FD. */ -int -tcsendbreak (int fd, int duration) -{ - /* The break lasts 0.25 to 0.5 seconds if DURATION is zero, - and an implementation-defined period if DURATION is nonzero. - We define a positive DURATION to be number of milliseconds to break. */ - if (duration <= 0) - return __ioctl (fd, TCSBRK, 0); - -#ifdef TCSBRKP - /* Probably Linux-specific: a positive third TCSBRKP ioctl argument is - defined to be the number of 100ms units to break. */ - return __ioctl (fd, TCSBRKP, (duration + 99) / 100); -#else - /* ioctl can't send a break of any other duration for us. - This could be changed to use trickery (e.g. lower speed and - send a '\0') to send the break, but for now just return an error. */ - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); -#endif -} diff --git a/sysdeps/unix/sysv/linux/tcsetattr.c b/sysdeps/unix/sysv/linux/tcsetattr.c deleted file mode 100644 index c7d1d6539e..0000000000 --- a/sysdeps/unix/sysv/linux/tcsetattr.c +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -/* The difference here is that the termios structure used in the - kernel is not the same as we use in the libc. Therefore we must - translate it here. */ -#include - - -/* This is a gross hack around a kernel bug. If the cfsetispeed functions - is called with the SPEED argument set to zero this means use the same - speed as for output. But we don't have independent input and output - speeds and therefore cannot record this. - - We use an unused bit in the `c_iflag' field to keep track of this - use of `cfsetispeed'. The value here must correspond to the one used - in `speed.c'. */ -#define IBAUD0 020000000000 - - -/* Set the state of FD to *TERMIOS_P. */ -int -tcsetattr (int fd, int optional_actions, const struct termios *termios_p) -{ - struct __kernel_termios k_termios; - unsigned long int cmd; - - switch (optional_actions) - { - case TCSANOW: - cmd = TCSETS; - break; - case TCSADRAIN: - cmd = TCSETSW; - break; - case TCSAFLUSH: - cmd = TCSETSF; - break; - default: - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - } - - k_termios.c_iflag = termios_p->c_iflag & ~IBAUD0; - k_termios.c_oflag = termios_p->c_oflag; - k_termios.c_cflag = termios_p->c_cflag; - k_termios.c_lflag = termios_p->c_lflag; - k_termios.c_line = termios_p->c_line; -#if defined _HAVE_C_ISPEED && defined _HAVE_STRUCT_TERMIOS_C_ISPEED - k_termios.c_ispeed = termios_p->c_ispeed; -#endif -#if defined _HAVE_C_OSPEED && defined _HAVE_STRUCT_TERMIOS_C_OSPEED - k_termios.c_ospeed = termios_p->c_ospeed; -#endif - memcpy (&k_termios.c_cc[0], &termios_p->c_cc[0], - __KERNEL_NCCS * sizeof (cc_t)); - - return INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios); -} -libc_hidden_def (tcsetattr) diff --git a/sysdeps/unix/sysv/linux/tcsetpgrp.c b/sysdeps/unix/sysv/linux/tcsetpgrp.c deleted file mode 100644 index e4d4833901..0000000000 --- a/sysdeps/unix/sysv/linux/tcsetpgrp.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/tee.c b/sysdeps/unix/sysv/linux/tee.c deleted file mode 100644 index 3d503fb1c9..0000000000 --- a/sysdeps/unix/sysv/linux/tee.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Linux duplicating pipe content implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ssize_t -tee (int src, int dest, size_t len, unsigned int flags) -{ - return SYSCALL_CANCEL (tee, src, dest, len, flags); -} diff --git a/sysdeps/unix/sysv/linux/termio.h b/sysdeps/unix/sysv/linux/termio.h deleted file mode 100644 index 0e610f0c56..0000000000 --- a/sysdeps/unix/sysv/linux/termio.h +++ /dev/null @@ -1,6 +0,0 @@ -/* Compatible for old `struct termio' ioctl interface. - This is obsolete; use the POSIX.1 `struct termios' interface - defined in instead. */ - -#include -#include diff --git a/sysdeps/unix/sysv/linux/test-errno-linux.c b/sysdeps/unix/sysv/linux/test-errno-linux.c deleted file mode 100644 index 87ed103c99..0000000000 --- a/sysdeps/unix/sysv/linux/test-errno-linux.c +++ /dev/null @@ -1,181 +0,0 @@ -/* Test that failing system calls do set errno to the correct value. - Linux sycalls version. - - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* This is not an exhaustive test: only system calls that can be - persuaded to fail with a consistent error code and no side effects - are included. Usually these are failures due to invalid arguments, - with errno code EBADF or EINVAL. The order of argument checks is - unspecified, so we must take care to provide arguments that only - allow _one_ failure mode. - - Note that all system calls that can fail with EFAULT are permitted - to deliver a SIGSEGV signal instead, so we avoid supplying invalid - pointers in general, and we do not attempt to test system calls - that can only fail with EFAULT (e.g. gettimeofday, gethostname). - - Also note that root-only system calls (e.g. acct, reboot) may, when - the test is run as an unprivileged user, fail due to insufficient - privileges before bothering to do argument checks, so those are not - tested either. - - Also, system calls that take enum or a set of flags as argument is - not tested if POSIX doesn't specify exact binary values for all - flags, and so any value passed to flags may become valid. - - Some tests assume "/bin/sh" names a file that exists and is not a - directory. */ - -#define test_wrp_rv(rtype, prtype, experr, syscall, ...) \ - (__extension__ ({ \ - errno = 0xdead; \ - rtype ret = syscall (__VA_ARGS__); \ - int err = errno; \ - int fail; \ - if ((ret == (rtype) -1) && (err == experr)) \ - fail = 0; \ - else \ - { \ - fail = 1; \ - if (ret != (rtype) -1) \ - printf ("FAIL: " #syscall ": didn't fail as expected" \ - " (return "prtype")\n", ret); \ - else if (err == 0xdead) \ - puts ("FAIL: " #syscall ": didn't update errno"); \ - else if (err != experr) \ - printf ("FAIL: " #syscall \ - ": errno is: %d (%s) expected: %d (%s)\n", \ - err, strerror (err), experr, strerror (experr));\ - } \ - fail; \ - })) - -#define test_wrp_rv2(rtype, prtype, experr1, experr2, syscall, ...) \ - (__extension__ ({ \ - errno = 0xdead; \ - rtype ret = syscall (__VA_ARGS__); \ - int err = errno; \ - int fail; \ - if ((ret == (rtype) -1) && ((err == experr1) || (err == experr2))) \ - fail = 0; \ - else \ - { \ - fail = 1; \ - if (ret != (rtype) -1) \ - printf ("FAIL: " #syscall ": didn't fail as expected" \ - " (return "prtype")\n", ret); \ - else if (err == 0xdead) \ - puts ("FAIL: " #syscall ": didn't update errno"); \ - else if (err != experr1 && err != experr2) \ - printf ("FAIL: " #syscall \ - ": errno is: %d (%s) expected: %d (%s) or %d (%s)\n", \ - err, strerror (err), experr1, strerror (experr1), \ - experr2, strerror (experr2)); \ - } \ - fail; \ - })) - -#define test_wrp(experr, syscall, ...) \ - test_wrp_rv(int, "%d", experr, syscall, __VA_ARGS__) - -#define test_wrp2(experr1, experr2, syscall, ...) \ - test_wrp_rv2(int, "%d", experr1, experr2, syscall, __VA_ARGS__) - -static int -do_test (void) -{ - fd_set rs, ws, es; - int status; - off_t off; - stack_t ss; - struct dqblk dqblk; - struct epoll_event epoll_event; - struct pollfd pollfd; - struct sched_param sch_param; - struct timespec ts; - struct timeval tv; - unsigned char vec[16]; - ss.ss_flags = ~SS_DISABLE; - ts.tv_sec = -1; - - int fails = 0; - fails |= test_wrp (EINVAL, epoll_create, -1); - fails |= test_wrp (EINVAL, epoll_create1, EPOLL_CLOEXEC + 1); - fails |= test_wrp (EBADF, epoll_ctl, -1, EPOLL_CTL_ADD, 0, &epoll_event); - fails |= test_wrp (EBADF, epoll_wait, -1, &epoll_event, 1, 1); - fails |= test_wrp (EBADF, fdatasync, -1); - fails |= test_wrp (EBADF, flock, -1, LOCK_SH); - fails |= test_wrp (ESRCH, getpgid, -1); - /* Linux v3.8 (676a0675c) removed the test to check at least one valid - bit in flags (to return EINVAL). It was later added back in v3.9 - (04df32fa1). */ - fails |= test_wrp2 (EINVAL, EBADF, inotify_add_watch, -1, "/", 0); - fails |= test_wrp (EINVAL, mincore, (void *) -1, 0, vec); - /* mlock fails if the result of the addition addr+len was less than addr - (which indicates final address overflow), however on 32 bits binaries - running on 64 bits kernels, internal syscall address check won't result - in an invalid address and thus syscalls fails later in vma - allocation. */ - fails |= test_wrp2 (EINVAL, ENOMEM, mlock, (void *) -1, 1); - fails |= test_wrp (EINVAL, nanosleep, &ts, &ts); - fails |= test_wrp (EINVAL, poll, &pollfd, -1, 0); - /* quotactl returns ENOSYS for kernels not configured with CONFIG_QUOTA. */ - fails |= test_wrp2 (ENODEV, ENOSYS, quotactl, Q_GETINFO, NULL, -1, - (caddr_t) &dqblk); - fails |= test_wrp (EINVAL, sched_getparam, -1, &sch_param); - fails |= test_wrp (EINVAL, sched_getscheduler, -1); - fails |= test_wrp (EINVAL, sched_get_priority_max, -1); - fails |= test_wrp (EINVAL, sched_get_priority_min, -1); - fails |= test_wrp (EINVAL, sched_rr_get_interval, -1, &ts); - fails |= test_wrp (EINVAL, sched_setparam, -1, &sch_param); - fails |= test_wrp (EINVAL, sched_setscheduler, -1, 0, &sch_param); - fails |= test_wrp (EINVAL, select, -1, &rs, &ws, &es, &tv); - fails |= test_wrp (EBADF, sendfile, -1, -1, &off, 0); - fails |= test_wrp (EINVAL, sigaltstack, &ss, NULL); - fails |= test_wrp (ECHILD, wait4, -1, &status, 0, NULL); - - return fails; -} - -#include "support/test-driver.c" diff --git a/sysdeps/unix/sysv/linux/tile/Implies b/sysdeps/unix/sysv/linux/tile/Implies deleted file mode 100644 index e050152859..0000000000 --- a/sysdeps/unix/sysv/linux/tile/Implies +++ /dev/null @@ -1 +0,0 @@ -tile/nptl diff --git a/sysdeps/unix/sysv/linux/tile/Makefile b/sysdeps/unix/sysv/linux/tile/Makefile deleted file mode 100644 index 04605a69ac..0000000000 --- a/sysdeps/unix/sysv/linux/tile/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -ifeq ($(subdir),misc) - -# provides something like x86 compatibility. -# New code should probably use instead. -sysdep_headers += sys/reg.h - -# MIPS-style cacheflush routine -sysdep_headers += sys/cachectl.h -sysdep_routines += cacheflush - -# Control dataplane properties of current thread (compatibility only). -sysdep_routines += set_dataplane - -endif - -ifeq ($(subdir),elf) -sysdep_routines += dl-vdso -ifeq ($(build-shared),yes) -# This is needed for DSO loading from static binaries. -sysdep-dl-routines += dl-static -endif -endif - -ifeq ($(subdir),nptl) -# pull in __syscall_error routine -libpthread-routines += sysdep -libpthread-shared-only-routines += sysdep -endif diff --git a/sysdeps/unix/sysv/linux/tile/Versions b/sysdeps/unix/sysv/linux/tile/Versions deleted file mode 100644 index 13da68fa79..0000000000 --- a/sysdeps/unix/sysv/linux/tile/Versions +++ /dev/null @@ -1,18 +0,0 @@ -ld { - GLIBC_PRIVATE { - # used for loading by static libraries - _dl_var_init; - } -} -libc { - GLIBC_2.12 { - _flush_cache; - cacheflush; - fallocate64; - set_dataplane; - } - GLIBC_PRIVATE { - __syscall_error; - __vdso_clock_gettime; - } -} diff --git a/sysdeps/unix/sysv/linux/tile/arch-fork.h b/sysdeps/unix/sysv/linux/tile/arch-fork.h deleted file mode 100644 index 6952305d5a..0000000000 --- a/sysdeps/unix/sysv/linux/tile/arch-fork.h +++ /dev/null @@ -1,29 +0,0 @@ -/* ARCH_FORK definition for Linux fork implementation. Tile* version. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - Based on work contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 4, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ - 0, NULL, &THREAD_SELF->tid) diff --git a/sysdeps/unix/sysv/linux/tile/bits/environments.h b/sysdeps/unix/sysv/linux/tile/bits/environments.h deleted file mode 100644 index 67cfc846ca..0000000000 --- a/sysdeps/unix/sysv/linux/tile/bits/environments.h +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _UNISTD_H -# error "Never include this file directly. Use instead" -#endif - -#include - -/* This header should define the following symbols under the described - situations. A value `1' means that the model is always supported, - `-1' means it is never supported. Undefined means it cannot be - statically decided. - - _POSIX_V7_ILP32_OFF32 32bit int, long, pointers, and off_t type - _POSIX_V7_ILP32_OFFBIG 32bit int, long, and pointers and larger off_t type - - _POSIX_V7_LP64_OFF32 64bit long and pointers and 32bit off_t type - _POSIX_V7_LPBIG_OFFBIG 64bit long and pointers and large off_t type - - The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG, - _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32, - _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were - used in previous versions of the Unix standard and are available - only for compatibility. -*/ - -#if __WORDSIZE == 64 - -/* Environments with 32-bit wide pointers are optionally provided. - Therefore following macros aren't defined: - # undef _POSIX_V7_ILP32_OFF32 - # undef _POSIX_V7_ILP32_OFFBIG - # undef _POSIX_V6_ILP32_OFF32 - # undef _POSIX_V6_ILP32_OFFBIG - # undef _XBS5_ILP32_OFF32 - # undef _XBS5_ILP32_OFFBIG - and users need to check at runtime. */ - -/* We also have no use (for now) for an environment with bigger pointers - and offsets. */ -# define _POSIX_V7_LPBIG_OFFBIG -1 -# define _POSIX_V6_LPBIG_OFFBIG -1 -# define _XBS5_LPBIG_OFFBIG -1 - -/* By default we have 64-bit wide `long int', pointers and `off_t'. */ -# define _POSIX_V7_LP64_OFF64 1 -# define _POSIX_V6_LP64_OFF64 1 -# define _XBS5_LP64_OFF64 1 - -#else /* __WORDSIZE == 32 */ - -/* By default we have 32-bit wide `int', `long int', pointers and `off_t' - and all platforms support LFS. */ -# define _POSIX_V7_ILP32_OFF32 1 -# define _POSIX_V7_ILP32_OFFBIG 1 -# define _POSIX_V6_ILP32_OFF32 1 -# define _POSIX_V6_ILP32_OFFBIG 1 -# define _XBS5_ILP32_OFF32 1 -# define _XBS5_ILP32_OFFBIG 1 - -/* We optionally provide an environment with the above size but an 64-bit - side `off_t'. Therefore we don't define _POSIX_V7_ILP32_OFFBIG. */ - -/* Environments with 64-bit wide pointers can be provided, - so these macros aren't defined: - # undef _POSIX_V7_LP64_OFF64 - # undef _POSIX_V7_LPBIG_OFFBIG - # undef _POSIX_V6_LP64_OFF64 - # undef _POSIX_V6_LPBIG_OFFBIG - # undef _XBS5_LP64_OFF64 - # undef _XBS5_LPBIG_OFFBIG - and sysconf tests for it at runtime. */ - -#endif /* __WORDSIZE == 32 */ - -#ifdef __tilegx__ -/* Only TILE-Gx has the ability to choose 32- or 64-bit. */ -#define __ILP32_OFF32_CFLAGS "-m32" -#define __ILP32_OFFBIG_CFLAGS "-m32 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" -#define __ILP32_OFF32_LDFLAGS "-m32" -#define __ILP32_OFFBIG_LDFLAGS "-m32" -#define __LP64_OFF64_CFLAGS "-m64" -#define __LP64_OFF64_LDFLAGS "-m64" -#endif diff --git a/sysdeps/unix/sysv/linux/tile/bits/local_lim.h b/sysdeps/unix/sysv/linux/tile/bits/local_lim.h deleted file mode 100644 index 2566bcacad..0000000000 --- a/sysdeps/unix/sysv/linux/tile/bits/local_lim.h +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* The kernel header pollutes the namespace with the NR_OPEN symbol - and defines LINK_MAX although filesystems have different maxima. A - similar thing is true for OPEN_MAX: the limit can be changed at - runtime and therefore the macro must not be defined. Remove this - after including the header if necessary. */ -#ifndef NR_OPEN -# define __undef_NR_OPEN -#endif -#ifndef LINK_MAX -# define __undef_LINK_MAX -#endif -#ifndef OPEN_MAX -# define __undef_OPEN_MAX -#endif -#ifndef ARG_MAX -# define __undef_ARG_MAX -#endif - -/* The kernel sources contain a file with all the needed information. */ -#include - -/* Have to remove NR_OPEN? */ -#ifdef __undef_NR_OPEN -# undef NR_OPEN -# undef __undef_NR_OPEN -#endif -/* Have to remove LINK_MAX? */ -#ifdef __undef_LINK_MAX -# undef LINK_MAX -# undef __undef_LINK_MAX -#endif -/* Have to remove OPEN_MAX? */ -#ifdef __undef_OPEN_MAX -# undef OPEN_MAX -# undef __undef_OPEN_MAX -#endif -/* Have to remove ARG_MAX? */ -#ifdef __undef_ARG_MAX -# undef ARG_MAX -# undef __undef_ARG_MAX -#endif - -/* The number of data keys per process. */ -#define _POSIX_THREAD_KEYS_MAX 128 -/* This is the value this implementation supports. */ -#define PTHREAD_KEYS_MAX 1024 - -/* Controlling the iterations of destructors for thread-specific data. */ -#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 -/* Number of iterations this implementation does. */ -#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS - -/* The number of threads per process. */ -#define _POSIX_THREAD_THREADS_MAX 64 -/* We have no predefined limit on the number of threads. */ -#undef PTHREAD_THREADS_MAX - -/* Maximum amount by which a process can descrease its asynchronous I/O - priority level. */ -#define AIO_PRIO_DELTA_MAX 20 - -/* Minimum size for a thread. At least two pages for systems with 64k - pages. */ -#define PTHREAD_STACK_MIN 131072 - -/* Maximum number of timer expiration overruns. */ -#define DELAYTIMER_MAX 2147483647 - -/* Maximum tty name length. */ -#define TTY_NAME_MAX 32 - -/* Maximum login name length. This is arbitrary. */ -#define LOGIN_NAME_MAX 256 - -/* Maximum host name length. */ -#define HOST_NAME_MAX 64 - -/* Maximum message queue priority level. */ -#define MQ_PRIO_MAX 32768 - -/* Maximum value the semaphore can have. */ -#define SEM_VALUE_MAX (2147483647) diff --git a/sysdeps/unix/sysv/linux/tile/bits/mman.h b/sysdeps/unix/sysv/linux/tile/bits/mman.h deleted file mode 100644 index 6c9148e88c..0000000000 --- a/sysdeps/unix/sysv/linux/tile/bits/mman.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - -#ifdef __USE_MISC -/* These are Linux-specific. */ -# define MAP_NONBLOCK 0x00080 /* Do not block on IO. */ -# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */ -# define MAP_STACK MAP_GROWSDOWN /* Provide convenience alias. */ -# define MAP_LOCKED 0x00200 /* Lock the mapping. */ -# define MAP_NORESERVE 0x00400 /* Don't check for reservations. */ -# define MAP_DENYWRITE 0x00800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */ -# define MAP_POPULATE 0x00040 /* Populate (prefault) pagetables. */ -# define MAP_HUGETLB 0x04000 /* Create huge page mapping. */ -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/tile/bits/sigaction.h b/sysdeps/unix/sysv/linux/tile/bits/sigaction.h deleted file mode 100644 index 5a9ae2888a..0000000000 --- a/sysdeps/unix/sysv/linux/tile/bits/sigaction.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SIGNAL_H -# error "Never include directly; use instead." -#endif - -/* Structure describing the action to be taken when a signal arrives. */ -struct sigaction - { - /* Signal handler. */ -#ifdef __USE_POSIX199309 - union - { - /* Used if SA_SIGINFO is not set. */ - __sighandler_t sa_handler; - /* Used if SA_SIGINFO is set. */ - void (*sa_sigaction) (int, siginfo_t *, void *); - } - __sigaction_handler; -# define sa_handler __sigaction_handler.sa_handler -# define sa_sigaction __sigaction_handler.sa_sigaction -#else - __sighandler_t sa_handler; -#endif - - /* Additional set of signals to be blocked. */ - __sigset_t sa_mask; - - /* Special flags. */ - int sa_flags; - - /* Restore handler. */ - void (*sa_restorer) (void); - }; - -/* Bits in `sa_flags'. */ -#define SA_NOCLDSTOP 1 /* Don't send SIGCHLD when children stop. */ -#define SA_NOCLDWAIT 2 /* Don't create zombie on child death. */ -#define SA_SIGINFO 4 /* Invoke signal-catching function with - three arguments instead of one. */ -#if defined __USE_UNIX98 || defined __USE_MISC -# define SA_NOPTRACE 0x02000000 /* Don't ptrace this signal. */ -# define SA_ONSTACK 0x08000000 /* Use signal stack by using `sa_restorer'. */ -# define SA_RESTART 0x10000000 /* Restart syscall on signal return. */ -# define SA_NODEFER 0x40000000 /* Don't automatically block the signal when - its handler is being executed. */ -# define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler. */ -#endif -#ifdef __USE_MISC -# define SA_INTERRUPT 0x20000000 /* Historical no-op. */ - -/* Some aliases for the SA_ constants. */ -# define SA_NOMASK SA_NODEFER -# define SA_ONESHOT SA_RESETHAND -# define SA_STACK SA_ONSTACK -#endif - -/* Values for the HOW argument to `sigprocmask'. */ -#define SIG_BLOCK 0 /* Block signals. */ -#define SIG_UNBLOCK 1 /* Unblock signals. */ -#define SIG_SETMASK 2 /* Set the set of blocked signals. */ diff --git a/sysdeps/unix/sysv/linux/tile/bits/siginfo-arch.h b/sysdeps/unix/sysv/linux/tile/bits/siginfo-arch.h deleted file mode 100644 index 7d0c24c84b..0000000000 --- a/sysdeps/unix/sysv/linux/tile/bits/siginfo-arch.h +++ /dev/null @@ -1,10 +0,0 @@ -/* Architecture-specific adjustments to siginfo_t. Tile version. */ -#ifndef _BITS_SIGINFO_ARCH_H -#define _BITS_SIGINFO_ARCH_H 1 - -#define __SI_SIGFAULT_ADDL \ - int _si_trapno; - -#define si_trapno _sifields._sigfault._si_trapno - -#endif diff --git a/sysdeps/unix/sysv/linux/tile/bits/siginfo-consts-arch.h b/sysdeps/unix/sysv/linux/tile/bits/siginfo-consts-arch.h deleted file mode 100644 index 2e76d2082a..0000000000 --- a/sysdeps/unix/sysv/linux/tile/bits/siginfo-consts-arch.h +++ /dev/null @@ -1,14 +0,0 @@ -/* Architecture-specific additional siginfo constants. Tile version. */ -#ifndef _BITS_SIGINFO_CONSTS_ARCH_H -#define _BITS_SIGINFO_CONSTS_ARCH_H 1 - -/* `si_code' values for SIGILL signal. */ -enum -{ - ILL_DBLFLT = ILL_BADSTK + 1, /* Double fault. */ -#define ILL_DBLFLT ILL_DBLFLT - ILL_HARDWALL /* User networks hardwall violation. */ -#define ILL_HARDWALL ILL_HARDWALL -}; - -#endif diff --git a/sysdeps/unix/sysv/linux/tile/cacheflush.c b/sysdeps/unix/sysv/linux/tile/cacheflush.c deleted file mode 100644 index c96077011d..0000000000 --- a/sysdeps/unix/sysv/linux/tile/cacheflush.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* Flush cache(s). */ -int -_flush_cache (char *addr, const int nbytes, const int op) -{ -#ifdef __NR_cacheflush - return INLINE_SYSCALL (cacheflush, 3, addr, nbytes, op); -#else - __set_errno (ENOSYS); - return -1; -#endif -} -weak_alias (_flush_cache, cacheflush) diff --git a/sysdeps/unix/sysv/linux/tile/clone.S b/sysdeps/unix/sysv/linux/tile/clone.S deleted file mode 100644 index d7d2a3b968..0000000000 --- a/sysdeps/unix/sysv/linux/tile/clone.S +++ /dev/null @@ -1,178 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after it's all over. */ - -#include -#define _ERRNO_H 1 -#include - -#include -#include -#include -#include - -/* What we save where in the stack frame; must include all callee-saves. */ -#define FRAME_NEXT_LR (0 * REGSIZE) /* reserved by ABI; not used here */ -#define FRAME_SP (1 * REGSIZE) -#define FRAME_R30 (2 * REGSIZE) -#define FRAME_R31 (3 * REGSIZE) -#define FRAME_R32 (4 * REGSIZE) -#define FRAME_SIZE (5 * REGSIZE) - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - pid_t *ptid, struct user_desc *tls, pid_t *ctid); */ - - .text -ENTRY (__clone) - /* Create a stack frame so we can pass callee-saves to new task. */ - { - move r10, sp - ST sp, lr - ADDI_PTR sp, sp, -FRAME_SIZE - } - cfi_offset (lr, 0) - cfi_def_cfa_offset (FRAME_SIZE) - ADDI_PTR r11, sp, FRAME_SP - { - ST r11, r10 - ADDI_PTR r11, sp, FRAME_R30 - } - { - ST r11, r30 - ADDI_PTR r11, sp, FRAME_R31 - } - cfi_offset (r30, FRAME_R30 - FRAME_SIZE) - { - ST r11, r31 - ADDI_PTR r11, sp, FRAME_R32 - } - cfi_offset (r31, FRAME_R31 - FRAME_SIZE) - ST r11, r32 - cfi_offset (r32, FRAME_R32 - FRAME_SIZE) - - /* sanity check arguments */ - BEQZ r0, .Linvalid - BEQZ r1, .Linvalid - - /* Make sure child stack is properly aligned, and set up the - top frame so that we can call out of it immediately in the - child. Setting it up here means we fault in the parent if - it's bogus, which is probably cleaner than faulting first - thing in the child. */ - ADDI_PTR r1, r1, -C_ABI_SAVE_AREA_SIZE - andi r1, r1, -C_ABI_SAVE_AREA_SIZE - ADDI_PTR r9, r1, REGSIZE /* sp of this frame on entry, i.e. zero */ - ST r9, zero - - /* We need to switch the argument convention around from - libc to kernel: - - libc: - r0 fn - r1 child_stack - r2 flags - r3 arg - r4 ptid - r5 tls - r6 ctid - - kernel: - r0 flags - r1 child_stack [same as libc] - r2 ptid - r3 ctid - r4 tls - - Plus the callee-saves as described at .Lthread_start, below. */ - { - move r32, r0 - move r0, r2 - } - { - move r31, r3 - move r3, r6 - } - { - move r30, r2 - move r2, r4 - } - { - move r4, r5 - moveli TREG_SYSCALL_NR_NAME, __NR_clone - } - swint1 - BEQZ r0, .Lthread_start /* If in child task. */ - -.Ldone: - /* Restore the callee-saved registers and return. */ - ADDLI_PTR lr, sp, FRAME_SIZE - { - LD lr, lr - ADDLI_PTR r30, sp, FRAME_R30 - } - { - LD r30, r30 - ADDLI_PTR r31, sp, FRAME_R31 - } - { - LD r31, r31 - ADDLI_PTR r32, sp, FRAME_R32 - } - { - LD r32, r32 - ADDI_PTR sp, sp, FRAME_SIZE - } - cfi_def_cfa_offset (0) - - BNEZ r1, .Lerror - jrp lr - -.Lerror: - j SYSCALL_ERROR_NAME - -.Linvalid: - { - movei r1, EINVAL - j .Ldone - } - -/* This function expects to receive: - - sp: the top of a valid stack area - r30: clone() flags - r31: the argument to pass to the user function - r32: the user function pointer */ - -.Lthread_start: - cfi_def_cfa_offset (FRAME_SIZE) - cfi_undefined (lr) - { - /* Invoke user function with specified argument. */ - move r0, r31 - jalr r32 - } - { - j HIDDEN_JUMPTARGET(_exit) - info INFO_OP_CANNOT_BACKTRACE /* Notify backtracer to stop. */ - } -PSEUDO_END (__clone) - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/tile/dl-static.c b/sysdeps/unix/sysv/linux/tile/dl-static.c deleted file mode 100644 index 09792b701a..0000000000 --- a/sysdeps/unix/sysv/linux/tile/dl-static.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Variable initialization. Tile version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#ifdef SHARED - -void -_dl_var_init (void *array[]) -{ - /* It has to match "variables" below. */ - enum - { - DL_PAGESIZE = 0 - }; - - GLRO(dl_pagesize) = *((size_t *) array[DL_PAGESIZE]); -} - -#else - -static void *variables[] = -{ - &GLRO(dl_pagesize) -}; - -static void -_dl_unprotect_relro (struct link_map *l) -{ - ElfW(Addr) start = ((l->l_addr + l->l_relro_addr) - & ~(GLRO(dl_pagesize) - 1)); - ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size) - & ~(GLRO(dl_pagesize) - 1)); - - if (start != end) - __mprotect ((void *) start, end - start, PROT_READ | PROT_WRITE); -} - -void -_dl_static_init (struct link_map *l) -{ - struct link_map *rtld_map = l; - struct r_scope_elem **scope; - const ElfW(Sym) *ref = NULL; - lookup_t loadbase; - void (*f) (void *[]); - size_t i; - - loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope, - NULL, 0, 1, NULL); - - for (scope = l->l_local_scope; *scope != NULL; scope++) - for (i = 0; i < (*scope)->r_nlist; i++) - if ((*scope)->r_list[i] == loadbase) - { - rtld_map = (*scope)->r_list[i]; - break; - } - - if (ref != NULL) - { - f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref); - _dl_unprotect_relro (rtld_map); - f (variables); - _dl_protect_relro (rtld_map); - } -} - -#endif diff --git a/sysdeps/unix/sysv/linux/tile/getcontext.S b/sysdeps/unix/sysv/linux/tile/getcontext.S deleted file mode 100644 index e7561ea798..0000000000 --- a/sysdeps/unix/sysv/linux/tile/getcontext.S +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -#include "ucontext_i.h" - -/* int getcontext (ucontext_t *ucp) */ - - .text -ENTRY (__getcontext) - FEEDBACK_ENTER(__getcontext) - - /* Save the callee-saved GPRs. There's no need to save the - caller-saved GPRs since the eventual setcontext() or - swapcontext() will assume those registers are all dead. - Save value "1" to uc_flags to later recognize getcontext(). */ - { movei r11, 1; ADDI_PTR r10, r0, UC_FLAGS_OFFSET } - { ST_PTR r10, r11; addli r10, r0, UC_REG(30) } - { ST r10, r30; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r31; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r32; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r33; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r34; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r35; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r36; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r37; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r38; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r39; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r40; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r41; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r42; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r43; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r44; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r45; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r46; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r47; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r48; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r49; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r50; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r51; ADDI_PTR r10, r10, REGSIZE } - { ST r10, r52; ADDI_PTR r10, r10, REGSIZE } - { ST r10, tp; ADDI_PTR r10, r10, REGSIZE } - { ST r10, sp; ADDI_PTR r10, r10, REGSIZE } - { ST r10, lr; ADDI_PTR r10, r10, REGSIZE } - lnk r11 /* Point PC at the "jrp lr" instruction. */ - addli r11, r11, .Lreturn - . - { ST r10, r11; ADDI_PTR r10, r10, REGSIZE } - mfspr r11, INTERRUPT_CRITICAL_SECTION - { - ST r10, r11 - movei r1, 0 - } - - /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG / 8) */ - { - movei r3, _NSIG / 8 - addli r2, r0, UC_SIGMASK_OFFSET - } - { - movei r0, SIG_BLOCK - moveli TREG_SYSCALL_NR_NAME, __NR_rt_sigprocmask - } - swint1 - BNEZ r1, .Lsyscall_error - -.Lreturn: - { - movei r0, 0 - jrp lr - } - -.Lsyscall_error: - j SYSCALL_ERROR_NAME - -END (__getcontext) -.hidden __getcontext - -weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/tile/init-first.c b/sysdeps/unix/sysv/linux/tile/init-first.c deleted file mode 100644 index 8def5c4257..0000000000 --- a/sysdeps/unix/sysv/linux/tile/init-first.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifdef SHARED -#include -#include - -struct syscall_return_value (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, - void *) - attribute_hidden; - -struct syscall_return_value (*VDSO_SYMBOL(clock_gettime)) (clockid_t, - struct timespec *) - __attribute__ ((nocommon)); - - -static inline void -_libc_vdso_platform_setup (void) -{ - PREPARE_VERSION (linux26, "LINUX_2.6", 61765110); - - void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux26); - PTR_MANGLE (p); - VDSO_SYMBOL (gettimeofday) = p; - - p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26); - PTR_MANGLE (p); - VDSO_SYMBOL (clock_gettime) = p; -} - -#define VDSO_SETUP _libc_vdso_platform_setup -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/tile/ipc_priv.h b/sysdeps/unix/sysv/linux/tile/ipc_priv.h deleted file mode 100644 index 476dc188e4..0000000000 --- a/sysdeps/unix/sysv/linux/tile/ipc_priv.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Old SysV permission definition for Linux. Tile version. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include /* For __key_t */ - -#define __IPC_64 0x0 diff --git a/sysdeps/unix/sysv/linux/tile/kernel-features.h b/sysdeps/unix/sysv/linux/tile/kernel-features.h deleted file mode 100644 index d7d0915283..0000000000 --- a/sysdeps/unix/sysv/linux/tile/kernel-features.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -#include_next - -/* Define this if your 32-bit syscall API requires 64-bit register - pairs to start with an even-number register. */ -#ifndef _LP64 -# define __ASSUME_ALIGNED_REGISTER_PAIRS 1 -# define __ASSUME_FADVISE64_64_NO_ALIGN 1 -#endif diff --git a/sysdeps/unix/sysv/linux/tile/ldsodefs.h b/sysdeps/unix/sysv/linux/tile/ldsodefs.h deleted file mode 100644 index 74ce6aa797..0000000000 --- a/sysdeps/unix/sysv/linux/tile/ldsodefs.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. Tile. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LDSODEFS_H - -/* Get the real definitions. */ -#include_next - -/* Now define our stuff. */ - -/* We need special support to initialize DSO loaded for statically linked - binaries. */ -extern void _dl_static_init (struct link_map *map); -#undef DL_STATIC_INIT -#define DL_STATIC_INIT(map) _dl_static_init (map) - -#endif /* ldsodefs.h */ diff --git a/sysdeps/unix/sysv/linux/tile/libc-vdso.h b/sysdeps/unix/sysv/linux/tile/libc-vdso.h deleted file mode 100644 index 8df48aa087..0000000000 --- a/sysdeps/unix/sysv/linux/tile/libc-vdso.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Resolve function pointers to VDSO functions. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -#ifndef _LIBC_VDSO_H -#define _LIBC_VDSO_H - -#ifdef SHARED - -#include - -struct syscall_return_value -{ - long int value; - long int error; -}; - -extern struct syscall_return_value (*VDSO_SYMBOL (gettimeofday)) (struct - timeval *, - void *) - attribute_hidden; - -extern struct syscall_return_value (*VDSO_SYMBOL (clock_gettime)) (clockid_t, - struct - timespec *); -#endif -#endif /* _LIBC_VDSO_H */ diff --git a/sysdeps/unix/sysv/linux/tile/makecontext.c b/sysdeps/unix/sysv/linux/tile/makecontext.c deleted file mode 100644 index 26e4d426ef..0000000000 --- a/sysdeps/unix/sysv/linux/tile/makecontext.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include -#include - -void -__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) -{ - extern void __startcontext (void); - uint_reg_t *sp, *args; - va_list ap; - int i; - - /* Initialize the top of stack. */ - sp = (uint_reg_t *) ((((intptr_t) ucp->uc_stack.ss_sp - + ucp->uc_stack.ss_size) & -16L) - 16); - - /* Allow room for memory-passed arguments if necessary. */ - if (argc > 10) - sp -= 2 + (argc - 10); - - sp[0] = sp[1] = 0; - - /* Set parameters. */ - va_start (ap, argc); - args = &ucp->uc_mcontext.gregs[0]; - for (i = 0; i < argc; i++) - { - if (i == 10) - args = &sp[2]; - *args++ = va_arg (ap, long); - } - va_end (ap); - - /* Start in the trampoline. */ - ucp->uc_mcontext.pc = (long) __startcontext; - - /* Set stack pointer. */ - ucp->uc_mcontext.sp = (long) sp; - - /* Pass FUNC to __startcontext in r31. */ - ucp->uc_mcontext.gregs[31] = (long) func; - - /* Pass ucp->uc_link to __startcontext in r30. */ - ucp->uc_mcontext.gregs[30] = (long) ucp->uc_link; -} -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/tile/profil-counter.h b/sysdeps/unix/sysv/linux/tile/profil-counter.h deleted file mode 100644 index 1633e5d6c5..0000000000 --- a/sysdeps/unix/sysv/linux/tile/profil-counter.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -static void -__profil_counter (int signo, SIGCONTEXT scp) -{ - profil_count ((void *) GET_PC (scp)); -} diff --git a/sysdeps/unix/sysv/linux/tile/pt-vfork.c b/sysdeps/unix/sysv/linux/tile/pt-vfork.c deleted file mode 100644 index 5fbc6526aa..0000000000 --- a/sysdeps/unix/sysv/linux/tile/pt-vfork.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/tile/set_dataplane.c b/sysdeps/unix/sysv/linux/tile/set_dataplane.c deleted file mode 100644 index 62e45fbb9f..0000000000 --- a/sysdeps/unix/sysv/linux/tile/set_dataplane.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -/* Request dataplane modes from the kernel (compatibility only). */ -#if SHLIB_COMPAT (libc, GLIBC_2_12, GLIBC_2_25) -int -attribute_compat_text_section -__old_set_dataplane (int flags) -{ -#ifdef __NR_set_dataplane - return INLINE_SYSCALL (set_dataplane, 1, flags); -#else - __set_errno (ENOSYS); - return -1; -#endif -} - -compat_symbol (libc, __old_set_dataplane, set_dataplane, GLIBC_2_12); -#endif diff --git a/sysdeps/unix/sysv/linux/tile/setcontext.S b/sysdeps/unix/sysv/linux/tile/setcontext.S deleted file mode 100644 index 8039e7ecc0..0000000000 --- a/sysdeps/unix/sysv/linux/tile/setcontext.S +++ /dev/null @@ -1,206 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#include "ucontext_i.h" - -/* PL to return to via iret in setcontext */ -#define RETURN_PL 0 - -/* int setcontext (const ucontext_t *ucp) */ - - .text -ENTRY (__setcontext) - FEEDBACK_ENTER(__setcontext) - - /* See if this is a true signal context (flags == 0). - If so, restore by invoking rt_sigreturn(). */ -#if UC_FLAGS_OFFSET != 0 -# error "Add offset to r0 prior to load." -#endif - LD_PTR r10, r0 - { - BEQZ r10, .Lsigreturn - addi r10, r10, -1 /* Confirm that it has value "1". */ - } - BNEZ r10, .Lbadcontext - - /* Save lr and r0 briefly on the stack and set the signal mask: - rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG / 8). */ - { - ST sp, lr - ADDI_PTR r11, sp, -(2 * REGSIZE) - move r10, sp - } - ADDI_PTR sp, sp, -(3 * REGSIZE) - cfi_def_cfa_offset (3 * REGSIZE) - cfi_offset (lr, 0) - { - ST r11, r10 - ADDI_PTR r10, sp, (2 * REGSIZE) - } - { - ST r10, r0 - ADDLI_PTR r1, r0, UC_SIGMASK_OFFSET - } - cfi_offset (r0, -REGSIZE) - { - movei r3, _NSIG / 8 - movei r2, 0 - } - { - movei r0, SIG_SETMASK - moveli TREG_SYSCALL_NR_NAME, __NR_rt_sigprocmask - } - swint1 - ADDI_PTR r11, sp, 2 * REGSIZE /* Restore uc_context to r11. */ - { - LD r11, r11 - ADDI_PTR sp, sp, 3 * REGSIZE - } - cfi_def_cfa_offset (0) - LD lr, sp - { - ADDI_PTR r10, r11, UC_REG(0) - BNEZ r1, .Lsyscall_error - } - - /* Restore the argument registers; note they will be random - unless makecontext() has been called. */ - { LD r0, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r1, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r2, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r3, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r4, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r5, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r6, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r7, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r8, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r9, r10; ADDLI_PTR r10, r10, UC_REG(30) - UC_REG(9) } - - /* Restore the callee-saved GPRs. */ - { LD r30, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r31, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r32, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r33, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r34, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r35, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r36, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r37, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r38, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r39, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r40, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r41, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r42, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r43, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r44, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r45, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r46, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r47, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r48, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r49, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r50, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r51, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r52, r10; ADDI_PTR r10, r10, REGSIZE * 2 } - /* Skip tp since it must not change for a given thread. */ - { LD sp, r10; ADDI_PTR r10, r10, REGSIZE } - { LD lr, r10; ADDI_PTR r10, r10, REGSIZE } - { LD r11, r10; ADDI_PTR r10, r10, REGSIZE } - - /* Construct an iret context; we set ICS so we can validly load - EX_CONTEXT for iret without being interrupted halfway through. */ - { - LD r12, r10 - movei r13, 1 - } - { - mtspr INTERRUPT_CRITICAL_SECTION, r13 - shli r12, r12, SPR_EX_CONTEXT_0_1__ICS_SHIFT - } - { - mtspr EX_CONTEXT_0_0, r11 - ori r12, r12, RETURN_PL - } - mtspr EX_CONTEXT_0_1, r12 - iret - jrp lr /* keep the backtracer happy */ - -.Lsigreturn: - /* This is a context obtained from a signal handler. - Perform a full restore by pushing the context - passed onto a simulated signal frame on the stack - and call the signal return syscall as if a signal - handler exited normally. */ - { - ADDLI_PTR sp, sp, -(C_ABI_SAVE_AREA_SIZE + SI_MAX_SIZE + UC_SIZE) - ADDLI_PTR r1, sp, -UC_SIZE - } - cfi_def_cfa_offset (C_ABI_SAVE_AREA_SIZE + SI_MAX_SIZE + UC_SIZE) - moveli r2, UC_SIZE / REGSIZE -0: { - LD r10, r0 - ADDI_PTR r0, r0, REGSIZE - } - { - ST r1, r10 - ADDI_PTR r1, r1, REGSIZE - addi r2, r2, -1 - } - BNEZ r2, 0b - moveli TREG_SYSCALL_NR_NAME, __NR_rt_sigreturn - swint1 - - /* Restore the stack and fall through to the error - path. Successful rt_sigreturn never returns to - its calling place. */ - ADDLI_PTR sp, sp, (C_ABI_SAVE_AREA_SIZE + SI_MAX_SIZE + UC_SIZE) - cfi_def_cfa_offset (0) - -.Lsyscall_error: - j SYSCALL_ERROR_NAME - -.Lbadcontext: - { - movei r1, EINVAL - j SYSCALL_ERROR_NAME - } - -END (__setcontext) - -.hidden __setcontext -weak_alias (__setcontext, setcontext) - -ENTRY (__startcontext) - cfi_undefined (lr) - FEEDBACK_ENTER(__startcontext) - jalr r31 - BEQZ r30, 1f - { - move r0, r30 - jal __setcontext - } -1: { - movei r0, 0 - j HIDDEN_JUMPTARGET(exit) - } -END (__startcontext) -.hidden __startcontext diff --git a/sysdeps/unix/sysv/linux/tile/shlib-versions b/sysdeps/unix/sysv/linux/tile/shlib-versions deleted file mode 100644 index b4360d35e1..0000000000 --- a/sysdeps/unix/sysv/linux/tile/shlib-versions +++ /dev/null @@ -1,2 +0,0 @@ -# glibc 2.12 was released to customers; 2.15 was the first community version. -DEFAULT GLIBC_2.12 GLIBC_2.15 diff --git a/sysdeps/unix/sysv/linux/tile/sigcontextinfo.h b/sysdeps/unix/sysv/linux/tile/sigcontextinfo.h deleted file mode 100644 index 8908c589d3..0000000000 --- a/sysdeps/unix/sysv/linux/tile/sigcontextinfo.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#define SIGCONTEXT siginfo_t *_si, struct ucontext * -#define SIGCONTEXT_EXTRA_ARGS _si, -#define GET_PC(ctx) ((void *) (long) ctx->uc_mcontext.pc) -#define GET_FRAME(ctx) ((void *) (long) ctx->uc_mcontext.regs[TREG_FP]) -#define GET_STACK(ctx) ((void *) (long) ctx->uc_mcontext.sp) -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff --git a/sysdeps/unix/sysv/linux/tile/swapcontext.S b/sysdeps/unix/sysv/linux/tile/swapcontext.S deleted file mode 100644 index 1778dfaa22..0000000000 --- a/sysdeps/unix/sysv/linux/tile/swapcontext.S +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#include "ucontext_i.h" - -/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */ - - .text -ENTRY (__swapcontext) - FEEDBACK_ENTER(__swapcontext) - /* Set up a frame and save r0 and r1. */ - { - ST sp, lr - ADDI_PTR r11, sp, -(3 * REGSIZE) - move r10, sp - } - ADDI_PTR sp, sp, -(4 * REGSIZE) - cfi_def_cfa_offset (4 * REGSIZE) - cfi_offset (lr, 0) - { - ST r11, r10 - ADDI_PTR r10, sp, (2 * REGSIZE) - } - { - ST r10, r0 - ADDI_PTR r10, sp, (3 * REGSIZE) - } - ST r10, r1 - - /* Save the current context. */ - jal __getcontext - - /* Tear down the frame and restore r0, r1, and lr. */ - { - BNEZ r0, .Lerror - ADDI_PTR r1, sp, 3 * REGSIZE - } - { - LD r1, r1 - ADDI_PTR r0, sp, 2 * REGSIZE - } - { - LD r0, r0 - ADDI_PTR sp, sp, 4 * REGSIZE - } - cfi_def_cfa_offset (0) - { - LD lr, sp - ADDLI_PTR r10, r0, UC_REG(54) - } - - /* Update the stored sp and lr. */ - { - ST r10, sp - ADDLI_PTR r10, r0, UC_REG(55) - } - ST r10, lr - - /* Tail-call setcontext to finish up. */ - { - move r0, r1 - j __setcontext - } - -.Lerror: - ADDI_PTR sp, sp, 4 * REGSIZE - cfi_def_cfa_offset (0) - LD lr, sp - jrp lr -END (__swapcontext) - -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/tile/sys/cachectl.h b/sysdeps/unix/sysv/linux/tile/sys/cachectl.h deleted file mode 100644 index 3f4e723e24..0000000000 --- a/sysdeps/unix/sysv/linux/tile/sys/cachectl.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_CACHECTL_H -#define _SYS_CACHECTL_H 1 - -#include - -/* Get the kernel definition for the op bits. */ -#include - -__BEGIN_DECLS - -#ifdef __USE_MISC -extern int cacheflush (void *__addr, const int __nbytes, const int __op) __THROW; -#endif -extern int _flush_cache (char *__addr, const int __nbytes, const int __op) __THROW; - -__END_DECLS - -#endif /* sys/cachectl.h */ diff --git a/sysdeps/unix/sysv/linux/tile/sys/procfs.h b/sysdeps/unix/sysv/linux/tile/sys/procfs.h deleted file mode 100644 index ce3e33ddef..0000000000 --- a/sysdeps/unix/sysv/linux/tile/sys/procfs.h +++ /dev/null @@ -1,128 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somewhat modelled after the file of the same name on SVR4 - systems. It provides a definition of the core file format for ELF - used on Linux. It doesn't have anything to do with the /proc file - system, even though Linux has one. - - Anyway, the whole purpose of this file is for GDB and GDB only. - Don't read too much into it. Don't use it for anything other than - GDB unless you know what you are doing. */ - -#include -#include -#include - -#define __need_int_reg_t -#include - -__BEGIN_DECLS - -/* Type for a general-purpose register. */ -typedef __uint_reg_t elf_greg_t; - -/* And the whole bunch of them. We could have used `struct pt_regs' - from directly in the typedef, but tradition says that - the register set is an array, which does have some peculiar - semantics, so leave it that way. */ -#define ELF_NGREG 64 -#define ELF_NFPREG 0 -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; -typedef elf_greg_t elf_fpregset_t[ELF_NFPREG]; - -/* Signal info. */ -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with Linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - GDB doesn't really use excluded. */ - -struct elf_prstatus - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args. */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned int pr_uid; - unsigned int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - - -/* The rest of this file provides the types for emulation of the - Solaris interfaces that should be implemented by - users of libthread_db. */ - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; - -/* Provide dummy declaration here; we don't have FP registers. */ -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore have only one PID type. */ -typedef __pid_t lwpid_t; - -/* Process status and info. In the end we do provide typedefs for them. */ -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/tile/sys/ptrace.h b/sysdeps/unix/sysv/linux/tile/sys/ptrace.h deleted file mode 100644 index 6287e42952..0000000000 --- a/sysdeps/unix/sysv/linux/tile/sys/ptrace.h +++ /dev/null @@ -1,196 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_PTRACE_H -#define _SYS_PTRACE_H 1 - -#include -#include - -__BEGIN_DECLS - -/* Type of the REQUEST argument to `ptrace.' */ -enum __ptrace_request -{ - /* Indicate that the process making this request should be traced. - All signals received by this process can be intercepted by its - parent, and its parent can use the other `ptrace' requests. */ - PTRACE_TRACEME = 0, -#define PT_TRACE_ME PTRACE_TRACEME - - /* Return the word in the process's text space at address ADDR. */ - PTRACE_PEEKTEXT = 1, -#define PT_READ_I PTRACE_PEEKTEXT - - /* Return the word in the process's data space at address ADDR. */ - PTRACE_PEEKDATA = 2, -#define PT_READ_D PTRACE_PEEKDATA - - /* Return the word in the process's user area at offset ADDR. */ - PTRACE_PEEKUSER = 3, -#define PT_READ_U PTRACE_PEEKUSER - - /* Write the word DATA into the process's text space at address ADDR. */ - PTRACE_POKETEXT = 4, -#define PT_WRITE_I PTRACE_POKETEXT - - /* Write the word DATA into the process's data space at address ADDR. */ - PTRACE_POKEDATA = 5, -#define PT_WRITE_D PTRACE_POKEDATA - - /* Write the word DATA into the process's user area at offset ADDR. */ - PTRACE_POKEUSER = 6, -#define PT_WRITE_U PTRACE_POKEUSER - - /* Continue the process. */ - PTRACE_CONT = 7, -#define PT_CONTINUE PTRACE_CONT - - /* Kill the process. */ - PTRACE_KILL = 8, -#define PT_KILL PTRACE_KILL - - /* Single step the process. */ - PTRACE_SINGLESTEP = 9, -#define PT_STEP PTRACE_SINGLESTEP - - /* Get all general purpose registers used by a processes. */ - PTRACE_GETREGS = 12, -#define PT_GETREGS PTRACE_GETREGS - - /* Set all general purpose registers used by a processes. */ - PTRACE_SETREGS = 13, -#define PT_SETREGS PTRACE_SETREGS - - /* Attach to a process that is already running. */ - PTRACE_ATTACH = 16, -#define PT_ATTACH PTRACE_ATTACH - - /* Detach from a process attached to with PTRACE_ATTACH. */ - PTRACE_DETACH = 17, -#define PT_DETACH PTRACE_DETACH - - /* Continue and stop at the next (return from) syscall. */ - PTRACE_SYSCALL = 24, -#define PT_SYSCALL PTRACE_SYSCALL - - /* Set ptrace filter options. */ - PTRACE_SETOPTIONS = 0x4200, -#define PT_SETOPTIONS PTRACE_SETOPTIONS - - /* Get last ptrace message. */ - PTRACE_GETEVENTMSG = 0x4201, -#define PT_GETEVENTMSG PTRACE_GETEVENTMSG - - /* Get siginfo for process. */ - PTRACE_GETSIGINFO = 0x4202, -#define PT_GETSIGINFO PTRACE_GETSIGINFO - - /* Set new siginfo for process. */ - PTRACE_SETSIGINFO = 0x4203, -#define PT_SETSIGINFO PTRACE_SETSIGINFO - - /* Set register content. */ - PTRACE_SETREGSET = 0x4205, -#define PTRACE_SETREGSET PTRACE_SETREGSET - - /* Like PTRACE_ATTACH, but do not force tracee to trap and do not affect - signal or group stop state. */ - PTRACE_SEIZE = 0x4206, -#define PTRACE_SEIZE PTRACE_SEIZE - - /* Trap seized tracee. */ - PTRACE_INTERRUPT = 0x4207, -#define PTRACE_INTERRUPT PTRACE_INTERRUPT - - /* Wait for next group event. */ - PTRACE_LISTEN = 0x4208, -#define PTRACE_LISTEN PTRACE_LISTEN - - PTRACE_PEEKSIGINFO = 0x4209, -#define PTRACE_PEEKSIGINFO PTRACE_PEEKSIGINFO - - PTRACE_GETSIGMASK = 0x420a, -#define PTRACE_GETSIGMASK PTRACE_GETSIGMASK - - PTRACE_SETSIGMASK = 0x420b, -#define PTRACE_SETSIGMASK PTRACE_SETSIGMASK - - PTRACE_SECCOMP_GET_FILTER = 0x420c -#define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER -}; - - -/* Options set using PTRACE_SETOPTIONS. */ -enum __ptrace_setoptions -{ - PTRACE_O_TRACESYSGOOD = 0x00000001, - PTRACE_O_TRACEFORK = 0x00000002, - PTRACE_O_TRACEVFORK = 0x00000004, - PTRACE_O_TRACECLONE = 0x00000008, - PTRACE_O_TRACEEXEC = 0x00000010, - PTRACE_O_TRACEVFORKDONE = 0x00000020, - PTRACE_O_TRACEEXIT = 0x00000040, - PTRACE_O_TRACESECCOMP = 0x00000080, - PTRACE_O_EXITKILL = 0x00100000, - PTRACE_O_SUSPEND_SECCOMP = 0x00200000, - PTRACE_O_MASK = 0x003000ff -}; - -enum __ptrace_eventcodes -{ -/* Wait extended result codes for the above trace options. */ - PTRACE_EVENT_FORK = 1, - PTRACE_EVENT_VFORK = 2, - PTRACE_EVENT_CLONE = 3, - PTRACE_EVENT_EXEC = 4, - PTRACE_EVENT_VFORK_DONE = 5, - PTRACE_EVENT_EXIT = 6, - PTRACE_EVENT_SECCOMP = 7, -/* Extended result codes enabled by means other than options. */ - PTRACE_EVENT_STOP = 128 -}; - -/* Arguments for PTRACE_PEEKSIGINFO. */ -struct __ptrace_peeksiginfo_args -{ - __uint64_t off; /* From which siginfo to start. */ - __uint32_t flags; /* Flags for peeksiginfo. */ - __int32_t nr; /* How many siginfos to take. */ -}; - -enum __ptrace_peeksiginfo_flags -{ - /* Read signals from a shared (process wide) queue. */ - PTRACE_PEEKSIGINFO_SHARED = (1 << 0) -}; - -/* Perform process tracing functions. REQUEST is one of the values - above, and determines the action to be taken. - For all requests except PTRACE_TRACEME, PID specifies the process to be - traced. - - PID and the other arguments described above for the various requests should - appear (those that are used for the particular request) as: - pid_t PID, void *ADDR, int DATA, void *ADDR2 - after REQUEST. */ -extern long int ptrace (enum __ptrace_request __request, ...) __THROW; - -__END_DECLS - -#endif /* _SYS_PTRACE_H */ diff --git a/sysdeps/unix/sysv/linux/tile/sys/reg.h b/sysdeps/unix/sysv/linux/tile/sys/reg.h deleted file mode 100644 index 1ab17ce82a..0000000000 --- a/sysdeps/unix/sysv/linux/tile/sys/reg.h +++ /dev/null @@ -1,2 +0,0 @@ -/* The traditional purpose of "sys/reg.h" is satisfied by "arch/abi.h". */ -#include diff --git a/sysdeps/unix/sysv/linux/tile/sys/ucontext.h b/sysdeps/unix/sysv/linux/tile/sys/ucontext.h deleted file mode 100644 index 7e5cf4a831..0000000000 --- a/sysdeps/unix/sysv/linux/tile/sys/ucontext.h +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - -#ifdef __USE_MISC -/* Get register type and register names. */ -# include - - -/* Type for general register. */ -typedef uint_reg_t greg_t; - -/* Number of general registers. Must agree with . */ -# define NGREG 64 - -/* Container for all general registers. */ -typedef greg_t gregset_t[NGREG]; -#endif - -#ifdef __USE_GNU -/* Names for interesting registers in the `gregset_t' array. */ -enum -{ - /* ... r0 through r51 are just 0 through 51 ... */ - REG_FP = TREG_FP, -# define REG_FP REG_FP - REG_TP = TREG_TP, -# define REG_TP REG_TP - REG_SP = TREG_SP, -# define REG_SP REG_SP - REG_LR = TREG_LR, -# define REG_LR REG_LR -}; -#endif - -/* A machine context is exactly a sigcontext. */ -typedef struct sigcontext mcontext_t; - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - sigset_t uc_sigmask; - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/tile/sys/user.h b/sysdeps/unix/sysv/linux/tile/sys/user.h deleted file mode 100644 index c871f1a03d..0000000000 --- a/sysdeps/unix/sysv/linux/tile/sys/user.h +++ /dev/null @@ -1 +0,0 @@ -/* This file is not needed, but in practice gdb might try to include it. */ diff --git a/sysdeps/unix/sysv/linux/tile/syscall.S b/sysdeps/unix/sysv/linux/tile/syscall.S deleted file mode 100644 index 627ab0ee51..0000000000 --- a/sysdeps/unix/sysv/linux/tile/syscall.S +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - - .text -ENTRY (syscall) - FEEDBACK_ENTER(syscall) - { move TREG_SYSCALL_NR_NAME, r0; move r0, r1 } - { move r1, r2; move r2, r3 } - { move r3, r4; move r4, r5 } - { move r5, r6; move r6, r7 } - swint1 - BNEZ r1, 0f - jrp lr -PSEUDO_END (syscall) diff --git a/sysdeps/unix/sysv/linux/tile/sysconf.c b/sysdeps/unix/sysv/linux/tile/sysconf.c deleted file mode 100644 index a2241935a2..0000000000 --- a/sysdeps/unix/sysv/linux/tile/sysconf.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static long int linux_sysconf (int name); - -/* Get the value of the system variable NAME. */ -long int -__sysconf (int name) -{ - /* Currently we support only tilepro and tilegx, which have - statically-known cache sizes. */ - switch (name) - { - /* Level 1 cache. */ - case _SC_LEVEL1_ICACHE_SIZE: - return CHIP_L1I_CACHE_SIZE(); - case _SC_LEVEL1_ICACHE_ASSOC: - return CHIP_L1I_ASSOC(); - case _SC_LEVEL1_ICACHE_LINESIZE: - return CHIP_L1I_LINE_SIZE(); - case _SC_LEVEL1_DCACHE_SIZE: - return CHIP_L1D_CACHE_SIZE(); - case _SC_LEVEL1_DCACHE_ASSOC: - return CHIP_L1D_ASSOC(); - case _SC_LEVEL1_DCACHE_LINESIZE: - return CHIP_L1D_LINE_SIZE(); - - /* Level 2 cache. */ - case _SC_LEVEL2_CACHE_SIZE: - return CHIP_L2_CACHE_SIZE(); - case _SC_LEVEL2_CACHE_ASSOC: - return CHIP_L2_ASSOC(); - case _SC_LEVEL2_CACHE_LINESIZE: - return CHIP_L2_LINE_SIZE(); - - /* Level 3 cache is layered on level 2 cache. */ - case _SC_LEVEL3_CACHE_SIZE: - return CHIP_L2_CACHE_SIZE() * __get_nprocs(); - case _SC_LEVEL3_CACHE_ASSOC: - return CHIP_L2_ASSOC(); - case _SC_LEVEL3_CACHE_LINESIZE: - return CHIP_L2_LINE_SIZE(); - - /* No level 4 cache. */ - case _SC_LEVEL4_CACHE_SIZE: - case _SC_LEVEL4_CACHE_ASSOC: - case _SC_LEVEL4_CACHE_LINESIZE: - return -1; - } - - return linux_sysconf (name); -} - -/* Now the generic Linux version. */ -#undef __sysconf -#define __sysconf static linux_sysconf -#include diff --git a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h deleted file mode 100644 index 092a90c312..0000000000 --- a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h +++ /dev/null @@ -1,154 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -/* Allow hacking in some extra code if desired. */ -#ifndef PSEUDO_EXTRA -#define PSEUDO_EXTRA -#endif - -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - ENTRY(__##syscall_name##_nocancel); \ - PSEUDO_EXTRA \ - moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name); \ - swint1; \ - BNEZ r1, 0f; \ - jrp lr; \ - END(__##syscall_name##_nocancel); \ - ENTRY (name) \ - SINGLE_THREAD_P(r11); \ - BEQZ r11, L(pseudo_cancel); \ - PSEUDO_EXTRA \ - moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name); \ - swint1; \ - BNEZ r1, 0f; \ - jrp lr; \ - L(pseudo_cancel): \ - { \ - move r11, sp; \ - ST sp, lr; \ - ADDI_PTR sp, sp, -STKSPACE; \ - }; \ - cfi_offset (lr, 0); \ - cfi_def_cfa_offset (STKSPACE); \ - { \ - ADDI_PTR r12, sp, REGSIZE; \ - ADDI_PTR r13, sp, 2 * REGSIZE; /* set up for PUSHARGS_0 */ \ - }; \ - ST r12, r11; \ - PUSHARGS_##args /* save syscall args */ \ - CENABLE; \ - ADDI_PTR r12, sp, 10 * REGSIZE; \ - { \ - ST r12, r0; /* save mask */ \ - ADDI_PTR r13, sp, 2 * REGSIZE; /* set up for POPARGS_0 */ \ - }; \ - POPARGS_##args /* restore syscall args */ \ - PSEUDO_EXTRA \ - moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name); \ - swint1; \ - ADDI_PTR r12, sp, 12 * REGSIZE; \ - { \ - ST r12, r1; /* save syscall result */ \ - ADDI_PTR r12, sp, 11 * REGSIZE; \ - }; \ - { \ - ST r12, r0; \ - ADDI_PTR r13, sp, 10 * REGSIZE; \ - }; \ - LD r0, r13; /* pass mask as arg1 */ \ - CDISABLE; \ - { \ - ADDI_PTR lr, sp, STKSPACE; \ - ADDI_PTR r0, sp, 11 * REGSIZE; \ - }; \ - { \ - LD r0, r0; \ - ADDI_PTR r1, sp, 12 * REGSIZE; \ - }; \ - LD r1, r1; \ - { \ - LD lr, lr; \ - ADDI_PTR sp, sp, STKSPACE; \ - }; \ - cfi_def_cfa_offset (0); \ - BNEZ r1, 0f - -# define PUSHARGS_0 /* nothing to do */ -# define PUSHARGS_1 PUSHARGS_0 { ADDI_PTR r14, sp, 3 * REGSIZE; ST r13, r0 }; -# define PUSHARGS_2 PUSHARGS_1 { ADDI_PTR r13, sp, 4 * REGSIZE; ST r14, r1 }; -# define PUSHARGS_3 PUSHARGS_2 { ADDI_PTR r14, sp, 5 * REGSIZE; ST r13, r2 }; -# define PUSHARGS_4 PUSHARGS_3 { ADDI_PTR r13, sp, 6 * REGSIZE; ST r14, r3 }; -# define PUSHARGS_5 PUSHARGS_4 { ADDI_PTR r14, sp, 7 * REGSIZE; ST r13, r4 }; -# define PUSHARGS_6 PUSHARGS_5 { ADDI_PTR r13, sp, 8 * REGSIZE; ST r14, r5 }; -# define PUSHARGS_7 PUSHARGS_6 { ADDI_PTR r14, sp, 9 * REGSIZE; ST r13, r6 }; - -# define POPARGS_0 /* nothing to do */ -# define POPARGS_1 POPARGS_0 { ADDI_PTR r14, sp, 3 * REGSIZE; LD r0, r13 }; -# define POPARGS_2 POPARGS_1 { ADDI_PTR r13, sp, 4 * REGSIZE; LD r1, r14 }; -# define POPARGS_3 POPARGS_2 { ADDI_PTR r14, sp, 5 * REGSIZE; LD r2, r13 }; -# define POPARGS_4 POPARGS_3 { ADDI_PTR r13, sp, 6 * REGSIZE; LD r3, r14 }; -# define POPARGS_5 POPARGS_4 { ADDI_PTR r14, sp, 7 * REGSIZE; LD r4, r13 }; -# define POPARGS_6 POPARGS_5 { ADDI_PTR r13, sp, 8 * REGSIZE; LD r5, r14 }; -# define POPARGS_7 POPARGS_6 { ADDI_PTR r14, sp, 9 * REGSIZE; LD r6, r13 }; - -# define STKSPACE (13 * REGSIZE) - -# if IS_IN (libpthread) -# define CENABLE jal __pthread_enable_asynccancel -# define CDISABLE jal __pthread_disable_asynccancel -# elif IS_IN (librt) -# define CENABLE jal __librt_enable_asynccancel -# define CDISABLE jal __librt_disable_asynccancel -# else -# define CENABLE jal __libc_enable_asynccancel -# define CDISABLE jal __libc_disable_asynccancel -# endif - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) \ - == 0, 1) -# else -# define SINGLE_THREAD_P(reg) \ - ADDLI_PTR reg, tp, MULTIPLE_THREADS_OFFSET; \ - LD reg, reg; \ - CMPEQI reg, reg, 0 -#endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P 1 -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/tile/sysdep.c b/sysdeps/unix/sysv/linux/tile/sysdep.c deleted file mode 100644 index 1303651346..0000000000 --- a/sysdeps/unix/sysv/linux/tile/sysdep.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include - -int __syscall_error (int dummy, int err); -hidden_proto (__syscall_error) - -/* This routine is jumped to by all the syscall handlers, to stash - an error number into errno. */ -int -__syscall_error (int dummy, int err) -{ - __set_errno (err); - return -1; -} -hidden_def (__syscall_error) diff --git a/sysdeps/unix/sysv/linux/tile/sysdep.h b/sysdeps/unix/sysv/linux/tile/sysdep.h deleted file mode 100644 index fb1b89c280..0000000000 --- a/sysdeps/unix/sysv/linux/tile/sysdep.h +++ /dev/null @@ -1,243 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include - -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - - -#ifdef __ASSEMBLER__ - -/* The actual implementation of doing a syscall. */ -#define DO_CALL(syscall_name, args) \ - moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name); \ - swint1 - -/* TILE Linux returns the result in r0 (or a negative errno). - The kernel "owns" the code to decide if a given value is an error, - and puts errno in r1 if so, or otherwise zero. */ -#define PSEUDO(name, syscall_name, args) \ - ENTRY (name); \ - DO_CALL(syscall_name, args); \ - BNEZ r1, 0f - -#define ret jrp lr - -#ifndef PIC -/* For static code, on error jump to __syscall_error directly. */ -# define SYSCALL_ERROR_NAME __syscall_error -#elif IS_IN (libc) || IS_IN (libpthread) -/* Use the internal name for libc/libpthread shared objects. */ -# define SYSCALL_ERROR_NAME __GI___syscall_error -#else -/* Otherwise, on error do a full PLT jump. */ -# define SYSCALL_ERROR_NAME plt(__syscall_error) -#endif - -#undef PSEUDO_END -#define PSEUDO_END(name) \ -0: \ - j SYSCALL_ERROR_NAME; \ - END (name) - -#undef PSEUDO_NOERRNO -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - ENTRY (name); \ - DO_CALL(syscall_name, args) - -#define ret_NOERRNO jrp lr - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ - END (name) - -/* Convenience wrappers. */ -#define SYSCALL__(name, args) PSEUDO (__##name, name, args) -#define SYSCALL(name, args) PSEUDO (name, name, args) - -#else /* not __ASSEMBLER__ */ - -#include - -/* Define a macro which expands inline into the wrapper code for a system - call. */ -# undef INLINE_SYSCALL -# define INLINE_SYSCALL(name, nr, args...) \ - ({ \ - INTERNAL_SYSCALL_DECL (_sc_err); \ - unsigned long _sc_val = INTERNAL_SYSCALL (name, _sc_err, nr, args); \ - if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_sc_val, _sc_err), 0)) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (_sc_val, _sc_err)); \ - _sc_val = -1; \ - } \ - (long) _sc_val; \ - }) - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - internal_syscall##nr (SYS_ify (name), err, args) - -#undef INTERNAL_SYSCALL_NCS -#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ - internal_syscall##nr (number, err, args) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) int err - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) ({ (void) (val); (err) != 0; }) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) ({ (void) (val); (err); }) - -#define internal_syscall0(num, err, dummy...) \ - ({ \ - long _sys_result, __SYSCALL_CLOBBER_DECLS; \ - __asm__ __volatile__ ( \ - "swint1" \ - : "=R00" (_sys_result), "=R01" (err), __SYSCALL_CLOBBER_OUTPUTS \ - : "R10" (num) \ - : __SYSCALL_CLOBBERS); \ - _sys_result; \ - }) - -#define internal_syscall1(num, err, arg0) \ - ({ \ - long _sys_result, __SYSCALL_CLOBBER_DECLS; \ - __asm__ __volatile__ ( \ - "swint1" \ - : "=R00" (_sys_result), "=R01" (err), __SYSCALL_CLOBBER_OUTPUTS \ - : "R10" (num), "R00" (arg0) \ - : __SYSCALL_CLOBBERS); \ - _sys_result; \ - }) - -#define internal_syscall2(num, err, arg0, arg1) \ - ({ \ - long _sys_result, __SYSCALL_CLOBBER_DECLS; \ - __asm__ __volatile__ ( \ - "swint1" \ - : "=R00" (_sys_result), "=R01" (err), __SYSCALL_CLOBBER_OUTPUTS \ - : "R10" (num), "R00" (arg0), "R01" (arg1) \ - : __SYSCALL_CLOBBERS); \ - _sys_result; \ - }) - -#define internal_syscall3(num, err, arg0, arg1, arg2) \ - ({ \ - long _sys_result, __SYSCALL_CLOBBER_DECLS; \ - __asm__ __volatile__ ( \ - "swint1" \ - : "=R00" (_sys_result), "=R01" (err), __SYSCALL_CLOBBER_OUTPUTS \ - : "R10" (num), "R00" (arg0), "R01" (arg1), "R02" (arg2) \ - : __SYSCALL_CLOBBERS); \ - _sys_result; \ - }) - -#define internal_syscall4(num, err, arg0, arg1, arg2, arg3) \ - ({ \ - long _sys_result, __SYSCALL_CLOBBER_DECLS; \ - __asm__ __volatile__ ( \ - "swint1" \ - : "=R00" (_sys_result), "=R01" (err), __SYSCALL_CLOBBER_OUTPUTS \ - : "R10" (num), "R00" (arg0), "R01" (arg1), "R02" (arg2), \ - "R03" (arg3) \ - : __SYSCALL_CLOBBERS); \ - _sys_result; \ - }) - -#define internal_syscall5(num, err, arg0, arg1, arg2, arg3, arg4) \ - ({ \ - long _sys_result, __SYSCALL_CLOBBER_DECLS; \ - __asm__ __volatile__ ( \ - "swint1" \ - : "=R00" (_sys_result), "=R01" (err), __SYSCALL_CLOBBER_OUTPUTS \ - : "R10" (num), "R00" (arg0), "R01" (arg1), "R02" (arg2), \ - "R03" (arg3), "R04" (arg4) \ - : __SYSCALL_CLOBBERS); \ - _sys_result; \ - }) - -#define internal_syscall6(num, err, arg0, arg1, arg2, arg3, arg4, arg5) \ - ({ \ - long _sys_result, __SYSCALL_CLOBBER_DECLS; \ - __asm__ __volatile__ ( \ - "swint1" \ - : "=R00" (_sys_result), "=R01" (err), __SYSCALL_CLOBBER_OUTPUTS \ - : "R10" (num), "R00" (arg0), "R01" (arg1), "R02" (arg2), \ - "R03" (arg3), "R04" (arg4), "R05" (arg5) \ - : __SYSCALL_CLOBBERS); \ - _sys_result; \ - }) - -#undef __SYSCALL_CLOBBERS -#define __SYSCALL_CLOBBERS \ - "r6", "r7", \ - "r8", "r9", "r11", "r12", "r13", "r14", "r15", \ - "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", \ - "r24", "r25", "r26", "r27", "r28", "r29", "memory" - -/* gcc doesn't seem to allow an input operand to be clobbered, so we - fake it with dummy outputs. */ -#define __SYSCALL_CLOBBER_DECLS \ - _clobber_r2, _clobber_r3, _clobber_r4, _clobber_r5, _clobber_r10 - -#define __SYSCALL_CLOBBER_OUTPUTS \ - "=R02" (_clobber_r2), "=R03" (_clobber_r3), "=R04" (_clobber_r4), \ - "=R05" (_clobber_r5), "=R10" (_clobber_r10) - - -#define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...) \ - ({ \ - struct syscall_return_value _sc_rv = funcptr (args); \ - err = _sc_rv.error; \ - _sc_rv.value; \ - }) - -/* List of system calls which are supported as vsyscalls. */ -#define HAVE_CLOCK_GETTIME_VSYSCALL 1 -#define HAVE_GETTIMEOFDAY_VSYSCALL 1 - -/* Previously tile used the generic version without the libc_hidden_def - which lead in a non existent __send symbol in libc.so. */ -#undef HAVE_INTERNAL_SEND_SYMBOL - -#endif /* __ASSEMBLER__ */ - -/* Pointer mangling support. */ -#if IS_IN (rtld) -/* We cannot use the thread descriptor because in ld.so we use setjmp - earlier than the descriptor is initialized. */ -#else -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(reg, tmpreg) \ - ADDLI_PTR tmpreg, pt, POINTER_GUARD; \ - LD tmpreg, tmpreg; \ - xor reg, tmpreg, reg -# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) -# else -# define PTR_MANGLE(var) \ - (var) = (__typeof (var)) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) -# define PTR_DEMANGLE(var) PTR_MANGLE (var) -# endif -#endif diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/Makefile b/sysdeps/unix/sysv/linux/tile/tilegx/Makefile deleted file mode 100644 index 4f101f334a..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# Provide biarch definitions. -abi-variants := 64 32 -abi-64-options := -D__LP64__ -abi-64-condition := __WORDSIZE == 64 -abi-32-options := -U__LP64__ -abi-32-condition := __WORDSIZE == 32 diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/configure b/sysdeps/unix/sysv/linux/tile/tilegx/configure deleted file mode 100644 index 36e42e07e9..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/configure +++ /dev/null @@ -1,21 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/tile/tilegx - -ldd_rewrite_script=$dir/ldd-rewrite.sed - -case $machine in -tile/tilegx/tilegx32) - test -n "$libc_cv_slibdir" || -case "$prefix" in -/usr | /usr/) - libc_cv_slibdir=/lib32 - libc_cv_rtlddir=/lib32 - if test "$libdir" = '${exec_prefix}/lib'; then - libdir='${exec_prefix}/lib32'; - # Locale data can be shared between 32-bit and 64-bit libraries. - libc_cv_complocaledir='${exec_prefix}/lib/locale' - fi - ;; -esac - ;; -esac diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/configure.ac b/sysdeps/unix/sysv/linux/tile/tilegx/configure.ac deleted file mode 100644 index baca1f62a8..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/configure.ac +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/tile/tilegx - -ldd_rewrite_script=$dir/ldd-rewrite.sed - -case $machine in -tile/tilegx/tilegx32) - LIBC_SLIBDIR_RTLDDIR([lib32], [lib32]) - ;; -esac diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/ioctl.S b/sysdeps/unix/sysv/linux/tile/tilegx/ioctl.S deleted file mode 100644 index e2bf44c75d..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/ioctl.S +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - - -/* TILE-Gx specifies that "unsigned int" is sign extended in the high - 32 bits. But since the userspace API claims to be "unsigned long", - calls into __ioctl() will not be sign extended, but rather pass all - 64 bits of the argument. Therefore, when we pass the "request" - value to the kernel, we must explicitly sign-extend it to match the - kernel's internal use of "unsigned int" as the second argument, - which we do by casting to "unsigned int". */ - -#include - - .text -ENTRY (__ioctl) - FEEDBACK_ENTER(__ioctl) - { - addxi r1, r1, 0 - moveli TREG_SYSCALL_NR_NAME, __NR_ioctl - } - swint1 - BNEZ r1, 0f - jrp lr -PSEUDO_END (__ioctl) -weak_alias (__ioctl, ioctl) diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/ldconfig.h b/sysdeps/unix/sysv/linux/tile/tilegx/ldconfig.h deleted file mode 100644 index 6185e300fe..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/ldconfig.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld.so.1", FLAG_ELF_LIBC6 }, \ - { "/lib32/ld.so.1", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/tile/tilegx/ldd-rewrite.sed deleted file mode 100644 index 8b0bb691cc..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/ldd-rewrite.sed +++ /dev/null @@ -1 +0,0 @@ -s_^\(RTLDLIST=\)\(.*lib\)\(\|32\)\(/[^/]*\.so\.[0-9.]*\)[ ]*$_\1"\2\4 \232\4"_ diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/register-dump.h b/sysdeps/unix/sysv/linux/tile/tilegx/register-dump.h deleted file mode 100644 index 491413e980..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/register-dump.h +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include <_itoa.h> - -/* We will print the register dump in this format: - - R0: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX - R4: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX - R8: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX - R12: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX - R16: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX - R20: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX - R24: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX - R28: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX - R32: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX - R36: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX - R40: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX - R44: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX - R48: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX - R52: XXXXXXXXXXXXXXXX TP: XXXXXXXXXXXXXXXX - SP: XXXXXXXXXXXXXXXX LR: XXXXXXXXXXXXXXXX - - PC: XXXXXXXXXXXXXXXX ICS: X FAULTNUM: XX - - */ - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -register_dump (int fd, mcontext_t *ctx) -{ - char regs[59][16]; - struct iovec iov[132]; - size_t nr = 0; - unsigned int i; - -#define ADD_STRING(str) \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr -#define ADD_MEM(str, len) \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr - - /* Generate strings of register contents. */ - for (i = 0; i < 56; ++i) - hexvalue (ctx->gregs[i], regs[i], 16); - hexvalue (ctx->pc, regs[56], 16); - hexvalue (ctx->ics, regs[57], 1); - hexvalue (ctx->faultnum, regs[58], 2); - - /* Generate the output. */ - for (i = 0; i < 56;) - { - const char *prefixes[] = { - "Register dump:\n\n R0: ", - "\n R4: ", - "\n R8: ", - "\n R12: ", - "\n R16: ", - "\n R20: ", - "\n R24: ", - "\n R28: ", - "\n R32: ", - "\n R36: ", - "\n R40: ", - "\n R44: ", - "\n R48: " - }; - ADD_STRING (prefixes[i / 4]); - do - { - ADD_MEM (regs[i], 16); - ADD_STRING (" "); - } - while (++i % 4); - } - ADD_STRING ("\n R52: "); - ADD_MEM (regs[52], 16); - ADD_STRING (" TP: "); - ADD_MEM (regs[53], 16); - ADD_STRING ("\n SP: "); - ADD_MEM (regs[54], 16); - ADD_STRING (" LR: "); - ADD_MEM (regs[55], 16); - ADD_STRING ("\n\n PC: "); - ADD_MEM (regs[56], 16); - ADD_STRING (" ICS: "); - ADD_MEM (regs[57], 1); - ADD_STRING (" FAULTNUM: "); - ADD_MEM (regs[58], 2); - ADD_STRING ("\n"); - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, &ctx->uc_mcontext) diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/sched_getcpu.c b/sysdeps/unix/sysv/linux/tile/tilegx/sched_getcpu.c deleted file mode 100644 index 807913c7d1..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/sched_getcpu.c +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - - -/* The count of cores horizontally (X dimension) on the chip. */ -static int chip_width; - -/* Read the chip "width" from the /sys filesystem. */ -static int -initialize_chip_width (void) -{ - int w = 0; - int fd; - - fd = __open ("/sys/devices/system/cpu/chip_width", O_RDONLY); - if (fd >= 0) - { - char buf[64]; - ssize_t n; - int i; - - n = __read (fd, buf, sizeof (buf)); - __close (fd); - - for (i = 0; i < n; ++i) - { - if (buf[i] < '0' || buf[i] > '9') - break; - w = (w * 10) + (buf[i] - '0'); - } - } - - /* Store a negative value so we don't try again. */ - if (w == 0) - w = -1; - - /* Using an atomic idempotent write here makes this thread-safe. */ - chip_width = w; - return w; -} - -int -sched_getcpu (void) -{ - unsigned int coord; - int w = chip_width; - - if (__builtin_expect (w <= 0, 0)) - { - if (w == 0) - w = initialize_chip_width (); - if (w < 0) - { - unsigned int cpu; - int r = INLINE_SYSCALL (getcpu, 3, &cpu, NULL, NULL); - return r == -1 ? r : cpu; - } - } - - /* Assign 64-bit value to a 32-bit variable to ensure 32-bit multiply. */ - coord = __insn_mfspr (SPR_TILE_COORD); - - /* Extract Y coord from bits 7..10 and X coord from bits 18..21. */ - return ((coord >> 7) & 0xf) * w + ((coord >> 18) & 0xf); -} diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/Implies b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/Implies deleted file mode 100644 index 9090d3fb8b..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/Implies +++ /dev/null @@ -1,4 +0,0 @@ -unix/sysv/linux/tile/tilegx -unix/sysv/linux/tile -unix/sysv/linux/generic/wordsize-32 -unix/sysv/linux/generic diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/Makefile b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/Makefile deleted file mode 100644 index 1e9d29be31..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/Makefile +++ /dev/null @@ -1 +0,0 @@ -default-abi := 32 diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/c++-types.data b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/c++-types.data deleted file mode 100644 index 1a7bcb38d3..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:i -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:x -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/ld.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/ld.abilist deleted file mode 100644 index f166310147..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/ld.abilist +++ /dev/null @@ -1,9 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __libc_stack_end D 0x4 -GLIBC_2.12 __tls_get_addr F -GLIBC_2.12 _dl_mcount F -GLIBC_2.12 _r_debug D 0x14 -GLIBC_2.12 calloc F -GLIBC_2.12 free F -GLIBC_2.12 malloc F -GLIBC_2.12 realloc F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libBrokenLocale.abilist deleted file mode 100644 index 0d64827515..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libanl.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libanl.abilist deleted file mode 100644 index a3b1cc08bf..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 gai_cancel F -GLIBC_2.12 gai_error F -GLIBC_2.12 gai_suspend F -GLIBC_2.12 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist deleted file mode 100644 index 41647d4610..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist +++ /dev/null @@ -1,2112 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _Exit F -GLIBC_2.12 _IO_2_1_stderr_ D 0xa0 -GLIBC_2.12 _IO_2_1_stdin_ D 0xa0 -GLIBC_2.12 _IO_2_1_stdout_ D 0xa0 -GLIBC_2.12 _IO_adjust_column F -GLIBC_2.12 _IO_adjust_wcolumn F -GLIBC_2.12 _IO_default_doallocate F -GLIBC_2.12 _IO_default_finish F -GLIBC_2.12 _IO_default_pbackfail F -GLIBC_2.12 _IO_default_uflow F -GLIBC_2.12 _IO_default_xsgetn F -GLIBC_2.12 _IO_default_xsputn F -GLIBC_2.12 _IO_do_write F -GLIBC_2.12 _IO_doallocbuf F -GLIBC_2.12 _IO_fclose F -GLIBC_2.12 _IO_fdopen F -GLIBC_2.12 _IO_feof F -GLIBC_2.12 _IO_ferror F -GLIBC_2.12 _IO_fflush F -GLIBC_2.12 _IO_fgetpos F -GLIBC_2.12 _IO_fgetpos64 F -GLIBC_2.12 _IO_fgets F -GLIBC_2.12 _IO_file_attach F -GLIBC_2.12 _IO_file_close F -GLIBC_2.12 _IO_file_close_it F -GLIBC_2.12 _IO_file_doallocate F -GLIBC_2.12 _IO_file_finish F -GLIBC_2.12 _IO_file_fopen F -GLIBC_2.12 _IO_file_init F -GLIBC_2.12 _IO_file_jumps D 0x54 -GLIBC_2.12 _IO_file_open F -GLIBC_2.12 _IO_file_overflow F -GLIBC_2.12 _IO_file_read F -GLIBC_2.12 _IO_file_seek F -GLIBC_2.12 _IO_file_seekoff F -GLIBC_2.12 _IO_file_setbuf F -GLIBC_2.12 _IO_file_stat F -GLIBC_2.12 _IO_file_sync F -GLIBC_2.12 _IO_file_underflow F -GLIBC_2.12 _IO_file_write F -GLIBC_2.12 _IO_file_xsputn F -GLIBC_2.12 _IO_flockfile F -GLIBC_2.12 _IO_flush_all F -GLIBC_2.12 _IO_flush_all_linebuffered F -GLIBC_2.12 _IO_fopen F -GLIBC_2.12 _IO_fprintf F -GLIBC_2.12 _IO_fputs F -GLIBC_2.12 _IO_fread F -GLIBC_2.12 _IO_free_backup_area F -GLIBC_2.12 _IO_free_wbackup_area F -GLIBC_2.12 _IO_fsetpos F -GLIBC_2.12 _IO_fsetpos64 F -GLIBC_2.12 _IO_ftell F -GLIBC_2.12 _IO_ftrylockfile F -GLIBC_2.12 _IO_funlockfile F -GLIBC_2.12 _IO_fwrite F -GLIBC_2.12 _IO_getc F -GLIBC_2.12 _IO_getline F -GLIBC_2.12 _IO_getline_info F -GLIBC_2.12 _IO_gets F -GLIBC_2.12 _IO_init F -GLIBC_2.12 _IO_init_marker F -GLIBC_2.12 _IO_init_wmarker F -GLIBC_2.12 _IO_iter_begin F -GLIBC_2.12 _IO_iter_end F -GLIBC_2.12 _IO_iter_file F -GLIBC_2.12 _IO_iter_next F -GLIBC_2.12 _IO_least_wmarker F -GLIBC_2.12 _IO_link_in F -GLIBC_2.12 _IO_list_all D 0x4 -GLIBC_2.12 _IO_list_lock F -GLIBC_2.12 _IO_list_resetlock F -GLIBC_2.12 _IO_list_unlock F -GLIBC_2.12 _IO_marker_delta F -GLIBC_2.12 _IO_marker_difference F -GLIBC_2.12 _IO_padn F -GLIBC_2.12 _IO_peekc_locked F -GLIBC_2.12 _IO_popen F -GLIBC_2.12 _IO_printf F -GLIBC_2.12 _IO_proc_close F -GLIBC_2.12 _IO_proc_open F -GLIBC_2.12 _IO_putc F -GLIBC_2.12 _IO_puts F -GLIBC_2.12 _IO_remove_marker F -GLIBC_2.12 _IO_seekmark F -GLIBC_2.12 _IO_seekoff F -GLIBC_2.12 _IO_seekpos F -GLIBC_2.12 _IO_seekwmark F -GLIBC_2.12 _IO_setb F -GLIBC_2.12 _IO_setbuffer F -GLIBC_2.12 _IO_setvbuf F -GLIBC_2.12 _IO_sgetn F -GLIBC_2.12 _IO_sprintf F -GLIBC_2.12 _IO_sputbackc F -GLIBC_2.12 _IO_sputbackwc F -GLIBC_2.12 _IO_sscanf F -GLIBC_2.12 _IO_str_init_readonly F -GLIBC_2.12 _IO_str_init_static F -GLIBC_2.12 _IO_str_overflow F -GLIBC_2.12 _IO_str_pbackfail F -GLIBC_2.12 _IO_str_seekoff F -GLIBC_2.12 _IO_str_underflow F -GLIBC_2.12 _IO_sungetc F -GLIBC_2.12 _IO_sungetwc F -GLIBC_2.12 _IO_switch_to_get_mode F -GLIBC_2.12 _IO_switch_to_main_wget_area F -GLIBC_2.12 _IO_switch_to_wbackup_area F -GLIBC_2.12 _IO_switch_to_wget_mode F -GLIBC_2.12 _IO_un_link F -GLIBC_2.12 _IO_ungetc F -GLIBC_2.12 _IO_unsave_markers F -GLIBC_2.12 _IO_unsave_wmarkers F -GLIBC_2.12 _IO_vfprintf F -GLIBC_2.12 _IO_vfscanf F -GLIBC_2.12 _IO_vsprintf F -GLIBC_2.12 _IO_wdefault_doallocate F -GLIBC_2.12 _IO_wdefault_finish F -GLIBC_2.12 _IO_wdefault_pbackfail F -GLIBC_2.12 _IO_wdefault_uflow F -GLIBC_2.12 _IO_wdefault_xsgetn F -GLIBC_2.12 _IO_wdefault_xsputn F -GLIBC_2.12 _IO_wdo_write F -GLIBC_2.12 _IO_wdoallocbuf F -GLIBC_2.12 _IO_wfile_jumps D 0x54 -GLIBC_2.12 _IO_wfile_overflow F -GLIBC_2.12 _IO_wfile_seekoff F -GLIBC_2.12 _IO_wfile_sync F -GLIBC_2.12 _IO_wfile_underflow F -GLIBC_2.12 _IO_wfile_xsputn F -GLIBC_2.12 _IO_wmarker_delta F -GLIBC_2.12 _IO_wsetb F -GLIBC_2.12 ___brk_addr D 0x4 -GLIBC_2.12 __adjtimex F -GLIBC_2.12 __after_morecore_hook D 0x4 -GLIBC_2.12 __argz_count F -GLIBC_2.12 __argz_next F -GLIBC_2.12 __argz_stringify F -GLIBC_2.12 __asprintf F -GLIBC_2.12 __asprintf_chk F -GLIBC_2.12 __assert F -GLIBC_2.12 __assert_fail F -GLIBC_2.12 __assert_perror_fail F -GLIBC_2.12 __backtrace F -GLIBC_2.12 __backtrace_symbols F -GLIBC_2.12 __backtrace_symbols_fd F -GLIBC_2.12 __bsd_getpgrp F -GLIBC_2.12 __bzero F -GLIBC_2.12 __check_rhosts_file D 0x4 -GLIBC_2.12 __chk_fail F -GLIBC_2.12 __clone F -GLIBC_2.12 __close F -GLIBC_2.12 __cmsg_nxthdr F -GLIBC_2.12 __confstr_chk F -GLIBC_2.12 __connect F -GLIBC_2.12 __ctype_b_loc F -GLIBC_2.12 __ctype_get_mb_cur_max F -GLIBC_2.12 __ctype_tolower_loc F -GLIBC_2.12 __ctype_toupper_loc F -GLIBC_2.12 __curbrk D 0x4 -GLIBC_2.12 __cxa_at_quick_exit F -GLIBC_2.12 __cxa_atexit F -GLIBC_2.12 __cxa_finalize F -GLIBC_2.12 __cyg_profile_func_enter F -GLIBC_2.12 __cyg_profile_func_exit F -GLIBC_2.12 __daylight D 0x4 -GLIBC_2.12 __dcgettext F -GLIBC_2.12 __default_morecore F -GLIBC_2.12 __dgettext F -GLIBC_2.12 __dprintf_chk F -GLIBC_2.12 __dup2 F -GLIBC_2.12 __duplocale F -GLIBC_2.12 __endmntent F -GLIBC_2.12 __environ D 0x4 -GLIBC_2.12 __errno_location F -GLIBC_2.12 __fbufsize F -GLIBC_2.12 __fcntl F -GLIBC_2.12 __ffs F -GLIBC_2.12 __fgets_chk F -GLIBC_2.12 __fgets_unlocked_chk F -GLIBC_2.12 __fgetws_chk F -GLIBC_2.12 __fgetws_unlocked_chk F -GLIBC_2.12 __finite F -GLIBC_2.12 __finitef F -GLIBC_2.12 __flbf F -GLIBC_2.12 __fork F -GLIBC_2.12 __fpending F -GLIBC_2.12 __fprintf_chk F -GLIBC_2.12 __fpu_control D 0x4 -GLIBC_2.12 __fpurge F -GLIBC_2.12 __fread_chk F -GLIBC_2.12 __fread_unlocked_chk F -GLIBC_2.12 __freadable F -GLIBC_2.12 __freading F -GLIBC_2.12 __free_hook D 0x4 -GLIBC_2.12 __freelocale F -GLIBC_2.12 __fsetlocking F -GLIBC_2.12 __fwprintf_chk F -GLIBC_2.12 __fwritable F -GLIBC_2.12 __fwriting F -GLIBC_2.12 __fxstat F -GLIBC_2.12 __fxstat64 F -GLIBC_2.12 __fxstatat F -GLIBC_2.12 __fxstatat64 F -GLIBC_2.12 __getcwd_chk F -GLIBC_2.12 __getdelim F -GLIBC_2.12 __getdomainname_chk F -GLIBC_2.12 __getgroups_chk F -GLIBC_2.12 __gethostname_chk F -GLIBC_2.12 __getlogin_r_chk F -GLIBC_2.12 __getmntent_r F -GLIBC_2.12 __getpagesize F -GLIBC_2.12 __getpgid F -GLIBC_2.12 __getpid F -GLIBC_2.12 __gets_chk F -GLIBC_2.12 __gettimeofday F -GLIBC_2.12 __getwd_chk F -GLIBC_2.12 __gmtime_r F -GLIBC_2.12 __h_errno_location F -GLIBC_2.12 __isalnum_l F -GLIBC_2.12 __isalpha_l F -GLIBC_2.12 __isascii_l F -GLIBC_2.12 __isblank_l F -GLIBC_2.12 __iscntrl_l F -GLIBC_2.12 __isctype F -GLIBC_2.12 __isdigit_l F -GLIBC_2.12 __isgraph_l F -GLIBC_2.12 __isinf F -GLIBC_2.12 __isinff F -GLIBC_2.12 __islower_l F -GLIBC_2.12 __isnan F -GLIBC_2.12 __isnanf F -GLIBC_2.12 __isoc99_fscanf F -GLIBC_2.12 __isoc99_fwscanf F -GLIBC_2.12 __isoc99_scanf F -GLIBC_2.12 __isoc99_sscanf F -GLIBC_2.12 __isoc99_swscanf F -GLIBC_2.12 __isoc99_vfscanf F -GLIBC_2.12 __isoc99_vfwscanf F -GLIBC_2.12 __isoc99_vscanf F -GLIBC_2.12 __isoc99_vsscanf F -GLIBC_2.12 __isoc99_vswscanf F -GLIBC_2.12 __isoc99_vwscanf F -GLIBC_2.12 __isoc99_wscanf F -GLIBC_2.12 __isprint_l F -GLIBC_2.12 __ispunct_l F -GLIBC_2.12 __isspace_l F -GLIBC_2.12 __isupper_l F -GLIBC_2.12 __iswalnum_l F -GLIBC_2.12 __iswalpha_l F -GLIBC_2.12 __iswblank_l F -GLIBC_2.12 __iswcntrl_l F -GLIBC_2.12 __iswctype F -GLIBC_2.12 __iswctype_l F -GLIBC_2.12 __iswdigit_l F -GLIBC_2.12 __iswgraph_l F -GLIBC_2.12 __iswlower_l F -GLIBC_2.12 __iswprint_l F -GLIBC_2.12 __iswpunct_l F -GLIBC_2.12 __iswspace_l F -GLIBC_2.12 __iswupper_l F -GLIBC_2.12 __iswxdigit_l F -GLIBC_2.12 __isxdigit_l F -GLIBC_2.12 __ivaliduser F -GLIBC_2.12 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.12 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.12 __key_gendes_LOCAL D 0x4 -GLIBC_2.12 __libc_allocate_rtsig F -GLIBC_2.12 __libc_calloc F -GLIBC_2.12 __libc_current_sigrtmax F -GLIBC_2.12 __libc_current_sigrtmin F -GLIBC_2.12 __libc_free F -GLIBC_2.12 __libc_freeres F -GLIBC_2.12 __libc_init_first F -GLIBC_2.12 __libc_mallinfo F -GLIBC_2.12 __libc_malloc F -GLIBC_2.12 __libc_mallopt F -GLIBC_2.12 __libc_memalign F -GLIBC_2.12 __libc_pvalloc F -GLIBC_2.12 __libc_realloc F -GLIBC_2.12 __libc_sa_len F -GLIBC_2.12 __libc_start_main F -GLIBC_2.12 __libc_valloc F -GLIBC_2.12 __longjmp_chk F -GLIBC_2.12 __lseek F -GLIBC_2.12 __lxstat F -GLIBC_2.12 __lxstat64 F -GLIBC_2.12 __malloc_hook D 0x4 -GLIBC_2.12 __malloc_initialize_hook D 0x4 -GLIBC_2.12 __mbrlen F -GLIBC_2.12 __mbrtowc F -GLIBC_2.12 __mbsnrtowcs_chk F -GLIBC_2.12 __mbsrtowcs_chk F -GLIBC_2.12 __mbstowcs_chk F -GLIBC_2.12 __mcount F -GLIBC_2.12 __memalign_hook D 0x4 -GLIBC_2.12 __memcpy_chk F -GLIBC_2.12 __memmove_chk F -GLIBC_2.12 __mempcpy F -GLIBC_2.12 __mempcpy_chk F -GLIBC_2.12 __mempcpy_small F -GLIBC_2.12 __memset_chk F -GLIBC_2.12 __monstartup F -GLIBC_2.12 __morecore D 0x4 -GLIBC_2.12 __nanosleep F -GLIBC_2.12 __newlocale F -GLIBC_2.12 __nl_langinfo_l F -GLIBC_2.12 __nss_configure_lookup F -GLIBC_2.12 __nss_database_lookup F -GLIBC_2.12 __nss_group_lookup F -GLIBC_2.12 __nss_hostname_digits_dots F -GLIBC_2.12 __nss_hosts_lookup F -GLIBC_2.12 __nss_next F -GLIBC_2.12 __nss_passwd_lookup F -GLIBC_2.12 __obstack_printf_chk F -GLIBC_2.12 __obstack_vprintf_chk F -GLIBC_2.12 __open F -GLIBC_2.12 __open64 F -GLIBC_2.12 __open64_2 F -GLIBC_2.12 __open_2 F -GLIBC_2.12 __openat64_2 F -GLIBC_2.12 __openat_2 F -GLIBC_2.12 __overflow F -GLIBC_2.12 __pipe F -GLIBC_2.12 __poll F -GLIBC_2.12 __posix_getopt F -GLIBC_2.12 __pread64 F -GLIBC_2.12 __pread64_chk F -GLIBC_2.12 __pread_chk F -GLIBC_2.12 __printf_chk F -GLIBC_2.12 __printf_fp F -GLIBC_2.12 __profile_frequency F -GLIBC_2.12 __progname D 0x4 -GLIBC_2.12 __progname_full D 0x4 -GLIBC_2.12 __ptsname_r_chk F -GLIBC_2.12 __pwrite64 F -GLIBC_2.12 __rawmemchr F -GLIBC_2.12 __rcmd_errstr D 0x4 -GLIBC_2.12 __read F -GLIBC_2.12 __read_chk F -GLIBC_2.12 __readlink_chk F -GLIBC_2.12 __readlinkat_chk F -GLIBC_2.12 __realloc_hook D 0x4 -GLIBC_2.12 __realpath_chk F -GLIBC_2.12 __recv_chk F -GLIBC_2.12 __recvfrom_chk F -GLIBC_2.12 __register_atfork F -GLIBC_2.12 __res_init F -GLIBC_2.12 __res_nclose F -GLIBC_2.12 __res_ninit F -GLIBC_2.12 __res_randomid F -GLIBC_2.12 __res_state F -GLIBC_2.12 __rpc_thread_createerr F -GLIBC_2.12 __rpc_thread_svc_fdset F -GLIBC_2.12 __rpc_thread_svc_max_pollfd F -GLIBC_2.12 __rpc_thread_svc_pollfd F -GLIBC_2.12 __sbrk F -GLIBC_2.12 __sched_cpualloc F -GLIBC_2.12 __sched_cpucount F -GLIBC_2.12 __sched_cpufree F -GLIBC_2.12 __sched_get_priority_max F -GLIBC_2.12 __sched_get_priority_min F -GLIBC_2.12 __sched_getparam F -GLIBC_2.12 __sched_getscheduler F -GLIBC_2.12 __sched_setscheduler F -GLIBC_2.12 __sched_yield F -GLIBC_2.12 __secure_getenv F -GLIBC_2.12 __select F -GLIBC_2.12 __setmntent F -GLIBC_2.12 __setpgid F -GLIBC_2.12 __sigaction F -GLIBC_2.12 __sigaddset F -GLIBC_2.12 __sigdelset F -GLIBC_2.12 __sigismember F -GLIBC_2.12 __signbit F -GLIBC_2.12 __signbitf F -GLIBC_2.12 __sigpause F -GLIBC_2.12 __sigsetjmp F -GLIBC_2.12 __sigsuspend F -GLIBC_2.12 __snprintf_chk F -GLIBC_2.12 __sprintf_chk F -GLIBC_2.12 __stack_chk_fail F -GLIBC_2.12 __statfs F -GLIBC_2.12 __stpcpy F -GLIBC_2.12 __stpcpy_chk F -GLIBC_2.12 __stpcpy_small F -GLIBC_2.12 __stpncpy F -GLIBC_2.12 __stpncpy_chk F -GLIBC_2.12 __strcasecmp F -GLIBC_2.12 __strcasecmp_l F -GLIBC_2.12 __strcasestr F -GLIBC_2.12 __strcat_chk F -GLIBC_2.12 __strcoll_l F -GLIBC_2.12 __strcpy_chk F -GLIBC_2.12 __strcpy_small F -GLIBC_2.12 __strcspn_c1 F -GLIBC_2.12 __strcspn_c2 F -GLIBC_2.12 __strcspn_c3 F -GLIBC_2.12 __strdup F -GLIBC_2.12 __strerror_r F -GLIBC_2.12 __strfmon_l F -GLIBC_2.12 __strftime_l F -GLIBC_2.12 __strncasecmp_l F -GLIBC_2.12 __strncat_chk F -GLIBC_2.12 __strncpy_chk F -GLIBC_2.12 __strndup F -GLIBC_2.12 __strpbrk_c2 F -GLIBC_2.12 __strpbrk_c3 F -GLIBC_2.12 __strsep_1c F -GLIBC_2.12 __strsep_2c F -GLIBC_2.12 __strsep_3c F -GLIBC_2.12 __strsep_g F -GLIBC_2.12 __strspn_c1 F -GLIBC_2.12 __strspn_c2 F -GLIBC_2.12 __strspn_c3 F -GLIBC_2.12 __strtod_internal F -GLIBC_2.12 __strtod_l F -GLIBC_2.12 __strtof_internal F -GLIBC_2.12 __strtof_l F -GLIBC_2.12 __strtok_r F -GLIBC_2.12 __strtok_r_1c F -GLIBC_2.12 __strtol_internal F -GLIBC_2.12 __strtol_l F -GLIBC_2.12 __strtold_internal F -GLIBC_2.12 __strtold_l F -GLIBC_2.12 __strtoll_internal F -GLIBC_2.12 __strtoll_l F -GLIBC_2.12 __strtoul_internal F -GLIBC_2.12 __strtoul_l F -GLIBC_2.12 __strtoull_internal F -GLIBC_2.12 __strtoull_l F -GLIBC_2.12 __strverscmp F -GLIBC_2.12 __strxfrm_l F -GLIBC_2.12 __swprintf_chk F -GLIBC_2.12 __sysconf F -GLIBC_2.12 __syslog_chk F -GLIBC_2.12 __sysv_signal F -GLIBC_2.12 __timezone D 0x4 -GLIBC_2.12 __toascii_l F -GLIBC_2.12 __tolower_l F -GLIBC_2.12 __toupper_l F -GLIBC_2.12 __towctrans F -GLIBC_2.12 __towctrans_l F -GLIBC_2.12 __towlower_l F -GLIBC_2.12 __towupper_l F -GLIBC_2.12 __ttyname_r_chk F -GLIBC_2.12 __tzname D 0x8 -GLIBC_2.12 __uflow F -GLIBC_2.12 __underflow F -GLIBC_2.12 __uselocale F -GLIBC_2.12 __vasprintf_chk F -GLIBC_2.12 __vdprintf_chk F -GLIBC_2.12 __vfork F -GLIBC_2.12 __vfprintf_chk F -GLIBC_2.12 __vfscanf F -GLIBC_2.12 __vfwprintf_chk F -GLIBC_2.12 __vprintf_chk F -GLIBC_2.12 __vsnprintf F -GLIBC_2.12 __vsnprintf_chk F -GLIBC_2.12 __vsprintf_chk F -GLIBC_2.12 __vsscanf F -GLIBC_2.12 __vswprintf_chk F -GLIBC_2.12 __vsyslog_chk F -GLIBC_2.12 __vwprintf_chk F -GLIBC_2.12 __wait F -GLIBC_2.12 __waitpid F -GLIBC_2.12 __wcpcpy_chk F -GLIBC_2.12 __wcpncpy_chk F -GLIBC_2.12 __wcrtomb_chk F -GLIBC_2.12 __wcscasecmp_l F -GLIBC_2.12 __wcscat_chk F -GLIBC_2.12 __wcscoll_l F -GLIBC_2.12 __wcscpy_chk F -GLIBC_2.12 __wcsftime_l F -GLIBC_2.12 __wcsncasecmp_l F -GLIBC_2.12 __wcsncat_chk F -GLIBC_2.12 __wcsncpy_chk F -GLIBC_2.12 __wcsnrtombs_chk F -GLIBC_2.12 __wcsrtombs_chk F -GLIBC_2.12 __wcstod_internal F -GLIBC_2.12 __wcstod_l F -GLIBC_2.12 __wcstof_internal F -GLIBC_2.12 __wcstof_l F -GLIBC_2.12 __wcstol_internal F -GLIBC_2.12 __wcstol_l F -GLIBC_2.12 __wcstold_internal F -GLIBC_2.12 __wcstold_l F -GLIBC_2.12 __wcstoll_internal F -GLIBC_2.12 __wcstoll_l F -GLIBC_2.12 __wcstombs_chk F -GLIBC_2.12 __wcstoul_internal F -GLIBC_2.12 __wcstoul_l F -GLIBC_2.12 __wcstoull_internal F -GLIBC_2.12 __wcstoull_l F -GLIBC_2.12 __wcsxfrm_l F -GLIBC_2.12 __wctomb_chk F -GLIBC_2.12 __wctrans_l F -GLIBC_2.12 __wctype_l F -GLIBC_2.12 __wmemcpy_chk F -GLIBC_2.12 __wmemmove_chk F -GLIBC_2.12 __wmempcpy_chk F -GLIBC_2.12 __wmemset_chk F -GLIBC_2.12 __woverflow F -GLIBC_2.12 __wprintf_chk F -GLIBC_2.12 __write F -GLIBC_2.12 __wuflow F -GLIBC_2.12 __wunderflow F -GLIBC_2.12 __xmknod F -GLIBC_2.12 __xmknodat F -GLIBC_2.12 __xpg_basename F -GLIBC_2.12 __xpg_sigpause F -GLIBC_2.12 __xpg_strerror_r F -GLIBC_2.12 __xstat F -GLIBC_2.12 __xstat64 F -GLIBC_2.12 _authenticate F -GLIBC_2.12 _dl_mcount_wrapper F -GLIBC_2.12 _dl_mcount_wrapper_check F -GLIBC_2.12 _environ D 0x4 -GLIBC_2.12 _exit F -GLIBC_2.12 _flush_cache F -GLIBC_2.12 _flushlbf F -GLIBC_2.12 _libc_intl_domainname D 0x5 -GLIBC_2.12 _longjmp F -GLIBC_2.12 _mcleanup F -GLIBC_2.12 _mcount F -GLIBC_2.12 _nl_default_dirname D 0x12 -GLIBC_2.12 _nl_domain_bindings D 0x4 -GLIBC_2.12 _nl_msg_cat_cntr D 0x4 -GLIBC_2.12 _null_auth D 0xc -GLIBC_2.12 _obstack_allocated_p F -GLIBC_2.12 _obstack_begin F -GLIBC_2.12 _obstack_begin_1 F -GLIBC_2.12 _obstack_free F -GLIBC_2.12 _obstack_memory_used F -GLIBC_2.12 _obstack_newchunk F -GLIBC_2.12 _res D 0x200 -GLIBC_2.12 _res_hconf D 0x30 -GLIBC_2.12 _rpc_dtablesize F -GLIBC_2.12 _seterr_reply F -GLIBC_2.12 _setjmp F -GLIBC_2.12 _sys_errlist D 0x21c -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 _sys_siglist D 0x104 -GLIBC_2.12 _tolower F -GLIBC_2.12 _toupper F -GLIBC_2.12 a64l F -GLIBC_2.12 abort F -GLIBC_2.12 abs F -GLIBC_2.12 accept F -GLIBC_2.12 accept4 F -GLIBC_2.12 access F -GLIBC_2.12 acct F -GLIBC_2.12 addmntent F -GLIBC_2.12 addseverity F -GLIBC_2.12 adjtime F -GLIBC_2.12 adjtimex F -GLIBC_2.12 advance F -GLIBC_2.12 alarm F -GLIBC_2.12 alphasort F -GLIBC_2.12 alphasort64 F -GLIBC_2.12 argp_err_exit_status D 0x4 -GLIBC_2.12 argp_error F -GLIBC_2.12 argp_failure F -GLIBC_2.12 argp_help F -GLIBC_2.12 argp_parse F -GLIBC_2.12 argp_program_bug_address D 0x4 -GLIBC_2.12 argp_program_version D 0x4 -GLIBC_2.12 argp_program_version_hook D 0x4 -GLIBC_2.12 argp_state_help F -GLIBC_2.12 argp_usage F -GLIBC_2.12 argz_add F -GLIBC_2.12 argz_add_sep F -GLIBC_2.12 argz_append F -GLIBC_2.12 argz_count F -GLIBC_2.12 argz_create F -GLIBC_2.12 argz_create_sep F -GLIBC_2.12 argz_delete F -GLIBC_2.12 argz_extract F -GLIBC_2.12 argz_insert F -GLIBC_2.12 argz_next F -GLIBC_2.12 argz_replace F -GLIBC_2.12 argz_stringify F -GLIBC_2.12 asctime F -GLIBC_2.12 asctime_r F -GLIBC_2.12 asprintf F -GLIBC_2.12 atof F -GLIBC_2.12 atoi F -GLIBC_2.12 atol F -GLIBC_2.12 atoll F -GLIBC_2.12 authdes_create F -GLIBC_2.12 authdes_getucred F -GLIBC_2.12 authdes_pk_create F -GLIBC_2.12 authnone_create F -GLIBC_2.12 authunix_create F -GLIBC_2.12 authunix_create_default F -GLIBC_2.12 backtrace F -GLIBC_2.12 backtrace_symbols F -GLIBC_2.12 backtrace_symbols_fd F -GLIBC_2.12 basename F -GLIBC_2.12 bcmp F -GLIBC_2.12 bcopy F -GLIBC_2.12 bdflush F -GLIBC_2.12 bind F -GLIBC_2.12 bind_textdomain_codeset F -GLIBC_2.12 bindresvport F -GLIBC_2.12 bindtextdomain F -GLIBC_2.12 brk F -GLIBC_2.12 bsd_signal F -GLIBC_2.12 bsearch F -GLIBC_2.12 btowc F -GLIBC_2.12 bzero F -GLIBC_2.12 cacheflush F -GLIBC_2.12 calloc F -GLIBC_2.12 callrpc F -GLIBC_2.12 canonicalize_file_name F -GLIBC_2.12 capget F -GLIBC_2.12 capset F -GLIBC_2.12 catclose F -GLIBC_2.12 catgets F -GLIBC_2.12 catopen F -GLIBC_2.12 cbc_crypt F -GLIBC_2.12 cfgetispeed F -GLIBC_2.12 cfgetospeed F -GLIBC_2.12 cfmakeraw F -GLIBC_2.12 cfree F -GLIBC_2.12 cfsetispeed F -GLIBC_2.12 cfsetospeed F -GLIBC_2.12 cfsetspeed F -GLIBC_2.12 chdir F -GLIBC_2.12 chflags F -GLIBC_2.12 chmod F -GLIBC_2.12 chown F -GLIBC_2.12 chroot F -GLIBC_2.12 clearenv F -GLIBC_2.12 clearerr F -GLIBC_2.12 clearerr_unlocked F -GLIBC_2.12 clnt_broadcast F -GLIBC_2.12 clnt_create F -GLIBC_2.12 clnt_pcreateerror F -GLIBC_2.12 clnt_perrno F -GLIBC_2.12 clnt_perror F -GLIBC_2.12 clnt_spcreateerror F -GLIBC_2.12 clnt_sperrno F -GLIBC_2.12 clnt_sperror F -GLIBC_2.12 clntraw_create F -GLIBC_2.12 clnttcp_create F -GLIBC_2.12 clntudp_bufcreate F -GLIBC_2.12 clntudp_create F -GLIBC_2.12 clntunix_create F -GLIBC_2.12 clock F -GLIBC_2.12 clone F -GLIBC_2.12 close F -GLIBC_2.12 closedir F -GLIBC_2.12 closelog F -GLIBC_2.12 confstr F -GLIBC_2.12 connect F -GLIBC_2.12 copysign F -GLIBC_2.12 copysignf F -GLIBC_2.12 copysignl F -GLIBC_2.12 creat F -GLIBC_2.12 creat64 F -GLIBC_2.12 create_module F -GLIBC_2.12 ctermid F -GLIBC_2.12 ctime F -GLIBC_2.12 ctime_r F -GLIBC_2.12 cuserid F -GLIBC_2.12 daemon F -GLIBC_2.12 daylight D 0x4 -GLIBC_2.12 dcgettext F -GLIBC_2.12 dcngettext F -GLIBC_2.12 delete_module F -GLIBC_2.12 des_setparity F -GLIBC_2.12 dgettext F -GLIBC_2.12 difftime F -GLIBC_2.12 dirfd F -GLIBC_2.12 dirname F -GLIBC_2.12 div F -GLIBC_2.12 dl_iterate_phdr F -GLIBC_2.12 dngettext F -GLIBC_2.12 dprintf F -GLIBC_2.12 drand48 F -GLIBC_2.12 drand48_r F -GLIBC_2.12 dup F -GLIBC_2.12 dup2 F -GLIBC_2.12 dup3 F -GLIBC_2.12 duplocale F -GLIBC_2.12 dysize F -GLIBC_2.12 eaccess F -GLIBC_2.12 ecb_crypt F -GLIBC_2.12 ecvt F -GLIBC_2.12 ecvt_r F -GLIBC_2.12 endaliasent F -GLIBC_2.12 endfsent F -GLIBC_2.12 endgrent F -GLIBC_2.12 endhostent F -GLIBC_2.12 endmntent F -GLIBC_2.12 endnetent F -GLIBC_2.12 endnetgrent F -GLIBC_2.12 endprotoent F -GLIBC_2.12 endpwent F -GLIBC_2.12 endrpcent F -GLIBC_2.12 endservent F -GLIBC_2.12 endsgent F -GLIBC_2.12 endspent F -GLIBC_2.12 endttyent F -GLIBC_2.12 endusershell F -GLIBC_2.12 endutent F -GLIBC_2.12 endutxent F -GLIBC_2.12 environ D 0x4 -GLIBC_2.12 envz_add F -GLIBC_2.12 envz_entry F -GLIBC_2.12 envz_get F -GLIBC_2.12 envz_merge F -GLIBC_2.12 envz_remove F -GLIBC_2.12 envz_strip F -GLIBC_2.12 epoll_create F -GLIBC_2.12 epoll_create1 F -GLIBC_2.12 epoll_ctl F -GLIBC_2.12 epoll_pwait F -GLIBC_2.12 epoll_wait F -GLIBC_2.12 erand48 F -GLIBC_2.12 erand48_r F -GLIBC_2.12 err F -GLIBC_2.12 error F -GLIBC_2.12 error_at_line F -GLIBC_2.12 error_message_count D 0x4 -GLIBC_2.12 error_one_per_line D 0x4 -GLIBC_2.12 error_print_progname D 0x4 -GLIBC_2.12 errx F -GLIBC_2.12 ether_aton F -GLIBC_2.12 ether_aton_r F -GLIBC_2.12 ether_hostton F -GLIBC_2.12 ether_line F -GLIBC_2.12 ether_ntoa F -GLIBC_2.12 ether_ntoa_r F -GLIBC_2.12 ether_ntohost F -GLIBC_2.12 euidaccess F -GLIBC_2.12 eventfd F -GLIBC_2.12 eventfd_read F -GLIBC_2.12 eventfd_write F -GLIBC_2.12 execl F -GLIBC_2.12 execle F -GLIBC_2.12 execlp F -GLIBC_2.12 execv F -GLIBC_2.12 execve F -GLIBC_2.12 execvp F -GLIBC_2.12 execvpe F -GLIBC_2.12 exit F -GLIBC_2.12 faccessat F -GLIBC_2.12 fallocate F -GLIBC_2.12 fallocate64 F -GLIBC_2.12 fattach F -GLIBC_2.12 fchdir F -GLIBC_2.12 fchflags F -GLIBC_2.12 fchmod F -GLIBC_2.12 fchmodat F -GLIBC_2.12 fchown F -GLIBC_2.12 fchownat F -GLIBC_2.12 fclose F -GLIBC_2.12 fcloseall F -GLIBC_2.12 fcntl F -GLIBC_2.12 fcvt F -GLIBC_2.12 fcvt_r F -GLIBC_2.12 fdatasync F -GLIBC_2.12 fdetach F -GLIBC_2.12 fdopen F -GLIBC_2.12 fdopendir F -GLIBC_2.12 feof F -GLIBC_2.12 feof_unlocked F -GLIBC_2.12 ferror F -GLIBC_2.12 ferror_unlocked F -GLIBC_2.12 fexecve F -GLIBC_2.12 fflush F -GLIBC_2.12 fflush_unlocked F -GLIBC_2.12 ffs F -GLIBC_2.12 ffsl F -GLIBC_2.12 ffsll F -GLIBC_2.12 fgetc F -GLIBC_2.12 fgetc_unlocked F -GLIBC_2.12 fgetgrent F -GLIBC_2.12 fgetgrent_r F -GLIBC_2.12 fgetpos F -GLIBC_2.12 fgetpos64 F -GLIBC_2.12 fgetpwent F -GLIBC_2.12 fgetpwent_r F -GLIBC_2.12 fgets F -GLIBC_2.12 fgets_unlocked F -GLIBC_2.12 fgetsgent F -GLIBC_2.12 fgetsgent_r F -GLIBC_2.12 fgetspent F -GLIBC_2.12 fgetspent_r F -GLIBC_2.12 fgetwc F -GLIBC_2.12 fgetwc_unlocked F -GLIBC_2.12 fgetws F -GLIBC_2.12 fgetws_unlocked F -GLIBC_2.12 fgetxattr F -GLIBC_2.12 fileno F -GLIBC_2.12 fileno_unlocked F -GLIBC_2.12 finite F -GLIBC_2.12 finitef F -GLIBC_2.12 finitel F -GLIBC_2.12 flistxattr F -GLIBC_2.12 flock F -GLIBC_2.12 flockfile F -GLIBC_2.12 fmemopen F -GLIBC_2.12 fmtmsg F -GLIBC_2.12 fnmatch F -GLIBC_2.12 fopen F -GLIBC_2.12 fopen64 F -GLIBC_2.12 fopencookie F -GLIBC_2.12 fork F -GLIBC_2.12 fpathconf F -GLIBC_2.12 fprintf F -GLIBC_2.12 fputc F -GLIBC_2.12 fputc_unlocked F -GLIBC_2.12 fputs F -GLIBC_2.12 fputs_unlocked F -GLIBC_2.12 fputwc F -GLIBC_2.12 fputwc_unlocked F -GLIBC_2.12 fputws F -GLIBC_2.12 fputws_unlocked F -GLIBC_2.12 fread F -GLIBC_2.12 fread_unlocked F -GLIBC_2.12 free F -GLIBC_2.12 freeaddrinfo F -GLIBC_2.12 freeifaddrs F -GLIBC_2.12 freelocale F -GLIBC_2.12 fremovexattr F -GLIBC_2.12 freopen F -GLIBC_2.12 freopen64 F -GLIBC_2.12 frexp F -GLIBC_2.12 frexpf F -GLIBC_2.12 frexpl F -GLIBC_2.12 fscanf F -GLIBC_2.12 fseek F -GLIBC_2.12 fseeko F -GLIBC_2.12 fseeko64 F -GLIBC_2.12 fsetpos F -GLIBC_2.12 fsetpos64 F -GLIBC_2.12 fsetxattr F -GLIBC_2.12 fstatfs F -GLIBC_2.12 fstatfs64 F -GLIBC_2.12 fstatvfs F -GLIBC_2.12 fstatvfs64 F -GLIBC_2.12 fsync F -GLIBC_2.12 ftell F -GLIBC_2.12 ftello F -GLIBC_2.12 ftello64 F -GLIBC_2.12 ftime F -GLIBC_2.12 ftok F -GLIBC_2.12 ftruncate F -GLIBC_2.12 ftruncate64 F -GLIBC_2.12 ftrylockfile F -GLIBC_2.12 fts_children F -GLIBC_2.12 fts_close F -GLIBC_2.12 fts_open F -GLIBC_2.12 fts_read F -GLIBC_2.12 fts_set F -GLIBC_2.12 ftw F -GLIBC_2.12 ftw64 F -GLIBC_2.12 funlockfile F -GLIBC_2.12 futimens F -GLIBC_2.12 futimes F -GLIBC_2.12 futimesat F -GLIBC_2.12 fwide F -GLIBC_2.12 fwprintf F -GLIBC_2.12 fwrite F -GLIBC_2.12 fwrite_unlocked F -GLIBC_2.12 fwscanf F -GLIBC_2.12 gai_strerror F -GLIBC_2.12 gcvt F -GLIBC_2.12 get_avphys_pages F -GLIBC_2.12 get_current_dir_name F -GLIBC_2.12 get_kernel_syms F -GLIBC_2.12 get_myaddress F -GLIBC_2.12 get_nprocs F -GLIBC_2.12 get_nprocs_conf F -GLIBC_2.12 get_phys_pages F -GLIBC_2.12 getaddrinfo F -GLIBC_2.12 getaliasbyname F -GLIBC_2.12 getaliasbyname_r F -GLIBC_2.12 getaliasent F -GLIBC_2.12 getaliasent_r F -GLIBC_2.12 getc F -GLIBC_2.12 getc_unlocked F -GLIBC_2.12 getchar F -GLIBC_2.12 getchar_unlocked F -GLIBC_2.12 getcontext F -GLIBC_2.12 getcwd F -GLIBC_2.12 getdate F -GLIBC_2.12 getdate_err D 0x4 -GLIBC_2.12 getdate_r F -GLIBC_2.12 getdelim F -GLIBC_2.12 getdirentries F -GLIBC_2.12 getdirentries64 F -GLIBC_2.12 getdomainname F -GLIBC_2.12 getdtablesize F -GLIBC_2.12 getegid F -GLIBC_2.12 getenv F -GLIBC_2.12 geteuid F -GLIBC_2.12 getfsent F -GLIBC_2.12 getfsfile F -GLIBC_2.12 getfsspec F -GLIBC_2.12 getgid F -GLIBC_2.12 getgrent F -GLIBC_2.12 getgrent_r F -GLIBC_2.12 getgrgid F -GLIBC_2.12 getgrgid_r F -GLIBC_2.12 getgrnam F -GLIBC_2.12 getgrnam_r F -GLIBC_2.12 getgrouplist F -GLIBC_2.12 getgroups F -GLIBC_2.12 gethostbyaddr F -GLIBC_2.12 gethostbyaddr_r F -GLIBC_2.12 gethostbyname F -GLIBC_2.12 gethostbyname2 F -GLIBC_2.12 gethostbyname2_r F -GLIBC_2.12 gethostbyname_r F -GLIBC_2.12 gethostent F -GLIBC_2.12 gethostent_r F -GLIBC_2.12 gethostid F -GLIBC_2.12 gethostname F -GLIBC_2.12 getifaddrs F -GLIBC_2.12 getipv4sourcefilter F -GLIBC_2.12 getitimer F -GLIBC_2.12 getline F -GLIBC_2.12 getloadavg F -GLIBC_2.12 getlogin F -GLIBC_2.12 getlogin_r F -GLIBC_2.12 getmntent F -GLIBC_2.12 getmntent_r F -GLIBC_2.12 getmsg F -GLIBC_2.12 getnameinfo F -GLIBC_2.12 getnetbyaddr F -GLIBC_2.12 getnetbyaddr_r F -GLIBC_2.12 getnetbyname F -GLIBC_2.12 getnetbyname_r F -GLIBC_2.12 getnetent F -GLIBC_2.12 getnetent_r F -GLIBC_2.12 getnetgrent F -GLIBC_2.12 getnetgrent_r F -GLIBC_2.12 getnetname F -GLIBC_2.12 getopt F -GLIBC_2.12 getopt_long F -GLIBC_2.12 getopt_long_only F -GLIBC_2.12 getpagesize F -GLIBC_2.12 getpass F -GLIBC_2.12 getpeername F -GLIBC_2.12 getpgid F -GLIBC_2.12 getpgrp F -GLIBC_2.12 getpid F -GLIBC_2.12 getpmsg F -GLIBC_2.12 getppid F -GLIBC_2.12 getpriority F -GLIBC_2.12 getprotobyname F -GLIBC_2.12 getprotobyname_r F -GLIBC_2.12 getprotobynumber F -GLIBC_2.12 getprotobynumber_r F -GLIBC_2.12 getprotoent F -GLIBC_2.12 getprotoent_r F -GLIBC_2.12 getpt F -GLIBC_2.12 getpublickey F -GLIBC_2.12 getpw F -GLIBC_2.12 getpwent F -GLIBC_2.12 getpwent_r F -GLIBC_2.12 getpwnam F -GLIBC_2.12 getpwnam_r F -GLIBC_2.12 getpwuid F -GLIBC_2.12 getpwuid_r F -GLIBC_2.12 getresgid F -GLIBC_2.12 getresuid F -GLIBC_2.12 getrlimit F -GLIBC_2.12 getrlimit64 F -GLIBC_2.12 getrpcbyname F -GLIBC_2.12 getrpcbyname_r F -GLIBC_2.12 getrpcbynumber F -GLIBC_2.12 getrpcbynumber_r F -GLIBC_2.12 getrpcent F -GLIBC_2.12 getrpcent_r F -GLIBC_2.12 getrpcport F -GLIBC_2.12 getrusage F -GLIBC_2.12 gets F -GLIBC_2.12 getsecretkey F -GLIBC_2.12 getservbyname F -GLIBC_2.12 getservbyname_r F -GLIBC_2.12 getservbyport F -GLIBC_2.12 getservbyport_r F -GLIBC_2.12 getservent F -GLIBC_2.12 getservent_r F -GLIBC_2.12 getsgent F -GLIBC_2.12 getsgent_r F -GLIBC_2.12 getsgnam F -GLIBC_2.12 getsgnam_r F -GLIBC_2.12 getsid F -GLIBC_2.12 getsockname F -GLIBC_2.12 getsockopt F -GLIBC_2.12 getsourcefilter F -GLIBC_2.12 getspent F -GLIBC_2.12 getspent_r F -GLIBC_2.12 getspnam F -GLIBC_2.12 getspnam_r F -GLIBC_2.12 getsubopt F -GLIBC_2.12 gettext F -GLIBC_2.12 gettimeofday F -GLIBC_2.12 getttyent F -GLIBC_2.12 getttynam F -GLIBC_2.12 getuid F -GLIBC_2.12 getusershell F -GLIBC_2.12 getutent F -GLIBC_2.12 getutent_r F -GLIBC_2.12 getutid F -GLIBC_2.12 getutid_r F -GLIBC_2.12 getutline F -GLIBC_2.12 getutline_r F -GLIBC_2.12 getutmp F -GLIBC_2.12 getutmpx F -GLIBC_2.12 getutxent F -GLIBC_2.12 getutxid F -GLIBC_2.12 getutxline F -GLIBC_2.12 getw F -GLIBC_2.12 getwc F -GLIBC_2.12 getwc_unlocked F -GLIBC_2.12 getwchar F -GLIBC_2.12 getwchar_unlocked F -GLIBC_2.12 getwd F -GLIBC_2.12 getxattr F -GLIBC_2.12 glob F -GLIBC_2.12 glob64 F -GLIBC_2.12 glob_pattern_p F -GLIBC_2.12 globfree F -GLIBC_2.12 globfree64 F -GLIBC_2.12 gmtime F -GLIBC_2.12 gmtime_r F -GLIBC_2.12 gnu_dev_major F -GLIBC_2.12 gnu_dev_makedev F -GLIBC_2.12 gnu_dev_minor F -GLIBC_2.12 gnu_get_libc_release F -GLIBC_2.12 gnu_get_libc_version F -GLIBC_2.12 grantpt F -GLIBC_2.12 group_member F -GLIBC_2.12 gsignal F -GLIBC_2.12 gtty F -GLIBC_2.12 h_errlist D 0x14 -GLIBC_2.12 h_nerr D 0x4 -GLIBC_2.12 hasmntopt F -GLIBC_2.12 hcreate F -GLIBC_2.12 hcreate_r F -GLIBC_2.12 hdestroy F -GLIBC_2.12 hdestroy_r F -GLIBC_2.12 herror F -GLIBC_2.12 host2netname F -GLIBC_2.12 hsearch F -GLIBC_2.12 hsearch_r F -GLIBC_2.12 hstrerror F -GLIBC_2.12 htonl F -GLIBC_2.12 htons F -GLIBC_2.12 iconv F -GLIBC_2.12 iconv_close F -GLIBC_2.12 iconv_open F -GLIBC_2.12 if_freenameindex F -GLIBC_2.12 if_indextoname F -GLIBC_2.12 if_nameindex F -GLIBC_2.12 if_nametoindex F -GLIBC_2.12 imaxabs F -GLIBC_2.12 imaxdiv F -GLIBC_2.12 in6addr_any D 0x10 -GLIBC_2.12 in6addr_loopback D 0x10 -GLIBC_2.12 index F -GLIBC_2.12 inet6_opt_append F -GLIBC_2.12 inet6_opt_find F -GLIBC_2.12 inet6_opt_finish F -GLIBC_2.12 inet6_opt_get_val F -GLIBC_2.12 inet6_opt_init F -GLIBC_2.12 inet6_opt_next F -GLIBC_2.12 inet6_opt_set_val F -GLIBC_2.12 inet6_option_alloc F -GLIBC_2.12 inet6_option_append F -GLIBC_2.12 inet6_option_find F -GLIBC_2.12 inet6_option_init F -GLIBC_2.12 inet6_option_next F -GLIBC_2.12 inet6_option_space F -GLIBC_2.12 inet6_rth_add F -GLIBC_2.12 inet6_rth_getaddr F -GLIBC_2.12 inet6_rth_init F -GLIBC_2.12 inet6_rth_reverse F -GLIBC_2.12 inet6_rth_segments F -GLIBC_2.12 inet6_rth_space F -GLIBC_2.12 inet_addr F -GLIBC_2.12 inet_aton F -GLIBC_2.12 inet_lnaof F -GLIBC_2.12 inet_makeaddr F -GLIBC_2.12 inet_netof F -GLIBC_2.12 inet_network F -GLIBC_2.12 inet_nsap_addr F -GLIBC_2.12 inet_nsap_ntoa F -GLIBC_2.12 inet_ntoa F -GLIBC_2.12 inet_ntop F -GLIBC_2.12 inet_pton F -GLIBC_2.12 init_module F -GLIBC_2.12 initgroups F -GLIBC_2.12 initstate F -GLIBC_2.12 initstate_r F -GLIBC_2.12 innetgr F -GLIBC_2.12 inotify_add_watch F -GLIBC_2.12 inotify_init F -GLIBC_2.12 inotify_init1 F -GLIBC_2.12 inotify_rm_watch F -GLIBC_2.12 insque F -GLIBC_2.12 ioctl F -GLIBC_2.12 iruserok F -GLIBC_2.12 iruserok_af F -GLIBC_2.12 isalnum F -GLIBC_2.12 isalnum_l F -GLIBC_2.12 isalpha F -GLIBC_2.12 isalpha_l F -GLIBC_2.12 isascii F -GLIBC_2.12 isastream F -GLIBC_2.12 isatty F -GLIBC_2.12 isblank F -GLIBC_2.12 isblank_l F -GLIBC_2.12 iscntrl F -GLIBC_2.12 iscntrl_l F -GLIBC_2.12 isctype F -GLIBC_2.12 isdigit F -GLIBC_2.12 isdigit_l F -GLIBC_2.12 isfdtype F -GLIBC_2.12 isgraph F -GLIBC_2.12 isgraph_l F -GLIBC_2.12 isinf F -GLIBC_2.12 isinff F -GLIBC_2.12 isinfl F -GLIBC_2.12 islower F -GLIBC_2.12 islower_l F -GLIBC_2.12 isnan F -GLIBC_2.12 isnanf F -GLIBC_2.12 isnanl F -GLIBC_2.12 isprint F -GLIBC_2.12 isprint_l F -GLIBC_2.12 ispunct F -GLIBC_2.12 ispunct_l F -GLIBC_2.12 isspace F -GLIBC_2.12 isspace_l F -GLIBC_2.12 isupper F -GLIBC_2.12 isupper_l F -GLIBC_2.12 iswalnum F -GLIBC_2.12 iswalnum_l F -GLIBC_2.12 iswalpha F -GLIBC_2.12 iswalpha_l F -GLIBC_2.12 iswblank F -GLIBC_2.12 iswblank_l F -GLIBC_2.12 iswcntrl F -GLIBC_2.12 iswcntrl_l F -GLIBC_2.12 iswctype F -GLIBC_2.12 iswctype_l F -GLIBC_2.12 iswdigit F -GLIBC_2.12 iswdigit_l F -GLIBC_2.12 iswgraph F -GLIBC_2.12 iswgraph_l F -GLIBC_2.12 iswlower F -GLIBC_2.12 iswlower_l F -GLIBC_2.12 iswprint F -GLIBC_2.12 iswprint_l F -GLIBC_2.12 iswpunct F -GLIBC_2.12 iswpunct_l F -GLIBC_2.12 iswspace F -GLIBC_2.12 iswspace_l F -GLIBC_2.12 iswupper F -GLIBC_2.12 iswupper_l F -GLIBC_2.12 iswxdigit F -GLIBC_2.12 iswxdigit_l F -GLIBC_2.12 isxdigit F -GLIBC_2.12 isxdigit_l F -GLIBC_2.12 jrand48 F -GLIBC_2.12 jrand48_r F -GLIBC_2.12 key_decryptsession F -GLIBC_2.12 key_decryptsession_pk F -GLIBC_2.12 key_encryptsession F -GLIBC_2.12 key_encryptsession_pk F -GLIBC_2.12 key_gendes F -GLIBC_2.12 key_get_conv F -GLIBC_2.12 key_secretkey_is_set F -GLIBC_2.12 key_setnet F -GLIBC_2.12 key_setsecret F -GLIBC_2.12 kill F -GLIBC_2.12 killpg F -GLIBC_2.12 klogctl F -GLIBC_2.12 l64a F -GLIBC_2.12 labs F -GLIBC_2.12 lchmod F -GLIBC_2.12 lchown F -GLIBC_2.12 lckpwdf F -GLIBC_2.12 lcong48 F -GLIBC_2.12 lcong48_r F -GLIBC_2.12 ldexp F -GLIBC_2.12 ldexpf F -GLIBC_2.12 ldexpl F -GLIBC_2.12 ldiv F -GLIBC_2.12 lfind F -GLIBC_2.12 lgetxattr F -GLIBC_2.12 link F -GLIBC_2.12 linkat F -GLIBC_2.12 listen F -GLIBC_2.12 listxattr F -GLIBC_2.12 llabs F -GLIBC_2.12 lldiv F -GLIBC_2.12 llistxattr F -GLIBC_2.12 llseek F -GLIBC_2.12 loc1 D 0x4 -GLIBC_2.12 loc2 D 0x4 -GLIBC_2.12 localeconv F -GLIBC_2.12 localtime F -GLIBC_2.12 localtime_r F -GLIBC_2.12 lockf F -GLIBC_2.12 lockf64 F -GLIBC_2.12 locs D 0x4 -GLIBC_2.12 longjmp F -GLIBC_2.12 lrand48 F -GLIBC_2.12 lrand48_r F -GLIBC_2.12 lremovexattr F -GLIBC_2.12 lsearch F -GLIBC_2.12 lseek F -GLIBC_2.12 lseek64 F -GLIBC_2.12 lsetxattr F -GLIBC_2.12 lutimes F -GLIBC_2.12 madvise F -GLIBC_2.12 makecontext F -GLIBC_2.12 mallinfo F -GLIBC_2.12 malloc F -GLIBC_2.12 malloc_get_state F -GLIBC_2.12 malloc_info F -GLIBC_2.12 malloc_set_state F -GLIBC_2.12 malloc_stats F -GLIBC_2.12 malloc_trim F -GLIBC_2.12 malloc_usable_size F -GLIBC_2.12 mallopt F -GLIBC_2.12 mallwatch D 0x4 -GLIBC_2.12 mblen F -GLIBC_2.12 mbrlen F -GLIBC_2.12 mbrtowc F -GLIBC_2.12 mbsinit F -GLIBC_2.12 mbsnrtowcs F -GLIBC_2.12 mbsrtowcs F -GLIBC_2.12 mbstowcs F -GLIBC_2.12 mbtowc F -GLIBC_2.12 mcheck F -GLIBC_2.12 mcheck_check_all F -GLIBC_2.12 mcheck_pedantic F -GLIBC_2.12 mcount F -GLIBC_2.12 memalign F -GLIBC_2.12 memccpy F -GLIBC_2.12 memchr F -GLIBC_2.12 memcmp F -GLIBC_2.12 memcpy F -GLIBC_2.12 memfrob F -GLIBC_2.12 memmem F -GLIBC_2.12 memmove F -GLIBC_2.12 mempcpy F -GLIBC_2.12 memrchr F -GLIBC_2.12 memset F -GLIBC_2.12 mincore F -GLIBC_2.12 mkdir F -GLIBC_2.12 mkdirat F -GLIBC_2.12 mkdtemp F -GLIBC_2.12 mkfifo F -GLIBC_2.12 mkfifoat F -GLIBC_2.12 mkostemp F -GLIBC_2.12 mkostemp64 F -GLIBC_2.12 mkostemps F -GLIBC_2.12 mkostemps64 F -GLIBC_2.12 mkstemp F -GLIBC_2.12 mkstemp64 F -GLIBC_2.12 mkstemps F -GLIBC_2.12 mkstemps64 F -GLIBC_2.12 mktemp F -GLIBC_2.12 mktime F -GLIBC_2.12 mlock F -GLIBC_2.12 mlockall F -GLIBC_2.12 mmap F -GLIBC_2.12 mmap64 F -GLIBC_2.12 modf F -GLIBC_2.12 modff F -GLIBC_2.12 modfl F -GLIBC_2.12 moncontrol F -GLIBC_2.12 monstartup F -GLIBC_2.12 mount F -GLIBC_2.12 mprobe F -GLIBC_2.12 mprotect F -GLIBC_2.12 mrand48 F -GLIBC_2.12 mrand48_r F -GLIBC_2.12 mremap F -GLIBC_2.12 msgctl F -GLIBC_2.12 msgget F -GLIBC_2.12 msgrcv F -GLIBC_2.12 msgsnd F -GLIBC_2.12 msync F -GLIBC_2.12 mtrace F -GLIBC_2.12 munlock F -GLIBC_2.12 munlockall F -GLIBC_2.12 munmap F -GLIBC_2.12 muntrace F -GLIBC_2.12 nanosleep F -GLIBC_2.12 netname2host F -GLIBC_2.12 netname2user F -GLIBC_2.12 newlocale F -GLIBC_2.12 nfsservctl F -GLIBC_2.12 nftw F -GLIBC_2.12 nftw64 F -GLIBC_2.12 ngettext F -GLIBC_2.12 nice F -GLIBC_2.12 nl_langinfo F -GLIBC_2.12 nl_langinfo_l F -GLIBC_2.12 nrand48 F -GLIBC_2.12 nrand48_r F -GLIBC_2.12 ntohl F -GLIBC_2.12 ntohs F -GLIBC_2.12 ntp_adjtime F -GLIBC_2.12 ntp_gettime F -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 obstack_alloc_failed_handler D 0x4 -GLIBC_2.12 obstack_exit_failure D 0x4 -GLIBC_2.12 obstack_free F -GLIBC_2.12 obstack_printf F -GLIBC_2.12 obstack_vprintf F -GLIBC_2.12 on_exit F -GLIBC_2.12 open F -GLIBC_2.12 open64 F -GLIBC_2.12 open_memstream F -GLIBC_2.12 open_wmemstream F -GLIBC_2.12 openat F -GLIBC_2.12 openat64 F -GLIBC_2.12 opendir F -GLIBC_2.12 openlog F -GLIBC_2.12 optarg D 0x4 -GLIBC_2.12 opterr D 0x4 -GLIBC_2.12 optind D 0x4 -GLIBC_2.12 optopt D 0x4 -GLIBC_2.12 parse_printf_format F -GLIBC_2.12 passwd2des F -GLIBC_2.12 pathconf F -GLIBC_2.12 pause F -GLIBC_2.12 pclose F -GLIBC_2.12 perror F -GLIBC_2.12 personality F -GLIBC_2.12 pipe F -GLIBC_2.12 pipe2 F -GLIBC_2.12 pivot_root F -GLIBC_2.12 pmap_getmaps F -GLIBC_2.12 pmap_getport F -GLIBC_2.12 pmap_rmtcall F -GLIBC_2.12 pmap_set F -GLIBC_2.12 pmap_unset F -GLIBC_2.12 poll F -GLIBC_2.12 popen F -GLIBC_2.12 posix_fadvise F -GLIBC_2.12 posix_fadvise64 F -GLIBC_2.12 posix_fallocate F -GLIBC_2.12 posix_fallocate64 F -GLIBC_2.12 posix_madvise F -GLIBC_2.12 posix_memalign F -GLIBC_2.12 posix_openpt F -GLIBC_2.12 posix_spawn F -GLIBC_2.12 posix_spawn_file_actions_addclose F -GLIBC_2.12 posix_spawn_file_actions_adddup2 F -GLIBC_2.12 posix_spawn_file_actions_addopen F -GLIBC_2.12 posix_spawn_file_actions_destroy F -GLIBC_2.12 posix_spawn_file_actions_init F -GLIBC_2.12 posix_spawnattr_destroy F -GLIBC_2.12 posix_spawnattr_getflags F -GLIBC_2.12 posix_spawnattr_getpgroup F -GLIBC_2.12 posix_spawnattr_getschedparam F -GLIBC_2.12 posix_spawnattr_getschedpolicy F -GLIBC_2.12 posix_spawnattr_getsigdefault F -GLIBC_2.12 posix_spawnattr_getsigmask F -GLIBC_2.12 posix_spawnattr_init F -GLIBC_2.12 posix_spawnattr_setflags F -GLIBC_2.12 posix_spawnattr_setpgroup F -GLIBC_2.12 posix_spawnattr_setschedparam F -GLIBC_2.12 posix_spawnattr_setschedpolicy F -GLIBC_2.12 posix_spawnattr_setsigdefault F -GLIBC_2.12 posix_spawnattr_setsigmask F -GLIBC_2.12 posix_spawnp F -GLIBC_2.12 ppoll F -GLIBC_2.12 prctl F -GLIBC_2.12 pread F -GLIBC_2.12 pread64 F -GLIBC_2.12 preadv F -GLIBC_2.12 preadv64 F -GLIBC_2.12 printf F -GLIBC_2.12 printf_size F -GLIBC_2.12 printf_size_info F -GLIBC_2.12 profil F -GLIBC_2.12 program_invocation_name D 0x4 -GLIBC_2.12 program_invocation_short_name D 0x4 -GLIBC_2.12 pselect F -GLIBC_2.12 psiginfo F -GLIBC_2.12 psignal F -GLIBC_2.12 pthread_attr_destroy F -GLIBC_2.12 pthread_attr_getdetachstate F -GLIBC_2.12 pthread_attr_getinheritsched F -GLIBC_2.12 pthread_attr_getschedparam F -GLIBC_2.12 pthread_attr_getschedpolicy F -GLIBC_2.12 pthread_attr_getscope F -GLIBC_2.12 pthread_attr_init F -GLIBC_2.12 pthread_attr_setdetachstate F -GLIBC_2.12 pthread_attr_setinheritsched F -GLIBC_2.12 pthread_attr_setschedparam F -GLIBC_2.12 pthread_attr_setschedpolicy F -GLIBC_2.12 pthread_attr_setscope F -GLIBC_2.12 pthread_cond_broadcast F -GLIBC_2.12 pthread_cond_destroy F -GLIBC_2.12 pthread_cond_init F -GLIBC_2.12 pthread_cond_signal F -GLIBC_2.12 pthread_cond_timedwait F -GLIBC_2.12 pthread_cond_wait F -GLIBC_2.12 pthread_condattr_destroy F -GLIBC_2.12 pthread_condattr_init F -GLIBC_2.12 pthread_equal F -GLIBC_2.12 pthread_exit F -GLIBC_2.12 pthread_getschedparam F -GLIBC_2.12 pthread_mutex_destroy F -GLIBC_2.12 pthread_mutex_init F -GLIBC_2.12 pthread_mutex_lock F -GLIBC_2.12 pthread_mutex_unlock F -GLIBC_2.12 pthread_self F -GLIBC_2.12 pthread_setcancelstate F -GLIBC_2.12 pthread_setcanceltype F -GLIBC_2.12 pthread_setschedparam F -GLIBC_2.12 ptrace F -GLIBC_2.12 ptsname F -GLIBC_2.12 ptsname_r F -GLIBC_2.12 putc F -GLIBC_2.12 putc_unlocked F -GLIBC_2.12 putchar F -GLIBC_2.12 putchar_unlocked F -GLIBC_2.12 putenv F -GLIBC_2.12 putgrent F -GLIBC_2.12 putmsg F -GLIBC_2.12 putpmsg F -GLIBC_2.12 putpwent F -GLIBC_2.12 puts F -GLIBC_2.12 putsgent F -GLIBC_2.12 putspent F -GLIBC_2.12 pututline F -GLIBC_2.12 pututxline F -GLIBC_2.12 putw F -GLIBC_2.12 putwc F -GLIBC_2.12 putwc_unlocked F -GLIBC_2.12 putwchar F -GLIBC_2.12 putwchar_unlocked F -GLIBC_2.12 pvalloc F -GLIBC_2.12 pwrite F -GLIBC_2.12 pwrite64 F -GLIBC_2.12 pwritev F -GLIBC_2.12 pwritev64 F -GLIBC_2.12 qecvt F -GLIBC_2.12 qecvt_r F -GLIBC_2.12 qfcvt F -GLIBC_2.12 qfcvt_r F -GLIBC_2.12 qgcvt F -GLIBC_2.12 qsort F -GLIBC_2.12 qsort_r F -GLIBC_2.12 query_module F -GLIBC_2.12 quick_exit F -GLIBC_2.12 quotactl F -GLIBC_2.12 raise F -GLIBC_2.12 rand F -GLIBC_2.12 rand_r F -GLIBC_2.12 random F -GLIBC_2.12 random_r F -GLIBC_2.12 rawmemchr F -GLIBC_2.12 rcmd F -GLIBC_2.12 rcmd_af F -GLIBC_2.12 re_comp F -GLIBC_2.12 re_compile_fastmap F -GLIBC_2.12 re_compile_pattern F -GLIBC_2.12 re_exec F -GLIBC_2.12 re_match F -GLIBC_2.12 re_match_2 F -GLIBC_2.12 re_search F -GLIBC_2.12 re_search_2 F -GLIBC_2.12 re_set_registers F -GLIBC_2.12 re_set_syntax F -GLIBC_2.12 re_syntax_options D 0x4 -GLIBC_2.12 read F -GLIBC_2.12 readahead F -GLIBC_2.12 readdir F -GLIBC_2.12 readdir64 F -GLIBC_2.12 readdir64_r F -GLIBC_2.12 readdir_r F -GLIBC_2.12 readlink F -GLIBC_2.12 readlinkat F -GLIBC_2.12 readv F -GLIBC_2.12 realloc F -GLIBC_2.12 realpath F -GLIBC_2.12 reboot F -GLIBC_2.12 recv F -GLIBC_2.12 recvfrom F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 recvmsg F -GLIBC_2.12 regcomp F -GLIBC_2.12 regerror F -GLIBC_2.12 regexec F -GLIBC_2.12 regfree F -GLIBC_2.12 register_printf_function F -GLIBC_2.12 register_printf_modifier F -GLIBC_2.12 register_printf_specifier F -GLIBC_2.12 register_printf_type F -GLIBC_2.12 registerrpc F -GLIBC_2.12 remap_file_pages F -GLIBC_2.12 remove F -GLIBC_2.12 removexattr F -GLIBC_2.12 remque F -GLIBC_2.12 rename F -GLIBC_2.12 renameat F -GLIBC_2.12 revoke F -GLIBC_2.12 rewind F -GLIBC_2.12 rewinddir F -GLIBC_2.12 rexec F -GLIBC_2.12 rexec_af F -GLIBC_2.12 rexecoptions D 0x4 -GLIBC_2.12 rindex F -GLIBC_2.12 rmdir F -GLIBC_2.12 rpc_createerr D 0x10 -GLIBC_2.12 rpmatch F -GLIBC_2.12 rresvport F -GLIBC_2.12 rresvport_af F -GLIBC_2.12 rtime F -GLIBC_2.12 ruserok F -GLIBC_2.12 ruserok_af F -GLIBC_2.12 ruserpass F -GLIBC_2.12 sbrk F -GLIBC_2.12 scalbn F -GLIBC_2.12 scalbnf F -GLIBC_2.12 scalbnl F -GLIBC_2.12 scandir F -GLIBC_2.12 scandir64 F -GLIBC_2.12 scanf F -GLIBC_2.12 sched_get_priority_max F -GLIBC_2.12 sched_get_priority_min F -GLIBC_2.12 sched_getaffinity F -GLIBC_2.12 sched_getcpu F -GLIBC_2.12 sched_getparam F -GLIBC_2.12 sched_getscheduler F -GLIBC_2.12 sched_rr_get_interval F -GLIBC_2.12 sched_setaffinity F -GLIBC_2.12 sched_setparam F -GLIBC_2.12 sched_setscheduler F -GLIBC_2.12 sched_yield F -GLIBC_2.12 seed48 F -GLIBC_2.12 seed48_r F -GLIBC_2.12 seekdir F -GLIBC_2.12 select F -GLIBC_2.12 semctl F -GLIBC_2.12 semget F -GLIBC_2.12 semop F -GLIBC_2.12 semtimedop F -GLIBC_2.12 send F -GLIBC_2.12 sendfile F -GLIBC_2.12 sendfile64 F -GLIBC_2.12 sendmsg F -GLIBC_2.12 sendto F -GLIBC_2.12 set_dataplane F -GLIBC_2.12 setaliasent F -GLIBC_2.12 setbuf F -GLIBC_2.12 setbuffer F -GLIBC_2.12 setcontext F -GLIBC_2.12 setdomainname F -GLIBC_2.12 setegid F -GLIBC_2.12 setenv F -GLIBC_2.12 seteuid F -GLIBC_2.12 setfsent F -GLIBC_2.12 setfsgid F -GLIBC_2.12 setfsuid F -GLIBC_2.12 setgid F -GLIBC_2.12 setgrent F -GLIBC_2.12 setgroups F -GLIBC_2.12 sethostent F -GLIBC_2.12 sethostid F -GLIBC_2.12 sethostname F -GLIBC_2.12 setipv4sourcefilter F -GLIBC_2.12 setitimer F -GLIBC_2.12 setjmp F -GLIBC_2.12 setlinebuf F -GLIBC_2.12 setlocale F -GLIBC_2.12 setlogin F -GLIBC_2.12 setlogmask F -GLIBC_2.12 setmntent F -GLIBC_2.12 setnetent F -GLIBC_2.12 setnetgrent F -GLIBC_2.12 setpgid F -GLIBC_2.12 setpgrp F -GLIBC_2.12 setpriority F -GLIBC_2.12 setprotoent F -GLIBC_2.12 setpwent F -GLIBC_2.12 setregid F -GLIBC_2.12 setresgid F -GLIBC_2.12 setresuid F -GLIBC_2.12 setreuid F -GLIBC_2.12 setrlimit F -GLIBC_2.12 setrlimit64 F -GLIBC_2.12 setrpcent F -GLIBC_2.12 setservent F -GLIBC_2.12 setsgent F -GLIBC_2.12 setsid F -GLIBC_2.12 setsockopt F -GLIBC_2.12 setsourcefilter F -GLIBC_2.12 setspent F -GLIBC_2.12 setstate F -GLIBC_2.12 setstate_r F -GLIBC_2.12 settimeofday F -GLIBC_2.12 setttyent F -GLIBC_2.12 setuid F -GLIBC_2.12 setusershell F -GLIBC_2.12 setutent F -GLIBC_2.12 setutxent F -GLIBC_2.12 setvbuf F -GLIBC_2.12 setxattr F -GLIBC_2.12 sgetsgent F -GLIBC_2.12 sgetsgent_r F -GLIBC_2.12 sgetspent F -GLIBC_2.12 sgetspent_r F -GLIBC_2.12 shmat F -GLIBC_2.12 shmctl F -GLIBC_2.12 shmdt F -GLIBC_2.12 shmget F -GLIBC_2.12 shutdown F -GLIBC_2.12 sigaction F -GLIBC_2.12 sigaddset F -GLIBC_2.12 sigaltstack F -GLIBC_2.12 sigandset F -GLIBC_2.12 sigblock F -GLIBC_2.12 sigdelset F -GLIBC_2.12 sigemptyset F -GLIBC_2.12 sigfillset F -GLIBC_2.12 siggetmask F -GLIBC_2.12 sighold F -GLIBC_2.12 sigignore F -GLIBC_2.12 siginterrupt F -GLIBC_2.12 sigisemptyset F -GLIBC_2.12 sigismember F -GLIBC_2.12 siglongjmp F -GLIBC_2.12 signal F -GLIBC_2.12 signalfd F -GLIBC_2.12 sigorset F -GLIBC_2.12 sigpause F -GLIBC_2.12 sigpending F -GLIBC_2.12 sigprocmask F -GLIBC_2.12 sigqueue F -GLIBC_2.12 sigrelse F -GLIBC_2.12 sigreturn F -GLIBC_2.12 sigset F -GLIBC_2.12 sigsetmask F -GLIBC_2.12 sigstack F -GLIBC_2.12 sigsuspend F -GLIBC_2.12 sigtimedwait F -GLIBC_2.12 sigvec F -GLIBC_2.12 sigwait F -GLIBC_2.12 sigwaitinfo F -GLIBC_2.12 sleep F -GLIBC_2.12 snprintf F -GLIBC_2.12 sockatmark F -GLIBC_2.12 socket F -GLIBC_2.12 socketpair F -GLIBC_2.12 splice F -GLIBC_2.12 sprintf F -GLIBC_2.12 sprofil F -GLIBC_2.12 srand F -GLIBC_2.12 srand48 F -GLIBC_2.12 srand48_r F -GLIBC_2.12 srandom F -GLIBC_2.12 srandom_r F -GLIBC_2.12 sscanf F -GLIBC_2.12 ssignal F -GLIBC_2.12 sstk F -GLIBC_2.12 statfs F -GLIBC_2.12 statfs64 F -GLIBC_2.12 statvfs F -GLIBC_2.12 statvfs64 F -GLIBC_2.12 stderr D 0x4 -GLIBC_2.12 stdin D 0x4 -GLIBC_2.12 stdout D 0x4 -GLIBC_2.12 step F -GLIBC_2.12 stime F -GLIBC_2.12 stpcpy F -GLIBC_2.12 stpncpy F -GLIBC_2.12 strcasecmp F -GLIBC_2.12 strcasecmp_l F -GLIBC_2.12 strcasestr F -GLIBC_2.12 strcat F -GLIBC_2.12 strchr F -GLIBC_2.12 strchrnul F -GLIBC_2.12 strcmp F -GLIBC_2.12 strcoll F -GLIBC_2.12 strcoll_l F -GLIBC_2.12 strcpy F -GLIBC_2.12 strcspn F -GLIBC_2.12 strdup F -GLIBC_2.12 strerror F -GLIBC_2.12 strerror_l F -GLIBC_2.12 strerror_r F -GLIBC_2.12 strfmon F -GLIBC_2.12 strfmon_l F -GLIBC_2.12 strfry F -GLIBC_2.12 strftime F -GLIBC_2.12 strftime_l F -GLIBC_2.12 strlen F -GLIBC_2.12 strncasecmp F -GLIBC_2.12 strncasecmp_l F -GLIBC_2.12 strncat F -GLIBC_2.12 strncmp F -GLIBC_2.12 strncpy F -GLIBC_2.12 strndup F -GLIBC_2.12 strnlen F -GLIBC_2.12 strpbrk F -GLIBC_2.12 strptime F -GLIBC_2.12 strptime_l F -GLIBC_2.12 strrchr F -GLIBC_2.12 strsep F -GLIBC_2.12 strsignal F -GLIBC_2.12 strspn F -GLIBC_2.12 strstr F -GLIBC_2.12 strtod F -GLIBC_2.12 strtod_l F -GLIBC_2.12 strtof F -GLIBC_2.12 strtof_l F -GLIBC_2.12 strtoimax F -GLIBC_2.12 strtok F -GLIBC_2.12 strtok_r F -GLIBC_2.12 strtol F -GLIBC_2.12 strtol_l F -GLIBC_2.12 strtold F -GLIBC_2.12 strtold_l F -GLIBC_2.12 strtoll F -GLIBC_2.12 strtoll_l F -GLIBC_2.12 strtoq F -GLIBC_2.12 strtoul F -GLIBC_2.12 strtoul_l F -GLIBC_2.12 strtoull F -GLIBC_2.12 strtoull_l F -GLIBC_2.12 strtoumax F -GLIBC_2.12 strtouq F -GLIBC_2.12 strverscmp F -GLIBC_2.12 strxfrm F -GLIBC_2.12 strxfrm_l F -GLIBC_2.12 stty F -GLIBC_2.12 svc_exit F -GLIBC_2.12 svc_fdset D 0x80 -GLIBC_2.12 svc_getreq F -GLIBC_2.12 svc_getreq_common F -GLIBC_2.12 svc_getreq_poll F -GLIBC_2.12 svc_getreqset F -GLIBC_2.12 svc_max_pollfd D 0x4 -GLIBC_2.12 svc_pollfd D 0x4 -GLIBC_2.12 svc_register F -GLIBC_2.12 svc_run F -GLIBC_2.12 svc_sendreply F -GLIBC_2.12 svc_unregister F -GLIBC_2.12 svcauthdes_stats D 0xc -GLIBC_2.12 svcerr_auth F -GLIBC_2.12 svcerr_decode F -GLIBC_2.12 svcerr_noproc F -GLIBC_2.12 svcerr_noprog F -GLIBC_2.12 svcerr_progvers F -GLIBC_2.12 svcerr_systemerr F -GLIBC_2.12 svcerr_weakauth F -GLIBC_2.12 svcfd_create F -GLIBC_2.12 svcraw_create F -GLIBC_2.12 svctcp_create F -GLIBC_2.12 svcudp_bufcreate F -GLIBC_2.12 svcudp_create F -GLIBC_2.12 svcudp_enablecache F -GLIBC_2.12 svcunix_create F -GLIBC_2.12 svcunixfd_create F -GLIBC_2.12 swab F -GLIBC_2.12 swapcontext F -GLIBC_2.12 swapoff F -GLIBC_2.12 swapon F -GLIBC_2.12 swprintf F -GLIBC_2.12 swscanf F -GLIBC_2.12 symlink F -GLIBC_2.12 symlinkat F -GLIBC_2.12 sync F -GLIBC_2.12 sync_file_range F -GLIBC_2.12 sys_errlist D 0x21c -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.12 sys_sigabbrev D 0x104 -GLIBC_2.12 sys_siglist D 0x104 -GLIBC_2.12 syscall F -GLIBC_2.12 sysconf F -GLIBC_2.12 sysctl F -GLIBC_2.12 sysinfo F -GLIBC_2.12 syslog F -GLIBC_2.12 system F -GLIBC_2.12 sysv_signal F -GLIBC_2.12 tcdrain F -GLIBC_2.12 tcflow F -GLIBC_2.12 tcflush F -GLIBC_2.12 tcgetattr F -GLIBC_2.12 tcgetpgrp F -GLIBC_2.12 tcgetsid F -GLIBC_2.12 tcsendbreak F -GLIBC_2.12 tcsetattr F -GLIBC_2.12 tcsetpgrp F -GLIBC_2.12 tdelete F -GLIBC_2.12 tdestroy F -GLIBC_2.12 tee F -GLIBC_2.12 telldir F -GLIBC_2.12 tempnam F -GLIBC_2.12 textdomain F -GLIBC_2.12 tfind F -GLIBC_2.12 time F -GLIBC_2.12 timegm F -GLIBC_2.12 timelocal F -GLIBC_2.12 timerfd_create F -GLIBC_2.12 timerfd_gettime F -GLIBC_2.12 timerfd_settime F -GLIBC_2.12 times F -GLIBC_2.12 timezone D 0x4 -GLIBC_2.12 tmpfile F -GLIBC_2.12 tmpfile64 F -GLIBC_2.12 tmpnam F -GLIBC_2.12 tmpnam_r F -GLIBC_2.12 toascii F -GLIBC_2.12 tolower F -GLIBC_2.12 tolower_l F -GLIBC_2.12 toupper F -GLIBC_2.12 toupper_l F -GLIBC_2.12 towctrans F -GLIBC_2.12 towctrans_l F -GLIBC_2.12 towlower F -GLIBC_2.12 towlower_l F -GLIBC_2.12 towupper F -GLIBC_2.12 towupper_l F -GLIBC_2.12 tr_break F -GLIBC_2.12 truncate F -GLIBC_2.12 truncate64 F -GLIBC_2.12 tsearch F -GLIBC_2.12 ttyname F -GLIBC_2.12 ttyname_r F -GLIBC_2.12 ttyslot F -GLIBC_2.12 twalk F -GLIBC_2.12 tzname D 0x8 -GLIBC_2.12 tzset F -GLIBC_2.12 ualarm F -GLIBC_2.12 ulckpwdf F -GLIBC_2.12 ulimit F -GLIBC_2.12 umask F -GLIBC_2.12 umount F -GLIBC_2.12 umount2 F -GLIBC_2.12 uname F -GLIBC_2.12 ungetc F -GLIBC_2.12 ungetwc F -GLIBC_2.12 unlink F -GLIBC_2.12 unlinkat F -GLIBC_2.12 unlockpt F -GLIBC_2.12 unsetenv F -GLIBC_2.12 unshare F -GLIBC_2.12 updwtmp F -GLIBC_2.12 updwtmpx F -GLIBC_2.12 uselib F -GLIBC_2.12 uselocale F -GLIBC_2.12 user2netname F -GLIBC_2.12 usleep F -GLIBC_2.12 ustat F -GLIBC_2.12 utime F -GLIBC_2.12 utimensat F -GLIBC_2.12 utimes F -GLIBC_2.12 utmpname F -GLIBC_2.12 utmpxname F -GLIBC_2.12 valloc F -GLIBC_2.12 vasprintf F -GLIBC_2.12 vdprintf F -GLIBC_2.12 verr F -GLIBC_2.12 verrx F -GLIBC_2.12 versionsort F -GLIBC_2.12 versionsort64 F -GLIBC_2.12 vfork F -GLIBC_2.12 vfprintf F -GLIBC_2.12 vfscanf F -GLIBC_2.12 vfwprintf F -GLIBC_2.12 vfwscanf F -GLIBC_2.12 vhangup F -GLIBC_2.12 vlimit F -GLIBC_2.12 vmsplice F -GLIBC_2.12 vprintf F -GLIBC_2.12 vscanf F -GLIBC_2.12 vsnprintf F -GLIBC_2.12 vsprintf F -GLIBC_2.12 vsscanf F -GLIBC_2.12 vswprintf F -GLIBC_2.12 vswscanf F -GLIBC_2.12 vsyslog F -GLIBC_2.12 vtimes F -GLIBC_2.12 vwarn F -GLIBC_2.12 vwarnx F -GLIBC_2.12 vwprintf F -GLIBC_2.12 vwscanf F -GLIBC_2.12 wait F -GLIBC_2.12 wait3 F -GLIBC_2.12 wait4 F -GLIBC_2.12 waitid F -GLIBC_2.12 waitpid F -GLIBC_2.12 warn F -GLIBC_2.12 warnx F -GLIBC_2.12 wcpcpy F -GLIBC_2.12 wcpncpy F -GLIBC_2.12 wcrtomb F -GLIBC_2.12 wcscasecmp F -GLIBC_2.12 wcscasecmp_l F -GLIBC_2.12 wcscat F -GLIBC_2.12 wcschr F -GLIBC_2.12 wcschrnul F -GLIBC_2.12 wcscmp F -GLIBC_2.12 wcscoll F -GLIBC_2.12 wcscoll_l F -GLIBC_2.12 wcscpy F -GLIBC_2.12 wcscspn F -GLIBC_2.12 wcsdup F -GLIBC_2.12 wcsftime F -GLIBC_2.12 wcsftime_l F -GLIBC_2.12 wcslen F -GLIBC_2.12 wcsncasecmp F -GLIBC_2.12 wcsncasecmp_l F -GLIBC_2.12 wcsncat F -GLIBC_2.12 wcsncmp F -GLIBC_2.12 wcsncpy F -GLIBC_2.12 wcsnlen F -GLIBC_2.12 wcsnrtombs F -GLIBC_2.12 wcspbrk F -GLIBC_2.12 wcsrchr F -GLIBC_2.12 wcsrtombs F -GLIBC_2.12 wcsspn F -GLIBC_2.12 wcsstr F -GLIBC_2.12 wcstod F -GLIBC_2.12 wcstod_l F -GLIBC_2.12 wcstof F -GLIBC_2.12 wcstof_l F -GLIBC_2.12 wcstoimax F -GLIBC_2.12 wcstok F -GLIBC_2.12 wcstol F -GLIBC_2.12 wcstol_l F -GLIBC_2.12 wcstold F -GLIBC_2.12 wcstold_l F -GLIBC_2.12 wcstoll F -GLIBC_2.12 wcstoll_l F -GLIBC_2.12 wcstombs F -GLIBC_2.12 wcstoq F -GLIBC_2.12 wcstoul F -GLIBC_2.12 wcstoul_l F -GLIBC_2.12 wcstoull F -GLIBC_2.12 wcstoull_l F -GLIBC_2.12 wcstoumax F -GLIBC_2.12 wcstouq F -GLIBC_2.12 wcswcs F -GLIBC_2.12 wcswidth F -GLIBC_2.12 wcsxfrm F -GLIBC_2.12 wcsxfrm_l F -GLIBC_2.12 wctob F -GLIBC_2.12 wctomb F -GLIBC_2.12 wctrans F -GLIBC_2.12 wctrans_l F -GLIBC_2.12 wctype F -GLIBC_2.12 wctype_l F -GLIBC_2.12 wcwidth F -GLIBC_2.12 wmemchr F -GLIBC_2.12 wmemcmp F -GLIBC_2.12 wmemcpy F -GLIBC_2.12 wmemmove F -GLIBC_2.12 wmempcpy F -GLIBC_2.12 wmemset F -GLIBC_2.12 wordexp F -GLIBC_2.12 wordfree F -GLIBC_2.12 wprintf F -GLIBC_2.12 write F -GLIBC_2.12 writev F -GLIBC_2.12 wscanf F -GLIBC_2.12 xdecrypt F -GLIBC_2.12 xdr_accepted_reply F -GLIBC_2.12 xdr_array F -GLIBC_2.12 xdr_authdes_cred F -GLIBC_2.12 xdr_authdes_verf F -GLIBC_2.12 xdr_authunix_parms F -GLIBC_2.12 xdr_bool F -GLIBC_2.12 xdr_bytes F -GLIBC_2.12 xdr_callhdr F -GLIBC_2.12 xdr_callmsg F -GLIBC_2.12 xdr_char F -GLIBC_2.12 xdr_cryptkeyarg F -GLIBC_2.12 xdr_cryptkeyarg2 F -GLIBC_2.12 xdr_cryptkeyres F -GLIBC_2.12 xdr_des_block F -GLIBC_2.12 xdr_double F -GLIBC_2.12 xdr_enum F -GLIBC_2.12 xdr_float F -GLIBC_2.12 xdr_free F -GLIBC_2.12 xdr_getcredres F -GLIBC_2.12 xdr_hyper F -GLIBC_2.12 xdr_int F -GLIBC_2.12 xdr_int16_t F -GLIBC_2.12 xdr_int32_t F -GLIBC_2.12 xdr_int64_t F -GLIBC_2.12 xdr_int8_t F -GLIBC_2.12 xdr_key_netstarg F -GLIBC_2.12 xdr_key_netstres F -GLIBC_2.12 xdr_keybuf F -GLIBC_2.12 xdr_keystatus F -GLIBC_2.12 xdr_long F -GLIBC_2.12 xdr_longlong_t F -GLIBC_2.12 xdr_netnamestr F -GLIBC_2.12 xdr_netobj F -GLIBC_2.12 xdr_opaque F -GLIBC_2.12 xdr_opaque_auth F -GLIBC_2.12 xdr_pmap F -GLIBC_2.12 xdr_pmaplist F -GLIBC_2.12 xdr_pointer F -GLIBC_2.12 xdr_quad_t F -GLIBC_2.12 xdr_reference F -GLIBC_2.12 xdr_rejected_reply F -GLIBC_2.12 xdr_replymsg F -GLIBC_2.12 xdr_rmtcall_args F -GLIBC_2.12 xdr_rmtcallres F -GLIBC_2.12 xdr_short F -GLIBC_2.12 xdr_sizeof F -GLIBC_2.12 xdr_string F -GLIBC_2.12 xdr_u_char F -GLIBC_2.12 xdr_u_hyper F -GLIBC_2.12 xdr_u_int F -GLIBC_2.12 xdr_u_long F -GLIBC_2.12 xdr_u_longlong_t F -GLIBC_2.12 xdr_u_quad_t F -GLIBC_2.12 xdr_u_short F -GLIBC_2.12 xdr_uint16_t F -GLIBC_2.12 xdr_uint32_t F -GLIBC_2.12 xdr_uint64_t F -GLIBC_2.12 xdr_uint8_t F -GLIBC_2.12 xdr_union F -GLIBC_2.12 xdr_unixcred F -GLIBC_2.12 xdr_vector F -GLIBC_2.12 xdr_void F -GLIBC_2.12 xdr_wrapstring F -GLIBC_2.12 xdrmem_create F -GLIBC_2.12 xdrrec_create F -GLIBC_2.12 xdrrec_endofrecord F -GLIBC_2.12 xdrrec_eof F -GLIBC_2.12 xdrrec_skiprecord F -GLIBC_2.12 xdrstdio_create F -GLIBC_2.12 xencrypt F -GLIBC_2.12 xprt_register F -GLIBC_2.12 xprt_unregister F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 clock_adjtime F -GLIBC_2.15 fanotify_init F -GLIBC_2.15 fanotify_mark F -GLIBC_2.15 name_to_handle_at F -GLIBC_2.15 open_by_handle_at F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 prlimit F -GLIBC_2.15 prlimit64 F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.15 sendmmsg F -GLIBC_2.15 setns F -GLIBC_2.15 syncfs F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libcrypt.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libcrypt.abilist deleted file mode 100644 index d5643802b7..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 crypt F -GLIBC_2.12 crypt_r F -GLIBC_2.12 encrypt F -GLIBC_2.12 encrypt_r F -GLIBC_2.12 fcrypt F -GLIBC_2.12 setkey F -GLIBC_2.12 setkey_r F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libdl.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libdl.abilist deleted file mode 100644 index cabc30c239..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libdl.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 dladdr F -GLIBC_2.12 dladdr1 F -GLIBC_2.12 dlclose F -GLIBC_2.12 dlerror F -GLIBC_2.12 dlinfo F -GLIBC_2.12 dlmopen F -GLIBC_2.12 dlopen F -GLIBC_2.12 dlsym F -GLIBC_2.12 dlvsym F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist deleted file mode 100644 index 0059c27fa2..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist +++ /dev/null @@ -1,431 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _LIB_VERSION D 0x4 -GLIBC_2.12 __clog10 F -GLIBC_2.12 __clog10f F -GLIBC_2.12 __clog10l F -GLIBC_2.12 __finite F -GLIBC_2.12 __finitef F -GLIBC_2.12 __fpclassify F -GLIBC_2.12 __fpclassifyf F -GLIBC_2.12 __signbit F -GLIBC_2.12 __signbitf F -GLIBC_2.12 acos F -GLIBC_2.12 acosf F -GLIBC_2.12 acosh F -GLIBC_2.12 acoshf F -GLIBC_2.12 acoshl F -GLIBC_2.12 acosl F -GLIBC_2.12 asin F -GLIBC_2.12 asinf F -GLIBC_2.12 asinh F -GLIBC_2.12 asinhf F -GLIBC_2.12 asinhl F -GLIBC_2.12 asinl F -GLIBC_2.12 atan F -GLIBC_2.12 atan2 F -GLIBC_2.12 atan2f F -GLIBC_2.12 atan2l F -GLIBC_2.12 atanf F -GLIBC_2.12 atanh F -GLIBC_2.12 atanhf F -GLIBC_2.12 atanhl F -GLIBC_2.12 atanl F -GLIBC_2.12 cabs F -GLIBC_2.12 cabsf F -GLIBC_2.12 cabsl F -GLIBC_2.12 cacos F -GLIBC_2.12 cacosf F -GLIBC_2.12 cacosh F -GLIBC_2.12 cacoshf F -GLIBC_2.12 cacoshl F -GLIBC_2.12 cacosl F -GLIBC_2.12 carg F -GLIBC_2.12 cargf F -GLIBC_2.12 cargl F -GLIBC_2.12 casin F -GLIBC_2.12 casinf F -GLIBC_2.12 casinh F -GLIBC_2.12 casinhf F -GLIBC_2.12 casinhl F -GLIBC_2.12 casinl F -GLIBC_2.12 catan F -GLIBC_2.12 catanf F -GLIBC_2.12 catanh F -GLIBC_2.12 catanhf F -GLIBC_2.12 catanhl F -GLIBC_2.12 catanl F -GLIBC_2.12 cbrt F -GLIBC_2.12 cbrtf F -GLIBC_2.12 cbrtl F -GLIBC_2.12 ccos F -GLIBC_2.12 ccosf F -GLIBC_2.12 ccosh F -GLIBC_2.12 ccoshf F -GLIBC_2.12 ccoshl F -GLIBC_2.12 ccosl F -GLIBC_2.12 ceil F -GLIBC_2.12 ceilf F -GLIBC_2.12 ceill F -GLIBC_2.12 cexp F -GLIBC_2.12 cexpf F -GLIBC_2.12 cexpl F -GLIBC_2.12 cimag F -GLIBC_2.12 cimagf F -GLIBC_2.12 cimagl F -GLIBC_2.12 clog F -GLIBC_2.12 clog10 F -GLIBC_2.12 clog10f F -GLIBC_2.12 clog10l F -GLIBC_2.12 clogf F -GLIBC_2.12 clogl F -GLIBC_2.12 conj F -GLIBC_2.12 conjf F -GLIBC_2.12 conjl F -GLIBC_2.12 copysign F -GLIBC_2.12 copysignf F -GLIBC_2.12 copysignl F -GLIBC_2.12 cos F -GLIBC_2.12 cosf F -GLIBC_2.12 cosh F -GLIBC_2.12 coshf F -GLIBC_2.12 coshl F -GLIBC_2.12 cosl F -GLIBC_2.12 cpow F -GLIBC_2.12 cpowf F -GLIBC_2.12 cpowl F -GLIBC_2.12 cproj F -GLIBC_2.12 cprojf F -GLIBC_2.12 cprojl F -GLIBC_2.12 creal F -GLIBC_2.12 crealf F -GLIBC_2.12 creall F -GLIBC_2.12 csin F -GLIBC_2.12 csinf F -GLIBC_2.12 csinh F -GLIBC_2.12 csinhf F -GLIBC_2.12 csinhl F -GLIBC_2.12 csinl F -GLIBC_2.12 csqrt F -GLIBC_2.12 csqrtf F -GLIBC_2.12 csqrtl F -GLIBC_2.12 ctan F -GLIBC_2.12 ctanf F -GLIBC_2.12 ctanh F -GLIBC_2.12 ctanhf F -GLIBC_2.12 ctanhl F -GLIBC_2.12 ctanl F -GLIBC_2.12 drem F -GLIBC_2.12 dremf F -GLIBC_2.12 dreml F -GLIBC_2.12 erf F -GLIBC_2.12 erfc F -GLIBC_2.12 erfcf F -GLIBC_2.12 erfcl F -GLIBC_2.12 erff F -GLIBC_2.12 erfl F -GLIBC_2.12 exp F -GLIBC_2.12 exp10 F -GLIBC_2.12 exp10f F -GLIBC_2.12 exp10l F -GLIBC_2.12 exp2 F -GLIBC_2.12 exp2f F -GLIBC_2.12 exp2l F -GLIBC_2.12 expf F -GLIBC_2.12 expl F -GLIBC_2.12 expm1 F -GLIBC_2.12 expm1f F -GLIBC_2.12 expm1l F -GLIBC_2.12 fabs F -GLIBC_2.12 fabsf F -GLIBC_2.12 fabsl F -GLIBC_2.12 fdim F -GLIBC_2.12 fdimf F -GLIBC_2.12 fdiml F -GLIBC_2.12 feclearexcept F -GLIBC_2.12 fedisableexcept F -GLIBC_2.12 feenableexcept F -GLIBC_2.12 fegetenv F -GLIBC_2.12 fegetexcept F -GLIBC_2.12 fegetexceptflag F -GLIBC_2.12 fegetround F -GLIBC_2.12 feholdexcept F -GLIBC_2.12 feraiseexcept F -GLIBC_2.12 fesetenv F -GLIBC_2.12 fesetexceptflag F -GLIBC_2.12 fesetround F -GLIBC_2.12 fetestexcept F -GLIBC_2.12 feupdateenv F -GLIBC_2.12 finite F -GLIBC_2.12 finitef F -GLIBC_2.12 finitel F -GLIBC_2.12 floor F -GLIBC_2.12 floorf F -GLIBC_2.12 floorl F -GLIBC_2.12 fma F -GLIBC_2.12 fmaf F -GLIBC_2.12 fmal F -GLIBC_2.12 fmax F -GLIBC_2.12 fmaxf F -GLIBC_2.12 fmaxl F -GLIBC_2.12 fmin F -GLIBC_2.12 fminf F -GLIBC_2.12 fminl F -GLIBC_2.12 fmod F -GLIBC_2.12 fmodf F -GLIBC_2.12 fmodl F -GLIBC_2.12 frexp F -GLIBC_2.12 frexpf F -GLIBC_2.12 frexpl F -GLIBC_2.12 gamma F -GLIBC_2.12 gammaf F -GLIBC_2.12 gammal F -GLIBC_2.12 hypot F -GLIBC_2.12 hypotf F -GLIBC_2.12 hypotl F -GLIBC_2.12 ilogb F -GLIBC_2.12 ilogbf F -GLIBC_2.12 ilogbl F -GLIBC_2.12 j0 F -GLIBC_2.12 j0f F -GLIBC_2.12 j0l F -GLIBC_2.12 j1 F -GLIBC_2.12 j1f F -GLIBC_2.12 j1l F -GLIBC_2.12 jn F -GLIBC_2.12 jnf F -GLIBC_2.12 jnl F -GLIBC_2.12 ldexp F -GLIBC_2.12 ldexpf F -GLIBC_2.12 ldexpl F -GLIBC_2.12 lgamma F -GLIBC_2.12 lgamma_r F -GLIBC_2.12 lgammaf F -GLIBC_2.12 lgammaf_r F -GLIBC_2.12 lgammal F -GLIBC_2.12 lgammal_r F -GLIBC_2.12 llrint F -GLIBC_2.12 llrintf F -GLIBC_2.12 llrintl F -GLIBC_2.12 llround F -GLIBC_2.12 llroundf F -GLIBC_2.12 llroundl F -GLIBC_2.12 log F -GLIBC_2.12 log10 F -GLIBC_2.12 log10f F -GLIBC_2.12 log10l F -GLIBC_2.12 log1p F -GLIBC_2.12 log1pf F -GLIBC_2.12 log1pl F -GLIBC_2.12 log2 F -GLIBC_2.12 log2f F -GLIBC_2.12 log2l F -GLIBC_2.12 logb F -GLIBC_2.12 logbf F -GLIBC_2.12 logbl F -GLIBC_2.12 logf F -GLIBC_2.12 logl F -GLIBC_2.12 lrint F -GLIBC_2.12 lrintf F -GLIBC_2.12 lrintl F -GLIBC_2.12 lround F -GLIBC_2.12 lroundf F -GLIBC_2.12 lroundl F -GLIBC_2.12 matherr F -GLIBC_2.12 modf F -GLIBC_2.12 modff F -GLIBC_2.12 modfl F -GLIBC_2.12 nan F -GLIBC_2.12 nanf F -GLIBC_2.12 nanl F -GLIBC_2.12 nearbyint F -GLIBC_2.12 nearbyintf F -GLIBC_2.12 nearbyintl F -GLIBC_2.12 nextafter F -GLIBC_2.12 nextafterf F -GLIBC_2.12 nextafterl F -GLIBC_2.12 nexttoward F -GLIBC_2.12 nexttowardf F -GLIBC_2.12 nexttowardl F -GLIBC_2.12 pow F -GLIBC_2.12 pow10 F -GLIBC_2.12 pow10f F -GLIBC_2.12 pow10l F -GLIBC_2.12 powf F -GLIBC_2.12 powl F -GLIBC_2.12 remainder F -GLIBC_2.12 remainderf F -GLIBC_2.12 remainderl F -GLIBC_2.12 remquo F -GLIBC_2.12 remquof F -GLIBC_2.12 remquol F -GLIBC_2.12 rint F -GLIBC_2.12 rintf F -GLIBC_2.12 rintl F -GLIBC_2.12 round F -GLIBC_2.12 roundf F -GLIBC_2.12 roundl F -GLIBC_2.12 scalb F -GLIBC_2.12 scalbf F -GLIBC_2.12 scalbl F -GLIBC_2.12 scalbln F -GLIBC_2.12 scalblnf F -GLIBC_2.12 scalblnl F -GLIBC_2.12 scalbn F -GLIBC_2.12 scalbnf F -GLIBC_2.12 scalbnl F -GLIBC_2.12 signgam D 0x4 -GLIBC_2.12 significand F -GLIBC_2.12 significandf F -GLIBC_2.12 significandl F -GLIBC_2.12 sin F -GLIBC_2.12 sincos F -GLIBC_2.12 sincosf F -GLIBC_2.12 sincosl F -GLIBC_2.12 sinf F -GLIBC_2.12 sinh F -GLIBC_2.12 sinhf F -GLIBC_2.12 sinhl F -GLIBC_2.12 sinl F -GLIBC_2.12 sqrt F -GLIBC_2.12 sqrtf F -GLIBC_2.12 sqrtl F -GLIBC_2.12 tan F -GLIBC_2.12 tanf F -GLIBC_2.12 tanh F -GLIBC_2.12 tanhf F -GLIBC_2.12 tanhl F -GLIBC_2.12 tanl F -GLIBC_2.12 tgamma F -GLIBC_2.12 tgammaf F -GLIBC_2.12 tgammal F -GLIBC_2.12 trunc F -GLIBC_2.12 truncf F -GLIBC_2.12 truncl F -GLIBC_2.12 y0 F -GLIBC_2.12 y0f F -GLIBC_2.12 y0l F -GLIBC_2.12 y1 F -GLIBC_2.12 y1f F -GLIBC_2.12 y1l F -GLIBC_2.12 yn F -GLIBC_2.12 ynf F -GLIBC_2.12 ynl F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libnsl.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libnsl.abilist deleted file mode 100644 index 0277e5c1a8..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libnsl.abilist +++ /dev/null @@ -1,122 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __free_fdresult F -GLIBC_2.12 __nis_default_access F -GLIBC_2.12 __nis_default_group F -GLIBC_2.12 __nis_default_owner F -GLIBC_2.12 __nis_default_ttl F -GLIBC_2.12 __nis_finddirectory F -GLIBC_2.12 __nis_hash F -GLIBC_2.12 __nisbind_connect F -GLIBC_2.12 __nisbind_create F -GLIBC_2.12 __nisbind_destroy F -GLIBC_2.12 __nisbind_next F -GLIBC_2.12 __yp_check F -GLIBC_2.12 nis_add F -GLIBC_2.12 nis_add_entry F -GLIBC_2.12 nis_addmember F -GLIBC_2.12 nis_checkpoint F -GLIBC_2.12 nis_clone_directory F -GLIBC_2.12 nis_clone_object F -GLIBC_2.12 nis_clone_result F -GLIBC_2.12 nis_creategroup F -GLIBC_2.12 nis_destroy_object F -GLIBC_2.12 nis_destroygroup F -GLIBC_2.12 nis_dir_cmp F -GLIBC_2.12 nis_domain_of F -GLIBC_2.12 nis_domain_of_r F -GLIBC_2.12 nis_first_entry F -GLIBC_2.12 nis_free_directory F -GLIBC_2.12 nis_free_object F -GLIBC_2.12 nis_free_request F -GLIBC_2.12 nis_freenames F -GLIBC_2.12 nis_freeresult F -GLIBC_2.12 nis_freeservlist F -GLIBC_2.12 nis_freetags F -GLIBC_2.12 nis_getnames F -GLIBC_2.12 nis_getservlist F -GLIBC_2.12 nis_ismember F -GLIBC_2.12 nis_leaf_of F -GLIBC_2.12 nis_leaf_of_r F -GLIBC_2.12 nis_lerror F -GLIBC_2.12 nis_list F -GLIBC_2.12 nis_local_directory F -GLIBC_2.12 nis_local_group F -GLIBC_2.12 nis_local_host F -GLIBC_2.12 nis_local_principal F -GLIBC_2.12 nis_lookup F -GLIBC_2.12 nis_mkdir F -GLIBC_2.12 nis_modify F -GLIBC_2.12 nis_modify_entry F -GLIBC_2.12 nis_name_of F -GLIBC_2.12 nis_name_of_r F -GLIBC_2.12 nis_next_entry F -GLIBC_2.12 nis_perror F -GLIBC_2.12 nis_ping F -GLIBC_2.12 nis_print_directory F -GLIBC_2.12 nis_print_entry F -GLIBC_2.12 nis_print_group F -GLIBC_2.12 nis_print_group_entry F -GLIBC_2.12 nis_print_link F -GLIBC_2.12 nis_print_object F -GLIBC_2.12 nis_print_result F -GLIBC_2.12 nis_print_rights F -GLIBC_2.12 nis_print_table F -GLIBC_2.12 nis_read_obj F -GLIBC_2.12 nis_remove F -GLIBC_2.12 nis_remove_entry F -GLIBC_2.12 nis_removemember F -GLIBC_2.12 nis_rmdir F -GLIBC_2.12 nis_servstate F -GLIBC_2.12 nis_sperrno F -GLIBC_2.12 nis_sperror F -GLIBC_2.12 nis_sperror_r F -GLIBC_2.12 nis_stats F -GLIBC_2.12 nis_verifygroup F -GLIBC_2.12 nis_write_obj F -GLIBC_2.12 readColdStartFile F -GLIBC_2.12 writeColdStartFile F -GLIBC_2.12 xdr_cback_data F -GLIBC_2.12 xdr_domainname F -GLIBC_2.12 xdr_keydat F -GLIBC_2.12 xdr_mapname F -GLIBC_2.12 xdr_obj_p F -GLIBC_2.12 xdr_peername F -GLIBC_2.12 xdr_valdat F -GLIBC_2.12 xdr_yp_buf F -GLIBC_2.12 xdr_ypall F -GLIBC_2.12 xdr_ypbind_binding F -GLIBC_2.12 xdr_ypbind_resp F -GLIBC_2.12 xdr_ypbind_resptype F -GLIBC_2.12 xdr_ypbind_setdom F -GLIBC_2.12 xdr_ypdelete_args F -GLIBC_2.12 xdr_ypmap_parms F -GLIBC_2.12 xdr_ypmaplist F -GLIBC_2.12 xdr_yppush_status F -GLIBC_2.12 xdr_yppushresp_xfr F -GLIBC_2.12 xdr_ypreq_key F -GLIBC_2.12 xdr_ypreq_nokey F -GLIBC_2.12 xdr_ypreq_xfr F -GLIBC_2.12 xdr_ypresp_all F -GLIBC_2.12 xdr_ypresp_key_val F -GLIBC_2.12 xdr_ypresp_maplist F -GLIBC_2.12 xdr_ypresp_master F -GLIBC_2.12 xdr_ypresp_order F -GLIBC_2.12 xdr_ypresp_val F -GLIBC_2.12 xdr_ypresp_xfr F -GLIBC_2.12 xdr_ypstat F -GLIBC_2.12 xdr_ypupdate_args F -GLIBC_2.12 xdr_ypxfrstat F -GLIBC_2.12 yp_all F -GLIBC_2.12 yp_bind F -GLIBC_2.12 yp_first F -GLIBC_2.12 yp_get_default_domain F -GLIBC_2.12 yp_maplist F -GLIBC_2.12 yp_master F -GLIBC_2.12 yp_match F -GLIBC_2.12 yp_next F -GLIBC_2.12 yp_order F -GLIBC_2.12 yp_unbind F -GLIBC_2.12 yp_update F -GLIBC_2.12 ypbinderr_string F -GLIBC_2.12 yperr_string F -GLIBC_2.12 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libpthread.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libpthread.abilist deleted file mode 100644 index d16158f938..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libpthread.abilist +++ /dev/null @@ -1,226 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _IO_flockfile F -GLIBC_2.12 _IO_ftrylockfile F -GLIBC_2.12 _IO_funlockfile F -GLIBC_2.12 __close F -GLIBC_2.12 __connect F -GLIBC_2.12 __errno_location F -GLIBC_2.12 __fcntl F -GLIBC_2.12 __fork F -GLIBC_2.12 __h_errno_location F -GLIBC_2.12 __libc_allocate_rtsig F -GLIBC_2.12 __libc_current_sigrtmax F -GLIBC_2.12 __libc_current_sigrtmin F -GLIBC_2.12 __lseek F -GLIBC_2.12 __nanosleep F -GLIBC_2.12 __open F -GLIBC_2.12 __open64 F -GLIBC_2.12 __pread64 F -GLIBC_2.12 __pthread_cleanup_routine F -GLIBC_2.12 __pthread_getspecific F -GLIBC_2.12 __pthread_key_create F -GLIBC_2.12 __pthread_mutex_destroy F -GLIBC_2.12 __pthread_mutex_init F -GLIBC_2.12 __pthread_mutex_lock F -GLIBC_2.12 __pthread_mutex_trylock F -GLIBC_2.12 __pthread_mutex_unlock F -GLIBC_2.12 __pthread_mutexattr_destroy F -GLIBC_2.12 __pthread_mutexattr_init F -GLIBC_2.12 __pthread_mutexattr_settype F -GLIBC_2.12 __pthread_once F -GLIBC_2.12 __pthread_register_cancel F -GLIBC_2.12 __pthread_register_cancel_defer F -GLIBC_2.12 __pthread_rwlock_destroy F -GLIBC_2.12 __pthread_rwlock_init F -GLIBC_2.12 __pthread_rwlock_rdlock F -GLIBC_2.12 __pthread_rwlock_tryrdlock F -GLIBC_2.12 __pthread_rwlock_trywrlock F -GLIBC_2.12 __pthread_rwlock_unlock F -GLIBC_2.12 __pthread_rwlock_wrlock F -GLIBC_2.12 __pthread_setspecific F -GLIBC_2.12 __pthread_unregister_cancel F -GLIBC_2.12 __pthread_unregister_cancel_restore F -GLIBC_2.12 __pthread_unwind_next F -GLIBC_2.12 __pwrite64 F -GLIBC_2.12 __read F -GLIBC_2.12 __res_state F -GLIBC_2.12 __send F -GLIBC_2.12 __sigaction F -GLIBC_2.12 __vfork F -GLIBC_2.12 __wait F -GLIBC_2.12 __write F -GLIBC_2.12 _pthread_cleanup_pop F -GLIBC_2.12 _pthread_cleanup_pop_restore F -GLIBC_2.12 _pthread_cleanup_push F -GLIBC_2.12 _pthread_cleanup_push_defer F -GLIBC_2.12 accept F -GLIBC_2.12 close F -GLIBC_2.12 connect F -GLIBC_2.12 fcntl F -GLIBC_2.12 flockfile F -GLIBC_2.12 fork F -GLIBC_2.12 fsync F -GLIBC_2.12 ftrylockfile F -GLIBC_2.12 funlockfile F -GLIBC_2.12 longjmp F -GLIBC_2.12 lseek F -GLIBC_2.12 lseek64 F -GLIBC_2.12 msync F -GLIBC_2.12 nanosleep F -GLIBC_2.12 open F -GLIBC_2.12 open64 F -GLIBC_2.12 pause F -GLIBC_2.12 pread F -GLIBC_2.12 pread64 F -GLIBC_2.12 pthread_attr_destroy F -GLIBC_2.12 pthread_attr_getaffinity_np F -GLIBC_2.12 pthread_attr_getdetachstate F -GLIBC_2.12 pthread_attr_getguardsize F -GLIBC_2.12 pthread_attr_getinheritsched F -GLIBC_2.12 pthread_attr_getschedparam F -GLIBC_2.12 pthread_attr_getschedpolicy F -GLIBC_2.12 pthread_attr_getscope F -GLIBC_2.12 pthread_attr_getstack F -GLIBC_2.12 pthread_attr_getstackaddr F -GLIBC_2.12 pthread_attr_getstacksize F -GLIBC_2.12 pthread_attr_init F -GLIBC_2.12 pthread_attr_setaffinity_np F -GLIBC_2.12 pthread_attr_setdetachstate F -GLIBC_2.12 pthread_attr_setguardsize F -GLIBC_2.12 pthread_attr_setinheritsched F -GLIBC_2.12 pthread_attr_setschedparam F -GLIBC_2.12 pthread_attr_setschedpolicy F -GLIBC_2.12 pthread_attr_setscope F -GLIBC_2.12 pthread_attr_setstack F -GLIBC_2.12 pthread_attr_setstackaddr F -GLIBC_2.12 pthread_attr_setstacksize F -GLIBC_2.12 pthread_barrier_destroy F -GLIBC_2.12 pthread_barrier_init F -GLIBC_2.12 pthread_barrier_wait F -GLIBC_2.12 pthread_barrierattr_destroy F -GLIBC_2.12 pthread_barrierattr_getpshared F -GLIBC_2.12 pthread_barrierattr_init F -GLIBC_2.12 pthread_barrierattr_setpshared F -GLIBC_2.12 pthread_cancel F -GLIBC_2.12 pthread_cond_broadcast F -GLIBC_2.12 pthread_cond_destroy F -GLIBC_2.12 pthread_cond_init F -GLIBC_2.12 pthread_cond_signal F -GLIBC_2.12 pthread_cond_timedwait F -GLIBC_2.12 pthread_cond_wait F -GLIBC_2.12 pthread_condattr_destroy F -GLIBC_2.12 pthread_condattr_getclock F -GLIBC_2.12 pthread_condattr_getpshared F -GLIBC_2.12 pthread_condattr_init F -GLIBC_2.12 pthread_condattr_setclock F -GLIBC_2.12 pthread_condattr_setpshared F -GLIBC_2.12 pthread_create F -GLIBC_2.12 pthread_detach F -GLIBC_2.12 pthread_equal F -GLIBC_2.12 pthread_exit F -GLIBC_2.12 pthread_getaffinity_np F -GLIBC_2.12 pthread_getattr_np F -GLIBC_2.12 pthread_getconcurrency F -GLIBC_2.12 pthread_getcpuclockid F -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_getschedparam F -GLIBC_2.12 pthread_getspecific F -GLIBC_2.12 pthread_join F -GLIBC_2.12 pthread_key_create F -GLIBC_2.12 pthread_key_delete F -GLIBC_2.12 pthread_kill F -GLIBC_2.12 pthread_kill_other_threads_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutex_consistent_np F -GLIBC_2.12 pthread_mutex_destroy F -GLIBC_2.12 pthread_mutex_getprioceiling F -GLIBC_2.12 pthread_mutex_init F -GLIBC_2.12 pthread_mutex_lock F -GLIBC_2.12 pthread_mutex_setprioceiling F -GLIBC_2.12 pthread_mutex_timedlock F -GLIBC_2.12 pthread_mutex_trylock F -GLIBC_2.12 pthread_mutex_unlock F -GLIBC_2.12 pthread_mutexattr_destroy F -GLIBC_2.12 pthread_mutexattr_getkind_np F -GLIBC_2.12 pthread_mutexattr_getprioceiling F -GLIBC_2.12 pthread_mutexattr_getprotocol F -GLIBC_2.12 pthread_mutexattr_getpshared F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_getrobust_np F -GLIBC_2.12 pthread_mutexattr_gettype F -GLIBC_2.12 pthread_mutexattr_init F -GLIBC_2.12 pthread_mutexattr_setkind_np F -GLIBC_2.12 pthread_mutexattr_setprioceiling F -GLIBC_2.12 pthread_mutexattr_setprotocol F -GLIBC_2.12 pthread_mutexattr_setpshared F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_mutexattr_setrobust_np F -GLIBC_2.12 pthread_mutexattr_settype F -GLIBC_2.12 pthread_once F -GLIBC_2.12 pthread_rwlock_destroy F -GLIBC_2.12 pthread_rwlock_init F -GLIBC_2.12 pthread_rwlock_rdlock F -GLIBC_2.12 pthread_rwlock_timedrdlock F -GLIBC_2.12 pthread_rwlock_timedwrlock F -GLIBC_2.12 pthread_rwlock_tryrdlock F -GLIBC_2.12 pthread_rwlock_trywrlock F -GLIBC_2.12 pthread_rwlock_unlock F -GLIBC_2.12 pthread_rwlock_wrlock F -GLIBC_2.12 pthread_rwlockattr_destroy F -GLIBC_2.12 pthread_rwlockattr_getkind_np F -GLIBC_2.12 pthread_rwlockattr_getpshared F -GLIBC_2.12 pthread_rwlockattr_init F -GLIBC_2.12 pthread_rwlockattr_setkind_np F -GLIBC_2.12 pthread_rwlockattr_setpshared F -GLIBC_2.12 pthread_self F -GLIBC_2.12 pthread_setaffinity_np F -GLIBC_2.12 pthread_setcancelstate F -GLIBC_2.12 pthread_setcanceltype F -GLIBC_2.12 pthread_setconcurrency F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.12 pthread_setschedparam F -GLIBC_2.12 pthread_setschedprio F -GLIBC_2.12 pthread_setspecific F -GLIBC_2.12 pthread_sigmask F -GLIBC_2.12 pthread_sigqueue F -GLIBC_2.12 pthread_spin_destroy F -GLIBC_2.12 pthread_spin_init F -GLIBC_2.12 pthread_spin_lock F -GLIBC_2.12 pthread_spin_trylock F -GLIBC_2.12 pthread_spin_unlock F -GLIBC_2.12 pthread_testcancel F -GLIBC_2.12 pthread_timedjoin_np F -GLIBC_2.12 pthread_tryjoin_np F -GLIBC_2.12 pthread_yield F -GLIBC_2.12 pwrite F -GLIBC_2.12 pwrite64 F -GLIBC_2.12 raise F -GLIBC_2.12 read F -GLIBC_2.12 recv F -GLIBC_2.12 recvfrom F -GLIBC_2.12 recvmsg F -GLIBC_2.12 sem_close F -GLIBC_2.12 sem_destroy F -GLIBC_2.12 sem_getvalue F -GLIBC_2.12 sem_init F -GLIBC_2.12 sem_open F -GLIBC_2.12 sem_post F -GLIBC_2.12 sem_timedwait F -GLIBC_2.12 sem_trywait F -GLIBC_2.12 sem_unlink F -GLIBC_2.12 sem_wait F -GLIBC_2.12 send F -GLIBC_2.12 sendmsg F -GLIBC_2.12 sendto F -GLIBC_2.12 sigaction F -GLIBC_2.12 siglongjmp F -GLIBC_2.12 sigwait F -GLIBC_2.12 system F -GLIBC_2.12 tcdrain F -GLIBC_2.12 vfork F -GLIBC_2.12 wait F -GLIBC_2.12 waitpid F -GLIBC_2.12 write F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libresolv.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libresolv.abilist deleted file mode 100644 index aa2fefa6e4..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libresolv.abilist +++ /dev/null @@ -1,92 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __b64_ntop F -GLIBC_2.12 __b64_pton F -GLIBC_2.12 __dn_comp F -GLIBC_2.12 __dn_count_labels F -GLIBC_2.12 __dn_expand F -GLIBC_2.12 __dn_skipname F -GLIBC_2.12 __fp_nquery F -GLIBC_2.12 __fp_query F -GLIBC_2.12 __fp_resstat F -GLIBC_2.12 __hostalias F -GLIBC_2.12 __loc_aton F -GLIBC_2.12 __loc_ntoa F -GLIBC_2.12 __p_cdname F -GLIBC_2.12 __p_cdnname F -GLIBC_2.12 __p_class F -GLIBC_2.12 __p_class_syms D 0x54 -GLIBC_2.12 __p_fqname F -GLIBC_2.12 __p_fqnname F -GLIBC_2.12 __p_option F -GLIBC_2.12 __p_query F -GLIBC_2.12 __p_rcode F -GLIBC_2.12 __p_secstodate F -GLIBC_2.12 __p_time F -GLIBC_2.12 __p_type F -GLIBC_2.12 __p_type_syms D 0x228 -GLIBC_2.12 __putlong F -GLIBC_2.12 __putshort F -GLIBC_2.12 __res_close F -GLIBC_2.12 __res_dnok F -GLIBC_2.12 __res_hnok F -GLIBC_2.12 __res_hostalias F -GLIBC_2.12 __res_isourserver F -GLIBC_2.12 __res_mailok F -GLIBC_2.12 __res_mkquery F -GLIBC_2.12 __res_nameinquery F -GLIBC_2.12 __res_nmkquery F -GLIBC_2.12 __res_nquery F -GLIBC_2.12 __res_nquerydomain F -GLIBC_2.12 __res_nsearch F -GLIBC_2.12 __res_nsend F -GLIBC_2.12 __res_ownok F -GLIBC_2.12 __res_queriesmatch F -GLIBC_2.12 __res_query F -GLIBC_2.12 __res_querydomain F -GLIBC_2.12 __res_search F -GLIBC_2.12 __res_send F -GLIBC_2.12 __sym_ntop F -GLIBC_2.12 __sym_ntos F -GLIBC_2.12 __sym_ston F -GLIBC_2.12 _gethtbyaddr F -GLIBC_2.12 _gethtbyname F -GLIBC_2.12 _gethtbyname2 F -GLIBC_2.12 _gethtent F -GLIBC_2.12 _getlong F -GLIBC_2.12 _getshort F -GLIBC_2.12 _res_opcodes D 0x40 -GLIBC_2.12 _sethtent F -GLIBC_2.12 inet_net_ntop F -GLIBC_2.12 inet_net_pton F -GLIBC_2.12 inet_neta F -GLIBC_2.12 ns_datetosecs F -GLIBC_2.12 ns_format_ttl F -GLIBC_2.12 ns_get16 F -GLIBC_2.12 ns_get32 F -GLIBC_2.12 ns_initparse F -GLIBC_2.12 ns_makecanon F -GLIBC_2.12 ns_msg_getflag F -GLIBC_2.12 ns_name_compress F -GLIBC_2.12 ns_name_ntol F -GLIBC_2.12 ns_name_ntop F -GLIBC_2.12 ns_name_pack F -GLIBC_2.12 ns_name_pton F -GLIBC_2.12 ns_name_rollback F -GLIBC_2.12 ns_name_skip F -GLIBC_2.12 ns_name_uncompress F -GLIBC_2.12 ns_name_unpack F -GLIBC_2.12 ns_parse_ttl F -GLIBC_2.12 ns_parserr F -GLIBC_2.12 ns_put16 F -GLIBC_2.12 ns_put32 F -GLIBC_2.12 ns_samedomain F -GLIBC_2.12 ns_samename F -GLIBC_2.12 ns_skiprr F -GLIBC_2.12 ns_sprintrr F -GLIBC_2.12 ns_sprintrrf F -GLIBC_2.12 ns_subdomain F -GLIBC_2.12 res_gethostbyaddr F -GLIBC_2.12 res_gethostbyname F -GLIBC_2.12 res_gethostbyname2 F -GLIBC_2.12 res_send_setqhook F -GLIBC_2.12 res_send_setrhook F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/librt.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/librt.abilist deleted file mode 100644 index 14f5c8245d..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/librt.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __mq_open_2 F -GLIBC_2.12 aio_cancel F -GLIBC_2.12 aio_cancel64 F -GLIBC_2.12 aio_error F -GLIBC_2.12 aio_error64 F -GLIBC_2.12 aio_fsync F -GLIBC_2.12 aio_fsync64 F -GLIBC_2.12 aio_init F -GLIBC_2.12 aio_read F -GLIBC_2.12 aio_read64 F -GLIBC_2.12 aio_return F -GLIBC_2.12 aio_return64 F -GLIBC_2.12 aio_suspend F -GLIBC_2.12 aio_suspend64 F -GLIBC_2.12 aio_write F -GLIBC_2.12 aio_write64 F -GLIBC_2.12 clock_getcpuclockid F -GLIBC_2.12 clock_getres F -GLIBC_2.12 clock_gettime F -GLIBC_2.12 clock_nanosleep F -GLIBC_2.12 clock_settime F -GLIBC_2.12 lio_listio F -GLIBC_2.12 lio_listio64 F -GLIBC_2.12 mq_close F -GLIBC_2.12 mq_getattr F -GLIBC_2.12 mq_notify F -GLIBC_2.12 mq_open F -GLIBC_2.12 mq_receive F -GLIBC_2.12 mq_send F -GLIBC_2.12 mq_setattr F -GLIBC_2.12 mq_timedreceive F -GLIBC_2.12 mq_timedsend F -GLIBC_2.12 mq_unlink F -GLIBC_2.12 shm_open F -GLIBC_2.12 shm_unlink F -GLIBC_2.12 timer_create F -GLIBC_2.12 timer_delete F -GLIBC_2.12 timer_getoverrun F -GLIBC_2.12 timer_gettime F -GLIBC_2.12 timer_settime F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libthread_db.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libthread_db.abilist deleted file mode 100644 index 4aade0b7e0..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libthread_db.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 td_init F -GLIBC_2.12 td_log F -GLIBC_2.12 td_symbol_list F -GLIBC_2.12 td_ta_clear_event F -GLIBC_2.12 td_ta_delete F -GLIBC_2.12 td_ta_enable_stats F -GLIBC_2.12 td_ta_event_addr F -GLIBC_2.12 td_ta_event_getmsg F -GLIBC_2.12 td_ta_get_nthreads F -GLIBC_2.12 td_ta_get_ph F -GLIBC_2.12 td_ta_get_stats F -GLIBC_2.12 td_ta_map_id2thr F -GLIBC_2.12 td_ta_map_lwp2thr F -GLIBC_2.12 td_ta_new F -GLIBC_2.12 td_ta_reset_stats F -GLIBC_2.12 td_ta_set_event F -GLIBC_2.12 td_ta_setconcurrency F -GLIBC_2.12 td_ta_thr_iter F -GLIBC_2.12 td_ta_tsd_iter F -GLIBC_2.12 td_thr_clear_event F -GLIBC_2.12 td_thr_dbresume F -GLIBC_2.12 td_thr_dbsuspend F -GLIBC_2.12 td_thr_event_enable F -GLIBC_2.12 td_thr_event_getmsg F -GLIBC_2.12 td_thr_get_info F -GLIBC_2.12 td_thr_getfpregs F -GLIBC_2.12 td_thr_getgregs F -GLIBC_2.12 td_thr_getxregs F -GLIBC_2.12 td_thr_getxregsize F -GLIBC_2.12 td_thr_set_event F -GLIBC_2.12 td_thr_setfpregs F -GLIBC_2.12 td_thr_setgregs F -GLIBC_2.12 td_thr_setprio F -GLIBC_2.12 td_thr_setsigpending F -GLIBC_2.12 td_thr_setxregs F -GLIBC_2.12 td_thr_sigsetmask F -GLIBC_2.12 td_thr_tls_get_addr F -GLIBC_2.12 td_thr_tlsbase F -GLIBC_2.12 td_thr_tsd F -GLIBC_2.12 td_thr_validate F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libutil.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libutil.abilist deleted file mode 100644 index e4d432643c..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 forkpty F -GLIBC_2.12 login F -GLIBC_2.12 login_tty F -GLIBC_2.12 logout F -GLIBC_2.12 logwtmp F -GLIBC_2.12 openpty F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Implies b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Implies deleted file mode 100644 index e4e0800c0a..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Implies +++ /dev/null @@ -1,4 +0,0 @@ -unix/sysv/linux/tile/tilegx -unix/sysv/linux/tile -unix/sysv/linux/generic -unix/sysv/linux/wordsize-64 diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Makefile b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Makefile deleted file mode 100644 index c8991d31e4..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Makefile +++ /dev/null @@ -1 +0,0 @@ -default-abi := 64 diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/c++-types.data b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/c++-types.data deleted file mode 100644 index ac925ccb36..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:l -blkcnt_t:l -blksize_t:i -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:m -fd_mask:l -fsblkcnt64_t:m -fsblkcnt_t:m -fsfilcnt64_t:m -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:m -ino_t:m -int16_t:s -int32_t:i -int64_t:l -int8_t:a -intptr_t:l -key_t:i -loff_t:l -mode_t:j -nlink_t:j -off64_t:l -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:l -register_t:l -rlim64_t:m -rlim_t:m -sigset_t:10__sigset_t -size_t:m -socklen_t:j -ssize_t:l -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:m -u_int8_t:h -ulong:m -u_long:m -u_quad_t:m -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/ld.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/ld.abilist deleted file mode 100644 index ab74e7ecd1..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/ld.abilist +++ /dev/null @@ -1,9 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __libc_stack_end D 0x8 -GLIBC_2.12 __tls_get_addr F -GLIBC_2.12 _dl_mcount F -GLIBC_2.12 _r_debug D 0x28 -GLIBC_2.12 calloc F -GLIBC_2.12 free F -GLIBC_2.12 malloc F -GLIBC_2.12 realloc F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libBrokenLocale.abilist deleted file mode 100644 index 0d64827515..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libanl.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libanl.abilist deleted file mode 100644 index a3b1cc08bf..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 gai_cancel F -GLIBC_2.12 gai_error F -GLIBC_2.12 gai_suspend F -GLIBC_2.12 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist deleted file mode 100644 index 1088923e59..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist +++ /dev/null @@ -1,2112 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _Exit F -GLIBC_2.12 _IO_2_1_stderr_ D 0xe0 -GLIBC_2.12 _IO_2_1_stdin_ D 0xe0 -GLIBC_2.12 _IO_2_1_stdout_ D 0xe0 -GLIBC_2.12 _IO_adjust_column F -GLIBC_2.12 _IO_adjust_wcolumn F -GLIBC_2.12 _IO_default_doallocate F -GLIBC_2.12 _IO_default_finish F -GLIBC_2.12 _IO_default_pbackfail F -GLIBC_2.12 _IO_default_uflow F -GLIBC_2.12 _IO_default_xsgetn F -GLIBC_2.12 _IO_default_xsputn F -GLIBC_2.12 _IO_do_write F -GLIBC_2.12 _IO_doallocbuf F -GLIBC_2.12 _IO_fclose F -GLIBC_2.12 _IO_fdopen F -GLIBC_2.12 _IO_feof F -GLIBC_2.12 _IO_ferror F -GLIBC_2.12 _IO_fflush F -GLIBC_2.12 _IO_fgetpos F -GLIBC_2.12 _IO_fgetpos64 F -GLIBC_2.12 _IO_fgets F -GLIBC_2.12 _IO_file_attach F -GLIBC_2.12 _IO_file_close F -GLIBC_2.12 _IO_file_close_it F -GLIBC_2.12 _IO_file_doallocate F -GLIBC_2.12 _IO_file_finish F -GLIBC_2.12 _IO_file_fopen F -GLIBC_2.12 _IO_file_init F -GLIBC_2.12 _IO_file_jumps D 0xa8 -GLIBC_2.12 _IO_file_open F -GLIBC_2.12 _IO_file_overflow F -GLIBC_2.12 _IO_file_read F -GLIBC_2.12 _IO_file_seek F -GLIBC_2.12 _IO_file_seekoff F -GLIBC_2.12 _IO_file_setbuf F -GLIBC_2.12 _IO_file_stat F -GLIBC_2.12 _IO_file_sync F -GLIBC_2.12 _IO_file_underflow F -GLIBC_2.12 _IO_file_write F -GLIBC_2.12 _IO_file_xsputn F -GLIBC_2.12 _IO_flockfile F -GLIBC_2.12 _IO_flush_all F -GLIBC_2.12 _IO_flush_all_linebuffered F -GLIBC_2.12 _IO_fopen F -GLIBC_2.12 _IO_fprintf F -GLIBC_2.12 _IO_fputs F -GLIBC_2.12 _IO_fread F -GLIBC_2.12 _IO_free_backup_area F -GLIBC_2.12 _IO_free_wbackup_area F -GLIBC_2.12 _IO_fsetpos F -GLIBC_2.12 _IO_fsetpos64 F -GLIBC_2.12 _IO_ftell F -GLIBC_2.12 _IO_ftrylockfile F -GLIBC_2.12 _IO_funlockfile F -GLIBC_2.12 _IO_fwrite F -GLIBC_2.12 _IO_getc F -GLIBC_2.12 _IO_getline F -GLIBC_2.12 _IO_getline_info F -GLIBC_2.12 _IO_gets F -GLIBC_2.12 _IO_init F -GLIBC_2.12 _IO_init_marker F -GLIBC_2.12 _IO_init_wmarker F -GLIBC_2.12 _IO_iter_begin F -GLIBC_2.12 _IO_iter_end F -GLIBC_2.12 _IO_iter_file F -GLIBC_2.12 _IO_iter_next F -GLIBC_2.12 _IO_least_wmarker F -GLIBC_2.12 _IO_link_in F -GLIBC_2.12 _IO_list_all D 0x8 -GLIBC_2.12 _IO_list_lock F -GLIBC_2.12 _IO_list_resetlock F -GLIBC_2.12 _IO_list_unlock F -GLIBC_2.12 _IO_marker_delta F -GLIBC_2.12 _IO_marker_difference F -GLIBC_2.12 _IO_padn F -GLIBC_2.12 _IO_peekc_locked F -GLIBC_2.12 _IO_popen F -GLIBC_2.12 _IO_printf F -GLIBC_2.12 _IO_proc_close F -GLIBC_2.12 _IO_proc_open F -GLIBC_2.12 _IO_putc F -GLIBC_2.12 _IO_puts F -GLIBC_2.12 _IO_remove_marker F -GLIBC_2.12 _IO_seekmark F -GLIBC_2.12 _IO_seekoff F -GLIBC_2.12 _IO_seekpos F -GLIBC_2.12 _IO_seekwmark F -GLIBC_2.12 _IO_setb F -GLIBC_2.12 _IO_setbuffer F -GLIBC_2.12 _IO_setvbuf F -GLIBC_2.12 _IO_sgetn F -GLIBC_2.12 _IO_sprintf F -GLIBC_2.12 _IO_sputbackc F -GLIBC_2.12 _IO_sputbackwc F -GLIBC_2.12 _IO_sscanf F -GLIBC_2.12 _IO_str_init_readonly F -GLIBC_2.12 _IO_str_init_static F -GLIBC_2.12 _IO_str_overflow F -GLIBC_2.12 _IO_str_pbackfail F -GLIBC_2.12 _IO_str_seekoff F -GLIBC_2.12 _IO_str_underflow F -GLIBC_2.12 _IO_sungetc F -GLIBC_2.12 _IO_sungetwc F -GLIBC_2.12 _IO_switch_to_get_mode F -GLIBC_2.12 _IO_switch_to_main_wget_area F -GLIBC_2.12 _IO_switch_to_wbackup_area F -GLIBC_2.12 _IO_switch_to_wget_mode F -GLIBC_2.12 _IO_un_link F -GLIBC_2.12 _IO_ungetc F -GLIBC_2.12 _IO_unsave_markers F -GLIBC_2.12 _IO_unsave_wmarkers F -GLIBC_2.12 _IO_vfprintf F -GLIBC_2.12 _IO_vfscanf F -GLIBC_2.12 _IO_vsprintf F -GLIBC_2.12 _IO_wdefault_doallocate F -GLIBC_2.12 _IO_wdefault_finish F -GLIBC_2.12 _IO_wdefault_pbackfail F -GLIBC_2.12 _IO_wdefault_uflow F -GLIBC_2.12 _IO_wdefault_xsgetn F -GLIBC_2.12 _IO_wdefault_xsputn F -GLIBC_2.12 _IO_wdo_write F -GLIBC_2.12 _IO_wdoallocbuf F -GLIBC_2.12 _IO_wfile_jumps D 0xa8 -GLIBC_2.12 _IO_wfile_overflow F -GLIBC_2.12 _IO_wfile_seekoff F -GLIBC_2.12 _IO_wfile_sync F -GLIBC_2.12 _IO_wfile_underflow F -GLIBC_2.12 _IO_wfile_xsputn F -GLIBC_2.12 _IO_wmarker_delta F -GLIBC_2.12 _IO_wsetb F -GLIBC_2.12 ___brk_addr D 0x8 -GLIBC_2.12 __adjtimex F -GLIBC_2.12 __after_morecore_hook D 0x8 -GLIBC_2.12 __argz_count F -GLIBC_2.12 __argz_next F -GLIBC_2.12 __argz_stringify F -GLIBC_2.12 __asprintf F -GLIBC_2.12 __asprintf_chk F -GLIBC_2.12 __assert F -GLIBC_2.12 __assert_fail F -GLIBC_2.12 __assert_perror_fail F -GLIBC_2.12 __backtrace F -GLIBC_2.12 __backtrace_symbols F -GLIBC_2.12 __backtrace_symbols_fd F -GLIBC_2.12 __bsd_getpgrp F -GLIBC_2.12 __bzero F -GLIBC_2.12 __check_rhosts_file D 0x4 -GLIBC_2.12 __chk_fail F -GLIBC_2.12 __clone F -GLIBC_2.12 __close F -GLIBC_2.12 __cmsg_nxthdr F -GLIBC_2.12 __confstr_chk F -GLIBC_2.12 __connect F -GLIBC_2.12 __ctype_b_loc F -GLIBC_2.12 __ctype_get_mb_cur_max F -GLIBC_2.12 __ctype_tolower_loc F -GLIBC_2.12 __ctype_toupper_loc F -GLIBC_2.12 __curbrk D 0x8 -GLIBC_2.12 __cxa_at_quick_exit F -GLIBC_2.12 __cxa_atexit F -GLIBC_2.12 __cxa_finalize F -GLIBC_2.12 __cyg_profile_func_enter F -GLIBC_2.12 __cyg_profile_func_exit F -GLIBC_2.12 __daylight D 0x4 -GLIBC_2.12 __dcgettext F -GLIBC_2.12 __default_morecore F -GLIBC_2.12 __dgettext F -GLIBC_2.12 __dprintf_chk F -GLIBC_2.12 __dup2 F -GLIBC_2.12 __duplocale F -GLIBC_2.12 __endmntent F -GLIBC_2.12 __environ D 0x8 -GLIBC_2.12 __errno_location F -GLIBC_2.12 __fbufsize F -GLIBC_2.12 __fcntl F -GLIBC_2.12 __ffs F -GLIBC_2.12 __fgets_chk F -GLIBC_2.12 __fgets_unlocked_chk F -GLIBC_2.12 __fgetws_chk F -GLIBC_2.12 __fgetws_unlocked_chk F -GLIBC_2.12 __finite F -GLIBC_2.12 __finitef F -GLIBC_2.12 __flbf F -GLIBC_2.12 __fork F -GLIBC_2.12 __fpending F -GLIBC_2.12 __fprintf_chk F -GLIBC_2.12 __fpu_control D 0x4 -GLIBC_2.12 __fpurge F -GLIBC_2.12 __fread_chk F -GLIBC_2.12 __fread_unlocked_chk F -GLIBC_2.12 __freadable F -GLIBC_2.12 __freading F -GLIBC_2.12 __free_hook D 0x8 -GLIBC_2.12 __freelocale F -GLIBC_2.12 __fsetlocking F -GLIBC_2.12 __fwprintf_chk F -GLIBC_2.12 __fwritable F -GLIBC_2.12 __fwriting F -GLIBC_2.12 __fxstat F -GLIBC_2.12 __fxstat64 F -GLIBC_2.12 __fxstatat F -GLIBC_2.12 __fxstatat64 F -GLIBC_2.12 __getcwd_chk F -GLIBC_2.12 __getdelim F -GLIBC_2.12 __getdomainname_chk F -GLIBC_2.12 __getgroups_chk F -GLIBC_2.12 __gethostname_chk F -GLIBC_2.12 __getlogin_r_chk F -GLIBC_2.12 __getmntent_r F -GLIBC_2.12 __getpagesize F -GLIBC_2.12 __getpgid F -GLIBC_2.12 __getpid F -GLIBC_2.12 __gets_chk F -GLIBC_2.12 __gettimeofday F -GLIBC_2.12 __getwd_chk F -GLIBC_2.12 __gmtime_r F -GLIBC_2.12 __h_errno_location F -GLIBC_2.12 __isalnum_l F -GLIBC_2.12 __isalpha_l F -GLIBC_2.12 __isascii_l F -GLIBC_2.12 __isblank_l F -GLIBC_2.12 __iscntrl_l F -GLIBC_2.12 __isctype F -GLIBC_2.12 __isdigit_l F -GLIBC_2.12 __isgraph_l F -GLIBC_2.12 __isinf F -GLIBC_2.12 __isinff F -GLIBC_2.12 __islower_l F -GLIBC_2.12 __isnan F -GLIBC_2.12 __isnanf F -GLIBC_2.12 __isoc99_fscanf F -GLIBC_2.12 __isoc99_fwscanf F -GLIBC_2.12 __isoc99_scanf F -GLIBC_2.12 __isoc99_sscanf F -GLIBC_2.12 __isoc99_swscanf F -GLIBC_2.12 __isoc99_vfscanf F -GLIBC_2.12 __isoc99_vfwscanf F -GLIBC_2.12 __isoc99_vscanf F -GLIBC_2.12 __isoc99_vsscanf F -GLIBC_2.12 __isoc99_vswscanf F -GLIBC_2.12 __isoc99_vwscanf F -GLIBC_2.12 __isoc99_wscanf F -GLIBC_2.12 __isprint_l F -GLIBC_2.12 __ispunct_l F -GLIBC_2.12 __isspace_l F -GLIBC_2.12 __isupper_l F -GLIBC_2.12 __iswalnum_l F -GLIBC_2.12 __iswalpha_l F -GLIBC_2.12 __iswblank_l F -GLIBC_2.12 __iswcntrl_l F -GLIBC_2.12 __iswctype F -GLIBC_2.12 __iswctype_l F -GLIBC_2.12 __iswdigit_l F -GLIBC_2.12 __iswgraph_l F -GLIBC_2.12 __iswlower_l F -GLIBC_2.12 __iswprint_l F -GLIBC_2.12 __iswpunct_l F -GLIBC_2.12 __iswspace_l F -GLIBC_2.12 __iswupper_l F -GLIBC_2.12 __iswxdigit_l F -GLIBC_2.12 __isxdigit_l F -GLIBC_2.12 __ivaliduser F -GLIBC_2.12 __key_decryptsession_pk_LOCAL D 0x8 -GLIBC_2.12 __key_encryptsession_pk_LOCAL D 0x8 -GLIBC_2.12 __key_gendes_LOCAL D 0x8 -GLIBC_2.12 __libc_allocate_rtsig F -GLIBC_2.12 __libc_calloc F -GLIBC_2.12 __libc_current_sigrtmax F -GLIBC_2.12 __libc_current_sigrtmin F -GLIBC_2.12 __libc_free F -GLIBC_2.12 __libc_freeres F -GLIBC_2.12 __libc_init_first F -GLIBC_2.12 __libc_mallinfo F -GLIBC_2.12 __libc_malloc F -GLIBC_2.12 __libc_mallopt F -GLIBC_2.12 __libc_memalign F -GLIBC_2.12 __libc_pvalloc F -GLIBC_2.12 __libc_realloc F -GLIBC_2.12 __libc_sa_len F -GLIBC_2.12 __libc_start_main F -GLIBC_2.12 __libc_valloc F -GLIBC_2.12 __longjmp_chk F -GLIBC_2.12 __lseek F -GLIBC_2.12 __lxstat F -GLIBC_2.12 __lxstat64 F -GLIBC_2.12 __malloc_hook D 0x8 -GLIBC_2.12 __malloc_initialize_hook D 0x8 -GLIBC_2.12 __mbrlen F -GLIBC_2.12 __mbrtowc F -GLIBC_2.12 __mbsnrtowcs_chk F -GLIBC_2.12 __mbsrtowcs_chk F -GLIBC_2.12 __mbstowcs_chk F -GLIBC_2.12 __mcount F -GLIBC_2.12 __memalign_hook D 0x8 -GLIBC_2.12 __memcpy_chk F -GLIBC_2.12 __memmove_chk F -GLIBC_2.12 __mempcpy F -GLIBC_2.12 __mempcpy_chk F -GLIBC_2.12 __mempcpy_small F -GLIBC_2.12 __memset_chk F -GLIBC_2.12 __monstartup F -GLIBC_2.12 __morecore D 0x8 -GLIBC_2.12 __nanosleep F -GLIBC_2.12 __newlocale F -GLIBC_2.12 __nl_langinfo_l F -GLIBC_2.12 __nss_configure_lookup F -GLIBC_2.12 __nss_database_lookup F -GLIBC_2.12 __nss_group_lookup F -GLIBC_2.12 __nss_hostname_digits_dots F -GLIBC_2.12 __nss_hosts_lookup F -GLIBC_2.12 __nss_next F -GLIBC_2.12 __nss_passwd_lookup F -GLIBC_2.12 __obstack_printf_chk F -GLIBC_2.12 __obstack_vprintf_chk F -GLIBC_2.12 __open F -GLIBC_2.12 __open64 F -GLIBC_2.12 __open64_2 F -GLIBC_2.12 __open_2 F -GLIBC_2.12 __openat64_2 F -GLIBC_2.12 __openat_2 F -GLIBC_2.12 __overflow F -GLIBC_2.12 __pipe F -GLIBC_2.12 __poll F -GLIBC_2.12 __posix_getopt F -GLIBC_2.12 __pread64 F -GLIBC_2.12 __pread64_chk F -GLIBC_2.12 __pread_chk F -GLIBC_2.12 __printf_chk F -GLIBC_2.12 __printf_fp F -GLIBC_2.12 __profile_frequency F -GLIBC_2.12 __progname D 0x8 -GLIBC_2.12 __progname_full D 0x8 -GLIBC_2.12 __ptsname_r_chk F -GLIBC_2.12 __pwrite64 F -GLIBC_2.12 __rawmemchr F -GLIBC_2.12 __rcmd_errstr D 0x8 -GLIBC_2.12 __read F -GLIBC_2.12 __read_chk F -GLIBC_2.12 __readlink_chk F -GLIBC_2.12 __readlinkat_chk F -GLIBC_2.12 __realloc_hook D 0x8 -GLIBC_2.12 __realpath_chk F -GLIBC_2.12 __recv_chk F -GLIBC_2.12 __recvfrom_chk F -GLIBC_2.12 __register_atfork F -GLIBC_2.12 __res_init F -GLIBC_2.12 __res_nclose F -GLIBC_2.12 __res_ninit F -GLIBC_2.12 __res_randomid F -GLIBC_2.12 __res_state F -GLIBC_2.12 __rpc_thread_createerr F -GLIBC_2.12 __rpc_thread_svc_fdset F -GLIBC_2.12 __rpc_thread_svc_max_pollfd F -GLIBC_2.12 __rpc_thread_svc_pollfd F -GLIBC_2.12 __sbrk F -GLIBC_2.12 __sched_cpualloc F -GLIBC_2.12 __sched_cpucount F -GLIBC_2.12 __sched_cpufree F -GLIBC_2.12 __sched_get_priority_max F -GLIBC_2.12 __sched_get_priority_min F -GLIBC_2.12 __sched_getparam F -GLIBC_2.12 __sched_getscheduler F -GLIBC_2.12 __sched_setscheduler F -GLIBC_2.12 __sched_yield F -GLIBC_2.12 __secure_getenv F -GLIBC_2.12 __select F -GLIBC_2.12 __setmntent F -GLIBC_2.12 __setpgid F -GLIBC_2.12 __sigaction F -GLIBC_2.12 __sigaddset F -GLIBC_2.12 __sigdelset F -GLIBC_2.12 __sigismember F -GLIBC_2.12 __signbit F -GLIBC_2.12 __signbitf F -GLIBC_2.12 __sigpause F -GLIBC_2.12 __sigsetjmp F -GLIBC_2.12 __sigsuspend F -GLIBC_2.12 __snprintf_chk F -GLIBC_2.12 __sprintf_chk F -GLIBC_2.12 __stack_chk_fail F -GLIBC_2.12 __statfs F -GLIBC_2.12 __stpcpy F -GLIBC_2.12 __stpcpy_chk F -GLIBC_2.12 __stpcpy_small F -GLIBC_2.12 __stpncpy F -GLIBC_2.12 __stpncpy_chk F -GLIBC_2.12 __strcasecmp F -GLIBC_2.12 __strcasecmp_l F -GLIBC_2.12 __strcasestr F -GLIBC_2.12 __strcat_chk F -GLIBC_2.12 __strcoll_l F -GLIBC_2.12 __strcpy_chk F -GLIBC_2.12 __strcpy_small F -GLIBC_2.12 __strcspn_c1 F -GLIBC_2.12 __strcspn_c2 F -GLIBC_2.12 __strcspn_c3 F -GLIBC_2.12 __strdup F -GLIBC_2.12 __strerror_r F -GLIBC_2.12 __strfmon_l F -GLIBC_2.12 __strftime_l F -GLIBC_2.12 __strncasecmp_l F -GLIBC_2.12 __strncat_chk F -GLIBC_2.12 __strncpy_chk F -GLIBC_2.12 __strndup F -GLIBC_2.12 __strpbrk_c2 F -GLIBC_2.12 __strpbrk_c3 F -GLIBC_2.12 __strsep_1c F -GLIBC_2.12 __strsep_2c F -GLIBC_2.12 __strsep_3c F -GLIBC_2.12 __strsep_g F -GLIBC_2.12 __strspn_c1 F -GLIBC_2.12 __strspn_c2 F -GLIBC_2.12 __strspn_c3 F -GLIBC_2.12 __strtod_internal F -GLIBC_2.12 __strtod_l F -GLIBC_2.12 __strtof_internal F -GLIBC_2.12 __strtof_l F -GLIBC_2.12 __strtok_r F -GLIBC_2.12 __strtok_r_1c F -GLIBC_2.12 __strtol_internal F -GLIBC_2.12 __strtol_l F -GLIBC_2.12 __strtold_internal F -GLIBC_2.12 __strtold_l F -GLIBC_2.12 __strtoll_internal F -GLIBC_2.12 __strtoll_l F -GLIBC_2.12 __strtoul_internal F -GLIBC_2.12 __strtoul_l F -GLIBC_2.12 __strtoull_internal F -GLIBC_2.12 __strtoull_l F -GLIBC_2.12 __strverscmp F -GLIBC_2.12 __strxfrm_l F -GLIBC_2.12 __swprintf_chk F -GLIBC_2.12 __sysconf F -GLIBC_2.12 __syslog_chk F -GLIBC_2.12 __sysv_signal F -GLIBC_2.12 __timezone D 0x8 -GLIBC_2.12 __toascii_l F -GLIBC_2.12 __tolower_l F -GLIBC_2.12 __toupper_l F -GLIBC_2.12 __towctrans F -GLIBC_2.12 __towctrans_l F -GLIBC_2.12 __towlower_l F -GLIBC_2.12 __towupper_l F -GLIBC_2.12 __ttyname_r_chk F -GLIBC_2.12 __tzname D 0x10 -GLIBC_2.12 __uflow F -GLIBC_2.12 __underflow F -GLIBC_2.12 __uselocale F -GLIBC_2.12 __vasprintf_chk F -GLIBC_2.12 __vdprintf_chk F -GLIBC_2.12 __vfork F -GLIBC_2.12 __vfprintf_chk F -GLIBC_2.12 __vfscanf F -GLIBC_2.12 __vfwprintf_chk F -GLIBC_2.12 __vprintf_chk F -GLIBC_2.12 __vsnprintf F -GLIBC_2.12 __vsnprintf_chk F -GLIBC_2.12 __vsprintf_chk F -GLIBC_2.12 __vsscanf F -GLIBC_2.12 __vswprintf_chk F -GLIBC_2.12 __vsyslog_chk F -GLIBC_2.12 __vwprintf_chk F -GLIBC_2.12 __wait F -GLIBC_2.12 __waitpid F -GLIBC_2.12 __wcpcpy_chk F -GLIBC_2.12 __wcpncpy_chk F -GLIBC_2.12 __wcrtomb_chk F -GLIBC_2.12 __wcscasecmp_l F -GLIBC_2.12 __wcscat_chk F -GLIBC_2.12 __wcscoll_l F -GLIBC_2.12 __wcscpy_chk F -GLIBC_2.12 __wcsftime_l F -GLIBC_2.12 __wcsncasecmp_l F -GLIBC_2.12 __wcsncat_chk F -GLIBC_2.12 __wcsncpy_chk F -GLIBC_2.12 __wcsnrtombs_chk F -GLIBC_2.12 __wcsrtombs_chk F -GLIBC_2.12 __wcstod_internal F -GLIBC_2.12 __wcstod_l F -GLIBC_2.12 __wcstof_internal F -GLIBC_2.12 __wcstof_l F -GLIBC_2.12 __wcstol_internal F -GLIBC_2.12 __wcstol_l F -GLIBC_2.12 __wcstold_internal F -GLIBC_2.12 __wcstold_l F -GLIBC_2.12 __wcstoll_internal F -GLIBC_2.12 __wcstoll_l F -GLIBC_2.12 __wcstombs_chk F -GLIBC_2.12 __wcstoul_internal F -GLIBC_2.12 __wcstoul_l F -GLIBC_2.12 __wcstoull_internal F -GLIBC_2.12 __wcstoull_l F -GLIBC_2.12 __wcsxfrm_l F -GLIBC_2.12 __wctomb_chk F -GLIBC_2.12 __wctrans_l F -GLIBC_2.12 __wctype_l F -GLIBC_2.12 __wmemcpy_chk F -GLIBC_2.12 __wmemmove_chk F -GLIBC_2.12 __wmempcpy_chk F -GLIBC_2.12 __wmemset_chk F -GLIBC_2.12 __woverflow F -GLIBC_2.12 __wprintf_chk F -GLIBC_2.12 __write F -GLIBC_2.12 __wuflow F -GLIBC_2.12 __wunderflow F -GLIBC_2.12 __xmknod F -GLIBC_2.12 __xmknodat F -GLIBC_2.12 __xpg_basename F -GLIBC_2.12 __xpg_sigpause F -GLIBC_2.12 __xpg_strerror_r F -GLIBC_2.12 __xstat F -GLIBC_2.12 __xstat64 F -GLIBC_2.12 _authenticate F -GLIBC_2.12 _dl_mcount_wrapper F -GLIBC_2.12 _dl_mcount_wrapper_check F -GLIBC_2.12 _environ D 0x8 -GLIBC_2.12 _exit F -GLIBC_2.12 _flush_cache F -GLIBC_2.12 _flushlbf F -GLIBC_2.12 _libc_intl_domainname D 0x5 -GLIBC_2.12 _longjmp F -GLIBC_2.12 _mcleanup F -GLIBC_2.12 _mcount F -GLIBC_2.12 _nl_default_dirname D 0x12 -GLIBC_2.12 _nl_domain_bindings D 0x8 -GLIBC_2.12 _nl_msg_cat_cntr D 0x4 -GLIBC_2.12 _null_auth D 0x18 -GLIBC_2.12 _obstack_allocated_p F -GLIBC_2.12 _obstack_begin F -GLIBC_2.12 _obstack_begin_1 F -GLIBC_2.12 _obstack_free F -GLIBC_2.12 _obstack_memory_used F -GLIBC_2.12 _obstack_newchunk F -GLIBC_2.12 _res D 0x238 -GLIBC_2.12 _res_hconf D 0x48 -GLIBC_2.12 _rpc_dtablesize F -GLIBC_2.12 _seterr_reply F -GLIBC_2.12 _setjmp F -GLIBC_2.12 _sys_errlist D 0x438 -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 _sys_siglist D 0x208 -GLIBC_2.12 _tolower F -GLIBC_2.12 _toupper F -GLIBC_2.12 a64l F -GLIBC_2.12 abort F -GLIBC_2.12 abs F -GLIBC_2.12 accept F -GLIBC_2.12 accept4 F -GLIBC_2.12 access F -GLIBC_2.12 acct F -GLIBC_2.12 addmntent F -GLIBC_2.12 addseverity F -GLIBC_2.12 adjtime F -GLIBC_2.12 adjtimex F -GLIBC_2.12 advance F -GLIBC_2.12 alarm F -GLIBC_2.12 alphasort F -GLIBC_2.12 alphasort64 F -GLIBC_2.12 argp_err_exit_status D 0x4 -GLIBC_2.12 argp_error F -GLIBC_2.12 argp_failure F -GLIBC_2.12 argp_help F -GLIBC_2.12 argp_parse F -GLIBC_2.12 argp_program_bug_address D 0x8 -GLIBC_2.12 argp_program_version D 0x8 -GLIBC_2.12 argp_program_version_hook D 0x8 -GLIBC_2.12 argp_state_help F -GLIBC_2.12 argp_usage F -GLIBC_2.12 argz_add F -GLIBC_2.12 argz_add_sep F -GLIBC_2.12 argz_append F -GLIBC_2.12 argz_count F -GLIBC_2.12 argz_create F -GLIBC_2.12 argz_create_sep F -GLIBC_2.12 argz_delete F -GLIBC_2.12 argz_extract F -GLIBC_2.12 argz_insert F -GLIBC_2.12 argz_next F -GLIBC_2.12 argz_replace F -GLIBC_2.12 argz_stringify F -GLIBC_2.12 asctime F -GLIBC_2.12 asctime_r F -GLIBC_2.12 asprintf F -GLIBC_2.12 atof F -GLIBC_2.12 atoi F -GLIBC_2.12 atol F -GLIBC_2.12 atoll F -GLIBC_2.12 authdes_create F -GLIBC_2.12 authdes_getucred F -GLIBC_2.12 authdes_pk_create F -GLIBC_2.12 authnone_create F -GLIBC_2.12 authunix_create F -GLIBC_2.12 authunix_create_default F -GLIBC_2.12 backtrace F -GLIBC_2.12 backtrace_symbols F -GLIBC_2.12 backtrace_symbols_fd F -GLIBC_2.12 basename F -GLIBC_2.12 bcmp F -GLIBC_2.12 bcopy F -GLIBC_2.12 bdflush F -GLIBC_2.12 bind F -GLIBC_2.12 bind_textdomain_codeset F -GLIBC_2.12 bindresvport F -GLIBC_2.12 bindtextdomain F -GLIBC_2.12 brk F -GLIBC_2.12 bsd_signal F -GLIBC_2.12 bsearch F -GLIBC_2.12 btowc F -GLIBC_2.12 bzero F -GLIBC_2.12 cacheflush F -GLIBC_2.12 calloc F -GLIBC_2.12 callrpc F -GLIBC_2.12 canonicalize_file_name F -GLIBC_2.12 capget F -GLIBC_2.12 capset F -GLIBC_2.12 catclose F -GLIBC_2.12 catgets F -GLIBC_2.12 catopen F -GLIBC_2.12 cbc_crypt F -GLIBC_2.12 cfgetispeed F -GLIBC_2.12 cfgetospeed F -GLIBC_2.12 cfmakeraw F -GLIBC_2.12 cfree F -GLIBC_2.12 cfsetispeed F -GLIBC_2.12 cfsetospeed F -GLIBC_2.12 cfsetspeed F -GLIBC_2.12 chdir F -GLIBC_2.12 chflags F -GLIBC_2.12 chmod F -GLIBC_2.12 chown F -GLIBC_2.12 chroot F -GLIBC_2.12 clearenv F -GLIBC_2.12 clearerr F -GLIBC_2.12 clearerr_unlocked F -GLIBC_2.12 clnt_broadcast F -GLIBC_2.12 clnt_create F -GLIBC_2.12 clnt_pcreateerror F -GLIBC_2.12 clnt_perrno F -GLIBC_2.12 clnt_perror F -GLIBC_2.12 clnt_spcreateerror F -GLIBC_2.12 clnt_sperrno F -GLIBC_2.12 clnt_sperror F -GLIBC_2.12 clntraw_create F -GLIBC_2.12 clnttcp_create F -GLIBC_2.12 clntudp_bufcreate F -GLIBC_2.12 clntudp_create F -GLIBC_2.12 clntunix_create F -GLIBC_2.12 clock F -GLIBC_2.12 clone F -GLIBC_2.12 close F -GLIBC_2.12 closedir F -GLIBC_2.12 closelog F -GLIBC_2.12 confstr F -GLIBC_2.12 connect F -GLIBC_2.12 copysign F -GLIBC_2.12 copysignf F -GLIBC_2.12 copysignl F -GLIBC_2.12 creat F -GLIBC_2.12 creat64 F -GLIBC_2.12 create_module F -GLIBC_2.12 ctermid F -GLIBC_2.12 ctime F -GLIBC_2.12 ctime_r F -GLIBC_2.12 cuserid F -GLIBC_2.12 daemon F -GLIBC_2.12 daylight D 0x4 -GLIBC_2.12 dcgettext F -GLIBC_2.12 dcngettext F -GLIBC_2.12 delete_module F -GLIBC_2.12 des_setparity F -GLIBC_2.12 dgettext F -GLIBC_2.12 difftime F -GLIBC_2.12 dirfd F -GLIBC_2.12 dirname F -GLIBC_2.12 div F -GLIBC_2.12 dl_iterate_phdr F -GLIBC_2.12 dngettext F -GLIBC_2.12 dprintf F -GLIBC_2.12 drand48 F -GLIBC_2.12 drand48_r F -GLIBC_2.12 dup F -GLIBC_2.12 dup2 F -GLIBC_2.12 dup3 F -GLIBC_2.12 duplocale F -GLIBC_2.12 dysize F -GLIBC_2.12 eaccess F -GLIBC_2.12 ecb_crypt F -GLIBC_2.12 ecvt F -GLIBC_2.12 ecvt_r F -GLIBC_2.12 endaliasent F -GLIBC_2.12 endfsent F -GLIBC_2.12 endgrent F -GLIBC_2.12 endhostent F -GLIBC_2.12 endmntent F -GLIBC_2.12 endnetent F -GLIBC_2.12 endnetgrent F -GLIBC_2.12 endprotoent F -GLIBC_2.12 endpwent F -GLIBC_2.12 endrpcent F -GLIBC_2.12 endservent F -GLIBC_2.12 endsgent F -GLIBC_2.12 endspent F -GLIBC_2.12 endttyent F -GLIBC_2.12 endusershell F -GLIBC_2.12 endutent F -GLIBC_2.12 endutxent F -GLIBC_2.12 environ D 0x8 -GLIBC_2.12 envz_add F -GLIBC_2.12 envz_entry F -GLIBC_2.12 envz_get F -GLIBC_2.12 envz_merge F -GLIBC_2.12 envz_remove F -GLIBC_2.12 envz_strip F -GLIBC_2.12 epoll_create F -GLIBC_2.12 epoll_create1 F -GLIBC_2.12 epoll_ctl F -GLIBC_2.12 epoll_pwait F -GLIBC_2.12 epoll_wait F -GLIBC_2.12 erand48 F -GLIBC_2.12 erand48_r F -GLIBC_2.12 err F -GLIBC_2.12 error F -GLIBC_2.12 error_at_line F -GLIBC_2.12 error_message_count D 0x4 -GLIBC_2.12 error_one_per_line D 0x4 -GLIBC_2.12 error_print_progname D 0x8 -GLIBC_2.12 errx F -GLIBC_2.12 ether_aton F -GLIBC_2.12 ether_aton_r F -GLIBC_2.12 ether_hostton F -GLIBC_2.12 ether_line F -GLIBC_2.12 ether_ntoa F -GLIBC_2.12 ether_ntoa_r F -GLIBC_2.12 ether_ntohost F -GLIBC_2.12 euidaccess F -GLIBC_2.12 eventfd F -GLIBC_2.12 eventfd_read F -GLIBC_2.12 eventfd_write F -GLIBC_2.12 execl F -GLIBC_2.12 execle F -GLIBC_2.12 execlp F -GLIBC_2.12 execv F -GLIBC_2.12 execve F -GLIBC_2.12 execvp F -GLIBC_2.12 execvpe F -GLIBC_2.12 exit F -GLIBC_2.12 faccessat F -GLIBC_2.12 fallocate F -GLIBC_2.12 fallocate64 F -GLIBC_2.12 fattach F -GLIBC_2.12 fchdir F -GLIBC_2.12 fchflags F -GLIBC_2.12 fchmod F -GLIBC_2.12 fchmodat F -GLIBC_2.12 fchown F -GLIBC_2.12 fchownat F -GLIBC_2.12 fclose F -GLIBC_2.12 fcloseall F -GLIBC_2.12 fcntl F -GLIBC_2.12 fcvt F -GLIBC_2.12 fcvt_r F -GLIBC_2.12 fdatasync F -GLIBC_2.12 fdetach F -GLIBC_2.12 fdopen F -GLIBC_2.12 fdopendir F -GLIBC_2.12 feof F -GLIBC_2.12 feof_unlocked F -GLIBC_2.12 ferror F -GLIBC_2.12 ferror_unlocked F -GLIBC_2.12 fexecve F -GLIBC_2.12 fflush F -GLIBC_2.12 fflush_unlocked F -GLIBC_2.12 ffs F -GLIBC_2.12 ffsl F -GLIBC_2.12 ffsll F -GLIBC_2.12 fgetc F -GLIBC_2.12 fgetc_unlocked F -GLIBC_2.12 fgetgrent F -GLIBC_2.12 fgetgrent_r F -GLIBC_2.12 fgetpos F -GLIBC_2.12 fgetpos64 F -GLIBC_2.12 fgetpwent F -GLIBC_2.12 fgetpwent_r F -GLIBC_2.12 fgets F -GLIBC_2.12 fgets_unlocked F -GLIBC_2.12 fgetsgent F -GLIBC_2.12 fgetsgent_r F -GLIBC_2.12 fgetspent F -GLIBC_2.12 fgetspent_r F -GLIBC_2.12 fgetwc F -GLIBC_2.12 fgetwc_unlocked F -GLIBC_2.12 fgetws F -GLIBC_2.12 fgetws_unlocked F -GLIBC_2.12 fgetxattr F -GLIBC_2.12 fileno F -GLIBC_2.12 fileno_unlocked F -GLIBC_2.12 finite F -GLIBC_2.12 finitef F -GLIBC_2.12 finitel F -GLIBC_2.12 flistxattr F -GLIBC_2.12 flock F -GLIBC_2.12 flockfile F -GLIBC_2.12 fmemopen F -GLIBC_2.12 fmtmsg F -GLIBC_2.12 fnmatch F -GLIBC_2.12 fopen F -GLIBC_2.12 fopen64 F -GLIBC_2.12 fopencookie F -GLIBC_2.12 fork F -GLIBC_2.12 fpathconf F -GLIBC_2.12 fprintf F -GLIBC_2.12 fputc F -GLIBC_2.12 fputc_unlocked F -GLIBC_2.12 fputs F -GLIBC_2.12 fputs_unlocked F -GLIBC_2.12 fputwc F -GLIBC_2.12 fputwc_unlocked F -GLIBC_2.12 fputws F -GLIBC_2.12 fputws_unlocked F -GLIBC_2.12 fread F -GLIBC_2.12 fread_unlocked F -GLIBC_2.12 free F -GLIBC_2.12 freeaddrinfo F -GLIBC_2.12 freeifaddrs F -GLIBC_2.12 freelocale F -GLIBC_2.12 fremovexattr F -GLIBC_2.12 freopen F -GLIBC_2.12 freopen64 F -GLIBC_2.12 frexp F -GLIBC_2.12 frexpf F -GLIBC_2.12 frexpl F -GLIBC_2.12 fscanf F -GLIBC_2.12 fseek F -GLIBC_2.12 fseeko F -GLIBC_2.12 fseeko64 F -GLIBC_2.12 fsetpos F -GLIBC_2.12 fsetpos64 F -GLIBC_2.12 fsetxattr F -GLIBC_2.12 fstatfs F -GLIBC_2.12 fstatfs64 F -GLIBC_2.12 fstatvfs F -GLIBC_2.12 fstatvfs64 F -GLIBC_2.12 fsync F -GLIBC_2.12 ftell F -GLIBC_2.12 ftello F -GLIBC_2.12 ftello64 F -GLIBC_2.12 ftime F -GLIBC_2.12 ftok F -GLIBC_2.12 ftruncate F -GLIBC_2.12 ftruncate64 F -GLIBC_2.12 ftrylockfile F -GLIBC_2.12 fts_children F -GLIBC_2.12 fts_close F -GLIBC_2.12 fts_open F -GLIBC_2.12 fts_read F -GLIBC_2.12 fts_set F -GLIBC_2.12 ftw F -GLIBC_2.12 ftw64 F -GLIBC_2.12 funlockfile F -GLIBC_2.12 futimens F -GLIBC_2.12 futimes F -GLIBC_2.12 futimesat F -GLIBC_2.12 fwide F -GLIBC_2.12 fwprintf F -GLIBC_2.12 fwrite F -GLIBC_2.12 fwrite_unlocked F -GLIBC_2.12 fwscanf F -GLIBC_2.12 gai_strerror F -GLIBC_2.12 gcvt F -GLIBC_2.12 get_avphys_pages F -GLIBC_2.12 get_current_dir_name F -GLIBC_2.12 get_kernel_syms F -GLIBC_2.12 get_myaddress F -GLIBC_2.12 get_nprocs F -GLIBC_2.12 get_nprocs_conf F -GLIBC_2.12 get_phys_pages F -GLIBC_2.12 getaddrinfo F -GLIBC_2.12 getaliasbyname F -GLIBC_2.12 getaliasbyname_r F -GLIBC_2.12 getaliasent F -GLIBC_2.12 getaliasent_r F -GLIBC_2.12 getc F -GLIBC_2.12 getc_unlocked F -GLIBC_2.12 getchar F -GLIBC_2.12 getchar_unlocked F -GLIBC_2.12 getcontext F -GLIBC_2.12 getcwd F -GLIBC_2.12 getdate F -GLIBC_2.12 getdate_err D 0x4 -GLIBC_2.12 getdate_r F -GLIBC_2.12 getdelim F -GLIBC_2.12 getdirentries F -GLIBC_2.12 getdirentries64 F -GLIBC_2.12 getdomainname F -GLIBC_2.12 getdtablesize F -GLIBC_2.12 getegid F -GLIBC_2.12 getenv F -GLIBC_2.12 geteuid F -GLIBC_2.12 getfsent F -GLIBC_2.12 getfsfile F -GLIBC_2.12 getfsspec F -GLIBC_2.12 getgid F -GLIBC_2.12 getgrent F -GLIBC_2.12 getgrent_r F -GLIBC_2.12 getgrgid F -GLIBC_2.12 getgrgid_r F -GLIBC_2.12 getgrnam F -GLIBC_2.12 getgrnam_r F -GLIBC_2.12 getgrouplist F -GLIBC_2.12 getgroups F -GLIBC_2.12 gethostbyaddr F -GLIBC_2.12 gethostbyaddr_r F -GLIBC_2.12 gethostbyname F -GLIBC_2.12 gethostbyname2 F -GLIBC_2.12 gethostbyname2_r F -GLIBC_2.12 gethostbyname_r F -GLIBC_2.12 gethostent F -GLIBC_2.12 gethostent_r F -GLIBC_2.12 gethostid F -GLIBC_2.12 gethostname F -GLIBC_2.12 getifaddrs F -GLIBC_2.12 getipv4sourcefilter F -GLIBC_2.12 getitimer F -GLIBC_2.12 getline F -GLIBC_2.12 getloadavg F -GLIBC_2.12 getlogin F -GLIBC_2.12 getlogin_r F -GLIBC_2.12 getmntent F -GLIBC_2.12 getmntent_r F -GLIBC_2.12 getmsg F -GLIBC_2.12 getnameinfo F -GLIBC_2.12 getnetbyaddr F -GLIBC_2.12 getnetbyaddr_r F -GLIBC_2.12 getnetbyname F -GLIBC_2.12 getnetbyname_r F -GLIBC_2.12 getnetent F -GLIBC_2.12 getnetent_r F -GLIBC_2.12 getnetgrent F -GLIBC_2.12 getnetgrent_r F -GLIBC_2.12 getnetname F -GLIBC_2.12 getopt F -GLIBC_2.12 getopt_long F -GLIBC_2.12 getopt_long_only F -GLIBC_2.12 getpagesize F -GLIBC_2.12 getpass F -GLIBC_2.12 getpeername F -GLIBC_2.12 getpgid F -GLIBC_2.12 getpgrp F -GLIBC_2.12 getpid F -GLIBC_2.12 getpmsg F -GLIBC_2.12 getppid F -GLIBC_2.12 getpriority F -GLIBC_2.12 getprotobyname F -GLIBC_2.12 getprotobyname_r F -GLIBC_2.12 getprotobynumber F -GLIBC_2.12 getprotobynumber_r F -GLIBC_2.12 getprotoent F -GLIBC_2.12 getprotoent_r F -GLIBC_2.12 getpt F -GLIBC_2.12 getpublickey F -GLIBC_2.12 getpw F -GLIBC_2.12 getpwent F -GLIBC_2.12 getpwent_r F -GLIBC_2.12 getpwnam F -GLIBC_2.12 getpwnam_r F -GLIBC_2.12 getpwuid F -GLIBC_2.12 getpwuid_r F -GLIBC_2.12 getresgid F -GLIBC_2.12 getresuid F -GLIBC_2.12 getrlimit F -GLIBC_2.12 getrlimit64 F -GLIBC_2.12 getrpcbyname F -GLIBC_2.12 getrpcbyname_r F -GLIBC_2.12 getrpcbynumber F -GLIBC_2.12 getrpcbynumber_r F -GLIBC_2.12 getrpcent F -GLIBC_2.12 getrpcent_r F -GLIBC_2.12 getrpcport F -GLIBC_2.12 getrusage F -GLIBC_2.12 gets F -GLIBC_2.12 getsecretkey F -GLIBC_2.12 getservbyname F -GLIBC_2.12 getservbyname_r F -GLIBC_2.12 getservbyport F -GLIBC_2.12 getservbyport_r F -GLIBC_2.12 getservent F -GLIBC_2.12 getservent_r F -GLIBC_2.12 getsgent F -GLIBC_2.12 getsgent_r F -GLIBC_2.12 getsgnam F -GLIBC_2.12 getsgnam_r F -GLIBC_2.12 getsid F -GLIBC_2.12 getsockname F -GLIBC_2.12 getsockopt F -GLIBC_2.12 getsourcefilter F -GLIBC_2.12 getspent F -GLIBC_2.12 getspent_r F -GLIBC_2.12 getspnam F -GLIBC_2.12 getspnam_r F -GLIBC_2.12 getsubopt F -GLIBC_2.12 gettext F -GLIBC_2.12 gettimeofday F -GLIBC_2.12 getttyent F -GLIBC_2.12 getttynam F -GLIBC_2.12 getuid F -GLIBC_2.12 getusershell F -GLIBC_2.12 getutent F -GLIBC_2.12 getutent_r F -GLIBC_2.12 getutid F -GLIBC_2.12 getutid_r F -GLIBC_2.12 getutline F -GLIBC_2.12 getutline_r F -GLIBC_2.12 getutmp F -GLIBC_2.12 getutmpx F -GLIBC_2.12 getutxent F -GLIBC_2.12 getutxid F -GLIBC_2.12 getutxline F -GLIBC_2.12 getw F -GLIBC_2.12 getwc F -GLIBC_2.12 getwc_unlocked F -GLIBC_2.12 getwchar F -GLIBC_2.12 getwchar_unlocked F -GLIBC_2.12 getwd F -GLIBC_2.12 getxattr F -GLIBC_2.12 glob F -GLIBC_2.12 glob64 F -GLIBC_2.12 glob_pattern_p F -GLIBC_2.12 globfree F -GLIBC_2.12 globfree64 F -GLIBC_2.12 gmtime F -GLIBC_2.12 gmtime_r F -GLIBC_2.12 gnu_dev_major F -GLIBC_2.12 gnu_dev_makedev F -GLIBC_2.12 gnu_dev_minor F -GLIBC_2.12 gnu_get_libc_release F -GLIBC_2.12 gnu_get_libc_version F -GLIBC_2.12 grantpt F -GLIBC_2.12 group_member F -GLIBC_2.12 gsignal F -GLIBC_2.12 gtty F -GLIBC_2.12 h_errlist D 0x28 -GLIBC_2.12 h_nerr D 0x4 -GLIBC_2.12 hasmntopt F -GLIBC_2.12 hcreate F -GLIBC_2.12 hcreate_r F -GLIBC_2.12 hdestroy F -GLIBC_2.12 hdestroy_r F -GLIBC_2.12 herror F -GLIBC_2.12 host2netname F -GLIBC_2.12 hsearch F -GLIBC_2.12 hsearch_r F -GLIBC_2.12 hstrerror F -GLIBC_2.12 htonl F -GLIBC_2.12 htons F -GLIBC_2.12 iconv F -GLIBC_2.12 iconv_close F -GLIBC_2.12 iconv_open F -GLIBC_2.12 if_freenameindex F -GLIBC_2.12 if_indextoname F -GLIBC_2.12 if_nameindex F -GLIBC_2.12 if_nametoindex F -GLIBC_2.12 imaxabs F -GLIBC_2.12 imaxdiv F -GLIBC_2.12 in6addr_any D 0x10 -GLIBC_2.12 in6addr_loopback D 0x10 -GLIBC_2.12 index F -GLIBC_2.12 inet6_opt_append F -GLIBC_2.12 inet6_opt_find F -GLIBC_2.12 inet6_opt_finish F -GLIBC_2.12 inet6_opt_get_val F -GLIBC_2.12 inet6_opt_init F -GLIBC_2.12 inet6_opt_next F -GLIBC_2.12 inet6_opt_set_val F -GLIBC_2.12 inet6_option_alloc F -GLIBC_2.12 inet6_option_append F -GLIBC_2.12 inet6_option_find F -GLIBC_2.12 inet6_option_init F -GLIBC_2.12 inet6_option_next F -GLIBC_2.12 inet6_option_space F -GLIBC_2.12 inet6_rth_add F -GLIBC_2.12 inet6_rth_getaddr F -GLIBC_2.12 inet6_rth_init F -GLIBC_2.12 inet6_rth_reverse F -GLIBC_2.12 inet6_rth_segments F -GLIBC_2.12 inet6_rth_space F -GLIBC_2.12 inet_addr F -GLIBC_2.12 inet_aton F -GLIBC_2.12 inet_lnaof F -GLIBC_2.12 inet_makeaddr F -GLIBC_2.12 inet_netof F -GLIBC_2.12 inet_network F -GLIBC_2.12 inet_nsap_addr F -GLIBC_2.12 inet_nsap_ntoa F -GLIBC_2.12 inet_ntoa F -GLIBC_2.12 inet_ntop F -GLIBC_2.12 inet_pton F -GLIBC_2.12 init_module F -GLIBC_2.12 initgroups F -GLIBC_2.12 initstate F -GLIBC_2.12 initstate_r F -GLIBC_2.12 innetgr F -GLIBC_2.12 inotify_add_watch F -GLIBC_2.12 inotify_init F -GLIBC_2.12 inotify_init1 F -GLIBC_2.12 inotify_rm_watch F -GLIBC_2.12 insque F -GLIBC_2.12 ioctl F -GLIBC_2.12 iruserok F -GLIBC_2.12 iruserok_af F -GLIBC_2.12 isalnum F -GLIBC_2.12 isalnum_l F -GLIBC_2.12 isalpha F -GLIBC_2.12 isalpha_l F -GLIBC_2.12 isascii F -GLIBC_2.12 isastream F -GLIBC_2.12 isatty F -GLIBC_2.12 isblank F -GLIBC_2.12 isblank_l F -GLIBC_2.12 iscntrl F -GLIBC_2.12 iscntrl_l F -GLIBC_2.12 isctype F -GLIBC_2.12 isdigit F -GLIBC_2.12 isdigit_l F -GLIBC_2.12 isfdtype F -GLIBC_2.12 isgraph F -GLIBC_2.12 isgraph_l F -GLIBC_2.12 isinf F -GLIBC_2.12 isinff F -GLIBC_2.12 isinfl F -GLIBC_2.12 islower F -GLIBC_2.12 islower_l F -GLIBC_2.12 isnan F -GLIBC_2.12 isnanf F -GLIBC_2.12 isnanl F -GLIBC_2.12 isprint F -GLIBC_2.12 isprint_l F -GLIBC_2.12 ispunct F -GLIBC_2.12 ispunct_l F -GLIBC_2.12 isspace F -GLIBC_2.12 isspace_l F -GLIBC_2.12 isupper F -GLIBC_2.12 isupper_l F -GLIBC_2.12 iswalnum F -GLIBC_2.12 iswalnum_l F -GLIBC_2.12 iswalpha F -GLIBC_2.12 iswalpha_l F -GLIBC_2.12 iswblank F -GLIBC_2.12 iswblank_l F -GLIBC_2.12 iswcntrl F -GLIBC_2.12 iswcntrl_l F -GLIBC_2.12 iswctype F -GLIBC_2.12 iswctype_l F -GLIBC_2.12 iswdigit F -GLIBC_2.12 iswdigit_l F -GLIBC_2.12 iswgraph F -GLIBC_2.12 iswgraph_l F -GLIBC_2.12 iswlower F -GLIBC_2.12 iswlower_l F -GLIBC_2.12 iswprint F -GLIBC_2.12 iswprint_l F -GLIBC_2.12 iswpunct F -GLIBC_2.12 iswpunct_l F -GLIBC_2.12 iswspace F -GLIBC_2.12 iswspace_l F -GLIBC_2.12 iswupper F -GLIBC_2.12 iswupper_l F -GLIBC_2.12 iswxdigit F -GLIBC_2.12 iswxdigit_l F -GLIBC_2.12 isxdigit F -GLIBC_2.12 isxdigit_l F -GLIBC_2.12 jrand48 F -GLIBC_2.12 jrand48_r F -GLIBC_2.12 key_decryptsession F -GLIBC_2.12 key_decryptsession_pk F -GLIBC_2.12 key_encryptsession F -GLIBC_2.12 key_encryptsession_pk F -GLIBC_2.12 key_gendes F -GLIBC_2.12 key_get_conv F -GLIBC_2.12 key_secretkey_is_set F -GLIBC_2.12 key_setnet F -GLIBC_2.12 key_setsecret F -GLIBC_2.12 kill F -GLIBC_2.12 killpg F -GLIBC_2.12 klogctl F -GLIBC_2.12 l64a F -GLIBC_2.12 labs F -GLIBC_2.12 lchmod F -GLIBC_2.12 lchown F -GLIBC_2.12 lckpwdf F -GLIBC_2.12 lcong48 F -GLIBC_2.12 lcong48_r F -GLIBC_2.12 ldexp F -GLIBC_2.12 ldexpf F -GLIBC_2.12 ldexpl F -GLIBC_2.12 ldiv F -GLIBC_2.12 lfind F -GLIBC_2.12 lgetxattr F -GLIBC_2.12 link F -GLIBC_2.12 linkat F -GLIBC_2.12 listen F -GLIBC_2.12 listxattr F -GLIBC_2.12 llabs F -GLIBC_2.12 lldiv F -GLIBC_2.12 llistxattr F -GLIBC_2.12 llseek F -GLIBC_2.12 loc1 D 0x8 -GLIBC_2.12 loc2 D 0x8 -GLIBC_2.12 localeconv F -GLIBC_2.12 localtime F -GLIBC_2.12 localtime_r F -GLIBC_2.12 lockf F -GLIBC_2.12 lockf64 F -GLIBC_2.12 locs D 0x8 -GLIBC_2.12 longjmp F -GLIBC_2.12 lrand48 F -GLIBC_2.12 lrand48_r F -GLIBC_2.12 lremovexattr F -GLIBC_2.12 lsearch F -GLIBC_2.12 lseek F -GLIBC_2.12 lseek64 F -GLIBC_2.12 lsetxattr F -GLIBC_2.12 lutimes F -GLIBC_2.12 madvise F -GLIBC_2.12 makecontext F -GLIBC_2.12 mallinfo F -GLIBC_2.12 malloc F -GLIBC_2.12 malloc_get_state F -GLIBC_2.12 malloc_info F -GLIBC_2.12 malloc_set_state F -GLIBC_2.12 malloc_stats F -GLIBC_2.12 malloc_trim F -GLIBC_2.12 malloc_usable_size F -GLIBC_2.12 mallopt F -GLIBC_2.12 mallwatch D 0x8 -GLIBC_2.12 mblen F -GLIBC_2.12 mbrlen F -GLIBC_2.12 mbrtowc F -GLIBC_2.12 mbsinit F -GLIBC_2.12 mbsnrtowcs F -GLIBC_2.12 mbsrtowcs F -GLIBC_2.12 mbstowcs F -GLIBC_2.12 mbtowc F -GLIBC_2.12 mcheck F -GLIBC_2.12 mcheck_check_all F -GLIBC_2.12 mcheck_pedantic F -GLIBC_2.12 mcount F -GLIBC_2.12 memalign F -GLIBC_2.12 memccpy F -GLIBC_2.12 memchr F -GLIBC_2.12 memcmp F -GLIBC_2.12 memcpy F -GLIBC_2.12 memfrob F -GLIBC_2.12 memmem F -GLIBC_2.12 memmove F -GLIBC_2.12 mempcpy F -GLIBC_2.12 memrchr F -GLIBC_2.12 memset F -GLIBC_2.12 mincore F -GLIBC_2.12 mkdir F -GLIBC_2.12 mkdirat F -GLIBC_2.12 mkdtemp F -GLIBC_2.12 mkfifo F -GLIBC_2.12 mkfifoat F -GLIBC_2.12 mkostemp F -GLIBC_2.12 mkostemp64 F -GLIBC_2.12 mkostemps F -GLIBC_2.12 mkostemps64 F -GLIBC_2.12 mkstemp F -GLIBC_2.12 mkstemp64 F -GLIBC_2.12 mkstemps F -GLIBC_2.12 mkstemps64 F -GLIBC_2.12 mktemp F -GLIBC_2.12 mktime F -GLIBC_2.12 mlock F -GLIBC_2.12 mlockall F -GLIBC_2.12 mmap F -GLIBC_2.12 mmap64 F -GLIBC_2.12 modf F -GLIBC_2.12 modff F -GLIBC_2.12 modfl F -GLIBC_2.12 moncontrol F -GLIBC_2.12 monstartup F -GLIBC_2.12 mount F -GLIBC_2.12 mprobe F -GLIBC_2.12 mprotect F -GLIBC_2.12 mrand48 F -GLIBC_2.12 mrand48_r F -GLIBC_2.12 mremap F -GLIBC_2.12 msgctl F -GLIBC_2.12 msgget F -GLIBC_2.12 msgrcv F -GLIBC_2.12 msgsnd F -GLIBC_2.12 msync F -GLIBC_2.12 mtrace F -GLIBC_2.12 munlock F -GLIBC_2.12 munlockall F -GLIBC_2.12 munmap F -GLIBC_2.12 muntrace F -GLIBC_2.12 nanosleep F -GLIBC_2.12 netname2host F -GLIBC_2.12 netname2user F -GLIBC_2.12 newlocale F -GLIBC_2.12 nfsservctl F -GLIBC_2.12 nftw F -GLIBC_2.12 nftw64 F -GLIBC_2.12 ngettext F -GLIBC_2.12 nice F -GLIBC_2.12 nl_langinfo F -GLIBC_2.12 nl_langinfo_l F -GLIBC_2.12 nrand48 F -GLIBC_2.12 nrand48_r F -GLIBC_2.12 ntohl F -GLIBC_2.12 ntohs F -GLIBC_2.12 ntp_adjtime F -GLIBC_2.12 ntp_gettime F -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 obstack_alloc_failed_handler D 0x8 -GLIBC_2.12 obstack_exit_failure D 0x4 -GLIBC_2.12 obstack_free F -GLIBC_2.12 obstack_printf F -GLIBC_2.12 obstack_vprintf F -GLIBC_2.12 on_exit F -GLIBC_2.12 open F -GLIBC_2.12 open64 F -GLIBC_2.12 open_memstream F -GLIBC_2.12 open_wmemstream F -GLIBC_2.12 openat F -GLIBC_2.12 openat64 F -GLIBC_2.12 opendir F -GLIBC_2.12 openlog F -GLIBC_2.12 optarg D 0x8 -GLIBC_2.12 opterr D 0x4 -GLIBC_2.12 optind D 0x4 -GLIBC_2.12 optopt D 0x4 -GLIBC_2.12 parse_printf_format F -GLIBC_2.12 passwd2des F -GLIBC_2.12 pathconf F -GLIBC_2.12 pause F -GLIBC_2.12 pclose F -GLIBC_2.12 perror F -GLIBC_2.12 personality F -GLIBC_2.12 pipe F -GLIBC_2.12 pipe2 F -GLIBC_2.12 pivot_root F -GLIBC_2.12 pmap_getmaps F -GLIBC_2.12 pmap_getport F -GLIBC_2.12 pmap_rmtcall F -GLIBC_2.12 pmap_set F -GLIBC_2.12 pmap_unset F -GLIBC_2.12 poll F -GLIBC_2.12 popen F -GLIBC_2.12 posix_fadvise F -GLIBC_2.12 posix_fadvise64 F -GLIBC_2.12 posix_fallocate F -GLIBC_2.12 posix_fallocate64 F -GLIBC_2.12 posix_madvise F -GLIBC_2.12 posix_memalign F -GLIBC_2.12 posix_openpt F -GLIBC_2.12 posix_spawn F -GLIBC_2.12 posix_spawn_file_actions_addclose F -GLIBC_2.12 posix_spawn_file_actions_adddup2 F -GLIBC_2.12 posix_spawn_file_actions_addopen F -GLIBC_2.12 posix_spawn_file_actions_destroy F -GLIBC_2.12 posix_spawn_file_actions_init F -GLIBC_2.12 posix_spawnattr_destroy F -GLIBC_2.12 posix_spawnattr_getflags F -GLIBC_2.12 posix_spawnattr_getpgroup F -GLIBC_2.12 posix_spawnattr_getschedparam F -GLIBC_2.12 posix_spawnattr_getschedpolicy F -GLIBC_2.12 posix_spawnattr_getsigdefault F -GLIBC_2.12 posix_spawnattr_getsigmask F -GLIBC_2.12 posix_spawnattr_init F -GLIBC_2.12 posix_spawnattr_setflags F -GLIBC_2.12 posix_spawnattr_setpgroup F -GLIBC_2.12 posix_spawnattr_setschedparam F -GLIBC_2.12 posix_spawnattr_setschedpolicy F -GLIBC_2.12 posix_spawnattr_setsigdefault F -GLIBC_2.12 posix_spawnattr_setsigmask F -GLIBC_2.12 posix_spawnp F -GLIBC_2.12 ppoll F -GLIBC_2.12 prctl F -GLIBC_2.12 pread F -GLIBC_2.12 pread64 F -GLIBC_2.12 preadv F -GLIBC_2.12 preadv64 F -GLIBC_2.12 printf F -GLIBC_2.12 printf_size F -GLIBC_2.12 printf_size_info F -GLIBC_2.12 profil F -GLIBC_2.12 program_invocation_name D 0x8 -GLIBC_2.12 program_invocation_short_name D 0x8 -GLIBC_2.12 pselect F -GLIBC_2.12 psiginfo F -GLIBC_2.12 psignal F -GLIBC_2.12 pthread_attr_destroy F -GLIBC_2.12 pthread_attr_getdetachstate F -GLIBC_2.12 pthread_attr_getinheritsched F -GLIBC_2.12 pthread_attr_getschedparam F -GLIBC_2.12 pthread_attr_getschedpolicy F -GLIBC_2.12 pthread_attr_getscope F -GLIBC_2.12 pthread_attr_init F -GLIBC_2.12 pthread_attr_setdetachstate F -GLIBC_2.12 pthread_attr_setinheritsched F -GLIBC_2.12 pthread_attr_setschedparam F -GLIBC_2.12 pthread_attr_setschedpolicy F -GLIBC_2.12 pthread_attr_setscope F -GLIBC_2.12 pthread_cond_broadcast F -GLIBC_2.12 pthread_cond_destroy F -GLIBC_2.12 pthread_cond_init F -GLIBC_2.12 pthread_cond_signal F -GLIBC_2.12 pthread_cond_timedwait F -GLIBC_2.12 pthread_cond_wait F -GLIBC_2.12 pthread_condattr_destroy F -GLIBC_2.12 pthread_condattr_init F -GLIBC_2.12 pthread_equal F -GLIBC_2.12 pthread_exit F -GLIBC_2.12 pthread_getschedparam F -GLIBC_2.12 pthread_mutex_destroy F -GLIBC_2.12 pthread_mutex_init F -GLIBC_2.12 pthread_mutex_lock F -GLIBC_2.12 pthread_mutex_unlock F -GLIBC_2.12 pthread_self F -GLIBC_2.12 pthread_setcancelstate F -GLIBC_2.12 pthread_setcanceltype F -GLIBC_2.12 pthread_setschedparam F -GLIBC_2.12 ptrace F -GLIBC_2.12 ptsname F -GLIBC_2.12 ptsname_r F -GLIBC_2.12 putc F -GLIBC_2.12 putc_unlocked F -GLIBC_2.12 putchar F -GLIBC_2.12 putchar_unlocked F -GLIBC_2.12 putenv F -GLIBC_2.12 putgrent F -GLIBC_2.12 putmsg F -GLIBC_2.12 putpmsg F -GLIBC_2.12 putpwent F -GLIBC_2.12 puts F -GLIBC_2.12 putsgent F -GLIBC_2.12 putspent F -GLIBC_2.12 pututline F -GLIBC_2.12 pututxline F -GLIBC_2.12 putw F -GLIBC_2.12 putwc F -GLIBC_2.12 putwc_unlocked F -GLIBC_2.12 putwchar F -GLIBC_2.12 putwchar_unlocked F -GLIBC_2.12 pvalloc F -GLIBC_2.12 pwrite F -GLIBC_2.12 pwrite64 F -GLIBC_2.12 pwritev F -GLIBC_2.12 pwritev64 F -GLIBC_2.12 qecvt F -GLIBC_2.12 qecvt_r F -GLIBC_2.12 qfcvt F -GLIBC_2.12 qfcvt_r F -GLIBC_2.12 qgcvt F -GLIBC_2.12 qsort F -GLIBC_2.12 qsort_r F -GLIBC_2.12 query_module F -GLIBC_2.12 quick_exit F -GLIBC_2.12 quotactl F -GLIBC_2.12 raise F -GLIBC_2.12 rand F -GLIBC_2.12 rand_r F -GLIBC_2.12 random F -GLIBC_2.12 random_r F -GLIBC_2.12 rawmemchr F -GLIBC_2.12 rcmd F -GLIBC_2.12 rcmd_af F -GLIBC_2.12 re_comp F -GLIBC_2.12 re_compile_fastmap F -GLIBC_2.12 re_compile_pattern F -GLIBC_2.12 re_exec F -GLIBC_2.12 re_match F -GLIBC_2.12 re_match_2 F -GLIBC_2.12 re_search F -GLIBC_2.12 re_search_2 F -GLIBC_2.12 re_set_registers F -GLIBC_2.12 re_set_syntax F -GLIBC_2.12 re_syntax_options D 0x8 -GLIBC_2.12 read F -GLIBC_2.12 readahead F -GLIBC_2.12 readdir F -GLIBC_2.12 readdir64 F -GLIBC_2.12 readdir64_r F -GLIBC_2.12 readdir_r F -GLIBC_2.12 readlink F -GLIBC_2.12 readlinkat F -GLIBC_2.12 readv F -GLIBC_2.12 realloc F -GLIBC_2.12 realpath F -GLIBC_2.12 reboot F -GLIBC_2.12 recv F -GLIBC_2.12 recvfrom F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 recvmsg F -GLIBC_2.12 regcomp F -GLIBC_2.12 regerror F -GLIBC_2.12 regexec F -GLIBC_2.12 regfree F -GLIBC_2.12 register_printf_function F -GLIBC_2.12 register_printf_modifier F -GLIBC_2.12 register_printf_specifier F -GLIBC_2.12 register_printf_type F -GLIBC_2.12 registerrpc F -GLIBC_2.12 remap_file_pages F -GLIBC_2.12 remove F -GLIBC_2.12 removexattr F -GLIBC_2.12 remque F -GLIBC_2.12 rename F -GLIBC_2.12 renameat F -GLIBC_2.12 revoke F -GLIBC_2.12 rewind F -GLIBC_2.12 rewinddir F -GLIBC_2.12 rexec F -GLIBC_2.12 rexec_af F -GLIBC_2.12 rexecoptions D 0x4 -GLIBC_2.12 rindex F -GLIBC_2.12 rmdir F -GLIBC_2.12 rpc_createerr D 0x20 -GLIBC_2.12 rpmatch F -GLIBC_2.12 rresvport F -GLIBC_2.12 rresvport_af F -GLIBC_2.12 rtime F -GLIBC_2.12 ruserok F -GLIBC_2.12 ruserok_af F -GLIBC_2.12 ruserpass F -GLIBC_2.12 sbrk F -GLIBC_2.12 scalbn F -GLIBC_2.12 scalbnf F -GLIBC_2.12 scalbnl F -GLIBC_2.12 scandir F -GLIBC_2.12 scandir64 F -GLIBC_2.12 scanf F -GLIBC_2.12 sched_get_priority_max F -GLIBC_2.12 sched_get_priority_min F -GLIBC_2.12 sched_getaffinity F -GLIBC_2.12 sched_getcpu F -GLIBC_2.12 sched_getparam F -GLIBC_2.12 sched_getscheduler F -GLIBC_2.12 sched_rr_get_interval F -GLIBC_2.12 sched_setaffinity F -GLIBC_2.12 sched_setparam F -GLIBC_2.12 sched_setscheduler F -GLIBC_2.12 sched_yield F -GLIBC_2.12 seed48 F -GLIBC_2.12 seed48_r F -GLIBC_2.12 seekdir F -GLIBC_2.12 select F -GLIBC_2.12 semctl F -GLIBC_2.12 semget F -GLIBC_2.12 semop F -GLIBC_2.12 semtimedop F -GLIBC_2.12 send F -GLIBC_2.12 sendfile F -GLIBC_2.12 sendfile64 F -GLIBC_2.12 sendmsg F -GLIBC_2.12 sendto F -GLIBC_2.12 set_dataplane F -GLIBC_2.12 setaliasent F -GLIBC_2.12 setbuf F -GLIBC_2.12 setbuffer F -GLIBC_2.12 setcontext F -GLIBC_2.12 setdomainname F -GLIBC_2.12 setegid F -GLIBC_2.12 setenv F -GLIBC_2.12 seteuid F -GLIBC_2.12 setfsent F -GLIBC_2.12 setfsgid F -GLIBC_2.12 setfsuid F -GLIBC_2.12 setgid F -GLIBC_2.12 setgrent F -GLIBC_2.12 setgroups F -GLIBC_2.12 sethostent F -GLIBC_2.12 sethostid F -GLIBC_2.12 sethostname F -GLIBC_2.12 setipv4sourcefilter F -GLIBC_2.12 setitimer F -GLIBC_2.12 setjmp F -GLIBC_2.12 setlinebuf F -GLIBC_2.12 setlocale F -GLIBC_2.12 setlogin F -GLIBC_2.12 setlogmask F -GLIBC_2.12 setmntent F -GLIBC_2.12 setnetent F -GLIBC_2.12 setnetgrent F -GLIBC_2.12 setpgid F -GLIBC_2.12 setpgrp F -GLIBC_2.12 setpriority F -GLIBC_2.12 setprotoent F -GLIBC_2.12 setpwent F -GLIBC_2.12 setregid F -GLIBC_2.12 setresgid F -GLIBC_2.12 setresuid F -GLIBC_2.12 setreuid F -GLIBC_2.12 setrlimit F -GLIBC_2.12 setrlimit64 F -GLIBC_2.12 setrpcent F -GLIBC_2.12 setservent F -GLIBC_2.12 setsgent F -GLIBC_2.12 setsid F -GLIBC_2.12 setsockopt F -GLIBC_2.12 setsourcefilter F -GLIBC_2.12 setspent F -GLIBC_2.12 setstate F -GLIBC_2.12 setstate_r F -GLIBC_2.12 settimeofday F -GLIBC_2.12 setttyent F -GLIBC_2.12 setuid F -GLIBC_2.12 setusershell F -GLIBC_2.12 setutent F -GLIBC_2.12 setutxent F -GLIBC_2.12 setvbuf F -GLIBC_2.12 setxattr F -GLIBC_2.12 sgetsgent F -GLIBC_2.12 sgetsgent_r F -GLIBC_2.12 sgetspent F -GLIBC_2.12 sgetspent_r F -GLIBC_2.12 shmat F -GLIBC_2.12 shmctl F -GLIBC_2.12 shmdt F -GLIBC_2.12 shmget F -GLIBC_2.12 shutdown F -GLIBC_2.12 sigaction F -GLIBC_2.12 sigaddset F -GLIBC_2.12 sigaltstack F -GLIBC_2.12 sigandset F -GLIBC_2.12 sigblock F -GLIBC_2.12 sigdelset F -GLIBC_2.12 sigemptyset F -GLIBC_2.12 sigfillset F -GLIBC_2.12 siggetmask F -GLIBC_2.12 sighold F -GLIBC_2.12 sigignore F -GLIBC_2.12 siginterrupt F -GLIBC_2.12 sigisemptyset F -GLIBC_2.12 sigismember F -GLIBC_2.12 siglongjmp F -GLIBC_2.12 signal F -GLIBC_2.12 signalfd F -GLIBC_2.12 sigorset F -GLIBC_2.12 sigpause F -GLIBC_2.12 sigpending F -GLIBC_2.12 sigprocmask F -GLIBC_2.12 sigqueue F -GLIBC_2.12 sigrelse F -GLIBC_2.12 sigreturn F -GLIBC_2.12 sigset F -GLIBC_2.12 sigsetmask F -GLIBC_2.12 sigstack F -GLIBC_2.12 sigsuspend F -GLIBC_2.12 sigtimedwait F -GLIBC_2.12 sigvec F -GLIBC_2.12 sigwait F -GLIBC_2.12 sigwaitinfo F -GLIBC_2.12 sleep F -GLIBC_2.12 snprintf F -GLIBC_2.12 sockatmark F -GLIBC_2.12 socket F -GLIBC_2.12 socketpair F -GLIBC_2.12 splice F -GLIBC_2.12 sprintf F -GLIBC_2.12 sprofil F -GLIBC_2.12 srand F -GLIBC_2.12 srand48 F -GLIBC_2.12 srand48_r F -GLIBC_2.12 srandom F -GLIBC_2.12 srandom_r F -GLIBC_2.12 sscanf F -GLIBC_2.12 ssignal F -GLIBC_2.12 sstk F -GLIBC_2.12 statfs F -GLIBC_2.12 statfs64 F -GLIBC_2.12 statvfs F -GLIBC_2.12 statvfs64 F -GLIBC_2.12 stderr D 0x8 -GLIBC_2.12 stdin D 0x8 -GLIBC_2.12 stdout D 0x8 -GLIBC_2.12 step F -GLIBC_2.12 stime F -GLIBC_2.12 stpcpy F -GLIBC_2.12 stpncpy F -GLIBC_2.12 strcasecmp F -GLIBC_2.12 strcasecmp_l F -GLIBC_2.12 strcasestr F -GLIBC_2.12 strcat F -GLIBC_2.12 strchr F -GLIBC_2.12 strchrnul F -GLIBC_2.12 strcmp F -GLIBC_2.12 strcoll F -GLIBC_2.12 strcoll_l F -GLIBC_2.12 strcpy F -GLIBC_2.12 strcspn F -GLIBC_2.12 strdup F -GLIBC_2.12 strerror F -GLIBC_2.12 strerror_l F -GLIBC_2.12 strerror_r F -GLIBC_2.12 strfmon F -GLIBC_2.12 strfmon_l F -GLIBC_2.12 strfry F -GLIBC_2.12 strftime F -GLIBC_2.12 strftime_l F -GLIBC_2.12 strlen F -GLIBC_2.12 strncasecmp F -GLIBC_2.12 strncasecmp_l F -GLIBC_2.12 strncat F -GLIBC_2.12 strncmp F -GLIBC_2.12 strncpy F -GLIBC_2.12 strndup F -GLIBC_2.12 strnlen F -GLIBC_2.12 strpbrk F -GLIBC_2.12 strptime F -GLIBC_2.12 strptime_l F -GLIBC_2.12 strrchr F -GLIBC_2.12 strsep F -GLIBC_2.12 strsignal F -GLIBC_2.12 strspn F -GLIBC_2.12 strstr F -GLIBC_2.12 strtod F -GLIBC_2.12 strtod_l F -GLIBC_2.12 strtof F -GLIBC_2.12 strtof_l F -GLIBC_2.12 strtoimax F -GLIBC_2.12 strtok F -GLIBC_2.12 strtok_r F -GLIBC_2.12 strtol F -GLIBC_2.12 strtol_l F -GLIBC_2.12 strtold F -GLIBC_2.12 strtold_l F -GLIBC_2.12 strtoll F -GLIBC_2.12 strtoll_l F -GLIBC_2.12 strtoq F -GLIBC_2.12 strtoul F -GLIBC_2.12 strtoul_l F -GLIBC_2.12 strtoull F -GLIBC_2.12 strtoull_l F -GLIBC_2.12 strtoumax F -GLIBC_2.12 strtouq F -GLIBC_2.12 strverscmp F -GLIBC_2.12 strxfrm F -GLIBC_2.12 strxfrm_l F -GLIBC_2.12 stty F -GLIBC_2.12 svc_exit F -GLIBC_2.12 svc_fdset D 0x80 -GLIBC_2.12 svc_getreq F -GLIBC_2.12 svc_getreq_common F -GLIBC_2.12 svc_getreq_poll F -GLIBC_2.12 svc_getreqset F -GLIBC_2.12 svc_max_pollfd D 0x4 -GLIBC_2.12 svc_pollfd D 0x8 -GLIBC_2.12 svc_register F -GLIBC_2.12 svc_run F -GLIBC_2.12 svc_sendreply F -GLIBC_2.12 svc_unregister F -GLIBC_2.12 svcauthdes_stats D 0x18 -GLIBC_2.12 svcerr_auth F -GLIBC_2.12 svcerr_decode F -GLIBC_2.12 svcerr_noproc F -GLIBC_2.12 svcerr_noprog F -GLIBC_2.12 svcerr_progvers F -GLIBC_2.12 svcerr_systemerr F -GLIBC_2.12 svcerr_weakauth F -GLIBC_2.12 svcfd_create F -GLIBC_2.12 svcraw_create F -GLIBC_2.12 svctcp_create F -GLIBC_2.12 svcudp_bufcreate F -GLIBC_2.12 svcudp_create F -GLIBC_2.12 svcudp_enablecache F -GLIBC_2.12 svcunix_create F -GLIBC_2.12 svcunixfd_create F -GLIBC_2.12 swab F -GLIBC_2.12 swapcontext F -GLIBC_2.12 swapoff F -GLIBC_2.12 swapon F -GLIBC_2.12 swprintf F -GLIBC_2.12 swscanf F -GLIBC_2.12 symlink F -GLIBC_2.12 symlinkat F -GLIBC_2.12 sync F -GLIBC_2.12 sync_file_range F -GLIBC_2.12 sys_errlist D 0x438 -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.12 sys_sigabbrev D 0x208 -GLIBC_2.12 sys_siglist D 0x208 -GLIBC_2.12 syscall F -GLIBC_2.12 sysconf F -GLIBC_2.12 sysctl F -GLIBC_2.12 sysinfo F -GLIBC_2.12 syslog F -GLIBC_2.12 system F -GLIBC_2.12 sysv_signal F -GLIBC_2.12 tcdrain F -GLIBC_2.12 tcflow F -GLIBC_2.12 tcflush F -GLIBC_2.12 tcgetattr F -GLIBC_2.12 tcgetpgrp F -GLIBC_2.12 tcgetsid F -GLIBC_2.12 tcsendbreak F -GLIBC_2.12 tcsetattr F -GLIBC_2.12 tcsetpgrp F -GLIBC_2.12 tdelete F -GLIBC_2.12 tdestroy F -GLIBC_2.12 tee F -GLIBC_2.12 telldir F -GLIBC_2.12 tempnam F -GLIBC_2.12 textdomain F -GLIBC_2.12 tfind F -GLIBC_2.12 time F -GLIBC_2.12 timegm F -GLIBC_2.12 timelocal F -GLIBC_2.12 timerfd_create F -GLIBC_2.12 timerfd_gettime F -GLIBC_2.12 timerfd_settime F -GLIBC_2.12 times F -GLIBC_2.12 timezone D 0x8 -GLIBC_2.12 tmpfile F -GLIBC_2.12 tmpfile64 F -GLIBC_2.12 tmpnam F -GLIBC_2.12 tmpnam_r F -GLIBC_2.12 toascii F -GLIBC_2.12 tolower F -GLIBC_2.12 tolower_l F -GLIBC_2.12 toupper F -GLIBC_2.12 toupper_l F -GLIBC_2.12 towctrans F -GLIBC_2.12 towctrans_l F -GLIBC_2.12 towlower F -GLIBC_2.12 towlower_l F -GLIBC_2.12 towupper F -GLIBC_2.12 towupper_l F -GLIBC_2.12 tr_break F -GLIBC_2.12 truncate F -GLIBC_2.12 truncate64 F -GLIBC_2.12 tsearch F -GLIBC_2.12 ttyname F -GLIBC_2.12 ttyname_r F -GLIBC_2.12 ttyslot F -GLIBC_2.12 twalk F -GLIBC_2.12 tzname D 0x10 -GLIBC_2.12 tzset F -GLIBC_2.12 ualarm F -GLIBC_2.12 ulckpwdf F -GLIBC_2.12 ulimit F -GLIBC_2.12 umask F -GLIBC_2.12 umount F -GLIBC_2.12 umount2 F -GLIBC_2.12 uname F -GLIBC_2.12 ungetc F -GLIBC_2.12 ungetwc F -GLIBC_2.12 unlink F -GLIBC_2.12 unlinkat F -GLIBC_2.12 unlockpt F -GLIBC_2.12 unsetenv F -GLIBC_2.12 unshare F -GLIBC_2.12 updwtmp F -GLIBC_2.12 updwtmpx F -GLIBC_2.12 uselib F -GLIBC_2.12 uselocale F -GLIBC_2.12 user2netname F -GLIBC_2.12 usleep F -GLIBC_2.12 ustat F -GLIBC_2.12 utime F -GLIBC_2.12 utimensat F -GLIBC_2.12 utimes F -GLIBC_2.12 utmpname F -GLIBC_2.12 utmpxname F -GLIBC_2.12 valloc F -GLIBC_2.12 vasprintf F -GLIBC_2.12 vdprintf F -GLIBC_2.12 verr F -GLIBC_2.12 verrx F -GLIBC_2.12 versionsort F -GLIBC_2.12 versionsort64 F -GLIBC_2.12 vfork F -GLIBC_2.12 vfprintf F -GLIBC_2.12 vfscanf F -GLIBC_2.12 vfwprintf F -GLIBC_2.12 vfwscanf F -GLIBC_2.12 vhangup F -GLIBC_2.12 vlimit F -GLIBC_2.12 vmsplice F -GLIBC_2.12 vprintf F -GLIBC_2.12 vscanf F -GLIBC_2.12 vsnprintf F -GLIBC_2.12 vsprintf F -GLIBC_2.12 vsscanf F -GLIBC_2.12 vswprintf F -GLIBC_2.12 vswscanf F -GLIBC_2.12 vsyslog F -GLIBC_2.12 vtimes F -GLIBC_2.12 vwarn F -GLIBC_2.12 vwarnx F -GLIBC_2.12 vwprintf F -GLIBC_2.12 vwscanf F -GLIBC_2.12 wait F -GLIBC_2.12 wait3 F -GLIBC_2.12 wait4 F -GLIBC_2.12 waitid F -GLIBC_2.12 waitpid F -GLIBC_2.12 warn F -GLIBC_2.12 warnx F -GLIBC_2.12 wcpcpy F -GLIBC_2.12 wcpncpy F -GLIBC_2.12 wcrtomb F -GLIBC_2.12 wcscasecmp F -GLIBC_2.12 wcscasecmp_l F -GLIBC_2.12 wcscat F -GLIBC_2.12 wcschr F -GLIBC_2.12 wcschrnul F -GLIBC_2.12 wcscmp F -GLIBC_2.12 wcscoll F -GLIBC_2.12 wcscoll_l F -GLIBC_2.12 wcscpy F -GLIBC_2.12 wcscspn F -GLIBC_2.12 wcsdup F -GLIBC_2.12 wcsftime F -GLIBC_2.12 wcsftime_l F -GLIBC_2.12 wcslen F -GLIBC_2.12 wcsncasecmp F -GLIBC_2.12 wcsncasecmp_l F -GLIBC_2.12 wcsncat F -GLIBC_2.12 wcsncmp F -GLIBC_2.12 wcsncpy F -GLIBC_2.12 wcsnlen F -GLIBC_2.12 wcsnrtombs F -GLIBC_2.12 wcspbrk F -GLIBC_2.12 wcsrchr F -GLIBC_2.12 wcsrtombs F -GLIBC_2.12 wcsspn F -GLIBC_2.12 wcsstr F -GLIBC_2.12 wcstod F -GLIBC_2.12 wcstod_l F -GLIBC_2.12 wcstof F -GLIBC_2.12 wcstof_l F -GLIBC_2.12 wcstoimax F -GLIBC_2.12 wcstok F -GLIBC_2.12 wcstol F -GLIBC_2.12 wcstol_l F -GLIBC_2.12 wcstold F -GLIBC_2.12 wcstold_l F -GLIBC_2.12 wcstoll F -GLIBC_2.12 wcstoll_l F -GLIBC_2.12 wcstombs F -GLIBC_2.12 wcstoq F -GLIBC_2.12 wcstoul F -GLIBC_2.12 wcstoul_l F -GLIBC_2.12 wcstoull F -GLIBC_2.12 wcstoull_l F -GLIBC_2.12 wcstoumax F -GLIBC_2.12 wcstouq F -GLIBC_2.12 wcswcs F -GLIBC_2.12 wcswidth F -GLIBC_2.12 wcsxfrm F -GLIBC_2.12 wcsxfrm_l F -GLIBC_2.12 wctob F -GLIBC_2.12 wctomb F -GLIBC_2.12 wctrans F -GLIBC_2.12 wctrans_l F -GLIBC_2.12 wctype F -GLIBC_2.12 wctype_l F -GLIBC_2.12 wcwidth F -GLIBC_2.12 wmemchr F -GLIBC_2.12 wmemcmp F -GLIBC_2.12 wmemcpy F -GLIBC_2.12 wmemmove F -GLIBC_2.12 wmempcpy F -GLIBC_2.12 wmemset F -GLIBC_2.12 wordexp F -GLIBC_2.12 wordfree F -GLIBC_2.12 wprintf F -GLIBC_2.12 write F -GLIBC_2.12 writev F -GLIBC_2.12 wscanf F -GLIBC_2.12 xdecrypt F -GLIBC_2.12 xdr_accepted_reply F -GLIBC_2.12 xdr_array F -GLIBC_2.12 xdr_authdes_cred F -GLIBC_2.12 xdr_authdes_verf F -GLIBC_2.12 xdr_authunix_parms F -GLIBC_2.12 xdr_bool F -GLIBC_2.12 xdr_bytes F -GLIBC_2.12 xdr_callhdr F -GLIBC_2.12 xdr_callmsg F -GLIBC_2.12 xdr_char F -GLIBC_2.12 xdr_cryptkeyarg F -GLIBC_2.12 xdr_cryptkeyarg2 F -GLIBC_2.12 xdr_cryptkeyres F -GLIBC_2.12 xdr_des_block F -GLIBC_2.12 xdr_double F -GLIBC_2.12 xdr_enum F -GLIBC_2.12 xdr_float F -GLIBC_2.12 xdr_free F -GLIBC_2.12 xdr_getcredres F -GLIBC_2.12 xdr_hyper F -GLIBC_2.12 xdr_int F -GLIBC_2.12 xdr_int16_t F -GLIBC_2.12 xdr_int32_t F -GLIBC_2.12 xdr_int64_t F -GLIBC_2.12 xdr_int8_t F -GLIBC_2.12 xdr_key_netstarg F -GLIBC_2.12 xdr_key_netstres F -GLIBC_2.12 xdr_keybuf F -GLIBC_2.12 xdr_keystatus F -GLIBC_2.12 xdr_long F -GLIBC_2.12 xdr_longlong_t F -GLIBC_2.12 xdr_netnamestr F -GLIBC_2.12 xdr_netobj F -GLIBC_2.12 xdr_opaque F -GLIBC_2.12 xdr_opaque_auth F -GLIBC_2.12 xdr_pmap F -GLIBC_2.12 xdr_pmaplist F -GLIBC_2.12 xdr_pointer F -GLIBC_2.12 xdr_quad_t F -GLIBC_2.12 xdr_reference F -GLIBC_2.12 xdr_rejected_reply F -GLIBC_2.12 xdr_replymsg F -GLIBC_2.12 xdr_rmtcall_args F -GLIBC_2.12 xdr_rmtcallres F -GLIBC_2.12 xdr_short F -GLIBC_2.12 xdr_sizeof F -GLIBC_2.12 xdr_string F -GLIBC_2.12 xdr_u_char F -GLIBC_2.12 xdr_u_hyper F -GLIBC_2.12 xdr_u_int F -GLIBC_2.12 xdr_u_long F -GLIBC_2.12 xdr_u_longlong_t F -GLIBC_2.12 xdr_u_quad_t F -GLIBC_2.12 xdr_u_short F -GLIBC_2.12 xdr_uint16_t F -GLIBC_2.12 xdr_uint32_t F -GLIBC_2.12 xdr_uint64_t F -GLIBC_2.12 xdr_uint8_t F -GLIBC_2.12 xdr_union F -GLIBC_2.12 xdr_unixcred F -GLIBC_2.12 xdr_vector F -GLIBC_2.12 xdr_void F -GLIBC_2.12 xdr_wrapstring F -GLIBC_2.12 xdrmem_create F -GLIBC_2.12 xdrrec_create F -GLIBC_2.12 xdrrec_endofrecord F -GLIBC_2.12 xdrrec_eof F -GLIBC_2.12 xdrrec_skiprecord F -GLIBC_2.12 xdrstdio_create F -GLIBC_2.12 xencrypt F -GLIBC_2.12 xprt_register F -GLIBC_2.12 xprt_unregister F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 clock_adjtime F -GLIBC_2.15 fanotify_init F -GLIBC_2.15 fanotify_mark F -GLIBC_2.15 name_to_handle_at F -GLIBC_2.15 open_by_handle_at F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 prlimit F -GLIBC_2.15 prlimit64 F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.15 sendmmsg F -GLIBC_2.15 setns F -GLIBC_2.15 syncfs F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libcrypt.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libcrypt.abilist deleted file mode 100644 index d5643802b7..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 crypt F -GLIBC_2.12 crypt_r F -GLIBC_2.12 encrypt F -GLIBC_2.12 encrypt_r F -GLIBC_2.12 fcrypt F -GLIBC_2.12 setkey F -GLIBC_2.12 setkey_r F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libdl.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libdl.abilist deleted file mode 100644 index cabc30c239..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libdl.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 dladdr F -GLIBC_2.12 dladdr1 F -GLIBC_2.12 dlclose F -GLIBC_2.12 dlerror F -GLIBC_2.12 dlinfo F -GLIBC_2.12 dlmopen F -GLIBC_2.12 dlopen F -GLIBC_2.12 dlsym F -GLIBC_2.12 dlvsym F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist deleted file mode 100644 index 0059c27fa2..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist +++ /dev/null @@ -1,431 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _LIB_VERSION D 0x4 -GLIBC_2.12 __clog10 F -GLIBC_2.12 __clog10f F -GLIBC_2.12 __clog10l F -GLIBC_2.12 __finite F -GLIBC_2.12 __finitef F -GLIBC_2.12 __fpclassify F -GLIBC_2.12 __fpclassifyf F -GLIBC_2.12 __signbit F -GLIBC_2.12 __signbitf F -GLIBC_2.12 acos F -GLIBC_2.12 acosf F -GLIBC_2.12 acosh F -GLIBC_2.12 acoshf F -GLIBC_2.12 acoshl F -GLIBC_2.12 acosl F -GLIBC_2.12 asin F -GLIBC_2.12 asinf F -GLIBC_2.12 asinh F -GLIBC_2.12 asinhf F -GLIBC_2.12 asinhl F -GLIBC_2.12 asinl F -GLIBC_2.12 atan F -GLIBC_2.12 atan2 F -GLIBC_2.12 atan2f F -GLIBC_2.12 atan2l F -GLIBC_2.12 atanf F -GLIBC_2.12 atanh F -GLIBC_2.12 atanhf F -GLIBC_2.12 atanhl F -GLIBC_2.12 atanl F -GLIBC_2.12 cabs F -GLIBC_2.12 cabsf F -GLIBC_2.12 cabsl F -GLIBC_2.12 cacos F -GLIBC_2.12 cacosf F -GLIBC_2.12 cacosh F -GLIBC_2.12 cacoshf F -GLIBC_2.12 cacoshl F -GLIBC_2.12 cacosl F -GLIBC_2.12 carg F -GLIBC_2.12 cargf F -GLIBC_2.12 cargl F -GLIBC_2.12 casin F -GLIBC_2.12 casinf F -GLIBC_2.12 casinh F -GLIBC_2.12 casinhf F -GLIBC_2.12 casinhl F -GLIBC_2.12 casinl F -GLIBC_2.12 catan F -GLIBC_2.12 catanf F -GLIBC_2.12 catanh F -GLIBC_2.12 catanhf F -GLIBC_2.12 catanhl F -GLIBC_2.12 catanl F -GLIBC_2.12 cbrt F -GLIBC_2.12 cbrtf F -GLIBC_2.12 cbrtl F -GLIBC_2.12 ccos F -GLIBC_2.12 ccosf F -GLIBC_2.12 ccosh F -GLIBC_2.12 ccoshf F -GLIBC_2.12 ccoshl F -GLIBC_2.12 ccosl F -GLIBC_2.12 ceil F -GLIBC_2.12 ceilf F -GLIBC_2.12 ceill F -GLIBC_2.12 cexp F -GLIBC_2.12 cexpf F -GLIBC_2.12 cexpl F -GLIBC_2.12 cimag F -GLIBC_2.12 cimagf F -GLIBC_2.12 cimagl F -GLIBC_2.12 clog F -GLIBC_2.12 clog10 F -GLIBC_2.12 clog10f F -GLIBC_2.12 clog10l F -GLIBC_2.12 clogf F -GLIBC_2.12 clogl F -GLIBC_2.12 conj F -GLIBC_2.12 conjf F -GLIBC_2.12 conjl F -GLIBC_2.12 copysign F -GLIBC_2.12 copysignf F -GLIBC_2.12 copysignl F -GLIBC_2.12 cos F -GLIBC_2.12 cosf F -GLIBC_2.12 cosh F -GLIBC_2.12 coshf F -GLIBC_2.12 coshl F -GLIBC_2.12 cosl F -GLIBC_2.12 cpow F -GLIBC_2.12 cpowf F -GLIBC_2.12 cpowl F -GLIBC_2.12 cproj F -GLIBC_2.12 cprojf F -GLIBC_2.12 cprojl F -GLIBC_2.12 creal F -GLIBC_2.12 crealf F -GLIBC_2.12 creall F -GLIBC_2.12 csin F -GLIBC_2.12 csinf F -GLIBC_2.12 csinh F -GLIBC_2.12 csinhf F -GLIBC_2.12 csinhl F -GLIBC_2.12 csinl F -GLIBC_2.12 csqrt F -GLIBC_2.12 csqrtf F -GLIBC_2.12 csqrtl F -GLIBC_2.12 ctan F -GLIBC_2.12 ctanf F -GLIBC_2.12 ctanh F -GLIBC_2.12 ctanhf F -GLIBC_2.12 ctanhl F -GLIBC_2.12 ctanl F -GLIBC_2.12 drem F -GLIBC_2.12 dremf F -GLIBC_2.12 dreml F -GLIBC_2.12 erf F -GLIBC_2.12 erfc F -GLIBC_2.12 erfcf F -GLIBC_2.12 erfcl F -GLIBC_2.12 erff F -GLIBC_2.12 erfl F -GLIBC_2.12 exp F -GLIBC_2.12 exp10 F -GLIBC_2.12 exp10f F -GLIBC_2.12 exp10l F -GLIBC_2.12 exp2 F -GLIBC_2.12 exp2f F -GLIBC_2.12 exp2l F -GLIBC_2.12 expf F -GLIBC_2.12 expl F -GLIBC_2.12 expm1 F -GLIBC_2.12 expm1f F -GLIBC_2.12 expm1l F -GLIBC_2.12 fabs F -GLIBC_2.12 fabsf F -GLIBC_2.12 fabsl F -GLIBC_2.12 fdim F -GLIBC_2.12 fdimf F -GLIBC_2.12 fdiml F -GLIBC_2.12 feclearexcept F -GLIBC_2.12 fedisableexcept F -GLIBC_2.12 feenableexcept F -GLIBC_2.12 fegetenv F -GLIBC_2.12 fegetexcept F -GLIBC_2.12 fegetexceptflag F -GLIBC_2.12 fegetround F -GLIBC_2.12 feholdexcept F -GLIBC_2.12 feraiseexcept F -GLIBC_2.12 fesetenv F -GLIBC_2.12 fesetexceptflag F -GLIBC_2.12 fesetround F -GLIBC_2.12 fetestexcept F -GLIBC_2.12 feupdateenv F -GLIBC_2.12 finite F -GLIBC_2.12 finitef F -GLIBC_2.12 finitel F -GLIBC_2.12 floor F -GLIBC_2.12 floorf F -GLIBC_2.12 floorl F -GLIBC_2.12 fma F -GLIBC_2.12 fmaf F -GLIBC_2.12 fmal F -GLIBC_2.12 fmax F -GLIBC_2.12 fmaxf F -GLIBC_2.12 fmaxl F -GLIBC_2.12 fmin F -GLIBC_2.12 fminf F -GLIBC_2.12 fminl F -GLIBC_2.12 fmod F -GLIBC_2.12 fmodf F -GLIBC_2.12 fmodl F -GLIBC_2.12 frexp F -GLIBC_2.12 frexpf F -GLIBC_2.12 frexpl F -GLIBC_2.12 gamma F -GLIBC_2.12 gammaf F -GLIBC_2.12 gammal F -GLIBC_2.12 hypot F -GLIBC_2.12 hypotf F -GLIBC_2.12 hypotl F -GLIBC_2.12 ilogb F -GLIBC_2.12 ilogbf F -GLIBC_2.12 ilogbl F -GLIBC_2.12 j0 F -GLIBC_2.12 j0f F -GLIBC_2.12 j0l F -GLIBC_2.12 j1 F -GLIBC_2.12 j1f F -GLIBC_2.12 j1l F -GLIBC_2.12 jn F -GLIBC_2.12 jnf F -GLIBC_2.12 jnl F -GLIBC_2.12 ldexp F -GLIBC_2.12 ldexpf F -GLIBC_2.12 ldexpl F -GLIBC_2.12 lgamma F -GLIBC_2.12 lgamma_r F -GLIBC_2.12 lgammaf F -GLIBC_2.12 lgammaf_r F -GLIBC_2.12 lgammal F -GLIBC_2.12 lgammal_r F -GLIBC_2.12 llrint F -GLIBC_2.12 llrintf F -GLIBC_2.12 llrintl F -GLIBC_2.12 llround F -GLIBC_2.12 llroundf F -GLIBC_2.12 llroundl F -GLIBC_2.12 log F -GLIBC_2.12 log10 F -GLIBC_2.12 log10f F -GLIBC_2.12 log10l F -GLIBC_2.12 log1p F -GLIBC_2.12 log1pf F -GLIBC_2.12 log1pl F -GLIBC_2.12 log2 F -GLIBC_2.12 log2f F -GLIBC_2.12 log2l F -GLIBC_2.12 logb F -GLIBC_2.12 logbf F -GLIBC_2.12 logbl F -GLIBC_2.12 logf F -GLIBC_2.12 logl F -GLIBC_2.12 lrint F -GLIBC_2.12 lrintf F -GLIBC_2.12 lrintl F -GLIBC_2.12 lround F -GLIBC_2.12 lroundf F -GLIBC_2.12 lroundl F -GLIBC_2.12 matherr F -GLIBC_2.12 modf F -GLIBC_2.12 modff F -GLIBC_2.12 modfl F -GLIBC_2.12 nan F -GLIBC_2.12 nanf F -GLIBC_2.12 nanl F -GLIBC_2.12 nearbyint F -GLIBC_2.12 nearbyintf F -GLIBC_2.12 nearbyintl F -GLIBC_2.12 nextafter F -GLIBC_2.12 nextafterf F -GLIBC_2.12 nextafterl F -GLIBC_2.12 nexttoward F -GLIBC_2.12 nexttowardf F -GLIBC_2.12 nexttowardl F -GLIBC_2.12 pow F -GLIBC_2.12 pow10 F -GLIBC_2.12 pow10f F -GLIBC_2.12 pow10l F -GLIBC_2.12 powf F -GLIBC_2.12 powl F -GLIBC_2.12 remainder F -GLIBC_2.12 remainderf F -GLIBC_2.12 remainderl F -GLIBC_2.12 remquo F -GLIBC_2.12 remquof F -GLIBC_2.12 remquol F -GLIBC_2.12 rint F -GLIBC_2.12 rintf F -GLIBC_2.12 rintl F -GLIBC_2.12 round F -GLIBC_2.12 roundf F -GLIBC_2.12 roundl F -GLIBC_2.12 scalb F -GLIBC_2.12 scalbf F -GLIBC_2.12 scalbl F -GLIBC_2.12 scalbln F -GLIBC_2.12 scalblnf F -GLIBC_2.12 scalblnl F -GLIBC_2.12 scalbn F -GLIBC_2.12 scalbnf F -GLIBC_2.12 scalbnl F -GLIBC_2.12 signgam D 0x4 -GLIBC_2.12 significand F -GLIBC_2.12 significandf F -GLIBC_2.12 significandl F -GLIBC_2.12 sin F -GLIBC_2.12 sincos F -GLIBC_2.12 sincosf F -GLIBC_2.12 sincosl F -GLIBC_2.12 sinf F -GLIBC_2.12 sinh F -GLIBC_2.12 sinhf F -GLIBC_2.12 sinhl F -GLIBC_2.12 sinl F -GLIBC_2.12 sqrt F -GLIBC_2.12 sqrtf F -GLIBC_2.12 sqrtl F -GLIBC_2.12 tan F -GLIBC_2.12 tanf F -GLIBC_2.12 tanh F -GLIBC_2.12 tanhf F -GLIBC_2.12 tanhl F -GLIBC_2.12 tanl F -GLIBC_2.12 tgamma F -GLIBC_2.12 tgammaf F -GLIBC_2.12 tgammal F -GLIBC_2.12 trunc F -GLIBC_2.12 truncf F -GLIBC_2.12 truncl F -GLIBC_2.12 y0 F -GLIBC_2.12 y0f F -GLIBC_2.12 y0l F -GLIBC_2.12 y1 F -GLIBC_2.12 y1f F -GLIBC_2.12 y1l F -GLIBC_2.12 yn F -GLIBC_2.12 ynf F -GLIBC_2.12 ynl F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libnsl.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libnsl.abilist deleted file mode 100644 index 0277e5c1a8..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libnsl.abilist +++ /dev/null @@ -1,122 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __free_fdresult F -GLIBC_2.12 __nis_default_access F -GLIBC_2.12 __nis_default_group F -GLIBC_2.12 __nis_default_owner F -GLIBC_2.12 __nis_default_ttl F -GLIBC_2.12 __nis_finddirectory F -GLIBC_2.12 __nis_hash F -GLIBC_2.12 __nisbind_connect F -GLIBC_2.12 __nisbind_create F -GLIBC_2.12 __nisbind_destroy F -GLIBC_2.12 __nisbind_next F -GLIBC_2.12 __yp_check F -GLIBC_2.12 nis_add F -GLIBC_2.12 nis_add_entry F -GLIBC_2.12 nis_addmember F -GLIBC_2.12 nis_checkpoint F -GLIBC_2.12 nis_clone_directory F -GLIBC_2.12 nis_clone_object F -GLIBC_2.12 nis_clone_result F -GLIBC_2.12 nis_creategroup F -GLIBC_2.12 nis_destroy_object F -GLIBC_2.12 nis_destroygroup F -GLIBC_2.12 nis_dir_cmp F -GLIBC_2.12 nis_domain_of F -GLIBC_2.12 nis_domain_of_r F -GLIBC_2.12 nis_first_entry F -GLIBC_2.12 nis_free_directory F -GLIBC_2.12 nis_free_object F -GLIBC_2.12 nis_free_request F -GLIBC_2.12 nis_freenames F -GLIBC_2.12 nis_freeresult F -GLIBC_2.12 nis_freeservlist F -GLIBC_2.12 nis_freetags F -GLIBC_2.12 nis_getnames F -GLIBC_2.12 nis_getservlist F -GLIBC_2.12 nis_ismember F -GLIBC_2.12 nis_leaf_of F -GLIBC_2.12 nis_leaf_of_r F -GLIBC_2.12 nis_lerror F -GLIBC_2.12 nis_list F -GLIBC_2.12 nis_local_directory F -GLIBC_2.12 nis_local_group F -GLIBC_2.12 nis_local_host F -GLIBC_2.12 nis_local_principal F -GLIBC_2.12 nis_lookup F -GLIBC_2.12 nis_mkdir F -GLIBC_2.12 nis_modify F -GLIBC_2.12 nis_modify_entry F -GLIBC_2.12 nis_name_of F -GLIBC_2.12 nis_name_of_r F -GLIBC_2.12 nis_next_entry F -GLIBC_2.12 nis_perror F -GLIBC_2.12 nis_ping F -GLIBC_2.12 nis_print_directory F -GLIBC_2.12 nis_print_entry F -GLIBC_2.12 nis_print_group F -GLIBC_2.12 nis_print_group_entry F -GLIBC_2.12 nis_print_link F -GLIBC_2.12 nis_print_object F -GLIBC_2.12 nis_print_result F -GLIBC_2.12 nis_print_rights F -GLIBC_2.12 nis_print_table F -GLIBC_2.12 nis_read_obj F -GLIBC_2.12 nis_remove F -GLIBC_2.12 nis_remove_entry F -GLIBC_2.12 nis_removemember F -GLIBC_2.12 nis_rmdir F -GLIBC_2.12 nis_servstate F -GLIBC_2.12 nis_sperrno F -GLIBC_2.12 nis_sperror F -GLIBC_2.12 nis_sperror_r F -GLIBC_2.12 nis_stats F -GLIBC_2.12 nis_verifygroup F -GLIBC_2.12 nis_write_obj F -GLIBC_2.12 readColdStartFile F -GLIBC_2.12 writeColdStartFile F -GLIBC_2.12 xdr_cback_data F -GLIBC_2.12 xdr_domainname F -GLIBC_2.12 xdr_keydat F -GLIBC_2.12 xdr_mapname F -GLIBC_2.12 xdr_obj_p F -GLIBC_2.12 xdr_peername F -GLIBC_2.12 xdr_valdat F -GLIBC_2.12 xdr_yp_buf F -GLIBC_2.12 xdr_ypall F -GLIBC_2.12 xdr_ypbind_binding F -GLIBC_2.12 xdr_ypbind_resp F -GLIBC_2.12 xdr_ypbind_resptype F -GLIBC_2.12 xdr_ypbind_setdom F -GLIBC_2.12 xdr_ypdelete_args F -GLIBC_2.12 xdr_ypmap_parms F -GLIBC_2.12 xdr_ypmaplist F -GLIBC_2.12 xdr_yppush_status F -GLIBC_2.12 xdr_yppushresp_xfr F -GLIBC_2.12 xdr_ypreq_key F -GLIBC_2.12 xdr_ypreq_nokey F -GLIBC_2.12 xdr_ypreq_xfr F -GLIBC_2.12 xdr_ypresp_all F -GLIBC_2.12 xdr_ypresp_key_val F -GLIBC_2.12 xdr_ypresp_maplist F -GLIBC_2.12 xdr_ypresp_master F -GLIBC_2.12 xdr_ypresp_order F -GLIBC_2.12 xdr_ypresp_val F -GLIBC_2.12 xdr_ypresp_xfr F -GLIBC_2.12 xdr_ypstat F -GLIBC_2.12 xdr_ypupdate_args F -GLIBC_2.12 xdr_ypxfrstat F -GLIBC_2.12 yp_all F -GLIBC_2.12 yp_bind F -GLIBC_2.12 yp_first F -GLIBC_2.12 yp_get_default_domain F -GLIBC_2.12 yp_maplist F -GLIBC_2.12 yp_master F -GLIBC_2.12 yp_match F -GLIBC_2.12 yp_next F -GLIBC_2.12 yp_order F -GLIBC_2.12 yp_unbind F -GLIBC_2.12 yp_update F -GLIBC_2.12 ypbinderr_string F -GLIBC_2.12 yperr_string F -GLIBC_2.12 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libpthread.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libpthread.abilist deleted file mode 100644 index d16158f938..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libpthread.abilist +++ /dev/null @@ -1,226 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _IO_flockfile F -GLIBC_2.12 _IO_ftrylockfile F -GLIBC_2.12 _IO_funlockfile F -GLIBC_2.12 __close F -GLIBC_2.12 __connect F -GLIBC_2.12 __errno_location F -GLIBC_2.12 __fcntl F -GLIBC_2.12 __fork F -GLIBC_2.12 __h_errno_location F -GLIBC_2.12 __libc_allocate_rtsig F -GLIBC_2.12 __libc_current_sigrtmax F -GLIBC_2.12 __libc_current_sigrtmin F -GLIBC_2.12 __lseek F -GLIBC_2.12 __nanosleep F -GLIBC_2.12 __open F -GLIBC_2.12 __open64 F -GLIBC_2.12 __pread64 F -GLIBC_2.12 __pthread_cleanup_routine F -GLIBC_2.12 __pthread_getspecific F -GLIBC_2.12 __pthread_key_create F -GLIBC_2.12 __pthread_mutex_destroy F -GLIBC_2.12 __pthread_mutex_init F -GLIBC_2.12 __pthread_mutex_lock F -GLIBC_2.12 __pthread_mutex_trylock F -GLIBC_2.12 __pthread_mutex_unlock F -GLIBC_2.12 __pthread_mutexattr_destroy F -GLIBC_2.12 __pthread_mutexattr_init F -GLIBC_2.12 __pthread_mutexattr_settype F -GLIBC_2.12 __pthread_once F -GLIBC_2.12 __pthread_register_cancel F -GLIBC_2.12 __pthread_register_cancel_defer F -GLIBC_2.12 __pthread_rwlock_destroy F -GLIBC_2.12 __pthread_rwlock_init F -GLIBC_2.12 __pthread_rwlock_rdlock F -GLIBC_2.12 __pthread_rwlock_tryrdlock F -GLIBC_2.12 __pthread_rwlock_trywrlock F -GLIBC_2.12 __pthread_rwlock_unlock F -GLIBC_2.12 __pthread_rwlock_wrlock F -GLIBC_2.12 __pthread_setspecific F -GLIBC_2.12 __pthread_unregister_cancel F -GLIBC_2.12 __pthread_unregister_cancel_restore F -GLIBC_2.12 __pthread_unwind_next F -GLIBC_2.12 __pwrite64 F -GLIBC_2.12 __read F -GLIBC_2.12 __res_state F -GLIBC_2.12 __send F -GLIBC_2.12 __sigaction F -GLIBC_2.12 __vfork F -GLIBC_2.12 __wait F -GLIBC_2.12 __write F -GLIBC_2.12 _pthread_cleanup_pop F -GLIBC_2.12 _pthread_cleanup_pop_restore F -GLIBC_2.12 _pthread_cleanup_push F -GLIBC_2.12 _pthread_cleanup_push_defer F -GLIBC_2.12 accept F -GLIBC_2.12 close F -GLIBC_2.12 connect F -GLIBC_2.12 fcntl F -GLIBC_2.12 flockfile F -GLIBC_2.12 fork F -GLIBC_2.12 fsync F -GLIBC_2.12 ftrylockfile F -GLIBC_2.12 funlockfile F -GLIBC_2.12 longjmp F -GLIBC_2.12 lseek F -GLIBC_2.12 lseek64 F -GLIBC_2.12 msync F -GLIBC_2.12 nanosleep F -GLIBC_2.12 open F -GLIBC_2.12 open64 F -GLIBC_2.12 pause F -GLIBC_2.12 pread F -GLIBC_2.12 pread64 F -GLIBC_2.12 pthread_attr_destroy F -GLIBC_2.12 pthread_attr_getaffinity_np F -GLIBC_2.12 pthread_attr_getdetachstate F -GLIBC_2.12 pthread_attr_getguardsize F -GLIBC_2.12 pthread_attr_getinheritsched F -GLIBC_2.12 pthread_attr_getschedparam F -GLIBC_2.12 pthread_attr_getschedpolicy F -GLIBC_2.12 pthread_attr_getscope F -GLIBC_2.12 pthread_attr_getstack F -GLIBC_2.12 pthread_attr_getstackaddr F -GLIBC_2.12 pthread_attr_getstacksize F -GLIBC_2.12 pthread_attr_init F -GLIBC_2.12 pthread_attr_setaffinity_np F -GLIBC_2.12 pthread_attr_setdetachstate F -GLIBC_2.12 pthread_attr_setguardsize F -GLIBC_2.12 pthread_attr_setinheritsched F -GLIBC_2.12 pthread_attr_setschedparam F -GLIBC_2.12 pthread_attr_setschedpolicy F -GLIBC_2.12 pthread_attr_setscope F -GLIBC_2.12 pthread_attr_setstack F -GLIBC_2.12 pthread_attr_setstackaddr F -GLIBC_2.12 pthread_attr_setstacksize F -GLIBC_2.12 pthread_barrier_destroy F -GLIBC_2.12 pthread_barrier_init F -GLIBC_2.12 pthread_barrier_wait F -GLIBC_2.12 pthread_barrierattr_destroy F -GLIBC_2.12 pthread_barrierattr_getpshared F -GLIBC_2.12 pthread_barrierattr_init F -GLIBC_2.12 pthread_barrierattr_setpshared F -GLIBC_2.12 pthread_cancel F -GLIBC_2.12 pthread_cond_broadcast F -GLIBC_2.12 pthread_cond_destroy F -GLIBC_2.12 pthread_cond_init F -GLIBC_2.12 pthread_cond_signal F -GLIBC_2.12 pthread_cond_timedwait F -GLIBC_2.12 pthread_cond_wait F -GLIBC_2.12 pthread_condattr_destroy F -GLIBC_2.12 pthread_condattr_getclock F -GLIBC_2.12 pthread_condattr_getpshared F -GLIBC_2.12 pthread_condattr_init F -GLIBC_2.12 pthread_condattr_setclock F -GLIBC_2.12 pthread_condattr_setpshared F -GLIBC_2.12 pthread_create F -GLIBC_2.12 pthread_detach F -GLIBC_2.12 pthread_equal F -GLIBC_2.12 pthread_exit F -GLIBC_2.12 pthread_getaffinity_np F -GLIBC_2.12 pthread_getattr_np F -GLIBC_2.12 pthread_getconcurrency F -GLIBC_2.12 pthread_getcpuclockid F -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_getschedparam F -GLIBC_2.12 pthread_getspecific F -GLIBC_2.12 pthread_join F -GLIBC_2.12 pthread_key_create F -GLIBC_2.12 pthread_key_delete F -GLIBC_2.12 pthread_kill F -GLIBC_2.12 pthread_kill_other_threads_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutex_consistent_np F -GLIBC_2.12 pthread_mutex_destroy F -GLIBC_2.12 pthread_mutex_getprioceiling F -GLIBC_2.12 pthread_mutex_init F -GLIBC_2.12 pthread_mutex_lock F -GLIBC_2.12 pthread_mutex_setprioceiling F -GLIBC_2.12 pthread_mutex_timedlock F -GLIBC_2.12 pthread_mutex_trylock F -GLIBC_2.12 pthread_mutex_unlock F -GLIBC_2.12 pthread_mutexattr_destroy F -GLIBC_2.12 pthread_mutexattr_getkind_np F -GLIBC_2.12 pthread_mutexattr_getprioceiling F -GLIBC_2.12 pthread_mutexattr_getprotocol F -GLIBC_2.12 pthread_mutexattr_getpshared F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_getrobust_np F -GLIBC_2.12 pthread_mutexattr_gettype F -GLIBC_2.12 pthread_mutexattr_init F -GLIBC_2.12 pthread_mutexattr_setkind_np F -GLIBC_2.12 pthread_mutexattr_setprioceiling F -GLIBC_2.12 pthread_mutexattr_setprotocol F -GLIBC_2.12 pthread_mutexattr_setpshared F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_mutexattr_setrobust_np F -GLIBC_2.12 pthread_mutexattr_settype F -GLIBC_2.12 pthread_once F -GLIBC_2.12 pthread_rwlock_destroy F -GLIBC_2.12 pthread_rwlock_init F -GLIBC_2.12 pthread_rwlock_rdlock F -GLIBC_2.12 pthread_rwlock_timedrdlock F -GLIBC_2.12 pthread_rwlock_timedwrlock F -GLIBC_2.12 pthread_rwlock_tryrdlock F -GLIBC_2.12 pthread_rwlock_trywrlock F -GLIBC_2.12 pthread_rwlock_unlock F -GLIBC_2.12 pthread_rwlock_wrlock F -GLIBC_2.12 pthread_rwlockattr_destroy F -GLIBC_2.12 pthread_rwlockattr_getkind_np F -GLIBC_2.12 pthread_rwlockattr_getpshared F -GLIBC_2.12 pthread_rwlockattr_init F -GLIBC_2.12 pthread_rwlockattr_setkind_np F -GLIBC_2.12 pthread_rwlockattr_setpshared F -GLIBC_2.12 pthread_self F -GLIBC_2.12 pthread_setaffinity_np F -GLIBC_2.12 pthread_setcancelstate F -GLIBC_2.12 pthread_setcanceltype F -GLIBC_2.12 pthread_setconcurrency F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.12 pthread_setschedparam F -GLIBC_2.12 pthread_setschedprio F -GLIBC_2.12 pthread_setspecific F -GLIBC_2.12 pthread_sigmask F -GLIBC_2.12 pthread_sigqueue F -GLIBC_2.12 pthread_spin_destroy F -GLIBC_2.12 pthread_spin_init F -GLIBC_2.12 pthread_spin_lock F -GLIBC_2.12 pthread_spin_trylock F -GLIBC_2.12 pthread_spin_unlock F -GLIBC_2.12 pthread_testcancel F -GLIBC_2.12 pthread_timedjoin_np F -GLIBC_2.12 pthread_tryjoin_np F -GLIBC_2.12 pthread_yield F -GLIBC_2.12 pwrite F -GLIBC_2.12 pwrite64 F -GLIBC_2.12 raise F -GLIBC_2.12 read F -GLIBC_2.12 recv F -GLIBC_2.12 recvfrom F -GLIBC_2.12 recvmsg F -GLIBC_2.12 sem_close F -GLIBC_2.12 sem_destroy F -GLIBC_2.12 sem_getvalue F -GLIBC_2.12 sem_init F -GLIBC_2.12 sem_open F -GLIBC_2.12 sem_post F -GLIBC_2.12 sem_timedwait F -GLIBC_2.12 sem_trywait F -GLIBC_2.12 sem_unlink F -GLIBC_2.12 sem_wait F -GLIBC_2.12 send F -GLIBC_2.12 sendmsg F -GLIBC_2.12 sendto F -GLIBC_2.12 sigaction F -GLIBC_2.12 siglongjmp F -GLIBC_2.12 sigwait F -GLIBC_2.12 system F -GLIBC_2.12 tcdrain F -GLIBC_2.12 vfork F -GLIBC_2.12 wait F -GLIBC_2.12 waitpid F -GLIBC_2.12 write F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libresolv.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libresolv.abilist deleted file mode 100644 index bd81642e3d..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libresolv.abilist +++ /dev/null @@ -1,92 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __b64_ntop F -GLIBC_2.12 __b64_pton F -GLIBC_2.12 __dn_comp F -GLIBC_2.12 __dn_count_labels F -GLIBC_2.12 __dn_expand F -GLIBC_2.12 __dn_skipname F -GLIBC_2.12 __fp_nquery F -GLIBC_2.12 __fp_query F -GLIBC_2.12 __fp_resstat F -GLIBC_2.12 __hostalias F -GLIBC_2.12 __loc_aton F -GLIBC_2.12 __loc_ntoa F -GLIBC_2.12 __p_cdname F -GLIBC_2.12 __p_cdnname F -GLIBC_2.12 __p_class F -GLIBC_2.12 __p_class_syms D 0xa8 -GLIBC_2.12 __p_fqname F -GLIBC_2.12 __p_fqnname F -GLIBC_2.12 __p_option F -GLIBC_2.12 __p_query F -GLIBC_2.12 __p_rcode F -GLIBC_2.12 __p_secstodate F -GLIBC_2.12 __p_time F -GLIBC_2.12 __p_type F -GLIBC_2.12 __p_type_syms D 0x450 -GLIBC_2.12 __putlong F -GLIBC_2.12 __putshort F -GLIBC_2.12 __res_close F -GLIBC_2.12 __res_dnok F -GLIBC_2.12 __res_hnok F -GLIBC_2.12 __res_hostalias F -GLIBC_2.12 __res_isourserver F -GLIBC_2.12 __res_mailok F -GLIBC_2.12 __res_mkquery F -GLIBC_2.12 __res_nameinquery F -GLIBC_2.12 __res_nmkquery F -GLIBC_2.12 __res_nquery F -GLIBC_2.12 __res_nquerydomain F -GLIBC_2.12 __res_nsearch F -GLIBC_2.12 __res_nsend F -GLIBC_2.12 __res_ownok F -GLIBC_2.12 __res_queriesmatch F -GLIBC_2.12 __res_query F -GLIBC_2.12 __res_querydomain F -GLIBC_2.12 __res_search F -GLIBC_2.12 __res_send F -GLIBC_2.12 __sym_ntop F -GLIBC_2.12 __sym_ntos F -GLIBC_2.12 __sym_ston F -GLIBC_2.12 _gethtbyaddr F -GLIBC_2.12 _gethtbyname F -GLIBC_2.12 _gethtbyname2 F -GLIBC_2.12 _gethtent F -GLIBC_2.12 _getlong F -GLIBC_2.12 _getshort F -GLIBC_2.12 _res_opcodes D 0x80 -GLIBC_2.12 _sethtent F -GLIBC_2.12 inet_net_ntop F -GLIBC_2.12 inet_net_pton F -GLIBC_2.12 inet_neta F -GLIBC_2.12 ns_datetosecs F -GLIBC_2.12 ns_format_ttl F -GLIBC_2.12 ns_get16 F -GLIBC_2.12 ns_get32 F -GLIBC_2.12 ns_initparse F -GLIBC_2.12 ns_makecanon F -GLIBC_2.12 ns_msg_getflag F -GLIBC_2.12 ns_name_compress F -GLIBC_2.12 ns_name_ntol F -GLIBC_2.12 ns_name_ntop F -GLIBC_2.12 ns_name_pack F -GLIBC_2.12 ns_name_pton F -GLIBC_2.12 ns_name_rollback F -GLIBC_2.12 ns_name_skip F -GLIBC_2.12 ns_name_uncompress F -GLIBC_2.12 ns_name_unpack F -GLIBC_2.12 ns_parse_ttl F -GLIBC_2.12 ns_parserr F -GLIBC_2.12 ns_put16 F -GLIBC_2.12 ns_put32 F -GLIBC_2.12 ns_samedomain F -GLIBC_2.12 ns_samename F -GLIBC_2.12 ns_skiprr F -GLIBC_2.12 ns_sprintrr F -GLIBC_2.12 ns_sprintrrf F -GLIBC_2.12 ns_subdomain F -GLIBC_2.12 res_gethostbyaddr F -GLIBC_2.12 res_gethostbyname F -GLIBC_2.12 res_gethostbyname2 F -GLIBC_2.12 res_send_setqhook F -GLIBC_2.12 res_send_setrhook F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/librt.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/librt.abilist deleted file mode 100644 index 14f5c8245d..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/librt.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __mq_open_2 F -GLIBC_2.12 aio_cancel F -GLIBC_2.12 aio_cancel64 F -GLIBC_2.12 aio_error F -GLIBC_2.12 aio_error64 F -GLIBC_2.12 aio_fsync F -GLIBC_2.12 aio_fsync64 F -GLIBC_2.12 aio_init F -GLIBC_2.12 aio_read F -GLIBC_2.12 aio_read64 F -GLIBC_2.12 aio_return F -GLIBC_2.12 aio_return64 F -GLIBC_2.12 aio_suspend F -GLIBC_2.12 aio_suspend64 F -GLIBC_2.12 aio_write F -GLIBC_2.12 aio_write64 F -GLIBC_2.12 clock_getcpuclockid F -GLIBC_2.12 clock_getres F -GLIBC_2.12 clock_gettime F -GLIBC_2.12 clock_nanosleep F -GLIBC_2.12 clock_settime F -GLIBC_2.12 lio_listio F -GLIBC_2.12 lio_listio64 F -GLIBC_2.12 mq_close F -GLIBC_2.12 mq_getattr F -GLIBC_2.12 mq_notify F -GLIBC_2.12 mq_open F -GLIBC_2.12 mq_receive F -GLIBC_2.12 mq_send F -GLIBC_2.12 mq_setattr F -GLIBC_2.12 mq_timedreceive F -GLIBC_2.12 mq_timedsend F -GLIBC_2.12 mq_unlink F -GLIBC_2.12 shm_open F -GLIBC_2.12 shm_unlink F -GLIBC_2.12 timer_create F -GLIBC_2.12 timer_delete F -GLIBC_2.12 timer_getoverrun F -GLIBC_2.12 timer_gettime F -GLIBC_2.12 timer_settime F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libthread_db.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libthread_db.abilist deleted file mode 100644 index 4aade0b7e0..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libthread_db.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 td_init F -GLIBC_2.12 td_log F -GLIBC_2.12 td_symbol_list F -GLIBC_2.12 td_ta_clear_event F -GLIBC_2.12 td_ta_delete F -GLIBC_2.12 td_ta_enable_stats F -GLIBC_2.12 td_ta_event_addr F -GLIBC_2.12 td_ta_event_getmsg F -GLIBC_2.12 td_ta_get_nthreads F -GLIBC_2.12 td_ta_get_ph F -GLIBC_2.12 td_ta_get_stats F -GLIBC_2.12 td_ta_map_id2thr F -GLIBC_2.12 td_ta_map_lwp2thr F -GLIBC_2.12 td_ta_new F -GLIBC_2.12 td_ta_reset_stats F -GLIBC_2.12 td_ta_set_event F -GLIBC_2.12 td_ta_setconcurrency F -GLIBC_2.12 td_ta_thr_iter F -GLIBC_2.12 td_ta_tsd_iter F -GLIBC_2.12 td_thr_clear_event F -GLIBC_2.12 td_thr_dbresume F -GLIBC_2.12 td_thr_dbsuspend F -GLIBC_2.12 td_thr_event_enable F -GLIBC_2.12 td_thr_event_getmsg F -GLIBC_2.12 td_thr_get_info F -GLIBC_2.12 td_thr_getfpregs F -GLIBC_2.12 td_thr_getgregs F -GLIBC_2.12 td_thr_getxregs F -GLIBC_2.12 td_thr_getxregsize F -GLIBC_2.12 td_thr_set_event F -GLIBC_2.12 td_thr_setfpregs F -GLIBC_2.12 td_thr_setgregs F -GLIBC_2.12 td_thr_setprio F -GLIBC_2.12 td_thr_setsigpending F -GLIBC_2.12 td_thr_setxregs F -GLIBC_2.12 td_thr_sigsetmask F -GLIBC_2.12 td_thr_tls_get_addr F -GLIBC_2.12 td_thr_tlsbase F -GLIBC_2.12 td_thr_tsd F -GLIBC_2.12 td_thr_validate F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libutil.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libutil.abilist deleted file mode 100644 index e4d432643c..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 forkpty F -GLIBC_2.12 login F -GLIBC_2.12 login_tty F -GLIBC_2.12 logout F -GLIBC_2.12 logwtmp F -GLIBC_2.12 openpty F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/Implies b/sysdeps/unix/sysv/linux/tile/tilepro/Implies deleted file mode 100644 index 0023bb77aa..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/Implies +++ /dev/null @@ -1,3 +0,0 @@ -unix/sysv/linux/tile -unix/sysv/linux/generic/wordsize-32 -unix/sysv/linux/generic diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/c++-types.data b/sysdeps/unix/sysv/linux/tile/tilepro/c++-types.data deleted file mode 100644 index 303f4570c8..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:i -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:i -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/ld.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/ld.abilist deleted file mode 100644 index f166310147..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/ld.abilist +++ /dev/null @@ -1,9 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __libc_stack_end D 0x4 -GLIBC_2.12 __tls_get_addr F -GLIBC_2.12 _dl_mcount F -GLIBC_2.12 _r_debug D 0x14 -GLIBC_2.12 calloc F -GLIBC_2.12 free F -GLIBC_2.12 malloc F -GLIBC_2.12 realloc F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/ldconfig.h b/sysdeps/unix/sysv/linux/tile/tilepro/ldconfig.h deleted file mode 100644 index 527825c106..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/ldconfig.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld.so.1", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libBrokenLocale.abilist deleted file mode 100644 index 0d64827515..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libanl.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libanl.abilist deleted file mode 100644 index a3b1cc08bf..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 gai_cancel F -GLIBC_2.12 gai_error F -GLIBC_2.12 gai_suspend F -GLIBC_2.12 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist deleted file mode 100644 index 41647d4610..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist +++ /dev/null @@ -1,2112 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _Exit F -GLIBC_2.12 _IO_2_1_stderr_ D 0xa0 -GLIBC_2.12 _IO_2_1_stdin_ D 0xa0 -GLIBC_2.12 _IO_2_1_stdout_ D 0xa0 -GLIBC_2.12 _IO_adjust_column F -GLIBC_2.12 _IO_adjust_wcolumn F -GLIBC_2.12 _IO_default_doallocate F -GLIBC_2.12 _IO_default_finish F -GLIBC_2.12 _IO_default_pbackfail F -GLIBC_2.12 _IO_default_uflow F -GLIBC_2.12 _IO_default_xsgetn F -GLIBC_2.12 _IO_default_xsputn F -GLIBC_2.12 _IO_do_write F -GLIBC_2.12 _IO_doallocbuf F -GLIBC_2.12 _IO_fclose F -GLIBC_2.12 _IO_fdopen F -GLIBC_2.12 _IO_feof F -GLIBC_2.12 _IO_ferror F -GLIBC_2.12 _IO_fflush F -GLIBC_2.12 _IO_fgetpos F -GLIBC_2.12 _IO_fgetpos64 F -GLIBC_2.12 _IO_fgets F -GLIBC_2.12 _IO_file_attach F -GLIBC_2.12 _IO_file_close F -GLIBC_2.12 _IO_file_close_it F -GLIBC_2.12 _IO_file_doallocate F -GLIBC_2.12 _IO_file_finish F -GLIBC_2.12 _IO_file_fopen F -GLIBC_2.12 _IO_file_init F -GLIBC_2.12 _IO_file_jumps D 0x54 -GLIBC_2.12 _IO_file_open F -GLIBC_2.12 _IO_file_overflow F -GLIBC_2.12 _IO_file_read F -GLIBC_2.12 _IO_file_seek F -GLIBC_2.12 _IO_file_seekoff F -GLIBC_2.12 _IO_file_setbuf F -GLIBC_2.12 _IO_file_stat F -GLIBC_2.12 _IO_file_sync F -GLIBC_2.12 _IO_file_underflow F -GLIBC_2.12 _IO_file_write F -GLIBC_2.12 _IO_file_xsputn F -GLIBC_2.12 _IO_flockfile F -GLIBC_2.12 _IO_flush_all F -GLIBC_2.12 _IO_flush_all_linebuffered F -GLIBC_2.12 _IO_fopen F -GLIBC_2.12 _IO_fprintf F -GLIBC_2.12 _IO_fputs F -GLIBC_2.12 _IO_fread F -GLIBC_2.12 _IO_free_backup_area F -GLIBC_2.12 _IO_free_wbackup_area F -GLIBC_2.12 _IO_fsetpos F -GLIBC_2.12 _IO_fsetpos64 F -GLIBC_2.12 _IO_ftell F -GLIBC_2.12 _IO_ftrylockfile F -GLIBC_2.12 _IO_funlockfile F -GLIBC_2.12 _IO_fwrite F -GLIBC_2.12 _IO_getc F -GLIBC_2.12 _IO_getline F -GLIBC_2.12 _IO_getline_info F -GLIBC_2.12 _IO_gets F -GLIBC_2.12 _IO_init F -GLIBC_2.12 _IO_init_marker F -GLIBC_2.12 _IO_init_wmarker F -GLIBC_2.12 _IO_iter_begin F -GLIBC_2.12 _IO_iter_end F -GLIBC_2.12 _IO_iter_file F -GLIBC_2.12 _IO_iter_next F -GLIBC_2.12 _IO_least_wmarker F -GLIBC_2.12 _IO_link_in F -GLIBC_2.12 _IO_list_all D 0x4 -GLIBC_2.12 _IO_list_lock F -GLIBC_2.12 _IO_list_resetlock F -GLIBC_2.12 _IO_list_unlock F -GLIBC_2.12 _IO_marker_delta F -GLIBC_2.12 _IO_marker_difference F -GLIBC_2.12 _IO_padn F -GLIBC_2.12 _IO_peekc_locked F -GLIBC_2.12 _IO_popen F -GLIBC_2.12 _IO_printf F -GLIBC_2.12 _IO_proc_close F -GLIBC_2.12 _IO_proc_open F -GLIBC_2.12 _IO_putc F -GLIBC_2.12 _IO_puts F -GLIBC_2.12 _IO_remove_marker F -GLIBC_2.12 _IO_seekmark F -GLIBC_2.12 _IO_seekoff F -GLIBC_2.12 _IO_seekpos F -GLIBC_2.12 _IO_seekwmark F -GLIBC_2.12 _IO_setb F -GLIBC_2.12 _IO_setbuffer F -GLIBC_2.12 _IO_setvbuf F -GLIBC_2.12 _IO_sgetn F -GLIBC_2.12 _IO_sprintf F -GLIBC_2.12 _IO_sputbackc F -GLIBC_2.12 _IO_sputbackwc F -GLIBC_2.12 _IO_sscanf F -GLIBC_2.12 _IO_str_init_readonly F -GLIBC_2.12 _IO_str_init_static F -GLIBC_2.12 _IO_str_overflow F -GLIBC_2.12 _IO_str_pbackfail F -GLIBC_2.12 _IO_str_seekoff F -GLIBC_2.12 _IO_str_underflow F -GLIBC_2.12 _IO_sungetc F -GLIBC_2.12 _IO_sungetwc F -GLIBC_2.12 _IO_switch_to_get_mode F -GLIBC_2.12 _IO_switch_to_main_wget_area F -GLIBC_2.12 _IO_switch_to_wbackup_area F -GLIBC_2.12 _IO_switch_to_wget_mode F -GLIBC_2.12 _IO_un_link F -GLIBC_2.12 _IO_ungetc F -GLIBC_2.12 _IO_unsave_markers F -GLIBC_2.12 _IO_unsave_wmarkers F -GLIBC_2.12 _IO_vfprintf F -GLIBC_2.12 _IO_vfscanf F -GLIBC_2.12 _IO_vsprintf F -GLIBC_2.12 _IO_wdefault_doallocate F -GLIBC_2.12 _IO_wdefault_finish F -GLIBC_2.12 _IO_wdefault_pbackfail F -GLIBC_2.12 _IO_wdefault_uflow F -GLIBC_2.12 _IO_wdefault_xsgetn F -GLIBC_2.12 _IO_wdefault_xsputn F -GLIBC_2.12 _IO_wdo_write F -GLIBC_2.12 _IO_wdoallocbuf F -GLIBC_2.12 _IO_wfile_jumps D 0x54 -GLIBC_2.12 _IO_wfile_overflow F -GLIBC_2.12 _IO_wfile_seekoff F -GLIBC_2.12 _IO_wfile_sync F -GLIBC_2.12 _IO_wfile_underflow F -GLIBC_2.12 _IO_wfile_xsputn F -GLIBC_2.12 _IO_wmarker_delta F -GLIBC_2.12 _IO_wsetb F -GLIBC_2.12 ___brk_addr D 0x4 -GLIBC_2.12 __adjtimex F -GLIBC_2.12 __after_morecore_hook D 0x4 -GLIBC_2.12 __argz_count F -GLIBC_2.12 __argz_next F -GLIBC_2.12 __argz_stringify F -GLIBC_2.12 __asprintf F -GLIBC_2.12 __asprintf_chk F -GLIBC_2.12 __assert F -GLIBC_2.12 __assert_fail F -GLIBC_2.12 __assert_perror_fail F -GLIBC_2.12 __backtrace F -GLIBC_2.12 __backtrace_symbols F -GLIBC_2.12 __backtrace_symbols_fd F -GLIBC_2.12 __bsd_getpgrp F -GLIBC_2.12 __bzero F -GLIBC_2.12 __check_rhosts_file D 0x4 -GLIBC_2.12 __chk_fail F -GLIBC_2.12 __clone F -GLIBC_2.12 __close F -GLIBC_2.12 __cmsg_nxthdr F -GLIBC_2.12 __confstr_chk F -GLIBC_2.12 __connect F -GLIBC_2.12 __ctype_b_loc F -GLIBC_2.12 __ctype_get_mb_cur_max F -GLIBC_2.12 __ctype_tolower_loc F -GLIBC_2.12 __ctype_toupper_loc F -GLIBC_2.12 __curbrk D 0x4 -GLIBC_2.12 __cxa_at_quick_exit F -GLIBC_2.12 __cxa_atexit F -GLIBC_2.12 __cxa_finalize F -GLIBC_2.12 __cyg_profile_func_enter F -GLIBC_2.12 __cyg_profile_func_exit F -GLIBC_2.12 __daylight D 0x4 -GLIBC_2.12 __dcgettext F -GLIBC_2.12 __default_morecore F -GLIBC_2.12 __dgettext F -GLIBC_2.12 __dprintf_chk F -GLIBC_2.12 __dup2 F -GLIBC_2.12 __duplocale F -GLIBC_2.12 __endmntent F -GLIBC_2.12 __environ D 0x4 -GLIBC_2.12 __errno_location F -GLIBC_2.12 __fbufsize F -GLIBC_2.12 __fcntl F -GLIBC_2.12 __ffs F -GLIBC_2.12 __fgets_chk F -GLIBC_2.12 __fgets_unlocked_chk F -GLIBC_2.12 __fgetws_chk F -GLIBC_2.12 __fgetws_unlocked_chk F -GLIBC_2.12 __finite F -GLIBC_2.12 __finitef F -GLIBC_2.12 __flbf F -GLIBC_2.12 __fork F -GLIBC_2.12 __fpending F -GLIBC_2.12 __fprintf_chk F -GLIBC_2.12 __fpu_control D 0x4 -GLIBC_2.12 __fpurge F -GLIBC_2.12 __fread_chk F -GLIBC_2.12 __fread_unlocked_chk F -GLIBC_2.12 __freadable F -GLIBC_2.12 __freading F -GLIBC_2.12 __free_hook D 0x4 -GLIBC_2.12 __freelocale F -GLIBC_2.12 __fsetlocking F -GLIBC_2.12 __fwprintf_chk F -GLIBC_2.12 __fwritable F -GLIBC_2.12 __fwriting F -GLIBC_2.12 __fxstat F -GLIBC_2.12 __fxstat64 F -GLIBC_2.12 __fxstatat F -GLIBC_2.12 __fxstatat64 F -GLIBC_2.12 __getcwd_chk F -GLIBC_2.12 __getdelim F -GLIBC_2.12 __getdomainname_chk F -GLIBC_2.12 __getgroups_chk F -GLIBC_2.12 __gethostname_chk F -GLIBC_2.12 __getlogin_r_chk F -GLIBC_2.12 __getmntent_r F -GLIBC_2.12 __getpagesize F -GLIBC_2.12 __getpgid F -GLIBC_2.12 __getpid F -GLIBC_2.12 __gets_chk F -GLIBC_2.12 __gettimeofday F -GLIBC_2.12 __getwd_chk F -GLIBC_2.12 __gmtime_r F -GLIBC_2.12 __h_errno_location F -GLIBC_2.12 __isalnum_l F -GLIBC_2.12 __isalpha_l F -GLIBC_2.12 __isascii_l F -GLIBC_2.12 __isblank_l F -GLIBC_2.12 __iscntrl_l F -GLIBC_2.12 __isctype F -GLIBC_2.12 __isdigit_l F -GLIBC_2.12 __isgraph_l F -GLIBC_2.12 __isinf F -GLIBC_2.12 __isinff F -GLIBC_2.12 __islower_l F -GLIBC_2.12 __isnan F -GLIBC_2.12 __isnanf F -GLIBC_2.12 __isoc99_fscanf F -GLIBC_2.12 __isoc99_fwscanf F -GLIBC_2.12 __isoc99_scanf F -GLIBC_2.12 __isoc99_sscanf F -GLIBC_2.12 __isoc99_swscanf F -GLIBC_2.12 __isoc99_vfscanf F -GLIBC_2.12 __isoc99_vfwscanf F -GLIBC_2.12 __isoc99_vscanf F -GLIBC_2.12 __isoc99_vsscanf F -GLIBC_2.12 __isoc99_vswscanf F -GLIBC_2.12 __isoc99_vwscanf F -GLIBC_2.12 __isoc99_wscanf F -GLIBC_2.12 __isprint_l F -GLIBC_2.12 __ispunct_l F -GLIBC_2.12 __isspace_l F -GLIBC_2.12 __isupper_l F -GLIBC_2.12 __iswalnum_l F -GLIBC_2.12 __iswalpha_l F -GLIBC_2.12 __iswblank_l F -GLIBC_2.12 __iswcntrl_l F -GLIBC_2.12 __iswctype F -GLIBC_2.12 __iswctype_l F -GLIBC_2.12 __iswdigit_l F -GLIBC_2.12 __iswgraph_l F -GLIBC_2.12 __iswlower_l F -GLIBC_2.12 __iswprint_l F -GLIBC_2.12 __iswpunct_l F -GLIBC_2.12 __iswspace_l F -GLIBC_2.12 __iswupper_l F -GLIBC_2.12 __iswxdigit_l F -GLIBC_2.12 __isxdigit_l F -GLIBC_2.12 __ivaliduser F -GLIBC_2.12 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.12 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.12 __key_gendes_LOCAL D 0x4 -GLIBC_2.12 __libc_allocate_rtsig F -GLIBC_2.12 __libc_calloc F -GLIBC_2.12 __libc_current_sigrtmax F -GLIBC_2.12 __libc_current_sigrtmin F -GLIBC_2.12 __libc_free F -GLIBC_2.12 __libc_freeres F -GLIBC_2.12 __libc_init_first F -GLIBC_2.12 __libc_mallinfo F -GLIBC_2.12 __libc_malloc F -GLIBC_2.12 __libc_mallopt F -GLIBC_2.12 __libc_memalign F -GLIBC_2.12 __libc_pvalloc F -GLIBC_2.12 __libc_realloc F -GLIBC_2.12 __libc_sa_len F -GLIBC_2.12 __libc_start_main F -GLIBC_2.12 __libc_valloc F -GLIBC_2.12 __longjmp_chk F -GLIBC_2.12 __lseek F -GLIBC_2.12 __lxstat F -GLIBC_2.12 __lxstat64 F -GLIBC_2.12 __malloc_hook D 0x4 -GLIBC_2.12 __malloc_initialize_hook D 0x4 -GLIBC_2.12 __mbrlen F -GLIBC_2.12 __mbrtowc F -GLIBC_2.12 __mbsnrtowcs_chk F -GLIBC_2.12 __mbsrtowcs_chk F -GLIBC_2.12 __mbstowcs_chk F -GLIBC_2.12 __mcount F -GLIBC_2.12 __memalign_hook D 0x4 -GLIBC_2.12 __memcpy_chk F -GLIBC_2.12 __memmove_chk F -GLIBC_2.12 __mempcpy F -GLIBC_2.12 __mempcpy_chk F -GLIBC_2.12 __mempcpy_small F -GLIBC_2.12 __memset_chk F -GLIBC_2.12 __monstartup F -GLIBC_2.12 __morecore D 0x4 -GLIBC_2.12 __nanosleep F -GLIBC_2.12 __newlocale F -GLIBC_2.12 __nl_langinfo_l F -GLIBC_2.12 __nss_configure_lookup F -GLIBC_2.12 __nss_database_lookup F -GLIBC_2.12 __nss_group_lookup F -GLIBC_2.12 __nss_hostname_digits_dots F -GLIBC_2.12 __nss_hosts_lookup F -GLIBC_2.12 __nss_next F -GLIBC_2.12 __nss_passwd_lookup F -GLIBC_2.12 __obstack_printf_chk F -GLIBC_2.12 __obstack_vprintf_chk F -GLIBC_2.12 __open F -GLIBC_2.12 __open64 F -GLIBC_2.12 __open64_2 F -GLIBC_2.12 __open_2 F -GLIBC_2.12 __openat64_2 F -GLIBC_2.12 __openat_2 F -GLIBC_2.12 __overflow F -GLIBC_2.12 __pipe F -GLIBC_2.12 __poll F -GLIBC_2.12 __posix_getopt F -GLIBC_2.12 __pread64 F -GLIBC_2.12 __pread64_chk F -GLIBC_2.12 __pread_chk F -GLIBC_2.12 __printf_chk F -GLIBC_2.12 __printf_fp F -GLIBC_2.12 __profile_frequency F -GLIBC_2.12 __progname D 0x4 -GLIBC_2.12 __progname_full D 0x4 -GLIBC_2.12 __ptsname_r_chk F -GLIBC_2.12 __pwrite64 F -GLIBC_2.12 __rawmemchr F -GLIBC_2.12 __rcmd_errstr D 0x4 -GLIBC_2.12 __read F -GLIBC_2.12 __read_chk F -GLIBC_2.12 __readlink_chk F -GLIBC_2.12 __readlinkat_chk F -GLIBC_2.12 __realloc_hook D 0x4 -GLIBC_2.12 __realpath_chk F -GLIBC_2.12 __recv_chk F -GLIBC_2.12 __recvfrom_chk F -GLIBC_2.12 __register_atfork F -GLIBC_2.12 __res_init F -GLIBC_2.12 __res_nclose F -GLIBC_2.12 __res_ninit F -GLIBC_2.12 __res_randomid F -GLIBC_2.12 __res_state F -GLIBC_2.12 __rpc_thread_createerr F -GLIBC_2.12 __rpc_thread_svc_fdset F -GLIBC_2.12 __rpc_thread_svc_max_pollfd F -GLIBC_2.12 __rpc_thread_svc_pollfd F -GLIBC_2.12 __sbrk F -GLIBC_2.12 __sched_cpualloc F -GLIBC_2.12 __sched_cpucount F -GLIBC_2.12 __sched_cpufree F -GLIBC_2.12 __sched_get_priority_max F -GLIBC_2.12 __sched_get_priority_min F -GLIBC_2.12 __sched_getparam F -GLIBC_2.12 __sched_getscheduler F -GLIBC_2.12 __sched_setscheduler F -GLIBC_2.12 __sched_yield F -GLIBC_2.12 __secure_getenv F -GLIBC_2.12 __select F -GLIBC_2.12 __setmntent F -GLIBC_2.12 __setpgid F -GLIBC_2.12 __sigaction F -GLIBC_2.12 __sigaddset F -GLIBC_2.12 __sigdelset F -GLIBC_2.12 __sigismember F -GLIBC_2.12 __signbit F -GLIBC_2.12 __signbitf F -GLIBC_2.12 __sigpause F -GLIBC_2.12 __sigsetjmp F -GLIBC_2.12 __sigsuspend F -GLIBC_2.12 __snprintf_chk F -GLIBC_2.12 __sprintf_chk F -GLIBC_2.12 __stack_chk_fail F -GLIBC_2.12 __statfs F -GLIBC_2.12 __stpcpy F -GLIBC_2.12 __stpcpy_chk F -GLIBC_2.12 __stpcpy_small F -GLIBC_2.12 __stpncpy F -GLIBC_2.12 __stpncpy_chk F -GLIBC_2.12 __strcasecmp F -GLIBC_2.12 __strcasecmp_l F -GLIBC_2.12 __strcasestr F -GLIBC_2.12 __strcat_chk F -GLIBC_2.12 __strcoll_l F -GLIBC_2.12 __strcpy_chk F -GLIBC_2.12 __strcpy_small F -GLIBC_2.12 __strcspn_c1 F -GLIBC_2.12 __strcspn_c2 F -GLIBC_2.12 __strcspn_c3 F -GLIBC_2.12 __strdup F -GLIBC_2.12 __strerror_r F -GLIBC_2.12 __strfmon_l F -GLIBC_2.12 __strftime_l F -GLIBC_2.12 __strncasecmp_l F -GLIBC_2.12 __strncat_chk F -GLIBC_2.12 __strncpy_chk F -GLIBC_2.12 __strndup F -GLIBC_2.12 __strpbrk_c2 F -GLIBC_2.12 __strpbrk_c3 F -GLIBC_2.12 __strsep_1c F -GLIBC_2.12 __strsep_2c F -GLIBC_2.12 __strsep_3c F -GLIBC_2.12 __strsep_g F -GLIBC_2.12 __strspn_c1 F -GLIBC_2.12 __strspn_c2 F -GLIBC_2.12 __strspn_c3 F -GLIBC_2.12 __strtod_internal F -GLIBC_2.12 __strtod_l F -GLIBC_2.12 __strtof_internal F -GLIBC_2.12 __strtof_l F -GLIBC_2.12 __strtok_r F -GLIBC_2.12 __strtok_r_1c F -GLIBC_2.12 __strtol_internal F -GLIBC_2.12 __strtol_l F -GLIBC_2.12 __strtold_internal F -GLIBC_2.12 __strtold_l F -GLIBC_2.12 __strtoll_internal F -GLIBC_2.12 __strtoll_l F -GLIBC_2.12 __strtoul_internal F -GLIBC_2.12 __strtoul_l F -GLIBC_2.12 __strtoull_internal F -GLIBC_2.12 __strtoull_l F -GLIBC_2.12 __strverscmp F -GLIBC_2.12 __strxfrm_l F -GLIBC_2.12 __swprintf_chk F -GLIBC_2.12 __sysconf F -GLIBC_2.12 __syslog_chk F -GLIBC_2.12 __sysv_signal F -GLIBC_2.12 __timezone D 0x4 -GLIBC_2.12 __toascii_l F -GLIBC_2.12 __tolower_l F -GLIBC_2.12 __toupper_l F -GLIBC_2.12 __towctrans F -GLIBC_2.12 __towctrans_l F -GLIBC_2.12 __towlower_l F -GLIBC_2.12 __towupper_l F -GLIBC_2.12 __ttyname_r_chk F -GLIBC_2.12 __tzname D 0x8 -GLIBC_2.12 __uflow F -GLIBC_2.12 __underflow F -GLIBC_2.12 __uselocale F -GLIBC_2.12 __vasprintf_chk F -GLIBC_2.12 __vdprintf_chk F -GLIBC_2.12 __vfork F -GLIBC_2.12 __vfprintf_chk F -GLIBC_2.12 __vfscanf F -GLIBC_2.12 __vfwprintf_chk F -GLIBC_2.12 __vprintf_chk F -GLIBC_2.12 __vsnprintf F -GLIBC_2.12 __vsnprintf_chk F -GLIBC_2.12 __vsprintf_chk F -GLIBC_2.12 __vsscanf F -GLIBC_2.12 __vswprintf_chk F -GLIBC_2.12 __vsyslog_chk F -GLIBC_2.12 __vwprintf_chk F -GLIBC_2.12 __wait F -GLIBC_2.12 __waitpid F -GLIBC_2.12 __wcpcpy_chk F -GLIBC_2.12 __wcpncpy_chk F -GLIBC_2.12 __wcrtomb_chk F -GLIBC_2.12 __wcscasecmp_l F -GLIBC_2.12 __wcscat_chk F -GLIBC_2.12 __wcscoll_l F -GLIBC_2.12 __wcscpy_chk F -GLIBC_2.12 __wcsftime_l F -GLIBC_2.12 __wcsncasecmp_l F -GLIBC_2.12 __wcsncat_chk F -GLIBC_2.12 __wcsncpy_chk F -GLIBC_2.12 __wcsnrtombs_chk F -GLIBC_2.12 __wcsrtombs_chk F -GLIBC_2.12 __wcstod_internal F -GLIBC_2.12 __wcstod_l F -GLIBC_2.12 __wcstof_internal F -GLIBC_2.12 __wcstof_l F -GLIBC_2.12 __wcstol_internal F -GLIBC_2.12 __wcstol_l F -GLIBC_2.12 __wcstold_internal F -GLIBC_2.12 __wcstold_l F -GLIBC_2.12 __wcstoll_internal F -GLIBC_2.12 __wcstoll_l F -GLIBC_2.12 __wcstombs_chk F -GLIBC_2.12 __wcstoul_internal F -GLIBC_2.12 __wcstoul_l F -GLIBC_2.12 __wcstoull_internal F -GLIBC_2.12 __wcstoull_l F -GLIBC_2.12 __wcsxfrm_l F -GLIBC_2.12 __wctomb_chk F -GLIBC_2.12 __wctrans_l F -GLIBC_2.12 __wctype_l F -GLIBC_2.12 __wmemcpy_chk F -GLIBC_2.12 __wmemmove_chk F -GLIBC_2.12 __wmempcpy_chk F -GLIBC_2.12 __wmemset_chk F -GLIBC_2.12 __woverflow F -GLIBC_2.12 __wprintf_chk F -GLIBC_2.12 __write F -GLIBC_2.12 __wuflow F -GLIBC_2.12 __wunderflow F -GLIBC_2.12 __xmknod F -GLIBC_2.12 __xmknodat F -GLIBC_2.12 __xpg_basename F -GLIBC_2.12 __xpg_sigpause F -GLIBC_2.12 __xpg_strerror_r F -GLIBC_2.12 __xstat F -GLIBC_2.12 __xstat64 F -GLIBC_2.12 _authenticate F -GLIBC_2.12 _dl_mcount_wrapper F -GLIBC_2.12 _dl_mcount_wrapper_check F -GLIBC_2.12 _environ D 0x4 -GLIBC_2.12 _exit F -GLIBC_2.12 _flush_cache F -GLIBC_2.12 _flushlbf F -GLIBC_2.12 _libc_intl_domainname D 0x5 -GLIBC_2.12 _longjmp F -GLIBC_2.12 _mcleanup F -GLIBC_2.12 _mcount F -GLIBC_2.12 _nl_default_dirname D 0x12 -GLIBC_2.12 _nl_domain_bindings D 0x4 -GLIBC_2.12 _nl_msg_cat_cntr D 0x4 -GLIBC_2.12 _null_auth D 0xc -GLIBC_2.12 _obstack_allocated_p F -GLIBC_2.12 _obstack_begin F -GLIBC_2.12 _obstack_begin_1 F -GLIBC_2.12 _obstack_free F -GLIBC_2.12 _obstack_memory_used F -GLIBC_2.12 _obstack_newchunk F -GLIBC_2.12 _res D 0x200 -GLIBC_2.12 _res_hconf D 0x30 -GLIBC_2.12 _rpc_dtablesize F -GLIBC_2.12 _seterr_reply F -GLIBC_2.12 _setjmp F -GLIBC_2.12 _sys_errlist D 0x21c -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 _sys_siglist D 0x104 -GLIBC_2.12 _tolower F -GLIBC_2.12 _toupper F -GLIBC_2.12 a64l F -GLIBC_2.12 abort F -GLIBC_2.12 abs F -GLIBC_2.12 accept F -GLIBC_2.12 accept4 F -GLIBC_2.12 access F -GLIBC_2.12 acct F -GLIBC_2.12 addmntent F -GLIBC_2.12 addseverity F -GLIBC_2.12 adjtime F -GLIBC_2.12 adjtimex F -GLIBC_2.12 advance F -GLIBC_2.12 alarm F -GLIBC_2.12 alphasort F -GLIBC_2.12 alphasort64 F -GLIBC_2.12 argp_err_exit_status D 0x4 -GLIBC_2.12 argp_error F -GLIBC_2.12 argp_failure F -GLIBC_2.12 argp_help F -GLIBC_2.12 argp_parse F -GLIBC_2.12 argp_program_bug_address D 0x4 -GLIBC_2.12 argp_program_version D 0x4 -GLIBC_2.12 argp_program_version_hook D 0x4 -GLIBC_2.12 argp_state_help F -GLIBC_2.12 argp_usage F -GLIBC_2.12 argz_add F -GLIBC_2.12 argz_add_sep F -GLIBC_2.12 argz_append F -GLIBC_2.12 argz_count F -GLIBC_2.12 argz_create F -GLIBC_2.12 argz_create_sep F -GLIBC_2.12 argz_delete F -GLIBC_2.12 argz_extract F -GLIBC_2.12 argz_insert F -GLIBC_2.12 argz_next F -GLIBC_2.12 argz_replace F -GLIBC_2.12 argz_stringify F -GLIBC_2.12 asctime F -GLIBC_2.12 asctime_r F -GLIBC_2.12 asprintf F -GLIBC_2.12 atof F -GLIBC_2.12 atoi F -GLIBC_2.12 atol F -GLIBC_2.12 atoll F -GLIBC_2.12 authdes_create F -GLIBC_2.12 authdes_getucred F -GLIBC_2.12 authdes_pk_create F -GLIBC_2.12 authnone_create F -GLIBC_2.12 authunix_create F -GLIBC_2.12 authunix_create_default F -GLIBC_2.12 backtrace F -GLIBC_2.12 backtrace_symbols F -GLIBC_2.12 backtrace_symbols_fd F -GLIBC_2.12 basename F -GLIBC_2.12 bcmp F -GLIBC_2.12 bcopy F -GLIBC_2.12 bdflush F -GLIBC_2.12 bind F -GLIBC_2.12 bind_textdomain_codeset F -GLIBC_2.12 bindresvport F -GLIBC_2.12 bindtextdomain F -GLIBC_2.12 brk F -GLIBC_2.12 bsd_signal F -GLIBC_2.12 bsearch F -GLIBC_2.12 btowc F -GLIBC_2.12 bzero F -GLIBC_2.12 cacheflush F -GLIBC_2.12 calloc F -GLIBC_2.12 callrpc F -GLIBC_2.12 canonicalize_file_name F -GLIBC_2.12 capget F -GLIBC_2.12 capset F -GLIBC_2.12 catclose F -GLIBC_2.12 catgets F -GLIBC_2.12 catopen F -GLIBC_2.12 cbc_crypt F -GLIBC_2.12 cfgetispeed F -GLIBC_2.12 cfgetospeed F -GLIBC_2.12 cfmakeraw F -GLIBC_2.12 cfree F -GLIBC_2.12 cfsetispeed F -GLIBC_2.12 cfsetospeed F -GLIBC_2.12 cfsetspeed F -GLIBC_2.12 chdir F -GLIBC_2.12 chflags F -GLIBC_2.12 chmod F -GLIBC_2.12 chown F -GLIBC_2.12 chroot F -GLIBC_2.12 clearenv F -GLIBC_2.12 clearerr F -GLIBC_2.12 clearerr_unlocked F -GLIBC_2.12 clnt_broadcast F -GLIBC_2.12 clnt_create F -GLIBC_2.12 clnt_pcreateerror F -GLIBC_2.12 clnt_perrno F -GLIBC_2.12 clnt_perror F -GLIBC_2.12 clnt_spcreateerror F -GLIBC_2.12 clnt_sperrno F -GLIBC_2.12 clnt_sperror F -GLIBC_2.12 clntraw_create F -GLIBC_2.12 clnttcp_create F -GLIBC_2.12 clntudp_bufcreate F -GLIBC_2.12 clntudp_create F -GLIBC_2.12 clntunix_create F -GLIBC_2.12 clock F -GLIBC_2.12 clone F -GLIBC_2.12 close F -GLIBC_2.12 closedir F -GLIBC_2.12 closelog F -GLIBC_2.12 confstr F -GLIBC_2.12 connect F -GLIBC_2.12 copysign F -GLIBC_2.12 copysignf F -GLIBC_2.12 copysignl F -GLIBC_2.12 creat F -GLIBC_2.12 creat64 F -GLIBC_2.12 create_module F -GLIBC_2.12 ctermid F -GLIBC_2.12 ctime F -GLIBC_2.12 ctime_r F -GLIBC_2.12 cuserid F -GLIBC_2.12 daemon F -GLIBC_2.12 daylight D 0x4 -GLIBC_2.12 dcgettext F -GLIBC_2.12 dcngettext F -GLIBC_2.12 delete_module F -GLIBC_2.12 des_setparity F -GLIBC_2.12 dgettext F -GLIBC_2.12 difftime F -GLIBC_2.12 dirfd F -GLIBC_2.12 dirname F -GLIBC_2.12 div F -GLIBC_2.12 dl_iterate_phdr F -GLIBC_2.12 dngettext F -GLIBC_2.12 dprintf F -GLIBC_2.12 drand48 F -GLIBC_2.12 drand48_r F -GLIBC_2.12 dup F -GLIBC_2.12 dup2 F -GLIBC_2.12 dup3 F -GLIBC_2.12 duplocale F -GLIBC_2.12 dysize F -GLIBC_2.12 eaccess F -GLIBC_2.12 ecb_crypt F -GLIBC_2.12 ecvt F -GLIBC_2.12 ecvt_r F -GLIBC_2.12 endaliasent F -GLIBC_2.12 endfsent F -GLIBC_2.12 endgrent F -GLIBC_2.12 endhostent F -GLIBC_2.12 endmntent F -GLIBC_2.12 endnetent F -GLIBC_2.12 endnetgrent F -GLIBC_2.12 endprotoent F -GLIBC_2.12 endpwent F -GLIBC_2.12 endrpcent F -GLIBC_2.12 endservent F -GLIBC_2.12 endsgent F -GLIBC_2.12 endspent F -GLIBC_2.12 endttyent F -GLIBC_2.12 endusershell F -GLIBC_2.12 endutent F -GLIBC_2.12 endutxent F -GLIBC_2.12 environ D 0x4 -GLIBC_2.12 envz_add F -GLIBC_2.12 envz_entry F -GLIBC_2.12 envz_get F -GLIBC_2.12 envz_merge F -GLIBC_2.12 envz_remove F -GLIBC_2.12 envz_strip F -GLIBC_2.12 epoll_create F -GLIBC_2.12 epoll_create1 F -GLIBC_2.12 epoll_ctl F -GLIBC_2.12 epoll_pwait F -GLIBC_2.12 epoll_wait F -GLIBC_2.12 erand48 F -GLIBC_2.12 erand48_r F -GLIBC_2.12 err F -GLIBC_2.12 error F -GLIBC_2.12 error_at_line F -GLIBC_2.12 error_message_count D 0x4 -GLIBC_2.12 error_one_per_line D 0x4 -GLIBC_2.12 error_print_progname D 0x4 -GLIBC_2.12 errx F -GLIBC_2.12 ether_aton F -GLIBC_2.12 ether_aton_r F -GLIBC_2.12 ether_hostton F -GLIBC_2.12 ether_line F -GLIBC_2.12 ether_ntoa F -GLIBC_2.12 ether_ntoa_r F -GLIBC_2.12 ether_ntohost F -GLIBC_2.12 euidaccess F -GLIBC_2.12 eventfd F -GLIBC_2.12 eventfd_read F -GLIBC_2.12 eventfd_write F -GLIBC_2.12 execl F -GLIBC_2.12 execle F -GLIBC_2.12 execlp F -GLIBC_2.12 execv F -GLIBC_2.12 execve F -GLIBC_2.12 execvp F -GLIBC_2.12 execvpe F -GLIBC_2.12 exit F -GLIBC_2.12 faccessat F -GLIBC_2.12 fallocate F -GLIBC_2.12 fallocate64 F -GLIBC_2.12 fattach F -GLIBC_2.12 fchdir F -GLIBC_2.12 fchflags F -GLIBC_2.12 fchmod F -GLIBC_2.12 fchmodat F -GLIBC_2.12 fchown F -GLIBC_2.12 fchownat F -GLIBC_2.12 fclose F -GLIBC_2.12 fcloseall F -GLIBC_2.12 fcntl F -GLIBC_2.12 fcvt F -GLIBC_2.12 fcvt_r F -GLIBC_2.12 fdatasync F -GLIBC_2.12 fdetach F -GLIBC_2.12 fdopen F -GLIBC_2.12 fdopendir F -GLIBC_2.12 feof F -GLIBC_2.12 feof_unlocked F -GLIBC_2.12 ferror F -GLIBC_2.12 ferror_unlocked F -GLIBC_2.12 fexecve F -GLIBC_2.12 fflush F -GLIBC_2.12 fflush_unlocked F -GLIBC_2.12 ffs F -GLIBC_2.12 ffsl F -GLIBC_2.12 ffsll F -GLIBC_2.12 fgetc F -GLIBC_2.12 fgetc_unlocked F -GLIBC_2.12 fgetgrent F -GLIBC_2.12 fgetgrent_r F -GLIBC_2.12 fgetpos F -GLIBC_2.12 fgetpos64 F -GLIBC_2.12 fgetpwent F -GLIBC_2.12 fgetpwent_r F -GLIBC_2.12 fgets F -GLIBC_2.12 fgets_unlocked F -GLIBC_2.12 fgetsgent F -GLIBC_2.12 fgetsgent_r F -GLIBC_2.12 fgetspent F -GLIBC_2.12 fgetspent_r F -GLIBC_2.12 fgetwc F -GLIBC_2.12 fgetwc_unlocked F -GLIBC_2.12 fgetws F -GLIBC_2.12 fgetws_unlocked F -GLIBC_2.12 fgetxattr F -GLIBC_2.12 fileno F -GLIBC_2.12 fileno_unlocked F -GLIBC_2.12 finite F -GLIBC_2.12 finitef F -GLIBC_2.12 finitel F -GLIBC_2.12 flistxattr F -GLIBC_2.12 flock F -GLIBC_2.12 flockfile F -GLIBC_2.12 fmemopen F -GLIBC_2.12 fmtmsg F -GLIBC_2.12 fnmatch F -GLIBC_2.12 fopen F -GLIBC_2.12 fopen64 F -GLIBC_2.12 fopencookie F -GLIBC_2.12 fork F -GLIBC_2.12 fpathconf F -GLIBC_2.12 fprintf F -GLIBC_2.12 fputc F -GLIBC_2.12 fputc_unlocked F -GLIBC_2.12 fputs F -GLIBC_2.12 fputs_unlocked F -GLIBC_2.12 fputwc F -GLIBC_2.12 fputwc_unlocked F -GLIBC_2.12 fputws F -GLIBC_2.12 fputws_unlocked F -GLIBC_2.12 fread F -GLIBC_2.12 fread_unlocked F -GLIBC_2.12 free F -GLIBC_2.12 freeaddrinfo F -GLIBC_2.12 freeifaddrs F -GLIBC_2.12 freelocale F -GLIBC_2.12 fremovexattr F -GLIBC_2.12 freopen F -GLIBC_2.12 freopen64 F -GLIBC_2.12 frexp F -GLIBC_2.12 frexpf F -GLIBC_2.12 frexpl F -GLIBC_2.12 fscanf F -GLIBC_2.12 fseek F -GLIBC_2.12 fseeko F -GLIBC_2.12 fseeko64 F -GLIBC_2.12 fsetpos F -GLIBC_2.12 fsetpos64 F -GLIBC_2.12 fsetxattr F -GLIBC_2.12 fstatfs F -GLIBC_2.12 fstatfs64 F -GLIBC_2.12 fstatvfs F -GLIBC_2.12 fstatvfs64 F -GLIBC_2.12 fsync F -GLIBC_2.12 ftell F -GLIBC_2.12 ftello F -GLIBC_2.12 ftello64 F -GLIBC_2.12 ftime F -GLIBC_2.12 ftok F -GLIBC_2.12 ftruncate F -GLIBC_2.12 ftruncate64 F -GLIBC_2.12 ftrylockfile F -GLIBC_2.12 fts_children F -GLIBC_2.12 fts_close F -GLIBC_2.12 fts_open F -GLIBC_2.12 fts_read F -GLIBC_2.12 fts_set F -GLIBC_2.12 ftw F -GLIBC_2.12 ftw64 F -GLIBC_2.12 funlockfile F -GLIBC_2.12 futimens F -GLIBC_2.12 futimes F -GLIBC_2.12 futimesat F -GLIBC_2.12 fwide F -GLIBC_2.12 fwprintf F -GLIBC_2.12 fwrite F -GLIBC_2.12 fwrite_unlocked F -GLIBC_2.12 fwscanf F -GLIBC_2.12 gai_strerror F -GLIBC_2.12 gcvt F -GLIBC_2.12 get_avphys_pages F -GLIBC_2.12 get_current_dir_name F -GLIBC_2.12 get_kernel_syms F -GLIBC_2.12 get_myaddress F -GLIBC_2.12 get_nprocs F -GLIBC_2.12 get_nprocs_conf F -GLIBC_2.12 get_phys_pages F -GLIBC_2.12 getaddrinfo F -GLIBC_2.12 getaliasbyname F -GLIBC_2.12 getaliasbyname_r F -GLIBC_2.12 getaliasent F -GLIBC_2.12 getaliasent_r F -GLIBC_2.12 getc F -GLIBC_2.12 getc_unlocked F -GLIBC_2.12 getchar F -GLIBC_2.12 getchar_unlocked F -GLIBC_2.12 getcontext F -GLIBC_2.12 getcwd F -GLIBC_2.12 getdate F -GLIBC_2.12 getdate_err D 0x4 -GLIBC_2.12 getdate_r F -GLIBC_2.12 getdelim F -GLIBC_2.12 getdirentries F -GLIBC_2.12 getdirentries64 F -GLIBC_2.12 getdomainname F -GLIBC_2.12 getdtablesize F -GLIBC_2.12 getegid F -GLIBC_2.12 getenv F -GLIBC_2.12 geteuid F -GLIBC_2.12 getfsent F -GLIBC_2.12 getfsfile F -GLIBC_2.12 getfsspec F -GLIBC_2.12 getgid F -GLIBC_2.12 getgrent F -GLIBC_2.12 getgrent_r F -GLIBC_2.12 getgrgid F -GLIBC_2.12 getgrgid_r F -GLIBC_2.12 getgrnam F -GLIBC_2.12 getgrnam_r F -GLIBC_2.12 getgrouplist F -GLIBC_2.12 getgroups F -GLIBC_2.12 gethostbyaddr F -GLIBC_2.12 gethostbyaddr_r F -GLIBC_2.12 gethostbyname F -GLIBC_2.12 gethostbyname2 F -GLIBC_2.12 gethostbyname2_r F -GLIBC_2.12 gethostbyname_r F -GLIBC_2.12 gethostent F -GLIBC_2.12 gethostent_r F -GLIBC_2.12 gethostid F -GLIBC_2.12 gethostname F -GLIBC_2.12 getifaddrs F -GLIBC_2.12 getipv4sourcefilter F -GLIBC_2.12 getitimer F -GLIBC_2.12 getline F -GLIBC_2.12 getloadavg F -GLIBC_2.12 getlogin F -GLIBC_2.12 getlogin_r F -GLIBC_2.12 getmntent F -GLIBC_2.12 getmntent_r F -GLIBC_2.12 getmsg F -GLIBC_2.12 getnameinfo F -GLIBC_2.12 getnetbyaddr F -GLIBC_2.12 getnetbyaddr_r F -GLIBC_2.12 getnetbyname F -GLIBC_2.12 getnetbyname_r F -GLIBC_2.12 getnetent F -GLIBC_2.12 getnetent_r F -GLIBC_2.12 getnetgrent F -GLIBC_2.12 getnetgrent_r F -GLIBC_2.12 getnetname F -GLIBC_2.12 getopt F -GLIBC_2.12 getopt_long F -GLIBC_2.12 getopt_long_only F -GLIBC_2.12 getpagesize F -GLIBC_2.12 getpass F -GLIBC_2.12 getpeername F -GLIBC_2.12 getpgid F -GLIBC_2.12 getpgrp F -GLIBC_2.12 getpid F -GLIBC_2.12 getpmsg F -GLIBC_2.12 getppid F -GLIBC_2.12 getpriority F -GLIBC_2.12 getprotobyname F -GLIBC_2.12 getprotobyname_r F -GLIBC_2.12 getprotobynumber F -GLIBC_2.12 getprotobynumber_r F -GLIBC_2.12 getprotoent F -GLIBC_2.12 getprotoent_r F -GLIBC_2.12 getpt F -GLIBC_2.12 getpublickey F -GLIBC_2.12 getpw F -GLIBC_2.12 getpwent F -GLIBC_2.12 getpwent_r F -GLIBC_2.12 getpwnam F -GLIBC_2.12 getpwnam_r F -GLIBC_2.12 getpwuid F -GLIBC_2.12 getpwuid_r F -GLIBC_2.12 getresgid F -GLIBC_2.12 getresuid F -GLIBC_2.12 getrlimit F -GLIBC_2.12 getrlimit64 F -GLIBC_2.12 getrpcbyname F -GLIBC_2.12 getrpcbyname_r F -GLIBC_2.12 getrpcbynumber F -GLIBC_2.12 getrpcbynumber_r F -GLIBC_2.12 getrpcent F -GLIBC_2.12 getrpcent_r F -GLIBC_2.12 getrpcport F -GLIBC_2.12 getrusage F -GLIBC_2.12 gets F -GLIBC_2.12 getsecretkey F -GLIBC_2.12 getservbyname F -GLIBC_2.12 getservbyname_r F -GLIBC_2.12 getservbyport F -GLIBC_2.12 getservbyport_r F -GLIBC_2.12 getservent F -GLIBC_2.12 getservent_r F -GLIBC_2.12 getsgent F -GLIBC_2.12 getsgent_r F -GLIBC_2.12 getsgnam F -GLIBC_2.12 getsgnam_r F -GLIBC_2.12 getsid F -GLIBC_2.12 getsockname F -GLIBC_2.12 getsockopt F -GLIBC_2.12 getsourcefilter F -GLIBC_2.12 getspent F -GLIBC_2.12 getspent_r F -GLIBC_2.12 getspnam F -GLIBC_2.12 getspnam_r F -GLIBC_2.12 getsubopt F -GLIBC_2.12 gettext F -GLIBC_2.12 gettimeofday F -GLIBC_2.12 getttyent F -GLIBC_2.12 getttynam F -GLIBC_2.12 getuid F -GLIBC_2.12 getusershell F -GLIBC_2.12 getutent F -GLIBC_2.12 getutent_r F -GLIBC_2.12 getutid F -GLIBC_2.12 getutid_r F -GLIBC_2.12 getutline F -GLIBC_2.12 getutline_r F -GLIBC_2.12 getutmp F -GLIBC_2.12 getutmpx F -GLIBC_2.12 getutxent F -GLIBC_2.12 getutxid F -GLIBC_2.12 getutxline F -GLIBC_2.12 getw F -GLIBC_2.12 getwc F -GLIBC_2.12 getwc_unlocked F -GLIBC_2.12 getwchar F -GLIBC_2.12 getwchar_unlocked F -GLIBC_2.12 getwd F -GLIBC_2.12 getxattr F -GLIBC_2.12 glob F -GLIBC_2.12 glob64 F -GLIBC_2.12 glob_pattern_p F -GLIBC_2.12 globfree F -GLIBC_2.12 globfree64 F -GLIBC_2.12 gmtime F -GLIBC_2.12 gmtime_r F -GLIBC_2.12 gnu_dev_major F -GLIBC_2.12 gnu_dev_makedev F -GLIBC_2.12 gnu_dev_minor F -GLIBC_2.12 gnu_get_libc_release F -GLIBC_2.12 gnu_get_libc_version F -GLIBC_2.12 grantpt F -GLIBC_2.12 group_member F -GLIBC_2.12 gsignal F -GLIBC_2.12 gtty F -GLIBC_2.12 h_errlist D 0x14 -GLIBC_2.12 h_nerr D 0x4 -GLIBC_2.12 hasmntopt F -GLIBC_2.12 hcreate F -GLIBC_2.12 hcreate_r F -GLIBC_2.12 hdestroy F -GLIBC_2.12 hdestroy_r F -GLIBC_2.12 herror F -GLIBC_2.12 host2netname F -GLIBC_2.12 hsearch F -GLIBC_2.12 hsearch_r F -GLIBC_2.12 hstrerror F -GLIBC_2.12 htonl F -GLIBC_2.12 htons F -GLIBC_2.12 iconv F -GLIBC_2.12 iconv_close F -GLIBC_2.12 iconv_open F -GLIBC_2.12 if_freenameindex F -GLIBC_2.12 if_indextoname F -GLIBC_2.12 if_nameindex F -GLIBC_2.12 if_nametoindex F -GLIBC_2.12 imaxabs F -GLIBC_2.12 imaxdiv F -GLIBC_2.12 in6addr_any D 0x10 -GLIBC_2.12 in6addr_loopback D 0x10 -GLIBC_2.12 index F -GLIBC_2.12 inet6_opt_append F -GLIBC_2.12 inet6_opt_find F -GLIBC_2.12 inet6_opt_finish F -GLIBC_2.12 inet6_opt_get_val F -GLIBC_2.12 inet6_opt_init F -GLIBC_2.12 inet6_opt_next F -GLIBC_2.12 inet6_opt_set_val F -GLIBC_2.12 inet6_option_alloc F -GLIBC_2.12 inet6_option_append F -GLIBC_2.12 inet6_option_find F -GLIBC_2.12 inet6_option_init F -GLIBC_2.12 inet6_option_next F -GLIBC_2.12 inet6_option_space F -GLIBC_2.12 inet6_rth_add F -GLIBC_2.12 inet6_rth_getaddr F -GLIBC_2.12 inet6_rth_init F -GLIBC_2.12 inet6_rth_reverse F -GLIBC_2.12 inet6_rth_segments F -GLIBC_2.12 inet6_rth_space F -GLIBC_2.12 inet_addr F -GLIBC_2.12 inet_aton F -GLIBC_2.12 inet_lnaof F -GLIBC_2.12 inet_makeaddr F -GLIBC_2.12 inet_netof F -GLIBC_2.12 inet_network F -GLIBC_2.12 inet_nsap_addr F -GLIBC_2.12 inet_nsap_ntoa F -GLIBC_2.12 inet_ntoa F -GLIBC_2.12 inet_ntop F -GLIBC_2.12 inet_pton F -GLIBC_2.12 init_module F -GLIBC_2.12 initgroups F -GLIBC_2.12 initstate F -GLIBC_2.12 initstate_r F -GLIBC_2.12 innetgr F -GLIBC_2.12 inotify_add_watch F -GLIBC_2.12 inotify_init F -GLIBC_2.12 inotify_init1 F -GLIBC_2.12 inotify_rm_watch F -GLIBC_2.12 insque F -GLIBC_2.12 ioctl F -GLIBC_2.12 iruserok F -GLIBC_2.12 iruserok_af F -GLIBC_2.12 isalnum F -GLIBC_2.12 isalnum_l F -GLIBC_2.12 isalpha F -GLIBC_2.12 isalpha_l F -GLIBC_2.12 isascii F -GLIBC_2.12 isastream F -GLIBC_2.12 isatty F -GLIBC_2.12 isblank F -GLIBC_2.12 isblank_l F -GLIBC_2.12 iscntrl F -GLIBC_2.12 iscntrl_l F -GLIBC_2.12 isctype F -GLIBC_2.12 isdigit F -GLIBC_2.12 isdigit_l F -GLIBC_2.12 isfdtype F -GLIBC_2.12 isgraph F -GLIBC_2.12 isgraph_l F -GLIBC_2.12 isinf F -GLIBC_2.12 isinff F -GLIBC_2.12 isinfl F -GLIBC_2.12 islower F -GLIBC_2.12 islower_l F -GLIBC_2.12 isnan F -GLIBC_2.12 isnanf F -GLIBC_2.12 isnanl F -GLIBC_2.12 isprint F -GLIBC_2.12 isprint_l F -GLIBC_2.12 ispunct F -GLIBC_2.12 ispunct_l F -GLIBC_2.12 isspace F -GLIBC_2.12 isspace_l F -GLIBC_2.12 isupper F -GLIBC_2.12 isupper_l F -GLIBC_2.12 iswalnum F -GLIBC_2.12 iswalnum_l F -GLIBC_2.12 iswalpha F -GLIBC_2.12 iswalpha_l F -GLIBC_2.12 iswblank F -GLIBC_2.12 iswblank_l F -GLIBC_2.12 iswcntrl F -GLIBC_2.12 iswcntrl_l F -GLIBC_2.12 iswctype F -GLIBC_2.12 iswctype_l F -GLIBC_2.12 iswdigit F -GLIBC_2.12 iswdigit_l F -GLIBC_2.12 iswgraph F -GLIBC_2.12 iswgraph_l F -GLIBC_2.12 iswlower F -GLIBC_2.12 iswlower_l F -GLIBC_2.12 iswprint F -GLIBC_2.12 iswprint_l F -GLIBC_2.12 iswpunct F -GLIBC_2.12 iswpunct_l F -GLIBC_2.12 iswspace F -GLIBC_2.12 iswspace_l F -GLIBC_2.12 iswupper F -GLIBC_2.12 iswupper_l F -GLIBC_2.12 iswxdigit F -GLIBC_2.12 iswxdigit_l F -GLIBC_2.12 isxdigit F -GLIBC_2.12 isxdigit_l F -GLIBC_2.12 jrand48 F -GLIBC_2.12 jrand48_r F -GLIBC_2.12 key_decryptsession F -GLIBC_2.12 key_decryptsession_pk F -GLIBC_2.12 key_encryptsession F -GLIBC_2.12 key_encryptsession_pk F -GLIBC_2.12 key_gendes F -GLIBC_2.12 key_get_conv F -GLIBC_2.12 key_secretkey_is_set F -GLIBC_2.12 key_setnet F -GLIBC_2.12 key_setsecret F -GLIBC_2.12 kill F -GLIBC_2.12 killpg F -GLIBC_2.12 klogctl F -GLIBC_2.12 l64a F -GLIBC_2.12 labs F -GLIBC_2.12 lchmod F -GLIBC_2.12 lchown F -GLIBC_2.12 lckpwdf F -GLIBC_2.12 lcong48 F -GLIBC_2.12 lcong48_r F -GLIBC_2.12 ldexp F -GLIBC_2.12 ldexpf F -GLIBC_2.12 ldexpl F -GLIBC_2.12 ldiv F -GLIBC_2.12 lfind F -GLIBC_2.12 lgetxattr F -GLIBC_2.12 link F -GLIBC_2.12 linkat F -GLIBC_2.12 listen F -GLIBC_2.12 listxattr F -GLIBC_2.12 llabs F -GLIBC_2.12 lldiv F -GLIBC_2.12 llistxattr F -GLIBC_2.12 llseek F -GLIBC_2.12 loc1 D 0x4 -GLIBC_2.12 loc2 D 0x4 -GLIBC_2.12 localeconv F -GLIBC_2.12 localtime F -GLIBC_2.12 localtime_r F -GLIBC_2.12 lockf F -GLIBC_2.12 lockf64 F -GLIBC_2.12 locs D 0x4 -GLIBC_2.12 longjmp F -GLIBC_2.12 lrand48 F -GLIBC_2.12 lrand48_r F -GLIBC_2.12 lremovexattr F -GLIBC_2.12 lsearch F -GLIBC_2.12 lseek F -GLIBC_2.12 lseek64 F -GLIBC_2.12 lsetxattr F -GLIBC_2.12 lutimes F -GLIBC_2.12 madvise F -GLIBC_2.12 makecontext F -GLIBC_2.12 mallinfo F -GLIBC_2.12 malloc F -GLIBC_2.12 malloc_get_state F -GLIBC_2.12 malloc_info F -GLIBC_2.12 malloc_set_state F -GLIBC_2.12 malloc_stats F -GLIBC_2.12 malloc_trim F -GLIBC_2.12 malloc_usable_size F -GLIBC_2.12 mallopt F -GLIBC_2.12 mallwatch D 0x4 -GLIBC_2.12 mblen F -GLIBC_2.12 mbrlen F -GLIBC_2.12 mbrtowc F -GLIBC_2.12 mbsinit F -GLIBC_2.12 mbsnrtowcs F -GLIBC_2.12 mbsrtowcs F -GLIBC_2.12 mbstowcs F -GLIBC_2.12 mbtowc F -GLIBC_2.12 mcheck F -GLIBC_2.12 mcheck_check_all F -GLIBC_2.12 mcheck_pedantic F -GLIBC_2.12 mcount F -GLIBC_2.12 memalign F -GLIBC_2.12 memccpy F -GLIBC_2.12 memchr F -GLIBC_2.12 memcmp F -GLIBC_2.12 memcpy F -GLIBC_2.12 memfrob F -GLIBC_2.12 memmem F -GLIBC_2.12 memmove F -GLIBC_2.12 mempcpy F -GLIBC_2.12 memrchr F -GLIBC_2.12 memset F -GLIBC_2.12 mincore F -GLIBC_2.12 mkdir F -GLIBC_2.12 mkdirat F -GLIBC_2.12 mkdtemp F -GLIBC_2.12 mkfifo F -GLIBC_2.12 mkfifoat F -GLIBC_2.12 mkostemp F -GLIBC_2.12 mkostemp64 F -GLIBC_2.12 mkostemps F -GLIBC_2.12 mkostemps64 F -GLIBC_2.12 mkstemp F -GLIBC_2.12 mkstemp64 F -GLIBC_2.12 mkstemps F -GLIBC_2.12 mkstemps64 F -GLIBC_2.12 mktemp F -GLIBC_2.12 mktime F -GLIBC_2.12 mlock F -GLIBC_2.12 mlockall F -GLIBC_2.12 mmap F -GLIBC_2.12 mmap64 F -GLIBC_2.12 modf F -GLIBC_2.12 modff F -GLIBC_2.12 modfl F -GLIBC_2.12 moncontrol F -GLIBC_2.12 monstartup F -GLIBC_2.12 mount F -GLIBC_2.12 mprobe F -GLIBC_2.12 mprotect F -GLIBC_2.12 mrand48 F -GLIBC_2.12 mrand48_r F -GLIBC_2.12 mremap F -GLIBC_2.12 msgctl F -GLIBC_2.12 msgget F -GLIBC_2.12 msgrcv F -GLIBC_2.12 msgsnd F -GLIBC_2.12 msync F -GLIBC_2.12 mtrace F -GLIBC_2.12 munlock F -GLIBC_2.12 munlockall F -GLIBC_2.12 munmap F -GLIBC_2.12 muntrace F -GLIBC_2.12 nanosleep F -GLIBC_2.12 netname2host F -GLIBC_2.12 netname2user F -GLIBC_2.12 newlocale F -GLIBC_2.12 nfsservctl F -GLIBC_2.12 nftw F -GLIBC_2.12 nftw64 F -GLIBC_2.12 ngettext F -GLIBC_2.12 nice F -GLIBC_2.12 nl_langinfo F -GLIBC_2.12 nl_langinfo_l F -GLIBC_2.12 nrand48 F -GLIBC_2.12 nrand48_r F -GLIBC_2.12 ntohl F -GLIBC_2.12 ntohs F -GLIBC_2.12 ntp_adjtime F -GLIBC_2.12 ntp_gettime F -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 obstack_alloc_failed_handler D 0x4 -GLIBC_2.12 obstack_exit_failure D 0x4 -GLIBC_2.12 obstack_free F -GLIBC_2.12 obstack_printf F -GLIBC_2.12 obstack_vprintf F -GLIBC_2.12 on_exit F -GLIBC_2.12 open F -GLIBC_2.12 open64 F -GLIBC_2.12 open_memstream F -GLIBC_2.12 open_wmemstream F -GLIBC_2.12 openat F -GLIBC_2.12 openat64 F -GLIBC_2.12 opendir F -GLIBC_2.12 openlog F -GLIBC_2.12 optarg D 0x4 -GLIBC_2.12 opterr D 0x4 -GLIBC_2.12 optind D 0x4 -GLIBC_2.12 optopt D 0x4 -GLIBC_2.12 parse_printf_format F -GLIBC_2.12 passwd2des F -GLIBC_2.12 pathconf F -GLIBC_2.12 pause F -GLIBC_2.12 pclose F -GLIBC_2.12 perror F -GLIBC_2.12 personality F -GLIBC_2.12 pipe F -GLIBC_2.12 pipe2 F -GLIBC_2.12 pivot_root F -GLIBC_2.12 pmap_getmaps F -GLIBC_2.12 pmap_getport F -GLIBC_2.12 pmap_rmtcall F -GLIBC_2.12 pmap_set F -GLIBC_2.12 pmap_unset F -GLIBC_2.12 poll F -GLIBC_2.12 popen F -GLIBC_2.12 posix_fadvise F -GLIBC_2.12 posix_fadvise64 F -GLIBC_2.12 posix_fallocate F -GLIBC_2.12 posix_fallocate64 F -GLIBC_2.12 posix_madvise F -GLIBC_2.12 posix_memalign F -GLIBC_2.12 posix_openpt F -GLIBC_2.12 posix_spawn F -GLIBC_2.12 posix_spawn_file_actions_addclose F -GLIBC_2.12 posix_spawn_file_actions_adddup2 F -GLIBC_2.12 posix_spawn_file_actions_addopen F -GLIBC_2.12 posix_spawn_file_actions_destroy F -GLIBC_2.12 posix_spawn_file_actions_init F -GLIBC_2.12 posix_spawnattr_destroy F -GLIBC_2.12 posix_spawnattr_getflags F -GLIBC_2.12 posix_spawnattr_getpgroup F -GLIBC_2.12 posix_spawnattr_getschedparam F -GLIBC_2.12 posix_spawnattr_getschedpolicy F -GLIBC_2.12 posix_spawnattr_getsigdefault F -GLIBC_2.12 posix_spawnattr_getsigmask F -GLIBC_2.12 posix_spawnattr_init F -GLIBC_2.12 posix_spawnattr_setflags F -GLIBC_2.12 posix_spawnattr_setpgroup F -GLIBC_2.12 posix_spawnattr_setschedparam F -GLIBC_2.12 posix_spawnattr_setschedpolicy F -GLIBC_2.12 posix_spawnattr_setsigdefault F -GLIBC_2.12 posix_spawnattr_setsigmask F -GLIBC_2.12 posix_spawnp F -GLIBC_2.12 ppoll F -GLIBC_2.12 prctl F -GLIBC_2.12 pread F -GLIBC_2.12 pread64 F -GLIBC_2.12 preadv F -GLIBC_2.12 preadv64 F -GLIBC_2.12 printf F -GLIBC_2.12 printf_size F -GLIBC_2.12 printf_size_info F -GLIBC_2.12 profil F -GLIBC_2.12 program_invocation_name D 0x4 -GLIBC_2.12 program_invocation_short_name D 0x4 -GLIBC_2.12 pselect F -GLIBC_2.12 psiginfo F -GLIBC_2.12 psignal F -GLIBC_2.12 pthread_attr_destroy F -GLIBC_2.12 pthread_attr_getdetachstate F -GLIBC_2.12 pthread_attr_getinheritsched F -GLIBC_2.12 pthread_attr_getschedparam F -GLIBC_2.12 pthread_attr_getschedpolicy F -GLIBC_2.12 pthread_attr_getscope F -GLIBC_2.12 pthread_attr_init F -GLIBC_2.12 pthread_attr_setdetachstate F -GLIBC_2.12 pthread_attr_setinheritsched F -GLIBC_2.12 pthread_attr_setschedparam F -GLIBC_2.12 pthread_attr_setschedpolicy F -GLIBC_2.12 pthread_attr_setscope F -GLIBC_2.12 pthread_cond_broadcast F -GLIBC_2.12 pthread_cond_destroy F -GLIBC_2.12 pthread_cond_init F -GLIBC_2.12 pthread_cond_signal F -GLIBC_2.12 pthread_cond_timedwait F -GLIBC_2.12 pthread_cond_wait F -GLIBC_2.12 pthread_condattr_destroy F -GLIBC_2.12 pthread_condattr_init F -GLIBC_2.12 pthread_equal F -GLIBC_2.12 pthread_exit F -GLIBC_2.12 pthread_getschedparam F -GLIBC_2.12 pthread_mutex_destroy F -GLIBC_2.12 pthread_mutex_init F -GLIBC_2.12 pthread_mutex_lock F -GLIBC_2.12 pthread_mutex_unlock F -GLIBC_2.12 pthread_self F -GLIBC_2.12 pthread_setcancelstate F -GLIBC_2.12 pthread_setcanceltype F -GLIBC_2.12 pthread_setschedparam F -GLIBC_2.12 ptrace F -GLIBC_2.12 ptsname F -GLIBC_2.12 ptsname_r F -GLIBC_2.12 putc F -GLIBC_2.12 putc_unlocked F -GLIBC_2.12 putchar F -GLIBC_2.12 putchar_unlocked F -GLIBC_2.12 putenv F -GLIBC_2.12 putgrent F -GLIBC_2.12 putmsg F -GLIBC_2.12 putpmsg F -GLIBC_2.12 putpwent F -GLIBC_2.12 puts F -GLIBC_2.12 putsgent F -GLIBC_2.12 putspent F -GLIBC_2.12 pututline F -GLIBC_2.12 pututxline F -GLIBC_2.12 putw F -GLIBC_2.12 putwc F -GLIBC_2.12 putwc_unlocked F -GLIBC_2.12 putwchar F -GLIBC_2.12 putwchar_unlocked F -GLIBC_2.12 pvalloc F -GLIBC_2.12 pwrite F -GLIBC_2.12 pwrite64 F -GLIBC_2.12 pwritev F -GLIBC_2.12 pwritev64 F -GLIBC_2.12 qecvt F -GLIBC_2.12 qecvt_r F -GLIBC_2.12 qfcvt F -GLIBC_2.12 qfcvt_r F -GLIBC_2.12 qgcvt F -GLIBC_2.12 qsort F -GLIBC_2.12 qsort_r F -GLIBC_2.12 query_module F -GLIBC_2.12 quick_exit F -GLIBC_2.12 quotactl F -GLIBC_2.12 raise F -GLIBC_2.12 rand F -GLIBC_2.12 rand_r F -GLIBC_2.12 random F -GLIBC_2.12 random_r F -GLIBC_2.12 rawmemchr F -GLIBC_2.12 rcmd F -GLIBC_2.12 rcmd_af F -GLIBC_2.12 re_comp F -GLIBC_2.12 re_compile_fastmap F -GLIBC_2.12 re_compile_pattern F -GLIBC_2.12 re_exec F -GLIBC_2.12 re_match F -GLIBC_2.12 re_match_2 F -GLIBC_2.12 re_search F -GLIBC_2.12 re_search_2 F -GLIBC_2.12 re_set_registers F -GLIBC_2.12 re_set_syntax F -GLIBC_2.12 re_syntax_options D 0x4 -GLIBC_2.12 read F -GLIBC_2.12 readahead F -GLIBC_2.12 readdir F -GLIBC_2.12 readdir64 F -GLIBC_2.12 readdir64_r F -GLIBC_2.12 readdir_r F -GLIBC_2.12 readlink F -GLIBC_2.12 readlinkat F -GLIBC_2.12 readv F -GLIBC_2.12 realloc F -GLIBC_2.12 realpath F -GLIBC_2.12 reboot F -GLIBC_2.12 recv F -GLIBC_2.12 recvfrom F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 recvmsg F -GLIBC_2.12 regcomp F -GLIBC_2.12 regerror F -GLIBC_2.12 regexec F -GLIBC_2.12 regfree F -GLIBC_2.12 register_printf_function F -GLIBC_2.12 register_printf_modifier F -GLIBC_2.12 register_printf_specifier F -GLIBC_2.12 register_printf_type F -GLIBC_2.12 registerrpc F -GLIBC_2.12 remap_file_pages F -GLIBC_2.12 remove F -GLIBC_2.12 removexattr F -GLIBC_2.12 remque F -GLIBC_2.12 rename F -GLIBC_2.12 renameat F -GLIBC_2.12 revoke F -GLIBC_2.12 rewind F -GLIBC_2.12 rewinddir F -GLIBC_2.12 rexec F -GLIBC_2.12 rexec_af F -GLIBC_2.12 rexecoptions D 0x4 -GLIBC_2.12 rindex F -GLIBC_2.12 rmdir F -GLIBC_2.12 rpc_createerr D 0x10 -GLIBC_2.12 rpmatch F -GLIBC_2.12 rresvport F -GLIBC_2.12 rresvport_af F -GLIBC_2.12 rtime F -GLIBC_2.12 ruserok F -GLIBC_2.12 ruserok_af F -GLIBC_2.12 ruserpass F -GLIBC_2.12 sbrk F -GLIBC_2.12 scalbn F -GLIBC_2.12 scalbnf F -GLIBC_2.12 scalbnl F -GLIBC_2.12 scandir F -GLIBC_2.12 scandir64 F -GLIBC_2.12 scanf F -GLIBC_2.12 sched_get_priority_max F -GLIBC_2.12 sched_get_priority_min F -GLIBC_2.12 sched_getaffinity F -GLIBC_2.12 sched_getcpu F -GLIBC_2.12 sched_getparam F -GLIBC_2.12 sched_getscheduler F -GLIBC_2.12 sched_rr_get_interval F -GLIBC_2.12 sched_setaffinity F -GLIBC_2.12 sched_setparam F -GLIBC_2.12 sched_setscheduler F -GLIBC_2.12 sched_yield F -GLIBC_2.12 seed48 F -GLIBC_2.12 seed48_r F -GLIBC_2.12 seekdir F -GLIBC_2.12 select F -GLIBC_2.12 semctl F -GLIBC_2.12 semget F -GLIBC_2.12 semop F -GLIBC_2.12 semtimedop F -GLIBC_2.12 send F -GLIBC_2.12 sendfile F -GLIBC_2.12 sendfile64 F -GLIBC_2.12 sendmsg F -GLIBC_2.12 sendto F -GLIBC_2.12 set_dataplane F -GLIBC_2.12 setaliasent F -GLIBC_2.12 setbuf F -GLIBC_2.12 setbuffer F -GLIBC_2.12 setcontext F -GLIBC_2.12 setdomainname F -GLIBC_2.12 setegid F -GLIBC_2.12 setenv F -GLIBC_2.12 seteuid F -GLIBC_2.12 setfsent F -GLIBC_2.12 setfsgid F -GLIBC_2.12 setfsuid F -GLIBC_2.12 setgid F -GLIBC_2.12 setgrent F -GLIBC_2.12 setgroups F -GLIBC_2.12 sethostent F -GLIBC_2.12 sethostid F -GLIBC_2.12 sethostname F -GLIBC_2.12 setipv4sourcefilter F -GLIBC_2.12 setitimer F -GLIBC_2.12 setjmp F -GLIBC_2.12 setlinebuf F -GLIBC_2.12 setlocale F -GLIBC_2.12 setlogin F -GLIBC_2.12 setlogmask F -GLIBC_2.12 setmntent F -GLIBC_2.12 setnetent F -GLIBC_2.12 setnetgrent F -GLIBC_2.12 setpgid F -GLIBC_2.12 setpgrp F -GLIBC_2.12 setpriority F -GLIBC_2.12 setprotoent F -GLIBC_2.12 setpwent F -GLIBC_2.12 setregid F -GLIBC_2.12 setresgid F -GLIBC_2.12 setresuid F -GLIBC_2.12 setreuid F -GLIBC_2.12 setrlimit F -GLIBC_2.12 setrlimit64 F -GLIBC_2.12 setrpcent F -GLIBC_2.12 setservent F -GLIBC_2.12 setsgent F -GLIBC_2.12 setsid F -GLIBC_2.12 setsockopt F -GLIBC_2.12 setsourcefilter F -GLIBC_2.12 setspent F -GLIBC_2.12 setstate F -GLIBC_2.12 setstate_r F -GLIBC_2.12 settimeofday F -GLIBC_2.12 setttyent F -GLIBC_2.12 setuid F -GLIBC_2.12 setusershell F -GLIBC_2.12 setutent F -GLIBC_2.12 setutxent F -GLIBC_2.12 setvbuf F -GLIBC_2.12 setxattr F -GLIBC_2.12 sgetsgent F -GLIBC_2.12 sgetsgent_r F -GLIBC_2.12 sgetspent F -GLIBC_2.12 sgetspent_r F -GLIBC_2.12 shmat F -GLIBC_2.12 shmctl F -GLIBC_2.12 shmdt F -GLIBC_2.12 shmget F -GLIBC_2.12 shutdown F -GLIBC_2.12 sigaction F -GLIBC_2.12 sigaddset F -GLIBC_2.12 sigaltstack F -GLIBC_2.12 sigandset F -GLIBC_2.12 sigblock F -GLIBC_2.12 sigdelset F -GLIBC_2.12 sigemptyset F -GLIBC_2.12 sigfillset F -GLIBC_2.12 siggetmask F -GLIBC_2.12 sighold F -GLIBC_2.12 sigignore F -GLIBC_2.12 siginterrupt F -GLIBC_2.12 sigisemptyset F -GLIBC_2.12 sigismember F -GLIBC_2.12 siglongjmp F -GLIBC_2.12 signal F -GLIBC_2.12 signalfd F -GLIBC_2.12 sigorset F -GLIBC_2.12 sigpause F -GLIBC_2.12 sigpending F -GLIBC_2.12 sigprocmask F -GLIBC_2.12 sigqueue F -GLIBC_2.12 sigrelse F -GLIBC_2.12 sigreturn F -GLIBC_2.12 sigset F -GLIBC_2.12 sigsetmask F -GLIBC_2.12 sigstack F -GLIBC_2.12 sigsuspend F -GLIBC_2.12 sigtimedwait F -GLIBC_2.12 sigvec F -GLIBC_2.12 sigwait F -GLIBC_2.12 sigwaitinfo F -GLIBC_2.12 sleep F -GLIBC_2.12 snprintf F -GLIBC_2.12 sockatmark F -GLIBC_2.12 socket F -GLIBC_2.12 socketpair F -GLIBC_2.12 splice F -GLIBC_2.12 sprintf F -GLIBC_2.12 sprofil F -GLIBC_2.12 srand F -GLIBC_2.12 srand48 F -GLIBC_2.12 srand48_r F -GLIBC_2.12 srandom F -GLIBC_2.12 srandom_r F -GLIBC_2.12 sscanf F -GLIBC_2.12 ssignal F -GLIBC_2.12 sstk F -GLIBC_2.12 statfs F -GLIBC_2.12 statfs64 F -GLIBC_2.12 statvfs F -GLIBC_2.12 statvfs64 F -GLIBC_2.12 stderr D 0x4 -GLIBC_2.12 stdin D 0x4 -GLIBC_2.12 stdout D 0x4 -GLIBC_2.12 step F -GLIBC_2.12 stime F -GLIBC_2.12 stpcpy F -GLIBC_2.12 stpncpy F -GLIBC_2.12 strcasecmp F -GLIBC_2.12 strcasecmp_l F -GLIBC_2.12 strcasestr F -GLIBC_2.12 strcat F -GLIBC_2.12 strchr F -GLIBC_2.12 strchrnul F -GLIBC_2.12 strcmp F -GLIBC_2.12 strcoll F -GLIBC_2.12 strcoll_l F -GLIBC_2.12 strcpy F -GLIBC_2.12 strcspn F -GLIBC_2.12 strdup F -GLIBC_2.12 strerror F -GLIBC_2.12 strerror_l F -GLIBC_2.12 strerror_r F -GLIBC_2.12 strfmon F -GLIBC_2.12 strfmon_l F -GLIBC_2.12 strfry F -GLIBC_2.12 strftime F -GLIBC_2.12 strftime_l F -GLIBC_2.12 strlen F -GLIBC_2.12 strncasecmp F -GLIBC_2.12 strncasecmp_l F -GLIBC_2.12 strncat F -GLIBC_2.12 strncmp F -GLIBC_2.12 strncpy F -GLIBC_2.12 strndup F -GLIBC_2.12 strnlen F -GLIBC_2.12 strpbrk F -GLIBC_2.12 strptime F -GLIBC_2.12 strptime_l F -GLIBC_2.12 strrchr F -GLIBC_2.12 strsep F -GLIBC_2.12 strsignal F -GLIBC_2.12 strspn F -GLIBC_2.12 strstr F -GLIBC_2.12 strtod F -GLIBC_2.12 strtod_l F -GLIBC_2.12 strtof F -GLIBC_2.12 strtof_l F -GLIBC_2.12 strtoimax F -GLIBC_2.12 strtok F -GLIBC_2.12 strtok_r F -GLIBC_2.12 strtol F -GLIBC_2.12 strtol_l F -GLIBC_2.12 strtold F -GLIBC_2.12 strtold_l F -GLIBC_2.12 strtoll F -GLIBC_2.12 strtoll_l F -GLIBC_2.12 strtoq F -GLIBC_2.12 strtoul F -GLIBC_2.12 strtoul_l F -GLIBC_2.12 strtoull F -GLIBC_2.12 strtoull_l F -GLIBC_2.12 strtoumax F -GLIBC_2.12 strtouq F -GLIBC_2.12 strverscmp F -GLIBC_2.12 strxfrm F -GLIBC_2.12 strxfrm_l F -GLIBC_2.12 stty F -GLIBC_2.12 svc_exit F -GLIBC_2.12 svc_fdset D 0x80 -GLIBC_2.12 svc_getreq F -GLIBC_2.12 svc_getreq_common F -GLIBC_2.12 svc_getreq_poll F -GLIBC_2.12 svc_getreqset F -GLIBC_2.12 svc_max_pollfd D 0x4 -GLIBC_2.12 svc_pollfd D 0x4 -GLIBC_2.12 svc_register F -GLIBC_2.12 svc_run F -GLIBC_2.12 svc_sendreply F -GLIBC_2.12 svc_unregister F -GLIBC_2.12 svcauthdes_stats D 0xc -GLIBC_2.12 svcerr_auth F -GLIBC_2.12 svcerr_decode F -GLIBC_2.12 svcerr_noproc F -GLIBC_2.12 svcerr_noprog F -GLIBC_2.12 svcerr_progvers F -GLIBC_2.12 svcerr_systemerr F -GLIBC_2.12 svcerr_weakauth F -GLIBC_2.12 svcfd_create F -GLIBC_2.12 svcraw_create F -GLIBC_2.12 svctcp_create F -GLIBC_2.12 svcudp_bufcreate F -GLIBC_2.12 svcudp_create F -GLIBC_2.12 svcudp_enablecache F -GLIBC_2.12 svcunix_create F -GLIBC_2.12 svcunixfd_create F -GLIBC_2.12 swab F -GLIBC_2.12 swapcontext F -GLIBC_2.12 swapoff F -GLIBC_2.12 swapon F -GLIBC_2.12 swprintf F -GLIBC_2.12 swscanf F -GLIBC_2.12 symlink F -GLIBC_2.12 symlinkat F -GLIBC_2.12 sync F -GLIBC_2.12 sync_file_range F -GLIBC_2.12 sys_errlist D 0x21c -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.12 sys_sigabbrev D 0x104 -GLIBC_2.12 sys_siglist D 0x104 -GLIBC_2.12 syscall F -GLIBC_2.12 sysconf F -GLIBC_2.12 sysctl F -GLIBC_2.12 sysinfo F -GLIBC_2.12 syslog F -GLIBC_2.12 system F -GLIBC_2.12 sysv_signal F -GLIBC_2.12 tcdrain F -GLIBC_2.12 tcflow F -GLIBC_2.12 tcflush F -GLIBC_2.12 tcgetattr F -GLIBC_2.12 tcgetpgrp F -GLIBC_2.12 tcgetsid F -GLIBC_2.12 tcsendbreak F -GLIBC_2.12 tcsetattr F -GLIBC_2.12 tcsetpgrp F -GLIBC_2.12 tdelete F -GLIBC_2.12 tdestroy F -GLIBC_2.12 tee F -GLIBC_2.12 telldir F -GLIBC_2.12 tempnam F -GLIBC_2.12 textdomain F -GLIBC_2.12 tfind F -GLIBC_2.12 time F -GLIBC_2.12 timegm F -GLIBC_2.12 timelocal F -GLIBC_2.12 timerfd_create F -GLIBC_2.12 timerfd_gettime F -GLIBC_2.12 timerfd_settime F -GLIBC_2.12 times F -GLIBC_2.12 timezone D 0x4 -GLIBC_2.12 tmpfile F -GLIBC_2.12 tmpfile64 F -GLIBC_2.12 tmpnam F -GLIBC_2.12 tmpnam_r F -GLIBC_2.12 toascii F -GLIBC_2.12 tolower F -GLIBC_2.12 tolower_l F -GLIBC_2.12 toupper F -GLIBC_2.12 toupper_l F -GLIBC_2.12 towctrans F -GLIBC_2.12 towctrans_l F -GLIBC_2.12 towlower F -GLIBC_2.12 towlower_l F -GLIBC_2.12 towupper F -GLIBC_2.12 towupper_l F -GLIBC_2.12 tr_break F -GLIBC_2.12 truncate F -GLIBC_2.12 truncate64 F -GLIBC_2.12 tsearch F -GLIBC_2.12 ttyname F -GLIBC_2.12 ttyname_r F -GLIBC_2.12 ttyslot F -GLIBC_2.12 twalk F -GLIBC_2.12 tzname D 0x8 -GLIBC_2.12 tzset F -GLIBC_2.12 ualarm F -GLIBC_2.12 ulckpwdf F -GLIBC_2.12 ulimit F -GLIBC_2.12 umask F -GLIBC_2.12 umount F -GLIBC_2.12 umount2 F -GLIBC_2.12 uname F -GLIBC_2.12 ungetc F -GLIBC_2.12 ungetwc F -GLIBC_2.12 unlink F -GLIBC_2.12 unlinkat F -GLIBC_2.12 unlockpt F -GLIBC_2.12 unsetenv F -GLIBC_2.12 unshare F -GLIBC_2.12 updwtmp F -GLIBC_2.12 updwtmpx F -GLIBC_2.12 uselib F -GLIBC_2.12 uselocale F -GLIBC_2.12 user2netname F -GLIBC_2.12 usleep F -GLIBC_2.12 ustat F -GLIBC_2.12 utime F -GLIBC_2.12 utimensat F -GLIBC_2.12 utimes F -GLIBC_2.12 utmpname F -GLIBC_2.12 utmpxname F -GLIBC_2.12 valloc F -GLIBC_2.12 vasprintf F -GLIBC_2.12 vdprintf F -GLIBC_2.12 verr F -GLIBC_2.12 verrx F -GLIBC_2.12 versionsort F -GLIBC_2.12 versionsort64 F -GLIBC_2.12 vfork F -GLIBC_2.12 vfprintf F -GLIBC_2.12 vfscanf F -GLIBC_2.12 vfwprintf F -GLIBC_2.12 vfwscanf F -GLIBC_2.12 vhangup F -GLIBC_2.12 vlimit F -GLIBC_2.12 vmsplice F -GLIBC_2.12 vprintf F -GLIBC_2.12 vscanf F -GLIBC_2.12 vsnprintf F -GLIBC_2.12 vsprintf F -GLIBC_2.12 vsscanf F -GLIBC_2.12 vswprintf F -GLIBC_2.12 vswscanf F -GLIBC_2.12 vsyslog F -GLIBC_2.12 vtimes F -GLIBC_2.12 vwarn F -GLIBC_2.12 vwarnx F -GLIBC_2.12 vwprintf F -GLIBC_2.12 vwscanf F -GLIBC_2.12 wait F -GLIBC_2.12 wait3 F -GLIBC_2.12 wait4 F -GLIBC_2.12 waitid F -GLIBC_2.12 waitpid F -GLIBC_2.12 warn F -GLIBC_2.12 warnx F -GLIBC_2.12 wcpcpy F -GLIBC_2.12 wcpncpy F -GLIBC_2.12 wcrtomb F -GLIBC_2.12 wcscasecmp F -GLIBC_2.12 wcscasecmp_l F -GLIBC_2.12 wcscat F -GLIBC_2.12 wcschr F -GLIBC_2.12 wcschrnul F -GLIBC_2.12 wcscmp F -GLIBC_2.12 wcscoll F -GLIBC_2.12 wcscoll_l F -GLIBC_2.12 wcscpy F -GLIBC_2.12 wcscspn F -GLIBC_2.12 wcsdup F -GLIBC_2.12 wcsftime F -GLIBC_2.12 wcsftime_l F -GLIBC_2.12 wcslen F -GLIBC_2.12 wcsncasecmp F -GLIBC_2.12 wcsncasecmp_l F -GLIBC_2.12 wcsncat F -GLIBC_2.12 wcsncmp F -GLIBC_2.12 wcsncpy F -GLIBC_2.12 wcsnlen F -GLIBC_2.12 wcsnrtombs F -GLIBC_2.12 wcspbrk F -GLIBC_2.12 wcsrchr F -GLIBC_2.12 wcsrtombs F -GLIBC_2.12 wcsspn F -GLIBC_2.12 wcsstr F -GLIBC_2.12 wcstod F -GLIBC_2.12 wcstod_l F -GLIBC_2.12 wcstof F -GLIBC_2.12 wcstof_l F -GLIBC_2.12 wcstoimax F -GLIBC_2.12 wcstok F -GLIBC_2.12 wcstol F -GLIBC_2.12 wcstol_l F -GLIBC_2.12 wcstold F -GLIBC_2.12 wcstold_l F -GLIBC_2.12 wcstoll F -GLIBC_2.12 wcstoll_l F -GLIBC_2.12 wcstombs F -GLIBC_2.12 wcstoq F -GLIBC_2.12 wcstoul F -GLIBC_2.12 wcstoul_l F -GLIBC_2.12 wcstoull F -GLIBC_2.12 wcstoull_l F -GLIBC_2.12 wcstoumax F -GLIBC_2.12 wcstouq F -GLIBC_2.12 wcswcs F -GLIBC_2.12 wcswidth F -GLIBC_2.12 wcsxfrm F -GLIBC_2.12 wcsxfrm_l F -GLIBC_2.12 wctob F -GLIBC_2.12 wctomb F -GLIBC_2.12 wctrans F -GLIBC_2.12 wctrans_l F -GLIBC_2.12 wctype F -GLIBC_2.12 wctype_l F -GLIBC_2.12 wcwidth F -GLIBC_2.12 wmemchr F -GLIBC_2.12 wmemcmp F -GLIBC_2.12 wmemcpy F -GLIBC_2.12 wmemmove F -GLIBC_2.12 wmempcpy F -GLIBC_2.12 wmemset F -GLIBC_2.12 wordexp F -GLIBC_2.12 wordfree F -GLIBC_2.12 wprintf F -GLIBC_2.12 write F -GLIBC_2.12 writev F -GLIBC_2.12 wscanf F -GLIBC_2.12 xdecrypt F -GLIBC_2.12 xdr_accepted_reply F -GLIBC_2.12 xdr_array F -GLIBC_2.12 xdr_authdes_cred F -GLIBC_2.12 xdr_authdes_verf F -GLIBC_2.12 xdr_authunix_parms F -GLIBC_2.12 xdr_bool F -GLIBC_2.12 xdr_bytes F -GLIBC_2.12 xdr_callhdr F -GLIBC_2.12 xdr_callmsg F -GLIBC_2.12 xdr_char F -GLIBC_2.12 xdr_cryptkeyarg F -GLIBC_2.12 xdr_cryptkeyarg2 F -GLIBC_2.12 xdr_cryptkeyres F -GLIBC_2.12 xdr_des_block F -GLIBC_2.12 xdr_double F -GLIBC_2.12 xdr_enum F -GLIBC_2.12 xdr_float F -GLIBC_2.12 xdr_free F -GLIBC_2.12 xdr_getcredres F -GLIBC_2.12 xdr_hyper F -GLIBC_2.12 xdr_int F -GLIBC_2.12 xdr_int16_t F -GLIBC_2.12 xdr_int32_t F -GLIBC_2.12 xdr_int64_t F -GLIBC_2.12 xdr_int8_t F -GLIBC_2.12 xdr_key_netstarg F -GLIBC_2.12 xdr_key_netstres F -GLIBC_2.12 xdr_keybuf F -GLIBC_2.12 xdr_keystatus F -GLIBC_2.12 xdr_long F -GLIBC_2.12 xdr_longlong_t F -GLIBC_2.12 xdr_netnamestr F -GLIBC_2.12 xdr_netobj F -GLIBC_2.12 xdr_opaque F -GLIBC_2.12 xdr_opaque_auth F -GLIBC_2.12 xdr_pmap F -GLIBC_2.12 xdr_pmaplist F -GLIBC_2.12 xdr_pointer F -GLIBC_2.12 xdr_quad_t F -GLIBC_2.12 xdr_reference F -GLIBC_2.12 xdr_rejected_reply F -GLIBC_2.12 xdr_replymsg F -GLIBC_2.12 xdr_rmtcall_args F -GLIBC_2.12 xdr_rmtcallres F -GLIBC_2.12 xdr_short F -GLIBC_2.12 xdr_sizeof F -GLIBC_2.12 xdr_string F -GLIBC_2.12 xdr_u_char F -GLIBC_2.12 xdr_u_hyper F -GLIBC_2.12 xdr_u_int F -GLIBC_2.12 xdr_u_long F -GLIBC_2.12 xdr_u_longlong_t F -GLIBC_2.12 xdr_u_quad_t F -GLIBC_2.12 xdr_u_short F -GLIBC_2.12 xdr_uint16_t F -GLIBC_2.12 xdr_uint32_t F -GLIBC_2.12 xdr_uint64_t F -GLIBC_2.12 xdr_uint8_t F -GLIBC_2.12 xdr_union F -GLIBC_2.12 xdr_unixcred F -GLIBC_2.12 xdr_vector F -GLIBC_2.12 xdr_void F -GLIBC_2.12 xdr_wrapstring F -GLIBC_2.12 xdrmem_create F -GLIBC_2.12 xdrrec_create F -GLIBC_2.12 xdrrec_endofrecord F -GLIBC_2.12 xdrrec_eof F -GLIBC_2.12 xdrrec_skiprecord F -GLIBC_2.12 xdrstdio_create F -GLIBC_2.12 xencrypt F -GLIBC_2.12 xprt_register F -GLIBC_2.12 xprt_unregister F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 clock_adjtime F -GLIBC_2.15 fanotify_init F -GLIBC_2.15 fanotify_mark F -GLIBC_2.15 name_to_handle_at F -GLIBC_2.15 open_by_handle_at F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 prlimit F -GLIBC_2.15 prlimit64 F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.15 sendmmsg F -GLIBC_2.15 setns F -GLIBC_2.15 syncfs F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libcrypt.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libcrypt.abilist deleted file mode 100644 index d5643802b7..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 crypt F -GLIBC_2.12 crypt_r F -GLIBC_2.12 encrypt F -GLIBC_2.12 encrypt_r F -GLIBC_2.12 fcrypt F -GLIBC_2.12 setkey F -GLIBC_2.12 setkey_r F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libdl.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libdl.abilist deleted file mode 100644 index cabc30c239..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/libdl.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 dladdr F -GLIBC_2.12 dladdr1 F -GLIBC_2.12 dlclose F -GLIBC_2.12 dlerror F -GLIBC_2.12 dlinfo F -GLIBC_2.12 dlmopen F -GLIBC_2.12 dlopen F -GLIBC_2.12 dlsym F -GLIBC_2.12 dlvsym F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist deleted file mode 100644 index 0059c27fa2..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist +++ /dev/null @@ -1,431 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _LIB_VERSION D 0x4 -GLIBC_2.12 __clog10 F -GLIBC_2.12 __clog10f F -GLIBC_2.12 __clog10l F -GLIBC_2.12 __finite F -GLIBC_2.12 __finitef F -GLIBC_2.12 __fpclassify F -GLIBC_2.12 __fpclassifyf F -GLIBC_2.12 __signbit F -GLIBC_2.12 __signbitf F -GLIBC_2.12 acos F -GLIBC_2.12 acosf F -GLIBC_2.12 acosh F -GLIBC_2.12 acoshf F -GLIBC_2.12 acoshl F -GLIBC_2.12 acosl F -GLIBC_2.12 asin F -GLIBC_2.12 asinf F -GLIBC_2.12 asinh F -GLIBC_2.12 asinhf F -GLIBC_2.12 asinhl F -GLIBC_2.12 asinl F -GLIBC_2.12 atan F -GLIBC_2.12 atan2 F -GLIBC_2.12 atan2f F -GLIBC_2.12 atan2l F -GLIBC_2.12 atanf F -GLIBC_2.12 atanh F -GLIBC_2.12 atanhf F -GLIBC_2.12 atanhl F -GLIBC_2.12 atanl F -GLIBC_2.12 cabs F -GLIBC_2.12 cabsf F -GLIBC_2.12 cabsl F -GLIBC_2.12 cacos F -GLIBC_2.12 cacosf F -GLIBC_2.12 cacosh F -GLIBC_2.12 cacoshf F -GLIBC_2.12 cacoshl F -GLIBC_2.12 cacosl F -GLIBC_2.12 carg F -GLIBC_2.12 cargf F -GLIBC_2.12 cargl F -GLIBC_2.12 casin F -GLIBC_2.12 casinf F -GLIBC_2.12 casinh F -GLIBC_2.12 casinhf F -GLIBC_2.12 casinhl F -GLIBC_2.12 casinl F -GLIBC_2.12 catan F -GLIBC_2.12 catanf F -GLIBC_2.12 catanh F -GLIBC_2.12 catanhf F -GLIBC_2.12 catanhl F -GLIBC_2.12 catanl F -GLIBC_2.12 cbrt F -GLIBC_2.12 cbrtf F -GLIBC_2.12 cbrtl F -GLIBC_2.12 ccos F -GLIBC_2.12 ccosf F -GLIBC_2.12 ccosh F -GLIBC_2.12 ccoshf F -GLIBC_2.12 ccoshl F -GLIBC_2.12 ccosl F -GLIBC_2.12 ceil F -GLIBC_2.12 ceilf F -GLIBC_2.12 ceill F -GLIBC_2.12 cexp F -GLIBC_2.12 cexpf F -GLIBC_2.12 cexpl F -GLIBC_2.12 cimag F -GLIBC_2.12 cimagf F -GLIBC_2.12 cimagl F -GLIBC_2.12 clog F -GLIBC_2.12 clog10 F -GLIBC_2.12 clog10f F -GLIBC_2.12 clog10l F -GLIBC_2.12 clogf F -GLIBC_2.12 clogl F -GLIBC_2.12 conj F -GLIBC_2.12 conjf F -GLIBC_2.12 conjl F -GLIBC_2.12 copysign F -GLIBC_2.12 copysignf F -GLIBC_2.12 copysignl F -GLIBC_2.12 cos F -GLIBC_2.12 cosf F -GLIBC_2.12 cosh F -GLIBC_2.12 coshf F -GLIBC_2.12 coshl F -GLIBC_2.12 cosl F -GLIBC_2.12 cpow F -GLIBC_2.12 cpowf F -GLIBC_2.12 cpowl F -GLIBC_2.12 cproj F -GLIBC_2.12 cprojf F -GLIBC_2.12 cprojl F -GLIBC_2.12 creal F -GLIBC_2.12 crealf F -GLIBC_2.12 creall F -GLIBC_2.12 csin F -GLIBC_2.12 csinf F -GLIBC_2.12 csinh F -GLIBC_2.12 csinhf F -GLIBC_2.12 csinhl F -GLIBC_2.12 csinl F -GLIBC_2.12 csqrt F -GLIBC_2.12 csqrtf F -GLIBC_2.12 csqrtl F -GLIBC_2.12 ctan F -GLIBC_2.12 ctanf F -GLIBC_2.12 ctanh F -GLIBC_2.12 ctanhf F -GLIBC_2.12 ctanhl F -GLIBC_2.12 ctanl F -GLIBC_2.12 drem F -GLIBC_2.12 dremf F -GLIBC_2.12 dreml F -GLIBC_2.12 erf F -GLIBC_2.12 erfc F -GLIBC_2.12 erfcf F -GLIBC_2.12 erfcl F -GLIBC_2.12 erff F -GLIBC_2.12 erfl F -GLIBC_2.12 exp F -GLIBC_2.12 exp10 F -GLIBC_2.12 exp10f F -GLIBC_2.12 exp10l F -GLIBC_2.12 exp2 F -GLIBC_2.12 exp2f F -GLIBC_2.12 exp2l F -GLIBC_2.12 expf F -GLIBC_2.12 expl F -GLIBC_2.12 expm1 F -GLIBC_2.12 expm1f F -GLIBC_2.12 expm1l F -GLIBC_2.12 fabs F -GLIBC_2.12 fabsf F -GLIBC_2.12 fabsl F -GLIBC_2.12 fdim F -GLIBC_2.12 fdimf F -GLIBC_2.12 fdiml F -GLIBC_2.12 feclearexcept F -GLIBC_2.12 fedisableexcept F -GLIBC_2.12 feenableexcept F -GLIBC_2.12 fegetenv F -GLIBC_2.12 fegetexcept F -GLIBC_2.12 fegetexceptflag F -GLIBC_2.12 fegetround F -GLIBC_2.12 feholdexcept F -GLIBC_2.12 feraiseexcept F -GLIBC_2.12 fesetenv F -GLIBC_2.12 fesetexceptflag F -GLIBC_2.12 fesetround F -GLIBC_2.12 fetestexcept F -GLIBC_2.12 feupdateenv F -GLIBC_2.12 finite F -GLIBC_2.12 finitef F -GLIBC_2.12 finitel F -GLIBC_2.12 floor F -GLIBC_2.12 floorf F -GLIBC_2.12 floorl F -GLIBC_2.12 fma F -GLIBC_2.12 fmaf F -GLIBC_2.12 fmal F -GLIBC_2.12 fmax F -GLIBC_2.12 fmaxf F -GLIBC_2.12 fmaxl F -GLIBC_2.12 fmin F -GLIBC_2.12 fminf F -GLIBC_2.12 fminl F -GLIBC_2.12 fmod F -GLIBC_2.12 fmodf F -GLIBC_2.12 fmodl F -GLIBC_2.12 frexp F -GLIBC_2.12 frexpf F -GLIBC_2.12 frexpl F -GLIBC_2.12 gamma F -GLIBC_2.12 gammaf F -GLIBC_2.12 gammal F -GLIBC_2.12 hypot F -GLIBC_2.12 hypotf F -GLIBC_2.12 hypotl F -GLIBC_2.12 ilogb F -GLIBC_2.12 ilogbf F -GLIBC_2.12 ilogbl F -GLIBC_2.12 j0 F -GLIBC_2.12 j0f F -GLIBC_2.12 j0l F -GLIBC_2.12 j1 F -GLIBC_2.12 j1f F -GLIBC_2.12 j1l F -GLIBC_2.12 jn F -GLIBC_2.12 jnf F -GLIBC_2.12 jnl F -GLIBC_2.12 ldexp F -GLIBC_2.12 ldexpf F -GLIBC_2.12 ldexpl F -GLIBC_2.12 lgamma F -GLIBC_2.12 lgamma_r F -GLIBC_2.12 lgammaf F -GLIBC_2.12 lgammaf_r F -GLIBC_2.12 lgammal F -GLIBC_2.12 lgammal_r F -GLIBC_2.12 llrint F -GLIBC_2.12 llrintf F -GLIBC_2.12 llrintl F -GLIBC_2.12 llround F -GLIBC_2.12 llroundf F -GLIBC_2.12 llroundl F -GLIBC_2.12 log F -GLIBC_2.12 log10 F -GLIBC_2.12 log10f F -GLIBC_2.12 log10l F -GLIBC_2.12 log1p F -GLIBC_2.12 log1pf F -GLIBC_2.12 log1pl F -GLIBC_2.12 log2 F -GLIBC_2.12 log2f F -GLIBC_2.12 log2l F -GLIBC_2.12 logb F -GLIBC_2.12 logbf F -GLIBC_2.12 logbl F -GLIBC_2.12 logf F -GLIBC_2.12 logl F -GLIBC_2.12 lrint F -GLIBC_2.12 lrintf F -GLIBC_2.12 lrintl F -GLIBC_2.12 lround F -GLIBC_2.12 lroundf F -GLIBC_2.12 lroundl F -GLIBC_2.12 matherr F -GLIBC_2.12 modf F -GLIBC_2.12 modff F -GLIBC_2.12 modfl F -GLIBC_2.12 nan F -GLIBC_2.12 nanf F -GLIBC_2.12 nanl F -GLIBC_2.12 nearbyint F -GLIBC_2.12 nearbyintf F -GLIBC_2.12 nearbyintl F -GLIBC_2.12 nextafter F -GLIBC_2.12 nextafterf F -GLIBC_2.12 nextafterl F -GLIBC_2.12 nexttoward F -GLIBC_2.12 nexttowardf F -GLIBC_2.12 nexttowardl F -GLIBC_2.12 pow F -GLIBC_2.12 pow10 F -GLIBC_2.12 pow10f F -GLIBC_2.12 pow10l F -GLIBC_2.12 powf F -GLIBC_2.12 powl F -GLIBC_2.12 remainder F -GLIBC_2.12 remainderf F -GLIBC_2.12 remainderl F -GLIBC_2.12 remquo F -GLIBC_2.12 remquof F -GLIBC_2.12 remquol F -GLIBC_2.12 rint F -GLIBC_2.12 rintf F -GLIBC_2.12 rintl F -GLIBC_2.12 round F -GLIBC_2.12 roundf F -GLIBC_2.12 roundl F -GLIBC_2.12 scalb F -GLIBC_2.12 scalbf F -GLIBC_2.12 scalbl F -GLIBC_2.12 scalbln F -GLIBC_2.12 scalblnf F -GLIBC_2.12 scalblnl F -GLIBC_2.12 scalbn F -GLIBC_2.12 scalbnf F -GLIBC_2.12 scalbnl F -GLIBC_2.12 signgam D 0x4 -GLIBC_2.12 significand F -GLIBC_2.12 significandf F -GLIBC_2.12 significandl F -GLIBC_2.12 sin F -GLIBC_2.12 sincos F -GLIBC_2.12 sincosf F -GLIBC_2.12 sincosl F -GLIBC_2.12 sinf F -GLIBC_2.12 sinh F -GLIBC_2.12 sinhf F -GLIBC_2.12 sinhl F -GLIBC_2.12 sinl F -GLIBC_2.12 sqrt F -GLIBC_2.12 sqrtf F -GLIBC_2.12 sqrtl F -GLIBC_2.12 tan F -GLIBC_2.12 tanf F -GLIBC_2.12 tanh F -GLIBC_2.12 tanhf F -GLIBC_2.12 tanhl F -GLIBC_2.12 tanl F -GLIBC_2.12 tgamma F -GLIBC_2.12 tgammaf F -GLIBC_2.12 tgammal F -GLIBC_2.12 trunc F -GLIBC_2.12 truncf F -GLIBC_2.12 truncl F -GLIBC_2.12 y0 F -GLIBC_2.12 y0f F -GLIBC_2.12 y0l F -GLIBC_2.12 y1 F -GLIBC_2.12 y1f F -GLIBC_2.12 y1l F -GLIBC_2.12 yn F -GLIBC_2.12 ynf F -GLIBC_2.12 ynl F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libnsl.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libnsl.abilist deleted file mode 100644 index 0277e5c1a8..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/libnsl.abilist +++ /dev/null @@ -1,122 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __free_fdresult F -GLIBC_2.12 __nis_default_access F -GLIBC_2.12 __nis_default_group F -GLIBC_2.12 __nis_default_owner F -GLIBC_2.12 __nis_default_ttl F -GLIBC_2.12 __nis_finddirectory F -GLIBC_2.12 __nis_hash F -GLIBC_2.12 __nisbind_connect F -GLIBC_2.12 __nisbind_create F -GLIBC_2.12 __nisbind_destroy F -GLIBC_2.12 __nisbind_next F -GLIBC_2.12 __yp_check F -GLIBC_2.12 nis_add F -GLIBC_2.12 nis_add_entry F -GLIBC_2.12 nis_addmember F -GLIBC_2.12 nis_checkpoint F -GLIBC_2.12 nis_clone_directory F -GLIBC_2.12 nis_clone_object F -GLIBC_2.12 nis_clone_result F -GLIBC_2.12 nis_creategroup F -GLIBC_2.12 nis_destroy_object F -GLIBC_2.12 nis_destroygroup F -GLIBC_2.12 nis_dir_cmp F -GLIBC_2.12 nis_domain_of F -GLIBC_2.12 nis_domain_of_r F -GLIBC_2.12 nis_first_entry F -GLIBC_2.12 nis_free_directory F -GLIBC_2.12 nis_free_object F -GLIBC_2.12 nis_free_request F -GLIBC_2.12 nis_freenames F -GLIBC_2.12 nis_freeresult F -GLIBC_2.12 nis_freeservlist F -GLIBC_2.12 nis_freetags F -GLIBC_2.12 nis_getnames F -GLIBC_2.12 nis_getservlist F -GLIBC_2.12 nis_ismember F -GLIBC_2.12 nis_leaf_of F -GLIBC_2.12 nis_leaf_of_r F -GLIBC_2.12 nis_lerror F -GLIBC_2.12 nis_list F -GLIBC_2.12 nis_local_directory F -GLIBC_2.12 nis_local_group F -GLIBC_2.12 nis_local_host F -GLIBC_2.12 nis_local_principal F -GLIBC_2.12 nis_lookup F -GLIBC_2.12 nis_mkdir F -GLIBC_2.12 nis_modify F -GLIBC_2.12 nis_modify_entry F -GLIBC_2.12 nis_name_of F -GLIBC_2.12 nis_name_of_r F -GLIBC_2.12 nis_next_entry F -GLIBC_2.12 nis_perror F -GLIBC_2.12 nis_ping F -GLIBC_2.12 nis_print_directory F -GLIBC_2.12 nis_print_entry F -GLIBC_2.12 nis_print_group F -GLIBC_2.12 nis_print_group_entry F -GLIBC_2.12 nis_print_link F -GLIBC_2.12 nis_print_object F -GLIBC_2.12 nis_print_result F -GLIBC_2.12 nis_print_rights F -GLIBC_2.12 nis_print_table F -GLIBC_2.12 nis_read_obj F -GLIBC_2.12 nis_remove F -GLIBC_2.12 nis_remove_entry F -GLIBC_2.12 nis_removemember F -GLIBC_2.12 nis_rmdir F -GLIBC_2.12 nis_servstate F -GLIBC_2.12 nis_sperrno F -GLIBC_2.12 nis_sperror F -GLIBC_2.12 nis_sperror_r F -GLIBC_2.12 nis_stats F -GLIBC_2.12 nis_verifygroup F -GLIBC_2.12 nis_write_obj F -GLIBC_2.12 readColdStartFile F -GLIBC_2.12 writeColdStartFile F -GLIBC_2.12 xdr_cback_data F -GLIBC_2.12 xdr_domainname F -GLIBC_2.12 xdr_keydat F -GLIBC_2.12 xdr_mapname F -GLIBC_2.12 xdr_obj_p F -GLIBC_2.12 xdr_peername F -GLIBC_2.12 xdr_valdat F -GLIBC_2.12 xdr_yp_buf F -GLIBC_2.12 xdr_ypall F -GLIBC_2.12 xdr_ypbind_binding F -GLIBC_2.12 xdr_ypbind_resp F -GLIBC_2.12 xdr_ypbind_resptype F -GLIBC_2.12 xdr_ypbind_setdom F -GLIBC_2.12 xdr_ypdelete_args F -GLIBC_2.12 xdr_ypmap_parms F -GLIBC_2.12 xdr_ypmaplist F -GLIBC_2.12 xdr_yppush_status F -GLIBC_2.12 xdr_yppushresp_xfr F -GLIBC_2.12 xdr_ypreq_key F -GLIBC_2.12 xdr_ypreq_nokey F -GLIBC_2.12 xdr_ypreq_xfr F -GLIBC_2.12 xdr_ypresp_all F -GLIBC_2.12 xdr_ypresp_key_val F -GLIBC_2.12 xdr_ypresp_maplist F -GLIBC_2.12 xdr_ypresp_master F -GLIBC_2.12 xdr_ypresp_order F -GLIBC_2.12 xdr_ypresp_val F -GLIBC_2.12 xdr_ypresp_xfr F -GLIBC_2.12 xdr_ypstat F -GLIBC_2.12 xdr_ypupdate_args F -GLIBC_2.12 xdr_ypxfrstat F -GLIBC_2.12 yp_all F -GLIBC_2.12 yp_bind F -GLIBC_2.12 yp_first F -GLIBC_2.12 yp_get_default_domain F -GLIBC_2.12 yp_maplist F -GLIBC_2.12 yp_master F -GLIBC_2.12 yp_match F -GLIBC_2.12 yp_next F -GLIBC_2.12 yp_order F -GLIBC_2.12 yp_unbind F -GLIBC_2.12 yp_update F -GLIBC_2.12 ypbinderr_string F -GLIBC_2.12 yperr_string F -GLIBC_2.12 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libpthread.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libpthread.abilist deleted file mode 100644 index d16158f938..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/libpthread.abilist +++ /dev/null @@ -1,226 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _IO_flockfile F -GLIBC_2.12 _IO_ftrylockfile F -GLIBC_2.12 _IO_funlockfile F -GLIBC_2.12 __close F -GLIBC_2.12 __connect F -GLIBC_2.12 __errno_location F -GLIBC_2.12 __fcntl F -GLIBC_2.12 __fork F -GLIBC_2.12 __h_errno_location F -GLIBC_2.12 __libc_allocate_rtsig F -GLIBC_2.12 __libc_current_sigrtmax F -GLIBC_2.12 __libc_current_sigrtmin F -GLIBC_2.12 __lseek F -GLIBC_2.12 __nanosleep F -GLIBC_2.12 __open F -GLIBC_2.12 __open64 F -GLIBC_2.12 __pread64 F -GLIBC_2.12 __pthread_cleanup_routine F -GLIBC_2.12 __pthread_getspecific F -GLIBC_2.12 __pthread_key_create F -GLIBC_2.12 __pthread_mutex_destroy F -GLIBC_2.12 __pthread_mutex_init F -GLIBC_2.12 __pthread_mutex_lock F -GLIBC_2.12 __pthread_mutex_trylock F -GLIBC_2.12 __pthread_mutex_unlock F -GLIBC_2.12 __pthread_mutexattr_destroy F -GLIBC_2.12 __pthread_mutexattr_init F -GLIBC_2.12 __pthread_mutexattr_settype F -GLIBC_2.12 __pthread_once F -GLIBC_2.12 __pthread_register_cancel F -GLIBC_2.12 __pthread_register_cancel_defer F -GLIBC_2.12 __pthread_rwlock_destroy F -GLIBC_2.12 __pthread_rwlock_init F -GLIBC_2.12 __pthread_rwlock_rdlock F -GLIBC_2.12 __pthread_rwlock_tryrdlock F -GLIBC_2.12 __pthread_rwlock_trywrlock F -GLIBC_2.12 __pthread_rwlock_unlock F -GLIBC_2.12 __pthread_rwlock_wrlock F -GLIBC_2.12 __pthread_setspecific F -GLIBC_2.12 __pthread_unregister_cancel F -GLIBC_2.12 __pthread_unregister_cancel_restore F -GLIBC_2.12 __pthread_unwind_next F -GLIBC_2.12 __pwrite64 F -GLIBC_2.12 __read F -GLIBC_2.12 __res_state F -GLIBC_2.12 __send F -GLIBC_2.12 __sigaction F -GLIBC_2.12 __vfork F -GLIBC_2.12 __wait F -GLIBC_2.12 __write F -GLIBC_2.12 _pthread_cleanup_pop F -GLIBC_2.12 _pthread_cleanup_pop_restore F -GLIBC_2.12 _pthread_cleanup_push F -GLIBC_2.12 _pthread_cleanup_push_defer F -GLIBC_2.12 accept F -GLIBC_2.12 close F -GLIBC_2.12 connect F -GLIBC_2.12 fcntl F -GLIBC_2.12 flockfile F -GLIBC_2.12 fork F -GLIBC_2.12 fsync F -GLIBC_2.12 ftrylockfile F -GLIBC_2.12 funlockfile F -GLIBC_2.12 longjmp F -GLIBC_2.12 lseek F -GLIBC_2.12 lseek64 F -GLIBC_2.12 msync F -GLIBC_2.12 nanosleep F -GLIBC_2.12 open F -GLIBC_2.12 open64 F -GLIBC_2.12 pause F -GLIBC_2.12 pread F -GLIBC_2.12 pread64 F -GLIBC_2.12 pthread_attr_destroy F -GLIBC_2.12 pthread_attr_getaffinity_np F -GLIBC_2.12 pthread_attr_getdetachstate F -GLIBC_2.12 pthread_attr_getguardsize F -GLIBC_2.12 pthread_attr_getinheritsched F -GLIBC_2.12 pthread_attr_getschedparam F -GLIBC_2.12 pthread_attr_getschedpolicy F -GLIBC_2.12 pthread_attr_getscope F -GLIBC_2.12 pthread_attr_getstack F -GLIBC_2.12 pthread_attr_getstackaddr F -GLIBC_2.12 pthread_attr_getstacksize F -GLIBC_2.12 pthread_attr_init F -GLIBC_2.12 pthread_attr_setaffinity_np F -GLIBC_2.12 pthread_attr_setdetachstate F -GLIBC_2.12 pthread_attr_setguardsize F -GLIBC_2.12 pthread_attr_setinheritsched F -GLIBC_2.12 pthread_attr_setschedparam F -GLIBC_2.12 pthread_attr_setschedpolicy F -GLIBC_2.12 pthread_attr_setscope F -GLIBC_2.12 pthread_attr_setstack F -GLIBC_2.12 pthread_attr_setstackaddr F -GLIBC_2.12 pthread_attr_setstacksize F -GLIBC_2.12 pthread_barrier_destroy F -GLIBC_2.12 pthread_barrier_init F -GLIBC_2.12 pthread_barrier_wait F -GLIBC_2.12 pthread_barrierattr_destroy F -GLIBC_2.12 pthread_barrierattr_getpshared F -GLIBC_2.12 pthread_barrierattr_init F -GLIBC_2.12 pthread_barrierattr_setpshared F -GLIBC_2.12 pthread_cancel F -GLIBC_2.12 pthread_cond_broadcast F -GLIBC_2.12 pthread_cond_destroy F -GLIBC_2.12 pthread_cond_init F -GLIBC_2.12 pthread_cond_signal F -GLIBC_2.12 pthread_cond_timedwait F -GLIBC_2.12 pthread_cond_wait F -GLIBC_2.12 pthread_condattr_destroy F -GLIBC_2.12 pthread_condattr_getclock F -GLIBC_2.12 pthread_condattr_getpshared F -GLIBC_2.12 pthread_condattr_init F -GLIBC_2.12 pthread_condattr_setclock F -GLIBC_2.12 pthread_condattr_setpshared F -GLIBC_2.12 pthread_create F -GLIBC_2.12 pthread_detach F -GLIBC_2.12 pthread_equal F -GLIBC_2.12 pthread_exit F -GLIBC_2.12 pthread_getaffinity_np F -GLIBC_2.12 pthread_getattr_np F -GLIBC_2.12 pthread_getconcurrency F -GLIBC_2.12 pthread_getcpuclockid F -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_getschedparam F -GLIBC_2.12 pthread_getspecific F -GLIBC_2.12 pthread_join F -GLIBC_2.12 pthread_key_create F -GLIBC_2.12 pthread_key_delete F -GLIBC_2.12 pthread_kill F -GLIBC_2.12 pthread_kill_other_threads_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutex_consistent_np F -GLIBC_2.12 pthread_mutex_destroy F -GLIBC_2.12 pthread_mutex_getprioceiling F -GLIBC_2.12 pthread_mutex_init F -GLIBC_2.12 pthread_mutex_lock F -GLIBC_2.12 pthread_mutex_setprioceiling F -GLIBC_2.12 pthread_mutex_timedlock F -GLIBC_2.12 pthread_mutex_trylock F -GLIBC_2.12 pthread_mutex_unlock F -GLIBC_2.12 pthread_mutexattr_destroy F -GLIBC_2.12 pthread_mutexattr_getkind_np F -GLIBC_2.12 pthread_mutexattr_getprioceiling F -GLIBC_2.12 pthread_mutexattr_getprotocol F -GLIBC_2.12 pthread_mutexattr_getpshared F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_getrobust_np F -GLIBC_2.12 pthread_mutexattr_gettype F -GLIBC_2.12 pthread_mutexattr_init F -GLIBC_2.12 pthread_mutexattr_setkind_np F -GLIBC_2.12 pthread_mutexattr_setprioceiling F -GLIBC_2.12 pthread_mutexattr_setprotocol F -GLIBC_2.12 pthread_mutexattr_setpshared F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_mutexattr_setrobust_np F -GLIBC_2.12 pthread_mutexattr_settype F -GLIBC_2.12 pthread_once F -GLIBC_2.12 pthread_rwlock_destroy F -GLIBC_2.12 pthread_rwlock_init F -GLIBC_2.12 pthread_rwlock_rdlock F -GLIBC_2.12 pthread_rwlock_timedrdlock F -GLIBC_2.12 pthread_rwlock_timedwrlock F -GLIBC_2.12 pthread_rwlock_tryrdlock F -GLIBC_2.12 pthread_rwlock_trywrlock F -GLIBC_2.12 pthread_rwlock_unlock F -GLIBC_2.12 pthread_rwlock_wrlock F -GLIBC_2.12 pthread_rwlockattr_destroy F -GLIBC_2.12 pthread_rwlockattr_getkind_np F -GLIBC_2.12 pthread_rwlockattr_getpshared F -GLIBC_2.12 pthread_rwlockattr_init F -GLIBC_2.12 pthread_rwlockattr_setkind_np F -GLIBC_2.12 pthread_rwlockattr_setpshared F -GLIBC_2.12 pthread_self F -GLIBC_2.12 pthread_setaffinity_np F -GLIBC_2.12 pthread_setcancelstate F -GLIBC_2.12 pthread_setcanceltype F -GLIBC_2.12 pthread_setconcurrency F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.12 pthread_setschedparam F -GLIBC_2.12 pthread_setschedprio F -GLIBC_2.12 pthread_setspecific F -GLIBC_2.12 pthread_sigmask F -GLIBC_2.12 pthread_sigqueue F -GLIBC_2.12 pthread_spin_destroy F -GLIBC_2.12 pthread_spin_init F -GLIBC_2.12 pthread_spin_lock F -GLIBC_2.12 pthread_spin_trylock F -GLIBC_2.12 pthread_spin_unlock F -GLIBC_2.12 pthread_testcancel F -GLIBC_2.12 pthread_timedjoin_np F -GLIBC_2.12 pthread_tryjoin_np F -GLIBC_2.12 pthread_yield F -GLIBC_2.12 pwrite F -GLIBC_2.12 pwrite64 F -GLIBC_2.12 raise F -GLIBC_2.12 read F -GLIBC_2.12 recv F -GLIBC_2.12 recvfrom F -GLIBC_2.12 recvmsg F -GLIBC_2.12 sem_close F -GLIBC_2.12 sem_destroy F -GLIBC_2.12 sem_getvalue F -GLIBC_2.12 sem_init F -GLIBC_2.12 sem_open F -GLIBC_2.12 sem_post F -GLIBC_2.12 sem_timedwait F -GLIBC_2.12 sem_trywait F -GLIBC_2.12 sem_unlink F -GLIBC_2.12 sem_wait F -GLIBC_2.12 send F -GLIBC_2.12 sendmsg F -GLIBC_2.12 sendto F -GLIBC_2.12 sigaction F -GLIBC_2.12 siglongjmp F -GLIBC_2.12 sigwait F -GLIBC_2.12 system F -GLIBC_2.12 tcdrain F -GLIBC_2.12 vfork F -GLIBC_2.12 wait F -GLIBC_2.12 waitpid F -GLIBC_2.12 write F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libresolv.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libresolv.abilist deleted file mode 100644 index aa2fefa6e4..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/libresolv.abilist +++ /dev/null @@ -1,92 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __b64_ntop F -GLIBC_2.12 __b64_pton F -GLIBC_2.12 __dn_comp F -GLIBC_2.12 __dn_count_labels F -GLIBC_2.12 __dn_expand F -GLIBC_2.12 __dn_skipname F -GLIBC_2.12 __fp_nquery F -GLIBC_2.12 __fp_query F -GLIBC_2.12 __fp_resstat F -GLIBC_2.12 __hostalias F -GLIBC_2.12 __loc_aton F -GLIBC_2.12 __loc_ntoa F -GLIBC_2.12 __p_cdname F -GLIBC_2.12 __p_cdnname F -GLIBC_2.12 __p_class F -GLIBC_2.12 __p_class_syms D 0x54 -GLIBC_2.12 __p_fqname F -GLIBC_2.12 __p_fqnname F -GLIBC_2.12 __p_option F -GLIBC_2.12 __p_query F -GLIBC_2.12 __p_rcode F -GLIBC_2.12 __p_secstodate F -GLIBC_2.12 __p_time F -GLIBC_2.12 __p_type F -GLIBC_2.12 __p_type_syms D 0x228 -GLIBC_2.12 __putlong F -GLIBC_2.12 __putshort F -GLIBC_2.12 __res_close F -GLIBC_2.12 __res_dnok F -GLIBC_2.12 __res_hnok F -GLIBC_2.12 __res_hostalias F -GLIBC_2.12 __res_isourserver F -GLIBC_2.12 __res_mailok F -GLIBC_2.12 __res_mkquery F -GLIBC_2.12 __res_nameinquery F -GLIBC_2.12 __res_nmkquery F -GLIBC_2.12 __res_nquery F -GLIBC_2.12 __res_nquerydomain F -GLIBC_2.12 __res_nsearch F -GLIBC_2.12 __res_nsend F -GLIBC_2.12 __res_ownok F -GLIBC_2.12 __res_queriesmatch F -GLIBC_2.12 __res_query F -GLIBC_2.12 __res_querydomain F -GLIBC_2.12 __res_search F -GLIBC_2.12 __res_send F -GLIBC_2.12 __sym_ntop F -GLIBC_2.12 __sym_ntos F -GLIBC_2.12 __sym_ston F -GLIBC_2.12 _gethtbyaddr F -GLIBC_2.12 _gethtbyname F -GLIBC_2.12 _gethtbyname2 F -GLIBC_2.12 _gethtent F -GLIBC_2.12 _getlong F -GLIBC_2.12 _getshort F -GLIBC_2.12 _res_opcodes D 0x40 -GLIBC_2.12 _sethtent F -GLIBC_2.12 inet_net_ntop F -GLIBC_2.12 inet_net_pton F -GLIBC_2.12 inet_neta F -GLIBC_2.12 ns_datetosecs F -GLIBC_2.12 ns_format_ttl F -GLIBC_2.12 ns_get16 F -GLIBC_2.12 ns_get32 F -GLIBC_2.12 ns_initparse F -GLIBC_2.12 ns_makecanon F -GLIBC_2.12 ns_msg_getflag F -GLIBC_2.12 ns_name_compress F -GLIBC_2.12 ns_name_ntol F -GLIBC_2.12 ns_name_ntop F -GLIBC_2.12 ns_name_pack F -GLIBC_2.12 ns_name_pton F -GLIBC_2.12 ns_name_rollback F -GLIBC_2.12 ns_name_skip F -GLIBC_2.12 ns_name_uncompress F -GLIBC_2.12 ns_name_unpack F -GLIBC_2.12 ns_parse_ttl F -GLIBC_2.12 ns_parserr F -GLIBC_2.12 ns_put16 F -GLIBC_2.12 ns_put32 F -GLIBC_2.12 ns_samedomain F -GLIBC_2.12 ns_samename F -GLIBC_2.12 ns_skiprr F -GLIBC_2.12 ns_sprintrr F -GLIBC_2.12 ns_sprintrrf F -GLIBC_2.12 ns_subdomain F -GLIBC_2.12 res_gethostbyaddr F -GLIBC_2.12 res_gethostbyname F -GLIBC_2.12 res_gethostbyname2 F -GLIBC_2.12 res_send_setqhook F -GLIBC_2.12 res_send_setrhook F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/librt.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/librt.abilist deleted file mode 100644 index 14f5c8245d..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/librt.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 __mq_open_2 F -GLIBC_2.12 aio_cancel F -GLIBC_2.12 aio_cancel64 F -GLIBC_2.12 aio_error F -GLIBC_2.12 aio_error64 F -GLIBC_2.12 aio_fsync F -GLIBC_2.12 aio_fsync64 F -GLIBC_2.12 aio_init F -GLIBC_2.12 aio_read F -GLIBC_2.12 aio_read64 F -GLIBC_2.12 aio_return F -GLIBC_2.12 aio_return64 F -GLIBC_2.12 aio_suspend F -GLIBC_2.12 aio_suspend64 F -GLIBC_2.12 aio_write F -GLIBC_2.12 aio_write64 F -GLIBC_2.12 clock_getcpuclockid F -GLIBC_2.12 clock_getres F -GLIBC_2.12 clock_gettime F -GLIBC_2.12 clock_nanosleep F -GLIBC_2.12 clock_settime F -GLIBC_2.12 lio_listio F -GLIBC_2.12 lio_listio64 F -GLIBC_2.12 mq_close F -GLIBC_2.12 mq_getattr F -GLIBC_2.12 mq_notify F -GLIBC_2.12 mq_open F -GLIBC_2.12 mq_receive F -GLIBC_2.12 mq_send F -GLIBC_2.12 mq_setattr F -GLIBC_2.12 mq_timedreceive F -GLIBC_2.12 mq_timedsend F -GLIBC_2.12 mq_unlink F -GLIBC_2.12 shm_open F -GLIBC_2.12 shm_unlink F -GLIBC_2.12 timer_create F -GLIBC_2.12 timer_delete F -GLIBC_2.12 timer_getoverrun F -GLIBC_2.12 timer_gettime F -GLIBC_2.12 timer_settime F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libthread_db.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libthread_db.abilist deleted file mode 100644 index 4aade0b7e0..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/libthread_db.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 td_init F -GLIBC_2.12 td_log F -GLIBC_2.12 td_symbol_list F -GLIBC_2.12 td_ta_clear_event F -GLIBC_2.12 td_ta_delete F -GLIBC_2.12 td_ta_enable_stats F -GLIBC_2.12 td_ta_event_addr F -GLIBC_2.12 td_ta_event_getmsg F -GLIBC_2.12 td_ta_get_nthreads F -GLIBC_2.12 td_ta_get_ph F -GLIBC_2.12 td_ta_get_stats F -GLIBC_2.12 td_ta_map_id2thr F -GLIBC_2.12 td_ta_map_lwp2thr F -GLIBC_2.12 td_ta_new F -GLIBC_2.12 td_ta_reset_stats F -GLIBC_2.12 td_ta_set_event F -GLIBC_2.12 td_ta_setconcurrency F -GLIBC_2.12 td_ta_thr_iter F -GLIBC_2.12 td_ta_tsd_iter F -GLIBC_2.12 td_thr_clear_event F -GLIBC_2.12 td_thr_dbresume F -GLIBC_2.12 td_thr_dbsuspend F -GLIBC_2.12 td_thr_event_enable F -GLIBC_2.12 td_thr_event_getmsg F -GLIBC_2.12 td_thr_get_info F -GLIBC_2.12 td_thr_getfpregs F -GLIBC_2.12 td_thr_getgregs F -GLIBC_2.12 td_thr_getxregs F -GLIBC_2.12 td_thr_getxregsize F -GLIBC_2.12 td_thr_set_event F -GLIBC_2.12 td_thr_setfpregs F -GLIBC_2.12 td_thr_setgregs F -GLIBC_2.12 td_thr_setprio F -GLIBC_2.12 td_thr_setsigpending F -GLIBC_2.12 td_thr_setxregs F -GLIBC_2.12 td_thr_sigsetmask F -GLIBC_2.12 td_thr_tls_get_addr F -GLIBC_2.12 td_thr_tlsbase F -GLIBC_2.12 td_thr_tsd F -GLIBC_2.12 td_thr_validate F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libutil.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libutil.abilist deleted file mode 100644 index e4d432643c..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 forkpty F -GLIBC_2.12 login F -GLIBC_2.12 login_tty F -GLIBC_2.12 logout F -GLIBC_2.12 logwtmp F -GLIBC_2.12 openpty F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/register-dump.h b/sysdeps/unix/sysv/linux/tile/tilepro/register-dump.h deleted file mode 100644 index da48526c83..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilepro/register-dump.h +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - Based on work contributed by Ulrich Drepper , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include <_itoa.h> - -/* We will print the register dump in this format: - - R0: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX - R8: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX - R16: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX - R24: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX - R32: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX - R40: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX - R48: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX - R52: XXXXXXXX TP: XXXXXXXX SP: XXXXXXXX LR: XXXXXXXX - - PC: XXXXXXXX ICS: X FAULTNUM: XX - - */ - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -register_dump (int fd, mcontext_t *ctx) -{ - char regs[59][8]; - struct iovec iov[143]; - size_t nr = 0; - unsigned int i; - -#define ADD_STRING(str) \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr -#define ADD_MEM(str, len) \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr - - /* Generate strings of register contents. */ - for (i = 0; i < 56; ++i) - hexvalue (ctx->gregs[i], regs[i], 8); - hexvalue (ctx->pc, regs[56], 8); - hexvalue (ctx->ics, regs[57], 1); - hexvalue (ctx->faultnum, regs[58], 2); - - /* Generate the output. */ - for (i = 0; i < 52;) - { - const char *prefixes[] = { - "Register dump:\n\n R0: ", - "\n R8: ", - "\n R16: ", - "\n R24: ", - "\n R32: ", - "\n R40: ", - "\n R48: " - }; - ADD_STRING (prefixes[i / 8]); - do - { - ADD_MEM (regs[i], 8); - ADD_STRING (" "); - } - while (++i % 8 && i < 52); - } - ADD_STRING ("\n R52: "); - ADD_MEM (regs[52], 8); - ADD_STRING (" TP: "); - ADD_MEM (regs[53], 8); - ADD_STRING (" SP: "); - ADD_MEM (regs[54], 8); - ADD_STRING (" LR: "); - ADD_MEM (regs[55], 8); - ADD_STRING ("\n\n PC: "); - ADD_MEM (regs[56], 8); - ADD_STRING (" ICS: "); - ADD_MEM (regs[57], 1); - ADD_STRING (" FAULTNUM: "); - ADD_MEM (regs[58], 2); - ADD_STRING ("\n"); - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, &ctx->uc_mcontext) diff --git a/sysdeps/unix/sysv/linux/tile/ucontext_i.h b/sysdeps/unix/sysv/linux/tile/ucontext_i.h deleted file mode 100644 index 3b26be5429..0000000000 --- a/sysdeps/unix/sysv/linux/tile/ucontext_i.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Definitions of offsets within the ucontext_t structure. Note - that for convenience we use __SIZEOF_POINTER__ for "long" and - "ssize_t" fields (and their unsigned counterparts) as well. */ - -#define UC_FLAGS_OFFSET 0 -#define UC_LINK_OFFSET (UC_FLAGS_OFFSET + __SIZEOF_POINTER__) -#define UC_STACK_SP_OFFSET (UC_LINK_OFFSET + __SIZEOF_POINTER__) -#define UC_STACK_FLAGS_OFFSET (UC_STACK_SP_OFFSET + __SIZEOF_POINTER__) -#define UC_STACK_SIZE_OFFSET (UC_STACK_FLAGS_OFFSET + __SIZEOF_POINTER__) -#define UC_STACK_MCONTEXT_OFFSET \ - ((UC_STACK_SIZE_OFFSET + __SIZEOF_POINTER__ + REGSIZE - 1) & -REGSIZE) -#define UC_REG(i) (UC_STACK_MCONTEXT_OFFSET + ((i) * REGSIZE)) -#define UC_NREGS 64 -#define UC_SIGMASK_OFFSET UC_REG(UC_NREGS) -#define UC_SIZE (UC_SIGMASK_OFFSET + (_NSIG / 8)) - -/* From */ -#define SI_MAX_SIZE 128 - -/* From */ -#define _NSIG 64 -#define SIG_BLOCK 0 /* for blocking signals */ -#define SIG_UNBLOCK 1 /* for unblocking signals */ -#define SIG_SETMASK 2 /* for setting the signal mask */ diff --git a/sysdeps/unix/sysv/linux/tile/vfork.S b/sysdeps/unix/sysv/linux/tile/vfork.S deleted file mode 100644 index 725bd4b939..0000000000 --- a/sysdeps/unix/sysv/linux/tile/vfork.S +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#define __ASSEMBLY__ /* for kernel headers */ -#include -#include -#include - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - - .text -ENTRY (__vfork) - { - moveli r0, CLONE_VFORK | CLONE_VM | SIGCHLD - move r1, zero - } - { - move r2, zero - move r3, zero - } - moveli TREG_SYSCALL_NR_NAME, __NR_clone - swint1 - - BNEZ r1, 0f - jrp lr -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) - -weak_alias (__vfork, vfork) -strong_alias (__vfork, __libc_vfork) diff --git a/sysdeps/unix/sysv/linux/time.c b/sysdeps/unix/sysv/linux/time.c deleted file mode 100644 index 72d4040cbc..0000000000 --- a/sysdeps/unix/sysv/linux/time.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#include - -#ifdef __NR_time - -time_t -time (time_t *t) -{ - INTERNAL_SYSCALL_DECL (err); - time_t res = INTERNAL_SYSCALL (time, err, 1, NULL); - /* There cannot be any error. */ - if (t != NULL) - *t = res; - return res; -} -libc_hidden_def (time) - -#else - -# include - -#endif diff --git a/sysdeps/unix/sysv/linux/timer_create.c b/sysdeps/unix/sysv/linux/timer_create.c deleted file mode 100644 index 48a703c065..0000000000 --- a/sysdeps/unix/sysv/linux/timer_create.c +++ /dev/null @@ -1,176 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "kernel-posix-timers.h" -#include "kernel-posix-cpu-timers.h" - - -#ifdef timer_create_alias -# define timer_create timer_create_alias -#endif - - -int -timer_create (clockid_t clock_id, struct sigevent *evp, timer_t *timerid) -{ -#undef timer_create - { - clockid_t syscall_clockid = (clock_id == CLOCK_PROCESS_CPUTIME_ID - ? MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED) - : clock_id == CLOCK_THREAD_CPUTIME_ID - ? MAKE_THREAD_CPUCLOCK (0, CPUCLOCK_SCHED) - : clock_id); - - /* If the user wants notification via a thread we need to handle - this special. */ - if (evp == NULL - || __builtin_expect (evp->sigev_notify != SIGEV_THREAD, 1)) - { - struct sigevent local_evp; - - /* We avoid allocating too much memory by basically - using struct timer as a derived class with the - first two elements being in the superclass. We only - need these two elements here. */ - struct timer *newp = (struct timer *) malloc (offsetof (struct timer, - thrfunc)); - if (newp == NULL) - /* No more memory. */ - return -1; - - if (evp == NULL) - { - /* The kernel has to pass up the timer ID which is a - userlevel object. Therefore we cannot leave it up to - the kernel to determine it. */ - local_evp.sigev_notify = SIGEV_SIGNAL; - local_evp.sigev_signo = SIGALRM; - local_evp.sigev_value.sival_ptr = newp; - - evp = &local_evp; - } - - kernel_timer_t ktimerid; - int retval = INLINE_SYSCALL (timer_create, 3, syscall_clockid, evp, - &ktimerid); - - if (retval != -1) - { - newp->sigev_notify = (evp != NULL - ? evp->sigev_notify : SIGEV_SIGNAL); - newp->ktimerid = ktimerid; - - *timerid = (timer_t) newp; - } - else - { - /* Cannot allocate the timer, fail. */ - free (newp); - retval = -1; - } - - return retval; - } - else - { - /* Create the helper thread. */ - pthread_once (&__helper_once, __start_helper_thread); - if (__helper_tid == 0) - { - /* No resources to start the helper thread. */ - __set_errno (EAGAIN); - return -1; - } - - struct timer *newp; - newp = (struct timer *) malloc (sizeof (struct timer)); - if (newp == NULL) - return -1; - - /* Copy the thread parameters the user provided. */ - newp->sival = evp->sigev_value; - newp->thrfunc = evp->sigev_notify_function; - newp->sigev_notify = SIGEV_THREAD; - - /* We cannot simply copy the thread attributes since the - implementation might keep internal information for - each instance. */ - (void) pthread_attr_init (&newp->attr); - if (evp->sigev_notify_attributes != NULL) - { - struct pthread_attr *nattr; - struct pthread_attr *oattr; - - nattr = (struct pthread_attr *) &newp->attr; - oattr = (struct pthread_attr *) evp->sigev_notify_attributes; - - nattr->schedparam = oattr->schedparam; - nattr->schedpolicy = oattr->schedpolicy; - nattr->flags = oattr->flags; - nattr->guardsize = oattr->guardsize; - nattr->stackaddr = oattr->stackaddr; - nattr->stacksize = oattr->stacksize; - } - - /* In any case set the detach flag. */ - (void) pthread_attr_setdetachstate (&newp->attr, - PTHREAD_CREATE_DETACHED); - - /* Create the event structure for the kernel timer. */ - struct sigevent sev = - { .sigev_value.sival_ptr = newp, - .sigev_signo = SIGTIMER, - .sigev_notify = SIGEV_SIGNAL | SIGEV_THREAD_ID, - ._sigev_un = { ._pad = { [0] = __helper_tid } } }; - - /* Create the timer. */ - INTERNAL_SYSCALL_DECL (err); - int res; - res = INTERNAL_SYSCALL (timer_create, err, 3, - syscall_clockid, &sev, &newp->ktimerid); - if (! INTERNAL_SYSCALL_ERROR_P (res, err)) - { - /* Add to the queue of active timers with thread - delivery. */ - pthread_mutex_lock (&__active_timer_sigev_thread_lock); - newp->next = __active_timer_sigev_thread; - __active_timer_sigev_thread = newp; - pthread_mutex_unlock (&__active_timer_sigev_thread_lock); - - *timerid = (timer_t) newp; - return 0; - } - - /* Free the resources. */ - free (newp); - - __set_errno (INTERNAL_SYSCALL_ERRNO (res, err)); - - return -1; - } - } -} diff --git a/sysdeps/unix/sysv/linux/timer_delete.c b/sysdeps/unix/sysv/linux/timer_delete.c deleted file mode 100644 index 9ef06c429e..0000000000 --- a/sysdeps/unix/sysv/linux/timer_delete.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include "kernel-posix-timers.h" - - -#ifdef timer_delete_alias -# define timer_delete timer_delete_alias -#endif - - -int -timer_delete (timer_t timerid) -{ -#undef timer_delete - struct timer *kt = (struct timer *) timerid; - - /* Delete the kernel timer object. */ - int res = INLINE_SYSCALL (timer_delete, 1, kt->ktimerid); - - if (res == 0) - { - if (kt->sigev_notify == SIGEV_THREAD) - { - /* Remove the timer from the list. */ - pthread_mutex_lock (&__active_timer_sigev_thread_lock); - if (__active_timer_sigev_thread == kt) - __active_timer_sigev_thread = kt->next; - else - { - struct timer *prevp = __active_timer_sigev_thread; - while (prevp->next != NULL) - if (prevp->next == kt) - { - prevp->next = kt->next; - break; - } - else - prevp = prevp->next; - } - pthread_mutex_unlock (&__active_timer_sigev_thread_lock); - } - - /* Free the memory. */ - (void) free (kt); - - return 0; - } - - /* The kernel timer is not known or something else bad happened. - Return the error. */ - return -1; -} diff --git a/sysdeps/unix/sysv/linux/timer_getoverr.c b/sysdeps/unix/sysv/linux/timer_getoverr.c deleted file mode 100644 index a520fb653b..0000000000 --- a/sysdeps/unix/sysv/linux/timer_getoverr.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include "kernel-posix-timers.h" - - -#ifdef timer_getoverrun_alias -# define timer_getoverrun timer_getoverrun_alias -#endif - - -int -timer_getoverrun (timer_t timerid) -{ -#undef timer_getoverrun - struct timer *kt = (struct timer *) timerid; - - /* Get the information from the kernel. */ - int res = INLINE_SYSCALL (timer_getoverrun, 1, kt->ktimerid); - - return res; -} diff --git a/sysdeps/unix/sysv/linux/timer_gettime.c b/sysdeps/unix/sysv/linux/timer_gettime.c deleted file mode 100644 index 849c56a30a..0000000000 --- a/sysdeps/unix/sysv/linux/timer_gettime.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include "kernel-posix-timers.h" - - -#ifdef timer_gettime_alias -# define timer_gettime timer_gettime_alias -#endif - - -int -timer_gettime (timer_t timerid, struct itimerspec *value) -{ -#undef timer_gettime - struct timer *kt = (struct timer *) timerid; - - /* Delete the kernel timer object. */ - int res = INLINE_SYSCALL (timer_gettime, 2, kt->ktimerid, value); - - return res; -} diff --git a/sysdeps/unix/sysv/linux/timer_routines.c b/sysdeps/unix/sysv/linux/timer_routines.c deleted file mode 100644 index 1d81304678..0000000000 --- a/sysdeps/unix/sysv/linux/timer_routines.c +++ /dev/null @@ -1,191 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include -#include -#include "kernel-posix-timers.h" - - -/* List of active SIGEV_THREAD timers. */ -struct timer *__active_timer_sigev_thread; -/* Lock for the __active_timer_sigev_thread. */ -pthread_mutex_t __active_timer_sigev_thread_lock = PTHREAD_MUTEX_INITIALIZER; - - -struct thread_start_data -{ - void (*thrfunc) (sigval_t); - sigval_t sival; -}; - - -/* Helper thread to call the user-provided function. */ -static void * -timer_sigev_thread (void *arg) -{ - /* The parent thread has all signals blocked. This is a bit - surprising for user code, although valid. We unblock all - signals. */ - sigset_t ss; - sigemptyset (&ss); - INTERNAL_SYSCALL_DECL (err); - INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, NULL, _NSIG / 8); - - struct thread_start_data *td = (struct thread_start_data *) arg; - - void (*thrfunc) (sigval_t) = td->thrfunc; - sigval_t sival = td->sival; - - /* The TD object was allocated in timer_helper_thread. */ - free (td); - - /* Call the user-provided function. */ - thrfunc (sival); - - return NULL; -} - - -/* Helper function to support starting threads for SIGEV_THREAD. */ -static void * -timer_helper_thread (void *arg) -{ - /* Wait for the SIGTIMER signal, allowing the setXid signal, and - none else. */ - sigset_t ss; - sigemptyset (&ss); - __sigaddset (&ss, SIGTIMER); - - /* Endless loop of waiting for signals. The loop is only ended when - the thread is canceled. */ - while (1) - { - siginfo_t si; - - /* sigwaitinfo cannot be used here, since it deletes - SIGCANCEL == SIGTIMER from the set. */ - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - int result = SYSCALL_CANCEL (rt_sigtimedwait, &ss, &si, NULL, _NSIG / 8); - - if (result > 0) - { - if (si.si_code == SI_TIMER) - { - struct timer *tk = (struct timer *) si.si_ptr; - - /* Check the timer is still used and will not go away - while we are reading the values here. */ - pthread_mutex_lock (&__active_timer_sigev_thread_lock); - - struct timer *runp = __active_timer_sigev_thread; - while (runp != NULL) - if (runp == tk) - break; - else - runp = runp->next; - - if (runp != NULL) - { - struct thread_start_data *td = malloc (sizeof (*td)); - - /* There is not much we can do if the allocation fails. */ - if (td != NULL) - { - /* This is the signal we are waiting for. */ - td->thrfunc = tk->thrfunc; - td->sival = tk->sival; - - pthread_t th; - (void) pthread_create (&th, &tk->attr, - timer_sigev_thread, td); - } - } - - pthread_mutex_unlock (&__active_timer_sigev_thread_lock); - } - else if (si.si_code == SI_TKILL) - /* The thread is canceled. */ - pthread_exit (NULL); - } - } -} - - -/* Control variable for helper thread creation. */ -pthread_once_t __helper_once attribute_hidden; - - -/* TID of the helper thread. */ -pid_t __helper_tid attribute_hidden; - - -/* Reset variables so that after a fork a new helper thread gets started. */ -static void -reset_helper_control (void) -{ - __helper_once = PTHREAD_ONCE_INIT; - __helper_tid = 0; -} - - -void -attribute_hidden -__start_helper_thread (void) -{ - /* The helper thread needs only very little resources - and should go away automatically when canceled. */ - pthread_attr_t attr; - (void) pthread_attr_init (&attr); - (void) pthread_attr_setstacksize (&attr, __pthread_get_minstack (&attr)); - - /* Block all signals in the helper thread but SIGSETXID. To do this - thoroughly we temporarily have to block all signals here. The - helper can lose wakeups if SIGCANCEL is not blocked throughout, - but sigfillset omits it SIGSETXID. So, we add SIGCANCEL back - explicitly here. */ - sigset_t ss; - sigset_t oss; - sigfillset (&ss); - __sigaddset (&ss, SIGCANCEL); - INTERNAL_SYSCALL_DECL (err); - INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, &oss, _NSIG / 8); - - /* Create the helper thread for this timer. */ - pthread_t th; - int res = pthread_create (&th, &attr, timer_helper_thread, NULL); - if (res == 0) - /* We managed to start the helper thread. */ - __helper_tid = ((struct pthread *) th)->tid; - - /* Restore the signal mask. */ - INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &oss, NULL, - _NSIG / 8); - - /* No need for the attribute anymore. */ - (void) pthread_attr_destroy (&attr); - - /* We have to make sure that after fork()ing a new helper thread can - be created. */ - pthread_atfork (NULL, NULL, reset_helper_control); -} diff --git a/sysdeps/unix/sysv/linux/timer_settime.c b/sysdeps/unix/sysv/linux/timer_settime.c deleted file mode 100644 index ba35036355..0000000000 --- a/sysdeps/unix/sysv/linux/timer_settime.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include -#include "kernel-posix-timers.h" - - -#ifdef timer_settime_alias -# define timer_settime timer_settime_alias -#endif - - -int -timer_settime (timer_t timerid, int flags, const struct itimerspec *value, - struct itimerspec *ovalue) -{ -#undef timer_settime - struct timer *kt = (struct timer *) timerid; - - /* Delete the kernel timer object. */ - int res = INLINE_SYSCALL (timer_settime, 4, kt->ktimerid, flags, - value, ovalue); - - return res; -} diff --git a/sysdeps/unix/sysv/linux/times.c b/sysdeps/unix/sysv/linux/times.c deleted file mode 100644 index 63c8bf8ff0..0000000000 --- a/sysdeps/unix/sysv/linux/times.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2008-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -clock_t -__times (struct tms *buf) -{ - INTERNAL_SYSCALL_DECL (err); - clock_t ret = INTERNAL_SYSCALL (times, err, 1, buf); - if (INTERNAL_SYSCALL_ERROR_P (ret, err) - && __builtin_expect (INTERNAL_SYSCALL_ERRNO (ret, err) == EFAULT, 0) - && buf) - { - /* This might be an error or not. For architectures which have no - separate return value and error indicators we cannot - distinguish a return value of e.g. (clock_t) -14 from -EFAULT. - Therefore the only course of action is to dereference the user - -supplied structure on a return of (clock_t) -14. This will crash - applications which pass in an invalid non-NULL BUF pointer. - Note that Linux allows BUF to be NULL in which case we skip this. */ -#define touch(v) \ - do { \ - clock_t temp = v; \ - asm volatile ("" : "+r" (temp)); \ - v = temp; \ - } while (0) - touch (buf->tms_utime); - touch (buf->tms_stime); - touch (buf->tms_cutime); - touch (buf->tms_cstime); - - /* If we come here the memory is valid and the kernel did not - return an EFAULT error, but rather e.g. (clock_t) -14. - Return the value given by the kernel. */ - } - - /* On Linux this function never fails except with EFAULT. - POSIX says that returning a value (clock_t) -1 indicates an error, - but on Linux this is simply one of the valid clock values after - clock_t wraps. Therefore when we would return (clock_t) -1, we - instead return (clock_t) 0, and loose a tick of accuracy (having - returned 0 for two consecutive calls even though the clock - advanced). */ - if (ret == (clock_t) -1) - return (clock_t) 0; - - return ret; -} -weak_alias (__times, times) diff --git a/sysdeps/unix/sysv/linux/timespec_get.c b/sysdeps/unix/sysv/linux/timespec_get.c deleted file mode 100644 index 1f63e57e39..0000000000 --- a/sysdeps/unix/sysv/linux/timespec_get.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#ifdef HAVE_CLOCK_GETTIME_VSYSCALL -# define HAVE_VSYSCALL -#endif -#include - -/* Set TS to calendar time based in time base BASE. */ -int -timespec_get (struct timespec *ts, int base) -{ - switch (base) - { - int res; - INTERNAL_SYSCALL_DECL (err); - case TIME_UTC: - res = INTERNAL_VSYSCALL (clock_gettime, err, 2, CLOCK_REALTIME, ts); - if (INTERNAL_SYSCALL_ERROR_P (res, err)) - return 0; - break; - - default: - return 0; - } - - return base; -} diff --git a/sysdeps/unix/sysv/linux/truncate.c b/sysdeps/unix/sysv/linux/truncate.c deleted file mode 100644 index d6bf764ea5..0000000000 --- a/sysdeps/unix/sysv/linux/truncate.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -#ifndef __OFF_T_MATCHES_OFF64_T -/* Truncate PATH to LENGTH bytes. */ -int -__truncate (const char *path, off_t length) -{ -# ifndef __NR_truncate - return INLINE_SYSCALL_CALL (truncate64, path, - __ALIGNMENT_ARG SYSCALL_LL (length)); -# else - return INLINE_SYSCALL_CALL (truncate, path, length); -# endif -} -weak_alias (__truncate, truncate) -#endif diff --git a/sysdeps/unix/sysv/linux/truncate64.c b/sysdeps/unix/sysv/linux/truncate64.c deleted file mode 100644 index 9ea03c6bed..0000000000 --- a/sysdeps/unix/sysv/linux/truncate64.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#ifndef __NR_truncate64 -# define __NR_truncate64 __NR_truncate -#endif - -/* Truncate PATH to LENGTH bytes. */ -int -__truncate64 (const char *path, off64_t length) -{ - return INLINE_SYSCALL_CALL (truncate64, path, - __ALIGNMENT_ARG SYSCALL_LL64 (length)); -} -weak_alias (__truncate64, truncate64) - -#ifdef __OFF_T_MATCHES_OFF64_T -weak_alias (__truncate64, truncate); -#endif diff --git a/sysdeps/unix/sysv/linux/tst-affinity-pid.c b/sysdeps/unix/sysv/linux/tst-affinity-pid.c deleted file mode 100644 index 8874c8ee67..0000000000 --- a/sysdeps/unix/sysv/linux/tst-affinity-pid.c +++ /dev/null @@ -1,201 +0,0 @@ -/* Test for sched_getaffinity and sched_setaffinity, PID version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Function definitions for the benefit of tst-skeleton-affinity.c. - This variant forks a child process which then invokes - sched_getaffinity and sched_setaffinity on the parent PID. */ - -#include -#include -#include -#include -#include -#include -#include -#include - -static int -write_fully (int fd, const void *buffer, size_t length) -{ - const void *end = buffer + length; - while (buffer < end) - { - ssize_t bytes_written = TEMP_FAILURE_RETRY - (write (fd, buffer, end - buffer)); - if (bytes_written < 0) - return -1; - if (bytes_written == 0) - { - errno = ENOSPC; - return -1; - } - buffer += bytes_written; - } - return 0; -} - -static ssize_t -read_fully (int fd, void *buffer, size_t length) -{ - const void *start = buffer; - const void *end = buffer + length; - while (buffer < end) - { - ssize_t bytes_read = TEMP_FAILURE_RETRY - (read (fd, buffer, end - buffer)); - if (bytes_read < 0) - return -1; - if (bytes_read == 0) - return buffer - start; - buffer += bytes_read; - } - return length; -} - -static int -process_child_response (int *pipes, pid_t child, - cpu_set_t *set, size_t size) -{ - close (pipes[1]); - - int value_from_child; - ssize_t bytes_read = read_fully - (pipes[0], &value_from_child, sizeof (value_from_child)); - if (bytes_read < 0) - { - printf ("error: read from child: %m\n"); - exit (1); - } - if (bytes_read != sizeof (value_from_child)) - { - printf ("error: not enough bytes from child: %zd\n", bytes_read); - exit (1); - } - if (value_from_child == 0) - { - bytes_read = read_fully (pipes[0], set, size); - if (bytes_read < 0) - { - printf ("error: read: %m\n"); - exit (1); - } - if (bytes_read != size) - { - printf ("error: not enough bytes from child: %zd\n", bytes_read); - exit (1); - } - } - - int status; - if (waitpid (child, &status, 0) < 0) - { - printf ("error: waitpid: %m\n"); - exit (1); - } - if (!(WIFEXITED (status) && WEXITSTATUS (status) == 0)) - { - printf ("error: invalid status from : %m\n"); - exit (1); - } - - close (pipes[0]); - - if (value_from_child != 0) - { - errno = value_from_child; - return -1; - } - return 0; -} - -static int -getaffinity (size_t size, cpu_set_t *set) -{ - int pipes[2]; - if (pipe (pipes) < 0) - { - printf ("error: pipe: %m\n"); - exit (1); - } - - int ret = fork (); - if (ret < 0) - { - printf ("error: fork: %m\n"); - exit (1); - } - if (ret == 0) - { - /* Child. */ - int ret = sched_getaffinity (getppid (), size, set); - if (ret < 0) - ret = errno; - if (write_fully (pipes[1], &ret, sizeof (ret)) < 0 - || write_fully (pipes[1], set, size) < 0 - || (ret == 0 && write_fully (pipes[1], set, size) < 0)) - { - printf ("error: write: %m\n"); - _exit (1); - } - _exit (0); - } - - /* Parent. */ - return process_child_response (pipes, ret, set, size); -} - -static int -setaffinity (size_t size, const cpu_set_t *set) -{ - int pipes[2]; - if (pipe (pipes) < 0) - { - printf ("error: pipe: %m\n"); - exit (1); - } - - int ret = fork (); - if (ret < 0) - { - printf ("error: fork: %m\n"); - exit (1); - } - if (ret == 0) - { - /* Child. */ - int ret = sched_setaffinity (getppid (), size, set); - if (write_fully (pipes[1], &ret, sizeof (ret)) < 0) - { - printf ("error: write: %m\n"); - _exit (1); - } - _exit (0); - } - - /* Parent. There is no affinity mask to read from the child, so the - size is 0. */ - return process_child_response (pipes, ret, NULL, 0); -} - -struct conf; -static bool early_test (struct conf *unused) -{ - return true; -} - -#include "tst-skeleton-affinity.c" diff --git a/sysdeps/unix/sysv/linux/tst-affinity.c b/sysdeps/unix/sysv/linux/tst-affinity.c deleted file mode 100644 index 876544c88e..0000000000 --- a/sysdeps/unix/sysv/linux/tst-affinity.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Single-threaded test for sched_getaffinity and sched_setaffinity. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Function definitions for the benefit of - tst-skeleton-affinity.c. */ - -#include -#include - -static int -getaffinity (size_t size, cpu_set_t *set) -{ - return sched_getaffinity (0, size, set); -} - -static int -setaffinity (size_t size, const cpu_set_t *set) -{ - return sched_setaffinity (0, size, set); -} - -struct conf; -static bool early_test (struct conf *unused) -{ - return true; -} - -#include "tst-skeleton-affinity.c" diff --git a/sysdeps/unix/sysv/linux/tst-align-clone.c b/sysdeps/unix/sysv/linux/tst-align-clone.c deleted file mode 100644 index 026dc58812..0000000000 --- a/sysdeps/unix/sysv/linux/tst-align-clone.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static int -f (void *arg) -{ - bool ok = true; - - puts ("in f"); - - if (TEST_STACK_ALIGN ()) - ok = false; - - return ok ? 0 : 1; -} - -static int -do_test (void) -{ - bool ok = true; - - puts ("in main"); - - if (TEST_STACK_ALIGN ()) - ok = false; - -#ifdef __ia64__ - extern int __clone2 (int (*__fn) (void *__arg), void *__child_stack_base, - size_t __child_stack_size, int __flags, - void *__arg, ...); - char st[256 * 1024]; - pid_t p = __clone2 (f, st, sizeof (st), 0, 0); -#else - char st[128 * 1024] __attribute__ ((aligned)); -# if _STACK_GROWS_DOWN - pid_t p = clone (f, st + sizeof (st), 0, 0); -# elif _STACK_GROWS_UP - pid_t p = clone (f, st, 0, 0); -# else -# error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP" -# endif -#endif - if (p == -1) - { - printf("clone failed: %m\n"); - return 1; - } - - int e; - if (waitpid (p, &e, __WCLONE) != p) - { - puts ("waitpid failed"); - kill (p, SIGKILL); - return 1; - } - if (!WIFEXITED (e)) - { - if (WIFSIGNALED (e)) - printf ("died from signal %s\n", strsignal (WTERMSIG (e))); - else - puts ("did not terminate correctly"); - return 1; - } - if (WEXITSTATUS (e) != 0) - ok = false; - - return ok ? 0 : 1; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/unix/sysv/linux/tst-clone.c b/sysdeps/unix/sysv/linux/tst-clone.c deleted file mode 100644 index 1da749db8d..0000000000 --- a/sysdeps/unix/sysv/linux/tst-clone.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Test for proper error/errno handling in clone. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* BZ #2386 */ -#include -#include -#include -#include -#include - -#ifdef __ia64__ -extern int __clone2 (int (*__fn) (void *__arg), void *__child_stack_base, - size_t __child_stack_size, int __flags, void *__arg, ...); -#endif - -int child_fn(void *arg) -{ - puts ("FAIL: in child_fn(); should not be here"); - exit(1); -} - -static int -do_test (void) -{ - int result; - -#ifdef __ia64__ - result = __clone2 (child_fn, NULL, 0, 0, NULL, NULL, NULL); -#else - result = clone (child_fn, NULL, 0, NULL); -#endif - - if (errno != EINVAL || result != -1) - { - printf ("FAIL: clone()=%d (wanted -1) errno=%d (wanted %d)\n", - result, errno, EINVAL); - return 1; - } - - puts ("All OK"); - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/unix/sysv/linux/tst-clone2.c b/sysdeps/unix/sysv/linux/tst-clone2.c deleted file mode 100644 index f53efd505c..0000000000 --- a/sysdeps/unix/sysv/linux/tst-clone2.c +++ /dev/null @@ -1,146 +0,0 @@ -/* Test if CLONE_VM does not change pthread pid/tid field (BZ #19957) - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include /* For _STACK_GROWS_{UP,DOWN}. */ - -#include - -static int sig; -static int pipefd[2]; - -static int -f (void *a) -{ - close (pipefd[0]); - - pid_t ppid = getppid (); - pid_t pid = getpid (); - pid_t tid = syscall (__NR_gettid); - - if (write (pipefd[1], &ppid, sizeof ppid) != sizeof (ppid)) - FAIL_EXIT1 ("write ppid failed\n"); - if (write (pipefd[1], &pid, sizeof pid) != sizeof (pid)) - FAIL_EXIT1 ("write pid failed\n"); - if (write (pipefd[1], &tid, sizeof tid) != sizeof (tid)) - FAIL_EXIT1 ("write tid failed\n"); - - return 0; -} - - -static int -do_test (void) -{ - sig = SIGRTMIN; - sigset_t ss; - sigemptyset (&ss); - sigaddset (&ss, sig); - if (sigprocmask (SIG_BLOCK, &ss, NULL) != 0) - FAIL_EXIT1 ("sigprocmask failed: %m"); - - if (pipe2 (pipefd, O_CLOEXEC)) - FAIL_EXIT1 ("pipe failed: %m"); - - int clone_flags = 0; -#ifdef __ia64__ - extern int __clone2 (int (*__fn) (void *__arg), void *__child_stack_base, - size_t __child_stack_size, int __flags, - void *__arg, ...); - char st[256 * 1024] __attribute__ ((aligned)); - pid_t p = __clone2 (f, st, sizeof (st), clone_flags, 0); -#else - char st[128 * 1024] __attribute__ ((aligned)); -#if _STACK_GROWS_DOWN - pid_t p = clone (f, st + sizeof (st), clone_flags, 0); -#elif _STACK_GROWS_UP - pid_t p = clone (f, st, clone_flags, 0); -#else -#error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP" -#endif -#endif - - close (pipefd[1]); - - if (p == -1) - FAIL_EXIT1("clone failed: %m"); - - pid_t ppid, pid, tid; - if (read (pipefd[0], &ppid, sizeof pid) != sizeof pid) - { - kill (p, SIGKILL); - FAIL_EXIT1 ("read ppid failed: %m"); - } - if (read (pipefd[0], &pid, sizeof pid) != sizeof pid) - { - kill (p, SIGKILL); - FAIL_EXIT1 ("read pid failed: %m"); - } - if (read (pipefd[0], &tid, sizeof tid) != sizeof tid) - { - kill (p, SIGKILL); - FAIL_EXIT1 ("read tid failed: %m"); - } - - close (pipefd[0]); - - int ret = 0; - - pid_t own_pid = getpid (); - pid_t own_tid = syscall (__NR_gettid); - - /* Some sanity checks for clone syscall: returned ppid should be current - pid and both returned tid/pid should be different from current one. */ - if ((ppid != own_pid) || (pid == own_pid) || (tid == own_tid)) - FAIL_RET ("ppid=%i pid=%i tid=%i | own_pid=%i own_tid=%i", - (int)ppid, (int)pid, (int)tid, (int)own_pid, (int)own_tid); - - int e; - if (waitpid (p, &e, __WCLONE) != p) - { - kill (p, SIGKILL); - FAIL_EXIT1 ("waitpid failed"); - } - if (!WIFEXITED (e)) - { - if (WIFSIGNALED (e)) - printf ("died from signal %s\n", strsignal (WTERMSIG (e))); - else - puts ("did not terminate correctly"); - exit (EXIT_FAILURE); - } - if (WEXITSTATUS (e) != 0) - FAIL_EXIT1 ("exit code %d", WEXITSTATUS (e)); - - return ret; -} - -#include diff --git a/sysdeps/unix/sysv/linux/tst-fallocate-common.c b/sysdeps/unix/sysv/linux/tst-fallocate-common.c deleted file mode 100644 index 7f2e55cf36..0000000000 --- a/sysdeps/unix/sysv/linux/tst-fallocate-common.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Basic fallocate test (no specific flags is checked). - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#define XSTR(s) STR(S) -#define STR(s) #s - -static char *temp_filename; -static int temp_fd; - -static void -do_prepare (int argc, char **argv) -{ - temp_fd = create_temp_file ("tst-fallocate.", &temp_filename); - if (temp_fd == -1) - FAIL_EXIT1 ("cannot create temporary file: %m"); -} -#define PREPARE do_prepare - -static int -do_test_with_offset (off_t offset) -{ - int ret; - struct stat finfo; -#define BLK_SIZE 1024 - char bwrite[BLK_SIZE] = { 0xf0 }; - char bread[BLK_SIZE]; - - /* It tries to fallocate 1024 bytes from 'offset' and then write 1024 bytes. - After both operation rewind the file descriptor and read 1024 bytes - and check if both buffer have the same contents. */ - ret = fallocate (temp_fd, 0, offset, BLK_SIZE); - if (ret == -1) - { - /* fallocate might not be fully supported by underlying filesystem (for - instance some NFS versions). */ - if (errno == EOPNOTSUPP) - FAIL_EXIT (77, "fallocate not supported"); - FAIL_EXIT1 ("fallocate failed"); - } - - ret = fstat (temp_fd, &finfo); - if (ret == -1) - FAIL_EXIT1 ("fstat failed"); - - if (finfo.st_size < (offset + BLK_SIZE)) - FAIL_EXIT1 ("size of first fallocate less than expected (%llu)", - (long long unsigned int)offset + BLK_SIZE); - - if (lseek (temp_fd, offset, SEEK_SET) == (off_t) -1) - FAIL_EXIT1 ("fseek (0, SEEK_SET) failed"); - - if (write (temp_fd, bwrite, BLK_SIZE) != BLK_SIZE) - FAIL_EXIT1 ("fail trying to write " XSTR (BLK_SIZE) " bytes"); - - if (lseek (temp_fd, offset, SEEK_SET) == (off_t) -1) - FAIL_EXIT1 ("fseek (0, SEEK_SET) failed"); - - if (read (temp_fd, bread, BLK_SIZE) != BLK_SIZE) - FAIL_EXIT1 ("fail trying to read " XSTR (BLK_SIZE) " bytes"); - - if (memcmp (bwrite, bread, BLK_SIZE) != 0) - FAIL_EXIT1 ("buffer written different than buffer readed"); - - return 0; -} - -/* This function is defined by the individual tests. */ -static int do_test (void); - -#include diff --git a/sysdeps/unix/sysv/linux/tst-fallocate.c b/sysdeps/unix/sysv/linux/tst-fallocate.c deleted file mode 100644 index a7f80d9478..0000000000 --- a/sysdeps/unix/sysv/linux/tst-fallocate.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Basic fallocate test (no specific flags is checked). - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "tst-fallocate-common.c" - -static int -do_test (void) -{ - return do_test_with_offset (0); -} diff --git a/sysdeps/unix/sysv/linux/tst-fallocate64.c b/sysdeps/unix/sysv/linux/tst-fallocate64.c deleted file mode 100644 index c5b13a203b..0000000000 --- a/sysdeps/unix/sysv/linux/tst-fallocate64.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Basic fallocate64 test (no specific flags is checked). - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define _FILE_OFFSET_BITS 64 -#include "tst-fallocate-common.c" - -static int -do_test (void) -{ - ssize_t ret; - - ret = do_test_with_offset (0); - if (ret == 1) - return 1; - - off_t base_offset = UINT32_MAX + 2048LL; - ret = do_test_with_offset (base_offset); - if (ret == 1) - return 1; - - struct stat st; - if (fstat (temp_fd, &st) == -1) - FAIL_EXIT1 ("fstat on temporary file failed: %m"); - - /* The file size should >= base_offset plus bytes written. */ - off_t expected_value = base_offset + ret; - if (st.st_size < expected_value) - FAIL_EXIT1 ("file size less than expected (%jd > %jd)", - (intmax_t) expected_value, (intmax_t) st.st_size); - - return 0; -} diff --git a/sysdeps/unix/sysv/linux/tst-fanotify.c b/sysdeps/unix/sysv/linux/tst-fanotify.c deleted file mode 100644 index 2009b41d55..0000000000 --- a/sysdeps/unix/sysv/linux/tst-fanotify.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Basic fanotify test. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -static int -do_test (void) -{ - int fd, ret; - - fd = fanotify_init (0, 0); - if (fd < 0) - { - switch (errno) - { - case ENOSYS: - puts ("SKIP: missing support for fanotify (check CONFIG_FANOTIFY=y)"); - return 0; - case EPERM: - puts ("SKIP: missing proper permissions for runtime test"); - return 0; - } - - perror ("fanotify_init (0, 0) failed"); - return 1; - } - - ret = fanotify_mark (fd, FAN_MARK_ADD | FAN_MARK_MOUNT, FAN_ACCESS - | FAN_MODIFY | FAN_OPEN | FAN_CLOSE | FAN_ONDIR - | FAN_EVENT_ON_CHILD, AT_FDCWD, "."); - if (ret) - { - perror ("fanotify_mark (...) failed"); - return 1; - } - - puts ("All OK"); - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/unix/sysv/linux/tst-getpid1.c b/sysdeps/unix/sysv/linux/tst-getpid1.c deleted file mode 100644 index 253ebf2e15..0000000000 --- a/sysdeps/unix/sysv/linux/tst-getpid1.c +++ /dev/null @@ -1,122 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef TEST_CLONE_FLAGS -#define TEST_CLONE_FLAGS 0 -#endif - -static int sig; - -static int -f (void *a) -{ - puts ("in f"); - union sigval sival; - sival.sival_int = getpid (); - printf ("pid = %d\n", sival.sival_int); - if (sigqueue (getppid (), sig, sival) != 0) - return 1; - return 0; -} - - -static int -do_test (void) -{ - int mypid = getpid (); - - sig = SIGRTMIN; - sigset_t ss; - sigemptyset (&ss); - sigaddset (&ss, sig); - if (sigprocmask (SIG_BLOCK, &ss, NULL) != 0) - { - printf ("sigprocmask failed: %m\n"); - return 1; - } - -#ifdef __ia64__ - extern int __clone2 (int (*__fn) (void *__arg), void *__child_stack_base, - size_t __child_stack_size, int __flags, - void *__arg, ...); - char st[256 * 1024] __attribute__ ((aligned)); - pid_t p = __clone2 (f, st, sizeof (st), TEST_CLONE_FLAGS, 0); -#else - char st[128 * 1024] __attribute__ ((aligned)); -# if _STACK_GROWS_DOWN - pid_t p = clone (f, st + sizeof (st), TEST_CLONE_FLAGS, 0); -# elif _STACK_GROWS_UP - pid_t p = clone (f, st, TEST_CLONE_FLAGS, 0); -# else -# error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP" -# endif -#endif - if (p == -1) - { - printf("clone failed: %m\n"); - return 1; - } - printf ("new thread: %d\n", (int) p); - - siginfo_t si; - do - if (sigwaitinfo (&ss, &si) < 0) - { - printf("sigwaitinfo failed: %m\n"); - kill (p, SIGKILL); - return 1; - } - while (si.si_signo != sig || si.si_code != SI_QUEUE); - - int e; - if (waitpid (p, &e, __WCLONE) != p) - { - puts ("waitpid failed"); - kill (p, SIGKILL); - return 1; - } - if (!WIFEXITED (e)) - { - if (WIFSIGNALED (e)) - printf ("died from signal %s\n", strsignal (WTERMSIG (e))); - else - puts ("did not terminate correctly"); - return 1; - } - if (WEXITSTATUS (e) != 0) - { - printf ("exit code %d\n", WEXITSTATUS (e)); - return 1; - } - - if (si.si_int != (int) p) - { - printf ("expected PID %d, got si_int %d\n", (int) p, si.si_int); - kill (p, SIGKILL); - return 1; - } - - if (si.si_pid != p) - { - printf ("expected PID %d, got si_pid %d\n", (int) p, (int) si.si_pid); - kill (p, SIGKILL); - return 1; - } - - if (getpid () != mypid) - { - puts ("my PID changed"); - return 1; - } - - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/unix/sysv/linux/tst-personality.c b/sysdeps/unix/sysv/linux/tst-personality.c deleted file mode 100644 index c52a1eff7a..0000000000 --- a/sysdeps/unix/sysv/linux/tst-personality.c +++ /dev/null @@ -1,45 +0,0 @@ -/* BZ #19408 linux personality syscall wrapper test. - - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -static int -do_test (void) -{ - int rc = 0; - unsigned int test_persona = -EINVAL; - unsigned int saved_persona; - - errno = 0xdefaced; - saved_persona = personality (0xffffffff); - - if (personality (test_persona) != saved_persona || - personality (0xffffffff) == -1 || - personality (PER_LINUX) == -1 || - personality (0xffffffff) != PER_LINUX || - 0xdefaced != errno) - rc = 1; - - (void) personality (saved_persona); - return rc; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/unix/sysv/linux/tst-quota.c b/sysdeps/unix/sysv/linux/tst-quota.c deleted file mode 100644 index 41943c7e35..0000000000 --- a/sysdeps/unix/sysv/linux/tst-quota.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include -#include - -static bool errors; - -void -check_size (const char *name1, size_t size1, - const char *name2, size_t size2) -{ - const char *prefix; - const char *op; - if (size1 != size2) - { - prefix = "error"; - op = "!="; - errors = true; - } - else - { - prefix = "info"; - op = "=="; - } - printf ("%s: sizeof (%s) [%zu] %s sizeof (%s) [%zu]\n", - prefix, name1, size1, op, name2, size2); -} - -#define CHECK_SIZE(type1, type2) \ - check_size (#type1, sizeof (type1), #type2, sizeof (type2)) - -int -do_test (void) -{ - CHECK_SIZE (struct if_dqblk, struct dqblk); - CHECK_SIZE (struct if_dqinfo, struct dqinfo); - return errors; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/unix/sysv/linux/tst-setgetname.c b/sysdeps/unix/sysv/linux/tst-setgetname.c deleted file mode 100644 index 0ab35e60f9..0000000000 --- a/sysdeps/unix/sysv/linux/tst-setgetname.c +++ /dev/null @@ -1,302 +0,0 @@ -/* Test pthread_setname_np and pthread_getname_np. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ -#include -#include -#include -#include -#include -#include -#include -#include - -/* New name of process. */ -#define NEW_NAME "setname" - -/* Name of process which is one byte too big - e.g. 17 bytes including null-terminator */ -#define BIG_NAME "....V....X....XV" - -/* Longest name of a process - e.g. 16 bytes including null-terminator. */ -#define LONGEST_NAME "....V....X....X" - -/* One less than longest name with unique - characters to detect modification. */ -#define CANARY_NAME "abcdefghijklmn" - -/* On Linux the maximum length of the name of a task *including* the null - terminator. */ -#define TASK_COMM_LEN 16 - -long -gettid (void) -{ - return syscall(__NR_gettid); -} - -/* On Linux we can read this task's name from /proc. */ -int -get_self_comm (long tid, char *buf, size_t len) -{ - int res = 0; -#define FMT "/proc/self/task/%lu/comm" - char fname[sizeof (FMT) + 32]; - sprintf (fname, FMT, (unsigned long) tid); - - int fd = open (fname, O_RDONLY); - if (fd == -1) - return errno; - - ssize_t n = read (fd, (void *) buf, len); - if (n < 0) - res = errno; - else - { - if (buf[n - 1] == '\n') - buf[n - 1] = '\0'; - else if (n == len) - res = ERANGE; - else - buf[n] = '\0'; - } - - close (fd); - return res; -} - -int -do_test (int argc, char **argv) -{ - pthread_t self; - int res; - int ret = 0; - char name[TASK_COMM_LEN]; - char name_check[TASK_COMM_LEN]; - - memset (name, '\0', TASK_COMM_LEN); - memset (name_check, '\0', TASK_COMM_LEN); - - /* Test 1: Get the name of the task via pthread_getname_np and /proc - and verify that they both match. */ - self = pthread_self (); - res = pthread_getname_np (self, name, TASK_COMM_LEN); - - if (res == 0) - { - res = get_self_comm (gettid (), name_check, TASK_COMM_LEN); - - if (res == 0) - { - if (strncmp (name, name_check, strlen (BIG_NAME)) == 0) - printf ("PASS: Test 1 - pthread_getname_np and /proc agree.\n"); - else - { - printf ("FAIL: Test 1 - pthread_getname_np and /proc differ" - " i.e. %s != %s\n", name, name_check); - ret++; - } - } - else - { - printf ("FAIL: Test 1 - unable read task name via proc.\n"); - ret++; - } - } - else - { - printf ("FAIL: Test 1 - pthread_getname_np failed with error %d\n", res); - ret++; - } - - /* Test 2: Test setting the name and then independently verify it - was set. */ - res = pthread_setname_np (self, NEW_NAME); - - if (res == 0) - { - res = get_self_comm (gettid (), name_check, TASK_COMM_LEN); - if (res == 0) - { - if (strncmp (NEW_NAME, name_check, strlen (BIG_NAME)) == 0) - printf ("PASS: Test 2 - Value used in pthread_setname_np and" - " /proc agree.\n"); - else - { - printf ("FAIL: Test 2 - Value used in pthread_setname_np" - " and /proc differ i.e. %s != %s\n", - NEW_NAME, name_check); - ret++; - } - } - else - { - printf ("FAIL: Test 2 - unable to read task name via proc.\n"); - ret++; - } - } - else - { - printf ("FAIL: Test 2 - pthread_setname_np failed with error %d\n", res); - ret++; - } - - /* Test 3: Test setting a name that is one-byte too big. */ - res = pthread_getname_np (self, name, TASK_COMM_LEN); - - if (res == 0) - { - res = pthread_setname_np (self, BIG_NAME); - if (res != 0) - { - if (res == ERANGE) - { - printf ("PASS: Test 3 - pthread_setname_np returned ERANGE" - " for a process name that was too long.\n"); - - /* Verify the old name didn't change. */ - res = get_self_comm (gettid (), name_check, TASK_COMM_LEN); - if (res == 0) - { - if (strncmp (name, name_check, strlen (BIG_NAME)) == 0) - printf ("PASS: Test 3 - Original name unchanged after" - " pthread_setname_np returned ERANGE.\n"); - else - { - printf ("FAIL: Test 3 - Original name changed after" - " pthread_setname_np returned ERANGE" - " i.e. %s != %s\n", - name, name_check); - ret++; - } - } - else - { - printf ("FAIL: Test 3 - unable to read task name.\n"); - ret++; - } - } - else - { - printf ("FAIL: Test 3 - Wrong error returned" - " i.e. ERANGE != %d\n", res); - ret++; - } - } - else - { - printf ("FAIL: Test 3 - Too-long name accepted by" - " pthread_setname_np.\n"); - ret++; - } - } - else - { - printf ("FAIL: Test 3 - Unable to get original name.\n"); - ret++; - } - - /* Test 4: Verify that setting the longest name works. */ - res = pthread_setname_np (self, LONGEST_NAME); - - if (res == 0) - { - res = get_self_comm (gettid (), name_check, TASK_COMM_LEN); - if (res == 0) - { - if (strncmp (LONGEST_NAME, name_check, strlen (BIG_NAME)) == 0) - printf ("PASS: Test 4 - Longest name set via pthread_setname_np" - " agrees with /proc.\n"); - else - { - printf ("FAIL: Test 4 - Value used in pthread_setname_np and /proc" - " differ i.e. %s != %s\n", LONGEST_NAME, name_check); - ret++; - } - } - else - { - printf ("FAIL: Test 4 - unable to read task name via proc.\n"); - ret++; - } - } - else - { - printf ("FAIL: Test 4 - pthread_setname_np failed with error %d\n", res); - ret++; - } - - /* Test 5: Verify that getting a long name into a small buffer fails. */ - strncpy (name, CANARY_NAME, strlen (CANARY_NAME) + 1); - - /* Claim the buffer length is strlen (LONGEST_NAME). This is one character - too small to hold LONGEST_NAME *and* the null terminator. We should get - back ERANGE and name should be unmodified. */ - res = pthread_getname_np (self, name, strlen (LONGEST_NAME)); - - if (res != 0) - { - if (res == ERANGE) - { - if (strncmp (CANARY_NAME, name, strlen (BIG_NAME)) == 0) - { - printf ("PASS: Test 5 - ERANGE and buffer unmodified.\n"); - } - else - { - printf ("FAIL: Test 5 - Original buffer modified.\n"); - ret++; - } - } - else - { - printf ("FAIL: Test 5 - Did not return ERANGE for small buffer.\n"); - ret++; - } - } - else - { - printf ("FAIL: Test 5 - Returned name longer than buffer.\n"); - ret++; - } - - /* Test 6: Lastly make sure we can read back the longest name. */ - res = pthread_getname_np (self, name, strlen (LONGEST_NAME) + 1); - - if (res == 0) - { - if (strncmp (LONGEST_NAME, name, strlen (BIG_NAME)) == 0) - { - printf ("PASS: Test 6 - Read back longest name correctly.\n"); - } - else - { - printf ("FAIL: Test 6 - Read \"%s\" instead of longest name.\n", - name); - ret++; - } - } - else - { - printf ("FAIL: Test 6 - pthread_getname_np failed with error %d\n", res); - ret++; - } - - return ret; -} - -#include diff --git a/sysdeps/unix/sysv/linux/tst-skeleton-affinity.c b/sysdeps/unix/sysv/linux/tst-skeleton-affinity.c deleted file mode 100644 index b2be8239f2..0000000000 --- a/sysdeps/unix/sysv/linux/tst-skeleton-affinity.c +++ /dev/null @@ -1,278 +0,0 @@ -/* Generic test case for CPU affinity functions. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file is included by the tst-affinity*.c files to test the two - variants of the functions, under different conditions. The - following functions have to be definied: - - static int getaffinity (size_t, cpu_set_t *); - static int setaffinity (size_t, const cpu_set_t *); - static bool early_test (struct conf *); - - The first two functions shall affect the affinity mask for the - current thread and return 0 for success, -1 for error (with an - error code in errno). - - early_test is invoked before the tests in this file affect the - affinity masks. If it returns true, testing continues, otherwise - no more tests run and the overall test exits with status 1. -*/ - -#include -#include -#include -#include -#include - -/* CPU set configuration determined. Can be used from early_test. */ -struct conf -{ - int set_size; /* in bits */ - int last_cpu; -}; - -static int -find_set_size (void) -{ - /* There is considerable controversy about how to determine the size - of the kernel CPU mask. The probing loop below is only intended - for testing purposes. */ - for (int num_cpus = 64; num_cpus <= INT_MAX / 2; ++num_cpus) - { - cpu_set_t *set = CPU_ALLOC (num_cpus); - size_t size = CPU_ALLOC_SIZE (num_cpus); - - if (set == NULL) - { - printf ("error: CPU_ALLOC (%d) failed\n", num_cpus); - return -1; - } - if (getaffinity (size, set) == 0) - { - CPU_FREE (set); - return num_cpus; - } - if (errno != EINVAL) - { - printf ("error: getaffinity for %d CPUs: %m\n", num_cpus); - CPU_FREE (set); - return -1; - } - CPU_FREE (set); - } - puts ("error: Cannot find maximum CPU number"); - return -1; -} - -static int -find_last_cpu (const cpu_set_t *set, size_t size) -{ - /* We need to determine the set size with CPU_COUNT_S and the - cpus_found counter because there is no direct way to obtain the - actual CPU set size, in bits, from the value of - CPU_ALLOC_SIZE. */ - size_t cpus_found = 0; - size_t total_cpus = CPU_COUNT_S (size, set); - int last_cpu = -1; - - for (int cpu = 0; cpus_found < total_cpus; ++cpu) - { - if (CPU_ISSET_S (cpu, size, set)) - { - last_cpu = cpu; - ++cpus_found; - } - } - return last_cpu; -} - -static void -setup_conf (struct conf *conf) -{ - *conf = (struct conf) {-1, -1}; - conf->set_size = find_set_size (); - if (conf->set_size > 0) - { - cpu_set_t *set = CPU_ALLOC (conf->set_size); - - if (set == NULL) - { - printf ("error: CPU_ALLOC (%d) failed\n", conf->set_size); - CPU_FREE (set); - return; - } - if (getaffinity (CPU_ALLOC_SIZE (conf->set_size), set) < 0) - { - printf ("error: getaffinity failed: %m\n"); - CPU_FREE (set); - return; - } - conf->last_cpu = find_last_cpu (set, CPU_ALLOC_SIZE (conf->set_size)); - if (conf->last_cpu < 0) - puts ("info: No test CPU found"); - CPU_FREE (set); - } -} - -static bool -test_size (const struct conf *conf, size_t size) -{ - if (size < conf->set_size) - { - printf ("info: Test not run for CPU set size %zu\n", size); - return true; - } - - cpu_set_t *initial_set = CPU_ALLOC (size); - cpu_set_t *set2 = CPU_ALLOC (size); - cpu_set_t *active_cpu_set = CPU_ALLOC (size); - - if (initial_set == NULL || set2 == NULL || active_cpu_set == NULL) - { - printf ("error: size %zu: CPU_ALLOC failed\n", size); - return false; - } - size_t kernel_size = CPU_ALLOC_SIZE (size); - - if (getaffinity (kernel_size, initial_set) < 0) - { - printf ("error: size %zu: getaffinity: %m\n", size); - return false; - } - if (setaffinity (kernel_size, initial_set) < 0) - { - printf ("error: size %zu: setaffinity: %m\n", size); - return true; - } - - /* Use one-CPU set to test switching between CPUs. */ - int last_active_cpu = -1; - for (int cpu = 0; cpu <= conf->last_cpu; ++cpu) - { - int active_cpu = sched_getcpu (); - if (last_active_cpu >= 0 && last_active_cpu != active_cpu) - { - printf ("error: Unexpected CPU %d, expected %d\n", - active_cpu, last_active_cpu); - return false; - } - - if (!CPU_ISSET_S (cpu, kernel_size, initial_set)) - continue; - last_active_cpu = cpu; - - CPU_ZERO_S (kernel_size, active_cpu_set); - CPU_SET_S (cpu, kernel_size, active_cpu_set); - if (setaffinity (kernel_size, active_cpu_set) < 0) - { - printf ("error: size %zu: setaffinity (%d): %m\n", size, cpu); - return false; - } - active_cpu = sched_getcpu (); - if (active_cpu != cpu) - { - printf ("error: Unexpected CPU %d, expected %d\n", active_cpu, cpu); - return false; - } - if (getaffinity (kernel_size, set2) < 0) - { - printf ("error: size %zu: getaffinity (2): %m\n", size); - return false; - } - if (!CPU_EQUAL_S (kernel_size, active_cpu_set, set2)) - { - printf ("error: size %zu: CPU sets do not match\n", size); - return false; - } - } - - /* Test setting the all-ones set. */ - for (int cpu = 0; cpu < size; ++cpu) - CPU_SET_S (cpu, kernel_size, set2); - if (setaffinity (kernel_size, set2) < 0) - { - printf ("error: size %zu: setaffinity (3): %m\n", size); - return false; - } - - if (setaffinity (kernel_size, initial_set) < 0) - { - printf ("error: size %zu: setaffinity (4): %m\n", size); - return false; - } - if (getaffinity (kernel_size, set2) < 0) - { - printf ("error: size %zu: getaffinity (3): %m\n", size); - return false; - } - if (!CPU_EQUAL_S (kernel_size, initial_set, set2)) - { - printf ("error: size %zu: CPU sets do not match (2)\n", size); - return false; - } - - CPU_FREE (initial_set); - CPU_FREE (set2); - CPU_FREE (active_cpu_set); - - return true; -} - -static int -do_test (void) -{ - { - cpu_set_t set; - if (getaffinity (sizeof (set), &set) < 0 && errno == ENOSYS) - { - puts ("warning: getaffinity not supported, test cannot run"); - return 0; - } - if (sched_getcpu () < 0 && errno == ENOSYS) - { - puts ("warning: sched_getcpu not supported, test cannot run"); - return 0; - } - } - - struct conf conf; - setup_conf (&conf); - printf ("info: Detected CPU set size (in bits): %d\n", conf.set_size); - printf ("info: Maximum test CPU: %d\n", conf.last_cpu); - if (conf.set_size < 0 || conf.last_cpu < 0) - return 1; - - if (!early_test (&conf)) - return 1; - - bool error = false; - error |= !test_size (&conf, 1024); - error |= !test_size (&conf, conf.set_size); - error |= !test_size (&conf, 2); - error |= !test_size (&conf, 32); - error |= !test_size (&conf, 40); - error |= !test_size (&conf, 64); - error |= !test_size (&conf, 96); - error |= !test_size (&conf, 128); - error |= !test_size (&conf, 256); - error |= !test_size (&conf, 8192); - return error; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/unix/sysv/linux/tst-skeleton-thread-affinity.c b/sysdeps/unix/sysv/linux/tst-skeleton-thread-affinity.c deleted file mode 100644 index 91ed987563..0000000000 --- a/sysdeps/unix/sysv/linux/tst-skeleton-thread-affinity.c +++ /dev/null @@ -1,280 +0,0 @@ -/* Generic test for CPU affinity functions, multi-threaded variant. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Before including this file, a test has to declare the helper - getaffinity and setaffinity functions described in - tst-skeleton-affinity.c, which is included below. */ - -#include -#include -#include -#include -#include - -struct conf; -static bool early_test (struct conf *); - -/* Arbitrary run time for each pass. */ -#define PASS_TIMEOUT 2 - -/* There are two passes (one with sched_yield, one without), and we - double the timeout to be on the safe side. */ -#define TIMEOUT (2 * PASS_TIMEOUT * 2) - -#include "tst-skeleton-affinity.c" - -/* 0 if still running, 1 of stopping requested. */ -static int still_running; - -/* 0 if no scheduling failures, 1 if failures are encountered. */ -static int failed; - -static void * -thread_burn_one_cpu (void *closure) -{ - int cpu = (uintptr_t) closure; - while (__atomic_load_n (&still_running, __ATOMIC_RELAXED) == 0) - { - int current = sched_getcpu (); - if (sched_getcpu () != cpu) - { - printf ("error: Pinned thread %d ran on impossible cpu %d\n", - cpu, current); - __atomic_store_n (&failed, 1, __ATOMIC_RELAXED); - /* Terminate early. */ - __atomic_store_n (&still_running, 1, __ATOMIC_RELAXED); - } - } - return NULL; -} - -struct burn_thread -{ - pthread_t self; - struct conf *conf; - cpu_set_t *initial_set; - cpu_set_t *seen_set; - int thread; -}; - -static void * -thread_burn_any_cpu (void *closure) -{ - struct burn_thread *param = closure; - - /* Schedule this thread around a bit to see if it lands on another - CPU. Run this for 2 seconds, once with sched_yield, once - without. */ - for (int pass = 1; pass <= 2; ++pass) - { - time_t start = time (NULL); - while (time (NULL) - start <= PASS_TIMEOUT) - { - int cpu = sched_getcpu (); - if (cpu > param->conf->last_cpu - || !CPU_ISSET_S (cpu, CPU_ALLOC_SIZE (param->conf->set_size), - param->initial_set)) - { - printf ("error: Unpinned thread %d ran on impossible CPU %d\n", - param->thread, cpu); - __atomic_store_n (&failed, 1, __ATOMIC_RELAXED); - return NULL; - } - CPU_SET_S (cpu, CPU_ALLOC_SIZE (param->conf->set_size), - param->seen_set); - if (pass == 1) - sched_yield (); - } - } - return NULL; -} - -static void -stop_and_join_threads (struct conf *conf, cpu_set_t *set, - pthread_t *pinned_first, pthread_t *pinned_last, - struct burn_thread *other_first, - struct burn_thread *other_last) -{ - __atomic_store_n (&still_running, 1, __ATOMIC_RELAXED); - for (pthread_t *p = pinned_first; p < pinned_last; ++p) - { - int cpu = p - pinned_first; - if (!CPU_ISSET_S (cpu, CPU_ALLOC_SIZE (conf->set_size), set)) - continue; - - int ret = pthread_join (*p, NULL); - if (ret != 0) - { - printf ("error: Failed to join thread %d: %s\n", cpu, strerror (ret)); - fflush (stdout); - /* Cannot shut down cleanly with threads still running. */ - abort (); - } - } - - for (struct burn_thread *p = other_first; p < other_last; ++p) - { - int cpu = p - other_first; - if (!CPU_ISSET_S (cpu, CPU_ALLOC_SIZE (conf->set_size), set)) - continue; - - int ret = pthread_join (p->self, NULL); - if (ret != 0) - { - printf ("error: Failed to join thread %d: %s\n", cpu, strerror (ret)); - fflush (stdout); - /* Cannot shut down cleanly with threads still running. */ - abort (); - } - } -} - -/* Tries to check that the initial set of CPUs is complete and that - the main thread will not run on any other threads. */ -static bool -early_test (struct conf *conf) -{ - pthread_t *pinned_threads - = calloc (conf->last_cpu + 1, sizeof (*pinned_threads)); - struct burn_thread *other_threads - = calloc (conf->last_cpu + 1, sizeof (*other_threads)); - cpu_set_t *initial_set = CPU_ALLOC (conf->set_size); - cpu_set_t *scratch_set = CPU_ALLOC (conf->set_size); - - if (pinned_threads == NULL || other_threads == NULL - || initial_set == NULL || scratch_set == NULL) - { - puts ("error: Memory allocation failure"); - return false; - } - if (getaffinity (CPU_ALLOC_SIZE (conf->set_size), initial_set) < 0) - { - printf ("error: pthread_getaffinity_np failed: %m\n"); - return false; - } - for (int cpu = 0; cpu <= conf->last_cpu; ++cpu) - { - if (!CPU_ISSET_S (cpu, CPU_ALLOC_SIZE (conf->set_size), initial_set)) - continue; - other_threads[cpu].conf = conf; - other_threads[cpu].initial_set = initial_set; - other_threads[cpu].thread = cpu; - other_threads[cpu].seen_set = CPU_ALLOC (conf->set_size); - if (other_threads[cpu].seen_set == NULL) - { - puts ("error: Memory allocation failure"); - return false; - } - CPU_ZERO_S (CPU_ALLOC_SIZE (conf->set_size), - other_threads[cpu].seen_set); - } - - pthread_attr_t attr; - int ret = pthread_attr_init (&attr); - if (ret != 0) - { - printf ("error: pthread_attr_init failed: %s\n", strerror (ret)); - return false; - } - - /* Spawn a thread pinned to each available CPU. */ - for (int cpu = 0; cpu <= conf->last_cpu; ++cpu) - { - if (!CPU_ISSET_S (cpu, CPU_ALLOC_SIZE (conf->set_size), initial_set)) - continue; - CPU_ZERO_S (CPU_ALLOC_SIZE (conf->set_size), scratch_set); - CPU_SET_S (cpu, CPU_ALLOC_SIZE (conf->set_size), scratch_set); - ret = pthread_attr_setaffinity_np - (&attr, CPU_ALLOC_SIZE (conf->set_size), scratch_set); - if (ret != 0) - { - printf ("error: pthread_attr_setaffinity_np for CPU %d failed: %s\n", - cpu, strerror (ret)); - stop_and_join_threads (conf, initial_set, - pinned_threads, pinned_threads + cpu, - NULL, NULL); - return false; - } - ret = pthread_create (pinned_threads + cpu, &attr, - thread_burn_one_cpu, (void *) (uintptr_t) cpu); - if (ret != 0) - { - printf ("error: pthread_create for CPU %d failed: %s\n", - cpu, strerror (ret)); - stop_and_join_threads (conf, initial_set, - pinned_threads, pinned_threads + cpu, - NULL, NULL); - return false; - } - } - - /* Spawn another set of threads running on all CPUs. */ - for (int cpu = 0; cpu <= conf->last_cpu; ++cpu) - { - if (!CPU_ISSET_S (cpu, CPU_ALLOC_SIZE (conf->set_size), initial_set)) - continue; - ret = pthread_create (&other_threads[cpu].self, NULL, - thread_burn_any_cpu, other_threads + cpu); - if (ret != 0) - { - printf ("error: pthread_create for thread %d failed: %s\n", - cpu, strerror (ret)); - stop_and_join_threads (conf, initial_set, - pinned_threads, - pinned_threads + conf->last_cpu + 1, - other_threads, other_threads + cpu); - return false; - } - } - - /* Main thread. */ - struct burn_thread main_thread; - main_thread.conf = conf; - main_thread.initial_set = initial_set; - main_thread.seen_set = scratch_set; - main_thread.thread = -1; - CPU_ZERO_S (CPU_ALLOC_SIZE (conf->set_size), main_thread.seen_set); - thread_burn_any_cpu (&main_thread); - stop_and_join_threads (conf, initial_set, - pinned_threads, - pinned_threads + conf->last_cpu + 1, - other_threads, other_threads + conf->last_cpu + 1); - - printf ("info: Main thread ran on %d CPU(s) of %d available CPU(s)\n", - CPU_COUNT_S (CPU_ALLOC_SIZE (conf->set_size), scratch_set), - CPU_COUNT_S (CPU_ALLOC_SIZE (conf->set_size), initial_set)); - CPU_ZERO_S (CPU_ALLOC_SIZE (conf->set_size), scratch_set); - for (int cpu = 0; cpu <= conf->last_cpu; ++cpu) - { - if (!CPU_ISSET_S (cpu, CPU_ALLOC_SIZE (conf->set_size), initial_set)) - continue; - CPU_OR_S (CPU_ALLOC_SIZE (conf->set_size), - scratch_set, scratch_set, other_threads[cpu].seen_set); - CPU_FREE (other_threads[cpu].seen_set); - } - printf ("info: Other threads ran on %d CPU(s)\n", - CPU_COUNT_S (CPU_ALLOC_SIZE (conf->set_size), scratch_set));; - - - pthread_attr_destroy (&attr); - CPU_FREE (scratch_set); - CPU_FREE (initial_set); - free (pinned_threads); - free (other_threads); - return failed == 0; -} diff --git a/sysdeps/unix/sysv/linux/tst-sync_file_range.c b/sysdeps/unix/sysv/linux/tst-sync_file_range.c deleted file mode 100644 index 73cbcb3247..0000000000 --- a/sysdeps/unix/sysv/linux/tst-sync_file_range.c +++ /dev/null @@ -1,132 +0,0 @@ -/* Basic sync_file_range (not specific flag is checked). - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* sync_file_range is only define for LFS. */ -#define _FILE_OFFSET_BITS 64 -#include -#include -#include -#include -#include -#include - -#include -#include - -#define XSTR(s) STR(S) -#define STR(s) #s - -static char *temp_filename; -static int temp_fd; - -static char fifoname[] = "/tmp/tst-posix_fadvise-fifo-XXXXXX"; -static int fifofd; - -void -do_prepare (int argc, char **argv) -{ - temp_fd = create_temp_file ("tst-file_sync_range.", &temp_filename); - if (temp_fd == -1) - FAIL_EXIT1 ("cannot create temporary file: %m"); - - if (mktemp (fifoname) == NULL) - FAIL_EXIT1 ("cannot generate temp file name: %m"); - add_temp_file (fifoname); - - if (mkfifo (fifoname, S_IWUSR | S_IRUSR) != 0) - FAIL_EXIT1 ("cannot create fifo: %m"); - - fifofd = open (fifoname, O_RDONLY | O_NONBLOCK); - if (fifofd == -1) - FAIL_EXIT1 ("cannot open fifo: %m"); -} -#define PREPARE do_prepare - -static int -do_test (void) -{ - int ret; - - /* This tests first check for some invalid usage and then check for - a simple usage. It does not cover for all possible issue since for - EIO/ENOMEM/ENOSPC would require to create very specific scenarios that - are outside the current test coverage (basically correct kernel argument - passing. */ - - /* Check for invalid file descriptor. */ - if ((ret = sync_file_range (-1, 0, 0, 0)) != -1) - FAIL_EXIT1 ("sync_file_range did not fail on an invalid descriptor " - "(returned %d, expected -1)", ret); - if (errno != EBADF) - FAIL_EXIT1 ("sync_file_range on an invalid descriptor did not set errno to " - "EBADF (%d)", errno); - - if ((ret = sync_file_range (fifofd, 0, 0, 0)) != -1) - FAIL_EXIT1 ("sync_file_range did not fail on an invalid descriptor " - "(returned %d, expected -1)", ret); - if (errno != ESPIPE) - FAIL_EXIT1 ("sync_file_range on an invalid descriptor did not set errno to " - "EBADF (%d)", errno); - - /* Check for invalid flags (it must be - SYNC_FILE_RANGE_{WAIT_BEFORE,WRITE,WAIT_AFTER) or a 'or' combination of - them. */ - if ((ret = sync_file_range (temp_fd, 0, 0, -1)) != -1) - FAIL_EXIT1 ("sync_file_range did not failed with invalid flags " - "(returned %d, " "expected -1)", ret); - if (errno != EINVAL) - FAIL_EXIT1 ("sync_file_range with invalid flag did not set errno to " - "EINVAL (%d)", errno); - - /* Check for negative offset. */ - if ((ret = sync_file_range (temp_fd, -1, 1, 0)) != -1) - FAIL_EXIT1 ("sync_file_range did not failed with invalid offset " - "(returned %d, expected -1)", ret); - if (errno != EINVAL) - FAIL_EXIT1 ("sync_file_range with invalid offset did not set errno to " - "EINVAL (%d)", errno); - - /* offset + nbytes must be a positive value. */ - if ((ret = sync_file_range (temp_fd, 1024, -2048, 0)) != -1) - FAIL_EXIT1 ("sync_file_range did not failed with invalid nbytes (returned %d, " - "expected -1)", ret); - if (errno != EINVAL) - FAIL_EXIT1 ("sync_file_range with invalid offset did not set errno to " - "EINVAL (%d)", errno); - - /* offset + nbytes must be larger or equal than offset */ - if ((ret = sync_file_range (temp_fd, -1024, 1024, 0)) != -1) - FAIL_EXIT1 ("sync_file_range did not failed with invalid offset " - "(returned %d, expected -1)", ret); - if (errno != EINVAL) - FAIL_EXIT1 ("sync_file_range with invalid offset did not set errno to " - "EINVAL (%d)", errno); - - /* Check simple successful case. */ - if ((ret = sync_file_range (temp_fd, 0, 1024, 0)) == -1) - FAIL_EXIT1 ("sync_file_range failed (errno = %d)", errno); - - /* Finally check also a successful case with a 64-bit offset. */ - off_t large_offset = UINT32_MAX + 2048LL; - if ((ret = sync_file_range (temp_fd, large_offset, 1024, 0)) == -1) - FAIL_EXIT1 ("sync_file_range failed (errno = %d)", errno); - - return 0; -} - -#include diff --git a/sysdeps/unix/sysv/linux/tst-thread-affinity-pthread.c b/sysdeps/unix/sysv/linux/tst-thread-affinity-pthread.c deleted file mode 100644 index d4eff9a0e8..0000000000 --- a/sysdeps/unix/sysv/linux/tst-thread-affinity-pthread.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Multi-threaded test for pthread_getaffinity_np, pthread_setaffinity_np. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Defined for the benefit of tst-skeleton-thread-affinity.c, included - below. */ - -static int -setaffinity (size_t size, const cpu_set_t *set) -{ - int ret = pthread_setaffinity_np (pthread_self (), size, set); - if (ret != 0) - { - errno = ret; - return -1; - } - return 0; -} - -static int -getaffinity (size_t size, cpu_set_t *set) -{ - int ret = pthread_getaffinity_np (pthread_self (), size, set); - if (ret != 0) - { - errno = ret; - return -1; - } - return 0; -} - -#include "tst-skeleton-thread-affinity.c" diff --git a/sysdeps/unix/sysv/linux/tst-thread-affinity-pthread2.c b/sysdeps/unix/sysv/linux/tst-thread-affinity-pthread2.c deleted file mode 100644 index 4a1a377e5e..0000000000 --- a/sysdeps/unix/sysv/linux/tst-thread-affinity-pthread2.c +++ /dev/null @@ -1,95 +0,0 @@ -/* Separate thread test for pthread_getaffinity_np, pthread_setaffinity_np. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Defined for the benefit of tst-skeleton-thread-affinity.c, included - below. This variant runs the functions on a separate thread. */ - -struct affinity_access_task -{ - pthread_t thread; - cpu_set_t *set; - size_t size; - bool get; - int result; -}; - -static void * -affinity_access_thread (void *closure) -{ - struct affinity_access_task *task = closure; - if (task->get) - task->result = pthread_getaffinity_np - (task->thread, task->size, task->set); - else - task->result = pthread_setaffinity_np - (task->thread, task->size, task->set); - return NULL; -} - -static int -run_affinity_access_thread (cpu_set_t *set, size_t size, bool get) -{ - struct affinity_access_task task = - { - .thread = pthread_self (), - .set = set, - .size = size, - .get = get - }; - pthread_t thr; - int ret = pthread_create (&thr, NULL, affinity_access_thread, &task); - if (ret != 0) - { - errno = ret; - printf ("error: could not create affinity access thread: %m\n"); - abort (); - } - ret = pthread_join (thr, NULL); - if (ret != 0) - { - errno = ret; - printf ("error: could not join affinity access thread: %m\n"); - abort (); - } - if (task.result != 0) - { - errno = task.result; - return -1; - } - return 0; -} - -static int -setaffinity (size_t size, const cpu_set_t *set) -{ - return run_affinity_access_thread ((cpu_set_t *) set, size, false); -} - -static int -getaffinity (size_t size, cpu_set_t *set) -{ - return run_affinity_access_thread (set, size, true); -} - -#include "tst-skeleton-thread-affinity.c" diff --git a/sysdeps/unix/sysv/linux/tst-thread-affinity-sched.c b/sysdeps/unix/sysv/linux/tst-thread-affinity-sched.c deleted file mode 100644 index 8cbf589bcb..0000000000 --- a/sysdeps/unix/sysv/linux/tst-thread-affinity-sched.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Multi-threaded test for sched_getaffinity_np, sched_setaffinity_np. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Defined for the benefit of tst-skeleton-thread-affinity.c, included - below. */ - -static int -getaffinity (size_t size, cpu_set_t *set) -{ - return sched_getaffinity (0, size, set); -} - -static int -setaffinity (size_t size, const cpu_set_t *set) -{ - return sched_setaffinity (0, size, set); -} - -#include "tst-skeleton-thread-affinity.c" diff --git a/sysdeps/unix/sysv/linux/ttyname.c b/sysdeps/unix/sysv/linux/ttyname.c deleted file mode 100644 index 5909cb765f..0000000000 --- a/sysdeps/unix/sysv/linux/ttyname.c +++ /dev/null @@ -1,223 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include <_itoa.h> - -#include "ttyname.h" - -#if 0 -/* Is this used anywhere? It is not exported. */ -char *__ttyname; -#endif - -static char *getttyname (const char *dev, dev_t mydev, - ino64_t myino, int save, int *dostat) - internal_function; - - -libc_freeres_ptr (static char *getttyname_name); - -static char * -internal_function attribute_compat_text_section -getttyname (const char *dev, dev_t mydev, ino64_t myino, int save, int *dostat) -{ - static size_t namelen; - struct stat64 st; - DIR *dirstream; - struct dirent64 *d; - size_t devlen = strlen (dev) + 1; - - dirstream = __opendir (dev); - if (dirstream == NULL) - { - *dostat = -1; - return NULL; - } - - /* Prepare for the loop. If we already have a buffer copy the directory - name we look at into it. */ - if (devlen < namelen) - *((char *) __mempcpy (getttyname_name, dev, devlen - 1)) = '/'; - - while ((d = __readdir64 (dirstream)) != NULL) - if ((d->d_fileno == myino || *dostat) - && strcmp (d->d_name, "stdin") - && strcmp (d->d_name, "stdout") - && strcmp (d->d_name, "stderr")) - { - size_t dlen = _D_ALLOC_NAMLEN (d); - if (devlen + dlen > namelen) - { - free (getttyname_name); - namelen = 2 * (devlen + dlen); /* Big enough. */ - getttyname_name = malloc (namelen); - if (! getttyname_name) - { - *dostat = -1; - /* Perhaps it helps to free the directory stream buffer. */ - (void) __closedir (dirstream); - return NULL; - } - *((char *) __mempcpy (getttyname_name, dev, devlen - 1)) = '/'; - } - memcpy (&getttyname_name[devlen], d->d_name, dlen); - if (__xstat64 (_STAT_VER, getttyname_name, &st) == 0 -#ifdef _STATBUF_ST_RDEV - && S_ISCHR (st.st_mode) && st.st_rdev == mydev -#else - && d->d_fileno == myino && st.st_dev == mydev -#endif - ) - { - (void) __closedir (dirstream); -#if 0 - __ttyname = getttyname_name; -#endif - __set_errno (save); - return getttyname_name; - } - } - - (void) __closedir (dirstream); - __set_errno (save); - return NULL; -} - - -/* Static buffer in `ttyname'. */ -libc_freeres_ptr (static char *ttyname_buf); - - -/* Return the pathname of the terminal FD is open on, or NULL on errors. - The returned storage is good only until the next call to this function. */ -char * -ttyname (int fd) -{ - static size_t buflen; - char procname[30]; - struct stat64 st, st1; - int dostat = 0; - char *name; - int save = errno; - struct termios term; - - /* isatty check, tcgetattr is used because it sets the correct - errno (EBADF resp. ENOTTY) on error. */ - if (__glibc_unlikely (__tcgetattr (fd, &term) < 0)) - return NULL; - - if (__fxstat64 (_STAT_VER, fd, &st) < 0) - return NULL; - - /* We try using the /proc filesystem. */ - *_fitoa_word (fd, __stpcpy (procname, "/proc/self/fd/"), 10, 0) = '\0'; - - if (buflen == 0) - { - buflen = 4095; - ttyname_buf = (char *) malloc (buflen + 1); - if (ttyname_buf == NULL) - { - buflen = 0; - return NULL; - } - } - - ssize_t len = __readlink (procname, ttyname_buf, buflen); - if (__glibc_likely (len != -1)) - { - if ((size_t) len >= buflen) - return NULL; - -#define UNREACHABLE_LEN strlen ("(unreachable)") - if (len > UNREACHABLE_LEN - && memcmp (ttyname_buf, "(unreachable)", UNREACHABLE_LEN) == 0) - { - memmove (ttyname_buf, ttyname_buf + UNREACHABLE_LEN, - len - UNREACHABLE_LEN); - len -= UNREACHABLE_LEN; - } - - /* readlink need not terminate the string. */ - ttyname_buf[len] = '\0'; - - /* Verify readlink result, fall back on iterating through devices. */ - if (ttyname_buf[0] == '/' - && __xstat64 (_STAT_VER, ttyname_buf, &st1) == 0 -#ifdef _STATBUF_ST_RDEV - && S_ISCHR (st1.st_mode) - && st1.st_rdev == st.st_rdev -#endif - && st1.st_ino == st.st_ino - && st1.st_dev == st.st_dev) - return ttyname_buf; - - /* If the link doesn't exist, then it points to a device in another - namespace. */ - if (is_pty (&st)) - { - __set_errno (ENODEV); - return NULL; - } - } - - if (__xstat64 (_STAT_VER, "/dev/pts", &st1) == 0 && S_ISDIR (st1.st_mode)) - { -#ifdef _STATBUF_ST_RDEV - name = getttyname ("/dev/pts", st.st_rdev, st.st_ino, save, &dostat); -#else - name = getttyname ("/dev/pts", st.st_dev, st.st_ino, save, &dostat); -#endif - } - else - { - __set_errno (save); - name = NULL; - } - - if (!name && dostat != -1) - { -#ifdef _STATBUF_ST_RDEV - name = getttyname ("/dev", st.st_rdev, st.st_ino, save, &dostat); -#else - name = getttyname ("/dev", st.st_dev, st.st_ino, save, &dostat); -#endif - } - - if (!name && dostat != -1) - { - dostat = 1; -#ifdef _STATBUF_ST_RDEV - name = getttyname ("/dev", st.st_rdev, st.st_ino, save, &dostat); -#else - name = getttyname ("/dev", st.st_dev, st.st_ino, save, &dostat); -#endif - } - - return name; -} diff --git a/sysdeps/unix/sysv/linux/ttyname.h b/sysdeps/unix/sysv/linux/ttyname.h deleted file mode 100644 index 2e415e4e9c..0000000000 --- a/sysdeps/unix/sysv/linux/ttyname.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include -#include - -/* Return true if this is a UNIX98 pty device, as defined in - linux/Documentation/devices.txt. */ -static inline int -is_pty (struct stat64 *sb) -{ -#ifdef _STATBUF_ST_RDEV - int m = major (sb->st_rdev); - return (136 <= m && m <= 143); -#else - return false; -#endif -} diff --git a/sysdeps/unix/sysv/linux/ttyname_r.c b/sysdeps/unix/sysv/linux/ttyname_r.c deleted file mode 100644 index dc863526ba..0000000000 --- a/sysdeps/unix/sysv/linux/ttyname_r.c +++ /dev/null @@ -1,221 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include <_itoa.h> - -#include "ttyname.h" - -static int getttyname_r (char *buf, size_t buflen, - dev_t mydev, ino64_t myino, int save, - int *dostat) internal_function; - -static int -internal_function attribute_compat_text_section -getttyname_r (char *buf, size_t buflen, dev_t mydev, ino64_t myino, - int save, int *dostat) -{ - struct stat64 st; - DIR *dirstream; - struct dirent64 *d; - size_t devlen = strlen (buf); - - dirstream = __opendir (buf); - if (dirstream == NULL) - { - *dostat = -1; - return errno; - } - - while ((d = __readdir64 (dirstream)) != NULL) - if ((d->d_fileno == myino || *dostat) - && strcmp (d->d_name, "stdin") - && strcmp (d->d_name, "stdout") - && strcmp (d->d_name, "stderr")) - { - char *cp; - size_t needed = _D_EXACT_NAMLEN (d) + 1; - - if (needed > buflen) - { - *dostat = -1; - (void) __closedir (dirstream); - __set_errno (ERANGE); - return ERANGE; - } - - cp = __stpncpy (buf + devlen, d->d_name, needed); - cp[0] = '\0'; - - if (__xstat64 (_STAT_VER, buf, &st) == 0 -#ifdef _STATBUF_ST_RDEV - && S_ISCHR (st.st_mode) && st.st_rdev == mydev -#else - && d->d_fileno == myino && st.st_dev == mydev -#endif - ) - { - (void) __closedir (dirstream); - __set_errno (save); - return 0; - } - } - - (void) __closedir (dirstream); - __set_errno (save); - /* It is not clear what to return in this case. `isatty' says FD - refers to a TTY but no entry in /dev has this inode. */ - return ENOTTY; -} - -/* Store at most BUFLEN character of the pathname of the terminal FD is - open on in BUF. Return 0 on success, otherwise an error number. */ -int -__ttyname_r (int fd, char *buf, size_t buflen) -{ - char procname[30]; - struct stat64 st, st1; - int dostat = 0; - int save = errno; - - /* Test for the absolute minimal size. This makes life easier inside - the loop. */ - if (!buf) - { - __set_errno (EINVAL); - return EINVAL; - } - - if (buflen < sizeof ("/dev/pts/")) - { - __set_errno (ERANGE); - return ERANGE; - } - - /* isatty check, tcgetattr is used because it sets the correct - errno (EBADF resp. ENOTTY) on error. */ - struct termios term; - if (__glibc_unlikely (__tcgetattr (fd, &term) < 0)) - return errno; - - if (__fxstat64 (_STAT_VER, fd, &st) < 0) - return errno; - - /* We try using the /proc filesystem. */ - *_fitoa_word (fd, __stpcpy (procname, "/proc/self/fd/"), 10, 0) = '\0'; - - ssize_t ret = __readlink (procname, buf, buflen - 1); - if (__glibc_unlikely (ret == -1 && errno == ENAMETOOLONG)) - { - __set_errno (ERANGE); - return ERANGE; - } - - if (__glibc_likely (ret != -1)) - { -#define UNREACHABLE_LEN strlen ("(unreachable)") - if (ret > UNREACHABLE_LEN - && memcmp (buf, "(unreachable)", UNREACHABLE_LEN) == 0) - { - memmove (buf, buf + UNREACHABLE_LEN, ret - UNREACHABLE_LEN); - ret -= UNREACHABLE_LEN; - } - - /* readlink need not terminate the string. */ - buf[ret] = '\0'; - - /* Verify readlink result, fall back on iterating through devices. */ - if (buf[0] == '/' - && __xstat64 (_STAT_VER, buf, &st1) == 0 -#ifdef _STATBUF_ST_RDEV - && S_ISCHR (st1.st_mode) - && st1.st_rdev == st.st_rdev -#endif - && st1.st_ino == st.st_ino - && st1.st_dev == st.st_dev) - return 0; - - /* If the link doesn't exist, then it points to a device in another - * namespace. - */ - if (is_pty (&st)) - { - __set_errno (ENODEV); - return ENODEV; - } - } - - /* Prepare the result buffer. */ - memcpy (buf, "/dev/pts/", sizeof ("/dev/pts/")); - buflen -= sizeof ("/dev/pts/") - 1; - - if (__xstat64 (_STAT_VER, buf, &st1) == 0 && S_ISDIR (st1.st_mode)) - { -#ifdef _STATBUF_ST_RDEV - ret = getttyname_r (buf, buflen, st.st_rdev, st.st_ino, save, - &dostat); -#else - ret = getttyname_r (buf, buflen, st.st_dev, st.st_ino, save, - &dostat); -#endif - } - else - { - __set_errno (save); - ret = ENOENT; - } - - if (ret && dostat != -1) - { - buf[sizeof ("/dev/") - 1] = '\0'; - buflen += sizeof ("pts/") - 1; -#ifdef _STATBUF_ST_RDEV - ret = getttyname_r (buf, buflen, st.st_rdev, st.st_ino, save, - &dostat); -#else - ret = getttyname_r (buf, buflen, st.st_dev, st.st_ino, save, - &dostat); -#endif - } - - if (ret && dostat != -1) - { - buf[sizeof ("/dev/") - 1] = '\0'; - dostat = 1; -#ifdef _STATBUF_ST_RDEV - ret = getttyname_r (buf, buflen, st.st_rdev, st.st_ino, - save, &dostat); -#else - ret = getttyname_r (buf, buflen, st.st_dev, st.st_ino, - save, &dostat); -#endif - } - - return ret; -} - -weak_alias (__ttyname_r, ttyname_r) diff --git a/sysdeps/unix/sysv/linux/ualarm.c b/sysdeps/unix/sysv/linux/ualarm.c deleted file mode 100644 index 5522f58892..0000000000 --- a/sysdeps/unix/sysv/linux/ualarm.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/umount.S b/sysdeps/unix/sysv/linux/umount.S deleted file mode 100644 index e18463e2e6..0000000000 --- a/sysdeps/unix/sysv/linux/umount.S +++ /dev/null @@ -1,12 +0,0 @@ -/* This hack is necessary since the kernel people are making "strange" - changes. They simply rename old system calls. */ - -#include -#ifdef __NR_oldumount -PSEUDO (__umount, oldumount, 1) -#else -PSEUDO (__umount, umount, 1) -#endif - ret -PSEUDO_END(__umount) -weak_alias (__umount, umount) diff --git a/sysdeps/unix/sysv/linux/umount2.S b/sysdeps/unix/sysv/linux/umount2.S deleted file mode 100644 index 92241bbf97..0000000000 --- a/sysdeps/unix/sysv/linux/umount2.S +++ /dev/null @@ -1,13 +0,0 @@ -/* umount system call with two parameters. */ - -#include -#if defined __NR_oldumount || defined __NR_umount2 -#ifdef __NR_oldumount -PSEUDO (__umount2, umount, 2) -#else -PSEUDO (__umount2, umount2, 2) -#endif - ret -PSEUDO_END(__umount2) -weak_alias (__umount2, umount2) -#endif diff --git a/sysdeps/unix/sysv/linux/unlockpt.c b/sysdeps/unix/sysv/linux/unlockpt.c deleted file mode 100644 index 4fa0082b4f..0000000000 --- a/sysdeps/unix/sysv/linux/unlockpt.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Zack Weinberg , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -/* Unlock the slave pseudo terminal associated with the master pseudo - terminal specified by FD. */ -int -unlockpt (int fd) -{ -#ifdef TIOCSPTLCK - int save_errno = errno; - int unlock = 0; - - if (__ioctl (fd, TIOCSPTLCK, &unlock)) - { - if (errno == EINVAL) - { - __set_errno (save_errno); - return 0; - } - else - return -1; - } -#endif - /* If we have no TIOCSPTLCK ioctl, all slave pseudo terminals are - unlocked by default. */ - return 0; -} diff --git a/sysdeps/unix/sysv/linux/updwtmp.c b/sysdeps/unix/sysv/linux/updwtmp.c deleted file mode 100644 index 334d2272c6..0000000000 --- a/sysdeps/unix/sysv/linux/updwtmp.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Mark Kettenis , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define TRANSFORM_UTMP_FILE_NAME(file_name) \ - ((strcmp (file_name, _PATH_UTMP) == 0 \ - && __access (_PATH_UTMP "x", F_OK) == 0) ? (_PATH_UTMP "x") : \ - ((strcmp (file_name, _PATH_WTMP) == 0 \ - && __access ( _PATH_WTMP "x", F_OK) == 0) ? (_PATH_WTMP "x") : \ - ((strcmp (file_name, _PATH_UTMP "x") == 0 \ - && __access (_PATH_UTMP "x", F_OK) != 0) ? _PATH_UTMP : \ - ((strcmp (file_name, _PATH_WTMP "x") == 0 \ - && __access (_PATH_WTMP "x", F_OK) != 0) ? _PATH_WTMP : \ - file_name)))) - -#include diff --git a/sysdeps/unix/sysv/linux/ustat.c b/sysdeps/unix/sysv/linux/ustat.c deleted file mode 100644 index bcb2893372..0000000000 --- a/sysdeps/unix/sysv/linux/ustat.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include -#include - -int -ustat (dev_t dev, struct ustat *ubuf) -{ - unsigned long long int k_dev; - - /* We must convert the value to dev_t type used by the kernel. */ - k_dev = dev & ((1ULL << 32) - 1); - if (k_dev != dev) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - - return INLINE_SYSCALL (ustat, 2, (unsigned int) k_dev, ubuf); -} diff --git a/sysdeps/unix/sysv/linux/utimensat.c b/sysdeps/unix/sysv/linux/utimensat.c deleted file mode 100644 index 87f1ef04e0..0000000000 --- a/sysdeps/unix/sysv/linux/utimensat.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Change access and modification times of open file. Linux version. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -/* Change the access time of FILE to TSP[0] and - the modification time of FILE to TSP[1]. - - Starting with 2.6.22 the Linux kernel has the utimensat syscall. */ -int -utimensat (int fd, const char *file, const struct timespec tsp[2], - int flags) -{ - if (file == NULL) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - /* Avoid implicit array coercion in syscall macros. */ - return INLINE_SYSCALL (utimensat, 4, fd, file, &tsp[0], flags); -} diff --git a/sysdeps/unix/sysv/linux/utimes.c b/sysdeps/unix/sysv/linux/utimes.c deleted file mode 100644 index 038ff20ba0..0000000000 --- a/sysdeps/unix/sysv/linux/utimes.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - -/* Consider moving to syscalls.list. */ - -/* Change the access time of FILE to TVP[0] and - the modification time of FILE to TVP[1]. */ -int -__utimes (const char *file, const struct timeval tvp[2]) -{ - /* Avoid implicit array coercion in syscall macros. */ - return INLINE_SYSCALL (utimes, 2, file, &tvp[0]); -} - -weak_alias (__utimes, utimes) diff --git a/sysdeps/unix/sysv/linux/utmp_file.c b/sysdeps/unix/sysv/linux/utmp_file.c deleted file mode 100644 index 748d31d885..0000000000 --- a/sysdeps/unix/sysv/linux/utmp_file.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Mark Kettenis , 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define TRANSFORM_UTMP_FILE_NAME(file_name) \ - ((strcmp (file_name, _PATH_UTMP) == 0 \ - && __access (_PATH_UTMP "x", F_OK) == 0) ? (_PATH_UTMP "x") : \ - ((strcmp (file_name, _PATH_WTMP) == 0 \ - && __access ( _PATH_WTMP "x", F_OK) == 0) ? (_PATH_WTMP "x") : \ - ((strcmp (file_name, _PATH_UTMP "x") == 0 \ - && __access (_PATH_UTMP "x", F_OK) != 0) ? _PATH_UTMP : \ - ((strcmp (file_name, _PATH_WTMP "x") == 0 \ - && __access (_PATH_WTMP "x", F_OK) != 0) ? _PATH_WTMP : \ - file_name)))) - -#include diff --git a/sysdeps/unix/sysv/linux/vfork.c b/sysdeps/unix/sysv/linux/vfork.c deleted file mode 100644 index c8c13d0fd5..0000000000 --- a/sysdeps/unix/sysv/linux/vfork.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/vmsplice.c b/sysdeps/unix/sysv/linux/vmsplice.c deleted file mode 100644 index 01dac13a51..0000000000 --- a/sysdeps/unix/sysv/linux/vmsplice.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Splice user pages into a pipe Linux implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -ssize_t -vmsplice (int fd, const struct iovec *iov, size_t count, unsigned int flags) -{ - return SYSCALL_CANCEL (vmsplice, fd, iov, count, flags); -} diff --git a/sysdeps/unix/sysv/linux/wait.c b/sysdeps/unix/sysv/linux/wait.c deleted file mode 100644 index da59b9232e..0000000000 --- a/sysdeps/unix/sysv/linux/wait.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Wait for a child to die. When one does, put its status in *STAT_LOC - and return its process ID. For errors, return (pid_t) -1. */ -pid_t -__libc_wait (int *stat_loc) -{ - pid_t result = SYSCALL_CANCEL (wait4, WAIT_ANY, stat_loc, 0, - (struct rusage *) NULL); - return result; -} - -weak_alias (__libc_wait, __wait) -weak_alias (__libc_wait, wait) diff --git a/sysdeps/unix/sysv/linux/wait3.c b/sysdeps/unix/sysv/linux/wait3.c deleted file mode 100644 index 2ff027f0e1..0000000000 --- a/sysdeps/unix/sysv/linux/wait3.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/waitid.c b/sysdeps/unix/sysv/linux/waitid.c deleted file mode 100644 index 2cc7e463cb..0000000000 --- a/sysdeps/unix/sysv/linux/waitid.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Linux implementation of waitid. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -int -__waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options) -{ - /* The unused fifth argument is a `struct rusage *' that we could - pass if we were using waitid to simulate wait3/wait4. */ - return SYSCALL_CANCEL (waitid, idtype, id, infop, options, NULL); -} -weak_alias (__waitid, waitid) -strong_alias (__waitid, __libc_waitid) diff --git a/sysdeps/unix/sysv/linux/waitpid.c b/sysdeps/unix/sysv/linux/waitpid.c deleted file mode 100644 index 2fed421c90..0000000000 --- a/sysdeps/unix/sysv/linux/waitpid.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -__pid_t -__waitpid (__pid_t pid, int *stat_loc, int options) -{ -#ifdef __NR_waitpid - return SYSCALL_CANCEL (waitpid, pid, stat_loc, options); -#else - return SYSCALL_CANCEL (wait4, pid, stat_loc, options, NULL); -#endif -} -libc_hidden_def (__waitpid) -weak_alias (__waitpid, waitpid) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/Versions b/sysdeps/unix/sysv/linux/wordsize-64/Versions deleted file mode 100644 index a3b40ccd17..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/Versions +++ /dev/null @@ -1,5 +0,0 @@ -libc { - GLIBC_2.10 { - fallocate64; - } -} diff --git a/sysdeps/unix/sysv/linux/wordsize-64/aio_read.c b/sysdeps/unix/sysv/linux/wordsize-64/aio_read.c deleted file mode 100644 index d10fc4320b..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/aio_read.c +++ /dev/null @@ -1,7 +0,0 @@ -#define aio_read64 __renamed_aio_read64 - -#include "../../../../pthread/aio_read.c" - -#undef aio_read64 - -weak_alias (aio_read, aio_read64) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/aio_read64.c b/sysdeps/unix/sysv/linux/wordsize-64/aio_read64.c deleted file mode 100644 index 6a6a102c8d..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/aio_read64.c +++ /dev/null @@ -1 +0,0 @@ -/* Defined in aio_read.c. */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/aio_write.c b/sysdeps/unix/sysv/linux/wordsize-64/aio_write.c deleted file mode 100644 index b0fb469cb2..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/aio_write.c +++ /dev/null @@ -1,7 +0,0 @@ -#define aio_write64 __renamed_aio_write64 - -#include "../../../../pthread/aio_write.c" - -#undef aio_write64 - -weak_alias (aio_write, aio_write64) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/aio_write64.c b/sysdeps/unix/sysv/linux/wordsize-64/aio_write64.c deleted file mode 100644 index ced07fa273..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/aio_write64.c +++ /dev/null @@ -1 +0,0 @@ -/* Defined in aio_write.c. */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/dl-fxstatat64.c b/sysdeps/unix/sysv/linux/wordsize-64/dl-fxstatat64.c deleted file mode 100644 index 330b33f7c7..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/dl-fxstatat64.c +++ /dev/null @@ -1 +0,0 @@ -#include "fxstatat.c" diff --git a/sysdeps/unix/sysv/linux/wordsize-64/fstatfs64.c b/sysdeps/unix/sysv/linux/wordsize-64/fstatfs64.c deleted file mode 100644 index 2be4e59ba4..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/fstatfs64.c +++ /dev/null @@ -1 +0,0 @@ -/* fstatfs64 is the same as fstatfs. */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/fstatvfs.c b/sysdeps/unix/sysv/linux/wordsize-64/fstatvfs.c deleted file mode 100644 index 5803b6f882..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/fstatvfs.c +++ /dev/null @@ -1,5 +0,0 @@ -#define __fstatvfs64(file, buf) __no_fstatvfs64(file, buf) -#define fstatvfs64(file, buf) no_fstatvfs64(file, buf) -#include "../fstatvfs.c" -strong_alias (__fstatvfs, __fstatvfs64) -weak_alias (__fstatvfs, fstatvfs64) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/fstatvfs64.c b/sysdeps/unix/sysv/linux/wordsize-64/fstatvfs64.c deleted file mode 100644 index 60f3dfec61..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/fstatvfs64.c +++ /dev/null @@ -1 +0,0 @@ -/* fstatvfs64 is the same as fstatvfs. */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/fxstat.c b/sysdeps/unix/sysv/linux/wordsize-64/fxstat.c deleted file mode 100644 index 00f0517772..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/fxstat.c +++ /dev/null @@ -1,45 +0,0 @@ -/* fxstat using old-style Unix fstat system call. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ho hum, since xstat == xstat64 we must get rid of the prototype or gcc - will complain since they don't strictly match. */ -#define __fxstat64 __fxstat64_disable - -#include -#include -#include - -#include -#include - -/* Get information about the file FD in BUF. */ -int -__fxstat (int vers, int fd, struct stat *buf) -{ - if (vers == _STAT_VER_KERNEL || vers == _STAT_VER_LINUX) - return INLINE_SYSCALL (fstat, 2, fd, buf); - - __set_errno (EINVAL); - return -1; -} - -hidden_def (__fxstat) -weak_alias (__fxstat, _fxstat); -#undef __fxstat64 -strong_alias (__fxstat, __fxstat64); -hidden_ver (__fxstat, __fxstat64) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/fxstat64.c b/sysdeps/unix/sysv/linux/wordsize-64/fxstat64.c deleted file mode 100644 index 9eff9ebeb7..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/fxstat64.c +++ /dev/null @@ -1 +0,0 @@ -/* fxstat64 is in fxstat.c */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c b/sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c deleted file mode 100644 index f00bf01ee9..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/fxstatat.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ho hum, since fxstatat == fxstatat64 we must get rid of the - prototype or gcc will complain since they don't strictly match. */ -#define __fxstatat64 __fxstatat64_disable - -#include -#include -#include -#include -#include -#include - -#include -#include - - -/* Get information about the file NAME relative to FD in ST. */ -int -__fxstatat (int vers, int fd, const char *file, struct stat *st, int flag) -{ - if (vers != _STAT_VER_KERNEL && vers != _STAT_VER_LINUX) - { - __set_errno (EINVAL); - return -1; - } - - return INLINE_SYSCALL (newfstatat, 4, fd, file, st, flag); -} -libc_hidden_def (__fxstatat) -#undef __fxstatat64 -strong_alias (__fxstatat, __fxstatat64); -strong_alias (__fxstatat64, __GI___fxstatat64) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/fxstatat64.c b/sysdeps/unix/sysv/linux/wordsize-64/fxstatat64.c deleted file mode 100644 index 05e7f413bb..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/fxstatat64.c +++ /dev/null @@ -1 +0,0 @@ -/* fxstatat64 is in fxstatat.c */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/getdents.c b/sysdeps/unix/sysv/linux/wordsize-64/getdents.c deleted file mode 100644 index 5ea4c572a3..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/getdents.c +++ /dev/null @@ -1,4 +0,0 @@ -#define __getdents64 __no___getdents64_decl -#include -#undef __getdents64 -weak_alias (__getdents, __getdents64); diff --git a/sysdeps/unix/sysv/linux/wordsize-64/getdents64.c b/sysdeps/unix/sysv/linux/wordsize-64/getdents64.c deleted file mode 100644 index 0df2c8f4c6..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/getdents64.c +++ /dev/null @@ -1 +0,0 @@ -/* getdents64 is in getdents.c */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/getdirentries.c b/sysdeps/unix/sysv/linux/wordsize-64/getdirentries.c deleted file mode 100644 index 298d1e9e91..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/getdirentries.c +++ /dev/null @@ -1,3 +0,0 @@ -#include "../getdirentries.c" - -weak_alias (getdirentries, getdirentries64) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/getdirentries64.c b/sysdeps/unix/sysv/linux/wordsize-64/getdirentries64.c deleted file mode 100644 index 622baf0c87..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/getdirentries64.c +++ /dev/null @@ -1 +0,0 @@ -/* Defined in getdirentries.c. */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/glob64.c b/sysdeps/unix/sysv/linux/wordsize-64/glob64.c deleted file mode 100644 index eab7703d5c..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/glob64.c +++ /dev/null @@ -1,2 +0,0 @@ -/* This file is here so sysdeps/gnu/glob64.c doesn't take precedence. */ -#include diff --git a/sysdeps/unix/sysv/linux/wordsize-64/internal_statvfs64.c b/sysdeps/unix/sysv/linux/wordsize-64/internal_statvfs64.c deleted file mode 100644 index d2a3509c6d..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/internal_statvfs64.c +++ /dev/null @@ -1 +0,0 @@ -/* Nothing. */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/lio_listio.c b/sysdeps/unix/sysv/linux/wordsize-64/lio_listio.c deleted file mode 100644 index 25ee5a3507..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/lio_listio.c +++ /dev/null @@ -1,13 +0,0 @@ -#define lio_listio64 __renamed_lio_listio64 - -#include "../../../../pthread/lio_listio.c" - -#undef lio_listio64 - -#if SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_4) -strong_alias (__lio_listio_21, __lio_listio64_21) -compat_symbol (librt, __lio_listio64_21, lio_listio64, GLIBC_2_1); -#endif - -strong_alias (__lio_listio_item_notify, __lio_listio64_item_notify) -versioned_symbol (librt, __lio_listio64_item_notify, lio_listio64, GLIBC_2_4); diff --git a/sysdeps/unix/sysv/linux/wordsize-64/lio_listio64.c b/sysdeps/unix/sysv/linux/wordsize-64/lio_listio64.c deleted file mode 100644 index 1dabae3692..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/lio_listio64.c +++ /dev/null @@ -1 +0,0 @@ -/* Defined in lio_listio.c. */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/lxstat.c b/sysdeps/unix/sysv/linux/wordsize-64/lxstat.c deleted file mode 100644 index dad9e267d7..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/lxstat.c +++ /dev/null @@ -1,45 +0,0 @@ -/* lxstat using old-style Unix lstat system call. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ho hum, since xstat == xstat64 we must get rid of the prototype or gcc - will complain since they don't strictly match. */ -#define __lxstat64 __lxstat64_disable - -#include -#include -#include - -#include -#include - -/* Get information about the file FD in BUF. */ -int -__lxstat (int vers, const char *name, struct stat *buf) -{ - if (vers == _STAT_VER_KERNEL || vers == _STAT_VER_LINUX) - return INLINE_SYSCALL (lstat, 2, name, buf); - - __set_errno (EINVAL); - return -1; -} - -hidden_def (__lxstat) -weak_alias (__lxstat, _lxstat); -#undef __lxstat64 -strong_alias (__lxstat, __lxstat64); -hidden_ver (__lxstat, __lxstat64) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/lxstat64.c b/sysdeps/unix/sysv/linux/wordsize-64/lxstat64.c deleted file mode 100644 index bb5dbd0fff..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/lxstat64.c +++ /dev/null @@ -1 +0,0 @@ -/* lxstat64 is in lxstat.c */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/openat.c b/sysdeps/unix/sysv/linux/wordsize-64/openat.c deleted file mode 100644 index be31a35105..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/openat.c +++ /dev/null @@ -1,11 +0,0 @@ -#define __openat64 __rename___openat64 -#define openat64 __rename_openat64 - -#include "../openat.c" - -#undef __openat64 -#undef openat64 - -strong_alias (__openat, __openat64) -hidden_ver (__openat, __openat64) -weak_alias (openat, openat64) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/openat64.c b/sysdeps/unix/sysv/linux/wordsize-64/openat64.c deleted file mode 100644 index b4a864b040..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/openat64.c +++ /dev/null @@ -1 +0,0 @@ -/* Defined in openat.c. */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/readdir.c b/sysdeps/unix/sysv/linux/wordsize-64/readdir.c deleted file mode 100644 index e197d93b00..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/readdir.c +++ /dev/null @@ -1,7 +0,0 @@ -#define readdir64 __no_readdir64_decl -#define __readdir64 __no___readdir64_decl -#include -#undef __readdir64 -strong_alias (__readdir, __readdir64) -#undef readdir64 -weak_alias (__readdir, readdir64) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/readdir64.c b/sysdeps/unix/sysv/linux/wordsize-64/readdir64.c deleted file mode 100644 index 9796431dc4..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/readdir64.c +++ /dev/null @@ -1 +0,0 @@ -/* readdir64 is in readdir.c */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/readdir64_r.c b/sysdeps/unix/sysv/linux/wordsize-64/readdir64_r.c deleted file mode 100644 index b8fe9a31b4..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/readdir64_r.c +++ /dev/null @@ -1 +0,0 @@ -/* readdir64_r is in readdir_r.c */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c b/sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c deleted file mode 100644 index 290f2c8f6c..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c +++ /dev/null @@ -1,4 +0,0 @@ -#define readdir64_r __no_readdir64_r_decl -#include -#undef readdir64_r -weak_alias (__readdir_r, readdir64_r) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/sendfile64.c b/sysdeps/unix/sysv/linux/wordsize-64/sendfile64.c deleted file mode 100644 index 4c451bd093..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/sendfile64.c +++ /dev/null @@ -1 +0,0 @@ -/* sendfile64 is alias of sendfile syscall. */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/statfs64.c b/sysdeps/unix/sysv/linux/wordsize-64/statfs64.c deleted file mode 100644 index 06bc68826f..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/statfs64.c +++ /dev/null @@ -1 +0,0 @@ -/* statfs64 is the same as statfs. */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/statvfs.c b/sysdeps/unix/sysv/linux/wordsize-64/statvfs.c deleted file mode 100644 index 1e1c96333b..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/statvfs.c +++ /dev/null @@ -1,5 +0,0 @@ -#define __statvfs64(file, buf) __no_statvfs64(file, buf) -#define statvfs64(file, buf) no_statvfs64(file, buf) -#include "../statvfs.c" -strong_alias (__statvfs, __statvfs64) -weak_alias (__statvfs, statvfs64) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/statvfs64.c b/sysdeps/unix/sysv/linux/wordsize-64/statvfs64.c deleted file mode 100644 index 510015e420..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/statvfs64.c +++ /dev/null @@ -1 +0,0 @@ -/* statvfs64 is the same as statvfs. */ diff --git a/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list b/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list deleted file mode 100644 index 5c78677d77..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list +++ /dev/null @@ -1,11 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -fstatfs - fstatfs i:ip __fstatfs fstatfs fstatfs64 __fstatfs64 -statfs - statfs i:sp __statfs statfs statfs64 -readahead - readahead i:iii __readahead readahead -sendfile - sendfile i:iipi sendfile sendfile64 -sync_file_range - sync_file_range Ci:iiii sync_file_range -prlimit EXTRA prlimit64 i:iipp prlimit prlimit64 - -fanotify_mark EXTRA fanotify_mark i:iiiis fanotify_mark -personality EXTRA personality i:i __personality personality diff --git a/sysdeps/unix/sysv/linux/wordsize-64/xstat.c b/sysdeps/unix/sysv/linux/wordsize-64/xstat.c deleted file mode 100644 index af9f5dd5bd..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/xstat.c +++ /dev/null @@ -1,44 +0,0 @@ -/* xstat using old-style Unix stat system call. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ho hum, since xstat == xstat64 we must get rid of the prototype or gcc - will complain since they don't strictly match. */ -#define __xstat64 __xstat64_disable - -#include -#include -#include - -#include -#include - -/* Get information about the file NAME in BUF. */ -int -__xstat (int vers, const char *name, struct stat *buf) -{ - if (vers == _STAT_VER_KERNEL || vers == _STAT_VER_LINUX) - return INLINE_SYSCALL (stat, 2, name, buf); - - __set_errno (EINVAL); - return -1; -} -hidden_def (__xstat) -weak_alias (__xstat, _xstat); -#undef __xstat64 -strong_alias (__xstat, __xstat64); -hidden_ver (__xstat, __xstat64) diff --git a/sysdeps/unix/sysv/linux/wordsize-64/xstat64.c b/sysdeps/unix/sysv/linux/wordsize-64/xstat64.c deleted file mode 100644 index e7acd3b45e..0000000000 --- a/sysdeps/unix/sysv/linux/wordsize-64/xstat64.c +++ /dev/null @@ -1 +0,0 @@ -/* xstat64 is in xstat.c */ diff --git a/sysdeps/unix/sysv/linux/write.c b/sysdeps/unix/sysv/linux/write.c deleted file mode 100644 index d49514502e..0000000000 --- a/sysdeps/unix/sysv/linux/write.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Linux write syscall implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Write NBYTES of BUF to FD. Return the number written, or -1. */ -ssize_t -__libc_write (int fd, const void *buf, size_t nbytes) -{ - return SYSCALL_CANCEL (write, fd, buf, nbytes); -} -libc_hidden_def (__libc_write) - -weak_alias (__libc_write, __write) -libc_hidden_weak (__write) -weak_alias (__libc_write, write) -libc_hidden_weak (write) diff --git a/sysdeps/unix/sysv/linux/writev.c b/sysdeps/unix/sysv/linux/writev.c deleted file mode 100644 index 1b56cbb709..0000000000 --- a/sysdeps/unix/sysv/linux/writev.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Linux writev syscall implementation. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ssize_t -__writev (int fd, const struct iovec *iov, int iovcnt) -{ - return SYSCALL_CANCEL (writev, fd, iov, iovcnt); -} -weak_alias (__writev, writev) diff --git a/sysdeps/unix/sysv/linux/x86/Implies b/sysdeps/unix/sysv/linux/x86/Implies deleted file mode 100644 index e454b288aa..0000000000 --- a/sysdeps/unix/sysv/linux/x86/Implies +++ /dev/null @@ -1 +0,0 @@ -x86/nptl diff --git a/sysdeps/unix/sysv/linux/x86/Makefile b/sysdeps/unix/sysv/linux/x86/Makefile deleted file mode 100644 index 9e6ec44b3a..0000000000 --- a/sysdeps/unix/sysv/linux/x86/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -# We don't need any header files. -abi-includes := - -abi-variants := 32 64 x32 - -abi-32-options := -D__i386__ -U__x86_64__ -abi-32-condition := !defined __x86_64__ -abi-64-options := -U__i386__ -D__x86_64__ -U__ILP32__ -D__LP64__ -abi-64-condition := defined __x86_64__ && defined __LP64__ -abi-x32-options := -U__i386__ -D__x86_64__ -D__ILP32__ -U__LP64__ -abi-x32-condition := defined __x86_64__ && defined __ILP32__ - -ifeq ($(subdir),misc) -sysdep_headers += sys/elf.h sys/perm.h sys/reg.h sys/vm86.h sys/debugreg.h sys/io.h -endif - -ifeq ($(subdir),nptl) -libpthread-sysdep_routines += elision-lock elision-unlock elision-timed \ - elision-trylock -endif - -ifeq ($(subdir),elf) -sysdep_routines += dl-vdso -endif diff --git a/sysdeps/unix/sysv/linux/x86/bits/a.out.h b/sysdeps/unix/sysv/linux/x86/bits/a.out.h deleted file mode 100644 index 0e4a7c911f..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/a.out.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __A_OUT_GNU_H__ -# error "Never use directly; include instead." -#endif - -#ifdef __x86_64__ - -/* Signal to users of this header that this architecture really doesn't - support a.out binary format. */ -#define __NO_A_OUT_SUPPORT 1 - -#endif diff --git a/sysdeps/unix/sysv/linux/x86/bits/environments.h b/sysdeps/unix/sysv/linux/x86/bits/environments.h deleted file mode 100644 index 2fc65cf9ec..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/environments.h +++ /dev/null @@ -1,105 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _UNISTD_H -# error "Never include this file directly. Use instead" -#endif - -#include - -/* This header should define the following symbols under the described - situations. A value `1' means that the model is always supported, - `-1' means it is never supported. Undefined means it cannot be - statically decided. - - _POSIX_V7_ILP32_OFF32 32bit int, long, pointers, and off_t type - _POSIX_V7_ILP32_OFFBIG 32bit int, long, and pointers and larger off_t type - - _POSIX_V7_LP64_OFF32 64bit long and pointers and 32bit off_t type - _POSIX_V7_LPBIG_OFFBIG 64bit long and pointers and large off_t type - - The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG, - _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32, - _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were - used in previous versions of the Unix standard and are available - only for compatibility. -*/ - -#if __WORDSIZE == 64 - -/* Environments with 32-bit wide pointers are optionally provided. - Therefore following macros aren't defined: - # undef _POSIX_V7_ILP32_OFF32 - # undef _POSIX_V7_ILP32_OFFBIG - # undef _POSIX_V6_ILP32_OFF32 - # undef _POSIX_V6_ILP32_OFFBIG - # undef _XBS5_ILP32_OFF32 - # undef _XBS5_ILP32_OFFBIG - and users need to check at runtime. */ - -/* We also have no use (for now) for an environment with bigger pointers - and offsets. */ -# define _POSIX_V7_LPBIG_OFFBIG -1 -# define _POSIX_V6_LPBIG_OFFBIG -1 -# define _XBS5_LPBIG_OFFBIG -1 - -/* By default we have 64-bit wide `long int', pointers and `off_t'. */ -# define _POSIX_V7_LP64_OFF64 1 -# define _POSIX_V6_LP64_OFF64 1 -# define _XBS5_LP64_OFF64 1 - -#else /* __WORDSIZE == 32 */ - -/* We have 32-bit wide `int', `long int' and pointers and all platforms - support LFS. -mx32 has 64-bit wide `off_t'. */ -# define _POSIX_V7_ILP32_OFFBIG 1 -# define _POSIX_V6_ILP32_OFFBIG 1 -# define _XBS5_ILP32_OFFBIG 1 - -# ifndef __x86_64__ -/* -m32 has 32-bit wide `off_t'. */ -# define _POSIX_V7_ILP32_OFF32 1 -# define _POSIX_V6_ILP32_OFF32 1 -# define _XBS5_ILP32_OFF32 1 -# endif - -/* We optionally provide an environment with the above size but an 64-bit - side `off_t'. Therefore we don't define _POSIX_V7_ILP32_OFFBIG. */ - -/* Environments with 64-bit wide pointers can be provided, - so these macros aren't defined: - # undef _POSIX_V7_LP64_OFF64 - # undef _POSIX_V7_LPBIG_OFFBIG - # undef _POSIX_V6_LP64_OFF64 - # undef _POSIX_V6_LPBIG_OFFBIG - # undef _XBS5_LP64_OFF64 - # undef _XBS5_LPBIG_OFFBIG - and sysconf tests for it at runtime. */ - -#endif /* __WORDSIZE == 32 */ - -#define __ILP32_OFF32_CFLAGS "-m32" -#define __ILP32_OFF32_LDFLAGS "-m32" -#if defined __x86_64__ && defined __ILP32__ -# define __ILP32_OFFBIG_CFLAGS "-mx32" -# define __ILP32_OFFBIG_LDFLAGS "-mx32" -#else -# define __ILP32_OFFBIG_CFLAGS "-m32 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" -# define __ILP32_OFFBIG_LDFLAGS "-m32" -#endif -#define __LP64_OFF64_CFLAGS "-m64" -#define __LP64_OFF64_LDFLAGS "-m64" diff --git a/sysdeps/unix/sysv/linux/x86/bits/epoll.h b/sysdeps/unix/sysv/linux/x86/bits/epoll.h deleted file mode 100644 index 96c9403619..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/epoll.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_EPOLL_H -# error "Never use directly; include instead." -#endif - -/* Flags to be passed to epoll_create1. */ -enum - { - EPOLL_CLOEXEC = 02000000 -#define EPOLL_CLOEXEC EPOLL_CLOEXEC - }; - -#define __EPOLL_PACKED __attribute__ ((__packed__)) diff --git a/sysdeps/unix/sysv/linux/x86/bits/fcntl.h b/sysdeps/unix/sysv/linux/x86/bits/fcntl.h deleted file mode 100644 index 2cf690c9a6..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/fcntl.h +++ /dev/null @@ -1,61 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux/x86. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FCNTL_H -# error "Never use directly; include instead." -#endif - -#ifdef __x86_64__ -# define __O_LARGEFILE 0 -#endif - -#ifdef __x86_64__ -/* Not necessary, we always have 64-bit offsets. */ -# define F_GETLK64 5 /* Get record locking info. */ -# define F_SETLK64 6 /* Set record locking info (non-blocking). */ -# define F_SETLKW64 7 /* Set record locking info (blocking). */ -#endif - - -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#ifndef __USE_FILE_OFFSET64 - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/x86/bits/ipctypes.h b/sysdeps/unix/sysv/linux/x86/bits/ipctypes.h deleted file mode 100644 index 486b0148c1..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/ipctypes.h +++ /dev/null @@ -1,33 +0,0 @@ -/* bits/ipctypes.h -- Define some types used by SysV IPC/MSG/SHM. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IPC_H -# error "Never use directly; include instead." -#endif - -#ifndef _BITS_IPCTYPES_H -#define _BITS_IPCTYPES_H 1 - -/* Used in `struct shmid_ds'. */ -# ifdef __x86_64__ -typedef int __ipc_pid_t; -# else -typedef unsigned short int __ipc_pid_t; -# endif - -#endif /* bits/ipctypes.h */ diff --git a/sysdeps/unix/sysv/linux/x86/bits/mman.h b/sysdeps/unix/sysv/linux/x86/bits/mman.h deleted file mode 100644 index 017abf2f29..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/mman.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/x86_64 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_MMAN_H -# error "Never use directly; include instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - -/* Other flags. */ -#ifdef __USE_MISC -# define MAP_32BIT 0x40 /* Only give out 32-bit addresses. */ -#endif - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */ -# define MAP_DENYWRITE 0x00800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x02000 /* Lock the mapping. */ -# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */ -# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ -# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ -#endif - -/* Include generic Linux declarations. */ -#include diff --git a/sysdeps/unix/sysv/linux/x86/bits/msq.h b/sysdeps/unix/sysv/linux/x86/bits/msq.h deleted file mode 100644 index 78b575c740..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/msq.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_MSG_H -# error "Never use directly; include instead." -#endif - -#include - -/* Define options for message queue functions. */ -#define MSG_NOERROR 010000 /* no error if message is too big */ -#ifdef __USE_GNU -# define MSG_EXCEPT 020000 /* recv any msg except of specified type */ -# define MSG_COPY 040000 /* copy (not remove) all queue messages */ -#endif - -/* Types used in the structure definition. */ -typedef __syscall_ulong_t msgqnum_t; -typedef __syscall_ulong_t msglen_t; - -/* Structure of record for one message inside the kernel. - The type `struct msg' is opaque. */ -struct msqid_ds -{ - struct ipc_perm msg_perm; /* structure describing operation permission */ - __time_t msg_stime; /* time of last msgsnd command */ -#ifndef __x86_64__ - unsigned long int __glibc_reserved1; -#endif - __time_t msg_rtime; /* time of last msgrcv command */ -#ifndef __x86_64__ - unsigned long int __glibc_reserved2; -#endif - __time_t msg_ctime; /* time of last change */ -#ifndef __x86_64__ - unsigned long int __glibc_reserved3; -#endif - __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */ - msgqnum_t msg_qnum; /* number of messages currently on queue */ - msglen_t msg_qbytes; /* max number of bytes allowed on queue */ - __pid_t msg_lspid; /* pid of last msgsnd() */ - __pid_t msg_lrpid; /* pid of last msgrcv() */ - __syscall_ulong_t __glibc_reserved4; - __syscall_ulong_t __glibc_reserved5; -}; - -#ifdef __USE_MISC - -# define msg_cbytes __msg_cbytes - -/* ipcs ctl commands */ -# define MSG_STAT 11 -# define MSG_INFO 12 - -/* buffer for msgctl calls IPC_INFO, MSG_INFO */ -struct msginfo - { - int msgpool; - int msgmap; - int msgmax; - int msgmnb; - int msgmni; - int msgssz; - int msgtql; - unsigned short int msgseg; - }; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/x86/bits/sem.h b/sysdeps/unix/sysv/linux/x86/bits/sem.h deleted file mode 100644 index b3e0047dd2..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/sem.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SEM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Flags for `semop'. */ -#define SEM_UNDO 0x1000 /* undo the operation on exit */ - -/* Commands for `semctl'. */ -#define GETPID 11 /* get sempid */ -#define GETVAL 12 /* get semval */ -#define GETALL 13 /* get all semval's */ -#define GETNCNT 14 /* get semncnt */ -#define GETZCNT 15 /* get semzcnt */ -#define SETVAL 16 /* set semval */ -#define SETALL 17 /* set all semval's */ - - -/* Data structure describing a set of semaphores. */ -struct semid_ds -{ - struct ipc_perm sem_perm; /* operation permission struct */ - __time_t sem_otime; /* last semop() time */ - __syscall_ulong_t __glibc_reserved1; - __time_t sem_ctime; /* last time changed by semctl() */ - __syscall_ulong_t __glibc_reserved2; - __syscall_ulong_t sem_nsems; /* number of semaphores in set */ - __syscall_ulong_t __glibc_reserved3; - __syscall_ulong_t __glibc_reserved4; -}; - -/* The user should define a union like the following to use it for arguments - for `semctl'. - - union semun - { - int val; <= value for SETVAL - struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET - unsigned short int *array; <= array for GETALL & SETALL - struct seminfo *__buf; <= buffer for IPC_INFO - }; - - Previous versions of this file used to define this union but this is - incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether - one must define the union or not. */ -#define _SEM_SEMUN_UNDEFINED 1 - -#ifdef __USE_MISC - -/* ipcs ctl cmds */ -# define SEM_STAT 18 -# define SEM_INFO 19 - -struct seminfo -{ - int semmap; - int semmni; - int semmns; - int semmnu; - int semmsl; - int semopm; - int semume; - int semusz; - int semvmx; - int semaem; -}; - -#endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/x86/bits/shm.h b/sysdeps/unix/sysv/linux/x86/bits/shm.h deleted file mode 100644 index 5f8e2e1575..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/shm.h +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SHM_H -# error "Never include directly; use instead." -#endif - -#include - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from */ -#define SHM_W 0200 /* or S_IWUGO from */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ -#define SHM_EXEC 0100000 /* execution access */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -__BEGIN_DECLS - -/* Segment low boundary address multiple. */ -#define SHMLBA (__getpagesize ()) -extern int __getpagesize (void) __THROW __attribute__ ((__const__)); - - -/* Type to count number of attaches. */ -typedef __syscall_ulong_t shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ - size_t shm_segsz; /* size of segment in bytes */ - __time_t shm_atime; /* time of last shmat() */ -#ifndef __x86_64__ - unsigned long int __glibc_reserved1; -#endif - __time_t shm_dtime; /* time of last shmdt() */ -#ifndef __x86_64__ - unsigned long int __glibc_reserved2; -#endif - __time_t shm_ctime; /* time of last change by shmctl() */ -#ifndef __x86_64__ - unsigned long int __glibc_reserved3; -#endif - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - __syscall_ulong_t __glibc_reserved4; - __syscall_ulong_t __glibc_reserved5; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - __syscall_ulong_t shmmax; - __syscall_ulong_t shmmin; - __syscall_ulong_t shmmni; - __syscall_ulong_t shmseg; - __syscall_ulong_t shmall; - __syscall_ulong_t __glibc_reserved1; - __syscall_ulong_t __glibc_reserved2; - __syscall_ulong_t __glibc_reserved3; - __syscall_ulong_t __glibc_reserved4; - }; - -struct shm_info - { - int used_ids; - __syscall_ulong_t shm_tot; /* total allocated shm */ - __syscall_ulong_t shm_rss; /* total resident shm */ - __syscall_ulong_t shm_swp; /* total swapped shm */ - __syscall_ulong_t swap_attempts; - __syscall_ulong_t swap_successes; - }; - -#endif /* __USE_MISC */ - -__END_DECLS diff --git a/sysdeps/unix/sysv/linux/x86/bits/sigcontext.h b/sysdeps/unix/sysv/linux/x86/bits/sigcontext.h deleted file mode 100644 index cff595b94a..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/sigcontext.h +++ /dev/null @@ -1,196 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_SIGCONTEXT_H -#define _BITS_SIGCONTEXT_H 1 - -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H -# error "Never use directly; include instead." -#endif - -#include - -#define FP_XSTATE_MAGIC1 0x46505853U -#define FP_XSTATE_MAGIC2 0x46505845U -#define FP_XSTATE_MAGIC2_SIZE sizeof(FP_XSTATE_MAGIC2) - -struct _fpx_sw_bytes -{ - __uint32_t magic1; - __uint32_t extended_size; - __uint64_t xstate_bv; - __uint32_t xstate_size; - __uint32_t __glibc_reserved1[7]; -}; - -struct _fpreg -{ - unsigned short significand[4]; - unsigned short exponent; -}; - -struct _fpxreg -{ - unsigned short significand[4]; - unsigned short exponent; - unsigned short __glibc_reserved1[3]; -}; - -struct _xmmreg -{ - __uint32_t element[4]; -}; - - - -#ifndef __x86_64__ - -struct _fpstate -{ - /* Regular FPU environment. */ - __uint32_t cw; - __uint32_t sw; - __uint32_t tag; - __uint32_t ipoff; - __uint32_t cssel; - __uint32_t dataoff; - __uint32_t datasel; - struct _fpreg _st[8]; - unsigned short status; - unsigned short magic; - - /* FXSR FPU environment. */ - __uint32_t _fxsr_env[6]; - __uint32_t mxcsr; - __uint32_t __glibc_reserved1; - struct _fpxreg _fxsr_st[8]; - struct _xmmreg _xmm[8]; - __uint32_t __glibc_reserved2[56]; -}; - -#ifndef sigcontext_struct -/* Kernel headers before 2.1.1 define a struct sigcontext_struct, but - we need sigcontext. Some packages have come to rely on - sigcontext_struct being defined on 32-bit x86, so define this for - their benefit. */ -# define sigcontext_struct sigcontext -#endif - -#define X86_FXSR_MAGIC 0x0000 - -struct sigcontext -{ - unsigned short gs, __gsh; - unsigned short fs, __fsh; - unsigned short es, __esh; - unsigned short ds, __dsh; - unsigned long edi; - unsigned long esi; - unsigned long ebp; - unsigned long esp; - unsigned long ebx; - unsigned long edx; - unsigned long ecx; - unsigned long eax; - unsigned long trapno; - unsigned long err; - unsigned long eip; - unsigned short cs, __csh; - unsigned long eflags; - unsigned long esp_at_signal; - unsigned short ss, __ssh; - struct _fpstate * fpstate; - unsigned long oldmask; - unsigned long cr2; -}; - -#else /* __x86_64__ */ - -struct _fpstate -{ - /* FPU environment matching the 64-bit FXSAVE layout. */ - __uint16_t cwd; - __uint16_t swd; - __uint16_t ftw; - __uint16_t fop; - __uint64_t rip; - __uint64_t rdp; - __uint32_t mxcsr; - __uint32_t mxcr_mask; - struct _fpxreg _st[8]; - struct _xmmreg _xmm[16]; - __uint32_t __glibc_reserved1[24]; -}; - -struct sigcontext -{ - __uint64_t r8; - __uint64_t r9; - __uint64_t r10; - __uint64_t r11; - __uint64_t r12; - __uint64_t r13; - __uint64_t r14; - __uint64_t r15; - __uint64_t rdi; - __uint64_t rsi; - __uint64_t rbp; - __uint64_t rbx; - __uint64_t rdx; - __uint64_t rax; - __uint64_t rcx; - __uint64_t rsp; - __uint64_t rip; - __uint64_t eflags; - unsigned short cs; - unsigned short gs; - unsigned short fs; - unsigned short __pad0; - __uint64_t err; - __uint64_t trapno; - __uint64_t oldmask; - __uint64_t cr2; - __extension__ union - { - struct _fpstate * fpstate; - __uint64_t __fpstate_word; - }; - __uint64_t __reserved1 [8]; -}; - -#endif /* __x86_64__ */ - -struct _xsave_hdr -{ - __uint64_t xstate_bv; - __uint64_t __glibc_reserved1[2]; - __uint64_t __glibc_reserved2[5]; -}; - -struct _ymmh_state -{ - __uint32_t ymmh_space[64]; -}; - -struct _xstate -{ - struct _fpstate fpstate; - struct _xsave_hdr xstate_hdr; - struct _ymmh_state ymmh; -}; - -#endif /* _BITS_SIGCONTEXT_H */ diff --git a/sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h b/sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h deleted file mode 100644 index 7688a8d66d..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h +++ /dev/null @@ -1,17 +0,0 @@ -/* Architecture-specific adjustments to siginfo_t. x86 version. */ -#ifndef _BITS_SIGINFO_ARCH_H -#define _BITS_SIGINFO_ARCH_H 1 - -#if defined __x86_64__ && __WORDSIZE == 32 -/* si_utime and si_stime must be 4 byte aligned for x32 to match the - kernel. We align siginfo_t to 8 bytes so that si_utime and - si_stime are actually aligned to 8 bytes since their offsets are - multiple of 8 bytes. Note: with some compilers, the alignment - attribute would be ignored if it were put in __SI_CLOCK_T instead - of encapsulated in a typedef. */ -typedef __clock_t __attribute__ ((__aligned__ (4))) __sigchld_clock_t; -# define __SI_ALIGNMENT __attribute__ ((__aligned__ (8))) -# define __SI_CLOCK_T __sigchld_clock_t -#endif - -#endif diff --git a/sysdeps/unix/sysv/linux/x86/bits/stat.h b/sysdeps/unix/sysv/linux/x86/bits/stat.h deleted file mode 100644 index 5a44b40c86..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/stat.h +++ /dev/null @@ -1,210 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined _SYS_STAT_H && !defined _FCNTL_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_STAT_H -#define _BITS_STAT_H 1 - -/* Versions of the `struct stat' data structure. */ -#ifndef __x86_64__ -# define _STAT_VER_LINUX_OLD 1 -# define _STAT_VER_KERNEL 1 -# define _STAT_VER_SVR4 2 -# define _STAT_VER_LINUX 3 - -/* i386 versions of the `xmknod' interface. */ -# define _MKNOD_VER_LINUX 1 -# define _MKNOD_VER_SVR4 2 -# define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */ -#else -# define _STAT_VER_KERNEL 0 -# define _STAT_VER_LINUX 1 - -/* x86-64 versions of the `xmknod' interface. */ -# define _MKNOD_VER_LINUX 0 -#endif - -#define _STAT_VER _STAT_VER_LINUX - -struct stat - { - __dev_t st_dev; /* Device. */ -#ifndef __x86_64__ - unsigned short int __pad1; -#endif -#if defined __x86_64__ || !defined __USE_FILE_OFFSET64 - __ino_t st_ino; /* File serial number. */ -#else - __ino_t __st_ino; /* 32bit file serial number. */ -#endif -#ifndef __x86_64__ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ -#else - __nlink_t st_nlink; /* Link count. */ - __mode_t st_mode; /* File mode. */ -#endif - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ -#ifdef __x86_64__ - int __pad0; -#endif - __dev_t st_rdev; /* Device number, if device. */ -#ifndef __x86_64__ - unsigned short int __pad2; -#endif -#if defined __x86_64__ || !defined __USE_FILE_OFFSET64 - __off_t st_size; /* Size of file, in bytes. */ -#else - __off64_t st_size; /* Size of file, in bytes. */ -#endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ -#if defined __x86_64__ || !defined __USE_FILE_OFFSET64 - __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */ -#else - __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ -#endif -#ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# define st_atime st_atim.tv_sec /* Backward compatibility. */ -# define st_mtime st_mtim.tv_sec -# define st_ctime st_ctim.tv_sec -#else - __time_t st_atime; /* Time of last access. */ - __syscall_ulong_t st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - __syscall_ulong_t st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - __syscall_ulong_t st_ctimensec; /* Nsecs of last status change. */ -#endif -#ifdef __x86_64__ - __syscall_slong_t __glibc_reserved[3]; -#else -# ifndef __USE_FILE_OFFSET64 - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; -# else - __ino64_t st_ino; /* File serial number. */ -# endif -#endif - }; - -#ifdef __USE_LARGEFILE64 -/* Note stat64 has the same shape as stat for x86-64. */ -struct stat64 - { - __dev_t st_dev; /* Device. */ -# ifdef __x86_64__ - __ino64_t st_ino; /* File serial number. */ - __nlink_t st_nlink; /* Link count. */ - __mode_t st_mode; /* File mode. */ -# else - unsigned int __pad1; - __ino_t __st_ino; /* 32bit file serial number. */ - __mode_t st_mode; /* File mode. */ - __nlink_t st_nlink; /* Link count. */ -# endif - __uid_t st_uid; /* User ID of the file's owner. */ - __gid_t st_gid; /* Group ID of the file's group.*/ -# ifdef __x86_64__ - int __pad0; - __dev_t st_rdev; /* Device number, if device. */ - __off_t st_size; /* Size of file, in bytes. */ -# else - __dev_t st_rdev; /* Device number, if device. */ - unsigned int __pad2; - __off64_t st_size; /* Size of file, in bytes. */ -# endif - __blksize_t st_blksize; /* Optimal block size for I/O. */ - __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ -# ifdef __USE_XOPEN2K8 - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - struct timespec st_atim; /* Time of last access. */ - struct timespec st_mtim; /* Time of last modification. */ - struct timespec st_ctim; /* Time of last status change. */ -# else - __time_t st_atime; /* Time of last access. */ - __syscall_ulong_t st_atimensec; /* Nscecs of last access. */ - __time_t st_mtime; /* Time of last modification. */ - __syscall_ulong_t st_mtimensec; /* Nsecs of last modification. */ - __time_t st_ctime; /* Time of last status change. */ - __syscall_ulong_t st_ctimensec; /* Nsecs of last status change. */ -# endif -# ifdef __x86_64__ - __syscall_slong_t __glibc_reserved[3]; -# else - __ino64_t st_ino; /* File serial number. */ -# endif - }; -#endif - -/* Tell code we have these members. */ -#define _STATBUF_ST_BLKSIZE -#define _STATBUF_ST_RDEV -/* Nanosecond resolution time values are supported. */ -#define _STATBUF_ST_NSEC - -/* Encoding of the file mode. */ - -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define __S_IFDIR 0040000 /* Directory. */ -#define __S_IFCHR 0020000 /* Character device. */ -#define __S_IFBLK 0060000 /* Block device. */ -#define __S_IFREG 0100000 /* Regular file. */ -#define __S_IFIFO 0010000 /* FIFO. */ -#define __S_IFLNK 0120000 /* Symbolic link. */ -#define __S_IFSOCK 0140000 /* Socket. */ - -/* POSIX.1b objects. Note that these macros always evaluate to zero. But - they do it by enforcing the correct use of the macros. */ -#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) -#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) - -/* Protection bits. */ - -#define __S_ISUID 04000 /* Set user ID on execution. */ -#define __S_ISGID 02000 /* Set group ID on execution. */ -#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ -#define __S_IREAD 0400 /* Read by owner. */ -#define __S_IWRITE 0200 /* Write by owner. */ -#define __S_IEXEC 0100 /* Execute by owner. */ - -#ifdef __USE_ATFILE -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) -#endif - -#endif /* bits/stat.h */ diff --git a/sysdeps/unix/sysv/linux/x86/bits/sysctl.h b/sysdeps/unix/sysv/linux/x86/bits/sysctl.h deleted file mode 100644 index 399261a2c9..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/sysctl.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if defined __x86_64__ && defined __ILP32__ -# error "sysctl system call is unsupported in x32 kernel" -#endif diff --git a/sysdeps/unix/sysv/linux/x86/bits/typesizes.h b/sysdeps/unix/sysv/linux/x86/bits/typesizes.h deleted file mode 100644 index 73962eb859..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/typesizes.h +++ /dev/null @@ -1,95 +0,0 @@ -/* bits/typesizes.h -- underlying types for *_t. Linux/x86-64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_TYPES_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_TYPESIZES_H -#define _BITS_TYPESIZES_H 1 - -/* See for the meaning of these macros. This file exists so - that need not vary across different GNU platforms. */ - -/* X32 kernel interface is 64-bit. */ -#if defined __x86_64__ && defined __ILP32__ -# define __SYSCALL_SLONG_TYPE __SQUAD_TYPE -# define __SYSCALL_ULONG_TYPE __UQUAD_TYPE -#else -# define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE -# define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE -#endif - -#define __DEV_T_TYPE __UQUAD_TYPE -#define __UID_T_TYPE __U32_TYPE -#define __GID_T_TYPE __U32_TYPE -#define __INO_T_TYPE __SYSCALL_ULONG_TYPE -#define __INO64_T_TYPE __UQUAD_TYPE -#define __MODE_T_TYPE __U32_TYPE -#ifdef __x86_64__ -# define __NLINK_T_TYPE __SYSCALL_ULONG_TYPE -# define __FSWORD_T_TYPE __SYSCALL_SLONG_TYPE -#else -# define __NLINK_T_TYPE __UWORD_TYPE -# define __FSWORD_T_TYPE __SWORD_TYPE -#endif -#define __OFF_T_TYPE __SYSCALL_SLONG_TYPE -#define __OFF64_T_TYPE __SQUAD_TYPE -#define __PID_T_TYPE __S32_TYPE -#define __RLIM_T_TYPE __SYSCALL_ULONG_TYPE -#define __RLIM64_T_TYPE __UQUAD_TYPE -#define __BLKCNT_T_TYPE __SYSCALL_SLONG_TYPE -#define __BLKCNT64_T_TYPE __SQUAD_TYPE -#define __FSBLKCNT_T_TYPE __SYSCALL_ULONG_TYPE -#define __FSBLKCNT64_T_TYPE __UQUAD_TYPE -#define __FSFILCNT_T_TYPE __SYSCALL_ULONG_TYPE -#define __FSFILCNT64_T_TYPE __UQUAD_TYPE -#define __ID_T_TYPE __U32_TYPE -#define __CLOCK_T_TYPE __SYSCALL_SLONG_TYPE -#define __TIME_T_TYPE __SYSCALL_SLONG_TYPE -#define __USECONDS_T_TYPE __U32_TYPE -#define __SUSECONDS_T_TYPE __SYSCALL_SLONG_TYPE -#define __DADDR_T_TYPE __S32_TYPE -#define __KEY_T_TYPE __S32_TYPE -#define __CLOCKID_T_TYPE __S32_TYPE -#define __TIMER_T_TYPE void * -#define __BLKSIZE_T_TYPE __SYSCALL_SLONG_TYPE -#define __FSID_T_TYPE struct { int __val[2]; } -#define __SSIZE_T_TYPE __SWORD_TYPE -#define __CPU_MASK_TYPE __SYSCALL_ULONG_TYPE - -#ifdef __x86_64__ -/* Tell the libc code that off_t and off64_t are actually the same type - for all ABI purposes, even if possibly expressed as different base types - for C type-checking purposes. */ -# define __OFF_T_MATCHES_OFF64_T 1 - -/* Same for ino_t and ino64_t. */ -# define __INO_T_MATCHES_INO64_T 1 - -/* And for __rlim_t and __rlim64_t. */ -# define __RLIM_T_MATCHES_RLIM64_T 1 -#else -# define __RLIM_T_MATCHES_RLIM64_T 0 -#endif - -/* Number of descriptors that can fit in an `fd_set'. */ -#define __FD_SETSIZE 1024 - - -#endif /* bits/typesizes.h */ diff --git a/sysdeps/unix/sysv/linux/x86/elision-conf.c b/sysdeps/unix/sysv/linux/x86/elision-conf.c deleted file mode 100644 index 673b0005a7..0000000000 --- a/sysdeps/unix/sysv/linux/x86/elision-conf.c +++ /dev/null @@ -1,78 +0,0 @@ -/* elision-conf.c: Lock elision tunable parameters. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "config.h" -#include -#include -#include -#include - -/* Reasonable initial tuning values, may be revised in the future. - This is a conservative initial value. */ - -struct elision_config __elision_aconf = - { - /* How often to not attempt to use elision if a transaction aborted - because the lock is already acquired. Expressed in number of lock - acquisition attempts. */ - .skip_lock_busy = 3, - /* How often to not attempt to use elision if a transaction aborted due - to reasons other than other threads' memory accesses. Expressed in - number of lock acquisition attempts. */ - .skip_lock_internal_abort = 3, - /* How often we retry using elision if there is chance for the transaction - to finish execution (e.g., it wasn't aborted due to the lock being - already acquired. */ - .retry_try_xbegin = 3, - /* Same as SKIP_LOCK_INTERNAL_ABORT but for trylock. */ - .skip_trylock_internal_abort = 3, - }; - -/* Force elision for all new locks. This is used to decide whether existing - DEFAULT locks should be automatically upgraded to elision in - pthread_mutex_lock(). Disabled for suid programs. Only used when elision - is available. */ - -int __pthread_force_elision attribute_hidden; - -/* Initialize elison. */ - -static void -elision_init (int argc __attribute__ ((unused)), - char **argv __attribute__ ((unused)), - char **environ) -{ - int elision_available = HAS_CPU_FEATURE (RTM); -#ifdef ENABLE_LOCK_ELISION - __pthread_force_elision = __libc_enable_secure ? 0 : elision_available; -#endif - if (!elision_available) - __elision_aconf.retry_try_xbegin = 0; /* Disable elision on rwlocks */ -} - -#ifdef SHARED -# define INIT_SECTION ".init_array" -#else -# define INIT_SECTION ".preinit_array" -#endif - -void (*const __pthread_init_array []) (int, char **, char **) - __attribute__ ((section (INIT_SECTION), aligned (sizeof (void *)))) = -{ - &elision_init -}; diff --git a/sysdeps/unix/sysv/linux/x86/elision-conf.h b/sysdeps/unix/sysv/linux/x86/elision-conf.h deleted file mode 100644 index f187d72d40..0000000000 --- a/sysdeps/unix/sysv/linux/x86/elision-conf.h +++ /dev/null @@ -1,41 +0,0 @@ -/* elision-conf.h: Lock elision tunable parameters. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ -#ifndef _ELISION_CONF_H -#define _ELISION_CONF_H 1 - -#include -#include - -/* Should make sure there is no false sharing on this. */ - -struct elision_config -{ - int skip_lock_busy; - int skip_lock_internal_abort; - int retry_try_xbegin; - int skip_trylock_internal_abort; -}; - -extern struct elision_config __elision_aconf attribute_hidden; - -extern int __pthread_force_elision attribute_hidden; - -/* Tell the test suite to test elision for this architecture. */ -#define HAVE_ELISION 1 - -#endif diff --git a/sysdeps/unix/sysv/linux/x86/elision-lock.c b/sysdeps/unix/sysv/linux/x86/elision-lock.c deleted file mode 100644 index f5ff111dd3..0000000000 --- a/sysdeps/unix/sysv/linux/x86/elision-lock.c +++ /dev/null @@ -1,107 +0,0 @@ -/* elision-lock.c: Elided pthread mutex lock. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "pthreadP.h" -#include "lowlevellock.h" -#include "hle.h" -#include - -#if !defined(LLL_LOCK) && !defined(EXTRAARG) -/* Make sure the configuration code is always linked in for static - libraries. */ -#include "elision-conf.c" -#endif - -#ifndef EXTRAARG -#define EXTRAARG -#endif -#ifndef LLL_LOCK -#define LLL_LOCK(a,b) lll_lock(a,b), 0 -#endif - -#define aconf __elision_aconf - -/* Adaptive lock using transactions. - By default the lock region is run as a transaction, and when it - aborts or the lock is busy the lock adapts itself. */ - -int -__lll_lock_elision (int *futex, short *adapt_count, EXTRAARG int private) -{ - /* adapt_count can be accessed concurrently; these accesses can be both - inside of transactions (if critical sections are nested and the outer - critical section uses lock elision) and outside of transactions. Thus, - we need to use atomic accesses to avoid data races. However, the - value of adapt_count is just a hint, so relaxed MO accesses are - sufficient. */ - if (atomic_load_relaxed (adapt_count) <= 0) - { - unsigned status; - int try_xbegin; - - for (try_xbegin = aconf.retry_try_xbegin; - try_xbegin > 0; - try_xbegin--) - { - if ((status = _xbegin()) == _XBEGIN_STARTED) - { - if (*futex == 0) - return 0; - - /* Lock was busy. Fall back to normal locking. - Could also _xend here but xabort with 0xff code - is more visible in the profiler. */ - _xabort (_ABORT_LOCK_BUSY); - } - - if (!(status & _XABORT_RETRY)) - { - if ((status & _XABORT_EXPLICIT) - && _XABORT_CODE (status) == _ABORT_LOCK_BUSY) - { - /* Right now we skip here. Better would be to wait a bit - and retry. This likely needs some spinning. See - above for why relaxed MO is sufficient. */ - if (atomic_load_relaxed (adapt_count) - != aconf.skip_lock_busy) - atomic_store_relaxed (adapt_count, aconf.skip_lock_busy); - } - /* Internal abort. There is no chance for retry. - Use the normal locking and next time use lock. - Be careful to avoid writing to the lock. See above for why - relaxed MO is sufficient. */ - else if (atomic_load_relaxed (adapt_count) - != aconf.skip_lock_internal_abort) - atomic_store_relaxed (adapt_count, - aconf.skip_lock_internal_abort); - break; - } - } - } - else - { - /* Use a normal lock until the threshold counter runs out. - Lost updates possible. */ - atomic_store_relaxed (adapt_count, - atomic_load_relaxed (adapt_count) - 1); - } - - /* Use a normal lock here. */ - return LLL_LOCK ((*futex), private); -} diff --git a/sysdeps/unix/sysv/linux/x86/elision-timed.c b/sysdeps/unix/sysv/linux/x86/elision-timed.c deleted file mode 100644 index 47b81c08c8..0000000000 --- a/sysdeps/unix/sysv/linux/x86/elision-timed.c +++ /dev/null @@ -1,26 +0,0 @@ -/* elision-timed.c: Lock elision timed lock. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "lowlevellock.h" -#define __lll_lock_elision __lll_timedlock_elision -#define EXTRAARG const struct timespec *t, -#undef LLL_LOCK -#define LLL_LOCK(a, b) lll_timedlock(a, t, b) -#include "elision-lock.c" diff --git a/sysdeps/unix/sysv/linux/x86/elision-trylock.c b/sysdeps/unix/sysv/linux/x86/elision-trylock.c deleted file mode 100644 index c19293bf7a..0000000000 --- a/sysdeps/unix/sysv/linux/x86/elision-trylock.c +++ /dev/null @@ -1,75 +0,0 @@ -/* elision-trylock.c: Lock eliding trylock for pthreads. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "hle.h" -#include - -#define aconf __elision_aconf - -/* Try to elide a futex trylock. FUTEX is the futex variable. ADAPT_COUNT is - the adaptation counter in the mutex. */ - -int -__lll_trylock_elision (int *futex, short *adapt_count) -{ - /* Implement POSIX semantics by forbiding nesting - trylock. Sorry. After the abort the code is re-executed - non transactional and if the lock was already locked - return an error. */ - _xabort (_ABORT_NESTED_TRYLOCK); - - /* Only try a transaction if it's worth it. See __lll_lock_elision for - why we need atomic accesses. Relaxed MO is sufficient because this is - just a hint. */ - if (atomic_load_relaxed (adapt_count) <= 0) - { - unsigned status; - - if ((status = _xbegin()) == _XBEGIN_STARTED) - { - if (*futex == 0) - return 0; - - /* Lock was busy. Fall back to normal locking. - Could also _xend here but xabort with 0xff code - is more visible in the profiler. */ - _xabort (_ABORT_LOCK_BUSY); - } - - if (!(status & _XABORT_RETRY)) - { - /* Internal abort. No chance for retry. For future - locks don't try speculation for some time. See above for MO. */ - if (atomic_load_relaxed (adapt_count) - != aconf.skip_lock_internal_abort) - atomic_store_relaxed (adapt_count, aconf.skip_lock_internal_abort); - } - /* Could do some retries here. */ - } - else - { - /* Lost updates are possible but harmless (see above). */ - atomic_store_relaxed (adapt_count, - atomic_load_relaxed (adapt_count) - 1); - } - - return lll_trylock (*futex); -} diff --git a/sysdeps/unix/sysv/linux/x86/elision-unlock.c b/sysdeps/unix/sysv/linux/x86/elision-unlock.c deleted file mode 100644 index a3d07cbf21..0000000000 --- a/sysdeps/unix/sysv/linux/x86/elision-unlock.c +++ /dev/null @@ -1,33 +0,0 @@ -/* elision-unlock.c: Commit an elided pthread lock. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "pthreadP.h" -#include "lowlevellock.h" -#include "hle.h" - -int -__lll_unlock_elision(int *lock, int private) -{ - /* When the lock was free we're in a transaction. - When you crash here you unlocked a free lock. */ - if (*lock == 0) - _xend(); - else - lll_unlock ((*lock), private); - return 0; -} diff --git a/sysdeps/unix/sysv/linux/x86/force-elision.h b/sysdeps/unix/sysv/linux/x86/force-elision.h deleted file mode 100644 index 2e93a0699a..0000000000 --- a/sysdeps/unix/sysv/linux/x86/force-elision.h +++ /dev/null @@ -1,26 +0,0 @@ -/* force-elision.h: Automatic enabling of elision for mutexes - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Automatically enable elision for existing user lock kinds. */ -#define FORCE_ELISION(m, s) \ - if (__pthread_force_elision \ - && (m->__data.__kind & PTHREAD_MUTEX_ELISION_FLAGS_NP) == 0) \ - { \ - mutex->__data.__kind |= PTHREAD_MUTEX_ELISION_NP; \ - s; \ - } diff --git a/sysdeps/unix/sysv/linux/x86/gettimeofday.c b/sysdeps/unix/sysv/linux/x86/gettimeofday.c deleted file mode 100644 index fee2fd2da3..0000000000 --- a/sysdeps/unix/sysv/linux/x86/gettimeofday.c +++ /dev/null @@ -1,61 +0,0 @@ -/* gettimeofday - get the time. Linux/x86 version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef SHARED - -# include -# include - -static int -__gettimeofday_syscall (struct timeval *tv, struct timezone *tz) -{ - return INLINE_SYSCALL (gettimeofday, 2, tv, tz); -} - -# ifndef __gettimeofday_type -/* The i386 gettimeofday.c includes this file with a defined - __gettimeofday_type macro. For x86_64 we have to define it to __gettimeofday - as the internal symbol is the ifunc'ed one. */ -# define __gettimeofday_type __gettimeofday -# endif - -# undef INIT_ARCH -# define INIT_ARCH() PREPARE_VERSION_KNOWN (linux26, LINUX_2_6) -/* If the vDSO is not available we fall back to syscall. */ -libc_ifunc_hidden (__gettimeofday_type, __gettimeofday, - (_dl_vdso_vsym ("__vdso_gettimeofday", &linux26) - ?: &__gettimeofday_syscall)) -libc_hidden_def (__gettimeofday) - -#else - -# include -# include - -int -__gettimeofday (struct timeval *tv, struct timezone *tz) -{ - return INLINE_SYSCALL (gettimeofday, 2, tv, tz); -} -libc_hidden_def (__gettimeofday) - -#endif -weak_alias (__gettimeofday, gettimeofday) -libc_hidden_weak (gettimeofday) diff --git a/sysdeps/unix/sysv/linux/x86/hle.h b/sysdeps/unix/sysv/linux/x86/hle.h deleted file mode 100644 index 4a7b9e3bf7..0000000000 --- a/sysdeps/unix/sysv/linux/x86/hle.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Shared RTM header. Emulate TSX intrinsics for compilers and assemblers - that do not support the intrinsics and instructions yet. */ -#ifndef _HLE_H -#define _HLE_H 1 - -#ifdef __ASSEMBLER__ - -.macro XBEGIN target - .byte 0xc7,0xf8 - .long \target-1f -1: -.endm - -.macro XEND - .byte 0x0f,0x01,0xd5 -.endm - -.macro XABORT code - .byte 0xc6,0xf8,\code -.endm - -.macro XTEST - .byte 0x0f,0x01,0xd6 -.endm - -#endif - -/* Official RTM intrinsics interface matching gcc/icc, but works - on older gcc compatible compilers and binutils. - We should somehow detect if the compiler supports it, because - it may be able to generate slightly better code. */ - -#define _XBEGIN_STARTED (~0u) -#define _XABORT_EXPLICIT (1 << 0) -#define _XABORT_RETRY (1 << 1) -#define _XABORT_CONFLICT (1 << 2) -#define _XABORT_CAPACITY (1 << 3) -#define _XABORT_DEBUG (1 << 4) -#define _XABORT_NESTED (1 << 5) -#define _XABORT_CODE(x) (((x) >> 24) & 0xff) - -#define _ABORT_LOCK_BUSY 0xff -#define _ABORT_LOCK_IS_LOCKED 0xfe -#define _ABORT_NESTED_TRYLOCK 0xfd - -#ifndef __ASSEMBLER__ - -#define __force_inline __attribute__((__always_inline__)) inline - -static __force_inline int _xbegin(void) -{ - int ret = _XBEGIN_STARTED; - asm volatile (".byte 0xc7,0xf8 ; .long 0" : "+a" (ret) :: "memory"); - return ret; -} - -static __force_inline void _xend(void) -{ - asm volatile (".byte 0x0f,0x01,0xd5" ::: "memory"); -} - -static __force_inline void _xabort(const unsigned int status) -{ - asm volatile (".byte 0xc6,0xf8,%P0" :: "i" (status) : "memory"); -} - -static __force_inline int _xtest(void) -{ - unsigned char out; - asm volatile (".byte 0x0f,0x01,0xd6 ; setnz %0" : "=r" (out) :: "memory"); - return out; -} - -#endif -#endif diff --git a/sysdeps/unix/sysv/linux/x86/libc-vdso.h b/sysdeps/unix/sysv/linux/x86/libc-vdso.h deleted file mode 100644 index 6cc3285461..0000000000 --- a/sysdeps/unix/sysv/linux/x86/libc-vdso.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Resolve function pointers to VDSO functions. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LIBC_VDSO_H -#define _LIBC_VDSO_H - -#include -#include - -#ifdef SHARED - -# include - -extern long int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *) - attribute_hidden; - -extern long int (*VDSO_SYMBOL(getcpu)) (unsigned *, unsigned *, void *); - -#endif - -#endif /* _LIBC_VDSO_H */ diff --git a/sysdeps/unix/sysv/linux/x86/pthread_mutex_cond_lock.c b/sysdeps/unix/sysv/linux/x86/pthread_mutex_cond_lock.c deleted file mode 100644 index a4e61c38c1..0000000000 --- a/sysdeps/unix/sysv/linux/x86/pthread_mutex_cond_lock.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The cond lock is not actually elided yet, but we still need to handle - already elided locks. */ -#include - -#include diff --git a/sysdeps/unix/sysv/linux/x86/pthread_mutex_lock.c b/sysdeps/unix/sysv/linux/x86/pthread_mutex_lock.c deleted file mode 100644 index 8a40c86502..0000000000 --- a/sysdeps/unix/sysv/linux/x86/pthread_mutex_lock.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Elided version of pthread_mutex_lock. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "force-elision.h" - -#include "nptl/pthread_mutex_lock.c" diff --git a/sysdeps/unix/sysv/linux/x86/pthread_mutex_timedlock.c b/sysdeps/unix/sysv/linux/x86/pthread_mutex_timedlock.c deleted file mode 100644 index 33fe1b46de..0000000000 --- a/sysdeps/unix/sysv/linux/x86/pthread_mutex_timedlock.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Elided version of pthread_mutex_timedlock. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "force-elision.h" - -#include "nptl/pthread_mutex_timedlock.c" diff --git a/sysdeps/unix/sysv/linux/x86/pthread_mutex_trylock.c b/sysdeps/unix/sysv/linux/x86/pthread_mutex_trylock.c deleted file mode 100644 index 435839a292..0000000000 --- a/sysdeps/unix/sysv/linux/x86/pthread_mutex_trylock.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Elided version of pthread_mutex_trylock. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "force-elision.h" - -#include "nptl/pthread_mutex_trylock.c" diff --git a/sysdeps/unix/sysv/linux/x86/sys/debugreg.h b/sysdeps/unix/sysv/linux/x86/sys/debugreg.h deleted file mode 100644 index eaa79a882b..0000000000 --- a/sysdeps/unix/sysv/linux/x86/sys/debugreg.h +++ /dev/null @@ -1,88 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_DEBUGREG_H -#define _SYS_DEBUGREG_H 1 - -/* Indicate the register numbers for a number of the specific - debug registers. Registers 0-3 contain the addresses we wish to trap on */ -#define DR_FIRSTADDR 0 /* u_debugreg[DR_FIRSTADDR] */ -#define DR_LASTADDR 3 /* u_debugreg[DR_LASTADDR] */ - -#define DR_STATUS 6 /* u_debugreg[DR_STATUS] */ -#define DR_CONTROL 7 /* u_debugreg[DR_CONTROL] */ - -/* Define a few things for the status register. We can use this to determine - which debugging register was responsible for the trap. The other bits - are either reserved or not of interest to us. */ - -#define DR_TRAP0 (0x1) /* db0 */ -#define DR_TRAP1 (0x2) /* db1 */ -#define DR_TRAP2 (0x4) /* db2 */ -#define DR_TRAP3 (0x8) /* db3 */ - -#define DR_STEP (0x4000) /* single-step */ -#define DR_SWITCH (0x8000) /* task switch */ - -/* Now define a bunch of things for manipulating the control register. - The top two bytes of the control register consist of 4 fields of 4 - bits - each field corresponds to one of the four debug registers, - and indicates what types of access we trap on, and how large the data - field is that we are looking at */ - -#define DR_CONTROL_SHIFT 16 /* Skip this many bits in ctl register */ -#define DR_CONTROL_SIZE 4 /* 4 control bits per register */ - -#define DR_RW_EXECUTE (0x0) /* Settings for the access types to trap on */ -#define DR_RW_WRITE (0x1) -#define DR_RW_READ (0x3) - -#define DR_LEN_1 (0x0) /* Settings for data length to trap on */ -#define DR_LEN_2 (0x4) -#define DR_LEN_4 (0xC) -#ifdef __x86_64__ -# define DR_LEN_8 (0x8) -#endif - -/* The low byte to the control register determine which registers are - enabled. There are 4 fields of two bits. One bit is "local", meaning - that the processor will reset the bit after a task switch and the other - is global meaning that we have to explicitly reset the bit. With linux, - you can use either one, since we explicitly zero the register when we enter - kernel mode. */ - -#define DR_LOCAL_ENABLE_SHIFT 0 /* Extra shift to the local enable bit */ -#define DR_GLOBAL_ENABLE_SHIFT 1 /* Extra shift to the global enable bit */ -#define DR_ENABLE_SIZE 2 /* 2 enable bits per register */ - -#define DR_LOCAL_ENABLE_MASK (0x55) /* Set local bits for all 4 regs */ -#define DR_GLOBAL_ENABLE_MASK (0xAA) /* Set global bits for all 4 regs */ - -/* The second byte to the control register has a few special - things. */ - - - -#ifdef __x86_64__ -# define DR_CONTROL_RESERVED (0xFFFFFFFF0000FC00ULL) /* Reserved */ -#else -# define DR_CONTROL_RESERVED (0x00FC00U) /* Reserved */ -#endif -#define DR_LOCAL_SLOWDOWN (0x100) /* Local slow the pipeline */ -#define DR_GLOBAL_SLOWDOWN (0x200) /* Global slow the pipeline */ - -#endif /* sys/debugreg.h */ diff --git a/sysdeps/unix/sysv/linux/x86/sys/elf.h b/sysdeps/unix/sysv/linux/x86/sys/elf.h deleted file mode 100644 index 9b58e1a540..0000000000 --- a/sysdeps/unix/sysv/linux/x86/sys/elf.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_ELF_H -#define _SYS_ELF_H 1 - -#ifdef __x86_64__ -# error This header is unsupported on x86-64. -#else -# warning "This header is obsolete; use instead." - -# include -#endif - -#endif /* _SYS_ELF_H */ diff --git a/sysdeps/unix/sysv/linux/x86/sys/io.h b/sysdeps/unix/sysv/linux/x86/sys/io.h deleted file mode 100644 index 3041a59c1a..0000000000 --- a/sysdeps/unix/sysv/linux/x86/sys/io.h +++ /dev/null @@ -1,183 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_IO_H -#define _SYS_IO_H 1 - -#include - -__BEGIN_DECLS - -/* If TURN_ON is TRUE, request for permission to do direct i/o on the - port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O - permission off for that range. This call requires root privileges. - - Portability note: not all Linux platforms support this call. Most - platforms based on the PC I/O architecture probably will, however. - E.g., Linux/Alpha for Alpha PCs supports this. */ -extern int ioperm (unsigned long int __from, unsigned long int __num, - int __turn_on) __THROW; - -/* Set the I/O privilege level to LEVEL. If LEVEL>3, permission to - access any I/O port is granted. This call requires root - privileges. */ -extern int iopl (int __level) __THROW; - -#if defined __GNUC__ && __GNUC__ >= 2 - -static __inline unsigned char -inb (unsigned short int __port) -{ - unsigned char _v; - - __asm__ __volatile__ ("inb %w1,%0":"=a" (_v):"Nd" (__port)); - return _v; -} - -static __inline unsigned char -inb_p (unsigned short int __port) -{ - unsigned char _v; - - __asm__ __volatile__ ("inb %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (__port)); - return _v; -} - -static __inline unsigned short int -inw (unsigned short int __port) -{ - unsigned short _v; - - __asm__ __volatile__ ("inw %w1,%0":"=a" (_v):"Nd" (__port)); - return _v; -} - -static __inline unsigned short int -inw_p (unsigned short int __port) -{ - unsigned short int _v; - - __asm__ __volatile__ ("inw %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (__port)); - return _v; -} - -static __inline unsigned int -inl (unsigned short int __port) -{ - unsigned int _v; - - __asm__ __volatile__ ("inl %w1,%0":"=a" (_v):"Nd" (__port)); - return _v; -} - -static __inline unsigned int -inl_p (unsigned short int __port) -{ - unsigned int _v; - __asm__ __volatile__ ("inl %w1,%0\noutb %%al,$0x80":"=a" (_v):"Nd" (__port)); - return _v; -} - -static __inline void -outb (unsigned char __value, unsigned short int __port) -{ - __asm__ __volatile__ ("outb %b0,%w1": :"a" (__value), "Nd" (__port)); -} - -static __inline void -outb_p (unsigned char __value, unsigned short int __port) -{ - __asm__ __volatile__ ("outb %b0,%w1\noutb %%al,$0x80": :"a" (__value), - "Nd" (__port)); -} - -static __inline void -outw (unsigned short int __value, unsigned short int __port) -{ - __asm__ __volatile__ ("outw %w0,%w1": :"a" (__value), "Nd" (__port)); - -} - -static __inline void -outw_p (unsigned short int __value, unsigned short int __port) -{ - __asm__ __volatile__ ("outw %w0,%w1\noutb %%al,$0x80": :"a" (__value), - "Nd" (__port)); -} - -static __inline void -outl (unsigned int __value, unsigned short int __port) -{ - __asm__ __volatile__ ("outl %0,%w1": :"a" (__value), "Nd" (__port)); -} - -static __inline void -outl_p (unsigned int __value, unsigned short int __port) -{ - __asm__ __volatile__ ("outl %0,%w1\noutb %%al,$0x80": :"a" (__value), - "Nd" (__port)); -} - -static __inline void -insb (unsigned short int __port, void *__addr, unsigned long int __count) -{ - __asm__ __volatile__ ("cld ; rep ; insb":"=D" (__addr), "=c" (__count) - :"d" (__port), "0" (__addr), "1" (__count)); -} - -static __inline void -insw (unsigned short int __port, void *__addr, unsigned long int __count) -{ - __asm__ __volatile__ ("cld ; rep ; insw":"=D" (__addr), "=c" (__count) - :"d" (__port), "0" (__addr), "1" (__count)); -} - -static __inline void -insl (unsigned short int __port, void *__addr, unsigned long int __count) -{ - __asm__ __volatile__ ("cld ; rep ; insl":"=D" (__addr), "=c" (__count) - :"d" (__port), "0" (__addr), "1" (__count)); -} - -static __inline void -outsb (unsigned short int __port, const void *__addr, - unsigned long int __count) -{ - __asm__ __volatile__ ("cld ; rep ; outsb":"=S" (__addr), "=c" (__count) - :"d" (__port), "0" (__addr), "1" (__count)); -} - -static __inline void -outsw (unsigned short int __port, const void *__addr, - unsigned long int __count) -{ - __asm__ __volatile__ ("cld ; rep ; outsw":"=S" (__addr), "=c" (__count) - :"d" (__port), "0" (__addr), "1" (__count)); -} - -static __inline void -outsl (unsigned short int __port, const void *__addr, - unsigned long int __count) -{ - __asm__ __volatile__ ("cld ; rep ; outsl":"=S" (__addr), "=c" (__count) - :"d" (__port), "0" (__addr), "1" (__count)); -} - -#endif /* GNU C */ - -__END_DECLS -#endif /* _SYS_IO_H */ diff --git a/sysdeps/unix/sysv/linux/x86/sys/perm.h b/sysdeps/unix/sysv/linux/x86/sys/perm.h deleted file mode 100644 index a6e0c0c5a3..0000000000 --- a/sysdeps/unix/sysv/linux/x86/sys/perm.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PERM_H - -#define _SYS_PERM_H 1 -#include - -__BEGIN_DECLS - -/* Set port input/output permissions. */ -extern int ioperm (unsigned long int __from, unsigned long int __num, - int __turn_on) __THROW; - - -/* Change I/O privilege level. */ -extern int iopl (int __level) __THROW; - -__END_DECLS - -#endif /* _SYS_PERM_H */ diff --git a/sysdeps/unix/sysv/linux/x86/sys/procfs.h b/sysdeps/unix/sysv/linux/x86/sys/procfs.h deleted file mode 100644 index 577c3de655..0000000000 --- a/sysdeps/unix/sysv/linux/x86/sys/procfs.h +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somewhat modelled after the file of the same name on SVR4 - systems. It provides a definition of the core file format for ELF - used on Linux. It doesn't have anything to do with the /proc file - system, even though Linux has one. - - Anyway, the whole purpose of this file is for GDB and GDB only. - Don't read too much into it. Don't use it for anything other than - GDB unless you know what you are doing. */ - -#include -#include -#include -#include - -__BEGIN_DECLS - -/* Type for a general-purpose register. */ -#ifdef __x86_64__ -__extension__ typedef unsigned long long elf_greg_t; -#else -typedef unsigned long elf_greg_t; -#endif - -/* And the whole bunch of them. We could have used `struct - user_regs_struct' directly in the typedef, but tradition says that - the register set is an array, which does have some peculiar - semantics, so leave it that way. */ -#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t)) -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -#ifndef __x86_64__ -/* Register set for the floating-point registers. */ -typedef struct user_fpregs_struct elf_fpregset_t; - -/* Register set for the extended floating-point registers. Includes - the Pentium III SSE registers in addition to the classic - floating-point stuff. */ -typedef struct user_fpxregs_struct elf_fpxregset_t; -#else -/* Register set for the extended floating-point registers. Includes - the Pentium III SSE registers in addition to the classic - floating-point stuff. */ -typedef struct user_fpregs_struct elf_fpregset_t; -#endif - -/* Signal info. */ -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with Linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - GDB doesn't really use excluded. */ - -struct elf_prstatus - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args. */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ -#if __WORDSIZE == 32 - unsigned short int pr_uid; - unsigned short int pr_gid; -#else - unsigned int pr_uid; - unsigned int pr_gid; -#endif - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - - -/* The rest of this file provides the types for emulation of the - Solaris interfaces that should be implemented by - users of libthread_db. */ - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore have only one PID type. */ -typedef __pid_t lwpid_t; - -/* Process status and info. In the end we do provide typedefs for them. */ -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/x86/sys/reg.h b/sysdeps/unix/sysv/linux/x86/sys/reg.h deleted file mode 100644 index ceca1334e3..0000000000 --- a/sysdeps/unix/sysv/linux/x86/sys/reg.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_REG_H -#define _SYS_REG_H 1 - - -#ifdef __x86_64__ -/* Index into an array of 8 byte longs returned from ptrace for - location of the users' stored general purpose registers. */ - -# define R15 0 -# define R14 1 -# define R13 2 -# define R12 3 -# define RBP 4 -# define RBX 5 -# define R11 6 -# define R10 7 -# define R9 8 -# define R8 9 -# define RAX 10 -# define RCX 11 -# define RDX 12 -# define RSI 13 -# define RDI 14 -# define ORIG_RAX 15 -# define RIP 16 -# define CS 17 -# define EFLAGS 18 -# define RSP 19 -# define SS 20 -# define FS_BASE 21 -# define GS_BASE 22 -# define DS 23 -# define ES 24 -# define FS 25 -# define GS 26 -#else - -/* Index into an array of 4 byte integers returned from ptrace for - * location of the users' stored general purpose registers. */ - -# define EBX 0 -# define ECX 1 -# define EDX 2 -# define ESI 3 -# define EDI 4 -# define EBP 5 -# define EAX 6 -# define DS 7 -# define ES 8 -# define FS 9 -# define GS 10 -# define ORIG_EAX 11 -# define EIP 12 -# define CS 13 -# define EFL 14 -# define UESP 15 -# define SS 16 -#endif - -#endif diff --git a/sysdeps/unix/sysv/linux/x86/sys/ucontext.h b/sysdeps/unix/sysv/linux/x86/sys/ucontext.h deleted file mode 100644 index 5fd64bf801..0000000000 --- a/sysdeps/unix/sysv/linux/x86/sys/ucontext.h +++ /dev/null @@ -1,260 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include - -#include -#include -#include - - -#ifdef __USE_MISC -# define __ctx(fld) fld -#else -# define __ctx(fld) __ ## fld -#endif - -#ifdef __x86_64__ - -/* Type for general register. */ -__extension__ typedef long long int greg_t; - -/* Number of general registers. */ -#define __NGREG 23 -#ifdef __USE_MISC -# define NGREG __NGREG -#endif - -/* Container for all general registers. */ -typedef greg_t gregset_t[__NGREG]; - -#ifdef __USE_GNU -/* Number of each register in the `gregset_t' array. */ -enum -{ - REG_R8 = 0, -# define REG_R8 REG_R8 - REG_R9, -# define REG_R9 REG_R9 - REG_R10, -# define REG_R10 REG_R10 - REG_R11, -# define REG_R11 REG_R11 - REG_R12, -# define REG_R12 REG_R12 - REG_R13, -# define REG_R13 REG_R13 - REG_R14, -# define REG_R14 REG_R14 - REG_R15, -# define REG_R15 REG_R15 - REG_RDI, -# define REG_RDI REG_RDI - REG_RSI, -# define REG_RSI REG_RSI - REG_RBP, -# define REG_RBP REG_RBP - REG_RBX, -# define REG_RBX REG_RBX - REG_RDX, -# define REG_RDX REG_RDX - REG_RAX, -# define REG_RAX REG_RAX - REG_RCX, -# define REG_RCX REG_RCX - REG_RSP, -# define REG_RSP REG_RSP - REG_RIP, -# define REG_RIP REG_RIP - REG_EFL, -# define REG_EFL REG_EFL - REG_CSGSFS, /* Actually short cs, gs, fs, __pad0. */ -# define REG_CSGSFS REG_CSGSFS - REG_ERR, -# define REG_ERR REG_ERR - REG_TRAPNO, -# define REG_TRAPNO REG_TRAPNO - REG_OLDMASK, -# define REG_OLDMASK REG_OLDMASK - REG_CR2 -# define REG_CR2 REG_CR2 -}; -#endif - -struct _libc_fpxreg -{ - unsigned short int __ctx(significand)[4]; - unsigned short int __ctx(exponent); - unsigned short int __glibc_reserved1[3]; -}; - -struct _libc_xmmreg -{ - __uint32_t element[4]; -}; - -struct _libc_fpstate -{ - /* 64-bit FXSAVE format. */ - __uint16_t __ctx(cwd); - __uint16_t __ctx(swd); - __uint16_t __ctx(ftw); - __uint16_t __ctx(fop); - __uint64_t __ctx(rip); - __uint64_t __ctx(rdp); - __uint32_t __ctx(mxcsr); - __uint32_t __ctx(mxcr_mask); - struct _libc_fpxreg _st[8]; - struct _libc_xmmreg _xmm[16]; - __uint32_t __glibc_reserved1[24]; -}; - -/* Structure to describe FPU registers. */ -typedef struct _libc_fpstate *fpregset_t; - -/* Context to describe whole processor state. */ -typedef struct - { - gregset_t __ctx(gregs); - /* Note that fpregs is a pointer. */ - fpregset_t __ctx(fpregs); - __extension__ unsigned long long __reserved1 [8]; -} mcontext_t; - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - sigset_t uc_sigmask; - struct _libc_fpstate __fpregs_mem; - } ucontext_t; - -#else /* !__x86_64__ */ - -/* Type for general register. */ -typedef int greg_t; - -/* Number of general registers. */ -#define __NGREG 19 -#ifdef __USE_MISC -# define NGREG __NGREG -#endif - -/* Container for all general registers. */ -typedef greg_t gregset_t[__NGREG]; - -#ifdef __USE_GNU -/* Number of each register is the `gregset_t' array. */ -enum -{ - REG_GS = 0, -# define REG_GS REG_GS - REG_FS, -# define REG_FS REG_FS - REG_ES, -# define REG_ES REG_ES - REG_DS, -# define REG_DS REG_DS - REG_EDI, -# define REG_EDI REG_EDI - REG_ESI, -# define REG_ESI REG_ESI - REG_EBP, -# define REG_EBP REG_EBP - REG_ESP, -# define REG_ESP REG_ESP - REG_EBX, -# define REG_EBX REG_EBX - REG_EDX, -# define REG_EDX REG_EDX - REG_ECX, -# define REG_ECX REG_ECX - REG_EAX, -# define REG_EAX REG_EAX - REG_TRAPNO, -# define REG_TRAPNO REG_TRAPNO - REG_ERR, -# define REG_ERR REG_ERR - REG_EIP, -# define REG_EIP REG_EIP - REG_CS, -# define REG_CS REG_CS - REG_EFL, -# define REG_EFL REG_EFL - REG_UESP, -# define REG_UESP REG_UESP - REG_SS -# define REG_SS REG_SS -}; -#endif - -/* Definitions taken from the kernel headers. */ -struct _libc_fpreg -{ - unsigned short int __ctx(significand)[4]; - unsigned short int __ctx(exponent); -}; - -struct _libc_fpstate -{ - unsigned long int __ctx(cw); - unsigned long int __ctx(sw); - unsigned long int __ctx(tag); - unsigned long int __ctx(ipoff); - unsigned long int __ctx(cssel); - unsigned long int __ctx(dataoff); - unsigned long int __ctx(datasel); - struct _libc_fpreg _st[8]; - unsigned long int __ctx(status); -}; - -/* Structure to describe FPU registers. */ -typedef struct _libc_fpstate *fpregset_t; - -/* Context to describe whole processor state. */ -typedef struct - { - gregset_t __ctx(gregs); - /* Due to Linux's history we have to use a pointer here. The SysV/i386 - ABI requires a struct with the values. */ - fpregset_t __ctx(fpregs); - unsigned long int __ctx(oldmask); - unsigned long int __ctx(cr2); - } mcontext_t; - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - sigset_t uc_sigmask; - struct _libc_fpstate __fpregs_mem; - } ucontext_t; - -#endif /* !__x86_64__ */ - -#undef __ctx - -#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/x86/sys/user.h b/sysdeps/unix/sysv/linux/x86/sys/user.h deleted file mode 100644 index b705239e61..0000000000 --- a/sysdeps/unix/sysv/linux/x86/sys/user.h +++ /dev/null @@ -1,180 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_USER_H -#define _SYS_USER_H 1 - -/* The whole purpose of this file is for GDB and GDB only. Don't read - too much into it. Don't use it for anything other than GDB unless - you know what you are doing. */ - -#ifdef __x86_64__ - -struct user_fpregs_struct -{ - unsigned short int cwd; - unsigned short int swd; - unsigned short int ftw; - unsigned short int fop; - __extension__ unsigned long long int rip; - __extension__ unsigned long long int rdp; - unsigned int mxcsr; - unsigned int mxcr_mask; - unsigned int st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ - unsigned int xmm_space[64]; /* 16*16 bytes for each XMM-reg = 256 bytes */ - unsigned int padding[24]; -}; - -struct user_regs_struct -{ - __extension__ unsigned long long int r15; - __extension__ unsigned long long int r14; - __extension__ unsigned long long int r13; - __extension__ unsigned long long int r12; - __extension__ unsigned long long int rbp; - __extension__ unsigned long long int rbx; - __extension__ unsigned long long int r11; - __extension__ unsigned long long int r10; - __extension__ unsigned long long int r9; - __extension__ unsigned long long int r8; - __extension__ unsigned long long int rax; - __extension__ unsigned long long int rcx; - __extension__ unsigned long long int rdx; - __extension__ unsigned long long int rsi; - __extension__ unsigned long long int rdi; - __extension__ unsigned long long int orig_rax; - __extension__ unsigned long long int rip; - __extension__ unsigned long long int cs; - __extension__ unsigned long long int eflags; - __extension__ unsigned long long int rsp; - __extension__ unsigned long long int ss; - __extension__ unsigned long long int fs_base; - __extension__ unsigned long long int gs_base; - __extension__ unsigned long long int ds; - __extension__ unsigned long long int es; - __extension__ unsigned long long int fs; - __extension__ unsigned long long int gs; -}; - -struct user -{ - struct user_regs_struct regs; - int u_fpvalid; - struct user_fpregs_struct i387; - __extension__ unsigned long long int u_tsize; - __extension__ unsigned long long int u_dsize; - __extension__ unsigned long long int u_ssize; - __extension__ unsigned long long int start_code; - __extension__ unsigned long long int start_stack; - __extension__ long long int signal; - int reserved; - __extension__ union - { - struct user_regs_struct* u_ar0; - __extension__ unsigned long long int __u_ar0_word; - }; - __extension__ union - { - struct user_fpregs_struct* u_fpstate; - __extension__ unsigned long long int __u_fpstate_word; - }; - __extension__ unsigned long long int magic; - char u_comm [32]; - __extension__ unsigned long long int u_debugreg [8]; -}; - -#else -/* These are the 32-bit x86 structures. */ -struct user_fpregs_struct -{ - long int cwd; - long int swd; - long int twd; - long int fip; - long int fcs; - long int foo; - long int fos; - long int st_space [20]; -}; - -struct user_fpxregs_struct -{ - unsigned short int cwd; - unsigned short int swd; - unsigned short int twd; - unsigned short int fop; - long int fip; - long int fcs; - long int foo; - long int fos; - long int mxcsr; - long int reserved; - long int st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ - long int xmm_space[32]; /* 8*16 bytes for each XMM-reg = 128 bytes */ - long int padding[56]; -}; - -struct user_regs_struct -{ - long int ebx; - long int ecx; - long int edx; - long int esi; - long int edi; - long int ebp; - long int eax; - long int xds; - long int xes; - long int xfs; - long int xgs; - long int orig_eax; - long int eip; - long int xcs; - long int eflags; - long int esp; - long int xss; -}; - -struct user -{ - struct user_regs_struct regs; - int u_fpvalid; - struct user_fpregs_struct i387; - unsigned long int u_tsize; - unsigned long int u_dsize; - unsigned long int u_ssize; - unsigned long int start_code; - unsigned long int start_stack; - long int signal; - int reserved; - struct user_regs_struct* u_ar0; - struct user_fpregs_struct* u_fpstate; - unsigned long int magic; - char u_comm [32]; - int u_debugreg [8]; -}; -#endif /* __x86_64__ */ - -#define PAGE_SHIFT 12 -#define PAGE_SIZE (1UL << PAGE_SHIFT) -#define PAGE_MASK (~(PAGE_SIZE-1)) -#define NBPG PAGE_SIZE -#define UPAGES 1 -#define HOST_TEXT_START_ADDR (u.start_code) -#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) - -#endif /* _SYS_USER_H */ diff --git a/sysdeps/unix/sysv/linux/x86/sys/vm86.h b/sysdeps/unix/sysv/linux/x86/sys/vm86.h deleted file mode 100644 index 07f09c2030..0000000000 --- a/sysdeps/unix/sysv/linux/x86/sys/vm86.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_VM86_H - -#define _SYS_VM86_H 1 -#include - -#ifdef __x86_64__ -# error This header is unsupported on x86-64. -#else -/* Get constants and data types from kernel header file. */ -# include - -__BEGIN_DECLS - -/* Enter virtual 8086 mode. */ -extern int vm86 (unsigned long int __subfunction, - struct vm86plus_struct *__info) __THROW; - -__END_DECLS -# endif - -#endif /* _SYS_VM86_H */ diff --git a/sysdeps/unix/sysv/linux/x86/sysconf.c b/sysdeps/unix/sysv/linux/x86/sysconf.c deleted file mode 100644 index ec4e620d2a..0000000000 --- a/sysdeps/unix/sysv/linux/x86/sysconf.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Get file-specific information about a file. Linux version. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - -static long int linux_sysconf (int name); -extern long int __cache_sysconf (int) attribute_hidden; - - -/* Get the value of the system variable NAME. */ -long int -__sysconf (int name) -{ - if (name >= _SC_LEVEL1_ICACHE_SIZE && name <= _SC_LEVEL4_CACHE_LINESIZE) - return __cache_sysconf (name); - - return linux_sysconf (name); -} - -/* Now the generic Linux version. */ -#undef __sysconf -#define __sysconf static linux_sysconf -#include "../sysconf.c" diff --git a/sysdeps/unix/sysv/linux/x86/time.c b/sysdeps/unix/sysv/linux/x86/time.c deleted file mode 100644 index fac81b3812..0000000000 --- a/sysdeps/unix/sysv/linux/x86/time.c +++ /dev/null @@ -1,59 +0,0 @@ -/* time -- Get number of seconds since Epoch. Linux/x86 version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef SHARED - -#include -#include - -static time_t -__time_syscall (time_t *t) -{ - INTERNAL_SYSCALL_DECL (err); - return INTERNAL_SYSCALL (time, err, 1, t); -} - -# ifndef time_type -/* The i386 time.c includes this file with a defined time_type macro. - For x86_64 we have to define it to time as the internal symbol is the - ifunc'ed one. */ -# define time_type time -# endif - -#undef INIT_ARCH -#define INIT_ARCH() PREPARE_VERSION_KNOWN (linux26, LINUX_2_6); -/* If the vDSO is not available we fall back on the syscall. */ -libc_ifunc_hidden (time_type, time, - (_dl_vdso_vsym ("__vdso_time", &linux26) - ?: &__time_syscall)) -libc_hidden_def (time) - -#else - -# include - -time_t -time (time_t *t) -{ - INTERNAL_SYSCALL_DECL (err); - return INTERNAL_SYSCALL (time, err, 1, t); -} - -#endif diff --git a/sysdeps/unix/sysv/linux/x86_64/64/Makefile b/sysdeps/unix/sysv/linux/x86_64/64/Makefile deleted file mode 100644 index a7b6dc5a53..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -# The default ABI is 64. -default-abi := 64 diff --git a/sysdeps/unix/sysv/linux/x86_64/64/c++-types.data b/sysdeps/unix/sysv/linux/x86_64/64/c++-types.data deleted file mode 100644 index 23c11dc41b..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:l -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:m -fd_mask:l -fsblkcnt64_t:m -fsblkcnt_t:m -fsfilcnt64_t:m -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:m -ino_t:m -int16_t:s -int32_t:i -int64_t:l -int8_t:a -intptr_t:l -key_t:i -loff_t:l -mode_t:j -nlink_t:m -off64_t:l -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:l -register_t:l -rlim64_t:m -rlim_t:m -sigset_t:10__sigset_t -size_t:m -socklen_t:j -ssize_t:l -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:m -u_int8_t:h -ulong:m -u_long:m -u_quad_t:m -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/x86_64/64/configure b/sysdeps/unix/sysv/linux/x86_64/64/configure deleted file mode 100644 index 9d1a8d271d..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/configure +++ /dev/null @@ -1,15 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/x86_64/64. - -test -n "$libc_cv_slibdir" || -case "$prefix" in -/usr | /usr/) - libc_cv_slibdir=/lib64 - libc_cv_rtlddir=/lib64 - if test "$libdir" = '${exec_prefix}/lib'; then - libdir='${exec_prefix}/lib64'; - # Locale data can be shared between 32-bit and 64-bit libraries. - libc_cv_complocaledir='${exec_prefix}/lib/locale' - fi - ;; -esac diff --git a/sysdeps/unix/sysv/linux/x86_64/64/configure.ac b/sysdeps/unix/sysv/linux/x86_64/64/configure.ac deleted file mode 100644 index 8e863b94ad..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/configure.ac +++ /dev/null @@ -1,4 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/x86_64/64. - -LIBC_SLIBDIR_RTLDDIR([lib64], [lib64]) diff --git a/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h b/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h deleted file mode 100644 index 8d474d0d04..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Optional code to distinguish library flavours. x86-64 version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_LIBRECON_H - -#include - -/* Recognizing extra environment variables. For 64-bit applications, - branch prediction performance may be negatively impacted when the - target of a branch is more than 4GB away from the branch. Add the - Prefer_MAP_32BIT_EXEC bit so that mmap will try to map executable - pages with MAP_32BIT first. NB: MAP_32BIT will map to lower 2GB, - not lower 4GB, address. Prefer_MAP_32BIT_EXEC reduces bits available - for address space layout randomization (ASLR). Prefer_MAP_32BIT_EXEC - is always disabled for SUID programs and can be enabled by setting - environment variable, LD_PREFER_MAP_32BIT_EXEC. */ -#define EXTRA_LD_ENVVARS \ - case 21: \ - if (memcmp (envline, "PREFER_MAP_32BIT_EXEC", 21) == 0) \ - GLRO(dl_x86_cpu_features).feature[index_arch_Prefer_MAP_32BIT_EXEC] \ - |= bit_arch_Prefer_MAP_32BIT_EXEC; \ - break; - -/* Extra unsecure variables. The names are all stuffed in a single - string which means they have to be terminated with a '\0' explicitly. */ -#define EXTRA_UNSECURE_ENVVARS \ - "LD_PREFER_MAP_32BIT_EXEC\0" - -#endif /* dl-librecon.h */ diff --git a/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist b/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist deleted file mode 100644 index 07cab4bd7a..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist +++ /dev/null @@ -1,11 +0,0 @@ -GLIBC_2.2.5 GLIBC_2.2.5 A -GLIBC_2.2.5 __libc_stack_end D 0x8 -GLIBC_2.2.5 _dl_mcount F -GLIBC_2.2.5 _r_debug D 0x28 -GLIBC_2.2.5 calloc F -GLIBC_2.2.5 free F -GLIBC_2.2.5 malloc F -GLIBC_2.2.5 realloc F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __tls_get_addr F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libBrokenLocale.abilist deleted file mode 100644 index 907c72986f..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.2.5 GLIBC_2.2.5 A -GLIBC_2.2.5 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libanl.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libanl.abilist deleted file mode 100644 index a104f7562a..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.2.5 GLIBC_2.2.5 A -GLIBC_2.2.5 gai_cancel F -GLIBC_2.2.5 gai_error F -GLIBC_2.2.5 gai_suspend F -GLIBC_2.2.5 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist deleted file mode 100644 index 513524d932..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist +++ /dev/null @@ -1,2171 +0,0 @@ -GLIBC_2.10 GLIBC_2.10 A -GLIBC_2.10 __cxa_at_quick_exit F -GLIBC_2.10 __posix_getopt F -GLIBC_2.10 accept4 F -GLIBC_2.10 endsgent F -GLIBC_2.10 fallocate F -GLIBC_2.10 fallocate64 F -GLIBC_2.10 fgetsgent F -GLIBC_2.10 fgetsgent_r F -GLIBC_2.10 getsgent F -GLIBC_2.10 getsgent_r F -GLIBC_2.10 getsgnam F -GLIBC_2.10 getsgnam_r F -GLIBC_2.10 malloc_info F -GLIBC_2.10 preadv F -GLIBC_2.10 preadv64 F -GLIBC_2.10 psiginfo F -GLIBC_2.10 putsgent F -GLIBC_2.10 pwritev F -GLIBC_2.10 pwritev64 F -GLIBC_2.10 quick_exit F -GLIBC_2.10 register_printf_modifier F -GLIBC_2.10 register_printf_specifier F -GLIBC_2.10 register_printf_type F -GLIBC_2.10 setsgent F -GLIBC_2.10 sgetsgent F -GLIBC_2.10 sgetsgent_r F -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 __longjmp_chk F -GLIBC_2.11 execvpe F -GLIBC_2.11 mkostemps F -GLIBC_2.11 mkostemps64 F -GLIBC_2.11 mkstemps F -GLIBC_2.11 mkstemps64 F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 _sys_errlist D 0x438 -GLIBC_2.12 _sys_nerr D 0x4 -GLIBC_2.12 ntp_gettimex F -GLIBC_2.12 recvmmsg F -GLIBC_2.12 sys_errlist D 0x438 -GLIBC_2.12 sys_nerr D 0x4 -GLIBC_2.13 GLIBC_2.13 A -GLIBC_2.13 __fentry__ F -GLIBC_2.13 fanotify_init F -GLIBC_2.13 fanotify_mark F -GLIBC_2.13 prlimit F -GLIBC_2.13 prlimit64 F -GLIBC_2.14 GLIBC_2.14 A -GLIBC_2.14 clock_adjtime F -GLIBC_2.14 memcpy F -GLIBC_2.14 name_to_handle_at F -GLIBC_2.14 open_by_handle_at F -GLIBC_2.14 sendmmsg F -GLIBC_2.14 setns F -GLIBC_2.14 syncfs F -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __fdelt_chk F -GLIBC_2.15 __fdelt_warn F -GLIBC_2.15 posix_spawn F -GLIBC_2.15 posix_spawnp F -GLIBC_2.15 process_vm_readv F -GLIBC_2.15 process_vm_writev F -GLIBC_2.15 scandirat F -GLIBC_2.15 scandirat64 F -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __getauxval F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 getauxval F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 timespec_get F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.2.5 GLIBC_2.2.5 A -GLIBC_2.2.5 _Exit F -GLIBC_2.2.5 _IO_2_1_stderr_ D 0xe0 -GLIBC_2.2.5 _IO_2_1_stdin_ D 0xe0 -GLIBC_2.2.5 _IO_2_1_stdout_ D 0xe0 -GLIBC_2.2.5 _IO_adjust_column F -GLIBC_2.2.5 _IO_adjust_wcolumn F -GLIBC_2.2.5 _IO_default_doallocate F -GLIBC_2.2.5 _IO_default_finish F -GLIBC_2.2.5 _IO_default_pbackfail F -GLIBC_2.2.5 _IO_default_uflow F -GLIBC_2.2.5 _IO_default_xsgetn F -GLIBC_2.2.5 _IO_default_xsputn F -GLIBC_2.2.5 _IO_do_write F -GLIBC_2.2.5 _IO_doallocbuf F -GLIBC_2.2.5 _IO_fclose F -GLIBC_2.2.5 _IO_fdopen F -GLIBC_2.2.5 _IO_feof F -GLIBC_2.2.5 _IO_ferror F -GLIBC_2.2.5 _IO_fflush F -GLIBC_2.2.5 _IO_fgetpos F -GLIBC_2.2.5 _IO_fgetpos64 F -GLIBC_2.2.5 _IO_fgets F -GLIBC_2.2.5 _IO_file_attach F -GLIBC_2.2.5 _IO_file_close F -GLIBC_2.2.5 _IO_file_close_it F -GLIBC_2.2.5 _IO_file_doallocate F -GLIBC_2.2.5 _IO_file_finish F -GLIBC_2.2.5 _IO_file_fopen F -GLIBC_2.2.5 _IO_file_init F -GLIBC_2.2.5 _IO_file_jumps D 0xa8 -GLIBC_2.2.5 _IO_file_open F -GLIBC_2.2.5 _IO_file_overflow F -GLIBC_2.2.5 _IO_file_read F -GLIBC_2.2.5 _IO_file_seek F -GLIBC_2.2.5 _IO_file_seekoff F -GLIBC_2.2.5 _IO_file_setbuf F -GLIBC_2.2.5 _IO_file_stat F -GLIBC_2.2.5 _IO_file_sync F -GLIBC_2.2.5 _IO_file_underflow F -GLIBC_2.2.5 _IO_file_write F -GLIBC_2.2.5 _IO_file_xsputn F -GLIBC_2.2.5 _IO_flockfile F -GLIBC_2.2.5 _IO_flush_all F -GLIBC_2.2.5 _IO_flush_all_linebuffered F -GLIBC_2.2.5 _IO_fopen F -GLIBC_2.2.5 _IO_fprintf F -GLIBC_2.2.5 _IO_fputs F -GLIBC_2.2.5 _IO_fread F -GLIBC_2.2.5 _IO_free_backup_area F -GLIBC_2.2.5 _IO_free_wbackup_area F -GLIBC_2.2.5 _IO_fsetpos F -GLIBC_2.2.5 _IO_fsetpos64 F -GLIBC_2.2.5 _IO_ftell F -GLIBC_2.2.5 _IO_ftrylockfile F -GLIBC_2.2.5 _IO_funlockfile F -GLIBC_2.2.5 _IO_fwrite F -GLIBC_2.2.5 _IO_getc F -GLIBC_2.2.5 _IO_getline F -GLIBC_2.2.5 _IO_getline_info F -GLIBC_2.2.5 _IO_gets F -GLIBC_2.2.5 _IO_init F -GLIBC_2.2.5 _IO_init_marker F -GLIBC_2.2.5 _IO_init_wmarker F -GLIBC_2.2.5 _IO_iter_begin F -GLIBC_2.2.5 _IO_iter_end F -GLIBC_2.2.5 _IO_iter_file F -GLIBC_2.2.5 _IO_iter_next F -GLIBC_2.2.5 _IO_least_wmarker F -GLIBC_2.2.5 _IO_link_in F -GLIBC_2.2.5 _IO_list_all D 0x8 -GLIBC_2.2.5 _IO_list_lock F -GLIBC_2.2.5 _IO_list_resetlock F -GLIBC_2.2.5 _IO_list_unlock F -GLIBC_2.2.5 _IO_marker_delta F -GLIBC_2.2.5 _IO_marker_difference F -GLIBC_2.2.5 _IO_padn F -GLIBC_2.2.5 _IO_peekc_locked F -GLIBC_2.2.5 _IO_popen F -GLIBC_2.2.5 _IO_printf F -GLIBC_2.2.5 _IO_proc_close F -GLIBC_2.2.5 _IO_proc_open F -GLIBC_2.2.5 _IO_putc F -GLIBC_2.2.5 _IO_puts F -GLIBC_2.2.5 _IO_remove_marker F -GLIBC_2.2.5 _IO_seekmark F -GLIBC_2.2.5 _IO_seekoff F -GLIBC_2.2.5 _IO_seekpos F -GLIBC_2.2.5 _IO_seekwmark F -GLIBC_2.2.5 _IO_setb F -GLIBC_2.2.5 _IO_setbuffer F -GLIBC_2.2.5 _IO_setvbuf F -GLIBC_2.2.5 _IO_sgetn F -GLIBC_2.2.5 _IO_sprintf F -GLIBC_2.2.5 _IO_sputbackc F -GLIBC_2.2.5 _IO_sputbackwc F -GLIBC_2.2.5 _IO_sscanf F -GLIBC_2.2.5 _IO_str_init_readonly F -GLIBC_2.2.5 _IO_str_init_static F -GLIBC_2.2.5 _IO_str_overflow F -GLIBC_2.2.5 _IO_str_pbackfail F -GLIBC_2.2.5 _IO_str_seekoff F -GLIBC_2.2.5 _IO_str_underflow F -GLIBC_2.2.5 _IO_sungetc F -GLIBC_2.2.5 _IO_sungetwc F -GLIBC_2.2.5 _IO_switch_to_get_mode F -GLIBC_2.2.5 _IO_switch_to_main_wget_area F -GLIBC_2.2.5 _IO_switch_to_wbackup_area F -GLIBC_2.2.5 _IO_switch_to_wget_mode F -GLIBC_2.2.5 _IO_un_link F -GLIBC_2.2.5 _IO_ungetc F -GLIBC_2.2.5 _IO_unsave_markers F -GLIBC_2.2.5 _IO_unsave_wmarkers F -GLIBC_2.2.5 _IO_vfprintf F -GLIBC_2.2.5 _IO_vfscanf F -GLIBC_2.2.5 _IO_vsprintf F -GLIBC_2.2.5 _IO_wdefault_doallocate F -GLIBC_2.2.5 _IO_wdefault_finish F -GLIBC_2.2.5 _IO_wdefault_pbackfail F -GLIBC_2.2.5 _IO_wdefault_uflow F -GLIBC_2.2.5 _IO_wdefault_xsgetn F -GLIBC_2.2.5 _IO_wdefault_xsputn F -GLIBC_2.2.5 _IO_wdo_write F -GLIBC_2.2.5 _IO_wdoallocbuf F -GLIBC_2.2.5 _IO_wfile_jumps D 0xa8 -GLIBC_2.2.5 _IO_wfile_overflow F -GLIBC_2.2.5 _IO_wfile_seekoff F -GLIBC_2.2.5 _IO_wfile_sync F -GLIBC_2.2.5 _IO_wfile_underflow F -GLIBC_2.2.5 _IO_wfile_xsputn F -GLIBC_2.2.5 _IO_wmarker_delta F -GLIBC_2.2.5 _IO_wsetb F -GLIBC_2.2.5 __adjtimex F -GLIBC_2.2.5 __after_morecore_hook D 0x8 -GLIBC_2.2.5 __arch_prctl F -GLIBC_2.2.5 __argz_count F -GLIBC_2.2.5 __argz_next F -GLIBC_2.2.5 __argz_stringify F -GLIBC_2.2.5 __asprintf F -GLIBC_2.2.5 __assert F -GLIBC_2.2.5 __assert_fail F -GLIBC_2.2.5 __assert_perror_fail F -GLIBC_2.2.5 __backtrace F -GLIBC_2.2.5 __backtrace_symbols F -GLIBC_2.2.5 __backtrace_symbols_fd F -GLIBC_2.2.5 __bsd_getpgrp F -GLIBC_2.2.5 __bzero F -GLIBC_2.2.5 __check_rhosts_file D 0x4 -GLIBC_2.2.5 __clone F -GLIBC_2.2.5 __close F -GLIBC_2.2.5 __cmsg_nxthdr F -GLIBC_2.2.5 __connect F -GLIBC_2.2.5 __ctype32_b D 0x8 -GLIBC_2.2.5 __ctype32_tolower D 0x8 -GLIBC_2.2.5 __ctype32_toupper D 0x8 -GLIBC_2.2.5 __ctype_b D 0x8 -GLIBC_2.2.5 __ctype_get_mb_cur_max F -GLIBC_2.2.5 __ctype_tolower D 0x8 -GLIBC_2.2.5 __ctype_toupper D 0x8 -GLIBC_2.2.5 __curbrk D 0x8 -GLIBC_2.2.5 __cxa_atexit F -GLIBC_2.2.5 __cxa_finalize F -GLIBC_2.2.5 __cyg_profile_func_enter F -GLIBC_2.2.5 __cyg_profile_func_exit F -GLIBC_2.2.5 __daylight D 0x4 -GLIBC_2.2.5 __dcgettext F -GLIBC_2.2.5 __default_morecore F -GLIBC_2.2.5 __dgettext F -GLIBC_2.2.5 __dup2 F -GLIBC_2.2.5 __duplocale F -GLIBC_2.2.5 __endmntent F -GLIBC_2.2.5 __environ D 0x8 -GLIBC_2.2.5 __errno_location F -GLIBC_2.2.5 __fbufsize F -GLIBC_2.2.5 __fcntl F -GLIBC_2.2.5 __ffs F -GLIBC_2.2.5 __finite F -GLIBC_2.2.5 __finitef F -GLIBC_2.2.5 __finitel F -GLIBC_2.2.5 __flbf F -GLIBC_2.2.5 __fork F -GLIBC_2.2.5 __fpending F -GLIBC_2.2.5 __fpu_control D 0x2 -GLIBC_2.2.5 __fpurge F -GLIBC_2.2.5 __freadable F -GLIBC_2.2.5 __freading F -GLIBC_2.2.5 __free_hook D 0x8 -GLIBC_2.2.5 __freelocale F -GLIBC_2.2.5 __fsetlocking F -GLIBC_2.2.5 __fwritable F -GLIBC_2.2.5 __fwriting F -GLIBC_2.2.5 __fxstat F -GLIBC_2.2.5 __fxstat64 F -GLIBC_2.2.5 __getdelim F -GLIBC_2.2.5 __getmntent_r F -GLIBC_2.2.5 __getpagesize F -GLIBC_2.2.5 __getpgid F -GLIBC_2.2.5 __getpid F -GLIBC_2.2.5 __gettimeofday F -GLIBC_2.2.5 __gmtime_r F -GLIBC_2.2.5 __h_errno_location F -GLIBC_2.2.5 __isalnum_l F -GLIBC_2.2.5 __isalpha_l F -GLIBC_2.2.5 __isascii_l F -GLIBC_2.2.5 __isblank_l F -GLIBC_2.2.5 __iscntrl_l F -GLIBC_2.2.5 __isdigit_l F -GLIBC_2.2.5 __isgraph_l F -GLIBC_2.2.5 __isinf F -GLIBC_2.2.5 __isinff F -GLIBC_2.2.5 __isinfl F -GLIBC_2.2.5 __islower_l F -GLIBC_2.2.5 __isnan F -GLIBC_2.2.5 __isnanf F -GLIBC_2.2.5 __isnanl F -GLIBC_2.2.5 __isprint_l F -GLIBC_2.2.5 __ispunct_l F -GLIBC_2.2.5 __isspace_l F -GLIBC_2.2.5 __isupper_l F -GLIBC_2.2.5 __iswalnum_l F -GLIBC_2.2.5 __iswalpha_l F -GLIBC_2.2.5 __iswblank_l F -GLIBC_2.2.5 __iswcntrl_l F -GLIBC_2.2.5 __iswctype F -GLIBC_2.2.5 __iswctype_l F -GLIBC_2.2.5 __iswdigit_l F -GLIBC_2.2.5 __iswgraph_l F -GLIBC_2.2.5 __iswlower_l F -GLIBC_2.2.5 __iswprint_l F -GLIBC_2.2.5 __iswpunct_l F -GLIBC_2.2.5 __iswspace_l F -GLIBC_2.2.5 __iswupper_l F -GLIBC_2.2.5 __iswxdigit_l F -GLIBC_2.2.5 __isxdigit_l F -GLIBC_2.2.5 __ivaliduser F -GLIBC_2.2.5 __key_decryptsession_pk_LOCAL D 0x8 -GLIBC_2.2.5 __key_encryptsession_pk_LOCAL D 0x8 -GLIBC_2.2.5 __key_gendes_LOCAL D 0x8 -GLIBC_2.2.5 __libc_allocate_rtsig F -GLIBC_2.2.5 __libc_calloc F -GLIBC_2.2.5 __libc_current_sigrtmax F -GLIBC_2.2.5 __libc_current_sigrtmin F -GLIBC_2.2.5 __libc_free F -GLIBC_2.2.5 __libc_freeres F -GLIBC_2.2.5 __libc_init_first F -GLIBC_2.2.5 __libc_mallinfo F -GLIBC_2.2.5 __libc_malloc F -GLIBC_2.2.5 __libc_mallopt F -GLIBC_2.2.5 __libc_memalign F -GLIBC_2.2.5 __libc_pvalloc F -GLIBC_2.2.5 __libc_realloc F -GLIBC_2.2.5 __libc_sa_len F -GLIBC_2.2.5 __libc_start_main F -GLIBC_2.2.5 __libc_valloc F -GLIBC_2.2.5 __lseek F -GLIBC_2.2.5 __lxstat F -GLIBC_2.2.5 __lxstat64 F -GLIBC_2.2.5 __malloc_hook D 0x8 -GLIBC_2.2.5 __malloc_initialize_hook D 0x8 -GLIBC_2.2.5 __mbrlen F -GLIBC_2.2.5 __mbrtowc F -GLIBC_2.2.5 __memalign_hook D 0x8 -GLIBC_2.2.5 __mempcpy F -GLIBC_2.2.5 __mempcpy_small F -GLIBC_2.2.5 __monstartup F -GLIBC_2.2.5 __morecore D 0x8 -GLIBC_2.2.5 __newlocale F -GLIBC_2.2.5 __nl_langinfo_l F -GLIBC_2.2.5 __nss_configure_lookup F -GLIBC_2.2.5 __nss_database_lookup F -GLIBC_2.2.5 __nss_group_lookup F -GLIBC_2.2.5 __nss_hostname_digits_dots F -GLIBC_2.2.5 __nss_hosts_lookup F -GLIBC_2.2.5 __nss_next F -GLIBC_2.2.5 __nss_passwd_lookup F -GLIBC_2.2.5 __open F -GLIBC_2.2.5 __open64 F -GLIBC_2.2.5 __overflow F -GLIBC_2.2.5 __pipe F -GLIBC_2.2.5 __poll F -GLIBC_2.2.5 __pread64 F -GLIBC_2.2.5 __printf_fp F -GLIBC_2.2.5 __profile_frequency F -GLIBC_2.2.5 __progname D 0x8 -GLIBC_2.2.5 __progname_full D 0x8 -GLIBC_2.2.5 __pwrite64 F -GLIBC_2.2.5 __rawmemchr F -GLIBC_2.2.5 __rcmd_errstr D 0x8 -GLIBC_2.2.5 __read F -GLIBC_2.2.5 __realloc_hook D 0x8 -GLIBC_2.2.5 __res_init F -GLIBC_2.2.5 __res_nclose F -GLIBC_2.2.5 __res_ninit F -GLIBC_2.2.5 __res_randomid F -GLIBC_2.2.5 __res_state F -GLIBC_2.2.5 __rpc_thread_createerr F -GLIBC_2.2.5 __rpc_thread_svc_fdset F -GLIBC_2.2.5 __rpc_thread_svc_max_pollfd F -GLIBC_2.2.5 __rpc_thread_svc_pollfd F -GLIBC_2.2.5 __sbrk F -GLIBC_2.2.5 __sched_get_priority_max F -GLIBC_2.2.5 __sched_get_priority_min F -GLIBC_2.2.5 __sched_getparam F -GLIBC_2.2.5 __sched_getscheduler F -GLIBC_2.2.5 __sched_setscheduler F -GLIBC_2.2.5 __sched_yield F -GLIBC_2.2.5 __secure_getenv F -GLIBC_2.2.5 __select F -GLIBC_2.2.5 __send F -GLIBC_2.2.5 __setmntent F -GLIBC_2.2.5 __setpgid F -GLIBC_2.2.5 __sigaction F -GLIBC_2.2.5 __sigaddset F -GLIBC_2.2.5 __sigdelset F -GLIBC_2.2.5 __sigismember F -GLIBC_2.2.5 __signbit F -GLIBC_2.2.5 __signbitf F -GLIBC_2.2.5 __signbitl F -GLIBC_2.2.5 __sigpause F -GLIBC_2.2.5 __sigsetjmp F -GLIBC_2.2.5 __sigsuspend F -GLIBC_2.2.5 __statfs F -GLIBC_2.2.5 __stpcpy F -GLIBC_2.2.5 __stpcpy_small F -GLIBC_2.2.5 __stpncpy F -GLIBC_2.2.5 __strcasecmp F -GLIBC_2.2.5 __strcasecmp_l F -GLIBC_2.2.5 __strcasestr F -GLIBC_2.2.5 __strcoll_l F -GLIBC_2.2.5 __strcpy_small F -GLIBC_2.2.5 __strcspn_c1 F -GLIBC_2.2.5 __strcspn_c2 F -GLIBC_2.2.5 __strcspn_c3 F -GLIBC_2.2.5 __strdup F -GLIBC_2.2.5 __strerror_r F -GLIBC_2.2.5 __strfmon_l F -GLIBC_2.2.5 __strncasecmp_l F -GLIBC_2.2.5 __strndup F -GLIBC_2.2.5 __strpbrk_c2 F -GLIBC_2.2.5 __strpbrk_c3 F -GLIBC_2.2.5 __strsep_1c F -GLIBC_2.2.5 __strsep_2c F -GLIBC_2.2.5 __strsep_3c F -GLIBC_2.2.5 __strsep_g F -GLIBC_2.2.5 __strspn_c1 F -GLIBC_2.2.5 __strspn_c2 F -GLIBC_2.2.5 __strspn_c3 F -GLIBC_2.2.5 __strtod_internal F -GLIBC_2.2.5 __strtod_l F -GLIBC_2.2.5 __strtof_internal F -GLIBC_2.2.5 __strtof_l F -GLIBC_2.2.5 __strtok_r F -GLIBC_2.2.5 __strtok_r_1c F -GLIBC_2.2.5 __strtol_internal F -GLIBC_2.2.5 __strtol_l F -GLIBC_2.2.5 __strtold_internal F -GLIBC_2.2.5 __strtold_l F -GLIBC_2.2.5 __strtoll_internal F -GLIBC_2.2.5 __strtoll_l F -GLIBC_2.2.5 __strtoul_internal F -GLIBC_2.2.5 __strtoul_l F -GLIBC_2.2.5 __strtoull_internal F -GLIBC_2.2.5 __strtoull_l F -GLIBC_2.2.5 __strverscmp F -GLIBC_2.2.5 __strxfrm_l F -GLIBC_2.2.5 __sysconf F -GLIBC_2.2.5 __sysctl F -GLIBC_2.2.5 __sysv_signal F -GLIBC_2.2.5 __timezone D 0x8 -GLIBC_2.2.5 __toascii_l F -GLIBC_2.2.5 __tolower_l F -GLIBC_2.2.5 __toupper_l F -GLIBC_2.2.5 __towctrans F -GLIBC_2.2.5 __towctrans_l F -GLIBC_2.2.5 __towlower_l F -GLIBC_2.2.5 __towupper_l F -GLIBC_2.2.5 __tzname D 0x10 -GLIBC_2.2.5 __uflow F -GLIBC_2.2.5 __underflow F -GLIBC_2.2.5 __vfork F -GLIBC_2.2.5 __vfscanf F -GLIBC_2.2.5 __vsnprintf F -GLIBC_2.2.5 __vsscanf F -GLIBC_2.2.5 __wait F -GLIBC_2.2.5 __waitpid F -GLIBC_2.2.5 __wcscasecmp_l F -GLIBC_2.2.5 __wcscoll_l F -GLIBC_2.2.5 __wcsncasecmp_l F -GLIBC_2.2.5 __wcstod_internal F -GLIBC_2.2.5 __wcstod_l F -GLIBC_2.2.5 __wcstof_internal F -GLIBC_2.2.5 __wcstof_l F -GLIBC_2.2.5 __wcstol_internal F -GLIBC_2.2.5 __wcstol_l F -GLIBC_2.2.5 __wcstold_internal F -GLIBC_2.2.5 __wcstold_l F -GLIBC_2.2.5 __wcstoll_internal F -GLIBC_2.2.5 __wcstoll_l F -GLIBC_2.2.5 __wcstoul_internal F -GLIBC_2.2.5 __wcstoul_l F -GLIBC_2.2.5 __wcstoull_internal F -GLIBC_2.2.5 __wcstoull_l F -GLIBC_2.2.5 __wcsxfrm_l F -GLIBC_2.2.5 __wctrans_l F -GLIBC_2.2.5 __wctype_l F -GLIBC_2.2.5 __woverflow F -GLIBC_2.2.5 __write F -GLIBC_2.2.5 __wuflow F -GLIBC_2.2.5 __wunderflow F -GLIBC_2.2.5 __xmknod F -GLIBC_2.2.5 __xpg_basename F -GLIBC_2.2.5 __xpg_sigpause F -GLIBC_2.2.5 __xstat F -GLIBC_2.2.5 __xstat64 F -GLIBC_2.2.5 _authenticate F -GLIBC_2.2.5 _dl_mcount_wrapper F -GLIBC_2.2.5 _dl_mcount_wrapper_check F -GLIBC_2.2.5 _environ D 0x8 -GLIBC_2.2.5 _exit F -GLIBC_2.2.5 _flushlbf F -GLIBC_2.2.5 _libc_intl_domainname D 0x5 -GLIBC_2.2.5 _longjmp F -GLIBC_2.2.5 _mcleanup F -GLIBC_2.2.5 _mcount F -GLIBC_2.2.5 _nl_default_dirname D 0x12 -GLIBC_2.2.5 _nl_domain_bindings D 0x8 -GLIBC_2.2.5 _nl_msg_cat_cntr D 0x4 -GLIBC_2.2.5 _null_auth D 0x18 -GLIBC_2.2.5 _obstack D 0x8 -GLIBC_2.2.5 _obstack_allocated_p F -GLIBC_2.2.5 _obstack_begin F -GLIBC_2.2.5 _obstack_begin_1 F -GLIBC_2.2.5 _obstack_free F -GLIBC_2.2.5 _obstack_memory_used F -GLIBC_2.2.5 _obstack_newchunk F -GLIBC_2.2.5 _res D 0x238 -GLIBC_2.2.5 _res_hconf D 0x48 -GLIBC_2.2.5 _rpc_dtablesize F -GLIBC_2.2.5 _seterr_reply F -GLIBC_2.2.5 _setjmp F -GLIBC_2.2.5 _sys_errlist D 0x3e8 -GLIBC_2.2.5 _sys_nerr D 0x4 -GLIBC_2.2.5 _sys_siglist D 0x200 -GLIBC_2.2.5 _tolower F -GLIBC_2.2.5 _toupper F -GLIBC_2.2.5 a64l F -GLIBC_2.2.5 abort F -GLIBC_2.2.5 abs F -GLIBC_2.2.5 accept F -GLIBC_2.2.5 access F -GLIBC_2.2.5 acct F -GLIBC_2.2.5 addmntent F -GLIBC_2.2.5 addseverity F -GLIBC_2.2.5 adjtime F -GLIBC_2.2.5 adjtimex F -GLIBC_2.2.5 advance F -GLIBC_2.2.5 alarm F -GLIBC_2.2.5 alphasort F -GLIBC_2.2.5 alphasort64 F -GLIBC_2.2.5 arch_prctl F -GLIBC_2.2.5 argp_err_exit_status D 0x4 -GLIBC_2.2.5 argp_error F -GLIBC_2.2.5 argp_failure F -GLIBC_2.2.5 argp_help F -GLIBC_2.2.5 argp_parse F -GLIBC_2.2.5 argp_program_bug_address D 0x8 -GLIBC_2.2.5 argp_program_version D 0x8 -GLIBC_2.2.5 argp_program_version_hook D 0x8 -GLIBC_2.2.5 argp_state_help F -GLIBC_2.2.5 argp_usage F -GLIBC_2.2.5 argz_add F -GLIBC_2.2.5 argz_add_sep F -GLIBC_2.2.5 argz_append F -GLIBC_2.2.5 argz_count F -GLIBC_2.2.5 argz_create F -GLIBC_2.2.5 argz_create_sep F -GLIBC_2.2.5 argz_delete F -GLIBC_2.2.5 argz_extract F -GLIBC_2.2.5 argz_insert F -GLIBC_2.2.5 argz_next F -GLIBC_2.2.5 argz_replace F -GLIBC_2.2.5 argz_stringify F -GLIBC_2.2.5 asctime F -GLIBC_2.2.5 asctime_r F -GLIBC_2.2.5 asprintf F -GLIBC_2.2.5 atof F -GLIBC_2.2.5 atoi F -GLIBC_2.2.5 atol F -GLIBC_2.2.5 atoll F -GLIBC_2.2.5 authdes_create F -GLIBC_2.2.5 authdes_getucred F -GLIBC_2.2.5 authdes_pk_create F -GLIBC_2.2.5 authnone_create F -GLIBC_2.2.5 authunix_create F -GLIBC_2.2.5 authunix_create_default F -GLIBC_2.2.5 backtrace F -GLIBC_2.2.5 backtrace_symbols F -GLIBC_2.2.5 backtrace_symbols_fd F -GLIBC_2.2.5 basename F -GLIBC_2.2.5 bcmp F -GLIBC_2.2.5 bcopy F -GLIBC_2.2.5 bdflush F -GLIBC_2.2.5 bind F -GLIBC_2.2.5 bind_textdomain_codeset F -GLIBC_2.2.5 bindresvport F -GLIBC_2.2.5 bindtextdomain F -GLIBC_2.2.5 brk F -GLIBC_2.2.5 bsd_signal F -GLIBC_2.2.5 bsearch F -GLIBC_2.2.5 btowc F -GLIBC_2.2.5 bzero F -GLIBC_2.2.5 calloc F -GLIBC_2.2.5 callrpc F -GLIBC_2.2.5 canonicalize_file_name F -GLIBC_2.2.5 capget F -GLIBC_2.2.5 capset F -GLIBC_2.2.5 catclose F -GLIBC_2.2.5 catgets F -GLIBC_2.2.5 catopen F -GLIBC_2.2.5 cbc_crypt F -GLIBC_2.2.5 cfgetispeed F -GLIBC_2.2.5 cfgetospeed F -GLIBC_2.2.5 cfmakeraw F -GLIBC_2.2.5 cfree F -GLIBC_2.2.5 cfsetispeed F -GLIBC_2.2.5 cfsetospeed F -GLIBC_2.2.5 cfsetspeed F -GLIBC_2.2.5 chdir F -GLIBC_2.2.5 chflags F -GLIBC_2.2.5 chmod F -GLIBC_2.2.5 chown F -GLIBC_2.2.5 chroot F -GLIBC_2.2.5 clearenv F -GLIBC_2.2.5 clearerr F -GLIBC_2.2.5 clearerr_unlocked F -GLIBC_2.2.5 clnt_broadcast F -GLIBC_2.2.5 clnt_create F -GLIBC_2.2.5 clnt_pcreateerror F -GLIBC_2.2.5 clnt_perrno F -GLIBC_2.2.5 clnt_perror F -GLIBC_2.2.5 clnt_spcreateerror F -GLIBC_2.2.5 clnt_sperrno F -GLIBC_2.2.5 clnt_sperror F -GLIBC_2.2.5 clntraw_create F -GLIBC_2.2.5 clnttcp_create F -GLIBC_2.2.5 clntudp_bufcreate F -GLIBC_2.2.5 clntudp_create F -GLIBC_2.2.5 clntunix_create F -GLIBC_2.2.5 clock F -GLIBC_2.2.5 clone F -GLIBC_2.2.5 close F -GLIBC_2.2.5 closedir F -GLIBC_2.2.5 closelog F -GLIBC_2.2.5 confstr F -GLIBC_2.2.5 connect F -GLIBC_2.2.5 copysign F -GLIBC_2.2.5 copysignf F -GLIBC_2.2.5 copysignl F -GLIBC_2.2.5 creat F -GLIBC_2.2.5 creat64 F -GLIBC_2.2.5 create_module F -GLIBC_2.2.5 ctermid F -GLIBC_2.2.5 ctime F -GLIBC_2.2.5 ctime_r F -GLIBC_2.2.5 cuserid F -GLIBC_2.2.5 daemon F -GLIBC_2.2.5 daylight D 0x4 -GLIBC_2.2.5 dcgettext F -GLIBC_2.2.5 dcngettext F -GLIBC_2.2.5 delete_module F -GLIBC_2.2.5 des_setparity F -GLIBC_2.2.5 dgettext F -GLIBC_2.2.5 difftime F -GLIBC_2.2.5 dirfd F -GLIBC_2.2.5 dirname F -GLIBC_2.2.5 div F -GLIBC_2.2.5 dl_iterate_phdr F -GLIBC_2.2.5 dngettext F -GLIBC_2.2.5 dprintf F -GLIBC_2.2.5 drand48 F -GLIBC_2.2.5 drand48_r F -GLIBC_2.2.5 dup F -GLIBC_2.2.5 dup2 F -GLIBC_2.2.5 dysize F -GLIBC_2.2.5 ecb_crypt F -GLIBC_2.2.5 ecvt F -GLIBC_2.2.5 ecvt_r F -GLIBC_2.2.5 endaliasent F -GLIBC_2.2.5 endfsent F -GLIBC_2.2.5 endgrent F -GLIBC_2.2.5 endhostent F -GLIBC_2.2.5 endmntent F -GLIBC_2.2.5 endnetent F -GLIBC_2.2.5 endnetgrent F -GLIBC_2.2.5 endprotoent F -GLIBC_2.2.5 endpwent F -GLIBC_2.2.5 endrpcent F -GLIBC_2.2.5 endservent F -GLIBC_2.2.5 endspent F -GLIBC_2.2.5 endttyent F -GLIBC_2.2.5 endusershell F -GLIBC_2.2.5 endutent F -GLIBC_2.2.5 endutxent F -GLIBC_2.2.5 environ D 0x8 -GLIBC_2.2.5 envz_add F -GLIBC_2.2.5 envz_entry F -GLIBC_2.2.5 envz_get F -GLIBC_2.2.5 envz_merge F -GLIBC_2.2.5 envz_remove F -GLIBC_2.2.5 envz_strip F -GLIBC_2.2.5 erand48 F -GLIBC_2.2.5 erand48_r F -GLIBC_2.2.5 err F -GLIBC_2.2.5 error F -GLIBC_2.2.5 error_at_line F -GLIBC_2.2.5 error_message_count D 0x4 -GLIBC_2.2.5 error_one_per_line D 0x4 -GLIBC_2.2.5 error_print_progname D 0x8 -GLIBC_2.2.5 errx F -GLIBC_2.2.5 ether_aton F -GLIBC_2.2.5 ether_aton_r F -GLIBC_2.2.5 ether_hostton F -GLIBC_2.2.5 ether_line F -GLIBC_2.2.5 ether_ntoa F -GLIBC_2.2.5 ether_ntoa_r F -GLIBC_2.2.5 ether_ntohost F -GLIBC_2.2.5 euidaccess F -GLIBC_2.2.5 execl F -GLIBC_2.2.5 execle F -GLIBC_2.2.5 execlp F -GLIBC_2.2.5 execv F -GLIBC_2.2.5 execve F -GLIBC_2.2.5 execvp F -GLIBC_2.2.5 exit F -GLIBC_2.2.5 fattach F -GLIBC_2.2.5 fchdir F -GLIBC_2.2.5 fchflags F -GLIBC_2.2.5 fchmod F -GLIBC_2.2.5 fchown F -GLIBC_2.2.5 fclose F -GLIBC_2.2.5 fcloseall F -GLIBC_2.2.5 fcntl F -GLIBC_2.2.5 fcvt F -GLIBC_2.2.5 fcvt_r F -GLIBC_2.2.5 fdatasync F -GLIBC_2.2.5 fdetach F -GLIBC_2.2.5 fdopen F -GLIBC_2.2.5 feof F -GLIBC_2.2.5 feof_unlocked F -GLIBC_2.2.5 ferror F -GLIBC_2.2.5 ferror_unlocked F -GLIBC_2.2.5 fexecve F -GLIBC_2.2.5 fflush F -GLIBC_2.2.5 fflush_unlocked F -GLIBC_2.2.5 ffs F -GLIBC_2.2.5 ffsl F -GLIBC_2.2.5 ffsll F -GLIBC_2.2.5 fgetc F -GLIBC_2.2.5 fgetc_unlocked F -GLIBC_2.2.5 fgetgrent F -GLIBC_2.2.5 fgetgrent_r F -GLIBC_2.2.5 fgetpos F -GLIBC_2.2.5 fgetpos64 F -GLIBC_2.2.5 fgetpwent F -GLIBC_2.2.5 fgetpwent_r F -GLIBC_2.2.5 fgets F -GLIBC_2.2.5 fgets_unlocked F -GLIBC_2.2.5 fgetspent F -GLIBC_2.2.5 fgetspent_r F -GLIBC_2.2.5 fgetwc F -GLIBC_2.2.5 fgetwc_unlocked F -GLIBC_2.2.5 fgetws F -GLIBC_2.2.5 fgetws_unlocked F -GLIBC_2.2.5 fileno F -GLIBC_2.2.5 fileno_unlocked F -GLIBC_2.2.5 finite F -GLIBC_2.2.5 finitef F -GLIBC_2.2.5 finitel F -GLIBC_2.2.5 flock F -GLIBC_2.2.5 flockfile F -GLIBC_2.2.5 fmemopen F -GLIBC_2.2.5 fmtmsg F -GLIBC_2.2.5 fnmatch F -GLIBC_2.2.5 fopen F -GLIBC_2.2.5 fopen64 F -GLIBC_2.2.5 fopencookie F -GLIBC_2.2.5 fork F -GLIBC_2.2.5 fpathconf F -GLIBC_2.2.5 fprintf F -GLIBC_2.2.5 fputc F -GLIBC_2.2.5 fputc_unlocked F -GLIBC_2.2.5 fputs F -GLIBC_2.2.5 fputs_unlocked F -GLIBC_2.2.5 fputwc F -GLIBC_2.2.5 fputwc_unlocked F -GLIBC_2.2.5 fputws F -GLIBC_2.2.5 fputws_unlocked F -GLIBC_2.2.5 fread F -GLIBC_2.2.5 fread_unlocked F -GLIBC_2.2.5 free F -GLIBC_2.2.5 freeaddrinfo F -GLIBC_2.2.5 freopen F -GLIBC_2.2.5 freopen64 F -GLIBC_2.2.5 frexp F -GLIBC_2.2.5 frexpf F -GLIBC_2.2.5 frexpl F -GLIBC_2.2.5 fscanf F -GLIBC_2.2.5 fseek F -GLIBC_2.2.5 fseeko F -GLIBC_2.2.5 fseeko64 F -GLIBC_2.2.5 fsetpos F -GLIBC_2.2.5 fsetpos64 F -GLIBC_2.2.5 fstatfs F -GLIBC_2.2.5 fstatfs64 F -GLIBC_2.2.5 fstatvfs F -GLIBC_2.2.5 fstatvfs64 F -GLIBC_2.2.5 fsync F -GLIBC_2.2.5 ftell F -GLIBC_2.2.5 ftello F -GLIBC_2.2.5 ftello64 F -GLIBC_2.2.5 ftime F -GLIBC_2.2.5 ftok F -GLIBC_2.2.5 ftruncate F -GLIBC_2.2.5 ftruncate64 F -GLIBC_2.2.5 ftrylockfile F -GLIBC_2.2.5 fts_children F -GLIBC_2.2.5 fts_close F -GLIBC_2.2.5 fts_open F -GLIBC_2.2.5 fts_read F -GLIBC_2.2.5 fts_set F -GLIBC_2.2.5 ftw F -GLIBC_2.2.5 ftw64 F -GLIBC_2.2.5 funlockfile F -GLIBC_2.2.5 fwide F -GLIBC_2.2.5 fwprintf F -GLIBC_2.2.5 fwrite F -GLIBC_2.2.5 fwrite_unlocked F -GLIBC_2.2.5 fwscanf F -GLIBC_2.2.5 gai_strerror F -GLIBC_2.2.5 gcvt F -GLIBC_2.2.5 get_avphys_pages F -GLIBC_2.2.5 get_current_dir_name F -GLIBC_2.2.5 get_kernel_syms F -GLIBC_2.2.5 get_myaddress F -GLIBC_2.2.5 get_nprocs F -GLIBC_2.2.5 get_nprocs_conf F -GLIBC_2.2.5 get_phys_pages F -GLIBC_2.2.5 getaddrinfo F -GLIBC_2.2.5 getaliasbyname F -GLIBC_2.2.5 getaliasbyname_r F -GLIBC_2.2.5 getaliasent F -GLIBC_2.2.5 getaliasent_r F -GLIBC_2.2.5 getc F -GLIBC_2.2.5 getc_unlocked F -GLIBC_2.2.5 getchar F -GLIBC_2.2.5 getchar_unlocked F -GLIBC_2.2.5 getcontext F -GLIBC_2.2.5 getcwd F -GLIBC_2.2.5 getdate F -GLIBC_2.2.5 getdate_err D 0x4 -GLIBC_2.2.5 getdate_r F -GLIBC_2.2.5 getdelim F -GLIBC_2.2.5 getdirentries F -GLIBC_2.2.5 getdirentries64 F -GLIBC_2.2.5 getdomainname F -GLIBC_2.2.5 getdtablesize F -GLIBC_2.2.5 getegid F -GLIBC_2.2.5 getenv F -GLIBC_2.2.5 geteuid F -GLIBC_2.2.5 getfsent F -GLIBC_2.2.5 getfsfile F -GLIBC_2.2.5 getfsspec F -GLIBC_2.2.5 getgid F -GLIBC_2.2.5 getgrent F -GLIBC_2.2.5 getgrent_r F -GLIBC_2.2.5 getgrgid F -GLIBC_2.2.5 getgrgid_r F -GLIBC_2.2.5 getgrnam F -GLIBC_2.2.5 getgrnam_r F -GLIBC_2.2.5 getgrouplist F -GLIBC_2.2.5 getgroups F -GLIBC_2.2.5 gethostbyaddr F -GLIBC_2.2.5 gethostbyaddr_r F -GLIBC_2.2.5 gethostbyname F -GLIBC_2.2.5 gethostbyname2 F -GLIBC_2.2.5 gethostbyname2_r F -GLIBC_2.2.5 gethostbyname_r F -GLIBC_2.2.5 gethostent F -GLIBC_2.2.5 gethostent_r F -GLIBC_2.2.5 gethostid F -GLIBC_2.2.5 gethostname F -GLIBC_2.2.5 getitimer F -GLIBC_2.2.5 getline F -GLIBC_2.2.5 getloadavg F -GLIBC_2.2.5 getlogin F -GLIBC_2.2.5 getlogin_r F -GLIBC_2.2.5 getmntent F -GLIBC_2.2.5 getmntent_r F -GLIBC_2.2.5 getmsg F -GLIBC_2.2.5 getnameinfo F -GLIBC_2.2.5 getnetbyaddr F -GLIBC_2.2.5 getnetbyaddr_r F -GLIBC_2.2.5 getnetbyname F -GLIBC_2.2.5 getnetbyname_r F -GLIBC_2.2.5 getnetent F -GLIBC_2.2.5 getnetent_r F -GLIBC_2.2.5 getnetgrent F -GLIBC_2.2.5 getnetgrent_r F -GLIBC_2.2.5 getnetname F -GLIBC_2.2.5 getopt F -GLIBC_2.2.5 getopt_long F -GLIBC_2.2.5 getopt_long_only F -GLIBC_2.2.5 getpagesize F -GLIBC_2.2.5 getpass F -GLIBC_2.2.5 getpeername F -GLIBC_2.2.5 getpgid F -GLIBC_2.2.5 getpgrp F -GLIBC_2.2.5 getpid F -GLIBC_2.2.5 getpmsg F -GLIBC_2.2.5 getppid F -GLIBC_2.2.5 getpriority F -GLIBC_2.2.5 getprotobyname F -GLIBC_2.2.5 getprotobyname_r F -GLIBC_2.2.5 getprotobynumber F -GLIBC_2.2.5 getprotobynumber_r F -GLIBC_2.2.5 getprotoent F -GLIBC_2.2.5 getprotoent_r F -GLIBC_2.2.5 getpt F -GLIBC_2.2.5 getpublickey F -GLIBC_2.2.5 getpw F -GLIBC_2.2.5 getpwent F -GLIBC_2.2.5 getpwent_r F -GLIBC_2.2.5 getpwnam F -GLIBC_2.2.5 getpwnam_r F -GLIBC_2.2.5 getpwuid F -GLIBC_2.2.5 getpwuid_r F -GLIBC_2.2.5 getresgid F -GLIBC_2.2.5 getresuid F -GLIBC_2.2.5 getrlimit F -GLIBC_2.2.5 getrlimit64 F -GLIBC_2.2.5 getrpcbyname F -GLIBC_2.2.5 getrpcbyname_r F -GLIBC_2.2.5 getrpcbynumber F -GLIBC_2.2.5 getrpcbynumber_r F -GLIBC_2.2.5 getrpcent F -GLIBC_2.2.5 getrpcent_r F -GLIBC_2.2.5 getrpcport F -GLIBC_2.2.5 getrusage F -GLIBC_2.2.5 gets F -GLIBC_2.2.5 getsecretkey F -GLIBC_2.2.5 getservbyname F -GLIBC_2.2.5 getservbyname_r F -GLIBC_2.2.5 getservbyport F -GLIBC_2.2.5 getservbyport_r F -GLIBC_2.2.5 getservent F -GLIBC_2.2.5 getservent_r F -GLIBC_2.2.5 getsid F -GLIBC_2.2.5 getsockname F -GLIBC_2.2.5 getsockopt F -GLIBC_2.2.5 getspent F -GLIBC_2.2.5 getspent_r F -GLIBC_2.2.5 getspnam F -GLIBC_2.2.5 getspnam_r F -GLIBC_2.2.5 getsubopt F -GLIBC_2.2.5 gettext F -GLIBC_2.2.5 gettimeofday F -GLIBC_2.2.5 getttyent F -GLIBC_2.2.5 getttynam F -GLIBC_2.2.5 getuid F -GLIBC_2.2.5 getusershell F -GLIBC_2.2.5 getutent F -GLIBC_2.2.5 getutent_r F -GLIBC_2.2.5 getutid F -GLIBC_2.2.5 getutid_r F -GLIBC_2.2.5 getutline F -GLIBC_2.2.5 getutline_r F -GLIBC_2.2.5 getutmp F -GLIBC_2.2.5 getutmpx F -GLIBC_2.2.5 getutxent F -GLIBC_2.2.5 getutxid F -GLIBC_2.2.5 getutxline F -GLIBC_2.2.5 getw F -GLIBC_2.2.5 getwc F -GLIBC_2.2.5 getwc_unlocked F -GLIBC_2.2.5 getwchar F -GLIBC_2.2.5 getwchar_unlocked F -GLIBC_2.2.5 getwd F -GLIBC_2.2.5 glob F -GLIBC_2.2.5 glob64 F -GLIBC_2.2.5 glob_pattern_p F -GLIBC_2.2.5 globfree F -GLIBC_2.2.5 globfree64 F -GLIBC_2.2.5 gmtime F -GLIBC_2.2.5 gmtime_r F -GLIBC_2.2.5 gnu_get_libc_release F -GLIBC_2.2.5 gnu_get_libc_version F -GLIBC_2.2.5 grantpt F -GLIBC_2.2.5 group_member F -GLIBC_2.2.5 gsignal F -GLIBC_2.2.5 gtty F -GLIBC_2.2.5 h_errlist D 0x28 -GLIBC_2.2.5 h_nerr D 0x4 -GLIBC_2.2.5 hasmntopt F -GLIBC_2.2.5 hcreate F -GLIBC_2.2.5 hcreate_r F -GLIBC_2.2.5 hdestroy F -GLIBC_2.2.5 hdestroy_r F -GLIBC_2.2.5 herror F -GLIBC_2.2.5 host2netname F -GLIBC_2.2.5 hsearch F -GLIBC_2.2.5 hsearch_r F -GLIBC_2.2.5 hstrerror F -GLIBC_2.2.5 htonl F -GLIBC_2.2.5 htons F -GLIBC_2.2.5 iconv F -GLIBC_2.2.5 iconv_close F -GLIBC_2.2.5 iconv_open F -GLIBC_2.2.5 if_freenameindex F -GLIBC_2.2.5 if_indextoname F -GLIBC_2.2.5 if_nameindex F -GLIBC_2.2.5 if_nametoindex F -GLIBC_2.2.5 imaxabs F -GLIBC_2.2.5 imaxdiv F -GLIBC_2.2.5 in6addr_any D 0x10 -GLIBC_2.2.5 in6addr_loopback D 0x10 -GLIBC_2.2.5 index F -GLIBC_2.2.5 inet_addr F -GLIBC_2.2.5 inet_aton F -GLIBC_2.2.5 inet_lnaof F -GLIBC_2.2.5 inet_makeaddr F -GLIBC_2.2.5 inet_netof F -GLIBC_2.2.5 inet_network F -GLIBC_2.2.5 inet_nsap_addr F -GLIBC_2.2.5 inet_nsap_ntoa F -GLIBC_2.2.5 inet_ntoa F -GLIBC_2.2.5 inet_ntop F -GLIBC_2.2.5 inet_pton F -GLIBC_2.2.5 init_module F -GLIBC_2.2.5 initgroups F -GLIBC_2.2.5 initstate F -GLIBC_2.2.5 initstate_r F -GLIBC_2.2.5 innetgr F -GLIBC_2.2.5 insque F -GLIBC_2.2.5 ioctl F -GLIBC_2.2.5 ioperm F -GLIBC_2.2.5 iopl F -GLIBC_2.2.5 iruserok F -GLIBC_2.2.5 iruserok_af F -GLIBC_2.2.5 isalnum F -GLIBC_2.2.5 isalpha F -GLIBC_2.2.5 isascii F -GLIBC_2.2.5 isastream F -GLIBC_2.2.5 isatty F -GLIBC_2.2.5 isblank F -GLIBC_2.2.5 iscntrl F -GLIBC_2.2.5 isdigit F -GLIBC_2.2.5 isfdtype F -GLIBC_2.2.5 isgraph F -GLIBC_2.2.5 isinf F -GLIBC_2.2.5 isinff F -GLIBC_2.2.5 isinfl F -GLIBC_2.2.5 islower F -GLIBC_2.2.5 isnan F -GLIBC_2.2.5 isnanf F -GLIBC_2.2.5 isnanl F -GLIBC_2.2.5 isprint F -GLIBC_2.2.5 ispunct F -GLIBC_2.2.5 isspace F -GLIBC_2.2.5 isupper F -GLIBC_2.2.5 iswalnum F -GLIBC_2.2.5 iswalpha F -GLIBC_2.2.5 iswblank F -GLIBC_2.2.5 iswcntrl F -GLIBC_2.2.5 iswctype F -GLIBC_2.2.5 iswdigit F -GLIBC_2.2.5 iswgraph F -GLIBC_2.2.5 iswlower F -GLIBC_2.2.5 iswprint F -GLIBC_2.2.5 iswpunct F -GLIBC_2.2.5 iswspace F -GLIBC_2.2.5 iswupper F -GLIBC_2.2.5 iswxdigit F -GLIBC_2.2.5 isxdigit F -GLIBC_2.2.5 jrand48 F -GLIBC_2.2.5 jrand48_r F -GLIBC_2.2.5 key_decryptsession F -GLIBC_2.2.5 key_decryptsession_pk F -GLIBC_2.2.5 key_encryptsession F -GLIBC_2.2.5 key_encryptsession_pk F -GLIBC_2.2.5 key_gendes F -GLIBC_2.2.5 key_get_conv F -GLIBC_2.2.5 key_secretkey_is_set F -GLIBC_2.2.5 key_setnet F -GLIBC_2.2.5 key_setsecret F -GLIBC_2.2.5 kill F -GLIBC_2.2.5 killpg F -GLIBC_2.2.5 klogctl F -GLIBC_2.2.5 l64a F -GLIBC_2.2.5 labs F -GLIBC_2.2.5 lchown F -GLIBC_2.2.5 lckpwdf F -GLIBC_2.2.5 lcong48 F -GLIBC_2.2.5 lcong48_r F -GLIBC_2.2.5 ldexp F -GLIBC_2.2.5 ldexpf F -GLIBC_2.2.5 ldexpl F -GLIBC_2.2.5 ldiv F -GLIBC_2.2.5 lfind F -GLIBC_2.2.5 link F -GLIBC_2.2.5 listen F -GLIBC_2.2.5 llabs F -GLIBC_2.2.5 lldiv F -GLIBC_2.2.5 llseek F -GLIBC_2.2.5 loc1 D 0x8 -GLIBC_2.2.5 loc2 D 0x8 -GLIBC_2.2.5 localeconv F -GLIBC_2.2.5 localtime F -GLIBC_2.2.5 localtime_r F -GLIBC_2.2.5 lockf F -GLIBC_2.2.5 lockf64 F -GLIBC_2.2.5 locs D 0x8 -GLIBC_2.2.5 longjmp F -GLIBC_2.2.5 lrand48 F -GLIBC_2.2.5 lrand48_r F -GLIBC_2.2.5 lsearch F -GLIBC_2.2.5 lseek F -GLIBC_2.2.5 lseek64 F -GLIBC_2.2.5 madvise F -GLIBC_2.2.5 makecontext F -GLIBC_2.2.5 mallinfo F -GLIBC_2.2.5 malloc F -GLIBC_2.2.5 malloc_get_state F -GLIBC_2.2.5 malloc_set_state F -GLIBC_2.2.5 malloc_stats F -GLIBC_2.2.5 malloc_trim F -GLIBC_2.2.5 malloc_usable_size F -GLIBC_2.2.5 mallopt F -GLIBC_2.2.5 mallwatch D 0x8 -GLIBC_2.2.5 mblen F -GLIBC_2.2.5 mbrlen F -GLIBC_2.2.5 mbrtowc F -GLIBC_2.2.5 mbsinit F -GLIBC_2.2.5 mbsnrtowcs F -GLIBC_2.2.5 mbsrtowcs F -GLIBC_2.2.5 mbstowcs F -GLIBC_2.2.5 mbtowc F -GLIBC_2.2.5 mcheck F -GLIBC_2.2.5 mcheck_check_all F -GLIBC_2.2.5 mcheck_pedantic F -GLIBC_2.2.5 mcount F -GLIBC_2.2.5 memalign F -GLIBC_2.2.5 memccpy F -GLIBC_2.2.5 memchr F -GLIBC_2.2.5 memcmp F -GLIBC_2.2.5 memcpy F -GLIBC_2.2.5 memfrob F -GLIBC_2.2.5 memmem F -GLIBC_2.2.5 memmove F -GLIBC_2.2.5 mempcpy F -GLIBC_2.2.5 memrchr F -GLIBC_2.2.5 memset F -GLIBC_2.2.5 mincore F -GLIBC_2.2.5 mkdir F -GLIBC_2.2.5 mkdtemp F -GLIBC_2.2.5 mkfifo F -GLIBC_2.2.5 mkstemp F -GLIBC_2.2.5 mkstemp64 F -GLIBC_2.2.5 mktemp F -GLIBC_2.2.5 mktime F -GLIBC_2.2.5 mlock F -GLIBC_2.2.5 mlockall F -GLIBC_2.2.5 mmap F -GLIBC_2.2.5 mmap64 F -GLIBC_2.2.5 modf F -GLIBC_2.2.5 modff F -GLIBC_2.2.5 modfl F -GLIBC_2.2.5 modify_ldt F -GLIBC_2.2.5 moncontrol F -GLIBC_2.2.5 monstartup F -GLIBC_2.2.5 mount F -GLIBC_2.2.5 mprobe F -GLIBC_2.2.5 mprotect F -GLIBC_2.2.5 mrand48 F -GLIBC_2.2.5 mrand48_r F -GLIBC_2.2.5 mremap F -GLIBC_2.2.5 msgctl F -GLIBC_2.2.5 msgget F -GLIBC_2.2.5 msgrcv F -GLIBC_2.2.5 msgsnd F -GLIBC_2.2.5 msync F -GLIBC_2.2.5 mtrace F -GLIBC_2.2.5 munlock F -GLIBC_2.2.5 munlockall F -GLIBC_2.2.5 munmap F -GLIBC_2.2.5 muntrace F -GLIBC_2.2.5 nanosleep F -GLIBC_2.2.5 netname2host F -GLIBC_2.2.5 netname2user F -GLIBC_2.2.5 nfsservctl F -GLIBC_2.2.5 nftw F -GLIBC_2.2.5 nftw64 F -GLIBC_2.2.5 ngettext F -GLIBC_2.2.5 nice F -GLIBC_2.2.5 nl_langinfo F -GLIBC_2.2.5 nrand48 F -GLIBC_2.2.5 nrand48_r F -GLIBC_2.2.5 ntohl F -GLIBC_2.2.5 ntohs F -GLIBC_2.2.5 ntp_adjtime F -GLIBC_2.2.5 ntp_gettime F -GLIBC_2.2.5 obstack_alloc_failed_handler D 0x8 -GLIBC_2.2.5 obstack_exit_failure D 0x4 -GLIBC_2.2.5 obstack_free F -GLIBC_2.2.5 obstack_printf F -GLIBC_2.2.5 obstack_vprintf F -GLIBC_2.2.5 on_exit F -GLIBC_2.2.5 open F -GLIBC_2.2.5 open64 F -GLIBC_2.2.5 open_memstream F -GLIBC_2.2.5 opendir F -GLIBC_2.2.5 openlog F -GLIBC_2.2.5 optarg D 0x8 -GLIBC_2.2.5 opterr D 0x4 -GLIBC_2.2.5 optind D 0x4 -GLIBC_2.2.5 optopt D 0x4 -GLIBC_2.2.5 parse_printf_format F -GLIBC_2.2.5 passwd2des F -GLIBC_2.2.5 pathconf F -GLIBC_2.2.5 pause F -GLIBC_2.2.5 pclose F -GLIBC_2.2.5 perror F -GLIBC_2.2.5 personality F -GLIBC_2.2.5 pipe F -GLIBC_2.2.5 pivot_root F -GLIBC_2.2.5 pmap_getmaps F -GLIBC_2.2.5 pmap_getport F -GLIBC_2.2.5 pmap_rmtcall F -GLIBC_2.2.5 pmap_set F -GLIBC_2.2.5 pmap_unset F -GLIBC_2.2.5 poll F -GLIBC_2.2.5 popen F -GLIBC_2.2.5 posix_fadvise F -GLIBC_2.2.5 posix_fadvise64 F -GLIBC_2.2.5 posix_fallocate F -GLIBC_2.2.5 posix_fallocate64 F -GLIBC_2.2.5 posix_madvise F -GLIBC_2.2.5 posix_memalign F -GLIBC_2.2.5 posix_openpt F -GLIBC_2.2.5 posix_spawn F -GLIBC_2.2.5 posix_spawn_file_actions_addclose F -GLIBC_2.2.5 posix_spawn_file_actions_adddup2 F -GLIBC_2.2.5 posix_spawn_file_actions_addopen F -GLIBC_2.2.5 posix_spawn_file_actions_destroy F -GLIBC_2.2.5 posix_spawn_file_actions_init F -GLIBC_2.2.5 posix_spawnattr_destroy F -GLIBC_2.2.5 posix_spawnattr_getflags F -GLIBC_2.2.5 posix_spawnattr_getpgroup F -GLIBC_2.2.5 posix_spawnattr_getschedparam F -GLIBC_2.2.5 posix_spawnattr_getschedpolicy F -GLIBC_2.2.5 posix_spawnattr_getsigdefault F -GLIBC_2.2.5 posix_spawnattr_getsigmask F -GLIBC_2.2.5 posix_spawnattr_init F -GLIBC_2.2.5 posix_spawnattr_setflags F -GLIBC_2.2.5 posix_spawnattr_setpgroup F -GLIBC_2.2.5 posix_spawnattr_setschedparam F -GLIBC_2.2.5 posix_spawnattr_setschedpolicy F -GLIBC_2.2.5 posix_spawnattr_setsigdefault F -GLIBC_2.2.5 posix_spawnattr_setsigmask F -GLIBC_2.2.5 posix_spawnp F -GLIBC_2.2.5 prctl F -GLIBC_2.2.5 pread F -GLIBC_2.2.5 pread64 F -GLIBC_2.2.5 printf F -GLIBC_2.2.5 printf_size F -GLIBC_2.2.5 printf_size_info F -GLIBC_2.2.5 profil F -GLIBC_2.2.5 program_invocation_name D 0x8 -GLIBC_2.2.5 program_invocation_short_name D 0x8 -GLIBC_2.2.5 pselect F -GLIBC_2.2.5 psignal F -GLIBC_2.2.5 pthread_attr_destroy F -GLIBC_2.2.5 pthread_attr_getdetachstate F -GLIBC_2.2.5 pthread_attr_getinheritsched F -GLIBC_2.2.5 pthread_attr_getschedparam F -GLIBC_2.2.5 pthread_attr_getschedpolicy F -GLIBC_2.2.5 pthread_attr_getscope F -GLIBC_2.2.5 pthread_attr_init F -GLIBC_2.2.5 pthread_attr_setdetachstate F -GLIBC_2.2.5 pthread_attr_setinheritsched F -GLIBC_2.2.5 pthread_attr_setschedparam F -GLIBC_2.2.5 pthread_attr_setschedpolicy F -GLIBC_2.2.5 pthread_attr_setscope F -GLIBC_2.2.5 pthread_cond_broadcast F -GLIBC_2.2.5 pthread_cond_destroy F -GLIBC_2.2.5 pthread_cond_init F -GLIBC_2.2.5 pthread_cond_signal F -GLIBC_2.2.5 pthread_cond_timedwait F -GLIBC_2.2.5 pthread_cond_wait F -GLIBC_2.2.5 pthread_condattr_destroy F -GLIBC_2.2.5 pthread_condattr_init F -GLIBC_2.2.5 pthread_equal F -GLIBC_2.2.5 pthread_exit F -GLIBC_2.2.5 pthread_getschedparam F -GLIBC_2.2.5 pthread_mutex_destroy F -GLIBC_2.2.5 pthread_mutex_init F -GLIBC_2.2.5 pthread_mutex_lock F -GLIBC_2.2.5 pthread_mutex_unlock F -GLIBC_2.2.5 pthread_self F -GLIBC_2.2.5 pthread_setcancelstate F -GLIBC_2.2.5 pthread_setcanceltype F -GLIBC_2.2.5 pthread_setschedparam F -GLIBC_2.2.5 ptrace F -GLIBC_2.2.5 ptsname F -GLIBC_2.2.5 ptsname_r F -GLIBC_2.2.5 putc F -GLIBC_2.2.5 putc_unlocked F -GLIBC_2.2.5 putchar F -GLIBC_2.2.5 putchar_unlocked F -GLIBC_2.2.5 putenv F -GLIBC_2.2.5 putgrent F -GLIBC_2.2.5 putmsg F -GLIBC_2.2.5 putpmsg F -GLIBC_2.2.5 putpwent F -GLIBC_2.2.5 puts F -GLIBC_2.2.5 putspent F -GLIBC_2.2.5 pututline F -GLIBC_2.2.5 pututxline F -GLIBC_2.2.5 putw F -GLIBC_2.2.5 putwc F -GLIBC_2.2.5 putwc_unlocked F -GLIBC_2.2.5 putwchar F -GLIBC_2.2.5 putwchar_unlocked F -GLIBC_2.2.5 pvalloc F -GLIBC_2.2.5 pwrite F -GLIBC_2.2.5 pwrite64 F -GLIBC_2.2.5 qecvt F -GLIBC_2.2.5 qecvt_r F -GLIBC_2.2.5 qfcvt F -GLIBC_2.2.5 qfcvt_r F -GLIBC_2.2.5 qgcvt F -GLIBC_2.2.5 qsort F -GLIBC_2.2.5 query_module F -GLIBC_2.2.5 quotactl F -GLIBC_2.2.5 raise F -GLIBC_2.2.5 rand F -GLIBC_2.2.5 rand_r F -GLIBC_2.2.5 random F -GLIBC_2.2.5 random_r F -GLIBC_2.2.5 rawmemchr F -GLIBC_2.2.5 rcmd F -GLIBC_2.2.5 rcmd_af F -GLIBC_2.2.5 re_comp F -GLIBC_2.2.5 re_compile_fastmap F -GLIBC_2.2.5 re_compile_pattern F -GLIBC_2.2.5 re_exec F -GLIBC_2.2.5 re_match F -GLIBC_2.2.5 re_match_2 F -GLIBC_2.2.5 re_max_failures D 0x4 -GLIBC_2.2.5 re_search F -GLIBC_2.2.5 re_search_2 F -GLIBC_2.2.5 re_set_registers F -GLIBC_2.2.5 re_set_syntax F -GLIBC_2.2.5 re_syntax_options D 0x8 -GLIBC_2.2.5 read F -GLIBC_2.2.5 readdir F -GLIBC_2.2.5 readdir64 F -GLIBC_2.2.5 readdir64_r F -GLIBC_2.2.5 readdir_r F -GLIBC_2.2.5 readlink F -GLIBC_2.2.5 readv F -GLIBC_2.2.5 realloc F -GLIBC_2.2.5 realpath F -GLIBC_2.2.5 reboot F -GLIBC_2.2.5 recv F -GLIBC_2.2.5 recvfrom F -GLIBC_2.2.5 recvmsg F -GLIBC_2.2.5 regcomp F -GLIBC_2.2.5 regerror F -GLIBC_2.2.5 regexec F -GLIBC_2.2.5 regfree F -GLIBC_2.2.5 register_printf_function F -GLIBC_2.2.5 registerrpc F -GLIBC_2.2.5 remove F -GLIBC_2.2.5 remque F -GLIBC_2.2.5 rename F -GLIBC_2.2.5 revoke F -GLIBC_2.2.5 rewind F -GLIBC_2.2.5 rewinddir F -GLIBC_2.2.5 rexec F -GLIBC_2.2.5 rexec_af F -GLIBC_2.2.5 rexecoptions D 0x4 -GLIBC_2.2.5 rindex F -GLIBC_2.2.5 rmdir F -GLIBC_2.2.5 rpc_createerr D 0x20 -GLIBC_2.2.5 rpmatch F -GLIBC_2.2.5 rresvport F -GLIBC_2.2.5 rresvport_af F -GLIBC_2.2.5 rtime F -GLIBC_2.2.5 ruserok F -GLIBC_2.2.5 ruserok_af F -GLIBC_2.2.5 ruserpass F -GLIBC_2.2.5 sbrk F -GLIBC_2.2.5 scalbn F -GLIBC_2.2.5 scalbnf F -GLIBC_2.2.5 scalbnl F -GLIBC_2.2.5 scandir F -GLIBC_2.2.5 scandir64 F -GLIBC_2.2.5 scanf F -GLIBC_2.2.5 sched_get_priority_max F -GLIBC_2.2.5 sched_get_priority_min F -GLIBC_2.2.5 sched_getparam F -GLIBC_2.2.5 sched_getscheduler F -GLIBC_2.2.5 sched_rr_get_interval F -GLIBC_2.2.5 sched_setparam F -GLIBC_2.2.5 sched_setscheduler F -GLIBC_2.2.5 sched_yield F -GLIBC_2.2.5 seed48 F -GLIBC_2.2.5 seed48_r F -GLIBC_2.2.5 seekdir F -GLIBC_2.2.5 select F -GLIBC_2.2.5 semctl F -GLIBC_2.2.5 semget F -GLIBC_2.2.5 semop F -GLIBC_2.2.5 send F -GLIBC_2.2.5 sendfile F -GLIBC_2.2.5 sendmsg F -GLIBC_2.2.5 sendto F -GLIBC_2.2.5 setaliasent F -GLIBC_2.2.5 setbuf F -GLIBC_2.2.5 setbuffer F -GLIBC_2.2.5 setcontext F -GLIBC_2.2.5 setdomainname F -GLIBC_2.2.5 setegid F -GLIBC_2.2.5 setenv F -GLIBC_2.2.5 seteuid F -GLIBC_2.2.5 setfsent F -GLIBC_2.2.5 setfsgid F -GLIBC_2.2.5 setfsuid F -GLIBC_2.2.5 setgid F -GLIBC_2.2.5 setgrent F -GLIBC_2.2.5 setgroups F -GLIBC_2.2.5 sethostent F -GLIBC_2.2.5 sethostid F -GLIBC_2.2.5 sethostname F -GLIBC_2.2.5 setitimer F -GLIBC_2.2.5 setjmp F -GLIBC_2.2.5 setlinebuf F -GLIBC_2.2.5 setlocale F -GLIBC_2.2.5 setlogin F -GLIBC_2.2.5 setlogmask F -GLIBC_2.2.5 setmntent F -GLIBC_2.2.5 setnetent F -GLIBC_2.2.5 setnetgrent F -GLIBC_2.2.5 setpgid F -GLIBC_2.2.5 setpgrp F -GLIBC_2.2.5 setpriority F -GLIBC_2.2.5 setprotoent F -GLIBC_2.2.5 setpwent F -GLIBC_2.2.5 setregid F -GLIBC_2.2.5 setresgid F -GLIBC_2.2.5 setresuid F -GLIBC_2.2.5 setreuid F -GLIBC_2.2.5 setrlimit F -GLIBC_2.2.5 setrlimit64 F -GLIBC_2.2.5 setrpcent F -GLIBC_2.2.5 setservent F -GLIBC_2.2.5 setsid F -GLIBC_2.2.5 setsockopt F -GLIBC_2.2.5 setspent F -GLIBC_2.2.5 setstate F -GLIBC_2.2.5 setstate_r F -GLIBC_2.2.5 settimeofday F -GLIBC_2.2.5 setttyent F -GLIBC_2.2.5 setuid F -GLIBC_2.2.5 setusershell F -GLIBC_2.2.5 setutent F -GLIBC_2.2.5 setutxent F -GLIBC_2.2.5 setvbuf F -GLIBC_2.2.5 sgetspent F -GLIBC_2.2.5 sgetspent_r F -GLIBC_2.2.5 shmat F -GLIBC_2.2.5 shmctl F -GLIBC_2.2.5 shmdt F -GLIBC_2.2.5 shmget F -GLIBC_2.2.5 shutdown F -GLIBC_2.2.5 sigaction F -GLIBC_2.2.5 sigaddset F -GLIBC_2.2.5 sigaltstack F -GLIBC_2.2.5 sigandset F -GLIBC_2.2.5 sigblock F -GLIBC_2.2.5 sigdelset F -GLIBC_2.2.5 sigemptyset F -GLIBC_2.2.5 sigfillset F -GLIBC_2.2.5 siggetmask F -GLIBC_2.2.5 sighold F -GLIBC_2.2.5 sigignore F -GLIBC_2.2.5 siginterrupt F -GLIBC_2.2.5 sigisemptyset F -GLIBC_2.2.5 sigismember F -GLIBC_2.2.5 siglongjmp F -GLIBC_2.2.5 signal F -GLIBC_2.2.5 sigorset F -GLIBC_2.2.5 sigpause F -GLIBC_2.2.5 sigpending F -GLIBC_2.2.5 sigprocmask F -GLIBC_2.2.5 sigqueue F -GLIBC_2.2.5 sigrelse F -GLIBC_2.2.5 sigreturn F -GLIBC_2.2.5 sigset F -GLIBC_2.2.5 sigsetmask F -GLIBC_2.2.5 sigstack F -GLIBC_2.2.5 sigsuspend F -GLIBC_2.2.5 sigtimedwait F -GLIBC_2.2.5 sigvec F -GLIBC_2.2.5 sigwait F -GLIBC_2.2.5 sigwaitinfo F -GLIBC_2.2.5 sleep F -GLIBC_2.2.5 snprintf F -GLIBC_2.2.5 sockatmark F -GLIBC_2.2.5 socket F -GLIBC_2.2.5 socketpair F -GLIBC_2.2.5 sprintf F -GLIBC_2.2.5 sprofil F -GLIBC_2.2.5 srand F -GLIBC_2.2.5 srand48 F -GLIBC_2.2.5 srand48_r F -GLIBC_2.2.5 srandom F -GLIBC_2.2.5 srandom_r F -GLIBC_2.2.5 sscanf F -GLIBC_2.2.5 ssignal F -GLIBC_2.2.5 sstk F -GLIBC_2.2.5 statfs F -GLIBC_2.2.5 statfs64 F -GLIBC_2.2.5 statvfs F -GLIBC_2.2.5 statvfs64 F -GLIBC_2.2.5 stderr D 0x8 -GLIBC_2.2.5 stdin D 0x8 -GLIBC_2.2.5 stdout D 0x8 -GLIBC_2.2.5 step F -GLIBC_2.2.5 stime F -GLIBC_2.2.5 stpcpy F -GLIBC_2.2.5 stpncpy F -GLIBC_2.2.5 strcasecmp F -GLIBC_2.2.5 strcasestr F -GLIBC_2.2.5 strcat F -GLIBC_2.2.5 strchr F -GLIBC_2.2.5 strchrnul F -GLIBC_2.2.5 strcmp F -GLIBC_2.2.5 strcoll F -GLIBC_2.2.5 strcpy F -GLIBC_2.2.5 strcspn F -GLIBC_2.2.5 strdup F -GLIBC_2.2.5 strerror F -GLIBC_2.2.5 strerror_r F -GLIBC_2.2.5 strfmon F -GLIBC_2.2.5 strfry F -GLIBC_2.2.5 strftime F -GLIBC_2.2.5 strlen F -GLIBC_2.2.5 strncasecmp F -GLIBC_2.2.5 strncat F -GLIBC_2.2.5 strncmp F -GLIBC_2.2.5 strncpy F -GLIBC_2.2.5 strndup F -GLIBC_2.2.5 strnlen F -GLIBC_2.2.5 strpbrk F -GLIBC_2.2.5 strptime F -GLIBC_2.2.5 strrchr F -GLIBC_2.2.5 strsep F -GLIBC_2.2.5 strsignal F -GLIBC_2.2.5 strspn F -GLIBC_2.2.5 strstr F -GLIBC_2.2.5 strtod F -GLIBC_2.2.5 strtof F -GLIBC_2.2.5 strtoimax F -GLIBC_2.2.5 strtok F -GLIBC_2.2.5 strtok_r F -GLIBC_2.2.5 strtol F -GLIBC_2.2.5 strtold F -GLIBC_2.2.5 strtoll F -GLIBC_2.2.5 strtoq F -GLIBC_2.2.5 strtoul F -GLIBC_2.2.5 strtoull F -GLIBC_2.2.5 strtoumax F -GLIBC_2.2.5 strtouq F -GLIBC_2.2.5 strverscmp F -GLIBC_2.2.5 strxfrm F -GLIBC_2.2.5 stty F -GLIBC_2.2.5 svc_exit F -GLIBC_2.2.5 svc_fdset D 0x80 -GLIBC_2.2.5 svc_getreq F -GLIBC_2.2.5 svc_getreq_common F -GLIBC_2.2.5 svc_getreq_poll F -GLIBC_2.2.5 svc_getreqset F -GLIBC_2.2.5 svc_max_pollfd D 0x4 -GLIBC_2.2.5 svc_pollfd D 0x8 -GLIBC_2.2.5 svc_register F -GLIBC_2.2.5 svc_run F -GLIBC_2.2.5 svc_sendreply F -GLIBC_2.2.5 svc_unregister F -GLIBC_2.2.5 svcauthdes_stats D 0x18 -GLIBC_2.2.5 svcerr_auth F -GLIBC_2.2.5 svcerr_decode F -GLIBC_2.2.5 svcerr_noproc F -GLIBC_2.2.5 svcerr_noprog F -GLIBC_2.2.5 svcerr_progvers F -GLIBC_2.2.5 svcerr_systemerr F -GLIBC_2.2.5 svcerr_weakauth F -GLIBC_2.2.5 svcfd_create F -GLIBC_2.2.5 svcraw_create F -GLIBC_2.2.5 svctcp_create F -GLIBC_2.2.5 svcudp_bufcreate F -GLIBC_2.2.5 svcudp_create F -GLIBC_2.2.5 svcudp_enablecache F -GLIBC_2.2.5 svcunix_create F -GLIBC_2.2.5 svcunixfd_create F -GLIBC_2.2.5 swab F -GLIBC_2.2.5 swapcontext F -GLIBC_2.2.5 swapoff F -GLIBC_2.2.5 swapon F -GLIBC_2.2.5 swprintf F -GLIBC_2.2.5 swscanf F -GLIBC_2.2.5 symlink F -GLIBC_2.2.5 sync F -GLIBC_2.2.5 sys_errlist D 0x3e8 -GLIBC_2.2.5 sys_nerr D 0x4 -GLIBC_2.2.5 sys_sigabbrev D 0x200 -GLIBC_2.2.5 sys_siglist D 0x200 -GLIBC_2.2.5 syscall F -GLIBC_2.2.5 sysconf F -GLIBC_2.2.5 sysctl F -GLIBC_2.2.5 sysinfo F -GLIBC_2.2.5 syslog F -GLIBC_2.2.5 system F -GLIBC_2.2.5 sysv_signal F -GLIBC_2.2.5 tcdrain F -GLIBC_2.2.5 tcflow F -GLIBC_2.2.5 tcflush F -GLIBC_2.2.5 tcgetattr F -GLIBC_2.2.5 tcgetpgrp F -GLIBC_2.2.5 tcgetsid F -GLIBC_2.2.5 tcsendbreak F -GLIBC_2.2.5 tcsetattr F -GLIBC_2.2.5 tcsetpgrp F -GLIBC_2.2.5 tdelete F -GLIBC_2.2.5 tdestroy F -GLIBC_2.2.5 telldir F -GLIBC_2.2.5 tempnam F -GLIBC_2.2.5 textdomain F -GLIBC_2.2.5 tfind F -GLIBC_2.2.5 time F -GLIBC_2.2.5 timegm F -GLIBC_2.2.5 timelocal F -GLIBC_2.2.5 times F -GLIBC_2.2.5 timezone D 0x8 -GLIBC_2.2.5 tmpfile F -GLIBC_2.2.5 tmpfile64 F -GLIBC_2.2.5 tmpnam F -GLIBC_2.2.5 tmpnam_r F -GLIBC_2.2.5 toascii F -GLIBC_2.2.5 tolower F -GLIBC_2.2.5 toupper F -GLIBC_2.2.5 towctrans F -GLIBC_2.2.5 towlower F -GLIBC_2.2.5 towupper F -GLIBC_2.2.5 tr_break F -GLIBC_2.2.5 truncate F -GLIBC_2.2.5 truncate64 F -GLIBC_2.2.5 tsearch F -GLIBC_2.2.5 ttyname F -GLIBC_2.2.5 ttyname_r F -GLIBC_2.2.5 ttyslot F -GLIBC_2.2.5 twalk F -GLIBC_2.2.5 tzname D 0x10 -GLIBC_2.2.5 tzset F -GLIBC_2.2.5 ualarm F -GLIBC_2.2.5 ulckpwdf F -GLIBC_2.2.5 ulimit F -GLIBC_2.2.5 umask F -GLIBC_2.2.5 umount F -GLIBC_2.2.5 umount2 F -GLIBC_2.2.5 uname F -GLIBC_2.2.5 ungetc F -GLIBC_2.2.5 ungetwc F -GLIBC_2.2.5 unlink F -GLIBC_2.2.5 unlockpt F -GLIBC_2.2.5 unsetenv F -GLIBC_2.2.5 updwtmp F -GLIBC_2.2.5 updwtmpx F -GLIBC_2.2.5 uselib F -GLIBC_2.2.5 user2netname F -GLIBC_2.2.5 usleep F -GLIBC_2.2.5 ustat F -GLIBC_2.2.5 utime F -GLIBC_2.2.5 utimes F -GLIBC_2.2.5 utmpname F -GLIBC_2.2.5 utmpxname F -GLIBC_2.2.5 valloc F -GLIBC_2.2.5 vasprintf F -GLIBC_2.2.5 vdprintf F -GLIBC_2.2.5 verr F -GLIBC_2.2.5 verrx F -GLIBC_2.2.5 versionsort F -GLIBC_2.2.5 versionsort64 F -GLIBC_2.2.5 vfork F -GLIBC_2.2.5 vfprintf F -GLIBC_2.2.5 vfscanf F -GLIBC_2.2.5 vfwprintf F -GLIBC_2.2.5 vfwscanf F -GLIBC_2.2.5 vhangup F -GLIBC_2.2.5 vlimit F -GLIBC_2.2.5 vprintf F -GLIBC_2.2.5 vscanf F -GLIBC_2.2.5 vsnprintf F -GLIBC_2.2.5 vsprintf F -GLIBC_2.2.5 vsscanf F -GLIBC_2.2.5 vswprintf F -GLIBC_2.2.5 vswscanf F -GLIBC_2.2.5 vsyslog F -GLIBC_2.2.5 vtimes F -GLIBC_2.2.5 vwarn F -GLIBC_2.2.5 vwarnx F -GLIBC_2.2.5 vwprintf F -GLIBC_2.2.5 vwscanf F -GLIBC_2.2.5 wait F -GLIBC_2.2.5 wait3 F -GLIBC_2.2.5 wait4 F -GLIBC_2.2.5 waitid F -GLIBC_2.2.5 waitpid F -GLIBC_2.2.5 warn F -GLIBC_2.2.5 warnx F -GLIBC_2.2.5 wcpcpy F -GLIBC_2.2.5 wcpncpy F -GLIBC_2.2.5 wcrtomb F -GLIBC_2.2.5 wcscasecmp F -GLIBC_2.2.5 wcscat F -GLIBC_2.2.5 wcschr F -GLIBC_2.2.5 wcschrnul F -GLIBC_2.2.5 wcscmp F -GLIBC_2.2.5 wcscoll F -GLIBC_2.2.5 wcscpy F -GLIBC_2.2.5 wcscspn F -GLIBC_2.2.5 wcsdup F -GLIBC_2.2.5 wcsftime F -GLIBC_2.2.5 wcslen F -GLIBC_2.2.5 wcsncasecmp F -GLIBC_2.2.5 wcsncat F -GLIBC_2.2.5 wcsncmp F -GLIBC_2.2.5 wcsncpy F -GLIBC_2.2.5 wcsnlen F -GLIBC_2.2.5 wcsnrtombs F -GLIBC_2.2.5 wcspbrk F -GLIBC_2.2.5 wcsrchr F -GLIBC_2.2.5 wcsrtombs F -GLIBC_2.2.5 wcsspn F -GLIBC_2.2.5 wcsstr F -GLIBC_2.2.5 wcstod F -GLIBC_2.2.5 wcstof F -GLIBC_2.2.5 wcstoimax F -GLIBC_2.2.5 wcstok F -GLIBC_2.2.5 wcstol F -GLIBC_2.2.5 wcstold F -GLIBC_2.2.5 wcstoll F -GLIBC_2.2.5 wcstombs F -GLIBC_2.2.5 wcstoq F -GLIBC_2.2.5 wcstoul F -GLIBC_2.2.5 wcstoull F -GLIBC_2.2.5 wcstoumax F -GLIBC_2.2.5 wcstouq F -GLIBC_2.2.5 wcswcs F -GLIBC_2.2.5 wcswidth F -GLIBC_2.2.5 wcsxfrm F -GLIBC_2.2.5 wctob F -GLIBC_2.2.5 wctomb F -GLIBC_2.2.5 wctrans F -GLIBC_2.2.5 wctype F -GLIBC_2.2.5 wcwidth F -GLIBC_2.2.5 wmemchr F -GLIBC_2.2.5 wmemcmp F -GLIBC_2.2.5 wmemcpy F -GLIBC_2.2.5 wmemmove F -GLIBC_2.2.5 wmempcpy F -GLIBC_2.2.5 wmemset F -GLIBC_2.2.5 wordexp F -GLIBC_2.2.5 wordfree F -GLIBC_2.2.5 wprintf F -GLIBC_2.2.5 write F -GLIBC_2.2.5 writev F -GLIBC_2.2.5 wscanf F -GLIBC_2.2.5 xdecrypt F -GLIBC_2.2.5 xdr_accepted_reply F -GLIBC_2.2.5 xdr_array F -GLIBC_2.2.5 xdr_authdes_cred F -GLIBC_2.2.5 xdr_authdes_verf F -GLIBC_2.2.5 xdr_authunix_parms F -GLIBC_2.2.5 xdr_bool F -GLIBC_2.2.5 xdr_bytes F -GLIBC_2.2.5 xdr_callhdr F -GLIBC_2.2.5 xdr_callmsg F -GLIBC_2.2.5 xdr_char F -GLIBC_2.2.5 xdr_cryptkeyarg F -GLIBC_2.2.5 xdr_cryptkeyarg2 F -GLIBC_2.2.5 xdr_cryptkeyres F -GLIBC_2.2.5 xdr_des_block F -GLIBC_2.2.5 xdr_double F -GLIBC_2.2.5 xdr_enum F -GLIBC_2.2.5 xdr_float F -GLIBC_2.2.5 xdr_free F -GLIBC_2.2.5 xdr_getcredres F -GLIBC_2.2.5 xdr_hyper F -GLIBC_2.2.5 xdr_int F -GLIBC_2.2.5 xdr_int16_t F -GLIBC_2.2.5 xdr_int32_t F -GLIBC_2.2.5 xdr_int64_t F -GLIBC_2.2.5 xdr_int8_t F -GLIBC_2.2.5 xdr_key_netstarg F -GLIBC_2.2.5 xdr_key_netstres F -GLIBC_2.2.5 xdr_keybuf F -GLIBC_2.2.5 xdr_keystatus F -GLIBC_2.2.5 xdr_long F -GLIBC_2.2.5 xdr_longlong_t F -GLIBC_2.2.5 xdr_netnamestr F -GLIBC_2.2.5 xdr_netobj F -GLIBC_2.2.5 xdr_opaque F -GLIBC_2.2.5 xdr_opaque_auth F -GLIBC_2.2.5 xdr_pmap F -GLIBC_2.2.5 xdr_pmaplist F -GLIBC_2.2.5 xdr_pointer F -GLIBC_2.2.5 xdr_reference F -GLIBC_2.2.5 xdr_rejected_reply F -GLIBC_2.2.5 xdr_replymsg F -GLIBC_2.2.5 xdr_rmtcall_args F -GLIBC_2.2.5 xdr_rmtcallres F -GLIBC_2.2.5 xdr_short F -GLIBC_2.2.5 xdr_sizeof F -GLIBC_2.2.5 xdr_string F -GLIBC_2.2.5 xdr_u_char F -GLIBC_2.2.5 xdr_u_hyper F -GLIBC_2.2.5 xdr_u_int F -GLIBC_2.2.5 xdr_u_long F -GLIBC_2.2.5 xdr_u_longlong_t F -GLIBC_2.2.5 xdr_u_short F -GLIBC_2.2.5 xdr_uint16_t F -GLIBC_2.2.5 xdr_uint32_t F -GLIBC_2.2.5 xdr_uint64_t F -GLIBC_2.2.5 xdr_uint8_t F -GLIBC_2.2.5 xdr_union F -GLIBC_2.2.5 xdr_unixcred F -GLIBC_2.2.5 xdr_vector F -GLIBC_2.2.5 xdr_void F -GLIBC_2.2.5 xdr_wrapstring F -GLIBC_2.2.5 xdrmem_create F -GLIBC_2.2.5 xdrrec_create F -GLIBC_2.2.5 xdrrec_endofrecord F -GLIBC_2.2.5 xdrrec_eof F -GLIBC_2.2.5 xdrrec_skiprecord F -GLIBC_2.2.5 xdrstdio_create F -GLIBC_2.2.5 xencrypt F -GLIBC_2.2.5 xprt_register F -GLIBC_2.2.5 xprt_unregister F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 __ctype_b_loc F -GLIBC_2.3 __ctype_tolower_loc F -GLIBC_2.3 __ctype_toupper_loc F -GLIBC_2.3 __isctype F -GLIBC_2.3 __strftime_l F -GLIBC_2.3 __uselocale F -GLIBC_2.3 __wcsftime_l F -GLIBC_2.3 _sys_errlist D 0x3f0 -GLIBC_2.3 _sys_nerr D 0x4 -GLIBC_2.3 duplocale F -GLIBC_2.3 fgetxattr F -GLIBC_2.3 flistxattr F -GLIBC_2.3 freeifaddrs F -GLIBC_2.3 freelocale F -GLIBC_2.3 fremovexattr F -GLIBC_2.3 fsetxattr F -GLIBC_2.3 futimes F -GLIBC_2.3 getifaddrs F -GLIBC_2.3 getxattr F -GLIBC_2.3 isalnum_l F -GLIBC_2.3 isalpha_l F -GLIBC_2.3 isblank_l F -GLIBC_2.3 iscntrl_l F -GLIBC_2.3 isctype F -GLIBC_2.3 isdigit_l F -GLIBC_2.3 isgraph_l F -GLIBC_2.3 islower_l F -GLIBC_2.3 isprint_l F -GLIBC_2.3 ispunct_l F -GLIBC_2.3 isspace_l F -GLIBC_2.3 isupper_l F -GLIBC_2.3 iswalnum_l F -GLIBC_2.3 iswalpha_l F -GLIBC_2.3 iswblank_l F -GLIBC_2.3 iswcntrl_l F -GLIBC_2.3 iswctype_l F -GLIBC_2.3 iswdigit_l F -GLIBC_2.3 iswgraph_l F -GLIBC_2.3 iswlower_l F -GLIBC_2.3 iswprint_l F -GLIBC_2.3 iswpunct_l F -GLIBC_2.3 iswspace_l F -GLIBC_2.3 iswupper_l F -GLIBC_2.3 iswxdigit_l F -GLIBC_2.3 isxdigit_l F -GLIBC_2.3 lgetxattr F -GLIBC_2.3 listxattr F -GLIBC_2.3 llistxattr F -GLIBC_2.3 lremovexattr F -GLIBC_2.3 lsetxattr F -GLIBC_2.3 lutimes F -GLIBC_2.3 newlocale F -GLIBC_2.3 nl_langinfo_l F -GLIBC_2.3 readahead F -GLIBC_2.3 realpath F -GLIBC_2.3 removexattr F -GLIBC_2.3 sendfile64 F -GLIBC_2.3 setxattr F -GLIBC_2.3 strcasecmp_l F -GLIBC_2.3 strcoll_l F -GLIBC_2.3 strfmon_l F -GLIBC_2.3 strftime_l F -GLIBC_2.3 strncasecmp_l F -GLIBC_2.3 strtod_l F -GLIBC_2.3 strtof_l F -GLIBC_2.3 strtol_l F -GLIBC_2.3 strtold_l F -GLIBC_2.3 strtoul_l F -GLIBC_2.3 strxfrm_l F -GLIBC_2.3 sys_errlist D 0x3f0 -GLIBC_2.3 sys_nerr D 0x4 -GLIBC_2.3 tolower_l F -GLIBC_2.3 toupper_l F -GLIBC_2.3 towctrans_l F -GLIBC_2.3 towlower_l F -GLIBC_2.3 towupper_l F -GLIBC_2.3 uselocale F -GLIBC_2.3 wcscasecmp_l F -GLIBC_2.3 wcscoll_l F -GLIBC_2.3 wcsftime_l F -GLIBC_2.3 wcsncasecmp_l F -GLIBC_2.3 wcstod_l F -GLIBC_2.3 wcstof_l F -GLIBC_2.3 wcstol_l F -GLIBC_2.3 wcstold_l F -GLIBC_2.3 wcstoll_l F -GLIBC_2.3 wcstoul_l F -GLIBC_2.3 wcstoull_l F -GLIBC_2.3 wcsxfrm_l F -GLIBC_2.3 wctrans_l F -GLIBC_2.3 wctype_l F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __register_atfork F -GLIBC_2.3.2 epoll_create F -GLIBC_2.3.2 epoll_ctl F -GLIBC_2.3.2 epoll_wait F -GLIBC_2.3.2 lchmod F -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.2 strptime_l F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 _sys_siglist D 0x208 -GLIBC_2.3.3 gnu_dev_major F -GLIBC_2.3.3 gnu_dev_makedev F -GLIBC_2.3.3 gnu_dev_minor F -GLIBC_2.3.3 inet6_option_alloc F -GLIBC_2.3.3 inet6_option_append F -GLIBC_2.3.3 inet6_option_find F -GLIBC_2.3.3 inet6_option_init F -GLIBC_2.3.3 inet6_option_next F -GLIBC_2.3.3 inet6_option_space F -GLIBC_2.3.3 nftw F -GLIBC_2.3.3 nftw64 F -GLIBC_2.3.3 remap_file_pages F -GLIBC_2.3.3 sched_getaffinity F -GLIBC_2.3.3 sched_setaffinity F -GLIBC_2.3.3 semtimedop F -GLIBC_2.3.3 strtoll_l F -GLIBC_2.3.3 strtoull_l F -GLIBC_2.3.3 sys_sigabbrev D 0x208 -GLIBC_2.3.3 sys_siglist D 0x208 -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 __chk_fail F -GLIBC_2.3.4 __fprintf_chk F -GLIBC_2.3.4 __gets_chk F -GLIBC_2.3.4 __memcpy_chk F -GLIBC_2.3.4 __memmove_chk F -GLIBC_2.3.4 __mempcpy_chk F -GLIBC_2.3.4 __memset_chk F -GLIBC_2.3.4 __printf_chk F -GLIBC_2.3.4 __snprintf_chk F -GLIBC_2.3.4 __sprintf_chk F -GLIBC_2.3.4 __stpcpy_chk F -GLIBC_2.3.4 __strcat_chk F -GLIBC_2.3.4 __strcpy_chk F -GLIBC_2.3.4 __strncat_chk F -GLIBC_2.3.4 __strncpy_chk F -GLIBC_2.3.4 __vfprintf_chk F -GLIBC_2.3.4 __vprintf_chk F -GLIBC_2.3.4 __vsnprintf_chk F -GLIBC_2.3.4 __vsprintf_chk F -GLIBC_2.3.4 __xpg_strerror_r F -GLIBC_2.3.4 getipv4sourcefilter F -GLIBC_2.3.4 getsourcefilter F -GLIBC_2.3.4 regexec F -GLIBC_2.3.4 sched_getaffinity F -GLIBC_2.3.4 sched_setaffinity F -GLIBC_2.3.4 setipv4sourcefilter F -GLIBC_2.3.4 setsourcefilter F -GLIBC_2.3.4 xdr_quad_t F -GLIBC_2.3.4 xdr_u_quad_t F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 __confstr_chk F -GLIBC_2.4 __fgets_chk F -GLIBC_2.4 __fgets_unlocked_chk F -GLIBC_2.4 __fgetws_chk F -GLIBC_2.4 __fgetws_unlocked_chk F -GLIBC_2.4 __fwprintf_chk F -GLIBC_2.4 __fxstatat F -GLIBC_2.4 __fxstatat64 F -GLIBC_2.4 __getcwd_chk F -GLIBC_2.4 __getdomainname_chk F -GLIBC_2.4 __getgroups_chk F -GLIBC_2.4 __gethostname_chk F -GLIBC_2.4 __getlogin_r_chk F -GLIBC_2.4 __getwd_chk F -GLIBC_2.4 __mbsnrtowcs_chk F -GLIBC_2.4 __mbsrtowcs_chk F -GLIBC_2.4 __mbstowcs_chk F -GLIBC_2.4 __pread64_chk F -GLIBC_2.4 __pread_chk F -GLIBC_2.4 __ptsname_r_chk F -GLIBC_2.4 __read_chk F -GLIBC_2.4 __readlink_chk F -GLIBC_2.4 __realpath_chk F -GLIBC_2.4 __recv_chk F -GLIBC_2.4 __recvfrom_chk F -GLIBC_2.4 __stack_chk_fail F -GLIBC_2.4 __stpncpy_chk F -GLIBC_2.4 __swprintf_chk F -GLIBC_2.4 __syslog_chk F -GLIBC_2.4 __ttyname_r_chk F -GLIBC_2.4 __vfwprintf_chk F -GLIBC_2.4 __vswprintf_chk F -GLIBC_2.4 __vsyslog_chk F -GLIBC_2.4 __vwprintf_chk F -GLIBC_2.4 __wcpcpy_chk F -GLIBC_2.4 __wcpncpy_chk F -GLIBC_2.4 __wcrtomb_chk F -GLIBC_2.4 __wcscat_chk F -GLIBC_2.4 __wcscpy_chk F -GLIBC_2.4 __wcsncat_chk F -GLIBC_2.4 __wcsncpy_chk F -GLIBC_2.4 __wcsnrtombs_chk F -GLIBC_2.4 __wcsrtombs_chk F -GLIBC_2.4 __wcstombs_chk F -GLIBC_2.4 __wctomb_chk F -GLIBC_2.4 __wmemcpy_chk F -GLIBC_2.4 __wmemmove_chk F -GLIBC_2.4 __wmempcpy_chk F -GLIBC_2.4 __wmemset_chk F -GLIBC_2.4 __wprintf_chk F -GLIBC_2.4 __xmknodat F -GLIBC_2.4 _sys_errlist D 0x420 -GLIBC_2.4 _sys_nerr D 0x4 -GLIBC_2.4 eaccess F -GLIBC_2.4 faccessat F -GLIBC_2.4 fchmodat F -GLIBC_2.4 fchownat F -GLIBC_2.4 fdopendir F -GLIBC_2.4 futimesat F -GLIBC_2.4 inotify_add_watch F -GLIBC_2.4 inotify_init F -GLIBC_2.4 inotify_rm_watch F -GLIBC_2.4 linkat F -GLIBC_2.4 mkdirat F -GLIBC_2.4 mkfifoat F -GLIBC_2.4 open_wmemstream F -GLIBC_2.4 openat F -GLIBC_2.4 openat64 F -GLIBC_2.4 ppoll F -GLIBC_2.4 readlinkat F -GLIBC_2.4 renameat F -GLIBC_2.4 symlinkat F -GLIBC_2.4 sys_errlist D 0x420 -GLIBC_2.4 sys_nerr D 0x4 -GLIBC_2.4 unlinkat F -GLIBC_2.4 unshare F -GLIBC_2.5 GLIBC_2.5 A -GLIBC_2.5 __readlinkat_chk F -GLIBC_2.5 inet6_opt_append F -GLIBC_2.5 inet6_opt_find F -GLIBC_2.5 inet6_opt_finish F -GLIBC_2.5 inet6_opt_get_val F -GLIBC_2.5 inet6_opt_init F -GLIBC_2.5 inet6_opt_next F -GLIBC_2.5 inet6_opt_set_val F -GLIBC_2.5 inet6_rth_add F -GLIBC_2.5 inet6_rth_getaddr F -GLIBC_2.5 inet6_rth_init F -GLIBC_2.5 inet6_rth_reverse F -GLIBC_2.5 inet6_rth_segments F -GLIBC_2.5 inet6_rth_space F -GLIBC_2.5 splice F -GLIBC_2.5 tee F -GLIBC_2.5 vmsplice F -GLIBC_2.6 GLIBC_2.6 A -GLIBC_2.6 __sched_cpucount F -GLIBC_2.6 epoll_pwait F -GLIBC_2.6 futimens F -GLIBC_2.6 sched_getcpu F -GLIBC_2.6 strerror_l F -GLIBC_2.6 sync_file_range F -GLIBC_2.6 utimensat F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __fread_chk F -GLIBC_2.7 __fread_unlocked_chk F -GLIBC_2.7 __isoc99_fscanf F -GLIBC_2.7 __isoc99_fwscanf F -GLIBC_2.7 __isoc99_scanf F -GLIBC_2.7 __isoc99_sscanf F -GLIBC_2.7 __isoc99_swscanf F -GLIBC_2.7 __isoc99_vfscanf F -GLIBC_2.7 __isoc99_vfwscanf F -GLIBC_2.7 __isoc99_vscanf F -GLIBC_2.7 __isoc99_vsscanf F -GLIBC_2.7 __isoc99_vswscanf F -GLIBC_2.7 __isoc99_vwscanf F -GLIBC_2.7 __isoc99_wscanf F -GLIBC_2.7 __open64_2 F -GLIBC_2.7 __open_2 F -GLIBC_2.7 __openat64_2 F -GLIBC_2.7 __openat_2 F -GLIBC_2.7 __sched_cpualloc F -GLIBC_2.7 __sched_cpufree F -GLIBC_2.7 eventfd F -GLIBC_2.7 eventfd_read F -GLIBC_2.7 eventfd_write F -GLIBC_2.7 mkostemp F -GLIBC_2.7 mkostemp64 F -GLIBC_2.7 signalfd F -GLIBC_2.8 GLIBC_2.8 A -GLIBC_2.8 __asprintf_chk F -GLIBC_2.8 __dprintf_chk F -GLIBC_2.8 __obstack_printf_chk F -GLIBC_2.8 __obstack_vprintf_chk F -GLIBC_2.8 __vasprintf_chk F -GLIBC_2.8 __vdprintf_chk F -GLIBC_2.8 qsort_r F -GLIBC_2.8 timerfd_create F -GLIBC_2.8 timerfd_gettime F -GLIBC_2.8 timerfd_settime F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 dup3 F -GLIBC_2.9 epoll_create1 F -GLIBC_2.9 inotify_init1 F -GLIBC_2.9 pipe2 F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libcrypt.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libcrypt.abilist deleted file mode 100644 index df20c0f259..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.2.5 GLIBC_2.2.5 A -GLIBC_2.2.5 crypt F -GLIBC_2.2.5 crypt_r F -GLIBC_2.2.5 encrypt F -GLIBC_2.2.5 encrypt_r F -GLIBC_2.2.5 fcrypt F -GLIBC_2.2.5 setkey F -GLIBC_2.2.5 setkey_r F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libdl.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libdl.abilist deleted file mode 100644 index ca3d1f7936..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/libdl.abilist +++ /dev/null @@ -1,12 +0,0 @@ -GLIBC_2.2.5 GLIBC_2.2.5 A -GLIBC_2.2.5 dladdr F -GLIBC_2.2.5 dlclose F -GLIBC_2.2.5 dlerror F -GLIBC_2.2.5 dlopen F -GLIBC_2.2.5 dlsym F -GLIBC_2.2.5 dlvsym F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 dladdr1 F -GLIBC_2.3.3 dlinfo F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 dlmopen F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist deleted file mode 100644 index fc68ef679a..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist +++ /dev/null @@ -1,465 +0,0 @@ -GLIBC_2.15 GLIBC_2.15 A -GLIBC_2.15 __acos_finite F -GLIBC_2.15 __acosf_finite F -GLIBC_2.15 __acosh_finite F -GLIBC_2.15 __acoshf_finite F -GLIBC_2.15 __acoshl_finite F -GLIBC_2.15 __acosl_finite F -GLIBC_2.15 __asin_finite F -GLIBC_2.15 __asinf_finite F -GLIBC_2.15 __asinl_finite F -GLIBC_2.15 __atan2_finite F -GLIBC_2.15 __atan2f_finite F -GLIBC_2.15 __atan2l_finite F -GLIBC_2.15 __atanh_finite F -GLIBC_2.15 __atanhf_finite F -GLIBC_2.15 __atanhl_finite F -GLIBC_2.15 __cosh_finite F -GLIBC_2.15 __coshf_finite F -GLIBC_2.15 __coshl_finite F -GLIBC_2.15 __exp10_finite F -GLIBC_2.15 __exp10f_finite F -GLIBC_2.15 __exp10l_finite F -GLIBC_2.15 __exp2_finite F -GLIBC_2.15 __exp2f_finite F -GLIBC_2.15 __exp2l_finite F -GLIBC_2.15 __exp_finite F -GLIBC_2.15 __expf_finite F -GLIBC_2.15 __expl_finite F -GLIBC_2.15 __fmod_finite F -GLIBC_2.15 __fmodf_finite F -GLIBC_2.15 __fmodl_finite F -GLIBC_2.15 __gamma_r_finite F -GLIBC_2.15 __gammaf_r_finite F -GLIBC_2.15 __gammal_r_finite F -GLIBC_2.15 __hypot_finite F -GLIBC_2.15 __hypotf_finite F -GLIBC_2.15 __hypotl_finite F -GLIBC_2.15 __j0_finite F -GLIBC_2.15 __j0f_finite F -GLIBC_2.15 __j0l_finite F -GLIBC_2.15 __j1_finite F -GLIBC_2.15 __j1f_finite F -GLIBC_2.15 __j1l_finite F -GLIBC_2.15 __jn_finite F -GLIBC_2.15 __jnf_finite F -GLIBC_2.15 __jnl_finite F -GLIBC_2.15 __lgamma_r_finite F -GLIBC_2.15 __lgammaf_r_finite F -GLIBC_2.15 __lgammal_r_finite F -GLIBC_2.15 __log10_finite F -GLIBC_2.15 __log10f_finite F -GLIBC_2.15 __log10l_finite F -GLIBC_2.15 __log2_finite F -GLIBC_2.15 __log2f_finite F -GLIBC_2.15 __log2l_finite F -GLIBC_2.15 __log_finite F -GLIBC_2.15 __logf_finite F -GLIBC_2.15 __logl_finite F -GLIBC_2.15 __pow_finite F -GLIBC_2.15 __powf_finite F -GLIBC_2.15 __powl_finite F -GLIBC_2.15 __remainder_finite F -GLIBC_2.15 __remainderf_finite F -GLIBC_2.15 __remainderl_finite F -GLIBC_2.15 __scalb_finite F -GLIBC_2.15 __scalbf_finite F -GLIBC_2.15 __scalbl_finite F -GLIBC_2.15 __sinh_finite F -GLIBC_2.15 __sinhf_finite F -GLIBC_2.15 __sinhl_finite F -GLIBC_2.15 __sqrt_finite F -GLIBC_2.15 __sqrtf_finite F -GLIBC_2.15 __sqrtl_finite F -GLIBC_2.15 __y0_finite F -GLIBC_2.15 __y0f_finite F -GLIBC_2.15 __y0l_finite F -GLIBC_2.15 __y1_finite F -GLIBC_2.15 __y1f_finite F -GLIBC_2.15 __y1l_finite F -GLIBC_2.15 __yn_finite F -GLIBC_2.15 __ynf_finite F -GLIBC_2.15 __ynl_finite F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.2.5 GLIBC_2.2.5 A -GLIBC_2.2.5 _LIB_VERSION D 0x4 -GLIBC_2.2.5 __clog10 F -GLIBC_2.2.5 __clog10f F -GLIBC_2.2.5 __clog10l F -GLIBC_2.2.5 __finite F -GLIBC_2.2.5 __finitef F -GLIBC_2.2.5 __finitel F -GLIBC_2.2.5 __fpclassify F -GLIBC_2.2.5 __fpclassifyf F -GLIBC_2.2.5 __fpclassifyl F -GLIBC_2.2.5 __signbit F -GLIBC_2.2.5 __signbitf F -GLIBC_2.2.5 __signbitl F -GLIBC_2.2.5 acos F -GLIBC_2.2.5 acosf F -GLIBC_2.2.5 acosh F -GLIBC_2.2.5 acoshf F -GLIBC_2.2.5 acoshl F -GLIBC_2.2.5 acosl F -GLIBC_2.2.5 asin F -GLIBC_2.2.5 asinf F -GLIBC_2.2.5 asinh F -GLIBC_2.2.5 asinhf F -GLIBC_2.2.5 asinhl F -GLIBC_2.2.5 asinl F -GLIBC_2.2.5 atan F -GLIBC_2.2.5 atan2 F -GLIBC_2.2.5 atan2f F -GLIBC_2.2.5 atan2l F -GLIBC_2.2.5 atanf F -GLIBC_2.2.5 atanh F -GLIBC_2.2.5 atanhf F -GLIBC_2.2.5 atanhl F -GLIBC_2.2.5 atanl F -GLIBC_2.2.5 cabs F -GLIBC_2.2.5 cabsf F -GLIBC_2.2.5 cabsl F -GLIBC_2.2.5 cacos F -GLIBC_2.2.5 cacosf F -GLIBC_2.2.5 cacosh F -GLIBC_2.2.5 cacoshf F -GLIBC_2.2.5 cacoshl F -GLIBC_2.2.5 cacosl F -GLIBC_2.2.5 carg F -GLIBC_2.2.5 cargf F -GLIBC_2.2.5 cargl F -GLIBC_2.2.5 casin F -GLIBC_2.2.5 casinf F -GLIBC_2.2.5 casinh F -GLIBC_2.2.5 casinhf F -GLIBC_2.2.5 casinhl F -GLIBC_2.2.5 casinl F -GLIBC_2.2.5 catan F -GLIBC_2.2.5 catanf F -GLIBC_2.2.5 catanh F -GLIBC_2.2.5 catanhf F -GLIBC_2.2.5 catanhl F -GLIBC_2.2.5 catanl F -GLIBC_2.2.5 cbrt F -GLIBC_2.2.5 cbrtf F -GLIBC_2.2.5 cbrtl F -GLIBC_2.2.5 ccos F -GLIBC_2.2.5 ccosf F -GLIBC_2.2.5 ccosh F -GLIBC_2.2.5 ccoshf F -GLIBC_2.2.5 ccoshl F -GLIBC_2.2.5 ccosl F -GLIBC_2.2.5 ceil F -GLIBC_2.2.5 ceilf F -GLIBC_2.2.5 ceill F -GLIBC_2.2.5 cexp F -GLIBC_2.2.5 cexpf F -GLIBC_2.2.5 cexpl F -GLIBC_2.2.5 cimag F -GLIBC_2.2.5 cimagf F -GLIBC_2.2.5 cimagl F -GLIBC_2.2.5 clog F -GLIBC_2.2.5 clog10 F -GLIBC_2.2.5 clog10f F -GLIBC_2.2.5 clog10l F -GLIBC_2.2.5 clogf F -GLIBC_2.2.5 clogl F -GLIBC_2.2.5 conj F -GLIBC_2.2.5 conjf F -GLIBC_2.2.5 conjl F -GLIBC_2.2.5 copysign F -GLIBC_2.2.5 copysignf F -GLIBC_2.2.5 copysignl F -GLIBC_2.2.5 cos F -GLIBC_2.2.5 cosf F -GLIBC_2.2.5 cosh F -GLIBC_2.2.5 coshf F -GLIBC_2.2.5 coshl F -GLIBC_2.2.5 cosl F -GLIBC_2.2.5 cpow F -GLIBC_2.2.5 cpowf F -GLIBC_2.2.5 cpowl F -GLIBC_2.2.5 cproj F -GLIBC_2.2.5 cprojf F -GLIBC_2.2.5 cprojl F -GLIBC_2.2.5 creal F -GLIBC_2.2.5 crealf F -GLIBC_2.2.5 creall F -GLIBC_2.2.5 csin F -GLIBC_2.2.5 csinf F -GLIBC_2.2.5 csinh F -GLIBC_2.2.5 csinhf F -GLIBC_2.2.5 csinhl F -GLIBC_2.2.5 csinl F -GLIBC_2.2.5 csqrt F -GLIBC_2.2.5 csqrtf F -GLIBC_2.2.5 csqrtl F -GLIBC_2.2.5 ctan F -GLIBC_2.2.5 ctanf F -GLIBC_2.2.5 ctanh F -GLIBC_2.2.5 ctanhf F -GLIBC_2.2.5 ctanhl F -GLIBC_2.2.5 ctanl F -GLIBC_2.2.5 drem F -GLIBC_2.2.5 dremf F -GLIBC_2.2.5 dreml F -GLIBC_2.2.5 erf F -GLIBC_2.2.5 erfc F -GLIBC_2.2.5 erfcf F -GLIBC_2.2.5 erfcl F -GLIBC_2.2.5 erff F -GLIBC_2.2.5 erfl F -GLIBC_2.2.5 exp F -GLIBC_2.2.5 exp10 F -GLIBC_2.2.5 exp10f F -GLIBC_2.2.5 exp10l F -GLIBC_2.2.5 exp2 F -GLIBC_2.2.5 exp2f F -GLIBC_2.2.5 exp2l F -GLIBC_2.2.5 expf F -GLIBC_2.2.5 expl F -GLIBC_2.2.5 expm1 F -GLIBC_2.2.5 expm1f F -GLIBC_2.2.5 expm1l F -GLIBC_2.2.5 fabs F -GLIBC_2.2.5 fabsf F -GLIBC_2.2.5 fabsl F -GLIBC_2.2.5 fdim F -GLIBC_2.2.5 fdimf F -GLIBC_2.2.5 fdiml F -GLIBC_2.2.5 feclearexcept F -GLIBC_2.2.5 fedisableexcept F -GLIBC_2.2.5 feenableexcept F -GLIBC_2.2.5 fegetenv F -GLIBC_2.2.5 fegetexcept F -GLIBC_2.2.5 fegetexceptflag F -GLIBC_2.2.5 fegetround F -GLIBC_2.2.5 feholdexcept F -GLIBC_2.2.5 feraiseexcept F -GLIBC_2.2.5 fesetenv F -GLIBC_2.2.5 fesetexceptflag F -GLIBC_2.2.5 fesetround F -GLIBC_2.2.5 fetestexcept F -GLIBC_2.2.5 feupdateenv F -GLIBC_2.2.5 finite F -GLIBC_2.2.5 finitef F -GLIBC_2.2.5 finitel F -GLIBC_2.2.5 floor F -GLIBC_2.2.5 floorf F -GLIBC_2.2.5 floorl F -GLIBC_2.2.5 fma F -GLIBC_2.2.5 fmaf F -GLIBC_2.2.5 fmal F -GLIBC_2.2.5 fmax F -GLIBC_2.2.5 fmaxf F -GLIBC_2.2.5 fmaxl F -GLIBC_2.2.5 fmin F -GLIBC_2.2.5 fminf F -GLIBC_2.2.5 fminl F -GLIBC_2.2.5 fmod F -GLIBC_2.2.5 fmodf F -GLIBC_2.2.5 fmodl F -GLIBC_2.2.5 frexp F -GLIBC_2.2.5 frexpf F -GLIBC_2.2.5 frexpl F -GLIBC_2.2.5 gamma F -GLIBC_2.2.5 gammaf F -GLIBC_2.2.5 gammal F -GLIBC_2.2.5 hypot F -GLIBC_2.2.5 hypotf F -GLIBC_2.2.5 hypotl F -GLIBC_2.2.5 ilogb F -GLIBC_2.2.5 ilogbf F -GLIBC_2.2.5 ilogbl F -GLIBC_2.2.5 j0 F -GLIBC_2.2.5 j0f F -GLIBC_2.2.5 j0l F -GLIBC_2.2.5 j1 F -GLIBC_2.2.5 j1f F -GLIBC_2.2.5 j1l F -GLIBC_2.2.5 jn F -GLIBC_2.2.5 jnf F -GLIBC_2.2.5 jnl F -GLIBC_2.2.5 ldexp F -GLIBC_2.2.5 ldexpf F -GLIBC_2.2.5 ldexpl F -GLIBC_2.2.5 lgamma F -GLIBC_2.2.5 lgamma_r F -GLIBC_2.2.5 lgammaf F -GLIBC_2.2.5 lgammaf_r F -GLIBC_2.2.5 lgammal F -GLIBC_2.2.5 lgammal_r F -GLIBC_2.2.5 llrint F -GLIBC_2.2.5 llrintf F -GLIBC_2.2.5 llrintl F -GLIBC_2.2.5 llround F -GLIBC_2.2.5 llroundf F -GLIBC_2.2.5 llroundl F -GLIBC_2.2.5 log F -GLIBC_2.2.5 log10 F -GLIBC_2.2.5 log10f F -GLIBC_2.2.5 log10l F -GLIBC_2.2.5 log1p F -GLIBC_2.2.5 log1pf F -GLIBC_2.2.5 log1pl F -GLIBC_2.2.5 log2 F -GLIBC_2.2.5 log2f F -GLIBC_2.2.5 log2l F -GLIBC_2.2.5 logb F -GLIBC_2.2.5 logbf F -GLIBC_2.2.5 logbl F -GLIBC_2.2.5 logf F -GLIBC_2.2.5 logl F -GLIBC_2.2.5 lrint F -GLIBC_2.2.5 lrintf F -GLIBC_2.2.5 lrintl F -GLIBC_2.2.5 lround F -GLIBC_2.2.5 lroundf F -GLIBC_2.2.5 lroundl F -GLIBC_2.2.5 matherr F -GLIBC_2.2.5 modf F -GLIBC_2.2.5 modff F -GLIBC_2.2.5 modfl F -GLIBC_2.2.5 nan F -GLIBC_2.2.5 nanf F -GLIBC_2.2.5 nanl F -GLIBC_2.2.5 nearbyint F -GLIBC_2.2.5 nearbyintf F -GLIBC_2.2.5 nearbyintl F -GLIBC_2.2.5 nextafter F -GLIBC_2.2.5 nextafterf F -GLIBC_2.2.5 nextafterl F -GLIBC_2.2.5 nexttoward F -GLIBC_2.2.5 nexttowardf F -GLIBC_2.2.5 nexttowardl F -GLIBC_2.2.5 pow F -GLIBC_2.2.5 pow10 F -GLIBC_2.2.5 pow10f F -GLIBC_2.2.5 pow10l F -GLIBC_2.2.5 powf F -GLIBC_2.2.5 powl F -GLIBC_2.2.5 remainder F -GLIBC_2.2.5 remainderf F -GLIBC_2.2.5 remainderl F -GLIBC_2.2.5 remquo F -GLIBC_2.2.5 remquof F -GLIBC_2.2.5 remquol F -GLIBC_2.2.5 rint F -GLIBC_2.2.5 rintf F -GLIBC_2.2.5 rintl F -GLIBC_2.2.5 round F -GLIBC_2.2.5 roundf F -GLIBC_2.2.5 roundl F -GLIBC_2.2.5 scalb F -GLIBC_2.2.5 scalbf F -GLIBC_2.2.5 scalbl F -GLIBC_2.2.5 scalbln F -GLIBC_2.2.5 scalblnf F -GLIBC_2.2.5 scalblnl F -GLIBC_2.2.5 scalbn F -GLIBC_2.2.5 scalbnf F -GLIBC_2.2.5 scalbnl F -GLIBC_2.2.5 signgam D 0x4 -GLIBC_2.2.5 significand F -GLIBC_2.2.5 significandf F -GLIBC_2.2.5 significandl F -GLIBC_2.2.5 sin F -GLIBC_2.2.5 sincos F -GLIBC_2.2.5 sincosf F -GLIBC_2.2.5 sincosl F -GLIBC_2.2.5 sinf F -GLIBC_2.2.5 sinh F -GLIBC_2.2.5 sinhf F -GLIBC_2.2.5 sinhl F -GLIBC_2.2.5 sinl F -GLIBC_2.2.5 sqrt F -GLIBC_2.2.5 sqrtf F -GLIBC_2.2.5 sqrtl F -GLIBC_2.2.5 tan F -GLIBC_2.2.5 tanf F -GLIBC_2.2.5 tanh F -GLIBC_2.2.5 tanhf F -GLIBC_2.2.5 tanhl F -GLIBC_2.2.5 tanl F -GLIBC_2.2.5 tgamma F -GLIBC_2.2.5 tgammaf F -GLIBC_2.2.5 tgammal F -GLIBC_2.2.5 trunc F -GLIBC_2.2.5 truncf F -GLIBC_2.2.5 truncl F -GLIBC_2.2.5 y0 F -GLIBC_2.2.5 y0f F -GLIBC_2.2.5 y0l F -GLIBC_2.2.5 y1 F -GLIBC_2.2.5 y1f F -GLIBC_2.2.5 y1l F -GLIBC_2.2.5 yn F -GLIBC_2.2.5 ynf F -GLIBC_2.2.5 ynl F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iscanonicall F -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F -GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libnsl.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libnsl.abilist deleted file mode 100644 index 571fe97d88..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/libnsl.abilist +++ /dev/null @@ -1,122 +0,0 @@ -GLIBC_2.2.5 GLIBC_2.2.5 A -GLIBC_2.2.5 __free_fdresult F -GLIBC_2.2.5 __nis_default_access F -GLIBC_2.2.5 __nis_default_group F -GLIBC_2.2.5 __nis_default_owner F -GLIBC_2.2.5 __nis_default_ttl F -GLIBC_2.2.5 __nis_finddirectory F -GLIBC_2.2.5 __nis_hash F -GLIBC_2.2.5 __nisbind_connect F -GLIBC_2.2.5 __nisbind_create F -GLIBC_2.2.5 __nisbind_destroy F -GLIBC_2.2.5 __nisbind_next F -GLIBC_2.2.5 __yp_check F -GLIBC_2.2.5 nis_add F -GLIBC_2.2.5 nis_add_entry F -GLIBC_2.2.5 nis_addmember F -GLIBC_2.2.5 nis_checkpoint F -GLIBC_2.2.5 nis_clone_directory F -GLIBC_2.2.5 nis_clone_object F -GLIBC_2.2.5 nis_clone_result F -GLIBC_2.2.5 nis_creategroup F -GLIBC_2.2.5 nis_destroy_object F -GLIBC_2.2.5 nis_destroygroup F -GLIBC_2.2.5 nis_dir_cmp F -GLIBC_2.2.5 nis_domain_of F -GLIBC_2.2.5 nis_domain_of_r F -GLIBC_2.2.5 nis_first_entry F -GLIBC_2.2.5 nis_free_directory F -GLIBC_2.2.5 nis_free_object F -GLIBC_2.2.5 nis_free_request F -GLIBC_2.2.5 nis_freenames F -GLIBC_2.2.5 nis_freeresult F -GLIBC_2.2.5 nis_freeservlist F -GLIBC_2.2.5 nis_freetags F -GLIBC_2.2.5 nis_getnames F -GLIBC_2.2.5 nis_getservlist F -GLIBC_2.2.5 nis_ismember F -GLIBC_2.2.5 nis_leaf_of F -GLIBC_2.2.5 nis_leaf_of_r F -GLIBC_2.2.5 nis_lerror F -GLIBC_2.2.5 nis_list F -GLIBC_2.2.5 nis_local_directory F -GLIBC_2.2.5 nis_local_group F -GLIBC_2.2.5 nis_local_host F -GLIBC_2.2.5 nis_local_principal F -GLIBC_2.2.5 nis_lookup F -GLIBC_2.2.5 nis_mkdir F -GLIBC_2.2.5 nis_modify F -GLIBC_2.2.5 nis_modify_entry F -GLIBC_2.2.5 nis_name_of F -GLIBC_2.2.5 nis_name_of_r F -GLIBC_2.2.5 nis_next_entry F -GLIBC_2.2.5 nis_perror F -GLIBC_2.2.5 nis_ping F -GLIBC_2.2.5 nis_print_directory F -GLIBC_2.2.5 nis_print_entry F -GLIBC_2.2.5 nis_print_group F -GLIBC_2.2.5 nis_print_group_entry F -GLIBC_2.2.5 nis_print_link F -GLIBC_2.2.5 nis_print_object F -GLIBC_2.2.5 nis_print_result F -GLIBC_2.2.5 nis_print_rights F -GLIBC_2.2.5 nis_print_table F -GLIBC_2.2.5 nis_read_obj F -GLIBC_2.2.5 nis_remove F -GLIBC_2.2.5 nis_remove_entry F -GLIBC_2.2.5 nis_removemember F -GLIBC_2.2.5 nis_rmdir F -GLIBC_2.2.5 nis_servstate F -GLIBC_2.2.5 nis_sperrno F -GLIBC_2.2.5 nis_sperror F -GLIBC_2.2.5 nis_sperror_r F -GLIBC_2.2.5 nis_stats F -GLIBC_2.2.5 nis_verifygroup F -GLIBC_2.2.5 nis_write_obj F -GLIBC_2.2.5 readColdStartFile F -GLIBC_2.2.5 writeColdStartFile F -GLIBC_2.2.5 xdr_cback_data F -GLIBC_2.2.5 xdr_domainname F -GLIBC_2.2.5 xdr_keydat F -GLIBC_2.2.5 xdr_mapname F -GLIBC_2.2.5 xdr_obj_p F -GLIBC_2.2.5 xdr_peername F -GLIBC_2.2.5 xdr_valdat F -GLIBC_2.2.5 xdr_yp_buf F -GLIBC_2.2.5 xdr_ypall F -GLIBC_2.2.5 xdr_ypbind_binding F -GLIBC_2.2.5 xdr_ypbind_resp F -GLIBC_2.2.5 xdr_ypbind_resptype F -GLIBC_2.2.5 xdr_ypbind_setdom F -GLIBC_2.2.5 xdr_ypdelete_args F -GLIBC_2.2.5 xdr_ypmap_parms F -GLIBC_2.2.5 xdr_ypmaplist F -GLIBC_2.2.5 xdr_yppush_status F -GLIBC_2.2.5 xdr_yppushresp_xfr F -GLIBC_2.2.5 xdr_ypreq_key F -GLIBC_2.2.5 xdr_ypreq_nokey F -GLIBC_2.2.5 xdr_ypreq_xfr F -GLIBC_2.2.5 xdr_ypresp_all F -GLIBC_2.2.5 xdr_ypresp_key_val F -GLIBC_2.2.5 xdr_ypresp_maplist F -GLIBC_2.2.5 xdr_ypresp_master F -GLIBC_2.2.5 xdr_ypresp_order F -GLIBC_2.2.5 xdr_ypresp_val F -GLIBC_2.2.5 xdr_ypresp_xfr F -GLIBC_2.2.5 xdr_ypstat F -GLIBC_2.2.5 xdr_ypupdate_args F -GLIBC_2.2.5 xdr_ypxfrstat F -GLIBC_2.2.5 yp_all F -GLIBC_2.2.5 yp_bind F -GLIBC_2.2.5 yp_first F -GLIBC_2.2.5 yp_get_default_domain F -GLIBC_2.2.5 yp_maplist F -GLIBC_2.2.5 yp_master F -GLIBC_2.2.5 yp_match F -GLIBC_2.2.5 yp_next F -GLIBC_2.2.5 yp_order F -GLIBC_2.2.5 yp_unbind F -GLIBC_2.2.5 yp_update F -GLIBC_2.2.5 ypbinderr_string F -GLIBC_2.2.5 yperr_string F -GLIBC_2.2.5 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist deleted file mode 100644 index 85365c057c..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist +++ /dev/null @@ -1,244 +0,0 @@ -GLIBC_2.11 GLIBC_2.11 A -GLIBC_2.11 pthread_sigqueue F -GLIBC_2.12 GLIBC_2.12 A -GLIBC_2.12 pthread_getname_np F -GLIBC_2.12 pthread_mutex_consistent F -GLIBC_2.12 pthread_mutexattr_getrobust F -GLIBC_2.12 pthread_mutexattr_setrobust F -GLIBC_2.12 pthread_setname_np F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F -GLIBC_2.2.5 GLIBC_2.2.5 A -GLIBC_2.2.5 _IO_flockfile F -GLIBC_2.2.5 _IO_ftrylockfile F -GLIBC_2.2.5 _IO_funlockfile F -GLIBC_2.2.5 __close F -GLIBC_2.2.5 __connect F -GLIBC_2.2.5 __errno_location F -GLIBC_2.2.5 __fcntl F -GLIBC_2.2.5 __fork F -GLIBC_2.2.5 __h_errno_location F -GLIBC_2.2.5 __libc_allocate_rtsig F -GLIBC_2.2.5 __libc_current_sigrtmax F -GLIBC_2.2.5 __libc_current_sigrtmin F -GLIBC_2.2.5 __lseek F -GLIBC_2.2.5 __open F -GLIBC_2.2.5 __open64 F -GLIBC_2.2.5 __pread64 F -GLIBC_2.2.5 __pthread_getspecific F -GLIBC_2.2.5 __pthread_key_create F -GLIBC_2.2.5 __pthread_mutex_destroy F -GLIBC_2.2.5 __pthread_mutex_init F -GLIBC_2.2.5 __pthread_mutex_lock F -GLIBC_2.2.5 __pthread_mutex_trylock F -GLIBC_2.2.5 __pthread_mutex_unlock F -GLIBC_2.2.5 __pthread_mutexattr_destroy F -GLIBC_2.2.5 __pthread_mutexattr_init F -GLIBC_2.2.5 __pthread_mutexattr_settype F -GLIBC_2.2.5 __pthread_once F -GLIBC_2.2.5 __pthread_rwlock_destroy F -GLIBC_2.2.5 __pthread_rwlock_init F -GLIBC_2.2.5 __pthread_rwlock_rdlock F -GLIBC_2.2.5 __pthread_rwlock_tryrdlock F -GLIBC_2.2.5 __pthread_rwlock_trywrlock F -GLIBC_2.2.5 __pthread_rwlock_unlock F -GLIBC_2.2.5 __pthread_rwlock_wrlock F -GLIBC_2.2.5 __pthread_setspecific F -GLIBC_2.2.5 __pwrite64 F -GLIBC_2.2.5 __read F -GLIBC_2.2.5 __res_state F -GLIBC_2.2.5 __send F -GLIBC_2.2.5 __sigaction F -GLIBC_2.2.5 __vfork F -GLIBC_2.2.5 __wait F -GLIBC_2.2.5 __write F -GLIBC_2.2.5 _pthread_cleanup_pop F -GLIBC_2.2.5 _pthread_cleanup_pop_restore F -GLIBC_2.2.5 _pthread_cleanup_push F -GLIBC_2.2.5 _pthread_cleanup_push_defer F -GLIBC_2.2.5 accept F -GLIBC_2.2.5 close F -GLIBC_2.2.5 connect F -GLIBC_2.2.5 fcntl F -GLIBC_2.2.5 flockfile F -GLIBC_2.2.5 fork F -GLIBC_2.2.5 fsync F -GLIBC_2.2.5 ftrylockfile F -GLIBC_2.2.5 funlockfile F -GLIBC_2.2.5 longjmp F -GLIBC_2.2.5 lseek F -GLIBC_2.2.5 lseek64 F -GLIBC_2.2.5 msync F -GLIBC_2.2.5 nanosleep F -GLIBC_2.2.5 open F -GLIBC_2.2.5 open64 F -GLIBC_2.2.5 pause F -GLIBC_2.2.5 pread F -GLIBC_2.2.5 pread64 F -GLIBC_2.2.5 pthread_atfork F -GLIBC_2.2.5 pthread_attr_destroy F -GLIBC_2.2.5 pthread_attr_getdetachstate F -GLIBC_2.2.5 pthread_attr_getguardsize F -GLIBC_2.2.5 pthread_attr_getinheritsched F -GLIBC_2.2.5 pthread_attr_getschedparam F -GLIBC_2.2.5 pthread_attr_getschedpolicy F -GLIBC_2.2.5 pthread_attr_getscope F -GLIBC_2.2.5 pthread_attr_getstack F -GLIBC_2.2.5 pthread_attr_getstackaddr F -GLIBC_2.2.5 pthread_attr_getstacksize F -GLIBC_2.2.5 pthread_attr_init F -GLIBC_2.2.5 pthread_attr_setdetachstate F -GLIBC_2.2.5 pthread_attr_setguardsize F -GLIBC_2.2.5 pthread_attr_setinheritsched F -GLIBC_2.2.5 pthread_attr_setschedparam F -GLIBC_2.2.5 pthread_attr_setschedpolicy F -GLIBC_2.2.5 pthread_attr_setscope F -GLIBC_2.2.5 pthread_attr_setstack F -GLIBC_2.2.5 pthread_attr_setstackaddr F -GLIBC_2.2.5 pthread_attr_setstacksize F -GLIBC_2.2.5 pthread_barrier_destroy F -GLIBC_2.2.5 pthread_barrier_init F -GLIBC_2.2.5 pthread_barrier_wait F -GLIBC_2.2.5 pthread_barrierattr_destroy F -GLIBC_2.2.5 pthread_barrierattr_init F -GLIBC_2.2.5 pthread_barrierattr_setpshared F -GLIBC_2.2.5 pthread_cancel F -GLIBC_2.2.5 pthread_cond_broadcast F -GLIBC_2.2.5 pthread_cond_destroy F -GLIBC_2.2.5 pthread_cond_init F -GLIBC_2.2.5 pthread_cond_signal F -GLIBC_2.2.5 pthread_cond_timedwait F -GLIBC_2.2.5 pthread_cond_wait F -GLIBC_2.2.5 pthread_condattr_destroy F -GLIBC_2.2.5 pthread_condattr_getpshared F -GLIBC_2.2.5 pthread_condattr_init F -GLIBC_2.2.5 pthread_condattr_setpshared F -GLIBC_2.2.5 pthread_create F -GLIBC_2.2.5 pthread_detach F -GLIBC_2.2.5 pthread_equal F -GLIBC_2.2.5 pthread_exit F -GLIBC_2.2.5 pthread_getattr_np F -GLIBC_2.2.5 pthread_getconcurrency F -GLIBC_2.2.5 pthread_getcpuclockid F -GLIBC_2.2.5 pthread_getschedparam F -GLIBC_2.2.5 pthread_getspecific F -GLIBC_2.2.5 pthread_join F -GLIBC_2.2.5 pthread_key_create F -GLIBC_2.2.5 pthread_key_delete F -GLIBC_2.2.5 pthread_kill F -GLIBC_2.2.5 pthread_kill_other_threads_np F -GLIBC_2.2.5 pthread_mutex_destroy F -GLIBC_2.2.5 pthread_mutex_init F -GLIBC_2.2.5 pthread_mutex_lock F -GLIBC_2.2.5 pthread_mutex_timedlock F -GLIBC_2.2.5 pthread_mutex_trylock F -GLIBC_2.2.5 pthread_mutex_unlock F -GLIBC_2.2.5 pthread_mutexattr_destroy F -GLIBC_2.2.5 pthread_mutexattr_getkind_np F -GLIBC_2.2.5 pthread_mutexattr_getpshared F -GLIBC_2.2.5 pthread_mutexattr_gettype F -GLIBC_2.2.5 pthread_mutexattr_init F -GLIBC_2.2.5 pthread_mutexattr_setkind_np F -GLIBC_2.2.5 pthread_mutexattr_setpshared F -GLIBC_2.2.5 pthread_mutexattr_settype F -GLIBC_2.2.5 pthread_once F -GLIBC_2.2.5 pthread_rwlock_destroy F -GLIBC_2.2.5 pthread_rwlock_init F -GLIBC_2.2.5 pthread_rwlock_rdlock F -GLIBC_2.2.5 pthread_rwlock_timedrdlock F -GLIBC_2.2.5 pthread_rwlock_timedwrlock F -GLIBC_2.2.5 pthread_rwlock_tryrdlock F -GLIBC_2.2.5 pthread_rwlock_trywrlock F -GLIBC_2.2.5 pthread_rwlock_unlock F -GLIBC_2.2.5 pthread_rwlock_wrlock F -GLIBC_2.2.5 pthread_rwlockattr_destroy F -GLIBC_2.2.5 pthread_rwlockattr_getkind_np F -GLIBC_2.2.5 pthread_rwlockattr_getpshared F -GLIBC_2.2.5 pthread_rwlockattr_init F -GLIBC_2.2.5 pthread_rwlockattr_setkind_np F -GLIBC_2.2.5 pthread_rwlockattr_setpshared F -GLIBC_2.2.5 pthread_self F -GLIBC_2.2.5 pthread_setcancelstate F -GLIBC_2.2.5 pthread_setcanceltype F -GLIBC_2.2.5 pthread_setconcurrency F -GLIBC_2.2.5 pthread_setschedparam F -GLIBC_2.2.5 pthread_setspecific F -GLIBC_2.2.5 pthread_sigmask F -GLIBC_2.2.5 pthread_spin_destroy F -GLIBC_2.2.5 pthread_spin_init F -GLIBC_2.2.5 pthread_spin_lock F -GLIBC_2.2.5 pthread_spin_trylock F -GLIBC_2.2.5 pthread_spin_unlock F -GLIBC_2.2.5 pthread_testcancel F -GLIBC_2.2.5 pthread_yield F -GLIBC_2.2.5 pwrite F -GLIBC_2.2.5 pwrite64 F -GLIBC_2.2.5 raise F -GLIBC_2.2.5 read F -GLIBC_2.2.5 recv F -GLIBC_2.2.5 recvfrom F -GLIBC_2.2.5 recvmsg F -GLIBC_2.2.5 sem_close F -GLIBC_2.2.5 sem_destroy F -GLIBC_2.2.5 sem_getvalue F -GLIBC_2.2.5 sem_init F -GLIBC_2.2.5 sem_open F -GLIBC_2.2.5 sem_post F -GLIBC_2.2.5 sem_timedwait F -GLIBC_2.2.5 sem_trywait F -GLIBC_2.2.5 sem_unlink F -GLIBC_2.2.5 sem_wait F -GLIBC_2.2.5 send F -GLIBC_2.2.5 sendmsg F -GLIBC_2.2.5 sendto F -GLIBC_2.2.5 sigaction F -GLIBC_2.2.5 siglongjmp F -GLIBC_2.2.5 sigwait F -GLIBC_2.2.5 system F -GLIBC_2.2.5 tcdrain F -GLIBC_2.2.5 vfork F -GLIBC_2.2.5 wait F -GLIBC_2.2.5 waitpid F -GLIBC_2.2.5 write F -GLIBC_2.2.6 GLIBC_2.2.6 A -GLIBC_2.2.6 __nanosleep F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 pthread_cond_broadcast F -GLIBC_2.3.2 pthread_cond_destroy F -GLIBC_2.3.2 pthread_cond_init F -GLIBC_2.3.2 pthread_cond_signal F -GLIBC_2.3.2 pthread_cond_timedwait F -GLIBC_2.3.2 pthread_cond_wait F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 __pthread_cleanup_routine F -GLIBC_2.3.3 __pthread_register_cancel F -GLIBC_2.3.3 __pthread_register_cancel_defer F -GLIBC_2.3.3 __pthread_unregister_cancel F -GLIBC_2.3.3 __pthread_unregister_cancel_restore F -GLIBC_2.3.3 __pthread_unwind_next F -GLIBC_2.3.3 pthread_attr_getaffinity_np F -GLIBC_2.3.3 pthread_attr_setaffinity_np F -GLIBC_2.3.3 pthread_barrierattr_getpshared F -GLIBC_2.3.3 pthread_condattr_getclock F -GLIBC_2.3.3 pthread_condattr_setclock F -GLIBC_2.3.3 pthread_getaffinity_np F -GLIBC_2.3.3 pthread_setaffinity_np F -GLIBC_2.3.3 pthread_timedjoin_np F -GLIBC_2.3.3 pthread_tryjoin_np F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 pthread_attr_getaffinity_np F -GLIBC_2.3.4 pthread_attr_setaffinity_np F -GLIBC_2.3.4 pthread_getaffinity_np F -GLIBC_2.3.4 pthread_setaffinity_np F -GLIBC_2.3.4 pthread_setschedprio F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 pthread_mutex_consistent_np F -GLIBC_2.4 pthread_mutex_getprioceiling F -GLIBC_2.4 pthread_mutex_setprioceiling F -GLIBC_2.4 pthread_mutexattr_getprioceiling F -GLIBC_2.4 pthread_mutexattr_getprotocol F -GLIBC_2.4 pthread_mutexattr_getrobust_np F -GLIBC_2.4 pthread_mutexattr_setprioceiling F -GLIBC_2.4 pthread_mutexattr_setprotocol F -GLIBC_2.4 pthread_mutexattr_setrobust_np F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libresolv.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libresolv.abilist deleted file mode 100644 index a111ccc488..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/libresolv.abilist +++ /dev/null @@ -1,94 +0,0 @@ -GLIBC_2.2.5 GLIBC_2.2.5 A -GLIBC_2.2.5 __b64_ntop F -GLIBC_2.2.5 __b64_pton F -GLIBC_2.2.5 __dn_comp F -GLIBC_2.2.5 __dn_count_labels F -GLIBC_2.2.5 __dn_expand F -GLIBC_2.2.5 __dn_skipname F -GLIBC_2.2.5 __fp_nquery F -GLIBC_2.2.5 __fp_query F -GLIBC_2.2.5 __fp_resstat F -GLIBC_2.2.5 __hostalias F -GLIBC_2.2.5 __loc_aton F -GLIBC_2.2.5 __loc_ntoa F -GLIBC_2.2.5 __p_cdname F -GLIBC_2.2.5 __p_cdnname F -GLIBC_2.2.5 __p_class F -GLIBC_2.2.5 __p_class_syms D 0xa8 -GLIBC_2.2.5 __p_fqname F -GLIBC_2.2.5 __p_fqnname F -GLIBC_2.2.5 __p_option F -GLIBC_2.2.5 __p_query F -GLIBC_2.2.5 __p_secstodate F -GLIBC_2.2.5 __p_time F -GLIBC_2.2.5 __p_type F -GLIBC_2.2.5 __p_type_syms D 0x450 -GLIBC_2.2.5 __putlong F -GLIBC_2.2.5 __putshort F -GLIBC_2.2.5 __res_close F -GLIBC_2.2.5 __res_dnok F -GLIBC_2.2.5 __res_hnok F -GLIBC_2.2.5 __res_hostalias F -GLIBC_2.2.5 __res_isourserver F -GLIBC_2.2.5 __res_mailok F -GLIBC_2.2.5 __res_mkquery F -GLIBC_2.2.5 __res_nameinquery F -GLIBC_2.2.5 __res_nmkquery F -GLIBC_2.2.5 __res_nquery F -GLIBC_2.2.5 __res_nquerydomain F -GLIBC_2.2.5 __res_nsearch F -GLIBC_2.2.5 __res_nsend F -GLIBC_2.2.5 __res_ownok F -GLIBC_2.2.5 __res_queriesmatch F -GLIBC_2.2.5 __res_query F -GLIBC_2.2.5 __res_querydomain F -GLIBC_2.2.5 __res_search F -GLIBC_2.2.5 __res_send F -GLIBC_2.2.5 __sym_ntop F -GLIBC_2.2.5 __sym_ntos F -GLIBC_2.2.5 __sym_ston F -GLIBC_2.2.5 _gethtbyaddr F -GLIBC_2.2.5 _gethtbyname F -GLIBC_2.2.5 _gethtbyname2 F -GLIBC_2.2.5 _gethtent F -GLIBC_2.2.5 _getlong F -GLIBC_2.2.5 _getshort F -GLIBC_2.2.5 _res_opcodes D 0x80 -GLIBC_2.2.5 _sethtent F -GLIBC_2.2.5 inet_net_ntop F -GLIBC_2.2.5 inet_net_pton F -GLIBC_2.2.5 inet_neta F -GLIBC_2.2.5 res_gethostbyaddr F -GLIBC_2.2.5 res_gethostbyname F -GLIBC_2.2.5 res_gethostbyname2 F -GLIBC_2.2.5 res_send_setqhook F -GLIBC_2.2.5 res_send_setrhook F -GLIBC_2.3.2 GLIBC_2.3.2 A -GLIBC_2.3.2 __p_rcode F -GLIBC_2.9 GLIBC_2.9 A -GLIBC_2.9 ns_datetosecs F -GLIBC_2.9 ns_format_ttl F -GLIBC_2.9 ns_get16 F -GLIBC_2.9 ns_get32 F -GLIBC_2.9 ns_initparse F -GLIBC_2.9 ns_makecanon F -GLIBC_2.9 ns_msg_getflag F -GLIBC_2.9 ns_name_compress F -GLIBC_2.9 ns_name_ntol F -GLIBC_2.9 ns_name_ntop F -GLIBC_2.9 ns_name_pack F -GLIBC_2.9 ns_name_pton F -GLIBC_2.9 ns_name_rollback F -GLIBC_2.9 ns_name_skip F -GLIBC_2.9 ns_name_uncompress F -GLIBC_2.9 ns_name_unpack F -GLIBC_2.9 ns_parse_ttl F -GLIBC_2.9 ns_parserr F -GLIBC_2.9 ns_put16 F -GLIBC_2.9 ns_put32 F -GLIBC_2.9 ns_samedomain F -GLIBC_2.9 ns_samename F -GLIBC_2.9 ns_skiprr F -GLIBC_2.9 ns_sprintrr F -GLIBC_2.9 ns_sprintrrf F -GLIBC_2.9 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/librt.abilist b/sysdeps/unix/sysv/linux/x86_64/64/librt.abilist deleted file mode 100644 index d626758434..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/librt.abilist +++ /dev/null @@ -1,52 +0,0 @@ -GLIBC_2.2.5 GLIBC_2.2.5 A -GLIBC_2.2.5 aio_cancel F -GLIBC_2.2.5 aio_cancel64 F -GLIBC_2.2.5 aio_error F -GLIBC_2.2.5 aio_error64 F -GLIBC_2.2.5 aio_fsync F -GLIBC_2.2.5 aio_fsync64 F -GLIBC_2.2.5 aio_init F -GLIBC_2.2.5 aio_read F -GLIBC_2.2.5 aio_read64 F -GLIBC_2.2.5 aio_return F -GLIBC_2.2.5 aio_return64 F -GLIBC_2.2.5 aio_suspend F -GLIBC_2.2.5 aio_suspend64 F -GLIBC_2.2.5 aio_write F -GLIBC_2.2.5 aio_write64 F -GLIBC_2.2.5 clock_getcpuclockid F -GLIBC_2.2.5 clock_getres F -GLIBC_2.2.5 clock_gettime F -GLIBC_2.2.5 clock_nanosleep F -GLIBC_2.2.5 clock_settime F -GLIBC_2.2.5 lio_listio F -GLIBC_2.2.5 lio_listio64 F -GLIBC_2.2.5 shm_open F -GLIBC_2.2.5 shm_unlink F -GLIBC_2.2.5 timer_create F -GLIBC_2.2.5 timer_delete F -GLIBC_2.2.5 timer_getoverrun F -GLIBC_2.2.5 timer_gettime F -GLIBC_2.2.5 timer_settime F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 timer_create F -GLIBC_2.3.3 timer_delete F -GLIBC_2.3.3 timer_getoverrun F -GLIBC_2.3.3 timer_gettime F -GLIBC_2.3.3 timer_settime F -GLIBC_2.3.4 GLIBC_2.3.4 A -GLIBC_2.3.4 mq_close F -GLIBC_2.3.4 mq_getattr F -GLIBC_2.3.4 mq_notify F -GLIBC_2.3.4 mq_open F -GLIBC_2.3.4 mq_receive F -GLIBC_2.3.4 mq_send F -GLIBC_2.3.4 mq_setattr F -GLIBC_2.3.4 mq_timedreceive F -GLIBC_2.3.4 mq_timedsend F -GLIBC_2.3.4 mq_unlink F -GLIBC_2.4 GLIBC_2.4 A -GLIBC_2.4 lio_listio F -GLIBC_2.4 lio_listio64 F -GLIBC_2.7 GLIBC_2.7 A -GLIBC_2.7 __mq_open_2 F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libthread_db.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libthread_db.abilist deleted file mode 100644 index 291a19132d..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/libthread_db.abilist +++ /dev/null @@ -1,43 +0,0 @@ -GLIBC_2.2.5 GLIBC_2.2.5 A -GLIBC_2.2.5 td_init F -GLIBC_2.2.5 td_log F -GLIBC_2.2.5 td_symbol_list F -GLIBC_2.2.5 td_ta_clear_event F -GLIBC_2.2.5 td_ta_delete F -GLIBC_2.2.5 td_ta_enable_stats F -GLIBC_2.2.5 td_ta_event_addr F -GLIBC_2.2.5 td_ta_event_getmsg F -GLIBC_2.2.5 td_ta_get_nthreads F -GLIBC_2.2.5 td_ta_get_ph F -GLIBC_2.2.5 td_ta_get_stats F -GLIBC_2.2.5 td_ta_map_id2thr F -GLIBC_2.2.5 td_ta_map_lwp2thr F -GLIBC_2.2.5 td_ta_new F -GLIBC_2.2.5 td_ta_reset_stats F -GLIBC_2.2.5 td_ta_set_event F -GLIBC_2.2.5 td_ta_setconcurrency F -GLIBC_2.2.5 td_ta_thr_iter F -GLIBC_2.2.5 td_ta_tsd_iter F -GLIBC_2.2.5 td_thr_clear_event F -GLIBC_2.2.5 td_thr_dbresume F -GLIBC_2.2.5 td_thr_dbsuspend F -GLIBC_2.2.5 td_thr_event_enable F -GLIBC_2.2.5 td_thr_event_getmsg F -GLIBC_2.2.5 td_thr_get_info F -GLIBC_2.2.5 td_thr_getfpregs F -GLIBC_2.2.5 td_thr_getgregs F -GLIBC_2.2.5 td_thr_getxregs F -GLIBC_2.2.5 td_thr_getxregsize F -GLIBC_2.2.5 td_thr_set_event F -GLIBC_2.2.5 td_thr_setfpregs F -GLIBC_2.2.5 td_thr_setgregs F -GLIBC_2.2.5 td_thr_setprio F -GLIBC_2.2.5 td_thr_setsigpending F -GLIBC_2.2.5 td_thr_setxregs F -GLIBC_2.2.5 td_thr_sigsetmask F -GLIBC_2.2.5 td_thr_tsd F -GLIBC_2.2.5 td_thr_validate F -GLIBC_2.3 GLIBC_2.3 A -GLIBC_2.3 td_thr_tls_get_addr F -GLIBC_2.3.3 GLIBC_2.3.3 A -GLIBC_2.3.3 td_thr_tlsbase F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libutil.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libutil.abilist deleted file mode 100644 index 98d06aa9f6..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.2.5 GLIBC_2.2.5 A -GLIBC_2.2.5 forkpty F -GLIBC_2.2.5 login F -GLIBC_2.2.5 login_tty F -GLIBC_2.2.5 logout F -GLIBC_2.2.5 logwtmp F -GLIBC_2.2.5 openpty F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/mmap_internal.h b/sysdeps/unix/sysv/linux/x86_64/64/mmap_internal.h deleted file mode 100644 index 06254efb94..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/mmap_internal.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Linux mmap system call. x86-64 version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef MMAP_X86_64_INTERNAL_H -#define MMAP_X86_64_INTERNAL_H - -#include - -/* If the Prefer_MAP_32BIT_EXEC bit is set, try to map executable pages - with MAP_32BIT first. */ -#define MMAP_PREPARE(addr, len, prot, flags, fd, offset) \ - if ((addr) == NULL \ - && ((prot) & PROT_EXEC) != 0 \ - && HAS_ARCH_FEATURE (Prefer_MAP_32BIT_EXEC)) \ - { \ - void *ret = (void*) INLINE_SYSCALL_CALL (mmap, (addr), (len), \ - (prot), \ - (flags) | MAP_32BIT, \ - (fd), (offset)); \ - if (ret != MAP_FAILED) \ - return ret; \ - } - -#include_next - -#endif diff --git a/sysdeps/unix/sysv/linux/x86_64/64/shlib-versions b/sysdeps/unix/sysv/linux/x86_64/64/shlib-versions deleted file mode 100644 index 7f87a8bd17..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/shlib-versions +++ /dev/null @@ -1,4 +0,0 @@ -# DEFAULT Earliest symbol set -# --------------- ------------------------------ -DEFAULT GLIBC_2.2.5 -ld=ld-linux-x86-64.so.2 diff --git a/sysdeps/unix/sysv/linux/x86_64/Implies b/sysdeps/unix/sysv/linux/x86_64/Implies deleted file mode 100644 index c9be3c4711..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/Implies +++ /dev/null @@ -1,3 +0,0 @@ -unix/sysv/linux/x86 -unix/sysv/linux/wordsize-64 -x86_64/nptl diff --git a/sysdeps/unix/sysv/linux/x86_64/Makefile b/sysdeps/unix/sysv/linux/x86_64/Makefile deleted file mode 100644 index 9b82155393..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -ifeq ($(subdir),misc) -sysdep_routines += ioperm iopl -endif - -ifeq ($(subdir),stdlib) -sysdep_routines += __start_context -endif - -ifeq ($(subdir),csu) -gen-as-const-headers += ucontext_i.sym -endif - -ifeq ($(subdir),misc) -gen-as-const-headers += sigaltstack-offsets.sym -endif diff --git a/sysdeps/unix/sysv/linux/x86_64/Versions b/sysdeps/unix/sysv/linux/x86_64/Versions deleted file mode 100644 index 2a7ed280fd..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/Versions +++ /dev/null @@ -1,17 +0,0 @@ -libc { - GLIBC_2.2.5 { - arch_prctl; __arch_prctl; - - ioperm; iopl; - - modify_ldt; - } -} - -librt { - GLIBC_2.3.3 { - # Changed timer_t. - timer_create; timer_delete; timer_getoverrun; timer_gettime; - timer_settime; - } -} diff --git a/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S b/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S deleted file mode 100644 index 2955c56a56..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S +++ /dev/null @@ -1,131 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include - - .section .rodata.str1.1,"aMS",@progbits,1 - .type longjmp_msg,@object -longjmp_msg: - .string "longjmp causes uninitialized stack frame" - .size longjmp_msg, .-longjmp_msg - - -//#define __longjmp ____longjmp_chk - -#ifdef PIC -# define CALL_FAIL sub $8, %RSP_LP; \ - cfi_remember_state; \ - cfi_def_cfa_offset(16); \ - lea longjmp_msg(%rip), %RDI_LP; \ - call HIDDEN_JUMPTARGET(__fortify_fail); \ - nop; \ - cfi_restore_state -#else -# define CALL_FAIL sub $8, %RSP_LP; \ - cfi_remember_state; \ - cfi_def_cfa_offset(16); \ - mov $longjmp_msg, %RDI_LP; \ - call HIDDEN_JUMPTARGET(__fortify_fail); \ - nop; \ - cfi_restore_state -#endif - -/* Jump to the position specified by ENV, causing the - setjmp call there to return VAL, or 1 if VAL is 0. - void __longjmp (__jmp_buf env, int val). */ - .text -ENTRY(____longjmp_chk) - /* Restore registers. */ - mov (JB_RSP*8)(%rdi), %R8_LP - mov (JB_RBP*8)(%rdi),%R9_LP - mov (JB_PC*8)(%rdi), %RDX_LP -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (%R8_LP) - PTR_DEMANGLE (%R9_LP) - PTR_DEMANGLE (%RDX_LP) -# ifdef __ILP32__ - /* We ignored the high bits of the %rbp value because only the low - bits are mangled. But we cannot presume that %rbp is being used - as a pointer and truncate it, so recover the high bits. */ - movl (JB_RBP*8 + 4)(%rdi), %eax - shlq $32, %rax - orq %rax, %r9 -# endif -#endif - - cmp %R8_LP, %RSP_LP - jbe .Lok - - /* Save function parameters. */ - movq %rdi, %r10 - cfi_register (%rdi, %r10) - movl %esi, %ebx - cfi_register (%rsi, %rbx) - - xorl %edi, %edi - lea -sizeSS(%rsp), %RSI_LP - movl $__NR_sigaltstack, %eax - syscall - /* Without working sigaltstack we cannot perform the test. */ - testl %eax, %eax - jne .Lok2 - testl $1, (-sizeSS + oSS_FLAGS)(%rsp) - jz .Lfail - - mov (-sizeSS + oSS_SP)(%rsp), %RAX_LP - add (-sizeSS + oSS_SIZE)(%rsp), %RAX_LP - sub %R8_LP, %RAX_LP - cmp (-sizeSS + oSS_SIZE)(%rsp), %RAX_LP - jae .Lok2 - -.Lfail: CALL_FAIL - -.Lok2: movq %r10, %rdi - cfi_restore (%rdi) - movl %ebx, %esi - cfi_restore (%rsi) - -.Lok: - LIBC_PROBE (longjmp, 3, LP_SIZE@%RDI_LP, -4@%esi, LP_SIZE@%RDX_LP) - /* We add unwind information for the target here. */ - cfi_def_cfa(%rdi, 0) - cfi_register(%rsp,%r8) - cfi_register(%rbp,%r9) - cfi_register(%rip,%rdx) - cfi_offset(%rbx,JB_RBX*8) - cfi_offset(%r12,JB_R12*8) - cfi_offset(%r13,JB_R13*8) - cfi_offset(%r14,JB_R14*8) - cfi_offset(%r15,JB_R15*8) - movq (JB_RBX*8)(%rdi), %rbx - movq (JB_R12*8)(%rdi), %r12 - movq (JB_R13*8)(%rdi), %r13 - movq (JB_R14*8)(%rdi), %r14 - movq (JB_R15*8)(%rdi), %r15 - /* Set return value for setjmp. */ - movl %esi, %eax - mov %R8_LP, %RSP_LP - movq %r9,%rbp - LIBC_PROBE (longjmp_target, 3, - LP_SIZE@%RDI_LP, -4@%eax, LP_SIZE@%RDX_LP) - jmpq *%rdx -END (____longjmp_chk) diff --git a/sysdeps/unix/sysv/linux/x86_64/__start_context.S b/sysdeps/unix/sysv/linux/x86_64/__start_context.S deleted file mode 100644 index d05ddc6a01..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/__start_context.S +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* This is the helper code which gets called if a function which is - registered with 'makecontext' returns. In this case we have to - install the context listed in the uc_link element of the context - 'makecontext' manipulated at the time of the 'makecontext' call. - If the pointer is NULL the process must terminate. */ - - -ENTRY(__start_context) - /* This removes the parameters passed to the function given to - 'makecontext' from the stack. RBX contains the address - on the stack pointer for the next context. */ - movq %rbx, %rsp - - /* Don't use pop here so that stack is aligned to 16 bytes. */ - movq (%rsp), %rdi /* This is the next context. */ - testq %rdi, %rdi - je 2f /* If it is zero exit. */ - - call __setcontext - /* If this returns (which can happen if the syscall fails) we'll - exit the program with the return error value (-1). */ - movq %rax,%rdi - -2: - call HIDDEN_JUMPTARGET(exit) - /* The 'exit' call should never return. In case it does cause - the process to terminate. */ - hlt -END(__start_context) diff --git a/sysdeps/unix/sysv/linux/x86_64/arch-fork.h b/sysdeps/unix/sysv/linux/x86_64/arch-fork.h deleted file mode 100644 index 29afc00583..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/arch-fork.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Internal definitions for thread-friendly fork implementation. Linux/x86_64. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 4, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0, \ - NULL, &THREAD_SELF->tid) diff --git a/sysdeps/unix/sysv/linux/x86_64/brk.c b/sysdeps/unix/sysv/linux/x86_64/brk.c deleted file mode 100644 index 7f6ae7a95d..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/brk.c +++ /dev/null @@ -1,41 +0,0 @@ -/* brk system call for Linux/x86_64. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -int -__brk (void *addr) -{ - void *newbrk; - - __curbrk = newbrk = (void *) INLINE_SYSCALL (brk, 1, addr); - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/x86_64/cancellation.S b/sysdeps/unix/sysv/linux/x86_64/cancellation.S deleted file mode 100644 index ed804df138..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/cancellation.S +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include "lowlevellock.h" - -#define PTHREAD_UNWIND JUMPTARGET(__pthread_unwind) -#if IS_IN (libpthread) -# if defined SHARED && !defined NO_HIDDEN -# undef PTHREAD_UNWIND -# define PTHREAD_UNWIND __GI___pthread_unwind -# endif -#else -# ifndef SHARED - .weak __pthread_unwind -# endif -#endif - - -#ifdef __ASSUME_PRIVATE_FUTEX -# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ - movl $(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), reg -#else -# if FUTEX_WAIT == 0 -# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ - movl %fs:PRIVATE_FUTEX, reg -# else -# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ - movl %fs:PRIVATE_FUTEX, reg ; \ - orl $FUTEX_WAIT, reg -# endif -#endif - -/* It is crucial that the functions in this file don't modify registers - other than %rax and %r11. The syscall wrapper code depends on this - because it doesn't explicitly save the other registers which hold - relevant values. */ - .text - - .hidden __pthread_enable_asynccancel -ENTRY(__pthread_enable_asynccancel) - movl %fs:CANCELHANDLING, %eax -2: movl %eax, %r11d - orl $TCB_CANCELTYPE_BITMASK, %r11d - cmpl %eax, %r11d - je 1f - - lock - cmpxchgl %r11d, %fs:CANCELHANDLING - jnz 2b - - andl $(TCB_CANCELSTATE_BITMASK|TCB_CANCELTYPE_BITMASK|TCB_CANCELED_BITMASK|TCB_EXITING_BITMASK|TCB_CANCEL_RESTMASK|TCB_TERMINATED_BITMASK), %r11d - cmpl $(TCB_CANCELTYPE_BITMASK|TCB_CANCELED_BITMASK), %r11d - je 3f - -1: ret - -3: subq $8, %rsp - cfi_adjust_cfa_offset(8) - LP_OP(mov) $TCB_PTHREAD_CANCELED, %fs:RESULT - lock - orl $TCB_EXITING_BITMASK, %fs:CANCELHANDLING - mov %fs:CLEANUP_JMP_BUF, %RDI_LP - call PTHREAD_UNWIND - hlt -END(__pthread_enable_asynccancel) - - - .hidden __pthread_disable_asynccancel -ENTRY(__pthread_disable_asynccancel) - testl $TCB_CANCELTYPE_BITMASK, %edi - jnz 1f - - movl %fs:CANCELHANDLING, %eax -2: movl %eax, %r11d - andl $~TCB_CANCELTYPE_BITMASK, %r11d - lock - cmpxchgl %r11d, %fs:CANCELHANDLING - jnz 2b - - movl %r11d, %eax -3: andl $(TCB_CANCELING_BITMASK|TCB_CANCELED_BITMASK), %eax - cmpl $TCB_CANCELING_BITMASK, %eax - je 4f -1: ret - - /* Performance doesn't matter in this loop. We will - delay until the thread is canceled. And we will unlikely - enter the loop twice. */ -4: mov %fs:0, %RDI_LP - movl $__NR_futex, %eax - xorq %r10, %r10 - addq $CANCELHANDLING, %rdi - LOAD_PRIVATE_FUTEX_WAIT (%esi) - syscall - movl %fs:CANCELHANDLING, %eax - jmp 3b -END(__pthread_disable_asynccancel) diff --git a/sysdeps/unix/sysv/linux/x86_64/clone.S b/sysdeps/unix/sysv/linux/x86_64/clone.S deleted file mode 100644 index d5c2d07885..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/clone.S +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include -#define _ERRNO_H 1 -#include -#include - -#define CLONE_VM 0x00000100 - -/* The userland implementation is: - int clone (int (*fn)(void *arg), void *child_stack, int flags, void *arg), - the kernel entry is: - int clone (long flags, void *child_stack). - - The parameters are passed in register and on the stack from userland: - rdi: fn - rsi: child_stack - rdx: flags - rcx: arg - r8d: TID field in parent - r9d: thread pointer -%esp+8: TID field in child - - The kernel expects: - rax: system call number - rdi: flags - rsi: child_stack - rdx: TID field in parent - r10: TID field in child - r8: thread pointer */ - - - .text -ENTRY (__clone) - /* Sanity check arguments. */ - movq $-EINVAL,%rax - testq %rdi,%rdi /* no NULL function pointers */ - jz SYSCALL_ERROR_LABEL - testq %rsi,%rsi /* no NULL stack pointers */ - jz SYSCALL_ERROR_LABEL - - /* Insert the argument onto the new stack. */ - subq $16,%rsi - movq %rcx,8(%rsi) - - /* Save the function pointer. It will be popped off in the - child in the ebx frobbing below. */ - movq %rdi,0(%rsi) - - /* Do the system call. */ - movq %rdx, %rdi - movq %r8, %rdx - movq %r9, %r8 - mov 8(%rsp), %R10_LP - movl $SYS_ify(clone),%eax - - /* End FDE now, because in the child the unwind info will be - wrong. */ - cfi_endproc; - syscall - - testq %rax,%rax - jl SYSCALL_ERROR_LABEL - jz L(thread_start) - - ret - -L(thread_start): - cfi_startproc; - /* Clearing frame pointer is insufficient, use CFI. */ - cfi_undefined (rip); - /* Clear the frame pointer. The ABI suggests this be done, to mark - the outermost frame obviously. */ - xorl %ebp, %ebp - - /* Set up arguments for the function call. */ - popq %rax /* Function to call. */ - popq %rdi /* Argument. */ - call *%rax - /* Call exit with return value from function call. */ - movq %rax, %rdi - call HIDDEN_JUMPTARGET (_exit) - cfi_endproc; - - cfi_startproc; -PSEUDO_END (__clone) - -libc_hidden_def (__clone) -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/x86_64/compat-timer.h b/sysdeps/unix/sysv/linux/x86_64/compat-timer.h deleted file mode 100644 index f5d5380a00..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/compat-timer.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include -#include - -#define OLD_TIMER_MAX 256 - -extern timer_t __compat_timer_list[OLD_TIMER_MAX] attribute_hidden; - - -extern int __timer_create_new (clockid_t clock_id, struct sigevent *evp, - timer_t *timerid); -extern int __timer_delete_new (timer_t timerid); -extern int __timer_getoverrun_new (timer_t timerid); -extern int __timer_gettime_new (timer_t timerid, struct itimerspec *value); -extern int __timer_settime_new (timer_t timerid, int flags, - const struct itimerspec *value, - struct itimerspec *ovalue); - - -extern int __timer_create_old (clockid_t clock_id, struct sigevent *evp, - int *timerid); -extern int __timer_delete_old (int timerid); -extern int __timer_getoverrun_old (int timerid); -extern int __timer_gettime_old (int timerid, struct itimerspec *value); -extern int __timer_settime_old (int timerid, int flags, - const struct itimerspec *value, - struct itimerspec *ovalue); diff --git a/sysdeps/unix/sysv/linux/x86_64/configure b/sysdeps/unix/sysv/linux/x86_64/configure deleted file mode 100644 index cb904876ab..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/configure +++ /dev/null @@ -1,4 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/x86_64. - -ldd_rewrite_script=sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/x86_64/configure.ac b/sysdeps/unix/sysv/linux/x86_64/configure.ac deleted file mode 100644 index 4a34e9458a..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/configure.ac +++ /dev/null @@ -1,4 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/x86_64. - -ldd_rewrite_script=sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/x86_64/dl-cache.h b/sysdeps/unix/sysv/linux/x86_64/dl-cache.h deleted file mode 100644 index fd61441245..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/dl-cache.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define _DL_CACHE_DEFAULT_ID 0x303 - -#define _dl_cache_check_flags(flags) \ - ((flags) == _DL_CACHE_DEFAULT_ID) - -#define add_system_dir(dir) \ - do \ - { \ - size_t len = strlen (dir); \ - char path[len + 4]; \ - memcpy (path, dir, len + 1); \ - if (len >= 6 && ! memcmp (path + len - 6, "/lib64", 6)) \ - { \ - len -= 2; \ - path[len] = '\0'; \ - } \ - else if (len >= 7 \ - && ! memcmp (path + len - 7, "/libx32", 7)) \ - { \ - len -= 3; \ - path[len] = '\0'; \ - } \ - add_dir (path); \ - if (len >= 4 && ! memcmp (path + len - 4, "/lib", 4)) \ - { \ - memcpy (path + len, "64", 3); \ - add_dir (path); \ - memcpy (path + len, "x32", 4); \ - add_dir (path); \ - } \ - } while (0) - -#include diff --git a/sysdeps/unix/sysv/linux/x86_64/dl-procinfo.c b/sysdeps/unix/sysv/linux/x86_64/dl-procinfo.c deleted file mode 100644 index a3c0c1931e..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/dl-procinfo.c +++ /dev/null @@ -1,5 +0,0 @@ -#if IS_IN (ldconfig) -# include -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/x86_64/dl-procinfo.h b/sysdeps/unix/sysv/linux/x86_64/dl-procinfo.h deleted file mode 100644 index 7b45fe4bf8..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/dl-procinfo.h +++ /dev/null @@ -1,5 +0,0 @@ -#if IS_IN (ldconfig) -# include -#else -# include -#endif diff --git a/sysdeps/unix/sysv/linux/x86_64/get_clockfreq.c b/sysdeps/unix/sysv/linux/x86_64/get_clockfreq.c deleted file mode 100644 index a58d40a9c1..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/get_clockfreq.c +++ /dev/null @@ -1 +0,0 @@ -#include "../i386/get_clockfreq.c" diff --git a/sysdeps/unix/sysv/linux/x86_64/getcontext.S b/sysdeps/unix/sysv/linux/x86_64/getcontext.S deleted file mode 100644 index fed47d0f5d..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/getcontext.S +++ /dev/null @@ -1,87 +0,0 @@ -/* Save current context. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - -/* int __getcontext (ucontext_t *ucp) - - Saves the machine context in UCP such that when it is activated, - it appears as if __getcontext() returned again. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to save anything - other than the PRESERVED state. */ - - -ENTRY(__getcontext) - /* Save the preserved registers, the registers used for passing - args, and the return address. */ - movq %rbx, oRBX(%rdi) - movq %rbp, oRBP(%rdi) - movq %r12, oR12(%rdi) - movq %r13, oR13(%rdi) - movq %r14, oR14(%rdi) - movq %r15, oR15(%rdi) - - movq %rdi, oRDI(%rdi) - movq %rsi, oRSI(%rdi) - movq %rdx, oRDX(%rdi) - movq %rcx, oRCX(%rdi) - movq %r8, oR8(%rdi) - movq %r9, oR9(%rdi) - - movq (%rsp), %rcx - movq %rcx, oRIP(%rdi) - leaq 8(%rsp), %rcx /* Exclude the return address. */ - movq %rcx, oRSP(%rdi) - - /* We have separate floating-point register content memory on the - stack. We use the __fpregs_mem block in the context. Set the - links up correctly. */ - - leaq oFPREGSMEM(%rdi), %rcx - movq %rcx, oFPREGS(%rdi) - /* Save the floating-point environment. */ - fnstenv (%rcx) - fldenv (%rcx) - stmxcsr oMXCSR(%rdi) - - /* Save the current signal mask with - rt_sigprocmask (SIG_BLOCK, NULL, set,_NSIG/8). */ - leaq oSIGMASK(%rdi), %rdx - xorl %esi,%esi -#if SIG_BLOCK == 0 - xorl %edi, %edi -#else - movl $SIG_BLOCK, %edi -#endif - movl $_NSIG8,%r10d - movl $__NR_rt_sigprocmask, %eax - syscall - cmpq $-4095, %rax /* Check %rax for error. */ - jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ - - /* All done, return 0 for success. */ - xorl %eax, %eax - ret -PSEUDO_END(__getcontext) - -weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/x86_64/init-first.c b/sysdeps/unix/sysv/linux/x86_64/init-first.c deleted file mode 100644 index f1c46cb5bc..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/init-first.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Initialization code run first thing by the ELF startup code. Linux/x86-64. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef SHARED -# include -# include -# include -# include - -long int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *) - attribute_hidden; -long int (*VDSO_SYMBOL(getcpu)) (unsigned *, unsigned *, void *) - attribute_hidden; - -extern long int __syscall_clock_gettime (clockid_t, struct timespec *); - - -static inline void -__vdso_platform_setup (void) -{ - PREPARE_VERSION (linux26, "LINUX_2.6", 61765110); - - void *p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26); - if (p == NULL) - p = __syscall_clock_gettime; - PTR_MANGLE (p); - VDSO_SYMBOL(clock_gettime) = p; - - p = _dl_vdso_vsym ("__vdso_getcpu", &linux26); - PTR_MANGLE (p); - VDSO_SYMBOL(getcpu) = p; -} - -# define VDSO_SETUP __vdso_platform_setup -#endif - -#include diff --git a/sysdeps/unix/sysv/linux/x86_64/ipc_priv.h b/sysdeps/unix/sysv/linux/x86_64/ipc_priv.h deleted file mode 100644 index 6de3cd6fc2..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/ipc_priv.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Old SysV permission definition for Linux. x86_64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include /* For __key_t */ - -#define __IPC_64 0x0 - -struct __old_ipc_perm -{ - __key_t __key; /* Key. */ - unsigned short uid; /* Owner's user ID. */ - unsigned short gid; /* Owner's group ID. */ - unsigned short cuid; /* Creator's user ID. */ - unsigned short cgid; /* Creator's group ID. */ - unsigned short mode; /* Read/write permission. */ - unsigned short int __seq; /* Sequence number. */ -}; diff --git a/sysdeps/unix/sysv/linux/x86_64/kernel-features.h b/sysdeps/unix/sysv/linux/x86_64/kernel-features.h deleted file mode 100644 index 115e34c090..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/kernel-features.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. x86-64 version. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define that x32 is a ILP32 ABI to set the correct interface to pass - 64-bits values through syscalls. */ -#ifdef __ILP32__ -# define __ASSUME_WORDSIZE64_ILP32 1 -#endif - -#include_next diff --git a/sysdeps/unix/sysv/linux/x86_64/kernel_stat.h b/sysdeps/unix/sysv/linux/x86_64/kernel_stat.h deleted file mode 100644 index 945c02930c..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/kernel_stat.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Definition of `struct stat' used in the kernel. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define STAT_IS_KERNEL_STAT 1 -#define XSTAT_IS_XSTAT64 1 -#define STATFS_IS_STATFS64 0 diff --git a/sysdeps/unix/sysv/linux/x86_64/ldconfig.h b/sysdeps/unix/sysv/linux/x86_64/ldconfig.h deleted file mode 100644 index 3a7a75b7f0..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/ldconfig.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld-linux.so.2", FLAG_ELF_LIBC6 }, \ - { "/libx32/ld-linux-x32.so.2", FLAG_ELF_LIBC6 }, \ - { "/lib64/ld-linux-x86-64.so.2", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed deleted file mode 100644 index 44d76e8aa1..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed +++ /dev/null @@ -1,3 +0,0 @@ -/LD_TRACE_LOADED_OBJECTS=1/a\ -add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out" -s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|x32\)\(/[^/]*\)\(-x86-64\|-x32\)\(\.so\.[0-9.]*\)[ ]*$_\1"\2\4\6 \264\4-x86-64\6 \2x32\4-x32\6"_ diff --git a/sysdeps/unix/sysv/linux/x86_64/libc-cancellation.S b/sysdeps/unix/sysv/linux/x86_64/libc-cancellation.S deleted file mode 100644 index dc9d8226f1..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/libc-cancellation.S +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __pthread_enable_asynccancel __libc_enable_asynccancel -#define __pthread_disable_asynccancel __libc_disable_asynccancel -#include "cancellation.S" diff --git a/sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S b/sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S deleted file mode 100644 index 1e5e150aa7..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "lowlevellock.S" diff --git a/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist b/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist deleted file mode 100644 index 80d028a61c..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist +++ /dev/null @@ -1,49 +0,0 @@ -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 _ZGVbN2v_cos F -GLIBC_2.22 _ZGVbN2v_exp F -GLIBC_2.22 _ZGVbN2v_log F -GLIBC_2.22 _ZGVbN2v_sin F -GLIBC_2.22 _ZGVbN2vv_pow F -GLIBC_2.22 _ZGVbN2vvv_sincos F -GLIBC_2.22 _ZGVbN4v_cosf F -GLIBC_2.22 _ZGVbN4v_expf F -GLIBC_2.22 _ZGVbN4v_logf F -GLIBC_2.22 _ZGVbN4v_sinf F -GLIBC_2.22 _ZGVbN4vv_powf F -GLIBC_2.22 _ZGVbN4vvv_sincosf F -GLIBC_2.22 _ZGVcN4v_cos F -GLIBC_2.22 _ZGVcN4v_exp F -GLIBC_2.22 _ZGVcN4v_log F -GLIBC_2.22 _ZGVcN4v_sin F -GLIBC_2.22 _ZGVcN4vv_pow F -GLIBC_2.22 _ZGVcN4vvv_sincos F -GLIBC_2.22 _ZGVcN8v_cosf F -GLIBC_2.22 _ZGVcN8v_expf F -GLIBC_2.22 _ZGVcN8v_logf F -GLIBC_2.22 _ZGVcN8v_sinf F -GLIBC_2.22 _ZGVcN8vv_powf F -GLIBC_2.22 _ZGVcN8vvv_sincosf F -GLIBC_2.22 _ZGVdN4v_cos F -GLIBC_2.22 _ZGVdN4v_exp F -GLIBC_2.22 _ZGVdN4v_log F -GLIBC_2.22 _ZGVdN4v_sin F -GLIBC_2.22 _ZGVdN4vv_pow F -GLIBC_2.22 _ZGVdN4vvv_sincos F -GLIBC_2.22 _ZGVdN8v_cosf F -GLIBC_2.22 _ZGVdN8v_expf F -GLIBC_2.22 _ZGVdN8v_logf F -GLIBC_2.22 _ZGVdN8v_sinf F -GLIBC_2.22 _ZGVdN8vv_powf F -GLIBC_2.22 _ZGVdN8vvv_sincosf F -GLIBC_2.22 _ZGVeN16v_cosf F -GLIBC_2.22 _ZGVeN16v_expf F -GLIBC_2.22 _ZGVeN16v_logf F -GLIBC_2.22 _ZGVeN16v_sinf F -GLIBC_2.22 _ZGVeN16vv_powf F -GLIBC_2.22 _ZGVeN16vvv_sincosf F -GLIBC_2.22 _ZGVeN8v_cos F -GLIBC_2.22 _ZGVeN8v_exp F -GLIBC_2.22 _ZGVeN8v_log F -GLIBC_2.22 _ZGVeN8v_sin F -GLIBC_2.22 _ZGVeN8vv_pow F -GLIBC_2.22 _ZGVeN8vvv_sincos F diff --git a/sysdeps/unix/sysv/linux/x86_64/librt-cancellation.S b/sysdeps/unix/sysv/linux/x86_64/librt-cancellation.S deleted file mode 100644 index 8422939dc7..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/librt-cancellation.S +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __pthread_enable_asynccancel __librt_enable_asynccancel -#define __pthread_disable_asynccancel __librt_disable_asynccancel -#include "cancellation.S" diff --git a/sysdeps/unix/sysv/linux/x86_64/lll_timedlock_wait.c b/sysdeps/unix/sysv/linux/x86_64/lll_timedlock_wait.c deleted file mode 100644 index f6875b8f89..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/lll_timedlock_wait.c +++ /dev/null @@ -1 +0,0 @@ -/* __lll_timedlock_wait is in lowlevellock.S. */ diff --git a/sysdeps/unix/sysv/linux/x86_64/lll_timedwait_tid.c b/sysdeps/unix/sysv/linux/x86_64/lll_timedwait_tid.c deleted file mode 100644 index 43900c6294..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/lll_timedwait_tid.c +++ /dev/null @@ -1 +0,0 @@ -/* __lll_timedwait_tid is in lowlevellock.S. */ diff --git a/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S b/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S deleted file mode 100644 index 6e8ae053c7..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S +++ /dev/null @@ -1,463 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include - - .text - -#ifdef __ASSUME_PRIVATE_FUTEX -# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ - movl $(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), reg -# define LOAD_PRIVATE_FUTEX_WAKE(reg) \ - movl $(FUTEX_WAKE | FUTEX_PRIVATE_FLAG), reg -# define LOAD_FUTEX_WAIT(reg) \ - xorl $(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), reg -# define LOAD_FUTEX_WAIT_ABS(reg) \ - xorl $(FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME), reg -# define LOAD_FUTEX_WAKE(reg) \ - xorl $(FUTEX_WAKE | FUTEX_PRIVATE_FLAG), reg -#else -# if FUTEX_WAIT == 0 -# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ - movl %fs:PRIVATE_FUTEX, reg -# else -# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ - movl %fs:PRIVATE_FUTEX, reg ; \ - orl $FUTEX_WAIT, reg -# endif -# define LOAD_PRIVATE_FUTEX_WAKE(reg) \ - movl %fs:PRIVATE_FUTEX, reg ; \ - orl $FUTEX_WAKE, reg -# if FUTEX_WAIT == 0 -# define LOAD_FUTEX_WAIT(reg) \ - xorl $FUTEX_PRIVATE_FLAG, reg ; \ - andl %fs:PRIVATE_FUTEX, reg -# else -# define LOAD_FUTEX_WAIT(reg) \ - xorl $FUTEX_PRIVATE_FLAG, reg ; \ - andl %fs:PRIVATE_FUTEX, reg ; \ - orl $FUTEX_WAIT, reg -# endif -# define LOAD_FUTEX_WAIT_ABS(reg) \ - xorl $FUTEX_PRIVATE_FLAG, reg ; \ - andl %fs:PRIVATE_FUTEX, reg ; \ - orl $FUTEX_WAIT_BITSET | FUTEX_CLOCK_REALTIME, reg -# define LOAD_FUTEX_WAKE(reg) \ - xorl $FUTEX_PRIVATE_FLAG, reg ; \ - andl %fs:PRIVATE_FUTEX, reg ; \ - orl $FUTEX_WAKE, reg -#endif - - - .globl __lll_lock_wait_private - .type __lll_lock_wait_private,@function - .hidden __lll_lock_wait_private - .align 16 -__lll_lock_wait_private: - cfi_startproc - pushq %r10 - cfi_adjust_cfa_offset(8) - pushq %rdx - cfi_adjust_cfa_offset(8) - cfi_offset(%r10, -16) - cfi_offset(%rdx, -24) - xorq %r10, %r10 /* No timeout. */ - movl $2, %edx - LOAD_PRIVATE_FUTEX_WAIT (%esi) - - cmpl %edx, %eax /* NB: %edx == 2 */ - jne 2f - -1: LIBC_PROBE (lll_lock_wait_private, 1, %rdi) - movl $SYS_futex, %eax - syscall - -2: movl %edx, %eax - xchgl %eax, (%rdi) /* NB: lock is implied */ - - testl %eax, %eax - jnz 1b - - popq %rdx - cfi_adjust_cfa_offset(-8) - cfi_restore(%rdx) - popq %r10 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r10) - retq - cfi_endproc - .size __lll_lock_wait_private,.-__lll_lock_wait_private - -#if !IS_IN (libc) - .globl __lll_lock_wait - .type __lll_lock_wait,@function - .hidden __lll_lock_wait - .align 16 -__lll_lock_wait: - cfi_startproc - pushq %r10 - cfi_adjust_cfa_offset(8) - pushq %rdx - cfi_adjust_cfa_offset(8) - cfi_offset(%r10, -16) - cfi_offset(%rdx, -24) - xorq %r10, %r10 /* No timeout. */ - movl $2, %edx - LOAD_FUTEX_WAIT (%esi) - - cmpl %edx, %eax /* NB: %edx == 2 */ - jne 2f - -1: LIBC_PROBE (lll_lock_wait, 2, %rdi, %rsi) - movl $SYS_futex, %eax - syscall - -2: movl %edx, %eax - xchgl %eax, (%rdi) /* NB: lock is implied */ - - testl %eax, %eax - jnz 1b - - popq %rdx - cfi_adjust_cfa_offset(-8) - cfi_restore(%rdx) - popq %r10 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r10) - retq - cfi_endproc - .size __lll_lock_wait,.-__lll_lock_wait - - /* %rdi: futex - %rsi: flags - %rdx: timeout - %eax: futex value - */ - .globl __lll_timedlock_wait - .type __lll_timedlock_wait,@function - .hidden __lll_timedlock_wait - .align 16 -__lll_timedlock_wait: - cfi_startproc -# ifndef __ASSUME_FUTEX_CLOCK_REALTIME -# ifdef PIC - cmpl $0, __have_futex_clock_realtime(%rip) -# else - cmpl $0, __have_futex_clock_realtime -# endif - je .Lreltmo -# endif - - cmpq $0, (%rdx) - js 5f - - pushq %r9 - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%r9, 0) - - movq %rdx, %r10 - movl $0xffffffff, %r9d - LOAD_FUTEX_WAIT_ABS (%esi) - - movl $2, %edx - cmpl %edx, %eax - jne 2f - -1: movl $SYS_futex, %eax - movl $2, %edx - syscall - -2: xchgl %edx, (%rdi) /* NB: lock is implied */ - - testl %edx, %edx - jz 3f - - cmpl $-ETIMEDOUT, %eax - je 4f - cmpl $-EINVAL, %eax - jne 1b -4: movl %eax, %edx - negl %edx - -3: movl %edx, %eax - popq %r9 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r9) - retq - -5: movl $ETIMEDOUT, %eax - retq - -# ifndef __ASSUME_FUTEX_CLOCK_REALTIME -.Lreltmo: - /* Check for a valid timeout value. */ - cmpq $1000000000, 8(%rdx) - jae 3f - - pushq %r8 - cfi_adjust_cfa_offset(8) - pushq %r9 - cfi_adjust_cfa_offset(8) - pushq %r12 - cfi_adjust_cfa_offset(8) - pushq %r13 - cfi_adjust_cfa_offset(8) - pushq %r14 - cfi_adjust_cfa_offset(8) - cfi_offset(%r8, -16) - cfi_offset(%r9, -24) - cfi_offset(%r12, -32) - cfi_offset(%r13, -40) - cfi_offset(%r14, -48) - pushq %rsi - cfi_adjust_cfa_offset(8) - - /* Stack frame for the timespec and timeval structs. */ - subq $24, %rsp - cfi_adjust_cfa_offset(24) - - movq %rdi, %r12 - movq %rdx, %r13 - - movl $2, %edx - xchgl %edx, (%r12) - - testl %edx, %edx - je 6f - -1: - /* Get current time. */ - movq %rsp, %rdi - xorl %esi, %esi - /* This call works because we directly jump to a system call entry - which preserves all the registers. */ - call JUMPTARGET(__gettimeofday) - - /* Compute relative timeout. */ - movq 8(%rsp), %rax - movl $1000, %edi - mul %rdi /* Milli seconds to nano seconds. */ - movq (%r13), %rdi - movq 8(%r13), %rsi - subq (%rsp), %rdi - subq %rax, %rsi - jns 4f - addq $1000000000, %rsi - decq %rdi -4: testq %rdi, %rdi - js 2f /* Time is already up. */ - - /* Store relative timeout. */ - movq %rdi, (%rsp) - movq %rsi, 8(%rsp) - - /* Futex call. */ - movl $2, %edx - movl $1, %eax - movq %rsp, %r10 - movl 24(%rsp), %esi - LOAD_FUTEX_WAIT (%esi) - movq %r12, %rdi - movl $SYS_futex, %eax - syscall - - /* NB: %edx == 2 */ - xchgl %edx, (%r12) - - testl %edx, %edx - je 6f - - cmpl $-ETIMEDOUT, %eax - jne 1b -2: movl $ETIMEDOUT, %edx - -6: addq $32, %rsp - cfi_adjust_cfa_offset(-32) - popq %r14 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r14) - popq %r13 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r13) - popq %r12 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r12) - popq %r9 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r9) - popq %r8 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r8) - movl %edx, %eax - retq - -3: movl $EINVAL, %eax - retq -# endif - cfi_endproc - .size __lll_timedlock_wait,.-__lll_timedlock_wait -#endif - - - .globl __lll_unlock_wake_private - .type __lll_unlock_wake_private,@function - .hidden __lll_unlock_wake_private - .align 16 -__lll_unlock_wake_private: - cfi_startproc - pushq %rsi - cfi_adjust_cfa_offset(8) - pushq %rdx - cfi_adjust_cfa_offset(8) - cfi_offset(%rsi, -16) - cfi_offset(%rdx, -24) - - movl $0, (%rdi) - LOAD_PRIVATE_FUTEX_WAKE (%esi) - movl $1, %edx /* Wake one thread. */ - movl $SYS_futex, %eax - syscall - - popq %rdx - cfi_adjust_cfa_offset(-8) - cfi_restore(%rdx) - popq %rsi - cfi_adjust_cfa_offset(-8) - cfi_restore(%rsi) - retq - cfi_endproc - .size __lll_unlock_wake_private,.-__lll_unlock_wake_private - -#if !IS_IN (libc) - .globl __lll_unlock_wake - .type __lll_unlock_wake,@function - .hidden __lll_unlock_wake - .align 16 -__lll_unlock_wake: - cfi_startproc - pushq %rsi - cfi_adjust_cfa_offset(8) - pushq %rdx - cfi_adjust_cfa_offset(8) - cfi_offset(%rsi, -16) - cfi_offset(%rdx, -24) - - movl $0, (%rdi) - LOAD_FUTEX_WAKE (%esi) - movl $1, %edx /* Wake one thread. */ - movl $SYS_futex, %eax - syscall - - popq %rdx - cfi_adjust_cfa_offset(-8) - cfi_restore(%rdx) - popq %rsi - cfi_adjust_cfa_offset(-8) - cfi_restore(%rsi) - retq - cfi_endproc - .size __lll_unlock_wake,.-__lll_unlock_wake - - .globl __lll_timedwait_tid - .type __lll_timedwait_tid,@function - .hidden __lll_timedwait_tid - .align 16 -__lll_timedwait_tid: - cfi_startproc - pushq %r12 - cfi_adjust_cfa_offset(8) - pushq %r13 - cfi_adjust_cfa_offset(8) - cfi_offset(%r12, -16) - cfi_offset(%r13, -24) - - movq %rdi, %r12 - movq %rsi, %r13 - - /* Align stack to 16 bytes when calling __gettimeofday. */ - subq $24, %rsp - cfi_adjust_cfa_offset(24) - - /* Get current time. */ -2: movq %rsp, %rdi - xorl %esi, %esi - /* This call works because we directly jump to a system call entry - which preserves all the registers. */ - call JUMPTARGET(__gettimeofday) - - /* Compute relative timeout. */ - movq 8(%rsp), %rax - movl $1000, %edi - mul %rdi /* Milli seconds to nano seconds. */ - movq (%r13), %rdi - movq 8(%r13), %rsi - subq (%rsp), %rdi - subq %rax, %rsi - jns 5f - addq $1000000000, %rsi - decq %rdi -5: testq %rdi, %rdi - js 6f /* Time is already up. */ - - movq %rdi, (%rsp) /* Store relative timeout. */ - movq %rsi, 8(%rsp) - - movl (%r12), %edx - testl %edx, %edx - jz 4f - - movq %rsp, %r10 - /* XXX The kernel so far uses global futex for the wakeup at - all times. */ -#if FUTEX_WAIT == 0 - xorl %esi, %esi -#else - movl $FUTEX_WAIT, %esi -#endif - movq %r12, %rdi - movl $SYS_futex, %eax - syscall - - cmpl $0, (%rdi) - jne 1f -4: xorl %eax, %eax - -8: addq $24, %rsp - cfi_adjust_cfa_offset(-24) - popq %r13 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r13) - popq %r12 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r12) - retq - - cfi_adjust_cfa_offset(32) -1: cmpq $-ETIMEDOUT, %rax - jne 2b - -6: movl $ETIMEDOUT, %eax - jmp 8b - cfi_endproc - .size __lll_timedwait_tid,.-__lll_timedwait_tid -#endif diff --git a/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h b/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h deleted file mode 100644 index cbf6597e00..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h +++ /dev/null @@ -1,278 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LOWLEVELLOCK_H -#define _LOWLEVELLOCK_H 1 - -#include - -#ifndef __ASSEMBLER__ -# include -# include -# include -# include -# include - -# ifndef LOCK_INSTR -# ifdef UP -# define LOCK_INSTR /* nothing */ -# else -# define LOCK_INSTR "lock;" -# endif -# endif -#else -# ifndef LOCK -# ifdef UP -# define LOCK -# else -# define LOCK lock -# endif -# endif -#endif - -#include - -/* XXX Remove when no assembler code uses futexes anymore. */ -#define SYS_futex __NR_futex - -#ifndef __ASSEMBLER__ - -/* Initializer for lock. */ -#define LLL_LOCK_INITIALIZER (0) -#define LLL_LOCK_INITIALIZER_LOCKED (1) -#define LLL_LOCK_INITIALIZER_WAITERS (2) - - -/* NB: in the lll_trylock macro we simply return the value in %eax - after the cmpxchg instruction. In case the operation succeded this - value is zero. In case the operation failed, the cmpxchg instruction - has loaded the current value of the memory work which is guaranteed - to be nonzero. */ -#if !IS_IN (libc) || defined UP -# define __lll_trylock_asm LOCK_INSTR "cmpxchgl %2, %1" -#else -# define __lll_trylock_asm "cmpl $0, __libc_multiple_threads(%%rip)\n\t" \ - "je 0f\n\t" \ - "lock; cmpxchgl %2, %1\n\t" \ - "jmp 1f\n\t" \ - "0:\tcmpxchgl %2, %1\n\t" \ - "1:" -#endif - -#define lll_trylock(futex) \ - ({ int ret; \ - __asm __volatile (__lll_trylock_asm \ - : "=a" (ret), "=m" (futex) \ - : "r" (LLL_LOCK_INITIALIZER_LOCKED), "m" (futex), \ - "0" (LLL_LOCK_INITIALIZER) \ - : "memory"); \ - ret; }) - -#define lll_cond_trylock(futex) \ - ({ int ret; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %2, %1" \ - : "=a" (ret), "=m" (futex) \ - : "r" (LLL_LOCK_INITIALIZER_WAITERS), \ - "m" (futex), "0" (LLL_LOCK_INITIALIZER) \ - : "memory"); \ - ret; }) - -#if !IS_IN (libc) || defined UP -# define __lll_lock_asm_start LOCK_INSTR "cmpxchgl %4, %2\n\t" \ - "jz 24f\n\t" -#else -# define __lll_lock_asm_start "cmpl $0, __libc_multiple_threads(%%rip)\n\t" \ - "je 0f\n\t" \ - "lock; cmpxchgl %4, %2\n\t" \ - "jnz 1f\n\t" \ - "jmp 24f\n" \ - "0:\tcmpxchgl %4, %2\n\t" \ - "jz 24f\n\t" -#endif - -#define lll_lock(futex, private) \ - (void) \ - ({ int ignore1, ignore2, ignore3; \ - if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ - __asm __volatile (__lll_lock_asm_start \ - "1:\tlea %2, %%" RDI_LP "\n" \ - "2:\tsub $128, %%" RSP_LP "\n" \ - ".cfi_adjust_cfa_offset 128\n" \ - "3:\tcallq __lll_lock_wait_private\n" \ - "4:\tadd $128, %%" RSP_LP "\n" \ - ".cfi_adjust_cfa_offset -128\n" \ - "24:" \ - : "=S" (ignore1), "=&D" (ignore2), "=m" (futex), \ - "=a" (ignore3) \ - : "0" (1), "m" (futex), "3" (0) \ - : "cx", "r11", "cc", "memory"); \ - else \ - __asm __volatile (__lll_lock_asm_start \ - "1:\tlea %2, %%" RDI_LP "\n" \ - "2:\tsub $128, %%" RSP_LP "\n" \ - ".cfi_adjust_cfa_offset 128\n" \ - "3:\tcallq __lll_lock_wait\n" \ - "4:\tadd $128, %%" RSP_LP "\n" \ - ".cfi_adjust_cfa_offset -128\n" \ - "24:" \ - : "=S" (ignore1), "=D" (ignore2), "=m" (futex), \ - "=a" (ignore3) \ - : "1" (1), "m" (futex), "3" (0), "0" (private) \ - : "cx", "r11", "cc", "memory"); \ - }) \ - -#define lll_cond_lock(futex, private) \ - (void) \ - ({ int ignore1, ignore2, ignore3; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %4, %2\n\t" \ - "jz 24f\n" \ - "1:\tlea %2, %%" RDI_LP "\n" \ - "2:\tsub $128, %%" RSP_LP "\n" \ - ".cfi_adjust_cfa_offset 128\n" \ - "3:\tcallq __lll_lock_wait\n" \ - "4:\tadd $128, %%" RSP_LP "\n" \ - ".cfi_adjust_cfa_offset -128\n" \ - "24:" \ - : "=S" (ignore1), "=D" (ignore2), "=m" (futex), \ - "=a" (ignore3) \ - : "1" (2), "m" (futex), "3" (0), "0" (private) \ - : "cx", "r11", "cc", "memory"); \ - }) - -#define lll_timedlock(futex, timeout, private) \ - ({ int result, ignore1, ignore2, ignore3; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %1, %4\n\t" \ - "jz 24f\n" \ - "1:\tlea %4, %%" RDI_LP "\n" \ - "0:\tmov %8, %%" RDX_LP "\n" \ - "2:\tsub $128, %%" RSP_LP "\n" \ - ".cfi_adjust_cfa_offset 128\n" \ - "3:\tcallq __lll_timedlock_wait\n" \ - "4:\tadd $128, %%" RSP_LP "\n" \ - ".cfi_adjust_cfa_offset -128\n" \ - "24:" \ - : "=a" (result), "=D" (ignore1), "=S" (ignore2), \ - "=&d" (ignore3), "=m" (futex) \ - : "0" (0), "1" (1), "m" (futex), "m" (timeout), \ - "2" (private) \ - : "memory", "cx", "cc", "r10", "r11"); \ - result; }) - -extern int __lll_timedlock_elision (int *futex, short *adapt_count, - const struct timespec *timeout, - int private) attribute_hidden; - -#define lll_timedlock_elision(futex, adapt_count, timeout, private) \ - __lll_timedlock_elision(&(futex), &(adapt_count), timeout, private) - -#if !IS_IN (libc) || defined UP -# define __lll_unlock_asm_start LOCK_INSTR "decl %0\n\t" \ - "je 24f\n\t" -#else -# define __lll_unlock_asm_start "cmpl $0, __libc_multiple_threads(%%rip)\n\t" \ - "je 0f\n\t" \ - "lock; decl %0\n\t" \ - "jne 1f\n\t" \ - "jmp 24f\n\t" \ - "0:\tdecl %0\n\t" \ - "je 24f\n\t" -#endif - -#define lll_unlock(futex, private) \ - (void) \ - ({ int ignore; \ - if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ - __asm __volatile (__lll_unlock_asm_start \ - "1:\tlea %0, %%" RDI_LP "\n" \ - "2:\tsub $128, %%" RSP_LP "\n" \ - ".cfi_adjust_cfa_offset 128\n" \ - "3:\tcallq __lll_unlock_wake_private\n" \ - "4:\tadd $128, %%" RSP_LP "\n" \ - ".cfi_adjust_cfa_offset -128\n" \ - "24:" \ - : "=m" (futex), "=&D" (ignore) \ - : "m" (futex) \ - : "ax", "cx", "r11", "cc", "memory"); \ - else \ - __asm __volatile (__lll_unlock_asm_start \ - "1:\tlea %0, %%" RDI_LP "\n" \ - "2:\tsub $128, %%" RSP_LP "\n" \ - ".cfi_adjust_cfa_offset 128\n" \ - "3:\tcallq __lll_unlock_wake\n" \ - "4:\tadd $128, %%" RSP_LP "\n" \ - ".cfi_adjust_cfa_offset -128\n" \ - "24:" \ - : "=m" (futex), "=&D" (ignore) \ - : "m" (futex), "S" (private) \ - : "ax", "cx", "r11", "cc", "memory"); \ - }) - -#define lll_islocked(futex) \ - (futex != LLL_LOCK_INITIALIZER) - - -/* The kernel notifies a process which uses CLONE_CHILD_CLEARTID via futex - wake-up when the clone terminates. The memory location contains the - thread ID while the clone is running and is reset to zero by the kernel - afterwards. The kernel up to version 3.16.3 does not use the private futex - operations for futex wake-up when the clone terminates. */ -#define lll_wait_tid(tid) \ - do { \ - __typeof (tid) __tid; \ - while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid, LLL_SHARED);\ - } while (0) - -extern int __lll_timedwait_tid (int *, const struct timespec *) - attribute_hidden; - -/* As lll_wait_tid, but with a timeout. If the timeout occurs then return - ETIMEDOUT. If ABSTIME is invalid, return EINVAL. - XXX Note that this differs from the generic version in that we do the - error checking here and not in __lll_timedwait_tid. */ -#define lll_timedwait_tid(tid, abstime) \ - ({ \ - int __result = 0; \ - if ((tid) != 0) \ - { \ - if ((abstime)->tv_nsec < 0 || (abstime)->tv_nsec >= 1000000000) \ - __result = EINVAL; \ - else \ - __result = __lll_timedwait_tid (&(tid), (abstime)); \ - } \ - __result; }) - -extern int __lll_lock_elision (int *futex, short *adapt_count, int private) - attribute_hidden; - -extern int __lll_unlock_elision (int *lock, int private) - attribute_hidden; - -extern int __lll_trylock_elision (int *lock, short *adapt_count) - attribute_hidden; - -#define lll_lock_elision(futex, adapt_count, private) \ - __lll_lock_elision (&(futex), &(adapt_count), private) -#define lll_unlock_elision(futex, adapt_count, private) \ - __lll_unlock_elision (&(futex), private) -#define lll_trylock_elision(futex, adapt_count) \ - __lll_trylock_elision (&(futex), &(adapt_count)) - -#endif /* !__ASSEMBLER__ */ - -#endif /* lowlevellock.h */ diff --git a/sysdeps/unix/sysv/linux/x86_64/makecontext.c b/sysdeps/unix/sysv/linux/x86_64/makecontext.c deleted file mode 100644 index 59fb77a8c1..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/makecontext.c +++ /dev/null @@ -1,121 +0,0 @@ -/* Create new context. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include "ucontext_i.h" - -/* This implementation can handle any ARGC value but only - normal integer parameters. - makecontext sets up a stack and the registers for the - user context. The stack looks like this: - +-----------------------+ - | next context | - +-----------------------+ - | parameter 7-n | - +-----------------------+ - | trampoline address | - %rsp -> +-----------------------+ - - The registers are set up like this: - %rdi,%rsi,%rdx,%rcx,%r8,%r9: parameter 1 to 6 - %rbx : address of next context - %rsp : stack pointer. -*/ - -/* XXX: This implementation currently only handles integer arguments. - To handle long int and pointer arguments the va_arg arguments needs - to be changed to long and also the stdlib/tst-setcontext.c file needs - to be changed to pass long arguments to makecontext. */ - - -void -__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) -{ - extern void __start_context (void); - greg_t *sp; - unsigned int idx_uc_link; - va_list ap; - int i; - - /* Generate room on stack for parameter if needed and uc_link. */ - sp = (greg_t *) ((uintptr_t) ucp->uc_stack.ss_sp - + ucp->uc_stack.ss_size); - sp -= (argc > 6 ? argc - 6 : 0) + 1; - /* Align stack and make space for trampoline address. */ - sp = (greg_t *) ((((uintptr_t) sp) & -16L) - 8); - - idx_uc_link = (argc > 6 ? argc - 6 : 0) + 1; - - /* Setup context ucp. */ - /* Address to jump to. */ - ucp->uc_mcontext.gregs[REG_RIP] = (uintptr_t) func; - /* Setup rbx.*/ - ucp->uc_mcontext.gregs[REG_RBX] = (uintptr_t) &sp[idx_uc_link]; - ucp->uc_mcontext.gregs[REG_RSP] = (uintptr_t) sp; - - /* Setup stack. */ - sp[0] = (uintptr_t) &__start_context; - sp[idx_uc_link] = (uintptr_t) ucp->uc_link; - - va_start (ap, argc); - /* Handle arguments. - - The standard says the parameters must all be int values. This is - an historic accident and would be done differently today. For - x86-64 all integer values are passed as 64-bit values and - therefore extending the API to copy 64-bit values instead of - 32-bit ints makes sense. It does not break existing - functionality and it does not violate the standard which says - that passing non-int values means undefined behavior. */ - for (i = 0; i < argc; ++i) - switch (i) - { - case 0: - ucp->uc_mcontext.gregs[REG_RDI] = va_arg (ap, greg_t); - break; - case 1: - ucp->uc_mcontext.gregs[REG_RSI] = va_arg (ap, greg_t); - break; - case 2: - ucp->uc_mcontext.gregs[REG_RDX] = va_arg (ap, greg_t); - break; - case 3: - ucp->uc_mcontext.gregs[REG_RCX] = va_arg (ap, greg_t); - break; - case 4: - ucp->uc_mcontext.gregs[REG_R8] = va_arg (ap, greg_t); - break; - case 5: - ucp->uc_mcontext.gregs[REG_R9] = va_arg (ap, greg_t); - break; - default: - /* Put value on stack. */ - sp[i - 5] = va_arg (ap, greg_t); - break; - } - va_end (ap); - -} - - -weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/x86_64/profil-counter.h b/sysdeps/unix/sysv/linux/x86_64/profil-counter.h deleted file mode 100644 index 5970120bfa..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/profil-counter.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Low-level statistical profiling support function. Linux/x86-64 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -static void -__profil_counter (int signo, SIGCONTEXT scp) -{ - profil_count ((void *) GET_PC (scp)); - - /* This is a hack to prevent the compiler from implementing the - above function call as a sibcall. The sibcall would overwrite - the signal context. */ - asm volatile (""); -} diff --git a/sysdeps/unix/sysv/linux/x86_64/pthread_setaffinity.c b/sysdeps/unix/sysv/linux/x86_64/pthread_setaffinity.c deleted file mode 100644 index a7bbe38156..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/pthread_setaffinity.c +++ /dev/null @@ -1,14 +0,0 @@ -#include - -#define RESET_VGETCPU_CACHE() \ - do { \ - asm volatile ("movl %0, %%fs:%P1\n\t" \ - "movl %0, %%fs:%P2" \ - : \ - : "ir" (0), "i" (offsetof (struct pthread, \ - header.vgetcpu_cache[0])), \ - "i" (offsetof (struct pthread, \ - header.vgetcpu_cache[1]))); \ - } while (0) - -#include diff --git a/sysdeps/unix/sysv/linux/x86_64/readelflib.c b/sysdeps/unix/sysv/linux/x86_64/readelflib.c deleted file mode 100644 index 4c4e5f9d1a..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/readelflib.c +++ /dev/null @@ -1,2 +0,0 @@ -#define SKIP_EM_IA_64 -#include diff --git a/sysdeps/unix/sysv/linux/x86_64/register-dump.h b/sysdeps/unix/sysv/linux/x86_64/register-dump.h deleted file mode 100644 index 6a52957901..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/register-dump.h +++ /dev/null @@ -1,345 +0,0 @@ -/* Dump registers. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include <_itoa.h> - -/* We will print the register dump in this format: - - RAX: XXXXXXXXXXXXXXXX RBX: XXXXXXXXXXXXXXXX RCX: XXXXXXXXXXXXXXXX - RDX: XXXXXXXXXXXXXXXX RSI: XXXXXXXXXXXXXXXX RDI: XXXXXXXXXXXXXXXX - RBP: XXXXXXXXXXXXXXXX R8 : XXXXXXXXXXXXXXXX R9 : XXXXXXXXXXXXXXXX - R10: XXXXXXXXXXXXXXXX R11: XXXXXXXXXXXXXXXX R12: XXXXXXXXXXXXXXXX - R13: XXXXXXXXXXXXXXXX R14: XXXXXXXXXXXXXXXX R15: XXXXXXXXXXXXXXXX - RSP: XXXXXXXXXXXXXXXX - - RIP: XXXXXXXXXXXXXXXX EFLAGS: XXXXXXXX - - CS: XXXX DS: XXXX ES: XXXX FS: XXXX GS: XXXX - - Trap: XXXXXXXX Error: XXXXXXXX OldMask: XXXXXXXX - RSP/SIGNAL: XXXXXXXXXXXXXXXX CR2: XXXXXXXX - - FPUCW: XXXXXXXX FPUSW: XXXXXXXX TAG: XXXXXXXX - IPOFF: XXXXXXXX CSSEL: XXXX DATAOFF: XXXXXXXX DATASEL: XXXX - - ST(0) XXXX XXXXXXXXXXXXXXXX ST(1) XXXX XXXXXXXXXXXXXXXX - ST(2) XXXX XXXXXXXXXXXXXXXX ST(3) XXXX XXXXXXXXXXXXXXXX - ST(4) XXXX XXXXXXXXXXXXXXXX ST(5) XXXX XXXXXXXXXXXXXXXX - ST(6) XXXX XXXXXXXXXXXXXXXX ST(7) XXXX XXXXXXXXXXXXXXXX - - mxcsr: XXXX - XMM0 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM1 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XMM2 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM3 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XMM4 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM5 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XMM6 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM7 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XMM8 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM9 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XMM10: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM11: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XMM12: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM13: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - XMM14: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM15: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - - */ - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -register_dump (int fd, struct ucontext *ctx) -{ - char regs[25][16]; - char fpregs[30][8]; - char xmmregs[16][32]; - struct iovec iov[147]; - size_t nr = 0; - int i; - -#define ADD_STRING(str) \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr -#define ADD_MEM(str, len) \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr - - /* Generate strings of register contents. */ - hexvalue (ctx->uc_mcontext.gregs[REG_RAX], regs[0], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_RBX], regs[1], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_RCX], regs[2], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_RDX], regs[3], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_RSI], regs[4], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_RDI], regs[5], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_RBP], regs[6], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_R8], regs[7], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_R9], regs[8], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_R10], regs[9], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_R11], regs[10], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_R12], regs[11], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_R13], regs[12], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_R14], regs[13], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_R15], regs[14], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_RSP], regs[15], 16); - hexvalue (ctx->uc_mcontext.gregs[REG_RIP], regs[16], 16); - - hexvalue (ctx->uc_mcontext.gregs[REG_EFL], regs[17], 8); - hexvalue (ctx->uc_mcontext.gregs[REG_CSGSFS] & 0xffff, regs[18], 4); - hexvalue ((ctx->uc_mcontext.gregs[REG_CSGSFS] >> 16) & 0xffff, regs[19], 4); - hexvalue ((ctx->uc_mcontext.gregs[REG_CSGSFS] >> 32) & 0xffff, regs[20], 4); - /* hexvalue (ctx->ss, regs[23], 4); */ - hexvalue (ctx->uc_mcontext.gregs[REG_TRAPNO], regs[21], 8); - hexvalue (ctx->uc_mcontext.gregs[REG_ERR], regs[22], 8); - hexvalue (ctx->uc_mcontext.gregs[REG_OLDMASK], regs[23], 8); - hexvalue (ctx->uc_mcontext.gregs[REG_CR2], regs[24], 8); - - /* Generate the output. */ - ADD_STRING ("Register dump:\n\n RAX: "); - ADD_MEM (regs[0], 16); - ADD_STRING (" RBX: "); - ADD_MEM (regs[1], 16); - ADD_STRING (" RCX: "); - ADD_MEM (regs[2], 16); - ADD_STRING ("\n RDX: "); - ADD_MEM (regs[3], 16); - ADD_STRING (" RSI: "); - ADD_MEM (regs[4], 16); - ADD_STRING (" RDI: "); - ADD_MEM (regs[5], 16); - ADD_STRING ("\n RBP: "); - ADD_MEM (regs[6], 16); - ADD_STRING (" R8 : "); - ADD_MEM (regs[7], 16); - ADD_STRING (" R9 : "); - ADD_MEM (regs[8], 16); - ADD_STRING ("\n R10: "); - ADD_MEM (regs[9], 16); - ADD_STRING (" R11: "); - ADD_MEM (regs[10], 16); - ADD_STRING (" R12: "); - ADD_MEM (regs[11], 16); - ADD_STRING ("\n R13: "); - ADD_MEM (regs[12], 16); - ADD_STRING (" R14: "); - ADD_MEM (regs[13], 16); - ADD_STRING (" R15: "); - ADD_MEM (regs[14], 16); - ADD_STRING ("\n RSP: "); - ADD_MEM (regs[15], 16); - ADD_STRING ("\n\n RIP: "); - ADD_MEM (regs[16], 16); - ADD_STRING (" EFLAGS: "); - ADD_MEM (regs[17], 8); - ADD_STRING ("\n\n CS: "); - ADD_MEM (regs[18], 4); - ADD_STRING (" FS: "); - ADD_MEM (regs[19], 4); - ADD_STRING (" GS: "); - ADD_MEM (regs[20], 4); - /* - ADD_STRING (" SS: "); - ADD_MEM (regs[23], 4); - */ - ADD_STRING ("\n\n Trap: "); - ADD_MEM (regs[21], 8); - ADD_STRING (" Error: "); - ADD_MEM (regs[22], 8); - ADD_STRING (" OldMask: "); - ADD_MEM (regs[23], 8); - ADD_STRING (" CR2: "); - ADD_MEM (regs[24], 8); - - if (ctx->uc_mcontext.fpregs != NULL) - { - - /* Generate output for the FPU control/status registers. */ - hexvalue (ctx->uc_mcontext.fpregs->cwd, fpregs[0], 8); - hexvalue (ctx->uc_mcontext.fpregs->swd, fpregs[1], 8); - hexvalue (ctx->uc_mcontext.fpregs->ftw, fpregs[2], 8); - hexvalue (ctx->uc_mcontext.fpregs->rip, fpregs[3], 8); - hexvalue (ctx->uc_mcontext.fpregs->rdp, fpregs[4], 8); - - ADD_STRING ("\n\n FPUCW: "); - ADD_MEM (fpregs[0], 8); - ADD_STRING (" FPUSW: "); - ADD_MEM (fpregs[1], 8); - ADD_STRING (" TAG: "); - ADD_MEM (fpregs[2], 8); - ADD_STRING ("\n RIP: "); - ADD_MEM (fpregs[3], 8); - ADD_STRING (" RDP: "); - ADD_MEM (fpregs[4], 8); - - /* Now the real FPU registers. */ - hexvalue (ctx->uc_mcontext.fpregs->_st[0].exponent, fpregs[5], 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[0].significand[3] << 16 - | ctx->uc_mcontext.fpregs->_st[0].significand[2], fpregs[6], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[0].significand[1] << 16 - | ctx->uc_mcontext.fpregs->_st[0].significand[0], fpregs[7], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[1].exponent, fpregs[8], 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[1].significand[3] << 16 - | ctx->uc_mcontext.fpregs->_st[1].significand[2], fpregs[9], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[1].significand[1] << 16 - | ctx->uc_mcontext.fpregs->_st[1].significand[0], fpregs[10], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[2].exponent, fpregs[11], 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[2].significand[3] << 16 - | ctx->uc_mcontext.fpregs->_st[2].significand[2], fpregs[12], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[2].significand[1] << 16 - | ctx->uc_mcontext.fpregs->_st[2].significand[0], fpregs[13], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[3].exponent, fpregs[14], 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[3].significand[3] << 16 - | ctx->uc_mcontext.fpregs->_st[3].significand[2], fpregs[15], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[3].significand[1] << 16 - | ctx->uc_mcontext.fpregs->_st[3].significand[0], fpregs[16], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[4].exponent, fpregs[17], 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[4].significand[3] << 16 - | ctx->uc_mcontext.fpregs->_st[4].significand[2], fpregs[18], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[4].significand[1] << 16 - | ctx->uc_mcontext.fpregs->_st[4].significand[0], fpregs[19], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[5].exponent, fpregs[20], 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[5].significand[3] << 16 - | ctx->uc_mcontext.fpregs->_st[5].significand[2], fpregs[21], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[5].significand[1] << 16 - | ctx->uc_mcontext.fpregs->_st[5].significand[0], fpregs[22], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[6].exponent, fpregs[23], 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[6].significand[3] << 16 - | ctx->uc_mcontext.fpregs->_st[6].significand[2], fpregs[24], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[6].significand[1] << 16 - | ctx->uc_mcontext.fpregs->_st[6].significand[0], fpregs[25], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[7].exponent, fpregs[26], 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[7].significand[3] << 16 - | ctx->uc_mcontext.fpregs->_st[7].significand[2], fpregs[27], - 8); - hexvalue (ctx->uc_mcontext.fpregs->_st[7].significand[1] << 16 - | ctx->uc_mcontext.fpregs->_st[7].significand[0], fpregs[28], - 8); - - hexvalue (ctx->uc_mcontext.fpregs->mxcsr, fpregs[29], 4); - - for (i = 0; i < 16; i++) - hexvalue (ctx->uc_mcontext.fpregs->_xmm[i].element[3] << 24 - | ctx->uc_mcontext.fpregs->_xmm[i].element[2] << 16 - | ctx->uc_mcontext.fpregs->_xmm[i].element[1] << 8 - | ctx->uc_mcontext.fpregs->_xmm[i].element[0], xmmregs[i], - 32); - - - ADD_STRING ("\n\n ST(0) "); - ADD_MEM (fpregs[5], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[6], 8); - ADD_MEM (fpregs[7], 8); - ADD_STRING (" ST(1) "); - ADD_MEM (fpregs[8], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[9], 8); - ADD_MEM (fpregs[10], 8); - ADD_STRING ("\n ST(2) "); - ADD_MEM (fpregs[11], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[12], 8); - ADD_MEM (fpregs[13], 8); - ADD_STRING (" ST(3) "); - ADD_MEM (fpregs[14], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[15], 8); - ADD_MEM (fpregs[16], 8); - ADD_STRING ("\n ST(4) "); - ADD_MEM (fpregs[17], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[18], 8); - ADD_MEM (fpregs[19], 8); - ADD_STRING (" ST(5) "); - ADD_MEM (fpregs[20], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[21], 8); - ADD_MEM (fpregs[22], 8); - ADD_STRING ("\n ST(6) "); - ADD_MEM (fpregs[23], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[24], 8); - ADD_MEM (fpregs[25], 8); - ADD_STRING (" ST(7) "); - ADD_MEM (fpregs[27], 4); - ADD_STRING (" "); - ADD_MEM (fpregs[27], 8); - ADD_MEM (fpregs[28], 8); - - ADD_STRING ("\n mxcsr: "); - ADD_MEM (fpregs[29], 4); - - ADD_STRING ("\n XMM0: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING (" XMM1: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING ("\n XMM2: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING (" XMM3: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING ("\n XMM4: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING (" XMM5: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING ("\n XMM6: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING (" XMM7: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING ("\n XMM8: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING (" XMM9: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING ("\n XMM10: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING (" XMM11: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING ("\n XMM12: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING (" XMM13: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING ("\n XMM14: "); - ADD_MEM (xmmregs[0], 32); - ADD_STRING (" XMM15: "); - ADD_MEM (xmmregs[0], 32); - - } - - ADD_STRING ("\n"); - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, ctx) diff --git a/sysdeps/unix/sysv/linux/x86_64/sched_setaffinity.c b/sysdeps/unix/sysv/linux/x86_64/sched_setaffinity.c deleted file mode 100644 index d1101c56f5..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/sched_setaffinity.c +++ /dev/null @@ -1,14 +0,0 @@ -#include - -#define RESET_VGETCPU_CACHE() \ - do { \ - asm volatile ("movl %0, %%fs:%P1\n\t" \ - "movl %0, %%fs:%P2" \ - : \ - : "ir" (0), "i" (offsetof (struct pthread, \ - header.vgetcpu_cache[0])), \ - "i" (offsetof (struct pthread, \ - header.vgetcpu_cache[1]))); \ - } while (0) - -#include "../sched_setaffinity.c" diff --git a/sysdeps/unix/sysv/linux/x86_64/setcontext.S b/sysdeps/unix/sysv/linux/x86_64/setcontext.S deleted file mode 100644 index f41e7d47a2..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/setcontext.S +++ /dev/null @@ -1,102 +0,0 @@ -/* Install given context. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - - -/* int __setcontext (const ucontext_t *ucp) - - Restores the machine context in UCP and thereby resumes execution - in that context. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to restore anything - other than the PRESERVED state. */ - -ENTRY(__setcontext) - /* Save argument since syscall will destroy it. */ - pushq %rdi - cfi_adjust_cfa_offset(8) - - /* Set the signal mask with - rt_sigprocmask (SIG_SETMASK, mask, NULL, _NSIG/8). */ - leaq oSIGMASK(%rdi), %rsi - xorl %edx, %edx - movl $SIG_SETMASK, %edi - movl $_NSIG8,%r10d - movl $__NR_rt_sigprocmask, %eax - syscall - popq %rdi /* Reload %rdi, adjust stack. */ - cfi_adjust_cfa_offset(-8) - cmpq $-4095, %rax /* Check %rax for error. */ - jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ - - /* Restore the floating-point context. Not the registers, only the - rest. */ - movq oFPREGS(%rdi), %rcx - fldenv (%rcx) - ldmxcsr oMXCSR(%rdi) - - - /* Load the new stack pointer, the preserved registers and - registers used for passing args. */ - cfi_def_cfa(%rdi, 0) - cfi_offset(%rbx,oRBX) - cfi_offset(%rbp,oRBP) - cfi_offset(%r12,oR12) - cfi_offset(%r13,oR13) - cfi_offset(%r14,oR14) - cfi_offset(%r15,oR15) - cfi_offset(%rsp,oRSP) - cfi_offset(%rip,oRIP) - - movq oRSP(%rdi), %rsp - movq oRBX(%rdi), %rbx - movq oRBP(%rdi), %rbp - movq oR12(%rdi), %r12 - movq oR13(%rdi), %r13 - movq oR14(%rdi), %r14 - movq oR15(%rdi), %r15 - - /* The following ret should return to the address set with - getcontext. Therefore push the address on the stack. */ - movq oRIP(%rdi), %rcx - pushq %rcx - - movq oRSI(%rdi), %rsi - movq oRDX(%rdi), %rdx - movq oRCX(%rdi), %rcx - movq oR8(%rdi), %r8 - movq oR9(%rdi), %r9 - - /* Setup finally %rdi. */ - movq oRDI(%rdi), %rdi - - /* End FDE here, we fall into another context. */ - cfi_endproc - cfi_startproc - - /* Clear rax to indicate success. */ - xorl %eax, %eax - ret -PSEUDO_END(__setcontext) - -weak_alias (__setcontext, setcontext) diff --git a/sysdeps/unix/sysv/linux/x86_64/sigaction.c b/sysdeps/unix/sysv/linux/x86_64/sigaction.c deleted file mode 100644 index be058bac43..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/sigaction.c +++ /dev/null @@ -1,176 +0,0 @@ -/* POSIX.1 `sigaction' call for Linux/x86-64. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#include -#include - -/* The difference here is that the sigaction structure used in the - kernel is not the same as we use in the libc. Therefore we must - translate it here. */ -#include - -#include "ucontext_i.h" - -/* We do not globally define the SA_RESTORER flag so do it here. */ -#define SA_RESTORER 0x04000000 - -/* Using the hidden attribute here does not change the code but it - helps to avoid warnings. */ -extern void restore_rt (void) asm ("__restore_rt") attribute_hidden; - - -/* If ACT is not NULL, change the action for SIG to *ACT. - If OACT is not NULL, put the old action for SIG in *OACT. */ -int -__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) -{ - int result; - struct kernel_sigaction kact, koact; - - if (act) - { - kact.k_sa_handler = act->sa_handler; - memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t)); - kact.sa_flags = act->sa_flags | SA_RESTORER; - - kact.sa_restorer = &restore_rt; - } - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - result = INLINE_SYSCALL (rt_sigaction, 4, - sig, act ? &kact : NULL, - oact ? &koact : NULL, _NSIG / 8); - if (oact && result >= 0) - { - oact->sa_handler = koact.k_sa_handler; - memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t)); - oact->sa_flags = koact.sa_flags; - oact->sa_restorer = koact.sa_restorer; - } - return result; -} -libc_hidden_def (__libc_sigaction) - -#include - - -/* NOTE: Please think twice before making any changes to the bits of - code below. GDB needs some intimate knowledge about it to - recognize them as signal trampolines, and make backtraces through - signal handlers work right. Important are both the names - (__restore_rt) and the exact instruction sequence. - If you ever feel the need to make any changes, please notify the - appropriate GDB maintainer. - - The unwind information starts a byte before __restore_rt, so that - it is found when unwinding, to get an address the unwinder assumes - will be in the middle of a call instruction. See the Linux kernel - (the i386 vsyscall, in particular) for an explanation of the complex - unwind information used here in order to get the traditional CFA. - We do not restore cs - it's only stored as two bytes here so that's - a bit tricky. We don't use the gas cfi directives, so that we can - reliably add .cfi_signal_frame. */ - -#define do_cfa_expr \ - " .byte 0x0f\n" /* DW_CFA_def_cfa_expression */ \ - " .uleb128 2f-1f\n" /* length */ \ - "1: .byte 0x77\n" /* DW_OP_breg7 */ \ - " .sleb128 " CFI_STRINGIFY (oRSP) "\n" \ - " .byte 0x06\n" /* DW_OP_deref */ \ - "2:" - -#define do_expr(regno, offset) \ - " .byte 0x10\n" /* DW_CFA_expression */ \ - " .uleb128 " CFI_STRINGIFY (regno) "\n" \ - " .uleb128 2f-1f\n" /* length */ \ - "1: .byte 0x77\n" /* DW_OP_breg7 */ \ - " .sleb128 " CFI_STRINGIFY (offset) "\n" \ - "2:" - -#define RESTORE(name, syscall) RESTORE2 (name, syscall) -# define RESTORE2(name, syscall) \ -asm \ - ( \ - /* `nop' for debuggers assuming `call' should not disalign the code. */ \ - " nop\n" \ - ".align 16\n" \ - ".LSTART_" #name ":\n" \ - " .type __" #name ",@function\n" \ - "__" #name ":\n" \ - " movq $" #syscall ", %rax\n" \ - " syscall\n" \ - ".LEND_" #name ":\n" \ - ".section .eh_frame,\"a\",@progbits\n" \ - ".LSTARTFRAME_" #name ":\n" \ - " .long .LENDCIE_" #name "-.LSTARTCIE_" #name "\n" \ - ".LSTARTCIE_" #name ":\n" \ - " .long 0\n" /* CIE ID */ \ - " .byte 1\n" /* Version number */ \ - " .string \"zRS\"\n" /* NUL-terminated augmentation string */ \ - " .uleb128 1\n" /* Code alignment factor */ \ - " .sleb128 -8\n" /* Data alignment factor */ \ - " .uleb128 16\n" /* Return address register column (rip) */ \ - /* Augmentation value length */ \ - " .uleb128 .LENDAUGMNT_" #name "-.LSTARTAUGMNT_" #name "\n" \ - ".LSTARTAUGMNT_" #name ":\n" \ - " .byte 0x1b\n" /* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */ \ - ".LENDAUGMNT_" #name ":\n" \ - " .align " LP_SIZE "\n" \ - ".LENDCIE_" #name ":\n" \ - " .long .LENDFDE_" #name "-.LSTARTFDE_" #name "\n" /* FDE len */ \ - ".LSTARTFDE_" #name ":\n" \ - " .long .LSTARTFDE_" #name "-.LSTARTFRAME_" #name "\n" /* CIE */ \ - /* `LSTART_' is subtracted 1 as debuggers assume a `call' here. */ \ - " .long (.LSTART_" #name "-1)-.\n" /* PC-relative start addr. */ \ - " .long .LEND_" #name "-(.LSTART_" #name "-1)\n" \ - " .uleb128 0\n" /* FDE augmentation length */ \ - do_cfa_expr \ - do_expr (8 /* r8 */, oR8) \ - do_expr (9 /* r9 */, oR9) \ - do_expr (10 /* r10 */, oR10) \ - do_expr (11 /* r11 */, oR11) \ - do_expr (12 /* r12 */, oR12) \ - do_expr (13 /* r13 */, oR13) \ - do_expr (14 /* r14 */, oR14) \ - do_expr (15 /* r15 */, oR15) \ - do_expr (5 /* rdi */, oRDI) \ - do_expr (4 /* rsi */, oRSI) \ - do_expr (6 /* rbp */, oRBP) \ - do_expr (3 /* rbx */, oRBX) \ - do_expr (1 /* rdx */, oRDX) \ - do_expr (0 /* rax */, oRAX) \ - do_expr (2 /* rcx */, oRCX) \ - do_expr (7 /* rsp */, oRSP) \ - do_expr (16 /* rip */, oRIP) \ - /* libgcc-4.1.1 has only `DWARF_FRAME_REGISTERS == 17'. */ \ - /* do_expr (49 |* rflags *|, oEFL) */ \ - /* `cs'/`ds'/`fs' are unaligned and a different size. */ \ - /* gas: Error: register save offset not a multiple of 8 */ \ - " .align " LP_SIZE "\n" \ - ".LENDFDE_" #name ":\n" \ - " .previous\n" \ - ); -/* The return code for realtime-signals. */ -RESTORE (restore_rt, __NR_rt_sigreturn) diff --git a/sysdeps/unix/sysv/linux/x86_64/sigaltstack-offsets.sym b/sysdeps/unix/sysv/linux/x86_64/sigaltstack-offsets.sym deleted file mode 100644 index 5ff3af4a82..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/sigaltstack-offsets.sym +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef _XOPEN_EXTENDED -# define _XOPEN_EXTENDED -#endif - -#include -#include - --- - -#define sigaltstack(member) offsetof (stack_t, member) - -sizeSS sizeof (stack_t) -oSS_SP sigaltstack (ss_sp) -oSS_SIZE sigaltstack (ss_size) -oSS_FLAGS sigaltstack (ss_flags) diff --git a/sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h b/sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h deleted file mode 100644 index e935353ccd..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define SIGCONTEXT siginfo_t *_si, struct ucontext * -#define SIGCONTEXT_EXTRA_ARGS _si, -#define GET_PC(ctx) \ - ((void *) (uintptr_t) (ctx)->uc_mcontext.gregs[REG_RIP]) -#define GET_FRAME(ctx) \ - ((void *) (uintptr_t) (ctx)->uc_mcontext.gregs[REG_RBP]) -#define GET_STACK(ctx) \ - ((void *) (uintptr_t) (ctx)->uc_mcontext.gregs[REG_RSP]) - -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) diff --git a/sysdeps/unix/sysv/linux/x86_64/sigpending.c b/sysdeps/unix/sysv/linux/x86_64/sigpending.c deleted file mode 100644 index 410217ed84..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/sigpending.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Linux/x86_64 only has rt signals, thus we do not even want to try falling - back to the old style signals as the default Linux handler does. */ - -#include -#include -#include - -#include -#include - -/* Change the set of blocked signals to SET, - wait until a signal arrives, and restore the set of blocked signals. */ -int -sigpending (sigset_t *set) -{ - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - return INLINE_SYSCALL (rt_sigpending, 2, set, _NSIG / 8); -} diff --git a/sysdeps/unix/sysv/linux/x86_64/sigprocmask.c b/sysdeps/unix/sysv/linux/x86_64/sigprocmask.c deleted file mode 100644 index a87ad106ea..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/sigprocmask.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Written by Jes Sorensen, , April 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Linux/x86_64 only has rt signals, thus we do not even want to try falling - back to the old style signals as the default Linux handler does. */ - -#include -#include -#include - -#include -#include - -/* Get and/or change the set of blocked signals. */ -int -__sigprocmask (int how, const sigset_t *set, sigset_t *oset) -{ - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - return INLINE_SYSCALL (rt_sigprocmask, 4, how, set, oset, _NSIG / 8); -} -weak_alias (__sigprocmask, sigprocmask) diff --git a/sysdeps/unix/sysv/linux/x86_64/swapcontext.S b/sysdeps/unix/sysv/linux/x86_64/swapcontext.S deleted file mode 100644 index 0e1f0b5cab..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/swapcontext.S +++ /dev/null @@ -1,120 +0,0 @@ -/* Save current context and install the given one. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include "ucontext_i.h" - - -/* int __swapcontext (ucontext_t *oucp, const ucontext_t *ucp); - - Saves the machine context in oucp such that when it is activated, - it appears as if __swapcontextt() returned again, restores the - machine context in ucp and thereby resumes execution in that - context. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to save anything - other than the PRESERVED state. */ - -ENTRY(__swapcontext) - /* Save the preserved registers, the registers used for passing args, - and the return address. */ - movq %rbx, oRBX(%rdi) - movq %rbp, oRBP(%rdi) - movq %r12, oR12(%rdi) - movq %r13, oR13(%rdi) - movq %r14, oR14(%rdi) - movq %r15, oR15(%rdi) - - movq %rdi, oRDI(%rdi) - movq %rsi, oRSI(%rdi) - movq %rdx, oRDX(%rdi) - movq %rcx, oRCX(%rdi) - movq %r8, oR8(%rdi) - movq %r9, oR9(%rdi) - - movq (%rsp), %rcx - movq %rcx, oRIP(%rdi) - leaq 8(%rsp), %rcx /* Exclude the return address. */ - movq %rcx, oRSP(%rdi) - - /* We have separate floating-point register content memory on the - stack. We use the __fpregs_mem block in the context. Set the - links up correctly. */ - leaq oFPREGSMEM(%rdi), %rcx - movq %rcx, oFPREGS(%rdi) - /* Save the floating-point environment. */ - fnstenv (%rcx) - stmxcsr oMXCSR(%rdi) - - - /* The syscall destroys some registers, save them. */ - movq %rsi, %r12 - - /* Save the current signal mask and install the new one with - rt_sigprocmask (SIG_BLOCK, newset, oldset,_NSIG/8). */ - leaq oSIGMASK(%rdi), %rdx - leaq oSIGMASK(%rsi), %rsi - movl $SIG_SETMASK, %edi - movl $_NSIG8,%r10d - movl $__NR_rt_sigprocmask, %eax - syscall - cmpq $-4095, %rax /* Check %rax for error. */ - jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ - - /* Restore destroyed registers. */ - movq %r12, %rsi - - /* Restore the floating-point context. Not the registers, only the - rest. */ - movq oFPREGS(%rsi), %rcx - fldenv (%rcx) - ldmxcsr oMXCSR(%rsi) - - /* Load the new stack pointer and the preserved registers. */ - movq oRSP(%rsi), %rsp - movq oRBX(%rsi), %rbx - movq oRBP(%rsi), %rbp - movq oR12(%rsi), %r12 - movq oR13(%rsi), %r13 - movq oR14(%rsi), %r14 - movq oR15(%rsi), %r15 - - /* The following ret should return to the address set with - getcontext. Therefore push the address on the stack. */ - movq oRIP(%rsi), %rcx - pushq %rcx - - /* Setup registers used for passing args. */ - movq oRDI(%rsi), %rdi - movq oRDX(%rsi), %rdx - movq oRCX(%rsi), %rcx - movq oR8(%rsi), %r8 - movq oR9(%rsi), %r9 - - /* Setup finally %rsi. */ - movq oRSI(%rsi), %rsi - - /* Clear rax to indicate success. */ - xorl %eax, %eax - ret -PSEUDO_END(__swapcontext) - -weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/x86_64/syscall.S b/sysdeps/unix/sysv/linux/x86_64/syscall.S deleted file mode 100644 index f6486b9e4d..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/syscall.S +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Please consult the file sysdeps/unix/sysv/linux/x86-64/sysdep.h for - more information about the value -4095 used below. */ - -/* Usage: long syscall (syscall_number, arg1, arg2, arg3, arg4, arg5, arg6) - We need to do some arg shifting, the syscall_number will be in - rax. */ - - - .text -ENTRY (syscall) - movq %rdi, %rax /* Syscall number -> rax. */ - movq %rsi, %rdi /* shift arg1 - arg5. */ - movq %rdx, %rsi - movq %rcx, %rdx - movq %r8, %r10 - movq %r9, %r8 - movq 8(%rsp),%r9 /* arg6 is on the stack. */ - syscall /* Do the system call. */ - cmpq $-4095, %rax /* Check %rax for error. */ - jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ - ret /* Return to caller. */ - -PSEUDO_END (syscall) diff --git a/sysdeps/unix/sysv/linux/x86_64/syscalls.list b/sysdeps/unix/sysv/linux/x86_64/syscalls.list deleted file mode 100644 index 889193ba76..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/syscalls.list +++ /dev/null @@ -1,21 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -arch_prctl EXTRA arch_prctl i:ii __arch_prctl arch_prctl -modify_ldt EXTRA modify_ldt i:ipi __modify_ldt modify_ldt -pread64 - pread64 Ci:ipii __libc_pread __libc_pread64 __pread64 pread64 __pread pread -preadv64 - preadv Ci:ipii preadv64 preadv -pwrite64 - pwrite64 Ci:ipii __libc_pwrite __libc_pwrite64 __pwrite64 pwrite64 __pwrite pwrite -pwritev64 - pwritev Ci:ipii pwritev64 pwritev -syscall_clock_gettime EXTRA clock_gettime Ei:ip __syscall_clock_gettime - - -# proper socket implementations: -bind - bind i:ipi __bind bind -getpeername - getpeername i:ipp __getpeername getpeername -getsockname - getsockname i:ipp __getsockname getsockname -getsockopt - getsockopt i:iiiBN __getsockopt getsockopt -listen - listen i:ii __listen listen -setsockopt - setsockopt i:iiibn __setsockopt setsockopt -shutdown - shutdown i:ii __shutdown shutdown -socket - socket i:iii __socket socket -socketpair - socketpair i:iiif __socketpair socketpair diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h deleted file mode 100644 index 65980102be..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#ifndef __ASSEMBLER__ -# include -#endif - -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) - -/* The code to disable cancellation depends on the fact that the called - functions are special. They don't modify registers other than %rax - and %r11 if they return. Therefore we don't have to preserve other - registers around these calls. */ -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - SINGLE_THREAD_P; \ - jne L(pseudo_cancel); \ - .type __##syscall_name##_nocancel,@function; \ - .globl __##syscall_name##_nocancel; \ - __##syscall_name##_nocancel: \ - DO_CALL (syscall_name, args); \ - cmpq $-4095, %rax; \ - jae SYSCALL_ERROR_LABEL; \ - ret; \ - .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ - L(pseudo_cancel): \ - /* We always have to align the stack before calling a function. */ \ - subq $8, %rsp; cfi_adjust_cfa_offset (8); \ - CENABLE \ - /* The return value from CENABLE is argument for CDISABLE. */ \ - movq %rax, (%rsp); \ - DO_CALL (syscall_name, args); \ - movq (%rsp), %rdi; \ - /* Save %rax since it's the error code from the syscall. */ \ - movq %rax, %rdx; \ - CDISABLE \ - movq %rdx, %rax; \ - addq $8,%rsp; cfi_adjust_cfa_offset (-8); \ - cmpq $-4095, %rax; \ - jae SYSCALL_ERROR_LABEL - - -# if IS_IN (libpthread) -# define CENABLE call __pthread_enable_asynccancel; -# define CDISABLE call __pthread_disable_asynccancel; -# define __local_multiple_threads __pthread_multiple_threads -# elif IS_IN (libc) -# define CENABLE call __libc_enable_asynccancel; -# define CDISABLE call __libc_disable_asynccancel; -# define __local_multiple_threads __libc_multiple_threads -# elif IS_IN (librt) -# define CENABLE call __librt_enable_asynccancel; -# define CDISABLE call __librt_disable_asynccancel; -# else -# error Unsupported library -# endif - -# if IS_IN (libpthread) || IS_IN (libc) -# ifndef __ASSEMBLER__ -extern int __local_multiple_threads attribute_hidden; -# define SINGLE_THREAD_P \ - __builtin_expect (__local_multiple_threads == 0, 1) -# else -# define SINGLE_THREAD_P cmpl $0, __local_multiple_threads(%rip) -# endif - -# else - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P cmpl $0, %fs:MULTIPLE_THREADS_OFFSET -# endif - -# endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.S b/sysdeps/unix/sysv/linux/x86_64/sysdep.S deleted file mode 100644 index 29b664d3f1..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/sysdep.S +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* The following code is only used in the shared library when we - compile the reentrant version. Otherwise each system call defines - each own version. */ - -#ifndef PIC - -/* The syscall stubs jump here when they detect an error. - The code for Linux is almost identical to the canonical Unix - code, except that the error number in %rax is negated. */ - -#undef CALL_MCOUNT -#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers %rax. */ - - .text -ENTRY (__syscall_error) - neg %RAX_LP - -#define __syscall_error __syscall_error_1 -#include - -#endif /* !PIC */ diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h deleted file mode 100644 index 880e496880..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h +++ /dev/null @@ -1,392 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_X86_64_SYSDEP_H -#define _LINUX_X86_64_SYSDEP_H 1 - -/* There is some commonality. */ -#include -#include -#include - -#if IS_IN (rtld) -# include /* Defines RTLD_PRIVATE_ERRNO. */ -#endif - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -/* This is a kludge to make syscalls.list find these under the names - pread and pwrite, since some kernel headers define those names - and some define the *64 names for the same system calls. */ -#if !defined __NR_pread && defined __NR_pread64 -# define __NR_pread __NR_pread64 -#endif -#if !defined __NR_pwrite && defined __NR_pwrite64 -# define __NR_pwrite __NR_pwrite64 -#endif - -/* This is to help the old kernel headers where __NR_semtimedop is not - available. */ -#ifndef __NR_semtimedop -# define __NR_semtimedop 220 -#endif - - -#ifdef __ASSEMBLER__ - -/* Linux uses a negative return value to indicate syscall errors, - unlike most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be - negative even if the call succeeded. E.g., the `lseek' system call - might return a large offset. Therefore we must not anymore test - for < 0, but test for a real error by making sure the value in %eax - is a real error number. Linus said he will make sure the no syscall - returns a value in -1 .. -4095 as a valid result so we can savely - test with -4095. */ - -/* We don't want the label for the error handle to be global when we define - it here. */ -# ifdef PIC -# define SYSCALL_ERROR_LABEL 0f -# else -# define SYSCALL_ERROR_LABEL syscall_error -# endif - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - cmpq $-4095, %rax; \ - jae SYSCALL_ERROR_LABEL - -# undef PSEUDO_END -# define PSEUDO_END(name) \ - SYSCALL_ERROR_HANDLER \ - END (name) - -# undef PSEUDO_NOERRNO -# define PSEUDO_NOERRNO(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args) - -# undef PSEUDO_END_NOERRNO -# define PSEUDO_END_NOERRNO(name) \ - END (name) - -# define ret_NOERRNO ret - -# undef PSEUDO_ERRVAL -# define PSEUDO_ERRVAL(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - negq %rax - -# undef PSEUDO_END_ERRVAL -# define PSEUDO_END_ERRVAL(name) \ - END (name) - -# define ret_ERRVAL ret - -# if defined PIC && defined RTLD_PRIVATE_ERRNO -# define SYSCALL_SET_ERRNO \ - lea rtld_errno(%rip), %RCX_LP; \ - neg %eax; \ - movl %eax, (%rcx) -# else -# if IS_IN (libc) -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif -# define SYSCALL_SET_ERRNO \ - movq SYSCALL_ERROR_ERRNO@GOTTPOFF(%rip), %rcx;\ - neg %eax; \ - movl %eax, %fs:(%rcx); -# endif - -# ifndef PIC -# define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ -# else -# define SYSCALL_ERROR_HANDLER \ -0: \ - SYSCALL_SET_ERRNO; \ - or $-1, %RAX_LP; \ - ret; -# endif /* PIC */ - -/* The Linux/x86-64 kernel expects the system call parameters in - registers according to the following table: - - syscall number rax - arg 1 rdi - arg 2 rsi - arg 3 rdx - arg 4 r10 - arg 5 r8 - arg 6 r9 - - The Linux kernel uses and destroys internally these registers: - return address from - syscall rcx - eflags from syscall r11 - - Normal function call, including calls to the system call stub - functions in the libc, get the first six parameters passed in - registers and the seventh parameter and later on the stack. The - register use is as follows: - - system call number in the DO_CALL macro - arg 1 rdi - arg 2 rsi - arg 3 rdx - arg 4 rcx - arg 5 r8 - arg 6 r9 - - We have to take care that the stack is aligned to 16 bytes. When - called the stack is not aligned since the return address has just - been pushed. - - - Syscalls of more than 6 arguments are not supported. */ - -# undef DO_CALL -# define DO_CALL(syscall_name, args) \ - DOARGS_##args \ - movl $SYS_ify (syscall_name), %eax; \ - syscall; - -# define DOARGS_0 /* nothing */ -# define DOARGS_1 /* nothing */ -# define DOARGS_2 /* nothing */ -# define DOARGS_3 /* nothing */ -# define DOARGS_4 movq %rcx, %r10; -# define DOARGS_5 DOARGS_4 -# define DOARGS_6 DOARGS_5 - -#else /* !__ASSEMBLER__ */ -/* Define a macro which expands inline into the wrapper code for a system - call. */ -# undef INLINE_SYSCALL -# define INLINE_SYSCALL(name, nr, args...) \ - ({ \ - unsigned long int resultvar = INTERNAL_SYSCALL (name, , nr, args); \ - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (resultvar, ))) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, )); \ - resultvar = (unsigned long int) -1; \ - } \ - (long int) resultvar; }) - -/* Define a macro with explicit types for arguments, which expands inline - into the wrapper code for a system call. It should be used when size - of any argument > size of long int. */ -# undef INLINE_SYSCALL_TYPES -# define INLINE_SYSCALL_TYPES(name, nr, args...) \ - ({ \ - unsigned long int resultvar = INTERNAL_SYSCALL_TYPES (name, , nr, args); \ - if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (resultvar, ))) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, )); \ - resultvar = (unsigned long int) -1; \ - } \ - (long int) resultvar; }) - -# undef INTERNAL_SYSCALL_DECL -# define INTERNAL_SYSCALL_DECL(err) do { } while (0) - -/* Registers clobbered by syscall. */ -# define REGISTERS_CLOBBERED_BY_SYSCALL "cc", "r11", "cx" - -# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - ({ \ - unsigned long int resultvar; \ - LOAD_ARGS_##nr (args) \ - LOAD_REGS_##nr \ - asm volatile ( \ - "syscall\n\t" \ - : "=a" (resultvar) \ - : "0" (name) ASM_ARGS_##nr : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \ - (long int) resultvar; }) -# undef INTERNAL_SYSCALL -# define INTERNAL_SYSCALL(name, err, nr, args...) \ - INTERNAL_SYSCALL_NCS (__NR_##name, err, nr, ##args) - -# define INTERNAL_SYSCALL_NCS_TYPES(name, err, nr, args...) \ - ({ \ - unsigned long int resultvar; \ - LOAD_ARGS_TYPES_##nr (args) \ - LOAD_REGS_TYPES_##nr (args) \ - asm volatile ( \ - "syscall\n\t" \ - : "=a" (resultvar) \ - : "0" (name) ASM_ARGS_##nr : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \ - (long int) resultvar; }) -# undef INTERNAL_SYSCALL_TYPES -# define INTERNAL_SYSCALL_TYPES(name, err, nr, args...) \ - INTERNAL_SYSCALL_NCS_TYPES (__NR_##name, err, nr, ##args) - -# undef INTERNAL_SYSCALL_ERROR_P -# define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((unsigned long int) (long int) (val) >= -4095L) - -# undef INTERNAL_SYSCALL_ERRNO -# define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) - -/* List of system calls which are supported as vsyscalls. */ -# define HAVE_CLOCK_GETTIME_VSYSCALL 1 -# define HAVE_GETTIMEOFDAY_VSYSCALL 1 -# define HAVE_GETCPU_VSYSCALL 1 - -# define LOAD_ARGS_0() -# define LOAD_REGS_0 -# define ASM_ARGS_0 - -# define LOAD_ARGS_TYPES_1(t1, a1) \ - t1 __arg1 = (t1) (a1); \ - LOAD_ARGS_0 () -# define LOAD_REGS_TYPES_1(t1, a1) \ - register t1 _a1 asm ("rdi") = __arg1; \ - LOAD_REGS_0 -# define ASM_ARGS_1 ASM_ARGS_0, "r" (_a1) -# define LOAD_ARGS_1(a1) \ - LOAD_ARGS_TYPES_1 (long int, a1) -# define LOAD_REGS_1 \ - LOAD_REGS_TYPES_1 (long int, a1) - -# define LOAD_ARGS_TYPES_2(t1, a1, t2, a2) \ - t2 __arg2 = (t2) (a2); \ - LOAD_ARGS_TYPES_1 (t1, a1) -# define LOAD_REGS_TYPES_2(t1, a1, t2, a2) \ - register t2 _a2 asm ("rsi") = __arg2; \ - LOAD_REGS_TYPES_1(t1, a1) -# define ASM_ARGS_2 ASM_ARGS_1, "r" (_a2) -# define LOAD_ARGS_2(a1, a2) \ - LOAD_ARGS_TYPES_2 (long int, a1, long int, a2) -# define LOAD_REGS_2 \ - LOAD_REGS_TYPES_2 (long int, a1, long int, a2) - -# define LOAD_ARGS_TYPES_3(t1, a1, t2, a2, t3, a3) \ - t3 __arg3 = (t3) (a3); \ - LOAD_ARGS_TYPES_2 (t1, a1, t2, a2) -# define LOAD_REGS_TYPES_3(t1, a1, t2, a2, t3, a3) \ - register t3 _a3 asm ("rdx") = __arg3; \ - LOAD_REGS_TYPES_2(t1, a1, t2, a2) -# define ASM_ARGS_3 ASM_ARGS_2, "r" (_a3) -# define LOAD_ARGS_3(a1, a2, a3) \ - LOAD_ARGS_TYPES_3 (long int, a1, long int, a2, long int, a3) -# define LOAD_REGS_3 \ - LOAD_REGS_TYPES_3 (long int, a1, long int, a2, long int, a3) - -# define LOAD_ARGS_TYPES_4(t1, a1, t2, a2, t3, a3, t4, a4) \ - t4 __arg4 = (t4) (a4); \ - LOAD_ARGS_TYPES_3 (t1, a1, t2, a2, t3, a3) -# define LOAD_REGS_TYPES_4(t1, a1, t2, a2, t3, a3, t4, a4) \ - register t4 _a4 asm ("r10") = __arg4; \ - LOAD_REGS_TYPES_3(t1, a2, t2, a2, t3, a3) -# define ASM_ARGS_4 ASM_ARGS_3, "r" (_a4) -# define LOAD_ARGS_4(a1, a2, a3, a4) \ - LOAD_ARGS_TYPES_4 (long int, a1, long int, a2, long int, a3, \ - long int, a4) -# define LOAD_REGS_4 \ - LOAD_REGS_TYPES_4 (long int, a1, long int, a2, long int, a3, \ - long int, a4) - -# define LOAD_ARGS_TYPES_5(t1, a1, t2, a2, t3, a3, t4, a4, t5, a5) \ - t5 __arg5 = (t5) (a5); \ - LOAD_ARGS_TYPES_4 (t1, a1, t2, a2, t3, a3, t4, a4) -# define LOAD_REGS_TYPES_5(t1, a1, t2, a2, t3, a3, t4, a4, t5, a5) \ - register t5 _a5 asm ("r8") = __arg5; \ - LOAD_REGS_TYPES_4 (t1, a1, t2, a2, t3, a3, t4, a4) -# define ASM_ARGS_5 ASM_ARGS_4, "r" (_a5) -# define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ - LOAD_ARGS_TYPES_5 (long int, a1, long int, a2, long int, a3, \ - long int, a4, long int, a5) -# define LOAD_REGS_5 \ - LOAD_REGS_TYPES_5 (long int, a1, long int, a2, long int, a3, \ - long int, a4, long int, a5) - -# define LOAD_ARGS_TYPES_6(t1, a1, t2, a2, t3, a3, t4, a4, t5, a5, t6, a6) \ - t6 __arg6 = (t6) (a6); \ - LOAD_ARGS_TYPES_5 (t1, a1, t2, a2, t3, a3, t4, a4, t5, a5) -# define LOAD_REGS_TYPES_6(t1, a1, t2, a2, t3, a3, t4, a4, t5, a5, t6, a6) \ - register t6 _a6 asm ("r9") = __arg6; \ - LOAD_REGS_TYPES_5 (t1, a1, t2, a2, t3, a3, t4, a4, t5, a5) -# define ASM_ARGS_6 ASM_ARGS_5, "r" (_a6) -# define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ - LOAD_ARGS_TYPES_6 (long int, a1, long int, a2, long int, a3, \ - long int, a4, long int, a5, long int, a6) -# define LOAD_REGS_6 \ - LOAD_REGS_TYPES_6 (long int, a1, long int, a2, long int, a3, \ - long int, a4, long int, a5, long int, a6) - -#endif /* __ASSEMBLER__ */ - - -/* Pointer mangling support. */ -#if IS_IN (rtld) -/* We cannot use the thread descriptor because in ld.so we use setjmp - earlier than the descriptor is initialized. */ -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(reg) xor __pointer_chk_guard_local(%rip), reg; \ - rol $2*LP_SIZE+1, reg -# define PTR_DEMANGLE(reg) ror $2*LP_SIZE+1, reg; \ - xor __pointer_chk_guard_local(%rip), reg -# else -# define PTR_MANGLE(reg) asm ("xor __pointer_chk_guard_local(%%rip), %0\n" \ - "rol $2*" LP_SIZE "+1, %0" \ - : "=r" (reg) : "0" (reg)) -# define PTR_DEMANGLE(reg) asm ("ror $2*" LP_SIZE "+1, %0\n" \ - "xor __pointer_chk_guard_local(%%rip), %0" \ - : "=r" (reg) : "0" (reg)) -# endif -#else -# ifdef __ASSEMBLER__ -# define PTR_MANGLE(reg) xor %fs:POINTER_GUARD, reg; \ - rol $2*LP_SIZE+1, reg -# define PTR_DEMANGLE(reg) ror $2*LP_SIZE+1, reg; \ - xor %fs:POINTER_GUARD, reg -# else -# define PTR_MANGLE(var) asm ("xor %%fs:%c2, %0\n" \ - "rol $2*" LP_SIZE "+1, %0" \ - : "=r" (var) \ - : "0" (var), \ - "i" (offsetof (tcbhead_t, \ - pointer_guard))) -# define PTR_DEMANGLE(var) asm ("ror $2*" LP_SIZE "+1, %0\n" \ - "xor %%fs:%c2, %0" \ - : "=r" (var) \ - : "0" (var), \ - "i" (offsetof (tcbhead_t, \ - pointer_guard))) -# endif -#endif - -/* How to pass the off{64}_t argument on p{readv,writev}{64}. */ -#undef LO_HI_LONG -#define LO_HI_LONG(val) (val), 0 - -#endif /* linux/x86_64/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/x86_64/timer_create.c b/sysdeps/unix/sysv/linux/x86_64/timer_create.c deleted file mode 100644 index 7fbe9618b4..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/timer_create.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include "compat-timer.h" -#include - - -#define timer_create_alias __timer_create_new -#include - -#undef timer_create -versioned_symbol (librt, __timer_create_new, timer_create, GLIBC_2_3_3); - - -#if SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_3_3) -timer_t __compat_timer_list[OLD_TIMER_MAX] attribute_hidden; - - -int -__timer_create_old (clockid_t clock_id, struct sigevent *evp, int *timerid) -{ - timer_t newp; - - int res = __timer_create_new (clock_id, evp, &newp); - if (res == 0) - { - int i; - for (i = 0; i < OLD_TIMER_MAX; ++i) - if (__compat_timer_list[i] == NULL - && ! atomic_compare_and_exchange_bool_acq (&__compat_timer_list[i], - newp, NULL)) - { - *timerid = i; - break; - } - - if (__glibc_unlikely (i == OLD_TIMER_MAX)) - { - /* No free slot. */ - (void) __timer_delete_new (newp); - __set_errno (EINVAL); - res = -1; - } - } - - return res; -} -compat_symbol (librt, __timer_create_old, timer_create, GLIBC_2_2); -#endif diff --git a/sysdeps/unix/sysv/linux/x86_64/timer_delete.c b/sysdeps/unix/sysv/linux/x86_64/timer_delete.c deleted file mode 100644 index eb24585c85..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/timer_delete.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include "compat-timer.h" - - -#define timer_delete_alias __timer_delete_new -#include - -#undef timer_delete -versioned_symbol (librt, __timer_delete_new, timer_delete, GLIBC_2_3_3); - - -#if SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_3_3) -int -__timer_delete_old (int timerid) -{ - int res = __timer_delete_new (__compat_timer_list[timerid]); - - if (res == 0) - /* Successful timer deletion, now free the index. We only need to - store a word and that better be atomic. */ - __compat_timer_list[timerid] = NULL; - - return res; -} -compat_symbol (librt, __timer_delete_old, timer_delete, GLIBC_2_2); -#endif diff --git a/sysdeps/unix/sysv/linux/x86_64/timer_getoverr.c b/sysdeps/unix/sysv/linux/x86_64/timer_getoverr.c deleted file mode 100644 index 78d45ab371..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/timer_getoverr.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include "compat-timer.h" - - -#define timer_getoverrun_alias __timer_getoverrun_new -#include - -#undef timer_getoverrun -versioned_symbol (librt, __timer_getoverrun_new, timer_getoverrun, - GLIBC_2_3_3); - - -#if SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_3_3) -int -__timer_getoverrun_old (int timerid) -{ - return __timer_getoverrun_new (__compat_timer_list[timerid]); -} -compat_symbol (librt, __timer_getoverrun_old, timer_getoverrun, GLIBC_2_2); -#endif diff --git a/sysdeps/unix/sysv/linux/x86_64/timer_gettime.c b/sysdeps/unix/sysv/linux/x86_64/timer_gettime.c deleted file mode 100644 index 35af18226e..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/timer_gettime.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include "compat-timer.h" - - -#define timer_gettime_alias __timer_gettime_new -#include - -#undef timer_gettime -versioned_symbol (librt, __timer_gettime_new, timer_gettime, GLIBC_2_3_3); - - -#if SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_3_3) -int -__timer_gettime_old (int timerid, struct itimerspec *value) -{ - return __timer_gettime_new (__compat_timer_list[timerid], value); -} -compat_symbol (librt, __timer_gettime_old, timer_gettime, GLIBC_2_2); -#endif diff --git a/sysdeps/unix/sysv/linux/x86_64/timer_settime.c b/sysdeps/unix/sysv/linux/x86_64/timer_settime.c deleted file mode 100644 index 7174a505a8..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/timer_settime.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; see the file COPYING.LIB. If - not, see . */ - -#include -#include "compat-timer.h" - - -#define timer_settime_alias __timer_settime_new -#include - -#undef timer_settime -versioned_symbol (librt, __timer_settime_new, timer_settime, GLIBC_2_3_3); - - -#if SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_3_3) -int -__timer_settime_old (int timerid, int flags, const struct itimerspec *value, - struct itimerspec *ovalue) -{ - return __timer_settime_new (__compat_timer_list[timerid], flags, - value, ovalue); -} -compat_symbol (librt, __timer_settime_old, timer_settime, GLIBC_2_2); -#endif diff --git a/sysdeps/unix/sysv/linux/x86_64/ucontext_i.sym b/sysdeps/unix/sysv/linux/x86_64/ucontext_i.sym deleted file mode 100644 index af3e0e544b..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/ucontext_i.sym +++ /dev/null @@ -1,37 +0,0 @@ -#include -#include -#include - --- - -SIG_BLOCK -SIG_SETMASK - -_NSIG8 (_NSIG / 8) - -#define ucontext(member) offsetof (ucontext_t, member) -#define mcontext(member) ucontext (uc_mcontext.member) -#define mreg(reg) mcontext (gregs[REG_##reg]) - -oRBP mreg (RBP) -oRSP mreg (RSP) -oRBX mreg (RBX) -oR8 mreg (R8) -oR9 mreg (R9) -oR10 mreg (R10) -oR11 mreg (R11) -oR12 mreg (R12) -oR13 mreg (R13) -oR14 mreg (R14) -oR15 mreg (R15) -oRDI mreg (RDI) -oRSI mreg (RSI) -oRDX mreg (RDX) -oRAX mreg (RAX) -oRCX mreg (RCX) -oRIP mreg (RIP) -oEFL mreg (EFL) -oFPREGS mcontext (fpregs) -oSIGMASK ucontext (uc_sigmask) -oFPREGSMEM ucontext (__fpregs_mem) -oMXCSR ucontext (__fpregs_mem.mxcsr) diff --git a/sysdeps/unix/sysv/linux/x86_64/umount.c b/sysdeps/unix/sysv/linux/x86_64/umount.c deleted file mode 100644 index 1de40a476e..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/umount.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines , 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Since we don't have an oldumount system call, do what the kernel - does down here. */ - -extern long int __umount2 (const char *name, int flags); - -long int -__umount (const char *name) -{ - return __umount2 (name, 0); -} - -weak_alias (__umount, umount); diff --git a/sysdeps/unix/sysv/linux/x86_64/vfork.S b/sysdeps/unix/sysv/linux/x86_64/vfork.S deleted file mode 100644 index a8b0369fb3..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/vfork.S +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include -#include - - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__vfork) - - /* Pop the return PC value into RDI. We need a register that - is preserved by the syscall and that we're allowed to destroy. */ - popq %rdi - cfi_adjust_cfa_offset(-8) - cfi_register(%rip, %rdi) - - /* Stuff the syscall number in RAX and enter into the kernel. */ - movl $SYS_ify (vfork), %eax - syscall - - /* Push back the return PC. */ - pushq %rdi - cfi_adjust_cfa_offset(8) - - cmpl $-4095, %eax - jae SYSCALL_ERROR_LABEL /* Branch forward if it failed. */ - - /* Normal return. */ - ret - -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) - -weak_alias (__vfork, vfork) -strong_alias (__vfork, __libc_vfork) diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/Implies b/sysdeps/unix/sysv/linux/x86_64/x32/Implies deleted file mode 100644 index b287872e93..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/Implies +++ /dev/null @@ -1 +0,0 @@ -x86_64/x32/nptl diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/Makefile b/sysdeps/unix/sysv/linux/x86_64/x32/Makefile deleted file mode 100644 index 16b768d8ba..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -# The default ABI is x32. -default-abi := x32 - -ifeq ($(subdir),misc) -sysdep_routines += arch_prctl -endif - -ifeq ($(subdir),conform) -# For bugs 16437 and 21279. -conformtest-xfail-conds += x86_64-x32-linux -endif diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/arch_prctl.c b/sysdeps/unix/sysv/linux/x86_64/x32/arch_prctl.c deleted file mode 100644 index 67880e4b28..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/arch_prctl.c +++ /dev/null @@ -1,63 +0,0 @@ -/* arch_prctl call for Linux/x32. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Since x32 arch_prctl stores 32-bit base address of segment registers - %fs and %gs as unsigned 64-bit value via ARCH_GET_FS and ARCH_GET_GS, - we use an unsigned 64-bit variable to hold the base address and copy - it to ADDR after the system call returns. */ - -int -__arch_prctl (int code, uintptr_t *addr) -{ - int res; - uint64_t addr64; - void *prctl_arg = addr; - - switch (code) - { - case ARCH_GET_FS: - case ARCH_GET_GS: - prctl_arg = &addr64; - break; - } - - res = INLINE_SYSCALL (arch_prctl, 2, code, prctl_arg); - if (res == 0) - switch (code) - { - case ARCH_GET_FS: - case ARCH_GET_GS: - /* Check for a large value that overflows. */ - if ((uintptr_t) addr64 != addr64) - { - __set_errno (EOVERFLOW); - return -1; - } - *addr = (uintptr_t) addr64; - break; - } - - return res; -} -weak_alias (__arch_prctl, arch_prctl) diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/c++-types.data b/sysdeps/unix/sysv/linux/x86_64/x32/c++-types.data deleted file mode 100644 index 348bf52b2b..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:x -blksize_t:x -caddr_t:Pc -clockid_t:i -clock_t:x -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:y -fsfilcnt64_t:y -fsfilcnt_t:y -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:y -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:y -off64_t:x -off_t:x -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:x -rlim64_t:y -rlim_t:y -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:x -time_t:x -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/configure b/sysdeps/unix/sysv/linux/x86_64/x32/configure deleted file mode 100644 index 1417da4785..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/configure +++ /dev/null @@ -1,17 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/86_64/x32. - -arch_minimum_kernel=3.4.0 - -test -n "$libc_cv_slibdir" || -case "$prefix" in -/usr | /usr/) - libc_cv_slibdir=/libx32 - libc_cv_rtlddir=/libx32 - if test "$libdir" = '${exec_prefix}/lib'; then - libdir='${exec_prefix}/libx32'; - # Locale data can be shared between 32-bit and 64-bit libraries. - libc_cv_complocaledir='${exec_prefix}/lib/locale' - fi - ;; -esac diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/configure.ac b/sysdeps/unix/sysv/linux/x86_64/x32/configure.ac deleted file mode 100644 index f44e4ca148..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/configure.ac +++ /dev/null @@ -1,6 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/86_64/x32. - -arch_minimum_kernel=3.4.0 - -LIBC_SLIBDIR_RTLDDIR([libx32], [libx32]) diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/dl-cache.h b/sysdeps/unix/sysv/linux/x86_64/x32/dl-cache.h deleted file mode 100644 index 8da3025fd7..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/dl-cache.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Defined as (FLAG_ELF_LIBC6 | FLAG_X8664_LIBX32). */ -#undef _DL_CACHE_DEFAULT_ID -#define _DL_CACHE_DEFAULT_ID 0x803 diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/fts.c b/sysdeps/unix/sysv/linux/x86_64/x32/fts.c deleted file mode 100644 index 980573ed68..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/fts.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/fts64.c b/sysdeps/unix/sysv/linux/x86_64/x32/fts64.c deleted file mode 100644 index 221d1b5608..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/fts64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/ftw.c b/sysdeps/unix/sysv/linux/x86_64/x32/ftw.c deleted file mode 100644 index a21dfe5690..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/ftw.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/ftw64.c b/sysdeps/unix/sysv/linux/x86_64/x32/ftw64.c deleted file mode 100644 index 3c025b738a..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/ftw64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/getcpu.c b/sysdeps/unix/sysv/linux/x86_64/x32/getcpu.c deleted file mode 100644 index cd26d2e627..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/getcpu.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef SHARED -# include - -void *getcpu_ifunc (void) __asm__ ("__getcpu"); - -void * -inhibit_stack_protector -getcpu_ifunc (void) -{ - PREPARE_VERSION (linux26, "LINUX_2.6", 61765110); - - return _dl_vdso_vsym ("__vdso_getcpu", &linux26); -} -__asm (".type __getcpu, %gnu_indirect_function"); -#endif diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/glob.c b/sysdeps/unix/sysv/linux/x86_64/x32/glob.c deleted file mode 100644 index e5427475f6..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/glob.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist deleted file mode 100644 index 236357bd83..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist +++ /dev/null @@ -1,9 +0,0 @@ -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __libc_stack_end D 0x4 -GLIBC_2.16 __tls_get_addr F -GLIBC_2.16 _dl_mcount F -GLIBC_2.16 _r_debug D 0x14 -GLIBC_2.16 calloc F -GLIBC_2.16 free F -GLIBC_2.16 malloc F -GLIBC_2.16 realloc F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libBrokenLocale.abilist deleted file mode 100644 index 0c8f428e3b..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libBrokenLocale.abilist +++ /dev/null @@ -1,2 +0,0 @@ -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libanl.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libanl.abilist deleted file mode 100644 index 695118b9d5..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libanl.abilist +++ /dev/null @@ -1,5 +0,0 @@ -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 gai_cancel F -GLIBC_2.16 gai_error F -GLIBC_2.16 gai_suspend F -GLIBC_2.16 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist deleted file mode 100644 index 0c557e9f43..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist +++ /dev/null @@ -1,2112 +0,0 @@ -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 _Exit F -GLIBC_2.16 _IO_2_1_stderr_ D 0xa0 -GLIBC_2.16 _IO_2_1_stdin_ D 0xa0 -GLIBC_2.16 _IO_2_1_stdout_ D 0xa0 -GLIBC_2.16 _IO_adjust_column F -GLIBC_2.16 _IO_adjust_wcolumn F -GLIBC_2.16 _IO_default_doallocate F -GLIBC_2.16 _IO_default_finish F -GLIBC_2.16 _IO_default_pbackfail F -GLIBC_2.16 _IO_default_uflow F -GLIBC_2.16 _IO_default_xsgetn F -GLIBC_2.16 _IO_default_xsputn F -GLIBC_2.16 _IO_do_write F -GLIBC_2.16 _IO_doallocbuf F -GLIBC_2.16 _IO_fclose F -GLIBC_2.16 _IO_fdopen F -GLIBC_2.16 _IO_feof F -GLIBC_2.16 _IO_ferror F -GLIBC_2.16 _IO_fflush F -GLIBC_2.16 _IO_fgetpos F -GLIBC_2.16 _IO_fgetpos64 F -GLIBC_2.16 _IO_fgets F -GLIBC_2.16 _IO_file_attach F -GLIBC_2.16 _IO_file_close F -GLIBC_2.16 _IO_file_close_it F -GLIBC_2.16 _IO_file_doallocate F -GLIBC_2.16 _IO_file_finish F -GLIBC_2.16 _IO_file_fopen F -GLIBC_2.16 _IO_file_init F -GLIBC_2.16 _IO_file_jumps D 0x54 -GLIBC_2.16 _IO_file_open F -GLIBC_2.16 _IO_file_overflow F -GLIBC_2.16 _IO_file_read F -GLIBC_2.16 _IO_file_seek F -GLIBC_2.16 _IO_file_seekoff F -GLIBC_2.16 _IO_file_setbuf F -GLIBC_2.16 _IO_file_stat F -GLIBC_2.16 _IO_file_sync F -GLIBC_2.16 _IO_file_underflow F -GLIBC_2.16 _IO_file_write F -GLIBC_2.16 _IO_file_xsputn F -GLIBC_2.16 _IO_flockfile F -GLIBC_2.16 _IO_flush_all F -GLIBC_2.16 _IO_flush_all_linebuffered F -GLIBC_2.16 _IO_fopen F -GLIBC_2.16 _IO_fprintf F -GLIBC_2.16 _IO_fputs F -GLIBC_2.16 _IO_fread F -GLIBC_2.16 _IO_free_backup_area F -GLIBC_2.16 _IO_free_wbackup_area F -GLIBC_2.16 _IO_fsetpos F -GLIBC_2.16 _IO_fsetpos64 F -GLIBC_2.16 _IO_ftell F -GLIBC_2.16 _IO_ftrylockfile F -GLIBC_2.16 _IO_funlockfile F -GLIBC_2.16 _IO_fwrite F -GLIBC_2.16 _IO_getc F -GLIBC_2.16 _IO_getline F -GLIBC_2.16 _IO_getline_info F -GLIBC_2.16 _IO_gets F -GLIBC_2.16 _IO_init F -GLIBC_2.16 _IO_init_marker F -GLIBC_2.16 _IO_init_wmarker F -GLIBC_2.16 _IO_iter_begin F -GLIBC_2.16 _IO_iter_end F -GLIBC_2.16 _IO_iter_file F -GLIBC_2.16 _IO_iter_next F -GLIBC_2.16 _IO_least_wmarker F -GLIBC_2.16 _IO_link_in F -GLIBC_2.16 _IO_list_all D 0x4 -GLIBC_2.16 _IO_list_lock F -GLIBC_2.16 _IO_list_resetlock F -GLIBC_2.16 _IO_list_unlock F -GLIBC_2.16 _IO_marker_delta F -GLIBC_2.16 _IO_marker_difference F -GLIBC_2.16 _IO_padn F -GLIBC_2.16 _IO_peekc_locked F -GLIBC_2.16 _IO_popen F -GLIBC_2.16 _IO_printf F -GLIBC_2.16 _IO_proc_close F -GLIBC_2.16 _IO_proc_open F -GLIBC_2.16 _IO_putc F -GLIBC_2.16 _IO_puts F -GLIBC_2.16 _IO_remove_marker F -GLIBC_2.16 _IO_seekmark F -GLIBC_2.16 _IO_seekoff F -GLIBC_2.16 _IO_seekpos F -GLIBC_2.16 _IO_seekwmark F -GLIBC_2.16 _IO_setb F -GLIBC_2.16 _IO_setbuffer F -GLIBC_2.16 _IO_setvbuf F -GLIBC_2.16 _IO_sgetn F -GLIBC_2.16 _IO_sprintf F -GLIBC_2.16 _IO_sputbackc F -GLIBC_2.16 _IO_sputbackwc F -GLIBC_2.16 _IO_sscanf F -GLIBC_2.16 _IO_str_init_readonly F -GLIBC_2.16 _IO_str_init_static F -GLIBC_2.16 _IO_str_overflow F -GLIBC_2.16 _IO_str_pbackfail F -GLIBC_2.16 _IO_str_seekoff F -GLIBC_2.16 _IO_str_underflow F -GLIBC_2.16 _IO_sungetc F -GLIBC_2.16 _IO_sungetwc F -GLIBC_2.16 _IO_switch_to_get_mode F -GLIBC_2.16 _IO_switch_to_main_wget_area F -GLIBC_2.16 _IO_switch_to_wbackup_area F -GLIBC_2.16 _IO_switch_to_wget_mode F -GLIBC_2.16 _IO_un_link F -GLIBC_2.16 _IO_ungetc F -GLIBC_2.16 _IO_unsave_markers F -GLIBC_2.16 _IO_unsave_wmarkers F -GLIBC_2.16 _IO_vfprintf F -GLIBC_2.16 _IO_vfscanf F -GLIBC_2.16 _IO_vsprintf F -GLIBC_2.16 _IO_wdefault_doallocate F -GLIBC_2.16 _IO_wdefault_finish F -GLIBC_2.16 _IO_wdefault_pbackfail F -GLIBC_2.16 _IO_wdefault_uflow F -GLIBC_2.16 _IO_wdefault_xsgetn F -GLIBC_2.16 _IO_wdefault_xsputn F -GLIBC_2.16 _IO_wdo_write F -GLIBC_2.16 _IO_wdoallocbuf F -GLIBC_2.16 _IO_wfile_jumps D 0x54 -GLIBC_2.16 _IO_wfile_overflow F -GLIBC_2.16 _IO_wfile_seekoff F -GLIBC_2.16 _IO_wfile_sync F -GLIBC_2.16 _IO_wfile_underflow F -GLIBC_2.16 _IO_wfile_xsputn F -GLIBC_2.16 _IO_wmarker_delta F -GLIBC_2.16 _IO_wsetb F -GLIBC_2.16 __adjtimex F -GLIBC_2.16 __after_morecore_hook D 0x4 -GLIBC_2.16 __arch_prctl F -GLIBC_2.16 __argz_count F -GLIBC_2.16 __argz_next F -GLIBC_2.16 __argz_stringify F -GLIBC_2.16 __asprintf F -GLIBC_2.16 __asprintf_chk F -GLIBC_2.16 __assert F -GLIBC_2.16 __assert_fail F -GLIBC_2.16 __assert_perror_fail F -GLIBC_2.16 __backtrace F -GLIBC_2.16 __backtrace_symbols F -GLIBC_2.16 __backtrace_symbols_fd F -GLIBC_2.16 __bsd_getpgrp F -GLIBC_2.16 __bzero F -GLIBC_2.16 __check_rhosts_file D 0x4 -GLIBC_2.16 __chk_fail F -GLIBC_2.16 __clone F -GLIBC_2.16 __close F -GLIBC_2.16 __cmsg_nxthdr F -GLIBC_2.16 __confstr_chk F -GLIBC_2.16 __connect F -GLIBC_2.16 __ctype_b_loc F -GLIBC_2.16 __ctype_get_mb_cur_max F -GLIBC_2.16 __ctype_tolower_loc F -GLIBC_2.16 __ctype_toupper_loc F -GLIBC_2.16 __curbrk D 0x4 -GLIBC_2.16 __cxa_at_quick_exit F -GLIBC_2.16 __cxa_atexit F -GLIBC_2.16 __cxa_finalize F -GLIBC_2.16 __cyg_profile_func_enter F -GLIBC_2.16 __cyg_profile_func_exit F -GLIBC_2.16 __daylight D 0x4 -GLIBC_2.16 __dcgettext F -GLIBC_2.16 __default_morecore F -GLIBC_2.16 __dgettext F -GLIBC_2.16 __dprintf_chk F -GLIBC_2.16 __dup2 F -GLIBC_2.16 __duplocale F -GLIBC_2.16 __endmntent F -GLIBC_2.16 __environ D 0x4 -GLIBC_2.16 __errno_location F -GLIBC_2.16 __fbufsize F -GLIBC_2.16 __fcntl F -GLIBC_2.16 __fdelt_chk F -GLIBC_2.16 __fdelt_warn F -GLIBC_2.16 __fentry__ F -GLIBC_2.16 __ffs F -GLIBC_2.16 __fgets_chk F -GLIBC_2.16 __fgets_unlocked_chk F -GLIBC_2.16 __fgetws_chk F -GLIBC_2.16 __fgetws_unlocked_chk F -GLIBC_2.16 __finite F -GLIBC_2.16 __finitef F -GLIBC_2.16 __finitel F -GLIBC_2.16 __flbf F -GLIBC_2.16 __fork F -GLIBC_2.16 __fpending F -GLIBC_2.16 __fprintf_chk F -GLIBC_2.16 __fpu_control D 0x2 -GLIBC_2.16 __fpurge F -GLIBC_2.16 __fread_chk F -GLIBC_2.16 __fread_unlocked_chk F -GLIBC_2.16 __freadable F -GLIBC_2.16 __freading F -GLIBC_2.16 __free_hook D 0x4 -GLIBC_2.16 __freelocale F -GLIBC_2.16 __fsetlocking F -GLIBC_2.16 __fwprintf_chk F -GLIBC_2.16 __fwritable F -GLIBC_2.16 __fwriting F -GLIBC_2.16 __fxstat F -GLIBC_2.16 __fxstat64 F -GLIBC_2.16 __fxstatat F -GLIBC_2.16 __fxstatat64 F -GLIBC_2.16 __getauxval F -GLIBC_2.16 __getcwd_chk F -GLIBC_2.16 __getdelim F -GLIBC_2.16 __getdomainname_chk F -GLIBC_2.16 __getgroups_chk F -GLIBC_2.16 __gethostname_chk F -GLIBC_2.16 __getlogin_r_chk F -GLIBC_2.16 __getmntent_r F -GLIBC_2.16 __getpagesize F -GLIBC_2.16 __getpgid F -GLIBC_2.16 __getpid F -GLIBC_2.16 __gets_chk F -GLIBC_2.16 __gettimeofday F -GLIBC_2.16 __getwd_chk F -GLIBC_2.16 __gmtime_r F -GLIBC_2.16 __h_errno_location F -GLIBC_2.16 __isalnum_l F -GLIBC_2.16 __isalpha_l F -GLIBC_2.16 __isascii_l F -GLIBC_2.16 __isblank_l F -GLIBC_2.16 __iscntrl_l F -GLIBC_2.16 __isctype F -GLIBC_2.16 __isdigit_l F -GLIBC_2.16 __isgraph_l F -GLIBC_2.16 __isinf F -GLIBC_2.16 __isinff F -GLIBC_2.16 __isinfl F -GLIBC_2.16 __islower_l F -GLIBC_2.16 __isnan F -GLIBC_2.16 __isnanf F -GLIBC_2.16 __isnanl F -GLIBC_2.16 __isoc99_fscanf F -GLIBC_2.16 __isoc99_fwscanf F -GLIBC_2.16 __isoc99_scanf F -GLIBC_2.16 __isoc99_sscanf F -GLIBC_2.16 __isoc99_swscanf F -GLIBC_2.16 __isoc99_vfscanf F -GLIBC_2.16 __isoc99_vfwscanf F -GLIBC_2.16 __isoc99_vscanf F -GLIBC_2.16 __isoc99_vsscanf F -GLIBC_2.16 __isoc99_vswscanf F -GLIBC_2.16 __isoc99_vwscanf F -GLIBC_2.16 __isoc99_wscanf F -GLIBC_2.16 __isprint_l F -GLIBC_2.16 __ispunct_l F -GLIBC_2.16 __isspace_l F -GLIBC_2.16 __isupper_l F -GLIBC_2.16 __iswalnum_l F -GLIBC_2.16 __iswalpha_l F -GLIBC_2.16 __iswblank_l F -GLIBC_2.16 __iswcntrl_l F -GLIBC_2.16 __iswctype F -GLIBC_2.16 __iswctype_l F -GLIBC_2.16 __iswdigit_l F -GLIBC_2.16 __iswgraph_l F -GLIBC_2.16 __iswlower_l F -GLIBC_2.16 __iswprint_l F -GLIBC_2.16 __iswpunct_l F -GLIBC_2.16 __iswspace_l F -GLIBC_2.16 __iswupper_l F -GLIBC_2.16 __iswxdigit_l F -GLIBC_2.16 __isxdigit_l F -GLIBC_2.16 __ivaliduser F -GLIBC_2.16 __key_decryptsession_pk_LOCAL D 0x4 -GLIBC_2.16 __key_encryptsession_pk_LOCAL D 0x4 -GLIBC_2.16 __key_gendes_LOCAL D 0x4 -GLIBC_2.16 __libc_allocate_rtsig F -GLIBC_2.16 __libc_calloc F -GLIBC_2.16 __libc_current_sigrtmax F -GLIBC_2.16 __libc_current_sigrtmin F -GLIBC_2.16 __libc_free F -GLIBC_2.16 __libc_freeres F -GLIBC_2.16 __libc_init_first F -GLIBC_2.16 __libc_mallinfo F -GLIBC_2.16 __libc_malloc F -GLIBC_2.16 __libc_mallopt F -GLIBC_2.16 __libc_memalign F -GLIBC_2.16 __libc_pvalloc F -GLIBC_2.16 __libc_realloc F -GLIBC_2.16 __libc_sa_len F -GLIBC_2.16 __libc_start_main F -GLIBC_2.16 __libc_valloc F -GLIBC_2.16 __longjmp_chk F -GLIBC_2.16 __lseek F -GLIBC_2.16 __lxstat F -GLIBC_2.16 __lxstat64 F -GLIBC_2.16 __malloc_hook D 0x4 -GLIBC_2.16 __malloc_initialize_hook D 0x4 -GLIBC_2.16 __mbrlen F -GLIBC_2.16 __mbrtowc F -GLIBC_2.16 __mbsnrtowcs_chk F -GLIBC_2.16 __mbsrtowcs_chk F -GLIBC_2.16 __mbstowcs_chk F -GLIBC_2.16 __memalign_hook D 0x4 -GLIBC_2.16 __memcpy_chk F -GLIBC_2.16 __memmove_chk F -GLIBC_2.16 __mempcpy F -GLIBC_2.16 __mempcpy_chk F -GLIBC_2.16 __mempcpy_small F -GLIBC_2.16 __memset_chk F -GLIBC_2.16 __monstartup F -GLIBC_2.16 __morecore D 0x4 -GLIBC_2.16 __nanosleep F -GLIBC_2.16 __newlocale F -GLIBC_2.16 __nl_langinfo_l F -GLIBC_2.16 __nss_configure_lookup F -GLIBC_2.16 __nss_database_lookup F -GLIBC_2.16 __nss_group_lookup F -GLIBC_2.16 __nss_hostname_digits_dots F -GLIBC_2.16 __nss_hosts_lookup F -GLIBC_2.16 __nss_next F -GLIBC_2.16 __nss_passwd_lookup F -GLIBC_2.16 __obstack_printf_chk F -GLIBC_2.16 __obstack_vprintf_chk F -GLIBC_2.16 __open F -GLIBC_2.16 __open64 F -GLIBC_2.16 __open64_2 F -GLIBC_2.16 __open_2 F -GLIBC_2.16 __openat64_2 F -GLIBC_2.16 __openat_2 F -GLIBC_2.16 __overflow F -GLIBC_2.16 __pipe F -GLIBC_2.16 __poll F -GLIBC_2.16 __poll_chk F -GLIBC_2.16 __posix_getopt F -GLIBC_2.16 __ppoll_chk F -GLIBC_2.16 __pread64 F -GLIBC_2.16 __pread64_chk F -GLIBC_2.16 __pread_chk F -GLIBC_2.16 __printf_chk F -GLIBC_2.16 __printf_fp F -GLIBC_2.16 __profile_frequency F -GLIBC_2.16 __progname D 0x4 -GLIBC_2.16 __progname_full D 0x4 -GLIBC_2.16 __ptsname_r_chk F -GLIBC_2.16 __pwrite64 F -GLIBC_2.16 __rawmemchr F -GLIBC_2.16 __rcmd_errstr D 0x4 -GLIBC_2.16 __read F -GLIBC_2.16 __read_chk F -GLIBC_2.16 __readlink_chk F -GLIBC_2.16 __readlinkat_chk F -GLIBC_2.16 __realloc_hook D 0x4 -GLIBC_2.16 __realpath_chk F -GLIBC_2.16 __recv_chk F -GLIBC_2.16 __recvfrom_chk F -GLIBC_2.16 __register_atfork F -GLIBC_2.16 __res_init F -GLIBC_2.16 __res_nclose F -GLIBC_2.16 __res_ninit F -GLIBC_2.16 __res_randomid F -GLIBC_2.16 __res_state F -GLIBC_2.16 __rpc_thread_createerr F -GLIBC_2.16 __rpc_thread_svc_fdset F -GLIBC_2.16 __rpc_thread_svc_max_pollfd F -GLIBC_2.16 __rpc_thread_svc_pollfd F -GLIBC_2.16 __sbrk F -GLIBC_2.16 __sched_cpualloc F -GLIBC_2.16 __sched_cpucount F -GLIBC_2.16 __sched_cpufree F -GLIBC_2.16 __sched_get_priority_max F -GLIBC_2.16 __sched_get_priority_min F -GLIBC_2.16 __sched_getparam F -GLIBC_2.16 __sched_getscheduler F -GLIBC_2.16 __sched_setscheduler F -GLIBC_2.16 __sched_yield F -GLIBC_2.16 __secure_getenv F -GLIBC_2.16 __select F -GLIBC_2.16 __send F -GLIBC_2.16 __setmntent F -GLIBC_2.16 __setpgid F -GLIBC_2.16 __sigaction F -GLIBC_2.16 __sigaddset F -GLIBC_2.16 __sigdelset F -GLIBC_2.16 __sigismember F -GLIBC_2.16 __signbit F -GLIBC_2.16 __signbitf F -GLIBC_2.16 __signbitl F -GLIBC_2.16 __sigpause F -GLIBC_2.16 __sigsetjmp F -GLIBC_2.16 __sigsuspend F -GLIBC_2.16 __snprintf_chk F -GLIBC_2.16 __sprintf_chk F -GLIBC_2.16 __stack_chk_fail F -GLIBC_2.16 __statfs F -GLIBC_2.16 __stpcpy F -GLIBC_2.16 __stpcpy_chk F -GLIBC_2.16 __stpcpy_small F -GLIBC_2.16 __stpncpy F -GLIBC_2.16 __stpncpy_chk F -GLIBC_2.16 __strcasecmp F -GLIBC_2.16 __strcasecmp_l F -GLIBC_2.16 __strcasestr F -GLIBC_2.16 __strcat_chk F -GLIBC_2.16 __strcoll_l F -GLIBC_2.16 __strcpy_chk F -GLIBC_2.16 __strcpy_small F -GLIBC_2.16 __strcspn_c1 F -GLIBC_2.16 __strcspn_c2 F -GLIBC_2.16 __strcspn_c3 F -GLIBC_2.16 __strdup F -GLIBC_2.16 __strerror_r F -GLIBC_2.16 __strfmon_l F -GLIBC_2.16 __strftime_l F -GLIBC_2.16 __strncasecmp_l F -GLIBC_2.16 __strncat_chk F -GLIBC_2.16 __strncpy_chk F -GLIBC_2.16 __strndup F -GLIBC_2.16 __strpbrk_c2 F -GLIBC_2.16 __strpbrk_c3 F -GLIBC_2.16 __strsep_1c F -GLIBC_2.16 __strsep_2c F -GLIBC_2.16 __strsep_3c F -GLIBC_2.16 __strsep_g F -GLIBC_2.16 __strspn_c1 F -GLIBC_2.16 __strspn_c2 F -GLIBC_2.16 __strspn_c3 F -GLIBC_2.16 __strtod_internal F -GLIBC_2.16 __strtod_l F -GLIBC_2.16 __strtof_internal F -GLIBC_2.16 __strtof_l F -GLIBC_2.16 __strtok_r F -GLIBC_2.16 __strtok_r_1c F -GLIBC_2.16 __strtol_internal F -GLIBC_2.16 __strtol_l F -GLIBC_2.16 __strtold_internal F -GLIBC_2.16 __strtold_l F -GLIBC_2.16 __strtoll_internal F -GLIBC_2.16 __strtoll_l F -GLIBC_2.16 __strtoul_internal F -GLIBC_2.16 __strtoul_l F -GLIBC_2.16 __strtoull_internal F -GLIBC_2.16 __strtoull_l F -GLIBC_2.16 __strverscmp F -GLIBC_2.16 __strxfrm_l F -GLIBC_2.16 __swprintf_chk F -GLIBC_2.16 __sysconf F -GLIBC_2.16 __syslog_chk F -GLIBC_2.16 __sysv_signal F -GLIBC_2.16 __timezone D 0x4 -GLIBC_2.16 __toascii_l F -GLIBC_2.16 __tolower_l F -GLIBC_2.16 __toupper_l F -GLIBC_2.16 __towctrans F -GLIBC_2.16 __towctrans_l F -GLIBC_2.16 __towlower_l F -GLIBC_2.16 __towupper_l F -GLIBC_2.16 __ttyname_r_chk F -GLIBC_2.16 __tzname D 0x8 -GLIBC_2.16 __uflow F -GLIBC_2.16 __underflow F -GLIBC_2.16 __uselocale F -GLIBC_2.16 __vasprintf_chk F -GLIBC_2.16 __vdprintf_chk F -GLIBC_2.16 __vfork F -GLIBC_2.16 __vfprintf_chk F -GLIBC_2.16 __vfscanf F -GLIBC_2.16 __vfwprintf_chk F -GLIBC_2.16 __vprintf_chk F -GLIBC_2.16 __vsnprintf F -GLIBC_2.16 __vsnprintf_chk F -GLIBC_2.16 __vsprintf_chk F -GLIBC_2.16 __vsscanf F -GLIBC_2.16 __vswprintf_chk F -GLIBC_2.16 __vsyslog_chk F -GLIBC_2.16 __vwprintf_chk F -GLIBC_2.16 __wait F -GLIBC_2.16 __waitpid F -GLIBC_2.16 __wcpcpy_chk F -GLIBC_2.16 __wcpncpy_chk F -GLIBC_2.16 __wcrtomb_chk F -GLIBC_2.16 __wcscasecmp_l F -GLIBC_2.16 __wcscat_chk F -GLIBC_2.16 __wcscoll_l F -GLIBC_2.16 __wcscpy_chk F -GLIBC_2.16 __wcsftime_l F -GLIBC_2.16 __wcsncasecmp_l F -GLIBC_2.16 __wcsncat_chk F -GLIBC_2.16 __wcsncpy_chk F -GLIBC_2.16 __wcsnrtombs_chk F -GLIBC_2.16 __wcsrtombs_chk F -GLIBC_2.16 __wcstod_internal F -GLIBC_2.16 __wcstod_l F -GLIBC_2.16 __wcstof_internal F -GLIBC_2.16 __wcstof_l F -GLIBC_2.16 __wcstol_internal F -GLIBC_2.16 __wcstol_l F -GLIBC_2.16 __wcstold_internal F -GLIBC_2.16 __wcstold_l F -GLIBC_2.16 __wcstoll_internal F -GLIBC_2.16 __wcstoll_l F -GLIBC_2.16 __wcstombs_chk F -GLIBC_2.16 __wcstoul_internal F -GLIBC_2.16 __wcstoul_l F -GLIBC_2.16 __wcstoull_internal F -GLIBC_2.16 __wcstoull_l F -GLIBC_2.16 __wcsxfrm_l F -GLIBC_2.16 __wctomb_chk F -GLIBC_2.16 __wctrans_l F -GLIBC_2.16 __wctype_l F -GLIBC_2.16 __wmemcpy_chk F -GLIBC_2.16 __wmemmove_chk F -GLIBC_2.16 __wmempcpy_chk F -GLIBC_2.16 __wmemset_chk F -GLIBC_2.16 __woverflow F -GLIBC_2.16 __wprintf_chk F -GLIBC_2.16 __write F -GLIBC_2.16 __wuflow F -GLIBC_2.16 __wunderflow F -GLIBC_2.16 __xmknod F -GLIBC_2.16 __xmknodat F -GLIBC_2.16 __xpg_basename F -GLIBC_2.16 __xpg_sigpause F -GLIBC_2.16 __xpg_strerror_r F -GLIBC_2.16 __xstat F -GLIBC_2.16 __xstat64 F -GLIBC_2.16 _authenticate F -GLIBC_2.16 _dl_mcount_wrapper F -GLIBC_2.16 _dl_mcount_wrapper_check F -GLIBC_2.16 _environ D 0x4 -GLIBC_2.16 _exit F -GLIBC_2.16 _flushlbf F -GLIBC_2.16 _libc_intl_domainname D 0x5 -GLIBC_2.16 _longjmp F -GLIBC_2.16 _mcleanup F -GLIBC_2.16 _mcount F -GLIBC_2.16 _nl_default_dirname D 0x12 -GLIBC_2.16 _nl_domain_bindings D 0x4 -GLIBC_2.16 _nl_msg_cat_cntr D 0x4 -GLIBC_2.16 _null_auth D 0xc -GLIBC_2.16 _obstack_allocated_p F -GLIBC_2.16 _obstack_begin F -GLIBC_2.16 _obstack_begin_1 F -GLIBC_2.16 _obstack_free F -GLIBC_2.16 _obstack_memory_used F -GLIBC_2.16 _obstack_newchunk F -GLIBC_2.16 _res D 0x200 -GLIBC_2.16 _res_hconf D 0x30 -GLIBC_2.16 _rpc_dtablesize F -GLIBC_2.16 _seterr_reply F -GLIBC_2.16 _setjmp F -GLIBC_2.16 _sys_errlist D 0x21c -GLIBC_2.16 _sys_nerr D 0x4 -GLIBC_2.16 _sys_siglist D 0x104 -GLIBC_2.16 _tolower F -GLIBC_2.16 _toupper F -GLIBC_2.16 a64l F -GLIBC_2.16 abort F -GLIBC_2.16 abs F -GLIBC_2.16 accept F -GLIBC_2.16 accept4 F -GLIBC_2.16 access F -GLIBC_2.16 acct F -GLIBC_2.16 addmntent F -GLIBC_2.16 addseverity F -GLIBC_2.16 adjtime F -GLIBC_2.16 adjtimex F -GLIBC_2.16 advance F -GLIBC_2.16 alarm F -GLIBC_2.16 aligned_alloc F -GLIBC_2.16 alphasort F -GLIBC_2.16 alphasort64 F -GLIBC_2.16 arch_prctl F -GLIBC_2.16 argp_err_exit_status D 0x4 -GLIBC_2.16 argp_error F -GLIBC_2.16 argp_failure F -GLIBC_2.16 argp_help F -GLIBC_2.16 argp_parse F -GLIBC_2.16 argp_program_bug_address D 0x4 -GLIBC_2.16 argp_program_version D 0x4 -GLIBC_2.16 argp_program_version_hook D 0x4 -GLIBC_2.16 argp_state_help F -GLIBC_2.16 argp_usage F -GLIBC_2.16 argz_add F -GLIBC_2.16 argz_add_sep F -GLIBC_2.16 argz_append F -GLIBC_2.16 argz_count F -GLIBC_2.16 argz_create F -GLIBC_2.16 argz_create_sep F -GLIBC_2.16 argz_delete F -GLIBC_2.16 argz_extract F -GLIBC_2.16 argz_insert F -GLIBC_2.16 argz_next F -GLIBC_2.16 argz_replace F -GLIBC_2.16 argz_stringify F -GLIBC_2.16 asctime F -GLIBC_2.16 asctime_r F -GLIBC_2.16 asprintf F -GLIBC_2.16 atof F -GLIBC_2.16 atoi F -GLIBC_2.16 atol F -GLIBC_2.16 atoll F -GLIBC_2.16 authdes_create F -GLIBC_2.16 authdes_getucred F -GLIBC_2.16 authdes_pk_create F -GLIBC_2.16 authnone_create F -GLIBC_2.16 authunix_create F -GLIBC_2.16 authunix_create_default F -GLIBC_2.16 backtrace F -GLIBC_2.16 backtrace_symbols F -GLIBC_2.16 backtrace_symbols_fd F -GLIBC_2.16 basename F -GLIBC_2.16 bcmp F -GLIBC_2.16 bcopy F -GLIBC_2.16 bdflush F -GLIBC_2.16 bind F -GLIBC_2.16 bind_textdomain_codeset F -GLIBC_2.16 bindresvport F -GLIBC_2.16 bindtextdomain F -GLIBC_2.16 brk F -GLIBC_2.16 bsd_signal F -GLIBC_2.16 bsearch F -GLIBC_2.16 btowc F -GLIBC_2.16 bzero F -GLIBC_2.16 c16rtomb F -GLIBC_2.16 c32rtomb F -GLIBC_2.16 calloc F -GLIBC_2.16 callrpc F -GLIBC_2.16 canonicalize_file_name F -GLIBC_2.16 capget F -GLIBC_2.16 capset F -GLIBC_2.16 catclose F -GLIBC_2.16 catgets F -GLIBC_2.16 catopen F -GLIBC_2.16 cbc_crypt F -GLIBC_2.16 cfgetispeed F -GLIBC_2.16 cfgetospeed F -GLIBC_2.16 cfmakeraw F -GLIBC_2.16 cfree F -GLIBC_2.16 cfsetispeed F -GLIBC_2.16 cfsetospeed F -GLIBC_2.16 cfsetspeed F -GLIBC_2.16 chdir F -GLIBC_2.16 chflags F -GLIBC_2.16 chmod F -GLIBC_2.16 chown F -GLIBC_2.16 chroot F -GLIBC_2.16 clearenv F -GLIBC_2.16 clearerr F -GLIBC_2.16 clearerr_unlocked F -GLIBC_2.16 clnt_broadcast F -GLIBC_2.16 clnt_create F -GLIBC_2.16 clnt_pcreateerror F -GLIBC_2.16 clnt_perrno F -GLIBC_2.16 clnt_perror F -GLIBC_2.16 clnt_spcreateerror F -GLIBC_2.16 clnt_sperrno F -GLIBC_2.16 clnt_sperror F -GLIBC_2.16 clntraw_create F -GLIBC_2.16 clnttcp_create F -GLIBC_2.16 clntudp_bufcreate F -GLIBC_2.16 clntudp_create F -GLIBC_2.16 clntunix_create F -GLIBC_2.16 clock F -GLIBC_2.16 clock_adjtime F -GLIBC_2.16 clone F -GLIBC_2.16 close F -GLIBC_2.16 closedir F -GLIBC_2.16 closelog F -GLIBC_2.16 confstr F -GLIBC_2.16 connect F -GLIBC_2.16 copysign F -GLIBC_2.16 copysignf F -GLIBC_2.16 copysignl F -GLIBC_2.16 creat F -GLIBC_2.16 creat64 F -GLIBC_2.16 create_module F -GLIBC_2.16 ctermid F -GLIBC_2.16 ctime F -GLIBC_2.16 ctime_r F -GLIBC_2.16 cuserid F -GLIBC_2.16 daemon F -GLIBC_2.16 daylight D 0x4 -GLIBC_2.16 dcgettext F -GLIBC_2.16 dcngettext F -GLIBC_2.16 delete_module F -GLIBC_2.16 des_setparity F -GLIBC_2.16 dgettext F -GLIBC_2.16 difftime F -GLIBC_2.16 dirfd F -GLIBC_2.16 dirname F -GLIBC_2.16 div F -GLIBC_2.16 dl_iterate_phdr F -GLIBC_2.16 dngettext F -GLIBC_2.16 dprintf F -GLIBC_2.16 drand48 F -GLIBC_2.16 drand48_r F -GLIBC_2.16 dup F -GLIBC_2.16 dup2 F -GLIBC_2.16 dup3 F -GLIBC_2.16 duplocale F -GLIBC_2.16 dysize F -GLIBC_2.16 eaccess F -GLIBC_2.16 ecb_crypt F -GLIBC_2.16 ecvt F -GLIBC_2.16 ecvt_r F -GLIBC_2.16 endaliasent F -GLIBC_2.16 endfsent F -GLIBC_2.16 endgrent F -GLIBC_2.16 endhostent F -GLIBC_2.16 endmntent F -GLIBC_2.16 endnetent F -GLIBC_2.16 endnetgrent F -GLIBC_2.16 endprotoent F -GLIBC_2.16 endpwent F -GLIBC_2.16 endrpcent F -GLIBC_2.16 endservent F -GLIBC_2.16 endsgent F -GLIBC_2.16 endspent F -GLIBC_2.16 endttyent F -GLIBC_2.16 endusershell F -GLIBC_2.16 endutent F -GLIBC_2.16 endutxent F -GLIBC_2.16 environ D 0x4 -GLIBC_2.16 envz_add F -GLIBC_2.16 envz_entry F -GLIBC_2.16 envz_get F -GLIBC_2.16 envz_merge F -GLIBC_2.16 envz_remove F -GLIBC_2.16 envz_strip F -GLIBC_2.16 epoll_create F -GLIBC_2.16 epoll_create1 F -GLIBC_2.16 epoll_ctl F -GLIBC_2.16 epoll_pwait F -GLIBC_2.16 epoll_wait F -GLIBC_2.16 erand48 F -GLIBC_2.16 erand48_r F -GLIBC_2.16 err F -GLIBC_2.16 error F -GLIBC_2.16 error_at_line F -GLIBC_2.16 error_message_count D 0x4 -GLIBC_2.16 error_one_per_line D 0x4 -GLIBC_2.16 error_print_progname D 0x4 -GLIBC_2.16 errx F -GLIBC_2.16 ether_aton F -GLIBC_2.16 ether_aton_r F -GLIBC_2.16 ether_hostton F -GLIBC_2.16 ether_line F -GLIBC_2.16 ether_ntoa F -GLIBC_2.16 ether_ntoa_r F -GLIBC_2.16 ether_ntohost F -GLIBC_2.16 euidaccess F -GLIBC_2.16 eventfd F -GLIBC_2.16 eventfd_read F -GLIBC_2.16 eventfd_write F -GLIBC_2.16 execl F -GLIBC_2.16 execle F -GLIBC_2.16 execlp F -GLIBC_2.16 execv F -GLIBC_2.16 execve F -GLIBC_2.16 execvp F -GLIBC_2.16 execvpe F -GLIBC_2.16 exit F -GLIBC_2.16 faccessat F -GLIBC_2.16 fallocate F -GLIBC_2.16 fallocate64 F -GLIBC_2.16 fanotify_init F -GLIBC_2.16 fanotify_mark F -GLIBC_2.16 fattach F -GLIBC_2.16 fchdir F -GLIBC_2.16 fchflags F -GLIBC_2.16 fchmod F -GLIBC_2.16 fchmodat F -GLIBC_2.16 fchown F -GLIBC_2.16 fchownat F -GLIBC_2.16 fclose F -GLIBC_2.16 fcloseall F -GLIBC_2.16 fcntl F -GLIBC_2.16 fcvt F -GLIBC_2.16 fcvt_r F -GLIBC_2.16 fdatasync F -GLIBC_2.16 fdetach F -GLIBC_2.16 fdopen F -GLIBC_2.16 fdopendir F -GLIBC_2.16 feof F -GLIBC_2.16 feof_unlocked F -GLIBC_2.16 ferror F -GLIBC_2.16 ferror_unlocked F -GLIBC_2.16 fexecve F -GLIBC_2.16 fflush F -GLIBC_2.16 fflush_unlocked F -GLIBC_2.16 ffs F -GLIBC_2.16 ffsl F -GLIBC_2.16 ffsll F -GLIBC_2.16 fgetc F -GLIBC_2.16 fgetc_unlocked F -GLIBC_2.16 fgetgrent F -GLIBC_2.16 fgetgrent_r F -GLIBC_2.16 fgetpos F -GLIBC_2.16 fgetpos64 F -GLIBC_2.16 fgetpwent F -GLIBC_2.16 fgetpwent_r F -GLIBC_2.16 fgets F -GLIBC_2.16 fgets_unlocked F -GLIBC_2.16 fgetsgent F -GLIBC_2.16 fgetsgent_r F -GLIBC_2.16 fgetspent F -GLIBC_2.16 fgetspent_r F -GLIBC_2.16 fgetwc F -GLIBC_2.16 fgetwc_unlocked F -GLIBC_2.16 fgetws F -GLIBC_2.16 fgetws_unlocked F -GLIBC_2.16 fgetxattr F -GLIBC_2.16 fileno F -GLIBC_2.16 fileno_unlocked F -GLIBC_2.16 finite F -GLIBC_2.16 finitef F -GLIBC_2.16 finitel F -GLIBC_2.16 flistxattr F -GLIBC_2.16 flock F -GLIBC_2.16 flockfile F -GLIBC_2.16 fmemopen F -GLIBC_2.16 fmtmsg F -GLIBC_2.16 fnmatch F -GLIBC_2.16 fopen F -GLIBC_2.16 fopen64 F -GLIBC_2.16 fopencookie F -GLIBC_2.16 fork F -GLIBC_2.16 fpathconf F -GLIBC_2.16 fprintf F -GLIBC_2.16 fputc F -GLIBC_2.16 fputc_unlocked F -GLIBC_2.16 fputs F -GLIBC_2.16 fputs_unlocked F -GLIBC_2.16 fputwc F -GLIBC_2.16 fputwc_unlocked F -GLIBC_2.16 fputws F -GLIBC_2.16 fputws_unlocked F -GLIBC_2.16 fread F -GLIBC_2.16 fread_unlocked F -GLIBC_2.16 free F -GLIBC_2.16 freeaddrinfo F -GLIBC_2.16 freeifaddrs F -GLIBC_2.16 freelocale F -GLIBC_2.16 fremovexattr F -GLIBC_2.16 freopen F -GLIBC_2.16 freopen64 F -GLIBC_2.16 frexp F -GLIBC_2.16 frexpf F -GLIBC_2.16 frexpl F -GLIBC_2.16 fscanf F -GLIBC_2.16 fseek F -GLIBC_2.16 fseeko F -GLIBC_2.16 fseeko64 F -GLIBC_2.16 fsetpos F -GLIBC_2.16 fsetpos64 F -GLIBC_2.16 fsetxattr F -GLIBC_2.16 fstatfs F -GLIBC_2.16 fstatfs64 F -GLIBC_2.16 fstatvfs F -GLIBC_2.16 fstatvfs64 F -GLIBC_2.16 fsync F -GLIBC_2.16 ftell F -GLIBC_2.16 ftello F -GLIBC_2.16 ftello64 F -GLIBC_2.16 ftime F -GLIBC_2.16 ftok F -GLIBC_2.16 ftruncate F -GLIBC_2.16 ftruncate64 F -GLIBC_2.16 ftrylockfile F -GLIBC_2.16 fts_children F -GLIBC_2.16 fts_close F -GLIBC_2.16 fts_open F -GLIBC_2.16 fts_read F -GLIBC_2.16 fts_set F -GLIBC_2.16 ftw F -GLIBC_2.16 ftw64 F -GLIBC_2.16 funlockfile F -GLIBC_2.16 futimens F -GLIBC_2.16 futimes F -GLIBC_2.16 futimesat F -GLIBC_2.16 fwide F -GLIBC_2.16 fwprintf F -GLIBC_2.16 fwrite F -GLIBC_2.16 fwrite_unlocked F -GLIBC_2.16 fwscanf F -GLIBC_2.16 gai_strerror F -GLIBC_2.16 gcvt F -GLIBC_2.16 get_avphys_pages F -GLIBC_2.16 get_current_dir_name F -GLIBC_2.16 get_kernel_syms F -GLIBC_2.16 get_myaddress F -GLIBC_2.16 get_nprocs F -GLIBC_2.16 get_nprocs_conf F -GLIBC_2.16 get_phys_pages F -GLIBC_2.16 getaddrinfo F -GLIBC_2.16 getaliasbyname F -GLIBC_2.16 getaliasbyname_r F -GLIBC_2.16 getaliasent F -GLIBC_2.16 getaliasent_r F -GLIBC_2.16 getauxval F -GLIBC_2.16 getc F -GLIBC_2.16 getc_unlocked F -GLIBC_2.16 getchar F -GLIBC_2.16 getchar_unlocked F -GLIBC_2.16 getcontext F -GLIBC_2.16 getcwd F -GLIBC_2.16 getdate F -GLIBC_2.16 getdate_err D 0x4 -GLIBC_2.16 getdate_r F -GLIBC_2.16 getdelim F -GLIBC_2.16 getdirentries F -GLIBC_2.16 getdirentries64 F -GLIBC_2.16 getdomainname F -GLIBC_2.16 getdtablesize F -GLIBC_2.16 getegid F -GLIBC_2.16 getenv F -GLIBC_2.16 geteuid F -GLIBC_2.16 getfsent F -GLIBC_2.16 getfsfile F -GLIBC_2.16 getfsspec F -GLIBC_2.16 getgid F -GLIBC_2.16 getgrent F -GLIBC_2.16 getgrent_r F -GLIBC_2.16 getgrgid F -GLIBC_2.16 getgrgid_r F -GLIBC_2.16 getgrnam F -GLIBC_2.16 getgrnam_r F -GLIBC_2.16 getgrouplist F -GLIBC_2.16 getgroups F -GLIBC_2.16 gethostbyaddr F -GLIBC_2.16 gethostbyaddr_r F -GLIBC_2.16 gethostbyname F -GLIBC_2.16 gethostbyname2 F -GLIBC_2.16 gethostbyname2_r F -GLIBC_2.16 gethostbyname_r F -GLIBC_2.16 gethostent F -GLIBC_2.16 gethostent_r F -GLIBC_2.16 gethostid F -GLIBC_2.16 gethostname F -GLIBC_2.16 getifaddrs F -GLIBC_2.16 getipv4sourcefilter F -GLIBC_2.16 getitimer F -GLIBC_2.16 getline F -GLIBC_2.16 getloadavg F -GLIBC_2.16 getlogin F -GLIBC_2.16 getlogin_r F -GLIBC_2.16 getmntent F -GLIBC_2.16 getmntent_r F -GLIBC_2.16 getmsg F -GLIBC_2.16 getnameinfo F -GLIBC_2.16 getnetbyaddr F -GLIBC_2.16 getnetbyaddr_r F -GLIBC_2.16 getnetbyname F -GLIBC_2.16 getnetbyname_r F -GLIBC_2.16 getnetent F -GLIBC_2.16 getnetent_r F -GLIBC_2.16 getnetgrent F -GLIBC_2.16 getnetgrent_r F -GLIBC_2.16 getnetname F -GLIBC_2.16 getopt F -GLIBC_2.16 getopt_long F -GLIBC_2.16 getopt_long_only F -GLIBC_2.16 getpagesize F -GLIBC_2.16 getpass F -GLIBC_2.16 getpeername F -GLIBC_2.16 getpgid F -GLIBC_2.16 getpgrp F -GLIBC_2.16 getpid F -GLIBC_2.16 getpmsg F -GLIBC_2.16 getppid F -GLIBC_2.16 getpriority F -GLIBC_2.16 getprotobyname F -GLIBC_2.16 getprotobyname_r F -GLIBC_2.16 getprotobynumber F -GLIBC_2.16 getprotobynumber_r F -GLIBC_2.16 getprotoent F -GLIBC_2.16 getprotoent_r F -GLIBC_2.16 getpt F -GLIBC_2.16 getpublickey F -GLIBC_2.16 getpw F -GLIBC_2.16 getpwent F -GLIBC_2.16 getpwent_r F -GLIBC_2.16 getpwnam F -GLIBC_2.16 getpwnam_r F -GLIBC_2.16 getpwuid F -GLIBC_2.16 getpwuid_r F -GLIBC_2.16 getresgid F -GLIBC_2.16 getresuid F -GLIBC_2.16 getrlimit F -GLIBC_2.16 getrlimit64 F -GLIBC_2.16 getrpcbyname F -GLIBC_2.16 getrpcbyname_r F -GLIBC_2.16 getrpcbynumber F -GLIBC_2.16 getrpcbynumber_r F -GLIBC_2.16 getrpcent F -GLIBC_2.16 getrpcent_r F -GLIBC_2.16 getrpcport F -GLIBC_2.16 getrusage F -GLIBC_2.16 gets F -GLIBC_2.16 getsecretkey F -GLIBC_2.16 getservbyname F -GLIBC_2.16 getservbyname_r F -GLIBC_2.16 getservbyport F -GLIBC_2.16 getservbyport_r F -GLIBC_2.16 getservent F -GLIBC_2.16 getservent_r F -GLIBC_2.16 getsgent F -GLIBC_2.16 getsgent_r F -GLIBC_2.16 getsgnam F -GLIBC_2.16 getsgnam_r F -GLIBC_2.16 getsid F -GLIBC_2.16 getsockname F -GLIBC_2.16 getsockopt F -GLIBC_2.16 getsourcefilter F -GLIBC_2.16 getspent F -GLIBC_2.16 getspent_r F -GLIBC_2.16 getspnam F -GLIBC_2.16 getspnam_r F -GLIBC_2.16 getsubopt F -GLIBC_2.16 gettext F -GLIBC_2.16 gettimeofday F -GLIBC_2.16 getttyent F -GLIBC_2.16 getttynam F -GLIBC_2.16 getuid F -GLIBC_2.16 getusershell F -GLIBC_2.16 getutent F -GLIBC_2.16 getutent_r F -GLIBC_2.16 getutid F -GLIBC_2.16 getutid_r F -GLIBC_2.16 getutline F -GLIBC_2.16 getutline_r F -GLIBC_2.16 getutmp F -GLIBC_2.16 getutmpx F -GLIBC_2.16 getutxent F -GLIBC_2.16 getutxid F -GLIBC_2.16 getutxline F -GLIBC_2.16 getw F -GLIBC_2.16 getwc F -GLIBC_2.16 getwc_unlocked F -GLIBC_2.16 getwchar F -GLIBC_2.16 getwchar_unlocked F -GLIBC_2.16 getwd F -GLIBC_2.16 getxattr F -GLIBC_2.16 glob F -GLIBC_2.16 glob64 F -GLIBC_2.16 glob_pattern_p F -GLIBC_2.16 globfree F -GLIBC_2.16 globfree64 F -GLIBC_2.16 gmtime F -GLIBC_2.16 gmtime_r F -GLIBC_2.16 gnu_dev_major F -GLIBC_2.16 gnu_dev_makedev F -GLIBC_2.16 gnu_dev_minor F -GLIBC_2.16 gnu_get_libc_release F -GLIBC_2.16 gnu_get_libc_version F -GLIBC_2.16 grantpt F -GLIBC_2.16 group_member F -GLIBC_2.16 gsignal F -GLIBC_2.16 gtty F -GLIBC_2.16 h_errlist D 0x14 -GLIBC_2.16 h_nerr D 0x4 -GLIBC_2.16 hasmntopt F -GLIBC_2.16 hcreate F -GLIBC_2.16 hcreate_r F -GLIBC_2.16 hdestroy F -GLIBC_2.16 hdestroy_r F -GLIBC_2.16 herror F -GLIBC_2.16 host2netname F -GLIBC_2.16 hsearch F -GLIBC_2.16 hsearch_r F -GLIBC_2.16 hstrerror F -GLIBC_2.16 htonl F -GLIBC_2.16 htons F -GLIBC_2.16 iconv F -GLIBC_2.16 iconv_close F -GLIBC_2.16 iconv_open F -GLIBC_2.16 if_freenameindex F -GLIBC_2.16 if_indextoname F -GLIBC_2.16 if_nameindex F -GLIBC_2.16 if_nametoindex F -GLIBC_2.16 imaxabs F -GLIBC_2.16 imaxdiv F -GLIBC_2.16 in6addr_any D 0x10 -GLIBC_2.16 in6addr_loopback D 0x10 -GLIBC_2.16 index F -GLIBC_2.16 inet6_opt_append F -GLIBC_2.16 inet6_opt_find F -GLIBC_2.16 inet6_opt_finish F -GLIBC_2.16 inet6_opt_get_val F -GLIBC_2.16 inet6_opt_init F -GLIBC_2.16 inet6_opt_next F -GLIBC_2.16 inet6_opt_set_val F -GLIBC_2.16 inet6_option_alloc F -GLIBC_2.16 inet6_option_append F -GLIBC_2.16 inet6_option_find F -GLIBC_2.16 inet6_option_init F -GLIBC_2.16 inet6_option_next F -GLIBC_2.16 inet6_option_space F -GLIBC_2.16 inet6_rth_add F -GLIBC_2.16 inet6_rth_getaddr F -GLIBC_2.16 inet6_rth_init F -GLIBC_2.16 inet6_rth_reverse F -GLIBC_2.16 inet6_rth_segments F -GLIBC_2.16 inet6_rth_space F -GLIBC_2.16 inet_addr F -GLIBC_2.16 inet_aton F -GLIBC_2.16 inet_lnaof F -GLIBC_2.16 inet_makeaddr F -GLIBC_2.16 inet_netof F -GLIBC_2.16 inet_network F -GLIBC_2.16 inet_nsap_addr F -GLIBC_2.16 inet_nsap_ntoa F -GLIBC_2.16 inet_ntoa F -GLIBC_2.16 inet_ntop F -GLIBC_2.16 inet_pton F -GLIBC_2.16 init_module F -GLIBC_2.16 initgroups F -GLIBC_2.16 initstate F -GLIBC_2.16 initstate_r F -GLIBC_2.16 innetgr F -GLIBC_2.16 inotify_add_watch F -GLIBC_2.16 inotify_init F -GLIBC_2.16 inotify_init1 F -GLIBC_2.16 inotify_rm_watch F -GLIBC_2.16 insque F -GLIBC_2.16 ioctl F -GLIBC_2.16 ioperm F -GLIBC_2.16 iopl F -GLIBC_2.16 iruserok F -GLIBC_2.16 iruserok_af F -GLIBC_2.16 isalnum F -GLIBC_2.16 isalnum_l F -GLIBC_2.16 isalpha F -GLIBC_2.16 isalpha_l F -GLIBC_2.16 isascii F -GLIBC_2.16 isastream F -GLIBC_2.16 isatty F -GLIBC_2.16 isblank F -GLIBC_2.16 isblank_l F -GLIBC_2.16 iscntrl F -GLIBC_2.16 iscntrl_l F -GLIBC_2.16 isctype F -GLIBC_2.16 isdigit F -GLIBC_2.16 isdigit_l F -GLIBC_2.16 isfdtype F -GLIBC_2.16 isgraph F -GLIBC_2.16 isgraph_l F -GLIBC_2.16 isinf F -GLIBC_2.16 isinff F -GLIBC_2.16 isinfl F -GLIBC_2.16 islower F -GLIBC_2.16 islower_l F -GLIBC_2.16 isnan F -GLIBC_2.16 isnanf F -GLIBC_2.16 isnanl F -GLIBC_2.16 isprint F -GLIBC_2.16 isprint_l F -GLIBC_2.16 ispunct F -GLIBC_2.16 ispunct_l F -GLIBC_2.16 isspace F -GLIBC_2.16 isspace_l F -GLIBC_2.16 isupper F -GLIBC_2.16 isupper_l F -GLIBC_2.16 iswalnum F -GLIBC_2.16 iswalnum_l F -GLIBC_2.16 iswalpha F -GLIBC_2.16 iswalpha_l F -GLIBC_2.16 iswblank F -GLIBC_2.16 iswblank_l F -GLIBC_2.16 iswcntrl F -GLIBC_2.16 iswcntrl_l F -GLIBC_2.16 iswctype F -GLIBC_2.16 iswctype_l F -GLIBC_2.16 iswdigit F -GLIBC_2.16 iswdigit_l F -GLIBC_2.16 iswgraph F -GLIBC_2.16 iswgraph_l F -GLIBC_2.16 iswlower F -GLIBC_2.16 iswlower_l F -GLIBC_2.16 iswprint F -GLIBC_2.16 iswprint_l F -GLIBC_2.16 iswpunct F -GLIBC_2.16 iswpunct_l F -GLIBC_2.16 iswspace F -GLIBC_2.16 iswspace_l F -GLIBC_2.16 iswupper F -GLIBC_2.16 iswupper_l F -GLIBC_2.16 iswxdigit F -GLIBC_2.16 iswxdigit_l F -GLIBC_2.16 isxdigit F -GLIBC_2.16 isxdigit_l F -GLIBC_2.16 jrand48 F -GLIBC_2.16 jrand48_r F -GLIBC_2.16 key_decryptsession F -GLIBC_2.16 key_decryptsession_pk F -GLIBC_2.16 key_encryptsession F -GLIBC_2.16 key_encryptsession_pk F -GLIBC_2.16 key_gendes F -GLIBC_2.16 key_get_conv F -GLIBC_2.16 key_secretkey_is_set F -GLIBC_2.16 key_setnet F -GLIBC_2.16 key_setsecret F -GLIBC_2.16 kill F -GLIBC_2.16 killpg F -GLIBC_2.16 klogctl F -GLIBC_2.16 l64a F -GLIBC_2.16 labs F -GLIBC_2.16 lchmod F -GLIBC_2.16 lchown F -GLIBC_2.16 lckpwdf F -GLIBC_2.16 lcong48 F -GLIBC_2.16 lcong48_r F -GLIBC_2.16 ldexp F -GLIBC_2.16 ldexpf F -GLIBC_2.16 ldexpl F -GLIBC_2.16 ldiv F -GLIBC_2.16 lfind F -GLIBC_2.16 lgetxattr F -GLIBC_2.16 link F -GLIBC_2.16 linkat F -GLIBC_2.16 listen F -GLIBC_2.16 listxattr F -GLIBC_2.16 llabs F -GLIBC_2.16 lldiv F -GLIBC_2.16 llistxattr F -GLIBC_2.16 loc1 D 0x4 -GLIBC_2.16 loc2 D 0x4 -GLIBC_2.16 localeconv F -GLIBC_2.16 localtime F -GLIBC_2.16 localtime_r F -GLIBC_2.16 lockf F -GLIBC_2.16 lockf64 F -GLIBC_2.16 locs D 0x4 -GLIBC_2.16 longjmp F -GLIBC_2.16 lrand48 F -GLIBC_2.16 lrand48_r F -GLIBC_2.16 lremovexattr F -GLIBC_2.16 lsearch F -GLIBC_2.16 lseek F -GLIBC_2.16 lseek64 F -GLIBC_2.16 lsetxattr F -GLIBC_2.16 lutimes F -GLIBC_2.16 madvise F -GLIBC_2.16 makecontext F -GLIBC_2.16 mallinfo F -GLIBC_2.16 malloc F -GLIBC_2.16 malloc_get_state F -GLIBC_2.16 malloc_info F -GLIBC_2.16 malloc_set_state F -GLIBC_2.16 malloc_stats F -GLIBC_2.16 malloc_trim F -GLIBC_2.16 malloc_usable_size F -GLIBC_2.16 mallopt F -GLIBC_2.16 mallwatch D 0x4 -GLIBC_2.16 mblen F -GLIBC_2.16 mbrlen F -GLIBC_2.16 mbrtoc16 F -GLIBC_2.16 mbrtoc32 F -GLIBC_2.16 mbrtowc F -GLIBC_2.16 mbsinit F -GLIBC_2.16 mbsnrtowcs F -GLIBC_2.16 mbsrtowcs F -GLIBC_2.16 mbstowcs F -GLIBC_2.16 mbtowc F -GLIBC_2.16 mcheck F -GLIBC_2.16 mcheck_check_all F -GLIBC_2.16 mcheck_pedantic F -GLIBC_2.16 mcount F -GLIBC_2.16 memalign F -GLIBC_2.16 memccpy F -GLIBC_2.16 memchr F -GLIBC_2.16 memcmp F -GLIBC_2.16 memcpy F -GLIBC_2.16 memfrob F -GLIBC_2.16 memmem F -GLIBC_2.16 memmove F -GLIBC_2.16 mempcpy F -GLIBC_2.16 memrchr F -GLIBC_2.16 memset F -GLIBC_2.16 mincore F -GLIBC_2.16 mkdir F -GLIBC_2.16 mkdirat F -GLIBC_2.16 mkdtemp F -GLIBC_2.16 mkfifo F -GLIBC_2.16 mkfifoat F -GLIBC_2.16 mkostemp F -GLIBC_2.16 mkostemp64 F -GLIBC_2.16 mkostemps F -GLIBC_2.16 mkostemps64 F -GLIBC_2.16 mkstemp F -GLIBC_2.16 mkstemp64 F -GLIBC_2.16 mkstemps F -GLIBC_2.16 mkstemps64 F -GLIBC_2.16 mktemp F -GLIBC_2.16 mktime F -GLIBC_2.16 mlock F -GLIBC_2.16 mlockall F -GLIBC_2.16 mmap F -GLIBC_2.16 mmap64 F -GLIBC_2.16 modf F -GLIBC_2.16 modff F -GLIBC_2.16 modfl F -GLIBC_2.16 modify_ldt F -GLIBC_2.16 moncontrol F -GLIBC_2.16 monstartup F -GLIBC_2.16 mount F -GLIBC_2.16 mprobe F -GLIBC_2.16 mprotect F -GLIBC_2.16 mrand48 F -GLIBC_2.16 mrand48_r F -GLIBC_2.16 mremap F -GLIBC_2.16 msgctl F -GLIBC_2.16 msgget F -GLIBC_2.16 msgrcv F -GLIBC_2.16 msgsnd F -GLIBC_2.16 msync F -GLIBC_2.16 mtrace F -GLIBC_2.16 munlock F -GLIBC_2.16 munlockall F -GLIBC_2.16 munmap F -GLIBC_2.16 muntrace F -GLIBC_2.16 name_to_handle_at F -GLIBC_2.16 nanosleep F -GLIBC_2.16 netname2host F -GLIBC_2.16 netname2user F -GLIBC_2.16 newlocale F -GLIBC_2.16 nfsservctl F -GLIBC_2.16 nftw F -GLIBC_2.16 nftw64 F -GLIBC_2.16 ngettext F -GLIBC_2.16 nice F -GLIBC_2.16 nl_langinfo F -GLIBC_2.16 nl_langinfo_l F -GLIBC_2.16 nrand48 F -GLIBC_2.16 nrand48_r F -GLIBC_2.16 ntohl F -GLIBC_2.16 ntohs F -GLIBC_2.16 ntp_adjtime F -GLIBC_2.16 ntp_gettime F -GLIBC_2.16 ntp_gettimex F -GLIBC_2.16 obstack_alloc_failed_handler D 0x4 -GLIBC_2.16 obstack_exit_failure D 0x4 -GLIBC_2.16 obstack_free F -GLIBC_2.16 obstack_printf F -GLIBC_2.16 obstack_vprintf F -GLIBC_2.16 on_exit F -GLIBC_2.16 open F -GLIBC_2.16 open64 F -GLIBC_2.16 open_by_handle_at F -GLIBC_2.16 open_memstream F -GLIBC_2.16 open_wmemstream F -GLIBC_2.16 openat F -GLIBC_2.16 openat64 F -GLIBC_2.16 opendir F -GLIBC_2.16 openlog F -GLIBC_2.16 optarg D 0x4 -GLIBC_2.16 opterr D 0x4 -GLIBC_2.16 optind D 0x4 -GLIBC_2.16 optopt D 0x4 -GLIBC_2.16 parse_printf_format F -GLIBC_2.16 passwd2des F -GLIBC_2.16 pathconf F -GLIBC_2.16 pause F -GLIBC_2.16 pclose F -GLIBC_2.16 perror F -GLIBC_2.16 personality F -GLIBC_2.16 pipe F -GLIBC_2.16 pipe2 F -GLIBC_2.16 pivot_root F -GLIBC_2.16 pmap_getmaps F -GLIBC_2.16 pmap_getport F -GLIBC_2.16 pmap_rmtcall F -GLIBC_2.16 pmap_set F -GLIBC_2.16 pmap_unset F -GLIBC_2.16 poll F -GLIBC_2.16 popen F -GLIBC_2.16 posix_fadvise F -GLIBC_2.16 posix_fadvise64 F -GLIBC_2.16 posix_fallocate F -GLIBC_2.16 posix_fallocate64 F -GLIBC_2.16 posix_madvise F -GLIBC_2.16 posix_memalign F -GLIBC_2.16 posix_openpt F -GLIBC_2.16 posix_spawn F -GLIBC_2.16 posix_spawn_file_actions_addclose F -GLIBC_2.16 posix_spawn_file_actions_adddup2 F -GLIBC_2.16 posix_spawn_file_actions_addopen F -GLIBC_2.16 posix_spawn_file_actions_destroy F -GLIBC_2.16 posix_spawn_file_actions_init F -GLIBC_2.16 posix_spawnattr_destroy F -GLIBC_2.16 posix_spawnattr_getflags F -GLIBC_2.16 posix_spawnattr_getpgroup F -GLIBC_2.16 posix_spawnattr_getschedparam F -GLIBC_2.16 posix_spawnattr_getschedpolicy F -GLIBC_2.16 posix_spawnattr_getsigdefault F -GLIBC_2.16 posix_spawnattr_getsigmask F -GLIBC_2.16 posix_spawnattr_init F -GLIBC_2.16 posix_spawnattr_setflags F -GLIBC_2.16 posix_spawnattr_setpgroup F -GLIBC_2.16 posix_spawnattr_setschedparam F -GLIBC_2.16 posix_spawnattr_setschedpolicy F -GLIBC_2.16 posix_spawnattr_setsigdefault F -GLIBC_2.16 posix_spawnattr_setsigmask F -GLIBC_2.16 posix_spawnp F -GLIBC_2.16 ppoll F -GLIBC_2.16 prctl F -GLIBC_2.16 pread F -GLIBC_2.16 pread64 F -GLIBC_2.16 preadv F -GLIBC_2.16 preadv64 F -GLIBC_2.16 printf F -GLIBC_2.16 printf_size F -GLIBC_2.16 printf_size_info F -GLIBC_2.16 prlimit F -GLIBC_2.16 prlimit64 F -GLIBC_2.16 process_vm_readv F -GLIBC_2.16 process_vm_writev F -GLIBC_2.16 profil F -GLIBC_2.16 program_invocation_name D 0x4 -GLIBC_2.16 program_invocation_short_name D 0x4 -GLIBC_2.16 pselect F -GLIBC_2.16 psiginfo F -GLIBC_2.16 psignal F -GLIBC_2.16 pthread_attr_destroy F -GLIBC_2.16 pthread_attr_getdetachstate F -GLIBC_2.16 pthread_attr_getinheritsched F -GLIBC_2.16 pthread_attr_getschedparam F -GLIBC_2.16 pthread_attr_getschedpolicy F -GLIBC_2.16 pthread_attr_getscope F -GLIBC_2.16 pthread_attr_init F -GLIBC_2.16 pthread_attr_setdetachstate F -GLIBC_2.16 pthread_attr_setinheritsched F -GLIBC_2.16 pthread_attr_setschedparam F -GLIBC_2.16 pthread_attr_setschedpolicy F -GLIBC_2.16 pthread_attr_setscope F -GLIBC_2.16 pthread_cond_broadcast F -GLIBC_2.16 pthread_cond_destroy F -GLIBC_2.16 pthread_cond_init F -GLIBC_2.16 pthread_cond_signal F -GLIBC_2.16 pthread_cond_timedwait F -GLIBC_2.16 pthread_cond_wait F -GLIBC_2.16 pthread_condattr_destroy F -GLIBC_2.16 pthread_condattr_init F -GLIBC_2.16 pthread_equal F -GLIBC_2.16 pthread_exit F -GLIBC_2.16 pthread_getschedparam F -GLIBC_2.16 pthread_mutex_destroy F -GLIBC_2.16 pthread_mutex_init F -GLIBC_2.16 pthread_mutex_lock F -GLIBC_2.16 pthread_mutex_unlock F -GLIBC_2.16 pthread_self F -GLIBC_2.16 pthread_setcancelstate F -GLIBC_2.16 pthread_setcanceltype F -GLIBC_2.16 pthread_setschedparam F -GLIBC_2.16 ptrace F -GLIBC_2.16 ptsname F -GLIBC_2.16 ptsname_r F -GLIBC_2.16 putc F -GLIBC_2.16 putc_unlocked F -GLIBC_2.16 putchar F -GLIBC_2.16 putchar_unlocked F -GLIBC_2.16 putenv F -GLIBC_2.16 putgrent F -GLIBC_2.16 putmsg F -GLIBC_2.16 putpmsg F -GLIBC_2.16 putpwent F -GLIBC_2.16 puts F -GLIBC_2.16 putsgent F -GLIBC_2.16 putspent F -GLIBC_2.16 pututline F -GLIBC_2.16 pututxline F -GLIBC_2.16 putw F -GLIBC_2.16 putwc F -GLIBC_2.16 putwc_unlocked F -GLIBC_2.16 putwchar F -GLIBC_2.16 putwchar_unlocked F -GLIBC_2.16 pvalloc F -GLIBC_2.16 pwrite F -GLIBC_2.16 pwrite64 F -GLIBC_2.16 pwritev F -GLIBC_2.16 pwritev64 F -GLIBC_2.16 qecvt F -GLIBC_2.16 qecvt_r F -GLIBC_2.16 qfcvt F -GLIBC_2.16 qfcvt_r F -GLIBC_2.16 qgcvt F -GLIBC_2.16 qsort F -GLIBC_2.16 qsort_r F -GLIBC_2.16 query_module F -GLIBC_2.16 quick_exit F -GLIBC_2.16 quotactl F -GLIBC_2.16 raise F -GLIBC_2.16 rand F -GLIBC_2.16 rand_r F -GLIBC_2.16 random F -GLIBC_2.16 random_r F -GLIBC_2.16 rawmemchr F -GLIBC_2.16 rcmd F -GLIBC_2.16 rcmd_af F -GLIBC_2.16 re_comp F -GLIBC_2.16 re_compile_fastmap F -GLIBC_2.16 re_compile_pattern F -GLIBC_2.16 re_exec F -GLIBC_2.16 re_match F -GLIBC_2.16 re_match_2 F -GLIBC_2.16 re_search F -GLIBC_2.16 re_search_2 F -GLIBC_2.16 re_set_registers F -GLIBC_2.16 re_set_syntax F -GLIBC_2.16 re_syntax_options D 0x4 -GLIBC_2.16 read F -GLIBC_2.16 readahead F -GLIBC_2.16 readdir F -GLIBC_2.16 readdir64 F -GLIBC_2.16 readdir64_r F -GLIBC_2.16 readdir_r F -GLIBC_2.16 readlink F -GLIBC_2.16 readlinkat F -GLIBC_2.16 readv F -GLIBC_2.16 realloc F -GLIBC_2.16 realpath F -GLIBC_2.16 reboot F -GLIBC_2.16 recv F -GLIBC_2.16 recvfrom F -GLIBC_2.16 recvmmsg F -GLIBC_2.16 recvmsg F -GLIBC_2.16 regcomp F -GLIBC_2.16 regerror F -GLIBC_2.16 regexec F -GLIBC_2.16 regfree F -GLIBC_2.16 register_printf_function F -GLIBC_2.16 register_printf_modifier F -GLIBC_2.16 register_printf_specifier F -GLIBC_2.16 register_printf_type F -GLIBC_2.16 registerrpc F -GLIBC_2.16 remap_file_pages F -GLIBC_2.16 remove F -GLIBC_2.16 removexattr F -GLIBC_2.16 remque F -GLIBC_2.16 rename F -GLIBC_2.16 renameat F -GLIBC_2.16 revoke F -GLIBC_2.16 rewind F -GLIBC_2.16 rewinddir F -GLIBC_2.16 rexec F -GLIBC_2.16 rexec_af F -GLIBC_2.16 rexecoptions D 0x4 -GLIBC_2.16 rindex F -GLIBC_2.16 rmdir F -GLIBC_2.16 rpc_createerr D 0x10 -GLIBC_2.16 rpmatch F -GLIBC_2.16 rresvport F -GLIBC_2.16 rresvport_af F -GLIBC_2.16 rtime F -GLIBC_2.16 ruserok F -GLIBC_2.16 ruserok_af F -GLIBC_2.16 ruserpass F -GLIBC_2.16 sbrk F -GLIBC_2.16 scalbn F -GLIBC_2.16 scalbnf F -GLIBC_2.16 scalbnl F -GLIBC_2.16 scandir F -GLIBC_2.16 scandir64 F -GLIBC_2.16 scandirat F -GLIBC_2.16 scandirat64 F -GLIBC_2.16 scanf F -GLIBC_2.16 sched_get_priority_max F -GLIBC_2.16 sched_get_priority_min F -GLIBC_2.16 sched_getaffinity F -GLIBC_2.16 sched_getcpu F -GLIBC_2.16 sched_getparam F -GLIBC_2.16 sched_getscheduler F -GLIBC_2.16 sched_rr_get_interval F -GLIBC_2.16 sched_setaffinity F -GLIBC_2.16 sched_setparam F -GLIBC_2.16 sched_setscheduler F -GLIBC_2.16 sched_yield F -GLIBC_2.16 seed48 F -GLIBC_2.16 seed48_r F -GLIBC_2.16 seekdir F -GLIBC_2.16 select F -GLIBC_2.16 semctl F -GLIBC_2.16 semget F -GLIBC_2.16 semop F -GLIBC_2.16 semtimedop F -GLIBC_2.16 send F -GLIBC_2.16 sendfile F -GLIBC_2.16 sendfile64 F -GLIBC_2.16 sendmmsg F -GLIBC_2.16 sendmsg F -GLIBC_2.16 sendto F -GLIBC_2.16 setaliasent F -GLIBC_2.16 setbuf F -GLIBC_2.16 setbuffer F -GLIBC_2.16 setcontext F -GLIBC_2.16 setdomainname F -GLIBC_2.16 setegid F -GLIBC_2.16 setenv F -GLIBC_2.16 seteuid F -GLIBC_2.16 setfsent F -GLIBC_2.16 setfsgid F -GLIBC_2.16 setfsuid F -GLIBC_2.16 setgid F -GLIBC_2.16 setgrent F -GLIBC_2.16 setgroups F -GLIBC_2.16 sethostent F -GLIBC_2.16 sethostid F -GLIBC_2.16 sethostname F -GLIBC_2.16 setipv4sourcefilter F -GLIBC_2.16 setitimer F -GLIBC_2.16 setjmp F -GLIBC_2.16 setlinebuf F -GLIBC_2.16 setlocale F -GLIBC_2.16 setlogin F -GLIBC_2.16 setlogmask F -GLIBC_2.16 setmntent F -GLIBC_2.16 setnetent F -GLIBC_2.16 setnetgrent F -GLIBC_2.16 setns F -GLIBC_2.16 setpgid F -GLIBC_2.16 setpgrp F -GLIBC_2.16 setpriority F -GLIBC_2.16 setprotoent F -GLIBC_2.16 setpwent F -GLIBC_2.16 setregid F -GLIBC_2.16 setresgid F -GLIBC_2.16 setresuid F -GLIBC_2.16 setreuid F -GLIBC_2.16 setrlimit F -GLIBC_2.16 setrlimit64 F -GLIBC_2.16 setrpcent F -GLIBC_2.16 setservent F -GLIBC_2.16 setsgent F -GLIBC_2.16 setsid F -GLIBC_2.16 setsockopt F -GLIBC_2.16 setsourcefilter F -GLIBC_2.16 setspent F -GLIBC_2.16 setstate F -GLIBC_2.16 setstate_r F -GLIBC_2.16 settimeofday F -GLIBC_2.16 setttyent F -GLIBC_2.16 setuid F -GLIBC_2.16 setusershell F -GLIBC_2.16 setutent F -GLIBC_2.16 setutxent F -GLIBC_2.16 setvbuf F -GLIBC_2.16 setxattr F -GLIBC_2.16 sgetsgent F -GLIBC_2.16 sgetsgent_r F -GLIBC_2.16 sgetspent F -GLIBC_2.16 sgetspent_r F -GLIBC_2.16 shmat F -GLIBC_2.16 shmctl F -GLIBC_2.16 shmdt F -GLIBC_2.16 shmget F -GLIBC_2.16 shutdown F -GLIBC_2.16 sigaction F -GLIBC_2.16 sigaddset F -GLIBC_2.16 sigaltstack F -GLIBC_2.16 sigandset F -GLIBC_2.16 sigblock F -GLIBC_2.16 sigdelset F -GLIBC_2.16 sigemptyset F -GLIBC_2.16 sigfillset F -GLIBC_2.16 siggetmask F -GLIBC_2.16 sighold F -GLIBC_2.16 sigignore F -GLIBC_2.16 siginterrupt F -GLIBC_2.16 sigisemptyset F -GLIBC_2.16 sigismember F -GLIBC_2.16 siglongjmp F -GLIBC_2.16 signal F -GLIBC_2.16 signalfd F -GLIBC_2.16 sigorset F -GLIBC_2.16 sigpause F -GLIBC_2.16 sigpending F -GLIBC_2.16 sigprocmask F -GLIBC_2.16 sigqueue F -GLIBC_2.16 sigrelse F -GLIBC_2.16 sigreturn F -GLIBC_2.16 sigset F -GLIBC_2.16 sigsetmask F -GLIBC_2.16 sigstack F -GLIBC_2.16 sigsuspend F -GLIBC_2.16 sigtimedwait F -GLIBC_2.16 sigvec F -GLIBC_2.16 sigwait F -GLIBC_2.16 sigwaitinfo F -GLIBC_2.16 sleep F -GLIBC_2.16 snprintf F -GLIBC_2.16 sockatmark F -GLIBC_2.16 socket F -GLIBC_2.16 socketpair F -GLIBC_2.16 splice F -GLIBC_2.16 sprintf F -GLIBC_2.16 sprofil F -GLIBC_2.16 srand F -GLIBC_2.16 srand48 F -GLIBC_2.16 srand48_r F -GLIBC_2.16 srandom F -GLIBC_2.16 srandom_r F -GLIBC_2.16 sscanf F -GLIBC_2.16 ssignal F -GLIBC_2.16 sstk F -GLIBC_2.16 statfs F -GLIBC_2.16 statfs64 F -GLIBC_2.16 statvfs F -GLIBC_2.16 statvfs64 F -GLIBC_2.16 stderr D 0x4 -GLIBC_2.16 stdin D 0x4 -GLIBC_2.16 stdout D 0x4 -GLIBC_2.16 step F -GLIBC_2.16 stime F -GLIBC_2.16 stpcpy F -GLIBC_2.16 stpncpy F -GLIBC_2.16 strcasecmp F -GLIBC_2.16 strcasecmp_l F -GLIBC_2.16 strcasestr F -GLIBC_2.16 strcat F -GLIBC_2.16 strchr F -GLIBC_2.16 strchrnul F -GLIBC_2.16 strcmp F -GLIBC_2.16 strcoll F -GLIBC_2.16 strcoll_l F -GLIBC_2.16 strcpy F -GLIBC_2.16 strcspn F -GLIBC_2.16 strdup F -GLIBC_2.16 strerror F -GLIBC_2.16 strerror_l F -GLIBC_2.16 strerror_r F -GLIBC_2.16 strfmon F -GLIBC_2.16 strfmon_l F -GLIBC_2.16 strfry F -GLIBC_2.16 strftime F -GLIBC_2.16 strftime_l F -GLIBC_2.16 strlen F -GLIBC_2.16 strncasecmp F -GLIBC_2.16 strncasecmp_l F -GLIBC_2.16 strncat F -GLIBC_2.16 strncmp F -GLIBC_2.16 strncpy F -GLIBC_2.16 strndup F -GLIBC_2.16 strnlen F -GLIBC_2.16 strpbrk F -GLIBC_2.16 strptime F -GLIBC_2.16 strptime_l F -GLIBC_2.16 strrchr F -GLIBC_2.16 strsep F -GLIBC_2.16 strsignal F -GLIBC_2.16 strspn F -GLIBC_2.16 strstr F -GLIBC_2.16 strtod F -GLIBC_2.16 strtod_l F -GLIBC_2.16 strtof F -GLIBC_2.16 strtof_l F -GLIBC_2.16 strtoimax F -GLIBC_2.16 strtok F -GLIBC_2.16 strtok_r F -GLIBC_2.16 strtol F -GLIBC_2.16 strtol_l F -GLIBC_2.16 strtold F -GLIBC_2.16 strtold_l F -GLIBC_2.16 strtoll F -GLIBC_2.16 strtoll_l F -GLIBC_2.16 strtoq F -GLIBC_2.16 strtoul F -GLIBC_2.16 strtoul_l F -GLIBC_2.16 strtoull F -GLIBC_2.16 strtoull_l F -GLIBC_2.16 strtoumax F -GLIBC_2.16 strtouq F -GLIBC_2.16 strverscmp F -GLIBC_2.16 strxfrm F -GLIBC_2.16 strxfrm_l F -GLIBC_2.16 stty F -GLIBC_2.16 svc_exit F -GLIBC_2.16 svc_fdset D 0x80 -GLIBC_2.16 svc_getreq F -GLIBC_2.16 svc_getreq_common F -GLIBC_2.16 svc_getreq_poll F -GLIBC_2.16 svc_getreqset F -GLIBC_2.16 svc_max_pollfd D 0x4 -GLIBC_2.16 svc_pollfd D 0x4 -GLIBC_2.16 svc_register F -GLIBC_2.16 svc_run F -GLIBC_2.16 svc_sendreply F -GLIBC_2.16 svc_unregister F -GLIBC_2.16 svcauthdes_stats D 0xc -GLIBC_2.16 svcerr_auth F -GLIBC_2.16 svcerr_decode F -GLIBC_2.16 svcerr_noproc F -GLIBC_2.16 svcerr_noprog F -GLIBC_2.16 svcerr_progvers F -GLIBC_2.16 svcerr_systemerr F -GLIBC_2.16 svcerr_weakauth F -GLIBC_2.16 svcfd_create F -GLIBC_2.16 svcraw_create F -GLIBC_2.16 svctcp_create F -GLIBC_2.16 svcudp_bufcreate F -GLIBC_2.16 svcudp_create F -GLIBC_2.16 svcudp_enablecache F -GLIBC_2.16 svcunix_create F -GLIBC_2.16 svcunixfd_create F -GLIBC_2.16 swab F -GLIBC_2.16 swapcontext F -GLIBC_2.16 swapoff F -GLIBC_2.16 swapon F -GLIBC_2.16 swprintf F -GLIBC_2.16 swscanf F -GLIBC_2.16 symlink F -GLIBC_2.16 symlinkat F -GLIBC_2.16 sync F -GLIBC_2.16 sync_file_range F -GLIBC_2.16 syncfs F -GLIBC_2.16 sys_errlist D 0x21c -GLIBC_2.16 sys_nerr D 0x4 -GLIBC_2.16 sys_sigabbrev D 0x104 -GLIBC_2.16 sys_siglist D 0x104 -GLIBC_2.16 syscall F -GLIBC_2.16 sysconf F -GLIBC_2.16 sysinfo F -GLIBC_2.16 syslog F -GLIBC_2.16 system F -GLIBC_2.16 sysv_signal F -GLIBC_2.16 tcdrain F -GLIBC_2.16 tcflow F -GLIBC_2.16 tcflush F -GLIBC_2.16 tcgetattr F -GLIBC_2.16 tcgetpgrp F -GLIBC_2.16 tcgetsid F -GLIBC_2.16 tcsendbreak F -GLIBC_2.16 tcsetattr F -GLIBC_2.16 tcsetpgrp F -GLIBC_2.16 tdelete F -GLIBC_2.16 tdestroy F -GLIBC_2.16 tee F -GLIBC_2.16 telldir F -GLIBC_2.16 tempnam F -GLIBC_2.16 textdomain F -GLIBC_2.16 tfind F -GLIBC_2.16 time F -GLIBC_2.16 timegm F -GLIBC_2.16 timelocal F -GLIBC_2.16 timerfd_create F -GLIBC_2.16 timerfd_gettime F -GLIBC_2.16 timerfd_settime F -GLIBC_2.16 times F -GLIBC_2.16 timespec_get F -GLIBC_2.16 timezone D 0x4 -GLIBC_2.16 tmpfile F -GLIBC_2.16 tmpfile64 F -GLIBC_2.16 tmpnam F -GLIBC_2.16 tmpnam_r F -GLIBC_2.16 toascii F -GLIBC_2.16 tolower F -GLIBC_2.16 tolower_l F -GLIBC_2.16 toupper F -GLIBC_2.16 toupper_l F -GLIBC_2.16 towctrans F -GLIBC_2.16 towctrans_l F -GLIBC_2.16 towlower F -GLIBC_2.16 towlower_l F -GLIBC_2.16 towupper F -GLIBC_2.16 towupper_l F -GLIBC_2.16 tr_break F -GLIBC_2.16 truncate F -GLIBC_2.16 truncate64 F -GLIBC_2.16 tsearch F -GLIBC_2.16 ttyname F -GLIBC_2.16 ttyname_r F -GLIBC_2.16 ttyslot F -GLIBC_2.16 twalk F -GLIBC_2.16 tzname D 0x8 -GLIBC_2.16 tzset F -GLIBC_2.16 ualarm F -GLIBC_2.16 ulckpwdf F -GLIBC_2.16 ulimit F -GLIBC_2.16 umask F -GLIBC_2.16 umount F -GLIBC_2.16 umount2 F -GLIBC_2.16 uname F -GLIBC_2.16 ungetc F -GLIBC_2.16 ungetwc F -GLIBC_2.16 unlink F -GLIBC_2.16 unlinkat F -GLIBC_2.16 unlockpt F -GLIBC_2.16 unsetenv F -GLIBC_2.16 unshare F -GLIBC_2.16 updwtmp F -GLIBC_2.16 updwtmpx F -GLIBC_2.16 uselib F -GLIBC_2.16 uselocale F -GLIBC_2.16 user2netname F -GLIBC_2.16 usleep F -GLIBC_2.16 ustat F -GLIBC_2.16 utime F -GLIBC_2.16 utimensat F -GLIBC_2.16 utimes F -GLIBC_2.16 utmpname F -GLIBC_2.16 utmpxname F -GLIBC_2.16 valloc F -GLIBC_2.16 vasprintf F -GLIBC_2.16 vdprintf F -GLIBC_2.16 verr F -GLIBC_2.16 verrx F -GLIBC_2.16 versionsort F -GLIBC_2.16 versionsort64 F -GLIBC_2.16 vfork F -GLIBC_2.16 vfprintf F -GLIBC_2.16 vfscanf F -GLIBC_2.16 vfwprintf F -GLIBC_2.16 vfwscanf F -GLIBC_2.16 vhangup F -GLIBC_2.16 vlimit F -GLIBC_2.16 vmsplice F -GLIBC_2.16 vprintf F -GLIBC_2.16 vscanf F -GLIBC_2.16 vsnprintf F -GLIBC_2.16 vsprintf F -GLIBC_2.16 vsscanf F -GLIBC_2.16 vswprintf F -GLIBC_2.16 vswscanf F -GLIBC_2.16 vsyslog F -GLIBC_2.16 vtimes F -GLIBC_2.16 vwarn F -GLIBC_2.16 vwarnx F -GLIBC_2.16 vwprintf F -GLIBC_2.16 vwscanf F -GLIBC_2.16 wait F -GLIBC_2.16 wait3 F -GLIBC_2.16 wait4 F -GLIBC_2.16 waitid F -GLIBC_2.16 waitpid F -GLIBC_2.16 warn F -GLIBC_2.16 warnx F -GLIBC_2.16 wcpcpy F -GLIBC_2.16 wcpncpy F -GLIBC_2.16 wcrtomb F -GLIBC_2.16 wcscasecmp F -GLIBC_2.16 wcscasecmp_l F -GLIBC_2.16 wcscat F -GLIBC_2.16 wcschr F -GLIBC_2.16 wcschrnul F -GLIBC_2.16 wcscmp F -GLIBC_2.16 wcscoll F -GLIBC_2.16 wcscoll_l F -GLIBC_2.16 wcscpy F -GLIBC_2.16 wcscspn F -GLIBC_2.16 wcsdup F -GLIBC_2.16 wcsftime F -GLIBC_2.16 wcsftime_l F -GLIBC_2.16 wcslen F -GLIBC_2.16 wcsncasecmp F -GLIBC_2.16 wcsncasecmp_l F -GLIBC_2.16 wcsncat F -GLIBC_2.16 wcsncmp F -GLIBC_2.16 wcsncpy F -GLIBC_2.16 wcsnlen F -GLIBC_2.16 wcsnrtombs F -GLIBC_2.16 wcspbrk F -GLIBC_2.16 wcsrchr F -GLIBC_2.16 wcsrtombs F -GLIBC_2.16 wcsspn F -GLIBC_2.16 wcsstr F -GLIBC_2.16 wcstod F -GLIBC_2.16 wcstod_l F -GLIBC_2.16 wcstof F -GLIBC_2.16 wcstof_l F -GLIBC_2.16 wcstoimax F -GLIBC_2.16 wcstok F -GLIBC_2.16 wcstol F -GLIBC_2.16 wcstol_l F -GLIBC_2.16 wcstold F -GLIBC_2.16 wcstold_l F -GLIBC_2.16 wcstoll F -GLIBC_2.16 wcstoll_l F -GLIBC_2.16 wcstombs F -GLIBC_2.16 wcstoq F -GLIBC_2.16 wcstoul F -GLIBC_2.16 wcstoul_l F -GLIBC_2.16 wcstoull F -GLIBC_2.16 wcstoull_l F -GLIBC_2.16 wcstoumax F -GLIBC_2.16 wcstouq F -GLIBC_2.16 wcswcs F -GLIBC_2.16 wcswidth F -GLIBC_2.16 wcsxfrm F -GLIBC_2.16 wcsxfrm_l F -GLIBC_2.16 wctob F -GLIBC_2.16 wctomb F -GLIBC_2.16 wctrans F -GLIBC_2.16 wctrans_l F -GLIBC_2.16 wctype F -GLIBC_2.16 wctype_l F -GLIBC_2.16 wcwidth F -GLIBC_2.16 wmemchr F -GLIBC_2.16 wmemcmp F -GLIBC_2.16 wmemcpy F -GLIBC_2.16 wmemmove F -GLIBC_2.16 wmempcpy F -GLIBC_2.16 wmemset F -GLIBC_2.16 wordexp F -GLIBC_2.16 wordfree F -GLIBC_2.16 wprintf F -GLIBC_2.16 write F -GLIBC_2.16 writev F -GLIBC_2.16 wscanf F -GLIBC_2.16 xdecrypt F -GLIBC_2.16 xdr_accepted_reply F -GLIBC_2.16 xdr_array F -GLIBC_2.16 xdr_authdes_cred F -GLIBC_2.16 xdr_authdes_verf F -GLIBC_2.16 xdr_authunix_parms F -GLIBC_2.16 xdr_bool F -GLIBC_2.16 xdr_bytes F -GLIBC_2.16 xdr_callhdr F -GLIBC_2.16 xdr_callmsg F -GLIBC_2.16 xdr_char F -GLIBC_2.16 xdr_cryptkeyarg F -GLIBC_2.16 xdr_cryptkeyarg2 F -GLIBC_2.16 xdr_cryptkeyres F -GLIBC_2.16 xdr_des_block F -GLIBC_2.16 xdr_double F -GLIBC_2.16 xdr_enum F -GLIBC_2.16 xdr_float F -GLIBC_2.16 xdr_free F -GLIBC_2.16 xdr_getcredres F -GLIBC_2.16 xdr_hyper F -GLIBC_2.16 xdr_int F -GLIBC_2.16 xdr_int16_t F -GLIBC_2.16 xdr_int32_t F -GLIBC_2.16 xdr_int64_t F -GLIBC_2.16 xdr_int8_t F -GLIBC_2.16 xdr_key_netstarg F -GLIBC_2.16 xdr_key_netstres F -GLIBC_2.16 xdr_keybuf F -GLIBC_2.16 xdr_keystatus F -GLIBC_2.16 xdr_long F -GLIBC_2.16 xdr_longlong_t F -GLIBC_2.16 xdr_netnamestr F -GLIBC_2.16 xdr_netobj F -GLIBC_2.16 xdr_opaque F -GLIBC_2.16 xdr_opaque_auth F -GLIBC_2.16 xdr_pmap F -GLIBC_2.16 xdr_pmaplist F -GLIBC_2.16 xdr_pointer F -GLIBC_2.16 xdr_quad_t F -GLIBC_2.16 xdr_reference F -GLIBC_2.16 xdr_rejected_reply F -GLIBC_2.16 xdr_replymsg F -GLIBC_2.16 xdr_rmtcall_args F -GLIBC_2.16 xdr_rmtcallres F -GLIBC_2.16 xdr_short F -GLIBC_2.16 xdr_sizeof F -GLIBC_2.16 xdr_string F -GLIBC_2.16 xdr_u_char F -GLIBC_2.16 xdr_u_hyper F -GLIBC_2.16 xdr_u_int F -GLIBC_2.16 xdr_u_long F -GLIBC_2.16 xdr_u_longlong_t F -GLIBC_2.16 xdr_u_quad_t F -GLIBC_2.16 xdr_u_short F -GLIBC_2.16 xdr_uint16_t F -GLIBC_2.16 xdr_uint32_t F -GLIBC_2.16 xdr_uint64_t F -GLIBC_2.16 xdr_uint8_t F -GLIBC_2.16 xdr_union F -GLIBC_2.16 xdr_unixcred F -GLIBC_2.16 xdr_vector F -GLIBC_2.16 xdr_void F -GLIBC_2.16 xdr_wrapstring F -GLIBC_2.16 xdrmem_create F -GLIBC_2.16 xdrrec_create F -GLIBC_2.16 xdrrec_endofrecord F -GLIBC_2.16 xdrrec_eof F -GLIBC_2.16 xdrrec_skiprecord F -GLIBC_2.16 xdrstdio_create F -GLIBC_2.16 xencrypt F -GLIBC_2.16 xprt_register F -GLIBC_2.16 xprt_unregister F -GLIBC_2.17 GLIBC_2.17 A -GLIBC_2.17 clock_getcpuclockid F -GLIBC_2.17 clock_getres F -GLIBC_2.17 clock_gettime F -GLIBC_2.17 clock_nanosleep F -GLIBC_2.17 clock_settime F -GLIBC_2.17 secure_getenv F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __cxa_thread_atexit_impl F -GLIBC_2.22 GLIBC_2.22 A -GLIBC_2.22 fmemopen F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 fts64_children F -GLIBC_2.23 fts64_close F -GLIBC_2.23 fts64_open F -GLIBC_2.23 fts64_read F -GLIBC_2.23 fts64_set F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 quick_exit F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __explicit_bzero_chk F -GLIBC_2.25 explicit_bzero F -GLIBC_2.25 getentropy F -GLIBC_2.25 getrandom F -GLIBC_2.25 strfromd F -GLIBC_2.25 strfromf F -GLIBC_2.25 strfroml F -GLIBC_2.26 GLIBC_2.26 A -GLIBC_2.26 preadv2 F -GLIBC_2.26 preadv64v2 F -GLIBC_2.26 pwritev2 F -GLIBC_2.26 pwritev64v2 F -GLIBC_2.26 reallocarray F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libcrypt.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libcrypt.abilist deleted file mode 100644 index d0f5c3b25d..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libcrypt.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 crypt F -GLIBC_2.16 crypt_r F -GLIBC_2.16 encrypt F -GLIBC_2.16 encrypt_r F -GLIBC_2.16 fcrypt F -GLIBC_2.16 setkey F -GLIBC_2.16 setkey_r F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libdl.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libdl.abilist deleted file mode 100644 index e4d2e7935d..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libdl.abilist +++ /dev/null @@ -1,10 +0,0 @@ -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 dladdr F -GLIBC_2.16 dladdr1 F -GLIBC_2.16 dlclose F -GLIBC_2.16 dlerror F -GLIBC_2.16 dlinfo F -GLIBC_2.16 dlmopen F -GLIBC_2.16 dlopen F -GLIBC_2.16 dlsym F -GLIBC_2.16 dlvsym F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist deleted file mode 100644 index a24ff7e8a0..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist +++ /dev/null @@ -1,463 +0,0 @@ -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 _LIB_VERSION D 0x4 -GLIBC_2.16 __acos_finite F -GLIBC_2.16 __acosf_finite F -GLIBC_2.16 __acosh_finite F -GLIBC_2.16 __acoshf_finite F -GLIBC_2.16 __acoshl_finite F -GLIBC_2.16 __acosl_finite F -GLIBC_2.16 __asin_finite F -GLIBC_2.16 __asinf_finite F -GLIBC_2.16 __asinl_finite F -GLIBC_2.16 __atan2_finite F -GLIBC_2.16 __atan2f_finite F -GLIBC_2.16 __atan2l_finite F -GLIBC_2.16 __atanh_finite F -GLIBC_2.16 __atanhf_finite F -GLIBC_2.16 __atanhl_finite F -GLIBC_2.16 __clog10 F -GLIBC_2.16 __clog10f F -GLIBC_2.16 __clog10l F -GLIBC_2.16 __cosh_finite F -GLIBC_2.16 __coshf_finite F -GLIBC_2.16 __coshl_finite F -GLIBC_2.16 __exp10_finite F -GLIBC_2.16 __exp10f_finite F -GLIBC_2.16 __exp10l_finite F -GLIBC_2.16 __exp2_finite F -GLIBC_2.16 __exp2f_finite F -GLIBC_2.16 __exp2l_finite F -GLIBC_2.16 __exp_finite F -GLIBC_2.16 __expf_finite F -GLIBC_2.16 __expl_finite F -GLIBC_2.16 __finite F -GLIBC_2.16 __finitef F -GLIBC_2.16 __finitel F -GLIBC_2.16 __fmod_finite F -GLIBC_2.16 __fmodf_finite F -GLIBC_2.16 __fmodl_finite F -GLIBC_2.16 __fpclassify F -GLIBC_2.16 __fpclassifyf F -GLIBC_2.16 __fpclassifyl F -GLIBC_2.16 __gamma_r_finite F -GLIBC_2.16 __gammaf_r_finite F -GLIBC_2.16 __gammal_r_finite F -GLIBC_2.16 __hypot_finite F -GLIBC_2.16 __hypotf_finite F -GLIBC_2.16 __hypotl_finite F -GLIBC_2.16 __j0_finite F -GLIBC_2.16 __j0f_finite F -GLIBC_2.16 __j0l_finite F -GLIBC_2.16 __j1_finite F -GLIBC_2.16 __j1f_finite F -GLIBC_2.16 __j1l_finite F -GLIBC_2.16 __jn_finite F -GLIBC_2.16 __jnf_finite F -GLIBC_2.16 __jnl_finite F -GLIBC_2.16 __lgamma_r_finite F -GLIBC_2.16 __lgammaf_r_finite F -GLIBC_2.16 __lgammal_r_finite F -GLIBC_2.16 __log10_finite F -GLIBC_2.16 __log10f_finite F -GLIBC_2.16 __log10l_finite F -GLIBC_2.16 __log2_finite F -GLIBC_2.16 __log2f_finite F -GLIBC_2.16 __log2l_finite F -GLIBC_2.16 __log_finite F -GLIBC_2.16 __logf_finite F -GLIBC_2.16 __logl_finite F -GLIBC_2.16 __pow_finite F -GLIBC_2.16 __powf_finite F -GLIBC_2.16 __powl_finite F -GLIBC_2.16 __remainder_finite F -GLIBC_2.16 __remainderf_finite F -GLIBC_2.16 __remainderl_finite F -GLIBC_2.16 __scalb_finite F -GLIBC_2.16 __scalbf_finite F -GLIBC_2.16 __scalbl_finite F -GLIBC_2.16 __signbit F -GLIBC_2.16 __signbitf F -GLIBC_2.16 __signbitl F -GLIBC_2.16 __sinh_finite F -GLIBC_2.16 __sinhf_finite F -GLIBC_2.16 __sinhl_finite F -GLIBC_2.16 __sqrt_finite F -GLIBC_2.16 __sqrtf_finite F -GLIBC_2.16 __sqrtl_finite F -GLIBC_2.16 __y0_finite F -GLIBC_2.16 __y0f_finite F -GLIBC_2.16 __y0l_finite F -GLIBC_2.16 __y1_finite F -GLIBC_2.16 __y1f_finite F -GLIBC_2.16 __y1l_finite F -GLIBC_2.16 __yn_finite F -GLIBC_2.16 __ynf_finite F -GLIBC_2.16 __ynl_finite F -GLIBC_2.16 acos F -GLIBC_2.16 acosf F -GLIBC_2.16 acosh F -GLIBC_2.16 acoshf F -GLIBC_2.16 acoshl F -GLIBC_2.16 acosl F -GLIBC_2.16 asin F -GLIBC_2.16 asinf F -GLIBC_2.16 asinh F -GLIBC_2.16 asinhf F -GLIBC_2.16 asinhl F -GLIBC_2.16 asinl F -GLIBC_2.16 atan F -GLIBC_2.16 atan2 F -GLIBC_2.16 atan2f F -GLIBC_2.16 atan2l F -GLIBC_2.16 atanf F -GLIBC_2.16 atanh F -GLIBC_2.16 atanhf F -GLIBC_2.16 atanhl F -GLIBC_2.16 atanl F -GLIBC_2.16 cabs F -GLIBC_2.16 cabsf F -GLIBC_2.16 cabsl F -GLIBC_2.16 cacos F -GLIBC_2.16 cacosf F -GLIBC_2.16 cacosh F -GLIBC_2.16 cacoshf F -GLIBC_2.16 cacoshl F -GLIBC_2.16 cacosl F -GLIBC_2.16 carg F -GLIBC_2.16 cargf F -GLIBC_2.16 cargl F -GLIBC_2.16 casin F -GLIBC_2.16 casinf F -GLIBC_2.16 casinh F -GLIBC_2.16 casinhf F -GLIBC_2.16 casinhl F -GLIBC_2.16 casinl F -GLIBC_2.16 catan F -GLIBC_2.16 catanf F -GLIBC_2.16 catanh F -GLIBC_2.16 catanhf F -GLIBC_2.16 catanhl F -GLIBC_2.16 catanl F -GLIBC_2.16 cbrt F -GLIBC_2.16 cbrtf F -GLIBC_2.16 cbrtl F -GLIBC_2.16 ccos F -GLIBC_2.16 ccosf F -GLIBC_2.16 ccosh F -GLIBC_2.16 ccoshf F -GLIBC_2.16 ccoshl F -GLIBC_2.16 ccosl F -GLIBC_2.16 ceil F -GLIBC_2.16 ceilf F -GLIBC_2.16 ceill F -GLIBC_2.16 cexp F -GLIBC_2.16 cexpf F -GLIBC_2.16 cexpl F -GLIBC_2.16 cimag F -GLIBC_2.16 cimagf F -GLIBC_2.16 cimagl F -GLIBC_2.16 clog F -GLIBC_2.16 clog10 F -GLIBC_2.16 clog10f F -GLIBC_2.16 clog10l F -GLIBC_2.16 clogf F -GLIBC_2.16 clogl F -GLIBC_2.16 conj F -GLIBC_2.16 conjf F -GLIBC_2.16 conjl F -GLIBC_2.16 copysign F -GLIBC_2.16 copysignf F -GLIBC_2.16 copysignl F -GLIBC_2.16 cos F -GLIBC_2.16 cosf F -GLIBC_2.16 cosh F -GLIBC_2.16 coshf F -GLIBC_2.16 coshl F -GLIBC_2.16 cosl F -GLIBC_2.16 cpow F -GLIBC_2.16 cpowf F -GLIBC_2.16 cpowl F -GLIBC_2.16 cproj F -GLIBC_2.16 cprojf F -GLIBC_2.16 cprojl F -GLIBC_2.16 creal F -GLIBC_2.16 crealf F -GLIBC_2.16 creall F -GLIBC_2.16 csin F -GLIBC_2.16 csinf F -GLIBC_2.16 csinh F -GLIBC_2.16 csinhf F -GLIBC_2.16 csinhl F -GLIBC_2.16 csinl F -GLIBC_2.16 csqrt F -GLIBC_2.16 csqrtf F -GLIBC_2.16 csqrtl F -GLIBC_2.16 ctan F -GLIBC_2.16 ctanf F -GLIBC_2.16 ctanh F -GLIBC_2.16 ctanhf F -GLIBC_2.16 ctanhl F -GLIBC_2.16 ctanl F -GLIBC_2.16 drem F -GLIBC_2.16 dremf F -GLIBC_2.16 dreml F -GLIBC_2.16 erf F -GLIBC_2.16 erfc F -GLIBC_2.16 erfcf F -GLIBC_2.16 erfcl F -GLIBC_2.16 erff F -GLIBC_2.16 erfl F -GLIBC_2.16 exp F -GLIBC_2.16 exp10 F -GLIBC_2.16 exp10f F -GLIBC_2.16 exp10l F -GLIBC_2.16 exp2 F -GLIBC_2.16 exp2f F -GLIBC_2.16 exp2l F -GLIBC_2.16 expf F -GLIBC_2.16 expl F -GLIBC_2.16 expm1 F -GLIBC_2.16 expm1f F -GLIBC_2.16 expm1l F -GLIBC_2.16 fabs F -GLIBC_2.16 fabsf F -GLIBC_2.16 fabsl F -GLIBC_2.16 fdim F -GLIBC_2.16 fdimf F -GLIBC_2.16 fdiml F -GLIBC_2.16 feclearexcept F -GLIBC_2.16 fedisableexcept F -GLIBC_2.16 feenableexcept F -GLIBC_2.16 fegetenv F -GLIBC_2.16 fegetexcept F -GLIBC_2.16 fegetexceptflag F -GLIBC_2.16 fegetround F -GLIBC_2.16 feholdexcept F -GLIBC_2.16 feraiseexcept F -GLIBC_2.16 fesetenv F -GLIBC_2.16 fesetexceptflag F -GLIBC_2.16 fesetround F -GLIBC_2.16 fetestexcept F -GLIBC_2.16 feupdateenv F -GLIBC_2.16 finite F -GLIBC_2.16 finitef F -GLIBC_2.16 finitel F -GLIBC_2.16 floor F -GLIBC_2.16 floorf F -GLIBC_2.16 floorl F -GLIBC_2.16 fma F -GLIBC_2.16 fmaf F -GLIBC_2.16 fmal F -GLIBC_2.16 fmax F -GLIBC_2.16 fmaxf F -GLIBC_2.16 fmaxl F -GLIBC_2.16 fmin F -GLIBC_2.16 fminf F -GLIBC_2.16 fminl F -GLIBC_2.16 fmod F -GLIBC_2.16 fmodf F -GLIBC_2.16 fmodl F -GLIBC_2.16 frexp F -GLIBC_2.16 frexpf F -GLIBC_2.16 frexpl F -GLIBC_2.16 gamma F -GLIBC_2.16 gammaf F -GLIBC_2.16 gammal F -GLIBC_2.16 hypot F -GLIBC_2.16 hypotf F -GLIBC_2.16 hypotl F -GLIBC_2.16 ilogb F -GLIBC_2.16 ilogbf F -GLIBC_2.16 ilogbl F -GLIBC_2.16 j0 F -GLIBC_2.16 j0f F -GLIBC_2.16 j0l F -GLIBC_2.16 j1 F -GLIBC_2.16 j1f F -GLIBC_2.16 j1l F -GLIBC_2.16 jn F -GLIBC_2.16 jnf F -GLIBC_2.16 jnl F -GLIBC_2.16 ldexp F -GLIBC_2.16 ldexpf F -GLIBC_2.16 ldexpl F -GLIBC_2.16 lgamma F -GLIBC_2.16 lgamma_r F -GLIBC_2.16 lgammaf F -GLIBC_2.16 lgammaf_r F -GLIBC_2.16 lgammal F -GLIBC_2.16 lgammal_r F -GLIBC_2.16 llrint F -GLIBC_2.16 llrintf F -GLIBC_2.16 llrintl F -GLIBC_2.16 llround F -GLIBC_2.16 llroundf F -GLIBC_2.16 llroundl F -GLIBC_2.16 log F -GLIBC_2.16 log10 F -GLIBC_2.16 log10f F -GLIBC_2.16 log10l F -GLIBC_2.16 log1p F -GLIBC_2.16 log1pf F -GLIBC_2.16 log1pl F -GLIBC_2.16 log2 F -GLIBC_2.16 log2f F -GLIBC_2.16 log2l F -GLIBC_2.16 logb F -GLIBC_2.16 logbf F -GLIBC_2.16 logbl F -GLIBC_2.16 logf F -GLIBC_2.16 logl F -GLIBC_2.16 lrint F -GLIBC_2.16 lrintf F -GLIBC_2.16 lrintl F -GLIBC_2.16 lround F -GLIBC_2.16 lroundf F -GLIBC_2.16 lroundl F -GLIBC_2.16 matherr F -GLIBC_2.16 modf F -GLIBC_2.16 modff F -GLIBC_2.16 modfl F -GLIBC_2.16 nan F -GLIBC_2.16 nanf F -GLIBC_2.16 nanl F -GLIBC_2.16 nearbyint F -GLIBC_2.16 nearbyintf F -GLIBC_2.16 nearbyintl F -GLIBC_2.16 nextafter F -GLIBC_2.16 nextafterf F -GLIBC_2.16 nextafterl F -GLIBC_2.16 nexttoward F -GLIBC_2.16 nexttowardf F -GLIBC_2.16 nexttowardl F -GLIBC_2.16 pow F -GLIBC_2.16 pow10 F -GLIBC_2.16 pow10f F -GLIBC_2.16 pow10l F -GLIBC_2.16 powf F -GLIBC_2.16 powl F -GLIBC_2.16 remainder F -GLIBC_2.16 remainderf F -GLIBC_2.16 remainderl F -GLIBC_2.16 remquo F -GLIBC_2.16 remquof F -GLIBC_2.16 remquol F -GLIBC_2.16 rint F -GLIBC_2.16 rintf F -GLIBC_2.16 rintl F -GLIBC_2.16 round F -GLIBC_2.16 roundf F -GLIBC_2.16 roundl F -GLIBC_2.16 scalb F -GLIBC_2.16 scalbf F -GLIBC_2.16 scalbl F -GLIBC_2.16 scalbln F -GLIBC_2.16 scalblnf F -GLIBC_2.16 scalblnl F -GLIBC_2.16 scalbn F -GLIBC_2.16 scalbnf F -GLIBC_2.16 scalbnl F -GLIBC_2.16 signgam D 0x4 -GLIBC_2.16 significand F -GLIBC_2.16 significandf F -GLIBC_2.16 significandl F -GLIBC_2.16 sin F -GLIBC_2.16 sincos F -GLIBC_2.16 sincosf F -GLIBC_2.16 sincosl F -GLIBC_2.16 sinf F -GLIBC_2.16 sinh F -GLIBC_2.16 sinhf F -GLIBC_2.16 sinhl F -GLIBC_2.16 sinl F -GLIBC_2.16 sqrt F -GLIBC_2.16 sqrtf F -GLIBC_2.16 sqrtl F -GLIBC_2.16 tan F -GLIBC_2.16 tanf F -GLIBC_2.16 tanh F -GLIBC_2.16 tanhf F -GLIBC_2.16 tanhl F -GLIBC_2.16 tanl F -GLIBC_2.16 tgamma F -GLIBC_2.16 tgammaf F -GLIBC_2.16 tgammal F -GLIBC_2.16 trunc F -GLIBC_2.16 truncf F -GLIBC_2.16 truncl F -GLIBC_2.16 y0 F -GLIBC_2.16 y0f F -GLIBC_2.16 y0l F -GLIBC_2.16 y1 F -GLIBC_2.16 y1f F -GLIBC_2.16 y1l F -GLIBC_2.16 yn F -GLIBC_2.16 ynf F -GLIBC_2.16 ynl F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 __issignaling F -GLIBC_2.18 __issignalingf F -GLIBC_2.18 __issignalingl F -GLIBC_2.23 GLIBC_2.23 A -GLIBC_2.23 __signgam D 0x4 -GLIBC_2.23 lgamma F -GLIBC_2.23 lgammaf F -GLIBC_2.23 lgammal F -GLIBC_2.24 GLIBC_2.24 A -GLIBC_2.24 nextdown F -GLIBC_2.24 nextdownf F -GLIBC_2.24 nextdownl F -GLIBC_2.24 nextup F -GLIBC_2.24 nextupf F -GLIBC_2.24 nextupl F -GLIBC_2.25 GLIBC_2.25 A -GLIBC_2.25 __iscanonicall F -GLIBC_2.25 __iseqsig F -GLIBC_2.25 __iseqsigf F -GLIBC_2.25 __iseqsigl F -GLIBC_2.25 canonicalize F -GLIBC_2.25 canonicalizef F -GLIBC_2.25 canonicalizel F -GLIBC_2.25 fegetmode F -GLIBC_2.25 fesetexcept F -GLIBC_2.25 fesetmode F -GLIBC_2.25 fetestexceptflag F -GLIBC_2.25 fmaxmag F -GLIBC_2.25 fmaxmagf F -GLIBC_2.25 fmaxmagl F -GLIBC_2.25 fminmag F -GLIBC_2.25 fminmagf F -GLIBC_2.25 fminmagl F -GLIBC_2.25 fromfp F -GLIBC_2.25 fromfpf F -GLIBC_2.25 fromfpl F -GLIBC_2.25 fromfpx F -GLIBC_2.25 fromfpxf F -GLIBC_2.25 fromfpxl F -GLIBC_2.25 getpayload F -GLIBC_2.25 getpayloadf F -GLIBC_2.25 getpayloadl F -GLIBC_2.25 llogb F -GLIBC_2.25 llogbf F -GLIBC_2.25 llogbl F -GLIBC_2.25 roundeven F -GLIBC_2.25 roundevenf F -GLIBC_2.25 roundevenl F -GLIBC_2.25 setpayload F -GLIBC_2.25 setpayloadf F -GLIBC_2.25 setpayloadl F -GLIBC_2.25 setpayloadsig F -GLIBC_2.25 setpayloadsigf F -GLIBC_2.25 setpayloadsigl F -GLIBC_2.25 totalorder F -GLIBC_2.25 totalorderf F -GLIBC_2.25 totalorderl F -GLIBC_2.25 totalordermag F -GLIBC_2.25 totalordermagf F -GLIBC_2.25 totalordermagl F -GLIBC_2.25 ufromfp F -GLIBC_2.25 ufromfpf F -GLIBC_2.25 ufromfpl F -GLIBC_2.25 ufromfpx F -GLIBC_2.25 ufromfpxf F -GLIBC_2.25 ufromfpxl F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libnsl.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libnsl.abilist deleted file mode 100644 index a0499d3c94..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libnsl.abilist +++ /dev/null @@ -1,122 +0,0 @@ -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __free_fdresult F -GLIBC_2.16 __nis_default_access F -GLIBC_2.16 __nis_default_group F -GLIBC_2.16 __nis_default_owner F -GLIBC_2.16 __nis_default_ttl F -GLIBC_2.16 __nis_finddirectory F -GLIBC_2.16 __nis_hash F -GLIBC_2.16 __nisbind_connect F -GLIBC_2.16 __nisbind_create F -GLIBC_2.16 __nisbind_destroy F -GLIBC_2.16 __nisbind_next F -GLIBC_2.16 __yp_check F -GLIBC_2.16 nis_add F -GLIBC_2.16 nis_add_entry F -GLIBC_2.16 nis_addmember F -GLIBC_2.16 nis_checkpoint F -GLIBC_2.16 nis_clone_directory F -GLIBC_2.16 nis_clone_object F -GLIBC_2.16 nis_clone_result F -GLIBC_2.16 nis_creategroup F -GLIBC_2.16 nis_destroy_object F -GLIBC_2.16 nis_destroygroup F -GLIBC_2.16 nis_dir_cmp F -GLIBC_2.16 nis_domain_of F -GLIBC_2.16 nis_domain_of_r F -GLIBC_2.16 nis_first_entry F -GLIBC_2.16 nis_free_directory F -GLIBC_2.16 nis_free_object F -GLIBC_2.16 nis_free_request F -GLIBC_2.16 nis_freenames F -GLIBC_2.16 nis_freeresult F -GLIBC_2.16 nis_freeservlist F -GLIBC_2.16 nis_freetags F -GLIBC_2.16 nis_getnames F -GLIBC_2.16 nis_getservlist F -GLIBC_2.16 nis_ismember F -GLIBC_2.16 nis_leaf_of F -GLIBC_2.16 nis_leaf_of_r F -GLIBC_2.16 nis_lerror F -GLIBC_2.16 nis_list F -GLIBC_2.16 nis_local_directory F -GLIBC_2.16 nis_local_group F -GLIBC_2.16 nis_local_host F -GLIBC_2.16 nis_local_principal F -GLIBC_2.16 nis_lookup F -GLIBC_2.16 nis_mkdir F -GLIBC_2.16 nis_modify F -GLIBC_2.16 nis_modify_entry F -GLIBC_2.16 nis_name_of F -GLIBC_2.16 nis_name_of_r F -GLIBC_2.16 nis_next_entry F -GLIBC_2.16 nis_perror F -GLIBC_2.16 nis_ping F -GLIBC_2.16 nis_print_directory F -GLIBC_2.16 nis_print_entry F -GLIBC_2.16 nis_print_group F -GLIBC_2.16 nis_print_group_entry F -GLIBC_2.16 nis_print_link F -GLIBC_2.16 nis_print_object F -GLIBC_2.16 nis_print_result F -GLIBC_2.16 nis_print_rights F -GLIBC_2.16 nis_print_table F -GLIBC_2.16 nis_read_obj F -GLIBC_2.16 nis_remove F -GLIBC_2.16 nis_remove_entry F -GLIBC_2.16 nis_removemember F -GLIBC_2.16 nis_rmdir F -GLIBC_2.16 nis_servstate F -GLIBC_2.16 nis_sperrno F -GLIBC_2.16 nis_sperror F -GLIBC_2.16 nis_sperror_r F -GLIBC_2.16 nis_stats F -GLIBC_2.16 nis_verifygroup F -GLIBC_2.16 nis_write_obj F -GLIBC_2.16 readColdStartFile F -GLIBC_2.16 writeColdStartFile F -GLIBC_2.16 xdr_cback_data F -GLIBC_2.16 xdr_domainname F -GLIBC_2.16 xdr_keydat F -GLIBC_2.16 xdr_mapname F -GLIBC_2.16 xdr_obj_p F -GLIBC_2.16 xdr_peername F -GLIBC_2.16 xdr_valdat F -GLIBC_2.16 xdr_yp_buf F -GLIBC_2.16 xdr_ypall F -GLIBC_2.16 xdr_ypbind_binding F -GLIBC_2.16 xdr_ypbind_resp F -GLIBC_2.16 xdr_ypbind_resptype F -GLIBC_2.16 xdr_ypbind_setdom F -GLIBC_2.16 xdr_ypdelete_args F -GLIBC_2.16 xdr_ypmap_parms F -GLIBC_2.16 xdr_ypmaplist F -GLIBC_2.16 xdr_yppush_status F -GLIBC_2.16 xdr_yppushresp_xfr F -GLIBC_2.16 xdr_ypreq_key F -GLIBC_2.16 xdr_ypreq_nokey F -GLIBC_2.16 xdr_ypreq_xfr F -GLIBC_2.16 xdr_ypresp_all F -GLIBC_2.16 xdr_ypresp_key_val F -GLIBC_2.16 xdr_ypresp_maplist F -GLIBC_2.16 xdr_ypresp_master F -GLIBC_2.16 xdr_ypresp_order F -GLIBC_2.16 xdr_ypresp_val F -GLIBC_2.16 xdr_ypresp_xfr F -GLIBC_2.16 xdr_ypstat F -GLIBC_2.16 xdr_ypupdate_args F -GLIBC_2.16 xdr_ypxfrstat F -GLIBC_2.16 yp_all F -GLIBC_2.16 yp_bind F -GLIBC_2.16 yp_first F -GLIBC_2.16 yp_get_default_domain F -GLIBC_2.16 yp_maplist F -GLIBC_2.16 yp_master F -GLIBC_2.16 yp_match F -GLIBC_2.16 yp_next F -GLIBC_2.16 yp_order F -GLIBC_2.16 yp_unbind F -GLIBC_2.16 yp_update F -GLIBC_2.16 ypbinderr_string F -GLIBC_2.16 yperr_string F -GLIBC_2.16 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist deleted file mode 100644 index 6cd0fc3487..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist +++ /dev/null @@ -1,226 +0,0 @@ -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 _IO_flockfile F -GLIBC_2.16 _IO_ftrylockfile F -GLIBC_2.16 _IO_funlockfile F -GLIBC_2.16 __close F -GLIBC_2.16 __connect F -GLIBC_2.16 __errno_location F -GLIBC_2.16 __fcntl F -GLIBC_2.16 __fork F -GLIBC_2.16 __h_errno_location F -GLIBC_2.16 __libc_allocate_rtsig F -GLIBC_2.16 __libc_current_sigrtmax F -GLIBC_2.16 __libc_current_sigrtmin F -GLIBC_2.16 __lseek F -GLIBC_2.16 __nanosleep F -GLIBC_2.16 __open F -GLIBC_2.16 __open64 F -GLIBC_2.16 __pread64 F -GLIBC_2.16 __pthread_cleanup_routine F -GLIBC_2.16 __pthread_getspecific F -GLIBC_2.16 __pthread_key_create F -GLIBC_2.16 __pthread_mutex_destroy F -GLIBC_2.16 __pthread_mutex_init F -GLIBC_2.16 __pthread_mutex_lock F -GLIBC_2.16 __pthread_mutex_trylock F -GLIBC_2.16 __pthread_mutex_unlock F -GLIBC_2.16 __pthread_mutexattr_destroy F -GLIBC_2.16 __pthread_mutexattr_init F -GLIBC_2.16 __pthread_mutexattr_settype F -GLIBC_2.16 __pthread_once F -GLIBC_2.16 __pthread_register_cancel F -GLIBC_2.16 __pthread_register_cancel_defer F -GLIBC_2.16 __pthread_rwlock_destroy F -GLIBC_2.16 __pthread_rwlock_init F -GLIBC_2.16 __pthread_rwlock_rdlock F -GLIBC_2.16 __pthread_rwlock_tryrdlock F -GLIBC_2.16 __pthread_rwlock_trywrlock F -GLIBC_2.16 __pthread_rwlock_unlock F -GLIBC_2.16 __pthread_rwlock_wrlock F -GLIBC_2.16 __pthread_setspecific F -GLIBC_2.16 __pthread_unregister_cancel F -GLIBC_2.16 __pthread_unregister_cancel_restore F -GLIBC_2.16 __pthread_unwind_next F -GLIBC_2.16 __pwrite64 F -GLIBC_2.16 __read F -GLIBC_2.16 __res_state F -GLIBC_2.16 __send F -GLIBC_2.16 __sigaction F -GLIBC_2.16 __vfork F -GLIBC_2.16 __wait F -GLIBC_2.16 __write F -GLIBC_2.16 _pthread_cleanup_pop F -GLIBC_2.16 _pthread_cleanup_pop_restore F -GLIBC_2.16 _pthread_cleanup_push F -GLIBC_2.16 _pthread_cleanup_push_defer F -GLIBC_2.16 accept F -GLIBC_2.16 close F -GLIBC_2.16 connect F -GLIBC_2.16 fcntl F -GLIBC_2.16 flockfile F -GLIBC_2.16 fork F -GLIBC_2.16 fsync F -GLIBC_2.16 ftrylockfile F -GLIBC_2.16 funlockfile F -GLIBC_2.16 longjmp F -GLIBC_2.16 lseek F -GLIBC_2.16 lseek64 F -GLIBC_2.16 msync F -GLIBC_2.16 nanosleep F -GLIBC_2.16 open F -GLIBC_2.16 open64 F -GLIBC_2.16 pause F -GLIBC_2.16 pread F -GLIBC_2.16 pread64 F -GLIBC_2.16 pthread_attr_destroy F -GLIBC_2.16 pthread_attr_getaffinity_np F -GLIBC_2.16 pthread_attr_getdetachstate F -GLIBC_2.16 pthread_attr_getguardsize F -GLIBC_2.16 pthread_attr_getinheritsched F -GLIBC_2.16 pthread_attr_getschedparam F -GLIBC_2.16 pthread_attr_getschedpolicy F -GLIBC_2.16 pthread_attr_getscope F -GLIBC_2.16 pthread_attr_getstack F -GLIBC_2.16 pthread_attr_getstackaddr F -GLIBC_2.16 pthread_attr_getstacksize F -GLIBC_2.16 pthread_attr_init F -GLIBC_2.16 pthread_attr_setaffinity_np F -GLIBC_2.16 pthread_attr_setdetachstate F -GLIBC_2.16 pthread_attr_setguardsize F -GLIBC_2.16 pthread_attr_setinheritsched F -GLIBC_2.16 pthread_attr_setschedparam F -GLIBC_2.16 pthread_attr_setschedpolicy F -GLIBC_2.16 pthread_attr_setscope F -GLIBC_2.16 pthread_attr_setstack F -GLIBC_2.16 pthread_attr_setstackaddr F -GLIBC_2.16 pthread_attr_setstacksize F -GLIBC_2.16 pthread_barrier_destroy F -GLIBC_2.16 pthread_barrier_init F -GLIBC_2.16 pthread_barrier_wait F -GLIBC_2.16 pthread_barrierattr_destroy F -GLIBC_2.16 pthread_barrierattr_getpshared F -GLIBC_2.16 pthread_barrierattr_init F -GLIBC_2.16 pthread_barrierattr_setpshared F -GLIBC_2.16 pthread_cancel F -GLIBC_2.16 pthread_cond_broadcast F -GLIBC_2.16 pthread_cond_destroy F -GLIBC_2.16 pthread_cond_init F -GLIBC_2.16 pthread_cond_signal F -GLIBC_2.16 pthread_cond_timedwait F -GLIBC_2.16 pthread_cond_wait F -GLIBC_2.16 pthread_condattr_destroy F -GLIBC_2.16 pthread_condattr_getclock F -GLIBC_2.16 pthread_condattr_getpshared F -GLIBC_2.16 pthread_condattr_init F -GLIBC_2.16 pthread_condattr_setclock F -GLIBC_2.16 pthread_condattr_setpshared F -GLIBC_2.16 pthread_create F -GLIBC_2.16 pthread_detach F -GLIBC_2.16 pthread_equal F -GLIBC_2.16 pthread_exit F -GLIBC_2.16 pthread_getaffinity_np F -GLIBC_2.16 pthread_getattr_np F -GLIBC_2.16 pthread_getconcurrency F -GLIBC_2.16 pthread_getcpuclockid F -GLIBC_2.16 pthread_getname_np F -GLIBC_2.16 pthread_getschedparam F -GLIBC_2.16 pthread_getspecific F -GLIBC_2.16 pthread_join F -GLIBC_2.16 pthread_key_create F -GLIBC_2.16 pthread_key_delete F -GLIBC_2.16 pthread_kill F -GLIBC_2.16 pthread_kill_other_threads_np F -GLIBC_2.16 pthread_mutex_consistent F -GLIBC_2.16 pthread_mutex_consistent_np F -GLIBC_2.16 pthread_mutex_destroy F -GLIBC_2.16 pthread_mutex_getprioceiling F -GLIBC_2.16 pthread_mutex_init F -GLIBC_2.16 pthread_mutex_lock F -GLIBC_2.16 pthread_mutex_setprioceiling F -GLIBC_2.16 pthread_mutex_timedlock F -GLIBC_2.16 pthread_mutex_trylock F -GLIBC_2.16 pthread_mutex_unlock F -GLIBC_2.16 pthread_mutexattr_destroy F -GLIBC_2.16 pthread_mutexattr_getkind_np F -GLIBC_2.16 pthread_mutexattr_getprioceiling F -GLIBC_2.16 pthread_mutexattr_getprotocol F -GLIBC_2.16 pthread_mutexattr_getpshared F -GLIBC_2.16 pthread_mutexattr_getrobust F -GLIBC_2.16 pthread_mutexattr_getrobust_np F -GLIBC_2.16 pthread_mutexattr_gettype F -GLIBC_2.16 pthread_mutexattr_init F -GLIBC_2.16 pthread_mutexattr_setkind_np F -GLIBC_2.16 pthread_mutexattr_setprioceiling F -GLIBC_2.16 pthread_mutexattr_setprotocol F -GLIBC_2.16 pthread_mutexattr_setpshared F -GLIBC_2.16 pthread_mutexattr_setrobust F -GLIBC_2.16 pthread_mutexattr_setrobust_np F -GLIBC_2.16 pthread_mutexattr_settype F -GLIBC_2.16 pthread_once F -GLIBC_2.16 pthread_rwlock_destroy F -GLIBC_2.16 pthread_rwlock_init F -GLIBC_2.16 pthread_rwlock_rdlock F -GLIBC_2.16 pthread_rwlock_timedrdlock F -GLIBC_2.16 pthread_rwlock_timedwrlock F -GLIBC_2.16 pthread_rwlock_tryrdlock F -GLIBC_2.16 pthread_rwlock_trywrlock F -GLIBC_2.16 pthread_rwlock_unlock F -GLIBC_2.16 pthread_rwlock_wrlock F -GLIBC_2.16 pthread_rwlockattr_destroy F -GLIBC_2.16 pthread_rwlockattr_getkind_np F -GLIBC_2.16 pthread_rwlockattr_getpshared F -GLIBC_2.16 pthread_rwlockattr_init F -GLIBC_2.16 pthread_rwlockattr_setkind_np F -GLIBC_2.16 pthread_rwlockattr_setpshared F -GLIBC_2.16 pthread_self F -GLIBC_2.16 pthread_setaffinity_np F -GLIBC_2.16 pthread_setcancelstate F -GLIBC_2.16 pthread_setcanceltype F -GLIBC_2.16 pthread_setconcurrency F -GLIBC_2.16 pthread_setname_np F -GLIBC_2.16 pthread_setschedparam F -GLIBC_2.16 pthread_setschedprio F -GLIBC_2.16 pthread_setspecific F -GLIBC_2.16 pthread_sigmask F -GLIBC_2.16 pthread_sigqueue F -GLIBC_2.16 pthread_spin_destroy F -GLIBC_2.16 pthread_spin_init F -GLIBC_2.16 pthread_spin_lock F -GLIBC_2.16 pthread_spin_trylock F -GLIBC_2.16 pthread_spin_unlock F -GLIBC_2.16 pthread_testcancel F -GLIBC_2.16 pthread_timedjoin_np F -GLIBC_2.16 pthread_tryjoin_np F -GLIBC_2.16 pthread_yield F -GLIBC_2.16 pwrite F -GLIBC_2.16 pwrite64 F -GLIBC_2.16 raise F -GLIBC_2.16 read F -GLIBC_2.16 recv F -GLIBC_2.16 recvfrom F -GLIBC_2.16 recvmsg F -GLIBC_2.16 sem_close F -GLIBC_2.16 sem_destroy F -GLIBC_2.16 sem_getvalue F -GLIBC_2.16 sem_init F -GLIBC_2.16 sem_open F -GLIBC_2.16 sem_post F -GLIBC_2.16 sem_timedwait F -GLIBC_2.16 sem_trywait F -GLIBC_2.16 sem_unlink F -GLIBC_2.16 sem_wait F -GLIBC_2.16 send F -GLIBC_2.16 sendmsg F -GLIBC_2.16 sendto F -GLIBC_2.16 sigaction F -GLIBC_2.16 siglongjmp F -GLIBC_2.16 sigwait F -GLIBC_2.16 system F -GLIBC_2.16 tcdrain F -GLIBC_2.16 vfork F -GLIBC_2.16 wait F -GLIBC_2.16 waitpid F -GLIBC_2.16 write F -GLIBC_2.18 GLIBC_2.18 A -GLIBC_2.18 pthread_getattr_default_np F -GLIBC_2.18 pthread_setattr_default_np F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libresolv.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libresolv.abilist deleted file mode 100644 index 28abb0307e..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libresolv.abilist +++ /dev/null @@ -1,92 +0,0 @@ -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __b64_ntop F -GLIBC_2.16 __b64_pton F -GLIBC_2.16 __dn_comp F -GLIBC_2.16 __dn_count_labels F -GLIBC_2.16 __dn_expand F -GLIBC_2.16 __dn_skipname F -GLIBC_2.16 __fp_nquery F -GLIBC_2.16 __fp_query F -GLIBC_2.16 __fp_resstat F -GLIBC_2.16 __hostalias F -GLIBC_2.16 __loc_aton F -GLIBC_2.16 __loc_ntoa F -GLIBC_2.16 __p_cdname F -GLIBC_2.16 __p_cdnname F -GLIBC_2.16 __p_class F -GLIBC_2.16 __p_class_syms D 0x54 -GLIBC_2.16 __p_fqname F -GLIBC_2.16 __p_fqnname F -GLIBC_2.16 __p_option F -GLIBC_2.16 __p_query F -GLIBC_2.16 __p_rcode F -GLIBC_2.16 __p_secstodate F -GLIBC_2.16 __p_time F -GLIBC_2.16 __p_type F -GLIBC_2.16 __p_type_syms D 0x228 -GLIBC_2.16 __putlong F -GLIBC_2.16 __putshort F -GLIBC_2.16 __res_close F -GLIBC_2.16 __res_dnok F -GLIBC_2.16 __res_hnok F -GLIBC_2.16 __res_hostalias F -GLIBC_2.16 __res_isourserver F -GLIBC_2.16 __res_mailok F -GLIBC_2.16 __res_mkquery F -GLIBC_2.16 __res_nameinquery F -GLIBC_2.16 __res_nmkquery F -GLIBC_2.16 __res_nquery F -GLIBC_2.16 __res_nquerydomain F -GLIBC_2.16 __res_nsearch F -GLIBC_2.16 __res_nsend F -GLIBC_2.16 __res_ownok F -GLIBC_2.16 __res_queriesmatch F -GLIBC_2.16 __res_query F -GLIBC_2.16 __res_querydomain F -GLIBC_2.16 __res_search F -GLIBC_2.16 __res_send F -GLIBC_2.16 __sym_ntop F -GLIBC_2.16 __sym_ntos F -GLIBC_2.16 __sym_ston F -GLIBC_2.16 _gethtbyaddr F -GLIBC_2.16 _gethtbyname F -GLIBC_2.16 _gethtbyname2 F -GLIBC_2.16 _gethtent F -GLIBC_2.16 _getlong F -GLIBC_2.16 _getshort F -GLIBC_2.16 _res_opcodes D 0x40 -GLIBC_2.16 _sethtent F -GLIBC_2.16 inet_net_ntop F -GLIBC_2.16 inet_net_pton F -GLIBC_2.16 inet_neta F -GLIBC_2.16 ns_datetosecs F -GLIBC_2.16 ns_format_ttl F -GLIBC_2.16 ns_get16 F -GLIBC_2.16 ns_get32 F -GLIBC_2.16 ns_initparse F -GLIBC_2.16 ns_makecanon F -GLIBC_2.16 ns_msg_getflag F -GLIBC_2.16 ns_name_compress F -GLIBC_2.16 ns_name_ntol F -GLIBC_2.16 ns_name_ntop F -GLIBC_2.16 ns_name_pack F -GLIBC_2.16 ns_name_pton F -GLIBC_2.16 ns_name_rollback F -GLIBC_2.16 ns_name_skip F -GLIBC_2.16 ns_name_uncompress F -GLIBC_2.16 ns_name_unpack F -GLIBC_2.16 ns_parse_ttl F -GLIBC_2.16 ns_parserr F -GLIBC_2.16 ns_put16 F -GLIBC_2.16 ns_put32 F -GLIBC_2.16 ns_samedomain F -GLIBC_2.16 ns_samename F -GLIBC_2.16 ns_skiprr F -GLIBC_2.16 ns_sprintrr F -GLIBC_2.16 ns_sprintrrf F -GLIBC_2.16 ns_subdomain F -GLIBC_2.16 res_gethostbyaddr F -GLIBC_2.16 res_gethostbyname F -GLIBC_2.16 res_gethostbyname2 F -GLIBC_2.16 res_send_setqhook F -GLIBC_2.16 res_send_setrhook F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/librt.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/librt.abilist deleted file mode 100644 index ea7b40ab56..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/librt.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 __mq_open_2 F -GLIBC_2.16 aio_cancel F -GLIBC_2.16 aio_cancel64 F -GLIBC_2.16 aio_error F -GLIBC_2.16 aio_error64 F -GLIBC_2.16 aio_fsync F -GLIBC_2.16 aio_fsync64 F -GLIBC_2.16 aio_init F -GLIBC_2.16 aio_read F -GLIBC_2.16 aio_read64 F -GLIBC_2.16 aio_return F -GLIBC_2.16 aio_return64 F -GLIBC_2.16 aio_suspend F -GLIBC_2.16 aio_suspend64 F -GLIBC_2.16 aio_write F -GLIBC_2.16 aio_write64 F -GLIBC_2.16 clock_getcpuclockid F -GLIBC_2.16 clock_getres F -GLIBC_2.16 clock_gettime F -GLIBC_2.16 clock_nanosleep F -GLIBC_2.16 clock_settime F -GLIBC_2.16 lio_listio F -GLIBC_2.16 lio_listio64 F -GLIBC_2.16 mq_close F -GLIBC_2.16 mq_getattr F -GLIBC_2.16 mq_notify F -GLIBC_2.16 mq_open F -GLIBC_2.16 mq_receive F -GLIBC_2.16 mq_send F -GLIBC_2.16 mq_setattr F -GLIBC_2.16 mq_timedreceive F -GLIBC_2.16 mq_timedsend F -GLIBC_2.16 mq_unlink F -GLIBC_2.16 shm_open F -GLIBC_2.16 shm_unlink F -GLIBC_2.16 timer_create F -GLIBC_2.16 timer_delete F -GLIBC_2.16 timer_getoverrun F -GLIBC_2.16 timer_gettime F -GLIBC_2.16 timer_settime F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libthread_db.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libthread_db.abilist deleted file mode 100644 index 5d7031cf2f..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libthread_db.abilist +++ /dev/null @@ -1,41 +0,0 @@ -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 td_init F -GLIBC_2.16 td_log F -GLIBC_2.16 td_symbol_list F -GLIBC_2.16 td_ta_clear_event F -GLIBC_2.16 td_ta_delete F -GLIBC_2.16 td_ta_enable_stats F -GLIBC_2.16 td_ta_event_addr F -GLIBC_2.16 td_ta_event_getmsg F -GLIBC_2.16 td_ta_get_nthreads F -GLIBC_2.16 td_ta_get_ph F -GLIBC_2.16 td_ta_get_stats F -GLIBC_2.16 td_ta_map_id2thr F -GLIBC_2.16 td_ta_map_lwp2thr F -GLIBC_2.16 td_ta_new F -GLIBC_2.16 td_ta_reset_stats F -GLIBC_2.16 td_ta_set_event F -GLIBC_2.16 td_ta_setconcurrency F -GLIBC_2.16 td_ta_thr_iter F -GLIBC_2.16 td_ta_tsd_iter F -GLIBC_2.16 td_thr_clear_event F -GLIBC_2.16 td_thr_dbresume F -GLIBC_2.16 td_thr_dbsuspend F -GLIBC_2.16 td_thr_event_enable F -GLIBC_2.16 td_thr_event_getmsg F -GLIBC_2.16 td_thr_get_info F -GLIBC_2.16 td_thr_getfpregs F -GLIBC_2.16 td_thr_getgregs F -GLIBC_2.16 td_thr_getxregs F -GLIBC_2.16 td_thr_getxregsize F -GLIBC_2.16 td_thr_set_event F -GLIBC_2.16 td_thr_setfpregs F -GLIBC_2.16 td_thr_setgregs F -GLIBC_2.16 td_thr_setprio F -GLIBC_2.16 td_thr_setsigpending F -GLIBC_2.16 td_thr_setxregs F -GLIBC_2.16 td_thr_sigsetmask F -GLIBC_2.16 td_thr_tls_get_addr F -GLIBC_2.16 td_thr_tlsbase F -GLIBC_2.16 td_thr_tsd F -GLIBC_2.16 td_thr_validate F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libutil.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libutil.abilist deleted file mode 100644 index 30353d06c2..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libutil.abilist +++ /dev/null @@ -1,7 +0,0 @@ -GLIBC_2.16 GLIBC_2.16 A -GLIBC_2.16 forkpty F -GLIBC_2.16 login F -GLIBC_2.16 login_tty F -GLIBC_2.16 logout F -GLIBC_2.16 logwtmp F -GLIBC_2.16 openpty F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/llseek.S b/sysdeps/unix/sysv/linux/x86_64/x32/llseek.S deleted file mode 100644 index 5084d0ebd2..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/llseek.S +++ /dev/null @@ -1 +0,0 @@ -/* No llseek for x32. */ diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/lseek.S b/sysdeps/unix/sysv/linux/x86_64/x32/lseek.S deleted file mode 100644 index f8b95d5ca2..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/lseek.S +++ /dev/null @@ -1,43 +0,0 @@ -/* The lseek system call with 64-bit offset. Linux/x32 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Return -1LL in a full 64 bits. */ -#undef SYSCALL_ERROR_HANDLER -#define SYSCALL_ERROR_HANDLER \ -0: \ - SYSCALL_SET_ERRNO; \ - orq $-1, %rax; \ - ret; - -/* Always use our own error handler. */ -#undef SYSCALL_ERROR_LABEL -#define SYSCALL_ERROR_LABEL 0f - -PSEUDO (__libc_lseek64, lseek, 3) - ret -PSEUDO_END (__libc_lseek64) - -weak_alias (__libc_lseek64, __lseek64) -libc_hidden_weak (__lseek64) -weak_alias (__libc_lseek64, lseek64) -libc_hidden_weak (lseek64) -weak_alias (__libc_lseek64, __lseek) -libc_hidden_weak (__lseek) -weak_alias (__libc_lseek64, lseek) diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/lseek64.S b/sysdeps/unix/sysv/linux/x86_64/x32/lseek64.S deleted file mode 100644 index d81e98fb51..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/lseek64.S +++ /dev/null @@ -1 +0,0 @@ -/* We don't need a definition since the llseek function is what we need. */ diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/shlib-versions b/sysdeps/unix/sysv/linux/x86_64/x32/shlib-versions deleted file mode 100644 index 0ab2e27224..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/shlib-versions +++ /dev/null @@ -1,4 +0,0 @@ -# DEFAULT Earliest symbol set -# --------------- ------------------------------ -DEFAULT GLIBC_2.16 -ld=ld-linux-x32.so.2 diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list b/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list deleted file mode 100644 index a41c8ac882..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/syscalls.list +++ /dev/null @@ -1,7 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -fallocate - fallocate Ci:iiii fallocate fallocate64 -gettimeofday - gettimeofday:__vdso_gettimeofday@LINUX_2.6 i:pP __gettimeofday gettimeofday -personality EXTRA personality Ei:i __personality personality -posix_fadvise64 - fadvise64 Vi:iiii posix_fadvise posix_fadvise64 -time - time:__vdso_time@LINUX_2.6 Ei:P time diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/sysctl.mk b/sysdeps/unix/sysv/linux/x86_64/x32/sysctl.mk deleted file mode 100644 index da018fe624..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/sysctl.mk +++ /dev/null @@ -1 +0,0 @@ -# X32 doesn't support sysctl. diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/x32/sysdep.h deleted file mode 100644 index 04c73a2bc1..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/sysdep.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINUX_X32_SYSDEP_H -#define _LINUX_X32_SYSDEP_H 1 - -/* There is some commonality. */ -#include -#include - -/* How to pass the off{64}_t argument on p{readv,writev}{64}. */ -#undef LO_HI_LONG -#define LO_HI_LONG(val) (val) - -#endif /* linux/x86_64/x32/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/times.c b/sysdeps/unix/sysv/linux/x86_64/x32/times.c deleted file mode 100644 index d56106e86f..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/times.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Linux times. X32 version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Linux times system call returns 64-bit integer. */ -#undef INTERNAL_SYSCALL_NCS -#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - ({ \ - unsigned long long int resultvar; \ - LOAD_ARGS_##nr (args) \ - LOAD_REGS_##nr \ - asm volatile ( \ - "syscall\n\t" \ - : "=a" (resultvar) \ - : "0" (name) ASM_ARGS_##nr : "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \ - (long long int) resultvar; }) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((unsigned long long int) (val) >= -4095LL) - -#include diff --git a/sysdeps/unix/sysv/linux/xmknod.c b/sysdeps/unix/sysv/linux/xmknod.c deleted file mode 100644 index 61d12e5db1..0000000000 --- a/sysdeps/unix/sysv/linux/xmknod.c +++ /dev/null @@ -1,47 +0,0 @@ -/* xmknod call using old-style Unix mknod system call. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include -#include - -/* Create a device file named PATH, with permission and special bits MODE - and device number DEV (which can be constructed from major and minor - device numbers with the `makedev' macro above). */ -int -__xmknod (int vers, const char *path, mode_t mode, dev_t *dev) -{ - unsigned long long int k_dev; - - if (vers != _MKNOD_VER) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - - /* We must convert the value to dev_t type used by the kernel. */ - k_dev = (*dev) & ((1ULL << 32) - 1); - if (k_dev != *dev) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - - return INLINE_SYSCALL (mknod, 3, path, mode, (unsigned int) k_dev); -} - -weak_alias (__xmknod, _xmknod) -libc_hidden_def (__xmknod) diff --git a/sysdeps/unix/sysv/linux/xmknodat.c b/sysdeps/unix/sysv/linux/xmknodat.c deleted file mode 100644 index ee96be18f3..0000000000 --- a/sysdeps/unix/sysv/linux/xmknodat.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - - -/* Create a device file named PATH relative to FD, with permission and - special bits MODE and device number DEV (which can be constructed - from major and minor device numbers with the `makedev' macro above). */ -int -__xmknodat (int vers, int fd, const char *file, mode_t mode, dev_t *dev) -{ - if (vers != _MKNOD_VER) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - - /* We must convert the value to dev_t type used by the kernel. */ - unsigned long long int k_dev = (*dev) & ((1ULL << 32) - 1); - if (k_dev != *dev) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - - return INLINE_SYSCALL (mknodat, 4, fd, file, mode, (unsigned int) k_dev); -} - -libc_hidden_def (__xmknodat) diff --git a/sysdeps/unix/sysv/linux/xstat.c b/sysdeps/unix/sysv/linux/xstat.c deleted file mode 100644 index 0f83040051..0000000000 --- a/sysdeps/unix/sysv/linux/xstat.c +++ /dev/null @@ -1,59 +0,0 @@ -/* xstat using old-style Unix stat system call. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ho hum, if xstat == xstat64 we must get rid of the prototype or gcc - will complain since they don't strictly match. */ -#define __xstat64 __xstat64_disable - -#include -#include -#include -#include - -#include -#include - -#include - -/* Get information about the file NAME in BUF. */ -int -__xstat (int vers, const char *name, struct stat *buf) -{ - if (vers == _STAT_VER_KERNEL) - return INLINE_SYSCALL (stat, 2, name, buf); - -#ifdef STAT_IS_KERNEL_STAT - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); -#else - struct kernel_stat kbuf; - int result; - - result = INLINE_SYSCALL (stat, 2, name, &kbuf); - if (result == 0) - result = __xstat_conv (vers, &kbuf, buf); - - return result; -#endif -} -hidden_def (__xstat) -weak_alias (__xstat, _xstat); -#if XSTAT_IS_XSTAT64 -#undef __xstat64 -strong_alias (__xstat, __xstat64); -hidden_ver (__xstat, __xstat64) -#endif diff --git a/sysdeps/unix/sysv/linux/xstat64.c b/sysdeps/unix/sysv/linux/xstat64.c deleted file mode 100644 index b3fbe6a383..0000000000 --- a/sysdeps/unix/sysv/linux/xstat64.c +++ /dev/null @@ -1,54 +0,0 @@ -/* xstat64 using Linux stat64 system call. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#include -#include - -#include - -/* Get information about the file NAME in BUF. */ - -int -___xstat64 (int vers, const char *name, struct stat64 *buf) -{ - int result; - result = INLINE_SYSCALL (stat64, 2, name, buf); -#if defined _HAVE_STAT64___ST_INO && !__ASSUME_ST_INO_64_BIT - if (__builtin_expect (!result, 1) && buf->__st_ino != (__ino_t) buf->st_ino) - buf->st_ino = buf->__st_ino; -#endif - return result; -} - - -#include - -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) -versioned_symbol (libc, ___xstat64, __xstat64, GLIBC_2_2); -strong_alias (___xstat64, __old__xstat64) -compat_symbol (libc, __old__xstat64, __xstat64, GLIBC_2_1); -hidden_ver (___xstat64, __xstat64) -#else -strong_alias (___xstat64, __xstat64) -hidden_def (__xstat64) -#endif diff --git a/sysdeps/unix/sysv/linux/xstatconv.c b/sysdeps/unix/sysv/linux/xstatconv.c deleted file mode 100644 index e307827b97..0000000000 --- a/sysdeps/unix/sysv/linux/xstatconv.c +++ /dev/null @@ -1,270 +0,0 @@ -/* Convert between the kernel's `struct stat' format, and libc's. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#ifdef STAT_IS_KERNEL_STAT - -/* Dummy. */ -struct kernel_stat; - -#else - -#include - - -#if XSTAT_IS_XSTAT64 -int -__xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf) -{ - switch (vers) - { - case _STAT_VER_KERNEL: - /* Nothing to do. The struct is in the form the kernel expects. - We should have short-circuted before we got here, but for - completeness... */ - *(struct kernel_stat *) ubuf = *kbuf; - break; - - case _STAT_VER_LINUX: - { - struct stat *buf = ubuf; - - /* Convert to current kernel version of `struct stat'. */ - buf->st_dev = kbuf->st_dev; -#ifdef _HAVE_STAT___PAD1 - buf->__pad1 = 0; -#endif - buf->st_ino = kbuf->st_ino; - buf->st_mode = kbuf->st_mode; - buf->st_nlink = kbuf->st_nlink; - buf->st_uid = kbuf->st_uid; - buf->st_gid = kbuf->st_gid; - buf->st_rdev = kbuf->st_rdev; -#ifdef _HAVE_STAT___PAD2 - buf->__pad2 = 0; -#endif - buf->st_size = kbuf->st_size; - buf->st_blksize = kbuf->st_blksize; - buf->st_blocks = kbuf->st_blocks; -#ifdef _HAVE_STAT_NSEC - buf->st_atim.tv_sec = kbuf->st_atim.tv_sec; - buf->st_atim.tv_nsec = kbuf->st_atim.tv_nsec; - buf->st_mtim.tv_sec = kbuf->st_mtim.tv_sec; - buf->st_mtim.tv_nsec = kbuf->st_mtim.tv_nsec; - buf->st_ctim.tv_sec = kbuf->st_ctim.tv_sec; - buf->st_ctim.tv_nsec = kbuf->st_ctim.tv_nsec; -#else - buf->st_atime = kbuf->st_atime; - buf->st_mtime = kbuf->st_mtime; - buf->st_ctime = kbuf->st_ctime; -#endif -#ifdef _HAVE_STAT___UNUSED1 - buf->__glibc_reserved1 = 0; -#endif -#ifdef _HAVE_STAT___UNUSED2 - buf->__glibc_reserved2 = 0; -#endif -#ifdef _HAVE_STAT___UNUSED3 - buf->__glibc_reserved3 = 0; -#endif -#ifdef _HAVE_STAT___UNUSED4 - buf->__glibc_reserved4 = 0; -#endif -#ifdef _HAVE_STAT___UNUSED5 - buf->__glibc_reserved5 = 0; -#endif - } - break; - - default: - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - } - - return 0; -} -#endif - -int -__xstat64_conv (int vers, struct kernel_stat *kbuf, void *ubuf) -{ -#if XSTAT_IS_XSTAT64 - return __xstat_conv (vers, kbuf, ubuf); -#else - switch (vers) - { - case _STAT_VER_LINUX: - { - struct stat64 *buf = ubuf; - - /* Convert to current kernel version of `struct stat64'. */ - buf->st_dev = kbuf->st_dev; -#ifdef _HAVE_STAT64___PAD1 - buf->__pad1 = 0; -#endif - buf->st_ino = kbuf->st_ino; -#ifdef _HAVE_STAT64___ST_INO - buf->__st_ino = kbuf->st_ino; -#endif - buf->st_mode = kbuf->st_mode; - buf->st_nlink = kbuf->st_nlink; - buf->st_uid = kbuf->st_uid; - buf->st_gid = kbuf->st_gid; - buf->st_rdev = kbuf->st_rdev; -#ifdef _HAVE_STAT64___PAD2 - buf->__pad2 = 0; -#endif - buf->st_size = kbuf->st_size; - buf->st_blksize = kbuf->st_blksize; - buf->st_blocks = kbuf->st_blocks; -#ifdef _HAVE_STAT64_NSEC - buf->st_atim.tv_sec = kbuf->st_atim.tv_sec; - buf->st_atim.tv_nsec = kbuf->st_atim.tv_nsec; - buf->st_mtim.tv_sec = kbuf->st_mtim.tv_sec; - buf->st_mtim.tv_nsec = kbuf->st_mtim.tv_nsec; - buf->st_ctim.tv_sec = kbuf->st_ctim.tv_sec; - buf->st_ctim.tv_nsec = kbuf->st_ctim.tv_nsec; -#else - buf->st_atime = kbuf->st_atime; - buf->st_mtime = kbuf->st_mtime; - buf->st_ctime = kbuf->st_ctime; -#endif -#ifdef _HAVE_STAT64___UNUSED1 - buf->__glibc_reserved1 = 0; -#endif -#ifdef _HAVE_STAT64___UNUSED2 - buf->__glibc_reserved2 = 0; -#endif -#ifdef _HAVE_STAT64___UNUSED3 - buf->__glibc_reserved3 = 0; -#endif -#ifdef _HAVE_STAT64___UNUSED4 - buf->__glibc_reserved4 = 0; -#endif -#ifdef _HAVE_STAT64___UNUSED5 - buf->__glibc_reserved5 = 0; -#endif - } - break; - - /* If struct stat64 is different from struct stat then - _STAT_VER_KERNEL does not make sense. */ - case _STAT_VER_KERNEL: - default: - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - } - - return 0; -#endif -} - -int -__xstat32_conv (int vers, struct stat64 *kbuf, struct stat *buf) -{ - switch (vers) - { - case _STAT_VER_LINUX: - { - /* Convert current kernel version of `struct stat64' to - `struct stat'. */ - buf->st_dev = kbuf->st_dev; -#ifdef _HAVE_STAT___PAD1 - buf->__pad1 = 0; -#endif -#ifdef _HAVE_STAT64___ST_INO -# if !__ASSUME_ST_INO_64_BIT - if (kbuf->st_ino == 0) - buf->st_ino = kbuf->__st_ino; - else -# endif - { - buf->st_ino = kbuf->st_ino; - if (sizeof (buf->st_ino) != sizeof (kbuf->st_ino) - && buf->st_ino != kbuf->st_ino) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EOVERFLOW); - } -#else - buf->st_ino = kbuf->st_ino; - if (sizeof (buf->st_ino) != sizeof (kbuf->st_ino) - && buf->st_ino != kbuf->st_ino) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EOVERFLOW); -#endif - buf->st_mode = kbuf->st_mode; - buf->st_nlink = kbuf->st_nlink; - buf->st_uid = kbuf->st_uid; - buf->st_gid = kbuf->st_gid; - buf->st_rdev = kbuf->st_rdev; -#ifdef _HAVE_STAT___PAD2 - buf->__pad2 = 0; -#endif - buf->st_size = kbuf->st_size; - /* Check for overflow. */ - if (sizeof (buf->st_size) != sizeof (kbuf->st_size) - && buf->st_size != kbuf->st_size) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EOVERFLOW); - buf->st_blksize = kbuf->st_blksize; - buf->st_blocks = kbuf->st_blocks; - /* Check for overflow. */ - if (sizeof (buf->st_blocks) != sizeof (kbuf->st_blocks) - && buf->st_blocks != kbuf->st_blocks) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EOVERFLOW); -#ifdef _HAVE_STAT_NSEC - buf->st_atim.tv_sec = kbuf->st_atim.tv_sec; - buf->st_atim.tv_nsec = kbuf->st_atim.tv_nsec; - buf->st_mtim.tv_sec = kbuf->st_mtim.tv_sec; - buf->st_mtim.tv_nsec = kbuf->st_mtim.tv_nsec; - buf->st_ctim.tv_sec = kbuf->st_ctim.tv_sec; - buf->st_ctim.tv_nsec = kbuf->st_ctim.tv_nsec; -#else - buf->st_atime = kbuf->st_atime; - buf->st_mtime = kbuf->st_mtime; - buf->st_ctime = kbuf->st_ctime; -#endif - -#ifdef _HAVE_STAT___UNUSED1 - buf->__glibc_reserved1 = 0; -#endif -#ifdef _HAVE_STAT___UNUSED2 - buf->__glibc_reserved2 = 0; -#endif -#ifdef _HAVE_STAT___UNUSED3 - buf->__glibc_reserved3 = 0; -#endif -#ifdef _HAVE_STAT___UNUSED4 - buf->__glibc_reserved4 = 0; -#endif -#ifdef _HAVE_STAT___UNUSED5 - buf->__glibc_reserved5 = 0; -#endif - } - break; - - /* If struct stat64 is different from struct stat then - _STAT_VER_KERNEL does not make sense. */ - case _STAT_VER_KERNEL: - default: - return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); - } - - return 0; -} - -#endif diff --git a/sysdeps/unix/sysv/linux/xstatconv.h b/sysdeps/unix/sysv/linux/xstatconv.h deleted file mode 100644 index b9e39ab71f..0000000000 --- a/sysdeps/unix/sysv/linux/xstatconv.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Convert between the kernel's `struct stat' format, and libc's. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef STAT_IS_KERNEL_STAT -extern int __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf) - attribute_hidden; -extern int __xstat64_conv (int vers, struct kernel_stat *kbuf, void *ubuf) - attribute_hidden; -#endif -extern int __xstat32_conv (int vers, struct stat64 *kbuf, struct stat *buf) - attribute_hidden; diff --git a/sysdeps/unix/x86_64/sysdep.S b/sysdeps/unix/x86_64/sysdep.S deleted file mode 100644 index 007b2e3761..0000000000 --- a/sysdeps/unix/x86_64/sysdep.S +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H -#include -#include - -#if IS_IN (rtld) -# include /* Defines RTLD_PRIVATE_ERRNO. */ -#endif - -.globl C_SYMBOL_NAME(errno) -.globl syscall_error - -__syscall_error: -#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN - /* We translate the system's EWOULDBLOCK error into EAGAIN. - The GNU C library always defines EWOULDBLOCK==EAGAIN. - EWOULDBLOCK_sys is the original number. */ - cmp $EWOULDBLOCK_sys, %RAX_LP /* Is it the old EWOULDBLOCK? */ - jne notb /* Branch if not. */ - movl $EAGAIN, %eax /* Yes; translate it to EAGAIN. */ -notb: -#endif -#ifdef PIC - movq C_SYMBOL_NAME(errno@GOTTPOFF)(%rip), %rcx - movl %eax, %fs:0(%rcx) -#else - movl %eax, %fs:C_SYMBOL_NAME(errno@TPOFF) -#endif - or $-1, %RAX_LP - ret - -#undef __syscall_error -END (__syscall_error) diff --git a/sysdeps/unix/x86_64/sysdep.h b/sysdeps/unix/x86_64/sysdep.h deleted file mode 100644 index c89f791c95..0000000000 --- a/sysdeps/unix/x86_64/sysdep.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifdef __ASSEMBLER__ - -/* This is defined as a separate macro so that other sysdep.h files - can include this one and then redefine DO_CALL. */ - -#define DO_CALL(syscall_name, args) \ - lea SYS_ify (syscall_name), %rax; \ - syscall - -#define r0 %rax /* Normal return-value register. */ -#define r1 %rbx /* Secondary return-value register. */ -#define MOVE(x,y) movq x, y - -#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/wordsize-32/Versions b/sysdeps/wordsize-32/Versions deleted file mode 100644 index e950290065..0000000000 --- a/sysdeps/wordsize-32/Versions +++ /dev/null @@ -1,7 +0,0 @@ -libc { - GLIBC_2.3 { - # These were erroneously omitted for 64-bit platforms in 2.3 - # and so we don't put them in locale/Versions. - strtoll_l; strtoull_l; - } -} diff --git a/sysdeps/wordsize-32/bits/wordsize.h b/sysdeps/wordsize-32/bits/wordsize.h deleted file mode 100644 index 9a5b072daa..0000000000 --- a/sysdeps/wordsize-32/bits/wordsize.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __WORDSIZE 32 -#define __WORDSIZE_TIME64_COMPAT32 0 -#define __WORDSIZE32_SIZE_ULONG 0 -#define __WORDSIZE32_PTRDIFF_LONG 0 diff --git a/sysdeps/wordsize-32/divdi3-symbol-hacks.h b/sysdeps/wordsize-32/divdi3-symbol-hacks.h deleted file mode 100644 index 6c90cb796d..0000000000 --- a/sysdeps/wordsize-32/divdi3-symbol-hacks.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Hacks needed for divdi3 symbol manipulation. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* A very dirty trick: gcc emits references to __divdi3, __udivdi3, - __moddi3, and __umoddi3. These functions are exported and - therefore we get PLTs. Unnecessarily so. Changing gcc is a big - task which might not be worth it so we play tricks with the - assembler. - Note: in_divdi3_c is only used to avoid symbol alias on divdi3 - build itself. */ -#if !defined __ASSEMBLER__ && !defined in_divdi3_c && IS_IN (libc) && defined SHARED -asm ("__divdi3 = __divdi3_internal"); -asm ("__udivdi3 = __udivdi3_internal"); -asm ("__moddi3 = __moddi3_internal"); -asm ("__umoddi3 = __umoddi3_internal"); -#endif diff --git a/sysdeps/wordsize-32/divdi3.c b/sysdeps/wordsize-32/divdi3.c deleted file mode 100644 index 03de8215f9..0000000000 --- a/sysdeps/wordsize-32/divdi3.c +++ /dev/null @@ -1,342 +0,0 @@ -/* 64-bit multiplication and division - Copyright (C) 1989, 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#if __WORDSIZE != 32 -#error This is for 32-bit targets only -#endif - -typedef unsigned int UQItype __attribute__ ((mode (QI))); -typedef int SItype __attribute__ ((mode (SI))); -typedef unsigned int USItype __attribute__ ((mode (SI))); -typedef int DItype __attribute__ ((mode (DI))); -typedef unsigned int UDItype __attribute__ ((mode (DI))); -#define Wtype SItype -#define HWtype SItype -#define DWtype DItype -#define UWtype USItype -#define UHWtype USItype -#define UDWtype UDItype -#define W_TYPE_SIZE 32 - -#include - -#if __BYTE_ORDER == __BIG_ENDIAN -struct DWstruct { Wtype high, low;}; -#elif __BYTE_ORDER == __LITTLE_ENDIAN -struct DWstruct { Wtype low, high;}; -#else -#error Unhandled endianity -#endif -typedef union { struct DWstruct s; DWtype ll; } DWunion; - -/* Prototypes of exported functions. */ -extern DWtype __divdi3 (DWtype u, DWtype v); -extern DWtype __moddi3 (DWtype u, DWtype v); -extern UDWtype __udivdi3 (UDWtype u, UDWtype v); -extern UDWtype __umoddi3 (UDWtype u, UDWtype v); - -static UDWtype -__udivmoddi4 (UDWtype n, UDWtype d, UDWtype *rp) -{ - DWunion ww; - DWunion nn, dd; - DWunion rr; - UWtype d0, d1, n0, n1, n2; - UWtype q0, q1; - UWtype b, bm; - - nn.ll = n; - dd.ll = d; - - d0 = dd.s.low; - d1 = dd.s.high; - n0 = nn.s.low; - n1 = nn.s.high; - -#if !UDIV_NEEDS_NORMALIZATION - if (d1 == 0) - { - if (d0 > n1) - { - /* 0q = nn / 0D */ - - udiv_qrnnd (q0, n0, n1, n0, d0); - q1 = 0; - - /* Remainder in n0. */ - } - else - { - /* qq = NN / 0d */ - - if (d0 == 0) - d0 = 1 / d0; /* Divide intentionally by zero. */ - - udiv_qrnnd (q1, n1, 0, n1, d0); - udiv_qrnnd (q0, n0, n1, n0, d0); - - /* Remainder in n0. */ - } - - if (rp != 0) - { - rr.s.low = n0; - rr.s.high = 0; - *rp = rr.ll; - } - } - -#else /* UDIV_NEEDS_NORMALIZATION */ - - if (d1 == 0) - { - if (d0 > n1) - { - /* 0q = nn / 0D */ - - count_leading_zeros (bm, d0); - - if (bm != 0) - { - /* Normalize, i.e. make the most significant bit of the - denominator set. */ - - d0 = d0 << bm; - n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); - n0 = n0 << bm; - } - - udiv_qrnnd (q0, n0, n1, n0, d0); - q1 = 0; - - /* Remainder in n0 >> bm. */ - } - else - { - /* qq = NN / 0d */ - - if (d0 == 0) - d0 = 1 / d0; /* Divide intentionally by zero. */ - - count_leading_zeros (bm, d0); - - if (bm == 0) - { - /* From (n1 >= d0) /\ (the most significant bit of d0 is set), - conclude (the most significant bit of n1 is set) /\ (the - leading quotient digit q1 = 1). - - This special case is necessary, not an optimization. - (Shifts counts of W_TYPE_SIZE are undefined.) */ - - n1 -= d0; - q1 = 1; - } - else - { - /* Normalize. */ - - b = W_TYPE_SIZE - bm; - - d0 = d0 << bm; - n2 = n1 >> b; - n1 = (n1 << bm) | (n0 >> b); - n0 = n0 << bm; - - udiv_qrnnd (q1, n1, n2, n1, d0); - } - - /* n1 != d0... */ - - udiv_qrnnd (q0, n0, n1, n0, d0); - - /* Remainder in n0 >> bm. */ - } - - if (rp != 0) - { - rr.s.low = n0 >> bm; - rr.s.high = 0; - *rp = rr.ll; - } - } -#endif /* UDIV_NEEDS_NORMALIZATION */ - - else - { - if (d1 > n1) - { - /* 00 = nn / DD */ - - q0 = 0; - q1 = 0; - - /* Remainder in n1n0. */ - if (rp != 0) - { - rr.s.low = n0; - rr.s.high = n1; - *rp = rr.ll; - } - } - else - { - /* 0q = NN / dd */ - - count_leading_zeros (bm, d1); - if (bm == 0) - { - /* From (n1 >= d1) /\ (the most significant bit of d1 is set), - conclude (the most significant bit of n1 is set) /\ (the - quotient digit q0 = 0 or 1). - - This special case is necessary, not an optimization. */ - - /* The condition on the next line takes advantage of that - n1 >= d1 (true due to program flow). */ - if (n1 > d1 || n0 >= d0) - { - q0 = 1; - sub_ddmmss (n1, n0, n1, n0, d1, d0); - } - else - q0 = 0; - - q1 = 0; - - if (rp != 0) - { - rr.s.low = n0; - rr.s.high = n1; - *rp = rr.ll; - } - } - else - { - UWtype m1, m0; - /* Normalize. */ - - b = W_TYPE_SIZE - bm; - - d1 = (d1 << bm) | (d0 >> b); - d0 = d0 << bm; - n2 = n1 >> b; - n1 = (n1 << bm) | (n0 >> b); - n0 = n0 << bm; - - udiv_qrnnd (q0, n1, n2, n1, d1); - umul_ppmm (m1, m0, q0, d0); - - if (m1 > n1 || (m1 == n1 && m0 > n0)) - { - q0--; - sub_ddmmss (m1, m0, m1, m0, d1, d0); - } - - q1 = 0; - - /* Remainder in (n1n0 - m1m0) >> bm. */ - if (rp != 0) - { - sub_ddmmss (n1, n0, n1, n0, m1, m0); - rr.s.low = (n1 << b) | (n0 >> bm); - rr.s.high = n1 >> bm; - *rp = rr.ll; - } - } - } - } - - ww.s.low = q0; - ww.s.high = q1; - return ww.ll; -} - -DWtype -__divdi3 (DWtype u, DWtype v) -{ - Wtype c = 0; - DWtype w; - - if (u < 0) - { - c = ~c; - u = -u; - } - if (v < 0) - { - c = ~c; - v = -v; - } - w = __udivmoddi4 (u, v, NULL); - if (c) - w = -w; - return w; -} -strong_alias (__divdi3, __divdi3_internal) - -DWtype -__moddi3 (DWtype u, DWtype v) -{ - Wtype c = 0; - DWtype w; - - if (u < 0) - { - c = ~c; - u = -u; - } - if (v < 0) - v = -v; - __udivmoddi4 (u, v, (UDWtype *) &w); - if (c) - w = -w; - return w; -} -strong_alias (__moddi3, __moddi3_internal) - -UDWtype -__udivdi3 (UDWtype u, UDWtype v) -{ - return __udivmoddi4 (u, v, NULL); -} -strong_alias (__udivdi3, __udivdi3_internal) - -UDWtype -__umoddi3 (UDWtype u, UDWtype v) -{ - UDWtype w; - - __udivmoddi4 (u, v, &w); - return w; -} -strong_alias (__umoddi3, __umoddi3_internal) - -/* We declare these with compat_symbol so that they are not visible at - link time. Programs must use the functions from libgcc. */ -#ifdef SHARED -# include -compat_symbol (libc, __divdi3, __divdi3, GLIBC_2_0); -compat_symbol (libc, __moddi3, __moddi3, GLIBC_2_0); -compat_symbol (libc, __udivdi3, __udivdi3, GLIBC_2_0); -compat_symbol (libc, __umoddi3, __umoddi3, GLIBC_2_0); -#endif diff --git a/sysdeps/wordsize-32/llabs.c b/sysdeps/wordsize-32/llabs.c deleted file mode 100644 index ef4d4875a2..0000000000 --- a/sysdeps/wordsize-32/llabs.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - -weak_alias (llabs, imaxabs) diff --git a/sysdeps/wordsize-32/lldiv.c b/sysdeps/wordsize-32/lldiv.c deleted file mode 100644 index 81465aa43c..0000000000 --- a/sysdeps/wordsize-32/lldiv.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ugly trick ahead to make the alias work. */ -#define imaxdiv __libc_imaxdiv - -#include - -#include - -#undef imaxdiv -weak_alias (lldiv, imaxdiv) diff --git a/sysdeps/wordsize-32/strtoimax.c b/sysdeps/wordsize-32/strtoimax.c deleted file mode 100644 index eb01a46dc1..0000000000 --- a/sysdeps/wordsize-32/strtoimax.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Convert string to maximal integer. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -intmax_t -strtoimax (const char *__restrict nptr, char **__restrict endptr, int base) -{ - return __strtoll_internal (nptr, endptr, base, 0); -} diff --git a/sysdeps/wordsize-32/strtoumax.c b/sysdeps/wordsize-32/strtoumax.c deleted file mode 100644 index bd3b94125b..0000000000 --- a/sysdeps/wordsize-32/strtoumax.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Convert string to maximal unsigned integer. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -uintmax_t -strtoumax (const char *__restrict nptr, char **__restrict endptr, int base) -{ - return __strtoull_internal (nptr, endptr, base, 0); -} diff --git a/sysdeps/wordsize-32/wcstoimax.c b/sysdeps/wordsize-32/wcstoimax.c deleted file mode 100644 index de1273181c..0000000000 --- a/sysdeps/wordsize-32/wcstoimax.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Convert wide-character string to maximal integer. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -intmax_t -wcstoimax (const wchar_t *__restrict nptr, wchar_t **__restrict endptr, - int base) -{ - return __wcstoll_internal (nptr, endptr, base, 0); -} diff --git a/sysdeps/wordsize-32/wcstoumax.c b/sysdeps/wordsize-32/wcstoumax.c deleted file mode 100644 index 57b802a954..0000000000 --- a/sysdeps/wordsize-32/wcstoumax.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Convert wide-character string to maximal unsigned integer. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -uintmax_t -wcstoumax (const wchar_t *__restrict nptr, wchar_t **__restrict endptr, - int base) -{ - return __wcstoull_internal (nptr, endptr, base, 0); -} diff --git a/sysdeps/wordsize-64/Makefile b/sysdeps/wordsize-64/Makefile deleted file mode 100644 index 2fa934751f..0000000000 --- a/sysdeps/wordsize-64/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),misc) -tests += tst-writev -endif diff --git a/sysdeps/wordsize-64/Versions b/sysdeps/wordsize-64/Versions deleted file mode 100644 index 0d13186ace..0000000000 --- a/sysdeps/wordsize-64/Versions +++ /dev/null @@ -1,6 +0,0 @@ -libc { - GLIBC_2.3.3 { - # These were erroneously omitted for 64-bit platforms in 2.3. - strtoll_l; strtoull_l; - } -} diff --git a/sysdeps/wordsize-64/bits/wordsize.h b/sysdeps/wordsize-64/bits/wordsize.h deleted file mode 100644 index 069fb52cb9..0000000000 --- a/sysdeps/wordsize-64/bits/wordsize.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define __WORDSIZE 64 -#define __WORDSIZE_TIME64_COMPAT32 0 diff --git a/sysdeps/wordsize-64/fts.c b/sysdeps/wordsize-64/fts.c deleted file mode 100644 index 159dc1febe..0000000000 --- a/sysdeps/wordsize-64/fts.c +++ /dev/null @@ -1,19 +0,0 @@ -#define fts64_open __rename_fts64_open -#define fts64_close __rename_fts64_close -#define fts64_read __rename_fts64_read -#define fts64_set __rename_fts64_set -#define fts64_children __rename_fts64_children - -#include "../../io/fts.c" - -#undef fts64_open -#undef fts64_close -#undef fts64_read -#undef fts64_set -#undef fts64_children - -weak_alias (fts_open, fts64_open) -weak_alias (fts_close, fts64_close) -weak_alias (fts_read, fts64_read) -weak_alias (fts_set, fts64_set) -weak_alias (fts_children, fts64_children) diff --git a/sysdeps/wordsize-64/fts64.c b/sysdeps/wordsize-64/fts64.c deleted file mode 100644 index f2848fc3e4..0000000000 --- a/sysdeps/wordsize-64/fts64.c +++ /dev/null @@ -1 +0,0 @@ -/* Defined in fts.c. */ diff --git a/sysdeps/wordsize-64/ftw.c b/sysdeps/wordsize-64/ftw.c deleted file mode 100644 index ca19903799..0000000000 --- a/sysdeps/wordsize-64/ftw.c +++ /dev/null @@ -1,16 +0,0 @@ -#define ftw64 __rename_ftw64 -#define nftw64 __rename_nftw64 - -#include "../../io/ftw.c" - -#undef ftw64 -#undef nftw64 - -weak_alias (ftw, ftw64) -strong_alias (__new_nftw, __new_nftw64) -versioned_symbol (libc, __new_nftw64, nftw64, GLIBC_2_3_3); - -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_3_3) -strong_alias (__old_nftw, __old_nftw64) -compat_symbol (libc, __old_nftw64, nftw64, GLIBC_2_1); -#endif diff --git a/sysdeps/wordsize-64/ftw64.c b/sysdeps/wordsize-64/ftw64.c deleted file mode 100644 index 1cfcaadfd1..0000000000 --- a/sysdeps/wordsize-64/ftw64.c +++ /dev/null @@ -1 +0,0 @@ -/* Defined in ftw.c. */ diff --git a/sysdeps/wordsize-64/glob.c b/sysdeps/wordsize-64/glob.c deleted file mode 100644 index 082faf1c70..0000000000 --- a/sysdeps/wordsize-64/glob.c +++ /dev/null @@ -1,8 +0,0 @@ -#define glob64 __no_glob64_decl -#define globfree64 __no_globfree64_decl -#include -#undef glob64 -#undef globfree64 -weak_alias (glob, glob64) -weak_alias (globfree, globfree64) -libc_hidden_ver (globfree, globfree64) diff --git a/sysdeps/wordsize-64/glob64.c b/sysdeps/wordsize-64/glob64.c deleted file mode 100644 index 33918ea6a5..0000000000 --- a/sysdeps/wordsize-64/glob64.c +++ /dev/null @@ -1 +0,0 @@ -/* glob64 is in glob.c */ diff --git a/sysdeps/wordsize-64/labs.c b/sysdeps/wordsize-64/labs.c deleted file mode 100644 index bcd717ee67..0000000000 --- a/sysdeps/wordsize-64/labs.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - -weak_alias (labs, imaxabs) diff --git a/sysdeps/wordsize-64/ldiv.c b/sysdeps/wordsize-64/ldiv.c deleted file mode 100644 index 66cef8fa29..0000000000 --- a/sysdeps/wordsize-64/ldiv.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Ugly trick ahead to make the alias work. */ -#define imaxdiv __libc_imaxdiv - -#include - -#include - -#undef imaxdiv -weak_alias (ldiv, imaxdiv) diff --git a/sysdeps/wordsize-64/strtoimax.c b/sysdeps/wordsize-64/strtoimax.c deleted file mode 100644 index 4544f6db7e..0000000000 --- a/sysdeps/wordsize-64/strtoimax.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Convert string to maximal integer. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -intmax_t -strtoimax (const char *__restrict nptr, char **__restrict endptr, int base) -{ - return __strtol_internal (nptr, endptr, base, 0); -} diff --git a/sysdeps/wordsize-64/strtol.c b/sysdeps/wordsize-64/strtol.c deleted file mode 100644 index ac17bbe4c8..0000000000 --- a/sysdeps/wordsize-64/strtol.c +++ /dev/null @@ -1,16 +0,0 @@ -/* We have to irritate the compiler a bit. */ -#define __strtoll_internal __strtoll_internal_XXX -#define strtoll strtoll_XXX -#define strtoq strtoq_XXX - -#include - -#undef __strtoll_internal -#undef strtoll -#undef strtoq -strong_alias (__strtol_internal, __strtoll_internal) -libc_hidden_ver (__strtol_internal, __strtoll_internal) -weak_alias (strtol, strtoll) -libc_hidden_ver (strtol, strtoll) -weak_alias (strtol, strtoq) -libc_hidden_ver (strtol, strtoq) diff --git a/sysdeps/wordsize-64/strtol_l.c b/sysdeps/wordsize-64/strtol_l.c deleted file mode 100644 index b2cd102add..0000000000 --- a/sysdeps/wordsize-64/strtol_l.c +++ /dev/null @@ -1,14 +0,0 @@ -/* We have to irritate the compiler a bit. */ -#define ____strtoll_l_internal ____strtoll_l_internal_XXX -#define __strtoll_l __strtoll_l_XXX -#define strtoll_l strtoll_l_XXX - -#include - -#undef ____strtoll_l_internal -#undef __strtoll_l -#undef strtoll_l -strong_alias (____strtol_l_internal, ____strtoll_l_internal) -libc_hidden_ver (____strtol_l_internal, ____strtoll_l_internal) -weak_alias (__strtol_l, __strtoll_l) -weak_alias (__strtol_l, strtoll_l) diff --git a/sysdeps/wordsize-64/strtoll.c b/sysdeps/wordsize-64/strtoll.c deleted file mode 100644 index c943e6af34..0000000000 --- a/sysdeps/wordsize-64/strtoll.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed, it's the same as strtol. */ diff --git a/sysdeps/wordsize-64/strtoll_l.c b/sysdeps/wordsize-64/strtoll_l.c deleted file mode 100644 index 5a5d0d0c6b..0000000000 --- a/sysdeps/wordsize-64/strtoll_l.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed, it's the same as __strtol_l. */ diff --git a/sysdeps/wordsize-64/strtoul.c b/sysdeps/wordsize-64/strtoul.c deleted file mode 100644 index 401882ce0d..0000000000 --- a/sysdeps/wordsize-64/strtoul.c +++ /dev/null @@ -1,14 +0,0 @@ -/* We have to irritate the compiler a bit. */ -#define __strtoull_internal __strtoull_internal_XXX -#define strtoull strtoull_XXX -#define strtouq strtouq_XXX - -#include - -#undef __strtoull_internal -#undef strtoull -#undef strtouq -strong_alias (__strtoul_internal, __strtoull_internal) -libc_hidden_ver (__strtoul_internal, __strtoull_internal) -weak_alias (strtoul, strtoull) -weak_alias (strtoul, strtouq) diff --git a/sysdeps/wordsize-64/strtoul_l.c b/sysdeps/wordsize-64/strtoul_l.c deleted file mode 100644 index 80cca332b1..0000000000 --- a/sysdeps/wordsize-64/strtoul_l.c +++ /dev/null @@ -1,14 +0,0 @@ -/* We have to irritate the compiler a bit. */ -#define ____strtoull_l_internal ____strtoull_l_internal_XXX -#define __strtoull_l __strtoull_l_XXX -#define strtoull_l strtoull_l_XXX - -#include - -#undef ____strtoull_l_internal -#undef __strtoull_l -#undef strtoull_l -strong_alias (____strtoul_l_internal, ____strtoull_l_internal) -libc_hidden_ver (____strtoul_l_internal, ____strtoull_l_internal) -weak_alias (__strtoul_l, __strtoull_l) -weak_alias (__strtoul_l, strtoull_l) diff --git a/sysdeps/wordsize-64/strtoull.c b/sysdeps/wordsize-64/strtoull.c deleted file mode 100644 index c472bde1ec..0000000000 --- a/sysdeps/wordsize-64/strtoull.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed, it's the same as strtoul. */ diff --git a/sysdeps/wordsize-64/strtoull_l.c b/sysdeps/wordsize-64/strtoull_l.c deleted file mode 100644 index c33466bb0d..0000000000 --- a/sysdeps/wordsize-64/strtoull_l.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed, it's the same as __strtoul_l. */ diff --git a/sysdeps/wordsize-64/strtoumax.c b/sysdeps/wordsize-64/strtoumax.c deleted file mode 100644 index c20816fda5..0000000000 --- a/sysdeps/wordsize-64/strtoumax.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Convert string to maximal unsigned integer. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -uintmax_t -strtoumax (const char *__restrict nptr, char **__restrict endptr, int base) -{ - return __strtoul_internal (nptr, endptr, base, 0); -} diff --git a/sysdeps/wordsize-64/tst-writev.c b/sysdeps/wordsize-64/tst-writev.c deleted file mode 100644 index bda2b3fe74..0000000000 --- a/sysdeps/wordsize-64/tst-writev.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ryan S. Arnold , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include -#include -#include - - -/* The purpose of this test is to verify that the INTERNAL_[V]SYSCALL_NCS - macros on 64-bit platforms don't cast the return type to (int) which would - erroneously sign extend the return value should the high bit of the bottom - half of the word be '1'. */ - -#if 0 -/* Used to test the non power-of-2 code path. */ -#undef IOV_MAX -#define IOV_MAX 1000 -#endif - -/* writev() should report that it has written EXPECTED number of bytes. */ -#define EXPECTED ((size_t) INT32_MAX + 1) - -static int -do_test (void) -{ - struct iovec iv[IOV_MAX]; - /* POSIX doesn't guarantee that IOV_MAX is pow of 2 but we're optimistic. */ - size_t bufsz = EXPECTED / IOV_MAX; - size_t bufrem = EXPECTED % IOV_MAX; - - /* If there's a remainder then IOV_MAX probably isn't a power of 2 and we - need to make bufsz bigger so that the last iovec, iv[IOV_MAX-1], is free - for the remainder. */ - if (bufrem) - { - bufsz = bufsz + 1; - bufrem = EXPECTED - (bufsz * (IOV_MAX - 1)); - } - - /* We writev to /dev/null since we're just testing writev's return value. */ - int fd = open (_PATH_DEVNULL, O_WRONLY); - if (fd == -1) - { - printf ("Unable to open /dev/null for writing.\n"); - return -1; - } - - iv[0].iov_base = malloc (bufsz); - if (iv[0].iov_base == NULL) - { - printf ("malloc (%zu) failed.\n", bufsz); - close (fd); - return -1; - } - iv[0].iov_len = bufsz; - - /* We optimistically presume that there isn't a remainder and set all iovec - instances to the same base and len as the first instance. */ - for (int i = 1; i < IOV_MAX; i++) - { - /* We don't care what the data is so reuse the allocation from iv[0]; */ - iv[i].iov_base = iv[0].iov_base; - iv[i].iov_len = iv[0].iov_len; - } - - /* If there is a remainder then we correct the last iov_len. */ - if (bufrem) - iv[IOV_MAX - 1].iov_len = bufrem; - - /* Write junk to /dev/null with the writev syscall in order to get a return - of INT32_MAX+1 bytes to verify that the INTERNAL_SYSCALL wrappers aren't - mangling the result if the signbit of a 32-bit number is set. */ - ssize_t ret = writev (fd, iv, IOV_MAX); - - free (iv[0].iov_base); - close (fd); - - if (ret != (ssize_t) EXPECTED) - { -#ifdef ARTIFICIAL_LIMIT - if (ret != (ssize_t) ARTIFICIAL_LIMIT) -#endif - { - printf ("writev() return value: %zd != EXPECTED: %zd\n", - ret, EXPECTED); - return 1; - } - } - - return 0; -} - -/* Time enough for a large writev syscall to complete. */ -#define TIMEOUT 20 - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/wordsize-64/wcstoimax.c b/sysdeps/wordsize-64/wcstoimax.c deleted file mode 100644 index e0b4726d47..0000000000 --- a/sysdeps/wordsize-64/wcstoimax.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Convert wide-character string to maximal integer. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -intmax_t -wcstoimax (const wchar_t *__restrict nptr, wchar_t **__restrict endptr, - int base) -{ - return __wcstol_internal (nptr, endptr, base, 0); -} diff --git a/sysdeps/wordsize-64/wcstol.c b/sysdeps/wordsize-64/wcstol.c deleted file mode 100644 index b10895a82b..0000000000 --- a/sysdeps/wordsize-64/wcstol.c +++ /dev/null @@ -1,14 +0,0 @@ -/* We have to irritate the compiler a bit. */ -#define __wcstoll_internal __wcstoll_internal_XXX -#define wcstoll wcstoll_XXX -#define wcstoq wcstoq_XXX - -#include - -#undef __wcstoll_internal -#undef wcstoll -#undef wcstoq -strong_alias (__wcstol_internal, __wcstoll_internal) -libc_hidden_ver (__wcstol_internal, __wcstoll_internal) -weak_alias (wcstol, wcstoll) -weak_alias (wcstol, wcstoq) diff --git a/sysdeps/wordsize-64/wcstol_l.c b/sysdeps/wordsize-64/wcstol_l.c deleted file mode 100644 index 4f48f60c65..0000000000 --- a/sysdeps/wordsize-64/wcstol_l.c +++ /dev/null @@ -1,13 +0,0 @@ -/* We have to irritate the compiler a bit. */ -#define ____wcstoll_l_internal ____wcstoll_l_internal_XXX -#define __wcstoll_l ___wcstoll_l_XXX -#define wcstoll_l __wcstoll_l_XX - -#include - -#undef ____wcstoll_l_internal -#undef __wcstoll_l -#undef wcstoll_l -strong_alias (____wcstol_l_internal, ____wcstoll_l_internal) -weak_alias (__wcstol_l, __wcstoll_l) -weak_alias (__wcstol_l, wcstoll_l) diff --git a/sysdeps/wordsize-64/wcstoll.c b/sysdeps/wordsize-64/wcstoll.c deleted file mode 100644 index 476ce3e28c..0000000000 --- a/sysdeps/wordsize-64/wcstoll.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed, it's the same as wcstol. */ diff --git a/sysdeps/wordsize-64/wcstoll_l.c b/sysdeps/wordsize-64/wcstoll_l.c deleted file mode 100644 index e47f6365f5..0000000000 --- a/sysdeps/wordsize-64/wcstoll_l.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed, it's the same as wcstol_l. */ diff --git a/sysdeps/wordsize-64/wcstoul.c b/sysdeps/wordsize-64/wcstoul.c deleted file mode 100644 index 2becb80744..0000000000 --- a/sysdeps/wordsize-64/wcstoul.c +++ /dev/null @@ -1,14 +0,0 @@ -/* We have to irritate the compiler a bit. */ -#define __wcstoull_internal __wcstoull_internal_XXX -#define wcstoull wcstoull_XXX -#define wcstouq wcstouq_XXX - -#include - -#undef __wcstoull_internal -#undef wcstoull -#undef wcstouq -strong_alias (__wcstoul_internal, __wcstoull_internal) -libc_hidden_ver (__wcstoul_internal, __wcstoull_internal) -weak_alias (wcstoul, wcstoull) -weak_alias (wcstoul, wcstouq) diff --git a/sysdeps/wordsize-64/wcstoul_l.c b/sysdeps/wordsize-64/wcstoul_l.c deleted file mode 100644 index c376fa0e81..0000000000 --- a/sysdeps/wordsize-64/wcstoul_l.c +++ /dev/null @@ -1,13 +0,0 @@ -/* We have to irritate the compiler a bit. */ -#define ____wcstoull_l_internal ____wcstoull_l_internal_XXX -#define __wcstoull_l ___wcstoull_l_XXX -#define wcstoull_l __wcstoull_l_XXX - -#include - -#undef ____wcstoull_l_internal -#undef __wcstoull_l -#undef wcstoull_l -strong_alias (____wcstoul_l_internal, ____wcstoull_l_internal) -weak_alias (__wcstoul_l, __wcstoull_l) -weak_alias (__wcstoul_l, wcstoull_l) diff --git a/sysdeps/wordsize-64/wcstoull.c b/sysdeps/wordsize-64/wcstoull.c deleted file mode 100644 index 4776c3a07d..0000000000 --- a/sysdeps/wordsize-64/wcstoull.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed, it's the same as wcstoul. */ diff --git a/sysdeps/wordsize-64/wcstoull_l.c b/sysdeps/wordsize-64/wcstoull_l.c deleted file mode 100644 index 2c9aaa0735..0000000000 --- a/sysdeps/wordsize-64/wcstoull_l.c +++ /dev/null @@ -1 +0,0 @@ -/* Not needed, it's the same as wcstoul_l. */ diff --git a/sysdeps/wordsize-64/wcstoumax.c b/sysdeps/wordsize-64/wcstoumax.c deleted file mode 100644 index 514c5e14b3..0000000000 --- a/sysdeps/wordsize-64/wcstoumax.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Convert wide-character string to maximal unsigned integer. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -uintmax_t -wcstoumax (const wchar_t *__restrict nptr, wchar_t **__restrict endptr, - int base) -{ - return __wcstoul_internal (nptr, endptr, base, 0); -} diff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile deleted file mode 100644 index 0d0326c21a..0000000000 --- a/sysdeps/x86/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -ifeq ($(subdir),csu) -gen-as-const-headers += cpu-features-offsets.sym -endif - -ifeq ($(subdir),elf) -sysdep-dl-routines += dl-get-cpu-features - -tests += tst-get-cpu-features -tests-static += tst-get-cpu-features-static -endif diff --git a/sysdeps/x86/Versions b/sysdeps/x86/Versions deleted file mode 100644 index e02923708e..0000000000 --- a/sysdeps/x86/Versions +++ /dev/null @@ -1,5 +0,0 @@ -ld { - GLIBC_PRIVATE { - __get_cpu_features; - } -} diff --git a/sysdeps/x86/bits/byteswap-16.h b/sysdeps/x86/bits/byteswap-16.h deleted file mode 100644 index bcc768709d..0000000000 --- a/sysdeps/x86/bits/byteswap-16.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Macros to swap the order of bytes in 16-bit integer values. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_BYTESWAP_H -# error "Never use directly; include instead." -#endif - -#ifdef __GNUC__ -# if __GNUC__ >= 2 -# define __bswap_16(x) \ - (__extension__ \ - ({ unsigned short int __v, __x = (unsigned short int) (x); \ - if (__builtin_constant_p (__x)) \ - __v = __bswap_constant_16 (__x); \ - else \ - __asm__ ("rorw $8, %w0" \ - : "=r" (__v) \ - : "0" (__x) \ - : "cc"); \ - __v; })) -# else -/* This is better than nothing. */ -# define __bswap_16(x) \ - (__extension__ \ - ({ unsigned short int __x = (unsigned short int) (x); \ - __bswap_constant_16 (__x); })) -# endif -#else -static __inline unsigned short int -__bswap_16 (unsigned short int __bsx) -{ - return __bswap_constant_16 (__bsx); -} -#endif diff --git a/sysdeps/x86/bits/byteswap.h b/sysdeps/x86/bits/byteswap.h deleted file mode 100644 index 5dfc5331ec..0000000000 --- a/sysdeps/x86/bits/byteswap.h +++ /dev/null @@ -1,155 +0,0 @@ -/* Macros to swap the order of bytes in integer values. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#ifndef _BITS_BYTESWAP_H -#define _BITS_BYTESWAP_H 1 - -#include -#include -#include - -/* Swap bytes in 16 bit value. */ -#define __bswap_constant_16(x) \ - ((unsigned short int) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))) - -/* Get __bswap_16. */ -#include - -/* Swap bytes in 32 bit value. */ -#define __bswap_constant_32(x) \ - ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ - (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) - -#ifdef __GNUC__ -# if __GNUC_PREREQ (4, 3) -static __inline unsigned int -__bswap_32 (unsigned int __bsx) -{ - return __builtin_bswap32 (__bsx); -} -# elif __GNUC__ >= 2 -# if __WORDSIZE == 64 || (defined __i486__ || defined __pentium__ \ - || defined __pentiumpro__ || defined __pentium4__ \ - || defined __k8__ || defined __athlon__ \ - || defined __k6__ || defined __nocona__ \ - || defined __core2__ || defined __geode__ \ - || defined __amdfam10__) -/* To swap the bytes in a word the i486 processors and up provide the - `bswap' opcode. On i386 we have to use three instructions. */ -# define __bswap_32(x) \ - (__extension__ \ - ({ unsigned int __v, __x = (x); \ - if (__builtin_constant_p (__x)) \ - __v = __bswap_constant_32 (__x); \ - else \ - __asm__ ("bswap %0" : "=r" (__v) : "0" (__x)); \ - __v; })) -# else -# define __bswap_32(x) \ - (__extension__ \ - ({ unsigned int __v, __x = (x); \ - if (__builtin_constant_p (__x)) \ - __v = __bswap_constant_32 (__x); \ - else \ - __asm__ ("rorw $8, %w0;" \ - "rorl $16, %0;" \ - "rorw $8, %w0" \ - : "=r" (__v) \ - : "0" (__x) \ - : "cc"); \ - __v; })) -# endif -# else -# define __bswap_32(x) \ - (__extension__ \ - ({ unsigned int __x = (x); __bswap_constant_32 (__x); })) -# endif -#else -static __inline unsigned int -__bswap_32 (unsigned int __bsx) -{ - return __bswap_constant_32 (__bsx); -} -#endif - - -#if __GNUC_PREREQ (2, 0) -/* Swap bytes in 64 bit value. */ -# define __bswap_constant_64(x) \ - (__extension__ ((((x) & 0xff00000000000000ull) >> 56) \ - | (((x) & 0x00ff000000000000ull) >> 40) \ - | (((x) & 0x0000ff0000000000ull) >> 24) \ - | (((x) & 0x000000ff00000000ull) >> 8) \ - | (((x) & 0x00000000ff000000ull) << 8) \ - | (((x) & 0x0000000000ff0000ull) << 24) \ - | (((x) & 0x000000000000ff00ull) << 40) \ - | (((x) & 0x00000000000000ffull) << 56))) - -# if __GNUC_PREREQ (4, 3) -static __inline __uint64_t -__bswap_64 (__uint64_t __bsx) -{ - return __builtin_bswap64 (__bsx); -} -# elif __WORDSIZE == 64 -# define __bswap_64(x) \ - (__extension__ \ - ({ __uint64_t __v, __x = (x); \ - if (__builtin_constant_p (__x)) \ - __v = __bswap_constant_64 (__x); \ - else \ - __asm__ ("bswap %q0" : "=r" (__v) : "0" (__x)); \ - __v; })) -# else -# define __bswap_64(x) \ - (__extension__ \ - ({ union { __extension__ __uint64_t __ll; \ - unsigned int __l[2]; } __w, __r; \ - if (__builtin_constant_p (x)) \ - __r.__ll = __bswap_constant_64 (x); \ - else \ - { \ - __w.__ll = (x); \ - __r.__l[0] = __bswap_32 (__w.__l[1]); \ - __r.__l[1] = __bswap_32 (__w.__l[0]); \ - } \ - __r.__ll; })) -# endif -#else -# define __bswap_constant_64(x) \ - ((((x) & 0xff00000000000000ull) >> 56) \ - | (((x) & 0x00ff000000000000ull) >> 40) \ - | (((x) & 0x0000ff0000000000ull) >> 24) \ - | (((x) & 0x000000ff00000000ull) >> 8) \ - | (((x) & 0x00000000ff000000ull) << 8) \ - | (((x) & 0x0000000000ff0000ull) << 24) \ - | (((x) & 0x000000000000ff00ull) << 40) \ - | (((x) & 0x00000000000000ffull) << 56)) - -static __inline __uint64_t -__bswap_64 (__uint64_t __bsx) -{ - return __bswap_constant_64 (__bsx); -} -#endif - -#endif /* _BITS_BYTESWAP_H */ diff --git a/sysdeps/x86/bits/endian.h b/sysdeps/x86/bits/endian.h deleted file mode 100644 index 5a56c726f7..0000000000 --- a/sysdeps/x86/bits/endian.h +++ /dev/null @@ -1,7 +0,0 @@ -/* i386/x86_64 are little-endian. */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#define __BYTE_ORDER __LITTLE_ENDIAN diff --git a/sysdeps/x86/bits/flt-eval-method.h b/sysdeps/x86/bits/flt-eval-method.h deleted file mode 100644 index 24da08eaa3..0000000000 --- a/sysdeps/x86/bits/flt-eval-method.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Define __GLIBC_FLT_EVAL_METHOD. x86 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#ifdef __FLT_EVAL_METHOD__ -# if __FLT_EVAL_METHOD__ == -1 -# define __GLIBC_FLT_EVAL_METHOD 2 -# else -# define __GLIBC_FLT_EVAL_METHOD __FLT_EVAL_METHOD__ -# endif -#elif defined __x86_64__ -# define __GLIBC_FLT_EVAL_METHOD 0 -#else -# define __GLIBC_FLT_EVAL_METHOD 2 -#endif diff --git a/sysdeps/x86/bits/fp-logb.h b/sysdeps/x86/bits/fp-logb.h deleted file mode 100644 index 8ee0bbcc3b..0000000000 --- a/sysdeps/x86/bits/fp-logb.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Define __FP_LOGB0_IS_MIN and __FP_LOGBNAN_IS_MIN. x86 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#define __FP_LOGB0_IS_MIN 1 -#define __FP_LOGBNAN_IS_MIN 1 diff --git a/sysdeps/x86/bits/huge_vall.h b/sysdeps/x86/bits/huge_vall.h deleted file mode 100644 index 9749bacc4b..0000000000 --- a/sysdeps/x86/bits/huge_vall.h +++ /dev/null @@ -1,41 +0,0 @@ -/* `HUGE_VALL' constant for ix86 (where it is infinity). - Used by and functions for overflow. - Copyright (C) 1992-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#if __GNUC_PREREQ(3,3) -# define HUGE_VALL (__builtin_huge_vall()) -#elif __GNUC_PREREQ(2,96) -# define HUGE_VALL (__extension__ 0x1.0p32767L) -#else - -# define __HUGE_VALL_bytes { 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0x7f, 0, 0 } - -# define __huge_vall_t union { unsigned char __c[12]; long double __ld; } -# ifdef __GNUC__ -# define HUGE_VALL (__extension__ \ - ((__huge_vall_t) { __c: __HUGE_VALL_bytes }).__ld) -# else /* Not GCC. */ -static __huge_vall_t __huge_vall = { __HUGE_VALL_bytes }; -# define HUGE_VALL (__huge_vall.__ld) -# endif /* GCC. */ - -#endif /* GCC 2.95 */ diff --git a/sysdeps/x86/bits/link.h b/sysdeps/x86/bits/link.h deleted file mode 100644 index d41b350639..0000000000 --- a/sysdeps/x86/bits/link.h +++ /dev/null @@ -1,159 +0,0 @@ -/* Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _LINK_H -# error "Never include directly; use instead." -#endif - - -#ifndef __x86_64__ -/* Registers for entry into PLT on IA-32. */ -typedef struct La_i86_regs -{ - uint32_t lr_edx; - uint32_t lr_ecx; - uint32_t lr_eax; - uint32_t lr_ebp; - uint32_t lr_esp; -} La_i86_regs; - -/* Return values for calls from PLT on IA-32. */ -typedef struct La_i86_retval -{ - uint32_t lrv_eax; - uint32_t lrv_edx; - long double lrv_st0; - long double lrv_st1; - uint64_t lrv_bnd0; - uint64_t lrv_bnd1; -} La_i86_retval; - - -__BEGIN_DECLS - -extern Elf32_Addr la_i86_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_i86_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_i86_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_i86_regs *__inregs, - La_i86_retval *__outregs, - const char *symname); - -__END_DECLS - -#else - -/* Registers for entry into PLT on x86-64. */ -# if __GNUC_PREREQ (4,0) -typedef float La_x86_64_xmm __attribute__ ((__vector_size__ (16))); -typedef float La_x86_64_ymm - __attribute__ ((__vector_size__ (32), __aligned__ (16))); -typedef double La_x86_64_zmm - __attribute__ ((__vector_size__ (64), __aligned__ (16))); -# else -typedef float La_x86_64_xmm __attribute__ ((__mode__ (__V4SF__))); -# endif - -typedef union -{ -# if __GNUC_PREREQ (4,0) - La_x86_64_ymm ymm[2]; - La_x86_64_zmm zmm[1]; -# endif - La_x86_64_xmm xmm[4]; -} La_x86_64_vector __attribute__ ((__aligned__ (16))); - -typedef struct La_x86_64_regs -{ - uint64_t lr_rdx; - uint64_t lr_r8; - uint64_t lr_r9; - uint64_t lr_rcx; - uint64_t lr_rsi; - uint64_t lr_rdi; - uint64_t lr_rbp; - uint64_t lr_rsp; - La_x86_64_xmm lr_xmm[8]; - La_x86_64_vector lr_vector[8]; -#ifndef __ILP32__ - __int128_t lr_bnd[4]; -#endif -} La_x86_64_regs; - -/* Return values for calls from PLT on x86-64. */ -typedef struct La_x86_64_retval -{ - uint64_t lrv_rax; - uint64_t lrv_rdx; - La_x86_64_xmm lrv_xmm0; - La_x86_64_xmm lrv_xmm1; - long double lrv_st0; - long double lrv_st1; - La_x86_64_vector lrv_vector0; - La_x86_64_vector lrv_vector1; -#ifndef __ILP32__ - __int128_t lrv_bnd0; - __int128_t lrv_bnd1; -#endif -} La_x86_64_retval; - -#define La_x32_regs La_x86_64_regs -#define La_x32_retval La_x86_64_retval - -__BEGIN_DECLS - -extern Elf64_Addr la_x86_64_gnu_pltenter (Elf64_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_x86_64_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_x86_64_gnu_pltexit (Elf64_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_x86_64_regs *__inregs, - La_x86_64_retval *__outregs, - const char *__symname); - -extern Elf32_Addr la_x32_gnu_pltenter (Elf32_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_x32_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_x32_gnu_pltexit (Elf32_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_x32_regs *__inregs, - La_x32_retval *__outregs, - const char *__symname); - -__END_DECLS - -#endif diff --git a/sysdeps/x86/bits/select.h b/sysdeps/x86/bits/select.h deleted file mode 100644 index 129de9cf02..0000000000 --- a/sysdeps/x86/bits/select.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SYS_SELECT_H -# error "Never use directly; include instead." -#endif - -#include - - -#if defined __GNUC__ && __GNUC__ >= 2 - -# if __WORDSIZE == 64 -# define __FD_ZERO_STOS "stosq" -# else -# define __FD_ZERO_STOS "stosl" -# endif - -# define __FD_ZERO(fdsp) \ - do { \ - int __d0, __d1; \ - __asm__ __volatile__ ("cld; rep; " __FD_ZERO_STOS \ - : "=c" (__d0), "=D" (__d1) \ - : "a" (0), "0" (sizeof (fd_set) \ - / sizeof (__fd_mask)), \ - "1" (&__FDS_BITS (fdsp)[0]) \ - : "memory"); \ - } while (0) - -#else /* ! GNU CC */ - -/* We don't use `memset' because this would require a prototype and - the array isn't too big. */ -# define __FD_ZERO(set) \ - do { \ - unsigned int __i; \ - fd_set *__arr = (set); \ - for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) \ - __FDS_BITS (__arr)[__i] = 0; \ - } while (0) - -#endif /* GNU CC */ - -#define __FD_SET(d, set) \ - ((void) (__FDS_BITS (set)[__FD_ELT (d)] |= __FD_MASK (d))) -#define __FD_CLR(d, set) \ - ((void) (__FDS_BITS (set)[__FD_ELT (d)] &= ~__FD_MASK (d))) -#define __FD_ISSET(d, set) \ - ((__FDS_BITS (set)[__FD_ELT (d)] & __FD_MASK (d)) != 0) diff --git a/sysdeps/x86/bits/semaphore.h b/sysdeps/x86/bits/semaphore.h deleted file mode 100644 index a498ae46da..0000000000 --- a/sysdeps/x86/bits/semaphore.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - -#include - -#if __WORDSIZE == 64 -# define __SIZEOF_SEM_T 32 -#else -# define __SIZEOF_SEM_T 16 -#endif - - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/sysdeps/x86/bits/setjmp.h b/sysdeps/x86/bits/setjmp.h deleted file mode 100644 index 4ddf9e3c6d..0000000000 --- a/sysdeps/x86/bits/setjmp.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define the machine-dependent type `jmp_buf'. x86-64 version. */ -#ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include directly; use instead." -#endif - -#include - -#ifndef _ASM - -# if __WORDSIZE == 64 -typedef long int __jmp_buf[8]; -# elif defined __x86_64__ -__extension__ typedef long long int __jmp_buf[8]; -# else -typedef int __jmp_buf[6]; -# endif - -#endif - -#endif /* bits/setjmp.h */ diff --git a/sysdeps/x86/bits/string.h b/sysdeps/x86/bits/string.h deleted file mode 100644 index 94cba8e76f..0000000000 --- a/sysdeps/x86/bits/string.h +++ /dev/null @@ -1,1996 +0,0 @@ -/* Optimized, inlined string functions. i486/x86-64 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _STRING_H -# error "Never use directly; include instead." -#endif - -/* Use the unaligned string inline ABI. */ -#define _STRING_INLINE_unaligned 1 - -/* Don't inline mempcpy into memcpy as x86 has an optimized mempcpy. */ -#define _HAVE_STRING_ARCH_mempcpy 1 - -/* Enable inline functions only for i486 or better when compiling for - ia32. */ -#if !defined __x86_64__ && (defined __i486__ || defined __pentium__ \ - || defined __pentiumpro__ || defined __pentium4__ \ - || defined __nocona__ || defined __atom__ \ - || defined __core2__ || defined __corei7__ \ - || defined __sandybridge__ || defined __haswell__ \ - || defined __bonnell__ || defined __silvermont__ \ - || defined __k6__ || defined __geode__ \ - || defined __k8__ || defined __athlon__ \ - || defined __amdfam10__ || defined __bdver1__ \ - || defined __bdver2__ || defined __bdver3__ \ - || defined __bdver4__ || defined __btver1__ \ - || defined __btver2__) - -/* We only provide optimizations if the user selects them and if - GNU CC is used. */ -# if !defined __NO_STRING_INLINES && defined __USE_STRING_INLINES \ - && defined __GNUC__ && __GNUC__ >= 2 - -# ifndef __STRING_INLINE -# ifndef __extern_inline -# define __STRING_INLINE inline -# else -# define __STRING_INLINE __extern_inline -# endif -# endif - -/* The macros are used in some of the optimized implementations below. */ -# define __STRING_SMALL_GET16(src, idx) \ - ((((const unsigned char *) (src))[idx + 1] << 8) \ - | ((const unsigned char *) (src))[idx]) -# define __STRING_SMALL_GET32(src, idx) \ - (((((const unsigned char *) (src))[idx + 3] << 8 \ - | ((const unsigned char *) (src))[idx + 2]) << 8 \ - | ((const unsigned char *) (src))[idx + 1]) << 8 \ - | ((const unsigned char *) (src))[idx]) - - -/* Copy N bytes of SRC to DEST. */ -# define _HAVE_STRING_ARCH_memcpy 1 -# define memcpy(dest, src, n) \ - (__extension__ (__builtin_constant_p (n) \ - ? __memcpy_c ((dest), (src), (n)) \ - : __memcpy_g ((dest), (src), (n)))) -# define __memcpy_c(dest, src, n) \ - ((n) == 0 \ - ? (dest) \ - : (((n) % 4 == 0) \ - ? __memcpy_by4 (dest, src, n) \ - : (((n) % 2 == 0) \ - ? __memcpy_by2 (dest, src, n) \ - : __memcpy_g (dest, src, n)))) - -__STRING_INLINE void *__memcpy_by4 (void *__dest, const void *__src, - size_t __n); - -__STRING_INLINE void * -__memcpy_by4 (void *__dest, const void *__src, size_t __n) -{ - register unsigned long int __d0, __d1; - register void *__tmp = __dest; - __asm__ __volatile__ - ("1:\n\t" - "movl (%2),%0\n\t" - "leal 4(%2),%2\n\t" - "movl %0,(%1)\n\t" - "leal 4(%1),%1\n\t" - "decl %3\n\t" - "jnz 1b" - : "=&r" (__d0), "=&r" (__tmp), "=&r" (__src), "=&r" (__d1) - : "1" (__tmp), "2" (__src), "3" (__n / 4) - : "memory", "cc"); - return __dest; -} - -__STRING_INLINE void *__memcpy_by2 (void *__dest, const void *__src, - size_t __n); - -__STRING_INLINE void * -__memcpy_by2 (void *__dest, const void *__src, size_t __n) -{ - register unsigned long int __d0, __d1; - register void *__tmp = __dest; - __asm__ __volatile__ - ("shrl $1,%3\n\t" - "jz 2f\n" /* only a word */ - "1:\n\t" - "movl (%2),%0\n\t" - "leal 4(%2),%2\n\t" - "movl %0,(%1)\n\t" - "leal 4(%1),%1\n\t" - "decl %3\n\t" - "jnz 1b\n" - "2:\n\t" - "movw (%2),%w0\n\t" - "movw %w0,(%1)" - : "=&q" (__d0), "=&r" (__tmp), "=&r" (__src), "=&r" (__d1) - : "1" (__tmp), "2" (__src), "3" (__n / 2) - : "memory", "cc"); - return __dest; -} - -__STRING_INLINE void *__memcpy_g (void *__dest, const void *__src, size_t __n); - -__STRING_INLINE void * -__memcpy_g (void *__dest, const void *__src, size_t __n) -{ - register unsigned long int __d0, __d1, __d2; - register void *__tmp = __dest; - __asm__ __volatile__ - ("cld\n\t" - "shrl $1,%%ecx\n\t" - "jnc 1f\n\t" - "movsb\n" - "1:\n\t" - "shrl $1,%%ecx\n\t" - "jnc 2f\n\t" - "movsw\n" - "2:\n\t" - "rep; movsl" - : "=&c" (__d0), "=&D" (__d1), "=&S" (__d2), - "=m" ( *(struct { __extension__ char __x[__n]; } *)__dest) - : "0" (__n), "1" (__tmp), "2" (__src), - "m" ( *(struct { __extension__ char __x[__n]; } *)__src) - : "cc"); - return __dest; -} - -# define _HAVE_STRING_ARCH_memmove 1 -# ifndef _FORCE_INLINES -/* Copy N bytes of SRC to DEST, guaranteeing - correct behavior for overlapping strings. */ -# define memmove(dest, src, n) __memmove_g (dest, src, n) - -__STRING_INLINE void *__memmove_g (void *, const void *, size_t) - __asm__ ("memmove"); - -__STRING_INLINE void * -__memmove_g (void *__dest, const void *__src, size_t __n) -{ - register unsigned long int __d0, __d1, __d2; - register void *__tmp = __dest; - if (__dest < __src) - __asm__ __volatile__ - ("cld\n\t" - "rep; movsb" - : "=&c" (__d0), "=&S" (__d1), "=&D" (__d2), - "=m" ( *(struct { __extension__ char __x[__n]; } *)__dest) - : "0" (__n), "1" (__src), "2" (__tmp), - "m" ( *(struct { __extension__ char __x[__n]; } *)__src)); - else - __asm__ __volatile__ - ("decl %1\n\t" - "decl %2\n\t" - "std\n\t" - "rep; movsb\n\t" - "cld" - : "=&c" (__d0), "=&S" (__d1), "=&D" (__d2), - "=m" ( *(struct { __extension__ char __x[__n]; } *)__dest) - : "0" (__n), "1" (__n + (const char *) __src), - "2" (__n + (char *) __tmp), - "m" ( *(struct { __extension__ char __x[__n]; } *)__src)); - return __dest; -} -# endif - -/* Compare N bytes of S1 and S2. */ -# define _HAVE_STRING_ARCH_memcmp 1 -# ifndef _FORCE_INLINES -# ifndef __PIC__ -/* gcc has problems to spill registers when using PIC. */ -__STRING_INLINE int -memcmp (const void *__s1, const void *__s2, size_t __n) -{ - register unsigned long int __d0, __d1, __d2; - register int __res; - __asm__ __volatile__ - ("cld\n\t" - "testl %3,%3\n\t" - "repe; cmpsb\n\t" - "je 1f\n\t" - "sbbl %0,%0\n\t" - "orl $1,%0\n" - "1:" - : "=&a" (__res), "=&S" (__d0), "=&D" (__d1), "=&c" (__d2) - : "0" (0), "1" (__s1), "2" (__s2), "3" (__n), - "m" ( *(struct { __extension__ char __x[__n]; } *)__s1), - "m" ( *(struct { __extension__ char __x[__n]; } *)__s2) - : "cc"); - return __res; -} -# endif -# endif - -/* Set N bytes of S to C. */ -# define _HAVE_STRING_ARCH_memset 1 -# define _USE_STRING_ARCH_memset 1 -# define memset(s, c, n) \ - (__extension__ (__builtin_constant_p (n) && (n) <= 16 \ - ? ((n) == 1 \ - ? __memset_c1 ((s), (c)) \ - : __memset_gc ((s), (c), (n))) \ - : (__builtin_constant_p (c) \ - ? (__builtin_constant_p (n) \ - ? __memset_ccn ((s), (c), (n)) \ - : memset ((s), (c), (n))) \ - : (__builtin_constant_p (n) \ - ? __memset_gcn ((s), (c), (n)) \ - : memset ((s), (c), (n)))))) - -# define __memset_c1(s, c) ({ void *__s = (s); \ - *((unsigned char *) __s) = (unsigned char) (c); \ - __s; }) - -# define __memset_gc(s, c, n) \ - ({ void *__s = (s); \ - union { \ - unsigned int __ui; \ - unsigned short int __usi; \ - unsigned char __uc; \ - } *__u = __s; \ - unsigned int __c = ((unsigned int) ((unsigned char) (c))) * 0x01010101; \ - \ - /* We apply a trick here. `gcc' would implement the following \ - assignments using immediate operands. But this uses to much \ - memory (7, instead of 4 bytes). So we force the value in a \ - registers. */ \ - if ((n) == 3 || (n) >= 5) \ - __asm__ __volatile__ ("" : "=r" (__c) : "0" (__c)); \ - \ - /* This `switch' statement will be removed at compile-time. */ \ - switch (n) \ - { \ - case 15: \ - __u->__ui = __c; \ - __u = __extension__ ((void *) __u + 4); \ - case 11: \ - __u->__ui = __c; \ - __u = __extension__ ((void *) __u + 4); \ - case 7: \ - __u->__ui = __c; \ - __u = __extension__ ((void *) __u + 4); \ - case 3: \ - __u->__usi = (unsigned short int) __c; \ - __u = __extension__ ((void *) __u + 2); \ - __u->__uc = (unsigned char) __c; \ - break; \ - \ - case 14: \ - __u->__ui = __c; \ - __u = __extension__ ((void *) __u + 4); \ - case 10: \ - __u->__ui = __c; \ - __u = __extension__ ((void *) __u + 4); \ - case 6: \ - __u->__ui = __c; \ - __u = __extension__ ((void *) __u + 4); \ - case 2: \ - __u->__usi = (unsigned short int) __c; \ - break; \ - \ - case 13: \ - __u->__ui = __c; \ - __u = __extension__ ((void *) __u + 4); \ - case 9: \ - __u->__ui = __c; \ - __u = __extension__ ((void *) __u + 4); \ - case 5: \ - __u->__ui = __c; \ - __u = __extension__ ((void *) __u + 4); \ - case 1: \ - __u->__uc = (unsigned char) __c; \ - break; \ - \ - case 16: \ - __u->__ui = __c; \ - __u = __extension__ ((void *) __u + 4); \ - case 12: \ - __u->__ui = __c; \ - __u = __extension__ ((void *) __u + 4); \ - case 8: \ - __u->__ui = __c; \ - __u = __extension__ ((void *) __u + 4); \ - case 4: \ - __u->__ui = __c; \ - case 0: \ - break; \ - } \ - \ - __s; }) - -# define __memset_ccn(s, c, n) \ - (((n) % 4 == 0) \ - ? __memset_ccn_by4 (s, ((unsigned int) ((unsigned char) (c))) * 0x01010101,\ - n) \ - : (((n) % 2 == 0) \ - ? __memset_ccn_by2 (s, \ - ((unsigned int) ((unsigned char) (c))) * 0x01010101,\ - n) \ - : memset (s, c, n))) - -__STRING_INLINE void *__memset_ccn_by4 (void *__s, unsigned int __c, - size_t __n); - -__STRING_INLINE void * -__memset_ccn_by4 (void *__s, unsigned int __c, size_t __n) -{ - register void *__tmp = __s; - register unsigned long int __d0; -# ifdef __i686__ - __asm__ __volatile__ - ("cld\n\t" - "rep; stosl" - : "=&a" (__c), "=&D" (__tmp), "=&c" (__d0), - "=m" ( *(struct { __extension__ char __x[__n]; } *)__s) - : "0" ((unsigned int) __c), "1" (__tmp), "2" (__n / 4) - : "cc"); -# else - __asm__ __volatile__ - ("1:\n\t" - "movl %0,(%1)\n\t" - "addl $4,%1\n\t" - "decl %2\n\t" - "jnz 1b\n" - : "=&r" (__c), "=&r" (__tmp), "=&r" (__d0), - "=m" ( *(struct { __extension__ char __x[__n]; } *)__s) - : "0" ((unsigned int) __c), "1" (__tmp), "2" (__n / 4) - : "cc"); -# endif - return __s; -} - -__STRING_INLINE void *__memset_ccn_by2 (void *__s, unsigned int __c, - size_t __n); - -__STRING_INLINE void * -__memset_ccn_by2 (void *__s, unsigned int __c, size_t __n) -{ - register unsigned long int __d0, __d1; - register void *__tmp = __s; -# ifdef __i686__ - __asm__ __volatile__ - ("cld\n\t" - "rep; stosl\n" - "stosw" - : "=&a" (__d0), "=&D" (__tmp), "=&c" (__d1), - "=m" ( *(struct { __extension__ char __x[__n]; } *)__s) - : "0" ((unsigned int) __c), "1" (__tmp), "2" (__n / 4) - : "cc"); -# else - __asm__ __volatile__ - ("1:\tmovl %0,(%1)\n\t" - "leal 4(%1),%1\n\t" - "decl %2\n\t" - "jnz 1b\n" - "movw %w0,(%1)" - : "=&q" (__d0), "=&r" (__tmp), "=&r" (__d1), - "=m" ( *(struct { __extension__ char __x[__n]; } *)__s) - : "0" ((unsigned int) __c), "1" (__tmp), "2" (__n / 4) - : "cc"); -#endif - return __s; -} - -# define __memset_gcn(s, c, n) \ - (((n) % 4 == 0) \ - ? __memset_gcn_by4 (s, c, n) \ - : (((n) % 2 == 0) \ - ? __memset_gcn_by2 (s, c, n) \ - : memset (s, c, n))) - -__STRING_INLINE void *__memset_gcn_by4 (void *__s, int __c, size_t __n); - -__STRING_INLINE void * -__memset_gcn_by4 (void *__s, int __c, size_t __n) -{ - register void *__tmp = __s; - register unsigned long int __d0; - __asm__ __volatile__ - ("movb %b0,%h0\n" - "pushw %w0\n\t" - "shll $16,%0\n\t" - "popw %w0\n" - "1:\n\t" - "movl %0,(%1)\n\t" - "addl $4,%1\n\t" - "decl %2\n\t" - "jnz 1b\n" - : "=&q" (__c), "=&r" (__tmp), "=&r" (__d0), - "=m" ( *(struct { __extension__ char __x[__n]; } *)__s) - : "0" ((unsigned int) __c), "1" (__tmp), "2" (__n / 4) - : "cc"); - return __s; -} - -__STRING_INLINE void *__memset_gcn_by2 (void *__s, int __c, size_t __n); - -__STRING_INLINE void * -__memset_gcn_by2 (void *__s, int __c, size_t __n) -{ - register unsigned long int __d0, __d1; - register void *__tmp = __s; - __asm__ __volatile__ - ("movb %b0,%h0\n\t" - "pushw %w0\n\t" - "shll $16,%0\n\t" - "popw %w0\n" - "1:\n\t" - "movl %0,(%1)\n\t" - "leal 4(%1),%1\n\t" - "decl %2\n\t" - "jnz 1b\n" - "movw %w0,(%1)" - : "=&q" (__d0), "=&r" (__tmp), "=&r" (__d1), - "=m" ( *(struct { __extension__ char __x[__n]; } *)__s) - : "0" ((unsigned int) __c), "1" (__tmp), "2" (__n / 4) - : "cc"); - return __s; -} - - -/* Search N bytes of S for C. */ -# define _HAVE_STRING_ARCH_memchr 1 -# ifndef _FORCE_INLINES -__STRING_INLINE void * -memchr (const void *__s, int __c, size_t __n) -{ - register unsigned long int __d0; -# ifdef __i686__ - register unsigned long int __d1; -# endif - register unsigned char *__res; - if (__n == 0) - return NULL; -# ifdef __i686__ - __asm__ __volatile__ - ("cld\n\t" - "repne; scasb\n\t" - "cmovne %2,%0" - : "=D" (__res), "=&c" (__d0), "=&r" (__d1) - : "a" (__c), "0" (__s), "1" (__n), "2" (1), - "m" ( *(struct { __extension__ char __x[__n]; } *)__s) - : "cc"); -# else - __asm__ __volatile__ - ("cld\n\t" - "repne; scasb\n\t" - "je 1f\n\t" - "movl $1,%0\n" - "1:" - : "=D" (__res), "=&c" (__d0) - : "a" (__c), "0" (__s), "1" (__n), - "m" ( *(struct { __extension__ char __x[__n]; } *)__s) - : "cc"); -# endif - return __res - 1; -} -# endif - -# define _HAVE_STRING_ARCH_memrchr 1 -# ifndef _FORCE_INLINES -__STRING_INLINE void *__memrchr (const void *__s, int __c, size_t __n); - -__STRING_INLINE void * -__memrchr (const void *__s, int __c, size_t __n) -{ - register unsigned long int __d0; -# ifdef __i686__ - register unsigned long int __d1; -# endif - register void *__res; - if (__n == 0) - return NULL; -# ifdef __i686__ - __asm__ __volatile__ - ("std\n\t" - "repne; scasb\n\t" - "cmovne %2,%0\n\t" - "cld\n\t" - "incl %0" - : "=D" (__res), "=&c" (__d0), "=&r" (__d1) - : "a" (__c), "0" (__s + __n - 1), "1" (__n), "2" (-1), - "m" ( *(struct { __extension__ char __x[__n]; } *)__s) - : "cc"); -# else - __asm__ __volatile__ - ("std\n\t" - "repne; scasb\n\t" - "je 1f\n\t" - "orl $-1,%0\n" - "1:\tcld\n\t" - "incl %0" - : "=D" (__res), "=&c" (__d0) - : "a" (__c), "0" (__s + __n - 1), "1" (__n), - "m" ( *(struct { __extension__ char __x[__n]; } *)__s) - : "cc"); -# endif - return __res; -} -# ifdef __USE_GNU -# define memrchr(s, c, n) __memrchr ((s), (c), (n)) -# endif -# endif - -/* Return pointer to C in S. */ -# define _HAVE_STRING_ARCH_rawmemchr 1 -__STRING_INLINE void *__rawmemchr (const void *__s, int __c); - -# ifndef _FORCE_INLINES -__STRING_INLINE void * -__rawmemchr (const void *__s, int __c) -{ - register unsigned long int __d0; - register unsigned char *__res; - __asm__ __volatile__ - ("cld\n\t" - "repne; scasb\n\t" - : "=D" (__res), "=&c" (__d0) - : "a" (__c), "0" (__s), "1" (0xffffffff), - "m" ( *(struct { char __x[0xfffffff]; } *)__s) - : "cc"); - return __res - 1; -} -# ifdef __USE_GNU -__STRING_INLINE void * -rawmemchr (const void *__s, int __c) -{ - return __rawmemchr (__s, __c); -} -# endif /* use GNU */ -# endif - - -/* Return the length of S. */ -# define _HAVE_STRING_ARCH_strlen 1 -# define strlen(str) \ - (__extension__ (__builtin_constant_p (str) \ - ? __builtin_strlen (str) \ - : __strlen_g (str))) -__STRING_INLINE size_t __strlen_g (const char *__str); - -__STRING_INLINE size_t -__strlen_g (const char *__str) -{ - register char __dummy; - register const char *__tmp = __str; - __asm__ __volatile__ - ("1:\n\t" - "movb (%0),%b1\n\t" - "leal 1(%0),%0\n\t" - "testb %b1,%b1\n\t" - "jne 1b" - : "=r" (__tmp), "=&q" (__dummy) - : "0" (__str), - "m" ( *(struct { char __x[0xfffffff]; } *)__str) - : "cc" ); - return __tmp - __str - 1; -} - - -/* Copy SRC to DEST. */ -# define _HAVE_STRING_ARCH_strcpy 1 -# define strcpy(dest, src) \ - (__extension__ (__builtin_constant_p (src) \ - ? (sizeof ((src)[0]) == 1 && strlen (src) + 1 <= 8 \ - ? __strcpy_a_small ((dest), (src), strlen (src) + 1) \ - : (char *) memcpy ((char *) (dest), \ - (const char *) (src), \ - strlen (src) + 1)) \ - : __strcpy_g ((dest), (src)))) - -# define __strcpy_a_small(dest, src, srclen) \ - (__extension__ ({ char *__dest = (dest); \ - union { \ - unsigned int __ui; \ - unsigned short int __usi; \ - unsigned char __uc; \ - char __c; \ - } *__u = (void *) __dest; \ - switch (srclen) \ - { \ - case 1: \ - __u->__uc = '\0'; \ - break; \ - case 2: \ - __u->__usi = __STRING_SMALL_GET16 (src, 0); \ - break; \ - case 3: \ - __u->__usi = __STRING_SMALL_GET16 (src, 0); \ - __u = __extension__ ((void *) __u + 2); \ - __u->__uc = '\0'; \ - break; \ - case 4: \ - __u->__ui = __STRING_SMALL_GET32 (src, 0); \ - break; \ - case 5: \ - __u->__ui = __STRING_SMALL_GET32 (src, 0); \ - __u = __extension__ ((void *) __u + 4); \ - __u->__uc = '\0'; \ - break; \ - case 6: \ - __u->__ui = __STRING_SMALL_GET32 (src, 0); \ - __u = __extension__ ((void *) __u + 4); \ - __u->__usi = __STRING_SMALL_GET16 (src, 4); \ - break; \ - case 7: \ - __u->__ui = __STRING_SMALL_GET32 (src, 0); \ - __u = __extension__ ((void *) __u + 4); \ - __u->__usi = __STRING_SMALL_GET16 (src, 4); \ - __u = __extension__ ((void *) __u + 2); \ - __u->__uc = '\0'; \ - break; \ - case 8: \ - __u->__ui = __STRING_SMALL_GET32 (src, 0); \ - __u = __extension__ ((void *) __u + 4); \ - __u->__ui = __STRING_SMALL_GET32 (src, 4); \ - break; \ - } \ - (char *) __dest; })) - -__STRING_INLINE char *__strcpy_g (char *__dest, const char *__src); - -__STRING_INLINE char * -__strcpy_g (char *__dest, const char *__src) -{ - register char *__tmp = __dest; - register char __dummy; - __asm__ __volatile__ - ( - "1:\n\t" - "movb (%0),%b2\n\t" - "leal 1(%0),%0\n\t" - "movb %b2,(%1)\n\t" - "leal 1(%1),%1\n\t" - "testb %b2,%b2\n\t" - "jne 1b" - : "=&r" (__src), "=&r" (__tmp), "=&q" (__dummy), - "=m" ( *(struct { char __x[0xfffffff]; } *)__dest) - : "0" (__src), "1" (__tmp), - "m" ( *(struct { char __x[0xfffffff]; } *)__src) - : "cc"); - return __dest; -} - - -# ifdef __USE_GNU -# define _HAVE_STRING_ARCH_stpcpy 1 -/* Copy SRC to DEST. */ -# define __stpcpy(dest, src) \ - (__extension__ (__builtin_constant_p (src) \ - ? (strlen (src) + 1 <= 8 \ - ? __stpcpy_a_small ((dest), (src), strlen (src) + 1) \ - : __stpcpy_c ((dest), (src), strlen (src) + 1)) \ - : __stpcpy_g ((dest), (src)))) -# define __stpcpy_c(dest, src, srclen) \ - ((srclen) % 4 == 0 \ - ? __mempcpy_by4 (dest, src, srclen) - 1 \ - : ((srclen) % 2 == 0 \ - ? __mempcpy_by2 (dest, src, srclen) - 1 \ - : __mempcpy_byn (dest, src, srclen) - 1)) - -/* In glibc itself we use this symbol for namespace reasons. */ -# define stpcpy(dest, src) __stpcpy ((dest), (src)) - -# define __stpcpy_a_small(dest, src, srclen) \ - (__extension__ ({ union { \ - unsigned int __ui; \ - unsigned short int __usi; \ - unsigned char __uc; \ - char __c; \ - } *__u = (void *) (dest); \ - switch (srclen) \ - { \ - case 1: \ - __u->__uc = '\0'; \ - break; \ - case 2: \ - __u->__usi = __STRING_SMALL_GET16 (src, 0); \ - __u = __extension__ ((void *) __u + 1); \ - break; \ - case 3: \ - __u->__usi = __STRING_SMALL_GET16 (src, 0); \ - __u = __extension__ ((void *) __u + 2); \ - __u->__uc = '\0'; \ - break; \ - case 4: \ - __u->__ui = __STRING_SMALL_GET32 (src, 0); \ - __u = __extension__ ((void *) __u + 3); \ - break; \ - case 5: \ - __u->__ui = __STRING_SMALL_GET32 (src, 0); \ - __u = __extension__ ((void *) __u + 4); \ - __u->__uc = '\0'; \ - break; \ - case 6: \ - __u->__ui = __STRING_SMALL_GET32 (src, 0); \ - __u = __extension__ ((void *) __u + 4); \ - __u->__usi = __STRING_SMALL_GET16 (src, 4); \ - __u = __extension__ ((void *) __u + 1); \ - break; \ - case 7: \ - __u->__ui = __STRING_SMALL_GET32 (src, 0); \ - __u = __extension__ ((void *) __u + 4); \ - __u->__usi = __STRING_SMALL_GET16 (src, 4); \ - __u = __extension__ ((void *) __u + 2); \ - __u->__uc = '\0'; \ - break; \ - case 8: \ - __u->__ui = __STRING_SMALL_GET32 (src, 0); \ - __u = __extension__ ((void *) __u + 4); \ - __u->__ui = __STRING_SMALL_GET32 (src, 4); \ - __u = __extension__ ((void *) __u + 3); \ - break; \ - } \ - (char *) __u; })) - -__STRING_INLINE char *__mempcpy_by4 (char *__dest, const char *__src, - size_t __srclen); - -__STRING_INLINE char * -__mempcpy_by4 (char *__dest, const char *__src, size_t __srclen) -{ - register char *__tmp = __dest; - register unsigned long int __d0, __d1; - __asm__ __volatile__ - ("1:\n\t" - "movl (%2),%0\n\t" - "leal 4(%2),%2\n\t" - "movl %0,(%1)\n\t" - "leal 4(%1),%1\n\t" - "decl %3\n\t" - "jnz 1b" - : "=&r" (__d0), "=r" (__tmp), "=&r" (__src), "=&r" (__d1) - : "1" (__tmp), "2" (__src), "3" (__srclen / 4) - : "memory", "cc"); - return __tmp; -} - -__STRING_INLINE char *__mempcpy_by2 (char *__dest, const char *__src, - size_t __srclen); - -__STRING_INLINE char * -__mempcpy_by2 (char *__dest, const char *__src, size_t __srclen) -{ - register char *__tmp = __dest; - register unsigned long int __d0, __d1; - __asm__ __volatile__ - ("shrl $1,%3\n\t" - "jz 2f\n" /* only a word */ - "1:\n\t" - "movl (%2),%0\n\t" - "leal 4(%2),%2\n\t" - "movl %0,(%1)\n\t" - "leal 4(%1),%1\n\t" - "decl %3\n\t" - "jnz 1b\n" - "2:\n\t" - "movw (%2),%w0\n\t" - "movw %w0,(%1)" - : "=&q" (__d0), "=r" (__tmp), "=&r" (__src), "=&r" (__d1), - "=m" ( *(struct { __extension__ char __x[__srclen]; } *)__dest) - : "1" (__tmp), "2" (__src), "3" (__srclen / 2), - "m" ( *(struct { __extension__ char __x[__srclen]; } *)__src) - : "cc"); - return __tmp + 2; -} - -__STRING_INLINE char *__mempcpy_byn (char *__dest, const char *__src, - size_t __srclen); - -__STRING_INLINE char * -__mempcpy_byn (char *__dest, const char *__src, size_t __srclen) -{ - register unsigned long __d0, __d1; - register char *__tmp = __dest; - __asm__ __volatile__ - ("cld\n\t" - "shrl $1,%%ecx\n\t" - "jnc 1f\n\t" - "movsb\n" - "1:\n\t" - "shrl $1,%%ecx\n\t" - "jnc 2f\n\t" - "movsw\n" - "2:\n\t" - "rep; movsl" - : "=D" (__tmp), "=&c" (__d0), "=&S" (__d1), - "=m" ( *(struct { __extension__ char __x[__srclen]; } *)__dest) - : "0" (__tmp), "1" (__srclen), "2" (__src), - "m" ( *(struct { __extension__ char __x[__srclen]; } *)__src) - : "cc"); - return __tmp; -} - -__STRING_INLINE char *__stpcpy_g (char *__dest, const char *__src); - -__STRING_INLINE char * -__stpcpy_g (char *__dest, const char *__src) -{ - register char *__tmp = __dest; - register char __dummy; - __asm__ __volatile__ - ( - "1:\n\t" - "movb (%0),%b2\n\t" - "leal 1(%0),%0\n\t" - "movb %b2,(%1)\n\t" - "leal 1(%1),%1\n\t" - "testb %b2,%b2\n\t" - "jne 1b" - : "=&r" (__src), "=r" (__tmp), "=&q" (__dummy), - "=m" ( *(struct { char __x[0xfffffff]; } *)__dest) - : "0" (__src), "1" (__tmp), - "m" ( *(struct { char __x[0xfffffff]; } *)__src) - : "cc"); - return __tmp - 1; -} -# endif - - -/* Copy no more than N characters of SRC to DEST. */ -# define _HAVE_STRING_ARCH_strncpy 1 -# define strncpy(dest, src, n) \ - (__extension__ (__builtin_constant_p (src) \ - ? ((strlen (src) + 1 >= ((size_t) (n)) \ - ? (char *) memcpy ((char *) (dest), \ - (const char *) (src), n) \ - : __strncpy_cg ((dest), (src), strlen (src) + 1, n))) \ - : __strncpy_gg ((dest), (src), n))) -# define __strncpy_cg(dest, src, srclen, n) \ - (((srclen) % 4 == 0) \ - ? __strncpy_by4 (dest, src, srclen, n) \ - : (((srclen) % 2 == 0) \ - ? __strncpy_by2 (dest, src, srclen, n) \ - : __strncpy_byn (dest, src, srclen, n))) - -__STRING_INLINE char *__strncpy_by4 (char *__dest, const char __src[], - size_t __srclen, size_t __n); - -__STRING_INLINE char * -__strncpy_by4 (char *__dest, const char __src[], size_t __srclen, size_t __n) -{ - register char *__tmp = __dest; - register int __dummy1, __dummy2; - __asm__ __volatile__ - ("1:\n\t" - "movl (%2),%0\n\t" - "leal 4(%2),%2\n\t" - "movl %0,(%1)\n\t" - "leal 4(%1),%1\n\t" - "decl %3\n\t" - "jnz 1b" - : "=&r" (__dummy1), "=r" (__tmp), "=&r" (__src), "=&r" (__dummy2), - "=m" ( *(struct { __extension__ char __x[__srclen]; } *)__dest) - : "1" (__tmp), "2" (__src), "3" (__srclen / 4), - "m" ( *(struct { __extension__ char __x[__srclen]; } *)__src) - : "cc"); - (void) memset (__tmp, '\0', __n - __srclen); - return __dest; -} - -__STRING_INLINE char *__strncpy_by2 (char *__dest, const char __src[], - size_t __srclen, size_t __n); - -__STRING_INLINE char * -__strncpy_by2 (char *__dest, const char __src[], size_t __srclen, size_t __n) -{ - register char *__tmp = __dest; - register int __dummy1, __dummy2; - __asm__ __volatile__ - ("shrl $1,%3\n\t" - "jz 2f\n" /* only a word */ - "1:\n\t" - "movl (%2),%0\n\t" - "leal 4(%2),%2\n\t" - "movl %0,(%1)\n\t" - "leal 4(%1),%1\n\t" - "decl %3\n\t" - "jnz 1b\n" - "2:\n\t" - "movw (%2),%w0\n\t" - "movw %w0,(%1)\n\t" - : "=&q" (__dummy1), "=r" (__tmp), "=&r" (__src), "=&r" (__dummy2), - "=m" ( *(struct { __extension__ char __x[__srclen]; } *)__dest) - : "1" (__tmp), "2" (__src), "3" (__srclen / 2), - "m" ( *(struct { __extension__ char __x[__srclen]; } *)__src) - : "cc"); - (void) memset (__tmp + 2, '\0', __n - __srclen); - return __dest; -} - -__STRING_INLINE char *__strncpy_byn (char *__dest, const char __src[], - size_t __srclen, size_t __n); - -__STRING_INLINE char * -__strncpy_byn (char *__dest, const char __src[], size_t __srclen, size_t __n) -{ - register unsigned long int __d0, __d1; - register char *__tmp = __dest; - __asm__ __volatile__ - ("cld\n\t" - "shrl $1,%1\n\t" - "jnc 1f\n\t" - "movsb\n" - "1:\n\t" - "shrl $1,%1\n\t" - "jnc 2f\n\t" - "movsw\n" - "2:\n\t" - "rep; movsl" - : "=D" (__tmp), "=&c" (__d0), "=&S" (__d1), - "=m" ( *(struct { __extension__ char __x[__srclen]; } *)__dest) - : "1" (__srclen), "0" (__tmp),"2" (__src), - "m" ( *(struct { __extension__ char __x[__srclen]; } *)__src) - : "cc"); - (void) memset (__tmp, '\0', __n - __srclen); - return __dest; -} - -__STRING_INLINE char *__strncpy_gg (char *__dest, const char *__src, - size_t __n); - -__STRING_INLINE char * -__strncpy_gg (char *__dest, const char *__src, size_t __n) -{ - register char *__tmp = __dest; - register char __dummy; - if (__n > 0) - __asm__ __volatile__ - ("1:\n\t" - "movb (%0),%2\n\t" - "incl %0\n\t" - "movb %2,(%1)\n\t" - "incl %1\n\t" - "decl %3\n\t" - "je 3f\n\t" - "testb %2,%2\n\t" - "jne 1b\n\t" - "2:\n\t" - "movb %2,(%1)\n\t" - "incl %1\n\t" - "decl %3\n\t" - "jne 2b\n\t" - "3:" - : "=&r" (__src), "=&r" (__tmp), "=&q" (__dummy), "=&r" (__n) - : "0" (__src), "1" (__tmp), "3" (__n) - : "memory", "cc"); - - return __dest; -} - - -/* Append SRC onto DEST. */ -# define _HAVE_STRING_ARCH_strcat 1 -# define strcat(dest, src) \ - (__extension__ (__builtin_constant_p (src) \ - ? __strcat_c ((dest), (src), strlen (src) + 1) \ - : __strcat_g ((dest), (src)))) - -__STRING_INLINE char *__strcat_c (char *__dest, const char __src[], - size_t __srclen); - -__STRING_INLINE char * -__strcat_c (char *__dest, const char __src[], size_t __srclen) -{ -# ifdef __i686__ - register unsigned long int __d0; - register char *__tmp; - __asm__ __volatile__ - ("repne; scasb" - : "=D" (__tmp), "=&c" (__d0), - "=m" ( *(struct { char __x[0xfffffff]; } *)__dest) - : "0" (__dest), "1" (0xffffffff), "a" (0), - "m" ( *(struct { __extension__ char __x[__srclen]; } *)__src) - : "cc"); - --__tmp; -# else - register char *__tmp = __dest; - __asm__ __volatile__ - ("decl %0\n\t" - "1:\n\t" - "incl %0\n\t" - "cmpb $0,(%0)\n\t" - "jne 1b\n" - : "=r" (__tmp), - "=m" ( *(struct { char __x[0xfffffff]; } *)__dest) - : "0" (__tmp), - "m" ( *(struct { __extension__ char __x[__srclen]; } *)__src) - : "cc"); -# endif - (void) memcpy (__tmp, __src, __srclen); - return __dest; -} - -__STRING_INLINE char *__strcat_g (char *__dest, const char *__src); - -__STRING_INLINE char * -__strcat_g (char *__dest, const char *__src) -{ - register char *__tmp = __dest; - register char __dummy; - __asm__ __volatile__ - ("decl %1\n\t" - "1:\n\t" - "incl %1\n\t" - "cmpb $0,(%1)\n\t" - "jne 1b\n" - "2:\n\t" - "movb (%2),%b0\n\t" - "incl %2\n\t" - "movb %b0,(%1)\n\t" - "incl %1\n\t" - "testb %b0,%b0\n\t" - "jne 2b\n" - : "=&q" (__dummy), "=&r" (__tmp), "=&r" (__src), - "=m" ( *(struct { char __x[0xfffffff]; } *)__dest) - : "1" (__tmp), "2" (__src), - "m" ( *(struct { char __x[0xfffffff]; } *)__src) - : "memory", "cc"); - return __dest; -} - - -/* Append no more than N characters from SRC onto DEST. */ -# define _HAVE_STRING_ARCH_strncat 1 -# define strncat(dest, src, n) \ - (__extension__ ({ char *__dest = (dest); \ - __builtin_constant_p (src) && __builtin_constant_p (n) \ - ? (strlen (src) < ((size_t) (n)) \ - ? strcat (__dest, (src)) \ - : (*(char *)__mempcpy (strchr (__dest, '\0'), \ - (const char *) (src), \ - (n)) = 0, __dest)) \ - : __strncat_g (__dest, (src), (n)); })) - -__STRING_INLINE char *__strncat_g (char *__dest, const char __src[], - size_t __n); - -__STRING_INLINE char * -__strncat_g (char *__dest, const char __src[], size_t __n) -{ - register char *__tmp = __dest; - register char __dummy; -# ifdef __i686__ - __asm__ __volatile__ - ("repne; scasb\n" - "movl %4, %3\n\t" - "decl %1\n\t" - "1:\n\t" - "subl $1,%3\n\t" - "jc 2f\n\t" - "movb (%2),%b0\n\t" - "movsb\n\t" - "testb %b0,%b0\n\t" - "jne 1b\n\t" - "decl %1\n" - "2:\n\t" - "movb $0,(%1)" - : "=&a" (__dummy), "=&D" (__tmp), "=&S" (__src), "=&c" (__n) - : "g" (__n), "0" (0), "1" (__tmp), "2" (__src), "3" (0xffffffff) - : "memory", "cc"); -# else - __asm__ __volatile__ - ("1:\n\t" - "cmpb $0,1(%1)\n\t" - "leal 1(%1),%1\n\t" - "jne 1b\n" - "2:\n\t" - "subl $1,%3\n\t" - "jc 3f\n\t" - "movb (%2),%b0\n\t" - "leal 1(%2),%2\n\t" - "movb %b0,(%1)\n\t" - "leal 1(%1),%1\n\t" - "testb %b0,%b0\n\t" - "jne 2b\n\t" - "decl %1\n" - "3:\n\t" - "movb $0,(%1)" - : "=&q" (__dummy), "=&r" (__tmp), "=&r" (__src), "=&r" (__n) - : "1" ((unsigned long) __tmp - 1), "2" (__src), "3" (__n) - : "memory", "cc"); -#endif - return __dest; -} - - -/* Compare S1 and S2. */ -# define _HAVE_STRING_ARCH_strcmp 1 -# define strcmp(s1, s2) \ - (__extension__ (__builtin_constant_p (s1) && __builtin_constant_p (s2) \ - && (sizeof ((s1)[0]) != 1 || strlen (s1) >= 4) \ - && (sizeof ((s2)[0]) != 1 || strlen (s2) >= 4) \ - ? memcmp ((const char *) (s1), (const char *) (s2), \ - (strlen (s1) < strlen (s2) \ - ? strlen (s1) : strlen (s2)) + 1) \ - : (__builtin_constant_p (s1) && sizeof ((s1)[0]) == 1 \ - && sizeof ((s2)[0]) == 1 && strlen (s1) < 4 \ - ? (__builtin_constant_p (s2) && sizeof ((s2)[0]) == 1 \ - ? __strcmp_cc ((const unsigned char *) (s1), \ - (const unsigned char *) (s2), \ - strlen (s1)) \ - : __strcmp_cg ((const unsigned char *) (s1), \ - (const unsigned char *) (s2), \ - strlen (s1))) \ - : (__builtin_constant_p (s2) && sizeof ((s1)[0]) == 1 \ - && sizeof ((s2)[0]) == 1 && strlen (s2) < 4 \ - ? (__builtin_constant_p (s1) \ - ? __strcmp_cc ((const unsigned char *) (s1), \ - (const unsigned char *) (s2), \ - strlen (s2)) \ - : __strcmp_gc ((const unsigned char *) (s1), \ - (const unsigned char *) (s2), \ - strlen (s2))) \ - : __strcmp_gg ((s1), (s2)))))) - -# define __strcmp_cc(s1, s2, l) \ - (__extension__ ({ register int __result = (s1)[0] - (s2)[0]; \ - if (l > 0 && __result == 0) \ - { \ - __result = (s1)[1] - (s2)[1]; \ - if (l > 1 && __result == 0) \ - { \ - __result = (s1)[2] - (s2)[2]; \ - if (l > 2 && __result == 0) \ - __result = (s1)[3] - (s2)[3]; \ - } \ - } \ - __result; })) - -# define __strcmp_cg(s1, s2, l1) \ - (__extension__ ({ const unsigned char *__s2 = (s2); \ - register int __result = (s1)[0] - __s2[0]; \ - if (l1 > 0 && __result == 0) \ - { \ - __result = (s1)[1] - __s2[1]; \ - if (l1 > 1 && __result == 0) \ - { \ - __result = (s1)[2] - __s2[2]; \ - if (l1 > 2 && __result == 0) \ - __result = (s1)[3] - __s2[3]; \ - } \ - } \ - __result; })) - -# define __strcmp_gc(s1, s2, l2) \ - (__extension__ ({ const unsigned char *__s1 = (s1); \ - register int __result = __s1[0] - (s2)[0]; \ - if (l2 > 0 && __result == 0) \ - { \ - __result = __s1[1] - (s2)[1]; \ - if (l2 > 1 && __result == 0) \ - { \ - __result = __s1[2] - (s2)[2]; \ - if (l2 > 2 && __result == 0) \ - __result = __s1[3] - (s2)[3]; \ - } \ - } \ - __result; })) - -__STRING_INLINE int __strcmp_gg (const char *__s1, const char *__s2); - -__STRING_INLINE int -__strcmp_gg (const char *__s1, const char *__s2) -{ - register int __res; - __asm__ __volatile__ - ("1:\n\t" - "movb (%1),%b0\n\t" - "leal 1(%1),%1\n\t" - "cmpb %b0,(%2)\n\t" - "jne 2f\n\t" - "leal 1(%2),%2\n\t" - "testb %b0,%b0\n\t" - "jne 1b\n\t" - "xorl %0,%0\n\t" - "jmp 3f\n" - "2:\n\t" - "movl $1,%0\n\t" - "jb 3f\n\t" - "negl %0\n" - "3:" - : "=q" (__res), "=&r" (__s1), "=&r" (__s2) - : "1" (__s1), "2" (__s2), - "m" ( *(struct { char __x[0xfffffff]; } *)__s1), - "m" ( *(struct { char __x[0xfffffff]; } *)__s2) - : "cc"); - return __res; -} - - -/* Compare N characters of S1 and S2. */ -# define _HAVE_STRING_ARCH_strncmp 1 -# define strncmp(s1, s2, n) \ - (__extension__ (__builtin_constant_p (s1) && strlen (s1) < ((size_t) (n)) \ - ? strcmp ((s1), (s2)) \ - : (__builtin_constant_p (s2) && strlen (s2) < ((size_t) (n))\ - ? strcmp ((s1), (s2)) \ - : __strncmp_g ((s1), (s2), (n))))) - -__STRING_INLINE int __strncmp_g (const char *__s1, const char *__s2, - size_t __n); - -__STRING_INLINE int -__strncmp_g (const char *__s1, const char *__s2, size_t __n) -{ - register int __res; - __asm__ __volatile__ - ("1:\n\t" - "subl $1,%3\n\t" - "jc 2f\n\t" - "movb (%1),%b0\n\t" - "incl %1\n\t" - "cmpb %b0,(%2)\n\t" - "jne 3f\n\t" - "incl %2\n\t" - "testb %b0,%b0\n\t" - "jne 1b\n" - "2:\n\t" - "xorl %0,%0\n\t" - "jmp 4f\n" - "3:\n\t" - "movl $1,%0\n\t" - "jb 4f\n\t" - "negl %0\n" - "4:" - : "=q" (__res), "=&r" (__s1), "=&r" (__s2), "=&r" (__n) - : "1" (__s1), "2" (__s2), "3" (__n), - "m" ( *(struct { __extension__ char __x[__n]; } *)__s1), - "m" ( *(struct { __extension__ char __x[__n]; } *)__s2) - : "cc"); - return __res; -} - - -/* Find the first occurrence of C in S. */ -# define _HAVE_STRING_ARCH_strchr 1 -# define _USE_STRING_ARCH_strchr 1 -# define strchr(s, c) \ - (__extension__ (__builtin_constant_p (c) \ - ? ((c) == '\0' \ - ? (char *) __rawmemchr ((s), (c)) \ - : __strchr_c ((s), ((c) & 0xff) << 8)) \ - : __strchr_g ((s), (c)))) - -__STRING_INLINE char *__strchr_c (const char *__s, int __c); - -__STRING_INLINE char * -__strchr_c (const char *__s, int __c) -{ - register unsigned long int __d0; - register char *__res; - __asm__ __volatile__ - ("1:\n\t" - "movb (%0),%%al\n\t" - "cmpb %%ah,%%al\n\t" - "je 2f\n\t" - "leal 1(%0),%0\n\t" - "testb %%al,%%al\n\t" - "jne 1b\n\t" - "xorl %0,%0\n" - "2:" - : "=r" (__res), "=&a" (__d0) - : "0" (__s), "1" (__c), - "m" ( *(struct { char __x[0xfffffff]; } *)__s) - : "cc"); - return __res; -} - -__STRING_INLINE char *__strchr_g (const char *__s, int __c); - -__STRING_INLINE char * -__strchr_g (const char *__s, int __c) -{ - register unsigned long int __d0; - register char *__res; - __asm__ __volatile__ - ("movb %%al,%%ah\n" - "1:\n\t" - "movb (%0),%%al\n\t" - "cmpb %%ah,%%al\n\t" - "je 2f\n\t" - "leal 1(%0),%0\n\t" - "testb %%al,%%al\n\t" - "jne 1b\n\t" - "xorl %0,%0\n" - "2:" - : "=r" (__res), "=&a" (__d0) - : "0" (__s), "1" (__c), - "m" ( *(struct { char __x[0xfffffff]; } *)__s) - : "cc"); - return __res; -} - - -/* Find the first occurrence of C in S or the final NUL byte. */ -# define _HAVE_STRING_ARCH_strchrnul 1 -# define __strchrnul(s, c) \ - (__extension__ (__builtin_constant_p (c) \ - ? ((c) == '\0' \ - ? (char *) __rawmemchr ((s), c) \ - : __strchrnul_c ((s), ((c) & 0xff) << 8)) \ - : __strchrnul_g ((s), c))) - -__STRING_INLINE char *__strchrnul_c (const char *__s, int __c); - -__STRING_INLINE char * -__strchrnul_c (const char *__s, int __c) -{ - register unsigned long int __d0; - register char *__res; - __asm__ __volatile__ - ("1:\n\t" - "movb (%0),%%al\n\t" - "cmpb %%ah,%%al\n\t" - "je 2f\n\t" - "leal 1(%0),%0\n\t" - "testb %%al,%%al\n\t" - "jne 1b\n\t" - "decl %0\n" - "2:" - : "=r" (__res), "=&a" (__d0) - : "0" (__s), "1" (__c), - "m" ( *(struct { char __x[0xfffffff]; } *)__s) - : "cc"); - return __res; -} - -__STRING_INLINE char *__strchrnul_g (const char *__s, int __c); - -__STRING_INLINE char * -__strchrnul_g (const char *__s, int __c) -{ - register unsigned long int __d0; - register char *__res; - __asm__ __volatile__ - ("movb %%al,%%ah\n" - "1:\n\t" - "movb (%0),%%al\n\t" - "cmpb %%ah,%%al\n\t" - "je 2f\n\t" - "leal 1(%0),%0\n\t" - "testb %%al,%%al\n\t" - "jne 1b\n\t" - "decl %0\n" - "2:" - : "=r" (__res), "=&a" (__d0) - : "0" (__s), "1" (__c), - "m" ( *(struct { char __x[0xfffffff]; } *)__s) - : "cc"); - return __res; -} -# ifdef __USE_GNU -# define strchrnul(s, c) __strchrnul ((s), (c)) -# endif - - -# if defined __USE_MISC || defined __USE_XOPEN_EXTENDED -/* Find the first occurrence of C in S. This is the BSD name. */ -# define _HAVE_STRING_ARCH_index 1 -# define index(s, c) \ - (__extension__ (__builtin_constant_p (c) \ - ? __strchr_c ((s), ((c) & 0xff) << 8) \ - : __strchr_g ((s), (c)))) -# endif - - -/* Find the last occurrence of C in S. */ -# define _HAVE_STRING_ARCH_strrchr 1 -# define strrchr(s, c) \ - (__extension__ (__builtin_constant_p (c) \ - ? __strrchr_c ((s), ((c) & 0xff) << 8) \ - : __strrchr_g ((s), (c)))) - -# ifdef __i686__ -__STRING_INLINE char *__strrchr_c (const char *__s, int __c); - -__STRING_INLINE char * -__strrchr_c (const char *__s, int __c) -{ - register unsigned long int __d0, __d1; - register char *__res; - __asm__ __volatile__ - ("cld\n" - "1:\n\t" - "lodsb\n\t" - "cmpb %h2,%b2\n\t" - "cmove %1,%0\n\t" - "testb %b2,%b2\n\t" - "jne 1b" - : "=d" (__res), "=&S" (__d0), "=&a" (__d1) - : "0" (1), "1" (__s), "2" (__c), - "m" ( *(struct { char __x[0xfffffff]; } *)__s) - : "cc"); - return __res - 1; -} - -__STRING_INLINE char *__strrchr_g (const char *__s, int __c); - -__STRING_INLINE char * -__strrchr_g (const char *__s, int __c) -{ - register unsigned long int __d0, __d1; - register char *__res; - __asm__ __volatile__ - ("movb %b2,%h2\n" - "cld\n\t" - "1:\n\t" - "lodsb\n\t" - "cmpb %h2,%b2\n\t" - "cmove %1,%0\n\t" - "testb %b2,%b2\n\t" - "jne 1b" - : "=d" (__res), "=&S" (__d0), "=&a" (__d1) - : "0" (1), "1" (__s), "2" (__c), - "m" ( *(struct { char __x[0xfffffff]; } *)__s) - : "cc"); - return __res - 1; -} -# else -__STRING_INLINE char *__strrchr_c (const char *__s, int __c); - -__STRING_INLINE char * -__strrchr_c (const char *__s, int __c) -{ - register unsigned long int __d0, __d1; - register char *__res; - __asm__ __volatile__ - ("cld\n" - "1:\n\t" - "lodsb\n\t" - "cmpb %%ah,%%al\n\t" - "jne 2f\n\t" - "leal -1(%%esi),%0\n" - "2:\n\t" - "testb %%al,%%al\n\t" - "jne 1b" - : "=d" (__res), "=&S" (__d0), "=&a" (__d1) - : "0" (0), "1" (__s), "2" (__c), - "m" ( *(struct { char __x[0xfffffff]; } *)__s) - : "cc"); - return __res; -} - -__STRING_INLINE char *__strrchr_g (const char *__s, int __c); - -__STRING_INLINE char * -__strrchr_g (const char *__s, int __c) -{ - register unsigned long int __d0, __d1; - register char *__res; - __asm__ __volatile__ - ("movb %%al,%%ah\n" - "cld\n\t" - "1:\n\t" - "lodsb\n\t" - "cmpb %%ah,%%al\n\t" - "jne 2f\n\t" - "leal -1(%%esi),%0\n" - "2:\n\t" - "testb %%al,%%al\n\t" - "jne 1b" - : "=r" (__res), "=&S" (__d0), "=&a" (__d1) - : "0" (0), "1" (__s), "2" (__c), - "m" ( *(struct { char __x[0xfffffff]; } *)__s) - : "cc"); - return __res; -} -# endif - - -# if defined __USE_MISC || defined __USE_XOPEN_EXTENDED -/* Find the last occurrence of C in S. This is the BSD name. */ -# define _HAVE_STRING_ARCH_rindex 1 -# define rindex(s, c) \ - (__extension__ (__builtin_constant_p (c) \ - ? __strrchr_c ((s), ((c) & 0xff) << 8) \ - : __strrchr_g ((s), (c)))) -# endif - - -/* Return the length of the initial segment of S which - consists entirely of characters not in REJECT. */ -# define _HAVE_STRING_ARCH_strcspn 1 -# define strcspn(s, reject) \ - (__extension__ (__builtin_constant_p (reject) && sizeof ((reject)[0]) == 1 \ - ? ((reject)[0] == '\0' \ - ? strlen (s) \ - : ((reject)[1] == '\0' \ - ? __strcspn_c1 ((s), (((reject)[0] << 8) & 0xff00)) \ - : __strcspn_cg ((s), (reject), strlen (reject)))) \ - : __strcspn_g ((s), (reject)))) - -__STRING_INLINE size_t __strcspn_c1 (const char *__s, int __reject); - -# ifndef _FORCE_INLINES -__STRING_INLINE size_t -__strcspn_c1 (const char *__s, int __reject) -{ - register unsigned long int __d0; - register char *__res; - __asm__ __volatile__ - ("1:\n\t" - "movb (%0),%%al\n\t" - "leal 1(%0),%0\n\t" - "cmpb %%ah,%%al\n\t" - "je 2f\n\t" - "testb %%al,%%al\n\t" - "jne 1b\n" - "2:" - : "=r" (__res), "=&a" (__d0) - : "0" (__s), "1" (__reject), - "m" ( *(struct { char __x[0xfffffff]; } *)__s) - : "cc"); - return (__res - 1) - __s; -} -# endif - -__STRING_INLINE size_t __strcspn_cg (const char *__s, const char __reject[], - size_t __reject_len); - -__STRING_INLINE size_t -__strcspn_cg (const char *__s, const char __reject[], size_t __reject_len) -{ - register unsigned long int __d0, __d1, __d2; - register const char *__res; - __asm__ __volatile__ - ("cld\n" - "1:\n\t" - "lodsb\n\t" - "testb %%al,%%al\n\t" - "je 2f\n\t" - "movl %5,%%edi\n\t" - "movl %6,%%ecx\n\t" - "repne; scasb\n\t" - "jne 1b\n" - "2:" - : "=S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2) - : "0" (__s), "d" (__reject), "g" (__reject_len) - : "memory", "cc"); - return (__res - 1) - __s; -} - -__STRING_INLINE size_t __strcspn_g (const char *__s, const char *__reject); -# ifdef __PIC__ - -__STRING_INLINE size_t -__strcspn_g (const char *__s, const char *__reject) -{ - register unsigned long int __d0, __d1, __d2; - register const char *__res; - __asm__ __volatile__ - ("pushl %%ebx\n\t" - "movl %4,%%edi\n\t" - "cld\n\t" - "repne; scasb\n\t" - "notl %%ecx\n\t" - "leal -1(%%ecx),%%ebx\n" - "1:\n\t" - "lodsb\n\t" - "testb %%al,%%al\n\t" - "je 2f\n\t" - "movl %4,%%edi\n\t" - "movl %%ebx,%%ecx\n\t" - "repne; scasb\n\t" - "jne 1b\n" - "2:\n\t" - "popl %%ebx" - : "=S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2) - : "r" (__reject), "0" (__s), "1" (0), "2" (0xffffffff) - : "memory", "cc"); - return (__res - 1) - __s; -} -# else -__STRING_INLINE size_t -__strcspn_g (const char *__s, const char *__reject) -{ - register unsigned long int __d0, __d1, __d2, __d3; - register const char *__res; - __asm__ __volatile__ - ("cld\n\t" - "repne; scasb\n\t" - "notl %%ecx\n\t" - "leal -1(%%ecx),%%edx\n" - "1:\n\t" - "lodsb\n\t" - "testb %%al,%%al\n\t" - "je 2f\n\t" - "movl %%ebx,%%edi\n\t" - "movl %%edx,%%ecx\n\t" - "repne; scasb\n\t" - "jne 1b\n" - "2:" - : "=S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2), "=&d" (__d3) - : "0" (__s), "1" (0), "2" (0xffffffff), "3" (__reject), "b" (__reject) - /* Clobber memory, otherwise GCC cannot handle this. */ - : "memory", "cc"); - return (__res - 1) - __s; -} -# endif - - -/* Return the length of the initial segment of S which - consists entirely of characters in ACCEPT. */ -# define _HAVE_STRING_ARCH_strspn 1 -# define strspn(s, accept) \ - (__extension__ (__builtin_constant_p (accept) && sizeof ((accept)[0]) == 1 \ - ? ((accept)[0] == '\0' \ - ? ((void) (s), 0) \ - : ((accept)[1] == '\0' \ - ? __strspn_c1 ((s), (((accept)[0] << 8 ) & 0xff00)) \ - : __strspn_cg ((s), (accept), strlen (accept)))) \ - : __strspn_g ((s), (accept)))) - -# ifndef _FORCE_INLINES -__STRING_INLINE size_t __strspn_c1 (const char *__s, int __accept); - -__STRING_INLINE size_t -__strspn_c1 (const char *__s, int __accept) -{ - register unsigned long int __d0; - register char *__res; - /* Please note that __accept never can be '\0'. */ - __asm__ __volatile__ - ("1:\n\t" - "movb (%0),%b1\n\t" - "leal 1(%0),%0\n\t" - "cmpb %h1,%b1\n\t" - "je 1b" - : "=r" (__res), "=&q" (__d0) - : "0" (__s), "1" (__accept), - "m" ( *(struct { char __x[0xfffffff]; } *)__s) - : "cc"); - return (__res - 1) - __s; -} -# endif - -__STRING_INLINE size_t __strspn_cg (const char *__s, const char __accept[], - size_t __accept_len); - -__STRING_INLINE size_t -__strspn_cg (const char *__s, const char __accept[], size_t __accept_len) -{ - register unsigned long int __d0, __d1, __d2; - register const char *__res; - __asm__ __volatile__ - ("cld\n" - "1:\n\t" - "lodsb\n\t" - "testb %%al,%%al\n\t" - "je 2f\n\t" - "movl %5,%%edi\n\t" - "movl %6,%%ecx\n\t" - "repne; scasb\n\t" - "je 1b\n" - "2:" - : "=S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2) - : "0" (__s), "g" (__accept), "g" (__accept_len), - /* Since we do not know how large the memory we access it, use a - really large amount. */ - "m" ( *(struct { char __x[0xfffffff]; } *)__s), - "m" ( *(struct { __extension__ char __x[__accept_len]; } *)__accept) - : "cc"); - return (__res - 1) - __s; -} - -__STRING_INLINE size_t __strspn_g (const char *__s, const char *__accept); -# ifdef __PIC__ - -__STRING_INLINE size_t -__strspn_g (const char *__s, const char *__accept) -{ - register unsigned long int __d0, __d1, __d2; - register const char *__res; - __asm__ __volatile__ - ("pushl %%ebx\n\t" - "cld\n\t" - "repne; scasb\n\t" - "notl %%ecx\n\t" - "leal -1(%%ecx),%%ebx\n" - "1:\n\t" - "lodsb\n\t" - "testb %%al,%%al\n\t" - "je 2f\n\t" - "movl %%edx,%%edi\n\t" - "movl %%ebx,%%ecx\n\t" - "repne; scasb\n\t" - "je 1b\n" - "2:\n\t" - "popl %%ebx" - : "=S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2) - : "d" (__accept), "0" (__s), "1" (0), "2" (0xffffffff), "3" (__accept) - : "memory", "cc"); - return (__res - 1) - __s; -} -# else -__STRING_INLINE size_t -__strspn_g (const char *__s, const char *__accept) -{ - register unsigned long int __d0, __d1, __d2, __d3; - register const char *__res; - __asm__ __volatile__ - ("cld\n\t" - "repne; scasb\n\t" - "notl %%ecx\n\t" - "leal -1(%%ecx),%%edx\n" - "1:\n\t" - "lodsb\n\t" - "testb %%al,%%al\n\t" - "je 2f\n\t" - "movl %%ebx,%%edi\n\t" - "movl %%edx,%%ecx\n\t" - "repne; scasb\n\t" - "je 1b\n" - "2:" - : "=S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2), "=&d" (__d3) - : "0" (__s), "1" (0), "2" (0xffffffff), "3" (__accept), "b" (__accept) - : "memory", "cc"); - return (__res - 1) - __s; -} -# endif - - -/* Find the first occurrence in S of any character in ACCEPT. */ -# define _HAVE_STRING_ARCH_strpbrk 1 -# define strpbrk(s, accept) \ - (__extension__ (__builtin_constant_p (accept) && sizeof ((accept)[0]) == 1 \ - ? ((accept)[0] == '\0' \ - ? ((void) (s), (char *) 0) \ - : ((accept)[1] == '\0' \ - ? strchr ((s), (accept)[0]) \ - : __strpbrk_cg ((s), (accept), strlen (accept)))) \ - : __strpbrk_g ((s), (accept)))) - -__STRING_INLINE char *__strpbrk_cg (const char *__s, const char __accept[], - size_t __accept_len); - -__STRING_INLINE char * -__strpbrk_cg (const char *__s, const char __accept[], size_t __accept_len) -{ - register unsigned long int __d0, __d1, __d2; - register char *__res; - __asm__ __volatile__ - ("cld\n" - "1:\n\t" - "lodsb\n\t" - "testb %%al,%%al\n\t" - "je 2f\n\t" - "movl %5,%%edi\n\t" - "movl %6,%%ecx\n\t" - "repne; scasb\n\t" - "jne 1b\n\t" - "decl %0\n\t" - "jmp 3f\n" - "2:\n\t" - "xorl %0,%0\n" - "3:" - : "=S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2) - : "0" (__s), "d" (__accept), "g" (__accept_len) - : "memory", "cc"); - return __res; -} - -__STRING_INLINE char *__strpbrk_g (const char *__s, const char *__accept); -# ifdef __PIC__ - -__STRING_INLINE char * -__strpbrk_g (const char *__s, const char *__accept) -{ - register unsigned long int __d0, __d1, __d2; - register char *__res; - __asm__ __volatile__ - ("pushl %%ebx\n\t" - "movl %%edx,%%edi\n\t" - "cld\n\t" - "repne; scasb\n\t" - "notl %%ecx\n\t" - "leal -1(%%ecx),%%ebx\n" - "1:\n\t" - "lodsb\n\t" - "testb %%al,%%al\n\t" - "je 2f\n\t" - "movl %%edx,%%edi\n\t" - "movl %%ebx,%%ecx\n\t" - "repne; scasb\n\t" - "jne 1b\n\t" - "decl %0\n\t" - "jmp 3f\n" - "2:\n\t" - "xorl %0,%0\n" - "3:\n\t" - "popl %%ebx" - : "=S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2) - : "d" (__accept), "0" (__s), "1" (0), "2" (0xffffffff) - : "memory", "cc"); - return __res; -} -# else -__STRING_INLINE char * -__strpbrk_g (const char *__s, const char *__accept) -{ - register unsigned long int __d0, __d1, __d2, __d3; - register char *__res; - __asm__ __volatile__ - ("movl %%ebx,%%edi\n\t" - "cld\n\t" - "repne; scasb\n\t" - "notl %%ecx\n\t" - "leal -1(%%ecx),%%edx\n" - "1:\n\t" - "lodsb\n\t" - "testb %%al,%%al\n\t" - "je 2f\n\t" - "movl %%ebx,%%edi\n\t" - "movl %%edx,%%ecx\n\t" - "repne; scasb\n\t" - "jne 1b\n\t" - "decl %0\n\t" - "jmp 3f\n" - "2:\n\t" - "xorl %0,%0\n" - "3:" - : "=S" (__res), "=&a" (__d0), "=&c" (__d1), "=&d" (__d2), "=&D" (__d3) - : "0" (__s), "1" (0), "2" (0xffffffff), "b" (__accept) - : "memory", "cc"); - return __res; -} -# endif - - -/* Find the first occurrence of NEEDLE in HAYSTACK. */ -# define _HAVE_STRING_ARCH_strstr 1 -# define strstr(haystack, needle) \ - (__extension__ (__builtin_constant_p (needle) && sizeof ((needle)[0]) == 1 \ - ? ((needle)[0] == '\0' \ - ? (haystack) \ - : ((needle)[1] == '\0' \ - ? strchr ((haystack), (needle)[0]) \ - : __strstr_cg ((haystack), (needle), \ - strlen (needle)))) \ - : __strstr_g ((haystack), (needle)))) - -/* Please note that this function need not handle NEEDLEs with a - length shorter than two. */ -__STRING_INLINE char *__strstr_cg (const char *__haystack, - const char __needle[], - size_t __needle_len); - -__STRING_INLINE char * -__strstr_cg (const char *__haystack, const char __needle[], - size_t __needle_len) -{ - register unsigned long int __d0, __d1, __d2; - register char *__res; - __asm__ __volatile__ - ("cld\n" \ - "1:\n\t" - "movl %6,%%edi\n\t" - "movl %5,%%eax\n\t" - "movl %4,%%ecx\n\t" - "repe; cmpsb\n\t" - "je 2f\n\t" - "cmpb $0,-1(%%esi)\n\t" - "leal 1(%%eax),%5\n\t" - "jne 1b\n\t" - "xorl %%eax,%%eax\n" - "2:" - : "=&a" (__res), "=&S" (__d0), "=&D" (__d1), "=&c" (__d2) - : "g" (__needle_len), "1" (__haystack), "d" (__needle) - : "memory", "cc"); - return __res; -} - -__STRING_INLINE char *__strstr_g (const char *__haystack, - const char *__needle); -# ifdef __PIC__ - -__STRING_INLINE char * -__strstr_g (const char *__haystack, const char *__needle) -{ - register unsigned long int __d0, __d1, __d2; - register char *__res; - __asm__ __volatile__ - ("cld\n\t" - "repne; scasb\n\t" - "notl %%ecx\n\t" - "pushl %%ebx\n\t" - "decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */ - "movl %%ecx,%%ebx\n" - "1:\n\t" - "movl %%edx,%%edi\n\t" - "movl %%esi,%%eax\n\t" - "movl %%ebx,%%ecx\n\t" - "repe; cmpsb\n\t" - "je 2f\n\t" /* also works for empty string, see above */ - "cmpb $0,-1(%%esi)\n\t" - "leal 1(%%eax),%%esi\n\t" - "jne 1b\n\t" - "xorl %%eax,%%eax\n" - "2:\n\t" - "popl %%ebx" - : "=&a" (__res), "=&c" (__d0), "=&S" (__d1), "=&D" (__d2) - : "0" (0), "1" (0xffffffff), "2" (__haystack), "3" (__needle), - "d" (__needle) - : "memory", "cc"); - return __res; -} -# else -__STRING_INLINE char * -__strstr_g (const char *__haystack, const char *__needle) -{ - register unsigned long int __d0, __d1, __d2, __d3; - register char *__res; - __asm__ __volatile__ - ("cld\n\t" - "repne; scasb\n\t" - "notl %%ecx\n\t" - "decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */ - "movl %%ecx,%%edx\n" - "1:\n\t" - "movl %%ebx,%%edi\n\t" - "movl %%esi,%%eax\n\t" - "movl %%edx,%%ecx\n\t" - "repe; cmpsb\n\t" - "je 2f\n\t" /* also works for empty string, see above */ - "cmpb $0,-1(%%esi)\n\t" - "leal 1(%%eax),%%esi\n\t" - "jne 1b\n\t" - "xorl %%eax,%%eax\n" - "2:" - : "=&a" (__res), "=&c" (__d0), "=&S" (__d1), "=&D" (__d2), "=&d" (__d3) - : "0" (0), "1" (0xffffffff), "2" (__haystack), "3" (__needle), - "b" (__needle) - : "memory", "cc"); - return __res; -} -# endif - - -/* Bit find functions. We define only the i686 version since for the other - processors gcc generates good code. */ -# if defined __USE_MISC || defined __USE_XOPEN_EXTENDED -# ifdef __i686__ -# define _HAVE_STRING_ARCH_ffs 1 -# define ffs(word) (__builtin_constant_p (word) \ - ? __builtin_ffs (word) \ - : ({ int __cnt, __tmp; \ - __asm__ __volatile__ \ - ("bsfl %2,%0\n\t" \ - "cmovel %1,%0" \ - : "=&r" (__cnt), "=r" (__tmp) \ - : "rm" (word), "1" (-1)); \ - __cnt + 1; })) - -# ifndef ffsl -# define ffsl(word) ffs(word) -# endif -# endif /* i686 */ -# endif /* Misc || X/Open */ - -# ifndef _FORCE_INLINES -# undef __STRING_INLINE -# endif - -# endif /* use string inlines && GNU CC */ - -#endif diff --git a/sysdeps/x86/bits/wordsize.h b/sysdeps/x86/bits/wordsize.h deleted file mode 100644 index 70f652bca1..0000000000 --- a/sysdeps/x86/bits/wordsize.h +++ /dev/null @@ -1,17 +0,0 @@ -/* Determine the wordsize from the preprocessor defines. */ - -#if defined __x86_64__ && !defined __ILP32__ -# define __WORDSIZE 64 -#else -# define __WORDSIZE 32 -#define __WORDSIZE32_SIZE_ULONG 0 -#define __WORDSIZE32_PTRDIFF_LONG 0 -#endif - -#ifdef __x86_64__ -# define __WORDSIZE_TIME64_COMPAT32 1 -/* Both x86-64 and x32 use the 64-bit system call interface. */ -# define __SYSCALL_WORDSIZE 64 -#else -# define __WORDSIZE_TIME64_COMPAT32 0 -#endif diff --git a/sysdeps/x86/bits/xtitypes.h b/sysdeps/x86/bits/xtitypes.h deleted file mode 100644 index e153a18133..0000000000 --- a/sysdeps/x86/bits/xtitypes.h +++ /dev/null @@ -1,33 +0,0 @@ -/* bits/xtitypes.h -- Define some types used by . x86-64. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _STROPTS_H -# error "Never include directly; use instead." -#endif - -#ifndef _BITS_XTITYPES_H -#define _BITS_XTITYPES_H 1 - -#include - -/* This type is used by some structs in . */ -typedef __SLONG32_TYPE __t_scalar_t; -typedef __ULONG32_TYPE __t_uscalar_t; - - -#endif /* bits/xtitypes.h */ diff --git a/sysdeps/x86/cacheinfo.c b/sysdeps/x86/cacheinfo.c deleted file mode 100644 index 8000fd1e99..0000000000 --- a/sysdeps/x86/cacheinfo.c +++ /dev/null @@ -1,783 +0,0 @@ -/* x86_64 cache info. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -#include -#include -#include -#include -#include -#include - -static const struct intel_02_cache_info -{ - unsigned char idx; - unsigned char assoc; - unsigned char linesize; - unsigned char rel_name; - unsigned int size; -} intel_02_known [] = - { -#define M(sc) ((sc) - _SC_LEVEL1_ICACHE_SIZE) - { 0x06, 4, 32, M(_SC_LEVEL1_ICACHE_SIZE), 8192 }, - { 0x08, 4, 32, M(_SC_LEVEL1_ICACHE_SIZE), 16384 }, - { 0x09, 4, 32, M(_SC_LEVEL1_ICACHE_SIZE), 32768 }, - { 0x0a, 2, 32, M(_SC_LEVEL1_DCACHE_SIZE), 8192 }, - { 0x0c, 4, 32, M(_SC_LEVEL1_DCACHE_SIZE), 16384 }, - { 0x0d, 4, 64, M(_SC_LEVEL1_DCACHE_SIZE), 16384 }, - { 0x0e, 6, 64, M(_SC_LEVEL1_DCACHE_SIZE), 24576 }, - { 0x21, 8, 64, M(_SC_LEVEL2_CACHE_SIZE), 262144 }, - { 0x22, 4, 64, M(_SC_LEVEL3_CACHE_SIZE), 524288 }, - { 0x23, 8, 64, M(_SC_LEVEL3_CACHE_SIZE), 1048576 }, - { 0x25, 8, 64, M(_SC_LEVEL3_CACHE_SIZE), 2097152 }, - { 0x29, 8, 64, M(_SC_LEVEL3_CACHE_SIZE), 4194304 }, - { 0x2c, 8, 64, M(_SC_LEVEL1_DCACHE_SIZE), 32768 }, - { 0x30, 8, 64, M(_SC_LEVEL1_ICACHE_SIZE), 32768 }, - { 0x39, 4, 64, M(_SC_LEVEL2_CACHE_SIZE), 131072 }, - { 0x3a, 6, 64, M(_SC_LEVEL2_CACHE_SIZE), 196608 }, - { 0x3b, 2, 64, M(_SC_LEVEL2_CACHE_SIZE), 131072 }, - { 0x3c, 4, 64, M(_SC_LEVEL2_CACHE_SIZE), 262144 }, - { 0x3d, 6, 64, M(_SC_LEVEL2_CACHE_SIZE), 393216 }, - { 0x3e, 4, 64, M(_SC_LEVEL2_CACHE_SIZE), 524288 }, - { 0x3f, 2, 64, M(_SC_LEVEL2_CACHE_SIZE), 262144 }, - { 0x41, 4, 32, M(_SC_LEVEL2_CACHE_SIZE), 131072 }, - { 0x42, 4, 32, M(_SC_LEVEL2_CACHE_SIZE), 262144 }, - { 0x43, 4, 32, M(_SC_LEVEL2_CACHE_SIZE), 524288 }, - { 0x44, 4, 32, M(_SC_LEVEL2_CACHE_SIZE), 1048576 }, - { 0x45, 4, 32, M(_SC_LEVEL2_CACHE_SIZE), 2097152 }, - { 0x46, 4, 64, M(_SC_LEVEL3_CACHE_SIZE), 4194304 }, - { 0x47, 8, 64, M(_SC_LEVEL3_CACHE_SIZE), 8388608 }, - { 0x48, 12, 64, M(_SC_LEVEL2_CACHE_SIZE), 3145728 }, - { 0x49, 16, 64, M(_SC_LEVEL2_CACHE_SIZE), 4194304 }, - { 0x4a, 12, 64, M(_SC_LEVEL3_CACHE_SIZE), 6291456 }, - { 0x4b, 16, 64, M(_SC_LEVEL3_CACHE_SIZE), 8388608 }, - { 0x4c, 12, 64, M(_SC_LEVEL3_CACHE_SIZE), 12582912 }, - { 0x4d, 16, 64, M(_SC_LEVEL3_CACHE_SIZE), 16777216 }, - { 0x4e, 24, 64, M(_SC_LEVEL2_CACHE_SIZE), 6291456 }, - { 0x60, 8, 64, M(_SC_LEVEL1_DCACHE_SIZE), 16384 }, - { 0x66, 4, 64, M(_SC_LEVEL1_DCACHE_SIZE), 8192 }, - { 0x67, 4, 64, M(_SC_LEVEL1_DCACHE_SIZE), 16384 }, - { 0x68, 4, 64, M(_SC_LEVEL1_DCACHE_SIZE), 32768 }, - { 0x78, 8, 64, M(_SC_LEVEL2_CACHE_SIZE), 1048576 }, - { 0x79, 8, 64, M(_SC_LEVEL2_CACHE_SIZE), 131072 }, - { 0x7a, 8, 64, M(_SC_LEVEL2_CACHE_SIZE), 262144 }, - { 0x7b, 8, 64, M(_SC_LEVEL2_CACHE_SIZE), 524288 }, - { 0x7c, 8, 64, M(_SC_LEVEL2_CACHE_SIZE), 1048576 }, - { 0x7d, 8, 64, M(_SC_LEVEL2_CACHE_SIZE), 2097152 }, - { 0x7f, 2, 64, M(_SC_LEVEL2_CACHE_SIZE), 524288 }, - { 0x80, 8, 64, M(_SC_LEVEL2_CACHE_SIZE), 524288 }, - { 0x82, 8, 32, M(_SC_LEVEL2_CACHE_SIZE), 262144 }, - { 0x83, 8, 32, M(_SC_LEVEL2_CACHE_SIZE), 524288 }, - { 0x84, 8, 32, M(_SC_LEVEL2_CACHE_SIZE), 1048576 }, - { 0x85, 8, 32, M(_SC_LEVEL2_CACHE_SIZE), 2097152 }, - { 0x86, 4, 64, M(_SC_LEVEL2_CACHE_SIZE), 524288 }, - { 0x87, 8, 64, M(_SC_LEVEL2_CACHE_SIZE), 1048576 }, - { 0xd0, 4, 64, M(_SC_LEVEL3_CACHE_SIZE), 524288 }, - { 0xd1, 4, 64, M(_SC_LEVEL3_CACHE_SIZE), 1048576 }, - { 0xd2, 4, 64, M(_SC_LEVEL3_CACHE_SIZE), 2097152 }, - { 0xd6, 8, 64, M(_SC_LEVEL3_CACHE_SIZE), 1048576 }, - { 0xd7, 8, 64, M(_SC_LEVEL3_CACHE_SIZE), 2097152 }, - { 0xd8, 8, 64, M(_SC_LEVEL3_CACHE_SIZE), 4194304 }, - { 0xdc, 12, 64, M(_SC_LEVEL3_CACHE_SIZE), 2097152 }, - { 0xdd, 12, 64, M(_SC_LEVEL3_CACHE_SIZE), 4194304 }, - { 0xde, 12, 64, M(_SC_LEVEL3_CACHE_SIZE), 8388608 }, - { 0xe2, 16, 64, M(_SC_LEVEL3_CACHE_SIZE), 2097152 }, - { 0xe3, 16, 64, M(_SC_LEVEL3_CACHE_SIZE), 4194304 }, - { 0xe4, 16, 64, M(_SC_LEVEL3_CACHE_SIZE), 8388608 }, - { 0xea, 24, 64, M(_SC_LEVEL3_CACHE_SIZE), 12582912 }, - { 0xeb, 24, 64, M(_SC_LEVEL3_CACHE_SIZE), 18874368 }, - { 0xec, 24, 64, M(_SC_LEVEL3_CACHE_SIZE), 25165824 }, - }; - -#define nintel_02_known (sizeof (intel_02_known) / sizeof (intel_02_known [0])) - -static int -intel_02_known_compare (const void *p1, const void *p2) -{ - const struct intel_02_cache_info *i1; - const struct intel_02_cache_info *i2; - - i1 = (const struct intel_02_cache_info *) p1; - i2 = (const struct intel_02_cache_info *) p2; - - if (i1->idx == i2->idx) - return 0; - - return i1->idx < i2->idx ? -1 : 1; -} - - -static long int -__attribute__ ((noinline)) -intel_check_word (int name, unsigned int value, bool *has_level_2, - bool *no_level_2_or_3, - const struct cpu_features *cpu_features) -{ - if ((value & 0x80000000) != 0) - /* The register value is reserved. */ - return 0; - - /* Fold the name. The _SC_ constants are always in the order SIZE, - ASSOC, LINESIZE. */ - int folded_rel_name = (M(name) / 3) * 3; - - while (value != 0) - { - unsigned int byte = value & 0xff; - - if (byte == 0x40) - { - *no_level_2_or_3 = true; - - if (folded_rel_name == M(_SC_LEVEL3_CACHE_SIZE)) - /* No need to look further. */ - break; - } - else if (byte == 0xff) - { - /* CPUID leaf 0x4 contains all the information. We need to - iterate over it. */ - unsigned int eax; - unsigned int ebx; - unsigned int ecx; - unsigned int edx; - - unsigned int round = 0; - while (1) - { - __cpuid_count (4, round, eax, ebx, ecx, edx); - - enum { null = 0, data = 1, inst = 2, uni = 3 } type = eax & 0x1f; - if (type == null) - /* That was the end. */ - break; - - unsigned int level = (eax >> 5) & 0x7; - - if ((level == 1 && type == data - && folded_rel_name == M(_SC_LEVEL1_DCACHE_SIZE)) - || (level == 1 && type == inst - && folded_rel_name == M(_SC_LEVEL1_ICACHE_SIZE)) - || (level == 2 && folded_rel_name == M(_SC_LEVEL2_CACHE_SIZE)) - || (level == 3 && folded_rel_name == M(_SC_LEVEL3_CACHE_SIZE)) - || (level == 4 && folded_rel_name == M(_SC_LEVEL4_CACHE_SIZE))) - { - unsigned int offset = M(name) - folded_rel_name; - - if (offset == 0) - /* Cache size. */ - return (((ebx >> 22) + 1) - * (((ebx >> 12) & 0x3ff) + 1) - * ((ebx & 0xfff) + 1) - * (ecx + 1)); - if (offset == 1) - return (ebx >> 22) + 1; - - assert (offset == 2); - return (ebx & 0xfff) + 1; - } - - ++round; - } - /* There is no other cache information anywhere else. */ - break; - } - else - { - if (byte == 0x49 && folded_rel_name == M(_SC_LEVEL3_CACHE_SIZE)) - { - /* Intel reused this value. For family 15, model 6 it - specifies the 3rd level cache. Otherwise the 2nd - level cache. */ - unsigned int family = cpu_features->family; - unsigned int model = cpu_features->model; - - if (family == 15 && model == 6) - { - /* The level 3 cache is encoded for this model like - the level 2 cache is for other models. Pretend - the caller asked for the level 2 cache. */ - name = (_SC_LEVEL2_CACHE_SIZE - + (name - _SC_LEVEL3_CACHE_SIZE)); - folded_rel_name = M(_SC_LEVEL2_CACHE_SIZE); - } - } - - struct intel_02_cache_info *found; - struct intel_02_cache_info search; - - search.idx = byte; - found = bsearch (&search, intel_02_known, nintel_02_known, - sizeof (intel_02_known[0]), intel_02_known_compare); - if (found != NULL) - { - if (found->rel_name == folded_rel_name) - { - unsigned int offset = M(name) - folded_rel_name; - - if (offset == 0) - /* Cache size. */ - return found->size; - if (offset == 1) - return found->assoc; - - assert (offset == 2); - return found->linesize; - } - - if (found->rel_name == M(_SC_LEVEL2_CACHE_SIZE)) - *has_level_2 = true; - } - } - - /* Next byte for the next round. */ - value >>= 8; - } - - /* Nothing found. */ - return 0; -} - - -static long int __attribute__ ((noinline)) -handle_intel (int name, const struct cpu_features *cpu_features) -{ - unsigned int maxidx = cpu_features->max_cpuid; - - /* Return -1 for older CPUs. */ - if (maxidx < 2) - return -1; - - /* OK, we can use the CPUID instruction to get all info about the - caches. */ - unsigned int cnt = 0; - unsigned int max = 1; - long int result = 0; - bool no_level_2_or_3 = false; - bool has_level_2 = false; - - while (cnt++ < max) - { - unsigned int eax; - unsigned int ebx; - unsigned int ecx; - unsigned int edx; - __cpuid (2, eax, ebx, ecx, edx); - - /* The low byte of EAX in the first round contain the number of - rounds we have to make. At least one, the one we are already - doing. */ - if (cnt == 1) - { - max = eax & 0xff; - eax &= 0xffffff00; - } - - /* Process the individual registers' value. */ - result = intel_check_word (name, eax, &has_level_2, - &no_level_2_or_3, cpu_features); - if (result != 0) - return result; - - result = intel_check_word (name, ebx, &has_level_2, - &no_level_2_or_3, cpu_features); - if (result != 0) - return result; - - result = intel_check_word (name, ecx, &has_level_2, - &no_level_2_or_3, cpu_features); - if (result != 0) - return result; - - result = intel_check_word (name, edx, &has_level_2, - &no_level_2_or_3, cpu_features); - if (result != 0) - return result; - } - - if (name >= _SC_LEVEL2_CACHE_SIZE && name <= _SC_LEVEL3_CACHE_LINESIZE - && no_level_2_or_3) - return -1; - - return 0; -} - - -static long int __attribute__ ((noinline)) -handle_amd (int name) -{ - unsigned int eax; - unsigned int ebx; - unsigned int ecx; - unsigned int edx; - __cpuid (0x80000000, eax, ebx, ecx, edx); - - /* No level 4 cache (yet). */ - if (name > _SC_LEVEL3_CACHE_LINESIZE) - return 0; - - unsigned int fn = 0x80000005 + (name >= _SC_LEVEL2_CACHE_SIZE); - if (eax < fn) - return 0; - - __cpuid (fn, eax, ebx, ecx, edx); - - if (name < _SC_LEVEL1_DCACHE_SIZE) - { - name += _SC_LEVEL1_DCACHE_SIZE - _SC_LEVEL1_ICACHE_SIZE; - ecx = edx; - } - - switch (name) - { - case _SC_LEVEL1_DCACHE_SIZE: - return (ecx >> 14) & 0x3fc00; - - case _SC_LEVEL1_DCACHE_ASSOC: - ecx >>= 16; - if ((ecx & 0xff) == 0xff) - /* Fully associative. */ - return (ecx << 2) & 0x3fc00; - return ecx & 0xff; - - case _SC_LEVEL1_DCACHE_LINESIZE: - return ecx & 0xff; - - case _SC_LEVEL2_CACHE_SIZE: - return (ecx & 0xf000) == 0 ? 0 : (ecx >> 6) & 0x3fffc00; - - case _SC_LEVEL2_CACHE_ASSOC: - switch ((ecx >> 12) & 0xf) - { - case 0: - case 1: - case 2: - case 4: - return (ecx >> 12) & 0xf; - case 6: - return 8; - case 8: - return 16; - case 10: - return 32; - case 11: - return 48; - case 12: - return 64; - case 13: - return 96; - case 14: - return 128; - case 15: - return ((ecx >> 6) & 0x3fffc00) / (ecx & 0xff); - default: - return 0; - } - /* NOTREACHED */ - - case _SC_LEVEL2_CACHE_LINESIZE: - return (ecx & 0xf000) == 0 ? 0 : ecx & 0xff; - - case _SC_LEVEL3_CACHE_SIZE: - return (edx & 0xf000) == 0 ? 0 : (edx & 0x3ffc0000) << 1; - - case _SC_LEVEL3_CACHE_ASSOC: - switch ((edx >> 12) & 0xf) - { - case 0: - case 1: - case 2: - case 4: - return (edx >> 12) & 0xf; - case 6: - return 8; - case 8: - return 16; - case 10: - return 32; - case 11: - return 48; - case 12: - return 64; - case 13: - return 96; - case 14: - return 128; - case 15: - return ((edx & 0x3ffc0000) << 1) / (edx & 0xff); - default: - return 0; - } - /* NOTREACHED */ - - case _SC_LEVEL3_CACHE_LINESIZE: - return (edx & 0xf000) == 0 ? 0 : edx & 0xff; - - default: - assert (! "cannot happen"); - } - return -1; -} - - -/* Get the value of the system variable NAME. */ -long int -attribute_hidden -__cache_sysconf (int name) -{ - const struct cpu_features *cpu_features = __get_cpu_features (); - - if (cpu_features->kind == arch_kind_intel) - return handle_intel (name, cpu_features); - - if (cpu_features->kind == arch_kind_amd) - return handle_amd (name); - - // XXX Fill in more vendors. - - /* CPU not known, we have no information. */ - return 0; -} - - -/* Data cache size for use in memory and string routines, typically - L1 size, rounded to multiple of 256 bytes. */ -long int __x86_data_cache_size_half attribute_hidden = 32 * 1024 / 2; -long int __x86_data_cache_size attribute_hidden = 32 * 1024; -/* Similar to __x86_data_cache_size_half, but not rounded. */ -long int __x86_raw_data_cache_size_half attribute_hidden = 32 * 1024 / 2; -/* Similar to __x86_data_cache_size, but not rounded. */ -long int __x86_raw_data_cache_size attribute_hidden = 32 * 1024; -/* Shared cache size for use in memory and string routines, typically - L2 or L3 size, rounded to multiple of 256 bytes. */ -long int __x86_shared_cache_size_half attribute_hidden = 1024 * 1024 / 2; -long int __x86_shared_cache_size attribute_hidden = 1024 * 1024; -/* Similar to __x86_shared_cache_size_half, but not rounded. */ -long int __x86_raw_shared_cache_size_half attribute_hidden = 1024 * 1024 / 2; -/* Similar to __x86_shared_cache_size, but not rounded. */ -long int __x86_raw_shared_cache_size attribute_hidden = 1024 * 1024; - -/* Threshold to use non temporal store. */ -long int __x86_shared_non_temporal_threshold attribute_hidden; - -#ifndef DISABLE_PREFETCHW -/* PREFETCHW support flag for use in memory and string routines. */ -int __x86_prefetchw attribute_hidden; -#endif - - -static void -__attribute__((constructor)) -init_cacheinfo (void) -{ - /* Find out what brand of processor. */ - unsigned int eax; - unsigned int ebx; - unsigned int ecx; - unsigned int edx; - int max_cpuid_ex; - long int data = -1; - long int shared = -1; - unsigned int level; - unsigned int threads = 0; - const struct cpu_features *cpu_features = __get_cpu_features (); - int max_cpuid = cpu_features->max_cpuid; - - if (cpu_features->kind == arch_kind_intel) - { - data = handle_intel (_SC_LEVEL1_DCACHE_SIZE, cpu_features); - - long int core = handle_intel (_SC_LEVEL2_CACHE_SIZE, cpu_features); - bool inclusive_cache = true; - - /* Try L3 first. */ - level = 3; - shared = handle_intel (_SC_LEVEL3_CACHE_SIZE, cpu_features); - - /* Number of logical processors sharing L2 cache. */ - int threads_l2; - - /* Number of logical processors sharing L3 cache. */ - int threads_l3; - - if (shared <= 0) - { - /* Try L2 otherwise. */ - level = 2; - shared = core; - threads_l2 = 0; - threads_l3 = -1; - } - else - { - threads_l2 = 0; - threads_l3 = 0; - } - - /* A value of 0 for the HTT bit indicates there is only a single - logical processor. */ - if (HAS_CPU_FEATURE (HTT)) - { - /* Figure out the number of logical threads that share the - highest cache level. */ - if (max_cpuid >= 4) - { - unsigned int family = cpu_features->family; - unsigned int model = cpu_features->model; - - int i = 0; - - /* Query until cache level 2 and 3 are enumerated. */ - int check = 0x1 | (threads_l3 == 0) << 1; - do - { - __cpuid_count (4, i++, eax, ebx, ecx, edx); - - /* There seems to be a bug in at least some Pentium Ds - which sometimes fail to iterate all cache parameters. - Do not loop indefinitely here, stop in this case and - assume there is no such information. */ - if ((eax & 0x1f) == 0) - goto intel_bug_no_cache_info; - - switch ((eax >> 5) & 0x7) - { - default: - break; - case 2: - if ((check & 0x1)) - { - /* Get maximum number of logical processors - sharing L2 cache. */ - threads_l2 = (eax >> 14) & 0x3ff; - check &= ~0x1; - } - break; - case 3: - if ((check & (0x1 << 1))) - { - /* Get maximum number of logical processors - sharing L3 cache. */ - threads_l3 = (eax >> 14) & 0x3ff; - - /* Check if L2 and L3 caches are inclusive. */ - inclusive_cache = (edx & 0x2) != 0; - check &= ~(0x1 << 1); - } - break; - } - } - while (check); - - /* If max_cpuid >= 11, THREADS_L2/THREADS_L3 are the maximum - numbers of addressable IDs for logical processors sharing - the cache, instead of the maximum number of threads - sharing the cache. */ - if (max_cpuid >= 11) - { - /* Find the number of logical processors shipped in - one core and apply count mask. */ - i = 0; - - /* Count SMT only if there is L3 cache. Always count - core if there is no L3 cache. */ - int count = ((threads_l2 > 0 && level == 3) - | ((threads_l3 > 0 - || (threads_l2 > 0 && level == 2)) << 1)); - - while (count) - { - __cpuid_count (11, i++, eax, ebx, ecx, edx); - - int shipped = ebx & 0xff; - int type = ecx & 0xff00; - if (shipped == 0 || type == 0) - break; - else if (type == 0x100) - { - /* Count SMT. */ - if ((count & 0x1)) - { - int count_mask; - - /* Compute count mask. */ - asm ("bsr %1, %0" - : "=r" (count_mask) : "g" (threads_l2)); - count_mask = ~(-1 << (count_mask + 1)); - threads_l2 = (shipped - 1) & count_mask; - count &= ~0x1; - } - } - else if (type == 0x200) - { - /* Count core. */ - if ((count & (0x1 << 1))) - { - int count_mask; - int threads_core - = (level == 2 ? threads_l2 : threads_l3); - - /* Compute count mask. */ - asm ("bsr %1, %0" - : "=r" (count_mask) : "g" (threads_core)); - count_mask = ~(-1 << (count_mask + 1)); - threads_core = (shipped - 1) & count_mask; - if (level == 2) - threads_l2 = threads_core; - else - threads_l3 = threads_core; - count &= ~(0x1 << 1); - } - } - } - } - if (threads_l2 > 0) - threads_l2 += 1; - if (threads_l3 > 0) - threads_l3 += 1; - if (level == 2) - { - if (threads_l2) - { - threads = threads_l2; - if (threads > 2 && family == 6) - switch (model) - { - case 0x37: - case 0x4a: - case 0x4d: - case 0x5a: - case 0x5d: - /* Silvermont has L2 cache shared by 2 cores. */ - threads = 2; - break; - default: - break; - } - } - } - else if (threads_l3) - threads = threads_l3; - } - else - { -intel_bug_no_cache_info: - /* Assume that all logical threads share the highest cache - level. */ - - threads - = ((cpu_features->cpuid[COMMON_CPUID_INDEX_1].ebx - >> 16) & 0xff); - } - - /* Cap usage of highest cache level to the number of supported - threads. */ - if (shared > 0 && threads > 0) - shared /= threads; - } - - /* Account for non-inclusive L2 and L3 caches. */ - if (!inclusive_cache) - { - if (threads_l2 > 0) - core /= threads_l2; - shared += core; - } - } - else if (cpu_features->kind == arch_kind_amd) - { - data = handle_amd (_SC_LEVEL1_DCACHE_SIZE); - long int core = handle_amd (_SC_LEVEL2_CACHE_SIZE); - shared = handle_amd (_SC_LEVEL3_CACHE_SIZE); - - /* Get maximum extended function. */ - __cpuid (0x80000000, max_cpuid_ex, ebx, ecx, edx); - - if (shared <= 0) - /* No shared L3 cache. All we have is the L2 cache. */ - shared = core; - else - { - /* Figure out the number of logical threads that share L3. */ - if (max_cpuid_ex >= 0x80000008) - { - /* Get width of APIC ID. */ - __cpuid (0x80000008, max_cpuid_ex, ebx, ecx, edx); - threads = 1 << ((ecx >> 12) & 0x0f); - } - - if (threads == 0) - { - /* If APIC ID width is not available, use logical - processor count. */ - __cpuid (0x00000001, max_cpuid_ex, ebx, ecx, edx); - - if ((edx & (1 << 28)) != 0) - threads = (ebx >> 16) & 0xff; - } - - /* Cap usage of highest cache level to the number of - supported threads. */ - if (threads > 0) - shared /= threads; - - /* Account for exclusive L2 and L3 caches. */ - shared += core; - } - -#ifndef DISABLE_PREFETCHW - if (max_cpuid_ex >= 0x80000001) - { - __cpuid (0x80000001, eax, ebx, ecx, edx); - /* PREFETCHW || 3DNow! */ - if ((ecx & 0x100) || (edx & 0x80000000)) - __x86_prefetchw = -1; - } -#endif - } - - if (data > 0) - { - __x86_raw_data_cache_size_half = data / 2; - __x86_raw_data_cache_size = data; - /* Round data cache size to multiple of 256 bytes. */ - data = data & ~255L; - __x86_data_cache_size_half = data / 2; - __x86_data_cache_size = data; - } - - if (shared > 0) - { - __x86_raw_shared_cache_size_half = shared / 2; - __x86_raw_shared_cache_size = shared; - /* Round shared cache size to multiple of 256 bytes. */ - shared = shared & ~255L; - __x86_shared_cache_size_half = shared / 2; - __x86_shared_cache_size = shared; - } - - /* The large memcpy micro benchmark in glibc shows that 6 times of - shared cache size is the approximate value above which non-temporal - store becomes faster on a 8-core processor. This is the 3/4 of the - total shared cache size. */ - __x86_shared_non_temporal_threshold - = __x86_shared_cache_size * threads * 3 / 4; -} - -#endif diff --git a/sysdeps/x86/cpu-features-offsets.sym b/sysdeps/x86/cpu-features-offsets.sym deleted file mode 100644 index f6739fae81..0000000000 --- a/sysdeps/x86/cpu-features-offsets.sym +++ /dev/null @@ -1,23 +0,0 @@ -#define SHARED 1 - -#include - -#define rtld_global_ro_offsetof(mem) offsetof (struct rtld_global_ro, mem) - -RTLD_GLOBAL_RO_DL_X86_CPU_FEATURES_OFFSET rtld_global_ro_offsetof (_dl_x86_cpu_features) - -CPU_FEATURES_SIZE sizeof (struct cpu_features) -CPUID_OFFSET offsetof (struct cpu_features, cpuid) -CPUID_SIZE sizeof (struct cpuid_registers) -CPUID_EAX_OFFSET offsetof (struct cpuid_registers, eax) -CPUID_EBX_OFFSET offsetof (struct cpuid_registers, ebx) -CPUID_ECX_OFFSET offsetof (struct cpuid_registers, ecx) -CPUID_EDX_OFFSET offsetof (struct cpuid_registers, edx) -FAMILY_OFFSET offsetof (struct cpu_features, family) -MODEL_OFFSET offsetof (struct cpu_features, model) -FEATURE_OFFSET offsetof (struct cpu_features, feature) -FEATURE_SIZE sizeof (unsigned int) - -COMMON_CPUID_INDEX_1 -COMMON_CPUID_INDEX_7 -FEATURE_INDEX_1 diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c deleted file mode 100644 index 4288001cdd..0000000000 --- a/sysdeps/x86/cpu-features.c +++ /dev/null @@ -1,363 +0,0 @@ -/* Initialize CPU feature data. - This file is part of the GNU C Library. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static void -get_common_indeces (struct cpu_features *cpu_features, - unsigned int *family, unsigned int *model, - unsigned int *extended_model, unsigned int *stepping) -{ - if (family) - { - unsigned int eax; - __cpuid (1, eax, cpu_features->cpuid[COMMON_CPUID_INDEX_1].ebx, - cpu_features->cpuid[COMMON_CPUID_INDEX_1].ecx, - cpu_features->cpuid[COMMON_CPUID_INDEX_1].edx); - cpu_features->cpuid[COMMON_CPUID_INDEX_1].eax = eax; - *family = (eax >> 8) & 0x0f; - *model = (eax >> 4) & 0x0f; - *extended_model = (eax >> 12) & 0xf0; - *stepping = eax & 0x0f; - if (*family == 0x0f) - { - *family += (eax >> 20) & 0xff; - *model += *extended_model; - } - } - - if (cpu_features->max_cpuid >= 7) - __cpuid_count (7, 0, - cpu_features->cpuid[COMMON_CPUID_INDEX_7].eax, - cpu_features->cpuid[COMMON_CPUID_INDEX_7].ebx, - cpu_features->cpuid[COMMON_CPUID_INDEX_7].ecx, - cpu_features->cpuid[COMMON_CPUID_INDEX_7].edx); - - /* Can we call xgetbv? */ - if (CPU_FEATURES_CPU_P (cpu_features, OSXSAVE)) - { - unsigned int xcrlow; - unsigned int xcrhigh; - asm ("xgetbv" : "=a" (xcrlow), "=d" (xcrhigh) : "c" (0)); - /* Is YMM and XMM state usable? */ - if ((xcrlow & (bit_YMM_state | bit_XMM_state)) == - (bit_YMM_state | bit_XMM_state)) - { - /* Determine if AVX is usable. */ - if (CPU_FEATURES_CPU_P (cpu_features, AVX)) - { - cpu_features->feature[index_arch_AVX_Usable] - |= bit_arch_AVX_Usable; - /* The following features depend on AVX being usable. */ - /* Determine if AVX2 is usable. */ - if (CPU_FEATURES_CPU_P (cpu_features, AVX2)) - cpu_features->feature[index_arch_AVX2_Usable] - |= bit_arch_AVX2_Usable; - /* Determine if FMA is usable. */ - if (CPU_FEATURES_CPU_P (cpu_features, FMA)) - cpu_features->feature[index_arch_FMA_Usable] - |= bit_arch_FMA_Usable; - } - - /* Check if OPMASK state, upper 256-bit of ZMM0-ZMM15 and - ZMM16-ZMM31 state are enabled. */ - if ((xcrlow & (bit_Opmask_state | bit_ZMM0_15_state - | bit_ZMM16_31_state)) == - (bit_Opmask_state | bit_ZMM0_15_state | bit_ZMM16_31_state)) - { - /* Determine if AVX512F is usable. */ - if (CPU_FEATURES_CPU_P (cpu_features, AVX512F)) - { - cpu_features->feature[index_arch_AVX512F_Usable] - |= bit_arch_AVX512F_Usable; - /* Determine if AVX512DQ is usable. */ - if (CPU_FEATURES_CPU_P (cpu_features, AVX512DQ)) - cpu_features->feature[index_arch_AVX512DQ_Usable] - |= bit_arch_AVX512DQ_Usable; - } - } - } - } -} - -static inline void -init_cpu_features (struct cpu_features *cpu_features) -{ - unsigned int ebx, ecx, edx; - unsigned int family = 0; - unsigned int model = 0; - enum cpu_features_kind kind; - -#if !HAS_CPUID - if (__get_cpuid_max (0, 0) == 0) - { - kind = arch_kind_other; - goto no_cpuid; - } -#endif - - __cpuid (0, cpu_features->max_cpuid, ebx, ecx, edx); - - /* This spells out "GenuineIntel". */ - if (ebx == 0x756e6547 && ecx == 0x6c65746e && edx == 0x49656e69) - { - unsigned int extended_model, stepping; - - kind = arch_kind_intel; - - get_common_indeces (cpu_features, &family, &model, &extended_model, - &stepping); - - if (family == 0x06) - { - model += extended_model; - switch (model) - { - case 0x1c: - case 0x26: - /* BSF is slow on Atom. */ - cpu_features->feature[index_arch_Slow_BSF] - |= bit_arch_Slow_BSF; - break; - - case 0x57: - /* Knights Landing. Enable Silvermont optimizations. */ - - case 0x5c: - case 0x5f: - /* Unaligned load versions are faster than SSSE3 - on Goldmont. */ - - case 0x4c: - /* Airmont is a die shrink of Silvermont. */ - - case 0x37: - case 0x4a: - case 0x4d: - case 0x5a: - case 0x5d: - /* Unaligned load versions are faster than SSSE3 - on Silvermont. */ -#if index_arch_Fast_Unaligned_Load != index_arch_Prefer_PMINUB_for_stringop -# error index_arch_Fast_Unaligned_Load != index_arch_Prefer_PMINUB_for_stringop -#endif -#if index_arch_Fast_Unaligned_Load != index_arch_Slow_SSE4_2 -# error index_arch_Fast_Unaligned_Load != index_arch_Slow_SSE4_2 -#endif -#if index_arch_Fast_Unaligned_Load != index_arch_Fast_Unaligned_Copy -# error index_arch_Fast_Unaligned_Load != index_arch_Fast_Unaligned_Copy -#endif - cpu_features->feature[index_arch_Fast_Unaligned_Load] - |= (bit_arch_Fast_Unaligned_Load - | bit_arch_Fast_Unaligned_Copy - | bit_arch_Prefer_PMINUB_for_stringop - | bit_arch_Slow_SSE4_2); - break; - - default: - /* Unknown family 0x06 processors. Assuming this is one - of Core i3/i5/i7 processors if AVX is available. */ - if (!CPU_FEATURES_CPU_P (cpu_features, AVX)) - break; - - case 0x1a: - case 0x1e: - case 0x1f: - case 0x25: - case 0x2c: - case 0x2e: - case 0x2f: - /* Rep string instructions, unaligned load, unaligned copy, - and pminub are fast on Intel Core i3, i5 and i7. */ -#if index_arch_Fast_Rep_String != index_arch_Fast_Unaligned_Load -# error index_arch_Fast_Rep_String != index_arch_Fast_Unaligned_Load -#endif -#if index_arch_Fast_Rep_String != index_arch_Prefer_PMINUB_for_stringop -# error index_arch_Fast_Rep_String != index_arch_Prefer_PMINUB_for_stringop -#endif -#if index_arch_Fast_Rep_String != index_arch_Fast_Unaligned_Copy -# error index_arch_Fast_Rep_String != index_arch_Fast_Unaligned_Copy -#endif - cpu_features->feature[index_arch_Fast_Rep_String] - |= (bit_arch_Fast_Rep_String - | bit_arch_Fast_Unaligned_Load - | bit_arch_Fast_Unaligned_Copy - | bit_arch_Prefer_PMINUB_for_stringop); - break; - - case 0x3f: - /* Xeon E7 v3 with stepping >= 4 has working TSX. */ - if (stepping >= 4) - break; - case 0x3c: - case 0x45: - case 0x46: - /* Disable Intel TSX on Haswell processors (except Xeon E7 v3 - with stepping >= 4) to avoid TSX on kernels that weren't - updated with the latest microcode package (which disables - broken feature by default). */ - cpu_features->cpuid[index_cpu_RTM].reg_RTM &= ~bit_cpu_RTM; - break; - } - } - - /* Unaligned load with 256-bit AVX registers are faster on - Intel processors with AVX2. */ - if (CPU_FEATURES_ARCH_P (cpu_features, AVX2_Usable)) - cpu_features->feature[index_arch_AVX_Fast_Unaligned_Load] - |= bit_arch_AVX_Fast_Unaligned_Load; - - /* Since AVX512ER is unique to Xeon Phi, set Prefer_No_VZEROUPPER - if AVX512ER is available. Don't use AVX512 to avoid lower CPU - frequency if AVX512ER isn't available. */ - if (CPU_FEATURES_CPU_P (cpu_features, AVX512ER)) - cpu_features->feature[index_arch_Prefer_No_VZEROUPPER] - |= bit_arch_Prefer_No_VZEROUPPER; - else - cpu_features->feature[index_arch_Prefer_No_AVX512] - |= bit_arch_Prefer_No_AVX512; - - /* To avoid SSE transition penalty, use _dl_runtime_resolve_slow. - If XGETBV suports ECX == 1, use _dl_runtime_resolve_opt. */ - cpu_features->feature[index_arch_Use_dl_runtime_resolve_slow] - |= bit_arch_Use_dl_runtime_resolve_slow; - if (cpu_features->max_cpuid >= 0xd) - { - unsigned int eax; - - __cpuid_count (0xd, 1, eax, ebx, ecx, edx); - if ((eax & (1 << 2)) != 0) - cpu_features->feature[index_arch_Use_dl_runtime_resolve_opt] - |= bit_arch_Use_dl_runtime_resolve_opt; - } - } - /* This spells out "AuthenticAMD". */ - else if (ebx == 0x68747541 && ecx == 0x444d4163 && edx == 0x69746e65) - { - unsigned int extended_model, stepping; - - kind = arch_kind_amd; - - get_common_indeces (cpu_features, &family, &model, &extended_model, - &stepping); - - ecx = cpu_features->cpuid[COMMON_CPUID_INDEX_1].ecx; - - unsigned int eax; - __cpuid (0x80000000, eax, ebx, ecx, edx); - if (eax >= 0x80000001) - __cpuid (0x80000001, - cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].eax, - cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].ebx, - cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].ecx, - cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].edx); - - if (HAS_ARCH_FEATURE (AVX_Usable)) - { - /* Since the FMA4 bit is in COMMON_CPUID_INDEX_80000001 and - FMA4 requires AVX, determine if FMA4 is usable here. */ - if (CPU_FEATURES_CPU_P (cpu_features, FMA4)) - cpu_features->feature[index_arch_FMA4_Usable] - |= bit_arch_FMA4_Usable; - } - - if (family == 0x15) - { -#if index_arch_Fast_Unaligned_Load != index_arch_Fast_Copy_Backward -# error index_arch_Fast_Unaligned_Load != index_arch_Fast_Copy_Backward -#endif - /* "Excavator" */ - if (model >= 0x60 && model <= 0x7f) - cpu_features->feature[index_arch_Fast_Unaligned_Load] - |= (bit_arch_Fast_Unaligned_Load - | bit_arch_Fast_Copy_Backward); - } - } - else - { - kind = arch_kind_other; - get_common_indeces (cpu_features, NULL, NULL, NULL, NULL); - } - - /* Support i586 if CX8 is available. */ - if (CPU_FEATURES_CPU_P (cpu_features, CX8)) - cpu_features->feature[index_arch_I586] |= bit_arch_I586; - - /* Support i686 if CMOV is available. */ - if (CPU_FEATURES_CPU_P (cpu_features, CMOV)) - cpu_features->feature[index_arch_I686] |= bit_arch_I686; - -#if !HAS_CPUID -no_cpuid: -#endif - - cpu_features->family = family; - cpu_features->model = model; - cpu_features->kind = kind; - - /* Reuse dl_platform, dl_hwcap and dl_hwcap_mask for x86. */ - GLRO(dl_platform) = NULL; - GLRO(dl_hwcap) = 0; -#if !HAVE_TUNABLES && defined SHARED - /* The glibc.tune.hwcap_mask tunable is initialized already, so no need to do - this. */ - GLRO(dl_hwcap_mask) = HWCAP_IMPORTANT; -#endif - -#ifdef __x86_64__ - if (cpu_features->kind == arch_kind_intel) - { - if (CPU_FEATURES_ARCH_P (cpu_features, AVX512F_Usable) - && CPU_FEATURES_CPU_P (cpu_features, AVX512CD)) - { - if (CPU_FEATURES_CPU_P (cpu_features, AVX512ER)) - { - if (CPU_FEATURES_CPU_P (cpu_features, AVX512PF)) - GLRO(dl_platform) = "xeon_phi"; - } - else - { - if (CPU_FEATURES_CPU_P (cpu_features, AVX512BW) - && CPU_FEATURES_CPU_P (cpu_features, AVX512DQ) - && CPU_FEATURES_CPU_P (cpu_features, AVX512VL)) - GLRO(dl_hwcap) |= HWCAP_X86_AVX512_1; - } - } - - if (GLRO(dl_platform) == NULL - && CPU_FEATURES_ARCH_P (cpu_features, AVX2_Usable) - && CPU_FEATURES_ARCH_P (cpu_features, FMA_Usable) - && CPU_FEATURES_CPU_P (cpu_features, BMI1) - && CPU_FEATURES_CPU_P (cpu_features, BMI2) - && CPU_FEATURES_CPU_P (cpu_features, LZCNT) - && CPU_FEATURES_CPU_P (cpu_features, MOVBE) - && CPU_FEATURES_CPU_P (cpu_features, POPCNT)) - GLRO(dl_platform) = "haswell"; - } -#else - if (CPU_FEATURES_CPU_P (cpu_features, SSE2)) - GLRO(dl_hwcap) |= HWCAP_X86_SSE2; - - if (CPU_FEATURES_ARCH_P (cpu_features, I686)) - GLRO(dl_platform) = "i686"; - else if (CPU_FEATURES_ARCH_P (cpu_features, I586)) - GLRO(dl_platform) = "i586"; -#endif -} diff --git a/sysdeps/x86/cpu-features.h b/sysdeps/x86/cpu-features.h deleted file mode 100644 index f2329ea696..0000000000 --- a/sysdeps/x86/cpu-features.h +++ /dev/null @@ -1,355 +0,0 @@ -/* This file is part of the GNU C Library. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef cpu_features_h -#define cpu_features_h - -#define bit_arch_Fast_Rep_String (1 << 0) -#define bit_arch_Fast_Copy_Backward (1 << 1) -#define bit_arch_Slow_BSF (1 << 2) -#define bit_arch_Fast_Unaligned_Load (1 << 4) -#define bit_arch_Prefer_PMINUB_for_stringop (1 << 5) -#define bit_arch_AVX_Usable (1 << 6) -#define bit_arch_FMA_Usable (1 << 7) -#define bit_arch_FMA4_Usable (1 << 8) -#define bit_arch_Slow_SSE4_2 (1 << 9) -#define bit_arch_AVX2_Usable (1 << 10) -#define bit_arch_AVX_Fast_Unaligned_Load (1 << 11) -#define bit_arch_AVX512F_Usable (1 << 12) -#define bit_arch_AVX512DQ_Usable (1 << 13) -#define bit_arch_I586 (1 << 14) -#define bit_arch_I686 (1 << 15) -#define bit_arch_Prefer_MAP_32BIT_EXEC (1 << 16) -#define bit_arch_Prefer_No_VZEROUPPER (1 << 17) -#define bit_arch_Fast_Unaligned_Copy (1 << 18) -#define bit_arch_Prefer_ERMS (1 << 19) -#define bit_arch_Use_dl_runtime_resolve_opt (1 << 20) -#define bit_arch_Use_dl_runtime_resolve_slow (1 << 21) -#define bit_arch_Prefer_No_AVX512 (1 << 22) - -/* CPUID Feature flags. */ - -/* COMMON_CPUID_INDEX_1. */ -#define bit_cpu_CX8 (1 << 8) -#define bit_cpu_CMOV (1 << 15) -#define bit_cpu_SSE (1 << 25) -#define bit_cpu_SSE2 (1 << 26) -#define bit_cpu_SSSE3 (1 << 9) -#define bit_cpu_SSE4_1 (1 << 19) -#define bit_cpu_SSE4_2 (1 << 20) -#define bit_cpu_OSXSAVE (1 << 27) -#define bit_cpu_AVX (1 << 28) -#define bit_cpu_POPCOUNT (1 << 23) -#define bit_cpu_FMA (1 << 12) -#define bit_cpu_FMA4 (1 << 16) -#define bit_cpu_HTT (1 << 28) -#define bit_cpu_LZCNT (1 << 5) -#define bit_cpu_MOVBE (1 << 22) -#define bit_cpu_POPCNT (1 << 23) - -/* COMMON_CPUID_INDEX_7. */ -#define bit_cpu_BMI1 (1 << 3) -#define bit_cpu_BMI2 (1 << 8) -#define bit_cpu_ERMS (1 << 9) -#define bit_cpu_RTM (1 << 11) -#define bit_cpu_AVX2 (1 << 5) -#define bit_cpu_AVX512F (1 << 16) -#define bit_cpu_AVX512DQ (1 << 17) -#define bit_cpu_AVX512PF (1 << 26) -#define bit_cpu_AVX512ER (1 << 27) -#define bit_cpu_AVX512CD (1 << 28) -#define bit_cpu_AVX512BW (1 << 30) -#define bit_cpu_AVX512VL (1u << 31) - -/* XCR0 Feature flags. */ -#define bit_XMM_state (1 << 1) -#define bit_YMM_state (1 << 2) -#define bit_Opmask_state (1 << 5) -#define bit_ZMM0_15_state (1 << 6) -#define bit_ZMM16_31_state (1 << 7) - -/* The integer bit array index for the first set of internal feature bits. */ -#define FEATURE_INDEX_1 0 - -/* The current maximum size of the feature integer bit array. */ -#define FEATURE_INDEX_MAX 1 - -#ifdef __ASSEMBLER__ - -# include - -# define index_cpu_CX8 COMMON_CPUID_INDEX_1*CPUID_SIZE+CPUID_EDX_OFFSET -# define index_cpu_CMOV COMMON_CPUID_INDEX_1*CPUID_SIZE+CPUID_EDX_OFFSET -# define index_cpu_SSE COMMON_CPUID_INDEX_1*CPUID_SIZE+CPUID_EDX_OFFSET -# define index_cpu_SSE2 COMMON_CPUID_INDEX_1*CPUID_SIZE+CPUID_EDX_OFFSET -# define index_cpu_SSSE3 COMMON_CPUID_INDEX_1*CPUID_SIZE+CPUID_ECX_OFFSET -# define index_cpu_SSE4_1 COMMON_CPUID_INDEX_1*CPUID_SIZE+CPUID_ECX_OFFSET -# define index_cpu_SSE4_2 COMMON_CPUID_INDEX_1*CPUID_SIZE+CPUID_ECX_OFFSET -# define index_cpu_AVX COMMON_CPUID_INDEX_1*CPUID_SIZE+CPUID_ECX_OFFSET -# define index_cpu_AVX2 COMMON_CPUID_INDEX_7*CPUID_SIZE+CPUID_EBX_OFFSET -# define index_cpu_ERMS COMMON_CPUID_INDEX_7*CPUID_SIZE+CPUID_EBX_OFFSET -# define index_cpu_MOVBE COMMON_CPUID_INDEX_1*CPUID_SIZE+CPUID_ECX_OFFSET - -# define index_arch_Fast_Rep_String FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_Fast_Copy_Backward FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_Slow_BSF FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_Fast_Unaligned_Load FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_Prefer_PMINUB_for_stringop FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_AVX_Usable FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_FMA_Usable FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_FMA4_Usable FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_Slow_SSE4_2 FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_AVX2_Usable FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_AVX_Fast_Unaligned_Load FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_AVX512F_Usable FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_AVX512DQ_Usable FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_I586 FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_I686 FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_Prefer_MAP_32BIT_EXEC FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_Prefer_No_VZEROUPPER FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_Fast_Unaligned_Copy FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_Prefer_ERMS FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_Use_dl_runtime_resolve_opt FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_Use_dl_runtime_resolve_slow FEATURE_INDEX_1*FEATURE_SIZE -# define index_arch_Prefer_No_AVX512 FEATURE_INDEX_1*FEATURE_SIZE - - -# if defined (_LIBC) && !IS_IN (nonlib) -# ifdef __x86_64__ -# ifdef SHARED -# if IS_IN (rtld) -# define LOAD_RTLD_GLOBAL_RO_RDX -# define HAS_FEATURE(offset, field, name) \ - testl $(bit_##field##_##name), \ - _rtld_local_ro+offset+(index_##field##_##name)(%rip) -# else -# define LOAD_RTLD_GLOBAL_RO_RDX \ - mov _rtld_global_ro@GOTPCREL(%rip), %RDX_LP -# define HAS_FEATURE(offset, field, name) \ - testl $(bit_##field##_##name), \ - RTLD_GLOBAL_RO_DL_X86_CPU_FEATURES_OFFSET+offset+(index_##field##_##name)(%rdx) -# endif -# else /* SHARED */ -# define LOAD_RTLD_GLOBAL_RO_RDX -# define HAS_FEATURE(offset, field, name) \ - testl $(bit_##field##_##name), \ - _dl_x86_cpu_features+offset+(index_##field##_##name)(%rip) -# endif /* !SHARED */ -# else /* __x86_64__ */ -# ifdef SHARED -# define LOAD_FUNC_GOT_EAX(func) \ - leal func@GOTOFF(%edx), %eax -# if IS_IN (rtld) -# define LOAD_GOT_AND_RTLD_GLOBAL_RO \ - LOAD_PIC_REG(dx) -# define HAS_FEATURE(offset, field, name) \ - testl $(bit_##field##_##name), \ - offset+(index_##field##_##name)+_rtld_local_ro@GOTOFF(%edx) -# else -# define LOAD_GOT_AND_RTLD_GLOBAL_RO \ - LOAD_PIC_REG(dx); \ - mov _rtld_global_ro@GOT(%edx), %ecx -# define HAS_FEATURE(offset, field, name) \ - testl $(bit_##field##_##name), \ - RTLD_GLOBAL_RO_DL_X86_CPU_FEATURES_OFFSET+offset+(index_##field##_##name)(%ecx) -# endif -# else /* SHARED */ -# define LOAD_FUNC_GOT_EAX(func) \ - leal func, %eax -# define LOAD_GOT_AND_RTLD_GLOBAL_RO -# define HAS_FEATURE(offset, field, name) \ - testl $(bit_##field##_##name), \ - _dl_x86_cpu_features+offset+(index_##field##_##name) -# endif /* !SHARED */ -# endif /* !__x86_64__ */ -# else /* _LIBC && !nonlib */ -# error "Sorry, is unimplemented for assembler" -# endif /* !_LIBC || nonlib */ - -/* HAS_* evaluates to true if we may use the feature at runtime. */ -# define HAS_CPU_FEATURE(name) HAS_FEATURE (CPUID_OFFSET, cpu, name) -# define HAS_ARCH_FEATURE(name) HAS_FEATURE (FEATURE_OFFSET, arch, name) - -#else /* __ASSEMBLER__ */ - -enum - { - COMMON_CPUID_INDEX_1 = 0, - COMMON_CPUID_INDEX_7, - COMMON_CPUID_INDEX_80000001, /* for AMD */ - /* Keep the following line at the end. */ - COMMON_CPUID_INDEX_MAX - }; - -struct cpu_features -{ - enum cpu_features_kind - { - arch_kind_unknown = 0, - arch_kind_intel, - arch_kind_amd, - arch_kind_other - } kind; - int max_cpuid; - struct cpuid_registers - { - unsigned int eax; - unsigned int ebx; - unsigned int ecx; - unsigned int edx; - } cpuid[COMMON_CPUID_INDEX_MAX]; - unsigned int family; - unsigned int model; - unsigned int feature[FEATURE_INDEX_MAX]; -}; - -/* Used from outside of glibc to get access to the CPU features - structure. */ -extern const struct cpu_features *__get_cpu_features (void) - __attribute__ ((const)); - -# if defined (_LIBC) && !IS_IN (nonlib) -/* Unused for x86. */ -# define INIT_ARCH() -# define __get_cpu_features() (&GLRO(dl_x86_cpu_features)) -# endif - - -/* Only used directly in cpu-features.c. */ -# define CPU_FEATURES_CPU_P(ptr, name) \ - ((ptr->cpuid[index_cpu_##name].reg_##name & (bit_cpu_##name)) != 0) -# define CPU_FEATURES_ARCH_P(ptr, name) \ - ((ptr->feature[index_arch_##name] & (bit_arch_##name)) != 0) - -/* HAS_* evaluates to true if we may use the feature at runtime. */ -# define HAS_CPU_FEATURE(name) \ - CPU_FEATURES_CPU_P (__get_cpu_features (), name) -# define HAS_ARCH_FEATURE(name) \ - CPU_FEATURES_ARCH_P (__get_cpu_features (), name) - -# define index_cpu_CX8 COMMON_CPUID_INDEX_1 -# define index_cpu_CMOV COMMON_CPUID_INDEX_1 -# define index_cpu_SSE COMMON_CPUID_INDEX_1 -# define index_cpu_SSE2 COMMON_CPUID_INDEX_1 -# define index_cpu_SSSE3 COMMON_CPUID_INDEX_1 -# define index_cpu_SSE4_1 COMMON_CPUID_INDEX_1 -# define index_cpu_SSE4_2 COMMON_CPUID_INDEX_1 -# define index_cpu_AVX COMMON_CPUID_INDEX_1 -# define index_cpu_AVX2 COMMON_CPUID_INDEX_7 -# define index_cpu_AVX512F COMMON_CPUID_INDEX_7 -# define index_cpu_AVX512DQ COMMON_CPUID_INDEX_7 -# define index_cpu_AVX512PF COMMON_CPUID_INDEX_7 -# define index_cpu_AVX512ER COMMON_CPUID_INDEX_7 -# define index_cpu_AVX512CD COMMON_CPUID_INDEX_7 -# define index_cpu_AVX512BW COMMON_CPUID_INDEX_7 -# define index_cpu_AVX512VL COMMON_CPUID_INDEX_7 -# define index_cpu_ERMS COMMON_CPUID_INDEX_7 -# define index_cpu_RTM COMMON_CPUID_INDEX_7 -# define index_cpu_FMA COMMON_CPUID_INDEX_1 -# define index_cpu_FMA4 COMMON_CPUID_INDEX_80000001 -# define index_cpu_POPCOUNT COMMON_CPUID_INDEX_1 -# define index_cpu_OSXSAVE COMMON_CPUID_INDEX_1 -# define index_cpu_HTT COMMON_CPUID_INDEX_1 -# define index_cpu_BMI1 COMMON_CPUID_INDEX_7 -# define index_cpu_BMI2 COMMON_CPUID_INDEX_7 -# define index_cpu_LZCNT COMMON_CPUID_INDEX_1 -# define index_cpu_MOVBE COMMON_CPUID_INDEX_1 -# define index_cpu_POPCNT COMMON_CPUID_INDEX_1 - -# define reg_CX8 edx -# define reg_CMOV edx -# define reg_SSE edx -# define reg_SSE2 edx -# define reg_SSSE3 ecx -# define reg_SSE4_1 ecx -# define reg_SSE4_2 ecx -# define reg_AVX ecx -# define reg_AVX2 ebx -# define reg_AVX512F ebx -# define reg_AVX512DQ ebx -# define reg_AVX512PF ebx -# define reg_AVX512ER ebx -# define reg_AVX512CD ebx -# define reg_AVX512BW ebx -# define reg_AVX512VL ebx -# define reg_ERMS ebx -# define reg_RTM ebx -# define reg_FMA ecx -# define reg_FMA4 ecx -# define reg_POPCOUNT ecx -# define reg_OSXSAVE ecx -# define reg_HTT edx -# define reg_BMI1 ebx -# define reg_BMI2 ebx -# define reg_LZCNT ecx -# define reg_MOVBE ecx -# define reg_POPCNT ecx - -# define index_arch_Fast_Rep_String FEATURE_INDEX_1 -# define index_arch_Fast_Copy_Backward FEATURE_INDEX_1 -# define index_arch_Slow_BSF FEATURE_INDEX_1 -# define index_arch_Fast_Unaligned_Load FEATURE_INDEX_1 -# define index_arch_Prefer_PMINUB_for_stringop FEATURE_INDEX_1 -# define index_arch_AVX_Usable FEATURE_INDEX_1 -# define index_arch_FMA_Usable FEATURE_INDEX_1 -# define index_arch_FMA4_Usable FEATURE_INDEX_1 -# define index_arch_Slow_SSE4_2 FEATURE_INDEX_1 -# define index_arch_AVX2_Usable FEATURE_INDEX_1 -# define index_arch_AVX_Fast_Unaligned_Load FEATURE_INDEX_1 -# define index_arch_AVX512F_Usable FEATURE_INDEX_1 -# define index_arch_AVX512DQ_Usable FEATURE_INDEX_1 -# define index_arch_I586 FEATURE_INDEX_1 -# define index_arch_I686 FEATURE_INDEX_1 -# define index_arch_Prefer_MAP_32BIT_EXEC FEATURE_INDEX_1 -# define index_arch_Prefer_No_VZEROUPPER FEATURE_INDEX_1 -# define index_arch_Fast_Unaligned_Copy FEATURE_INDEX_1 -# define index_arch_Prefer_ERMS FEATURE_INDEX_1 -# define index_arch_Use_dl_runtime_resolve_opt FEATURE_INDEX_1 -# define index_arch_Use_dl_runtime_resolve_slow FEATURE_INDEX_1 -# define index_arch_Prefer_No_AVX512 FEATURE_INDEX_1 - -#endif /* !__ASSEMBLER__ */ - -#ifdef __x86_64__ -# define HAS_CPUID 1 -#elif defined __i586__ || defined __pentium__ -# define HAS_CPUID 1 -# define HAS_I586 1 -# define HAS_I686 HAS_ARCH_FEATURE (I686) -#elif (defined __i686__ || defined __pentiumpro__ \ - || defined __pentium4__ || defined __nocona__ \ - || defined __atom__ || defined __core2__ \ - || defined __corei7__ || defined __corei7_avx__ \ - || defined __core_avx2__ || defined __nehalem__ \ - || defined __sandybridge__ || defined __haswell__ \ - || defined __knl__ || defined __bonnell__ \ - || defined __silvermont__ \ - || defined __k6__ || defined __k8__ \ - || defined __athlon__ || defined __amdfam10__ \ - || defined __bdver1__ || defined __bdver2__ \ - || defined __bdver3__ || defined __bdver4__ \ - || defined __btver1__ || defined __btver2__) -# define HAS_CPUID 1 -# define HAS_I586 1 -# define HAS_I686 1 -#else -# define HAS_CPUID 0 -# define HAS_I586 HAS_ARCH_FEATURE (I586) -# define HAS_I686 HAS_ARCH_FEATURE (I686) -#endif - -#endif /* cpu_features_h */ diff --git a/sysdeps/x86/dl-get-cpu-features.c b/sysdeps/x86/dl-get-cpu-features.c deleted file mode 100644 index c9bc6820aa..0000000000 --- a/sysdeps/x86/dl-get-cpu-features.c +++ /dev/null @@ -1,27 +0,0 @@ -/* This file is part of the GNU C Library. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include - -#undef __get_cpu_features - -const struct cpu_features * -__get_cpu_features (void) -{ - return &GLRO(dl_x86_cpu_features); -} diff --git a/sysdeps/x86/dl-hwcap.h b/sysdeps/x86/dl-hwcap.h deleted file mode 100644 index c95668415a..0000000000 --- a/sysdeps/x86/dl-hwcap.h +++ /dev/null @@ -1,75 +0,0 @@ -/* x86 version of hardware capability information handling macros. - Copyright (C) 2017 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_HWCAP_H -#define _DL_HWCAP_H - -#if IS_IN (ldconfig) -/* Since ldconfig processes both i386 and x86-64 libraries, it needs - to cover all platforms and hardware capabilities. */ -# define HWCAP_PLATFORMS_START 0 -# define HWCAP_PLATFORMS_COUNT 4 -# define HWCAP_START 0 -# define HWCAP_COUNT 2 -# define HWCAP_IMPORTANT (HWCAP_X86_SSE2 | HWCAP_X86_AVX512_1) -#elif defined __x86_64__ -/* For 64 bit, only cover x86-64 platforms and capabilities. */ -# define HWCAP_PLATFORMS_START 2 -# define HWCAP_PLATFORMS_COUNT 4 -# define HWCAP_START 1 -# define HWCAP_COUNT 2 -# define HWCAP_IMPORTANT (HWCAP_X86_AVX512_1) -#else -/* For 32 bit, only cover i586, i686 and SSE2. */ -# define HWCAP_PLATFORMS_START 0 -# define HWCAP_PLATFORMS_COUNT 2 -# define HWCAP_START 0 -# define HWCAP_COUNT 1 -# define HWCAP_IMPORTANT (HWCAP_X86_SSE2) -#endif - -enum -{ - HWCAP_X86_SSE2 = 1 << 0, - HWCAP_X86_AVX512_1 = 1 << 1 -}; - -static inline const char * -__attribute__ ((unused)) -_dl_hwcap_string (int idx) -{ - return GLRO(dl_x86_hwcap_flags)[idx]; -}; - -static inline int -__attribute__ ((unused, always_inline)) -_dl_string_hwcap (const char *str) -{ - int i; - - for (i = HWCAP_START; i < HWCAP_COUNT; i++) - { - if (strcmp (str, GLRO(dl_x86_hwcap_flags)[i]) == 0) - return i; - } - return -1; -}; - -/* We cannot provide a general printing function. */ -#define _dl_procinfo(type, word) -1 - -#endif /* dl-hwcap.h */ diff --git a/sysdeps/x86/dl-procinfo.c b/sysdeps/x86/dl-procinfo.c deleted file mode 100644 index 43ab8fe25b..0000000000 --- a/sysdeps/x86/dl-procinfo.c +++ /dev/null @@ -1,88 +0,0 @@ -/* Data for x86 version of processor capability information. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This information must be kept in sync with the _DL_HWCAP_COUNT, - HWCAP_PLATFORMS_START and HWCAP_PLATFORMS_COUNT definitions in - dl-hwcap.h. - - If anything should be added here check whether the size of each string - is still ok with the given array size. - - All the #ifdefs in the definitions are quite irritating but - necessary if we want to avoid duplicating the information. There - are three different modes: - - - PROCINFO_DECL is defined. This means we are only interested in - declarations. - - - PROCINFO_DECL is not defined: - - + if SHARED is defined the file is included in an array - initializer. The .element = { ... } syntax is needed. - - + if SHARED is not defined a normal array initialization is - needed. - */ - -#if !IS_IN (ldconfig) -# if !defined PROCINFO_DECL && defined SHARED - ._dl_x86_cpu_features -# else -PROCINFO_CLASS struct cpu_features _dl_x86_cpu_features -# endif -# ifndef PROCINFO_DECL -= { } -# endif -# if !defined SHARED || defined PROCINFO_DECL -; -# else -, -# endif -#endif - -#if !defined PROCINFO_DECL && defined SHARED - ._dl_x86_hwcap_flags -#else -PROCINFO_CLASS const char _dl_x86_hwcap_flags[2][9] -#endif -#ifndef PROCINFO_DECL -= { - "sse2", "avx512_1" - } -#endif -#if !defined SHARED || defined PROCINFO_DECL -; -#else -, -#endif - -#if !defined PROCINFO_DECL && defined SHARED - ._dl_x86_platforms -#else -PROCINFO_CLASS const char _dl_x86_platforms[4][9] -#endif -#ifndef PROCINFO_DECL -= { - "i586", "i686", "haswell", "xeon_phi" - } -#endif -#if !defined SHARED || defined PROCINFO_DECL -; -#else -, -#endif diff --git a/sysdeps/x86/dl-procinfo.h b/sysdeps/x86/dl-procinfo.h deleted file mode 100644 index 5feb1467e4..0000000000 --- a/sysdeps/x86/dl-procinfo.h +++ /dev/null @@ -1,48 +0,0 @@ -/* x86 version of processor capability information handling macros. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_PROCINFO_H -#define _DL_PROCINFO_H 1 -#include -#include - -#define _DL_HWCAP_COUNT HWCAP_COUNT -#define _DL_PLATFORMS_COUNT HWCAP_PLATFORMS_COUNT - -/* Start at 48 to reserve spaces for hardware capabilities. */ -#define _DL_FIRST_PLATFORM 48 -/* Mask to filter out platforms. */ -#define _DL_HWCAP_PLATFORM (((1ULL << _DL_PLATFORMS_COUNT) - 1) \ - << _DL_FIRST_PLATFORM) - -static inline int -__attribute__ ((unused, always_inline)) -_dl_string_platform (const char *str) -{ - int i; - - if (str != NULL) - for (i = HWCAP_PLATFORMS_START; i < HWCAP_PLATFORMS_COUNT; ++i) - { - if (strcmp (str, GLRO(dl_x86_platforms)[i]) == 0) - return _DL_FIRST_PLATFORM + i; - } - return -1; -}; - -#endif /* dl-procinfo.h */ diff --git a/sysdeps/x86/elide.h b/sysdeps/x86/elide.h deleted file mode 100644 index 53de41836e..0000000000 --- a/sysdeps/x86/elide.h +++ /dev/null @@ -1,119 +0,0 @@ -/* elide.h: Generic lock elision support. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ -#ifndef ELIDE_H -#define ELIDE_H 1 - -#include -#include -#include - - -/* Adapt elision with ADAPT_COUNT and STATUS and decide retries. */ - -static inline bool -elision_adapt(signed char *adapt_count, unsigned int status) -{ - if (status & _XABORT_RETRY) - return false; - if ((status & _XABORT_EXPLICIT) - && _XABORT_CODE (status) == _ABORT_LOCK_BUSY) - { - /* Right now we skip here. Better would be to wait a bit - and retry. This likely needs some spinning. Be careful - to avoid writing the lock. - Using relaxed MO and separate atomic accesses is sufficient because - adapt_count is just a hint. */ - if (atomic_load_relaxed (adapt_count) != __elision_aconf.skip_lock_busy) - atomic_store_relaxed (adapt_count, __elision_aconf.skip_lock_busy); - } - /* Internal abort. There is no chance for retry. - Use the normal locking and next time use lock. - Be careful to avoid writing to the lock. See above for MO. */ - else if (atomic_load_relaxed (adapt_count) - != __elision_aconf.skip_lock_internal_abort) - atomic_store_relaxed (adapt_count, - __elision_aconf.skip_lock_internal_abort); - return true; -} - -/* is_lock_free must be executed inside the transaction */ - -/* Returns true if lock defined by IS_LOCK_FREE was elided. - ADAPT_COUNT is a per-lock state variable; it must be accessed atomically - to avoid data races but is just a hint, so using relaxed MO and separate - atomic loads and stores instead of atomic read-modify-write operations is - sufficient. */ - -#define ELIDE_LOCK(adapt_count, is_lock_free) \ - ({ \ - int ret = 0; \ - \ - if (atomic_load_relaxed (&(adapt_count)) <= 0) \ - { \ - for (int i = __elision_aconf.retry_try_xbegin; i > 0; i--) \ - { \ - unsigned int status; \ - if ((status = _xbegin ()) == _XBEGIN_STARTED) \ - { \ - if (is_lock_free) \ - { \ - ret = 1; \ - break; \ - } \ - _xabort (_ABORT_LOCK_BUSY); \ - } \ - if (!elision_adapt (&(adapt_count), status)) \ - break; \ - } \ - } \ - else \ - atomic_store_relaxed (&(adapt_count), \ - atomic_load_relaxed (&(adapt_count)) - 1); \ - ret; \ - }) - -/* Returns true if lock defined by IS_LOCK_FREE was try-elided. - ADAPT_COUNT is a per-lock state variable. */ - -#define ELIDE_TRYLOCK(adapt_count, is_lock_free, write) ({ \ - int ret = 0; \ - if (__elision_aconf.retry_try_xbegin > 0) \ - { \ - if (write) \ - _xabort (_ABORT_NESTED_TRYLOCK); \ - ret = ELIDE_LOCK (adapt_count, is_lock_free); \ - } \ - ret; \ - }) - -/* Returns true if lock defined by IS_LOCK_FREE was elided. The call - to _xend crashes if the application incorrectly tries to unlock a - lock which has not been locked. */ - -#define ELIDE_UNLOCK(is_lock_free) \ - ({ \ - int ret = 0; \ - if (is_lock_free) \ - { \ - _xend (); \ - ret = 1; \ - } \ - ret; \ - }) - -#endif diff --git a/sysdeps/x86/fpu/Makefile b/sysdeps/x86/fpu/Makefile deleted file mode 100644 index a8047a4504..0000000000 --- a/sysdeps/x86/fpu/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -ifeq ($(subdir),math) -libm-support += powl_helper -tests += test-fenv-sse test-fenv-clear-sse test-fenv-x87 test-fenv-sse-2 \ - test-flt-eval-method-387 test-flt-eval-method-sse -CFLAGS-test-fenv-sse.c += -msse2 -mfpmath=sse -CFLAGS-test-fenv-clear-sse.c += -msse2 -mfpmath=sse -CFLAGS-test-fenv-sse-2.c += -msse2 -mfpmath=sse -CFLAGS-test-flt-eval-method-387.c += -fexcess-precision=standard -mfpmath=387 -CFLAGS-test-flt-eval-method-sse.c += -fexcess-precision=standard -msse2 \ - -mfpmath=sse -endif diff --git a/sysdeps/x86/fpu/bits/fenv.h b/sysdeps/x86/fpu/bits/fenv.h deleted file mode 100644 index fd7327902c..0000000000 --- a/sysdeps/x86/fpu/bits/fenv.h +++ /dev/null @@ -1,168 +0,0 @@ -/* Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FENV_H -# error "Never use directly; include instead." -#endif - -/* Define bits representing the exception. We use the bit positions - of the appropriate bits in the FPU control word. */ -enum - { - FE_INVALID = -#define FE_INVALID 0x01 - FE_INVALID, - __FE_DENORM = 0x02, - FE_DIVBYZERO = -#define FE_DIVBYZERO 0x04 - FE_DIVBYZERO, - FE_OVERFLOW = -#define FE_OVERFLOW 0x08 - FE_OVERFLOW, - FE_UNDERFLOW = -#define FE_UNDERFLOW 0x10 - FE_UNDERFLOW, - FE_INEXACT = -#define FE_INEXACT 0x20 - FE_INEXACT - }; - -#define FE_ALL_EXCEPT \ - (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) - -/* The ix87 FPU supports all of the four defined rounding modes. We - use again the bit positions in the FPU control word as the values - for the appropriate macros. */ -enum - { - FE_TONEAREST = -#define FE_TONEAREST 0 - FE_TONEAREST, - FE_DOWNWARD = -#define FE_DOWNWARD 0x400 - FE_DOWNWARD, - FE_UPWARD = -#define FE_UPWARD 0x800 - FE_UPWARD, - FE_TOWARDZERO = -#define FE_TOWARDZERO 0xc00 - FE_TOWARDZERO - }; - - -/* Type representing exception flags. */ -typedef unsigned short int fexcept_t; - - -/* Type representing floating-point environment. This structure - corresponds to the layout of the block written by the `fstenv' - instruction and has additional fields for the contents of the MXCSR - register as written by the `stmxcsr' instruction. */ -typedef struct - { - unsigned short int __control_word; - unsigned short int __glibc_reserved1; - unsigned short int __status_word; - unsigned short int __glibc_reserved2; - unsigned short int __tags; - unsigned short int __glibc_reserved3; - unsigned int __eip; - unsigned short int __cs_selector; - unsigned int __opcode:11; - unsigned int __glibc_reserved4:5; - unsigned int __data_offset; - unsigned short int __data_selector; - unsigned short int __glibc_reserved5; -#ifdef __x86_64__ - unsigned int __mxcsr; -#endif - } -fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1) - -#ifdef __USE_GNU -/* Floating-point environment where none of the exception is masked. */ -# define FE_NOMASK_ENV ((const fenv_t *) -2) -#endif - -#if __GLIBC_USE (IEC_60559_BFP_EXT) -/* Type representing floating-point control modes. */ -typedef struct - { - unsigned short int __control_word; - unsigned short int __glibc_reserved; - unsigned int __mxcsr; - } -femode_t; - -/* Default floating-point control modes. */ -# define FE_DFL_MODE ((const femode_t *) -1L) -#endif - - -#ifdef __USE_EXTERN_INLINES -__BEGIN_DECLS - -/* Optimized versions. */ -extern int __REDIRECT_NTH (__feraiseexcept_renamed, (int), feraiseexcept); -__extern_always_inline void -__NTH (__feraiseexcept_invalid_divbyzero (int __excepts)) -{ - if ((FE_INVALID & __excepts) != 0) - { - /* One example of an invalid operation is 0.0 / 0.0. */ - float __f = 0.0; - -# ifdef __SSE_MATH__ - __asm__ __volatile__ ("divss %0, %0 " : : "x" (__f)); -# else - __asm__ __volatile__ ("fdiv %%st, %%st(0); fwait" - : "=t" (__f) : "0" (__f)); -# endif - (void) &__f; - } - if ((FE_DIVBYZERO & __excepts) != 0) - { - float __f = 1.0; - float __g = 0.0; - -# ifdef __SSE_MATH__ - __asm__ __volatile__ ("divss %1, %0" : : "x" (__f), "x" (__g)); -# else - __asm__ __volatile__ ("fdivp %%st, %%st(1); fwait" - : "=t" (__f) : "0" (__f), "u" (__g) : "st(1)"); -# endif - (void) &__f; - } -} -__extern_inline int -__NTH (feraiseexcept (int __excepts)) -{ - if (__builtin_constant_p (__excepts) - && (__excepts & ~(FE_INVALID | FE_DIVBYZERO)) == 0) - { - __feraiseexcept_invalid_divbyzero (__excepts); - return 0; - } - - return __feraiseexcept_renamed (__excepts); -} - -__END_DECLS -#endif diff --git a/sysdeps/x86/fpu/bits/math-vector.h b/sysdeps/x86/fpu/bits/math-vector.h deleted file mode 100644 index 419af076a7..0000000000 --- a/sysdeps/x86/fpu/bits/math-vector.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Platform-specific SIMD declarations of math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never include directly;\ - include instead." -#endif - -/* Get default empty definitions for simd declarations. */ -#include - -#if defined __x86_64__ && defined __FAST_MATH__ -# if defined _OPENMP && _OPENMP >= 201307 -/* OpenMP case. */ -# define __DECL_SIMD_x86_64 _Pragma ("omp declare simd notinbranch") -# elif __GNUC_PREREQ (6,0) -/* W/o OpenMP use GCC 6.* __attribute__ ((__simd__)). */ -# define __DECL_SIMD_x86_64 __attribute__ ((__simd__ ("notinbranch"))) -# endif - -# ifdef __DECL_SIMD_x86_64 -# undef __DECL_SIMD_cos -# define __DECL_SIMD_cos __DECL_SIMD_x86_64 -# undef __DECL_SIMD_cosf -# define __DECL_SIMD_cosf __DECL_SIMD_x86_64 -# undef __DECL_SIMD_sin -# define __DECL_SIMD_sin __DECL_SIMD_x86_64 -# undef __DECL_SIMD_sinf -# define __DECL_SIMD_sinf __DECL_SIMD_x86_64 -# undef __DECL_SIMD_sincos -# define __DECL_SIMD_sincos __DECL_SIMD_x86_64 -# undef __DECL_SIMD_sincosf -# define __DECL_SIMD_sincosf __DECL_SIMD_x86_64 -# undef __DECL_SIMD_log -# define __DECL_SIMD_log __DECL_SIMD_x86_64 -# undef __DECL_SIMD_logf -# define __DECL_SIMD_logf __DECL_SIMD_x86_64 -# undef __DECL_SIMD_exp -# define __DECL_SIMD_exp __DECL_SIMD_x86_64 -# undef __DECL_SIMD_expf -# define __DECL_SIMD_expf __DECL_SIMD_x86_64 -# undef __DECL_SIMD_pow -# define __DECL_SIMD_pow __DECL_SIMD_x86_64 -# undef __DECL_SIMD_powf -# define __DECL_SIMD_powf __DECL_SIMD_x86_64 - -# endif -#endif diff --git a/sysdeps/x86/fpu/bits/mathinline.h b/sysdeps/x86/fpu/bits/mathinline.h deleted file mode 100644 index bcd99bdf74..0000000000 --- a/sysdeps/x86/fpu/bits/mathinline.h +++ /dev/null @@ -1,962 +0,0 @@ -/* Inline math functions for i387 and SSE. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_H -# error "Never use directly; include instead." -#endif - -#ifndef __extern_always_inline -# define __MATH_INLINE __inline -#else -# define __MATH_INLINE __extern_always_inline -#endif - - -#if defined __USE_ISOC99 && defined __GNUC__ && __GNUC__ >= 2 -/* GCC 2.97 and up have builtins that actually can be used. */ -# if !__GNUC_PREREQ (2,97) -/* ISO C99 defines some macros to perform unordered comparisons. The - ix87 FPU supports this with special opcodes and we should use them. - These must not be inline functions since we have to be able to handle - all floating-point types. */ -# undef isgreater -# undef isgreaterequal -# undef isless -# undef islessequal -# undef islessgreater -# undef isunordered -# ifdef __i686__ -/* For the PentiumPro and more recent processors we can provide - better code. */ -# define isgreater(x, y) \ - ({ register char __result; \ - __asm__ ("fucomip %%st(1), %%st; seta %%al" \ - : "=a" (__result) : "u" (y), "t" (x) : "cc", "st"); \ - __result; }) -# define isgreaterequal(x, y) \ - ({ register char __result; \ - __asm__ ("fucomip %%st(1), %%st; setae %%al" \ - : "=a" (__result) : "u" (y), "t" (x) : "cc", "st"); \ - __result; }) - -# define isless(x, y) \ - ({ register char __result; \ - __asm__ ("fucomip %%st(1), %%st; seta %%al" \ - : "=a" (__result) : "u" (x), "t" (y) : "cc", "st"); \ - __result; }) - -# define islessequal(x, y) \ - ({ register char __result; \ - __asm__ ("fucomip %%st(1), %%st; setae %%al" \ - : "=a" (__result) : "u" (x), "t" (y) : "cc", "st"); \ - __result; }) - -# define islessgreater(x, y) \ - ({ register char __result; \ - __asm__ ("fucomip %%st(1), %%st; setne %%al" \ - : "=a" (__result) : "u" (y), "t" (x) : "cc", "st"); \ - __result; }) - -# define isunordered(x, y) \ - ({ register char __result; \ - __asm__ ("fucomip %%st(1), %%st; setp %%al" \ - : "=a" (__result) : "u" (y), "t" (x) : "cc", "st"); \ - __result; }) -# else -/* This is the dumb, portable code for i386 and above. */ -# define isgreater(x, y) \ - ({ register char __result; \ - __asm__ ("fucompp; fnstsw; testb $0x45, %%ah; setz %%al" \ - : "=a" (__result) : "u" (y), "t" (x) : "cc", "st", "st(1)"); \ - __result; }) - -# define isgreaterequal(x, y) \ - ({ register char __result; \ - __asm__ ("fucompp; fnstsw; testb $0x05, %%ah; setz %%al" \ - : "=a" (__result) : "u" (y), "t" (x) : "cc", "st", "st(1)"); \ - __result; }) - -# define isless(x, y) \ - ({ register char __result; \ - __asm__ ("fucompp; fnstsw; testb $0x45, %%ah; setz %%al" \ - : "=a" (__result) : "u" (x), "t" (y) : "cc", "st", "st(1)"); \ - __result; }) - -# define islessequal(x, y) \ - ({ register char __result; \ - __asm__ ("fucompp; fnstsw; testb $0x05, %%ah; setz %%al" \ - : "=a" (__result) : "u" (x), "t" (y) : "cc", "st", "st(1)"); \ - __result; }) - -# define islessgreater(x, y) \ - ({ register char __result; \ - __asm__ ("fucompp; fnstsw; testb $0x44, %%ah; setz %%al" \ - : "=a" (__result) : "u" (y), "t" (x) : "cc", "st", "st(1)"); \ - __result; }) - -# define isunordered(x, y) \ - ({ register char __result; \ - __asm__ ("fucompp; fnstsw; sahf; setp %%al" \ - : "=a" (__result) : "u" (y), "t" (x) : "cc", "st", "st(1)"); \ - __result; }) -# endif /* __i686__ */ -# endif /* GCC 2.97 */ - -/* The gcc, version 2.7 or below, has problems with all this inlining - code. So disable it for this version of the compiler. */ -# if __GNUC_PREREQ (2, 8) - -/* Test for negative number. Used in the signbit() macro. */ -__MATH_INLINE int -__NTH (__signbitf (float __x)) -{ -# ifdef __SSE2_MATH__ - int __m; - __asm ("pmovmskb %1, %0" : "=r" (__m) : "x" (__x)); - return (__m & 0x8) != 0; -# else - __extension__ union { float __f; int __i; } __u = { __f: __x }; - return __u.__i < 0; -# endif -} -__MATH_INLINE int -__NTH (__signbit (double __x)) -{ -# ifdef __SSE2_MATH__ - int __m; - __asm ("pmovmskb %1, %0" : "=r" (__m) : "x" (__x)); - return (__m & 0x80) != 0; -# else - __extension__ union { double __d; int __i[2]; } __u = { __d: __x }; - return __u.__i[1] < 0; -# endif -} -__MATH_INLINE int -__NTH (__signbitl (long double __x)) -{ - __extension__ union { long double __l; int __i[3]; } __u = { __l: __x }; - return (__u.__i[2] & 0x8000) != 0; -} - -# endif -#endif - - -/* The gcc, version 2.7 or below, has problems with all this inlining - code. So disable it for this version of the compiler. */ -#if __GNUC_PREREQ (2, 8) -# if !__GNUC_PREREQ (3, 4) && !defined __NO_MATH_INLINES \ - && defined __OPTIMIZE__ -/* GCC 3.4 introduced builtins for all functions below, so - there's no need to define any of these inline functions. */ - -# ifdef __USE_ISOC99 - -/* Round to nearest integer. */ -# ifdef __SSE_MATH__ -__MATH_INLINE long int -__NTH (lrintf (float __x)) -{ - long int __res; - /* Mark as volatile since the result is dependent on the state of - the SSE control register (the rounding mode). Otherwise GCC might - remove these assembler instructions since it does not know about - the rounding mode change and cannot currently be told. */ - __asm __volatile__ ("cvtss2si %1, %0" : "=r" (__res) : "xm" (__x)); - return __res; -} -# endif -# ifdef __SSE2_MATH__ -__MATH_INLINE long int -__NTH (lrint (double __x)) -{ - long int __res; - /* Mark as volatile since the result is dependent on the state of - the SSE control register (the rounding mode). Otherwise GCC might - remove these assembler instructions since it does not know about - the rounding mode change and cannot currently be told. */ - __asm __volatile__ ("cvtsd2si %1, %0" : "=r" (__res) : "xm" (__x)); - return __res; -} -# endif -# ifdef __x86_64__ -__extension__ -__MATH_INLINE long long int -__NTH (llrintf (float __x)) -{ - long long int __res; - /* Mark as volatile since the result is dependent on the state of - the SSE control register (the rounding mode). Otherwise GCC might - remove these assembler instructions since it does not know about - the rounding mode change and cannot currently be told. */ - __asm __volatile__ ("cvtss2si %1, %0" : "=r" (__res) : "xm" (__x)); - return __res; -} -__extension__ -__MATH_INLINE long long int -__NTH (llrint (double __x)) -{ - long long int __res; - /* Mark as volatile since the result is dependent on the state of - the SSE control register (the rounding mode). Otherwise GCC might - remove these assembler instructions since it does not know about - the rounding mode change and cannot currently be told. */ - __asm __volatile__ ("cvtsd2si %1, %0" : "=r" (__res) : "xm" (__x)); - return __res; -} -# endif - -# if defined __FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0 \ - && defined __SSE2_MATH__ -/* Determine maximum of two values. */ -__MATH_INLINE float -__NTH (fmaxf (float __x, float __y)) -{ -# ifdef __AVX__ - float __res; - __asm ("vmaxss %2, %1, %0" : "=x" (__res) : "x" (x), "xm" (__y)); - return __res; -# else - __asm ("maxss %1, %0" : "+x" (__x) : "xm" (__y)); - return __x; -# endif -} -__MATH_INLINE double -__NTH (fmax (double __x, double __y)) -{ -# ifdef __AVX__ - float __res; - __asm ("vmaxsd %2, %1, %0" : "=x" (__res) : "x" (x), "xm" (__y)); - return __res; -# else - __asm ("maxsd %1, %0" : "+x" (__x) : "xm" (__y)); - return __x; -# endif -} - -/* Determine minimum of two values. */ -__MATH_INLINE float -__NTH (fminf (float __x, float __y)) -{ -# ifdef __AVX__ - float __res; - __asm ("vminss %2, %1, %0" : "=x" (__res) : "x" (x), "xm" (__y)); - return __res; -# else - __asm ("minss %1, %0" : "+x" (__x) : "xm" (__y)); - return __x; -# endif -} -__MATH_INLINE double -__NTH (fmin (double __x, double __y)) -{ -# ifdef __AVX__ - float __res; - __asm ("vminsd %2, %1, %0" : "=x" (__res) : "x" (x), "xm" (__y)); - return __res; -# else - __asm ("minsd %1, %0" : "+x" (__x) : "xm" (__y)); - return __x; -# endif -} -# endif - -# endif - -# if defined __SSE4_1__ && defined __SSE2_MATH__ -# if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 - -/* Round to nearest integer. */ -__MATH_INLINE double -__NTH (rint (double __x)) -{ - double __res; - /* Mark as volatile since the result is dependent on the state of - the SSE control register (the rounding mode). Otherwise GCC might - remove these assembler instructions since it does not know about - the rounding mode change and cannot currently be told. */ - __asm __volatile__ ("roundsd $4, %1, %0" : "=x" (__res) : "xm" (__x)); - return __res; -} -__MATH_INLINE float -__NTH (rintf (float __x)) -{ - float __res; - /* Mark as volatile since the result is dependent on the state of - the SSE control register (the rounding mode). Otherwise GCC might - remove these assembler instructions since it does not know about - the rounding mode change and cannot currently be told. */ - __asm __volatile__ ("roundss $4, %1, %0" : "=x" (__res) : "xm" (__x)); - return __res; -} - -# ifdef __USE_ISOC99 -/* Round to nearest integer without raising inexact exception. */ -__MATH_INLINE double -__NTH (nearbyint (double __x)) -{ - double __res; - /* Mark as volatile since the result is dependent on the state of - the SSE control register (the rounding mode). Otherwise GCC might - remove these assembler instructions since it does not know about - the rounding mode change and cannot currently be told. */ - __asm __volatile__ ("roundsd $0xc, %1, %0" : "=x" (__res) : "xm" (__x)); - return __res; -} -__MATH_INLINE float -__NTH (nearbyintf (float __x)) -{ - float __res; - /* Mark as volatile since the result is dependent on the state of - the SSE control register (the rounding mode). Otherwise GCC might - remove these assembler instructions since it does not know about - the rounding mode change and cannot currently be told. */ - __asm __volatile__ ("roundss $0xc, %1, %0" : "=x" (__res) : "xm" (__x)); - return __res; -} -# endif - -# endif - -/* Smallest integral value not less than X. */ -__MATH_INLINE double -__NTH (ceil (double __x)) -{ - double __res; - __asm ("roundsd $2, %1, %0" : "=x" (__res) : "xm" (__x)); - return __res; -} - -__MATH_INLINE float -__NTH (ceilf (float __x)) -{ - float __res; - __asm ("roundss $2, %1, %0" : "=x" (__res) : "xm" (__x)); - return __res; -} - -/* Largest integer not greater than X. */ -__MATH_INLINE double -__NTH (floor (double __x)) -{ - double __res; - __asm ("roundsd $1, %1, %0" : "=x" (__res) : "xm" (__x)); - return __res; -} - -__MATH_INLINE float -__NTH (floorf (float __x)) -{ - float __res; - __asm ("roundss $1, %1, %0" : "=x" (__res) : "xm" (__x)); - return __res; -} -# endif -# endif -#endif - -/* Disable x87 inlines when -fpmath=sse is passed and also when we're building - on x86_64. Older gcc (gcc-3.2 for example) does not define __SSE2_MATH__ - for x86_64. */ -#if !defined __SSE2_MATH__ && !defined __x86_64__ -# if ((!defined __NO_MATH_INLINES || defined __LIBC_INTERNAL_MATH_INLINES) \ - && defined __OPTIMIZE__) - -/* The inline functions do not set errno or raise necessarily the - correct exceptions. */ -# undef math_errhandling - -/* A macro to define float, double, and long double versions of various - math functions for the ix87 FPU. FUNC is the function name (which will - be suffixed with f and l for the float and long double version, - respectively). OP is the name of the FPU operation. - We define two sets of macros. The set with the additional NP - doesn't add a prototype declaration. */ - -# ifdef __USE_ISOC99 -# define __inline_mathop(func, op) \ - __inline_mathop_ (double, func, op) \ - __inline_mathop_ (float, __CONCAT(func,f), op) \ - __inline_mathop_ (long double, __CONCAT(func,l), op) -# define __inline_mathopNP(func, op) \ - __inline_mathopNP_ (double, func, op) \ - __inline_mathopNP_ (float, __CONCAT(func,f), op) \ - __inline_mathopNP_ (long double, __CONCAT(func,l), op) -# else -# define __inline_mathop(func, op) \ - __inline_mathop_ (double, func, op) -# define __inline_mathopNP(func, op) \ - __inline_mathopNP_ (double, func, op) -# endif - -# define __inline_mathop_(float_type, func, op) \ - __inline_mathop_decl_ (float_type, func, op, "0" (__x)) -# define __inline_mathopNP_(float_type, func, op) \ - __inline_mathop_declNP_ (float_type, func, op, "0" (__x)) - - -# ifdef __USE_ISOC99 -# define __inline_mathop_decl(func, op, params...) \ - __inline_mathop_decl_ (double, func, op, params) \ - __inline_mathop_decl_ (float, __CONCAT(func,f), op, params) \ - __inline_mathop_decl_ (long double, __CONCAT(func,l), op, params) -# define __inline_mathop_declNP(func, op, params...) \ - __inline_mathop_declNP_ (double, func, op, params) \ - __inline_mathop_declNP_ (float, __CONCAT(func,f), op, params) \ - __inline_mathop_declNP_ (long double, __CONCAT(func,l), op, params) -# else -# define __inline_mathop_decl(func, op, params...) \ - __inline_mathop_decl_ (double, func, op, params) -# define __inline_mathop_declNP(func, op, params...) \ - __inline_mathop_declNP_ (double, func, op, params) -# endif - -# define __inline_mathop_decl_(float_type, func, op, params...) \ - __MATH_INLINE float_type func (float_type) __THROW; \ - __inline_mathop_declNP_ (float_type, func, op, params) - -# define __inline_mathop_declNP_(float_type, func, op, params...) \ - __MATH_INLINE float_type __NTH (func (float_type __x)) \ - { \ - register float_type __result; \ - __asm __volatile__ (op : "=t" (__result) : params); \ - return __result; \ - } - - -# ifdef __USE_ISOC99 -# define __inline_mathcode(func, arg, code) \ - __inline_mathcode_ (double, func, arg, code) \ - __inline_mathcode_ (float, __CONCAT(func,f), arg, code) \ - __inline_mathcode_ (long double, __CONCAT(func,l), arg, code) -# define __inline_mathcodeNP(func, arg, code) \ - __inline_mathcodeNP_ (double, func, arg, code) \ - __inline_mathcodeNP_ (float, __CONCAT(func,f), arg, code) \ - __inline_mathcodeNP_ (long double, __CONCAT(func,l), arg, code) -# define __inline_mathcode2(func, arg1, arg2, code) \ - __inline_mathcode2_ (double, func, arg1, arg2, code) \ - __inline_mathcode2_ (float, __CONCAT(func,f), arg1, arg2, code) \ - __inline_mathcode2_ (long double, __CONCAT(func,l), arg1, arg2, code) -# define __inline_mathcodeNP2(func, arg1, arg2, code) \ - __inline_mathcodeNP2_ (double, func, arg1, arg2, code) \ - __inline_mathcodeNP2_ (float, __CONCAT(func,f), arg1, arg2, code) \ - __inline_mathcodeNP2_ (long double, __CONCAT(func,l), arg1, arg2, code) -# define __inline_mathcode3(func, arg1, arg2, arg3, code) \ - __inline_mathcode3_ (double, func, arg1, arg2, arg3, code) \ - __inline_mathcode3_ (float, __CONCAT(func,f), arg1, arg2, arg3, code) \ - __inline_mathcode3_ (long double, __CONCAT(func,l), arg1, arg2, arg3, code) -# define __inline_mathcodeNP3(func, arg1, arg2, arg3, code) \ - __inline_mathcodeNP3_ (double, func, arg1, arg2, arg3, code) \ - __inline_mathcodeNP3_ (float, __CONCAT(func,f), arg1, arg2, arg3, code) \ - __inline_mathcodeNP3_ (long double, __CONCAT(func,l), arg1, arg2, arg3, code) -# else -# define __inline_mathcode(func, arg, code) \ - __inline_mathcode_ (double, func, (arg), code) -# define __inline_mathcodeNP(func, arg, code) \ - __inline_mathcodeNP_ (double, func, (arg), code) -# define __inline_mathcode2(func, arg1, arg2, code) \ - __inline_mathcode2_ (double, func, arg1, arg2, code) -# define __inline_mathcodeNP2(func, arg1, arg2, code) \ - __inline_mathcodeNP2_ (double, func, arg1, arg2, code) -# define __inline_mathcode3(func, arg1, arg2, arg3, code) \ - __inline_mathcode3_ (double, func, arg1, arg2, arg3, code) -# define __inline_mathcodeNP3(func, arg1, arg2, arg3, code) \ - __inline_mathcodeNP3_ (double, func, arg1, arg2, arg3, code) -# endif - -# define __inline_mathcode_(float_type, func, arg, code) \ - __MATH_INLINE float_type func (float_type) __THROW; \ - __inline_mathcodeNP_(float_type, func, arg, code) - -# define __inline_mathcodeNP_(float_type, func, arg, code) \ - __MATH_INLINE float_type __NTH (func (float_type arg)) \ - { \ - code; \ - } - - -# define __inline_mathcode2_(float_type, func, arg1, arg2, code) \ - __MATH_INLINE float_type func (float_type, float_type) __THROW; \ - __inline_mathcodeNP2_ (float_type, func, arg1, arg2, code) - -# define __inline_mathcodeNP2_(float_type, func, arg1, arg2, code) \ - __MATH_INLINE float_type __NTH (func (float_type arg1, float_type arg2)) \ - { \ - code; \ - } - -# define __inline_mathcode3_(float_type, func, arg1, arg2, arg3, code) \ - __MATH_INLINE float_type func (float_type, float_type, float_type) __THROW; \ - __inline_mathcodeNP3_(float_type, func, arg1, arg2, arg3, code) - -# define __inline_mathcodeNP3_(float_type, func, arg1, arg2, arg3, code) \ - __MATH_INLINE float_type __NTH (func (float_type arg1, float_type arg2, \ - float_type arg3)) \ - { \ - code; \ - } -# endif - - -# if !defined __NO_MATH_INLINES && defined __OPTIMIZE__ -/* Miscellaneous functions */ - -/* __FAST_MATH__ is defined by gcc -ffast-math. */ -# ifdef __FAST_MATH__ -# ifdef __USE_GNU -# define __sincos_code \ - register long double __cosr; \ - register long double __sinr; \ - register unsigned int __swtmp; \ - __asm __volatile__ \ - ("fsincos\n\t" \ - "fnstsw %w2\n\t" \ - "testl $0x400, %2\n\t" \ - "jz 1f\n\t" \ - "fldpi\n\t" \ - "fadd %%st(0)\n\t" \ - "fxch %%st(1)\n\t" \ - "2: fprem1\n\t" \ - "fnstsw %w2\n\t" \ - "testl $0x400, %2\n\t" \ - "jnz 2b\n\t" \ - "fstp %%st(1)\n\t" \ - "fsincos\n\t" \ - "1:" \ - : "=t" (__cosr), "=u" (__sinr), "=a" (__swtmp) : "0" (__x)); \ - *__sinx = __sinr; \ - *__cosx = __cosr - -__MATH_INLINE void -__NTH (__sincos (double __x, double *__sinx, double *__cosx)) -{ - __sincos_code; -} - -__MATH_INLINE void -__NTH (__sincosf (float __x, float *__sinx, float *__cosx)) -{ - __sincos_code; -} - -__MATH_INLINE void -__NTH (__sincosl (long double __x, long double *__sinx, long double *__cosx)) -{ - __sincos_code; -} -# endif - - -/* Optimized inline implementation, sometimes with reduced precision - and/or argument range. */ - -# if __GNUC_PREREQ (3, 5) -# define __expm1_code \ - register long double __temp; \ - __temp = __builtin_expm1l (__x); \ - return __temp ? __temp : __x -# else -# define __expm1_code \ - register long double __value; \ - register long double __exponent; \ - register long double __temp; \ - __asm __volatile__ \ - ("fldl2e # e^x - 1 = 2^(x * log2(e)) - 1\n\t" \ - "fmul %%st(1) # x * log2(e)\n\t" \ - "fst %%st(1)\n\t" \ - "frndint # int(x * log2(e))\n\t" \ - "fxch\n\t" \ - "fsub %%st(1) # fract(x * log2(e))\n\t" \ - "f2xm1 # 2^(fract(x * log2(e))) - 1\n\t" \ - "fscale # 2^(x * log2(e)) - 2^(int(x * log2(e)))\n\t" \ - : "=t" (__value), "=u" (__exponent) : "0" (__x)); \ - __asm __volatile__ \ - ("fscale # 2^int(x * log2(e))\n\t" \ - : "=t" (__temp) : "0" (1.0), "u" (__exponent)); \ - __temp -= 1.0; \ - __temp += __value; \ - return __temp ? __temp : __x -# endif -__inline_mathcodeNP_ (long double, __expm1l, __x, __expm1_code) - -# if __GNUC_PREREQ (3, 4) -__inline_mathcodeNP_ (long double, __expl, __x, return __builtin_expl (__x)) -# else -# define __exp_code \ - register long double __value; \ - register long double __exponent; \ - __asm __volatile__ \ - ("fldl2e # e^x = 2^(x * log2(e))\n\t" \ - "fmul %%st(1) # x * log2(e)\n\t" \ - "fst %%st(1)\n\t" \ - "frndint # int(x * log2(e))\n\t" \ - "fxch\n\t" \ - "fsub %%st(1) # fract(x * log2(e))\n\t" \ - "f2xm1 # 2^(fract(x * log2(e))) - 1\n\t" \ - : "=t" (__value), "=u" (__exponent) : "0" (__x)); \ - __value += 1.0; \ - __asm __volatile__ \ - ("fscale" \ - : "=t" (__value) : "0" (__value), "u" (__exponent)); \ - return __value -__inline_mathcodeNP (exp, __x, __exp_code) -__inline_mathcodeNP_ (long double, __expl, __x, __exp_code) -# endif - - -# if !__GNUC_PREREQ (3, 5) -__inline_mathcodeNP (tan, __x, \ - register long double __value; \ - register long double __value2 __attribute__ ((__unused__)); \ - __asm __volatile__ \ - ("fptan" \ - : "=t" (__value2), "=u" (__value) : "0" (__x)); \ - return __value) -# endif -# endif /* __FAST_MATH__ */ - - -# if __GNUC_PREREQ (3, 4) -__inline_mathcodeNP2_ (long double, __atan2l, __y, __x, - return __builtin_atan2l (__y, __x)) -# else -# define __atan2_code \ - register long double __value; \ - __asm __volatile__ \ - ("fpatan" \ - : "=t" (__value) : "0" (__x), "u" (__y) : "st(1)"); \ - return __value -# ifdef __FAST_MATH__ -__inline_mathcodeNP2 (atan2, __y, __x, __atan2_code) -# endif -__inline_mathcodeNP2_ (long double, __atan2l, __y, __x, __atan2_code) -# endif - - -# if defined __FAST_MATH__ && !__GNUC_PREREQ (3, 5) -__inline_mathcodeNP2 (fmod, __x, __y, \ - register long double __value; \ - __asm __volatile__ \ - ("1: fprem\n\t" \ - "fnstsw %%ax\n\t" \ - "sahf\n\t" \ - "jp 1b" \ - : "=t" (__value) : "0" (__x), "u" (__y) : "ax", "cc"); \ - return __value) -# endif - - -# ifdef __FAST_MATH__ -# if !__GNUC_PREREQ (3,3) -__inline_mathopNP (sqrt, "fsqrt") -__inline_mathopNP_ (long double, __sqrtl, "fsqrt") -# define __libc_sqrtl(n) __sqrtl (n) -# else -# define __libc_sqrtl(n) __builtin_sqrtl (n) -# endif -# endif - -# if __GNUC_PREREQ (2, 8) -__inline_mathcodeNP_ (double, fabs, __x, return __builtin_fabs (__x)) -# ifdef __USE_ISOC99 -__inline_mathcodeNP_ (float, fabsf, __x, return __builtin_fabsf (__x)) -__inline_mathcodeNP_ (long double, fabsl, __x, return __builtin_fabsl (__x)) -# endif -__inline_mathcodeNP_ (long double, __fabsl, __x, return __builtin_fabsl (__x)) -# else -__inline_mathop (fabs, "fabs") -__inline_mathop_ (long double, __fabsl, "fabs") -# endif - -# ifdef __FAST_MATH__ -# if !__GNUC_PREREQ (3, 4) -/* The argument range of this inline version is reduced. */ -__inline_mathopNP (sin, "fsin") -/* The argument range of this inline version is reduced. */ -__inline_mathopNP (cos, "fcos") - -__inline_mathop_declNP (log, "fldln2; fxch; fyl2x", "0" (__x) : "st(1)") -# endif - -# if !__GNUC_PREREQ (3, 5) -__inline_mathop_declNP (log10, "fldlg2; fxch; fyl2x", "0" (__x) : "st(1)") - -__inline_mathcodeNP (asin, __x, return __atan2l (__x, __libc_sqrtl (1.0 - __x * __x))) -__inline_mathcodeNP (acos, __x, return __atan2l (__libc_sqrtl (1.0 - __x * __x), __x)) -# endif - -# if !__GNUC_PREREQ (3, 4) -__inline_mathop_declNP (atan, "fld1; fpatan", "0" (__x) : "st(1)") -# endif -# endif /* __FAST_MATH__ */ - -__inline_mathcode_ (long double, __sgn1l, __x, \ - __extension__ union { long double __xld; unsigned int __xi[3]; } __n = \ - { __xld: __x }; \ - __n.__xi[2] = (__n.__xi[2] & 0x8000) | 0x3fff; \ - __n.__xi[1] = 0x80000000; \ - __n.__xi[0] = 0; \ - return __n.__xld) - - -# ifdef __FAST_MATH__ -/* The argument range of the inline version of sinhl is slightly reduced. */ -__inline_mathcodeNP (sinh, __x, \ - register long double __exm1 = __expm1l (__fabsl (__x)); \ - return 0.5 * (__exm1 / (__exm1 + 1.0) + __exm1) * __sgn1l (__x)) - -__inline_mathcodeNP (cosh, __x, \ - register long double __ex = __expl (__x); \ - return 0.5 * (__ex + 1.0 / __ex)) - -__inline_mathcodeNP (tanh, __x, \ - register long double __exm1 = __expm1l (-__fabsl (__x + __x)); \ - return __exm1 / (__exm1 + 2.0) * __sgn1l (-__x)) -# endif - -__inline_mathcodeNP (floor, __x, \ - register long double __value; \ - register int __ignore; \ - unsigned short int __cw; \ - unsigned short int __cwtmp; \ - __asm __volatile ("fnstcw %3\n\t" \ - "movzwl %3, %1\n\t" \ - "andl $0xf3ff, %1\n\t" \ - "orl $0x0400, %1\n\t" /* rounding down */ \ - "movw %w1, %2\n\t" \ - "fldcw %2\n\t" \ - "frndint\n\t" \ - "fldcw %3" \ - : "=t" (__value), "=&q" (__ignore), "=m" (__cwtmp), \ - "=m" (__cw) \ - : "0" (__x)); \ - return __value) - -__inline_mathcodeNP (ceil, __x, \ - register long double __value; \ - register int __ignore; \ - unsigned short int __cw; \ - unsigned short int __cwtmp; \ - __asm __volatile ("fnstcw %3\n\t" \ - "movzwl %3, %1\n\t" \ - "andl $0xf3ff, %1\n\t" \ - "orl $0x0800, %1\n\t" /* rounding up */ \ - "movw %w1, %2\n\t" \ - "fldcw %2\n\t" \ - "frndint\n\t" \ - "fldcw %3" \ - : "=t" (__value), "=&q" (__ignore), "=m" (__cwtmp), \ - "=m" (__cw) \ - : "0" (__x)); \ - return __value) - -# ifdef __FAST_MATH__ -# define __ldexp_code \ - register long double __value; \ - __asm __volatile__ \ - ("fscale" \ - : "=t" (__value) : "0" (__x), "u" ((long double) __y)); \ - return __value - -__MATH_INLINE double -__NTH (ldexp (double __x, int __y)) -{ - __ldexp_code; -} -# endif - - -/* Optimized versions for some non-standardized functions. */ -# ifdef __USE_ISOC99 - -# ifdef __FAST_MATH__ -__inline_mathcodeNP (expm1, __x, __expm1_code) - -/* We cannot rely on M_SQRT being defined. So we do it for ourself - here. */ -# define __M_SQRT2 1.41421356237309504880L /* sqrt(2) */ - -# if !__GNUC_PREREQ (3, 5) -__inline_mathcodeNP (log1p, __x, \ - register long double __value; \ - if (__fabsl (__x) >= 1.0 - 0.5 * __M_SQRT2) \ - __value = logl (1.0 + __x); \ - else \ - __asm __volatile__ \ - ("fldln2\n\t" \ - "fxch\n\t" \ - "fyl2xp1" \ - : "=t" (__value) : "0" (__x) : "st(1)"); \ - return __value) -# endif - - -/* The argument range of the inline version of asinhl is slightly reduced. */ -__inline_mathcodeNP (asinh, __x, \ - register long double __y = __fabsl (__x); \ - return (log1pl (__y * __y / (__libc_sqrtl (__y * __y + 1.0) + 1.0) + __y) \ - * __sgn1l (__x))) - -__inline_mathcodeNP (acosh, __x, \ - return logl (__x + __libc_sqrtl (__x - 1.0) * __libc_sqrtl (__x + 1.0))) - -__inline_mathcodeNP (atanh, __x, \ - register long double __y = __fabsl (__x); \ - return -0.5 * log1pl (-(__y + __y) / (1.0 + __y)) * __sgn1l (__x)) - -/* The argument range of the inline version of hypotl is slightly reduced. */ -__inline_mathcodeNP2 (hypot, __x, __y, - return __libc_sqrtl (__x * __x + __y * __y)) - -# if !__GNUC_PREREQ (3, 5) -__inline_mathcodeNP(logb, __x, \ - register long double __value; \ - register long double __junk; \ - __asm __volatile__ \ - ("fxtract\n\t" \ - : "=t" (__junk), "=u" (__value) : "0" (__x)); \ - return __value) -# endif - -# endif -# endif - -# ifdef __USE_ISOC99 -# ifdef __FAST_MATH__ - -# if !__GNUC_PREREQ (3, 5) -__inline_mathop_declNP (log2, "fld1; fxch; fyl2x", "0" (__x) : "st(1)") -# endif - -__MATH_INLINE float -__NTH (ldexpf (float __x, int __y)) -{ - __ldexp_code; -} - -__MATH_INLINE long double -__NTH (ldexpl (long double __x, int __y)) -{ - __ldexp_code; -} - -__inline_mathopNP (rint, "frndint") -# endif /* __FAST_MATH__ */ - -# define __lrint_code \ - long int __lrintres; \ - __asm__ __volatile__ \ - ("fistpl %0" \ - : "=m" (__lrintres) : "t" (__x) : "st"); \ - return __lrintres -__MATH_INLINE long int -__NTH (lrintf (float __x)) -{ - __lrint_code; -} -__MATH_INLINE long int -__NTH (lrint (double __x)) -{ - __lrint_code; -} -__MATH_INLINE long int -__NTH (lrintl (long double __x)) -{ - __lrint_code; -} -# undef __lrint_code - -# define __llrint_code \ - long long int __llrintres; \ - __asm__ __volatile__ \ - ("fistpll %0" \ - : "=m" (__llrintres) : "t" (__x) : "st"); \ - return __llrintres -__extension__ -__MATH_INLINE long long int -__NTH (llrintf (float __x)) -{ - __llrint_code; -} -__extension__ -__MATH_INLINE long long int -__NTH (llrint (double __x)) -{ - __llrint_code; -} -__extension__ -__MATH_INLINE long long int -__NTH (llrintl (long double __x)) -{ - __llrint_code; -} -# undef __llrint_code - -# endif - - -# ifdef __USE_MISC - -# if defined __FAST_MATH__ && !__GNUC_PREREQ (3, 5) -__inline_mathcodeNP2 (drem, __x, __y, \ - register double __value; \ - register int __clobbered; \ - __asm __volatile__ \ - ("1: fprem1\n\t" \ - "fstsw %%ax\n\t" \ - "sahf\n\t" \ - "jp 1b" \ - : "=t" (__value), "=&a" (__clobbered) : "0" (__x), "u" (__y) : "cc"); \ - return __value) -# endif - - -/* This function is used in the `isfinite' macro. */ -__MATH_INLINE int -__NTH (__finite (double __x)) -{ - return (__extension__ - (((((union { double __d; int __i[2]; }) {__d: __x}).__i[1] - | 0x800fffffu) + 1) >> 31)); -} - -# endif /* __USE_MISC */ - -/* Undefine some of the large macros which are not used anymore. */ -# undef __atan2_code -# ifdef __FAST_MATH__ -# undef __expm1_code -# undef __exp_code -# undef __sincos_code -# endif /* __FAST_MATH__ */ - -# endif /* __NO_MATH_INLINES */ - - -/* This code is used internally in the GNU libc. */ -# ifdef __LIBC_INTERNAL_MATH_INLINES -__inline_mathop (__ieee754_sqrt, "fsqrt") -__inline_mathcode2_ (long double, __ieee754_atan2l, __y, __x, - register long double __value; - __asm __volatile__ ("fpatan\n\t" - : "=t" (__value) - : "0" (__x), "u" (__y) : "st(1)"); - return __value;) -# endif - -#endif /* !__SSE2_MATH__ && !__x86_64__ */ diff --git a/sysdeps/x86/fpu/fix-fp-int-compare-invalid.h b/sysdeps/x86/fpu/fix-fp-int-compare-invalid.h deleted file mode 100644 index bda247d51f..0000000000 --- a/sysdeps/x86/fpu/fix-fp-int-compare-invalid.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Fix for missing "invalid" exceptions from floating-point - comparisons. x86 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef FIX_FP_INT_COMPARE_INVALID_H -#define FIX_FP_INT_COMPARE_INVALID_H 1 - -/* As of GCC 5, both x87 and SSE comparisons use unordered comparison - instructions when they should use ordered comparisons - . */ -#define FIX_COMPARE_INVALID 1 - -#endif /* fix-fp-int-compare-invalid.h */ diff --git a/sysdeps/x86/fpu/include/bits/fenv.h b/sysdeps/x86/fpu/include/bits/fenv.h deleted file mode 100644 index a39b6fa85d..0000000000 --- a/sysdeps/x86/fpu/include/bits/fenv.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Wrapper for x86 bits/fenv.h for use when building glibc. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_FENV_H -#include_next - -# ifndef _ISOMAC - -/* Ensure __feraiseexcept calls in glibc are optimized the same as - feraiseexcept calls. */ - -#ifdef __USE_EXTERN_INLINES -__BEGIN_DECLS - -extern int __REDIRECT_NTH (____feraiseexcept_renamed, (int), __feraiseexcept); -__extern_inline int -__NTH (__feraiseexcept (int __excepts)) -{ - if (__builtin_constant_p (__excepts) - && (__excepts & ~(FE_INVALID | FE_DIVBYZERO)) == 0) - { - __feraiseexcept_invalid_divbyzero (__excepts); - return 0; - } - - return ____feraiseexcept_renamed (__excepts); -} - -__END_DECLS -#endif - -# endif /* _ISOMAC */ -#endif /* bits/fenv.h */ diff --git a/sysdeps/x86/fpu/powl_helper.c b/sysdeps/x86/fpu/powl_helper.c deleted file mode 100644 index 46f8cd9318..0000000000 --- a/sysdeps/x86/fpu/powl_helper.c +++ /dev/null @@ -1,236 +0,0 @@ -/* Implement powl for x86 using extra-precision log. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* High parts and low parts of -log (k/16), for integer k from 12 to - 24. */ - -static const long double powl_log_table[] = - { - 0x4.9a58844d36e49e1p-4L, -0x1.0522624fd558f574p-68L, - 0x3.527da7915b3c6de4p-4L, 0x1.7d4ef4b901b99b9ep-68L, - 0x2.22f1d044fc8f7bc8p-4L, -0x1.8e97c071a42fc388p-68L, - 0x1.08598b59e3a0688ap-4L, 0x3.fd9bf503372c12fcp-72L, - -0x0p+0L, 0x0p+0L, - -0xf.85186008b15330cp-8L, 0x1.9b47488a6687672cp-72L, - -0x1.e27076e2af2e5e9ep-4L, -0xa.87ffe1fe9e155dcp-72L, - -0x2.bfe60e14f27a791p-4L, 0x1.83bebf1bdb88a032p-68L, - -0x3.91fef8f353443584p-4L, -0xb.b03de5ff734495cp-72L, - -0x4.59d72aeae98380e8p-4L, 0xc.e0aa3be4747dc1p-72L, - -0x5.1862f08717b09f4p-4L, -0x2.decdeccf1cd10578p-68L, - -0x5.ce75fdaef401a738p-4L, -0x9.314feb4fbde5aaep-72L, - -0x6.7cc8fb2fe612fcbp-4L, 0x2.5ca2642feb779f98p-68L, - }; - -/* High 32 bits of log2 (e), and remainder rounded to 64 bits. */ -static const long double log2e_hi = 0x1.71547652p+0L; -static const long double log2e_lo = 0xb.82fe1777d0ffda1p-36L; - -/* Given a number with high part HI and low part LO, add the number X - to it and store the result in *RHI and *RLO. It is given that - either |X| < |0.7 * HI|, or HI == LO == 0, and that the values are - small enough that no overflow occurs. The result does not need to - be exact to 128 bits; 78-bit accuracy of the final accumulated - result suffices. */ - -static inline void -acc_split (long double *rhi, long double *rlo, long double hi, long double lo, - long double x) -{ - long double thi = hi + x; - long double tlo = (hi - thi) + x + lo; - *rhi = thi + tlo; - *rlo = (thi - *rhi) + tlo; -} - -extern long double __powl_helper (long double x, long double y); -libm_hidden_proto (__powl_helper) - -/* Given X a value that is finite and nonzero, or a NaN, and Y a - finite nonzero value with 0x1p-79 <= |Y| <= 0x1p78, compute X to - the power Y. */ - -long double -__powl_helper (long double x, long double y) -{ - if (isnan (x)) - return __ieee754_expl (y * __ieee754_logl (x)); - bool negate; - if (x < 0) - { - long double absy = fabsl (y); - if (absy >= 0x1p64L) - negate = false; - else - { - unsigned long long yll = absy; - if (yll != absy) - return __ieee754_expl (y * __ieee754_logl (x)); - negate = (yll & 1) != 0; - } - x = fabsl (x); - } - else - negate = false; - - /* We need to compute Y * log2 (X) to at least 64 bits after the - point for normal results (that is, to at least 78 bits - precision). */ - int x_int_exponent; - long double x_frac; - x_frac = __frexpl (x, &x_int_exponent); - if (x_frac <= 0x0.aaaaaaaaaaaaaaaap0L) /* 2.0L / 3.0L, rounded down */ - { - x_frac *= 2.0; - x_int_exponent--; - } - - long double log_x_frac_hi, log_x_frac_lo; - /* Determine an initial approximation to log (X_FRAC) using - POWL_LOG_TABLE, and multiply by a value K/16 to reduce to an - interval (24/25, 26/25). */ - int k = (int) ((16.0L / x_frac) + 0.5L); - log_x_frac_hi = powl_log_table[2 * k - 24]; - log_x_frac_lo = powl_log_table[2 * k - 23]; - long double x_frac_low; - if (k == 16) - x_frac_low = 0.0L; - else - { - /* Mask off low 5 bits of X_FRAC so the multiplication by K/16 - is exact. These bits are small enough that they can be - corrected for by adding log2 (e) * X_FRAC_LOW to the final - result. */ - int32_t se; - u_int32_t i0, i1; - GET_LDOUBLE_WORDS (se, i0, i1, x_frac); - x_frac_low = x_frac; - i1 &= 0xffffffe0; - SET_LDOUBLE_WORDS (x_frac, se, i0, i1); - x_frac_low -= x_frac; - x_frac_low /= x_frac; - x_frac *= k / 16.0L; - } - - /* Now compute log (X_FRAC) for X_FRAC in (24/25, 26/25). Separate - W = X_FRAC - 1 into high 16 bits and remaining bits, so that - multiplications for low-order power series terms are exact. The - remaining bits are small enough that adding a 64-bit value of - log2 (1 + W_LO / (1 + W_HI)) will be a sufficient correction for - them. */ - long double w = x_frac - 1; - long double w_hi, w_lo; - int32_t se; - u_int32_t i0, i1; - GET_LDOUBLE_WORDS (se, i0, i1, w); - i0 &= 0xffff0000; - i1 = 0; - SET_LDOUBLE_WORDS (w_hi, se, i0, i1); - w_lo = w - w_hi; - long double wp = w_hi; - acc_split (&log_x_frac_hi, &log_x_frac_lo, log_x_frac_hi, log_x_frac_lo, wp); - wp *= -w_hi; - acc_split (&log_x_frac_hi, &log_x_frac_lo, log_x_frac_hi, log_x_frac_lo, - wp / 2.0L); - wp *= -w_hi; - acc_split (&log_x_frac_hi, &log_x_frac_lo, log_x_frac_hi, log_x_frac_lo, - wp * 0x0.5555p0L); /* -W_HI**3 / 3, high part. */ - acc_split (&log_x_frac_hi, &log_x_frac_lo, log_x_frac_hi, log_x_frac_lo, - wp * 0x0.5555555555555555p-16L); /* -W_HI**3 / 3, low part. */ - wp *= -w_hi; - acc_split (&log_x_frac_hi, &log_x_frac_lo, log_x_frac_hi, log_x_frac_lo, - wp / 4.0L); - /* Subsequent terms are small enough that they only need be computed - to 64 bits. */ - for (int i = 5; i <= 17; i++) - { - wp *= -w_hi; - acc_split (&log_x_frac_hi, &log_x_frac_lo, log_x_frac_hi, log_x_frac_lo, - wp / i); - } - - /* Convert LOG_X_FRAC_HI + LOG_X_FRAC_LO to a base-2 logarithm. */ - long double log2_x_frac_hi, log2_x_frac_lo; - long double log_x_frac_hi32, log_x_frac_lo64; - GET_LDOUBLE_WORDS (se, i0, i1, log_x_frac_hi); - i1 = 0; - SET_LDOUBLE_WORDS (log_x_frac_hi32, se, i0, i1); - log_x_frac_lo64 = (log_x_frac_hi - log_x_frac_hi32) + log_x_frac_lo; - long double log2_x_frac_hi1 = log_x_frac_hi32 * log2e_hi; - long double log2_x_frac_lo1 - = log_x_frac_lo64 * log2e_hi + log_x_frac_hi * log2e_lo; - log2_x_frac_hi = log2_x_frac_hi1 + log2_x_frac_lo1; - log2_x_frac_lo = (log2_x_frac_hi1 - log2_x_frac_hi) + log2_x_frac_lo1; - - /* Correct for the masking off of W_LO. */ - long double log2_1p_w_lo; - asm ("fyl2xp1" - : "=t" (log2_1p_w_lo) - : "0" (w_lo / (1.0L + w_hi)), "u" (1.0L) - : "st(1)"); - acc_split (&log2_x_frac_hi, &log2_x_frac_lo, log2_x_frac_hi, log2_x_frac_lo, - log2_1p_w_lo); - - /* Correct for the masking off of X_FRAC_LOW. */ - acc_split (&log2_x_frac_hi, &log2_x_frac_lo, log2_x_frac_hi, log2_x_frac_lo, - x_frac_low * M_LOG2El); - - /* Add the integer and fractional parts of the base-2 logarithm. */ - long double log2_x_hi, log2_x_lo; - log2_x_hi = x_int_exponent + log2_x_frac_hi; - log2_x_lo = ((x_int_exponent - log2_x_hi) + log2_x_frac_hi) + log2_x_frac_lo; - - /* Compute the base-2 logarithm of the result. */ - long double log2_res_hi, log2_res_lo; - long double log2_x_hi32, log2_x_lo64; - GET_LDOUBLE_WORDS (se, i0, i1, log2_x_hi); - i1 = 0; - SET_LDOUBLE_WORDS (log2_x_hi32, se, i0, i1); - log2_x_lo64 = (log2_x_hi - log2_x_hi32) + log2_x_lo; - long double y_hi32, y_lo32; - GET_LDOUBLE_WORDS (se, i0, i1, y); - i1 = 0; - SET_LDOUBLE_WORDS (y_hi32, se, i0, i1); - y_lo32 = y - y_hi32; - log2_res_hi = log2_x_hi32 * y_hi32; - log2_res_lo = log2_x_hi32 * y_lo32 + log2_x_lo64 * y; - - /* Split the base-2 logarithm of the result into integer and - fractional parts. */ - long double log2_res_int = __roundl (log2_res_hi); - long double log2_res_frac = log2_res_hi - log2_res_int + log2_res_lo; - /* If the integer part is very large, the computed fractional part - may be outside the valid range for f2xm1. */ - if (fabsl (log2_res_int) > 16500) - log2_res_frac = 0; - - /* Compute the final result. */ - long double res; - asm ("f2xm1" : "=t" (res) : "0" (log2_res_frac)); - res += 1.0L; - if (negate) - res = -res; - asm ("fscale" : "=t" (res) : "0" (res), "u" (log2_res_int)); - math_check_force_underflow (res); - return res; -} - -libm_hidden_def (__powl_helper) diff --git a/sysdeps/x86/fpu/test-fenv-clear-sse.c b/sysdeps/x86/fpu/test-fenv-clear-sse.c deleted file mode 100644 index 52a1b63c0b..0000000000 --- a/sysdeps/x86/fpu/test-fenv-clear-sse.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Test fesetenv (FE_DFL_ENV) and fesetenv (FE_NOMASK_ENV) clear - exceptions (bug 19181). SSE version. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -static bool -have_sse2 (void) -{ - unsigned int eax, ebx, ecx, edx; - - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) - return false; - - return (edx & bit_SSE2) != 0; -} - -#define CHECK_CAN_TEST \ - do \ - { \ - if (!have_sse2 ()) \ - { \ - puts ("CPU does not support SSE2, cannot test"); \ - return 0; \ - } \ - } \ - while (0) - -#include diff --git a/sysdeps/x86/fpu/test-fenv-sse-2.c b/sysdeps/x86/fpu/test-fenv-sse-2.c deleted file mode 100644 index b5f96850f9..0000000000 --- a/sysdeps/x86/fpu/test-fenv-sse-2.c +++ /dev/null @@ -1,176 +0,0 @@ -/* Test x86-specific floating-point environment (bug 16068): SSE part. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - -static bool -have_sse2 (void) -{ - unsigned int eax, ebx, ecx, edx; - - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) - return false; - - return (edx & bit_SSE2) != 0; -} - -static uint32_t -get_sse_mxcsr (void) -{ - uint32_t temp; - __asm__ __volatile__ ("stmxcsr %0" : "=m" (temp)); - return temp; -} - -static void -set_sse_mxcsr (uint32_t val) -{ - __asm__ __volatile__ ("ldmxcsr %0" : : "m" (val)); -} - -static void -set_sse_mxcsr_bits (uint32_t mask, uint32_t bits) -{ - uint32_t mxcsr = get_sse_mxcsr (); - mxcsr = (mxcsr & ~mask) | bits; - set_sse_mxcsr (mxcsr); -} - -static int -test_sse_mxcsr_bits (const char *test, uint32_t mask, uint32_t bits) -{ - uint32_t mxcsr = get_sse_mxcsr (); - printf ("Testing %s: mxcsr = %x\n", test, mxcsr); - if ((mxcsr & mask) == bits) - { - printf ("PASS: %s\n", test); - return 0; - } - else - { - printf ("FAIL: %s\n", test); - return 1; - } -} - -#define MXCSR_FZ 0x8000 -#define MXCSR_DAZ 0x40 -#define MXCSR_DE 0x2 -#define MXCSR_DM 0x100 - -static __attribute__ ((noinline)) int -sse_tests (void) -{ - int result = 0; - fenv_t env1, env2; - /* Test FZ bit. */ - fegetenv (&env1); - set_sse_mxcsr_bits (MXCSR_FZ, MXCSR_FZ); - fegetenv (&env2); - fesetenv (&env1); - result |= test_sse_mxcsr_bits ("fesetenv FZ restoration", - MXCSR_FZ, 0); - set_sse_mxcsr_bits (MXCSR_FZ, 0); - fesetenv (&env2); - result |= test_sse_mxcsr_bits ("fesetenv FZ restoration 2", - MXCSR_FZ, MXCSR_FZ); - set_sse_mxcsr_bits (MXCSR_FZ, MXCSR_FZ); - fesetenv (FE_NOMASK_ENV); - result |= test_sse_mxcsr_bits ("fesetenv (FE_NOMASK_ENV) FZ restoration", - MXCSR_FZ, 0); - set_sse_mxcsr_bits (MXCSR_FZ, MXCSR_FZ); - fesetenv (FE_DFL_ENV); - result |= test_sse_mxcsr_bits ("fesetenv (FE_DFL_ENV) FZ restoration", - MXCSR_FZ, 0); - /* Test DAZ bit. */ - set_sse_mxcsr_bits (MXCSR_DAZ, MXCSR_DAZ); - fegetenv (&env2); - fesetenv (&env1); - result |= test_sse_mxcsr_bits ("fesetenv DAZ restoration", - MXCSR_DAZ, 0); - set_sse_mxcsr_bits (MXCSR_DAZ, 0); - fesetenv (&env2); - result |= test_sse_mxcsr_bits ("fesetenv DAZ restoration 2", - MXCSR_DAZ, MXCSR_DAZ); - set_sse_mxcsr_bits (MXCSR_DAZ, MXCSR_DAZ); - fesetenv (FE_NOMASK_ENV); - result |= test_sse_mxcsr_bits ("fesetenv (FE_NOMASK_ENV) DAZ restoration", - MXCSR_DAZ, 0); - set_sse_mxcsr_bits (MXCSR_DAZ, MXCSR_DAZ); - fesetenv (FE_DFL_ENV); - result |= test_sse_mxcsr_bits ("fesetenv (FE_DFL_ENV) DAZ restoration", - MXCSR_DAZ, 0); - /* Test DM bit. */ - set_sse_mxcsr_bits (MXCSR_DM, 0); - fegetenv (&env2); - fesetenv (&env1); - result |= test_sse_mxcsr_bits ("fesetenv DM restoration", - MXCSR_DM, MXCSR_DM); - set_sse_mxcsr_bits (MXCSR_DM, MXCSR_DM); - fesetenv (&env2); - result |= test_sse_mxcsr_bits ("fesetenv DM restoration 2", - MXCSR_DM, 0); - set_sse_mxcsr_bits (MXCSR_DM, 0); - /* Presume FE_NOMASK_ENV should leave the "denormal operand" - exception masked, as not a standard exception. */ - fesetenv (FE_NOMASK_ENV); - result |= test_sse_mxcsr_bits ("fesetenv (FE_NOMASK_ENV) DM restoration", - MXCSR_DM, MXCSR_DM); - set_sse_mxcsr_bits (MXCSR_DM, 0); - fesetenv (FE_DFL_ENV); - result |= test_sse_mxcsr_bits ("fesetenv (FE_DFL_ENV) DM restoration", - MXCSR_DM, MXCSR_DM); - /* Test DE bit. */ - set_sse_mxcsr_bits (MXCSR_DE, MXCSR_DE); - fegetenv (&env2); - fesetenv (&env1); - result |= test_sse_mxcsr_bits ("fesetenv DE restoration", - MXCSR_DE, 0); - set_sse_mxcsr_bits (MXCSR_DE, 0); - fesetenv (&env2); - result |= test_sse_mxcsr_bits ("fesetenv DE restoration 2", - MXCSR_DE, MXCSR_DE); - set_sse_mxcsr_bits (MXCSR_DE, MXCSR_DE); - fesetenv (FE_NOMASK_ENV); - result |= test_sse_mxcsr_bits ("fesetenv (FE_NOMASK_ENV) DE restoration", - MXCSR_DE, 0); - set_sse_mxcsr_bits (MXCSR_DE, MXCSR_DE); - fesetenv (FE_DFL_ENV); - result |= test_sse_mxcsr_bits ("fesetenv (FE_DFL_ENV) DE restoration", - MXCSR_DE, 0); - return result; -} - -static int -do_test (void) -{ - if (!have_sse2 ()) - { - puts ("CPU does not support SSE2, cannot test"); - return 0; - } - return sse_tests (); -} - -#define TEST_FUNCTION do_test () -#include diff --git a/sysdeps/x86/fpu/test-fenv-sse.c b/sysdeps/x86/fpu/test-fenv-sse.c deleted file mode 100644 index 569db9a674..0000000000 --- a/sysdeps/x86/fpu/test-fenv-sse.c +++ /dev/null @@ -1,138 +0,0 @@ -/* Test floating-point environment includes SSE state (bug 16064). - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -static bool -have_sse2 (void) -{ - unsigned int eax, ebx, ecx, edx; - - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) - return false; - - return (edx & bit_SSE2) != 0; -} - -static __attribute__ ((noinline)) int -sse_tests (void) -{ - int ret = 0; - fenv_t base_env; - if (fegetenv (&base_env) != 0) - { - puts ("fegetenv (&base_env) failed"); - return 1; - } - if (fesetround (FE_UPWARD) != 0) - { - puts ("fesetround (FE_UPWARD) failed"); - return 1; - } - if (fesetenv (&base_env) != 0) - { - puts ("fesetenv (&base_env) failed"); - return 1; - } - volatile float a = 1.0f, b = FLT_MIN, c; - c = a + b; - if (c != 1.0f) - { - puts ("fesetenv did not restore rounding mode"); - ret = 1; - } - if (fesetround (FE_DOWNWARD) != 0) - { - puts ("fesetround (FE_DOWNWARD) failed"); - return 1; - } - if (feupdateenv (&base_env) != 0) - { - puts ("feupdateenv (&base_env) failed"); - return 1; - } - volatile float d = -FLT_MIN, e; - e = a + d; - if (e != 1.0f) - { - puts ("feupdateenv did not restore rounding mode"); - ret = 1; - } - if (fesetround (FE_UPWARD) != 0) - { - puts ("fesetround (FE_UPWARD) failed"); - return 1; - } - fenv_t upward_env; - if (feholdexcept (&upward_env) != 0) - { - puts ("feholdexcept (&upward_env) failed"); - return 1; - } - if (fesetround (FE_DOWNWARD) != 0) - { - puts ("fesetround (FE_DOWNWARD) failed"); - return 1; - } - if (fesetenv (&upward_env) != 0) - { - puts ("fesetenv (&upward_env) failed"); - return 1; - } - e = a + d; - if (e != 1.0f) - { - puts ("fesetenv did not restore rounding mode from feholdexcept"); - ret = 1; - } - if (fesetround (FE_UPWARD) != 0) - { - puts ("fesetround (FE_UPWARD) failed"); - return 1; - } - if (fesetenv (FE_DFL_ENV) != 0) - { - puts ("fesetenv (FE_DFL_ENV) failed"); - return 1; - } - c = a + b; - if (c != 1.0f) - { - puts ("fesetenv (FE_DFL_ENV) did not restore rounding mode"); - ret = 1; - } - return ret; -} - -static int -do_test (void) -{ - if (!have_sse2 ()) - { - puts ("CPU does not support SSE2, cannot test"); - return 0; - } - return sse_tests (); -} - -#define TEST_FUNCTION do_test () -#include diff --git a/sysdeps/x86/fpu/test-fenv-x87.c b/sysdeps/x86/fpu/test-fenv-x87.c deleted file mode 100644 index 29ae1c8a7e..0000000000 --- a/sysdeps/x86/fpu/test-fenv-x87.c +++ /dev/null @@ -1,169 +0,0 @@ -/* Test x86-specific floating-point environment (bug 16068): x87 part. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -static uint16_t -get_x87_cw (void) -{ - fpu_control_t cw; - _FPU_GETCW (cw); - return cw; -} - -static void -set_x87_cw (uint16_t val) -{ - fpu_control_t cw = val; - _FPU_SETCW (cw); -} - -static void -set_x87_cw_bits (uint16_t mask, uint16_t bits) -{ - uint16_t cw = get_x87_cw (); - cw = (cw & ~mask) | bits; - set_x87_cw (cw); -} - -static int -test_x87_cw_bits (const char *test, uint16_t mask, uint16_t bits) -{ - uint16_t cw = get_x87_cw (); - printf ("Testing %s: cw = %x\n", test, cw); - if ((cw & mask) == bits) - { - printf ("PASS: %s\n", test); - return 0; - } - else - { - printf ("FAIL: %s\n", test); - return 1; - } -} - -static uint16_t -get_x87_sw (void) -{ - uint16_t temp; - __asm__ __volatile__ ("fnstsw %0" : "=a" (temp)); - return temp; -} - -static void -set_x87_sw_bits (uint16_t mask, uint16_t bits) -{ - fenv_t temp; - __asm__ __volatile__ ("fnstenv %0" : "=m" (temp)); - temp.__status_word = (temp.__status_word & ~mask) | bits; - __asm__ __volatile__ ("fldenv %0" : : "m" (temp)); -} - -static int -test_x87_sw_bits (const char *test, uint16_t mask, uint16_t bits) -{ - uint16_t sw = get_x87_sw (); - printf ("Testing %s: sw = %x\n", test, sw); - if ((sw & mask) == bits) - { - printf ("PASS: %s\n", test); - return 0; - } - else - { - printf ("FAIL: %s\n", test); - return 1; - } -} - -#define X87_CW_PREC_MASK _FPU_EXTENDED - -static int -do_test (void) -{ - int result = 0; - fenv_t env1, env2; - /* Test precision mask. */ - fegetenv (&env1); - set_x87_cw_bits (X87_CW_PREC_MASK, _FPU_SINGLE); - fegetenv (&env2); - fesetenv (&env1); - result |= test_x87_cw_bits ("fesetenv precision restoration", - X87_CW_PREC_MASK, _FPU_EXTENDED); - set_x87_cw_bits (X87_CW_PREC_MASK, _FPU_EXTENDED); - fesetenv (&env2); - result |= test_x87_cw_bits ("fesetenv precision restoration 2", - X87_CW_PREC_MASK, _FPU_SINGLE); - set_x87_cw_bits (X87_CW_PREC_MASK, _FPU_DOUBLE); - fesetenv (FE_NOMASK_ENV); - result |= test_x87_cw_bits ("fesetenv (FE_NOMASK_ENV) precision restoration", - X87_CW_PREC_MASK, _FPU_EXTENDED); - set_x87_cw_bits (X87_CW_PREC_MASK, _FPU_SINGLE); - fesetenv (FE_DFL_ENV); - result |= test_x87_cw_bits ("fesetenv (FE_DFL_ENV) precision restoration", - X87_CW_PREC_MASK, _FPU_EXTENDED); - /* Test x87 denormal operand masking. */ - set_x87_cw_bits (_FPU_MASK_DM, 0); - fegetenv (&env2); - fesetenv (&env1); - result |= test_x87_cw_bits ("fesetenv denormal mask restoration", - _FPU_MASK_DM, _FPU_MASK_DM); - set_x87_cw_bits (_FPU_MASK_DM, _FPU_MASK_DM); - fesetenv (&env2); - result |= test_x87_cw_bits ("fesetenv denormal mask restoration 2", - _FPU_MASK_DM, 0); - set_x87_cw_bits (_FPU_MASK_DM, 0); - /* Presume FE_NOMASK_ENV should leave the "denormal operand" - exception masked, as not a standard exception. */ - fesetenv (FE_NOMASK_ENV); - result |= test_x87_cw_bits ("fesetenv (FE_NOMASK_ENV) denormal mask " - "restoration", - _FPU_MASK_DM, _FPU_MASK_DM); - set_x87_cw_bits (_FPU_MASK_DM, 0); - fesetenv (FE_DFL_ENV); - result |= test_x87_cw_bits ("fesetenv (FE_DFL_ENV) denormal mask " - "restoration", - _FPU_MASK_DM, _FPU_MASK_DM); - /* Test x87 denormal operand exception. */ - set_x87_sw_bits (__FE_DENORM, __FE_DENORM); - fegetenv (&env2); - fesetenv (&env1); - result |= test_x87_sw_bits ("fesetenv denormal exception restoration", - __FE_DENORM, 0); - set_x87_sw_bits (__FE_DENORM, 0); - fesetenv (&env2); - result |= test_x87_sw_bits ("fesetenv denormal exception restoration 2", - __FE_DENORM, __FE_DENORM); - set_x87_sw_bits (__FE_DENORM, __FE_DENORM); - fesetenv (FE_NOMASK_ENV); - result |= test_x87_sw_bits ("fesetenv (FE_NOMASK_ENV) exception restoration", - __FE_DENORM, 0); - set_x87_sw_bits (__FE_DENORM, __FE_DENORM); - fesetenv (FE_DFL_ENV); - result |= test_x87_sw_bits ("fesetenv (FE_DFL_ENV) exception restoration", - __FE_DENORM, 0); - return result; -} - -#define TEST_FUNCTION do_test () -#include diff --git a/sysdeps/x86/fpu/test-flt-eval-method-387.c b/sysdeps/x86/fpu/test-flt-eval-method-387.c deleted file mode 100644 index 2fb7acfb76..0000000000 --- a/sysdeps/x86/fpu/test-flt-eval-method-387.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/x86/fpu/test-flt-eval-method-sse.c b/sysdeps/x86/fpu/test-flt-eval-method-sse.c deleted file mode 100644 index 2fb7acfb76..0000000000 --- a/sysdeps/x86/fpu/test-flt-eval-method-sse.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/x86/fpu/test-math-vector-sincos.h b/sysdeps/x86/fpu/test-math-vector-sincos.h deleted file mode 100644 index 95282a3ac7..0000000000 --- a/sysdeps/x86/fpu/test-math-vector-sincos.h +++ /dev/null @@ -1,98 +0,0 @@ -/* Wrappers definitions for tests of ABI of vector sincos/sincosf having - vector declaration "#pragma omp declare simd notinbranch". - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define INIT_VEC_PTRS_LOOP(vec, val, len) \ - do \ - { \ - union { VEC_INT_TYPE v; __typeof__ ((val)[0]) *a[(len)]; } u; \ - for (i = 0; i < len; i++) \ - u.a[i] = &(val)[i]; \ - (vec) = u.v; \ - } \ - while (0) - -/* Wrapper for vector sincos/sincosf compatible with x86_64 and x32 variants - of _ZGVbN2vvv_sincos, _ZGVdN4vvv_sincos, _ZGVeN8vvv_sincos; - x32 variants of _ZGVbN4vvv_sincosf, _ZGVcN4vvv_sincos, _ZGVdN8vvv_sincosf, - _ZGVeN16vvv_sincosf. */ -#define VECTOR_WRAPPER_fFF_2(scalar_func, vector_func) \ -extern void vector_func (VEC_TYPE, VEC_INT_TYPE, VEC_INT_TYPE); \ -void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1) \ -{ \ - int i; \ - FLOAT r_loc[VEC_LEN], r1_loc[VEC_LEN]; \ - VEC_TYPE mx; \ - VEC_INT_TYPE mr, mr1; \ - INIT_VEC_LOOP (mx, x, VEC_LEN); \ - INIT_VEC_PTRS_LOOP (mr, r_loc, VEC_LEN); \ - INIT_VEC_PTRS_LOOP (mr1, r1_loc, VEC_LEN); \ - vector_func (mx, mr, mr1); \ - TEST_VEC_LOOP (r_loc, VEC_LEN); \ - TEST_VEC_LOOP (r1_loc, VEC_LEN); \ - *r = r_loc[0]; \ - *r1 = r1_loc[0]; \ - return; \ -} - -/* Wrapper for vector sincos/sincosf compatible with x86_64 variants of - _ZGVcN4vvv_sincos, _ZGVeN16vvv_sincosf, _ZGVbN4vvv_sincosf, - _ZGVdN8vvv_sincosf, _ZGVcN8vvv_sincosf. */ -#define VECTOR_WRAPPER_fFF_3(scalar_func, vector_func) \ -extern void vector_func (VEC_TYPE, VEC_INT_TYPE, VEC_INT_TYPE, \ - VEC_INT_TYPE, VEC_INT_TYPE); \ -void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1) \ -{ \ - int i; \ - FLOAT r_loc[VEC_LEN/2], r1_loc[VEC_LEN/2]; \ - VEC_TYPE mx; \ - VEC_INT_TYPE mr, mr1; \ - INIT_VEC_LOOP (mx, x, VEC_LEN); \ - INIT_VEC_PTRS_LOOP (mr, r_loc, VEC_LEN/2); \ - INIT_VEC_PTRS_LOOP (mr1, r1_loc, VEC_LEN/2); \ - vector_func (mx, mr, mr, mr1, mr1); \ - TEST_VEC_LOOP (r_loc, VEC_LEN/2); \ - TEST_VEC_LOOP (r1_loc, VEC_LEN/2); \ - *r = r_loc[0]; \ - *r1 = r1_loc[0]; \ - return; \ -} - -/* Wrapper for vector sincosf compatible with x86_64 variant of - _ZGVcN8vvv_sincosf. */ -#define VECTOR_WRAPPER_fFF_4(scalar_func, vector_func) \ -extern void vector_func (VEC_TYPE, VEC_INT_TYPE, VEC_INT_TYPE, \ - VEC_INT_TYPE, VEC_INT_TYPE, \ - VEC_INT_TYPE, VEC_INT_TYPE, \ - VEC_INT_TYPE, VEC_INT_TYPE); \ -void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1) \ -{ \ - int i; \ - FLOAT r_loc[VEC_LEN/4], r1_loc[VEC_LEN/4]; \ - VEC_TYPE mx; \ - VEC_INT_TYPE mr, mr1; \ - INIT_VEC_LOOP (mx, x, VEC_LEN); \ - INIT_VEC_PTRS_LOOP (mr, r_loc, VEC_LEN/4); \ - INIT_VEC_PTRS_LOOP (mr1, r1_loc, VEC_LEN/4); \ - vector_func (mx, mr, mr, mr, mr, mr1, mr1, mr1, mr1); \ - TEST_VEC_LOOP (r_loc, VEC_LEN/4); \ - TEST_VEC_LOOP (r1_loc, VEC_LEN/4); \ - *r = r_loc[0]; \ - *r1 = r1_loc[0]; \ - return; \ -} diff --git a/sysdeps/x86/fpu_control.h b/sysdeps/x86/fpu_control.h deleted file mode 100644 index 7f8a57183a..0000000000 --- a/sysdeps/x86/fpu_control.h +++ /dev/null @@ -1,109 +0,0 @@ -/* FPU control word bits. x86 version. - Copyright (C) 1993-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Olaf Flebbe. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _FPU_CONTROL_H -#define _FPU_CONTROL_H 1 - -/* Note that this file sets on x86-64 only the x87 FPU, it does not - touch the SSE unit. */ - -/* Here is the dirty part. Set up your 387 through the control word - * (cw) register. - * - * 15-13 12 11-10 9-8 7-6 5 4 3 2 1 0 - * | reserved | IC | RC | PC | reserved | PM | UM | OM | ZM | DM | IM - * - * IM: Invalid operation mask - * DM: Denormalized operand mask - * ZM: Zero-divide mask - * OM: Overflow mask - * UM: Underflow mask - * PM: Precision (inexact result) mask - * - * Mask bit is 1 means no interrupt. - * - * PC: Precision control - * 11 - round to extended precision - * 10 - round to double precision - * 00 - round to single precision - * - * RC: Rounding control - * 00 - rounding to nearest - * 01 - rounding down (toward - infinity) - * 10 - rounding up (toward + infinity) - * 11 - rounding toward zero - * - * IC: Infinity control - * That is for 8087 and 80287 only. - * - * The hardware default is 0x037f which we use. - */ - -#include - -/* masking of interrupts */ -#define _FPU_MASK_IM 0x01 -#define _FPU_MASK_DM 0x02 -#define _FPU_MASK_ZM 0x04 -#define _FPU_MASK_OM 0x08 -#define _FPU_MASK_UM 0x10 -#define _FPU_MASK_PM 0x20 - -/* precision control */ -#define _FPU_EXTENDED 0x300 /* libm requires double extended precision. */ -#define _FPU_DOUBLE 0x200 -#define _FPU_SINGLE 0x0 - -/* rounding control */ -#define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */ -#define _FPU_RC_DOWN 0x400 -#define _FPU_RC_UP 0x800 -#define _FPU_RC_ZERO 0xC00 - -#define _FPU_RESERVED 0xF0C0 /* Reserved bits in cw */ - - -/* The fdlibm code requires strict IEEE double precision arithmetic, - and no interrupts for exceptions, rounding to nearest. */ - -#define _FPU_DEFAULT 0x037f - -/* IEEE: same as above. */ -#define _FPU_IEEE 0x037f - -/* Type of the control word. */ -typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__))); - -/* Macros for accessing the hardware control word. "*&" is used to - work around a bug in older versions of GCC. __volatile__ is used - to support combination of writing the control register and reading - it back. Without __volatile__, the old value may be used for reading - back under compiler optimization. - - Note that the use of these macros is not sufficient anymore with - recent hardware nor on x86-64. Some floating point operations are - executed in the SSE/SSE2 engines which have their own control and - status register. */ -#define _FPU_GETCW(cw) __asm__ __volatile__ ("fnstcw %0" : "=m" (*&cw)) -#define _FPU_SETCW(cw) __asm__ __volatile__ ("fldcw %0" : : "m" (*&cw)) - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#endif /* fpu_control.h */ diff --git a/sysdeps/x86/init-arch.h b/sysdeps/x86/init-arch.h deleted file mode 100644 index 15d3f0975d..0000000000 --- a/sysdeps/x86/init-arch.h +++ /dev/null @@ -1,75 +0,0 @@ -/* This file is part of the GNU C Library. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef __ASSEMBLER__ -# include -#else -# include -#endif - -/* These macros are used to implement ifunc selection in C. To implement - an ifunc function, foo, which returns the address of __foo_sse2 or - __foo_avx2: - - #define foo __redirect_foo - #define __foo __redirect___foo - #include - #undef foo - #undef __foo - #define SYMBOL_NAME foo - #include - - extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden; - extern __typeof (REDIRECT_NAME) OPTIMIZE (avx2) attribute_hidden; - - static inline void * - foo_selector (void) - { - if (use AVX2) - return OPTIMIZE (avx2); - - return OPTIMIZE (sse2); - } - - libc_ifunc_redirected (__redirect_foo, foo, foo_selector ()); - -*/ - -#define PASTER1(x,y) x##_##y -#define EVALUATOR1(x,y) PASTER1 (x,y) -#define PASTER2(x,y) __##x##_##y -#define EVALUATOR2(x,y) PASTER2 (x,y) - -/* Basically set '__redirect_' to use as type definition, - '___' as the optimized implementation and - '_ifunc_selector' as the IFUNC selector. */ -#define REDIRECT_NAME EVALUATOR1 (__redirect, SYMBOL_NAME) -#define OPTIMIZE(name) EVALUATOR2 (SYMBOL_NAME, name) -#define IFUNC_SELECTOR EVALUATOR1 (SYMBOL_NAME, ifunc_selector) - -#ifndef __x86_64__ -/* Due to the reordering and the other nifty extensions in i686, it is - not really good to use heavily i586 optimized code on an i686. It's - better to use i486 code if it isn't an i586. */ -# if MINIMUM_ISA == 686 -# define USE_I586 0 -# define USE_I686 1 -# else -# define USE_I586 (HAS_ARCH_FEATURE (I586) && !HAS_ARCH_FEATURE (I686)) -# define USE_I686 HAS_ARCH_FEATURE (I686) -# endif -#endif diff --git a/sysdeps/x86/libc-start.c b/sysdeps/x86/libc-start.c deleted file mode 100644 index e11b490f5c..0000000000 --- a/sysdeps/x86/libc-start.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef SHARED -#include -# include -# include - -extern struct cpu_features _dl_x86_cpu_features; - -#define ARCH_INIT_CPU_FEATURES() init_cpu_features (&_dl_x86_cpu_features) - -#endif -# include diff --git a/sysdeps/x86/linkmap.h b/sysdeps/x86/linkmap.h deleted file mode 100644 index dd0d140874..0000000000 --- a/sysdeps/x86/linkmap.h +++ /dev/null @@ -1,16 +0,0 @@ -#if __WORDSIZE == 64 -struct link_map_machine - { - Elf64_Addr plt; /* Address of .plt + 0x16 */ - Elf64_Addr gotplt; /* Address of .got + 0x18 */ - void *tlsdesc_table; /* Address of TLS descriptor hash table. */ - }; - -#else -struct link_map_machine - { - Elf32_Addr plt; /* Address of .plt + 0x16 */ - Elf32_Addr gotplt; /* Address of .got + 0x0c */ - void *tlsdesc_table; /* Address of TLS descriptor hash table. */ - }; -#endif diff --git a/sysdeps/x86/nptl/bits/pthreadtypes-arch.h b/sysdeps/x86/nptl/bits/pthreadtypes-arch.h deleted file mode 100644 index fd86806800..0000000000 --- a/sysdeps/x86/nptl/bits/pthreadtypes-arch.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _BITS_PTHREADTYPES_ARCH_H -#define _BITS_PTHREADTYPES_ARCH_H 1 - -#include - -#ifdef __x86_64__ -# if __WORDSIZE == 64 -# define __SIZEOF_PTHREAD_MUTEX_T 40 -# define __SIZEOF_PTHREAD_ATTR_T 56 -# define __SIZEOF_PTHREAD_MUTEX_T 40 -# define __SIZEOF_PTHREAD_RWLOCK_T 56 -# define __SIZEOF_PTHREAD_BARRIER_T 32 -# else -# define __SIZEOF_PTHREAD_MUTEX_T 32 -# define __SIZEOF_PTHREAD_ATTR_T 32 -# define __SIZEOF_PTHREAD_MUTEX_T 32 -# define __SIZEOF_PTHREAD_RWLOCK_T 44 -# define __SIZEOF_PTHREAD_BARRIER_T 20 -# endif -#else -# define __SIZEOF_PTHREAD_MUTEX_T 24 -# define __SIZEOF_PTHREAD_ATTR_T 36 -# define __SIZEOF_PTHREAD_MUTEX_T 24 -# define __SIZEOF_PTHREAD_RWLOCK_T 32 -# define __SIZEOF_PTHREAD_BARRIER_T 20 -#endif -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - -/* Definitions for internal mutex struct. */ -#define __PTHREAD_COMPAT_PADDING_MID -#define __PTHREAD_COMPAT_PADDING_END -#define __PTHREAD_MUTEX_LOCK_ELISION 1 - -#define __LOCK_ALIGNMENT -#define __ONCE_ALIGNMENT - -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; -#ifdef __x86_64__ - int __cur_writer; - int __shared; - signed char __rwelision; -# ifdef __ILP32__ - unsigned char __pad1[3]; -# define __PTHREAD_RWLOCK_ELISION_EXTRA 0, { 0, 0, 0 } -# else - unsigned char __pad1[7]; -# define __PTHREAD_RWLOCK_ELISION_EXTRA 0, { 0, 0, 0, 0, 0, 0, 0 } -# endif - unsigned long int __pad2; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned int __flags; -# define __PTHREAD_RWLOCK_INT_FLAGS_SHARED 1 -#else - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; - unsigned char __shared; - signed char __rwelision; -# define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - unsigned char __pad2; - int __cur_writer; -#endif -}; - -#ifndef __x86_64__ -/* Extra attributes for the cleanup functions. */ -# define __cleanup_fct_attribute __attribute__ ((__regparm__ (1))) -#endif - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/x86/string_private.h b/sysdeps/x86/string_private.h deleted file mode 100644 index 485b73eca5..0000000000 --- a/sysdeps/x86/string_private.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Define _STRING_ARCH_unaligned. i486/x86-64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* The ix86 processors can access unaligned multi-byte variables. */ -#define _STRING_ARCH_unaligned 1 diff --git a/sysdeps/x86/tininess.h b/sysdeps/x86/tininess.h deleted file mode 100644 index 1db37790f8..0000000000 --- a/sysdeps/x86/tininess.h +++ /dev/null @@ -1 +0,0 @@ -#define TININESS_AFTER_ROUNDING 1 diff --git a/sysdeps/x86/tst-get-cpu-features-static.c b/sysdeps/x86/tst-get-cpu-features-static.c deleted file mode 100644 index 03f59060c5..0000000000 --- a/sysdeps/x86/tst-get-cpu-features-static.c +++ /dev/null @@ -1 +0,0 @@ -#include "tst-get-cpu-features.c" diff --git a/sysdeps/x86/tst-get-cpu-features.c b/sysdeps/x86/tst-get-cpu-features.c deleted file mode 100644 index 5aa5779857..0000000000 --- a/sysdeps/x86/tst-get-cpu-features.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Test case for x86 __get_cpu_features interface - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -static int -do_test (void) -{ - if (__get_cpu_features ()->kind == arch_kind_unknown) - abort (); - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../../test-skeleton.c" diff --git a/sysdeps/x86_64/64/Implies-after b/sysdeps/x86_64/64/Implies-after deleted file mode 100644 index a8cae95f9d..0000000000 --- a/sysdeps/x86_64/64/Implies-after +++ /dev/null @@ -1 +0,0 @@ -wordsize-64 diff --git a/sysdeps/x86_64/Implies b/sysdeps/x86_64/Implies deleted file mode 100644 index 811c19a8f2..0000000000 --- a/sysdeps/x86_64/Implies +++ /dev/null @@ -1,5 +0,0 @@ -x86 -ieee754/ldbl-96 -ieee754/dbl-64/wordsize-64 -ieee754/dbl-64 -ieee754/flt-32 diff --git a/sysdeps/x86_64/Makefile b/sysdeps/x86_64/Makefile deleted file mode 100644 index 5075c91277..0000000000 --- a/sysdeps/x86_64/Makefile +++ /dev/null @@ -1,124 +0,0 @@ -# The i387 `long double' is a distinct type we support. -long-double-fcts = yes - -ifeq ($(subdir),csu) -gen-as-const-headers += link-defines.sym -endif - -ifeq ($(subdir),gmon) -sysdep_routines += _mcount -# We cannot compile _mcount.S with -pg because that would create -# recursive calls when ENTRY is used. Just copy the normal static -# object. -sysdep_noprof += _mcount -endif - -ifeq ($(subdir),malloc) -tests += tst-mallocalign1 -endif - -ifeq ($(subdir),string) -sysdep_routines += cacheinfo strcasecmp_l-nonascii strncase_l-nonascii -gen-as-const-headers += locale-defines.sym -endif - -ifeq ($(subdir),elf) -# There is no good reason to use MMX in x86-64 ld.so with GCC. -CFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\ - -mno-mmx) - -sysdep-dl-routines += tlsdesc dl-tlsdesc - -tests += ifuncmain8 -modules-names += ifuncmod8 - -$(objpfx)ifuncmain8: $(objpfx)ifuncmod8.so - -tests += tst-quad1 tst-quad2 -modules-names += tst-quadmod1 tst-quadmod2 - -$(objpfx)tst-quad1: $(objpfx)tst-quadmod1.so -$(objpfx)tst-quad2: $(objpfx)tst-quadmod2.so - -quad-pie-test += tst-quad1pie tst-quad2pie -tests += $(quad-pie-test) -tests-pie += $(quad-pie-test) -test-extras += tst-quadmod1pie tst-quadmod2pie -extra-test-objs += tst-quadmod1pie.o tst-quadmod2pie.o - -$(objpfx)tst-quad1pie: $(objpfx)tst-quadmod1pie.o -$(objpfx)tst-quad2pie: $(objpfx)tst-quadmod2pie.o - -CFLAGS-tst-quad1pie.c = $(PIE-ccflag) -CFLAGS-tst-quad2pie.c = $(PIE-ccflag) - -tests += tst-audit3 tst-audit4 tst-audit5 tst-audit6 tst-audit7 \ - tst-audit10 tst-sse tst-avx tst-avx512 -test-extras += tst-audit4-aux tst-audit10-aux \ - tst-avx-aux tst-avx512-aux -extra-test-objs += tst-audit4-aux.o tst-audit10-aux.o \ - tst-avx-aux.o tst-avx512-aux.o - -tests += tst-split-dynreloc -LDFLAGS-tst-split-dynreloc = -Wl,-T,$(..)sysdeps/x86_64/tst-split-dynreloc.lds -tst-split-dynreloc-ENV = LD_BIND_NOW=1 - -modules-names += tst-auditmod3a tst-auditmod3b \ - tst-auditmod4a tst-auditmod4b \ - tst-auditmod5a tst-auditmod5b \ - tst-auditmod6a tst-auditmod6b tst-auditmod6c \ - tst-auditmod7a tst-auditmod7b \ - tst-auditmod10a tst-auditmod10b \ - tst-ssemod tst-avxmod tst-avx512mod - -$(objpfx)tst-audit3: $(objpfx)tst-auditmod3a.so -$(objpfx)tst-audit3.out: $(objpfx)tst-auditmod3b.so -tst-audit3-ENV = LD_AUDIT=$(objpfx)tst-auditmod3b.so - -$(objpfx)tst-audit4: $(objpfx)tst-audit4-aux.o $(objpfx)tst-auditmod4a.so -$(objpfx)tst-audit4.out: $(objpfx)tst-auditmod4b.so -tst-audit4-ENV = LD_AUDIT=$(objpfx)tst-auditmod4b.so - -$(objpfx)tst-audit5: $(objpfx)tst-auditmod5a.so -$(objpfx)tst-audit5.out: $(objpfx)tst-auditmod5b.so -tst-audit5-ENV = LD_AUDIT=$(objpfx)tst-auditmod5b.so - -$(objpfx)tst-audit6: $(objpfx)tst-auditmod6a.so -$(objpfx)tst-audit6.out: $(objpfx)tst-auditmod6b.so \ - $(objpfx)tst-auditmod6c.so -tst-audit6-ENV = LD_AUDIT=$(objpfx)tst-auditmod6b.so:$(objpfx)tst-auditmod6c.so - -$(objpfx)tst-audit7: $(objpfx)tst-auditmod7a.so -$(objpfx)tst-audit7.out: $(objpfx)tst-auditmod7b.so -tst-audit7-ENV = LD_AUDIT=$(objpfx)tst-auditmod7b.so - -$(objpfx)tst-audit10: $(objpfx)tst-audit10-aux.o $(objpfx)tst-auditmod10a.so -$(objpfx)tst-audit10.out: $(objpfx)tst-auditmod10b.so -tst-audit10-ENV = LD_AUDIT=$(objpfx)tst-auditmod10b.so - -$(objpfx)tst-sse: $(objpfx)tst-ssemod.so -$(objpfx)tst-avx: $(objpfx)tst-avx-aux.o $(objpfx)tst-avxmod.so -$(objpfx)tst-avx512: $(objpfx)tst-avx512-aux.o $(objpfx)tst-avx512mod.so - -AVX-CFLAGS=-mavx -mno-vzeroupper -CFLAGS-tst-audit4-aux.c += $(AVX-CFLAGS) -CFLAGS-tst-auditmod4a.c += $(AVX-CFLAGS) -CFLAGS-tst-auditmod4b.c += $(AVX-CFLAGS) -CFLAGS-tst-auditmod6b.c += $(AVX-CFLAGS) -CFLAGS-tst-auditmod6c.c += $(AVX-CFLAGS) -CFLAGS-tst-auditmod7b.c += $(AVX-CFLAGS) -CFLAGS-tst-avx-aux.c += $(AVX-CFLAGS) -CFLAGS-tst-avxmod.c += $(AVX-CFLAGS) -ifeq (yes,$(config-cflags-avx512)) -AVX512-CFLAGS = -mavx512f -CFLAGS-tst-audit10-aux.c += $(AVX512-CFLAGS) -CFLAGS-tst-auditmod10a.c += $(AVX512-CFLAGS) -CFLAGS-tst-auditmod10b.c += $(AVX512-CFLAGS) -CFLAGS-tst-avx512-aux.c += $(AVX512-CFLAGS) -CFLAGS-tst-avx512mod.c += $(AVX512-CFLAGS) -endif -endif - -ifeq ($(subdir),csu) -gen-as-const-headers += tlsdesc.sym -endif diff --git a/sysdeps/x86_64/Versions b/sysdeps/x86_64/Versions deleted file mode 100644 index a437f85e6e..0000000000 --- a/sysdeps/x86_64/Versions +++ /dev/null @@ -1,12 +0,0 @@ -libc { - GLIBC_2.14 { - memcpy; - } -} -libm { - GLIBC_2.1 { - # A generic bug got this omitted from other configurations' version - # sets, but we always had it. - exp2l; - } -} diff --git a/sysdeps/x86_64/____longjmp_chk.S b/sysdeps/x86_64/____longjmp_chk.S deleted file mode 100644 index 0910861a9d..0000000000 --- a/sysdeps/x86_64/____longjmp_chk.S +++ /dev/null @@ -1 +0,0 @@ -#error "OS-specific version needed" diff --git a/sysdeps/x86_64/__longjmp.S b/sysdeps/x86_64/__longjmp.S deleted file mode 100644 index 350b6b1bf6..0000000000 --- a/sysdeps/x86_64/__longjmp.S +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -/* Jump to the position specified by ENV, causing the - setjmp call there to return VAL, or 1 if VAL is 0. - void __longjmp (__jmp_buf env, int val). */ - .text -ENTRY(__longjmp) - /* Restore registers. */ - mov (JB_RSP*8)(%rdi),%R8_LP - mov (JB_RBP*8)(%rdi),%R9_LP - mov (JB_PC*8)(%rdi),%RDX_LP -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (%R8_LP) - PTR_DEMANGLE (%R9_LP) - PTR_DEMANGLE (%RDX_LP) -# ifdef __ILP32__ - /* We ignored the high bits of the %rbp value because only the low - bits are mangled. But we cannot presume that %rbp is being used - as a pointer and truncate it, so recover the high bits. */ - movl (JB_RBP*8 + 4)(%rdi), %eax - shlq $32, %rax - orq %rax, %r9 -# endif -#endif - LIBC_PROBE (longjmp, 3, LP_SIZE@%RDI_LP, -4@%esi, LP_SIZE@%RDX_LP) - /* We add unwind information for the target here. */ - cfi_def_cfa(%rdi, 0) - cfi_register(%rsp,%r8) - cfi_register(%rbp,%r9) - cfi_register(%rip,%rdx) - cfi_offset(%rbx,JB_RBX*8) - cfi_offset(%r12,JB_R12*8) - cfi_offset(%r13,JB_R13*8) - cfi_offset(%r14,JB_R14*8) - cfi_offset(%r15,JB_R15*8) - movq (JB_RBX*8)(%rdi),%rbx - movq (JB_R12*8)(%rdi),%r12 - movq (JB_R13*8)(%rdi),%r13 - movq (JB_R14*8)(%rdi),%r14 - movq (JB_R15*8)(%rdi),%r15 - /* Set return value for setjmp. */ - mov %esi, %eax - mov %R8_LP,%RSP_LP - movq %r9,%rbp - LIBC_PROBE (longjmp_target, 3, - LP_SIZE@%RDI_LP, -4@%eax, LP_SIZE@%RDX_LP) - jmpq *%rdx -END (__longjmp) diff --git a/sysdeps/x86_64/_mcount.S b/sysdeps/x86_64/_mcount.S deleted file mode 100644 index bcf0957752..0000000000 --- a/sysdeps/x86_64/_mcount.S +++ /dev/null @@ -1,125 +0,0 @@ -/* Machine-specific calling sequence for `mcount' profiling function. x86-64 version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - Contributed by Andreas Jaeger . - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Assembly stub to invoke _mcount(). Compiler generated code calls - this stub after executing a function's prologue and without saving any - registers. It is therefore necessary to preserve %rcx, %rdx, %rsi, %rdi, - %r8, %r9 as they may contain function arguments. */ - -#include - -ENTRY(_mcount) - /* Allocate space for 7 registers. */ - subq $56,%rsp - cfi_adjust_cfa_offset (56) - movq %rax,(%rsp) - cfi_rel_offset (rax, 0) - movq %rcx,8(%rsp) - cfi_rel_offset (rcx, 8) - movq %rdx,16(%rsp) - cfi_rel_offset (rdx, 16) - movq %rsi,24(%rsp) - cfi_rel_offset (rsi, 24) - movq %rdi,32(%rsp) - cfi_rel_offset (rdi, 32) - movq %r8,40(%rsp) - cfi_rel_offset (r8, 40) - movq %r9,48(%rsp) - cfi_rel_offset (r9, 48) - - /* Setup parameter for __mcount_internal. */ - /* selfpc is the return address on the stack. */ - movq 56(%rsp),%rsi - /* Get frompc via the frame pointer. */ - movq 8(%rbp),%rdi - call C_SYMBOL_NAME(__mcount_internal) - /* Pop the saved registers. Please note that `mcount' has no - return value. */ - movq 48(%rsp),%r9 - cfi_restore (r9) - movq 40(%rsp),%r8 - cfi_restore (r8) - movq 32(%rsp),%rdi - cfi_restore (rdi) - movq 24(%rsp),%rsi - cfi_restore (rsi) - movq 16(%rsp),%rdx - cfi_restore (rdx) - movq 8(%rsp),%rcx - cfi_restore (rcx) - movq (%rsp),%rax - cfi_restore (rax) - addq $56,%rsp - cfi_adjust_cfa_offset (-56) - ret -END(_mcount) - -#undef mcount -weak_alias (_mcount, mcount) - -/* __fentry__ is different from _mcount in that it is called before - function prolog. This means (among other things) that it has non-standard - stack alignment on entry: (%RSP & 0xF) == 0. */ - -ENTRY(__fentry__) - /* Allocate space for 7 registers - (+8 bytes for proper stack alignment). */ - subq $64,%rsp - cfi_adjust_cfa_offset (64) - movq %rax,(%rsp) - cfi_rel_offset (rax, 0) - movq %rcx,8(%rsp) - cfi_rel_offset (rcx, 8) - movq %rdx,16(%rsp) - cfi_rel_offset (rdx, 16) - movq %rsi,24(%rsp) - cfi_rel_offset (rsi, 24) - movq %rdi,32(%rsp) - cfi_rel_offset (rdi, 32) - movq %r8,40(%rsp) - cfi_rel_offset (r8, 40) - movq %r9,48(%rsp) - cfi_rel_offset (r9, 48) - - /* Setup parameter for __mcount_internal. */ - /* selfpc is the return address on the stack. */ - movq 64(%rsp),%rsi - /* caller is the return address above it */ - movq 72(%rsp),%rdi - call C_SYMBOL_NAME(__mcount_internal) - /* Pop the saved registers. Please note that `__fentry__' has no - return value. */ - movq 48(%rsp),%r9 - cfi_restore (r9) - movq 40(%rsp),%r8 - cfi_restore (r8) - movq 32(%rsp),%rdi - cfi_restore (rdi) - movq 24(%rsp),%rsi - cfi_restore (rsi) - movq 16(%rsp),%rdx - cfi_restore (rdx) - movq 8(%rsp),%rcx - cfi_restore (rcx) - movq (%rsp),%rax - cfi_restore (rax) - addq $64,%rsp - cfi_adjust_cfa_offset (-64) - ret -END(__fentry__) diff --git a/sysdeps/x86_64/abort-instr.h b/sysdeps/x86_64/abort-instr.h deleted file mode 100644 index 810f10379b..0000000000 --- a/sysdeps/x86_64/abort-instr.h +++ /dev/null @@ -1,2 +0,0 @@ -/* An instruction which should crash any program is `hlt'. */ -#define ABORT_INSTRUCTION asm ("hlt") diff --git a/sysdeps/x86_64/add_n.S b/sysdeps/x86_64/add_n.S deleted file mode 100644 index 4ba83c0bdb..0000000000 --- a/sysdeps/x86_64/add_n.S +++ /dev/null @@ -1,100 +0,0 @@ -/* x86-64 __mpn_add_n -- Add two limb vectors of the same length > 0 and store - sum in a third limb vector. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define rp %rdi -#define up %rsi -#define vp %rdx -#define n %rcx -#define cy %r8 - -#ifndef func -# define func __mpn_add_n -# define ADCSBB adc -#endif - - .text -ENTRY (func) - xor %r8, %r8 - mov (up), %r10 - mov (vp), %r11 - - lea -8(up,n,8), up - lea -8(vp,n,8), vp - lea -16(rp,n,8), rp - mov %ecx, %eax - neg n - and $3, %eax - je L(b00) - add %rax, n /* clear low rcx bits for jrcxz */ - cmp $2, %eax - jl L(b01) - je L(b10) - -L(b11): shr %r8 /* set cy */ - jmp L(e11) - -L(b00): shr %r8 /* set cy */ - mov %r10, %r8 - mov %r11, %r9 - lea 4(n), n - jmp L(e00) - -L(b01): shr %r8 /* set cy */ - jmp L(e01) - -L(b10): shr %r8 /* set cy */ - mov %r10, %r8 - mov %r11, %r9 - jmp L(e10) - -L(end): ADCSBB %r11, %r10 - mov %r10, 8(rp) - mov %ecx, %eax /* clear eax, ecx contains 0 */ - adc %eax, %eax - ret - - .p2align 4 -L(top): - mov -24(up,n,8), %r8 - mov -24(vp,n,8), %r9 - ADCSBB %r11, %r10 - mov %r10, -24(rp,n,8) -L(e00): - mov -16(up,n,8), %r10 - mov -16(vp,n,8), %r11 - ADCSBB %r9, %r8 - mov %r8, -16(rp,n,8) -L(e11): - mov -8(up,n,8), %r8 - mov -8(vp,n,8), %r9 - ADCSBB %r11, %r10 - mov %r10, -8(rp,n,8) -L(e10): - mov (up,n,8), %r10 - mov (vp,n,8), %r11 - ADCSBB %r9, %r8 - mov %r8, (rp,n,8) -L(e01): - jrcxz L(end) - lea 4(n), n - jmp L(top) -END (func) diff --git a/sysdeps/x86_64/addmul_1.S b/sysdeps/x86_64/addmul_1.S deleted file mode 100644 index faccdfdbc4..0000000000 --- a/sysdeps/x86_64/addmul_1.S +++ /dev/null @@ -1,114 +0,0 @@ -/* x86-64 __mpn_addmul_1 -- Multiply a limb vector with a limb and add - the result to a second limb vector. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define rp %rdi -#define up %rsi -#define n %rdx -#define v0 %rcx - -#ifndef func -# define func __mpn_addmul_1 -# define ADDSUB add -#endif - - .text -ENTRY (func) - push %rbx - push %rbp - lea (%rdx), %rbx - neg %rbx - - mov (up), %rax - mov (rp), %r10 - - lea -16(rp,%rdx,8), rp - lea (up,%rdx,8), up - mul %rcx - - bt $0, %ebx - jc L(odd) - - lea (%rax), %r11 - mov 8(up,%rbx,8), %rax - lea (%rdx), %rbp - mul %rcx - add $2, %rbx - jns L(n2) - - lea (%rax), %r8 - mov (up,%rbx,8), %rax - lea (%rdx), %r9 - jmp L(mid) - -L(odd): add $1, %rbx - jns L(n1) - - lea (%rax), %r8 - mov (up,%rbx,8), %rax - lea (%rdx), %r9 - mul %rcx - lea (%rax), %r11 - mov 8(up,%rbx,8), %rax - lea (%rdx), %rbp - jmp L(e) - - .p2align 4 -L(top): mul %rcx - ADDSUB %r8, %r10 - lea (%rax), %r8 - mov (up,%rbx,8), %rax - adc %r9, %r11 - mov %r10, -8(rp,%rbx,8) - mov (rp,%rbx,8), %r10 - lea (%rdx), %r9 - adc $0, %rbp -L(mid): mul %rcx - ADDSUB %r11, %r10 - lea (%rax), %r11 - mov 8(up,%rbx,8), %rax - adc %rbp, %r8 - mov %r10, (rp,%rbx,8) - mov 8(rp,%rbx,8), %r10 - lea (%rdx), %rbp - adc $0, %r9 -L(e): add $2, %rbx - js L(top) - - mul %rcx - ADDSUB %r8, %r10 - adc %r9, %r11 - mov %r10, -8(rp) - adc $0, %rbp -L(n2): mov (rp), %r10 - ADDSUB %r11, %r10 - adc %rbp, %rax - mov %r10, (rp) - adc $0, %rdx -L(n1): mov 8(rp), %r10 - ADDSUB %rax, %r10 - mov %r10, 8(rp) - mov %ebx, %eax /* zero rax */ - adc %rdx, %rax - pop %rbp - pop %rbx - ret -END (func) diff --git a/sysdeps/x86_64/atomic-machine.h b/sysdeps/x86_64/atomic-machine.h deleted file mode 100644 index c454734001..0000000000 --- a/sysdeps/x86_64/atomic-machine.h +++ /dev/null @@ -1,482 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _X86_64_ATOMIC_MACHINE_H -#define _X86_64_ATOMIC_MACHINE_H 1 - -#include -#include /* For tcbhead_t. */ -#include /* For cast_to_integer. */ - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int16_t atomic16_t; -typedef uint16_t uatomic16_t; -typedef int_fast16_t atomic_fast16_t; -typedef uint_fast16_t uatomic_fast16_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - - -#ifndef LOCK_PREFIX -# ifdef UP -# define LOCK_PREFIX /* nothing */ -# else -# define LOCK_PREFIX "lock;" -# endif -#endif - -#define __HAVE_64B_ATOMICS 1 -#define USE_ATOMIC_COMPILER_BUILTINS 1 -#define ATOMIC_EXCHANGE_USES_CAS 0 - -#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ - __sync_val_compare_and_swap (mem, oldval, newval) -#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \ - (! __sync_bool_compare_and_swap (mem, oldval, newval)) - - -#define __arch_c_compare_and_exchange_val_8_acq(mem, newval, oldval) \ - ({ __typeof (*mem) ret; \ - __asm __volatile ("cmpl $0, %%fs:%P5\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tcmpxchgb %b2, %1" \ - : "=a" (ret), "=m" (*mem) \ - : "q" (newval), "m" (*mem), "0" (oldval), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - ret; }) - -#define __arch_c_compare_and_exchange_val_16_acq(mem, newval, oldval) \ - ({ __typeof (*mem) ret; \ - __asm __volatile ("cmpl $0, %%fs:%P5\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tcmpxchgw %w2, %1" \ - : "=a" (ret), "=m" (*mem) \ - : "q" (newval), "m" (*mem), "0" (oldval), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - ret; }) - -#define __arch_c_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - ({ __typeof (*mem) ret; \ - __asm __volatile ("cmpl $0, %%fs:%P5\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tcmpxchgl %2, %1" \ - : "=a" (ret), "=m" (*mem) \ - : "q" (newval), "m" (*mem), "0" (oldval), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - ret; }) - -#define __arch_c_compare_and_exchange_val_64_acq(mem, newval, oldval) \ - ({ __typeof (*mem) ret; \ - __asm __volatile ("cmpl $0, %%fs:%P5\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tcmpxchgq %q2, %1" \ - : "=a" (ret), "=m" (*mem) \ - : "q" ((atomic64_t) cast_to_integer (newval)), \ - "m" (*mem), \ - "0" ((atomic64_t) cast_to_integer (oldval)), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - ret; }) - - -/* Note that we need no lock prefix. */ -#define atomic_exchange_acq(mem, newvalue) \ - ({ __typeof (*mem) result; \ - if (sizeof (*mem) == 1) \ - __asm __volatile ("xchgb %b0, %1" \ - : "=q" (result), "=m" (*mem) \ - : "0" (newvalue), "m" (*mem)); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile ("xchgw %w0, %1" \ - : "=r" (result), "=m" (*mem) \ - : "0" (newvalue), "m" (*mem)); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile ("xchgl %0, %1" \ - : "=r" (result), "=m" (*mem) \ - : "0" (newvalue), "m" (*mem)); \ - else \ - __asm __volatile ("xchgq %q0, %1" \ - : "=r" (result), "=m" (*mem) \ - : "0" ((atomic64_t) cast_to_integer (newvalue)), \ - "m" (*mem)); \ - result; }) - - -#define __arch_exchange_and_add_body(lock, mem, value) \ - ({ __typeof (*mem) result; \ - if (sizeof (*mem) == 1) \ - __asm __volatile (lock "xaddb %b0, %1" \ - : "=q" (result), "=m" (*mem) \ - : "0" (value), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (lock "xaddw %w0, %1" \ - : "=r" (result), "=m" (*mem) \ - : "0" (value), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (lock "xaddl %0, %1" \ - : "=r" (result), "=m" (*mem) \ - : "0" (value), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else \ - __asm __volatile (lock "xaddq %q0, %1" \ - : "=r" (result), "=m" (*mem) \ - : "0" ((atomic64_t) cast_to_integer (value)), \ - "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - result; }) - -#define atomic_exchange_and_add(mem, value) \ - __sync_fetch_and_add (mem, value) - -#define __arch_exchange_and_add_cprefix \ - "cmpl $0, %%fs:%P4\n\tje 0f\n\tlock\n0:\t" - -#define catomic_exchange_and_add(mem, value) \ - __arch_exchange_and_add_body (__arch_exchange_and_add_cprefix, mem, value) - - -#define __arch_add_body(lock, pfx, mem, value) \ - do { \ - if (__builtin_constant_p (value) && (value) == 1) \ - pfx##_increment (mem); \ - else if (__builtin_constant_p (value) && (value) == -1) \ - pfx##_decrement (mem); \ - else if (sizeof (*mem) == 1) \ - __asm __volatile (lock "addb %b1, %0" \ - : "=m" (*mem) \ - : "iq" (value), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (lock "addw %w1, %0" \ - : "=m" (*mem) \ - : "ir" (value), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (lock "addl %1, %0" \ - : "=m" (*mem) \ - : "ir" (value), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else \ - __asm __volatile (lock "addq %q1, %0" \ - : "=m" (*mem) \ - : "ir" ((atomic64_t) cast_to_integer (value)), \ - "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - } while (0) - -#define atomic_add(mem, value) \ - __arch_add_body (LOCK_PREFIX, atomic, mem, value) - -#define __arch_add_cprefix \ - "cmpl $0, %%fs:%P3\n\tje 0f\n\tlock\n0:\t" - -#define catomic_add(mem, value) \ - __arch_add_body (__arch_add_cprefix, catomic, mem, value) - - -#define atomic_add_negative(mem, value) \ - ({ unsigned char __result; \ - if (sizeof (*mem) == 1) \ - __asm __volatile (LOCK_PREFIX "addb %b2, %0; sets %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "iq" (value), "m" (*mem)); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (LOCK_PREFIX "addw %w2, %0; sets %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "ir" (value), "m" (*mem)); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (LOCK_PREFIX "addl %2, %0; sets %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "ir" (value), "m" (*mem)); \ - else \ - __asm __volatile (LOCK_PREFIX "addq %q2, %0; sets %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "ir" ((atomic64_t) cast_to_integer (value)), \ - "m" (*mem)); \ - __result; }) - - -#define atomic_add_zero(mem, value) \ - ({ unsigned char __result; \ - if (sizeof (*mem) == 1) \ - __asm __volatile (LOCK_PREFIX "addb %b2, %0; setz %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "iq" (value), "m" (*mem)); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (LOCK_PREFIX "addw %w2, %0; setz %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "ir" (value), "m" (*mem)); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (LOCK_PREFIX "addl %2, %0; setz %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "ir" (value), "m" (*mem)); \ - else \ - __asm __volatile (LOCK_PREFIX "addq %q2, %0; setz %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "ir" ((atomic64_t) cast_to_integer (value)), \ - "m" (*mem)); \ - __result; }) - - -#define __arch_increment_body(lock, mem) \ - do { \ - if (sizeof (*mem) == 1) \ - __asm __volatile (lock "incb %b0" \ - : "=m" (*mem) \ - : "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (lock "incw %w0" \ - : "=m" (*mem) \ - : "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (lock "incl %0" \ - : "=m" (*mem) \ - : "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else \ - __asm __volatile (lock "incq %q0" \ - : "=m" (*mem) \ - : "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - } while (0) - -#define atomic_increment(mem) __arch_increment_body (LOCK_PREFIX, mem) - -#define __arch_increment_cprefix \ - "cmpl $0, %%fs:%P2\n\tje 0f\n\tlock\n0:\t" - -#define catomic_increment(mem) \ - __arch_increment_body (__arch_increment_cprefix, mem) - - -#define atomic_increment_and_test(mem) \ - ({ unsigned char __result; \ - if (sizeof (*mem) == 1) \ - __asm __volatile (LOCK_PREFIX "incb %b0; sete %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "m" (*mem)); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (LOCK_PREFIX "incw %w0; sete %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "m" (*mem)); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (LOCK_PREFIX "incl %0; sete %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "m" (*mem)); \ - else \ - __asm __volatile (LOCK_PREFIX "incq %q0; sete %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "m" (*mem)); \ - __result; }) - - -#define __arch_decrement_body(lock, mem) \ - do { \ - if (sizeof (*mem) == 1) \ - __asm __volatile (lock "decb %b0" \ - : "=m" (*mem) \ - : "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (lock "decw %w0" \ - : "=m" (*mem) \ - : "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (lock "decl %0" \ - : "=m" (*mem) \ - : "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else \ - __asm __volatile (lock "decq %q0" \ - : "=m" (*mem) \ - : "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - } while (0) - -#define atomic_decrement(mem) __arch_decrement_body (LOCK_PREFIX, mem) - -#define __arch_decrement_cprefix \ - "cmpl $0, %%fs:%P2\n\tje 0f\n\tlock\n0:\t" - -#define catomic_decrement(mem) \ - __arch_decrement_body (__arch_decrement_cprefix, mem) - - -#define atomic_decrement_and_test(mem) \ - ({ unsigned char __result; \ - if (sizeof (*mem) == 1) \ - __asm __volatile (LOCK_PREFIX "decb %b0; sete %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "m" (*mem)); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (LOCK_PREFIX "decw %w0; sete %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "m" (*mem)); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (LOCK_PREFIX "decl %0; sete %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "m" (*mem)); \ - else \ - __asm __volatile (LOCK_PREFIX "decq %q0; sete %1" \ - : "=m" (*mem), "=qm" (__result) \ - : "m" (*mem)); \ - __result; }) - - -#define atomic_bit_set(mem, bit) \ - do { \ - if (sizeof (*mem) == 1) \ - __asm __volatile (LOCK_PREFIX "orb %b2, %0" \ - : "=m" (*mem) \ - : "m" (*mem), "iq" (1L << (bit))); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (LOCK_PREFIX "orw %w2, %0" \ - : "=m" (*mem) \ - : "m" (*mem), "ir" (1L << (bit))); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (LOCK_PREFIX "orl %2, %0" \ - : "=m" (*mem) \ - : "m" (*mem), "ir" (1L << (bit))); \ - else if (__builtin_constant_p (bit) && (bit) < 32) \ - __asm __volatile (LOCK_PREFIX "orq %2, %0" \ - : "=m" (*mem) \ - : "m" (*mem), "i" (1L << (bit))); \ - else \ - __asm __volatile (LOCK_PREFIX "orq %q2, %0" \ - : "=m" (*mem) \ - : "m" (*mem), "r" (1UL << (bit))); \ - } while (0) - - -#define atomic_bit_test_set(mem, bit) \ - ({ unsigned char __result; \ - if (sizeof (*mem) == 1) \ - __asm __volatile (LOCK_PREFIX "btsb %3, %1; setc %0" \ - : "=q" (__result), "=m" (*mem) \ - : "m" (*mem), "iq" (bit)); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (LOCK_PREFIX "btsw %3, %1; setc %0" \ - : "=q" (__result), "=m" (*mem) \ - : "m" (*mem), "ir" (bit)); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (LOCK_PREFIX "btsl %3, %1; setc %0" \ - : "=q" (__result), "=m" (*mem) \ - : "m" (*mem), "ir" (bit)); \ - else \ - __asm __volatile (LOCK_PREFIX "btsq %3, %1; setc %0" \ - : "=q" (__result), "=m" (*mem) \ - : "m" (*mem), "ir" (bit)); \ - __result; }) - - -#define atomic_spin_nop() asm ("rep; nop") - - -#define __arch_and_body(lock, mem, mask) \ - do { \ - if (sizeof (*mem) == 1) \ - __asm __volatile (lock "andb %b1, %0" \ - : "=m" (*mem) \ - : "iq" (mask), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (lock "andw %w1, %0" \ - : "=m" (*mem) \ - : "ir" (mask), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (lock "andl %1, %0" \ - : "=m" (*mem) \ - : "ir" (mask), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else \ - __asm __volatile (lock "andq %q1, %0" \ - : "=m" (*mem) \ - : "ir" (mask), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - } while (0) - -#define __arch_cprefix \ - "cmpl $0, %%fs:%P3\n\tje 0f\n\tlock\n0:\t" - -#define atomic_and(mem, mask) __arch_and_body (LOCK_PREFIX, mem, mask) - -#define catomic_and(mem, mask) __arch_and_body (__arch_cprefix, mem, mask) - - -#define __arch_or_body(lock, mem, mask) \ - do { \ - if (sizeof (*mem) == 1) \ - __asm __volatile (lock "orb %b1, %0" \ - : "=m" (*mem) \ - : "iq" (mask), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 2) \ - __asm __volatile (lock "orw %w1, %0" \ - : "=m" (*mem) \ - : "ir" (mask), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else if (sizeof (*mem) == 4) \ - __asm __volatile (lock "orl %1, %0" \ - : "=m" (*mem) \ - : "ir" (mask), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - else \ - __asm __volatile (lock "orq %q1, %0" \ - : "=m" (*mem) \ - : "ir" (mask), "m" (*mem), \ - "i" (offsetof (tcbhead_t, multiple_threads))); \ - } while (0) - -#define atomic_or(mem, mask) __arch_or_body (LOCK_PREFIX, mem, mask) - -#define catomic_or(mem, mask) __arch_or_body (__arch_cprefix, mem, mask) - -/* We don't use mfence because it is supposedly slower due to having to - provide stronger guarantees (e.g., regarding self-modifying code). */ -#define atomic_full_barrier() \ - __asm __volatile (LOCK_PREFIX "orl $0, (%%rsp)" ::: "memory") -#define atomic_read_barrier() __asm ("" ::: "memory") -#define atomic_write_barrier() __asm ("" ::: "memory") - -#endif /* atomic-machine.h */ diff --git a/sysdeps/x86_64/backtrace.c b/sysdeps/x86_64/backtrace.c deleted file mode 100644 index 15f425b410..0000000000 --- a/sysdeps/x86_64/backtrace.c +++ /dev/null @@ -1,133 +0,0 @@ -/* Return backtrace of current program state. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -struct trace_arg -{ - void **array; - _Unwind_Word cfa; - int cnt; - int size; -}; - -#ifdef SHARED -static _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *); -static _Unwind_Ptr (*unwind_getip) (struct _Unwind_Context *); -static _Unwind_Word (*unwind_getcfa) (struct _Unwind_Context *); -static void *libgcc_handle; - - -/* Dummy version in case libgcc_s does not contain the real code. */ -static _Unwind_Word -dummy_getcfa (struct _Unwind_Context *ctx __attribute__ ((unused))) -{ - return 0; -} - - -static void -init (void) -{ - libgcc_handle = __libc_dlopen ("libgcc_s.so.1"); - - if (libgcc_handle == NULL) - return; - - unwind_backtrace = __libc_dlsym (libgcc_handle, "_Unwind_Backtrace"); - unwind_getip = __libc_dlsym (libgcc_handle, "_Unwind_GetIP"); - if (unwind_getip == NULL) - unwind_backtrace = NULL; - unwind_getcfa = (__libc_dlsym (libgcc_handle, "_Unwind_GetCFA") - ?: dummy_getcfa); -} -#else -# define unwind_backtrace _Unwind_Backtrace -# define unwind_getip _Unwind_GetIP -# define unwind_getcfa _Unwind_GetCFA -#endif - -static _Unwind_Reason_Code -backtrace_helper (struct _Unwind_Context *ctx, void *a) -{ - struct trace_arg *arg = a; - - /* We are first called with address in the __backtrace function. - Skip it. */ - if (arg->cnt != -1) - { - arg->array[arg->cnt] = (void *) unwind_getip (ctx); - - /* Check whether we make any progress. */ - _Unwind_Word cfa = unwind_getcfa (ctx); - - if (arg->cnt > 0 && arg->array[arg->cnt - 1] == arg->array[arg->cnt] - && cfa == arg->cfa) - return _URC_END_OF_STACK; - arg->cfa = cfa; - } - if (++arg->cnt == arg->size) - return _URC_END_OF_STACK; - return _URC_NO_REASON; -} - -int -__backtrace (void **array, int size) -{ - struct trace_arg arg = { .array = array, .cfa = 0, .size = size, .cnt = -1 }; - - if (size <= 0) - return 0; - -#ifdef SHARED - __libc_once_define (static, once); - - __libc_once (once, init); - if (unwind_backtrace == NULL) - return 0; -#endif - - unwind_backtrace (backtrace_helper, &arg); - - /* _Unwind_Backtrace seems to put NULL address above - _start. Fix it up here. */ - if (arg.cnt > 1 && arg.array[arg.cnt - 1] == NULL) - --arg.cnt; - return arg.cnt != -1 ? arg.cnt : 0; -} -weak_alias (__backtrace, backtrace) -libc_hidden_def (__backtrace) - - -#ifdef SHARED -/* Free all resources if necessary. */ -libc_freeres_fn (free_mem) -{ - unwind_backtrace = NULL; - if (libgcc_handle != NULL) - { - __libc_dlclose (libgcc_handle); - libgcc_handle = NULL; - } -} -#endif diff --git a/sysdeps/x86_64/bsd-_setjmp.S b/sysdeps/x86_64/bsd-_setjmp.S deleted file mode 100644 index bc40a88938..0000000000 --- a/sysdeps/x86_64/bsd-_setjmp.S +++ /dev/null @@ -1,37 +0,0 @@ -/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. x86-64 version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 0)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include -#define _ASM -#define _SETJMP_H -#include - -ENTRY (_setjmp) - /* Set up arguments, we only need to set the second arg. */ - xorl %esi, %esi -#ifdef PIC - jmp HIDDEN_JUMPTARGET (__sigsetjmp) -#else - jmp __sigsetjmp -#endif -END (_setjmp) -libc_hidden_def (_setjmp) diff --git a/sysdeps/x86_64/bsd-setjmp.S b/sysdeps/x86_64/bsd-setjmp.S deleted file mode 100644 index 45ee1234b9..0000000000 --- a/sysdeps/x86_64/bsd-setjmp.S +++ /dev/null @@ -1,36 +0,0 @@ -/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. x86-64 version. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. - We cannot do it in C because it must be a tail-call, so frame-unwinding - in setjmp doesn't clobber the state restored by longjmp. */ - -#include -#define _ASM -#define _SETJMP_H -#include - -ENTRY (setjmp) - /* Set up arguments, we only need to set the 2nd arg. */ - movl $1, %esi -#ifdef PIC - jmp HIDDEN_JUMPTARGET (__sigsetjmp) -#else - jmp __sigsetjmp -#endif -END (setjmp) diff --git a/sysdeps/x86_64/bzero.S b/sysdeps/x86_64/bzero.S deleted file mode 100644 index f96d567fd8..0000000000 --- a/sysdeps/x86_64/bzero.S +++ /dev/null @@ -1 +0,0 @@ -/* Implemented in memset.S. */ diff --git a/sysdeps/x86_64/configure b/sysdeps/x86_64/configure deleted file mode 100644 index 2d14c344df..0000000000 --- a/sysdeps/x86_64/configure +++ /dev/null @@ -1,156 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/x86_64. - -for ac_prog in $AS -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AS+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AS"; then - ac_cv_prog_AS="$AS" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AS="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AS=$ac_cv_prog_AS -if test -n "$AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 -$as_echo "$AS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AS" && break -done - -if test -z "$AS"; then - ac_verc_fail=yes -else - # Found it, now check the version. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of $AS" >&5 -$as_echo_n "checking version of $AS... " >&6; } - ac_prog_version=`$AS --version 2>&1 | sed -n 's/^.*GNU assembler.* \([0-9]*\.[0-9.]*\).*$/\1/p'` - case $ac_prog_version in - '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; - 2.2[4-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*) - ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; - *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; - - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5 -$as_echo "$ac_prog_version" >&6; } -fi -if test $ac_verc_fail = yes; then - critic_missing="$critic_missing The program AS is required in version >= 2.24 for target x86_64." -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVX512DQ support in assembler" >&5 -$as_echo_n "checking for AVX512DQ support in assembler... " >&6; } -if ${libc_cv_asm_avx512dq+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.s <<\EOF - vandpd (%rax), %zmm6, %zmm1 -EOF -if { ac_try='${CC-cc} -c $ASFLAGS conftest.s 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - libc_cv_asm_avx512dq=yes -else - libc_cv_asm_avx512dq=no -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_avx512dq" >&5 -$as_echo "$libc_cv_asm_avx512dq" >&6; } -if test $libc_cv_asm_avx512dq = yes; then - $as_echo "#define HAVE_AVX512DQ_ASM_SUPPORT 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVX512 support" >&5 -$as_echo_n "checking for AVX512 support... " >&6; } -if ${libc_cv_cc_avx512+:} false; then : - $as_echo_n "(cached) " >&6 -else - if { ac_try='${CC-cc} -mavx512f -xc /dev/null -S -o /dev/null' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - libc_cv_cc_avx512=$libc_cv_asm_avx512dq -else - libc_cv_cc_avx512=no -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_avx512" >&5 -$as_echo "$libc_cv_cc_avx512" >&6; } -if test $libc_cv_cc_avx512 = yes; then - $as_echo "#define HAVE_AVX512_SUPPORT 1" >>confdefs.h - -fi -config_vars="$config_vars -config-cflags-avx512 = $libc_cv_cc_avx512" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Intel MPX support" >&5 -$as_echo_n "checking for Intel MPX support... " >&6; } -if ${libc_cv_asm_mpx+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.s <<\EOF - bndmov %bnd0,(%rsp) -EOF -if { ac_try='${CC-cc} -c $ASFLAGS conftest.s 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - libc_cv_asm_mpx=yes -else - libc_cv_asm_mpx=no -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_mpx" >&5 -$as_echo "$libc_cv_asm_mpx" >&6; } -if test $libc_cv_asm_mpx = yes; then - $as_echo "#define HAVE_MPX_SUPPORT 1" >>confdefs.h - -fi - -if test x"$build_mathvec" = xnotset; then - build_mathvec=yes -fi - -$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h - - -test -n "$critic_missing" && as_fn_error $? " -*** $critic_missing" "$LINENO" 5 diff --git a/sysdeps/x86_64/configure.ac b/sysdeps/x86_64/configure.ac deleted file mode 100644 index 7d8aaafc0c..0000000000 --- a/sysdeps/x86_64/configure.ac +++ /dev/null @@ -1,58 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/x86_64. - -dnl Accept as 2.24 or newer for AVX512 load and store. -AC_CHECK_PROG_VER(AS, $AS, --version, - [GNU assembler.* \([0-9]*\.[0-9.]*\)], - [2.2[4-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*], - critic_missing="$critic_missing The program AS is required in version >= 2.24 for target x86_64.") - -dnl Check if asm supports AVX512DQ. -AC_CACHE_CHECK(for AVX512DQ support in assembler, libc_cv_asm_avx512dq, [dnl -cat > conftest.s <<\EOF - vandpd (%rax), %zmm6, %zmm1 -EOF -if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then - libc_cv_asm_avx512dq=yes -else - libc_cv_asm_avx512dq=no -fi -rm -f conftest*]) -if test $libc_cv_asm_avx512dq = yes; then - AC_DEFINE(HAVE_AVX512DQ_ASM_SUPPORT) -fi - -dnl Check if -mavx512f works. -AC_CACHE_CHECK(for AVX512 support, libc_cv_cc_avx512, [dnl -LIBC_TRY_CC_OPTION([-mavx512f], [libc_cv_cc_avx512=$libc_cv_asm_avx512dq], [libc_cv_cc_avx512=no]) -]) -if test $libc_cv_cc_avx512 = yes; then - AC_DEFINE(HAVE_AVX512_SUPPORT) -fi -LIBC_CONFIG_VAR([config-cflags-avx512], [$libc_cv_cc_avx512]) - -dnl Check whether asm supports Intel MPX -AC_CACHE_CHECK(for Intel MPX support, libc_cv_asm_mpx, [dnl -cat > conftest.s <<\EOF - bndmov %bnd0,(%rsp) -EOF -if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then - libc_cv_asm_mpx=yes -else - libc_cv_asm_mpx=no -fi -rm -f conftest*]) -if test $libc_cv_asm_mpx = yes; then - AC_DEFINE(HAVE_MPX_SUPPORT) -fi - -if test x"$build_mathvec" = xnotset; then - build_mathvec=yes -fi - -dnl It is always possible to access static and hidden symbols in an -dnl position independent way. -AC_DEFINE(PI_STATIC_AND_HIDDEN) - -test -n "$critic_missing" && AC_MSG_ERROR([ -*** $critic_missing]) diff --git a/sysdeps/x86_64/crti.S b/sysdeps/x86_64/crti.S deleted file mode 100644 index 2687f35cb7..0000000000 --- a/sysdeps/x86_64/crti.S +++ /dev/null @@ -1,80 +0,0 @@ -/* Special .init and .fini section support for x86-64. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include -#include - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -#if PREINIT_FUNCTION_WEAK - weak_extern (PREINIT_FUNCTION) -#else - .hidden PREINIT_FUNCTION -#endif - - .section .init,"ax",@progbits - .p2align 2 - .globl _init - .type _init, @function -_init: - /* Maintain 16-byte stack alignment for called functions. */ - subq $8, %rsp -#if PREINIT_FUNCTION_WEAK - movq PREINIT_FUNCTION@GOTPCREL(%rip), %rax - testq %rax, %rax - je .Lno_weak_fn - call *%rax -.Lno_weak_fn: -#else - call PREINIT_FUNCTION -#endif - - .section .fini,"ax",@progbits - .p2align 2 - .globl _fini - .type _fini, @function -_fini: - subq $8, %rsp diff --git a/sysdeps/x86_64/crtn.S b/sysdeps/x86_64/crtn.S deleted file mode 100644 index 29e3b85300..0000000000 --- a/sysdeps/x86_64/crtn.S +++ /dev/null @@ -1,45 +0,0 @@ -/* Special .init and .fini section support for x86-64. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - - .section .init,"ax",@progbits - addq $8, %rsp - ret - - .section .fini,"ax",@progbits - addq $8, %rsp - ret diff --git a/sysdeps/x86_64/dl-irel.h b/sysdeps/x86_64/dl-irel.h deleted file mode 100644 index 5f9967abe5..0000000000 --- a/sysdeps/x86_64/dl-irel.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Machine-dependent ELF indirect relocation inline functions. - x86-64 version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _DL_IREL_H -#define _DL_IREL_H - -#include -#include - -#define ELF_MACHINE_IRELA 1 - -static inline ElfW(Addr) -__attribute ((always_inline)) -elf_ifunc_invoke (ElfW(Addr) addr) -{ - return ((ElfW(Addr) (*) (void)) (addr)) (); -} - -static inline void -__attribute ((always_inline)) -elf_irela (const ElfW(Rela) *reloc) -{ - ElfW(Addr) *const reloc_addr = (void *) reloc->r_offset; - const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info); - - if (__glibc_likely (r_type == R_X86_64_IRELATIVE)) - { - ElfW(Addr) value = elf_ifunc_invoke(reloc->r_addend); - *reloc_addr = value; - } - else - __libc_fatal ("unexpected reloc type in static binary"); -} - -#endif /* dl-irel.h */ diff --git a/sysdeps/x86_64/dl-lookupcfg.h b/sysdeps/x86_64/dl-lookupcfg.h deleted file mode 100644 index 47b534a059..0000000000 --- a/sysdeps/x86_64/dl-lookupcfg.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Configuration of lookup functions. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define DL_UNMAP_IS_SPECIAL - -#include_next - -/* Address of protected data defined in the shared library may be - external due to copy relocation. */ -#define DL_EXTERN_PROTECTED_DATA - -struct link_map; - -extern void _dl_unmap (struct link_map *map) - internal_function attribute_hidden; - -#define DL_UNMAP(map) _dl_unmap (map) diff --git a/sysdeps/x86_64/dl-machine.h b/sysdeps/x86_64/dl-machine.h deleted file mode 100644 index 0015db4d6a..0000000000 --- a/sysdeps/x86_64/dl-machine.h +++ /dev/null @@ -1,601 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. x86-64 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "x86_64" - -#include -#include -#include -#include -#include - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int __attribute__ ((unused)) -elf_machine_matches_host (const ElfW(Ehdr) *ehdr) -{ - return ehdr->e_machine == EM_X86_64; -} - - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. This must be inlined in a function which - uses global data. */ -static inline ElfW(Addr) __attribute__ ((unused)) -elf_machine_dynamic (void) -{ - /* This produces an IP-relative reloc which is resolved at link time. */ - extern const ElfW(Addr) _GLOBAL_OFFSET_TABLE_[] attribute_hidden; - return _GLOBAL_OFFSET_TABLE_[0]; -} - - -/* Return the run-time load address of the shared object. */ -static inline ElfW(Addr) __attribute__ ((unused)) -elf_machine_load_address (void) -{ - /* Compute the difference between the runtime address of _DYNAMIC as seen - by an IP-relative reference, and the link-time address found in the - special unrelocated first GOT entry. */ - extern ElfW(Dyn) _DYNAMIC[] attribute_hidden; - return (ElfW(Addr)) &_DYNAMIC - elf_machine_dynamic (); -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int __attribute__ ((unused, always_inline)) -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - Elf64_Addr *got; - extern void _dl_runtime_resolve_sse (ElfW(Word)) attribute_hidden; - extern void _dl_runtime_resolve_avx (ElfW(Word)) attribute_hidden; - extern void _dl_runtime_resolve_avx_slow (ElfW(Word)) attribute_hidden; - extern void _dl_runtime_resolve_avx_opt (ElfW(Word)) attribute_hidden; - extern void _dl_runtime_resolve_avx512 (ElfW(Word)) attribute_hidden; - extern void _dl_runtime_resolve_avx512_opt (ElfW(Word)) attribute_hidden; - extern void _dl_runtime_profile_sse (ElfW(Word)) attribute_hidden; - extern void _dl_runtime_profile_avx (ElfW(Word)) attribute_hidden; - extern void _dl_runtime_profile_avx512 (ElfW(Word)) attribute_hidden; - - if (l->l_info[DT_JMPREL] && lazy) - { - /* The GOT entries for functions in the PLT have not yet been filled - in. Their initial contents will arrange when called to push an - offset into the .rel.plt section, push _GLOBAL_OFFSET_TABLE_[1], - and then jump to _GLOBAL_OFFSET_TABLE_[2]. */ - got = (Elf64_Addr *) D_PTR (l, l_info[DT_PLTGOT]); - /* If a library is prelinked but we have to relocate anyway, - we have to be able to undo the prelinking of .got.plt. - The prelinker saved us here address of .plt + 0x16. */ - if (got[1]) - { - l->l_mach.plt = got[1] + l->l_addr; - l->l_mach.gotplt = (ElfW(Addr)) &got[3]; - } - /* Identify this shared object. */ - *(ElfW(Addr) *) (got + 1) = (ElfW(Addr)) l; - - /* The got[2] entry contains the address of a function which gets - called to get the address of a so far unresolved function and - jump to it. The profiling extension of the dynamic linker allows - to intercept the calls to collect information. In this case we - don't store the address in the GOT so that all future calls also - end in this function. */ - if (__glibc_unlikely (profile)) - { - if (HAS_ARCH_FEATURE (AVX512F_Usable)) - *(ElfW(Addr) *) (got + 2) = (ElfW(Addr)) &_dl_runtime_profile_avx512; - else if (HAS_ARCH_FEATURE (AVX_Usable)) - *(ElfW(Addr) *) (got + 2) = (ElfW(Addr)) &_dl_runtime_profile_avx; - else - *(ElfW(Addr) *) (got + 2) = (ElfW(Addr)) &_dl_runtime_profile_sse; - - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - /* This is the object we are looking for. Say that we really - want profiling and the timers are started. */ - GL(dl_profile_map) = l; - } - else - { - /* This function will get called to fix up the GOT entry - indicated by the offset on the stack, and then jump to - the resolved address. */ - if (HAS_ARCH_FEATURE (AVX512F_Usable)) - { - if (HAS_ARCH_FEATURE (Use_dl_runtime_resolve_opt)) - *(ElfW(Addr) *) (got + 2) - = (ElfW(Addr)) &_dl_runtime_resolve_avx512_opt; - else - *(ElfW(Addr) *) (got + 2) - = (ElfW(Addr)) &_dl_runtime_resolve_avx512; - } - else if (HAS_ARCH_FEATURE (AVX_Usable)) - { - if (HAS_ARCH_FEATURE (Use_dl_runtime_resolve_opt)) - *(ElfW(Addr) *) (got + 2) - = (ElfW(Addr)) &_dl_runtime_resolve_avx_opt; - else if (HAS_ARCH_FEATURE (Use_dl_runtime_resolve_slow)) - *(ElfW(Addr) *) (got + 2) - = (ElfW(Addr)) &_dl_runtime_resolve_avx_slow; - else - *(ElfW(Addr) *) (got + 2) - = (ElfW(Addr)) &_dl_runtime_resolve_avx; - } - else - *(ElfW(Addr) *) (got + 2) = (ElfW(Addr)) &_dl_runtime_resolve_sse; - } - } - - if (l->l_info[ADDRIDX (DT_TLSDESC_GOT)] && lazy) - *(ElfW(Addr)*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_GOT)]) + l->l_addr) - = (ElfW(Addr)) &_dl_tlsdesc_resolve_rela; - - return lazy; -} - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ -#define RTLD_START asm ("\n\ -.text\n\ - .align 16\n\ -.globl _start\n\ -.globl _dl_start_user\n\ -_start:\n\ - movq %rsp, %rdi\n\ - call _dl_start\n\ -_dl_start_user:\n\ - # Save the user entry point address in %r12.\n\ - movq %rax, %r12\n\ - # See if we were run as a command with the executable file\n\ - # name as an extra leading argument.\n\ - movl _dl_skip_args(%rip), %eax\n\ - # Pop the original argument count.\n\ - popq %rdx\n\ - # Adjust the stack pointer to skip _dl_skip_args words.\n\ - leaq (%rsp,%rax,8), %rsp\n\ - # Subtract _dl_skip_args from argc.\n\ - subl %eax, %edx\n\ - # Push argc back on the stack.\n\ - pushq %rdx\n\ - # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env)\n\ - # argc -> rsi\n\ - movq %rdx, %rsi\n\ - # Save %rsp value in %r13.\n\ - movq %rsp, %r13\n\ - # And align stack for the _dl_init call. \n\ - andq $-16, %rsp\n\ - # _dl_loaded -> rdi\n\ - movq _rtld_local(%rip), %rdi\n\ - # env -> rcx\n\ - leaq 16(%r13,%rdx,8), %rcx\n\ - # argv -> rdx\n\ - leaq 8(%r13), %rdx\n\ - # Clear %rbp to mark outermost frame obviously even for constructors.\n\ - xorl %ebp, %ebp\n\ - # Call the function to run the initializers.\n\ - call _dl_init\n\ - # Pass our finalizer function to the user in %rdx, as per ELF ABI.\n\ - leaq _dl_fini(%rip), %rdx\n\ - # And make sure %rsp points to argc stored on the stack.\n\ - movq %r13, %rsp\n\ - # Jump to the user's entry point.\n\ - jmp *%r12\n\ -.previous\n\ -"); - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or - TLS variable, so undefined references should not be allowed to - define the value. - ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. - ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA iff TYPE describes relocation may - against protected data whose address be external due to copy relocation. - */ -#define elf_machine_type_class(type) \ - ((((type) == R_X86_64_JUMP_SLOT \ - || (type) == R_X86_64_DTPMOD64 \ - || (type) == R_X86_64_DTPOFF64 \ - || (type) == R_X86_64_TPOFF64 \ - || (type) == R_X86_64_TLSDESC) \ - * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_X86_64_COPY) * ELF_RTYPE_CLASS_COPY) \ - | (((type) == R_X86_64_GLOB_DAT) * ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA)) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_X86_64_JUMP_SLOT - -/* The relative ifunc relocation. */ -// XXX This is a work-around for a broken linker. Remove! -#define ELF_MACHINE_IRELATIVE R_X86_64_IRELATIVE - -/* The x86-64 never uses Elf64_Rel/Elf32_Rel relocations. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -/* We define an initialization function. This is called very early in - _dl_sysdep_start. */ -#define DL_PLATFORM_INIT dl_platform_init () - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ -#if IS_IN (rtld) - /* init_cpu_features has been called early from __libc_start_main in - static executable. */ - init_cpu_features (&GLRO(dl_x86_cpu_features)); -#else - if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') - /* Avoid an empty string which would disturb us. */ - GLRO(dl_platform) = NULL; -#endif -} - -static inline ElfW(Addr) -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const ElfW(Rela) *reloc, - ElfW(Addr) *reloc_addr, ElfW(Addr) value) -{ - return *reloc_addr = value; -} - -/* Return the final value of a PLT relocation. On x86-64 the - JUMP_SLOT relocation ignores the addend. */ -static inline ElfW(Addr) -elf_machine_plt_value (struct link_map *map, const ElfW(Rela) *reloc, - ElfW(Addr) value) -{ - return value; -} - - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER x86_64_gnu_pltenter -#define ARCH_LA_PLTEXIT x86_64_gnu_pltexit - -#endif /* !dl_machine_h */ - -#ifdef RESOLVE_MAP - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, - const ElfW(Sym) *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - ElfW(Addr) *const reloc_addr = reloc_addr_arg; - const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info); - -# if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC - if (__glibc_unlikely (r_type == R_X86_64_RELATIVE)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; - make the reference weak so static programs can still link. - This declaration cannot be done when compiling rtld.c - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the - common defn for _dl_rtld_map, which is incompatible with a - weak decl in the same file. */ -# ifndef SHARED - weak_extern (GL(dl_rtld_map)); -# endif - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ -# endif - *reloc_addr = map->l_addr + reloc->r_addend; - } - else -# endif -# if !defined RTLD_BOOTSTRAP - /* l_addr + r_addend may be > 0xffffffff and R_X86_64_RELATIVE64 - relocation updates the whole 64-bit entry. */ - if (__glibc_unlikely (r_type == R_X86_64_RELATIVE64)) - *(Elf64_Addr *) reloc_addr = (Elf64_Addr) map->l_addr + reloc->r_addend; - else -# endif - if (__glibc_unlikely (r_type == R_X86_64_NONE)) - return; - else - { -# ifndef RTLD_BOOTSTRAP - const ElfW(Sym) *const refsym = sym; -# endif - struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); - ElfW(Addr) value = (sym == NULL ? 0 - : (ElfW(Addr)) sym_map->l_addr + sym->st_value); - - if (sym != NULL - && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, - 0) - && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) - && __builtin_expect (!skip_ifunc, 1)) - { -# ifndef RTLD_BOOTSTRAP - if (sym_map != map - && sym_map->l_type != lt_executable - && !sym_map->l_relocated) - { - const char *strtab - = (const char *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Relink `%s' with `%s' for IFUNC symbol `%s'\n", - RTLD_PROGNAME, map->l_name, - sym_map->l_name, - strtab + refsym->st_name); - } -# endif - value = ((ElfW(Addr) (*) (void)) value) (); - } - - switch (r_type) - { -# ifndef RTLD_BOOTSTRAP -# ifdef __ILP32__ - case R_X86_64_SIZE64: - /* Set to symbol size plus addend. */ - *(Elf64_Addr *) (uintptr_t) reloc_addr - = (Elf64_Addr) sym->st_size + reloc->r_addend; - break; - - case R_X86_64_SIZE32: -# else - case R_X86_64_SIZE64: -# endif - /* Set to symbol size plus addend. */ - value = sym->st_size; -# endif - case R_X86_64_GLOB_DAT: - case R_X86_64_JUMP_SLOT: - *reloc_addr = value + reloc->r_addend; - break; - -# ifndef RESOLVE_CONFLICT_FIND_MAP - case R_X86_64_DTPMOD64: -# ifdef RTLD_BOOTSTRAP - /* During startup the dynamic linker is always the module - with index 1. - XXX If this relocation is necessary move before RESOLVE - call. */ - *reloc_addr = 1; -# else - /* Get the information from the link map returned by the - resolve function. */ - if (sym_map != NULL) - *reloc_addr = sym_map->l_tls_modid; -# endif - break; - case R_X86_64_DTPOFF64: -# ifndef RTLD_BOOTSTRAP - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ - if (sym != NULL) - { - value = sym->st_value + reloc->r_addend; -# ifdef __ILP32__ - /* This relocation type computes a signed offset that is - usually negative. The symbol and addend values are 32 - bits but the GOT entry is 64 bits wide and the whole - 64-bit entry is used as a signed quantity, so we need - to sign-extend the computed value to 64 bits. */ - *(Elf64_Sxword *) reloc_addr = (Elf64_Sxword) (Elf32_Sword) value; -# else - *reloc_addr = value; -# endif - } -# endif - break; - case R_X86_64_TLSDESC: - { - struct tlsdesc volatile *td = - (struct tlsdesc volatile *)reloc_addr; - -# ifndef RTLD_BOOTSTRAP - if (! sym) - { - td->arg = (void*)reloc->r_addend; - td->entry = _dl_tlsdesc_undefweak; - } - else -# endif - { -# ifndef RTLD_BOOTSTRAP -# ifndef SHARED - CHECK_STATIC_TLS (map, sym_map); -# else - if (!TRY_STATIC_TLS (map, sym_map)) - { - td->arg = _dl_make_tlsdesc_dynamic - (sym_map, sym->st_value + reloc->r_addend); - td->entry = _dl_tlsdesc_dynamic; - } - else -# endif -# endif - { - td->arg = (void*)(sym->st_value - sym_map->l_tls_offset - + reloc->r_addend); - td->entry = _dl_tlsdesc_return; - } - } - break; - } - case R_X86_64_TPOFF64: - /* The offset is negative, forward from the thread pointer. */ -# ifndef RTLD_BOOTSTRAP - if (sym != NULL) -# endif - { -# ifndef RTLD_BOOTSTRAP - CHECK_STATIC_TLS (map, sym_map); -# endif - /* We know the offset of the object the symbol is contained in. - It is a negative value which will be added to the - thread pointer. */ - value = (sym->st_value + reloc->r_addend - - sym_map->l_tls_offset); -# ifdef __ILP32__ - /* The symbol and addend values are 32 bits but the GOT - entry is 64 bits wide and the whole 64-bit entry is used - as a signed quantity, so we need to sign-extend the - computed value to 64 bits. */ - *(Elf64_Sxword *) reloc_addr = (Elf64_Sxword) (Elf32_Sword) value; -# else - *reloc_addr = value; -# endif - } - break; -# endif - -# ifndef RTLD_BOOTSTRAP - case R_X86_64_64: - /* value + r_addend may be > 0xffffffff and R_X86_64_64 - relocation updates the whole 64-bit entry. */ - *(Elf64_Addr *) reloc_addr = (Elf64_Addr) value + reloc->r_addend; - break; -# ifndef __ILP32__ - case R_X86_64_SIZE32: - /* Set to symbol size plus addend. */ - value = sym->st_size; -# endif - case R_X86_64_32: - value += reloc->r_addend; - *(unsigned int *) reloc_addr = value; - - const char *fmt; - if (__glibc_unlikely (value > UINT_MAX)) - { - const char *strtab; - - fmt = "\ -%s: Symbol `%s' causes overflow in R_X86_64_32 relocation\n"; -# ifndef RESOLVE_CONFLICT_FIND_MAP - print_err: -# endif - strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]); - - _dl_error_printf (fmt, RTLD_PROGNAME, strtab + refsym->st_name); - } - break; -# ifndef RESOLVE_CONFLICT_FIND_MAP - /* Not needed for dl-conflict.c. */ - case R_X86_64_PC32: - value += reloc->r_addend - (ElfW(Addr)) reloc_addr; - *(unsigned int *) reloc_addr = value; - if (__glibc_unlikely (value != (int) value)) - { - fmt = "\ -%s: Symbol `%s' causes overflow in R_X86_64_PC32 relocation\n"; - goto print_err; - } - break; - case R_X86_64_COPY: - if (sym == NULL) - /* This can happen in trace mode if an object could not be - found. */ - break; - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - if (__builtin_expect (sym->st_size > refsym->st_size, 0) - || (__builtin_expect (sym->st_size < refsym->st_size, 0) - && GLRO(dl_verbose))) - { - fmt = "\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n"; - goto print_err; - } - break; -# endif - case R_X86_64_IRELATIVE: - value = map->l_addr + reloc->r_addend; - value = ((ElfW(Addr) (*) (void)) value) (); - *reloc_addr = value; - break; - default: - _dl_reloc_bad_type (map, r_type, 0); - break; -# endif - } - } -} - -auto inline void -__attribute ((always_inline)) -elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc, - void *const reloc_addr_arg) -{ - ElfW(Addr) *const reloc_addr = reloc_addr_arg; -#if !defined RTLD_BOOTSTRAP - /* l_addr + r_addend may be > 0xffffffff and R_X86_64_RELATIVE64 - relocation updates the whole 64-bit entry. */ - if (__glibc_unlikely (ELFW(R_TYPE) (reloc->r_info) == R_X86_64_RELATIVE64)) - *(Elf64_Addr *) reloc_addr = (Elf64_Addr) l_addr + reloc->r_addend; - else -#endif - { - assert (ELFW(R_TYPE) (reloc->r_info) == R_X86_64_RELATIVE); - *reloc_addr = l_addr + reloc->r_addend; - } -} - -auto inline void -__attribute ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - ElfW(Addr) l_addr, const ElfW(Rela) *reloc, - int skip_ifunc) -{ - ElfW(Addr) *const reloc_addr = (void *) (l_addr + reloc->r_offset); - const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info); - - /* Check for unexpected PLT reloc type. */ - if (__glibc_likely (r_type == R_X86_64_JUMP_SLOT)) - { - if (__builtin_expect (map->l_mach.plt, 0) == 0) - *reloc_addr += l_addr; - else - *reloc_addr = - map->l_mach.plt - + (((ElfW(Addr)) reloc_addr) - map->l_mach.gotplt) * 2; - } - else if (__glibc_likely (r_type == R_X86_64_TLSDESC)) - { - struct tlsdesc volatile * __attribute__((__unused__)) td = - (struct tlsdesc volatile *)reloc_addr; - - td->arg = (void*)reloc; - td->entry = (void*)(D_PTR (map, l_info[ADDRIDX (DT_TLSDESC_PLT)]) - + map->l_addr); - } - else if (__glibc_unlikely (r_type == R_X86_64_IRELATIVE)) - { - ElfW(Addr) value = map->l_addr + reloc->r_addend; - if (__glibc_likely (!skip_ifunc)) - value = ((ElfW(Addr) (*) (void)) value) (); - *reloc_addr = value; - } - else - _dl_reloc_bad_type (map, r_type, 1); -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/x86_64/dl-procinfo.c b/sysdeps/x86_64/dl-procinfo.c deleted file mode 100644 index 17ae800a37..0000000000 --- a/sysdeps/x86_64/dl-procinfo.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Data for x86-64 version of processor capability information. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* If anything should be added here check whether the size of each string - is still ok with the given array size. - - All the #ifdefs in the definitions are quite irritating but - necessary if we want to avoid duplicating the information. There - are three different modes: - - - PROCINFO_DECL is defined. This means we are only interested in - declarations. - - - PROCINFO_DECL is not defined: - - + if SHARED is defined the file is included in an array - initializer. The .element = { ... } syntax is needed. - - + if SHARED is not defined a normal array initialization is - needed. - */ - -#ifndef PROCINFO_CLASS -# define PROCINFO_CLASS -#endif - -#include - -#undef PROCINFO_DECL -#undef PROCINFO_CLASS diff --git a/sysdeps/x86_64/dl-runtime.c b/sysdeps/x86_64/dl-runtime.c deleted file mode 100644 index b625d1e882..0000000000 --- a/sysdeps/x86_64/dl-runtime.c +++ /dev/null @@ -1,9 +0,0 @@ -/* The ABI calls for the PLT stubs to pass the index of the relocation - and not its offset. In _dl_profile_fixup and _dl_call_pltexit we - also use the index. Therefore it is wasteful to compute the offset - in the trampoline just to reverse the operation immediately - afterwards. */ -#define reloc_offset reloc_arg * sizeof (PLTREL) -#define reloc_index reloc_arg - -#include diff --git a/sysdeps/x86_64/dl-tls.h b/sysdeps/x86_64/dl-tls.h deleted file mode 100644 index 4a59d2a924..0000000000 --- a/sysdeps/x86_64/dl-tls.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. x86-64 version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct dl_tls_index -{ - uint64_t ti_module; - uint64_t ti_offset; -} tls_index; - - -extern void *__tls_get_addr (tls_index *ti); diff --git a/sysdeps/x86_64/dl-tlsdesc.S b/sysdeps/x86_64/dl-tlsdesc.S deleted file mode 100644 index be3a780a1a..0000000000 --- a/sysdeps/x86_64/dl-tlsdesc.S +++ /dev/null @@ -1,245 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. x86_64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "tlsdesc.h" - - .text - - /* This function is used to compute the TP offset for symbols in - Static TLS, i.e., whose TP offset is the same for all - threads. - - The incoming %rax points to the TLS descriptor, such that - 0(%rax) points to _dl_tlsdesc_return itself, and 8(%rax) holds - the TP offset of the symbol corresponding to the object - denoted by the argument. */ - - .hidden _dl_tlsdesc_return - .global _dl_tlsdesc_return - .type _dl_tlsdesc_return,@function - cfi_startproc - .align 16 -_dl_tlsdesc_return: - movq 8(%rax), %rax - ret - cfi_endproc - .size _dl_tlsdesc_return, .-_dl_tlsdesc_return - - /* This function is used for undefined weak TLS symbols, for - which the base address (i.e., disregarding any addend) should - resolve to NULL. - - %rax points to the TLS descriptor, such that 0(%rax) points to - _dl_tlsdesc_undefweak itself, and 8(%rax) holds the addend. - We return the addend minus the TP, such that, when the caller - adds TP, it gets the addend back. If that's zero, as usual, - that's most likely a NULL pointer. */ - - .hidden _dl_tlsdesc_undefweak - .global _dl_tlsdesc_undefweak - .type _dl_tlsdesc_undefweak,@function - cfi_startproc - .align 16 -_dl_tlsdesc_undefweak: - movq 8(%rax), %rax - subq %fs:0, %rax - ret - cfi_endproc - .size _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak - -#ifdef SHARED - .hidden _dl_tlsdesc_dynamic - .global _dl_tlsdesc_dynamic - .type _dl_tlsdesc_dynamic,@function - - /* %rax points to the TLS descriptor, such that 0(%rax) points to - _dl_tlsdesc_dynamic itself, and 8(%rax) points to a struct - tlsdesc_dynamic_arg object. It must return in %rax the offset - between the thread pointer and the object denoted by the - argument, without clobbering any registers. - - The assembly code that follows is a rendition of the following - C code, hand-optimized a little bit. - -ptrdiff_t -_dl_tlsdesc_dynamic (register struct tlsdesc *tdp asm ("%rax")) -{ - struct tlsdesc_dynamic_arg *td = tdp->arg; - dtv_t *dtv = *(dtv_t **)((char *)__thread_pointer + DTV_OFFSET); - if (__builtin_expect (td->gen_count <= dtv[0].counter - && (dtv[td->tlsinfo.ti_module].pointer.val - != TLS_DTV_UNALLOCATED), - 1)) - return dtv[td->tlsinfo.ti_module].pointer.val + td->tlsinfo.ti_offset - - __thread_pointer; - - return __tls_get_addr_internal (&td->tlsinfo) - __thread_pointer; -} -*/ - cfi_startproc - .align 16 -_dl_tlsdesc_dynamic: - /* Preserve call-clobbered registers that we modify. - We need two scratch regs anyway. */ - movq %rsi, -16(%rsp) - movq %fs:DTV_OFFSET, %rsi - movq %rdi, -8(%rsp) - movq TLSDESC_ARG(%rax), %rdi - movq (%rsi), %rax - cmpq %rax, TLSDESC_GEN_COUNT(%rdi) - ja .Lslow - movq TLSDESC_MODID(%rdi), %rax - salq $4, %rax - movq (%rax,%rsi), %rax - cmpq $-1, %rax - je .Lslow - addq TLSDESC_MODOFF(%rdi), %rax -.Lret: - movq -16(%rsp), %rsi - subq %fs:0, %rax - movq -8(%rsp), %rdi - ret -.Lslow: - /* Besides rdi and rsi, saved above, save rdx, rcx, r8, r9, - r10 and r11. Also, align the stack, that's off by 8 bytes. */ - subq $72, %rsp - cfi_adjust_cfa_offset (72) - movq %rdx, 8(%rsp) - movq %rcx, 16(%rsp) - movq %r8, 24(%rsp) - movq %r9, 32(%rsp) - movq %r10, 40(%rsp) - movq %r11, 48(%rsp) - /* %rdi already points to the tlsinfo data structure. */ - call HIDDEN_JUMPTARGET (__tls_get_addr) - movq 8(%rsp), %rdx - movq 16(%rsp), %rcx - movq 24(%rsp), %r8 - movq 32(%rsp), %r9 - movq 40(%rsp), %r10 - movq 48(%rsp), %r11 - addq $72, %rsp - cfi_adjust_cfa_offset (-72) - jmp .Lret - cfi_endproc - .size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic -#endif /* SHARED */ - - /* This function is a wrapper for a lazy resolver for TLS_DESC - RELA relocations. The incoming 0(%rsp) points to the caller's - link map, pushed by the dynamic object's internal lazy TLS - resolver front-end before tail-calling us. We need to pop it - ourselves. %rax points to a TLS descriptor, such that 0(%rax) - holds the address of the internal resolver front-end (unless - some other thread beat us to resolving it) and 8(%rax) holds a - pointer to the relocation. - - When the actual resolver returns, it will have adjusted the - TLS descriptor such that we can tail-call it for it to return - the TP offset of the symbol. */ - - .hidden _dl_tlsdesc_resolve_rela - .global _dl_tlsdesc_resolve_rela - .type _dl_tlsdesc_resolve_rela,@function - cfi_startproc - .align 16 - /* The PLT entry will have pushed the link_map pointer. */ -_dl_tlsdesc_resolve_rela: - cfi_adjust_cfa_offset (8) - /* Save all call-clobbered registers. Add 8 bytes for push in - the PLT entry to align the stack. */ - subq $80, %rsp - cfi_adjust_cfa_offset (80) - movq %rax, (%rsp) - movq %rdi, 8(%rsp) - movq %rax, %rdi /* Pass tlsdesc* in %rdi. */ - movq %rsi, 16(%rsp) - movq 80(%rsp), %rsi /* Pass link_map* in %rsi. */ - movq %r8, 24(%rsp) - movq %r9, 32(%rsp) - movq %r10, 40(%rsp) - movq %r11, 48(%rsp) - movq %rdx, 56(%rsp) - movq %rcx, 64(%rsp) - call _dl_tlsdesc_resolve_rela_fixup - movq (%rsp), %rax - movq 8(%rsp), %rdi - movq 16(%rsp), %rsi - movq 24(%rsp), %r8 - movq 32(%rsp), %r9 - movq 40(%rsp), %r10 - movq 48(%rsp), %r11 - movq 56(%rsp), %rdx - movq 64(%rsp), %rcx - addq $88, %rsp - cfi_adjust_cfa_offset (-88) - jmp *(%rax) - cfi_endproc - .size _dl_tlsdesc_resolve_rela, .-_dl_tlsdesc_resolve_rela - - /* This function is a placeholder for lazy resolving of TLS - relocations. Once some thread starts resolving a TLS - relocation, it sets up the TLS descriptor to use this - resolver, such that other threads that would attempt to - resolve it concurrently may skip the call to the original lazy - resolver and go straight to a condition wait. - - When the actual resolver returns, it will have adjusted the - TLS descriptor such that we can tail-call it for it to return - the TP offset of the symbol. */ - - .hidden _dl_tlsdesc_resolve_hold - .global _dl_tlsdesc_resolve_hold - .type _dl_tlsdesc_resolve_hold,@function - cfi_startproc - .align 16 -_dl_tlsdesc_resolve_hold: -0: - /* Save all call-clobbered registers. */ - subq $72, %rsp - cfi_adjust_cfa_offset (72) - movq %rax, (%rsp) - movq %rdi, 8(%rsp) - movq %rax, %rdi /* Pass tlsdesc* in %rdi. */ - movq %rsi, 16(%rsp) - /* Pass _dl_tlsdesc_resolve_hold's address in %rsi. */ - leaq . - _dl_tlsdesc_resolve_hold(%rip), %rsi - movq %r8, 24(%rsp) - movq %r9, 32(%rsp) - movq %r10, 40(%rsp) - movq %r11, 48(%rsp) - movq %rdx, 56(%rsp) - movq %rcx, 64(%rsp) - call _dl_tlsdesc_resolve_hold_fixup -1: - movq (%rsp), %rax - movq 8(%rsp), %rdi - movq 16(%rsp), %rsi - movq 24(%rsp), %r8 - movq 32(%rsp), %r9 - movq 40(%rsp), %r10 - movq 48(%rsp), %r11 - movq 56(%rsp), %rdx - movq 64(%rsp), %rcx - addq $72, %rsp - cfi_adjust_cfa_offset (-72) - jmp *(%rax) - cfi_endproc - .size _dl_tlsdesc_resolve_hold, .-_dl_tlsdesc_resolve_hold diff --git a/sysdeps/x86_64/dl-tlsdesc.h b/sysdeps/x86_64/dl-tlsdesc.h deleted file mode 100644 index 14019a2610..0000000000 --- a/sysdeps/x86_64/dl-tlsdesc.h +++ /dev/null @@ -1,70 +0,0 @@ -/* Thread-local storage descriptor handling in the ELF dynamic linker. - x86_64 version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifndef _X86_64_DL_TLSDESC_H -# define _X86_64_DL_TLSDESC_H 1 - -/* Type used to represent a TLS descriptor in the GOT. */ -struct tlsdesc -{ - /* Anonymous union is used here to ensure that GOT entry slot is always - 8 bytes for both x32 and x86-64. */ - union - { - ptrdiff_t (*entry) (struct tlsdesc *on_rax); - uint64_t entry_slot; - }; - union - { - void *arg; - uint64_t arg_slot; - }; -}; - -typedef struct dl_tls_index -{ - uint64_t ti_module; - uint64_t ti_offset; -} tls_index; - -/* Type used as the argument in a TLS descriptor for a symbol that - needs dynamic TLS offsets. */ -struct tlsdesc_dynamic_arg -{ - tls_index tlsinfo; - size_t gen_count; -}; - -extern ptrdiff_t attribute_hidden - _dl_tlsdesc_return(struct tlsdesc *on_rax), - _dl_tlsdesc_undefweak(struct tlsdesc *on_rax), - _dl_tlsdesc_resolve_rela(struct tlsdesc *on_rax), - _dl_tlsdesc_resolve_hold(struct tlsdesc *on_rax); - -# ifdef SHARED -extern void *_dl_make_tlsdesc_dynamic (struct link_map *map, - size_t ti_offset) - internal_function attribute_hidden; - -extern ptrdiff_t attribute_hidden _dl_tlsdesc_dynamic(struct tlsdesc *); -# endif - -#endif diff --git a/sysdeps/x86_64/dl-trampoline.S b/sysdeps/x86_64/dl-trampoline.S deleted file mode 100644 index c14c61aa58..0000000000 --- a/sysdeps/x86_64/dl-trampoline.S +++ /dev/null @@ -1,147 +0,0 @@ -/* PLT trampolines. x86-64 version. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -#ifndef DL_STACK_ALIGNMENT -/* Due to GCC bug: - - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58066 - - __tls_get_addr may be called with 8-byte stack alignment. Although - this bug has been fixed in GCC 4.9.4, 5.3 and 6, we can't assume - that stack will be always aligned at 16 bytes. We use unaligned - 16-byte move to load and store SSE registers, which has no penalty - on modern processors if stack is 16-byte aligned. */ -# define DL_STACK_ALIGNMENT 8 -#endif - -#ifndef DL_RUNTIME_UNALIGNED_VEC_SIZE -/* The maximum size in bytes of unaligned vector load and store in the - dynamic linker. Since SSE optimized memory/string functions with - aligned SSE register load and store are used in the dynamic linker, - we must set this to 8 so that _dl_runtime_resolve_sse will align the - stack before calling _dl_fixup. */ -# define DL_RUNTIME_UNALIGNED_VEC_SIZE 8 -#endif - -/* True if _dl_runtime_resolve should align stack to VEC_SIZE bytes. */ -#define DL_RUNTIME_RESOLVE_REALIGN_STACK \ - (VEC_SIZE > DL_STACK_ALIGNMENT \ - && VEC_SIZE > DL_RUNTIME_UNALIGNED_VEC_SIZE) - -/* Align vector register save area to 16 bytes. */ -#define REGISTER_SAVE_VEC_OFF 0 - -/* Area on stack to save and restore registers used for parameter - passing when calling _dl_fixup. */ -#ifdef __ILP32__ -# define REGISTER_SAVE_RAX (REGISTER_SAVE_VEC_OFF + VEC_SIZE * 8) -# define PRESERVE_BND_REGS_PREFIX -#else -/* Align bound register save area to 16 bytes. */ -# define REGISTER_SAVE_BND0 (REGISTER_SAVE_VEC_OFF + VEC_SIZE * 8) -# define REGISTER_SAVE_BND1 (REGISTER_SAVE_BND0 + 16) -# define REGISTER_SAVE_BND2 (REGISTER_SAVE_BND1 + 16) -# define REGISTER_SAVE_BND3 (REGISTER_SAVE_BND2 + 16) -# define REGISTER_SAVE_RAX (REGISTER_SAVE_BND3 + 16) -# ifdef HAVE_MPX_SUPPORT -# define PRESERVE_BND_REGS_PREFIX bnd -# else -# define PRESERVE_BND_REGS_PREFIX .byte 0xf2 -# endif -#endif -#define REGISTER_SAVE_RCX (REGISTER_SAVE_RAX + 8) -#define REGISTER_SAVE_RDX (REGISTER_SAVE_RCX + 8) -#define REGISTER_SAVE_RSI (REGISTER_SAVE_RDX + 8) -#define REGISTER_SAVE_RDI (REGISTER_SAVE_RSI + 8) -#define REGISTER_SAVE_R8 (REGISTER_SAVE_RDI + 8) -#define REGISTER_SAVE_R9 (REGISTER_SAVE_R8 + 8) - -#define RESTORE_AVX - -#define VEC_SIZE 64 -#define VMOVA vmovdqa64 -#if DL_RUNTIME_RESOLVE_REALIGN_STACK || VEC_SIZE <= DL_STACK_ALIGNMENT -# define VMOV vmovdqa64 -#else -# define VMOV vmovdqu64 -#endif -#define VEC(i) zmm##i -#define _dl_runtime_resolve _dl_runtime_resolve_avx512 -#define _dl_runtime_profile _dl_runtime_profile_avx512 -#include "dl-trampoline.h" -#undef _dl_runtime_resolve -#undef _dl_runtime_profile -#undef VEC -#undef VMOV -#undef VMOVA -#undef VEC_SIZE - -#define VEC_SIZE 32 -#define VMOVA vmovdqa -#if DL_RUNTIME_RESOLVE_REALIGN_STACK || VEC_SIZE <= DL_STACK_ALIGNMENT -# define VMOV vmovdqa -#else -# define VMOV vmovdqu -#endif -#define VEC(i) ymm##i -#define _dl_runtime_resolve _dl_runtime_resolve_avx -#define _dl_runtime_resolve_opt _dl_runtime_resolve_avx_opt -#define _dl_runtime_profile _dl_runtime_profile_avx -#include "dl-trampoline.h" -#undef _dl_runtime_resolve -#undef _dl_runtime_resolve_opt -#undef _dl_runtime_profile -#undef VEC -#undef VMOV -#undef VMOVA -#undef VEC_SIZE - -/* movaps/movups is 1-byte shorter. */ -#define VEC_SIZE 16 -#define VMOVA movaps -#if DL_RUNTIME_RESOLVE_REALIGN_STACK || VEC_SIZE <= DL_STACK_ALIGNMENT -# define VMOV movaps -#else -# define VMOV movups -#endif -#define VEC(i) xmm##i -#define _dl_runtime_resolve _dl_runtime_resolve_sse -#define _dl_runtime_profile _dl_runtime_profile_sse -#undef RESTORE_AVX -#include "dl-trampoline.h" -#undef _dl_runtime_resolve -#undef _dl_runtime_profile -#undef VMOV -#undef VMOVA - -/* Used by _dl_runtime_resolve_avx_opt/_dl_runtime_resolve_avx512_opt - to preserve the full vector registers with zero upper bits. */ -#define VMOVA vmovdqa -#if DL_RUNTIME_RESOLVE_REALIGN_STACK || VEC_SIZE <= DL_STACK_ALIGNMENT -# define VMOV vmovdqa -#else -# define VMOV vmovdqu -#endif -#define _dl_runtime_resolve _dl_runtime_resolve_sse_vex -#define _dl_runtime_resolve_opt _dl_runtime_resolve_avx512_opt -#include "dl-trampoline.h" diff --git a/sysdeps/x86_64/dl-trampoline.h b/sysdeps/x86_64/dl-trampoline.h deleted file mode 100644 index 8db24c16ac..0000000000 --- a/sysdeps/x86_64/dl-trampoline.h +++ /dev/null @@ -1,647 +0,0 @@ -/* PLT trampolines. x86-64 version. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#undef REGISTER_SAVE_AREA_RAW -#ifdef __ILP32__ -/* X32 saves RCX, RDX, RSI, RDI, R8 and R9 plus RAX as well as VEC0 to - VEC7. */ -# define REGISTER_SAVE_AREA_RAW (8 * 7 + VEC_SIZE * 8) -#else -/* X86-64 saves RCX, RDX, RSI, RDI, R8 and R9 plus RAX as well as - BND0, BND1, BND2, BND3 and VEC0 to VEC7. */ -# define REGISTER_SAVE_AREA_RAW (8 * 7 + 16 * 4 + VEC_SIZE * 8) -#endif - -#undef REGISTER_SAVE_AREA -#undef LOCAL_STORAGE_AREA -#undef BASE -#if DL_RUNTIME_RESOLVE_REALIGN_STACK -# define REGISTER_SAVE_AREA (REGISTER_SAVE_AREA_RAW + 8) -/* Local stack area before jumping to function address: RBX. */ -# define LOCAL_STORAGE_AREA 8 -# define BASE rbx -# if (REGISTER_SAVE_AREA % VEC_SIZE) != 0 -# error REGISTER_SAVE_AREA must be multples of VEC_SIZE -# endif -#else -# define REGISTER_SAVE_AREA REGISTER_SAVE_AREA_RAW -/* Local stack area before jumping to function address: All saved - registers. */ -# define LOCAL_STORAGE_AREA REGISTER_SAVE_AREA -# define BASE rsp -# if (REGISTER_SAVE_AREA % 16) != 8 -# error REGISTER_SAVE_AREA must be odd multples of 8 -# endif -#endif - - .text -#ifdef _dl_runtime_resolve_opt -/* Use the smallest vector registers to preserve the full YMM/ZMM - registers to avoid SSE transition penalty. */ - -# if VEC_SIZE == 32 -/* Check if the upper 128 bits in %ymm0 - %ymm7 registers are non-zero - and preserve %xmm0 - %xmm7 registers with the zero upper bits. Since - there is no SSE transition penalty on AVX512 processors which don't - support XGETBV with ECX == 1, _dl_runtime_resolve_avx512_slow isn't - provided. */ - .globl _dl_runtime_resolve_avx_slow - .hidden _dl_runtime_resolve_avx_slow - .type _dl_runtime_resolve_avx_slow, @function - .align 16 -_dl_runtime_resolve_avx_slow: - cfi_startproc - cfi_adjust_cfa_offset(16) # Incorporate PLT - vorpd %ymm0, %ymm1, %ymm8 - vorpd %ymm2, %ymm3, %ymm9 - vorpd %ymm4, %ymm5, %ymm10 - vorpd %ymm6, %ymm7, %ymm11 - vorpd %ymm8, %ymm9, %ymm9 - vorpd %ymm10, %ymm11, %ymm10 - vpcmpeqd %xmm8, %xmm8, %xmm8 - vorpd %ymm9, %ymm10, %ymm10 - vptest %ymm10, %ymm8 - # Preserve %ymm0 - %ymm7 registers if the upper 128 bits of any - # %ymm0 - %ymm7 registers aren't zero. - PRESERVE_BND_REGS_PREFIX - jnc _dl_runtime_resolve_avx - # Use vzeroupper to avoid SSE transition penalty. - vzeroupper - # Preserve %xmm0 - %xmm7 registers with the zero upper 128 bits - # when the upper 128 bits of %ymm0 - %ymm7 registers are zero. - PRESERVE_BND_REGS_PREFIX - jmp _dl_runtime_resolve_sse_vex - cfi_adjust_cfa_offset(-16) # Restore PLT adjustment - cfi_endproc - .size _dl_runtime_resolve_avx_slow, .-_dl_runtime_resolve_avx_slow -# endif - -/* Use XGETBV with ECX == 1 to check which bits in vector registers are - non-zero and only preserve the non-zero lower bits with zero upper - bits. */ - .globl _dl_runtime_resolve_opt - .hidden _dl_runtime_resolve_opt - .type _dl_runtime_resolve_opt, @function - .align 16 -_dl_runtime_resolve_opt: - cfi_startproc - cfi_adjust_cfa_offset(16) # Incorporate PLT - pushq %rax - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%rax, 0) - pushq %rcx - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%rcx, 0) - pushq %rdx - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%rdx, 0) - movl $1, %ecx - xgetbv - movl %eax, %r11d - popq %rdx - cfi_adjust_cfa_offset(-8) - cfi_restore (%rdx) - popq %rcx - cfi_adjust_cfa_offset(-8) - cfi_restore (%rcx) - popq %rax - cfi_adjust_cfa_offset(-8) - cfi_restore (%rax) -# if VEC_SIZE == 32 - # For YMM registers, check if YMM state is in use. - andl $bit_YMM_state, %r11d - # Preserve %xmm0 - %xmm7 registers with the zero upper 128 bits if - # YMM state isn't in use. - PRESERVE_BND_REGS_PREFIX - jz _dl_runtime_resolve_sse_vex -# elif VEC_SIZE == 16 - # For ZMM registers, check if YMM state and ZMM state are in - # use. - andl $(bit_YMM_state | bit_ZMM0_15_state), %r11d - cmpl $bit_YMM_state, %r11d - # Preserve %zmm0 - %zmm7 registers if ZMM state is in use. - PRESERVE_BND_REGS_PREFIX - jg _dl_runtime_resolve_avx512 - # Preserve %ymm0 - %ymm7 registers with the zero upper 256 bits if - # ZMM state isn't in use. - PRESERVE_BND_REGS_PREFIX - je _dl_runtime_resolve_avx - # Preserve %xmm0 - %xmm7 registers with the zero upper 384 bits if - # neither YMM state nor ZMM state are in use. -# else -# error Unsupported VEC_SIZE! -# endif - cfi_adjust_cfa_offset(-16) # Restore PLT adjustment - cfi_endproc - .size _dl_runtime_resolve_opt, .-_dl_runtime_resolve_opt -#endif - .globl _dl_runtime_resolve - .hidden _dl_runtime_resolve - .type _dl_runtime_resolve, @function - .align 16 - cfi_startproc -_dl_runtime_resolve: - cfi_adjust_cfa_offset(16) # Incorporate PLT -#if DL_RUNTIME_RESOLVE_REALIGN_STACK -# if LOCAL_STORAGE_AREA != 8 -# error LOCAL_STORAGE_AREA must be 8 -# endif - pushq %rbx # push subtracts stack by 8. - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%rbx, 0) - mov %RSP_LP, %RBX_LP - cfi_def_cfa_register(%rbx) - and $-VEC_SIZE, %RSP_LP -#endif - sub $REGISTER_SAVE_AREA, %RSP_LP -#if !DL_RUNTIME_RESOLVE_REALIGN_STACK - cfi_adjust_cfa_offset(REGISTER_SAVE_AREA) -#endif - # Preserve registers otherwise clobbered. - movq %rax, REGISTER_SAVE_RAX(%rsp) - movq %rcx, REGISTER_SAVE_RCX(%rsp) - movq %rdx, REGISTER_SAVE_RDX(%rsp) - movq %rsi, REGISTER_SAVE_RSI(%rsp) - movq %rdi, REGISTER_SAVE_RDI(%rsp) - movq %r8, REGISTER_SAVE_R8(%rsp) - movq %r9, REGISTER_SAVE_R9(%rsp) - VMOV %VEC(0), (REGISTER_SAVE_VEC_OFF)(%rsp) - VMOV %VEC(1), (REGISTER_SAVE_VEC_OFF + VEC_SIZE)(%rsp) - VMOV %VEC(2), (REGISTER_SAVE_VEC_OFF + VEC_SIZE * 2)(%rsp) - VMOV %VEC(3), (REGISTER_SAVE_VEC_OFF + VEC_SIZE * 3)(%rsp) - VMOV %VEC(4), (REGISTER_SAVE_VEC_OFF + VEC_SIZE * 4)(%rsp) - VMOV %VEC(5), (REGISTER_SAVE_VEC_OFF + VEC_SIZE * 5)(%rsp) - VMOV %VEC(6), (REGISTER_SAVE_VEC_OFF + VEC_SIZE * 6)(%rsp) - VMOV %VEC(7), (REGISTER_SAVE_VEC_OFF + VEC_SIZE * 7)(%rsp) -#ifndef __ILP32__ - # We also have to preserve bound registers. These are nops if - # Intel MPX isn't available or disabled. -# ifdef HAVE_MPX_SUPPORT - bndmov %bnd0, REGISTER_SAVE_BND0(%rsp) - bndmov %bnd1, REGISTER_SAVE_BND1(%rsp) - bndmov %bnd2, REGISTER_SAVE_BND2(%rsp) - bndmov %bnd3, REGISTER_SAVE_BND3(%rsp) -# else -# if REGISTER_SAVE_BND0 == 0 - .byte 0x66,0x0f,0x1b,0x04,0x24 -# else - .byte 0x66,0x0f,0x1b,0x44,0x24,REGISTER_SAVE_BND0 -# endif - .byte 0x66,0x0f,0x1b,0x4c,0x24,REGISTER_SAVE_BND1 - .byte 0x66,0x0f,0x1b,0x54,0x24,REGISTER_SAVE_BND2 - .byte 0x66,0x0f,0x1b,0x5c,0x24,REGISTER_SAVE_BND3 -# endif -#endif - # Copy args pushed by PLT in register. - # %rdi: link_map, %rsi: reloc_index - mov (LOCAL_STORAGE_AREA + 8)(%BASE), %RSI_LP - mov LOCAL_STORAGE_AREA(%BASE), %RDI_LP - call _dl_fixup # Call resolver. - mov %RAX_LP, %R11_LP # Save return value -#ifndef __ILP32__ - # Restore bound registers. These are nops if Intel MPX isn't - # avaiable or disabled. -# ifdef HAVE_MPX_SUPPORT - bndmov REGISTER_SAVE_BND3(%rsp), %bnd3 - bndmov REGISTER_SAVE_BND2(%rsp), %bnd2 - bndmov REGISTER_SAVE_BND1(%rsp), %bnd1 - bndmov REGISTER_SAVE_BND0(%rsp), %bnd0 -# else - .byte 0x66,0x0f,0x1a,0x5c,0x24,REGISTER_SAVE_BND3 - .byte 0x66,0x0f,0x1a,0x54,0x24,REGISTER_SAVE_BND2 - .byte 0x66,0x0f,0x1a,0x4c,0x24,REGISTER_SAVE_BND1 -# if REGISTER_SAVE_BND0 == 0 - .byte 0x66,0x0f,0x1a,0x04,0x24 -# else - .byte 0x66,0x0f,0x1a,0x44,0x24,REGISTER_SAVE_BND0 -# endif -# endif -#endif - # Get register content back. - movq REGISTER_SAVE_R9(%rsp), %r9 - movq REGISTER_SAVE_R8(%rsp), %r8 - movq REGISTER_SAVE_RDI(%rsp), %rdi - movq REGISTER_SAVE_RSI(%rsp), %rsi - movq REGISTER_SAVE_RDX(%rsp), %rdx - movq REGISTER_SAVE_RCX(%rsp), %rcx - movq REGISTER_SAVE_RAX(%rsp), %rax - VMOV (REGISTER_SAVE_VEC_OFF)(%rsp), %VEC(0) - VMOV (REGISTER_SAVE_VEC_OFF + VEC_SIZE)(%rsp), %VEC(1) - VMOV (REGISTER_SAVE_VEC_OFF + VEC_SIZE * 2)(%rsp), %VEC(2) - VMOV (REGISTER_SAVE_VEC_OFF + VEC_SIZE * 3)(%rsp), %VEC(3) - VMOV (REGISTER_SAVE_VEC_OFF + VEC_SIZE * 4)(%rsp), %VEC(4) - VMOV (REGISTER_SAVE_VEC_OFF + VEC_SIZE * 5)(%rsp), %VEC(5) - VMOV (REGISTER_SAVE_VEC_OFF + VEC_SIZE * 6)(%rsp), %VEC(6) - VMOV (REGISTER_SAVE_VEC_OFF + VEC_SIZE * 7)(%rsp), %VEC(7) -#if DL_RUNTIME_RESOLVE_REALIGN_STACK - mov %RBX_LP, %RSP_LP - cfi_def_cfa_register(%rsp) - movq (%rsp), %rbx - cfi_restore(%rbx) -#endif - # Adjust stack(PLT did 2 pushes) - add $(LOCAL_STORAGE_AREA + 16), %RSP_LP - cfi_adjust_cfa_offset(-(LOCAL_STORAGE_AREA + 16)) - # Preserve bound registers. - PRESERVE_BND_REGS_PREFIX - jmp *%r11 # Jump to function address. - cfi_endproc - .size _dl_runtime_resolve, .-_dl_runtime_resolve - - -/* To preserve %xmm0 - %xmm7 registers, dl-trampoline.h is included - twice, for _dl_runtime_resolve_sse and _dl_runtime_resolve_sse_vex. - But we don't need another _dl_runtime_profile for XMM registers. */ -#if !defined PROF && defined _dl_runtime_profile -# if (LR_VECTOR_OFFSET % VEC_SIZE) != 0 -# error LR_VECTOR_OFFSET must be multples of VEC_SIZE -# endif - - .globl _dl_runtime_profile - .hidden _dl_runtime_profile - .type _dl_runtime_profile, @function - .align 16 -_dl_runtime_profile: - cfi_startproc - cfi_adjust_cfa_offset(16) # Incorporate PLT - /* The La_x86_64_regs data structure pointed to by the - fourth paramater must be VEC_SIZE-byte aligned. This must - be explicitly enforced. We have the set up a dynamically - sized stack frame. %rbx points to the top half which - has a fixed size and preserves the original stack pointer. */ - - sub $32, %RSP_LP # Allocate the local storage. - cfi_adjust_cfa_offset(32) - movq %rbx, (%rsp) - cfi_rel_offset(%rbx, 0) - - /* On the stack: - 56(%rbx) parameter #1 - 48(%rbx) return address - - 40(%rbx) reloc index - 32(%rbx) link_map - - 24(%rbx) La_x86_64_regs pointer - 16(%rbx) framesize - 8(%rbx) rax - (%rbx) rbx - */ - - movq %rax, 8(%rsp) - mov %RSP_LP, %RBX_LP - cfi_def_cfa_register(%rbx) - - /* Actively align the La_x86_64_regs structure. */ - and $-VEC_SIZE, %RSP_LP - /* sizeof(La_x86_64_regs). Need extra space for 8 SSE registers - to detect if any xmm0-xmm7 registers are changed by audit - module. */ - sub $(LR_SIZE + XMM_SIZE*8), %RSP_LP - movq %rsp, 24(%rbx) - - /* Fill the La_x86_64_regs structure. */ - movq %rdx, LR_RDX_OFFSET(%rsp) - movq %r8, LR_R8_OFFSET(%rsp) - movq %r9, LR_R9_OFFSET(%rsp) - movq %rcx, LR_RCX_OFFSET(%rsp) - movq %rsi, LR_RSI_OFFSET(%rsp) - movq %rdi, LR_RDI_OFFSET(%rsp) - movq %rbp, LR_RBP_OFFSET(%rsp) - - lea 48(%rbx), %RAX_LP - movq %rax, LR_RSP_OFFSET(%rsp) - - /* We always store the XMM registers even if AVX is available. - This is to provide backward binary compatibility for existing - audit modules. */ - movaps %xmm0, (LR_XMM_OFFSET)(%rsp) - movaps %xmm1, (LR_XMM_OFFSET + XMM_SIZE)(%rsp) - movaps %xmm2, (LR_XMM_OFFSET + XMM_SIZE*2)(%rsp) - movaps %xmm3, (LR_XMM_OFFSET + XMM_SIZE*3)(%rsp) - movaps %xmm4, (LR_XMM_OFFSET + XMM_SIZE*4)(%rsp) - movaps %xmm5, (LR_XMM_OFFSET + XMM_SIZE*5)(%rsp) - movaps %xmm6, (LR_XMM_OFFSET + XMM_SIZE*6)(%rsp) - movaps %xmm7, (LR_XMM_OFFSET + XMM_SIZE*7)(%rsp) - -# ifndef __ILP32__ -# ifdef HAVE_MPX_SUPPORT - bndmov %bnd0, (LR_BND_OFFSET)(%rsp) # Preserve bound - bndmov %bnd1, (LR_BND_OFFSET + BND_SIZE)(%rsp) # registers. Nops if - bndmov %bnd2, (LR_BND_OFFSET + BND_SIZE*2)(%rsp) # MPX not available - bndmov %bnd3, (LR_BND_OFFSET + BND_SIZE*3)(%rsp) # or disabled. -# else - .byte 0x66,0x0f,0x1b,0x84,0x24;.long (LR_BND_OFFSET) - .byte 0x66,0x0f,0x1b,0x8c,0x24;.long (LR_BND_OFFSET + BND_SIZE) - .byte 0x66,0x0f,0x1b,0x94,0x24;.long (LR_BND_OFFSET + BND_SIZE*2) - .byte 0x66,0x0f,0x1b,0x9c,0x24;.long (LR_BND_OFFSET + BND_SIZE*3) -# endif -# endif - -# ifdef RESTORE_AVX - /* This is to support AVX audit modules. */ - VMOVA %VEC(0), (LR_VECTOR_OFFSET)(%rsp) - VMOVA %VEC(1), (LR_VECTOR_OFFSET + VECTOR_SIZE)(%rsp) - VMOVA %VEC(2), (LR_VECTOR_OFFSET + VECTOR_SIZE*2)(%rsp) - VMOVA %VEC(3), (LR_VECTOR_OFFSET + VECTOR_SIZE*3)(%rsp) - VMOVA %VEC(4), (LR_VECTOR_OFFSET + VECTOR_SIZE*4)(%rsp) - VMOVA %VEC(5), (LR_VECTOR_OFFSET + VECTOR_SIZE*5)(%rsp) - VMOVA %VEC(6), (LR_VECTOR_OFFSET + VECTOR_SIZE*6)(%rsp) - VMOVA %VEC(7), (LR_VECTOR_OFFSET + VECTOR_SIZE*7)(%rsp) - - /* Save xmm0-xmm7 registers to detect if any of them are - changed by audit module. */ - vmovdqa %xmm0, (LR_SIZE)(%rsp) - vmovdqa %xmm1, (LR_SIZE + XMM_SIZE)(%rsp) - vmovdqa %xmm2, (LR_SIZE + XMM_SIZE*2)(%rsp) - vmovdqa %xmm3, (LR_SIZE + XMM_SIZE*3)(%rsp) - vmovdqa %xmm4, (LR_SIZE + XMM_SIZE*4)(%rsp) - vmovdqa %xmm5, (LR_SIZE + XMM_SIZE*5)(%rsp) - vmovdqa %xmm6, (LR_SIZE + XMM_SIZE*6)(%rsp) - vmovdqa %xmm7, (LR_SIZE + XMM_SIZE*7)(%rsp) -# endif - - mov %RSP_LP, %RCX_LP # La_x86_64_regs pointer to %rcx. - mov 48(%rbx), %RDX_LP # Load return address if needed. - mov 40(%rbx), %RSI_LP # Copy args pushed by PLT in register. - mov 32(%rbx), %RDI_LP # %rdi: link_map, %rsi: reloc_index - lea 16(%rbx), %R8_LP # Address of framesize - call _dl_profile_fixup # Call resolver. - - mov %RAX_LP, %R11_LP # Save return value. - - movq 8(%rbx), %rax # Get back register content. - movq LR_RDX_OFFSET(%rsp), %rdx - movq LR_R8_OFFSET(%rsp), %r8 - movq LR_R9_OFFSET(%rsp), %r9 - - movaps (LR_XMM_OFFSET)(%rsp), %xmm0 - movaps (LR_XMM_OFFSET + XMM_SIZE)(%rsp), %xmm1 - movaps (LR_XMM_OFFSET + XMM_SIZE*2)(%rsp), %xmm2 - movaps (LR_XMM_OFFSET + XMM_SIZE*3)(%rsp), %xmm3 - movaps (LR_XMM_OFFSET + XMM_SIZE*4)(%rsp), %xmm4 - movaps (LR_XMM_OFFSET + XMM_SIZE*5)(%rsp), %xmm5 - movaps (LR_XMM_OFFSET + XMM_SIZE*6)(%rsp), %xmm6 - movaps (LR_XMM_OFFSET + XMM_SIZE*7)(%rsp), %xmm7 - -# ifdef RESTORE_AVX - /* Check if any xmm0-xmm7 registers are changed by audit - module. */ - vpcmpeqq (LR_SIZE)(%rsp), %xmm0, %xmm8 - vpmovmskb %xmm8, %esi - cmpl $0xffff, %esi - je 2f - vmovdqa %xmm0, (LR_VECTOR_OFFSET)(%rsp) - jmp 1f -2: VMOVA (LR_VECTOR_OFFSET)(%rsp), %VEC(0) - vmovdqa %xmm0, (LR_XMM_OFFSET)(%rsp) - -1: vpcmpeqq (LR_SIZE + XMM_SIZE)(%rsp), %xmm1, %xmm8 - vpmovmskb %xmm8, %esi - cmpl $0xffff, %esi - je 2f - vmovdqa %xmm1, (LR_VECTOR_OFFSET + VECTOR_SIZE)(%rsp) - jmp 1f -2: VMOVA (LR_VECTOR_OFFSET + VECTOR_SIZE)(%rsp), %VEC(1) - vmovdqa %xmm1, (LR_XMM_OFFSET + XMM_SIZE)(%rsp) - -1: vpcmpeqq (LR_SIZE + XMM_SIZE*2)(%rsp), %xmm2, %xmm8 - vpmovmskb %xmm8, %esi - cmpl $0xffff, %esi - je 2f - vmovdqa %xmm2, (LR_VECTOR_OFFSET + VECTOR_SIZE*2)(%rsp) - jmp 1f -2: VMOVA (LR_VECTOR_OFFSET + VECTOR_SIZE*2)(%rsp), %VEC(2) - vmovdqa %xmm2, (LR_XMM_OFFSET + XMM_SIZE*2)(%rsp) - -1: vpcmpeqq (LR_SIZE + XMM_SIZE*3)(%rsp), %xmm3, %xmm8 - vpmovmskb %xmm8, %esi - cmpl $0xffff, %esi - je 2f - vmovdqa %xmm3, (LR_VECTOR_OFFSET + VECTOR_SIZE*3)(%rsp) - jmp 1f -2: VMOVA (LR_VECTOR_OFFSET + VECTOR_SIZE*3)(%rsp), %VEC(3) - vmovdqa %xmm3, (LR_XMM_OFFSET + XMM_SIZE*3)(%rsp) - -1: vpcmpeqq (LR_SIZE + XMM_SIZE*4)(%rsp), %xmm4, %xmm8 - vpmovmskb %xmm8, %esi - cmpl $0xffff, %esi - je 2f - vmovdqa %xmm4, (LR_VECTOR_OFFSET + VECTOR_SIZE*4)(%rsp) - jmp 1f -2: VMOVA (LR_VECTOR_OFFSET + VECTOR_SIZE*4)(%rsp), %VEC(4) - vmovdqa %xmm4, (LR_XMM_OFFSET + XMM_SIZE*4)(%rsp) - -1: vpcmpeqq (LR_SIZE + XMM_SIZE*5)(%rsp), %xmm5, %xmm8 - vpmovmskb %xmm8, %esi - cmpl $0xffff, %esi - je 2f - vmovdqa %xmm5, (LR_VECTOR_OFFSET + VECTOR_SIZE*5)(%rsp) - jmp 1f -2: VMOVA (LR_VECTOR_OFFSET + VECTOR_SIZE*5)(%rsp), %VEC(5) - vmovdqa %xmm5, (LR_XMM_OFFSET + XMM_SIZE*5)(%rsp) - -1: vpcmpeqq (LR_SIZE + XMM_SIZE*6)(%rsp), %xmm6, %xmm8 - vpmovmskb %xmm8, %esi - cmpl $0xffff, %esi - je 2f - vmovdqa %xmm6, (LR_VECTOR_OFFSET + VECTOR_SIZE*6)(%rsp) - jmp 1f -2: VMOVA (LR_VECTOR_OFFSET + VECTOR_SIZE*6)(%rsp), %VEC(6) - vmovdqa %xmm6, (LR_XMM_OFFSET + XMM_SIZE*6)(%rsp) - -1: vpcmpeqq (LR_SIZE + XMM_SIZE*7)(%rsp), %xmm7, %xmm8 - vpmovmskb %xmm8, %esi - cmpl $0xffff, %esi - je 2f - vmovdqa %xmm7, (LR_VECTOR_OFFSET + VECTOR_SIZE*7)(%rsp) - jmp 1f -2: VMOVA (LR_VECTOR_OFFSET + VECTOR_SIZE*7)(%rsp), %VEC(7) - vmovdqa %xmm7, (LR_XMM_OFFSET + XMM_SIZE*7)(%rsp) - -1: -# endif - -# ifndef __ILP32__ -# ifdef HAVE_MPX_SUPPORT - bndmov (LR_BND_OFFSET)(%rsp), %bnd0 # Restore bound - bndmov (LR_BND_OFFSET + BND_SIZE)(%rsp), %bnd1 # registers. - bndmov (LR_BND_OFFSET + BND_SIZE*2)(%rsp), %bnd2 - bndmov (LR_BND_OFFSET + BND_SIZE*3)(%rsp), %bnd3 -# else - .byte 0x66,0x0f,0x1a,0x84,0x24;.long (LR_BND_OFFSET) - .byte 0x66,0x0f,0x1a,0x8c,0x24;.long (LR_BND_OFFSET + BND_SIZE) - .byte 0x66,0x0f,0x1a,0x94,0x24;.long (LR_BND_OFFSET + BND_SIZE*2) - .byte 0x66,0x0f,0x1a,0x9c,0x24;.long (LR_BND_OFFSET + BND_SIZE*3) -# endif -# endif - - mov 16(%rbx), %R10_LP # Anything in framesize? - test %R10_LP, %R10_LP - PRESERVE_BND_REGS_PREFIX - jns 3f - - /* There's nothing in the frame size, so there - will be no call to the _dl_call_pltexit. */ - - /* Get back registers content. */ - movq LR_RCX_OFFSET(%rsp), %rcx - movq LR_RSI_OFFSET(%rsp), %rsi - movq LR_RDI_OFFSET(%rsp), %rdi - - mov %RBX_LP, %RSP_LP - movq (%rsp), %rbx - cfi_restore(%rbx) - cfi_def_cfa_register(%rsp) - - add $48, %RSP_LP # Adjust the stack to the return value - # (eats the reloc index and link_map) - cfi_adjust_cfa_offset(-48) - PRESERVE_BND_REGS_PREFIX - jmp *%r11 # Jump to function address. - -3: - cfi_adjust_cfa_offset(48) - cfi_rel_offset(%rbx, 0) - cfi_def_cfa_register(%rbx) - - /* At this point we need to prepare new stack for the function - which has to be called. We copy the original stack to a - temporary buffer of the size specified by the 'framesize' - returned from _dl_profile_fixup */ - - lea LR_RSP_OFFSET(%rbx), %RSI_LP # stack - add $8, %R10_LP - and $-16, %R10_LP - mov %R10_LP, %RCX_LP - sub %R10_LP, %RSP_LP - mov %RSP_LP, %RDI_LP - shr $3, %RCX_LP - rep - movsq - - movq 24(%rdi), %rcx # Get back register content. - movq 32(%rdi), %rsi - movq 40(%rdi), %rdi - - PRESERVE_BND_REGS_PREFIX - call *%r11 - - mov 24(%rbx), %RSP_LP # Drop the copied stack content - - /* Now we have to prepare the La_x86_64_retval structure for the - _dl_call_pltexit. The La_x86_64_regs is being pointed by rsp now, - so we just need to allocate the sizeof(La_x86_64_retval) space on - the stack, since the alignment has already been taken care of. */ -# ifdef RESTORE_AVX - /* sizeof(La_x86_64_retval). Need extra space for 2 SSE - registers to detect if xmm0/xmm1 registers are changed - by audit module. */ - sub $(LRV_SIZE + XMM_SIZE*2), %RSP_LP -# else - sub $LRV_SIZE, %RSP_LP # sizeof(La_x86_64_retval) -# endif - mov %RSP_LP, %RCX_LP # La_x86_64_retval argument to %rcx. - - /* Fill in the La_x86_64_retval structure. */ - movq %rax, LRV_RAX_OFFSET(%rcx) - movq %rdx, LRV_RDX_OFFSET(%rcx) - - movaps %xmm0, LRV_XMM0_OFFSET(%rcx) - movaps %xmm1, LRV_XMM1_OFFSET(%rcx) - -# ifdef RESTORE_AVX - /* This is to support AVX audit modules. */ - VMOVA %VEC(0), LRV_VECTOR0_OFFSET(%rcx) - VMOVA %VEC(1), LRV_VECTOR1_OFFSET(%rcx) - - /* Save xmm0/xmm1 registers to detect if they are changed - by audit module. */ - vmovdqa %xmm0, (LRV_SIZE)(%rcx) - vmovdqa %xmm1, (LRV_SIZE + XMM_SIZE)(%rcx) -# endif - -# ifndef __ILP32__ -# ifdef HAVE_MPX_SUPPORT - bndmov %bnd0, LRV_BND0_OFFSET(%rcx) # Preserve returned bounds. - bndmov %bnd1, LRV_BND1_OFFSET(%rcx) -# else - .byte 0x66,0x0f,0x1b,0x81;.long (LRV_BND0_OFFSET) - .byte 0x66,0x0f,0x1b,0x89;.long (LRV_BND1_OFFSET) -# endif -# endif - - fstpt LRV_ST0_OFFSET(%rcx) - fstpt LRV_ST1_OFFSET(%rcx) - - movq 24(%rbx), %rdx # La_x86_64_regs argument to %rdx. - movq 40(%rbx), %rsi # Copy args pushed by PLT in register. - movq 32(%rbx), %rdi # %rdi: link_map, %rsi: reloc_index - call _dl_call_pltexit - - /* Restore return registers. */ - movq LRV_RAX_OFFSET(%rsp), %rax - movq LRV_RDX_OFFSET(%rsp), %rdx - - movaps LRV_XMM0_OFFSET(%rsp), %xmm0 - movaps LRV_XMM1_OFFSET(%rsp), %xmm1 - -# ifdef RESTORE_AVX - /* Check if xmm0/xmm1 registers are changed by audit module. */ - vpcmpeqq (LRV_SIZE)(%rsp), %xmm0, %xmm2 - vpmovmskb %xmm2, %esi - cmpl $0xffff, %esi - jne 1f - VMOVA LRV_VECTOR0_OFFSET(%rsp), %VEC(0) - -1: vpcmpeqq (LRV_SIZE + XMM_SIZE)(%rsp), %xmm1, %xmm2 - vpmovmskb %xmm2, %esi - cmpl $0xffff, %esi - jne 1f - VMOVA LRV_VECTOR1_OFFSET(%rsp), %VEC(1) - -1: -# endif - -# ifndef __ILP32__ -# ifdef HAVE_MPX_SUPPORT - bndmov LRV_BND0_OFFSET(%rsp), %bnd0 # Restore bound registers. - bndmov LRV_BND1_OFFSET(%rsp), %bnd1 -# else - .byte 0x66,0x0f,0x1a,0x84,0x24;.long (LRV_BND0_OFFSET) - .byte 0x66,0x0f,0x1a,0x8c,0x24;.long (LRV_BND1_OFFSET) -# endif -# endif - - fldt LRV_ST1_OFFSET(%rsp) - fldt LRV_ST0_OFFSET(%rsp) - - mov %RBX_LP, %RSP_LP - movq (%rsp), %rbx - cfi_restore(%rbx) - cfi_def_cfa_register(%rsp) - - add $48, %RSP_LP # Adjust the stack to the return value - # (eats the reloc index and link_map) - cfi_adjust_cfa_offset(-48) - PRESERVE_BND_REGS_PREFIX - retq - - cfi_endproc - .size _dl_runtime_profile, .-_dl_runtime_profile -#endif diff --git a/sysdeps/x86_64/ffs.c b/sysdeps/x86_64/ffs.c deleted file mode 100644 index 132812c488..0000000000 --- a/sysdeps/x86_64/ffs.c +++ /dev/null @@ -1,39 +0,0 @@ -/* ffs -- find first set bit in a word, counted from least significant end. - For AMD x86-64. - This file is part of the GNU C Library. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - Contributed by Ulrich Drepper . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef ffs - -int -__ffs (int x) -{ - int cnt; - int tmp; - - asm ("bsfl %2,%0\n" /* Count low bits in X and store in %1. */ - "cmovel %1,%0\n" /* If number was zero, use -1 as result. */ - : "=&r" (cnt), "=r" (tmp) : "rm" (x), "1" (-1)); - - return cnt + 1; -} -weak_alias (__ffs, ffs) -libc_hidden_def (__ffs) -libc_hidden_builtin_def (ffs) diff --git a/sysdeps/x86_64/ffsll.c b/sysdeps/x86_64/ffsll.c deleted file mode 100644 index 47111ce61b..0000000000 --- a/sysdeps/x86_64/ffsll.c +++ /dev/null @@ -1,42 +0,0 @@ -/* ffsll -- find first set bit in a word, counted from least significant end. - For AMD x86-64. - This file is part of the GNU C Library. - Copyright (C) 1991-2017 Free Software Foundation, Inc. - Contributed by Ulrich Drepper . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define ffsl __something_else -#include - -#undef ffsll - -int -ffsll (long long int x) -{ - long long int cnt; - long long int tmp; - - asm ("bsfq %2,%0\n" /* Count low bits in X and store in %1. */ - "cmoveq %1,%0\n" /* If number was zero, use -1 as result. */ - : "=&r" (cnt), "=r" (tmp) : "rm" (x), "1" (-1)); - - return cnt + 1; -} - -#ifndef __ILP32__ -#undef ffsl -weak_alias (ffsll, ffsl) -#endif diff --git a/sysdeps/x86_64/fpu/Implies b/sysdeps/x86_64/fpu/Implies deleted file mode 100644 index 2b745a34fb..0000000000 --- a/sysdeps/x86_64/fpu/Implies +++ /dev/null @@ -1 +0,0 @@ -x86/fpu diff --git a/sysdeps/x86_64/fpu/Makefile b/sysdeps/x86_64/fpu/Makefile deleted file mode 100644 index 2b7d69bb50..0000000000 --- a/sysdeps/x86_64/fpu/Makefile +++ /dev/null @@ -1,239 +0,0 @@ -ifeq ($(subdir),mathvec) -libmvec-support += svml_d_cos2_core svml_d_cos4_core_avx \ - svml_d_cos4_core svml_d_cos8_core \ - svml_d_sin2_core svml_d_sin4_core_avx \ - svml_d_sin4_core svml_d_sin8_core svml_d_trig_data \ - svml_s_cosf4_core svml_s_cosf8_core_avx \ - svml_s_cosf8_core svml_s_cosf16_core svml_s_trig_data \ - svml_s_sinf4_core svml_s_sinf8_core_avx \ - svml_s_sinf8_core svml_s_sinf16_core \ - svml_d_sincos2_core svml_d_sincos4_core_avx \ - svml_d_sincos4_core svml_d_sincos8_core \ - svml_d_log2_core svml_d_log4_core_avx svml_d_log4_core \ - svml_d_log8_core svml_d_log_data svml_s_logf4_core \ - svml_s_logf8_core_avx svml_s_logf8_core svml_s_logf16_core \ - svml_s_logf_data svml_d_exp2_core svml_d_exp4_core_avx \ - svml_d_exp4_core svml_d_exp8_core svml_d_exp_data \ - svml_s_expf4_core svml_s_expf8_core_avx svml_s_expf8_core \ - svml_s_expf16_core svml_s_expf_data svml_d_pow2_core \ - svml_d_pow4_core_avx svml_d_pow4_core svml_d_pow8_core \ - svml_d_pow_data svml_s_powf4_core svml_s_powf8_core_avx \ - svml_s_powf8_core svml_s_powf16_core svml_s_powf_data \ - svml_s_sincosf4_core svml_s_sincosf8_core_avx \ - svml_s_sincosf8_core svml_s_sincosf16_core svml_finite_alias - -libmvec-static-only-routines = svml_finite_alias -endif - -# Variables for libmvec tests. -ifeq ($(subdir),math) -ifeq ($(build-mathvec),yes) -libmvec-tests += double-vlen2 double-vlen4 double-vlen4-avx2 \ - float-vlen4 float-vlen8 float-vlen8-avx2 -tests += test-double-libmvec-alias test-double-libmvec-alias-avx \ - test-double-libmvec-alias-avx2 test-double-libmvec-alias-main \ - test-double-libmvec-alias-avx-main test-double-libmvec-alias-avx2-main \ - test-float-libmvec-alias test-float-libmvec-alias-avx \ - test-float-libmvec-alias-avx2 test-float-libmvec-alias-main \ - test-float-libmvec-alias-avx-main test-float-libmvec-alias-avx2-main \ - test-double-libmvec-sincos test-double-libmvec-sincos-avx \ - test-double-libmvec-sincos-avx2 test-float-libmvec-sincosf \ - test-float-libmvec-sincosf-avx test-float-libmvec-sincosf-avx2 -modules-names += test-double-libmvec-alias-mod \ - test-double-libmvec-alias-avx-mod \ - test-double-libmvec-alias-avx2-mod \ - test-float-libmvec-alias-mod \ - test-float-libmvec-alias-avx-mod \ - test-float-libmvec-alias-avx2-mod -modules-names-tests += test-double-libmvec-alias-mod \ - test-double-libmvec-alias-avx-mod \ - test-double-libmvec-alias-avx2-mod \ - test-float-libmvec-alias-mod \ - test-float-libmvec-alias-avx-mod \ - test-float-libmvec-alias-avx2-mod -extra-test-objs += test-double-libmvec-sincos-avx-main.o \ - test-double-libmvec-sincos-avx2-main.o \ - test-double-libmvec-sincos-main.o \ - test-float-libmvec-sincosf-avx-main.o \ - test-float-libmvec-sincosf-avx2-main.o\ - test-float-libmvec-sincosf-main.o -test-double-libmvec-alias-mod.so-no-z-defs = yes -test-double-libmvec-alias-avx-mod.so-no-z-defs = yes -test-double-libmvec-alias-avx2-mod.so-no-z-defs = yes -test-float-libmvec-alias-mod.so-no-z-defs = yes -test-float-libmvec-alias-avx-mod.so-no-z-defs = yes -test-float-libmvec-alias-avx2-mod.so-no-z-defs = yes - -$(objpfx)test-double-libmvec-alias: \ - $(objpfx)test-double-libmvec-alias-mod.so -$(objpfx)test-double-libmvec-alias-mod.so: \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-double-libmvec-alias-avx: \ - $(objpfx)test-double-libmvec-alias-avx-mod.so -$(objpfx)test-double-libmvec-alias-avx-mod.so: \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-double-libmvec-alias-avx2: \ - $(objpfx)test-double-libmvec-alias-avx2-mod.so -$(objpfx)test-double-libmvec-alias-avx2-mod.so: \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-double-libmvec-alias-main: \ - $(objpfx)test-double-libmvec-alias-mod.os \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-double-libmvec-alias-avx-main: \ - $(objpfx)test-double-libmvec-alias-avx-mod.os \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-double-libmvec-alias-avx2-main: \ - $(objpfx)test-double-libmvec-alias-avx2-mod.os \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-float-libmvec-alias: \ - $(objpfx)test-float-libmvec-alias-mod.so -$(objpfx)test-float-libmvec-alias-mod.so: \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-float-libmvec-alias-avx: \ - $(objpfx)test-float-libmvec-alias-avx-mod.so -$(objpfx)test-float-libmvec-alias-avx-mod.so: \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-float-libmvec-alias-avx2: \ - $(objpfx)test-float-libmvec-alias-avx2-mod.so -$(objpfx)test-float-libmvec-alias-avx2-mod.so: \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-float-libmvec-alias-main: \ - $(objpfx)test-float-libmvec-alias-mod.os \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-float-libmvec-alias-avx-main: \ - $(objpfx)test-float-libmvec-alias-avx-mod.os \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-float-libmvec-alias-avx2-main: \ - $(objpfx)test-float-libmvec-alias-avx2-mod.os \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-double-libmvec-sincos: \ - $(objpfx)test-double-libmvec-sincos.o \ - $(objpfx)test-double-libmvec-sincos-main.o $(libmvec) - -$(objpfx)test-double-libmvec-sincos-avx: \ - $(objpfx)test-double-libmvec-sincos-avx.o \ - $(objpfx)test-double-libmvec-sincos-avx-main.o $(libmvec) - -$(objpfx)test-double-libmvec-sincos-avx2: \ - $(objpfx)test-double-libmvec-sincos-avx2.o \ - $(objpfx)test-double-libmvec-sincos-avx2-main.o $(libmvec) - -$(objpfx)test-float-libmvec-sincosf: \ - $(objpfx)test-float-libmvec-sincosf.o \ - $(objpfx)test-float-libmvec-sincosf-main.o $(libmvec) - -$(objpfx)test-float-libmvec-sincosf-avx: \ - $(objpfx)test-float-libmvec-sincosf-avx.o \ - $(objpfx)test-float-libmvec-sincosf-avx-main.o $(libmvec) - -$(objpfx)test-float-libmvec-sincosf-avx2: \ - $(objpfx)test-float-libmvec-sincosf-avx2.o \ - $(objpfx)test-float-libmvec-sincosf-avx2-main.o $(libmvec) - -ifeq (yes,$(config-cflags-avx512)) -libmvec-tests += double-vlen8 float-vlen16 -tests += test-double-libmvec-alias-avx512 \ - test-float-libmvec-alias-avx512 \ - test-double-libmvec-alias-avx512-main \ - test-float-libmvec-alias-avx512-main \ - test-double-libmvec-sincos-avx512 \ - test-float-libmvec-sincosf-avx512 -modules-names += test-double-libmvec-alias-avx512-mod \ - test-float-libmvec-alias-avx512-mod -modules-names-tests += test-double-libmvec-alias-avx512-mod \ - test-float-libmvec-alias-avx512-mod -extra-test-objs += test-double-libmvec-sincos-avx512-main.o \ - test-float-libmvec-sincosf-avx512-main.o -test-double-libmvec-alias-avx512-mod.so-no-z-defs = yes -test-float-libmvec-alias-avx512-mod.so-no-z-defs = yes - -$(objpfx)test-double-libmvec-alias-avx512: \ - $(objpfx)test-double-libmvec-alias-avx512-mod.so -$(objpfx)test-double-libmvec-alias-avx512-mod.so: \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-double-libmvec-alias-avx512-main: \ - $(objpfx)test-double-libmvec-alias-avx512-mod.os \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-float-libmvec-alias-avx512: \ - $(objpfx)test-float-libmvec-alias-avx512-mod.so -$(objpfx)test-float-libmvec-alias-avx512-mod.so: \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-float-libmvec-alias-avx512-main: \ - $(objpfx)test-float-libmvec-alias-avx512-mod.os \ - $(objpfx)../mathvec/libmvec_nonshared.a $(libmvec) - -$(objpfx)test-double-libmvec-sincos-avx512: \ - $(objpfx)test-double-libmvec-sincos-avx512.o \ - $(objpfx)test-double-libmvec-sincos-avx512-main.o $(libmvec) - -$(objpfx)test-float-libmvec-sincosf-avx512: \ - $(objpfx)test-float-libmvec-sincosf-avx512.o \ - $(objpfx)test-float-libmvec-sincosf-avx512-main.o $(libmvec) -endif - -double-vlen2-funcs = cos exp log pow sin sincos -double-vlen4-funcs = cos exp log pow sin sincos -double-vlen4-avx2-funcs = cos exp log pow sin sincos -double-vlen8-funcs = cos exp log pow sin sincos -float-vlen4-funcs = cos exp log pow sin sincos -float-vlen8-funcs = cos exp log pow sin sincos -float-vlen8-avx2-funcs = cos exp log pow sin sincos -float-vlen16-funcs = cos exp log pow sin sincos - -double-vlen4-arch-ext-cflags = -mavx -double-vlen4-arch-ext2-cflags = -mavx2 -double-vlen8-arch-ext-cflags = -mavx512f - -float-vlen8-arch-ext-cflags = -mavx -float-vlen8-arch-ext2-cflags = -mavx2 -float-vlen16-arch-ext-cflags = -mavx512f - -libmvec-sincos-cflags = $(libm-test-fast-math-cflags) -fno-inline -fopenmp -Wno-unknown-pragmas -libmvec-alias-cflags = $(libmvec-sincos-cflags) -ffloat-store -ffinite-math-only - -CFLAGS-test-double-libmvec-alias-mod.c = $(libmvec-alias-cflags) -CFLAGS-test-double-libmvec-alias-avx-mod.c = $(double-vlen4-arch-ext-cflags) $(libmvec-alias-cflags) -DREQUIRE_AVX -CFLAGS-test-double-libmvec-alias-avx2-mod.c = $(double-vlen4-arch-ext2-cflags) $(libmvec-alias-cflags) -DREQUIRE_AVX2 -CFLAGS-test-double-libmvec-alias-avx512-mod.c = $(double-vlen8-arch-ext-cflags) $(libmvec-alias-cflags) -DREQUIRE_AVX512F - -CFLAGS-test-float-libmvec-alias-mod.c = $(libmvec-alias-cflags) -CFLAGS-test-float-libmvec-alias-avx-mod.c = $(double-vlen4-arch-ext-cflags) $(libmvec-alias-cflags) -DREQUIRE_AVX -CFLAGS-test-float-libmvec-alias-avx2-mod.c = $(double-vlen4-arch-ext2-cflags) $(libmvec-alias-cflags) -DREQUIRE_AVX2 -CFLAGS-test-float-libmvec-alias-avx512-mod.c = $(double-vlen8-arch-ext-cflags) $(libmvec-alias-cflags) -DREQUIRE_AVX512F - -CFLAGS-test-double-vlen4-avx2-wrappers.c = $(double-vlen4-arch-ext2-cflags) - -CFLAGS-test-float-vlen8-avx2-wrappers.c = $(float-vlen8-arch-ext2-cflags) - -CFLAGS-test-double-libmvec-sincos-main.c = $(libmvec-sincos-cflags) -CFLAGS-test-double-libmvec-sincos-avx.c = -DREQUIRE_AVX -CFLAGS-test-double-libmvec-sincos-avx-main.c = $(libmvec-sincos-cflags) $(double-vlen4-arch-ext-cflags) -CFLAGS-test-double-libmvec-sincos-avx2.c = -DREQUIRE_AVX2 -CFLAGS-test-double-libmvec-sincos-avx2-main.c = $(libmvec-sincos-cflags) $(double-vlen4-arch-ext2-cflags) -CFLAGS-test-double-libmvec-sincos-avx512.c = -DREQUIRE_AVX512F -CFLAGS-test-double-libmvec-sincos-avx512-main.c = $(libmvec-sincos-cflags) $(double-vlen8-arch-ext-cflags) - -CFLAGS-test-float-libmvec-sincosf-main.c = $(libmvec-sincos-cflags) -CFLAGS-test-float-libmvec-sincosf-avx.c = -DREQUIRE_AVX -CFLAGS-test-float-libmvec-sincosf-avx-main.c = $(libmvec-sincos-cflags) $(float-vlen8-arch-ext-cflags) -CFLAGS-test-float-libmvec-sincosf-avx2.c = -DREQUIRE_AVX2 -CFLAGS-test-float-libmvec-sincosf-avx2-main.c = $(libmvec-sincos-cflags) $(float-vlen8-arch-ext2-cflags) -CFLAGS-test-float-libmvec-sincosf-avx512.c = -DREQUIRE_AVX512F -CFLAGS-test-float-libmvec-sincosf-avx512-main.c = $(libmvec-sincos-cflags) $(float-vlen16-arch-ext-cflags) -endif -endif diff --git a/sysdeps/x86_64/fpu/Versions b/sysdeps/x86_64/fpu/Versions deleted file mode 100644 index 08132045d6..0000000000 --- a/sysdeps/x86_64/fpu/Versions +++ /dev/null @@ -1,16 +0,0 @@ -libmvec { - GLIBC_2.22 { - _ZGVbN2v_cos; _ZGVcN4v_cos; _ZGVdN4v_cos; _ZGVeN8v_cos; - _ZGVbN2v_sin; _ZGVcN4v_sin; _ZGVdN4v_sin; _ZGVeN8v_sin; - _ZGVbN2vvv_sincos; _ZGVcN4vvv_sincos; _ZGVdN4vvv_sincos; _ZGVeN8vvv_sincos; - _ZGVbN2v_log; _ZGVcN4v_log; _ZGVdN4v_log; _ZGVeN8v_log; - _ZGVbN2v_exp; _ZGVcN4v_exp; _ZGVdN4v_exp; _ZGVeN8v_exp; - _ZGVbN2vv_pow; _ZGVcN4vv_pow; _ZGVdN4vv_pow; _ZGVeN8vv_pow; - _ZGVbN4v_cosf; _ZGVcN8v_cosf; _ZGVdN8v_cosf; _ZGVeN16v_cosf; - _ZGVbN4v_sinf; _ZGVcN8v_sinf; _ZGVdN8v_sinf; _ZGVeN16v_sinf; - _ZGVbN4v_logf; _ZGVcN8v_logf; _ZGVdN8v_logf; _ZGVeN16v_logf; - _ZGVbN4v_expf; _ZGVcN8v_expf; _ZGVdN8v_expf; _ZGVeN16v_expf; - _ZGVbN4vv_powf; _ZGVcN8vv_powf; _ZGVdN8vv_powf; _ZGVeN16vv_powf; - _ZGVbN4vvv_sincosf; _ZGVcN8vvv_sincosf; _ZGVdN8vvv_sincosf; _ZGVeN16vvv_sincosf; - } -} diff --git a/sysdeps/x86_64/fpu/e_acosl.c b/sysdeps/x86_64/fpu/e_acosl.c deleted file mode 100644 index 1ef6d3c94a..0000000000 --- a/sysdeps/x86_64/fpu/e_acosl.c +++ /dev/null @@ -1 +0,0 @@ -#include "sysdeps/i386/fpu/e_acosl.c" diff --git a/sysdeps/x86_64/fpu/e_atan2l.c b/sysdeps/x86_64/fpu/e_atan2l.c deleted file mode 100644 index bbd549f307..0000000000 --- a/sysdeps/x86_64/fpu/e_atan2l.c +++ /dev/null @@ -1,2 +0,0 @@ -#include "sysdeps/i386/fpu/e_atan2l.c" - diff --git a/sysdeps/x86_64/fpu/e_exp10l.S b/sysdeps/x86_64/fpu/e_exp10l.S deleted file mode 100644 index d843e2b5e8..0000000000 --- a/sysdeps/x86_64/fpu/e_exp10l.S +++ /dev/null @@ -1,2 +0,0 @@ -#define USE_AS_EXP10L -#include diff --git a/sysdeps/x86_64/fpu/e_exp2l.S b/sysdeps/x86_64/fpu/e_exp2l.S deleted file mode 100644 index 0e059b7565..0000000000 --- a/sysdeps/x86_64/fpu/e_exp2l.S +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Written by J.T. Conklin . - * Adapted for exp2 by Ulrich Drepper . - * Adapted for x86-64 by Andreas Jaeger . - * Public domain. - */ - -#include -#include - -DEFINE_LDBL_MIN - -#ifdef PIC -# define MO(op) op##(%rip) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_exp2l) - fldt 8(%rsp) -/* I added the following ugly construct because exp(+-Inf) resulted - in NaN. The ugliness results from the bright minds at Intel. - For the i686 the code can be written better. - -- drepper@cygnus.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - movzwl 8+8(%rsp), %eax - andl $0x7fff, %eax - cmpl $0x3fbe, %eax - jge 3f - /* Argument's exponent below -65, result rounds to 1. */ - fld1 - faddp - ret -3: fld %st - frndint /* int(x) */ - fsubr %st,%st(1) /* fract(x) */ - fxch - f2xm1 /* 2^(fract(x)) - 1 */ - fld1 - faddp /* 2^(fract(x)) */ - fscale /* e^x */ - fstp %st(1) - LDBL_CHECK_FORCE_UFLOW_NONNEG_NAN - ret - -1: testl $0x200, %eax /* Test sign. */ - jz 2f /* If positive, jump. */ - fstp %st - fldz /* Set result to 0. */ -2: ret -END (__ieee754_exp2l) -strong_alias (__ieee754_exp2l, __exp2l_finite) diff --git a/sysdeps/x86_64/fpu/e_expf.S b/sysdeps/x86_64/fpu/e_expf.S deleted file mode 100644 index 4fd2bb1fb5..0000000000 --- a/sysdeps/x86_64/fpu/e_expf.S +++ /dev/null @@ -1,339 +0,0 @@ -/* Optimized __ieee754_expf function. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Short algorithm description: - * - * Let K = 64 (table size). - * e^x = 2^(x/log(2)) = 2^n * T[j] * (1 + P(y)) - * where - * x = m*log(2)/K + y, y in [0.0..log(2)/K] - * m = n*K + j, m,n,j - signed integer, j in [0..K-1] - * values of 2^(j/K) are tabulated as T[j]. - * - * P(y) is a minimax polynomial approximation of expf(x)-1 - * on small interval [0.0..log(2)/K]. - * - * P(y) = P3*y*y*y*y + P2*y*y*y + P1*y*y + P0*y, calculated as - * z = y*y; P(y) = (P3*z + P1)*z + (P2*z + P0)*y - * - * Special cases: - * expf(NaN) = NaN - * expf(+INF) = +INF - * expf(-INF) = 0 - * expf(x) = 1 for subnormals - * for finite argument, only expf(0)=1 is exact - * expf(x) overflows if x>88.7228317260742190 - * expf(x) underflows if x<-103.972076416015620 - */ - - .text -ENTRY(__ieee754_expf) - /* Input: single precision x in %xmm0 */ - cvtss2sd %xmm0, %xmm1 /* Convert x to double precision */ - movd %xmm0, %ecx /* Copy x */ - movsd L(DP_KLN2)(%rip), %xmm2 /* DP K/log(2) */ - movsd L(DP_P2)(%rip), %xmm3 /* DP P2 */ - movl %ecx, %eax /* x */ - mulsd %xmm1, %xmm2 /* DP x*K/log(2) */ - andl $0x7fffffff, %ecx /* |x| */ - lea L(DP_T)(%rip), %rsi /* address of table T[j] */ - cmpl $0x42ad496b, %ecx /* |x|<125*log(2) ? */ - movsd L(DP_P3)(%rip), %xmm4 /* DP P3 */ - addsd L(DP_RS)(%rip), %xmm2 /* DP x*K/log(2)+RS */ - jae L(special_paths) - - /* Here if |x|<125*log(2) */ - cmpl $0x31800000, %ecx /* |x|<2^(-28) ? */ - jb L(small_arg) - - /* Main path: here if 2^(-28)<=|x|<125*log(2) */ - cvtsd2ss %xmm2, %xmm2 /* SP x*K/log(2)+RS */ - movd %xmm2, %eax /* bits of n*K+j with trash */ - subss L(SP_RS)(%rip), %xmm2 /* SP t=round(x*K/log(2)) */ - movl %eax, %edx /* n*K+j with trash */ - cvtss2sd %xmm2, %xmm2 /* DP t */ - andl $0x3f, %eax /* bits of j */ - mulsd L(DP_NLN2K)(%rip), %xmm2/* DP -t*log(2)/K */ - andl $0xffffffc0, %edx /* bits of n */ -#ifdef __AVX__ - vaddsd %xmm1, %xmm2, %xmm0 /* DP y=x-t*log(2)/K */ - vmulsd %xmm0, %xmm0, %xmm2 /* DP z=y*y */ -#else - addsd %xmm1, %xmm2 /* DP y=x-t*log(2)/K */ - movaps %xmm2, %xmm0 /* DP y */ - mulsd %xmm2, %xmm2 /* DP z=y*y */ -#endif - mulsd %xmm2, %xmm4 /* DP P3*z */ - addl $0x1fc0, %edx /* bits of n + SP exponent bias */ - mulsd %xmm2, %xmm3 /* DP P2*z */ - shll $17, %edx /* SP 2^n */ - addsd L(DP_P1)(%rip), %xmm4 /* DP P3*z+P1 */ - addsd L(DP_P0)(%rip), %xmm3 /* DP P2*z+P0 */ - movd %edx, %xmm1 /* SP 2^n */ - mulsd %xmm2, %xmm4 /* DP (P3*z+P1)*z */ - mulsd %xmm3, %xmm0 /* DP (P2*z+P0)*y */ - addsd %xmm4, %xmm0 /* DP P(y) */ - mulsd (%rsi,%rax,8), %xmm0 /* DP P(y)*T[j] */ - addsd (%rsi,%rax,8), %xmm0 /* DP T[j]*(P(y)+1) */ - cvtsd2ss %xmm0, %xmm0 /* SP T[j]*(P(y)+1) */ - mulss %xmm1, %xmm0 /* SP result=2^n*(T[j]*(P(y)+1)) */ - ret - - .p2align 4 -L(small_arg): - /* Here if 0<=|x|<2^(-28) */ - addss L(SP_ONE)(%rip), %xmm0 /* 1.0 + x */ - /* Return 1.0 with inexact raised, except for x==0 */ - ret - - .p2align 4 -L(special_paths): - /* Here if 125*log(2)<=|x| */ - shrl $31, %eax /* Get sign bit of x, and depending on it: */ - lea L(SP_RANGE)(%rip), %rdx /* load over/underflow bound */ - cmpl (%rdx,%rax,4), %ecx /* |x|under/overflow bound */ - cmpl $0x7f800000, %ecx /* |x| is finite ? */ - jae L(arg_inf_or_nan) - - /* Here if |x|>under/overflow bound, and x is finite */ - testq %rax, %rax /* sign of x nonzero ? */ - je L(res_overflow) - - /* Here if -inf0) */ - movss L(SP_LARGE)(%rip), %xmm0/* load large value 2^100 */ - mulss %xmm0, %xmm0 /* Return overflowed result (Inf or max normal) */ - ret - - .p2align 4 -L(arg_inf_or_nan): - /* Here if |x| is Inf or NAN */ - jne L(arg_nan) /* |x| is Inf ? */ - - /* Here if |x| is Inf */ - lea L(SP_INF_0)(%rip), %rdx /* depending on sign of x: */ - movss (%rdx,%rax,4), %xmm0 /* return zero or Inf */ - ret - - .p2align 4 -L(arg_nan): - /* Here if |x| is NaN */ - addss %xmm0, %xmm0 /* Return x+x (raise invalid) */ - ret - - .p2align 4 -L(near_under_or_overflow): - /* Here if 125*log(2)<=|x|this bound, then result overflows */ - .long 0x42cff1b4 /* if x. - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - */ - -/* - * The 8087 method for the exponential function is to calculate - * exp(x) = 2^(x log2(e)) - * after separating integer and fractional parts - * x log2(e) = i + f, |f| <= .5 - * 2^i is immediate but f needs to be precise for long double accuracy. - * Suppress range reduction error in computing f by the following. - * Separate x into integer and fractional parts - * x = xi + xf, |xf| <= .5 - * Separate log2(e) into the sum of an exact number c0 and small part c1. - * c0 + c1 = log2(e) to extra precision - * Then - * f = (c0 xi - i) + c0 xf + c1 x - * where c0 xi is exact and so also is (c0 xi - i). - * -- moshier@na-net.ornl.gov - */ - -#include -#include - -#ifdef USE_AS_EXP10L -# define IEEE754_EXPL __ieee754_exp10l -# define EXPL_FINITE __exp10l_finite -# define FLDLOG fldl2t -#elif defined USE_AS_EXPM1L -# define IEEE754_EXPL __expm1l -# undef EXPL_FINITE -# define FLDLOG fldl2e -#else -# define IEEE754_EXPL __ieee754_expl -# define EXPL_FINITE __expl_finite -# define FLDLOG fldl2e -#endif - - .section .rodata.cst16,"aM",@progbits,16 - - .p2align 4 -#ifdef USE_AS_EXP10L - .type c0,@object -c0: .byte 0, 0, 0, 0, 0, 0, 0x9a, 0xd4, 0x00, 0x40 - .byte 0, 0, 0, 0, 0, 0 - ASM_SIZE_DIRECTIVE(c0) - .type c1,@object -c1: .byte 0x58, 0x92, 0xfc, 0x15, 0x37, 0x9a, 0x97, 0xf0, 0xef, 0x3f - .byte 0, 0, 0, 0, 0, 0 - ASM_SIZE_DIRECTIVE(c1) -#else - .type c0,@object -c0: .byte 0, 0, 0, 0, 0, 0, 0xaa, 0xb8, 0xff, 0x3f - .byte 0, 0, 0, 0, 0, 0 - ASM_SIZE_DIRECTIVE(c0) - .type c1,@object -c1: .byte 0x20, 0xfa, 0xee, 0xc2, 0x5f, 0x70, 0xa5, 0xec, 0xed, 0x3f - .byte 0, 0, 0, 0, 0, 0 - ASM_SIZE_DIRECTIVE(c1) -#endif -#ifndef USE_AS_EXPM1L - .type csat,@object -csat: .byte 0, 0, 0, 0, 0, 0, 0, 0x80, 0x0e, 0x40 - .byte 0, 0, 0, 0, 0, 0 - ASM_SIZE_DIRECTIVE(csat) -DEFINE_LDBL_MIN -#endif - -#ifdef PIC -# define MO(op) op##(%rip) -#else -# define MO(op) op -#endif - - .text -ENTRY(IEEE754_EXPL) -#ifdef USE_AS_EXPM1L - movzwl 8+8(%rsp), %eax - xorb $0x80, %ah // invert sign bit (now 1 is "positive") - cmpl $0xc006, %eax // is num positive and exp >= 6 (number is >= 128.0)? - jae HIDDEN_JUMPTARGET (__expl) // (if num is denormal, it is at least >= 64.0) -#endif - fldt 8(%rsp) -/* I added the following ugly construct because expl(+-Inf) resulted - in NaN. The ugliness results from the bright minds at Intel. - For the i686 the code can be written better. - -- drepper@cygnus.com. */ - fxam /* Is NaN or +-Inf? */ -#ifdef USE_AS_EXPM1L - xorb $0x80, %ah - cmpl $0xc006, %eax - fstsw %ax - movb $0x45, %dh - jb 4f - - /* Below -64.0 (may be -NaN or -Inf). */ - andb %ah, %dh - cmpb $0x01, %dh - je 6f /* Is +-NaN, jump. */ - jmp 1f /* -large, possibly -Inf. */ - -4: /* In range -64.0 to 64.0 (may be +-0 but not NaN or +-Inf). */ - /* Test for +-0 as argument. */ - andb %ah, %dh - cmpb $0x40, %dh - je 2f - - /* Test for arguments that are small but not subnormal. */ - movzwl 8+8(%rsp), %eax - andl $0x7fff, %eax - cmpl $0x3fbf, %eax - jge 3f - /* Argument's exponent below -64; avoid spurious underflow if - normal. */ - cmpl $0x0001, %eax - jge 2f - /* Force underflow and return the argument, to avoid wrong signs - of zero results from the code below in some rounding modes. */ - fld %st - fmul %st - fstp %st - jmp 2f -#else - movzwl 8+8(%rsp), %eax - andl $0x7fff, %eax - cmpl $0x400d, %eax - jg 5f - cmpl $0x3fbc, %eax - jge 3f - /* Argument's exponent below -67, result rounds to 1. */ - fld1 - faddp - jmp 2f -5: /* Overflow, underflow or infinity or NaN as argument. */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - cmpb $0x01, %dh - je 6f /* Is +-NaN, jump. */ - /* Overflow or underflow; saturate. */ - fstp %st - fldt MO(csat) - andb $2, %ah - jz 3f - fchs -#endif -3: FLDLOG /* 1 log2(base) */ - fmul %st(1), %st /* 1 x log2(base) */ - /* Set round-to-nearest temporarily. */ - fstcw -4(%rsp) - movl $0xf3ff, %edx - andl -4(%rsp), %edx - movl %edx, -8(%rsp) - fldcw -8(%rsp) - frndint /* 1 i */ - fld %st(1) /* 2 x */ - frndint /* 2 xi */ - fldcw -4(%rsp) - fld %st(1) /* 3 i */ - fldt MO(c0) /* 4 c0 */ - fld %st(2) /* 5 xi */ - fmul %st(1), %st /* 5 c0 xi */ - fsubp %st, %st(2) /* 4 f = c0 xi - i */ - fld %st(4) /* 5 x */ - fsub %st(3), %st /* 5 xf = x - xi */ - fmulp %st, %st(1) /* 4 c0 xf */ - faddp %st, %st(1) /* 3 f = f + c0 xf */ - fldt MO(c1) /* 4 */ - fmul %st(4), %st /* 4 c1 * x */ - faddp %st, %st(1) /* 3 f = f + c1 * x */ - f2xm1 /* 3 2^(fract(x * log2(base))) - 1 */ -#ifdef USE_AS_EXPM1L - fstp %st(1) /* 2 */ - fscale /* 2 scale factor is st(1); base^x - 2^i */ - fxch /* 2 i */ - fld1 /* 3 1.0 */ - fscale /* 3 2^i */ - fld1 /* 4 1.0 */ - fsubrp %st, %st(1) /* 3 2^i - 1.0 */ - fstp %st(1) /* 2 */ - faddp %st, %st(1) /* 1 base^x - 1.0 */ -#else - fld1 /* 4 1.0 */ - faddp /* 3 2^(fract(x * log2(base))) */ - fstp %st(1) /* 2 */ - fscale /* 2 scale factor is st(1); base^x */ - fstp %st(1) /* 1 */ - LDBL_CHECK_FORCE_UFLOW_NONNEG -#endif - fstp %st(1) /* 0 */ - jmp 2f -1: -#ifdef USE_AS_EXPM1L - /* For expm1l, only negative sign gets here. */ - fstp %st - fld1 - fchs -#else - testl $0x200, %eax /* Test sign. */ - jz 2f /* If positive, jump. */ - fstp %st - fldz /* Set result to 0. */ -#endif -2: ret -6: /* NaN argument. */ - fadd %st - ret -END(IEEE754_EXPL) -#ifdef USE_AS_EXPM1L -libm_hidden_def (__expm1l) -weak_alias (__expm1l, expm1l) -#else -strong_alias (IEEE754_EXPL, EXPL_FINITE) -#endif diff --git a/sysdeps/x86_64/fpu/e_fmodl.S b/sysdeps/x86_64/fpu/e_fmodl.S deleted file mode 100644 index 07c50df8d1..0000000000 --- a/sysdeps/x86_64/fpu/e_fmodl.S +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - * Adapted for x86-64 by Andreas Jaeger . - */ - -#include - -RCSID("$NetBSD: $") - -ENTRY(__ieee754_fmodl) - fldt 24(%rsp) - fldt 8(%rsp) -1: fprem - fstsw %ax - and $04,%ah - jnz 1b - fstp %st(1) - ret -END (__ieee754_fmodl) -strong_alias (__ieee754_fmodl, __fmodl_finite) diff --git a/sysdeps/x86_64/fpu/e_ilogbl.S b/sysdeps/x86_64/fpu/e_ilogbl.S deleted file mode 100644 index ae6c0fe6f9..0000000000 --- a/sysdeps/x86_64/fpu/e_ilogbl.S +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changes for long double by Ulrich Drepper - * Adapted for x86-64 by Andreas Jaeger . - * Public domain. - */ - -#include - -ENTRY(__ieee754_ilogbl) - fldt 8(%rsp) -/* I added the following ugly construct because ilogb(+-Inf) is - required to return INT_MAX in ISO C99. - -- jakub@redhat.com. */ - fxam /* Is NaN or +-Inf? */ - fstsw %ax - movb $0x45, %dh - andb %ah, %dh - cmpb $0x05, %dh - je 1f /* Is +-Inf, jump. */ - cmpb $0x40, %dh - je 2f /* Is +-Inf, jump. */ - - fxtract - fstp %st - - fistpl -4(%rsp) - fwait - movl -4(%rsp),%eax - - ret - -1: fstp %st - movl $0x7fffffff, %eax - ret -2: fstp %st - movl $0x80000000, %eax /* FP_ILOGB0 */ - ret -END (__ieee754_ilogbl) diff --git a/sysdeps/x86_64/fpu/e_log10l.S b/sysdeps/x86_64/fpu/e_log10l.S deleted file mode 100644 index e0cb88e32e..0000000000 --- a/sysdeps/x86_64/fpu/e_log10l.S +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - * - * Changed to use fyl2xp1 for values near 1, . - * Adapted for x86-64 by Andreas Jaeger . - */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - - -#ifdef PIC -# define MO(op) op##(%rip) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_log10l) - fldlg2 // log10(2) - fldt 8(%rsp) // x : log10(2) - fxam - fnstsw - fld %st // x : x : log10(2) - testb $1, %ah - jnz 3f // in case x is NaN or ±Inf -4: fsubl MO(one) // x-1 : x : log10(2) - fld %st // x-1 : x-1 : x : log10(2) - fabs // |x-1| : x-1 : x : log10(2) - fcompl MO(limit) // x-1 : x : log10(2) - fnstsw // x-1 : x : log10(2) - andb $0x45, %ah - jz 2f - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 5f - fabs // log10(1) is +0 in all rounding modes. -5: fstp %st(1) // x-1 : log10(2) - fyl2xp1 // log10(x) - ret - -2: fstp %st(0) // x : log10(2) - fyl2x // log10(x) - ret - -3: testb $4, %ah - jnz 4b // in case x is ±Inf - fstp %st(1) - fstp %st(1) - fadd %st(0) - ret -END(__ieee754_log10l) - - -ENTRY(__log10l_finite) - fldlg2 // log10(2) - fldt 8(%rsp) // x : log10(2) - fld %st // x : x : log10(2) -4: fsubl MO(one) // x-1 : x : log10(2) - fld %st // x-1 : x-1 : x : log10(2) - fabs // |x-1| : x-1 : x : log10(2) - fcompl MO(limit) // x-1 : x : log10(2) - fnstsw // x-1 : x : log10(2) - andb $0x45, %ah - jz 2b - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 6f - fabs // log10(1) is +0 in all rounding modes. -6: fstp %st(1) // x-1 : log10(2) - fyl2xp1 // log10(x) - ret -END(__log10l_finite) diff --git a/sysdeps/x86_64/fpu/e_log2l.S b/sysdeps/x86_64/fpu/e_log2l.S deleted file mode 100644 index 023ec29164..0000000000 --- a/sysdeps/x86_64/fpu/e_log2l.S +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Written by J.T. Conklin . - * Adapted for use as log2 by Ulrich Drepper . - * Public domain. - * - * Changed to use fyl2xp1 for values near 1, . - * Adapted for x86-64 by Andreas Jaeger . - */ - -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - - -#ifdef PIC -# define MO(op) op##(%rip) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_log2l) - fldl MO(one) - fldt 8(%rsp) // x : 1 - fxam - fnstsw - fld %st // x : x : 1 - testb $1, %ah - jnz 3f // in case x is NaN or ±Inf -4: fsub %st(2), %st // x-1 : x : 1 - fld %st // x-1 : x-1 : x : 1 - fabs // |x-1| : x-1 : x : 1 - fcompl MO(limit) // x-1 : x : 1 - fnstsw // x-1 : x : 1 - andb $0x45, %ah - jz 2f - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 5f - fabs // log2(1) is +0 in all rounding modes. -5: fstp %st(1) // x-1 : 1 - fyl2xp1 // log(x) - ret - -2: fstp %st(0) // x : 1 - fyl2x // log(x) - ret - -3: testb $4, %ah - jnz 4b // in case x is ±Inf - fstp %st(1) - fstp %st(1) - fadd %st(0) - ret -END (__ieee754_log2l) - - -ENTRY(__log2l_finite) - fldl MO(one) - fldt 8(%rsp) // x : 1 - fld %st // x : x : 1 - fsub %st(2), %st // x-1 : x : 1 - fld %st // x-1 : x-1 : x : 1 - fabs // |x-1| : x-1 : x : 1 - fcompl MO(limit) // x-1 : x : 1 - fnstsw // x-1 : x : 1 - andb $0x45, %ah - jz 2b - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 6f - fabs // log2(1) is +0 in all rounding modes. -6: fstp %st(1) // x-1 : 1 - fyl2xp1 // log(x) - ret -END (__log2l_finite) diff --git a/sysdeps/x86_64/fpu/e_logl.S b/sysdeps/x86_64/fpu/e_logl.S deleted file mode 100644 index 0d3576f48b..0000000000 --- a/sysdeps/x86_64/fpu/e_logl.S +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - * Adapted for x86-64 by Andreas Jaeger . - */ - -#include - - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - /* It is not important that this constant is precise. It is only - a value which is known to be on the safe side for using the - fyl2xp1 instruction. */ - .type limit,@object -limit: .double 0.29 - ASM_SIZE_DIRECTIVE(limit) - - -#ifdef PIC -# define MO(op) op##(%rip) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_logl) - fldln2 // log(2) - fldt 8(%rsp) // x : log(2) - fxam - fnstsw - fld %st // x : x : log(2) - testb $1, %ah - jnz 3f // in case x is NaN or +-Inf - movzwl 8+8(%rsp), %eax - cmpl $0xc000, %eax - jae 6f // x <= -2, avoid overflow from -LDBL_MAX - 1. -4: fsubl MO(one) // x-1 : x : log(2) -6: fld %st // x-1 : x-1 : x : log(2) - fabs // |x-1| : x-1 : x : log(2) - fcompl MO(limit) // x-1 : x : log(2) - fnstsw // x-1 : x : log(2) - andb $0x45, %ah - jz 2f - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 5f - fabs // log(1) is +0 in all rounding modes. -5: fstp %st(1) // x-1 : log(2) - fyl2xp1 // log(x) - ret - -2: fstp %st(0) // x : log(2) - fyl2x // log(x) - ret - -3: testb $4, %ah - jnz 4b // in case x is +-Inf - fstp %st(1) - fstp %st(1) - fadd %st(0) - ret -END (__ieee754_logl) - - -ENTRY(__logl_finite) - fldln2 // log(2) - fldt 8(%rsp) // x : log(2) - fld %st // x : x : log(2) - fsubl MO(one) // x-1 : x : log(2) - fld %st // x-1 : x-1 : x : log(2) - fabs // |x-1| : x-1 : x : log(2) - fcompl MO(limit) // x-1 : x : log(2) - fnstsw // x-1 : x : log(2) - andb $0x45, %ah - jz 2b - fxam - fnstsw - andb $0x45, %ah - cmpb $0x40, %ah - jne 7f - fabs // log(1) is +0 in all rounding modes. -7: fstp %st(1) // x-1 : log(2) - fyl2xp1 // log(x) - ret -END (__logl_finite) diff --git a/sysdeps/x86_64/fpu/e_powl.S b/sysdeps/x86_64/fpu/e_powl.S deleted file mode 100644 index 571c0a18d5..0000000000 --- a/sysdeps/x86_64/fpu/e_powl.S +++ /dev/null @@ -1,433 +0,0 @@ -/* ix87 specific implementation of pow function. - Copyright (C) 1996-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .section .rodata.cst8,"aM",@progbits,8 - - .p2align 3 - .type one,@object -one: .double 1.0 - ASM_SIZE_DIRECTIVE(one) - .type p2,@object -p2: .byte 0, 0, 0, 0, 0, 0, 0x10, 0x40 - ASM_SIZE_DIRECTIVE(p2) - .type p63,@object -p63: .byte 0, 0, 0, 0, 0, 0, 0xe0, 0x43 - ASM_SIZE_DIRECTIVE(p63) - .type p64,@object -p64: .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x43 - ASM_SIZE_DIRECTIVE(p64) - .type p78,@object -p78: .byte 0, 0, 0, 0, 0, 0, 0xd0, 0x44 - ASM_SIZE_DIRECTIVE(p78) - .type pm79,@object -pm79: .byte 0, 0, 0, 0, 0, 0, 0, 0x3b - ASM_SIZE_DIRECTIVE(pm79) - - .section .rodata.cst16,"aM",@progbits,16 - - .p2align 3 - .type infinity,@object -inf_zero: -infinity: - .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f - ASM_SIZE_DIRECTIVE(infinity) - .type zero,@object -zero: .double 0.0 - ASM_SIZE_DIRECTIVE(zero) - .type minf_mzero,@object -minf_mzero: -minfinity: - .byte 0, 0, 0, 0, 0, 0, 0xf0, 0xff -mzero: - .byte 0, 0, 0, 0, 0, 0, 0, 0x80 - ASM_SIZE_DIRECTIVE(minf_mzero) -DEFINE_LDBL_MIN - -#ifdef PIC -# define MO(op) op##(%rip) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_powl) - fldt 24(%rsp) // y - fxam - - - fnstsw - movb %ah, %dl - andb $0x45, %ah - cmpb $0x40, %ah // is y == 0 ? - je 11f - - cmpb $0x05, %ah // is y == ±inf ? - je 12f - - cmpb $0x01, %ah // is y == NaN ? - je 30f - - fldt 8(%rsp) // x : y - - fxam - fnstsw - movb %ah, %dh - andb $0x45, %ah - cmpb $0x40, %ah - je 20f // x is ±0 - - cmpb $0x05, %ah - je 15f // x is ±inf - - cmpb $0x01, %ah - je 31f // x is NaN - - fxch // y : x - - /* fistpll raises invalid exception for |y| >= 1L<<63. */ - fldl MO(p63) // 1L<<63 : y : x - fld %st(1) // y : 1L<<63 : y : x - fabs // |y| : 1L<<63 : y : x - fcomip %st(1), %st // 1L<<63 : y : x - fstp %st(0) // y : x - jnc 2f - - /* First see whether `y' is a natural number. In this case we - can use a more precise algorithm. */ - fld %st // y : y : x - fistpll -8(%rsp) // y : x - fildll -8(%rsp) // int(y) : y : x - fucomip %st(1),%st // y : x - je 9f - - // If y has absolute value at most 0x1p-79, then any finite - // nonzero x will result in 1. Saturate y to those bounds to - // avoid underflow in the calculation of y*log2(x). - fldl MO(pm79) // 0x1p-79 : y : x - fld %st(1) // y : 0x1p-79 : y : x - fabs // |y| : 0x1p-79 : y : x - fcomip %st(1), %st // 0x1p-79 : y : x - fstp %st(0) // y : x - jnc 3f - fstp %st(0) // pop y - fldl MO(pm79) // 0x1p-79 : x - testb $2, %dl - jnz 3f // y > 0 - fchs // -0x1p-79 : x - jmp 3f - -9: /* OK, we have an integer value for y. Unless very small - (we use < 4), use the algorithm for real exponent to avoid - accumulation of errors. */ - fldl MO(p2) // 4 : y : x - fld %st(1) // y : 4 : y : x - fabs // |y| : 4 : y : x - fcomip %st(1), %st // 4 : y : x - fstp %st(0) // y : x - jnc 3f - mov -8(%rsp),%eax - mov -4(%rsp),%edx - orl $0, %edx - fstp %st(0) // x - jns 4f // y >= 0, jump - fdivrl MO(one) // 1/x (now referred to as x) - negl %eax - adcl $0, %edx - negl %edx -4: fldl MO(one) // 1 : x - fxch - - /* If y is even, take the absolute value of x. Otherwise, - ensure all intermediate values that might overflow have the - sign of x. */ - testb $1, %al - jnz 6f - fabs - -6: shrdl $1, %edx, %eax - jnc 5f - fxch - fabs - fmul %st(1) // x : ST*x - fxch -5: fld %st // x : x : ST*x - fabs // |x| : x : ST*x - fmulp // |x|*x : ST*x - shrl $1, %edx - movl %eax, %ecx - orl %edx, %ecx - jnz 6b - fstp %st(0) // ST*x - LDBL_CHECK_FORCE_UFLOW_NONNAN - ret - - /* y is ±NAN */ -30: fldt 8(%rsp) // x : y - fldl MO(one) // 1.0 : x : y - fucomip %st(1),%st // x : y - je 32f -31: /* At least one argument NaN, and result should be NaN. */ - faddp - ret -32: jc 31b - /* pow (1, NaN); check if the NaN signaling. */ - testb $0x40, 31(%rsp) - jz 31b - fstp %st(1) - ret - - .align ALIGNARG(4) -2: // y is a large integer (absolute value at least 1L<<63). - // If y has absolute value at least 1L<<78, then any finite - // nonzero x will result in 0 (underflow), 1 or infinity (overflow). - // Saturate y to those bounds to avoid overflow in the calculation - // of y*log2(x). - fldl MO(p78) // 1L<<78 : y : x - fld %st(1) // y : 1L<<78 : y : x - fabs // |y| : 1L<<78 : y : x - fcomip %st(1), %st // 1L<<78 : y : x - fstp %st(0) // y : x - jc 3f - fstp %st(0) // pop y - fldl MO(p78) // 1L<<78 : x - testb $2, %dl - jz 3f // y > 0 - fchs // -(1L<<78) : x - .align ALIGNARG(4) -3: /* y is a real number. */ - subq $40, %rsp - cfi_adjust_cfa_offset (40) - fstpt 16(%rsp) // x - fstpt (%rsp) // - call HIDDEN_JUMPTARGET (__powl_helper) // - addq $40, %rsp - cfi_adjust_cfa_offset (-40) - ret - - // pow(x,±0) = 1, unless x is sNaN - .align ALIGNARG(4) -11: fstp %st(0) // pop y - fldt 8(%rsp) // x - fxam - fnstsw - andb $0x45, %ah - cmpb $0x01, %ah - je 112f // x is NaN -111: fstp %st(0) - fldl MO(one) - ret - -112: testb $0x40, 15(%rsp) - jnz 111b - fadd %st(0) - ret - - // y == ±inf - .align ALIGNARG(4) -12: fstp %st(0) // pop y - fldl MO(one) // 1 - fldt 8(%rsp) // x : 1 - fabs // abs(x) : 1 - fucompp // < 1, == 1, or > 1 - fnstsw - andb $0x45, %ah - cmpb $0x45, %ah - je 13f // jump if x is NaN - - cmpb $0x40, %ah - je 14f // jump if |x| == 1 - - shlb $1, %ah - xorb %ah, %dl - andl $2, %edx -#ifdef PIC - lea inf_zero(%rip),%rcx - fldl (%rcx, %rdx, 4) -#else - fldl inf_zero(,%rdx, 4) -#endif - ret - - .align ALIGNARG(4) -14: fldl MO(one) - ret - - .align ALIGNARG(4) -13: fldt 8(%rsp) // load x == NaN - fadd %st(0) - ret - - .align ALIGNARG(4) - // x is ±inf -15: fstp %st(0) // y - testb $2, %dh - jz 16f // jump if x == +inf - - // fistpll raises invalid exception for |y| >= 1L<<63, but y - // may be odd unless we know |y| >= 1L<<64. - fldl MO(p64) // 1L<<64 : y - fld %st(1) // y : 1L<<64 : y - fabs // |y| : 1L<<64 : y - fcomip %st(1), %st // 1L<<64 : y - fstp %st(0) // y - jnc 16f - fldl MO(p63) // p63 : y - fxch // y : p63 - fprem // y%p63 : p63 - fstp %st(1) // y%p63 - - // We must find out whether y is an odd integer. - fld %st // y : y - fistpll -8(%rsp) // y - fildll -8(%rsp) // int(y) : y - fucomip %st(1),%st - ffreep %st // - jne 17f - - // OK, the value is an integer, but is it odd? - mov -8(%rsp), %eax - mov -4(%rsp), %edx - andb $1, %al - jz 18f // jump if not odd - // It's an odd integer. - shrl $31, %edx -#ifdef PIC - lea minf_mzero(%rip),%rcx - fldl (%rcx, %rdx, 8) -#else - fldl minf_mzero(,%rdx, 8) -#endif - ret - - .align ALIGNARG(4) -16: fcompl MO(zero) - fnstsw - shrl $5, %eax - andl $8, %eax -#ifdef PIC - lea inf_zero(%rip),%rcx - fldl (%rcx, %rax, 1) -#else - fldl inf_zero(,%rax, 1) -#endif - ret - - .align ALIGNARG(4) -17: shll $30, %edx // sign bit for y in right position -18: shrl $31, %edx -#ifdef PIC - lea inf_zero(%rip),%rcx - fldl (%rcx, %rdx, 8) -#else - fldl inf_zero(,%rdx, 8) -#endif - ret - - .align ALIGNARG(4) - // x is ±0 -20: fstp %st(0) // y - testb $2, %dl - jz 21f // y > 0 - - // x is ±0 and y is < 0. We must find out whether y is an odd integer. - testb $2, %dh - jz 25f - - // fistpll raises invalid exception for |y| >= 1L<<63, but y - // may be odd unless we know |y| >= 1L<<64. - fldl MO(p64) // 1L<<64 : y - fld %st(1) // y : 1L<<64 : y - fabs // |y| : 1L<<64 : y - fcomip %st(1), %st // 1L<<64 : y - fstp %st(0) // y - jnc 25f - fldl MO(p63) // p63 : y - fxch // y : p63 - fprem // y%p63 : p63 - fstp %st(1) // y%p63 - - fld %st // y : y - fistpll -8(%rsp) // y - fildll -8(%rsp) // int(y) : y - fucomip %st(1),%st - ffreep %st // - jne 26f - - // OK, the value is an integer, but is it odd? - mov -8(%rsp),%eax - mov -4(%rsp),%edx - andb $1, %al - jz 27f // jump if not odd - // It's an odd integer. - // Raise divide-by-zero exception and get minus infinity value. - fldl MO(one) - fdivl MO(zero) - fchs - ret - -25: fstp %st(0) -26: -27: // Raise divide-by-zero exception and get infinity value. - fldl MO(one) - fdivl MO(zero) - ret - - .align ALIGNARG(4) - // x is ±0 and y is > 0. We must find out whether y is an odd integer. -21: testb $2, %dh - jz 22f - - // fistpll raises invalid exception for |y| >= 1L<<63, but y - // may be odd unless we know |y| >= 1L<<64. - fldl MO(p64) // 1L<<64 : y - fxch // y : 1L<<64 - fcomi %st(1), %st // y : 1L<<64 - fstp %st(1) // y - jnc 22f - fldl MO(p63) // p63 : y - fxch // y : p63 - fprem // y%p63 : p63 - fstp %st(1) // y%p63 - - fld %st // y : y - fistpll -8(%rsp) // y - fildll -8(%rsp) // int(y) : y - fucomip %st(1),%st - ffreep %st // - jne 23f - - // OK, the value is an integer, but is it odd? - mov -8(%rsp),%eax - mov -4(%rsp),%edx - andb $1, %al - jz 24f // jump if not odd - // It's an odd integer. - fldl MO(mzero) - ret - -22: fstp %st(0) -23: -24: fldl MO(zero) - ret - -END(__ieee754_powl) -strong_alias (__ieee754_powl, __powl_finite) diff --git a/sysdeps/x86_64/fpu/e_remainderl.S b/sysdeps/x86_64/fpu/e_remainderl.S deleted file mode 100644 index 4ee0910912..0000000000 --- a/sysdeps/x86_64/fpu/e_remainderl.S +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - * Adapted for x86-64 by Andreas Jaeger . - */ - -#include - -ENTRY(__ieee754_remainderl) - fldt 24(%rsp) - fldt 8(%rsp) -1: fprem1 - fstsw %ax - testl $0x400,%eax - jnz 1b - fstp %st(1) - ret -END (__ieee754_remainderl) -strong_alias (__ieee754_remainderl, __remainderl_finite) diff --git a/sysdeps/x86_64/fpu/e_scalbl.S b/sysdeps/x86_64/fpu/e_scalbl.S deleted file mode 100644 index 2982dc3b9e..0000000000 --- a/sysdeps/x86_64/fpu/e_scalbl.S +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - * Adapted for x86-64 by Andreas Jaeger - * - * Correct handling of y==-inf - */ - -#include - - .section .rodata - - .align ALIGNARG(4) - .type zero_nan,@object -zero_nan: - .double 0.0 -nan: .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f - .byte 0, 0, 0, 0, 0, 0, 0, 0x80 - .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f - ASM_SIZE_DIRECTIVE(zero_nan) - - -#ifdef PIC -# define MO(op) op##(%rip) -#else -# define MO(op) op -#endif - - .text -ENTRY(__ieee754_scalbl) - fldt 24(%rsp) - fxam - fnstsw - fldt 8(%rsp) - andl $0x4700, %eax - cmpl $0x0700, %eax - je 1f - andl $0x4500, %eax - cmpl $0x0100, %eax - je 2f - fxam - fnstsw - andl $0x4500, %eax - cmpl $0x0100, %eax - je 2f - fld %st(1) - frndint - fcomip %st(2), %st - jne 4f - fscale - fstp %st(1) - ret - - /* y is -inf */ -1: fxam - fnstsw - movl 16(%rsp), %edx - shrl $5, %eax - fstp %st - fstp %st - andl $0x8000, %edx - andl $0x0228, %eax - cmpl $0x0028, %eax - je 4f - andl $8, %eax - shrl $11, %edx - addl %edx, %eax -#ifdef PIC - lea zero_nan(%rip),%rdx - fldl (%rdx,%rax,1) -#else - fldl zero_nan(%rax, 1) -#endif - ret - - /* The result is NaN; raise an exception for sNaN arguments. */ -2: faddp - ret - - /* Return NaN and raise the invalid exception. */ -4: fstp %st - fstp %st - fldz - fdiv %st - ret -END(__ieee754_scalbl) -strong_alias (__ieee754_scalbl, __scalbl_finite) diff --git a/sysdeps/x86_64/fpu/e_sqrt.c b/sysdeps/x86_64/fpu/e_sqrt.c deleted file mode 100644 index 33b59f67c1..0000000000 --- a/sysdeps/x86_64/fpu/e_sqrt.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Square root of floating point number. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef __ieee754_sqrt -double -__ieee754_sqrt (double x) -{ - double res; - - asm ("sqrtsd %1, %0" : "=x" (res) : "xm" (x)); - - return res; -} -strong_alias (__ieee754_sqrt, __sqrt_finite) diff --git a/sysdeps/x86_64/fpu/e_sqrtf.c b/sysdeps/x86_64/fpu/e_sqrtf.c deleted file mode 100644 index 386b903c43..0000000000 --- a/sysdeps/x86_64/fpu/e_sqrtf.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Square root of floating point number. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef __ieee754_sqrtf -float -__ieee754_sqrtf (float x) -{ - float res; - - asm ("sqrtss %1, %0" : "=x" (res) : "xm" (x)); - - return res; -} -strong_alias (__ieee754_sqrtf, __sqrtf_finite) diff --git a/sysdeps/x86_64/fpu/e_sqrtl.c b/sysdeps/x86_64/fpu/e_sqrtl.c deleted file mode 100644 index 90e4e164e5..0000000000 --- a/sysdeps/x86_64/fpu/e_sqrtl.c +++ /dev/null @@ -1 +0,0 @@ -#include "sysdeps/i386/fpu/e_sqrtl.c" diff --git a/sysdeps/x86_64/fpu/fclrexcpt.c b/sysdeps/x86_64/fpu/fclrexcpt.c deleted file mode 100644 index 93bf0d341f..0000000000 --- a/sysdeps/x86_64/fpu/fclrexcpt.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -feclearexcept (int excepts) -{ - fenv_t temp; - unsigned int mxcsr; - - /* Mask out unsupported bits/exceptions. */ - excepts &= FE_ALL_EXCEPT; - - /* Bah, we have to clear selected exceptions. Since there is no - `fldsw' instruction we have to do it the hard way. */ - __asm__ ("fnstenv %0" : "=m" (*&temp)); - - /* Clear the relevant bits. */ - temp.__status_word &= excepts ^ FE_ALL_EXCEPT; - - /* Put the new data in effect. */ - __asm__ ("fldenv %0" : : "m" (*&temp)); - - /* And the same procedure for SSE. */ - __asm__ ("stmxcsr %0" : "=m" (*&mxcsr)); - - /* Clear the relevant bits. */ - mxcsr &= ~excepts; - - /* And put them into effect. */ - __asm__ ("ldmxcsr %0" : : "m" (*&mxcsr)); - - /* Success. */ - return 0; -} -libm_hidden_def (feclearexcept) diff --git a/sysdeps/x86_64/fpu/fedisblxcpt.c b/sysdeps/x86_64/fpu/fedisblxcpt.c deleted file mode 100644 index 512987bd03..0000000000 --- a/sysdeps/x86_64/fpu/fedisblxcpt.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fedisableexcept (int excepts) -{ - unsigned short int new_exc, old_exc; - unsigned int new; - - excepts &= FE_ALL_EXCEPT; - - /* Get the current control word of the x87 FPU. */ - __asm__ ("fstcw %0" : "=m" (*&new_exc)); - - old_exc = (~new_exc) & FE_ALL_EXCEPT; - - new_exc |= excepts; - __asm__ ("fldcw %0" : : "m" (*&new_exc)); - - /* And now the same for the SSE MXCSR register. */ - __asm__ ("stmxcsr %0" : "=m" (*&new)); - - /* The SSE exception masks are shifted by 7 bits. */ - new |= excepts << 7; - __asm__ ("ldmxcsr %0" : : "m" (*&new)); - - return old_exc; -} diff --git a/sysdeps/x86_64/fpu/feenablxcpt.c b/sysdeps/x86_64/fpu/feenablxcpt.c deleted file mode 100644 index 0985d71a00..0000000000 --- a/sysdeps/x86_64/fpu/feenablxcpt.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -feenableexcept (int excepts) -{ - unsigned short int new_exc, old_exc; - unsigned int new; - - excepts &= FE_ALL_EXCEPT; - - /* Get the current control word of the x87 FPU. */ - __asm__ ("fstcw %0" : "=m" (*&new_exc)); - - old_exc = (~new_exc) & FE_ALL_EXCEPT; - - new_exc &= ~excepts; - __asm__ ("fldcw %0" : : "m" (*&new_exc)); - - /* And now the same for the SSE MXCSR register. */ - __asm__ ("stmxcsr %0" : "=m" (*&new)); - - /* The SSE exception masks are shifted by 7 bits. */ - new &= ~(excepts << 7); - __asm__ ("ldmxcsr %0" : : "m" (*&new)); - - return old_exc; -} diff --git a/sysdeps/x86_64/fpu/fegetenv.c b/sysdeps/x86_64/fpu/fegetenv.c deleted file mode 100644 index af7642e990..0000000000 --- a/sysdeps/x86_64/fpu/fegetenv.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fegetenv (fenv_t *envp) -{ - __asm__ ("fnstenv %0\n" - /* fnstenv changes the exception mask, so load back the - stored environment. */ - "fldenv %0\n" - "stmxcsr %1" : "=m" (*envp), "=m" (envp->__mxcsr)); - - /* Success. */ - return 0; -} -libm_hidden_def (__fegetenv) -weak_alias (__fegetenv, fegetenv) -libm_hidden_weak (fegetenv) diff --git a/sysdeps/x86_64/fpu/fegetexcept.c b/sysdeps/x86_64/fpu/fegetexcept.c deleted file mode 100644 index 7dbf40401e..0000000000 --- a/sysdeps/x86_64/fpu/fegetexcept.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Get enabled floating-point exceptions. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fegetexcept (void) -{ - unsigned short int exc; - - /* Get the current control word. */ - __asm__ ("fstcw %0" : "=m" (*&exc)); - - return (~exc) & FE_ALL_EXCEPT; -} diff --git a/sysdeps/x86_64/fpu/fegetmode.c b/sysdeps/x86_64/fpu/fegetmode.c deleted file mode 100644 index 4513f80c85..0000000000 --- a/sysdeps/x86_64/fpu/fegetmode.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Store current floating-point control modes. x86_64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fegetmode (femode_t *modep) -{ - _FPU_GETCW (modep->__control_word); - __asm__ ("stmxcsr %0" : "=m" (modep->__mxcsr)); - return 0; -} diff --git a/sysdeps/x86_64/fpu/fegetround.c b/sysdeps/x86_64/fpu/fegetround.c deleted file mode 100644 index bff3eae102..0000000000 --- a/sysdeps/x86_64/fpu/fegetround.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fegetround (void) -{ - int cw; - /* We only check the x87 FPU unit. The SSE unit should be the same - - and if it's not the same there's no way to signal it. */ - - __asm__ ("fnstcw %0" : "=m" (*&cw)); - - return cw & 0xc00; -} -libm_hidden_def (__fegetround) -weak_alias (__fegetround, fegetround) -libm_hidden_weak (fegetround) diff --git a/sysdeps/x86_64/fpu/feholdexcpt.c b/sysdeps/x86_64/fpu/feholdexcpt.c deleted file mode 100644 index 0a6c836f4f..0000000000 --- a/sysdeps/x86_64/fpu/feholdexcpt.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__feholdexcept (fenv_t *envp) -{ - unsigned int mxcsr; - - /* Store the environment. Recall that fnstenv has a side effect of - masking all exceptions. Then clear all exceptions. */ - __asm__ ("fnstenv %0\n\t" - "stmxcsr %1\n\t" - "fnclex" - : "=m" (*envp), "=m" (envp->__mxcsr)); - - /* Set the SSE MXCSR register. */ - mxcsr = (envp->__mxcsr | 0x1f80) & ~0x3f; - __asm__ ("ldmxcsr %0" : : "m" (*&mxcsr)); - - return 0; -} -libm_hidden_def (__feholdexcept) -weak_alias (__feholdexcept, feholdexcept) -libm_hidden_weak (feholdexcept) diff --git a/sysdeps/x86_64/fpu/fesetenv.c b/sysdeps/x86_64/fpu/fesetenv.c deleted file mode 100644 index 90164bf3d3..0000000000 --- a/sysdeps/x86_64/fpu/fesetenv.c +++ /dev/null @@ -1,114 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - - -/* All exceptions, including the x86-specific "denormal operand" - exception. */ -#define FE_ALL_EXCEPT_X86 (FE_ALL_EXCEPT | __FE_DENORM) - - -int -__fesetenv (const fenv_t *envp) -{ - fenv_t temp; - - /* Install the environment specified by ENVP. But there are a few - values which we do not want to come from the saved environment. - Therefore, we get the current environment and replace the values - we want to use from the environment specified by the parameter. */ - __asm__ ("fnstenv %0\n" - "stmxcsr %1" : "=m" (*&temp), "=m" (*&temp.__mxcsr)); - - if (envp == FE_DFL_ENV) - { - temp.__control_word |= FE_ALL_EXCEPT_X86; - temp.__control_word &= ~FE_TOWARDZERO; - temp.__control_word |= _FPU_EXTENDED; - temp.__status_word &= ~FE_ALL_EXCEPT_X86; - temp.__eip = 0; - temp.__cs_selector = 0; - temp.__opcode = 0; - temp.__data_offset = 0; - temp.__data_selector = 0; - /* Clear SSE exceptions. */ - temp.__mxcsr &= ~FE_ALL_EXCEPT_X86; - /* Set mask for SSE MXCSR. */ - temp.__mxcsr |= (FE_ALL_EXCEPT_X86 << 7); - /* Set rounding to FE_TONEAREST. */ - temp.__mxcsr &= ~ 0x6000; - temp.__mxcsr |= (FE_TONEAREST << 3); - /* Clear the FZ and DAZ bits. */ - temp.__mxcsr &= ~0x8040; - } - else if (envp == FE_NOMASK_ENV) - { - temp.__control_word &= ~(FE_ALL_EXCEPT | FE_TOWARDZERO); - /* Keep the "denormal operand" exception masked. */ - temp.__control_word |= __FE_DENORM; - temp.__control_word |= _FPU_EXTENDED; - temp.__status_word &= ~FE_ALL_EXCEPT_X86; - temp.__eip = 0; - temp.__cs_selector = 0; - temp.__opcode = 0; - temp.__data_offset = 0; - temp.__data_selector = 0; - /* Clear SSE exceptions. */ - temp.__mxcsr &= ~FE_ALL_EXCEPT_X86; - /* Set mask for SSE MXCSR. */ - /* Set rounding to FE_TONEAREST. */ - temp.__mxcsr &= ~ 0x6000; - temp.__mxcsr |= (FE_TONEAREST << 3); - /* Do not mask exceptions. */ - temp.__mxcsr &= ~(FE_ALL_EXCEPT << 7); - /* Keep the "denormal operand" exception masked. */ - temp.__mxcsr |= (__FE_DENORM << 7); - /* Clear the FZ and DAZ bits. */ - temp.__mxcsr &= ~0x8040; - } - else - { - temp.__control_word &= ~(FE_ALL_EXCEPT_X86 - | FE_TOWARDZERO - | _FPU_EXTENDED); - temp.__control_word |= (envp->__control_word - & (FE_ALL_EXCEPT_X86 - | FE_TOWARDZERO - | _FPU_EXTENDED)); - temp.__status_word &= ~FE_ALL_EXCEPT_X86; - temp.__status_word |= envp->__status_word & FE_ALL_EXCEPT_X86; - temp.__eip = envp->__eip; - temp.__cs_selector = envp->__cs_selector; - temp.__opcode = envp->__opcode; - temp.__data_offset = envp->__data_offset; - temp.__data_selector = envp->__data_selector; - temp.__mxcsr = envp->__mxcsr; - } - - __asm__ ("fldenv %0\n" - "ldmxcsr %1" : : "m" (temp), "m" (temp.__mxcsr)); - - /* Success. */ - return 0; -} -libm_hidden_def (__fesetenv) -weak_alias (__fesetenv, fesetenv) -libm_hidden_weak (fesetenv) diff --git a/sysdeps/x86_64/fpu/fesetexcept.c b/sysdeps/x86_64/fpu/fesetexcept.c deleted file mode 100644 index 65683b5697..0000000000 --- a/sysdeps/x86_64/fpu/fesetexcept.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Set given exception flags. x86_64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fesetexcept (int excepts) -{ - unsigned int mxcsr; - - __asm__ ("stmxcsr %0" : "=m" (*&mxcsr)); - mxcsr |= excepts & FE_ALL_EXCEPT; - __asm__ ("ldmxcsr %0" : : "m" (*&mxcsr)); - - return 0; -} diff --git a/sysdeps/x86_64/fpu/fesetmode.c b/sysdeps/x86_64/fpu/fesetmode.c deleted file mode 100644 index 27429f7887..0000000000 --- a/sysdeps/x86_64/fpu/fesetmode.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Install given floating-point control modes. x86_64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* All exceptions, including the x86-specific "denormal operand" - exception. */ -#define FE_ALL_EXCEPT_X86 (FE_ALL_EXCEPT | __FE_DENORM) - -int -fesetmode (const femode_t *modep) -{ - fpu_control_t cw; - unsigned int mxcsr; - __asm__ ("stmxcsr %0" : "=m" (mxcsr)); - /* Preserve SSE exception flags but restore other state in - MXCSR. */ - mxcsr &= FE_ALL_EXCEPT_X86; - if (modep == FE_DFL_MODE) - { - cw = _FPU_DEFAULT; - /* Default MXCSR state has all bits zero except for those - masking exceptions. */ - mxcsr |= FE_ALL_EXCEPT_X86 << 7; - } - else - { - cw = modep->__control_word; - mxcsr |= modep->__mxcsr & ~FE_ALL_EXCEPT_X86; - } - _FPU_SETCW (cw); - __asm__ ("ldmxcsr %0" : : "m" (mxcsr)); - return 0; -} diff --git a/sysdeps/x86_64/fpu/fesetround.c b/sysdeps/x86_64/fpu/fesetround.c deleted file mode 100644 index 939297252a..0000000000 --- a/sysdeps/x86_64/fpu/fesetround.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__fesetround (int round) -{ - unsigned short int cw; - int mxcsr; - - if ((round & ~0xc00) != 0) - /* ROUND is no valid rounding mode. */ - return 1; - - /* First set the x87 FPU. */ - asm ("fnstcw %0" : "=m" (*&cw)); - cw &= ~0xc00; - cw |= round; - asm ("fldcw %0" : : "m" (*&cw)); - - /* And now the MSCSR register for SSE, the precision is at different bit - positions in the different units, we need to shift it 3 bits. */ - asm ("stmxcsr %0" : "=m" (*&mxcsr)); - mxcsr &= ~ 0x6000; - mxcsr |= round << 3; - asm ("ldmxcsr %0" : : "m" (*&mxcsr)); - - return 0; -} -libm_hidden_def (__fesetround) -weak_alias (__fesetround, fesetround) -libm_hidden_weak (fesetround) diff --git a/sysdeps/x86_64/fpu/feupdateenv.c b/sysdeps/x86_64/fpu/feupdateenv.c deleted file mode 100644 index 3bc110ce48..0000000000 --- a/sysdeps/x86_64/fpu/feupdateenv.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -__feupdateenv (const fenv_t *envp) -{ - fexcept_t temp; - unsigned int xtemp; - - /* Save current exceptions. */ - __asm__ ("fnstsw %0\n\tstmxcsr %1" : "=m" (*&temp), "=m" (xtemp)); - temp = (temp | xtemp) & FE_ALL_EXCEPT; - - /* Install new environment. */ - __fesetenv (envp); - - /* Raise the saved exception. Incidently for us the implementation - defined format of the values in objects of type fexcept_t is the - same as the ones specified using the FE_* constants. */ - __feraiseexcept ((int) temp); - - /* Success. */ - return 0; -} - -#include -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feupdateenv, __old_feupdateenv) -compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1); -#endif - -libm_hidden_def (__feupdateenv) -libm_hidden_ver (__feupdateenv, feupdateenv) -versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2); diff --git a/sysdeps/x86_64/fpu/fgetexcptflg.c b/sysdeps/x86_64/fpu/fgetexcptflg.c deleted file mode 100644 index c1a0c2f872..0000000000 --- a/sysdeps/x86_64/fpu/fgetexcptflg.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fegetexceptflag (fexcept_t *flagp, int excepts) -{ - fexcept_t temp; - unsigned int mxscr; - - /* Get the current exceptions for the x87 FPU and SSE unit. */ - __asm__ ("fnstsw %0\n" - "stmxcsr %1" : "=m" (*&temp), "=m" (*&mxscr)); - - *flagp = (temp | mxscr) & FE_ALL_EXCEPT & excepts; - - /* Success. */ - return 0; -} diff --git a/sysdeps/x86_64/fpu/fraiseexcpt.c b/sysdeps/x86_64/fpu/fraiseexcpt.c deleted file mode 100644 index 13eb4af331..0000000000 --- a/sysdeps/x86_64/fpu/fraiseexcpt.c +++ /dev/null @@ -1,121 +0,0 @@ -/* Raise given exceptions. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -__feraiseexcept (int excepts) -{ - /* Raise exceptions represented by EXPECTS. But we must raise only - one signal at a time. It is important that if the overflow/underflow - exception and the inexact exception are given at the same time, - the overflow/underflow exception follows the inexact exception. */ - - /* First: invalid exception. */ - if ((FE_INVALID & excepts) != 0) - { - /* One example of an invalid operation is 0.0 / 0.0. */ - float f = 0.0; - - __asm__ __volatile__ ("divss %0, %0 " : : "x" (f)); - (void) &f; - } - - /* Next: division by zero. */ - if ((FE_DIVBYZERO & excepts) != 0) - { - float f = 1.0; - float g = 0.0; - - __asm__ __volatile__ ("divss %1, %0" : : "x" (f), "x" (g)); - (void) &f; - } - - /* Next: overflow. */ - if ((FE_OVERFLOW & excepts) != 0) - { - /* XXX: Is it ok to only set the x87 FPU? */ - /* There is no way to raise only the overflow flag. Do it the - hard way. */ - fenv_t temp; - - /* Bah, we have to clear selected exceptions. Since there is no - `fldsw' instruction we have to do it the hard way. */ - __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp)); - - /* Set the relevant bits. */ - temp.__status_word |= FE_OVERFLOW; - - /* Put the new data in effect. */ - __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp)); - - /* And raise the exception. */ - __asm__ __volatile__ ("fwait"); - } - - /* Next: underflow. */ - if ((FE_UNDERFLOW & excepts) != 0) - { - /* XXX: Is it ok to only set the x87 FPU? */ - /* There is no way to raise only the underflow flag. Do it the - hard way. */ - fenv_t temp; - - /* Bah, we have to clear selected exceptions. Since there is no - `fldsw' instruction we have to do it the hard way. */ - __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp)); - - /* Set the relevant bits. */ - temp.__status_word |= FE_UNDERFLOW; - - /* Put the new data in effect. */ - __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp)); - - /* And raise the exception. */ - __asm__ __volatile__ ("fwait"); - } - - /* Last: inexact. */ - if ((FE_INEXACT & excepts) != 0) - { - /* XXX: Is it ok to only set the x87 FPU? */ - /* There is no way to raise only the inexact flag. Do it the - hard way. */ - fenv_t temp; - - /* Bah, we have to clear selected exceptions. Since there is no - `fldsw' instruction we have to do it the hard way. */ - __asm__ __volatile__ ("fnstenv %0" : "=m" (*&temp)); - - /* Set the relevant bits. */ - temp.__status_word |= FE_INEXACT; - - /* Put the new data in effect. */ - __asm__ __volatile__ ("fldenv %0" : : "m" (*&temp)); - - /* And raise the exception. */ - __asm__ __volatile__ ("fwait"); - } - - /* Success. */ - return 0; -} -libm_hidden_def (__feraiseexcept) -weak_alias (__feraiseexcept, feraiseexcept) -libm_hidden_weak (feraiseexcept) diff --git a/sysdeps/x86_64/fpu/fsetexcptflg.c b/sysdeps/x86_64/fpu/fsetexcptflg.c deleted file mode 100644 index ffc44dcad5..0000000000 --- a/sysdeps/x86_64/fpu/fsetexcptflg.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -int -fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - fenv_t temp; - unsigned int mxcsr; - - /* XXX: Do we really need to set both the exception in both units? - Shouldn't it be enough to set only the SSE unit? */ - - /* Get the current x87 FPU environment. We have to do this since we - cannot separately set the status word. */ - __asm__ ("fnstenv %0" : "=m" (*&temp)); - - temp.__status_word &= ~(excepts & FE_ALL_EXCEPT); - temp.__status_word |= *flagp & excepts & FE_ALL_EXCEPT; - - /* Store the new status word (along with the rest of the environment. - Possibly new exceptions are set but they won't get executed unless - the next floating-point instruction. */ - __asm__ ("fldenv %0" : : "m" (*&temp)); - - /* And now the same for SSE. */ - __asm__ ("stmxcsr %0" : "=m" (*&mxcsr)); - - mxcsr &= ~(excepts & FE_ALL_EXCEPT); - mxcsr |= *flagp & excepts & FE_ALL_EXCEPT; - - __asm__ ("ldmxcsr %0" : : "m" (*&mxcsr)); - - /* Success. */ - return 0; -} diff --git a/sysdeps/x86_64/fpu/ftestexcept.c b/sysdeps/x86_64/fpu/ftestexcept.c deleted file mode 100644 index 502bdb2c42..0000000000 --- a/sysdeps/x86_64/fpu/ftestexcept.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int -fetestexcept (int excepts) -{ - int temp; - unsigned int mxscr; - - /* Get current exceptions. */ - __asm__ ("fnstsw %0\n" - "stmxcsr %1" : "=m" (*&temp), "=m" (*&mxscr)); - - return (temp | mxscr) & excepts & FE_ALL_EXCEPT; -} -libm_hidden_def (fetestexcept) diff --git a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps deleted file mode 100644 index 61da961a57..0000000000 --- a/sysdeps/x86_64/fpu/libm-test-ulps +++ /dev/null @@ -1,2368 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "acos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "acos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "acos_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "acosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "acosh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "acosh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "acosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "asin": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "asin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "asinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "asinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "asinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "asinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "atan": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan2_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "atan2_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "atan2_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "atan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "atan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "atan_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "atanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "atanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "atanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "atanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "cabs": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "cabs_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cacos": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacos_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "cacos_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "cacos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacos_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 -ildouble: 7 -ldouble: 7 - -Function: Real part of "cacosh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cacosh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "cacosh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cacosh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "cacosh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "carg": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "carg_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "carg_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "carg_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "casin": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "casin_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Real part of "casin_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "casin_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Real part of "casin_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casin_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 -ildouble: 7 -ldouble: 7 - -Function: Real part of "casinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "casinh_downward": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 6 -ldouble: 6 - -Function: Imaginary part of "casinh_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casinh_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "casinh_upward": -double: 5 -float: 7 -idouble: 5 -ifloat: 7 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "casinh_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "catan_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "catan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catan_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_towardzero": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cbrt_upward": -double: 5 -float: 1 -idouble: 5 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccos_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ccos_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccos_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ccos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccos_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccosh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccosh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ccosh_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ccosh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ccosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ccosh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cexp_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "cexp_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cexp_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cexp_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog10": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "clog10_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "clog10_downward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "clog10_towardzero": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog10_upward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 8 -ldouble: 8 - -Function: Imaginary part of "clog10_upward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Real part of "clog_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "clog_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog_towardzero": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "clog_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: Real part of "clog_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "clog_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "cos": -ildouble: 1 -ldouble: 1 - -Function: "cos_downward": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "cos_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "cos_upward": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "cos_vlen16": -float: 1 - -Function: "cos_vlen2": -double: 2 - -Function: "cos_vlen4": -double: 2 -float: 1 - -Function: "cos_vlen4_avx2": -double: 2 - -Function: "cos_vlen8": -double: 1 -float: 1 - -Function: "cos_vlen8_avx2": -float: 1 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 3 - -Function: "cosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 3 - -Function: Real part of "cpow": -double: 2 -float: 5 -idouble: 2 -ifloat: 5 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "cpow": -float: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "cpow_downward": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "cpow_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "cpow_towardzero": -double: 4 -float: 8 -idouble: 4 -ifloat: 8 -ildouble: 7 -ldouble: 7 - -Function: Imaginary part of "cpow_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "cpow_upward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cpow_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csin_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csin_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csin_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csin_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csin_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csinh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_towardzero": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csinh_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "csinh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "csqrt": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csqrt_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "csqrt_downward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Real part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "csqrt_towardzero": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Real part of "csqrt_upward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "csqrt_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "ctan": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ctan_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctan_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctan_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctan_upward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctan_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "ctanh_downward": -double: 4 -float: 2 -idouble: 4 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctanh_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "ctanh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: Real part of "ctanh_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: Imaginary part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 3 -ldouble: 3 - -Function: "erf": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erf_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "erfc": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "erfc_downward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 -ildouble: 4 -ldouble: 4 - -Function: "erfc_towardzero": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "erfc_upward": -double: 5 -float: 6 -idouble: 5 -ifloat: 6 -ildouble: 5 -ldouble: 5 - -Function: "exp": -ildouble: 1 -ldouble: 1 - -Function: "exp10": -double: 2 -idouble: 2 -ildouble: 1 -ldouble: 1 - -Function: "exp10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp2": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp2_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "exp_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp_vlen16": -float: 1 - -Function: "exp_vlen2": -double: 1 - -Function: "exp_vlen4": -double: 1 -float: 1 - -Function: "exp_vlen4_avx2": -double: 1 - -Function: "exp_vlen8": -double: 1 -float: 1 - -Function: "exp_vlen8_avx2": -float: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "expm1_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "expm1_towardzero": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "gamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "gamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "gamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "gamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: "hypot": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_downward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_towardzero": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "hypot_upward": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j0_downward": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "j0_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "j0_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "j1_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "j1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "j1_upward": -double: 3 -float: 5 -idouble: 3 -ifloat: 5 -ildouble: 3 -ldouble: 3 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "jn_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: "jn_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: "jn_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: "lgamma": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 -ildouble: 4 -ldouble: 4 - -Function: "lgamma_downward": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "lgamma_towardzero": -double: 5 -float: 4 -idouble: 5 -ifloat: 4 -ildouble: 7 -ldouble: 7 - -Function: "lgamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 6 -ldouble: 6 - -Function: "log": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log10_downward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -ildouble: 2 -ldouble: 2 - -Function: "log10_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log10_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log1p": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "log1p_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "log1p_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "log1p_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "log2": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "log2_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "log2_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log2_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "log_downward": -float: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log_towardzero": -float: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "log_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log_vlen16": -float: 3 - -Function: "log_vlen2": -double: 1 - -Function: "log_vlen4": -double: 1 -float: 3 - -Function: "log_vlen4_avx2": -double: 1 - -Function: "log_vlen8": -double: 1 -float: 3 - -Function: "log_vlen8_avx2": -float: 2 - -Function: "pow": -float: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "pow10": -double: 2 -idouble: 2 -ildouble: 1 -ldouble: 1 - -Function: "pow10_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow10_towardzero": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow10_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "pow_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "pow_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "pow_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: "pow_vlen16": -float: 3 - -Function: "pow_vlen2": -double: 1 - -Function: "pow_vlen4": -double: 1 -float: 3 - -Function: "pow_vlen4_avx2": -double: 1 - -Function: "pow_vlen8": -double: 1 -float: 3 - -Function: "pow_vlen8_avx2": -float: 3 - -Function: "sin": -ildouble: 1 -ldouble: 1 - -Function: "sin_downward": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "sin_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "sin_upward": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "sin_vlen16": -float: 1 - -Function: "sin_vlen2": -double: 2 - -Function: "sin_vlen4": -double: 2 -float: 1 - -Function: "sin_vlen4_avx2": -double: 2 - -Function: "sin_vlen8": -double: 2 -float: 1 - -Function: "sin_vlen8_avx2": -float: 1 - -Function: "sincos": -ildouble: 1 -ldouble: 1 - -Function: "sincos_downward": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "sincos_towardzero": -double: 1 -idouble: 1 -ildouble: 2 -ldouble: 2 - -Function: "sincos_upward": -double: 1 -idouble: 1 -ildouble: 3 -ldouble: 3 - -Function: "sincos_vlen16": -float: 1 - -Function: "sincos_vlen2": -double: 2 - -Function: "sincos_vlen4": -double: 2 -float: 1 - -Function: "sincos_vlen4_avx2": -double: 2 - -Function: "sincos_vlen8": -double: 1 -float: 1 - -Function: "sincos_vlen8_avx2": -float: 1 - -Function: "sinh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "sinh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "sinh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 4 -ldouble: 4 - -Function: "sinh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "tan": -float: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "tan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "tan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: "tan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "tanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "tanh_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "tanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "tanh_upward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "tgamma": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_downward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_towardzero": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: "tgamma_upward": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -ildouble: 5 -ldouble: 5 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "y0_downward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "y0_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "y0_upward": -double: 3 -float: 5 -idouble: 3 -ifloat: 5 -ildouble: 3 -ldouble: 3 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "y1_downward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "y1_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: "y1_upward": -double: 7 -float: 2 -idouble: 7 -ifloat: 2 -ildouble: 7 -ldouble: 7 - -Function: "yn": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 4 -ldouble: 4 - -Function: "yn_downward": -double: 3 -float: 4 -idouble: 3 -ifloat: 4 -ildouble: 5 -ldouble: 5 - -Function: "yn_towardzero": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -ildouble: 5 -ldouble: 5 - -Function: "yn_upward": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -# end of automatic generation diff --git a/sysdeps/x86_64/fpu/libm-test-ulps-name b/sysdeps/x86_64/fpu/libm-test-ulps-name deleted file mode 100644 index 1c09346681..0000000000 --- a/sysdeps/x86_64/fpu/libm-test-ulps-name +++ /dev/null @@ -1 +0,0 @@ -x86_64 diff --git a/sysdeps/x86_64/fpu/math-tests-arch.h b/sysdeps/x86_64/fpu/math-tests-arch.h deleted file mode 100644 index 9278e3440b..0000000000 --- a/sysdeps/x86_64/fpu/math-tests-arch.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Runtime architecture check for math tests. x86_64 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if defined REQUIRE_AVX - -# define INIT_ARCH_EXT -# define CHECK_ARCH_EXT \ - do \ - { \ - if (!HAS_ARCH_FEATURE (AVX_Usable)) return; \ - } \ - while (0) - -#elif defined REQUIRE_AVX2 - -# define INIT_ARCH_EXT -# define CHECK_ARCH_EXT \ - do \ - { \ - if (!HAS_ARCH_FEATURE (AVX2_Usable)) return; \ - } \ - while (0) - -#elif defined REQUIRE_AVX512F - -# define INIT_ARCH_EXT -# define CHECK_ARCH_EXT \ - do \ - { \ - if (!HAS_ARCH_FEATURE (AVX512F_Usable)) return; \ - } \ - while (0) - -#else -# include -#endif diff --git a/sysdeps/x86_64/fpu/math_ldbl.h b/sysdeps/x86_64/fpu/math_ldbl.h deleted file mode 100644 index 6c5bc13455..0000000000 --- a/sysdeps/x86_64/fpu/math_ldbl.h +++ /dev/null @@ -1,100 +0,0 @@ -/* Manipulation of the bit representation of 'long double' quantities. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _MATH_LDBL_H_ -#define _MATH_LDBL_H_ 1 - -#include - -/* A union which permits us to convert between a long double and - three 32 bit ints. */ - -typedef union -{ - long double value; - struct - { - uint32_t lsw; - uint32_t msw; - int sign_exponent:16; - unsigned int empty1:16; - unsigned int empty0:32; - } parts; -} ieee_long_double_shape_type; - -/* Get three 32 bit ints from a double. */ - -#define GET_LDOUBLE_WORDS(exp,ix0,ix1,d) \ -do { \ - ieee_long_double_shape_type ew_u; \ - ew_u.value = (d); \ - (exp) = ew_u.parts.sign_exponent; \ - (ix0) = ew_u.parts.msw; \ - (ix1) = ew_u.parts.lsw; \ -} while (0) - -/* Set a double from two 32 bit ints. */ - -#define SET_LDOUBLE_WORDS(d,exp,ix0,ix1) \ -do { \ - ieee_long_double_shape_type iw_u; \ - iw_u.parts.sign_exponent = (exp); \ - iw_u.parts.msw = (ix0); \ - iw_u.parts.lsw = (ix1); \ - (d) = iw_u.value; \ -} while (0) - -/* Get the more significant 32 bits of a long double mantissa. */ - -#define GET_LDOUBLE_MSW(v,d) \ -do { \ - ieee_long_double_shape_type sh_u; \ - sh_u.value = (d); \ - (v) = sh_u.parts.msw; \ -} while (0) - -/* Set the more significant 32 bits of a long double mantissa from an int. */ - -#define SET_LDOUBLE_MSW(d,v) \ -do { \ - ieee_long_double_shape_type sh_u; \ - sh_u.value = (d); \ - sh_u.parts.msw = (v); \ - (d) = sh_u.value; \ -} while (0) - -/* Get int from the exponent of a long double. */ - -#define GET_LDOUBLE_EXP(exp,d) \ -do { \ - ieee_long_double_shape_type ge_u; \ - ge_u.value = (d); \ - (exp) = ge_u.parts.sign_exponent; \ -} while (0) - -/* Set exponent of a long double from an int. */ - -#define SET_LDOUBLE_EXP(d,exp) \ -do { \ - ieee_long_double_shape_type se_u; \ - se_u.value = (d); \ - se_u.parts.sign_exponent = (exp); \ - (d) = se_u.value; \ -} while (0) - -#endif /* math_ldbl.h */ diff --git a/sysdeps/x86_64/fpu/math_private.h b/sysdeps/x86_64/fpu/math_private.h deleted file mode 100644 index 027a6a3a4d..0000000000 --- a/sysdeps/x86_64/fpu/math_private.h +++ /dev/null @@ -1,133 +0,0 @@ -#ifndef X86_64_MATH_PRIVATE_H -#define X86_64_MATH_PRIVATE_H 1 - -/* We can do a few things better on x86-64. */ - -#if defined __AVX__ || defined SSE2AVX -# define MOVD "vmovd" -# define MOVQ "vmovq" -#else -# define MOVD "movd" -# define MOVQ "movq" -#endif - -/* Direct movement of float into integer register. */ -#define EXTRACT_WORDS64(i, d) \ - do { \ - int64_t i_; \ - asm (MOVQ " %1, %0" : "=rm" (i_) : "x" ((double) (d))); \ - (i) = i_; \ - } while (0) - -/* And the reverse. */ -#define INSERT_WORDS64(d, i) \ - do { \ - int64_t i_ = i; \ - double d__; \ - asm (MOVQ " %1, %0" : "=x" (d__) : "rm" (i_)); \ - d = d__; \ - } while (0) - -/* Direct movement of float into integer register. */ -#define GET_FLOAT_WORD(i, d) \ - do { \ - int i_; \ - asm (MOVD " %1, %0" : "=rm" (i_) : "x" ((float) (d))); \ - (i) = i_; \ - } while (0) - -/* And the reverse. */ -#define SET_FLOAT_WORD(f, i) \ - do { \ - int i_ = i; \ - float f__; \ - asm (MOVD " %1, %0" : "=x" (f__) : "rm" (i_)); \ - f = f__; \ - } while (0) - -#include -#include_next - -extern __always_inline double -__ieee754_sqrt (double d) -{ - double res; -#if defined __AVX__ || defined SSE2AVX - asm ("vsqrtsd %1, %0, %0" : "=x" (res) : "xm" (d)); -#else - asm ("sqrtsd %1, %0" : "=x" (res) : "xm" (d)); -#endif - return res; -} - -extern __always_inline float -__ieee754_sqrtf (float d) -{ - float res; -#if defined __AVX__ || defined SSE2AVX - asm ("vsqrtss %1, %0, %0" : "=x" (res) : "xm" (d)); -#else - asm ("sqrtss %1, %0" : "=x" (res) : "xm" (d)); -#endif - return res; -} - -extern __always_inline long double -__ieee754_sqrtl (long double d) -{ - long double res; - asm ("fsqrt" : "=t" (res) : "0" (d)); - return res; -} - -#ifdef __SSE4_1__ -extern __always_inline double -__rint (double d) -{ - double res; -# if defined __AVX__ || defined SSE2AVX - asm ("vroundsd $4, %1, %0, %0" : "=x" (res) : "xm" (d)); -# else - asm ("roundsd $4, %1, %0" : "=x" (res) : "xm" (d)); -# endif - return res; -} - -extern __always_inline float -__rintf (float d) -{ - float res; -# if defined __AVX__ || defined SSE2AVX - asm ("vroundss $4, %1, %0, %0" : "=x" (res) : "xm" (d)); -# else - asm ("roundss $4, %1, %0" : "=x" (res) : "xm" (d)); -# endif - return res; -} - -extern __always_inline double -__floor (double d) -{ - double res; -# if defined __AVX__ || defined SSE2AVX - asm ("vroundsd $1, %1, %0, %0" : "=x" (res) : "xm" (d)); -# else - asm ("roundsd $1, %1, %0" : "=x" (res) : "xm" (d)); -# endif - return res; -} - -extern __always_inline float -__floorf (float d) -{ - float res; -# if defined __AVX__ || defined SSE2AVX - asm ("vroundss $1, %1, %0, %0" : "=x" (res) : "xm" (d)); -# else - asm ("roundss $1, %1, %0" : "=x" (res) : "xm" (d)); -# endif - return res; -} -#endif /* __SSE4_1__ */ - -#endif /* X86_64_MATH_PRIVATE_H */ diff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile deleted file mode 100644 index 34542155aa..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/Makefile +++ /dev/null @@ -1,70 +0,0 @@ -ifeq ($(subdir),math) -libm-sysdep_routines += s_floor-c s_ceil-c s_floorf-c s_ceilf-c \ - s_rint-c s_rintf-c s_nearbyint-c s_nearbyintf-c - -libm-sysdep_routines += e_exp-fma4 e_log-fma4 e_pow-fma4 s_atan-fma4 \ - e_asin-fma4 e_atan2-fma4 s_sin-fma4 s_tan-fma4 \ - mplog-fma4 mpa-fma4 slowexp-fma4 slowpow-fma4 \ - sincos32-fma4 doasin-fma4 dosincos-fma4 \ - halfulp-fma4 mpexp-fma4 \ - mpatan2-fma4 mpatan-fma4 mpsqrt-fma4 mptan-fma4 - -CFLAGS-doasin-fma4.c = -mfma4 -CFLAGS-dosincos-fma4.c = -mfma4 -CFLAGS-e_asin-fma4.c = -mfma4 -CFLAGS-e_atan2-fma4.c = -mfma4 -CFLAGS-e_exp-fma4.c = -mfma4 -CFLAGS-e_log-fma4.c = -mfma4 -CFLAGS-e_pow-fma4.c = -mfma4 $(config-cflags-nofma) -CFLAGS-halfulp-fma4.c = -mfma4 -CFLAGS-mpa-fma4.c = -mfma4 -CFLAGS-mpatan-fma4.c = -mfma4 -CFLAGS-mpatan2-fma4.c = -mfma4 -CFLAGS-mpexp-fma4.c = -mfma4 -CFLAGS-mplog-fma4.c = -mfma4 -CFLAGS-mpsqrt-fma4.c = -mfma4 -CFLAGS-mptan-fma4.c = -mfma4 -CFLAGS-s_atan-fma4.c = -mfma4 -CFLAGS-sincos32-fma4.c = -mfma4 -CFLAGS-slowexp-fma4.c = -mfma4 -CFLAGS-slowpow-fma4.c = -mfma4 -CFLAGS-s_sin-fma4.c = -mfma4 -CFLAGS-s_tan-fma4.c = -mfma4 - -libm-sysdep_routines += e_exp-avx e_log-avx s_atan-avx \ - e_atan2-avx s_sin-avx s_tan-avx \ - mplog-avx mpa-avx slowexp-avx \ - mpexp-avx - -CFLAGS-e_atan2-avx.c = -msse2avx -DSSE2AVX -CFLAGS-e_exp-avx.c = -msse2avx -DSSE2AVX -CFLAGS-e_log-avx.c = -msse2avx -DSSE2AVX -CFLAGS-mpa-avx.c = -msse2avx -DSSE2AVX -CFLAGS-mpexp-avx.c = -msse2avx -DSSE2AVX -CFLAGS-mplog-avx.c = -msse2avx -DSSE2AVX -CFLAGS-s_atan-avx.c = -msse2avx -DSSE2AVX -CFLAGS-s_sin-avx.c = -msse2avx -DSSE2AVX -CFLAGS-slowexp-avx.c = -msse2avx -DSSE2AVX -CFLAGS-s_tan-avx.c = -msse2avx -DSSE2AVX -endif - -ifeq ($(subdir),mathvec) -libmvec-sysdep_routines += svml_d_cos2_core_sse4 svml_d_cos4_core_avx2 \ - svml_d_cos8_core_avx512 svml_d_sin2_core_sse4 \ - svml_d_sin4_core_avx2 svml_d_sin8_core_avx512 \ - svml_d_log2_core_sse4 svml_d_log4_core_avx2 \ - svml_d_log8_core_avx512 svml_d_sincos2_core_sse4 \ - svml_d_sincos4_core_avx2 svml_d_sincos8_core_avx512 \ - svml_s_cosf4_core_sse4 svml_s_cosf8_core_avx2 \ - svml_s_cosf16_core_avx512 svml_s_sinf4_core_sse4 \ - svml_s_sinf8_core_avx2 svml_s_sinf16_core_avx512 \ - svml_s_logf4_core_sse4 svml_s_logf8_core_avx2 \ - svml_s_logf16_core_avx512 svml_d_exp2_core_sse4 \ - svml_d_exp4_core_avx2 svml_d_exp8_core_avx512 \ - svml_s_expf4_core_sse4 svml_s_expf8_core_avx2 \ - svml_s_expf16_core_avx512 svml_d_pow2_core_sse4 \ - svml_d_pow4_core_avx2 svml_d_pow8_core_avx512 \ - svml_s_powf4_core_sse4 svml_s_powf8_core_avx2 \ - svml_s_powf16_core_avx512 svml_s_sincosf4_core_sse4 \ - svml_s_sincosf8_core_avx2 svml_s_sincosf16_core_avx512 -endif diff --git a/sysdeps/x86_64/fpu/multiarch/doasin-fma4.c b/sysdeps/x86_64/fpu/multiarch/doasin-fma4.c deleted file mode 100644 index 53eb419472..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/doasin-fma4.c +++ /dev/null @@ -1,4 +0,0 @@ -#define __doasin __doasin_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/dosincos-fma4.c b/sysdeps/x86_64/fpu/multiarch/dosincos-fma4.c deleted file mode 100644 index 1578b2fce0..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/dosincos-fma4.c +++ /dev/null @@ -1,6 +0,0 @@ -#define __docos __docos_fma4 -#define __dubcos __dubcos_fma4 -#define __dubsin __dubsin_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/e_asin-fma4.c b/sysdeps/x86_64/fpu/multiarch/e_asin-fma4.c deleted file mode 100644 index 2657c31f49..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/e_asin-fma4.c +++ /dev/null @@ -1,11 +0,0 @@ -#define __ieee754_acos __ieee754_acos_fma4 -#define __ieee754_asin __ieee754_asin_fma4 -#define __cos32 __cos32_fma4 -#define __doasin __doasin_fma4 -#define __docos __docos_fma4 -#define __dubcos __dubcos_fma4 -#define __dubsin __dubsin_fma4 -#define __sin32 __sin32_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/e_asin.c b/sysdeps/x86_64/fpu/multiarch/e_asin.c deleted file mode 100644 index 111a5b99bd..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/e_asin.c +++ /dev/null @@ -1,26 +0,0 @@ -#include -#include -#include - -extern double __ieee754_acos_sse2 (double); -extern double __ieee754_asin_sse2 (double); -extern double __ieee754_acos_fma4 (double); -extern double __ieee754_asin_fma4 (double); - -libm_ifunc (__ieee754_acos, - HAS_ARCH_FEATURE (FMA4_Usable) - ? __ieee754_acos_fma4 - : __ieee754_acos_sse2); -strong_alias (__ieee754_acos, __acos_finite) - -libm_ifunc (__ieee754_asin, - HAS_ARCH_FEATURE (FMA4_Usable) - ? __ieee754_asin_fma4 - : __ieee754_asin_sse2); -strong_alias (__ieee754_asin, __asin_finite) - -#define __ieee754_acos __ieee754_acos_sse2 -#define __ieee754_asin __ieee754_asin_sse2 - - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/e_atan2-avx.c b/sysdeps/x86_64/fpu/multiarch/e_atan2-avx.c deleted file mode 100644 index 3012afac37..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/e_atan2-avx.c +++ /dev/null @@ -1,9 +0,0 @@ -#define __ieee754_atan2 __ieee754_atan2_avx -#define __add __add_avx -#define __dbl_mp __dbl_mp_avx -#define __dvd __dvd_avx -#define __mul __mul_avx -#define __sub __sub_avx -#define SECTION __attribute__ ((section (".text.avx"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/e_atan2-fma4.c b/sysdeps/x86_64/fpu/multiarch/e_atan2-fma4.c deleted file mode 100644 index f4e986293e..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/e_atan2-fma4.c +++ /dev/null @@ -1,10 +0,0 @@ -#define __ieee754_atan2 __ieee754_atan2_fma4 -#define __add __add_fma4 -#define __dbl_mp __dbl_mp_fma4 -#define __dvd __dvd_fma4 -#define __mpatan2 __mpatan2_fma4 -#define __mul __mul_fma4 -#define __sub __sub_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/e_atan2.c b/sysdeps/x86_64/fpu/multiarch/e_atan2.c deleted file mode 100644 index 9ca3c02a44..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/e_atan2.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include -#include - -extern double __ieee754_atan2_sse2 (double, double); -extern double __ieee754_atan2_avx (double, double); -extern double __ieee754_atan2_fma4 (double, double); - -libm_ifunc (__ieee754_atan2, - HAS_ARCH_FEATURE (FMA4_Usable) ? __ieee754_atan2_fma4 - : (HAS_ARCH_FEATURE (AVX_Usable) - ? __ieee754_atan2_avx : __ieee754_atan2_sse2)); -strong_alias (__ieee754_atan2, __atan2_finite) - -#define __ieee754_atan2 __ieee754_atan2_sse2 - - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/e_exp-avx.c b/sysdeps/x86_64/fpu/multiarch/e_exp-avx.c deleted file mode 100644 index ee5dd6d2dc..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/e_exp-avx.c +++ /dev/null @@ -1,6 +0,0 @@ -#define __ieee754_exp __ieee754_exp_avx -#define __exp1 __exp1_avx -#define __slowexp __slowexp_avx -#define SECTION __attribute__ ((section (".text.avx"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c b/sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c deleted file mode 100644 index ae6eb67603..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c +++ /dev/null @@ -1,6 +0,0 @@ -#define __ieee754_exp __ieee754_exp_fma4 -#define __exp1 __exp1_fma4 -#define __slowexp __slowexp_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/e_exp.c b/sysdeps/x86_64/fpu/multiarch/e_exp.c deleted file mode 100644 index b7d7b5ff27..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/e_exp.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include -#include - -extern double __ieee754_exp_sse2 (double); -extern double __ieee754_exp_avx (double); -extern double __ieee754_exp_fma4 (double); - -libm_ifunc (__ieee754_exp, - HAS_ARCH_FEATURE (FMA4_Usable) ? __ieee754_exp_fma4 - : (HAS_ARCH_FEATURE (AVX_Usable) - ? __ieee754_exp_avx : __ieee754_exp_sse2)); -strong_alias (__ieee754_exp, __exp_finite) - -#define __ieee754_exp __ieee754_exp_sse2 - - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/e_log-avx.c b/sysdeps/x86_64/fpu/multiarch/e_log-avx.c deleted file mode 100644 index c669019bc2..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/e_log-avx.c +++ /dev/null @@ -1,8 +0,0 @@ -#define __ieee754_log __ieee754_log_avx -#define __mplog __mplog_avx -#define __add __add_avx -#define __dbl_mp __dbl_mp_avx -#define __sub __sub_avx -#define SECTION __attribute__ ((section (".text.avx"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/e_log-fma4.c b/sysdeps/x86_64/fpu/multiarch/e_log-fma4.c deleted file mode 100644 index a2346cc618..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/e_log-fma4.c +++ /dev/null @@ -1,8 +0,0 @@ -#define __ieee754_log __ieee754_log_fma4 -#define __mplog __mplog_fma4 -#define __add __add_fma4 -#define __dbl_mp __dbl_mp_fma4 -#define __sub __sub_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/e_log.c b/sysdeps/x86_64/fpu/multiarch/e_log.c deleted file mode 100644 index cf9533d6c0..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/e_log.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include -#include - -extern double __ieee754_log_sse2 (double); -extern double __ieee754_log_avx (double); -extern double __ieee754_log_fma4 (double); - -libm_ifunc (__ieee754_log, - HAS_ARCH_FEATURE (FMA4_Usable) ? __ieee754_log_fma4 - : (HAS_ARCH_FEATURE (AVX_Usable) - ? __ieee754_log_avx : __ieee754_log_sse2)); -strong_alias (__ieee754_log, __log_finite) - -#define __ieee754_log __ieee754_log_sse2 - - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c b/sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c deleted file mode 100644 index 5b3ea8e103..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c +++ /dev/null @@ -1,6 +0,0 @@ -#define __ieee754_pow __ieee754_pow_fma4 -#define __exp1 __exp1_fma4 -#define __slowpow __slowpow_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/e_pow.c b/sysdeps/x86_64/fpu/multiarch/e_pow.c deleted file mode 100644 index a5c5d89c3e..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/e_pow.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include -#include - -extern double __ieee754_pow_sse2 (double, double); -extern double __ieee754_pow_fma4 (double, double); - -libm_ifunc (__ieee754_pow, - HAS_ARCH_FEATURE (FMA4_Usable) - ? __ieee754_pow_fma4 - : __ieee754_pow_sse2); -strong_alias (__ieee754_pow, __pow_finite) - -#define __ieee754_pow __ieee754_pow_sse2 - - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/halfulp-fma4.c b/sysdeps/x86_64/fpu/multiarch/halfulp-fma4.c deleted file mode 100644 index a00c17c016..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/halfulp-fma4.c +++ /dev/null @@ -1,4 +0,0 @@ -#define __halfulp __halfulp_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/mpa-avx.c b/sysdeps/x86_64/fpu/multiarch/mpa-avx.c deleted file mode 100644 index 366b0b7134..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/mpa-avx.c +++ /dev/null @@ -1,14 +0,0 @@ -#define __add __add_avx -#define __mul __mul_avx -#define __sqr __sqr_avx -#define __sub __sub_avx -#define __dbl_mp __dbl_mp_avx -#define __dvd __dvd_avx - -#define NO___CPY 1 -#define NO___MP_DBL 1 -#define NO___ACR 1 -#define NO__CONST 1 -#define SECTION __attribute__ ((section (".text.avx"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/mpa-fma4.c b/sysdeps/x86_64/fpu/multiarch/mpa-fma4.c deleted file mode 100644 index a4a759407e..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/mpa-fma4.c +++ /dev/null @@ -1,14 +0,0 @@ -#define __add __add_fma4 -#define __mul __mul_fma4 -#define __sqr __sqr_fma4 -#define __sub __sub_fma4 -#define __dbl_mp __dbl_mp_fma4 -#define __dvd __dvd_fma4 - -#define NO___CPY 1 -#define NO___MP_DBL 1 -#define NO___ACR 1 -#define NO__CONST 1 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/mpatan-fma4.c b/sysdeps/x86_64/fpu/multiarch/mpatan-fma4.c deleted file mode 100644 index fbd3bd49a2..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/mpatan-fma4.c +++ /dev/null @@ -1,10 +0,0 @@ -#define __mpatan __mpatan_fma4 -#define __add __add_fma4 -#define __dvd __dvd_fma4 -#define __mpsqrt __mpsqrt_fma4 -#define __mul __mul_fma4 -#define __sub __sub_fma4 -#define AVOID_MPATAN_H 1 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/mpatan2-fma4.c b/sysdeps/x86_64/fpu/multiarch/mpatan2-fma4.c deleted file mode 100644 index e6e44d49b0..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/mpatan2-fma4.c +++ /dev/null @@ -1,9 +0,0 @@ -#define __mpatan2 __mpatan2_fma4 -#define __add __add_fma4 -#define __dvd __dvd_fma4 -#define __mpatan __mpatan_fma4 -#define __mpsqrt __mpsqrt_fma4 -#define __mul __mul_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/mpexp-avx.c b/sysdeps/x86_64/fpu/multiarch/mpexp-avx.c deleted file mode 100644 index 87f29c96c9..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/mpexp-avx.c +++ /dev/null @@ -1,9 +0,0 @@ -#define __mpexp __mpexp_avx -#define __add __add_avx -#define __dbl_mp __dbl_mp_avx -#define __dvd __dvd_avx -#define __mul __mul_avx -#define AVOID_MPEXP_H 1 -#define SECTION __attribute__ ((section (".text.avx"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/mpexp-fma4.c b/sysdeps/x86_64/fpu/multiarch/mpexp-fma4.c deleted file mode 100644 index 07ca6e9ad0..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/mpexp-fma4.c +++ /dev/null @@ -1,9 +0,0 @@ -#define __mpexp __mpexp_fma4 -#define __add __add_fma4 -#define __dbl_mp __dbl_mp_fma4 -#define __dvd __dvd_fma4 -#define __mul __mul_fma4 -#define AVOID_MPEXP_H 1 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/mplog-avx.c b/sysdeps/x86_64/fpu/multiarch/mplog-avx.c deleted file mode 100644 index fd783d9a67..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/mplog-avx.c +++ /dev/null @@ -1,8 +0,0 @@ -#define __mplog __mplog_avx -#define __add __add_avx -#define __mpexp __mpexp_avx -#define __mul __mul_avx -#define __sub __sub_avx -#define SECTION __attribute__ ((section (".text.avx"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/mplog-fma4.c b/sysdeps/x86_64/fpu/multiarch/mplog-fma4.c deleted file mode 100644 index b4733118d7..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/mplog-fma4.c +++ /dev/null @@ -1,8 +0,0 @@ -#define __mplog __mplog_fma4 -#define __add __add_fma4 -#define __mpexp __mpexp_fma4 -#define __mul __mul_fma4 -#define __sub __sub_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/mpsqrt-fma4.c b/sysdeps/x86_64/fpu/multiarch/mpsqrt-fma4.c deleted file mode 100644 index f8a1ba2d92..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/mpsqrt-fma4.c +++ /dev/null @@ -1,8 +0,0 @@ -#define __mpsqrt __mpsqrt_fma4 -#define __dbl_mp __dbl_mp_fma4 -#define __mul __mul_fma4 -#define __sub __sub_fma4 -#define AVOID_MPSQRT_H 1 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/mptan-fma4.c b/sysdeps/x86_64/fpu/multiarch/mptan-fma4.c deleted file mode 100644 index fb4a9d48ca..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/mptan-fma4.c +++ /dev/null @@ -1,7 +0,0 @@ -#define __mptan __mptan_fma4 -#define __c32 __c32_fma4 -#define __dvd __dvd_fma4 -#define __mpranred __mpranred_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_atan-avx.c b/sysdeps/x86_64/fpu/multiarch/s_atan-avx.c deleted file mode 100644 index b5cb9c3a75..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_atan-avx.c +++ /dev/null @@ -1,8 +0,0 @@ -#define atan __atan_avx -#define __add __add_avx -#define __dbl_mp __dbl_mp_avx -#define __mul __mul_avx -#define __sub __sub_avx -#define SECTION __attribute__ ((section (".text.avx"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_atan-fma4.c b/sysdeps/x86_64/fpu/multiarch/s_atan-fma4.c deleted file mode 100644 index 9e83e6cdab..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_atan-fma4.c +++ /dev/null @@ -1,9 +0,0 @@ -#define atan __atan_fma4 -#define __add __add_fma4 -#define __dbl_mp __dbl_mp_fma4 -#define __mpatan __mpatan_fma4 -#define __mul __mul_fma4 -#define __sub __sub_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_atan.c b/sysdeps/x86_64/fpu/multiarch/s_atan.c deleted file mode 100644 index 742e95cb96..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_atan.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include - -extern double __atan_sse2 (double); -extern double __atan_avx (double); -extern double __atan_fma4 (double); - -libm_ifunc (atan, (HAS_ARCH_FEATURE (FMA4_Usable) ? __atan_fma4 : - HAS_ARCH_FEATURE (AVX_Usable) - ? __atan_avx : __atan_sse2)); - -#define atan __atan_sse2 - - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_ceil-c.c b/sysdeps/x86_64/fpu/multiarch/s_ceil-c.c deleted file mode 100644 index 6a5ea3ff27..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_ceil-c.c +++ /dev/null @@ -1,2 +0,0 @@ -#define __ceil __ceil_c -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_ceil.S b/sysdeps/x86_64/fpu/multiarch/s_ceil.S deleted file mode 100644 index f8eef43eff..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_ceil.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -ENTRY(__ceil) - .type __ceil, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq __ceil_sse41(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jnz 2f - leaq __ceil_c(%rip), %rax -2: ret -END(__ceil) -weak_alias (__ceil, ceil) - - -ENTRY(__ceil_sse41) - roundsd $10, %xmm0, %xmm0 - ret -END(__ceil_sse41) diff --git a/sysdeps/x86_64/fpu/multiarch/s_ceilf-c.c b/sysdeps/x86_64/fpu/multiarch/s_ceilf-c.c deleted file mode 100644 index 229a6273b2..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_ceilf-c.c +++ /dev/null @@ -1,2 +0,0 @@ -#define __ceilf __ceilf_c -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_ceilf.S b/sysdeps/x86_64/fpu/multiarch/s_ceilf.S deleted file mode 100644 index 076f10f0f0..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_ceilf.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -ENTRY(__ceilf) - .type __ceilf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq __ceilf_sse41(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jnz 2f - leaq __ceilf_c(%rip), %rax -2: ret -END(__ceilf) -weak_alias (__ceilf, ceilf) - - -ENTRY(__ceilf_sse41) - roundss $10, %xmm0, %xmm0 - ret -END(__ceilf_sse41) diff --git a/sysdeps/x86_64/fpu/multiarch/s_floor-c.c b/sysdeps/x86_64/fpu/multiarch/s_floor-c.c deleted file mode 100644 index 68733b69ef..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_floor-c.c +++ /dev/null @@ -1,3 +0,0 @@ -#undef __floor -#define __floor __floor_c -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_floor.S b/sysdeps/x86_64/fpu/multiarch/s_floor.S deleted file mode 100644 index f519ab24f4..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_floor.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -ENTRY(__floor) - .type __floor, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq __floor_sse41(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jnz 2f - leaq __floor_c(%rip), %rax -2: ret -END(__floor) -weak_alias (__floor, floor) - - -ENTRY(__floor_sse41) - roundsd $9, %xmm0, %xmm0 - ret -END(__floor_sse41) diff --git a/sysdeps/x86_64/fpu/multiarch/s_floorf-c.c b/sysdeps/x86_64/fpu/multiarch/s_floorf-c.c deleted file mode 100644 index 2386362328..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_floorf-c.c +++ /dev/null @@ -1,3 +0,0 @@ -#undef __floorf -#define __floorf __floorf_c -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_floorf.S b/sysdeps/x86_64/fpu/multiarch/s_floorf.S deleted file mode 100644 index 8613f73acc..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_floorf.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -ENTRY(__floorf) - .type __floorf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq __floorf_sse41(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jnz 2f - leaq __floorf_c(%rip), %rax -2: ret -END(__floorf) -weak_alias (__floorf, floorf) - - -ENTRY(__floorf_sse41) - roundss $9, %xmm0, %xmm0 - ret -END(__floorf_sse41) diff --git a/sysdeps/x86_64/fpu/multiarch/s_fma.c b/sysdeps/x86_64/fpu/multiarch/s_fma.c deleted file mode 100644 index 3ac4fed660..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_fma.c +++ /dev/null @@ -1,50 +0,0 @@ -/* FMA version of fma. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -extern double __fma_sse2 (double x, double y, double z) attribute_hidden; - - -static double -__fma_fma3 (double x, double y, double z) -{ - asm ("vfmadd213sd %3, %2, %0" : "=x" (x) : "0" (x), "x" (y), "xm" (z)); - return x; -} - - -static double -__fma_fma4 (double x, double y, double z) -{ - asm ("vfmaddsd %3, %2, %1, %0" : "=x" (x) : "x" (x), "x" (y), "x" (z)); - return x; -} - - -libm_ifunc (__fma, HAS_ARCH_FEATURE (FMA_Usable) - ? __fma_fma3 : (HAS_ARCH_FEATURE (FMA4_Usable) - ? __fma_fma4 : __fma_sse2)); -weak_alias (__fma, fma) - -#define __fma __fma_sse2 - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_fmaf.c b/sysdeps/x86_64/fpu/multiarch/s_fmaf.c deleted file mode 100644 index 1ae227c1d4..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_fmaf.c +++ /dev/null @@ -1,49 +0,0 @@ -/* FMA version of fmaf. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -extern float __fmaf_sse2 (float x, float y, float z) attribute_hidden; - - -static float -__fmaf_fma3 (float x, float y, float z) -{ - asm ("vfmadd213ss %3, %2, %0" : "=x" (x) : "0" (x), "x" (y), "xm" (z)); - return x; -} - - -static float -__fmaf_fma4 (float x, float y, float z) -{ - asm ("vfmaddss %3, %2, %1, %0" : "=x" (x) : "x" (x), "x" (y), "x" (z)); - return x; -} - - -libm_ifunc (__fmaf, HAS_ARCH_FEATURE (FMA_Usable) - ? __fmaf_fma3 : (HAS_ARCH_FEATURE (FMA4_Usable) - ? __fmaf_fma4 : __fmaf_sse2)); -weak_alias (__fmaf, fmaf) - -#define __fmaf __fmaf_sse2 - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_nearbyint-c.c b/sysdeps/x86_64/fpu/multiarch/s_nearbyint-c.c deleted file mode 100644 index f897a2a6a6..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_nearbyint-c.c +++ /dev/null @@ -1,3 +0,0 @@ -#undef __nearbyint -#define __nearbyint __nearbyint_c -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_nearbyint.S b/sysdeps/x86_64/fpu/multiarch/s_nearbyint.S deleted file mode 100644 index 5a734f6027..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_nearbyint.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -ENTRY(__nearbyint) - .type __nearbyint, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq __nearbyint_sse41(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jnz 2f - leaq __nearbyint_c(%rip), %rax -2: ret -END(__nearbyint) -weak_alias (__nearbyint, nearbyint) - - -ENTRY(__nearbyint_sse41) - roundsd $0xc, %xmm0, %xmm0 - ret -END(__nearbyint_sse41) diff --git a/sysdeps/x86_64/fpu/multiarch/s_nearbyintf-c.c b/sysdeps/x86_64/fpu/multiarch/s_nearbyintf-c.c deleted file mode 100644 index aa7768233b..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_nearbyintf-c.c +++ /dev/null @@ -1,3 +0,0 @@ -#undef __nearbyintf -#define __nearbyintf __nearbyintf_c -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S b/sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S deleted file mode 100644 index ad79fd6021..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -ENTRY(__nearbyintf) - .type __nearbyintf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq __nearbyintf_sse41(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jnz 2f - leaq __nearbyintf_c(%rip), %rax -2: ret -END(__nearbyintf) -weak_alias (__nearbyintf, nearbyintf) - - -ENTRY(__nearbyintf_sse41) - roundss $0xc, %xmm0, %xmm0 - ret -END(__nearbyintf_sse41) diff --git a/sysdeps/x86_64/fpu/multiarch/s_rint-c.c b/sysdeps/x86_64/fpu/multiarch/s_rint-c.c deleted file mode 100644 index 162a630ff9..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_rint-c.c +++ /dev/null @@ -1,3 +0,0 @@ -#undef __rint -#define __rint __rint_c -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_rint.S b/sysdeps/x86_64/fpu/multiarch/s_rint.S deleted file mode 100644 index 4f628a93a4..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_rint.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -ENTRY(__rint) - .type __rint, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq __rint_sse41(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jnz 2f - leaq __rint_c(%rip), %rax -2: ret -END(__rint) -weak_alias (__rint, rint) - - -ENTRY(__rint_sse41) - roundsd $4, %xmm0, %xmm0 - ret -END(__rint_sse41) diff --git a/sysdeps/x86_64/fpu/multiarch/s_rintf-c.c b/sysdeps/x86_64/fpu/multiarch/s_rintf-c.c deleted file mode 100644 index 8505249f34..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_rintf-c.c +++ /dev/null @@ -1,3 +0,0 @@ -#undef __rintf -#define __rintf __rintf_c -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_rintf.S b/sysdeps/x86_64/fpu/multiarch/s_rintf.S deleted file mode 100644 index dee4ad794c..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_rintf.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -ENTRY(__rintf) - .type __rintf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq __rintf_sse41(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jnz 2f - leaq __rintf_c(%rip), %rax -2: ret -END(__rintf) -weak_alias (__rintf, rintf) - - -ENTRY(__rintf_sse41) - roundss $4, %xmm0, %xmm0 - ret -END(__rintf_sse41) diff --git a/sysdeps/x86_64/fpu/multiarch/s_sin-avx.c b/sysdeps/x86_64/fpu/multiarch/s_sin-avx.c deleted file mode 100644 index e1c6de0259..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_sin-avx.c +++ /dev/null @@ -1,5 +0,0 @@ -#define __cos __cos_avx -#define __sin __sin_avx -#define SECTION __attribute__ ((section (".text.avx"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_sin-fma4.c b/sysdeps/x86_64/fpu/multiarch/s_sin-fma4.c deleted file mode 100644 index 4c35739dc9..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_sin-fma4.c +++ /dev/null @@ -1,11 +0,0 @@ -#define __cos __cos_fma4 -#define __sin __sin_fma4 -#define __docos __docos_fma4 -#define __dubsin __dubsin_fma4 -#define __mpcos __mpcos_fma4 -#define __mpcos1 __mpcos1_fma4 -#define __mpsin __mpsin_fma4 -#define __mpsin1 __mpsin1_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_sin.c b/sysdeps/x86_64/fpu/multiarch/s_sin.c deleted file mode 100644 index 8ffd3e7125..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_sin.c +++ /dev/null @@ -1,26 +0,0 @@ -#include -#include -#undef NAN - -extern double __cos_sse2 (double); -extern double __sin_sse2 (double); -extern double __cos_avx (double); -extern double __sin_avx (double); -extern double __cos_fma4 (double); -extern double __sin_fma4 (double); - -libm_ifunc (__cos, (HAS_ARCH_FEATURE (FMA4_Usable) ? __cos_fma4 : - HAS_ARCH_FEATURE (AVX_Usable) - ? __cos_avx : __cos_sse2)); -weak_alias (__cos, cos) - -libm_ifunc (__sin, (HAS_ARCH_FEATURE (FMA4_Usable) ? __sin_fma4 : - HAS_ARCH_FEATURE (AVX_Usable) - ? __sin_avx : __sin_sse2)); -weak_alias (__sin, sin) - -#define __cos __cos_sse2 -#define __sin __sin_sse2 - - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_tan-avx.c b/sysdeps/x86_64/fpu/multiarch/s_tan-avx.c deleted file mode 100644 index 53de5d3c98..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_tan-avx.c +++ /dev/null @@ -1,6 +0,0 @@ -#define tan __tan_avx -#define __dbl_mp __dbl_mp_avx -#define __sub __sub_avx -#define SECTION __attribute__ ((section (".text.avx"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_tan-fma4.c b/sysdeps/x86_64/fpu/multiarch/s_tan-fma4.c deleted file mode 100644 index a805440b46..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_tan-fma4.c +++ /dev/null @@ -1,8 +0,0 @@ -#define tan __tan_fma4 -#define __dbl_mp __dbl_mp_fma4 -#define __mpranred __mpranred_fma4 -#define __mptan __mptan_fma4 -#define __sub __sub_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/s_tan.c b/sysdeps/x86_64/fpu/multiarch/s_tan.c deleted file mode 100644 index 25f3bca07e..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/s_tan.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include - -extern double __tan_sse2 (double); -extern double __tan_avx (double); -extern double __tan_fma4 (double); - -libm_ifunc (tan, (HAS_ARCH_FEATURE (FMA4_Usable) ? __tan_fma4 : - HAS_ARCH_FEATURE (AVX_Usable) - ? __tan_avx : __tan_sse2)); - -#define tan __tan_sse2 - - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/sincos32-fma4.c b/sysdeps/x86_64/fpu/multiarch/sincos32-fma4.c deleted file mode 100644 index ebbfa18cca..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/sincos32-fma4.c +++ /dev/null @@ -1,15 +0,0 @@ -#define __cos32 __cos32_fma4 -#define __sin32 __sin32_fma4 -#define __c32 __c32_fma4 -#define __mpsin __mpsin_fma4 -#define __mpsin1 __mpsin1_fma4 -#define __mpcos __mpcos_fma4 -#define __mpcos1 __mpcos1_fma4 -#define __mpranred __mpranred_fma4 -#define __add __add_fma4 -#define __dbl_mp __dbl_mp_fma4 -#define __mul __mul_fma4 -#define __sub __sub_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/slowexp-avx.c b/sysdeps/x86_64/fpu/multiarch/slowexp-avx.c deleted file mode 100644 index d01c6d71a4..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/slowexp-avx.c +++ /dev/null @@ -1,9 +0,0 @@ -#define __slowexp __slowexp_avx -#define __add __add_avx -#define __dbl_mp __dbl_mp_avx -#define __mpexp __mpexp_avx -#define __mul __mul_avx -#define __sub __sub_avx -#define SECTION __attribute__ ((section (".text.avx"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/slowexp-fma4.c b/sysdeps/x86_64/fpu/multiarch/slowexp-fma4.c deleted file mode 100644 index 3bcde84233..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/slowexp-fma4.c +++ /dev/null @@ -1,9 +0,0 @@ -#define __slowexp __slowexp_fma4 -#define __add __add_fma4 -#define __dbl_mp __dbl_mp_fma4 -#define __mpexp __mpexp_fma4 -#define __mul __mul_fma4 -#define __sub __sub_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/slowpow-fma4.c b/sysdeps/x86_64/fpu/multiarch/slowpow-fma4.c deleted file mode 100644 index 69d69823bb..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/slowpow-fma4.c +++ /dev/null @@ -1,11 +0,0 @@ -#define __slowpow __slowpow_fma4 -#define __add __add_fma4 -#define __dbl_mp __dbl_mp_fma4 -#define __mpexp __mpexp_fma4 -#define __mplog __mplog_fma4 -#define __mul __mul_fma4 -#define __sub __sub_fma4 -#define __halfulp __halfulp_fma4 -#define SECTION __attribute__ ((section (".text.fma4"))) - -#include diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.S deleted file mode 100644 index b209492442..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized cos, vector length is 2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVbN2v_cos) - .type _ZGVbN2v_cos, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVbN2v_cos_sse4(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jz 2f - ret -2: leaq _ZGVbN2v_cos_sse2(%rip), %rax - ret -END (_ZGVbN2v_cos) -libmvec_hidden_def (_ZGVbN2v_cos) - -#define _ZGVbN2v_cos _ZGVbN2v_cos_sse2 -#include "../svml_d_cos2_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core_sse4.S deleted file mode 100644 index 858dc6532f..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core_sse4.S +++ /dev/null @@ -1,223 +0,0 @@ -/* Function cos vectorized with SSE4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_trig_data.h" - - .text -ENTRY (_ZGVbN2v_cos_sse4) -/* ALGORITHM DESCRIPTION: - - ( low accuracy ( < 4ulp ) or enhanced performance - ( half of correct mantissa ) implementation ) - - Argument representation: - arg + Pi/2 = (N*Pi + R) - - Result calculation: - cos(arg) = sin(arg+Pi/2) = sin(N*Pi + R) = (-1)^N * sin(R) - sin(R) is approximated by corresponding polynomial - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $320, %rsp - movaps %xmm0, %xmm3 - movq __svml_d_trig_data@GOTPCREL(%rip), %rax - movups __dHalfPI(%rax), %xmm2 - -/* ARGUMENT RANGE REDUCTION: - Add Pi/2 to argument: X' = X+Pi/2 - */ - addpd %xmm3, %xmm2 - movups __dInvPI(%rax), %xmm5 - movups __dAbsMask(%rax), %xmm4 - -/* Get absolute argument value: X' = |X'| */ - andps %xmm2, %xmm4 - -/* Y = X'*InvPi + RS : right shifter add */ - mulpd %xmm5, %xmm2 - -/* Check for large arguments path */ - cmpnlepd __dRangeVal(%rax), %xmm4 - movups __dRShifter(%rax), %xmm6 - addpd %xmm6, %xmm2 - movmskpd %xmm4, %ecx - -/* N = Y - RS : right shifter sub */ - movaps %xmm2, %xmm1 - -/* SignRes = Y<<63 : shift LSB to MSB place for result sign */ - psllq $63, %xmm2 - subpd %xmm6, %xmm1 - -/* N = N - 0.5 */ - subpd __dOneHalf(%rax), %xmm1 - movups __dPI1(%rax), %xmm7 - -/* R = X - N*Pi1 */ - mulpd %xmm1, %xmm7 - movups __dPI2(%rax), %xmm4 - -/* R = R - N*Pi2 */ - mulpd %xmm1, %xmm4 - subpd %xmm7, %xmm0 - movups __dPI3(%rax), %xmm5 - -/* R = R - N*Pi3 */ - mulpd %xmm1, %xmm5 - subpd %xmm4, %xmm0 - -/* R = R - N*Pi4 */ - movups __dPI4(%rax), %xmm6 - mulpd %xmm6, %xmm1 - subpd %xmm5, %xmm0 - subpd %xmm1, %xmm0 - -/* POLYNOMIAL APPROXIMATION: R2 = R*R */ - movaps %xmm0, %xmm4 - mulpd %xmm0, %xmm4 - movups __dC7(%rax), %xmm1 - mulpd %xmm4, %xmm1 - addpd __dC6(%rax), %xmm1 - mulpd %xmm4, %xmm1 - addpd __dC5(%rax), %xmm1 - mulpd %xmm4, %xmm1 - addpd __dC4(%rax), %xmm1 - -/* Poly = C3+R2*(C4+R2*(C5+R2*(C6+R2*C7))) */ - mulpd %xmm4, %xmm1 - addpd __dC3(%rax), %xmm1 - -/* Poly = R+R*(R2*(C1+R2*(C2+R2*Poly))) */ - mulpd %xmm4, %xmm1 - addpd __dC2(%rax), %xmm1 - mulpd %xmm4, %xmm1 - addpd __dC1(%rax), %xmm1 - mulpd %xmm1, %xmm4 - mulpd %xmm0, %xmm4 - addpd %xmm4, %xmm0 - -/* RECONSTRUCTION: - Final sign setting: Res = Poly^SignRes */ - xorps %xmm2, %xmm0 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - movups %xmm3, 192(%rsp) - movups %xmm0, 256(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - movups %xmm8, 112(%rsp) - movups %xmm9, 96(%rsp) - movups %xmm10, 80(%rsp) - movups %xmm11, 64(%rsp) - movups %xmm12, 48(%rsp) - movups %xmm13, 32(%rsp) - movups %xmm14, 16(%rsp) - movups %xmm15, (%rsp) - movq %rsi, 136(%rsp) - movq %rdi, 128(%rsp) - movq %r12, 168(%rsp) - cfi_offset_rel_rsp (12, 168) - movb %dl, %r12b - movq %r13, 160(%rsp) - cfi_offset_rel_rsp (13, 160) - movl %ecx, %r13d - movq %r14, 152(%rsp) - cfi_offset_rel_rsp (14, 152) - movl %eax, %r14d - movq %r15, 144(%rsp) - cfi_offset_rel_rsp (15, 144) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - movups 112(%rsp), %xmm8 - movups 96(%rsp), %xmm9 - movups 80(%rsp), %xmm10 - movups 64(%rsp), %xmm11 - movups 48(%rsp), %xmm12 - movups 32(%rsp), %xmm13 - movups 16(%rsp), %xmm14 - movups (%rsp), %xmm15 - movq 136(%rsp), %rsi - movq 128(%rsp), %rdi - movq 168(%rsp), %r12 - cfi_restore (%r12) - movq 160(%rsp), %r13 - cfi_restore (%r13) - movq 152(%rsp), %r14 - cfi_restore (%r14) - movq 144(%rsp), %r15 - cfi_restore (%r15) - movups 256(%rsp), %xmm0 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - movsd 200(%rsp,%r15), %xmm0 - - call JUMPTARGET(cos) - - movsd %xmm0, 264(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - movsd 192(%rsp,%r15), %xmm0 - - call JUMPTARGET(cos) - - movsd %xmm0, 256(%rsp,%r15) - jmp .LBL_1_7 - -END (_ZGVbN2v_cos_sse4) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.S deleted file mode 100644 index ff382e9c6c..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized cos, vector length is 4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVdN4v_cos) - .type _ZGVdN4v_cos, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVdN4v_cos_avx2(%rip), %rax - HAS_ARCH_FEATURE (AVX2_Usable) - jz 2f - ret -2: leaq _ZGVdN4v_cos_sse_wrapper(%rip), %rax - ret -END (_ZGVdN4v_cos) -libmvec_hidden_def (_ZGVdN4v_cos) - -#define _ZGVdN4v_cos _ZGVdN4v_cos_sse_wrapper -#include "../svml_d_cos4_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core_avx2.S deleted file mode 100644 index 4b6d09743b..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core_avx2.S +++ /dev/null @@ -1,207 +0,0 @@ -/* Function cos vectorized with AVX2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_trig_data.h" - - .text -ENTRY (_ZGVdN4v_cos_avx2) - -/* ALGORITHM DESCRIPTION: - - ( low accuracy ( < 4ulp ) or enhanced performance - ( half of correct mantissa ) implementation ) - - Argument representation: - arg + Pi/2 = (N*Pi + R) - - Result calculation: - cos(arg) = sin(arg+Pi/2) = sin(N*Pi + R) = (-1)^N * sin(R) - sin(R) is approximated by corresponding polynomial - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $448, %rsp - movq __svml_d_trig_data@GOTPCREL(%rip), %rax - vmovapd %ymm0, %ymm1 - vmovupd __dInvPI(%rax), %ymm4 - vmovupd __dRShifter(%rax), %ymm5 - -/* - ARGUMENT RANGE REDUCTION: - Add Pi/2 to argument: X' = X+Pi/2 - */ - vaddpd __dHalfPI(%rax), %ymm1, %ymm7 - -/* Get absolute argument value: X' = |X'| */ - vandpd __dAbsMask(%rax), %ymm7, %ymm2 - -/* Y = X'*InvPi + RS : right shifter add */ - vfmadd213pd %ymm5, %ymm4, %ymm7 - vmovupd __dC7(%rax), %ymm4 - -/* Check for large arguments path */ - vcmpnle_uqpd __dRangeVal(%rax), %ymm2, %ymm3 - -/* N = Y - RS : right shifter sub */ - vsubpd %ymm5, %ymm7, %ymm6 - vmovupd __dPI1_FMA(%rax), %ymm2 - -/* SignRes = Y<<63 : shift LSB to MSB place for result sign */ - vpsllq $63, %ymm7, %ymm7 - -/* N = N - 0.5 */ - vsubpd __dOneHalf(%rax), %ymm6, %ymm0 - vmovmskpd %ymm3, %ecx - -/* R = X - N*Pi1 */ - vmovapd %ymm1, %ymm3 - vfnmadd231pd %ymm0, %ymm2, %ymm3 - -/* R = R - N*Pi2 */ - vfnmadd231pd __dPI2_FMA(%rax), %ymm0, %ymm3 - -/* R = R - N*Pi3 */ - vfnmadd132pd __dPI3_FMA(%rax), %ymm3, %ymm0 - -/* POLYNOMIAL APPROXIMATION: R2 = R*R */ - vmulpd %ymm0, %ymm0, %ymm5 - vfmadd213pd __dC6(%rax), %ymm5, %ymm4 - vfmadd213pd __dC5(%rax), %ymm5, %ymm4 - vfmadd213pd __dC4(%rax), %ymm5, %ymm4 - -/* Poly = C3+R2*(C4+R2*(C5+R2*(C6+R2*C7))) */ - vfmadd213pd __dC3(%rax), %ymm5, %ymm4 - -/* Poly = R+R*(R2*(C1+R2*(C2+R2*Poly))) */ - vfmadd213pd __dC2(%rax), %ymm5, %ymm4 - vfmadd213pd __dC1(%rax), %ymm5, %ymm4 - vmulpd %ymm5, %ymm4, %ymm6 - vfmadd213pd %ymm0, %ymm0, %ymm6 - -/* - RECONSTRUCTION: - Final sign setting: Res = Poly^SignRes */ - vxorpd %ymm7, %ymm6, %ymm0 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovupd %ymm1, 320(%rsp) - vmovupd %ymm0, 384(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - vmovups %ymm8, 224(%rsp) - vmovups %ymm9, 192(%rsp) - vmovups %ymm10, 160(%rsp) - vmovups %ymm11, 128(%rsp) - vmovups %ymm12, 96(%rsp) - vmovups %ymm13, 64(%rsp) - vmovups %ymm14, 32(%rsp) - vmovups %ymm15, (%rsp) - movq %rsi, 264(%rsp) - movq %rdi, 256(%rsp) - movq %r12, 296(%rsp) - cfi_offset_rel_rsp (12, 296) - movb %dl, %r12b - movq %r13, 288(%rsp) - cfi_offset_rel_rsp (13, 288) - movl %ecx, %r13d - movq %r14, 280(%rsp) - cfi_offset_rel_rsp (14, 280) - movl %eax, %r14d - movq %r15, 272(%rsp) - cfi_offset_rel_rsp (15, 272) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - vmovups 224(%rsp), %ymm8 - vmovups 192(%rsp), %ymm9 - vmovups 160(%rsp), %ymm10 - vmovups 128(%rsp), %ymm11 - vmovups 96(%rsp), %ymm12 - vmovups 64(%rsp), %ymm13 - vmovups 32(%rsp), %ymm14 - vmovups (%rsp), %ymm15 - vmovupd 384(%rsp), %ymm0 - movq 264(%rsp), %rsi - movq 256(%rsp), %rdi - movq 296(%rsp), %r12 - cfi_restore (%r12) - movq 288(%rsp), %r13 - cfi_restore (%r13) - movq 280(%rsp), %r14 - cfi_restore (%r14) - movq 272(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 328(%rsp,%r15), %xmm0 - vzeroupper - - call JUMPTARGET(cos) - - vmovsd %xmm0, 392(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 320(%rsp,%r15), %xmm0 - vzeroupper - - call JUMPTARGET(cos) - - vmovsd %xmm0, 384(%rsp,%r15) - jmp .LBL_1_7 - -END (_ZGVdN4v_cos_avx2) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.S deleted file mode 100644 index 46d35a25d2..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of vectorized cos, vector length is 8. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVeN8v_cos) - .type _ZGVeN8v_cos, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX -1: leaq _ZGVeN8v_cos_skx(%rip), %rax - HAS_ARCH_FEATURE (AVX512DQ_Usable) - jnz 2f - leaq _ZGVeN8v_cos_knl(%rip), %rax - HAS_ARCH_FEATURE (AVX512F_Usable) - jnz 2f - leaq _ZGVeN8v_cos_avx2_wrapper(%rip), %rax -2: ret -END (_ZGVeN8v_cos) - -#define _ZGVeN8v_cos _ZGVeN8v_cos_avx2_wrapper -#include "../svml_d_cos8_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core_avx512.S deleted file mode 100644 index e7af83c6d5..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core_avx512.S +++ /dev/null @@ -1,463 +0,0 @@ -/* Function cos vectorized with AVX-512, KNL and SKX versions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_trig_data.h" -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVeN8v_cos_knl) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN4v_cos -#else -/* - ALGORITHM DESCRIPTION: - - ( low accuracy ( < 4ulp ) or enhanced performance - ( half of correct mantissa ) implementation ) - - Argument representation: - arg + Pi/2 = (N*Pi + R) - - Result calculation: - cos(arg) = sin(arg+Pi/2) = sin(N*Pi + R) = (-1)^N * sin(R) - sin(R) is approximated by corresponding polynomial - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_d_trig_data@GOTPCREL(%rip), %rax - -/* R = X - N*Pi1 */ - vmovaps %zmm0, %zmm7 - -/* Check for large arguments path */ - movq $-1, %rcx - -/* - ARGUMENT RANGE REDUCTION: - Add Pi/2 to argument: X' = X+Pi/2 - */ - vaddpd __dHalfPI(%rax), %zmm0, %zmm5 - vmovups __dInvPI(%rax), %zmm3 - -/* Get absolute argument value: X' = |X'| */ - vpandq __dAbsMask(%rax), %zmm5, %zmm1 - -/* Y = X'*InvPi + RS : right shifter add */ - vfmadd213pd __dRShifter(%rax), %zmm3, %zmm5 - vmovups __dPI1_FMA(%rax), %zmm6 - -/* N = Y - RS : right shifter sub */ - vsubpd __dRShifter(%rax), %zmm5, %zmm4 - -/* SignRes = Y<<63 : shift LSB to MSB place for result sign */ - vpsllq $63, %zmm5, %zmm12 - vmovups __dC7(%rax), %zmm8 - -/* N = N - 0.5 */ - vsubpd __dOneHalf(%rax), %zmm4, %zmm10 - vcmppd $22, __dRangeVal(%rax), %zmm1, %k1 - vpbroadcastq %rcx, %zmm2{%k1}{z} - vfnmadd231pd %zmm10, %zmm6, %zmm7 - vptestmq %zmm2, %zmm2, %k0 - -/* R = R - N*Pi2 */ - vfnmadd231pd __dPI2_FMA(%rax), %zmm10, %zmm7 - kmovw %k0, %ecx - movzbl %cl, %ecx - -/* R = R - N*Pi3 */ - vfnmadd132pd __dPI3_FMA(%rax), %zmm7, %zmm10 - -/* - POLYNOMIAL APPROXIMATION: - R2 = R*R - */ - vmulpd %zmm10, %zmm10, %zmm9 - vfmadd213pd __dC6(%rax), %zmm9, %zmm8 - vfmadd213pd __dC5(%rax), %zmm9, %zmm8 - vfmadd213pd __dC4(%rax), %zmm9, %zmm8 - -/* Poly = C3+R2*(C4+R2*(C5+R2*(C6+R2*C7))) */ - vfmadd213pd __dC3(%rax), %zmm9, %zmm8 - -/* Poly = R+R*(R2*(C1+R2*(C2+R2*Poly))) */ - vfmadd213pd __dC2(%rax), %zmm9, %zmm8 - vfmadd213pd __dC1(%rax), %zmm9, %zmm8 - vmulpd %zmm9, %zmm8, %zmm11 - vfmadd213pd %zmm10, %zmm10, %zmm11 - -/* - RECONSTRUCTION: - Final sign setting: Res = Poly^SignRes - */ - vpxorq %zmm12, %zmm11, %zmm1 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm1, 1216(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - kmovw %k4, 1048(%rsp) - xorl %eax, %eax - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - addb $1, %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - kmovw 1048(%rsp), %k4 - movq 1064(%rsp), %rsi - kmovw 1040(%rsp), %k5 - movq 1056(%rsp), %rdi - kmovw 1032(%rsp), %k6 - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - vmovups 1216(%rsp), %zmm1 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1160(%rsp,%r15), %xmm0 - call JUMPTARGET(cos) - vmovsd %xmm0, 1224(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1152(%rsp,%r15), %xmm0 - call JUMPTARGET(cos) - vmovsd %xmm0, 1216(%rsp,%r15) - jmp .LBL_1_7 -#endif -END (_ZGVeN8v_cos_knl) - -ENTRY (_ZGVeN8v_cos_skx) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN4v_cos -#else -/* - ALGORITHM DESCRIPTION: - - ( low accuracy ( < 4ulp ) or enhanced performance - ( half of correct mantissa ) implementation ) - - Argument representation: - arg + Pi/2 = (N*Pi + R) - - Result calculation: - cos(arg) = sin(arg+Pi/2) = sin(N*Pi + R) = (-1)^N * sin(R) - sin(R) is approximated by corresponding polynomial - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_d_trig_data@GOTPCREL(%rip), %rax - -/* R = X - N*Pi1 */ - vmovaps %zmm0, %zmm8 - -/* Check for large arguments path */ - vpbroadcastq .L_2il0floatpacket.16(%rip), %zmm2 - -/* - ARGUMENT RANGE REDUCTION: - Add Pi/2 to argument: X' = X+Pi/2 - */ - vaddpd __dHalfPI(%rax), %zmm0, %zmm6 - vmovups __dInvPI(%rax), %zmm3 - vmovups __dRShifter(%rax), %zmm4 - vmovups __dPI1_FMA(%rax), %zmm7 - vmovups __dC7(%rax), %zmm9 - -/* Get absolute argument value: X' = |X'| */ - vandpd __dAbsMask(%rax), %zmm6, %zmm1 - -/* Y = X'*InvPi + RS : right shifter add */ - vfmadd213pd %zmm4, %zmm3, %zmm6 - vcmppd $18, __dRangeVal(%rax), %zmm1, %k1 - -/* SignRes = Y<<63 : shift LSB to MSB place for result sign */ - vpsllq $63, %zmm6, %zmm13 - -/* N = Y - RS : right shifter sub */ - vsubpd %zmm4, %zmm6, %zmm5 - -/* N = N - 0.5 */ - vsubpd __dOneHalf(%rax), %zmm5, %zmm11 - vfnmadd231pd %zmm11, %zmm7, %zmm8 - -/* R = R - N*Pi2 */ - vfnmadd231pd __dPI2_FMA(%rax), %zmm11, %zmm8 - -/* R = R - N*Pi3 */ - vfnmadd132pd __dPI3_FMA(%rax), %zmm8, %zmm11 - -/* - POLYNOMIAL APPROXIMATION: - R2 = R*R - */ - vmulpd %zmm11, %zmm11, %zmm10 - vfmadd213pd __dC6(%rax), %zmm10, %zmm9 - vfmadd213pd __dC5(%rax), %zmm10, %zmm9 - vfmadd213pd __dC4(%rax), %zmm10, %zmm9 - -/* Poly = C3+R2*(C4+R2*(C5+R2*(C6+R2*C7))) */ - vfmadd213pd __dC3(%rax), %zmm10, %zmm9 - -/* Poly = R+R*(R2*(C1+R2*(C2+R2*Poly))) */ - vfmadd213pd __dC2(%rax), %zmm10, %zmm9 - vfmadd213pd __dC1(%rax), %zmm10, %zmm9 - vmulpd %zmm10, %zmm9, %zmm12 - vfmadd213pd %zmm11, %zmm11, %zmm12 - vpandnq %zmm1, %zmm1, %zmm2{%k1} - vcmppd $3, %zmm2, %zmm2, %k0 - -/* - RECONSTRUCTION: - Final sign setting: Res = Poly^SignRes - */ - vxorpd %zmm13, %zmm12, %zmm1 - kmovw %k0, %ecx - testl %ecx, %ecx - jne .LBL_2_3 - -.LBL_2_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_2_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm1, 1216(%rsp) - je .LBL_2_2 - - xorb %dl, %dl - xorl %eax, %eax - kmovw %k4, 1048(%rsp) - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_2_6: - btl %r14d, %r13d - jc .LBL_2_12 - -.LBL_2_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_2_10 - -.LBL_2_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_2_6 - - kmovw 1048(%rsp), %k4 - kmovw 1040(%rsp), %k5 - kmovw 1032(%rsp), %k6 - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - vmovups 1216(%rsp), %zmm1 - movq 1064(%rsp), %rsi - movq 1056(%rsp), %rdi - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_2_2 - -.LBL_2_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1160(%rsp,%r15), %xmm0 - vzeroupper - vmovsd 1160(%rsp,%r15), %xmm0 - - call JUMPTARGET(cos) - - vmovsd %xmm0, 1224(%rsp,%r15) - jmp .LBL_2_8 - -.LBL_2_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1152(%rsp,%r15), %xmm0 - vzeroupper - vmovsd 1152(%rsp,%r15), %xmm0 - - call JUMPTARGET(cos) - - vmovsd %xmm0, 1216(%rsp,%r15) - jmp .LBL_2_7 -#endif -END (_ZGVeN8v_cos_skx) - - .section .rodata, "a" -.L_2il0floatpacket.16: - .long 0xffffffff,0xffffffff - .type .L_2il0floatpacket.16,@object diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.S deleted file mode 100644 index 5a17e11a0f..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized exp. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVbN2v_exp) - .type _ZGVbN2v_exp, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVbN2v_exp_sse4(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jz 2f - ret -2: leaq _ZGVbN2v_exp_sse2(%rip), %rax - ret -END (_ZGVbN2v_exp) -libmvec_hidden_def (_ZGVbN2v_exp) - -#define _ZGVbN2v_exp _ZGVbN2v_exp_sse2 -#include "../svml_d_exp2_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core_sse4.S deleted file mode 100644 index 864dc5ae9f..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core_sse4.S +++ /dev/null @@ -1,225 +0,0 @@ -/* Function exp vectorized with SSE4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_exp_data.h" - - .text -ENTRY (_ZGVbN2v_exp_sse4) -/* - ALGORITHM DESCRIPTION: - - Argument representation: - N = rint(X*2^k/ln2) = 2^k*M+j - X = N*ln2/2^k + r = M*ln2 + ln2*(j/2^k) + r - then -ln2/2^(k+1) < r < ln2/2^(k+1) - Alternatively: - N = trunc(X*2^k/ln2) - then 0 < r < ln2/2^k - - Result calculation: - exp(X) = exp(M*ln2 + ln2*(j/2^k) + r) - = 2^M * 2^(j/2^k) * exp(r) - 2^M is calculated by bit manipulation - 2^(j/2^k) is stored in table - exp(r) is approximated by polynomial. - - The table lookup is skipped if k = 0. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $320, %rsp - movaps %xmm0, %xmm3 - movq __svml_dexp_data@GOTPCREL(%rip), %r8 - -/* iAbsX = (int)(lX>>32), lX = *(longlong*)&X */ - pshufd $221, %xmm3, %xmm7 - movups __dbInvLn2(%r8), %xmm0 - -/* dK = X*dbInvLn2 */ - mulpd %xmm3, %xmm0 - movq __iAbsMask(%r8), %xmm5 - movq __iDomainRange(%r8), %xmm6 - -/* iAbsX = iAbsX&iAbsMask */ - pand %xmm5, %xmm7 - -/* iRangeMask = (iAbsX>iDomainRange) */ - pcmpgtd %xmm6, %xmm7 - -/* Mask = iRangeMask?1:0, set mask for overflow/underflow */ - movmskps %xmm7, %eax - -/* dN = rint(X*2^k/Ln2) */ - xorps %xmm7, %xmm7 - movups __dbLn2hi(%r8), %xmm5 - movups __dbLn2lo(%r8), %xmm6 - roundpd $0, %xmm0, %xmm7 - -/* dR = X - dN*dbLn2hi, dbLn2hi is 52-8-k hi bits of ln2/2^k */ - mulpd %xmm7, %xmm5 - -/* dR = dR - dN*dbLn2lo, dbLn2lo is 40..94 bits of lo part of ln2/2^k */ - mulpd %xmm6, %xmm7 - movups __dbShifter(%r8), %xmm4 - -/* dM = X*dbInvLn2+dbShifter */ - addpd %xmm0, %xmm4 - movaps %xmm3, %xmm0 - subpd %xmm5, %xmm0 - subpd %xmm7, %xmm0 - movups __dPC2(%r8), %xmm5 - -/* exp(r) = b0+r*(b0+r*(b1+r*b2)) */ - mulpd %xmm0, %xmm5 - addpd __dPC1(%r8), %xmm5 - mulpd %xmm0, %xmm5 - movups __dPC0(%r8), %xmm6 - addpd %xmm6, %xmm5 - mulpd %xmm5, %xmm0 - movdqu __lIndexMask(%r8), %xmm2 - -/* lIndex = (*(longlong*)&dM)&lIndexMask, lIndex is the lower K bits of lM */ - movdqa %xmm2, %xmm1 - -/* lM = (*(longlong*)&dM)&(~lIndexMask) */ - pandn %xmm4, %xmm2 - pand %xmm4, %xmm1 - -/* lM = lM<<(52-K), 2^M */ - psllq $42, %xmm2 - -/* table lookup for dT[j] = 2^(j/2^k) */ - movd %xmm1, %edx - pextrw $4, %xmm1, %ecx - addpd %xmm0, %xmm6 - shll $3, %edx - shll $3, %ecx - movq (%r8,%rdx), %xmm0 - andl $3, %eax - movhpd (%r8,%rcx), %xmm0 - -/* 2^(j/2^k) * exp(r) */ - mulpd %xmm6, %xmm0 - -/* multiply by 2^M through integer add */ - paddq %xmm2, %xmm0 - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - movups %xmm3, 192(%rsp) - movups %xmm0, 256(%rsp) - je .LBL_1_2 - - xorb %cl, %cl - xorl %edx, %edx - movups %xmm8, 112(%rsp) - movups %xmm9, 96(%rsp) - movups %xmm10, 80(%rsp) - movups %xmm11, 64(%rsp) - movups %xmm12, 48(%rsp) - movups %xmm13, 32(%rsp) - movups %xmm14, 16(%rsp) - movups %xmm15, (%rsp) - movq %rsi, 136(%rsp) - movq %rdi, 128(%rsp) - movq %r12, 168(%rsp) - cfi_offset_rel_rsp (12, 168) - movb %cl, %r12b - movq %r13, 160(%rsp) - cfi_offset_rel_rsp (13, 160) - movl %eax, %r13d - movq %r14, 152(%rsp) - cfi_offset_rel_rsp (14, 152) - movl %edx, %r14d - movq %r15, 144(%rsp) - cfi_offset_rel_rsp (15, 144) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - movups 112(%rsp), %xmm8 - movups 96(%rsp), %xmm9 - movups 80(%rsp), %xmm10 - movups 64(%rsp), %xmm11 - movups 48(%rsp), %xmm12 - movups 32(%rsp), %xmm13 - movups 16(%rsp), %xmm14 - movups (%rsp), %xmm15 - movq 136(%rsp), %rsi - movq 128(%rsp), %rdi - movq 168(%rsp), %r12 - cfi_restore (%r12) - movq 160(%rsp), %r13 - cfi_restore (%r13) - movq 152(%rsp), %r14 - cfi_restore (%r14) - movq 144(%rsp), %r15 - cfi_restore (%r15) - movups 256(%rsp), %xmm0 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - movsd 200(%rsp,%r15), %xmm0 - - call JUMPTARGET(__exp_finite) - - movsd %xmm0, 264(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - movsd 192(%rsp,%r15), %xmm0 - - call JUMPTARGET(__exp_finite) - - movsd %xmm0, 256(%rsp,%r15) - jmp .LBL_1_7 - -END (_ZGVbN2v_exp_sse4) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.S deleted file mode 100644 index b994a794cd..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized exp. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVdN4v_exp) - .type _ZGVdN4v_exp, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVdN4v_exp_avx2(%rip), %rax - HAS_ARCH_FEATURE (AVX2_Usable) - jz 2f - ret -2: leaq _ZGVdN4v_exp_sse_wrapper(%rip), %rax - ret -END (_ZGVdN4v_exp) -libmvec_hidden_def (_ZGVdN4v_exp) - -#define _ZGVdN4v_exp _ZGVdN4v_exp_sse_wrapper -#include "../svml_d_exp4_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core_avx2.S deleted file mode 100644 index 937b3c09a6..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core_avx2.S +++ /dev/null @@ -1,212 +0,0 @@ -/* Function exp vectorized with AVX2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_exp_data.h" - - .text -ENTRY (_ZGVdN4v_exp_avx2) -/* - ALGORITHM DESCRIPTION: - - Argument representation: - N = rint(X*2^k/ln2) = 2^k*M+j - X = N*ln2/2^k + r = M*ln2 + ln2*(j/2^k) + r - then -ln2/2^(k+1) < r < ln2/2^(k+1) - Alternatively: - N = trunc(X*2^k/ln2) - then 0 < r < ln2/2^k - - Result calculation: - exp(X) = exp(M*ln2 + ln2*(j/2^k) + r) - = 2^M * 2^(j/2^k) * exp(r) - 2^M is calculated by bit manipulation - 2^(j/2^k) is stored in table - exp(r) is approximated by polynomial - - The table lookup is skipped if k = 0. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $448, %rsp - movq __svml_dexp_data@GOTPCREL(%rip), %rax - vmovdqa %ymm0, %ymm2 - vmovupd __dbInvLn2(%rax), %ymm3 - vmovupd __dbShifter(%rax), %ymm1 - vmovupd __lIndexMask(%rax), %ymm4 - -/* dM = X*dbInvLn2+dbShifter, dbInvLn2 = 2^k/Ln2 */ - vfmadd213pd %ymm1, %ymm2, %ymm3 - -/* iAbsX = (int)(lX>>32), lX = *(longlong*)&X */ - vextracti128 $1, %ymm2, %xmm5 - vshufps $221, %xmm5, %xmm2, %xmm6 - -/* iAbsX = iAbsX&iAbsMask */ - vandps __iAbsMask(%rax), %xmm6, %xmm7 - -/* dN = dM-dbShifter, dN = rint(X*2^k/Ln2) */ - vsubpd %ymm1, %ymm3, %ymm6 - -/* iRangeMask = (iAbsX>iDomainRange) */ - vpcmpgtd __iDomainRange(%rax), %xmm7, %xmm0 - vmovupd __dbLn2hi(%rax), %ymm1 - vmovupd __dPC0(%rax), %ymm7 - -/* Mask = iRangeMask?1:0, set mask for overflow/underflow */ - vmovmskps %xmm0, %ecx - vmovupd __dPC2(%rax), %ymm0 - -/* dR = X - dN*dbLn2hi, dbLn2hi is 52-8-k hi bits of ln2/2^k */ - vmovdqa %ymm2, %ymm5 - vfnmadd231pd %ymm6, %ymm1, %ymm5 - -/* dR = dR - dN*dbLn2lo, dbLn2lo is 40..94 bits of lo part of ln2/2^k */ - vfnmadd132pd __dbLn2lo(%rax), %ymm5, %ymm6 - -/* exp(r) = b0+r*(b0+r*(b1+r*b2)) */ - vfmadd213pd __dPC1(%rax), %ymm6, %ymm0 - vfmadd213pd %ymm7, %ymm6, %ymm0 - vfmadd213pd %ymm7, %ymm6, %ymm0 - -/* lIndex = (*(longlong*)&dM)&lIndexMask, lIndex is the lower K bits of lM */ - vandps %ymm4, %ymm3, %ymm1 - -/* table lookup for dT[j] = 2^(j/2^k) */ - vxorpd %ymm6, %ymm6, %ymm6 - vpcmpeqd %ymm5, %ymm5, %ymm5 - vgatherqpd %ymm5, (%rax,%ymm1,8), %ymm6 - -/* lM = (*(longlong*)&dM)&(~lIndexMask) */ - vpandn %ymm3, %ymm4, %ymm3 - -/* 2^(j/2^k) * exp(r) */ - vmulpd %ymm0, %ymm6, %ymm0 - -/* lM = lM<<(52-K), 2^M */ - vpsllq $42, %ymm3, %ymm4 - -/* multiply by 2^M through integer add */ - vpaddq %ymm4, %ymm0, %ymm0 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovupd %ymm2, 320(%rsp) - vmovupd %ymm0, 384(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - vmovups %ymm8, 224(%rsp) - vmovups %ymm9, 192(%rsp) - vmovups %ymm10, 160(%rsp) - vmovups %ymm11, 128(%rsp) - vmovups %ymm12, 96(%rsp) - vmovups %ymm13, 64(%rsp) - vmovups %ymm14, 32(%rsp) - vmovups %ymm15, (%rsp) - movq %rsi, 264(%rsp) - movq %rdi, 256(%rsp) - movq %r12, 296(%rsp) - cfi_offset_rel_rsp (12, 296) - movb %dl, %r12b - movq %r13, 288(%rsp) - cfi_offset_rel_rsp (13, 288) - movl %ecx, %r13d - movq %r14, 280(%rsp) - cfi_offset_rel_rsp (14, 280) - movl %eax, %r14d - movq %r15, 272(%rsp) - cfi_offset_rel_rsp (15, 272) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - vmovups 224(%rsp), %ymm8 - vmovups 192(%rsp), %ymm9 - vmovups 160(%rsp), %ymm10 - vmovups 128(%rsp), %ymm11 - vmovups 96(%rsp), %ymm12 - vmovups 64(%rsp), %ymm13 - vmovups 32(%rsp), %ymm14 - vmovups (%rsp), %ymm15 - vmovupd 384(%rsp), %ymm0 - movq 264(%rsp), %rsi - movq 256(%rsp), %rdi - movq 296(%rsp), %r12 - cfi_restore (%r12) - movq 288(%rsp), %r13 - cfi_restore (%r13) - movq 280(%rsp), %r14 - cfi_restore (%r14) - movq 272(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 328(%rsp,%r15), %xmm0 - vzeroupper - - call JUMPTARGET(__exp_finite) - - vmovsd %xmm0, 392(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 320(%rsp,%r15), %xmm0 - vzeroupper - - call JUMPTARGET(__exp_finite) - - vmovsd %xmm0, 384(%rsp,%r15) - jmp .LBL_1_7 - -END (_ZGVdN4v_exp_avx2) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.S deleted file mode 100644 index 6189080fcc..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of vectorized exp. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVeN8v_exp) - .type _ZGVeN8v_exp, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVeN8v_exp_skx(%rip), %rax - HAS_ARCH_FEATURE (AVX512DQ_Usable) - jnz 2f - leaq _ZGVeN8v_exp_knl(%rip), %rax - HAS_ARCH_FEATURE (AVX512F_Usable) - jnz 2f - leaq _ZGVeN8v_exp_avx2_wrapper(%rip), %rax -2: ret -END (_ZGVeN8v_exp) - -#define _ZGVeN8v_exp _ZGVeN8v_exp_avx2_wrapper -#include "../svml_d_exp8_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core_avx512.S deleted file mode 100644 index 97ba72c2a0..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core_avx512.S +++ /dev/null @@ -1,456 +0,0 @@ -/* Function exp vectorized with AVX-512. KNL and SKX versions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_exp_data.h" -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVeN8v_exp_knl) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN4v_exp -#else -/* - ALGORITHM DESCRIPTION: - - Argument representation: - N = rint(X*2^k/ln2) = 2^k*M+j - X = N*ln2/2^k + r = M*ln2 + ln2*(j/2^k) + r - then -ln2/2^(k+1) < r < ln2/2^(k+1) - Alternatively: - N = trunc(X*2^k/ln2) - then 0 < r < ln2/2^k - - Result calculation: - exp(X) = exp(M*ln2 + ln2*(j/2^k) + r) - = 2^M * 2^(j/2^k) * exp(r) - 2^M is calculated by bit manipulation - 2^(j/2^k) is stored in table - exp(r) is approximated by polynomial - - The table lookup is skipped if k = 0. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_dexp_data@GOTPCREL(%rip), %rax - -/* dR = X - dN*dbLn2hi, dbLn2hi is 52-8-k hi bits of ln2/2^k */ - vmovaps %zmm0, %zmm8 - -/* iAbsX = (int)(lX>>32), lX = *(longlong*)&X */ - vpsrlq $32, %zmm0, %zmm1 - -/* iAbsX = iAbsX&iAbsMask */ - movl $255, %edx - vpmovqd %zmm1, %ymm2 - kmovw %edx, %k2 - -/* iRangeMask = (iAbsX>iDomainRange) */ - movl $-1, %ecx - -/* table lookup for dT[j] = 2^(j/2^k) */ - vpxord %zmm11, %zmm11, %zmm11 - vmovups __dbInvLn2(%rax), %zmm5 - vmovups __dbLn2hi(%rax), %zmm7 - kxnorw %k3, %k3, %k3 - -/* dM = X*dbInvLn2+dbShifter, dbInvLn2 = 2^k/Ln2 */ - vfmadd213pd __dbShifter(%rax), %zmm0, %zmm5 - vmovups __dPC2(%rax), %zmm12 - -/* dN = dM-dbShifter, dN = rint(X*2^k/Ln2) */ - vsubpd __dbShifter(%rax), %zmm5, %zmm9 - vmovups __lIndexMask(%rax), %zmm4 - vfnmadd231pd %zmm9, %zmm7, %zmm8 - vpandd __iAbsMask(%rax), %zmm2, %zmm2{%k2} - -/* lIndex = (*(longlong*)&dM)&lIndexMask, lIndex is the lower K bits of lM */ - vpandq %zmm4, %zmm5, %zmm10 - vgatherqpd (%rax,%zmm10,8), %zmm11{%k3} - vpcmpgtd __iDomainRange(%rax), %zmm2, %k1{%k2} - -/* lM = (*(longlong*)&dM)&(~lIndexMask) */ - vpandnq %zmm5, %zmm4, %zmm6 - vpbroadcastd %ecx, %zmm3{%k1}{z} - -/* lM = lM<<(52-K), 2^M */ - vpsllq $42, %zmm6, %zmm14 - -/* dR = dR - dN*dbLn2lo, dbLn2lo is 40..94 bits of lo part of ln2/2^k */ - vfnmadd132pd __dbLn2lo(%rax), %zmm8, %zmm9 - -/* Mask = iRangeMask?1:0, set mask for overflow/underflow */ - vptestmd %zmm3, %zmm3, %k0{%k2} - -/* exp(r) = b0+r*(b0+r*(b1+r*b2)) */ - vfmadd213pd __dPC1(%rax), %zmm9, %zmm12 - kmovw %k0, %ecx - movzbl %cl, %ecx - vfmadd213pd __dPC0(%rax), %zmm9, %zmm12 - vfmadd213pd __dPC0(%rax), %zmm9, %zmm12 - -/* 2^(j/2^k) * exp(r) */ - vmulpd %zmm12, %zmm11, %zmm13 - -/* multiply by 2^M through integer add */ - vpaddq %zmm14, %zmm13, %zmm1 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm1, 1216(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - kmovw %k4, 1048(%rsp) - xorl %eax, %eax - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - addb $1, %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - kmovw 1048(%rsp), %k4 - movq 1064(%rsp), %rsi - kmovw 1040(%rsp), %k5 - movq 1056(%rsp), %rdi - kmovw 1032(%rsp), %k6 - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - vmovups 1216(%rsp), %zmm1 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1160(%rsp,%r15), %xmm0 - call JUMPTARGET(__exp_finite) - vmovsd %xmm0, 1224(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1152(%rsp,%r15), %xmm0 - call JUMPTARGET(__exp_finite) - vmovsd %xmm0, 1216(%rsp,%r15) - jmp .LBL_1_7 -#endif -END (_ZGVeN8v_exp_knl) - -ENTRY (_ZGVeN8v_exp_skx) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN4v_exp -#else -/* - ALGORITHM DESCRIPTION: - - Argument representation: - N = rint(X*2^k/ln2) = 2^k*M+j - X = N*ln2/2^k + r = M*ln2 + ln2*(j/2^k) + r - then -ln2/2^(k+1) < r < ln2/2^(k+1) - Alternatively: - N = trunc(X*2^k/ln2) - then 0 < r < ln2/2^k - - Result calculation: - exp(X) = exp(M*ln2 + ln2*(j/2^k) + r) - = 2^M * 2^(j/2^k) * exp(r) - 2^M is calculated by bit manipulation - 2^(j/2^k) is stored in table - exp(r) is approximated by polynomial - - The table lookup is skipped if k = 0. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_dexp_data@GOTPCREL(%rip), %rax - -/* table lookup for dT[j] = 2^(j/2^k) */ - kxnorw %k1, %k1, %k1 - -/* iAbsX = (int)(lX>>32), lX = *(longlong*)&X */ - vpsrlq $32, %zmm0, %zmm1 - vmovups __dbInvLn2(%rax), %zmm7 - vmovups __dbShifter(%rax), %zmm5 - vmovups __lIndexMask(%rax), %zmm6 - vmovups __dbLn2hi(%rax), %zmm9 - vmovups __dPC0(%rax), %zmm12 - -/* dM = X*dbInvLn2+dbShifter, dbInvLn2 = 2^k/Ln2 */ - vfmadd213pd %zmm5, %zmm0, %zmm7 - vpmovqd %zmm1, %ymm2 - -/* dN = dM-dbShifter, dN = rint(X*2^k/Ln2) */ - vsubpd %zmm5, %zmm7, %zmm11 - -/* iAbsX = iAbsX&iAbsMask */ - vpand __iAbsMask(%rax), %ymm2, %ymm3 - -/* dR = X - dN*dbLn2hi, dbLn2hi is 52-8-k hi bits of ln2/2^k */ - vmovaps %zmm0, %zmm10 - vfnmadd231pd %zmm11, %zmm9, %zmm10 - vmovups __dPC2(%rax), %zmm9 - -/* dR = dR - dN*dbLn2lo, dbLn2lo is 40..94 bits of lo part of ln2/2^k */ - vfnmadd132pd __dbLn2lo(%rax), %zmm10, %zmm11 - -/* exp(r) = b0+r*(b0+r*(b1+r*b2)) */ - vfmadd213pd __dPC1(%rax), %zmm11, %zmm9 - vfmadd213pd %zmm12, %zmm11, %zmm9 - vfmadd213pd %zmm12, %zmm11, %zmm9 - -/* iRangeMask = (iAbsX>iDomainRange) */ - vpcmpgtd __iDomainRange(%rax), %ymm3, %ymm4 - -/* Mask = iRangeMask?1:0, set mask for overflow/underflow */ - vmovmskps %ymm4, %ecx - -/* lIndex = (*(longlong*)&dM)&lIndexMask, lIndex is the lower K bits of lM */ - vpandq %zmm6, %zmm7, %zmm13 - vpmovqd %zmm13, %ymm14 - vpxord %zmm15, %zmm15, %zmm15 - vgatherdpd (%rax,%ymm14,8), %zmm15{%k1} - -/* 2^(j/2^k) * exp(r) */ - vmulpd %zmm9, %zmm15, %zmm10 - -/* lM = (*(longlong*)&dM)&(~lIndexMask) */ - vpandnq %zmm7, %zmm6, %zmm8 - -/* lM = lM<<(52-K), 2^M */ - vpsllq $42, %zmm8, %zmm1 - -/* multiply by 2^M through integer add */ - vpaddq %zmm1, %zmm10, %zmm1 - testl %ecx, %ecx - jne .LBL_2_3 - -.LBL_2_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_2_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm1, 1216(%rsp) - je .LBL_2_2 - - xorb %dl, %dl - xorl %eax, %eax - kmovw %k4, 1048(%rsp) - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_2_6: - btl %r14d, %r13d - jc .LBL_2_12 - -.LBL_2_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_2_10 - -.LBL_2_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_2_6 - - kmovw 1048(%rsp), %k4 - kmovw 1040(%rsp), %k5 - kmovw 1032(%rsp), %k6 - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - vmovups 1216(%rsp), %zmm1 - movq 1064(%rsp), %rsi - movq 1056(%rsp), %rdi - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_2_2 - -.LBL_2_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1160(%rsp,%r15), %xmm0 - vzeroupper - vmovsd 1160(%rsp,%r15), %xmm0 - call JUMPTARGET(__exp_finite) - vmovsd %xmm0, 1224(%rsp,%r15) - jmp .LBL_2_8 - -.LBL_2_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1152(%rsp,%r15), %xmm0 - vzeroupper - vmovsd 1152(%rsp,%r15), %xmm0 - call JUMPTARGET(__exp_finite) - vmovsd %xmm0, 1216(%rsp,%r15) - jmp .LBL_2_7 - -#endif -END (_ZGVeN8v_exp_skx) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.S deleted file mode 100644 index 5097add6b5..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized log. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVbN2v_log) - .type _ZGVbN2v_log, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVbN2v_log_sse4(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jz 2f - ret -2: leaq _ZGVbN2v_log_sse2(%rip), %rax - ret -END (_ZGVbN2v_log) -libmvec_hidden_def (_ZGVbN2v_log) - -#define _ZGVbN2v_log _ZGVbN2v_log_sse2 -#include "../svml_d_log2_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log2_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log2_core_sse4.S deleted file mode 100644 index 7d4b3c8850..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_log2_core_sse4.S +++ /dev/null @@ -1,229 +0,0 @@ -/* Function log vectorized with SSE4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_log_data.h" - - .text -ENTRY (_ZGVbN2v_log_sse4) -/* - ALGORITHM DESCRIPTION: - - log(x) = -log(Rcp) + log(Rcp*x), - where Rcp ~ 1/x (accuracy ~9 bits, obtained by rounding - HW approximation to 1+9 mantissa bits) - - Reduced argument R=Rcp*x-1 is used to approximate log(1+R) as polynomial - - log(Rcp) = exponent_Rcp*log(2) + log(mantissa_Rcp) - -log(mantissa_Rcp) is obtained from a lookup table, - accessed by a 9-bit index - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $320, %rsp - movaps %xmm0, %xmm6 - movq __svml_dlog_data@GOTPCREL(%rip), %r8 - movaps %xmm6, %xmm3 - movaps %xmm6, %xmm2 - -/* isolate exponent bits */ - movaps %xmm6, %xmm1 - psrlq $20, %xmm1 - movups _ExpMask(%r8), %xmm5 - -/* preserve mantissa, set input exponent to 2^(-10) */ - andps %xmm6, %xmm5 - orps _Two10(%r8), %xmm5 - -/* reciprocal approximation good to at least 11 bits */ - cvtpd2ps %xmm5, %xmm7 - cmpltpd _MinNorm(%r8), %xmm3 - cmpnlepd _MaxNorm(%r8), %xmm2 - movlhps %xmm7, %xmm7 - -/* combine and get argument value range mask */ - orps %xmm2, %xmm3 - rcpps %xmm7, %xmm0 - movmskpd %xmm3, %eax - movups _HalfMask(%r8), %xmm2 - -/* argument reduction started: R = Mantissa*Rcp - 1 */ - andps %xmm5, %xmm2 - cvtps2pd %xmm0, %xmm4 - subpd %xmm2, %xmm5 - -/* round reciprocal to nearest integer, will have 1+9 mantissa bits */ - roundpd $0, %xmm4, %xmm4 - mulpd %xmm4, %xmm2 - mulpd %xmm4, %xmm5 - subpd _One(%r8), %xmm2 - addpd %xmm2, %xmm5 - movups _Threshold(%r8), %xmm2 - -/* calculate index for table lookup */ - movaps %xmm4, %xmm3 - cmpltpd %xmm4, %xmm2 - pshufd $221, %xmm1, %xmm7 - psrlq $40, %xmm3 - -/* convert biased exponent to DP format */ - cvtdq2pd %xmm7, %xmm0 - movd %xmm3, %edx - movups _poly_coeff_1(%r8), %xmm4 - -/* polynomial computation */ - mulpd %xmm5, %xmm4 - andps _Bias(%r8), %xmm2 - orps _Bias1(%r8), %xmm2 - -/* - Table stores -log(0.5*mantissa) for larger mantissas, - adjust exponent accordingly - */ - subpd %xmm2, %xmm0 - addpd _poly_coeff_2(%r8), %xmm4 - -/* exponent*log(2.0) */ - mulpd _L2(%r8), %xmm0 - movaps %xmm5, %xmm2 - mulpd %xmm5, %xmm2 - movups _poly_coeff_3(%r8), %xmm7 - mulpd %xmm5, %xmm7 - mulpd %xmm2, %xmm4 - addpd _poly_coeff_4(%r8), %xmm7 - addpd %xmm4, %xmm7 - mulpd %xmm7, %xmm2 - movslq %edx, %rdx - pextrd $2, %xmm3, %ecx - -/* - reconstruction: - (exponent*log(2)) + (LogRcp + (R+poly)) - */ - addpd %xmm2, %xmm5 - movslq %ecx, %rcx - movsd _LogRcp_lookup(%r8,%rdx), %xmm1 - movhpd _LogRcp_lookup(%r8,%rcx), %xmm1 - addpd %xmm5, %xmm1 - addpd %xmm1, %xmm0 - testl %eax, %eax - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - movups %xmm6, 192(%rsp) - movups %xmm0, 256(%rsp) - je .LBL_1_2 - - xorb %cl, %cl - xorl %edx, %edx - movups %xmm8, 112(%rsp) - movups %xmm9, 96(%rsp) - movups %xmm10, 80(%rsp) - movups %xmm11, 64(%rsp) - movups %xmm12, 48(%rsp) - movups %xmm13, 32(%rsp) - movups %xmm14, 16(%rsp) - movups %xmm15, (%rsp) - movq %rsi, 136(%rsp) - movq %rdi, 128(%rsp) - movq %r12, 168(%rsp) - cfi_offset_rel_rsp (12, 168) - movb %cl, %r12b - movq %r13, 160(%rsp) - cfi_offset_rel_rsp (13, 160) - movl %eax, %r13d - movq %r14, 152(%rsp) - cfi_offset_rel_rsp (14, 152) - movl %edx, %r14d - movq %r15, 144(%rsp) - cfi_offset_rel_rsp (15, 144) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - movups 112(%rsp), %xmm8 - movups 96(%rsp), %xmm9 - movups 80(%rsp), %xmm10 - movups 64(%rsp), %xmm11 - movups 48(%rsp), %xmm12 - movups 32(%rsp), %xmm13 - movups 16(%rsp), %xmm14 - movups (%rsp), %xmm15 - movq 136(%rsp), %rsi - movq 128(%rsp), %rdi - movq 168(%rsp), %r12 - cfi_restore (%r12) - movq 160(%rsp), %r13 - cfi_restore (%r13) - movq 152(%rsp), %r14 - cfi_restore (%r14) - movq 144(%rsp), %r15 - cfi_restore (%r15) - movups 256(%rsp), %xmm0 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - movsd 200(%rsp,%r15), %xmm0 - - call JUMPTARGET(__log_finite) - - movsd %xmm0, 264(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - movsd 192(%rsp,%r15), %xmm0 - - call JUMPTARGET(__log_finite) - - movsd %xmm0, 256(%rsp,%r15) - jmp .LBL_1_7 - -END (_ZGVbN2v_log_sse4) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.S deleted file mode 100644 index 1e9a2f48a1..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized log. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVdN4v_log) - .type _ZGVdN4v_log, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVdN4v_log_avx2(%rip), %rax - HAS_ARCH_FEATURE (AVX2_Usable) - jz 2f - ret -2: leaq _ZGVdN4v_log_sse_wrapper(%rip), %rax - ret -END (_ZGVdN4v_log) -libmvec_hidden_def (_ZGVdN4v_log) - -#define _ZGVdN4v_log _ZGVdN4v_log_sse_wrapper -#include "../svml_d_log4_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log4_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log4_core_avx2.S deleted file mode 100644 index 04ea9e0071..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_log4_core_avx2.S +++ /dev/null @@ -1,210 +0,0 @@ -/* Function log vectorized with AVX2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_log_data.h" - - .text -ENTRY (_ZGVdN4v_log_avx2) -/* ALGORITHM DESCRIPTION: - - log(x) = -log(Rcp) + log(Rcp*x), - where Rcp ~ 1/x (accuracy ~9 bits, obtained by rounding - HW approximation to 1+9 mantissa bits) - - Reduced argument R=Rcp*x-1 is used to approximate log(1+R) as polynomial - - log(Rcp) = exponent_Rcp*log(2) + log(mantissa_Rcp) - -log(mantissa_Rcp) is obtained from a lookup table, - accessed by a 9-bit index - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $448, %rsp - movq __svml_dlog_data@GOTPCREL(%rip), %rax - vmovdqa %ymm0, %ymm5 - -/* isolate exponent bits */ - vpsrlq $20, %ymm5, %ymm0 - -/* preserve mantissa, set input exponent to 2^(-10) */ - vandpd _ExpMask(%rax), %ymm5, %ymm6 - vorpd _Two10(%rax), %ymm6, %ymm4 - -/* reciprocal approximation good to at least 11 bits */ - vcvtpd2ps %ymm4, %xmm7 - vrcpps %xmm7, %xmm1 - vcmplt_oqpd _MinNorm(%rax), %ymm5, %ymm7 - vcvtps2pd %xmm1, %ymm3 - vcmpnle_uqpd _MaxNorm(%rax), %ymm5, %ymm1 - vextracti128 $1, %ymm0, %xmm2 - vshufps $221, %xmm2, %xmm0, %xmm6 - -/* round reciprocal to nearest integer, will have 1+9 mantissa bits */ - vroundpd $0, %ymm3, %ymm2 - -/* convert biased exponent to DP format */ - vcvtdq2pd %xmm6, %ymm0 - -/* combine and get argument value range mask */ - vorpd %ymm1, %ymm7, %ymm3 - vmovupd _One(%rax), %ymm1 - vmovmskpd %ymm3, %ecx - -/* calculate index for table lookup */ - vpsrlq $40, %ymm2, %ymm3 - -/* argument reduction started: R = Mantissa*Rcp - 1 */ - vfmsub213pd %ymm1, %ymm2, %ymm4 - vcmpgt_oqpd _Threshold(%rax), %ymm2, %ymm2 - vpcmpeqd %ymm6, %ymm6, %ymm6 - vxorpd %ymm1, %ymm1, %ymm1 - vgatherqpd %ymm6, _LogRcp_lookup(%rax,%ymm3), %ymm1 - -/* exponent*log(2.0) */ - vmovupd _poly_coeff_1(%rax), %ymm6 - vmulpd %ymm4, %ymm4, %ymm3 - -/* polynomial computation */ - vfmadd213pd _poly_coeff_2(%rax), %ymm4, %ymm6 - vandpd _Bias(%rax), %ymm2, %ymm7 - vorpd _Bias1(%rax), %ymm7, %ymm2 - -/* - Table stores -log(0.5*mantissa) for larger mantissas, - adjust exponent accordingly - */ - vsubpd %ymm2, %ymm0, %ymm0 - vmovupd _poly_coeff_3(%rax), %ymm2 - vfmadd213pd _poly_coeff_4(%rax), %ymm4, %ymm2 - vfmadd213pd %ymm2, %ymm3, %ymm6 - -/* - reconstruction: - (exponent*log(2)) + (LogRcp + (R+poly)) - */ - vfmadd213pd %ymm4, %ymm3, %ymm6 - vaddpd %ymm1, %ymm6, %ymm4 - vfmadd132pd _L2(%rax), %ymm4, %ymm0 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovupd %ymm5, 320(%rsp) - vmovupd %ymm0, 384(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - vmovups %ymm8, 224(%rsp) - vmovups %ymm9, 192(%rsp) - vmovups %ymm10, 160(%rsp) - vmovups %ymm11, 128(%rsp) - vmovups %ymm12, 96(%rsp) - vmovups %ymm13, 64(%rsp) - vmovups %ymm14, 32(%rsp) - vmovups %ymm15, (%rsp) - movq %rsi, 264(%rsp) - movq %rdi, 256(%rsp) - movq %r12, 296(%rsp) - cfi_offset_rel_rsp (12, 296) - movb %dl, %r12b - movq %r13, 288(%rsp) - cfi_offset_rel_rsp (13, 288) - movl %ecx, %r13d - movq %r14, 280(%rsp) - cfi_offset_rel_rsp (14, 280) - movl %eax, %r14d - movq %r15, 272(%rsp) - cfi_offset_rel_rsp (15, 272) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - vmovups 224(%rsp), %ymm8 - vmovups 192(%rsp), %ymm9 - vmovups 160(%rsp), %ymm10 - vmovups 128(%rsp), %ymm11 - vmovups 96(%rsp), %ymm12 - vmovups 64(%rsp), %ymm13 - vmovups 32(%rsp), %ymm14 - vmovups (%rsp), %ymm15 - vmovupd 384(%rsp), %ymm0 - movq 264(%rsp), %rsi - movq 256(%rsp), %rdi - movq 296(%rsp), %r12 - cfi_restore (%r12) - movq 288(%rsp), %r13 - cfi_restore (%r13) - movq 280(%rsp), %r14 - cfi_restore (%r14) - movq 272(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 328(%rsp,%r15), %xmm0 - vzeroupper - - call JUMPTARGET(__log_finite) - - vmovsd %xmm0, 392(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 320(%rsp,%r15), %xmm0 - vzeroupper - - call JUMPTARGET(__log_finite) - - vmovsd %xmm0, 384(%rsp,%r15) - jmp .LBL_1_7 - -END (_ZGVdN4v_log_avx2) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.S deleted file mode 100644 index 43f572d36c..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of vectorized log. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVeN8v_log) - .type _ZGVeN8v_log, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVeN8v_log_skx(%rip), %rax - HAS_ARCH_FEATURE (AVX512DQ_Usable) - jnz 2f - leaq _ZGVeN8v_log_knl(%rip), %rax - HAS_ARCH_FEATURE (AVX512F_Usable) - jnz 2f - leaq _ZGVeN8v_log_avx2_wrapper(%rip), %rax -2: ret -END (_ZGVeN8v_log) - -#define _ZGVeN8v_log _ZGVeN8v_log_avx2_wrapper -#include "../svml_d_log8_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log8_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log8_core_avx512.S deleted file mode 100644 index d10d5114c6..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_log8_core_avx512.S +++ /dev/null @@ -1,468 +0,0 @@ -/* Function log vectorized with AVX-512. KNL and SKX versions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_log_data.h" -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVeN8v_log_knl) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN4v_log -#else -/* - ALGORITHM DESCRIPTION: - - log(x) = -log(Rcp) + log(Rcp*x), - where Rcp ~ 1/x (accuracy ~9 bits, obtained by - rounding HW approximation to 1+9 mantissa bits) - - Reduced argument R=Rcp*x-1 is used to approximate log(1+R) as polynomial - - log(Rcp) = exponent_Rcp*log(2) + log(mantissa_Rcp) - -log(mantissa_Rcp) is obtained from a lookup table, - accessed by a 9-bit index - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_dlog_data@GOTPCREL(%rip), %rdx - movq $-1, %rax - -/* isolate exponent bits */ - vpsrlq $20, %zmm0, %zmm2 - vpsrlq $32, %zmm2, %zmm3 - vpxord %zmm2, %zmm2, %zmm2 - kxnorw %k3, %k3, %k3 - vmovups _Two10(%rdx), %zmm1 - vmovups _One(%rdx), %zmm9 - vpmovqd %zmm3, %ymm4 - -/* convert biased exponent to DP format */ - vcvtdq2pd %ymm4, %zmm13 - -/* preserve mantissa, set input exponent to 2^(-10) */ - vpternlogq $248, _ExpMask(%rdx), %zmm0, %zmm1 - vcmppd $17, _MinNorm(%rdx), %zmm0, %k1 - -/* reciprocal approximation good to at least 11 bits */ - vrcp28pd %zmm1, %zmm5 - vpbroadcastq %rax, %zmm6{%k1}{z} - vmovups _poly_coeff_3(%rdx), %zmm15 - vcmppd $22, _MaxNorm(%rdx), %zmm0, %k2 - vmovups _Bias1(%rdx), %zmm14 - -/* round reciprocal to nearest integer, will have 1+9 mantissa bits */ - vrndscalepd $8, %zmm5, %zmm11 - vpbroadcastq %rax, %zmm7{%k2}{z} - -/* argument reduction started: R = Mantissa*Rcp - 1 */ - vfmsub213pd %zmm9, %zmm11, %zmm1 - -/* calculate index for table lookup */ - vpsrlq $40, %zmm11, %zmm10 - vgatherqpd _LogRcp_lookup(%rdx,%zmm10), %zmm2{%k3} - vcmppd $30, _Threshold(%rdx), %zmm11, %k1 - -/* combine and get argument value range mask */ - vporq %zmm7, %zmm6, %zmm8 - -/* exponent*log(2.0) */ - vmovups _poly_coeff_1(%rdx), %zmm11 - vmulpd %zmm1, %zmm1, %zmm10 - vptestmq %zmm8, %zmm8, %k0 - vfmadd213pd _poly_coeff_4(%rdx), %zmm1, %zmm15 - kmovw %k0, %ecx - -/* polynomial computation */ - vfmadd213pd _poly_coeff_2(%rdx), %zmm1, %zmm11 - movzbl %cl, %ecx - vpbroadcastq %rax, %zmm12{%k1}{z} - vfmadd213pd %zmm15, %zmm10, %zmm11 - vpternlogq $248, _Bias(%rdx), %zmm12, %zmm14 - -/* - Table stores -log(0.5*mantissa) for larger mantissas, - adjust exponent accordingly - */ - vsubpd %zmm14, %zmm13, %zmm3 - -/* - reconstruction: - (exponent*log(2)) + (LogRcp + (R+poly)) - */ - vfmadd213pd %zmm1, %zmm10, %zmm11 - vaddpd %zmm2, %zmm11, %zmm1 - vfmadd132pd _L2(%rdx), %zmm1, %zmm3 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovaps %zmm3, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm3, 1216(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - kmovw %k4, 1048(%rsp) - xorl %eax, %eax - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - addb $1, %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - kmovw 1048(%rsp), %k4 - movq 1064(%rsp), %rsi - kmovw 1040(%rsp), %k5 - movq 1056(%rsp), %rdi - kmovw 1032(%rsp), %k6 - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - vmovups 1216(%rsp), %zmm3 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1160(%rsp,%r15), %xmm0 - call JUMPTARGET(__log_finite) - vmovsd %xmm0, 1224(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1152(%rsp,%r15), %xmm0 - call JUMPTARGET(__log_finite) - vmovsd %xmm0, 1216(%rsp,%r15) - jmp .LBL_1_7 -#endif -END (_ZGVeN8v_log_knl) - -ENTRY (_ZGVeN8v_log_skx) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN4v_log -#else -/* - ALGORITHM DESCRIPTION: - - log(x) = -log(Rcp) + log(Rcp*x), - where Rcp ~ 1/x (accuracy ~9 bits, - obtained by rounding HW approximation to 1+9 mantissa bits) - - Reduced argument R=Rcp*x-1 is used to approximate log(1+R) as polynomial - - log(Rcp) = exponent_Rcp*log(2) + log(mantissa_Rcp) - -log(mantissa_Rcp) is obtained from a lookup table, - accessed by a 9-bit index - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_dlog_data@GOTPCREL(%rip), %rax - vmovaps %zmm0, %zmm3 - kxnorw %k3, %k3, %k3 - vmovups _Two10(%rax), %zmm2 - vmovups _Threshold(%rax), %zmm14 - vmovups _One(%rax), %zmm11 - vcmppd $21, _MinNorm(%rax), %zmm3, %k1 - vcmppd $18, _MaxNorm(%rax), %zmm3, %k2 - -/* isolate exponent bits */ - vpsrlq $20, %zmm3, %zmm4 - -/* preserve mantissa, set input exponent to 2^(-10) */ - vpternlogq $248, _ExpMask(%rax), %zmm3, %zmm2 - vpbroadcastq .L_2il0floatpacket.12(%rip), %zmm1 - vpsrlq $32, %zmm4, %zmm6 - -/* reciprocal approximation good to at least 11 bits */ - vrcp14pd %zmm2, %zmm5 - -/* exponent*log(2.0) */ - vmovups _poly_coeff_1(%rax), %zmm4 - vpmovqd %zmm6, %ymm7 - -/* round reciprocal to nearest integer, will have 1+9 mantissa bits */ - vrndscalepd $8, %zmm5, %zmm0 - -/* calculate index for table lookup */ - vpsrlq $40, %zmm0, %zmm12 - -/* argument reduction started: R = Mantissa*Rcp - 1 */ - vfmsub213pd %zmm11, %zmm0, %zmm2 - vpmovqd %zmm12, %ymm13 - -/* polynomial computation */ - vfmadd213pd _poly_coeff_2(%rax), %zmm2, %zmm4 - vmovaps %zmm1, %zmm8 - vmovaps %zmm1, %zmm9 - vpxord %zmm5, %zmm5, %zmm5 - vgatherdpd _LogRcp_lookup(%rax,%ymm13), %zmm5{%k3} - vmovups _Bias1(%rax), %zmm13 - vpandnq %zmm3, %zmm3, %zmm8{%k1} - vcmppd $21, %zmm0, %zmm14, %k1 - vpandnq %zmm14, %zmm14, %zmm1{%k1} - vmulpd %zmm2, %zmm2, %zmm14 - vpternlogq $248, _Bias(%rax), %zmm1, %zmm13 - vmovups _poly_coeff_3(%rax), %zmm1 - vfmadd213pd _poly_coeff_4(%rax), %zmm2, %zmm1 - vfmadd213pd %zmm1, %zmm14, %zmm4 - -/* - reconstruction: - (exponent*log(2)) + (LogRcp + (R+poly)) - */ - vfmadd213pd %zmm2, %zmm14, %zmm4 - vaddpd %zmm5, %zmm4, %zmm2 - vpandnq %zmm3, %zmm3, %zmm9{%k2} - -/* combine and get argument value range mask */ - vorpd %zmm9, %zmm8, %zmm10 - vcmppd $3, %zmm10, %zmm10, %k0 - kmovw %k0, %ecx - -/* convert biased exponent to DP format */ - vcvtdq2pd %ymm7, %zmm15 - -/* - Table stores -log(0.5*mantissa) for larger mantissas, - adjust exponent accordingly - */ - vsubpd %zmm13, %zmm15, %zmm0 - vfmadd132pd _L2(%rax), %zmm2, %zmm0 - testl %ecx, %ecx - jne .LBL_2_3 - -.LBL_2_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_2_3: - cfi_restore_state - vmovups %zmm3, 1152(%rsp) - vmovups %zmm0, 1216(%rsp) - je .LBL_2_2 - - xorb %dl, %dl - xorl %eax, %eax - kmovw %k4, 1048(%rsp) - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_2_6: - btl %r14d, %r13d - jc .LBL_2_12 - -.LBL_2_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_2_10 - -.LBL_2_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_2_6 - - kmovw 1048(%rsp), %k4 - kmovw 1040(%rsp), %k5 - kmovw 1032(%rsp), %k6 - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - vmovups 1216(%rsp), %zmm0 - movq 1064(%rsp), %rsi - movq 1056(%rsp), %rdi - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_2_2 - -.LBL_2_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1160(%rsp,%r15), %xmm0 - vzeroupper - vmovsd 1160(%rsp,%r15), %xmm0 - - call JUMPTARGET(__log_finite) - - vmovsd %xmm0, 1224(%rsp,%r15) - jmp .LBL_2_8 - -.LBL_2_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1152(%rsp,%r15), %xmm0 - vzeroupper - vmovsd 1152(%rsp,%r15), %xmm0 - - call JUMPTARGET(__log_finite) - - vmovsd %xmm0, 1216(%rsp,%r15) - jmp .LBL_2_7 -#endif -END (_ZGVeN8v_log_skx) - - .section .rodata, "a" -.L_2il0floatpacket.12: - .long 0xffffffff,0xffffffff - .type .L_2il0floatpacket.12,@object diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.S deleted file mode 100644 index adb0872e56..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized pow. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVbN2vv_pow) - .type _ZGVbN2vv_pow, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVbN2vv_pow_sse4(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jz 2f - ret -2: leaq _ZGVbN2vv_pow_sse2(%rip), %rax - ret -END (_ZGVbN2vv_pow) -libmvec_hidden_def (_ZGVbN2vv_pow) - -#define _ZGVbN2vv_pow _ZGVbN2vv_pow_sse2 -#include "../svml_d_pow2_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core_sse4.S deleted file mode 100644 index ad7c215ff0..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core_sse4.S +++ /dev/null @@ -1,432 +0,0 @@ -/* Function pow vectorized with SSE4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_pow_data.h" - - .text -ENTRY (_ZGVbN2vv_pow_sse4) -/* - ALGORITHM DESCRIPTION: - - 1) Calculating log2|x| - Here we use the following formula. - Let |x|=2^k1*X1, where k1 is integer, 1<=X1<2. - Let C ~= 1/ln(2), - Rcp1 ~= 1/X1, X2=Rcp1*X1, - Rcp2 ~= 1/X2, X3=Rcp2*X2, - Rcp3 ~= 1/X3, Rcp3C ~= C/X3. - Then - log2|x| = k1 + log2(1/Rcp1) + log2(1/Rcp2) + log2(C/Rcp3C) + - log2(X1*Rcp1*Rcp2*Rcp3C/C), - where X1*Rcp1*Rcp2*Rcp3C = C*(1+q), q is very small. - - The values of Rcp1, log2(1/Rcp1), Rcp2, log2(1/Rcp2), - Rcp3C, log2(C/Rcp3C) are taken from tables. - Values of Rcp1, Rcp2, Rcp3C are such that RcpC=Rcp1*Rcp2*Rcp3C - is exactly represented in target precision. - - log2(X1*Rcp1*Rcp2*Rcp3C/C) = log2(1+q) = ln(1+q)/ln2 = - = 1/(ln2)*q - 1/(2ln2)*q^2 + 1/(3ln2)*q^3 - ... = - = 1/(C*ln2)*cq - 1/(2*C^2*ln2)*cq^2 + 1/(3*C^3*ln2)*cq^3 - ... = - = (1 + a1)*cq + a2*cq^2 + a3*cq^3 + ..., - where cq = X1*Rcp1*Rcp2*Rcp3C-C, - a1=1/(C*ln(2))-1 is small, - a2=1/(2*C^2*ln2), - a3=1/(3*C^3*ln2), - ... - We get 3 parts of log2 result: HH+HL+HLL ~= log2|x|. - - 2) Calculation of y*(HH+HL+HLL). - Split y into YHi+YLo. - Get high PH and medium PL parts of y*log2|x|. - Get low PLL part of y*log2|x|. - Now we have PH+PL+PLL ~= y*log2|x|. - - 3) Calculation of 2^(PH+PL+PLL). - Mathematical idea of computing 2^(PH+PL+PLL) is the following. - Let's represent PH+PL+PLL in the form N + j/2^expK + Z, - where expK=7 in this implementation, N and j are integers, - 0<=j<=2^expK-1, |Z|<2^(-expK-1). - Hence 2^(PH+PL+PLL) ~= 2^N * 2^(j/2^expK) * 2^Z, - where 2^(j/2^expK) is stored in a table, and - 2^Z ~= 1 + B1*Z + B2*Z^2 ... + B5*Z^5. - - We compute 2^(PH+PL+PLL) as follows. - Break PH into PHH + PHL, where PHH = N + j/2^expK. - Z = PHL + PL + PLL - Exp2Poly = B1*Z + B2*Z^2 ... + B5*Z^5 - Get 2^(j/2^expK) from table in the form THI+TLO. - Now we have 2^(PH+PL+PLL) ~= 2^N * (THI + TLO) * (1 + Exp2Poly). - - Get significand of 2^(PH+PL+PLL) in the form ResHi+ResLo: - ResHi := THI - ResLo := THI * Exp2Poly + TLO - - Get exponent ERes of the result: - Res := ResHi + ResLo: - Result := ex(Res) + N. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $256, %rsp - movq __svml_dpow_data@GOTPCREL(%rip), %rdx - movups %xmm14, 80(%rsp) - movups %xmm9, 176(%rsp) - movaps %xmm1, %xmm9 - pshufd $221, %xmm0, %xmm1 - movq _iIndexMask(%rdx), %xmm14 - movq _iIndexAdd(%rdx), %xmm6 - -/* i = (((Hi(x) & 0x000ffe00) + 0x00000200) >> 10); -> i = (b1..b11 + 1) / 2 */ - pand %xmm1, %xmm14 - paddd %xmm6, %xmm14 - psrld $10, %xmm14 - movups %xmm13, 96(%rsp) - -/* Index for reciprocal table */ - movdqa %xmm14, %xmm13 - pslld $3, %xmm13 - -/* Index for log2 table */ - pslld $4, %xmm14 - movd %xmm13, %eax - movups %xmm10, 160(%rsp) - movups _iMantissaMask(%rdx), %xmm10 - movslq %eax, %rax - -/* x1 = x; Hi(x1) = (Hi(x1)&0x000fffff)|0x3ff00000 */ - andps %xmm0, %xmm10 - pextrd $1, %xmm13, %ecx - movslq %ecx, %rcx - movups %xmm0, (%rsp) - movdqa %xmm1, %xmm0 - -/* k = Hi(x); k = k - 0x3fe7fe00; k = k >> 20 */ - movq _i3fe7fe00(%rdx), %xmm6 - psubd %xmm6, %xmm0 - movups _iHighMask(%rdx), %xmm6 - psrad $20, %xmm0 - movups %xmm15, 48(%rsp) - movups %xmm12, 112(%rsp) - orps _dbOne(%rdx), %xmm10 - movsd 11712(%rdx,%rax), %xmm12 - movd %xmm14, %r8d - movq _i2p20_2p19(%rdx), %xmm15 - movhpd 11712(%rdx,%rcx), %xmm12 - paddd %xmm15, %xmm0 - pextrd $1, %xmm14, %r9d - -/* x1Hi=x1; Lo(x1Hi)&=0xf8000000; x1Lo = x1-x1Hi */ - movaps %xmm6, %xmm14 - andps %xmm10, %xmm14 - movaps %xmm10, %xmm15 - subpd %xmm14, %xmm15 - -/* r1 = x1*rcp1 */ - mulpd %xmm12, %xmm10 - -/* E = -r1+__fence(x1Hi*rcp1) */ - mulpd %xmm12, %xmm14 - -/* E=E+x1Lo*rcp1 */ - mulpd %xmm15, %xmm12 - subpd %xmm10, %xmm14 - pshufd $80, %xmm0, %xmm0 - movslq %r8d, %r8 - andps _iffffffff00000000(%rdx), %xmm0 - subpd _db2p20_2p19(%rdx), %xmm0 - addpd %xmm12, %xmm14 - movslq %r9d, %r9 - -/* T_Rh_Eh = T_Rh + E */ - movaps %xmm14, %xmm15 - movups %xmm8, 208(%rsp) - movups 19968(%rdx,%r8), %xmm8 - movups %xmm11, 144(%rsp) - movaps %xmm8, %xmm11 - -/* cq = c+r1 */ - movups _LHN(%rdx), %xmm13 - movhpd 19968(%rdx,%r9), %xmm11 - addpd %xmm10, %xmm13 - -/* T = k + L1hi */ - addpd %xmm0, %xmm11 - -/* T_Rh = T + cq */ - movaps %xmm13, %xmm12 - addpd %xmm11, %xmm12 - addpd %xmm12, %xmm15 - -/* Rl = T-T_Rh; -> -Rh */ - subpd %xmm12, %xmm11 - -/* HLL = T_Rh - T_Rh_Eh; -> -Eh */ - subpd %xmm15, %xmm12 - -/* Rl=Rl+cq; */ - addpd %xmm13, %xmm11 - -/* cq = cq + E */ - addpd %xmm14, %xmm13 - -/* HLL+=E; -> El */ - addpd %xmm14, %xmm12 - -/* HLL+=Rl */ - addpd %xmm12, %xmm11 - unpckhpd 19968(%rdx,%r9), %xmm8 - -/* T_Rh_Eh_HLLhi = T_Rh_Eh + HLL */ - movaps %xmm15, %xmm14 - -/* HLL+=L1lo; */ - addpd %xmm11, %xmm8 - movups _clv_2(%rdx), %xmm11 - -/* HH = T_Rh_Eh_HLLhi; Lo(HH)&=0xf8000000 */ - movaps %xmm6, %xmm12 - -/* HLL = HLL + (((((((a7)*cq+a6)*cq+a5)*cq+a4)*cq+a3)*cq+a2)*cq+a1)*cq */ - mulpd %xmm13, %xmm11 - addpd _clv_3(%rdx), %xmm11 - mulpd %xmm13, %xmm11 - addpd _clv_4(%rdx), %xmm11 - mulpd %xmm13, %xmm11 - addpd _clv_5(%rdx), %xmm11 - mulpd %xmm13, %xmm11 - addpd _clv_6(%rdx), %xmm11 - mulpd %xmm13, %xmm11 - addpd _clv_7(%rdx), %xmm11 - mulpd %xmm11, %xmm13 - addpd %xmm13, %xmm8 - addpd %xmm8, %xmm14 - -/* - 2^(y*(HH+HL+HLL)) starts here: - yH = y; Lo(yH)&=0xf8000000 - */ - andps %xmm9, %xmm6 - -/* yL = y-yH; */ - movaps %xmm9, %xmm11 - subpd %xmm6, %xmm11 - andps %xmm14, %xmm12 - -/* HLLhi = T_Rh_Eh_HLLhi - T_Rh_Eh */ - movaps %xmm14, %xmm10 - -/* HL = T_Rh_Eh_HLLhi-HH; */ - subpd %xmm12, %xmm14 - subpd %xmm15, %xmm10 - movq _HIDELTA(%rdx), %xmm2 - -/* pH = yH*HH; */ - movaps %xmm6, %xmm13 - movq _LORANGE(%rdx), %xmm3 - paddd %xmm2, %xmm1 - pcmpgtd %xmm1, %xmm3 - -/* pL=yL*HL+yH*HL; pL+=yL*HH; */ - movaps %xmm11, %xmm1 - mulpd %xmm14, %xmm1 - mulpd %xmm14, %xmm6 - mulpd %xmm12, %xmm13 - mulpd %xmm11, %xmm12 - addpd %xmm6, %xmm1 - -/* HLL = HLL - HLLhi */ - subpd %xmm10, %xmm8 - addpd %xmm12, %xmm1 - -/* pLL = y*HLL */ - mulpd %xmm9, %xmm8 - movups _db2p45_2p44(%rdx), %xmm11 - -/* pHH = pH + *(double*)&db2p45_2p44 */ - movaps %xmm11, %xmm12 - addpd %xmm13, %xmm12 - -/* t=pL+pLL; t+=pHL */ - addpd %xmm8, %xmm1 - movq _ABSMASK(%rdx), %xmm5 - pshufd $221, %xmm9, %xmm4 - pand %xmm5, %xmm4 - movq _INF(%rdx), %xmm7 - movdqa %xmm4, %xmm2 - pcmpgtd %xmm7, %xmm2 - pcmpeqd %xmm7, %xmm4 - pshufd $136, %xmm12, %xmm7 - por %xmm4, %xmm2 - -/* pHH = pHH - *(double*)&db2p45_2p44 */ - subpd %xmm11, %xmm12 - pshufd $221, %xmm13, %xmm10 - por %xmm2, %xmm3 - -/* pHL = pH - pHH; */ - subpd %xmm12, %xmm13 - pand %xmm5, %xmm10 - movq _DOMAINRANGE(%rdx), %xmm5 - movdqa %xmm10, %xmm4 - addpd %xmm1, %xmm13 - pcmpgtd %xmm5, %xmm4 - pcmpeqd %xmm5, %xmm10 - por %xmm10, %xmm4 - movq _jIndexMask(%rdx), %xmm6 - por %xmm4, %xmm3 - movmskps %xmm3, %eax - -/* j = Lo(pHH)&0x0000007f */ - pand %xmm7, %xmm6 - movq _iOne(%rdx), %xmm3 - -/* _n = Lo(pHH); - _n = _n & 0xffffff80; - _n = _n >> 7; - Hi(_2n) = (0x3ff+_n)<<20; Lo(_2n) = 0; -> 2^n - */ - pslld $13, %xmm7 - paddd %xmm3, %xmm7 - pslld $4, %xmm6 - movups _cev_1(%rdx), %xmm3 - movaps %xmm13, %xmm4 - mulpd %xmm13, %xmm3 - -/* T1 = ((double*)exp2_tbl)[ 2*j ] */ - movd %xmm6, %r10d - pshufd $80, %xmm7, %xmm0 - andps _ifff0000000000000(%rdx), %xmm0 - addpd _cev_2(%rdx), %xmm3 - mulpd %xmm13, %xmm3 - addpd _cev_3(%rdx), %xmm3 - mulpd %xmm13, %xmm3 - movslq %r10d, %r10 - andl $3, %eax - pextrd $1, %xmm6, %r11d - movslq %r11d, %r11 - addpd _cev_4(%rdx), %xmm3 - movsd 36416(%rdx,%r10), %xmm2 - movhpd 36416(%rdx,%r11), %xmm2 - mulpd %xmm2, %xmm0 - mulpd %xmm3, %xmm13 - mulpd %xmm0, %xmm4 - addpd _cev_5(%rdx), %xmm13 - mulpd %xmm4, %xmm13 - addpd %xmm13, %xmm0 - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movups 208(%rsp), %xmm8 - movups 176(%rsp), %xmm9 - movups 160(%rsp), %xmm10 - movups 144(%rsp), %xmm11 - movups 112(%rsp), %xmm12 - movups 96(%rsp), %xmm13 - movups 80(%rsp), %xmm14 - movups 48(%rsp), %xmm15 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - movups (%rsp), %xmm1 - movups %xmm1, 64(%rsp) - movups %xmm9, 128(%rsp) - movups %xmm0, 192(%rsp) - je .LBL_1_2 - - xorb %cl, %cl - xorl %edx, %edx - movq %rsi, 8(%rsp) - movq %rdi, (%rsp) - movq %r12, 40(%rsp) - cfi_offset_rel_rsp (12, 40) - movb %cl, %r12b - movq %r13, 32(%rsp) - cfi_offset_rel_rsp (13, 32) - movl %eax, %r13d - movq %r14, 24(%rsp) - cfi_offset_rel_rsp (14, 24) - movl %edx, %r14d - movq %r15, 16(%rsp) - cfi_offset_rel_rsp (15, 16) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - movq 8(%rsp), %rsi - movq (%rsp), %rdi - movq 40(%rsp), %r12 - cfi_restore (%r12) - movq 32(%rsp), %r13 - cfi_restore (%r13) - movq 24(%rsp), %r14 - cfi_restore (%r14) - movq 16(%rsp), %r15 - cfi_restore (%r15) - movups 192(%rsp), %xmm0 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - movsd 72(%rsp,%r15), %xmm0 - movsd 136(%rsp,%r15), %xmm1 - - call JUMPTARGET(__pow_finite) - - movsd %xmm0, 200(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - movsd 64(%rsp,%r15), %xmm0 - movsd 128(%rsp,%r15), %xmm1 - - call JUMPTARGET(__pow_finite) - - movsd %xmm0, 192(%rsp,%r15) - jmp .LBL_1_7 - -END (_ZGVbN2vv_pow_sse4) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.S deleted file mode 100644 index eea8af6638..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized pow. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVdN4vv_pow) - .type _ZGVdN4vv_pow, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVdN4vv_pow_avx2(%rip), %rax - HAS_ARCH_FEATURE (AVX2_Usable) - jz 2f - ret -2: leaq _ZGVdN4vv_pow_sse_wrapper(%rip), %rax - ret -END (_ZGVdN4vv_pow) -libmvec_hidden_def (_ZGVdN4vv_pow) - -#define _ZGVdN4vv_pow _ZGVdN4vv_pow_sse_wrapper -#include "../svml_d_pow4_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core_avx2.S deleted file mode 100644 index 3092328909..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core_avx2.S +++ /dev/null @@ -1,387 +0,0 @@ -/* Function pow vectorized with AVX2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_pow_data.h" - - .text -ENTRY (_ZGVdN4vv_pow_avx2) -/* - ALGORITHM DESCRIPTION: - - 1) Calculating log2|x| - Here we use the following formula. - Let |x|=2^k1*X1, where k1 is integer, 1<=X1<2. - Let C ~= 1/ln(2), - Rcp1 ~= 1/X1, X2=Rcp1*X1, - Rcp2 ~= 1/X2, X3=Rcp2*X2, - Rcp3 ~= 1/X3, Rcp3C ~= C/X3. - Then - log2|x| = k1 + log2(1/Rcp1) + log2(1/Rcp2) + log2(C/Rcp3C) + - log2(X1*Rcp1*Rcp2*Rcp3C/C), - where X1*Rcp1*Rcp2*Rcp3C = C*(1+q), q is very small. - - The values of Rcp1, log2(1/Rcp1), Rcp2, log2(1/Rcp2), - Rcp3C, log2(C/Rcp3C) are taken from tables. - Values of Rcp1, Rcp2, Rcp3C are such that RcpC=Rcp1*Rcp2*Rcp3C - is exactly represented in target precision. - - log2(X1*Rcp1*Rcp2*Rcp3C/C) = log2(1+q) = ln(1+q)/ln2 = - = 1/(ln2)*q - 1/(2ln2)*q^2 + 1/(3ln2)*q^3 - ... = - = 1/(C*ln2)*cq - 1/(2*C^2*ln2)*cq^2 + 1/(3*C^3*ln2)*cq^3 - ... = - = (1 + a1)*cq + a2*cq^2 + a3*cq^3 + ..., - where cq = X1*Rcp1*Rcp2*Rcp3C-C, - a1=1/(C*ln(2))-1 is small, - a2=1/(2*C^2*ln2), - a3=1/(3*C^3*ln2), - ... - We get 3 parts of log2 result: HH+HL+HLL ~= log2|x|. - - 2) Calculation of y*(HH+HL+HLL). - Split y into YHi+YLo. - Get high PH and medium PL parts of y*log2|x|. - Get low PLL part of y*log2|x|. - Now we have PH+PL+PLL ~= y*log2|x|. - - 3) Calculation of 2^(PH+PL+PLL). - Mathematical idea of computing 2^(PH+PL+PLL) is the following. - Let's represent PH+PL+PLL in the form N + j/2^expK + Z, - where expK=7 in this implementation, N and j are integers, - 0<=j<=2^expK-1, |Z|<2^(-expK-1). - Hence 2^(PH+PL+PLL) ~= 2^N * 2^(j/2^expK) * 2^Z, - where 2^(j/2^expK) is stored in a table, and - 2^Z ~= 1 + B1*Z + B2*Z^2 ... + B5*Z^5. - - We compute 2^(PH+PL+PLL) as follows. - Break PH into PHH + PHL, where PHH = N + j/2^expK. - Z = PHL + PL + PLL - Exp2Poly = B1*Z + B2*Z^2 ... + B5*Z^5 - Get 2^(j/2^expK) from table in the form THI+TLO. - Now we have 2^(PH+PL+PLL) ~= 2^N * (THI + TLO) * (1 + Exp2Poly). - - Get significand of 2^(PH+PL+PLL) in the form ResHi+ResLo: - ResHi := THI - ResLo := THI * Exp2Poly + TLO - - Get exponent ERes of the result: - Res := ResHi + ResLo: - Result := ex(Res) + N. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $448, %rsp - movq __svml_dpow_data@GOTPCREL(%rip), %rax - vmovups %ymm11, 160(%rsp) - vmovups %ymm8, 224(%rsp) - vmovups %ymm10, 352(%rsp) - vmovups %ymm9, 384(%rsp) - vmovups %ymm13, 288(%rsp) - vmovapd %ymm1, %ymm11 - vxorpd %ymm1, %ymm1, %ymm1 - vextracti128 $1, %ymm0, %xmm5 - vshufps $221, %xmm5, %xmm0, %xmm5 - -/* i = (((Hi(x) & 0x000ffe00) + 0x00000200) >> 10); -> i = (b1..b11 + 1) / 2 */ - vandps _iIndexMask(%rax), %xmm5, %xmm3 - vpaddd _iIndexAdd(%rax), %xmm3, %xmm6 - vpsrld $10, %xmm6, %xmm8 - -/* Index for reciprocal table */ - vpslld $3, %xmm8, %xmm9 - -/* Index for log2 table */ - vpslld $4, %xmm8, %xmm6 - -/* x1 = x; Hi(x1) = (Hi(x1)&0x000fffff)|0x3ff00000 */ - vandpd _iMantissaMask(%rax), %ymm0, %ymm4 - vorpd _dbOne(%rax), %ymm4, %ymm13 - vpcmpeqd %ymm4, %ymm4, %ymm4 - vpcmpeqd %ymm8, %ymm8, %ymm8 - -/* k = Hi(x); k = k - 0x3fe7fe00; k = k >> 20 */ - vpsubd _i3fe7fe00(%rax), %xmm5, %xmm3 - vpaddd _HIDELTA(%rax), %xmm5, %xmm5 - vextracti128 $1, %ymm11, %xmm7 - vshufps $221, %xmm7, %xmm11, %xmm2 - vpand _ABSMASK(%rax), %xmm2, %xmm10 - vpcmpeqd %ymm2, %ymm2, %ymm2 - vgatherdpd %ymm2, 11712(%rax,%xmm9), %ymm1 - vmovups _LORANGE(%rax), %xmm7 - vxorpd %ymm2, %ymm2, %ymm2 - vgatherdpd %ymm4, 19968(%rax,%xmm6), %ymm2 - vxorpd %ymm4, %ymm4, %ymm4 - vgatherdpd %ymm8, 19976(%rax,%xmm6), %ymm4 - vpsrad $20, %xmm3, %xmm6 - vpaddd _i2p20_2p19(%rax), %xmm6, %xmm9 - vpshufd $80, %xmm9, %xmm8 - vpshufd $250, %xmm9, %xmm3 - -/* x1Hi=x1; Lo(x1Hi)&=0xf8000000; x1Lo = x1-x1Hi */ - vandpd _iHighMask(%rax), %ymm13, %ymm9 - vinserti128 $1, %xmm3, %ymm8, %ymm6 - vandpd _iffffffff00000000(%rax), %ymm6, %ymm8 - -/* r1 = x1*rcp1 */ - vmulpd %ymm1, %ymm13, %ymm6 - vsubpd %ymm9, %ymm13, %ymm3 - vsubpd _db2p20_2p19(%rax), %ymm8, %ymm8 - -/* cq = c+r1 */ - vaddpd _LHN(%rax), %ymm6, %ymm13 - -/* E = -r1+__fence(x1Hi*rcp1) */ - vfmsub213pd %ymm6, %ymm1, %ymm9 - -/* E=E+x1Lo*rcp1 */ - vfmadd213pd %ymm9, %ymm1, %ymm3 - -/* T = k + L1hi */ - vaddpd %ymm2, %ymm8, %ymm1 - -/* T_Rh = T + cq */ - vaddpd %ymm13, %ymm1, %ymm8 - -/* Rl = T-T_Rh; -> -Rh */ - vsubpd %ymm8, %ymm1, %ymm6 - -/* Rl=Rl+cq */ - vaddpd %ymm6, %ymm13, %ymm1 - -/* T_Rh_Eh = T_Rh + E */ - vaddpd %ymm3, %ymm8, %ymm6 - -/* cq = cq + E */ - vaddpd %ymm3, %ymm13, %ymm13 - -/* HLL = T_Rh - T_Rh_Eh; -> -Eh */ - vsubpd %ymm6, %ymm8, %ymm9 - -/* HLL+=E; -> El */ - vaddpd %ymm9, %ymm3, %ymm2 - -/* HLL+=Rl */ - vaddpd %ymm1, %ymm2, %ymm8 - -/* HLL+=L1lo */ - vaddpd %ymm4, %ymm8, %ymm4 - vmovupd _clv_2(%rax), %ymm8 - -/* HLL = HLL + (((((((a7)*cq+a6)*cq+a5)*cq+a4)*cq+a3)*cq+a2)*cq+a1)*cq */ - vfmadd213pd _clv_3(%rax), %ymm13, %ymm8 - vfmadd213pd _clv_4(%rax), %ymm13, %ymm8 - vfmadd213pd _clv_5(%rax), %ymm13, %ymm8 - vfmadd213pd _clv_6(%rax), %ymm13, %ymm8 - vfmadd213pd _clv_7(%rax), %ymm13, %ymm8 - vfmadd213pd %ymm4, %ymm13, %ymm8 - -/* T_Rh_Eh_HLLhi = T_Rh_Eh + HLL */ - vaddpd %ymm8, %ymm6, %ymm9 - -/* HH = T_Rh_Eh_HLLhi; Lo(HH)&=0xf8000000 */ - vandpd _iHighMask(%rax), %ymm9, %ymm2 - -/* - 2^(y*(HH+HL+HLL)) starts here: - yH = y; Lo(yH)&=0xf8000000; - */ - vandpd _iHighMask(%rax), %ymm11, %ymm1 - -/* HLLhi = T_Rh_Eh_HLLhi - T_Rh_Eh */ - vsubpd %ymm6, %ymm9, %ymm13 - -/* HL = T_Rh_Eh_HLLhi-HH */ - vsubpd %ymm2, %ymm9, %ymm4 - -/* pH = yH*HH */ - vmulpd %ymm2, %ymm1, %ymm9 - -/* HLL = HLL - HLLhi */ - vsubpd %ymm13, %ymm8, %ymm6 - -/* yL = y-yH */ - vsubpd %ymm1, %ymm11, %ymm8 - vextracti128 $1, %ymm9, %xmm3 - vshufps $221, %xmm3, %xmm9, %xmm13 - vpand _ABSMASK(%rax), %xmm13, %xmm3 - vpcmpgtd %xmm5, %xmm7, %xmm13 - vpcmpgtd _INF(%rax), %xmm10, %xmm7 - vpcmpeqd _INF(%rax), %xmm10, %xmm10 - vpor %xmm10, %xmm7, %xmm7 - vpor %xmm7, %xmm13, %xmm5 - -/* pL=yL*HL+yH*HL; pL+=yL*HH */ - vmulpd %ymm4, %ymm8, %ymm7 - vpcmpgtd _DOMAINRANGE(%rax), %xmm3, %xmm13 - vpcmpeqd _DOMAINRANGE(%rax), %xmm3, %xmm10 - vpor %xmm10, %xmm13, %xmm3 - vpor %xmm3, %xmm5, %xmm13 - vfmadd213pd %ymm7, %ymm4, %ymm1 - -/* pLL = y*HLL; - pHH = pH + *(double*)&db2p45_2p44 - */ - vaddpd _db2p45_2p44(%rax), %ymm9, %ymm7 - vmovmskps %xmm13, %ecx - vfmadd213pd %ymm1, %ymm2, %ymm8 - -/* t=pL+pLL; t+=pHL */ - vfmadd231pd %ymm11, %ymm6, %ymm8 - vextracti128 $1, %ymm7, %xmm1 - vshufps $136, %xmm1, %xmm7, %xmm10 - -/* _n = Lo(pHH); - _n = _n & 0xffffff80; - _n = _n >> 7; - Hi(_2n) = (0x3ff+_n)<<20; Lo(_2n) = 0; -> 2^n - */ - vpslld $13, %xmm10, %xmm2 - vpaddd _iOne(%rax), %xmm2, %xmm13 - vpshufd $80, %xmm13, %xmm4 - vpshufd $250, %xmm13, %xmm1 - -/* j = Lo(pHH)&0x0000007f */ - vandps _jIndexMask(%rax), %xmm10, %xmm3 - -/* T1 = ((double*)exp2_tbl)[ 2*j ] */ - vpcmpeqd %ymm10, %ymm10, %ymm10 - vpslld $4, %xmm3, %xmm5 - -/* pHH = pHH - *(double*)&db2p45_2p44 */ - vsubpd _db2p45_2p44(%rax), %ymm7, %ymm7 - -/* pHL = pH - pHH */ - vsubpd %ymm7, %ymm9, %ymm9 - vaddpd %ymm9, %ymm8, %ymm6 - vinserti128 $1, %xmm1, %ymm4, %ymm2 - vxorpd %ymm1, %ymm1, %ymm1 - vgatherdpd %ymm10, 36416(%rax,%xmm5), %ymm1 - vandpd _ifff0000000000000(%rax), %ymm2, %ymm13 - vmovupd _cev_1(%rax), %ymm2 - vmulpd %ymm1, %ymm13, %ymm1 - vfmadd213pd _cev_2(%rax), %ymm6, %ymm2 - vmulpd %ymm6, %ymm1, %ymm8 - vfmadd213pd _cev_3(%rax), %ymm6, %ymm2 - vfmadd213pd _cev_4(%rax), %ymm6, %ymm2 - vfmadd213pd _cev_5(%rax), %ymm6, %ymm2 - vfmadd213pd %ymm1, %ymm8, %ymm2 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovups 224(%rsp), %ymm8 - vmovups 384(%rsp), %ymm9 - vmovups 352(%rsp), %ymm10 - vmovups 160(%rsp), %ymm11 - vmovups 288(%rsp), %ymm13 - vmovdqa %ymm2, %ymm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovupd %ymm0, 192(%rsp) - vmovupd %ymm11, 256(%rsp) - vmovupd %ymm2, 320(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - vmovups %ymm12, 64(%rsp) - vmovups %ymm14, 32(%rsp) - vmovups %ymm15, (%rsp) - movq %rsi, 104(%rsp) - movq %rdi, 96(%rsp) - movq %r12, 136(%rsp) - cfi_offset_rel_rsp (12, 136) - movb %dl, %r12b - movq %r13, 128(%rsp) - cfi_offset_rel_rsp (13, 128) - movl %ecx, %r13d - movq %r14, 120(%rsp) - cfi_offset_rel_rsp (14, 120) - movl %eax, %r14d - movq %r15, 112(%rsp) - cfi_offset_rel_rsp (15, 112) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - vmovups 64(%rsp), %ymm12 - vmovups 32(%rsp), %ymm14 - vmovups (%rsp), %ymm15 - vmovupd 320(%rsp), %ymm2 - movq 104(%rsp), %rsi - movq 96(%rsp), %rdi - movq 136(%rsp), %r12 - cfi_restore (%r12) - movq 128(%rsp), %r13 - cfi_restore (%r13) - movq 120(%rsp), %r14 - cfi_restore (%r14) - movq 112(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 200(%rsp,%r15), %xmm0 - vmovsd 264(%rsp,%r15), %xmm1 - vzeroupper - - call JUMPTARGET(__pow_finite) - - vmovsd %xmm0, 328(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 192(%rsp,%r15), %xmm0 - vmovsd 256(%rsp,%r15), %xmm1 - vzeroupper - - call JUMPTARGET(__pow_finite) - - vmovsd %xmm0, 320(%rsp,%r15) - jmp .LBL_1_7 - -END (_ZGVdN4vv_pow_avx2) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.S deleted file mode 100644 index 68f12b2848..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of vectorized pow. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVeN8vv_pow) - .type _ZGVeN8vv_pow, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVeN8vv_pow_skx(%rip), %rax - HAS_ARCH_FEATURE (AVX512DQ_Usable) - jnz 2f - leaq _ZGVeN8vv_pow_knl(%rip), %rax - HAS_ARCH_FEATURE (AVX512F_Usable) - jnz 2f - leaq _ZGVeN8vv_pow_avx2_wrapper(%rip), %rax -2: ret -END (_ZGVeN8vv_pow) - -#define _ZGVeN8vv_pow _ZGVeN8vv_pow_avx2_wrapper -#include "../svml_d_pow8_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core_avx512.S deleted file mode 100644 index 2190c1f6b4..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core_avx512.S +++ /dev/null @@ -1,741 +0,0 @@ -/* Function pow vectorized with AVX-512. KNL and SKX versions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_pow_data.h" -#include "svml_d_wrapper_impl.h" - -/* ALGORITHM DESCRIPTION: - - 1) Calculating log2|x| - Here we use the following formula. - Let |x|=2^k1*X1, where k1 is integer, 1<=X1<2. - Let C ~= 1/ln(2), - Rcp1 ~= 1/X1, X2=Rcp1*X1, - Rcp2 ~= 1/X2, X3=Rcp2*X2, - Rcp3 ~= 1/X3, Rcp3C ~= C/X3. - Then - log2|x| = k1 + log2(1/Rcp1) + log2(1/Rcp2) + log2(C/Rcp3C) + - log2(X1*Rcp1*Rcp2*Rcp3C/C), - where X1*Rcp1*Rcp2*Rcp3C = C*(1+q), q is very small. - - The values of Rcp1, log2(1/Rcp1), Rcp2, log2(1/Rcp2), - Rcp3C, log2(C/Rcp3C) are taken from tables. - Values of Rcp1, Rcp2, Rcp3C are such that RcpC=Rcp1*Rcp2*Rcp3C - is exactly represented in target precision. - - log2(X1*Rcp1*Rcp2*Rcp3C/C) = log2(1+q) = ln(1+q)/ln2 = - = 1/(ln2)*q - 1/(2ln2)*q^2 + 1/(3ln2)*q^3 - ... = - = 1/(C*ln2)*cq - 1/(2*C^2*ln2)*cq^2 + 1/(3*C^3*ln2)*cq^3 - ... = - = (1 + a1)*cq + a2*cq^2 + a3*cq^3 + ..., - where cq = X1*Rcp1*Rcp2*Rcp3C-C, - a1=1/(C*ln(2))-1 is small, - a2=1/(2*C^2*ln2), - a3=1/(3*C^3*ln2), - ... - We get 3 parts of log2 result: HH+HL+HLL ~= log2|x|. - - 2) Calculation of y*(HH+HL+HLL). - Split y into YHi+YLo. - Get high PH and medium PL parts of y*log2|x|. - Get low PLL part of y*log2|x|. - Now we have PH+PL+PLL ~= y*log2|x|. - - 3) Calculation of 2^(PH+PL+PLL). - Mathematical idea of computing 2^(PH+PL+PLL) is the following. - Let's represent PH+PL+PLL in the form N + j/2^expK + Z, - where expK=7 in this implementation, N and j are integers, - 0<=j<=2^expK-1, |Z|<2^(-expK-1). - Hence 2^(PH+PL+PLL) ~= 2^N * 2^(j/2^expK) * 2^Z, - where 2^(j/2^expK) is stored in a table, and - 2^Z ~= 1 + B1*Z + B2*Z^2 ... + B5*Z^5. - - We compute 2^(PH+PL+PLL) as follows. - Break PH into PHH + PHL, where PHH = N + j/2^expK. - Z = PHL + PL + PLL - Exp2Poly = B1*Z + B2*Z^2 ... + B5*Z^5 - Get 2^(j/2^expK) from table in the form THI+TLO. - Now we have 2^(PH+PL+PLL) ~= 2^N * (THI + TLO) * (1 + Exp2Poly). - - Get significand of 2^(PH+PL+PLL) in the form ResHi+ResLo: - ResHi := THI - ResLo := THI * Exp2Poly + TLO - - Get exponent ERes of the result: - Res := ResHi + ResLo: - Result := ex(Res) + N. */ - - .text -ENTRY (_ZGVeN8vv_pow_knl) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512_ff _ZGVdN4vv_pow -#else - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1344, %rsp - vpsrlq $32, %zmm0, %zmm13 - vmovaps %zmm1, %zmm12 - movq __svml_dpow_data@GOTPCREL(%rip), %rax - movl $255, %edx - vpmovqd %zmm13, %ymm10 - vpsrlq $32, %zmm12, %zmm14 - kmovw %edx, %k1 - movl $-1, %ecx - vpmovqd %zmm14, %ymm15 - -/* x1 = x; Hi(x1) = (Hi(x1)&0x000fffff)|0x3ff00000 */ - vmovups _dbOne(%rax), %zmm6 - -/* i = (((Hi(x) & 0x000ffe00) + 0x00000200) >> 10); -> i = (b1..b11 + 1) / 2 */ - vmovaps %zmm10, %zmm5 - -/* k = Hi(x); k = k - 0x3fe7fe00; k = k >> 20 */ - vpsubd _i3fe7fe00(%rax), %zmm10, %zmm14{%k1} - vpandd _iIndexMask(%rax), %zmm10, %zmm5{%k1} - vpsrad $20, %zmm14, %zmm14{%k1} - vpxord %zmm9, %zmm9, %zmm9 - vpaddd _HIDELTA(%rax), %zmm10, %zmm3{%k1} - vpaddd _iIndexAdd(%rax), %zmm5, %zmm5{%k1} - vpxord %zmm7, %zmm7, %zmm7 - vpaddd _i2p20_2p19(%rax), %zmm14, %zmm14{%k1} - vpcmpd $1, _LORANGE(%rax), %zmm3, %k2{%k1} - vpsrld $10, %zmm5, %zmm5{%k1} - vpandd _ABSMASK(%rax), %zmm15, %zmm2{%k1} - vpbroadcastd %ecx, %zmm1{%k2}{z} - -/* Index for reciprocal table */ - vpslld $3, %zmm5, %zmm8{%k1} - kxnorw %k2, %k2, %k2 - vgatherdpd 11712(%rax,%ymm8), %zmm9{%k2} - vpmovzxdq %ymm14, %zmm10 - -/* Index for log2 table */ - vpslld $4, %zmm5, %zmm13{%k1} - kxnorw %k2, %k2, %k2 - vpsllq $32, %zmm10, %zmm3 - vpxord %zmm8, %zmm8, %zmm8 - vpcmpd $5, _INF(%rax), %zmm2, %k3{%k1} - vpbroadcastd %ecx, %zmm4{%k3}{z} - vpternlogq $248, _iMantissaMask(%rax), %zmm0, %zmm6 - kxnorw %k3, %k3, %k3 - vpternlogq $168, _iffffffff00000000(%rax), %zmm10, %zmm3 - -/* x1Hi=x1; Lo(x1Hi)&=0xf8000000; x1Lo = x1-x1Hi */ - vpandq _iHighMask(%rax), %zmm6, %zmm2 - vgatherdpd 19976(%rax,%ymm13), %zmm8{%k2} - vpord %zmm4, %zmm1, %zmm11{%k1} - vsubpd _db2p20_2p19(%rax), %zmm3, %zmm1 - vsubpd %zmm2, %zmm6, %zmm5 - -/* r1 = x1*rcp1 */ - vmulpd %zmm9, %zmm6, %zmm6 - vgatherdpd 19968(%rax,%ymm13), %zmm7{%k3} - -/* cq = c+r1 */ - vaddpd _LHN(%rax), %zmm6, %zmm4 - -/* E = -r1+__fence(x1Hi*rcp1) */ - vfmsub213pd %zmm6, %zmm9, %zmm2 - -/* T = k + L1hi */ - vaddpd %zmm7, %zmm1, %zmm7 - -/* E=E+x1Lo*rcp1 */ - vfmadd213pd %zmm2, %zmm9, %zmm5 - -/* T_Rh = T + cq */ - vaddpd %zmm4, %zmm7, %zmm3 - -/* Rl = T-T_Rh; -> -Rh */ - vsubpd %zmm3, %zmm7, %zmm9 - -/* Rl=Rl+cq */ - vaddpd %zmm9, %zmm4, %zmm6 - -/* T_Rh_Eh = T_Rh + E */ - vaddpd %zmm5, %zmm3, %zmm9 - -/* HLL = T_Rh - T_Rh_Eh; -> -Eh */ - vsubpd %zmm9, %zmm3, %zmm2 - -/* cq = cq + E; */ - vaddpd %zmm5, %zmm4, %zmm4 - -/* HLL+=E; -> El */ - vaddpd %zmm2, %zmm5, %zmm1 - vmovups _clv_2(%rax), %zmm5 - -/* HLL = HLL + (((((((a7)*cq+a6)*cq+a5)*cq+a4)*cq+a3)*cq+a2)*cq+a1)*cq */ - vfmadd213pd _clv_3(%rax), %zmm4, %zmm5 - -/* HLL+=Rl */ - vaddpd %zmm6, %zmm1, %zmm7 - -/* 2^(y*(HH+HL+HLL)) starts here: - yH = y; Lo(yH)&=0xf8000000 - */ - vpandq _iHighMask(%rax), %zmm12, %zmm6 - -/* yL = y-yH */ - vsubpd %zmm6, %zmm12, %zmm2 - vfmadd213pd _clv_4(%rax), %zmm4, %zmm5 - -/* HLL+=L1lo */ - vaddpd %zmm8, %zmm7, %zmm8 - vfmadd213pd _clv_5(%rax), %zmm4, %zmm5 - vfmadd213pd _clv_6(%rax), %zmm4, %zmm5 - vfmadd213pd _clv_7(%rax), %zmm4, %zmm5 - vfmadd213pd %zmm8, %zmm4, %zmm5 - -/* T_Rh_Eh_HLLhi = T_Rh_Eh + HLL */ - vaddpd %zmm5, %zmm9, %zmm13 - -/* HLLhi = T_Rh_Eh_HLLhi - T_Rh_Eh */ - vsubpd %zmm9, %zmm13, %zmm10 - -/* HLL = HLL - HLLhi */ - vsubpd %zmm10, %zmm5, %zmm3 - -/* HH = T_Rh_Eh_HLLhi; Lo(HH)&=0xf8000000 */ - vpandq _iHighMask(%rax), %zmm13, %zmm5 - -/* pH = yH*HH */ - vmulpd %zmm5, %zmm6, %zmm1 - -/* HL = T_Rh_Eh_HLLhi-HH */ - vsubpd %zmm5, %zmm13, %zmm4 - vpsrlq $32, %zmm1, %zmm14 - -/* pLL = y*HLL; - pHH = pH + *(double*)&db2p45_2p44 - */ - vaddpd _db2p45_2p44(%rax), %zmm1, %zmm10 - vpmovqd %zmm14, %ymm15 - vpandd _ABSMASK(%rax), %zmm15, %zmm14{%k1} - vpcmpd $5, _DOMAINRANGE(%rax), %zmm14, %k3{%k1} - -/* T1 = ((double*)exp2_tbl)[ 2*j ] */ - vpxord %zmm14, %zmm14, %zmm14 - vpbroadcastd %ecx, %zmm13{%k3}{z} - vpord %zmm13, %zmm11, %zmm11{%k1} - vptestmd %zmm11, %zmm11, %k0{%k1} - -/* pL=yL*HL+yH*HL; pL+=yL*HH */ - vmulpd %zmm4, %zmm2, %zmm11 - kmovw %k0, %ecx - vfmadd213pd %zmm11, %zmm4, %zmm6 - -/* pHH = pHH - *(double*)&db2p45_2p44 */ - vsubpd _db2p45_2p44(%rax), %zmm10, %zmm11 - vpmovqd %zmm10, %ymm4 - movzbl %cl, %ecx - -/* _n = Lo(pHH); - _n = _n & 0xffffff80; - _n = _n >> 7; - Hi(_2n) = (0x3ff+_n)<<20; Lo(_2n) = 0; -> 2^n - */ - vpslld $13, %zmm4, %zmm7{%k1} - -/* j = Lo(pHH)&0x0000007f */ - vpandd _jIndexMask(%rax), %zmm4, %zmm9{%k1} - vfmadd213pd %zmm6, %zmm5, %zmm2 - -/* pHL = pH - pHH */ - vsubpd %zmm11, %zmm1, %zmm1 - vpaddd _iOne(%rax), %zmm7, %zmm7{%k1} - -/* t=pL+pLL; t+=pHL */ - vfmadd231pd %zmm12, %zmm3, %zmm2 - vpslld $4, %zmm9, %zmm9{%k1} - kxnorw %k1, %k1, %k1 - vgatherdpd 36416(%rax,%ymm9), %zmm14{%k1} - vpmovzxdq %ymm7, %zmm8 - vaddpd %zmm1, %zmm2, %zmm2 - vmovups _cev_1(%rax), %zmm1 - vpsllq $32, %zmm8, %zmm13 - vpternlogq $168, _ifff0000000000000(%rax), %zmm8, %zmm13 - vfmadd213pd _cev_2(%rax), %zmm2, %zmm1 - vmulpd %zmm14, %zmm13, %zmm15 - vfmadd213pd _cev_3(%rax), %zmm2, %zmm1 - vmulpd %zmm2, %zmm15, %zmm3 - vfmadd213pd _cev_4(%rax), %zmm2, %zmm1 - vfmadd213pd _cev_5(%rax), %zmm2, %zmm1 - vfmadd213pd %zmm15, %zmm3, %zmm1 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm12, 1216(%rsp) - vmovups %zmm1, 1280(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - kmovw %k4, 1048(%rsp) - xorl %eax, %eax - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - addb $1, %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - kmovw 1048(%rsp), %k4 - movq 1064(%rsp), %rsi - kmovw 1040(%rsp), %k5 - movq 1056(%rsp), %rdi - kmovw 1032(%rsp), %k6 - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - vmovups 1280(%rsp), %zmm1 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1160(%rsp,%r15), %xmm0 - vmovsd 1224(%rsp,%r15), %xmm1 - call JUMPTARGET(__pow_finite) - vmovsd %xmm0, 1288(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1152(%rsp,%r15), %xmm0 - vmovsd 1216(%rsp,%r15), %xmm1 - call JUMPTARGET(__pow_finite) - vmovsd %xmm0, 1280(%rsp,%r15) - jmp .LBL_1_7 - -#endif -END (_ZGVeN8vv_pow_knl) - -ENTRY (_ZGVeN8vv_pow_skx) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512_ff _ZGVdN4vv_pow -#else - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1344, %rsp - vpsrlq $32, %zmm0, %zmm10 - kxnorw %k1, %k1, %k1 - kxnorw %k2, %k2, %k2 - kxnorw %k3, %k3, %k3 - vpmovqd %zmm10, %ymm7 - movq __svml_dpow_data@GOTPCREL(%rip), %rax - vmovaps %zmm1, %zmm6 - vpsrlq $32, %zmm6, %zmm13 - -/* i = (((Hi(x) & 0x000ffe00) + 0x00000200) >> 10); -> i = (b1..b11 + 1) / 2 */ - vpand _iIndexMask(%rax), %ymm7, %ymm15 - vpaddd _HIDELTA(%rax), %ymm7, %ymm2 - -/* k = Hi(x); k = k - 0x3fe7fe00; k = k >> 20 */ - vpsubd _i3fe7fe00(%rax), %ymm7, %ymm7 - vmovdqu _ABSMASK(%rax), %ymm4 - vmovdqu _LORANGE(%rax), %ymm3 - -/* x1 = x; Hi(x1) = (Hi(x1)&0x000fffff)|0x3ff00000 */ - vmovups _dbOne(%rax), %zmm11 - vmovdqu _INF(%rax), %ymm5 - vpaddd _iIndexAdd(%rax), %ymm15, %ymm12 - vpmovqd %zmm13, %ymm14 - vpternlogq $248, _iMantissaMask(%rax), %zmm0, %zmm11 - vpsrld $10, %ymm12, %ymm10 - vpsrad $20, %ymm7, %ymm13 - -/* Index for reciprocal table */ - vpslld $3, %ymm10, %ymm8 - -/* Index for log2 table */ - vpslld $4, %ymm10, %ymm1 - vpcmpgtd %ymm2, %ymm3, %ymm3 - vpand %ymm4, %ymm14, %ymm2 - vpaddd _i2p20_2p19(%rax), %ymm13, %ymm14 - vpmovzxdq %ymm14, %zmm15 - vpsllq $32, %zmm15, %zmm7 - vpternlogq $168, _iffffffff00000000(%rax), %zmm15, %zmm7 - vsubpd _db2p20_2p19(%rax), %zmm7, %zmm13 - vpxord %zmm9, %zmm9, %zmm9 - vgatherdpd 11712(%rax,%ymm8), %zmm9{%k1} - -/* T1 = ((double*)exp2_tbl)[ 2*j ] */ - kxnorw %k1, %k1, %k1 - vpxord %zmm12, %zmm12, %zmm12 - vpxord %zmm8, %zmm8, %zmm8 - vgatherdpd 19968(%rax,%ymm1), %zmm12{%k2} - vgatherdpd 19976(%rax,%ymm1), %zmm8{%k3} - vmovups _iHighMask(%rax), %zmm1 - -/* x1Hi=x1; Lo(x1Hi)&=0xf8000000; x1Lo = x1-x1Hi */ - vandpd %zmm1, %zmm11, %zmm10 - vsubpd %zmm10, %zmm11, %zmm15 - -/* r1 = x1*rcp1 */ - vmulpd %zmm9, %zmm11, %zmm11 - -/* E = -r1+__fence(x1Hi*rcp1) */ - vfmsub213pd %zmm11, %zmm9, %zmm10 - -/* cq = c+r1 */ - vaddpd _LHN(%rax), %zmm11, %zmm14 - -/* E=E+x1Lo*rcp1 */ - vfmadd213pd %zmm10, %zmm9, %zmm15 - -/* T = k + L1hi */ - vaddpd %zmm12, %zmm13, %zmm9 - -/* T_Rh = T + cq */ - vaddpd %zmm14, %zmm9, %zmm11 - -/* T_Rh_Eh = T_Rh + E */ - vaddpd %zmm15, %zmm11, %zmm13 - -/* Rl = T-T_Rh; -> -Rh */ - vsubpd %zmm11, %zmm9, %zmm12 - -/* HLL = T_Rh - T_Rh_Eh; -> -Eh */ - vsubpd %zmm13, %zmm11, %zmm9 - -/* Rl=Rl+cq */ - vaddpd %zmm12, %zmm14, %zmm10 - -/* HLL+=E; -> El */ - vaddpd %zmm9, %zmm15, %zmm7 - -/* HLL+=Rl */ - vaddpd %zmm10, %zmm7, %zmm12 - -/* 2^(y*(HH+HL+HLL)) starts here: - yH = y; Lo(yH)&=0xf8000000 - */ - vandpd %zmm1, %zmm6, %zmm7 - -/* HLL+=L1lo */ - vaddpd %zmm8, %zmm12, %zmm12 - -/* cq = cq + E */ - vaddpd %zmm15, %zmm14, %zmm8 - vmovups _clv_2(%rax), %zmm14 - -/* HLL = HLL + (((((((a7)*cq+a6)*cq+a5)*cq+a4)*cq+a3)*cq+a2)*cq+a1)*cq */ - vfmadd213pd _clv_3(%rax), %zmm8, %zmm14 - vfmadd213pd _clv_4(%rax), %zmm8, %zmm14 - vfmadd213pd _clv_5(%rax), %zmm8, %zmm14 - vfmadd213pd _clv_6(%rax), %zmm8, %zmm14 - vfmadd213pd _clv_7(%rax), %zmm8, %zmm14 - vfmadd213pd %zmm12, %zmm8, %zmm14 - -/* yL = y-yH */ - vsubpd %zmm7, %zmm6, %zmm8 - -/* T_Rh_Eh_HLLhi = T_Rh_Eh + HLL */ - vaddpd %zmm14, %zmm13, %zmm15 - -/* HH = T_Rh_Eh_HLLhi; Lo(HH)&=0xf8000000 */ - vandpd %zmm1, %zmm15, %zmm11 - -/* HLLhi = T_Rh_Eh_HLLhi - T_Rh_Eh */ - vsubpd %zmm13, %zmm15, %zmm13 - -/* pH = yH*HH */ - vmulpd %zmm11, %zmm7, %zmm9 - -/* HLL = HLL - HLLhi */ - vsubpd %zmm13, %zmm14, %zmm12 - -/* HL = T_Rh_Eh_HLLhi-HH */ - vsubpd %zmm11, %zmm15, %zmm10 - vpsrlq $32, %zmm9, %zmm1 - vmovdqu _DOMAINRANGE(%rax), %ymm13 - vpmovqd %zmm1, %ymm1 - vpand %ymm4, %ymm1, %ymm1 - vpcmpgtd %ymm5, %ymm2, %ymm4 - vpcmpeqd %ymm5, %ymm2, %ymm5 - vpternlogd $254, %ymm5, %ymm4, %ymm3 - vpcmpgtd %ymm13, %ymm1, %ymm2 - vpcmpeqd %ymm13, %ymm1, %ymm4 - vpternlogd $254, %ymm4, %ymm2, %ymm3 - -/* pLL = y*HLL */ - vmovups _db2p45_2p44(%rax), %zmm2 - -/* pHH = pH + *(double*)&db2p45_2p44 */ - vaddpd %zmm2, %zmm9, %zmm1 - vpmovqd %zmm1, %ymm5 - -/* j = Lo(pHH)&0x0000007f */ - vpand _jIndexMask(%rax), %ymm5, %ymm14 - vpslld $4, %ymm14, %ymm15 - vmovmskps %ymm3, %ecx - -/* pL=yL*HL+yH*HL; pL+=yL*HH */ - vmulpd %zmm10, %zmm8, %zmm3 - vfmadd213pd %zmm3, %zmm10, %zmm7 - vfmadd213pd %zmm7, %zmm11, %zmm8 - -/* _n = Lo(pHH) - _n = _n & 0xffffff80 - _n = _n >> 7 - Hi(_2n) = (0x3ff+_n)<<20; Lo(_2n) = 0; -> 2^n - */ - vpslld $13, %ymm5, %ymm7 - -/* t=pL+pLL; t+=pHL */ - vfmadd231pd %zmm6, %zmm12, %zmm8 - vpaddd _iOne(%rax), %ymm7, %ymm10 - vpmovzxdq %ymm10, %zmm11 - vpsllq $32, %zmm11, %zmm3 - vpternlogq $168, _ifff0000000000000(%rax), %zmm11, %zmm3 - -/* pHH = pHH - *(double*)&db2p45_2p44 */ - vsubpd %zmm2, %zmm1, %zmm11 - vmovups _cev_1(%rax), %zmm2 - -/* pHL = pH - pHH */ - vsubpd %zmm11, %zmm9, %zmm9 - vaddpd %zmm9, %zmm8, %zmm8 - vfmadd213pd _cev_2(%rax), %zmm8, %zmm2 - vfmadd213pd _cev_3(%rax), %zmm8, %zmm2 - vfmadd213pd _cev_4(%rax), %zmm8, %zmm2 - vfmadd213pd _cev_5(%rax), %zmm8, %zmm2 - vpxord %zmm4, %zmm4, %zmm4 - vgatherdpd 36416(%rax,%ymm15), %zmm4{%k1} - vmulpd %zmm4, %zmm3, %zmm1 - vmulpd %zmm8, %zmm1, %zmm12 - vfmadd213pd %zmm1, %zmm12, %zmm2 - testl %ecx, %ecx - jne .LBL_2_3 - -.LBL_2_2: - cfi_remember_state - vmovaps %zmm2, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_2_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm6, 1216(%rsp) - vmovups %zmm2, 1280(%rsp) - je .LBL_2_2 - - xorb %dl, %dl - xorl %eax, %eax - kmovw %k4, 1048(%rsp) - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_2_6: - btl %r14d, %r13d - jc .LBL_2_12 - -.LBL_2_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_2_10 - -.LBL_2_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_2_6 - - kmovw 1048(%rsp), %k4 - kmovw 1040(%rsp), %k5 - kmovw 1032(%rsp), %k6 - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - vmovups 1280(%rsp), %zmm2 - movq 1064(%rsp), %rsi - movq 1056(%rsp), %rdi - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_2_2 - -.LBL_2_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1224(%rsp,%r15), %xmm1 - vzeroupper - vmovsd 1160(%rsp,%r15), %xmm0 - - call JUMPTARGET(__pow_finite) - - vmovsd %xmm0, 1288(%rsp,%r15) - jmp .LBL_2_8 - -.LBL_2_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1216(%rsp,%r15), %xmm1 - vzeroupper - vmovsd 1152(%rsp,%r15), %xmm0 - - call JUMPTARGET(__pow_finite) - - vmovsd %xmm0, 1280(%rsp,%r15) - jmp .LBL_2_7 - -#endif -END (_ZGVeN8vv_pow_skx) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.S deleted file mode 100644 index e35654be8d..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized sin. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVbN2v_sin) - .type _ZGVbN2v_sin, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVbN2v_sin_sse4(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jz 2f - ret -2: leaq _ZGVbN2v_sin_sse2(%rip), %rax - ret -END (_ZGVbN2v_sin) -libmvec_hidden_def (_ZGVbN2v_sin) - -#define _ZGVbN2v_sin _ZGVbN2v_sin_sse2 -#include "../svml_d_sin2_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core_sse4.S deleted file mode 100644 index 393ba03b76..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core_sse4.S +++ /dev/null @@ -1,229 +0,0 @@ -/* Function sin vectorized with SSE4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_trig_data.h" - - .text -ENTRY (_ZGVbN2v_sin_sse4) -/* ALGORITHM DESCRIPTION: - - ( low accuracy ( < 4ulp ) or enhanced performance - ( half of correct mantissa ) implementation ) - - Argument representation: - arg = N*Pi + R - - Result calculation: - sin(arg) = sin(N*Pi + R) = (-1)^N * sin(R) - sin(R) is approximated by corresponding polynomial - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $320, %rsp - movaps %xmm0, %xmm5 - movq __svml_d_trig_data@GOTPCREL(%rip), %rax - movups __dAbsMask(%rax), %xmm3 -/* - ARGUMENT RANGE REDUCTION: - X' = |X| - */ - movaps %xmm3, %xmm4 - -/* SignX - sign bit of X */ - andnps %xmm5, %xmm3 - movups __dInvPI(%rax), %xmm2 - andps %xmm5, %xmm4 - -/* Y = X'*InvPi + RS : right shifter add */ - mulpd %xmm4, %xmm2 - movups __dRShifter(%rax), %xmm6 - -/* R = X' - N*Pi1 */ - movaps %xmm4, %xmm0 - addpd %xmm6, %xmm2 - cmpnlepd __dRangeVal(%rax), %xmm4 - -/* N = Y - RS : right shifter sub */ - movaps %xmm2, %xmm1 - -/* SignRes = Y<<63 : shift LSB to MSB place for result sign */ - psllq $63, %xmm2 - subpd %xmm6, %xmm1 - movmskpd %xmm4, %ecx - movups __dPI1(%rax), %xmm7 - mulpd %xmm1, %xmm7 - movups __dPI2(%rax), %xmm6 - -/* R = R - N*Pi2 */ - mulpd %xmm1, %xmm6 - subpd %xmm7, %xmm0 - movups __dPI3(%rax), %xmm7 - -/* R = R - N*Pi3 */ - mulpd %xmm1, %xmm7 - subpd %xmm6, %xmm0 - movups __dPI4(%rax), %xmm6 - -/* R = R - N*Pi4 */ - mulpd %xmm6, %xmm1 - subpd %xmm7, %xmm0 - subpd %xmm1, %xmm0 - -/* - POLYNOMIAL APPROXIMATION: - R2 = R*R - */ - movaps %xmm0, %xmm1 - mulpd %xmm0, %xmm1 - -/* R = R^SignRes : update sign of reduced argument */ - xorps %xmm2, %xmm0 - movups __dC7_sin(%rax), %xmm2 - mulpd %xmm1, %xmm2 - addpd __dC6_sin(%rax), %xmm2 - mulpd %xmm1, %xmm2 - addpd __dC5_sin(%rax), %xmm2 - mulpd %xmm1, %xmm2 - addpd __dC4_sin(%rax), %xmm2 - -/* Poly = C3+R2*(C4+R2*(C5+R2*(C6+R2*C7))) */ - mulpd %xmm1, %xmm2 - addpd __dC3_sin(%rax), %xmm2 - -/* Poly = R2*(C1+R2*(C2+R2*Poly)) */ - mulpd %xmm1, %xmm2 - addpd __dC2_sin(%rax), %xmm2 - mulpd %xmm1, %xmm2 - addpd __dC1_sin(%rax), %xmm2 - mulpd %xmm2, %xmm1 - -/* Poly = Poly*R + R */ - mulpd %xmm0, %xmm1 - addpd %xmm1, %xmm0 - -/* - RECONSTRUCTION: - Final sign setting: Res = Poly^SignX - */ - xorps %xmm3, %xmm0 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - movups %xmm5, 192(%rsp) - movups %xmm0, 256(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - movups %xmm8, 112(%rsp) - movups %xmm9, 96(%rsp) - movups %xmm10, 80(%rsp) - movups %xmm11, 64(%rsp) - movups %xmm12, 48(%rsp) - movups %xmm13, 32(%rsp) - movups %xmm14, 16(%rsp) - movups %xmm15, (%rsp) - movq %rsi, 136(%rsp) - movq %rdi, 128(%rsp) - movq %r12, 168(%rsp) - cfi_offset_rel_rsp (12, 168) - movb %dl, %r12b - movq %r13, 160(%rsp) - cfi_offset_rel_rsp (13, 160) - movl %ecx, %r13d - movq %r14, 152(%rsp) - cfi_offset_rel_rsp (14, 152) - movl %eax, %r14d - movq %r15, 144(%rsp) - cfi_offset_rel_rsp (15, 144) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - movups 112(%rsp), %xmm8 - movups 96(%rsp), %xmm9 - movups 80(%rsp), %xmm10 - movups 64(%rsp), %xmm11 - movups 48(%rsp), %xmm12 - movups 32(%rsp), %xmm13 - movups 16(%rsp), %xmm14 - movups (%rsp), %xmm15 - movq 136(%rsp), %rsi - movq 128(%rsp), %rdi - movq 168(%rsp), %r12 - cfi_restore (%r12) - movq 160(%rsp), %r13 - cfi_restore (%r13) - movq 152(%rsp), %r14 - cfi_restore (%r14) - movq 144(%rsp), %r15 - cfi_restore (%r15) - movups 256(%rsp), %xmm0 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - movsd 200(%rsp,%r15), %xmm0 - - call JUMPTARGET(sin) - - movsd %xmm0, 264(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - movsd 192(%rsp,%r15), %xmm0 - - call JUMPTARGET(sin) - - movsd %xmm0, 256(%rsp,%r15) - jmp .LBL_1_7 - -END (_ZGVbN2v_sin_sse4) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.S deleted file mode 100644 index f4482d3a11..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized sin, vector length is 4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVdN4v_sin) - .type _ZGVdN4v_sin, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVdN4v_sin_avx2(%rip), %rax - HAS_ARCH_FEATURE (AVX2_Usable) - jz 2f - ret -2: leaq _ZGVdN4v_sin_sse_wrapper(%rip), %rax - ret -END (_ZGVdN4v_sin) -libmvec_hidden_def (_ZGVdN4v_sin) - -#define _ZGVdN4v_sin _ZGVdN4v_sin_sse_wrapper -#include "../svml_d_sin4_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core_avx2.S deleted file mode 100644 index b035fa1b15..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core_avx2.S +++ /dev/null @@ -1,210 +0,0 @@ -/* Function sin vectorized with AVX2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_trig_data.h" - - .text -ENTRY (_ZGVdN4v_sin_avx2) -/* ALGORITHM DESCRIPTION: - - ( low accuracy ( < 4ulp ) or enhanced performance - ( half of correct mantissa ) implementation ) - - Argument representation: - arg = N*Pi + R - - Result calculation: - sin(arg) = sin(N*Pi + R) = (-1)^N * sin(R) - sin(R) is approximated by corresponding polynomial - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $448, %rsp - movq __svml_d_trig_data@GOTPCREL(%rip), %rax - vmovdqa %ymm0, %ymm4 - vmovupd __dAbsMask(%rax), %ymm2 - vmovupd __dInvPI(%rax), %ymm6 - vmovupd __dRShifter(%rax), %ymm5 - vmovupd __dPI1_FMA(%rax), %ymm7 -/* - ARGUMENT RANGE REDUCTION: - X' = |X| - */ - vandpd %ymm2, %ymm4, %ymm3 - -/* Y = X'*InvPi + RS : right shifter add */ - vfmadd213pd %ymm5, %ymm3, %ymm6 - -/* N = Y - RS : right shifter sub */ - vsubpd %ymm5, %ymm6, %ymm1 - -/* SignRes = Y<<63 : shift LSB to MSB place for result sign */ - vpsllq $63, %ymm6, %ymm5 - -/* R = X' - N*Pi1 */ - vmovapd %ymm3, %ymm0 - vfnmadd231pd %ymm1, %ymm7, %ymm0 - vcmpnle_uqpd __dRangeVal(%rax), %ymm3, %ymm3 - -/* R = R - N*Pi2 */ - vfnmadd231pd __dPI2_FMA(%rax), %ymm1, %ymm0 - -/* R = R - N*Pi3 */ - vfnmadd132pd __dPI3_FMA(%rax), %ymm0, %ymm1 - -/* - POLYNOMIAL APPROXIMATION: - R2 = R*R - */ - vmulpd %ymm1, %ymm1, %ymm0 - -/* R = R^SignRes : update sign of reduced argument */ - vxorpd %ymm5, %ymm1, %ymm6 - vmovupd __dC7_sin(%rax), %ymm1 - vfmadd213pd __dC6_sin(%rax), %ymm0, %ymm1 - vfmadd213pd __dC5_sin(%rax), %ymm0, %ymm1 - vfmadd213pd __dC4_sin(%rax), %ymm0, %ymm1 - -/* Poly = C3+R2*(C4+R2*(C5+R2*(C6+R2*C7))) */ - vfmadd213pd __dC3_sin(%rax), %ymm0, %ymm1 - -/* Poly = R2*(C1+R2*(C2+R2*Poly)) */ - vfmadd213pd __dC2_sin(%rax), %ymm0, %ymm1 - vfmadd213pd __dC1_sin(%rax), %ymm0, %ymm1 - -/* SignX - sign bit of X */ - vandnpd %ymm4, %ymm2, %ymm7 - vmulpd %ymm0, %ymm1, %ymm2 - -/* Poly = Poly*R + R */ - vfmadd213pd %ymm6, %ymm6, %ymm2 - vmovmskpd %ymm3, %ecx - -/* - RECONSTRUCTION: - Final sign setting: Res = Poly^SignX - */ - vxorpd %ymm7, %ymm2, %ymm0 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovupd %ymm4, 320(%rsp) - vmovupd %ymm0, 384(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - vmovups %ymm8, 224(%rsp) - vmovups %ymm9, 192(%rsp) - vmovups %ymm10, 160(%rsp) - vmovups %ymm11, 128(%rsp) - vmovups %ymm12, 96(%rsp) - vmovups %ymm13, 64(%rsp) - vmovups %ymm14, 32(%rsp) - vmovups %ymm15, (%rsp) - movq %rsi, 264(%rsp) - movq %rdi, 256(%rsp) - movq %r12, 296(%rsp) - cfi_offset_rel_rsp (12, 296) - movb %dl, %r12b - movq %r13, 288(%rsp) - cfi_offset_rel_rsp (13, 288) - movl %ecx, %r13d - movq %r14, 280(%rsp) - cfi_offset_rel_rsp (14, 280) - movl %eax, %r14d - movq %r15, 272(%rsp) - cfi_offset_rel_rsp (15, 272) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - vmovups 224(%rsp), %ymm8 - vmovups 192(%rsp), %ymm9 - vmovups 160(%rsp), %ymm10 - vmovups 128(%rsp), %ymm11 - vmovups 96(%rsp), %ymm12 - vmovups 64(%rsp), %ymm13 - vmovups 32(%rsp), %ymm14 - vmovups (%rsp), %ymm15 - vmovupd 384(%rsp), %ymm0 - movq 264(%rsp), %rsi - movq 256(%rsp), %rdi - movq 296(%rsp), %r12 - cfi_restore (%r12) - movq 288(%rsp), %r13 - cfi_restore (%r13) - movq 280(%rsp), %r14 - cfi_restore (%r14) - movq 272(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 328(%rsp,%r15), %xmm0 - vzeroupper - - call JUMPTARGET(sin) - - vmovsd %xmm0, 392(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 320(%rsp,%r15), %xmm0 - vzeroupper - - call JUMPTARGET(sin) - - vmovsd %xmm0, 384(%rsp,%r15) - jmp .LBL_1_7 - -END (_ZGVdN4v_sin_avx2) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.S deleted file mode 100644 index 2b15889c71..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of vectorized sin. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVeN8v_sin) - .type _ZGVeN8v_sin, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVeN8v_sin_skx(%rip), %rax - HAS_ARCH_FEATURE (AVX512DQ_Usable) - jnz 2f - leaq _ZGVeN8v_sin_knl(%rip), %rax - HAS_ARCH_FEATURE (AVX512F_Usable) - jnz 2f - leaq _ZGVeN8v_sin_avx2_wrapper(%rip), %rax -2: ret -END (_ZGVeN8v_sin) - -#define _ZGVeN8v_sin _ZGVeN8v_sin_avx2_wrapper -#include "../svml_d_sin8_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core_avx512.S deleted file mode 100644 index 7580e60636..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core_avx512.S +++ /dev/null @@ -1,465 +0,0 @@ -/* Function sin vectorized with AVX-512, KNL and SKX versions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_trig_data.h" -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVeN8v_sin_knl) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN4v_sin -#else -/* - ALGORITHM DESCRIPTION: - - ( low accuracy ( < 4ulp ) or enhanced performance - ( half of correct mantissa ) implementation ) - - Argument representation: - arg = N*Pi + R - - Result calculation: - sin(arg) = sin(N*Pi + R) = (-1)^N * sin(R) - sin(R) is approximated by corresponding polynomial - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_d_trig_data@GOTPCREL(%rip), %rax - movq $-1, %rdx - vmovups __dAbsMask(%rax), %zmm6 - vmovups __dInvPI(%rax), %zmm1 - -/* - ARGUMENT RANGE REDUCTION: - X' = |X| - */ - vpandq %zmm6, %zmm0, %zmm12 - vmovups __dPI1_FMA(%rax), %zmm2 - vmovups __dC7_sin(%rax), %zmm7 - -/* SignX - sign bit of X */ - vpandnq %zmm0, %zmm6, %zmm11 - -/* R = X' - N*Pi1 */ - vmovaps %zmm12, %zmm3 - -/* Y = X'*InvPi + RS : right shifter add */ - vfmadd213pd __dRShifter(%rax), %zmm12, %zmm1 - vcmppd $22, __dRangeVal(%rax), %zmm12, %k1 - vpbroadcastq %rdx, %zmm13{%k1}{z} - -/* N = Y - RS : right shifter sub */ - vsubpd __dRShifter(%rax), %zmm1, %zmm4 - -/* SignRes = Y<<63 : shift LSB to MSB place for result sign */ - vpsllq $63, %zmm1, %zmm5 - vptestmq %zmm13, %zmm13, %k0 - vfnmadd231pd %zmm4, %zmm2, %zmm3 - kmovw %k0, %ecx - movzbl %cl, %ecx - -/* R = R - N*Pi2 */ - vfnmadd231pd __dPI2_FMA(%rax), %zmm4, %zmm3 - -/* R = R - N*Pi3 */ - vfnmadd132pd __dPI3_FMA(%rax), %zmm3, %zmm4 - -/* - POLYNOMIAL APPROXIMATION: - R2 = R*R - */ - vmulpd %zmm4, %zmm4, %zmm8 - -/* R = R^SignRes : update sign of reduced argument */ - vpxorq %zmm5, %zmm4, %zmm9 - vfmadd213pd __dC6_sin(%rax), %zmm8, %zmm7 - vfmadd213pd __dC5_sin(%rax), %zmm8, %zmm7 - vfmadd213pd __dC4_sin(%rax), %zmm8, %zmm7 - -/* Poly = C3+R2*(C4+R2*(C5+R2*(C6+R2*C7))) */ - vfmadd213pd __dC3_sin(%rax), %zmm8, %zmm7 - -/* Poly = R2*(C1+R2*(C2+R2*Poly)) */ - vfmadd213pd __dC2_sin(%rax), %zmm8, %zmm7 - vfmadd213pd __dC1_sin(%rax), %zmm8, %zmm7 - vmulpd %zmm8, %zmm7, %zmm10 - -/* Poly = Poly*R + R */ - vfmadd213pd %zmm9, %zmm9, %zmm10 - -/* - RECONSTRUCTION: - Final sign setting: Res = Poly^SignX - */ - vpxorq %zmm11, %zmm10, %zmm1 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm1, 1216(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - kmovw %k4, 1048(%rsp) - xorl %eax, %eax - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - addb $1, %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - kmovw 1048(%rsp), %k4 - movq 1064(%rsp), %rsi - kmovw 1040(%rsp), %k5 - movq 1056(%rsp), %rdi - kmovw 1032(%rsp), %k6 - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - vmovups 1216(%rsp), %zmm1 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1160(%rsp,%r15), %xmm0 - call JUMPTARGET(sin) - vmovsd %xmm0, 1224(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1152(%rsp,%r15), %xmm0 - call JUMPTARGET(sin) - vmovsd %xmm0, 1216(%rsp,%r15) - jmp .LBL_1_7 -#endif -END (_ZGVeN8v_sin_knl) - -ENTRY (_ZGVeN8v_sin_skx) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN4v_sin -#else -/* - ALGORITHM DESCRIPTION: - - ( low accuracy ( < 4ulp ) or enhanced performance - ( half of correct mantissa ) implementation ) - - Argument representation: - arg = N*Pi + R - - Result calculation: - sin(arg) = sin(N*Pi + R) = (-1)^N * sin(R) - sin(R) is approximated by corresponding polynomial - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_d_trig_data@GOTPCREL(%rip), %rax - vpbroadcastq .L_2il0floatpacket.14(%rip), %zmm14 - vmovups __dAbsMask(%rax), %zmm7 - vmovups __dInvPI(%rax), %zmm2 - vmovups __dRShifter(%rax), %zmm1 - vmovups __dPI1_FMA(%rax), %zmm3 - vmovups __dC7_sin(%rax), %zmm8 - -/* - ARGUMENT RANGE REDUCTION: - X' = |X| - */ - vandpd %zmm7, %zmm0, %zmm13 - -/* SignX - sign bit of X */ - vandnpd %zmm0, %zmm7, %zmm12 - -/* Y = X'*InvPi + RS : right shifter add */ - vfmadd213pd %zmm1, %zmm13, %zmm2 - vcmppd $18, __dRangeVal(%rax), %zmm13, %k1 - -/* SignRes = Y<<63 : shift LSB to MSB place for result sign */ - vpsllq $63, %zmm2, %zmm6 - -/* N = Y - RS : right shifter sub */ - vsubpd %zmm1, %zmm2, %zmm5 - -/* R = X' - N*Pi1 */ - vmovaps %zmm13, %zmm4 - vfnmadd231pd %zmm5, %zmm3, %zmm4 - -/* R = R - N*Pi2 */ - vfnmadd231pd __dPI2_FMA(%rax), %zmm5, %zmm4 - -/* R = R - N*Pi3 */ - vfnmadd132pd __dPI3_FMA(%rax), %zmm4, %zmm5 - -/* - POLYNOMIAL APPROXIMATION: - R2 = R*R - */ - vmulpd %zmm5, %zmm5, %zmm9 - -/* R = R^SignRes : update sign of reduced argument */ - vxorpd %zmm6, %zmm5, %zmm10 - vfmadd213pd __dC6_sin(%rax), %zmm9, %zmm8 - vfmadd213pd __dC5_sin(%rax), %zmm9, %zmm8 - vfmadd213pd __dC4_sin(%rax), %zmm9, %zmm8 - -/* Poly = C3+R2*(C4+R2*(C5+R2*(C6+R2*C7))) */ - vfmadd213pd __dC3_sin(%rax), %zmm9, %zmm8 - -/* Poly = R2*(C1+R2*(C2+R2*Poly)) */ - vfmadd213pd __dC2_sin(%rax), %zmm9, %zmm8 - vfmadd213pd __dC1_sin(%rax), %zmm9, %zmm8 - vmulpd %zmm9, %zmm8, %zmm11 - -/* Poly = Poly*R + R */ - vfmadd213pd %zmm10, %zmm10, %zmm11 - -/* - RECONSTRUCTION: - Final sign setting: Res = Poly^SignX - */ - vxorpd %zmm12, %zmm11, %zmm1 - vpandnq %zmm13, %zmm13, %zmm14{%k1} - vcmppd $3, %zmm14, %zmm14, %k0 - kmovw %k0, %ecx - testl %ecx, %ecx - jne .LBL_2_3 - -.LBL_2_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_2_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm1, 1216(%rsp) - je .LBL_2_2 - - xorb %dl, %dl - xorl %eax, %eax - kmovw %k4, 1048(%rsp) - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_2_6: - btl %r14d, %r13d - jc .LBL_2_12 - -.LBL_2_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_2_10 - -.LBL_2_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_2_6 - - kmovw 1048(%rsp), %k4 - kmovw 1040(%rsp), %k5 - kmovw 1032(%rsp), %k6 - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - vmovups 1216(%rsp), %zmm1 - movq 1064(%rsp), %rsi - movq 1056(%rsp), %rdi - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_2_2 - -.LBL_2_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1160(%rsp,%r15), %xmm0 - vzeroupper - vmovsd 1160(%rsp,%r15), %xmm0 - - call JUMPTARGET(sin) - - vmovsd %xmm0, 1224(%rsp,%r15) - jmp .LBL_2_8 - -.LBL_2_12: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1152(%rsp,%r15), %xmm0 - vzeroupper - vmovsd 1152(%rsp,%r15), %xmm0 - - call JUMPTARGET(sin) - - vmovsd %xmm0, 1216(%rsp,%r15) - jmp .LBL_2_7 -#endif -END (_ZGVeN8v_sin_skx) - - .section .rodata, "a" -.L_2il0floatpacket.14: - .long 0xffffffff,0xffffffff - .type .L_2il0floatpacket.14,@object diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.S deleted file mode 100644 index 13279e3fb7..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized sincos. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVbN2vvv_sincos) - .type _ZGVbN2vvv_sincos, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVbN2vvv_sincos_sse4(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jz 2f - ret -2: leaq _ZGVbN2vvv_sincos_sse2(%rip), %rax - ret -END (_ZGVbN2vvv_sincos) -libmvec_hidden_def (_ZGVbN2vvv_sincos) - -#define _ZGVbN2vvv_sincos _ZGVbN2vvv_sincos_sse2 -#include "../svml_d_sincos2_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core_sse4.S deleted file mode 100644 index c46109f35d..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core_sse4.S +++ /dev/null @@ -1,368 +0,0 @@ -/* Function sincos vectorized with SSE4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_trig_data.h" - - .text -ENTRY (_ZGVbN2vl8l8_sincos_sse4) -/* - ALGORITHM DESCRIPTION: - - ( low accuracy ( < 4ulp ) or enhanced performance - ( half of correct mantissa ) implementation ) - - Argument representation: - arg = N*Pi + R - - Result calculation: - sin(arg) = sin(N*Pi + R) = (-1)^N * sin(R) - arg + Pi/2 = (N'*Pi + R') - cos(arg) = sin(arg+Pi/2) = sin(N'*Pi + R') = (-1)^N' * sin(R') - sin(R), sin(R') are approximated by corresponding polynomial. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $320, %rsp - movq __svml_d_trig_data@GOTPCREL(%rip), %rax - movups %xmm11, 160(%rsp) - movups %xmm12, 144(%rsp) - movups __dSignMask(%rax), %xmm11 - -/* ARGUMENT RANGE REDUCTION: - Absolute argument: X' = |X| */ - movaps %xmm11, %xmm4 - -/* Grab sign bit from argument */ - movaps %xmm11, %xmm7 - movups __dInvPI(%rax), %xmm5 - andnps %xmm0, %xmm4 - -/* SinY = X'*InvPi + RS : right shifter add */ - mulpd %xmm4, %xmm5 - addpd __dRShifter(%rax), %xmm5 - -/* SinSignRes = Y<<63 : shift LSB to MSB place for result sign */ - movaps %xmm5, %xmm12 - andps %xmm0, %xmm7 - -/* SinN = Y - RS : right shifter sub */ - subpd __dRShifter(%rax), %xmm5 - movups %xmm10, 176(%rsp) - psllq $63, %xmm12 - movups __dPI1(%rax), %xmm10 - -/* SinR = X' - SinN*Pi1 */ - movaps %xmm10, %xmm1 - mulpd %xmm5, %xmm1 - movups __dPI2(%rax), %xmm6 - -/* SinR = SinR - SinN*Pi1 */ - movaps %xmm6, %xmm2 - mulpd %xmm5, %xmm2 - movups %xmm13, 112(%rsp) - movaps %xmm4, %xmm13 - subpd %xmm1, %xmm13 - subpd %xmm2, %xmm13 - -/* Sine result sign: SinRSign = SignMask & SinR */ - movaps %xmm11, %xmm2 - -/* CosR = SinX - CosN*Pi1 */ - movaps %xmm4, %xmm1 - movups __dOneHalf(%rax), %xmm3 - andps %xmm13, %xmm2 - -/* Set SinRSign to 0.5 */ - orps %xmm2, %xmm3 - -/* Update CosRSign and CosSignRes signs */ - xorps %xmm11, %xmm2 - -/* CosN = SinN +(-)0.5 */ - addpd %xmm5, %xmm3 - cmpnlepd __dRangeVal(%rax), %xmm4 - mulpd %xmm3, %xmm10 - -/* CosR = CosR - CosN*Pi2 */ - mulpd %xmm3, %xmm6 - subpd %xmm10, %xmm1 - movmskpd %xmm4, %ecx - movups __dPI3(%rax), %xmm10 - xorps %xmm12, %xmm2 - subpd %xmm6, %xmm1 - -/* SinR = SinR - SinN*Pi3 */ - movaps %xmm10, %xmm6 - -/* Final reconstruction. - Combine Sin result's sign */ - xorps %xmm7, %xmm12 - mulpd %xmm5, %xmm6 - -/* CosR = CosR - CosN*Pi3 */ - mulpd %xmm3, %xmm10 - subpd %xmm6, %xmm13 - subpd %xmm10, %xmm1 - movups __dPI4(%rax), %xmm6 - -/* SinR = SinR - SinN*Pi4 */ - mulpd %xmm6, %xmm5 - -/* CosR = CosR - CosN*Pi4 */ - mulpd %xmm6, %xmm3 - subpd %xmm5, %xmm13 - subpd %xmm3, %xmm1 - -/* SinR2 = SinR^2 */ - movaps %xmm13, %xmm6 - -/* CosR2 = CosR^2 */ - movaps %xmm1, %xmm10 - mulpd %xmm13, %xmm6 - mulpd %xmm1, %xmm10 - -/* Polynomial approximation */ - movups __dC7(%rax), %xmm5 - movaps %xmm5, %xmm3 - mulpd %xmm6, %xmm3 - mulpd %xmm10, %xmm5 - addpd __dC6(%rax), %xmm3 - addpd __dC6(%rax), %xmm5 - mulpd %xmm6, %xmm3 - mulpd %xmm10, %xmm5 - addpd __dC5(%rax), %xmm3 - addpd __dC5(%rax), %xmm5 - mulpd %xmm6, %xmm3 - mulpd %xmm10, %xmm5 - addpd __dC4(%rax), %xmm3 - addpd __dC4(%rax), %xmm5 - -/* SinPoly = C3 + SinR2*(C4 + SinR2*(C5 + SinR2*(C6 + SinR2*C7))) */ - mulpd %xmm6, %xmm3 - -/* CosPoly = C3 + CosR2*(C4 + CosR2*(C5 + CosR2*(C6 + CosR2*C7))) */ - mulpd %xmm10, %xmm5 - addpd __dC3(%rax), %xmm3 - addpd __dC3(%rax), %xmm5 - -/* SinPoly = C2 + SinR2*SinPoly */ - mulpd %xmm6, %xmm3 - -/* CosPoly = C2 + CosR2*CosPoly */ - mulpd %xmm10, %xmm5 - addpd __dC2(%rax), %xmm3 - addpd __dC2(%rax), %xmm5 - -/* SinPoly = C1 + SinR2*SinPoly */ - mulpd %xmm6, %xmm3 - -/* CosPoly = C1 + CosR2*CosPoly */ - mulpd %xmm10, %xmm5 - addpd __dC1(%rax), %xmm3 - addpd __dC1(%rax), %xmm5 - -/* SinPoly = SinR2*SinPoly */ - mulpd %xmm3, %xmm6 - -/* CosPoly = CosR2*CosPoly */ - mulpd %xmm5, %xmm10 - -/* SinPoly = SinR*SinPoly */ - mulpd %xmm13, %xmm6 - -/* CosPoly = CosR*CosPoly */ - mulpd %xmm1, %xmm10 - addpd %xmm6, %xmm13 - addpd %xmm10, %xmm1 - -/* Update Sin result's sign */ - xorps %xmm12, %xmm13 - -/* Update Cos result's sign */ - xorps %xmm2, %xmm1 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movups 176(%rsp), %xmm10 - movaps %xmm13, (%rdi) - movups 160(%rsp), %xmm11 - movups 144(%rsp), %xmm12 - movups 112(%rsp), %xmm13 - movups %xmm1, (%rsi) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - movups %xmm0, 128(%rsp) - movups %xmm13, 192(%rsp) - movups %xmm1, 256(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - movups %xmm8, 48(%rsp) - movups %xmm9, 32(%rsp) - movups %xmm14, 16(%rsp) - movups %xmm15, (%rsp) - movq %rsi, 64(%rsp) - movq %r12, 104(%rsp) - cfi_offset_rel_rsp (12, 104) - movb %dl, %r12b - movq %r13, 96(%rsp) - cfi_offset_rel_rsp (13, 96) - movl %eax, %r13d - movq %r14, 88(%rsp) - cfi_offset_rel_rsp (14, 88) - movl %ecx, %r14d - movq %r15, 80(%rsp) - cfi_offset_rel_rsp (15, 80) - movq %rbx, 72(%rsp) - movq %rdi, %rbx - cfi_remember_state - -.LBL_1_6: - btl %r13d, %r14d - jc .LBL_1_13 - -.LBL_1_7: - lea 1(%r13), %esi - btl %esi, %r14d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r13d - cmpb $16, %r12b - jb .LBL_1_6 - - movups 48(%rsp), %xmm8 - movq %rbx, %rdi - movups 32(%rsp), %xmm9 - movups 16(%rsp), %xmm14 - movups (%rsp), %xmm15 - movq 64(%rsp), %rsi - movq 104(%rsp), %r12 - cfi_restore (%r12) - movq 96(%rsp), %r13 - cfi_restore (%r13) - movq 88(%rsp), %r14 - cfi_restore (%r14) - movq 80(%rsp), %r15 - cfi_restore (%r15) - movq 72(%rsp), %rbx - movups 192(%rsp), %xmm13 - movups 256(%rsp), %xmm1 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - movsd 136(%rsp,%r15), %xmm0 - - call JUMPTARGET(sin) - - movsd %xmm0, 200(%rsp,%r15) - movsd 136(%rsp,%r15), %xmm0 - - call JUMPTARGET(cos) - - movsd %xmm0, 264(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_13: - movzbl %r12b, %r15d - shlq $4, %r15 - movsd 128(%rsp,%r15), %xmm0 - - call JUMPTARGET(sin) - - movsd %xmm0, 192(%rsp,%r15) - movsd 128(%rsp,%r15), %xmm0 - - call JUMPTARGET(cos) - - movsd %xmm0, 256(%rsp,%r15) - jmp .LBL_1_7 -END (_ZGVbN2vl8l8_sincos_sse4) -libmvec_hidden_def(_ZGVbN2vl8l8_sincos_sse4) - -/* vvv version implemented with wrapper to vl8l8 variant. */ -ENTRY (_ZGVbN2vvv_sincos_sse4) -#ifndef __ILP32__ - subq $72, %rsp - .cfi_def_cfa_offset 80 - movdqu %xmm1, 32(%rsp) - lea (%rsp), %rdi - movdqu %xmm2, 48(%rdi) - lea 16(%rsp), %rsi - call HIDDEN_JUMPTARGET(_ZGVbN2vl8l8_sincos_sse4) - movq 32(%rsp), %rdx - movq 48(%rsp), %rsi - movq 40(%rsp), %r8 - movq 56(%rsp), %r10 - movq (%rsp), %rax - movq 16(%rsp), %rcx - movq 8(%rsp), %rdi - movq 24(%rsp), %r9 - movq %rax, (%rdx) - movq %rcx, (%rsi) - movq %rdi, (%r8) - movq %r9, (%r10) - addq $72, %rsp - .cfi_def_cfa_offset 8 - ret -#else - subl $72, %esp - .cfi_def_cfa_offset 80 - leal 48(%rsp), %esi - movaps %xmm1, 16(%esp) - leal 32(%rsp), %edi - movaps %xmm2, (%esp) - call HIDDEN_JUMPTARGET(_ZGVbN2vl8l8_sincos_sse4) - movdqa 16(%esp), %xmm1 - movsd 32(%esp), %xmm0 - movq %xmm1, %rax - movdqa (%esp), %xmm2 - movsd %xmm0, (%eax) - movsd 40(%esp), %xmm0 - pextrd $1, %xmm1, %eax - movsd %xmm0, (%eax) - movsd 48(%esp), %xmm0 - movq %xmm2, %rax - movsd %xmm0, (%eax) - movsd 56(%esp), %xmm0 - pextrd $1, %xmm2, %eax - movsd %xmm0, (%eax) - addl $72, %esp - .cfi_def_cfa_offset 8 - ret -#endif -END (_ZGVbN2vvv_sincos_sse4) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.S deleted file mode 100644 index 8aacb8e76a..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized sincos. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVdN4vvv_sincos) - .type _ZGVdN4vvv_sincos, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVdN4vvv_sincos_avx2(%rip), %rax - HAS_ARCH_FEATURE (AVX2_Usable) - jz 2f - ret -2: leaq _ZGVdN4vvv_sincos_sse_wrapper(%rip), %rax - ret -END (_ZGVdN4vvv_sincos) -libmvec_hidden_def (_ZGVdN4vvv_sincos) - -#define _ZGVdN4vvv_sincos _ZGVdN4vvv_sincos_sse_wrapper -#include "../svml_d_sincos4_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core_avx2.S deleted file mode 100644 index a6318c5ca6..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core_avx2.S +++ /dev/null @@ -1,373 +0,0 @@ -/* Function sincos vectorized with AVX2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_trig_data.h" - - .text -ENTRY (_ZGVdN4vl8l8_sincos_avx2) -/* - ALGORITHM DESCRIPTION: - - ( low accuracy ( < 4ulp ) or enhanced performance - ( half of correct mantissa ) implementation ) - - Argument representation: - arg = N*Pi + R - - Result calculation: - sin(arg) = sin(N*Pi + R) = (-1)^N * sin(R) - arg + Pi/2 = (N'*Pi + R') - cos(arg) = sin(arg+Pi/2) = sin(N'*Pi + R') = (-1)^N' * sin(R') - sin(R), sin(R') are approximated by corresponding polynomial. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $448, %rsp - movq __svml_d_trig_data@GOTPCREL(%rip), %rax - vmovups %ymm14, 288(%rsp) - vmovups %ymm8, 352(%rsp) - vmovupd __dSignMask(%rax), %ymm6 - vmovupd __dInvPI(%rax), %ymm2 - vmovupd __dPI1_FMA(%rax), %ymm5 - vmovups %ymm9, 224(%rsp) - -/* ARGUMENT RANGE REDUCTION: - Absolute argument: X' = |X| */ - vandnpd %ymm0, %ymm6, %ymm1 - -/* SinY = X'*InvPi + RS : right shifter add */ - vfmadd213pd __dRShifter(%rax), %ymm1, %ymm2 - -/* SinSignRes = Y<<63 : shift LSB to MSB place for result sign */ - vpsllq $63, %ymm2, %ymm4 - -/* SinN = Y - RS : right shifter sub */ - vsubpd __dRShifter(%rax), %ymm2, %ymm2 - -/* SinR = X' - SinN*Pi1 */ - vmovdqa %ymm1, %ymm14 - vfnmadd231pd %ymm2, %ymm5, %ymm14 - -/* SinR = SinR - SinN*Pi1 */ - vfnmadd231pd __dPI2_FMA(%rax), %ymm2, %ymm14 - -/* Sine result sign: SinRSign = SignMask & SinR */ - vandpd %ymm14, %ymm6, %ymm7 - -/* Set SinRSign to 0.5 */ - vorpd __dOneHalf(%rax), %ymm7, %ymm3 - -/* CosN = SinN +(-)0.5 */ - vaddpd %ymm3, %ymm2, %ymm3 - -/* CosR = SinX - CosN*Pi1 */ - vmovdqa %ymm1, %ymm8 - vfnmadd231pd %ymm3, %ymm5, %ymm8 - vmovupd __dPI3_FMA(%rax), %ymm5 - vcmpnle_uqpd __dRangeVal(%rax), %ymm1, %ymm1 - -/* CosR = CosR - CosN*Pi2 */ - vfnmadd231pd __dPI2_FMA(%rax), %ymm3, %ymm8 - -/* SinR = SinR - SinN*Pi3 */ - vfnmadd213pd %ymm14, %ymm5, %ymm2 - -/* CosR = CosR - CosN*Pi3 */ - vfnmadd213pd %ymm8, %ymm5, %ymm3 - vmovupd __dC6(%rax), %ymm8 - -/* SinR2 = SinR^2 */ - vmulpd %ymm2, %ymm2, %ymm14 - -/* CosR2 = CosR^2 */ - vmulpd %ymm3, %ymm3, %ymm5 - -/* Grab SignX */ - vandpd %ymm0, %ymm6, %ymm9 - -/* Update CosRSign and CosSignRes signs */ - vxorpd %ymm6, %ymm7, %ymm6 - vxorpd %ymm6, %ymm4, %ymm7 - -/* Update sign SinSignRes */ - vxorpd %ymm9, %ymm4, %ymm6 - -/* Polynomial approximation */ - vmovupd __dC7(%rax), %ymm4 - vmovdqa %ymm8, %ymm9 - vfmadd231pd __dC7(%rax), %ymm14, %ymm9 - vfmadd213pd %ymm8, %ymm5, %ymm4 - vfmadd213pd __dC5(%rax), %ymm14, %ymm9 - vfmadd213pd __dC5(%rax), %ymm5, %ymm4 - vfmadd213pd __dC4(%rax), %ymm14, %ymm9 - vfmadd213pd __dC4(%rax), %ymm5, %ymm4 - -/* SinPoly = C3 + SinR2*(C4 + SinR2*(C5 + SinR2*(C6 + SinR2*C7))) */ - vfmadd213pd __dC3(%rax), %ymm14, %ymm9 - -/* CosPoly = C3 + CosR2*(C4 + CosR2*(C5 + CosR2*(C6 + CosR2*C7))) */ - vfmadd213pd __dC3(%rax), %ymm5, %ymm4 - -/* SinPoly = C2 + SinR2*SinPoly */ - vfmadd213pd __dC2(%rax), %ymm14, %ymm9 - -/* CosPoly = C2 + CosR2*CosPoly */ - vfmadd213pd __dC2(%rax), %ymm5, %ymm4 - -/* SinPoly = C1 + SinR2*SinPoly */ - vfmadd213pd __dC1(%rax), %ymm14, %ymm9 - -/* CosPoly = C1 + CosR2*CosPoly */ - vfmadd213pd __dC1(%rax), %ymm5, %ymm4 - -/* SinPoly = SinR2*SinPoly */ - vmulpd %ymm14, %ymm9, %ymm8 - -/* CosPoly = CosR2*CosPoly */ - vmulpd %ymm5, %ymm4, %ymm4 - -/* SinPoly = SinR*SinPoly */ - vfmadd213pd %ymm2, %ymm2, %ymm8 - -/* CosPoly = CosR*CosPoly */ - vfmadd213pd %ymm3, %ymm3, %ymm4 - vmovmskpd %ymm1, %ecx - -/* Final reconstruction - Update Sin result's sign */ - vxorpd %ymm6, %ymm8, %ymm3 - -/* Update Cos result's sign */ - vxorpd %ymm7, %ymm4, %ymm2 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovups 352(%rsp), %ymm8 - vmovups 224(%rsp), %ymm9 - vmovups 288(%rsp), %ymm14 - vmovupd %ymm2, (%rsi) - vmovdqa %ymm3, (%rdi) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovupd %ymm0, 256(%rsp) - vmovupd %ymm3, 320(%rsp) - vmovupd %ymm2, 384(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - vmovups %ymm10, 128(%rsp) - vmovups %ymm11, 96(%rsp) - vmovups %ymm12, 64(%rsp) - vmovups %ymm13, 32(%rsp) - vmovups %ymm15, (%rsp) - movq %rsi, 160(%rsp) - movq %r12, 200(%rsp) - cfi_offset_rel_rsp (12, 200) - movb %dl, %r12b - movq %r13, 192(%rsp) - cfi_offset_rel_rsp (13, 192) - movl %eax, %r13d - movq %r14, 184(%rsp) - cfi_offset_rel_rsp (14, 184) - movl %ecx, %r14d - movq %r15, 176(%rsp) - cfi_offset_rel_rsp (15, 176) - movq %rbx, 168(%rsp) - movq %rdi, %rbx - cfi_remember_state - -.LBL_1_6: - btl %r13d, %r14d - jc .LBL_1_13 - -.LBL_1_7: - lea 1(%r13), %esi - btl %esi, %r14d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r13d - cmpb $16, %r12b - jb .LBL_1_6 - - vmovups 128(%rsp), %ymm10 - movq %rbx, %rdi - vmovups 96(%rsp), %ymm11 - vmovups 64(%rsp), %ymm12 - vmovups 32(%rsp), %ymm13 - vmovups (%rsp), %ymm15 - vmovupd 320(%rsp), %ymm3 - vmovupd 384(%rsp), %ymm2 - movq 160(%rsp), %rsi - movq 200(%rsp), %r12 - cfi_restore (%r12) - movq 192(%rsp), %r13 - cfi_restore (%r13) - movq 184(%rsp), %r14 - cfi_restore (%r14) - movq 176(%rsp), %r15 - cfi_restore (%r15) - movq 168(%rsp), %rbx - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 264(%rsp,%r15), %xmm0 - vzeroupper - - call JUMPTARGET(sin) - - vmovsd %xmm0, 328(%rsp,%r15) - vmovsd 264(%rsp,%r15), %xmm0 - - call JUMPTARGET(cos) - - vmovsd %xmm0, 392(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_13: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 256(%rsp,%r15), %xmm0 - vzeroupper - - call JUMPTARGET(sin) - - vmovsd %xmm0, 320(%rsp,%r15) - vmovsd 256(%rsp,%r15), %xmm0 - - call JUMPTARGET(cos) - - vmovsd %xmm0, 384(%rsp,%r15) - jmp .LBL_1_7 - -END (_ZGVdN4vl8l8_sincos_avx2) -libmvec_hidden_def(_ZGVdN4vl8l8_sincos_avx2) - -/* vvv version implemented with wrapper to vl8l8 variant. */ -ENTRY (_ZGVdN4vvv_sincos_avx2) -#ifndef __ILP32__ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-32, %rsp - subq $128, %rsp - vmovdqu %ymm1, 64(%rsp) - lea (%rsp), %rdi - vmovdqu %ymm2, 96(%rdi) - lea 32(%rsp), %rsi - call HIDDEN_JUMPTARGET(_ZGVdN4vl8l8_sincos_avx2) - movq 64(%rsp), %rdx - movq 96(%rsp), %rsi - movq 72(%rsp), %r8 - movq 104(%rsp), %r10 - movq (%rsp), %rax - movq 32(%rsp), %rcx - movq 8(%rsp), %rdi - movq 40(%rsp), %r9 - movq %rax, (%rdx) - movq %rcx, (%rsi) - movq 80(%rsp), %rax - movq 112(%rsp), %rcx - movq %rdi, (%r8) - movq %r9, (%r10) - movq 88(%rsp), %rdi - movq 120(%rsp), %r9 - movq 16(%rsp), %r11 - movq 48(%rsp), %rdx - movq 24(%rsp), %rsi - movq 56(%rsp), %r8 - movq %r11, (%rax) - movq %rdx, (%rcx) - movq %rsi, (%rdi) - movq %r8, (%r9) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -#else - leal 8(%rsp), %r10d - .cfi_def_cfa 10, 0 - andl $-32, %esp - pushq -8(%r10d) - pushq %rbp - .cfi_escape 0x10,0x6,0x2,0x76,0 - movl %esp, %ebp - pushq %r10 - .cfi_escape 0xf,0x3,0x76,0x78,0x6 - leal -48(%rbp), %esi - leal -80(%rbp), %edi - subl $104, %esp - vmovaps %xmm1, -96(%ebp) - vmovaps %xmm2, -112(%ebp) - call HIDDEN_JUMPTARGET(_ZGVdN4vl8l8_sincos_avx2) - movl -96(%ebp), %eax - vmovsd -80(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -92(%ebp), %eax - vmovsd -72(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -88(%ebp), %eax - vmovsd -64(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -84(%ebp), %eax - vmovsd -56(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -112(%ebp), %eax - vmovsd -48(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -108(%ebp), %eax - vmovsd -40(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -104(%ebp), %eax - vmovsd -32(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -100(%ebp), %eax - vmovsd -24(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - addl $104, %esp - popq %r10 - .cfi_def_cfa 10, 0 - popq %rbp - leal -8(%r10), %esp - .cfi_def_cfa 7, 8 - ret -#endif -END (_ZGVdN4vvv_sincos_avx2) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.S b/sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.S deleted file mode 100644 index 3c0abc379e..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of vectorized sincos. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVeN8vvv_sincos) - .type _ZGVeN8vvv_sincos, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVeN8vvv_sincos_skx(%rip), %rax - HAS_ARCH_FEATURE (AVX512DQ_Usable) - jnz 2f - leaq _ZGVeN8vvv_sincos_knl(%rip), %rax - HAS_ARCH_FEATURE (AVX512F_Usable) - jnz 2f - leaq _ZGVeN8vvv_sincos_avx2_wrapper(%rip), %rax -2: ret -END (_ZGVeN8vvv_sincos) - -#define _ZGVeN8vvv_sincos _ZGVeN8vvv_sincos_avx2_wrapper -#include "../svml_d_sincos8_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core_avx512.S deleted file mode 100644 index c9207558c5..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core_avx512.S +++ /dev/null @@ -1,763 +0,0 @@ -/* Function sincos vectorized with AVX-512. KNL and SKX versions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_trig_data.h" -#include "svml_d_wrapper_impl.h" - -/* - ALGORITHM DESCRIPTION: - - ( low accuracy ( < 4ulp ) or enhanced performance - ( half of correct mantissa ) implementation ) - - Argument representation: - arg = N*Pi + R - - Result calculation: - sin(arg) = sin(N*Pi + R) = (-1)^N * sin(R) - arg + Pi/2 = (N'*Pi + R') - cos(arg) = sin(arg+Pi/2) = sin(N'*Pi + R') = (-1)^N' * sin(R') - sin(R), sin(R') are approximated by corresponding polynomial. */ - - .text -ENTRY (_ZGVeN8vl8l8_sincos_knl) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512_fFF _ZGVdN4vl8l8_sincos -#else - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1344, %rsp - movq __svml_d_trig_data@GOTPCREL(%rip), %rax - vmovaps %zmm0, %zmm4 - movq $-1, %rdx - vmovups __dSignMask(%rax), %zmm12 - vmovups __dInvPI(%rax), %zmm5 - -/* ARGUMENT RANGE REDUCTION: - Absolute argument: X' = |X| */ - vpandnq %zmm4, %zmm12, %zmm3 - vmovups __dPI1_FMA(%rax), %zmm7 - vmovups __dPI3_FMA(%rax), %zmm9 - -/* SinR = X' - SinN*Pi1 */ - vmovaps %zmm3, %zmm8 - -/* CosR = SinX - CosN*Pi1 */ - vmovaps %zmm3, %zmm10 - -/* SinY = X'*InvPi + RS : right shifter add */ - vfmadd213pd __dRShifter(%rax), %zmm3, %zmm5 - vmovups __dC6(%rax), %zmm13 - -/* SinN = Y - RS : right shifter sub */ - vsubpd __dRShifter(%rax), %zmm5, %zmm1 - vmovaps %zmm13, %zmm14 - -/* SinSignRes = Y<<63 : shift LSB to MSB place for result sign */ - vpsllq $63, %zmm5, %zmm2 - vcmppd $22, __dRangeVal(%rax), %zmm3, %k1 - -/* Update CosRSign and CosSignRes signs */ - vmovaps %zmm12, %zmm5 - vfnmadd231pd %zmm1, %zmm7, %zmm8 - -/* SinR = SinR - SinN*Pi1 */ - vfnmadd231pd __dPI2_FMA(%rax), %zmm1, %zmm8 - -/* Sine result sign: SinRSign = SignMask & SinR */ - vpandq %zmm8, %zmm12, %zmm11 - -/* Set SinRSign to 0.5 */ - vporq __dOneHalf(%rax), %zmm11, %zmm6 - vpternlogq $150, %zmm2, %zmm11, %zmm5 - -/* Update sign SinSignRes */ - vpternlogq $120, %zmm4, %zmm12, %zmm2 - -/* Polynomial approximation */ - vmovups __dC7(%rax), %zmm11 - -/* CosN = SinN +(-)0.5 */ - vaddpd %zmm6, %zmm1, %zmm0 - -/* SinR = SinR - SinN*Pi3 */ - vfnmadd213pd %zmm8, %zmm9, %zmm1 - vfnmadd231pd %zmm0, %zmm7, %zmm10 - -/* SinR2 = SinR^2 */ - vmulpd %zmm1, %zmm1, %zmm15 - -/* Grab SignX - CosR = CosR - CosN*Pi2 */ - vfnmadd231pd __dPI2_FMA(%rax), %zmm0, %zmm10 - vfmadd231pd __dC7(%rax), %zmm15, %zmm14 - -/* CosR = CosR - CosN*Pi3 */ - vfnmadd213pd %zmm10, %zmm9, %zmm0 - vfmadd213pd __dC5(%rax), %zmm15, %zmm14 - -/* CosR2 = CosR^2 */ - vmulpd %zmm0, %zmm0, %zmm12 - vfmadd213pd __dC4(%rax), %zmm15, %zmm14 - vfmadd213pd %zmm13, %zmm12, %zmm11 - -/* SinPoly = C3 + SinR2*(C4 + SinR2*(C5 + SinR2*(C6 + SinR2*C7))) */ - vfmadd213pd __dC3(%rax), %zmm15, %zmm14 - vfmadd213pd __dC5(%rax), %zmm12, %zmm11 - -/* SinPoly = C2 + SinR2*SinPoly */ - vfmadd213pd __dC2(%rax), %zmm15, %zmm14 - vfmadd213pd __dC4(%rax), %zmm12, %zmm11 - -/* SinPoly = C1 + SinR2*SinPoly */ - vfmadd213pd __dC1(%rax), %zmm15, %zmm14 - -/* CosPoly = C3 + CosR2*(C4 + CosR2*(C5 + CosR2*(C6 + CosR2*C7))) */ - vfmadd213pd __dC3(%rax), %zmm12, %zmm11 - -/* SinPoly = SinR2*SinPoly */ - vmulpd %zmm15, %zmm14, %zmm13 - -/* CosPoly = C2 + CosR2*CosPoly */ - vfmadd213pd __dC2(%rax), %zmm12, %zmm11 - -/* SinPoly = SinR*SinPoly */ - vfmadd213pd %zmm1, %zmm1, %zmm13 - vpbroadcastq %rdx, %zmm1{%k1}{z} - -/* CosPoly = C1 + CosR2*CosPoly */ - vfmadd213pd __dC1(%rax), %zmm12, %zmm11 - vptestmq %zmm1, %zmm1, %k0 - kmovw %k0, %ecx - -/* CosPoly = CosR2*CosPoly */ - vmulpd %zmm12, %zmm11, %zmm14 - movzbl %cl, %ecx - -/* CosPoly = CosR*CosPoly */ - vfmadd213pd %zmm0, %zmm0, %zmm14 - -/* Final reconstruction. - Update Sin result's sign */ - vpxorq %zmm2, %zmm13, %zmm0 - -/* Update Cos result's sign */ - vpxorq %zmm5, %zmm14, %zmm2 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovups %zmm0, (%rdi) - vmovups %zmm2, (%rsi) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %zmm4, 1152(%rsp) - vmovups %zmm0, 1216(%rsp) - vmovups %zmm2, 1280(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - kmovw %k4, 1048(%rsp) - xorl %eax, %eax - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %eax, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %ecx, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - movq %rbx, 1064(%rsp) - movq %rdi, %rbx - cfi_remember_state - -.LBL_1_6: - btl %r13d, %r14d - jc .LBL_1_13 - -.LBL_1_7: - lea 1(%r13), %esi - btl %esi, %r14d - jc .LBL_1_10 - -.LBL_1_8: - addb $1, %r12b - addl $2, %r13d - cmpb $16, %r12b - jb .LBL_1_6 - - movq %rbx, %rdi - kmovw 1048(%rsp), %k4 - movq 1056(%rsp), %rsi - kmovw 1040(%rsp), %k5 - movq 1096(%rsp), %r12 - cfi_restore (%r12) - kmovw 1032(%rsp), %k6 - movq 1088(%rsp), %r13 - cfi_restore (%r13) - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - movq 1064(%rsp), %rbx - vmovups 1216(%rsp), %zmm0 - vmovups 1280(%rsp), %zmm2 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1160(%rsp,%r15), %xmm0 - - call JUMPTARGET(sin) - - vmovsd %xmm0, 1224(%rsp,%r15) - vmovsd 1160(%rsp,%r15), %xmm0 - - call JUMPTARGET(cos) - - vmovsd %xmm0, 1288(%rsp,%r15) - jmp .LBL_1_8 - -.LBL_1_13: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1152(%rsp,%r15), %xmm0 - - call JUMPTARGET(sin) - - vmovsd %xmm0, 1216(%rsp,%r15) - vmovsd 1152(%rsp,%r15), %xmm0 - - call JUMPTARGET(cos) - - vmovsd %xmm0, 1280(%rsp,%r15) - jmp .LBL_1_7 - -#endif -END (_ZGVeN8vl8l8_sincos_knl) -libmvec_hidden_def(_ZGVeN8vl8l8_sincos_knl) - -ENTRY (_ZGVeN8vl8l8_sincos_skx) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512_fFF _ZGVdN4vl8l8_sincos -#else - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1344, %rsp - movq __svml_d_trig_data@GOTPCREL(%rip), %rax - vmovaps %zmm0, %zmm8 - vmovups __dSignMask(%rax), %zmm4 - vmovups __dInvPI(%rax), %zmm9 - vmovups __dRShifter(%rax), %zmm10 - vmovups __dPI1_FMA(%rax), %zmm13 - vmovups __dPI2_FMA(%rax), %zmm14 - vmovups __dOneHalf(%rax), %zmm11 - vmovups __dPI3_FMA(%rax), %zmm2 - -/* ARGUMENT RANGE REDUCTION: - Absolute argument: X' = |X| */ - vandnpd %zmm8, %zmm4, %zmm7 - -/* SinY = X'*InvPi + RS : right shifter add */ - vfmadd213pd %zmm10, %zmm7, %zmm9 - vcmppd $18, __dRangeVal(%rax), %zmm7, %k1 - -/* SinSignRes = Y<<63 : shift LSB to MSB place for result sign */ - vpsllq $63, %zmm9, %zmm6 - -/* SinN = Y - RS : right shifter sub */ - vsubpd %zmm10, %zmm9, %zmm5 - vmovups __dC5(%rax), %zmm9 - vmovups __dC4(%rax), %zmm10 - -/* SinR = X' - SinN*Pi1 */ - vmovaps %zmm7, %zmm15 - vfnmadd231pd %zmm5, %zmm13, %zmm15 - -/* SinR = SinR - SinN*Pi1 */ - vfnmadd231pd %zmm5, %zmm14, %zmm15 - -/* Sine result sign: SinRSign = SignMask & SinR */ - vandpd %zmm15, %zmm4, %zmm1 - -/* Set SinRSign to 0.5 */ - vorpd %zmm1, %zmm11, %zmm12 - vmovups __dC3(%rax), %zmm11 - -/* CosN = SinN +(-)0.5 */ - vaddpd %zmm12, %zmm5, %zmm3 - -/* SinR = SinR - SinN*Pi3 */ - vfnmadd213pd %zmm15, %zmm2, %zmm5 - vmovups __dC2(%rax), %zmm12 - -/* SinR2 = SinR^2 */ - vmulpd %zmm5, %zmm5, %zmm15 - -/* CosR = SinX - CosN*Pi1 */ - vmovaps %zmm7, %zmm0 - vfnmadd231pd %zmm3, %zmm13, %zmm0 - vmovups __dC1(%rax), %zmm13 - -/* Grab SignX - CosR = CosR - CosN*Pi2 */ - vfnmadd231pd %zmm3, %zmm14, %zmm0 - -/* CosR = CosR - CosN*Pi3 */ - vfnmadd213pd %zmm0, %zmm2, %zmm3 - -/* Polynomial approximation */ - vmovups __dC7(%rax), %zmm0 - -/* Update CosRSign and CosSignRes signs */ - vmovaps %zmm4, %zmm2 - vpternlogq $150, %zmm6, %zmm1, %zmm2 - -/* Update sign SinSignRes */ - vpternlogq $120, %zmm8, %zmm4, %zmm6 - -/* CosR2 = CosR^2 */ - vmulpd %zmm3, %zmm3, %zmm1 - vmovups __dC6(%rax), %zmm4 - vmovaps %zmm0, %zmm14 - vfmadd213pd %zmm4, %zmm1, %zmm0 - vfmadd213pd %zmm4, %zmm15, %zmm14 - vfmadd213pd %zmm9, %zmm1, %zmm0 - vfmadd213pd %zmm9, %zmm15, %zmm14 - vfmadd213pd %zmm10, %zmm1, %zmm0 - vfmadd213pd %zmm10, %zmm15, %zmm14 - -/* CosPoly = C3 + CosR2*(C4 + CosR2*(C5 + CosR2*(C6 + CosR2*C7))) */ - vfmadd213pd %zmm11, %zmm1, %zmm0 - -/* SinPoly = C3 + SinR2*(C4 + SinR2*(C5 + SinR2*(C6 + SinR2*C7))) */ - vfmadd213pd %zmm11, %zmm15, %zmm14 - -/* CosPoly = C2 + CosR2*CosPoly */ - vfmadd213pd %zmm12, %zmm1, %zmm0 - -/* SinPoly = C2 + SinR2*SinPoly */ - vfmadd213pd %zmm12, %zmm15, %zmm14 - -/* CosPoly = C1 + CosR2*CosPoly */ - vfmadd213pd %zmm13, %zmm1, %zmm0 - -/* SinPoly = C1 + SinR2*SinPoly */ - vfmadd213pd %zmm13, %zmm15, %zmm14 - -/* CosPoly = CosR2*CosPoly */ - vmulpd %zmm1, %zmm0, %zmm1 - -/* SinPoly = SinR2*SinPoly */ - vmulpd %zmm15, %zmm14, %zmm4 - -/* CosPoly = CosR*CosPoly */ - vfmadd213pd %zmm3, %zmm3, %zmm1 - -/* SinPoly = SinR*SinPoly */ - vfmadd213pd %zmm5, %zmm5, %zmm4 - vpbroadcastq .L_2il0floatpacket.15(%rip), %zmm3 - -/* Update Cos result's sign */ - vxorpd %zmm2, %zmm1, %zmm1 - -/* Final reconstruction. - Update Sin result's sign */ - vxorpd %zmm6, %zmm4, %zmm0 - vpandnq %zmm7, %zmm7, %zmm3{%k1} - vcmppd $3, %zmm3, %zmm3, %k0 - kmovw %k0, %ecx - testl %ecx, %ecx - jne .LBL_2_3 - -.LBL_2_2: - cfi_remember_state - vmovups %zmm0, (%rdi) - vmovups %zmm1, (%rsi) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_2_3: - cfi_restore_state - vmovups %zmm8, 1152(%rsp) - vmovups %zmm0, 1216(%rsp) - vmovups %zmm1, 1280(%rsp) - je .LBL_2_2 - - xorb %dl, %dl - xorl %eax, %eax - kmovw %k4, 1048(%rsp) - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %eax, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %ecx, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - movq %rbx, 1064(%rsp) - movq %rdi, %rbx - cfi_remember_state - -.LBL_2_6: - btl %r13d, %r14d - jc .LBL_2_13 - -.LBL_2_7: - lea 1(%r13), %esi - btl %esi, %r14d - jc .LBL_2_10 - -.LBL_2_8: - incb %r12b - addl $2, %r13d - cmpb $16, %r12b - jb .LBL_2_6 - - kmovw 1048(%rsp), %k4 - movq %rbx, %rdi - kmovw 1040(%rsp), %k5 - kmovw 1032(%rsp), %k6 - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - vmovups 1216(%rsp), %zmm0 - vmovups 1280(%rsp), %zmm1 - movq 1056(%rsp), %rsi - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - movq 1064(%rsp), %rbx - jmp .LBL_2_2 - -.LBL_2_10: - cfi_restore_state - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1160(%rsp,%r15), %xmm0 - vzeroupper - vmovsd 1160(%rsp,%r15), %xmm0 - - call JUMPTARGET(sin) - - vmovsd %xmm0, 1224(%rsp,%r15) - vmovsd 1160(%rsp,%r15), %xmm0 - - call JUMPTARGET(cos) - - vmovsd %xmm0, 1288(%rsp,%r15) - jmp .LBL_2_8 - -.LBL_2_13: - movzbl %r12b, %r15d - shlq $4, %r15 - vmovsd 1152(%rsp,%r15), %xmm0 - vzeroupper - vmovsd 1152(%rsp,%r15), %xmm0 - - call JUMPTARGET(sin) - - vmovsd %xmm0, 1216(%rsp,%r15) - vmovsd 1152(%rsp,%r15), %xmm0 - - call JUMPTARGET(cos) - - vmovsd %xmm0, 1280(%rsp,%r15) - jmp .LBL_2_7 - -#endif -END (_ZGVeN8vl8l8_sincos_skx) -libmvec_hidden_def(_ZGVeN8vl8l8_sincos_skx) - -/* Wrapper between vvv and vl8l8 vector variants. */ -.macro WRAPPER_AVX512_vvv_vl8l8 callee -#ifndef __ILP32__ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $256, %rsp - /* Encoding for vmovups %zmm1, 128(%rsp). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x4c - .byte 0x24 - .byte 0x02 - lea (%rsp), %rdi - /* Encoding for vmovups %zmm2, 192(%rdi). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x57 - .byte 0x03 - lea 64(%rsp), %rsi - call HIDDEN_JUMPTARGET(\callee) - movq 128(%rsp), %rdx - movq 136(%rsp), %rsi - movq 144(%rsp), %r8 - movq 152(%rsp), %r10 - movq (%rsp), %rax - movq 8(%rsp), %rcx - movq 16(%rsp), %rdi - movq 24(%rsp), %r9 - movq %rax, (%rdx) - movq %rcx, (%rsi) - movq 160(%rsp), %rax - movq 168(%rsp), %rcx - movq %rdi, (%r8) - movq %r9, (%r10) - movq 176(%rsp), %rdi - movq 184(%rsp), %r9 - movq 32(%rsp), %r11 - movq 40(%rsp), %rdx - movq 48(%rsp), %rsi - movq 56(%rsp), %r8 - movq %r11, (%rax) - movq %rdx, (%rcx) - movq 192(%rsp), %r11 - movq 200(%rsp), %rdx - movq %rsi, (%rdi) - movq %r8, (%r9) - movq 208(%rsp), %rsi - movq 216(%rsp), %r8 - movq 64(%rsp), %r10 - movq 72(%rsp), %rax - movq 80(%rsp), %rcx - movq 88(%rsp), %rdi - movq %r10, (%r11) - movq %rax, (%rdx) - movq 224(%rsp), %r10 - movq 232(%rsp), %rax - movq %rcx, (%rsi) - movq %rdi, (%r8) - movq 240(%rsp), %rcx - movq 248(%rsp), %rdi - movq 96(%rsp), %r9 - movq 104(%rsp), %r11 - movq 112(%rsp), %rdx - movq 120(%rsp), %rsi - movq %r9, (%r10) - movq %r11, (%rax) - movq %rdx, (%rcx) - movq %rsi, (%rdi) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -#else - leal 8(%rsp), %r10d - .cfi_def_cfa 10, 0 - andl $-64, %esp - pushq -8(%r10d) - pushq %rbp - .cfi_escape 0x10,0x6,0x2,0x76,0 - movl %esp, %ebp - pushq %r10 - .cfi_escape 0xf,0x3,0x76,0x78,0x6 - leal -112(%rbp), %esi - leal -176(%rbp), %edi - subl $232, %esp - vmovdqa %ymm1, -208(%ebp) - vmovdqa %ymm2, -240(%ebp) - call HIDDEN_JUMPTARGET(\callee) - vmovdqa -208(%ebp), %xmm0 - vmovq %xmm0, %rax - vmovsd -176(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - shrq $32, %rax - vmovsd -168(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movq -200(%ebp), %rax - vmovsd -160(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - shrq $32, %rax - vmovsd -152(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movq -192(%ebp), %rax - vmovsd -144(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - shrq $32, %rax - vmovsd -136(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movq -184(%ebp), %rax - vmovsd -128(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - shrq $32, %rax - vmovsd -120(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - vmovdqa -240(%ebp), %xmm0 - vmovq %xmm0, %rax - vmovsd -112(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - shrq $32, %rax - vmovsd -104(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movq -232(%ebp), %rax - vmovsd -96(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - shrq $32, %rax - vmovsd -88(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movq -224(%ebp), %rax - vmovsd -80(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - shrq $32, %rax - vmovsd -72(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movq -216(%ebp), %rax - vmovsd -64(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - shrq $32, %rax - vmovsd -56(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - addl $232, %esp - popq %r10 - .cfi_def_cfa 10, 0 - popq %rbp - leal -8(%r10), %esp - .cfi_def_cfa 7, 8 - ret -#endif -.endm - -ENTRY (_ZGVeN8vvv_sincos_knl) -WRAPPER_AVX512_vvv_vl8l8 _ZGVeN8vl8l8_sincos_knl -END (_ZGVeN8vvv_sincos_knl) - -ENTRY (_ZGVeN8vvv_sincos_skx) -WRAPPER_AVX512_vvv_vl8l8 _ZGVeN8vl8l8_sincos_skx -END (_ZGVeN8vvv_sincos_skx) - - .section .rodata, "a" -.L_2il0floatpacket.15: - .long 0xffffffff,0xffffffff - .type .L_2il0floatpacket.15,@object diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core.S deleted file mode 100644 index cd67665972..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of vectorized cosf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVeN16v_cosf) - .type _ZGVeN16v_cosf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVeN16v_cosf_skx(%rip), %rax - HAS_ARCH_FEATURE (AVX512DQ_Usable) - jnz 2f - leaq _ZGVeN16v_cosf_knl(%rip), %rax - HAS_ARCH_FEATURE (AVX512F_Usable) - jnz 2f - leaq _ZGVeN16v_cosf_avx2_wrapper(%rip), %rax -2: ret -END (_ZGVeN16v_cosf) - -#define _ZGVeN16v_cosf _ZGVeN16v_cosf_avx2_wrapper -#include "../svml_s_cosf16_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core_avx512.S deleted file mode 100644 index 611bb5dd2d..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core_avx512.S +++ /dev/null @@ -1,460 +0,0 @@ -/* Function cosf vectorized with AVX-512. KNL and SKX versions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_trig_data.h" -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVeN16v_cosf_knl) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN8v_cosf -#else -/* - ALGORITHM DESCRIPTION: - - 1) Range reduction to [-Pi/2; +Pi/2] interval - a) We remove sign using AND operation - b) Add Pi/2 value to argument X for Cos to Sin transformation - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" value - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position - f) Subtract "Right Shifter" value - g) Subtract 0.5 from result for octant correction - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - Y*PI4; - 2) Polynomial (minimax for sin within [-Pi/2; +Pi/2] interval) - a) Calculate X^2 = X * X - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + ..... - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_s_trig_data@GOTPCREL(%rip), %rdx - -/* - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - */ - vmovaps %zmm0, %zmm6 - movl $-1, %eax - -/* b) Add Pi/2 value to argument X for Cos to Sin transformation */ - vaddps __sHalfPI(%rdx), %zmm0, %zmm2 - vmovups __sRShifter(%rdx), %zmm3 - -/* - 1) Range reduction to [-Pi/2; +Pi/2] interval - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" (0x4B000000) value - */ - vfmadd132ps __sInvPI(%rdx), %zmm3, %zmm2 - vmovups __sPI1_FMA(%rdx), %zmm5 - -/* f) Subtract "Right Shifter" (0x4B000000) value */ - vsubps %zmm3, %zmm2, %zmm4 - vmovups __sA9_FMA(%rdx), %zmm9 - -/* Check for large and special arguments */ - vpandd __sAbsMask(%rdx), %zmm0, %zmm1 - -/* - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position (S << 31) - */ - vpslld $31, %zmm2, %zmm8 - vcmpps $22, __sRangeReductionVal(%rdx), %zmm1, %k1 - vpbroadcastd %eax, %zmm12{%k1}{z} - -/* g) Subtract 0.5 from result for octant correction */ - vsubps __sOneHalf(%rdx), %zmm4, %zmm7 - vptestmd %zmm12, %zmm12, %k0 - vfnmadd231ps %zmm7, %zmm5, %zmm6 - kmovw %k0, %ecx - vfnmadd231ps __sPI2_FMA(%rdx), %zmm7, %zmm6 - vfnmadd132ps __sPI3_FMA(%rdx), %zmm6, %zmm7 - -/* a) Calculate X^2 = X * X */ - vmulps %zmm7, %zmm7, %zmm10 - -/* - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - vpxord %zmm8, %zmm7, %zmm11 - -/* - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + x^2 * (A7 + x^2 * (A9)))); - */ - vfmadd213ps __sA7_FMA(%rdx), %zmm10, %zmm9 - vfmadd213ps __sA5_FMA(%rdx), %zmm10, %zmm9 - vfmadd213ps __sA3(%rdx), %zmm10, %zmm9 - vmulps %zmm10, %zmm9, %zmm1 - vfmadd213ps %zmm11, %zmm11, %zmm1 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm1, 1216(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - kmovw %k4, 1048(%rsp) - xorl %eax, %eax - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - addb $1, %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - kmovw 1048(%rsp), %k4 - movq 1064(%rsp), %rsi - kmovw 1040(%rsp), %k5 - movq 1056(%rsp), %rdi - kmovw 1032(%rsp), %k6 - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - vmovups 1216(%rsp), %zmm1 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 1156(%rsp,%r15,8), %xmm0 - call JUMPTARGET(cosf) - vmovss %xmm0, 1220(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - vmovss 1152(%rsp,%r15,8), %xmm0 - call JUMPTARGET(cosf) - vmovss %xmm0, 1216(%rsp,%r15,8) - jmp .LBL_1_7 -#endif -END (_ZGVeN16v_cosf_knl) - -ENTRY (_ZGVeN16v_cosf_skx) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN8v_cosf -#else -/* - ALGORITHM DESCRIPTION: - - 1) Range reduction to [-Pi/2; +Pi/2] interval - a) We remove sign using AND operation - b) Add Pi/2 value to argument X for Cos to Sin transformation - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" value - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position - f) Subtract "Right Shifter" value - g) Subtract 0.5 from result for octant correction - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - Y*PI4; - 2) Polynomial (minimax for sin within [-Pi/2; +Pi/2] interval) - a) Calculate X^2 = X * X - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + ..... - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_s_trig_data@GOTPCREL(%rip), %rax - -/* - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - */ - vmovaps %zmm0, %zmm6 - vmovups .L_2il0floatpacket.13(%rip), %zmm12 - vmovups __sRShifter(%rax), %zmm3 - vmovups __sPI1_FMA(%rax), %zmm5 - vmovups __sA9_FMA(%rax), %zmm9 - -/* b) Add Pi/2 value to argument X for Cos to Sin transformation */ - vaddps __sHalfPI(%rax), %zmm0, %zmm2 - -/* Check for large and special arguments */ - vandps __sAbsMask(%rax), %zmm0, %zmm1 - -/* - 1) Range reduction to [-Pi/2; +Pi/2] interval - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" (0x4B000000) value - */ - vfmadd132ps __sInvPI(%rax), %zmm3, %zmm2 - vcmpps $18, __sRangeReductionVal(%rax), %zmm1, %k1 - -/* - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position (S << 31) - */ - vpslld $31, %zmm2, %zmm8 - -/* f) Subtract "Right Shifter" (0x4B000000) value */ - vsubps %zmm3, %zmm2, %zmm4 - -/* g) Subtract 0.5 from result for octant correction */ - vsubps __sOneHalf(%rax), %zmm4, %zmm7 - vfnmadd231ps %zmm7, %zmm5, %zmm6 - vfnmadd231ps __sPI2_FMA(%rax), %zmm7, %zmm6 - vfnmadd132ps __sPI3_FMA(%rax), %zmm6, %zmm7 - -/* a) Calculate X^2 = X * X */ - vmulps %zmm7, %zmm7, %zmm10 - -/* - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - vxorps %zmm8, %zmm7, %zmm11 - -/* - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + x^2 * (A7 + x^2 * (A9)))); - */ - vfmadd213ps __sA7_FMA(%rax), %zmm10, %zmm9 - vfmadd213ps __sA5_FMA(%rax), %zmm10, %zmm9 - vfmadd213ps __sA3(%rax), %zmm10, %zmm9 - vpandnd %zmm1, %zmm1, %zmm12{%k1} - vmulps %zmm10, %zmm9, %zmm1 - vptestmd %zmm12, %zmm12, %k0 - vfmadd213ps %zmm11, %zmm11, %zmm1 - kmovw %k0, %ecx - testl %ecx, %ecx - jne .LBL_2_3 -.LBL_2_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_2_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm1, 1216(%rsp) - je .LBL_2_2 - - xorb %dl, %dl - xorl %eax, %eax - kmovw %k4, 1048(%rsp) - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_2_6: - btl %r14d, %r13d - jc .LBL_2_12 -.LBL_2_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_2_10 -.LBL_2_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_2_6 - kmovw 1048(%rsp), %k4 - kmovw 1040(%rsp), %k5 - kmovw 1032(%rsp), %k6 - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - vmovups 1216(%rsp), %zmm1 - movq 1064(%rsp), %rsi - movq 1056(%rsp), %rdi - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_2_2 - -.LBL_2_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 1156(%rsp,%r15,8), %xmm0 - vzeroupper - vmovss 1156(%rsp,%r15,8), %xmm0 - call JUMPTARGET(cosf) - vmovss %xmm0, 1220(%rsp,%r15,8) - jmp .LBL_2_8 -.LBL_2_12: - movzbl %r12b, %r15d - vmovss 1152(%rsp,%r15,8), %xmm0 - vzeroupper - vmovss 1152(%rsp,%r15,8), %xmm0 - call JUMPTARGET(cosf) - vmovss %xmm0, 1216(%rsp,%r15,8) - jmp .LBL_2_7 -#endif -END (_ZGVeN16v_cosf_skx) - - .section .rodata, "a" -.L_2il0floatpacket.13: - .long 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff - .type .L_2il0floatpacket.13,@object diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core.S deleted file mode 100644 index d73d7c7e3f..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized cosf, vector length is 4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVbN4v_cosf) - .type _ZGVbN4v_cosf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVbN4v_cosf_sse4(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jz 2f - ret -2: leaq _ZGVbN4v_cosf_sse2(%rip), %rax - ret -END (_ZGVbN4v_cosf) -libmvec_hidden_def (_ZGVbN4v_cosf) - -#define _ZGVbN4v_cosf _ZGVbN4v_cosf_sse2 -#include "../svml_s_cosf4_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core_sse4.S deleted file mode 100644 index 73797e1a93..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core_sse4.S +++ /dev/null @@ -1,227 +0,0 @@ -/* Function cosf vectorized with SSE4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_trig_data.h" - - .text -ENTRY (_ZGVbN4v_cosf_sse4) -/* - ALGORITHM DESCRIPTION: - - 1) Range reduction to [-Pi/2; +Pi/2] interval - a) We remove sign using AND operation - b) Add Pi/2 value to argument X for Cos to Sin transformation - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" value - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position - f) Subtract "Right Shifter" value - g) Subtract 0.5 from result for octant correction - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - Y*PI4; - 2) Polynomial (minimax for sin within [-Pi/2; +Pi/2] interval) - a) Calculate X^2 = X * X - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + ..... - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $320, %rsp - movaps %xmm0, %xmm4 - movq __svml_s_trig_data@GOTPCREL(%rip), %rax - movups __sHalfPI(%rax), %xmm1 - movups __sRShifter(%rax), %xmm5 - -/* b) Add Pi/2 value to argument X for Cos to Sin transformation */ - addps %xmm4, %xmm1 - -/* - 1) Range reduction to [-Pi/2; +Pi/2] interval - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" (0x4B000000) value - */ - mulps __sInvPI(%rax), %xmm1 - movups __sPI1(%rax), %xmm6 - addps %xmm5, %xmm1 - -/* - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position (S << 31) - */ - movaps %xmm1, %xmm2 - -/* f) Subtract "Right Shifter" (0x4B000000) value */ - subps %xmm5, %xmm1 - movups __sPI2(%rax), %xmm7 - pslld $31, %xmm2 - movups __sPI3(%rax), %xmm5 - movups __sAbsMask(%rax), %xmm3 - -/* Check for large and special arguments */ - andps %xmm4, %xmm3 - -/* g) Subtract 0.5 from result for octant correction */ - subps __sOneHalf(%rax), %xmm1 - cmpnleps __sRangeReductionVal(%rax), %xmm3 - -/* - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - Y*PI4; - */ - mulps %xmm1, %xmm6 - mulps %xmm1, %xmm7 - mulps %xmm1, %xmm5 - subps %xmm6, %xmm0 - movmskps %xmm3, %ecx - movups __sPI4(%rax), %xmm6 - subps %xmm7, %xmm0 - mulps %xmm6, %xmm1 - subps %xmm5, %xmm0 - subps %xmm1, %xmm0 - -/* a) Calculate X^2 = X * X */ - movaps %xmm0, %xmm1 - mulps %xmm0, %xmm1 - -/* - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - xorps %xmm2, %xmm0 - movups __sA9(%rax), %xmm2 - -/* - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + x^2 * (A7 + x^2 * (A9)))); - */ - mulps %xmm1, %xmm2 - addps __sA7(%rax), %xmm2 - mulps %xmm1, %xmm2 - addps __sA5(%rax), %xmm2 - mulps %xmm1, %xmm2 - addps __sA3(%rax), %xmm2 - mulps %xmm2, %xmm1 - mulps %xmm0, %xmm1 - addps %xmm1, %xmm0 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - movups %xmm4, 192(%rsp) - movups %xmm0, 256(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - movups %xmm8, 112(%rsp) - movups %xmm9, 96(%rsp) - movups %xmm10, 80(%rsp) - movups %xmm11, 64(%rsp) - movups %xmm12, 48(%rsp) - movups %xmm13, 32(%rsp) - movups %xmm14, 16(%rsp) - movups %xmm15, (%rsp) - movq %rsi, 136(%rsp) - movq %rdi, 128(%rsp) - movq %r12, 168(%rsp) - cfi_offset_rel_rsp (12, 168) - movb %dl, %r12b - movq %r13, 160(%rsp) - cfi_offset_rel_rsp (13, 160) - movl %ecx, %r13d - movq %r14, 152(%rsp) - cfi_offset_rel_rsp (14, 152) - movl %eax, %r14d - movq %r15, 144(%rsp) - cfi_offset_rel_rsp (15, 144) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - movups 112(%rsp), %xmm8 - movups 96(%rsp), %xmm9 - movups 80(%rsp), %xmm10 - movups 64(%rsp), %xmm11 - movups 48(%rsp), %xmm12 - movups 32(%rsp), %xmm13 - movups 16(%rsp), %xmm14 - movups (%rsp), %xmm15 - movq 136(%rsp), %rsi - movq 128(%rsp), %rdi - movq 168(%rsp), %r12 - cfi_restore (%r12) - movq 160(%rsp), %r13 - cfi_restore (%r13) - movq 152(%rsp), %r14 - cfi_restore (%r14) - movq 144(%rsp), %r15 - cfi_restore (%r15) - movups 256(%rsp), %xmm0 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - movss 196(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(cosf) - - movss %xmm0, 260(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - movss 192(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(cosf) - - movss %xmm0, 256(%rsp,%r15,8) - jmp .LBL_1_7 -END (_ZGVbN4v_cosf_sse4) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core.S deleted file mode 100644 index f7530c138a..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized cosf, vector length is 8. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVdN8v_cosf) - .type _ZGVdN8v_cosf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVdN8v_cosf_avx2(%rip), %rax - HAS_ARCH_FEATURE (AVX2_Usable) - jz 2f - ret -2: leaq _ZGVdN8v_cosf_sse_wrapper(%rip), %rax - ret -END (_ZGVdN8v_cosf) -libmvec_hidden_def (_ZGVdN8v_cosf) - -#define _ZGVdN8v_cosf _ZGVdN8v_cosf_sse_wrapper -#include "../svml_s_cosf8_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core_avx2.S deleted file mode 100644 index c61add3bb9..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core_avx2.S +++ /dev/null @@ -1,215 +0,0 @@ -/* Function cosf vectorized with AVX2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include -#include "svml_s_trig_data.h" - - .text -ENTRY (_ZGVdN8v_cosf_avx2) -/* - ALGORITHM DESCRIPTION: - - 1) Range reduction to [-Pi/2; +Pi/2] interval - a) We remove sign using AND operation - b) Add Pi/2 value to argument X for Cos to Sin transformation - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" value - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position - f) Subtract "Right Shifter" value - g) Subtract 0.5 from result for octant correction - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - Y*PI4; - 2) Polynomial (minimax for sin within [-Pi/2; +Pi/2] interval) - a) Calculate X^2 = X * X - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + ..... - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $448, %rsp - movq __svml_s_trig_data@GOTPCREL(%rip), %rax - vmovaps %ymm0, %ymm2 - vmovups __sRShifter(%rax), %ymm5 - vmovups __sPI1_FMA(%rax), %ymm7 - -/* b) Add Pi/2 value to argument X for Cos to Sin transformation */ - vaddps __sHalfPI(%rax), %ymm2, %ymm4 - -/* - 1) Range reduction to [-Pi/2; +Pi/2] interval - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" (0x4B000000) value - */ - vfmadd132ps __sInvPI(%rax), %ymm5, %ymm4 - -/* f) Subtract "Right Shifter" (0x4B000000) value */ - vsubps %ymm5, %ymm4, %ymm6 - -/* - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position (S << 31) - */ - vpslld $31, %ymm4, %ymm0 - -/* g) Subtract 0.5 from result for octant correction */ - vsubps __sOneHalf(%rax), %ymm6, %ymm4 - -/* Check for large and special arguments */ - vandps __sAbsMask(%rax), %ymm2, %ymm3 - vcmpnle_uqps __sRangeReductionVal(%rax), %ymm3, %ymm1 - -/* - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - */ - vmovaps %ymm2, %ymm3 - vfnmadd231ps %ymm4, %ymm7, %ymm3 - vfnmadd231ps __sPI2_FMA(%rax), %ymm4, %ymm3 - vfnmadd132ps __sPI3_FMA(%rax), %ymm3, %ymm4 - -/* a) Calculate X^2 = X * X */ - vmulps %ymm4, %ymm4, %ymm5 - -/* - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - vxorps %ymm0, %ymm4, %ymm6 - vmovups __sA9_FMA(%rax), %ymm0 - -/* - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + x^2 * (A7 + x^2 * (A9)))) - */ - vfmadd213ps __sA7_FMA(%rax), %ymm5, %ymm0 - vfmadd213ps __sA5_FMA(%rax), %ymm5, %ymm0 - vfmadd213ps __sA3(%rax), %ymm5, %ymm0 - vmulps %ymm5, %ymm0, %ymm0 - vmovmskps %ymm1, %ecx - vfmadd213ps %ymm6, %ymm6, %ymm0 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %ymm2, 320(%rsp) - vmovups %ymm0, 384(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - vmovups %ymm8, 224(%rsp) - vmovups %ymm9, 192(%rsp) - vmovups %ymm10, 160(%rsp) - vmovups %ymm11, 128(%rsp) - vmovups %ymm12, 96(%rsp) - vmovups %ymm13, 64(%rsp) - vmovups %ymm14, 32(%rsp) - vmovups %ymm15, (%rsp) - movq %rsi, 264(%rsp) - movq %rdi, 256(%rsp) - movq %r12, 296(%rsp) - cfi_offset_rel_rsp (12, 296) - movb %dl, %r12b - movq %r13, 288(%rsp) - cfi_offset_rel_rsp (13, 288) - movl %ecx, %r13d - movq %r14, 280(%rsp) - cfi_offset_rel_rsp (14, 280) - movl %eax, %r14d - movq %r15, 272(%rsp) - cfi_offset_rel_rsp (15, 272) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - vmovups 224(%rsp), %ymm8 - vmovups 192(%rsp), %ymm9 - vmovups 160(%rsp), %ymm10 - vmovups 128(%rsp), %ymm11 - vmovups 96(%rsp), %ymm12 - vmovups 64(%rsp), %ymm13 - vmovups 32(%rsp), %ymm14 - vmovups (%rsp), %ymm15 - vmovups 384(%rsp), %ymm0 - movq 264(%rsp), %rsi - movq 256(%rsp), %rdi - movq 296(%rsp), %r12 - cfi_restore (%r12) - movq 288(%rsp), %r13 - cfi_restore (%r13) - movq 280(%rsp), %r14 - cfi_restore (%r14) - movq 272(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 324(%rsp,%r15,8), %xmm0 - vzeroupper - - call JUMPTARGET(cosf) - - vmovss %xmm0, 388(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - vmovss 320(%rsp,%r15,8), %xmm0 - vzeroupper - - call JUMPTARGET(cosf) - - vmovss %xmm0, 384(%rsp,%r15,8) - jmp .LBL_1_7 - -END (_ZGVdN8v_cosf_avx2) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core.S deleted file mode 100644 index 3998f616aa..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of vectorized expf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVeN16v_expf) - .type _ZGVeN16v_expf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVeN16v_expf_skx(%rip), %rax - HAS_ARCH_FEATURE (AVX512DQ_Usable) - jnz 2f - leaq _ZGVeN16v_expf_knl(%rip), %rax - HAS_ARCH_FEATURE (AVX512F_Usable) - jnz 2f - leaq _ZGVeN16v_expf_avx2_wrapper(%rip), %rax -2: ret -END (_ZGVeN16v_expf) - -#define _ZGVeN16v_expf _ZGVeN16v_expf_avx2_wrapper -#include "../svml_s_expf16_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core_avx512.S deleted file mode 100644 index e80b2be1a7..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core_avx512.S +++ /dev/null @@ -1,447 +0,0 @@ -/* Function expf vectorized with AVX-512. KNL and SKX versions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_expf_data.h" -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVeN16v_expf_knl) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN8v_expf -#else -/* - ALGORITHM DESCRIPTION: - - Argument representation: - M = rint(X*2^k/ln2) = 2^k*N+j - X = M*ln2/2^k + r = N*ln2 + ln2*(j/2^k) + r - then -ln2/2^(k+1) < r < ln2/2^(k+1) - Alternatively: - M = trunc(X*2^k/ln2) - then 0 < r < ln2/2^k - - Result calculation: - exp(X) = exp(N*ln2 + ln2*(j/2^k) + r) - = 2^N * 2^(j/2^k) * exp(r) - 2^N is calculated by bit manipulation - 2^(j/2^k) is computed from table lookup - exp(r) is approximated by polynomial - - The table lookup is skipped if k = 0. - For low accuracy approximation, exp(r) ~ 1 or 1+r. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_sexp_data@GOTPCREL(%rip), %rax - -/* r = x-n*ln2_hi/2^k */ - vmovaps %zmm0, %zmm6 - -/* compare against threshold */ - movl $-1, %ecx - vmovups __sInvLn2(%rax), %zmm3 - vmovups __sLn2hi(%rax), %zmm5 - -/* m = x*2^k/ln2 + shifter */ - vfmadd213ps __sShifter(%rax), %zmm0, %zmm3 - vmovups __sPC5(%rax), %zmm9 - -/* n = m - shifter = rint(x*2^k/ln2) */ - vsubps __sShifter(%rax), %zmm3, %zmm7 - -/* remove sign of x by "and" operation */ - vpandd __iAbsMask(%rax), %zmm0, %zmm1 - vpaddd __iBias(%rax), %zmm3, %zmm4 - vpcmpgtd __iDomainRange(%rax), %zmm1, %k1 - -/* compute 2^N with "shift" */ - vpslld $23, %zmm4, %zmm8 - vfnmadd231ps %zmm7, %zmm5, %zmm6 - vpbroadcastd %ecx, %zmm2{%k1}{z} - -/* r = r-n*ln2_lo/2^k = x - n*ln2/2^k */ - vfnmadd132ps __sLn2lo(%rax), %zmm6, %zmm7 - -/* set mask for overflow/underflow */ - vptestmd %zmm2, %zmm2, %k0 - kmovw %k0, %ecx - -/* c5*r+c4 */ - vfmadd213ps __sPC4(%rax), %zmm7, %zmm9 - -/* (c5*r+c4)*r+c3 */ - vfmadd213ps __sPC3(%rax), %zmm7, %zmm9 - -/* ((c5*r+c4)*r+c3)*r+c2 */ - vfmadd213ps __sPC2(%rax), %zmm7, %zmm9 - -/* (((c5*r+c4)*r+c3)*r+c2)*r+c1 */ - vfmadd213ps __sPC1(%rax), %zmm7, %zmm9 - -/* exp(r) = ((((c5*r+c4)*r+c3)*r+c2)*r+c1)*r+c0 */ - vfmadd213ps __sPC0(%rax), %zmm7, %zmm9 - -/* 2^N*exp(r) */ - vmulps %zmm9, %zmm8, %zmm1 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm1, 1216(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - kmovw %k4, 1048(%rsp) - xorl %eax, %eax - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - addb $1, %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - kmovw 1048(%rsp), %k4 - movq 1064(%rsp), %rsi - kmovw 1040(%rsp), %k5 - movq 1056(%rsp), %rdi - kmovw 1032(%rsp), %k6 - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - vmovups 1216(%rsp), %zmm1 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 1156(%rsp,%r15,8), %xmm0 - call JUMPTARGET(__expf_finite) - vmovss %xmm0, 1220(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - vmovss 1152(%rsp,%r15,8), %xmm0 - call JUMPTARGET(__expf_finite) - vmovss %xmm0, 1216(%rsp,%r15,8) - jmp .LBL_1_7 - -#endif -END (_ZGVeN16v_expf_knl) - -ENTRY (_ZGVeN16v_expf_skx) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN8v_expf -#else -/* - ALGORITHM DESCRIPTION: - - Argument representation: - M = rint(X*2^k/ln2) = 2^k*N+j - X = M*ln2/2^k + r = N*ln2 + ln2*(j/2^k) + r - then -ln2/2^(k+1) < r < ln2/2^(k+1) - Alternatively: - M = trunc(X*2^k/ln2) - then 0 < r < ln2/2^k - - Result calculation: - exp(X) = exp(N*ln2 + ln2*(j/2^k) + r) - = 2^N * 2^(j/2^k) * exp(r) - 2^N is calculated by bit manipulation - 2^(j/2^k) is computed from table lookup - exp(r) is approximated by polynomial - - The table lookup is skipped if k = 0. - For low accuracy approximation, exp(r) ~ 1 or 1+r. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_sexp_data@GOTPCREL(%rip), %rax - -/* r = x-n*ln2_hi/2^k */ - vmovaps %zmm0, %zmm7 - -/* compare against threshold */ - vmovups .L_2il0floatpacket.13(%rip), %zmm3 - vmovups __sInvLn2(%rax), %zmm4 - vmovups __sShifter(%rax), %zmm1 - vmovups __sLn2hi(%rax), %zmm6 - vmovups __sPC5(%rax), %zmm10 - -/* m = x*2^k/ln2 + shifter */ - vfmadd213ps %zmm1, %zmm0, %zmm4 - -/* n = m - shifter = rint(x*2^k/ln2) */ - vsubps %zmm1, %zmm4, %zmm8 - vpaddd __iBias(%rax), %zmm4, %zmm5 - vfnmadd231ps %zmm8, %zmm6, %zmm7 - -/* compute 2^N with "shift" */ - vpslld $23, %zmm5, %zmm9 - -/* r = r-n*ln2_lo/2^k = x - n*ln2/2^k */ - vfnmadd132ps __sLn2lo(%rax), %zmm7, %zmm8 - -/* c5*r+c4 */ - vfmadd213ps __sPC4(%rax), %zmm8, %zmm10 - -/* (c5*r+c4)*r+c3 */ - vfmadd213ps __sPC3(%rax), %zmm8, %zmm10 - -/* ((c5*r+c4)*r+c3)*r+c2 */ - vfmadd213ps __sPC2(%rax), %zmm8, %zmm10 - -/* (((c5*r+c4)*r+c3)*r+c2)*r+c1 */ - vfmadd213ps __sPC1(%rax), %zmm8, %zmm10 - -/* exp(r) = ((((c5*r+c4)*r+c3)*r+c2)*r+c1)*r+c0 */ - vfmadd213ps __sPC0(%rax), %zmm8, %zmm10 - -/* 2^N*exp(r) */ - vmulps %zmm10, %zmm9, %zmm1 - -/* remove sign of x by "and" operation */ - vpandd __iAbsMask(%rax), %zmm0, %zmm2 - vpcmpd $2, __iDomainRange(%rax), %zmm2, %k1 - vpandnd %zmm2, %zmm2, %zmm3{%k1} - -/* set mask for overflow/underflow */ - vptestmd %zmm3, %zmm3, %k0 - kmovw %k0, %ecx - testl %ecx, %ecx - jne .LBL_2_3 - -.LBL_2_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_2_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm1, 1216(%rsp) - je .LBL_2_2 - - xorb %dl, %dl - xorl %eax, %eax - kmovw %k4, 1048(%rsp) - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - - -.LBL_2_6: - btl %r14d, %r13d - jc .LBL_2_12 - -.LBL_2_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_2_10 - -.LBL_2_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_2_6 - - kmovw 1048(%rsp), %k4 - kmovw 1040(%rsp), %k5 - kmovw 1032(%rsp), %k6 - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - vmovups 1216(%rsp), %zmm1 - movq 1064(%rsp), %rsi - movq 1056(%rsp), %rdi - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_2_2 - -.LBL_2_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 1156(%rsp,%r15,8), %xmm0 - vzeroupper - vmovss 1156(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(__expf_finite) - - vmovss %xmm0, 1220(%rsp,%r15,8) - jmp .LBL_2_8 - -.LBL_2_12: - movzbl %r12b, %r15d - vmovss 1152(%rsp,%r15,8), %xmm0 - vzeroupper - vmovss 1152(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(__expf_finite) - - vmovss %xmm0, 1216(%rsp,%r15,8) - jmp .LBL_2_7 - -#endif -END (_ZGVeN16v_expf_skx) - - .section .rodata, "a" -.L_2il0floatpacket.13: - .long 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff - .type .L_2il0floatpacket.13,@object diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core.S deleted file mode 100644 index 8051720ec2..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized expf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVbN4v_expf) - .type _ZGVbN4v_expf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVbN4v_expf_sse4(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jz 2f - ret -2: leaq _ZGVbN4v_expf_sse2(%rip), %rax - ret -END (_ZGVbN4v_expf) -libmvec_hidden_def (_ZGVbN4v_expf) - -#define _ZGVbN4v_expf _ZGVbN4v_expf_sse2 -#include "../svml_s_expf4_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core_sse4.S deleted file mode 100644 index 2bc510bbf7..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core_sse4.S +++ /dev/null @@ -1,212 +0,0 @@ -/* Function expf vectorized with SSE4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_expf_data.h" - - .text -ENTRY (_ZGVbN4v_expf_sse4) -/* - ALGORITHM DESCRIPTION: - - Argument representation: - M = rint(X*2^k/ln2) = 2^k*N+j - X = M*ln2/2^k + r = N*ln2 + ln2*(j/2^k) + r - then -ln2/2^(k+1) < r < ln2/2^(k+1) - Alternatively: - M = trunc(X*2^k/ln2) - then 0 < r < ln2/2^k - - Result calculation: - exp(X) = exp(N*ln2 + ln2*(j/2^k) + r) - = 2^N * 2^(j/2^k) * exp(r) - 2^N is calculated by bit manipulation - 2^(j/2^k) is computed from table lookup - exp(r) is approximated by polynomial - - The table lookup is skipped if k = 0. - For low accuracy approximation, exp(r) ~ 1 or 1+r. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $320, %rsp - movaps %xmm0, %xmm5 - movq __svml_sexp_data@GOTPCREL(%rip), %rax - movups __sInvLn2(%rax), %xmm0 - -/* m = x*2^k/ln2 + shifter */ - mulps %xmm5, %xmm0 - movups __sShifter(%rax), %xmm6 - movups __sLn2hi(%rax), %xmm4 - addps %xmm6, %xmm0 - -/* n = m - shifter = rint(x*2^k/ln2) */ - movaps %xmm0, %xmm2 - -/* remove sign of x by "and" operation */ - movdqu __iAbsMask(%rax), %xmm7 - subps %xmm6, %xmm2 - -/* r = x-n*ln2_hi/2^k */ - mulps %xmm2, %xmm4 - pand %xmm5, %xmm7 - -/* compare against threshold */ - pcmpgtd __iDomainRange(%rax), %xmm7 - movups __sLn2lo(%rax), %xmm1 - -/* set mask for overflow/underflow */ - movmskps %xmm7, %ecx - movaps %xmm5, %xmm7 - movups __sPC5(%rax), %xmm3 - subps %xmm4, %xmm7 - -/* r = r-n*ln2_lo/2^k = x - n*ln2/2^k */ - mulps %xmm1, %xmm2 - -/* compute 2^N with "shift" */ - movdqu __iBias(%rax), %xmm6 - subps %xmm2, %xmm7 - -/* c5*r+c4 */ - mulps %xmm7, %xmm3 - paddd %xmm6, %xmm0 - pslld $23, %xmm0 - addps __sPC4(%rax), %xmm3 - -/* (c5*r+c4)*r+c3 */ - mulps %xmm7, %xmm3 - addps __sPC3(%rax), %xmm3 - -/* ((c5*r+c4)*r+c3)*r+c2 */ - mulps %xmm7, %xmm3 - addps __sPC2(%rax), %xmm3 - -/* (((c5*r+c4)*r+c3)*r+c2)*r+c1 */ - mulps %xmm7, %xmm3 - addps __sPC1(%rax), %xmm3 - -/* exp(r) = ((((c5*r+c4)*r+c3)*r+c2)*r+c1)*r+c0 */ - mulps %xmm3, %xmm7 - addps __sPC0(%rax), %xmm7 - -/* 2^N*exp(r) */ - mulps %xmm7, %xmm0 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - movups %xmm5, 192(%rsp) - movups %xmm0, 256(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - movups %xmm8, 112(%rsp) - movups %xmm9, 96(%rsp) - movups %xmm10, 80(%rsp) - movups %xmm11, 64(%rsp) - movups %xmm12, 48(%rsp) - movups %xmm13, 32(%rsp) - movups %xmm14, 16(%rsp) - movups %xmm15, (%rsp) - movq %rsi, 136(%rsp) - movq %rdi, 128(%rsp) - movq %r12, 168(%rsp) - cfi_offset_rel_rsp (12, 168) - movb %dl, %r12b - movq %r13, 160(%rsp) - cfi_offset_rel_rsp (13, 160) - movl %ecx, %r13d - movq %r14, 152(%rsp) - cfi_offset_rel_rsp (14, 152) - movl %eax, %r14d - movq %r15, 144(%rsp) - cfi_offset_rel_rsp (15, 144) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - movups 112(%rsp), %xmm8 - movups 96(%rsp), %xmm9 - movups 80(%rsp), %xmm10 - movups 64(%rsp), %xmm11 - movups 48(%rsp), %xmm12 - movups 32(%rsp), %xmm13 - movups 16(%rsp), %xmm14 - movups (%rsp), %xmm15 - movq 136(%rsp), %rsi - movq 128(%rsp), %rdi - movq 168(%rsp), %r12 - cfi_restore (%r12) - movq 160(%rsp), %r13 - cfi_restore (%r13) - movq 152(%rsp), %r14 - cfi_restore (%r14) - movq 144(%rsp), %r15 - cfi_restore (%r15) - movups 256(%rsp), %xmm0 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - movss 196(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(__expf_finite) - - movss %xmm0, 260(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - movss 192(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(__expf_finite) - - movss %xmm0, 256(%rsp,%r15,8) - jmp .LBL_1_7 - -END (_ZGVbN4v_expf_sse4) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core.S deleted file mode 100644 index 6ffb1fd784..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized expf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVdN8v_expf) - .type _ZGVdN8v_expf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVdN8v_expf_avx2(%rip), %rax - HAS_ARCH_FEATURE (AVX2_Usable) - jz 2f - ret -2: leaq _ZGVdN8v_expf_sse_wrapper(%rip), %rax - ret -END (_ZGVdN8v_expf) -libmvec_hidden_def (_ZGVdN8v_expf) - -#define _ZGVdN8v_expf _ZGVdN8v_expf_sse_wrapper -#include "../svml_s_expf8_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core_avx2.S deleted file mode 100644 index b4a070ac86..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core_avx2.S +++ /dev/null @@ -1,202 +0,0 @@ -/* Function expf vectorized with AVX2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_expf_data.h" - - .text -ENTRY(_ZGVdN8v_expf_avx2) -/* - ALGORITHM DESCRIPTION: - - Argument representation: - M = rint(X*2^k/ln2) = 2^k*N+j - X = M*ln2/2^k + r = N*ln2 + ln2*(j/2^k) + r - then -ln2/2^(k+1) < r < ln2/2^(k+1) - Alternatively: - M = trunc(X*2^k/ln2) - then 0 < r < ln2/2^k - - Result calculation: - exp(X) = exp(N*ln2 + ln2*(j/2^k) + r) - = 2^N * 2^(j/2^k) * exp(r) - 2^N is calculated by bit manipulation - 2^(j/2^k) is computed from table lookup - exp(r) is approximated by polynomial - - The table lookup is skipped if k = 0. - For low accuracy approximation, exp(r) ~ 1 or 1+r. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $448, %rsp - movq __svml_sexp_data@GOTPCREL(%rip), %rax - vmovaps %ymm0, %ymm2 - vmovups __sInvLn2(%rax), %ymm7 - vmovups __sShifter(%rax), %ymm4 - vmovups __sLn2hi(%rax), %ymm3 - vmovups __sPC5(%rax), %ymm1 - -/* m = x*2^k/ln2 + shifter */ - vfmadd213ps %ymm4, %ymm2, %ymm7 - -/* n = m - shifter = rint(x*2^k/ln2) */ - vsubps %ymm4, %ymm7, %ymm0 - vpaddd __iBias(%rax), %ymm7, %ymm4 - -/* remove sign of x by "and" operation */ - vandps __iAbsMask(%rax), %ymm2, %ymm5 - -/* compare against threshold */ - vpcmpgtd __iDomainRange(%rax), %ymm5, %ymm6 - -/* r = x-n*ln2_hi/2^k */ - vmovaps %ymm2, %ymm5 - vfnmadd231ps %ymm0, %ymm3, %ymm5 - -/* r = r-n*ln2_lo/2^k = x - n*ln2/2^k */ - vfnmadd132ps __sLn2lo(%rax), %ymm5, %ymm0 - -/* c5*r+c4 */ - vfmadd213ps __sPC4(%rax), %ymm0, %ymm1 - -/* (c5*r+c4)*r+c3 */ - vfmadd213ps __sPC3(%rax), %ymm0, %ymm1 - -/* ((c5*r+c4)*r+c3)*r+c2 */ - vfmadd213ps __sPC2(%rax), %ymm0, %ymm1 - -/* (((c5*r+c4)*r+c3)*r+c2)*r+c1 */ - vfmadd213ps __sPC1(%rax), %ymm0, %ymm1 - -/* exp(r) = ((((c5*r+c4)*r+c3)*r+c2)*r+c1)*r+c0 */ - vfmadd213ps __sPC0(%rax), %ymm0, %ymm1 - -/* set mask for overflow/underflow */ - vmovmskps %ymm6, %ecx - -/* compute 2^N with "shift" */ - vpslld $23, %ymm4, %ymm6 - -/* 2^N*exp(r) */ - vmulps %ymm1, %ymm6, %ymm0 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %ymm2, 320(%rsp) - vmovups %ymm0, 384(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - vmovups %ymm8, 224(%rsp) - vmovups %ymm9, 192(%rsp) - vmovups %ymm10, 160(%rsp) - vmovups %ymm11, 128(%rsp) - vmovups %ymm12, 96(%rsp) - vmovups %ymm13, 64(%rsp) - vmovups %ymm14, 32(%rsp) - vmovups %ymm15, (%rsp) - movq %rsi, 264(%rsp) - movq %rdi, 256(%rsp) - movq %r12, 296(%rsp) - cfi_offset_rel_rsp (12, 296) - movb %dl, %r12b - movq %r13, 288(%rsp) - cfi_offset_rel_rsp (13, 288) - movl %ecx, %r13d - movq %r14, 280(%rsp) - cfi_offset_rel_rsp (14, 280) - movl %eax, %r14d - movq %r15, 272(%rsp) - cfi_offset_rel_rsp (15, 272) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - vmovups 224(%rsp), %ymm8 - vmovups 192(%rsp), %ymm9 - vmovups 160(%rsp), %ymm10 - vmovups 128(%rsp), %ymm11 - vmovups 96(%rsp), %ymm12 - vmovups 64(%rsp), %ymm13 - vmovups 32(%rsp), %ymm14 - vmovups (%rsp), %ymm15 - vmovups 384(%rsp), %ymm0 - movq 264(%rsp), %rsi - movq 256(%rsp), %rdi - movq 296(%rsp), %r12 - cfi_restore (%r12) - movq 288(%rsp), %r13 - cfi_restore (%r13) - movq 280(%rsp), %r14 - cfi_restore (%r14) - movq 272(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 324(%rsp,%r15,8), %xmm0 - vzeroupper - - call JUMPTARGET(__expf_finite) - - vmovss %xmm0, 388(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - vmovss 320(%rsp,%r15,8), %xmm0 - vzeroupper - - call JUMPTARGET(__expf_finite) - - vmovss %xmm0, 384(%rsp,%r15,8) - jmp .LBL_1_7 - -END(_ZGVdN8v_expf_avx2) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core.S deleted file mode 100644 index 8ab03195c6..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of vectorized logf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVeN16v_logf) - .type _ZGVeN16v_logf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVeN16v_logf_skx(%rip), %rax - HAS_ARCH_FEATURE (AVX512DQ_Usable) - jnz 2f - leaq _ZGVeN16v_logf_knl(%rip), %rax - HAS_ARCH_FEATURE (AVX512F_Usable) - jnz 2f - leaq _ZGVeN16v_logf_avx2_wrapper(%rip), %rax -2: ret -END (_ZGVeN16v_logf) - -#define _ZGVeN16v_logf _ZGVeN16v_logf_avx2_wrapper -#include "../svml_s_logf16_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core_avx512.S deleted file mode 100644 index 7ff6fff848..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core_avx512.S +++ /dev/null @@ -1,416 +0,0 @@ -/* Function logf vectorized with AVX-512. KNL and SKX versions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_logf_data.h" -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVeN16v_logf_knl) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN8v_logf -#else -/* - ALGORITHM DESCRIPTION: - - log(x) = exponent_x*log(2) + log(mantissa_x), if mantissa_x<4/3 - log(x) = (exponent_x+1)*log(2) + log(0.5*mantissa_x), if mantissa_x>4/3 - - R = mantissa_x - 1, if mantissa_x<4/3 - R = 0.5*mantissa_x - 1, if mantissa_x>4/3 - |R|< 1/3 - - log(1+R) is approximated as a polynomial: degree 9 for 1-ulp, - degree 7 for 4-ulp, degree 3 for half-precision. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_slog_data@GOTPCREL(%rip), %rax - movl $-1, %ecx - -/* reduction: compute r,n */ - vpsubd _iBrkValue(%rax), %zmm0, %zmm2 - vmovups _sPoly_7(%rax), %zmm7 - vpandd _iOffExpoMask(%rax), %zmm2, %zmm3 - -/* exponent_x (mantissa_x<4/3) or exponent_x+1 (mantissa_x>4/3) */ - vpsrad $23, %zmm2, %zmm4 - -/* check for working range, - set special argument mask (denormals/zero/Inf/NaN) - */ - vpaddd _iHiDelta(%rax), %zmm0, %zmm1 - -/* mantissa_x (mantissa_x<4/3), or 0.5*mantissa_x (mantissa_x>4/3) */ - vpaddd _iBrkValue(%rax), %zmm3, %zmm6 - vpcmpd $1, _iLoRange(%rax), %zmm1, %k1 - vcvtdq2ps {rn-sae}, %zmm4, %zmm1 - -/* reduced argument R */ - vsubps _sOne(%rax), %zmm6, %zmm8 - vpbroadcastd %ecx, %zmm5{%k1}{z} - -/* polynomial evaluation starts here */ - vfmadd213ps _sPoly_6(%rax), %zmm8, %zmm7 - vptestmd %zmm5, %zmm5, %k0 - kmovw %k0, %ecx - vfmadd213ps _sPoly_5(%rax), %zmm8, %zmm7 - vfmadd213ps _sPoly_4(%rax), %zmm8, %zmm7 - vfmadd213ps _sPoly_3(%rax), %zmm8, %zmm7 - vfmadd213ps _sPoly_2(%rax), %zmm8, %zmm7 - vfmadd213ps _sPoly_1(%rax), %zmm8, %zmm7 - vmulps %zmm8, %zmm7, %zmm9 - -/* polynomial evaluation end */ - vfmadd213ps %zmm8, %zmm8, %zmm9 - -/* - final reconstruction: - add exponent_value*log2 to polynomial result - */ - vfmadd132ps _sLn2(%rax), %zmm9, %zmm1 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm1, 1216(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - kmovw %k4, 1048(%rsp) - xorl %eax, %eax - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - addb $1, %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - kmovw 1048(%rsp), %k4 - movq 1064(%rsp), %rsi - kmovw 1040(%rsp), %k5 - movq 1056(%rsp), %rdi - kmovw 1032(%rsp), %k6 - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - vmovups 1216(%rsp), %zmm1 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 1156(%rsp,%r15,8), %xmm0 - call JUMPTARGET(__logf_finite) - vmovss %xmm0, 1220(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - vmovss 1152(%rsp,%r15,8), %xmm0 - call JUMPTARGET(__logf_finite) - vmovss %xmm0, 1216(%rsp,%r15,8) - jmp .LBL_1_7 -#endif -END (_ZGVeN16v_logf_knl) - -ENTRY (_ZGVeN16v_logf_skx) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN8v_logf -#else -/* - ALGORITHM DESCRIPTION: - - log(x) = exponent_x*log(2) + log(mantissa_x), if mantissa_x<4/3 - log(x) = (exponent_x+1)*log(2) + log(0.5*mantissa_x), if mantissa_x>4/3 - - R = mantissa_x - 1, if mantissa_x<4/3 - R = 0.5*mantissa_x - 1, if mantissa_x>4/3 - |R|< 1/3 - - log(1+R) is approximated as a polynomial: degree 9 for 1-ulp, - degree 7 for 4-ulp, degree 3 for half-precision. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_slog_data@GOTPCREL(%rip), %rax - vmovups .L_2il0floatpacket.7(%rip), %zmm6 - vmovups _iBrkValue(%rax), %zmm4 - vmovups _sPoly_7(%rax), %zmm8 - -/* - check for working range, - set special argument mask (denormals/zero/Inf/NaN) - */ - vpaddd _iHiDelta(%rax), %zmm0, %zmm1 - -/* reduction: compute r,n */ - vpsubd %zmm4, %zmm0, %zmm2 - vpcmpd $5, _iLoRange(%rax), %zmm1, %k1 - -/* exponent_x (mantissa_x<4/3) or exponent_x+1 (mantissa_x>4/3) */ - vpsrad $23, %zmm2, %zmm5 - vpandd _iOffExpoMask(%rax), %zmm2, %zmm3 - -/* mantissa_x (mantissa_x<4/3), or 0.5*mantissa_x (mantissa_x>4/3) */ - vpaddd %zmm4, %zmm3, %zmm7 - -/* reduced argument R */ - vsubps _sOne(%rax), %zmm7, %zmm9 - -/* polynomial evaluation starts here */ - vfmadd213ps _sPoly_6(%rax), %zmm9, %zmm8 - vfmadd213ps _sPoly_5(%rax), %zmm9, %zmm8 - vfmadd213ps _sPoly_4(%rax), %zmm9, %zmm8 - vfmadd213ps _sPoly_3(%rax), %zmm9, %zmm8 - vfmadd213ps _sPoly_2(%rax), %zmm9, %zmm8 - vfmadd213ps _sPoly_1(%rax), %zmm9, %zmm8 - vmulps %zmm9, %zmm8, %zmm10 - -/* polynomial evaluation end */ - vfmadd213ps %zmm9, %zmm9, %zmm10 - vpandnd %zmm1, %zmm1, %zmm6{%k1} - vptestmd %zmm6, %zmm6, %k0 - vcvtdq2ps {rn-sae}, %zmm5, %zmm1 - kmovw %k0, %ecx - -/* - final reconstruction: - add exponent_value*log2 to polynomial result - */ - vfmadd132ps _sLn2(%rax), %zmm10, %zmm1 - testl %ecx, %ecx - jne .LBL_2_3 - -.LBL_2_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_2_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm1, 1216(%rsp) - je .LBL_2_2 - - xorb %dl, %dl - xorl %eax, %eax - kmovw %k4, 1048(%rsp) - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_2_6: - btl %r14d, %r13d - jc .LBL_2_12 - -.LBL_2_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_2_10 - -.LBL_2_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_2_6 - - kmovw 1048(%rsp), %k4 - kmovw 1040(%rsp), %k5 - kmovw 1032(%rsp), %k6 - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - vmovups 1216(%rsp), %zmm1 - movq 1064(%rsp), %rsi - movq 1056(%rsp), %rdi - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_2_2 - -.LBL_2_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 1156(%rsp,%r15,8), %xmm0 - vzeroupper - vmovss 1156(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(__logf_finite) - - vmovss %xmm0, 1220(%rsp,%r15,8) - jmp .LBL_2_8 - -.LBL_2_12: - movzbl %r12b, %r15d - vmovss 1152(%rsp,%r15,8), %xmm0 - vzeroupper - vmovss 1152(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(__logf_finite) - - vmovss %xmm0, 1216(%rsp,%r15,8) - jmp .LBL_2_7 - -#endif -END (_ZGVeN16v_logf_skx) - - .section .rodata, "a" -.L_2il0floatpacket.7: - .long 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff - .type .L_2il0floatpacket.7,@object diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core.S deleted file mode 100644 index 4e0e36d5bd..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized logf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVbN4v_logf) - .type _ZGVbN4v_logf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVbN4v_logf_sse4(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jz 2f - ret -2: leaq _ZGVbN4v_logf_sse2(%rip), %rax - ret -END (_ZGVbN4v_logf) -libmvec_hidden_def (_ZGVbN4v_logf) - -#define _ZGVbN4v_logf _ZGVbN4v_logf_sse2 -#include "../svml_s_logf4_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core_sse4.S deleted file mode 100644 index 156face181..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core_sse4.S +++ /dev/null @@ -1,194 +0,0 @@ -/* Function logf vectorized with SSE4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_logf_data.h" - - .text -ENTRY (_ZGVbN4v_logf_sse4) -/* - ALGORITHM DESCRIPTION: - - log(x) = exponent_x*log(2) + log(mantissa_x), if mantissa_x<4/3 - log(x) = (exponent_x+1)*log(2) + log(0.5*mantissa_x), if mantissa_x>4/3 - - R = mantissa_x - 1, if mantissa_x<4/3 - R = 0.5*mantissa_x - 1, if mantissa_x>4/3 - |R|< 1/3 - - log(1+R) is approximated as a polynomial: degree 9 for 1-ulp, - degree 7 for 4-ulp, degree 3 for half-precision. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $320, %rsp - -/* reduction: compute r,n */ - movaps %xmm0, %xmm2 - -/* check for working range, - set special argument mask (denormals/zero/Inf/NaN) */ - movq __svml_slog_data@GOTPCREL(%rip), %rax - movdqu _iHiDelta(%rax), %xmm1 - movdqu _iLoRange(%rax), %xmm4 - paddd %xmm0, %xmm1 - movdqu _iBrkValue(%rax), %xmm3 - pcmpgtd %xmm1, %xmm4 - movdqu _iOffExpoMask(%rax), %xmm1 - psubd %xmm3, %xmm2 - pand %xmm2, %xmm1 - -/* exponent_x (mantissa_x<4/3) or exponent_x+1 (mantissa_x>4/3) */ - psrad $23, %xmm2 - paddd %xmm3, %xmm1 - movups _sPoly_7(%rax), %xmm5 - -/* mantissa_x (mantissa_x<4/3), or 0.5*mantissa_x (mantissa_x>4/3) */ - cvtdq2ps %xmm2, %xmm6 - -/* reduced argument R */ - subps _sOne(%rax), %xmm1 - movmskps %xmm4, %ecx - -/* final reconstruction: - add exponent_value*log2 to polynomial result */ - mulps _sLn2(%rax), %xmm6 - -/* polynomial evaluation starts here */ - mulps %xmm1, %xmm5 - addps _sPoly_6(%rax), %xmm5 - mulps %xmm1, %xmm5 - addps _sPoly_5(%rax), %xmm5 - mulps %xmm1, %xmm5 - addps _sPoly_4(%rax), %xmm5 - mulps %xmm1, %xmm5 - addps _sPoly_3(%rax), %xmm5 - mulps %xmm1, %xmm5 - addps _sPoly_2(%rax), %xmm5 - mulps %xmm1, %xmm5 - addps _sPoly_1(%rax), %xmm5 - mulps %xmm1, %xmm5 - -/* polynomial evaluation end */ - mulps %xmm1, %xmm5 - addps %xmm5, %xmm1 - addps %xmm6, %xmm1 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movdqa %xmm1, %xmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - movups %xmm0, 192(%rsp) - movups %xmm1, 256(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - movups %xmm8, 112(%rsp) - movups %xmm9, 96(%rsp) - movups %xmm10, 80(%rsp) - movups %xmm11, 64(%rsp) - movups %xmm12, 48(%rsp) - movups %xmm13, 32(%rsp) - movups %xmm14, 16(%rsp) - movups %xmm15, (%rsp) - movq %rsi, 136(%rsp) - movq %rdi, 128(%rsp) - movq %r12, 168(%rsp) - cfi_offset_rel_rsp (12, 168) - movb %dl, %r12b - movq %r13, 160(%rsp) - cfi_offset_rel_rsp (13, 160) - movl %ecx, %r13d - movq %r14, 152(%rsp) - cfi_offset_rel_rsp (14, 152) - movl %eax, %r14d - movq %r15, 144(%rsp) - cfi_offset_rel_rsp (15, 144) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - movups 112(%rsp), %xmm8 - movups 96(%rsp), %xmm9 - movups 80(%rsp), %xmm10 - movups 64(%rsp), %xmm11 - movups 48(%rsp), %xmm12 - movups 32(%rsp), %xmm13 - movups 16(%rsp), %xmm14 - movups (%rsp), %xmm15 - movq 136(%rsp), %rsi - movq 128(%rsp), %rdi - movq 168(%rsp), %r12 - cfi_restore (%r12) - movq 160(%rsp), %r13 - cfi_restore (%r13) - movq 152(%rsp), %r14 - cfi_restore (%r14) - movq 144(%rsp), %r15 - cfi_restore (%r15) - movups 256(%rsp), %xmm1 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - movss 196(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(__logf_finite) - - movss %xmm0, 260(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - movss 192(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(__logf_finite) - - movss %xmm0, 256(%rsp,%r15,8) - jmp .LBL_1_7 - -END (_ZGVbN4v_logf_sse4) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core.S deleted file mode 100644 index f4b82de3d4..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized logf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVdN8v_logf) - .type _ZGVdN8v_logf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVdN8v_logf_avx2(%rip), %rax - HAS_ARCH_FEATURE (AVX2_Usable) - jz 2f - ret -2: leaq _ZGVdN8v_logf_sse_wrapper(%rip), %rax - ret -END (_ZGVdN8v_logf) -libmvec_hidden_def (_ZGVdN8v_logf) - -#define _ZGVdN8v_logf _ZGVdN8v_logf_sse_wrapper -#include "../svml_s_logf8_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core_avx2.S deleted file mode 100644 index 994af91ffe..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core_avx2.S +++ /dev/null @@ -1,184 +0,0 @@ -/* Function logf vectorized with AVX2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_logf_data.h" - - .text -ENTRY(_ZGVdN8v_logf_avx2) -/* - ALGORITHM DESCRIPTION: - - log(x) = exponent_x*log(2) + log(mantissa_x), if mantissa_x<4/3 - log(x) = (exponent_x+1)*log(2) + log(0.5*mantissa_x), if mantissa_x>4/3 - - R = mantissa_x - 1, if mantissa_x<4/3 - R = 0.5*mantissa_x - 1, if mantissa_x>4/3 - |R|< 1/3 - - log(1+R) is approximated as a polynomial: degree 9 for 1-ulp, - degree 7 for 4-ulp, degree 3 for half-precision. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $448, %rsp - movq __svml_slog_data@GOTPCREL(%rip), %rax - vmovaps %ymm0, %ymm2 - vmovups _iBrkValue(%rax), %ymm6 - vmovups _iLoRange(%rax), %ymm1 -/* check for working range, - set special argument mask (denormals/zero/Inf/NaN) */ - vpaddd _iHiDelta(%rax), %ymm2, %ymm7 - -/* reduction: compute r,n */ - vpsubd %ymm6, %ymm2, %ymm4 - -/* exponent_x (mantissa_x<4/3) or exponent_x+1 (mantissa_x>4/3) */ - vpsrad $23, %ymm4, %ymm3 - vpand _iOffExpoMask(%rax), %ymm4, %ymm5 - vmovups _sPoly_7(%rax), %ymm4 - vcvtdq2ps %ymm3, %ymm0 - -/* mantissa_x (mantissa_x<4/3), or 0.5*mantissa_x (mantissa_x>4/3) */ - vpaddd %ymm6, %ymm5, %ymm3 - -/* reduced argument R */ - vsubps _sOne(%rax), %ymm3, %ymm5 - -/* polynomial evaluation starts here */ - vfmadd213ps _sPoly_6(%rax), %ymm5, %ymm4 - vfmadd213ps _sPoly_5(%rax), %ymm5, %ymm4 - vfmadd213ps _sPoly_4(%rax), %ymm5, %ymm4 - vfmadd213ps _sPoly_3(%rax), %ymm5, %ymm4 - vfmadd213ps _sPoly_2(%rax), %ymm5, %ymm4 - vfmadd213ps _sPoly_1(%rax), %ymm5, %ymm4 - vmulps %ymm5, %ymm4, %ymm6 - -/* polynomial evaluation end */ - vfmadd213ps %ymm5, %ymm5, %ymm6 - vpcmpgtd %ymm7, %ymm1, %ymm1 - vmovmskps %ymm1, %ecx - -/* final reconstruction: - add exponent_value*log2 to polynomial result */ - vfmadd132ps _sLn2(%rax), %ymm6, %ymm0 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %ymm2, 320(%rsp) - vmovups %ymm0, 384(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - vmovups %ymm8, 224(%rsp) - vmovups %ymm9, 192(%rsp) - vmovups %ymm10, 160(%rsp) - vmovups %ymm11, 128(%rsp) - vmovups %ymm12, 96(%rsp) - vmovups %ymm13, 64(%rsp) - vmovups %ymm14, 32(%rsp) - vmovups %ymm15, (%rsp) - movq %rsi, 264(%rsp) - movq %rdi, 256(%rsp) - movq %r12, 296(%rsp) - cfi_offset_rel_rsp (12, 296) - movb %dl, %r12b - movq %r13, 288(%rsp) - cfi_offset_rel_rsp (13, 288) - movl %ecx, %r13d - movq %r14, 280(%rsp) - cfi_offset_rel_rsp (14, 280) - movl %eax, %r14d - movq %r15, 272(%rsp) - cfi_offset_rel_rsp (15, 272) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - vmovups 224(%rsp), %ymm8 - vmovups 192(%rsp), %ymm9 - vmovups 160(%rsp), %ymm10 - vmovups 128(%rsp), %ymm11 - vmovups 96(%rsp), %ymm12 - vmovups 64(%rsp), %ymm13 - vmovups 32(%rsp), %ymm14 - vmovups (%rsp), %ymm15 - vmovups 384(%rsp), %ymm0 - movq 264(%rsp), %rsi - movq 256(%rsp), %rdi - movq 296(%rsp), %r12 - cfi_restore (%r12) - movq 288(%rsp), %r13 - cfi_restore (%r13) - movq 280(%rsp), %r14 - cfi_restore (%r14) - movq 272(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 324(%rsp,%r15,8), %xmm0 - vzeroupper - - call JUMPTARGET(__logf_finite) - - vmovss %xmm0, 388(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - vmovss 320(%rsp,%r15,8), %xmm0 - vzeroupper - - call JUMPTARGET(__logf_finite) - - vmovss %xmm0, 384(%rsp,%r15,8) - jmp .LBL_1_7 - -END(_ZGVdN8v_logf_avx2) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core.S deleted file mode 100644 index 6d10c7576f..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of vectorized powf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVeN16vv_powf) - .type _ZGVeN16vv_powf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVeN16vv_powf_skx(%rip), %rax - HAS_ARCH_FEATURE (AVX512DQ_Usable) - jnz 2f - leaq _ZGVeN16vv_powf_knl(%rip), %rax - HAS_ARCH_FEATURE (AVX512F_Usable) - jnz 2f - leaq _ZGVeN16vv_powf_avx2_wrapper(%rip), %rax -2: ret -END (_ZGVeN16vv_powf) - -#define _ZGVeN16vv_powf _ZGVeN16vv_powf_avx2_wrapper -#include "../svml_s_powf16_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core_avx512.S deleted file mode 100644 index fc91a092b0..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core_avx512.S +++ /dev/null @@ -1,653 +0,0 @@ -/* Function powf vectorized with AVX-512. KNL and SKX versions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_powf_data.h" -#include "svml_s_wrapper_impl.h" - -/* - ALGORITHM DESCRIPTION: - - We are using the next identity : pow(x,y) = 2^(y * log2(x)). - - 1) log2(x) calculation - Here we use the following formula. - Let |x|=2^k1*X1, where k1 is integer, 1<=X1<2. - Let C ~= 1/ln(2), - Rcp1 ~= 1/X1, X2=Rcp1*X1, - Rcp2 ~= 1/X2, X3=Rcp2*X2, - Rcp3 ~= 1/X3, Rcp3C ~= C/X3. - Then - log2|x| = k1 + log2(1/Rcp1) + log2(1/Rcp2) + log2(C/Rcp3C) + - log2(X1*Rcp1*Rcp2*Rcp3C/C), - where X1*Rcp1*Rcp2*Rcp3C = C*(1+q), q is very small. - - The values of Rcp1, log2(1/Rcp1), Rcp2, log2(1/Rcp2), - Rcp3C, log2(C/Rcp3C) are taken from tables. - Values of Rcp1, Rcp2, Rcp3C are such that RcpC=Rcp1*Rcp2*Rcp3C - is exactly represented in target precision. - - log2(X1*Rcp1*Rcp2*Rcp3C/C) = log2(1+q) = ln(1+q)/ln2 = - = 1/(ln2)*q - 1/(2ln2)*q^2 + 1/(3ln2)*q^3 - ... = - = 1/(C*ln2)*cq - 1/(2*C^2*ln2)*cq^2 + 1/(3*C^3*ln2)*cq^3 - ... = - = (1 + a1)*cq + a2*cq^2 + a3*cq^3 + ..., - where - cq=X1*Rcp1*Rcp2*Rcp3C-C, - a1=1/(C*ln(2))-1 is small, - a2=1/(2*C^2*ln2), - a3=1/(3*C^3*ln2), - ... - Log2 result is split by three parts: HH+HL+HLL - - 2) Calculation of y*log2(x) - Split y into YHi+YLo. - Get high PH and medium PL parts of y*log2|x|. - Get low PLL part of y*log2|x|. - Now we have PH+PL+PLL ~= y*log2|x|. - - 3) Calculation of 2^(y*log2(x)) - Let's represent PH+PL+PLL in the form N + j/2^expK + Z, - where expK=7 in this implementation, N and j are integers, - 0<=j<=2^expK-1, |Z|<2^(-expK-1). Hence - 2^(PH+PL+PLL) ~= 2^N * 2^(j/2^expK) * 2^Z, - where 2^(j/2^expK) is stored in a table, and - 2^Z ~= 1 + B1*Z + B2*Z^2 ... + B5*Z^5. - We compute 2^(PH+PL+PLL) as follows: - Break PH into PHH + PHL, where PHH = N + j/2^expK. - Z = PHL + PL + PLL - Exp2Poly = B1*Z + B2*Z^2 ... + B5*Z^5 - Get 2^(j/2^expK) from table in the form THI+TLO. - Now we have 2^(PH+PL+PLL) ~= 2^N * (THI + TLO) * (1 + Exp2Poly). - Get significand of 2^(PH+PL+PLL) in the form ResHi+ResLo: - ResHi := THI - ResLo := THI * Exp2Poly + TLO - Get exponent ERes of the result: - Res := ResHi + ResLo: - Result := ex(Res) + N. */ - - .text -ENTRY (_ZGVeN16vv_powf_knl) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512_ff _ZGVdN8vv_powf -#else - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1344, %rsp - movq __svml_spow_data@GOTPCREL(%rip), %rdx - vmovaps %zmm1, %zmm9 - vshuff32x4 $238, %zmm0, %zmm0, %zmm7 - kxnorw %k3, %k3, %k3 - vcvtps2pd %ymm0, %zmm14 - vcvtps2pd %ymm7, %zmm10 - movl $-1, %eax - movq $-1, %rcx - vpandd _ABSMASK(%rdx), %zmm9, %zmm4 - vmovups _ExpMask(%rdx), %zmm6 - -/* exponent bits selection */ - vpsrlq $20, %zmm14, %zmm13 - vshuff32x4 $238, %zmm9, %zmm9, %zmm8 - vpcmpd $5, _INF(%rdx), %zmm4, %k2 - vpsrlq $32, %zmm13, %zmm15 - vcvtps2pd %ymm8, %zmm2 - vmovups _Two10(%rdx), %zmm4 - vpmovqd %zmm15, %ymm12 - vcvtps2pd %ymm9, %zmm1 - vpsubd _NMINNORM(%rdx), %zmm0, %zmm3 - vpbroadcastd %eax, %zmm8{%k2}{z} - vpcmpd $5, _NMAXVAL(%rdx), %zmm3, %k1 - -/* preserve mantissa, set input exponent to 2^(-10) */ - vmovaps %zmm6, %zmm3 - vpternlogq $248, %zmm6, %zmm10, %zmm4 - vpsrlq $20, %zmm10, %zmm10 - vpternlogq $234, _Two10(%rdx), %zmm14, %zmm3 - -/* reciprocal approximation good to at least 11 bits */ - vrcp28pd %zmm4, %zmm11 - vpsrlq $32, %zmm10, %zmm14 - vpbroadcastd %eax, %zmm7{%k1}{z} - kxnorw %k1, %k1, %k1 - vrcp28pd %zmm3, %zmm5 - vpmovqd %zmm14, %ymm6 - vshufi32x4 $68, %zmm6, %zmm12, %zmm13 - vmovups _One(%rdx), %zmm6 - -/* round reciprocal to nearest integer, will have 1+9 mantissa bits */ - vrndscalepd $8, %zmm5, %zmm14 - -/* biased exponent in DP format */ - vshuff32x4 $238, %zmm13, %zmm13, %zmm5 - vrndscalepd $8, %zmm11, %zmm11 - vcmppd $30, _Threshold(%rdx), %zmm14, %k2 - vcvtdq2pd %ymm13, %zmm10 - vcvtdq2pd %ymm5, %zmm15 - -/* table lookup */ - vpsrlq $40, %zmm14, %zmm13 - vpxord %zmm5, %zmm5, %zmm5 - vgatherqpd _Log2Rcp_lookup(%rdx,%zmm13), %zmm5{%k3} - vfmsub213pd %zmm6, %zmm14, %zmm3 - vfmsub213pd %zmm6, %zmm11, %zmm4 - vcmppd $30, _Threshold(%rdx), %zmm11, %k3 - vpbroadcastq %rcx, %zmm14{%k2}{z} - -/* dpP= _dbT+lJ*T_ITEM_GRAN */ - kxnorw %k2, %k2, %k2 - vpsrlq $40, %zmm11, %zmm12 - vpxord %zmm6, %zmm6, %zmm6 - vpbroadcastq %rcx, %zmm11{%k3}{z} - kxnorw %k3, %k3, %k3 - vgatherqpd _Log2Rcp_lookup(%rdx,%zmm12), %zmm6{%k1} - vmovups _Bias1(%rdx), %zmm12 - vpternlogq $236, _Bias(%rdx), %zmm12, %zmm14 - vpternlogq $248, _Bias(%rdx), %zmm11, %zmm12 - vsubpd %zmm14, %zmm10, %zmm13 - vsubpd %zmm12, %zmm15, %zmm10 - vmovups _poly_coeff_3(%rdx), %zmm11 - vmovups _poly_coeff_4(%rdx), %zmm15 - vfmadd213pd %zmm15, %zmm4, %zmm11 - vmulpd %zmm4, %zmm4, %zmm12 - vmovaps %zmm15, %zmm14 - vmulpd %zmm3, %zmm3, %zmm15 - vfmadd231pd _poly_coeff_3(%rdx), %zmm3, %zmm14 - -/* reconstruction */ - vfmadd213pd %zmm4, %zmm12, %zmm11 - vfmadd213pd %zmm3, %zmm15, %zmm14 - vaddpd %zmm6, %zmm11, %zmm11 - vaddpd %zmm5, %zmm14, %zmm3 - vfmadd231pd _L2(%rdx), %zmm10, %zmm11 - vfmadd132pd _L2(%rdx), %zmm3, %zmm13 - vmulpd %zmm2, %zmm11, %zmm12 - vmulpd %zmm1, %zmm13, %zmm10 - vmulpd __dbInvLn2(%rdx), %zmm12, %zmm6 - -/* hi bits */ - vpsrlq $32, %zmm12, %zmm12 - vmulpd __dbInvLn2(%rdx), %zmm10, %zmm1 - -/* to round down; if dR is an integer we will get R = 1, which is ok */ - vsubpd __dbHALF(%rdx), %zmm6, %zmm4 - vpsrlq $32, %zmm10, %zmm11 - vpmovqd %zmm11, %ymm3 - vsubpd __dbHALF(%rdx), %zmm1, %zmm2 - vaddpd __dbShifter(%rdx), %zmm4, %zmm14 - vpmovqd %zmm12, %ymm4 - vshufi32x4 $68, %zmm4, %zmm3, %zmm5 - vpxord %zmm4, %zmm4, %zmm4 - vaddpd __dbShifter(%rdx), %zmm2, %zmm2 - -/* iAbsX = iAbsX&iAbsMask; */ - vpandd __iAbsMask(%rdx), %zmm5, %zmm11 - vpxord %zmm5, %zmm5, %zmm5 - vsubpd __dbShifter(%rdx), %zmm14, %zmm13 - -/* iRangeMask = (iAbsX>iDomainRange) */ - vpcmpgtd __iDomainRange(%rdx), %zmm11, %k1 - vsubpd __dbShifter(%rdx), %zmm2, %zmm15 - vpbroadcastd %eax, %zmm10{%k1}{z} - vpternlogd $254, %zmm8, %zmm7, %zmm10 - -/* [0..1) */ - vsubpd %zmm15, %zmm1, %zmm1 - -/* low K bits */ - vpandq __lbLOWKBITS(%rdx), %zmm14, %zmm11 - vgatherqpd 13952(%rdx,%zmm11,8), %zmm5{%k3} - vsubpd %zmm13, %zmm6, %zmm7 - vptestmd %zmm10, %zmm10, %k0 - vpandq __lbLOWKBITS(%rdx), %zmm2, %zmm10 - vmulpd __dbC1(%rdx), %zmm1, %zmm1 - vmulpd __dbC1(%rdx), %zmm7, %zmm3 - vpsrlq $11, %zmm2, %zmm8 - vpsrlq $11, %zmm14, %zmm2 - -/* NB : including +/- sign for the exponent!! */ - vpsllq $52, %zmm8, %zmm8 - kmovw %k0, %ecx - vpsllq $52, %zmm2, %zmm6 - vfmadd213pd %zmm5, %zmm3, %zmm5 - vgatherqpd 13952(%rdx,%zmm10,8), %zmm4{%k2} - vfmadd213pd %zmm4, %zmm1, %zmm4 - vpaddq %zmm6, %zmm5, %zmm10 - vcvtpd2ps %zmm10, %ymm12 - vpaddq %zmm8, %zmm4, %zmm7 - vcvtpd2ps %zmm7, %ymm11 - vshuff32x4 $68, %zmm12, %zmm11, %zmm1 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm9, 1216(%rsp) - vmovups %zmm1, 1280(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - kmovw %k4, 1048(%rsp) - xorl %eax, %eax - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - addb $1, %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - kmovw 1048(%rsp), %k4 - movq 1064(%rsp), %rsi - kmovw 1040(%rsp), %k5 - movq 1056(%rsp), %rdi - kmovw 1032(%rsp), %k6 - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - vmovups 1280(%rsp), %zmm1 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 1156(%rsp,%r15,8), %xmm0 - vmovss 1220(%rsp,%r15,8), %xmm1 - call JUMPTARGET(__powf_finite) - vmovss %xmm0, 1284(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - vmovss 1152(%rsp,%r15,8), %xmm0 - vmovss 1216(%rsp,%r15,8), %xmm1 - call JUMPTARGET(__powf_finite) - vmovss %xmm0, 1280(%rsp,%r15,8) - jmp .LBL_1_7 -#endif -END (_ZGVeN16vv_powf_knl) - -ENTRY (_ZGVeN16vv_powf_skx) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512_ff _ZGVdN8vv_powf -#else - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1344, %rsp - movq __svml_spow_data@GOTPCREL(%rip), %rax - vextractf32x8 $1, %zmm1, %ymm14 - vextractf32x8 $1, %zmm0, %ymm15 - vpsubd _NMINNORM(%rax), %zmm0, %zmm9 - vmovups %zmm26, 1280(%rsp) - vmovups _ExpMask(%rax), %zmm6 - vpcmpd $1, _NMAXVAL(%rax), %zmm9, %k1 - vcvtps2pd %ymm0, %zmm5 - vcvtps2pd %ymm1, %zmm12 - kxnorw %k3, %k3, %k3 - -/* exponent bits selection */ - vpsrlq $20, %zmm5, %zmm3 - vpsrlq $32, %zmm3, %zmm2 - vpmovqd %zmm2, %ymm11 - vcvtps2pd %ymm14, %zmm13 - vmovups .L_2il0floatpacket.23(%rip), %zmm14 - vmovaps %zmm14, %zmm26 - vpandd _ABSMASK(%rax), %zmm1, %zmm8 - vpcmpd $1, _INF(%rax), %zmm8, %k2 - vpandnd %zmm9, %zmm9, %zmm26{%k1} - vmovups _Two10(%rax), %zmm9 - kxnorw %k1, %k1, %k1 - vcvtps2pd %ymm15, %zmm4 - vmovaps %zmm14, %zmm15 - -/* preserve mantissa, set input exponent to 2^(-10) */ - vpternlogq $248, %zmm6, %zmm4, %zmm9 - vpsrlq $20, %zmm4, %zmm4 - -/* reciprocal approximation good to at least 11 bits */ - vrcp14pd %zmm9, %zmm10 - -/* round reciprocal to nearest integer, will have 1+9 mantissa bits */ - vrndscalepd $8, %zmm10, %zmm3 - vmovups _One(%rax), %zmm10 - vfmsub213pd %zmm10, %zmm3, %zmm9 - vpandnd %zmm8, %zmm8, %zmm15{%k2} - vmovaps %zmm6, %zmm8 - vpternlogq $234, _Two10(%rax), %zmm5, %zmm8 - vpsrlq $32, %zmm4, %zmm5 - vrcp14pd %zmm8, %zmm7 - vpmovqd %zmm5, %ymm6 - vrndscalepd $8, %zmm7, %zmm2 - vfmsub213pd %zmm10, %zmm2, %zmm8 - -/* table lookup */ - vpsrlq $40, %zmm2, %zmm10 - vinserti32x8 $1, %ymm6, %zmm11, %zmm4 - vpsrlq $40, %zmm3, %zmm11 - -/* biased exponent in DP format */ - vextracti32x8 $1, %zmm4, %ymm7 - vcvtdq2pd %ymm4, %zmm6 - vpmovqd %zmm10, %ymm4 - vpmovqd %zmm11, %ymm5 - vpxord %zmm10, %zmm10, %zmm10 - vgatherdpd _Log2Rcp_lookup(%rax,%ymm4), %zmm10{%k3} - vpbroadcastq .L_2il0floatpacket.24(%rip), %zmm4 - vpxord %zmm11, %zmm11, %zmm11 - vcvtdq2pd %ymm7, %zmm7 - vgatherdpd _Log2Rcp_lookup(%rax,%ymm5), %zmm11{%k1} - vmovups _Threshold(%rax), %zmm5 - vcmppd $21, %zmm2, %zmm5, %k2 - vcmppd $21, %zmm3, %zmm5, %k3 - vmovups _Bias1(%rax), %zmm3 - vmovaps %zmm4, %zmm2 - vpandnq %zmm5, %zmm5, %zmm2{%k2} - vpternlogq $236, _Bias(%rax), %zmm3, %zmm2 - -/* dpP= _dbT+lJ*T_ITEM_GRAN */ - kxnorw %k2, %k2, %k2 - vpandnq %zmm5, %zmm5, %zmm4{%k3} - vpternlogq $248, _Bias(%rax), %zmm4, %zmm3 - vsubpd %zmm2, %zmm6, %zmm4 - vmovups _poly_coeff_3(%rax), %zmm6 - vmovups _poly_coeff_4(%rax), %zmm2 - vsubpd %zmm3, %zmm7, %zmm5 - vmulpd %zmm8, %zmm8, %zmm7 - vfmadd213pd %zmm2, %zmm9, %zmm6 - kxnorw %k3, %k3, %k3 - vmovaps %zmm2, %zmm3 - vmulpd %zmm9, %zmm9, %zmm2 - vfmadd231pd _poly_coeff_3(%rax), %zmm8, %zmm3 - -/* reconstruction */ - vfmadd213pd %zmm9, %zmm2, %zmm6 - vfmadd213pd %zmm8, %zmm7, %zmm3 - vaddpd %zmm11, %zmm6, %zmm8 - vaddpd %zmm10, %zmm3, %zmm9 - vfmadd231pd _L2(%rax), %zmm5, %zmm8 - vfmadd132pd _L2(%rax), %zmm9, %zmm4 - vmulpd %zmm13, %zmm8, %zmm13 - vmulpd %zmm12, %zmm4, %zmm3 - vmulpd __dbInvLn2(%rax), %zmm13, %zmm10 - vmulpd __dbInvLn2(%rax), %zmm3, %zmm8 - -/* hi bits */ - vpsrlq $32, %zmm3, %zmm4 - vpsrlq $32, %zmm13, %zmm13 - -/* to round down; if dR is an integer we will get R = 1, which is ok */ - vsubpd __dbHALF(%rax), %zmm8, %zmm12 - vpmovqd %zmm4, %ymm5 - vpmovqd %zmm13, %ymm2 - vsubpd __dbHALF(%rax), %zmm10, %zmm9 - vaddpd __dbShifter(%rax), %zmm12, %zmm7 - vaddpd __dbShifter(%rax), %zmm9, %zmm9 - vsubpd __dbShifter(%rax), %zmm7, %zmm11 - vsubpd __dbShifter(%rax), %zmm9, %zmm12 - vinserti32x8 $1, %ymm2, %zmm5, %zmm3 - -/* iAbsX = iAbsX&iAbsMask */ - vpandd __iAbsMask(%rax), %zmm3, %zmm4 - -/* iRangeMask = (iAbsX>iDomainRange) */ - vpcmpd $2, __iDomainRange(%rax), %zmm4, %k1 - vpandnd %zmm4, %zmm4, %zmm14{%k1} - vpternlogd $254, %zmm15, %zmm26, %zmm14 - -/* [0..1) */ - vsubpd %zmm11, %zmm8, %zmm15 - vsubpd %zmm12, %zmm10, %zmm26 - vptestmd %zmm14, %zmm14, %k0 - vpsrlq $11, %zmm7, %zmm8 - vpsrlq $11, %zmm9, %zmm10 - vmulpd __dbC1(%rax), %zmm26, %zmm26 - vmulpd __dbC1(%rax), %zmm15, %zmm15 - -/* NB : including +/- sign for the exponent!! */ - vpsllq $52, %zmm10, %zmm13 - vpsllq $52, %zmm8, %zmm12 - kmovw %k0, %ecx - -/* low K bits */ - vpandq __lbLOWKBITS(%rax), %zmm9, %zmm14 - vpandq __lbLOWKBITS(%rax), %zmm7, %zmm6 - vpmovqd %zmm14, %ymm7 - vpmovqd %zmm6, %ymm9 - vpxord %zmm2, %zmm2, %zmm2 - vgatherdpd 13952(%rax,%ymm7,8), %zmm2{%k3} - vfmadd213pd %zmm2, %zmm26, %zmm2 - vpaddq %zmm13, %zmm2, %zmm2 - vcvtpd2ps %zmm2, %ymm4 - vpxord %zmm11, %zmm11, %zmm11 - vgatherdpd 13952(%rax,%ymm9,8), %zmm11{%k2} - vfmadd213pd %zmm11, %zmm15, %zmm11 - vpaddq %zmm12, %zmm11, %zmm3 - vcvtpd2ps %zmm3, %ymm5 - vinsertf32x8 $1, %ymm4, %zmm5, %zmm2 - testl %ecx, %ecx - jne .LBL_2_3 - -.LBL_2_2: - cfi_remember_state - vmovups 1280(%rsp), %zmm26 - vmovaps %zmm2, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_2_3: - cfi_restore_state - vmovups %zmm0, 1088(%rsp) - vmovups %zmm1, 1152(%rsp) - vmovups %zmm2, 1216(%rsp) - je .LBL_2_2 - - xorb %dl, %dl - xorl %eax, %eax - kmovw %k4, 984(%rsp) - kmovw %k5, 976(%rsp) - kmovw %k6, 968(%rsp) - kmovw %k7, 960(%rsp) - vmovups %zmm16, 896(%rsp) - vmovups %zmm17, 832(%rsp) - vmovups %zmm18, 768(%rsp) - vmovups %zmm19, 704(%rsp) - vmovups %zmm20, 640(%rsp) - vmovups %zmm21, 576(%rsp) - vmovups %zmm22, 512(%rsp) - vmovups %zmm23, 448(%rsp) - vmovups %zmm24, 384(%rsp) - vmovups %zmm25, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1000(%rsp) - movq %rdi, 992(%rsp) - movq %r12, 1032(%rsp) - cfi_offset_rel_rsp (12, 1032) - movb %dl, %r12b - movq %r13, 1024(%rsp) - cfi_offset_rel_rsp (13, 1024) - movl %ecx, %r13d - movq %r14, 1016(%rsp) - cfi_offset_rel_rsp (14, 1016) - movl %eax, %r14d - movq %r15, 1008(%rsp) - cfi_offset_rel_rsp (15, 1008) - cfi_remember_state - -.LBL_2_6: - btl %r14d, %r13d - jc .LBL_2_12 - -.LBL_2_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_2_10 - -.LBL_2_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_2_6 - - kmovw 984(%rsp), %k4 - kmovw 976(%rsp), %k5 - kmovw 968(%rsp), %k6 - kmovw 960(%rsp), %k7 - vmovups 896(%rsp), %zmm16 - vmovups 832(%rsp), %zmm17 - vmovups 768(%rsp), %zmm18 - vmovups 704(%rsp), %zmm19 - vmovups 640(%rsp), %zmm20 - vmovups 576(%rsp), %zmm21 - vmovups 512(%rsp), %zmm22 - vmovups 448(%rsp), %zmm23 - vmovups 384(%rsp), %zmm24 - vmovups 320(%rsp), %zmm25 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - vmovups 1216(%rsp), %zmm2 - movq 1000(%rsp), %rsi - movq 992(%rsp), %rdi - movq 1032(%rsp), %r12 - cfi_restore (%r12) - movq 1024(%rsp), %r13 - cfi_restore (%r13) - movq 1016(%rsp), %r14 - cfi_restore (%r14) - movq 1008(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_2_2 - -.LBL_2_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 1156(%rsp,%r15,8), %xmm1 - vzeroupper - vmovss 1092(%rsp,%r15,8), %xmm0 - call JUMPTARGET(__powf_finite) - vmovss %xmm0, 1220(%rsp,%r15,8) - jmp .LBL_2_8 - -.LBL_2_12: - movzbl %r12b, %r15d - vmovss 1152(%rsp,%r15,8), %xmm1 - vzeroupper - vmovss 1088(%rsp,%r15,8), %xmm0 - call JUMPTARGET(__powf_finite) - vmovss %xmm0, 1216(%rsp,%r15,8) - jmp .LBL_2_7 -#endif -END (_ZGVeN16vv_powf_skx) - - .section .rodata, "a" -.L_2il0floatpacket.23: - .long 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff - .type .L_2il0floatpacket.23,@object -.L_2il0floatpacket.24: - .long 0xffffffff,0xffffffff - .type .L_2il0floatpacket.24,@object diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core.S deleted file mode 100644 index 785b549882..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized powf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVbN4vv_powf) - .type _ZGVbN4vv_powf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVbN4vv_powf_sse4(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jz 2f - ret -2: leaq _ZGVbN4vv_powf_sse2(%rip), %rax - ret -END (_ZGVbN4vv_powf) -libmvec_hidden_def (_ZGVbN4vv_powf) - -#define _ZGVbN4vv_powf _ZGVbN4vv_powf_sse2 -#include "../svml_s_powf4_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core_sse4.S deleted file mode 100644 index 8b1b4e74bb..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core_sse4.S +++ /dev/null @@ -1,374 +0,0 @@ -/* Function powf vectorized with SSE4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_powf_data.h" - - .text -ENTRY (_ZGVbN4vv_powf_sse4) -/* - ALGORITHM DESCRIPTION: - - We are using the next identity: pow(x,y) = 2^(y * log2(x)). - - 1) log2(x) calculation - Here we use the following formula. - Let |x|=2^k1*X1, where k1 is integer, 1<=X1<2. - Let C ~= 1/ln(2), - Rcp1 ~= 1/X1, X2=Rcp1*X1, - Rcp2 ~= 1/X2, X3=Rcp2*X2, - Rcp3 ~= 1/X3, Rcp3C ~= C/X3. - Then - log2|x| = k1 + log2(1/Rcp1) + log2(1/Rcp2) + log2(C/Rcp3C) + - log2(X1*Rcp1*Rcp2*Rcp3C/C), - where X1*Rcp1*Rcp2*Rcp3C = C*(1+q), q is very small. - - The values of Rcp1, log2(1/Rcp1), Rcp2, log2(1/Rcp2), - Rcp3C, log2(C/Rcp3C) are taken from tables. - Values of Rcp1, Rcp2, Rcp3C are such that RcpC=Rcp1*Rcp2*Rcp3C - is exactly represented in target precision. - - log2(X1*Rcp1*Rcp2*Rcp3C/C) = log2(1+q) = ln(1+q)/ln2 = - = 1/(ln2)*q - 1/(2ln2)*q^2 + 1/(3ln2)*q^3 - ... = - = 1/(C*ln2)*cq - 1/(2*C^2*ln2)*cq^2 + 1/(3*C^3*ln2)*cq^3 - ... = - = (1 + a1)*cq + a2*cq^2 + a3*cq^3 + ..., - where - cq=X1*Rcp1*Rcp2*Rcp3C-C, - a1=1/(C*ln(2))-1 is small, - a2=1/(2*C^2*ln2), - a3=1/(3*C^3*ln2), - ... - Log2 result is split by three parts: HH+HL+HLL - - 2) Calculation of y*log2(x) - Split y into YHi+YLo. - Get high PH and medium PL parts of y*log2|x|. - Get low PLL part of y*log2|x|. - Now we have PH+PL+PLL ~= y*log2|x|. - - 3) Calculation of 2^(y*log2(x)) - Let's represent PH+PL+PLL in the form N + j/2^expK + Z, - where expK=7 in this implementation, N and j are integers, - 0<=j<=2^expK-1, |Z|<2^(-expK-1). Hence - 2^(PH+PL+PLL) ~= 2^N * 2^(j/2^expK) * 2^Z, - where 2^(j/2^expK) is stored in a table, and - 2^Z ~= 1 + B1*Z + B2*Z^2 ... + B5*Z^5. - We compute 2^(PH+PL+PLL) as follows: - Break PH into PHH + PHL, where PHH = N + j/2^expK. - Z = PHL + PL + PLL - Exp2Poly = B1*Z + B2*Z^2 ... + B5*Z^5 - Get 2^(j/2^expK) from table in the form THI+TLO. - Now we have 2^(PH+PL+PLL) ~= 2^N * (THI + TLO) * (1 + Exp2Poly). - Get significand of 2^(PH+PL+PLL) in the form ResHi+ResLo: - ResHi := THI - ResLo := THI * Exp2Poly + TLO - Get exponent ERes of the result: - Res := ResHi + ResLo: - Result := ex(Res) + N. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $256, %rsp - movaps %xmm0, %xmm3 - movhlps %xmm0, %xmm3 - movaps %xmm1, %xmm5 - movups %xmm8, 112(%rsp) - movaps %xmm5, %xmm2 - cvtps2pd %xmm3, %xmm8 - cvtps2pd %xmm5, %xmm7 - movups %xmm9, 96(%rsp) - movaps %xmm0, %xmm4 - cvtps2pd %xmm0, %xmm9 - movq __svml_spow_data@GOTPCREL(%rip), %rdx - movups %xmm10, 176(%rsp) - movups %xmm13, 48(%rsp) - movups _ExpMask(%rdx), %xmm6 - -/* preserve mantissa, set input exponent to 2^(-10) */ - movaps %xmm6, %xmm10 - andps %xmm8, %xmm6 - andps %xmm9, %xmm10 - -/* exponent bits selection */ - psrlq $20, %xmm9 - orps _Two10(%rdx), %xmm6 - psrlq $20, %xmm8 - orps _Two10(%rdx), %xmm10 - -/* reciprocal approximation good to at least 11 bits */ - cvtpd2ps %xmm6, %xmm13 - cvtpd2ps %xmm10, %xmm1 - movlhps %xmm13, %xmm13 - movhlps %xmm5, %xmm2 - movlhps %xmm1, %xmm1 - movups %xmm12, 208(%rsp) - rcpps %xmm13, %xmm12 - movups %xmm11, 80(%rsp) - cvtps2pd %xmm2, %xmm11 - rcpps %xmm1, %xmm2 - movups %xmm14, 144(%rsp) - cvtps2pd %xmm12, %xmm14 - movups %xmm15, 160(%rsp) - cvtps2pd %xmm2, %xmm15 - shufps $221, %xmm8, %xmm9 - -/* round reciprocal to nearest integer, will have 1+9 mantissa bits */ - roundpd $0, %xmm14, %xmm14 - -/* biased exponent in DP format */ - pshufd $238, %xmm9, %xmm8 - roundpd $0, %xmm15, %xmm15 - cvtdq2pd %xmm8, %xmm1 - mulpd %xmm15, %xmm10 - mulpd %xmm14, %xmm6 - cvtdq2pd %xmm9, %xmm2 - subpd _One(%rdx), %xmm10 - subpd _One(%rdx), %xmm6 - -/* table lookup */ - movaps %xmm14, %xmm8 - movaps %xmm15, %xmm9 - psrlq $40, %xmm8 - psrlq $40, %xmm9 - movd %xmm8, %r8d - movd %xmm9, %eax - psubd _NMINNORM(%rdx), %xmm4 - movdqu _ABSMASK(%rdx), %xmm3 - pextrd $2, %xmm8, %r9d - pand %xmm5, %xmm3 - movups _Threshold(%rdx), %xmm8 - pextrd $2, %xmm9, %ecx - movaps %xmm8, %xmm9 - cmpltpd %xmm15, %xmm9 - cmpltpd %xmm14, %xmm8 - andps _Bias(%rdx), %xmm9 - movaps %xmm10, %xmm14 - andps _Bias(%rdx), %xmm8 - movaps %xmm6, %xmm15 - orps _Bias1(%rdx), %xmm9 - orps _Bias1(%rdx), %xmm8 - subpd %xmm9, %xmm2 - subpd %xmm8, %xmm1 - mulpd %xmm10, %xmm14 - mulpd %xmm6, %xmm15 - mulpd _L2(%rdx), %xmm2 - mulpd _L2(%rdx), %xmm1 - movups _poly_coeff_3(%rdx), %xmm9 - movaps %xmm9, %xmm8 - mulpd %xmm10, %xmm8 - mulpd %xmm6, %xmm9 - addpd _poly_coeff_4(%rdx), %xmm8 - addpd _poly_coeff_4(%rdx), %xmm9 - mulpd %xmm14, %xmm8 - mulpd %xmm15, %xmm9 - -/* reconstruction */ - addpd %xmm8, %xmm10 - addpd %xmm9, %xmm6 - movslq %eax, %rax - movslq %r8d, %r8 - movslq %ecx, %rcx - movslq %r9d, %r9 - movsd _Log2Rcp_lookup(%rdx,%rax), %xmm13 - movsd _Log2Rcp_lookup(%rdx,%r8), %xmm12 - movhpd _Log2Rcp_lookup(%rdx,%rcx), %xmm13 - movhpd _Log2Rcp_lookup(%rdx,%r9), %xmm12 - addpd %xmm10, %xmm13 - addpd %xmm6, %xmm12 - addpd %xmm13, %xmm2 - addpd %xmm12, %xmm1 - mulpd %xmm7, %xmm2 - mulpd %xmm11, %xmm1 - movups __dbInvLn2(%rdx), %xmm11 - movdqa %xmm4, %xmm12 - movaps %xmm11, %xmm10 - mulpd %xmm2, %xmm10 - mulpd %xmm1, %xmm11 - -/* to round down; if dR is an integer we will get R = 1, which is ok */ - movaps %xmm10, %xmm8 - movaps %xmm11, %xmm9 - subpd __dbHALF(%rdx), %xmm8 - subpd __dbHALF(%rdx), %xmm9 - addpd __dbShifter(%rdx), %xmm8 - addpd __dbShifter(%rdx), %xmm9 - movaps %xmm8, %xmm6 - movaps %xmm9, %xmm7 - subpd __dbShifter(%rdx), %xmm6 - subpd __dbShifter(%rdx), %xmm7 - -/* [0..1) */ - subpd %xmm6, %xmm10 - subpd %xmm7, %xmm11 - mulpd __dbC1(%rdx), %xmm10 - mulpd __dbC1(%rdx), %xmm11 - -/* hi bits */ - shufps $221, %xmm1, %xmm2 - movdqu _NMAXVAL(%rdx), %xmm1 - pcmpgtd %xmm1, %xmm12 - pcmpeqd %xmm1, %xmm4 - por %xmm4, %xmm12 - movdqa %xmm3, %xmm1 - movdqu _INF(%rdx), %xmm4 - pcmpgtd %xmm4, %xmm1 - pcmpeqd %xmm4, %xmm3 - -/* iAbsX = iAbsX&iAbsMask */ - pand __iAbsMask(%rdx), %xmm2 - por %xmm3, %xmm1 - -/* iRangeMask = (iAbsX>iDomainRange) */ - pcmpgtd __iDomainRange(%rdx), %xmm2 - por %xmm1, %xmm12 - movups __lbLOWKBITS(%rdx), %xmm3 - por %xmm2, %xmm12 - -/* low K bits */ - movaps %xmm3, %xmm2 - andps %xmm9, %xmm3 - andps %xmm8, %xmm2 - psrlq $11, %xmm8 - -/* dpP= _dbT+lJ*T_ITEM_GRAN */ - movd %xmm2, %r10d - psrlq $11, %xmm9 - movd %xmm3, %ecx - -/* NB : including +/- sign for the exponent!! */ - psllq $52, %xmm8 - psllq $52, %xmm9 - pextrw $4, %xmm2, %r11d - pextrw $4, %xmm3, %r8d - movmskps %xmm12, %eax - shll $3, %r10d - shll $3, %ecx - shll $3, %r11d - shll $3, %r8d - movq 13952(%rdx,%r10), %xmm6 - movq 13952(%rdx,%rcx), %xmm7 - movhpd 13952(%rdx,%r11), %xmm6 - movhpd 13952(%rdx,%r8), %xmm7 - mulpd %xmm6, %xmm10 - mulpd %xmm7, %xmm11 - addpd %xmm10, %xmm6 - addpd %xmm11, %xmm7 - paddq %xmm8, %xmm6 - paddq %xmm9, %xmm7 - cvtpd2ps %xmm6, %xmm1 - cvtpd2ps %xmm7, %xmm4 - movlhps %xmm4, %xmm1 - testl %eax, %eax - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movups 112(%rsp), %xmm8 - movaps %xmm1, %xmm0 - movups 96(%rsp), %xmm9 - movups 176(%rsp), %xmm10 - movups 80(%rsp), %xmm11 - movups 208(%rsp), %xmm12 - movups 48(%rsp), %xmm13 - movups 144(%rsp), %xmm14 - movups 160(%rsp), %xmm15 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - movups %xmm0, 64(%rsp) - movups %xmm5, 128(%rsp) - movups %xmm1, 192(%rsp) - je .LBL_1_2 - - xorb %cl, %cl - xorl %edx, %edx - movq %rsi, 8(%rsp) - movq %rdi, (%rsp) - movq %r12, 40(%rsp) - cfi_offset_rel_rsp (12, 40) - movb %cl, %r12b - movq %r13, 32(%rsp) - cfi_offset_rel_rsp (13, 32) - movl %eax, %r13d - movq %r14, 24(%rsp) - cfi_offset_rel_rsp (14, 24) - movl %edx, %r14d - movq %r15, 16(%rsp) - cfi_offset_rel_rsp (15, 16) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - movq 8(%rsp), %rsi - movq (%rsp), %rdi - movq 40(%rsp), %r12 - cfi_restore (%r12) - movq 32(%rsp), %r13 - cfi_restore (%r13) - movq 24(%rsp), %r14 - cfi_restore (%r14) - movq 16(%rsp), %r15 - cfi_restore (%r15) - movups 192(%rsp), %xmm1 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - movss 68(%rsp,%r15,8), %xmm0 - movss 132(%rsp,%r15,8), %xmm1 - - call JUMPTARGET(__powf_finite) - - movss %xmm0, 196(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - movss 64(%rsp,%r15,8), %xmm0 - movss 128(%rsp,%r15,8), %xmm1 - - call JUMPTARGET(__powf_finite) - - movss %xmm0, 192(%rsp,%r15,8) - jmp .LBL_1_7 - -END (_ZGVbN4vv_powf_sse4) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core.S deleted file mode 100644 index 1f6a07315e..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized powf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVdN8vv_powf) - .type _ZGVdN8vv_powf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVdN8vv_powf_avx2(%rip), %rax - HAS_ARCH_FEATURE (AVX2_Usable) - jz 2f - ret -2: leaq _ZGVdN8vv_powf_sse_wrapper(%rip), %rax - ret -END (_ZGVdN8vv_powf) -libmvec_hidden_def (_ZGVdN8vv_powf) - -#define _ZGVdN8vv_powf _ZGVdN8vv_powf_sse_wrapper -#include "../svml_s_powf8_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core_avx2.S deleted file mode 100644 index 683932f410..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core_avx2.S +++ /dev/null @@ -1,357 +0,0 @@ -/* Function powf vectorized with AVX2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_powf_data.h" - - .text -ENTRY(_ZGVdN8vv_powf_avx2) -/* - ALGORITHM DESCRIPTION: - - We are using the next identity : pow(x,y) = 2^(y * log2(x)). - - 1) log2(x) calculation - Here we use the following formula. - Let |x|=2^k1*X1, where k1 is integer, 1<=X1<2. - Let C ~= 1/ln(2), - Rcp1 ~= 1/X1, X2=Rcp1*X1, - Rcp2 ~= 1/X2, X3=Rcp2*X2, - Rcp3 ~= 1/X3, Rcp3C ~= C/X3. - Then - log2|x| = k1 + log2(1/Rcp1) + log2(1/Rcp2) + log2(C/Rcp3C) + - log2(X1*Rcp1*Rcp2*Rcp3C/C), - where X1*Rcp1*Rcp2*Rcp3C = C*(1+q), q is very small. - - The values of Rcp1, log2(1/Rcp1), Rcp2, log2(1/Rcp2), - Rcp3C, log2(C/Rcp3C) are taken from tables. - Values of Rcp1, Rcp2, Rcp3C are such that RcpC=Rcp1*Rcp2*Rcp3C - is exactly represented in target precision. - - log2(X1*Rcp1*Rcp2*Rcp3C/C) = log2(1+q) = ln(1+q)/ln2 = - = 1/(ln2)*q - 1/(2ln2)*q^2 + 1/(3ln2)*q^3 - ... = - = 1/(C*ln2)*cq - 1/(2*C^2*ln2)*cq^2 + 1/(3*C^3*ln2)*cq^3 - ... = - = (1 + a1)*cq + a2*cq^2 + a3*cq^3 + ..., - where - cq=X1*Rcp1*Rcp2*Rcp3C-C, - a1=1/(C*ln(2))-1 is small, - a2=1/(2*C^2*ln2), - a3=1/(3*C^3*ln2), - ... - Log2 result is split by three parts: HH+HL+HLL - - 2) Calculation of y*log2(x) - Split y into YHi+YLo. - Get high PH and medium PL parts of y*log2|x|. - Get low PLL part of y*log2|x|. - Now we have PH+PL+PLL ~= y*log2|x|. - - 3) Calculation of 2^(y*log2(x)) - Let's represent PH+PL+PLL in the form N + j/2^expK + Z, - where expK=7 in this implementation, N and j are integers, - 0<=j<=2^expK-1, |Z|<2^(-expK-1). Hence - 2^(PH+PL+PLL) ~= 2^N * 2^(j/2^expK) * 2^Z, - where 2^(j/2^expK) is stored in a table, and - 2^Z ~= 1 + B1*Z + B2*Z^2 ... + B5*Z^5. - We compute 2^(PH+PL+PLL) as follows: - Break PH into PHH + PHL, where PHH = N + j/2^expK. - Z = PHL + PL + PLL - Exp2Poly = B1*Z + B2*Z^2 ... + B5*Z^5 - Get 2^(j/2^expK) from table in the form THI+TLO. - Now we have 2^(PH+PL+PLL) ~= 2^N * (THI + TLO) * (1 + Exp2Poly). - Get significand of 2^(PH+PL+PLL) in the form ResHi+ResLo: - ResHi := THI - ResLo := THI * Exp2Poly + TLO - Get exponent ERes of the result: - Res := ResHi + ResLo: - Result := ex(Res) + N. */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $448, %rsp - lea __VPACK_ODD_ind.6357.0.1(%rip), %rcx - vmovups %ymm14, 320(%rsp) - -/* hi bits */ - lea __VPACK_ODD_ind.6358.0.1(%rip), %rax - vmovups %ymm12, 256(%rsp) - vmovups %ymm9, 96(%rsp) - vmovups %ymm13, 224(%rsp) - vmovups %ymm15, 352(%rsp) - vmovups %ymm11, 384(%rsp) - vmovups %ymm10, 288(%rsp) - vmovups (%rcx), %ymm10 - vmovups %ymm8, 160(%rsp) - vmovdqa %ymm1, %ymm9 - movq __svml_spow_data@GOTPCREL(%rip), %rdx - vextractf128 $1, %ymm0, %xmm7 - vcvtps2pd %xmm0, %ymm14 - vcvtps2pd %xmm7, %ymm12 - vpsubd _NMINNORM(%rdx), %ymm0, %ymm7 - -/* preserve mantissa, set input exponent to 2^(-10) */ - vandpd _ExpMask(%rdx), %ymm14, %ymm3 - vandpd _ExpMask(%rdx), %ymm12, %ymm13 - -/* exponent bits selection */ - vpsrlq $20, %ymm12, %ymm12 - vpsrlq $20, %ymm14, %ymm14 - vextractf128 $1, %ymm9, %xmm2 - vcvtps2pd %xmm9, %ymm1 - vpand _ABSMASK(%rdx), %ymm9, %ymm8 - vcvtps2pd %xmm2, %ymm6 - vorpd _Two10(%rdx), %ymm3, %ymm2 - vorpd _Two10(%rdx), %ymm13, %ymm3 - -/* reciprocal approximation good to at least 11 bits */ - vcvtpd2ps %ymm2, %xmm5 - vcvtpd2ps %ymm3, %xmm15 - vrcpps %xmm5, %xmm4 - vrcpps %xmm15, %xmm11 - vcvtps2pd %xmm4, %ymm13 - vcvtps2pd %xmm11, %ymm4 - vpermps %ymm12, %ymm10, %ymm11 - -/* round reciprocal to nearest integer, will have 1+9 mantissa bits */ - vroundpd $0, %ymm13, %ymm12 - vpermps %ymm14, %ymm10, %ymm5 - vroundpd $0, %ymm4, %ymm14 - vmovupd _One(%rdx), %ymm4 - -/* table lookup */ - vpsrlq $40, %ymm12, %ymm10 - vfmsub213pd %ymm4, %ymm12, %ymm2 - vfmsub213pd %ymm4, %ymm14, %ymm3 - vcmpgt_oqpd _Threshold(%rdx), %ymm12, %ymm12 - vxorpd %ymm4, %ymm4, %ymm4 - vandpd _Bias(%rdx), %ymm12, %ymm12 - -/* biased exponent in DP format */ - vcvtdq2pd %xmm11, %ymm13 - vpcmpeqd %ymm11, %ymm11, %ymm11 - vgatherqpd %ymm11, _Log2Rcp_lookup(%rdx,%ymm10), %ymm4 - vpsrlq $40, %ymm14, %ymm10 - vcmpgt_oqpd _Threshold(%rdx), %ymm14, %ymm14 - vpcmpeqd %ymm11, %ymm11, %ymm11 - vandpd _Bias(%rdx), %ymm14, %ymm14 - vcvtdq2pd %xmm5, %ymm15 - vxorpd %ymm5, %ymm5, %ymm5 - vgatherqpd %ymm11, _Log2Rcp_lookup(%rdx,%ymm10), %ymm5 - vorpd _Bias1(%rdx), %ymm12, %ymm11 - vorpd _Bias1(%rdx), %ymm14, %ymm10 - vsubpd %ymm11, %ymm15, %ymm11 - vsubpd %ymm10, %ymm13, %ymm14 - vmovupd _poly_coeff_4(%rdx), %ymm15 - vmovupd _poly_coeff_3(%rdx), %ymm13 - vmulpd %ymm3, %ymm3, %ymm10 - vfmadd213pd %ymm15, %ymm3, %ymm13 - vmovdqa %ymm15, %ymm12 - vfmadd231pd _poly_coeff_3(%rdx), %ymm2, %ymm12 - vmulpd %ymm2, %ymm2, %ymm15 - -/* reconstruction */ - vfmadd213pd %ymm3, %ymm10, %ymm13 - vfmadd213pd %ymm2, %ymm15, %ymm12 - vaddpd %ymm5, %ymm13, %ymm13 - vaddpd %ymm4, %ymm12, %ymm2 - vfmadd231pd _L2(%rdx), %ymm14, %ymm13 - vfmadd132pd _L2(%rdx), %ymm2, %ymm11 - vmulpd %ymm6, %ymm13, %ymm2 - vmulpd %ymm1, %ymm11, %ymm10 - vmulpd __dbInvLn2(%rdx), %ymm2, %ymm6 - vmulpd __dbInvLn2(%rdx), %ymm10, %ymm15 - -/* to round down; if dR is an integer we will get R = 1, which is ok */ - vsubpd __dbHALF(%rdx), %ymm6, %ymm3 - vsubpd __dbHALF(%rdx), %ymm15, %ymm1 - vaddpd __dbShifter(%rdx), %ymm3, %ymm13 - vaddpd __dbShifter(%rdx), %ymm1, %ymm14 - vsubpd __dbShifter(%rdx), %ymm13, %ymm12 - vmovups (%rax), %ymm1 - vsubpd __dbShifter(%rdx), %ymm14, %ymm11 - -/* [0..1) */ - vsubpd %ymm12, %ymm6, %ymm6 - vpermps %ymm10, %ymm1, %ymm3 - vpermps %ymm2, %ymm1, %ymm10 - vpcmpgtd _NMAXVAL(%rdx), %ymm7, %ymm4 - vpcmpgtd _INF(%rdx), %ymm8, %ymm1 - vpcmpeqd _NMAXVAL(%rdx), %ymm7, %ymm7 - vpcmpeqd _INF(%rdx), %ymm8, %ymm8 - vpor %ymm7, %ymm4, %ymm2 - vpor %ymm8, %ymm1, %ymm1 - vsubpd %ymm11, %ymm15, %ymm7 - vinsertf128 $1, %xmm10, %ymm3, %ymm10 - vpor %ymm1, %ymm2, %ymm3 - -/* iAbsX = iAbsX&iAbsMask */ - vandps __iAbsMask(%rdx), %ymm10, %ymm10 - -/* iRangeMask = (iAbsX>iDomainRange) */ - vpcmpgtd __iDomainRange(%rdx), %ymm10, %ymm4 - vpor %ymm4, %ymm3, %ymm5 - vmulpd __dbC1(%rdx), %ymm7, %ymm4 - vmovmskps %ymm5, %ecx - vmulpd __dbC1(%rdx), %ymm6, %ymm5 - -/* low K bits */ - vandps __lbLOWKBITS(%rdx), %ymm14, %ymm6 - -/* dpP= _dbT+lJ*T_ITEM_GRAN */ - vxorpd %ymm7, %ymm7, %ymm7 - vpcmpeqd %ymm1, %ymm1, %ymm1 - vandps __lbLOWKBITS(%rdx), %ymm13, %ymm2 - vxorpd %ymm10, %ymm10, %ymm10 - vpcmpeqd %ymm3, %ymm3, %ymm3 - vgatherqpd %ymm1, 13952(%rdx,%ymm6,8), %ymm7 - vgatherqpd %ymm3, 13952(%rdx,%ymm2,8), %ymm10 - vpsrlq $11, %ymm14, %ymm14 - vpsrlq $11, %ymm13, %ymm13 - vfmadd213pd %ymm7, %ymm4, %ymm7 - vfmadd213pd %ymm10, %ymm5, %ymm10 - -/* NB : including +/- sign for the exponent!! */ - vpsllq $52, %ymm14, %ymm8 - vpsllq $52, %ymm13, %ymm11 - vpaddq %ymm8, %ymm7, %ymm12 - vpaddq %ymm11, %ymm10, %ymm1 - vcvtpd2ps %ymm12, %xmm15 - vcvtpd2ps %ymm1, %xmm2 - vinsertf128 $1, %xmm2, %ymm15, %ymm1 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovups 160(%rsp), %ymm8 - vmovups 96(%rsp), %ymm9 - vmovups 288(%rsp), %ymm10 - vmovups 384(%rsp), %ymm11 - vmovups 256(%rsp), %ymm12 - vmovups 224(%rsp), %ymm13 - vmovups 320(%rsp), %ymm14 - vmovups 352(%rsp), %ymm15 - vmovdqa %ymm1, %ymm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %ymm0, 64(%rsp) - vmovups %ymm9, 128(%rsp) - vmovups %ymm1, 192(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - movq %rsi, 8(%rsp) - movq %rdi, (%rsp) - movq %r12, 40(%rsp) - cfi_offset_rel_rsp (12, 40) - movb %dl, %r12b - movq %r13, 32(%rsp) - cfi_offset_rel_rsp (13, 32) - movl %ecx, %r13d - movq %r14, 24(%rsp) - cfi_offset_rel_rsp (14, 24) - movl %eax, %r14d - movq %r15, 16(%rsp) - cfi_offset_rel_rsp (15, 16) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - movq 8(%rsp), %rsi - movq (%rsp), %rdi - movq 40(%rsp), %r12 - cfi_restore (%r12) - movq 32(%rsp), %r13 - cfi_restore (%r13) - movq 24(%rsp), %r14 - cfi_restore (%r14) - movq 16(%rsp), %r15 - cfi_restore (%r15) - vmovups 192(%rsp), %ymm1 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 68(%rsp,%r15,8), %xmm0 - vmovss 132(%rsp,%r15,8), %xmm1 - vzeroupper - - call JUMPTARGET(__powf_finite) - - vmovss %xmm0, 196(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - vmovss 64(%rsp,%r15,8), %xmm0 - vmovss 128(%rsp,%r15,8), %xmm1 - vzeroupper - - call JUMPTARGET(__powf_finite) - - vmovss %xmm0, 192(%rsp,%r15,8) - jmp .LBL_1_7 - -END(_ZGVdN8vv_powf_avx2) - - .section .rodata, "a" -__VPACK_ODD_ind.6357.0.1: - .long 1 - .long 3 - .long 5 - .long 7 - .long 0 - .long 0 - .long 0 - .long 0 - .space 32, 0x00 -__VPACK_ODD_ind.6358.0.1: - .long 1 - .long 3 - .long 5 - .long 7 - .long 0 - .long 0 - .long 0 - .long 0 diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core.S deleted file mode 100644 index 0545460952..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of vectorized sincosf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVeN16vvv_sincosf) - .type _ZGVeN16vvv_sincosf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVeN16vvv_sincosf_skx(%rip), %rax - HAS_ARCH_FEATURE (AVX512DQ_Usable) - jnz 2f - leaq _ZGVeN16vvv_sincosf_knl(%rip), %rax - HAS_ARCH_FEATURE (AVX512F_Usable) - jnz 2f - leaq _ZGVeN16vvv_sincosf_avx2_wrapper(%rip), %rax -2: ret -END (_ZGVeN16vvv_sincosf) - -#define _ZGVeN16vvv_sincosf _ZGVeN16vvv_sincosf_avx2_wrapper -#include "../svml_s_sincosf16_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core_avx512.S deleted file mode 100644 index f73ab7de7c..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core_avx512.S +++ /dev/null @@ -1,806 +0,0 @@ -/* Function sincosf vectorized with AVX-512. KNL and SKX versions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_trig_data.h" -#include "svml_s_wrapper_impl.h" - -/* - ALGORITHM DESCRIPTION: - - 1) Range reduction to [-Pi/4; +Pi/4] interval - a) Grab sign from source argument and save it. - b) Remove sign using AND operation - c) Getting octant Y by 2/Pi multiplication - d) Add "Right Shifter" value - e) Treat obtained value as integer S for destination sign setting. - SS = ((S-S&1)&2)<<30; For sin part - SC = ((S+S&1)&2)<<30; For cos part - f) Change destination sign if source sign is negative - using XOR operation. - g) Subtract "Right Shifter" (0x4B000000) value - h) Subtract Y*(PI/2) from X argument, where PI/2 divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - Y*PI4; - 2) Polynomial (minimax for sin within [-Pi/4; +Pi/4] interval) - a) Calculate X^2 = X * X - b) Calculate 2 polynomials for sin and cos: - RS = X * ( A0 + X^2 * (A1 + x^2 * (A2 + x^2 * (A3)))); - RC = B0 + X^2 * (B1 + x^2 * (B2 + x^2 * (B3 + x^2 * (B4)))); - c) Swap RS & RC if if first bit of obtained value after - Right Shifting is set to 1. Using And, Andnot & Or operations. - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R1 = XOR( RS, SS ); - R2 = XOR( RC, SC ). */ - - .text -ENTRY (_ZGVeN16vl4l4_sincosf_knl) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512_fFF _ZGVdN8vl4l4_sincosf -#else - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1344, %rsp - movq __svml_s_trig_data@GOTPCREL(%rip), %rax - vmovaps %zmm0, %zmm2 - movl $-1, %edx - vmovups __sAbsMask(%rax), %zmm0 - vmovups __sInvPI(%rax), %zmm3 - -/* Absolute argument computation */ - vpandd %zmm0, %zmm2, %zmm1 - vmovups __sPI1_FMA(%rax), %zmm5 - vmovups __sSignMask(%rax), %zmm9 - vpandnd %zmm2, %zmm0, %zmm0 - -/* h) Subtract Y*(PI/2) from X argument, where PI/2 divided to 3 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 */ - vmovaps %zmm1, %zmm6 - vmovaps %zmm1, %zmm8 - -/* c) Getting octant Y by 2/Pi multiplication - d) Add "Right Shifter" value */ - vfmadd213ps __sRShifter(%rax), %zmm1, %zmm3 - vmovups __sPI3_FMA(%rax), %zmm7 - -/* g) Subtract "Right Shifter" (0x4B000000) value */ - vsubps __sRShifter(%rax), %zmm3, %zmm12 - -/* e) Treat obtained value as integer S for destination sign setting */ - vpslld $31, %zmm3, %zmm13 - vmovups __sA7_FMA(%rax), %zmm14 - vfnmadd231ps %zmm12, %zmm5, %zmm6 - -/* 2) Polynomial (minimax for sin within [-Pi/4; +Pi/4] interval) - a) Calculate X^2 = X * X - b) Calculate 2 polynomials for sin and cos: - RS = X * ( A0 + X^2 * (A1 + x^2 * (A2 + x^2 * (A3)))); - RC = B0 + X^2 * (B1 + x^2 * (B2 + x^2 * (B3 + x^2 * (B4)))) */ - vmovaps %zmm14, %zmm15 - vmovups __sA9_FMA(%rax), %zmm3 - vcmpps $22, __sRangeReductionVal(%rax), %zmm1, %k1 - vpbroadcastd %edx, %zmm1{%k1}{z} - vfnmadd231ps __sPI2_FMA(%rax), %zmm12, %zmm6 - vptestmd %zmm1, %zmm1, %k0 - vpandd %zmm6, %zmm9, %zmm11 - kmovw %k0, %ecx - vpxord __sOneHalf(%rax), %zmm11, %zmm4 - -/* Result sign calculations */ - vpternlogd $150, %zmm13, %zmm9, %zmm11 - -/* Add correction term 0.5 for cos() part */ - vaddps %zmm4, %zmm12, %zmm10 - vfnmadd213ps %zmm6, %zmm7, %zmm12 - vfnmadd231ps %zmm10, %zmm5, %zmm8 - vpxord %zmm13, %zmm12, %zmm13 - vmulps %zmm13, %zmm13, %zmm12 - vfnmadd231ps __sPI2_FMA(%rax), %zmm10, %zmm8 - vfmadd231ps __sA9_FMA(%rax), %zmm12, %zmm15 - vfnmadd213ps %zmm8, %zmm7, %zmm10 - vfmadd213ps __sA5_FMA(%rax), %zmm12, %zmm15 - vpxord %zmm11, %zmm10, %zmm5 - vmulps %zmm5, %zmm5, %zmm4 - vfmadd213ps __sA3(%rax), %zmm12, %zmm15 - vfmadd213ps %zmm14, %zmm4, %zmm3 - vmulps %zmm12, %zmm15, %zmm14 - vfmadd213ps __sA5_FMA(%rax), %zmm4, %zmm3 - vfmadd213ps %zmm13, %zmm13, %zmm14 - vfmadd213ps __sA3(%rax), %zmm4, %zmm3 - vpxord %zmm0, %zmm14, %zmm0 - vmulps %zmm4, %zmm3, %zmm3 - vfmadd213ps %zmm5, %zmm5, %zmm3 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovups %zmm0, (%rdi) - vmovups %zmm3, (%rsi) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %zmm2, 1152(%rsp) - vmovups %zmm0, 1216(%rsp) - vmovups %zmm3, 1280(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - kmovw %k4, 1048(%rsp) - xorl %eax, %eax - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %eax, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %ecx, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - movq %rbx, 1064(%rsp) - movq %rdi, %rbx - cfi_remember_state - -.LBL_1_6: - btl %r13d, %r14d - jc .LBL_1_13 - -.LBL_1_7: - lea 1(%r13), %esi - btl %esi, %r14d - jc .LBL_1_10 - -.LBL_1_8: - addb $1, %r12b - addl $2, %r13d - cmpb $16, %r12b - jb .LBL_1_6 - - movq %rbx, %rdi - kmovw 1048(%rsp), %k4 - movq 1056(%rsp), %rsi - kmovw 1040(%rsp), %k5 - movq 1096(%rsp), %r12 - cfi_restore (%r12) - kmovw 1032(%rsp), %k6 - movq 1088(%rsp), %r13 - cfi_restore (%r13) - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - movq 1064(%rsp), %rbx - vmovups 1216(%rsp), %zmm0 - vmovups 1280(%rsp), %zmm3 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 1156(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(sinf) - - vmovss %xmm0, 1220(%rsp,%r15,8) - vmovss 1156(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(cosf) - - vmovss %xmm0, 1284(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_13: - movzbl %r12b, %r15d - vmovss 1152(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(sinf) - - vmovss %xmm0, 1216(%rsp,%r15,8) - vmovss 1152(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(cosf) - - vmovss %xmm0, 1280(%rsp,%r15,8) - jmp .LBL_1_7 -#endif -END (_ZGVeN16vl4l4_sincosf_knl) -libmvec_hidden_def(_ZGVeN16vl4l4_sincosf_knl) - -ENTRY (_ZGVeN16vl4l4_sincosf_skx) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512_fFF _ZGVdN8vvv_sincosf -#else - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1344, %rsp - movq __svml_s_trig_data@GOTPCREL(%rip), %rax - vmovaps %zmm0, %zmm4 - vmovups __sAbsMask(%rax), %zmm3 - vmovups __sInvPI(%rax), %zmm5 - vmovups __sRShifter(%rax), %zmm6 - vmovups __sPI1_FMA(%rax), %zmm9 - vmovups __sPI2_FMA(%rax), %zmm10 - vmovups __sSignMask(%rax), %zmm14 - vmovups __sOneHalf(%rax), %zmm7 - vmovups __sPI3_FMA(%rax), %zmm12 - -/* Absolute argument computation */ - vandps %zmm3, %zmm4, %zmm2 - -/* c) Getting octant Y by 2/Pi multiplication - d) Add "Right Shifter" value */ - vfmadd213ps %zmm6, %zmm2, %zmm5 - vcmpps $18, __sRangeReductionVal(%rax), %zmm2, %k1 - -/* e) Treat obtained value as integer S for destination sign setting */ - vpslld $31, %zmm5, %zmm0 - -/* g) Subtract "Right Shifter" (0x4B000000) value */ - vsubps %zmm6, %zmm5, %zmm5 - vmovups __sA3(%rax), %zmm6 - -/* h) Subtract Y*(PI/2) from X argument, where PI/2 divided to 3 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 */ - vmovaps %zmm2, %zmm11 - vfnmadd231ps %zmm5, %zmm9, %zmm11 - vfnmadd231ps %zmm5, %zmm10, %zmm11 - vandps %zmm11, %zmm14, %zmm1 - vxorps %zmm1, %zmm7, %zmm8 - -/* Result sign calculations */ - vpternlogd $150, %zmm0, %zmm14, %zmm1 - vmovups .L_2il0floatpacket.13(%rip), %zmm14 - -/* Add correction term 0.5 for cos() part */ - vaddps %zmm8, %zmm5, %zmm15 - vfnmadd213ps %zmm11, %zmm12, %zmm5 - vandnps %zmm4, %zmm3, %zmm11 - vmovups __sA7_FMA(%rax), %zmm3 - vmovaps %zmm2, %zmm13 - vfnmadd231ps %zmm15, %zmm9, %zmm13 - vxorps %zmm0, %zmm5, %zmm9 - vmovups __sA5_FMA(%rax), %zmm0 - vfnmadd231ps %zmm15, %zmm10, %zmm13 - vmulps %zmm9, %zmm9, %zmm8 - vfnmadd213ps %zmm13, %zmm12, %zmm15 - vmovups __sA9_FMA(%rax), %zmm12 - vxorps %zmm1, %zmm15, %zmm1 - vmulps %zmm1, %zmm1, %zmm13 - -/* 2) Polynomial (minimax for sin within [-Pi/4; +Pi/4] interval) - a) Calculate X^2 = X * X - b) Calculate 2 polynomials for sin and cos: - RS = X * ( A0 + X^2 * (A1 + x^2 * (A2 + x^2 * (A3)))); - RC = B0 + X^2 * (B1 + x^2 * (B2 + x^2 * (B3 + x^2 * (B4)))) */ - vmovaps %zmm12, %zmm7 - vfmadd213ps %zmm3, %zmm8, %zmm7 - vfmadd213ps %zmm3, %zmm13, %zmm12 - vfmadd213ps %zmm0, %zmm8, %zmm7 - vfmadd213ps %zmm0, %zmm13, %zmm12 - vfmadd213ps %zmm6, %zmm8, %zmm7 - vfmadd213ps %zmm6, %zmm13, %zmm12 - vmulps %zmm8, %zmm7, %zmm10 - vmulps %zmm13, %zmm12, %zmm3 - vfmadd213ps %zmm9, %zmm9, %zmm10 - vfmadd213ps %zmm1, %zmm1, %zmm3 - vxorps %zmm11, %zmm10, %zmm0 - vpandnd %zmm2, %zmm2, %zmm14{%k1} - vptestmd %zmm14, %zmm14, %k0 - kmovw %k0, %ecx - testl %ecx, %ecx - jne .LBL_2_3 - -.LBL_2_2: - cfi_remember_state - vmovups %zmm0, (%rdi) - vmovups %zmm3, (%rsi) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_2_3: - cfi_restore_state - vmovups %zmm4, 1152(%rsp) - vmovups %zmm0, 1216(%rsp) - vmovups %zmm3, 1280(%rsp) - je .LBL_2_2 - - xorb %dl, %dl - xorl %eax, %eax - kmovw %k4, 1048(%rsp) - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %eax, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %ecx, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - movq %rbx, 1064(%rsp) - movq %rdi, %rbx - cfi_remember_state - -.LBL_2_6: - btl %r13d, %r14d - jc .LBL_2_13 - -.LBL_2_7: - lea 1(%r13), %esi - btl %esi, %r14d - jc .LBL_2_10 - -.LBL_2_8: - incb %r12b - addl $2, %r13d - cmpb $16, %r12b - jb .LBL_2_6 - - kmovw 1048(%rsp), %k4 - movq %rbx, %rdi - kmovw 1040(%rsp), %k5 - kmovw 1032(%rsp), %k6 - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - vmovups 1216(%rsp), %zmm0 - vmovups 1280(%rsp), %zmm3 - movq 1056(%rsp), %rsi - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - movq 1064(%rsp), %rbx - jmp .LBL_2_2 - -.LBL_2_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 1156(%rsp,%r15,8), %xmm0 - vzeroupper - vmovss 1156(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(sinf) - - vmovss %xmm0, 1220(%rsp,%r15,8) - vmovss 1156(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(cosf) - - vmovss %xmm0, 1284(%rsp,%r15,8) - jmp .LBL_2_8 - -.LBL_2_13: - movzbl %r12b, %r15d - vmovss 1152(%rsp,%r15,8), %xmm0 - vzeroupper - vmovss 1152(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(sinf) - - vmovss %xmm0, 1216(%rsp,%r15,8) - vmovss 1152(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(cosf) - - vmovss %xmm0, 1280(%rsp,%r15,8) - jmp .LBL_2_7 -#endif -END (_ZGVeN16vl4l4_sincosf_skx) -libmvec_hidden_def(_ZGVeN16vl4l4_sincosf_skx) - -/* Wrapper between vvv and vl4l4 vector variants. */ -.macro WRAPPER_AVX512_vvv_vl4l4 callee -#ifndef __ILP32__ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $384, %rsp - /* Encoding for vmovups %zmm1, 128(%rsp). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x4c - .byte 0x24 - .byte 0x02 - lea (%rsp), %rdi - /* Encoding for vmovups %zmm2, 192(%rdi). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x57 - .byte 0x03 - /* Encoding for vmovups %zmm3, 256(%rdi). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x5f - .byte 0x04 - /* Encoding for vmovups %zmm4, 320(%rdi). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x67 - .byte 0x05 - lea 64(%rsp), %rsi - call HIDDEN_JUMPTARGET(\callee) - movq 128(%rsp), %rdx - movq 136(%rsp), %rsi - movq 144(%rsp), %r8 - movq 152(%rsp), %r10 - movl (%rsp), %eax - movl 4(%rsp), %ecx - movl 8(%rsp), %edi - movl 12(%rsp), %r9d - movl %eax, (%rdx) - movl %ecx, (%rsi) - movq 160(%rsp), %rax - movq 168(%rsp), %rcx - movl %edi, (%r8) - movl %r9d, (%r10) - movq 176(%rsp), %rdi - movq 184(%rsp), %r9 - movl 16(%rsp), %r11d - movl 20(%rsp), %edx - movl 24(%rsp), %esi - movl 28(%rsp), %r8d - movl %r11d, (%rax) - movl %edx, (%rcx) - movq 192(%rsp), %r11 - movq 200(%rsp), %rdx - movl %esi, (%rdi) - movl %r8d, (%r9) - movq 208(%rsp), %rsi - movq 216(%rsp), %r8 - movl 32(%rsp), %r10d - movl 36(%rsp), %eax - movl 40(%rsp), %ecx - movl 44(%rsp), %edi - movl %r10d, (%r11) - movl %eax, (%rdx) - movq 224(%rsp), %r10 - movq 232(%rsp), %rax - movl %ecx, (%rsi) - movl %edi, (%r8) - movq 240(%rsp), %rcx - movq 248(%rsp), %rdi - movl 48(%rsp), %r9d - movl 52(%rsp), %r11d - movl 56(%rsp), %edx - movl 60(%rsp), %esi - movl %r9d, (%r10) - movl %r11d, (%rax) - movq 256(%rsp), %r9 - movq 264(%rsp), %r11 - movl %edx, (%rcx) - movl %esi, (%rdi) - movq 272(%rsp), %rdx - movq 280(%rsp), %rsi - movl 64(%rsp), %r8d - movl 68(%rsp), %r10d - movl 72(%rsp), %eax - movl 76(%rsp), %ecx - movl %r8d, (%r9) - movl %r10d, (%r11) - movq 288(%rsp), %r8 - movq 296(%rsp), %r10 - movl %eax, (%rdx) - movl %ecx, (%rsi) - movq 304(%rsp), %rax - movq 312(%rsp), %rcx - movl 80(%rsp), %edi - movl 84(%rsp), %r9d - movl 88(%rsp), %r11d - movl 92(%rsp), %edx - movl %edi, (%r8) - movl %r9d, (%r10) - movq 320(%rsp), %rdi - movq 328(%rsp), %r9 - movl %r11d, (%rax) - movl %edx, (%rcx) - movq 336(%rsp), %r11 - movq 344(%rsp), %rdx - movl 96(%rsp), %esi - movl 100(%rsp), %r8d - movl 104(%rsp), %r10d - movl 108(%rsp), %eax - movl %esi, (%rdi) - movl %r8d, (%r9) - movq 352(%rsp), %rsi - movq 360(%rsp), %r8 - movl %r10d, (%r11) - movl %eax, (%rdx) - movq 368(%rsp), %r10 - movq 376(%rsp), %rax - movl 112(%rsp), %ecx - movl 116(%rsp), %edi - movl 120(%rsp), %r9d - movl 124(%rsp), %r11d - movl %ecx, (%rsi) - movl %edi, (%r8) - movl %r9d, (%r10) - movl %r11d, (%rax) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -#else - leal 8(%rsp), %r10d - .cfi_def_cfa 10, 0 - andl $-64, %esp - pushq -8(%r10d) - pushq %rbp - .cfi_escape 0x10,0x6,0x2,0x76,0 - movl %esp, %ebp - pushq %r10 - .cfi_escape 0xf,0x3,0x76,0x78,0x6 - leal -112(%rbp), %esi - leal -176(%rbp), %edi - subl $296, %esp - /* Encoding for vmovdqa64 %zmm1, -240(%ebp). */ - .byte 0x67 - .byte 0x62 - .byte 0xf1 - .byte 0xfd - .byte 0x48 - .byte 0x7f - .byte 0x8d - .byte 0x10 - .byte 0xff - .byte 0xff - .byte 0xff - /* Encoding for vmovdqa64 %zmm2, -304(%ebp). */ - .byte 0x67 - .byte 0x62 - .byte 0xf1 - .byte 0xfd - .byte 0x48 - .byte 0x7f - .byte 0x95 - .byte 0xd0 - .byte 0xfe - .byte 0xff - .byte 0xff - call HIDDEN_JUMPTARGET(\callee) - movl -240(%ebp), %eax - vmovss -176(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -236(%ebp), %eax - vmovss -172(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -232(%ebp), %eax - vmovss -168(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -228(%ebp), %eax - vmovss -164(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -224(%ebp), %eax - vmovss -160(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -220(%ebp), %eax - vmovss -156(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -216(%ebp), %eax - vmovss -152(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -212(%ebp), %eax - vmovss -148(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -208(%ebp), %eax - vmovss -144(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -204(%ebp), %eax - vmovss -140(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -200(%ebp), %eax - vmovss -136(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -196(%ebp), %eax - vmovss -132(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -192(%ebp), %eax - vmovss -128(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -188(%ebp), %eax - vmovss -124(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -184(%ebp), %eax - vmovss -120(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -180(%ebp), %eax - vmovss -116(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -304(%ebp), %eax - vmovss -112(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -300(%ebp), %eax - vmovss -108(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -296(%ebp), %eax - vmovss -104(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -292(%ebp), %eax - vmovss -100(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -288(%ebp), %eax - vmovss -96(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -284(%ebp), %eax - vmovss -92(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -280(%ebp), %eax - vmovss -88(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -276(%ebp), %eax - vmovss -84(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -272(%ebp), %eax - vmovss -80(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -268(%ebp), %eax - vmovss -76(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -264(%ebp), %eax - vmovss -72(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -260(%ebp), %eax - vmovss -68(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -256(%ebp), %eax - vmovss -64(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -252(%ebp), %eax - vmovss -60(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -248(%ebp), %eax - vmovss -56(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -244(%ebp), %eax - vmovss -52(%ebp), %xmm0 - vmovss %xmm0, (%eax) - addl $296, %esp - popq %r10 - .cfi_def_cfa 10, 0 - popq %rbp - leal -8(%r10), %esp - .cfi_def_cfa 7, 8 - ret -#endif -.endm - -ENTRY (_ZGVeN16vvv_sincosf_knl) -WRAPPER_AVX512_vvv_vl4l4 _ZGVeN16vl4l4_sincosf_knl -END (_ZGVeN16vvv_sincosf_knl) - -ENTRY (_ZGVeN16vvv_sincosf_skx) -WRAPPER_AVX512_vvv_vl4l4 _ZGVeN16vl4l4_sincosf_skx -END (_ZGVeN16vvv_sincosf_skx) - - .section .rodata, "a" -.L_2il0floatpacket.13: - .long 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff - .type .L_2il0floatpacket.13,@object diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core.S deleted file mode 100644 index a249be33d1..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized sincosf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVbN4vvv_sincosf) - .type _ZGVbN4vvv_sincosf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVbN4vvv_sincosf_sse4(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jz 2f - ret -2: leaq _ZGVbN4vvv_sincosf_sse2(%rip), %rax - ret -END (_ZGVbN4vvv_sincosf) -libmvec_hidden_def (_ZGVbN4vvv_sincosf) - -#define _ZGVbN4vvv_sincosf _ZGVbN4vvv_sincosf_sse2 -#include "../svml_s_sincosf4_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core_sse4.S deleted file mode 100644 index 74a6ac1157..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core_sse4.S +++ /dev/null @@ -1,346 +0,0 @@ -/* Function sincosf vectorized with SSE4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_trig_data.h" - - .text -ENTRY (_ZGVbN4vl4l4_sincosf_sse4) -/* - ALGORITHM DESCRIPTION: - - 1) Range reduction to [-Pi/4; +Pi/4] interval - a) Grab sign from source argument and save it. - b) Remove sign using AND operation - c) Getting octant Y by 2/Pi multiplication - d) Add "Right Shifter" value - e) Treat obtained value as integer S for destination sign setting. - SS = ((S-S&1)&2)<<30; For sin part - SC = ((S+S&1)&2)<<30; For cos part - f) Change destination sign if source sign is negative - using XOR operation. - g) Subtract "Right Shifter" (0x4B000000) value - h) Subtract Y*(PI/2) from X argument, where PI/2 divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - Y*PI4; - 2) Polynomial (minimax for sin within [-Pi/4; +Pi/4] interval) - a) Calculate X^2 = X * X - b) Calculate 2 polynomials for sin and cos: - RS = X * ( A0 + X^2 * (A1 + x^2 * (A2 + x^2 * (A3)))); - RC = B0 + X^2 * (B1 + x^2 * (B2 + x^2 * (B3 + x^2 * (B4)))); - c) Swap RS & RC if if first bit of obtained value after - Right Shifting is set to 1. Using And, Andnot & Or operations. - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R1 = XOR( RS, SS ); - R2 = XOR( RC, SC ). */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $320, %rsp - movq __svml_s_trig_data@GOTPCREL(%rip), %rax - movups %xmm12, 176(%rsp) - movups %xmm9, 160(%rsp) - movups __sAbsMask(%rax), %xmm12 - -/* Absolute argument computation */ - movaps %xmm12, %xmm5 - andnps %xmm0, %xmm12 - movups __sInvPI(%rax), %xmm7 - andps %xmm0, %xmm5 - -/* c) Getting octant Y by 2/Pi multiplication - d) Add "Right Shifter" value. */ - mulps %xmm5, %xmm7 - movups %xmm10, 144(%rsp) - movups __sPI1(%rax), %xmm10 - -/* h) Subtract Y*(PI/2) from X argument, where PI/2 divided to 3 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3. */ - movaps %xmm10, %xmm1 - addps __sRShifter(%rax), %xmm7 - -/* e) Treat obtained value as integer S for destination sign setting */ - movaps %xmm7, %xmm9 - -/* g) Subtract "Right Shifter" (0x4B000000) value */ - subps __sRShifter(%rax), %xmm7 - mulps %xmm7, %xmm1 - pslld $31, %xmm9 - movups __sPI2(%rax), %xmm6 - movups %xmm13, 112(%rsp) - movaps %xmm5, %xmm13 - movaps %xmm6, %xmm2 - subps %xmm1, %xmm13 - mulps %xmm7, %xmm2 - movups __sSignMask(%rax), %xmm3 - movaps %xmm5, %xmm1 - movups __sOneHalf(%rax), %xmm4 - subps %xmm2, %xmm13 - cmpnleps __sRangeReductionVal(%rax), %xmm5 - movaps %xmm3, %xmm2 - andps %xmm13, %xmm2 - xorps %xmm2, %xmm4 - -/* Result sign calculations */ - xorps %xmm2, %xmm3 - xorps %xmm9, %xmm3 - -/* Add correction term 0.5 for cos() part */ - addps %xmm7, %xmm4 - movmskps %xmm5, %ecx - mulps %xmm4, %xmm10 - mulps %xmm4, %xmm6 - subps %xmm10, %xmm1 - movups __sPI3(%rax), %xmm10 - subps %xmm6, %xmm1 - movaps %xmm10, %xmm6 - mulps %xmm7, %xmm6 - mulps %xmm4, %xmm10 - subps %xmm6, %xmm13 - subps %xmm10, %xmm1 - movups __sPI4(%rax), %xmm6 - mulps %xmm6, %xmm7 - mulps %xmm6, %xmm4 - subps %xmm7, %xmm13 - subps %xmm4, %xmm1 - xorps %xmm9, %xmm13 - xorps %xmm3, %xmm1 - movaps %xmm13, %xmm4 - movaps %xmm1, %xmm2 - mulps %xmm13, %xmm4 - mulps %xmm1, %xmm2 - movups __sA9(%rax), %xmm7 - -/* 2) Polynomial (minimax for sin within [-Pi/4; +Pi/4] interval) - a) Calculate X^2 = X * X - b) Calculate 2 polynomials for sin and cos: - RS = X * ( A0 + X^2 * (A1 + x^2 * (A2 + x^2 * (A3)))); - RC = B0 + X^2 * (B1 + x^2 * (B2 + x^2 * (B3 + x^2 * (B4)))) */ - movaps %xmm7, %xmm3 - mulps %xmm4, %xmm3 - mulps %xmm2, %xmm7 - addps __sA7(%rax), %xmm3 - addps __sA7(%rax), %xmm7 - mulps %xmm4, %xmm3 - mulps %xmm2, %xmm7 - addps __sA5(%rax), %xmm3 - addps __sA5(%rax), %xmm7 - mulps %xmm4, %xmm3 - mulps %xmm2, %xmm7 - addps __sA3(%rax), %xmm3 - addps __sA3(%rax), %xmm7 - mulps %xmm3, %xmm4 - mulps %xmm7, %xmm2 - mulps %xmm13, %xmm4 - mulps %xmm1, %xmm2 - addps %xmm4, %xmm13 - addps %xmm2, %xmm1 - xorps %xmm12, %xmm13 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movups 160(%rsp), %xmm9 - movaps %xmm13, (%rdi) - movups 144(%rsp), %xmm10 - movups 176(%rsp), %xmm12 - movups 112(%rsp), %xmm13 - movups %xmm1, (%rsi) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - movups %xmm0, 128(%rsp) - movups %xmm13, 192(%rsp) - movups %xmm1, 256(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - movups %xmm8, 48(%rsp) - movups %xmm11, 32(%rsp) - movups %xmm14, 16(%rsp) - movups %xmm15, (%rsp) - movq %rsi, 64(%rsp) - movq %r12, 104(%rsp) - cfi_offset_rel_rsp (12, 104) - movb %dl, %r12b - movq %r13, 96(%rsp) - cfi_offset_rel_rsp (13, 96) - movl %eax, %r13d - movq %r14, 88(%rsp) - cfi_offset_rel_rsp (14, 88) - movl %ecx, %r14d - movq %r15, 80(%rsp) - cfi_offset_rel_rsp (15, 80) - movq %rbx, 72(%rsp) - movq %rdi, %rbx - cfi_remember_state - -.LBL_1_6: - btl %r13d, %r14d - jc .LBL_1_13 - -.LBL_1_7: - lea 1(%r13), %esi - btl %esi, %r14d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r13d - cmpb $16, %r12b - jb .LBL_1_6 - - movups 48(%rsp), %xmm8 - movq %rbx, %rdi - movups 32(%rsp), %xmm11 - movups 16(%rsp), %xmm14 - movups (%rsp), %xmm15 - movq 64(%rsp), %rsi - movq 104(%rsp), %r12 - cfi_restore (%r12) - movq 96(%rsp), %r13 - cfi_restore (%r13) - movq 88(%rsp), %r14 - cfi_restore (%r14) - movq 80(%rsp), %r15 - cfi_restore (%r15) - movq 72(%rsp), %rbx - movups 192(%rsp), %xmm13 - movups 256(%rsp), %xmm1 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - movss 132(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(sinf) - - movss %xmm0, 196(%rsp,%r15,8) - movss 132(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(cosf) - - movss %xmm0, 260(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_13: - movzbl %r12b, %r15d - movss 128(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(sinf) - - movss %xmm0, 192(%rsp,%r15,8) - movss 128(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(cosf) - - movss %xmm0, 256(%rsp,%r15,8) - jmp .LBL_1_7 - -END (_ZGVbN4vl4l4_sincosf_sse4) -libmvec_hidden_def(_ZGVbN4vl4l4_sincosf_sse4) - -/* vvv version implemented with wrapper to vl4l4 variant. */ -ENTRY (_ZGVbN4vvv_sincosf_sse4) -#ifndef __ILP32__ - subq $104, %rsp - .cfi_def_cfa_offset 112 - movdqu %xmm1, 32(%rsp) - lea (%rsp), %rdi - movdqu %xmm2, 48(%rdi) - lea 16(%rsp), %rsi - movdqu %xmm3, 48(%rsi) - movdqu %xmm4, 64(%rsi) - call HIDDEN_JUMPTARGET(_ZGVbN4vl4l4_sincosf_sse4) - movq 32(%rsp), %rdx - movq 40(%rsp), %rsi - movq 48(%rsp), %r8 - movq 56(%rsp), %r10 - movl (%rsp), %eax - movl 4(%rsp), %ecx - movl 8(%rsp), %edi - movl 12(%rsp), %r9d - movl %eax, (%rdx) - movl %ecx, (%rsi) - movq 64(%rsp), %rax - movq 72(%rsp), %rcx - movl %edi, (%r8) - movl %r9d, (%r10) - movq 80(%rsp), %rdi - movq 88(%rsp), %r9 - movl 16(%rsp), %r11d - movl 20(%rsp), %edx - movl 24(%rsp), %esi - movl 28(%rsp), %r8d - movl %r11d, (%rax) - movl %edx, (%rcx) - movl %esi, (%rdi) - movl %r8d, (%r9) - addq $104, %rsp - .cfi_def_cfa_offset 8 - ret -#else - subl $72, %esp - .cfi_def_cfa_offset 80 - leal 48(%rsp), %esi - movaps %xmm1, 16(%esp) - leal 32(%rsp), %edi - movaps %xmm2, (%esp) - call HIDDEN_JUMPTARGET(_ZGVbN4vl4l4_sincosf_sse4) - movl 16(%esp), %eax - movss 32(%esp), %xmm0 - movss %xmm0, (%eax) - movl 20(%esp), %eax - movss 36(%esp), %xmm0 - movss %xmm0, (%eax) - movl 24(%esp), %eax - movss 40(%esp), %xmm0 - movss %xmm0, (%eax) - movl 28(%esp), %eax - movss 44(%esp), %xmm0 - movss %xmm0, (%eax) - movl (%esp), %eax - movss 48(%esp), %xmm0 - movss %xmm0, (%eax) - movl 4(%esp), %eax - movss 52(%esp), %xmm0 - movss %xmm0, (%eax) - movl 8(%esp), %eax - movss 56(%esp), %xmm0 - movss %xmm0, (%eax) - movl 12(%esp), %eax - movss 60(%esp), %xmm0 - movss %xmm0, (%eax) - addl $72, %esp - .cfi_def_cfa_offset 8 - ret -#endif -END (_ZGVbN4vvv_sincosf_sse4) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core.S deleted file mode 100644 index 320fd861a5..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized sincosf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVdN8vvv_sincosf) - .type _ZGVdN8vvv_sincosf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVdN8vvv_sincosf_avx2(%rip), %rax - HAS_ARCH_FEATURE (AVX2_Usable) - jz 2f - ret -2: leaq _ZGVdN8vvv_sincosf_sse_wrapper(%rip), %rax - ret -END (_ZGVdN8vvv_sincosf) -libmvec_hidden_def (_ZGVdN8vvv_sincosf) - -#define _ZGVdN8vvv_sincosf _ZGVdN8vvv_sincosf_sse_wrapper -#include "../svml_s_sincosf8_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core_avx2.S deleted file mode 100644 index 9e4e2c71c5..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core_avx2.S +++ /dev/null @@ -1,389 +0,0 @@ -/* Function sincosf vectorized with AVX2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_trig_data.h" - - .text -ENTRY (_ZGVdN8vl4l4_sincosf_avx2) -/* - ALGORITHM DESCRIPTION: - - 1) Range reduction to [-Pi/4; +Pi/4] interval - a) Grab sign from source argument and save it. - b) Remove sign using AND operation - c) Getting octant Y by 2/Pi multiplication - d) Add "Right Shifter" value - e) Treat obtained value as integer S for destination sign setting. - SS = ((S-S&1)&2)<<30; For sin part - SC = ((S+S&1)&2)<<30; For cos part - f) Change destination sign if source sign is negative - using XOR operation. - g) Subtract "Right Shifter" (0x4B000000) value - h) Subtract Y*(PI/2) from X argument, where PI/2 divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - Y*PI4; - 2) Polynomial (minimax for sin within [-Pi/4; +Pi/4] interval) - a) Calculate X^2 = X * X - b) Calculate 2 polynomials for sin and cos: - RS = X * ( A0 + X^2 * (A1 + x^2 * (A2 + x^2 * (A3)))); - RC = B0 + X^2 * (B1 + x^2 * (B2 + x^2 * (B3 + x^2 * (B4)))); - c) Swap RS & RC if if first bit of obtained value after - Right Shifting is set to 1. Using And, Andnot & Or operations. - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R1 = XOR( RS, SS ); - R2 = XOR( RC, SC ). */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $448, %rsp - movq __svml_s_trig_data@GOTPCREL(%rip), %rax - vmovdqa %ymm0, %ymm5 - vmovups %ymm13, 352(%rsp) - vmovups __sAbsMask(%rax), %ymm2 - vmovups __sInvPI(%rax), %ymm1 - vmovups __sPI1_FMA(%rax), %ymm13 - vmovups %ymm15, 288(%rsp) - -/* Absolute argument computation */ - vandps %ymm2, %ymm5, %ymm4 - -/* c) Getting octant Y by 2/Pi multiplication - d) Add "Right Shifter" value */ - vfmadd213ps __sRShifter(%rax), %ymm4, %ymm1 - -/* e) Treat obtained value as integer S for destination sign setting */ - vpslld $31, %ymm1, %ymm0 - -/* g) Subtract "Right Shifter" (0x4B000000) value */ - vsubps __sRShifter(%rax), %ymm1, %ymm1 - -/* h) Subtract Y*(PI/2) from X argument, where PI/2 divided to 3 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 */ - vmovdqa %ymm4, %ymm7 - vfnmadd231ps %ymm1, %ymm13, %ymm7 - vfnmadd231ps __sPI2_FMA(%rax), %ymm1, %ymm7 - vandps __sSignMask(%rax), %ymm7, %ymm15 - vxorps __sOneHalf(%rax), %ymm15, %ymm6 - -/* Add correction term 0.5 for cos() part */ - vaddps %ymm6, %ymm1, %ymm6 - vmovdqa %ymm4, %ymm3 - vfnmadd231ps %ymm6, %ymm13, %ymm3 - vmovups __sPI3_FMA(%rax), %ymm13 - vcmpnle_uqps __sRangeReductionVal(%rax), %ymm4, %ymm4 - vfnmadd231ps __sPI2_FMA(%rax), %ymm6, %ymm3 - vfnmadd213ps %ymm7, %ymm13, %ymm1 - vfnmadd213ps %ymm3, %ymm13, %ymm6 - -/* Result sign calculations */ - vxorps __sSignMask(%rax), %ymm15, %ymm3 - vxorps %ymm0, %ymm3, %ymm7 - vxorps %ymm7, %ymm6, %ymm3 - vxorps %ymm0, %ymm1, %ymm15 - vandnps %ymm5, %ymm2, %ymm6 - vmovups __sA7_FMA(%rax), %ymm2 - vmulps %ymm15, %ymm15, %ymm13 - vmovups __sA9_FMA(%rax), %ymm7 - vmulps %ymm3, %ymm3, %ymm1 - -/* 2) Polynomial (minimax for sin within [-Pi/4; +Pi/4] interval) - a) Calculate X^2 = X * X - b) Calculate 2 polynomials for sin and cos: - RS = X * ( A0 + X^2 * (A1 + x^2 * (A2 + x^2 * (A3)))); - RC = B0 + X^2 * (B1 + x^2 * (B2 + x^2 * (B3 + x^2 * (B4)))) */ - vmovdqa %ymm2, %ymm0 - vfmadd231ps __sA9_FMA(%rax), %ymm13, %ymm0 - vfmadd213ps %ymm2, %ymm1, %ymm7 - vfmadd213ps __sA5_FMA(%rax), %ymm13, %ymm0 - vfmadd213ps __sA5_FMA(%rax), %ymm1, %ymm7 - vfmadd213ps __sA3(%rax), %ymm13, %ymm0 - vfmadd213ps __sA3(%rax), %ymm1, %ymm7 - vmulps %ymm13, %ymm0, %ymm13 - vmulps %ymm1, %ymm7, %ymm1 - vfmadd213ps %ymm15, %ymm15, %ymm13 - vfmadd213ps %ymm3, %ymm3, %ymm1 - vmovmskps %ymm4, %ecx - vxorps %ymm6, %ymm13, %ymm0 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovups 352(%rsp), %ymm13 - vmovups 288(%rsp), %ymm15 - vmovups %ymm0, (%rdi) - vmovups %ymm1, (%rsi) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %ymm5, 256(%rsp) - vmovups %ymm0, 320(%rsp) - vmovups %ymm1, 384(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - vmovups %ymm8, 160(%rsp) - vmovups %ymm9, 128(%rsp) - vmovups %ymm10, 96(%rsp) - vmovups %ymm11, 64(%rsp) - vmovups %ymm12, 32(%rsp) - vmovups %ymm14, (%rsp) - movq %rsi, 192(%rsp) - movq %r12, 232(%rsp) - cfi_offset_rel_rsp (12, 232) - movb %dl, %r12b - movq %r13, 224(%rsp) - cfi_offset_rel_rsp (13, 224) - movl %eax, %r13d - movq %r14, 216(%rsp) - cfi_offset_rel_rsp (14, 216) - movl %ecx, %r14d - movq %r15, 208(%rsp) - cfi_offset_rel_rsp (14, 208) - movq %rbx, 200(%rsp) - movq %rdi, %rbx - cfi_remember_state - -.LBL_1_6: - btl %r13d, %r14d - jc .LBL_1_13 - -.LBL_1_7: - lea 1(%r13), %esi - btl %esi, %r14d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r13d - cmpb $16, %r12b - jb .LBL_1_6 - - vmovups 160(%rsp), %ymm8 - movq %rbx, %rdi - vmovups 128(%rsp), %ymm9 - vmovups 96(%rsp), %ymm10 - vmovups 64(%rsp), %ymm11 - vmovups 32(%rsp), %ymm12 - vmovups (%rsp), %ymm14 - vmovups 320(%rsp), %ymm0 - vmovups 384(%rsp), %ymm1 - movq 192(%rsp), %rsi - movq 232(%rsp), %r12 - cfi_restore (%r12) - movq 224(%rsp), %r13 - cfi_restore (%r13) - movq 216(%rsp), %r14 - cfi_restore (%r14) - movq 208(%rsp), %r15 - cfi_restore (%r15) - movq 200(%rsp), %rbx - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 260(%rsp,%r15,8), %xmm0 - vzeroupper - - call JUMPTARGET(sinf) - - vmovss %xmm0, 324(%rsp,%r15,8) - vmovss 260(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(cosf) - - vmovss %xmm0, 388(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_13: - movzbl %r12b, %r15d - vmovss 256(%rsp,%r15,8), %xmm0 - vzeroupper - - call JUMPTARGET(sinf) - - vmovss %xmm0, 320(%rsp,%r15,8) - vmovss 256(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(cosf) - - vmovss %xmm0, 384(%rsp,%r15,8) - jmp .LBL_1_7 - -END (_ZGVdN8vl4l4_sincosf_avx2) -libmvec_hidden_def(_ZGVdN8vl4l4_sincosf_avx2) - -/* vvv version implemented with wrapper to vl4l4 variant. */ -ENTRY (_ZGVdN8vvv_sincosf_avx2) -#ifndef __ILP32__ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-32, %rsp - subq $192, %rsp - vmovdqu %ymm1, 64(%rsp) - lea (%rsp), %rdi - vmovdqu %ymm2, 96(%rdi) - vmovdqu %ymm3, 128(%rdi) - vmovdqu %ymm4, 160(%rdi) - lea 32(%rsp), %rsi - call HIDDEN_JUMPTARGET(_ZGVdN8vl4l4_sincosf_avx2) - movq 64(%rsp), %rdx - movq 72(%rsp), %rsi - movq 80(%rsp), %r8 - movq 88(%rsp), %r10 - movl (%rsp), %eax - movl 4(%rsp), %ecx - movl 8(%rsp), %edi - movl 12(%rsp), %r9d - movl %eax, (%rdx) - movl %ecx, (%rsi) - movq 96(%rsp), %rax - movq 104(%rsp), %rcx - movl %edi, (%r8) - movl %r9d, (%r10) - movq 112(%rsp), %rdi - movq 120(%rsp), %r9 - movl 16(%rsp), %r11d - movl 20(%rsp), %edx - movl 24(%rsp), %esi - movl 28(%rsp), %r8d - movl %r11d, (%rax) - movl %edx, (%rcx) - movq 128(%rsp), %r11 - movq 136(%rsp), %rdx - movl %esi, (%rdi) - movl %r8d, (%r9) - movq 144(%rsp), %rsi - movq 152(%rsp), %r8 - movl 32(%rsp), %r10d - movl 36(%rsp), %eax - movl 40(%rsp), %ecx - movl 44(%rsp), %edi - movl %r10d, (%r11) - movl %eax, (%rdx) - movq 160(%rsp), %r10 - movq 168(%rsp), %rax - movl %ecx, (%rsi) - movl %edi, (%r8) - movq 176(%rsp), %rcx - movq 184(%rsp), %rdi - movl 48(%rsp), %r9d - movl 52(%rsp), %r11d - movl 56(%rsp), %edx - movl 60(%rsp), %esi - movl %r9d, (%r10) - movl %r11d, (%rax) - movl %edx, (%rcx) - movl %esi, (%rdi) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -#else - leal 8(%rsp), %r10d - .cfi_def_cfa 10, 0 - andl $-32, %esp - pushq -8(%r10d) - pushq %rbp - .cfi_escape 0x10,0x6,0x2,0x76,0 - movl %esp, %ebp - pushq %r10 - .cfi_escape 0xf,0x3,0x76,0x78,0x6 - leal -48(%rbp), %esi - leal -80(%rbp), %edi - subl $136, %esp - vmovdqa %ymm1, -112(%ebp) - vmovdqa %ymm2, -144(%ebp) - call HIDDEN_JUMPTARGET(_ZGVdN8vl4l4_sincosf_avx2) - vmovdqa -112(%ebp), %xmm0 - vmovq %xmm0, %rax - vmovss -80(%ebp), %xmm0 - vmovss %xmm0, (%eax) - vmovss -76(%ebp), %xmm0 - shrq $32, %rax - vmovss %xmm0, (%eax) - movq -104(%ebp), %rax - vmovss -72(%ebp), %xmm0 - vmovss %xmm0, (%eax) - vmovss -68(%ebp), %xmm0 - shrq $32, %rax - vmovss %xmm0, (%eax) - movq -96(%ebp), %rax - vmovss -64(%ebp), %xmm0 - vmovss %xmm0, (%eax) - vmovss -60(%ebp), %xmm0 - shrq $32, %rax - vmovss %xmm0, (%eax) - movq -88(%ebp), %rax - vmovss -56(%ebp), %xmm0 - vmovss %xmm0, (%eax) - vmovss -52(%ebp), %xmm0 - shrq $32, %rax - vmovss %xmm0, (%eax) - vmovdqa -144(%ebp), %xmm0 - vmovq %xmm0, %rax - vmovss -48(%ebp), %xmm0 - vmovss %xmm0, (%eax) - vmovss -44(%ebp), %xmm0 - shrq $32, %rax - vmovss %xmm0, (%eax) - movq -136(%ebp), %rax - vmovss -40(%ebp), %xmm0 - vmovss %xmm0, (%eax) - vmovss -36(%ebp), %xmm0 - shrq $32, %rax - vmovss %xmm0, (%eax) - movq -128(%ebp), %rax - vmovss -32(%ebp), %xmm0 - vmovss %xmm0, (%eax) - vmovss -28(%ebp), %xmm0 - shrq $32, %rax - vmovss %xmm0, (%eax) - movq -120(%ebp), %rax - vmovss -24(%ebp), %xmm0 - vmovss %xmm0, (%eax) - vmovss -20(%ebp), %xmm0 - shrq $32, %rax - vmovss %xmm0, (%eax) - addl $136, %esp - popq %r10 - .cfi_def_cfa 10, 0 - popq %rbp - leal -8(%r10), %esp - .cfi_def_cfa 7, 8 - ret -#endif -END (_ZGVdN8vvv_sincosf_avx2) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core.S deleted file mode 100644 index 2c18dbce53..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Multiple versions of vectorized sinf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVeN16v_sinf) - .type _ZGVeN16v_sinf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVeN16v_sinf_skx(%rip), %rax - HAS_ARCH_FEATURE (AVX512DQ_Usable) - jnz 2f - leaq _ZGVeN16v_sinf_knl(%rip), %rax - HAS_ARCH_FEATURE (AVX512F_Usable) - jnz 2f - leaq _ZGVeN16v_sinf_avx2_wrapper(%rip), %rax -2: ret -END (_ZGVeN16v_sinf) - -#define _ZGVeN16v_sinf _ZGVeN16v_sinf_avx2_wrapper -#include "../svml_s_sinf16_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core_avx512.S deleted file mode 100644 index 8670673a29..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core_avx512.S +++ /dev/null @@ -1,479 +0,0 @@ -/* Function sinf vectorized with AVX-512. KNL and SKX versions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_trig_data.h" -#include "svml_s_wrapper_impl.h" - - .text -ENTRY(_ZGVeN16v_sinf_knl) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN8v_sinf -#else -/* - ALGORITHM DESCRIPTION: - - 1) Range reduction to [-Pi/2; +Pi/2] interval - a) Grab sign from source argument and save it. - b) Remove sign using AND operation - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" value - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position - f) Change destination sign if source sign is negative - using XOR operation. - g) Subtract "Right Shifter" value - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - Y*PI4; - 2) Polynomial (minimax for sin within [-Pi/2; +Pi/2] interval) - a) Calculate X^2 = X * X - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + ...... - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_s_trig_data@GOTPCREL(%rip), %rax - -/* Check for large and special values */ - movl $-1, %edx - vmovups __sAbsMask(%rax), %zmm4 - vmovups __sInvPI(%rax), %zmm1 - -/* b) Remove sign using AND operation */ - vpandd %zmm4, %zmm0, %zmm12 - vmovups __sPI1_FMA(%rax), %zmm2 - vmovups __sA9(%rax), %zmm7 - -/* - f) Change destination sign if source sign is negative - using XOR operation. - */ - vpandnd %zmm0, %zmm4, %zmm11 - -/* - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3; - */ - vmovaps %zmm12, %zmm3 - -/* - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" value - */ - vfmadd213ps __sRShifter(%rax), %zmm12, %zmm1 - vcmpps $22, __sRangeReductionVal(%rax), %zmm12, %k1 - vpbroadcastd %edx, %zmm13{%k1}{z} - -/* g) Subtract "Right Shifter" value */ - vsubps __sRShifter(%rax), %zmm1, %zmm5 - -/* - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position - */ - vpslld $31, %zmm1, %zmm6 - vptestmd %zmm13, %zmm13, %k0 - vfnmadd231ps %zmm5, %zmm2, %zmm3 - kmovw %k0, %ecx - vfnmadd231ps __sPI2_FMA(%rax), %zmm5, %zmm3 - vfnmadd132ps __sPI3_FMA(%rax), %zmm3, %zmm5 - -/* - 2) Polynomial (minimax for sin within [-Pi/2; +Pi/2] interval) - a) Calculate X^2 = X * X - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + ...... - */ - vmulps %zmm5, %zmm5, %zmm8 - vpxord %zmm6, %zmm5, %zmm9 - vfmadd213ps __sA7(%rax), %zmm8, %zmm7 - vfmadd213ps __sA5(%rax), %zmm8, %zmm7 - vfmadd213ps __sA3(%rax), %zmm8, %zmm7 - vmulps %zmm8, %zmm7, %zmm10 - vfmadd213ps %zmm9, %zmm9, %zmm10 - -/* - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - vpxord %zmm11, %zmm10, %zmm1 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm1, 1216(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - kmovw %k4, 1048(%rsp) - xorl %eax, %eax - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - addb $1, %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - kmovw 1048(%rsp), %k4 - movq 1064(%rsp), %rsi - kmovw 1040(%rsp), %k5 - movq 1056(%rsp), %rdi - kmovw 1032(%rsp), %k6 - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - vmovups 1216(%rsp), %zmm1 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 1156(%rsp,%r15,8), %xmm0 - call JUMPTARGET(sinf) - vmovss %xmm0, 1220(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - vmovss 1152(%rsp,%r15,8), %xmm0 - call JUMPTARGET(sinf) - vmovss %xmm0, 1216(%rsp,%r15,8) - jmp .LBL_1_7 -#endif -END(_ZGVeN16v_sinf_knl) - -ENTRY (_ZGVeN16v_sinf_skx) -#ifndef HAVE_AVX512DQ_ASM_SUPPORT -WRAPPER_IMPL_AVX512 _ZGVdN8v_sinf -#else -/* - ALGORITHM DESCRIPTION: - - 1) Range reduction to [-Pi/2; +Pi/2] interval - a) Grab sign from source argument and save it. - b) Remove sign using AND operation - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" value - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position - f) Change destination sign if source sign is negative - using XOR operation. - g) Subtract "Right Shifter" value - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - Y*PI4; - 2) Polynomial (minimax for sin within [-Pi/2; +Pi/2] interval) - a) Calculate X^2 = X * X - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + ...... - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $1280, %rsp - movq __svml_s_trig_data@GOTPCREL(%rip), %rax - -/* Check for large and special values */ - vmovups .L_2il0floatpacket.11(%rip), %zmm14 - vmovups __sAbsMask(%rax), %zmm5 - vmovups __sInvPI(%rax), %zmm1 - vmovups __sRShifter(%rax), %zmm2 - vmovups __sPI1_FMA(%rax), %zmm3 - vmovups __sA9(%rax), %zmm8 - -/* b) Remove sign using AND operation */ - vandps %zmm5, %zmm0, %zmm13 - -/* - f) Change destination sign if source sign is negative - using XOR operation. - */ - vandnps %zmm0, %zmm5, %zmm12 - -/* - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" value - */ - vfmadd213ps %zmm2, %zmm13, %zmm1 - vcmpps $18, __sRangeReductionVal(%rax), %zmm13, %k1 - -/* - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position - */ - vpslld $31, %zmm1, %zmm7 - -/* g) Subtract "Right Shifter" value */ - vsubps %zmm2, %zmm1, %zmm6 - -/* - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3; - */ - vmovaps %zmm13, %zmm4 - vfnmadd231ps %zmm6, %zmm3, %zmm4 - vfnmadd231ps __sPI2_FMA(%rax), %zmm6, %zmm4 - vfnmadd132ps __sPI3_FMA(%rax), %zmm4, %zmm6 - -/* - 2) Polynomial (minimax for sin within [-Pi/2; +Pi/2] interval) - a) Calculate X^2 = X * X - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + ...... - */ - vmulps %zmm6, %zmm6, %zmm9 - vxorps %zmm7, %zmm6, %zmm10 - vfmadd213ps __sA7(%rax), %zmm9, %zmm8 - vfmadd213ps __sA5(%rax), %zmm9, %zmm8 - vfmadd213ps __sA3(%rax), %zmm9, %zmm8 - vmulps %zmm9, %zmm8, %zmm11 - vfmadd213ps %zmm10, %zmm10, %zmm11 - -/* - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - vxorps %zmm12, %zmm11, %zmm1 - vpandnd %zmm13, %zmm13, %zmm14{%k1} - vptestmd %zmm14, %zmm14, %k0 - kmovw %k0, %ecx - testl %ecx, %ecx - jne .LBL_2_3 - -.LBL_2_2: - cfi_remember_state - vmovaps %zmm1, %zmm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_2_3: - cfi_restore_state - vmovups %zmm0, 1152(%rsp) - vmovups %zmm1, 1216(%rsp) - je .LBL_2_2 - - xorb %dl, %dl - xorl %eax, %eax - kmovw %k4, 1048(%rsp) - kmovw %k5, 1040(%rsp) - kmovw %k6, 1032(%rsp) - kmovw %k7, 1024(%rsp) - vmovups %zmm16, 960(%rsp) - vmovups %zmm17, 896(%rsp) - vmovups %zmm18, 832(%rsp) - vmovups %zmm19, 768(%rsp) - vmovups %zmm20, 704(%rsp) - vmovups %zmm21, 640(%rsp) - vmovups %zmm22, 576(%rsp) - vmovups %zmm23, 512(%rsp) - vmovups %zmm24, 448(%rsp) - vmovups %zmm25, 384(%rsp) - vmovups %zmm26, 320(%rsp) - vmovups %zmm27, 256(%rsp) - vmovups %zmm28, 192(%rsp) - vmovups %zmm29, 128(%rsp) - vmovups %zmm30, 64(%rsp) - vmovups %zmm31, (%rsp) - movq %rsi, 1064(%rsp) - movq %rdi, 1056(%rsp) - movq %r12, 1096(%rsp) - cfi_offset_rel_rsp (12, 1096) - movb %dl, %r12b - movq %r13, 1088(%rsp) - cfi_offset_rel_rsp (13, 1088) - movl %ecx, %r13d - movq %r14, 1080(%rsp) - cfi_offset_rel_rsp (14, 1080) - movl %eax, %r14d - movq %r15, 1072(%rsp) - cfi_offset_rel_rsp (15, 1072) - cfi_remember_state - -.LBL_2_6: - btl %r14d, %r13d - jc .LBL_2_12 - -.LBL_2_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_2_10 - -.LBL_2_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_2_6 - - kmovw 1048(%rsp), %k4 - kmovw 1040(%rsp), %k5 - kmovw 1032(%rsp), %k6 - kmovw 1024(%rsp), %k7 - vmovups 960(%rsp), %zmm16 - vmovups 896(%rsp), %zmm17 - vmovups 832(%rsp), %zmm18 - vmovups 768(%rsp), %zmm19 - vmovups 704(%rsp), %zmm20 - vmovups 640(%rsp), %zmm21 - vmovups 576(%rsp), %zmm22 - vmovups 512(%rsp), %zmm23 - vmovups 448(%rsp), %zmm24 - vmovups 384(%rsp), %zmm25 - vmovups 320(%rsp), %zmm26 - vmovups 256(%rsp), %zmm27 - vmovups 192(%rsp), %zmm28 - vmovups 128(%rsp), %zmm29 - vmovups 64(%rsp), %zmm30 - vmovups (%rsp), %zmm31 - vmovups 1216(%rsp), %zmm1 - movq 1064(%rsp), %rsi - movq 1056(%rsp), %rdi - movq 1096(%rsp), %r12 - cfi_restore (%r12) - movq 1088(%rsp), %r13 - cfi_restore (%r13) - movq 1080(%rsp), %r14 - cfi_restore (%r14) - movq 1072(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_2_2 - -.LBL_2_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 1156(%rsp,%r15,8), %xmm0 - vzeroupper - vmovss 1156(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(sinf) - - vmovss %xmm0, 1220(%rsp,%r15,8) - jmp .LBL_2_8 - -.LBL_2_12: - movzbl %r12b, %r15d - vmovss 1152(%rsp,%r15,8), %xmm0 - vzeroupper - vmovss 1152(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(sinf) - - vmovss %xmm0, 1216(%rsp,%r15,8) - jmp .LBL_2_7 -#endif -END (_ZGVeN16v_sinf_skx) - - .section .rodata, "a" -.L_2il0floatpacket.11: - .long 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff - .type .L_2il0floatpacket.11,@object diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core.S deleted file mode 100644 index 3556473899..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized sinf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVbN4v_sinf) - .type _ZGVbN4v_sinf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq _ZGVbN4v_sinf_sse4(%rip), %rax - HAS_CPU_FEATURE (SSE4_1) - jz 2f - ret -2: leaq _ZGVbN4v_sinf_sse2(%rip), %rax - ret -END (_ZGVbN4v_sinf) -libmvec_hidden_def (_ZGVbN4v_sinf) - -#define _ZGVbN4v_sinf _ZGVbN4v_sinf_sse2 -#include "../svml_s_sinf4_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core_sse4.S deleted file mode 100644 index c690150964..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core_sse4.S +++ /dev/null @@ -1,224 +0,0 @@ -/* Function sinf vectorized with SSE4. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include -#include "svml_s_trig_data.h" - - .text -ENTRY(_ZGVbN4v_sinf_sse4) -/* - ALGORITHM DESCRIPTION: - - 1) Range reduction to [-Pi/2; +Pi/2] interval - a) Grab sign from source argument and save it. - b) Remove sign using AND operation - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" value - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position - f) Change destination sign if source sign is negative - using XOR operation. - g) Subtract "Right Shifter" value - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - Y*PI4; - 2) Polynomial (minimax for sin within [-Pi/2; +Pi/2] interval) - a) Calculate X^2 = X * X - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + ...... - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $320, %rsp - movaps %xmm0, %xmm5 - movq __svml_s_trig_data@GOTPCREL(%rip), %rax - movups __sAbsMask(%rax), %xmm2 - -/* b) Remove sign using AND operation */ - movaps %xmm2, %xmm4 - -/* - f) Change destination sign if source sign is negative - using XOR operation. - */ - andnps %xmm5, %xmm2 - movups __sInvPI(%rax), %xmm1 - andps %xmm5, %xmm4 - -/* c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" value */ - mulps %xmm4, %xmm1 - -/* h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - Y*PI4 */ - movaps %xmm4, %xmm0 - -/* Check for large and special values */ - cmpnleps __sRangeReductionVal(%rax), %xmm4 - movups __sRShifter(%rax), %xmm6 - movups __sPI1(%rax), %xmm7 - addps %xmm6, %xmm1 - movmskps %xmm4, %ecx - -/* e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position */ - movaps %xmm1, %xmm3 - -/* g) Subtract "Right Shifter" value */ - subps %xmm6, %xmm1 - mulps %xmm1, %xmm7 - pslld $31, %xmm3 - movups __sPI2(%rax), %xmm6 - subps %xmm7, %xmm0 - mulps %xmm1, %xmm6 - movups __sPI3(%rax), %xmm7 - subps %xmm6, %xmm0 - mulps %xmm1, %xmm7 - movups __sPI4(%rax), %xmm6 - subps %xmm7, %xmm0 - mulps %xmm6, %xmm1 - subps %xmm1, %xmm0 - -/* 2) Polynomial (minimax for sin within [-Pi/2; +Pi/2] interval) - a) Calculate X^2 = X * X - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + ...... */ - movaps %xmm0, %xmm1 - mulps %xmm0, %xmm1 - xorps %xmm3, %xmm0 - movups __sA9(%rax), %xmm3 - mulps %xmm1, %xmm3 - addps __sA7(%rax), %xmm3 - mulps %xmm1, %xmm3 - addps __sA5(%rax), %xmm3 - mulps %xmm1, %xmm3 - addps __sA3(%rax), %xmm3 - mulps %xmm3, %xmm1 - mulps %xmm0, %xmm1 - addps %xmm1, %xmm0 - -/* 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); */ - xorps %xmm2, %xmm0 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - movups %xmm5, 192(%rsp) - movups %xmm0, 256(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - movups %xmm8, 112(%rsp) - movups %xmm9, 96(%rsp) - movups %xmm10, 80(%rsp) - movups %xmm11, 64(%rsp) - movups %xmm12, 48(%rsp) - movups %xmm13, 32(%rsp) - movups %xmm14, 16(%rsp) - movups %xmm15, (%rsp) - movq %rsi, 136(%rsp) - movq %rdi, 128(%rsp) - movq %r12, 168(%rsp) - cfi_offset_rel_rsp (12, 168) - movb %dl, %r12b - movq %r13, 160(%rsp) - cfi_offset_rel_rsp (13, 160) - movl %ecx, %r13d - movq %r14, 152(%rsp) - cfi_offset_rel_rsp (14, 152) - movl %eax, %r14d - movq %r15, 144(%rsp) - cfi_offset_rel_rsp (15, 144) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - movups 112(%rsp), %xmm8 - movups 96(%rsp), %xmm9 - movups 80(%rsp), %xmm10 - movups 64(%rsp), %xmm11 - movups 48(%rsp), %xmm12 - movups 32(%rsp), %xmm13 - movups 16(%rsp), %xmm14 - movups (%rsp), %xmm15 - movq 136(%rsp), %rsi - movq 128(%rsp), %rdi - movq 168(%rsp), %r12 - cfi_restore (%r12) - movq 160(%rsp), %r13 - cfi_restore (%r13) - movq 152(%rsp), %r14 - cfi_restore (%r14) - movq 144(%rsp), %r15 - cfi_restore (%r15) - movups 256(%rsp), %xmm0 - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - movss 196(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(sinf) - - movss %xmm0, 260(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - movss 192(%rsp,%r15,8), %xmm0 - - call JUMPTARGET(sinf) - - movss %xmm0, 256(%rsp,%r15,8) - jmp .LBL_1_7 - -END(_ZGVbN4v_sinf_sse4) diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core.S b/sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core.S deleted file mode 100644 index 674e88bd55..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Multiple versions of vectorized sinf, vector length is 8. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - .text -ENTRY (_ZGVdN8v_sinf) - .type _ZGVdN8v_sinf, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX -1: leaq _ZGVdN8v_sinf_avx2(%rip), %rax - HAS_ARCH_FEATURE (AVX2_Usable) - jz 2f - ret -2: leaq _ZGVdN8v_sinf_sse_wrapper(%rip), %rax - ret -END (_ZGVdN8v_sinf) -libmvec_hidden_def (_ZGVdN8v_sinf) - -#define _ZGVdN8v_sinf _ZGVdN8v_sinf_sse_wrapper -#include "../svml_s_sinf8_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core_avx2.S deleted file mode 100644 index d34870fa3a..0000000000 --- a/sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core_avx2.S +++ /dev/null @@ -1,219 +0,0 @@ -/* Function sinf vectorized with AVX2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_trig_data.h" - - .text -ENTRY(_ZGVdN8v_sinf_avx2) -/* - ALGORITHM DESCRIPTION: - - 1) Range reduction to [-Pi/2; +Pi/2] interval - a) Grab sign from source argument and save it. - b) Remove sign using AND operation - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" value - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position - f) Change destination sign if source sign is negative - using XOR operation. - g) Subtract "Right Shifter" value - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3 - Y*PI4; - 2) Polynomial (minimax for sin within [-Pi/2; +Pi/2] interval) - a) Calculate X^2 = X * X - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + ...... - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $448, %rsp - movq __svml_s_trig_data@GOTPCREL(%rip), %rax - vmovdqa %ymm0, %ymm5 - vmovups __sAbsMask(%rax), %ymm3 - vmovups __sInvPI(%rax), %ymm7 - vmovups __sRShifter(%rax), %ymm0 - vmovups __sPI1_FMA(%rax), %ymm1 - -/* b) Remove sign using AND operation */ - vandps %ymm3, %ymm5, %ymm4 - -/* - c) Getting octant Y by 1/Pi multiplication - d) Add "Right Shifter" value - */ - vfmadd213ps %ymm0, %ymm4, %ymm7 - -/* g) Subtract "Right Shifter" value */ - vsubps %ymm0, %ymm7, %ymm2 - -/* - e) Treat obtained value as integer for destination sign setting. - Shift first bit of this value to the last (sign) position - */ - vpslld $31, %ymm7, %ymm6 - -/* - h) Subtract Y*PI from X argument, where PI divided to 4 parts: - X = X - Y*PI1 - Y*PI2 - Y*PI3; - */ - vmovdqa %ymm4, %ymm0 - vfnmadd231ps %ymm2, %ymm1, %ymm0 - -/* Check for large and special values */ - vcmpnle_uqps __sRangeReductionVal(%rax), %ymm4, %ymm4 - vfnmadd231ps __sPI2_FMA(%rax), %ymm2, %ymm0 - vfnmadd132ps __sPI3_FMA(%rax), %ymm0, %ymm2 - -/* - 2) Polynomial (minimax for sin within [-Pi/2; +Pi/2] interval) - a) Calculate X^2 = X * X - b) Calculate polynomial: - R = X + X * X^2 * (A3 + x^2 * (A5 + ...... - */ - vmulps %ymm2, %ymm2, %ymm1 - -/* - f) Change destination sign if source sign is negative - using XOR operation. - */ - vandnps %ymm5, %ymm3, %ymm0 - vxorps %ymm6, %ymm2, %ymm3 - vmovups __sA9(%rax), %ymm2 - vfmadd213ps __sA7(%rax), %ymm1, %ymm2 - vfmadd213ps __sA5(%rax), %ymm1, %ymm2 - vfmadd213ps __sA3(%rax), %ymm1, %ymm2 - vmulps %ymm1, %ymm2, %ymm6 - vfmadd213ps %ymm3, %ymm3, %ymm6 - vmovmskps %ymm4, %ecx - -/* - 3) Destination sign setting - a) Set shifted destination sign using XOR operation: - R = XOR( R, S ); - */ - vxorps %ymm0, %ymm6, %ymm0 - testl %ecx, %ecx - jne .LBL_1_3 - -.LBL_1_2: - cfi_remember_state - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret - -.LBL_1_3: - cfi_restore_state - vmovups %ymm5, 320(%rsp) - vmovups %ymm0, 384(%rsp) - je .LBL_1_2 - - xorb %dl, %dl - xorl %eax, %eax - vmovups %ymm8, 224(%rsp) - vmovups %ymm9, 192(%rsp) - vmovups %ymm10, 160(%rsp) - vmovups %ymm11, 128(%rsp) - vmovups %ymm12, 96(%rsp) - vmovups %ymm13, 64(%rsp) - vmovups %ymm14, 32(%rsp) - vmovups %ymm15, (%rsp) - movq %rsi, 264(%rsp) - movq %rdi, 256(%rsp) - movq %r12, 296(%rsp) - cfi_offset_rel_rsp (12, 296) - movb %dl, %r12b - movq %r13, 288(%rsp) - cfi_offset_rel_rsp (13, 288) - movl %ecx, %r13d - movq %r14, 280(%rsp) - cfi_offset_rel_rsp (14, 280) - movl %eax, %r14d - movq %r15, 272(%rsp) - cfi_offset_rel_rsp (15, 272) - cfi_remember_state - -.LBL_1_6: - btl %r14d, %r13d - jc .LBL_1_12 - -.LBL_1_7: - lea 1(%r14), %esi - btl %esi, %r13d - jc .LBL_1_10 - -.LBL_1_8: - incb %r12b - addl $2, %r14d - cmpb $16, %r12b - jb .LBL_1_6 - - vmovups 224(%rsp), %ymm8 - vmovups 192(%rsp), %ymm9 - vmovups 160(%rsp), %ymm10 - vmovups 128(%rsp), %ymm11 - vmovups 96(%rsp), %ymm12 - vmovups 64(%rsp), %ymm13 - vmovups 32(%rsp), %ymm14 - vmovups (%rsp), %ymm15 - vmovups 384(%rsp), %ymm0 - movq 264(%rsp), %rsi - movq 256(%rsp), %rdi - movq 296(%rsp), %r12 - cfi_restore (%r12) - movq 288(%rsp), %r13 - cfi_restore (%r13) - movq 280(%rsp), %r14 - cfi_restore (%r14) - movq 272(%rsp), %r15 - cfi_restore (%r15) - jmp .LBL_1_2 - -.LBL_1_10: - cfi_restore_state - movzbl %r12b, %r15d - vmovss 324(%rsp,%r15,8), %xmm0 - vzeroupper - - call JUMPTARGET(sinf) - - vmovss %xmm0, 388(%rsp,%r15,8) - jmp .LBL_1_8 - -.LBL_1_12: - movzbl %r12b, %r15d - vmovss 320(%rsp,%r15,8), %xmm0 - vzeroupper - - call JUMPTARGET(sinf) - - vmovss %xmm0, 384(%rsp,%r15,8) - jmp .LBL_1_7 - -END(_ZGVdN8v_sinf_avx2) diff --git a/sysdeps/x86_64/fpu/printf_fphex.c b/sysdeps/x86_64/fpu/printf_fphex.c deleted file mode 100644 index fd68eaeebf..0000000000 --- a/sysdeps/x86_64/fpu/printf_fphex.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Print floating point number in hexadecimal notation according to ISO C99. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef LONG_DOUBLE_DENORM_BIAS -# define LONG_DOUBLE_DENORM_BIAS (IEEE854_LONG_DOUBLE_BIAS - 1) -#endif - -#define PRINT_FPHEX_LONG_DOUBLE \ -do { \ - /* The "strange" 80 bit format on ix86 and m68k has an explicit \ - leading digit in the 64 bit mantissa. */ \ - unsigned long long int num; \ - union ieee854_long_double u; \ - u.d = fpnum.ldbl; \ - \ - num = (((unsigned long long int) u.ieee.mantissa0) << 32 \ - | u.ieee.mantissa1); \ - \ - zero_mantissa = num == 0; \ - \ - if (sizeof (unsigned long int) > 6) \ - { \ - numstr = _itoa_word (num, numbuf + sizeof numbuf, 16, \ - info->spec == 'A'); \ - wnumstr = _itowa_word (num, \ - wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t),\ - 16, info->spec == 'A'); \ - } \ - else \ - { \ - numstr = _itoa (num, numbuf + sizeof numbuf, 16, info->spec == 'A');\ - wnumstr = _itowa (num, \ - wnumbuf + sizeof (wnumbuf) / sizeof (wchar_t), \ - 16, info->spec == 'A'); \ - } \ - \ - /* Fill with zeroes. */ \ - while (numstr > numbuf + (sizeof numbuf - 64 / 4)) \ - { \ - *--numstr = '0'; \ - *--wnumstr = L'0'; \ - } \ - \ - /* We use a full nibble for the leading digit. */ \ - leading = *numstr++; \ - wnumstr++; \ - \ - /* We have 3 bits from the mantissa in the leading nibble. \ - Therefore we are here using `IEEE854_LONG_DOUBLE_BIAS + 3'. */ \ - exponent = u.ieee.exponent; \ - \ - if (exponent == 0) \ - { \ - if (zero_mantissa) \ - expnegative = 0; \ - else \ - { \ - /* This is a denormalized number. */ \ - expnegative = 1; \ - /* This is a hook for the m68k long double format, where the \ - exponent bias is the same for normalized and denormalized \ - numbers. */ \ - exponent = LONG_DOUBLE_DENORM_BIAS + 3; \ - } \ - } \ - else if (exponent >= IEEE854_LONG_DOUBLE_BIAS + 3) \ - { \ - expnegative = 0; \ - exponent -= IEEE854_LONG_DOUBLE_BIAS + 3; \ - } \ - else \ - { \ - expnegative = 1; \ - exponent = -(exponent - (IEEE854_LONG_DOUBLE_BIAS + 3)); \ - } \ -} while (0) - -#include diff --git a/sysdeps/x86_64/fpu/s_atanl.c b/sysdeps/x86_64/fpu/s_atanl.c deleted file mode 100644 index fd4a455b55..0000000000 --- a/sysdeps/x86_64/fpu/s_atanl.c +++ /dev/null @@ -1 +0,0 @@ -#include "sysdeps/i386/fpu/s_atanl.c" diff --git a/sysdeps/x86_64/fpu/s_ceill.S b/sysdeps/x86_64/fpu/s_ceill.S deleted file mode 100644 index 9d8b79dbee..0000000000 --- a/sysdeps/x86_64/fpu/s_ceill.S +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changes for long double by Ulrich Drepper - * Changes for x86-64 by Andreas Jaeger - * Public domain. - */ - -#include - - -ENTRY(__ceill) - fldt 8(%rsp) - - fnstenv -28(%rsp) /* store fpu environment */ - - /* We use here %edx although only the low 1 bits are defined. - But none of the operations should care and they are faster - than the 16 bit operations. */ - movl $0x0800,%edx /* round towards +oo */ - orl -28(%rsp),%edx - andl $0xfbff,%edx - movl %edx,-32(%rsp) - fldcw -32(%rsp) /* load modified control word */ - - frndint /* round */ - - /* Preserve "invalid" exceptions from sNaN input. */ - fnstsw - andl $0x1, %eax - orl %eax, -24(%rsp) - - fldenv -28(%rsp) /* restore original environment */ - - ret -END (__ceill) -weak_alias (__ceill, ceill) diff --git a/sysdeps/x86_64/fpu/s_copysign.S b/sysdeps/x86_64/fpu/s_copysign.S deleted file mode 100644 index 8939dffd99..0000000000 --- a/sysdeps/x86_64/fpu/s_copysign.S +++ /dev/null @@ -1,50 +0,0 @@ -/* copy sign, double version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata.cst16,"aM",@progbits,16 - - .align ALIGNARG(4) - .type signmask,@object -signmask: - .byte 0, 0, 0, 0, 0, 0, 0, 0x80 - .byte 0, 0, 0, 0, 0, 0, 0, 0 - ASM_SIZE_DIRECTIVE(signmask) - .type othermask,@object -othermask: - .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f - .byte 0, 0, 0, 0, 0, 0, 0, 0 - ASM_SIZE_DIRECTIVE(othermask) - -#ifdef PIC -#define MO(op) op##(%rip) -#else -#define MO(op) op -#endif - - .text -ENTRY(__copysign) - andpd MO(othermask),%xmm0 - andpd MO(signmask),%xmm1 - orpd %xmm1,%xmm0 - ret -END (__copysign) - -weak_alias (__copysign, copysign) diff --git a/sysdeps/x86_64/fpu/s_copysignf.S b/sysdeps/x86_64/fpu/s_copysignf.S deleted file mode 100644 index 213c2d3c2c..0000000000 --- a/sysdeps/x86_64/fpu/s_copysignf.S +++ /dev/null @@ -1,45 +0,0 @@ -/* copy sign, double version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .section .rodata - - .align ALIGNARG(4) - .type mask,@object -mask: - .byte 0xff, 0xff, 0xff, 0x7f - ASM_SIZE_DIRECTIVE(mask) - -#ifdef PIC -#define MO(op) op##(%rip) -#else -#define MO(op) op -#endif - - .text -ENTRY(__copysignf) - movss MO(mask),%xmm3 - andps %xmm3,%xmm0 - andnps %xmm1,%xmm3 - orps %xmm3,%xmm0 - retq -END (__copysignf) - -weak_alias (__copysignf, copysignf) diff --git a/sysdeps/x86_64/fpu/s_copysignl.S b/sysdeps/x86_64/fpu/s_copysignl.S deleted file mode 100644 index 2ffd612d65..0000000000 --- a/sysdeps/x86_64/fpu/s_copysignl.S +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changes for long double by Ulrich Drepper . - * Adopted for x86-64 by Andreas Jaeger . - * Public domain. - */ - -#include - -RCSID("$NetBSD: $") - -ENTRY(__copysignl) - movl 32(%rsp),%edx - movl 16(%rsp),%eax - andl $0x8000,%edx - andl $0x7fff,%eax - orl %edx,%eax - movl %eax,16(%rsp) - fldt 8(%rsp) - ret -END (__copysignl) -weak_alias (__copysignl, copysignl) diff --git a/sysdeps/x86_64/fpu/s_cosf.S b/sysdeps/x86_64/fpu/s_cosf.S deleted file mode 100644 index e9fdc7e56e..0000000000 --- a/sysdeps/x86_64/fpu/s_cosf.S +++ /dev/null @@ -1,533 +0,0 @@ -/* Optimized cosf function. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define __need_Emath -#include - -/* Short algorithm description: - * - * 1) if |x| == 0: return 1.0-|x|. - * 2) if |x| < 2^-27: return 1.0-|x|. - * 3) if |x| < 2^-5 : return 1.0+x^2*DP_COS2_0+x^5*DP_COS2_1. - * 4) if |x| < Pi/4: return 1.0+x^2*(C0+x^2*(C1+x^2*(C2+x^2*(C3+x^2*C4)))). - * 5) if |x| < 9*Pi/4: - * 5.1) Range reduction: k=trunc(|x|/(Pi/4)), j=(k+1)&0x0e, n=k+3, - * t=|x|-j*Pi/4. - * 5.2) Reconstruction: - * s = (-1.0)^((n>>2)&1) - * if(n&2 != 0) { - * using cos(t) polynomial for |t|= 2^23, very large args: - * 7.1) Range reduction: k=trunc(|x|/(Pi/4)), j=(k+1)&0xfffffffe, n=k+3, - * t=|x|-j*Pi/4. - * 7.2) Reconstruction same as (5.2). - * 8) if x is Inf, return x-x, and set errno=EDOM. - * 9) if x is NaN, return x-x. - * - * Special cases: - * cos(+-0) = 1 not raising inexact, - * cos(subnormal) raises inexact, - * cos(min_normalized) raises inexact, - * cos(normalized) raises inexact, - * cos(Inf) = NaN, raises invalid, sets errno to EDOM, - * cos(NaN) = NaN. - */ - - .text -ENTRY(__cosf) - /* Input: single precision x in %xmm0 */ - - movd %xmm0, %eax /* Bits of x */ - movaps %xmm0, %xmm7 /* Copy of x */ - cvtss2sd %xmm0, %xmm0 /* DP x */ - movss L(SP_ABS_MASK)(%rip), %xmm3 - andl $0x7fffffff, %eax /* |x| */ - - cmpl $0x3f490fdb, %eax /* |x|=Pi/4 */ - andps %xmm7, %xmm3 /* SP |x| */ - andpd L(DP_ABS_MASK)(%rip), %xmm0 /* DP |x| */ - movss L(SP_INVPIO4)(%rip), %xmm2 /* SP 1/(Pi/4) */ - - cmpl $0x40e231d6, %eax /* |x|<9*Pi/4? */ - jae L(large_args) - - /* Here if Pi/4<=|x|<9*Pi/4 */ - mulss %xmm3, %xmm2 /* SP |x|/(Pi/4) */ - cvttss2si %xmm2, %eax /* k, number of Pi/4 in x */ - lea L(PIO4J)(%rip), %rsi - addl $1, %eax /* k+1 */ - movl $0x0e, %edx - andl %eax, %edx /* j = (k+1)&0x0e */ - addl $2, %eax /* n */ - subsd (%rsi,%rdx,8), %xmm0 /* t = |x| - j * Pi/4 */ - -L(reconstruction): - /* Input: %eax=n, %xmm0=t */ - testl $2, %eax /* n&2 != 0? */ - jz L(sin_poly) - -/*L(cos_poly):*/ - /* Here if cos(x) calculated using cos(t) polynomial for |t|>2)&1) - * result = s * (1.0+t^2*(C0+t^2*(C1+t^2*(C2+t^2*(C3+t^2*C4))))) - */ - shrl $2, %eax /* n>>2 */ - mulsd %xmm0, %xmm0 /* y=t^2 */ - andl $1, %eax /* (n>>2)&1 */ - movaps %xmm0, %xmm1 /* y */ - mulsd %xmm0, %xmm0 /* z=t^4 */ - - movsd L(DP_C4)(%rip), %xmm4 /* C4 */ - mulsd %xmm0, %xmm4 /* z*C4 */ - movsd L(DP_C3)(%rip), %xmm3 /* C3 */ - mulsd %xmm0, %xmm3 /* z*C3 */ - lea L(DP_ONES)(%rip), %rsi - addsd L(DP_C2)(%rip), %xmm4 /* C2+z*C4 */ - mulsd %xmm0, %xmm4 /* z*(C2+z*C4) */ - addsd L(DP_C1)(%rip), %xmm3 /* C1+z*C3 */ - mulsd %xmm0, %xmm3 /* z*(C1+z*C3) */ - addsd L(DP_C0)(%rip), %xmm4 /* C0+z*(C2+z*C4) */ - mulsd %xmm1, %xmm4 /* y*(C0+z*(C2+z*C4)) */ - - addsd %xmm4, %xmm3 /* y*(C0+y*(C1+y*(C2+y*(C3+y*C4)))) */ - /* 1.0+y*(C0+y*(C1+y*(C2+y*(C3+y*C4)))) */ - addsd L(DP_ONES)(%rip), %xmm3 - - mulsd (%rsi,%rax,8), %xmm3 /* DP result */ - cvtsd2ss %xmm3, %xmm0 /* SP result */ - ret - - .p2align 4 -L(sin_poly): - /* Here if cos(x) calculated using sin(t) polynomial for |t|>2)&1) - * result = s * t * (1.0+t^2*(S0+t^2*(S1+t^2*(S2+t^2*(S3+t^2*S4))))) - */ - - movaps %xmm0, %xmm4 /* t */ - shrl $2, %eax /* n>>2 */ - mulsd %xmm0, %xmm0 /* y=t^2 */ - andl $1, %eax /* (n>>2)&1 */ - movaps %xmm0, %xmm1 /* y */ - mulsd %xmm0, %xmm0 /* z=t^4 */ - - movsd L(DP_S4)(%rip), %xmm2 /* S4 */ - mulsd %xmm0, %xmm2 /* z*S4 */ - movsd L(DP_S3)(%rip), %xmm3 /* S3 */ - mulsd %xmm0, %xmm3 /* z*S3 */ - lea L(DP_ONES)(%rip), %rsi - addsd L(DP_S2)(%rip), %xmm2 /* S2+z*S4 */ - mulsd %xmm0, %xmm2 /* z*(S2+z*S4) */ - addsd L(DP_S1)(%rip), %xmm3 /* S1+z*S3 */ - mulsd %xmm0, %xmm3 /* z*(S1+z*S3) */ - addsd L(DP_S0)(%rip), %xmm2 /* S0+z*(S2+z*S4) */ - mulsd %xmm1, %xmm2 /* y*(S0+z*(S2+z*S4)) */ - /* t*s, where s = sign(x) * (-1.0)^((n>>2)&1) */ - mulsd (%rsi,%rax,8), %xmm4 - /* y*(S0+y*(S1+y*(S2+y*(S3+y*S4)))) */ - addsd %xmm2, %xmm3 - /* t*s*y*(S0+y*(S1+y*(S2+y*(S3+y*S4)))) */ - mulsd %xmm4, %xmm3 - /* t*s*(1.0+y*(S0+y*(S1+y*(S2+y*(S3+y*S4)))) */ - addsd %xmm4, %xmm3 - cvtsd2ss %xmm3, %xmm0 /* SP result */ - ret - - .p2align 4 -L(large_args): - /* Here if |x|>=9*Pi/4 */ - cmpl $0x7f800000, %eax /* x is Inf or NaN? */ - jae L(arg_inf_or_nan) - - /* Here if finite |x|>=9*Pi/4 */ - cmpl $0x4b000000, %eax /* |x|<2^23? */ - jae L(very_large_args) - - /* Here if 9*Pi/4<=|x|<2^23 */ - movsd L(DP_INVPIO4)(%rip), %xmm1 /* 1/(Pi/4) */ - mulsd %xmm0, %xmm1 /* |x|/(Pi/4) */ - cvttsd2si %xmm1, %eax /* k=trunc(|x|/(Pi/4)) */ - addl $1, %eax /* k+1 */ - movl %eax, %edx - andl $0xfffffffe, %edx /* j=(k+1)&0xfffffffe */ - cvtsi2sdl %edx, %xmm4 /* DP j */ - movsd L(DP_PIO4HI)(%rip), %xmm2 /* -PIO4HI = high part of -Pi/4 */ - mulsd %xmm4, %xmm2 /* -j*PIO4HI */ - movsd L(DP_PIO4LO)(%rip), %xmm3 /* -PIO4LO = low part of -Pi/4 */ - addsd %xmm2, %xmm0 /* |x| - j*PIO4HI */ - addl $2, %eax /* n */ - mulsd %xmm3, %xmm4 /* j*PIO4LO */ - addsd %xmm4, %xmm0 /* t = |x| - j*PIO4HI - j*PIO4LO */ - jmp L(reconstruction) - - .p2align 4 -L(very_large_args): - /* Here if finite |x|>=2^23 */ - - /* bitpos = (ix>>23) - BIAS_32 + 59; */ - shrl $23, %eax /* eb = biased exponent of x */ - /* bitpos = eb - 0x7f + 59, where 0x7f is exponent bias */ - subl $68, %eax - movl $28, %ecx /* %cl=28 */ - movl %eax, %edx /* bitpos copy */ - - /* j = bitpos/28; */ - div %cl /* j in register %al=%ax/%cl */ - movapd %xmm0, %xmm3 /* |x| */ - /* clear unneeded remainder from %ah */ - andl $0xff, %eax - - imull $28, %eax, %ecx /* j*28 */ - lea L(_FPI)(%rip), %rsi - movsd L(DP_HI_MASK)(%rip), %xmm4 /* DP_HI_MASK */ - movapd %xmm0, %xmm5 /* |x| */ - mulsd -16(%rsi,%rax,8), %xmm3 /* tmp3 = FPI[j-2]*|x| */ - movapd %xmm0, %xmm1 /* |x| */ - mulsd -8(%rsi,%rax,8), %xmm5 /* tmp2 = FPI[j-1]*|x| */ - mulsd (%rsi,%rax,8), %xmm0 /* tmp0 = FPI[j]*|x| */ - addl $19, %ecx /* j*28+19 */ - mulsd 8(%rsi,%rax,8), %xmm1 /* tmp1 = FPI[j+1]*|x| */ - cmpl %ecx, %edx /* bitpos>=j*28+19? */ - jl L(very_large_skip1) - - /* Here if bitpos>=j*28+19 */ - andpd %xmm3, %xmm4 /* HI(tmp3) */ - subsd %xmm4, %xmm3 /* tmp3 = tmp3 - HI(tmp3) */ -L(very_large_skip1): - - movsd L(DP_2POW52)(%rip), %xmm6 - movapd %xmm5, %xmm2 /* tmp2 copy */ - addsd %xmm3, %xmm5 /* tmp5 = tmp3 + tmp2 */ - movl $1, %edx - addsd %xmm5, %xmm6 /* tmp6 = tmp5 + 2^52 */ - movsd 8+L(DP_2POW52)(%rip), %xmm4 - movd %xmm6, %eax /* k = I64_LO(tmp6); */ - addsd %xmm6, %xmm4 /* tmp4 = tmp6 - 2^52 */ - comisd %xmm5, %xmm4 /* tmp4 > tmp5? */ - jbe L(very_large_skip2) - - /* Here if tmp4 > tmp5 */ - subl $1, %eax /* k-- */ - addsd 8+L(DP_ONES)(%rip), %xmm4 /* tmp4 -= 1.0 */ -L(very_large_skip2): - - andl %eax, %edx /* k&1 */ - lea L(DP_ZERONE)(%rip), %rsi - subsd %xmm4, %xmm3 /* tmp3 -= tmp4 */ - addsd (%rsi,%rdx,8), %xmm3 /* t = DP_ZERONE[k&1] + tmp3 */ - addsd %xmm2, %xmm3 /* t += tmp2 */ - addsd %xmm3, %xmm0 /* t += tmp0 */ - addl $3, %eax /* n=k+3 */ - addsd %xmm1, %xmm0 /* t += tmp1 */ - mulsd L(DP_PIO4)(%rip), %xmm0 /* t *= PI04 */ - - jmp L(reconstruction) /* end of very_large_args peth */ - - .p2align 4 -L(arg_less_pio4): - /* Here if |x| diff --git a/sysdeps/x86_64/fpu/s_fabs.c b/sysdeps/x86_64/fpu/s_fabs.c deleted file mode 100644 index f5d3ee87e9..0000000000 --- a/sysdeps/x86_64/fpu/s_fabs.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Absolute value of floating point number. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -double -__fabs (double x) -{ - return __builtin_fabs (x); -} -weak_alias (__fabs, fabs) diff --git a/sysdeps/x86_64/fpu/s_fabsf.c b/sysdeps/x86_64/fpu/s_fabsf.c deleted file mode 100644 index 9956cce757..0000000000 --- a/sysdeps/x86_64/fpu/s_fabsf.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Absolute value of floating point number. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -float -__fabsf (float x) -{ - return __builtin_fabsf (x); -} -weak_alias (__fabsf, fabsf) diff --git a/sysdeps/x86_64/fpu/s_fabsl.S b/sysdeps/x86_64/fpu/s_fabsl.S deleted file mode 100644 index 1aef8318d9..0000000000 --- a/sysdeps/x86_64/fpu/s_fabsl.S +++ /dev/null @@ -1,27 +0,0 @@ -/* Absolute value of floating point number. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fabsl) - fldt 8(%rsp) - fabs - ret -END(__fabsl) -weak_alias (__fabsl, fabsl) diff --git a/sysdeps/x86_64/fpu/s_finitel.S b/sysdeps/x86_64/fpu/s_finitel.S deleted file mode 100644 index 9e49796901..0000000000 --- a/sysdeps/x86_64/fpu/s_finitel.S +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Written by Joe Keane . - * Adopted for x86-64 by Andreas Jaeger . - */ - -#include - -ENTRY(__finitel) - movl 16(%rsp),%eax - orl $0xffff8000, %eax - incl %eax - shrl $31, %eax - ret -END (__finitel) -weak_alias (__finitel, finitel) -hidden_def (__finitel) diff --git a/sysdeps/x86_64/fpu/s_floorl.S b/sysdeps/x86_64/fpu/s_floorl.S deleted file mode 100644 index 535fdd8571..0000000000 --- a/sysdeps/x86_64/fpu/s_floorl.S +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changes for long double by Ulrich Drepper - * Changes for x86-64 by Andreas Jaeger =09 - * Public domain. - */ - -#include - -ENTRY(__floorl) - fldt 8(%rsp) - - fnstenv -28(%rsp) /* store fpu environment */ - - /* We use here %edx although only the low 1 bits are defined. - But none of the operations should care and they are faster - than the 16 bit operations. */ - movl $0x400,%edx /* round towards -oo */ - orl -28(%rsp),%edx - andl $0xf7ff,%edx - movl %edx,-32(%rsp) - fldcw -32(%rsp) /* load modified control word */ - - frndint /* round */ - - /* Preserve "invalid" exceptions from sNaN input. */ - fnstsw - andl $0x1, %eax - orl %eax, -24(%rsp) - - fldenv -28(%rsp) /* restore original environment */ - - ret -END (__floorl) -weak_alias (__floorl, floorl) diff --git a/sysdeps/x86_64/fpu/s_fmax.S b/sysdeps/x86_64/fpu/s_fmax.S deleted file mode 100644 index f93c9f9371..0000000000 --- a/sysdeps/x86_64/fpu/s_fmax.S +++ /dev/null @@ -1,52 +0,0 @@ -/* Compute maximum of two numbers, regarding NaN as missing argument. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fmax) - ucomisd %xmm0, %xmm1 - jp 1f // jump if unordered - maxsd %xmm1, %xmm0 - jmp 2f - -1: ucomisd %xmm1, %xmm1 // Is xmm1 a NaN? - jp 3f - // xmm0 is a NaN; xmm1 is not. Test if xmm0 is signaling. - movsd %xmm0, -8(%rsp) - testb $0x8, -2(%rsp) - jz 4f - movsd %xmm1, %xmm0 // otherwise return xmm1 - ret - -3: // xmm1 is a NaN; xmm0 may or may not be. - ucomisd %xmm0, %xmm0 - jp 4f - // xmm1 is a NaN; xmm0 is not. Test if xmm1 is signaling. - movsd %xmm1, -8(%rsp) - testb $0x8, -2(%rsp) - jz 4f - ret - -4: // Both arguments are NaNs, or one is a signaling NaN. - addsd %xmm1, %xmm0 - -2: ret -END(__fmax) -weak_alias (__fmax, fmax) diff --git a/sysdeps/x86_64/fpu/s_fmaxf.S b/sysdeps/x86_64/fpu/s_fmaxf.S deleted file mode 100644 index 82989feb4b..0000000000 --- a/sysdeps/x86_64/fpu/s_fmaxf.S +++ /dev/null @@ -1,52 +0,0 @@ -/* Compute maximum of two numbers, regarding NaN as missing argument. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fmaxf) - ucomiss %xmm0, %xmm1 - jp 1f // jump if unordered - maxss %xmm1, %xmm0 - jmp 2f - -1: ucomiss %xmm1, %xmm1 // Is xmm1 a NaN? - jp 3f - // xmm0 is a NaN; xmm1 is not. Test if xmm0 is signaling. - movss %xmm0, -4(%rsp) - testb $0x40, -2(%rsp) - jz 4f - movss %xmm1, %xmm0 // otherwise return xmm1 - ret - -3: // xmm1 is a NaN; xmm0 may or may not be. - ucomiss %xmm0, %xmm0 - jp 4f - // xmm1 is a NaN; xmm0 is not. Test if xmm1 is signaling. - movss %xmm1, -4(%rsp) - testb $0x40, -2(%rsp) - jz 4f - ret - -4: // Both arguments are NaNs, or one is a signaling NaN. - addss %xmm1, %xmm0 - -2: ret -END(__fmaxf) -weak_alias (__fmaxf, fmaxf) diff --git a/sysdeps/x86_64/fpu/s_fmaxl.S b/sysdeps/x86_64/fpu/s_fmaxl.S deleted file mode 100644 index 2d3321fce4..0000000000 --- a/sysdeps/x86_64/fpu/s_fmaxl.S +++ /dev/null @@ -1,58 +0,0 @@ -/* Compute maximum of two numbers, regarding NaN as missing argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fmaxl) - fldt 8(%rsp) // x - fldt 24(%rsp) // x : y - - fucomi %st(1), %st - jp 2f - fcmovb %st(1), %st - - fstp %st(1) - - ret - -2: // Unordered. - fucomi %st(0), %st - jp 3f - // st(1) is a NaN; st(0) is not. Test if st(1) is signaling. - testb $0x40, 15(%rsp) - jz 4f - fstp %st(1) - ret - -3: // st(0) is a NaN; st(1) may or may not be. - fxch - fucomi %st(0), %st - jp 4f - // st(1) is a NaN; st(0) is not. Test if st(1) is signaling. - testb $0x40, 31(%rsp) - jz 4f - fstp %st(1) - ret - -4: // Both arguments are NaNs, or one is a signaling NaN. - faddp - ret -END(__fmaxl) -weak_alias (__fmaxl, fmaxl) diff --git a/sysdeps/x86_64/fpu/s_fmin.S b/sysdeps/x86_64/fpu/s_fmin.S deleted file mode 100644 index 718bf489df..0000000000 --- a/sysdeps/x86_64/fpu/s_fmin.S +++ /dev/null @@ -1,52 +0,0 @@ -/* Compute minimum of two numbers, regarding NaN as missing argument. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fmin) - ucomisd %xmm0, %xmm1 - jp 1f // jump if unordered - minsd %xmm1, %xmm0 - jmp 2f - -1: ucomisd %xmm1, %xmm1 // Is xmm1 a NaN? - jp 3f - // xmm0 is a NaN; xmm1 is not. Test if xmm0 is signaling. - movsd %xmm0, -8(%rsp) - testb $0x8, -2(%rsp) - jz 4f - movsd %xmm1, %xmm0 // otherwise return xmm1 - ret - -3: // xmm1 is a NaN; xmm0 may or may not be. - ucomisd %xmm0, %xmm0 - jp 4f - // xmm1 is a NaN; xmm0 is not. Test if xmm1 is signaling. - movsd %xmm1, -8(%rsp) - testb $0x8, -2(%rsp) - jz 4f - ret - -4: // Both arguments are NaNs, or one is a signaling NaN. - addsd %xmm1, %xmm0 - -2: ret -END(__fmin) -weak_alias (__fmin, fmin) diff --git a/sysdeps/x86_64/fpu/s_fminf.S b/sysdeps/x86_64/fpu/s_fminf.S deleted file mode 100644 index 8e8c9360ac..0000000000 --- a/sysdeps/x86_64/fpu/s_fminf.S +++ /dev/null @@ -1,52 +0,0 @@ -/* Compute minimum of two numbers, regarding NaN as missing argument. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fminf) - ucomiss %xmm0, %xmm1 - jp 1f // jump if unordered - minss %xmm1, %xmm0 - jmp 2f - -1: ucomiss %xmm1, %xmm1 // Is xmm1 a NaN? - jp 3f - // xmm0 is a NaN; xmm1 is not. Test if xmm0 is signaling. - movss %xmm0, -4(%rsp) - testb $0x40, -2(%rsp) - jz 4f - movss %xmm1, %xmm0 // otherwise return xmm1 - ret - -3: // xmm1 is a NaN; xmm0 may or may not be. - ucomiss %xmm0, %xmm0 - jp 4f - // xmm1 is a NaN; xmm0 is not. Test if xmm1 is signaling. - movss %xmm1, -4(%rsp) - testb $0x40, -2(%rsp) - jz 4f - ret - -4: // Both arguments are NaNs, or one is a signaling NaN. - addss %xmm1, %xmm0 - -2: ret -END(__fminf) -weak_alias (__fminf, fminf) diff --git a/sysdeps/x86_64/fpu/s_fminl.S b/sysdeps/x86_64/fpu/s_fminl.S deleted file mode 100644 index 33eed7b30b..0000000000 --- a/sysdeps/x86_64/fpu/s_fminl.S +++ /dev/null @@ -1,58 +0,0 @@ -/* Compute minimum of two numbers, regarding NaN as missing argument. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__fminl) - fldt 8(%rsp) // x - fldt 24(%rsp) // x : y - - fucomi %st(1), %st - jp 2f - fcmovnb %st(1), %st - - fstp %st(1) - - ret - -2: // Unordered. - fucomi %st(0), %st - jp 3f - // st(1) is a NaN; st(0) is not. Test if st(1) is signaling. - testb $0x40, 15(%rsp) - jz 4f - fstp %st(1) - ret - -3: // st(0) is a NaN; st(1) may or may not be. - fxch - fucomi %st(0), %st - jp 4f - // st(1) is a NaN; st(0) is not. Test if st(1) is signaling. - testb $0x40, 31(%rsp) - jz 4f - fstp %st(1) - ret - -4: // Both arguments are NaNs, or one is a signaling NaN. - faddp - ret -END(__fminl) -weak_alias (__fminl, fminl) diff --git a/sysdeps/x86_64/fpu/s_fpclassifyl.c b/sysdeps/x86_64/fpu/s_fpclassifyl.c deleted file mode 100644 index 856854b0f5..0000000000 --- a/sysdeps/x86_64/fpu/s_fpclassifyl.c +++ /dev/null @@ -1,2 +0,0 @@ -#include - diff --git a/sysdeps/x86_64/fpu/s_isinfl.c b/sysdeps/x86_64/fpu/s_isinfl.c deleted file mode 100644 index ca818b5e90..0000000000 --- a/sysdeps/x86_64/fpu/s_isinfl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/x86_64/fpu/s_isnanl.c b/sysdeps/x86_64/fpu/s_isnanl.c deleted file mode 100644 index 06e69c3aeb..0000000000 --- a/sysdeps/x86_64/fpu/s_isnanl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/x86_64/fpu/s_llrint.S b/sysdeps/x86_64/fpu/s_llrint.S deleted file mode 100644 index af7bbce585..0000000000 --- a/sysdeps/x86_64/fpu/s_llrint.S +++ /dev/null @@ -1,32 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__llrint) - cvtsd2si %xmm0,%rax - ret -END(__llrint) -weak_alias (__llrint, llrint) -#ifndef __ILP32__ -strong_alias (__llrint, __lrint) -weak_alias (__llrint, lrint) -#endif diff --git a/sysdeps/x86_64/fpu/s_llrintf.S b/sysdeps/x86_64/fpu/s_llrintf.S deleted file mode 100644 index 9edb78bf1d..0000000000 --- a/sysdeps/x86_64/fpu/s_llrintf.S +++ /dev/null @@ -1,32 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__llrintf) - cvtss2si %xmm0,%rax - ret -END(__llrintf) -weak_alias (__llrintf, llrintf) -#ifndef __ILP32__ -strong_alias (__llrintf, __lrintf) -weak_alias (__llrintf, lrintf) -#endif diff --git a/sysdeps/x86_64/fpu/s_llrintl.S b/sysdeps/x86_64/fpu/s_llrintl.S deleted file mode 100644 index e5bbf0106e..0000000000 --- a/sysdeps/x86_64/fpu/s_llrintl.S +++ /dev/null @@ -1,34 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__llrintl) - fldt 8(%rsp) - fistpll -8(%rsp) - fwait - movq -8(%rsp),%rax - ret -END(__llrintl) -weak_alias (__llrintl, llrintl) -#ifndef __ILP32__ -strong_alias (__llrintl, __lrintl) -weak_alias (__llrintl, lrintl) -#endif diff --git a/sysdeps/x86_64/fpu/s_log1pl.S b/sysdeps/x86_64/fpu/s_log1pl.S deleted file mode 100644 index 947e5e4552..0000000000 --- a/sysdeps/x86_64/fpu/s_log1pl.S +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - * - * Adapted for `long double' by Ulrich Drepper . - * Adapted for x86-64 by Andreas Jaeger . - */ - -#include - -RCSID("$NetBSD: s_log1p.S,v 1.7 1995/05/09 00:10:58 jtc Exp $") - - .section .rodata - - .align ALIGNARG(4) - /* The fyl2xp1 can only be used for values in - -1 + sqrt(2) / 2 <= x <= 1 - sqrt(2) / 2 - 0.29 is a safe value. - */ -limit: .tfloat 0.29 - /* Please note: we use a double value here. Since 1.0 has - an exact representation this does not effect the accuracy - but it helps to optimize the code. */ -one: .double 1.0 - -/* - * Use the fyl2xp1 function when the argument is in the range -0.29 to 0.29, - * otherwise fyl2x with the needed extra computation. - */ -#ifdef PIC -#define MO(op) op##(%rip) -#else -#define MO(op) op -#endif - - .text -ENTRY(__log1pl) - fldln2 - - fldt 8(%rsp) - - fxam - fnstsw - fld %st - testb $1, %ah - jnz 3f // in case x is NaN or ±Inf -4: - fabs - fldt MO(limit) - fcompp - fnstsw - andb $1,%ah - jz 2f - - movzwl 8+8(%rsp), %eax - xorb $0x80, %ah - cmpl $0xc040, %eax - jae 5f - - faddl MO(one) -5: fyl2x - ret - -2: fyl2xp1 - ret - -3: testb $4, %ah - jnz 4b // in case x is ±Inf - fstp %st(1) - fstp %st(1) - fadd %st(0) - ret - -END (__log1pl) diff --git a/sysdeps/x86_64/fpu/s_logbl.c b/sysdeps/x86_64/fpu/s_logbl.c deleted file mode 100644 index 4791ba64e8..0000000000 --- a/sysdeps/x86_64/fpu/s_logbl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/x86_64/fpu/s_lrint.S b/sysdeps/x86_64/fpu/s_lrint.S deleted file mode 100644 index dfc31359a0..0000000000 --- a/sysdeps/x86_64/fpu/s_lrint.S +++ /dev/null @@ -1 +0,0 @@ -/* Not needed, see s_llrint.S. */ diff --git a/sysdeps/x86_64/fpu/s_lrintf.S b/sysdeps/x86_64/fpu/s_lrintf.S deleted file mode 100644 index fcdc4dca9a..0000000000 --- a/sysdeps/x86_64/fpu/s_lrintf.S +++ /dev/null @@ -1 +0,0 @@ -/* Not needed, see s_llrintf.S. */ diff --git a/sysdeps/x86_64/fpu/s_lrintl.S b/sysdeps/x86_64/fpu/s_lrintl.S deleted file mode 100644 index ef9c45d00d..0000000000 --- a/sysdeps/x86_64/fpu/s_lrintl.S +++ /dev/null @@ -1 +0,0 @@ -/* Not needed, see s_llrintl.S. */ diff --git a/sysdeps/x86_64/fpu/s_nearbyintl.S b/sysdeps/x86_64/fpu/s_nearbyintl.S deleted file mode 100644 index 31b21a5037..0000000000 --- a/sysdeps/x86_64/fpu/s_nearbyintl.S +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Written by J.T. Conklin . - * Public domain. - */ -/* Adapted for use as nearbyint by Ulrich Drepper . */ - -#include - -ENTRY(__nearbyintl) - fldt 8(%rsp) - fnstenv -28(%rsp) - frndint - fnstsw - andl $0x1, %eax - orl %eax, -24(%rsp) - fldenv -28(%rsp) - ret -END (__nearbyintl) -weak_alias (__nearbyintl, nearbyintl) diff --git a/sysdeps/x86_64/fpu/s_nextafterl.c b/sysdeps/x86_64/fpu/s_nextafterl.c deleted file mode 100644 index f59f16848f..0000000000 --- a/sysdeps/x86_64/fpu/s_nextafterl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/x86_64/fpu/s_nexttoward.c b/sysdeps/x86_64/fpu/s_nexttoward.c deleted file mode 100644 index aee2bb5895..0000000000 --- a/sysdeps/x86_64/fpu/s_nexttoward.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/x86_64/fpu/s_nexttowardf.c b/sysdeps/x86_64/fpu/s_nexttowardf.c deleted file mode 100644 index 55e95f6916..0000000000 --- a/sysdeps/x86_64/fpu/s_nexttowardf.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/x86_64/fpu/s_rintl.c b/sysdeps/x86_64/fpu/s_rintl.c deleted file mode 100644 index 1cad42e921..0000000000 --- a/sysdeps/x86_64/fpu/s_rintl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/x86_64/fpu/s_scalbnl.S b/sysdeps/x86_64/fpu/s_scalbnl.S deleted file mode 100644 index 6c7683c32b..0000000000 --- a/sysdeps/x86_64/fpu/s_scalbnl.S +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Written by J.T. Conklin . - * Changes for long double by Ulrich Drepper - * Changes for x86-64 by Andreas Jaeger =09 - * Public domain. - */ - -#include - -ENTRY(__scalbnl) - movl %edi,-4(%rsp) - fildl -4(%rsp) - fldt 8(%rsp) - fscale - fstp %st(1) - ret -END (__scalbnl) diff --git a/sysdeps/x86_64/fpu/s_signbit.S b/sysdeps/x86_64/fpu/s_signbit.S deleted file mode 100644 index a24757cd48..0000000000 --- a/sysdeps/x86_64/fpu/s_signbit.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Return nonzero value if number is negative. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__signbit) - pmovmskb %xmm0, %eax - andl $0x80, %eax - ret -END(__signbit) diff --git a/sysdeps/x86_64/fpu/s_signbitf.S b/sysdeps/x86_64/fpu/s_signbitf.S deleted file mode 100644 index 7739424bf6..0000000000 --- a/sysdeps/x86_64/fpu/s_signbitf.S +++ /dev/null @@ -1,26 +0,0 @@ -/* Return nonzero value if number is negative. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__signbitf) - pmovmskb %xmm0, %eax - andl $0x8, %eax - ret -END(__signbitf) diff --git a/sysdeps/x86_64/fpu/s_significandl.c b/sysdeps/x86_64/fpu/s_significandl.c deleted file mode 100644 index a4ad986164..0000000000 --- a/sysdeps/x86_64/fpu/s_significandl.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/x86_64/fpu/s_sincosf.S b/sysdeps/x86_64/fpu/s_sincosf.S deleted file mode 100644 index e6ed81ed91..0000000000 --- a/sysdeps/x86_64/fpu/s_sincosf.S +++ /dev/null @@ -1,564 +0,0 @@ -/* Optimized sincosf function. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define __need_Emath -#include - -/* Short algorithm description: - * - * 1) if |x|==0: sin(x)=x, - * cos(x)=1. - * 2) if |x|<2^-27: sin(x)=x-x*DP_SMALL, raising underflow only when needed, - * cos(x)=1-|x|. - * 3) if |x|<2^-5 : sin(x)=x+x*x^2*DP_SIN2_0+x^5*DP_SIN2_1, - * cos(x)=1+1*x^2*DP_COS2_0+x^5*DP_COS2_1 - * 4) if |x|< Pi/4: sin(x)=x+x*x^2*(S0+x^2*(S1+x^2*(S2+x^2*(S3+x^2*S4)))), - * cos(x)=1+1*x^2*(C0+x^2*(C1+x^2*(C2+x^2*(C3+x^2*C4)))). - * 5) if |x| < 9*Pi/4: - * 5.1) Range reduction: - * k=trunc(|x|/(Pi/4)), j=(k+1)&0x0e, n=k+1, t=|x|-j*Pi/4. - * 5.2) Reconstruction: - * sign_sin = sign(x) * (-1.0)^(( n >>2)&1) - * sign_cos = (-1.0)^(((n+2)>>2)&1) - * poly_sin = ((((S4*t^2 + S3)*t^2 + S2)*t^2 + S1)*t^2 + S0)*t^2*t+t - * poly_cos = ((((C4*t^2 + C3)*t^2 + C2)*t^2 + C1)*t^2 + C0)*t^2*s+s - * if(n&2 != 0) { - * using cos(t) and sin(t) polynomials for |t|= 2^23, very large args: - * 7.1) Range reduction: - * k=trunc(|x|/(Pi/4)), j=(k+1)&0xfffffffe, n=k+1, t=|x|-j*Pi/4. - * 7.2) Reconstruction same as (5.2). - * 8) if x is Inf, return x-x, and set errno=EDOM. - * 9) if x is NaN, return x-x. - * - * Special cases: - * sin/cos(+-0) = +-0/1 not raising inexact/underflow, - * sin/cos(subnormal) raises inexact/underflow, - * sin/cos(min_normalized) raises inexact/underflow, - * sin/cos(normalized) raises inexact, - * sin/cos(Inf) = NaN, raises invalid, sets errno to EDOM, - * sin/cos(NaN) = NaN. - */ - -# define ARG_SIN_PTR %rdi -# define ARG_COS_PTR %rsi - - .text -ENTRY(__sincosf) - /* Input: %xmm0 contains single precision argument x */ - /* %rdi points to sin result */ - /* %rsi points to cos result */ - - movd %xmm0, %eax /* Bits of x */ - movaps %xmm0, %xmm7 /* Copy of x */ - cvtss2sd %xmm0, %xmm0 /* DP x */ - movss L(SP_ABS_MASK)(%rip), %xmm3 - movl %eax, %r8d /* Copy of x bits */ - andl $0x7fffffff, %eax /* |x| */ - - cmpl $0x3f490fdb, %eax /* |x|=Pi/4 */ - andps %xmm7, %xmm3 /* SP |x| */ - andpd L(DP_ABS_MASK)(%rip),%xmm0 /* DP |x| */ - movss L(SP_INVPIO4)(%rip), %xmm2 /* SP 1/(Pi/4) */ - - cmpl $0x40e231d6, %eax /* |x|<9*Pi/4 ? */ - jae L(large_args) - - /* Here if Pi/4<=|x|<9*Pi/4 */ - mulss %xmm3, %xmm2 /* SP |x|/(Pi/4) */ - movl %r8d, %ecx /* Load x */ - cvttss2si %xmm2, %eax /* k, number of Pi/4 in x */ - lea L(PIO4J)(%rip), %r9 - shrl $29, %ecx /* (sign of x) << 2 */ - addl $1, %eax /* k+1 */ - movl $0x0e, %edx - andl %eax, %edx /* j = (k+1)&0x0e */ - subsd (%r9,%rdx,8), %xmm0 /* t = |x| - j * Pi/4 */ - -L(reconstruction): - /* Input: %eax=n, %xmm0=t, %ecx=sign(x) */ - - movaps %xmm0, %xmm4 /* t */ - movhpd L(DP_ONES)(%rip), %xmm4 /* 1|t */ - mulsd %xmm0, %xmm0 /* y=t^2 */ - movl $2, %edx - unpcklpd %xmm0, %xmm0 /* y|y */ - addl %eax, %edx /* k+2 */ - movaps %xmm0, %xmm1 /* y|y */ - mulpd %xmm0, %xmm0 /* z=t^4|z=t^4 */ - - movaps L(DP_SC4)(%rip), %xmm2 /* S4 */ - mulpd %xmm0, %xmm2 /* z*S4 */ - movaps L(DP_SC3)(%rip), %xmm3 /* S3 */ - mulpd %xmm0, %xmm3 /* z*S3 */ - xorl %eax, %ecx /* (sign_x ^ (k>>2))<<2 */ - addpd L(DP_SC2)(%rip), %xmm2 /* S2+z*S4 */ - mulpd %xmm0, %xmm2 /* z*(S2+z*S4) */ - shrl $2, %edx /* (k+2)>>2 */ - addpd L(DP_SC1)(%rip), %xmm3 /* S1+z*S3 */ - mulpd %xmm0, %xmm3 /* z*(S1+z*S3) */ - shrl $2, %ecx /* sign_x ^ k>>2 */ - addpd L(DP_SC0)(%rip), %xmm2 /* S0+z*(S2+z*S4) */ - andl $1, %edx /* sign_cos = ((k+2)>>2)&1 */ - mulpd %xmm1, %xmm2 /* y*(S0+z*(S2+z*S4)) */ - andl $1, %ecx /* sign_sin = sign_x ^ ((k>>2)&1) */ - addpd %xmm2, %xmm3 /* y*(S0+y*(S1+y*(S2+y*(S3+y*S4)))) */ - lea L(DP_ONES)(%rip), %r9 - mulpd %xmm4, %xmm3 /*t*y*(S0+y*(S1+y*(S2+y*(S3+y*S4))))*/ - testl $2, %eax /* n&2 != 0 ? */ - addpd %xmm4, %xmm3 /*t+t*y*(S0+y*(S1+y*(S2+y*(S3+y*S4))*/ - jnz L(sin_result_sin_poly) - -/*L(sin_result_cos_poly):*/ - /* - * Here if - * cos(x) = poly_sin * sign_cos - * sin(x) = poly_cos * sign_sin - */ - movsd (%r9,%rcx,8), %xmm4 /* 0|sign_sin */ - movhpd (%r9,%rdx,8), %xmm4 /* sign_cos|sign_sin */ - mulpd %xmm4, %xmm3 /* result_cos|result_sin */ - cvtpd2ps %xmm3, %xmm0 /* SP results */ - movss %xmm0, (ARG_SIN_PTR) /* store sin(x) from xmm0[0] */ - shufps $1, %xmm0, %xmm0 /* move cos(x) to xmm0[0] */ - movss %xmm0, (ARG_COS_PTR) /* store cos(x) */ - ret - - .p2align 4 -L(sin_result_sin_poly): - /* - * Here if - * sin(x) = poly_sin * sign_sin - * cos(x) = poly_cos * sign_cos - */ - movsd (%r9,%rdx,8), %xmm4 /* 0|sign_cos */ - movhpd (%r9,%rcx,8), %xmm4 /* sign_sin|sign_cos */ - mulpd %xmm4, %xmm3 /* result_sin|result_cos */ - cvtpd2ps %xmm3, %xmm0 /* SP results */ - movss %xmm0, (ARG_COS_PTR) /* store cos(x) from xmm0[0] */ - shufps $1, %xmm0, %xmm0 /* move sin(x) to xmm0[0] */ - movss %xmm0, (ARG_SIN_PTR) /* store sin(x) */ - ret - - .p2align 4 -L(large_args): - /* Here if |x|>=9*Pi/4 */ - cmpl $0x7f800000, %eax /* x is Inf or NaN ? */ - jae L(arg_inf_or_nan) - - /* Here if finite |x|>=9*Pi/4 */ - cmpl $0x4b000000, %eax /* |x|<2^23 ? */ - jae L(very_large_args) - - /* Here if 9*Pi/4<=|x|<2^23 */ - movsd L(DP_INVPIO4)(%rip), %xmm1 /* 1/(Pi/4) */ - mulsd %xmm0, %xmm1 /* |x|/(Pi/4) */ - cvttsd2si %xmm1, %eax /* k=trunc(|x|/(Pi/4)) */ - addl $1, %eax /* k+1 */ - movl %eax, %edx - andl $0xfffffffe, %edx /* j=(k+1)&0xfffffffe */ - cvtsi2sdl %edx, %xmm4 /* DP j */ - movl %r8d, %ecx /* Load x */ - movsd L(DP_PIO4HI)(%rip), %xmm2 /* -PIO4HI = high part of -Pi/4 */ - shrl $29, %ecx /* (sign of x) << 2 */ - mulsd %xmm4, %xmm2 /* -j*PIO4HI */ - movsd L(DP_PIO4LO)(%rip), %xmm3 /* -PIO4LO = low part of -Pi/4 */ - addsd %xmm2, %xmm0 /* |x| - j*PIO4HI */ - mulsd %xmm3, %xmm4 /* j*PIO4LO */ - addsd %xmm4, %xmm0 /* t = |x| - j*PIO4HI - j*PIO4LO */ - jmp L(reconstruction) - - .p2align 4 -L(very_large_args): - /* Here if finite |x|>=2^23 */ - - /* bitpos = (ix>>23) - BIAS_32 + 59; */ - shrl $23, %eax /* eb = biased exponent of x */ - subl $68, %eax /* bitpos=eb-0x7f+59, where 0x7f */ - /*is exponent bias */ - movl $28, %ecx /* %cl=28 */ - movl %eax, %edx /* bitpos copy */ - - /* j = bitpos/28; */ - div %cl /* j in register %al=%ax/%cl */ - movapd %xmm0, %xmm3 /* |x| */ - andl $0xff, %eax /* clear unneeded remainder from %ah*/ - - imull $28, %eax, %ecx /* j*28 */ - lea L(_FPI)(%rip), %r9 - movsd L(DP_HI_MASK)(%rip), %xmm4 /* DP_HI_MASK */ - movapd %xmm0, %xmm5 /* |x| */ - mulsd -16(%r9,%rax,8), %xmm3 /* tmp3 = FPI[j-2]*|x| */ - movapd %xmm0, %xmm1 /* |x| */ - mulsd -8(%r9,%rax,8), %xmm5 /* tmp2 = FPI[j-1]*|x| */ - mulsd (%r9,%rax,8), %xmm0 /* tmp0 = FPI[j]*|x| */ - addl $19, %ecx /* j*28+19 */ - mulsd 8(%r9,%rax,8), %xmm1 /* tmp1 = FPI[j+1]*|x| */ - cmpl %ecx, %edx /* bitpos>=j*28+19 ? */ - jl L(very_large_skip1) - - /* Here if bitpos>=j*28+19 */ - andpd %xmm3, %xmm4 /* HI(tmp3) */ - subsd %xmm4, %xmm3 /* tmp3 = tmp3 - HI(tmp3) */ -L(very_large_skip1): - - movsd L(DP_2POW52)(%rip), %xmm6 - movapd %xmm5, %xmm2 /* tmp2 copy */ - addsd %xmm3, %xmm5 /* tmp5 = tmp3 + tmp2 */ - movl $1, %edx - addsd %xmm5, %xmm6 /* tmp6 = tmp5 + 2^52 */ - movsd 8+L(DP_2POW52)(%rip), %xmm4 - movd %xmm6, %eax /* k = I64_LO(tmp6); */ - addsd %xmm6, %xmm4 /* tmp4 = tmp6 - 2^52 */ - movl %r8d, %ecx /* Load x */ - comisd %xmm5, %xmm4 /* tmp4 > tmp5 ? */ - jbe L(very_large_skip2) - - /* Here if tmp4 > tmp5 */ - subl $1, %eax /* k-- */ - addsd 8+L(DP_ONES)(%rip), %xmm4 /* tmp4 -= 1.0 */ -L(very_large_skip2): - - andl %eax, %edx /* k&1 */ - lea L(DP_ZERONE)(%rip), %r9 - subsd %xmm4, %xmm3 /* tmp3 -= tmp4 */ - addsd (%r9,%rdx,8), %xmm3 /* t = DP_ZERONE[k&1] + tmp3 */ - addsd %xmm2, %xmm3 /* t += tmp2 */ - shrl $29, %ecx /* (sign of x) << 2 */ - addsd %xmm3, %xmm0 /* t += tmp0 */ - addl $1, %eax /* n=k+1 */ - addsd %xmm1, %xmm0 /* t += tmp1 */ - mulsd L(DP_PIO4)(%rip), %xmm0 /* t *= PI04 */ - - jmp L(reconstruction) /* end of very_large_args peth */ - - .p2align 4 -L(arg_less_pio4): - /* Here if |x|. */ - -#include -#define __need_Emath -#include - -/* Short algorithm description: - * - * 1) if |x| == 0: return x. - * 2) if |x| < 2^-27: return x-x*DP_SMALL, raise underflow only when needed. - * 3) if |x| < 2^-5 : return x+x^3*DP_SIN2_0+x^5*DP_SIN2_1. - * 4) if |x| < Pi/4: return x+x^3*(S0+x^2*(S1+x^2*(S2+x^2*(S3+x^2*S4)))). - * 5) if |x| < 9*Pi/4: - * 5.1) Range reduction: k=trunc(|x|/(Pi/4)), j=(k+1)&0x0e, n=k+1, - * t=|x|-j*Pi/4. - * 5.2) Reconstruction: - * s = sign(x) * (-1.0)^((n>>2)&1) - * if(n&2 != 0) { - * using cos(t) polynomial for |t|= 2^23, very large args: - * 7.1) Range reduction: k=trunc(|x|/(Pi/4)), j=(k+1)&0xfffffffe, n=k+1, - * t=|x|-j*Pi/4. - * 7.2) Reconstruction same as (5.2). - * 8) if x is Inf, return x-x, and set errno=EDOM. - * 9) if x is NaN, return x-x. - * - * Special cases: - * sin(+-0) = +-0 not raising inexact/underflow, - * sin(subnormal) raises inexact/underflow, - * sin(min_normalized) raises inexact/underflow, - * sin(normalized) raises inexact, - * sin(Inf) = NaN, raises invalid, sets errno to EDOM, - * sin(NaN) = NaN. - */ - - .text -ENTRY(__sinf) - /* Input: single precision x in %xmm0 */ - - movd %xmm0, %eax /* Bits of x */ - movaps %xmm0, %xmm7 /* Copy of x */ - cvtss2sd %xmm0, %xmm0 /* DP x */ - movss L(SP_ABS_MASK)(%rip), %xmm3 - movl %eax, %edi /* Copy of x bits */ - andl $0x7fffffff, %eax /* |x| */ - - cmpl $0x3f490fdb, %eax /* |x|=Pi/4 */ - andps %xmm7, %xmm3 /* SP |x| */ - andpd L(DP_ABS_MASK)(%rip),%xmm0 /* DP |x| */ - movss L(SP_INVPIO4)(%rip), %xmm2 /* SP 1/(Pi/4) */ - - cmpl $0x40e231d6, %eax /* |x|<9*Pi/4? */ - jae L(large_args) - - /* Here if Pi/4<=|x|<9*Pi/4 */ - mulss %xmm3, %xmm2 /* SP |x|/(Pi/4) */ - movl %edi, %ecx /* Load x */ - cvttss2si %xmm2, %eax /* k, number of Pi/4 in x */ - lea L(PIO4J)(%rip), %rsi - shrl $31, %ecx /* sign of x */ - addl $1, %eax /* k+1 */ - movl $0x0e, %edx - andl %eax, %edx /* j = (k+1)&0x0e */ - subsd (%rsi,%rdx,8), %xmm0 /* t = |x| - j * Pi/4 */ - -L(reconstruction): - /* Input: %eax=n, %xmm0=t, %ecx=sign(x) */ - testl $2, %eax /* n&2 != 0? */ - jz L(sin_poly) - -/*L(cos_poly):*/ - /* Here if sin(x) calculated using cos(t) polynomial for |t|>2)&1) - * result = s * (1.0+t^2*(C0+t^2*(C1+t^2*(C2+t^2*(C3+t^2*C4))))) - */ - shrl $2, %eax /* n>>2 */ - mulsd %xmm0, %xmm0 /* y=t^2 */ - andl $1, %eax /* (n>>2)&1 */ - movaps %xmm0, %xmm1 /* y */ - mulsd %xmm0, %xmm0 /* z=t^4 */ - - movsd L(DP_C4)(%rip), %xmm4 /* C4 */ - mulsd %xmm0, %xmm4 /* z*C4 */ - xorl %eax, %ecx /* (-1.0)^((n>>2)&1) XOR sign(x) */ - movsd L(DP_C3)(%rip), %xmm3 /* C3 */ - mulsd %xmm0, %xmm3 /* z*C3 */ - lea L(DP_ONES)(%rip), %rsi - addsd L(DP_C2)(%rip), %xmm4 /* C2+z*C4 */ - mulsd %xmm0, %xmm4 /* z*(C2+z*C4) */ - addsd L(DP_C1)(%rip), %xmm3 /* C1+z*C3 */ - mulsd %xmm0, %xmm3 /* z*(C1+z*C3) */ - addsd L(DP_C0)(%rip), %xmm4 /* C0+z*(C2+z*C4) */ - mulsd %xmm1, %xmm4 /* y*(C0+z*(C2+z*C4)) */ - - /* y*(C0+y*(C1+y*(C2+y*(C3+y*C4)))) */ - addsd %xmm4, %xmm3 - /* 1.0+y*(C0+y*(C1+y*(C2+y*(C3+y*C4)))) */ - addsd L(DP_ONES)(%rip), %xmm3 - - mulsd (%rsi,%rcx,8), %xmm3 /* DP result */ - cvtsd2ss %xmm3, %xmm0 /* SP result */ - ret - - .p2align 4 -L(sin_poly): - /* Here if sin(x) calculated using sin(t) polynomial for |t|>2)&1) - * result = s * t * (1.0+t^2*(S0+t^2*(S1+t^2*(S2+t^2*(S3+t^2*S4))))) - */ - - movaps %xmm0, %xmm4 /* t */ - shrl $2, %eax /* n>>2 */ - mulsd %xmm0, %xmm0 /* y=t^2 */ - andl $1, %eax /* (n>>2)&1 */ - movaps %xmm0, %xmm1 /* y */ - xorl %eax, %ecx /* (-1.0)^((n>>2)&1) XOR sign(x) */ - mulsd %xmm0, %xmm0 /* z=t^4 */ - - movsd L(DP_S4)(%rip), %xmm2 /* S4 */ - mulsd %xmm0, %xmm2 /* z*S4 */ - movsd L(DP_S3)(%rip), %xmm3 /* S3 */ - mulsd %xmm0, %xmm3 /* z*S3 */ - lea L(DP_ONES)(%rip), %rsi - addsd L(DP_S2)(%rip), %xmm2 /* S2+z*S4 */ - mulsd %xmm0, %xmm2 /* z*(S2+z*S4) */ - addsd L(DP_S1)(%rip), %xmm3 /* S1+z*S3 */ - mulsd %xmm0, %xmm3 /* z*(S1+z*S3) */ - addsd L(DP_S0)(%rip), %xmm2 /* S0+z*(S2+z*S4) */ - mulsd %xmm1, %xmm2 /* y*(S0+z*(S2+z*S4)) */ - /* t*s, where s = sign(x) * (-1.0)^((n>>2)&1) */ - mulsd (%rsi,%rcx,8), %xmm4 - /* y*(S0+y*(S1+y*(S2+y*(S3+y*S4)))) */ - addsd %xmm2, %xmm3 - /* t*s*y*(S0+y*(S1+y*(S2+y*(S3+y*S4)))) */ - mulsd %xmm4, %xmm3 - /* t*s*(1.0+y*(S0+y*(S1+y*(S2+y*(S3+y*S4)))) */ - addsd %xmm4, %xmm3 - cvtsd2ss %xmm3, %xmm0 /* SP result */ - ret - - .p2align 4 -L(large_args): - /* Here if |x|>=9*Pi/4 */ - cmpl $0x7f800000, %eax /* x is Inf or NaN? */ - jae L(arg_inf_or_nan) - - /* Here if finite |x|>=9*Pi/4 */ - cmpl $0x4b000000, %eax /* |x|<2^23? */ - jae L(very_large_args) - - /* Here if 9*Pi/4<=|x|<2^23 */ - movsd L(DP_INVPIO4)(%rip), %xmm1 /* 1/(Pi/4) */ - mulsd %xmm0, %xmm1 /* |x|/(Pi/4) */ - cvttsd2si %xmm1, %eax /* k=trunc(|x|/(Pi/4)) */ - addl $1, %eax /* k+1 */ - movl %eax, %edx - andl $0xfffffffe, %edx /* j=(k+1)&0xfffffffe */ - cvtsi2sdl %edx, %xmm4 /* DP j */ - movl %edi, %ecx /* Load x */ - movsd L(DP_PIO4HI)(%rip), %xmm2 /* -PIO4HI = high part of -Pi/4 */ - shrl $31, %ecx /* sign bit of x */ - mulsd %xmm4, %xmm2 /* -j*PIO4HI */ - movsd L(DP_PIO4LO)(%rip), %xmm3 /* -PIO4LO = low part of -Pi/4 */ - addsd %xmm2, %xmm0 /* |x| - j*PIO4HI */ - mulsd %xmm3, %xmm4 /* j*PIO4LO */ - addsd %xmm4, %xmm0 /* t = |x| - j*PIO4HI - j*PIO4LO */ - jmp L(reconstruction) - - .p2align 4 -L(very_large_args): - /* Here if finite |x|>=2^23 */ - - /* bitpos = (ix>>23) - BIAS_32 + 59; */ - shrl $23, %eax /* eb = biased exponent of x */ - /* bitpos = eb - 0x7f + 59, where 0x7f is exponent bias */ - subl $68, %eax - movl $28, %ecx /* %cl=28 */ - movl %eax, %edx /* bitpos copy */ - - /* j = bitpos/28; */ - div %cl /* j in register %al=%ax/%cl */ - movapd %xmm0, %xmm3 /* |x| */ - /* clear unneeded remainder from %ah */ - andl $0xff, %eax - - imull $28, %eax, %ecx /* j*28 */ - lea L(_FPI)(%rip), %rsi - movsd L(DP_HI_MASK)(%rip), %xmm4 /* DP_HI_MASK */ - movapd %xmm0, %xmm5 /* |x| */ - mulsd -16(%rsi,%rax,8), %xmm3 /* tmp3 = FPI[j-2]*|x| */ - movapd %xmm0, %xmm1 /* |x| */ - mulsd -8(%rsi,%rax,8), %xmm5 /* tmp2 = FPI[j-1]*|x| */ - mulsd (%rsi,%rax,8), %xmm0 /* tmp0 = FPI[j]*|x| */ - addl $19, %ecx /* j*28+19 */ - mulsd 8(%rsi,%rax,8), %xmm1 /* tmp1 = FPI[j+1]*|x| */ - cmpl %ecx, %edx /* bitpos>=j*28+19? */ - jl L(very_large_skip1) - - /* Here if bitpos>=j*28+19 */ - andpd %xmm3, %xmm4 /* HI(tmp3) */ - subsd %xmm4, %xmm3 /* tmp3 = tmp3 - HI(tmp3) */ -L(very_large_skip1): - - movsd L(DP_2POW52)(%rip), %xmm6 - movapd %xmm5, %xmm2 /* tmp2 copy */ - addsd %xmm3, %xmm5 /* tmp5 = tmp3 + tmp2 */ - movl $1, %edx - addsd %xmm5, %xmm6 /* tmp6 = tmp5 + 2^52 */ - movsd 8+L(DP_2POW52)(%rip), %xmm4 - movd %xmm6, %eax /* k = I64_LO(tmp6); */ - addsd %xmm6, %xmm4 /* tmp4 = tmp6 - 2^52 */ - movl %edi, %ecx /* Load x */ - comisd %xmm5, %xmm4 /* tmp4 > tmp5? */ - jbe L(very_large_skip2) - - /* Here if tmp4 > tmp5 */ - subl $1, %eax /* k-- */ - addsd 8+L(DP_ONES)(%rip), %xmm4 /* tmp4 -= 1.0 */ -L(very_large_skip2): - - andl %eax, %edx /* k&1 */ - lea L(DP_ZERONE)(%rip), %rsi - subsd %xmm4, %xmm3 /* tmp3 -= tmp4 */ - addsd (%rsi,%rdx,8), %xmm3 /* t = DP_ZERONE[k&1] + tmp3 */ - addsd %xmm2, %xmm3 /* t += tmp2 */ - shrl $31, %ecx /* sign of x */ - addsd %xmm3, %xmm0 /* t += tmp0 */ - addl $1, %eax /* n=k+1 */ - addsd %xmm1, %xmm0 /* t += tmp1 */ - mulsd L(DP_PIO4)(%rip), %xmm0 /* t *= PI04 */ - - jmp L(reconstruction) /* end of very_large_args peth */ - - .p2align 4 -L(arg_less_pio4): - /* Here if |x|, 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__truncl) - fldt 8(%rsp) - fnstenv -28(%rsp) - movl $0xc00, %edx - orl -28(%rsp), %edx - movl %edx, -32(%rsp) - fldcw -32(%rsp) - frndint - fnstsw - andl $0x1, %eax - orl %eax, -24(%rsp) - fldenv -28(%rsp) - ret -END(__truncl) -weak_alias (__truncl, truncl) diff --git a/sysdeps/x86_64/fpu/svml_d_cos2_core.S b/sysdeps/x86_64/fpu/svml_d_cos2_core.S deleted file mode 100644 index db4fd3f62f..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_cos2_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function cos vectorized with SSE2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVbN2v_cos) -WRAPPER_IMPL_SSE2 cos -END (_ZGVbN2v_cos) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVbN2v_cos) -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_cos4_core.S b/sysdeps/x86_64/fpu/svml_d_cos4_core.S deleted file mode 100644 index a30f1c43f5..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_cos4_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function cos vectorized with AVX2, wrapper version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVdN4v_cos) -WRAPPER_IMPL_AVX _ZGVbN2v_cos -END (_ZGVdN4v_cos) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVdN4v_cos) -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_cos4_core_avx.S b/sysdeps/x86_64/fpu/svml_d_cos4_core_avx.S deleted file mode 100644 index c6ce6fa1a4..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_cos4_core_avx.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function cos vectorized in AVX ISA as wrapper to SSE4 ISA version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVcN4v_cos) -WRAPPER_IMPL_AVX _ZGVbN2v_cos -END (_ZGVcN4v_cos) diff --git a/sysdeps/x86_64/fpu/svml_d_cos8_core.S b/sysdeps/x86_64/fpu/svml_d_cos8_core.S deleted file mode 100644 index 5432bc701e..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_cos8_core.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function cos vectorized with AVX-512, wrapper to AVX2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVeN8v_cos) -WRAPPER_IMPL_AVX512 _ZGVdN4v_cos -END (_ZGVeN8v_cos) diff --git a/sysdeps/x86_64/fpu/svml_d_exp2_core.S b/sysdeps/x86_64/fpu/svml_d_exp2_core.S deleted file mode 100644 index 92b328331d..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_exp2_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function exp vectorized with SSE2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVbN2v_exp) -WRAPPER_IMPL_SSE2 __exp_finite -END (_ZGVbN2v_exp) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVbN2v_exp) -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_exp4_core.S b/sysdeps/x86_64/fpu/svml_d_exp4_core.S deleted file mode 100644 index e062263d7a..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_exp4_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function exp vectorized with AVX2, wrapper version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVdN4v_exp) -WRAPPER_IMPL_AVX _ZGVbN2v_exp -END (_ZGVdN4v_exp) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVdN4v_exp) -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_exp4_core_avx.S b/sysdeps/x86_64/fpu/svml_d_exp4_core_avx.S deleted file mode 100644 index 21ae29d330..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_exp4_core_avx.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function exp vectorized in AVX ISA as wrapper to SSE4 ISA version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVcN4v_exp) -WRAPPER_IMPL_AVX _ZGVbN2v_exp -END (_ZGVcN4v_exp) diff --git a/sysdeps/x86_64/fpu/svml_d_exp8_core.S b/sysdeps/x86_64/fpu/svml_d_exp8_core.S deleted file mode 100644 index 28bfa98dde..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_exp8_core.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function exp vectorized with AVX-512. Wrapper to AVX2 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVeN8v_exp) -WRAPPER_IMPL_AVX512 _ZGVdN4v_exp -END (_ZGVeN8v_exp) diff --git a/sysdeps/x86_64/fpu/svml_d_exp_data.S b/sysdeps/x86_64/fpu/svml_d_exp_data.S deleted file mode 100644 index 521537e3f6..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_exp_data.S +++ /dev/null @@ -1,1088 +0,0 @@ -/* Data for vector function exp. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "svml_d_exp_data.h" - - .section .rodata, "a" - .align 64 - -/* Data table for vector implementations of function exp. - * The table may contain polynomial, reduction, lookup - * coefficients and other constants obtained through different - * methods of research and experimental work. */ - .globl __svml_dexp_data -__svml_dexp_data: - -/* Lookup table of 2^(j/2^K): */ -.if .-__svml_dexp_data != __dbT -.err -.endif - .quad 0x3ff0000000000000 - .quad 0x3ff002c605e2e8cf - .quad 0x3ff0058c86da1c0a - .quad 0x3ff0085382faef83 - .quad 0x3ff00b1afa5abcbf - .quad 0x3ff00de2ed0ee0f5 - .quad 0x3ff010ab5b2cbd11 - .quad 0x3ff0137444c9b5b5 - .quad 0x3ff0163da9fb3335 - .quad 0x3ff019078ad6a19f - .quad 0x3ff01bd1e77170b4 - .quad 0x3ff01e9cbfe113ef - .quad 0x3ff02168143b0281 - .quad 0x3ff02433e494b755 - .quad 0x3ff027003103b10e - .quad 0x3ff029ccf99d720a - .quad 0x3ff02c9a3e778061 - .quad 0x3ff02f67ffa765e6 - .quad 0x3ff032363d42b027 - .quad 0x3ff03504f75ef071 - .quad 0x3ff037d42e11bbcc - .quad 0x3ff03aa3e170aafe - .quad 0x3ff03d7411915a8a - .quad 0x3ff04044be896ab6 - .quad 0x3ff04315e86e7f85 - .quad 0x3ff045e78f5640b9 - .quad 0x3ff048b9b35659d8 - .quad 0x3ff04b8c54847a28 - .quad 0x3ff04e5f72f654b1 - .quad 0x3ff051330ec1a03f - .quad 0x3ff0540727fc1762 - .quad 0x3ff056dbbebb786b - .quad 0x3ff059b0d3158574 - .quad 0x3ff05c866520045b - .quad 0x3ff05f5c74f0bec2 - .quad 0x3ff06233029d8216 - .quad 0x3ff0650a0e3c1f89 - .quad 0x3ff067e197e26c14 - .quad 0x3ff06ab99fa6407c - .quad 0x3ff06d92259d794d - .quad 0x3ff0706b29ddf6de - .quad 0x3ff07344ac7d9d51 - .quad 0x3ff0761ead925493 - .quad 0x3ff078f92d32085d - .quad 0x3ff07bd42b72a836 - .quad 0x3ff07eafa86a2771 - .quad 0x3ff0818ba42e7d30 - .quad 0x3ff084681ed5a462 - .quad 0x3ff0874518759bc8 - .quad 0x3ff08a22912465f2 - .quad 0x3ff08d0088f8093f - .quad 0x3ff08fdf00068fe2 - .quad 0x3ff092bdf66607e0 - .quad 0x3ff0959d6c2c830d - .quad 0x3ff0987d61701716 - .quad 0x3ff09b5dd646dd77 - .quad 0x3ff09e3ecac6f383 - .quad 0x3ff0a1203f067a63 - .quad 0x3ff0a402331b9715 - .quad 0x3ff0a6e4a71c726e - .quad 0x3ff0a9c79b1f3919 - .quad 0x3ff0acab0f3a1b9c - .quad 0x3ff0af8f03834e52 - .quad 0x3ff0b27378110974 - .quad 0x3ff0b5586cf9890f - .quad 0x3ff0b83de2530d11 - .quad 0x3ff0bb23d833d93f - .quad 0x3ff0be0a4eb2353b - .quad 0x3ff0c0f145e46c85 - .quad 0x3ff0c3d8bde0ce7a - .quad 0x3ff0c6c0b6bdae53 - .quad 0x3ff0c9a93091632a - .quad 0x3ff0cc922b7247f7 - .quad 0x3ff0cf7ba776bb94 - .quad 0x3ff0d265a4b520ba - .quad 0x3ff0d5502343de02 - .quad 0x3ff0d83b23395dec - .quad 0x3ff0db26a4ac0ed5 - .quad 0x3ff0de12a7b26300 - .quad 0x3ff0e0ff2c62d096 - .quad 0x3ff0e3ec32d3d1a2 - .quad 0x3ff0e6d9bb1be415 - .quad 0x3ff0e9c7c55189c6 - .quad 0x3ff0ecb6518b4874 - .quad 0x3ff0efa55fdfa9c5 - .quad 0x3ff0f294f0653b45 - .quad 0x3ff0f58503328e6d - .quad 0x3ff0f875985e389b - .quad 0x3ff0fb66affed31b - .quad 0x3ff0fe584a2afb21 - .quad 0x3ff1014a66f951ce - .quad 0x3ff1043d06807c2f - .quad 0x3ff1073028d7233e - .quad 0x3ff10a23ce13f3e2 - .quad 0x3ff10d17f64d9ef1 - .quad 0x3ff1100ca19ad92f - .quad 0x3ff11301d0125b51 - .quad 0x3ff115f781cae1fa - .quad 0x3ff118edb6db2dc1 - .quad 0x3ff11be46f5a032c - .quad 0x3ff11edbab5e2ab6 - .quad 0x3ff121d36afe70c9 - .quad 0x3ff124cbae51a5c8 - .quad 0x3ff127c4756e9e05 - .quad 0x3ff12abdc06c31cc - .quad 0x3ff12db78f613d5b - .quad 0x3ff130b1e264a0e9 - .quad 0x3ff133acb98d40a2 - .quad 0x3ff136a814f204ab - .quad 0x3ff139a3f4a9d922 - .quad 0x3ff13ca058cbae1e - .quad 0x3ff13f9d416e77af - .quad 0x3ff1429aaea92de0 - .quad 0x3ff14598a092ccb7 - .quad 0x3ff1489717425438 - .quad 0x3ff14b9612cec861 - .quad 0x3ff14e95934f312e - .quad 0x3ff1519598da9a9a - .quad 0x3ff154962388149e - .quad 0x3ff15797336eb333 - .quad 0x3ff15a98c8a58e51 - .quad 0x3ff15d9ae343c1f2 - .quad 0x3ff1609d83606e12 - .quad 0x3ff163a0a912b6ac - .quad 0x3ff166a45471c3c2 - .quad 0x3ff169a88594c157 - .quad 0x3ff16cad3c92df73 - .quad 0x3ff16fb279835224 - .quad 0x3ff172b83c7d517b - .quad 0x3ff175be85981992 - .quad 0x3ff178c554eaea89 - .quad 0x3ff17bccaa8d0888 - .quad 0x3ff17ed48695bbc0 - .quad 0x3ff181dce91c506a - .quad 0x3ff184e5d23816c9 - .quad 0x3ff187ef4200632b - .quad 0x3ff18af9388c8dea - .quad 0x3ff18e03b5f3f36b - .quad 0x3ff1910eba4df41f - .quad 0x3ff1941a45b1f487 - .quad 0x3ff1972658375d2f - .quad 0x3ff19a32f1f59ab4 - .quad 0x3ff19d4013041dc2 - .quad 0x3ff1a04dbb7a5b13 - .quad 0x3ff1a35beb6fcb75 - .quad 0x3ff1a66aa2fbebc7 - .quad 0x3ff1a979e2363cf8 - .quad 0x3ff1ac89a936440d - .quad 0x3ff1af99f8138a1c - .quad 0x3ff1b2aacee59c53 - .quad 0x3ff1b5bc2dc40bf0 - .quad 0x3ff1b8ce14c66e4c - .quad 0x3ff1bbe084045cd4 - .quad 0x3ff1bef37b95750b - .quad 0x3ff1c206fb91588f - .quad 0x3ff1c51b040fad15 - .quad 0x3ff1c82f95281c6b - .quad 0x3ff1cb44aef2547a - .quad 0x3ff1ce5a51860746 - .quad 0x3ff1d1707cfaeaed - .quad 0x3ff1d4873168b9aa - .quad 0x3ff1d79e6ee731d7 - .quad 0x3ff1dab6358e15e8 - .quad 0x3ff1ddce85752c71 - .quad 0x3ff1e0e75eb44027 - .quad 0x3ff1e400c1631fdb - .quad 0x3ff1e71aad999e82 - .quad 0x3ff1ea35236f9330 - .quad 0x3ff1ed5022fcd91d - .quad 0x3ff1f06bac594fa0 - .quad 0x3ff1f387bf9cda38 - .quad 0x3ff1f6a45cdf6085 - .quad 0x3ff1f9c18438ce4d - .quad 0x3ff1fcdf35c1137a - .quad 0x3ff1fffd7190241e - .quad 0x3ff2031c37bdf872 - .quad 0x3ff2063b88628cd6 - .quad 0x3ff2095b6395e1d2 - .quad 0x3ff20c7bc96ffc18 - .quad 0x3ff20f9cba08e483 - .quad 0x3ff212be3578a819 - .quad 0x3ff215e03bd7580c - .quad 0x3ff21902cd3d09b9 - .quad 0x3ff21c25e9c1d6aa - .quad 0x3ff21f49917ddc96 - .quad 0x3ff2226dc4893d64 - .quad 0x3ff2259282fc1f27 - .quad 0x3ff228b7cceeac25 - .quad 0x3ff22bdda27912d1 - .quad 0x3ff22f0403b385d2 - .quad 0x3ff2322af0b63bff - .quad 0x3ff2355269997062 - .quad 0x3ff2387a6e756238 - .quad 0x3ff23ba2ff6254f4 - .quad 0x3ff23ecc1c78903a - .quad 0x3ff241f5c5d05fe6 - .quad 0x3ff2451ffb82140a - .quad 0x3ff2484abda600ef - .quad 0x3ff24b760c547f15 - .quad 0x3ff24ea1e7a5eb35 - .quad 0x3ff251ce4fb2a63f - .quad 0x3ff254fb44931561 - .quad 0x3ff25828c65fa1ff - .quad 0x3ff25b56d530b9bc - .quad 0x3ff25e85711ece75 - .quad 0x3ff261b49a425645 - .quad 0x3ff264e450b3cb82 - .quad 0x3ff26814948bacc3 - .quad 0x3ff26b4565e27cdd - .quad 0x3ff26e76c4d0c2e5 - .quad 0x3ff271a8b16f0a30 - .quad 0x3ff274db2bd5e254 - .quad 0x3ff2780e341ddf29 - .quad 0x3ff27b41ca5f98cb - .quad 0x3ff27e75eeb3ab98 - .quad 0x3ff281aaa132b832 - .quad 0x3ff284dfe1f56381 - .quad 0x3ff28815b11456b1 - .quad 0x3ff28b4c0ea83f36 - .quad 0x3ff28e82fac9ceca - .quad 0x3ff291ba7591bb70 - .quad 0x3ff294f27f18bf72 - .quad 0x3ff2982b17779965 - .quad 0x3ff29b643ec70c27 - .quad 0x3ff29e9df51fdee1 - .quad 0x3ff2a1d83a9add08 - .quad 0x3ff2a5130f50d65c - .quad 0x3ff2a84e735a9eec - .quad 0x3ff2ab8a66d10f13 - .quad 0x3ff2aec6e9cd037b - .quad 0x3ff2b203fc675d1f - .quad 0x3ff2b5419eb90148 - .quad 0x3ff2b87fd0dad990 - .quad 0x3ff2bbbe92e5d3e3 - .quad 0x3ff2befde4f2e280 - .quad 0x3ff2c23dc71afbf7 - .quad 0x3ff2c57e39771b2f - .quad 0x3ff2c8bf3c203f5f - .quad 0x3ff2cc00cf2f6c18 - .quad 0x3ff2cf42f2bda93d - .quad 0x3ff2d285a6e4030b - .quad 0x3ff2d5c8ebbb8a15 - .quad 0x3ff2d90cc15d5346 - .quad 0x3ff2dc5127e277e3 - .quad 0x3ff2df961f641589 - .quad 0x3ff2e2dba7fb4e33 - .quad 0x3ff2e621c1c14833 - .quad 0x3ff2e9686ccf2e3b - .quad 0x3ff2ecafa93e2f56 - .quad 0x3ff2eff777277ef0 - .quad 0x3ff2f33fd6a454d2 - .quad 0x3ff2f688c7cded23 - .quad 0x3ff2f9d24abd886b - .quad 0x3ff2fd1c5f8c6b93 - .quad 0x3ff300670653dfe4 - .quad 0x3ff303b23f2d330b - .quad 0x3ff306fe0a31b715 - .quad 0x3ff30a4a677ac276 - .quad 0x3ff30d975721b004 - .quad 0x3ff310e4d93fdefb - .quad 0x3ff31432edeeb2fd - .quad 0x3ff3178195479413 - .quad 0x3ff31ad0cf63eeac - .quad 0x3ff31e209c5d33a0 - .quad 0x3ff32170fc4cd831 - .quad 0x3ff324c1ef4c560a - .quad 0x3ff3281375752b40 - .quad 0x3ff32b658ee0da54 - .quad 0x3ff32eb83ba8ea32 - .quad 0x3ff3320b7be6e633 - .quad 0x3ff3355f4fb45e20 - .quad 0x3ff338b3b72ae62d - .quad 0x3ff33c08b26416ff - .quad 0x3ff33f5e41798daa - .quad 0x3ff342b46484ebb4 - .quad 0x3ff3460b1b9fd712 - .quad 0x3ff3496266e3fa2d - .quad 0x3ff34cba466b03e1 - .quad 0x3ff35012ba4ea77d - .quad 0x3ff3536bc2a89cc4 - .quad 0x3ff356c55f929ff1 - .quad 0x3ff35a1f912671b1 - .quad 0x3ff35d7a577dd72b - .quad 0x3ff360d5b2b299fc - .quad 0x3ff36431a2de883b - .quad 0x3ff3678e281b7475 - .quad 0x3ff36aeb428335b4 - .quad 0x3ff36e48f22fa77c - .quad 0x3ff371a7373aa9cb - .quad 0x3ff3750611be211c - .quad 0x3ff3786581d3f669 - .quad 0x3ff37bc587961726 - .quad 0x3ff37f26231e754a - .quad 0x3ff3828754870746 - .quad 0x3ff385e91be9c811 - .quad 0x3ff3894b7960b71f - .quad 0x3ff38cae6d05d866 - .quad 0x3ff39011f6f3345f - .quad 0x3ff393761742d808 - .quad 0x3ff396dace0ed4e1 - .quad 0x3ff39a401b7140ef - .quad 0x3ff39da5ff8436bc - .quad 0x3ff3a10c7a61d55b - .quad 0x3ff3a4738c244064 - .quad 0x3ff3a7db34e59ff7 - .quad 0x3ff3ab4374c020bd - .quad 0x3ff3aeac4bcdf3ea - .quad 0x3ff3b215ba294f39 - .quad 0x3ff3b57fbfec6cf4 - .quad 0x3ff3b8ea5d318bef - .quad 0x3ff3bc559212ef89 - .quad 0x3ff3bfc15eaadfb1 - .quad 0x3ff3c32dc313a8e5 - .quad 0x3ff3c69abf679c2e - .quad 0x3ff3ca0853c10f28 - .quad 0x3ff3cd76803a5c00 - .quad 0x3ff3d0e544ede173 - .quad 0x3ff3d454a1f602d0 - .quad 0x3ff3d7c4976d27fa - .quad 0x3ff3db35256dbd67 - .quad 0x3ff3dea64c123422 - .quad 0x3ff3e2180b7501cc - .quad 0x3ff3e58a63b0a09b - .quad 0x3ff3e8fd54df8f5c - .quad 0x3ff3ec70df1c5175 - .quad 0x3ff3efe502816ee3 - .quad 0x3ff3f359bf29743f - .quad 0x3ff3f6cf152ef2b8 - .quad 0x3ff3fa4504ac801c - .quad 0x3ff3fdbb8dbcb6d2 - .quad 0x3ff40132b07a35df - .quad 0x3ff404aa6cffa0e5 - .quad 0x3ff40822c367a024 - .quad 0x3ff40b9bb3cce07c - .quad 0x3ff40f153e4a136a - .quad 0x3ff4128f62f9ef0e - .quad 0x3ff4160a21f72e2a - .quad 0x3ff419857b5c901f - .quad 0x3ff41d016f44d8f5 - .quad 0x3ff4207dfdcad153 - .quad 0x3ff423fb2709468a - .quad 0x3ff42778eb1b0a8b - .quad 0x3ff42af74a1af3f1 - .quad 0x3ff42e764423ddfd - .quad 0x3ff431f5d950a897 - .quad 0x3ff4357609bc3850 - .quad 0x3ff438f6d5817663 - .quad 0x3ff43c783cbb50b4 - .quad 0x3ff43ffa3f84b9d4 - .quad 0x3ff4437cddf8a8fe - .quad 0x3ff4470018321a1a - .quad 0x3ff44a83ee4c0dbd - .quad 0x3ff44e086061892d - .quad 0x3ff4518d6e8d965b - .quad 0x3ff4551318eb43ec - .quad 0x3ff458995f95a532 - .quad 0x3ff45c2042a7d232 - .quad 0x3ff45fa7c23ce7a4 - .quad 0x3ff4632fde7006f4 - .quad 0x3ff466b8975c563e - .quad 0x3ff46a41ed1d0057 - .quad 0x3ff46dcbdfcd34c8 - .quad 0x3ff471566f8827d0 - .quad 0x3ff474e19c691265 - .quad 0x3ff4786d668b3237 - .quad 0x3ff47bf9ce09c9ab - .quad 0x3ff47f86d3001fe5 - .quad 0x3ff48314758980bf - .quad 0x3ff486a2b5c13cd0 - .quad 0x3ff48a3193c2a96c - .quad 0x3ff48dc10fa920a1 - .quad 0x3ff491512990013f - .quad 0x3ff494e1e192aed2 - .quad 0x3ff4987337cc91a5 - .quad 0x3ff49c052c5916c4 - .quad 0x3ff49f97bf53affd - .quad 0x3ff4a32af0d7d3de - .quad 0x3ff4a6bec100fdba - .quad 0x3ff4aa532feaada6 - .quad 0x3ff4ade83db0687a - .quad 0x3ff4b17dea6db7d7 - .quad 0x3ff4b514363e2a20 - .quad 0x3ff4b8ab213d5283 - .quad 0x3ff4bc42ab86c8f1 - .quad 0x3ff4bfdad5362a27 - .quad 0x3ff4c3739e6717aa - .quad 0x3ff4c70d073537ca - .quad 0x3ff4caa70fbc35a1 - .quad 0x3ff4ce41b817c114 - .quad 0x3ff4d1dd00638ed8 - .quad 0x3ff4d578e8bb586b - .quad 0x3ff4d915713adc1e - .quad 0x3ff4dcb299fddd0d - .quad 0x3ff4e05063202327 - .quad 0x3ff4e3eeccbd7b2a - .quad 0x3ff4e78dd6f1b6a6 - .quad 0x3ff4eb2d81d8abff - .quad 0x3ff4eecdcd8e3669 - .quad 0x3ff4f26eba2e35f0 - .quad 0x3ff4f61047d48f73 - .quad 0x3ff4f9b2769d2ca7 - .quad 0x3ff4fd5546a3fc17 - .quad 0x3ff500f8b804f127 - .quad 0x3ff5049ccadc0412 - .quad 0x3ff508417f4531ee - .quad 0x3ff50be6d55c7ca9 - .quad 0x3ff50f8ccd3deb0d - .quad 0x3ff51333670588bf - .quad 0x3ff516daa2cf6642 - .quad 0x3ff51a8280b798f4 - .quad 0x3ff51e2b00da3b14 - .quad 0x3ff521d423536bbe - .quad 0x3ff5257de83f4eef - .quad 0x3ff529284fba0d84 - .quad 0x3ff52cd359dfd53d - .quad 0x3ff5307f06ccd8ba - .quad 0x3ff5342b569d4f82 - .quad 0x3ff537d8496d75fc - .quad 0x3ff53b85df598d78 - .quad 0x3ff53f34187ddc28 - .quad 0x3ff542e2f4f6ad27 - .quad 0x3ff5469274e05078 - .quad 0x3ff54a4298571b06 - .quad 0x3ff54df35f7766a3 - .quad 0x3ff551a4ca5d920f - .quad 0x3ff55556d92600f1 - .quad 0x3ff559098bed1bdf - .quad 0x3ff55cbce2cf505b - .quad 0x3ff56070dde910d2 - .quad 0x3ff564257d56d4a2 - .quad 0x3ff567dac1351819 - .quad 0x3ff56b90a9a05c72 - .quad 0x3ff56f4736b527da - .quad 0x3ff572fe68900573 - .quad 0x3ff576b63f4d854c - .quad 0x3ff57a6ebb0a3c6d - .quad 0x3ff57e27dbe2c4cf - .quad 0x3ff581e1a1f3bd60 - .quad 0x3ff5859c0d59ca07 - .quad 0x3ff589571e31939f - .quad 0x3ff58d12d497c7fd - .quad 0x3ff590cf30a919ed - .quad 0x3ff5948c32824135 - .quad 0x3ff59849da3ffa96 - .quad 0x3ff59c0827ff07cc - .quad 0x3ff59fc71bdc2f8e - .quad 0x3ff5a386b5f43d92 - .quad 0x3ff5a746f664028b - .quad 0x3ff5ab07dd485429 - .quad 0x3ff5aec96abe0d1f - .quad 0x3ff5b28b9ee20d1e - .quad 0x3ff5b64e79d138d8 - .quad 0x3ff5ba11fba87a03 - .quad 0x3ff5bdd62484bf56 - .quad 0x3ff5c19af482fc8f - .quad 0x3ff5c5606bc02a6d - .quad 0x3ff5c9268a5946b7 - .quad 0x3ff5cced506b543a - .quad 0x3ff5d0b4be135acc - .quad 0x3ff5d47cd36e6747 - .quad 0x3ff5d84590998b93 - .quad 0x3ff5dc0ef5b1de9e - .quad 0x3ff5dfd902d47c65 - .quad 0x3ff5e3a3b81e85ec - .quad 0x3ff5e76f15ad2148 - .quad 0x3ff5eb3b1b9d799a - .quad 0x3ff5ef07ca0cbf0f - .quad 0x3ff5f2d5211826e8 - .quad 0x3ff5f6a320dceb71 - .quad 0x3ff5fa71c9784c0b - .quad 0x3ff5fe411b078d26 - .quad 0x3ff6021115a7f849 - .quad 0x3ff605e1b976dc09 - .quad 0x3ff609b306918c13 - .quad 0x3ff60d84fd15612a - .quad 0x3ff611579d1fb925 - .quad 0x3ff6152ae6cdf6f4 - .quad 0x3ff618feda3d829f - .quad 0x3ff61cd3778bc944 - .quad 0x3ff620a8bed63d1f - .quad 0x3ff6247eb03a5585 - .quad 0x3ff628554bd58ee5 - .quad 0x3ff62c2c91c56acd - .quad 0x3ff6300482276fe8 - .quad 0x3ff633dd1d1929fd - .quad 0x3ff637b662b829f5 - .quad 0x3ff63b90532205d8 - .quad 0x3ff63f6aee7458cd - .quad 0x3ff6434634ccc320 - .quad 0x3ff647222648ea3d - .quad 0x3ff64afec30678b7 - .quad 0x3ff64edc0b231e41 - .quad 0x3ff652b9febc8fb7 - .quad 0x3ff656989df08719 - .quad 0x3ff65a77e8dcc390 - .quad 0x3ff65e57df9f096b - .quad 0x3ff6623882552225 - .quad 0x3ff66619d11cdc5f - .quad 0x3ff669fbcc140be7 - .quad 0x3ff66dde735889b8 - .quad 0x3ff671c1c70833f6 - .quad 0x3ff675a5c740edf5 - .quad 0x3ff6798a7420a036 - .quad 0x3ff67d6fcdc5386a - .quad 0x3ff68155d44ca973 - .quad 0x3ff6853c87d4eb62 - .quad 0x3ff68923e87bfb7a - .quad 0x3ff68d0bf65fdc34 - .quad 0x3ff690f4b19e9538 - .quad 0x3ff694de1a563367 - .quad 0x3ff698c830a4c8d4 - .quad 0x3ff69cb2f4a86cca - .quad 0x3ff6a09e667f3bcd - .quad 0x3ff6a48a86475795 - .quad 0x3ff6a877541ee718 - .quad 0x3ff6ac64d0241683 - .quad 0x3ff6b052fa75173e - .quad 0x3ff6b441d3301fee - .quad 0x3ff6b8315a736c75 - .quad 0x3ff6bc21905d3df0 - .quad 0x3ff6c012750bdabf - .quad 0x3ff6c404089d8e7d - .quad 0x3ff6c7f64b30aa09 - .quad 0x3ff6cbe93ce38381 - .quad 0x3ff6cfdcddd47645 - .quad 0x3ff6d3d12e21e2fb - .quad 0x3ff6d7c62dea2f8a - .quad 0x3ff6dbbbdd4bc720 - .quad 0x3ff6dfb23c651a2f - .quad 0x3ff6e3a94b549e71 - .quad 0x3ff6e7a10a38cee8 - .quad 0x3ff6eb9979302bdd - .quad 0x3ff6ef9298593ae5 - .quad 0x3ff6f38c67d286dd - .quad 0x3ff6f786e7ba9fef - .quad 0x3ff6fb8218301b90 - .quad 0x3ff6ff7df9519484 - .quad 0x3ff7037a8b3daadb - .quad 0x3ff70777ce1303f6 - .quad 0x3ff70b75c1f04a84 - .quad 0x3ff70f7466f42e87 - .quad 0x3ff71373bd3d6551 - .quad 0x3ff71773c4eaa988 - .quad 0x3ff71b747e1abb24 - .quad 0x3ff71f75e8ec5f74 - .quad 0x3ff72378057e611a - .quad 0x3ff7277ad3ef9011 - .quad 0x3ff72b7e545ec1a8 - .quad 0x3ff72f8286ead08a - .quad 0x3ff733876bb29cb8 - .quad 0x3ff7378d02d50b8f - .quad 0x3ff73b934c7107c7 - .quad 0x3ff73f9a48a58174 - .quad 0x3ff743a1f7916e05 - .quad 0x3ff747aa5953c849 - .quad 0x3ff74bb36e0b906d - .quad 0x3ff74fbd35d7cbfd - .quad 0x3ff753c7b0d785e8 - .quad 0x3ff757d2df29ce7c - .quad 0x3ff75bdec0edbb6b - .quad 0x3ff75feb564267c9 - .quad 0x3ff763f89f46f40f - .quad 0x3ff768069c1a861d - .quad 0x3ff76c154cdc4937 - .quad 0x3ff77024b1ab6e09 - .quad 0x3ff77434caa72aa7 - .quad 0x3ff7784597eeba8f - .quad 0x3ff77c5719a15ea6 - .quad 0x3ff780694fde5d3f - .quad 0x3ff7847c3ac50219 - .quad 0x3ff7888fda749e5d - .quad 0x3ff78ca42f0c88a5 - .quad 0x3ff790b938ac1cf6 - .quad 0x3ff794cef772bcc9 - .quad 0x3ff798e56b7fcf03 - .quad 0x3ff79cfc94f2bfff - .quad 0x3ff7a11473eb0187 - .quad 0x3ff7a52d08880ad9 - .quad 0x3ff7a94652e958aa - .quad 0x3ff7ad60532e6d20 - .quad 0x3ff7b17b0976cfdb - .quad 0x3ff7b59675e20def - .quad 0x3ff7b9b2988fb9ec - .quad 0x3ff7bdcf719f6bd7 - .quad 0x3ff7c1ed0130c132 - .quad 0x3ff7c60b47635cf9 - .quad 0x3ff7ca2a4456e7a3 - .quad 0x3ff7ce49f82b0f24 - .quad 0x3ff7d26a62ff86f0 - .quad 0x3ff7d68b84f407f8 - .quad 0x3ff7daad5e2850ac - .quad 0x3ff7decfeebc24fe - .quad 0x3ff7e2f336cf4e62 - .quad 0x3ff7e71736819bcd - .quad 0x3ff7eb3bedf2e1b9 - .quad 0x3ff7ef615d42fa24 - .quad 0x3ff7f3878491c491 - .quad 0x3ff7f7ae63ff260a - .quad 0x3ff7fbd5fbab091f - .quad 0x3ff7fffe4bb55dec - .quad 0x3ff80427543e1a12 - .quad 0x3ff80851156538be - .quad 0x3ff80c7b8f4abaa9 - .quad 0x3ff810a6c20ea617 - .quad 0x3ff814d2add106d9 - .quad 0x3ff818ff52b1ee50 - .quad 0x3ff81d2cb0d1736a - .quad 0x3ff8215ac84fb2a6 - .quad 0x3ff82589994cce13 - .quad 0x3ff829b923e8ed53 - .quad 0x3ff82de968443d9a - .quad 0x3ff8321a667ef1b2 - .quad 0x3ff8364c1eb941f7 - .quad 0x3ff83a7e91136c5d - .quad 0x3ff83eb1bdadb46d - .quad 0x3ff842e5a4a8634a - .quad 0x3ff8471a4623c7ad - .quad 0x3ff84b4fa24035ea - .quad 0x3ff84f85b91e07f1 - .quad 0x3ff853bc8add9d4c - .quad 0x3ff857f4179f5b21 - .quad 0x3ff85c2c5f83ac35 - .quad 0x3ff8606562ab00ec - .quad 0x3ff8649f2135cf48 - .quad 0x3ff868d99b4492ed - .quad 0x3ff86d14d0f7cd1d - .quad 0x3ff87150c27004c2 - .quad 0x3ff8758d6fcdc666 - .quad 0x3ff879cad931a436 - .quad 0x3ff87e08febc3608 - .quad 0x3ff88247e08e1957 - .quad 0x3ff886877ec7f144 - .quad 0x3ff88ac7d98a6699 - .quad 0x3ff88f08f0f627cb - .quad 0x3ff8934ac52be8f7 - .quad 0x3ff8978d564c63e7 - .quad 0x3ff89bd0a478580f - .quad 0x3ff8a014afd08a94 - .quad 0x3ff8a4597875c644 - .quad 0x3ff8a89efe88dba1 - .quad 0x3ff8ace5422aa0db - .quad 0x3ff8b12c437bf1d4 - .quad 0x3ff8b574029db01e - .quad 0x3ff8b9bc7fb0c302 - .quad 0x3ff8be05bad61778 - .quad 0x3ff8c24fb42ea033 - .quad 0x3ff8c69a6bdb5598 - .quad 0x3ff8cae5e1fd35c4 - .quad 0x3ff8cf3216b5448c - .quad 0x3ff8d37f0a248b7f - .quad 0x3ff8d7ccbc6c19e6 - .quad 0x3ff8dc1b2dad04c4 - .quad 0x3ff8e06a5e0866d9 - .quad 0x3ff8e4ba4d9f60a1 - .quad 0x3ff8e90afc931857 - .quad 0x3ff8ed5c6b04b9f6 - .quad 0x3ff8f1ae99157736 - .quad 0x3ff8f60186e68793 - .quad 0x3ff8fa553499284b - .quad 0x3ff8fea9a24e9c5c - .quad 0x3ff902fed0282c8a - .quad 0x3ff90754be472760 - .quad 0x3ff90bab6ccce12c - .quad 0x3ff91002dbdab403 - .quad 0x3ff9145b0b91ffc6 - .quad 0x3ff918b3fc142a19 - .quad 0x3ff91d0dad829e70 - .quad 0x3ff921681ffece05 - .quad 0x3ff925c353aa2fe2 - .quad 0x3ff92a1f48a640dc - .quad 0x3ff92e7bff148396 - .quad 0x3ff932d977168083 - .quad 0x3ff93737b0cdc5e5 - .quad 0x3ff93b96ac5be7d1 - .quad 0x3ff93ff669e2802b - .quad 0x3ff94456e9832ead - .quad 0x3ff948b82b5f98e5 - .quad 0x3ff94d1a2f996a33 - .quad 0x3ff9517cf65253d1 - .quad 0x3ff955e07fac0ccd - .quad 0x3ff95a44cbc8520f - .quad 0x3ff95ea9dac8e658 - .quad 0x3ff9630faccf9243 - .quad 0x3ff9677641fe2446 - .quad 0x3ff96bdd9a7670b3 - .quad 0x3ff97045b65a51ba - .quad 0x3ff974ae95cba768 - .quad 0x3ff9791838ec57ab - .quad 0x3ff97d829fde4e50 - .quad 0x3ff981edcac37d05 - .quad 0x3ff98659b9bddb5b - .quad 0x3ff98ac66cef66c8 - .quad 0x3ff98f33e47a22a2 - .quad 0x3ff993a220801829 - .quad 0x3ff9981121235681 - .quad 0x3ff99c80e685f2b5 - .quad 0x3ff9a0f170ca07ba - .quad 0x3ff9a562c011b66d - .quad 0x3ff9a9d4d47f2598 - .quad 0x3ff9ae47ae3481ed - .quad 0x3ff9b2bb4d53fe0d - .quad 0x3ff9b72fb1ffd285 - .quad 0x3ff9bba4dc5a3dd3 - .quad 0x3ff9c01acc858463 - .quad 0x3ff9c49182a3f090 - .quad 0x3ff9c908fed7d2aa - .quad 0x3ff9cd81414380f2 - .quad 0x3ff9d1fa4a09579d - .quad 0x3ff9d674194bb8d5 - .quad 0x3ff9daeeaf2d0cb8 - .quad 0x3ff9df6a0bcfc15e - .quad 0x3ff9e3e62f564ad5 - .quad 0x3ff9e86319e32323 - .quad 0x3ff9ece0cb98ca4b - .quad 0x3ff9f15f4499c647 - .quad 0x3ff9f5de8508a311 - .quad 0x3ff9fa5e8d07f29e - .quad 0x3ff9fedf5cba4ce0 - .quad 0x3ffa0360f4424fcb - .quad 0x3ffa07e353c29f50 - .quad 0x3ffa0c667b5de565 - .quad 0x3ffa10ea6b36d1fe - .quad 0x3ffa156f23701b15 - .quad 0x3ffa19f4a42c7ca9 - .quad 0x3ffa1e7aed8eb8bb - .quad 0x3ffa2301ffb99757 - .quad 0x3ffa2789dacfe68c - .quad 0x3ffa2c127ef47a74 - .quad 0x3ffa309bec4a2d33 - .quad 0x3ffa352622f3def6 - .quad 0x3ffa39b1231475f7 - .quad 0x3ffa3e3ceccede7c - .quad 0x3ffa42c980460ad8 - .quad 0x3ffa4756dd9cf36e - .quad 0x3ffa4be504f696b1 - .quad 0x3ffa5073f675f924 - .quad 0x3ffa5503b23e255d - .quad 0x3ffa599438722c03 - .quad 0x3ffa5e25893523d4 - .quad 0x3ffa62b7a4aa29a1 - .quad 0x3ffa674a8af46052 - .quad 0x3ffa6bde3c36f0e6 - .quad 0x3ffa7072b8950a73 - .quad 0x3ffa75080031e22b - .quad 0x3ffa799e1330b358 - .quad 0x3ffa7e34f1b4bf62 - .quad 0x3ffa82cc9be14dca - .quad 0x3ffa876511d9ac32 - .quad 0x3ffa8bfe53c12e59 - .quad 0x3ffa909861bb2e1d - .quad 0x3ffa95333beb0b7e - .quad 0x3ffa99cee2742c9d - .quad 0x3ffa9e6b5579fdbf - .quad 0x3ffaa308951ff14d - .quad 0x3ffaa7a6a1897fd2 - .quad 0x3ffaac457ada2803 - .quad 0x3ffab0e521356eba - .quad 0x3ffab58594bedefa - .quad 0x3ffaba26d59a09ee - .quad 0x3ffabec8e3ea86ee - .quad 0x3ffac36bbfd3f37a - .quad 0x3ffac80f6979f340 - .quad 0x3ffaccb3e100301e - .quad 0x3ffad159268a5a1c - .quad 0x3ffad5ff3a3c2774 - .quad 0x3ffadaa61c395493 - .quad 0x3ffadf4dcca5a413 - .quad 0x3ffae3f64ba4dec6 - .quad 0x3ffae89f995ad3ad - .quad 0x3ffaed49b5eb5803 - .quad 0x3ffaf1f4a17a4735 - .quad 0x3ffaf6a05c2b82e9 - .quad 0x3ffafb4ce622f2ff - .quad 0x3ffafffa3f84858c - .quad 0x3ffb04a868742ee4 - .quad 0x3ffb09576115e994 - .quad 0x3ffb0e07298db666 - .quad 0x3ffb12b7c1ff9c61 - .quad 0x3ffb17692a8fa8cd - .quad 0x3ffb1c1b6361ef31 - .quad 0x3ffb20ce6c9a8952 - .quad 0x3ffb2582465d973c - .quad 0x3ffb2a36f0cf3f3a - .quad 0x3ffb2eec6c13addd - .quad 0x3ffb33a2b84f15fb - .quad 0x3ffb3859d5a5b0b1 - .quad 0x3ffb3d11c43bbd62 - .quad 0x3ffb41ca843581ba - .quad 0x3ffb468415b749b1 - .quad 0x3ffb4b3e78e56786 - .quad 0x3ffb4ff9ade433c6 - .quad 0x3ffb54b5b4d80d4a - .quad 0x3ffb59728de5593a - .quad 0x3ffb5e303930830c - .quad 0x3ffb62eeb6ddfc87 - .quad 0x3ffb67ae07123dc3 - .quad 0x3ffb6c6e29f1c52a - .quad 0x3ffb712f1fa1177b - .quad 0x3ffb75f0e844bfc6 - .quad 0x3ffb7ab384014f76 - .quad 0x3ffb7f76f2fb5e47 - .quad 0x3ffb843b35578a51 - .quad 0x3ffb89004b3a7804 - .quad 0x3ffb8dc634c8d228 - .quad 0x3ffb928cf22749e4 - .quad 0x3ffb9754837a96b7 - .quad 0x3ffb9c1ce8e77680 - .quad 0x3ffba0e62292ad7d - .quad 0x3ffba5b030a1064a - .quad 0x3ffbaa7b133751e3 - .quad 0x3ffbaf46ca7a67a7 - .quad 0x3ffbb413568f255a - .quad 0x3ffbb8e0b79a6f1f - .quad 0x3ffbbdaeedc12f82 - .quad 0x3ffbc27df9285775 - .quad 0x3ffbc74dd9f4de4f - .quad 0x3ffbcc1e904bc1d2 - .quad 0x3ffbd0f01c520628 - .quad 0x3ffbd5c27e2cb5e5 - .quad 0x3ffbda95b600e20b - .quad 0x3ffbdf69c3f3a207 - .quad 0x3ffbe43ea82a13b5 - .quad 0x3ffbe91462c95b60 - .quad 0x3ffbedeaf3f6a3c2 - .quad 0x3ffbf2c25bd71e09 - .quad 0x3ffbf79a9a9001d2 - .quad 0x3ffbfc73b0468d30 - .quad 0x3ffc014d9d2004aa - .quad 0x3ffc06286141b33d - .quad 0x3ffc0b03fcd0ea5c - .quad 0x3ffc0fe06ff301f4 - .quad 0x3ffc14bdbacd586a - .quad 0x3ffc199bdd85529c - .quad 0x3ffc1e7ad8405be6 - .quad 0x3ffc235aab23e61e - .quad 0x3ffc283b56556999 - .quad 0x3ffc2d1cd9fa652c - .quad 0x3ffc31ff36385e29 - .quad 0x3ffc36e26b34e065 - .quad 0x3ffc3bc679157e38 - .quad 0x3ffc40ab5fffd07a - .quad 0x3ffc45912019768c - .quad 0x3ffc4a77b9881650 - .quad 0x3ffc4f5f2c715c31 - .quad 0x3ffc544778fafb22 - .quad 0x3ffc59309f4aac9f - .quad 0x3ffc5e1a9f8630ad - .quad 0x3ffc630579d34ddd - .quad 0x3ffc67f12e57d14b - .quad 0x3ffc6cddbd398ea4 - .quad 0x3ffc71cb269e601f - .quad 0x3ffc76b96aac2686 - .quad 0x3ffc7ba88988c933 - .quad 0x3ffc8098835a3611 - .quad 0x3ffc8589584661a1 - .quad 0x3ffc8a7b087346f4 - .quad 0x3ffc8f6d9406e7b5 - .quad 0x3ffc9460fb274c22 - .quad 0x3ffc99553dfa8313 - .quad 0x3ffc9e4a5ca6a1f8 - .quad 0x3ffca3405751c4db - .quad 0x3ffca8372e220e61 - .quad 0x3ffcad2ee13da7cb - .quad 0x3ffcb22770cac0f9 - .quad 0x3ffcb720dcef9069 - .quad 0x3ffcbc1b25d25337 - .quad 0x3ffcc1164b994d23 - .quad 0x3ffcc6124e6ac88b - .quad 0x3ffccb0f2e6d1675 - .quad 0x3ffcd00cebc68e87 - .quad 0x3ffcd50b869d8f0f - .quad 0x3ffcda0aff187d02 - .quad 0x3ffcdf0b555dc3fa - .quad 0x3ffce40c8993d63d - .quad 0x3ffce90e9be12cb9 - .quad 0x3ffcee118c6c4709 - .quad 0x3ffcf3155b5bab74 - .quad 0x3ffcf81a08d5e6ec - .quad 0x3ffcfd1f95018d17 - .quad 0x3ffd022600053845 - .quad 0x3ffd072d4a07897c - .quad 0x3ffd0c35732f2870 - .quad 0x3ffd113e7ba2c38c - .quad 0x3ffd164863890fee - .quad 0x3ffd1b532b08c968 - .quad 0x3ffd205ed248b287 - .quad 0x3ffd256b596f948c - .quad 0x3ffd2a78c0a43f72 - .quad 0x3ffd2f87080d89f2 - .quad 0x3ffd34962fd2517a - .quad 0x3ffd39a638197a3c - .quad 0x3ffd3eb72109ef21 - .quad 0x3ffd43c8eacaa1d6 - .quad 0x3ffd48db95828ac7 - .quad 0x3ffd4def2158a91f - .quad 0x3ffd53038e7402ce - .quad 0x3ffd5818dcfba487 - .quad 0x3ffd5d2f0d16a1c3 - .quad 0x3ffd62461eec14be - .quad 0x3ffd675e12a31e7f - .quad 0x3ffd6c76e862e6d3 - .quad 0x3ffd7190a0529c51 - .quad 0x3ffd76ab3a99745b - .quad 0x3ffd7bc6b75eab1f - .quad 0x3ffd80e316c98398 - .quad 0x3ffd86005901478f - .quad 0x3ffd8b1e7e2d479d - .quad 0x3ffd903d8674db2b - .quad 0x3ffd955d71ff6075 - .quad 0x3ffd9a7e40f43c89 - .quad 0x3ffd9f9ff37adb4a - .quad 0x3ffda4c289baaf6e - .quad 0x3ffda9e603db3285 - .quad 0x3ffdaf0a6203e4f5 - .quad 0x3ffdb42fa45c4dfd - .quad 0x3ffdb955cb0bfbb6 - .quad 0x3ffdbe7cd63a8315 - .quad 0x3ffdc3a4c60f7fea - .quad 0x3ffdc8cd9ab294e4 - .quad 0x3ffdcdf7544b6b92 - .quad 0x3ffdd321f301b460 - .quad 0x3ffdd84d76fd269e - .quad 0x3ffddd79e065807d - .quad 0x3ffde2a72f628712 - .quad 0x3ffde7d5641c0658 - .quad 0x3ffded047eb9d12d - .quad 0x3ffdf2347f63c159 - .quad 0x3ffdf7656641b78c - .quad 0x3ffdfc97337b9b5f - .quad 0x3ffe01c9e7395b56 - .quad 0x3ffe06fd81a2ece1 - .quad 0x3ffe0c3202e04c5d - .quad 0x3ffe11676b197d17 - .quad 0x3ffe169dba768949 - .quad 0x3ffe1bd4f11f8220 - .quad 0x3ffe210d0f3c7fba - .quad 0x3ffe264614f5a129 - .quad 0x3ffe2b8002730c71 - .quad 0x3ffe30bad7dcee90 - .quad 0x3ffe35f6955b7b78 - .quad 0x3ffe3b333b16ee12 - .quad 0x3ffe4070c9378842 - .quad 0x3ffe45af3fe592e8 - .quad 0x3ffe4aee9f495ddc - .quad 0x3ffe502ee78b3ff6 - .quad 0x3ffe557018d3970b - .quad 0x3ffe5ab2334ac7ee - .quad 0x3ffe5ff537193e75 - .quad 0x3ffe653924676d76 - .quad 0x3ffe6a7dfb5dceca - .quad 0x3ffe6fc3bc24e350 - .quad 0x3ffe750a66e532eb - .quad 0x3ffe7a51fbc74c83 - .quad 0x3ffe7f9a7af3c60b - .quad 0x3ffe84e3e4933c7e - .quad 0x3ffe8a2e38ce53df - .quad 0x3ffe8f7977cdb740 - .quad 0x3ffe94c5a1ba18bd - .quad 0x3ffe9a12b6bc3181 - .quad 0x3ffe9f60b6fcc1c7 - .quad 0x3ffea4afa2a490da - .quad 0x3ffea9ff79dc6d14 - .quad 0x3ffeaf503ccd2be5 - .quad 0x3ffeb4a1eb9fa9d1 - .quad 0x3ffeb9f4867cca6e - .quad 0x3ffebf480d8d786d - .quad 0x3ffec49c80faa594 - .quad 0x3ffec9f1e0ed4ac2 - .quad 0x3ffecf482d8e67f1 - .quad 0x3ffed49f67070435 - .quad 0x3ffed9f78d802dc2 - .quad 0x3ffedf50a122f9e6 - .quad 0x3ffee4aaa2188510 - .quad 0x3ffeea059089f2d0 - .quad 0x3ffeef616ca06dd6 - .quad 0x3ffef4be368527f6 - .quad 0x3ffefa1bee615a27 - .quad 0x3ffeff7a945e4487 - .quad 0x3fff04da28a52e59 - .quad 0x3fff0a3aab5f6609 - .quad 0x3fff0f9c1cb6412a - .quad 0x3fff14fe7cd31c7b - .quad 0x3fff1a61cbdf5be7 - .quad 0x3fff1fc60a046a84 - .quad 0x3fff252b376bba97 - .quad 0x3fff2a91543ec595 - .quad 0x3fff2ff860a70c22 - .quad 0x3fff35605cce1613 - .quad 0x3fff3ac948dd7274 - .quad 0x3fff403324feb781 - .quad 0x3fff459df15b82ac - .quad 0x3fff4b09ae1d78a1 - .quad 0x3fff50765b6e4540 - .quad 0x3fff55e3f9779ba5 - .quad 0x3fff5b5288633625 - .quad 0x3fff60c2085ad652 - .quad 0x3fff6632798844f8 - .quad 0x3fff6ba3dc155226 - .quad 0x3fff7116302bd526 - .quad 0x3fff768975f5ac86 - .quad 0x3fff7bfdad9cbe14 - .quad 0x3fff8172d74af6e1 - .quad 0x3fff86e8f32a4b45 - .quad 0x3fff8c600164b6dc - .quad 0x3fff91d802243c89 - .quad 0x3fff9750f592e677 - .quad 0x3fff9ccadbdac61d - .quad 0x3fffa245b525f439 - .quad 0x3fffa7c1819e90d8 - .quad 0x3fffad3e416ec354 - .quad 0x3fffb2bbf4c0ba54 - .quad 0x3fffb83a9bbeabd1 - .quad 0x3fffbdba3692d514 - .quad 0x3fffc33ac5677ab8 - .quad 0x3fffc8bc4866e8ad - .quad 0x3fffce3ebfbb7237 - .quad 0x3fffd3c22b8f71f1 - .quad 0x3fffd9468c0d49cc - .quad 0x3fffdecbe15f6314 - .quad 0x3fffe4522bb02e6e - .quad 0x3fffe9d96b2a23d9 - .quad 0x3fffef619ff7c2b3 - .quad 0x3ffff4eaca4391b6 - .quad 0x3ffffa74ea381efc - -/* Range reduction coefficients: - * log(2) inverted = 2^k/ln2 */ -double_vector __dbInvLn2 0x40971547652b82fe - -/* right-shifter value = 3*2^52 */ -double_vector __dbShifter 0x4338000000000000 - -/* log(2) high part = ln2/2^k(52-k-9 hibits) */ -double_vector __dbLn2hi 0x3f462e42fec00000 - -/* log(2) low part = ln2/2^k(52-k-9..104-k-9 lobits) */ -double_vector __dbLn2lo 0x3d5d1cf79abc9e3b - -/* Polynomial coefficients (k=10, deg=3): */ -double_vector __dPC0 0x3ff0000000000000 -double_vector __dPC1 0x3fe0000001ebfbe0 -double_vector __dPC2 0x3fc5555555555556 - -/* Other constants: - * index mask = 2^k-1 */ -double_vector __lIndexMask 0x00000000000003ff - -/* absolute value mask (SP) */ -float_vector __iAbsMask 0x7fffffff - -/* domain range (SP) (>=4086232B) */ -float_vector __iDomainRange 0x4086232a - .type __svml_dexp_data,@object - .size __svml_dexp_data,.-__svml_dexp_data diff --git a/sysdeps/x86_64/fpu/svml_d_exp_data.h b/sysdeps/x86_64/fpu/svml_d_exp_data.h deleted file mode 100644 index 70e7660739..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_exp_data.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Offsets for data table for function exp. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef D_EXP_DATA_H -#define D_EXP_DATA_H - -#define __dbT 0 -#define __dbInvLn2 8192 -#define __dbShifter 8256 -#define __dbLn2hi 8320 -#define __dbLn2lo 8384 -#define __dPC0 8448 -#define __dPC1 8512 -#define __dPC2 8576 -#define __lIndexMask 8640 -#define __iAbsMask 8704 -#define __iDomainRange 8768 - -.macro double_vector offset value -.if .-__svml_dexp_data != \offset -.err -.endif -.rept 8 -.quad \value -.endr -.endm - -.macro float_vector offset value -.if .-__svml_dexp_data != \offset -.err -.endif -.rept 16 -.long \value -.endr -.endm - -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_log2_core.S b/sysdeps/x86_64/fpu/svml_d_log2_core.S deleted file mode 100644 index 4e2d9b9640..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_log2_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function log vectorized with SSE2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVbN2v_log) -WRAPPER_IMPL_SSE2 __log_finite -END (_ZGVbN2v_log) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVbN2v_log) -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_log4_core.S b/sysdeps/x86_64/fpu/svml_d_log4_core.S deleted file mode 100644 index 2db872682d..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_log4_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function log vectorized with AVX2, wrapper version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVdN4v_log) -WRAPPER_IMPL_AVX _ZGVbN2v_log -END (_ZGVdN4v_log) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVdN4v_log) -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_log4_core_avx.S b/sysdeps/x86_64/fpu/svml_d_log4_core_avx.S deleted file mode 100644 index 72cb77a1b7..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_log4_core_avx.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function log vectorized in AVX ISA as wrapper to SSE4 ISA version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVcN4v_log) -WRAPPER_IMPL_AVX _ZGVbN2v_log -END (_ZGVcN4v_log) diff --git a/sysdeps/x86_64/fpu/svml_d_log8_core.S b/sysdeps/x86_64/fpu/svml_d_log8_core.S deleted file mode 100644 index d4c4850fdc..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_log8_core.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function log vectorized with AVX-512. Wrapper to AVX2 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVeN8v_log) -WRAPPER_IMPL_AVX512 _ZGVdN4v_log -END (_ZGVeN8v_log) diff --git a/sysdeps/x86_64/fpu/svml_d_log_data.S b/sysdeps/x86_64/fpu/svml_d_log_data.S deleted file mode 100644 index b17874100c..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_log_data.S +++ /dev/null @@ -1,1662 +0,0 @@ -/* Data for function log. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "svml_d_log_data.h" - - .section .rodata, "a" - .align 64 - -/* Data table for vector implementations of function log. - The table may contain polynomial, reduction, lookup coefficients - and other constants obtained through different methods - of research and experimental work. */ - .globl __svml_dlog_data -__svml_dlog_data: - -/* Lookup table in high+low parts and 9-bit index for - -log(mRcp), where mRcp is mantissa of 1/x 9-bit accurate reciprocal: */ -.if .-__svml_dlog_data != _Log_HA_table -.err -.endif - .quad 0xc086232bdd7a8300 - .quad 0xbe1ce91eef3fb100 - .quad 0xc086232fdc7ad828 - .quad 0xbe1cefcffda73b6a - .quad 0xc0862333d97d2ba0 - .quad 0xbe1cef406748f1ff - .quad 0xc0862337d48378e0 - .quad 0xbe1cef2a9429925a - .quad 0xc086233bcd8fb878 - .quad 0xbe1cf138d17ebecb - .quad 0xc086233fc4a3e018 - .quad 0xbe1ceff2dbbbb29e - .quad 0xc0862343b9c1e270 - .quad 0xbe1cf1a42aae437b - .quad 0xc0862347acebaf68 - .quad 0xbe1cef3b152048af - .quad 0xc086234b9e2333f0 - .quad 0xbe1cef20e127805e - .quad 0xc086234f8d6a5a30 - .quad 0xbe1cf00ad6052cf4 - .quad 0xc08623537ac30980 - .quad 0xbe1cefc4642ee597 - .quad 0xc0862357662f2660 - .quad 0xbe1cf1f277d36e16 - .quad 0xc086235b4fb092a0 - .quad 0xbe1ceed009e8d8e6 - .quad 0xc086235f37492d28 - .quad 0xbe1cf1e4038cb362 - .quad 0xc08623631cfad250 - .quad 0xbe1cf0b0873b8557 - .quad 0xc086236700c75b98 - .quad 0xbe1cf15bb3227c0b - .quad 0xc086236ae2b09fe0 - .quad 0xbe1cf151ef8ca9ed - .quad 0xc086236ec2b87358 - .quad 0xbe1cefe1dc2cd2ed - .quad 0xc0862372a0e0a780 - .quad 0xbe1cf0d1eec5454f - .quad 0xc08623767d2b0b48 - .quad 0xbe1ceeefd570bbce - .quad 0xc086237a57996af0 - .quad 0xbe1cee99ae91b3a7 - .quad 0xc086237e302d9028 - .quad 0xbe1cf0412830fbd1 - .quad 0xc086238206e94218 - .quad 0xbe1ceee898588610 - .quad 0xc0862385dbce4548 - .quad 0xbe1cee9a1fbcaaea - .quad 0xc0862389aede5bc0 - .quad 0xbe1ceed8e7cc1ad6 - .quad 0xc086238d801b4500 - .quad 0xbe1cf10c8d059da6 - .quad 0xc08623914f86be18 - .quad 0xbe1ceee6c63a8165 - .quad 0xc08623951d228180 - .quad 0xbe1cf0c3592d2ff1 - .quad 0xc0862398e8f04758 - .quad 0xbe1cf0026cc4cb1b - .quad 0xc086239cb2f1c538 - .quad 0xbe1cf15d48d8e670 - .quad 0xc08623a07b28ae60 - .quad 0xbe1cef359363787c - .quad 0xc08623a44196b390 - .quad 0xbe1cefdf1ab2e82c - .quad 0xc08623a8063d8338 - .quad 0xbe1cefe43c02aa84 - .quad 0xc08623abc91ec960 - .quad 0xbe1cf044f5ae35b7 - .quad 0xc08623af8a3c2fb8 - .quad 0xbe1cf0b0b4001e1b - .quad 0xc08623b349975d98 - .quad 0xbe1cf1bae76dfbcf - .quad 0xc08623b70731f810 - .quad 0xbe1cef0a72e13a62 - .quad 0xc08623bac30da1c8 - .quad 0xbe1cf184007d2b6b - .quad 0xc08623be7d2bfb40 - .quad 0xbe1cf16f4b239e98 - .quad 0xc08623c2358ea2a0 - .quad 0xbe1cf0976acada87 - .quad 0xc08623c5ec3733d0 - .quad 0xbe1cf066318a16ff - .quad 0xc08623c9a1274880 - .quad 0xbe1ceffaa7148798 - .quad 0xc08623cd54607820 - .quad 0xbe1cf23ab02e9b6e - .quad 0xc08623d105e45800 - .quad 0xbe1cefdfef7d4fde - .quad 0xc08623d4b5b47b20 - .quad 0xbe1cf17fece44f2b - .quad 0xc08623d863d27270 - .quad 0xbe1cf18f907d0d7c - .quad 0xc08623dc103fccb0 - .quad 0xbe1cee61fe072c98 - .quad 0xc08623dfbafe1668 - .quad 0xbe1cf022dd891e2f - .quad 0xc08623e3640eda20 - .quad 0xbe1ceecc1daf4358 - .quad 0xc08623e70b73a028 - .quad 0xbe1cf0173c4fa380 - .quad 0xc08623eab12deec8 - .quad 0xbe1cf16a2150c2f4 - .quad 0xc08623ee553f4a30 - .quad 0xbe1cf1bf980b1f4b - .quad 0xc08623f1f7a93480 - .quad 0xbe1cef8b731663c2 - .quad 0xc08623f5986d2dc0 - .quad 0xbe1cee9a664d7ef4 - .quad 0xc08623f9378cb3f0 - .quad 0xbe1cf1eda2af6400 - .quad 0xc08623fcd5094320 - .quad 0xbe1cf1923f9d68d7 - .quad 0xc086240070e45548 - .quad 0xbe1cf0747cd3e03a - .quad 0xc08624040b1f6260 - .quad 0xbe1cf22ee855bd6d - .quad 0xc0862407a3bbe078 - .quad 0xbe1cf0d57360c00b - .quad 0xc086240b3abb4398 - .quad 0xbe1ceebc815cd575 - .quad 0xc086240ed01efdd0 - .quad 0xbe1cf03bfb970951 - .quad 0xc086241263e87f50 - .quad 0xbe1cf16e74768529 - .quad 0xc0862415f6193658 - .quad 0xbe1cefec64b8becb - .quad 0xc086241986b28f30 - .quad 0xbe1cf0838d210baa - .quad 0xc086241d15b5f448 - .quad 0xbe1cf0ea86e75b11 - .quad 0xc0862420a324ce28 - .quad 0xbe1cf1708d11d805 - .quad 0xc08624242f008380 - .quad 0xbe1ceea988c5a417 - .quad 0xc0862427b94a7910 - .quad 0xbe1cef166a7bbca5 - .quad 0xc086242b420411d0 - .quad 0xbe1cf0c9d9e86a38 - .quad 0xc086242ec92eaee8 - .quad 0xbe1cef0946455411 - .quad 0xc08624324ecbaf98 - .quad 0xbe1cefea60907739 - .quad 0xc0862435d2dc7160 - .quad 0xbe1cf1ed0934ce42 - .quad 0xc086243955624ff8 - .quad 0xbe1cf191ba746c7d - .quad 0xc086243cd65ea548 - .quad 0xbe1ceeec78cf2a7e - .quad 0xc086244055d2c968 - .quad 0xbe1cef345284c119 - .quad 0xc0862443d3c012b8 - .quad 0xbe1cf24f77355219 - .quad 0xc08624475027d5e8 - .quad 0xbe1cf05bf087e114 - .quad 0xc086244acb0b65d0 - .quad 0xbe1cef3504a32189 - .quad 0xc086244e446c1398 - .quad 0xbe1ceff54b2a406f - .quad 0xc0862451bc4b2eb8 - .quad 0xbe1cf0757d54ed4f - .quad 0xc086245532aa04f0 - .quad 0xbe1cf0c8099fdfd5 - .quad 0xc0862458a789e250 - .quad 0xbe1cf0b173796a31 - .quad 0xc086245c1aec1138 - .quad 0xbe1cf11d8734540d - .quad 0xc086245f8cd1da60 - .quad 0xbe1cf1916a723ceb - .quad 0xc0862462fd3c84d8 - .quad 0xbe1cf19a911e1da7 - .quad 0xc08624666c2d5608 - .quad 0xbe1cf23a9ef72e4f - .quad 0xc0862469d9a591c0 - .quad 0xbe1cef503d947663 - .quad 0xc086246d45a67a18 - .quad 0xbe1cf0fceeb1a0b2 - .quad 0xc0862470b0314fa8 - .quad 0xbe1cf107e27e4fbc - .quad 0xc086247419475160 - .quad 0xbe1cf03dd9922331 - .quad 0xc086247780e9bc98 - .quad 0xbe1cefce1a10e129 - .quad 0xc086247ae719cd18 - .quad 0xbe1ceea47f73c4f6 - .quad 0xc086247e4bd8bd10 - .quad 0xbe1ceec0ac56d100 - .quad 0xc0862481af27c528 - .quad 0xbe1cee8a6593278a - .quad 0xc086248511081c70 - .quad 0xbe1cf2231dd9dec7 - .quad 0xc0862488717af888 - .quad 0xbe1cf0b4b8ed7da8 - .quad 0xc086248bd0818d68 - .quad 0xbe1cf1bd8d835002 - .quad 0xc086248f2e1d0d98 - .quad 0xbe1cf259acc107f4 - .quad 0xc08624928a4eaa20 - .quad 0xbe1cee897636b00c - .quad 0xc0862495e5179270 - .quad 0xbe1cee757f20c326 - .quad 0xc08624993e78f490 - .quad 0xbe1cefafd3aa54a4 - .quad 0xc086249c9673fd10 - .quad 0xbe1cee7298d38b97 - .quad 0xc086249fed09d6f8 - .quad 0xbe1ceedc158d4ceb - .quad 0xc08624a3423babe0 - .quad 0xbe1cf2282987cb2e - .quad 0xc08624a6960aa400 - .quad 0xbe1cefe7381ecc4b - .quad 0xc08624a9e877e600 - .quad 0xbe1cef328dbbce80 - .quad 0xc08624ad39849728 - .quad 0xbe1cefde45f3cc71 - .quad 0xc08624b08931db58 - .quad 0xbe1cefa8b89433b9 - .quad 0xc08624b3d780d500 - .quad 0xbe1cef6773c0b139 - .quad 0xc08624b72472a528 - .quad 0xbe1cf031c931c11f - .quad 0xc08624ba70086b78 - .quad 0xbe1cf088f49275e7 - .quad 0xc08624bdba434630 - .quad 0xbe1cf17de0eaa86d - .quad 0xc08624c103245238 - .quad 0xbe1cefd492f1ba75 - .quad 0xc08624c44aacab08 - .quad 0xbe1cf1253e154466 - .quad 0xc08624c790dd6ad0 - .quad 0xbe1cf0fb09ee6d55 - .quad 0xc08624cad5b7aa58 - .quad 0xbe1cf1f08dd048fe - .quad 0xc08624ce193c8120 - .quad 0xbe1ceeca0809697f - .quad 0xc08624d15b6d0538 - .quad 0xbe1cef8d5662d968 - .quad 0xc08624d49c4a4b78 - .quad 0xbe1cee97b556ed78 - .quad 0xc08624d7dbd56750 - .quad 0xbe1cf1b14b6acb75 - .quad 0xc08624db1a0f6b00 - .quad 0xbe1cef1e860623f2 - .quad 0xc08624de56f96758 - .quad 0xbe1ceeaf4d156f3d - .quad 0xc08624e192946bf0 - .quad 0xbe1ceecc12b400ed - .quad 0xc08624e4cce18710 - .quad 0xbe1cf180c40c794f - .quad 0xc08624e805e1c5c8 - .quad 0xbe1cf185a08f7f65 - .quad 0xc08624eb3d9633d8 - .quad 0xbe1cef45fc924078 - .quad 0xc08624ee73ffdbb0 - .quad 0xbe1cf1e4f457f32a - .quad 0xc08624f1a91fc6a0 - .quad 0xbe1cf040147b8a5a - .quad 0xc08624f4dcf6fc98 - .quad 0xbe1cf1effca0dfb2 - .quad 0xc08624f80f868468 - .quad 0xbe1cf0470146e5bc - .quad 0xc08624fb40cf6390 - .quad 0xbe1cef4dd186e501 - .quad 0xc08624fe70d29e60 - .quad 0xbe1ceebe257f66c7 - .quad 0xc08625019f9137f0 - .quad 0xbe1ceefb7a1c395c - .quad 0xc0862504cd0c3220 - .quad 0xbe1cf209dedfed8c - .quad 0xc0862507f9448db0 - .quad 0xbe1cf082da464994 - .quad 0xc086250b243b4a18 - .quad 0xbe1cee88694a73cf - .quad 0xc086250e4df165a0 - .quad 0xbe1cf0b61e8f0531 - .quad 0xc08625117667dd78 - .quad 0xbe1cf1106599c962 - .quad 0xc08625149d9fad98 - .quad 0xbe1ceff1ee88af1f - .quad 0xc0862517c399d0c8 - .quad 0xbe1cf0f746994ef6 - .quad 0xc086251ae85740b8 - .quad 0xbe1cefe8a1d077e4 - .quad 0xc086251e0bd8f5e0 - .quad 0xbe1cf1a1da036092 - .quad 0xc08625212e1fe7a8 - .quad 0xbe1cf0f8a7786fcd - .quad 0xc08625244f2d0c48 - .quad 0xbe1cefa1174a07a7 - .quad 0xc08625276f0158d8 - .quad 0xbe1cef1043aa5b25 - .quad 0xc086252a8d9dc150 - .quad 0xbe1cf15d521c169d - .quad 0xc086252dab033898 - .quad 0xbe1cf220bba8861f - .quad 0xc0862530c732b078 - .quad 0xbe1cef51e310eae2 - .quad 0xc0862533e22d1988 - .quad 0xbe1cf222fcedd8ae - .quad 0xc0862536fbf36370 - .quad 0xbe1cefdb4da4bda8 - .quad 0xc086253a14867ca0 - .quad 0xbe1ceeafc1112171 - .quad 0xc086253d2be75280 - .quad 0xbe1cee99dfb4b408 - .quad 0xc08625404216d160 - .quad 0xbe1cf22d2536f06b - .quad 0xc08625435715e498 - .quad 0xbe1cef6abbf2e268 - .quad 0xc08625466ae57648 - .quad 0xbe1cf093a14789f5 - .quad 0xc08625497d866fa0 - .quad 0xbe1cf0f93655603c - .quad 0xc086254c8ef9b8b8 - .quad 0xbe1cf1cc40c9aafc - .quad 0xc086254f9f4038a8 - .quad 0xbe1ceeea5f4e9157 - .quad 0xc0862552ae5ad568 - .quad 0xbe1cefa9f52d4997 - .quad 0xc0862555bc4a7400 - .quad 0xbe1cefa490a638ff - .quad 0xc0862558c90ff868 - .quad 0xbe1cef7fcf797d6f - .quad 0xc086255bd4ac4590 - .quad 0xbe1cf1b4c51113c9 - .quad 0xc086255edf203d78 - .quad 0xbe1cef55e5b4a55d - .quad 0xc0862561e86cc100 - .quad 0xbe1cf0d37a25f9dc - .quad 0xc0862564f092b028 - .quad 0xbe1ceebe9efc19d9 - .quad 0xc0862567f792e9d8 - .quad 0xbe1cee8ad30a57b5 - .quad 0xc086256afd6e4c08 - .quad 0xbe1cef4e1817b90b - .quad 0xc086256e0225b3b8 - .quad 0xbe1cee7fa9229996 - .quad 0xc086257105b9fce0 - .quad 0xbe1cf0b54963d945 - .quad 0xc0862574082c0298 - .quad 0xbe1cee5f2f3c7995 - .quad 0xc0862577097c9ee0 - .quad 0xbe1cf0828e303a2c - .quad 0xc086257a09acaae0 - .quad 0xbe1cf172c3078947 - .quad 0xc086257d08bcfec0 - .quad 0xbe1cf189252afa22 - .quad 0xc086258006ae71b8 - .quad 0xbe1cefdb80426923 - .quad 0xc08625830381da08 - .quad 0xbe1ceef1391a0372 - .quad 0xc0862585ff380d00 - .quad 0xbe1cf17720c78d13 - .quad 0xc0862588f9d1df18 - .quad 0xbe1ceef1f9027d83 - .quad 0xc086258bf35023b8 - .quad 0xbe1cf06fac99dec9 - .quad 0xc086258eebb3ad78 - .quad 0xbe1cf1373eeb45c0 - .quad 0xc0862591e2fd4e00 - .quad 0xbe1cef777536bb81 - .quad 0xc0862594d92dd600 - .quad 0xbe1cf0f43ca40766 - .quad 0xc0862597ce461558 - .quad 0xbe1cefb2cfc6766b - .quad 0xc086259ac246daf0 - .quad 0xbe1ceea49e64ffa2 - .quad 0xc086259db530f4c8 - .quad 0xbe1cf250fa457dec - .quad 0xc08625a0a7053018 - .quad 0xbe1cf17d8bb2a44e - .quad 0xc08625a397c45918 - .quad 0xbe1cf1d5906d54b7 - .quad 0xc08625a6876f3b30 - .quad 0xbe1cf08fe7b31780 - .quad 0xc08625a97606a0e0 - .quad 0xbe1cef13edfc9d11 - .quad 0xc08625ac638b53c8 - .quad 0xbe1cef9d2b107219 - .quad 0xc08625af4ffe1cb0 - .quad 0xbe1cf1ddd4ff6160 - .quad 0xc08625b23b5fc390 - .quad 0xbe1cefa02a996495 - .quad 0xc08625b525b10f68 - .quad 0xbe1cf166a7e37ee5 - .quad 0xc08625b80ef2c680 - .quad 0xbe1cef0b171068a5 - .quad 0xc08625baf725ae28 - .quad 0xbe1cf05c80779283 - .quad 0xc08625bdde4a8af0 - .quad 0xbe1cf1bbfbffb889 - .quad 0xc08625c0c4622090 - .quad 0xbe1cf0b8666c0124 - .quad 0xc08625c3a96d31e0 - .quad 0xbe1cf0a8fcf47a86 - .quad 0xc08625c68d6c80f0 - .quad 0xbe1cef46e18cb092 - .quad 0xc08625c97060cef0 - .quad 0xbe1cf1458a350efb - .quad 0xc08625cc524adc58 - .quad 0xbe1ceeea1dadce12 - .quad 0xc08625cf332b68b0 - .quad 0xbe1cf0a1bfdc44c7 - .quad 0xc08625d2130332d0 - .quad 0xbe1cef96d02da73e - .quad 0xc08625d4f1d2f8a8 - .quad 0xbe1cf2451c3c7701 - .quad 0xc08625d7cf9b7778 - .quad 0xbe1cf10d08f83812 - .quad 0xc08625daac5d6ba0 - .quad 0xbe1ceec5b4895c5e - .quad 0xc08625dd881990b0 - .quad 0xbe1cf14e1325c5e4 - .quad 0xc08625e062d0a188 - .quad 0xbe1cf21d0904be12 - .quad 0xc08625e33c835838 - .quad 0xbe1ceed0839bcf21 - .quad 0xc08625e615326df0 - .quad 0xbe1cf1bb944889d2 - .quad 0xc08625e8ecde9b48 - .quad 0xbe1cee738e85eece - .quad 0xc08625ebc38897e0 - .quad 0xbe1cf25c2bc6ef12 - .quad 0xc08625ee99311ac8 - .quad 0xbe1cf132b70a41ad - .quad 0xc08625f16dd8da28 - .quad 0xbe1cf1984236a6e3 - .quad 0xc08625f441808b78 - .quad 0xbe1cf19ae74998f9 - .quad 0xc08625f71428e370 - .quad 0xbe1cef3e175d61a1 - .quad 0xc08625f9e5d295f8 - .quad 0xbe1cf101f9868fd9 - .quad 0xc08625fcb67e5658 - .quad 0xbe1cee69db83dcd2 - .quad 0xc08625ff862cd6f8 - .quad 0xbe1cf081b636af51 - .quad 0xc086260254dec9a8 - .quad 0xbe1cee62c7d59b3e - .quad 0xc08626052294df58 - .quad 0xbe1cf1b745c57716 - .quad 0xc0862607ef4fc868 - .quad 0xbe1cef3d2800ea23 - .quad 0xc086260abb103458 - .quad 0xbe1cef480ff1acd2 - .quad 0xc086260d85d6d200 - .quad 0xbe1cf2424c9a17ef - .quad 0xc08626104fa44f90 - .quad 0xbe1cf12cfde90fd5 - .quad 0xc086261318795a68 - .quad 0xbe1cf21f590dd5b6 - .quad 0xc0862615e0569f48 - .quad 0xbe1cf0c50f9cd28a - .quad 0xc0862618a73cca30 - .quad 0xbe1ceedbdb520545 - .quad 0xc086261b6d2c8668 - .quad 0xbe1cf0b030396011 - .quad 0xc086261e32267e98 - .quad 0xbe1cf19917010e96 - .quad 0xc0862620f62b5cb0 - .quad 0xbe1cf07331355985 - .quad 0xc0862623b93bc9e8 - .quad 0xbe1cf01ae921a1c3 - .quad 0xc08626267b586ed0 - .quad 0xbe1cefe5cf0dbf0c - .quad 0xc08626293c81f348 - .quad 0xbe1cf01b258aeb50 - .quad 0xc086262bfcb8fe88 - .quad 0xbe1cee6b9e7f4c68 - .quad 0xc086262ebbfe3710 - .quad 0xbe1cee684a9b21c9 - .quad 0xc08626317a5242b8 - .quad 0xbe1cf1f8bcde9a8b - .quad 0xc086263437b5c6c0 - .quad 0xbe1cf1d063d36238 - .quad 0xc0862636f42967a8 - .quad 0xbe1cf1e31a19075e - .quad 0xc0862639afadc950 - .quad 0xbe1cf1d8efdf7e7d - .quad 0xc086263c6a438ef0 - .quad 0xbe1cf1812ee72dba - .quad 0xc086263f23eb5b18 - .quad 0xbe1cf1449a9a2279 - .quad 0xc0862641dca5cfb8 - .quad 0xbe1cee96edce5085 - .quad 0xc086264494738e08 - .quad 0xbe1cf06797bd03b2 - .quad 0xc08626474b5536b8 - .quad 0xbe1cef91b9b7ffc1 - .quad 0xc086264a014b69c0 - .quad 0xbe1cef4b6721278f - .quad 0xc086264cb656c678 - .quad 0xbe1cf1942925eb4a - .quad 0xc086264f6a77eba8 - .quad 0xbe1cefa2c7bc2e39 - .quad 0xc08626521daf7758 - .quad 0xbe1cf252595aceb3 - .quad 0xc0862654cffe0718 - .quad 0xbe1cee8e9ae47ec2 - .quad 0xc0862657816437a8 - .quad 0xbe1cf1bf913828fa - .quad 0xc086265a31e2a558 - .quad 0xbe1cf23475d6b366 - .quad 0xc086265ce179ebc8 - .quad 0xbe1cef8df00a922b - .quad 0xc086265f902aa5f0 - .quad 0xbe1cef279bfa43e0 - .quad 0xc08626623df56e38 - .quad 0xbe1cf080e10b8365 - .quad 0xc0862664eadade70 - .quad 0xbe1cf1a518f9b544 - .quad 0xc086266796db8fd0 - .quad 0xbe1cef9308fed9e9 - .quad 0xc086266a41f81ae8 - .quad 0xbe1ceea3ae6b19c9 - .quad 0xc086266cec3117b8 - .quad 0xbe1ceef06003d4c2 - .quad 0xc086266f95871da8 - .quad 0xbe1cf0b8457ffb0c - .quad 0xc08626723dfac390 - .quad 0xbe1cf0c526745ad6 - .quad 0xc0862674e58c9fa8 - .quad 0xbe1cf0cf91ff7b5d - .quad 0xc08626778c3d4798 - .quad 0xbe1cefe260819380 - .quad 0xc086267a320d5070 - .quad 0xbe1ceebd90aa27a3 - .quad 0xc086267cd6fd4ea8 - .quad 0xbe1cf0388121dffa - .quad 0xc086267f7b0dd630 - .quad 0xbe1cf1a3881435f1 - .quad 0xc08626821e3f7a68 - .quad 0xbe1cef28e9d9ac52 - .quad 0xc0862684c092ce08 - .quad 0xbe1cf02d300062dd - .quad 0xc086268762086350 - .quad 0xbe1cefaee1edfa35 - .quad 0xc086268a02a0cbe0 - .quad 0xbe1cf0a5a052e936 - .quad 0xc086268ca25c98d8 - .quad 0xbe1cee60a4a497ed - .quad 0xc086268f413c5ab0 - .quad 0xbe1cf0e4a5d0cf49 - .quad 0xc0862691df40a170 - .quad 0xbe1cf149235a4e6e - .quad 0xc08626947c69fc80 - .quad 0xbe1cf215180b9fcc - .quad 0xc086269718b8fac8 - .quad 0xbe1cef9b156a9840 - .quad 0xc0862699b42e2a90 - .quad 0xbe1cf054c91441be - .quad 0xc086269c4eca19a8 - .quad 0xbe1cf13ded26512c - .quad 0xc086269ee88d5550 - .quad 0xbe1cf22ea4d8ac06 - .quad 0xc08626a181786a40 - .quad 0xbe1cf2354666ee2e - .quad 0xc08626a4198be4a8 - .quad 0xbe1cefef936752b3 - .quad 0xc08626a6b0c85020 - .quad 0xbe1cf1e360a9db68 - .quad 0xc08626a9472e37d8 - .quad 0xbe1ceed6aeb812c5 - .quad 0xc08626abdcbe2650 - .quad 0xbe1cf227340b4986 - .quad 0xc08626ae7178a5b0 - .quad 0xbe1cf0215a0cbe0d - .quad 0xc08626b1055e3f70 - .quad 0xbe1cf256adf0ae26 - .quad 0xc08626b3986f7ca8 - .quad 0xbe1ceff3c67aed06 - .quad 0xc08626b62aace5c8 - .quad 0xbe1cf2159fb93652 - .quad 0xc08626b8bc1702e0 - .quad 0xbe1cf01e6dbd1c7f - .quad 0xc08626bb4cae5b60 - .quad 0xbe1cf009e75d1c0c - .quad 0xc08626bddc737648 - .quad 0xbe1ceec10a020e73 - .quad 0xc08626c06b66da08 - .quad 0xbe1cf06d5783eee7 - .quad 0xc08626c2f9890ca0 - .quad 0xbe1cf0cb8f169ffe - .quad 0xc08626c586da9388 - .quad 0xbe1cef7de2452430 - .quad 0xc08626c8135bf3b0 - .quad 0xbe1cf05da6f783ae - .quad 0xc08626ca9f0db198 - .quad 0xbe1cefcc877d681d - .quad 0xc08626cd29f05138 - .quad 0xbe1cef0531954ab3 - .quad 0xc08626cfb4045608 - .quad 0xbe1cf06b8565ea3d - .quad 0xc08626d23d4a4310 - .quad 0xbe1cefdc455d9d7e - .quad 0xc08626d4c5c29ad0 - .quad 0xbe1ceefc47e8fa64 - .quad 0xc08626d74d6ddf48 - .quad 0xbe1cf1872bf033f2 - .quad 0xc08626d9d44c9210 - .quad 0xbe1cf19d91087f9d - .quad 0xc08626dc5a5f3438 - .quad 0xbe1cf012d444c6ab - .quad 0xc08626dedfa64650 - .quad 0xbe1cf0ba528ee153 - .quad 0xc08626e164224880 - .quad 0xbe1ceeb431709788 - .quad 0xc08626e3e7d3ba60 - .quad 0xbe1cf0b9af31a6a5 - .quad 0xc08626e66abb1b28 - .quad 0xbe1cf168fb2e135b - .quad 0xc08626e8ecd8e990 - .quad 0xbe1cef9097461c93 - .quad 0xc08626eb6e2da3d0 - .quad 0xbe1cee7a434735d8 - .quad 0xc08626edeeb9c7a8 - .quad 0xbe1cf235732b86f2 - .quad 0xc08626f06e7dd280 - .quad 0xbe1cefe1510b89e6 - .quad 0xc08626f2ed7a4120 - .quad 0xbe1cf1f64b9b80ef - .quad 0xc08626f56baf9000 - .quad 0xbe1cf08f320ca339 - .quad 0xc08626f7e91e3b08 - .quad 0xbe1cf1b1de2808a1 - .quad 0xc08626fa65c6bdc0 - .quad 0xbe1cf1976d778b28 - .quad 0xc08626fce1a99338 - .quad 0xbe1ceef40a4f076f - .quad 0xc08626ff5cc73600 - .quad 0xbe1cef3e45869ce3 - .quad 0xc0862701d7202048 - .quad 0xbe1ceef601b4c9d6 - .quad 0xc086270450b4cbc0 - .quad 0xbe1cf1eaf0b57fd6 - .quad 0xc0862706c985b1c0 - .quad 0xbe1cef82a44990f3 - .quad 0xc086270941934b10 - .quad 0xbe1ceefe32981f2c - .quad 0xc086270bb8de1018 - .quad 0xbe1cefbf6f5a0445 - .quad 0xc086270e2f6678d0 - .quad 0xbe1cf18dba75792c - .quad 0xc0862710a52cfcc8 - .quad 0xbe1cf0da64ce995f - .quad 0xc08627131a321318 - .quad 0xbe1cef04ac0fb802 - .quad 0xc08627158e763268 - .quad 0xbe1cee9d4e2ad9bd - .quad 0xc086271801f9d0f8 - .quad 0xbe1cefa9b55407b5 - .quad 0xc086271a74bd64a0 - .quad 0xbe1cefe6bd329570 - .quad 0xc086271ce6c162c8 - .quad 0xbe1cef0b1205dc85 - .quad 0xc086271f58064068 - .quad 0xbe1cef092a785e3f - .quad 0xc0862721c88c7210 - .quad 0xbe1cf050dcdaac30 - .quad 0xc086272438546be8 - .quad 0xbe1cf210907ded8b - .quad 0xc0862726a75ea1b8 - .quad 0xbe1cee760be44f99 - .quad 0xc086272915ab86c0 - .quad 0xbe1ceeeee07c2bcc - .quad 0xc086272b833b8df0 - .quad 0xbe1cf06874992df5 - .quad 0xc086272df00f29d0 - .quad 0xbe1cef8fac5d4899 - .quad 0xc08627305c26cc70 - .quad 0xbe1cf1103241cc99 - .quad 0xc0862732c782e788 - .quad 0xbe1cf1d35fef83fe - .quad 0xc08627353223ec68 - .quad 0xbe1cef3ec8133e1d - .quad 0xc08627379c0a4be8 - .quad 0xbe1cef7261daccd8 - .quad 0xc086273a05367688 - .quad 0xbe1cf18656c50806 - .quad 0xc086273c6da8dc68 - .quad 0xbe1cf1c8736e049a - .quad 0xc086273ed561ed38 - .quad 0xbe1cf1f93bff4911 - .quad 0xc08627413c621848 - .quad 0xbe1cf188a4ea680c - .quad 0xc0862743a2a9cc80 - .quad 0xbe1cf1d270930c80 - .quad 0xc086274608397868 - .quad 0xbe1cf25a328c28e2 - .quad 0xc08627486d118a28 - .quad 0xbe1cf106f90aa3b8 - .quad 0xc086274ad1326f80 - .quad 0xbe1cee5e9d2e885a - .quad 0xc086274d349c95c0 - .quad 0xbe1cf1c0bac27228 - .quad 0xc086274f975069f8 - .quad 0xbe1cf1a1500f9b1c - .quad 0xc0862751f94e58c0 - .quad 0xbe1cefc30663ac44 - .quad 0xc08627545a96ce48 - .quad 0xbe1cf17123e427a2 - .quad 0xc0862756bb2a3678 - .quad 0xbe1cefb92749fea4 - .quad 0xc08627591b08fcc0 - .quad 0xbe1cefa40e1ea74a - .quad 0xc086275b7a338c40 - .quad 0xbe1cee6f4612c3e9 - .quad 0xc086275dd8aa4fa8 - .quad 0xbe1cf1c54a053627 - .quad 0xc0862760366db168 - .quad 0xbe1ceff5eb503d9e - .quad 0xc0862762937e1b70 - .quad 0xbe1cf02e47f10cee - .quad 0xc0862764efdbf768 - .quad 0xbe1ceeb06e1d0dad - .quad 0xc08627674b87ae88 - .quad 0xbe1cf10aadd6dba5 - .quad 0xc0862769a681a9c0 - .quad 0xbe1cf24e9913d30f - .quad 0xc086276c00ca51a0 - .quad 0xbe1cef47b301e312 - .quad 0xc086276e5a620e48 - .quad 0xbe1ceeb1cefc2e85 - .quad 0xc0862770b3494788 - .quad 0xbe1cf16f1fbbe011 - .quad 0xc08627730b8064e8 - .quad 0xbe1ceebdf75174c7 - .quad 0xc08627756307cd70 - .quad 0xbe1cf06e3871a0da - .quad 0xc0862777b9dfe7f0 - .quad 0xbe1cef16799fd554 - .quad 0xc086277a10091ac0 - .quad 0xbe1cf248dabf5377 - .quad 0xc086277c6583cc00 - .quad 0xbe1cf0c78d92a2cd - .quad 0xc086277eba506158 - .quad 0xbe1cf0b911b029f0 - .quad 0xc08627810e6f4028 - .quad 0xbe1cefdc24719766 - .quad 0xc086278361e0cd70 - .quad 0xbe1cefbb6562b7e7 - .quad 0xc0862785b4a56dd8 - .quad 0xbe1cf1e0afb349ec - .quad 0xc086278806bd85c0 - .quad 0xbe1cf008292e52fc - .quad 0xc086278a58297918 - .quad 0xbe1cf053073872bf - .quad 0xc086278ca8e9ab88 - .quad 0xbe1cf17a0a55a947 - .quad 0xc086278ef8fe8068 - .quad 0xbe1ceeffb0b60234 - .quad 0xc086279148685aa0 - .quad 0xbe1cf162204794a8 - .quad 0xc086279397279ce0 - .quad 0xbe1cf24cc8cb48ac - .quad 0xc0862795e53ca978 - .quad 0xbe1cf0c9be68d5c3 - .quad 0xc086279832a7e258 - .quad 0xbe1cf172cd3d7388 - .quad 0xc086279a7f69a930 - .quad 0xbe1ceea2465fbce5 - .quad 0xc086279ccb825f40 - .quad 0xbe1cf0a386d2500f - .quad 0xc086279f16f26590 - .quad 0xbe1cf1e338ddc18a - .quad 0xc08627a161ba1cd0 - .quad 0xbe1cef1f5049867f - .quad 0xc08627a3abd9e548 - .quad 0xbe1cef96c1ea8b1f - .quad 0xc08627a5f5521f00 - .quad 0xbe1cf138f6fd3c26 - .quad 0xc08627a83e2329b0 - .quad 0xbe1cf0d4fcbfdf3a - .quad 0xc08627aa864d64b0 - .quad 0xbe1cf24870c12c81 - .quad 0xc08627accdd12f18 - .quad 0xbe1cf0ae2a56348d - .quad 0xc08627af14aee7a0 - .quad 0xbe1cee8ca1a9b893 - .quad 0xc08627b15ae6eca8 - .quad 0xbe1cf20414d637b0 - .quad 0xc08627b3a0799c60 - .quad 0xbe1cf0fc6b7b12d8 - .quad 0xc08627b5e5675488 - .quad 0xbe1cf152d93c4a00 - .quad 0xc08627b829b072a0 - .quad 0xbe1cf1073f9b77c2 - .quad 0xc08627ba6d5553d8 - .quad 0xbe1cee694f97d5a4 - .quad 0xc08627bcb0565500 - .quad 0xbe1cf0456b8239d7 - .quad 0xc08627bef2b3d2b0 - .quad 0xbe1cf211497127e3 - .quad 0xc08627c1346e2930 - .quad 0xbe1cf01856c0384d - .quad 0xc08627c37585b468 - .quad 0xbe1cefa7dd05479e - .quad 0xc08627c5b5fad000 - .quad 0xbe1cef3ae8e50b93 - .quad 0xc08627c7f5cdd750 - .quad 0xbe1ceea5f32fdd3a - .quad 0xc08627ca34ff2560 - .quad 0xbe1cef424caeb8d9 - .quad 0xc08627cc738f14f0 - .quad 0xbe1cf0194d07a81f - .quad 0xc08627ceb17e0070 - .quad 0xbe1cf20f452000c1 - .quad 0xc08627d0eecc4210 - .quad 0xbe1cf00e356218e4 - .quad 0xc08627d32b7a33a0 - .quad 0xbe1cef30484b4bcb - .quad 0xc08627d567882eb0 - .quad 0xbe1ceeea11a6641b - .quad 0xc08627d7a2f68c80 - .quad 0xbe1cf13492d5bd7b - .quad 0xc08627d9ddc5a618 - .quad 0xbe1ceeb7048fad96 - .quad 0xc08627dc17f5d418 - .quad 0xbe1ceef0666f0477 - .quad 0xc08627de51876ee8 - .quad 0xbe1cf060d4b8b5c2 - .quad 0xc08627e08a7acea8 - .quad 0xbe1cf0b2a4b6ff8c - .quad 0xc08627e2c2d04b28 - .quad 0xbe1cf0e34809a875 - .quad 0xc08627e4fa883bf0 - .quad 0xbe1cf16bf74a3522 - .quad 0xc08627e731a2f848 - .quad 0xbe1cee6a24623d57 - .quad 0xc08627e96820d718 - .quad 0xbe1cefc7b4f1528e - .quad 0xc08627eb9e022f18 - .quad 0xbe1cf163051f3548 - .quad 0xc08627edd34756b8 - .quad 0xbe1cef36b3366305 - .quad 0xc08627f007f0a408 - .quad 0xbe1cf18134625550 - .quad 0xc08627f23bfe6cf0 - .quad 0xbe1cf0ec32ec1a11 - .quad 0xc08627f46f710700 - .quad 0xbe1ceeb3b64f3edc - .quad 0xc08627f6a248c778 - .quad 0xbe1cf0cd15805bc8 - .quad 0xc08627f8d4860368 - .quad 0xbe1cf20db3bddebe - .quad 0xc08627fb06290f90 - .quad 0xbe1cf25188430e25 - .quad 0xc08627fd37324070 - .quad 0xbe1ceea1713490f9 - .quad 0xc08627ff67a1ea28 - .quad 0xbe1cf159521d234c - .quad 0xc0862801977860b8 - .quad 0xbe1cf24dfe50783b - .quad 0xc0862803c6b5f7d0 - .quad 0xbe1ceef2ef89a60b - .quad 0xc0862805f55b02c8 - .quad 0xbe1cee7fc919d62c - .quad 0xc08628082367d4c0 - .quad 0xbe1cf215a7fb513a - .quad 0xc086280a50dcc0a8 - .quad 0xbe1cf0e4401c5ed4 - .quad 0xc086280c7dba1910 - .quad 0xbe1cf04ec734d256 - .quad 0xc086280eaa003050 - .quad 0xbe1cf010ad787fea - .quad 0xc0862810d5af5880 - .quad 0xbe1cee622478393d - .quad 0xc086281300c7e368 - .quad 0xbe1cf01c7482564f - .quad 0xc08628152b4a22a0 - .quad 0xbe1cf0de20d33536 - .quad 0xc086281755366778 - .quad 0xbe1cef2edae5837d - .quad 0xc08628197e8d02f0 - .quad 0xbe1cf0a345318cc9 - .quad 0xc086281ba74e45d8 - .quad 0xbe1cf20085aa34b8 - .quad 0xc086281dcf7a80c0 - .quad 0xbe1cef5fa845ad83 - .quad 0xc086281ff71203e0 - .quad 0xbe1cf050d1df69c4 - .quad 0xc08628221e151f48 - .quad 0xbe1ceffe43c035b9 - .quad 0xc0862824448422b8 - .quad 0xbe1cf14f3018d3c2 - .quad 0xc08628266a5f5dc0 - .quad 0xbe1cef0a5fbae83d - .quad 0xc08628288fa71f98 - .quad 0xbe1ceff8a95b72a1 - .quad 0xc086282ab45bb750 - .quad 0xbe1cef073aa9849b - .quad 0xc086282cd87d73a8 - .quad 0xbe1cef69b3835c02 - .quad 0xc086282efc0ca328 - .quad 0xbe1cf0bc139379a9 - .quad 0xc08628311f099420 - .quad 0xbe1cef247a9ec596 - .quad 0xc086283341749490 - .quad 0xbe1cef74bbcc488a - .quad 0xc0862835634df248 - .quad 0xbe1cef4bc42e7b8e - .quad 0xc08628378495fad0 - .quad 0xbe1cf136d4d5a810 - .quad 0xc0862839a54cfb80 - .quad 0xbe1cf0d290b24dd8 - .quad 0xc086283bc5734168 - .quad 0xbe1ceeebde8e0065 - .quad 0xc086283de5091950 - .quad 0xbe1cf1a09f60aa1e - .quad 0xc0862840040ecfe0 - .quad 0xbe1cf0803947a234 - .quad 0xc08628422284b168 - .quad 0xbe1cf0abf7638127 - .quad 0xc0862844406b0a08 - .quad 0xbe1cf0f73ee12058 - .quad 0xc08628465dc225a0 - .quad 0xbe1cf2079971b26c - .quad 0xc08628487a8a4fe0 - .quad 0xbe1cee74957564b1 - .quad 0xc086284a96c3d420 - .quad 0xbe1ceee77c1b7d43 - .quad 0xc086284cb26efd90 - .quad 0xbe1cf23addba6e09 - .quad 0xc086284ecd8c1730 - .quad 0xbe1cf199f4a1da60 - .quad 0xc0862850e81b6bb0 - .quad 0xbe1cf09fdea81393 - .quad 0xc0862853021d4588 - .quad 0xbe1cf176adb417f7 - .quad 0xc08628551b91ef00 - .quad 0xbe1cf0f64f84a8da - .quad 0xc08628573479b220 - .quad 0xbe1ceec34cf49523 - .quad 0xc08628594cd4d8a8 - .quad 0xbe1cf16d60fbe0bb - .quad 0xc086285b64a3ac40 - .quad 0xbe1cee8de7acfc7b - .quad 0xc086285d7be67630 - .quad 0xbe1ceee6256cce8d - .quad 0xc086285f929d7fa0 - .quad 0xbe1cee7d66a3d8a5 - .quad 0xc0862861a8c91170 - .quad 0xbe1cf0bef8265792 - .quad 0xc0862863be697458 - .quad 0xbe1cf097f890c6f8 - .quad 0xc0862865d37ef0c8 - .quad 0xbe1cf09502d5c3fc - .quad 0xc0862867e809cf00 - .quad 0xbe1ceeffb239dac7 - .quad 0xc0862869fc0a56f8 - .quad 0xbe1cf1fbfff95c98 - .quad 0xc086286c0f80d090 - .quad 0xbe1cefa57ad3eef7 - .quad 0xc086286e226d8348 - .quad 0xbe1cf22c58b9183d - .quad 0xc086287034d0b690 - .quad 0xbe1ceff262d0a248 - .quad 0xc086287246aab180 - .quad 0xbe1cefa7bc194186 - .quad 0xc086287457fbbb08 - .quad 0xbe1cf06782d784d9 - .quad 0xc086287668c419e0 - .quad 0xbe1cf1d44d0eaa07 - .quad 0xc086287879041490 - .quad 0xbe1cf034803c8a48 - .quad 0xc086287a88bbf158 - .quad 0xbe1cf08e84916b6f - .quad 0xc086287c97ebf650 - .quad 0xbe1cf0c4d3dc1bc7 - .quad 0xc086287ea6946958 - .quad 0xbe1cefb1e4625943 - .quad 0xc0862880b4b59010 - .quad 0xbe1cf143efdd1fd0 - .quad 0xc0862882c24faff8 - .quad 0xbe1cee9896d016da - .quad 0xc0862884cf630e38 - .quad 0xbe1cf2186072f2cc - .quad 0xc0862886dbefeff0 - .quad 0xbe1cef9217633d34 - .quad 0xc0862888e7f699e0 - .quad 0xbe1cf05603549486 - .quad 0xc086288af37750b0 - .quad 0xbe1cef50fff513d3 - .quad 0xc086288cfe7258c0 - .quad 0xbe1cf127713b32d0 - .quad 0xc086288f08e7f650 - .quad 0xbe1cf05015520f3d - .quad 0xc086289112d86d58 - .quad 0xbe1cf12eb458b26f - .quad 0xc08628931c4401a8 - .quad 0xbe1cf22eae2887ed - .quad 0xc0862895252af6e0 - .quad 0xbe1cefdd6656dd2d - .quad 0xc08628972d8d9058 - .quad 0xbe1cf1048ea4e646 - .quad 0xc0862899356c1150 - .quad 0xbe1ceec4501167e9 - .quad 0xc086289b3cc6bcb8 - .quad 0xbe1cf0ad52becc3f - .quad 0xc086289d439dd568 - .quad 0xbe1cf0daa4e00e35 - .quad 0xc086289f49f19df8 - .quad 0xbe1cf00b80de8d6a - .quad 0xc08628a14fc258c8 - .quad 0xbe1cf1bcf2ea8464 - .quad 0xc08628a355104818 - .quad 0xbe1cf0435e2782b0 - .quad 0xc08628a559dbade0 - .quad 0xbe1cf0e3e1a5f56c - .quad 0xc08628a75e24cbf8 - .quad 0xbe1cefed9d5a721d - .quad 0xc08628a961ebe3f8 - .quad 0xbe1cf0d2d74321e2 - .quad 0xc08628ab65313750 - .quad 0xbe1cf24200eb55e9 - .quad 0xc08628ad67f50740 - .quad 0xbe1cf23e9d7cf979 - .quad 0xc08628af6a3794d0 - .quad 0xbe1cf23a088f421c - .quad 0xc08628b16bf920e0 - .quad 0xbe1cef2c1de1ab32 - .quad 0xc08628b36d39ec08 - .quad 0xbe1cf1abc231f7b2 - .quad 0xc08628b56dfa36d0 - .quad 0xbe1cf2074d5ba303 - .quad 0xc08628b76e3a4180 - .quad 0xbe1cf05cd5eed880 - .rept 48 - .byte 0 - .endr - -/* Lookup table with 9-bit index for - -log(mRcp), where mRcp is mantissa of 1/x 9-bit accurate reciprocal: - */ -.if .-__svml_dlog_data != _Log_LA_table -.err -.endif - .quad 0x8000000000000000 - .quad 0xbf5ff802a9ab10e6 - .quad 0xbf6ff00aa2b10bc0 - .quad 0xbf77ee11ebd82e94 - .quad 0xbf7fe02a6b106789 - .quad 0xbf83e7295d25a7d9 - .quad 0xbf87dc475f810a77 - .quad 0xbf8bcf712c74384c - .quad 0xbf8fc0a8b0fc03e4 - .quad 0xbf91d7f7eb9eebe7 - .quad 0xbf93cea44346a575 - .quad 0xbf95c45a51b8d389 - .quad 0xbf97b91b07d5b11b - .quad 0xbf99ace7551cc514 - .quad 0xbf9b9fc027af9198 - .quad 0xbf9d91a66c543cc4 - .quad 0xbf9f829b0e783300 - .quad 0xbfa0b94f7c196176 - .quad 0xbfa1b0d98923d980 - .quad 0xbfa2a7ec2214e873 - .quad 0xbfa39e87b9febd60 - .quad 0xbfa494acc34d911c - .quad 0xbfa58a5bafc8e4d5 - .quad 0xbfa67f94f094bd98 - .quad 0xbfa77458f632dcfc - .quad 0xbfa868a83083f6cf - .quad 0xbfa95c830ec8e3eb - .quad 0xbfaa4fe9ffa3d235 - .quad 0xbfab42dd711971bf - .quad 0xbfac355dd0921f2d - .quad 0xbfad276b8adb0b52 - .quad 0xbfae19070c276016 - .quad 0xbfaf0a30c01162a6 - .quad 0xbfaffae9119b9303 - .quad 0xbfb075983598e471 - .quad 0xbfb0ed839b5526fe - .quad 0xbfb16536eea37ae1 - .quad 0xbfb1dcb263db1944 - .quad 0xbfb253f62f0a1417 - .quad 0xbfb2cb0283f5de1f - .quad 0xbfb341d7961bd1d1 - .quad 0xbfb3b87598b1b6ee - .quad 0xbfb42edcbea646f0 - .quad 0xbfb4a50d3aa1b040 - .quad 0xbfb51b073f06183f - .quad 0xbfb590cafdf01c28 - .quad 0xbfb60658a93750c4 - .quad 0xbfb67bb0726ec0fc - .quad 0xbfb6f0d28ae56b4c - .quad 0xbfb765bf23a6be13 - .quad 0xbfb7da766d7b12cd - .quad 0xbfb84ef898e8282a - .quad 0xbfb8c345d6319b21 - .quad 0xbfb9375e55595ede - .quad 0xbfb9ab42462033ad - .quad 0xbfba1ef1d8061cd4 - .quad 0xbfba926d3a4ad563 - .quad 0xbfbb05b49bee43fe - .quad 0xbfbb78c82bb0eda1 - .quad 0xbfbbeba818146765 - .quad 0xbfbc5e548f5bc743 - .quad 0xbfbcd0cdbf8c13e1 - .quad 0xbfbd4313d66cb35d - .quad 0xbfbdb5270187d927 - .quad 0xbfbe27076e2af2e6 - .quad 0xbfbe98b549671467 - .quad 0xbfbf0a30c01162a6 - .quad 0xbfbf7b79fec37ddf - .quad 0xbfbfec9131dbeabb - .quad 0xbfc02ebb42bf3d4b - .quad 0xbfc0671512ca596e - .quad 0xbfc09f561ee719c3 - .quad 0xbfc0d77e7cd08e59 - .quad 0xbfc10f8e422539b1 - .quad 0xbfc14785846742ac - .quad 0xbfc17f6458fca611 - .quad 0xbfc1b72ad52f67a0 - .quad 0xbfc1eed90e2dc2c3 - .quad 0xbfc2266f190a5acb - .quad 0xbfc25ded0abc6ad2 - .quad 0xbfc29552f81ff523 - .quad 0xbfc2cca0f5f5f251 - .quad 0xbfc303d718e47fd3 - .quad 0xbfc33af575770e4f - .quad 0xbfc371fc201e8f74 - .quad 0xbfc3a8eb2d31a376 - .quad 0xbfc3dfc2b0ecc62a - .quad 0xbfc41682bf727bc0 - .quad 0xbfc44d2b6ccb7d1e - .quad 0xbfc483bccce6e3dd - .quad 0xbfc4ba36f39a55e5 - .quad 0xbfc4f099f4a230b2 - .quad 0xbfc526e5e3a1b438 - .quad 0xbfc55d1ad4232d6f - .quad 0xbfc59338d9982086 - .quad 0xbfc5c940075972b9 - .quad 0xbfc5ff3070a793d4 - .quad 0xbfc6350a28aaa758 - .quad 0xbfc66acd4272ad51 - .quad 0xbfc6a079d0f7aad2 - .quad 0xbfc6d60fe719d21d - .quad 0xbfc70b8f97a1aa75 - .quad 0xbfc740f8f54037a5 - .quad 0xbfc7764c128f2127 - .quad 0xbfc7ab890210d909 - .quad 0xbfc7e0afd630c274 - .quad 0xbfc815c0a14357eb - .quad 0xbfc84abb75865139 - .quad 0xbfc87fa06520c911 - .quad 0xbfc8b46f8223625b - .quad 0xbfc8e928de886d41 - .quad 0xbfc91dcc8c340bde - .quad 0xbfc9525a9cf456b4 - .quad 0xbfc986d3228180ca - .quad 0xbfc9bb362e7dfb83 - .quad 0xbfc9ef83d2769a34 - .quad 0xbfca23bc1fe2b563 - .quad 0xbfca57df28244dcd - .quad 0xbfca8becfc882f19 - .quad 0xbfcabfe5ae46124c - .quad 0xbfcaf3c94e80bff3 - .quad 0xbfcb2797ee46320c - .quad 0xbfcb5b519e8fb5a4 - .quad 0xbfcb8ef670420c3b - .quad 0xbfcbc286742d8cd6 - .quad 0xbfcbf601bb0e44e2 - .quad 0xbfcc2968558c18c1 - .quad 0xbfcc5cba543ae425 - .quad 0xbfcc8ff7c79a9a22 - .quad 0xbfccc320c0176502 - .quad 0xbfccf6354e09c5dc - .quad 0xbfcd293581b6b3e7 - .quad 0xbfcd5c216b4fbb91 - .quad 0xbfcd8ef91af31d5e - .quad 0xbfcdc1bca0abec7d - .quad 0xbfcdf46c0c722d2f - .quad 0xbfce27076e2af2e6 - .quad 0xbfce598ed5a87e2f - .quad 0xbfce8c0252aa5a60 - .quad 0xbfcebe61f4dd7b0b - .quad 0xbfcef0adcbdc5936 - .quad 0xbfcf22e5e72f105d - .quad 0xbfcf550a564b7b37 - .quad 0xbfcf871b28955045 - .quad 0xbfcfb9186d5e3e2b - .quad 0xbfcfeb0233e607cc - .quad 0xbfd00e6c45ad501d - .quad 0xbfd0274dc16c232f - .quad 0xbfd0402594b4d041 - .quad 0xbfd058f3c703ebc6 - .quad 0xbfd071b85fcd590d - .quad 0xbfd08a73667c57af - .quad 0xbfd0a324e27390e3 - .quad 0xbfd0bbccdb0d24bd - .quad 0xbfd0d46b579ab74b - .quad 0xbfd0ed005f657da4 - .quad 0xbfd1058bf9ae4ad5 - .quad 0xbfd11e0e2dad9cb7 - .quad 0xbfd136870293a8b0 - .quad 0xbfd14ef67f88685a - .quad 0xbfd1675cababa60e - .quad 0xbfd17fb98e15095d - .quad 0xbfd1980d2dd4236f - .quad 0xbfd1b05791f07b49 - .quad 0xbfd1c898c16999fb - .quad 0xbfd1e0d0c33716be - .quad 0xbfd1f8ff9e48a2f3 - .quad 0xbfd211255986160c - .quad 0xbfd22941fbcf7966 - .quad 0xbfd241558bfd1404 - .quad 0xbfd2596010df763a - .quad 0xbfd27161913f853d - .quad 0xbfd2895a13de86a3 - .quad 0xbfd2a1499f762bc9 - .quad 0xbfd2b9303ab89d25 - .quad 0xbfd2d10dec508583 - .quad 0xbfd2e8e2bae11d31 - .quad 0xbfd300aead06350c - .quad 0xbfd31871c9544185 - .quad 0xbfd3302c16586588 - .quad 0xbfd347dd9a987d55 - .quad 0xbfd35f865c93293e - .quad 0xbfd3772662bfd85b - .quad 0xbfd38ebdb38ed321 - .quad 0xbfd3a64c556945ea - .quad 0xbfd3bdd24eb14b6a - .quad 0xbfd3d54fa5c1f710 - .quad 0xbfd3ecc460ef5f50 - .quad 0xbfd404308686a7e4 - .quad 0xbfd41b941cce0bee - .quad 0xbfd432ef2a04e814 - .quad 0xbfd44a41b463c47c - .quad 0xbfd4618bc21c5ec2 - .quad 0xbfd478cd5959b3d9 - .quad 0xbfd49006804009d1 - .quad 0xbfd4a7373cecf997 - .quad 0xbfd4be5f957778a1 - .quad 0xbfd4d57f8fefe27f - .quad 0xbfd4ec973260026a - .quad 0xbfd503a682cb1cb3 - .quad 0xbfd51aad872df82d - .quad 0xbfd531ac457ee77e - .quad 0xbfd548a2c3add263 - .quad 0xbfd55f9107a43ee2 - .quad 0xbfd5767717455a6c - .quad 0xbfd58d54f86e02f2 - .quad 0xbfd5a42ab0f4cfe2 - .quad 0xbfd5baf846aa1b19 - .quad 0xbfd5d1bdbf5809ca - .quad 0xbfd5e87b20c2954a - .quad 0xbfd5ff3070a793d4 - .quad 0xbfd615ddb4bec13c - .quad 0xbfd62c82f2b9c795 - .quad 0x3fd61965cdb02c1f - .quad 0x3fd602d08af091ec - .quad 0x3fd5ec433d5c35ae - .quad 0x3fd5d5bddf595f30 - .quad 0x3fd5bf406b543db2 - .quad 0x3fd5a8cadbbedfa1 - .quad 0x3fd5925d2b112a59 - .quad 0x3fd57bf753c8d1fb - .quad 0x3fd565995069514c - .quad 0x3fd54f431b7be1a9 - .quad 0x3fd538f4af8f72fe - .quad 0x3fd522ae0738a3d8 - .quad 0x3fd50c6f1d11b97c - .quad 0x3fd4f637ebba9810 - .quad 0x3fd4e0086dd8baca - .quad 0x3fd4c9e09e172c3c - .quad 0x3fd4b3c077267e9a - .quad 0x3fd49da7f3bcc41f - .quad 0x3fd487970e958770 - .quad 0x3fd4718dc271c41b - .quad 0x3fd45b8c0a17df13 - .quad 0x3fd44591e0539f49 - .quad 0x3fd42f9f3ff62642 - .quad 0x3fd419b423d5e8c7 - .quad 0x3fd403d086cea79c - .quad 0x3fd3edf463c1683e - .quad 0x3fd3d81fb5946dba - .quad 0x3fd3c25277333184 - .quad 0x3fd3ac8ca38e5c5f - .quad 0x3fd396ce359bbf54 - .quad 0x3fd3811728564cb2 - .quad 0x3fd36b6776be1117 - .quad 0x3fd355bf1bd82c8b - .quad 0x3fd3401e12aecba1 - .quad 0x3fd32a84565120a8 - .quad 0x3fd314f1e1d35ce4 - .quad 0x3fd2ff66b04ea9d4 - .quad 0x3fd2e9e2bce12286 - .quad 0x3fd2d46602adccee - .quad 0x3fd2bef07cdc9354 - .quad 0x3fd2a982269a3dbf - .quad 0x3fd2941afb186b7c - .quad 0x3fd27ebaf58d8c9d - .quad 0x3fd269621134db92 - .quad 0x3fd25410494e56c7 - .quad 0x3fd23ec5991eba49 - .quad 0x3fd22981fbef797b - .quad 0x3fd214456d0eb8d4 - .quad 0x3fd1ff0fe7cf47a7 - .quad 0x3fd1e9e1678899f4 - .quad 0x3fd1d4b9e796c245 - .quad 0x3fd1bf99635a6b95 - .quad 0x3fd1aa7fd638d33f - .quad 0x3fd1956d3b9bc2fa - .quad 0x3fd180618ef18adf - .quad 0x3fd16b5ccbacfb73 - .quad 0x3fd1565eed455fc3 - .quad 0x3fd14167ef367783 - .quad 0x3fd12c77cd00713b - .quad 0x3fd1178e8227e47c - .quad 0x3fd102ac0a35cc1c - .quad 0x3fd0edd060b78081 - .quad 0x3fd0d8fb813eb1ef - .quad 0x3fd0c42d676162e3 - .quad 0x3fd0af660eb9e279 - .quad 0x3fd09aa572e6c6d4 - .quad 0x3fd085eb8f8ae797 - .quad 0x3fd07138604d5862 - .quad 0x3fd05c8be0d9635a - .quad 0x3fd047e60cde83b8 - .quad 0x3fd03346e0106062 - .quad 0x3fd01eae5626c691 - .quad 0x3fd00a1c6adda473 - .quad 0x3fcfeb2233ea07cd - .quad 0x3fcfc218be620a5e - .quad 0x3fcf991c6cb3b379 - .quad 0x3fcf702d36777df0 - .quad 0x3fcf474b134df229 - .quad 0x3fcf1e75fadf9bde - .quad 0x3fcef5ade4dcffe6 - .quad 0x3fceccf2c8fe920a - .quad 0x3fcea4449f04aaf5 - .quad 0x3fce7ba35eb77e2a - .quad 0x3fce530effe71012 - .quad 0x3fce2a877a6b2c12 - .quad 0x3fce020cc6235ab5 - .quad 0x3fcdd99edaf6d7e9 - .quad 0x3fcdb13db0d48940 - .quad 0x3fcd88e93fb2f450 - .quad 0x3fcd60a17f903515 - .quad 0x3fcd38666871f465 - .quad 0x3fcd1037f2655e7b - .quad 0x3fcce816157f1988 - .quad 0x3fccc000c9db3c52 - .quad 0x3fcc97f8079d44ec - .quad 0x3fcc6ffbc6f00f71 - .quad 0x3fcc480c0005ccd1 - .quad 0x3fcc2028ab17f9b4 - .quad 0x3fcbf851c067555f - .quad 0x3fcbd087383bd8ad - .quad 0x3fcba8c90ae4ad19 - .quad 0x3fcb811730b823d2 - .quad 0x3fcb5971a213acdb - .quad 0x3fcb31d8575bce3d - .quad 0x3fcb0a4b48fc1b46 - .quad 0x3fcae2ca6f672bd4 - .quad 0x3fcabb55c31693ad - .quad 0x3fca93ed3c8ad9e3 - .quad 0x3fca6c90d44b704e - .quad 0x3fca454082e6ab05 - .quad 0x3fca1dfc40f1b7f1 - .quad 0x3fc9f6c407089664 - .quad 0x3fc9cf97cdce0ec3 - .quad 0x3fc9a8778debaa38 - .quad 0x3fc981634011aa75 - .quad 0x3fc95a5adcf7017f - .quad 0x3fc9335e5d594989 - .quad 0x3fc90c6db9fcbcd9 - .quad 0x3fc8e588ebac2dbf - .quad 0x3fc8beafeb38fe8c - .quad 0x3fc897e2b17b19a5 - .quad 0x3fc871213750e994 - .quad 0x3fc84a6b759f512f - .quad 0x3fc823c16551a3c2 - .quad 0x3fc7fd22ff599d4f - .quad 0x3fc7d6903caf5ad0 - .quad 0x3fc7b0091651528c - .quad 0x3fc7898d85444c73 - .quad 0x3fc7631d82935a86 - .quad 0x3fc73cb9074fd14d - .quad 0x3fc716600c914054 - .quad 0x3fc6f0128b756abc - .quad 0x3fc6c9d07d203fc7 - .quad 0x3fc6a399dabbd383 - .quad 0x3fc67d6e9d785771 - .quad 0x3fc6574ebe8c133a - .quad 0x3fc6313a37335d76 - .quad 0x3fc60b3100b09476 - .quad 0x3fc5e533144c1719 - .quad 0x3fc5bf406b543db2 - .quad 0x3fc59958ff1d52f1 - .quad 0x3fc5737cc9018cdd - .quad 0x3fc54dabc26105d2 - .quad 0x3fc527e5e4a1b58d - .quad 0x3fc5022b292f6a45 - .quad 0x3fc4dc7b897bc1c8 - .quad 0x3fc4b6d6fefe22a4 - .quad 0x3fc4913d8333b561 - .quad 0x3fc46baf0f9f5db7 - .quad 0x3fc4462b9dc9b3dc - .quad 0x3fc420b32740fdd4 - .quad 0x3fc3fb45a59928cc - .quad 0x3fc3d5e3126bc27f - .quad 0x3fc3b08b6757f2a9 - .quad 0x3fc38b3e9e027479 - .quad 0x3fc365fcb0159016 - .quad 0x3fc340c59741142e - .quad 0x3fc31b994d3a4f85 - .quad 0x3fc2f677cbbc0a96 - .quad 0x3fc2d1610c86813a - .quad 0x3fc2ac55095f5c59 - .quad 0x3fc28753bc11aba5 - .quad 0x3fc2625d1e6ddf57 - .quad 0x3fc23d712a49c202 - .quad 0x3fc2188fd9807263 - .quad 0x3fc1f3b925f25d41 - .quad 0x3fc1ceed09853752 - .quad 0x3fc1aa2b7e23f72a - .quad 0x3fc185747dbecf34 - .quad 0x3fc160c8024b27b1 - .quad 0x3fc13c2605c398c3 - .quad 0x3fc1178e8227e47c - .quad 0x3fc0f301717cf0fb - .quad 0x3fc0ce7ecdccc28d - .quad 0x3fc0aa06912675d5 - .quad 0x3fc08598b59e3a07 - .quad 0x3fc06135354d4b18 - .quad 0x3fc03cdc0a51ec0d - .quad 0x3fc0188d2ecf6140 - .quad 0x3fbfe89139dbd566 - .quad 0x3fbfa01c9db57ce2 - .quad 0x3fbf57bc7d9005db - .quad 0x3fbf0f70cdd992e3 - .quad 0x3fbec739830a1120 - .quad 0x3fbe7f1691a32d3e - .quad 0x3fbe3707ee30487b - .quad 0x3fbdef0d8d466db9 - .quad 0x3fbda727638446a2 - .quad 0x3fbd5f55659210e2 - .quad 0x3fbd179788219364 - .quad 0x3fbccfedbfee13a8 - .quad 0x3fbc885801bc4b23 - .quad 0x3fbc40d6425a5cb1 - .quad 0x3fbbf968769fca11 - .quad 0x3fbbb20e936d6974 - .quad 0x3fbb6ac88dad5b1c - .quad 0x3fbb23965a52ff00 - .quad 0x3fbadc77ee5aea8c - .quad 0x3fba956d3ecade63 - .quad 0x3fba4e7640b1bc38 - .quad 0x3fba0792e9277cac - .quad 0x3fb9c0c32d4d2548 - .quad 0x3fb97a07024cbe74 - .quad 0x3fb9335e5d594989 - .quad 0x3fb8ecc933aeb6e8 - .quad 0x3fb8a6477a91dc29 - .quad 0x3fb85fd927506a48 - .quad 0x3fb8197e2f40e3f0 - .quad 0x3fb7d33687c293c9 - .quad 0x3fb78d02263d82d3 - .quad 0x3fb746e100226ed9 - .quad 0x3fb700d30aeac0e1 - .quad 0x3fb6bad83c1883b6 - .quad 0x3fb674f089365a7a - .quad 0x3fb62f1be7d77743 - .quad 0x3fb5e95a4d9791cb - .quad 0x3fb5a3abb01ade25 - .quad 0x3fb55e10050e0384 - .quad 0x3fb518874226130a - .quad 0x3fb4d3115d207eac - .quad 0x3fb48dae4bc31018 - .quad 0x3fb4485e03dbdfad - .quad 0x3fb403207b414b7f - .quad 0x3fb3bdf5a7d1ee64 - .quad 0x3fb378dd7f749714 - .quad 0x3fb333d7f8183f4b - .quad 0x3fb2eee507b40301 - .quad 0x3fb2aa04a44717a5 - .quad 0x3fb26536c3d8c369 - .quad 0x3fb2207b5c78549e - .quad 0x3fb1dbd2643d190b - .quad 0x3fb1973bd1465567 - .quad 0x3fb152b799bb3cc9 - .quad 0x3fb10e45b3cae831 - .quad 0x3fb0c9e615ac4e17 - .quad 0x3fb08598b59e3a07 - .quad 0x3fb0415d89e74444 - .quad 0x3faffa6911ab9301 - .quad 0x3faf723b517fc523 - .quad 0x3faeea31c006b87c - .quad 0x3fae624c4a0b5e1b - .quad 0x3fadda8adc67ee4e - .quad 0x3fad52ed6405d86f - .quad 0x3faccb73cdddb2cc - .quad 0x3fac441e06f72a9e - .quad 0x3fabbcebfc68f420 - .quad 0x3fab35dd9b58baad - .quad 0x3faaaef2d0fb10fc - .quad 0x3faa282b8a936171 - .quad 0x3fa9a187b573de7c - .quad 0x3fa91b073efd7314 - .quad 0x3fa894aa149fb343 - .quad 0x3fa80e7023d8ccc4 - .quad 0x3fa788595a3577ba - .quad 0x3fa70265a550e777 - .quad 0x3fa67c94f2d4bb58 - .quad 0x3fa5f6e73078efb8 - .quad 0x3fa5715c4c03ceef - .quad 0x3fa4ebf43349e26f - .quad 0x3fa466aed42de3ea - .quad 0x3fa3e18c1ca0ae92 - .quad 0x3fa35c8bfaa1306b - .quad 0x3fa2d7ae5c3c5bae - .quad 0x3fa252f32f8d183f - .quad 0x3fa1ce5a62bc353a - .quad 0x3fa149e3e4005a8d - .quad 0x3fa0c58fa19dfaaa - .quad 0x3fa0415d89e74444 - .quad 0x3f9f7a9b16782856 - .quad 0x3f9e72bf2813ce51 - .quad 0x3f9d6b2725979802 - .quad 0x3f9c63d2ec14aaf2 - .quad 0x3f9b5cc258b718e6 - .quad 0x3f9a55f548c5c43f - .quad 0x3f994f6b99a24475 - .quad 0x3f98492528c8cabf - .quad 0x3f974321d3d006d3 - .quad 0x3f963d6178690bd6 - .quad 0x3f9537e3f45f3565 - .quad 0x3f9432a925980cc1 - .quad 0x3f932db0ea132e22 - .quad 0x3f9228fb1fea2e28 - .quad 0x3f912487a5507f70 - .quad 0x3f90205658935847 - .quad 0x3f8e38ce3033310c - .quad 0x3f8c317384c75f06 - .quad 0x3f8a2a9c6c170462 - .quad 0x3f882448a388a2aa - .quad 0x3f861e77e8b53fc6 - .quad 0x3f841929f96832f0 - .quad 0x3f82145e939ef1e9 - .quad 0x3f8010157588de71 - .quad 0x3f7c189cbb0e27fb - .quad 0x3f78121214586b54 - .quad 0x3f740c8a747878e2 - .quad 0x3f70080559588b35 - .quad 0x3f680904828985c0 - .quad 0x3f60040155d5889e - .quad 0x3f50020055655889 - .quad 0x0000000000000000 - .rept 56 - .byte 0 - .endr - -/* Polynomial coefficients: */ -double_vector _poly_coeff_1 0x3fc9999cacdb4d0a -double_vector _poly_coeff_2 0xbfd0000148058ee1 -double_vector _poly_coeff_3 0x3fd55555555543c5 -double_vector _poly_coeff_4 0xbfdffffffffff81f - -/* Exponent mask */ -double_vector _ExpMask 0x000fffffffffffff - -/* 2^10 */ -double_vector _Two10 0x3f50000000000000 - -/* Minimum normal number */ -double_vector _MinNorm 0x0010000000000000 - -/* Maximum normal number */ -double_vector _MaxNorm 0x7fefffffffffffff - -/* Half of mantissa mask */ -double_vector _HalfMask 0xfffffffffc000000 - -/* 1.0 */ -double_vector _One 0x3ff0000000000000 - -/* log(2) high part */ -double_vector _L2H 0x3fe62e42fefa0000 - -/* log(2) low part */ -double_vector _L2L 0x3d7cf79abc9e0000 - -/* Work range threshold = 724 */ -double_vector _Threshold 0x4086a00000000000 - -/* Bias */ -double_vector _Bias 0x408ff80000000000 - -/* Bias (-1 bit) */ -double_vector _Bias1 0x408ff00000000000 - -/* log(2) */ -double_vector _L2 0x3fe62e42fefa39ef - -/* General purpose constants: - DP infinities, +/- */ -.if .-__svml_dlog_data != _dInfs -.err -.endif - .quad 0x7ff0000000000000 - .quad 0xfff0000000000000 - .rept 48 - .byte 0 - .endr - -/* DP 1.0, +/- */ -.if .-__svml_dlog_data != _dOnes -.err -.endif - .quad 0x3ff0000000000000 - .quad 0xbff0000000000000 - .rept 48 - .byte 0 - .endr - -/* DP 0.0, +/- */ -.if .-__svml_dlog_data != _dZeros -.err -.endif - .quad 0x0000000000000000 - .quad 0x8000000000000000 - .rept 48 - .byte 0 - .endr - .type __svml_dlog_data,@object - .size __svml_dlog_data,.-__svml_dlog_data diff --git a/sysdeps/x86_64/fpu/svml_d_log_data.h b/sysdeps/x86_64/fpu/svml_d_log_data.h deleted file mode 100644 index 84d65db95d..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_log_data.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Offsets for data table for function log. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef D_LOG_DATA_H -#define D_LOG_DATA_H - -#define _LogRcp_lookup -4218816 -#define _Log_HA_table 0 -#define _Log_LA_table 8256 -#define _poly_coeff_1 12416 -#define _poly_coeff_2 12480 -#define _poly_coeff_3 12544 -#define _poly_coeff_4 12608 -#define _ExpMask 12672 -#define _Two10 12736 -#define _MinNorm 12800 -#define _MaxNorm 12864 -#define _HalfMask 12928 -#define _One 12992 -#define _L2H 13056 -#define _L2L 13120 -#define _Threshold 13184 -#define _Bias 13248 -#define _Bias1 13312 -#define _L2 13376 -#define _dInfs 13440 -#define _dOnes 13504 -#define _dZeros 13568 - -.macro double_vector offset value -.if .-__svml_dlog_data != \offset -.err -.endif -.rept 8 -.quad \value -.endr -.endm - -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_pow2_core.S b/sysdeps/x86_64/fpu/svml_d_pow2_core.S deleted file mode 100644 index ccdb592135..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_pow2_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function pow vectorized with SSE2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVbN2vv_pow) -WRAPPER_IMPL_SSE2_ff __pow_finite -END (_ZGVbN2vv_pow) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVbN2vv_pow) -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_pow4_core.S b/sysdeps/x86_64/fpu/svml_d_pow4_core.S deleted file mode 100644 index 30ae0f5a2f..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_pow4_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function pow vectorized with AVX2, wrapper version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVdN4vv_pow) -WRAPPER_IMPL_AVX_ff _ZGVbN2vv_pow -END (_ZGVdN4vv_pow) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVdN4vv_pow) -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_pow4_core_avx.S b/sysdeps/x86_64/fpu/svml_d_pow4_core_avx.S deleted file mode 100644 index bcea225c4d..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_pow4_core_avx.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function pow vectorized in AVX ISA as wrapper to SSE4 ISA version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVcN4vv_pow) -WRAPPER_IMPL_AVX_ff _ZGVbN2vv_pow -END (_ZGVcN4vv_pow) diff --git a/sysdeps/x86_64/fpu/svml_d_pow8_core.S b/sysdeps/x86_64/fpu/svml_d_pow8_core.S deleted file mode 100644 index 06b3a81124..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_pow8_core.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function pow vectorized with AVX-512. Wrapper to AVX2 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVeN8vv_pow) -WRAPPER_IMPL_AVX512_ff _ZGVdN4vv_pow -END (_ZGVeN8vv_pow) diff --git a/sysdeps/x86_64/fpu/svml_d_pow_data.S b/sysdeps/x86_64/fpu/svml_d_pow_data.S deleted file mode 100644 index 2f05f7becb..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_pow_data.S +++ /dev/null @@ -1,4863 +0,0 @@ -/* Data for function pow. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "svml_d_pow_data.h" - - .section .rodata, "a" - .align 64 - -/* Data table for vector implementations of function pow. - The table may contain polynomial, reduction, lookup coefficients and - other coefficients obtained through different methods of research and - experimental work. */ - - .globl __svml_dpow_data -__svml_dpow_data: - -/* Lookup log(2) table (for HSW): */ -.if .-__svml_dpow_data != _hsw_log2_table -.err -.endif - .quad 0xc08ff00000000000 - .quad 0x0000000000000000 - .quad 0xc08ff005c3e0ffc2 - .quad 0xbd33ab2631d4676d - .quad 0xc08ff00b84e236bc - .quad 0xbd4563ba56cde925 - .quad 0xc08ff01143068126 - .quad 0x3d11790209e88471 - .quad 0xc08ff016fe50b6ee - .quad 0xbd408517f8e37b00 - .quad 0xc08ff01cb6c3abd0 - .quad 0xbd44558b51cada94 - .quad 0xc08ff0226c622f52 - .quad 0xbd3ec312ed069b24 - .quad 0xc08ff0281f2f0cd0 - .quad 0xbd374a4cb0be9e8a - .quad 0xc08ff02dcf2d0b86 - .quad 0x3d26eb3ac8ec0ef7 - .quad 0xc08ff0337c5eee92 - .quad 0xbd45984a60ff3d2f - .quad 0xc08ff03926c7750a - .quad 0xbd0f0cccdd01ee2f - .quad 0xc08ff03ece6959f0 - .quad 0xbd3a5671e1bd4ae8 - .quad 0xc08ff0447347544c - .quad 0xbd3a0976c0a2827d - .quad 0xc08ff04a1564172a - .quad 0x3d1e14ebaf30c95e - .quad 0xc08ff04fb4c251a0 - .quad 0xbd46898809d2dc10 - .quad 0xc08ff0555164aee2 - .quad 0xbd4355e6ecb8e0f1 - .quad 0xc08ff05aeb4dd63c - .quad 0x3cf3c6764fc87b4a - .quad 0xc08ff06082806b1c - .quad 0xbd4532c412ba94db - .quad 0xc08ff06616ff0d24 - .quad 0xbd4465182838ed44 - .quad 0xc08ff06ba8cc5824 - .quad 0xbd47dc6d46384b31 - .quad 0xc08ff07137eae42a - .quad 0xbd35af7a7c7c34f3 - .quad 0xc08ff076c45d4584 - .quad 0x3d18a0e14f76d994 - .quad 0xc08ff07c4e260cc8 - .quad 0xbd44e7e87341aeee - .quad 0xc08ff081d547c6e4 - .quad 0xbd153121e9af5428 - .quad 0xc08ff08759c4fd14 - .quad 0xbd3f9ab3cf74baba - .quad 0xc08ff08cdba034fa - .quad 0xbd3f09941811b2ee - .quad 0xc08ff0925adbf09a - .quad 0xbd3a3c89a2cf3516 - .quad 0xc08ff097d77aae66 - .quad 0x3d291b415eeb24ed - .quad 0xc08ff09d517ee940 - .quad 0x3d2c7a4ff65ddbc9 - .quad 0xc08ff0a2c8eb1886 - .quad 0xbd385a047f97bb3e - .quad 0xc08ff0a83dc1b01a - .quad 0x3d1124ac34b21259 - .quad 0xc08ff0adb005205e - .quad 0xbd34f286d207e2c8 - .quad 0xc08ff0b31fb7d648 - .quad 0xbd33167ccc538261 - .quad 0xc08ff0b88cdc3b5e - .quad 0xbd4542fe4ce30d63 - .quad 0xc08ff0bdf774b5c4 - .quad 0xbd41409e20d7191b - .quad 0xc08ff0c35f83a83c - .quad 0xbd40638b5ff73edf - .quad 0xc08ff0c8c50b7232 - .quad 0x3d294aa31b9b6d65 - .quad 0xc08ff0ce280e6fba - .quad 0xbd38723279ebfab6 - .quad 0xc08ff0d3888ef9a4 - .quad 0xbd124fad116078ef - .quad 0xc08ff0d8e68f6572 - .quad 0xbd437350d69ea580 - .quad 0xc08ff0de4212056c - .quad 0xbd45dd31d962d373 - .quad 0xc08ff0e39b19289e - .quad 0x3d058b34834a501e - .quad 0xc08ff0e8f1a71adc - .quad 0xbd06d26859c7991e - .quad 0xc08ff0ee45be24d0 - .quad 0xbd3ddb7886f88587 - .quad 0xc08ff0f397608bfc - .quad 0xbd42d90e5edaecee - .quad 0xc08ff0f8e69092be - .quad 0xbd40c5eacb577b4a - .quad 0xc08ff0fe33507858 - .quad 0xbce49209a68c72a1 - .quad 0xc08ff1037da278f2 - .quad 0xbd30e0f9c896007d - .quad 0xc08ff108c588cda8 - .quad 0x3d2871a7610e40bd - .quad 0xc08ff10e0b05ac84 - .quad 0xbd31da156756faad - .quad 0xc08ff1134e1b4890 - .quad 0xbd28b7fcd690403e - .quad 0xc08ff1188ecbd1d0 - .quad 0xbd46be4a29c44115 - .quad 0xc08ff11dcd197552 - .quad 0xbd36f6bd48a860f0 - .quad 0xc08ff12309065d28 - .quad 0xbd47913e788c5887 - .quad 0xc08ff1284294b07a - .quad 0xbd28fe35da2ab291 - .quad 0xc08ff12d79c6937e - .quad 0xbd3fb9b1aaf54bcc - .quad 0xc08ff132ae9e278a - .quad 0xbd3c343ea3e580eb - .quad 0xc08ff137e11d8b10 - .quad 0xbd3f1140264356b8 - .quad 0xc08ff13d1146d9a8 - .quad 0xbd34c7e0166e1f56 - .quad 0xc08ff1423f1c2c12 - .quad 0xbd3d449e80431d92 - .quad 0xc08ff1476a9f983e - .quad 0xbd474d3138e94164 - .quad 0xc08ff14c93d33152 - .quad 0x3d2370693afbcdb1 - .quad 0xc08ff151bab907a6 - .quad 0x3d1badba7fbb3d20 - .quad 0xc08ff156df5328d6 - .quad 0x3d2cea9347cb6655 - .quad 0xc08ff15c01a39fbc - .quad 0xbd46879fa00b120a - .quad 0xc08ff16121ac7480 - .quad 0xbd43cf0ff16ff990 - .quad 0xc08ff1663f6fac90 - .quad 0xbd43167ccc538261 - .quad 0xc08ff16b5aef4aae - .quad 0xbd2f7081b8e33aad - .quad 0xc08ff170742d4ef0 - .quad 0xbd13f94e00e7d6bc - .quad 0xc08ff1758b2bb6c8 - .quad 0x3d22280434bda911 - .quad 0xc08ff17a9fec7d06 - .quad 0x3d1108740d92f890 - .quad 0xc08ff17fb27199de - .quad 0xbd416d18135d3266 - .quad 0xc08ff184c2bd02f0 - .quad 0xbd1d97ee9124773b - .quad 0xc08ff189d0d0ab42 - .quad 0xbd40ccd0edd00e4c - .quad 0xc08ff18edcae8352 - .quad 0xbd36d76b9a843329 - .quad 0xc08ff193e6587910 - .quad 0xbd210f7ac89c6f2d - .quad 0xc08ff198edd077e6 - .quad 0xbd40df02face8ca9 - .quad 0xc08ff19df31868c0 - .quad 0xbd41d4cc2f68b868 - .quad 0xc08ff1a2f632320c - .quad 0x3d2e54d71deb636a - .quad 0xc08ff1a7f71fb7ba - .quad 0xbd373af6b5487f35 - .quad 0xc08ff1acf5e2db4e - .quad 0xbd3927dfc23d9780 - .quad 0xc08ff1b1f27d7bd8 - .quad 0x3d2601ccfac2b557 - .quad 0xc08ff1b6ecf175f8 - .quad 0xbd45e96bed8cce30 - .quad 0xc08ff1bbe540a3f0 - .quad 0xbd1b76a46f31880a - .quad 0xc08ff1c0db6cdd94 - .quad 0xbd3bdc81c4db3134 - .quad 0xc08ff1c5cf77f860 - .quad 0xbd304cc6600a133e - .quad 0xc08ff1cac163c770 - .quad 0xbd3b912d8994b162 - .quad 0xc08ff1cfb1321b8c - .quad 0xbd20009770ea1465 - .quad 0xc08ff1d49ee4c326 - .quad 0x3d2a40dc2d2a6bf7 - .quad 0xc08ff1d98a7d8a60 - .quad 0xbd269affffe47644 - .quad 0xc08ff1de73fe3b14 - .quad 0xbd301dc37c84e79a - .quad 0xc08ff1e35b689cd2 - .quad 0xbd2953e61f15bd9b - .quad 0xc08ff1e840be74e6 - .quad 0xbd34998f93e7aa3c - .quad 0xc08ff1ed2401865e - .quad 0x3cf5c14e55f57802 - .quad 0xc08ff1f205339208 - .quad 0xbd3e4e8eea54ce63 - .quad 0xc08ff1f6e4565680 - .quad 0x3d0aaa72ba2c6ba2 - .quad 0xc08ff1fbc16b9026 - .quad 0xbd30144751b3314f - .quad 0xc08ff2009c74f930 - .quad 0x3d2a15a5b343a140 - .quad 0xc08ff205757449a0 - .quad 0xbd398eec5e85b29f - .quad 0xc08ff20a4c6b3756 - .quad 0xbd1b361c7dddadb6 - .quad 0xc08ff20f215b7606 - .quad 0xbcc2de0634d33aa9 - .quad 0xc08ff213f446b744 - .quad 0xbce024b5b4e89254 - .quad 0xc08ff218c52eaa84 - .quad 0xbd451d49f63f4830 - .quad 0xc08ff21d9414fd24 - .quad 0x3d1f4c2417f39394 - .quad 0xc08ff22260fb5a60 - .quad 0xbd46eb9612e0b4f3 - .quad 0xc08ff2272be36b6c - .quad 0xbd1a5bd9bcda22fd - .quad 0xc08ff22bf4ced760 - .quad 0xbd41feb2fc708a78 - .quad 0xc08ff230bbbf4350 - .quad 0x3d13045428f88499 - .quad 0xc08ff23580b6523e - .quad 0xbcfc14a31ce1b7e3 - .quad 0xc08ff23a43b5a52a - .quad 0xbd38c9a2f2dbcaf9 - .quad 0xc08ff23f04bedb12 - .quad 0x3d1ecd417972c083 - .quad 0xc08ff243c3d390ee - .quad 0xbd38e36471414f76 - .quad 0xc08ff24880f561c0 - .quad 0xbd3ce60916e52e91 - .quad 0xc08ff24d3c25e68e - .quad 0x3d1d406db502402d - .quad 0xc08ff251f566b664 - .quad 0xbd3a0d8c0e85a909 - .quad 0xc08ff256acb96662 - .quad 0xbd2dafbfd96d5335 - .quad 0xc08ff25b621f89b2 - .quad 0xbd455ede26f47b19 - .quad 0xc08ff260159ab196 - .quad 0xbd461f2e47488cf1 - .quad 0xc08ff264c72c6d64 - .quad 0xbd406b35c7c781db - .quad 0xc08ff26976d64a8c - .quad 0xbd20c369fc5a3d9b - .quad 0xc08ff26e2499d49a - .quad 0x3d20993376649b50 - .quad 0xc08ff272d078953a - .quad 0x3d1664deafdbfed5 - .quad 0xc08ff2777a74143c - .quad 0x3d282b53e791792d - .quad 0xc08ff27c228dd794 - .quad 0x3ccc79237996a42b - .quad 0xc08ff280c8c76360 - .quad 0xbd3125d6cbcd1095 - .quad 0xc08ff2856d2239ea - .quad 0xbd3194cfcc6c23cf - .quad 0xc08ff28a0f9fdbaa - .quad 0x3cee35952fb0019c - .quad 0xc08ff28eb041c748 - .quad 0xbd2286fbc7f749ff - .quad 0xc08ff2934f0979a2 - .quad 0xbd4715fc9257edff - .quad 0xc08ff297ebf86dd0 - .quad 0xbd35dcccaf649933 - .quad 0xc08ff29c87101d1e - .quad 0xbd46d3f77ae3858b - .quad 0xc08ff2a12051ff1c - .quad 0xbd0432648cfc8738 - .quad 0xc08ff2a5b7bf8992 - .quad 0xbd3acdf73d83987f - .quad 0xc08ff2aa4d5a3092 - .quad 0xbd2e6c522ceda3fb - .quad 0xc08ff2aee123666e - .quad 0xbd4195620f0359d8 - .quad 0xc08ff2b3731c9bc4 - .quad 0xbd3c70f15d3ebabd - .quad 0xc08ff2b803473f7a - .quad 0xbd3a1e7e802c4828 - .quad 0xc08ff2bc91a4bec4 - .quad 0xbd4572ca23a96c48 - .quad 0xc08ff2c11e368528 - .quad 0xbd415b2de01cea41 - .quad 0xc08ff2c5a8fdfc7c - .quad 0xbd47dc11ebf92a98 - .quad 0xc08ff2ca31fc8cee - .quad 0xbd474dca44f1db91 - .quad 0xc08ff2ceb9339d04 - .quad 0x3cfb88755d6ca189 - .quad 0xc08ff2d33ea4919a - .quad 0xbd32e1a3152150d3 - .quad 0xc08ff2d7c250cdf0 - .quad 0xbd206adfcaa4bcf5 - .quad 0xc08ff2dc4439b3a2 - .quad 0x3d290d43956fa5d8 - .quad 0xc08ff2e0c460a2ae - .quad 0x3d27158a37417c3a - .quad 0xc08ff2e542c6f978 - .quad 0xbd1829434d994a2a - .quad 0xc08ff2e9bf6e14cc - .quad 0xbd2c3e1e30d370ea - .quad 0xc08ff2ee3a574fde - .quad 0xbd4677c8dfd9aa24 - .quad 0xc08ff2f2b3840452 - .quad 0xbd2788eba5c173ee - .quad 0xc08ff2f72af58a34 - .quad 0xbd4588aec6dfa7dc - .quad 0xc08ff2fba0ad3808 - .quad 0xbd47fe42f19c5879 - .quad 0xc08ff30014ac62c4 - .quad 0x3d2d5e6a8a4fb059 - .quad 0xc08ff30486f45dce - .quad 0xbd0edb9d09608783 - .quad 0xc08ff308f7867b0c - .quad 0xbd18dc7c094eee51 - .quad 0xc08ff30d66640ada - .quad 0xbd46028f37225746 - .quad 0xc08ff311d38e5c16 - .quad 0xbd212d25b3252647 - .quad 0xc08ff3163f06bc16 - .quad 0xbd3906944ba567f4 - .quad 0xc08ff31aa8ce76b8 - .quad 0xbd2b8d59e8492d6e - .quad 0xc08ff31f10e6d65a - .quad 0xbd339eec34ce3ce3 - .quad 0xc08ff323775123e2 - .quad 0xbd3c22d2cad415ae - .quad 0xc08ff327dc0ea6be - .quad 0xbd42ce2af5839ab8 - .quad 0xc08ff32c3f20a4e8 - .quad 0xbd03719eb3af5b8d - .quad 0xc08ff330a08862e2 - .quad 0xbd3feed12980ee19 - .quad 0xc08ff335004723c4 - .quad 0xbd2979a5db68721d - .quad 0xc08ff3395e5e2932 - .quad 0x3cf7159b944f7fd7 - .quad 0xc08ff33dbaceb364 - .quad 0xbd377e236c73e71b - .quad 0xc08ff342159a012a - .quad 0xbd4568bb43ac99bb - .quad 0xc08ff3466ec14fec - .quad 0xbcf4275f1035e5e8 - .quad 0xc08ff34ac645dba6 - .quad 0xbd3cc58a505d117a - .quad 0xc08ff34f1c28def8 - .quad 0x3d10bad7dfa568f7 - .quad 0xc08ff353706b9318 - .quad 0xbd3c27e675df639d - .quad 0xc08ff357c30f2fe4 - .quad 0x3d06e3cb71b554e7 - .quad 0xc08ff35c1414ebd4 - .quad 0xbd40c353cb7112a5 - .quad 0xc08ff360637dfc0c - .quad 0xbd30d199805b0aec - .quad 0xc08ff364b14b9450 - .quad 0xbd381e2a51761f86 - .quad 0xc08ff368fd7ee710 - .quad 0xbd250520a377c7ec - .quad 0xc08ff36d48192564 - .quad 0xbcef941453836236 - .quad 0xc08ff371911b7f10 - .quad 0xbd39e65cd77582e2 - .quad 0xc08ff375d887228a - .quad 0x3d201640f615fa5c - .quad 0xc08ff37a1e5d3cf2 - .quad 0xbce855a216719009 - .quad 0xc08ff37e629efa1e - .quad 0xbd3ae66b65d78df9 - .quad 0xc08ff382a54d8498 - .quad 0xbd45cb804b949696 - .quad 0xc08ff386e66a05a0 - .quad 0xbd33de15e265b5d9 - .quad 0xc08ff38b25f5a52a - .quad 0xbd46acfcfdca95de - .quad 0xc08ff38f63f189ea - .quad 0xbd1a3f6c066ebdd4 - .quad 0xc08ff393a05ed948 - .quad 0xbd3ecf4dff1e8ea2 - .quad 0xc08ff397db3eb770 - .quad 0xbd40d40bb2010158 - .quad 0xc08ff39c1492474a - .quad 0xbd40f992ba145dcf - .quad 0xc08ff3a04c5aaa80 - .quad 0xbd346fab3fa1a144 - .quad 0xc08ff3a48299017e - .quad 0xbd23ea90adf6a54a - .quad 0xc08ff3a8b74e6b74 - .quad 0xbd449e1389f86468 - .quad 0xc08ff3acea7c065c - .quad 0xbd441dfc7d7c3321 - .quad 0xc08ff3b11c22eef6 - .quad 0xbd148ad9b560f3b7 - .quad 0xc08ff3b54c4440ca - .quad 0x3cf1bfb62d6a3aa8 - .quad 0xc08ff3b97ae1162e - .quad 0xbd2ac444ea257ffa - .quad 0xc08ff3bda7fa8846 - .quad 0xbd39313aec658458 - .quad 0xc08ff3c1d391af06 - .quad 0x3d2a140de4db9aae - .quad 0xc08ff3c5fda7a12e - .quad 0xbd24c06f912ab9d1 - .quad 0xc08ff3ca263d7456 - .quad 0xbd426152c271eb36 - .quad 0xc08ff3ce4d543cea - .quad 0xbd33483146784bd2 - .quad 0xc08ff3d272ed0e28 - .quad 0xbd44640a8fec6a2e - .quad 0xc08ff3d69708fa2a - .quad 0xbd479ca7cb93cc08 - .quad 0xc08ff3dab9a911e2 - .quad 0xbd3cc65b96825ec6 - .quad 0xc08ff3dedace651c - .quad 0xbd2103e8f00d41c8 - .quad 0xc08ff3e2fa7a0280 - .quad 0xbd3ebdb1bbaf9ab0 - .quad 0xc08ff3e718acf798 - .quad 0xbd350343f8df4b43 - .quad 0xc08ff3eb356850ca - .quad 0xbd3db11aa6a7cdea - .quad 0xc08ff3ef50ad1960 - .quad 0xbd3b3b3864c60011 - .quad 0xc08ff3f36a7c5b86 - .quad 0xbd3310f9839f068a - .quad 0xc08ff3f782d7204c - .quad 0xbd40144751b3314f - .quad 0xc08ff3fb99be6faa - .quad 0xbd429875b0e43fd8 - .quad 0xc08ff3ffaf335080 - .quad 0x3cf9518ce032f41d - .quad 0xc08ff403c336c894 - .quad 0x3d29ab66b62c5ca8 - .quad 0xc08ff407d5c9dc98 - .quad 0xbd437fc8cafdef46 - .quad 0xc08ff40be6ed9030 - .quad 0xbd2515e1cacac36e - .quad 0xc08ff40ff6a2e5e6 - .quad 0xbd27f33943464056 - .quad 0xc08ff41404eadf38 - .quad 0xbd1cb6f70109b0f1 - .quad 0xc08ff41811c67c94 - .quad 0x3d24dc166e0e0c68 - .quad 0xc08ff41c1d36bd58 - .quad 0xbd3d990d1e0f6657 - .quad 0xc08ff420273c9fdc - .quad 0xbcfea92d9e0e8ac2 - .quad 0xc08ff4242fd92166 - .quad 0xbd303cf98ab4e537 - .quad 0xc08ff428370d3e38 - .quad 0xbd2fbc00d8d6cbcf - .quad 0xc08ff42c3cd9f18a - .quad 0xbd2fd3fe3499ea9f - .quad 0xc08ff4304140358e - .quad 0xbd3532c412ba94db - .quad 0xc08ff43444410372 - .quad 0xbd1f5ab329b483ec - .quad 0xc08ff43845dd535e - .quad 0xbd40444ebaaf2894 - .quad 0xc08ff43c46161c7c - .quad 0xbd35897d184aaac4 - .quad 0xc08ff44044ec54f2 - .quad 0xbd1d4f639bb5cdf6 - .quad 0xc08ff4444260f1e6 - .quad 0xbd467d28344c2ff0 - .quad 0xc08ff4483e74e786 - .quad 0xbcccb52b4581174d - .quad 0xc08ff44c392928fa - .quad 0xbd449eb852b25382 - .quad 0xc08ff450327ea878 - .quad 0xbd450e785694a8c6 - .quad 0xc08ff4542a765738 - .quad 0xbd2410f5d3161a62 - .quad 0xc08ff45821112578 - .quad 0xbcc81e2b378ff59d - .quad 0xc08ff45c16500280 - .quad 0xbd3e6009faee4be8 - .quad 0xc08ff4600a33dca6 - .quad 0x3d12b628e2d05d76 - .quad 0xc08ff463fcbda144 - .quad 0xbd3cbb828084fcb1 - .quad 0xc08ff467edee3cc8 - .quad 0xbd4085c5870d5301 - .quad 0xc08ff46bddc69aaa - .quad 0xbd4475780e47156b - .quad 0xc08ff46fcc47a574 - .quad 0xbcdbc76a2753b99b - .quad 0xc08ff473b97246bc - .quad 0xbd2012f1593ee62a - .quad 0xc08ff477a547672e - .quad 0xbd3d30c3d2643639 - .quad 0xc08ff47b8fc7ee8a - .quad 0xbd062c45c4bc31c9 - .quad 0xc08ff47f78f4c3a0 - .quad 0xbd22642415d47384 - .quad 0xc08ff48360cecc5a - .quad 0x3d2372fd3ff3197b - .quad 0xc08ff4874756edb4 - .quad 0xbd4668c543d0b42b - .quad 0xc08ff48b2c8e0bca - .quad 0xbd33f65cadbe0d26 - .quad 0xc08ff48f107509ca - .quad 0x3cfbfbf899cf2b3c - .quad 0xc08ff492f30cc9fe - .quad 0xbd307470f69809cc - .quad 0xc08ff496d4562dce - .quad 0xbd44115a1a340462 - .quad 0xc08ff49ab45215c0 - .quad 0xbcff5369fdf426cf - .quad 0xc08ff49e93016172 - .quad 0xbd3fc02bc277071d - .quad 0xc08ff4a27064efa8 - .quad 0xbd4728da988cc139 - .quad 0xc08ff4a64c7d9e44 - .quad 0xbd458147cf67745e - .quad 0xc08ff4aa274c4a4a - .quad 0xbd22100986691daa - .quad 0xc08ff4ae00d1cfde - .quad 0xbd36879fa00b120a - .quad 0xc08ff4b1d90f0a4c - .quad 0xbd40b68fc634db41 - .quad 0xc08ff4b5b004d404 - .quad 0xbd3c03254a7145e3 - .quad 0xc08ff4b985b4069c - .quad 0xbcf4f144da6e4533 - .quad 0xc08ff4bd5a1d7ad0 - .quad 0x3d1b3d7b0e65d2ce - .quad 0xc08ff4c12d420886 - .quad 0x3d0dd3d30f5deaa7 - .quad 0xc08ff4c4ff2286ce - .quad 0x3d20dc60dc5befec - .quad 0xc08ff4c8cfbfcbe0 - .quad 0xbd47f6a1ab3efbbe - .quad 0xc08ff4cc9f1aad26 - .quad 0xbd429b21ae4817e9 - .quad 0xc08ff4d06d33ff32 - .quad 0x3d256a9ae5dca5a3 - .quad 0xc08ff4d43a0c95c2 - .quad 0x3cf38bc99b3611ce - .quad 0xc08ff4d805a543c8 - .quad 0xbd0c6d2c37daf317 - .quad 0xc08ff4dbcffedb64 - .quad 0xbd262404772a151d - .quad 0xc08ff4df991a2de8 - .quad 0xbd11c0de7b779cb3 - .quad 0xc08ff4e360f80bd6 - .quad 0xbd4424a06f870b9e - .quad 0xc08ff4e7279944e8 - .quad 0xbd3a69393bab4fd0 - .quad 0xc08ff4eaecfea808 - .quad 0xbd266cccab240e90 - .quad 0xc08ff4eeb1290356 - .quad 0xbd38e9b57298d22f - .quad 0xc08ff4f27419242c - .quad 0x3d2eddd33ea4d6f1 - .quad 0xc08ff4f635cfd714 - .quad 0xbd476e0ed8a042be - .quad 0xc08ff4f9f64de7dc - .quad 0xbce66ae2a7ada553 - .quad 0xc08ff4fdb5942180 - .quad 0xbd0cd57d9d86514e - .quad 0xc08ff50173a34e3c - .quad 0xbd42efafb4bec72b - .quad 0xc08ff505307c378a - .quad 0xbd1a46dbdcc762d3 - .quad 0xc08ff508ec1fa61a - .quad 0xbd354b383b0e8a55 - .quad 0xc08ff50ca68e61e0 - .quad 0x3d2c7d469ea019ad - .quad 0xc08ff5105fc93208 - .quad 0xbd264adb1adca9a8 - .quad 0xc08ff51417d0dd04 - .quad 0x3ce5c601f0626dc8 - .quad 0xc08ff517cea62882 - .quad 0x3d18eb650003fb32 - .quad 0xc08ff51b8449d972 - .quad 0xbd326baaf0b591f8 - .quad 0xc08ff51f38bcb408 - .quad 0xbd461b8d0e43a37f - .quad 0xc08ff522ebff7bbc - .quad 0xbd33859a74f0d148 - .quad 0xc08ff5269e12f346 - .quad 0xbd3c57f2495fb7fa - .quad 0xc08ff52a4ef7dca8 - .quad 0xbcd5dc21a39bf974 - .quad 0xc08ff52dfeaef926 - .quad 0x3d0aa0e9e6bca777 - .quad 0xc08ff531ad39094c - .quad 0xbd47d0fa4fa0c208 - .quad 0xc08ff5355a96ccf4 - .quad 0x3d23bb5921006679 - .quad 0xc08ff53906c90336 - .quad 0xbd21f3e0c466e8f9 - .quad 0xc08ff53cb1d06a7c - .quad 0xbd39f3ba83f85c08 - .quad 0xc08ff5405badc07a - .quad 0x3d2e77ad7a4b71c0 - .quad 0xc08ff5440461c22a - .quad 0xbd1f1bbd2926f164 - .quad 0xc08ff547abed2bd8 - .quad 0xbd44479667bb79bf - .quad 0xc08ff54b5250b91e - .quad 0xbd2094ef49b8484b - .quad 0xc08ff54ef78d24de - .quad 0xbd41fb87566dd18c - .quad 0xc08ff5529ba32950 - .quad 0xbd3c6d8d86531d56 - .quad 0xc08ff5563e937ff8 - .quad 0xbd323e7492de8d74 - .quad 0xc08ff559e05ee1ac - .quad 0xbcf63d8bd35fdc18 - .quad 0xc08ff55d81060692 - .quad 0xbd3cc78dae939320 - .quad 0xc08ff5612089a626 - .quad 0xbd44cf0e362f4a36 - .quad 0xc08ff564beea7736 - .quad 0xbd3a96d7a36f1545 - .quad 0xc08ff5685c292fe2 - .quad 0xbd4570af1a0bc9f4 - .quad 0xc08ff56bf84685a4 - .quad 0x3d1bdc90791aef03 - .quad 0xc08ff56f93432d44 - .quad 0xbd40d2abacfc0489 - .quad 0xc08ff5732d1fdaea - .quad 0xbd39e35c1aa7693f - .quad 0xc08ff576c5dd4210 - .quad 0xbd23c49c247ab6af - .quad 0xc08ff57a5d7c1588 - .quad 0xbd4374da167aead5 - .quad 0xc08ff57df3fd0782 - .quad 0xbd2aeb8cb1ac05cd - .quad 0xc08ff5818960c982 - .quad 0xbd3b1b8ae4633046 - .quad 0xc08ff5851da80c6c - .quad 0xbd20899cee46ebe4 - .quad 0xc08ff588b0d3807c - .quad 0xbcfc4413fd83dec1 - .quad 0xc08ff58c42e3d54c - .quad 0xbd02101a9685c779 - .quad 0xc08ff58fd3d9b9d2 - .quad 0xbd45c074c957d037 - .quad 0xc08ff59363b5dc66 - .quad 0xbd3f7cc3df8803d1 - .quad 0xc08ff596f278eaba - .quad 0xbd3961ecab44052e - .quad 0xc08ff59a802391e2 - .quad 0xbd1979a5db68721d - .quad 0xc08ff59e0cb67e50 - .quad 0xbd3e4ce321e589a9 - .quad 0xc08ff5a198325bdc - .quad 0x3d0e321d11f8a0ce - .quad 0xc08ff5a52297d5ba - .quad 0x3d227ae8037b21bf - .quad 0xc08ff5a8abe79684 - .quad 0x3d1ebefecd51a1be - .quad 0xc08ff5ac34224836 - .quad 0xbd372c2fed3f759f - .quad 0xc08ff5afbb489432 - .quad 0xbd46b82e2a9e810c - .quad 0xc08ff5b3415b2340 - .quad 0x3d2e59ad84a6a593 - .quad 0xc08ff5b6c65a9d86 - .quad 0xbd249d97df07e357 - .quad 0xc08ff5ba4a47aa98 - .quad 0xbd46d25a5b8a19b2 - .quad 0xc08ff5bdcd22f172 - .quad 0x3d2e859780f0cdc7 - .quad 0xc08ff5c14eed186e - .quad 0xbd4171cf05a99915 - .quad 0xc08ff5c4cfa6c55a - .quad 0xbd41ef9459fef720 - .quad 0xc08ff5c84f509d68 - .quad 0x3d145ccfb66fabd2 - .quad 0xc08ff5cbcdeb4530 - .quad 0xbd46bf2e7459b97d - .quad 0xc08ff5cf4b7760be - .quad 0xbd36132520b9d027 - .quad 0xc08ff5d2c7f59382 - .quad 0x3d15872350f805d6 - .quad 0xc08ff5d643668058 - .quad 0xbd41835d469035a9 - .quad 0xc08ff5d9bdcac98e - .quad 0xbd47b7378ad99d2e - .quad 0xc08ff5dd372310dc - .quad 0xbd472d51ea7c162e - .quad 0xc08ff5e0af6ff76a - .quad 0x3d2a8843781eda15 - .quad 0xc08ff5e426b21dc8 - .quad 0xbd44ea36d76b0bd8 - .quad 0xc08ff5e79cea2402 - .quad 0x3d2e03b336c24b74 - .quad 0xc08ff5eb1218a986 - .quad 0xbd45a7bfdb3c98b0 - .quad 0xc08ff5ee863e4d40 - .quad 0xbd37204f55bbf90d - .quad 0xc08ff5f1f95bad84 - .quad 0xbd41b72e122257f1 - .quad 0xc08ff5f56b71681e - .quad 0xbd1488084776534a - .quad 0xc08ff5f8dc801a48 - .quad 0xbd2866405210e49e - .quad 0xc08ff5fc4c8860b4 - .quad 0x3d1d45da26510032 - .quad 0xc08ff5ffbb8ad784 - .quad 0xbd2f386200388584 - .quad 0xc08ff60329881a52 - .quad 0xbd47e32446892fb9 - .quad 0xc08ff6069680c42e - .quad 0xbd4330c4c4a27e40 - .quad 0xc08ff60a02756f9c - .quad 0xbd0cb6f70109b0f1 - .quad 0xc08ff60d6d66b694 - .quad 0xbd4777531ab1b43f - .quad 0xc08ff610d755328e - .quad 0x3d118906313e79cf - .quad 0xc08ff61440417c70 - .quad 0x3d0a5b363a6f499c - .quad 0xc08ff617a82c2c9e - .quad 0xbd39308437e74325 - .quad 0xc08ff61b0f15daf6 - .quad 0xbd3fef5f3fc61899 - .quad 0xc08ff61e74ff1ece - .quad 0xbd3b85f3204507b9 - .quad 0xc08ff621d9e88ef6 - .quad 0xbd42fc8ea3276ba0 - .quad 0xc08ff6253dd2c1bc - .quad 0x3d0d2fe4574e09b9 - .quad 0xc08ff628a0be4ce4 - .quad 0xbd3245829ca653e6 - .quad 0xc08ff62c02abc5b4 - .quad 0xbd42a385b236e315 - .quad 0xc08ff62f639bc0ee - .quad 0xbd301f1e98d8979c - .quad 0xc08ff632c38ed2ce - .quad 0xbd3ded9b44542fd9 - .quad 0xc08ff63622858f12 - .quad 0xbd3d400fd651da9a - .quad 0xc08ff639808088f6 - .quad 0x3d29f78153fcfec0 - .quad 0xc08ff63cdd805330 - .quad 0xbd46af859d47a29a - .quad 0xc08ff64039858000 - .quad 0xbd3667f21fa8423f - .quad 0xc08ff6439490a11e - .quad 0xbd1b254cabaa042b - .quad 0xc08ff646eea247c6 - .quad 0x3d1ee969a95f528f - .quad 0xc08ff64a47bb04b4 - .quad 0xbd3821d36e0b7548 - .quad 0xc08ff64d9fdb682a - .quad 0xbd3974e6432d9ee8 - .quad 0xc08ff650f70401ea - .quad 0xbd1d74d044558154 - .quad 0xc08ff6544d356138 - .quad 0xbd371b3a63cddadf - .quad 0xc08ff657a27014e0 - .quad 0x3d17b6aad08dc210 - .quad 0xc08ff65af6b4ab2c - .quad 0xbd47d7bfb12454c5 - .quad 0xc08ff65e4a03b1f4 - .quad 0xbd373647bf25fa5f - .quad 0xc08ff6619c5db68e - .quad 0xbcf742a6b2827cf0 - .quad 0xc08ff664edc345d8 - .quad 0xbd02d3bbd925734c - .quad 0xc08ff6683e34ec38 - .quad 0xbd03f7a55cd2af4c - .quad 0xc08ff66b8db3359a - .quad 0xbd308364fa508035 - .quad 0xc08ff66edc3ead74 - .quad 0x3d2b37bd36337985 - .quad 0xc08ff67229d7dec0 - .quad 0x3d22a424c693063d - .quad 0xc08ff675767f5404 - .quad 0xbd166cccab240e90 - .quad 0xc08ff678c2359750 - .quad 0x3d2bce65acc07927 - .quad 0xc08ff67c0cfb323a - .quad 0xbd25651ccd0e0880 - .quad 0xc08ff67f56d0ade6 - .quad 0xbd4533d5b4542c99 - .quad 0xc08ff6829fb69304 - .quad 0xbd22ce6312ebb81d - .quad 0xc08ff685e7ad69ca - .quad 0xbd2b6967f02b01d8 - .quad 0xc08ff6892eb5b9fe - .quad 0xbd3bb55730409355 - .quad 0xc08ff68c74d00af2 - .quad 0xbd4352b18e47fcd2 - .quad 0xc08ff68fb9fce386 - .quad 0xbceed0798d1aa216 - .quad 0xc08ff692fe3cca22 - .quad 0xbd464b702b56565e - .quad 0xc08ff696419044c4 - .quad 0xbd45909799f95e23 - .quad 0xc08ff69983f7d8f4 - .quad 0xbd2bebde1ac6e983 - .quad 0xc08ff69cc5740bc8 - .quad 0xbd18f7aac147fdc1 - .quad 0xc08ff6a0060561e8 - .quad 0x3d2653a2eb403f26 - .quad 0xc08ff6a345ac5f8a - .quad 0x3d1769a8e6b40f5e - .quad 0xc08ff6a684698876 - .quad 0xbd1770535b322bbf - .quad 0xc08ff6a9c23d6004 - .quad 0xbd434df378df21ad - .quad 0xc08ff6acff286920 - .quad 0xbd398cc3b5d08e15 - .quad 0xc08ff6b03b2b2644 - .quad 0xbd39d941e9e746a4 - .quad 0xc08ff6b376461980 - .quad 0x3d2fd2e802de76ad - .quad 0xc08ff6b6b079c472 - .quad 0xbcf968ab16b0d7ba - .quad 0xc08ff6b9e9c6a850 - .quad 0xbd3fa4a9eb6b8621 - .quad 0xc08ff6bd222d45e4 - .quad 0xbd36ad5bac74b87f - .quad 0xc08ff6c059ae1d8a - .quad 0x3d057c1b79ee9964 - .quad 0xc08ff6c39049af32 - .quad 0xbd0af5e9bb5386c2 - .quad 0xc08ff6c6c6007a64 - .quad 0xbce8467191344d58 - .quad 0xc08ff6c9fad2fe3c - .quad 0xbd1148dad646cb9d - .quad 0xc08ff6cd2ec1b96c - .quad 0xbd4149540d5fceb9 - .quad 0xc08ff6d061cd2a40 - .quad 0xbd117b2f1731efbe - .quad 0xc08ff6d393f5ce96 - .quad 0x3d25005be8c5610b - .quad 0xc08ff6d6c53c23e6 - .quad 0x3d29a1979619fe2f - .quad 0xc08ff6d9f5a0a740 - .quad 0x3d15ebe99c4f6416 - .quad 0xc08ff6dd2523d54c - .quad 0xbd36d25a5b8a19b2 - .quad 0xc08ff6e053c62a4c - .quad 0xbd47f3f2612caf97 - .quad 0xc08ff6e38188221c - .quad 0xbd3848e9d1d92d88 - .quad 0xc08ff6e6ae6a382e - .quad 0xbd3b4aada7453897 - .quad 0xc08ff6e9da6ce792 - .quad 0xbd2640ef87ede14b - .quad 0xc08ff6ed0590aaf0 - .quad 0xbd2da89e835cc3d2 - .quad 0xc08ff6f02fd5fc8e - .quad 0x3d2fa6e2ac948d1a - .quad 0xc08ff6f3593d5648 - .quad 0xbd44bf3775fde250 - .quad 0xc08ff6f681c731a0 - .quad 0x3d2924ae921f7eca - .quad 0xc08ff6f9a97407a8 - .quad 0xbd32994b351f388c - .quad 0xc08ff6fcd0445118 - .quad 0xbd429af37d1edf2f - .quad 0xc08ff6fff6388644 - .quad 0x3d2ed5a8a2de89da - .quad 0xc08ff7031b511f16 - .quad 0xbd474d8b66a69572 - .quad 0xc08ff7063f8e9322 - .quad 0xbd3b20d190c69cff - .quad 0xc08ff70962f15992 - .quad 0xbcf455bedf4083bc - .quad 0xc08ff70c8579e930 - .quad 0xbd215844900583de - .quad 0xc08ff70fa728b868 - .quad 0xbd054cda62d3926e - .quad 0xc08ff712c7fe3d44 - .quad 0x3d2143e9a0cbd481 - .quad 0xc08ff715e7faed6e - .quad 0x3d2a82ed66976b91 - .quad 0xc08ff719071f3e30 - .quad 0xbd318c64f0672cf9 - .quad 0xc08ff71c256ba478 - .quad 0xbd2c760bc9b188c4 - .quad 0xc08ff71f42e094d2 - .quad 0xbd2b88ca364674ac - .quad 0xc08ff7225f7e836c - .quad 0xbd46361ccd8974a5 - .quad 0xc08ff7257b45e41a - .quad 0xbd24e3eb5884aae7 - .quad 0xc08ff72896372a4c - .quad 0xbd38b1aff71c8605 - .quad 0xc08ff72bb052c91a - .quad 0xbd429a0a140ddd8a - .quad 0xc08ff72ec999333e - .quad 0xbd43d6bb35ec114f - .quad 0xc08ff731e20adb16 - .quad 0xbd2bd849ce4dc635 - .quad 0xc08ff734f9a832a2 - .quad 0xbd206c243749114c - .quad 0xc08ff7381071ab88 - .quad 0xbd3595f2f68d91fd - .quad 0xc08ff73b2667b714 - .quad 0xbd3017eb15bb7de4 - .quad 0xc08ff73e3b8ac636 - .quad 0x3d1c28798c12cc39 - .quad 0xc08ff7414fdb4982 - .quad 0xbd12ce6312ebb81d - .quad 0xc08ff7446359b134 - .quad 0xbd4395510d1e3f81 - .quad 0xc08ff74776066d30 - .quad 0xbd3f86493917b407 - .quad 0xc08ff74a87e1ecfe - .quad 0xbd10be3a57487484 - .quad 0xc08ff74d98ec9fcc - .quad 0xbd2d5297837adb4b - .quad 0xc08ff750a926f472 - .quad 0xbd43ae4d308b33a5 - .quad 0xc08ff753b8915972 - .quad 0x3d2d54d244e2aaee - .quad 0xc08ff756c72c3cee - .quad 0xbd35f097b0fe80a3 - .quad 0xc08ff759d4f80cba - .quad 0xbd3077f1f5f0cc83 - .quad 0xc08ff75ce1f5364e - .quad 0x3d19367107b8e917 - .quad 0xc08ff75fee2426ca - .quad 0xbd33623c81400bcf - .quad 0xc08ff762f9854afc - .quad 0xbd33b55bcb161bac - .quad 0xc08ff76604190f5a - .quad 0x3d2eb3c3bf914b9c - .quad 0xc08ff7690ddfe000 - .quad 0xbd45a6a7f43f6ec0 - .quad 0xc08ff76c16da28be - .quad 0xbd3b253dff5e0495 - .quad 0xc08ff76f1f085508 - .quad 0x3d1b08127eec65d2 - .quad 0xc08ff772266acffc - .quad 0xbd45b1799ceaeb51 - .quad 0xc08ff7752d02046c - .quad 0xbd2e63bd0fcda210 - .quad 0xc08ff77832ce5cce - .quad 0xbd148cd0a7bb24b2 - .quad 0xc08ff77b37d04348 - .quad 0x3d11ef56fa3d37b4 - .quad 0xc08ff77e3c0821ac - .quad 0x3d1a768216f872eb - .quad 0xc08ff7813f766178 - .quad 0xbd44b4a15a96316e - .quad 0xc08ff784421b6bdc - .quad 0xbd4258a7b2336919 - .quad 0xc08ff78743f7a9b2 - .quad 0x3d03f659faac5a20 - .quad 0xc08ff78a450b8380 - .quad 0xbd2401fbaaa67e3c - .quad 0xc08ff78d4557617e - .quad 0xbd476fa81cf6a494 - .quad 0xc08ff79044dbab94 - .quad 0xbd44f46b93eece0a - .quad 0xc08ff7934398c956 - .quad 0xbd3c91f073716495 - .quad 0xc08ff796418f2208 - .quad 0xbd3672b0c88d4dd6 - .quad 0xc08ff7993ebf1c9e - .quad 0xbd3fb554647678d1 - .quad 0xc08ff79c3b291fbe - .quad 0xbd0bb98afdf33295 - .quad 0xc08ff79f36cd91ba - .quad 0xbd3a1c40753a869f - .quad 0xc08ff7a231acd89a - .quad 0xbd3395510d1e3f81 - .quad 0xc08ff7a52bc75a14 - .quad 0xbcf98fd2dca61c14 - .quad 0xc08ff7a8251d7b8e - .quad 0xbd40e7b8e7574248 - .quad 0xc08ff7ab1dafa224 - .quad 0xbd43f88ff2576e98 - .quad 0xc08ff7ae157e32a2 - .quad 0xbd1f61a96b8ce776 - .quad 0xc08ff7b10c899184 - .quad 0x3cde66be73b9da04 - .quad 0xc08ff7b402d222fa - .quad 0xbd408d5c3f1d5c0d - .quad 0xc08ff7b6f8584aea - .quad 0xbd3cbebea25ecd9e - .quad 0xc08ff7b9ed1c6cea - .quad 0xbd2507d6dc1f27ef - .quad 0xc08ff7bce11eec44 - .quad 0x3d2794d4c6c8f327 - .quad 0xc08ff7bfd4602bf4 - .quad 0xbd3f1e32799da52d - .quad 0xc08ff7c2c6e08eb0 - .quad 0xbd35c01818adf4af - .quad 0xc08ff7c5b8a076de - .quad 0x3d2cfc4de6d73dea - .quad 0xc08ff7c8a9a04696 - .quad 0xbd4227264a17d460 - .quad 0xc08ff7cb99e05fae - .quad 0xbd0142b08bb672e8 - .quad 0xc08ff7ce896123a8 - .quad 0xbd2564fcfaea5fb3 - .quad 0xc08ff7d17822f3c2 - .quad 0x3d2aab1b2a41b090 - .quad 0xc08ff7d4662630ea - .quad 0xbd46ac3b83ef359a - .quad 0xc08ff7d7536b3bce - .quad 0x3d241a2f220ccf53 - .quad 0xc08ff7da3ff274c6 - .quad 0xbd38f5d37680fd7c - .quad 0xc08ff7dd2bbc3bec - .quad 0x3d048a179268271d - .quad 0xc08ff7e016c8f108 - .quad 0xbd471e548b69f12a - .quad 0xc08ff7e30118f3a2 - .quad 0xbd41a23946dfa58c - .quad 0xc08ff7e5eaaca2f4 - .quad 0xbd25330d5605f2a6 - .quad 0xc08ff7e8d3845df0 - .quad 0xbd319b14945cf6ba - .quad 0xc08ff7ebbba08342 - .quad 0xbd4702e1863f7c92 - .quad 0xc08ff7eea3017150 - .quad 0xbd437cfeba9ff979 - .quad 0xc08ff7f189a78636 - .quad 0xbd3df6e958e938b0 - .quad 0xc08ff7f46f931fca - .quad 0xbd37ca15910e7069 - .quad 0xc08ff7f754c49b9c - .quad 0xbd15cfd00d77e6ec - .quad 0xc08ff7fa393c56f4 - .quad 0xbd2a025d9e2442e6 - .quad 0xc08ff7fd1cfaaed6 - .quad 0xbd3258e9a821b7cc - .quad 0xc08ff80000000000 - .quad 0x0000000000000000 - .rept 48 - .byte 0 - .endr - -/* Lookup exp(2) table (for HSW): */ -.if .-__svml_dpow_data != _hsw_dTe -.err -.endif - .quad 0x3ff0000000000000 - .quad 0x3ff00b1afa5abcbf - .quad 0x3ff0163da9fb3335 - .quad 0x3ff02168143b0281 - .quad 0x3ff02c9a3e778061 - .quad 0x3ff037d42e11bbcc - .quad 0x3ff04315e86e7f85 - .quad 0x3ff04e5f72f654b1 - .quad 0x3ff059b0d3158574 - .quad 0x3ff0650a0e3c1f89 - .quad 0x3ff0706b29ddf6de - .quad 0x3ff07bd42b72a836 - .quad 0x3ff0874518759bc8 - .quad 0x3ff092bdf66607e0 - .quad 0x3ff09e3ecac6f383 - .quad 0x3ff0a9c79b1f3919 - .quad 0x3ff0b5586cf9890f - .quad 0x3ff0c0f145e46c85 - .quad 0x3ff0cc922b7247f7 - .quad 0x3ff0d83b23395dec - .quad 0x3ff0e3ec32d3d1a2 - .quad 0x3ff0efa55fdfa9c5 - .quad 0x3ff0fb66affed31b - .quad 0x3ff1073028d7233e - .quad 0x3ff11301d0125b51 - .quad 0x3ff11edbab5e2ab6 - .quad 0x3ff12abdc06c31cc - .quad 0x3ff136a814f204ab - .quad 0x3ff1429aaea92de0 - .quad 0x3ff14e95934f312e - .quad 0x3ff15a98c8a58e51 - .quad 0x3ff166a45471c3c2 - .quad 0x3ff172b83c7d517b - .quad 0x3ff17ed48695bbc0 - .quad 0x3ff18af9388c8dea - .quad 0x3ff1972658375d2f - .quad 0x3ff1a35beb6fcb75 - .quad 0x3ff1af99f8138a1c - .quad 0x3ff1bbe084045cd4 - .quad 0x3ff1c82f95281c6b - .quad 0x3ff1d4873168b9aa - .quad 0x3ff1e0e75eb44027 - .quad 0x3ff1ed5022fcd91d - .quad 0x3ff1f9c18438ce4d - .quad 0x3ff2063b88628cd6 - .quad 0x3ff212be3578a819 - .quad 0x3ff21f49917ddc96 - .quad 0x3ff22bdda27912d1 - .quad 0x3ff2387a6e756238 - .quad 0x3ff2451ffb82140a - .quad 0x3ff251ce4fb2a63f - .quad 0x3ff25e85711ece75 - .quad 0x3ff26b4565e27cdd - .quad 0x3ff2780e341ddf29 - .quad 0x3ff284dfe1f56381 - .quad 0x3ff291ba7591bb70 - .quad 0x3ff29e9df51fdee1 - .quad 0x3ff2ab8a66d10f13 - .quad 0x3ff2b87fd0dad990 - .quad 0x3ff2c57e39771b2f - .quad 0x3ff2d285a6e4030b - .quad 0x3ff2df961f641589 - .quad 0x3ff2ecafa93e2f56 - .quad 0x3ff2f9d24abd886b - .quad 0x3ff306fe0a31b715 - .quad 0x3ff31432edeeb2fd - .quad 0x3ff32170fc4cd831 - .quad 0x3ff32eb83ba8ea32 - .quad 0x3ff33c08b26416ff - .quad 0x3ff3496266e3fa2d - .quad 0x3ff356c55f929ff1 - .quad 0x3ff36431a2de883b - .quad 0x3ff371a7373aa9cb - .quad 0x3ff37f26231e754a - .quad 0x3ff38cae6d05d866 - .quad 0x3ff39a401b7140ef - .quad 0x3ff3a7db34e59ff7 - .quad 0x3ff3b57fbfec6cf4 - .quad 0x3ff3c32dc313a8e5 - .quad 0x3ff3d0e544ede173 - .quad 0x3ff3dea64c123422 - .quad 0x3ff3ec70df1c5175 - .quad 0x3ff3fa4504ac801c - .quad 0x3ff40822c367a024 - .quad 0x3ff4160a21f72e2a - .quad 0x3ff423fb2709468a - .quad 0x3ff431f5d950a897 - .quad 0x3ff43ffa3f84b9d4 - .quad 0x3ff44e086061892d - .quad 0x3ff45c2042a7d232 - .quad 0x3ff46a41ed1d0057 - .quad 0x3ff4786d668b3237 - .quad 0x3ff486a2b5c13cd0 - .quad 0x3ff494e1e192aed2 - .quad 0x3ff4a32af0d7d3de - .quad 0x3ff4b17dea6db7d7 - .quad 0x3ff4bfdad5362a27 - .quad 0x3ff4ce41b817c114 - .quad 0x3ff4dcb299fddd0d - .quad 0x3ff4eb2d81d8abff - .quad 0x3ff4f9b2769d2ca7 - .quad 0x3ff508417f4531ee - .quad 0x3ff516daa2cf6642 - .quad 0x3ff5257de83f4eef - .quad 0x3ff5342b569d4f82 - .quad 0x3ff542e2f4f6ad27 - .quad 0x3ff551a4ca5d920f - .quad 0x3ff56070dde910d2 - .quad 0x3ff56f4736b527da - .quad 0x3ff57e27dbe2c4cf - .quad 0x3ff58d12d497c7fd - .quad 0x3ff59c0827ff07cc - .quad 0x3ff5ab07dd485429 - .quad 0x3ff5ba11fba87a03 - .quad 0x3ff5c9268a5946b7 - .quad 0x3ff5d84590998b93 - .quad 0x3ff5e76f15ad2148 - .quad 0x3ff5f6a320dceb71 - .quad 0x3ff605e1b976dc09 - .quad 0x3ff6152ae6cdf6f4 - .quad 0x3ff6247eb03a5585 - .quad 0x3ff633dd1d1929fd - .quad 0x3ff6434634ccc320 - .quad 0x3ff652b9febc8fb7 - .quad 0x3ff6623882552225 - .quad 0x3ff671c1c70833f6 - .quad 0x3ff68155d44ca973 - .quad 0x3ff690f4b19e9538 - .quad 0x3ff6a09e667f3bcd - .quad 0x3ff6b052fa75173e - .quad 0x3ff6c012750bdabf - .quad 0x3ff6cfdcddd47645 - .quad 0x3ff6dfb23c651a2f - .quad 0x3ff6ef9298593ae5 - .quad 0x3ff6ff7df9519484 - .quad 0x3ff70f7466f42e87 - .quad 0x3ff71f75e8ec5f74 - .quad 0x3ff72f8286ead08a - .quad 0x3ff73f9a48a58174 - .quad 0x3ff74fbd35d7cbfd - .quad 0x3ff75feb564267c9 - .quad 0x3ff77024b1ab6e09 - .quad 0x3ff780694fde5d3f - .quad 0x3ff790b938ac1cf6 - .quad 0x3ff7a11473eb0187 - .quad 0x3ff7b17b0976cfdb - .quad 0x3ff7c1ed0130c132 - .quad 0x3ff7d26a62ff86f0 - .quad 0x3ff7e2f336cf4e62 - .quad 0x3ff7f3878491c491 - .quad 0x3ff80427543e1a12 - .quad 0x3ff814d2add106d9 - .quad 0x3ff82589994cce13 - .quad 0x3ff8364c1eb941f7 - .quad 0x3ff8471a4623c7ad - .quad 0x3ff857f4179f5b21 - .quad 0x3ff868d99b4492ed - .quad 0x3ff879cad931a436 - .quad 0x3ff88ac7d98a6699 - .quad 0x3ff89bd0a478580f - .quad 0x3ff8ace5422aa0db - .quad 0x3ff8be05bad61778 - .quad 0x3ff8cf3216b5448c - .quad 0x3ff8e06a5e0866d9 - .quad 0x3ff8f1ae99157736 - .quad 0x3ff902fed0282c8a - .quad 0x3ff9145b0b91ffc6 - .quad 0x3ff925c353aa2fe2 - .quad 0x3ff93737b0cdc5e5 - .quad 0x3ff948b82b5f98e5 - .quad 0x3ff95a44cbc8520f - .quad 0x3ff96bdd9a7670b3 - .quad 0x3ff97d829fde4e50 - .quad 0x3ff98f33e47a22a2 - .quad 0x3ff9a0f170ca07ba - .quad 0x3ff9b2bb4d53fe0d - .quad 0x3ff9c49182a3f090 - .quad 0x3ff9d674194bb8d5 - .quad 0x3ff9e86319e32323 - .quad 0x3ff9fa5e8d07f29e - .quad 0x3ffa0c667b5de565 - .quad 0x3ffa1e7aed8eb8bb - .quad 0x3ffa309bec4a2d33 - .quad 0x3ffa42c980460ad8 - .quad 0x3ffa5503b23e255d - .quad 0x3ffa674a8af46052 - .quad 0x3ffa799e1330b358 - .quad 0x3ffa8bfe53c12e59 - .quad 0x3ffa9e6b5579fdbf - .quad 0x3ffab0e521356eba - .quad 0x3ffac36bbfd3f37a - .quad 0x3ffad5ff3a3c2774 - .quad 0x3ffae89f995ad3ad - .quad 0x3ffafb4ce622f2ff - .quad 0x3ffb0e07298db666 - .quad 0x3ffb20ce6c9a8952 - .quad 0x3ffb33a2b84f15fb - .quad 0x3ffb468415b749b1 - .quad 0x3ffb59728de5593a - .quad 0x3ffb6c6e29f1c52a - .quad 0x3ffb7f76f2fb5e47 - .quad 0x3ffb928cf22749e4 - .quad 0x3ffba5b030a1064a - .quad 0x3ffbb8e0b79a6f1f - .quad 0x3ffbcc1e904bc1d2 - .quad 0x3ffbdf69c3f3a207 - .quad 0x3ffbf2c25bd71e09 - .quad 0x3ffc06286141b33d - .quad 0x3ffc199bdd85529c - .quad 0x3ffc2d1cd9fa652c - .quad 0x3ffc40ab5fffd07a - .quad 0x3ffc544778fafb22 - .quad 0x3ffc67f12e57d14b - .quad 0x3ffc7ba88988c933 - .quad 0x3ffc8f6d9406e7b5 - .quad 0x3ffca3405751c4db - .quad 0x3ffcb720dcef9069 - .quad 0x3ffccb0f2e6d1675 - .quad 0x3ffcdf0b555dc3fa - .quad 0x3ffcf3155b5bab74 - .quad 0x3ffd072d4a07897c - .quad 0x3ffd1b532b08c968 - .quad 0x3ffd2f87080d89f2 - .quad 0x3ffd43c8eacaa1d6 - .quad 0x3ffd5818dcfba487 - .quad 0x3ffd6c76e862e6d3 - .quad 0x3ffd80e316c98398 - .quad 0x3ffd955d71ff6075 - .quad 0x3ffda9e603db3285 - .quad 0x3ffdbe7cd63a8315 - .quad 0x3ffdd321f301b460 - .quad 0x3ffde7d5641c0658 - .quad 0x3ffdfc97337b9b5f - .quad 0x3ffe11676b197d17 - .quad 0x3ffe264614f5a129 - .quad 0x3ffe3b333b16ee12 - .quad 0x3ffe502ee78b3ff6 - .quad 0x3ffe653924676d76 - .quad 0x3ffe7a51fbc74c83 - .quad 0x3ffe8f7977cdb740 - .quad 0x3ffea4afa2a490da - .quad 0x3ffeb9f4867cca6e - .quad 0x3ffecf482d8e67f1 - .quad 0x3ffee4aaa2188510 - .quad 0x3ffefa1bee615a27 - .quad 0x3fff0f9c1cb6412a - .quad 0x3fff252b376bba97 - .quad 0x3fff3ac948dd7274 - .quad 0x3fff50765b6e4540 - .quad 0x3fff6632798844f8 - .quad 0x3fff7bfdad9cbe14 - .quad 0x3fff91d802243c89 - .quad 0x3fffa7c1819e90d8 - .quad 0x3fffbdba3692d514 - .quad 0x3fffd3c22b8f71f1 - .quad 0x3fffe9d96b2a23d9 - -/* General purpose constants: - * hsw_dMantMask */ -double_vector _hsw_dMantMask 0x000fffffffffffff - -/* hsw_dOne */ -double_vector _hsw_dOne 0x3ff0000000000000 - -/* hsw_dCvtMask */ -double_vector _hsw_dCvtMask 0x4338000000000000 - -/* hsw_dMinNorm */ -double_vector _hsw_dMinNorm 0x0010000000000000 - -/* hsw_dMaxNorm */ -double_vector _hsw_dMaxNorm 0x7fefffffffffffff - -/* hsw_lRndBit */ -double_vector _hsw_lRndBit 0x0000040000000000 - -/* hsw_lRndMask */ -double_vector _hsw_lRndMask 0xfffff80000000000 - -/* Log polynomial: - * hsw_dc6 */ -double_vector _hsw_dc6 0xbfcec1cfbbc5c90c - -/* hsw_dc5 */ -double_vector _hsw_dc5 0x3fd2776da3d26e6a - -/* hsw_dc4 */ -double_vector _hsw_dc4 0xbfd71547655d37e0 - -/* hsw_dc3 */ -double_vector _hsw_dc3 0x3fdec709dc39fb02 - -/* hsw_dc1 */ -double_vector _hsw_dc1 0x3c777a3a2c24613d - -/* hsw_dc1h */ -double_vector _hsw_dc1h 0x3ff71547652b82fe - -/* hsw_dc2 */ -double_vector _hsw_dc2 0xbfe71547652b82fe - -/* Additional constants: - * hsw_AbsMask */ -double_vector _hsw_dAbsMask 0x7fffffffffffffff - -/* hsw_dDomainRange */ -double_vector _hsw_dDomainRange 0x408fec0000000000 - -/* hsw_dShifter */ -double_vector _hsw_dShifter 0x42b800000003ff00 - -/* hsw_dIndexMask */ -double_vector _hsw_dIndexMask 0x00000000000007f8 - -/* Exp polynomial: - * hsw_dce4 */ -double_vector _hsw_dce4 0x3f83b2ab930f15f9 - -/* hsw_dce3 */ -double_vector _hsw_dce3 0x3fac6b090da1e0a9 - -/* hsw_dce2 */ -double_vector _hsw_dce2 0x3fcebfbdff82c54d - -/* hsw_dce1 */ -double_vector _hsw_dce1 0x3fe62e42fefa39b9 - -/* Reciprocal lookup table for log part (non HSW): */ -.if .-__svml_dpow_data != _rcp_t1 -.err -.endif - .quad 0x3ff7154740000000 - .quad 0x3ff70f8340000000 - .quad 0x3ff709c240000000 - .quad 0x3ff7040440000000 - .quad 0x3ff6fe4900000000 - .quad 0x3ff6f89080000000 - .quad 0x3ff6f2db00000000 - .quad 0x3ff6ed2840000000 - .quad 0x3ff6e77840000000 - .quad 0x3ff6e1cb40000000 - .quad 0x3ff6dc2100000000 - .quad 0x3ff6d67980000000 - .quad 0x3ff6d0d4c0000000 - .quad 0x3ff6cb32c0000000 - .quad 0x3ff6c593c0000000 - .quad 0x3ff6bff780000000 - .quad 0x3ff6ba5dc0000000 - .quad 0x3ff6b4c700000000 - .quad 0x3ff6af32c0000000 - .quad 0x3ff6a9a180000000 - .quad 0x3ff6a41300000000 - .quad 0x3ff69e8700000000 - .quad 0x3ff698fdc0000000 - .quad 0x3ff6937740000000 - .quad 0x3ff68df380000000 - .quad 0x3ff6887280000000 - .quad 0x3ff682f400000000 - .quad 0x3ff67d7840000000 - .quad 0x3ff677ff40000000 - .quad 0x3ff67288c0000000 - .quad 0x3ff66d1540000000 - .quad 0x3ff667a400000000 - .quad 0x3ff6623580000000 - .quad 0x3ff65cc9c0000000 - .quad 0x3ff6576080000000 - .quad 0x3ff651fa00000000 - .quad 0x3ff64c9600000000 - .quad 0x3ff6473480000000 - .quad 0x3ff641d5c0000000 - .quad 0x3ff63c7980000000 - .quad 0x3ff6372000000000 - .quad 0x3ff631c900000000 - .quad 0x3ff62c7480000000 - .quad 0x3ff6272280000000 - .quad 0x3ff621d340000000 - .quad 0x3ff61c8640000000 - .quad 0x3ff6173c00000000 - .quad 0x3ff611f440000000 - .quad 0x3ff60caf00000000 - .quad 0x3ff6076c40000000 - .quad 0x3ff6022c00000000 - .quad 0x3ff5fcee80000000 - .quad 0x3ff5f7b340000000 - .quad 0x3ff5f27a80000000 - .quad 0x3ff5ed4440000000 - .quad 0x3ff5e81040000000 - .quad 0x3ff5e2df00000000 - .quad 0x3ff5ddb040000000 - .quad 0x3ff5d883c0000000 - .quad 0x3ff5d359c0000000 - .quad 0x3ff5ce3240000000 - .quad 0x3ff5c90d40000000 - .quad 0x3ff5c3ea80000000 - .quad 0x3ff5beca40000000 - .quad 0x3ff5b9ac80000000 - .quad 0x3ff5b49100000000 - .quad 0x3ff5af7800000000 - .quad 0x3ff5aa6180000000 - .quad 0x3ff5a54d40000000 - .quad 0x3ff5a03b40000000 - .quad 0x3ff59b2bc0000000 - .quad 0x3ff5961ec0000000 - .quad 0x3ff59113c0000000 - .quad 0x3ff58c0b80000000 - .quad 0x3ff5870540000000 - .quad 0x3ff58201c0000000 - .quad 0x3ff57d0040000000 - .quad 0x3ff5780140000000 - .quad 0x3ff5730480000000 - .quad 0x3ff56e0a00000000 - .quad 0x3ff56911c0000000 - .quad 0x3ff5641c00000000 - .quad 0x3ff55f2880000000 - .quad 0x3ff55a3740000000 - .quad 0x3ff5554840000000 - .quad 0x3ff5505bc0000000 - .quad 0x3ff54b7140000000 - .quad 0x3ff5468900000000 - .quad 0x3ff541a340000000 - .quad 0x3ff53cbf80000000 - .quad 0x3ff537de40000000 - .quad 0x3ff532ff00000000 - .quad 0x3ff52e2240000000 - .quad 0x3ff5294780000000 - .quad 0x3ff5246f00000000 - .quad 0x3ff51f98c0000000 - .quad 0x3ff51ac4c0000000 - .quad 0x3ff515f300000000 - .quad 0x3ff5112340000000 - .quad 0x3ff50c5600000000 - .quad 0x3ff5078ac0000000 - .quad 0x3ff502c1c0000000 - .quad 0x3ff4fdfac0000000 - .quad 0x3ff4f93600000000 - .quad 0x3ff4f47380000000 - .quad 0x3ff4efb340000000 - .quad 0x3ff4eaf500000000 - .quad 0x3ff4e638c0000000 - .quad 0x3ff4e17ec0000000 - .quad 0x3ff4dcc700000000 - .quad 0x3ff4d81180000000 - .quad 0x3ff4d35dc0000000 - .quad 0x3ff4ceac80000000 - .quad 0x3ff4c9fd00000000 - .quad 0x3ff4c54fc0000000 - .quad 0x3ff4c0a4c0000000 - .quad 0x3ff4bbfbc0000000 - .quad 0x3ff4b754c0000000 - .quad 0x3ff4b2b000000000 - .quad 0x3ff4ae0d40000000 - .quad 0x3ff4a96c80000000 - .quad 0x3ff4a4ce00000000 - .quad 0x3ff4a03140000000 - .quad 0x3ff49b9700000000 - .quad 0x3ff496fe80000000 - .quad 0x3ff4926800000000 - .quad 0x3ff48dd3c0000000 - .quad 0x3ff4894180000000 - .quad 0x3ff484b100000000 - .quad 0x3ff48022c0000000 - .quad 0x3ff47b96c0000000 - .quad 0x3ff4770c80000000 - .quad 0x3ff4728440000000 - .quad 0x3ff46dfe00000000 - .quad 0x3ff46979c0000000 - .quad 0x3ff464f780000000 - .quad 0x3ff4607780000000 - .quad 0x3ff45bf940000000 - .quad 0x3ff4577d00000000 - .quad 0x3ff45302c0000000 - .quad 0x3ff44e8a40000000 - .quad 0x3ff44a1400000000 - .quad 0x3ff4459f80000000 - .quad 0x3ff4412d40000000 - .quad 0x3ff43cbcc0000000 - .quad 0x3ff4384e40000000 - .quad 0x3ff433e180000000 - .quad 0x3ff42f7700000000 - .quad 0x3ff42b0e40000000 - .quad 0x3ff426a780000000 - .quad 0x3ff4224280000000 - .quad 0x3ff41ddf80000000 - .quad 0x3ff4197e80000000 - .quad 0x3ff4151f40000000 - .quad 0x3ff410c200000000 - .quad 0x3ff40c66c0000000 - .quad 0x3ff4080d40000000 - .quad 0x3ff403b5c0000000 - .quad 0x3ff3ff6000000000 - .quad 0x3ff3fb0c00000000 - .quad 0x3ff3f6ba40000000 - .quad 0x3ff3f26a00000000 - .quad 0x3ff3ee1bc0000000 - .quad 0x3ff3e9cf80000000 - .quad 0x3ff3e58500000000 - .quad 0x3ff3e13c40000000 - .quad 0x3ff3dcf580000000 - .quad 0x3ff3d8b080000000 - .quad 0x3ff3d46d40000000 - .quad 0x3ff3d02c00000000 - .quad 0x3ff3cbec80000000 - .quad 0x3ff3c7aec0000000 - .quad 0x3ff3c37300000000 - .quad 0x3ff3bf3900000000 - .quad 0x3ff3bb00c0000000 - .quad 0x3ff3b6ca40000000 - .quad 0x3ff3b29580000000 - .quad 0x3ff3ae62c0000000 - .quad 0x3ff3aa3180000000 - .quad 0x3ff3a60240000000 - .quad 0x3ff3a1d4c0000000 - .quad 0x3ff39da900000000 - .quad 0x3ff3997f40000000 - .quad 0x3ff3955700000000 - .quad 0x3ff3913080000000 - .quad 0x3ff38d0bc0000000 - .quad 0x3ff388e900000000 - .quad 0x3ff384c7c0000000 - .quad 0x3ff380a840000000 - .quad 0x3ff37c8ac0000000 - .quad 0x3ff3786ec0000000 - .quad 0x3ff3745480000000 - .quad 0x3ff3703c00000000 - .quad 0x3ff36c2540000000 - .quad 0x3ff3681040000000 - .quad 0x3ff363fcc0000000 - .quad 0x3ff35feb40000000 - .quad 0x3ff35bdb40000000 - .quad 0x3ff357cd00000000 - .quad 0x3ff353c080000000 - .quad 0x3ff34fb5c0000000 - .quad 0x3ff34bac80000000 - .quad 0x3ff347a540000000 - .quad 0x3ff3439f80000000 - .quad 0x3ff33f9b40000000 - .quad 0x3ff33b9900000000 - .quad 0x3ff3379840000000 - .quad 0x3ff3339900000000 - .quad 0x3ff32f9bc0000000 - .quad 0x3ff32b9fc0000000 - .quad 0x3ff327a5c0000000 - .quad 0x3ff323ad40000000 - .quad 0x3ff31fb680000000 - .quad 0x3ff31bc140000000 - .quad 0x3ff317cdc0000000 - .quad 0x3ff313dbc0000000 - .quad 0x3ff30feb80000000 - .quad 0x3ff30bfd00000000 - .quad 0x3ff3080fc0000000 - .quad 0x3ff3042480000000 - .quad 0x3ff3003ac0000000 - .quad 0x3ff2fc5280000000 - .quad 0x3ff2f86bc0000000 - .quad 0x3ff2f48700000000 - .quad 0x3ff2f0a380000000 - .quad 0x3ff2ecc1c0000000 - .quad 0x3ff2e8e180000000 - .quad 0x3ff2e502c0000000 - .quad 0x3ff2e125c0000000 - .quad 0x3ff2dd4a40000000 - .quad 0x3ff2d97080000000 - .quad 0x3ff2d59840000000 - .quad 0x3ff2d1c180000000 - .quad 0x3ff2cdec40000000 - .quad 0x3ff2ca1880000000 - .quad 0x3ff2c64680000000 - .quad 0x3ff2c27600000000 - .quad 0x3ff2bea700000000 - .quad 0x3ff2bad9c0000000 - .quad 0x3ff2b70dc0000000 - .quad 0x3ff2b34380000000 - .quad 0x3ff2af7ac0000000 - .quad 0x3ff2abb340000000 - .quad 0x3ff2a7ed80000000 - .quad 0x3ff2a42980000000 - .quad 0x3ff2a066c0000000 - .quad 0x3ff29ca580000000 - .quad 0x3ff298e5c0000000 - .quad 0x3ff29527c0000000 - .quad 0x3ff2916b00000000 - .quad 0x3ff28dafc0000000 - .quad 0x3ff289f640000000 - .quad 0x3ff2863e00000000 - .quad 0x3ff2828740000000 - .quad 0x3ff27ed240000000 - .quad 0x3ff27b1e80000000 - .quad 0x3ff2776c40000000 - .quad 0x3ff273bb80000000 - .quad 0x3ff2700c40000000 - .quad 0x3ff26c5e80000000 - .quad 0x3ff268b200000000 - .quad 0x3ff2650740000000 - .quad 0x3ff2615dc0000000 - .quad 0x3ff25db5c0000000 - .quad 0x3ff25a0f40000000 - .quad 0x3ff2566a40000000 - .quad 0x3ff252c6c0000000 - .quad 0x3ff24f2480000000 - .quad 0x3ff24b83c0000000 - .quad 0x3ff247e480000000 - .quad 0x3ff24446c0000000 - .quad 0x3ff240aa40000000 - .quad 0x3ff23d0f40000000 - .quad 0x3ff23975c0000000 - .quad 0x3ff235dd80000000 - .quad 0x3ff23246c0000000 - .quad 0x3ff22eb180000000 - .quad 0x3ff22b1d80000000 - .quad 0x3ff2278b00000000 - .quad 0x3ff223fa00000000 - .quad 0x3ff2206a40000000 - .quad 0x3ff21cdc00000000 - .quad 0x3ff2194f00000000 - .quad 0x3ff215c380000000 - .quad 0x3ff2123940000000 - .quad 0x3ff20eb080000000 - .quad 0x3ff20b2940000000 - .quad 0x3ff207a340000000 - .quad 0x3ff2041ec0000000 - .quad 0x3ff2009b80000000 - .quad 0x3ff1fd1980000000 - .quad 0x3ff1f99900000000 - .quad 0x3ff1f619c0000000 - .quad 0x3ff1f29c00000000 - .quad 0x3ff1ef1fc0000000 - .quad 0x3ff1eba480000000 - .quad 0x3ff1e82ac0000000 - .quad 0x3ff1e4b280000000 - .quad 0x3ff1e13b80000000 - .quad 0x3ff1ddc5c0000000 - .quad 0x3ff1da5180000000 - .quad 0x3ff1d6de80000000 - .quad 0x3ff1d36cc0000000 - .quad 0x3ff1cffc40000000 - .quad 0x3ff1cc8d40000000 - .quad 0x3ff1c91f80000000 - .quad 0x3ff1c5b340000000 - .quad 0x3ff1c24840000000 - .quad 0x3ff1bede40000000 - .quad 0x3ff1bb7600000000 - .quad 0x3ff1b80ec0000000 - .quad 0x3ff1b4a900000000 - .quad 0x3ff1b14480000000 - .quad 0x3ff1ade140000000 - .quad 0x3ff1aa7f40000000 - .quad 0x3ff1a71e80000000 - .quad 0x3ff1a3bf40000000 - .quad 0x3ff1a06140000000 - .quad 0x3ff19d0480000000 - .quad 0x3ff199a900000000 - .quad 0x3ff1964ec0000000 - .quad 0x3ff192f5c0000000 - .quad 0x3ff18f9e00000000 - .quad 0x3ff18c47c0000000 - .quad 0x3ff188f280000000 - .quad 0x3ff1859ec0000000 - .quad 0x3ff1824c00000000 - .quad 0x3ff17efac0000000 - .quad 0x3ff17baa80000000 - .quad 0x3ff1785bc0000000 - .quad 0x3ff1750e40000000 - .quad 0x3ff171c1c0000000 - .quad 0x3ff16e76c0000000 - .quad 0x3ff16b2d00000000 - .quad 0x3ff167e440000000 - .quad 0x3ff1649d00000000 - .quad 0x3ff16156c0000000 - .quad 0x3ff15e11c0000000 - .quad 0x3ff15ace40000000 - .quad 0x3ff1578bc0000000 - .quad 0x3ff1544a80000000 - .quad 0x3ff1510a80000000 - .quad 0x3ff14dcbc0000000 - .quad 0x3ff14a8e40000000 - .quad 0x3ff14751c0000000 - .quad 0x3ff14416c0000000 - .quad 0x3ff140dcc0000000 - .quad 0x3ff13da400000000 - .quad 0x3ff13a6c80000000 - .quad 0x3ff1373600000000 - .quad 0x3ff1340100000000 - .quad 0x3ff130cd00000000 - .quad 0x3ff12d9a40000000 - .quad 0x3ff12a68c0000000 - .quad 0x3ff1273840000000 - .quad 0x3ff1240900000000 - .quad 0x3ff120db00000000 - .quad 0x3ff11dae40000000 - .quad 0x3ff11a8280000000 - .quad 0x3ff1175800000000 - .quad 0x3ff1142ec0000000 - .quad 0x3ff11106c0000000 - .quad 0x3ff10ddfc0000000 - .quad 0x3ff10ab9c0000000 - .quad 0x3ff1079540000000 - .quad 0x3ff10471c0000000 - .quad 0x3ff1014f80000000 - .quad 0x3ff0fe2e40000000 - .quad 0x3ff0fb0e40000000 - .quad 0x3ff0f7ef40000000 - .quad 0x3ff0f4d180000000 - .quad 0x3ff0f1b500000000 - .quad 0x3ff0ee9980000000 - .quad 0x3ff0eb7f40000000 - .quad 0x3ff0e86600000000 - .quad 0x3ff0e54e00000000 - .quad 0x3ff0e23700000000 - .quad 0x3ff0df2140000000 - .quad 0x3ff0dc0c80000000 - .quad 0x3ff0d8f900000000 - .quad 0x3ff0d5e6c0000000 - .quad 0x3ff0d2d540000000 - .quad 0x3ff0cfc540000000 - .quad 0x3ff0ccb640000000 - .quad 0x3ff0c9a840000000 - .quad 0x3ff0c69b40000000 - .quad 0x3ff0c38f80000000 - .quad 0x3ff0c08500000000 - .quad 0x3ff0bd7b80000000 - .quad 0x3ff0ba7300000000 - .quad 0x3ff0b76bc0000000 - .quad 0x3ff0b46580000000 - .quad 0x3ff0b16040000000 - .quad 0x3ff0ae5c40000000 - .quad 0x3ff0ab5940000000 - .quad 0x3ff0a85780000000 - .quad 0x3ff0a556c0000000 - .quad 0x3ff0a25700000000 - .quad 0x3ff09f5880000000 - .quad 0x3ff09c5ac0000000 - .quad 0x3ff0995e80000000 - .quad 0x3ff0966300000000 - .quad 0x3ff09368c0000000 - .quad 0x3ff0906f80000000 - .quad 0x3ff08d7740000000 - .quad 0x3ff08a8000000000 - .quad 0x3ff0878a00000000 - .quad 0x3ff0849500000000 - .quad 0x3ff081a100000000 - .quad 0x3ff07eae40000000 - .quad 0x3ff07bbc40000000 - .quad 0x3ff078cb80000000 - .quad 0x3ff075dbc0000000 - .quad 0x3ff072ed00000000 - .quad 0x3ff06fff80000000 - .quad 0x3ff06d12c0000000 - .quad 0x3ff06a2740000000 - .quad 0x3ff0673cc0000000 - .quad 0x3ff0645340000000 - .quad 0x3ff0616ac0000000 - .quad 0x3ff05e8340000000 - .quad 0x3ff05b9d00000000 - .quad 0x3ff058b780000000 - .quad 0x3ff055d340000000 - .quad 0x3ff052f000000000 - .quad 0x3ff0500d80000000 - .quad 0x3ff04d2c40000000 - .quad 0x3ff04a4c00000000 - .quad 0x3ff0476cc0000000 - .quad 0x3ff0448e80000000 - .quad 0x3ff041b140000000 - .quad 0x3ff03ed500000000 - .quad 0x3ff03bf9c0000000 - .quad 0x3ff0391fc0000000 - .quad 0x3ff0364680000000 - .quad 0x3ff0336e40000000 - .quad 0x3ff0309700000000 - .quad 0x3ff02dc0c0000000 - .quad 0x3ff02aeb80000000 - .quad 0x3ff0281740000000 - .quad 0x3ff0254400000000 - .quad 0x3ff02271c0000000 - .quad 0x3ff01fa080000000 - .quad 0x3ff01cd040000000 - .quad 0x3ff01a00c0000000 - .quad 0x3ff0173280000000 - .quad 0x3ff0146540000000 - .quad 0x3ff01198c0000000 - .quad 0x3ff00ecd80000000 - .quad 0x3ff00c0300000000 - .quad 0x3ff0093980000000 - .quad 0x3ff0067100000000 - .quad 0x3ff003a980000000 - .quad 0x3ff000e300000000 - .quad 0x3feffc3a80000000 - .quad 0x3feff6b140000000 - .quad 0x3feff129c0000000 - .quad 0x3fefeba480000000 - .quad 0x3fefe620c0000000 - .quad 0x3fefe09f40000000 - .quad 0x3fefdb1f80000000 - .quad 0x3fefd5a180000000 - .quad 0x3fefd02580000000 - .quad 0x3fefcaab80000000 - .quad 0x3fefc53340000000 - .quad 0x3fefbfbd00000000 - .quad 0x3fefba4880000000 - .quad 0x3fefb4d600000000 - .quad 0x3fefaf6540000000 - .quad 0x3fefa9f680000000 - .quad 0x3fefa48980000000 - .quad 0x3fef9f1e40000000 - .quad 0x3fef99b500000000 - .quad 0x3fef944dc0000000 - .quad 0x3fef8ee800000000 - .quad 0x3fef898440000000 - .quad 0x3fef842280000000 - .quad 0x3fef7ec280000000 - .quad 0x3fef796440000000 - .quad 0x3fef7407c0000000 - .quad 0x3fef6ead40000000 - .quad 0x3fef695480000000 - .quad 0x3fef63fd80000000 - .quad 0x3fef5ea880000000 - .quad 0x3fef595540000000 - .quad 0x3fef5403c0000000 - .quad 0x3fef4eb400000000 - .quad 0x3fef496640000000 - .quad 0x3fef441a00000000 - .quad 0x3fef3ecfc0000000 - .quad 0x3fef398740000000 - .quad 0x3fef344080000000 - .quad 0x3fef2efb80000000 - .quad 0x3fef29b880000000 - .quad 0x3fef247700000000 - .quad 0x3fef1f3780000000 - .quad 0x3fef19f980000000 - .quad 0x3fef14bd80000000 - .quad 0x3fef0f8340000000 - .quad 0x3fef0a4ac0000000 - .quad 0x3fef0513c0000000 - .quad 0x3feeffdec0000000 - .quad 0x3feefaab80000000 - .quad 0x3feef57a00000000 - .quad 0x3feef04a00000000 - .quad 0x3feeeb1c00000000 - .quad 0x3feee5ef80000000 - .quad 0x3feee0c500000000 - .quad 0x3feedb9c00000000 - .quad 0x3feed67500000000 - .quad 0x3feed14f80000000 - .quad 0x3feecc2bc0000000 - .quad 0x3feec709c0000000 - .quad 0x3feec1e940000000 - .quad 0x3feebccac0000000 - .quad 0x3feeb7adc0000000 - .quad 0x3feeb29280000000 - .quad 0x3feead7900000000 - .quad 0x3feea86140000000 - .quad 0x3feea34b40000000 - .quad 0x3fee9e36c0000000 - .quad 0x3fee992400000000 - .quad 0x3fee941300000000 - .quad 0x3fee8f0380000000 - .quad 0x3fee89f5c0000000 - .quad 0x3fee84e9c0000000 - .quad 0x3fee7fdf40000000 - .quad 0x3fee7ad680000000 - .quad 0x3fee75cf80000000 - .quad 0x3fee70ca00000000 - .quad 0x3fee6bc640000000 - .quad 0x3fee66c440000000 - .quad 0x3fee61c3c0000000 - .quad 0x3fee5cc500000000 - .quad 0x3fee57c7c0000000 - .quad 0x3fee52cc40000000 - .quad 0x3fee4dd280000000 - .quad 0x3fee48da00000000 - .quad 0x3fee43e380000000 - .quad 0x3fee3eee80000000 - .quad 0x3fee39fb00000000 - .quad 0x3fee350940000000 - .quad 0x3fee301940000000 - .quad 0x3fee2b2ac0000000 - .quad 0x3fee263dc0000000 - .quad 0x3fee215280000000 - .quad 0x3fee1c68c0000000 - .quad 0x3fee178080000000 - .quad 0x3fee129a00000000 - .quad 0x3fee0db540000000 - .quad 0x3fee08d1c0000000 - .quad 0x3fee03f000000000 - .quad 0x3fedff1000000000 - .quad 0x3fedfa3140000000 - .quad 0x3fedf55440000000 - .quad 0x3fedf07900000000 - .quad 0x3fedeb9f00000000 - .quad 0x3fede6c6c0000000 - .quad 0x3fede1f040000000 - .quad 0x3feddd1b00000000 - .quad 0x3fedd84780000000 - .quad 0x3fedd37580000000 - .quad 0x3fedcea500000000 - .quad 0x3fedc9d600000000 - .quad 0x3fedc508c0000000 - .quad 0x3fedc03d00000000 - .quad 0x3fedbb72c0000000 - .quad 0x3fedb6aa00000000 - .quad 0x3fedb1e2c0000000 - .quad 0x3fedad1d00000000 - .quad 0x3feda85900000000 - .quad 0x3feda39680000000 - .quad 0x3fed9ed540000000 - .quad 0x3fed9a15c0000000 - .quad 0x3fed9557c0000000 - .quad 0x3fed909b40000000 - .quad 0x3fed8be040000000 - .quad 0x3fed8726c0000000 - .quad 0x3fed826f00000000 - .quad 0x3fed7db880000000 - .quad 0x3fed790380000000 - .quad 0x3fed745000000000 - .quad 0x3fed6f9e40000000 - .quad 0x3fed6aedc0000000 - .quad 0x3fed663ec0000000 - .quad 0x3fed619140000000 - .quad 0x3fed5ce540000000 - .quad 0x3fed583ac0000000 - .quad 0x3fed5391c0000000 - .quad 0x3fed4eea40000000 - .quad 0x3fed4a4440000000 - .quad 0x3fed459f80000000 - .quad 0x3fed40fc80000000 - .quad 0x3fed3c5ac0000000 - .quad 0x3fed37bac0000000 - .quad 0x3fed331c00000000 - .quad 0x3fed2e7ec0000000 - .quad 0x3fed29e300000000 - .quad 0x3fed254880000000 - .quad 0x3fed20afc0000000 - .quad 0x3fed1c1840000000 - .quad 0x3fed178240000000 - .quad 0x3fed12edc0000000 - .quad 0x3fed0e5ac0000000 - .quad 0x3fed09c900000000 - .quad 0x3fed0538c0000000 - .quad 0x3fed00aa00000000 - .quad 0x3fecfc1c80000000 - .quad 0x3fecf790c0000000 - .quad 0x3fecf30600000000 - .quad 0x3fecee7d00000000 - .quad 0x3fece9f540000000 - .quad 0x3fece56f00000000 - .quad 0x3fece0ea40000000 - .quad 0x3fecdc66c0000000 - .quad 0x3fecd7e4c0000000 - .quad 0x3fecd36440000000 - .quad 0x3feccee500000000 - .quad 0x3fecca6740000000 - .quad 0x3fecc5eac0000000 - .quad 0x3fecc16fc0000000 - .quad 0x3fecbcf640000000 - .quad 0x3fecb87e00000000 - .quad 0x3fecb40740000000 - .quad 0x3fecaf91c0000000 - .quad 0x3fecab1dc0000000 - .quad 0x3feca6ab00000000 - .quad 0x3feca239c0000000 - .quad 0x3fec9dc9c0000000 - .quad 0x3fec995b40000000 - .quad 0x3fec94ee00000000 - .quad 0x3fec908240000000 - .quad 0x3fec8c17c0000000 - .quad 0x3fec87aec0000000 - .quad 0x3fec834700000000 - .quad 0x3fec7ee0c0000000 - .quad 0x3fec7a7bc0000000 - .quad 0x3fec761800000000 - .quad 0x3fec71b5c0000000 - .quad 0x3fec6d54c0000000 - .quad 0x3fec68f540000000 - .quad 0x3fec649700000000 - .quad 0x3fec603a00000000 - .quad 0x3fec5bde80000000 - .quad 0x3fec578440000000 - .quad 0x3fec532b80000000 - .quad 0x3fec4ed3c0000000 - .quad 0x3fec4a7dc0000000 - .quad 0x3fec4628c0000000 - .quad 0x3fec41d540000000 - .quad 0x3fec3d8300000000 - .quad 0x3fec393200000000 - .quad 0x3fec34e240000000 - .quad 0x3fec309400000000 - .quad 0x3fec2c4700000000 - .quad 0x3fec27fb80000000 - .quad 0x3fec23b100000000 - .quad 0x3fec1f6800000000 - .quad 0x3fec1b2040000000 - .quad 0x3fec16d9c0000000 - .quad 0x3fec1294c0000000 - .quad 0x3fec0e50c0000000 - .quad 0x3fec0a0e40000000 - .quad 0x3fec05cd00000000 - .quad 0x3fec018d00000000 - .quad 0x3febfd4e40000000 - .quad 0x3febf91100000000 - .quad 0x3febf4d4c0000000 - .quad 0x3febf09a00000000 - .quad 0x3febec6080000000 - .quad 0x3febe82840000000 - .quad 0x3febe3f140000000 - .quad 0x3febdfbb80000000 - .quad 0x3febdb8700000000 - .quad 0x3febd753c0000000 - .quad 0x3febd32200000000 - .quad 0x3febcef140000000 - .quad 0x3febcac1c0000000 - .quad 0x3febc693c0000000 - .quad 0x3febc266c0000000 - .quad 0x3febbe3b40000000 - .quad 0x3febba10c0000000 - .quad 0x3febb5e7c0000000 - .quad 0x3febb1bfc0000000 - .quad 0x3febad9940000000 - .quad 0x3feba973c0000000 - .quad 0x3feba54fc0000000 - .quad 0x3feba12cc0000000 - .quad 0x3feb9d0b00000000 - .quad 0x3feb98eac0000000 - .quad 0x3feb94cb80000000 - .quad 0x3feb90ad80000000 - .quad 0x3feb8c90c0000000 - .quad 0x3feb887540000000 - .quad 0x3feb845b00000000 - .quad 0x3feb8041c0000000 - .quad 0x3feb7c2a00000000 - .quad 0x3feb781340000000 - .quad 0x3feb73fe00000000 - .quad 0x3feb6fe9c0000000 - .quad 0x3feb6bd6c0000000 - .quad 0x3feb67c500000000 - .quad 0x3feb63b440000000 - .quad 0x3feb5fa500000000 - .quad 0x3feb5b96c0000000 - .quad 0x3feb5789c0000000 - .quad 0x3feb537e00000000 - .quad 0x3feb4f7380000000 - .quad 0x3feb4b6a00000000 - .quad 0x3feb476200000000 - .quad 0x3feb435b00000000 - .quad 0x3feb3f5540000000 - .quad 0x3feb3b5080000000 - .quad 0x3feb374d00000000 - .quad 0x3feb334ac0000000 - .quad 0x3feb2f49c0000000 - .quad 0x3feb2b49c0000000 - .quad 0x3feb274b40000000 - .quad 0x3feb234d80000000 - .quad 0x3feb1f5140000000 - .quad 0x3feb1b5600000000 - .quad 0x3feb175c00000000 - .quad 0x3feb136300000000 - .quad 0x3feb0f6b80000000 - .quad 0x3feb0b74c0000000 - .quad 0x3feb077f80000000 - .quad 0x3feb038b40000000 - .quad 0x3feaff9840000000 - .quad 0x3feafba640000000 - .quad 0x3feaf7b580000000 - .quad 0x3feaf3c600000000 - .quad 0x3feaefd780000000 - .quad 0x3feaebea40000000 - .quad 0x3feae7fe00000000 - .quad 0x3feae41300000000 - .quad 0x3feae02900000000 - .quad 0x3feadc4040000000 - .quad 0x3fead858c0000000 - .quad 0x3fead47240000000 - .quad 0x3fead08cc0000000 - .quad 0x3feacca8c0000000 - .quad 0x3feac8c580000000 - .quad 0x3feac4e380000000 - .quad 0x3feac102c0000000 - .quad 0x3feabd2300000000 - .quad 0x3feab94480000000 - .quad 0x3feab56700000000 - .quad 0x3feab18a80000000 - .quad 0x3feaadaf80000000 - .quad 0x3feaa9d540000000 - .quad 0x3feaa5fc40000000 - .quad 0x3feaa22440000000 - .quad 0x3fea9e4d80000000 - .quad 0x3fea9a77c0000000 - .quad 0x3fea96a340000000 - .quad 0x3fea92cfc0000000 - .quad 0x3fea8efd80000000 - .quad 0x3fea8b2c40000000 - .quad 0x3fea875c00000000 - .quad 0x3fea838cc0000000 - .quad 0x3fea7fbec0000000 - .quad 0x3fea7bf200000000 - .quad 0x3fea782640000000 - .quad 0x3fea745b80000000 - .quad 0x3fea7091c0000000 - .quad 0x3fea6cc940000000 - .quad 0x3fea6901c0000000 - .quad 0x3fea653b40000000 - .quad 0x3fea617600000000 - .quad 0x3fea5db1c0000000 - .quad 0x3fea59ee80000000 - .quad 0x3fea562c80000000 - .quad 0x3fea526b80000000 - .quad 0x3fea4eab80000000 - .quad 0x3fea4aecc0000000 - .quad 0x3fea472ec0000000 - .quad 0x3fea437200000000 - .quad 0x3fea3fb640000000 - .quad 0x3fea3bfbc0000000 - .quad 0x3fea384240000000 - .quad 0x3fea3489c0000000 - .quad 0x3fea30d240000000 - .quad 0x3fea2d1bc0000000 - .quad 0x3fea296680000000 - .quad 0x3fea25b200000000 - .quad 0x3fea21fec0000000 - .quad 0x3fea1e4cc0000000 - .quad 0x3fea1a9b80000000 - .quad 0x3fea16eb40000000 - .quad 0x3fea133c40000000 - .quad 0x3fea0f8e40000000 - .quad 0x3fea0be140000000 - .quad 0x3fea083540000000 - .quad 0x3fea048a40000000 - .quad 0x3fea00e080000000 - .quad 0x3fe9fd3780000000 - .quad 0x3fe9f98fc0000000 - .quad 0x3fe9f5e900000000 - .quad 0x3fe9f24340000000 - .quad 0x3fe9ee9e80000000 - .quad 0x3fe9eafac0000000 - .quad 0x3fe9e75800000000 - .quad 0x3fe9e3b640000000 - .quad 0x3fe9e01580000000 - .quad 0x3fe9dc7600000000 - .quad 0x3fe9d8d740000000 - .quad 0x3fe9d539c0000000 - .quad 0x3fe9d19d00000000 - .quad 0x3fe9ce0180000000 - .quad 0x3fe9ca66c0000000 - .quad 0x3fe9c6cd40000000 - .quad 0x3fe9c33480000000 - .quad 0x3fe9bf9d00000000 - .quad 0x3fe9bc0680000000 - .quad 0x3fe9b870c0000000 - .quad 0x3fe9b4dc40000000 - .quad 0x3fe9b148c0000000 - .quad 0x3fe9adb600000000 - .quad 0x3fe9aa2480000000 - .quad 0x3fe9a693c0000000 - .quad 0x3fe9a30440000000 - .quad 0x3fe99f7580000000 - .quad 0x3fe99be7c0000000 - .quad 0x3fe9985b40000000 - .quad 0x3fe994cf80000000 - .quad 0x3fe99144c0000000 - .quad 0x3fe98dbb00000000 - .quad 0x3fe98a3240000000 - .quad 0x3fe986aa80000000 - .quad 0x3fe98323c0000000 - .quad 0x3fe97f9e00000000 - .quad 0x3fe97c1900000000 - .quad 0x3fe9789540000000 - .quad 0x3fe9751240000000 - .quad 0x3fe9719080000000 - .quad 0x3fe96e0f80000000 - .quad 0x3fe96a8f80000000 - .quad 0x3fe9671040000000 - .quad 0x3fe9639240000000 - .quad 0x3fe9601540000000 - .quad 0x3fe95c9900000000 - .quad 0x3fe9591dc0000000 - .quad 0x3fe955a380000000 - .quad 0x3fe9522a40000000 - .quad 0x3fe94eb200000000 - .quad 0x3fe94b3a80000000 - .quad 0x3fe947c400000000 - .quad 0x3fe9444e80000000 - .quad 0x3fe940da00000000 - .quad 0x3fe93d6640000000 - .quad 0x3fe939f3c0000000 - .quad 0x3fe9368200000000 - .quad 0x3fe9331140000000 - .quad 0x3fe92fa140000000 - .quad 0x3fe92c3280000000 - .quad 0x3fe928c480000000 - .quad 0x3fe9255780000000 - .quad 0x3fe921eb40000000 - .quad 0x3fe91e8040000000 - .quad 0x3fe91b1600000000 - .quad 0x3fe917ac80000000 - .quad 0x3fe9144440000000 - .quad 0x3fe910dcc0000000 - .quad 0x3fe90d7640000000 - .quad 0x3fe90a1080000000 - .quad 0x3fe906abc0000000 - .quad 0x3fe9034800000000 - .quad 0x3fe8ffe540000000 - .quad 0x3fe8fc8340000000 - .quad 0x3fe8f92240000000 - .quad 0x3fe8f5c200000000 - .quad 0x3fe8f26300000000 - .quad 0x3fe8ef0480000000 - .quad 0x3fe8eba740000000 - .quad 0x3fe8e84ac0000000 - .quad 0x3fe8e4ef40000000 - .quad 0x3fe8e19480000000 - .quad 0x3fe8de3ac0000000 - .quad 0x3fe8dae1c0000000 - .quad 0x3fe8d78a00000000 - .quad 0x3fe8d432c0000000 - .quad 0x3fe8d0dcc0000000 - .quad 0x3fe8cd8780000000 - .quad 0x3fe8ca3300000000 - .quad 0x3fe8c6df80000000 - .quad 0x3fe8c38d00000000 - .quad 0x3fe8c03b40000000 - .quad 0x3fe8bcea80000000 - .quad 0x3fe8b99a80000000 - .quad 0x3fe8b64b80000000 - .quad 0x3fe8b2fd40000000 - .quad 0x3fe8afb000000000 - .quad 0x3fe8ac63c0000000 - .quad 0x3fe8a91840000000 - .quad 0x3fe8a5cd80000000 - .quad 0x3fe8a283c0000000 - .quad 0x3fe89f3b00000000 - .quad 0x3fe89bf300000000 - .quad 0x3fe898abc0000000 - .quad 0x3fe8956580000000 - .quad 0x3fe8922040000000 - .quad 0x3fe88edbc0000000 - .quad 0x3fe88b9800000000 - .quad 0x3fe8885540000000 - .quad 0x3fe8851380000000 - .quad 0x3fe881d240000000 - .quad 0x3fe87e9240000000 - .quad 0x3fe87b52c0000000 - .quad 0x3fe8781480000000 - .quad 0x3fe874d6c0000000 - .quad 0x3fe8719a00000000 - .quad 0x3fe86e5e40000000 - .quad 0x3fe86b2340000000 - .quad 0x3fe867e900000000 - .quad 0x3fe864afc0000000 - .quad 0x3fe8617740000000 - .quad 0x3fe85e3f80000000 - .quad 0x3fe85b08c0000000 - .quad 0x3fe857d300000000 - .quad 0x3fe8549dc0000000 - .quad 0x3fe8516980000000 - .quad 0x3fe84e3640000000 - .quad 0x3fe84b03c0000000 - .quad 0x3fe847d200000000 - .quad 0x3fe844a100000000 - .quad 0x3fe8417100000000 - .quad 0x3fe83e4200000000 - .quad 0x3fe83b1380000000 - .quad 0x3fe837e600000000 - .quad 0x3fe834b940000000 - .quad 0x3fe8318d80000000 - .quad 0x3fe82e6280000000 - .quad 0x3fe82b3840000000 - .quad 0x3fe8280f00000000 - .quad 0x3fe824e640000000 - .quad 0x3fe821bec0000000 - .quad 0x3fe81e97c0000000 - .quad 0x3fe81b71c0000000 - .quad 0x3fe8184c80000000 - .quad 0x3fe8152800000000 - .quad 0x3fe8120480000000 - .quad 0x3fe80ee1c0000000 - .quad 0x3fe80bbfc0000000 - .quad 0x3fe8089e80000000 - .quad 0x3fe8057e40000000 - .quad 0x3fe8025ec0000000 - .quad 0x3fe7ff4000000000 - .quad 0x3fe7fc2200000000 - .quad 0x3fe7f90500000000 - .quad 0x3fe7f5e8c0000000 - .quad 0x3fe7f2cd40000000 - .quad 0x3fe7efb280000000 - .quad 0x3fe7ec9880000000 - .quad 0x3fe7e97f80000000 - .quad 0x3fe7e66740000000 - .quad 0x3fe7e34fc0000000 - .quad 0x3fe7e03940000000 - .quad 0x3fe7dd2340000000 - .quad 0x3fe7da0e40000000 - .quad 0x3fe7d6fa00000000 - .quad 0x3fe7d3e680000000 - .quad 0x3fe7d0d3c0000000 - .quad 0x3fe7cdc1c0000000 - .quad 0x3fe7cab0c0000000 - .quad 0x3fe7c7a080000000 - .quad 0x3fe7c49100000000 - .quad 0x3fe7c18240000000 - .quad 0x3fe7be7440000000 - .quad 0x3fe7bb6700000000 - .quad 0x3fe7b85ac0000000 - .quad 0x3fe7b54f00000000 - .quad 0x3fe7b24440000000 - .quad 0x3fe7af3a40000000 - .quad 0x3fe7ac3100000000 - .quad 0x3fe7a92880000000 - .quad 0x3fe7a620c0000000 - .quad 0x3fe7a319c0000000 - .quad 0x3fe7a013c0000000 - .quad 0x3fe79d0e40000000 - .quad 0x3fe79a09c0000000 - .quad 0x3fe7970600000000 - .quad 0x3fe79402c0000000 - .quad 0x3fe7910080000000 - .quad 0x3fe78dff00000000 - .quad 0x3fe78afe40000000 - .quad 0x3fe787fe40000000 - .quad 0x3fe784ff00000000 - .quad 0x3fe7820080000000 - .quad 0x3fe77f02c0000000 - .quad 0x3fe77c05c0000000 - .quad 0x3fe77909c0000000 - .quad 0x3fe7760e40000000 - .quad 0x3fe7731380000000 - .quad 0x3fe77019c0000000 - .quad 0x3fe76d2080000000 - .quad 0x3fe76a2800000000 - .quad 0x3fe7673080000000 - .quad 0x3fe7643980000000 - .quad 0x3fe7614340000000 - .quad 0x3fe75e4e00000000 - .quad 0x3fe75b5940000000 - .quad 0x3fe7586580000000 - .quad 0x3fe7557240000000 - .quad 0x3fe7527fc0000000 - .quad 0x3fe74f8e40000000 - .quad 0x3fe74c9d40000000 - .quad 0x3fe749ad00000000 - .quad 0x3fe746bd80000000 - .quad 0x3fe743cec0000000 - .quad 0x3fe740e100000000 - .quad 0x3fe73df3c0000000 - .quad 0x3fe73b0740000000 - .quad 0x3fe7381b80000000 - .quad 0x3fe7353080000000 - .quad 0x3fe7324600000000 - .quad 0x3fe72f5c80000000 - .quad 0x3fe72c73c0000000 - .quad 0x3fe7298b80000000 - .quad 0x3fe726a440000000 - .quad 0x3fe723bd80000000 - .quad 0x3fe720d7c0000000 - .quad 0x3fe71df280000000 - .quad 0x3fe71b0e00000000 - .quad 0x3fe7182a40000000 - .quad 0x3fe7154740000000 - .quad 0x0000000000000000 - .rept 48 - .byte 0 - .endr - -/* Log(2) lookup table for log part (non HSW): */ -.if .-__svml_dpow_data != _log2_t1 -.err -.endif - .rept 2 - .quad 0x0000000000000000 - .endr - .quad 0x3f5712e100000000 - .quad 0x3e0ee8a22f7c5987 - .quad 0x3f670fc100000000 - .quad 0x3e17e16043fd7529 - .quad 0x3f71497700000000 - .quad 0x3e239efb866b119c - .quad 0x3f7709bb00000000 - .quad 0x3e1b5ea7ee997dc0 - .quad 0x3f7cc8aa00000000 - .quad 0x3e2efad156451e8d - .quad 0x3f81430200000000 - .quad 0x3e204975bf955ee8 - .quad 0x3f84210300000000 - .quad 0x3e2e526353333f9a - .quad 0x3f86fe5800000000 - .quad 0x3e2dbbc5d9986525 - .quad 0x3f89dae000000000 - .quad 0x3e211ae127d370f8 - .quad 0x3f8cb6ba00000000 - .quad 0x3e2af44e8a20fe77 - .quad 0x3f8f91e600000000 - .quad 0x3e1f77bd1cd9fbc7 - .quad 0x3f91363100000000 - .quad 0x3e40f52f789c83a3 - .quad 0x3f92a31800000000 - .quad 0x3e172308c2064b24 - .quad 0x3f940f9600000000 - .quad 0x3e2f342d9eb8aeed - .quad 0x3f957bbb00000000 - .quad 0x3e4abb9a144866b7 - .quad 0x3f96e79800000000 - .quad 0x3e48b85ac72b0200 - .quad 0x3f98530c00000000 - .quad 0x3e2d1e01fbc85d86 - .quad 0x3f99be3600000000 - .quad 0x3e37d26f00cda0dd - .quad 0x3f9b28f600000000 - .quad 0x3e3433218e840f16 - .quad 0x3f9c935b00000000 - .quad 0x3e4f50a107fb8c37 - .quad 0x3f9dfd7700000000 - .quad 0x3e3604e609a9e948 - .quad 0x3f9f673700000000 - .quad 0x3e489f0de52d1118 - .quad 0x3fa0684e00000000 - .quad 0x3e4d127bd17abd42 - .quad 0x3fa11cd300000000 - .quad 0x3e3a899b4ece6057 - .quad 0x3fa1d12900000000 - .quad 0x3e5f0d0f99858cfa - .quad 0x3fa2855a00000000 - .quad 0x3e58b94e89d977a4 - .quad 0x3fa3395d00000000 - .quad 0x3e402a7f6bf76796 - .quad 0x3fa3ed3100000000 - .quad 0x3e3e342da3e0aab6 - .quad 0x3fa4a0de00000000 - .quad 0x3e58cae94cd5496b - .quad 0x3fa5545500000000 - .quad 0x3e3fdc64d89d4032 - .quad 0x3fa607ad00000000 - .quad 0x3e37dfd30f154124 - .quad 0x3fa6bad500000000 - .quad 0x3e5eb1e05460b0e3 - .quad 0x3fa76dcf00000000 - .quad 0x3e490ead14c7109d - .quad 0x3fa820a100000000 - .quad 0x3e5258eaf10715e3 - .quad 0x3fa8d34400000000 - .quad 0x3e242a28e25fb4d0 - .quad 0x3fa985bf00000000 - .quad 0x3dfa4a83c146ec0f - .quad 0x3faa381200000000 - .quad 0x3e3c7de45fe856f6 - .quad 0x3faaea3500000000 - .quad 0x3e408258f0914a28 - .quad 0x3fab9c3000000000 - .quad 0x3e3f9589c628dfe0 - .quad 0x3fac4dfa00000000 - .quad 0x3e5721556bde9f1f - .quad 0x3facff9c00000000 - .quad 0x3e5a8867f80f2a46 - .quad 0x3fadb11600000000 - .quad 0x3e4a583c979a598e - .quad 0x3fae626700000000 - .quad 0x3e443847800c1405 - .quad 0x3faf138700000000 - .quad 0x3e1664a168a10688 - .quad 0x3fafc48600000000 - .quad 0x3e2eb49173242e2e - .quad 0x3fb03aa900000000 - .quad 0x3e6b1b90df1d2899 - .quad 0x3fb092fb00000000 - .quad 0x3e6f4828dce8ef96 - .quad 0x3fb0eb3900000000 - .quad 0x3e57e8a84071ed7c - .quad 0x3fb1436100000000 - .quad 0x3e6ea26e46fc50e3 - .quad 0x3fb19b7500000000 - .quad 0x3e64d3ec52377554 - .quad 0x3fb1f37000000000 - .quad 0x3e46a5728109990d - .quad 0x3fb24b5900000000 - .quad 0x3e6b426b10e12ca0 - .quad 0x3fb2a32e00000000 - .quad 0x3e59bbba7c1b46c7 - .quad 0x3fb2faed00000000 - .quad 0x3e67f99638784faf - .quad 0x3fb3529c00000000 - .quad 0x3e1e52f196858161 - .quad 0x3fb3aa3000000000 - .quad 0x3e67a4fe6def19e6 - .quad 0x3fb401b000000000 - .quad 0x3e0302a326e6a3dc - .quad 0x3fb4591d00000000 - .quad 0x3e6fa21b2e435f49 - .quad 0x3fb4b07600000000 - .quad 0x3e58415e51626967 - .quad 0x3fb507b900000000 - .quad 0x3e3a033d6c5941c4 - .quad 0x3fb55ee600000000 - .quad 0x3e33c8467c54296b - .quad 0x3fb5b60100000000 - .quad 0x3e5e02f5a12fe65d - .quad 0x3fb60d0600000000 - .quad 0x3e6ecfc86d9ed70d - .quad 0x3fb663f600000000 - .quad 0x3e5eb24497a376b8 - .quad 0x3fb6bad400000000 - .quad 0x3e48c77f72e2b40f - .quad 0x3fb7119b00000000 - .quad 0x3e68ed7d5e52d89e - .quad 0x3fb7684d00000000 - .quad 0x3e43fa7ea9d3799b - .quad 0x3fb7beec00000000 - .quad 0x3e60571414f770db - .quad 0x3fb8157900000000 - .quad 0x3e68c7d07f316ee3 - .quad 0x3fb86bf000000000 - .quad 0x3e6360f420c77bec - .quad 0x3fb8c25000000000 - .quad 0x3e6d91c947d50fa1 - .quad 0x3fb918a300000000 - .quad 0x3e4b231ba93bd154 - .quad 0x3fb96eda00000000 - .quad 0x3e61d38c8099fddd - .quad 0x3fb9c50300000000 - .quad 0x3e677eeb9b0174ac - .quad 0x3fba1b1100000000 - .quad 0x3e69d6ddd016014c - .quad 0x3fba711100000000 - .quad 0x3e626690842b7789 - .quad 0x3fbac6fa00000000 - .quad 0x3e5830b93095c531 - .quad 0x3fbb1cd000000000 - .quad 0x3e5c2b99518e0d2c - .quad 0x3fbb729300000000 - .quad 0x3e66279b91823620 - .quad 0x3fbbc84400000000 - .quad 0x3e30adafc9057ecc - .quad 0x3fbc1ddd00000000 - .quad 0x3e461ce45269682a - .quad 0x3fbc736300000000 - .quad 0x3e5044ef5f2fe276 - .quad 0x3fbcc8d600000000 - .quad 0x3e4eb3dbd5234ce7 - .quad 0x3fbd1e3600000000 - .quad 0x3e2eb70a6e724019 - .quad 0x3fbd737e00000000 - .quad 0x3e5403a5977b9a51 - .quad 0x3fbdc8b700000000 - .quad 0x3e62d343b2886c33 - .quad 0x3fbe1ddd00000000 - .quad 0x3e5f443cfbd572a9 - .quad 0x3fbe72eb00000000 - .quad 0x3e632ff4a08c00ad - .quad 0x3fbec7ea00000000 - .quad 0x3e611d934f5c870b - .quad 0x3fbf1cd100000000 - .quad 0x3e610afc18ecc7fd - .quad 0x3fbf71a900000000 - .quad 0x3e4c5db9d4383f15 - .quad 0x3fbfc66800000000 - .quad 0x3e6a615fe5dcf50a - .quad 0x3fc00d8c00000000 - .quad 0x3e6f8684b8524b4d - .quad 0x3fc037da00000000 - .quad 0x3e7471e52c396096 - .quad 0x3fc0621e00000000 - .quad 0x3e7a1aad94d3758a - .quad 0x3fc08c5800000000 - .quad 0x3e7f9b4f573cd19d - .quad 0x3fc0b68900000000 - .quad 0x3e4e88e925a98afd - .quad 0x3fc0e0b100000000 - .quad 0x3e677212d0eeb433 - .quad 0x3fc10acd00000000 - .quad 0x3e63ff48e459228f - .quad 0x3fc134e100000000 - .quad 0x3e63a241697adc33 - .quad 0x3fc15eeb00000000 - .quad 0x3e4f4a7ae82699a0 - .quad 0x3fc188ec00000000 - .quad 0x3e7d83a2e1fe8196 - .quad 0x3fc1b2e400000000 - .quad 0x3e6e765c52c5b577 - .quad 0x3fc1dcd100000000 - .quad 0x3e77eaa5780399be - .quad 0x3fc206b400000000 - .quad 0x3e766c5ef95ab1fc - .quad 0x3fc2308f00000000 - .quad 0x3e703a52d5db6084 - .quad 0x3fc25a6200000000 - .quad 0x3e51786d7d82f6f1 - .quad 0x3fc2842a00000000 - .quad 0x3e6641ea2ded60b8 - .quad 0x3fc2ade800000000 - .quad 0x3e4addfbeaa772f7 - .quad 0x3fc2d79b00000000 - .quad 0x3e67cdfbbc061e04 - .quad 0x3fc3014800000000 - .quad 0x3e717ad775a7481b - .quad 0x3fc32ae800000000 - .quad 0x3e7e4f15a673baf4 - .quad 0x3fc3548300000000 - .quad 0x3e58eca1813fa934 - .quad 0x3fc37e1200000000 - .quad 0x3e7a3622382e96fb - .quad 0x3fc3a79700000000 - .quad 0x3e7916bb2a2cea0a - .quad 0x3fc3d11400000000 - .quad 0x3e61e6a28aaa11cb - .quad 0x3fc3fa8800000000 - .quad 0x3e61a3ceca68f920 - .quad 0x3fc423f100000000 - .quad 0x3e705825c8caf8ed - .quad 0x3fc44d5200000000 - .quad 0x3e572d6f71f4b037 - .quad 0x3fc476aa00000000 - .quad 0x3e6060fdf3cabb49 - .quad 0x3fc49ff700000000 - .quad 0x3e6df855c48e67aa - .quad 0x3fc4c93e00000000 - .quad 0x3e60854767c83d89 - .quad 0x3fc4f27700000000 - .quad 0x3e7c27d2adfa3cf1 - .quad 0x3fc51bab00000000 - .quad 0x3e21e96f77a9b8ff - .quad 0x3fc544d500000000 - .quad 0x3e69b89066da0127 - .quad 0x3fc56df400000000 - .quad 0x3e7831ab063f0639 - .quad 0x3fc5970b00000000 - .quad 0x3e62a3ff97f4402e - .quad 0x3fc5c01b00000000 - .quad 0x3e5cfdec6aa61224 - .quad 0x3fc5e92000000000 - .quad 0x3e30bf99a341739b - .quad 0x3fc6121900000000 - .quad 0x3e7589025c069af7 - .quad 0x3fc63b0c00000000 - .quad 0x3e73e7c70dc28176 - .quad 0x3fc663f600000000 - .quad 0x3e7319225255ed92 - .quad 0x3fc68cd700000000 - .quad 0x3e721d999e92e626 - .quad 0x3fc6b5af00000000 - .quad 0x3e6feaba3c111c8a - .quad 0x3fc6de7e00000000 - .quad 0x3e67408ffba276e0 - .quad 0x3fc7074100000000 - .quad 0x3e7b9de032cb0fd0 - .quad 0x3fc72ffe00000000 - .quad 0x3e6fbab18df0f78e - .quad 0x3fc758b100000000 - .quad 0x3e7eed8f544cc58a - .quad 0x3fc7815c00000000 - .quad 0x3e5f34382f992a55 - .quad 0x3fc7a9ff00000000 - .quad 0x3e723a0bf2565894 - .quad 0x3fc7d29700000000 - .quad 0x3e6784d72660bf64 - .quad 0x3fc7fb2800000000 - .quad 0x3e53cef9f2a00fda - .quad 0x3fc823ad00000000 - .quad 0x3e6636827e73660e - .quad 0x3fc84c2b00000000 - .quad 0x3e6e0bc0ce905e5f - .quad 0x3fc874a000000000 - .quad 0x3e5b40d32ca21b4f - .quad 0x3fc89d0d00000000 - .quad 0x3e7a968650124684 - .quad 0x3fc8c56f00000000 - .quad 0x3e7724c9f4c54dc2 - .quad 0x3fc8edca00000000 - .quad 0x3e6b8d4ab3e3b13c - .quad 0x3fc9161b00000000 - .quad 0x3e74576bcfdafe5e - .quad 0x3fc93e6500000000 - .quad 0x3e7332208c376c3f - .quad 0x3fc966a600000000 - .quad 0x3df175e083c82deb - .quad 0x3fc98edc00000000 - .quad 0x3e79efce11aa7d30 - .quad 0x3fc9b70c00000000 - .quad 0x3e62ae7840b35985 - .quad 0x3fc9df3200000000 - .quad 0x3e4e8c13081d57dc - .quad 0x3fca074e00000000 - .quad 0x3e60b028bf61097b - .quad 0x3fca2f6200000000 - .quad 0x3e7fa41706304e8f - .quad 0x3fca576d00000000 - .quad 0x3e7f0e5f94377493 - .quad 0x3fca7f7100000000 - .quad 0x3e6edeeabeeeab1a - .quad 0x3fcaa76d00000000 - .quad 0x3e6fdf22f0ca6c0d - .quad 0x3fcacf5d00000000 - .quad 0x3e676d3aee892f9c - .quad 0x3fcaf74700000000 - .quad 0x3e7fbc37f3121ab7 - .quad 0x3fcb1f2800000000 - .quad 0x3e7717af8e5dd5b2 - .quad 0x3fcb46ff00000000 - .quad 0x3e70c006784d6d72 - .quad 0x3fcb6ece00000000 - .quad 0x3e75ebf2abe7a8f0 - .quad 0x3fcb969600000000 - .quad 0x3e570772e1aa6f94 - .quad 0x3fcbbe5300000000 - .quad 0x3e7507e05d60e5c4 - .quad 0x3fcbe60900000000 - .quad 0x3e6a479c1c7622d5 - .quad 0x3fcc0db700000000 - .quad 0x3e6a7653cad63a6a - .quad 0x3fcc355b00000000 - .quad 0x3e63c6576ac08e77 - .quad 0x3fcc5cf700000000 - .quad 0x3e696181ff9674a7 - .quad 0x3fcc848b00000000 - .quad 0x3e74c88b88cb08d4 - .quad 0x3fccac1500000000 - .quad 0x3e768ee1a3f58613 - .quad 0x3fccd39700000000 - .quad 0x3e7bc7d00e53901c - .quad 0x3fccfb1200000000 - .quad 0x3e4cb8c314503175 - .quad 0x3fcd228400000000 - .quad 0x3e6a40646984129b - .quad 0x3fcd49ee00000000 - .quad 0x3e77864b48c32b3c - .quad 0x3fcd714e00000000 - .quad 0x3e76dc470f22f1ee - .quad 0x3fcd98a900000000 - .quad 0x3e153043b87205ac - .quad 0x3fcdbff800000000 - .quad 0x3e7ce2096f5baed1 - .quad 0x3fcde74000000000 - .quad 0x3e76b6293b0e2ea0 - .quad 0x3fce0e8000000000 - .quad 0x3e69e5c03298a8d0 - .quad 0x3fce35b500000000 - .quad 0x3e7359a4add9086c - .quad 0x3fce5ce400000000 - .quad 0x3e7fbba6e4320b0b - .quad 0x3fce840c00000000 - .quad 0x3e57a7356760bf17 - .quad 0x3fceab2b00000000 - .quad 0x3e5412dd4c71d4aa - .quad 0x3fced23f00000000 - .quad 0x3e708cbbd3de4f64 - .quad 0x3fcef94d00000000 - .quad 0x3e7ed1ec6fb9ef8f - .quad 0x3fcf205400000000 - .quad 0x3e4b20911d7e37db - .quad 0x3fcf474f00000000 - .quad 0x3e7192aee74aaf85 - .quad 0x3fcf6e4500000000 - .quad 0x3de9ff7395251cf5 - .quad 0x3fcf953200000000 - .quad 0x3e418fcf45710fc3 - .quad 0x3fcfbc1600000000 - .quad 0x3e77204d0144751b - .quad 0x3fcfe2f200000000 - .quad 0x3e7df662b4d59d8e - .quad 0x3fd004e300000000 - .quad 0x3e75d25f17b09d21 - .quad 0x3fd0184a00000000 - .quad 0x3e64044284485ca5 - .quad 0x3fd02bab00000000 - .quad 0x3e80a9a0c732cb2c - .quad 0x3fd03f0900000000 - .quad 0x3e89a98ad1490635 - .quad 0x3fd0526300000000 - .quad 0x3e897756562a827f - .quad 0x3fd065b900000000 - .quad 0x3e7f42d1cecd3768 - .quad 0x3fd0790a00000000 - .quad 0x3e8bb6060195a070 - .quad 0x3fd08c5900000000 - .quad 0x3e5c5a7b3a2bd335 - .quad 0x3fd09fa100000000 - .quad 0x3e8a2743f6a4cd20 - .quad 0x3fd0b2e700000000 - .quad 0x3e775f83f99025b0 - .quad 0x3fd0c62900000000 - .quad 0x3e87ca856421a674 - .quad 0x3fd0d96600000000 - .quad 0x3e814d2830ef12fd - .quad 0x3fd0eca000000000 - .quad 0x3e62348eca90f220 - .quad 0x3fd0ffd600000000 - .quad 0x3e812fcf75d18b23 - .quad 0x3fd1130700000000 - .quad 0x3e73b4c2bf9f9dd3 - .quad 0x3fd1263600000000 - .quad 0x3e499ef30070a508 - .quad 0x3fd1395f00000000 - .quad 0x3e61edb0d9e8da9b - .quad 0x3fd14c8400000000 - .quad 0x3e8f23ac3152c264 - .quad 0x3fd15fa600000000 - .quad 0x3e752ec233b712ad - .quad 0x3fd172c400000000 - .quad 0x3e7a163986a7b84c - .quad 0x3fd185dd00000000 - .quad 0x3e8f734fda450672 - .quad 0x3fd198f400000000 - .quad 0x3e7028962c15f52b - .quad 0x3fd1ac0500000000 - .quad 0x3e8fd23e213f6416 - .quad 0x3fd1bf1300000000 - .quad 0x3e68e4e3166c3339 - .quad 0x3fd1d21e00000000 - .quad 0x3e70ea55e7da3fec - .quad 0x3fd1e52300000000 - .quad 0x3e81b9e3403df05d - .quad 0x3fd1f82500000000 - .quad 0x3e7e762367a00f4a - .quad 0x3fd20b2400000000 - .quad 0x3e3388b4dd9d8704 - .quad 0x3fd21e1f00000000 - .quad 0x3e6603bbc7b763e4 - .quad 0x3fd2311400000000 - .quad 0x3e7f38b9f767e1c9 - .quad 0x3fd2440700000000 - .quad 0x3e8361c0e424306b - .quad 0x3fd256f600000000 - .quad 0x3e53e15a0763e5f5 - .quad 0x3fd269e100000000 - .quad 0x3e5c346e0f5542ab - .quad 0x3fd27cc800000000 - .quad 0x3e8623bac0f6e8e5 - .quad 0x3fd28fab00000000 - .quad 0x3e82d664ea511964 - .quad 0x3fd2a28b00000000 - .quad 0x3e244827751649e1 - .quad 0x3fd2b56500000000 - .quad 0x3e870662732a8325 - .quad 0x3fd2c83c00000000 - .quad 0x3e8db880f0396c05 - .quad 0x3fd2db1000000000 - .quad 0x3e8409b34923f5d0 - .quad 0x3fd2ede000000000 - .quad 0x3e899c121e8496e6 - .quad 0x3fd300ad00000000 - .quad 0x3e7c232f22d20f20 - .quad 0x3fd3137500000000 - .quad 0x3e73683d6c58ca0d - .quad 0x3fd3263900000000 - .quad 0x3e836d65141862cf - .quad 0x3fd338fa00000000 - .quad 0x3e75be12efc2f601 - .quad 0x3fd34bb600000000 - .quad 0x3e70751869f3b7a6 - .quad 0x3fd35e6f00000000 - .quad 0x3e89f95043bbfc91 - .quad 0x3fd3712400000000 - .quad 0x3e80d499b29f7615 - .quad 0x3fd383d500000000 - .quad 0x3e83dd8f4de52902 - .quad 0x3fd3968400000000 - .quad 0x3e748a73fa7e46e2 - .quad 0x3fd3a92e00000000 - .quad 0x3e6252112c0e2155 - .quad 0x3fd3bbd300000000 - .quad 0x3e52a1dc831e5ad7 - .quad 0x3fd3ce7500000000 - .quad 0x3e825d1013e78284 - .quad 0x3fd3e11400000000 - .quad 0x3e796f27f8ed6ab1 - .quad 0x3fd3f3af00000000 - .quad 0x3e81043c4e106f6a - .quad 0x3fd4064500000000 - .quad 0x3e8723607a748d45 - .quad 0x3fd418d900000000 - .quad 0x3e7c5a76f3c6b991 - .quad 0x3fd42b6900000000 - .quad 0x3e7c13d54b6ede12 - .quad 0x3fd43df400000000 - .quad 0x3e7d02dc433313ae - .quad 0x3fd4507c00000000 - .quad 0x3e8edba9f6e1776c - .quad 0x3fd4630100000000 - .quad 0x3e86e864bf1d1aaa - .quad 0x3fd4758100000000 - .quad 0x3e7cae90765abc31 - .quad 0x3fd487fe00000000 - .quad 0x3e849fe23646e5a5 - .quad 0x3fd49a7800000000 - .quad 0x3e479a36743be41d - .quad 0x3fd4aced00000000 - .quad 0x3e8483e03299b840 - .quad 0x3fd4bf5f00000000 - .quad 0x3e7abba144c6b22b - .quad 0x3fd4d1cd00000000 - .quad 0x3e774d20fdd9f23b - .quad 0x3fd4e43800000000 - .quad 0x3e871d1f7aa47e01 - .quad 0x3fd4f69e00000000 - .quad 0x3e8f2860ba3b3db5 - .quad 0x3fd5090200000000 - .quad 0x3e83af1c17099bfe - .quad 0x3fd51b6200000000 - .quad 0x3e785ff9de74a1b4 - .quad 0x3fd52dbe00000000 - .quad 0x3e709325cfafa80f - .quad 0x3fd5401600000000 - .quad 0x3e6e6947ccf73d7a - .quad 0x3fd5526a00000000 - .quad 0x3e738124d5db9ad7 - .quad 0x3fd564bb00000000 - .quad 0x3e86b2911c62b3a2 - .quad 0x3fd5770900000000 - .quad 0x3e6719bc759ee891 - .quad 0x3fd5895200000000 - .quad 0x3e869a322d9370bc - .quad 0x3fd59b9800000000 - .quad 0x3e719789a94340e2 - .quad 0x3fd5addb00000000 - .quad 0x3e61c3d9786a1c1a - .quad 0x3fd5c01a00000000 - .quad 0x3e37ef590a213419 - .quad 0x3fd5d25400000000 - .quad 0x3e8d54eb1103130f - .quad 0x3fd5e48d00000000 - .quad 0x3e52f62a9cc12fd0 - .quad 0x3fd5f6c100000000 - .quad 0x3e6be9b244784641 - .quad 0x3fd608f100000000 - .quad 0x3e758a521184b277 - .quad 0x3fd61b1e00000000 - .quad 0x3e86042873323471 - .quad 0x3fd62d4700000000 - .quad 0x3e8fbc7d80b47bcf - .quad 0x3fd63f6d00000000 - .quad 0x3e6e2c82077ea756 - .quad 0x3fd6518f00000000 - .quad 0x3e85ccef6bf767f4 - .quad 0x3fd663ae00000000 - .quad 0x3e46ead81df81e8f - .quad 0x3fd675c900000000 - .quad 0x3e82dd03f10cd685 - .quad 0x3fd687e100000000 - .quad 0x3e3e902c6dbc1f0c - .quad 0x3fd699f500000000 - .quad 0x3e84319abac9c4b2 - .quad 0x3fd6ac0600000000 - .quad 0x3e5b055166c24b15 - .quad 0x3fd6be1200000000 - .quad 0x3e7c3be07b4f7882 - .quad 0x3fd6d01b00000000 - .quad 0x3e8cfd93dd847e5d - .quad 0x3fd6e22100000000 - .quad 0x3e6ace863358e8d7 - .quad 0x3fd6f42300000000 - .quad 0x3e83e40c6242bfe9 - .quad 0x3fd7062300000000 - .quad 0x3e610ab6a8479b5d - .quad 0x3fd7181e00000000 - .quad 0x3e7cd689bcfd9cf6 - .quad 0x3fd72a1600000000 - .quad 0x3e8b1978624662cc - .quad 0x3fd73c0b00000000 - .quad 0x3e3b1a8d9a80c213 - .quad 0x3fd74dfa00000000 - .quad 0x3e8f44cc629fadc5 - .quad 0x3fd75fe900000000 - .quad 0x3e70d17562376005 - .quad 0x3fd771d300000000 - .quad 0x3e731fbf269b0088 - .quad 0x3fd783b900000000 - .quad 0x3e52ab13f0273736 - .quad 0x3fd7959b00000000 - .quad 0x3e8ba45253b127d6 - .quad 0x3fd7a77b00000000 - .quad 0x3e852fa4783a4dfd - .quad 0x3fd7b95700000000 - .quad 0x3e6528d527430d54 - .quad 0x3fd7cb2f00000000 - .quad 0x3e84f6c8a8c54418 - .quad 0x3fd7dd0500000000 - .quad 0x3e5f404ba538c133 - .quad 0x3fd7eed700000000 - .quad 0x3e81d08a084632f9 - .quad 0x3fd800a500000000 - .quad 0x3e84e2c39b578d96 - .quad 0x3fd8127000000000 - .quad 0x3e8641178f2c2b02 - .quad 0x3fd8243700000000 - .quad 0x3e781b9c28ee919e - .quad 0x3fd835fa00000000 - .quad 0x3e8f7b17b6d5775c - .quad 0x3fd847bc00000000 - .quad 0x3e89db0c612f1b2e - .quad 0x3fd8597800000000 - .quad 0x3e8dffaae2cbad0f - .quad 0x3fd86b3300000000 - .quad 0x3e70f5b6d0513247 - .quad 0x3fd87ce900000000 - .quad 0x3e6699b2d0c42cca - .quad 0x3fd88e9b00000000 - .quad 0x3e8edc16362782b3 - .quad 0x3fd8a04b00000000 - .quad 0x3e83cd771d49fb4b - .quad 0x3fd8b1f800000000 - .quad 0x3e60b05b11747e4c - .quad 0x3fd8c3a100000000 - .quad 0x3e7f52c9816db2c1 - .quad 0x3fd8d54600000000 - .quad 0x3e782d70d541d6c1 - .quad 0x3fd8e6e800000000 - .quad 0x3e57aa91cc153dde - .quad 0x3fd8f88600000000 - .quad 0x3e83f65a8e01affc - .quad 0x3fd90a2100000000 - .quad 0x3e8ecae2475966df - .quad 0x3fd91bba00000000 - .quad 0x3e591f169848d269 - .quad 0x3fd92d4f00000000 - .quad 0x3e3647c7943a8d23 - .quad 0x3fd93ee000000000 - .quad 0x3e8726bf3db3e718 - .quad 0x3fd9506d00000000 - .quad 0x3e8c1a18fafa10d5 - .quad 0x3fd961f900000000 - .quad 0x3e5b2740c198f220 - .quad 0x3fd9737f00000000 - .quad 0x3e887fb1536242b8 - .quad 0x3fd9850400000000 - .quad 0x3e7ec5c619b71f3e - .quad 0x3fd9968400000000 - .quad 0x3e8366d3eb0e5d24 - .quad 0x3fd9a80200000000 - .quad 0x3e88a3c48f5901ad - .quad 0x3fd9b97c00000000 - .quad 0x3e74a3bb2d70054b - .quad 0x3fd9caf200000000 - .quad 0x3e825931e77b3ed9 - .quad 0x3fd9dc6600000000 - .quad 0x3e8ac1bd72bb6920 - .quad 0x3fd9edd600000000 - .quad 0x3e7d26c9777b80e6 - .quad 0x3fd9ff4200000000 - .quad 0x3e87cdf6b003fe44 - .quad 0x3fda10ad00000000 - .quad 0x3e32256c5f5257da - .quad 0x3fda221200000000 - .quad 0x3e83b4a3ff1466d0 - .quad 0x3fda337600000000 - .quad 0x3e673fb048cd2b2f - .quad 0x3fda44d600000000 - .quad 0x3e7844f0a7da3c13 - .quad 0x3fda563100000000 - .quad 0x3e8bcba6da5b37e1 - .quad 0x3fda678b00000000 - .quad 0x3e7325816e447b2d - .quad 0x3fda78e100000000 - .quad 0x3e753defc2fb5aa0 - .quad 0x3fda8a3300000000 - .quad 0x3e8e9f688620242e - .quad 0x3fda9b8300000000 - .quad 0x3e650c63633bbec2 - .quad 0x3fdaacce00000000 - .quad 0x3e8e38f926facedd - .quad 0x3fdabe1800000000 - .quad 0x3e83efe3f1bc83ea - .quad 0x3fdacf5d00000000 - .quad 0x3e809e9d83cd28e8 - .quad 0x3fdae0a000000000 - .quad 0x3e72f7a9feea5b2a - .quad 0x3fdaf1df00000000 - .quad 0x3e83762377a3c900 - .quad 0x3fdb031b00000000 - .quad 0x3e7c7818efde9c0a - .quad 0x3fdb145500000000 - .quad 0x3e618ff8ce39a19e - .quad 0x3fdb258900000000 - .quad 0x3e8fd450b400cdc5 - .quad 0x3fdb36bc00000000 - .quad 0x3e861347926aa708 - .quad 0x3fdb47eb00000000 - .quad 0x3e8be7104fa3a380 - .quad 0x3fdb591700000000 - .quad 0x3e80fdc35b90ee8d - .quad 0x3fdb6a4100000000 - .quad 0x3e056415269e9adc - .quad 0x3fdb7b6600000000 - .quad 0x3e8ddbe05932e271 - .quad 0x3fdb8c8900000000 - .quad 0x3e73fe21df4fea38 - .quad 0x3fdb9da800000000 - .quad 0x3e60b2e6d80d2ce6 - .quad 0x3fdbaec400000000 - .quad 0x3e874289e4e1d49c - .quad 0x3fdbbfdd00000000 - .quad 0x3e87ce1b050aa700 - .quad 0x3fdbd0f300000000 - .quad 0x3e65f3c859448338 - .quad 0x3fdbe20400000000 - .quad 0x3e8ffc7f79678a39 - .quad 0x3fdbf31400000000 - .quad 0x3e824a1ec9be7496 - .quad 0x3fdc042100000000 - .quad 0x3e8c2b16ec00f182 - .quad 0x3fdc152a00000000 - .quad 0x3e6a92654ec891d7 - .quad 0x3fdc263000000000 - .quad 0x3e7037888b90c7f8 - .quad 0x3fdc373200000000 - .quad 0x3e84e5a090419bc8 - .quad 0x3fdc483200000000 - .quad 0x3e882722e066f64d - .quad 0x3fdc592f00000000 - .quad 0x3e6894ad710aef0c - .quad 0x3fdc6a2900000000 - .quad 0x3e74290c06a50919 - .quad 0x3fdc7b1f00000000 - .quad 0x3e8829ea41109e48 - .quad 0x3fdc8c1200000000 - .quad 0x3e8011fb6ad70668 - .quad 0x3fdc9d0200000000 - .quad 0x3e8d1948f3cb0098 - .quad 0x3fdcadef00000000 - .quad 0x3e835c4dc117de0d - .quad 0x3fdcbed900000000 - .quad 0x3e8e37710c7563b4 - .quad 0x3fdccfc000000000 - .quad 0x3e81b705b8191331 - .quad 0x3fdce0a400000000 - .quad 0x3e89474b1cfe31f4 - .quad 0x3fdcf18500000000 - .quad 0x3e71c8d86ee32d3b - .quad 0x3fdd026300000000 - .quad 0x3e7815019917c831 - .quad 0x3fdd133d00000000 - .quad 0x3e86a58c1d40a370 - .quad 0x3fdd241400000000 - .quad 0x3e70c2fc81bc79c2 - .quad 0x3fdd34e900000000 - .quad 0x3e88ba3405adb567 - .quad 0x3fdd45ba00000000 - .quad 0x3e5ddba9ecf26bb9 - .quad 0x3fdd568800000000 - .quad 0x3e3d1ef9e850540f - .quad 0x3fdd675300000000 - .quad 0x3e80065d34ca0dce - .quad 0x3fdd781c00000000 - .quad 0x3e80d733e02d0dd1 - .quad 0x3fdd88e100000000 - .quad 0x3e870ef65b098f9c - .quad 0x3fdd99a300000000 - .quad 0x3e52c86102e26030 - .quad 0x3fddaa6100000000 - .quad 0x3e8e80c9ef4c81d3 - .quad 0x3fddbb1e00000000 - .quad 0x3e7692e19cb2b425 - .quad 0x3fddcbd600000000 - .quad 0x3e8c462e64521547 - .quad 0x3fdddc8c00000000 - .quad 0x3e8d5a1dd411035e - .quad 0x3fdded4000000000 - .quad 0x3e7c908df47a8f92 - .quad 0x3fddfdf000000000 - .quad 0x3e545cf17f40aa9d - .quad 0x3fde0e9d00000000 - .quad 0x3e687c172ac42c55 - .quad 0x3fde1f4600000000 - .quad 0x3e78da98936314cf - .quad 0x3fde2fed00000000 - .quad 0x3e4812e4ac4e8487 - .quad 0x3fde409100000000 - .quad 0x3e64755453322906 - .quad 0x3fde513100000000 - .quad 0x3e7528ae2e3ef4fa - .quad 0x3fde61d000000000 - .quad 0x3e7501716cf4be90 - .quad 0x3fde726900000000 - .quad 0x3e8f3cea8b8b9869 - .quad 0x3fde830200000000 - .quad 0x3e7be69828149b31 - .quad 0x3fde939600000000 - .quad 0x3e8d5e2937a72435 - .quad 0x3fdea42800000000 - .quad 0x3e89bfbbe2698141 - .quad 0x3fdeb4b800000000 - .quad 0x3e56d15b8c6d35e8 - .quad 0x3fdec54400000000 - .quad 0x3e886f8d094b9a13 - .quad 0x3fded5cd00000000 - .quad 0x3e7b23c5dca4eff0 - .quad 0x3fdee65300000000 - .quad 0x3e7d463bf0218027 - .quad 0x3fdef6d600000000 - .quad 0x3e8b651c6050e055 - .quad 0x3fdf075600000000 - .quad 0x3e6b46a793b8e626 - .quad 0x3fdf17d400000000 - .quad 0x3e74650236b11f5f - .quad 0x3fdf284e00000000 - .quad 0x3e77629298efa0ad - .quad 0x3fdf38c500000000 - .quad 0x3e87d798bebcb6ab - .quad 0x3fdf493a00000000 - .quad 0x3e7ccde6d2f4c9f7 - .quad 0x3fdf59ab00000000 - .quad 0x3e5186572a5ff9c8 - .quad 0x3fdf6a1a00000000 - .quad 0x3e799d006591c907 - .quad 0x3fdf7a8500000000 - .quad 0x3e841960e73ec979 - .quad 0x3fdf8aee00000000 - .quad 0x3e630aa8521479fd - .quad 0x3fdf9b5300000000 - .quad 0x3e8e8b869c429d94 - .quad 0x3fdfabb700000000 - .quad 0x3e4350fc25c8a13b - .quad 0x3fdfbc1700000000 - .quad 0x3e79009a6ef5d48a - .quad 0x3fdfcc7300000000 - .quad 0x3e8306349a8abfef - .quad 0x3fdfdcce00000000 - .quad 0x3e7d9f569f06bc1e - .quad 0x3fdfed2500000000 - .quad 0x3e65160ec1d12919 - .quad 0x3fdffd7900000000 - .quad 0x3e5a83ff2555a494 - .quad 0x3fe006e500000000 - .quad 0x3e9afca83644de26 - .quad 0x3fe00f0d00000000 - .quad 0x3e53c49d9079d468 - .quad 0x3fe0173200000000 - .quad 0x3e9ae76be763882e - .quad 0x3fe01f5700000000 - .quad 0x3e7f793285e25c81 - .quad 0x3fe0277a00000000 - .quad 0x3e800243639826ee - .quad 0x3fe02f9b00000000 - .quad 0x3e9b301832f2c8a9 - .quad 0x3fe037bc00000000 - .quad 0x3e54b54b5457ab7c - .quad 0x3fe03fda00000000 - .quad 0x3e9a32f3449fa7a6 - .quad 0x3fe047f700000000 - .quad 0x3e8e060e91d41da5 - .quad 0x3fe0501300000000 - .quad 0x3e8a3f382aa1e82b - .quad 0x3fe0582d00000000 - .quad 0x3e9da8b4318c1dd2 - .quad 0x3fe0604700000000 - .quad 0x3e3f9274a07c17a6 - .quad 0x3fe0685e00000000 - .quad 0x3e95804ec5f0fe6d - .quad 0x3fe0707400000000 - .quad 0x3e9c8eac786d0112 - .quad 0x3fe0788900000000 - .quad 0x3e958943fb66416b - .quad 0x3fe0809d00000000 - .quad 0x3e33fb82cede51e0 - .quad 0x3fe088ae00000000 - .quad 0x3e9cc27b15563034 - .quad 0x3fe090bf00000000 - .quad 0x3e8581667ca3348d - .quad 0x3fe098ce00000000 - .quad 0x3e8454acd057fbfa - .quad 0x3fe0a0dc00000000 - .quad 0x3e91cf1c5c53f37d - .quad 0x3fe0a8e800000000 - .quad 0x3e93b2b423f481d0 - .quad 0x3fe0b0f300000000 - .quad 0x3e7a8314e3b62474 - .quad 0x3fe0b8fd00000000 - .quad 0x3e574eeba208d495 - .quad 0x3fe0c10400000000 - .quad 0x3e961ac74d5ada6a - .quad 0x3fe0c90b00000000 - .quad 0x3e926ddde7aa78b1 - .quad 0x3fe0d11000000000 - .quad 0x3e9f51b91d907509 - .quad 0x3fe0d91400000000 - .quad 0x3e9ca5d77a3bf837 - .quad 0x3fe0e11700000000 - .quad 0x3e84935ef97f078e - .quad 0x3fe0e91800000000 - .quad 0x3e80395f3d5449d6 - .quad 0x3fe0f11800000000 - .quad 0x3e8a2c7cb38d9ed1 - .quad 0x3fe0f91600000000 - .quad 0x3e9677ba0152cbb4 - .quad 0x3fe1011300000000 - .quad 0x3e9b3a7927aec2fd - .quad 0x3fe1090f00000000 - .quad 0x3e707f2889e8b7a9 - .quad 0x3fe1110900000000 - .quad 0x3e93bcf3ba17fb1f - .quad 0x3fe1190200000000 - .quad 0x3e7cecd182c0b1e4 - .quad 0x3fe120f900000000 - .quad 0x3e95a3c2fb2785b2 - .quad 0x3fe128ef00000000 - .quad 0x3e9edbce6a636a11 - .quad 0x3fe130e400000000 - .quad 0x3e972c7da9b832d3 - .quad 0x3fe138d700000000 - .quad 0x3e9e74efeb672a03 - .quad 0x3fe140ca00000000 - .quad 0x3e2a1e54f6b89e31 - .quad 0x3fe148ba00000000 - .quad 0x3e90ad737019fd24 - .quad 0x3fe150a900000000 - .quad 0x3e9b639c287d2824 - .quad 0x3fe1589700000000 - .quad 0x3e9495b6dd3ddabd - .quad 0x3fe1608400000000 - .quad 0x3e7f2aeffe31b5d0 - .quad 0x3fe1686f00000000 - .quad 0x3e827b385c52cc9f - .quad 0x3fe1705900000000 - .quad 0x3e71e501d3944026 - .quad 0x3fe1784100000000 - .quad 0x3e99628a2c0e2602 - .quad 0x3fe1802800000000 - .quad 0x3e9c2e52f159a4bf - .quad 0x3fe1880e00000000 - .quad 0x3e8976d9b0f3dfdd - .quad 0x3fe18ff300000000 - .quad 0x3e628513cd04695c - .quad 0x3fe197d600000000 - .quad 0x3e75b2da605bddf8 - .quad 0x3fe19fb700000000 - .quad 0x3e95ee648263ee18 - .quad 0x3fe1a79700000000 - .quad 0x3e9f6e601ac91256 - .quad 0x3fe1af7700000000 - .quad 0x3e5d155a178b90cd - .quad 0x3fe1b75400000000 - .quad 0x3e9cfbe9de667b41 - .quad 0x3fe1bf3100000000 - .quad 0x3e744ae80f899fbd - .quad 0x3fe1c70c00000000 - .quad 0x3e76d96ff1c879c9 - .quad 0x3fe1cee500000000 - .quad 0x3e9ecb5e2c072eb0 - .quad 0x3fe1d6be00000000 - .quad 0x3e71c11dbe1db818 - .quad 0x3fe1de9500000000 - .quad 0x3e625cbb9559d10f - .quad 0x3fe1e66a00000000 - .quad 0x3e9841c66176bdde - .quad 0x3fe1ee3f00000000 - .quad 0x3e78dd143c97c211 - .quad 0x3fe1f61200000000 - .quad 0x3e309f38f10515b8 - .quad 0x3fe1fde300000000 - .quad 0x3e9de1d02b7acb55 - .quad 0x3fe205b400000000 - .quad 0x3e7d6e666f069f9f - .quad 0x3fe20d8300000000 - .quad 0x3e80c459b58a9a68 - .quad 0x3fe2155100000000 - .quad 0x3e4b3ac6c4422b43 - .quad 0x3fe21d1d00000000 - .quad 0x3e90a6dabdf57c13 - .quad 0x3fe224e800000000 - .quad 0x3e87a6f05e2e66b4 - .quad 0x3fe22cb200000000 - .quad 0x3e83ebcaaaa786ff - .quad 0x3fe2347a00000000 - .quad 0x3e933c5177ae38be - .quad 0x3fe23c4100000000 - .quad 0x3e9f44e5029b8b1d - .quad 0x3fe2440700000000 - .quad 0x3e9635c0e894df30 - .quad 0x3fe24bcc00000000 - .quad 0x3e6e87f9f1f3590c - .quad 0x3fe2538f00000000 - .quad 0x3e7feacb86a3b429 - .quad 0x3fe25b5100000000 - .quad 0x3e8cfdcf4e10a41a - .quad 0x3fe2631100000000 - .quad 0x3e9f73a21fdde641 - .quad 0x3fe26ad100000000 - .quad 0x3e7a8b8011d56d3b - .quad 0x3fe2728f00000000 - .quad 0x3e6f84bf7d5b34d0 - .quad 0x3fe27a4c00000000 - .quad 0x3e6985cc1c8f11b0 - .quad 0x3fe2820700000000 - .quad 0x3e88d25a6a02c803 - .quad 0x3fe289c100000000 - .quad 0x3e975fd4c3433e76 - .quad 0x3fe2917a00000000 - .quad 0x3e8825154781d2c2 - .quad 0x3fe2993200000000 - .quad 0x3e62791595e60d25 - .quad 0x3fe2a0e800000000 - .quad 0x3e605b4c41d5635b - .quad 0x3fe2a89d00000000 - .quad 0x3e68e92900528496 - .quad 0x3fe2b05000000000 - .quad 0x3e9970145df6a281 - .quad 0xbfda8ff900000000 - .quad 0xbe86302155df0de3 - .quad 0xbfda809600000000 - .quad 0xbe8d2b316176fad0 - .quad 0xbfda713700000000 - .quad 0xbe824db2f6aceb96 - .quad 0xbfda61da00000000 - .quad 0xbe67117a804da234 - .quad 0xbfda527f00000000 - .quad 0xbe7f97f60ff5807b - .quad 0xbfda432700000000 - .quad 0xbe809d5c44adaa28 - .quad 0xbfda33d200000000 - .quad 0xbe70e2c7de9ac83b - .quad 0xbfda247f00000000 - .quad 0xbe8781011952fb40 - .quad 0xbfda152f00000000 - .quad 0xbe6794c0edaf9f16 - .quad 0xbfda05e100000000 - .quad 0xbe77ddf6e9895b08 - .quad 0xbfd9f69600000000 - .quad 0xbe73aef455ae3da8 - .quad 0xbfd9e74d00000000 - .quad 0xbe6eaf442c7ba9be - .quad 0xbfd9d80600000000 - .quad 0xbe8dc93243f14070 - .quad 0xbfd9c8c300000000 - .quad 0xbe78d1ba7956f02d - .quad 0xbfd9b98100000000 - .quad 0xbe8b8c1e78260310 - .quad 0xbfd9aa4300000000 - .quad 0xbe5ce27fc9d31391 - .quad 0xbfd99b0700000000 - .quad 0xbe634b6355f4087a - .quad 0xbfd98bcd00000000 - .quad 0xbe6c94b4572fef43 - .quad 0xbfd97c9600000000 - .quad 0xbe5846721de94267 - .quad 0xbfd96d6100000000 - .quad 0xbe88b74acdde1f6a - .quad 0xbfd95e2f00000000 - .quad 0xbe801a3e03f6b280 - .quad 0xbfd94f0000000000 - .quad 0xbe4b35095482043f - .quad 0xbfd93fd200000000 - .quad 0xbe856437d9bb4a5c - .quad 0xbfd930a800000000 - .quad 0xbe5db5b388b06a65 - .quad 0xbfd9218000000000 - .quad 0xbe79c93768c0e5d4 - .quad 0xbfd9125a00000000 - .quad 0xbe27f0e9d0aaf77a - .quad 0xbfd9033700000000 - .quad 0xbe6e085f7c5942f1 - .quad 0xbfd8f41600000000 - .quad 0xbe81b98df5f47569 - .quad 0xbfd8e4f700000000 - .quad 0xbe8f3428ac4ddeec - .quad 0xbfd8d5dc00000000 - .quad 0xbe7127ef6092650e - .quad 0xbfd8c6c300000000 - .quad 0xbe7c262e6c66cdb8 - .quad 0xbfd8b7ac00000000 - .quad 0xbe876faffff4af15 - .quad 0xbfd8a89800000000 - .quad 0xbe635fdead9ef9a2 - .quad 0xbfd8998600000000 - .quad 0xbe7dfc6109e45ceb - .quad 0xbfd88a7600000000 - .quad 0xbe8d94a9416e4721 - .quad 0xbfd87b6900000000 - .quad 0xbe80c9bd35322fa9 - .quad 0xbfd86c5f00000000 - .quad 0xbe45bd4714c8ffcf - .quad 0xbfd85d5700000000 - .quad 0xbe7f0ac6abba5180 - .quad 0xbfd84e5100000000 - .quad 0xbe74a1d4fc76c4e2 - .quad 0xbfd83f4e00000000 - .quad 0xbe58c7bbd43ea059 - .quad 0xbfd8304d00000000 - .quad 0xbe8a18240481523a - .quad 0xbfd8214e00000000 - .quad 0xbe8e4115e0e87309 - .quad 0xbfd8125300000000 - .quad 0xbe4067fcc9c54454 - .quad 0xbfd8035a00000000 - .quad 0xbe5519044060b3ca - .quad 0xbfd7f46200000000 - .quad 0xbe81f1c2bab3efa5 - .quad 0xbfd7e56e00000000 - .quad 0xbe2f4f8116a92f1f - .quad 0xbfd7d67c00000000 - .quad 0xbe7d00ebaf755412 - .quad 0xbfd7c78c00000000 - .quad 0xbe757cb332aa9b04 - .quad 0xbfd7b89f00000000 - .quad 0xbe6b67957924a221 - .quad 0xbfd7a9b400000000 - .quad 0xbe749441f289397f - .quad 0xbfd79acb00000000 - .quad 0xbe853e207739b243 - .quad 0xbfd78be500000000 - .quad 0xbe6f940fb688810d - .quad 0xbfd77d0100000000 - .quad 0xbe8b3df7ad1f744b - .quad 0xbfd76e2000000000 - .quad 0xbe86b033ad082bc9 - .quad 0xbfd75f4100000000 - .quad 0xbe8a6afc121884da - .quad 0xbfd7506500000000 - .quad 0xbe6a7683b47c1884 - .quad 0xbfd7418a00000000 - .quad 0xbe8b777e34575fd6 - .quad 0xbfd732b200000000 - .quad 0xbe8927fbbcb9ee5d - .quad 0xbfd723dd00000000 - .quad 0xbe88c68d7090566b - .quad 0xbfd7150b00000000 - .quad 0xbe4a2b2a2a0eb191 - .quad 0xbfd7063900000000 - .quad 0xbe8afbf68de6383b - .quad 0xbfd6f76b00000000 - .quad 0xbe86ddf093045ea8 - .quad 0xbfd6e89f00000000 - .quad 0xbe8c8c435cc0756e - .quad 0xbfd6d9d600000000 - .quad 0xbe786d3ae8f9661f - .quad 0xbfd6cb0f00000000 - .quad 0xbe6832e43f6d9d88 - .quad 0xbfd6bc4a00000000 - .quad 0xbe747cb81361877f - .quad 0xbfd6ad8800000000 - .quad 0xbe82035808f1c0f3 - .quad 0xbfd69ec800000000 - .quad 0xbe76ff1399db6922 - .quad 0xbfd6900a00000000 - .quad 0xbe7fcdb431863dd3 - .quad 0xbfd6814e00000000 - .quad 0xbe8f693d13fbb8d9 - .quad 0xbfd6729600000000 - .quad 0xbe834eb29036fad3 - .quad 0xbfd663df00000000 - .quad 0xbe899b456a12ce2e - .quad 0xbfd6552b00000000 - .quad 0xbe772618a503c189 - .quad 0xbfd6467900000000 - .quad 0xbe72cc529275c5a3 - .quad 0xbfd637c900000000 - .quad 0xbe8344c9b19a2513 - .quad 0xbfd6291c00000000 - .quad 0xbe72be4c963d47b8 - .quad 0xbfd61a7100000000 - .quad 0xbe77cb0653b68de6 - .quad 0xbfd60bc800000000 - .quad 0xbe8b082faedc50d1 - .quad 0xbfd5fd2200000000 - .quad 0xbe86f7868080f7bc - .quad 0xbfd5ee7e00000000 - .quad 0xbe6a9fb569e79a60 - .quad 0xbfd5dfdc00000000 - .quad 0xbe8cbdd5bf453a04 - .quad 0xbfd5d13d00000000 - .quad 0xbe6bb6ee545183dc - .quad 0xbfd5c2a000000000 - .quad 0xbe87ec26c29aa221 - .quad 0xbfd5b40500000000 - .quad 0xbe8d5da983e3cbed - .quad 0xbfd5a56d00000000 - .quad 0xbe80b6e1bfe5ec04 - .quad 0xbfd596d700000000 - .quad 0xbe8228784608b2df - .quad 0xbfd5884300000000 - .quad 0xbe7116419622027e - .quad 0xbfd579b200000000 - .quad 0xbe6aee6a38f29592 - .quad 0xbfd56b2200000000 - .quad 0xbe8a36af180d0f15 - .quad 0xbfd55c9500000000 - .quad 0xbe8c853372ca57cc - .quad 0xbfd54e0b00000000 - .quad 0xbe7bb00ee04486c4 - .quad 0xbfd53f8300000000 - .quad 0xbe7cc02b891628da - .quad 0xbfd530fd00000000 - .quad 0xbe63794fe93c7f63 - .quad 0xbfd5227900000000 - .quad 0xbe75d7854e0de2c5 - .quad 0xbfd513f800000000 - .quad 0xbe372da45519dce0 - .quad 0xbfd5057800000000 - .quad 0xbe79f8d2da727bf4 - .quad 0xbfd4f6fc00000000 - .quad 0xbe56cec60358c3fd - .quad 0xbfd4e88000000000 - .quad 0xbe8602e65c350140 - .quad 0xbfd4da0800000000 - .quad 0xbe8328c92737a9b0 - .quad 0xbfd4cb9200000000 - .quad 0xbe6dc3078767b5b5 - .quad 0xbfd4bd1e00000000 - .quad 0xbe79203927cd12cc - .quad 0xbfd4aead00000000 - .quad 0xbe55c17da1b07b42 - .quad 0xbfd4a03d00000000 - .quad 0xbe80825c25cbdda8 - .quad 0xbfd491d000000000 - .quad 0xbe7f601ba1cb823b - .quad 0xbfd4836600000000 - .quad 0xbe2caebe06773e1b - .quad 0xbfd474fd00000000 - .quad 0xbe72afc887224809 - .quad 0xbfd4669700000000 - .quad 0xbe60b454dababfee - .quad 0xbfd4583200000000 - .quad 0xbe8777e382ef584f - .quad 0xbfd449d000000000 - .quad 0xbe8d0defa65e43f7 - .quad 0xbfd43b7100000000 - .quad 0xbe8520e465f01125 - .quad 0xbfd42d1400000000 - .quad 0xbe68a9db3066f3ad - .quad 0xbfd41eb900000000 - .quad 0xbe7418cd285c77e6 - .quad 0xbfd4106000000000 - .quad 0xbe6ce1f66985cea7 - .quad 0xbfd4020900000000 - .quad 0xbe8798904973ef89 - .quad 0xbfd3f3b500000000 - .quad 0xbe4967d2ab8251d8 - .quad 0xbfd3e56200000000 - .quad 0xbe8f242d496e3d08 - .quad 0xbfd3d71200000000 - .quad 0xbe86a393bba964c4 - .quad 0xbfd3c8c500000000 - .quad 0xbe507570cacef7bf - .quad 0xbfd3ba7900000000 - .quad 0xbe6efe0fa4f69a96 - .quad 0xbfd3ac3000000000 - .quad 0xbe4b827373e0a286 - .quad 0xbfd39de800000000 - .quad 0xbe864ab3e2fb43d9 - .quad 0xbfd38fa300000000 - .quad 0xbe8f81504eb31318 - .quad 0xbfd3816100000000 - .quad 0xbe5d3164fb917590 - .quad 0xbfd3732000000000 - .quad 0xbe8ccb836b329f7f - .quad 0xbfd364e200000000 - .quad 0xbe8133990d5010c8 - .quad 0xbfd356a600000000 - .quad 0xbe404bc113420455 - .quad 0xbfd3486c00000000 - .quad 0xbe697514cf0a57dc - .quad 0xbfd33a3400000000 - .quad 0xbe6dce5b769a0eb8 - .quad 0xbfd32bfe00000000 - .quad 0xbe8e6e1dd018cc95 - .quad 0xbfd31dcb00000000 - .quad 0xbe817b505f20e7f3 - .quad 0xbfd30f9a00000000 - .quad 0xbe3835df86199ab1 - .quad 0xbfd3016b00000000 - .quad 0xbe69cf10d769bddb - .quad 0xbfd2f33e00000000 - .quad 0xbe7168482a60bb7c - .quad 0xbfd2e51400000000 - .quad 0xbe4bd6cdf5bcf5c4 - .quad 0xbfd2d6ea00000000 - .quad 0xbe8d924633fff084 - .quad 0xbfd2c8c500000000 - .quad 0xbe7542c49a05ee8f - .quad 0xbfd2baa000000000 - .quad 0xbe8ac97c411279db - .quad 0xbfd2ac7f00000000 - .quad 0xbe536acce9910bf7 - .quad 0xbfd29e5f00000000 - .quad 0xbe6e5f25492f16f4 - .quad 0xbfd2904100000000 - .quad 0xbe74df4847fe96f4 - .quad 0xbfd2822500000000 - .quad 0xbe763798f43090eb - .quad 0xbfd2740c00000000 - .quad 0xbe5fb975ad3295a5 - .quad 0xbfd265f400000000 - .quad 0xbe8afcc065467993 - .quad 0xbfd257e000000000 - .quad 0xbe751f024a4452fe - .quad 0xbfd249cc00000000 - .quad 0xbe8e6279a0249a31 - .quad 0xbfd23bbc00000000 - .quad 0xbe7631798bcda203 - .quad 0xbfd22dad00000000 - .quad 0xbe869d668ff512cd - .quad 0xbfd21fa100000000 - .quad 0xbe4179cae9beee0d - .quad 0xbfd2119700000000 - .quad 0xbe63fa3a108ec52d - .quad 0xbfd2038e00000000 - .quad 0xbe7bbae8d6fb8a1c - .quad 0xbfd1f58800000000 - .quad 0xbe807f90e4c2ec69 - .quad 0xbfd1e78400000000 - .quad 0xbe82bc2f5babe119 - .quad 0xbfd1d98200000000 - .quad 0xbe84baa4d8e71f1c - .quad 0xbfd1cb8200000000 - .quad 0xbe86a24fc7020b2b - .quad 0xbfd1bd8500000000 - .quad 0xbe8302982dfe3735 - .quad 0xbfd1af8900000000 - .quad 0xbe8536eece3209fa - .quad 0xbfd1a19000000000 - .quad 0xbe823ace8fc13621 - .quad 0xbfd1939900000000 - .quad 0xbe7f9b761181cc82 - .quad 0xbfd185a400000000 - .quad 0xbe7c2e82add30fbf - .quad 0xbfd177b100000000 - .quad 0xbe7a7defb44845fc - .quad 0xbfd169c000000000 - .quad 0xbe7ad8fc5efe4b5f - .quad 0xbfd15bd100000000 - .quad 0xbe7d8efa5836733a - .quad 0xbfd14de400000000 - .quad 0xbe8177a6d8101fb8 - .quad 0xbfd13ffa00000000 - .quad 0xbe8030b69ab39bd3 - .quad 0xbfd1321100000000 - .quad 0xbe86067085d42483 - .quad 0xbfd1242a00000000 - .quad 0xbe8da8a239a3d693 - .quad 0xbfd1164700000000 - .quad 0xbe4d72294066a603 - .quad 0xbfd1086400000000 - .quad 0xbe7b1ba1dc449b96 - .quad 0xbfd0fa8400000000 - .quad 0xbe862896725de3dd - .quad 0xbfd0eca600000000 - .quad 0xbe6a4d928a11e457 - .quad 0xbfd0deca00000000 - .quad 0xbe843a36b9d55575 - .quad 0xbfd0d0f000000000 - .quad 0xbe73f2208d19fe75 - .quad 0xbfd0c31800000000 - .quad 0xbe8d4bfe81a344c0 - .quad 0xbfd0b54200000000 - .quad 0xbe88ff16f1f6621d - .quad 0xbfd0a76f00000000 - .quad 0xbe829e78b22b06aa - .quad 0xbfd0999d00000000 - .quad 0xbe84e64b365fec9a - .quad 0xbfd08bcd00000000 - .quad 0xbe8ab2bf39987eff - .quad 0xbfd07e0000000000 - .quad 0xbe8ef00e6f310240 - .quad 0xbfd0703500000000 - .quad 0xbe7884f5dd34e44b - .quad 0xbfd0626b00000000 - .quad 0xbe8d92500f14b471 - .quad 0xbfd054a400000000 - .quad 0xbe8307e1dd3ad028 - .quad 0xbfd046df00000000 - .quad 0xbe79971a63342c6a - .quad 0xbfd0391c00000000 - .quad 0xbe760b6f55e8db61 - .quad 0xbfd02b5a00000000 - .quad 0xbe8302cf89e64237 - .quad 0xbfd01d9b00000000 - .quad 0xbe8a9f4c3efc935a - .quad 0xbfd00fde00000000 - .quad 0xbe788f5a8dc51cdf - .quad 0xbfd0022300000000 - .quad 0xbe8de87b8de45c1c - .quad 0xbfcfe8d500000000 - .quad 0xbe73bc8feab63684 - .quad 0xbfcfcd6700000000 - .quad 0xbe766b590d531889 - .quad 0xbfcfb1fe00000000 - .quad 0xbe50ba5e451bff1a - .quad 0xbfcf969700000000 - .quad 0xbe5d9e85a4fc1ce1 - .quad 0xbfcf7b3600000000 - .quad 0xbe687fbdab298db0 - .quad 0xbfcf5fd800000000 - .quad 0xbe5c831eaf201561 - .quad 0xbfcf447e00000000 - .quad 0xbe6c97cc28a0c985 - .quad 0xbfcf292900000000 - .quad 0xbe4096a784f160c8 - .quad 0xbfcf0dd800000000 - .quad 0xbe463a00e430058b - .quad 0xbfcef28900000000 - .quad 0xbe7a9ae40adf8036 - .quad 0xbfced74100000000 - .quad 0xbe76178f7389c2b3 - .quad 0xbfcebbfc00000000 - .quad 0xbe628e408a6030db - .quad 0xbfcea0bb00000000 - .quad 0xbe65370cfca139e2 - .quad 0xbfce857d00000000 - .quad 0xbe509b099c44098a - .quad 0xbfce6a4300000000 - .quad 0xbe68d5caf2faef74 - .quad 0xbfce4f0e00000000 - .quad 0xbe4dd08f036b132f - .quad 0xbfce33dd00000000 - .quad 0xbe64ccf4cb32e460 - .quad 0xbfce18af00000000 - .quad 0xbe64c4c42c4e4661 - .quad 0xbfcdfd8700000000 - .quad 0xbe70b81de05729de - .quad 0xbfcde26000000000 - .quad 0xbe7a821176a0fe0e - .quad 0xbfcdc74000000000 - .quad 0xbe669566643c24c3 - .quad 0xbfcdac2200000000 - .quad 0xbe767c88339625fc - .quad 0xbfcd910900000000 - .quad 0xbe72da2735aa6c86 - .quad 0xbfcd75f300000000 - .quad 0xbe644c6d4a5f5ad6 - .quad 0xbfcd5ae300000000 - .quad 0xbe6396dd21fe2514 - .quad 0xbfcd3fd400000000 - .quad 0xbe6ca92ae56a4fcf - .quad 0xbfcd24cb00000000 - .quad 0xbe7bdc846e0ed386 - .quad 0xbfcd09c600000000 - .quad 0xbe55b88be3ae865a - .quad 0xbfcceec500000000 - .quad 0xbe3fc6a072116830 - .quad 0xbfccd3c600000000 - .quad 0xbe7b1a6214562c52 - .quad 0xbfccb8cd00000000 - .quad 0xbe5f2c91c96636d8 - .quad 0xbfcc9dd800000000 - .quad 0xbe60c3b48651cf97 - .quad 0xbfcc82e600000000 - .quad 0xbe5966f235766ddb - .quad 0xbfcc67f800000000 - .quad 0xbe78ce14eae5dca8 - .quad 0xbfcc4d0e00000000 - .quad 0xbe625479353b5c4a - .quad 0xbfcc322800000000 - .quad 0xbe6d333a7b285ac2 - .quad 0xbfcc174500000000 - .quad 0xbe7277affe5d329a - .quad 0xbfcbfc6700000000 - .quad 0xbe67fffd12834efc - .quad 0xbfcbe18d00000000 - .quad 0xbe7b862223583bcf - .quad 0xbfcbc6b700000000 - .quad 0xbe649b874647b1f2 - .quad 0xbfcbabe300000000 - .quad 0xbe78929bf1c864a7 - .quad 0xbfcb911600000000 - .quad 0xbe74d074968f73d7 - .quad 0xbfcb764a00000000 - .quad 0xbe79fb251b935310 - .quad 0xbfcb5b8300000000 - .quad 0xbe769696568e41b9 - .quad 0xbfcb40c100000000 - .quad 0xbe65ed80b7eb91e0 - .quad 0xbfcb260200000000 - .quad 0xbe07d52c3932a2e4 - .quad 0xbfcb0b4700000000 - .quad 0xbe6b8ad7d7a99fe6 - .quad 0xbfcaf08f00000000 - .quad 0xbe7cbc2b9155b770 - .quad 0xbfcad5db00000000 - .quad 0xbe6aa03f2514a52b - .quad 0xbfcabb2d00000000 - .quad 0xbe6cfb1d524b6daf - .quad 0xbfcaa08000000000 - .quad 0xbe7a78cd1fbb1e99 - .quad 0xbfca85d900000000 - .quad 0xbe119017e37d4667 - .quad 0xbfca6b3400000000 - .quad 0xbe6184b897951f46 - .quad 0xbfca509400000000 - .quad 0xbe675349e1651fc0 - .quad 0xbfca35f700000000 - .quad 0xbe71c8acc30679dd - .quad 0xbfca1b5f00000000 - .quad 0xbe72ec1682bf9837 - .quad 0xbfca00ca00000000 - .quad 0xbe77d09336233c90 - .quad 0xbfc9e63a00000000 - .quad 0xbe7852e40017e39c - .quad 0xbfc9cbad00000000 - .quad 0xbe7d1fd8802fb817 - .quad 0xbfc9b12400000000 - .quad 0xbe59d13fae79743c - .quad 0xbfc9969d00000000 - .quad 0xbe748d385e0277cf - .quad 0xbfc97c1b00000000 - .quad 0xbe7f678fa8388a68 - .quad 0xbfc9619f00000000 - .quad 0xbe5d6188e89480ec - .quad 0xbfc9472500000000 - .quad 0xbe74e4cb139c1e95 - .quad 0xbfc92caf00000000 - .quad 0xbe6093e9a4239741 - .quad 0xbfc9123c00000000 - .quad 0xbe3c518d850f7ba8 - .quad 0xbfc8f7cd00000000 - .quad 0xbe797b7fc86f1c0c - .quad 0xbfc8dd6200000000 - .quad 0xbe77d280a0117cfd - .quad 0xbfc8c2fa00000000 - .quad 0xbe7d078174c6928f - .quad 0xbfc8a89800000000 - .quad 0xbe357f7a64ccd537 - .quad 0xbfc88e3800000000 - .quad 0xbe6a22cd1f2e8f29 - .quad 0xbfc873dc00000000 - .quad 0xbe1c582d297ff644 - .quad 0xbfc8598400000000 - .quad 0xbe73cd87ce24f758 - .quad 0xbfc83f3000000000 - .quad 0xbe6eb716bac42623 - .quad 0xbfc824df00000000 - .quad 0xbe73592a0f410400 - .quad 0xbfc80a9300000000 - .quad 0xbe78343174876ba5 - .quad 0xbfc7f04900000000 - .quad 0xbe6ba4f9b930430e - .quad 0xbfc7d60400000000 - .quad 0xbe5367dd3b0b6b0b - .quad 0xbfc7bbc200000000 - .quad 0xbe556265a1dc7a8e - .quad 0xbfc7a18500000000 - .quad 0xbe5f71aca38241c4 - .quad 0xbfc7874b00000000 - .quad 0xbe746381f987646b - .quad 0xbfc76d1500000000 - .quad 0xbe665804bc056069 - .quad 0xbfc752e200000000 - .quad 0xbe68e83e5955bbc6 - .quad 0xbfc738b200000000 - .quad 0xbe787a19887d1e81 - .quad 0xbfc71e8800000000 - .quad 0xbe5fd1054d6e1895 - .quad 0xbfc7045f00000000 - .quad 0xbe6471e7650be845 - .quad 0xbfc6ea3b00000000 - .quad 0xbe707e9d9296377f - .quad 0xbfc6d01c00000000 - .quad 0xbe7b1bb94e9cc3b2 - .quad 0xbfc6b5ff00000000 - .quad 0xbe7936ceca9afdc8 - .quad 0xbfc69be600000000 - .quad 0xbe4cb3a881abfdf7 - .quad 0xbfc681d100000000 - .quad 0xbe732151a8286c6f - .quad 0xbfc667c000000000 - .quad 0xbe6efc2e3e9ced23 - .quad 0xbfc64db200000000 - .quad 0xbe78eb86ac9ef252 - .quad 0xbfc633a800000000 - .quad 0xbe6f50df1abe0fc9 - .quad 0xbfc619a100000000 - .quad 0xbe73f3aefe930c8f - .quad 0xbfc5ff9f00000000 - .quad 0xbe7edc30c01b141d - .quad 0xbfc5e59f00000000 - .quad 0xbe7f08ed31fe1628 - .quad 0xbfc5cba500000000 - .quad 0xbe5983b170e6c68f - .quad 0xbfc5b1ad00000000 - .quad 0xbe7c5342ddbb7371 - .quad 0xbfc597ba00000000 - .quad 0xbe31f13b9ecb2da6 - .quad 0xbfc57dc900000000 - .quad 0xbe75038fc82fbc24 - .quad 0xbfc563dc00000000 - .quad 0xbe783ff5ad081783 - .quad 0xbfc549f300000000 - .quad 0xbe662723a6715875 - .quad 0xbfc5300d00000000 - .quad 0xbe6b7b7cc9af768a - .quad 0xbfc5162b00000000 - .quad 0xbe1f78d1162b410d - .quad 0xbfc4fc4d00000000 - .quad 0xbe7cb37679326801 - .quad 0xbfc4e27200000000 - .quad 0xbe7065fa9470590b - .quad 0xbfc4c89c00000000 - .quad 0xbe6c3a0233eda037 - .quad 0xbfc4aec800000000 - .quad 0xbe4e014055897901 - .quad 0xbfc494f900000000 - .quad 0xbe4fb8e003c2f3b1 - .quad 0xbfc47b2b00000000 - .quad 0xbe7c8996199d6eea - .quad 0xbfc4616400000000 - .quad 0xbe0faf0bc81e4b94 - .quad 0xbfc4479d00000000 - .quad 0xbe7cc047f1f25c83 - .quad 0xbfc42ddd00000000 - .quad 0xbe53d0da516b147f - .quad 0xbfc4141f00000000 - .quad 0xbe7fcb190acb1c29 - .quad 0xbfc3fa6400000000 - .quad 0xbe7414ec0c60bad1 - .quad 0xbfc3e0ae00000000 - .quad 0xbe74e9ba984a9a60 - .quad 0xbfc3c6fc00000000 - .quad 0xbe624337ccc1362d - .quad 0xbfc3ad4b00000000 - .quad 0xbe7774b4cc0ec2a8 - .quad 0xbfc393a000000000 - .quad 0xbe732b380b7efc7c - .quad 0xbfc379f700000000 - .quad 0xbe62dac931c2e190 - .quad 0xbfc3605300000000 - .quad 0xbe6b470fa43dc529 - .quad 0xbfc346b100000000 - .quad 0xbe69abf6162bfc32 - .quad 0xbfc32d1300000000 - .quad 0xbe2ba4b334a02879 - .quad 0xbfc3137a00000000 - .quad 0xbe4d8be297e30d03 - .quad 0xbfc2f9e300000000 - .quad 0xbe415bfda1644c22 - .quad 0xbfc2e04f00000000 - .quad 0xbe763bbe948b1ac0 - .quad 0xbfc2c6c000000000 - .quad 0xbe016a3f42b0e0f2 - .quad 0xbfc2ad3400000000 - .quad 0xbe00b500d8b4466e - .quad 0xbfc293ab00000000 - .quad 0xbe767834aad3c38f - .quad 0xbfc27a2700000000 - .quad 0xbe4b3fb7ded60421 - .quad 0xbfc260a600000000 - .quad 0xbe5cc6018f3bcd49 - .quad 0xbfc2472700000000 - .quad 0xbe603b59bc184860 - .quad 0xbfc22dad00000000 - .quad 0xbe7a556695fca0d7 - .quad 0xbfc2143600000000 - .quad 0xbe64434576d52cb7 - .quad 0xbfc1fac400000000 - .quad 0xbe6796ca377ea74e - .quad 0xbfc1e15400000000 - .quad 0xbe66f7798c85559d - .quad 0xbfc1c7e800000000 - .quad 0xbe4bde34965f6984 - .quad 0xbfc1ae7d00000000 - .quad 0xbe79e4ab7003a0e6 - .quad 0xbfc1951900000000 - .quad 0xbe49fd11e39abaac - .quad 0xbfc17bb800000000 - .quad 0xbe56b7b48b95c15b - .quad 0xbfc1625900000000 - .quad 0xbe5cc36d3e3cca65 - .quad 0xbfc148fe00000000 - .quad 0xbe41ce485761f69c - .quad 0xbfc12fa600000000 - .quad 0xbe770a1f05316811 - .quad 0xbfc1165300000000 - .quad 0xbe578d49dc1afe94 - .quad 0xbfc0fd0300000000 - .quad 0xbe6e0dca31cd9e54 - .quad 0xbfc0e3b500000000 - .quad 0xbe784e650e0a2fd5 - .quad 0xbfc0ca6b00000000 - .quad 0xbe7c536d57d9dab9 - .quad 0xbfc0b12500000000 - .quad 0xbe7b57a5578d01fd - .quad 0xbfc097e300000000 - .quad 0xbe759cc0cf3da52a - .quad 0xbfc07ea300000000 - .quad 0xbe70dc7f7c36aab7 - .quad 0xbfc0656900000000 - .quad 0xbe43057726eea6f9 - .quad 0xbfc04c3000000000 - .quad 0xbe75532713b0b555 - .quad 0xbfc032fc00000000 - .quad 0xbe51f736f8234297 - .quad 0xbfc019c900000000 - .quad 0xbe757a9427127e28 - .quad 0xbfc0009c00000000 - .quad 0xbe7dd37909d634e1 - .quad 0xbfbfcee400000000 - .quad 0xbe60e50b92227f37 - .quad 0xbfbf9c9700000000 - .quad 0xbe10744b2bbd5c34 - .quad 0xbfbf6a4d00000000 - .quad 0xbe6576fb1ab66ad7 - .quad 0xbfbf380f00000000 - .quad 0xbe6b5374d31a91ee - .quad 0xbfbf05d600000000 - .quad 0xbe4db610eee1b81b - .quad 0xbfbed3a000000000 - .quad 0xbe6a19b7978e8bb8 - .quad 0xbfbea17600000000 - .quad 0xbe6f4cb6bf56f18e - .quad 0xbfbe6f5100000000 - .quad 0xbe57f67e0bd3b63f - .quad 0xbfbe3d3300000000 - .quad 0xbe666a27d6a83d6c - .quad 0xbfbe0b1a00000000 - .quad 0xbe523cbf0c85fa27 - .quad 0xbfbdd90800000000 - .quad 0xbe6a7ced811f7da6 - .quad 0xbfbda6ff00000000 - .quad 0xbe5615e1bd550182 - .quad 0xbfbd74fd00000000 - .quad 0xbe6b4da043725d03 - .quad 0xbfbd430000000000 - .quad 0xbe658a49aa2dca64 - .quad 0xbfbd110b00000000 - .quad 0xbe6066543ad84ef1 - .quad 0xbfbcdf1a00000000 - .quad 0xbe66073d700e9f19 - .quad 0xbfbcad3500000000 - .quad 0xbe63a29cd758d759 - .quad 0xbfbc7b5100000000 - .quad 0xbe49b8777d6bbc9d - .quad 0xbfbc497800000000 - .quad 0xbe623f87f4487fe4 - .quad 0xbfbc17a400000000 - .quad 0xbe55196cb4c66620 - .quad 0xbfbbe5d800000000 - .quad 0xbe496e785a0317a3 - .quad 0xbfbbb41000000000 - .quad 0xbe5ee49501957b40 - .quad 0xbfbb825000000000 - .quad 0xbe6cf6df4849748b - .quad 0xbfbb509500000000 - .quad 0xbe688f964bd70c8f - .quad 0xbfbb1ee600000000 - .quad 0xbe6072c317519bb4 - .quad 0xbfbaed3800000000 - .quad 0xbe05b3290a662bd0 - .quad 0xbfbabb9500000000 - .quad 0xbe5b246ad0582c09 - .quad 0xbfba89f700000000 - .quad 0xbe55372721811f66 - .quad 0xbfba585d00000000 - .quad 0xbe67c995fe88bce3 - .quad 0xbfba26cc00000000 - .quad 0xbe596605e161e768 - .quad 0xbfb9f54300000000 - .quad 0xbe53bd6ea8cdcabf - .quad 0xbfb9c3be00000000 - .quad 0xbe6873a6488f239e - .quad 0xbfb9924200000000 - .quad 0xbe6038db2539e54e - .quad 0xbfb960ca00000000 - .quad 0xbe6a3576f0eb47ea - .quad 0xbfb92f5b00000000 - .quad 0xbe5ca16578e782d8 - .quad 0xbfb8fdf000000000 - .quad 0xbe6571dd058c9404 - .quad 0xbfb8cc8e00000000 - .quad 0xbe4e8172926b3912 - .quad 0xbfb89b3400000000 - .quad 0xbe458eb8a49a1ed9 - .quad 0xbfb869de00000000 - .quad 0xbe67736434037b3e - .quad 0xbfb8388d00000000 - .quad 0xbe6e2728b7069e85 - .quad 0xbfb8074500000000 - .quad 0xbe61c6bcd5b504de - .quad 0xbfb7d60500000000 - .quad 0xbe62d9f791fd12f7 - .quad 0xbfb7a4ca00000000 - .quad 0xbe53b18b476f88bf - .quad 0xbfb7739300000000 - .quad 0xbe671b2ad71bba2e - .quad 0xbfb7426500000000 - .quad 0xbe6329422bbd68e8 - .quad 0xbfb7113f00000000 - .quad 0xbe6e8b3c2fe4ecae - .quad 0xbfb6e01f00000000 - .quad 0xbe2795edd5ed58e9 - .quad 0xbfb6af0200000000 - .quad 0xbe6c4c07447a13fa - .quad 0xbfb67def00000000 - .quad 0xbe4f2ea58340e81e - .quad 0xbfb64ce400000000 - .quad 0xbe4203398a8ffda4 - .quad 0xbfb61bda00000000 - .quad 0xbe2d4147ad124eaa - .quad 0xbfb5eadc00000000 - .quad 0xbe539c66835b9867 - .quad 0xbfb5b9df00000000 - .quad 0xbe6317f3d15a9860 - .quad 0xbfb588ef00000000 - .quad 0xbe503474104b244e - .quad 0xbfb557ff00000000 - .quad 0xbe6f1dfae0bd2e94 - .quad 0xbfb5271900000000 - .quad 0xbe541889ef09d7c8 - .quad 0xbfb4f63b00000000 - .quad 0xbe52dc76d475d4d1 - .quad 0xbfb4c56200000000 - .quad 0xbe433458770a1735 - .quad 0xbfb4948d00000000 - .quad 0xbe6c8223b5c8b49b - .quad 0xbfb463c200000000 - .quad 0xbe540d91e2302042 - .quad 0xbfb432fb00000000 - .quad 0xbe64b47f064d986f - .quad 0xbfb4023900000000 - .quad 0xbe6ce4d526c81e43 - .quad 0xbfb3d18000000000 - .quad 0xbe6c41714a091d46 - .quad 0xbfb3a0d000000000 - .quad 0xbe63540db8c80703 - .quad 0xbfb3702100000000 - .quad 0xbe5f8cf1a845a25c - .quad 0xbfb33f7b00000000 - .quad 0xbe430a65c7a2686f - .quad 0xbfb30edd00000000 - .quad 0xbe62d26a7215665c - .quad 0xbfb2de4500000000 - .quad 0xbe1bff57e3bab991 - .quad 0xbfb2adb100000000 - .quad 0xbe5e8adfc156e82d - .quad 0xbfb27d2200000000 - .quad 0xbe6e5d041c5f1a05 - .quad 0xbfb24c9d00000000 - .quad 0xbe50a21095df344c - .quad 0xbfb21c2000000000 - .quad 0xbe5b57c218054e22 - .quad 0xbfb1eba400000000 - .quad 0xbe6b1806f4988888 - .quad 0xbfb1bb3200000000 - .quad 0xbe430029dc60a716 - .quad 0xbfb18ac400000000 - .quad 0xbe611e8ed29c4bea - .quad 0xbfb15a5f00000000 - .quad 0xbe6aae4e1e1cd7e9 - .quad 0xbfb12a0000000000 - .quad 0xbe4f2855166a96d5 - .quad 0xbfb0f9a500000000 - .quad 0xbe68ccc743692647 - .quad 0xbfb0c95400000000 - .quad 0xbe50c2b8ff93eea0 - .quad 0xbfb0990400000000 - .quad 0xbe329700306849f4 - .quad 0xbfb068c000000000 - .quad 0xbe661c7597dfa0cf - .quad 0xbfb0387e00000000 - .quad 0xbe64f950c199fdd6 - .quad 0xbfb0084500000000 - .quad 0xbe6434bda55a11e5 - .quad 0xbfafb02300000000 - .quad 0xbe537435dba745c1 - .quad 0xbfaf4fc600000000 - .quad 0xbe4793720209c664 - .quad 0xbfaeef7b00000000 - .quad 0xbe3e845c9d0173b4 - .quad 0xbfae8f3a00000000 - .quad 0xbe527188bd53b8bf - .quad 0xbfae2f0400000000 - .quad 0xbe49e4e1f2d00cb9 - .quad 0xbfadced800000000 - .quad 0xbe57db5b6132809a - .quad 0xbfad6ebf00000000 - .quad 0xbe43c7fbabdf571f - .quad 0xbfad0eb000000000 - .quad 0xbe4c086873f1531f - .quad 0xbfacaeac00000000 - .quad 0xbe33d01264312288 - .quad 0xbfac4eb200000000 - .quad 0xbe4ed73a1b11c287 - .quad 0xbfabeecb00000000 - .quad 0xbe328d5761ea48d2 - .quad 0xbfab8eee00000000 - .quad 0xbe4e2759579ac08a - .quad 0xbfab2f1c00000000 - .quad 0xbe4eea927b8de26e - .quad 0xbfaacf5500000000 - .quad 0xbe3a03ec4341a4ac - .quad 0xbfaa6f9800000000 - .quad 0xbe54efb9656181bf - .quad 0xbfaa0fee00000000 - .quad 0xbe529aa680456564 - .quad 0xbfa9b04f00000000 - .quad 0xbe42b60fbbf05015 - .quad 0xbfa950ba00000000 - .quad 0xbe59ea4d388956ac - .quad 0xbfa8f13800000000 - .quad 0xbe5c820f8ddadcd6 - .quad 0xbfa891ba00000000 - .quad 0xbe27e05a334c58f7 - .quad 0xbfa8324d00000000 - .quad 0xbe5d3229b2ba0376 - .quad 0xbfa7d2ec00000000 - .quad 0xbe545e77c08ed94c - .quad 0xbfa7739600000000 - .quad 0xbe427656b6f95551 - .quad 0xbfa7144a00000000 - .quad 0xbe5c82a193d30405 - .quad 0xbfa6b50a00000000 - .quad 0xbe4ddebd1f3c284a - .quad 0xbfa655dc00000000 - .quad 0xbe599c108199cfd8 - .quad 0xbfa5f6ba00000000 - .quad 0xbe348e1f3828f0d8 - .quad 0xbfa597a200000000 - .quad 0xbe5240beb8df56ca - .quad 0xbfa5389600000000 - .quad 0xbe1aed65370b9099 - .quad 0xbfa4d99400000000 - .quad 0xbe5429166d091c5d - .quad 0xbfa47a9e00000000 - .quad 0xbe44d5db06b75692 - .quad 0xbfa41bba00000000 - .quad 0xbe5e4ff2e670387a - .quad 0xbfa3bcda00000000 - .quad 0xbe5e73df6e675ed2 - .quad 0xbfa35e0d00000000 - .quad 0xbe5df2994af6bbf0 - .quad 0xbfa2ff4c00000000 - .quad 0xbe31a09f65bfdef1 - .quad 0xbfa2a09500000000 - .quad 0xbe5290bafe6a7061 - .quad 0xbfa241ea00000000 - .quad 0xbe425151c43b4181 - .quad 0xbfa1e34a00000000 - .quad 0xbe41d8dbc0646431 - .quad 0xbfa184b500000000 - .quad 0xbe5298ac777c8c9d - .quad 0xbfa1263400000000 - .quad 0xbe10a2f9d7e8035a - .quad 0xbfa0c7b600000000 - .quad 0xbe0bbc4c660fd088 - .quad 0xbfa0694b00000000 - .quad 0xbe3cc374b7950d13 - .quad 0xbfa00aeb00000000 - .quad 0xbe5aa058acdc0265 - .quad 0xbf9f592000000000 - .quad 0xbe149b4d7e5df2c0 - .quad 0xbf9e9c8f00000000 - .quad 0xbe10a7a7e78bdba3 - .quad 0xbf9de01500000000 - .quad 0xbde02a1d978db2f1 - .quad 0xbf9d23b100000000 - .quad 0xbe4e9227a287068e - .quad 0xbf9c676500000000 - .quad 0xbe4e8561096793f8 - .quad 0xbf9bab3100000000 - .quad 0xbe0968e122179f22 - .quad 0xbf9aef1300000000 - .quad 0xbe328465c0dba24f - .quad 0xbf9a330c00000000 - .quad 0xbe47051e31e0d70b - .quad 0xbf99771d00000000 - .quad 0xbe38b8d275ff3a9a - .quad 0xbf98bb5500000000 - .quad 0xbe122bdb89883925 - .quad 0xbf97ff9400000000 - .quad 0xbe36fbf85d50fecb - .quad 0xbf9743eb00000000 - .quad 0xbdf87cba8eccac44 - .quad 0xbf96886800000000 - .quad 0xbe4bd57d800c1470 - .quad 0xbf95ccee00000000 - .quad 0xbe3be2933856d62e - .quad 0xbf95118b00000000 - .quad 0xbe409620e0f1be7b - .quad 0xbf94564f00000000 - .quad 0xbe4e4325cf62b811 - .quad 0xbf939b1c00000000 - .quad 0xbe2adee9af6a25c0 - .quad 0xbf92e00000000000 - .quad 0xbe20ce46d28f63c9 - .quad 0xbf92250b00000000 - .quad 0xbe41f6aa9fb6fe0b - .quad 0xbf916a1e00000000 - .quad 0xbe4e41409957601b - .quad 0xbf90af5900000000 - .quad 0xbe4e53e5a63658ad - .quad 0xbf8fe93900000000 - .quad 0xbe3eded24d629d7d - .quad 0xbf8e73ef00000000 - .quad 0xbe3a29d2ea7d362b - .quad 0xbf8cfef500000000 - .quad 0xbe1e2e79fe4aa765 - .quad 0xbf8b8a0a00000000 - .quad 0xbe3e8785027a216b - .quad 0xbf8a155000000000 - .quad 0xbe37a174d5a8bded - .quad 0xbf88a0c600000000 - .quad 0xbe35dde88f39d7ce - .quad 0xbf872c6c00000000 - .quad 0xbe3c41ea3f44a785 - .quad 0xbf85b86300000000 - .quad 0xbe194c69ffd7f42d - .quad 0xbf84446a00000000 - .quad 0xbe1a5e4e0d24af39 - .quad 0xbf82d0a100000000 - .quad 0xbe381611eb6c3818 - .quad 0xbf815d0900000000 - .quad 0xbe3dd5da9cc5f987 - .quad 0xbf7fd34500000000 - .quad 0xbe25bd80e0b0590e - .quad 0xbf7cec9900000000 - .quad 0xbe1ce47bb0eea510 - .quad 0xbf7a068e00000000 - .quad 0xbe26dbe100877575 - .quad 0xbf7720e600000000 - .quad 0xbd9aa4f614b9e1ac - .quad 0xbf743b5f00000000 - .quad 0xbe271a96b1eb7842 - .quad 0xbf71567b00000000 - .quad 0xbe2318f60005710d - .quad 0xbf6ce37400000000 - .quad 0xbe0c7a4e122b1762 - .quad 0xbf671b3600000000 - .quad 0xbe1c85d1e3d214d1 - .quad 0xbf61533f00000000 - .quad 0xbe0e793b61aa1f54 - .quad 0xbf57181c00000000 - .quad 0xbe01296a4555af78 - .quad 0xbf47168e00000000 - .quad 0xbdf30d6f34ebfa1c - .rept 2 - .quad 0x0000000000000000 - .endr - .rept 48 - .byte 0 - .endr - -/* Exp(2) lookup table for exp part (non HSW) */ -.if .-__svml_dpow_data != _exp2_tbl -.err -.endif - .quad 0x3ff0000000000000 - .quad 0x0000000000000000 - .quad 0x3ff0163da9fb3335 - .quad 0x3c9b61299ab8cdb7 - .quad 0x3ff02c9a3e778061 - .quad 0xbc719083535b085d - .quad 0x3ff04315e86e7f85 - .quad 0xbc90a31c1977c96e - .quad 0x3ff059b0d3158574 - .quad 0x3c8d73e2a475b465 - .quad 0x3ff0706b29ddf6de - .quad 0xbc8c91dfe2b13c26 - .quad 0x3ff0874518759bc8 - .quad 0x3c6186be4bb284ff - .quad 0x3ff09e3ecac6f383 - .quad 0x3c91487818316135 - .quad 0x3ff0b5586cf9890f - .quad 0x3c98a62e4adc610a - .quad 0x3ff0cc922b7247f7 - .quad 0x3c901edc16e24f71 - .quad 0x3ff0e3ec32d3d1a2 - .quad 0x3c403a1727c57b52 - .quad 0x3ff0fb66affed31b - .quad 0xbc6b9bedc44ebd7b - .quad 0x3ff11301d0125b51 - .quad 0xbc96c51039449b39 - .quad 0x3ff12abdc06c31cc - .quad 0xbc51b514b36ca5c7 - .quad 0x3ff1429aaea92de0 - .quad 0xbc932fbf9af1369e - .quad 0x3ff15a98c8a58e51 - .quad 0x3c82406ab9eeab09 - .quad 0x3ff172b83c7d517b - .quad 0xbc819041b9d78a75 - .quad 0x3ff18af9388c8dea - .quad 0xbc911023d1970f6b - .quad 0x3ff1a35beb6fcb75 - .quad 0x3c8e5b4c7b4968e4 - .quad 0x3ff1bbe084045cd4 - .quad 0xbc995386352ef607 - .quad 0x3ff1d4873168b9aa - .quad 0x3c9e016e00a2643c - .quad 0x3ff1ed5022fcd91d - .quad 0xbc91df98027bb78b - .quad 0x3ff2063b88628cd6 - .quad 0x3c8dc775814a8494 - .quad 0x3ff21f49917ddc96 - .quad 0x3c82a97e9494a5ed - .quad 0x3ff2387a6e756238 - .quad 0x3c99b07eb6c70572 - .quad 0x3ff251ce4fb2a63f - .quad 0x3c8ac155bef4f4a4 - .quad 0x3ff26b4565e27cdd - .quad 0x3c82bd339940e9d9 - .quad 0x3ff284dfe1f56381 - .quad 0xbc9a4c3a8c3f0d7d - .quad 0x3ff29e9df51fdee1 - .quad 0x3c8612e8afad1255 - .quad 0x3ff2b87fd0dad990 - .quad 0xbc410adcd6381aa3 - .quad 0x3ff2d285a6e4030b - .quad 0x3c90024754db41d4 - .quad 0x3ff2ecafa93e2f56 - .quad 0x3c71ca0f45d52383 - .quad 0x3ff306fe0a31b715 - .quad 0x3c86f46ad23182e4 - .quad 0x3ff32170fc4cd831 - .quad 0x3c8a9ce78e18047c - .quad 0x3ff33c08b26416ff - .quad 0x3c932721843659a5 - .quad 0x3ff356c55f929ff1 - .quad 0xbc8b5cee5c4e4628 - .quad 0x3ff371a7373aa9cb - .quad 0xbc963aeabf42eae1 - .quad 0x3ff38cae6d05d866 - .quad 0xbc9e958d3c9904bc - .quad 0x3ff3a7db34e59ff7 - .quad 0xbc75e436d661f5e2 - .quad 0x3ff3c32dc313a8e5 - .quad 0xbc9efff8375d29c3 - .quad 0x3ff3dea64c123422 - .quad 0x3c8ada0911f09ebb - .quad 0x3ff3fa4504ac801c - .quad 0xbc97d023f956f9f3 - .quad 0x3ff4160a21f72e2a - .quad 0xbc5ef3691c309278 - .quad 0x3ff431f5d950a897 - .quad 0xbc81c7dde35f7998 - .quad 0x3ff44e086061892d - .quad 0x3c489b7a04ef80cf - .quad 0x3ff46a41ed1d0057 - .quad 0x3c9c944bd1648a76 - .quad 0x3ff486a2b5c13cd0 - .quad 0x3c73c1a3b69062f0 - .quad 0x3ff4a32af0d7d3de - .quad 0x3c99cb62f3d1be56 - .quad 0x3ff4bfdad5362a27 - .quad 0x3c7d4397afec42e2 - .quad 0x3ff4dcb299fddd0d - .quad 0x3c98ecdbbc6a7833 - .quad 0x3ff4f9b2769d2ca7 - .quad 0xbc94b309d25957e3 - .quad 0x3ff516daa2cf6642 - .quad 0xbc8f768569bd93ee - .quad 0x3ff5342b569d4f82 - .quad 0xbc807abe1db13cac - .quad 0x3ff551a4ca5d920f - .quad 0xbc8d689cefede59a - .quad 0x3ff56f4736b527da - .quad 0x3c99bb2c011d93ac - .quad 0x3ff58d12d497c7fd - .quad 0x3c8295e15b9a1de7 - .quad 0x3ff5ab07dd485429 - .quad 0x3c96324c054647ac - .quad 0x3ff5c9268a5946b7 - .quad 0x3c3c4b1b816986a2 - .quad 0x3ff5e76f15ad2148 - .quad 0x3c9ba6f93080e65d - .quad 0x3ff605e1b976dc09 - .quad 0xbc93e2429b56de47 - .quad 0x3ff6247eb03a5585 - .quad 0xbc9383c17e40b496 - .quad 0x3ff6434634ccc320 - .quad 0xbc8c483c759d8932 - .quad 0x3ff6623882552225 - .quad 0xbc9bb60987591c33 - .quad 0x3ff68155d44ca973 - .quad 0x3c6038ae44f73e64 - .quad 0x3ff6a09e667f3bcd - .quad 0xbc9bdd3413b26455 - .quad 0x3ff6c012750bdabf - .quad 0xbc72895667ff0b0c - .quad 0x3ff6dfb23c651a2f - .quad 0xbc6bbe3a683c88aa - .quad 0x3ff6ff7df9519484 - .quad 0xbc883c0f25860ef6 - .quad 0x3ff71f75e8ec5f74 - .quad 0xbc816e4786887a99 - .quad 0x3ff73f9a48a58174 - .quad 0xbc90a8d96c65d53b - .quad 0x3ff75feb564267c9 - .quad 0xbc90245957316dd3 - .quad 0x3ff780694fde5d3f - .quad 0x3c9866b80a02162c - .quad 0x3ff7a11473eb0187 - .quad 0xbc841577ee04992f - .quad 0x3ff7c1ed0130c132 - .quad 0x3c9f124cd1164dd5 - .quad 0x3ff7e2f336cf4e62 - .quad 0x3c705d02ba15797e - .quad 0x3ff80427543e1a12 - .quad 0xbc927c86626d972a - .quad 0x3ff82589994cce13 - .quad 0xbc9d4c1dd41532d7 - .quad 0x3ff8471a4623c7ad - .quad 0xbc88d684a341cdfb - .quad 0x3ff868d99b4492ed - .quad 0xbc9fc6f89bd4f6ba - .quad 0x3ff88ac7d98a6699 - .quad 0x3c9994c2f37cb53a - .quad 0x3ff8ace5422aa0db - .quad 0x3c96e9f156864b26 - .quad 0x3ff8cf3216b5448c - .quad 0xbc70d55e32e9e3aa - .quad 0x3ff8f1ae99157736 - .quad 0x3c85cc13a2e3976c - .quad 0x3ff9145b0b91ffc6 - .quad 0xbc9dd6792e582523 - .quad 0x3ff93737b0cdc5e5 - .quad 0xbc675fc781b57ebb - .quad 0x3ff95a44cbc8520f - .quad 0xbc764b7c96a5f039 - .quad 0x3ff97d829fde4e50 - .quad 0xbc9d185b7c1b85d0 - .quad 0x3ff9a0f170ca07ba - .quad 0xbc9173bd91cee632 - .quad 0x3ff9c49182a3f090 - .quad 0x3c7c7c46b071f2be - .quad 0x3ff9e86319e32323 - .quad 0x3c7824ca78e64c6e - .quad 0x3ffa0c667b5de565 - .quad 0xbc9359495d1cd532 - .quad 0x3ffa309bec4a2d33 - .quad 0x3c96305c7ddc36ab - .quad 0x3ffa5503b23e255d - .quad 0xbc9d2f6edb8d41e1 - .quad 0x3ffa799e1330b358 - .quad 0x3c9bcb7ecac563c6 - .quad 0x3ffa9e6b5579fdbf - .quad 0x3c90fac90ef7fd31 - .quad 0x3ffac36bbfd3f37a - .quad 0xbc8f9234cae76cd0 - .quad 0x3ffae89f995ad3ad - .quad 0x3c97a1cd345dcc81 - .quad 0x3ffb0e07298db666 - .quad 0xbc9bdef54c80e424 - .quad 0x3ffb33a2b84f15fb - .quad 0xbc62805e3084d707 - .quad 0x3ffb59728de5593a - .quad 0xbc9c71dfbbba6de3 - .quad 0x3ffb7f76f2fb5e47 - .quad 0xbc75584f7e54ac3a - .quad 0x3ffba5b030a1064a - .quad 0xbc9efcd30e54292e - .quad 0x3ffbcc1e904bc1d2 - .quad 0x3c823dd07a2d9e84 - .quad 0x3ffbf2c25bd71e09 - .quad 0xbc9efdca3f6b9c72 - .quad 0x3ffc199bdd85529c - .quad 0x3c811065895048dd - .quad 0x3ffc40ab5fffd07a - .quad 0x3c9b4537e083c60a - .quad 0x3ffc67f12e57d14b - .quad 0x3c92884dff483cac - .quad 0x3ffc8f6d9406e7b5 - .quad 0x3c71acbc48805c44 - .quad 0x3ffcb720dcef9069 - .quad 0x3c7503cbd1e949db - .quad 0x3ffcdf0b555dc3fa - .quad 0xbc8dd83b53829d72 - .quad 0x3ffd072d4a07897c - .quad 0xbc9cbc3743797a9c - .quad 0x3ffd2f87080d89f2 - .quad 0xbc9d487b719d8577 - .quad 0x3ffd5818dcfba487 - .quad 0x3c82ed02d75b3706 - .quad 0x3ffd80e316c98398 - .quad 0xbc911ec18beddfe8 - .quad 0x3ffda9e603db3285 - .quad 0x3c9c2300696db532 - .quad 0x3ffdd321f301b460 - .quad 0x3c92da5778f018c2 - .quad 0x3ffdfc97337b9b5f - .quad 0xbc91a5cd4f184b5b - .quad 0x3ffe264614f5a129 - .quad 0xbc97b627817a1496 - .quad 0x3ffe502ee78b3ff6 - .quad 0x3c839e8980a9cc8f - .quad 0x3ffe7a51fbc74c83 - .quad 0x3c92d522ca0c8de1 - .quad 0x3ffea4afa2a490da - .quad 0xbc9e9c23179c2893 - .quad 0x3ffecf482d8e67f1 - .quad 0xbc9c93f3b411ad8c - .quad 0x3ffefa1bee615a27 - .quad 0x3c9dc7f486a4b6b0 - .quad 0x3fff252b376bba97 - .quad 0x3c93a1a5bf0d8e43 - .quad 0x3fff50765b6e4540 - .quad 0x3c99d3e12dd8a18a - .quad 0x3fff7bfdad9cbe14 - .quad 0xbc9dbb12d0063509 - .quad 0x3fffa7c1819e90d8 - .quad 0x3c874853f3a5931e - .quad 0x3fffd3c22b8f71f1 - .quad 0x3c62eb74966579e7 - -/* log2 polynomial coefficients: - * clv7 */ -double_vector _clv_1 0x3f903950cf599c56 - -/* clv6 */ -double_vector _clv_2 0xbf9b4ea0e9419f52 - -/* clv5 */ -double_vector _clv_3 0x3fa7a334ddfc9f86 - -/* clv4 */ -double_vector _clv_4 0xbfb550472a8bb463 - -/* clv3 */ -double_vector _clv_5 0x3fc47fd462b3b816 - -/* clv2 */ -double_vector _clv_6 0xbfd62e4346694107 - -/* clv1 */ -double_vector _clv_7 0x3e79c3a6966457ee - -/* exponential polynomial coefficients: - * cev5 */ -double_vector _cev_1 0x3f55d87fe78a6731 - -/* cev4 */ -double_vector _cev_2 0x3f83b2ab6fba4e77 - -/* cev3 */ -double_vector _cev_3 0x3fac6b08d704a0bf - -/* cev2 */ -double_vector _cev_4 0x3fcebfbdff82c58e - -/* cev1 */ -double_vector _cev_5 0x3fe62e42fefa39ef - -/* General purpose constants: - * iMantissaMask */ -double_vector _iMantissaMask 0x000fffffffffffff - -/* i3fe7fe0000000000 */ -double_vector _i3fe7fe0000000000 0x3fe7fe0000000000 - -/* dbOne */ -double_vector _dbOne 0x3ff0000000000000 - -/* iffffffff00000000 */ -double_vector _iffffffff00000000 0xffffffff00000000 - -/* db2p20_2p19 = 2^20+2^19 */ -double_vector _db2p20_2p19 0x4138000000000000 - -/* iHighMask */ -double_vector _iHighMask 0xfffffffff8000000 - -/* LHN = -log2(e) truncated to 22 bits */ -double_vector _LHN 0xbff7154740000000 - -/* ifff0000000000000 */ -double_vector _ifff0000000000000 0xfff0000000000000 - -/* db2p45_2p44 */ -double_vector _db2p45_2p44 0x42c8000000000000 - -/* NEG_INF */ -double_vector _NEG_INF 0xfff0000000000000 - -/* NEG_ZERO */ -double_vector _NEG_ZERO 0x8000000000000000 - -/* 2pow52 */ -double_vector _d2pow52 0x4330000000000000 - -/* 1div2pow111 */ -double_vector _d1div2pow111 0x3900000000000000 - -/* HIDELTA */ -float_vector _HIDELTA 0x00100000 - -/* LORANGE */ -float_vector _LORANGE 0x00200000 - -/* ABSMASK */ -float_vector _ABSMASK 0x7fffffff - -/* INF */ -float_vector _INF 0x7f800000 - -/* DOMAINRANGE */ -float_vector _DOMAINRANGE 0x408f3fff - -/* iIndexMask */ -float_vector _iIndexMask 0x000ffe00 - -/* iIndexAdd */ -float_vector _iIndexAdd 0x00000200 - -/* i3fe7fe00 */ -float_vector _i3fe7fe00 0x3fe7fe00 - -/* i2p20_2p19 */ -float_vector _i2p20_2p19 0x41380000 - -/* iOne */ -float_vector _iOne 0x3ff00000 - -/* jIndexMask */ -float_vector _jIndexMask 0x0000007f - .type __svml_dpow_data,@object - .size __svml_dpow_data,.-__svml_dpow_data diff --git a/sysdeps/x86_64/fpu/svml_d_pow_data.h b/sysdeps/x86_64/fpu/svml_d_pow_data.h deleted file mode 100644 index ce90d8546b..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_pow_data.h +++ /dev/null @@ -1,104 +0,0 @@ -/* Offsets for data table for function pow. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef D_POW_DATA_H -#define D_POW_DATA_H - -#define _hsw_log2_table 0 -#define _hsw_dTe 8256 -#define _hsw_dMantMask 10304 -#define _hsw_dOne 10368 -#define _hsw_dCvtMask 10432 -#define _hsw_dMinNorm 10496 -#define _hsw_dMaxNorm 10560 -#define _hsw_lRndBit 10624 -#define _hsw_lRndMask 10688 -#define _hsw_dc6 10752 -#define _hsw_dc5 10816 -#define _hsw_dc4 10880 -#define _hsw_dc3 10944 -#define _hsw_dc1 11008 -#define _hsw_dc1h 11072 -#define _hsw_dc2 11136 -#define _hsw_dAbsMask 11200 -#define _hsw_dDomainRange 11264 -#define _hsw_dShifter 11328 -#define _hsw_dIndexMask 11392 -#define _hsw_dce4 11456 -#define _hsw_dce3 11520 -#define _hsw_dce2 11584 -#define _hsw_dce1 11648 -#define _rcp_t1 11712 -#define _log2_t1 19968 -#define _exp2_tbl 36416 -#define _clv_1 38464 -#define _clv_2 38528 -#define _clv_3 38592 -#define _clv_4 38656 -#define _clv_5 38720 -#define _clv_6 38784 -#define _clv_7 38848 -#define _cev_1 38912 -#define _cev_2 38976 -#define _cev_3 39040 -#define _cev_4 39104 -#define _cev_5 39168 -#define _iMantissaMask 39232 -#define _i3fe7fe0000000000 39296 -#define _dbOne 39360 -#define _iffffffff00000000 39424 -#define _db2p20_2p19 39488 -#define _iHighMask 39552 -#define _LHN 39616 -#define _ifff0000000000000 39680 -#define _db2p45_2p44 39744 -#define _NEG_INF 39808 -#define _NEG_ZERO 39872 -#define _d2pow52 39936 -#define _d1div2pow111 40000 -#define _HIDELTA 40064 -#define _LORANGE 40128 -#define _ABSMASK 40192 -#define _INF 40256 -#define _DOMAINRANGE 40320 -#define _iIndexMask 40384 -#define _iIndexAdd 40448 -#define _i3fe7fe00 40512 -#define _i2p20_2p19 40576 -#define _iOne 40640 -#define _jIndexMask 40704 - -.macro double_vector offset value -.if .-__svml_dpow_data != \offset -.err -.endif -.rept 8 -.quad \value -.endr -.endm - -.macro float_vector offset value -.if .-__svml_dpow_data != \offset -.err -.endif -.rept 16 -.long \value -.endr -.endm - -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_sin2_core.S b/sysdeps/x86_64/fpu/svml_d_sin2_core.S deleted file mode 100644 index 85990833be..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_sin2_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function sin vectorized with SSE2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVbN2v_sin) -WRAPPER_IMPL_SSE2 sin -END (_ZGVbN2v_sin) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVbN2v_sin) -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_sin4_core.S b/sysdeps/x86_64/fpu/svml_d_sin4_core.S deleted file mode 100644 index 7b9211d8c7..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_sin4_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function sin vectorized with AVX2, wrapper version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVdN4v_sin) -WRAPPER_IMPL_AVX _ZGVbN2v_sin -END (_ZGVdN4v_sin) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVdN4v_sin) -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_sin4_core_avx.S b/sysdeps/x86_64/fpu/svml_d_sin4_core_avx.S deleted file mode 100644 index 3edf88a047..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_sin4_core_avx.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function sin vectorized in AVX ISA as wrapper to SSE4 ISA version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVcN4v_sin) -WRAPPER_IMPL_AVX _ZGVbN2v_sin -END (_ZGVcN4v_sin) diff --git a/sysdeps/x86_64/fpu/svml_d_sin8_core.S b/sysdeps/x86_64/fpu/svml_d_sin8_core.S deleted file mode 100644 index 8e67f3cbbe..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_sin8_core.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function sin vectorized with AVX-512, wrapper to AVX2 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVeN8v_sin) -WRAPPER_IMPL_AVX512 _ZGVdN4v_sin -END (_ZGVeN8v_sin) diff --git a/sysdeps/x86_64/fpu/svml_d_sincos2_core.S b/sysdeps/x86_64/fpu/svml_d_sincos2_core.S deleted file mode 100644 index e8023e8e8e..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_sincos2_core.S +++ /dev/null @@ -1,110 +0,0 @@ -/* Function sincos vectorized with SSE2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVbN2vl8l8_sincos) -WRAPPER_IMPL_SSE2_fFF sincos -END (_ZGVbN2vl8l8_sincos) -libmvec_hidden_def (_ZGVbN2vl8l8_sincos) - -/* SSE2 ISA version as wrapper to scalar (for vector - function declared with #pragma omp declare simd notinbranch). */ -.macro WRAPPER_IMPL_SSE2_fFF_vvv callee -#ifndef __ILP32__ - subq $88, %rsp - cfi_adjust_cfa_offset(88) - movaps %xmm0, 64(%rsp) - lea (%rsp), %rdi - movdqa %xmm1, 32(%rdi) - lea 16(%rsp), %rsi - movdqa %xmm2, 32(%rsi) - call JUMPTARGET(\callee) - movsd 72(%rsp), %xmm0 - lea 8(%rsp), %rdi - lea 24(%rsp), %rsi - call JUMPTARGET(\callee) - movq 32(%rsp), %rdx - movq 48(%rsp), %rsi - movq 40(%rsp), %r8 - movq 56(%rsp), %r10 - movq (%rsp), %rax - movq 16(%rsp), %rcx - movq 8(%rsp), %rdi - movq 24(%rsp), %r9 - movq %rax, (%rdx) - movq %rcx, (%rsi) - movq %rdi, (%r8) - movq %r9, (%r10) - addq $88, %rsp - cfi_adjust_cfa_offset(-88) - ret -#else - pushq %rbp - .cfi_def_cfa_offset 16 - .cfi_offset 6, -16 - pushq %rbx - .cfi_def_cfa_offset 24 - .cfi_offset 3, -24 - subl $88, %esp - .cfi_def_cfa_offset 112 - leal 64(%rsp), %esi - movaps %xmm1, 32(%esp) - leal 48(%rsp), %edi - movaps %xmm2, 16(%esp) - movq %rsi, %rbp - movq %rdi, %rbx - movaps %xmm0, (%esp) - call JUMPTARGET(\callee) - movupd 8(%esp), %xmm0 - leal 8(%rbp), %esi - leal 8(%rbx), %edi - call JUMPTARGET(\callee) - movdqa 32(%esp), %xmm1 - movsd 48(%esp), %xmm0 - movq %xmm1, %rax - movdqa 16(%esp), %xmm2 - movsd %xmm0, (%eax) - movsd 56(%esp), %xmm0 - pextrd $1, %xmm1, %eax - movsd %xmm0, (%eax) - movsd 64(%esp), %xmm0 - movq %xmm2, %rax - movsd %xmm0, (%eax) - movsd 72(%esp), %xmm0 - pextrd $1, %xmm2, %eax - movsd %xmm0, (%eax) - addl $88, %esp - .cfi_def_cfa_offset 24 - popq %rbx - .cfi_def_cfa_offset 16 - popq %rbp - .cfi_def_cfa_offset 8 - ret -#endif -.endm - -ENTRY (_ZGVbN2vvv_sincos) -WRAPPER_IMPL_SSE2_fFF_vvv sincos -END (_ZGVbN2vvv_sincos) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVbN2vvv_sincos) -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_sincos4_core.S b/sysdeps/x86_64/fpu/svml_d_sincos4_core.S deleted file mode 100644 index 3bcd09b62d..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_sincos4_core.S +++ /dev/null @@ -1,152 +0,0 @@ -/* Function sincos vectorized with AVX2, wrapper version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVdN4vl8l8_sincos) -WRAPPER_IMPL_AVX_fFF _ZGVbN2vl8l8_sincos -END (_ZGVdN4vl8l8_sincos) -libmvec_hidden_def (_ZGVdN4vl8l8_sincos) - -/* AVX2 ISA version as wrapper to SSE ISA version (for vector - function declared with #pragma omp declare simd notinbranch). */ -.macro WRAPPER_IMPL_AVX2_fFF_vvv callee -#ifndef __ILP32__ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-32, %rsp - subq $160, %rsp - vmovupd %ymm0, 128(%rsp) - lea (%rsp), %rdi - vmovdqu %ymm1, 64(%rdi) - vmovdqu %ymm2, 96(%rdi) - lea 32(%rsp), %rsi - vzeroupper - call HIDDEN_JUMPTARGET(\callee) - vmovupd 144(%rsp), %xmm0 - lea 16(%rsp), %rdi - lea 48(%rsp), %rsi - call HIDDEN_JUMPTARGET(\callee) - movq 64(%rsp), %rdx - movq 96(%rsp), %rsi - movq 72(%rsp), %r8 - movq 104(%rsp), %r10 - movq (%rsp), %rax - movq 32(%rsp), %rcx - movq 8(%rsp), %rdi - movq 40(%rsp), %r9 - movq %rax, (%rdx) - movq %rcx, (%rsi) - movq 80(%rsp), %rax - movq 112(%rsp), %rcx - movq %rdi, (%r8) - movq %r9, (%r10) - movq 88(%rsp), %rdi - movq 120(%rsp), %r9 - movq 16(%rsp), %r11 - movq 48(%rsp), %rdx - movq 24(%rsp), %rsi - movq 56(%rsp), %r8 - movq %r11, (%rax) - movq %rdx, (%rcx) - movq %rsi, (%rdi) - movq %r8, (%r9) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -#else - leal 8(%rsp), %r10d - .cfi_def_cfa 10, 0 - andl $-32, %esp - pushq -8(%r10d) - pushq %rbp - .cfi_escape 0x10,0x6,0x2,0x76,0 - movl %esp, %ebp - pushq %r12 - leal -80(%rbp), %esi - pushq %r10 - .cfi_escape 0xf,0x3,0x76,0x70,0x6 - .cfi_escape 0x10,0xc,0x2,0x76,0x78 - leal -112(%rbp), %edi - movq %rsi, %r12 - pushq %rbx - .cfi_escape 0x10,0x3,0x2,0x76,0x68 - movq %rdi, %rbx - subl $152, %esp - vmovaps %xmm1, -128(%ebp) - vmovaps %xmm2, -144(%ebp) - vmovapd %ymm0, -176(%ebp) - vzeroupper - call HIDDEN_JUMPTARGET(\callee) - leal 16(%r12), %esi - vmovapd -160(%ebp), %xmm0 - leal 16(%rbx), %edi - call HIDDEN_JUMPTARGET(\callee) - movq -128(%ebp), %rax - vmovsd -112(%ebp), %xmm0 - vmovdqa -128(%ebp), %xmm5 - vmovdqa -144(%ebp), %xmm1 - vmovsd %xmm0, (%eax) - vmovsd -104(%ebp), %xmm0 - vpextrd $1, %xmm5, %eax - vmovsd %xmm0, (%eax) - movq -120(%ebp), %rax - vmovsd -96(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - vmovsd -88(%ebp), %xmm0 - vpextrd $3, %xmm5, %eax - vmovsd %xmm0, (%eax) - movq -144(%ebp), %rax - vmovsd -80(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - vmovsd -72(%ebp), %xmm0 - vpextrd $1, %xmm1, %eax - vmovsd %xmm0, (%eax) - movq -136(%ebp), %rax - vmovsd -64(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - vmovsd -56(%ebp), %xmm0 - vpextrd $3, %xmm1, %eax - vmovsd %xmm0, (%eax) - addl $152, %esp - popq %rbx - popq %r10 - .cfi_def_cfa 10, 0 - popq %r12 - popq %rbp - leal -8(%r10), %esp - .cfi_def_cfa 7, 8 - ret -#endif -.endm - -ENTRY (_ZGVdN4vvv_sincos) -WRAPPER_IMPL_AVX2_fFF_vvv _ZGVbN2vl8l8_sincos -END (_ZGVdN4vvv_sincos) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVdN4vvv_sincos) -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_sincos4_core_avx.S b/sysdeps/x86_64/fpu/svml_d_sincos4_core_avx.S deleted file mode 100644 index 1164ae7a74..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_sincos4_core_avx.S +++ /dev/null @@ -1,143 +0,0 @@ -/* Function sincos vectorized in AVX ISA as wrapper to SSE4 ISA version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVcN4vl8l8_sincos) -WRAPPER_IMPL_AVX_fFF _ZGVbN2vl8l8_sincos -END (_ZGVcN4vl8l8_sincos) - -/* AVX ISA version as wrapper to SSE ISA version (for vector - function declared with #pragma omp declare simd notinbranch). */ -.macro WRAPPER_IMPL_AVX_fFF_vvv callee -#ifndef __ILP32__ - pushq %rbp - movq %rsp, %rbp - andq $-32, %rsp - subq $160, %rsp - vmovupd %ymm0, 64(%rsp) - lea (%rsp), %rdi - vmovdqu %xmm1, 96(%rdi) - vmovdqu %xmm2, 112(%rdi) - vmovdqu %xmm3, 128(%rdi) - vmovdqu %xmm4, 144(%rdi) - lea 32(%rsp), %rsi - vzeroupper - call HIDDEN_JUMPTARGET(\callee) - vmovdqu 80(%rsp), %xmm0 - lea 16(%rsp), %rdi - lea 48(%rsp), %rsi - call HIDDEN_JUMPTARGET(\callee) - movq 96(%rsp), %rdx - movq 104(%rsp), %rsi - movq 112(%rsp), %r8 - movq 120(%rsp), %r10 - movq (%rsp), %rax - movq 8(%rsp), %rcx - movq 16(%rsp), %rdi - movq 24(%rsp), %r9 - movq %rax, (%rdx) - movq %rcx, (%rsi) - movq 128(%rsp), %rax - movq 136(%rsp), %rcx - movq %rdi, (%r8) - movq %r9, (%r10) - movq 144(%rsp), %rdi - movq 152(%rsp), %r9 - movq 32(%rsp), %r11 - movq 40(%rsp), %rdx - movq 48(%rsp), %rsi - movq 56(%rsp), %r8 - movq %r11, (%rax) - movq %rdx, (%rcx) - movq %rsi, (%rdi) - movq %r8, (%r9) - movq %rbp, %rsp - popq %rbp - ret -#else - leal 8(%rsp), %r10d - .cfi_def_cfa 10, 0 - andl $-32, %esp - pushq -8(%r10d) - pushq %rbp - .cfi_escape 0x10,0x6,0x2,0x76,0 - movl %esp, %ebp - pushq %r12 - leal -80(%rbp), %esi - pushq %r10 - .cfi_escape 0xf,0x3,0x76,0x70,0x6 - .cfi_escape 0x10,0xc,0x2,0x76,0x78 - leal -112(%rbp), %edi - movq %rsi, %r12 - pushq %rbx - .cfi_escape 0x10,0x3,0x2,0x76,0x68 - movq %rdi, %rbx - subl $152, %esp - vmovaps %xmm1, -128(%ebp) - vmovaps %xmm2, -144(%ebp) - vmovapd %ymm0, -176(%ebp) - vzeroupper - call HIDDEN_JUMPTARGET(\callee) - leal 16(%r12), %esi - vmovupd -160(%ebp), %xmm0 - leal 16(%rbx), %edi - call HIDDEN_JUMPTARGET(\callee) - movq -128(%ebp), %rax - vmovsd -112(%ebp), %xmm0 - vmovdqa -128(%ebp), %xmm5 - vmovdqa -144(%ebp), %xmm1 - vmovsd %xmm0, (%eax) - vmovsd -104(%ebp), %xmm0 - vpextrd $1, %xmm5, %eax - vmovsd %xmm0, (%eax) - movq -120(%ebp), %rax - vmovsd -96(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - vmovsd -88(%ebp), %xmm0 - vpextrd $3, %xmm5, %eax - vmovsd %xmm0, (%eax) - movq -144(%ebp), %rax - vmovsd -80(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - vmovsd -72(%ebp), %xmm0 - vpextrd $1, %xmm1, %eax - vmovsd %xmm0, (%eax) - movq -136(%ebp), %rax - vmovsd -64(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - vmovsd -56(%ebp), %xmm0 - vpextrd $3, %xmm1, %eax - vmovsd %xmm0, (%eax) - addl $152, %esp - popq %rbx - popq %r10 - .cfi_def_cfa 10, 0 - popq %r12 - popq %rbp - leal -8(%r10), %esp - .cfi_def_cfa 7, 8 - ret -#endif -.endm - -ENTRY (_ZGVcN4vvv_sincos) -WRAPPER_IMPL_AVX_fFF_vvv _ZGVbN2vl8l8_sincos -END (_ZGVcN4vvv_sincos) diff --git a/sysdeps/x86_64/fpu/svml_d_sincos8_core.S b/sysdeps/x86_64/fpu/svml_d_sincos8_core.S deleted file mode 100644 index c104539821..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_sincos8_core.S +++ /dev/null @@ -1,224 +0,0 @@ -/* Function sincos vectorized with AVX-512. Wrapper to AVX2 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_d_wrapper_impl.h" - - .text -ENTRY (_ZGVeN8vl8l8_sincos) -WRAPPER_IMPL_AVX512_fFF _ZGVdN4vl8l8_sincos -END (_ZGVeN8vl8l8_sincos) - -/* AVX512 ISA version as wrapper to AVX2 ISA version (for vector - function declared with #pragma omp declare simd notinbranch). */ -.macro WRAPPER_IMPL_AVX512_fFF_vvv callee -#ifndef __ILP32__ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $320, %rsp - /* Encoding for vmovups %zmm0, 256(%rsp). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x44 - .byte 0x24 - .byte 0x04 - lea (%rsp), %rdi - /* Encoding for vmovups %zmm1, 128(%rdi). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x4f - .byte 0x02 - /* Encoding for vmovups %zmm2, 192(%rdi). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x57 - .byte 0x03 - lea 64(%rsp), %rsi - call HIDDEN_JUMPTARGET(\callee) - vmovdqu 288(%rsp), %ymm0 - lea 32(%rsp), %rdi - lea 96(%rsp), %rsi - call HIDDEN_JUMPTARGET(\callee) - movq 128(%rsp), %rdx - movq 192(%rsp), %rsi - movq 136(%rsp), %r8 - movq 200(%rsp), %r10 - movq (%rsp), %rax - movq 64(%rsp), %rcx - movq 8(%rsp), %rdi - movq 72(%rsp), %r9 - movq %rax, (%rdx) - movq %rcx, (%rsi) - movq 144(%rsp), %rax - movq 208(%rsp), %rcx - movq %rdi, (%r8) - movq %r9, (%r10) - movq 152(%rsp), %rdi - movq 216(%rsp), %r9 - movq 16(%rsp), %r11 - movq 80(%rsp), %rdx - movq 24(%rsp), %rsi - movq 88(%rsp), %r8 - movq %r11, (%rax) - movq %rdx, (%rcx) - movq 160(%rsp), %r11 - movq 224(%rsp), %rdx - movq %rsi, (%rdi) - movq %r8, (%r9) - movq 168(%rsp), %rsi - movq 232(%rsp), %r8 - movq 32(%rsp), %r10 - movq 96(%rsp), %rax - movq 40(%rsp), %rcx - movq 104(%rsp), %rdi - movq %r10, (%r11) - movq %rax, (%rdx) - movq 176(%rsp), %r10 - movq 240(%rsp), %rax - movq %rcx, (%rsi) - movq %rdi, (%r8) - movq 184(%rsp), %rcx - movq 248(%rsp), %rdi - movq 48(%rsp), %r9 - movq 112(%rsp), %r11 - movq 56(%rsp), %rdx - movq 120(%rsp), %rsi - movq %r9, (%r10) - movq %r11, (%rax) - movq %rdx, (%rcx) - movq %rsi, (%rdi) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -#else - leal 8(%rsp), %r10d - .cfi_def_cfa 10, 0 - andl $-64, %esp - pushq -8(%r10d) - pushq %rbp - .cfi_escape 0x10,0x6,0x2,0x76,0 - movl %esp, %ebp - pushq %r12 - leal -112(%rbp), %esi - pushq %r10 - .cfi_escape 0xf,0x3,0x76,0x70,0x6 - .cfi_escape 0x10,0xc,0x2,0x76,0x78 - leal -176(%rbp), %edi - movq %rsi, %r12 - pushq %rbx - .cfi_escape 0x10,0x3,0x2,0x76,0x68 - movq %rdi, %rbx - subl $280, %esp - vmovdqa %ymm1, -208(%ebp) - vmovdqa %ymm2, -240(%ebp) - /* Encoding for vmovapd %zmm0, -304(%ebp). */ - .byte 0x67 - .byte 0x62 - .byte 0xf1 - .byte 0xfd - .byte 0x48 - .byte 0x29 - .byte 0x85 - .byte 0xd0 - .byte 0xfe - .byte 0xff - .byte 0xff - call HIDDEN_JUMPTARGET(\callee) - leal 32(%r12), %esi - vmovupd -272(%ebp), %ymm0 - leal 32(%rbx), %edi - call HIDDEN_JUMPTARGET(\callee) - movl -208(%ebp), %eax - vmovsd -176(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -204(%ebp), %eax - vmovsd -168(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -200(%ebp), %eax - vmovsd -160(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -196(%ebp), %eax - vmovsd -152(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -192(%ebp), %eax - vmovsd -144(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -188(%ebp), %eax - vmovsd -136(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -184(%ebp), %eax - vmovsd -128(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -180(%ebp), %eax - vmovsd -120(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -240(%ebp), %eax - vmovsd -112(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -236(%ebp), %eax - vmovsd -104(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -232(%ebp), %eax - vmovsd -96(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -228(%ebp), %eax - vmovsd -88(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -224(%ebp), %eax - vmovsd -80(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -220(%ebp), %eax - vmovsd -72(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -216(%ebp), %eax - vmovsd -64(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - movl -212(%ebp), %eax - vmovsd -56(%ebp), %xmm0 - vmovsd %xmm0, (%eax) - addl $280, %esp - popq %rbx - popq %r10 - .cfi_def_cfa 10, 0 - popq %r12 - popq %rbp - leal -8(%r10), %esp - .cfi_def_cfa 7, 8 - ret -#endif -.endm - -ENTRY (_ZGVeN8vvv_sincos) -WRAPPER_IMPL_AVX512_fFF_vvv _ZGVdN4vl8l8_sincos -END (_ZGVeN8vvv_sincos) diff --git a/sysdeps/x86_64/fpu/svml_d_trig_data.S b/sysdeps/x86_64/fpu/svml_d_trig_data.S deleted file mode 100644 index f7cf6c0a08..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_trig_data.S +++ /dev/null @@ -1,130 +0,0 @@ -/* Data for vectorized sin, cos, sincos. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "svml_d_trig_data.h" - - .section .rodata, "a" - .align 64 - -/* Data table for vector implementations. - The table may contain polynomial, reduction, lookup - coefficients and other constants obtained through different - methods of research and experimental work. - */ - .globl __svml_d_trig_data -__svml_d_trig_data: - -/* General purpose constants: - absolute value mask - */ -double_vector __dAbsMask 0x7fffffffffffffff - -/* working range threshold */ -double_vector __dRangeVal 0x4160000000000000 - -/* working range threshold */ -double_vector __dRangeVal_sin 0x4170000000000000 - -/* PI/2 */ -double_vector __dHalfPI 0x3ff921fb54442d18 - -/* 1/PI */ -double_vector __dInvPI 0x3fd45f306dc9c883 - -/* right-shifter constant */ -double_vector __dRShifter 0x4338000000000000 - -/* 0.0 */ -double_vector __dZero 0x0000000000000000 - -/* -0.0 */ -double_vector __lNZero 0x8000000000000000 - -/* 0.5 */ -double_vector __dOneHalf 0x3fe0000000000000 - -/* Range reduction PI-based constants: - PI high part - */ -double_vector __dPI1 0x400921fb40000000 - -/* PI mid part 1 */ -double_vector __dPI2 0x3e84442d00000000 - -/* PI mid part 2 */ -double_vector __dPI3 0x3d08469880000000 - -/* PI low part */ -double_vector __dPI4 0x3b88cc51701b839a - -/* Range reduction PI-based constants if FMA available: - PI high part (FMA available) - */ -double_vector __dPI1_FMA 0x400921fb54442d18 - -/* PI mid part (FMA available) */ -double_vector __dPI2_FMA 0x3ca1a62633145c06 - -/* PI low part (FMA available) */ -double_vector __dPI3_FMA 0x395c1cd129024e09 - -/* HalfPI1 */ -double_vector __dHalfPI1 0x3ff921fc00000000 - -/* HalfPI2 */ -double_vector __dHalfPI2 0xbea5777a00000000 - -/* HalfPI3 */ -double_vector __dHalfPI3 0xbd473dcc00000000 - -/* HalfPI4 */ -double_vector __dHalfPI4 0x3bf898cc51701b84 - -/* Polynomial coefficients (relative error 2^(-52.115)): */ -double_vector __dC1 0xbfc55555555554a7 -double_vector __dC2 0x3f8111111110a4a8 -double_vector __dC3 0xbf2a01a019a5b86d -double_vector __dC4 0x3ec71de38030fea0 -double_vector __dC5 0xbe5ae63546002231 -double_vector __dC6 0x3de60e6857a2f220 -double_vector __dC7 0xbd69f0d60811aac8 - -/* Polynomial coefficients (relative error 2^(-52.115)): */ -double_vector __dC1_sin 0xbfc55555555554a8 -double_vector __dC2_sin 0x3f8111111110a573 -double_vector __dC3_sin 0xbf2a01a019a659dd -double_vector __dC4_sin 0x3ec71de3806add1a -double_vector __dC5_sin 0xbe5ae6355aaa4a53 -double_vector __dC6_sin 0x3de60e6bee01d83e -double_vector __dC7_sin 0xbd69f1517e9f65f0 - -/* - Additional constants: - absolute value mask - */ -/* right-shifer for low accuracy version */ -double_vector __dRShifter_la 0x4330000000000000 - -/* right-shifer-1.0 for low accuracy version */ -double_vector __dRShifterm5_la 0x432fffffffffffff - -/* right-shifer with low mask for low accuracy version */ -double_vector __dRXmax_la 0x43300000007ffffe - - .type __svml_d_trig_data,@object - .size __svml_d_trig_data,.-__svml_d_trig_data diff --git a/sysdeps/x86_64/fpu/svml_d_trig_data.h b/sysdeps/x86_64/fpu/svml_d_trig_data.h deleted file mode 100644 index ccdff7edb8..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_trig_data.h +++ /dev/null @@ -1,72 +0,0 @@ -/* Offsets for data table for vectorized sin, cos, sincos. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef D_TRIG_DATA_H -#define D_TRIG_DATA_H - -#define __dAbsMask 0 -#define __dRangeVal 64 -#define __dRangeVal_sin 64*2 -#define __dHalfPI 64*3 -#define __dInvPI 64*4 -#define __dRShifter 64*5 -#define __dZero 64*6 -#define __lNZero 64*7 -#define __dOneHalf 64*8 -#define __dPI1 64*9 -#define __dPI2 64*10 -#define __dPI3 64*11 -#define __dPI4 64*12 -#define __dPI1_FMA 64*13 -#define __dPI2_FMA 64*14 -#define __dPI3_FMA 64*15 -#define __dHalfPI1 64*16 -#define __dHalfPI2 64*17 -#define __dHalfPI3 64*18 -#define __dHalfPI4 64*19 -#define __dC1 64*20 -#define __dC2 64*21 -#define __dC3 64*22 -#define __dC4 64*23 -#define __dC5 64*24 -#define __dC6 64*25 -#define __dC7 64*26 -#define __dC1_sin 64*27 -#define __dC2_sin 64*28 -#define __dC3_sin 64*29 -#define __dC4_sin 64*30 -#define __dC5_sin 64*31 -#define __dC6_sin 64*32 -#define __dC7_sin 64*33 -#define __dRShifter_la 64*34 -#define __dRShifterm5_la 64*35 -#define __dRXmax_la 64*36 -#define __dAbsMask_la __dAbsMask -#define __dInvPI_la __dInvPI -#define __dSignMask __lNZero - -.macro double_vector offset value -.if .-__svml_d_trig_data != \offset -.err -.endif -.rept 8 -.quad \value -.endr -.endm - -#endif diff --git a/sysdeps/x86_64/fpu/svml_d_wrapper_impl.h b/sysdeps/x86_64/fpu/svml_d_wrapper_impl.h deleted file mode 100644 index 625eb6642b..0000000000 --- a/sysdeps/x86_64/fpu/svml_d_wrapper_impl.h +++ /dev/null @@ -1,335 +0,0 @@ -/* Wrapper implementations of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* SSE2 ISA version as wrapper to scalar. */ -.macro WRAPPER_IMPL_SSE2 callee - subq $40, %rsp - cfi_adjust_cfa_offset(40) - movaps %xmm0, (%rsp) - call JUMPTARGET(\callee) - movsd %xmm0, 16(%rsp) - movsd 8(%rsp), %xmm0 - call JUMPTARGET(\callee) - movsd 16(%rsp), %xmm1 - movsd %xmm0, 24(%rsp) - unpcklpd %xmm0, %xmm1 - movaps %xmm1, %xmm0 - addq $40, %rsp - cfi_adjust_cfa_offset(-40) - ret -.endm - -/* 2 argument SSE2 ISA version as wrapper to scalar. */ -.macro WRAPPER_IMPL_SSE2_ff callee - subq $56, %rsp - cfi_adjust_cfa_offset(56) - movaps %xmm0, (%rsp) - movaps %xmm1, 16(%rsp) - call JUMPTARGET(\callee) - movsd %xmm0, 32(%rsp) - movsd 8(%rsp), %xmm0 - movsd 24(%rsp), %xmm1 - call JUMPTARGET(\callee) - movsd 32(%rsp), %xmm1 - movsd %xmm0, 40(%rsp) - unpcklpd %xmm0, %xmm1 - movaps %xmm1, %xmm0 - addq $56, %rsp - cfi_adjust_cfa_offset(-56) - ret -.endm - -/* 3 argument SSE2 ISA version as wrapper to scalar. */ -.macro WRAPPER_IMPL_SSE2_fFF callee - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - pushq %rbx - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbx, 0) - movq %rdi, %rbp - movq %rsi, %rbx - subq $40, %rsp - cfi_adjust_cfa_offset(40) - leaq 16(%rsp), %rsi - leaq 24(%rsp), %rdi - movaps %xmm0, (%rsp) - call JUMPTARGET(\callee) - leaq 16(%rsp), %rsi - leaq 24(%rsp), %rdi - movsd 24(%rsp), %xmm0 - movapd (%rsp), %xmm1 - movsd %xmm0, 0(%rbp) - unpckhpd %xmm1, %xmm1 - movsd 16(%rsp), %xmm0 - movsd %xmm0, (%rbx) - movapd %xmm1, %xmm0 - call JUMPTARGET(\callee) - movsd 24(%rsp), %xmm0 - movsd %xmm0, 8(%rbp) - movsd 16(%rsp), %xmm0 - movsd %xmm0, 8(%rbx) - addq $40, %rsp - cfi_adjust_cfa_offset(-40) - popq %rbx - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbx) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -.endm - -/* AVX/AVX2 ISA version as wrapper to SSE ISA version. */ -.macro WRAPPER_IMPL_AVX callee - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-32, %rsp - subq $32, %rsp - vextractf128 $1, %ymm0, (%rsp) - vzeroupper - call HIDDEN_JUMPTARGET(\callee) - vmovapd %xmm0, 16(%rsp) - vmovaps (%rsp), %xmm0 - call HIDDEN_JUMPTARGET(\callee) - vmovapd %xmm0, %xmm1 - vmovapd 16(%rsp), %xmm0 - vinsertf128 $1, %xmm1, %ymm0, %ymm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -.endm - -/* 2 argument AVX/AVX2 ISA version as wrapper to SSE ISA version. */ -.macro WRAPPER_IMPL_AVX_ff callee - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-32, %rsp - subq $64, %rsp - vextractf128 $1, %ymm0, 16(%rsp) - vextractf128 $1, %ymm1, (%rsp) - vzeroupper - call HIDDEN_JUMPTARGET(\callee) - vmovaps %xmm0, 32(%rsp) - vmovaps 16(%rsp), %xmm0 - vmovaps (%rsp), %xmm1 - call HIDDEN_JUMPTARGET(\callee) - vmovaps %xmm0, %xmm1 - vmovaps 32(%rsp), %xmm0 - vinsertf128 $1, %xmm1, %ymm0, %ymm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -.endm - -/* 3 argument AVX/AVX2 ISA version as wrapper to SSE ISA version. */ -.macro WRAPPER_IMPL_AVX_fFF callee - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-32, %rsp - pushq %r13 - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%r13, 0) - pushq %r14 - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%r14, 0) - subq $48, %rsp - movq %rsi, %r14 - movq %rdi, %r13 - vextractf128 $1, %ymm0, 32(%rsp) - vzeroupper - call HIDDEN_JUMPTARGET(\callee) - vmovaps 32(%rsp), %xmm0 - lea (%rsp), %rdi - lea 16(%rsp), %rsi - call HIDDEN_JUMPTARGET(\callee) - vmovapd (%rsp), %xmm0 - vmovapd 16(%rsp), %xmm1 - vmovapd %xmm0, 16(%r13) - vmovapd %xmm1, 16(%r14) - addq $48, %rsp - popq %r14 - cfi_adjust_cfa_offset (-8) - cfi_restore (%r14) - popq %r13 - cfi_adjust_cfa_offset (-8) - cfi_restore (%r13) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -.endm - -/* AVX512 ISA version as wrapper to AVX2 ISA version. */ -.macro WRAPPER_IMPL_AVX512 callee - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $128, %rsp -/* Below is encoding for vmovups %zmm0, (%rsp). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x04 - .byte 0x24 - vmovupd (%rsp), %ymm0 - call HIDDEN_JUMPTARGET(\callee) - vmovupd %ymm0, 64(%rsp) - vmovupd 32(%rsp), %ymm0 - call HIDDEN_JUMPTARGET(\callee) - vmovupd %ymm0, 96(%rsp) -/* Below is encoding for vmovups 64(%rsp), %zmm0. */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x10 - .byte 0x44 - .byte 0x24 - .byte 0x01 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -.endm - -/* 2 argument AVX512 ISA version as wrapper to AVX2 ISA version. */ -.macro WRAPPER_IMPL_AVX512_ff callee - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $192, %rsp -/* Below is encoding for vmovups %zmm0, (%rsp). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x04 - .byte 0x24 -/* Below is encoding for vmovups %zmm1, 64(%rsp). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x4c - .byte 0x24 - .byte 0x01 - vmovupd (%rsp), %ymm0 - vmovupd 64(%rsp), %ymm1 - call HIDDEN_JUMPTARGET(\callee) - vmovupd %ymm0, 128(%rsp) - vmovupd 32(%rsp), %ymm0 - vmovupd 96(%rsp), %ymm1 - call HIDDEN_JUMPTARGET(\callee) - vmovupd %ymm0, 160(%rsp) -/* Below is encoding for vmovups 128(%rsp), %zmm0. */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x10 - .byte 0x44 - .byte 0x24 - .byte 0x02 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -.endm - -/* 3 argument AVX512 ISA version as wrapper to AVX2 ISA version. */ -.macro WRAPPER_IMPL_AVX512_fFF callee - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - pushq %r12 - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%r12, 0) - pushq %r13 - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%r13, 0) - subq $176, %rsp - movq %rsi, %r13 -/* Below is encoding for vmovups %zmm0, (%rsp). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x04 - .byte 0x24 - movq %rdi, %r12 - vmovupd (%rsp), %ymm0 - call HIDDEN_JUMPTARGET(\callee) - vmovupd 32(%rsp), %ymm0 - lea 64(%rsp), %rdi - lea 96(%rsp), %rsi - call HIDDEN_JUMPTARGET(\callee) - vmovupd 64(%rsp), %ymm0 - vmovupd 96(%rsp), %ymm1 - vmovupd %ymm0, 32(%r12) - vmovupd %ymm1, 32(%r13) - vzeroupper - addq $176, %rsp - popq %r13 - cfi_adjust_cfa_offset (-8) - cfi_restore (%r13) - popq %r12 - cfi_adjust_cfa_offset (-8) - cfi_restore (%r12) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -.endm diff --git a/sysdeps/x86_64/fpu/svml_finite_alias.S b/sysdeps/x86_64/fpu/svml_finite_alias.S deleted file mode 100644 index 7e39e7801d..0000000000 --- a/sysdeps/x86_64/fpu/svml_finite_alias.S +++ /dev/null @@ -1,58 +0,0 @@ -/* These aliases added as workaround to exclude unnecessary symbol - aliases in libmvec.so while compiler creates the vector names - based on scalar asm name. Corresponding discussion is at - . - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define ALIAS_IMPL(alias, target) \ -ENTRY (alias); \ - jmp *target@GOTPCREL(%rip); \ -END (alias) - - .text -ALIAS_IMPL (_ZGVbN2v___log_finite, _ZGVbN2v_log) -ALIAS_IMPL (_ZGVcN4v___log_finite, _ZGVcN4v_log) -ALIAS_IMPL (_ZGVdN4v___log_finite, _ZGVdN4v_log) -ALIAS_IMPL (_ZGVeN8v___log_finite, _ZGVeN8v_log) - -ALIAS_IMPL (_ZGVbN4v___logf_finite, _ZGVbN4v_logf) -ALIAS_IMPL (_ZGVcN8v___logf_finite, _ZGVcN8v_logf) -ALIAS_IMPL (_ZGVdN8v___logf_finite, _ZGVdN8v_logf) -ALIAS_IMPL (_ZGVeN16v___logf_finite, _ZGVeN16v_logf) - -ALIAS_IMPL (_ZGVbN2v___exp_finite, _ZGVbN2v_exp) -ALIAS_IMPL (_ZGVcN4v___exp_finite, _ZGVcN4v_exp) -ALIAS_IMPL (_ZGVdN4v___exp_finite, _ZGVdN4v_exp) -ALIAS_IMPL (_ZGVeN8v___exp_finite, _ZGVeN8v_exp) - -ALIAS_IMPL (_ZGVbN4v___expf_finite, _ZGVbN4v_expf) -ALIAS_IMPL (_ZGVcN8v___expf_finite, _ZGVcN8v_expf) -ALIAS_IMPL (_ZGVdN8v___expf_finite, _ZGVdN8v_expf) -ALIAS_IMPL (_ZGVeN16v___expf_finite, _ZGVeN16v_expf) - -ALIAS_IMPL (_ZGVbN2vv___pow_finite, _ZGVbN2vv_pow) -ALIAS_IMPL (_ZGVcN4vv___pow_finite, _ZGVcN4vv_pow) -ALIAS_IMPL (_ZGVdN4vv___pow_finite, _ZGVdN4vv_pow) -ALIAS_IMPL (_ZGVeN8vv___pow_finite, _ZGVeN8vv_pow) - -ALIAS_IMPL (_ZGVbN4vv___powf_finite, _ZGVbN4vv_powf) -ALIAS_IMPL (_ZGVcN8vv___powf_finite, _ZGVcN8vv_powf) -ALIAS_IMPL (_ZGVdN8vv___powf_finite, _ZGVdN8vv_powf) -ALIAS_IMPL (_ZGVeN16vv___powf_finite, _ZGVeN16vv_powf) diff --git a/sysdeps/x86_64/fpu/svml_s_cosf16_core.S b/sysdeps/x86_64/fpu/svml_s_cosf16_core.S deleted file mode 100644 index 127eb82ae0..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_cosf16_core.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function cosf vectorized with AVX-512. Wrapper to AVX2 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVeN16v_cosf) -WRAPPER_IMPL_AVX512 _ZGVdN8v_cosf -END (_ZGVeN16v_cosf) diff --git a/sysdeps/x86_64/fpu/svml_s_cosf4_core.S b/sysdeps/x86_64/fpu/svml_s_cosf4_core.S deleted file mode 100644 index 800766cc4e..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_cosf4_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function cosf vectorized with SSE2, wrapper version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVbN4v_cosf) -WRAPPER_IMPL_SSE2 cosf -END (_ZGVbN4v_cosf) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVbN4v_cosf) -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_cosf8_core.S b/sysdeps/x86_64/fpu/svml_s_cosf8_core.S deleted file mode 100644 index 46c588074c..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_cosf8_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function cosf vectorized with AVX2, wrapper version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVdN8v_cosf) -WRAPPER_IMPL_AVX _ZGVbN4v_cosf -END (_ZGVdN8v_cosf) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVdN8v_cosf) -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_cosf8_core_avx.S b/sysdeps/x86_64/fpu/svml_s_cosf8_core_avx.S deleted file mode 100644 index 459685ee6a..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_cosf8_core_avx.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function cosf vectorized in AVX ISA as wrapper to SSE4 ISA version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVcN8v_cosf) -WRAPPER_IMPL_AVX _ZGVbN4v_cosf -END (_ZGVcN8v_cosf) diff --git a/sysdeps/x86_64/fpu/svml_s_expf16_core.S b/sysdeps/x86_64/fpu/svml_s_expf16_core.S deleted file mode 100644 index a32f03e1a7..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_expf16_core.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function expf vectorized with AVX-512. Wrapper to AVX2 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVeN16v_expf) -WRAPPER_IMPL_AVX512 _ZGVdN8v_expf -END (_ZGVeN16v_expf) diff --git a/sysdeps/x86_64/fpu/svml_s_expf4_core.S b/sysdeps/x86_64/fpu/svml_s_expf4_core.S deleted file mode 100644 index c8ec8f97b7..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_expf4_core.S +++ /dev/null @@ -1,30 +0,0 @@ -/* Function expf vectorized with SSE2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVbN4v_expf) -WRAPPER_IMPL_SSE2 __expf_finite -END (_ZGVbN4v_expf) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVbN4v_expf) -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_expf8_core.S b/sysdeps/x86_64/fpu/svml_s_expf8_core.S deleted file mode 100644 index f5e1be62eb..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_expf8_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function expf vectorized with AVX2, wrapper version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVdN8v_expf) -WRAPPER_IMPL_AVX _ZGVbN4v_expf -END (_ZGVdN8v_expf) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVdN8v_expf) -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_expf8_core_avx.S b/sysdeps/x86_64/fpu/svml_s_expf8_core_avx.S deleted file mode 100644 index f3557f8c19..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_expf8_core_avx.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function expf vectorized in AVX ISA as wrapper to SSE4 ISA version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY(_ZGVcN8v_expf) -WRAPPER_IMPL_AVX _ZGVbN4v_expf -END(_ZGVcN8v_expf) diff --git a/sysdeps/x86_64/fpu/svml_s_expf_data.S b/sysdeps/x86_64/fpu/svml_s_expf_data.S deleted file mode 100644 index 226104f5f9..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_expf_data.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Data for function expf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "svml_s_expf_data.h" - - .section .rodata, "a" - .align 64 - -/* Data table for vector implementations of function expf. - The table may contain polynomial, reduction, lookup coefficients and - other coefficients obtained through different methods of research and - experimental work. */ - - .globl __svml_sexp_data -__svml_sexp_data: - -/* Range reduction coefficients: - * log(2) inverted */ -float_vector __sInvLn2 0x3fb8aa3b - -/* right shifter constant */ -float_vector __sShifter 0x4b400000 - -/* log(2) high part */ -float_vector __sLn2hi 0x3f317200 - -/* log(2) low part */ -float_vector __sLn2lo 0x35bfbe8e - -/* bias */ -float_vector __iBias 0x0000007f - -/* Polynomial coefficients: - * Here we approximate 2^x on [-0.5, 0.5] */ -float_vector __sPC0 0x3f800000 -float_vector __sPC1 0x3f7ffffe -float_vector __sPC2 0x3effff34 -float_vector __sPC3 0x3e2aacac -float_vector __sPC4 0x3d2b8392 -float_vector __sPC5 0x3c07d9fe - -/* absolute value mask */ -float_vector __iAbsMask 0x7fffffff - -/* working domain range */ -float_vector __iDomainRange 0x42aeac4f - .type __svml_sexp_data,@object - .size __svml_sexp_data,.-__svml_sexp_data diff --git a/sysdeps/x86_64/fpu/svml_s_expf_data.h b/sysdeps/x86_64/fpu/svml_s_expf_data.h deleted file mode 100644 index 5badb84b14..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_expf_data.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Offsets for data table for vector function expf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef S_EXPF_DATA_H -#define S_EXPF_DATA_H - -#define __sInvLn2 0 -#define __sShifter 64 -#define __sLn2hi 128 -#define __sLn2lo 192 -#define __iBias 256 -#define __sPC0 320 -#define __sPC1 384 -#define __sPC2 448 -#define __sPC3 512 -#define __sPC4 576 -#define __sPC5 640 -#define __iAbsMask 704 -#define __iDomainRange 768 - -.macro float_vector offset value -.if .-__svml_sexp_data != \offset -.err -.endif -.rept 16 -.long \value -.endr -.endm - -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_logf16_core.S b/sysdeps/x86_64/fpu/svml_s_logf16_core.S deleted file mode 100644 index 081c449f42..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_logf16_core.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function logf vectorized with AVX-512. Wrapper to AVX2 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVeN16v_logf) -WRAPPER_IMPL_AVX512 _ZGVdN8v_logf -END (_ZGVeN16v_logf) diff --git a/sysdeps/x86_64/fpu/svml_s_logf4_core.S b/sysdeps/x86_64/fpu/svml_s_logf4_core.S deleted file mode 100644 index fab301db1e..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_logf4_core.S +++ /dev/null @@ -1,30 +0,0 @@ -/* Function logf vectorized with SSE2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVbN4v_logf) -WRAPPER_IMPL_SSE2 __logf_finite -END (_ZGVbN4v_logf) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVbN4v_logf) -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_logf8_core.S b/sysdeps/x86_64/fpu/svml_s_logf8_core.S deleted file mode 100644 index e1aa2f363c..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_logf8_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function logf vectorized with AVX2, wrapper version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVdN8v_logf) -WRAPPER_IMPL_AVX _ZGVbN4v_logf -END (_ZGVdN8v_logf) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVdN8v_logf) -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_logf8_core_avx.S b/sysdeps/x86_64/fpu/svml_s_logf8_core_avx.S deleted file mode 100644 index e74e47c152..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_logf8_core_avx.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function logf vectorized in AVX ISA as wrapper to SSE4 ISA version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY(_ZGVcN8v_logf) -WRAPPER_IMPL_AVX _ZGVbN4v_logf -END(_ZGVcN8v_logf) diff --git a/sysdeps/x86_64/fpu/svml_s_logf_data.S b/sysdeps/x86_64/fpu/svml_s_logf_data.S deleted file mode 100644 index 487c439120..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_logf_data.S +++ /dev/null @@ -1,102 +0,0 @@ -/* Data for vector function logf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "svml_s_logf_data.h" - - .section .rodata, "a" - .align 64 - -/* Data table for vector implementations of function logf. - The table may contain polynomial, reduction, lookup coefficients and - other coefficients obtained through different methods of research and - experimental work. */ - - .globl __svml_slog_data -__svml_slog_data: - -/* Polynomial sPoly[] coefficients: - * -5.0000000000000000000000000e-01 */ -float_vector _sPoly_1 0xbf000000 - -/* 3.3336564898490905761718750e-01 */ -float_vector _sPoly_2 0x3eaaaee7 - -/* -2.5004664063453674316406250e-01 */ -float_vector _sPoly_3 0xbe80061d - -/* 1.9822503626346588134765625e-01 */ -float_vector _sPoly_4 0x3e4afb81 - -/* -1.6462457180023193359375000e-01 */ -float_vector _sPoly_5 0xbe289358 - -/* 1.6964881122112274169921875e-01 */ -float_vector _sPoly_6 0x3e2db86b - -/* -1.5177205204963684082031250e-01 */ -float_vector _sPoly_7 0xbe1b6a22 - -/* Constant for work range check: Delta 80000000-7f800000 */ -float_vector _iHiDelta 0x00800000 - -/* Constant for work range check: 00800000 + Delta */ -float_vector _iLoRange 0x01000000 - -/* Mantissa break point SP 2/3 */ -float_vector _iBrkValue 0x3f2aaaab - -/* SP significand mask */ -float_vector _iOffExpoMask 0x007fffff - -/* 1.0f */ -float_vector _sOne 0x3f800000 - -/* SP log(2) */ -float_vector _sLn2 0x3f317218 - -/* SP infinity, +/- */ -.if .-__svml_slog_data != _sInfs -.err -.endif - .long 0x7f800000 - .long 0xff800000 - .rept 56 - .byte 0 - .endr - -/* SP one, +/- */ -.if .-__svml_slog_data != _sOnes -.err -.endif - .long 0x3f800000 - .long 0xbf800000 - .rept 56 - .byte 0 - .endr - -/* SP zero +/- */ -.if .-__svml_slog_data != _sZeros -.err -.endif - .long 0x00000000 - .long 0x80000000 - .rept 56 - .byte 0 - .endr - .type __svml_slog_data,@object - .size __svml_slog_data,.-__svml_slog_data diff --git a/sysdeps/x86_64/fpu/svml_s_logf_data.h b/sysdeps/x86_64/fpu/svml_s_logf_data.h deleted file mode 100644 index 52612e3ae3..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_logf_data.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Offsets for data table for vectorized function logf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef S_LOGF_DATA_H -#define S_LOGF_DATA_H - -#define _sPoly_1 0 -#define _sPoly_2 64 -#define _sPoly_3 128 -#define _sPoly_4 192 -#define _sPoly_5 256 -#define _sPoly_6 320 -#define _sPoly_7 384 -#define _iHiDelta 448 -#define _iLoRange 512 -#define _iBrkValue 576 -#define _iOffExpoMask 640 -#define _sOne 704 -#define _sLn2 768 -#define _sInfs 832 -#define _sOnes 896 -#define _sZeros 960 - -.macro float_vector offset value -.if .-__svml_slog_data != \offset -.err -.endif -.rept 16 -.long \value -.endr -.endm - -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_powf16_core.S b/sysdeps/x86_64/fpu/svml_s_powf16_core.S deleted file mode 100644 index ac041df507..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_powf16_core.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function powf vectorized with AVX-512. Wrapper to AVX2 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVeN16vv_powf) -WRAPPER_IMPL_AVX512_ff _ZGVdN8vv_powf -END (_ZGVeN16vv_powf) diff --git a/sysdeps/x86_64/fpu/svml_s_powf4_core.S b/sysdeps/x86_64/fpu/svml_s_powf4_core.S deleted file mode 100644 index 61d336e160..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_powf4_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function powf vectorized with SSE2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVbN4vv_powf) -WRAPPER_IMPL_SSE2_ff __powf_finite -END (_ZGVbN4vv_powf) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVbN4vv_powf) -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_powf8_core.S b/sysdeps/x86_64/fpu/svml_s_powf8_core.S deleted file mode 100644 index 2ae28051c5..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_powf8_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function powf vectorized with AVX2, wrapper version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVdN8vv_powf) -WRAPPER_IMPL_AVX_ff _ZGVbN4vv_powf -END (_ZGVdN8vv_powf) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVdN8vv_powf) -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_powf8_core_avx.S b/sysdeps/x86_64/fpu/svml_s_powf8_core_avx.S deleted file mode 100644 index 0522865ef1..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_powf8_core_avx.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function powf vectorized in AVX ISA as wrapper to SSE4 ISA version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY(_ZGVcN8vv_powf) -WRAPPER_IMPL_AVX_ff _ZGVbN4vv_powf -END(_ZGVcN8vv_powf) diff --git a/sysdeps/x86_64/fpu/svml_s_powf_data.S b/sysdeps/x86_64/fpu/svml_s_powf_data.S deleted file mode 100644 index 630baa62a8..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_powf_data.S +++ /dev/null @@ -1,3759 +0,0 @@ -/* Data for function powf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "svml_s_powf_data.h" - - .section .rodata, "a" - .align 64 - -/* Data table for vector implementations of function powf. - The table may contain polynomial, reduction, lookup coefficients and - other coefficients obtained through different methods of research - and experimental work. */ - - .globl __svml_spow_data -__svml_spow_data: - -/* General purpose constants for H+L multiplication: - * NMINNORM */ -float_vector _NMINNORM 0x80800000 - -/* NMAXVAL */ -float_vector _NMAXVAL 0xfeffffff - -/* INF */ -float_vector _INF 0x7f800000 - -/* ABSMASK */ -float_vector _ABSMASK 0x7fffffff - -/* DOMAINRANGE */ -float_vector _DOMAINRANGE 0x42ae9a00 - -/* Log(2) lookup High+Low table for logarithmic part */ -.if .-__svml_spow_data != _Log_HA_table -.err -.endif - .quad 0xc086232bdd7a8300 - .quad 0xbe1ce91eef3fb100 - .quad 0xc086232fdc7ad828 - .quad 0xbe1cefcffda73b6a - .quad 0xc0862333d97d2ba0 - .quad 0xbe1cef406748f1ff - .quad 0xc0862337d48378e0 - .quad 0xbe1cef2a9429925a - .quad 0xc086233bcd8fb878 - .quad 0xbe1cf138d17ebecb - .quad 0xc086233fc4a3e018 - .quad 0xbe1ceff2dbbbb29e - .quad 0xc0862343b9c1e270 - .quad 0xbe1cf1a42aae437b - .quad 0xc0862347acebaf68 - .quad 0xbe1cef3b152048af - .quad 0xc086234b9e2333f0 - .quad 0xbe1cef20e127805e - .quad 0xc086234f8d6a5a30 - .quad 0xbe1cf00ad6052cf4 - .quad 0xc08623537ac30980 - .quad 0xbe1cefc4642ee597 - .quad 0xc0862357662f2660 - .quad 0xbe1cf1f277d36e16 - .quad 0xc086235b4fb092a0 - .quad 0xbe1ceed009e8d8e6 - .quad 0xc086235f37492d28 - .quad 0xbe1cf1e4038cb362 - .quad 0xc08623631cfad250 - .quad 0xbe1cf0b0873b8557 - .quad 0xc086236700c75b98 - .quad 0xbe1cf15bb3227c0b - .quad 0xc086236ae2b09fe0 - .quad 0xbe1cf151ef8ca9ed - .quad 0xc086236ec2b87358 - .quad 0xbe1cefe1dc2cd2ed - .quad 0xc0862372a0e0a780 - .quad 0xbe1cf0d1eec5454f - .quad 0xc08623767d2b0b48 - .quad 0xbe1ceeefd570bbce - .quad 0xc086237a57996af0 - .quad 0xbe1cee99ae91b3a7 - .quad 0xc086237e302d9028 - .quad 0xbe1cf0412830fbd1 - .quad 0xc086238206e94218 - .quad 0xbe1ceee898588610 - .quad 0xc0862385dbce4548 - .quad 0xbe1cee9a1fbcaaea - .quad 0xc0862389aede5bc0 - .quad 0xbe1ceed8e7cc1ad6 - .quad 0xc086238d801b4500 - .quad 0xbe1cf10c8d059da6 - .quad 0xc08623914f86be18 - .quad 0xbe1ceee6c63a8165 - .quad 0xc08623951d228180 - .quad 0xbe1cf0c3592d2ff1 - .quad 0xc0862398e8f04758 - .quad 0xbe1cf0026cc4cb1b - .quad 0xc086239cb2f1c538 - .quad 0xbe1cf15d48d8e670 - .quad 0xc08623a07b28ae60 - .quad 0xbe1cef359363787c - .quad 0xc08623a44196b390 - .quad 0xbe1cefdf1ab2e82c - .quad 0xc08623a8063d8338 - .quad 0xbe1cefe43c02aa84 - .quad 0xc08623abc91ec960 - .quad 0xbe1cf044f5ae35b7 - .quad 0xc08623af8a3c2fb8 - .quad 0xbe1cf0b0b4001e1b - .quad 0xc08623b349975d98 - .quad 0xbe1cf1bae76dfbcf - .quad 0xc08623b70731f810 - .quad 0xbe1cef0a72e13a62 - .quad 0xc08623bac30da1c8 - .quad 0xbe1cf184007d2b6b - .quad 0xc08623be7d2bfb40 - .quad 0xbe1cf16f4b239e98 - .quad 0xc08623c2358ea2a0 - .quad 0xbe1cf0976acada87 - .quad 0xc08623c5ec3733d0 - .quad 0xbe1cf066318a16ff - .quad 0xc08623c9a1274880 - .quad 0xbe1ceffaa7148798 - .quad 0xc08623cd54607820 - .quad 0xbe1cf23ab02e9b6e - .quad 0xc08623d105e45800 - .quad 0xbe1cefdfef7d4fde - .quad 0xc08623d4b5b47b20 - .quad 0xbe1cf17fece44f2b - .quad 0xc08623d863d27270 - .quad 0xbe1cf18f907d0d7c - .quad 0xc08623dc103fccb0 - .quad 0xbe1cee61fe072c98 - .quad 0xc08623dfbafe1668 - .quad 0xbe1cf022dd891e2f - .quad 0xc08623e3640eda20 - .quad 0xbe1ceecc1daf4358 - .quad 0xc08623e70b73a028 - .quad 0xbe1cf0173c4fa380 - .quad 0xc08623eab12deec8 - .quad 0xbe1cf16a2150c2f4 - .quad 0xc08623ee553f4a30 - .quad 0xbe1cf1bf980b1f4b - .quad 0xc08623f1f7a93480 - .quad 0xbe1cef8b731663c2 - .quad 0xc08623f5986d2dc0 - .quad 0xbe1cee9a664d7ef4 - .quad 0xc08623f9378cb3f0 - .quad 0xbe1cf1eda2af6400 - .quad 0xc08623fcd5094320 - .quad 0xbe1cf1923f9d68d7 - .quad 0xc086240070e45548 - .quad 0xbe1cf0747cd3e03a - .quad 0xc08624040b1f6260 - .quad 0xbe1cf22ee855bd6d - .quad 0xc0862407a3bbe078 - .quad 0xbe1cf0d57360c00b - .quad 0xc086240b3abb4398 - .quad 0xbe1ceebc815cd575 - .quad 0xc086240ed01efdd0 - .quad 0xbe1cf03bfb970951 - .quad 0xc086241263e87f50 - .quad 0xbe1cf16e74768529 - .quad 0xc0862415f6193658 - .quad 0xbe1cefec64b8becb - .quad 0xc086241986b28f30 - .quad 0xbe1cf0838d210baa - .quad 0xc086241d15b5f448 - .quad 0xbe1cf0ea86e75b11 - .quad 0xc0862420a324ce28 - .quad 0xbe1cf1708d11d805 - .quad 0xc08624242f008380 - .quad 0xbe1ceea988c5a417 - .quad 0xc0862427b94a7910 - .quad 0xbe1cef166a7bbca5 - .quad 0xc086242b420411d0 - .quad 0xbe1cf0c9d9e86a38 - .quad 0xc086242ec92eaee8 - .quad 0xbe1cef0946455411 - .quad 0xc08624324ecbaf98 - .quad 0xbe1cefea60907739 - .quad 0xc0862435d2dc7160 - .quad 0xbe1cf1ed0934ce42 - .quad 0xc086243955624ff8 - .quad 0xbe1cf191ba746c7d - .quad 0xc086243cd65ea548 - .quad 0xbe1ceeec78cf2a7e - .quad 0xc086244055d2c968 - .quad 0xbe1cef345284c119 - .quad 0xc0862443d3c012b8 - .quad 0xbe1cf24f77355219 - .quad 0xc08624475027d5e8 - .quad 0xbe1cf05bf087e114 - .quad 0xc086244acb0b65d0 - .quad 0xbe1cef3504a32189 - .quad 0xc086244e446c1398 - .quad 0xbe1ceff54b2a406f - .quad 0xc0862451bc4b2eb8 - .quad 0xbe1cf0757d54ed4f - .quad 0xc086245532aa04f0 - .quad 0xbe1cf0c8099fdfd5 - .quad 0xc0862458a789e250 - .quad 0xbe1cf0b173796a31 - .quad 0xc086245c1aec1138 - .quad 0xbe1cf11d8734540d - .quad 0xc086245f8cd1da60 - .quad 0xbe1cf1916a723ceb - .quad 0xc0862462fd3c84d8 - .quad 0xbe1cf19a911e1da7 - .quad 0xc08624666c2d5608 - .quad 0xbe1cf23a9ef72e4f - .quad 0xc0862469d9a591c0 - .quad 0xbe1cef503d947663 - .quad 0xc086246d45a67a18 - .quad 0xbe1cf0fceeb1a0b2 - .quad 0xc0862470b0314fa8 - .quad 0xbe1cf107e27e4fbc - .quad 0xc086247419475160 - .quad 0xbe1cf03dd9922331 - .quad 0xc086247780e9bc98 - .quad 0xbe1cefce1a10e129 - .quad 0xc086247ae719cd18 - .quad 0xbe1ceea47f73c4f6 - .quad 0xc086247e4bd8bd10 - .quad 0xbe1ceec0ac56d100 - .quad 0xc0862481af27c528 - .quad 0xbe1cee8a6593278a - .quad 0xc086248511081c70 - .quad 0xbe1cf2231dd9dec7 - .quad 0xc0862488717af888 - .quad 0xbe1cf0b4b8ed7da8 - .quad 0xc086248bd0818d68 - .quad 0xbe1cf1bd8d835002 - .quad 0xc086248f2e1d0d98 - .quad 0xbe1cf259acc107f4 - .quad 0xc08624928a4eaa20 - .quad 0xbe1cee897636b00c - .quad 0xc0862495e5179270 - .quad 0xbe1cee757f20c326 - .quad 0xc08624993e78f490 - .quad 0xbe1cefafd3aa54a4 - .quad 0xc086249c9673fd10 - .quad 0xbe1cee7298d38b97 - .quad 0xc086249fed09d6f8 - .quad 0xbe1ceedc158d4ceb - .quad 0xc08624a3423babe0 - .quad 0xbe1cf2282987cb2e - .quad 0xc08624a6960aa400 - .quad 0xbe1cefe7381ecc4b - .quad 0xc08624a9e877e600 - .quad 0xbe1cef328dbbce80 - .quad 0xc08624ad39849728 - .quad 0xbe1cefde45f3cc71 - .quad 0xc08624b08931db58 - .quad 0xbe1cefa8b89433b9 - .quad 0xc08624b3d780d500 - .quad 0xbe1cef6773c0b139 - .quad 0xc08624b72472a528 - .quad 0xbe1cf031c931c11f - .quad 0xc08624ba70086b78 - .quad 0xbe1cf088f49275e7 - .quad 0xc08624bdba434630 - .quad 0xbe1cf17de0eaa86d - .quad 0xc08624c103245238 - .quad 0xbe1cefd492f1ba75 - .quad 0xc08624c44aacab08 - .quad 0xbe1cf1253e154466 - .quad 0xc08624c790dd6ad0 - .quad 0xbe1cf0fb09ee6d55 - .quad 0xc08624cad5b7aa58 - .quad 0xbe1cf1f08dd048fe - .quad 0xc08624ce193c8120 - .quad 0xbe1ceeca0809697f - .quad 0xc08624d15b6d0538 - .quad 0xbe1cef8d5662d968 - .quad 0xc08624d49c4a4b78 - .quad 0xbe1cee97b556ed78 - .quad 0xc08624d7dbd56750 - .quad 0xbe1cf1b14b6acb75 - .quad 0xc08624db1a0f6b00 - .quad 0xbe1cef1e860623f2 - .quad 0xc08624de56f96758 - .quad 0xbe1ceeaf4d156f3d - .quad 0xc08624e192946bf0 - .quad 0xbe1ceecc12b400ed - .quad 0xc08624e4cce18710 - .quad 0xbe1cf180c40c794f - .quad 0xc08624e805e1c5c8 - .quad 0xbe1cf185a08f7f65 - .quad 0xc08624eb3d9633d8 - .quad 0xbe1cef45fc924078 - .quad 0xc08624ee73ffdbb0 - .quad 0xbe1cf1e4f457f32a - .quad 0xc08624f1a91fc6a0 - .quad 0xbe1cf040147b8a5a - .quad 0xc08624f4dcf6fc98 - .quad 0xbe1cf1effca0dfb2 - .quad 0xc08624f80f868468 - .quad 0xbe1cf0470146e5bc - .quad 0xc08624fb40cf6390 - .quad 0xbe1cef4dd186e501 - .quad 0xc08624fe70d29e60 - .quad 0xbe1ceebe257f66c7 - .quad 0xc08625019f9137f0 - .quad 0xbe1ceefb7a1c395c - .quad 0xc0862504cd0c3220 - .quad 0xbe1cf209dedfed8c - .quad 0xc0862507f9448db0 - .quad 0xbe1cf082da464994 - .quad 0xc086250b243b4a18 - .quad 0xbe1cee88694a73cf - .quad 0xc086250e4df165a0 - .quad 0xbe1cf0b61e8f0531 - .quad 0xc08625117667dd78 - .quad 0xbe1cf1106599c962 - .quad 0xc08625149d9fad98 - .quad 0xbe1ceff1ee88af1f - .quad 0xc0862517c399d0c8 - .quad 0xbe1cf0f746994ef6 - .quad 0xc086251ae85740b8 - .quad 0xbe1cefe8a1d077e4 - .quad 0xc086251e0bd8f5e0 - .quad 0xbe1cf1a1da036092 - .quad 0xc08625212e1fe7a8 - .quad 0xbe1cf0f8a7786fcd - .quad 0xc08625244f2d0c48 - .quad 0xbe1cefa1174a07a7 - .quad 0xc08625276f0158d8 - .quad 0xbe1cef1043aa5b25 - .quad 0xc086252a8d9dc150 - .quad 0xbe1cf15d521c169d - .quad 0xc086252dab033898 - .quad 0xbe1cf220bba8861f - .quad 0xc0862530c732b078 - .quad 0xbe1cef51e310eae2 - .quad 0xc0862533e22d1988 - .quad 0xbe1cf222fcedd8ae - .quad 0xc0862536fbf36370 - .quad 0xbe1cefdb4da4bda8 - .quad 0xc086253a14867ca0 - .quad 0xbe1ceeafc1112171 - .quad 0xc086253d2be75280 - .quad 0xbe1cee99dfb4b408 - .quad 0xc08625404216d160 - .quad 0xbe1cf22d2536f06b - .quad 0xc08625435715e498 - .quad 0xbe1cef6abbf2e268 - .quad 0xc08625466ae57648 - .quad 0xbe1cf093a14789f5 - .quad 0xc08625497d866fa0 - .quad 0xbe1cf0f93655603c - .quad 0xc086254c8ef9b8b8 - .quad 0xbe1cf1cc40c9aafc - .quad 0xc086254f9f4038a8 - .quad 0xbe1ceeea5f4e9157 - .quad 0xc0862552ae5ad568 - .quad 0xbe1cefa9f52d4997 - .quad 0xc0862555bc4a7400 - .quad 0xbe1cefa490a638ff - .quad 0xc0862558c90ff868 - .quad 0xbe1cef7fcf797d6f - .quad 0xc086255bd4ac4590 - .quad 0xbe1cf1b4c51113c9 - .quad 0xc086255edf203d78 - .quad 0xbe1cef55e5b4a55d - .quad 0xc0862561e86cc100 - .quad 0xbe1cf0d37a25f9dc - .quad 0xc0862564f092b028 - .quad 0xbe1ceebe9efc19d9 - .quad 0xc0862567f792e9d8 - .quad 0xbe1cee8ad30a57b5 - .quad 0xc086256afd6e4c08 - .quad 0xbe1cef4e1817b90b - .quad 0xc086256e0225b3b8 - .quad 0xbe1cee7fa9229996 - .quad 0xc086257105b9fce0 - .quad 0xbe1cf0b54963d945 - .quad 0xc0862574082c0298 - .quad 0xbe1cee5f2f3c7995 - .quad 0xc0862577097c9ee0 - .quad 0xbe1cf0828e303a2c - .quad 0xc086257a09acaae0 - .quad 0xbe1cf172c3078947 - .quad 0xc086257d08bcfec0 - .quad 0xbe1cf189252afa22 - .quad 0xc086258006ae71b8 - .quad 0xbe1cefdb80426923 - .quad 0xc08625830381da08 - .quad 0xbe1ceef1391a0372 - .quad 0xc0862585ff380d00 - .quad 0xbe1cf17720c78d13 - .quad 0xc0862588f9d1df18 - .quad 0xbe1ceef1f9027d83 - .quad 0xc086258bf35023b8 - .quad 0xbe1cf06fac99dec9 - .quad 0xc086258eebb3ad78 - .quad 0xbe1cf1373eeb45c0 - .quad 0xc0862591e2fd4e00 - .quad 0xbe1cef777536bb81 - .quad 0xc0862594d92dd600 - .quad 0xbe1cf0f43ca40766 - .quad 0xc0862597ce461558 - .quad 0xbe1cefb2cfc6766b - .quad 0xc086259ac246daf0 - .quad 0xbe1ceea49e64ffa2 - .quad 0xc086259db530f4c8 - .quad 0xbe1cf250fa457dec - .quad 0xc08625a0a7053018 - .quad 0xbe1cf17d8bb2a44e - .quad 0xc08625a397c45918 - .quad 0xbe1cf1d5906d54b7 - .quad 0xc08625a6876f3b30 - .quad 0xbe1cf08fe7b31780 - .quad 0xc08625a97606a0e0 - .quad 0xbe1cef13edfc9d11 - .quad 0xc08625ac638b53c8 - .quad 0xbe1cef9d2b107219 - .quad 0xc08625af4ffe1cb0 - .quad 0xbe1cf1ddd4ff6160 - .quad 0xc08625b23b5fc390 - .quad 0xbe1cefa02a996495 - .quad 0xc08625b525b10f68 - .quad 0xbe1cf166a7e37ee5 - .quad 0xc08625b80ef2c680 - .quad 0xbe1cef0b171068a5 - .quad 0xc08625baf725ae28 - .quad 0xbe1cf05c80779283 - .quad 0xc08625bdde4a8af0 - .quad 0xbe1cf1bbfbffb889 - .quad 0xc08625c0c4622090 - .quad 0xbe1cf0b8666c0124 - .quad 0xc08625c3a96d31e0 - .quad 0xbe1cf0a8fcf47a86 - .quad 0xc08625c68d6c80f0 - .quad 0xbe1cef46e18cb092 - .quad 0xc08625c97060cef0 - .quad 0xbe1cf1458a350efb - .quad 0xc08625cc524adc58 - .quad 0xbe1ceeea1dadce12 - .quad 0xc08625cf332b68b0 - .quad 0xbe1cf0a1bfdc44c7 - .quad 0xc08625d2130332d0 - .quad 0xbe1cef96d02da73e - .quad 0xc08625d4f1d2f8a8 - .quad 0xbe1cf2451c3c7701 - .quad 0xc08625d7cf9b7778 - .quad 0xbe1cf10d08f83812 - .quad 0xc08625daac5d6ba0 - .quad 0xbe1ceec5b4895c5e - .quad 0xc08625dd881990b0 - .quad 0xbe1cf14e1325c5e4 - .quad 0xc08625e062d0a188 - .quad 0xbe1cf21d0904be12 - .quad 0xc08625e33c835838 - .quad 0xbe1ceed0839bcf21 - .quad 0xc08625e615326df0 - .quad 0xbe1cf1bb944889d2 - .quad 0xc08625e8ecde9b48 - .quad 0xbe1cee738e85eece - .quad 0xc08625ebc38897e0 - .quad 0xbe1cf25c2bc6ef12 - .quad 0xc08625ee99311ac8 - .quad 0xbe1cf132b70a41ad - .quad 0xc08625f16dd8da28 - .quad 0xbe1cf1984236a6e3 - .quad 0xc08625f441808b78 - .quad 0xbe1cf19ae74998f9 - .quad 0xc08625f71428e370 - .quad 0xbe1cef3e175d61a1 - .quad 0xc08625f9e5d295f8 - .quad 0xbe1cf101f9868fd9 - .quad 0xc08625fcb67e5658 - .quad 0xbe1cee69db83dcd2 - .quad 0xc08625ff862cd6f8 - .quad 0xbe1cf081b636af51 - .quad 0xc086260254dec9a8 - .quad 0xbe1cee62c7d59b3e - .quad 0xc08626052294df58 - .quad 0xbe1cf1b745c57716 - .quad 0xc0862607ef4fc868 - .quad 0xbe1cef3d2800ea23 - .quad 0xc086260abb103458 - .quad 0xbe1cef480ff1acd2 - .quad 0xc086260d85d6d200 - .quad 0xbe1cf2424c9a17ef - .quad 0xc08626104fa44f90 - .quad 0xbe1cf12cfde90fd5 - .quad 0xc086261318795a68 - .quad 0xbe1cf21f590dd5b6 - .quad 0xc0862615e0569f48 - .quad 0xbe1cf0c50f9cd28a - .quad 0xc0862618a73cca30 - .quad 0xbe1ceedbdb520545 - .quad 0xc086261b6d2c8668 - .quad 0xbe1cf0b030396011 - .quad 0xc086261e32267e98 - .quad 0xbe1cf19917010e96 - .quad 0xc0862620f62b5cb0 - .quad 0xbe1cf07331355985 - .quad 0xc0862623b93bc9e8 - .quad 0xbe1cf01ae921a1c3 - .quad 0xc08626267b586ed0 - .quad 0xbe1cefe5cf0dbf0c - .quad 0xc08626293c81f348 - .quad 0xbe1cf01b258aeb50 - .quad 0xc086262bfcb8fe88 - .quad 0xbe1cee6b9e7f4c68 - .quad 0xc086262ebbfe3710 - .quad 0xbe1cee684a9b21c9 - .quad 0xc08626317a5242b8 - .quad 0xbe1cf1f8bcde9a8b - .quad 0xc086263437b5c6c0 - .quad 0xbe1cf1d063d36238 - .quad 0xc0862636f42967a8 - .quad 0xbe1cf1e31a19075e - .quad 0xc0862639afadc950 - .quad 0xbe1cf1d8efdf7e7d - .quad 0xc086263c6a438ef0 - .quad 0xbe1cf1812ee72dba - .quad 0xc086263f23eb5b18 - .quad 0xbe1cf1449a9a2279 - .quad 0xc0862641dca5cfb8 - .quad 0xbe1cee96edce5085 - .quad 0xc086264494738e08 - .quad 0xbe1cf06797bd03b2 - .quad 0xc08626474b5536b8 - .quad 0xbe1cef91b9b7ffc1 - .quad 0xc086264a014b69c0 - .quad 0xbe1cef4b6721278f - .quad 0xc086264cb656c678 - .quad 0xbe1cf1942925eb4a - .quad 0xc086264f6a77eba8 - .quad 0xbe1cefa2c7bc2e39 - .quad 0xc08626521daf7758 - .quad 0xbe1cf252595aceb3 - .quad 0xc0862654cffe0718 - .quad 0xbe1cee8e9ae47ec2 - .quad 0xc0862657816437a8 - .quad 0xbe1cf1bf913828fa - .quad 0xc086265a31e2a558 - .quad 0xbe1cf23475d6b366 - .quad 0xc086265ce179ebc8 - .quad 0xbe1cef8df00a922b - .quad 0xc086265f902aa5f0 - .quad 0xbe1cef279bfa43e0 - .quad 0xc08626623df56e38 - .quad 0xbe1cf080e10b8365 - .quad 0xc0862664eadade70 - .quad 0xbe1cf1a518f9b544 - .quad 0xc086266796db8fd0 - .quad 0xbe1cef9308fed9e9 - .quad 0xc086266a41f81ae8 - .quad 0xbe1ceea3ae6b19c9 - .quad 0xc086266cec3117b8 - .quad 0xbe1ceef06003d4c2 - .quad 0xc086266f95871da8 - .quad 0xbe1cf0b8457ffb0c - .quad 0xc08626723dfac390 - .quad 0xbe1cf0c526745ad6 - .quad 0xc0862674e58c9fa8 - .quad 0xbe1cf0cf91ff7b5d - .quad 0xc08626778c3d4798 - .quad 0xbe1cefe260819380 - .quad 0xc086267a320d5070 - .quad 0xbe1ceebd90aa27a3 - .quad 0xc086267cd6fd4ea8 - .quad 0xbe1cf0388121dffa - .quad 0xc086267f7b0dd630 - .quad 0xbe1cf1a3881435f1 - .quad 0xc08626821e3f7a68 - .quad 0xbe1cef28e9d9ac52 - .quad 0xc0862684c092ce08 - .quad 0xbe1cf02d300062dd - .quad 0xc086268762086350 - .quad 0xbe1cefaee1edfa35 - .quad 0xc086268a02a0cbe0 - .quad 0xbe1cf0a5a052e936 - .quad 0xc086268ca25c98d8 - .quad 0xbe1cee60a4a497ed - .quad 0xc086268f413c5ab0 - .quad 0xbe1cf0e4a5d0cf49 - .quad 0xc0862691df40a170 - .quad 0xbe1cf149235a4e6e - .quad 0xc08626947c69fc80 - .quad 0xbe1cf215180b9fcc - .quad 0xc086269718b8fac8 - .quad 0xbe1cef9b156a9840 - .quad 0xc0862699b42e2a90 - .quad 0xbe1cf054c91441be - .quad 0xc086269c4eca19a8 - .quad 0xbe1cf13ded26512c - .quad 0xc086269ee88d5550 - .quad 0xbe1cf22ea4d8ac06 - .quad 0xc08626a181786a40 - .quad 0xbe1cf2354666ee2e - .quad 0xc08626a4198be4a8 - .quad 0xbe1cefef936752b3 - .quad 0xc08626a6b0c85020 - .quad 0xbe1cf1e360a9db68 - .quad 0xc08626a9472e37d8 - .quad 0xbe1ceed6aeb812c5 - .quad 0xc08626abdcbe2650 - .quad 0xbe1cf227340b4986 - .quad 0xc08626ae7178a5b0 - .quad 0xbe1cf0215a0cbe0d - .quad 0xc08626b1055e3f70 - .quad 0xbe1cf256adf0ae26 - .quad 0xc08626b3986f7ca8 - .quad 0xbe1ceff3c67aed06 - .quad 0xc08626b62aace5c8 - .quad 0xbe1cf2159fb93652 - .quad 0xc08626b8bc1702e0 - .quad 0xbe1cf01e6dbd1c7f - .quad 0xc08626bb4cae5b60 - .quad 0xbe1cf009e75d1c0c - .quad 0xc08626bddc737648 - .quad 0xbe1ceec10a020e73 - .quad 0xc08626c06b66da08 - .quad 0xbe1cf06d5783eee7 - .quad 0xc08626c2f9890ca0 - .quad 0xbe1cf0cb8f169ffe - .quad 0xc08626c586da9388 - .quad 0xbe1cef7de2452430 - .quad 0xc08626c8135bf3b0 - .quad 0xbe1cf05da6f783ae - .quad 0xc08626ca9f0db198 - .quad 0xbe1cefcc877d681d - .quad 0xc08626cd29f05138 - .quad 0xbe1cef0531954ab3 - .quad 0xc08626cfb4045608 - .quad 0xbe1cf06b8565ea3d - .quad 0xc08626d23d4a4310 - .quad 0xbe1cefdc455d9d7e - .quad 0xc08626d4c5c29ad0 - .quad 0xbe1ceefc47e8fa64 - .quad 0xc08626d74d6ddf48 - .quad 0xbe1cf1872bf033f2 - .quad 0xc08626d9d44c9210 - .quad 0xbe1cf19d91087f9d - .quad 0xc08626dc5a5f3438 - .quad 0xbe1cf012d444c6ab - .quad 0xc08626dedfa64650 - .quad 0xbe1cf0ba528ee153 - .quad 0xc08626e164224880 - .quad 0xbe1ceeb431709788 - .quad 0xc08626e3e7d3ba60 - .quad 0xbe1cf0b9af31a6a5 - .quad 0xc08626e66abb1b28 - .quad 0xbe1cf168fb2e135b - .quad 0xc08626e8ecd8e990 - .quad 0xbe1cef9097461c93 - .quad 0xc08626eb6e2da3d0 - .quad 0xbe1cee7a434735d8 - .quad 0xc08626edeeb9c7a8 - .quad 0xbe1cf235732b86f2 - .quad 0xc08626f06e7dd280 - .quad 0xbe1cefe1510b89e6 - .quad 0xc08626f2ed7a4120 - .quad 0xbe1cf1f64b9b80ef - .quad 0xc08626f56baf9000 - .quad 0xbe1cf08f320ca339 - .quad 0xc08626f7e91e3b08 - .quad 0xbe1cf1b1de2808a1 - .quad 0xc08626fa65c6bdc0 - .quad 0xbe1cf1976d778b28 - .quad 0xc08626fce1a99338 - .quad 0xbe1ceef40a4f076f - .quad 0xc08626ff5cc73600 - .quad 0xbe1cef3e45869ce3 - .quad 0xc0862701d7202048 - .quad 0xbe1ceef601b4c9d6 - .quad 0xc086270450b4cbc0 - .quad 0xbe1cf1eaf0b57fd6 - .quad 0xc0862706c985b1c0 - .quad 0xbe1cef82a44990f3 - .quad 0xc086270941934b10 - .quad 0xbe1ceefe32981f2c - .quad 0xc086270bb8de1018 - .quad 0xbe1cefbf6f5a0445 - .quad 0xc086270e2f6678d0 - .quad 0xbe1cf18dba75792c - .quad 0xc0862710a52cfcc8 - .quad 0xbe1cf0da64ce995f - .quad 0xc08627131a321318 - .quad 0xbe1cef04ac0fb802 - .quad 0xc08627158e763268 - .quad 0xbe1cee9d4e2ad9bd - .quad 0xc086271801f9d0f8 - .quad 0xbe1cefa9b55407b5 - .quad 0xc086271a74bd64a0 - .quad 0xbe1cefe6bd329570 - .quad 0xc086271ce6c162c8 - .quad 0xbe1cef0b1205dc85 - .quad 0xc086271f58064068 - .quad 0xbe1cef092a785e3f - .quad 0xc0862721c88c7210 - .quad 0xbe1cf050dcdaac30 - .quad 0xc086272438546be8 - .quad 0xbe1cf210907ded8b - .quad 0xc0862726a75ea1b8 - .quad 0xbe1cee760be44f99 - .quad 0xc086272915ab86c0 - .quad 0xbe1ceeeee07c2bcc - .quad 0xc086272b833b8df0 - .quad 0xbe1cf06874992df5 - .quad 0xc086272df00f29d0 - .quad 0xbe1cef8fac5d4899 - .quad 0xc08627305c26cc70 - .quad 0xbe1cf1103241cc99 - .quad 0xc0862732c782e788 - .quad 0xbe1cf1d35fef83fe - .quad 0xc08627353223ec68 - .quad 0xbe1cef3ec8133e1d - .quad 0xc08627379c0a4be8 - .quad 0xbe1cef7261daccd8 - .quad 0xc086273a05367688 - .quad 0xbe1cf18656c50806 - .quad 0xc086273c6da8dc68 - .quad 0xbe1cf1c8736e049a - .quad 0xc086273ed561ed38 - .quad 0xbe1cf1f93bff4911 - .quad 0xc08627413c621848 - .quad 0xbe1cf188a4ea680c - .quad 0xc0862743a2a9cc80 - .quad 0xbe1cf1d270930c80 - .quad 0xc086274608397868 - .quad 0xbe1cf25a328c28e2 - .quad 0xc08627486d118a28 - .quad 0xbe1cf106f90aa3b8 - .quad 0xc086274ad1326f80 - .quad 0xbe1cee5e9d2e885a - .quad 0xc086274d349c95c0 - .quad 0xbe1cf1c0bac27228 - .quad 0xc086274f975069f8 - .quad 0xbe1cf1a1500f9b1c - .quad 0xc0862751f94e58c0 - .quad 0xbe1cefc30663ac44 - .quad 0xc08627545a96ce48 - .quad 0xbe1cf17123e427a2 - .quad 0xc0862756bb2a3678 - .quad 0xbe1cefb92749fea4 - .quad 0xc08627591b08fcc0 - .quad 0xbe1cefa40e1ea74a - .quad 0xc086275b7a338c40 - .quad 0xbe1cee6f4612c3e9 - .quad 0xc086275dd8aa4fa8 - .quad 0xbe1cf1c54a053627 - .quad 0xc0862760366db168 - .quad 0xbe1ceff5eb503d9e - .quad 0xc0862762937e1b70 - .quad 0xbe1cf02e47f10cee - .quad 0xc0862764efdbf768 - .quad 0xbe1ceeb06e1d0dad - .quad 0xc08627674b87ae88 - .quad 0xbe1cf10aadd6dba5 - .quad 0xc0862769a681a9c0 - .quad 0xbe1cf24e9913d30f - .quad 0xc086276c00ca51a0 - .quad 0xbe1cef47b301e312 - .quad 0xc086276e5a620e48 - .quad 0xbe1ceeb1cefc2e85 - .quad 0xc0862770b3494788 - .quad 0xbe1cf16f1fbbe011 - .quad 0xc08627730b8064e8 - .quad 0xbe1ceebdf75174c7 - .quad 0xc08627756307cd70 - .quad 0xbe1cf06e3871a0da - .quad 0xc0862777b9dfe7f0 - .quad 0xbe1cef16799fd554 - .quad 0xc086277a10091ac0 - .quad 0xbe1cf248dabf5377 - .quad 0xc086277c6583cc00 - .quad 0xbe1cf0c78d92a2cd - .quad 0xc086277eba506158 - .quad 0xbe1cf0b911b029f0 - .quad 0xc08627810e6f4028 - .quad 0xbe1cefdc24719766 - .quad 0xc086278361e0cd70 - .quad 0xbe1cefbb6562b7e7 - .quad 0xc0862785b4a56dd8 - .quad 0xbe1cf1e0afb349ec - .quad 0xc086278806bd85c0 - .quad 0xbe1cf008292e52fc - .quad 0xc086278a58297918 - .quad 0xbe1cf053073872bf - .quad 0xc086278ca8e9ab88 - .quad 0xbe1cf17a0a55a947 - .quad 0xc086278ef8fe8068 - .quad 0xbe1ceeffb0b60234 - .quad 0xc086279148685aa0 - .quad 0xbe1cf162204794a8 - .quad 0xc086279397279ce0 - .quad 0xbe1cf24cc8cb48ac - .quad 0xc0862795e53ca978 - .quad 0xbe1cf0c9be68d5c3 - .quad 0xc086279832a7e258 - .quad 0xbe1cf172cd3d7388 - .quad 0xc086279a7f69a930 - .quad 0xbe1ceea2465fbce5 - .quad 0xc086279ccb825f40 - .quad 0xbe1cf0a386d2500f - .quad 0xc086279f16f26590 - .quad 0xbe1cf1e338ddc18a - .quad 0xc08627a161ba1cd0 - .quad 0xbe1cef1f5049867f - .quad 0xc08627a3abd9e548 - .quad 0xbe1cef96c1ea8b1f - .quad 0xc08627a5f5521f00 - .quad 0xbe1cf138f6fd3c26 - .quad 0xc08627a83e2329b0 - .quad 0xbe1cf0d4fcbfdf3a - .quad 0xc08627aa864d64b0 - .quad 0xbe1cf24870c12c81 - .quad 0xc08627accdd12f18 - .quad 0xbe1cf0ae2a56348d - .quad 0xc08627af14aee7a0 - .quad 0xbe1cee8ca1a9b893 - .quad 0xc08627b15ae6eca8 - .quad 0xbe1cf20414d637b0 - .quad 0xc08627b3a0799c60 - .quad 0xbe1cf0fc6b7b12d8 - .quad 0xc08627b5e5675488 - .quad 0xbe1cf152d93c4a00 - .quad 0xc08627b829b072a0 - .quad 0xbe1cf1073f9b77c2 - .quad 0xc08627ba6d5553d8 - .quad 0xbe1cee694f97d5a4 - .quad 0xc08627bcb0565500 - .quad 0xbe1cf0456b8239d7 - .quad 0xc08627bef2b3d2b0 - .quad 0xbe1cf211497127e3 - .quad 0xc08627c1346e2930 - .quad 0xbe1cf01856c0384d - .quad 0xc08627c37585b468 - .quad 0xbe1cefa7dd05479e - .quad 0xc08627c5b5fad000 - .quad 0xbe1cef3ae8e50b93 - .quad 0xc08627c7f5cdd750 - .quad 0xbe1ceea5f32fdd3a - .quad 0xc08627ca34ff2560 - .quad 0xbe1cef424caeb8d9 - .quad 0xc08627cc738f14f0 - .quad 0xbe1cf0194d07a81f - .quad 0xc08627ceb17e0070 - .quad 0xbe1cf20f452000c1 - .quad 0xc08627d0eecc4210 - .quad 0xbe1cf00e356218e4 - .quad 0xc08627d32b7a33a0 - .quad 0xbe1cef30484b4bcb - .quad 0xc08627d567882eb0 - .quad 0xbe1ceeea11a6641b - .quad 0xc08627d7a2f68c80 - .quad 0xbe1cf13492d5bd7b - .quad 0xc08627d9ddc5a618 - .quad 0xbe1ceeb7048fad96 - .quad 0xc08627dc17f5d418 - .quad 0xbe1ceef0666f0477 - .quad 0xc08627de51876ee8 - .quad 0xbe1cf060d4b8b5c2 - .quad 0xc08627e08a7acea8 - .quad 0xbe1cf0b2a4b6ff8c - .quad 0xc08627e2c2d04b28 - .quad 0xbe1cf0e34809a875 - .quad 0xc08627e4fa883bf0 - .quad 0xbe1cf16bf74a3522 - .quad 0xc08627e731a2f848 - .quad 0xbe1cee6a24623d57 - .quad 0xc08627e96820d718 - .quad 0xbe1cefc7b4f1528e - .quad 0xc08627eb9e022f18 - .quad 0xbe1cf163051f3548 - .quad 0xc08627edd34756b8 - .quad 0xbe1cef36b3366305 - .quad 0xc08627f007f0a408 - .quad 0xbe1cf18134625550 - .quad 0xc08627f23bfe6cf0 - .quad 0xbe1cf0ec32ec1a11 - .quad 0xc08627f46f710700 - .quad 0xbe1ceeb3b64f3edc - .quad 0xc08627f6a248c778 - .quad 0xbe1cf0cd15805bc8 - .quad 0xc08627f8d4860368 - .quad 0xbe1cf20db3bddebe - .quad 0xc08627fb06290f90 - .quad 0xbe1cf25188430e25 - .quad 0xc08627fd37324070 - .quad 0xbe1ceea1713490f9 - .quad 0xc08627ff67a1ea28 - .quad 0xbe1cf159521d234c - .quad 0xc0862801977860b8 - .quad 0xbe1cf24dfe50783b - .quad 0xc0862803c6b5f7d0 - .quad 0xbe1ceef2ef89a60b - .quad 0xc0862805f55b02c8 - .quad 0xbe1cee7fc919d62c - .quad 0xc08628082367d4c0 - .quad 0xbe1cf215a7fb513a - .quad 0xc086280a50dcc0a8 - .quad 0xbe1cf0e4401c5ed4 - .quad 0xc086280c7dba1910 - .quad 0xbe1cf04ec734d256 - .quad 0xc086280eaa003050 - .quad 0xbe1cf010ad787fea - .quad 0xc0862810d5af5880 - .quad 0xbe1cee622478393d - .quad 0xc086281300c7e368 - .quad 0xbe1cf01c7482564f - .quad 0xc08628152b4a22a0 - .quad 0xbe1cf0de20d33536 - .quad 0xc086281755366778 - .quad 0xbe1cef2edae5837d - .quad 0xc08628197e8d02f0 - .quad 0xbe1cf0a345318cc9 - .quad 0xc086281ba74e45d8 - .quad 0xbe1cf20085aa34b8 - .quad 0xc086281dcf7a80c0 - .quad 0xbe1cef5fa845ad83 - .quad 0xc086281ff71203e0 - .quad 0xbe1cf050d1df69c4 - .quad 0xc08628221e151f48 - .quad 0xbe1ceffe43c035b9 - .quad 0xc0862824448422b8 - .quad 0xbe1cf14f3018d3c2 - .quad 0xc08628266a5f5dc0 - .quad 0xbe1cef0a5fbae83d - .quad 0xc08628288fa71f98 - .quad 0xbe1ceff8a95b72a1 - .quad 0xc086282ab45bb750 - .quad 0xbe1cef073aa9849b - .quad 0xc086282cd87d73a8 - .quad 0xbe1cef69b3835c02 - .quad 0xc086282efc0ca328 - .quad 0xbe1cf0bc139379a9 - .quad 0xc08628311f099420 - .quad 0xbe1cef247a9ec596 - .quad 0xc086283341749490 - .quad 0xbe1cef74bbcc488a - .quad 0xc0862835634df248 - .quad 0xbe1cef4bc42e7b8e - .quad 0xc08628378495fad0 - .quad 0xbe1cf136d4d5a810 - .quad 0xc0862839a54cfb80 - .quad 0xbe1cf0d290b24dd8 - .quad 0xc086283bc5734168 - .quad 0xbe1ceeebde8e0065 - .quad 0xc086283de5091950 - .quad 0xbe1cf1a09f60aa1e - .quad 0xc0862840040ecfe0 - .quad 0xbe1cf0803947a234 - .quad 0xc08628422284b168 - .quad 0xbe1cf0abf7638127 - .quad 0xc0862844406b0a08 - .quad 0xbe1cf0f73ee12058 - .quad 0xc08628465dc225a0 - .quad 0xbe1cf2079971b26c - .quad 0xc08628487a8a4fe0 - .quad 0xbe1cee74957564b1 - .quad 0xc086284a96c3d420 - .quad 0xbe1ceee77c1b7d43 - .quad 0xc086284cb26efd90 - .quad 0xbe1cf23addba6e09 - .quad 0xc086284ecd8c1730 - .quad 0xbe1cf199f4a1da60 - .quad 0xc0862850e81b6bb0 - .quad 0xbe1cf09fdea81393 - .quad 0xc0862853021d4588 - .quad 0xbe1cf176adb417f7 - .quad 0xc08628551b91ef00 - .quad 0xbe1cf0f64f84a8da - .quad 0xc08628573479b220 - .quad 0xbe1ceec34cf49523 - .quad 0xc08628594cd4d8a8 - .quad 0xbe1cf16d60fbe0bb - .quad 0xc086285b64a3ac40 - .quad 0xbe1cee8de7acfc7b - .quad 0xc086285d7be67630 - .quad 0xbe1ceee6256cce8d - .quad 0xc086285f929d7fa0 - .quad 0xbe1cee7d66a3d8a5 - .quad 0xc0862861a8c91170 - .quad 0xbe1cf0bef8265792 - .quad 0xc0862863be697458 - .quad 0xbe1cf097f890c6f8 - .quad 0xc0862865d37ef0c8 - .quad 0xbe1cf09502d5c3fc - .quad 0xc0862867e809cf00 - .quad 0xbe1ceeffb239dac7 - .quad 0xc0862869fc0a56f8 - .quad 0xbe1cf1fbfff95c98 - .quad 0xc086286c0f80d090 - .quad 0xbe1cefa57ad3eef7 - .quad 0xc086286e226d8348 - .quad 0xbe1cf22c58b9183d - .quad 0xc086287034d0b690 - .quad 0xbe1ceff262d0a248 - .quad 0xc086287246aab180 - .quad 0xbe1cefa7bc194186 - .quad 0xc086287457fbbb08 - .quad 0xbe1cf06782d784d9 - .quad 0xc086287668c419e0 - .quad 0xbe1cf1d44d0eaa07 - .quad 0xc086287879041490 - .quad 0xbe1cf034803c8a48 - .quad 0xc086287a88bbf158 - .quad 0xbe1cf08e84916b6f - .quad 0xc086287c97ebf650 - .quad 0xbe1cf0c4d3dc1bc7 - .quad 0xc086287ea6946958 - .quad 0xbe1cefb1e4625943 - .quad 0xc0862880b4b59010 - .quad 0xbe1cf143efdd1fd0 - .quad 0xc0862882c24faff8 - .quad 0xbe1cee9896d016da - .quad 0xc0862884cf630e38 - .quad 0xbe1cf2186072f2cc - .quad 0xc0862886dbefeff0 - .quad 0xbe1cef9217633d34 - .quad 0xc0862888e7f699e0 - .quad 0xbe1cf05603549486 - .quad 0xc086288af37750b0 - .quad 0xbe1cef50fff513d3 - .quad 0xc086288cfe7258c0 - .quad 0xbe1cf127713b32d0 - .quad 0xc086288f08e7f650 - .quad 0xbe1cf05015520f3d - .quad 0xc086289112d86d58 - .quad 0xbe1cf12eb458b26f - .quad 0xc08628931c4401a8 - .quad 0xbe1cf22eae2887ed - .quad 0xc0862895252af6e0 - .quad 0xbe1cefdd6656dd2d - .quad 0xc08628972d8d9058 - .quad 0xbe1cf1048ea4e646 - .quad 0xc0862899356c1150 - .quad 0xbe1ceec4501167e9 - .quad 0xc086289b3cc6bcb8 - .quad 0xbe1cf0ad52becc3f - .quad 0xc086289d439dd568 - .quad 0xbe1cf0daa4e00e35 - .quad 0xc086289f49f19df8 - .quad 0xbe1cf00b80de8d6a - .quad 0xc08628a14fc258c8 - .quad 0xbe1cf1bcf2ea8464 - .quad 0xc08628a355104818 - .quad 0xbe1cf0435e2782b0 - .quad 0xc08628a559dbade0 - .quad 0xbe1cf0e3e1a5f56c - .quad 0xc08628a75e24cbf8 - .quad 0xbe1cefed9d5a721d - .quad 0xc08628a961ebe3f8 - .quad 0xbe1cf0d2d74321e2 - .quad 0xc08628ab65313750 - .quad 0xbe1cf24200eb55e9 - .quad 0xc08628ad67f50740 - .quad 0xbe1cf23e9d7cf979 - .quad 0xc08628af6a3794d0 - .quad 0xbe1cf23a088f421c - .quad 0xc08628b16bf920e0 - .quad 0xbe1cef2c1de1ab32 - .quad 0xc08628b36d39ec08 - .quad 0xbe1cf1abc231f7b2 - .quad 0xc08628b56dfa36d0 - .quad 0xbe1cf2074d5ba303 - .quad 0xc08628b76e3a4180 - .quad 0xbe1cf05cd5eed880 - .rept 48 - .byte 0 - .endr - -/* Log(2) lookup table for logarithmic part */ -.if .-__svml_spow_data != _Log_LA_table -.err -.endif - .quad 0x8000000000000000 - .quad 0xbf5ff802a9ab10e6 - .quad 0xbf6ff00aa2b10bc0 - .quad 0xbf77ee11ebd82e94 - .quad 0xbf7fe02a6b106789 - .quad 0xbf83e7295d25a7d9 - .quad 0xbf87dc475f810a77 - .quad 0xbf8bcf712c74384c - .quad 0xbf8fc0a8b0fc03e4 - .quad 0xbf91d7f7eb9eebe7 - .quad 0xbf93cea44346a575 - .quad 0xbf95c45a51b8d389 - .quad 0xbf97b91b07d5b11b - .quad 0xbf99ace7551cc514 - .quad 0xbf9b9fc027af9198 - .quad 0xbf9d91a66c543cc4 - .quad 0xbf9f829b0e783300 - .quad 0xbfa0b94f7c196176 - .quad 0xbfa1b0d98923d980 - .quad 0xbfa2a7ec2214e873 - .quad 0xbfa39e87b9febd60 - .quad 0xbfa494acc34d911c - .quad 0xbfa58a5bafc8e4d5 - .quad 0xbfa67f94f094bd98 - .quad 0xbfa77458f632dcfc - .quad 0xbfa868a83083f6cf - .quad 0xbfa95c830ec8e3eb - .quad 0xbfaa4fe9ffa3d235 - .quad 0xbfab42dd711971bf - .quad 0xbfac355dd0921f2d - .quad 0xbfad276b8adb0b52 - .quad 0xbfae19070c276016 - .quad 0xbfaf0a30c01162a6 - .quad 0xbfaffae9119b9303 - .quad 0xbfb075983598e471 - .quad 0xbfb0ed839b5526fe - .quad 0xbfb16536eea37ae1 - .quad 0xbfb1dcb263db1944 - .quad 0xbfb253f62f0a1417 - .quad 0xbfb2cb0283f5de1f - .quad 0xbfb341d7961bd1d1 - .quad 0xbfb3b87598b1b6ee - .quad 0xbfb42edcbea646f0 - .quad 0xbfb4a50d3aa1b040 - .quad 0xbfb51b073f06183f - .quad 0xbfb590cafdf01c28 - .quad 0xbfb60658a93750c4 - .quad 0xbfb67bb0726ec0fc - .quad 0xbfb6f0d28ae56b4c - .quad 0xbfb765bf23a6be13 - .quad 0xbfb7da766d7b12cd - .quad 0xbfb84ef898e8282a - .quad 0xbfb8c345d6319b21 - .quad 0xbfb9375e55595ede - .quad 0xbfb9ab42462033ad - .quad 0xbfba1ef1d8061cd4 - .quad 0xbfba926d3a4ad563 - .quad 0xbfbb05b49bee43fe - .quad 0xbfbb78c82bb0eda1 - .quad 0xbfbbeba818146765 - .quad 0xbfbc5e548f5bc743 - .quad 0xbfbcd0cdbf8c13e1 - .quad 0xbfbd4313d66cb35d - .quad 0xbfbdb5270187d927 - .quad 0xbfbe27076e2af2e6 - .quad 0xbfbe98b549671467 - .quad 0xbfbf0a30c01162a6 - .quad 0xbfbf7b79fec37ddf - .quad 0xbfbfec9131dbeabb - .quad 0xbfc02ebb42bf3d4b - .quad 0xbfc0671512ca596e - .quad 0xbfc09f561ee719c3 - .quad 0xbfc0d77e7cd08e59 - .quad 0xbfc10f8e422539b1 - .quad 0xbfc14785846742ac - .quad 0xbfc17f6458fca611 - .quad 0xbfc1b72ad52f67a0 - .quad 0xbfc1eed90e2dc2c3 - .quad 0xbfc2266f190a5acb - .quad 0xbfc25ded0abc6ad2 - .quad 0xbfc29552f81ff523 - .quad 0xbfc2cca0f5f5f251 - .quad 0xbfc303d718e47fd3 - .quad 0xbfc33af575770e4f - .quad 0xbfc371fc201e8f74 - .quad 0xbfc3a8eb2d31a376 - .quad 0xbfc3dfc2b0ecc62a - .quad 0xbfc41682bf727bc0 - .quad 0xbfc44d2b6ccb7d1e - .quad 0xbfc483bccce6e3dd - .quad 0xbfc4ba36f39a55e5 - .quad 0xbfc4f099f4a230b2 - .quad 0xbfc526e5e3a1b438 - .quad 0xbfc55d1ad4232d6f - .quad 0xbfc59338d9982086 - .quad 0xbfc5c940075972b9 - .quad 0xbfc5ff3070a793d4 - .quad 0xbfc6350a28aaa758 - .quad 0xbfc66acd4272ad51 - .quad 0xbfc6a079d0f7aad2 - .quad 0xbfc6d60fe719d21d - .quad 0xbfc70b8f97a1aa75 - .quad 0xbfc740f8f54037a5 - .quad 0xbfc7764c128f2127 - .quad 0xbfc7ab890210d909 - .quad 0xbfc7e0afd630c274 - .quad 0xbfc815c0a14357eb - .quad 0xbfc84abb75865139 - .quad 0xbfc87fa06520c911 - .quad 0xbfc8b46f8223625b - .quad 0xbfc8e928de886d41 - .quad 0xbfc91dcc8c340bde - .quad 0xbfc9525a9cf456b4 - .quad 0xbfc986d3228180ca - .quad 0xbfc9bb362e7dfb83 - .quad 0xbfc9ef83d2769a34 - .quad 0xbfca23bc1fe2b563 - .quad 0xbfca57df28244dcd - .quad 0xbfca8becfc882f19 - .quad 0xbfcabfe5ae46124c - .quad 0xbfcaf3c94e80bff3 - .quad 0xbfcb2797ee46320c - .quad 0xbfcb5b519e8fb5a4 - .quad 0xbfcb8ef670420c3b - .quad 0xbfcbc286742d8cd6 - .quad 0xbfcbf601bb0e44e2 - .quad 0xbfcc2968558c18c1 - .quad 0xbfcc5cba543ae425 - .quad 0xbfcc8ff7c79a9a22 - .quad 0xbfccc320c0176502 - .quad 0xbfccf6354e09c5dc - .quad 0xbfcd293581b6b3e7 - .quad 0xbfcd5c216b4fbb91 - .quad 0xbfcd8ef91af31d5e - .quad 0xbfcdc1bca0abec7d - .quad 0xbfcdf46c0c722d2f - .quad 0xbfce27076e2af2e6 - .quad 0xbfce598ed5a87e2f - .quad 0xbfce8c0252aa5a60 - .quad 0xbfcebe61f4dd7b0b - .quad 0xbfcef0adcbdc5936 - .quad 0xbfcf22e5e72f105d - .quad 0xbfcf550a564b7b37 - .quad 0xbfcf871b28955045 - .quad 0xbfcfb9186d5e3e2b - .quad 0xbfcfeb0233e607cc - .quad 0xbfd00e6c45ad501d - .quad 0xbfd0274dc16c232f - .quad 0xbfd0402594b4d041 - .quad 0xbfd058f3c703ebc6 - .quad 0xbfd071b85fcd590d - .quad 0xbfd08a73667c57af - .quad 0xbfd0a324e27390e3 - .quad 0xbfd0bbccdb0d24bd - .quad 0xbfd0d46b579ab74b - .quad 0xbfd0ed005f657da4 - .quad 0xbfd1058bf9ae4ad5 - .quad 0xbfd11e0e2dad9cb7 - .quad 0xbfd136870293a8b0 - .quad 0xbfd14ef67f88685a - .quad 0xbfd1675cababa60e - .quad 0xbfd17fb98e15095d - .quad 0xbfd1980d2dd4236f - .quad 0xbfd1b05791f07b49 - .quad 0xbfd1c898c16999fb - .quad 0xbfd1e0d0c33716be - .quad 0xbfd1f8ff9e48a2f3 - .quad 0xbfd211255986160c - .quad 0xbfd22941fbcf7966 - .quad 0xbfd241558bfd1404 - .quad 0xbfd2596010df763a - .quad 0xbfd27161913f853d - .quad 0xbfd2895a13de86a3 - .quad 0xbfd2a1499f762bc9 - .quad 0xbfd2b9303ab89d25 - .quad 0xbfd2d10dec508583 - .quad 0xbfd2e8e2bae11d31 - .quad 0xbfd300aead06350c - .quad 0xbfd31871c9544185 - .quad 0xbfd3302c16586588 - .quad 0xbfd347dd9a987d55 - .quad 0xbfd35f865c93293e - .quad 0xbfd3772662bfd85b - .quad 0xbfd38ebdb38ed321 - .quad 0xbfd3a64c556945ea - .quad 0xbfd3bdd24eb14b6a - .quad 0xbfd3d54fa5c1f710 - .quad 0xbfd3ecc460ef5f50 - .quad 0xbfd404308686a7e4 - .quad 0xbfd41b941cce0bee - .quad 0xbfd432ef2a04e814 - .quad 0xbfd44a41b463c47c - .quad 0xbfd4618bc21c5ec2 - .quad 0xbfd478cd5959b3d9 - .quad 0xbfd49006804009d1 - .quad 0xbfd4a7373cecf997 - .quad 0xbfd4be5f957778a1 - .quad 0xbfd4d57f8fefe27f - .quad 0xbfd4ec973260026a - .quad 0xbfd503a682cb1cb3 - .quad 0xbfd51aad872df82d - .quad 0xbfd531ac457ee77e - .quad 0xbfd548a2c3add263 - .quad 0xbfd55f9107a43ee2 - .quad 0xbfd5767717455a6c - .quad 0xbfd58d54f86e02f2 - .quad 0xbfd5a42ab0f4cfe2 - .quad 0xbfd5baf846aa1b19 - .quad 0xbfd5d1bdbf5809ca - .quad 0xbfd5e87b20c2954a - .quad 0xbfd5ff3070a793d4 - .quad 0xbfd615ddb4bec13c - .quad 0xbfd62c82f2b9c795 - .quad 0x3fd61965cdb02c1f - .quad 0x3fd602d08af091ec - .quad 0x3fd5ec433d5c35ae - .quad 0x3fd5d5bddf595f30 - .quad 0x3fd5bf406b543db2 - .quad 0x3fd5a8cadbbedfa1 - .quad 0x3fd5925d2b112a59 - .quad 0x3fd57bf753c8d1fb - .quad 0x3fd565995069514c - .quad 0x3fd54f431b7be1a9 - .quad 0x3fd538f4af8f72fe - .quad 0x3fd522ae0738a3d8 - .quad 0x3fd50c6f1d11b97c - .quad 0x3fd4f637ebba9810 - .quad 0x3fd4e0086dd8baca - .quad 0x3fd4c9e09e172c3c - .quad 0x3fd4b3c077267e9a - .quad 0x3fd49da7f3bcc41f - .quad 0x3fd487970e958770 - .quad 0x3fd4718dc271c41b - .quad 0x3fd45b8c0a17df13 - .quad 0x3fd44591e0539f49 - .quad 0x3fd42f9f3ff62642 - .quad 0x3fd419b423d5e8c7 - .quad 0x3fd403d086cea79c - .quad 0x3fd3edf463c1683e - .quad 0x3fd3d81fb5946dba - .quad 0x3fd3c25277333184 - .quad 0x3fd3ac8ca38e5c5f - .quad 0x3fd396ce359bbf54 - .quad 0x3fd3811728564cb2 - .quad 0x3fd36b6776be1117 - .quad 0x3fd355bf1bd82c8b - .quad 0x3fd3401e12aecba1 - .quad 0x3fd32a84565120a8 - .quad 0x3fd314f1e1d35ce4 - .quad 0x3fd2ff66b04ea9d4 - .quad 0x3fd2e9e2bce12286 - .quad 0x3fd2d46602adccee - .quad 0x3fd2bef07cdc9354 - .quad 0x3fd2a982269a3dbf - .quad 0x3fd2941afb186b7c - .quad 0x3fd27ebaf58d8c9d - .quad 0x3fd269621134db92 - .quad 0x3fd25410494e56c7 - .quad 0x3fd23ec5991eba49 - .quad 0x3fd22981fbef797b - .quad 0x3fd214456d0eb8d4 - .quad 0x3fd1ff0fe7cf47a7 - .quad 0x3fd1e9e1678899f4 - .quad 0x3fd1d4b9e796c245 - .quad 0x3fd1bf99635a6b95 - .quad 0x3fd1aa7fd638d33f - .quad 0x3fd1956d3b9bc2fa - .quad 0x3fd180618ef18adf - .quad 0x3fd16b5ccbacfb73 - .quad 0x3fd1565eed455fc3 - .quad 0x3fd14167ef367783 - .quad 0x3fd12c77cd00713b - .quad 0x3fd1178e8227e47c - .quad 0x3fd102ac0a35cc1c - .quad 0x3fd0edd060b78081 - .quad 0x3fd0d8fb813eb1ef - .quad 0x3fd0c42d676162e3 - .quad 0x3fd0af660eb9e279 - .quad 0x3fd09aa572e6c6d4 - .quad 0x3fd085eb8f8ae797 - .quad 0x3fd07138604d5862 - .quad 0x3fd05c8be0d9635a - .quad 0x3fd047e60cde83b8 - .quad 0x3fd03346e0106062 - .quad 0x3fd01eae5626c691 - .quad 0x3fd00a1c6adda473 - .quad 0x3fcfeb2233ea07cd - .quad 0x3fcfc218be620a5e - .quad 0x3fcf991c6cb3b379 - .quad 0x3fcf702d36777df0 - .quad 0x3fcf474b134df229 - .quad 0x3fcf1e75fadf9bde - .quad 0x3fcef5ade4dcffe6 - .quad 0x3fceccf2c8fe920a - .quad 0x3fcea4449f04aaf5 - .quad 0x3fce7ba35eb77e2a - .quad 0x3fce530effe71012 - .quad 0x3fce2a877a6b2c12 - .quad 0x3fce020cc6235ab5 - .quad 0x3fcdd99edaf6d7e9 - .quad 0x3fcdb13db0d48940 - .quad 0x3fcd88e93fb2f450 - .quad 0x3fcd60a17f903515 - .quad 0x3fcd38666871f465 - .quad 0x3fcd1037f2655e7b - .quad 0x3fcce816157f1988 - .quad 0x3fccc000c9db3c52 - .quad 0x3fcc97f8079d44ec - .quad 0x3fcc6ffbc6f00f71 - .quad 0x3fcc480c0005ccd1 - .quad 0x3fcc2028ab17f9b4 - .quad 0x3fcbf851c067555f - .quad 0x3fcbd087383bd8ad - .quad 0x3fcba8c90ae4ad19 - .quad 0x3fcb811730b823d2 - .quad 0x3fcb5971a213acdb - .quad 0x3fcb31d8575bce3d - .quad 0x3fcb0a4b48fc1b46 - .quad 0x3fcae2ca6f672bd4 - .quad 0x3fcabb55c31693ad - .quad 0x3fca93ed3c8ad9e3 - .quad 0x3fca6c90d44b704e - .quad 0x3fca454082e6ab05 - .quad 0x3fca1dfc40f1b7f1 - .quad 0x3fc9f6c407089664 - .quad 0x3fc9cf97cdce0ec3 - .quad 0x3fc9a8778debaa38 - .quad 0x3fc981634011aa75 - .quad 0x3fc95a5adcf7017f - .quad 0x3fc9335e5d594989 - .quad 0x3fc90c6db9fcbcd9 - .quad 0x3fc8e588ebac2dbf - .quad 0x3fc8beafeb38fe8c - .quad 0x3fc897e2b17b19a5 - .quad 0x3fc871213750e994 - .quad 0x3fc84a6b759f512f - .quad 0x3fc823c16551a3c2 - .quad 0x3fc7fd22ff599d4f - .quad 0x3fc7d6903caf5ad0 - .quad 0x3fc7b0091651528c - .quad 0x3fc7898d85444c73 - .quad 0x3fc7631d82935a86 - .quad 0x3fc73cb9074fd14d - .quad 0x3fc716600c914054 - .quad 0x3fc6f0128b756abc - .quad 0x3fc6c9d07d203fc7 - .quad 0x3fc6a399dabbd383 - .quad 0x3fc67d6e9d785771 - .quad 0x3fc6574ebe8c133a - .quad 0x3fc6313a37335d76 - .quad 0x3fc60b3100b09476 - .quad 0x3fc5e533144c1719 - .quad 0x3fc5bf406b543db2 - .quad 0x3fc59958ff1d52f1 - .quad 0x3fc5737cc9018cdd - .quad 0x3fc54dabc26105d2 - .quad 0x3fc527e5e4a1b58d - .quad 0x3fc5022b292f6a45 - .quad 0x3fc4dc7b897bc1c8 - .quad 0x3fc4b6d6fefe22a4 - .quad 0x3fc4913d8333b561 - .quad 0x3fc46baf0f9f5db7 - .quad 0x3fc4462b9dc9b3dc - .quad 0x3fc420b32740fdd4 - .quad 0x3fc3fb45a59928cc - .quad 0x3fc3d5e3126bc27f - .quad 0x3fc3b08b6757f2a9 - .quad 0x3fc38b3e9e027479 - .quad 0x3fc365fcb0159016 - .quad 0x3fc340c59741142e - .quad 0x3fc31b994d3a4f85 - .quad 0x3fc2f677cbbc0a96 - .quad 0x3fc2d1610c86813a - .quad 0x3fc2ac55095f5c59 - .quad 0x3fc28753bc11aba5 - .quad 0x3fc2625d1e6ddf57 - .quad 0x3fc23d712a49c202 - .quad 0x3fc2188fd9807263 - .quad 0x3fc1f3b925f25d41 - .quad 0x3fc1ceed09853752 - .quad 0x3fc1aa2b7e23f72a - .quad 0x3fc185747dbecf34 - .quad 0x3fc160c8024b27b1 - .quad 0x3fc13c2605c398c3 - .quad 0x3fc1178e8227e47c - .quad 0x3fc0f301717cf0fb - .quad 0x3fc0ce7ecdccc28d - .quad 0x3fc0aa06912675d5 - .quad 0x3fc08598b59e3a07 - .quad 0x3fc06135354d4b18 - .quad 0x3fc03cdc0a51ec0d - .quad 0x3fc0188d2ecf6140 - .quad 0x3fbfe89139dbd566 - .quad 0x3fbfa01c9db57ce2 - .quad 0x3fbf57bc7d9005db - .quad 0x3fbf0f70cdd992e3 - .quad 0x3fbec739830a1120 - .quad 0x3fbe7f1691a32d3e - .quad 0x3fbe3707ee30487b - .quad 0x3fbdef0d8d466db9 - .quad 0x3fbda727638446a2 - .quad 0x3fbd5f55659210e2 - .quad 0x3fbd179788219364 - .quad 0x3fbccfedbfee13a8 - .quad 0x3fbc885801bc4b23 - .quad 0x3fbc40d6425a5cb1 - .quad 0x3fbbf968769fca11 - .quad 0x3fbbb20e936d6974 - .quad 0x3fbb6ac88dad5b1c - .quad 0x3fbb23965a52ff00 - .quad 0x3fbadc77ee5aea8c - .quad 0x3fba956d3ecade63 - .quad 0x3fba4e7640b1bc38 - .quad 0x3fba0792e9277cac - .quad 0x3fb9c0c32d4d2548 - .quad 0x3fb97a07024cbe74 - .quad 0x3fb9335e5d594989 - .quad 0x3fb8ecc933aeb6e8 - .quad 0x3fb8a6477a91dc29 - .quad 0x3fb85fd927506a48 - .quad 0x3fb8197e2f40e3f0 - .quad 0x3fb7d33687c293c9 - .quad 0x3fb78d02263d82d3 - .quad 0x3fb746e100226ed9 - .quad 0x3fb700d30aeac0e1 - .quad 0x3fb6bad83c1883b6 - .quad 0x3fb674f089365a7a - .quad 0x3fb62f1be7d77743 - .quad 0x3fb5e95a4d9791cb - .quad 0x3fb5a3abb01ade25 - .quad 0x3fb55e10050e0384 - .quad 0x3fb518874226130a - .quad 0x3fb4d3115d207eac - .quad 0x3fb48dae4bc31018 - .quad 0x3fb4485e03dbdfad - .quad 0x3fb403207b414b7f - .quad 0x3fb3bdf5a7d1ee64 - .quad 0x3fb378dd7f749714 - .quad 0x3fb333d7f8183f4b - .quad 0x3fb2eee507b40301 - .quad 0x3fb2aa04a44717a5 - .quad 0x3fb26536c3d8c369 - .quad 0x3fb2207b5c78549e - .quad 0x3fb1dbd2643d190b - .quad 0x3fb1973bd1465567 - .quad 0x3fb152b799bb3cc9 - .quad 0x3fb10e45b3cae831 - .quad 0x3fb0c9e615ac4e17 - .quad 0x3fb08598b59e3a07 - .quad 0x3fb0415d89e74444 - .quad 0x3faffa6911ab9301 - .quad 0x3faf723b517fc523 - .quad 0x3faeea31c006b87c - .quad 0x3fae624c4a0b5e1b - .quad 0x3fadda8adc67ee4e - .quad 0x3fad52ed6405d86f - .quad 0x3faccb73cdddb2cc - .quad 0x3fac441e06f72a9e - .quad 0x3fabbcebfc68f420 - .quad 0x3fab35dd9b58baad - .quad 0x3faaaef2d0fb10fc - .quad 0x3faa282b8a936171 - .quad 0x3fa9a187b573de7c - .quad 0x3fa91b073efd7314 - .quad 0x3fa894aa149fb343 - .quad 0x3fa80e7023d8ccc4 - .quad 0x3fa788595a3577ba - .quad 0x3fa70265a550e777 - .quad 0x3fa67c94f2d4bb58 - .quad 0x3fa5f6e73078efb8 - .quad 0x3fa5715c4c03ceef - .quad 0x3fa4ebf43349e26f - .quad 0x3fa466aed42de3ea - .quad 0x3fa3e18c1ca0ae92 - .quad 0x3fa35c8bfaa1306b - .quad 0x3fa2d7ae5c3c5bae - .quad 0x3fa252f32f8d183f - .quad 0x3fa1ce5a62bc353a - .quad 0x3fa149e3e4005a8d - .quad 0x3fa0c58fa19dfaaa - .quad 0x3fa0415d89e74444 - .quad 0x3f9f7a9b16782856 - .quad 0x3f9e72bf2813ce51 - .quad 0x3f9d6b2725979802 - .quad 0x3f9c63d2ec14aaf2 - .quad 0x3f9b5cc258b718e6 - .quad 0x3f9a55f548c5c43f - .quad 0x3f994f6b99a24475 - .quad 0x3f98492528c8cabf - .quad 0x3f974321d3d006d3 - .quad 0x3f963d6178690bd6 - .quad 0x3f9537e3f45f3565 - .quad 0x3f9432a925980cc1 - .quad 0x3f932db0ea132e22 - .quad 0x3f9228fb1fea2e28 - .quad 0x3f912487a5507f70 - .quad 0x3f90205658935847 - .quad 0x3f8e38ce3033310c - .quad 0x3f8c317384c75f06 - .quad 0x3f8a2a9c6c170462 - .quad 0x3f882448a388a2aa - .quad 0x3f861e77e8b53fc6 - .quad 0x3f841929f96832f0 - .quad 0x3f82145e939ef1e9 - .quad 0x3f8010157588de71 - .quad 0x3f7c189cbb0e27fb - .quad 0x3f78121214586b54 - .quad 0x3f740c8a747878e2 - .quad 0x3f70080559588b35 - .quad 0x3f680904828985c0 - .quad 0x3f60040155d5889e - .quad 0x3f50020055655889 - .quad 0x0000000000000000 - .rept 56 - .byte 0 - .endr - -/* Polynomial coefficients for log part: - * coeff4 */ -double_vector _poly_coeff_1 0x3fc9999cacdb4d0a - -/* coeff3 */ -double_vector _poly_coeff_2 0xbfd0000148058ee1 - -/* coeff2 */ -double_vector _poly_coeff_3 0x3fd55555555543c5 - -/* coeff1 */ -double_vector _poly_coeff_4 0xbfdffffffffff81f - -/* General purpose constants for log part: ExpMask */ -double_vector _ExpMask 0x000fffffffffffff - -/* Two10 */ -double_vector _Two10 0x3f50000000000000 - -/* MinNorm */ -double_vector _MinNorm 0x0010000000000000 - -/* MaxNorm */ -double_vector _MaxNorm 0x7fefffffffffffff - -/* HalfMask */ -double_vector _HalfMask 0xfffffffffc000000 - -/* One */ -double_vector _One 0x3ff0000000000000 - -/* L2H */ -double_vector _L2H 0x3fe62e42fefa0000 - -/* L2L */ -double_vector _L2L 0x3d7cf79abc9e0000 - -/* Threshold */ -double_vector _Threshold 0x4086a00000000000 - -/* Bias */ -double_vector _Bias 0x408ff80000000000 - -/* Bias1 */ -double_vector _Bias1 0x408ff00000000000 - -/* L2L */ -double_vector _L2 0x3fe62e42fefa39ef - -/* dInfs = DP infinity, +/- == */ -.if .-__svml_spow_data != _dInfs -.err -.endif - .quad 0x7ff0000000000000 - .quad 0xfff0000000000000 - .rept 48 - .byte 0 - .endr - -/* dOnes = DP one, +/- == */ -.if .-__svml_spow_data != _dOnes -.err -.endif - .quad 0x3ff0000000000000 - .quad 0xbff0000000000000 - .rept 48 - .byte 0 - .endr - -/* dZeros = DP zero +/- == */ -.if .-__svml_spow_data != _dZeros -.err -.endif - .quad 0x0000000000000000 - .quad 0x8000000000000000 - .rept 48 - .byte 0 - .endr -.if .-__svml_spow_data != __dbT -.err -.endif - .quad 0x3feffffffc27dd9e - .quad 0x3ff00162f1a4047d - .quad 0x3ff002c603f68252 - .quad 0x3ff00429350e12af - .quad 0x3ff0058c84ed6032 - .quad 0x3ff006eff39715b2 - .quad 0x3ff00853810dde41 - .quad 0x3ff009b72d54652f - .quad 0x3ff00b1af86d5604 - .quad 0x3ff00c7ee25b5c86 - .quad 0x3ff00de2eb2124b3 - .quad 0x3ff00f4712c15ac8 - .quad 0x3ff010ab593eab39 - .quad 0x3ff0120fbe9bc2ba - .quad 0x3ff0137442db4e38 - .quad 0x3ff014d8e5fffada - .quad 0x3ff0163da80c7604 - .quad 0x3ff017a289036d56 - .quad 0x3ff0190788e78eab - .quad 0x3ff01a6ca7bb8818 - .quad 0x3ff01bd1e58207ef - .quad 0x3ff01d37423dbcbc - .quad 0x3ff01e9cbdf15549 - .quad 0x3ff02002589f8099 - .quad 0x3ff02168124aedec - .quad 0x3ff022cdeaf64cbc - .quad 0x3ff02433e2a44cc1 - .quad 0x3ff02599f9579ded - .quad 0x3ff027002f12f06d - .quad 0x3ff0286683d8f4ac - .quad 0x3ff029ccf7ac5b4d - .quad 0x3ff02b338a8fd532 - .quad 0x3ff02c9a3c861379 - .quad 0x3ff02e010d91c778 - .quad 0x3ff02f67fdb5a2c4 - .quad 0x3ff030cf0cf4572d - .quad 0x3ff032363b5096bc - .quad 0x3ff0339d88cd13bc - .quad 0x3ff03504f56c80ae - .quad 0x3ff0366c81319053 - .quad 0x3ff037d42c1ef5a2 - .quad 0x3ff0393bf63763d5 - .quad 0x3ff03aa3df7d8e5f - .quad 0x3ff03c0be7f428eb - .quad 0x3ff03d740f9de766 - .quad 0x3ff03edc567d7df7 - .quad 0x3ff04044bc95a0fe - .quad 0x3ff041ad41e9051d - .quad 0x3ff04315e67a5f2a - .quad 0x3ff0447eaa4c643e - .quad 0x3ff045e78d61c9ac - .quad 0x3ff047508fbd4502 - .quad 0x3ff048b9b1618c0b - .quad 0x3ff04a22f25154cd - .quad 0x3ff04b8c528f558b - .quad 0x3ff04cf5d21e44c4 - .quad 0x3ff04e5f7100d935 - .quad 0x3ff04fc92f39c9d4 - .quad 0x3ff051330ccbcdd5 - .quad 0x3ff0529d09b99ca8 - .quad 0x3ff054072605edfb - .quad 0x3ff0557161b379b3 - .quad 0x3ff056dbbcc4f7f8 - .quad 0x3ff05846373d212a - .quad 0x3ff059b0d11eade5 - .quad 0x3ff05b1b8a6c5706 - .quad 0x3ff05c866328d5a2 - .quad 0x3ff05df15b56e30a - .quad 0x3ff05f5c72f938cf - .quad 0x3ff060c7aa1290bd - .quad 0x3ff0623300a5a4db - .quad 0x3ff0639e76b52f6e - .quad 0x3ff0650a0c43eaf6 - .quad 0x3ff06675c1549232 - .quad 0x3ff067e195e9e01a - .quad 0x3ff0694d8a068fe7 - .quad 0x3ff06ab99dad5d0c - .quad 0x3ff06c25d0e10338 - .quad 0x3ff06d9223a43e58 - .quad 0x3ff06efe95f9ca95 - .quad 0x3ff0706b27e46455 - .quad 0x3ff071d7d966c83a - .quad 0x3ff07344aa83b324 - .quad 0x3ff074b19b3de22f - .quad 0x3ff0761eab9812b4 - .quad 0x3ff0778bdb950247 - .quad 0x3ff078f92b376ebc - .quad 0x3ff07a669a821621 - .quad 0x3ff07bd42977b6c4 - .quad 0x3ff07d41d81b0f2b - .quad 0x3ff07eafa66ede1e - .quad 0x3ff0801d9475e2a0 - .quad 0x3ff0818ba232dbee - .quad 0x3ff082f9cfa88985 - .quad 0x3ff084681cd9ab21 - .quad 0x3ff085d689c900b6 - .quad 0x3ff0874516794a79 - .quad 0x3ff088b3c2ed48d9 - .quad 0x3ff08a228f27bc86 - .quad 0x3ff08b917b2b6667 - .quad 0x3ff08d0086fb07a6 - .quad 0x3ff08e6fb29961a8 - .quad 0x3ff08fdefe09360d - .quad 0x3ff0914e694d46b6 - .quad 0x3ff092bdf46855c0 - .quad 0x3ff0942d9f5d2582 - .quad 0x3ff0959d6a2e7893 - .quad 0x3ff0970d54df11c8 - .quad 0x3ff0987d5f71b432 - .quad 0x3ff099ed89e9231e - .quad 0x3ff09b5dd448221a - .quad 0x3ff09cce3e9174ec - .quad 0x3ff09e3ec8c7df9d - .quad 0x3ff09faf72ee2670 - .quad 0x3ff0a1203d070de5 - .quad 0x3ff0a29127155abd - .quad 0x3ff0a402311bd1f0 - .quad 0x3ff0a5735b1d38bb - .quad 0x3ff0a6e4a51c5493 - .quad 0x3ff0a8560f1beb2c - .quad 0x3ff0a9c7991ec278 - .quad 0x3ff0ab394327a0a7 - .quad 0x3ff0acab0d394c25 - .quad 0x3ff0ae1cf7568b9d - .quad 0x3ff0af8f018225f7 - .quad 0x3ff0b1012bbee259 - .quad 0x3ff0b273760f8825 - .quad 0x3ff0b3e5e076defc - .quad 0x3ff0b5586af7aebc - .quad 0x3ff0b6cb1594bf84 - .quad 0x3ff0b83de050d9ab - .quad 0x3ff0b9b0cb2ec5ca - .quad 0x3ff0bb23d6314cb7 - .quad 0x3ff0bc97015b3783 - .quad 0x3ff0be0a4caf4f81 - .quad 0x3ff0bf7db8305e3f - .quad 0x3ff0c0f143e12d8a - .quad 0x3ff0c264efc4876c - .quad 0x3ff0c3d8bbdd362e - .quad 0x3ff0c54ca82e0455 - .quad 0x3ff0c6c0b4b9bca6 - .quad 0x3ff0c834e1832a24 - .quad 0x3ff0c9a92e8d180e - .quad 0x3ff0cb1d9bda51e1 - .quad 0x3ff0cc92296da35b - .quad 0x3ff0ce06d749d876 - .quad 0x3ff0cf7ba571bd6a - .quad 0x3ff0d0f093e81eab - .quad 0x3ff0d265a2afc8f1 - .quad 0x3ff0d3dad1cb892b - .quad 0x3ff0d550213e2c8c - .quad 0x3ff0d6c5910a8081 - .quad 0x3ff0d83b213352b8 - .quad 0x3ff0d9b0d1bb711b - .quad 0x3ff0db26a2a5a9d4 - .quad 0x3ff0dc9c93f4cb4a - .quad 0x3ff0de12a5aba423 - .quad 0x3ff0df88d7cd0344 - .quad 0x3ff0e0ff2a5bb7cd - .quad 0x3ff0e2759d5a9121 - .quad 0x3ff0e3ec30cc5edd - .quad 0x3ff0e562e4b3f0df - .quad 0x3ff0e6d9b9141745 - .quad 0x3ff0e850adefa265 - .quad 0x3ff0e9c7c34962db - .quad 0x3ff0eb3ef924297d - .quad 0x3ff0ecb64f82c75e - .quad 0x3ff0ee2dc6680dd6 - .quad 0x3ff0efa55dd6ce75 - .quad 0x3ff0f11d15d1db0c - .quad 0x3ff0f294ee5c05ab - .quad 0x3ff0f40ce77820a2 - .quad 0x3ff0f5850128fe7a - .quad 0x3ff0f6fd3b717200 - .quad 0x3ff0f87596544e3f - .quad 0x3ff0f9ee11d4667f - .quad 0x3ff0fb66adf48e46 - .quad 0x3ff0fcdf6ab7995c - .quad 0x3ff0fe5848205bc4 - .quad 0x3ff0ffd14631a9c2 - .quad 0x3ff1014a64ee57d9 - .quad 0x3ff102c3a4593ac9 - .quad 0x3ff1043d04752792 - .quad 0x3ff105b68544f373 - .quad 0x3ff1073026cb73e9 - .quad 0x3ff108a9e90b7eb2 - .quad 0x3ff10a23cc07e9c6 - .quad 0x3ff10b9dcfc38b63 - .quad 0x3ff10d17f44139fe - .quad 0x3ff10e923983cc53 - .quad 0x3ff1100c9f8e1955 - .quad 0x3ff111872662f83e - .quad 0x3ff11301ce054081 - .quad 0x3ff1147c9677c9d2 - .quad 0x3ff115f77fbd6c23 - .quad 0x3ff1177289d8ffa9 - .quad 0x3ff118edb4cd5cd4 - .quad 0x3ff11a69009d5c54 - .quad 0x3ff11be46d4bd71a - .quad 0x3ff11d5ffadba653 - .quad 0x3ff11edba94fa36e - .quad 0x3ff1205778aaa817 - .quad 0x3ff121d368ef8e3b - .quad 0x3ff1234f7a213008 - .quad 0x3ff124cbac4267e5 - .quad 0x3ff12647ff56107f - .quad 0x3ff127c4735f04bd - .quad 0x3ff1294108601fcb - .quad 0x3ff12abdbe5c3d0f - .quad 0x3ff12c3a95563832 - .quad 0x3ff12db78d50ed19 - .quad 0x3ff12f34a64f37ed - .quad 0x3ff130b1e053f513 - .quad 0x3ff1322f3b62012e - .quad 0x3ff133acb77c3927 - .quad 0x3ff1352a54a57a1f - .quad 0x3ff136a812e0a17c - .quad 0x3ff13825f2308ce0 - .quad 0x3ff139a3f2981a2e - .quad 0x3ff13b22141a278a - .quad 0x3ff13ca056b99356 - .quad 0x3ff13e1eba793c33 - .quad 0x3ff13f9d3f5c0103 - .quad 0x3ff1411be564c0e7 - .quad 0x3ff1429aac965b40 - .quad 0x3ff1441994f3afae - .quad 0x3ff145989e7f9e13 - .quad 0x3ff14717c93d068e - .quad 0x3ff14897152ec980 - .quad 0x3ff14a168257c787 - .quad 0x3ff14b9610bae185 - .quad 0x3ff14d15c05af897 - .quad 0x3ff14e95913aee1e - .quad 0x3ff15015835da3b8 - .quad 0x3ff1519596c5fb46 - .quad 0x3ff15315cb76d6e5 - .quad 0x3ff15496217318f6 - .quad 0x3ff1561698bda417 - .quad 0x3ff1579731595b27 - .quad 0x3ff15917eb492145 - .quad 0x3ff15a98c68fd9d1 - .quad 0x3ff15c19c330686b - .quad 0x3ff15d9ae12db0ef - .quad 0x3ff15f1c208a977f - .quad 0x3ff1609d814a007b - .quad 0x3ff1621f036ed081 - .quad 0x3ff163a0a6fbec71 - .quad 0x3ff165226bf4396d - .quad 0x3ff166a4525a9cd3 - .quad 0x3ff168265a31fc44 - .quad 0x3ff169a8837d3da3 - .quad 0x3ff16b2ace3f4710 - .quad 0x3ff16cad3a7afeeb - .quad 0x3ff16e2fc8334bd8 - .quad 0x3ff16fb2776b14b8 - .quad 0x3ff17135482540ad - .quad 0x3ff172b83a64b71a - .quad 0x3ff1743b4e2c5fa4 - .quad 0x3ff175be837f222d - .quad 0x3ff17741da5fe6da - .quad 0x3ff178c552d1960f - .quad 0x3ff17a48ecd71873 - .quad 0x3ff17bcca87356e9 - .quad 0x3ff17d5085a93a9b - .quad 0x3ff17ed4847bacec - .quad 0x3ff18058a4ed9787 - .quad 0x3ff181dce701e451 - .quad 0x3ff183614abb7d75 - .quad 0x3ff184e5d01d4d5b - .quad 0x3ff1866a772a3ead - .quad 0x3ff187ef3fe53c58 - .quad 0x3ff189742a513185 - .quad 0x3ff18af9367109a1 - .quad 0x3ff18c7e6447b059 - .quad 0x3ff18e03b3d8119c - .quad 0x3ff18f8925251997 - .quad 0x3ff1910eb831b4ba - .quad 0x3ff192946d00cfb6 - .quad 0x3ff1941a4395577c - .quad 0x3ff195a03bf2393e - .quad 0x3ff19726561a626d - .quad 0x3ff198ac9210c0c1 - .quad 0x3ff19a32efd8422c - .quad 0x3ff19bb96f73d4e5 - .quad 0x3ff19d4010e66763 - .quad 0x3ff19ec6d432e85c - .quad 0x3ff1a04db95c46cc - .quad 0x3ff1a1d4c06571ed - .quad 0x3ff1a35be9515937 - .quad 0x3ff1a4e33422ec69 - .quad 0x3ff1a66aa0dd1b81 - .quad 0x3ff1a7f22f82d6bc - .quad 0x3ff1a979e0170e9a - .quad 0x3ff1ab01b29cb3dd - .quad 0x3ff1ac89a716b786 - .quad 0x3ff1ae11bd880ada - .quad 0x3ff1af99f5f39f5d - .quad 0x3ff1b122505c66d5 - .quad 0x3ff1b2aaccc5534b - .quad 0x3ff1b4336b315705 - .quad 0x3ff1b5bc2ba3648e - .quad 0x3ff1b7450e1e6eb3 - .quad 0x3ff1b8ce12a56880 - .quad 0x3ff1ba57393b4544 - .quad 0x3ff1bbe081e2f88e - .quad 0x3ff1bd69ec9f762f - .quad 0x3ff1bef37973b23b - .quad 0x3ff1c07d2862a105 - .quad 0x3ff1c206f96f3724 - .quad 0x3ff1c390ec9c696f - .quad 0x3ff1c51b01ed2cfe - .quad 0x3ff1c6a53964772e - .quad 0x3ff1c82f93053d99 - .quad 0x3ff1c9ba0ed2761e - .quad 0x3ff1cb44accf16dc - .quad 0x3ff1cccf6cfe1634 - .quad 0x3ff1ce5a4f626acb - .quad 0x3ff1cfe553ff0b83 - .quad 0x3ff1d1707ad6ef85 - .quad 0x3ff1d2fbc3ed0e37 - .quad 0x3ff1d4872f445f44 - .quad 0x3ff1d612bcdfda99 - .quad 0x3ff1d79e6cc27863 - .quad 0x3ff1d92a3eef3111 - .quad 0x3ff1dab63368fd56 - .quad 0x3ff1dc424a32d624 - .quad 0x3ff1ddce834fb4b0 - .quad 0x3ff1df5adec29273 - .quad 0x3ff1e0e75c8e6927 - .quad 0x3ff1e273fcb632c5 - .quad 0x3ff1e400bf3ce98b - .quad 0x3ff1e58da42587fa - .quad 0x3ff1e71aab7308d1 - .quad 0x3ff1e8a7d5286717 - .quad 0x3ff1ea3521489e0e - .quad 0x3ff1ebc28fd6a942 - .quad 0x3ff1ed5020d5847a - .quad 0x3ff1eeddd4482bc3 - .quad 0x3ff1f06baa319b6b - .quad 0x3ff1f1f9a294d004 - .quad 0x3ff1f387bd74c660 - .quad 0x3ff1f515fad47b95 - .quad 0x3ff1f6a45ab6ecfa - .quad 0x3ff1f832dd1f1829 - .quad 0x3ff1f9c1820ffafe - .quad 0x3ff1fb50498c9397 - .quad 0x3ff1fcdf3397e057 - .quad 0x3ff1fe6e4034dfdf - .quad 0x3ff1fffd6f669115 - .quad 0x3ff2018cc12ff324 - .quad 0x3ff2031c35940574 - .quad 0x3ff204abcc95c7b4 - .quad 0x3ff2063b863839d2 - .quad 0x3ff207cb627e5c01 - .quad 0x3ff2095b616b2eb7 - .quad 0x3ff20aeb8301b2aa - .quad 0x3ff20c7bc744e8d5 - .quad 0x3ff20e0c2e37d274 - .quad 0x3ff20f9cb7dd7108 - .quad 0x3ff2112d6438c651 - .quad 0x3ff212be334cd455 - .quad 0x3ff2144f251c9d5b - .quad 0x3ff215e039ab23ee - .quad 0x3ff2177170fb6adb - .quad 0x3ff21902cb107531 - .quad 0x3ff21a9447ed4643 - .quad 0x3ff21c25e794e1a7 - .quad 0x3ff21db7aa0a4b34 - .quad 0x3ff21f498f508707 - .quad 0x3ff220db976a997e - .quad 0x3ff2226dc25b8739 - .quad 0x3ff224001026551c - .quad 0x3ff2259280ce084e - .quad 0x3ff227251455a63b - .quad 0x3ff228b7cac0348e - .quad 0x3ff22a4aa410b938 - .quad 0x3ff22bdda04a3a6b - .quad 0x3ff22d70bf6fbea0 - .quad 0x3ff22f0401844c8d - .quad 0x3ff23097668aeb31 - .quad 0x3ff2322aee86a1ca - .quad 0x3ff233be997a77db - .quad 0x3ff235526769752b - .quad 0x3ff236e65856a1c4 - .quad 0x3ff2387a6c4505ef - .quad 0x3ff23a0ea337aa40 - .quad 0x3ff23ba2fd319789 - .quad 0x3ff23d377a35d6de - .quad 0x3ff23ecc1a47719b - .quad 0x3ff24060dd69715c - .quad 0x3ff241f5c39ee002 - .quad 0x3ff2438acceac7b2 - .quad 0x3ff2451ff95032d1 - .quad 0x3ff246b548d22c0c - .quad 0x3ff2484abb73be50 - .quad 0x3ff249e05137f4cf - .quad 0x3ff24b760a21daff - .quad 0x3ff24d0be6347c98 - .quad 0x3ff24ea1e572e597 - .quad 0x3ff2503807e0223a - .quad 0x3ff251ce4d7f3f08 - .quad 0x3ff25364b65348c6 - .quad 0x3ff254fb425f4c80 - .quad 0x3ff25691f1a65784 - .quad 0x3ff25828c42b7763 - .quad 0x3ff259bfb9f1b9f7 - .quad 0x3ff25b56d2fc2d55 - .quad 0x3ff25cee0f4ddfdd - .quad 0x3ff25e856ee9e031 - .quad 0x3ff2601cf1d33d35 - .quad 0x3ff261b4980d0613 - .quad 0x3ff2634c619a4a36 - .quad 0x3ff264e44e7e1952 - .quad 0x3ff2667c5ebb8358 - .quad 0x3ff2681492559883 - .quad 0x3ff269ace94f694f - .quad 0x3ff26b4563ac067d - .quad 0x3ff26cde016e8111 - .quad 0x3ff26e76c299ea53 - .quad 0x3ff2700fa73153d1 - .quad 0x3ff271a8af37cf5b - .quad 0x3ff27341dab06f07 - .quad 0x3ff274db299e452c - .quad 0x3ff276749c046468 - .quad 0x3ff2780e31e5df9c - .quad 0x3ff279a7eb45c9ef - .quad 0x3ff27b41c82736c8 - .quad 0x3ff27cdbc88d39d8 - .quad 0x3ff27e75ec7ae70f - .quad 0x3ff2801033f352a4 - .quad 0x3ff281aa9ef99111 - .quad 0x3ff283452d90b716 - .quad 0x3ff284dfdfbbd9b7 - .quad 0x3ff2867ab57e0e3a - .quad 0x3ff28815aeda6a2d - .quad 0x3ff289b0cbd4035f - .quad 0x3ff28b4c0c6defe6 - .quad 0x3ff28ce770ab461b - .quad 0x3ff28e82f88f1c9e - .quad 0x3ff2901ea41c8a50 - .quad 0x3ff291ba7356a657 - .quad 0x3ff2935666408820 - .quad 0x3ff294f27cdd475a - .quad 0x3ff2968eb72ffbfc - .quad 0x3ff2982b153bbe3d - .quad 0x3ff299c79703a69e - .quad 0x3ff29b643c8acdde - .quad 0x3ff29d0105d44d08 - .quad 0x3ff29e9df2e33d66 - .quad 0x3ff2a03b03bab88b - .quad 0x3ff2a1d8385dd84a - .quad 0x3ff2a37590cfb6bf - .quad 0x3ff2a5130d136e49 - .quad 0x3ff2a6b0ad2c198d - .quad 0x3ff2a84e711cd374 - .quad 0x3ff2a9ec58e8b729 - .quad 0x3ff2ab8a6492e024 - .quad 0x3ff2ad28941e6a18 - .quad 0x3ff2aec6e78e7104 - .quad 0x3ff2b0655ee61129 - .quad 0x3ff2b203fa28670e - .quad 0x3ff2b3a2b9588f7f - .quad 0x3ff2b5419c79a78c - .quad 0x3ff2b6e0a38ecc8b - .quad 0x3ff2b87fce9b1c18 - .quad 0x3ff2ba1f1da1b412 - .quad 0x3ff2bbbe90a5b29e - .quad 0x3ff2bd5e27aa3627 - .quad 0x3ff2befde2b25d5c - .quad 0x3ff2c09dc1c14733 - .quad 0x3ff2c23dc4da12e4 - .quad 0x3ff2c3ddebffdff0 - .quad 0x3ff2c57e3735ce1a - .quad 0x3ff2c71ea67efd6d - .quad 0x3ff2c8bf39de8e38 - .quad 0x3ff2ca5ff157a10f - .quad 0x3ff2cc00cced56cd - .quad 0x3ff2cda1cca2d08f - .quad 0x3ff2cf42f07b2fbd - .quad 0x3ff2d0e4387995fe - .quad 0x3ff2d285a4a12544 - .quad 0x3ff2d42734f4ffc3 - .quad 0x3ff2d5c8e97847f6 - .quad 0x3ff2d76ac22e209d - .quad 0x3ff2d90cbf19acbd - .quad 0x3ff2daaee03e0fa3 - .quad 0x3ff2dc51259e6ce0 - .quad 0x3ff2ddf38f3de848 - .quad 0x3ff2df961d1fa5f9 - .quad 0x3ff2e138cf46ca57 - .quad 0x3ff2e2dba5b67a06 - .quad 0x3ff2e47ea071d9f4 - .quad 0x3ff2e621bf7c0f57 - .quad 0x3ff2e7c502d83fa4 - .quad 0x3ff2e9686a89909e - .quad 0x3ff2eb0bf6932845 - .quad 0x3ff2ecafa6f82ce7 - .quad 0x3ff2ee537bbbc512 - .quad 0x3ff2eff774e1179d - .quad 0x3ff2f19b926b4ba5 - .quad 0x3ff2f33fd45d888a - .quad 0x3ff2f4e43abaf5f5 - .quad 0x3ff2f688c586bbd5 - .quad 0x3ff2f82d74c4025c - .quad 0x3ff2f9d24875f205 - .quad 0x3ff2fb77409fb390 - .quad 0x3ff2fd1c5d447003 - .quad 0x3ff2fec19e6750ab - .quad 0x3ff30067040b7f19 - .quad 0x3ff3020c8e342527 - .quad 0x3ff303b23ce46cf4 - .quad 0x3ff30558101f80e3 - .quad 0x3ff306fe07e88ba0 - .quad 0x3ff308a42442b81d - .quad 0x3ff30a4a65313191 - .quad 0x3ff30bf0cab7237a - .quad 0x3ff30d9754d7b99d - .quad 0x3ff30f3e03962005 - .quad 0x3ff310e4d6f58302 - .quad 0x3ff3128bcef90f2b - .quad 0x3ff31432eba3f15f - .quad 0x3ff315da2cf956c2 - .quad 0x3ff3178192fc6cbf - .quad 0x3ff319291db06106 - .quad 0x3ff31ad0cd186190 - .quad 0x3ff31c78a1379c9b - .quad 0x3ff31e209a1140ab - .quad 0x3ff31fc8b7a87c8c - .quad 0x3ff32170fa007f51 - .quad 0x3ff32319611c7851 - .quad 0x3ff324c1ecff972d - .quad 0x3ff3266a9dad0bca - .quad 0x3ff3281373280654 - .quad 0x3ff329bc6d73b741 - .quad 0x3ff32b658c934f48 - .quad 0x3ff32d0ed089ff6c - .quad 0x3ff32eb8395af8f4 - .quad 0x3ff33061c7096d6f - .quad 0x3ff3320b79988eb2 - .quad 0x3ff333b5510b8eda - .quad 0x3ff3355f4d65a04a - .quad 0x3ff337096ea9f5ab - .quad 0x3ff338b3b4dbc1f0 - .quad 0x3ff33a5e1ffe384f - .quad 0x3ff33c08b0148c49 - .quad 0x3ff33db36521f1a3 - .quad 0x3ff33f5e3f299c69 - .quad 0x3ff341093e2ec0f2 - .quad 0x3ff342b4623493d7 - .quad 0x3ff3445fab3e49fa - .quad 0x3ff3460b194f1887 - .quad 0x3ff347b6ac6a34ec - .quad 0x3ff349626492d4e2 - .quad 0x3ff34b0e41cc2e67 - .quad 0x3ff34cba441977c4 - .quad 0x3ff34e666b7de784 - .quad 0x3ff35012b7fcb47d - .quad 0x3ff351bf299915c9 - .quad 0x3ff3536bc05642cf - .quad 0x3ff355187c377337 - .quad 0x3ff356c55d3fdef4 - .quad 0x3ff358726372be40 - .quad 0x3ff35a1f8ed3499b - .quad 0x3ff35bccdf64b9cf - .quad 0x3ff35d7a552a47ea - .quad 0x3ff35f27f0272d45 - .quad 0x3ff360d5b05ea37f - .quad 0x3ff3628395d3e47d - .quad 0x3ff36431a08a2a6f - .quad 0x3ff365dfd084afc9 - .quad 0x3ff3678e25c6af48 - .quad 0x3ff3693ca05363f3 - .quad 0x3ff36aeb402e0915 - .quad 0x3ff36c9a0559da43 - .quad 0x3ff36e48efda1358 - .quad 0x3ff36ff7ffb1f078 - .quad 0x3ff371a734e4ae11 - .quad 0x3ff373568f7588d3 - .quad 0x3ff375060f67bdb9 - .quad 0x3ff376b5b4be8a0a - .quad 0x3ff378657f7d2b4c - .quad 0x3ff37a156fa6df54 - .quad 0x3ff37bc5853ee43d - .quad 0x3ff37d75c0487869 - .quad 0x3ff37f2620c6da82 - .quad 0x3ff380d6a6bd497c - .quad 0x3ff38287522f048e - .quad 0x3ff38438231f4b3f - .quad 0x3ff385e919915d57 - .quad 0x3ff3879a35887ae9 - .quad 0x3ff3894b7707e450 - .quad 0x3ff38afcde12da2f - .quad 0x3ff38cae6aac9d71 - .quad 0x3ff38e601cd86f48 - .quad 0x3ff39011f4999132 - .quad 0x3ff391c3f1f344f1 - .quad 0x3ff3937614e8cc90 - .quad 0x3ff395285d7d6a65 - .quad 0x3ff396dacbb4610c - .quad 0x3ff3988d5f90f36a - .quad 0x3ff39a40191664ac - .quad 0x3ff39bf2f847f847 - .quad 0x3ff39da5fd28f1f8 - .quad 0x3ff39f5927bc95c8 - .quad 0x3ff3a10c78062804 - .quad 0x3ff3a2bfee08ed45 - .quad 0x3ff3a47389c82a68 - .quad 0x3ff3a6274b472498 - .quad 0x3ff3a7db32892144 - .quad 0x3ff3a98f3f916626 - .quad 0x3ff3ab4372633941 - .quad 0x3ff3acf7cb01e0de - .quad 0x3ff3aeac4970a392 - .quad 0x3ff3b060edb2c837 - .quad 0x3ff3b215b7cb95f3 - .quad 0x3ff3b3caa7be5434 - .quad 0x3ff3b57fbd8e4aae - .quad 0x3ff3b734f93ec163 - .quad 0x3ff3b8ea5ad30097 - .quad 0x3ff3ba9fe24e50dd - .quad 0x3ff3bc558fb3fb0d - .quad 0x3ff3be0b6307484a - .quad 0x3ff3bfc15c4b81ff - .quad 0x3ff3c1777b83f1e0 - .quad 0x3ff3c32dc0b3e1ea - .quad 0x3ff3c4e42bde9c62 - .quad 0x3ff3c69abd076bd8 - .quad 0x3ff3c85174319b24 - .quad 0x3ff3ca0851607565 - .quad 0x3ff3cbbf54974607 - .quad 0x3ff3cd767dd958bd - .quad 0x3ff3cf2dcd29f984 - .quad 0x3ff3d0e5428c749e - .quad 0x3ff3d29cde04169e - .quad 0x3ff3d4549f942c57 - .quad 0x3ff3d60c874002ee - .quad 0x3ff3d7c4950ae7cb - .quad 0x3ff3d97cc8f828a2 - .quad 0x3ff3db35230b136f - .quad 0x3ff3dceda346f679 - .quad 0x3ff3dea649af204f - .quad 0x3ff3e05f1646dfca - .quad 0x3ff3e2180911840c - .quad 0x3ff3e3d122125c7f - .quad 0x3ff3e58a614cb8db - .quad 0x3ff3e743c6c3e91b - .quad 0x3ff3e8fd527b3d8a - .quad 0x3ff3eab7047606b7 - .quad 0x3ff3ec70dcb7957e - .quad 0x3ff3ee2adb433b04 - .quad 0x3ff3efe5001c48b5 - .quad 0x3ff3f19f4b46104c - .quad 0x3ff3f359bcc3e3c8 - .quad 0x3ff3f51454991573 - .quad 0x3ff3f6cf12c8f7e5 - .quad 0x3ff3f889f756ddfa - .quad 0x3ff3fa4502461adb - .quad 0x3ff3fc00339a01f9 - .quad 0x3ff3fdbb8b55e710 - .quad 0x3ff3ff77097d1e26 - .quad 0x3ff40132ae12fb8a - .quad 0x3ff402ee791ad3d5 - .quad 0x3ff404aa6a97fbea - .quad 0x3ff40666828dc8f6 - .quad 0x3ff40822c0ff9071 - .quad 0x3ff409df25f0a81b - .quad 0x3ff40b9bb16465fe - .quad 0x3ff40d58635e2070 - .quad 0x3ff40f153be12e0f - .quad 0x3ff410d23af0e5c5 - .quad 0x3ff4128f60909ec4 - .quad 0x3ff4144cacc3b08a - .quad 0x3ff4160a1f8d72dd - .quad 0x3ff417c7b8f13dd0 - .quad 0x3ff4198578f269be - .quad 0x3ff41b435f944f4c - .quad 0x3ff41d016cda476c - .quad 0x3ff41ebfa0c7ab57 - .quad 0x3ff4207dfb5fd491 - .quad 0x3ff4223c7ca61cea - .quad 0x3ff423fb249dde7b - .quad 0x3ff425b9f34a73a7 - .quad 0x3ff42778e8af371d - .quad 0x3ff4293804cf83d5 - .quad 0x3ff42af747aeb511 - .quad 0x3ff42cb6b1502661 - .quad 0x3ff42e7641b73399 - .quad 0x3ff43035f8e738de - .quad 0x3ff431f5d6e3929c - .quad 0x3ff433b5dbaf9d8b - .quad 0x3ff43576074eb6ac - .quad 0x3ff4373659c43b4c - .quad 0x3ff438f6d3138902 - .quad 0x3ff43ab7733ffdb1 - .quad 0x3ff43c783a4cf784 - .quad 0x3ff43e39283dd4f5 - .quad 0x3ff43ffa3d15f4c3 - .quad 0x3ff441bb78d8b5fc - .quad 0x3ff4437cdb8977f9 - .quad 0x3ff4453e652b9a59 - .quad 0x3ff4470015c27d0e - .quad 0x3ff448c1ed51804b - .quad 0x3ff44a83ebdc0497 - .quad 0x3ff44c4611656abf - .quad 0x3ff44e085df113da - .quad 0x3ff44fcad182614e - .quad 0x3ff4518d6c1cb4c9 - .quad 0x3ff453502dc37045 - .quad 0x3ff455131679f608 - .quad 0x3ff456d62643a8a0 - .quad 0x3ff458995d23eae9 - .quad 0x3ff45a5cbb1e2009 - .quad 0x3ff45c204035ab72 - .quad 0x3ff45de3ec6df0df - .quad 0x3ff45fa7bfca5459 - .quad 0x3ff4616bba4e3a34 - .quad 0x3ff4632fdbfd070c - .quad 0x3ff464f424da1fcc - .quad 0x3ff466b894e8e9a6 - .quad 0x3ff4687d2c2cca1e - .quad 0x3ff46a41eaa926fc - .quad 0x3ff46c06d061665a - .quad 0x3ff46dcbdd58ee98 - .quad 0x3ff46f9111932664 - .quad 0x3ff471566d1374b7 - .quad 0x3ff4731befdd40d6 - .quad 0x3ff474e199f3f251 - .quad 0x3ff476a76b5af103 - .quad 0x3ff4786d6415a514 - .quad 0x3ff47a33842776f6 - .quad 0x3ff47bf9cb93cf67 - .quad 0x3ff47dc03a5e1772 - .quad 0x3ff47f86d089b86d - .quad 0x3ff4814d8e1a1bf8 - .quad 0x3ff483147312ac00 - .quad 0x3ff484db7f76d2be - .quad 0x3ff486a2b349fab7 - .quad 0x3ff4886a0e8f8ebb - .quad 0x3ff48a31914af9e6 - .quad 0x3ff48bf93b7fa79f - .quad 0x3ff48dc10d31039b - .quad 0x3ff48f89066279da - .quad 0x3ff49151271776a6 - .quad 0x3ff493196f536698 - .quad 0x3ff494e1df19b693 - .quad 0x3ff496aa766dd3c6 - .quad 0x3ff4987335532bad - .quad 0x3ff49a3c1bcd2c0f - .quad 0x3ff49c0529df4300 - .quad 0x3ff49dce5f8cdee0 - .quad 0x3ff49f97bcd96e5a - .quad 0x3ff4a16141c86066 - .quad 0x3ff4a32aee5d2449 - .quad 0x3ff4a4f4c29b2993 - .quad 0x3ff4a6bebe85e020 - .quad 0x3ff4a888e220b819 - .quad 0x3ff4aa532d6f21f4 - .quad 0x3ff4ac1da0748e6f - .quad 0x3ff4ade83b346e9c - .quad 0x3ff4afb2fdb233d4 - .quad 0x3ff4b17de7f14fbb - .quad 0x3ff4b348f9f53446 - .quad 0x3ff4b51433c153b3 - .quad 0x3ff4b6df9559208f - .quad 0x3ff4b8ab1ec00db1 - .quad 0x3ff4ba76cff98e3e - .quad 0x3ff4bc42a90915a7 - .quad 0x3ff4be0ea9f217aa - .quad 0x3ff4bfdad2b80852 - .quad 0x3ff4c1a7235e5bf6 - .quad 0x3ff4c3739be88737 - .quad 0x3ff4c5403c59ff09 - .quad 0x3ff4c70d04b638a6 - .quad 0x3ff4c8d9f500a999 - .quad 0x3ff4caa70d3cc7b9 - .quad 0x3ff4cc744d6e0926 - .quad 0x3ff4ce41b597e454 - .quad 0x3ff4d00f45bdcffe - .quad 0x3ff4d1dcfde3432d - .quad 0x3ff4d3aade0bb539 - .quad 0x3ff4d578e63a9dc2 - .quad 0x3ff4d747167374bd - .quad 0x3ff4d9156eb9b264 - .quad 0x3ff4dae3ef10cf42 - .quad 0x3ff4dcb2977c442f - .quad 0x3ff4de8167ff8a4e - .quad 0x3ff4e050609e1b11 - .quad 0x3ff4e21f815b7036 - .quad 0x3ff4e3eeca3b03c9 - .quad 0x3ff4e5be3b405022 - .quad 0x3ff4e78dd46ecfe6 - .quad 0x3ff4e95d95c9fe0b - .quad 0x3ff4eb2d7f5555ce - .quad 0x3ff4ecfd911452bd - .quad 0x3ff4eecdcb0a70b3 - .quad 0x3ff4f09e2d3b2bd8 - .quad 0x3ff4f26eb7aa00a1 - .quad 0x3ff4f43f6a5a6bd2 - .quad 0x3ff4f610454fea79 - .quad 0x3ff4f7e1488df9f4 - .quad 0x3ff4f9b2741817ee - .quad 0x3ff4fb83c7f1c25e - .quad 0x3ff4fd55441e778b - .quad 0x3ff4ff26e8a1b608 - .quad 0x3ff500f8b57efcb6 - .quad 0x3ff502caaab9cac1 - .quad 0x3ff5049cc8559fa7 - .quad 0x3ff5066f0e55fb31 - .quad 0x3ff508417cbe5d77 - .quad 0x3ff50a14139246db - .quad 0x3ff50be6d2d53812 - .quad 0x3ff50db9ba8ab21a - .quad 0x3ff50f8ccab63642 - .quad 0x3ff51160035b4625 - .quad 0x3ff51333647d63ad - .quad 0x3ff51506ee201112 - .quad 0x3ff516daa046d0d6 - .quad 0x3ff518ae7af525ce - .quad 0x3ff51a827e2e931a - .quad 0x3ff51c56a9f69c2a - .quad 0x3ff51e2afe50c4b9 - .quad 0x3ff51fff7b4090d2 - .quad 0x3ff521d420c984ce - .quad 0x3ff523a8eeef2553 - .quad 0x3ff5257de5b4f757 - .quad 0x3ff52753051e801a - .quad 0x3ff529284d2f4530 - .quad 0x3ff52afdbdeacc76 - .quad 0x3ff52cd357549c19 - .quad 0x3ff52ea919703a95 - .quad 0x3ff5307f04412eb4 - .quad 0x3ff5325517caff8d - .quad 0x3ff5342b54113485 - .quad 0x3ff53601b9175551 - .quad 0x3ff537d846e0e9f5 - .quad 0x3ff539aefd717ac0 - .quad 0x3ff53b85dccc9053 - .quad 0x3ff53d5ce4f5b39a - .quad 0x3ff53f3415f06dd2 - .quad 0x3ff5410b6fc04885 - .quad 0x3ff542e2f268cd8c - .quad 0x3ff544ba9ded870f - .quad 0x3ff546927251ff84 - .quad 0x3ff5486a6f99c1b1 - .quad 0x3ff54a4295c858a6 - .quad 0x3ff54c1ae4e14fc7 - .quad 0x3ff54df35ce832c3 - .quad 0x3ff54fcbfde08d9b - .quad 0x3ff551a4c7cdec9c - .quad 0x3ff5537dbab3dc60 - .quad 0x3ff55556d695e9d6 - .quad 0x3ff557301b77a236 - .quad 0x3ff55909895c9309 - .quad 0x3ff55ae320484a28 - .quad 0x3ff55cbce03e55b7 - .quad 0x3ff55e96c942442b - .quad 0x3ff56070db57a44b - .quad 0x3ff5624b16820529 - .quad 0x3ff564257ac4f625 - .quad 0x3ff56600082406f4 - .quad 0x3ff567dabea2c792 - .quad 0x3ff569b59e44c851 - .quad 0x3ff56b90a70d99ce - .quad 0x3ff56d6bd900ccf5 - .quad 0x3ff56f473421f304 - .quad 0x3ff57122b8749d87 - .quad 0x3ff572fe65fc5e58 - .quad 0x3ff574da3cbcc7a0 - .quad 0x3ff576b63cb96bd8 - .quad 0x3ff5789265f5ddca - .quad 0x3ff57a6eb875b08c - .quad 0x3ff57c4b343c7786 - .quad 0x3ff57e27d94dc66d - .quad 0x3ff58004a7ad3148 - .quad 0x3ff581e19f5e4c6a - .quad 0x3ff583bec064ac79 - .quad 0x3ff5859c0ac3e669 - .quad 0x3ff587797e7f8f7c - .quad 0x3ff589571b9b3d44 - .quad 0x3ff58b34e21a85a7 - .quad 0x3ff58d12d200fed2 - .quad 0x3ff58ef0eb523f4a - .quad 0x3ff590cf2e11ddde - .quad 0x3ff592ad9a4371af - .quad 0x3ff5948c2fea922e - .quad 0x3ff5966aef0ad71b - .quad 0x3ff59849d7a7d883 - .quad 0x3ff59a28e9c52ec9 - .quad 0x3ff59c0825667299 - .quad 0x3ff59de78a8f3cf4 - .quad 0x3ff59fc719432727 - .quad 0x3ff5a1a6d185cad3 - .quad 0x3ff5a386b35ac1e4 - .quad 0x3ff5a566bec5a699 - .quad 0x3ff5a746f3ca1381 - .quad 0x3ff5a927526ba378 - .quad 0x3ff5ab07daadf1af - .quad 0x3ff5ace88c9499a3 - .quad 0x3ff5aec968233721 - .quad 0x3ff5b0aa6d5d6649 - .quad 0x3ff5b28b9c46c389 - .quad 0x3ff5b46cf4e2eb9d - .quad 0x3ff5b64e77357b97 - .quad 0x3ff5b830234210d3 - .quad 0x3ff5ba11f90c4902 - .quad 0x3ff5bbf3f897c221 - .quad 0x3ff5bdd621e81a81 - .quad 0x3ff5bfb87500f0c1 - .quad 0x3ff5c19af1e5e3d2 - .quad 0x3ff5c37d989a92f2 - .quad 0x3ff5c56069229db4 - .quad 0x3ff5c7436381a3f7 - .quad 0x3ff5c92687bb45ed - .quad 0x3ff5cb09d5d3241a - .quad 0x3ff5cced4dccdf4c - .quad 0x3ff5ced0efac18aa - .quad 0x3ff5d0b4bb7471a6 - .quad 0x3ff5d298b1298c02 - .quad 0x3ff5d47cd0cf09d4 - .quad 0x3ff5d6611a688d81 - .quad 0x3ff5d8458df9b9bf - .quad 0x3ff5da2a2b863193 - .quad 0x3ff5dc0ef3119855 - .quad 0x3ff5ddf3e49f91ad - .quad 0x3ff5dfd90033c193 - .quad 0x3ff5e1be45d1cc4f - .quad 0x3ff5e3a3b57d567d - .quad 0x3ff5e5894f3a0506 - .quad 0x3ff5e76f130b7d27 - .quad 0x3ff5e95500f5646d - .quad 0x3ff5eb3b18fb60b3 - .quad 0x3ff5ed215b21182a - .quad 0x3ff5ef07c76a314e - .quad 0x3ff5f0ee5dda52f4 - .quad 0x3ff5f2d51e752439 - .quad 0x3ff5f4bc093e4c90 - .quad 0x3ff5f6a31e3973bf - .quad 0x3ff5f88a5d6a41d9 - .quad 0x3ff5fa71c6d45f43 - .quad 0x3ff5fc595a7b74b4 - .quad 0x3ff5fe4118632b33 - .quad 0x3ff60029008f2c1b - .quad 0x3ff6021113032116 - .quad 0x3ff603f94fc2b41f - .quad 0x3ff605e1b6d18f82 - .quad 0x3ff607ca48335ddf - .quad 0x3ff609b303ebca24 - .quad 0x3ff60b9be9fe7f93 - .quad 0x3ff60d84fa6f29bf - .quad 0x3ff60f6e3541748a - .quad 0x3ff611579a790c29 - .quad 0x3ff613412a199d25 - .quad 0x3ff6152ae426d453 - .quad 0x3ff61714c8a45edf - .quad 0x3ff618fed795ea44 - .quad 0x3ff61ae910ff244e - .quad 0x3ff61cd374e3bb1b - .quad 0x3ff61ebe03475d1c - .quad 0x3ff620a8bc2db914 - .quad 0x3ff622939f9a7e14 - .quad 0x3ff6247ead915b83 - .quad 0x3ff62669e6160116 - .quad 0x3ff62855492c1ed7 - .quad 0x3ff62a40d6d76521 - .quad 0x3ff62c2c8f1b84a0 - .quad 0x3ff62e1871fc2e52 - .quad 0x3ff630047f7d1386 - .quad 0x3ff631f0b7a1e5e1 - .quad 0x3ff633dd1a6e5753 - .quad 0x3ff635c9a7e61a25 - .quad 0x3ff637b6600ce0ed - .quad 0x3ff639a342e65e97 - .quad 0x3ff63b905076465f - .quad 0x3ff63d7d88c04bd0 - .quad 0x3ff63f6aebc822cd - .quad 0x3ff6415879917f88 - .quad 0x3ff6434632201685 - .quad 0x3ff6453415779c9b - .quad 0x3ff64722239bc6f3 - .quad 0x3ff649105c904b09 - .quad 0x3ff64afec058dea9 - .quad 0x3ff64ced4ef937f3 - .quad 0x3ff64edc08750d5b - .quad 0x3ff650caecd015a3 - .quad 0x3ff652b9fc0e07e3 - .quad 0x3ff654a936329b85 - .quad 0x3ff656989b418844 - .quad 0x3ff658882b3e862e - .quad 0x3ff65a77e62d4da4 - .quad 0x3ff65c67cc119759 - .quad 0x3ff65e57dcef1c54 - .quad 0x3ff6604818c995ed - .quad 0x3ff662387fa4bdce - .quad 0x3ff6642911844df6 - .quad 0x3ff66619ce6c00b4 - .quad 0x3ff6680ab65f90ac - .quad 0x3ff669fbc962b8d3 - .quad 0x3ff66bed07793473 - .quad 0x3ff66dde70a6bf26 - .quad 0x3ff66fd004ef14db - .quad 0x3ff671c1c455f1d2 - .quad 0x3ff673b3aedf129f - .quad 0x3ff675a5c48e342a - .quad 0x3ff67798056713aa - .quad 0x3ff6798a716d6eaf - .quad 0x3ff67b7d08a50316 - .quad 0x3ff67d6fcb118f12 - .quad 0x3ff67f62b8b6d12a - .quad 0x3ff68155d1988835 - .quad 0x3ff6834915ba7361 - .quad 0x3ff6853c8520522a - .quad 0x3ff687301fcde464 - .quad 0x3ff68923e5c6ea33 - .quad 0x3ff68b17d70f2412 - .quad 0x3ff68d0bf3aa52c9 - .quad 0x3ff68f003b9c3779 - .quad 0x3ff690f4aee89395 - .quad 0x3ff692e94d9328e0 - .quad 0x3ff694de179fb976 - .quad 0x3ff696d30d1207c0 - .quad 0x3ff698c82dedd681 - .quad 0x3ff69abd7a36e8c9 - .quad 0x3ff69cb2f1f101ff - .quad 0x3ff69ea8951fe5e0 - .quad 0x3ff6a09e63c75876 - .quad 0x3ff6a2945deb1e23 - .quad 0x3ff6a48a838efb9d - .quad 0x3ff6a680d4b6b5ec - .quad 0x3ff6a8775166126a - .quad 0x3ff6aa6df9a0d6c8 - .quad 0x3ff6ac64cd6ac90a - .quad 0x3ff6ae5bccc7af86 - .quad 0x3ff6b052f7bb50e6 - .quad 0x3ff6b24a4e497429 - .quad 0x3ff6b441d075e0a1 - .quad 0x3ff6b6397e445df5 - .quad 0x3ff6b83157b8b41e - .quad 0x3ff6ba295cd6ab6a - .quad 0x3ff6bc218da20c7a - .quad 0x3ff6be19ea1ea046 - .quad 0x3ff6c01272503016 - .quad 0x3ff6c20b263a8587 - .quad 0x3ff6c40405e16a8b - .quad 0x3ff6c5fd1148a969 - .quad 0x3ff6c7f648740cb9 - .quad 0x3ff6c9efab675f6a - .quad 0x3ff6cbe93a266cbe - .quad 0x3ff6cde2f4b5004b - .quad 0x3ff6cfdcdb16e5fb - .quad 0x3ff6d1d6ed4fea0d - .quad 0x3ff6d3d12b63d914 - .quad 0x3ff6d5cb95567ff7 - .quad 0x3ff6d7c62b2babf1 - .quad 0x3ff6d9c0ece72a93 - .quad 0x3ff6dbbbda8cc9c0 - .quad 0x3ff6ddb6f42057b0 - .quad 0x3ff6dfb239a5a2f3 - .quad 0x3ff6e1adab207a67 - .quad 0x3ff6e3a94894ad43 - .quad 0x3ff6e5a512060b13 - .quad 0x3ff6e7a1077863b4 - .quad 0x3ff6e99d28ef875a - .quad 0x3ff6eb99766f468d - .quad 0x3ff6ed95effb722a - .quad 0x3ff6ef929597db64 - .quad 0x3ff6f18f674853bf - .quad 0x3ff6f38c6510ad16 - .quad 0x3ff6f5898ef4b99a - .quad 0x3ff6f786e4f84bcd - .quad 0x3ff6f984671f368a - .quad 0x3ff6fb82156d4cfe - .quad 0x3ff6fd7fefe662ac - .quad 0x3ff6ff7df68e4b6c - .quad 0x3ff7017c2968db6b - .quad 0x3ff7037a8879e729 - .quad 0x3ff7057913c5437d - .quad 0x3ff70777cb4ec594 - .quad 0x3ff70976af1a42ec - .quad 0x3ff70b75bf2b915c - .quad 0x3ff70d74fb868710 - .quad 0x3ff70f74642efa85 - .quad 0x3ff71173f928c291 - .quad 0x3ff71373ba77b65f - .quad 0x3ff71573a81fad6d - .quad 0x3ff71773c2247f90 - .quad 0x3ff71974088a04f2 - .quad 0x3ff71b747b541612 - .quad 0x3ff71d751a868bc4 - .quad 0x3ff71f75e6253f32 - .quad 0x3ff72176de3409db - .quad 0x3ff7237802b6c593 - .quad 0x3ff7257953b14c84 - .quad 0x3ff7277ad127792f - .quad 0x3ff7297c7b1d2667 - .quad 0x3ff72b7e51962f56 - .quad 0x3ff72d8054966f7e - .quad 0x3ff72f828421c2b3 - .quad 0x3ff73184e03c0520 - .quad 0x3ff7338768e91346 - .quad 0x3ff7358a1e2cc9fc - .quad 0x3ff7378d000b066d - .quad 0x3ff739900e87a61c - .quad 0x3ff73b9349a686df - .quad 0x3ff73d96b16b86e5 - .quad 0x3ff73f9a45da84b1 - .quad 0x3ff7419e06f75f1a - .quad 0x3ff743a1f4c5f551 - .quad 0x3ff745a60f4a26da - .quad 0x3ff747aa5687d38f - .quad 0x3ff749aeca82dba1 - .quad 0x3ff74bb36b3f1f98 - .quad 0x3ff74db838c0804e - .quad 0x3ff74fbd330adef7 - .quad 0x3ff751c25a221d1c - .quad 0x3ff753c7ae0a1c9b - .quad 0x3ff755cd2ec6bfaa - .quad 0x3ff757d2dc5be8d3 - .quad 0x3ff759d8b6cd7af8 - .quad 0x3ff75bdebe1f5950 - .quad 0x3ff75de4f2556769 - .quad 0x3ff75feb53738927 - .quad 0x3ff761f1e17da2c4 - .quad 0x3ff763f89c7798d0 - .quad 0x3ff765ff84655034 - .quad 0x3ff76806994aae2c - .quad 0x3ff76a0ddb2b984c - .quad 0x3ff76c154a0bf47d - .quad 0x3ff76e1ce5efa903 - .quad 0x3ff77024aeda9c72 - .quad 0x3ff7722ca4d0b5ba - .quad 0x3ff77434c7d5dc1c - .quad 0x3ff7763d17edf738 - .quad 0x3ff77845951ceefb - .quad 0x3ff77a4e3f66abb0 - .quad 0x3ff77c5716cf15f4 - .quad 0x3ff77e601b5a16bd - .quad 0x3ff780694d0b9758 - .quad 0x3ff78272abe78169 - .quad 0x3ff7847c37f1bee8 - .quad 0x3ff78685f12e3a27 - .quad 0x3ff7888fd7a0ddcc - .quad 0x3ff78a99eb4d94d8 - .quad 0x3ff78ca42c384a9f - .quad 0x3ff78eae9a64eacc - .quad 0x3ff790b935d76165 - .quad 0x3ff792c3fe939ac3 - .quad 0x3ff794cef49d8396 - .quad 0x3ff796da17f908e9 - .quad 0x3ff798e568aa181a - .quad 0x3ff79af0e6b49ee0 - .quad 0x3ff79cfc921c8b49 - .quad 0x3ff79f086ae5cbba - .quad 0x3ff7a11471144eef - .quad 0x3ff7a320a4ac03fa - .quad 0x3ff7a52d05b0da48 - .quad 0x3ff7a7399426c19b - .quad 0x3ff7a9465011aa0b - .quad 0x3ff7ab5339758409 - .quad 0x3ff7ad605056405d - .quad 0x3ff7af6d94b7d027 - .quad 0x3ff7b17b069e24de - .quad 0x3ff7b388a60d3050 - .quad 0x3ff7b5967308e4a3 - .quad 0x3ff7b7a46d953455 - .quad 0x3ff7b9b295b6123a - .quad 0x3ff7bbc0eb6f7180 - .quad 0x3ff7bdcf6ec545aa - .quad 0x3ff7bfde1fbb8295 - .quad 0x3ff7c1ecfe561c73 - .quad 0x3ff7c3fc0a9907d2 - .quad 0x3ff7c60b44883993 - .quad 0x3ff7c81aac27a6f1 - .quad 0x3ff7ca2a417b4580 - .quad 0x3ff7cc3a04870b28 - .quad 0x3ff7ce49f54eee2d - .quad 0x3ff7d05a13d6e52a - .quad 0x3ff7d26a6022e710 - .quad 0x3ff7d47ada36eb2a - .quad 0x3ff7d68b8216e919 - .quad 0x3ff7d89c57c6d8d7 - .quad 0x3ff7daad5b4ab2b8 - .quad 0x3ff7dcbe8ca66f64 - .quad 0x3ff7decfebde07de - .quad 0x3ff7e0e178f57582 - .quad 0x3ff7e2f333f0b201 - .quad 0x3ff7e5051cd3b766 - .quad 0x3ff7e71733a28014 - .quad 0x3ff7e929786106c7 - .quad 0x3ff7eb3beb134693 - .quad 0x3ff7ed4e8bbd3ae3 - .quad 0x3ff7ef615a62df7a - .quad 0x3ff7f17457083077 - .quad 0x3ff7f38781b12a4e - .quad 0x3ff7f59ada61c9cc - .quad 0x3ff7f7ae611e0c17 - .quad 0x3ff7f9c215e9eeae - .quad 0x3ff7fbd5f8c96f66 - .quad 0x3ff7fdea09c08c72 - .quad 0x3ff7fffe48d34457 - .quad 0x3ff80212b60595f7 - .quad 0x3ff80427515b808b - .quad 0x3ff8063c1ad903a4 - .quad 0x3ff8085112821f2e - .quad 0x3ff80a66385ad36d - .quad 0x3ff80c7b8c6720fb - .quad 0x3ff80e910eab08ce - .quad 0x3ff810a6bf2a8c34 - .quad 0x3ff812bc9de9acd3 - .quad 0x3ff814d2aaec6cab - .quad 0x3ff816e8e636ce15 - .quad 0x3ff818ff4fccd3c0 - .quad 0x3ff81b15e7b280b9 - .quad 0x3ff81d2cadebd863 - .quad 0x3ff81f43a27cde79 - .quad 0x3ff8215ac5699711 - .quad 0x3ff8237216b60699 - .quad 0x3ff82589966631da - .quad 0x3ff827a1447e1df3 - .quad 0x3ff829b92101d060 - .quad 0x3ff82bd12bf54ef1 - .quad 0x3ff82de9655c9fd6 - .quad 0x3ff83001cd3bc993 - .quad 0x3ff8321a6396d307 - .quad 0x3ff834332871c36a - .quad 0x3ff8364c1bd0a24e - .quad 0x3ff838653db7779f - .quad 0x3ff83a7e8e2a4ba1 - .quad 0x3ff83c980d2d26f1 - .quad 0x3ff83eb1bac41287 - .quad 0x3ff840cb96f317b4 - .quad 0x3ff842e5a1be4023 - .quad 0x3ff844ffdb2995d7 - .quad 0x3ff8471a4339232f - .quad 0x3ff84934d9f0f2e1 - .quad 0x3ff84b4f9f550fff - .quad 0x3ff84d6a936985f4 - .quad 0x3ff84f85b6326082 - .quad 0x3ff851a107b3abca - .quad 0x3ff853bc87f17443 - .quad 0x3ff855d836efc6bd - .quad 0x3ff857f414b2b067 - .quad 0x3ff85a10213e3ec4 - .quad 0x3ff85c2c5c967fb5 - .quad 0x3ff85e48c6bf8171 - .quad 0x3ff860655fbd528d - .quad 0x3ff86282279401f7 - .quad 0x3ff8649f1e479ef5 - .quad 0x3ff866bc43dc392a - .quad 0x3ff868d99855e08f - .quad 0x3ff86af71bb8a57c - .quad 0x3ff86d14ce08989e - .quad 0x3ff86f32af49cb03 - .quad 0x3ff87150bf804e0b - .quad 0x3ff8736efeb03378 - .quad 0x3ff8758d6cdd8d61 - .quad 0x3ff877ac0a0c6e38 - .quad 0x3ff879cad640e8cc - .quad 0x3ff87be9d17f1044 - .quad 0x3ff87e08fbcaf822 - .quad 0x3ff880285528b444 - .quad 0x3ff88247dd9c58df - .quad 0x3ff884679529fa86 - .quad 0x3ff886877bd5ae23 - .quad 0x3ff888a791a388ff - .quad 0x3ff88ac7d697a0b9 - .quad 0x3ff88ce84ab60b4f - .quad 0x3ff88f08ee02df15 - .quad 0x3ff89129c08232be - .quad 0x3ff8934ac2381d54 - .quad 0x3ff8956bf328b63f - .quad 0x3ff8978d53581541 - .quad 0x3ff899aee2ca5273 - .quad 0x3ff89bd0a183864e - .quad 0x3ff89df28f87c9a5 - .quad 0x3ff8a014acdb35a2 - .quad 0x3ff8a236f981e3cd - .quad 0x3ff8a459757fee0b - .quad 0x3ff8a67c20d96e96 - .quad 0x3ff8a89efb928009 - .quad 0x3ff8aac205af3d57 - .quad 0x3ff8ace53f33c1ce - .quad 0x3ff8af08a8242919 - .quad 0x3ff8b12c40848f3b - .quad 0x3ff8b35008591095 - .quad 0x3ff8b573ffa5c9e2 - .quad 0x3ff8b798266ed839 - .quad 0x3ff8b9bc7cb8590d - .quad 0x3ff8bbe102866a27 - .quad 0x3ff8be05b7dd29b2 - .quad 0x3ff8c02a9cc0b632 - .quad 0x3ff8c24fb1352e86 - .quad 0x3ff8c474f53eb1e8 - .quad 0x3ff8c69a68e15fed - .quad 0x3ff8c8c00c215887 - .quad 0x3ff8cae5df02bc04 - .quad 0x3ff8cd0be189ab0a - .quad 0x3ff8cf3213ba46a0 - .quad 0x3ff8d1587598b023 - .quad 0x3ff8d37f07290950 - .quad 0x3ff8d5a5c86f743d - .quad 0x3ff8d7ccb970135d - .quad 0x3ff8d9f3da2f097f - .quad 0x3ff8dc1b2ab079ca - .quad 0x3ff8de42aaf887c7 - .quad 0x3ff8e06a5b0b5758 - .quad 0x3ff8e2923aed0cb7 - .quad 0x3ff8e4ba4aa1cc81 - .quad 0x3ff8e6e28a2dbba9 - .quad 0x3ff8e90af994ff81 - .quad 0x3ff8eb3398dbbdb7 - .quad 0x3ff8ed5c68061c54 - .quad 0x3ff8ef85671841bc - .quad 0x3ff8f1ae961654b0 - .quad 0x3ff8f3d7f5047c4f - .quad 0x3ff8f60183e6e012 - .quad 0x3ff8f82b42c1a7cf - .quad 0x3ff8fa553198fbb8 - .quad 0x3ff8fc7f5071045a - .quad 0x3ff8fea99f4deaa1 - .quad 0x3ff900d41e33d7d1 - .quad 0x3ff902fecd26f58f - .quad 0x3ff90529ac2b6dda - .quad 0x3ff90754bb456b0e - .quad 0x3ff9097ffa7917e2 - .quad 0x3ff90bab69ca9f6c - .quad 0x3ff90dd7093e2d1b - .quad 0x3ff91002d8d7ecbd - .quad 0x3ff9122ed89c0a7e - .quad 0x3ff9145b088eb2e4 - .quad 0x3ff9168768b412d0 - .quad 0x3ff918b3f9105783 - .quad 0x3ff91ae0b9a7ae9b - .quad 0x3ff91d0daa7e4610 - .quad 0x3ff91f3acb984c37 - .quad 0x3ff921681cf9efc3 - .quad 0x3ff923959ea75fc4 - .quad 0x3ff925c350a4cba7 - .quad 0x3ff927f132f66333 - .quad 0x3ff92a1f45a05690 - .quad 0x3ff92c4d88a6d63f - .quad 0x3ff92e7bfc0e1323 - .quad 0x3ff930aa9fda3e74 - .quad 0x3ff932d9740f89d1 - .quad 0x3ff9350878b2272d - .quad 0x3ff93737adc648dd - .quad 0x3ff9396713502192 - .quad 0x3ff93b96a953e45b - .quad 0x3ff93dc66fd5c4a2 - .quad 0x3ff93ff666d9f630 - .quad 0x3ff942268e64ad2b - .quad 0x3ff94456e67a1e16 - .quad 0x3ff946876f1e7dd2 - .quad 0x3ff948b82856019b - .quad 0x3ff94ae91224df0d - .quad 0x3ff94d1a2c8f4c1e - .quad 0x3ff94f4b77997f27 - .quad 0x3ff9517cf347aeda - .quad 0x3ff953ae9f9e1246 - .quad 0x3ff955e07ca0e0dd - .quad 0x3ff958128a545266 - .quad 0x3ff95a44c8bc9f0e - .quad 0x3ff95c7737ddff5a - .quad 0x3ff95ea9d7bcac2f - .quad 0x3ff960dca85cdecf - .quad 0x3ff9630fa9c2d0da - .quad 0x3ff96542dbf2bc4e - .quad 0x3ff967763ef0db86 - .quad 0x3ff969a9d2c1693a - .quad 0x3ff96bdd9768a084 - .quad 0x3ff96e118ceabcd7 - .quad 0x3ff97045b34bfa05 - .quad 0x3ff9727a0a90943f - .quad 0x3ff974ae92bcc816 - .quad 0x3ff976e34bd4d273 - .quad 0x3ff9791835dcf0a3 - .quad 0x3ff97b4d50d9604e - .quad 0x3ff97d829cce5f7c - .quad 0x3ff97fb819c02c8f - .quad 0x3ff981edc7b3064d - .quad 0x3ff98423a6ab2bd5 - .quad 0x3ff98659b6acdca7 - .quad 0x3ff9888ff7bc58a2 - .quad 0x3ff98ac669dde001 - .quad 0x3ff98cfd0d15b35d - .quad 0x3ff98f33e16813b0 - .quad 0x3ff9916ae6d94251 - .quad 0x3ff993a21d6d80f4 - .quad 0x3ff995d9852911ae - .quad 0x3ff998111e1036f2 - .quad 0x3ff99a48e827338e - .quad 0x3ff99c80e3724ab5 - .quad 0x3ff99eb90ff5bff1 - .quad 0x3ff9a0f16db5d730 - .quad 0x3ff9a329fcb6d4be - .quad 0x3ff9a562bcfcfd42 - .quad 0x3ff9a79bae8c95c8 - .quad 0x3ff9a9d4d169e3b4 - .quad 0x3ff9ac0e25992ccd - .quad 0x3ff9ae47ab1eb739 - .quad 0x3ff9b08161fec979 - .quad 0x3ff9b2bb4a3daa71 - .quad 0x3ff9b4f563dfa161 - .quad 0x3ff9b72faee8f5e9 - .quad 0x3ff9b96a2b5df009 - .quad 0x3ff9bba4d942d81f - .quad 0x3ff9bddfb89bf6e9 - .quad 0x3ff9c01ac96d9580 - .quad 0x3ff9c2560bbbfd60 - .quad 0x3ff9c4917f8b7866 - .quad 0x3ff9c6cd24e050c8 - .quad 0x3ff9c908fbbed121 - .quad 0x3ff9cb45042b4467 - .quad 0x3ff9cd813e29f5f2 - .quad 0x3ff9cfbda9bf3179 - .quad 0x3ff9d1fa46ef430e - .quad 0x3ff9d43715be772a - .quad 0x3ff9d67416311aa0 - .quad 0x3ff9d8b1484b7aa2 - .quad 0x3ff9daeeac11e4c5 - .quad 0x3ff9dd2c4188a6fb - .quad 0x3ff9df6a08b40f94 - .quad 0x3ff9e1a801986d45 - .quad 0x3ff9e3e62c3a0f1d - .quad 0x3ff9e624889d448d - .quad 0x3ff9e86316c65d65 - .quad 0x3ff9eaa1d6b9a9d6 - .quad 0x3ff9ece0c87b7a6f - .quad 0x3ff9ef1fec102020 - .quad 0x3ff9f15f417bec36 - .quad 0x3ff9f39ec8c33062 - .quad 0x3ff9f5de81ea3eb2 - .quad 0x3ff9f81e6cf56995 - .quad 0x3ff9fa5e89e903d9 - .quad 0x3ff9fc9ed8c960ac - .quad 0x3ff9fedf599ad39d - .quad 0x3ffa01200c61b09a - .quad 0x3ffa0360f1224bf2 - .quad 0x3ffa05a207e0fa53 - .quad 0x3ffa07e350a210ca - .quad 0x3ffa0a24cb69e4c7 - .quad 0x3ffa0c66783ccc19 - .quad 0x3ffa0ea8571f1ced - .quad 0x3ffa10ea68152dd4 - .quad 0x3ffa132cab2355bc - .quad 0x3ffa156f204debf5 - .quad 0x3ffa17b1c7994830 - .quad 0x3ffa19f4a109c27b - .quad 0x3ffa1c37aca3b348 - .quad 0x3ffa1e7aea6b7367 - .quad 0x3ffa20be5a655c0a - .quad 0x3ffa2301fc95c6c4 - .quad 0x3ffa2545d1010d86 - .quad 0x3ffa2789d7ab8aa3 - .quad 0x3ffa29ce109998cf - .quad 0x3ffa2c127bcf931c - .quad 0x3ffa2e571951d502 - .quad 0x3ffa309be924ba55 - .quad 0x3ffa32e0eb4c9f4a - .quad 0x3ffa35261fcde079 - .quad 0x3ffa376b86acdad9 - .quad 0x3ffa39b11fedebc2 - .quad 0x3ffa3bf6eb9570ef - .quad 0x3ffa3e3ce9a7c878 - .quad 0x3ffa40831a2950d8 - .quad 0x3ffa42c97d1e68ec - .quad 0x3ffa4510128b6ff1 - .quad 0x3ffa4756da74c583 - .quad 0x3ffa499dd4dec9a2 - .quad 0x3ffa4be501cddcad - .quad 0x3ffa4e2c61465f66 - .quad 0x3ffa5073f34cb2f0 - .quad 0x3ffa52bbb7e538cc - .quad 0x3ffa5503af1452e0 - .quad 0x3ffa574bd8de6371 - .quad 0x3ffa59943547cd25 - .quad 0x3ffa5bdcc454f307 - .quad 0x3ffa5e25860a387d - .quad 0x3ffa606e7a6c0154 - .quad 0x3ffa62b7a17eb1b8 - .quad 0x3ffa6500fb46ae37 - .quad 0x3ffa674a87c85bbf - .quad 0x3ffa699447081fa2 - .quad 0x3ffa6bde390a5f91 - .quad 0x3ffa6e285dd3819f - .quad 0x3ffa7072b567ec43 - .quad 0x3ffa72bd3fcc0653 - .quad 0x3ffa7507fd043708 - .quad 0x3ffa7752ed14e5fb - .quad 0x3ffa799e10027b29 - .quad 0x3ffa7be965d15ef0 - .quad 0x3ffa7e34ee85fa0f - .quad 0x3ffa8080aa24b5a6 - .quad 0x3ffa82cc98b1fb3a - .quad 0x3ffa8518ba3234b0 - .quad 0x3ffa87650ea9cc4d - .quad 0x3ffa89b1961d2cbb - .quad 0x3ffa8bfe5090c106 - .quad 0x3ffa8e4b3e08f499 - .quad 0x3ffa90985e8a3344 - .quad 0x3ffa92e5b218e937 - .quad 0x3ffa953338b98307 - .quad 0x3ffa9780f2706da6 - .quad 0x3ffa99cedf42166e - .quad 0x3ffa9c1cff32eb19 - .quad 0x3ffa9e6b524759c1 - .quad 0x3ffaa0b9d883d0e6 - .quad 0x3ffaa30891ecbf66 - .quad 0x3ffaa5577e869486 - .quad 0x3ffaa7a69e55bfea - .quad 0x3ffaa9f5f15eb19b - .quad 0x3ffaac4577a5da02 - .quad 0x3ffaae95312fa9ec - .quad 0x3ffab0e51e009287 - .quad 0x3ffab3353e1d0565 - .quad 0x3ffab5859189747c - .quad 0x3ffab7d6184a5220 - .quad 0x3ffaba26d264110c - .quad 0x3ffabc77bfdb245d - .quad 0x3ffabec8e0b3ff90 - .quad 0x3ffac11a34f31687 - .quad 0x3ffac36bbc9cdd87 - .quad 0x3ffac5bd77b5c936 - .quad 0x3ffac80f66424e9f - .quad 0x3ffaca618846e330 - .quad 0x3ffaccb3ddc7fcb7 - .quad 0x3ffacf0666ca1167 - .quad 0x3ffad159235197d6 - .quad 0x3ffad3ac136306fc - .quad 0x3ffad5ff3702d636 - .quad 0x3ffad8528e357d43 - .quad 0x3ffadaa618ff7445 - .quad 0x3ffadcf9d76533bf - .quad 0x3ffadf4dc96b349b - .quad 0x3ffae1a1ef15f025 - .quad 0x3ffae3f64869e00c - .quad 0x3ffae64ad56b7e60 - .quad 0x3ffae89f961f4598 - .quad 0x3ffaeaf48a89b08d - .quad 0x3ffaed49b2af3a7a - .quad 0x3ffaef9f0e945eff - .quad 0x3ffaf1f49e3d9a1f - .quad 0x3ffaf44a61af6840 - .quad 0x3ffaf6a058ee462d - .quad 0x3ffaf8f683feb114 - .quad 0x3ffafb4ce2e52685 - .quad 0x3ffafda375a62474 - .quad 0x3ffafffa3c46293a - .quad 0x3ffb025136c9b394 - .quad 0x3ffb04a8653542a2 - .quad 0x3ffb06ffc78d55e6 - .quad 0x3ffb09575dd66d48 - .quad 0x3ffb0baf28150913 - .quad 0x3ffb0e07264da9f8 - .quad 0x3ffb105f5884d106 - .quad 0x3ffb12b7bebeffb8 - .quad 0x3ffb15105900b7e6 - .quad 0x3ffb1769274e7bcf - .quad 0x3ffb19c229acce18 - .quad 0x3ffb1c1b602031c6 - .quad 0x3ffb1e74caad2a44 - .quad 0x3ffb20ce69583b61 - .quad 0x3ffb23283c25e951 - .quad 0x3ffb2582431ab8ab - .quad 0x3ffb27dc7e3b2e6b - .quad 0x3ffb2a36ed8bcff1 - .quad 0x3ffb2c9191112300 - .quad 0x3ffb2eec68cfadc2 - .quad 0x3ffb314774cbf6c3 - .quad 0x3ffb33a2b50a84f5 - .quad 0x3ffb35fe298fdfad - .quad 0x3ffb3859d2608ea7 - .quad 0x3ffb3ab5af811a00 - .quad 0x3ffb3d11c0f60a3b - .quad 0x3ffb3f6e06c3e840 - .quad 0x3ffb41ca80ef3d5d - .quad 0x3ffb44272f7c9343 - .quad 0x3ffb468412707405 - .quad 0x3ffb48e129cf6a20 - .quad 0x3ffb4b3e759e0071 - .quad 0x3ffb4d9bf5e0c23e - .quad 0x3ffb4ff9aa9c3b30 - .quad 0x3ffb525793d4f751 - .quad 0x3ffb54b5b18f8319 - .quad 0x3ffb571403d06b5b - .quad 0x3ffb59728a9c3d55 - .quad 0x3ffb5bd145f786a7 - .quad 0x3ffb5e3035e6d559 - .quad 0x3ffb608f5a6eb7d6 - .quad 0x3ffb62eeb393bcee - .quad 0x3ffb654e415a73d6 - .quad 0x3ffb67ae03c76c2a - .quad 0x3ffb6a0dfadf35e8 - .quad 0x3ffb6c6e26a66177 - .quad 0x3ffb6ece87217fa1 - .quad 0x3ffb712f1c552196 - .quad 0x3ffb738fe645d8e9 - .quad 0x3ffb75f0e4f83795 - .quad 0x3ffb78521870cffb - .quad 0x3ffb7ab380b434df - .quad 0x3ffb7d151dc6f96c - .quad 0x3ffb7f76efadb132 - .quad 0x3ffb81d8f66cf026 - .quad 0x3ffb843b32094aa4 - .quad 0x3ffb869da287556c - .quad 0x3ffb890047eba5a5 - .quad 0x3ffb8b63223ad0da - .quad 0x3ffb8dc631796cfe - .quad 0x3ffb902975ac1068 - .quad 0x3ffb928ceed751d6 - .quad 0x3ffb94f09cffc869 - .quad 0x3ffb9754802a0bab - .quad 0x3ffb99b8985ab38a - .quad 0x3ffb9c1ce596585d - .quad 0x3ffb9e8167e192dc - .quad 0x3ffba0e61f40fc29 - .quad 0x3ffba34b0bb92dca - .quad 0x3ffba5b02d4ec1ab - .quad 0x3ffba81584065220 - .quad 0x3ffbaa7b0fe479e1 - .quad 0x3ffbace0d0edd40c - .quad 0x3ffbaf46c726fc27 - .quad 0x3ffbb1acf2948e1f - .quad 0x3ffbb413533b2643 - .quad 0x3ffbb679e91f614c - .quad 0x3ffbb8e0b445dc58 - .quad 0x3ffbbb47b4b334eb - .quad 0x3ffbbdaeea6c08f0 - .quad 0x3ffbc0165574f6bb - .quad 0x3ffbc27df5d29d00 - .quad 0x3ffbc4e5cb899adf - .quad 0x3ffbc74dd69e8fdc - .quad 0x3ffbc9b617161be5 - .quad 0x3ffbcc1e8cf4df48 - .quad 0x3ffbce87383f7ac1 - .quad 0x3ffbd0f018fa8f6d - .quad 0x3ffbd3592f2abed3 - .quad 0x3ffbd5c27ad4aae0 - .quad 0x3ffbd82bfbfcf5e7 - .quad 0x3ffbda95b2a842a2 - .quad 0x3ffbdcff9edb3432 - .quad 0x3ffbdf69c09a6e20 - .quad 0x3ffbe1d417ea945a - .quad 0x3ffbe43ea4d04b36 - .quad 0x3ffbe6a967503772 - .quad 0x3ffbe9145f6efe30 - .quad 0x3ffbeb7f8d3144fc - .quad 0x3ffbedeaf09bb1c7 - .quad 0x3ffbf05689b2eaec - .quad 0x3ffbf2c2587b9729 - .quad 0x3ffbf52e5cfa5da6 - .quad 0x3ffbf79a9733e5f3 - .quad 0x3ffbfa07072cd804 - .quad 0x3ffbfc73ace9dc39 - .quad 0x3ffbfee0886f9b53 - .quad 0x3ffc014d99c2be80 - .quad 0x3ffc03bae0e7ef53 - .quad 0x3ffc06285de3d7c7 - .quad 0x3ffc089610bb223d - .quad 0x3ffc0b03f9727980 - .quad 0x3ffc0d72180e88c1 - .quad 0x3ffc0fe06c93fb98 - .quad 0x3ffc124ef7077e06 - .quad 0x3ffc14bdb76dbc74 - .quad 0x3ffc172cadcb63b0 - .quad 0x3ffc199bda2520f2 - .quad 0x3ffc1c0b3c7fa1d9 - .quad 0x3ffc1e7ad4df946e - .quad 0x3ffc20eaa349a71c - .quad 0x3ffc235aa7c288be - .quad 0x3ffc25cae24ee890 - .quad 0x3ffc283b52f37637 - .quad 0x3ffc2aabf9b4e1c5 - .quad 0x3ffc2d1cd697dbaf - .quad 0x3ffc2f8de9a114d2 - .quad 0x3ffc31ff32d53e76 - .quad 0x3ffc3470b2390a49 - .quad 0x3ffc36e267d12a62 - .quad 0x3ffc395453a25140 - .quad 0x3ffc3bc675b131cb - .quad 0x3ffc3e38ce027f50 - .quad 0x3ffc40ab5c9aed89 - .quad 0x3ffc431e217f3095 - .quad 0x3ffc45911cb3fcfd - .quad 0x3ffc48044e3e07b0 - .quad 0x3ffc4a77b6220609 - .quad 0x3ffc4ceb5464adc8 - .quad 0x3ffc4f5f290ab517 - .quad 0x3ffc51d33418d28a - .quad 0x3ffc54477593bd1c - .quad 0x3ffc56bbed802c30 - .quad 0x3ffc59309be2d792 - .quad 0x3ffc5ba580c07778 - .quad 0x3ffc5e1a9c1dc47f - .quad 0x3ffc608fedff77ae - .quad 0x3ffc6305766a4a74 - .quad 0x3ffc657b3562f6a9 - .quad 0x3ffc67f12aee368d - .quad 0x3ffc6a675710c4cc - .quad 0x3ffc6cddb9cf5c77 - .quad 0x3ffc6f54532eb909 - .quad 0x3ffc71cb23339668 - .quad 0x3ffc744229e2b0e1 - .quad 0x3ffc76b96740c52b - .quad 0x3ffc7930db529065 - .quad 0x3ffc7ba8861cd01a - .quad 0x3ffc7e2067a44239 - .quad 0x3ffc80987feda51f - .quad 0x3ffc8310cefdb791 - .quad 0x3ffc858954d938bc - .quad 0x3ffc88021184e837 - .quad 0x3ffc8a7b05058602 - .quad 0x3ffc8cf42f5fd289 - .quad 0x3ffc8f6d90988e9c - .quad 0x3ffc91e728b47b79 - .quad 0x3ffc9460f7b85ac7 - .quad 0x3ffc96dafda8ee95 - .quad 0x3ffc99553a8af95b - .quad 0x3ffc9bcfae633dfe - .quad 0x3ffc9e4a59367fca - .quad 0x3ffca0c53b098273 - .quad 0x3ffca34053e10a1b - .quad 0x3ffca5bba3c1db4b - .quad 0x3ffca8372ab0baf6 - .quad 0x3ffcaab2e8b26e78 - .quad 0x3ffcad2eddcbbb9a - .quad 0x3ffcafab0a01688c - .quad 0x3ffcb2276d583be7 - .quad 0x3ffcb4a407d4fcb3 - .quad 0x3ffcb720d97c725c - .quad 0x3ffcb99de25364bb - .quad 0x3ffcbc1b225e9c14 - .quad 0x3ffcbe9899a2e114 - .quad 0x3ffcc1164824fcd0 - .quad 0x3ffcc3942de9b8ca - .quad 0x3ffcc6124af5deee - .quad 0x3ffcc8909f4e3990 - .quad 0x3ffccb0f2af79372 - .quad 0x3ffccd8dedf6b7bd - .quad 0x3ffcd00ce8507204 - .quad 0x3ffcd28c1a098e48 - .quad 0x3ffcd50b8326d8f2 - .quad 0x3ffcd78b23ad1ed5 - .quad 0x3ffcda0afba12d30 - .quad 0x3ffcdc8b0b07d1aa - .quad 0x3ffcdf0b51e5da58 - .quad 0x3ffce18bd04015b7 - .quad 0x3ffce40c861b52b1 - .quad 0x3ffce68d737c6096 - .quad 0x3ffce90e98680f28 - .quad 0x3ffceb8ff4e32e8c - .quad 0x3ffcee1188f28f58 - .quad 0x3ffcf093549b0289 - .quad 0x3ffcf31557e15988 - .quad 0x3ffcf59792ca6629 - .quad 0x3ffcf81a055afaab - .quad 0x3ffcfa9caf97e9b8 - .quad 0x3ffcfd1f91860666 - .quad 0x3ffcffa2ab2a2432 - .quad 0x3ffd0225fc891709 - .quad 0x3ffd04a985a7b341 - .quad 0x3ffd072d468acd9b - .quad 0x3ffd09b13f373b42 - .quad 0x3ffd0c356fb1d1ce - .quad 0x3ffd0eb9d7ff6743 - .quad 0x3ffd113e7824d20f - .quad 0x3ffd13c35026e90b - .quad 0x3ffd1648600a837b - .quad 0x3ffd18cda7d4790f - .quad 0x3ffd1b532789a1e4 - .quad 0x3ffd1dd8df2ed681 - .quad 0x3ffd205ecec8efd8 - .quad 0x3ffd22e4f65cc746 - .quad 0x3ffd256b55ef3696 - .quad 0x3ffd27f1ed8517fd - .quad 0x3ffd2a78bd23461a - .quad 0x3ffd2cffc4ce9bfe - .quad 0x3ffd2f87048bf51e - .quad 0x3ffd320e7c602d5e - .quad 0x3ffd34962c50210e - .quad 0x3ffd371e1460aced - .quad 0x3ffd39a63496ae1e - .quad 0x3ffd3c2e8cf70237 - .quad 0x3ffd3eb71d868736 - .quad 0x3ffd413fe64a1b88 - .quad 0x3ffd43c8e7469e02 - .quad 0x3ffd46522080edeb - .quad 0x3ffd48db91fdeaf0 - .quad 0x3ffd4b653bc2752c - .quad 0x3ffd4def1dd36d29 - .quad 0x3ffd50793835b3da - .quad 0x3ffd53038aee2a9f - .quad 0x3ffd558e1601b344 - .quad 0x3ffd5818d9753003 - .quad 0x3ffd5aa3d54d8381 - .quad 0x3ffd5d2f098f90cf - .quad 0x3ffd5fba76403b6b - .quad 0x3ffd62461b64673f - .quad 0x3ffd64d1f900f8a4 - .quad 0x3ffd675e0f1ad45a - .quad 0x3ffd69ea5db6df94 - .quad 0x3ffd6c76e4d9ffed - .quad 0x3ffd6f03a4891b6e - .quad 0x3ffd71909cc9188f - .quad 0x3ffd741dcd9ede30 - .quad 0x3ffd76ab370f53a1 - .quad 0x3ffd7938d91f609f - .quad 0x3ffd7bc6b3d3ed53 - .quad 0x3ffd7e54c731e251 - .quad 0x3ffd80e3133e289e - .quad 0x3ffd837197fda9a8 - .quad 0x3ffd860055754f4c - .quad 0x3ffd888f4baa03d3 - .quad 0x3ffd8b1e7aa0b1f5 - .quad 0x3ffd8dade25e44d5 - .quad 0x3ffd903d82e7a803 - .quad 0x3ffd92cd5c41c77f - .quad 0x3ffd955d6e718fb2 - .quad 0x3ffd97edb97bed76 - .quad 0x3ffd9a7e3d65ce10 - .quad 0x3ffd9d0efa341f33 - .quad 0x3ffd9f9fefebceff - .quad 0x3ffda2311e91cc02 - .quad 0x3ffda4c2862b0536 - .quad 0x3ffda75426bc6a05 - .quad 0x3ffda9e6004aea45 - .quad 0x3ffdac7812db7638 - .quad 0x3ffdaf0a5e72fe91 - .quad 0x3ffdb19ce316746e - .quad 0x3ffdb42fa0cac95a - .quad 0x3ffdb6c29794ef50 - .quad 0x3ffdb955c779d8b8 - .quad 0x3ffdbbe9307e7867 - .quad 0x3ffdbe7cd2a7c1a1 - .quad 0x3ffdc110adfaa815 - .quad 0x3ffdc3a4c27c1fe4 - .quad 0x3ffdc63910311d9a - .quad 0x3ffdc8cd971e9631 - .quad 0x3ffdcb6257497f13 - .quad 0x3ffdcdf750b6ce17 - .quad 0x3ffdd08c836b797f - .quad 0x3ffdd321ef6c7800 - .quad 0x3ffdd5b794bec0bc - .quad 0x3ffdd84d73674b3f - .quad 0x3ffddae38b6b0f89 - .quad 0x3ffddd79dccf0603 - .quad 0x3ffde01067982789 - .quad 0x3ffde2a72bcb6d61 - .quad 0x3ffde53e296dd143 - .quad 0x3ffde7d560844d54 - .quad 0x3ffdea6cd113dc26 - .quad 0x3ffded047b2178bb - .quad 0x3ffdef9c5eb21e83 - .quad 0x3ffdf2347bcac95e - .quad 0x3ffdf4ccd2707596 - .quad 0x3ffdf76562a81feb - .quad 0x3ffdf9fe2c76c585 - .quad 0x3ffdfc972fe163fd - .quad 0x3ffdff306cecf95b - .quad 0x3ffe01c9e39e8418 - .quad 0x3ffe046393fb0315 - .quad 0x3ffe06fd7e0775aa - .quad 0x3ffe0997a1c8db99 - .quad 0x3ffe0c31ff443512 - .quad 0x3ffe0ecc967e82b9 - .quad 0x3ffe1167677cc59c - .quad 0x3ffe14027243ff3b - .quad 0x3ffe169db6d93183 - .quad 0x3ffe193935415ed1 - .quad 0x3ffe1bd4ed8189f2 - .quad 0x3ffe1e70df9eb621 - .quad 0x3ffe210d0b9de709 - .quad 0x3ffe23a9718420c3 - .quad 0x3ffe2646115667d9 - .quad 0x3ffe28e2eb19c142 - .quad 0x3ffe2b7ffed33266 - .quad 0x3ffe2e1d4c87c11e - .quad 0x3ffe30bad43c73ae - .quad 0x3ffe335895f650cf - .quad 0x3ffe35f691ba5fa4 - .quad 0x3ffe3894c78da7c2 - .quad 0x3ffe3b333775312f - .quad 0x3ffe3dd1e176045e - .quad 0x3ffe4070c5952a35 - .quad 0x3ffe430fe3d7ac06 - .quad 0x3ffe45af3c429394 - .quad 0x3ffe484ecedaeb14 - .quad 0x3ffe4aee9ba5bd26 - .quad 0x3ffe4d8ea2a814df - .quad 0x3ffe502ee3e6fdc2 - .quad 0x3ffe52cf5f6783c0 - .quad 0x3ffe5570152eb33c - .quad 0x3ffe581105419909 - .quad 0x3ffe5ab22fa54269 - .quad 0x3ffe5d53945ebd0f - .quad 0x3ffe5ff53373171e - .quad 0x3ffe62970ce75f28 - .quad 0x3ffe653920c0a430 - .quad 0x3ffe67db6f03f5ab - .quad 0x3ffe6a7df7b6637a - .quad 0x3ffe6d20badcfdf3 - .quad 0x3ffe6fc3b87cd5d9 - .quad 0x3ffe7266f09afc62 - .quad 0x3ffe750a633c8332 - .quad 0x3ffe77ae10667c5d - .quad 0x3ffe7a51f81dfa6b - .quad 0x3ffe7cf61a681052 - .quad 0x3ffe7f9a7749d178 - .quad 0x3ffe823f0ec851b6 - .quad 0x3ffe84e3e0e8a554 - .quad 0x3ffe8788edafe10a - .quad 0x3ffe8a2e35231a01 - .quad 0x3ffe8cd3b74765d6 - .quad 0x3ffe8f797421da93 - .quad 0x3ffe921f6bb78eb2 - .quad 0x3ffe94c59e0d9924 - .quad 0x3ffe976c0b291144 - .quad 0x3ffe9a12b30f0ee0 - .quad 0x3ffe9cb995c4aa3b - .quad 0x3ffe9f60b34efc02 - .quad 0x3ffea2080bb31d5a - .quad 0x3ffea4af9ef627d4 - .quad 0x3ffea7576d1d3575 - .quad 0x3ffea9ff762d60b2 - .quad 0x3ffeaca7ba2bc471 - .quad 0x3ffeaf50391d7c09 - .quad 0x3ffeb1f8f307a346 - .quad 0x3ffeb4a1e7ef5660 - .quad 0x3ffeb74b17d9b203 - .quad 0x3ffeb9f482cbd34b - .quad 0x3ffebc9e28cad7ca - .quad 0x3ffebf4809dbdd7c - .quad 0x3ffec1f2260402d5 - .quad 0x3ffec49c7d4866b8 - .quad 0x3ffec7470fae2879 - .quad 0x3ffec9f1dd3a67df - .quad 0x3ffecc9ce5f24521 - .quad 0x3ffecf4829dae0eb - .quad 0x3ffed1f3a8f95c56 - .quad 0x3ffed49f6352d8ef - .quad 0x3ffed74b58ec78b7 - .quad 0x3ffed9f789cb5e20 - .quad 0x3ffedca3f5f4ac0a - .quad 0x3ffedf509d6d85cb - .quad 0x3ffee1fd803b0f2a - .quad 0x3ffee4aa9e626c5f - .quad 0x3ffee757f7e8c217 - .quad 0x3ffeea058cd3356e - .quad 0x3ffeecb35d26ebf2 - .quad 0x3ffeef6168e90ba5 - .quad 0x3ffef20fb01ebafb - .quad 0x3ffef4be32cd20da - .quad 0x3ffef76cf0f9649a - .quad 0x3ffefa1beaa8ae04 - .quad 0x3ffefccb1fe02556 - .quad 0x3ffeff7a90a4f33f - .quad 0x3fff022a3cfc40e1 - .quad 0x3fff04da24eb37d0 - .quad 0x3fff078a48770213 - .quad 0x3fff0a3aa7a4ca23 - .quad 0x3fff0ceb4279baea - .quad 0x3fff0f9c18faffca - .quad 0x3fff124d2b2dc491 - .quad 0x3fff14fe79173584 - .quad 0x3fff17b002bc7f5a - .quad 0x3fff1a61c822cf3c - .quad 0x3fff1d13c94f52c7 - .quad 0x3fff1fc606473809 - .quad 0x3fff22787f0fad85 - .quad 0x3fff252b33ade22f - .quad 0x3fff27de24270571 - .quad 0x3fff2a9150804723 - .quad 0x3fff2d44b8bed796 - .quad 0x3fff2ff85ce7e78a - .quad 0x3fff32ac3d00a832 - .quad 0x3fff3560590e4b38 - .quad 0x3fff3814b11602b5 - .quad 0x3fff3ac9451d0138 - .quad 0x3fff3d7e152879c2 - .quad 0x3fff4033213d9fc8 - .quad 0x3fff42e86961a731 - .quad 0x3fff459ded99c45a - .quad 0x3fff4853adeb2c11 - .quad 0x3fff4b09aa5b1398 - .quad 0x3fff4dbfe2eeb0a6 - .quad 0x3fff507657ab3963 - .quad 0x3fff532d0895e46e - .quad 0x3fff55e3f5b3e8d8 - .quad 0x3fff589b1f0a7e23 - .quad 0x3fff5b52849edc4a - .quad 0x3fff5e0a26763bb8 - .quad 0x3fff60c20495d54d - .quad 0x3fff637a1f02e25c - .quad 0x3fff663275c29cab - .quad 0x3fff68eb08da3e7a - .quad 0x3fff6ba3d84f0275 - .quad 0x3fff6e5ce42623c1 - .quad 0x3fff71162c64ddf3 - .quad 0x3fff73cfb1106d1b - .quad 0x3fff7689722e0db5 - .quad 0x3fff79436fc2fcb6 - .quad 0x3fff7bfda9d47787 - .quad 0x3fff7eb82067bc04 - .quad 0x3fff8172d382087c - .quad 0x3fff842dc3289bb5 - .quad 0x3fff86e8ef60b4ea - .quad 0x3fff89a4582f93c7 - .quad 0x3fff8c5ffd9a786e - .quad 0x3fff8f1bdfa6a377 - .quad 0x3fff91d7fe5955eb - .quad 0x3fff949459b7d14b - .quad 0x3fff9750f1c7578c - .quad 0x3fff9a0dc68d2b16 - .quad 0x3fff9ccad80e8ec8 - .quad 0x3fff9f882650c5f2 - .quad 0x3fffa245b159145c - .quad 0x3fffa503792cbe42 - .quad 0x3fffa7c17dd10856 - .quad 0x3fffaa7fbf4b37bd - .quad 0x3fffad3e3da09211 - .quad 0x3fffaffcf8d65d61 - .quad 0x3fffb2bbf0f1e031 - .quad 0x3fffb57b25f8617d - .quad 0x3fffb83a97ef28b2 - .quad 0x3fffbafa46db7db4 - .quad 0x3fffbdba32c2a8db - .quad 0x3fffc07a5ba9f2f6 - .quad 0x3fffc33ac196a548 - .quad 0x3fffc5fb648e098a - .quad 0x3fffc8bc449569e9 - .quad 0x3fffcb7d61b21108 - .quad 0x3fffce3ebbe94a01 - .quad 0x3fffd10053406061 - .quad 0x3fffd3c227bca02c - .quad 0x3fffd684396355da - .quad 0x3fffd9468839ce5a - .quad 0x3fffdc0914455712 - .quad 0x3fffdecbdd8b3dd8 - .quad 0x3fffe18ee410d0ff - .quad 0x3fffe45227db5f4b - .quad 0x3fffe715a8f037f6 - .quad 0x3fffe9d96754aab1 - .quad 0x3fffec9d630e07a4 - .quad 0x3fffef619c219f69 - .quad 0x3ffff2261294c314 - .quad 0x3ffff4eac66cc42c - .quad 0x3ffff7afb7aef4b0 - .quad 0x3ffffa74e660a715 - .quad 0x3ffffd3a52872e44 - .quad 0x3ffffffffc27dd9e - .rept 56 - .byte 0 - .endr - -/* Other general purpose constants: - * _dbInvLn2 */ -double_vector __dbInvLn2 0x40a71547652b82fe - -/* _dbShifter */ -double_vector __dbShifter 0x4338000000000000 - -/* _dbHALF */ -double_vector __dbHALF 0x3fe0000000000000 - -/* _dbC1 = 2^(1/2^K)-1 */ -double_vector __dbC1 0x3f362f3904051fa1 - -/* _lbLOWKBITS = 2^K-1 */ -double_vector __lbLOWKBITS 0x00000000000007ff - -/* _iAbsMask */ -float_vector __iAbsMask 0x7fffffff - -/* _iDomainRange */ -float_vector __iDomainRange 0x4059fe36 - .type __svml_spow_data,@object - .size __svml_spow_data,.-__svml_spow_data diff --git a/sysdeps/x86_64/fpu/svml_s_powf_data.h b/sysdeps/x86_64/fpu/svml_s_powf_data.h deleted file mode 100644 index 016dbf7fce..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_powf_data.h +++ /dev/null @@ -1,76 +0,0 @@ -/* Offsets for data table for function powf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef S_POWF_DATA_H -#define S_POWF_DATA_H - -#define _Log2Rcp_lookup -4218496 -#define _NMINNORM 0 -#define _NMAXVAL 64 -#define _INF 128 -#define _ABSMASK 192 -#define _DOMAINRANGE 256 -#define _Log_HA_table 320 -#define _Log_LA_table 8576 -#define _poly_coeff_1 12736 -#define _poly_coeff_2 12800 -#define _poly_coeff_3 12864 -#define _poly_coeff_4 12928 -#define _ExpMask 12992 -#define _Two10 13056 -#define _MinNorm 13120 -#define _MaxNorm 13184 -#define _HalfMask 13248 -#define _One 13312 -#define _L2H 13376 -#define _L2L 13440 -#define _Threshold 13504 -#define _Bias 13568 -#define _Bias1 13632 -#define _L2 13696 -#define _dInfs 13760 -#define _dOnes 13824 -#define _dZeros 13888 -#define __dbT 13952 -#define __dbInvLn2 30400 -#define __dbShifter 30464 -#define __dbHALF 30528 -#define __dbC1 30592 -#define __lbLOWKBITS 30656 -#define __iAbsMask 30720 -#define __iDomainRange 30784 - -.macro double_vector offset value -.if .-__svml_spow_data != \offset -.err -.endif -.rept 8 -.quad \value -.endr -.endm - -.macro float_vector offset value -.if .-__svml_spow_data != \offset -.err -.endif -.rept 16 -.long \value -.endr -.endm - -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_sincosf16_core.S b/sysdeps/x86_64/fpu/svml_s_sincosf16_core.S deleted file mode 100644 index d86c91380e..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_sincosf16_core.S +++ /dev/null @@ -1,358 +0,0 @@ -/* Function sincosf vectorized with AVX-512. Wrapper to AVX2 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVeN16vl4l4_sincosf) -WRAPPER_IMPL_AVX512_fFF _ZGVdN8vl4l4_sincosf -END (_ZGVeN16vl4l4_sincosf) - -/* AVX512 ISA version as wrapper to AVX2 ISA version (for vector - function declared with #pragma omp declare simd notinbranch). */ -.macro WRAPPER_IMPL_AVX512_fFF_vvv callee -#ifndef __ILP32__ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $448, %rsp - /* Encoding for vmovups %zmm0, 384(%rsp). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x44 - .byte 0x24 - .byte 0x06 - lea (%rsp), %rdi - /* Encoding for vmovups %zmm1, 128(%rdi). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x4f - .byte 0x02 - /* Encoding for vmovups %zmm2, 192(%rdi). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x57 - .byte 0x03 - /* Encoding for vmovups %zmm3, 256(%rdi). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x5f - .byte 0x04 - /* Encoding for vmovups %zmm4, 320(%rdi). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x67 - .byte 0x05 - lea 64(%rsp), %rsi - call HIDDEN_JUMPTARGET(\callee) - vmovdqu 416(%rsp), %ymm0 - lea 32(%rsp), %rdi - lea 96(%rsp), %rsi - call HIDDEN_JUMPTARGET(\callee) - movq 128(%rsp), %rdx - movq 136(%rsp), %rsi - movq 144(%rsp), %r8 - movq 152(%rsp), %r10 - movl (%rsp), %eax - movl 4(%rsp), %ecx - movl 8(%rsp), %edi - movl 12(%rsp), %r9d - movl %eax, (%rdx) - movl %ecx, (%rsi) - movq 160(%rsp), %rax - movq 168(%rsp), %rcx - movl %edi, (%r8) - movl %r9d, (%r10) - movq 176(%rsp), %rdi - movq 184(%rsp), %r9 - movl 16(%rsp), %r11d - movl 20(%rsp), %edx - movl 24(%rsp), %esi - movl 28(%rsp), %r8d - movl %r11d, (%rax) - movl %edx, (%rcx) - movq 192(%rsp), %r11 - movq 200(%rsp), %rdx - movl %esi, (%rdi) - movl %r8d, (%r9) - movq 208(%rsp), %rsi - movq 216(%rsp), %r8 - movl 32(%rsp), %r10d - movl 36(%rsp), %eax - movl 40(%rsp), %ecx - movl 44(%rsp), %edi - movl %r10d, (%r11) - movl %eax, (%rdx) - movq 224(%rsp), %r10 - movq 232(%rsp), %rax - movl %ecx, (%rsi) - movl %edi, (%r8) - movq 240(%rsp), %rcx - movq 248(%rsp), %rdi - movl 48(%rsp), %r9d - movl 52(%rsp), %r11d - movl 56(%rsp), %edx - movl 60(%rsp), %esi - movl %r9d, (%r10) - movl %r11d, (%rax) - movq 256(%rsp), %r9 - movq 264(%rsp), %r11 - movl %edx, (%rcx) - movl %esi, (%rdi) - movq 272(%rsp), %rdx - movq 280(%rsp), %rsi - movl 64(%rsp), %r8d - movl 68(%rsp), %r10d - movl 72(%rsp), %eax - movl 76(%rsp), %ecx - movl %r8d, (%r9) - movl %r10d, (%r11) - movq 288(%rsp), %r8 - movq 296(%rsp), %r10 - movl %eax, (%rdx) - movl %ecx, (%rsi) - movq 304(%rsp), %rax - movq 312(%rsp), %rcx - movl 80(%rsp), %edi - movl 84(%rsp), %r9d - movl 88(%rsp), %r11d - movl 92(%rsp), %edx - movl %edi, (%r8) - movl %r9d, (%r10) - movq 320(%rsp), %rdi - movq 328(%rsp), %r9 - movl %r11d, (%rax) - movl %edx, (%rcx) - movq 336(%rsp), %r11 - movq 344(%rsp), %rdx - movl 96(%rsp), %esi - movl 100(%rsp), %r8d - movl 104(%rsp), %r10d - movl 108(%rsp), %eax - movl %esi, (%rdi) - movl %r8d, (%r9) - movq 352(%rsp), %rsi - movq 360(%rsp), %r8 - movl %r10d, (%r11) - movl %eax, (%rdx) - movq 368(%rsp), %r10 - movq 376(%rsp), %rax - movl 112(%rsp), %ecx - movl 116(%rsp), %edi - movl 120(%rsp), %r9d - movl 124(%rsp), %r11d - movl %ecx, (%rsi) - movl %edi, (%r8) - movl %r9d, (%r10) - movl %r11d, (%rax) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -#else - leal 8(%rsp), %r10d - .cfi_def_cfa 10, 0 - andl $-64, %esp - pushq -8(%r10d) - pushq %rbp - .cfi_escape 0x10,0x6,0x2,0x76,0 - movl %esp, %ebp - pushq %r12 - leal -112(%rbp), %esi - pushq %r10 - .cfi_escape 0xf,0x3,0x76,0x70,0x6 - .cfi_escape 0x10,0xc,0x2,0x76,0x78 - leal -176(%rbp), %edi - movq %rsi, %r12 - pushq %rbx - .cfi_escape 0x10,0x3,0x2,0x76,0x68 - movq %rdi, %rbx - subl $344, %esp - /* Encoding for vmovdqa64 %zmm1, -240(%ebp). */ - .byte 0x67 - .byte 0x62 - .byte 0xf1 - .byte 0xfd - .byte 0x48 - .byte 0x7f - .byte 0x8d - .byte 0x10 - .byte 0xff - .byte 0xff - .byte 0xff - /* Encoding for vmovdqa64 %zmm2, -304(%ebp). */ - .byte 0x67 - .byte 0x62 - .byte 0xf1 - .byte 0xfd - .byte 0x48 - .byte 0x7f - .byte 0x95 - .byte 0xd0 - .byte 0xfe - .byte 0xff - .byte 0xff - /* Encoding for vmovaps %zmm0, -368(%ebp). */ - .byte 0x67 - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x29 - .byte 0x85 - .byte 0x90 - .byte 0xfe - .byte 0xff - .byte 0xff - call HIDDEN_JUMPTARGET(\callee) - leal 32(%r12), %esi - vmovups -336(%ebp), %ymm0 - leal 32(%rbx), %edi - call HIDDEN_JUMPTARGET(\callee) - movl -240(%ebp), %eax - vmovss -176(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -236(%ebp), %eax - vmovss -172(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -232(%ebp), %eax - vmovss -168(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -228(%ebp), %eax - vmovss -164(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -224(%ebp), %eax - vmovss -160(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -220(%ebp), %eax - vmovss -156(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -216(%ebp), %eax - vmovss -152(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -212(%ebp), %eax - vmovss -148(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -208(%ebp), %eax - vmovss -144(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -204(%ebp), %eax - vmovss -140(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -200(%ebp), %eax - vmovss -136(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -196(%ebp), %eax - vmovss -132(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -192(%ebp), %eax - vmovss -128(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -188(%ebp), %eax - vmovss -124(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -184(%ebp), %eax - vmovss -120(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -180(%ebp), %eax - vmovss -116(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -304(%ebp), %eax - vmovss -112(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -300(%ebp), %eax - vmovss -108(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -296(%ebp), %eax - vmovss -104(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -292(%ebp), %eax - vmovss -100(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -288(%ebp), %eax - vmovss -96(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -284(%ebp), %eax - vmovss -92(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -280(%ebp), %eax - vmovss -88(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -276(%ebp), %eax - vmovss -84(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -272(%ebp), %eax - vmovss -80(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -268(%ebp), %eax - vmovss -76(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -264(%ebp), %eax - vmovss -72(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -260(%ebp), %eax - vmovss -68(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -256(%ebp), %eax - vmovss -64(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -252(%ebp), %eax - vmovss -60(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -248(%ebp), %eax - vmovss -56(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -244(%ebp), %eax - vmovss -52(%ebp), %xmm0 - vmovss %xmm0, (%eax) - addl $344, %esp - popq %rbx - popq %r10 - .cfi_def_cfa 10, 0 - popq %r12 - popq %rbp - leal -8(%r10), %esp - .cfi_def_cfa 7, 8 - ret -#endif -.endm - -ENTRY (_ZGVeN16vvv_sincosf) -WRAPPER_IMPL_AVX512_fFF_vvv _ZGVdN8vl4l4_sincosf -END (_ZGVeN16vvv_sincosf) diff --git a/sysdeps/x86_64/fpu/svml_s_sincosf4_core.S b/sysdeps/x86_64/fpu/svml_s_sincosf4_core.S deleted file mode 100644 index 2ab33b59a7..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_sincosf4_core.S +++ /dev/null @@ -1,152 +0,0 @@ -/* Function sincosf vectorized with SSE2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVbN4vl4l4_sincosf) -WRAPPER_IMPL_SSE2_fFF sincosf -END (_ZGVbN4vl4l4_sincosf) -libmvec_hidden_def (_ZGVbN4vl4l4_sincosf) - -/* SSE2 ISA version as wrapper to scalar (for vector - function declared with #pragma omp declare simd notinbranch). */ -.macro WRAPPER_IMPL_SSE2_fFF_vvv callee -#ifndef __ILP32__ - subq $120, %rsp - cfi_adjust_cfa_offset(120) - movaps %xmm0, 96(%rsp) - lea (%rsp), %rdi - movdqa %xmm1, 32(%rdi) - lea 16(%rsp), %rsi - movdqa %xmm2, 32(%rsi) - movdqa %xmm3, 48(%rsi) - movdqa %xmm4, 64(%rsi) - call JUMPTARGET(\callee) - movss 100(%rsp), %xmm0 - lea 4(%rsp), %rdi - lea 20(%rsp), %rsi - call JUMPTARGET(\callee) - movss 104(%rsp), %xmm0 - lea 8(%rsp), %rdi - lea 24(%rsp), %rsi - call JUMPTARGET(\callee) - movss 108(%rsp), %xmm0 - lea 12(%rsp), %rdi - lea 28(%rsp), %rsi - call JUMPTARGET(\callee) - movq 32(%rsp), %rdx - movq 40(%rsp), %rsi - movq 48(%rsp), %r8 - movq 56(%rsp), %r10 - movl (%rsp), %eax - movl 4(%rsp), %ecx - movl 8(%rsp), %edi - movl 12(%rsp), %r9d - movl %eax, (%rdx) - movl %ecx, (%rsi) - movq 64(%rsp), %rax - movq 72(%rsp), %rcx - movl %edi, (%r8) - movl %r9d, (%r10) - movq 80(%rsp), %rdi - movq 88(%rsp), %r9 - movl 16(%rsp), %r11d - movl 20(%rsp), %edx - movl 24(%rsp), %esi - movl 28(%rsp), %r8d - movl %r11d, (%rax) - movl %edx, (%rcx) - movl %esi, (%rdi) - movl %r8d, (%r9) - addq $120, %rsp - cfi_adjust_cfa_offset(-120) - ret -#else - pushq %rbp - .cfi_def_cfa_offset 16 - .cfi_offset 6, -16 - pushq %rbx - .cfi_def_cfa_offset 24 - .cfi_offset 3, -24 - subl $88, %esp - .cfi_def_cfa_offset 112 - leal 64(%rsp), %esi - movaps %xmm1, (%esp) - leal 48(%rsp), %edi - movaps %xmm2, 16(%esp) - movq %rsi, %rbp - movq %rdi, %rbx - movaps %xmm0, 32(%esp) - call JUMPTARGET(\callee) - movups 36(%esp), %xmm0 - leal 4(%rbp), %esi - leal 4(%rbx), %edi - call JUMPTARGET(\callee) - movups 40(%esp), %xmm0 - leal 8(%rbp), %esi - leal 8(%rbx), %edi - call JUMPTARGET(\callee) - movups 44(%esp), %xmm0 - leal 12(%rbp), %esi - leal 12(%rbx), %edi - call JUMPTARGET(\callee) - movq (%esp), %rax - movss 48(%esp), %xmm0 - movdqa (%esp), %xmm4 - movdqa 16(%esp), %xmm7 - movss %xmm0, (%eax) - movss 52(%esp), %xmm0 - pextrd $1, %xmm4, %eax - movss %xmm0, (%eax) - movq 8(%esp), %rax - movss 56(%esp), %xmm0 - movss %xmm0, (%eax) - movss 60(%esp), %xmm0 - pextrd $3, %xmm4, %eax - movss %xmm0, (%eax) - movq 16(%esp), %rax - movss 64(%esp), %xmm0 - movss %xmm0, (%eax) - movss 68(%esp), %xmm0 - pextrd $1, %xmm7, %eax - movss %xmm0, (%eax) - movq 24(%esp), %rax - movss 72(%esp), %xmm0 - movss %xmm0, (%eax) - movss 76(%esp), %xmm0 - pextrd $3, %xmm7, %eax - movss %xmm0, (%eax) - addl $88, %esp - .cfi_def_cfa_offset 24 - popq %rbx - .cfi_def_cfa_offset 16 - popq %rbp - .cfi_def_cfa_offset 8 - ret -#endif -.endm - -ENTRY (_ZGVbN4vvv_sincosf) -WRAPPER_IMPL_SSE2_fFF_vvv sincosf -END (_ZGVbN4vvv_sincosf) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVbN4vvv_sincosf) -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_sincosf8_core.S b/sysdeps/x86_64/fpu/svml_s_sincosf8_core.S deleted file mode 100644 index 757d39c522..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_sincosf8_core.S +++ /dev/null @@ -1,200 +0,0 @@ -/* Function sincosf vectorized with AVX2, wrapper version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVdN8vl4l4_sincosf) -WRAPPER_IMPL_AVX_fFF _ZGVbN4vl4l4_sincosf -END (_ZGVdN8vl4l4_sincosf) -libmvec_hidden_def (_ZGVdN8vl4l4_sincosf) - -/* AVX2 ISA version as wrapper to SSE ISA version (for vector - function declared with #pragma omp declare simd notinbranch). */ -.macro WRAPPER_IMPL_AVX2_fFF_vvv callee -#ifndef __ILP32__ - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-32, %rsp - subq $224, %rsp - vmovups %ymm0, 192(%rsp) - lea (%rsp), %rdi - vmovdqu %ymm1, 64(%rdi) - vmovdqu %ymm2, 96(%rdi) - vmovdqu %ymm3, 128(%rdi) - vmovdqu %ymm4, 160(%rdi) - lea 32(%rsp), %rsi - vzeroupper - call HIDDEN_JUMPTARGET(\callee) - vmovups 208(%rsp), %xmm0 - lea 16(%rsp), %rdi - lea 48(%rsp), %rsi - call HIDDEN_JUMPTARGET(\callee) - movq 64(%rsp), %rdx - movq 72(%rsp), %rsi - movq 80(%rsp), %r8 - movq 88(%rsp), %r10 - movl (%rsp), %eax - movl 4(%rsp), %ecx - movl 8(%rsp), %edi - movl 12(%rsp), %r9d - movl %eax, (%rdx) - movl %ecx, (%rsi) - movq 96(%rsp), %rax - movq 104(%rsp), %rcx - movl %edi, (%r8) - movl %r9d, (%r10) - movq 112(%rsp), %rdi - movq 120(%rsp), %r9 - movl 16(%rsp), %r11d - movl 20(%rsp), %edx - movl 24(%rsp), %esi - movl 28(%rsp), %r8d - movl %r11d, (%rax) - movl %edx, (%rcx) - movq 128(%rsp), %r11 - movq 136(%rsp), %rdx - movl %esi, (%rdi) - movl %r8d, (%r9) - movq 144(%rsp), %rsi - movq 152(%rsp), %r8 - movl 32(%rsp), %r10d - movl 36(%rsp), %eax - movl 40(%rsp), %ecx - movl 44(%rsp), %edi - movl %r10d, (%r11) - movl %eax, (%rdx) - movq 160(%rsp), %r10 - movq 168(%rsp), %rax - movl %ecx, (%rsi) - movl %edi, (%r8) - movq 176(%rsp), %rcx - movq 184(%rsp), %rdi - movl 48(%rsp), %r9d - movl 52(%rsp), %r11d - movl 56(%rsp), %edx - movl 60(%rsp), %esi - movl %r9d, (%r10) - movl %r11d, (%rax) - movl %edx, (%rcx) - movl %esi, (%rdi) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -#else - leal 8(%rsp), %r10d - .cfi_def_cfa 10, 0 - andl $-32, %esp - pushq -8(%r10d) - pushq %rbp - .cfi_escape 0x10,0x6,0x2,0x76,0 - movl %esp, %ebp - pushq %r12 - leal -80(%rbp), %esi - pushq %r10 - .cfi_escape 0xf,0x3,0x76,0x70,0x6 - .cfi_escape 0x10,0xc,0x2,0x76,0x78 - leal -112(%rbp), %edi - movq %rsi, %r12 - pushq %rbx - .cfi_escape 0x10,0x3,0x2,0x76,0x68 - movq %rdi, %rbx - subl $184, %esp - vmovdqa %ymm1, -144(%ebp) - vmovdqa %ymm2, -176(%ebp) - vmovaps %ymm0, -208(%ebp) - vzeroupper - call HIDDEN_JUMPTARGET(\callee) - leal 16(%r12), %esi - vmovups -192(%ebp), %xmm0 - leal 16(%rbx), %edi - call HIDDEN_JUMPTARGET(\callee) - movl -144(%ebp), %eax - vmovss -112(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -140(%ebp), %eax - vmovss -108(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -136(%ebp), %eax - vmovss -104(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -132(%ebp), %eax - vmovss -100(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -128(%ebp), %eax - vmovss -96(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -124(%ebp), %eax - vmovss -92(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -120(%ebp), %eax - vmovss -88(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -116(%ebp), %eax - vmovss -84(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -176(%ebp), %eax - vmovss -80(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -172(%ebp), %eax - vmovss -76(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -168(%ebp), %eax - vmovss -72(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -164(%ebp), %eax - vmovss -68(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -160(%ebp), %eax - vmovss -64(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -156(%ebp), %eax - vmovss -60(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -152(%ebp), %eax - vmovss -56(%ebp), %xmm0 - vmovss %xmm0, (%eax) - movl -148(%ebp), %eax - vmovss -52(%ebp), %xmm0 - vmovss %xmm0, (%eax) - addl $184, %esp - popq %rbx - popq %r10 - .cfi_def_cfa 10, 0 - popq %r12 - popq %rbp - leal -8(%r10), %esp - .cfi_def_cfa 7, 8 - ret -#endif -.endm - -ENTRY (_ZGVdN8vvv_sincosf) -WRAPPER_IMPL_AVX2_fFF_vvv _ZGVbN4vl4l4_sincosf -END (_ZGVdN8vvv_sincosf) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVdN8vvv_sincosf) -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_sincosf8_core_avx.S b/sysdeps/x86_64/fpu/svml_s_sincosf8_core_avx.S deleted file mode 100644 index 0955924cdd..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_sincosf8_core_avx.S +++ /dev/null @@ -1,198 +0,0 @@ -/* Function sincosf vectorized in AVX ISA as wrapper to SSE4 ISA version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVcN8vl4l4_sincosf) -WRAPPER_IMPL_AVX_fFF _ZGVbN4vl4l4_sincosf -END (_ZGVcN8vl4l4_sincosf) - -/* AVX ISA version as wrapper to SSE ISA version (for vector - function declared with #pragma omp declare simd notinbranch). */ -.macro WRAPPER_IMPL_AVX_fFF_vvv callee -#ifndef __ILP32__ - pushq %rbp - movq %rsp, %rbp - andq $-32, %rsp - subq $224, %rsp - vmovups %ymm0, 64(%rsp) - lea (%rsp), %rdi - vmovdqu %xmm1, 96(%rdi) - vmovdqu %xmm2, 112(%rdi) - vmovdqu %xmm3, 128(%rdi) - vmovdqu %xmm4, 144(%rdi) - vmovdqu %xmm5, 160(%rdi) - lea 32(%rsp), %rsi - vmovdqu %xmm6, 144(%rsi) - vmovdqu %xmm7, 160(%rsi) - vzeroupper - call HIDDEN_JUMPTARGET(\callee) - vmovdqu 80(%rsp), %xmm0 - lea 16(%rsp), %rdi - lea 48(%rsp), %rsi - call HIDDEN_JUMPTARGET(\callee) - movq 96(%rsp), %rdx - movq 104(%rsp), %rsi - movq 112(%rsp), %r8 - movq 120(%rsp), %r10 - movl (%rsp), %eax - movl 4(%rsp), %ecx - movl 8(%rsp), %edi - movl 12(%rsp), %r9d - movl %eax, (%rdx) - movl %ecx, (%rsi) - movq 128(%rsp), %rax - movq 136(%rsp), %rcx - movl %edi, (%r8) - movl %r9d, (%r10) - movq 144(%rsp), %rdi - movq 152(%rsp), %r9 - movl 16(%rsp), %r11d - movl 20(%rsp), %edx - movl 24(%rsp), %esi - movl 28(%rsp), %r8d - movl %r11d, (%rax) - movl %edx, (%rcx) - movq 160(%rsp), %r11 - movq 168(%rsp), %rdx - movl %esi, (%rdi) - movl %r8d, (%r9) - movq 176(%rsp), %rsi - movq 184(%rsp), %r8 - movl 32(%rsp), %r10d - movl 36(%rsp), %eax - movl 40(%rsp), %ecx - movl 44(%rsp), %edi - movl %r10d, (%r11) - movl %eax, (%rdx) - movq 192(%rsp), %r10 - movq 200(%rsp), %rax - movl %ecx, (%rsi) - movl %edi, (%r8) - movq 16(%rbp), %rcx - movq 24(%rbp), %rdi - movl 48(%rsp), %r9d - movl 52(%rsp), %r11d - movl 56(%rsp), %edx - movl 60(%rsp), %esi - movl %r9d, (%r10) - movl %r11d, (%rax) - movl %edx, (%rcx) - movl %esi, (%rdi) - movq %rbp, %rsp - popq %rbp - ret -#else - leal 8(%rsp), %r10d - .cfi_def_cfa 10, 0 - andl $-32, %esp - pushq -8(%r10d) - pushq %rbp - .cfi_escape 0x10,0x6,0x2,0x76,0 - movl %esp, %ebp - pushq %r12 - leal -80(%rbp), %esi - pushq %r10 - .cfi_escape 0xf,0x3,0x76,0x70,0x6 - .cfi_escape 0x10,0xc,0x2,0x76,0x78 - leal -112(%rbp), %edi - movq %rsi, %r12 - pushq %rbx - .cfi_escape 0x10,0x3,0x2,0x76,0x68 - movq %rdi, %rbx - subl $184, %esp - vmovaps %xmm1, -128(%ebp) - vmovaps %xmm2, -144(%ebp) - vmovaps %xmm3, -160(%ebp) - vmovaps %xmm4, -176(%ebp) - vmovaps %ymm0, -208(%ebp) - vzeroupper - call HIDDEN_JUMPTARGET(\callee) - leal 16(%r12), %esi - vmovups -192(%ebp), %xmm0 - leal 16(%rbx), %edi - call HIDDEN_JUMPTARGET(\callee) - movq -128(%ebp), %rax - vmovss -112(%ebp), %xmm0 - vmovdqa -128(%ebp), %xmm7 - vmovdqa -144(%ebp), %xmm3 - vmovss %xmm0, (%eax) - vmovss -108(%ebp), %xmm0 - vpextrd $1, %xmm7, %eax - vmovss %xmm0, (%eax) - movq -120(%ebp), %rax - vmovss -104(%ebp), %xmm0 - vmovss %xmm0, (%eax) - vmovss -100(%ebp), %xmm0 - vpextrd $3, %xmm7, %eax - vmovdqa -160(%ebp), %xmm7 - vmovss %xmm0, (%eax) - movq -144(%ebp), %rax - vmovss -96(%ebp), %xmm0 - vmovss %xmm0, (%eax) - vmovss -92(%ebp), %xmm0 - vpextrd $1, %xmm3, %eax - vmovss %xmm0, (%eax) - movq -136(%ebp), %rax - vmovss -88(%ebp), %xmm0 - vmovss %xmm0, (%eax) - vmovss -84(%ebp), %xmm0 - vpextrd $3, %xmm3, %eax - vmovss %xmm0, (%eax) - movq -160(%ebp), %rax - vmovss -80(%ebp), %xmm0 - vmovss %xmm0, (%eax) - vmovss -76(%ebp), %xmm0 - vpextrd $1, %xmm7, %eax - vmovss %xmm0, (%eax) - movq -152(%ebp), %rax - vmovss -72(%ebp), %xmm0 - vmovss %xmm0, (%eax) - vmovss -68(%ebp), %xmm0 - vpextrd $3, %xmm7, %eax - vmovss %xmm0, (%eax) - movq -176(%ebp), %rax - vmovss -64(%ebp), %xmm0 - vmovdqa -176(%ebp), %xmm3 - vmovss %xmm0, (%eax) - vmovss -60(%ebp), %xmm0 - vpextrd $1, %xmm3, %eax - vmovss %xmm0, (%eax) - movq -168(%ebp), %rax - vmovss -56(%ebp), %xmm0 - vmovss %xmm0, (%eax) - vmovss -52(%ebp), %xmm0 - vpextrd $3, %xmm3, %eax - vmovss %xmm0, (%eax) - addl $184, %esp - popq %rbx - popq %r10 - .cfi_def_cfa 10, 0 - popq %r12 - popq %rbp - leal -8(%r10), %esp - .cfi_def_cfa 7, 8 - ret -#endif -.endm - -ENTRY (_ZGVcN8vvv_sincosf) -WRAPPER_IMPL_AVX_fFF_vvv _ZGVbN4vl4l4_sincosf -END (_ZGVcN8vvv_sincosf) diff --git a/sysdeps/x86_64/fpu/svml_s_sinf16_core.S b/sysdeps/x86_64/fpu/svml_s_sinf16_core.S deleted file mode 100644 index 14473da427..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_sinf16_core.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function sinf vectorized with AVX-512. Wrapper to AVX2 version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVeN16v_sinf) -WRAPPER_IMPL_AVX512 _ZGVdN8v_sinf -END (_ZGVeN16v_sinf) diff --git a/sysdeps/x86_64/fpu/svml_s_sinf4_core.S b/sysdeps/x86_64/fpu/svml_s_sinf4_core.S deleted file mode 100644 index 910f39c7f2..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_sinf4_core.S +++ /dev/null @@ -1,30 +0,0 @@ -/* Function sinf vectorized with SSE2. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVbN4v_sinf) -WRAPPER_IMPL_SSE2 sinf -END (_ZGVbN4v_sinf) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVbN4v_sinf) -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_sinf8_core.S b/sysdeps/x86_64/fpu/svml_s_sinf8_core.S deleted file mode 100644 index 568c978a22..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_sinf8_core.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Function sinf vectorized with AVX2, wrapper version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY (_ZGVdN8v_sinf) -WRAPPER_IMPL_AVX _ZGVbN4v_sinf -END (_ZGVdN8v_sinf) - -#ifndef USE_MULTIARCH - libmvec_hidden_def (_ZGVdN8v_sinf) -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_sinf8_core_avx.S b/sysdeps/x86_64/fpu/svml_s_sinf8_core_avx.S deleted file mode 100644 index 603f59ed1b..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_sinf8_core_avx.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Function sinf vectorized in AVX ISA as wrapper to SSE4 ISA version. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "svml_s_wrapper_impl.h" - - .text -ENTRY(_ZGVcN8v_sinf) -WRAPPER_IMPL_AVX _ZGVbN4v_sinf -END(_ZGVcN8v_sinf) diff --git a/sysdeps/x86_64/fpu/svml_s_trig_data.S b/sysdeps/x86_64/fpu/svml_s_trig_data.S deleted file mode 100644 index 19a569118f..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_trig_data.S +++ /dev/null @@ -1,111 +0,0 @@ -/* Data for function cosf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "svml_s_trig_data.h" - - .section .rodata, "a" - .align 64 - -/* Data table for vector implementations of function cosf. - The table may contain polynomial, reduction, lookup coefficients - and other macro_names obtained through different methods - of research and experimental work. */ - - .globl __svml_s_trig_data -__svml_s_trig_data: - -/* General purpose constants: - absolute value mask */ -float_vector __sAbsMask 0x7fffffff - -/* threshold for out-of-range values */ -float_vector __sRangeReductionVal 0x461c4000 - -/* +INF */ -float_vector __sRangeVal 0x7f800000 - -/* High Accuracy version polynomial coefficients: - S1 = -1.66666666664728165763e-01 */ -float_vector __sS1 0xbe2aaaab - -/* S2 = 8.33329173045453069014e-03 */ -float_vector __sS2 0x3c08885c - -/* C1 = -5.00000000000000000000e-01 */ -float_vector __sC1 0xbf000000 - -/* C2 = 4.16638942914469202550e-02 */ -float_vector __sC2 0x3d2aaa7c - -/* Range reduction PI-based constants: - PI high part */ -float_vector __sPI1 0x40490000 - -/* PI mid part 1 */ -float_vector __sPI2 0x3a7da000 - -/* PI mid part 2 */ -float_vector __sPI3 0x34222000 - -/* PI low part */ -float_vector __sPI4 0x2cb4611a - -/* PI1, PI2, and PI3 when FMA is available - PI high part (when FMA available) */ -float_vector __sPI1_FMA 0x40490fdb - -/* PI mid part (when FMA available) */ -float_vector __sPI2_FMA 0xb3bbbd2e - -/* PI low part (when FMA available) */ -float_vector __sPI3_FMA 0xa7772ced - -/* Polynomial constants for work w/o FMA, relative error ~ 2^(-26.625) */ -float_vector __sA3 0xbe2aaaa6 -float_vector __sA5 0x3c08876a -float_vector __sA7 0xb94fb7ff -float_vector __sA9 0x362edef8 - -/* Polynomial constants, work with FMA, relative error ~ 2^(-26.417) */ -float_vector __sA5_FMA 0x3c088768 -float_vector __sA7_FMA 0xb94fb6cf -float_vector __sA9_FMA 0x362ec335 - -/* 1/PI */ -float_vector __sInvPI 0x3ea2f983 - -/* right-shifter constant */ -float_vector __sRShifter 0x4b400000 - -/* PI/2 */ -float_vector __sHalfPI 0x3fc90fdb - -/* 1/2 */ -float_vector __sOneHalf 0x3f000000 - -/* high accuracy table index mask */ -float_vector __iIndexMask 0x000000ff - -/* 2^(k-1) */ -float_vector __i2pK_1 0x00000040 - -/* sign field mask */ -float_vector __sSignMask 0x80000000 - - .type __svml_s_trig_data,@object - .size __svml_s_trig_data,.-__svml_s_trig_data diff --git a/sysdeps/x86_64/fpu/svml_s_trig_data.h b/sysdeps/x86_64/fpu/svml_s_trig_data.h deleted file mode 100644 index 04f4f7b1ed..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_trig_data.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Offsets for data table for vectorized sinf, cosf, sincosf. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef S_TRIG_DATA_H -#define S_TRIG_DATA_H - -.macro float_vector offset value -.if .-__svml_s_trig_data != \offset -.err -.endif -.rept 16 -.long \value -.endr -.endm - -#define __sAbsMask 0 -#define __sRangeReductionVal 64 -#define __sRangeVal 64*2 -#define __sS1 64*3 -#define __sS2 64*4 -#define __sC1 64*5 -#define __sC2 64*6 -#define __sPI1 64*7 -#define __sPI2 64*8 -#define __sPI3 64*9 -#define __sPI4 64*10 -#define __sPI1_FMA 64*11 -#define __sPI2_FMA 64*12 -#define __sPI3_FMA 64*13 -#define __sA3 64*14 -#define __sA5 64*15 -#define __sA7 64*16 -#define __sA9 64*17 -#define __sA5_FMA 64*18 -#define __sA7_FMA 64*19 -#define __sA9_FMA 64*20 -#define __sInvPI 64*21 -#define __sRShifter 64*22 -#define __sHalfPI 64*23 -#define __sOneHalf 64*24 -#define __iIndexMask 64*25 -#define __i2pK_1 64*26 -#define __sSignMask 64*27 -#define __dT_cosf 64*28 -#define __dT 64*92 - -#endif diff --git a/sysdeps/x86_64/fpu/svml_s_wrapper_impl.h b/sysdeps/x86_64/fpu/svml_s_wrapper_impl.h deleted file mode 100644 index cd6d58361c..0000000000 --- a/sysdeps/x86_64/fpu/svml_s_wrapper_impl.h +++ /dev/null @@ -1,371 +0,0 @@ -/* Wrapper implementations of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* SSE2 ISA version as wrapper to scalar. */ -.macro WRAPPER_IMPL_SSE2 callee - subq $40, %rsp - cfi_adjust_cfa_offset(40) - movaps %xmm0, (%rsp) - call JUMPTARGET(\callee) - movss %xmm0, 16(%rsp) - movss 4(%rsp), %xmm0 - call JUMPTARGET(\callee) - movss %xmm0, 20(%rsp) - movss 8(%rsp), %xmm0 - call JUMPTARGET(\callee) - movss %xmm0, 24(%rsp) - movss 12(%rsp), %xmm0 - call JUMPTARGET(\callee) - movss 16(%rsp), %xmm3 - movss 20(%rsp), %xmm2 - movss 24(%rsp), %xmm1 - movss %xmm0, 28(%rsp) - unpcklps %xmm1, %xmm3 - unpcklps %xmm0, %xmm2 - unpcklps %xmm2, %xmm3 - movaps %xmm3, %xmm0 - addq $40, %rsp - cfi_adjust_cfa_offset(-40) - ret -.endm - -/* 2 argument SSE2 ISA version as wrapper to scalar. */ -.macro WRAPPER_IMPL_SSE2_ff callee - subq $56, %rsp - cfi_adjust_cfa_offset(56) - movaps %xmm0, (%rsp) - movaps %xmm1, 16(%rsp) - call JUMPTARGET(\callee) - movss %xmm0, 32(%rsp) - movss 4(%rsp), %xmm0 - movss 20(%rsp), %xmm1 - call JUMPTARGET(\callee) - movss %xmm0, 36(%rsp) - movss 8(%rsp), %xmm0 - movss 24(%rsp), %xmm1 - call JUMPTARGET(\callee) - movss %xmm0, 40(%rsp) - movss 12(%rsp), %xmm0 - movss 28(%rsp), %xmm1 - call JUMPTARGET(\callee) - movss 32(%rsp), %xmm3 - movss 36(%rsp), %xmm2 - movss 40(%rsp), %xmm1 - movss %xmm0, 44(%rsp) - unpcklps %xmm1, %xmm3 - unpcklps %xmm0, %xmm2 - unpcklps %xmm2, %xmm3 - movaps %xmm3, %xmm0 - addq $56, %rsp - cfi_adjust_cfa_offset(-56) - ret -.endm - -/* 3 argument SSE2 ISA version as wrapper to scalar. */ -.macro WRAPPER_IMPL_SSE2_fFF callee - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - pushq %rbx - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbx, 0) - movq %rdi, %rbp - movq %rsi, %rbx - subq $40, %rsp - cfi_adjust_cfa_offset(40) - leaq 24(%rsp), %rsi - leaq 28(%rsp), %rdi - movaps %xmm0, (%rsp) - call JUMPTARGET(\callee) - leaq 24(%rsp), %rsi - leaq 28(%rsp), %rdi - movss 28(%rsp), %xmm0 - movss %xmm0, 0(%rbp) - movaps (%rsp), %xmm1 - movss 24(%rsp), %xmm0 - movss %xmm0, (%rbx) - movaps %xmm1, %xmm0 - shufps $85, %xmm1, %xmm0 - call JUMPTARGET(\callee) - movss 28(%rsp), %xmm0 - leaq 24(%rsp), %rsi - movss %xmm0, 4(%rbp) - leaq 28(%rsp), %rdi - movaps (%rsp), %xmm1 - movss 24(%rsp), %xmm0 - movss %xmm0, 4(%rbx) - movaps %xmm1, %xmm0 - unpckhps %xmm1, %xmm0 - call JUMPTARGET(\callee) - movaps (%rsp), %xmm1 - leaq 24(%rsp), %rsi - leaq 28(%rsp), %rdi - movss 28(%rsp), %xmm0 - shufps $255, %xmm1, %xmm1 - movss %xmm0, 8(%rbp) - movss 24(%rsp), %xmm0 - movss %xmm0, 8(%rbx) - movaps %xmm1, %xmm0 - call JUMPTARGET(\callee) - movss 28(%rsp), %xmm0 - movss %xmm0, 12(%rbp) - movss 24(%rsp), %xmm0 - movss %xmm0, 12(%rbx) - addq $40, %rsp - cfi_adjust_cfa_offset(-40) - popq %rbx - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbx) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -.endm - -/* AVX/AVX2 ISA version as wrapper to SSE ISA version. */ -.macro WRAPPER_IMPL_AVX callee - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-32, %rsp - subq $32, %rsp - vextractf128 $1, %ymm0, (%rsp) - vzeroupper - call HIDDEN_JUMPTARGET(\callee) - vmovaps %xmm0, 16(%rsp) - vmovaps (%rsp), %xmm0 - call HIDDEN_JUMPTARGET(\callee) - vmovaps %xmm0, %xmm1 - vmovaps 16(%rsp), %xmm0 - vinsertf128 $1, %xmm1, %ymm0, %ymm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -.endm - -/* 2 argument AVX/AVX2 ISA version as wrapper to SSE ISA version. */ -.macro WRAPPER_IMPL_AVX_ff callee - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-32, %rsp - subq $64, %rsp - vextractf128 $1, %ymm0, 16(%rsp) - vextractf128 $1, %ymm1, (%rsp) - vzeroupper - call HIDDEN_JUMPTARGET(\callee) - vmovaps %xmm0, 32(%rsp) - vmovaps 16(%rsp), %xmm0 - vmovaps (%rsp), %xmm1 - call HIDDEN_JUMPTARGET(\callee) - vmovaps %xmm0, %xmm1 - vmovaps 32(%rsp), %xmm0 - vinsertf128 $1, %xmm1, %ymm0, %ymm0 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -.endm - -/* 3 argument AVX/AVX2 ISA version as wrapper to SSE ISA version. */ -.macro WRAPPER_IMPL_AVX_fFF callee - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-32, %rsp - pushq %r13 - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%r13, 0) - pushq %r14 - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%r14, 0) - subq $48, %rsp - movq %rsi, %r14 - vmovaps %ymm0, (%rsp) - movq %rdi, %r13 - vmovaps 16(%rsp), %xmm1 - vmovaps %xmm1, 32(%rsp) - vzeroupper - vmovaps (%rsp), %xmm0 - call HIDDEN_JUMPTARGET(\callee) - vmovaps 32(%rsp), %xmm0 - lea (%rsp), %rdi - lea 16(%rsp), %rsi - call HIDDEN_JUMPTARGET(\callee) - vmovaps (%rsp), %xmm0 - vmovaps 16(%rsp), %xmm1 - vmovaps %xmm0, 16(%r13) - vmovaps %xmm1, 16(%r14) - addq $48, %rsp - popq %r14 - cfi_adjust_cfa_offset (-8) - cfi_restore (%r14) - popq %r13 - cfi_adjust_cfa_offset (-8) - cfi_restore (%r13) - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -.endm - -/* AVX512 ISA version as wrapper to AVX2 ISA version. */ -.macro WRAPPER_IMPL_AVX512 callee - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $128, %rsp -/* Below is encoding for vmovups %zmm0, (%rsp). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x04 - .byte 0x24 - vmovupd (%rsp), %ymm0 - call HIDDEN_JUMPTARGET(\callee) - vmovupd %ymm0, 64(%rsp) - vmovupd 32(%rsp), %ymm0 - call HIDDEN_JUMPTARGET(\callee) - vmovupd %ymm0, 96(%rsp) -/* Below is encoding for vmovups 64(%rsp), %zmm0. */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x10 - .byte 0x44 - .byte 0x24 - .byte 0x01 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -.endm - -/* 2 argument AVX512 ISA version as wrapper to AVX2 ISA version. */ -.macro WRAPPER_IMPL_AVX512_ff callee - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - subq $192, %rsp -/* Below is encoding for vmovups %zmm0, (%rsp). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x04 - .byte 0x24 -/* Below is encoding for vmovups %zmm1, 64(%rsp). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x11 - .byte 0x4c - .byte 0x24 - .byte 0x01 - vmovups (%rsp), %ymm0 - vmovups 64(%rsp), %ymm1 - call HIDDEN_JUMPTARGET(\callee) - vmovups %ymm0, 128(%rsp) - vmovups 32(%rsp), %ymm0 - vmovups 96(%rsp), %ymm1 - call HIDDEN_JUMPTARGET(\callee) - vmovups %ymm0, 160(%rsp) -/* Below is encoding for vmovups 128(%rsp), %zmm0. */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x10 - .byte 0x44 - .byte 0x24 - .byte 0x02 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -.endm - -/* 3 argument AVX512 ISA version as wrapper to AVX2 ISA version. */ -.macro WRAPPER_IMPL_AVX512_fFF callee - pushq %rbp - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbp, 0) - movq %rsp, %rbp - cfi_def_cfa_register (%rbp) - andq $-64, %rsp - pushq %r12 - pushq %r13 - subq $176, %rsp - movq %rsi, %r13 -/* Below is encoding for vmovaps %zmm0, (%rsp). */ - .byte 0x62 - .byte 0xf1 - .byte 0x7c - .byte 0x48 - .byte 0x29 - .byte 0x04 - .byte 0x24 - movq %rdi, %r12 - vmovaps (%rsp), %ymm0 - call HIDDEN_JUMPTARGET(\callee) - vmovaps 32(%rsp), %ymm0 - lea 64(%rsp), %rdi - lea 96(%rsp), %rsi - call HIDDEN_JUMPTARGET(\callee) - vmovaps 64(%rsp), %ymm0 - vmovaps 96(%rsp), %ymm1 - vmovaps %ymm0, 32(%r12) - vmovaps %ymm1, 32(%r13) - addq $176, %rsp - popq %r13 - popq %r12 - movq %rbp, %rsp - cfi_def_cfa_register (%rsp) - popq %rbp - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbp) - ret -.endm diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx-main.c deleted file mode 100644 index 43914ef0e7..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx-main.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-alias.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx-mod.c b/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx-mod.c deleted file mode 100644 index 514883dcf9..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx-mod.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-alias-mod.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx.c b/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx.c deleted file mode 100644 index 43914ef0e7..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-alias.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx2-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx2-main.c deleted file mode 100644 index 43914ef0e7..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx2-main.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-alias.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx2-mod.c b/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx2-mod.c deleted file mode 100644 index 514883dcf9..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx2-mod.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-alias-mod.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx2.c b/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx2.c deleted file mode 100644 index 43914ef0e7..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx2.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-alias.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx512-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx512-main.c deleted file mode 100644 index 43914ef0e7..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx512-main.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-alias.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx512-mod.c b/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx512-mod.c deleted file mode 100644 index 514883dcf9..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx512-mod.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-alias-mod.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx512.c b/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx512.c deleted file mode 100644 index 43914ef0e7..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-alias-avx512.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-alias.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-alias-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-alias-main.c deleted file mode 100644 index 43914ef0e7..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-alias-main.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-alias.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-alias-mod.c b/sysdeps/x86_64/fpu/test-double-libmvec-alias-mod.c deleted file mode 100644 index d549c3ec19..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-alias-mod.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Part of test to build shared library to ensure link against - *_finite aliases from libmvec. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include "test-double.h" -#include "test-libmvec-alias-mod.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-alias.c b/sysdeps/x86_64/fpu/test-double-libmvec-alias.c deleted file mode 100644 index c7048d346f..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-alias.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Part of test to ensure link against *_finite aliases from libmvec. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -extern int -test_finite_alias (void); - -static int -do_test (void) -{ - return test_finite_alias (); -} - -#define TEST_FUNCTION do_test () -#include "../../../test-skeleton.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx-main.c deleted file mode 100644 index fc2ffea314..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx-main.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-sincos-main.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx.c deleted file mode 100644 index 896f1bcbaf..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-sincos.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2-main.c deleted file mode 100644 index fc2ffea314..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2-main.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-sincos-main.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2.c deleted file mode 100644 index 896f1bcbaf..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx2.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-sincos.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512-main.c deleted file mode 100644 index fc2ffea314..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512-main.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-sincos-main.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512.c deleted file mode 100644 index 896f1bcbaf..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-avx512.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-double-libmvec-sincos.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-main.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos-main.c deleted file mode 100644 index c33436dc0f..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos-main.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Test for vector sincos ABI. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define N 1000 -double x[N], s[N], c[N]; -double* s_ptrs[N]; -double* c_ptrs[N]; - -int -test_sincos_abi (void) -{ - int i; - - for(i = 0; i < N; i++) - { - x[i] = i / 3; - s_ptrs[i] = &s[i]; - c_ptrs[i] = &c[i]; - } - -#pragma omp simd - for(i = 0; i < N; i++) - sincos (x[i], s_ptrs[i], c_ptrs[i]); - - return 0; -} diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-sincos.c b/sysdeps/x86_64/fpu/test-double-libmvec-sincos.c deleted file mode 100644 index 9be71edd93..0000000000 --- a/sysdeps/x86_64/fpu/test-double-libmvec-sincos.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Test for vector sincos ABI. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -extern int test_sincos_abi (void); - -int arch_check = 1; - -static void -check_arch (void) -{ - CHECK_ARCH_EXT; - arch_check = 0; -} - -static int -do_test (void) -{ - check_arch (); - - if (arch_check) - return 77; - - return test_sincos_abi (); -} - -#define TEST_FUNCTION do_test () -#include "../../../test-skeleton.c" diff --git a/sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c b/sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c deleted file mode 100644 index b4457f700a..0000000000 --- a/sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Wrapper part of tests for SSE ISA versions of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "test-double-vlen2.h" -#include "test-math-vector-sincos.h" -#include - -#define VEC_TYPE __m128d - -VECTOR_WRAPPER (WRAPPER_NAME (cos), _ZGVbN2v_cos) -VECTOR_WRAPPER (WRAPPER_NAME (sin), _ZGVbN2v_sin) -VECTOR_WRAPPER (WRAPPER_NAME (log), _ZGVbN2v_log) -VECTOR_WRAPPER (WRAPPER_NAME (exp), _ZGVbN2v_exp) -VECTOR_WRAPPER_ff (WRAPPER_NAME (pow), _ZGVbN2vv_pow) - -#define VEC_INT_TYPE __m128i - -VECTOR_WRAPPER_fFF_2 (WRAPPER_NAME (sincos), _ZGVbN2vvv_sincos) diff --git a/sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c b/sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c deleted file mode 100644 index e6b991ceaf..0000000000 --- a/sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Wrapper part of tests for AVX2 ISA versions of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "test-double-vlen4.h" -#include "test-math-vector-sincos.h" -#include - -#undef VEC_SUFF -#define VEC_SUFF _vlen4_avx2 - -#define VEC_TYPE __m256d - -VECTOR_WRAPPER (WRAPPER_NAME (cos), _ZGVdN4v_cos) -VECTOR_WRAPPER (WRAPPER_NAME (sin), _ZGVdN4v_sin) -VECTOR_WRAPPER (WRAPPER_NAME (log), _ZGVdN4v_log) -VECTOR_WRAPPER (WRAPPER_NAME (exp), _ZGVdN4v_exp) -VECTOR_WRAPPER_ff (WRAPPER_NAME (pow), _ZGVdN4vv_pow) - -#ifndef __ILP32__ -# define VEC_INT_TYPE __m256i -#else -# define VEC_INT_TYPE __m128i -#endif - -VECTOR_WRAPPER_fFF_2 (WRAPPER_NAME (sincos), _ZGVdN4vvv_sincos) diff --git a/sysdeps/x86_64/fpu/test-double-vlen4-avx2.h b/sysdeps/x86_64/fpu/test-double-vlen4-avx2.h deleted file mode 100644 index a15d4be31f..0000000000 --- a/sysdeps/x86_64/fpu/test-double-vlen4-avx2.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Tests for AVX2 ISA versions of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef VEC_SUFF -#define VEC_SUFF _vlen4_avx2 - -#undef REQUIRE_AVX -#define REQUIRE_AVX2 diff --git a/sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c b/sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c deleted file mode 100644 index 3606b6f55f..0000000000 --- a/sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Wrapper part of tests for AVX ISA versions of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "test-double-vlen4.h" -#include "test-math-vector-sincos.h" -#include - -#define VEC_TYPE __m256d - -VECTOR_WRAPPER (WRAPPER_NAME (cos), _ZGVcN4v_cos) -VECTOR_WRAPPER (WRAPPER_NAME (sin), _ZGVcN4v_sin) -VECTOR_WRAPPER (WRAPPER_NAME (log), _ZGVcN4v_log) -VECTOR_WRAPPER (WRAPPER_NAME (exp), _ZGVcN4v_exp) -VECTOR_WRAPPER_ff (WRAPPER_NAME (pow), _ZGVcN4vv_pow) - -#define VEC_INT_TYPE __m128i - -#ifndef __ILP32__ -VECTOR_WRAPPER_fFF_3 (WRAPPER_NAME (sincos), _ZGVcN4vvv_sincos) -#else -VECTOR_WRAPPER_fFF_2 (WRAPPER_NAME (sincos), _ZGVcN4vvv_sincos) -#endif diff --git a/sysdeps/x86_64/fpu/test-double-vlen4.h b/sysdeps/x86_64/fpu/test-double-vlen4.h deleted file mode 100644 index 1698e621d6..0000000000 --- a/sysdeps/x86_64/fpu/test-double-vlen4.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Tests for AVX ISA versions of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include_next - -#define REQUIRE_AVX diff --git a/sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c b/sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c deleted file mode 100644 index d77b43046d..0000000000 --- a/sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Wrapper part of tests for AVX-512 versions of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "test-double-vlen8.h" -#include "test-math-vector-sincos.h" -#include - -#define VEC_TYPE __m512d - -VECTOR_WRAPPER (WRAPPER_NAME (cos), _ZGVeN8v_cos) -VECTOR_WRAPPER (WRAPPER_NAME (sin), _ZGVeN8v_sin) -VECTOR_WRAPPER (WRAPPER_NAME (log), _ZGVeN8v_log) -VECTOR_WRAPPER (WRAPPER_NAME (exp), _ZGVeN8v_exp) -VECTOR_WRAPPER_ff (WRAPPER_NAME (pow), _ZGVeN8vv_pow) - -#ifndef __ILP32__ -# define VEC_INT_TYPE __m512i -#else -# define VEC_INT_TYPE __m256i -#endif - -VECTOR_WRAPPER_fFF_2 (WRAPPER_NAME (sincos), _ZGVeN8vvv_sincos) diff --git a/sysdeps/x86_64/fpu/test-double-vlen8.h b/sysdeps/x86_64/fpu/test-double-vlen8.h deleted file mode 100644 index 5802abc121..0000000000 --- a/sysdeps/x86_64/fpu/test-double-vlen8.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Tests for AVX-512 versions of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include_next - -#define REQUIRE_AVX512F diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx-main.c deleted file mode 100644 index f3691cc8e6..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx-main.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-alias.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx-mod.c b/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx-mod.c deleted file mode 100644 index 7fc3d8aedd..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx-mod.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-alias-mod.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx.c b/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx.c deleted file mode 100644 index f3691cc8e6..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-alias.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx2-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx2-main.c deleted file mode 100644 index f3691cc8e6..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx2-main.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-alias.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx2-mod.c b/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx2-mod.c deleted file mode 100644 index 7fc3d8aedd..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx2-mod.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-alias-mod.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx2.c b/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx2.c deleted file mode 100644 index f3691cc8e6..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx2.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-alias.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx512-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx512-main.c deleted file mode 100644 index f3691cc8e6..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx512-main.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-alias.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx512-mod.c b/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx512-mod.c deleted file mode 100644 index 7fc3d8aedd..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx512-mod.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-alias-mod.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx512.c b/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx512.c deleted file mode 100644 index f3691cc8e6..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-alias-avx512.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-alias.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-alias-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-alias-main.c deleted file mode 100644 index f3691cc8e6..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-alias-main.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-alias.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-alias-mod.c b/sysdeps/x86_64/fpu/test-float-libmvec-alias-mod.c deleted file mode 100644 index 109307f997..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-alias-mod.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Part of test to build shared library to ensure link against - *_finite aliases from libmvec. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#include "test-float.h" -#include "test-libmvec-alias-mod.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-alias.c b/sysdeps/x86_64/fpu/test-float-libmvec-alias.c deleted file mode 100644 index c7048d346f..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-alias.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Part of test to ensure link against *_finite aliases from libmvec. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -extern int -test_finite_alias (void); - -static int -do_test (void) -{ - return test_finite_alias (); -} - -#define TEST_FUNCTION do_test () -#include "../../../test-skeleton.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx-main.c deleted file mode 100644 index 558e2ac649..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx-main.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-sincosf-main.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx.c deleted file mode 100644 index 5b45f0a055..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-sincosf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2-main.c deleted file mode 100644 index 558e2ac649..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2-main.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-sincosf-main.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2.c deleted file mode 100644 index 5b45f0a055..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx2.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-sincosf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512-main.c deleted file mode 100644 index 558e2ac649..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512-main.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-sincosf-main.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512.c deleted file mode 100644 index 5b45f0a055..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-avx512.c +++ /dev/null @@ -1 +0,0 @@ -#include "test-float-libmvec-sincosf.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-main.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-main.c deleted file mode 100644 index 5dd1efa8f9..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf-main.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Test for vector sincosf ABI. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define N 1000 -float x[N], s[N], c[N]; -float *s_ptrs[N]; -float *c_ptrs[N]; - -int -test_sincosf_abi (void) -{ - int i; - for(i = 0; i < N; i++) - { - x[i] = i / 3; - s_ptrs[i] = &s[i]; - c_ptrs[i] = &c[i]; - } - -#pragma omp simd - for(i = 0; i < N; i++) - sincosf (x[i], s_ptrs[i], c_ptrs[i]); - - return 0; -} diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c b/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c deleted file mode 100644 index 79543f5cb0..0000000000 --- a/sysdeps/x86_64/fpu/test-float-libmvec-sincosf.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Test for vector sincosf ABI. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -extern int test_sincosf_abi (void); - -int arch_check = 1; - -static void -check_arch (void) -{ - CHECK_ARCH_EXT; - arch_check = 0; -} - -static int -do_test (void) -{ - check_arch (); - - if (arch_check) - return 77; - - return test_sincosf_abi (); -} - -#define TEST_FUNCTION do_test () -#include "../../../test-skeleton.c" diff --git a/sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c b/sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c deleted file mode 100644 index 2e729e2770..0000000000 --- a/sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Wrapper part of tests for AVX-512 ISA versions of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "test-float-vlen16.h" -#include "test-math-vector-sincos.h" -#include - -#define VEC_TYPE __m512 - -VECTOR_WRAPPER (WRAPPER_NAME (cosf), _ZGVeN16v_cosf) -VECTOR_WRAPPER (WRAPPER_NAME (sinf), _ZGVeN16v_sinf) -VECTOR_WRAPPER (WRAPPER_NAME (logf), _ZGVeN16v_logf) -VECTOR_WRAPPER (WRAPPER_NAME (expf), _ZGVeN16v_expf) -VECTOR_WRAPPER_ff (WRAPPER_NAME (powf), _ZGVeN16vv_powf) - -#define VEC_INT_TYPE __m512i - -#ifndef __ILP32__ -VECTOR_WRAPPER_fFF_3 (WRAPPER_NAME (sincosf), _ZGVeN16vvv_sincosf) -#else -VECTOR_WRAPPER_fFF_2 (WRAPPER_NAME (sincosf), _ZGVeN16vvv_sincosf) -#endif diff --git a/sysdeps/x86_64/fpu/test-float-vlen16.h b/sysdeps/x86_64/fpu/test-float-vlen16.h deleted file mode 100644 index b2bfbf5371..0000000000 --- a/sysdeps/x86_64/fpu/test-float-vlen16.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Tests for AVX-512 ISA versions of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include_next - -#define REQUIRE_AVX512F diff --git a/sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c b/sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c deleted file mode 100644 index a332a65236..0000000000 --- a/sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Wrapper part of tests for SSE ISA versions of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "test-float-vlen4.h" -#include "test-math-vector-sincos.h" -#include - -#define VEC_TYPE __m128 - -VECTOR_WRAPPER (WRAPPER_NAME (cosf), _ZGVbN4v_cosf) -VECTOR_WRAPPER (WRAPPER_NAME (sinf), _ZGVbN4v_sinf) -VECTOR_WRAPPER (WRAPPER_NAME (logf), _ZGVbN4v_logf) -VECTOR_WRAPPER (WRAPPER_NAME (expf), _ZGVbN4v_expf) -VECTOR_WRAPPER_ff (WRAPPER_NAME (powf), _ZGVbN4vv_powf) - -#define VEC_INT_TYPE __m128i - -#ifndef __ILP32__ -VECTOR_WRAPPER_fFF_3 (WRAPPER_NAME (sincosf), _ZGVbN4vvv_sincosf) -#else -VECTOR_WRAPPER_fFF_2 (WRAPPER_NAME (sincosf), _ZGVbN4vvv_sincosf) -#endif diff --git a/sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c b/sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c deleted file mode 100644 index 511f9342a6..0000000000 --- a/sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Wrapper part of tests for AVX2 ISA versions of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "test-float-vlen8.h" -#include "test-math-vector-sincos.h" -#include - -#undef VEC_SUFF -#define VEC_SUFF _vlen8_avx2 - -#define VEC_TYPE __m256 - -VECTOR_WRAPPER (WRAPPER_NAME (cosf), _ZGVdN8v_cosf) -VECTOR_WRAPPER (WRAPPER_NAME (sinf), _ZGVdN8v_sinf) -VECTOR_WRAPPER (WRAPPER_NAME (logf), _ZGVdN8v_logf) -VECTOR_WRAPPER (WRAPPER_NAME (expf), _ZGVdN8v_expf) -VECTOR_WRAPPER_ff (WRAPPER_NAME (powf), _ZGVdN8vv_powf) - -/* Redefinition of wrapper to be compatible with _ZGVdN8vvv_sincosf. */ -#undef VECTOR_WRAPPER_fFF - -#define VEC_INT_TYPE __m256i - -#ifndef __ILP32__ -VECTOR_WRAPPER_fFF_3 (WRAPPER_NAME (sincosf), _ZGVdN8vvv_sincosf) -#else -VECTOR_WRAPPER_fFF_2 (WRAPPER_NAME (sincosf), _ZGVdN8vvv_sincosf) -#endif diff --git a/sysdeps/x86_64/fpu/test-float-vlen8-avx2.h b/sysdeps/x86_64/fpu/test-float-vlen8-avx2.h deleted file mode 100644 index 4967f9d19b..0000000000 --- a/sysdeps/x86_64/fpu/test-float-vlen8-avx2.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Tests for AVX2 ISA versions of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef VEC_SUFF -#define VEC_SUFF _vlen8_avx2 - -#undef REQUIRE_AVX -#define REQUIRE_AVX2 diff --git a/sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c b/sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c deleted file mode 100644 index 5a3581b0c8..0000000000 --- a/sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Wrapper part of tests for AVX ISA versions of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "test-float-vlen8.h" -#include "test-math-vector-sincos.h" -#include - -#define VEC_TYPE __m256 - -VECTOR_WRAPPER (WRAPPER_NAME (cosf), _ZGVcN8v_cosf) -VECTOR_WRAPPER (WRAPPER_NAME (sinf), _ZGVcN8v_sinf) -VECTOR_WRAPPER (WRAPPER_NAME (logf), _ZGVcN8v_logf) -VECTOR_WRAPPER (WRAPPER_NAME (expf), _ZGVcN8v_expf) -VECTOR_WRAPPER_ff (WRAPPER_NAME (powf), _ZGVcN8vv_powf) - -#define VEC_INT_TYPE __m128i - -#ifndef __ILP32__ -VECTOR_WRAPPER_fFF_4 (WRAPPER_NAME (sincosf), _ZGVcN8vvv_sincosf) -#else -VECTOR_WRAPPER_fFF_3 (WRAPPER_NAME (sincosf), _ZGVcN8vvv_sincosf) -#endif diff --git a/sysdeps/x86_64/fpu/test-float-vlen8.h b/sysdeps/x86_64/fpu/test-float-vlen8.h deleted file mode 100644 index 23ef71c6c5..0000000000 --- a/sysdeps/x86_64/fpu/test-float-vlen8.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Tests for AVX ISA versions of vector math functions. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include_next - -#define REQUIRE_AVX diff --git a/sysdeps/x86_64/fpu/test-libmvec-alias-mod.c b/sysdeps/x86_64/fpu/test-libmvec-alias-mod.c deleted file mode 100644 index 9746b0ae1c..0000000000 --- a/sysdeps/x86_64/fpu/test-libmvec-alias-mod.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Part of test to build shared library to ensure link against - *_finite aliases from libmvec. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define N 4000 -FLOAT log_arg[N]; -FLOAT exp_arg[N]; -FLOAT log_res[N]; -FLOAT exp_res[N]; -FLOAT pow_res[N]; -int arch_check = 1; - -static void -init_arg (void) -{ - int i; - - CHECK_ARCH_EXT; - - arch_check = 0; - - for (i = 0; i < N; i += 1) - { - log_arg[i] = 1.0; - exp_arg[i] = 0.0; - } -} - -int -test_finite_alias (void) -{ - int i; - - init_arg (); - - if (arch_check) return 77; - -#pragma omp simd - for (i = 0; i < N; i += 1) - { - log_res[i] = FUNC (log) (log_arg[i]); - exp_res[i] = FUNC (exp) (exp_arg[i]); - pow_res[i] = FUNC (pow) (log_arg[i], log_arg[i]); - } - - if (log_res[0] != 0.0) return 1; - if (exp_res[0] != 1.0) return 1; - if (pow_res[0] != 1.0) return 1; - - return 0; -} diff --git a/sysdeps/x86_64/fpu/x86_64-math-asm.h b/sysdeps/x86_64/fpu/x86_64-math-asm.h deleted file mode 100644 index 4b4e40c3e7..0000000000 --- a/sysdeps/x86_64/fpu/x86_64-math-asm.h +++ /dev/null @@ -1,74 +0,0 @@ -/* Helper macros for x86_64 libm functions. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _X86_64_MATH_ASM_H -#define _X86_64_MATH_ASM_H 1 - -/* Define constants for the minimum value of a floating-point - type. */ -#define DEFINE_LDBL_MIN \ - .section .rodata.cst16,"aM",@progbits,16; \ - .p2align 4; \ - .type ldbl_min,@object; \ -ldbl_min: \ - .byte 0, 0, 0, 0, 0, 0, 0, 0x80, 0x1, 0; \ - .byte 0, 0, 0, 0, 0, 0; \ - .size ldbl_min, .-ldbl_min; - -/* Force an underflow exception if the given value (nonnegative or - NaN) is subnormal. The relevant constant for the minimum of the - type must have been defined, the MO macro must have been defined - for access to memory operands, and, if PIC, the PIC register must - have been loaded. */ -#define LDBL_CHECK_FORCE_UFLOW_NONNEG_NAN \ - fldt MO(ldbl_min); \ - fld %st(1); \ - fucomip %st(1), %st(0); \ - fstp %st(0); \ - jnc 6464f; \ - fld %st(0); \ - fmul %st(0); \ - fstp %st(0); \ -6464: - -/* Likewise, but the argument is not a NaN. */ -#define LDBL_CHECK_FORCE_UFLOW_NONNAN \ - fldt MO(ldbl_min); \ - fld %st(1); \ - fabs; \ - fcomip %st(1), %st(0); \ - fstp %st(0); \ - jnc 6464f; \ - fld %st(0); \ - fmul %st(0); \ - fstp %st(0); \ -6464: - -/* Likewise, but the argument is nonnegative and not a NaN. */ -#define LDBL_CHECK_FORCE_UFLOW_NONNEG \ - fldt MO(ldbl_min); \ - fld %st(1); \ - fcomip %st(1), %st(0); \ - fstp %st(0); \ - jnc 6464f; \ - fld %st(0); \ - fmul %st(0); \ - fstp %st(0); \ -6464: - -#endif /* x86_64-math-asm.h. */ diff --git a/sysdeps/x86_64/hp-timing.h b/sysdeps/x86_64/hp-timing.h deleted file mode 100644 index 1b2d2cde33..0000000000 --- a/sysdeps/x86_64/hp-timing.h +++ /dev/null @@ -1,40 +0,0 @@ -/* High precision, low overhead timing functions. x86-64 version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _HP_TIMING_H -#define _HP_TIMING_H 1 - -/* We always assume having the timestamp register. */ -#define HP_TIMING_AVAIL (1) -#define HP_SMALL_TIMING_AVAIL (1) - -/* We indeed have inlined functions. */ -#define HP_TIMING_INLINE (1) - -/* We use 64bit values for the times. */ -typedef unsigned long long int hp_timing_t; - -/* The "=A" constraint used in 32-bit mode does not work in 64-bit mode. */ -#define HP_TIMING_NOW(Var) \ - ({ unsigned int _hi, _lo; \ - asm volatile ("rdtsc" : "=a" (_lo), "=d" (_hi)); \ - (Var) = ((unsigned long long int) _hi << 32) | _lo; }) - -#include - -#endif /* hp-timing.h */ diff --git a/sysdeps/x86_64/htonl.S b/sysdeps/x86_64/htonl.S deleted file mode 100644 index dcc6bca592..0000000000 --- a/sysdeps/x86_64/htonl.S +++ /dev/null @@ -1,34 +0,0 @@ -/* Change byte order in word. For AMD x86-64. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -/* - INPUT PARAMETERS: - word %rdi -*/ - - .text -ENTRY (htonl) - movl %edi, %eax - bswap %eax - ret -END (htonl) - -weak_alias (htonl, ntohl) diff --git a/sysdeps/x86_64/ifuncmain8.c b/sysdeps/x86_64/ifuncmain8.c deleted file mode 100644 index c97cad0af4..0000000000 --- a/sysdeps/x86_64/ifuncmain8.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Test IFUNC selector with floating-point parameters. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -extern float foo (float); - -static int -do_test (void) -{ - if (foo (2) != 3) - abort (); - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/x86_64/ifuncmod8.c b/sysdeps/x86_64/ifuncmod8.c deleted file mode 100644 index 037158b2b5..0000000000 --- a/sysdeps/x86_64/ifuncmod8.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Test IFUNC selector with floating-point parameters. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -void * foo_ifunc (void) __asm__ ("foo"); -__asm__(".type foo, %gnu_indirect_function"); - -static float -foo_impl (float x) -{ - return x + 1; -} - -void * -inhibit_stack_protector -foo_ifunc (void) -{ - __m128i xmm = _mm_set1_epi32 (-1); - asm volatile ("movdqa %0, %%xmm0" : : "x" (xmm) : "xmm0" ); - return foo_impl; -} diff --git a/sysdeps/x86_64/jmpbuf-offsets.h b/sysdeps/x86_64/jmpbuf-offsets.h deleted file mode 100644 index 7471deaae8..0000000000 --- a/sysdeps/x86_64/jmpbuf-offsets.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Private macros for accessing __jmp_buf contents. x86-64 version. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* We only need to save callee-saved registers plus stackpointer and - program counter. */ -#define JB_RBX 0 -#define JB_RBP 1 -#define JB_R12 2 -#define JB_R13 3 -#define JB_R14 4 -#define JB_R15 5 -#define JB_RSP 6 -#define JB_PC 7 -#define JB_SIZE (8*8) diff --git a/sysdeps/x86_64/jmpbuf-unwind.h b/sysdeps/x86_64/jmpbuf-unwind.h deleted file mode 100644 index a22c77af05..0000000000 --- a/sysdeps/x86_64/jmpbuf-unwind.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((void *) (address) < (void *) demangle ((jmpbuf)[JB_RSP])) - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, \ - (void *) (_Unwind_Ptr) _Unwind_GetCFA (_context), \ - _adj) - -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf regs) -{ - uintptr_t sp = regs[JB_RSP]; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return sp; -} - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/x86_64/l10nflist.c b/sysdeps/x86_64/l10nflist.c deleted file mode 100644 index 2e08372338..0000000000 --- a/sysdeps/x86_64/l10nflist.c +++ /dev/null @@ -1,13 +0,0 @@ -#ifdef __POPCNT__ -# include - -static inline unsigned int -pop (unsigned int x) -{ - return _mm_popcnt_u32 (x); -} -# define ARCH_POP 1 - -#endif - -#include diff --git a/sysdeps/x86_64/ldbl2mpn.c b/sysdeps/x86_64/ldbl2mpn.c deleted file mode 100644 index 641b789cd4..0000000000 --- a/sysdeps/x86_64/ldbl2mpn.c +++ /dev/null @@ -1 +0,0 @@ -#include "../i386/ldbl2mpn.c" diff --git a/sysdeps/x86_64/ldsodefs.h b/sysdeps/x86_64/ldsodefs.h deleted file mode 100644 index 19ff8c8209..0000000000 --- a/sysdeps/x86_64/ldsodefs.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _X86_64_LDSODEFS_H -#define _X86_64_LDSODEFS_H 1 - -#include -#include - -struct La_x86_64_regs; -struct La_x86_64_retval; -struct La_x32_regs; -struct La_x32_retval; - -#define ARCH_PLTENTER_MEMBERS \ - Elf64_Addr (*x86_64_gnu_pltenter) (Elf64_Sym *, unsigned int, \ - uintptr_t *, \ - uintptr_t *, struct La_x86_64_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep); \ - Elf32_Addr (*x32_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *, \ - uintptr_t *, struct La_x32_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep) - -#define ARCH_PLTEXIT_MEMBERS \ - unsigned int (*x86_64_gnu_pltexit) (Elf64_Sym *, unsigned int, \ - uintptr_t *, \ - uintptr_t *, \ - const struct La_x86_64_regs *, \ - struct La_x86_64_retval *, \ - const char *); \ - unsigned int (*x32_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *, \ - uintptr_t *, \ - const struct La_x32_regs *, \ - struct La_x86_64_retval *, \ - const char *) - -#include_next - -#endif diff --git a/sysdeps/x86_64/link-defines.sym b/sysdeps/x86_64/link-defines.sym deleted file mode 100644 index 963c69b320..0000000000 --- a/sysdeps/x86_64/link-defines.sym +++ /dev/null @@ -1,38 +0,0 @@ -#include "link.h" -#include - --- -VECTOR_SIZE sizeof (La_x86_64_vector) -XMM_SIZE sizeof (La_x86_64_xmm) -YMM_SIZE sizeof (La_x86_64_ymm) -ZMM_SIZE sizeof (La_x86_64_zmm) -BND_SIZE sizeof (__int128_t) - -LR_SIZE sizeof (struct La_x86_64_regs) -LR_RDX_OFFSET offsetof (struct La_x86_64_regs, lr_rdx) -LR_R8_OFFSET offsetof (struct La_x86_64_regs, lr_r8) -LR_R9_OFFSET offsetof (struct La_x86_64_regs, lr_r9) -LR_RCX_OFFSET offsetof (struct La_x86_64_regs, lr_rcx) -LR_RSI_OFFSET offsetof (struct La_x86_64_regs, lr_rsi) -LR_RDI_OFFSET offsetof (struct La_x86_64_regs, lr_rdi) -LR_RBP_OFFSET offsetof (struct La_x86_64_regs, lr_rbp) -LR_RSP_OFFSET offsetof (struct La_x86_64_regs, lr_rsp) -LR_XMM_OFFSET offsetof (struct La_x86_64_regs, lr_xmm) -LR_VECTOR_OFFSET offsetof (struct La_x86_64_regs, lr_vector) -#ifndef __ILP32__ -LR_BND_OFFSET offsetof (struct La_x86_64_regs, lr_bnd) -#endif - -LRV_SIZE sizeof (struct La_x86_64_retval) -LRV_RAX_OFFSET offsetof (struct La_x86_64_retval, lrv_rax) -LRV_RDX_OFFSET offsetof (struct La_x86_64_retval, lrv_rdx) -LRV_XMM0_OFFSET offsetof (struct La_x86_64_retval, lrv_xmm0) -LRV_XMM1_OFFSET offsetof (struct La_x86_64_retval, lrv_xmm1) -LRV_ST0_OFFSET offsetof (struct La_x86_64_retval, lrv_st0) -LRV_ST1_OFFSET offsetof (struct La_x86_64_retval, lrv_st1) -LRV_VECTOR0_OFFSET offsetof (struct La_x86_64_retval, lrv_vector0) -LRV_VECTOR1_OFFSET offsetof (struct La_x86_64_retval, lrv_vector1) -#ifndef __ILP32__ -LRV_BND0_OFFSET offsetof (struct La_x86_64_retval, lrv_bnd0) -LRV_BND1_OFFSET offsetof (struct La_x86_64_retval, lrv_bnd1) -#endif diff --git a/sysdeps/x86_64/locale-defines.sym b/sysdeps/x86_64/locale-defines.sym deleted file mode 100644 index aebff9a4f9..0000000000 --- a/sysdeps/x86_64/locale-defines.sym +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include -#include - --- - -LOCALE_T___LOCALES offsetof (struct __locale_struct, __locales) -LC_CTYPE -_NL_CTYPE_NONASCII_CASE -LOCALE_DATA_VALUES offsetof (struct __locale_data, values) -SIZEOF_VALUES sizeof (((struct __locale_data *) 0)->values[0]) diff --git a/sysdeps/x86_64/localplt.data b/sysdeps/x86_64/localplt.data deleted file mode 100644 index a1840cff31..0000000000 --- a/sysdeps/x86_64/localplt.data +++ /dev/null @@ -1,20 +0,0 @@ -# See scripts/check-localplt.awk for how this file is processed. -# PLT use is required for the malloc family and for matherr because -# users can define their own functions and have library internals call them. -# Linker in binutils 2.26 and newer consolidates R_X86_64_JUMP_SLOT -# relocation with R_X86_64_GLOB_DAT relocation against the same symbol. -libc.so: calloc + RELA R_X86_64_GLOB_DAT -libc.so: free + RELA R_X86_64_GLOB_DAT -libc.so: malloc + RELA R_X86_64_GLOB_DAT -libc.so: memalign + RELA R_X86_64_GLOB_DAT -libc.so: realloc + RELA R_X86_64_GLOB_DAT -libm.so: matherr + RELA R_X86_64_GLOB_DAT -# The main malloc is interposed into the dynamic linker, for -# allocations after the initial link (when dlopen is used). -ld.so: malloc + RELA R_X86_64_GLOB_DAT -ld.so: calloc + RELA R_X86_64_GLOB_DAT -ld.so: realloc + RELA R_X86_64_GLOB_DAT -ld.so: free + RELA R_X86_64_GLOB_DAT -# The TLS-enabled version of these functions is interposed from libc.so. -ld.so: _dl_signal_error + RELA R_X86_64_GLOB_DAT -ld.so: _dl_catch_error + RELA R_X86_64_GLOB_DAT diff --git a/sysdeps/x86_64/lshift.S b/sysdeps/x86_64/lshift.S deleted file mode 100644 index 690f83555a..0000000000 --- a/sysdeps/x86_64/lshift.S +++ /dev/null @@ -1,116 +0,0 @@ -/* x86-64 __mpn_lshift -- - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define rp %rdi -#define up %rsi -#define n %rdx -#define cnt %cl - - .text -ENTRY (__mpn_lshift) - lea -8(rp,n,8), rp - lea -8(up,n,8), up - - mov %edx, %eax - and $3, %eax - jne L(nb00) -L(b00): /* n = 4, 8, 12, ... */ - mov (up), %r10 - mov -8(up), %r11 - xor %eax, %eax - shld %cl, %r10, %rax - mov -16(up), %r8 - lea 24(rp), rp - sub $4, n - jmp L(00) - -L(nb00):/* n = 1, 5, 9, ... */ - cmp $2, %eax - jae L(nb01) -L(b01): mov (up), %r9 - xor %eax, %eax - shld %cl, %r9, %rax - sub $2, n - jb L(le1) - mov -8(up), %r10 - mov -16(up), %r11 - lea -8(up), up - lea 16(rp), rp - jmp L(01) -L(le1): shl %cl, %r9 - mov %r9, (rp) - ret - -L(nb01):/* n = 2, 6, 10, ... */ - jne L(b11) -L(b10): mov (up), %r8 - mov -8(up), %r9 - xor %eax, %eax - shld %cl, %r8, %rax - sub $3, n - jb L(le2) - mov -16(up), %r10 - lea -16(up), up - lea 8(rp), rp - jmp L(10) -L(le2): shld %cl, %r9, %r8 - mov %r8, (rp) - shl %cl, %r9 - mov %r9, -8(rp) - ret - - .p2align 4 /* performance critical! */ -L(b11): /* n = 3, 7, 11, ... */ - mov (up), %r11 - mov -8(up), %r8 - xor %eax, %eax - shld %cl, %r11, %rax - mov -16(up), %r9 - lea -24(up), up - sub $4, n - jb L(end) - - .p2align 4 -L(top): shld %cl, %r8, %r11 - mov (up), %r10 - mov %r11, (rp) -L(10): shld %cl, %r9, %r8 - mov -8(up), %r11 - mov %r8, -8(rp) -L(01): shld %cl, %r10, %r9 - mov -16(up), %r8 - mov %r9, -16(rp) -L(00): shld %cl, %r11, %r10 - mov -24(up), %r9 - mov %r10, -24(rp) - add $-32, up - lea -32(rp), rp - sub $4, n - jnc L(top) - -L(end): shld %cl, %r8, %r11 - mov %r11, (rp) - shld %cl, %r9, %r8 - mov %r8, -8(rp) - shl %cl, %r9 - mov %r9, -16(rp) - ret -END (__mpn_lshift) diff --git a/sysdeps/x86_64/machine-gmon.h b/sysdeps/x86_64/machine-gmon.h deleted file mode 100644 index 4fdccf8d17..0000000000 --- a/sysdeps/x86_64/machine-gmon.h +++ /dev/null @@ -1,38 +0,0 @@ -/* x86-64-specific implementation of profiling support. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* We need a special version of the `mcount' function since for x86-64 - so that we do not use __builtin_return_address (N) and avoid - clobbering of register. */ - - -/* We must not pollute the global namespace. */ -#define mcount_internal __mcount_internal - -void mcount_internal (u_long frompc, u_long selfpc); - -#define _MCOUNT_DECL(frompc, selfpc) \ -void mcount_internal (u_long frompc, u_long selfpc) - - -/* Define MCOUNT as empty since we have the implementation in another - file. */ -#define MCOUNT diff --git a/sysdeps/x86_64/memchr.S b/sysdeps/x86_64/memchr.S deleted file mode 100644 index d3be012424..0000000000 --- a/sysdeps/x86_64/memchr.S +++ /dev/null @@ -1,315 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* fast SSE2 version with using pmaxub and 64 byte loop */ - - .text -ENTRY(memchr) - movd %esi, %xmm1 - mov %edi, %ecx - - punpcklbw %xmm1, %xmm1 - test %rdx, %rdx - jz L(return_null) - punpcklbw %xmm1, %xmm1 - - and $63, %ecx - pshufd $0, %xmm1, %xmm1 - - cmp $48, %ecx - ja L(crosscache) - - movdqu (%rdi), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - - jnz L(matches_1) - sub $16, %rdx - jbe L(return_null) - add $16, %rdi - and $15, %ecx - and $-16, %rdi - add %rcx, %rdx - sub $64, %rdx - jbe L(exit_loop) - jmp L(loop_prolog) - - .p2align 4 -L(crosscache): - and $15, %ecx - and $-16, %rdi - movdqa (%rdi), %xmm0 - - pcmpeqb %xmm1, %xmm0 -/* Check if there is a match. */ - pmovmskb %xmm0, %eax -/* Remove the leading bytes. */ - sar %cl, %eax - test %eax, %eax - je L(unaligned_no_match) -/* Check which byte is a match. */ - bsf %eax, %eax - - sub %rax, %rdx - jbe L(return_null) - add %rdi, %rax - add %rcx, %rax - ret - - .p2align 4 -L(unaligned_no_match): - /* "rcx" is less than 16. Calculate "rdx + rcx - 16" by using - "rdx - (16 - rcx)" instead of "(rdx + rcx) - 16" to void - possible addition overflow. */ - neg %rcx - add $16, %rcx - sub %rcx, %rdx - jbe L(return_null) - add $16, %rdi - sub $64, %rdx - jbe L(exit_loop) - - .p2align 4 -L(loop_prolog): - movdqa (%rdi), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - - movdqa 16(%rdi), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches16) - - movdqa 32(%rdi), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 48(%rdi), %xmm4 - pcmpeqb %xmm1, %xmm4 - add $64, %rdi - pmovmskb %xmm4, %eax - test %eax, %eax - jnz L(matches0) - - test $0x3f, %rdi - jz L(align64_loop) - - sub $64, %rdx - jbe L(exit_loop) - - movdqa (%rdi), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - - movdqa 16(%rdi), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches16) - - movdqa 32(%rdi), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 48(%rdi), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - - add $64, %rdi - test %eax, %eax - jnz L(matches0) - - mov %rdi, %rcx - and $-64, %rdi - and $63, %ecx - add %rcx, %rdx - - .p2align 4 -L(align64_loop): - sub $64, %rdx - jbe L(exit_loop) - movdqa (%rdi), %xmm0 - movdqa 16(%rdi), %xmm2 - movdqa 32(%rdi), %xmm3 - movdqa 48(%rdi), %xmm4 - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm1, %xmm2 - pcmpeqb %xmm1, %xmm3 - pcmpeqb %xmm1, %xmm4 - - pmaxub %xmm0, %xmm3 - pmaxub %xmm2, %xmm4 - pmaxub %xmm3, %xmm4 - pmovmskb %xmm4, %eax - - add $64, %rdi - - test %eax, %eax - jz L(align64_loop) - - sub $64, %rdi - - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches16) - - movdqa 32(%rdi), %xmm3 - pcmpeqb %xmm1, %xmm3 - - pcmpeqb 48(%rdi), %xmm1 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches32) - - pmovmskb %xmm1, %eax - bsf %eax, %eax - lea 48(%rdi, %rax), %rax - ret - - .p2align 4 -L(exit_loop): - add $32, %edx - jle L(exit_loop_32) - - movdqa (%rdi), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - - movdqa 16(%rdi), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches16) - - movdqa 32(%rdi), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches32_1) - sub $16, %edx - jle L(return_null) - - pcmpeqb 48(%rdi), %xmm1 - pmovmskb %xmm1, %eax - test %eax, %eax - jnz L(matches48_1) - xor %eax, %eax - ret - - .p2align 4 -L(exit_loop_32): - add $32, %edx - movdqa (%rdi), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches_1) - sub $16, %edx - jbe L(return_null) - - pcmpeqb 16(%rdi), %xmm1 - pmovmskb %xmm1, %eax - test %eax, %eax - jnz L(matches16_1) - xor %eax, %eax - ret - - .p2align 4 -L(matches0): - bsf %eax, %eax - lea -16(%rax, %rdi), %rax - ret - - .p2align 4 -L(matches): - bsf %eax, %eax - add %rdi, %rax - ret - - .p2align 4 -L(matches16): - bsf %eax, %eax - lea 16(%rax, %rdi), %rax - ret - - .p2align 4 -L(matches32): - bsf %eax, %eax - lea 32(%rax, %rdi), %rax - ret - - .p2align 4 -L(matches_1): - bsf %eax, %eax - sub %rax, %rdx - jbe L(return_null) - add %rdi, %rax - ret - - .p2align 4 -L(matches16_1): - bsf %eax, %eax - sub %rax, %rdx - jbe L(return_null) - lea 16(%rdi, %rax), %rax - ret - - .p2align 4 -L(matches32_1): - bsf %eax, %eax - sub %rax, %rdx - jbe L(return_null) - lea 32(%rdi, %rax), %rax - ret - - .p2align 4 -L(matches48_1): - bsf %eax, %eax - sub %rax, %rdx - jbe L(return_null) - lea 48(%rdi, %rax), %rax - ret - - .p2align 4 -L(return_null): - xor %eax, %eax - ret -END(memchr) - -strong_alias (memchr, __memchr) - -libc_hidden_builtin_def(memchr) diff --git a/sysdeps/x86_64/memcmp.S b/sysdeps/x86_64/memcmp.S deleted file mode 100644 index 0828a22534..0000000000 --- a/sysdeps/x86_64/memcmp.S +++ /dev/null @@ -1,358 +0,0 @@ -/* memcmp with SSE2 - Copyright (C) 2009-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY (memcmp) - test %rdx, %rdx - jz L(finz) - cmpq $1, %rdx - jle L(finr1b) - subq %rdi, %rsi - movq %rdx, %r10 - cmpq $32, %r10 - jge L(gt32) - /* Handle small chunks and last block of less than 32 bytes. */ -L(small): - testq $1, %r10 - jz L(s2b) - movzbl (%rdi), %eax - movzbl (%rdi, %rsi), %edx - subq $1, %r10 - je L(finz1) - addq $1, %rdi - subl %edx, %eax - jnz L(exit) -L(s2b): - testq $2, %r10 - jz L(s4b) - movzwl (%rdi), %eax - movzwl (%rdi, %rsi), %edx - subq $2, %r10 - je L(fin2_7) - addq $2, %rdi - cmpl %edx, %eax - jnz L(fin2_7) -L(s4b): - testq $4, %r10 - jz L(s8b) - movl (%rdi), %eax - movl (%rdi, %rsi), %edx - subq $4, %r10 - je L(fin2_7) - addq $4, %rdi - cmpl %edx, %eax - jnz L(fin2_7) -L(s8b): - testq $8, %r10 - jz L(s16b) - movq (%rdi), %rax - movq (%rdi, %rsi), %rdx - subq $8, %r10 - je L(fin2_7) - addq $8, %rdi - cmpq %rdx, %rax - jnz L(fin2_7) -L(s16b): - movdqu (%rdi), %xmm1 - movdqu (%rdi, %rsi), %xmm0 - pcmpeqb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - xorl %eax, %eax - subl $0xffff, %edx - jz L(finz) - bsfl %edx, %ecx - leaq (%rdi, %rcx), %rcx - movzbl (%rcx), %eax - movzbl (%rsi, %rcx), %edx - jmp L(finz1) - - .p2align 4,, 4 -L(finr1b): - movzbl (%rdi), %eax - movzbl (%rsi), %edx -L(finz1): - subl %edx, %eax -L(exit): - ret - - .p2align 4,, 4 -L(fin2_7): - cmpq %rdx, %rax - jz L(finz) - movq %rax, %r11 - subq %rdx, %r11 - bsfq %r11, %rcx - sarq $3, %rcx - salq $3, %rcx - sarq %cl, %rax - movzbl %al, %eax - sarq %cl, %rdx - movzbl %dl, %edx - subl %edx, %eax - ret - - .p2align 4,, 4 -L(finz): - xorl %eax, %eax - ret - - /* For blocks bigger than 32 bytes - 1. Advance one of the addr pointer to be 16B aligned. - 2. Treat the case of both addr pointers aligned to 16B - separately to avoid movdqu. - 3. Handle any blocks of greater than 64 consecutive bytes with - unrolling to reduce branches. - 4. At least one addr pointer is 16B aligned, use memory version - of pcmbeqb. - */ - .p2align 4,, 4 -L(gt32): - movq %rdx, %r11 - addq %rdi, %r11 - movq %rdi, %r8 - - andq $15, %r8 - jz L(16am) - /* Both pointers may be misaligned. */ - movdqu (%rdi), %xmm1 - movdqu (%rdi, %rsi), %xmm0 - pcmpeqb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - subl $0xffff, %edx - jnz L(neq) - neg %r8 - leaq 16(%rdi, %r8), %rdi -L(16am): - /* Handle two 16B aligned pointers separately. */ - testq $15, %rsi - jz L(ATR) - testq $16, %rdi - jz L(A32) - movdqu (%rdi, %rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi -L(A32): - movq %r11, %r10 - andq $-32, %r10 - cmpq %r10, %rdi - jge L(mt16) - /* Pre-unroll to be ready for unrolled 64B loop. */ - testq $32, %rdi - jz L(A64) - movdqu (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - - movdqu (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - -L(A64): - movq %r11, %r10 - andq $-64, %r10 - cmpq %r10, %rdi - jge L(mt32) - -L(A64main): - movdqu (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - - movdqu (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - - movdqu (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - - movdqu (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - - cmpq %rdi, %r10 - jne L(A64main) - -L(mt32): - movq %r11, %r10 - andq $-32, %r10 - cmpq %r10, %rdi - jge L(mt16) - -L(A32main): - movdqu (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - - movdqu (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - - cmpq %rdi, %r10 - jne L(A32main) -L(mt16): - subq %rdi, %r11 - je L(finz) - movq %r11, %r10 - jmp L(small) - - .p2align 4,, 4 -L(neq): - bsfl %edx, %ecx - movzbl (%rdi, %rcx), %eax - addq %rdi, %rsi - movzbl (%rsi,%rcx), %edx - jmp L(finz1) - - .p2align 4,, 4 -L(ATR): - movq %r11, %r10 - andq $-32, %r10 - cmpq %r10, %rdi - jge L(mt16) - testq $16, %rdi - jz L(ATR32) - - movdqa (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - cmpq %rdi, %r10 - je L(mt16) - -L(ATR32): - movq %r11, %r10 - andq $-64, %r10 - testq $32, %rdi - jz L(ATR64) - - movdqa (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - - movdqa (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - -L(ATR64): - cmpq %rdi, %r10 - je L(mt32) - -L(ATR64main): - movdqa (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - - movdqa (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - - movdqa (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - - movdqa (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - cmpq %rdi, %r10 - jne L(ATR64main) - - movq %r11, %r10 - andq $-32, %r10 - cmpq %r10, %rdi - jge L(mt16) - -L(ATR32res): - movdqa (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - - movdqa (%rdi,%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - pmovmskb %xmm0, %edx - subl $0xffff, %edx - jnz L(neq) - addq $16, %rdi - - cmpq %r10, %rdi - jne L(ATR32res) - - subq %rdi, %r11 - je L(finz) - movq %r11, %r10 - jmp L(small) - /* Align to 16byte to improve instruction fetch. */ - .p2align 4,, 4 -END(memcmp) - -#undef bcmp -weak_alias (memcmp, bcmp) -libc_hidden_builtin_def (memcmp) diff --git a/sysdeps/x86_64/memcopy.h b/sysdeps/x86_64/memcopy.h deleted file mode 100644 index 590b6cb16b..0000000000 --- a/sysdeps/x86_64/memcopy.h +++ /dev/null @@ -1 +0,0 @@ -/* X86-64 doesn't use memory copy functions. */ diff --git a/sysdeps/x86_64/memcpy.S b/sysdeps/x86_64/memcpy.S deleted file mode 100644 index d98500a78a..0000000000 --- a/sysdeps/x86_64/memcpy.S +++ /dev/null @@ -1 +0,0 @@ -/* Implemented in memcpy.S. */ diff --git a/sysdeps/x86_64/memcpy_chk.S b/sysdeps/x86_64/memcpy_chk.S deleted file mode 100644 index 23e9e1ade5..0000000000 --- a/sysdeps/x86_64/memcpy_chk.S +++ /dev/null @@ -1,33 +0,0 @@ -/* Checking memcpy for x86-64. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#ifndef SHARED - /* For libc.so this is defined in memcpy.S. - For libc.a, this is a separate source to avoid - memcpy bringing in __chk_fail and all routines - it calls. */ - .text -ENTRY (__memcpy_chk) - cmpq %rdx, %rcx - jb __chk_fail - jmp memcpy -END (__memcpy_chk) -#endif diff --git a/sysdeps/x86_64/memmove.S b/sysdeps/x86_64/memmove.S deleted file mode 100644 index 5bbae9904f..0000000000 --- a/sysdeps/x86_64/memmove.S +++ /dev/null @@ -1,71 +0,0 @@ -/* Optimized memmove for x86-64. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define VEC_SIZE 16 -#define VEC(i) xmm##i -#define PREFETCHNT prefetchnta -#define VMOVNT movntdq -/* Use movups and movaps for smaller code sizes. */ -#define VMOVU movups -#define VMOVA movaps - -#define SECTION(p) p - -#ifdef USE_MULTIARCH -# if !defined SHARED || !IS_IN (libc) -# define MEMCPY_SYMBOL(p,s) memcpy -# endif -#else -# if defined SHARED && IS_IN (libc) -# define MEMCPY_SYMBOL(p,s) __memcpy -# else -# define MEMCPY_SYMBOL(p,s) memcpy -# endif -#endif -#if !defined SHARED || !defined USE_MULTIARCH || !IS_IN (libc) -# define MEMPCPY_SYMBOL(p,s) __mempcpy -#endif -#ifndef MEMMOVE_SYMBOL -# define MEMMOVE_CHK_SYMBOL(p,s) p -# define MEMMOVE_SYMBOL(p,s) memmove -#endif - -#include "multiarch/memmove-vec-unaligned-erms.S" - -#ifndef USE_MULTIARCH -libc_hidden_builtin_def (memmove) -# if defined SHARED && IS_IN (libc) -strong_alias (memmove, __memcpy) -libc_hidden_ver (memmove, memcpy) -# endif -libc_hidden_def (__mempcpy) -weak_alias (__mempcpy, mempcpy) -libc_hidden_builtin_def (mempcpy) - -# if defined SHARED && IS_IN (libc) -# undef memcpy -# include -versioned_symbol (libc, __memcpy, memcpy, GLIBC_2_14); - -# if SHLIB_COMPAT (libc, GLIBC_2_2_5, GLIBC_2_14) -compat_symbol (libc, memmove, memcpy, GLIBC_2_2_5); -# endif -# endif -#endif diff --git a/sysdeps/x86_64/memmove_chk.S b/sysdeps/x86_64/memmove_chk.S deleted file mode 100644 index a87345800b..0000000000 --- a/sysdeps/x86_64/memmove_chk.S +++ /dev/null @@ -1,33 +0,0 @@ -/* Checking memmove for x86-64. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#ifndef SHARED - /* For libc.so this is defined in memmove.S. - For libc.a, this is a separate source to avoid - memmove bringing in __chk_fail and all routines - it calls. */ - .text -ENTRY (__memmove_chk) - cmpq %rdx, %rcx - jb __chk_fail - jmp memmove -END (__memmove_chk) -#endif diff --git a/sysdeps/x86_64/mempcpy.S b/sysdeps/x86_64/mempcpy.S deleted file mode 100644 index d98500a78a..0000000000 --- a/sysdeps/x86_64/mempcpy.S +++ /dev/null @@ -1 +0,0 @@ -/* Implemented in memcpy.S. */ diff --git a/sysdeps/x86_64/mempcpy_chk.S b/sysdeps/x86_64/mempcpy_chk.S deleted file mode 100644 index f912291576..0000000000 --- a/sysdeps/x86_64/mempcpy_chk.S +++ /dev/null @@ -1,33 +0,0 @@ -/* Checking mempcpy for x86-64. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#ifndef SHARED - /* For libc.so this is defined in memcpy.S. - For libc.a, this is a separate source to avoid - mempcpy bringing in __chk_fail and all routines - it calls. */ - .text -ENTRY (__mempcpy_chk) - cmpq %rdx, %rcx - jb __chk_fail - jmp mempcpy -END (__mempcpy_chk) -#endif diff --git a/sysdeps/x86_64/memrchr.S b/sysdeps/x86_64/memrchr.S deleted file mode 100644 index 5fa0fe9c1c..0000000000 --- a/sysdeps/x86_64/memrchr.S +++ /dev/null @@ -1,380 +0,0 @@ -/* fast SSE2 memrchr with 64 byte loop and pmaxub instruction using - - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY (__memrchr) - movd %esi, %xmm1 - - sub $16, %rdx - jbe L(length_less16) - - punpcklbw %xmm1, %xmm1 - punpcklbw %xmm1, %xmm1 - - add %rdx, %rdi - pshufd $0, %xmm1, %xmm1 - - movdqu (%rdi), %xmm0 - pcmpeqb %xmm1, %xmm0 - -/* Check if there is a match. */ - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches0) - - sub $64, %rdi - mov %edi, %ecx - and $15, %ecx - jz L(loop_prolog) - - add $16, %rdi - add $16, %rdx - and $-16, %rdi - sub %rcx, %rdx - - .p2align 4 -L(loop_prolog): - sub $64, %rdx - jbe L(exit_loop) - - movdqa 48(%rdi), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches48) - - movdqa 32(%rdi), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 16(%rdi), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches16) - - movdqa (%rdi), %xmm4 - pcmpeqb %xmm1, %xmm4 - pmovmskb %xmm4, %eax - test %eax, %eax - jnz L(matches0) - - sub $64, %rdi - sub $64, %rdx - jbe L(exit_loop) - - movdqa 48(%rdi), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches48) - - movdqa 32(%rdi), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 16(%rdi), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches16) - - movdqa (%rdi), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches0) - - mov %edi, %ecx - and $63, %ecx - jz L(align64_loop) - - add $64, %rdi - add $64, %rdx - and $-64, %rdi - sub %rcx, %rdx - - .p2align 4 -L(align64_loop): - sub $64, %rdi - sub $64, %rdx - jbe L(exit_loop) - - movdqa (%rdi), %xmm0 - movdqa 16(%rdi), %xmm2 - movdqa 32(%rdi), %xmm3 - movdqa 48(%rdi), %xmm4 - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm1, %xmm2 - pcmpeqb %xmm1, %xmm3 - pcmpeqb %xmm1, %xmm4 - - pmaxub %xmm3, %xmm0 - pmaxub %xmm4, %xmm2 - pmaxub %xmm0, %xmm2 - pmovmskb %xmm2, %eax - - test %eax, %eax - jz L(align64_loop) - - pmovmskb %xmm4, %eax - test %eax, %eax - jnz L(matches48) - - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 16(%rdi), %xmm2 - - pcmpeqb %xmm1, %xmm2 - pcmpeqb (%rdi), %xmm1 - - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches16) - - pmovmskb %xmm1, %eax - bsr %eax, %eax - - add %rdi, %rax - ret - - .p2align 4 -L(exit_loop): - add $64, %edx - cmp $32, %edx - jbe L(exit_loop_32) - - movdqa 48(%rdi), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches48) - - movdqa 32(%rdi), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 16(%rdi), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches16_1) - cmp $48, %edx - jbe L(return_null) - - pcmpeqb (%rdi), %xmm1 - pmovmskb %xmm1, %eax - test %eax, %eax - jnz L(matches0_1) - xor %eax, %eax - ret - - .p2align 4 -L(exit_loop_32): - movdqa 48(%rdi), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches48_1) - cmp $16, %edx - jbe L(return_null) - - pcmpeqb 32(%rdi), %xmm1 - pmovmskb %xmm1, %eax - test %eax, %eax - jnz L(matches32_1) - xor %eax, %eax - ret - - .p2align 4 -L(matches0): - bsr %eax, %eax - add %rdi, %rax - ret - - .p2align 4 -L(matches16): - bsr %eax, %eax - lea 16(%rax, %rdi), %rax - ret - - .p2align 4 -L(matches32): - bsr %eax, %eax - lea 32(%rax, %rdi), %rax - ret - - .p2align 4 -L(matches48): - bsr %eax, %eax - lea 48(%rax, %rdi), %rax - ret - - .p2align 4 -L(matches0_1): - bsr %eax, %eax - sub $64, %rdx - add %rax, %rdx - jl L(return_null) - add %rdi, %rax - ret - - .p2align 4 -L(matches16_1): - bsr %eax, %eax - sub $48, %rdx - add %rax, %rdx - jl L(return_null) - lea 16(%rdi, %rax), %rax - ret - - .p2align 4 -L(matches32_1): - bsr %eax, %eax - sub $32, %rdx - add %rax, %rdx - jl L(return_null) - lea 32(%rdi, %rax), %rax - ret - - .p2align 4 -L(matches48_1): - bsr %eax, %eax - sub $16, %rdx - add %rax, %rdx - jl L(return_null) - lea 48(%rdi, %rax), %rax - ret - - .p2align 4 -L(return_null): - xor %eax, %eax - ret - - .p2align 4 -L(length_less16_offset0): - test %edx, %edx - jz L(return_null) - - mov %dl, %cl - pcmpeqb (%rdi), %xmm1 - - mov $1, %edx - sal %cl, %edx - sub $1, %edx - - pmovmskb %xmm1, %eax - - and %edx, %eax - test %eax, %eax - jz L(return_null) - - bsr %eax, %eax - add %rdi, %rax - ret - - .p2align 4 -L(length_less16): - punpcklbw %xmm1, %xmm1 - punpcklbw %xmm1, %xmm1 - - add $16, %edx - - pshufd $0, %xmm1, %xmm1 - - mov %edi, %ecx - and $15, %ecx - jz L(length_less16_offset0) - - mov %cl, %dh - mov %ecx, %esi - add %dl, %dh - and $-16, %rdi - - sub $16, %dh - ja L(length_less16_part2) - - pcmpeqb (%rdi), %xmm1 - pmovmskb %xmm1, %eax - - sar %cl, %eax - mov %dl, %cl - - mov $1, %edx - sal %cl, %edx - sub $1, %edx - - and %edx, %eax - test %eax, %eax - jz L(return_null) - - bsr %eax, %eax - add %rdi, %rax - add %rsi, %rax - ret - - .p2align 4 -L(length_less16_part2): - movdqa 16(%rdi), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - - mov %dh, %cl - mov $1, %edx - sal %cl, %edx - sub $1, %edx - - and %edx, %eax - - test %eax, %eax - jnz L(length_less16_part2_return) - - pcmpeqb (%rdi), %xmm1 - pmovmskb %xmm1, %eax - - mov %esi, %ecx - sar %cl, %eax - test %eax, %eax - jz L(return_null) - - bsr %eax, %eax - add %rdi, %rax - add %rsi, %rax - ret - - .p2align 4 -L(length_less16_part2_return): - bsr %eax, %eax - lea 16(%rax, %rdi), %rax - ret - -END (__memrchr) -weak_alias (__memrchr, memrchr) diff --git a/sysdeps/x86_64/memset.S b/sysdeps/x86_64/memset.S deleted file mode 100644 index 41278787fe..0000000000 --- a/sysdeps/x86_64/memset.S +++ /dev/null @@ -1,67 +0,0 @@ -/* memset/bzero -- set memory area to CH/0 - Optimized version for x86-64. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define VEC_SIZE 16 -#define VEC(i) xmm##i -/* Don't use movups and movaps since it will get larger nop paddings for - alignment. */ -#define VMOVU movdqu -#define VMOVA movdqa - -#define MEMSET_VDUP_TO_VEC0_AND_SET_RETURN(d, r) \ - movd d, %xmm0; \ - movq r, %rax; \ - punpcklbw %xmm0, %xmm0; \ - punpcklwd %xmm0, %xmm0; \ - pshufd $0, %xmm0, %xmm0 - -#define WMEMSET_VDUP_TO_VEC0_AND_SET_RETURN(d, r) \ - movd d, %xmm0; \ - movq r, %rax; \ - pshufd $0, %xmm0, %xmm0 - -#define SECTION(p) p - -#ifndef MEMSET_SYMBOL -# define MEMSET_CHK_SYMBOL(p,s) p -# define MEMSET_SYMBOL(p,s) memset -#endif - -#ifndef WMEMSET_SYMBOL -# define WMEMSET_CHK_SYMBOL(p,s) p -# define WMEMSET_SYMBOL(p,s) __wmemset -#endif - -#include "multiarch/memset-vec-unaligned-erms.S" - -libc_hidden_builtin_def (memset) - -#if IS_IN (libc) -libc_hidden_def (__wmemset) -weak_alias (__wmemset, wmemset) -libc_hidden_weak (wmemset) -#endif - -#if defined SHARED && IS_IN (libc) && !defined USE_MULTIARCH -strong_alias (__memset_chk, __memset_zero_constant_len_parameter) - .section .gnu.warning.__memset_zero_constant_len_parameter - .string "memset used with constant zero length parameter; this could be due to transposed parameters" -#endif diff --git a/sysdeps/x86_64/memset_chk.S b/sysdeps/x86_64/memset_chk.S deleted file mode 100644 index 33d15c0c10..0000000000 --- a/sysdeps/x86_64/memset_chk.S +++ /dev/null @@ -1,33 +0,0 @@ -/* Checking memset for x86-64. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#ifndef SHARED - /* For libc.so this is defined in memset.S. - For libc.a, this is a separate source to avoid - memset bringing in __chk_fail and all routines - it calls. */ - .text -ENTRY (__memset_chk) - cmpq %rdx, %rcx - jb __chk_fail - jmp memset -END (__memset_chk) -#endif diff --git a/sysdeps/x86_64/memusage.h b/sysdeps/x86_64/memusage.h deleted file mode 100644 index 50f960b140..0000000000 --- a/sysdeps/x86_64/memusage.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("rsp"); stack_ptr; }) -#define GETTIME(low,high) asm ("rdtsc" : "=a" (low), "=d" (high)) - -#include diff --git a/sysdeps/x86_64/mp_clz_tab.c b/sysdeps/x86_64/mp_clz_tab.c deleted file mode 100644 index 7b13a394da..0000000000 --- a/sysdeps/x86_64/mp_clz_tab.c +++ /dev/null @@ -1 +0,0 @@ -/* __clz_tab not needed on x86-64. */ diff --git a/sysdeps/x86_64/mul_1.S b/sysdeps/x86_64/mul_1.S deleted file mode 100644 index 5c1c4335bf..0000000000 --- a/sysdeps/x86_64/mul_1.S +++ /dev/null @@ -1,128 +0,0 @@ -/* AMD64 __mpn_mul_1 -- Multiply a limb vector with a limb and store - the result in a second limb vector. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include -#include "asm-syntax.h" - -#define rp %rdi -#define up %rsi -#define n_param %rdx -#define vl %rcx - -#define n %r11 - - .text -ENTRY (__mpn_mul_1) - push %rbx - cfi_adjust_cfa_offset (8) - cfi_rel_offset (%rbx, 0) - xor %r10, %r10 - mov (up), %rax /* read first u limb early */ - mov n_param, %rbx /* move away n from rdx, mul uses it */ - mul vl - mov %rbx, %r11 - - add %r10, %rax - adc $0, %rdx - - and $3, %ebx - jz L(b0) - cmp $2, %ebx - jz L(b2) - jg L(b3) - -L(b1): dec n - jne L(gt1) - mov %rax, (rp) - jmp L(ret) -L(gt1): lea 8(up,n,8), up - lea -8(rp,n,8), rp - neg n - xor %r10, %r10 - xor %ebx, %ebx - mov %rax, %r9 - mov (up,n,8), %rax - mov %rdx, %r8 - jmp L(L1) - -L(b0): lea (up,n,8), up - lea -16(rp,n,8), rp - neg n - xor %r10, %r10 - mov %rax, %r8 - mov %rdx, %rbx - jmp L(L0) - -L(b3): lea -8(up,n,8), up - lea -24(rp,n,8), rp - neg n - mov %rax, %rbx - mov %rdx, %r10 - jmp L(L3) - -L(b2): lea -16(up,n,8), up - lea -32(rp,n,8), rp - neg n - xor %r8, %r8 - xor %ebx, %ebx - mov %rax, %r10 - mov 24(up,n,8), %rax - mov %rdx, %r9 - jmp L(L2) - - .p2align 4 -L(top): mov %r10, (rp,n,8) - add %rax, %r9 - mov (up,n,8), %rax - adc %rdx, %r8 - mov $0, %r10d -L(L1): mul vl - mov %r9, 8(rp,n,8) - add %rax, %r8 - adc %rdx, %rbx -L(L0): mov 8(up,n,8), %rax - mul vl - mov %r8, 16(rp,n,8) - add %rax, %rbx - adc %rdx, %r10 -L(L3): mov 16(up,n,8), %rax - mul vl - mov %rbx, 24(rp,n,8) - mov $0, %r8d # zero - mov %r8, %rbx # zero - add %rax, %r10 - mov 24(up,n,8), %rax - mov %r8, %r9 # zero - adc %rdx, %r9 -L(L2): mul vl - add $4, n - js L(top) - - mov %r10, (rp,n,8) - add %rax, %r9 - adc %r8, %rdx - mov %r9, 8(rp,n,8) - add %r8, %rdx -L(ret): mov %rdx, %rax - - pop %rbx - cfi_adjust_cfa_offset (-8) - cfi_restore (%rbx) - ret -END (__mpn_mul_1) diff --git a/sysdeps/x86_64/multiarch/Makefile b/sysdeps/x86_64/multiarch/Makefile deleted file mode 100644 index 310a3a4b72..0000000000 --- a/sysdeps/x86_64/multiarch/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -ifeq ($(subdir),csu) -tests += test-multiarch -endif - -ifeq ($(subdir),string) - -sysdep_routines += strncat-c stpncpy-c strncpy-c strcmp-ssse3 \ - strcmp-sse2-unaligned strncmp-ssse3 \ - memcmp-avx2-movbe \ - memcmp-sse4 memcpy-ssse3 \ - memmove-ssse3 \ - memcpy-ssse3-back \ - memmove-ssse3-back \ - memmove-avx512-no-vzeroupper strcasecmp_l-ssse3 \ - strncase_l-ssse3 strcat-ssse3 strncat-ssse3\ - strcpy-ssse3 strncpy-ssse3 stpcpy-ssse3 stpncpy-ssse3 \ - strcpy-sse2-unaligned strncpy-sse2-unaligned \ - stpcpy-sse2-unaligned stpncpy-sse2-unaligned \ - strcat-sse2-unaligned strncat-sse2-unaligned \ - strchr-sse2-no-bsf memcmp-ssse3 strstr-sse2-unaligned \ - strcspn-c strpbrk-c strspn-c varshift \ - memset-avx512-no-vzeroupper \ - memmove-avx-unaligned-erms \ - memmove-avx512-unaligned-erms \ - memset-avx2-unaligned-erms \ - memset-avx512-unaligned-erms -CFLAGS-varshift.c += -msse4 -CFLAGS-strcspn-c.c += -msse4 -CFLAGS-strpbrk-c.c += -msse4 -CFLAGS-strspn-c.c += -msse4 -endif - -ifeq ($(subdir),wcsmbs) -sysdep_routines += wmemcmp-sse4 wmemcmp-ssse3 wmemcmp-c \ - wmemcmp-avx2-movbe \ - wcscpy-ssse3 wcscpy-c \ - wcsnlen-sse4_1 wcsnlen-c -endif - -ifeq ($(subdir),debug) -sysdep_routines += wmemset_chk-nonshared -endif diff --git a/sysdeps/x86_64/multiarch/bcopy.S b/sysdeps/x86_64/multiarch/bcopy.S deleted file mode 100644 index 639f02bde3..0000000000 --- a/sysdeps/x86_64/multiarch/bcopy.S +++ /dev/null @@ -1,7 +0,0 @@ -#include - - .text -ENTRY(bcopy) - xchg %rdi, %rsi - jmp __libc_memmove /* Branch to IFUNC memmove. */ -END(bcopy) diff --git a/sysdeps/x86_64/multiarch/ifunc-impl-list.c b/sysdeps/x86_64/multiarch/ifunc-impl-list.c deleted file mode 100644 index 5627183aca..0000000000 --- a/sysdeps/x86_64/multiarch/ifunc-impl-list.c +++ /dev/null @@ -1,460 +0,0 @@ -/* Enumerate available IFUNC implementations of a function. x86-64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include "init-arch.h" - -/* Maximum number of IFUNC implementations. */ -#define MAX_IFUNC 5 - -/* Fill ARRAY of MAX elements with IFUNC implementations for function - NAME supported on target machine and return the number of valid - entries. */ - -size_t -__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, - size_t max) -{ - assert (max >= MAX_IFUNC); - - size_t i = 0; - - /* Support sysdeps/x86_64/multiarch/memcmp.S. */ - IFUNC_IMPL (i, name, memcmp, - IFUNC_IMPL_ADD (array, i, memcmp, - (HAS_ARCH_FEATURE (AVX2_Usable) - && HAS_CPU_FEATURE (MOVBE)), - __memcmp_avx2_movbe) - IFUNC_IMPL_ADD (array, i, memcmp, HAS_CPU_FEATURE (SSE4_1), - __memcmp_sse4_1) - IFUNC_IMPL_ADD (array, i, memcmp, HAS_CPU_FEATURE (SSSE3), - __memcmp_ssse3) - IFUNC_IMPL_ADD (array, i, memcmp, 1, __memcmp_sse2)) - - /* Support sysdeps/x86_64/multiarch/memmove_chk.c. */ - IFUNC_IMPL (i, name, __memmove_chk, - IFUNC_IMPL_ADD (array, i, __memmove_chk, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memmove_chk_avx512_no_vzeroupper) - IFUNC_IMPL_ADD (array, i, __memmove_chk, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memmove_chk_avx512_unaligned) - IFUNC_IMPL_ADD (array, i, __memmove_chk, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memmove_chk_avx512_unaligned_erms) - IFUNC_IMPL_ADD (array, i, __memmove_chk, - HAS_ARCH_FEATURE (AVX_Usable), - __memmove_chk_avx_unaligned) - IFUNC_IMPL_ADD (array, i, __memmove_chk, - HAS_ARCH_FEATURE (AVX_Usable), - __memmove_chk_avx_unaligned_erms) - IFUNC_IMPL_ADD (array, i, __memmove_chk, - HAS_CPU_FEATURE (SSSE3), - __memmove_chk_ssse3_back) - IFUNC_IMPL_ADD (array, i, __memmove_chk, - HAS_CPU_FEATURE (SSSE3), - __memmove_chk_ssse3) - IFUNC_IMPL_ADD (array, i, __memmove_chk, 1, - __memmove_chk_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, __memmove_chk, 1, - __memmove_chk_sse2_unaligned_erms)) - - /* Support sysdeps/x86_64/multiarch/memmove.S. */ - IFUNC_IMPL (i, name, memmove, - IFUNC_IMPL_ADD (array, i, memmove, - HAS_ARCH_FEATURE (AVX_Usable), - __memmove_avx_unaligned) - IFUNC_IMPL_ADD (array, i, memmove, - HAS_ARCH_FEATURE (AVX_Usable), - __memmove_avx_unaligned_erms) - IFUNC_IMPL_ADD (array, i, memmove, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memmove_avx512_no_vzeroupper) - IFUNC_IMPL_ADD (array, i, memmove, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memmove_avx512_unaligned) - IFUNC_IMPL_ADD (array, i, memmove, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memmove_avx512_unaligned_erms) - IFUNC_IMPL_ADD (array, i, memmove, HAS_CPU_FEATURE (SSSE3), - __memmove_ssse3_back) - IFUNC_IMPL_ADD (array, i, memmove, HAS_CPU_FEATURE (SSSE3), - __memmove_ssse3) - IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_erms) - IFUNC_IMPL_ADD (array, i, memmove, 1, - __memmove_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, memmove, 1, - __memmove_sse2_unaligned_erms)) - - /* Support sysdeps/x86_64/multiarch/memset_chk.S. */ - IFUNC_IMPL (i, name, __memset_chk, - IFUNC_IMPL_ADD (array, i, __memset_chk, 1, - __memset_chk_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, __memset_chk, 1, - __memset_chk_sse2_unaligned_erms) - IFUNC_IMPL_ADD (array, i, __memset_chk, - HAS_ARCH_FEATURE (AVX2_Usable), - __memset_chk_avx2_unaligned) - IFUNC_IMPL_ADD (array, i, __memset_chk, - HAS_ARCH_FEATURE (AVX2_Usable), - __memset_chk_avx2_unaligned_erms) - IFUNC_IMPL_ADD (array, i, __memset_chk, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memset_chk_avx512_unaligned_erms) - IFUNC_IMPL_ADD (array, i, __memset_chk, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memset_chk_avx512_unaligned) - IFUNC_IMPL_ADD (array, i, __memset_chk, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memset_chk_avx512_no_vzeroupper) - ) - - /* Support sysdeps/x86_64/multiarch/memset.S. */ - IFUNC_IMPL (i, name, memset, - IFUNC_IMPL_ADD (array, i, memset, 1, - __memset_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, memset, 1, - __memset_sse2_unaligned_erms) - IFUNC_IMPL_ADD (array, i, memset, 1, __memset_erms) - IFUNC_IMPL_ADD (array, i, memset, - HAS_ARCH_FEATURE (AVX2_Usable), - __memset_avx2_unaligned) - IFUNC_IMPL_ADD (array, i, memset, - HAS_ARCH_FEATURE (AVX2_Usable), - __memset_avx2_unaligned_erms) - IFUNC_IMPL_ADD (array, i, memset, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memset_avx512_unaligned_erms) - IFUNC_IMPL_ADD (array, i, memset, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memset_avx512_unaligned) - IFUNC_IMPL_ADD (array, i, memset, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memset_avx512_no_vzeroupper) - ) - - /* Support sysdeps/x86_64/multiarch/stpncpy.S. */ - IFUNC_IMPL (i, name, stpncpy, - IFUNC_IMPL_ADD (array, i, stpncpy, HAS_CPU_FEATURE (SSSE3), - __stpncpy_ssse3) - IFUNC_IMPL_ADD (array, i, stpncpy, 1, - __stpncpy_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, stpncpy, 1, __stpncpy_sse2)) - - /* Support sysdeps/x86_64/multiarch/stpcpy.S. */ - IFUNC_IMPL (i, name, stpcpy, - IFUNC_IMPL_ADD (array, i, stpcpy, HAS_CPU_FEATURE (SSSE3), - __stpcpy_ssse3) - IFUNC_IMPL_ADD (array, i, stpcpy, 1, __stpcpy_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, stpcpy, 1, __stpcpy_sse2)) - - /* Support sysdeps/x86_64/multiarch/strcasecmp_l.S. */ - IFUNC_IMPL (i, name, strcasecmp, - IFUNC_IMPL_ADD (array, i, strcasecmp, - HAS_ARCH_FEATURE (AVX_Usable), - __strcasecmp_avx) - IFUNC_IMPL_ADD (array, i, strcasecmp, - HAS_CPU_FEATURE (SSE4_2), - __strcasecmp_sse42) - IFUNC_IMPL_ADD (array, i, strcasecmp, - HAS_CPU_FEATURE (SSSE3), - __strcasecmp_ssse3) - IFUNC_IMPL_ADD (array, i, strcasecmp, 1, __strcasecmp_sse2)) - - /* Support sysdeps/x86_64/multiarch/strcasecmp_l.S. */ - IFUNC_IMPL (i, name, strcasecmp_l, - IFUNC_IMPL_ADD (array, i, strcasecmp_l, - HAS_ARCH_FEATURE (AVX_Usable), - __strcasecmp_l_avx) - IFUNC_IMPL_ADD (array, i, strcasecmp_l, - HAS_CPU_FEATURE (SSE4_2), - __strcasecmp_l_sse42) - IFUNC_IMPL_ADD (array, i, strcasecmp_l, - HAS_CPU_FEATURE (SSSE3), - __strcasecmp_l_ssse3) - IFUNC_IMPL_ADD (array, i, strcasecmp_l, 1, - __strcasecmp_l_sse2)) - - /* Support sysdeps/x86_64/multiarch/strcat.S. */ - IFUNC_IMPL (i, name, strcat, - IFUNC_IMPL_ADD (array, i, strcat, HAS_CPU_FEATURE (SSSE3), - __strcat_ssse3) - IFUNC_IMPL_ADD (array, i, strcat, 1, __strcat_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, strcat, 1, __strcat_sse2)) - - /* Support sysdeps/x86_64/multiarch/strchr.S. */ - IFUNC_IMPL (i, name, strchr, - IFUNC_IMPL_ADD (array, i, strchr, 1, __strchr_sse2_no_bsf) - IFUNC_IMPL_ADD (array, i, strchr, 1, __strchr_sse2)) - - /* Support sysdeps/x86_64/multiarch/strcmp.S. */ - IFUNC_IMPL (i, name, strcmp, - IFUNC_IMPL_ADD (array, i, strcmp, HAS_CPU_FEATURE (SSE4_2), - __strcmp_sse42) - IFUNC_IMPL_ADD (array, i, strcmp, HAS_CPU_FEATURE (SSSE3), - __strcmp_ssse3) - IFUNC_IMPL_ADD (array, i, strcmp, 1, __strcmp_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, strcmp, 1, __strcmp_sse2)) - - /* Support sysdeps/x86_64/multiarch/strcpy.S. */ - IFUNC_IMPL (i, name, strcpy, - IFUNC_IMPL_ADD (array, i, strcpy, HAS_CPU_FEATURE (SSSE3), - __strcpy_ssse3) - IFUNC_IMPL_ADD (array, i, strcpy, 1, __strcpy_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, strcpy, 1, __strcpy_sse2)) - - /* Support sysdeps/x86_64/multiarch/strcspn.S. */ - IFUNC_IMPL (i, name, strcspn, - IFUNC_IMPL_ADD (array, i, strcspn, HAS_CPU_FEATURE (SSE4_2), - __strcspn_sse42) - IFUNC_IMPL_ADD (array, i, strcspn, 1, __strcspn_sse2)) - - /* Support sysdeps/x86_64/multiarch/strncase_l.S. */ - IFUNC_IMPL (i, name, strncasecmp, - IFUNC_IMPL_ADD (array, i, strncasecmp, - HAS_ARCH_FEATURE (AVX_Usable), - __strncasecmp_avx) - IFUNC_IMPL_ADD (array, i, strncasecmp, - HAS_CPU_FEATURE (SSE4_2), - __strncasecmp_sse42) - IFUNC_IMPL_ADD (array, i, strncasecmp, - HAS_CPU_FEATURE (SSSE3), - __strncasecmp_ssse3) - IFUNC_IMPL_ADD (array, i, strncasecmp, 1, - __strncasecmp_sse2)) - - /* Support sysdeps/x86_64/multiarch/strncase_l.S. */ - IFUNC_IMPL (i, name, strncasecmp_l, - IFUNC_IMPL_ADD (array, i, strncasecmp_l, - HAS_ARCH_FEATURE (AVX_Usable), - __strncasecmp_l_avx) - IFUNC_IMPL_ADD (array, i, strncasecmp_l, - HAS_CPU_FEATURE (SSE4_2), - __strncasecmp_l_sse42) - IFUNC_IMPL_ADD (array, i, strncasecmp_l, - HAS_CPU_FEATURE (SSSE3), - __strncasecmp_l_ssse3) - IFUNC_IMPL_ADD (array, i, strncasecmp_l, 1, - __strncasecmp_l_sse2)) - - /* Support sysdeps/x86_64/multiarch/strncat.S. */ - IFUNC_IMPL (i, name, strncat, - IFUNC_IMPL_ADD (array, i, strncat, HAS_CPU_FEATURE (SSSE3), - __strncat_ssse3) - IFUNC_IMPL_ADD (array, i, strncat, 1, - __strncat_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, strncat, 1, __strncat_sse2)) - - /* Support sysdeps/x86_64/multiarch/strncpy.S. */ - IFUNC_IMPL (i, name, strncpy, - IFUNC_IMPL_ADD (array, i, strncpy, HAS_CPU_FEATURE (SSSE3), - __strncpy_ssse3) - IFUNC_IMPL_ADD (array, i, strncpy, 1, - __strncpy_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, strncpy, 1, __strncpy_sse2)) - - /* Support sysdeps/x86_64/multiarch/strpbrk.S. */ - IFUNC_IMPL (i, name, strpbrk, - IFUNC_IMPL_ADD (array, i, strpbrk, HAS_CPU_FEATURE (SSE4_2), - __strpbrk_sse42) - IFUNC_IMPL_ADD (array, i, strpbrk, 1, __strpbrk_sse2)) - - - /* Support sysdeps/x86_64/multiarch/strspn.S. */ - IFUNC_IMPL (i, name, strspn, - IFUNC_IMPL_ADD (array, i, strspn, HAS_CPU_FEATURE (SSE4_2), - __strspn_sse42) - IFUNC_IMPL_ADD (array, i, strspn, 1, __strspn_sse2)) - - /* Support sysdeps/x86_64/multiarch/strstr.c. */ - IFUNC_IMPL (i, name, strstr, - IFUNC_IMPL_ADD (array, i, strstr, 1, __strstr_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, strstr, 1, __strstr_sse2)) - - /* Support sysdeps/x86_64/multiarch/wcscpy.S. */ - IFUNC_IMPL (i, name, wcscpy, - IFUNC_IMPL_ADD (array, i, wcscpy, HAS_CPU_FEATURE (SSSE3), - __wcscpy_ssse3) - IFUNC_IMPL_ADD (array, i, wcscpy, 1, __wcscpy_sse2)) - - /* Support sysdeps/x86_64/multiarch/wcsnlen.c. */ - IFUNC_IMPL (i, name, wcsnlen, - IFUNC_IMPL_ADD (array, i, wcsnlen, - HAS_CPU_FEATURE (SSE4_1), - __wcsnlen_sse4_1) - IFUNC_IMPL_ADD (array, i, wcsnlen, 1, __wcsnlen_sse2)) - - /* Support sysdeps/x86_64/multiarch/wmemcmp.S. */ - IFUNC_IMPL (i, name, wmemcmp, - IFUNC_IMPL_ADD (array, i, wmemcmp, - (HAS_ARCH_FEATURE (AVX2_Usable) - && HAS_CPU_FEATURE (MOVBE)), - __wmemcmp_avx2_movbe) - IFUNC_IMPL_ADD (array, i, wmemcmp, HAS_CPU_FEATURE (SSE4_1), - __wmemcmp_sse4_1) - IFUNC_IMPL_ADD (array, i, wmemcmp, HAS_CPU_FEATURE (SSSE3), - __wmemcmp_ssse3) - IFUNC_IMPL_ADD (array, i, wmemcmp, 1, __wmemcmp_sse2)) - - /* Support sysdeps/x86_64/multiarch/wmemset.c. */ - IFUNC_IMPL (i, name, wmemset, - IFUNC_IMPL_ADD (array, i, wmemset, 1, - __wmemset_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, wmemset, - HAS_ARCH_FEATURE (AVX2_Usable), - __wmemset_avx2_unaligned) - IFUNC_IMPL_ADD (array, i, wmemset, - HAS_ARCH_FEATURE (AVX512F_Usable), - __wmemset_avx512_unaligned)) - -#ifdef SHARED - /* Support sysdeps/x86_64/multiarch/memcpy_chk.S. */ - IFUNC_IMPL (i, name, __memcpy_chk, - IFUNC_IMPL_ADD (array, i, __memcpy_chk, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memcpy_chk_avx512_no_vzeroupper) - IFUNC_IMPL_ADD (array, i, __memcpy_chk, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memcpy_chk_avx512_unaligned) - IFUNC_IMPL_ADD (array, i, __memcpy_chk, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memcpy_chk_avx512_unaligned_erms) - IFUNC_IMPL_ADD (array, i, __memcpy_chk, - HAS_ARCH_FEATURE (AVX_Usable), - __memcpy_chk_avx_unaligned) - IFUNC_IMPL_ADD (array, i, __memcpy_chk, - HAS_ARCH_FEATURE (AVX_Usable), - __memcpy_chk_avx_unaligned_erms) - IFUNC_IMPL_ADD (array, i, __memcpy_chk, - HAS_CPU_FEATURE (SSSE3), - __memcpy_chk_ssse3_back) - IFUNC_IMPL_ADD (array, i, __memcpy_chk, - HAS_CPU_FEATURE (SSSE3), - __memcpy_chk_ssse3) - IFUNC_IMPL_ADD (array, i, __memcpy_chk, 1, - __memcpy_chk_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, __memcpy_chk, 1, - __memcpy_chk_sse2_unaligned_erms)) - - /* Support sysdeps/x86_64/multiarch/memcpy.S. */ - IFUNC_IMPL (i, name, memcpy, - IFUNC_IMPL_ADD (array, i, memcpy, - HAS_ARCH_FEATURE (AVX_Usable), - __memcpy_avx_unaligned) - IFUNC_IMPL_ADD (array, i, memcpy, - HAS_ARCH_FEATURE (AVX_Usable), - __memcpy_avx_unaligned_erms) - IFUNC_IMPL_ADD (array, i, memcpy, HAS_CPU_FEATURE (SSSE3), - __memcpy_ssse3_back) - IFUNC_IMPL_ADD (array, i, memcpy, HAS_CPU_FEATURE (SSSE3), - __memcpy_ssse3) - IFUNC_IMPL_ADD (array, i, memcpy, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memcpy_avx512_no_vzeroupper) - IFUNC_IMPL_ADD (array, i, memcpy, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memcpy_avx512_unaligned) - IFUNC_IMPL_ADD (array, i, memcpy, - HAS_ARCH_FEATURE (AVX512F_Usable), - __memcpy_avx512_unaligned_erms) - IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, memcpy, 1, - __memcpy_sse2_unaligned_erms) - IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_erms)) - - /* Support sysdeps/x86_64/multiarch/mempcpy_chk.S. */ - IFUNC_IMPL (i, name, __mempcpy_chk, - IFUNC_IMPL_ADD (array, i, __mempcpy_chk, - HAS_ARCH_FEATURE (AVX512F_Usable), - __mempcpy_chk_avx512_no_vzeroupper) - IFUNC_IMPL_ADD (array, i, __mempcpy_chk, - HAS_ARCH_FEATURE (AVX512F_Usable), - __mempcpy_chk_avx512_unaligned) - IFUNC_IMPL_ADD (array, i, __mempcpy_chk, - HAS_ARCH_FEATURE (AVX512F_Usable), - __mempcpy_chk_avx512_unaligned_erms) - IFUNC_IMPL_ADD (array, i, __mempcpy_chk, - HAS_ARCH_FEATURE (AVX_Usable), - __mempcpy_chk_avx_unaligned) - IFUNC_IMPL_ADD (array, i, __mempcpy_chk, - HAS_ARCH_FEATURE (AVX_Usable), - __mempcpy_chk_avx_unaligned_erms) - IFUNC_IMPL_ADD (array, i, __mempcpy_chk, - HAS_CPU_FEATURE (SSSE3), - __mempcpy_chk_ssse3_back) - IFUNC_IMPL_ADD (array, i, __mempcpy_chk, - HAS_CPU_FEATURE (SSSE3), - __mempcpy_chk_ssse3) - IFUNC_IMPL_ADD (array, i, __mempcpy_chk, 1, - __mempcpy_chk_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, __mempcpy_chk, 1, - __mempcpy_chk_sse2_unaligned_erms)) - - /* Support sysdeps/x86_64/multiarch/mempcpy.S. */ - IFUNC_IMPL (i, name, mempcpy, - IFUNC_IMPL_ADD (array, i, mempcpy, - HAS_ARCH_FEATURE (AVX512F_Usable), - __mempcpy_avx512_no_vzeroupper) - IFUNC_IMPL_ADD (array, i, mempcpy, - HAS_ARCH_FEATURE (AVX512F_Usable), - __mempcpy_avx512_unaligned) - IFUNC_IMPL_ADD (array, i, mempcpy, - HAS_ARCH_FEATURE (AVX512F_Usable), - __mempcpy_avx512_unaligned_erms) - IFUNC_IMPL_ADD (array, i, mempcpy, - HAS_ARCH_FEATURE (AVX_Usable), - __mempcpy_avx_unaligned) - IFUNC_IMPL_ADD (array, i, mempcpy, - HAS_ARCH_FEATURE (AVX_Usable), - __mempcpy_avx_unaligned_erms) - IFUNC_IMPL_ADD (array, i, mempcpy, HAS_CPU_FEATURE (SSSE3), - __mempcpy_ssse3_back) - IFUNC_IMPL_ADD (array, i, mempcpy, HAS_CPU_FEATURE (SSSE3), - __mempcpy_ssse3) - IFUNC_IMPL_ADD (array, i, mempcpy, 1, - __mempcpy_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, mempcpy, 1, - __mempcpy_sse2_unaligned_erms) - IFUNC_IMPL_ADD (array, i, mempcpy, 1, __mempcpy_erms)) - - /* Support sysdeps/x86_64/multiarch/strncmp.S. */ - IFUNC_IMPL (i, name, strncmp, - IFUNC_IMPL_ADD (array, i, strncmp, HAS_CPU_FEATURE (SSE4_2), - __strncmp_sse42) - IFUNC_IMPL_ADD (array, i, strncmp, HAS_CPU_FEATURE (SSSE3), - __strncmp_ssse3) - IFUNC_IMPL_ADD (array, i, strncmp, 1, __strncmp_sse2)) - - /* Support sysdeps/x86_64/multiarch/wmemset_chk.c. */ - IFUNC_IMPL (i, name, __wmemset_chk, - IFUNC_IMPL_ADD (array, i, __wmemset_chk, 1, - __wmemset_chk_sse2_unaligned) - IFUNC_IMPL_ADD (array, i, __wmemset_chk, - HAS_ARCH_FEATURE (AVX2_Usable), - __wmemset_chk_avx2_unaligned) - IFUNC_IMPL_ADD (array, i, __wmemset_chk, - HAS_ARCH_FEATURE (AVX512F_Usable), - __wmemset_chk_avx512_unaligned)) -#endif - - return i; -} diff --git a/sysdeps/x86_64/multiarch/ifunc-wmemset.h b/sysdeps/x86_64/multiarch/ifunc-wmemset.h deleted file mode 100644 index d761985a47..0000000000 --- a/sysdeps/x86_64/multiarch/ifunc-wmemset.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Common definition for wmemset/wmemset_chk ifunc selections. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2_unaligned) attribute_hidden; -extern __typeof (REDIRECT_NAME) OPTIMIZE (avx2_unaligned) attribute_hidden; -extern __typeof (REDIRECT_NAME) OPTIMIZE (avx512_unaligned) attribute_hidden; - -static inline void * -IFUNC_SELECTOR (void) -{ - const struct cpu_features* cpu_features = __get_cpu_features (); - - if (!CPU_FEATURES_ARCH_P (cpu_features, Prefer_No_VZEROUPPER) - && CPU_FEATURES_ARCH_P (cpu_features, AVX2_Usable) - && CPU_FEATURES_ARCH_P (cpu_features, AVX_Fast_Unaligned_Load)) - { - if (CPU_FEATURES_ARCH_P (cpu_features, AVX512F_Usable) - && !CPU_FEATURES_ARCH_P (cpu_features, Prefer_No_AVX512)) - return OPTIMIZE (avx512_unaligned); - else - return OPTIMIZE (avx2_unaligned); - } - - return OPTIMIZE (sse2_unaligned); -} diff --git a/sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S b/sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S deleted file mode 100644 index 47630dd97b..0000000000 --- a/sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S +++ /dev/null @@ -1,425 +0,0 @@ -/* memcmp/wmemcmp optimized with AVX2. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -/* memcmp/wmemcmp is implemented as: - 1. For size from 2 to 7 bytes, load as big endian with movbe and bswap - to avoid branches. - 2. Use overlapping compare to avoid branch. - 3. Use vector compare when size >= 4 bytes for memcmp or size >= 8 - bytes for wmemcmp. - 4. If size is 8 * VEC_SIZE or less, unroll the loop. - 5. Compare 4 * VEC_SIZE at a time with the aligned first memory - area. - 6. Use 2 vector compares when size is 2 * VEC_SIZE or less. - 7. Use 4 vector compares when size is 4 * VEC_SIZE or less. - 8. Use 8 vector compares when size is 8 * VEC_SIZE or less. */ - -# include - -# ifndef MEMCMP -# define MEMCMP __memcmp_avx2_movbe -# endif - -# ifdef USE_AS_WMEMCMP -# define VPCMPEQ vpcmpeqd -# else -# define VPCMPEQ vpcmpeqb -# endif - -# ifndef VZEROUPPER -# define VZEROUPPER vzeroupper -# endif - -# define VEC_SIZE 32 -# define VEC_MASK ((1 << VEC_SIZE) - 1) - -/* Warning! - wmemcmp has to use SIGNED comparison for elements. - memcmp has to use UNSIGNED comparison for elemnts. -*/ - - .section .text.avx,"ax",@progbits -ENTRY (MEMCMP) -# ifdef USE_AS_WMEMCMP - shl $2, %rdx -# endif - cmpq $VEC_SIZE, %rdx - jb L(less_vec) - cmpq $(VEC_SIZE * 2), %rdx - ja L(more_2x_vec) - -L(last_2x_vec): - /* From VEC to 2 * VEC. No branch when size == VEC_SIZE. */ - vmovdqu (%rsi), %ymm2 - VPCMPEQ (%rdi), %ymm2, %ymm2 - vpmovmskb %ymm2, %eax - subl $VEC_MASK, %eax - jnz L(first_vec) - -L(last_vec): - /* Use overlapping loads to avoid branches. */ - leaq -VEC_SIZE(%rdi, %rdx), %rdi - leaq -VEC_SIZE(%rsi, %rdx), %rsi - vmovdqu (%rsi), %ymm2 - VPCMPEQ (%rdi), %ymm2, %ymm2 - vpmovmskb %ymm2, %eax - subl $VEC_MASK, %eax - jnz L(first_vec) - VZEROUPPER - ret - - .p2align 4 -L(first_vec): - /* A byte or int32 is different within 16 or 32 bytes. */ - tzcntl %eax, %ecx -# ifdef USE_AS_WMEMCMP - xorl %eax, %eax - movl (%rdi, %rcx), %edx - cmpl (%rsi, %rcx), %edx -L(wmemcmp_return): - setl %al - negl %eax - orl $1, %eax -# else - movzbl (%rdi, %rcx), %eax - movzbl (%rsi, %rcx), %edx - sub %edx, %eax -# endif - VZEROUPPER - ret - -# ifdef USE_AS_WMEMCMP - .p2align 4 -L(4): - xorl %eax, %eax - movl (%rdi), %edx - cmpl (%rsi), %edx - jne L(wmemcmp_return) - ret -# else - .p2align 4 -L(between_4_7): - /* Load as big endian with overlapping movbe to avoid branches. */ - movbe (%rdi), %eax - movbe (%rsi), %ecx - shlq $32, %rax - shlq $32, %rcx - movbe -4(%rdi, %rdx), %edi - movbe -4(%rsi, %rdx), %esi - orq %rdi, %rax - orq %rsi, %rcx - subq %rcx, %rax - je L(exit) - sbbl %eax, %eax - orl $1, %eax - ret - - .p2align 4 -L(exit): - ret - - .p2align 4 -L(between_2_3): - /* Load as big endian with overlapping loads and bswap to avoid - branches. */ - movzwl -2(%rdi, %rdx), %eax - movzwl -2(%rsi, %rdx), %ecx - shll $16, %eax - shll $16, %ecx - movzwl (%rdi), %edi - movzwl (%rsi), %esi - orl %edi, %eax - orl %esi, %ecx - bswap %eax - bswap %ecx - subl %ecx, %eax - ret - - .p2align 4 -L(1): - movzbl (%rdi), %eax - movzbl (%rsi), %ecx - subl %ecx, %eax - ret -# endif - - .p2align 4 -L(zero): - xorl %eax, %eax - ret - - .p2align 4 -L(less_vec): -# ifdef USE_AS_WMEMCMP - /* It can only be 0, 4, 8, 12, 16, 20, 24, 28 bytes. */ - cmpb $4, %dl - je L(4) - jb L(zero) -# else - cmpb $1, %dl - je L(1) - jb L(zero) - cmpb $4, %dl - jb L(between_2_3) - cmpb $8, %dl - jb L(between_4_7) -# endif - cmpb $16, %dl - jae L(between_16_31) - /* It is between 8 and 15 bytes. */ - vmovq (%rdi), %xmm1 - vmovq (%rsi), %xmm2 - VPCMPEQ %xmm1, %xmm2, %xmm2 - vpmovmskb %xmm2, %eax - subl $0xffff, %eax - jnz L(first_vec) - /* Use overlapping loads to avoid branches. */ - leaq -8(%rdi, %rdx), %rdi - leaq -8(%rsi, %rdx), %rsi - vmovq (%rdi), %xmm1 - vmovq (%rsi), %xmm2 - VPCMPEQ %xmm1, %xmm2, %xmm2 - vpmovmskb %xmm2, %eax - subl $0xffff, %eax - jnz L(first_vec) - ret - - .p2align 4 -L(between_16_31): - /* From 16 to 31 bytes. No branch when size == 16. */ - vmovdqu (%rsi), %xmm2 - VPCMPEQ (%rdi), %xmm2, %xmm2 - vpmovmskb %xmm2, %eax - subl $0xffff, %eax - jnz L(first_vec) - - /* Use overlapping loads to avoid branches. */ - leaq -16(%rdi, %rdx), %rdi - leaq -16(%rsi, %rdx), %rsi - vmovdqu (%rsi), %xmm2 - VPCMPEQ (%rdi), %xmm2, %xmm2 - vpmovmskb %xmm2, %eax - subl $0xffff, %eax - jnz L(first_vec) - ret - - .p2align 4 -L(more_2x_vec): - /* More than 2 * VEC. */ - cmpq $(VEC_SIZE * 8), %rdx - ja L(more_8x_vec) - cmpq $(VEC_SIZE * 4), %rdx - jb L(last_4x_vec) - - /* From 4 * VEC to 8 * VEC, inclusively. */ - vmovdqu (%rsi), %ymm1 - VPCMPEQ (%rdi), %ymm1, %ymm1 - - vmovdqu VEC_SIZE(%rsi), %ymm2 - VPCMPEQ VEC_SIZE(%rdi), %ymm2, %ymm2 - - vmovdqu (VEC_SIZE * 2)(%rsi), %ymm3 - VPCMPEQ (VEC_SIZE * 2)(%rdi), %ymm3, %ymm3 - - vmovdqu (VEC_SIZE * 3)(%rsi), %ymm4 - VPCMPEQ (VEC_SIZE * 3)(%rdi), %ymm4, %ymm4 - - vpand %ymm1, %ymm2, %ymm5 - vpand %ymm3, %ymm4, %ymm6 - vpand %ymm5, %ymm6, %ymm5 - - vpmovmskb %ymm5, %eax - subl $VEC_MASK, %eax - jnz L(4x_vec_end) - - leaq -(4 * VEC_SIZE)(%rdi, %rdx), %rdi - leaq -(4 * VEC_SIZE)(%rsi, %rdx), %rsi - vmovdqu (%rsi), %ymm1 - VPCMPEQ (%rdi), %ymm1, %ymm1 - - vmovdqu VEC_SIZE(%rsi), %ymm2 - VPCMPEQ VEC_SIZE(%rdi), %ymm2, %ymm2 - vpand %ymm2, %ymm1, %ymm5 - - vmovdqu (VEC_SIZE * 2)(%rsi), %ymm3 - VPCMPEQ (VEC_SIZE * 2)(%rdi), %ymm3, %ymm3 - vpand %ymm3, %ymm5, %ymm5 - - vmovdqu (VEC_SIZE * 3)(%rsi), %ymm4 - VPCMPEQ (VEC_SIZE * 3)(%rdi), %ymm4, %ymm4 - vpand %ymm4, %ymm5, %ymm5 - - vpmovmskb %ymm5, %eax - subl $VEC_MASK, %eax - jnz L(4x_vec_end) - VZEROUPPER - ret - - .p2align 4 -L(more_8x_vec): - /* More than 8 * VEC. Check the first VEC. */ - vmovdqu (%rsi), %ymm2 - VPCMPEQ (%rdi), %ymm2, %ymm2 - vpmovmskb %ymm2, %eax - subl $VEC_MASK, %eax - jnz L(first_vec) - - /* Align the first memory area for aligned loads in the loop. - Compute how much the first memory area is misaligned. */ - movq %rdi, %rcx - andl $(VEC_SIZE - 1), %ecx - /* Get the negative of offset for alignment. */ - subq $VEC_SIZE, %rcx - /* Adjust the second memory area. */ - subq %rcx, %rsi - /* Adjust the first memory area which should be aligned now. */ - subq %rcx, %rdi - /* Adjust length. */ - addq %rcx, %rdx - -L(loop_4x_vec): - /* Compare 4 * VEC at a time forward. */ - vmovdqu (%rsi), %ymm1 - VPCMPEQ (%rdi), %ymm1, %ymm1 - - vmovdqu VEC_SIZE(%rsi), %ymm2 - VPCMPEQ VEC_SIZE(%rdi), %ymm2, %ymm2 - vpand %ymm2, %ymm1, %ymm5 - - vmovdqu (VEC_SIZE * 2)(%rsi), %ymm3 - VPCMPEQ (VEC_SIZE * 2)(%rdi), %ymm3, %ymm3 - vpand %ymm3, %ymm5, %ymm5 - - vmovdqu (VEC_SIZE * 3)(%rsi), %ymm4 - VPCMPEQ (VEC_SIZE * 3)(%rdi), %ymm4, %ymm4 - vpand %ymm4, %ymm5, %ymm5 - - vpmovmskb %ymm5, %eax - subl $VEC_MASK, %eax - jnz L(4x_vec_end) - - addq $(VEC_SIZE * 4), %rdi - addq $(VEC_SIZE * 4), %rsi - - subq $(VEC_SIZE * 4), %rdx - cmpq $(VEC_SIZE * 4), %rdx - jae L(loop_4x_vec) - - /* Less than 4 * VEC. */ - cmpq $VEC_SIZE, %rdx - jbe L(last_vec) - cmpq $(VEC_SIZE * 2), %rdx - jbe L(last_2x_vec) - -L(last_4x_vec): - /* From 2 * VEC to 4 * VEC. */ - vmovdqu (%rsi), %ymm2 - VPCMPEQ (%rdi), %ymm2, %ymm2 - vpmovmskb %ymm2, %eax - subl $VEC_MASK, %eax - jnz L(first_vec) - - addq $VEC_SIZE, %rdi - addq $VEC_SIZE, %rsi - vmovdqu (%rsi), %ymm2 - VPCMPEQ (%rdi), %ymm2, %ymm2 - vpmovmskb %ymm2, %eax - subl $VEC_MASK, %eax - jnz L(first_vec) - - /* Use overlapping loads to avoid branches. */ - leaq -(3 * VEC_SIZE)(%rdi, %rdx), %rdi - leaq -(3 * VEC_SIZE)(%rsi, %rdx), %rsi - vmovdqu (%rsi), %ymm2 - VPCMPEQ (%rdi), %ymm2, %ymm2 - vpmovmskb %ymm2, %eax - subl $VEC_MASK, %eax - jnz L(first_vec) - - addq $VEC_SIZE, %rdi - addq $VEC_SIZE, %rsi - vmovdqu (%rsi), %ymm2 - VPCMPEQ (%rdi), %ymm2, %ymm2 - vpmovmskb %ymm2, %eax - subl $VEC_MASK, %eax - jnz L(first_vec) - VZEROUPPER - ret - - .p2align 4 -L(4x_vec_end): - vpmovmskb %ymm1, %eax - subl $VEC_MASK, %eax - jnz L(first_vec) - vpmovmskb %ymm2, %eax - subl $VEC_MASK, %eax - jnz L(first_vec_x1) - vpmovmskb %ymm3, %eax - subl $VEC_MASK, %eax - jnz L(first_vec_x2) - vpmovmskb %ymm4, %eax - subl $VEC_MASK, %eax - tzcntl %eax, %ecx -# ifdef USE_AS_WMEMCMP - xorl %eax, %eax - movl (VEC_SIZE * 3)(%rdi, %rcx), %edx - cmpl (VEC_SIZE * 3)(%rsi, %rcx), %edx - jmp L(wmemcmp_return) -# else - movzbl (VEC_SIZE * 3)(%rdi, %rcx), %eax - movzbl (VEC_SIZE * 3)(%rsi, %rcx), %edx - sub %edx, %eax -# endif - VZEROUPPER - ret - - .p2align 4 -L(first_vec_x1): - tzcntl %eax, %ecx -# ifdef USE_AS_WMEMCMP - xorl %eax, %eax - movl VEC_SIZE(%rdi, %rcx), %edx - cmpl VEC_SIZE(%rsi, %rcx), %edx - jmp L(wmemcmp_return) -# else - movzbl VEC_SIZE(%rdi, %rcx), %eax - movzbl VEC_SIZE(%rsi, %rcx), %edx - sub %edx, %eax -# endif - VZEROUPPER - ret - - .p2align 4 -L(first_vec_x2): - tzcntl %eax, %ecx -# ifdef USE_AS_WMEMCMP - xorl %eax, %eax - movl (VEC_SIZE * 2)(%rdi, %rcx), %edx - cmpl (VEC_SIZE * 2)(%rsi, %rcx), %edx - jmp L(wmemcmp_return) -# else - movzbl (VEC_SIZE * 2)(%rdi, %rcx), %eax - movzbl (VEC_SIZE * 2)(%rsi, %rcx), %edx - sub %edx, %eax -# endif - VZEROUPPER - ret -END (MEMCMP) -#endif diff --git a/sysdeps/x86_64/multiarch/memcmp-sse4.S b/sysdeps/x86_64/multiarch/memcmp-sse4.S deleted file mode 100644 index 771639f662..0000000000 --- a/sysdeps/x86_64/multiarch/memcmp-sse4.S +++ /dev/null @@ -1,1776 +0,0 @@ -/* memcmp with SSE4.1, wmemcmp with SSE4.1 - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include - -# ifndef MEMCMP -# define MEMCMP __memcmp_sse4_1 -# endif - -# define JMPTBL(I, B) (I - B) - -# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ - lea TABLE(%rip), %r11; \ - movslq (%r11, INDEX, SCALE), %rcx; \ - add %r11, %rcx; \ - jmp *%rcx; \ - ud2 - -/* Warning! - wmemcmp has to use SIGNED comparison for elements. - memcmp has to use UNSIGNED comparison for elemnts. -*/ - - .section .text.sse4.1,"ax",@progbits -ENTRY (MEMCMP) -# ifdef USE_AS_WMEMCMP - shl $2, %rdx -# endif - pxor %xmm0, %xmm0 - cmp $79, %rdx - ja L(79bytesormore) -# ifndef USE_AS_WMEMCMP - cmp $1, %rdx - je L(firstbyte) -# endif - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4) - -# ifndef USE_AS_WMEMCMP - .p2align 4 -L(firstbyte): - movzbl (%rdi), %eax - movzbl (%rsi), %ecx - sub %ecx, %eax - ret -# endif - - .p2align 4 -L(79bytesormore): - movdqu (%rsi), %xmm1 - movdqu (%rdi), %xmm2 - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(16bytesin256) - mov %rsi, %rcx - and $-16, %rsi - add $16, %rsi - sub %rsi, %rcx - - sub %rcx, %rdi - add %rcx, %rdx - test $0xf, %rdi - jz L(2aligned) - - cmp $128, %rdx - ja L(128bytesormore) -L(less128bytes): - sub $64, %rdx - - movdqu (%rdi), %xmm2 - pxor (%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(16bytesin256) - - movdqu 16(%rdi), %xmm2 - pxor 16(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(32bytesin256) - - movdqu 32(%rdi), %xmm2 - pxor 32(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(48bytesin256) - - movdqu 48(%rdi), %xmm2 - pxor 48(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(64bytesin256) - cmp $32, %rdx - jb L(less32bytesin64) - - movdqu 64(%rdi), %xmm2 - pxor 64(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(80bytesin256) - - movdqu 80(%rdi), %xmm2 - pxor 80(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(96bytesin256) - sub $32, %rdx - add $32, %rdi - add $32, %rsi -L(less32bytesin64): - add $64, %rdi - add $64, %rsi - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4) - -L(128bytesormore): - cmp $512, %rdx - ja L(512bytesormore) - cmp $256, %rdx - ja L(less512bytes) -L(less256bytes): - sub $128, %rdx - - movdqu (%rdi), %xmm2 - pxor (%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(16bytesin256) - - movdqu 16(%rdi), %xmm2 - pxor 16(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(32bytesin256) - - movdqu 32(%rdi), %xmm2 - pxor 32(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(48bytesin256) - - movdqu 48(%rdi), %xmm2 - pxor 48(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(64bytesin256) - - movdqu 64(%rdi), %xmm2 - pxor 64(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(80bytesin256) - - movdqu 80(%rdi), %xmm2 - pxor 80(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(96bytesin256) - - movdqu 96(%rdi), %xmm2 - pxor 96(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(112bytesin256) - - movdqu 112(%rdi), %xmm2 - pxor 112(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(128bytesin256) - - add $128, %rsi - add $128, %rdi - - cmp $64, %rdx - jae L(less128bytes) - - cmp $32, %rdx - jb L(less32bytesin128) - - movdqu (%rdi), %xmm2 - pxor (%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(16bytesin256) - - movdqu 16(%rdi), %xmm2 - pxor 16(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(32bytesin256) - sub $32, %rdx - add $32, %rdi - add $32, %rsi -L(less32bytesin128): - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4) - -L(less512bytes): - sub $256, %rdx - movdqu (%rdi), %xmm2 - pxor (%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(16bytesin256) - - movdqu 16(%rdi), %xmm2 - pxor 16(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(32bytesin256) - - movdqu 32(%rdi), %xmm2 - pxor 32(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(48bytesin256) - - movdqu 48(%rdi), %xmm2 - pxor 48(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(64bytesin256) - - movdqu 64(%rdi), %xmm2 - pxor 64(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(80bytesin256) - - movdqu 80(%rdi), %xmm2 - pxor 80(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(96bytesin256) - - movdqu 96(%rdi), %xmm2 - pxor 96(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(112bytesin256) - - movdqu 112(%rdi), %xmm2 - pxor 112(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(128bytesin256) - - movdqu 128(%rdi), %xmm2 - pxor 128(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(144bytesin256) - - movdqu 144(%rdi), %xmm2 - pxor 144(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(160bytesin256) - - movdqu 160(%rdi), %xmm2 - pxor 160(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(176bytesin256) - - movdqu 176(%rdi), %xmm2 - pxor 176(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(192bytesin256) - - movdqu 192(%rdi), %xmm2 - pxor 192(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(208bytesin256) - - movdqu 208(%rdi), %xmm2 - pxor 208(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(224bytesin256) - - movdqu 224(%rdi), %xmm2 - pxor 224(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(240bytesin256) - - movdqu 240(%rdi), %xmm2 - pxor 240(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(256bytesin256) - - add $256, %rsi - add $256, %rdi - - cmp $128, %rdx - jae L(less256bytes) - - cmp $64, %rdx - jae L(less128bytes) - - cmp $32, %rdx - jb L(less32bytesin256) - - movdqu (%rdi), %xmm2 - pxor (%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(16bytesin256) - - movdqu 16(%rdi), %xmm2 - pxor 16(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(32bytesin256) - sub $32, %rdx - add $32, %rdi - add $32, %rsi -L(less32bytesin256): - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4) - - .p2align 4 -L(512bytesormore): -# ifdef DATA_CACHE_SIZE_HALF - mov $DATA_CACHE_SIZE_HALF, %R8_LP -# else - mov __x86_data_cache_size_half(%rip), %R8_LP -# endif - mov %r8, %r9 - shr $1, %r8 - add %r9, %r8 - cmp %r8, %rdx - ja L(L2_L3_cache_unaglined) - sub $64, %rdx - .p2align 4 -L(64bytesormore_loop): - movdqu (%rdi), %xmm2 - pxor (%rsi), %xmm2 - movdqa %xmm2, %xmm1 - - movdqu 16(%rdi), %xmm3 - pxor 16(%rsi), %xmm3 - por %xmm3, %xmm1 - - movdqu 32(%rdi), %xmm4 - pxor 32(%rsi), %xmm4 - por %xmm4, %xmm1 - - movdqu 48(%rdi), %xmm5 - pxor 48(%rsi), %xmm5 - por %xmm5, %xmm1 - - ptest %xmm1, %xmm0 - jnc L(64bytesormore_loop_end) - add $64, %rsi - add $64, %rdi - sub $64, %rdx - jae L(64bytesormore_loop) - - add $64, %rdx - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4) - -L(L2_L3_cache_unaglined): - sub $64, %rdx - .p2align 4 -L(L2_L3_unaligned_128bytes_loop): - prefetchnta 0x1c0(%rdi) - prefetchnta 0x1c0(%rsi) - movdqu (%rdi), %xmm2 - pxor (%rsi), %xmm2 - movdqa %xmm2, %xmm1 - - movdqu 16(%rdi), %xmm3 - pxor 16(%rsi), %xmm3 - por %xmm3, %xmm1 - - movdqu 32(%rdi), %xmm4 - pxor 32(%rsi), %xmm4 - por %xmm4, %xmm1 - - movdqu 48(%rdi), %xmm5 - pxor 48(%rsi), %xmm5 - por %xmm5, %xmm1 - - ptest %xmm1, %xmm0 - jnc L(64bytesormore_loop_end) - add $64, %rsi - add $64, %rdi - sub $64, %rdx - jae L(L2_L3_unaligned_128bytes_loop) - - add $64, %rdx - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4) - -/* - * This case is for machines which are sensitive for unaligned instructions. - */ - .p2align 4 -L(2aligned): - cmp $128, %rdx - ja L(128bytesormorein2aligned) -L(less128bytesin2aligned): - sub $64, %rdx - - movdqa (%rdi), %xmm2 - pxor (%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(16bytesin256) - - movdqa 16(%rdi), %xmm2 - pxor 16(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(32bytesin256) - - movdqa 32(%rdi), %xmm2 - pxor 32(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(48bytesin256) - - movdqa 48(%rdi), %xmm2 - pxor 48(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(64bytesin256) - cmp $32, %rdx - jb L(less32bytesin64in2alinged) - - movdqa 64(%rdi), %xmm2 - pxor 64(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(80bytesin256) - - movdqa 80(%rdi), %xmm2 - pxor 80(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(96bytesin256) - sub $32, %rdx - add $32, %rdi - add $32, %rsi -L(less32bytesin64in2alinged): - add $64, %rdi - add $64, %rsi - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4) - - .p2align 4 -L(128bytesormorein2aligned): - cmp $512, %rdx - ja L(512bytesormorein2aligned) - cmp $256, %rdx - ja L(256bytesormorein2aligned) -L(less256bytesin2alinged): - sub $128, %rdx - - movdqa (%rdi), %xmm2 - pxor (%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(16bytesin256) - - movdqa 16(%rdi), %xmm2 - pxor 16(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(32bytesin256) - - movdqa 32(%rdi), %xmm2 - pxor 32(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(48bytesin256) - - movdqa 48(%rdi), %xmm2 - pxor 48(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(64bytesin256) - - movdqa 64(%rdi), %xmm2 - pxor 64(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(80bytesin256) - - movdqa 80(%rdi), %xmm2 - pxor 80(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(96bytesin256) - - movdqa 96(%rdi), %xmm2 - pxor 96(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(112bytesin256) - - movdqa 112(%rdi), %xmm2 - pxor 112(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(128bytesin256) - - add $128, %rsi - add $128, %rdi - - cmp $64, %rdx - jae L(less128bytesin2aligned) - - cmp $32, %rdx - jb L(less32bytesin128in2aligned) - - movdqu (%rdi), %xmm2 - pxor (%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(16bytesin256) - - movdqu 16(%rdi), %xmm2 - pxor 16(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(32bytesin256) - sub $32, %rdx - add $32, %rdi - add $32, %rsi -L(less32bytesin128in2aligned): - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4) - - .p2align 4 -L(256bytesormorein2aligned): - - sub $256, %rdx - movdqa (%rdi), %xmm2 - pxor (%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(16bytesin256) - - movdqa 16(%rdi), %xmm2 - pxor 16(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(32bytesin256) - - movdqa 32(%rdi), %xmm2 - pxor 32(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(48bytesin256) - - movdqa 48(%rdi), %xmm2 - pxor 48(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(64bytesin256) - - movdqa 64(%rdi), %xmm2 - pxor 64(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(80bytesin256) - - movdqa 80(%rdi), %xmm2 - pxor 80(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(96bytesin256) - - movdqa 96(%rdi), %xmm2 - pxor 96(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(112bytesin256) - - movdqa 112(%rdi), %xmm2 - pxor 112(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(128bytesin256) - - movdqa 128(%rdi), %xmm2 - pxor 128(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(144bytesin256) - - movdqa 144(%rdi), %xmm2 - pxor 144(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(160bytesin256) - - movdqa 160(%rdi), %xmm2 - pxor 160(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(176bytesin256) - - movdqa 176(%rdi), %xmm2 - pxor 176(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(192bytesin256) - - movdqa 192(%rdi), %xmm2 - pxor 192(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(208bytesin256) - - movdqa 208(%rdi), %xmm2 - pxor 208(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(224bytesin256) - - movdqa 224(%rdi), %xmm2 - pxor 224(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(240bytesin256) - - movdqa 240(%rdi), %xmm2 - pxor 240(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(256bytesin256) - - add $256, %rsi - add $256, %rdi - - cmp $128, %rdx - jae L(less256bytesin2alinged) - - cmp $64, %rdx - jae L(less128bytesin2aligned) - - cmp $32, %rdx - jb L(less32bytesin256in2alinged) - - movdqa (%rdi), %xmm2 - pxor (%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(16bytesin256) - - movdqa 16(%rdi), %xmm2 - pxor 16(%rsi), %xmm2 - ptest %xmm2, %xmm0 - jnc L(32bytesin256) - sub $32, %rdx - add $32, %rdi - add $32, %rsi -L(less32bytesin256in2alinged): - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4) - - .p2align 4 -L(512bytesormorein2aligned): -# ifdef DATA_CACHE_SIZE_HALF - mov $DATA_CACHE_SIZE_HALF, %R8_LP -# else - mov __x86_data_cache_size_half(%rip), %R8_LP -# endif - mov %r8, %r9 - shr $1, %r8 - add %r9, %r8 - cmp %r8, %rdx - ja L(L2_L3_cache_aglined) - - sub $64, %rdx - .p2align 4 -L(64bytesormore_loopin2aligned): - movdqa (%rdi), %xmm2 - pxor (%rsi), %xmm2 - movdqa %xmm2, %xmm1 - - movdqa 16(%rdi), %xmm3 - pxor 16(%rsi), %xmm3 - por %xmm3, %xmm1 - - movdqa 32(%rdi), %xmm4 - pxor 32(%rsi), %xmm4 - por %xmm4, %xmm1 - - movdqa 48(%rdi), %xmm5 - pxor 48(%rsi), %xmm5 - por %xmm5, %xmm1 - - ptest %xmm1, %xmm0 - jnc L(64bytesormore_loop_end) - add $64, %rsi - add $64, %rdi - sub $64, %rdx - jae L(64bytesormore_loopin2aligned) - - add $64, %rdx - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4) -L(L2_L3_cache_aglined): - sub $64, %rdx - - .p2align 4 -L(L2_L3_aligned_128bytes_loop): - prefetchnta 0x1c0(%rdi) - prefetchnta 0x1c0(%rsi) - movdqa (%rdi), %xmm2 - pxor (%rsi), %xmm2 - movdqa %xmm2, %xmm1 - - movdqa 16(%rdi), %xmm3 - pxor 16(%rsi), %xmm3 - por %xmm3, %xmm1 - - movdqa 32(%rdi), %xmm4 - pxor 32(%rsi), %xmm4 - por %xmm4, %xmm1 - - movdqa 48(%rdi), %xmm5 - pxor 48(%rsi), %xmm5 - por %xmm5, %xmm1 - - ptest %xmm1, %xmm0 - jnc L(64bytesormore_loop_end) - add $64, %rsi - add $64, %rdi - sub $64, %rdx - jae L(L2_L3_aligned_128bytes_loop) - - add $64, %rdx - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY(L(table_64bytes), %rdx, 4) - - - .p2align 4 -L(64bytesormore_loop_end): - add $16, %rdi - add $16, %rsi - ptest %xmm2, %xmm0 - jnc L(16bytes) - - add $16, %rdi - add $16, %rsi - ptest %xmm3, %xmm0 - jnc L(16bytes) - - add $16, %rdi - add $16, %rsi - ptest %xmm4, %xmm0 - jnc L(16bytes) - - add $16, %rdi - add $16, %rsi - jmp L(16bytes) - -L(256bytesin256): - add $256, %rdi - add $256, %rsi - jmp L(16bytes) -L(240bytesin256): - add $240, %rdi - add $240, %rsi - jmp L(16bytes) -L(224bytesin256): - add $224, %rdi - add $224, %rsi - jmp L(16bytes) -L(208bytesin256): - add $208, %rdi - add $208, %rsi - jmp L(16bytes) -L(192bytesin256): - add $192, %rdi - add $192, %rsi - jmp L(16bytes) -L(176bytesin256): - add $176, %rdi - add $176, %rsi - jmp L(16bytes) -L(160bytesin256): - add $160, %rdi - add $160, %rsi - jmp L(16bytes) -L(144bytesin256): - add $144, %rdi - add $144, %rsi - jmp L(16bytes) -L(128bytesin256): - add $128, %rdi - add $128, %rsi - jmp L(16bytes) -L(112bytesin256): - add $112, %rdi - add $112, %rsi - jmp L(16bytes) -L(96bytesin256): - add $96, %rdi - add $96, %rsi - jmp L(16bytes) -L(80bytesin256): - add $80, %rdi - add $80, %rsi - jmp L(16bytes) -L(64bytesin256): - add $64, %rdi - add $64, %rsi - jmp L(16bytes) -L(48bytesin256): - add $16, %rdi - add $16, %rsi -L(32bytesin256): - add $16, %rdi - add $16, %rsi -L(16bytesin256): - add $16, %rdi - add $16, %rsi -L(16bytes): - mov -16(%rdi), %rax - mov -16(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) -L(8bytes): - mov -8(%rdi), %rax - mov -8(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - xor %eax, %eax - ret - - .p2align 4 -L(12bytes): - mov -12(%rdi), %rax - mov -12(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) -L(4bytes): - mov -4(%rsi), %ecx -# ifndef USE_AS_WMEMCMP - mov -4(%rdi), %eax - cmp %eax, %ecx -# else - cmp -4(%rdi), %ecx -# endif - jne L(diffin4bytes) -L(0bytes): - xor %eax, %eax - ret - -# ifndef USE_AS_WMEMCMP -/* unreal case for wmemcmp */ - .p2align 4 -L(65bytes): - movdqu -65(%rdi), %xmm1 - movdqu -65(%rsi), %xmm2 - mov $-65, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(49bytes): - movdqu -49(%rdi), %xmm1 - movdqu -49(%rsi), %xmm2 - mov $-49, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(33bytes): - movdqu -33(%rdi), %xmm1 - movdqu -33(%rsi), %xmm2 - mov $-33, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(17bytes): - mov -17(%rdi), %rax - mov -17(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) -L(9bytes): - mov -9(%rdi), %rax - mov -9(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - movzbl -1(%rdi), %eax - movzbl -1(%rsi), %edx - sub %edx, %eax - ret - - .p2align 4 -L(13bytes): - mov -13(%rdi), %rax - mov -13(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - mov -8(%rdi), %rax - mov -8(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - xor %eax, %eax - ret - - .p2align 4 -L(5bytes): - mov -5(%rdi), %eax - mov -5(%rsi), %ecx - cmp %eax, %ecx - jne L(diffin4bytes) - movzbl -1(%rdi), %eax - movzbl -1(%rsi), %edx - sub %edx, %eax - ret - - .p2align 4 -L(66bytes): - movdqu -66(%rdi), %xmm1 - movdqu -66(%rsi), %xmm2 - mov $-66, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(50bytes): - movdqu -50(%rdi), %xmm1 - movdqu -50(%rsi), %xmm2 - mov $-50, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(34bytes): - movdqu -34(%rdi), %xmm1 - movdqu -34(%rsi), %xmm2 - mov $-34, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(18bytes): - mov -18(%rdi), %rax - mov -18(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) -L(10bytes): - mov -10(%rdi), %rax - mov -10(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - movzwl -2(%rdi), %eax - movzwl -2(%rsi), %ecx - cmp %cl, %al - jne L(end) - and $0xffff, %eax - and $0xffff, %ecx - sub %ecx, %eax - ret - - .p2align 4 -L(14bytes): - mov -14(%rdi), %rax - mov -14(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - mov -8(%rdi), %rax - mov -8(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - xor %eax, %eax - ret - - .p2align 4 -L(6bytes): - mov -6(%rdi), %eax - mov -6(%rsi), %ecx - cmp %eax, %ecx - jne L(diffin4bytes) -L(2bytes): - movzwl -2(%rsi), %ecx - movzwl -2(%rdi), %eax - cmp %cl, %al - jne L(end) - and $0xffff, %eax - and $0xffff, %ecx - sub %ecx, %eax - ret - - .p2align 4 -L(67bytes): - movdqu -67(%rdi), %xmm2 - movdqu -67(%rsi), %xmm1 - mov $-67, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(51bytes): - movdqu -51(%rdi), %xmm2 - movdqu -51(%rsi), %xmm1 - mov $-51, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(35bytes): - movdqu -35(%rsi), %xmm1 - movdqu -35(%rdi), %xmm2 - mov $-35, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(19bytes): - mov -19(%rdi), %rax - mov -19(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) -L(11bytes): - mov -11(%rdi), %rax - mov -11(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - mov -4(%rdi), %eax - mov -4(%rsi), %ecx - cmp %eax, %ecx - jne L(diffin4bytes) - xor %eax, %eax - ret - - .p2align 4 -L(15bytes): - mov -15(%rdi), %rax - mov -15(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - mov -8(%rdi), %rax - mov -8(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - xor %eax, %eax - ret - - .p2align 4 -L(7bytes): - mov -7(%rdi), %eax - mov -7(%rsi), %ecx - cmp %eax, %ecx - jne L(diffin4bytes) - mov -4(%rdi), %eax - mov -4(%rsi), %ecx - cmp %eax, %ecx - jne L(diffin4bytes) - xor %eax, %eax - ret - - .p2align 4 -L(3bytes): - movzwl -3(%rdi), %eax - movzwl -3(%rsi), %ecx - cmp %eax, %ecx - jne L(diffin2bytes) -L(1bytes): - movzbl -1(%rdi), %eax - movzbl -1(%rsi), %ecx - sub %ecx, %eax - ret -# endif - - .p2align 4 -L(68bytes): - movdqu -68(%rdi), %xmm2 - movdqu -68(%rsi), %xmm1 - mov $-68, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(52bytes): - movdqu -52(%rdi), %xmm2 - movdqu -52(%rsi), %xmm1 - mov $-52, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(36bytes): - movdqu -36(%rdi), %xmm2 - movdqu -36(%rsi), %xmm1 - mov $-36, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(20bytes): - movdqu -20(%rdi), %xmm2 - movdqu -20(%rsi), %xmm1 - mov $-20, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - mov -4(%rsi), %ecx - -# ifndef USE_AS_WMEMCMP - mov -4(%rdi), %eax - cmp %eax, %ecx -# else - cmp -4(%rdi), %ecx -# endif - jne L(diffin4bytes) - xor %eax, %eax - ret - -# ifndef USE_AS_WMEMCMP -/* unreal cases for wmemcmp */ - .p2align 4 -L(69bytes): - movdqu -69(%rsi), %xmm1 - movdqu -69(%rdi), %xmm2 - mov $-69, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(53bytes): - movdqu -53(%rsi), %xmm1 - movdqu -53(%rdi), %xmm2 - mov $-53, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(37bytes): - movdqu -37(%rsi), %xmm1 - movdqu -37(%rdi), %xmm2 - mov $-37, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(21bytes): - movdqu -21(%rsi), %xmm1 - movdqu -21(%rdi), %xmm2 - mov $-21, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - mov -8(%rdi), %rax - mov -8(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - xor %eax, %eax - ret - - .p2align 4 -L(70bytes): - movdqu -70(%rsi), %xmm1 - movdqu -70(%rdi), %xmm2 - mov $-70, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(54bytes): - movdqu -54(%rsi), %xmm1 - movdqu -54(%rdi), %xmm2 - mov $-54, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(38bytes): - movdqu -38(%rsi), %xmm1 - movdqu -38(%rdi), %xmm2 - mov $-38, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(22bytes): - movdqu -22(%rsi), %xmm1 - movdqu -22(%rdi), %xmm2 - mov $-22, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - mov -8(%rdi), %rax - mov -8(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - xor %eax, %eax - ret - - .p2align 4 -L(71bytes): - movdqu -71(%rsi), %xmm1 - movdqu -71(%rdi), %xmm2 - mov $-71, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(55bytes): - movdqu -55(%rdi), %xmm2 - movdqu -55(%rsi), %xmm1 - mov $-55, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(39bytes): - movdqu -39(%rdi), %xmm2 - movdqu -39(%rsi), %xmm1 - mov $-39, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(23bytes): - movdqu -23(%rdi), %xmm2 - movdqu -23(%rsi), %xmm1 - mov $-23, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - mov -8(%rdi), %rax - mov -8(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - xor %eax, %eax - ret -# endif - - .p2align 4 -L(72bytes): - movdqu -72(%rsi), %xmm1 - movdqu -72(%rdi), %xmm2 - mov $-72, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(56bytes): - movdqu -56(%rdi), %xmm2 - movdqu -56(%rsi), %xmm1 - mov $-56, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(40bytes): - movdqu -40(%rdi), %xmm2 - movdqu -40(%rsi), %xmm1 - mov $-40, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(24bytes): - movdqu -24(%rdi), %xmm2 - movdqu -24(%rsi), %xmm1 - mov $-24, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - - mov -8(%rsi), %rcx - mov -8(%rdi), %rax - cmp %rax, %rcx - jne L(diffin8bytes) - xor %eax, %eax - ret - -# ifndef USE_AS_WMEMCMP -/* unreal cases for wmemcmp */ - .p2align 4 -L(73bytes): - movdqu -73(%rsi), %xmm1 - movdqu -73(%rdi), %xmm2 - mov $-73, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(57bytes): - movdqu -57(%rdi), %xmm2 - movdqu -57(%rsi), %xmm1 - mov $-57, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(41bytes): - movdqu -41(%rdi), %xmm2 - movdqu -41(%rsi), %xmm1 - mov $-41, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(25bytes): - movdqu -25(%rdi), %xmm2 - movdqu -25(%rsi), %xmm1 - mov $-25, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - mov -9(%rdi), %rax - mov -9(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - movzbl -1(%rdi), %eax - movzbl -1(%rsi), %ecx - sub %ecx, %eax - ret - - .p2align 4 -L(74bytes): - movdqu -74(%rsi), %xmm1 - movdqu -74(%rdi), %xmm2 - mov $-74, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(58bytes): - movdqu -58(%rdi), %xmm2 - movdqu -58(%rsi), %xmm1 - mov $-58, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(42bytes): - movdqu -42(%rdi), %xmm2 - movdqu -42(%rsi), %xmm1 - mov $-42, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(26bytes): - movdqu -26(%rdi), %xmm2 - movdqu -26(%rsi), %xmm1 - mov $-26, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - mov -10(%rdi), %rax - mov -10(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - movzwl -2(%rdi), %eax - movzwl -2(%rsi), %ecx - jmp L(diffin2bytes) - - .p2align 4 -L(75bytes): - movdqu -75(%rsi), %xmm1 - movdqu -75(%rdi), %xmm2 - mov $-75, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(59bytes): - movdqu -59(%rdi), %xmm2 - movdqu -59(%rsi), %xmm1 - mov $-59, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(43bytes): - movdqu -43(%rdi), %xmm2 - movdqu -43(%rsi), %xmm1 - mov $-43, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(27bytes): - movdqu -27(%rdi), %xmm2 - movdqu -27(%rsi), %xmm1 - mov $-27, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - mov -11(%rdi), %rax - mov -11(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - mov -4(%rdi), %eax - mov -4(%rsi), %ecx - cmp %eax, %ecx - jne L(diffin4bytes) - xor %eax, %eax - ret -# endif - .p2align 4 -L(76bytes): - movdqu -76(%rsi), %xmm1 - movdqu -76(%rdi), %xmm2 - mov $-76, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(60bytes): - movdqu -60(%rdi), %xmm2 - movdqu -60(%rsi), %xmm1 - mov $-60, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(44bytes): - movdqu -44(%rdi), %xmm2 - movdqu -44(%rsi), %xmm1 - mov $-44, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(28bytes): - movdqu -28(%rdi), %xmm2 - movdqu -28(%rsi), %xmm1 - mov $-28, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - mov -12(%rdi), %rax - mov -12(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - mov -4(%rsi), %ecx -# ifndef USE_AS_WMEMCMP - mov -4(%rdi), %eax - cmp %eax, %ecx -# else - cmp -4(%rdi), %ecx -# endif - jne L(diffin4bytes) - xor %eax, %eax - ret - -# ifndef USE_AS_WMEMCMP -/* unreal cases for wmemcmp */ - .p2align 4 -L(77bytes): - movdqu -77(%rsi), %xmm1 - movdqu -77(%rdi), %xmm2 - mov $-77, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(61bytes): - movdqu -61(%rdi), %xmm2 - movdqu -61(%rsi), %xmm1 - mov $-61, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(45bytes): - movdqu -45(%rdi), %xmm2 - movdqu -45(%rsi), %xmm1 - mov $-45, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(29bytes): - movdqu -29(%rdi), %xmm2 - movdqu -29(%rsi), %xmm1 - mov $-29, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - - mov -13(%rdi), %rax - mov -13(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - - mov -8(%rdi), %rax - mov -8(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - xor %eax, %eax - ret - - .p2align 4 -L(78bytes): - movdqu -78(%rsi), %xmm1 - movdqu -78(%rdi), %xmm2 - mov $-78, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(62bytes): - movdqu -62(%rdi), %xmm2 - movdqu -62(%rsi), %xmm1 - mov $-62, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(46bytes): - movdqu -46(%rdi), %xmm2 - movdqu -46(%rsi), %xmm1 - mov $-46, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(30bytes): - movdqu -30(%rdi), %xmm2 - movdqu -30(%rsi), %xmm1 - mov $-30, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - mov -14(%rdi), %rax - mov -14(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - mov -8(%rdi), %rax - mov -8(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - xor %eax, %eax - ret - - .p2align 4 -L(79bytes): - movdqu -79(%rsi), %xmm1 - movdqu -79(%rdi), %xmm2 - mov $-79, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(63bytes): - movdqu -63(%rdi), %xmm2 - movdqu -63(%rsi), %xmm1 - mov $-63, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(47bytes): - movdqu -47(%rdi), %xmm2 - movdqu -47(%rsi), %xmm1 - mov $-47, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(31bytes): - movdqu -31(%rdi), %xmm2 - movdqu -31(%rsi), %xmm1 - mov $-31, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - mov -15(%rdi), %rax - mov -15(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - mov -8(%rdi), %rax - mov -8(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - xor %eax, %eax - ret -# endif - .p2align 4 -L(64bytes): - movdqu -64(%rdi), %xmm2 - movdqu -64(%rsi), %xmm1 - mov $-64, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(48bytes): - movdqu -48(%rdi), %xmm2 - movdqu -48(%rsi), %xmm1 - mov $-48, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) -L(32bytes): - movdqu -32(%rdi), %xmm2 - movdqu -32(%rsi), %xmm1 - mov $-32, %dl - pxor %xmm1, %xmm2 - ptest %xmm2, %xmm0 - jnc L(less16bytes) - - mov -16(%rdi), %rax - mov -16(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - - mov -8(%rdi), %rax - mov -8(%rsi), %rcx - cmp %rax, %rcx - jne L(diffin8bytes) - xor %eax, %eax - ret - -/* - * Aligned 8 bytes to avoid 2 branch "taken" in one 16 alinged code block. - */ - .p2align 3 -L(less16bytes): - movsbq %dl, %rdx - mov (%rsi, %rdx), %rcx - mov (%rdi, %rdx), %rax - cmp %rax, %rcx - jne L(diffin8bytes) - mov 8(%rsi, %rdx), %rcx - mov 8(%rdi, %rdx), %rax -L(diffin8bytes): - cmp %eax, %ecx - jne L(diffin4bytes) - shr $32, %rcx - shr $32, %rax - -# ifdef USE_AS_WMEMCMP -/* for wmemcmp */ - cmp %eax, %ecx - jne L(diffin4bytes) - xor %eax, %eax - ret -# endif - -L(diffin4bytes): -# ifndef USE_AS_WMEMCMP - cmp %cx, %ax - jne L(diffin2bytes) - shr $16, %ecx - shr $16, %eax -L(diffin2bytes): - cmp %cl, %al - jne L(end) - and $0xffff, %eax - and $0xffff, %ecx - sub %ecx, %eax - ret - - .p2align 4 -L(end): - and $0xff, %eax - and $0xff, %ecx - sub %ecx, %eax - ret -# else - -/* for wmemcmp */ - mov $1, %eax - jl L(nequal_bigger) - neg %eax - ret - - .p2align 4 -L(nequal_bigger): - ret - -L(unreal_case): - xor %eax, %eax - ret -# endif - -END (MEMCMP) - - .section .rodata.sse4.1,"a",@progbits - .p2align 3 -# ifndef USE_AS_WMEMCMP -L(table_64bytes): - .int JMPTBL (L(0bytes), L(table_64bytes)) - .int JMPTBL (L(1bytes), L(table_64bytes)) - .int JMPTBL (L(2bytes), L(table_64bytes)) - .int JMPTBL (L(3bytes), L(table_64bytes)) - .int JMPTBL (L(4bytes), L(table_64bytes)) - .int JMPTBL (L(5bytes), L(table_64bytes)) - .int JMPTBL (L(6bytes), L(table_64bytes)) - .int JMPTBL (L(7bytes), L(table_64bytes)) - .int JMPTBL (L(8bytes), L(table_64bytes)) - .int JMPTBL (L(9bytes), L(table_64bytes)) - .int JMPTBL (L(10bytes), L(table_64bytes)) - .int JMPTBL (L(11bytes), L(table_64bytes)) - .int JMPTBL (L(12bytes), L(table_64bytes)) - .int JMPTBL (L(13bytes), L(table_64bytes)) - .int JMPTBL (L(14bytes), L(table_64bytes)) - .int JMPTBL (L(15bytes), L(table_64bytes)) - .int JMPTBL (L(16bytes), L(table_64bytes)) - .int JMPTBL (L(17bytes), L(table_64bytes)) - .int JMPTBL (L(18bytes), L(table_64bytes)) - .int JMPTBL (L(19bytes), L(table_64bytes)) - .int JMPTBL (L(20bytes), L(table_64bytes)) - .int JMPTBL (L(21bytes), L(table_64bytes)) - .int JMPTBL (L(22bytes), L(table_64bytes)) - .int JMPTBL (L(23bytes), L(table_64bytes)) - .int JMPTBL (L(24bytes), L(table_64bytes)) - .int JMPTBL (L(25bytes), L(table_64bytes)) - .int JMPTBL (L(26bytes), L(table_64bytes)) - .int JMPTBL (L(27bytes), L(table_64bytes)) - .int JMPTBL (L(28bytes), L(table_64bytes)) - .int JMPTBL (L(29bytes), L(table_64bytes)) - .int JMPTBL (L(30bytes), L(table_64bytes)) - .int JMPTBL (L(31bytes), L(table_64bytes)) - .int JMPTBL (L(32bytes), L(table_64bytes)) - .int JMPTBL (L(33bytes), L(table_64bytes)) - .int JMPTBL (L(34bytes), L(table_64bytes)) - .int JMPTBL (L(35bytes), L(table_64bytes)) - .int JMPTBL (L(36bytes), L(table_64bytes)) - .int JMPTBL (L(37bytes), L(table_64bytes)) - .int JMPTBL (L(38bytes), L(table_64bytes)) - .int JMPTBL (L(39bytes), L(table_64bytes)) - .int JMPTBL (L(40bytes), L(table_64bytes)) - .int JMPTBL (L(41bytes), L(table_64bytes)) - .int JMPTBL (L(42bytes), L(table_64bytes)) - .int JMPTBL (L(43bytes), L(table_64bytes)) - .int JMPTBL (L(44bytes), L(table_64bytes)) - .int JMPTBL (L(45bytes), L(table_64bytes)) - .int JMPTBL (L(46bytes), L(table_64bytes)) - .int JMPTBL (L(47bytes), L(table_64bytes)) - .int JMPTBL (L(48bytes), L(table_64bytes)) - .int JMPTBL (L(49bytes), L(table_64bytes)) - .int JMPTBL (L(50bytes), L(table_64bytes)) - .int JMPTBL (L(51bytes), L(table_64bytes)) - .int JMPTBL (L(52bytes), L(table_64bytes)) - .int JMPTBL (L(53bytes), L(table_64bytes)) - .int JMPTBL (L(54bytes), L(table_64bytes)) - .int JMPTBL (L(55bytes), L(table_64bytes)) - .int JMPTBL (L(56bytes), L(table_64bytes)) - .int JMPTBL (L(57bytes), L(table_64bytes)) - .int JMPTBL (L(58bytes), L(table_64bytes)) - .int JMPTBL (L(59bytes), L(table_64bytes)) - .int JMPTBL (L(60bytes), L(table_64bytes)) - .int JMPTBL (L(61bytes), L(table_64bytes)) - .int JMPTBL (L(62bytes), L(table_64bytes)) - .int JMPTBL (L(63bytes), L(table_64bytes)) - .int JMPTBL (L(64bytes), L(table_64bytes)) - .int JMPTBL (L(65bytes), L(table_64bytes)) - .int JMPTBL (L(66bytes), L(table_64bytes)) - .int JMPTBL (L(67bytes), L(table_64bytes)) - .int JMPTBL (L(68bytes), L(table_64bytes)) - .int JMPTBL (L(69bytes), L(table_64bytes)) - .int JMPTBL (L(70bytes), L(table_64bytes)) - .int JMPTBL (L(71bytes), L(table_64bytes)) - .int JMPTBL (L(72bytes), L(table_64bytes)) - .int JMPTBL (L(73bytes), L(table_64bytes)) - .int JMPTBL (L(74bytes), L(table_64bytes)) - .int JMPTBL (L(75bytes), L(table_64bytes)) - .int JMPTBL (L(76bytes), L(table_64bytes)) - .int JMPTBL (L(77bytes), L(table_64bytes)) - .int JMPTBL (L(78bytes), L(table_64bytes)) - .int JMPTBL (L(79bytes), L(table_64bytes)) -# else -L(table_64bytes): - .int JMPTBL (L(0bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(4bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(8bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(12bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(16bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(20bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(24bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(28bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(32bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(36bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(40bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(44bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(48bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(52bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(56bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(60bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(64bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(68bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(72bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(76bytes), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) - .int JMPTBL (L(unreal_case), L(table_64bytes)) -# endif -#endif diff --git a/sysdeps/x86_64/multiarch/memcmp-ssse3.S b/sysdeps/x86_64/multiarch/memcmp-ssse3.S deleted file mode 100644 index 8d7d2fe67b..0000000000 --- a/sysdeps/x86_64/multiarch/memcmp-ssse3.S +++ /dev/null @@ -1,1990 +0,0 @@ -/* memcmp with SSSE3, wmemcmp with SSSE3 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include - -# ifndef MEMCMP -# define MEMCMP __memcmp_ssse3 -# endif - -/* Warning! - wmemcmp has to use SIGNED comparison for elements. - memcmp has to use UNSIGNED comparison for elemnts. -*/ - - atom_text_section -ENTRY (MEMCMP) -# ifdef USE_AS_WMEMCMP - shl $2, %rdx - test %rdx, %rdx - jz L(equal) -# endif - mov %rdx, %rcx - mov %rdi, %rdx - cmp $48, %rcx; - jae L(48bytesormore) /* LEN => 48 */ - - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -/* ECX >= 32. */ -L(48bytesormore): - movdqu (%rdi), %xmm3 - movdqu (%rsi), %xmm0 - pcmpeqb %xmm0, %xmm3 - pmovmskb %xmm3, %edx - lea 16(%rdi), %rdi - lea 16(%rsi), %rsi - sub $0xffff, %edx - jnz L(less16bytes) - mov %edi, %edx - and $0xf, %edx - xor %rdx, %rdi - sub %rdx, %rsi - add %rdx, %rcx - mov %esi, %edx - and $0xf, %edx - jz L(shr_0) - xor %rdx, %rsi - -# ifndef USE_AS_WMEMCMP - cmp $8, %edx - jae L(next_unaligned_table) - cmp $0, %edx - je L(shr_0) - cmp $1, %edx - je L(shr_1) - cmp $2, %edx - je L(shr_2) - cmp $3, %edx - je L(shr_3) - cmp $4, %edx - je L(shr_4) - cmp $5, %edx - je L(shr_5) - cmp $6, %edx - je L(shr_6) - jmp L(shr_7) - - .p2align 2 -L(next_unaligned_table): - cmp $8, %edx - je L(shr_8) - cmp $9, %edx - je L(shr_9) - cmp $10, %edx - je L(shr_10) - cmp $11, %edx - je L(shr_11) - cmp $12, %edx - je L(shr_12) - cmp $13, %edx - je L(shr_13) - cmp $14, %edx - je L(shr_14) - jmp L(shr_15) -# else - cmp $0, %edx - je L(shr_0) - cmp $4, %edx - je L(shr_4) - cmp $8, %edx - je L(shr_8) - jmp L(shr_12) -# endif - - .p2align 4 -L(shr_0): - cmp $80, %rcx - lea -48(%rcx), %rcx - jae L(shr_0_gobble) - xor %eax, %eax - movdqa (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - movdqa 16(%rsi), %xmm2 - pcmpeqb 16(%rdi), %xmm2 - pand %xmm1, %xmm2 - pmovmskb %xmm2, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_0_gobble): - movdqa (%rsi), %xmm0 - xor %eax, %eax - pcmpeqb (%rdi), %xmm0 - sub $32, %rcx - movdqa 16(%rsi), %xmm2 - pcmpeqb 16(%rdi), %xmm2 -L(shr_0_gobble_loop): - pand %xmm0, %xmm2 - sub $32, %rcx - pmovmskb %xmm2, %edx - movdqa %xmm0, %xmm1 - movdqa 32(%rsi), %xmm0 - movdqa 48(%rsi), %xmm2 - sbb $0xffff, %edx - pcmpeqb 32(%rdi), %xmm0 - pcmpeqb 48(%rdi), %xmm2 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - jz L(shr_0_gobble_loop) - - pand %xmm0, %xmm2 - cmp $0, %rcx - jge L(next) - inc %edx - add $32, %rcx -L(next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm2, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - -# ifndef USE_AS_WMEMCMP - - .p2align 4 -L(shr_1): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_1_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $1, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $1, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $1, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_1_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $1, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $1, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_1_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $1, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $1, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_1_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_1_gobble_next) - inc %edx - add $32, %rcx -L(shr_1_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 1(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - - .p2align 4 -L(shr_2): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_2_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $2, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $2, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $2, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_2_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $2, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $2, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_2_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $2, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $2, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_2_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_2_gobble_next) - inc %edx - add $32, %rcx -L(shr_2_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 2(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_3): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_3_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $3, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $3, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $3, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_3_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $3, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $3, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_3_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $3, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $3, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_3_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_3_gobble_next) - inc %edx - add $32, %rcx -L(shr_3_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 3(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - -# endif - - .p2align 4 -L(shr_4): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_4_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $4, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $4, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $4, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_4_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $4, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $4, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_4_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $4, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $4, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_4_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_4_gobble_next) - inc %edx - add $32, %rcx -L(shr_4_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 4(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - -# ifndef USE_AS_WMEMCMP - - .p2align 4 -L(shr_5): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_5_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $5, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $5, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $5, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_5_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $5, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $5, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_5_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $5, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $5, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_5_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_5_gobble_next) - inc %edx - add $32, %rcx -L(shr_5_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 5(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_6): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_6_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $6, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $6, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $6, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_6_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $6, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $6, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_6_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $6, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $6, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_6_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_6_gobble_next) - inc %edx - add $32, %rcx -L(shr_6_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 6(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_7): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_7_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $7, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $7, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $7, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_7_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $7, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $7, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_7_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $7, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $7, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_7_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_7_gobble_next) - inc %edx - add $32, %rcx -L(shr_7_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 7(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - -# endif - - .p2align 4 -L(shr_8): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_8_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $8, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $8, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $8, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_8_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $8, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $8, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_8_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $8, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $8, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_8_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_8_gobble_next) - inc %edx - add $32, %rcx -L(shr_8_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 8(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - -# ifndef USE_AS_WMEMCMP - - .p2align 4 -L(shr_9): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_9_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $9, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $9, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $9, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_9_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $9, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $9, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_9_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $9, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $9, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_9_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_9_gobble_next) - inc %edx - add $32, %rcx -L(shr_9_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 9(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_10): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_10_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $10, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $10, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $10, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_10_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $10, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $10, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_10_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $10, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $10, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_10_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_10_gobble_next) - inc %edx - add $32, %rcx -L(shr_10_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 10(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_11): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_11_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $11, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $11, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $11, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_11_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $11, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $11, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_11_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $11, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $11, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_11_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_11_gobble_next) - inc %edx - add $32, %rcx -L(shr_11_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 11(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - -# endif - - .p2align 4 -L(shr_12): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_12_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $12, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $12, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $12, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_12_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $12, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $12, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_12_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $12, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $12, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_12_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_12_gobble_next) - inc %edx - add $32, %rcx -L(shr_12_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 12(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - -# ifndef USE_AS_WMEMCMP - - .p2align 4 -L(shr_13): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_13_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $13, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $13, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $13, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_13_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $13, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $13, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_13_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $13, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $13, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_13_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_13_gobble_next) - inc %edx - add $32, %rcx -L(shr_13_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 13(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_14): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_14_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $14, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $14, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $14, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_14_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $14, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $14, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_14_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $14, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $14, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_14_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_14_gobble_next) - inc %edx - add $32, %rcx -L(shr_14_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 14(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_15): - cmp $80, %rcx - lea -48(%rcx), %rcx - mov %edx, %eax - jae L(shr_15_gobble) - - movdqa 16(%rsi), %xmm1 - movdqa %xmm1, %xmm2 - palignr $15, (%rsi), %xmm1 - pcmpeqb (%rdi), %xmm1 - - movdqa 32(%rsi), %xmm3 - palignr $15, %xmm2, %xmm3 - pcmpeqb 16(%rdi), %xmm3 - - pand %xmm1, %xmm3 - pmovmskb %xmm3, %edx - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - add $15, %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) - - .p2align 4 -L(shr_15_gobble): - sub $32, %rcx - movdqa 16(%rsi), %xmm0 - palignr $15, (%rsi), %xmm0 - pcmpeqb (%rdi), %xmm0 - - movdqa 32(%rsi), %xmm3 - palignr $15, 16(%rsi), %xmm3 - pcmpeqb 16(%rdi), %xmm3 - -L(shr_15_gobble_loop): - pand %xmm0, %xmm3 - sub $32, %rcx - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - - movdqa 64(%rsi), %xmm3 - palignr $15, 48(%rsi), %xmm3 - sbb $0xffff, %edx - movdqa 48(%rsi), %xmm0 - palignr $15, 32(%rsi), %xmm0 - pcmpeqb 32(%rdi), %xmm0 - lea 32(%rsi), %rsi - pcmpeqb 48(%rdi), %xmm3 - - lea 32(%rdi), %rdi - jz L(shr_15_gobble_loop) - pand %xmm0, %xmm3 - - cmp $0, %rcx - jge L(shr_15_gobble_next) - inc %edx - add $32, %rcx -L(shr_15_gobble_next): - test %edx, %edx - jnz L(exit) - - pmovmskb %xmm3, %edx - movdqa %xmm0, %xmm1 - lea 32(%rdi), %rdi - lea 32(%rsi), %rsi - sub $0xffff, %edx - jnz L(exit) - - lea 15(%rsi), %rsi - add %rcx, %rsi - add %rcx, %rdi - jmp L(less48bytes) -# endif - .p2align 4 -L(exit): - pmovmskb %xmm1, %r8d - sub $0xffff, %r8d - jz L(first16bytes) - lea -16(%rsi), %rsi - lea -16(%rdi), %rdi - mov %r8d, %edx -L(first16bytes): - add %rax, %rsi -L(less16bytes): -# ifndef USE_AS_WMEMCMP - test %dl, %dl - jz L(next_24_bytes) - - test $0x01, %dl - jnz L(Byte16) - - test $0x02, %dl - jnz L(Byte17) - - test $0x04, %dl - jnz L(Byte18) - - test $0x08, %dl - jnz L(Byte19) - - test $0x10, %dl - jnz L(Byte20) - - test $0x20, %dl - jnz L(Byte21) - - test $0x40, %dl - jnz L(Byte22) - - movzbl -9(%rdi), %eax - movzbl -9(%rsi), %edx - sub %edx, %eax - ret - - .p2align 4 -L(Byte16): - movzbl -16(%rdi), %eax - movzbl -16(%rsi), %edx - sub %edx, %eax - ret - - .p2align 4 -L(Byte17): - movzbl -15(%rdi), %eax - movzbl -15(%rsi), %edx - sub %edx, %eax - ret - - .p2align 4 -L(Byte18): - movzbl -14(%rdi), %eax - movzbl -14(%rsi), %edx - sub %edx, %eax - ret - - .p2align 4 -L(Byte19): - movzbl -13(%rdi), %eax - movzbl -13(%rsi), %edx - sub %edx, %eax - ret - - .p2align 4 -L(Byte20): - movzbl -12(%rdi), %eax - movzbl -12(%rsi), %edx - sub %edx, %eax - ret - - .p2align 4 -L(Byte21): - movzbl -11(%rdi), %eax - movzbl -11(%rsi), %edx - sub %edx, %eax - ret - - .p2align 4 -L(Byte22): - movzbl -10(%rdi), %eax - movzbl -10(%rsi), %edx - sub %edx, %eax - ret - - .p2align 4 -L(next_24_bytes): - lea 8(%rdi), %rdi - lea 8(%rsi), %rsi - test $0x01, %dh - jnz L(Byte16) - - test $0x02, %dh - jnz L(Byte17) - - test $0x04, %dh - jnz L(Byte18) - - test $0x08, %dh - jnz L(Byte19) - - test $0x10, %dh - jnz L(Byte20) - - test $0x20, %dh - jnz L(Byte21) - - test $0x40, %dh - jnz L(Byte22) - - movzbl -9(%rdi), %eax - movzbl -9(%rsi), %edx - sub %edx, %eax - ret -# else -/* special for wmemcmp */ - xor %eax, %eax - test %dl, %dl - jz L(next_two_double_words) - and $15, %dl - jz L(second_double_word) - mov -16(%rdi), %eax - cmp -16(%rsi), %eax - jne L(find_diff) - ret - - .p2align 4 -L(second_double_word): - mov -12(%rdi), %eax - cmp -12(%rsi), %eax - jne L(find_diff) - ret - - .p2align 4 -L(next_two_double_words): - and $15, %dh - jz L(fourth_double_word) - mov -8(%rdi), %eax - cmp -8(%rsi), %eax - jne L(find_diff) - ret - - .p2align 4 -L(fourth_double_word): - mov -4(%rdi), %eax - cmp -4(%rsi), %eax - jne L(find_diff) - ret -# endif - - .p2align 4 -L(less48bytes): - cmp $8, %ecx - jae L(more8bytes) - cmp $0, %ecx - je L(0bytes) -# ifndef USE_AS_WMEMCMP - cmp $1, %ecx - je L(1bytes) - cmp $2, %ecx - je L(2bytes) - cmp $3, %ecx - je L(3bytes) - cmp $4, %ecx - je L(4bytes) - cmp $5, %ecx - je L(5bytes) - cmp $6, %ecx - je L(6bytes) - jmp L(7bytes) -# else - jmp L(4bytes) -# endif - - .p2align 4 -L(more8bytes): - cmp $16, %ecx - jae L(more16bytes) - cmp $8, %ecx - je L(8bytes) -# ifndef USE_AS_WMEMCMP - cmp $9, %ecx - je L(9bytes) - cmp $10, %ecx - je L(10bytes) - cmp $11, %ecx - je L(11bytes) - cmp $12, %ecx - je L(12bytes) - cmp $13, %ecx - je L(13bytes) - cmp $14, %ecx - je L(14bytes) - jmp L(15bytes) -# else - jmp L(12bytes) -# endif - - .p2align 4 -L(more16bytes): - cmp $24, %ecx - jae L(more24bytes) - cmp $16, %ecx - je L(16bytes) -# ifndef USE_AS_WMEMCMP - cmp $17, %ecx - je L(17bytes) - cmp $18, %ecx - je L(18bytes) - cmp $19, %ecx - je L(19bytes) - cmp $20, %ecx - je L(20bytes) - cmp $21, %ecx - je L(21bytes) - cmp $22, %ecx - je L(22bytes) - jmp L(23bytes) -# else - jmp L(20bytes) -# endif - - .p2align 4 -L(more24bytes): - cmp $32, %ecx - jae L(more32bytes) - cmp $24, %ecx - je L(24bytes) -# ifndef USE_AS_WMEMCMP - cmp $25, %ecx - je L(25bytes) - cmp $26, %ecx - je L(26bytes) - cmp $27, %ecx - je L(27bytes) - cmp $28, %ecx - je L(28bytes) - cmp $29, %ecx - je L(29bytes) - cmp $30, %ecx - je L(30bytes) - jmp L(31bytes) -# else - jmp L(28bytes) -# endif - - .p2align 4 -L(more32bytes): - cmp $40, %ecx - jae L(more40bytes) - cmp $32, %ecx - je L(32bytes) -# ifndef USE_AS_WMEMCMP - cmp $33, %ecx - je L(33bytes) - cmp $34, %ecx - je L(34bytes) - cmp $35, %ecx - je L(35bytes) - cmp $36, %ecx - je L(36bytes) - cmp $37, %ecx - je L(37bytes) - cmp $38, %ecx - je L(38bytes) - jmp L(39bytes) -# else - jmp L(36bytes) -# endif - - .p2align 4 -L(more40bytes): - cmp $40, %ecx - je L(40bytes) -# ifndef USE_AS_WMEMCMP - cmp $41, %ecx - je L(41bytes) - cmp $42, %ecx - je L(42bytes) - cmp $43, %ecx - je L(43bytes) - cmp $44, %ecx - je L(44bytes) - cmp $45, %ecx - je L(45bytes) - cmp $46, %ecx - je L(46bytes) - jmp L(47bytes) - - .p2align 4 -L(44bytes): - movl -44(%rdi), %eax - movl -44(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(40bytes): - movl -40(%rdi), %eax - movl -40(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(36bytes): - movl -36(%rdi), %eax - movl -36(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(32bytes): - movl -32(%rdi), %eax - movl -32(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(28bytes): - movl -28(%rdi), %eax - movl -28(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(24bytes): - movl -24(%rdi), %eax - movl -24(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(20bytes): - movl -20(%rdi), %eax - movl -20(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(16bytes): - movl -16(%rdi), %eax - movl -16(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(12bytes): - movl -12(%rdi), %eax - movl -12(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(8bytes): - movl -8(%rdi), %eax - movl -8(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(4bytes): - movl -4(%rdi), %eax - movl -4(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(0bytes): - xor %eax, %eax - ret -# else - .p2align 4 -L(44bytes): - movl -44(%rdi), %eax - cmp -44(%rsi), %eax - jne L(find_diff) -L(40bytes): - movl -40(%rdi), %eax - cmp -40(%rsi), %eax - jne L(find_diff) -L(36bytes): - movl -36(%rdi), %eax - cmp -36(%rsi), %eax - jne L(find_diff) -L(32bytes): - movl -32(%rdi), %eax - cmp -32(%rsi), %eax - jne L(find_diff) -L(28bytes): - movl -28(%rdi), %eax - cmp -28(%rsi), %eax - jne L(find_diff) -L(24bytes): - movl -24(%rdi), %eax - cmp -24(%rsi), %eax - jne L(find_diff) -L(20bytes): - movl -20(%rdi), %eax - cmp -20(%rsi), %eax - jne L(find_diff) -L(16bytes): - movl -16(%rdi), %eax - cmp -16(%rsi), %eax - jne L(find_diff) -L(12bytes): - movl -12(%rdi), %eax - cmp -12(%rsi), %eax - jne L(find_diff) -L(8bytes): - movl -8(%rdi), %eax - cmp -8(%rsi), %eax - jne L(find_diff) -L(4bytes): - movl -4(%rdi), %eax - cmp -4(%rsi), %eax - jne L(find_diff) -L(0bytes): - xor %eax, %eax - ret -# endif - -# ifndef USE_AS_WMEMCMP - .p2align 4 -L(45bytes): - movl -45(%rdi), %eax - movl -45(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(41bytes): - movl -41(%rdi), %eax - movl -41(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(37bytes): - movl -37(%rdi), %eax - movl -37(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(33bytes): - movl -33(%rdi), %eax - movl -33(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(29bytes): - movl -29(%rdi), %eax - movl -29(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(25bytes): - movl -25(%rdi), %eax - movl -25(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(21bytes): - movl -21(%rdi), %eax - movl -21(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(17bytes): - movl -17(%rdi), %eax - movl -17(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(13bytes): - movl -13(%rdi), %eax - movl -13(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(9bytes): - movl -9(%rdi), %eax - movl -9(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(5bytes): - movl -5(%rdi), %eax - movl -5(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(1bytes): - movzbl -1(%rdi), %eax - cmpb -1(%rsi), %al - jne L(set) - xor %eax, %eax - ret - - .p2align 4 -L(46bytes): - movl -46(%rdi), %eax - movl -46(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(42bytes): - movl -42(%rdi), %eax - movl -42(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(38bytes): - movl -38(%rdi), %eax - movl -38(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(34bytes): - movl -34(%rdi), %eax - movl -34(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(30bytes): - movl -30(%rdi), %eax - movl -30(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(26bytes): - movl -26(%rdi), %eax - movl -26(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(22bytes): - movl -22(%rdi), %eax - movl -22(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(18bytes): - movl -18(%rdi), %eax - movl -18(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(14bytes): - movl -14(%rdi), %eax - movl -14(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(10bytes): - movl -10(%rdi), %eax - movl -10(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(6bytes): - movl -6(%rdi), %eax - movl -6(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(2bytes): - movzwl -2(%rdi), %eax - movzwl -2(%rsi), %ecx - cmpb %cl, %al - jne L(set) - cmp %ecx, %eax - jne L(set) - xor %eax, %eax - ret - - .p2align 4 -L(47bytes): - movl -47(%rdi), %eax - movl -47(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(43bytes): - movl -43(%rdi), %eax - movl -43(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(39bytes): - movl -39(%rdi), %eax - movl -39(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(35bytes): - movl -35(%rdi), %eax - movl -35(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(31bytes): - movl -31(%rdi), %eax - movl -31(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(27bytes): - movl -27(%rdi), %eax - movl -27(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(23bytes): - movl -23(%rdi), %eax - movl -23(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(19bytes): - movl -19(%rdi), %eax - movl -19(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(15bytes): - movl -15(%rdi), %eax - movl -15(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(11bytes): - movl -11(%rdi), %eax - movl -11(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(7bytes): - movl -7(%rdi), %eax - movl -7(%rsi), %ecx - cmp %ecx, %eax - jne L(find_diff) -L(3bytes): - movzwl -3(%rdi), %eax - movzwl -3(%rsi), %ecx - cmpb %cl, %al - jne L(set) - cmp %ecx, %eax - jne L(set) - movzbl -1(%rdi), %eax - cmpb -1(%rsi), %al - jne L(set) - xor %eax, %eax - ret - - .p2align 4 -L(find_diff): - cmpb %cl, %al - jne L(set) - cmpw %cx, %ax - jne L(set) - shr $16, %eax - shr $16, %ecx - cmpb %cl, %al - jne L(set) - -/* We get there only if we already know there is a -difference. */ - - cmp %ecx, %eax -L(set): - sbb %eax, %eax - sbb $-1, %eax - ret -# else - -/* for wmemcmp */ - .p2align 4 -L(find_diff): - mov $1, %eax - jg L(find_diff_bigger) - neg %eax - ret - - .p2align 4 -L(find_diff_bigger): - ret -# endif - - .p2align 4 -L(equal): - xor %eax, %eax - ret - -END (MEMCMP) -#endif diff --git a/sysdeps/x86_64/multiarch/memcmp.S b/sysdeps/x86_64/multiarch/memcmp.S deleted file mode 100644 index 0c9804b7e9..0000000000 --- a/sysdeps/x86_64/multiarch/memcmp.S +++ /dev/null @@ -1,78 +0,0 @@ -/* Multiple versions of memcmp - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in libc. */ -#if IS_IN (libc) - .text -ENTRY(memcmp) - .type memcmp, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - HAS_ARCH_FEATURE (Prefer_No_VZEROUPPER) - jnz 1f - HAS_ARCH_FEATURE (AVX2_Usable) - jz 1f - HAS_CPU_FEATURE (MOVBE) - jz 1f - HAS_ARCH_FEATURE (AVX_Fast_Unaligned_Load) - jz 1f - leaq __memcmp_avx2_movbe(%rip), %rax - ret - -1: HAS_CPU_FEATURE (SSSE3) - jnz 2f - leaq __memcmp_sse2(%rip), %rax - ret - -2: HAS_CPU_FEATURE (SSE4_1) - jz 3f - leaq __memcmp_sse4_1(%rip), %rax - ret - -3: leaq __memcmp_ssse3(%rip), %rax - ret - -END(memcmp) - -# undef ENTRY -# define ENTRY(name) \ - .type __memcmp_sse2, @function; \ - .p2align 4; \ - .globl __memcmp_sse2; \ - .hidden __memcmp_sse2; \ - __memcmp_sse2: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __memcmp_sse2, .-__memcmp_sse2 - -# ifdef SHARED -# undef libc_hidden_builtin_def -/* It doesn't make sense to send libc-internal memcmp calls through a PLT. - The speedup we get from using SSE4 instructions is likely eaten away - by the indirect call in the PLT. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_memcmp; __GI_memcmp = __memcmp_sse2 -# endif -#endif - -#include "../memcmp.S" diff --git a/sysdeps/x86_64/multiarch/memcpy-ssse3-back.S b/sysdeps/x86_64/multiarch/memcpy-ssse3-back.S deleted file mode 100644 index 4e060a27fd..0000000000 --- a/sysdeps/x86_64/multiarch/memcpy-ssse3-back.S +++ /dev/null @@ -1,3180 +0,0 @@ -/* memcpy with SSSE3 and REP string - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if IS_IN (libc) \ - && (defined SHARED \ - || defined USE_AS_MEMMOVE \ - || !defined USE_MULTIARCH) - -#include "asm-syntax.h" - -#ifndef MEMCPY -# define MEMCPY __memcpy_ssse3_back -# define MEMCPY_CHK __memcpy_chk_ssse3_back -# define MEMPCPY __mempcpy_ssse3_back -# define MEMPCPY_CHK __mempcpy_chk_ssse3_back -#endif - -#define JMPTBL(I, B) I - B - -/* Branch to an entry in a jump table. TABLE is a jump table with - relative offsets. INDEX is a register contains the index into the - jump table. SCALE is the scale of INDEX. */ -#define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ - lea TABLE(%rip), %r11; \ - movslq (%r11, INDEX, SCALE), INDEX; \ - lea (%r11, INDEX), INDEX; \ - jmp *INDEX; \ - ud2 - - .section .text.ssse3,"ax",@progbits -#if !defined USE_AS_MEMPCPY && !defined USE_AS_MEMMOVE -ENTRY (MEMPCPY_CHK) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) -END (MEMPCPY_CHK) - -ENTRY (MEMPCPY) - movq %rdi, %rax - addq %rdx, %rax - jmp L(start) -END (MEMPCPY) -#endif - -#if !defined USE_AS_BCOPY -ENTRY (MEMCPY_CHK) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) -END (MEMCPY_CHK) -#endif - -ENTRY (MEMCPY) - mov %rdi, %rax -#ifdef USE_AS_MEMPCPY - add %rdx, %rax -#endif - -#ifdef USE_AS_MEMMOVE - cmp %rsi, %rdi - jb L(copy_forward) - je L(bwd_write_0bytes) - cmp $144, %rdx - jae L(copy_backward) - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) -L(copy_forward): -#endif -L(start): - cmp $144, %rdx - jae L(144bytesormore) - -L(fwd_write_less32bytes): -#ifndef USE_AS_MEMMOVE - cmp %dil, %sil - jbe L(bk_write) -#endif - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) -#ifndef USE_AS_MEMMOVE -L(bk_write): - - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) -#endif - - .p2align 4 -L(144bytesormore): - -#ifndef USE_AS_MEMMOVE - cmp %dil, %sil - jle L(copy_backward) -#endif - movdqu (%rsi), %xmm0 - mov %rdi, %r8 - and $-16, %rdi - add $16, %rdi - mov %rdi, %r9 - sub %r8, %r9 - sub %r9, %rdx - add %r9, %rsi - mov %rsi, %r9 - and $0xf, %r9 - jz L(shl_0) -#ifdef DATA_CACHE_SIZE - mov $DATA_CACHE_SIZE, %RCX_LP -#else - mov __x86_data_cache_size(%rip), %RCX_LP -#endif - cmp %rcx, %rdx - jae L(gobble_mem_fwd) - lea L(shl_table_fwd)(%rip), %r11 - sub $0x80, %rdx - movslq (%r11, %r9, 4), %r9 - add %r11, %r9 - jmp *%r9 - ud2 - - .p2align 4 -L(copy_backward): -#ifdef DATA_CACHE_SIZE - mov $DATA_CACHE_SIZE, %RCX_LP -#else - mov __x86_data_cache_size(%rip), %RCX_LP -#endif - shl $1, %rcx - cmp %rcx, %rdx - ja L(gobble_mem_bwd) - - add %rdx, %rdi - add %rdx, %rsi - movdqu -16(%rsi), %xmm0 - lea -16(%rdi), %r8 - mov %rdi, %r9 - and $0xf, %r9 - xor %r9, %rdi - sub %r9, %rsi - sub %r9, %rdx - mov %rsi, %r9 - and $0xf, %r9 - jz L(shl_0_bwd) - lea L(shl_table_bwd)(%rip), %r11 - sub $0x80, %rdx - movslq (%r11, %r9, 4), %r9 - add %r11, %r9 - jmp *%r9 - ud2 - - .p2align 4 -L(shl_0): - - mov %rdx, %r9 - shr $8, %r9 - add %rdx, %r9 -#ifdef DATA_CACHE_SIZE - cmp $DATA_CACHE_SIZE_HALF, %R9_LP -#else - cmp __x86_data_cache_size_half(%rip), %R9_LP -#endif - jae L(gobble_mem_fwd) - sub $0x80, %rdx - .p2align 4 -L(shl_0_loop): - movdqa (%rsi), %xmm1 - movdqa %xmm1, (%rdi) - movaps 0x10(%rsi), %xmm2 - movaps %xmm2, 0x10(%rdi) - movaps 0x20(%rsi), %xmm3 - movaps %xmm3, 0x20(%rdi) - movaps 0x30(%rsi), %xmm4 - movaps %xmm4, 0x30(%rdi) - movaps 0x40(%rsi), %xmm1 - movaps %xmm1, 0x40(%rdi) - movaps 0x50(%rsi), %xmm2 - movaps %xmm2, 0x50(%rdi) - movaps 0x60(%rsi), %xmm3 - movaps %xmm3, 0x60(%rdi) - movaps 0x70(%rsi), %xmm4 - movaps %xmm4, 0x70(%rdi) - sub $0x80, %rdx - lea 0x80(%rsi), %rsi - lea 0x80(%rdi), %rdi - jae L(shl_0_loop) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_0_bwd): - sub $0x80, %rdx -L(copy_backward_loop): - movaps -0x10(%rsi), %xmm1 - movaps %xmm1, -0x10(%rdi) - movaps -0x20(%rsi), %xmm2 - movaps %xmm2, -0x20(%rdi) - movaps -0x30(%rsi), %xmm3 - movaps %xmm3, -0x30(%rdi) - movaps -0x40(%rsi), %xmm4 - movaps %xmm4, -0x40(%rdi) - movaps -0x50(%rsi), %xmm5 - movaps %xmm5, -0x50(%rdi) - movaps -0x60(%rsi), %xmm5 - movaps %xmm5, -0x60(%rdi) - movaps -0x70(%rsi), %xmm5 - movaps %xmm5, -0x70(%rdi) - movaps -0x80(%rsi), %xmm5 - movaps %xmm5, -0x80(%rdi) - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(copy_backward_loop) - - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_1): - sub $0x80, %rdx - movaps -0x01(%rsi), %xmm1 - movaps 0x0f(%rsi), %xmm2 - movaps 0x1f(%rsi), %xmm3 - movaps 0x2f(%rsi), %xmm4 - movaps 0x3f(%rsi), %xmm5 - movaps 0x4f(%rsi), %xmm6 - movaps 0x5f(%rsi), %xmm7 - movaps 0x6f(%rsi), %xmm8 - movaps 0x7f(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $1, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $1, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $1, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $1, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $1, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $1, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $1, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $1, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - lea 0x80(%rdi), %rdi - jae L(shl_1) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_1_bwd): - movaps -0x01(%rsi), %xmm1 - - movaps -0x11(%rsi), %xmm2 - palignr $1, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x21(%rsi), %xmm3 - palignr $1, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x31(%rsi), %xmm4 - palignr $1, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x41(%rsi), %xmm5 - palignr $1, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x51(%rsi), %xmm6 - palignr $1, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x61(%rsi), %xmm7 - palignr $1, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x71(%rsi), %xmm8 - palignr $1, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x81(%rsi), %xmm9 - palignr $1, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_1_bwd) - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_2): - sub $0x80, %rdx - movaps -0x02(%rsi), %xmm1 - movaps 0x0e(%rsi), %xmm2 - movaps 0x1e(%rsi), %xmm3 - movaps 0x2e(%rsi), %xmm4 - movaps 0x3e(%rsi), %xmm5 - movaps 0x4e(%rsi), %xmm6 - movaps 0x5e(%rsi), %xmm7 - movaps 0x6e(%rsi), %xmm8 - movaps 0x7e(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $2, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $2, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $2, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $2, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $2, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $2, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $2, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $2, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - lea 0x80(%rdi), %rdi - jae L(shl_2) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_2_bwd): - movaps -0x02(%rsi), %xmm1 - - movaps -0x12(%rsi), %xmm2 - palignr $2, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x22(%rsi), %xmm3 - palignr $2, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x32(%rsi), %xmm4 - palignr $2, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x42(%rsi), %xmm5 - palignr $2, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x52(%rsi), %xmm6 - palignr $2, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x62(%rsi), %xmm7 - palignr $2, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x72(%rsi), %xmm8 - palignr $2, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x82(%rsi), %xmm9 - palignr $2, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_2_bwd) - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_3): - sub $0x80, %rdx - movaps -0x03(%rsi), %xmm1 - movaps 0x0d(%rsi), %xmm2 - movaps 0x1d(%rsi), %xmm3 - movaps 0x2d(%rsi), %xmm4 - movaps 0x3d(%rsi), %xmm5 - movaps 0x4d(%rsi), %xmm6 - movaps 0x5d(%rsi), %xmm7 - movaps 0x6d(%rsi), %xmm8 - movaps 0x7d(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $3, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $3, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $3, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $3, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $3, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $3, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $3, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $3, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - lea 0x80(%rdi), %rdi - jae L(shl_3) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_3_bwd): - movaps -0x03(%rsi), %xmm1 - - movaps -0x13(%rsi), %xmm2 - palignr $3, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x23(%rsi), %xmm3 - palignr $3, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x33(%rsi), %xmm4 - palignr $3, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x43(%rsi), %xmm5 - palignr $3, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x53(%rsi), %xmm6 - palignr $3, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x63(%rsi), %xmm7 - palignr $3, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x73(%rsi), %xmm8 - palignr $3, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x83(%rsi), %xmm9 - palignr $3, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_3_bwd) - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_4): - sub $0x80, %rdx - movaps -0x04(%rsi), %xmm1 - movaps 0x0c(%rsi), %xmm2 - movaps 0x1c(%rsi), %xmm3 - movaps 0x2c(%rsi), %xmm4 - movaps 0x3c(%rsi), %xmm5 - movaps 0x4c(%rsi), %xmm6 - movaps 0x5c(%rsi), %xmm7 - movaps 0x6c(%rsi), %xmm8 - movaps 0x7c(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $4, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $4, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $4, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $4, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $4, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $4, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $4, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $4, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - lea 0x80(%rdi), %rdi - jae L(shl_4) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_4_bwd): - movaps -0x04(%rsi), %xmm1 - - movaps -0x14(%rsi), %xmm2 - palignr $4, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x24(%rsi), %xmm3 - palignr $4, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x34(%rsi), %xmm4 - palignr $4, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x44(%rsi), %xmm5 - palignr $4, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x54(%rsi), %xmm6 - palignr $4, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x64(%rsi), %xmm7 - palignr $4, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x74(%rsi), %xmm8 - palignr $4, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x84(%rsi), %xmm9 - palignr $4, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_4_bwd) - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_5): - sub $0x80, %rdx - movaps -0x05(%rsi), %xmm1 - movaps 0x0b(%rsi), %xmm2 - movaps 0x1b(%rsi), %xmm3 - movaps 0x2b(%rsi), %xmm4 - movaps 0x3b(%rsi), %xmm5 - movaps 0x4b(%rsi), %xmm6 - movaps 0x5b(%rsi), %xmm7 - movaps 0x6b(%rsi), %xmm8 - movaps 0x7b(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $5, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $5, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $5, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $5, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $5, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $5, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $5, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $5, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - lea 0x80(%rdi), %rdi - jae L(shl_5) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_5_bwd): - movaps -0x05(%rsi), %xmm1 - - movaps -0x15(%rsi), %xmm2 - palignr $5, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x25(%rsi), %xmm3 - palignr $5, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x35(%rsi), %xmm4 - palignr $5, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x45(%rsi), %xmm5 - palignr $5, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x55(%rsi), %xmm6 - palignr $5, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x65(%rsi), %xmm7 - palignr $5, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x75(%rsi), %xmm8 - palignr $5, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x85(%rsi), %xmm9 - palignr $5, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_5_bwd) - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_6): - sub $0x80, %rdx - movaps -0x06(%rsi), %xmm1 - movaps 0x0a(%rsi), %xmm2 - movaps 0x1a(%rsi), %xmm3 - movaps 0x2a(%rsi), %xmm4 - movaps 0x3a(%rsi), %xmm5 - movaps 0x4a(%rsi), %xmm6 - movaps 0x5a(%rsi), %xmm7 - movaps 0x6a(%rsi), %xmm8 - movaps 0x7a(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $6, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $6, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $6, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $6, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $6, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $6, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $6, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $6, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - lea 0x80(%rdi), %rdi - jae L(shl_6) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_6_bwd): - movaps -0x06(%rsi), %xmm1 - - movaps -0x16(%rsi), %xmm2 - palignr $6, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x26(%rsi), %xmm3 - palignr $6, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x36(%rsi), %xmm4 - palignr $6, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x46(%rsi), %xmm5 - palignr $6, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x56(%rsi), %xmm6 - palignr $6, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x66(%rsi), %xmm7 - palignr $6, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x76(%rsi), %xmm8 - palignr $6, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x86(%rsi), %xmm9 - palignr $6, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_6_bwd) - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_7): - sub $0x80, %rdx - movaps -0x07(%rsi), %xmm1 - movaps 0x09(%rsi), %xmm2 - movaps 0x19(%rsi), %xmm3 - movaps 0x29(%rsi), %xmm4 - movaps 0x39(%rsi), %xmm5 - movaps 0x49(%rsi), %xmm6 - movaps 0x59(%rsi), %xmm7 - movaps 0x69(%rsi), %xmm8 - movaps 0x79(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $7, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $7, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $7, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $7, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $7, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $7, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $7, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $7, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - lea 0x80(%rdi), %rdi - jae L(shl_7) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_7_bwd): - movaps -0x07(%rsi), %xmm1 - - movaps -0x17(%rsi), %xmm2 - palignr $7, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x27(%rsi), %xmm3 - palignr $7, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x37(%rsi), %xmm4 - palignr $7, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x47(%rsi), %xmm5 - palignr $7, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x57(%rsi), %xmm6 - palignr $7, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x67(%rsi), %xmm7 - palignr $7, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x77(%rsi), %xmm8 - palignr $7, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x87(%rsi), %xmm9 - palignr $7, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_7_bwd) - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_8): - sub $0x80, %rdx - movaps -0x08(%rsi), %xmm1 - movaps 0x08(%rsi), %xmm2 - movaps 0x18(%rsi), %xmm3 - movaps 0x28(%rsi), %xmm4 - movaps 0x38(%rsi), %xmm5 - movaps 0x48(%rsi), %xmm6 - movaps 0x58(%rsi), %xmm7 - movaps 0x68(%rsi), %xmm8 - movaps 0x78(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $8, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $8, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $8, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $8, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $8, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $8, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $8, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $8, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - lea 0x80(%rdi), %rdi - jae L(shl_8) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_8_bwd): - movaps -0x08(%rsi), %xmm1 - - movaps -0x18(%rsi), %xmm2 - palignr $8, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x28(%rsi), %xmm3 - palignr $8, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x38(%rsi), %xmm4 - palignr $8, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x48(%rsi), %xmm5 - palignr $8, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x58(%rsi), %xmm6 - palignr $8, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x68(%rsi), %xmm7 - palignr $8, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x78(%rsi), %xmm8 - palignr $8, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x88(%rsi), %xmm9 - palignr $8, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_8_bwd) -L(shl_8_end_bwd): - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_9): - sub $0x80, %rdx - movaps -0x09(%rsi), %xmm1 - movaps 0x07(%rsi), %xmm2 - movaps 0x17(%rsi), %xmm3 - movaps 0x27(%rsi), %xmm4 - movaps 0x37(%rsi), %xmm5 - movaps 0x47(%rsi), %xmm6 - movaps 0x57(%rsi), %xmm7 - movaps 0x67(%rsi), %xmm8 - movaps 0x77(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $9, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $9, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $9, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $9, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $9, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $9, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $9, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $9, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - lea 0x80(%rdi), %rdi - jae L(shl_9) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_9_bwd): - movaps -0x09(%rsi), %xmm1 - - movaps -0x19(%rsi), %xmm2 - palignr $9, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x29(%rsi), %xmm3 - palignr $9, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x39(%rsi), %xmm4 - palignr $9, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x49(%rsi), %xmm5 - palignr $9, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x59(%rsi), %xmm6 - palignr $9, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x69(%rsi), %xmm7 - palignr $9, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x79(%rsi), %xmm8 - palignr $9, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x89(%rsi), %xmm9 - palignr $9, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_9_bwd) - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_10): - sub $0x80, %rdx - movaps -0x0a(%rsi), %xmm1 - movaps 0x06(%rsi), %xmm2 - movaps 0x16(%rsi), %xmm3 - movaps 0x26(%rsi), %xmm4 - movaps 0x36(%rsi), %xmm5 - movaps 0x46(%rsi), %xmm6 - movaps 0x56(%rsi), %xmm7 - movaps 0x66(%rsi), %xmm8 - movaps 0x76(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $10, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $10, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $10, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $10, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $10, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $10, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $10, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $10, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - lea 0x80(%rdi), %rdi - jae L(shl_10) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_10_bwd): - movaps -0x0a(%rsi), %xmm1 - - movaps -0x1a(%rsi), %xmm2 - palignr $10, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x2a(%rsi), %xmm3 - palignr $10, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x3a(%rsi), %xmm4 - palignr $10, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x4a(%rsi), %xmm5 - palignr $10, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x5a(%rsi), %xmm6 - palignr $10, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x6a(%rsi), %xmm7 - palignr $10, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x7a(%rsi), %xmm8 - palignr $10, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x8a(%rsi), %xmm9 - palignr $10, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_10_bwd) - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_11): - sub $0x80, %rdx - movaps -0x0b(%rsi), %xmm1 - movaps 0x05(%rsi), %xmm2 - movaps 0x15(%rsi), %xmm3 - movaps 0x25(%rsi), %xmm4 - movaps 0x35(%rsi), %xmm5 - movaps 0x45(%rsi), %xmm6 - movaps 0x55(%rsi), %xmm7 - movaps 0x65(%rsi), %xmm8 - movaps 0x75(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $11, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $11, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $11, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $11, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $11, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $11, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $11, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $11, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - lea 0x80(%rdi), %rdi - jae L(shl_11) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_11_bwd): - movaps -0x0b(%rsi), %xmm1 - - movaps -0x1b(%rsi), %xmm2 - palignr $11, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x2b(%rsi), %xmm3 - palignr $11, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x3b(%rsi), %xmm4 - palignr $11, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x4b(%rsi), %xmm5 - palignr $11, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x5b(%rsi), %xmm6 - palignr $11, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x6b(%rsi), %xmm7 - palignr $11, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x7b(%rsi), %xmm8 - palignr $11, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x8b(%rsi), %xmm9 - palignr $11, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_11_bwd) - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_12): - sub $0x80, %rdx - movdqa -0x0c(%rsi), %xmm1 - movaps 0x04(%rsi), %xmm2 - movaps 0x14(%rsi), %xmm3 - movaps 0x24(%rsi), %xmm4 - movaps 0x34(%rsi), %xmm5 - movaps 0x44(%rsi), %xmm6 - movaps 0x54(%rsi), %xmm7 - movaps 0x64(%rsi), %xmm8 - movaps 0x74(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $12, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $12, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $12, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $12, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $12, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $12, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $12, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $12, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - - lea 0x80(%rdi), %rdi - jae L(shl_12) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_12_bwd): - movaps -0x0c(%rsi), %xmm1 - - movaps -0x1c(%rsi), %xmm2 - palignr $12, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x2c(%rsi), %xmm3 - palignr $12, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x3c(%rsi), %xmm4 - palignr $12, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x4c(%rsi), %xmm5 - palignr $12, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x5c(%rsi), %xmm6 - palignr $12, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x6c(%rsi), %xmm7 - palignr $12, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x7c(%rsi), %xmm8 - palignr $12, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x8c(%rsi), %xmm9 - palignr $12, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_12_bwd) - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_13): - sub $0x80, %rdx - movaps -0x0d(%rsi), %xmm1 - movaps 0x03(%rsi), %xmm2 - movaps 0x13(%rsi), %xmm3 - movaps 0x23(%rsi), %xmm4 - movaps 0x33(%rsi), %xmm5 - movaps 0x43(%rsi), %xmm6 - movaps 0x53(%rsi), %xmm7 - movaps 0x63(%rsi), %xmm8 - movaps 0x73(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $13, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $13, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $13, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $13, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $13, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $13, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $13, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $13, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - lea 0x80(%rdi), %rdi - jae L(shl_13) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_13_bwd): - movaps -0x0d(%rsi), %xmm1 - - movaps -0x1d(%rsi), %xmm2 - palignr $13, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x2d(%rsi), %xmm3 - palignr $13, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x3d(%rsi), %xmm4 - palignr $13, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x4d(%rsi), %xmm5 - palignr $13, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x5d(%rsi), %xmm6 - palignr $13, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x6d(%rsi), %xmm7 - palignr $13, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x7d(%rsi), %xmm8 - palignr $13, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x8d(%rsi), %xmm9 - palignr $13, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_13_bwd) - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_14): - sub $0x80, %rdx - movaps -0x0e(%rsi), %xmm1 - movaps 0x02(%rsi), %xmm2 - movaps 0x12(%rsi), %xmm3 - movaps 0x22(%rsi), %xmm4 - movaps 0x32(%rsi), %xmm5 - movaps 0x42(%rsi), %xmm6 - movaps 0x52(%rsi), %xmm7 - movaps 0x62(%rsi), %xmm8 - movaps 0x72(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $14, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $14, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $14, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $14, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $14, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $14, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $14, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $14, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - lea 0x80(%rdi), %rdi - jae L(shl_14) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_14_bwd): - movaps -0x0e(%rsi), %xmm1 - - movaps -0x1e(%rsi), %xmm2 - palignr $14, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x2e(%rsi), %xmm3 - palignr $14, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x3e(%rsi), %xmm4 - palignr $14, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x4e(%rsi), %xmm5 - palignr $14, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x5e(%rsi), %xmm6 - palignr $14, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x6e(%rsi), %xmm7 - palignr $14, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x7e(%rsi), %xmm8 - palignr $14, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x8e(%rsi), %xmm9 - palignr $14, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_14_bwd) - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(shl_15): - sub $0x80, %rdx - movaps -0x0f(%rsi), %xmm1 - movaps 0x01(%rsi), %xmm2 - movaps 0x11(%rsi), %xmm3 - movaps 0x21(%rsi), %xmm4 - movaps 0x31(%rsi), %xmm5 - movaps 0x41(%rsi), %xmm6 - movaps 0x51(%rsi), %xmm7 - movaps 0x61(%rsi), %xmm8 - movaps 0x71(%rsi), %xmm9 - lea 0x80(%rsi), %rsi - palignr $15, %xmm8, %xmm9 - movaps %xmm9, 0x70(%rdi) - palignr $15, %xmm7, %xmm8 - movaps %xmm8, 0x60(%rdi) - palignr $15, %xmm6, %xmm7 - movaps %xmm7, 0x50(%rdi) - palignr $15, %xmm5, %xmm6 - movaps %xmm6, 0x40(%rdi) - palignr $15, %xmm4, %xmm5 - movaps %xmm5, 0x30(%rdi) - palignr $15, %xmm3, %xmm4 - movaps %xmm4, 0x20(%rdi) - palignr $15, %xmm2, %xmm3 - movaps %xmm3, 0x10(%rdi) - palignr $15, %xmm1, %xmm2 - movaps %xmm2, (%rdi) - lea 0x80(%rdi), %rdi - jae L(shl_15) - movdqu %xmm0, (%r8) - add $0x80, %rdx - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(shl_15_bwd): - movaps -0x0f(%rsi), %xmm1 - - movaps -0x1f(%rsi), %xmm2 - palignr $15, %xmm2, %xmm1 - movaps %xmm1, -0x10(%rdi) - - movaps -0x2f(%rsi), %xmm3 - palignr $15, %xmm3, %xmm2 - movaps %xmm2, -0x20(%rdi) - - movaps -0x3f(%rsi), %xmm4 - palignr $15, %xmm4, %xmm3 - movaps %xmm3, -0x30(%rdi) - - movaps -0x4f(%rsi), %xmm5 - palignr $15, %xmm5, %xmm4 - movaps %xmm4, -0x40(%rdi) - - movaps -0x5f(%rsi), %xmm6 - palignr $15, %xmm6, %xmm5 - movaps %xmm5, -0x50(%rdi) - - movaps -0x6f(%rsi), %xmm7 - palignr $15, %xmm7, %xmm6 - movaps %xmm6, -0x60(%rdi) - - movaps -0x7f(%rsi), %xmm8 - palignr $15, %xmm8, %xmm7 - movaps %xmm7, -0x70(%rdi) - - movaps -0x8f(%rsi), %xmm9 - palignr $15, %xmm9, %xmm8 - movaps %xmm8, -0x80(%rdi) - - sub $0x80, %rdx - lea -0x80(%rdi), %rdi - lea -0x80(%rsi), %rsi - jae L(shl_15_bwd) - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rdi - sub %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(gobble_mem_fwd): - movdqu (%rsi), %xmm1 - movdqu %xmm0, (%r8) - movdqa %xmm1, (%rdi) - sub $16, %rdx - add $16, %rsi - add $16, %rdi - -#ifdef SHARED_CACHE_SIZE_HALF - mov $SHARED_CACHE_SIZE_HALF, %RCX_LP -#else - mov __x86_shared_cache_size_half(%rip), %RCX_LP -#endif -#ifdef USE_AS_MEMMOVE - mov %rsi, %r9 - sub %rdi, %r9 - cmp %rdx, %r9 - jae L(memmove_is_memcpy_fwd) - cmp %rcx, %r9 - jbe L(ll_cache_copy_fwd_start) -L(memmove_is_memcpy_fwd): -#endif - cmp %rcx, %rdx - ja L(bigger_in_fwd) - mov %rdx, %rcx -L(bigger_in_fwd): - sub %rcx, %rdx - cmp $0x1000, %rdx - jbe L(ll_cache_copy_fwd) - - mov %rcx, %r9 - shl $3, %r9 - cmp %r9, %rdx - jbe L(2steps_copy_fwd) - add %rcx, %rdx - xor %rcx, %rcx -L(2steps_copy_fwd): - sub $0x80, %rdx -L(gobble_mem_fwd_loop): - sub $0x80, %rdx - prefetcht0 0x200(%rsi) - prefetcht0 0x300(%rsi) - movdqu (%rsi), %xmm0 - movdqu 0x10(%rsi), %xmm1 - movdqu 0x20(%rsi), %xmm2 - movdqu 0x30(%rsi), %xmm3 - movdqu 0x40(%rsi), %xmm4 - movdqu 0x50(%rsi), %xmm5 - movdqu 0x60(%rsi), %xmm6 - movdqu 0x70(%rsi), %xmm7 - lfence - movntdq %xmm0, (%rdi) - movntdq %xmm1, 0x10(%rdi) - movntdq %xmm2, 0x20(%rdi) - movntdq %xmm3, 0x30(%rdi) - movntdq %xmm4, 0x40(%rdi) - movntdq %xmm5, 0x50(%rdi) - movntdq %xmm6, 0x60(%rdi) - movntdq %xmm7, 0x70(%rdi) - lea 0x80(%rsi), %rsi - lea 0x80(%rdi), %rdi - jae L(gobble_mem_fwd_loop) - sfence - cmp $0x80, %rcx - jb L(gobble_mem_fwd_end) - add $0x80, %rdx -L(ll_cache_copy_fwd): - add %rcx, %rdx -L(ll_cache_copy_fwd_start): - sub $0x80, %rdx -L(gobble_ll_loop_fwd): - prefetchnta 0x1c0(%rsi) - prefetchnta 0x280(%rsi) - prefetchnta 0x1c0(%rdi) - prefetchnta 0x280(%rdi) - sub $0x80, %rdx - movdqu (%rsi), %xmm0 - movdqu 0x10(%rsi), %xmm1 - movdqu 0x20(%rsi), %xmm2 - movdqu 0x30(%rsi), %xmm3 - movdqu 0x40(%rsi), %xmm4 - movdqu 0x50(%rsi), %xmm5 - movdqu 0x60(%rsi), %xmm6 - movdqu 0x70(%rsi), %xmm7 - movdqa %xmm0, (%rdi) - movdqa %xmm1, 0x10(%rdi) - movdqa %xmm2, 0x20(%rdi) - movdqa %xmm3, 0x30(%rdi) - movdqa %xmm4, 0x40(%rdi) - movdqa %xmm5, 0x50(%rdi) - movdqa %xmm6, 0x60(%rdi) - movdqa %xmm7, 0x70(%rdi) - lea 0x80(%rsi), %rsi - lea 0x80(%rdi), %rdi - jae L(gobble_ll_loop_fwd) -L(gobble_mem_fwd_end): - add $0x80, %rdx - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_fwd), %rdx, 4) - - .p2align 4 -L(gobble_mem_bwd): - add %rdx, %rsi - add %rdx, %rdi - - movdqu -16(%rsi), %xmm0 - lea -16(%rdi), %r8 - mov %rdi, %r9 - and $-16, %rdi - sub %rdi, %r9 - sub %r9, %rsi - sub %r9, %rdx - - -#ifdef SHARED_CACHE_SIZE_HALF - mov $SHARED_CACHE_SIZE_HALF, %RCX_LP -#else - mov __x86_shared_cache_size_half(%rip), %RCX_LP -#endif -#ifdef USE_AS_MEMMOVE - mov %rdi, %r9 - sub %rsi, %r9 - cmp %rdx, %r9 - jae L(memmove_is_memcpy_bwd) - cmp %rcx, %r9 - jbe L(ll_cache_copy_bwd_start) -L(memmove_is_memcpy_bwd): -#endif - cmp %rcx, %rdx - ja L(bigger) - mov %rdx, %rcx -L(bigger): - sub %rcx, %rdx - cmp $0x1000, %rdx - jbe L(ll_cache_copy) - - mov %rcx, %r9 - shl $3, %r9 - cmp %r9, %rdx - jbe L(2steps_copy) - add %rcx, %rdx - xor %rcx, %rcx -L(2steps_copy): - sub $0x80, %rdx -L(gobble_mem_bwd_loop): - sub $0x80, %rdx - prefetcht0 -0x200(%rsi) - prefetcht0 -0x300(%rsi) - movdqu -0x10(%rsi), %xmm1 - movdqu -0x20(%rsi), %xmm2 - movdqu -0x30(%rsi), %xmm3 - movdqu -0x40(%rsi), %xmm4 - movdqu -0x50(%rsi), %xmm5 - movdqu -0x60(%rsi), %xmm6 - movdqu -0x70(%rsi), %xmm7 - movdqu -0x80(%rsi), %xmm8 - lfence - movntdq %xmm1, -0x10(%rdi) - movntdq %xmm2, -0x20(%rdi) - movntdq %xmm3, -0x30(%rdi) - movntdq %xmm4, -0x40(%rdi) - movntdq %xmm5, -0x50(%rdi) - movntdq %xmm6, -0x60(%rdi) - movntdq %xmm7, -0x70(%rdi) - movntdq %xmm8, -0x80(%rdi) - lea -0x80(%rsi), %rsi - lea -0x80(%rdi), %rdi - jae L(gobble_mem_bwd_loop) - sfence - cmp $0x80, %rcx - jb L(gobble_mem_bwd_end) - add $0x80, %rdx -L(ll_cache_copy): - add %rcx, %rdx -L(ll_cache_copy_bwd_start): - sub $0x80, %rdx -L(gobble_ll_loop): - prefetchnta -0x1c0(%rsi) - prefetchnta -0x280(%rsi) - prefetchnta -0x1c0(%rdi) - prefetchnta -0x280(%rdi) - sub $0x80, %rdx - movdqu -0x10(%rsi), %xmm1 - movdqu -0x20(%rsi), %xmm2 - movdqu -0x30(%rsi), %xmm3 - movdqu -0x40(%rsi), %xmm4 - movdqu -0x50(%rsi), %xmm5 - movdqu -0x60(%rsi), %xmm6 - movdqu -0x70(%rsi), %xmm7 - movdqu -0x80(%rsi), %xmm8 - movdqa %xmm1, -0x10(%rdi) - movdqa %xmm2, -0x20(%rdi) - movdqa %xmm3, -0x30(%rdi) - movdqa %xmm4, -0x40(%rdi) - movdqa %xmm5, -0x50(%rdi) - movdqa %xmm6, -0x60(%rdi) - movdqa %xmm7, -0x70(%rdi) - movdqa %xmm8, -0x80(%rdi) - lea -0x80(%rsi), %rsi - lea -0x80(%rdi), %rdi - jae L(gobble_ll_loop) -L(gobble_mem_bwd_end): - movdqu %xmm0, (%r8) - add $0x80, %rdx - sub %rdx, %rsi - sub %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY (L(table_144_bytes_bwd), %rdx, 4) - - .p2align 4 -L(fwd_write_128bytes): - lddqu -128(%rsi), %xmm0 - movdqu %xmm0, -128(%rdi) -L(fwd_write_112bytes): - lddqu -112(%rsi), %xmm0 - movdqu %xmm0, -112(%rdi) -L(fwd_write_96bytes): - lddqu -96(%rsi), %xmm0 - movdqu %xmm0, -96(%rdi) -L(fwd_write_80bytes): - lddqu -80(%rsi), %xmm0 - movdqu %xmm0, -80(%rdi) -L(fwd_write_64bytes): - lddqu -64(%rsi), %xmm0 - movdqu %xmm0, -64(%rdi) -L(fwd_write_48bytes): - lddqu -48(%rsi), %xmm0 - movdqu %xmm0, -48(%rdi) -L(fwd_write_32bytes): - lddqu -32(%rsi), %xmm0 - movdqu %xmm0, -32(%rdi) -L(fwd_write_16bytes): - lddqu -16(%rsi), %xmm0 - movdqu %xmm0, -16(%rdi) -L(fwd_write_0bytes): - ret - - - .p2align 4 -L(fwd_write_143bytes): - lddqu -143(%rsi), %xmm0 - movdqu %xmm0, -143(%rdi) -L(fwd_write_127bytes): - lddqu -127(%rsi), %xmm0 - movdqu %xmm0, -127(%rdi) -L(fwd_write_111bytes): - lddqu -111(%rsi), %xmm0 - movdqu %xmm0, -111(%rdi) -L(fwd_write_95bytes): - lddqu -95(%rsi), %xmm0 - movdqu %xmm0, -95(%rdi) -L(fwd_write_79bytes): - lddqu -79(%rsi), %xmm0 - movdqu %xmm0, -79(%rdi) -L(fwd_write_63bytes): - lddqu -63(%rsi), %xmm0 - movdqu %xmm0, -63(%rdi) -L(fwd_write_47bytes): - lddqu -47(%rsi), %xmm0 - movdqu %xmm0, -47(%rdi) -L(fwd_write_31bytes): - lddqu -31(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -31(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_15bytes): - mov -15(%rsi), %rdx - mov -8(%rsi), %rcx - mov %rdx, -15(%rdi) - mov %rcx, -8(%rdi) - ret - - .p2align 4 -L(fwd_write_142bytes): - lddqu -142(%rsi), %xmm0 - movdqu %xmm0, -142(%rdi) -L(fwd_write_126bytes): - lddqu -126(%rsi), %xmm0 - movdqu %xmm0, -126(%rdi) -L(fwd_write_110bytes): - lddqu -110(%rsi), %xmm0 - movdqu %xmm0, -110(%rdi) -L(fwd_write_94bytes): - lddqu -94(%rsi), %xmm0 - movdqu %xmm0, -94(%rdi) -L(fwd_write_78bytes): - lddqu -78(%rsi), %xmm0 - movdqu %xmm0, -78(%rdi) -L(fwd_write_62bytes): - lddqu -62(%rsi), %xmm0 - movdqu %xmm0, -62(%rdi) -L(fwd_write_46bytes): - lddqu -46(%rsi), %xmm0 - movdqu %xmm0, -46(%rdi) -L(fwd_write_30bytes): - lddqu -30(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -30(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_14bytes): - mov -14(%rsi), %rdx - mov -8(%rsi), %rcx - mov %rdx, -14(%rdi) - mov %rcx, -8(%rdi) - ret - - .p2align 4 -L(fwd_write_141bytes): - lddqu -141(%rsi), %xmm0 - movdqu %xmm0, -141(%rdi) -L(fwd_write_125bytes): - lddqu -125(%rsi), %xmm0 - movdqu %xmm0, -125(%rdi) -L(fwd_write_109bytes): - lddqu -109(%rsi), %xmm0 - movdqu %xmm0, -109(%rdi) -L(fwd_write_93bytes): - lddqu -93(%rsi), %xmm0 - movdqu %xmm0, -93(%rdi) -L(fwd_write_77bytes): - lddqu -77(%rsi), %xmm0 - movdqu %xmm0, -77(%rdi) -L(fwd_write_61bytes): - lddqu -61(%rsi), %xmm0 - movdqu %xmm0, -61(%rdi) -L(fwd_write_45bytes): - lddqu -45(%rsi), %xmm0 - movdqu %xmm0, -45(%rdi) -L(fwd_write_29bytes): - lddqu -29(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -29(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_13bytes): - mov -13(%rsi), %rdx - mov -8(%rsi), %rcx - mov %rdx, -13(%rdi) - mov %rcx, -8(%rdi) - ret - - .p2align 4 -L(fwd_write_140bytes): - lddqu -140(%rsi), %xmm0 - movdqu %xmm0, -140(%rdi) -L(fwd_write_124bytes): - lddqu -124(%rsi), %xmm0 - movdqu %xmm0, -124(%rdi) -L(fwd_write_108bytes): - lddqu -108(%rsi), %xmm0 - movdqu %xmm0, -108(%rdi) -L(fwd_write_92bytes): - lddqu -92(%rsi), %xmm0 - movdqu %xmm0, -92(%rdi) -L(fwd_write_76bytes): - lddqu -76(%rsi), %xmm0 - movdqu %xmm0, -76(%rdi) -L(fwd_write_60bytes): - lddqu -60(%rsi), %xmm0 - movdqu %xmm0, -60(%rdi) -L(fwd_write_44bytes): - lddqu -44(%rsi), %xmm0 - movdqu %xmm0, -44(%rdi) -L(fwd_write_28bytes): - lddqu -28(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -28(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_12bytes): - mov -12(%rsi), %rdx - mov -4(%rsi), %ecx - mov %rdx, -12(%rdi) - mov %ecx, -4(%rdi) - ret - - .p2align 4 -L(fwd_write_139bytes): - lddqu -139(%rsi), %xmm0 - movdqu %xmm0, -139(%rdi) -L(fwd_write_123bytes): - lddqu -123(%rsi), %xmm0 - movdqu %xmm0, -123(%rdi) -L(fwd_write_107bytes): - lddqu -107(%rsi), %xmm0 - movdqu %xmm0, -107(%rdi) -L(fwd_write_91bytes): - lddqu -91(%rsi), %xmm0 - movdqu %xmm0, -91(%rdi) -L(fwd_write_75bytes): - lddqu -75(%rsi), %xmm0 - movdqu %xmm0, -75(%rdi) -L(fwd_write_59bytes): - lddqu -59(%rsi), %xmm0 - movdqu %xmm0, -59(%rdi) -L(fwd_write_43bytes): - lddqu -43(%rsi), %xmm0 - movdqu %xmm0, -43(%rdi) -L(fwd_write_27bytes): - lddqu -27(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -27(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_11bytes): - mov -11(%rsi), %rdx - mov -4(%rsi), %ecx - mov %rdx, -11(%rdi) - mov %ecx, -4(%rdi) - ret - - .p2align 4 -L(fwd_write_138bytes): - lddqu -138(%rsi), %xmm0 - movdqu %xmm0, -138(%rdi) -L(fwd_write_122bytes): - lddqu -122(%rsi), %xmm0 - movdqu %xmm0, -122(%rdi) -L(fwd_write_106bytes): - lddqu -106(%rsi), %xmm0 - movdqu %xmm0, -106(%rdi) -L(fwd_write_90bytes): - lddqu -90(%rsi), %xmm0 - movdqu %xmm0, -90(%rdi) -L(fwd_write_74bytes): - lddqu -74(%rsi), %xmm0 - movdqu %xmm0, -74(%rdi) -L(fwd_write_58bytes): - lddqu -58(%rsi), %xmm0 - movdqu %xmm0, -58(%rdi) -L(fwd_write_42bytes): - lddqu -42(%rsi), %xmm0 - movdqu %xmm0, -42(%rdi) -L(fwd_write_26bytes): - lddqu -26(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -26(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_10bytes): - mov -10(%rsi), %rdx - mov -4(%rsi), %ecx - mov %rdx, -10(%rdi) - mov %ecx, -4(%rdi) - ret - - .p2align 4 -L(fwd_write_137bytes): - lddqu -137(%rsi), %xmm0 - movdqu %xmm0, -137(%rdi) -L(fwd_write_121bytes): - lddqu -121(%rsi), %xmm0 - movdqu %xmm0, -121(%rdi) -L(fwd_write_105bytes): - lddqu -105(%rsi), %xmm0 - movdqu %xmm0, -105(%rdi) -L(fwd_write_89bytes): - lddqu -89(%rsi), %xmm0 - movdqu %xmm0, -89(%rdi) -L(fwd_write_73bytes): - lddqu -73(%rsi), %xmm0 - movdqu %xmm0, -73(%rdi) -L(fwd_write_57bytes): - lddqu -57(%rsi), %xmm0 - movdqu %xmm0, -57(%rdi) -L(fwd_write_41bytes): - lddqu -41(%rsi), %xmm0 - movdqu %xmm0, -41(%rdi) -L(fwd_write_25bytes): - lddqu -25(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -25(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_9bytes): - mov -9(%rsi), %rdx - mov -4(%rsi), %ecx - mov %rdx, -9(%rdi) - mov %ecx, -4(%rdi) - ret - - .p2align 4 -L(fwd_write_136bytes): - lddqu -136(%rsi), %xmm0 - movdqu %xmm0, -136(%rdi) -L(fwd_write_120bytes): - lddqu -120(%rsi), %xmm0 - movdqu %xmm0, -120(%rdi) -L(fwd_write_104bytes): - lddqu -104(%rsi), %xmm0 - movdqu %xmm0, -104(%rdi) -L(fwd_write_88bytes): - lddqu -88(%rsi), %xmm0 - movdqu %xmm0, -88(%rdi) -L(fwd_write_72bytes): - lddqu -72(%rsi), %xmm0 - movdqu %xmm0, -72(%rdi) -L(fwd_write_56bytes): - lddqu -56(%rsi), %xmm0 - movdqu %xmm0, -56(%rdi) -L(fwd_write_40bytes): - lddqu -40(%rsi), %xmm0 - movdqu %xmm0, -40(%rdi) -L(fwd_write_24bytes): - lddqu -24(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -24(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_8bytes): - mov -8(%rsi), %rdx - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(fwd_write_135bytes): - lddqu -135(%rsi), %xmm0 - movdqu %xmm0, -135(%rdi) -L(fwd_write_119bytes): - lddqu -119(%rsi), %xmm0 - movdqu %xmm0, -119(%rdi) -L(fwd_write_103bytes): - lddqu -103(%rsi), %xmm0 - movdqu %xmm0, -103(%rdi) -L(fwd_write_87bytes): - lddqu -87(%rsi), %xmm0 - movdqu %xmm0, -87(%rdi) -L(fwd_write_71bytes): - lddqu -71(%rsi), %xmm0 - movdqu %xmm0, -71(%rdi) -L(fwd_write_55bytes): - lddqu -55(%rsi), %xmm0 - movdqu %xmm0, -55(%rdi) -L(fwd_write_39bytes): - lddqu -39(%rsi), %xmm0 - movdqu %xmm0, -39(%rdi) -L(fwd_write_23bytes): - lddqu -23(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -23(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_7bytes): - mov -7(%rsi), %edx - mov -4(%rsi), %ecx - mov %edx, -7(%rdi) - mov %ecx, -4(%rdi) - ret - - .p2align 4 -L(fwd_write_134bytes): - lddqu -134(%rsi), %xmm0 - movdqu %xmm0, -134(%rdi) -L(fwd_write_118bytes): - lddqu -118(%rsi), %xmm0 - movdqu %xmm0, -118(%rdi) -L(fwd_write_102bytes): - lddqu -102(%rsi), %xmm0 - movdqu %xmm0, -102(%rdi) -L(fwd_write_86bytes): - lddqu -86(%rsi), %xmm0 - movdqu %xmm0, -86(%rdi) -L(fwd_write_70bytes): - lddqu -70(%rsi), %xmm0 - movdqu %xmm0, -70(%rdi) -L(fwd_write_54bytes): - lddqu -54(%rsi), %xmm0 - movdqu %xmm0, -54(%rdi) -L(fwd_write_38bytes): - lddqu -38(%rsi), %xmm0 - movdqu %xmm0, -38(%rdi) -L(fwd_write_22bytes): - lddqu -22(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -22(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_6bytes): - mov -6(%rsi), %edx - mov -4(%rsi), %ecx - mov %edx, -6(%rdi) - mov %ecx, -4(%rdi) - ret - - .p2align 4 -L(fwd_write_133bytes): - lddqu -133(%rsi), %xmm0 - movdqu %xmm0, -133(%rdi) -L(fwd_write_117bytes): - lddqu -117(%rsi), %xmm0 - movdqu %xmm0, -117(%rdi) -L(fwd_write_101bytes): - lddqu -101(%rsi), %xmm0 - movdqu %xmm0, -101(%rdi) -L(fwd_write_85bytes): - lddqu -85(%rsi), %xmm0 - movdqu %xmm0, -85(%rdi) -L(fwd_write_69bytes): - lddqu -69(%rsi), %xmm0 - movdqu %xmm0, -69(%rdi) -L(fwd_write_53bytes): - lddqu -53(%rsi), %xmm0 - movdqu %xmm0, -53(%rdi) -L(fwd_write_37bytes): - lddqu -37(%rsi), %xmm0 - movdqu %xmm0, -37(%rdi) -L(fwd_write_21bytes): - lddqu -21(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -21(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_5bytes): - mov -5(%rsi), %edx - mov -4(%rsi), %ecx - mov %edx, -5(%rdi) - mov %ecx, -4(%rdi) - ret - - .p2align 4 -L(fwd_write_132bytes): - lddqu -132(%rsi), %xmm0 - movdqu %xmm0, -132(%rdi) -L(fwd_write_116bytes): - lddqu -116(%rsi), %xmm0 - movdqu %xmm0, -116(%rdi) -L(fwd_write_100bytes): - lddqu -100(%rsi), %xmm0 - movdqu %xmm0, -100(%rdi) -L(fwd_write_84bytes): - lddqu -84(%rsi), %xmm0 - movdqu %xmm0, -84(%rdi) -L(fwd_write_68bytes): - lddqu -68(%rsi), %xmm0 - movdqu %xmm0, -68(%rdi) -L(fwd_write_52bytes): - lddqu -52(%rsi), %xmm0 - movdqu %xmm0, -52(%rdi) -L(fwd_write_36bytes): - lddqu -36(%rsi), %xmm0 - movdqu %xmm0, -36(%rdi) -L(fwd_write_20bytes): - lddqu -20(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -20(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_4bytes): - mov -4(%rsi), %edx - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(fwd_write_131bytes): - lddqu -131(%rsi), %xmm0 - movdqu %xmm0, -131(%rdi) -L(fwd_write_115bytes): - lddqu -115(%rsi), %xmm0 - movdqu %xmm0, -115(%rdi) -L(fwd_write_99bytes): - lddqu -99(%rsi), %xmm0 - movdqu %xmm0, -99(%rdi) -L(fwd_write_83bytes): - lddqu -83(%rsi), %xmm0 - movdqu %xmm0, -83(%rdi) -L(fwd_write_67bytes): - lddqu -67(%rsi), %xmm0 - movdqu %xmm0, -67(%rdi) -L(fwd_write_51bytes): - lddqu -51(%rsi), %xmm0 - movdqu %xmm0, -51(%rdi) -L(fwd_write_35bytes): - lddqu -35(%rsi), %xmm0 - movdqu %xmm0, -35(%rdi) -L(fwd_write_19bytes): - lddqu -19(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -19(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_3bytes): - mov -3(%rsi), %dx - mov -2(%rsi), %cx - mov %dx, -3(%rdi) - mov %cx, -2(%rdi) - ret - - .p2align 4 -L(fwd_write_130bytes): - lddqu -130(%rsi), %xmm0 - movdqu %xmm0, -130(%rdi) -L(fwd_write_114bytes): - lddqu -114(%rsi), %xmm0 - movdqu %xmm0, -114(%rdi) -L(fwd_write_98bytes): - lddqu -98(%rsi), %xmm0 - movdqu %xmm0, -98(%rdi) -L(fwd_write_82bytes): - lddqu -82(%rsi), %xmm0 - movdqu %xmm0, -82(%rdi) -L(fwd_write_66bytes): - lddqu -66(%rsi), %xmm0 - movdqu %xmm0, -66(%rdi) -L(fwd_write_50bytes): - lddqu -50(%rsi), %xmm0 - movdqu %xmm0, -50(%rdi) -L(fwd_write_34bytes): - lddqu -34(%rsi), %xmm0 - movdqu %xmm0, -34(%rdi) -L(fwd_write_18bytes): - lddqu -18(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -18(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_2bytes): - movzwl -2(%rsi), %edx - mov %dx, -2(%rdi) - ret - - .p2align 4 -L(fwd_write_129bytes): - lddqu -129(%rsi), %xmm0 - movdqu %xmm0, -129(%rdi) -L(fwd_write_113bytes): - lddqu -113(%rsi), %xmm0 - movdqu %xmm0, -113(%rdi) -L(fwd_write_97bytes): - lddqu -97(%rsi), %xmm0 - movdqu %xmm0, -97(%rdi) -L(fwd_write_81bytes): - lddqu -81(%rsi), %xmm0 - movdqu %xmm0, -81(%rdi) -L(fwd_write_65bytes): - lddqu -65(%rsi), %xmm0 - movdqu %xmm0, -65(%rdi) -L(fwd_write_49bytes): - lddqu -49(%rsi), %xmm0 - movdqu %xmm0, -49(%rdi) -L(fwd_write_33bytes): - lddqu -33(%rsi), %xmm0 - movdqu %xmm0, -33(%rdi) -L(fwd_write_17bytes): - lddqu -17(%rsi), %xmm0 - lddqu -16(%rsi), %xmm1 - movdqu %xmm0, -17(%rdi) - movdqu %xmm1, -16(%rdi) - ret - - .p2align 4 -L(fwd_write_1bytes): - movzbl -1(%rsi), %edx - mov %dl, -1(%rdi) - ret - - .p2align 4 -L(bwd_write_128bytes): - lddqu 112(%rsi), %xmm0 - movdqu %xmm0, 112(%rdi) -L(bwd_write_112bytes): - lddqu 96(%rsi), %xmm0 - movdqu %xmm0, 96(%rdi) -L(bwd_write_96bytes): - lddqu 80(%rsi), %xmm0 - movdqu %xmm0, 80(%rdi) -L(bwd_write_80bytes): - lddqu 64(%rsi), %xmm0 - movdqu %xmm0, 64(%rdi) -L(bwd_write_64bytes): - lddqu 48(%rsi), %xmm0 - movdqu %xmm0, 48(%rdi) -L(bwd_write_48bytes): - lddqu 32(%rsi), %xmm0 - movdqu %xmm0, 32(%rdi) -L(bwd_write_32bytes): - lddqu 16(%rsi), %xmm0 - movdqu %xmm0, 16(%rdi) -L(bwd_write_16bytes): - lddqu (%rsi), %xmm0 - movdqu %xmm0, (%rdi) -L(bwd_write_0bytes): - ret - - .p2align 4 -L(bwd_write_143bytes): - lddqu 127(%rsi), %xmm0 - movdqu %xmm0, 127(%rdi) -L(bwd_write_127bytes): - lddqu 111(%rsi), %xmm0 - movdqu %xmm0, 111(%rdi) -L(bwd_write_111bytes): - lddqu 95(%rsi), %xmm0 - movdqu %xmm0, 95(%rdi) -L(bwd_write_95bytes): - lddqu 79(%rsi), %xmm0 - movdqu %xmm0, 79(%rdi) -L(bwd_write_79bytes): - lddqu 63(%rsi), %xmm0 - movdqu %xmm0, 63(%rdi) -L(bwd_write_63bytes): - lddqu 47(%rsi), %xmm0 - movdqu %xmm0, 47(%rdi) -L(bwd_write_47bytes): - lddqu 31(%rsi), %xmm0 - movdqu %xmm0, 31(%rdi) -L(bwd_write_31bytes): - lddqu 15(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 15(%rdi) - movdqu %xmm1, (%rdi) - ret - - - .p2align 4 -L(bwd_write_15bytes): - mov 7(%rsi), %rdx - mov (%rsi), %rcx - mov %rdx, 7(%rdi) - mov %rcx, (%rdi) - ret - - .p2align 4 -L(bwd_write_142bytes): - lddqu 126(%rsi), %xmm0 - movdqu %xmm0, 126(%rdi) -L(bwd_write_126bytes): - lddqu 110(%rsi), %xmm0 - movdqu %xmm0, 110(%rdi) -L(bwd_write_110bytes): - lddqu 94(%rsi), %xmm0 - movdqu %xmm0, 94(%rdi) -L(bwd_write_94bytes): - lddqu 78(%rsi), %xmm0 - movdqu %xmm0, 78(%rdi) -L(bwd_write_78bytes): - lddqu 62(%rsi), %xmm0 - movdqu %xmm0, 62(%rdi) -L(bwd_write_62bytes): - lddqu 46(%rsi), %xmm0 - movdqu %xmm0, 46(%rdi) -L(bwd_write_46bytes): - lddqu 30(%rsi), %xmm0 - movdqu %xmm0, 30(%rdi) -L(bwd_write_30bytes): - lddqu 14(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 14(%rdi) - movdqu %xmm1, (%rdi) - ret - - .p2align 4 -L(bwd_write_14bytes): - mov 6(%rsi), %rdx - mov (%rsi), %rcx - mov %rdx, 6(%rdi) - mov %rcx, (%rdi) - ret - - .p2align 4 -L(bwd_write_141bytes): - lddqu 125(%rsi), %xmm0 - movdqu %xmm0, 125(%rdi) -L(bwd_write_125bytes): - lddqu 109(%rsi), %xmm0 - movdqu %xmm0, 109(%rdi) -L(bwd_write_109bytes): - lddqu 93(%rsi), %xmm0 - movdqu %xmm0, 93(%rdi) -L(bwd_write_93bytes): - lddqu 77(%rsi), %xmm0 - movdqu %xmm0, 77(%rdi) -L(bwd_write_77bytes): - lddqu 61(%rsi), %xmm0 - movdqu %xmm0, 61(%rdi) -L(bwd_write_61bytes): - lddqu 45(%rsi), %xmm0 - movdqu %xmm0, 45(%rdi) -L(bwd_write_45bytes): - lddqu 29(%rsi), %xmm0 - movdqu %xmm0, 29(%rdi) -L(bwd_write_29bytes): - lddqu 13(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 13(%rdi) - movdqu %xmm1, (%rdi) - ret - - .p2align 4 -L(bwd_write_13bytes): - mov 5(%rsi), %rdx - mov (%rsi), %rcx - mov %rdx, 5(%rdi) - mov %rcx, (%rdi) - ret - - .p2align 4 -L(bwd_write_140bytes): - lddqu 124(%rsi), %xmm0 - movdqu %xmm0, 124(%rdi) -L(bwd_write_124bytes): - lddqu 108(%rsi), %xmm0 - movdqu %xmm0, 108(%rdi) -L(bwd_write_108bytes): - lddqu 92(%rsi), %xmm0 - movdqu %xmm0, 92(%rdi) -L(bwd_write_92bytes): - lddqu 76(%rsi), %xmm0 - movdqu %xmm0, 76(%rdi) -L(bwd_write_76bytes): - lddqu 60(%rsi), %xmm0 - movdqu %xmm0, 60(%rdi) -L(bwd_write_60bytes): - lddqu 44(%rsi), %xmm0 - movdqu %xmm0, 44(%rdi) -L(bwd_write_44bytes): - lddqu 28(%rsi), %xmm0 - movdqu %xmm0, 28(%rdi) -L(bwd_write_28bytes): - lddqu 12(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 12(%rdi) - movdqu %xmm1, (%rdi) - ret - - .p2align 4 -L(bwd_write_12bytes): - mov 4(%rsi), %rdx - mov (%rsi), %rcx - mov %rdx, 4(%rdi) - mov %rcx, (%rdi) - ret - - .p2align 4 -L(bwd_write_139bytes): - lddqu 123(%rsi), %xmm0 - movdqu %xmm0, 123(%rdi) -L(bwd_write_123bytes): - lddqu 107(%rsi), %xmm0 - movdqu %xmm0, 107(%rdi) -L(bwd_write_107bytes): - lddqu 91(%rsi), %xmm0 - movdqu %xmm0, 91(%rdi) -L(bwd_write_91bytes): - lddqu 75(%rsi), %xmm0 - movdqu %xmm0, 75(%rdi) -L(bwd_write_75bytes): - lddqu 59(%rsi), %xmm0 - movdqu %xmm0, 59(%rdi) -L(bwd_write_59bytes): - lddqu 43(%rsi), %xmm0 - movdqu %xmm0, 43(%rdi) -L(bwd_write_43bytes): - lddqu 27(%rsi), %xmm0 - movdqu %xmm0, 27(%rdi) -L(bwd_write_27bytes): - lddqu 11(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 11(%rdi) - movdqu %xmm1, (%rdi) - ret - - .p2align 4 -L(bwd_write_11bytes): - mov 3(%rsi), %rdx - mov (%rsi), %rcx - mov %rdx, 3(%rdi) - mov %rcx, (%rdi) - ret - - .p2align 4 -L(bwd_write_138bytes): - lddqu 122(%rsi), %xmm0 - movdqu %xmm0, 122(%rdi) -L(bwd_write_122bytes): - lddqu 106(%rsi), %xmm0 - movdqu %xmm0, 106(%rdi) -L(bwd_write_106bytes): - lddqu 90(%rsi), %xmm0 - movdqu %xmm0, 90(%rdi) -L(bwd_write_90bytes): - lddqu 74(%rsi), %xmm0 - movdqu %xmm0, 74(%rdi) -L(bwd_write_74bytes): - lddqu 58(%rsi), %xmm0 - movdqu %xmm0, 58(%rdi) -L(bwd_write_58bytes): - lddqu 42(%rsi), %xmm0 - movdqu %xmm0, 42(%rdi) -L(bwd_write_42bytes): - lddqu 26(%rsi), %xmm0 - movdqu %xmm0, 26(%rdi) -L(bwd_write_26bytes): - lddqu 10(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 10(%rdi) - movdqu %xmm1, (%rdi) - ret - - .p2align 4 -L(bwd_write_10bytes): - mov 2(%rsi), %rdx - mov (%rsi), %rcx - mov %rdx, 2(%rdi) - mov %rcx, (%rdi) - ret - - .p2align 4 -L(bwd_write_137bytes): - lddqu 121(%rsi), %xmm0 - movdqu %xmm0, 121(%rdi) -L(bwd_write_121bytes): - lddqu 105(%rsi), %xmm0 - movdqu %xmm0, 105(%rdi) -L(bwd_write_105bytes): - lddqu 89(%rsi), %xmm0 - movdqu %xmm0, 89(%rdi) -L(bwd_write_89bytes): - lddqu 73(%rsi), %xmm0 - movdqu %xmm0, 73(%rdi) -L(bwd_write_73bytes): - lddqu 57(%rsi), %xmm0 - movdqu %xmm0, 57(%rdi) -L(bwd_write_57bytes): - lddqu 41(%rsi), %xmm0 - movdqu %xmm0, 41(%rdi) -L(bwd_write_41bytes): - lddqu 25(%rsi), %xmm0 - movdqu %xmm0, 25(%rdi) -L(bwd_write_25bytes): - lddqu 9(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 9(%rdi) - movdqu %xmm1, (%rdi) - ret - - .p2align 4 -L(bwd_write_9bytes): - mov 1(%rsi), %rdx - mov (%rsi), %rcx - mov %rdx, 1(%rdi) - mov %rcx, (%rdi) - ret - - .p2align 4 -L(bwd_write_136bytes): - lddqu 120(%rsi), %xmm0 - movdqu %xmm0, 120(%rdi) -L(bwd_write_120bytes): - lddqu 104(%rsi), %xmm0 - movdqu %xmm0, 104(%rdi) -L(bwd_write_104bytes): - lddqu 88(%rsi), %xmm0 - movdqu %xmm0, 88(%rdi) -L(bwd_write_88bytes): - lddqu 72(%rsi), %xmm0 - movdqu %xmm0, 72(%rdi) -L(bwd_write_72bytes): - lddqu 56(%rsi), %xmm0 - movdqu %xmm0, 56(%rdi) -L(bwd_write_56bytes): - lddqu 40(%rsi), %xmm0 - movdqu %xmm0, 40(%rdi) -L(bwd_write_40bytes): - lddqu 24(%rsi), %xmm0 - movdqu %xmm0, 24(%rdi) -L(bwd_write_24bytes): - lddqu 8(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 8(%rdi) - movdqu %xmm1, (%rdi) - ret - - .p2align 4 -L(bwd_write_8bytes): - mov (%rsi), %rdx - mov %rdx, (%rdi) - ret - - .p2align 4 -L(bwd_write_135bytes): - lddqu 119(%rsi), %xmm0 - movdqu %xmm0, 119(%rdi) -L(bwd_write_119bytes): - lddqu 103(%rsi), %xmm0 - movdqu %xmm0, 103(%rdi) -L(bwd_write_103bytes): - lddqu 87(%rsi), %xmm0 - movdqu %xmm0, 87(%rdi) -L(bwd_write_87bytes): - lddqu 71(%rsi), %xmm0 - movdqu %xmm0, 71(%rdi) -L(bwd_write_71bytes): - lddqu 55(%rsi), %xmm0 - movdqu %xmm0, 55(%rdi) -L(bwd_write_55bytes): - lddqu 39(%rsi), %xmm0 - movdqu %xmm0, 39(%rdi) -L(bwd_write_39bytes): - lddqu 23(%rsi), %xmm0 - movdqu %xmm0, 23(%rdi) -L(bwd_write_23bytes): - lddqu 7(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 7(%rdi) - movdqu %xmm1, (%rdi) - ret - - .p2align 4 -L(bwd_write_7bytes): - mov 3(%rsi), %edx - mov (%rsi), %ecx - mov %edx, 3(%rdi) - mov %ecx, (%rdi) - ret - - .p2align 4 -L(bwd_write_134bytes): - lddqu 118(%rsi), %xmm0 - movdqu %xmm0, 118(%rdi) -L(bwd_write_118bytes): - lddqu 102(%rsi), %xmm0 - movdqu %xmm0, 102(%rdi) -L(bwd_write_102bytes): - lddqu 86(%rsi), %xmm0 - movdqu %xmm0, 86(%rdi) -L(bwd_write_86bytes): - lddqu 70(%rsi), %xmm0 - movdqu %xmm0, 70(%rdi) -L(bwd_write_70bytes): - lddqu 54(%rsi), %xmm0 - movdqu %xmm0, 54(%rdi) -L(bwd_write_54bytes): - lddqu 38(%rsi), %xmm0 - movdqu %xmm0, 38(%rdi) -L(bwd_write_38bytes): - lddqu 22(%rsi), %xmm0 - movdqu %xmm0, 22(%rdi) -L(bwd_write_22bytes): - lddqu 6(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 6(%rdi) - movdqu %xmm1, (%rdi) - ret - - .p2align 4 -L(bwd_write_6bytes): - mov 2(%rsi), %edx - mov (%rsi), %ecx - mov %edx, 2(%rdi) - mov %ecx, (%rdi) - ret - - .p2align 4 -L(bwd_write_133bytes): - lddqu 117(%rsi), %xmm0 - movdqu %xmm0, 117(%rdi) -L(bwd_write_117bytes): - lddqu 101(%rsi), %xmm0 - movdqu %xmm0, 101(%rdi) -L(bwd_write_101bytes): - lddqu 85(%rsi), %xmm0 - movdqu %xmm0, 85(%rdi) -L(bwd_write_85bytes): - lddqu 69(%rsi), %xmm0 - movdqu %xmm0, 69(%rdi) -L(bwd_write_69bytes): - lddqu 53(%rsi), %xmm0 - movdqu %xmm0, 53(%rdi) -L(bwd_write_53bytes): - lddqu 37(%rsi), %xmm0 - movdqu %xmm0, 37(%rdi) -L(bwd_write_37bytes): - lddqu 21(%rsi), %xmm0 - movdqu %xmm0, 21(%rdi) -L(bwd_write_21bytes): - lddqu 5(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 5(%rdi) - movdqu %xmm1, (%rdi) - ret - - .p2align 4 -L(bwd_write_5bytes): - mov 1(%rsi), %edx - mov (%rsi), %ecx - mov %edx, 1(%rdi) - mov %ecx, (%rdi) - ret - - .p2align 4 -L(bwd_write_132bytes): - lddqu 116(%rsi), %xmm0 - movdqu %xmm0, 116(%rdi) -L(bwd_write_116bytes): - lddqu 100(%rsi), %xmm0 - movdqu %xmm0, 100(%rdi) -L(bwd_write_100bytes): - lddqu 84(%rsi), %xmm0 - movdqu %xmm0, 84(%rdi) -L(bwd_write_84bytes): - lddqu 68(%rsi), %xmm0 - movdqu %xmm0, 68(%rdi) -L(bwd_write_68bytes): - lddqu 52(%rsi), %xmm0 - movdqu %xmm0, 52(%rdi) -L(bwd_write_52bytes): - lddqu 36(%rsi), %xmm0 - movdqu %xmm0, 36(%rdi) -L(bwd_write_36bytes): - lddqu 20(%rsi), %xmm0 - movdqu %xmm0, 20(%rdi) -L(bwd_write_20bytes): - lddqu 4(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 4(%rdi) - movdqu %xmm1, (%rdi) - ret - - .p2align 4 -L(bwd_write_4bytes): - mov (%rsi), %edx - mov %edx, (%rdi) - ret - - .p2align 4 -L(bwd_write_131bytes): - lddqu 115(%rsi), %xmm0 - movdqu %xmm0, 115(%rdi) -L(bwd_write_115bytes): - lddqu 99(%rsi), %xmm0 - movdqu %xmm0, 99(%rdi) -L(bwd_write_99bytes): - lddqu 83(%rsi), %xmm0 - movdqu %xmm0, 83(%rdi) -L(bwd_write_83bytes): - lddqu 67(%rsi), %xmm0 - movdqu %xmm0, 67(%rdi) -L(bwd_write_67bytes): - lddqu 51(%rsi), %xmm0 - movdqu %xmm0, 51(%rdi) -L(bwd_write_51bytes): - lddqu 35(%rsi), %xmm0 - movdqu %xmm0, 35(%rdi) -L(bwd_write_35bytes): - lddqu 19(%rsi), %xmm0 - movdqu %xmm0, 19(%rdi) -L(bwd_write_19bytes): - lddqu 3(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 3(%rdi) - movdqu %xmm1, (%rdi) - ret - - .p2align 4 -L(bwd_write_3bytes): - mov 1(%rsi), %dx - mov (%rsi), %cx - mov %dx, 1(%rdi) - mov %cx, (%rdi) - ret - - .p2align 4 -L(bwd_write_130bytes): - lddqu 114(%rsi), %xmm0 - movdqu %xmm0, 114(%rdi) -L(bwd_write_114bytes): - lddqu 98(%rsi), %xmm0 - movdqu %xmm0, 98(%rdi) -L(bwd_write_98bytes): - lddqu 82(%rsi), %xmm0 - movdqu %xmm0, 82(%rdi) -L(bwd_write_82bytes): - lddqu 66(%rsi), %xmm0 - movdqu %xmm0, 66(%rdi) -L(bwd_write_66bytes): - lddqu 50(%rsi), %xmm0 - movdqu %xmm0, 50(%rdi) -L(bwd_write_50bytes): - lddqu 34(%rsi), %xmm0 - movdqu %xmm0, 34(%rdi) -L(bwd_write_34bytes): - lddqu 18(%rsi), %xmm0 - movdqu %xmm0, 18(%rdi) -L(bwd_write_18bytes): - lddqu 2(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 2(%rdi) - movdqu %xmm1, (%rdi) - ret - - .p2align 4 -L(bwd_write_2bytes): - movzwl (%rsi), %edx - mov %dx, (%rdi) - ret - - .p2align 4 -L(bwd_write_129bytes): - lddqu 113(%rsi), %xmm0 - movdqu %xmm0, 113(%rdi) -L(bwd_write_113bytes): - lddqu 97(%rsi), %xmm0 - movdqu %xmm0, 97(%rdi) -L(bwd_write_97bytes): - lddqu 81(%rsi), %xmm0 - movdqu %xmm0, 81(%rdi) -L(bwd_write_81bytes): - lddqu 65(%rsi), %xmm0 - movdqu %xmm0, 65(%rdi) -L(bwd_write_65bytes): - lddqu 49(%rsi), %xmm0 - movdqu %xmm0, 49(%rdi) -L(bwd_write_49bytes): - lddqu 33(%rsi), %xmm0 - movdqu %xmm0, 33(%rdi) -L(bwd_write_33bytes): - lddqu 17(%rsi), %xmm0 - movdqu %xmm0, 17(%rdi) -L(bwd_write_17bytes): - lddqu 1(%rsi), %xmm0 - lddqu (%rsi), %xmm1 - movdqu %xmm0, 1(%rdi) - movdqu %xmm1, (%rdi) - ret - - .p2align 4 -L(bwd_write_1bytes): - movzbl (%rsi), %edx - mov %dl, (%rdi) - ret - -END (MEMCPY) - - .section .rodata.ssse3,"a",@progbits - .p2align 3 -L(table_144_bytes_bwd): - .int JMPTBL (L(bwd_write_0bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_1bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_2bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_3bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_4bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_5bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_6bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_7bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_8bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_9bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_10bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_11bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_12bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_13bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_14bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_15bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_16bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_17bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_18bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_19bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_20bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_21bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_22bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_23bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_24bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_25bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_26bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_27bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_28bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_29bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_30bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_31bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_32bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_33bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_34bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_35bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_36bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_37bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_38bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_39bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_40bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_41bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_42bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_43bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_44bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_45bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_46bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_47bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_48bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_49bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_50bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_51bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_52bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_53bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_54bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_55bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_56bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_57bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_58bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_59bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_60bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_61bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_62bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_63bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_64bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_65bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_66bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_67bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_68bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_69bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_70bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_71bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_72bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_73bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_74bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_75bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_76bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_77bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_78bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_79bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_80bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_81bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_82bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_83bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_84bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_85bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_86bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_87bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_88bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_89bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_90bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_91bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_92bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_93bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_94bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_95bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_96bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_97bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_98bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_99bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_100bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_101bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_102bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_103bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_104bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_105bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_106bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_107bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_108bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_109bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_110bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_111bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_112bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_113bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_114bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_115bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_116bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_117bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_118bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_119bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_120bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_121bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_122bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_123bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_124bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_125bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_126bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_127bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_128bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_129bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_130bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_131bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_132bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_133bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_134bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_135bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_136bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_137bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_138bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_139bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_140bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_141bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_142bytes), L(table_144_bytes_bwd)) - .int JMPTBL (L(bwd_write_143bytes), L(table_144_bytes_bwd)) - - .p2align 3 -L(table_144_bytes_fwd): - .int JMPTBL (L(fwd_write_0bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_1bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_2bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_3bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_4bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_5bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_6bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_7bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_8bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_9bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_10bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_11bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_12bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_13bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_14bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_15bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_16bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_17bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_18bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_19bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_20bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_21bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_22bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_23bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_24bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_25bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_26bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_27bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_28bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_29bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_30bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_31bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_32bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_33bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_34bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_35bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_36bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_37bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_38bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_39bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_40bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_41bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_42bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_43bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_44bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_45bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_46bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_47bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_48bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_49bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_50bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_51bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_52bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_53bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_54bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_55bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_56bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_57bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_58bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_59bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_60bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_61bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_62bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_63bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_64bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_65bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_66bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_67bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_68bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_69bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_70bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_71bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_72bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_73bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_74bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_75bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_76bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_77bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_78bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_79bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_80bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_81bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_82bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_83bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_84bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_85bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_86bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_87bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_88bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_89bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_90bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_91bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_92bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_93bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_94bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_95bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_96bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_97bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_98bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_99bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_100bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_101bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_102bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_103bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_104bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_105bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_106bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_107bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_108bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_109bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_110bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_111bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_112bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_113bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_114bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_115bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_116bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_117bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_118bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_119bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_120bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_121bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_122bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_123bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_124bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_125bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_126bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_127bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_128bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_129bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_130bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_131bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_132bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_133bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_134bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_135bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_136bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_137bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_138bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_139bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_140bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_141bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_142bytes), L(table_144_bytes_fwd)) - .int JMPTBL (L(fwd_write_143bytes), L(table_144_bytes_fwd)) - - .p2align 3 -L(shl_table_fwd): - .int JMPTBL (L(shl_0), L(shl_table_fwd)) - .int JMPTBL (L(shl_1), L(shl_table_fwd)) - .int JMPTBL (L(shl_2), L(shl_table_fwd)) - .int JMPTBL (L(shl_3), L(shl_table_fwd)) - .int JMPTBL (L(shl_4), L(shl_table_fwd)) - .int JMPTBL (L(shl_5), L(shl_table_fwd)) - .int JMPTBL (L(shl_6), L(shl_table_fwd)) - .int JMPTBL (L(shl_7), L(shl_table_fwd)) - .int JMPTBL (L(shl_8), L(shl_table_fwd)) - .int JMPTBL (L(shl_9), L(shl_table_fwd)) - .int JMPTBL (L(shl_10), L(shl_table_fwd)) - .int JMPTBL (L(shl_11), L(shl_table_fwd)) - .int JMPTBL (L(shl_12), L(shl_table_fwd)) - .int JMPTBL (L(shl_13), L(shl_table_fwd)) - .int JMPTBL (L(shl_14), L(shl_table_fwd)) - .int JMPTBL (L(shl_15), L(shl_table_fwd)) - - .p2align 3 -L(shl_table_bwd): - .int JMPTBL (L(shl_0_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_1_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_2_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_3_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_4_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_5_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_6_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_7_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_8_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_9_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_10_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_11_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_12_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_13_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_14_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_15_bwd), L(shl_table_bwd)) - -#endif diff --git a/sysdeps/x86_64/multiarch/memcpy-ssse3.S b/sysdeps/x86_64/multiarch/memcpy-ssse3.S deleted file mode 100644 index f3ea52a46c..0000000000 --- a/sysdeps/x86_64/multiarch/memcpy-ssse3.S +++ /dev/null @@ -1,3150 +0,0 @@ -/* memcpy with SSSE3 - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if IS_IN (libc) \ - && (defined SHARED \ - || defined USE_AS_MEMMOVE \ - || !defined USE_MULTIARCH) - -#include "asm-syntax.h" - -#ifndef MEMCPY -# define MEMCPY __memcpy_ssse3 -# define MEMCPY_CHK __memcpy_chk_ssse3 -# define MEMPCPY __mempcpy_ssse3 -# define MEMPCPY_CHK __mempcpy_chk_ssse3 -#endif - -#define JMPTBL(I, B) I - B - -/* Branch to an entry in a jump table. TABLE is a jump table with - relative offsets. INDEX is a register contains the index into the - jump table. SCALE is the scale of INDEX. */ -#define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ - lea TABLE(%rip), %r11; \ - movslq (%r11, INDEX, SCALE), INDEX; \ - lea (%r11, INDEX), INDEX; \ - jmp *INDEX; \ - ud2 - - .section .text.ssse3,"ax",@progbits -#if !defined USE_AS_MEMPCPY && !defined USE_AS_MEMMOVE -ENTRY (MEMPCPY_CHK) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) -END (MEMPCPY_CHK) - -ENTRY (MEMPCPY) - movq %rdi, %rax - addq %rdx, %rax - jmp L(start) -END (MEMPCPY) -#endif - -#if !defined USE_AS_BCOPY -ENTRY (MEMCPY_CHK) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) -END (MEMCPY_CHK) -#endif - -ENTRY (MEMCPY) - mov %rdi, %rax -#ifdef USE_AS_MEMPCPY - add %rdx, %rax -#endif - -#ifdef USE_AS_MEMMOVE - cmp %rsi, %rdi - jb L(copy_forward) - je L(write_0bytes) - cmp $79, %rdx - jbe L(copy_forward) - jmp L(copy_backward) -L(copy_forward): -#endif -L(start): - cmp $79, %rdx - lea L(table_less_80bytes)(%rip), %r11 - ja L(80bytesormore) - movslq (%r11, %rdx, 4), %r9 - add %rdx, %rsi - add %rdx, %rdi - add %r11, %r9 - jmp *%r9 - ud2 - - .p2align 4 -L(80bytesormore): -#ifndef USE_AS_MEMMOVE - cmp %dil, %sil - jle L(copy_backward) -#endif - - movdqu (%rsi), %xmm0 - mov %rdi, %rcx - and $-16, %rdi - add $16, %rdi - mov %rcx, %r8 - sub %rdi, %rcx - add %rcx, %rdx - sub %rcx, %rsi - -#ifdef SHARED_CACHE_SIZE_HALF - mov $SHARED_CACHE_SIZE_HALF, %RCX_LP -#else - mov __x86_shared_cache_size_half(%rip), %RCX_LP -#endif - cmp %rcx, %rdx - mov %rsi, %r9 - ja L(large_page_fwd) - and $0xf, %r9 - jz L(shl_0) -#ifdef DATA_CACHE_SIZE_HALF - mov $DATA_CACHE_SIZE_HALF, %RCX_LP -#else - mov __x86_data_cache_size_half(%rip), %RCX_LP -#endif - BRANCH_TO_JMPTBL_ENTRY (L(shl_table), %r9, 4) - - .p2align 4 -L(copy_backward): - movdqu -16(%rsi, %rdx), %xmm0 - add %rdx, %rsi - lea -16(%rdi, %rdx), %r8 - add %rdx, %rdi - - mov %rdi, %rcx - and $0xf, %rcx - xor %rcx, %rdi - sub %rcx, %rdx - sub %rcx, %rsi - -#ifdef SHARED_CACHE_SIZE_HALF - mov $SHARED_CACHE_SIZE_HALF, %RCX_LP -#else - mov __x86_shared_cache_size_half(%rip), %RCX_LP -#endif - - cmp %rcx, %rdx - mov %rsi, %r9 - ja L(large_page_bwd) - and $0xf, %r9 - jz L(shl_0_bwd) -#ifdef DATA_CACHE_SIZE_HALF - mov $DATA_CACHE_SIZE_HALF, %RCX_LP -#else - mov __x86_data_cache_size_half(%rip), %RCX_LP -#endif - BRANCH_TO_JMPTBL_ENTRY (L(shl_table_bwd), %r9, 4) - - .p2align 4 -L(shl_0): - sub $16, %rdx - movdqa (%rsi), %xmm1 - add $16, %rsi - movdqa %xmm1, (%rdi) - add $16, %rdi - cmp $128, %rdx - movdqu %xmm0, (%r8) - ja L(shl_0_gobble) - cmp $64, %rdx - jb L(shl_0_less_64bytes) - movaps (%rsi), %xmm4 - movaps 16(%rsi), %xmm1 - movaps 32(%rsi), %xmm2 - movaps 48(%rsi), %xmm3 - movaps %xmm4, (%rdi) - movaps %xmm1, 16(%rdi) - movaps %xmm2, 32(%rdi) - movaps %xmm3, 48(%rdi) - sub $64, %rdx - add $64, %rsi - add $64, %rdi -L(shl_0_less_64bytes): - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY (L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_0_gobble): -#ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %RDX_LP -#else - cmp __x86_data_cache_size_half(%rip), %RDX_LP -#endif - lea -128(%rdx), %rdx - jae L(shl_0_gobble_mem_loop) -L(shl_0_gobble_cache_loop): - movdqa (%rsi), %xmm4 - movaps 0x10(%rsi), %xmm1 - movaps 0x20(%rsi), %xmm2 - movaps 0x30(%rsi), %xmm3 - - movdqa %xmm4, (%rdi) - movaps %xmm1, 0x10(%rdi) - movaps %xmm2, 0x20(%rdi) - movaps %xmm3, 0x30(%rdi) - - sub $128, %rdx - movaps 0x40(%rsi), %xmm4 - movaps 0x50(%rsi), %xmm5 - movaps 0x60(%rsi), %xmm6 - movaps 0x70(%rsi), %xmm7 - lea 0x80(%rsi), %rsi - movaps %xmm4, 0x40(%rdi) - movaps %xmm5, 0x50(%rdi) - movaps %xmm6, 0x60(%rdi) - movaps %xmm7, 0x70(%rdi) - lea 0x80(%rdi), %rdi - - jae L(shl_0_gobble_cache_loop) - cmp $-0x40, %rdx - lea 0x80(%rdx), %rdx - jl L(shl_0_cache_less_64bytes) - - movdqa (%rsi), %xmm4 - sub $0x40, %rdx - movdqa 0x10(%rsi), %xmm1 - - movdqa %xmm4, (%rdi) - movdqa %xmm1, 0x10(%rdi) - - movdqa 0x20(%rsi), %xmm4 - movdqa 0x30(%rsi), %xmm1 - add $0x40, %rsi - - movdqa %xmm4, 0x20(%rdi) - movdqa %xmm1, 0x30(%rdi) - add $0x40, %rdi -L(shl_0_cache_less_64bytes): - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY (L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_0_gobble_mem_loop): - prefetcht0 0x1c0(%rsi) - prefetcht0 0x280(%rsi) - - movdqa (%rsi), %xmm0 - movdqa 0x10(%rsi), %xmm1 - movdqa 0x20(%rsi), %xmm2 - movdqa 0x30(%rsi), %xmm3 - movdqa 0x40(%rsi), %xmm4 - movdqa 0x50(%rsi), %xmm5 - movdqa 0x60(%rsi), %xmm6 - movdqa 0x70(%rsi), %xmm7 - lea 0x80(%rsi), %rsi - sub $0x80, %rdx - movdqa %xmm0, (%rdi) - movdqa %xmm1, 0x10(%rdi) - movdqa %xmm2, 0x20(%rdi) - movdqa %xmm3, 0x30(%rdi) - movdqa %xmm4, 0x40(%rdi) - movdqa %xmm5, 0x50(%rdi) - movdqa %xmm6, 0x60(%rdi) - movdqa %xmm7, 0x70(%rdi) - lea 0x80(%rdi), %rdi - - jae L(shl_0_gobble_mem_loop) - cmp $-0x40, %rdx - lea 0x80(%rdx), %rdx - jl L(shl_0_mem_less_64bytes) - - movdqa (%rsi), %xmm0 - sub $0x40, %rdx - movdqa 0x10(%rsi), %xmm1 - - movdqa %xmm0, (%rdi) - movdqa %xmm1, 0x10(%rdi) - - movdqa 0x20(%rsi), %xmm0 - movdqa 0x30(%rsi), %xmm1 - add $0x40, %rsi - - movdqa %xmm0, 0x20(%rdi) - movdqa %xmm1, 0x30(%rdi) - add $0x40, %rdi -L(shl_0_mem_less_64bytes): - cmp $0x20, %rdx - jb L(shl_0_mem_less_32bytes) - movdqa (%rsi), %xmm0 - sub $0x20, %rdx - movdqa 0x10(%rsi), %xmm1 - add $0x20, %rsi - movdqa %xmm0, (%rdi) - movdqa %xmm1, 0x10(%rdi) - add $0x20, %rdi -L(shl_0_mem_less_32bytes): - add %rdx, %rdi - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_0_bwd): - sub $16, %rdx - movdqa -0x10(%rsi), %xmm1 - sub $16, %rsi - movdqa %xmm1, -0x10(%rdi) - sub $16, %rdi - cmp $0x80, %rdx - movdqu %xmm0, (%r8) - ja L(shl_0_gobble_bwd) - cmp $64, %rdx - jb L(shl_0_less_64bytes_bwd) - movaps -0x10(%rsi), %xmm0 - movaps -0x20(%rsi), %xmm1 - movaps -0x30(%rsi), %xmm2 - movaps -0x40(%rsi), %xmm3 - movaps %xmm0, -0x10(%rdi) - movaps %xmm1, -0x20(%rdi) - movaps %xmm2, -0x30(%rdi) - movaps %xmm3, -0x40(%rdi) - sub $64, %rdx - sub $0x40, %rsi - sub $0x40, %rdi -L(shl_0_less_64bytes_bwd): - BRANCH_TO_JMPTBL_ENTRY (L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_0_gobble_bwd): -#ifdef DATA_CACHE_SIZE_HALF - cmp $DATA_CACHE_SIZE_HALF, %RDX_LP -#else - cmp __x86_data_cache_size_half(%rip), %RDX_LP -#endif - lea -128(%rdx), %rdx - jae L(shl_0_gobble_mem_bwd_loop) -L(shl_0_gobble_bwd_loop): - movdqa -0x10(%rsi), %xmm0 - movaps -0x20(%rsi), %xmm1 - movaps -0x30(%rsi), %xmm2 - movaps -0x40(%rsi), %xmm3 - - movdqa %xmm0, -0x10(%rdi) - movaps %xmm1, -0x20(%rdi) - movaps %xmm2, -0x30(%rdi) - movaps %xmm3, -0x40(%rdi) - - sub $0x80, %rdx - movaps -0x50(%rsi), %xmm4 - movaps -0x60(%rsi), %xmm5 - movaps -0x70(%rsi), %xmm6 - movaps -0x80(%rsi), %xmm7 - lea -0x80(%rsi), %rsi - movaps %xmm4, -0x50(%rdi) - movaps %xmm5, -0x60(%rdi) - movaps %xmm6, -0x70(%rdi) - movaps %xmm7, -0x80(%rdi) - lea -0x80(%rdi), %rdi - - jae L(shl_0_gobble_bwd_loop) - cmp $-0x40, %rdx - lea 0x80(%rdx), %rdx - jl L(shl_0_gobble_bwd_less_64bytes) - - movdqa -0x10(%rsi), %xmm0 - sub $0x40, %rdx - movdqa -0x20(%rsi), %xmm1 - - movdqa %xmm0, -0x10(%rdi) - movdqa %xmm1, -0x20(%rdi) - - movdqa -0x30(%rsi), %xmm0 - movdqa -0x40(%rsi), %xmm1 - sub $0x40, %rsi - - movdqa %xmm0, -0x30(%rdi) - movdqa %xmm1, -0x40(%rdi) - sub $0x40, %rdi -L(shl_0_gobble_bwd_less_64bytes): - BRANCH_TO_JMPTBL_ENTRY (L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_0_gobble_mem_bwd_loop): - prefetcht0 -0x1c0(%rsi) - prefetcht0 -0x280(%rsi) - movdqa -0x10(%rsi), %xmm0 - movdqa -0x20(%rsi), %xmm1 - movdqa -0x30(%rsi), %xmm2 - movdqa -0x40(%rsi), %xmm3 - movdqa -0x50(%rsi), %xmm4 - movdqa -0x60(%rsi), %xmm5 - movdqa -0x70(%rsi), %xmm6 - movdqa -0x80(%rsi), %xmm7 - lea -0x80(%rsi), %rsi - sub $0x80, %rdx - movdqa %xmm0, -0x10(%rdi) - movdqa %xmm1, -0x20(%rdi) - movdqa %xmm2, -0x30(%rdi) - movdqa %xmm3, -0x40(%rdi) - movdqa %xmm4, -0x50(%rdi) - movdqa %xmm5, -0x60(%rdi) - movdqa %xmm6, -0x70(%rdi) - movdqa %xmm7, -0x80(%rdi) - lea -0x80(%rdi), %rdi - - jae L(shl_0_gobble_mem_bwd_loop) - cmp $-0x40, %rdx - lea 0x80(%rdx), %rdx - jl L(shl_0_mem_bwd_less_64bytes) - - movdqa -0x10(%rsi), %xmm0 - sub $0x40, %rdx - movdqa -0x20(%rsi), %xmm1 - - movdqa %xmm0, -0x10(%rdi) - movdqa %xmm1, -0x20(%rdi) - - movdqa -0x30(%rsi), %xmm0 - movdqa -0x40(%rsi), %xmm1 - sub $0x40, %rsi - - movdqa %xmm0, -0x30(%rdi) - movdqa %xmm1, -0x40(%rdi) - sub $0x40, %rdi -L(shl_0_mem_bwd_less_64bytes): - cmp $0x20, %rdx - jb L(shl_0_mem_bwd_less_32bytes) - movdqa -0x10(%rsi), %xmm0 - sub $0x20, %rdx - movdqa -0x20(%rsi), %xmm1 - sub $0x20, %rsi - movdqa %xmm0, -0x10(%rdi) - movdqa %xmm1, -0x20(%rdi) - sub $0x20, %rdi -L(shl_0_mem_bwd_less_32bytes): - BRANCH_TO_JMPTBL_ENTRY (L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_1): - lea (L(shl_1_loop_L1)-L(shl_1))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x01(%rsi), %xmm1 - jb L(L1_fwd) - lea (L(shl_1_loop_L2)-L(shl_1_loop_L1))(%r9), %r9 -L(L1_fwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_1_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_1_loop_L1): - sub $64, %rdx - movaps 0x0f(%rsi), %xmm2 - movaps 0x1f(%rsi), %xmm3 - movaps 0x2f(%rsi), %xmm4 - movaps 0x3f(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $1, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $1, %xmm3, %xmm4 - palignr $1, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $1, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_1_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 -L(shl_1_end): - movaps %xmm4, -0x20(%rdi) - lea 64(%rdx), %rdx - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_1_bwd): - lea (L(shl_1_bwd_loop_L1)-L(shl_1_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x01(%rsi), %xmm1 - jb L(L1_bwd) - lea (L(shl_1_bwd_loop_L2)-L(shl_1_bwd_loop_L1))(%r9), %r9 -L(L1_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_1_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_1_bwd_loop_L1): - movaps -0x11(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x21(%rsi), %xmm3 - movaps -0x31(%rsi), %xmm4 - movaps -0x41(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $1, %xmm2, %xmm1 - palignr $1, %xmm3, %xmm2 - palignr $1, %xmm4, %xmm3 - palignr $1, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_1_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_1_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_2): - lea (L(shl_2_loop_L1)-L(shl_2))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x02(%rsi), %xmm1 - jb L(L2_fwd) - lea (L(shl_2_loop_L2)-L(shl_2_loop_L1))(%r9), %r9 -L(L2_fwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_2_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_2_loop_L1): - sub $64, %rdx - movaps 0x0e(%rsi), %xmm2 - movaps 0x1e(%rsi), %xmm3 - movaps 0x2e(%rsi), %xmm4 - movaps 0x3e(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $2, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $2, %xmm3, %xmm4 - palignr $2, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $2, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_2_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 -L(shl_2_end): - movaps %xmm4, -0x20(%rdi) - lea 64(%rdx), %rdx - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_2_bwd): - lea (L(shl_2_bwd_loop_L1)-L(shl_2_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x02(%rsi), %xmm1 - jb L(L2_bwd) - lea (L(shl_2_bwd_loop_L2)-L(shl_2_bwd_loop_L1))(%r9), %r9 -L(L2_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_2_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_2_bwd_loop_L1): - movaps -0x12(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x22(%rsi), %xmm3 - movaps -0x32(%rsi), %xmm4 - movaps -0x42(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $2, %xmm2, %xmm1 - palignr $2, %xmm3, %xmm2 - palignr $2, %xmm4, %xmm3 - palignr $2, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_2_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_2_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_3): - lea (L(shl_3_loop_L1)-L(shl_3))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x03(%rsi), %xmm1 - jb L(L3_fwd) - lea (L(shl_3_loop_L2)-L(shl_3_loop_L1))(%r9), %r9 -L(L3_fwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_3_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_3_loop_L1): - sub $64, %rdx - movaps 0x0d(%rsi), %xmm2 - movaps 0x1d(%rsi), %xmm3 - movaps 0x2d(%rsi), %xmm4 - movaps 0x3d(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $3, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $3, %xmm3, %xmm4 - palignr $3, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $3, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_3_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 -L(shl_3_end): - movaps %xmm4, -0x20(%rdi) - lea 64(%rdx), %rdx - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_3_bwd): - lea (L(shl_3_bwd_loop_L1)-L(shl_3_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x03(%rsi), %xmm1 - jb L(L3_bwd) - lea (L(shl_3_bwd_loop_L2)-L(shl_3_bwd_loop_L1))(%r9), %r9 -L(L3_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_3_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_3_bwd_loop_L1): - movaps -0x13(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x23(%rsi), %xmm3 - movaps -0x33(%rsi), %xmm4 - movaps -0x43(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $3, %xmm2, %xmm1 - palignr $3, %xmm3, %xmm2 - palignr $3, %xmm4, %xmm3 - palignr $3, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_3_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_3_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_4): - lea (L(shl_4_loop_L1)-L(shl_4))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x04(%rsi), %xmm1 - jb L(L4_fwd) - lea (L(shl_4_loop_L2)-L(shl_4_loop_L1))(%r9), %r9 -L(L4_fwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_4_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_4_loop_L1): - sub $64, %rdx - movaps 0x0c(%rsi), %xmm2 - movaps 0x1c(%rsi), %xmm3 - movaps 0x2c(%rsi), %xmm4 - movaps 0x3c(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $4, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $4, %xmm3, %xmm4 - palignr $4, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $4, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_4_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 -L(shl_4_end): - movaps %xmm4, -0x20(%rdi) - lea 64(%rdx), %rdx - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_4_bwd): - lea (L(shl_4_bwd_loop_L1)-L(shl_4_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x04(%rsi), %xmm1 - jb L(L4_bwd) - lea (L(shl_4_bwd_loop_L2)-L(shl_4_bwd_loop_L1))(%r9), %r9 -L(L4_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_4_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_4_bwd_loop_L1): - movaps -0x14(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x24(%rsi), %xmm3 - movaps -0x34(%rsi), %xmm4 - movaps -0x44(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $4, %xmm2, %xmm1 - palignr $4, %xmm3, %xmm2 - palignr $4, %xmm4, %xmm3 - palignr $4, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_4_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_4_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_5): - lea (L(shl_5_loop_L1)-L(shl_5))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x05(%rsi), %xmm1 - jb L(L5_fwd) - lea (L(shl_5_loop_L2)-L(shl_5_loop_L1))(%r9), %r9 -L(L5_fwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_5_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_5_loop_L1): - sub $64, %rdx - movaps 0x0b(%rsi), %xmm2 - movaps 0x1b(%rsi), %xmm3 - movaps 0x2b(%rsi), %xmm4 - movaps 0x3b(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $5, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $5, %xmm3, %xmm4 - palignr $5, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $5, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_5_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 -L(shl_5_end): - movaps %xmm4, -0x20(%rdi) - lea 64(%rdx), %rdx - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_5_bwd): - lea (L(shl_5_bwd_loop_L1)-L(shl_5_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x05(%rsi), %xmm1 - jb L(L5_bwd) - lea (L(shl_5_bwd_loop_L2)-L(shl_5_bwd_loop_L1))(%r9), %r9 -L(L5_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_5_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_5_bwd_loop_L1): - movaps -0x15(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x25(%rsi), %xmm3 - movaps -0x35(%rsi), %xmm4 - movaps -0x45(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $5, %xmm2, %xmm1 - palignr $5, %xmm3, %xmm2 - palignr $5, %xmm4, %xmm3 - palignr $5, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_5_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_5_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_6): - lea (L(shl_6_loop_L1)-L(shl_6))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x06(%rsi), %xmm1 - jb L(L6_fwd) - lea (L(shl_6_loop_L2)-L(shl_6_loop_L1))(%r9), %r9 -L(L6_fwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_6_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_6_loop_L1): - sub $64, %rdx - movaps 0x0a(%rsi), %xmm2 - movaps 0x1a(%rsi), %xmm3 - movaps 0x2a(%rsi), %xmm4 - movaps 0x3a(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $6, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $6, %xmm3, %xmm4 - palignr $6, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $6, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_6_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 -L(shl_6_end): - movaps %xmm4, -0x20(%rdi) - lea 64(%rdx), %rdx - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_6_bwd): - lea (L(shl_6_bwd_loop_L1)-L(shl_6_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x06(%rsi), %xmm1 - jb L(L6_bwd) - lea (L(shl_6_bwd_loop_L2)-L(shl_6_bwd_loop_L1))(%r9), %r9 -L(L6_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_6_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_6_bwd_loop_L1): - movaps -0x16(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x26(%rsi), %xmm3 - movaps -0x36(%rsi), %xmm4 - movaps -0x46(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $6, %xmm2, %xmm1 - palignr $6, %xmm3, %xmm2 - palignr $6, %xmm4, %xmm3 - palignr $6, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_6_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_6_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_7): - lea (L(shl_7_loop_L1)-L(shl_7))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x07(%rsi), %xmm1 - jb L(L7_fwd) - lea (L(shl_7_loop_L2)-L(shl_7_loop_L1))(%r9), %r9 -L(L7_fwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_7_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_7_loop_L1): - sub $64, %rdx - movaps 0x09(%rsi), %xmm2 - movaps 0x19(%rsi), %xmm3 - movaps 0x29(%rsi), %xmm4 - movaps 0x39(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $7, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $7, %xmm3, %xmm4 - palignr $7, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $7, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_7_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 -L(shl_7_end): - movaps %xmm4, -0x20(%rdi) - lea 64(%rdx), %rdx - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_7_bwd): - lea (L(shl_7_bwd_loop_L1)-L(shl_7_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x07(%rsi), %xmm1 - jb L(L7_bwd) - lea (L(shl_7_bwd_loop_L2)-L(shl_7_bwd_loop_L1))(%r9), %r9 -L(L7_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_7_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_7_bwd_loop_L1): - movaps -0x17(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x27(%rsi), %xmm3 - movaps -0x37(%rsi), %xmm4 - movaps -0x47(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $7, %xmm2, %xmm1 - palignr $7, %xmm3, %xmm2 - palignr $7, %xmm4, %xmm3 - palignr $7, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_7_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_7_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_8): - lea (L(shl_8_loop_L1)-L(shl_8))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x08(%rsi), %xmm1 - jb L(L8_fwd) - lea (L(shl_8_loop_L2)-L(shl_8_loop_L1))(%r9), %r9 -L(L8_fwd): - lea -64(%rdx), %rdx - jmp *%r9 -L(shl_8_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_8_loop_L1): - sub $64, %rdx - movaps 0x08(%rsi), %xmm2 - movaps 0x18(%rsi), %xmm3 - movaps 0x28(%rsi), %xmm4 - movaps 0x38(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $8, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $8, %xmm3, %xmm4 - palignr $8, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $8, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_8_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 - .p2align 4 -L(shl_8_end): - lea 64(%rdx), %rdx - movaps %xmm4, -0x20(%rdi) - add %rdx, %rsi - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_8_bwd): - lea (L(shl_8_bwd_loop_L1)-L(shl_8_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x08(%rsi), %xmm1 - jb L(L8_bwd) - lea (L(shl_8_bwd_loop_L2)-L(shl_8_bwd_loop_L1))(%r9), %r9 -L(L8_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_8_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_8_bwd_loop_L1): - movaps -0x18(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x28(%rsi), %xmm3 - movaps -0x38(%rsi), %xmm4 - movaps -0x48(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $8, %xmm2, %xmm1 - palignr $8, %xmm3, %xmm2 - palignr $8, %xmm4, %xmm3 - palignr $8, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_8_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_8_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_9): - lea (L(shl_9_loop_L1)-L(shl_9))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x09(%rsi), %xmm1 - jb L(L9_fwd) - lea (L(shl_9_loop_L2)-L(shl_9_loop_L1))(%r9), %r9 -L(L9_fwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_9_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_9_loop_L1): - sub $64, %rdx - movaps 0x07(%rsi), %xmm2 - movaps 0x17(%rsi), %xmm3 - movaps 0x27(%rsi), %xmm4 - movaps 0x37(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $9, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $9, %xmm3, %xmm4 - palignr $9, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $9, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_9_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 -L(shl_9_end): - movaps %xmm4, -0x20(%rdi) - lea 64(%rdx), %rdx - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_9_bwd): - lea (L(shl_9_bwd_loop_L1)-L(shl_9_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x09(%rsi), %xmm1 - jb L(L9_bwd) - lea (L(shl_9_bwd_loop_L2)-L(shl_9_bwd_loop_L1))(%r9), %r9 -L(L9_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_9_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_9_bwd_loop_L1): - movaps -0x19(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x29(%rsi), %xmm3 - movaps -0x39(%rsi), %xmm4 - movaps -0x49(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $9, %xmm2, %xmm1 - palignr $9, %xmm3, %xmm2 - palignr $9, %xmm4, %xmm3 - palignr $9, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_9_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_9_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_10): - lea (L(shl_10_loop_L1)-L(shl_10))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x0a(%rsi), %xmm1 - jb L(L10_fwd) - lea (L(shl_10_loop_L2)-L(shl_10_loop_L1))(%r9), %r9 -L(L10_fwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_10_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_10_loop_L1): - sub $64, %rdx - movaps 0x06(%rsi), %xmm2 - movaps 0x16(%rsi), %xmm3 - movaps 0x26(%rsi), %xmm4 - movaps 0x36(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $10, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $10, %xmm3, %xmm4 - palignr $10, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $10, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_10_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 -L(shl_10_end): - movaps %xmm4, -0x20(%rdi) - lea 64(%rdx), %rdx - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_10_bwd): - lea (L(shl_10_bwd_loop_L1)-L(shl_10_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x0a(%rsi), %xmm1 - jb L(L10_bwd) - lea (L(shl_10_bwd_loop_L2)-L(shl_10_bwd_loop_L1))(%r9), %r9 -L(L10_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_10_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_10_bwd_loop_L1): - movaps -0x1a(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x2a(%rsi), %xmm3 - movaps -0x3a(%rsi), %xmm4 - movaps -0x4a(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $10, %xmm2, %xmm1 - palignr $10, %xmm3, %xmm2 - palignr $10, %xmm4, %xmm3 - palignr $10, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_10_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_10_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_11): - lea (L(shl_11_loop_L1)-L(shl_11))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x0b(%rsi), %xmm1 - jb L(L11_fwd) - lea (L(shl_11_loop_L2)-L(shl_11_loop_L1))(%r9), %r9 -L(L11_fwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_11_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_11_loop_L1): - sub $64, %rdx - movaps 0x05(%rsi), %xmm2 - movaps 0x15(%rsi), %xmm3 - movaps 0x25(%rsi), %xmm4 - movaps 0x35(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $11, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $11, %xmm3, %xmm4 - palignr $11, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $11, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_11_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 -L(shl_11_end): - movaps %xmm4, -0x20(%rdi) - lea 64(%rdx), %rdx - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_11_bwd): - lea (L(shl_11_bwd_loop_L1)-L(shl_11_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x0b(%rsi), %xmm1 - jb L(L11_bwd) - lea (L(shl_11_bwd_loop_L2)-L(shl_11_bwd_loop_L1))(%r9), %r9 -L(L11_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_11_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_11_bwd_loop_L1): - movaps -0x1b(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x2b(%rsi), %xmm3 - movaps -0x3b(%rsi), %xmm4 - movaps -0x4b(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $11, %xmm2, %xmm1 - palignr $11, %xmm3, %xmm2 - palignr $11, %xmm4, %xmm3 - palignr $11, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_11_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_11_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_12): - lea (L(shl_12_loop_L1)-L(shl_12))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x0c(%rsi), %xmm1 - jb L(L12_fwd) - lea (L(shl_12_loop_L2)-L(shl_12_loop_L1))(%r9), %r9 -L(L12_fwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_12_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_12_loop_L1): - sub $64, %rdx - movaps 0x04(%rsi), %xmm2 - movaps 0x14(%rsi), %xmm3 - movaps 0x24(%rsi), %xmm4 - movaps 0x34(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $12, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $12, %xmm3, %xmm4 - palignr $12, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $12, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_12_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 -L(shl_12_end): - movaps %xmm4, -0x20(%rdi) - lea 64(%rdx), %rdx - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_12_bwd): - lea (L(shl_12_bwd_loop_L1)-L(shl_12_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x0c(%rsi), %xmm1 - jb L(L12_bwd) - lea (L(shl_12_bwd_loop_L2)-L(shl_12_bwd_loop_L1))(%r9), %r9 -L(L12_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_12_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_12_bwd_loop_L1): - movaps -0x1c(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x2c(%rsi), %xmm3 - movaps -0x3c(%rsi), %xmm4 - movaps -0x4c(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $12, %xmm2, %xmm1 - palignr $12, %xmm3, %xmm2 - palignr $12, %xmm4, %xmm3 - palignr $12, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_12_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_12_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_13): - lea (L(shl_13_loop_L1)-L(shl_13))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x0d(%rsi), %xmm1 - jb L(L13_fwd) - lea (L(shl_13_loop_L2)-L(shl_13_loop_L1))(%r9), %r9 -L(L13_fwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_13_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_13_loop_L1): - sub $64, %rdx - movaps 0x03(%rsi), %xmm2 - movaps 0x13(%rsi), %xmm3 - movaps 0x23(%rsi), %xmm4 - movaps 0x33(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $13, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $13, %xmm3, %xmm4 - palignr $13, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $13, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_13_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 -L(shl_13_end): - movaps %xmm4, -0x20(%rdi) - lea 64(%rdx), %rdx - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_13_bwd): - lea (L(shl_13_bwd_loop_L1)-L(shl_13_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x0d(%rsi), %xmm1 - jb L(L13_bwd) - lea (L(shl_13_bwd_loop_L2)-L(shl_13_bwd_loop_L1))(%r9), %r9 -L(L13_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_13_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_13_bwd_loop_L1): - movaps -0x1d(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x2d(%rsi), %xmm3 - movaps -0x3d(%rsi), %xmm4 - movaps -0x4d(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $13, %xmm2, %xmm1 - palignr $13, %xmm3, %xmm2 - palignr $13, %xmm4, %xmm3 - palignr $13, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_13_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_13_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_14): - lea (L(shl_14_loop_L1)-L(shl_14))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x0e(%rsi), %xmm1 - jb L(L14_fwd) - lea (L(shl_14_loop_L2)-L(shl_14_loop_L1))(%r9), %r9 -L(L14_fwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_14_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_14_loop_L1): - sub $64, %rdx - movaps 0x02(%rsi), %xmm2 - movaps 0x12(%rsi), %xmm3 - movaps 0x22(%rsi), %xmm4 - movaps 0x32(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $14, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $14, %xmm3, %xmm4 - palignr $14, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $14, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_14_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 -L(shl_14_end): - movaps %xmm4, -0x20(%rdi) - lea 64(%rdx), %rdx - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_14_bwd): - lea (L(shl_14_bwd_loop_L1)-L(shl_14_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x0e(%rsi), %xmm1 - jb L(L14_bwd) - lea (L(shl_14_bwd_loop_L2)-L(shl_14_bwd_loop_L1))(%r9), %r9 -L(L14_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_14_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_14_bwd_loop_L1): - movaps -0x1e(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x2e(%rsi), %xmm3 - movaps -0x3e(%rsi), %xmm4 - movaps -0x4e(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $14, %xmm2, %xmm1 - palignr $14, %xmm3, %xmm2 - palignr $14, %xmm4, %xmm3 - palignr $14, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_14_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_14_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_15): - lea (L(shl_15_loop_L1)-L(shl_15))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x0f(%rsi), %xmm1 - jb L(L15_fwd) - lea (L(shl_15_loop_L2)-L(shl_15_loop_L1))(%r9), %r9 -L(L15_fwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_15_loop_L2): - prefetchnta 0x1c0(%rsi) -L(shl_15_loop_L1): - sub $64, %rdx - movaps 0x01(%rsi), %xmm2 - movaps 0x11(%rsi), %xmm3 - movaps 0x21(%rsi), %xmm4 - movaps 0x31(%rsi), %xmm5 - movdqa %xmm5, %xmm6 - palignr $15, %xmm4, %xmm5 - lea 64(%rsi), %rsi - palignr $15, %xmm3, %xmm4 - palignr $15, %xmm2, %xmm3 - lea 64(%rdi), %rdi - palignr $15, %xmm1, %xmm2 - movdqa %xmm6, %xmm1 - movdqa %xmm2, -0x40(%rdi) - movaps %xmm3, -0x30(%rdi) - jb L(shl_15_end) - movaps %xmm4, -0x20(%rdi) - movaps %xmm5, -0x10(%rdi) - jmp *%r9 - ud2 -L(shl_15_end): - movaps %xmm4, -0x20(%rdi) - lea 64(%rdx), %rdx - movaps %xmm5, -0x10(%rdi) - add %rdx, %rdi - movdqu %xmm0, (%r8) - add %rdx, %rsi - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(shl_15_bwd): - lea (L(shl_15_bwd_loop_L1)-L(shl_15_bwd))(%r9), %r9 - cmp %rcx, %rdx - movaps -0x0f(%rsi), %xmm1 - jb L(L15_bwd) - lea (L(shl_15_bwd_loop_L2)-L(shl_15_bwd_loop_L1))(%r9), %r9 -L(L15_bwd): - lea -64(%rdx), %rdx - jmp *%r9 - ud2 -L(shl_15_bwd_loop_L2): - prefetchnta -0x1c0(%rsi) -L(shl_15_bwd_loop_L1): - movaps -0x1f(%rsi), %xmm2 - sub $0x40, %rdx - movaps -0x2f(%rsi), %xmm3 - movaps -0x3f(%rsi), %xmm4 - movaps -0x4f(%rsi), %xmm5 - lea -0x40(%rsi), %rsi - palignr $15, %xmm2, %xmm1 - palignr $15, %xmm3, %xmm2 - palignr $15, %xmm4, %xmm3 - palignr $15, %xmm5, %xmm4 - - movaps %xmm1, -0x10(%rdi) - movaps %xmm5, %xmm1 - - movaps %xmm2, -0x20(%rdi) - lea -0x40(%rdi), %rdi - - movaps %xmm3, 0x10(%rdi) - jb L(shl_15_bwd_end) - movaps %xmm4, (%rdi) - jmp *%r9 - ud2 -L(shl_15_bwd_end): - movaps %xmm4, (%rdi) - lea 64(%rdx), %rdx - movdqu %xmm0, (%r8) - BRANCH_TO_JMPTBL_ENTRY(L(table_less_80bytes), %rdx, 4) - - .p2align 4 -L(write_72bytes): - movdqu -72(%rsi), %xmm0 - movdqu -56(%rsi), %xmm1 - mov -40(%rsi), %r8 - mov -32(%rsi), %r9 - mov -24(%rsi), %r10 - mov -16(%rsi), %r11 - mov -8(%rsi), %rcx - movdqu %xmm0, -72(%rdi) - movdqu %xmm1, -56(%rdi) - mov %r8, -40(%rdi) - mov %r9, -32(%rdi) - mov %r10, -24(%rdi) - mov %r11, -16(%rdi) - mov %rcx, -8(%rdi) - ret - - .p2align 4 -L(write_64bytes): - movdqu -64(%rsi), %xmm0 - mov -48(%rsi), %rcx - mov -40(%rsi), %r8 - mov -32(%rsi), %r9 - mov -24(%rsi), %r10 - mov -16(%rsi), %r11 - mov -8(%rsi), %rdx - movdqu %xmm0, -64(%rdi) - mov %rcx, -48(%rdi) - mov %r8, -40(%rdi) - mov %r9, -32(%rdi) - mov %r10, -24(%rdi) - mov %r11, -16(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_56bytes): - movdqu -56(%rsi), %xmm0 - mov -40(%rsi), %r8 - mov -32(%rsi), %r9 - mov -24(%rsi), %r10 - mov -16(%rsi), %r11 - mov -8(%rsi), %rcx - movdqu %xmm0, -56(%rdi) - mov %r8, -40(%rdi) - mov %r9, -32(%rdi) - mov %r10, -24(%rdi) - mov %r11, -16(%rdi) - mov %rcx, -8(%rdi) - ret - - .p2align 4 -L(write_48bytes): - mov -48(%rsi), %rcx - mov -40(%rsi), %r8 - mov -32(%rsi), %r9 - mov -24(%rsi), %r10 - mov -16(%rsi), %r11 - mov -8(%rsi), %rdx - mov %rcx, -48(%rdi) - mov %r8, -40(%rdi) - mov %r9, -32(%rdi) - mov %r10, -24(%rdi) - mov %r11, -16(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_40bytes): - mov -40(%rsi), %r8 - mov -32(%rsi), %r9 - mov -24(%rsi), %r10 - mov -16(%rsi), %r11 - mov -8(%rsi), %rdx - mov %r8, -40(%rdi) - mov %r9, -32(%rdi) - mov %r10, -24(%rdi) - mov %r11, -16(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_32bytes): - mov -32(%rsi), %r9 - mov -24(%rsi), %r10 - mov -16(%rsi), %r11 - mov -8(%rsi), %rdx - mov %r9, -32(%rdi) - mov %r10, -24(%rdi) - mov %r11, -16(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_24bytes): - mov -24(%rsi), %r10 - mov -16(%rsi), %r11 - mov -8(%rsi), %rdx - mov %r10, -24(%rdi) - mov %r11, -16(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_16bytes): - mov -16(%rsi), %r11 - mov -8(%rsi), %rdx - mov %r11, -16(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_8bytes): - mov -8(%rsi), %rdx - mov %rdx, -8(%rdi) -L(write_0bytes): - ret - - .p2align 4 -L(write_73bytes): - movdqu -73(%rsi), %xmm0 - movdqu -57(%rsi), %xmm1 - mov -41(%rsi), %rcx - mov -33(%rsi), %r9 - mov -25(%rsi), %r10 - mov -17(%rsi), %r11 - mov -9(%rsi), %r8 - mov -4(%rsi), %edx - movdqu %xmm0, -73(%rdi) - movdqu %xmm1, -57(%rdi) - mov %rcx, -41(%rdi) - mov %r9, -33(%rdi) - mov %r10, -25(%rdi) - mov %r11, -17(%rdi) - mov %r8, -9(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_65bytes): - movdqu -65(%rsi), %xmm0 - movdqu -49(%rsi), %xmm1 - mov -33(%rsi), %r9 - mov -25(%rsi), %r10 - mov -17(%rsi), %r11 - mov -9(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm0, -65(%rdi) - movdqu %xmm1, -49(%rdi) - mov %r9, -33(%rdi) - mov %r10, -25(%rdi) - mov %r11, -17(%rdi) - mov %rcx, -9(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_57bytes): - movdqu -57(%rsi), %xmm0 - mov -41(%rsi), %r8 - mov -33(%rsi), %r9 - mov -25(%rsi), %r10 - mov -17(%rsi), %r11 - mov -9(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm0, -57(%rdi) - mov %r8, -41(%rdi) - mov %r9, -33(%rdi) - mov %r10, -25(%rdi) - mov %r11, -17(%rdi) - mov %rcx, -9(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_49bytes): - movdqu -49(%rsi), %xmm0 - mov -33(%rsi), %r9 - mov -25(%rsi), %r10 - mov -17(%rsi), %r11 - mov -9(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm0, -49(%rdi) - mov %r9, -33(%rdi) - mov %r10, -25(%rdi) - mov %r11, -17(%rdi) - mov %rcx, -9(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_41bytes): - mov -41(%rsi), %r8 - mov -33(%rsi), %r9 - mov -25(%rsi), %r10 - mov -17(%rsi), %r11 - mov -9(%rsi), %rcx - mov -1(%rsi), %dl - mov %r8, -41(%rdi) - mov %r9, -33(%rdi) - mov %r10, -25(%rdi) - mov %r11, -17(%rdi) - mov %rcx, -9(%rdi) - mov %dl, -1(%rdi) - ret - - .p2align 4 -L(write_33bytes): - mov -33(%rsi), %r9 - mov -25(%rsi), %r10 - mov -17(%rsi), %r11 - mov -9(%rsi), %rcx - mov -1(%rsi), %dl - mov %r9, -33(%rdi) - mov %r10, -25(%rdi) - mov %r11, -17(%rdi) - mov %rcx, -9(%rdi) - mov %dl, -1(%rdi) - ret - - .p2align 4 -L(write_25bytes): - mov -25(%rsi), %r10 - mov -17(%rsi), %r11 - mov -9(%rsi), %rcx - mov -1(%rsi), %dl - mov %r10, -25(%rdi) - mov %r11, -17(%rdi) - mov %rcx, -9(%rdi) - mov %dl, -1(%rdi) - ret - - .p2align 4 -L(write_17bytes): - mov -17(%rsi), %r11 - mov -9(%rsi), %rcx - mov -4(%rsi), %edx - mov %r11, -17(%rdi) - mov %rcx, -9(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_9bytes): - mov -9(%rsi), %rcx - mov -4(%rsi), %edx - mov %rcx, -9(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_1bytes): - mov -1(%rsi), %dl - mov %dl, -1(%rdi) - ret - - .p2align 4 -L(write_74bytes): - movdqu -74(%rsi), %xmm0 - movdqu -58(%rsi), %xmm1 - mov -42(%rsi), %r8 - mov -34(%rsi), %r9 - mov -26(%rsi), %r10 - mov -18(%rsi), %r11 - mov -10(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm0, -74(%rdi) - movdqu %xmm1, -58(%rdi) - mov %r8, -42(%rdi) - mov %r9, -34(%rdi) - mov %r10, -26(%rdi) - mov %r11, -18(%rdi) - mov %rcx, -10(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_66bytes): - movdqu -66(%rsi), %xmm0 - movdqu -50(%rsi), %xmm1 - mov -42(%rsi), %r8 - mov -34(%rsi), %r9 - mov -26(%rsi), %r10 - mov -18(%rsi), %r11 - mov -10(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm0, -66(%rdi) - movdqu %xmm1, -50(%rdi) - mov %r8, -42(%rdi) - mov %r9, -34(%rdi) - mov %r10, -26(%rdi) - mov %r11, -18(%rdi) - mov %rcx, -10(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_58bytes): - movdqu -58(%rsi), %xmm1 - mov -42(%rsi), %r8 - mov -34(%rsi), %r9 - mov -26(%rsi), %r10 - mov -18(%rsi), %r11 - mov -10(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm1, -58(%rdi) - mov %r8, -42(%rdi) - mov %r9, -34(%rdi) - mov %r10, -26(%rdi) - mov %r11, -18(%rdi) - mov %rcx, -10(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_50bytes): - movdqu -50(%rsi), %xmm0 - mov -34(%rsi), %r9 - mov -26(%rsi), %r10 - mov -18(%rsi), %r11 - mov -10(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm0, -50(%rdi) - mov %r9, -34(%rdi) - mov %r10, -26(%rdi) - mov %r11, -18(%rdi) - mov %rcx, -10(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_42bytes): - mov -42(%rsi), %r8 - mov -34(%rsi), %r9 - mov -26(%rsi), %r10 - mov -18(%rsi), %r11 - mov -10(%rsi), %rcx - mov -4(%rsi), %edx - mov %r8, -42(%rdi) - mov %r9, -34(%rdi) - mov %r10, -26(%rdi) - mov %r11, -18(%rdi) - mov %rcx, -10(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_34bytes): - mov -34(%rsi), %r9 - mov -26(%rsi), %r10 - mov -18(%rsi), %r11 - mov -10(%rsi), %rcx - mov -4(%rsi), %edx - mov %r9, -34(%rdi) - mov %r10, -26(%rdi) - mov %r11, -18(%rdi) - mov %rcx, -10(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_26bytes): - mov -26(%rsi), %r10 - mov -18(%rsi), %r11 - mov -10(%rsi), %rcx - mov -4(%rsi), %edx - mov %r10, -26(%rdi) - mov %r11, -18(%rdi) - mov %rcx, -10(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_18bytes): - mov -18(%rsi), %r11 - mov -10(%rsi), %rcx - mov -4(%rsi), %edx - mov %r11, -18(%rdi) - mov %rcx, -10(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_10bytes): - mov -10(%rsi), %rcx - mov -4(%rsi), %edx - mov %rcx, -10(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_2bytes): - mov -2(%rsi), %dx - mov %dx, -2(%rdi) - ret - - .p2align 4 -L(write_75bytes): - movdqu -75(%rsi), %xmm0 - movdqu -59(%rsi), %xmm1 - mov -43(%rsi), %r8 - mov -35(%rsi), %r9 - mov -27(%rsi), %r10 - mov -19(%rsi), %r11 - mov -11(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm0, -75(%rdi) - movdqu %xmm1, -59(%rdi) - mov %r8, -43(%rdi) - mov %r9, -35(%rdi) - mov %r10, -27(%rdi) - mov %r11, -19(%rdi) - mov %rcx, -11(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_67bytes): - movdqu -67(%rsi), %xmm0 - movdqu -59(%rsi), %xmm1 - mov -43(%rsi), %r8 - mov -35(%rsi), %r9 - mov -27(%rsi), %r10 - mov -19(%rsi), %r11 - mov -11(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm0, -67(%rdi) - movdqu %xmm1, -59(%rdi) - mov %r8, -43(%rdi) - mov %r9, -35(%rdi) - mov %r10, -27(%rdi) - mov %r11, -19(%rdi) - mov %rcx, -11(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_59bytes): - movdqu -59(%rsi), %xmm0 - mov -43(%rsi), %r8 - mov -35(%rsi), %r9 - mov -27(%rsi), %r10 - mov -19(%rsi), %r11 - mov -11(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm0, -59(%rdi) - mov %r8, -43(%rdi) - mov %r9, -35(%rdi) - mov %r10, -27(%rdi) - mov %r11, -19(%rdi) - mov %rcx, -11(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_51bytes): - movdqu -51(%rsi), %xmm0 - mov -35(%rsi), %r9 - mov -27(%rsi), %r10 - mov -19(%rsi), %r11 - mov -11(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm0, -51(%rdi) - mov %r9, -35(%rdi) - mov %r10, -27(%rdi) - mov %r11, -19(%rdi) - mov %rcx, -11(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_43bytes): - mov -43(%rsi), %r8 - mov -35(%rsi), %r9 - mov -27(%rsi), %r10 - mov -19(%rsi), %r11 - mov -11(%rsi), %rcx - mov -4(%rsi), %edx - mov %r8, -43(%rdi) - mov %r9, -35(%rdi) - mov %r10, -27(%rdi) - mov %r11, -19(%rdi) - mov %rcx, -11(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_35bytes): - mov -35(%rsi), %r9 - mov -27(%rsi), %r10 - mov -19(%rsi), %r11 - mov -11(%rsi), %rcx - mov -4(%rsi), %edx - mov %r9, -35(%rdi) - mov %r10, -27(%rdi) - mov %r11, -19(%rdi) - mov %rcx, -11(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_27bytes): - mov -27(%rsi), %r10 - mov -19(%rsi), %r11 - mov -11(%rsi), %rcx - mov -4(%rsi), %edx - mov %r10, -27(%rdi) - mov %r11, -19(%rdi) - mov %rcx, -11(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_19bytes): - mov -19(%rsi), %r11 - mov -11(%rsi), %rcx - mov -4(%rsi), %edx - mov %r11, -19(%rdi) - mov %rcx, -11(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_11bytes): - mov -11(%rsi), %rcx - mov -4(%rsi), %edx - mov %rcx, -11(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_3bytes): - mov -3(%rsi), %dx - mov -2(%rsi), %cx - mov %dx, -3(%rdi) - mov %cx, -2(%rdi) - ret - - .p2align 4 -L(write_76bytes): - movdqu -76(%rsi), %xmm0 - movdqu -60(%rsi), %xmm1 - mov -44(%rsi), %r8 - mov -36(%rsi), %r9 - mov -28(%rsi), %r10 - mov -20(%rsi), %r11 - mov -12(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm0, -76(%rdi) - movdqu %xmm1, -60(%rdi) - mov %r8, -44(%rdi) - mov %r9, -36(%rdi) - mov %r10, -28(%rdi) - mov %r11, -20(%rdi) - mov %rcx, -12(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_68bytes): - movdqu -68(%rsi), %xmm0 - movdqu -52(%rsi), %xmm1 - mov -36(%rsi), %r9 - mov -28(%rsi), %r10 - mov -20(%rsi), %r11 - mov -12(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm0, -68(%rdi) - movdqu %xmm1, -52(%rdi) - mov %r9, -36(%rdi) - mov %r10, -28(%rdi) - mov %r11, -20(%rdi) - mov %rcx, -12(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_60bytes): - movdqu -60(%rsi), %xmm0 - mov -44(%rsi), %r8 - mov -36(%rsi), %r9 - mov -28(%rsi), %r10 - mov -20(%rsi), %r11 - mov -12(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm0, -60(%rdi) - mov %r8, -44(%rdi) - mov %r9, -36(%rdi) - mov %r10, -28(%rdi) - mov %r11, -20(%rdi) - mov %rcx, -12(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_52bytes): - movdqu -52(%rsi), %xmm0 - mov -36(%rsi), %r9 - mov -28(%rsi), %r10 - mov -20(%rsi), %r11 - mov -12(%rsi), %rcx - mov -4(%rsi), %edx - movdqu %xmm0, -52(%rdi) - mov %r9, -36(%rdi) - mov %r10, -28(%rdi) - mov %r11, -20(%rdi) - mov %rcx, -12(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_44bytes): - mov -44(%rsi), %r8 - mov -36(%rsi), %r9 - mov -28(%rsi), %r10 - mov -20(%rsi), %r11 - mov -12(%rsi), %rcx - mov -4(%rsi), %edx - mov %r8, -44(%rdi) - mov %r9, -36(%rdi) - mov %r10, -28(%rdi) - mov %r11, -20(%rdi) - mov %rcx, -12(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_36bytes): - mov -36(%rsi), %r9 - mov -28(%rsi), %r10 - mov -20(%rsi), %r11 - mov -12(%rsi), %rcx - mov -4(%rsi), %edx - mov %r9, -36(%rdi) - mov %r10, -28(%rdi) - mov %r11, -20(%rdi) - mov %rcx, -12(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_28bytes): - mov -28(%rsi), %r10 - mov -20(%rsi), %r11 - mov -12(%rsi), %rcx - mov -4(%rsi), %edx - mov %r10, -28(%rdi) - mov %r11, -20(%rdi) - mov %rcx, -12(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_20bytes): - mov -20(%rsi), %r11 - mov -12(%rsi), %rcx - mov -4(%rsi), %edx - mov %r11, -20(%rdi) - mov %rcx, -12(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_12bytes): - mov -12(%rsi), %rcx - mov -4(%rsi), %edx - mov %rcx, -12(%rdi) - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_4bytes): - mov -4(%rsi), %edx - mov %edx, -4(%rdi) - ret - - .p2align 4 -L(write_77bytes): - movdqu -77(%rsi), %xmm0 - movdqu -61(%rsi), %xmm1 - mov -45(%rsi), %r8 - mov -37(%rsi), %r9 - mov -29(%rsi), %r10 - mov -21(%rsi), %r11 - mov -13(%rsi), %rcx - mov -8(%rsi), %rdx - movdqu %xmm0, -77(%rdi) - movdqu %xmm1, -61(%rdi) - mov %r8, -45(%rdi) - mov %r9, -37(%rdi) - mov %r10, -29(%rdi) - mov %r11, -21(%rdi) - mov %rcx, -13(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_69bytes): - movdqu -69(%rsi), %xmm0 - movdqu -53(%rsi), %xmm1 - mov -37(%rsi), %r9 - mov -29(%rsi), %r10 - mov -21(%rsi), %r11 - mov -13(%rsi), %rcx - mov -8(%rsi), %rdx - movdqu %xmm0, -69(%rdi) - movdqu %xmm1, -53(%rdi) - mov %r9, -37(%rdi) - mov %r10, -29(%rdi) - mov %r11, -21(%rdi) - mov %rcx, -13(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_61bytes): - movdqu -61(%rsi), %xmm0 - mov -45(%rsi), %r8 - mov -37(%rsi), %r9 - mov -29(%rsi), %r10 - mov -21(%rsi), %r11 - mov -13(%rsi), %rcx - mov -8(%rsi), %rdx - movdqu %xmm0, -61(%rdi) - mov %r8, -45(%rdi) - mov %r9, -37(%rdi) - mov %r10, -29(%rdi) - mov %r11, -21(%rdi) - mov %rcx, -13(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_53bytes): - movdqu -53(%rsi), %xmm0 - mov -45(%rsi), %r8 - mov -37(%rsi), %r9 - mov -29(%rsi), %r10 - mov -21(%rsi), %r11 - mov -13(%rsi), %rcx - mov -8(%rsi), %rdx - movdqu %xmm0, -53(%rdi) - mov %r9, -37(%rdi) - mov %r10, -29(%rdi) - mov %r11, -21(%rdi) - mov %rcx, -13(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_45bytes): - mov -45(%rsi), %r8 - mov -37(%rsi), %r9 - mov -29(%rsi), %r10 - mov -21(%rsi), %r11 - mov -13(%rsi), %rcx - mov -8(%rsi), %rdx - mov %r8, -45(%rdi) - mov %r9, -37(%rdi) - mov %r10, -29(%rdi) - mov %r11, -21(%rdi) - mov %rcx, -13(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_37bytes): - mov -37(%rsi), %r9 - mov -29(%rsi), %r10 - mov -21(%rsi), %r11 - mov -13(%rsi), %rcx - mov -8(%rsi), %rdx - mov %r9, -37(%rdi) - mov %r10, -29(%rdi) - mov %r11, -21(%rdi) - mov %rcx, -13(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_29bytes): - mov -29(%rsi), %r10 - mov -21(%rsi), %r11 - mov -13(%rsi), %rcx - mov -8(%rsi), %rdx - mov %r10, -29(%rdi) - mov %r11, -21(%rdi) - mov %rcx, -13(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_21bytes): - mov -21(%rsi), %r11 - mov -13(%rsi), %rcx - mov -8(%rsi), %rdx - mov %r11, -21(%rdi) - mov %rcx, -13(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_13bytes): - mov -13(%rsi), %rcx - mov -8(%rsi), %rdx - mov %rcx, -13(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_5bytes): - mov -5(%rsi), %edx - mov -4(%rsi), %ecx - mov %edx, -5(%rdi) - mov %ecx, -4(%rdi) - ret - - .p2align 4 -L(write_78bytes): - movdqu -78(%rsi), %xmm0 - movdqu -62(%rsi), %xmm1 - mov -46(%rsi), %r8 - mov -38(%rsi), %r9 - mov -30(%rsi), %r10 - mov -22(%rsi), %r11 - mov -14(%rsi), %rcx - mov -8(%rsi), %rdx - movdqu %xmm0, -78(%rdi) - movdqu %xmm1, -62(%rdi) - mov %r8, -46(%rdi) - mov %r9, -38(%rdi) - mov %r10, -30(%rdi) - mov %r11, -22(%rdi) - mov %rcx, -14(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_70bytes): - movdqu -70(%rsi), %xmm0 - movdqu -54(%rsi), %xmm1 - mov -38(%rsi), %r9 - mov -30(%rsi), %r10 - mov -22(%rsi), %r11 - mov -14(%rsi), %rcx - mov -8(%rsi), %rdx - movdqu %xmm0, -70(%rdi) - movdqu %xmm1, -54(%rdi) - mov %r9, -38(%rdi) - mov %r10, -30(%rdi) - mov %r11, -22(%rdi) - mov %rcx, -14(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_62bytes): - movdqu -62(%rsi), %xmm0 - mov -46(%rsi), %r8 - mov -38(%rsi), %r9 - mov -30(%rsi), %r10 - mov -22(%rsi), %r11 - mov -14(%rsi), %rcx - mov -8(%rsi), %rdx - movdqu %xmm0, -62(%rdi) - mov %r8, -46(%rdi) - mov %r9, -38(%rdi) - mov %r10, -30(%rdi) - mov %r11, -22(%rdi) - mov %rcx, -14(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_54bytes): - movdqu -54(%rsi), %xmm0 - mov -38(%rsi), %r9 - mov -30(%rsi), %r10 - mov -22(%rsi), %r11 - mov -14(%rsi), %rcx - mov -8(%rsi), %rdx - movdqu %xmm0, -54(%rdi) - mov %r9, -38(%rdi) - mov %r10, -30(%rdi) - mov %r11, -22(%rdi) - mov %rcx, -14(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_46bytes): - mov -46(%rsi), %r8 - mov -38(%rsi), %r9 - mov -30(%rsi), %r10 - mov -22(%rsi), %r11 - mov -14(%rsi), %rcx - mov -8(%rsi), %rdx - mov %r8, -46(%rdi) - mov %r9, -38(%rdi) - mov %r10, -30(%rdi) - mov %r11, -22(%rdi) - mov %rcx, -14(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_38bytes): - mov -38(%rsi), %r9 - mov -30(%rsi), %r10 - mov -22(%rsi), %r11 - mov -14(%rsi), %rcx - mov -8(%rsi), %rdx - mov %r9, -38(%rdi) - mov %r10, -30(%rdi) - mov %r11, -22(%rdi) - mov %rcx, -14(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_30bytes): - mov -30(%rsi), %r10 - mov -22(%rsi), %r11 - mov -14(%rsi), %rcx - mov -8(%rsi), %rdx - mov %r10, -30(%rdi) - mov %r11, -22(%rdi) - mov %rcx, -14(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_22bytes): - mov -22(%rsi), %r11 - mov -14(%rsi), %rcx - mov -8(%rsi), %rdx - mov %r11, -22(%rdi) - mov %rcx, -14(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_14bytes): - mov -14(%rsi), %rcx - mov -8(%rsi), %rdx - mov %rcx, -14(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_6bytes): - mov -6(%rsi), %edx - mov -4(%rsi), %ecx - mov %edx, -6(%rdi) - mov %ecx, -4(%rdi) - ret - - .p2align 4 -L(write_79bytes): - movdqu -79(%rsi), %xmm0 - movdqu -63(%rsi), %xmm1 - mov -47(%rsi), %r8 - mov -39(%rsi), %r9 - mov -31(%rsi), %r10 - mov -23(%rsi), %r11 - mov -15(%rsi), %rcx - mov -8(%rsi), %rdx - movdqu %xmm0, -79(%rdi) - movdqu %xmm1, -63(%rdi) - mov %r8, -47(%rdi) - mov %r9, -39(%rdi) - mov %r10, -31(%rdi) - mov %r11, -23(%rdi) - mov %rcx, -15(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_71bytes): - movdqu -71(%rsi), %xmm0 - movdqu -55(%rsi), %xmm1 - mov -39(%rsi), %r9 - mov -31(%rsi), %r10 - mov -23(%rsi), %r11 - mov -15(%rsi), %rcx - mov -8(%rsi), %rdx - movdqu %xmm0, -71(%rdi) - movdqu %xmm1, -55(%rdi) - mov %r9, -39(%rdi) - mov %r10, -31(%rdi) - mov %r11, -23(%rdi) - mov %rcx, -15(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_63bytes): - movdqu -63(%rsi), %xmm0 - mov -47(%rsi), %r8 - mov -39(%rsi), %r9 - mov -31(%rsi), %r10 - mov -23(%rsi), %r11 - mov -15(%rsi), %rcx - mov -8(%rsi), %rdx - movdqu %xmm0, -63(%rdi) - mov %r8, -47(%rdi) - mov %r9, -39(%rdi) - mov %r10, -31(%rdi) - mov %r11, -23(%rdi) - mov %rcx, -15(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_55bytes): - movdqu -55(%rsi), %xmm0 - mov -39(%rsi), %r9 - mov -31(%rsi), %r10 - mov -23(%rsi), %r11 - mov -15(%rsi), %rcx - mov -8(%rsi), %rdx - movdqu %xmm0, -55(%rdi) - mov %r9, -39(%rdi) - mov %r10, -31(%rdi) - mov %r11, -23(%rdi) - mov %rcx, -15(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_47bytes): - mov -47(%rsi), %r8 - mov -39(%rsi), %r9 - mov -31(%rsi), %r10 - mov -23(%rsi), %r11 - mov -15(%rsi), %rcx - mov -8(%rsi), %rdx - mov %r8, -47(%rdi) - mov %r9, -39(%rdi) - mov %r10, -31(%rdi) - mov %r11, -23(%rdi) - mov %rcx, -15(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_39bytes): - mov -39(%rsi), %r9 - mov -31(%rsi), %r10 - mov -23(%rsi), %r11 - mov -15(%rsi), %rcx - mov -8(%rsi), %rdx - mov %r9, -39(%rdi) - mov %r10, -31(%rdi) - mov %r11, -23(%rdi) - mov %rcx, -15(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_31bytes): - mov -31(%rsi), %r10 - mov -23(%rsi), %r11 - mov -15(%rsi), %rcx - mov -8(%rsi), %rdx - mov %r10, -31(%rdi) - mov %r11, -23(%rdi) - mov %rcx, -15(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_23bytes): - mov -23(%rsi), %r11 - mov -15(%rsi), %rcx - mov -8(%rsi), %rdx - mov %r11, -23(%rdi) - mov %rcx, -15(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_15bytes): - mov -15(%rsi), %rcx - mov -8(%rsi), %rdx - mov %rcx, -15(%rdi) - mov %rdx, -8(%rdi) - ret - - .p2align 4 -L(write_7bytes): - mov -7(%rsi), %edx - mov -4(%rsi), %ecx - mov %edx, -7(%rdi) - mov %ecx, -4(%rdi) - ret - - .p2align 4 -L(large_page_fwd): - movdqu (%rsi), %xmm1 - lea 16(%rsi), %rsi - movdqu %xmm0, (%r8) - movntdq %xmm1, (%rdi) - lea 16(%rdi), %rdi - lea -0x90(%rdx), %rdx -#ifdef USE_AS_MEMMOVE - mov %rsi, %r9 - sub %rdi, %r9 - cmp %rdx, %r9 - jae L(memmove_is_memcpy_fwd) - shl $2, %rcx - cmp %rcx, %rdx - jb L(ll_cache_copy_fwd_start) -L(memmove_is_memcpy_fwd): -#endif -L(large_page_loop): - movdqu (%rsi), %xmm0 - movdqu 0x10(%rsi), %xmm1 - movdqu 0x20(%rsi), %xmm2 - movdqu 0x30(%rsi), %xmm3 - movdqu 0x40(%rsi), %xmm4 - movdqu 0x50(%rsi), %xmm5 - movdqu 0x60(%rsi), %xmm6 - movdqu 0x70(%rsi), %xmm7 - lea 0x80(%rsi), %rsi - - sub $0x80, %rdx - movntdq %xmm0, (%rdi) - movntdq %xmm1, 0x10(%rdi) - movntdq %xmm2, 0x20(%rdi) - movntdq %xmm3, 0x30(%rdi) - movntdq %xmm4, 0x40(%rdi) - movntdq %xmm5, 0x50(%rdi) - movntdq %xmm6, 0x60(%rdi) - movntdq %xmm7, 0x70(%rdi) - lea 0x80(%rdi), %rdi - jae L(large_page_loop) - cmp $-0x40, %rdx - lea 0x80(%rdx), %rdx - jl L(large_page_less_64bytes) - - movdqu (%rsi), %xmm0 - movdqu 0x10(%rsi), %xmm1 - movdqu 0x20(%rsi), %xmm2 - movdqu 0x30(%rsi), %xmm3 - lea 0x40(%rsi), %rsi - - movntdq %xmm0, (%rdi) - movntdq %xmm1, 0x10(%rdi) - movntdq %xmm2, 0x20(%rdi) - movntdq %xmm3, 0x30(%rdi) - lea 0x40(%rdi), %rdi - sub $0x40, %rdx -L(large_page_less_64bytes): - add %rdx, %rsi - add %rdx, %rdi - sfence - BRANCH_TO_JMPTBL_ENTRY (L(table_less_80bytes), %rdx, 4) - -#ifdef USE_AS_MEMMOVE - .p2align 4 -L(ll_cache_copy_fwd_start): - prefetcht0 0x1c0(%rsi) - prefetcht0 0x200(%rsi) - movdqu (%rsi), %xmm0 - movdqu 0x10(%rsi), %xmm1 - movdqu 0x20(%rsi), %xmm2 - movdqu 0x30(%rsi), %xmm3 - movdqu 0x40(%rsi), %xmm4 - movdqu 0x50(%rsi), %xmm5 - movdqu 0x60(%rsi), %xmm6 - movdqu 0x70(%rsi), %xmm7 - lea 0x80(%rsi), %rsi - - sub $0x80, %rdx - movaps %xmm0, (%rdi) - movaps %xmm1, 0x10(%rdi) - movaps %xmm2, 0x20(%rdi) - movaps %xmm3, 0x30(%rdi) - movaps %xmm4, 0x40(%rdi) - movaps %xmm5, 0x50(%rdi) - movaps %xmm6, 0x60(%rdi) - movaps %xmm7, 0x70(%rdi) - lea 0x80(%rdi), %rdi - jae L(ll_cache_copy_fwd_start) - cmp $-0x40, %rdx - lea 0x80(%rdx), %rdx - jl L(large_page_ll_less_fwd_64bytes) - - movdqu (%rsi), %xmm0 - movdqu 0x10(%rsi), %xmm1 - movdqu 0x20(%rsi), %xmm2 - movdqu 0x30(%rsi), %xmm3 - lea 0x40(%rsi), %rsi - - movaps %xmm0, (%rdi) - movaps %xmm1, 0x10(%rdi) - movaps %xmm2, 0x20(%rdi) - movaps %xmm3, 0x30(%rdi) - lea 0x40(%rdi), %rdi - sub $0x40, %rdx -L(large_page_ll_less_fwd_64bytes): - add %rdx, %rsi - add %rdx, %rdi - BRANCH_TO_JMPTBL_ENTRY (L(table_less_80bytes), %rdx, 4) - -#endif - .p2align 4 -L(large_page_bwd): - movdqu -0x10(%rsi), %xmm1 - lea -16(%rsi), %rsi - movdqu %xmm0, (%r8) - movdqa %xmm1, -0x10(%rdi) - lea -16(%rdi), %rdi - lea -0x90(%rdx), %rdx -#ifdef USE_AS_MEMMOVE - mov %rdi, %r9 - sub %rsi, %r9 - cmp %rdx, %r9 - jae L(memmove_is_memcpy_bwd) - cmp %rcx, %r9 - jb L(ll_cache_copy_bwd_start) -L(memmove_is_memcpy_bwd): -#endif -L(large_page_bwd_loop): - movdqu -0x10(%rsi), %xmm0 - movdqu -0x20(%rsi), %xmm1 - movdqu -0x30(%rsi), %xmm2 - movdqu -0x40(%rsi), %xmm3 - movdqu -0x50(%rsi), %xmm4 - movdqu -0x60(%rsi), %xmm5 - movdqu -0x70(%rsi), %xmm6 - movdqu -0x80(%rsi), %xmm7 - lea -0x80(%rsi), %rsi - - sub $0x80, %rdx - movntdq %xmm0, -0x10(%rdi) - movntdq %xmm1, -0x20(%rdi) - movntdq %xmm2, -0x30(%rdi) - movntdq %xmm3, -0x40(%rdi) - movntdq %xmm4, -0x50(%rdi) - movntdq %xmm5, -0x60(%rdi) - movntdq %xmm6, -0x70(%rdi) - movntdq %xmm7, -0x80(%rdi) - lea -0x80(%rdi), %rdi - jae L(large_page_bwd_loop) - cmp $-0x40, %rdx - lea 0x80(%rdx), %rdx - jl L(large_page_less_bwd_64bytes) - - movdqu -0x10(%rsi), %xmm0 - movdqu -0x20(%rsi), %xmm1 - movdqu -0x30(%rsi), %xmm2 - movdqu -0x40(%rsi), %xmm3 - lea -0x40(%rsi), %rsi - - movntdq %xmm0, -0x10(%rdi) - movntdq %xmm1, -0x20(%rdi) - movntdq %xmm2, -0x30(%rdi) - movntdq %xmm3, -0x40(%rdi) - lea -0x40(%rdi), %rdi - sub $0x40, %rdx -L(large_page_less_bwd_64bytes): - sfence - BRANCH_TO_JMPTBL_ENTRY (L(table_less_80bytes), %rdx, 4) - -#ifdef USE_AS_MEMMOVE - .p2align 4 -L(ll_cache_copy_bwd_start): - prefetcht0 -0x1c0(%rsi) - prefetcht0 -0x200(%rsi) - movdqu -0x10(%rsi), %xmm0 - movdqu -0x20(%rsi), %xmm1 - movdqu -0x30(%rsi), %xmm2 - movdqu -0x40(%rsi), %xmm3 - movdqu -0x50(%rsi), %xmm4 - movdqu -0x60(%rsi), %xmm5 - movdqu -0x70(%rsi), %xmm6 - movdqu -0x80(%rsi), %xmm7 - lea -0x80(%rsi), %rsi - - sub $0x80, %rdx - movaps %xmm0, -0x10(%rdi) - movaps %xmm1, -0x20(%rdi) - movaps %xmm2, -0x30(%rdi) - movaps %xmm3, -0x40(%rdi) - movaps %xmm4, -0x50(%rdi) - movaps %xmm5, -0x60(%rdi) - movaps %xmm6, -0x70(%rdi) - movaps %xmm7, -0x80(%rdi) - lea -0x80(%rdi), %rdi - jae L(ll_cache_copy_bwd_start) - cmp $-0x40, %rdx - lea 0x80(%rdx), %rdx - jl L(large_page_ll_less_bwd_64bytes) - - movdqu -0x10(%rsi), %xmm0 - movdqu -0x20(%rsi), %xmm1 - movdqu -0x30(%rsi), %xmm2 - movdqu -0x40(%rsi), %xmm3 - lea -0x40(%rsi), %rsi - - movaps %xmm0, -0x10(%rdi) - movaps %xmm1, -0x20(%rdi) - movaps %xmm2, -0x30(%rdi) - movaps %xmm3, -0x40(%rdi) - lea -0x40(%rdi), %rdi - sub $0x40, %rdx -L(large_page_ll_less_bwd_64bytes): - BRANCH_TO_JMPTBL_ENTRY (L(table_less_80bytes), %rdx, 4) -#endif - -END (MEMCPY) - - .section .rodata.ssse3,"a",@progbits - .p2align 3 -L(table_less_80bytes): - .int JMPTBL (L(write_0bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_1bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_2bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_3bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_4bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_5bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_6bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_7bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_8bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_9bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_10bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_11bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_12bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_13bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_14bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_15bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_16bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_17bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_18bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_19bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_20bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_21bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_22bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_23bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_24bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_25bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_26bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_27bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_28bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_29bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_30bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_31bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_32bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_33bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_34bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_35bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_36bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_37bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_38bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_39bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_40bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_41bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_42bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_43bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_44bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_45bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_46bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_47bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_48bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_49bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_50bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_51bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_52bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_53bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_54bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_55bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_56bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_57bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_58bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_59bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_60bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_61bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_62bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_63bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_64bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_65bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_66bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_67bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_68bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_69bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_70bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_71bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_72bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_73bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_74bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_75bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_76bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_77bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_78bytes), L(table_less_80bytes)) - .int JMPTBL (L(write_79bytes), L(table_less_80bytes)) - - .p2align 3 -L(shl_table): - .int JMPTBL (L(shl_0), L(shl_table)) - .int JMPTBL (L(shl_1), L(shl_table)) - .int JMPTBL (L(shl_2), L(shl_table)) - .int JMPTBL (L(shl_3), L(shl_table)) - .int JMPTBL (L(shl_4), L(shl_table)) - .int JMPTBL (L(shl_5), L(shl_table)) - .int JMPTBL (L(shl_6), L(shl_table)) - .int JMPTBL (L(shl_7), L(shl_table)) - .int JMPTBL (L(shl_8), L(shl_table)) - .int JMPTBL (L(shl_9), L(shl_table)) - .int JMPTBL (L(shl_10), L(shl_table)) - .int JMPTBL (L(shl_11), L(shl_table)) - .int JMPTBL (L(shl_12), L(shl_table)) - .int JMPTBL (L(shl_13), L(shl_table)) - .int JMPTBL (L(shl_14), L(shl_table)) - .int JMPTBL (L(shl_15), L(shl_table)) - - .p2align 3 -L(shl_table_bwd): - .int JMPTBL (L(shl_0_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_1_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_2_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_3_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_4_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_5_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_6_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_7_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_8_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_9_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_10_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_11_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_12_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_13_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_14_bwd), L(shl_table_bwd)) - .int JMPTBL (L(shl_15_bwd), L(shl_table_bwd)) - -#endif diff --git a/sysdeps/x86_64/multiarch/memcpy.S b/sysdeps/x86_64/multiarch/memcpy.S deleted file mode 100644 index af2770397c..0000000000 --- a/sysdeps/x86_64/multiarch/memcpy.S +++ /dev/null @@ -1,75 +0,0 @@ -/* Multiple versions of memcpy - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib and for - DSO. In static binaries we need memcpy before the initialization - happened. */ -#if defined SHARED && IS_IN (libc) - .text -ENTRY(__new_memcpy) - .type __new_memcpy, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - lea __memcpy_erms(%rip), %RAX_LP - HAS_ARCH_FEATURE (Prefer_ERMS) - jnz 2f - HAS_ARCH_FEATURE (Prefer_No_AVX512) - jnz 1f - HAS_ARCH_FEATURE (AVX512F_Usable) - jz 1f - lea __memcpy_avx512_no_vzeroupper(%rip), %RAX_LP - HAS_ARCH_FEATURE (Prefer_No_VZEROUPPER) - jnz 2f - lea __memcpy_avx512_unaligned_erms(%rip), %RAX_LP - HAS_CPU_FEATURE (ERMS) - jnz 2f - lea __memcpy_avx512_unaligned(%rip), %RAX_LP - ret -1: lea __memcpy_avx_unaligned(%rip), %RAX_LP - HAS_ARCH_FEATURE (AVX_Fast_Unaligned_Load) - jz L(Fast_Unaligned_Load) - HAS_CPU_FEATURE (ERMS) - jz 2f - lea __memcpy_avx_unaligned_erms(%rip), %RAX_LP - ret -L(Fast_Unaligned_Load): - lea __memcpy_sse2_unaligned(%rip), %RAX_LP - HAS_ARCH_FEATURE (Fast_Unaligned_Copy) - jz L(SSSE3) - HAS_CPU_FEATURE (ERMS) - jz 2f - lea __memcpy_sse2_unaligned_erms(%rip), %RAX_LP - ret -L(SSSE3): - HAS_CPU_FEATURE (SSSE3) - jz 2f - lea __memcpy_ssse3_back(%rip), %RAX_LP - HAS_ARCH_FEATURE (Fast_Copy_Backward) - jnz 2f - lea __memcpy_ssse3(%rip), %RAX_LP -2: ret -END(__new_memcpy) - -# undef memcpy -# include -versioned_symbol (libc, __new_memcpy, memcpy, GLIBC_2_14); -#endif diff --git a/sysdeps/x86_64/multiarch/memcpy_chk.S b/sysdeps/x86_64/multiarch/memcpy_chk.S deleted file mode 100644 index 8737fb9755..0000000000 --- a/sysdeps/x86_64/multiarch/memcpy_chk.S +++ /dev/null @@ -1,72 +0,0 @@ -/* Multiple versions of __memcpy_chk - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib and for - DSO. There are no multiarch memcpy functions for static binaries. - */ -#if IS_IN (libc) -# ifdef SHARED - .text -ENTRY(__memcpy_chk) - .type __memcpy_chk, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - HAS_ARCH_FEATURE (Prefer_No_AVX512) - jnz 1f - HAS_ARCH_FEATURE (AVX512F_Usable) - jz 1f - lea __memcpy_chk_avx512_no_vzeroupper(%rip), %RAX_LP - HAS_ARCH_FEATURE (Prefer_No_VZEROUPPER) - jnz 2f - lea __memcpy_chk_avx512_unaligned_erms(%rip), %RAX_LP - HAS_CPU_FEATURE (ERMS) - jnz 2f - lea __memcpy_chk_avx512_unaligned(%rip), %RAX_LP - ret -1: lea __memcpy_chk_avx_unaligned(%rip), %RAX_LP - HAS_ARCH_FEATURE (AVX_Fast_Unaligned_Load) - jz L(Fast_Unaligned_Load) - HAS_CPU_FEATURE (ERMS) - jz 2f - lea __memcpy_chk_avx_unaligned_erms(%rip), %RAX_LP - ret -L(Fast_Unaligned_Load): - lea __memcpy_chk_sse2_unaligned(%rip), %RAX_LP - HAS_ARCH_FEATURE (Fast_Unaligned_Copy) - jz L(SSSE3) - HAS_CPU_FEATURE (ERMS) - jz 2f - lea __memcpy_chk_sse2_unaligned_erms(%rip), %RAX_LP - ret -L(SSSE3): - HAS_CPU_FEATURE (SSSE3) - jz 2f - lea __memcpy_chk_ssse3_back(%rip), %RAX_LP - HAS_ARCH_FEATURE (Fast_Copy_Backward) - jnz 2f - lea __memcpy_chk_ssse3(%rip), %RAX_LP -2: ret -END(__memcpy_chk) -# else -# include "../memcpy_chk.S" -# endif -#endif diff --git a/sysdeps/x86_64/multiarch/memmove-avx-unaligned-erms.S b/sysdeps/x86_64/multiarch/memmove-avx-unaligned-erms.S deleted file mode 100644 index e195e93f15..0000000000 --- a/sysdeps/x86_64/multiarch/memmove-avx-unaligned-erms.S +++ /dev/null @@ -1,12 +0,0 @@ -#if IS_IN (libc) -# define VEC_SIZE 32 -# define VEC(i) ymm##i -# define VMOVNT vmovntdq -# define VMOVU vmovdqu -# define VMOVA vmovdqa - -# define SECTION(p) p##.avx -# define MEMMOVE_SYMBOL(p,s) p##_avx_##s - -# include "memmove-vec-unaligned-erms.S" -#endif diff --git a/sysdeps/x86_64/multiarch/memmove-avx512-no-vzeroupper.S b/sysdeps/x86_64/multiarch/memmove-avx512-no-vzeroupper.S deleted file mode 100644 index f3ef10577c..0000000000 --- a/sysdeps/x86_64/multiarch/memmove-avx512-no-vzeroupper.S +++ /dev/null @@ -1,420 +0,0 @@ -/* memmove/memcpy/mempcpy optimized with AVX512 for KNL hardware. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if IS_IN (libc) - -# include "asm-syntax.h" - - .section .text.avx512,"ax",@progbits -# if defined SHARED && !defined USE_AS_MEMPCPY && !defined USE_AS_MEMMOVE -ENTRY (__mempcpy_chk_avx512_no_vzeroupper) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) -END (__mempcpy_chk_avx512_no_vzeroupper) - -ENTRY (__mempcpy_avx512_no_vzeroupper) - movq %rdi, %rax - addq %rdx, %rax - jmp L(start) -END (__mempcpy_avx512_no_vzeroupper) -# endif - -# ifdef SHARED -ENTRY (__memmove_chk_avx512_no_vzeroupper) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) -END (__memmove_chk_avx512_no_vzeroupper) -# endif - -ENTRY (__memmove_avx512_no_vzeroupper) - mov %rdi, %rax -# ifdef USE_AS_MEMPCPY - add %rdx, %rax -# endif -L(start): - lea (%rsi, %rdx), %rcx - lea (%rdi, %rdx), %r9 - cmp $512, %rdx - ja L(512bytesormore) - -L(check): - cmp $16, %rdx - jbe L(less_16bytes) - cmp $256, %rdx - jb L(less_256bytes) - vmovups (%rsi), %zmm0 - vmovups 0x40(%rsi), %zmm1 - vmovups 0x80(%rsi), %zmm2 - vmovups 0xC0(%rsi), %zmm3 - vmovups -0x100(%rcx), %zmm4 - vmovups -0xC0(%rcx), %zmm5 - vmovups -0x80(%rcx), %zmm6 - vmovups -0x40(%rcx), %zmm7 - vmovups %zmm0, (%rdi) - vmovups %zmm1, 0x40(%rdi) - vmovups %zmm2, 0x80(%rdi) - vmovups %zmm3, 0xC0(%rdi) - vmovups %zmm4, -0x100(%r9) - vmovups %zmm5, -0xC0(%r9) - vmovups %zmm6, -0x80(%r9) - vmovups %zmm7, -0x40(%r9) - ret - -L(less_256bytes): - cmp $128, %dl - jb L(less_128bytes) - vmovups (%rsi), %zmm0 - vmovups 0x40(%rsi), %zmm1 - vmovups -0x80(%rcx), %zmm2 - vmovups -0x40(%rcx), %zmm3 - vmovups %zmm0, (%rdi) - vmovups %zmm1, 0x40(%rdi) - vmovups %zmm2, -0x80(%r9) - vmovups %zmm3, -0x40(%r9) - ret - -L(less_128bytes): - cmp $64, %dl - jb L(less_64bytes) - vmovdqu (%rsi), %ymm0 - vmovdqu 0x20(%rsi), %ymm1 - vmovdqu -0x40(%rcx), %ymm2 - vmovdqu -0x20(%rcx), %ymm3 - vmovdqu %ymm0, (%rdi) - vmovdqu %ymm1, 0x20(%rdi) - vmovdqu %ymm2, -0x40(%r9) - vmovdqu %ymm3, -0x20(%r9) - ret - -L(less_64bytes): - cmp $32, %dl - jb L(less_32bytes) - vmovdqu (%rsi), %ymm0 - vmovdqu -0x20(%rcx), %ymm1 - vmovdqu %ymm0, (%rdi) - vmovdqu %ymm1, -0x20(%r9) - ret - -L(less_32bytes): - vmovdqu (%rsi), %xmm0 - vmovdqu -0x10(%rcx), %xmm1 - vmovdqu %xmm0, (%rdi) - vmovdqu %xmm1, -0x10(%r9) - ret - -L(less_16bytes): - cmp $8, %dl - jb L(less_8bytes) - movq (%rsi), %rsi - movq -0x8(%rcx), %rcx - movq %rsi, (%rdi) - movq %rcx, -0x8(%r9) - ret - -L(less_8bytes): - cmp $4, %dl - jb L(less_4bytes) - mov (%rsi), %esi - mov -0x4(%rcx), %ecx - mov %esi, (%rdi) - mov %ecx, -0x4(%r9) - ret - -L(less_4bytes): - cmp $2, %dl - jb L(less_2bytes) - mov (%rsi), %si - mov -0x2(%rcx), %cx - mov %si, (%rdi) - mov %cx, -0x2(%r9) - ret - -L(less_2bytes): - cmp $1, %dl - jb L(less_1bytes) - mov (%rsi), %cl - mov %cl, (%rdi) -L(less_1bytes): - ret - -L(512bytesormore): -# ifdef SHARED_CACHE_SIZE_HALF - mov $SHARED_CACHE_SIZE_HALF, %r8 -# else - mov __x86_shared_cache_size_half(%rip), %r8 -# endif - cmp %r8, %rdx - jae L(preloop_large) - cmp $1024, %rdx - ja L(1024bytesormore) - prefetcht1 (%rsi) - prefetcht1 0x40(%rsi) - prefetcht1 0x80(%rsi) - prefetcht1 0xC0(%rsi) - prefetcht1 0x100(%rsi) - prefetcht1 0x140(%rsi) - prefetcht1 0x180(%rsi) - prefetcht1 0x1C0(%rsi) - prefetcht1 -0x200(%rcx) - prefetcht1 -0x1C0(%rcx) - prefetcht1 -0x180(%rcx) - prefetcht1 -0x140(%rcx) - prefetcht1 -0x100(%rcx) - prefetcht1 -0xC0(%rcx) - prefetcht1 -0x80(%rcx) - prefetcht1 -0x40(%rcx) - vmovups (%rsi), %zmm0 - vmovups 0x40(%rsi), %zmm1 - vmovups 0x80(%rsi), %zmm2 - vmovups 0xC0(%rsi), %zmm3 - vmovups 0x100(%rsi), %zmm4 - vmovups 0x140(%rsi), %zmm5 - vmovups 0x180(%rsi), %zmm6 - vmovups 0x1C0(%rsi), %zmm7 - vmovups -0x200(%rcx), %zmm8 - vmovups -0x1C0(%rcx), %zmm9 - vmovups -0x180(%rcx), %zmm10 - vmovups -0x140(%rcx), %zmm11 - vmovups -0x100(%rcx), %zmm12 - vmovups -0xC0(%rcx), %zmm13 - vmovups -0x80(%rcx), %zmm14 - vmovups -0x40(%rcx), %zmm15 - vmovups %zmm0, (%rdi) - vmovups %zmm1, 0x40(%rdi) - vmovups %zmm2, 0x80(%rdi) - vmovups %zmm3, 0xC0(%rdi) - vmovups %zmm4, 0x100(%rdi) - vmovups %zmm5, 0x140(%rdi) - vmovups %zmm6, 0x180(%rdi) - vmovups %zmm7, 0x1C0(%rdi) - vmovups %zmm8, -0x200(%r9) - vmovups %zmm9, -0x1C0(%r9) - vmovups %zmm10, -0x180(%r9) - vmovups %zmm11, -0x140(%r9) - vmovups %zmm12, -0x100(%r9) - vmovups %zmm13, -0xC0(%r9) - vmovups %zmm14, -0x80(%r9) - vmovups %zmm15, -0x40(%r9) - ret - -L(1024bytesormore): - cmp %rsi, %rdi - ja L(1024bytesormore_bkw) - sub $512, %r9 - vmovups -0x200(%rcx), %zmm8 - vmovups -0x1C0(%rcx), %zmm9 - vmovups -0x180(%rcx), %zmm10 - vmovups -0x140(%rcx), %zmm11 - vmovups -0x100(%rcx), %zmm12 - vmovups -0xC0(%rcx), %zmm13 - vmovups -0x80(%rcx), %zmm14 - vmovups -0x40(%rcx), %zmm15 - prefetcht1 (%rsi) - prefetcht1 0x40(%rsi) - prefetcht1 0x80(%rsi) - prefetcht1 0xC0(%rsi) - prefetcht1 0x100(%rsi) - prefetcht1 0x140(%rsi) - prefetcht1 0x180(%rsi) - prefetcht1 0x1C0(%rsi) - -/* Loop with unaligned memory access. */ -L(gobble_512bytes_loop): - vmovups (%rsi), %zmm0 - vmovups 0x40(%rsi), %zmm1 - vmovups 0x80(%rsi), %zmm2 - vmovups 0xC0(%rsi), %zmm3 - vmovups 0x100(%rsi), %zmm4 - vmovups 0x140(%rsi), %zmm5 - vmovups 0x180(%rsi), %zmm6 - vmovups 0x1C0(%rsi), %zmm7 - add $512, %rsi - prefetcht1 (%rsi) - prefetcht1 0x40(%rsi) - prefetcht1 0x80(%rsi) - prefetcht1 0xC0(%rsi) - prefetcht1 0x100(%rsi) - prefetcht1 0x140(%rsi) - prefetcht1 0x180(%rsi) - prefetcht1 0x1C0(%rsi) - vmovups %zmm0, (%rdi) - vmovups %zmm1, 0x40(%rdi) - vmovups %zmm2, 0x80(%rdi) - vmovups %zmm3, 0xC0(%rdi) - vmovups %zmm4, 0x100(%rdi) - vmovups %zmm5, 0x140(%rdi) - vmovups %zmm6, 0x180(%rdi) - vmovups %zmm7, 0x1C0(%rdi) - add $512, %rdi - cmp %r9, %rdi - jb L(gobble_512bytes_loop) - vmovups %zmm8, (%r9) - vmovups %zmm9, 0x40(%r9) - vmovups %zmm10, 0x80(%r9) - vmovups %zmm11, 0xC0(%r9) - vmovups %zmm12, 0x100(%r9) - vmovups %zmm13, 0x140(%r9) - vmovups %zmm14, 0x180(%r9) - vmovups %zmm15, 0x1C0(%r9) - ret - -L(1024bytesormore_bkw): - add $512, %rdi - vmovups 0x1C0(%rsi), %zmm8 - vmovups 0x180(%rsi), %zmm9 - vmovups 0x140(%rsi), %zmm10 - vmovups 0x100(%rsi), %zmm11 - vmovups 0xC0(%rsi), %zmm12 - vmovups 0x80(%rsi), %zmm13 - vmovups 0x40(%rsi), %zmm14 - vmovups (%rsi), %zmm15 - prefetcht1 -0x40(%rcx) - prefetcht1 -0x80(%rcx) - prefetcht1 -0xC0(%rcx) - prefetcht1 -0x100(%rcx) - prefetcht1 -0x140(%rcx) - prefetcht1 -0x180(%rcx) - prefetcht1 -0x1C0(%rcx) - prefetcht1 -0x200(%rcx) - -/* Backward loop with unaligned memory access. */ -L(gobble_512bytes_loop_bkw): - vmovups -0x40(%rcx), %zmm0 - vmovups -0x80(%rcx), %zmm1 - vmovups -0xC0(%rcx), %zmm2 - vmovups -0x100(%rcx), %zmm3 - vmovups -0x140(%rcx), %zmm4 - vmovups -0x180(%rcx), %zmm5 - vmovups -0x1C0(%rcx), %zmm6 - vmovups -0x200(%rcx), %zmm7 - sub $512, %rcx - prefetcht1 -0x40(%rcx) - prefetcht1 -0x80(%rcx) - prefetcht1 -0xC0(%rcx) - prefetcht1 -0x100(%rcx) - prefetcht1 -0x140(%rcx) - prefetcht1 -0x180(%rcx) - prefetcht1 -0x1C0(%rcx) - prefetcht1 -0x200(%rcx) - vmovups %zmm0, -0x40(%r9) - vmovups %zmm1, -0x80(%r9) - vmovups %zmm2, -0xC0(%r9) - vmovups %zmm3, -0x100(%r9) - vmovups %zmm4, -0x140(%r9) - vmovups %zmm5, -0x180(%r9) - vmovups %zmm6, -0x1C0(%r9) - vmovups %zmm7, -0x200(%r9) - sub $512, %r9 - cmp %rdi, %r9 - ja L(gobble_512bytes_loop_bkw) - vmovups %zmm8, -0x40(%rdi) - vmovups %zmm9, -0x80(%rdi) - vmovups %zmm10, -0xC0(%rdi) - vmovups %zmm11, -0x100(%rdi) - vmovups %zmm12, -0x140(%rdi) - vmovups %zmm13, -0x180(%rdi) - vmovups %zmm14, -0x1C0(%rdi) - vmovups %zmm15, -0x200(%rdi) - ret - -L(preloop_large): - cmp %rsi, %rdi - ja L(preloop_large_bkw) - vmovups (%rsi), %zmm4 - vmovups 0x40(%rsi), %zmm5 - -/* Align destination for access with non-temporal stores in the loop. */ - mov %rdi, %r8 - and $-0x80, %rdi - add $0x80, %rdi - sub %rdi, %r8 - sub %r8, %rsi - add %r8, %rdx -L(gobble_256bytes_nt_loop): - prefetcht1 0x200(%rsi) - prefetcht1 0x240(%rsi) - prefetcht1 0x280(%rsi) - prefetcht1 0x2C0(%rsi) - prefetcht1 0x300(%rsi) - prefetcht1 0x340(%rsi) - prefetcht1 0x380(%rsi) - prefetcht1 0x3C0(%rsi) - vmovdqu64 (%rsi), %zmm0 - vmovdqu64 0x40(%rsi), %zmm1 - vmovdqu64 0x80(%rsi), %zmm2 - vmovdqu64 0xC0(%rsi), %zmm3 - vmovntdq %zmm0, (%rdi) - vmovntdq %zmm1, 0x40(%rdi) - vmovntdq %zmm2, 0x80(%rdi) - vmovntdq %zmm3, 0xC0(%rdi) - sub $256, %rdx - add $256, %rsi - add $256, %rdi - cmp $256, %rdx - ja L(gobble_256bytes_nt_loop) - sfence - vmovups %zmm4, (%rax) - vmovups %zmm5, 0x40(%rax) - jmp L(check) - -L(preloop_large_bkw): - vmovups -0x80(%rcx), %zmm4 - vmovups -0x40(%rcx), %zmm5 - -/* Align end of destination for access with non-temporal stores. */ - mov %r9, %r8 - and $-0x80, %r9 - sub %r9, %r8 - sub %r8, %rcx - sub %r8, %rdx - add %r9, %r8 -L(gobble_256bytes_nt_loop_bkw): - prefetcht1 -0x400(%rcx) - prefetcht1 -0x3C0(%rcx) - prefetcht1 -0x380(%rcx) - prefetcht1 -0x340(%rcx) - prefetcht1 -0x300(%rcx) - prefetcht1 -0x2C0(%rcx) - prefetcht1 -0x280(%rcx) - prefetcht1 -0x240(%rcx) - vmovdqu64 -0x100(%rcx), %zmm0 - vmovdqu64 -0xC0(%rcx), %zmm1 - vmovdqu64 -0x80(%rcx), %zmm2 - vmovdqu64 -0x40(%rcx), %zmm3 - vmovntdq %zmm0, -0x100(%r9) - vmovntdq %zmm1, -0xC0(%r9) - vmovntdq %zmm2, -0x80(%r9) - vmovntdq %zmm3, -0x40(%r9) - sub $256, %rdx - sub $256, %rcx - sub $256, %r9 - cmp $256, %rdx - ja L(gobble_256bytes_nt_loop_bkw) - sfence - vmovups %zmm4, -0x80(%r8) - vmovups %zmm5, -0x40(%r8) - jmp L(check) -END (__memmove_avx512_no_vzeroupper) - -# ifdef SHARED -strong_alias (__memmove_avx512_no_vzeroupper, __memcpy_avx512_no_vzeroupper) -strong_alias (__memmove_chk_avx512_no_vzeroupper, __memcpy_chk_avx512_no_vzeroupper) -# endif -#endif diff --git a/sysdeps/x86_64/multiarch/memmove-avx512-unaligned-erms.S b/sysdeps/x86_64/multiarch/memmove-avx512-unaligned-erms.S deleted file mode 100644 index aac1515cf6..0000000000 --- a/sysdeps/x86_64/multiarch/memmove-avx512-unaligned-erms.S +++ /dev/null @@ -1,12 +0,0 @@ -#if IS_IN (libc) -# define VEC_SIZE 64 -# define VEC(i) zmm##i -# define VMOVNT vmovntdq -# define VMOVU vmovdqu64 -# define VMOVA vmovdqa64 - -# define SECTION(p) p##.avx512 -# define MEMMOVE_SYMBOL(p,s) p##_avx512_##s - -# include "memmove-vec-unaligned-erms.S" -#endif diff --git a/sysdeps/x86_64/multiarch/memmove-ssse3-back.S b/sysdeps/x86_64/multiarch/memmove-ssse3-back.S deleted file mode 100644 index f9a4e9aff9..0000000000 --- a/sysdeps/x86_64/multiarch/memmove-ssse3-back.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_MEMMOVE -#define MEMCPY __memmove_ssse3_back -#define MEMCPY_CHK __memmove_chk_ssse3_back -#include "memcpy-ssse3-back.S" diff --git a/sysdeps/x86_64/multiarch/memmove-ssse3.S b/sysdeps/x86_64/multiarch/memmove-ssse3.S deleted file mode 100644 index 295430b1ef..0000000000 --- a/sysdeps/x86_64/multiarch/memmove-ssse3.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_MEMMOVE -#define MEMCPY __memmove_ssse3 -#define MEMCPY_CHK __memmove_chk_ssse3 -#include "memcpy-ssse3.S" diff --git a/sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S b/sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S deleted file mode 100644 index dee3ec529c..0000000000 --- a/sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S +++ /dev/null @@ -1,553 +0,0 @@ -/* memmove/memcpy/mempcpy with unaligned load/store and rep movsb - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* memmove/memcpy/mempcpy is implemented as: - 1. Use overlapping load and store to avoid branch. - 2. Load all sources into registers and store them together to avoid - possible address overlap between source and destination. - 3. If size is 8 * VEC_SIZE or less, load all sources into registers - and store them together. - 4. If address of destination > address of source, backward copy - 4 * VEC_SIZE at a time with unaligned load and aligned store. - Load the first 4 * VEC and last VEC before the loop and store - them after the loop to support overlapping addresses. - 5. Otherwise, forward copy 4 * VEC_SIZE at a time with unaligned - load and aligned store. Load the last 4 * VEC and first VEC - before the loop and store them after the loop to support - overlapping addresses. - 6. If size >= __x86_shared_non_temporal_threshold and there is no - overlap between destination and source, use non-temporal store - instead of aligned store. */ - -#include - -#ifndef MEMCPY_SYMBOL -# define MEMCPY_SYMBOL(p,s) MEMMOVE_SYMBOL(p, s) -#endif - -#ifndef MEMPCPY_SYMBOL -# define MEMPCPY_SYMBOL(p,s) MEMMOVE_SYMBOL(p, s) -#endif - -#ifndef MEMMOVE_CHK_SYMBOL -# define MEMMOVE_CHK_SYMBOL(p,s) MEMMOVE_SYMBOL(p, s) -#endif - -#ifndef VZEROUPPER -# if VEC_SIZE > 16 -# define VZEROUPPER vzeroupper -# else -# define VZEROUPPER -# endif -#endif - -/* Threshold to use Enhanced REP MOVSB. Since there is overhead to set - up REP MOVSB operation, REP MOVSB isn't faster on short data. The - memcpy micro benchmark in glibc shows that 2KB is the approximate - value above which REP MOVSB becomes faster than SSE2 optimization - on processors with Enhanced REP MOVSB. Since larger register size - can move more data with a single load and store, the threshold is - higher with larger register size. */ -#ifndef REP_MOVSB_THRESHOLD -# define REP_MOVSB_THRESHOLD (2048 * (VEC_SIZE / 16)) -#endif - -#ifndef PREFETCH -# define PREFETCH(addr) prefetcht0 addr -#endif - -/* Assume 64-byte prefetch size. */ -#ifndef PREFETCH_SIZE -# define PREFETCH_SIZE 64 -#endif - -#define PREFETCHED_LOAD_SIZE (VEC_SIZE * 4) - -#if PREFETCH_SIZE == 64 -# if PREFETCHED_LOAD_SIZE == PREFETCH_SIZE -# define PREFETCH_ONE_SET(dir, base, offset) \ - PREFETCH ((offset)base) -# elif PREFETCHED_LOAD_SIZE == 2 * PREFETCH_SIZE -# define PREFETCH_ONE_SET(dir, base, offset) \ - PREFETCH ((offset)base); \ - PREFETCH ((offset + dir * PREFETCH_SIZE)base) -# elif PREFETCHED_LOAD_SIZE == 4 * PREFETCH_SIZE -# define PREFETCH_ONE_SET(dir, base, offset) \ - PREFETCH ((offset)base); \ - PREFETCH ((offset + dir * PREFETCH_SIZE)base); \ - PREFETCH ((offset + dir * PREFETCH_SIZE)base); \ - PREFETCH ((offset + dir * PREFETCH_SIZE * 2)base); \ - PREFETCH ((offset + dir * PREFETCH_SIZE * 3)base) -# else -# error Unsupported PREFETCHED_LOAD_SIZE! -# endif -#else -# error Unsupported PREFETCH_SIZE! -#endif - -#ifndef SECTION -# error SECTION is not defined! -#endif - - .section SECTION(.text),"ax",@progbits -#if defined SHARED && IS_IN (libc) -ENTRY (MEMMOVE_CHK_SYMBOL (__mempcpy_chk, unaligned)) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) -END (MEMMOVE_CHK_SYMBOL (__mempcpy_chk, unaligned)) -#endif - -#if VEC_SIZE == 16 || defined SHARED -ENTRY (MEMPCPY_SYMBOL (__mempcpy, unaligned)) - movq %rdi, %rax - addq %rdx, %rax - jmp L(start) -END (MEMPCPY_SYMBOL (__mempcpy, unaligned)) -#endif - -#if defined SHARED && IS_IN (libc) -ENTRY (MEMMOVE_CHK_SYMBOL (__memmove_chk, unaligned)) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) -END (MEMMOVE_CHK_SYMBOL (__memmove_chk, unaligned)) -#endif - -ENTRY (MEMMOVE_SYMBOL (__memmove, unaligned)) - movq %rdi, %rax -L(start): - cmpq $VEC_SIZE, %rdx - jb L(less_vec) - cmpq $(VEC_SIZE * 2), %rdx - ja L(more_2x_vec) -#if !defined USE_MULTIARCH || !IS_IN (libc) -L(last_2x_vec): -#endif - /* From VEC and to 2 * VEC. No branch when size == VEC_SIZE. */ - VMOVU (%rsi), %VEC(0) - VMOVU -VEC_SIZE(%rsi,%rdx), %VEC(1) - VMOVU %VEC(0), (%rdi) - VMOVU %VEC(1), -VEC_SIZE(%rdi,%rdx) - VZEROUPPER -#if !defined USE_MULTIARCH || !IS_IN (libc) -L(nop): -#endif - ret -#if defined USE_MULTIARCH && IS_IN (libc) -END (MEMMOVE_SYMBOL (__memmove, unaligned)) - -# if VEC_SIZE == 16 -# if defined SHARED -/* Only used to measure performance of REP MOVSB. */ -ENTRY (__mempcpy_erms) - movq %rdi, %rax - addq %rdx, %rax - jmp L(start_movsb) -END (__mempcpy_erms) -# endif - -ENTRY (__memmove_erms) - movq %rdi, %rax -L(start_movsb): - movq %rdx, %rcx - cmpq %rsi, %rdi - jb 1f - /* Source == destination is less common. */ - je 2f - leaq (%rsi,%rcx), %rdx - cmpq %rdx, %rdi - jb L(movsb_backward) -1: - rep movsb -2: - ret -L(movsb_backward): - leaq -1(%rdi,%rcx), %rdi - leaq -1(%rsi,%rcx), %rsi - std - rep movsb - cld - ret -END (__memmove_erms) -# if defined SHARED -strong_alias (__memmove_erms, __memcpy_erms) -# endif -# endif - -# ifdef SHARED -ENTRY (MEMMOVE_CHK_SYMBOL (__mempcpy_chk, unaligned_erms)) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) -END (MEMMOVE_CHK_SYMBOL (__mempcpy_chk, unaligned_erms)) - -ENTRY (MEMMOVE_SYMBOL (__mempcpy, unaligned_erms)) - movq %rdi, %rax - addq %rdx, %rax - jmp L(start_erms) -END (MEMMOVE_SYMBOL (__mempcpy, unaligned_erms)) - -ENTRY (MEMMOVE_CHK_SYMBOL (__memmove_chk, unaligned_erms)) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) -END (MEMMOVE_CHK_SYMBOL (__memmove_chk, unaligned_erms)) -# endif - -ENTRY (MEMMOVE_SYMBOL (__memmove, unaligned_erms)) - movq %rdi, %rax -L(start_erms): - cmpq $VEC_SIZE, %rdx - jb L(less_vec) - cmpq $(VEC_SIZE * 2), %rdx - ja L(movsb_more_2x_vec) -L(last_2x_vec): - /* From VEC and to 2 * VEC. No branch when size == VEC_SIZE. */ - VMOVU (%rsi), %VEC(0) - VMOVU -VEC_SIZE(%rsi,%rdx), %VEC(1) - VMOVU %VEC(0), (%rdi) - VMOVU %VEC(1), -VEC_SIZE(%rdi,%rdx) -L(return): - VZEROUPPER - ret - -L(movsb): - cmpq __x86_shared_non_temporal_threshold(%rip), %rdx - jae L(more_8x_vec) - cmpq %rsi, %rdi - jb 1f - /* Source == destination is less common. */ - je L(nop) - leaq (%rsi,%rdx), %r9 - cmpq %r9, %rdi - /* Avoid slow backward REP MOVSB. */ -# if REP_MOVSB_THRESHOLD <= (VEC_SIZE * 8) -# error Unsupported REP_MOVSB_THRESHOLD and VEC_SIZE! -# endif - jb L(more_8x_vec_backward) -1: - movq %rdx, %rcx - rep movsb -L(nop): - ret -#endif - -L(less_vec): - /* Less than 1 VEC. */ -#if VEC_SIZE != 16 && VEC_SIZE != 32 && VEC_SIZE != 64 -# error Unsupported VEC_SIZE! -#endif -#if VEC_SIZE > 32 - cmpb $32, %dl - jae L(between_32_63) -#endif -#if VEC_SIZE > 16 - cmpb $16, %dl - jae L(between_16_31) -#endif - cmpb $8, %dl - jae L(between_8_15) - cmpb $4, %dl - jae L(between_4_7) - cmpb $1, %dl - ja L(between_2_3) - jb 1f - movzbl (%rsi), %ecx - movb %cl, (%rdi) -1: - ret -#if VEC_SIZE > 32 -L(between_32_63): - /* From 32 to 63. No branch when size == 32. */ - vmovdqu (%rsi), %ymm0 - vmovdqu -32(%rsi,%rdx), %ymm1 - vmovdqu %ymm0, (%rdi) - vmovdqu %ymm1, -32(%rdi,%rdx) - VZEROUPPER - ret -#endif -#if VEC_SIZE > 16 - /* From 16 to 31. No branch when size == 16. */ -L(between_16_31): - vmovdqu (%rsi), %xmm0 - vmovdqu -16(%rsi,%rdx), %xmm1 - vmovdqu %xmm0, (%rdi) - vmovdqu %xmm1, -16(%rdi,%rdx) - ret -#endif -L(between_8_15): - /* From 8 to 15. No branch when size == 8. */ - movq -8(%rsi,%rdx), %rcx - movq (%rsi), %rsi - movq %rcx, -8(%rdi,%rdx) - movq %rsi, (%rdi) - ret -L(between_4_7): - /* From 4 to 7. No branch when size == 4. */ - movl -4(%rsi,%rdx), %ecx - movl (%rsi), %esi - movl %ecx, -4(%rdi,%rdx) - movl %esi, (%rdi) - ret -L(between_2_3): - /* From 2 to 3. No branch when size == 2. */ - movzwl -2(%rsi,%rdx), %ecx - movzwl (%rsi), %esi - movw %cx, -2(%rdi,%rdx) - movw %si, (%rdi) - ret - -#if defined USE_MULTIARCH && IS_IN (libc) -L(movsb_more_2x_vec): - cmpq $REP_MOVSB_THRESHOLD, %rdx - ja L(movsb) -#endif -L(more_2x_vec): - /* More than 2 * VEC and there may be overlap between destination - and source. */ - cmpq $(VEC_SIZE * 8), %rdx - ja L(more_8x_vec) - cmpq $(VEC_SIZE * 4), %rdx - jb L(last_4x_vec) - /* Copy from 4 * VEC to 8 * VEC, inclusively. */ - VMOVU (%rsi), %VEC(0) - VMOVU VEC_SIZE(%rsi), %VEC(1) - VMOVU (VEC_SIZE * 2)(%rsi), %VEC(2) - VMOVU (VEC_SIZE * 3)(%rsi), %VEC(3) - VMOVU -VEC_SIZE(%rsi,%rdx), %VEC(4) - VMOVU -(VEC_SIZE * 2)(%rsi,%rdx), %VEC(5) - VMOVU -(VEC_SIZE * 3)(%rsi,%rdx), %VEC(6) - VMOVU -(VEC_SIZE * 4)(%rsi,%rdx), %VEC(7) - VMOVU %VEC(0), (%rdi) - VMOVU %VEC(1), VEC_SIZE(%rdi) - VMOVU %VEC(2), (VEC_SIZE * 2)(%rdi) - VMOVU %VEC(3), (VEC_SIZE * 3)(%rdi) - VMOVU %VEC(4), -VEC_SIZE(%rdi,%rdx) - VMOVU %VEC(5), -(VEC_SIZE * 2)(%rdi,%rdx) - VMOVU %VEC(6), -(VEC_SIZE * 3)(%rdi,%rdx) - VMOVU %VEC(7), -(VEC_SIZE * 4)(%rdi,%rdx) - VZEROUPPER - ret -L(last_4x_vec): - /* Copy from 2 * VEC to 4 * VEC. */ - VMOVU (%rsi), %VEC(0) - VMOVU VEC_SIZE(%rsi), %VEC(1) - VMOVU -VEC_SIZE(%rsi,%rdx), %VEC(2) - VMOVU -(VEC_SIZE * 2)(%rsi,%rdx), %VEC(3) - VMOVU %VEC(0), (%rdi) - VMOVU %VEC(1), VEC_SIZE(%rdi) - VMOVU %VEC(2), -VEC_SIZE(%rdi,%rdx) - VMOVU %VEC(3), -(VEC_SIZE * 2)(%rdi,%rdx) - VZEROUPPER - ret - -L(more_8x_vec): - cmpq %rsi, %rdi - ja L(more_8x_vec_backward) - /* Source == destination is less common. */ - je L(nop) - /* Load the first VEC and last 4 * VEC to support overlapping - addresses. */ - VMOVU (%rsi), %VEC(4) - VMOVU -VEC_SIZE(%rsi, %rdx), %VEC(5) - VMOVU -(VEC_SIZE * 2)(%rsi, %rdx), %VEC(6) - VMOVU -(VEC_SIZE * 3)(%rsi, %rdx), %VEC(7) - VMOVU -(VEC_SIZE * 4)(%rsi, %rdx), %VEC(8) - /* Save start and stop of the destination buffer. */ - movq %rdi, %r11 - leaq -VEC_SIZE(%rdi, %rdx), %rcx - /* Align destination for aligned stores in the loop. Compute - how much destination is misaligned. */ - movq %rdi, %r8 - andq $(VEC_SIZE - 1), %r8 - /* Get the negative of offset for alignment. */ - subq $VEC_SIZE, %r8 - /* Adjust source. */ - subq %r8, %rsi - /* Adjust destination which should be aligned now. */ - subq %r8, %rdi - /* Adjust length. */ - addq %r8, %rdx -#if (defined USE_MULTIARCH || VEC_SIZE == 16) && IS_IN (libc) - /* Check non-temporal store threshold. */ - cmpq __x86_shared_non_temporal_threshold(%rip), %rdx - ja L(large_forward) -#endif -L(loop_4x_vec_forward): - /* Copy 4 * VEC a time forward. */ - VMOVU (%rsi), %VEC(0) - VMOVU VEC_SIZE(%rsi), %VEC(1) - VMOVU (VEC_SIZE * 2)(%rsi), %VEC(2) - VMOVU (VEC_SIZE * 3)(%rsi), %VEC(3) - addq $(VEC_SIZE * 4), %rsi - subq $(VEC_SIZE * 4), %rdx - VMOVA %VEC(0), (%rdi) - VMOVA %VEC(1), VEC_SIZE(%rdi) - VMOVA %VEC(2), (VEC_SIZE * 2)(%rdi) - VMOVA %VEC(3), (VEC_SIZE * 3)(%rdi) - addq $(VEC_SIZE * 4), %rdi - cmpq $(VEC_SIZE * 4), %rdx - ja L(loop_4x_vec_forward) - /* Store the last 4 * VEC. */ - VMOVU %VEC(5), (%rcx) - VMOVU %VEC(6), -VEC_SIZE(%rcx) - VMOVU %VEC(7), -(VEC_SIZE * 2)(%rcx) - VMOVU %VEC(8), -(VEC_SIZE * 3)(%rcx) - /* Store the first VEC. */ - VMOVU %VEC(4), (%r11) - VZEROUPPER - ret - -L(more_8x_vec_backward): - /* Load the first 4 * VEC and last VEC to support overlapping - addresses. */ - VMOVU (%rsi), %VEC(4) - VMOVU VEC_SIZE(%rsi), %VEC(5) - VMOVU (VEC_SIZE * 2)(%rsi), %VEC(6) - VMOVU (VEC_SIZE * 3)(%rsi), %VEC(7) - VMOVU -VEC_SIZE(%rsi,%rdx), %VEC(8) - /* Save stop of the destination buffer. */ - leaq -VEC_SIZE(%rdi, %rdx), %r11 - /* Align destination end for aligned stores in the loop. Compute - how much destination end is misaligned. */ - leaq -VEC_SIZE(%rsi, %rdx), %rcx - movq %r11, %r9 - movq %r11, %r8 - andq $(VEC_SIZE - 1), %r8 - /* Adjust source. */ - subq %r8, %rcx - /* Adjust the end of destination which should be aligned now. */ - subq %r8, %r9 - /* Adjust length. */ - subq %r8, %rdx -#if (defined USE_MULTIARCH || VEC_SIZE == 16) && IS_IN (libc) - /* Check non-temporal store threshold. */ - cmpq __x86_shared_non_temporal_threshold(%rip), %rdx - ja L(large_backward) -#endif -L(loop_4x_vec_backward): - /* Copy 4 * VEC a time backward. */ - VMOVU (%rcx), %VEC(0) - VMOVU -VEC_SIZE(%rcx), %VEC(1) - VMOVU -(VEC_SIZE * 2)(%rcx), %VEC(2) - VMOVU -(VEC_SIZE * 3)(%rcx), %VEC(3) - subq $(VEC_SIZE * 4), %rcx - subq $(VEC_SIZE * 4), %rdx - VMOVA %VEC(0), (%r9) - VMOVA %VEC(1), -VEC_SIZE(%r9) - VMOVA %VEC(2), -(VEC_SIZE * 2)(%r9) - VMOVA %VEC(3), -(VEC_SIZE * 3)(%r9) - subq $(VEC_SIZE * 4), %r9 - cmpq $(VEC_SIZE * 4), %rdx - ja L(loop_4x_vec_backward) - /* Store the first 4 * VEC. */ - VMOVU %VEC(4), (%rdi) - VMOVU %VEC(5), VEC_SIZE(%rdi) - VMOVU %VEC(6), (VEC_SIZE * 2)(%rdi) - VMOVU %VEC(7), (VEC_SIZE * 3)(%rdi) - /* Store the last VEC. */ - VMOVU %VEC(8), (%r11) - VZEROUPPER - ret - -#if (defined USE_MULTIARCH || VEC_SIZE == 16) && IS_IN (libc) -L(large_forward): - /* Don't use non-temporal store if there is overlap between - destination and source since destination may be in cache - when source is loaded. */ - leaq (%rdi, %rdx), %r10 - cmpq %r10, %rsi - jb L(loop_4x_vec_forward) -L(loop_large_forward): - /* Copy 4 * VEC a time forward with non-temporal stores. */ - PREFETCH_ONE_SET (1, (%rsi), PREFETCHED_LOAD_SIZE * 2) - PREFETCH_ONE_SET (1, (%rsi), PREFETCHED_LOAD_SIZE * 3) - VMOVU (%rsi), %VEC(0) - VMOVU VEC_SIZE(%rsi), %VEC(1) - VMOVU (VEC_SIZE * 2)(%rsi), %VEC(2) - VMOVU (VEC_SIZE * 3)(%rsi), %VEC(3) - addq $PREFETCHED_LOAD_SIZE, %rsi - subq $PREFETCHED_LOAD_SIZE, %rdx - VMOVNT %VEC(0), (%rdi) - VMOVNT %VEC(1), VEC_SIZE(%rdi) - VMOVNT %VEC(2), (VEC_SIZE * 2)(%rdi) - VMOVNT %VEC(3), (VEC_SIZE * 3)(%rdi) - addq $PREFETCHED_LOAD_SIZE, %rdi - cmpq $PREFETCHED_LOAD_SIZE, %rdx - ja L(loop_large_forward) - sfence - /* Store the last 4 * VEC. */ - VMOVU %VEC(5), (%rcx) - VMOVU %VEC(6), -VEC_SIZE(%rcx) - VMOVU %VEC(7), -(VEC_SIZE * 2)(%rcx) - VMOVU %VEC(8), -(VEC_SIZE * 3)(%rcx) - /* Store the first VEC. */ - VMOVU %VEC(4), (%r11) - VZEROUPPER - ret - -L(large_backward): - /* Don't use non-temporal store if there is overlap between - destination and source since destination may be in cache - when source is loaded. */ - leaq (%rcx, %rdx), %r10 - cmpq %r10, %r9 - jb L(loop_4x_vec_backward) -L(loop_large_backward): - /* Copy 4 * VEC a time backward with non-temporal stores. */ - PREFETCH_ONE_SET (-1, (%rcx), -PREFETCHED_LOAD_SIZE * 2) - PREFETCH_ONE_SET (-1, (%rcx), -PREFETCHED_LOAD_SIZE * 3) - VMOVU (%rcx), %VEC(0) - VMOVU -VEC_SIZE(%rcx), %VEC(1) - VMOVU -(VEC_SIZE * 2)(%rcx), %VEC(2) - VMOVU -(VEC_SIZE * 3)(%rcx), %VEC(3) - subq $PREFETCHED_LOAD_SIZE, %rcx - subq $PREFETCHED_LOAD_SIZE, %rdx - VMOVNT %VEC(0), (%r9) - VMOVNT %VEC(1), -VEC_SIZE(%r9) - VMOVNT %VEC(2), -(VEC_SIZE * 2)(%r9) - VMOVNT %VEC(3), -(VEC_SIZE * 3)(%r9) - subq $PREFETCHED_LOAD_SIZE, %r9 - cmpq $PREFETCHED_LOAD_SIZE, %rdx - ja L(loop_large_backward) - sfence - /* Store the first 4 * VEC. */ - VMOVU %VEC(4), (%rdi) - VMOVU %VEC(5), VEC_SIZE(%rdi) - VMOVU %VEC(6), (VEC_SIZE * 2)(%rdi) - VMOVU %VEC(7), (VEC_SIZE * 3)(%rdi) - /* Store the last VEC. */ - VMOVU %VEC(8), (%r11) - VZEROUPPER - ret -#endif -END (MEMMOVE_SYMBOL (__memmove, unaligned_erms)) - -#ifdef SHARED -# if IS_IN (libc) -# ifdef USE_MULTIARCH -strong_alias (MEMMOVE_SYMBOL (__memmove, unaligned_erms), - MEMMOVE_SYMBOL (__memcpy, unaligned_erms)) -strong_alias (MEMMOVE_SYMBOL (__memmove_chk, unaligned_erms), - MEMMOVE_SYMBOL (__memcpy_chk, unaligned_erms)) -# endif -strong_alias (MEMMOVE_CHK_SYMBOL (__memmove_chk, unaligned), - MEMMOVE_CHK_SYMBOL (__memcpy_chk, unaligned)) -# endif -#endif -#if VEC_SIZE == 16 || defined SHARED -strong_alias (MEMMOVE_SYMBOL (__memmove, unaligned), - MEMCPY_SYMBOL (__memcpy, unaligned)) -#endif diff --git a/sysdeps/x86_64/multiarch/memmove.S b/sysdeps/x86_64/multiarch/memmove.S deleted file mode 100644 index 8c534e83e0..0000000000 --- a/sysdeps/x86_64/multiarch/memmove.S +++ /dev/null @@ -1,101 +0,0 @@ -/* Multiple versions of memmove - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib and for - DSO. */ -#if IS_IN (libc) - .text -ENTRY(__libc_memmove) - .type __libc_memmove, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - lea __memmove_erms(%rip), %RAX_LP - HAS_ARCH_FEATURE (Prefer_ERMS) - jnz 2f - HAS_ARCH_FEATURE (Prefer_No_AVX512) - jnz 1f - HAS_ARCH_FEATURE (AVX512F_Usable) - jz 1f - lea __memmove_avx512_no_vzeroupper(%rip), %RAX_LP - HAS_ARCH_FEATURE (Prefer_No_VZEROUPPER) - jnz 2f - lea __memmove_avx512_unaligned_erms(%rip), %RAX_LP - HAS_CPU_FEATURE (ERMS) - jnz 2f - lea __memmove_avx512_unaligned(%rip), %RAX_LP - ret -1: lea __memmove_avx_unaligned(%rip), %RAX_LP - HAS_ARCH_FEATURE (AVX_Fast_Unaligned_Load) - jz L(Fast_Unaligned_Load) - HAS_CPU_FEATURE (ERMS) - jz 2f - lea __memmove_avx_unaligned_erms(%rip), %RAX_LP - ret -L(Fast_Unaligned_Load): - lea __memmove_sse2_unaligned(%rip), %RAX_LP - HAS_ARCH_FEATURE (Fast_Unaligned_Copy) - jz L(SSSE3) - HAS_CPU_FEATURE (ERMS) - jz 2f - lea __memmove_sse2_unaligned_erms(%rip), %RAX_LP - ret -L(SSSE3): - HAS_CPU_FEATURE (SSSE3) - jz 2f - lea __memmove_ssse3_back(%rip), %RAX_LP - HAS_ARCH_FEATURE (Fast_Copy_Backward) - jnz 2f - lea __memmove_ssse3(%rip), %RAX_LP -2: ret -END(__libc_memmove) -#endif - -#if IS_IN (libc) -# define MEMMOVE_SYMBOL(p,s) p##_sse2_##s - -# ifdef SHARED -libc_hidden_ver (__memmove_sse2_unaligned, memmove) -libc_hidden_ver (__memcpy_sse2_unaligned, memcpy) -libc_hidden_ver (__mempcpy_sse2_unaligned, mempcpy) -libc_hidden_ver (__mempcpy_sse2_unaligned, __mempcpy) - -# undef libc_hidden_builtin_def -/* It doesn't make sense to send libc-internal memmove calls through a PLT. - The speedup we get from using SSE2 instructions is likely eaten away - by the indirect call in the PLT. */ -# define libc_hidden_builtin_def -# endif -strong_alias (__libc_memmove, memmove) -#endif - -#if !defined SHARED || !IS_IN (libc) -weak_alias (__mempcpy, mempcpy) -#endif - -#include "../memmove.S" - -#if defined SHARED && IS_IN (libc) -# include -# if SHLIB_COMPAT (libc, GLIBC_2_2_5, GLIBC_2_14) -/* Use __memmove_sse2_unaligned to support overlapping addresses. */ -compat_symbol (libc, __memmove_sse2_unaligned, memcpy, GLIBC_2_2_5); -# endif -#endif diff --git a/sysdeps/x86_64/multiarch/memmove_chk.S b/sysdeps/x86_64/multiarch/memmove_chk.S deleted file mode 100644 index 7870dd0247..0000000000 --- a/sysdeps/x86_64/multiarch/memmove_chk.S +++ /dev/null @@ -1,71 +0,0 @@ -/* Multiple versions of __memmove_chk - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib and for - DSO. There are no multiarch memmove functions for static binaries. - */ -#if IS_IN (libc) -# ifdef SHARED - .text -ENTRY(__memmove_chk) - .type __memmove_chk, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - HAS_ARCH_FEATURE (Prefer_No_AVX512) - jnz 1f - HAS_ARCH_FEATURE (AVX512F_Usable) - jz 1f - lea __memmove_chk_avx512_no_vzeroupper(%rip), %RAX_LP - HAS_ARCH_FEATURE (Prefer_No_VZEROUPPER) - jnz 2f - lea __memmove_chk_avx512_unaligned_erms(%rip), %RAX_LP - HAS_CPU_FEATURE (ERMS) - jnz 2f - lea __memmove_chk_avx512_unaligned(%rip), %RAX_LP - ret -1: lea __memmove_chk_avx_unaligned(%rip), %RAX_LP - HAS_ARCH_FEATURE (AVX_Fast_Unaligned_Load) - jz L(Fast_Unaligned_Load) - HAS_CPU_FEATURE (ERMS) - jz 2f - lea __memmove_chk_avx_unaligned_erms(%rip), %RAX_LP - ret -L(Fast_Unaligned_Load): - lea __memmove_chk_sse2_unaligned(%rip), %RAX_LP - HAS_ARCH_FEATURE (Fast_Unaligned_Copy) - jz L(SSSE3) - HAS_CPU_FEATURE (ERMS) - jz 2f - lea __memmove_chk_sse2_unaligned_erms(%rip), %RAX_LP - ret -L(SSSE3): - HAS_CPU_FEATURE (SSSE3) - jz 2f - lea __memmove_chk_ssse3_back(%rip), %RAX_LP - HAS_ARCH_FEATURE (Fast_Copy_Backward) - jnz 2f - lea __memmove_chk_ssse3(%rip), %RAX_LP -2: ret -END(__memmove_chk) -# else -# include "../memmove_chk.S" -# endif -#endif diff --git a/sysdeps/x86_64/multiarch/mempcpy.S b/sysdeps/x86_64/multiarch/mempcpy.S deleted file mode 100644 index b8b2b28094..0000000000 --- a/sysdeps/x86_64/multiarch/mempcpy.S +++ /dev/null @@ -1,73 +0,0 @@ -/* Multiple versions of mempcpy - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib and for - DSO. In static binaries we need mempcpy before the initialization - happened. */ -#if defined SHARED && IS_IN (libc) - .text -ENTRY(__mempcpy) - .type __mempcpy, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - lea __mempcpy_erms(%rip), %RAX_LP - HAS_ARCH_FEATURE (Prefer_ERMS) - jnz 2f - HAS_ARCH_FEATURE (Prefer_No_AVX512) - jnz 1f - HAS_ARCH_FEATURE (AVX512F_Usable) - jz 1f - lea __mempcpy_avx512_no_vzeroupper(%rip), %RAX_LP - HAS_ARCH_FEATURE (Prefer_No_VZEROUPPER) - jnz 2f - lea __mempcpy_avx512_unaligned_erms(%rip), %RAX_LP - HAS_CPU_FEATURE (ERMS) - jnz 2f - lea __mempcpy_avx512_unaligned(%rip), %RAX_LP - ret -1: lea __mempcpy_avx_unaligned(%rip), %RAX_LP - HAS_ARCH_FEATURE (AVX_Fast_Unaligned_Load) - jz L(Fast_Unaligned_Load) - HAS_CPU_FEATURE (ERMS) - jz 2f - lea __mempcpy_avx_unaligned_erms(%rip), %RAX_LP - ret -L(Fast_Unaligned_Load): - lea __mempcpy_sse2_unaligned(%rip), %RAX_LP - HAS_ARCH_FEATURE (Fast_Unaligned_Copy) - jz L(SSSE3) - HAS_CPU_FEATURE (ERMS) - jz 2f - lea __mempcpy_sse2_unaligned_erms(%rip), %RAX_LP - ret -L(SSSE3): - HAS_CPU_FEATURE (SSSE3) - jz 2f - lea __mempcpy_ssse3_back(%rip), %RAX_LP - HAS_ARCH_FEATURE (Fast_Copy_Backward) - jnz 2f - lea __mempcpy_ssse3(%rip), %RAX_LP -2: ret -END(__mempcpy) - -weak_alias (__mempcpy, mempcpy) -#endif diff --git a/sysdeps/x86_64/multiarch/mempcpy_chk.S b/sysdeps/x86_64/multiarch/mempcpy_chk.S deleted file mode 100644 index 072b22c49f..0000000000 --- a/sysdeps/x86_64/multiarch/mempcpy_chk.S +++ /dev/null @@ -1,72 +0,0 @@ -/* Multiple versions of __mempcpy_chk - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib and for - DSO. There are no multiarch mempcpy functions for static binaries. - */ -#if IS_IN (libc) -# ifdef SHARED - .text -ENTRY(__mempcpy_chk) - .type __mempcpy_chk, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - HAS_ARCH_FEATURE (Prefer_No_AVX512) - jnz 1f - HAS_ARCH_FEATURE (AVX512F_Usable) - jz 1f - lea __mempcpy_chk_avx512_no_vzeroupper(%rip), %RAX_LP - HAS_ARCH_FEATURE (Prefer_No_VZEROUPPER) - jnz 2f - lea __mempcpy_chk_avx512_unaligned_erms(%rip), %RAX_LP - HAS_CPU_FEATURE (ERMS) - jnz 2f - lea __mempcpy_chk_avx512_unaligned(%rip), %RAX_LP - ret -1: lea __mempcpy_chk_avx_unaligned(%rip), %RAX_LP - HAS_ARCH_FEATURE (AVX_Fast_Unaligned_Load) - jz L(Fast_Unaligned_Load) - HAS_CPU_FEATURE (ERMS) - jz 2f - lea __mempcpy_chk_avx_unaligned_erms(%rip), %RAX_LP - ret -L(Fast_Unaligned_Load): - lea __mempcpy_chk_sse2_unaligned(%rip), %RAX_LP - HAS_ARCH_FEATURE (Fast_Unaligned_Copy) - jz L(SSSE3) - HAS_CPU_FEATURE (ERMS) - jz 2f - lea __mempcpy_chk_sse2_unaligned_erms(%rip), %RAX_LP - ret -L(SSSE3): - HAS_CPU_FEATURE (SSSE3) - jz 2f - lea __mempcpy_chk_ssse3_back(%rip), %RAX_LP - HAS_ARCH_FEATURE (Fast_Copy_Backward) - jnz 2f - lea __mempcpy_chk_ssse3(%rip), %RAX_LP -2: ret -END(__mempcpy_chk) -# else -# include "../mempcpy_chk.S" -# endif -#endif diff --git a/sysdeps/x86_64/multiarch/memset-avx2-unaligned-erms.S b/sysdeps/x86_64/multiarch/memset-avx2-unaligned-erms.S deleted file mode 100644 index 7ab3d89849..0000000000 --- a/sysdeps/x86_64/multiarch/memset-avx2-unaligned-erms.S +++ /dev/null @@ -1,22 +0,0 @@ -#if IS_IN (libc) -# define VEC_SIZE 32 -# define VEC(i) ymm##i -# define VMOVU vmovdqu -# define VMOVA vmovdqa - -# define MEMSET_VDUP_TO_VEC0_AND_SET_RETURN(d, r) \ - vmovd d, %xmm0; \ - movq r, %rax; \ - vpbroadcastb %xmm0, %ymm0 - -# define WMEMSET_VDUP_TO_VEC0_AND_SET_RETURN(d, r) \ - vmovd d, %xmm0; \ - movq r, %rax; \ - vpbroadcastd %xmm0, %ymm0 - -# define SECTION(p) p##.avx -# define MEMSET_SYMBOL(p,s) p##_avx2_##s -# define WMEMSET_SYMBOL(p,s) p##_avx2_##s - -# include "memset-vec-unaligned-erms.S" -#endif diff --git a/sysdeps/x86_64/multiarch/memset-avx512-no-vzeroupper.S b/sysdeps/x86_64/multiarch/memset-avx512-no-vzeroupper.S deleted file mode 100644 index 1f66602398..0000000000 --- a/sysdeps/x86_64/multiarch/memset-avx512-no-vzeroupper.S +++ /dev/null @@ -1,194 +0,0 @@ -/* memset optimized with AVX512 for KNL hardware. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#if IS_IN (libc) - -#include "asm-syntax.h" -#ifndef MEMSET -# define MEMSET __memset_avx512_no_vzeroupper -# define MEMSET_CHK __memset_chk_avx512_no_vzeroupper -#endif - - .section .text.avx512,"ax",@progbits -#if defined PIC -ENTRY (MEMSET_CHK) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) -END (MEMSET_CHK) -#endif - -ENTRY (MEMSET) - vpxor %xmm0, %xmm0, %xmm0 - vmovd %esi, %xmm1 - lea (%rdi, %rdx), %rsi - mov %rdi, %rax - vpshufb %xmm0, %xmm1, %xmm0 - cmp $16, %rdx - jb L(less_16bytes) - cmp $512, %rdx - vbroadcastss %xmm0, %zmm2 - ja L(512bytesormore) - cmp $256, %rdx - jb L(less_256bytes) - vmovups %zmm2, (%rdi) - vmovups %zmm2, 0x40(%rdi) - vmovups %zmm2, 0x80(%rdi) - vmovups %zmm2, 0xC0(%rdi) - vmovups %zmm2, -0x100(%rsi) - vmovups %zmm2, -0xC0(%rsi) - vmovups %zmm2, -0x80(%rsi) - vmovups %zmm2, -0x40(%rsi) - ret - -L(less_256bytes): - cmp $128, %dl - jb L(less_128bytes) - vmovups %zmm2, (%rdi) - vmovups %zmm2, 0x40(%rdi) - vmovups %zmm2, -0x80(%rsi) - vmovups %zmm2, -0x40(%rsi) - ret - -L(less_128bytes): - cmp $64, %dl - jb L(less_64bytes) - vmovups %zmm2, (%rdi) - vmovups %zmm2, -0x40(%rsi) - ret - -L(less_64bytes): - cmp $32, %dl - jb L(less_32bytes) - vmovdqu %ymm2, (%rdi) - vmovdqu %ymm2, -0x20(%rsi) - ret - -L(less_32bytes): - vmovdqu %xmm0, (%rdi) - vmovdqu %xmm0, -0x10(%rsi) - ret - -L(less_16bytes): - cmp $8, %dl - jb L(less_8bytes) - vmovq %xmm0, (%rdi) - vmovq %xmm0, -0x08(%rsi) - ret - -L(less_8bytes): - vmovd %xmm0, %ecx - cmp $4, %dl - jb L(less_4bytes) - mov %ecx, (%rdi) - mov %ecx, -0x04(%rsi) - ret - -L(less_4bytes): - cmp $2, %dl - jb L(less_2bytes) - mov %cx, (%rdi) - mov %cx, -0x02(%rsi) - ret - -L(less_2bytes): - cmp $1, %dl - jb L(less_1bytes) - mov %cl, (%rdi) -L(less_1bytes): - ret - -L(512bytesormore): - mov __x86_shared_cache_size_half(%rip), %rcx - cmp %rcx, %rdx - ja L(preloop_large) - cmp $1024, %rdx - ja L(1024bytesormore) - - vmovups %zmm2, (%rdi) - vmovups %zmm2, 0x40(%rdi) - vmovups %zmm2, 0x80(%rdi) - vmovups %zmm2, 0xC0(%rdi) - vmovups %zmm2, 0x100(%rdi) - vmovups %zmm2, 0x140(%rdi) - vmovups %zmm2, 0x180(%rdi) - vmovups %zmm2, 0x1C0(%rdi) - vmovups %zmm2, -0x200(%rsi) - vmovups %zmm2, -0x1C0(%rsi) - vmovups %zmm2, -0x180(%rsi) - vmovups %zmm2, -0x140(%rsi) - vmovups %zmm2, -0x100(%rsi) - vmovups %zmm2, -0xC0(%rsi) - vmovups %zmm2, -0x80(%rsi) - vmovups %zmm2, -0x40(%rsi) - ret - -/* Align on 64 and loop with aligned stores. */ -L(1024bytesormore): - sub $0x100, %rsi - vmovups %zmm2, (%rax) - and $-0x40, %rdi - add $0x40, %rdi - -L(gobble_256bytes_loop): - vmovaps %zmm2, (%rdi) - vmovaps %zmm2, 0x40(%rdi) - vmovaps %zmm2, 0x80(%rdi) - vmovaps %zmm2, 0xC0(%rdi) - add $0x100, %rdi - cmp %rsi, %rdi - jb L(gobble_256bytes_loop) - vmovups %zmm2, (%rsi) - vmovups %zmm2, 0x40(%rsi) - vmovups %zmm2, 0x80(%rsi) - vmovups %zmm2, 0xC0(%rsi) - ret - -/* Align on 128 and loop with non-temporal stores. */ -L(preloop_large): - and $-0x80, %rdi - add $0x80, %rdi - vmovups %zmm2, (%rax) - vmovups %zmm2, 0x40(%rax) - sub $0x200, %rsi - -L(gobble_512bytes_nt_loop): - vmovntdq %zmm2, (%rdi) - vmovntdq %zmm2, 0x40(%rdi) - vmovntdq %zmm2, 0x80(%rdi) - vmovntdq %zmm2, 0xC0(%rdi) - vmovntdq %zmm2, 0x100(%rdi) - vmovntdq %zmm2, 0x140(%rdi) - vmovntdq %zmm2, 0x180(%rdi) - vmovntdq %zmm2, 0x1C0(%rdi) - add $0x200, %rdi - cmp %rsi, %rdi - jb L(gobble_512bytes_nt_loop) - sfence - vmovups %zmm2, (%rsi) - vmovups %zmm2, 0x40(%rsi) - vmovups %zmm2, 0x80(%rsi) - vmovups %zmm2, 0xC0(%rsi) - vmovups %zmm2, 0x100(%rsi) - vmovups %zmm2, 0x140(%rsi) - vmovups %zmm2, 0x180(%rsi) - vmovups %zmm2, 0x1C0(%rsi) - ret -END (MEMSET) -#endif diff --git a/sysdeps/x86_64/multiarch/memset-avx512-unaligned-erms.S b/sysdeps/x86_64/multiarch/memset-avx512-unaligned-erms.S deleted file mode 100644 index 0783979ca5..0000000000 --- a/sysdeps/x86_64/multiarch/memset-avx512-unaligned-erms.S +++ /dev/null @@ -1,24 +0,0 @@ -#if IS_IN (libc) -# define VEC_SIZE 64 -# define VEC(i) zmm##i -# define VMOVU vmovdqu64 -# define VMOVA vmovdqa64 - -# define MEMSET_VDUP_TO_VEC0_AND_SET_RETURN(d, r) \ - vmovd d, %xmm0; \ - movq r, %rax; \ - vpbroadcastb %xmm0, %xmm0; \ - vpbroadcastq %xmm0, %zmm0 - -# define WMEMSET_VDUP_TO_VEC0_AND_SET_RETURN(d, r) \ - vmovd d, %xmm0; \ - movq r, %rax; \ - vpbroadcastd %xmm0, %xmm0; \ - vpbroadcastq %xmm0, %zmm0 - -# define SECTION(p) p##.avx512 -# define MEMSET_SYMBOL(p,s) p##_avx512_##s -# define WMEMSET_SYMBOL(p,s) p##_avx512_##s - -# include "memset-vec-unaligned-erms.S" -#endif diff --git a/sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S b/sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S deleted file mode 100644 index 2eb9e3744e..0000000000 --- a/sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S +++ /dev/null @@ -1,263 +0,0 @@ -/* memset/bzero with unaligned store and rep stosb - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* memset is implemented as: - 1. Use overlapping store to avoid branch. - 2. If size is less than VEC, use integer register stores. - 3. If size is from VEC_SIZE to 2 * VEC_SIZE, use 2 VEC stores. - 4. If size is from 2 * VEC_SIZE to 4 * VEC_SIZE, use 4 VEC stores. - 5. If size is more to 4 * VEC_SIZE, align to 4 * VEC_SIZE with - 4 VEC stores and store 4 * VEC at a time until done. */ - -#include - -#ifndef MEMSET_CHK_SYMBOL -# define MEMSET_CHK_SYMBOL(p,s) MEMSET_SYMBOL(p, s) -#endif - -#ifndef WMEMSET_CHK_SYMBOL -# define WMEMSET_CHK_SYMBOL(p,s) WMEMSET_SYMBOL(p, s) -#endif - -#ifndef VZEROUPPER -# if VEC_SIZE > 16 -# define VZEROUPPER vzeroupper -# else -# define VZEROUPPER -# endif -#endif - -#ifndef VZEROUPPER_SHORT_RETURN -# if VEC_SIZE > 16 -# define VZEROUPPER_SHORT_RETURN vzeroupper -# else -# define VZEROUPPER_SHORT_RETURN rep -# endif -#endif - -#ifndef MOVQ -# if VEC_SIZE > 16 -# define MOVQ vmovq -# else -# define MOVQ movq -# endif -#endif - -/* Threshold to use Enhanced REP STOSB. Since there is overhead to set - up REP STOSB operation, REP STOSB isn't faster on short data. The - memset micro benchmark in glibc shows that 2KB is the approximate - value above which REP STOSB becomes faster on processors with - Enhanced REP STOSB. Since the stored value is fixed, larger register - size has minimal impact on threshold. */ -#ifndef REP_STOSB_THRESHOLD -# define REP_STOSB_THRESHOLD 2048 -#endif - -#ifndef SECTION -# error SECTION is not defined! -#endif - - .section SECTION(.text),"ax",@progbits -#if VEC_SIZE == 16 && IS_IN (libc) -ENTRY (__bzero) - movq %rdi, %rax /* Set return value. */ - movq %rsi, %rdx /* Set n. */ - pxor %xmm0, %xmm0 - jmp L(entry_from_bzero) -END (__bzero) -weak_alias (__bzero, bzero) -#endif - -#if IS_IN (libc) -# if defined SHARED -ENTRY_CHK (WMEMSET_CHK_SYMBOL (__wmemset_chk, unaligned)) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) -END_CHK (WMEMSET_CHK_SYMBOL (__wmemset_chk, unaligned)) -# endif - -ENTRY (WMEMSET_SYMBOL (__wmemset, unaligned)) - shlq $2, %rdx - WMEMSET_VDUP_TO_VEC0_AND_SET_RETURN (%esi, %rdi) - jmp L(entry_from_bzero) -END (WMEMSET_SYMBOL (__wmemset, unaligned)) -#endif - -#if defined SHARED && IS_IN (libc) -ENTRY_CHK (MEMSET_CHK_SYMBOL (__memset_chk, unaligned)) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) -END_CHK (MEMSET_CHK_SYMBOL (__memset_chk, unaligned)) -#endif - -ENTRY (MEMSET_SYMBOL (__memset, unaligned)) - MEMSET_VDUP_TO_VEC0_AND_SET_RETURN (%esi, %rdi) -L(entry_from_bzero): - cmpq $VEC_SIZE, %rdx - jb L(less_vec) - cmpq $(VEC_SIZE * 2), %rdx - ja L(more_2x_vec) - /* From VEC and to 2 * VEC. No branch when size == VEC_SIZE. */ - VMOVU %VEC(0), -VEC_SIZE(%rdi,%rdx) - VMOVU %VEC(0), (%rdi) - VZEROUPPER - ret -#if defined USE_MULTIARCH && IS_IN (libc) -END (MEMSET_SYMBOL (__memset, unaligned)) - -# if VEC_SIZE == 16 -/* Only used to measure performance of REP STOSB. */ -ENTRY (__memset_erms) -# else -/* Provide a symbol to debugger. */ -ENTRY (MEMSET_SYMBOL (__memset, erms)) -# endif -L(stosb): - /* Issue vzeroupper before rep stosb. */ - VZEROUPPER - movq %rdx, %rcx - movzbl %sil, %eax - movq %rdi, %rdx - rep stosb - movq %rdx, %rax - ret -# if VEC_SIZE == 16 -END (__memset_erms) -# else -END (MEMSET_SYMBOL (__memset, erms)) -# endif - -# if defined SHARED && IS_IN (libc) -ENTRY_CHK (MEMSET_CHK_SYMBOL (__memset_chk, unaligned_erms)) - cmpq %rdx, %rcx - jb HIDDEN_JUMPTARGET (__chk_fail) -END_CHK (MEMSET_CHK_SYMBOL (__memset_chk, unaligned_erms)) -# endif - -ENTRY (MEMSET_SYMBOL (__memset, unaligned_erms)) - MEMSET_VDUP_TO_VEC0_AND_SET_RETURN (%esi, %rdi) - cmpq $VEC_SIZE, %rdx - jb L(less_vec) - cmpq $(VEC_SIZE * 2), %rdx - ja L(stosb_more_2x_vec) - /* From VEC and to 2 * VEC. No branch when size == VEC_SIZE. */ - VMOVU %VEC(0), -VEC_SIZE(%rdi,%rdx) - VMOVU %VEC(0), (%rdi) - VZEROUPPER - ret - -L(stosb_more_2x_vec): - cmpq $REP_STOSB_THRESHOLD, %rdx - ja L(stosb) -#endif -L(more_2x_vec): - cmpq $(VEC_SIZE * 4), %rdx - ja L(loop_start) - VMOVU %VEC(0), (%rdi) - VMOVU %VEC(0), VEC_SIZE(%rdi) - VMOVU %VEC(0), -VEC_SIZE(%rdi,%rdx) - VMOVU %VEC(0), -(VEC_SIZE * 2)(%rdi,%rdx) -L(return): - VZEROUPPER - ret - -L(loop_start): - leaq (VEC_SIZE * 4)(%rdi), %rcx - VMOVU %VEC(0), (%rdi) - andq $-(VEC_SIZE * 4), %rcx - VMOVU %VEC(0), -VEC_SIZE(%rdi,%rdx) - VMOVU %VEC(0), VEC_SIZE(%rdi) - VMOVU %VEC(0), -(VEC_SIZE * 2)(%rdi,%rdx) - VMOVU %VEC(0), (VEC_SIZE * 2)(%rdi) - VMOVU %VEC(0), -(VEC_SIZE * 3)(%rdi,%rdx) - VMOVU %VEC(0), (VEC_SIZE * 3)(%rdi) - VMOVU %VEC(0), -(VEC_SIZE * 4)(%rdi,%rdx) - addq %rdi, %rdx - andq $-(VEC_SIZE * 4), %rdx - cmpq %rdx, %rcx - je L(return) -L(loop): - VMOVA %VEC(0), (%rcx) - VMOVA %VEC(0), VEC_SIZE(%rcx) - VMOVA %VEC(0), (VEC_SIZE * 2)(%rcx) - VMOVA %VEC(0), (VEC_SIZE * 3)(%rcx) - addq $(VEC_SIZE * 4), %rcx - cmpq %rcx, %rdx - jne L(loop) - VZEROUPPER_SHORT_RETURN - ret -L(less_vec): - /* Less than 1 VEC. */ -# if VEC_SIZE != 16 && VEC_SIZE != 32 && VEC_SIZE != 64 -# error Unsupported VEC_SIZE! -# endif -# if VEC_SIZE > 32 - cmpb $32, %dl - jae L(between_32_63) -# endif -# if VEC_SIZE > 16 - cmpb $16, %dl - jae L(between_16_31) -# endif - MOVQ %xmm0, %rcx - cmpb $8, %dl - jae L(between_8_15) - cmpb $4, %dl - jae L(between_4_7) - cmpb $1, %dl - ja L(between_2_3) - jb 1f - movb %cl, (%rdi) -1: - VZEROUPPER - ret -# if VEC_SIZE > 32 - /* From 32 to 63. No branch when size == 32. */ -L(between_32_63): - vmovdqu %ymm0, -32(%rdi,%rdx) - vmovdqu %ymm0, (%rdi) - VZEROUPPER - ret -# endif -# if VEC_SIZE > 16 - /* From 16 to 31. No branch when size == 16. */ -L(between_16_31): - vmovdqu %xmm0, -16(%rdi,%rdx) - vmovdqu %xmm0, (%rdi) - VZEROUPPER - ret -# endif - /* From 8 to 15. No branch when size == 8. */ -L(between_8_15): - movq %rcx, -8(%rdi,%rdx) - movq %rcx, (%rdi) - VZEROUPPER - ret -L(between_4_7): - /* From 4 to 7. No branch when size == 4. */ - movl %ecx, -4(%rdi,%rdx) - movl %ecx, (%rdi) - VZEROUPPER - ret -L(between_2_3): - /* From 2 to 3. No branch when size == 2. */ - movw %cx, -2(%rdi,%rdx) - movw %cx, (%rdi) - VZEROUPPER - ret -END (MEMSET_SYMBOL (__memset, unaligned_erms)) diff --git a/sysdeps/x86_64/multiarch/memset.S b/sysdeps/x86_64/multiarch/memset.S deleted file mode 100644 index 11f27378b0..0000000000 --- a/sysdeps/x86_64/multiarch/memset.S +++ /dev/null @@ -1,82 +0,0 @@ -/* Multiple versions of memset - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Define multiple versions only for the definition in lib. */ -#if IS_IN (libc) -ENTRY(memset) - .type memset, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - lea __memset_erms(%rip), %RAX_LP - HAS_ARCH_FEATURE (Prefer_ERMS) - jnz 2f - lea __memset_sse2_unaligned_erms(%rip), %RAX_LP - HAS_CPU_FEATURE (ERMS) - jnz 1f - lea __memset_sse2_unaligned(%rip), %RAX_LP -1: - HAS_ARCH_FEATURE (AVX2_Usable) - jz 2f - lea __memset_avx2_unaligned_erms(%rip), %RAX_LP - HAS_CPU_FEATURE (ERMS) - jnz L(AVX512F) - lea __memset_avx2_unaligned(%rip), %RAX_LP -L(AVX512F): - HAS_ARCH_FEATURE (Prefer_No_AVX512) - jnz 2f - HAS_ARCH_FEATURE (AVX512F_Usable) - jz 2f - lea __memset_avx512_no_vzeroupper(%rip), %RAX_LP - HAS_ARCH_FEATURE (Prefer_No_VZEROUPPER) - jnz 2f - lea __memset_avx512_unaligned_erms(%rip), %RAX_LP - HAS_CPU_FEATURE (ERMS) - jnz 2f - lea __memset_avx512_unaligned(%rip), %RAX_LP -2: ret -END(memset) -#endif - -#if IS_IN (libc) -# define MEMSET_SYMBOL(p,s) p##_sse2_##s -# define WMEMSET_SYMBOL(p,s) p##_sse2_##s - -# ifdef SHARED -# undef libc_hidden_builtin_def -/* It doesn't make sense to send libc-internal memset calls through a PLT. - The speedup we get from using SSE2 instructions is likely eaten away - by the indirect call in the PLT. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_memset; __GI_memset = __memset_sse2_unaligned; \ - .globl __GI_wmemset; __GI_wmemset = __wmemset_sse2_unaligned; \ - .globl __GI___wmemset; __GI___wmemset = __wmemset_sse2_unaligned -# endif - -# undef weak_alias -# define weak_alias(original, alias) \ - .weak bzero; bzero = __bzero - -# undef strong_alias -# define strong_alias(original, alias) -#endif - -#include "../memset.S" diff --git a/sysdeps/x86_64/multiarch/memset_chk.S b/sysdeps/x86_64/multiarch/memset_chk.S deleted file mode 100644 index 7e08311cdf..0000000000 --- a/sysdeps/x86_64/multiarch/memset_chk.S +++ /dev/null @@ -1,61 +0,0 @@ -/* Multiple versions of memset_chk - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2014-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in lib. */ -#if IS_IN (libc) -# ifdef SHARED -ENTRY(__memset_chk) - .type __memset_chk, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - lea __memset_chk_sse2_unaligned_erms(%rip), %RAX_LP - HAS_CPU_FEATURE (ERMS) - jnz 1f - lea __memset_chk_sse2_unaligned(%rip), %RAX_LP -1: - HAS_ARCH_FEATURE (AVX2_Usable) - jz 2f - lea __memset_chk_avx2_unaligned_erms(%rip), %RAX_LP - HAS_CPU_FEATURE (ERMS) - jnz L(AVX512F) - lea __memset_chk_avx2_unaligned(%rip), %RAX_LP -L(AVX512F): - HAS_ARCH_FEATURE (Prefer_No_AVX512) - jnz 2f - HAS_ARCH_FEATURE (AVX512F_Usable) - jz 2f - lea __memset_chk_avx512_no_vzeroupper(%rip), %RAX_LP - HAS_ARCH_FEATURE (Prefer_No_VZEROUPPER) - jnz 2f - lea __memset_chk_avx512_unaligned_erms(%rip), %RAX_LP - HAS_CPU_FEATURE (ERMS) - jnz 2f - lea __memset_chk_avx512_unaligned(%rip), %RAX_LP -2: ret -END(__memset_chk) - -strong_alias (__memset_chk, __memset_zero_constant_len_parameter) - .section .gnu.warning.__memset_zero_constant_len_parameter - .string "memset used with constant zero length parameter; this could be due to transposed parameters" -# else -# include "../memset_chk.S" -# endif -#endif diff --git a/sysdeps/x86_64/multiarch/sched_cpucount.c b/sysdeps/x86_64/multiarch/sched_cpucount.c deleted file mode 100644 index 453f183747..0000000000 --- a/sysdeps/x86_64/multiarch/sched_cpucount.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Count bits in CPU set. x86-64 multi-arch version. - This file is part of the GNU C Library. - Copyright (C) 2008-2017 Free Software Foundation, Inc. - Contributed by Ulrich Drepper . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "init-arch.h" - -#define __sched_cpucount static generic_cpucount -#include -#undef __sched_cpucount - -#define POPCNT(l) \ - ({ __cpu_mask r; \ - asm ("popcnt %1, %0" : "=r" (r) : "0" (l));\ - r; }) -#define __sched_cpucount static popcount_cpucount -#include -#undef __sched_cpucount - -libc_ifunc (__sched_cpucount, - HAS_CPU_FEATURE (POPCOUNT) ? popcount_cpucount : generic_cpucount); diff --git a/sysdeps/x86_64/multiarch/stpcpy-sse2-unaligned.S b/sysdeps/x86_64/multiarch/stpcpy-sse2-unaligned.S deleted file mode 100644 index 34231f8b46..0000000000 --- a/sysdeps/x86_64/multiarch/stpcpy-sse2-unaligned.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_STPCPY -#define STRCPY __stpcpy_sse2_unaligned -#include "strcpy-sse2-unaligned.S" diff --git a/sysdeps/x86_64/multiarch/stpcpy-ssse3.S b/sysdeps/x86_64/multiarch/stpcpy-ssse3.S deleted file mode 100644 index d971c2da38..0000000000 --- a/sysdeps/x86_64/multiarch/stpcpy-ssse3.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_STPCPY -#define STRCPY __stpcpy_ssse3 -#include "strcpy-ssse3.S" diff --git a/sysdeps/x86_64/multiarch/stpcpy.S b/sysdeps/x86_64/multiarch/stpcpy.S deleted file mode 100644 index ee81ab6ae3..0000000000 --- a/sysdeps/x86_64/multiarch/stpcpy.S +++ /dev/null @@ -1,9 +0,0 @@ -/* Multiple versions of stpcpy - All versions must be listed in ifunc-impl-list.c. */ -#define USE_AS_STPCPY -#define STRCPY __stpcpy -#include "strcpy.S" - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/x86_64/multiarch/stpncpy-c.c b/sysdeps/x86_64/multiarch/stpncpy-c.c deleted file mode 100644 index 2fde77dcab..0000000000 --- a/sysdeps/x86_64/multiarch/stpncpy-c.c +++ /dev/null @@ -1,8 +0,0 @@ -#define STPNCPY __stpncpy_sse2 -#ifdef SHARED -#undef libc_hidden_def -#define libc_hidden_def(name) \ - __hidden_ver1 (__stpncpy_sse2, __GI___stpncpy, __stpncpy_sse2); -#endif - -#include "stpncpy.c" diff --git a/sysdeps/x86_64/multiarch/stpncpy-sse2-unaligned.S b/sysdeps/x86_64/multiarch/stpncpy-sse2-unaligned.S deleted file mode 100644 index 658520f78f..0000000000 --- a/sysdeps/x86_64/multiarch/stpncpy-sse2-unaligned.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_STPCPY -#define USE_AS_STRNCPY -#define STRCPY __stpncpy_sse2_unaligned -#include "strcpy-sse2-unaligned.S" diff --git a/sysdeps/x86_64/multiarch/stpncpy-ssse3.S b/sysdeps/x86_64/multiarch/stpncpy-ssse3.S deleted file mode 100644 index 14ed16f6b5..0000000000 --- a/sysdeps/x86_64/multiarch/stpncpy-ssse3.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_STPCPY -#define USE_AS_STRNCPY -#define STRCPY __stpncpy_ssse3 -#include "strcpy-ssse3.S" diff --git a/sysdeps/x86_64/multiarch/stpncpy.S b/sysdeps/x86_64/multiarch/stpncpy.S deleted file mode 100644 index 2698ca6a8c..0000000000 --- a/sysdeps/x86_64/multiarch/stpncpy.S +++ /dev/null @@ -1,8 +0,0 @@ -/* Multiple versions of stpncpy - All versions must be listed in ifunc-impl-list.c. */ -#define STRCPY __stpncpy -#define USE_AS_STPCPY -#define USE_AS_STRNCPY -#include "strcpy.S" - -weak_alias (__stpncpy, stpncpy) diff --git a/sysdeps/x86_64/multiarch/strcasecmp_l-ssse3.S b/sysdeps/x86_64/multiarch/strcasecmp_l-ssse3.S deleted file mode 100644 index fb2f9ae14a..0000000000 --- a/sysdeps/x86_64/multiarch/strcasecmp_l-ssse3.S +++ /dev/null @@ -1,6 +0,0 @@ -#define USE_SSSE3 1 -#define USE_AS_STRCASECMP_L -#define NO_NOLOCALE_ALIAS -#define STRCMP __strcasecmp_l_ssse3 -#define __strcasecmp __strcasecmp_ssse3 -#include "../strcmp.S" diff --git a/sysdeps/x86_64/multiarch/strcasecmp_l.S b/sysdeps/x86_64/multiarch/strcasecmp_l.S deleted file mode 100644 index 49f5b9fd95..0000000000 --- a/sysdeps/x86_64/multiarch/strcasecmp_l.S +++ /dev/null @@ -1,8 +0,0 @@ -/* Multiple versions of strcasecmp and strcasecmp_l - All versions must be listed in ifunc-impl-list.c. */ -#define STRCMP __strcasecmp_l -#define USE_AS_STRCASECMP_L -#include "strcmp.S" - -weak_alias (__strcasecmp_l, strcasecmp_l) -libc_hidden_def (strcasecmp_l) diff --git a/sysdeps/x86_64/multiarch/strcat-sse2-unaligned.S b/sysdeps/x86_64/multiarch/strcat-sse2-unaligned.S deleted file mode 100644 index d0a8a1518a..0000000000 --- a/sysdeps/x86_64/multiarch/strcat-sse2-unaligned.S +++ /dev/null @@ -1,279 +0,0 @@ -/* strcat with SSE2 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include - -# ifndef STRCAT -# define STRCAT __strcat_sse2_unaligned -# endif - -# define USE_AS_STRCAT - -.text -ENTRY (STRCAT) - mov %rdi, %r9 -# ifdef USE_AS_STRNCAT - mov %rdx, %r8 -# endif - -/* Inline corresponding strlen file, temporary until new strcpy - implementation gets merged. */ - - xor %rax, %rax - mov %edi, %ecx - and $0x3f, %ecx - pxor %xmm0, %xmm0 - cmp $0x30, %ecx - ja L(next) - movdqu (%rdi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - jnz L(exit_less16) - mov %rdi, %rax - and $-16, %rax - jmp L(align16_start) -L(next): - mov %rdi, %rax - and $-16, %rax - pcmpeqb (%rax), %xmm0 - mov $-1, %r10d - sub %rax, %rcx - shl %cl, %r10d - pmovmskb %xmm0, %edx - and %r10d, %edx - jnz L(exit) - -L(align16_start): - pxor %xmm0, %xmm0 - pxor %xmm1, %xmm1 - pxor %xmm2, %xmm2 - pxor %xmm3, %xmm3 - pcmpeqb 16(%rax), %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - jnz L(exit16) - - pcmpeqb 32(%rax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - jnz L(exit32) - - pcmpeqb 48(%rax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - jnz L(exit48) - - pcmpeqb 64(%rax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - jnz L(exit64) - - pcmpeqb 80(%rax), %xmm0 - add $64, %rax - pmovmskb %xmm0, %edx - test %edx, %edx - jnz L(exit16) - - pcmpeqb 32(%rax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - jnz L(exit32) - - pcmpeqb 48(%rax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - jnz L(exit48) - - pcmpeqb 64(%rax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - jnz L(exit64) - - pcmpeqb 80(%rax), %xmm0 - add $64, %rax - pmovmskb %xmm0, %edx - test %edx, %edx - jnz L(exit16) - - pcmpeqb 32(%rax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - jnz L(exit32) - - pcmpeqb 48(%rax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - jnz L(exit48) - - pcmpeqb 64(%rax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - jnz L(exit64) - - pcmpeqb 80(%rax), %xmm0 - add $64, %rax - pmovmskb %xmm0, %edx - test %edx, %edx - jnz L(exit16) - - pcmpeqb 32(%rax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - jnz L(exit32) - - pcmpeqb 48(%rax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - jnz L(exit48) - - pcmpeqb 64(%rax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - jnz L(exit64) - - test $0x3f, %rax - jz L(align64_loop) - - pcmpeqb 80(%rax), %xmm0 - add $80, %rax - pmovmskb %xmm0, %edx - test %edx, %edx - jnz L(exit) - - test $0x3f, %rax - jz L(align64_loop) - - pcmpeqb 16(%rax), %xmm1 - add $16, %rax - pmovmskb %xmm1, %edx - test %edx, %edx - jnz L(exit) - - test $0x3f, %rax - jz L(align64_loop) - - pcmpeqb 16(%rax), %xmm2 - add $16, %rax - pmovmskb %xmm2, %edx - test %edx, %edx - jnz L(exit) - - test $0x3f, %rax - jz L(align64_loop) - - pcmpeqb 16(%rax), %xmm3 - add $16, %rax - pmovmskb %xmm3, %edx - test %edx, %edx - jnz L(exit) - - add $16, %rax - .p2align 4 - L(align64_loop): - movaps (%rax), %xmm4 - pminub 16(%rax), %xmm4 - movaps 32(%rax), %xmm5 - pminub 48(%rax), %xmm5 - add $64, %rax - pminub %xmm4, %xmm5 - pcmpeqb %xmm0, %xmm5 - pmovmskb %xmm5, %edx - test %edx, %edx - jz L(align64_loop) - - pcmpeqb -64(%rax), %xmm0 - sub $80, %rax - pmovmskb %xmm0, %edx - test %edx, %edx - jnz L(exit16) - - pcmpeqb 32(%rax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - jnz L(exit32) - - pcmpeqb 48(%rax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - jnz L(exit48) - - pcmpeqb 64(%rax), %xmm3 - pmovmskb %xmm3, %edx - sub %rdi, %rax - bsf %rdx, %rdx - add %rdx, %rax - add $64, %rax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit): - sub %rdi, %rax -L(exit_less16): - bsf %rdx, %rdx - add %rdx, %rax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit16): - sub %rdi, %rax - bsf %rdx, %rdx - add %rdx, %rax - add $16, %rax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit32): - sub %rdi, %rax - bsf %rdx, %rdx - add %rdx, %rax - add $32, %rax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit48): - sub %rdi, %rax - bsf %rdx, %rdx - add %rdx, %rax - add $48, %rax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit64): - sub %rdi, %rax - bsf %rdx, %rdx - add %rdx, %rax - add $64, %rax - - .p2align 4 -L(StartStrcpyPart): - lea (%r9, %rax), %rdi - mov %rsi, %rcx - mov %r9, %rax /* save result */ - -# ifdef USE_AS_STRNCAT - test %r8, %r8 - jz L(ExitZero) -# define USE_AS_STRNCPY -# endif - -# include "strcpy-sse2-unaligned.S" -#endif diff --git a/sysdeps/x86_64/multiarch/strcat-ssse3.S b/sysdeps/x86_64/multiarch/strcat-ssse3.S deleted file mode 100644 index edd683d778..0000000000 --- a/sysdeps/x86_64/multiarch/strcat-ssse3.S +++ /dev/null @@ -1,867 +0,0 @@ -/* strcat with SSSE3 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include - -# ifndef STRCAT -# define STRCAT __strcat_ssse3 -# endif - -# define USE_AS_STRCAT - -.text -ENTRY (STRCAT) -# ifdef USE_AS_STRNCAT - mov %rdx, %r8 -# endif - - -/* Inline corresponding strlen file, temporary until new strcpy - implementation gets merged. */ - - xor %eax, %eax - cmpb $0, (%rdi) - jz L(exit_tail0) - cmpb $0, 1(%rdi) - jz L(exit_tail1) - cmpb $0, 2(%rdi) - jz L(exit_tail2) - cmpb $0, 3(%rdi) - jz L(exit_tail3) - - cmpb $0, 4(%rdi) - jz L(exit_tail4) - cmpb $0, 5(%rdi) - jz L(exit_tail5) - cmpb $0, 6(%rdi) - jz L(exit_tail6) - cmpb $0, 7(%rdi) - jz L(exit_tail7) - - cmpb $0, 8(%rdi) - jz L(exit_tail8) - cmpb $0, 9(%rdi) - jz L(exit_tail9) - cmpb $0, 10(%rdi) - jz L(exit_tail10) - cmpb $0, 11(%rdi) - jz L(exit_tail11) - - cmpb $0, 12(%rdi) - jz L(exit_tail12) - cmpb $0, 13(%rdi) - jz L(exit_tail13) - cmpb $0, 14(%rdi) - jz L(exit_tail14) - cmpb $0, 15(%rdi) - jz L(exit_tail15) - pxor %xmm0, %xmm0 - lea 16(%rdi), %rcx - lea 16(%rdi), %rax - and $-16, %rax - - pcmpeqb (%rax), %xmm0 - pmovmskb %xmm0, %edx - pxor %xmm1, %xmm1 - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm1 - pmovmskb %xmm1, %edx - pxor %xmm2, %xmm2 - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm2 - pmovmskb %xmm2, %edx - pxor %xmm3, %xmm3 - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqb (%rax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - and $-0x40, %rax - - .p2align 4 -L(aligned_64): - pcmpeqb (%rax), %xmm0 - pcmpeqb 16(%rax), %xmm1 - pcmpeqb 32(%rax), %xmm2 - pcmpeqb 48(%rax), %xmm3 - pmovmskb %xmm0, %edx - pmovmskb %xmm1, %r11d - pmovmskb %xmm2, %r10d - pmovmskb %xmm3, %r9d - or %edx, %r9d - or %r11d, %r9d - or %r10d, %r9d - lea 64(%rax), %rax - jz L(aligned_64) - - test %edx, %edx - jnz L(aligned_64_exit_16) - test %r11d, %r11d - jnz L(aligned_64_exit_32) - test %r10d, %r10d - jnz L(aligned_64_exit_48) - -L(aligned_64_exit_64): - pmovmskb %xmm3, %edx - jmp L(exit) - -L(aligned_64_exit_48): - lea -16(%rax), %rax - mov %r10d, %edx - jmp L(exit) - -L(aligned_64_exit_32): - lea -32(%rax), %rax - mov %r11d, %edx - jmp L(exit) - -L(aligned_64_exit_16): - lea -48(%rax), %rax - -L(exit): - sub %rcx, %rax - test %dl, %dl - jz L(exit_high) - test $0x01, %dl - jnz L(exit_tail0) - - test $0x02, %dl - jnz L(exit_tail1) - - test $0x04, %dl - jnz L(exit_tail2) - - test $0x08, %dl - jnz L(exit_tail3) - - test $0x10, %dl - jnz L(exit_tail4) - - test $0x20, %dl - jnz L(exit_tail5) - - test $0x40, %dl - jnz L(exit_tail6) - add $7, %eax -L(exit_tail0): - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_high): - add $8, %eax - test $0x01, %dh - jnz L(exit_tail0) - - test $0x02, %dh - jnz L(exit_tail1) - - test $0x04, %dh - jnz L(exit_tail2) - - test $0x08, %dh - jnz L(exit_tail3) - - test $0x10, %dh - jnz L(exit_tail4) - - test $0x20, %dh - jnz L(exit_tail5) - - test $0x40, %dh - jnz L(exit_tail6) - add $7, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail1): - add $1, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail2): - add $2, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail3): - add $3, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail4): - add $4, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail5): - add $5, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail6): - add $6, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail7): - add $7, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail8): - add $8, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail9): - add $9, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail10): - add $10, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail11): - add $11, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail12): - add $12, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail13): - add $13, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail14): - add $14, %eax - jmp L(StartStrcpyPart) - - .p2align 4 -L(exit_tail15): - add $15, %eax - - .p2align 4 -L(StartStrcpyPart): - mov %rsi, %rcx - lea (%rdi, %rax), %rdx -# ifdef USE_AS_STRNCAT - test %r8, %r8 - jz L(StrncatExit0) - cmp $8, %r8 - jbe L(StrncatExit8Bytes) -# endif - cmpb $0, (%rcx) - jz L(Exit1) - cmpb $0, 1(%rcx) - jz L(Exit2) - cmpb $0, 2(%rcx) - jz L(Exit3) - cmpb $0, 3(%rcx) - jz L(Exit4) - cmpb $0, 4(%rcx) - jz L(Exit5) - cmpb $0, 5(%rcx) - jz L(Exit6) - cmpb $0, 6(%rcx) - jz L(Exit7) - cmpb $0, 7(%rcx) - jz L(Exit8) - cmpb $0, 8(%rcx) - jz L(Exit9) -# ifdef USE_AS_STRNCAT - cmp $16, %r8 - jb L(StrncatExit15Bytes) -# endif - cmpb $0, 9(%rcx) - jz L(Exit10) - cmpb $0, 10(%rcx) - jz L(Exit11) - cmpb $0, 11(%rcx) - jz L(Exit12) - cmpb $0, 12(%rcx) - jz L(Exit13) - cmpb $0, 13(%rcx) - jz L(Exit14) - cmpb $0, 14(%rcx) - jz L(Exit15) - cmpb $0, 15(%rcx) - jz L(Exit16) -# ifdef USE_AS_STRNCAT - cmp $16, %r8 - je L(StrncatExit16) -# define USE_AS_STRNCPY -# endif - -# include "strcpy-ssse3.S" - - .p2align 4 -L(CopyFrom1To16Bytes): - add %rsi, %rdx - add %rsi, %rcx - - test %al, %al - jz L(ExitHigh) - test $0x01, %al - jnz L(Exit1) - test $0x02, %al - jnz L(Exit2) - test $0x04, %al - jnz L(Exit3) - test $0x08, %al - jnz L(Exit4) - test $0x10, %al - jnz L(Exit5) - test $0x20, %al - jnz L(Exit6) - test $0x40, %al - jnz L(Exit7) - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(ExitHigh): - test $0x01, %ah - jnz L(Exit9) - test $0x02, %ah - jnz L(Exit10) - test $0x04, %ah - jnz L(Exit11) - test $0x08, %ah - jnz L(Exit12) - test $0x10, %ah - jnz L(Exit13) - test $0x20, %ah - jnz L(Exit14) - test $0x40, %ah - jnz L(Exit15) - movlpd (%rcx), %xmm0 - movlpd 8(%rcx), %xmm1 - movlpd %xmm0, (%rdx) - movlpd %xmm1, 8(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit1): - xor %ah, %ah - movb %ah, 1(%rdx) -L(Exit1): - movb (%rcx), %al - movb %al, (%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit2): - xor %ah, %ah - movb %ah, 2(%rdx) -L(Exit2): - movw (%rcx), %ax - movw %ax, (%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit3): - xor %ah, %ah - movb %ah, 3(%rdx) -L(Exit3): - movw (%rcx), %ax - movw %ax, (%rdx) - movb 2(%rcx), %al - movb %al, 2(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit4): - xor %ah, %ah - movb %ah, 4(%rdx) -L(Exit4): - mov (%rcx), %eax - mov %eax, (%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit5): - xor %ah, %ah - movb %ah, 5(%rdx) -L(Exit5): - mov (%rcx), %eax - mov %eax, (%rdx) - movb 4(%rcx), %al - movb %al, 4(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit6): - xor %ah, %ah - movb %ah, 6(%rdx) -L(Exit6): - mov (%rcx), %eax - mov %eax, (%rdx) - movw 4(%rcx), %ax - movw %ax, 4(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit7): - xor %ah, %ah - movb %ah, 7(%rdx) -L(Exit7): - mov (%rcx), %eax - mov %eax, (%rdx) - mov 3(%rcx), %eax - mov %eax, 3(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit8): - xor %ah, %ah - movb %ah, 8(%rdx) -L(Exit8): - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit9): - xor %ah, %ah - movb %ah, 9(%rdx) -L(Exit9): - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - movb 8(%rcx), %al - movb %al, 8(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit10): - xor %ah, %ah - movb %ah, 10(%rdx) -L(Exit10): - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - movw 8(%rcx), %ax - movw %ax, 8(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit11): - xor %ah, %ah - movb %ah, 11(%rdx) -L(Exit11): - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - mov 7(%rcx), %eax - mov %eax, 7(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit12): - xor %ah, %ah - movb %ah, 12(%rdx) -L(Exit12): - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - mov 8(%rcx), %eax - mov %eax, 8(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit13): - xor %ah, %ah - movb %ah, 13(%rdx) -L(Exit13): - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - movlpd 5(%rcx), %xmm1 - movlpd %xmm1, 5(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit14): - xor %ah, %ah - movb %ah, 14(%rdx) -L(Exit14): - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - movlpd 6(%rcx), %xmm1 - movlpd %xmm1, 6(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit15): - xor %ah, %ah - movb %ah, 15(%rdx) -L(Exit15): - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - movlpd 7(%rcx), %xmm1 - movlpd %xmm1, 7(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit16): - xor %ah, %ah - movb %ah, 16(%rdx) -L(Exit16): - movlpd (%rcx), %xmm0 - movlpd 8(%rcx), %xmm1 - movlpd %xmm0, (%rdx) - movlpd %xmm1, 8(%rdx) - mov %rdi, %rax - ret - -# ifdef USE_AS_STRNCPY - - .p2align 4 -L(CopyFrom1To16BytesCase2): - add $16, %r8 - add %rsi, %rcx - lea (%rsi, %rdx), %rsi - lea -9(%r8), %rdx - and $1<<7, %dh - or %al, %dh - test %dh, %dh - lea (%rsi), %rdx - jz L(ExitHighCase2) - - test $0x01, %al - jnz L(Exit1) - cmp $1, %r8 - je L(StrncatExit1) - test $0x02, %al - jnz L(Exit2) - cmp $2, %r8 - je L(StrncatExit2) - test $0x04, %al - jnz L(Exit3) - cmp $3, %r8 - je L(StrncatExit3) - test $0x08, %al - jnz L(Exit4) - cmp $4, %r8 - je L(StrncatExit4) - test $0x10, %al - jnz L(Exit5) - cmp $5, %r8 - je L(StrncatExit5) - test $0x20, %al - jnz L(Exit6) - cmp $6, %r8 - je L(StrncatExit6) - test $0x40, %al - jnz L(Exit7) - cmp $7, %r8 - je L(StrncatExit7) - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - lea 7(%rdx), %rax - cmpb $1, (%rax) - sbb $-1, %rax - xor %cl, %cl - movb %cl, (%rax) - mov %rdi, %rax - ret - - .p2align 4 -L(ExitHighCase2): - test $0x01, %ah - jnz L(Exit9) - cmp $9, %r8 - je L(StrncatExit9) - test $0x02, %ah - jnz L(Exit10) - cmp $10, %r8 - je L(StrncatExit10) - test $0x04, %ah - jnz L(Exit11) - cmp $11, %r8 - je L(StrncatExit11) - test $0x8, %ah - jnz L(Exit12) - cmp $12, %r8 - je L(StrncatExit12) - test $0x10, %ah - jnz L(Exit13) - cmp $13, %r8 - je L(StrncatExit13) - test $0x20, %ah - jnz L(Exit14) - cmp $14, %r8 - je L(StrncatExit14) - test $0x40, %ah - jnz L(Exit15) - cmp $15, %r8 - je L(StrncatExit15) - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - movlpd 8(%rcx), %xmm1 - movlpd %xmm1, 8(%rdx) - mov %rdi, %rax - ret - -L(CopyFrom1To16BytesCase2OrCase3): - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - - .p2align 4 -L(CopyFrom1To16BytesCase3): - add $16, %r8 - add %rsi, %rdx - add %rsi, %rcx - - cmp $8, %r8 - ja L(ExitHighCase3) - cmp $1, %r8 - je L(StrncatExit1) - cmp $2, %r8 - je L(StrncatExit2) - cmp $3, %r8 - je L(StrncatExit3) - cmp $4, %r8 - je L(StrncatExit4) - cmp $5, %r8 - je L(StrncatExit5) - cmp $6, %r8 - je L(StrncatExit6) - cmp $7, %r8 - je L(StrncatExit7) - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - xor %ah, %ah - movb %ah, 8(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(ExitHighCase3): - cmp $9, %r8 - je L(StrncatExit9) - cmp $10, %r8 - je L(StrncatExit10) - cmp $11, %r8 - je L(StrncatExit11) - cmp $12, %r8 - je L(StrncatExit12) - cmp $13, %r8 - je L(StrncatExit13) - cmp $14, %r8 - je L(StrncatExit14) - cmp $15, %r8 - je L(StrncatExit15) - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - movlpd 8(%rcx), %xmm1 - movlpd %xmm1, 8(%rdx) - xor %ah, %ah - movb %ah, 16(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit0): - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit15Bytes): - cmp $9, %r8 - je L(StrncatExit9) - cmpb $0, 9(%rcx) - jz L(Exit10) - cmp $10, %r8 - je L(StrncatExit10) - cmpb $0, 10(%rcx) - jz L(Exit11) - cmp $11, %r8 - je L(StrncatExit11) - cmpb $0, 11(%rcx) - jz L(Exit12) - cmp $12, %r8 - je L(StrncatExit12) - cmpb $0, 12(%rcx) - jz L(Exit13) - cmp $13, %r8 - je L(StrncatExit13) - cmpb $0, 13(%rcx) - jz L(Exit14) - cmp $14, %r8 - je L(StrncatExit14) - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - movlpd 7(%rcx), %xmm1 - movlpd %xmm1, 7(%rdx) - lea 14(%rdx), %rax - cmpb $1, (%rax) - sbb $-1, %rax - xor %cl, %cl - movb %cl, (%rax) - mov %rdi, %rax - ret - - .p2align 4 -L(StrncatExit8Bytes): - cmpb $0, (%rcx) - jz L(Exit1) - cmp $1, %r8 - je L(StrncatExit1) - cmpb $0, 1(%rcx) - jz L(Exit2) - cmp $2, %r8 - je L(StrncatExit2) - cmpb $0, 2(%rcx) - jz L(Exit3) - cmp $3, %r8 - je L(StrncatExit3) - cmpb $0, 3(%rcx) - jz L(Exit4) - cmp $4, %r8 - je L(StrncatExit4) - cmpb $0, 4(%rcx) - jz L(Exit5) - cmp $5, %r8 - je L(StrncatExit5) - cmpb $0, 5(%rcx) - jz L(Exit6) - cmp $6, %r8 - je L(StrncatExit6) - cmpb $0, 6(%rcx) - jz L(Exit7) - cmp $7, %r8 - je L(StrncatExit7) - movlpd (%rcx), %xmm0 - movlpd %xmm0, (%rdx) - lea 7(%rdx), %rax - cmpb $1, (%rax) - sbb $-1, %rax - xor %cl, %cl - movb %cl, (%rax) - mov %rdi, %rax - ret - -# endif -END (STRCAT) -#endif diff --git a/sysdeps/x86_64/multiarch/strcat.S b/sysdeps/x86_64/multiarch/strcat.S deleted file mode 100644 index 0e0e5dda9c..0000000000 --- a/sysdeps/x86_64/multiarch/strcat.S +++ /dev/null @@ -1,85 +0,0 @@ -/* Multiple versions of strcat - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifndef USE_AS_STRNCAT -# ifndef STRCAT -# define STRCAT strcat -# endif -#endif - -#ifdef USE_AS_STRNCAT -# define STRCAT_SSSE3 __strncat_ssse3 -# define STRCAT_SSE2 __strncat_sse2 -# define STRCAT_SSE2_UNALIGNED __strncat_sse2_unaligned -# define __GI_STRCAT __GI_strncat -# define __GI___STRCAT __GI___strncat -#else -# define STRCAT_SSSE3 __strcat_ssse3 -# define STRCAT_SSE2 __strcat_sse2 -# define STRCAT_SSE2_UNALIGNED __strcat_sse2_unaligned -# define __GI_STRCAT __GI_strcat -# define __GI___STRCAT __GI___strcat -#endif - - -/* Define multiple versions only for the definition in libc. */ -#if IS_IN (libc) - .text -ENTRY(STRCAT) - .type STRCAT, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq STRCAT_SSE2_UNALIGNED(%rip), %rax - HAS_ARCH_FEATURE (Fast_Unaligned_Load) - jnz 2f - leaq STRCAT_SSE2(%rip), %rax - HAS_CPU_FEATURE (SSSE3) - jz 2f - leaq STRCAT_SSSE3(%rip), %rax -2: ret -END(STRCAT) - -# undef ENTRY -# define ENTRY(name) \ - .type STRCAT_SSE2, @function; \ - .align 16; \ - .globl STRCAT_SSE2; \ - .hidden STRCAT_SSE2; \ - STRCAT_SSE2: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size STRCAT_SSE2, .-STRCAT_SSE2 -# undef libc_hidden_builtin_def -/* It doesn't make sense to send libc-internal strcat calls through a PLT. - The speedup we get from using SSSE3 instruction is likely eaten away - by the indirect call in the PLT. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_STRCAT; __GI_STRCAT = STRCAT_SSE2 -# undef libc_hidden_def -# define libc_hidden_def(name) \ - .globl __GI___STRCAT; __GI___STRCAT = STRCAT_SSE2 -#endif - -#ifndef USE_AS_STRNCAT -# include "../strcat.S" -#endif diff --git a/sysdeps/x86_64/multiarch/strchr-sse2-no-bsf.S b/sysdeps/x86_64/multiarch/strchr-sse2-no-bsf.S deleted file mode 100644 index cbbd0b33d3..0000000000 --- a/sysdeps/x86_64/multiarch/strchr-sse2-no-bsf.S +++ /dev/null @@ -1,280 +0,0 @@ -/* strchr with SSE2 without bsf - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# include -# include "asm-syntax.h" - - atom_text_section -ENTRY (__strchr_sse2_no_bsf) - movd %esi, %xmm1 - movq %rdi, %rcx - punpcklbw %xmm1, %xmm1 - andq $~15, %rdi - pxor %xmm2, %xmm2 - punpcklbw %xmm1, %xmm1 - orl $0xffffffff, %esi - movdqa (%rdi), %xmm0 - pshufd $0, %xmm1, %xmm1 - subq %rdi, %rcx - movdqa %xmm0, %xmm3 - leaq 16(%rdi), %rdi - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm3 - shl %cl, %esi - pmovmskb %xmm0, %eax - pmovmskb %xmm3, %edx - andl %esi, %eax - andl %esi, %edx - test %eax, %eax - jnz L(matches) - test %edx, %edx - jnz L(return_null) - -L(loop): - movdqa (%rdi), %xmm0 - leaq 16(%rdi), %rdi - movdqa %xmm0, %xmm3 - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm3 - pmovmskb %xmm0, %eax - pmovmskb %xmm3, %edx - or %eax, %edx - jz L(loop) - - pmovmskb %xmm3, %edx - test %eax, %eax - jnz L(matches) - -/* Return NULL. */ - .p2align 4 -L(return_null): - xor %rax, %rax - ret - -L(matches): - /* There is a match. First find where NULL is. */ - leaq -16(%rdi), %rdi - test %edx, %edx - jz L(match_case1) - - .p2align 4 -L(match_case2): - test %al, %al - jz L(match_high_case2) - - mov %al, %cl - and $15, %cl - jnz L(match_case2_4) - - mov %dl, %ch - and $15, %ch - jnz L(return_null) - - test $0x10, %al - jnz L(Exit5) - test $0x10, %dl - jnz L(return_null) - test $0x20, %al - jnz L(Exit6) - test $0x20, %dl - jnz L(return_null) - test $0x40, %al - jnz L(Exit7) - test $0x40, %dl - jnz L(return_null) - lea 7(%rdi), %rax - ret - - .p2align 4 -L(match_case2_4): - test $0x01, %al - jnz L(Exit1) - test $0x01, %dl - jnz L(return_null) - test $0x02, %al - jnz L(Exit2) - test $0x02, %dl - jnz L(return_null) - test $0x04, %al - jnz L(Exit3) - test $0x04, %dl - jnz L(return_null) - lea 3(%rdi), %rax - ret - - .p2align 4 -L(match_high_case2): - test %dl, %dl - jnz L(return_null) - - mov %ah, %cl - and $15, %cl - jnz L(match_case2_12) - - mov %dh, %ch - and $15, %ch - jnz L(return_null) - - test $0x10, %ah - jnz L(Exit13) - test $0x10, %dh - jnz L(return_null) - test $0x20, %ah - jnz L(Exit14) - test $0x20, %dh - jnz L(return_null) - test $0x40, %ah - jnz L(Exit15) - test $0x40, %dh - jnz L(return_null) - lea 15(%rdi), %rax - ret - - .p2align 4 -L(match_case2_12): - test $0x01, %ah - jnz L(Exit9) - test $0x01, %dh - jnz L(return_null) - test $0x02, %ah - jnz L(Exit10) - test $0x02, %dh - jnz L(return_null) - test $0x04, %ah - jnz L(Exit11) - test $0x04, %dh - jnz L(return_null) - lea 11(%rdi), %rax - ret - - .p2align 4 -L(match_case1): - test %al, %al - jz L(match_high_case1) - - test $0x01, %al - jnz L(Exit1) - test $0x02, %al - jnz L(Exit2) - test $0x04, %al - jnz L(Exit3) - test $0x08, %al - jnz L(Exit4) - test $0x10, %al - jnz L(Exit5) - test $0x20, %al - jnz L(Exit6) - test $0x40, %al - jnz L(Exit7) - lea 7(%rdi), %rax - ret - - .p2align 4 -L(match_high_case1): - test $0x01, %ah - jnz L(Exit9) - test $0x02, %ah - jnz L(Exit10) - test $0x04, %ah - jnz L(Exit11) - test $0x08, %ah - jnz L(Exit12) - test $0x10, %ah - jnz L(Exit13) - test $0x20, %ah - jnz L(Exit14) - test $0x40, %ah - jnz L(Exit15) - lea 15(%rdi), %rax - ret - - .p2align 4 -L(Exit1): - lea (%rdi), %rax - ret - - .p2align 4 -L(Exit2): - lea 1(%rdi), %rax - ret - - .p2align 4 -L(Exit3): - lea 2(%rdi), %rax - ret - - .p2align 4 -L(Exit4): - lea 3(%rdi), %rax - ret - - .p2align 4 -L(Exit5): - lea 4(%rdi), %rax - ret - - .p2align 4 -L(Exit6): - lea 5(%rdi), %rax - ret - - .p2align 4 -L(Exit7): - lea 6(%rdi), %rax - ret - - .p2align 4 -L(Exit9): - lea 8(%rdi), %rax - ret - - .p2align 4 -L(Exit10): - lea 9(%rdi), %rax - ret - - .p2align 4 -L(Exit11): - lea 10(%rdi), %rax - ret - - .p2align 4 -L(Exit12): - lea 11(%rdi), %rax - ret - - .p2align 4 -L(Exit13): - lea 12(%rdi), %rax - ret - - .p2align 4 -L(Exit14): - lea 13(%rdi), %rax - ret - - .p2align 4 -L(Exit15): - lea 14(%rdi), %rax - ret - -END (__strchr_sse2_no_bsf) -#endif diff --git a/sysdeps/x86_64/multiarch/strchr.S b/sysdeps/x86_64/multiarch/strchr.S deleted file mode 100644 index c9f54ca2e2..0000000000 --- a/sysdeps/x86_64/multiarch/strchr.S +++ /dev/null @@ -1,57 +0,0 @@ -/* Multiple versions of strchr - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -/* Define multiple versions only for the definition in libc. */ -#if IS_IN (libc) - .text -ENTRY(strchr) - .type strchr, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq __strchr_sse2(%rip), %rax -2: HAS_ARCH_FEATURE (Slow_BSF) - jz 3f - leaq __strchr_sse2_no_bsf(%rip), %rax -3: ret -END(strchr) - - - -# undef ENTRY -# define ENTRY(name) \ - .type __strchr_sse2, @function; \ - .align 16; \ - .globl __strchr_sse2; \ - .hidden __strchr_sse2; \ - __strchr_sse2: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __strchr_sse2, .-__strchr_sse2 -# undef libc_hidden_builtin_def -/* It doesn't make sense to send libc-internal strchr calls through a PLT. - The speedup we get from using SSE4.2 instruction is likely eaten away - by the indirect call in the PLT. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_strchr; __GI_strchr = __strchr_sse2 -#endif - -#include "../strchr.S" diff --git a/sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S b/sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S deleted file mode 100644 index b0992dce39..0000000000 --- a/sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S +++ /dev/null @@ -1,213 +0,0 @@ -/* strcmp with unaligned loads - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -#include "sysdep.h" - -ENTRY ( __strcmp_sse2_unaligned) - movl %edi, %eax - xorl %edx, %edx - pxor %xmm7, %xmm7 - orl %esi, %eax - andl $4095, %eax - cmpl $4032, %eax - jg L(cross_page) - movdqu (%rdi), %xmm1 - movdqu (%rsi), %xmm0 - pcmpeqb %xmm1, %xmm0 - pminub %xmm1, %xmm0 - pxor %xmm1, %xmm1 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - testq %rax, %rax - je L(next_48_bytes) -L(return): - bsfq %rax, %rdx - movzbl (%rdi, %rdx), %eax - movzbl (%rsi, %rdx), %edx - subl %edx, %eax - ret - - .p2align 4 -L(next_48_bytes): - movdqu 16(%rdi), %xmm6 - movdqu 16(%rsi), %xmm3 - movdqu 32(%rdi), %xmm5 - pcmpeqb %xmm6, %xmm3 - movdqu 32(%rsi), %xmm2 - pminub %xmm6, %xmm3 - pcmpeqb %xmm1, %xmm3 - movdqu 48(%rdi), %xmm4 - pcmpeqb %xmm5, %xmm2 - pmovmskb %xmm3, %edx - movdqu 48(%rsi), %xmm0 - pminub %xmm5, %xmm2 - pcmpeqb %xmm1, %xmm2 - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm2, %eax - salq $16, %rdx - pminub %xmm4, %xmm0 - pcmpeqb %xmm1, %xmm0 - salq $32, %rax - orq %rdx, %rax - pmovmskb %xmm0, %ecx - movq %rcx, %rdx - salq $48, %rdx - orq %rdx, %rax - jne L(return) -L(main_loop_header): - leaq 64(%rdi), %rdx - movl $4096, %ecx - pxor %xmm9, %xmm9 - andq $-64, %rdx - subq %rdi, %rdx - leaq (%rdi, %rdx), %rax - addq %rsi, %rdx - movq %rdx, %rsi - andl $4095, %esi - subq %rsi, %rcx - shrq $6, %rcx - movq %rcx, %rsi - jmp L(loop_start) - - .p2align 4 -L(loop): - addq $64, %rax - addq $64, %rdx -L(loop_start): - testq %rsi, %rsi - leaq -1(%rsi), %rsi - je L(loop_cross_page) -L(back_to_loop): - movdqu (%rdx), %xmm0 - movdqu 16(%rdx), %xmm1 - movdqa (%rax), %xmm2 - movdqa 16(%rax), %xmm3 - pcmpeqb %xmm2, %xmm0 - movdqu 32(%rdx), %xmm5 - pcmpeqb %xmm3, %xmm1 - pminub %xmm2, %xmm0 - movdqu 48(%rdx), %xmm6 - pminub %xmm3, %xmm1 - movdqa 32(%rax), %xmm2 - pminub %xmm1, %xmm0 - movdqa 48(%rax), %xmm3 - pcmpeqb %xmm2, %xmm5 - pcmpeqb %xmm3, %xmm6 - pminub %xmm2, %xmm5 - pminub %xmm3, %xmm6 - pminub %xmm5, %xmm0 - pminub %xmm6, %xmm0 - pcmpeqb %xmm7, %xmm0 - pmovmskb %xmm0, %ecx - testl %ecx, %ecx - je L(loop) - pcmpeqb %xmm7, %xmm5 - movdqu (%rdx), %xmm0 - pcmpeqb %xmm7, %xmm1 - movdqa (%rax), %xmm2 - pcmpeqb %xmm2, %xmm0 - pminub %xmm2, %xmm0 - pcmpeqb %xmm7, %xmm6 - pcmpeqb %xmm7, %xmm0 - pmovmskb %xmm1, %ecx - pmovmskb %xmm5, %r8d - pmovmskb %xmm0, %edi - salq $16, %rcx - salq $32, %r8 - pmovmskb %xmm6, %esi - orq %r8, %rcx - orq %rdi, %rcx - salq $48, %rsi - orq %rsi, %rcx - bsfq %rcx, %rcx - movzbl (%rax, %rcx), %eax - movzbl (%rdx, %rcx), %edx - subl %edx, %eax - ret - - .p2align 4 -L(loop_cross_page): - xor %r10, %r10 - movq %rdx, %r9 - and $63, %r9 - subq %r9, %r10 - - movdqa (%rdx, %r10), %xmm0 - movdqa 16(%rdx, %r10), %xmm1 - movdqu (%rax, %r10), %xmm2 - movdqu 16(%rax, %r10), %xmm3 - pcmpeqb %xmm2, %xmm0 - movdqa 32(%rdx, %r10), %xmm5 - pcmpeqb %xmm3, %xmm1 - pminub %xmm2, %xmm0 - movdqa 48(%rdx, %r10), %xmm6 - pminub %xmm3, %xmm1 - movdqu 32(%rax, %r10), %xmm2 - movdqu 48(%rax, %r10), %xmm3 - pcmpeqb %xmm2, %xmm5 - pcmpeqb %xmm3, %xmm6 - pminub %xmm2, %xmm5 - pminub %xmm3, %xmm6 - - pcmpeqb %xmm7, %xmm0 - pcmpeqb %xmm7, %xmm1 - pcmpeqb %xmm7, %xmm5 - pcmpeqb %xmm7, %xmm6 - - pmovmskb %xmm1, %ecx - pmovmskb %xmm5, %r8d - pmovmskb %xmm0, %edi - salq $16, %rcx - salq $32, %r8 - pmovmskb %xmm6, %esi - orq %r8, %rdi - orq %rcx, %rdi - salq $48, %rsi - orq %rsi, %rdi - movq %r9, %rcx - movq $63, %rsi - shrq %cl, %rdi - test %rdi, %rdi - je L(back_to_loop) - bsfq %rdi, %rcx - movzbl (%rax, %rcx), %eax - movzbl (%rdx, %rcx), %edx - subl %edx, %eax - ret - - .p2align 4 -L(cross_page_loop): - cmpb %cl, %al - jne L(different) - addq $1, %rdx - cmpq $64, %rdx - je L(main_loop_header) -L(cross_page): - movzbl (%rdi, %rdx), %eax - movzbl (%rsi, %rdx), %ecx - testb %al, %al - jne L(cross_page_loop) - xorl %eax, %eax -L(different): - subl %ecx, %eax - ret -END (__strcmp_sse2_unaligned) - -#endif diff --git a/sysdeps/x86_64/multiarch/strcmp-sse42.S b/sysdeps/x86_64/multiarch/strcmp-sse42.S deleted file mode 100644 index ed26d4a8fb..0000000000 --- a/sysdeps/x86_64/multiarch/strcmp-sse42.S +++ /dev/null @@ -1,1792 +0,0 @@ -/* strcmp with SSE4.2 - Copyright (C) 2009-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -/* We use 0x1a: - _SIDD_SBYTE_OPS - | _SIDD_CMP_EQUAL_EACH - | _SIDD_NEGATIVE_POLARITY - | _SIDD_LEAST_SIGNIFICANT - on pcmpistri to find out if two 16byte data elements are the same - and the offset of the first different byte. There are 4 cases: - - 1. Both 16byte data elements are valid and identical. - 2. Both 16byte data elements have EOS and identical. - 3. Both 16byte data elements are valid and they differ at offset X. - 4. At least one 16byte data element has EOS at offset X. Two 16byte - data elements must differ at or before offset X. - - Here is the table of ECX, CFlag, ZFlag and SFlag for 4 cases: - - case ECX CFlag ZFlag SFlag - 1 16 0 0 0 - 2 16 0 1 1 - 3 X 1 0 0 - 4 0 <= X 1 0/1 0/1 - - We exit from the loop for cases 2, 3 and 4 with jbe which branches - when either CFlag or ZFlag is 1. If CFlag == 0, we return 0 for - case 2. */ - - /* Put all SSE 4.2 functions together. */ - .section .text.SECTION,"ax",@progbits - .align 16 - .type STRCMP_SSE42, @function - .globl STRCMP_SSE42 - .hidden STRCMP_SSE42 -#ifdef USE_AS_STRCASECMP_L -ENTRY (GLABEL(__strcasecmp)) - movq __libc_tsd_LOCALE@gottpoff(%rip),%rax - mov %fs:(%rax),%RDX_LP - - // XXX 5 byte should be before the function - /* 5-byte NOP. */ - .byte 0x0f,0x1f,0x44,0x00,0x00 -END (GLABEL(__strcasecmp)) - /* FALLTHROUGH to strcasecmp_l. */ -#endif -#ifdef USE_AS_STRNCASECMP_L -ENTRY (GLABEL(__strncasecmp)) - movq __libc_tsd_LOCALE@gottpoff(%rip),%rax - mov %fs:(%rax),%RCX_LP - - // XXX 5 byte should be before the function - /* 5-byte NOP. */ - .byte 0x0f,0x1f,0x44,0x00,0x00 -END (GLABEL(__strncasecmp)) - /* FALLTHROUGH to strncasecmp_l. */ -#endif - - -#ifdef USE_AVX -# define movdqa vmovdqa -# define movdqu vmovdqu -# define pmovmskb vpmovmskb -# define pcmpistri vpcmpistri -# define psubb vpsubb -# define pcmpeqb vpcmpeqb -# define psrldq vpsrldq -# define pslldq vpslldq -# define palignr vpalignr -# define pxor vpxor -# define D(arg) arg, arg -#else -# define D(arg) arg -#endif - -STRCMP_SSE42: - cfi_startproc - CALL_MCOUNT - -/* - * This implementation uses SSE to compare up to 16 bytes at a time. - */ -#ifdef USE_AS_STRCASECMP_L - /* We have to fall back on the C implementation for locales - with encodings not matching ASCII for single bytes. */ -# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 - mov LOCALE_T___LOCALES+LC_CTYPE*LP_SIZE(%rdx), %RAX_LP -# else - mov (%rdx), %RAX_LP -# endif - testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax) - jne __strcasecmp_l_nonascii -#endif -#ifdef USE_AS_STRNCASECMP_L - /* We have to fall back on the C implementation for locales - with encodings not matching ASCII for single bytes. */ -# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 - mov LOCALE_T___LOCALES+LC_CTYPE*LP_SIZE(%rcx), %RAX_LP -# else - mov (%rcx), %RAX_LP -# endif - testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax) - jne __strncasecmp_l_nonascii -#endif - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - test %rdx, %rdx - je LABEL(strcmp_exitz) - cmp $1, %rdx - je LABEL(Byte0) - mov %rdx, %r11 -#endif - mov %esi, %ecx - mov %edi, %eax -/* Use 64bit AND here to avoid long NOP padding. */ - and $0x3f, %rcx /* rsi alignment in cache line */ - and $0x3f, %rax /* rdi alignment in cache line */ -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - .section .rodata.cst16,"aM",@progbits,16 - .align 16 -LABEL(belowupper): - .quad 0x4040404040404040 - .quad 0x4040404040404040 -LABEL(topupper): -# ifdef USE_AVX - .quad 0x5a5a5a5a5a5a5a5a - .quad 0x5a5a5a5a5a5a5a5a -# else - .quad 0x5b5b5b5b5b5b5b5b - .quad 0x5b5b5b5b5b5b5b5b -# endif -LABEL(touppermask): - .quad 0x2020202020202020 - .quad 0x2020202020202020 - .previous - movdqa LABEL(belowupper)(%rip), %xmm4 -# define UCLOW_reg %xmm4 - movdqa LABEL(topupper)(%rip), %xmm5 -# define UCHIGH_reg %xmm5 - movdqa LABEL(touppermask)(%rip), %xmm6 -# define LCQWORD_reg %xmm6 -#endif - cmp $0x30, %ecx - ja LABEL(crosscache)/* rsi: 16-byte load will cross cache line */ - cmp $0x30, %eax - ja LABEL(crosscache)/* rdi: 16-byte load will cross cache line */ - movdqu (%rdi), %xmm1 - movdqu (%rsi), %xmm2 -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# ifdef USE_AVX -# define TOLOWER(reg1, reg2) \ - vpcmpgtb UCLOW_reg, reg1, %xmm7; \ - vpcmpgtb UCHIGH_reg, reg1, %xmm8; \ - vpcmpgtb UCLOW_reg, reg2, %xmm9; \ - vpcmpgtb UCHIGH_reg, reg2, %xmm10; \ - vpandn %xmm7, %xmm8, %xmm8; \ - vpandn %xmm9, %xmm10, %xmm10; \ - vpand LCQWORD_reg, %xmm8, %xmm8; \ - vpand LCQWORD_reg, %xmm10, %xmm10; \ - vpor reg1, %xmm8, reg1; \ - vpor reg2, %xmm10, reg2 -# else -# define TOLOWER(reg1, reg2) \ - movdqa reg1, %xmm7; \ - movdqa UCHIGH_reg, %xmm8; \ - movdqa reg2, %xmm9; \ - movdqa UCHIGH_reg, %xmm10; \ - pcmpgtb UCLOW_reg, %xmm7; \ - pcmpgtb reg1, %xmm8; \ - pcmpgtb UCLOW_reg, %xmm9; \ - pcmpgtb reg2, %xmm10; \ - pand %xmm8, %xmm7; \ - pand %xmm10, %xmm9; \ - pand LCQWORD_reg, %xmm7; \ - pand LCQWORD_reg, %xmm9; \ - por %xmm7, reg1; \ - por %xmm9, reg2 -# endif - TOLOWER (%xmm1, %xmm2) -#else -# define TOLOWER(reg1, reg2) -#endif - pxor %xmm0, D(%xmm0) /* clear %xmm0 for null char checks */ - pcmpeqb %xmm1, D(%xmm0) /* Any null chars? */ - pcmpeqb %xmm2, D(%xmm1) /* compare first 16 bytes for equality */ - psubb %xmm0, D(%xmm1) /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 16 bytes are same, edx == 0xffff */ - jnz LABEL(less16bytes)/* If not, find different value or null char */ -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz)/* finish comparison */ -#endif - add $16, %rsi /* prepare to search next 16 bytes */ - add $16, %rdi /* prepare to search next 16 bytes */ - - /* - * Determine source and destination string offsets from 16-byte - * alignment. Use relative offset difference between the two to - * determine which case below to use. - */ - .p2align 4 -LABEL(crosscache): - and $0xfffffffffffffff0, %rsi /* force %rsi is 16 byte aligned */ - and $0xfffffffffffffff0, %rdi /* force %rdi is 16 byte aligned */ - mov $0xffff, %edx /* for equivalent offset */ - xor %r8d, %r8d - and $0xf, %ecx /* offset of rsi */ - and $0xf, %eax /* offset of rdi */ - pxor %xmm0, D(%xmm0) /* clear %xmm0 for null char check */ - cmp %eax, %ecx - je LABEL(ashr_0) /* rsi and rdi relative offset same */ - ja LABEL(bigger) - mov %edx, %r8d /* r8d is offset flag for exit tail */ - xchg %ecx, %eax - xchg %rsi, %rdi -LABEL(bigger): - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - lea 15(%rax), %r9 - sub %rcx, %r9 - lea LABEL(unaligned_table)(%rip), %r10 - movslq (%r10, %r9,4), %r9 - pcmpeqb %xmm1, D(%xmm0) /* Any null chars? */ - lea (%r10, %r9), %r10 - jmp *%r10 /* jump to corresponding case */ - -/* - * The following cases will be handled by ashr_0 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(0~15) n(0~15) 15(15+ n-n) ashr_0 - */ - .p2align 4 -LABEL(ashr_0): - - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, D(%xmm0) /* Any null chars? */ -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpeqb (%rdi), D(%xmm1) /* compare 16 bytes for equality */ -#else - movdqa (%rdi), %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm2, D(%xmm1) /* compare 16 bytes for equality */ -#endif - psubb %xmm0, D(%xmm1) /* packed sub of comparison results*/ - pmovmskb %xmm1, %r9d - shr %cl, %edx /* adjust 0xffff for offset */ - shr %cl, %r9d /* adjust for 16-byte offset */ - sub %r9d, %edx - /* - * edx must be the same with r9d if in left byte (16-rcx) is equal to - * the start from (16-rax) and no null char was seen. - */ - jne LABEL(less32bytes) /* mismatch or null char */ - UPDATE_STRNCMP_COUNTER - mov $16, %rcx - mov $16, %r9 - - /* - * Now both strings are aligned at 16-byte boundary. Loop over strings - * checking 32-bytes per iteration. - */ - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - .p2align 4 -LABEL(ashr_0_use): - movdqa (%rdi,%rdx), %xmm0 -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - lea 16(%rdx), %rdx - jbe LABEL(ashr_0_exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - movdqa (%rdi,%rdx), %xmm0 -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - lea 16(%rdx), %rdx - jbe LABEL(ashr_0_exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - jmp LABEL(ashr_0_use) - - - .p2align 4 -LABEL(ashr_0_exit_use): - jnc LABEL(strcmp_exitz) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub %rcx, %r11 - jbe LABEL(strcmp_exitz) -#endif - lea -16(%rdx, %rcx), %rcx - movzbl (%rdi, %rcx), %eax - movzbl (%rsi, %rcx), %edx -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - leaq _nl_C_LC_CTYPE_tolower+128*4(%rip), %rcx - movl (%rcx,%rax,4), %eax - movl (%rcx,%rdx,4), %edx -#endif - sub %edx, %eax - ret - - - -/* - * The following cases will be handled by ashr_1 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(15) n -15 0(15 +(n-15) - n) ashr_1 - */ - .p2align 4 -LABEL(ashr_1): - pslldq $15, D(%xmm2) /* shift first string to align with second */ - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) /* compare 16 bytes for equality */ - psubb %xmm0, D(%xmm2) /* packed sub of comparison results*/ - pmovmskb %xmm2, %r9d - shr %cl, %edx /* adjust 0xffff for offset */ - shr %cl, %r9d /* adjust for 16-byte offset */ - sub %r9d, %edx - jnz LABEL(less32bytes) /* mismatch or null char seen */ - movdqa (%rdi), %xmm3 - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads*/ - mov $1, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 1(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - - .p2align 4 -LABEL(loop_ashr_1_use): - add $16, %r10 - jg LABEL(nibble_ashr_1_use) - -LABEL(nibble_ashr_1_restart_use): - movdqa (%rdi, %rdx), %xmm0 - palignr $1, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_1_use) - - movdqa (%rdi, %rdx), %xmm0 - palignr $1, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_1_use) - - .p2align 4 -LABEL(nibble_ashr_1_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $1, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $14, %ecx - ja LABEL(nibble_ashr_1_restart_use) - - jmp LABEL(nibble_ashr_exit_use) - -/* - * The following cases will be handled by ashr_2 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(14~15) n -14 1(15 +(n-14) - n) ashr_2 - */ - .p2align 4 -LABEL(ashr_2): - pslldq $14, D(%xmm2) - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) - psubb %xmm0, D(%xmm2) - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads */ - mov $2, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 2(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - - .p2align 4 -LABEL(loop_ashr_2_use): - add $16, %r10 - jg LABEL(nibble_ashr_2_use) - -LABEL(nibble_ashr_2_restart_use): - movdqa (%rdi, %rdx), %xmm0 - palignr $2, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_2_use) - - movdqa (%rdi, %rdx), %xmm0 - palignr $2, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_2_use) - - .p2align 4 -LABEL(nibble_ashr_2_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $2, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $13, %ecx - ja LABEL(nibble_ashr_2_restart_use) - - jmp LABEL(nibble_ashr_exit_use) - -/* - * The following cases will be handled by ashr_3 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(13~15) n -13 2(15 +(n-13) - n) ashr_3 - */ - .p2align 4 -LABEL(ashr_3): - pslldq $13, D(%xmm2) - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) - psubb %xmm0, D(%xmm2) - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads */ - mov $3, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 3(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - -LABEL(loop_ashr_3_use): - add $16, %r10 - jg LABEL(nibble_ashr_3_use) - -LABEL(nibble_ashr_3_restart_use): - movdqa (%rdi, %rdx), %xmm0 - palignr $3, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_3_use) - - movdqa (%rdi, %rdx), %xmm0 - palignr $3, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_3_use) - - .p2align 4 -LABEL(nibble_ashr_3_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $3, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $12, %ecx - ja LABEL(nibble_ashr_3_restart_use) - - jmp LABEL(nibble_ashr_exit_use) - -/* - * The following cases will be handled by ashr_4 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(12~15) n -12 3(15 +(n-12) - n) ashr_4 - */ - .p2align 4 -LABEL(ashr_4): - pslldq $12, D(%xmm2) - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) - psubb %xmm0, D(%xmm2) - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads */ - mov $4, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 4(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - - .p2align 4 -LABEL(loop_ashr_4_use): - add $16, %r10 - jg LABEL(nibble_ashr_4_use) - -LABEL(nibble_ashr_4_restart_use): - movdqa (%rdi, %rdx), %xmm0 - palignr $4, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_4_use) - - movdqa (%rdi, %rdx), %xmm0 - palignr $4, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_4_use) - - .p2align 4 -LABEL(nibble_ashr_4_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $4, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $11, %ecx - ja LABEL(nibble_ashr_4_restart_use) - - jmp LABEL(nibble_ashr_exit_use) - -/* - * The following cases will be handled by ashr_5 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(11~15) n - 11 4(15 +(n-11) - n) ashr_5 - */ - .p2align 4 -LABEL(ashr_5): - pslldq $11, D(%xmm2) - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) - psubb %xmm0, D(%xmm2) - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads */ - mov $5, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 5(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - - .p2align 4 -LABEL(loop_ashr_5_use): - add $16, %r10 - jg LABEL(nibble_ashr_5_use) - -LABEL(nibble_ashr_5_restart_use): - movdqa (%rdi, %rdx), %xmm0 - palignr $5, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_5_use) - - movdqa (%rdi, %rdx), %xmm0 - - palignr $5, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_5_use) - - .p2align 4 -LABEL(nibble_ashr_5_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $5, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $10, %ecx - ja LABEL(nibble_ashr_5_restart_use) - - jmp LABEL(nibble_ashr_exit_use) - -/* - * The following cases will be handled by ashr_6 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(10~15) n - 10 5(15 +(n-10) - n) ashr_6 - */ - .p2align 4 -LABEL(ashr_6): - pslldq $10, D(%xmm2) - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) - psubb %xmm0, D(%xmm2) - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads */ - mov $6, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 6(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - - .p2align 4 -LABEL(loop_ashr_6_use): - add $16, %r10 - jg LABEL(nibble_ashr_6_use) - -LABEL(nibble_ashr_6_restart_use): - movdqa (%rdi, %rdx), %xmm0 - palignr $6, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_6_use) - - movdqa (%rdi, %rdx), %xmm0 - palignr $6, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_6_use) - - .p2align 4 -LABEL(nibble_ashr_6_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $6, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $9, %ecx - ja LABEL(nibble_ashr_6_restart_use) - - jmp LABEL(nibble_ashr_exit_use) - -/* - * The following cases will be handled by ashr_7 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(9~15) n - 9 6(15 +(n - 9) - n) ashr_7 - */ - .p2align 4 -LABEL(ashr_7): - pslldq $9, D(%xmm2) - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) - psubb %xmm0, D(%xmm2) - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads */ - mov $7, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 7(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - - .p2align 4 -LABEL(loop_ashr_7_use): - add $16, %r10 - jg LABEL(nibble_ashr_7_use) - -LABEL(nibble_ashr_7_restart_use): - movdqa (%rdi, %rdx), %xmm0 - palignr $7, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_7_use) - - movdqa (%rdi, %rdx), %xmm0 - palignr $7, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_7_use) - - .p2align 4 -LABEL(nibble_ashr_7_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $7, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $8, %ecx - ja LABEL(nibble_ashr_7_restart_use) - - jmp LABEL(nibble_ashr_exit_use) - -/* - * The following cases will be handled by ashr_8 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(8~15) n - 8 7(15 +(n - 8) - n) ashr_8 - */ - .p2align 4 -LABEL(ashr_8): - pslldq $8, D(%xmm2) - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) - psubb %xmm0, D(%xmm2) - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads */ - mov $8, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 8(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - - .p2align 4 -LABEL(loop_ashr_8_use): - add $16, %r10 - jg LABEL(nibble_ashr_8_use) - -LABEL(nibble_ashr_8_restart_use): - movdqa (%rdi, %rdx), %xmm0 - palignr $8, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_8_use) - - movdqa (%rdi, %rdx), %xmm0 - palignr $8, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_8_use) - - .p2align 4 -LABEL(nibble_ashr_8_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $8, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $7, %ecx - ja LABEL(nibble_ashr_8_restart_use) - - jmp LABEL(nibble_ashr_exit_use) - -/* - * The following cases will be handled by ashr_9 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(7~15) n - 7 8(15 +(n - 7) - n) ashr_9 - */ - .p2align 4 -LABEL(ashr_9): - pslldq $7, D(%xmm2) - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) - psubb %xmm0, D(%xmm2) - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads */ - mov $9, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 9(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - - .p2align 4 -LABEL(loop_ashr_9_use): - add $16, %r10 - jg LABEL(nibble_ashr_9_use) - -LABEL(nibble_ashr_9_restart_use): - movdqa (%rdi, %rdx), %xmm0 - - palignr $9, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_9_use) - - movdqa (%rdi, %rdx), %xmm0 - palignr $9, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_9_use) - - .p2align 4 -LABEL(nibble_ashr_9_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $9, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $6, %ecx - ja LABEL(nibble_ashr_9_restart_use) - - jmp LABEL(nibble_ashr_exit_use) - -/* - * The following cases will be handled by ashr_10 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(6~15) n - 6 9(15 +(n - 6) - n) ashr_10 - */ - .p2align 4 -LABEL(ashr_10): - pslldq $6, D(%xmm2) - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) - psubb %xmm0, D(%xmm2) - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads */ - mov $10, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 10(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - - .p2align 4 -LABEL(loop_ashr_10_use): - add $16, %r10 - jg LABEL(nibble_ashr_10_use) - -LABEL(nibble_ashr_10_restart_use): - movdqa (%rdi, %rdx), %xmm0 - palignr $10, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_10_use) - - movdqa (%rdi, %rdx), %xmm0 - palignr $10, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_10_use) - - .p2align 4 -LABEL(nibble_ashr_10_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $10, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $5, %ecx - ja LABEL(nibble_ashr_10_restart_use) - - jmp LABEL(nibble_ashr_exit_use) - -/* - * The following cases will be handled by ashr_11 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(5~15) n - 5 10(15 +(n - 5) - n) ashr_11 - */ - .p2align 4 -LABEL(ashr_11): - pslldq $5, D(%xmm2) - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) - psubb %xmm0, D(%xmm2) - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads */ - mov $11, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 11(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - - .p2align 4 -LABEL(loop_ashr_11_use): - add $16, %r10 - jg LABEL(nibble_ashr_11_use) - -LABEL(nibble_ashr_11_restart_use): - movdqa (%rdi, %rdx), %xmm0 - palignr $11, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_11_use) - - movdqa (%rdi, %rdx), %xmm0 - palignr $11, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_11_use) - - .p2align 4 -LABEL(nibble_ashr_11_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $11, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $4, %ecx - ja LABEL(nibble_ashr_11_restart_use) - - jmp LABEL(nibble_ashr_exit_use) - -/* - * The following cases will be handled by ashr_12 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(4~15) n - 4 11(15 +(n - 4) - n) ashr_12 - */ - .p2align 4 -LABEL(ashr_12): - pslldq $4, D(%xmm2) - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) - psubb %xmm0, D(%xmm2) - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads */ - mov $12, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 12(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - - .p2align 4 -LABEL(loop_ashr_12_use): - add $16, %r10 - jg LABEL(nibble_ashr_12_use) - -LABEL(nibble_ashr_12_restart_use): - movdqa (%rdi, %rdx), %xmm0 - palignr $12, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_12_use) - - movdqa (%rdi, %rdx), %xmm0 - palignr $12, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_12_use) - - .p2align 4 -LABEL(nibble_ashr_12_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $12, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $3, %ecx - ja LABEL(nibble_ashr_12_restart_use) - - jmp LABEL(nibble_ashr_exit_use) - -/* - * The following cases will be handled by ashr_13 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(3~15) n - 3 12(15 +(n - 3) - n) ashr_13 - */ - .p2align 4 -LABEL(ashr_13): - pslldq $3, D(%xmm2) - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) - psubb %xmm0, D(%xmm2) - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads */ - mov $13, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 13(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - - .p2align 4 -LABEL(loop_ashr_13_use): - add $16, %r10 - jg LABEL(nibble_ashr_13_use) - -LABEL(nibble_ashr_13_restart_use): - movdqa (%rdi, %rdx), %xmm0 - palignr $13, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_13_use) - - movdqa (%rdi, %rdx), %xmm0 - palignr $13, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_13_use) - - .p2align 4 -LABEL(nibble_ashr_13_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $13, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $2, %ecx - ja LABEL(nibble_ashr_13_restart_use) - - jmp LABEL(nibble_ashr_exit_use) - -/* - * The following cases will be handled by ashr_14 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(2~15) n - 2 13(15 +(n - 2) - n) ashr_14 - */ - .p2align 4 -LABEL(ashr_14): - pslldq $2, D(%xmm2) - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) - psubb %xmm0, D(%xmm2) - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads */ - mov $14, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 14(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - - .p2align 4 -LABEL(loop_ashr_14_use): - add $16, %r10 - jg LABEL(nibble_ashr_14_use) - -LABEL(nibble_ashr_14_restart_use): - movdqa (%rdi, %rdx), %xmm0 - palignr $14, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_14_use) - - movdqa (%rdi, %rdx), %xmm0 - palignr $14, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_14_use) - - .p2align 4 -LABEL(nibble_ashr_14_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $14, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $1, %ecx - ja LABEL(nibble_ashr_14_restart_use) - - jmp LABEL(nibble_ashr_exit_use) - -/* - * The following cases will be handled by ashr_15 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(1~15) n - 1 14(15 +(n - 1) - n) ashr_15 - */ - .p2align 4 -LABEL(ashr_15): - pslldq $1, D(%xmm2) - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, D(%xmm2) - psubb %xmm0, D(%xmm2) - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - mov $16, %rcx /* index for loads */ - mov $15, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 15(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - - sub $0x1000, %r10 /* subtract 4K pagesize */ - - mov %rcx, %rdx /* only for offset of sse4 instruction loop*/ - - .p2align 4 -LABEL(loop_ashr_15_use): - add $16, %r10 - jg LABEL(nibble_ashr_15_use) - -LABEL(nibble_ashr_15_restart_use): - movdqa (%rdi, %rdx), %xmm0 - palignr $15, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rdx - add $16, %r10 - jg LABEL(nibble_ashr_15_use) - - movdqa (%rdi, %rdx), %xmm0 - palignr $15, -16(%rdi, %rdx), D(%xmm0) -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a, (%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - jbe LABEL(exit_use) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rdx - jmp LABEL(loop_ashr_15_use) - - .p2align 4 -LABEL(nibble_ashr_15_use): - sub $0x1000, %r10 - movdqa -16(%rdi, %rdx), %xmm0 - psrldq $15, D(%xmm0) - pcmpistri $0x3a,%xmm0, %xmm0 -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp %r11, %rcx - jae LABEL(nibble_ashr_exit_use) -#endif - cmp $0, %ecx - ja LABEL(nibble_ashr_15_restart_use) - -LABEL(nibble_ashr_exit_use): -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpistri $0x1a,(%rsi,%rdx), %xmm0 -#else - movdqa (%rsi,%rdx), %xmm1 - TOLOWER (%xmm0, %xmm1) - pcmpistri $0x1a, %xmm1, %xmm0 -#endif - .p2align 4 -LABEL(exit_use): - jnc LABEL(strcmp_exitz) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub %rcx, %r11 - jbe LABEL(strcmp_exitz) -#endif - add %rcx, %rdx - lea -16(%rdi, %r9), %rdi - movzbl (%rdi, %rdx), %eax - movzbl (%rsi, %rdx), %edx - test %r8d, %r8d - jz LABEL(ret_use) - xchg %eax, %edx -LABEL(ret_use): -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - leaq _nl_C_LC_CTYPE_tolower+128*4(%rip), %rcx - movl (%rcx,%rdx,4), %edx - movl (%rcx,%rax,4), %eax -#endif - - sub %edx, %eax - ret - -LABEL(less32bytes): - lea (%rdi, %rax), %rdi /* locate the exact address for first operand(rdi) */ - lea (%rsi, %rcx), %rsi /* locate the exact address for second operand(rsi) */ - test %r8d, %r8d - jz LABEL(ret) - xchg %rsi, %rdi /* recover original order according to flag(%r8d) */ - - .p2align 4 -LABEL(ret): -LABEL(less16bytes): - bsf %rdx, %rdx /* find and store bit index in %rdx */ - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub %rdx, %r11 - jbe LABEL(strcmp_exitz) -#endif - movzbl (%rsi, %rdx), %ecx - movzbl (%rdi, %rdx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - leaq _nl_C_LC_CTYPE_tolower+128*4(%rip), %rdx - movl (%rdx,%rcx,4), %ecx - movl (%rdx,%rax,4), %eax -#endif - - sub %ecx, %eax - ret - -LABEL(strcmp_exitz): - xor %eax, %eax - ret - - .p2align 4 - // XXX Same as code above -LABEL(Byte0): - movzx (%rsi), %ecx - movzx (%rdi), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - leaq _nl_C_LC_CTYPE_tolower+128*4(%rip), %rdx - movl (%rdx,%rcx,4), %ecx - movl (%rdx,%rax,4), %eax -#endif - - sub %ecx, %eax - ret - cfi_endproc - .size STRCMP_SSE42, .-STRCMP_SSE42 - -#undef UCLOW_reg -#undef UCHIGH_reg -#undef LCQWORD_reg -#undef TOLOWER - - /* Put all SSE 4.2 functions together. */ - .section .rodata.SECTION,"a",@progbits - .p2align 3 -LABEL(unaligned_table): - .int LABEL(ashr_1) - LABEL(unaligned_table) - .int LABEL(ashr_2) - LABEL(unaligned_table) - .int LABEL(ashr_3) - LABEL(unaligned_table) - .int LABEL(ashr_4) - LABEL(unaligned_table) - .int LABEL(ashr_5) - LABEL(unaligned_table) - .int LABEL(ashr_6) - LABEL(unaligned_table) - .int LABEL(ashr_7) - LABEL(unaligned_table) - .int LABEL(ashr_8) - LABEL(unaligned_table) - .int LABEL(ashr_9) - LABEL(unaligned_table) - .int LABEL(ashr_10) - LABEL(unaligned_table) - .int LABEL(ashr_11) - LABEL(unaligned_table) - .int LABEL(ashr_12) - LABEL(unaligned_table) - .int LABEL(ashr_13) - LABEL(unaligned_table) - .int LABEL(ashr_14) - LABEL(unaligned_table) - .int LABEL(ashr_15) - LABEL(unaligned_table) - .int LABEL(ashr_0) - LABEL(unaligned_table) - -#undef LABEL -#undef GLABEL -#undef SECTION -#undef movdqa -#undef movdqu -#undef pmovmskb -#undef pcmpistri -#undef psubb -#undef pcmpeqb -#undef psrldq -#undef pslldq -#undef palignr -#undef pxor -#undef D diff --git a/sysdeps/x86_64/multiarch/strcmp-ssse3.S b/sysdeps/x86_64/multiarch/strcmp-ssse3.S deleted file mode 100644 index 1b7fa33c91..0000000000 --- a/sysdeps/x86_64/multiarch/strcmp-ssse3.S +++ /dev/null @@ -1,5 +0,0 @@ -#if IS_IN (libc) -# define USE_SSSE3 1 -# define STRCMP __strcmp_ssse3 -# include "../strcmp.S" -#endif diff --git a/sysdeps/x86_64/multiarch/strcmp.S b/sysdeps/x86_64/multiarch/strcmp.S deleted file mode 100644 index 54f8f7dd44..0000000000 --- a/sysdeps/x86_64/multiarch/strcmp.S +++ /dev/null @@ -1,209 +0,0 @@ -/* Multiple versions of strcmp - Copyright (C) 2009-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#ifdef USE_AS_STRNCMP -/* Since the counter, %r11, is unsigned, we branch to strcmp_exitz - if the new counter > the old one or is 0. */ -# define UPDATE_STRNCMP_COUNTER \ - /* calculate left number to compare */ \ - lea -16(%rcx, %r11), %r9; \ - cmp %r9, %r11; \ - jb LABEL(strcmp_exitz); \ - test %r9, %r9; \ - je LABEL(strcmp_exitz); \ - mov %r9, %r11 - -# define STRCMP_SSE42 __strncmp_sse42 -# define STRCMP_SSSE3 __strncmp_ssse3 -# define STRCMP_SSE2 __strncmp_sse2 -# define __GI_STRCMP __GI_strncmp -#elif defined USE_AS_STRCASECMP_L -# include "locale-defines.h" - -# define UPDATE_STRNCMP_COUNTER - -# define STRCMP_AVX __strcasecmp_l_avx -# define STRCMP_SSE42 __strcasecmp_l_sse42 -# define STRCMP_SSSE3 __strcasecmp_l_ssse3 -# define STRCMP_SSE2 __strcasecmp_l_sse2 -# define __GI_STRCMP __GI___strcasecmp_l -#elif defined USE_AS_STRNCASECMP_L -# include "locale-defines.h" - -/* Since the counter, %r11, is unsigned, we branch to strcmp_exitz - if the new counter > the old one or is 0. */ -# define UPDATE_STRNCMP_COUNTER \ - /* calculate left number to compare */ \ - lea -16(%rcx, %r11), %r9; \ - cmp %r9, %r11; \ - jb LABEL(strcmp_exitz); \ - test %r9, %r9; \ - je LABEL(strcmp_exitz); \ - mov %r9, %r11 - -# define STRCMP_AVX __strncasecmp_l_avx -# define STRCMP_SSE42 __strncasecmp_l_sse42 -# define STRCMP_SSSE3 __strncasecmp_l_ssse3 -# define STRCMP_SSE2 __strncasecmp_l_sse2 -# define __GI_STRCMP __GI___strncasecmp_l -#else -# define USE_AS_STRCMP -# define UPDATE_STRNCMP_COUNTER -# ifndef STRCMP -# define STRCMP strcmp -# define STRCMP_SSE42 __strcmp_sse42 -# define STRCMP_SSSE3 __strcmp_ssse3 -# define STRCMP_SSE2 __strcmp_sse2 -# define __GI_STRCMP __GI_strcmp -# endif -#endif - -/* Define multiple versions only for the definition in libc. Don't - define multiple versions for strncmp in static library since we - need strncmp before the initialization happened. */ -#if (defined SHARED || !defined USE_AS_STRNCMP) && IS_IN (libc) - .text -ENTRY(STRCMP) - .type STRCMP, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX -#ifdef USE_AS_STRCMP - leaq __strcmp_sse2_unaligned(%rip), %rax - HAS_ARCH_FEATURE (Fast_Unaligned_Load) - jnz 3f -#else - HAS_ARCH_FEATURE (Slow_SSE4_2) - jnz 2f - leaq STRCMP_SSE42(%rip), %rax - HAS_CPU_FEATURE (SSE4_2) - jnz 3f -#endif -2: leaq STRCMP_SSSE3(%rip), %rax - HAS_CPU_FEATURE (SSSE3) - jnz 3f - leaq STRCMP_SSE2(%rip), %rax -3: ret -END(STRCMP) - -# ifdef USE_AS_STRCASECMP_L -ENTRY(__strcasecmp) - .type __strcasecmp, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq __strcasecmp_avx(%rip), %rax - HAS_ARCH_FEATURE (AVX_Usable) - jnz 3f - HAS_ARCH_FEATURE (Slow_SSE4_2) - jnz 2f - leaq __strcasecmp_sse42(%rip), %rax - HAS_CPU_FEATURE (SSE4_2) - jnz 3f -2: leaq __strcasecmp_ssse3(%rip), %rax - HAS_CPU_FEATURE (SSSE3) - jnz 3f - leaq __strcasecmp_sse2(%rip), %rax -3: ret -END(__strcasecmp) -weak_alias (__strcasecmp, strcasecmp) -# endif -# ifdef USE_AS_STRNCASECMP_L -ENTRY(__strncasecmp) - .type __strncasecmp, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq __strncasecmp_avx(%rip), %rax - HAS_ARCH_FEATURE (AVX_Usable) - jnz 3f - HAS_ARCH_FEATURE (Slow_SSE4_2) - jnz 2f - leaq __strncasecmp_sse42(%rip), %rax - HAS_CPU_FEATURE (SSE4_2) - jnz 3f -2: leaq __strncasecmp_ssse3(%rip), %rax - HAS_CPU_FEATURE (SSSE3) - jnz 3f - leaq __strncasecmp_sse2(%rip), %rax -3: ret -END(__strncasecmp) -weak_alias (__strncasecmp, strncasecmp) -# endif - -# undef LABEL -# define LABEL(l) .L##l##_sse42 -# define GLABEL(l) l##_sse42 -# define SECTION sse4.2 -# include "strcmp-sse42.S" - - -# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# define LABEL(l) .L##l##_avx -# define GLABEL(l) l##_avx -# define USE_AVX 1 -# undef STRCMP_SSE42 -# define STRCMP_SSE42 STRCMP_AVX -# define SECTION avx -# include "strcmp-sse42.S" -# endif - - -# undef ENTRY -# define ENTRY(name) \ - .type STRCMP_SSE2, @function; \ - .align 16; \ - .globl STRCMP_SSE2; \ - .hidden STRCMP_SSE2; \ - STRCMP_SSE2: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size STRCMP_SSE2, .-STRCMP_SSE2 - -# ifdef USE_AS_STRCASECMP_L -# define ENTRY2(name) \ - .type __strcasecmp_sse2, @function; \ - .align 16; \ - .globl __strcasecmp_sse2; \ - .hidden __strcasecmp_sse2; \ - __strcasecmp_sse2: cfi_startproc; \ - CALL_MCOUNT -# define END2(name) \ - cfi_endproc; .size __strcasecmp_sse2, .-__strcasecmp_sse2 -# endif - -# ifdef USE_AS_STRNCASECMP_L -# define ENTRY2(name) \ - .type __strncasecmp_sse2, @function; \ - .align 16; \ - .globl __strncasecmp_sse2; \ - .hidden __strncasecmp_sse2; \ - __strncasecmp_sse2: cfi_startproc; \ - CALL_MCOUNT -# define END2(name) \ - cfi_endproc; .size __strncasecmp_sse2, .-__strncasecmp_sse2 -# endif - -# undef libc_hidden_builtin_def -/* It doesn't make sense to send libc-internal strcmp calls through a PLT. - The speedup we get from using SSE4.2 instruction is likely eaten away - by the indirect call in the PLT. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_STRCMP; __GI_STRCMP = STRCMP_SSE2 -#endif - -#include "../strcmp.S" diff --git a/sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S b/sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S deleted file mode 100644 index 6a5ab7ab26..0000000000 --- a/sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S +++ /dev/null @@ -1,1889 +0,0 @@ -/* strcpy with SSE2 and unaligned load - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# ifndef USE_AS_STRCAT -# include - -# ifndef STRCPY -# define STRCPY __strcpy_sse2_unaligned -# endif - -# endif - -# define JMPTBL(I, B) I - B -# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ - lea TABLE(%rip), %r11; \ - movslq (%r11, INDEX, SCALE), %rcx; \ - lea (%r11, %rcx), %rcx; \ - jmp *%rcx - -# ifndef USE_AS_STRCAT - -.text -ENTRY (STRCPY) -# ifdef USE_AS_STRNCPY - mov %rdx, %r8 - test %r8, %r8 - jz L(ExitZero) -# endif - mov %rsi, %rcx -# ifndef USE_AS_STPCPY - mov %rdi, %rax /* save result */ -# endif - -# endif - - and $63, %rcx - cmp $32, %rcx - jbe L(SourceStringAlignmentLess32) - - and $-16, %rsi - and $15, %rcx - pxor %xmm0, %xmm0 - pxor %xmm1, %xmm1 - - pcmpeqb (%rsi), %xmm1 - pmovmskb %xmm1, %rdx - shr %cl, %rdx - -# ifdef USE_AS_STRNCPY -# if defined USE_AS_STPCPY || defined USE_AS_STRCAT - mov $16, %r10 - sub %rcx, %r10 - cmp %r10, %r8 -# else - mov $17, %r10 - sub %rcx, %r10 - cmp %r10, %r8 -# endif - jbe L(CopyFrom1To16BytesTailCase2OrCase3) -# endif - test %rdx, %rdx - jnz L(CopyFrom1To16BytesTail) - - pcmpeqb 16(%rsi), %xmm0 - pmovmskb %xmm0, %rdx - -# ifdef USE_AS_STRNCPY - add $16, %r10 - cmp %r10, %r8 - jbe L(CopyFrom1To32BytesCase2OrCase3) -# endif - test %rdx, %rdx - jnz L(CopyFrom1To32Bytes) - - movdqu (%rsi, %rcx), %xmm1 /* copy 16 bytes */ - movdqu %xmm1, (%rdi) - -/* If source address alignment != destination address alignment */ - .p2align 4 -L(Unalign16Both): - sub %rcx, %rdi -# ifdef USE_AS_STRNCPY - add %rcx, %r8 - sbb %rcx, %rcx - or %rcx, %r8 -# endif - mov $16, %rcx - movdqa (%rsi, %rcx), %xmm1 - movaps 16(%rsi, %rcx), %xmm2 - movdqu %xmm1, (%rdi, %rcx) - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rdx - add $16, %rcx -# ifdef USE_AS_STRNCPY - sub $48, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %rdx, %rdx -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - jnz L(CopyFrom1To16BytesUnalignedXmm2) -# else - jnz L(CopyFrom1To16Bytes) -# endif - - movaps 16(%rsi, %rcx), %xmm3 - movdqu %xmm2, (%rdi, %rcx) - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %rdx - add $16, %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %rdx, %rdx -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - jnz L(CopyFrom1To16BytesUnalignedXmm3) -# else - jnz L(CopyFrom1To16Bytes) -# endif - - movaps 16(%rsi, %rcx), %xmm4 - movdqu %xmm3, (%rdi, %rcx) - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm0, %rdx - add $16, %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %rdx, %rdx -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - jnz L(CopyFrom1To16BytesUnalignedXmm4) -# else - jnz L(CopyFrom1To16Bytes) -# endif - - movaps 16(%rsi, %rcx), %xmm1 - movdqu %xmm4, (%rdi, %rcx) - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %rdx - add $16, %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %rdx, %rdx -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - jnz L(CopyFrom1To16BytesUnalignedXmm1) -# else - jnz L(CopyFrom1To16Bytes) -# endif - - movaps 16(%rsi, %rcx), %xmm2 - movdqu %xmm1, (%rdi, %rcx) - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rdx - add $16, %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %rdx, %rdx -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - jnz L(CopyFrom1To16BytesUnalignedXmm2) -# else - jnz L(CopyFrom1To16Bytes) -# endif - - movaps 16(%rsi, %rcx), %xmm3 - movdqu %xmm2, (%rdi, %rcx) - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %rdx - add $16, %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %rdx, %rdx -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - jnz L(CopyFrom1To16BytesUnalignedXmm3) -# else - jnz L(CopyFrom1To16Bytes) -# endif - - movdqu %xmm3, (%rdi, %rcx) - mov %rsi, %rdx - lea 16(%rsi, %rcx), %rsi - and $-0x40, %rsi - sub %rsi, %rdx - sub %rdx, %rdi -# ifdef USE_AS_STRNCPY - lea 128(%r8, %rdx), %r8 -# endif -L(Unaligned64Loop): - movaps (%rsi), %xmm2 - movaps %xmm2, %xmm4 - movaps 16(%rsi), %xmm5 - movaps 32(%rsi), %xmm3 - movaps %xmm3, %xmm6 - movaps 48(%rsi), %xmm7 - pminub %xmm5, %xmm2 - pminub %xmm7, %xmm3 - pminub %xmm2, %xmm3 - pcmpeqb %xmm0, %xmm3 - pmovmskb %xmm3, %rdx -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(UnalignedLeaveCase2OrCase3) -# endif - test %rdx, %rdx - jnz L(Unaligned64Leave) - -L(Unaligned64Loop_start): - add $64, %rdi - add $64, %rsi - movdqu %xmm4, -64(%rdi) - movaps (%rsi), %xmm2 - movdqa %xmm2, %xmm4 - movdqu %xmm5, -48(%rdi) - movaps 16(%rsi), %xmm5 - pminub %xmm5, %xmm2 - movaps 32(%rsi), %xmm3 - movdqu %xmm6, -32(%rdi) - movaps %xmm3, %xmm6 - movdqu %xmm7, -16(%rdi) - movaps 48(%rsi), %xmm7 - pminub %xmm7, %xmm3 - pminub %xmm2, %xmm3 - pcmpeqb %xmm0, %xmm3 - pmovmskb %xmm3, %rdx -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(UnalignedLeaveCase2OrCase3) -# endif - test %rdx, %rdx - jz L(Unaligned64Loop_start) - -L(Unaligned64Leave): - pxor %xmm1, %xmm1 - - pcmpeqb %xmm4, %xmm0 - pcmpeqb %xmm5, %xmm1 - pmovmskb %xmm0, %rdx - pmovmskb %xmm1, %rcx - test %rdx, %rdx - jnz L(CopyFrom1To16BytesUnaligned_0) - test %rcx, %rcx - jnz L(CopyFrom1To16BytesUnaligned_16) - - pcmpeqb %xmm6, %xmm0 - pcmpeqb %xmm7, %xmm1 - pmovmskb %xmm0, %rdx - pmovmskb %xmm1, %rcx - test %rdx, %rdx - jnz L(CopyFrom1To16BytesUnaligned_32) - - bsf %rcx, %rdx - movdqu %xmm4, (%rdi) - movdqu %xmm5, 16(%rdi) - movdqu %xmm6, 32(%rdi) -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT -# ifdef USE_AS_STPCPY - lea 48(%rdi, %rdx), %rax -# endif - movdqu %xmm7, 48(%rdi) - add $15, %r8 - sub %rdx, %r8 - lea 49(%rdi, %rdx), %rdi - jmp L(StrncpyFillTailWithZero) -# else - add $48, %rsi - add $48, %rdi - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %rdx, 4) -# endif - -/* If source address alignment == destination address alignment */ - -L(SourceStringAlignmentLess32): - pxor %xmm0, %xmm0 - movdqu (%rsi), %xmm1 - movdqu 16(%rsi), %xmm2 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %rdx - -# ifdef USE_AS_STRNCPY -# if defined USE_AS_STPCPY || defined USE_AS_STRCAT - cmp $16, %r8 -# else - cmp $17, %r8 -# endif - jbe L(CopyFrom1To16BytesTail1Case2OrCase3) -# endif - test %rdx, %rdx - jnz L(CopyFrom1To16BytesTail1) - - pcmpeqb %xmm2, %xmm0 - movdqu %xmm1, (%rdi) - pmovmskb %xmm0, %rdx - -# ifdef USE_AS_STRNCPY -# if defined USE_AS_STPCPY || defined USE_AS_STRCAT - cmp $32, %r8 -# else - cmp $33, %r8 -# endif - jbe L(CopyFrom1To32Bytes1Case2OrCase3) -# endif - test %rdx, %rdx - jnz L(CopyFrom1To32Bytes1) - - and $-16, %rsi - and $15, %rcx - jmp L(Unalign16Both) - -/*------End of main part with loops---------------------*/ - -/* Case1 */ - -# if (!defined USE_AS_STRNCPY) || (defined USE_AS_STRCAT) - .p2align 4 -L(CopyFrom1To16Bytes): - add %rcx, %rdi - add %rcx, %rsi - bsf %rdx, %rdx - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %rdx, 4) -# endif - .p2align 4 -L(CopyFrom1To16BytesTail): - add %rcx, %rsi - bsf %rdx, %rdx - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %rdx, 4) - - .p2align 4 -L(CopyFrom1To32Bytes1): - add $16, %rsi - add $16, %rdi -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $16, %r8 -# endif -L(CopyFrom1To16BytesTail1): - bsf %rdx, %rdx - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %rdx, 4) - - .p2align 4 -L(CopyFrom1To32Bytes): - bsf %rdx, %rdx - add %rcx, %rsi - add $16, %rdx - sub %rcx, %rdx - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %rdx, 4) - - .p2align 4 -L(CopyFrom1To16BytesUnaligned_0): - bsf %rdx, %rdx -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT -# ifdef USE_AS_STPCPY - lea (%rdi, %rdx), %rax -# endif - movdqu %xmm4, (%rdi) - add $63, %r8 - sub %rdx, %r8 - lea 1(%rdi, %rdx), %rdi - jmp L(StrncpyFillTailWithZero) -# else - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %rdx, 4) -# endif - - .p2align 4 -L(CopyFrom1To16BytesUnaligned_16): - bsf %rcx, %rdx - movdqu %xmm4, (%rdi) -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT -# ifdef USE_AS_STPCPY - lea 16(%rdi, %rdx), %rax -# endif - movdqu %xmm5, 16(%rdi) - add $47, %r8 - sub %rdx, %r8 - lea 17(%rdi, %rdx), %rdi - jmp L(StrncpyFillTailWithZero) -# else - add $16, %rsi - add $16, %rdi - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %rdx, 4) -# endif - - .p2align 4 -L(CopyFrom1To16BytesUnaligned_32): - bsf %rdx, %rdx - movdqu %xmm4, (%rdi) - movdqu %xmm5, 16(%rdi) -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT -# ifdef USE_AS_STPCPY - lea 32(%rdi, %rdx), %rax -# endif - movdqu %xmm6, 32(%rdi) - add $31, %r8 - sub %rdx, %r8 - lea 33(%rdi, %rdx), %rdi - jmp L(StrncpyFillTailWithZero) -# else - add $32, %rsi - add $32, %rdi - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %rdx, 4) -# endif - -# ifdef USE_AS_STRNCPY -# ifndef USE_AS_STRCAT - .p2align 4 -L(CopyFrom1To16BytesUnalignedXmm6): - movdqu %xmm6, (%rdi, %rcx) - jmp L(CopyFrom1To16BytesXmmExit) - - .p2align 4 -L(CopyFrom1To16BytesUnalignedXmm5): - movdqu %xmm5, (%rdi, %rcx) - jmp L(CopyFrom1To16BytesXmmExit) - - .p2align 4 -L(CopyFrom1To16BytesUnalignedXmm4): - movdqu %xmm4, (%rdi, %rcx) - jmp L(CopyFrom1To16BytesXmmExit) - - .p2align 4 -L(CopyFrom1To16BytesUnalignedXmm3): - movdqu %xmm3, (%rdi, %rcx) - jmp L(CopyFrom1To16BytesXmmExit) - - .p2align 4 -L(CopyFrom1To16BytesUnalignedXmm1): - movdqu %xmm1, (%rdi, %rcx) - jmp L(CopyFrom1To16BytesXmmExit) -# endif - - .p2align 4 -L(CopyFrom1To16BytesExit): - BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %rdx, 4) - -/* Case2 */ - - .p2align 4 -L(CopyFrom1To16BytesCase2): - add $16, %r8 - add %rcx, %rdi - add %rcx, %rsi - bsf %rdx, %rdx - cmp %r8, %rdx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %r8, 4) - - .p2align 4 -L(CopyFrom1To32BytesCase2): - add %rcx, %rsi - bsf %rdx, %rdx - add $16, %rdx - sub %rcx, %rdx - cmp %r8, %rdx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %r8, 4) - -L(CopyFrom1To16BytesTailCase2): - add %rcx, %rsi - bsf %rdx, %rdx - cmp %r8, %rdx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %r8, 4) - -L(CopyFrom1To16BytesTail1Case2): - bsf %rdx, %rdx - cmp %r8, %rdx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %r8, 4) - -/* Case2 or Case3, Case3 */ - - .p2align 4 -L(CopyFrom1To16BytesCase2OrCase3): - test %rdx, %rdx - jnz L(CopyFrom1To16BytesCase2) -L(CopyFrom1To16BytesCase3): - add $16, %r8 - add %rcx, %rdi - add %rcx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %r8, 4) - - .p2align 4 -L(CopyFrom1To32BytesCase2OrCase3): - test %rdx, %rdx - jnz L(CopyFrom1To32BytesCase2) - add %rcx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %r8, 4) - - .p2align 4 -L(CopyFrom1To16BytesTailCase2OrCase3): - test %rdx, %rdx - jnz L(CopyFrom1To16BytesTailCase2) - add %rcx, %rsi - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %r8, 4) - - .p2align 4 -L(CopyFrom1To32Bytes1Case2OrCase3): - add $16, %rdi - add $16, %rsi - sub $16, %r8 -L(CopyFrom1To16BytesTail1Case2OrCase3): - test %rdx, %rdx - jnz L(CopyFrom1To16BytesTail1Case2) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %r8, 4) - -# endif - -/*------------End labels regarding with copying 1-16 bytes--and 1-32 bytes----*/ - - .p2align 4 -L(Exit1): - mov %dh, (%rdi) -# ifdef USE_AS_STPCPY - lea (%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $1, %r8 - lea 1(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit2): - mov (%rsi), %dx - mov %dx, (%rdi) -# ifdef USE_AS_STPCPY - lea 1(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $2, %r8 - lea 2(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit3): - mov (%rsi), %cx - mov %cx, (%rdi) - mov %dh, 2(%rdi) -# ifdef USE_AS_STPCPY - lea 2(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $3, %r8 - lea 3(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit4): - mov (%rsi), %edx - mov %edx, (%rdi) -# ifdef USE_AS_STPCPY - lea 3(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $4, %r8 - lea 4(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit5): - mov (%rsi), %ecx - mov %dh, 4(%rdi) - mov %ecx, (%rdi) -# ifdef USE_AS_STPCPY - lea 4(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $5, %r8 - lea 5(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit6): - mov (%rsi), %ecx - mov 4(%rsi), %dx - mov %ecx, (%rdi) - mov %dx, 4(%rdi) -# ifdef USE_AS_STPCPY - lea 5(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $6, %r8 - lea 6(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit7): - mov (%rsi), %ecx - mov 3(%rsi), %edx - mov %ecx, (%rdi) - mov %edx, 3(%rdi) -# ifdef USE_AS_STPCPY - lea 6(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $7, %r8 - lea 7(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit8): - mov (%rsi), %rdx - mov %rdx, (%rdi) -# ifdef USE_AS_STPCPY - lea 7(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $8, %r8 - lea 8(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit9): - mov (%rsi), %rcx - mov %dh, 8(%rdi) - mov %rcx, (%rdi) -# ifdef USE_AS_STPCPY - lea 8(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $9, %r8 - lea 9(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit10): - mov (%rsi), %rcx - mov 8(%rsi), %dx - mov %rcx, (%rdi) - mov %dx, 8(%rdi) -# ifdef USE_AS_STPCPY - lea 9(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $10, %r8 - lea 10(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit11): - mov (%rsi), %rcx - mov 7(%rsi), %edx - mov %rcx, (%rdi) - mov %edx, 7(%rdi) -# ifdef USE_AS_STPCPY - lea 10(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $11, %r8 - lea 11(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit12): - mov (%rsi), %rcx - mov 8(%rsi), %edx - mov %rcx, (%rdi) - mov %edx, 8(%rdi) -# ifdef USE_AS_STPCPY - lea 11(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $12, %r8 - lea 12(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit13): - mov (%rsi), %rcx - mov 5(%rsi), %rdx - mov %rcx, (%rdi) - mov %rdx, 5(%rdi) -# ifdef USE_AS_STPCPY - lea 12(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $13, %r8 - lea 13(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit14): - mov (%rsi), %rcx - mov 6(%rsi), %rdx - mov %rcx, (%rdi) - mov %rdx, 6(%rdi) -# ifdef USE_AS_STPCPY - lea 13(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $14, %r8 - lea 14(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit15): - mov (%rsi), %rcx - mov 7(%rsi), %rdx - mov %rcx, (%rdi) - mov %rdx, 7(%rdi) -# ifdef USE_AS_STPCPY - lea 14(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $15, %r8 - lea 15(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit16): - movdqu (%rsi), %xmm0 - movdqu %xmm0, (%rdi) -# ifdef USE_AS_STPCPY - lea 15(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $16, %r8 - lea 16(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit17): - movdqu (%rsi), %xmm0 - movdqu %xmm0, (%rdi) - mov %dh, 16(%rdi) -# ifdef USE_AS_STPCPY - lea 16(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $17, %r8 - lea 17(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit18): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %cx - movdqu %xmm0, (%rdi) - mov %cx, 16(%rdi) -# ifdef USE_AS_STPCPY - lea 17(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $18, %r8 - lea 18(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit19): - movdqu (%rsi), %xmm0 - mov 15(%rsi), %ecx - movdqu %xmm0, (%rdi) - mov %ecx, 15(%rdi) -# ifdef USE_AS_STPCPY - lea 18(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $19, %r8 - lea 19(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit20): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %ecx - movdqu %xmm0, (%rdi) - mov %ecx, 16(%rdi) -# ifdef USE_AS_STPCPY - lea 19(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $20, %r8 - lea 20(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit21): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %ecx - movdqu %xmm0, (%rdi) - mov %ecx, 16(%rdi) - mov %dh, 20(%rdi) -# ifdef USE_AS_STPCPY - lea 20(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $21, %r8 - lea 21(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit22): - movdqu (%rsi), %xmm0 - mov 14(%rsi), %rcx - movdqu %xmm0, (%rdi) - mov %rcx, 14(%rdi) -# ifdef USE_AS_STPCPY - lea 21(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $22, %r8 - lea 22(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit23): - movdqu (%rsi), %xmm0 - mov 15(%rsi), %rcx - movdqu %xmm0, (%rdi) - mov %rcx, 15(%rdi) -# ifdef USE_AS_STPCPY - lea 22(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $23, %r8 - lea 23(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit24): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %rcx - movdqu %xmm0, (%rdi) - mov %rcx, 16(%rdi) -# ifdef USE_AS_STPCPY - lea 23(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $24, %r8 - lea 24(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit25): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %rcx - movdqu %xmm0, (%rdi) - mov %rcx, 16(%rdi) - mov %dh, 24(%rdi) -# ifdef USE_AS_STPCPY - lea 24(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $25, %r8 - lea 25(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit26): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %rdx - mov 24(%rsi), %cx - movdqu %xmm0, (%rdi) - mov %rdx, 16(%rdi) - mov %cx, 24(%rdi) -# ifdef USE_AS_STPCPY - lea 25(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $26, %r8 - lea 26(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit27): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %rdx - mov 23(%rsi), %ecx - movdqu %xmm0, (%rdi) - mov %rdx, 16(%rdi) - mov %ecx, 23(%rdi) -# ifdef USE_AS_STPCPY - lea 26(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $27, %r8 - lea 27(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit28): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %rdx - mov 24(%rsi), %ecx - movdqu %xmm0, (%rdi) - mov %rdx, 16(%rdi) - mov %ecx, 24(%rdi) -# ifdef USE_AS_STPCPY - lea 27(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $28, %r8 - lea 28(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit29): - movdqu (%rsi), %xmm0 - movdqu 13(%rsi), %xmm2 - movdqu %xmm0, (%rdi) - movdqu %xmm2, 13(%rdi) -# ifdef USE_AS_STPCPY - lea 28(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $29, %r8 - lea 29(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit30): - movdqu (%rsi), %xmm0 - movdqu 14(%rsi), %xmm2 - movdqu %xmm0, (%rdi) - movdqu %xmm2, 14(%rdi) -# ifdef USE_AS_STPCPY - lea 29(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $30, %r8 - lea 30(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit31): - movdqu (%rsi), %xmm0 - movdqu 15(%rsi), %xmm2 - movdqu %xmm0, (%rdi) - movdqu %xmm2, 15(%rdi) -# ifdef USE_AS_STPCPY - lea 30(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $31, %r8 - lea 31(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - - .p2align 4 -L(Exit32): - movdqu (%rsi), %xmm0 - movdqu 16(%rsi), %xmm2 - movdqu %xmm0, (%rdi) - movdqu %xmm2, 16(%rdi) -# ifdef USE_AS_STPCPY - lea 31(%rdi), %rax -# endif -# if defined USE_AS_STRNCPY && !defined USE_AS_STRCAT - sub $32, %r8 - lea 32(%rdi), %rdi - jnz L(StrncpyFillTailWithZero) -# endif - ret - -# ifdef USE_AS_STRNCPY - - .p2align 4 -L(StrncpyExit0): -# ifdef USE_AS_STPCPY - mov %rdi, %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, (%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit1): - mov (%rsi), %dl - mov %dl, (%rdi) -# ifdef USE_AS_STPCPY - lea 1(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 1(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit2): - mov (%rsi), %dx - mov %dx, (%rdi) -# ifdef USE_AS_STPCPY - lea 2(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 2(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit3): - mov (%rsi), %cx - mov 2(%rsi), %dl - mov %cx, (%rdi) - mov %dl, 2(%rdi) -# ifdef USE_AS_STPCPY - lea 3(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 3(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit4): - mov (%rsi), %edx - mov %edx, (%rdi) -# ifdef USE_AS_STPCPY - lea 4(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 4(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit5): - mov (%rsi), %ecx - mov 4(%rsi), %dl - mov %ecx, (%rdi) - mov %dl, 4(%rdi) -# ifdef USE_AS_STPCPY - lea 5(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 5(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit6): - mov (%rsi), %ecx - mov 4(%rsi), %dx - mov %ecx, (%rdi) - mov %dx, 4(%rdi) -# ifdef USE_AS_STPCPY - lea 6(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 6(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit7): - mov (%rsi), %ecx - mov 3(%rsi), %edx - mov %ecx, (%rdi) - mov %edx, 3(%rdi) -# ifdef USE_AS_STPCPY - lea 7(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 7(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit8): - mov (%rsi), %rdx - mov %rdx, (%rdi) -# ifdef USE_AS_STPCPY - lea 8(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 8(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit9): - mov (%rsi), %rcx - mov 8(%rsi), %dl - mov %rcx, (%rdi) - mov %dl, 8(%rdi) -# ifdef USE_AS_STPCPY - lea 9(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 9(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit10): - mov (%rsi), %rcx - mov 8(%rsi), %dx - mov %rcx, (%rdi) - mov %dx, 8(%rdi) -# ifdef USE_AS_STPCPY - lea 10(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 10(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit11): - mov (%rsi), %rcx - mov 7(%rsi), %edx - mov %rcx, (%rdi) - mov %edx, 7(%rdi) -# ifdef USE_AS_STPCPY - lea 11(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 11(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit12): - mov (%rsi), %rcx - mov 8(%rsi), %edx - mov %rcx, (%rdi) - mov %edx, 8(%rdi) -# ifdef USE_AS_STPCPY - lea 12(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 12(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit13): - mov (%rsi), %rcx - mov 5(%rsi), %rdx - mov %rcx, (%rdi) - mov %rdx, 5(%rdi) -# ifdef USE_AS_STPCPY - lea 13(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 13(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit14): - mov (%rsi), %rcx - mov 6(%rsi), %rdx - mov %rcx, (%rdi) - mov %rdx, 6(%rdi) -# ifdef USE_AS_STPCPY - lea 14(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 14(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit15): - mov (%rsi), %rcx - mov 7(%rsi), %rdx - mov %rcx, (%rdi) - mov %rdx, 7(%rdi) -# ifdef USE_AS_STPCPY - lea 15(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 15(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit16): - movdqu (%rsi), %xmm0 - movdqu %xmm0, (%rdi) -# ifdef USE_AS_STPCPY - lea 16(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 16(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit17): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %cl - movdqu %xmm0, (%rdi) - mov %cl, 16(%rdi) -# ifdef USE_AS_STPCPY - lea 17(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 17(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit18): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %cx - movdqu %xmm0, (%rdi) - mov %cx, 16(%rdi) -# ifdef USE_AS_STPCPY - lea 18(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 18(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit19): - movdqu (%rsi), %xmm0 - mov 15(%rsi), %ecx - movdqu %xmm0, (%rdi) - mov %ecx, 15(%rdi) -# ifdef USE_AS_STPCPY - lea 19(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 19(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit20): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %ecx - movdqu %xmm0, (%rdi) - mov %ecx, 16(%rdi) -# ifdef USE_AS_STPCPY - lea 20(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 20(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit21): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %ecx - mov 20(%rsi), %dl - movdqu %xmm0, (%rdi) - mov %ecx, 16(%rdi) - mov %dl, 20(%rdi) -# ifdef USE_AS_STPCPY - lea 21(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 21(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit22): - movdqu (%rsi), %xmm0 - mov 14(%rsi), %rcx - movdqu %xmm0, (%rdi) - mov %rcx, 14(%rdi) -# ifdef USE_AS_STPCPY - lea 22(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 22(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit23): - movdqu (%rsi), %xmm0 - mov 15(%rsi), %rcx - movdqu %xmm0, (%rdi) - mov %rcx, 15(%rdi) -# ifdef USE_AS_STPCPY - lea 23(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 23(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit24): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %rcx - movdqu %xmm0, (%rdi) - mov %rcx, 16(%rdi) -# ifdef USE_AS_STPCPY - lea 24(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 24(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit25): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %rdx - mov 24(%rsi), %cl - movdqu %xmm0, (%rdi) - mov %rdx, 16(%rdi) - mov %cl, 24(%rdi) -# ifdef USE_AS_STPCPY - lea 25(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 25(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit26): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %rdx - mov 24(%rsi), %cx - movdqu %xmm0, (%rdi) - mov %rdx, 16(%rdi) - mov %cx, 24(%rdi) -# ifdef USE_AS_STPCPY - lea 26(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 26(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit27): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %rdx - mov 23(%rsi), %ecx - movdqu %xmm0, (%rdi) - mov %rdx, 16(%rdi) - mov %ecx, 23(%rdi) -# ifdef USE_AS_STPCPY - lea 27(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 27(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit28): - movdqu (%rsi), %xmm0 - mov 16(%rsi), %rdx - mov 24(%rsi), %ecx - movdqu %xmm0, (%rdi) - mov %rdx, 16(%rdi) - mov %ecx, 24(%rdi) -# ifdef USE_AS_STPCPY - lea 28(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 28(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit29): - movdqu (%rsi), %xmm0 - movdqu 13(%rsi), %xmm2 - movdqu %xmm0, (%rdi) - movdqu %xmm2, 13(%rdi) -# ifdef USE_AS_STPCPY - lea 29(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 29(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit30): - movdqu (%rsi), %xmm0 - movdqu 14(%rsi), %xmm2 - movdqu %xmm0, (%rdi) - movdqu %xmm2, 14(%rdi) -# ifdef USE_AS_STPCPY - lea 30(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 30(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit31): - movdqu (%rsi), %xmm0 - movdqu 15(%rsi), %xmm2 - movdqu %xmm0, (%rdi) - movdqu %xmm2, 15(%rdi) -# ifdef USE_AS_STPCPY - lea 31(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 31(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit32): - movdqu (%rsi), %xmm0 - movdqu 16(%rsi), %xmm2 - movdqu %xmm0, (%rdi) - movdqu %xmm2, 16(%rdi) -# ifdef USE_AS_STPCPY - lea 32(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 32(%rdi) -# endif - ret - - .p2align 4 -L(StrncpyExit33): - movdqu (%rsi), %xmm0 - movdqu 16(%rsi), %xmm2 - mov 32(%rsi), %cl - movdqu %xmm0, (%rdi) - movdqu %xmm2, 16(%rdi) - mov %cl, 32(%rdi) -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 33(%rdi) -# endif - ret - -# ifndef USE_AS_STRCAT - - .p2align 4 -L(Fill0): - ret - - .p2align 4 -L(Fill1): - mov %dl, (%rdi) - ret - - .p2align 4 -L(Fill2): - mov %dx, (%rdi) - ret - - .p2align 4 -L(Fill3): - mov %edx, -1(%rdi) - ret - - .p2align 4 -L(Fill4): - mov %edx, (%rdi) - ret - - .p2align 4 -L(Fill5): - mov %edx, (%rdi) - mov %dl, 4(%rdi) - ret - - .p2align 4 -L(Fill6): - mov %edx, (%rdi) - mov %dx, 4(%rdi) - ret - - .p2align 4 -L(Fill7): - mov %rdx, -1(%rdi) - ret - - .p2align 4 -L(Fill8): - mov %rdx, (%rdi) - ret - - .p2align 4 -L(Fill9): - mov %rdx, (%rdi) - mov %dl, 8(%rdi) - ret - - .p2align 4 -L(Fill10): - mov %rdx, (%rdi) - mov %dx, 8(%rdi) - ret - - .p2align 4 -L(Fill11): - mov %rdx, (%rdi) - mov %edx, 7(%rdi) - ret - - .p2align 4 -L(Fill12): - mov %rdx, (%rdi) - mov %edx, 8(%rdi) - ret - - .p2align 4 -L(Fill13): - mov %rdx, (%rdi) - mov %rdx, 5(%rdi) - ret - - .p2align 4 -L(Fill14): - mov %rdx, (%rdi) - mov %rdx, 6(%rdi) - ret - - .p2align 4 -L(Fill15): - movdqu %xmm0, -1(%rdi) - ret - - .p2align 4 -L(Fill16): - movdqu %xmm0, (%rdi) - ret - - .p2align 4 -L(CopyFrom1To16BytesUnalignedXmm2): - movdqu %xmm2, (%rdi, %rcx) - - .p2align 4 -L(CopyFrom1To16BytesXmmExit): - bsf %rdx, %rdx - add $15, %r8 - add %rcx, %rdi -# ifdef USE_AS_STPCPY - lea (%rdi, %rdx), %rax -# endif - sub %rdx, %r8 - lea 1(%rdi, %rdx), %rdi - - .p2align 4 -L(StrncpyFillTailWithZero): - pxor %xmm0, %xmm0 - xor %rdx, %rdx - sub $16, %r8 - jbe L(StrncpyFillExit) - - movdqu %xmm0, (%rdi) - add $16, %rdi - - mov %rdi, %rsi - and $0xf, %rsi - sub %rsi, %rdi - add %rsi, %r8 - sub $64, %r8 - jb L(StrncpyFillLess64) - -L(StrncpyFillLoopMovdqa): - movdqa %xmm0, (%rdi) - movdqa %xmm0, 16(%rdi) - movdqa %xmm0, 32(%rdi) - movdqa %xmm0, 48(%rdi) - add $64, %rdi - sub $64, %r8 - jae L(StrncpyFillLoopMovdqa) - -L(StrncpyFillLess64): - add $32, %r8 - jl L(StrncpyFillLess32) - movdqa %xmm0, (%rdi) - movdqa %xmm0, 16(%rdi) - add $32, %rdi - sub $16, %r8 - jl L(StrncpyFillExit) - movdqa %xmm0, (%rdi) - add $16, %rdi - BRANCH_TO_JMPTBL_ENTRY (L(FillTable), %r8, 4) - -L(StrncpyFillLess32): - add $16, %r8 - jl L(StrncpyFillExit) - movdqa %xmm0, (%rdi) - add $16, %rdi - BRANCH_TO_JMPTBL_ENTRY (L(FillTable), %r8, 4) - -L(StrncpyFillExit): - add $16, %r8 - BRANCH_TO_JMPTBL_ENTRY (L(FillTable), %r8, 4) - -/* end of ifndef USE_AS_STRCAT */ -# endif - - .p2align 4 -L(UnalignedLeaveCase2OrCase3): - test %rdx, %rdx - jnz L(Unaligned64LeaveCase2) -L(Unaligned64LeaveCase3): - lea 64(%r8), %rcx - and $-16, %rcx - add $48, %r8 - jl L(CopyFrom1To16BytesCase3) - movdqu %xmm4, (%rdi) - sub $16, %r8 - jb L(CopyFrom1To16BytesCase3) - movdqu %xmm5, 16(%rdi) - sub $16, %r8 - jb L(CopyFrom1To16BytesCase3) - movdqu %xmm6, 32(%rdi) - sub $16, %r8 - jb L(CopyFrom1To16BytesCase3) - movdqu %xmm7, 48(%rdi) -# ifdef USE_AS_STPCPY - lea 64(%rdi), %rax -# endif -# ifdef USE_AS_STRCAT - xor %ch, %ch - movb %ch, 64(%rdi) -# endif - ret - - .p2align 4 -L(Unaligned64LeaveCase2): - xor %rcx, %rcx - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm0, %rdx - add $48, %r8 - jle L(CopyFrom1To16BytesCase2OrCase3) - test %rdx, %rdx -# ifndef USE_AS_STRCAT - jnz L(CopyFrom1To16BytesUnalignedXmm4) -# else - jnz L(CopyFrom1To16Bytes) -# endif - pcmpeqb %xmm5, %xmm0 - pmovmskb %xmm0, %rdx - movdqu %xmm4, (%rdi) - add $16, %rcx - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %rdx, %rdx -# ifndef USE_AS_STRCAT - jnz L(CopyFrom1To16BytesUnalignedXmm5) -# else - jnz L(CopyFrom1To16Bytes) -# endif - - pcmpeqb %xmm6, %xmm0 - pmovmskb %xmm0, %rdx - movdqu %xmm5, 16(%rdi) - add $16, %rcx - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %rdx, %rdx -# ifndef USE_AS_STRCAT - jnz L(CopyFrom1To16BytesUnalignedXmm6) -# else - jnz L(CopyFrom1To16Bytes) -# endif - - pcmpeqb %xmm7, %xmm0 - pmovmskb %xmm0, %rdx - movdqu %xmm6, 32(%rdi) - lea 16(%rdi, %rcx), %rdi - lea 16(%rsi, %rcx), %rsi - bsf %rdx, %rdx - cmp %r8, %rdx - jb L(CopyFrom1To16BytesExit) - BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %r8, 4) - - .p2align 4 -L(ExitZero): -# ifndef USE_AS_STRCAT - mov %rdi, %rax -# endif - ret - -# endif - -# ifndef USE_AS_STRCAT -END (STRCPY) -# else -END (STRCAT) -# endif - .p2align 4 - .section .rodata -L(ExitTable): - .int JMPTBL(L(Exit1), L(ExitTable)) - .int JMPTBL(L(Exit2), L(ExitTable)) - .int JMPTBL(L(Exit3), L(ExitTable)) - .int JMPTBL(L(Exit4), L(ExitTable)) - .int JMPTBL(L(Exit5), L(ExitTable)) - .int JMPTBL(L(Exit6), L(ExitTable)) - .int JMPTBL(L(Exit7), L(ExitTable)) - .int JMPTBL(L(Exit8), L(ExitTable)) - .int JMPTBL(L(Exit9), L(ExitTable)) - .int JMPTBL(L(Exit10), L(ExitTable)) - .int JMPTBL(L(Exit11), L(ExitTable)) - .int JMPTBL(L(Exit12), L(ExitTable)) - .int JMPTBL(L(Exit13), L(ExitTable)) - .int JMPTBL(L(Exit14), L(ExitTable)) - .int JMPTBL(L(Exit15), L(ExitTable)) - .int JMPTBL(L(Exit16), L(ExitTable)) - .int JMPTBL(L(Exit17), L(ExitTable)) - .int JMPTBL(L(Exit18), L(ExitTable)) - .int JMPTBL(L(Exit19), L(ExitTable)) - .int JMPTBL(L(Exit20), L(ExitTable)) - .int JMPTBL(L(Exit21), L(ExitTable)) - .int JMPTBL(L(Exit22), L(ExitTable)) - .int JMPTBL(L(Exit23), L(ExitTable)) - .int JMPTBL(L(Exit24), L(ExitTable)) - .int JMPTBL(L(Exit25), L(ExitTable)) - .int JMPTBL(L(Exit26), L(ExitTable)) - .int JMPTBL(L(Exit27), L(ExitTable)) - .int JMPTBL(L(Exit28), L(ExitTable)) - .int JMPTBL(L(Exit29), L(ExitTable)) - .int JMPTBL(L(Exit30), L(ExitTable)) - .int JMPTBL(L(Exit31), L(ExitTable)) - .int JMPTBL(L(Exit32), L(ExitTable)) -# ifdef USE_AS_STRNCPY -L(ExitStrncpyTable): - .int JMPTBL(L(StrncpyExit0), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit1), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit2), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit3), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit4), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit5), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit6), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit7), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit8), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit9), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit10), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit11), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit12), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit13), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit14), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit15), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit16), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit17), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit18), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit19), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit20), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit21), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit22), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit23), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit24), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit25), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit26), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit27), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit28), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit29), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit30), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit31), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit32), L(ExitStrncpyTable)) - .int JMPTBL(L(StrncpyExit33), L(ExitStrncpyTable)) -# ifndef USE_AS_STRCAT - .p2align 4 -L(FillTable): - .int JMPTBL(L(Fill0), L(FillTable)) - .int JMPTBL(L(Fill1), L(FillTable)) - .int JMPTBL(L(Fill2), L(FillTable)) - .int JMPTBL(L(Fill3), L(FillTable)) - .int JMPTBL(L(Fill4), L(FillTable)) - .int JMPTBL(L(Fill5), L(FillTable)) - .int JMPTBL(L(Fill6), L(FillTable)) - .int JMPTBL(L(Fill7), L(FillTable)) - .int JMPTBL(L(Fill8), L(FillTable)) - .int JMPTBL(L(Fill9), L(FillTable)) - .int JMPTBL(L(Fill10), L(FillTable)) - .int JMPTBL(L(Fill11), L(FillTable)) - .int JMPTBL(L(Fill12), L(FillTable)) - .int JMPTBL(L(Fill13), L(FillTable)) - .int JMPTBL(L(Fill14), L(FillTable)) - .int JMPTBL(L(Fill15), L(FillTable)) - .int JMPTBL(L(Fill16), L(FillTable)) -# endif -# endif -#endif diff --git a/sysdeps/x86_64/multiarch/strcpy-ssse3.S b/sysdeps/x86_64/multiarch/strcpy-ssse3.S deleted file mode 100644 index 47aaeae671..0000000000 --- a/sysdeps/x86_64/multiarch/strcpy-ssse3.S +++ /dev/null @@ -1,3551 +0,0 @@ -/* strcpy with SSSE3 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) - -# ifndef USE_AS_STRCAT -# include - -# ifndef STRCPY -# define STRCPY __strcpy_ssse3 -# endif - - .section .text.ssse3,"ax",@progbits -ENTRY (STRCPY) - - mov %rsi, %rcx -# ifdef USE_AS_STRNCPY - mov %rdx, %r8 -# endif - mov %rdi, %rdx -# ifdef USE_AS_STRNCPY - test %r8, %r8 - jz L(Exit0) - cmp $8, %r8 - jbe L(StrncpyExit8Bytes) -# endif - cmpb $0, (%rcx) - jz L(Exit1) - cmpb $0, 1(%rcx) - jz L(Exit2) - cmpb $0, 2(%rcx) - jz L(Exit3) - cmpb $0, 3(%rcx) - jz L(Exit4) - cmpb $0, 4(%rcx) - jz L(Exit5) - cmpb $0, 5(%rcx) - jz L(Exit6) - cmpb $0, 6(%rcx) - jz L(Exit7) - cmpb $0, 7(%rcx) - jz L(Exit8) -# ifdef USE_AS_STRNCPY - cmp $16, %r8 - jb L(StrncpyExit15Bytes) -# endif - cmpb $0, 8(%rcx) - jz L(Exit9) - cmpb $0, 9(%rcx) - jz L(Exit10) - cmpb $0, 10(%rcx) - jz L(Exit11) - cmpb $0, 11(%rcx) - jz L(Exit12) - cmpb $0, 12(%rcx) - jz L(Exit13) - cmpb $0, 13(%rcx) - jz L(Exit14) - cmpb $0, 14(%rcx) - jz L(Exit15) -# ifdef USE_AS_STRNCPY - cmp $16, %r8 - je L(Exit16) -# endif - cmpb $0, 15(%rcx) - jz L(Exit16) -# endif - -# ifdef USE_AS_STRNCPY - mov %rcx, %rsi - sub $16, %r8 - and $0xf, %rsi - -/* add 16 bytes rcx_offset to r8 */ - - add %rsi, %r8 -# endif - lea 16(%rcx), %rsi - and $-16, %rsi - pxor %xmm0, %xmm0 - mov (%rcx), %r9 - mov %r9, (%rdx) - pcmpeqb (%rsi), %xmm0 - mov 8(%rcx), %r9 - mov %r9, 8(%rdx) - -/* convert byte mask in xmm0 to bit mask */ - - pmovmskb %xmm0, %rax - sub %rcx, %rsi - -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - mov %rdx, %rax - lea 16(%rdx), %rdx - and $-16, %rdx - sub %rdx, %rax - -# ifdef USE_AS_STRNCPY - add %rax, %rsi - lea -1(%rsi), %rsi - and $1<<31, %esi - test %rsi, %rsi - jnz L(ContinueCopy) - lea 16(%r8), %r8 - -L(ContinueCopy): -# endif - sub %rax, %rcx - mov %rcx, %rax - and $0xf, %rax - mov $0, %rsi - -/* case: rcx_offset == rdx_offset */ - - jz L(Align16Both) - - cmp $8, %rax - jae L(ShlHigh8) - cmp $1, %rax - je L(Shl1) - cmp $2, %rax - je L(Shl2) - cmp $3, %rax - je L(Shl3) - cmp $4, %rax - je L(Shl4) - cmp $5, %rax - je L(Shl5) - cmp $6, %rax - je L(Shl6) - jmp L(Shl7) - -L(ShlHigh8): - je L(Shl8) - cmp $9, %rax - je L(Shl9) - cmp $10, %rax - je L(Shl10) - cmp $11, %rax - je L(Shl11) - cmp $12, %rax - je L(Shl12) - cmp $13, %rax - je L(Shl13) - cmp $14, %rax - je L(Shl14) - jmp L(Shl15) - -L(Align16Both): - movaps (%rcx), %xmm1 - movaps 16(%rcx), %xmm2 - movaps %xmm1, (%rdx) - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - lea 16(%rsi), %rsi -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%rcx, %rsi), %xmm3 - movaps %xmm2, (%rdx, %rsi) - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %rax - lea 16(%rsi), %rsi -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%rcx, %rsi), %xmm4 - movaps %xmm3, (%rdx, %rsi) - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm0, %rax - lea 16(%rsi), %rsi -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%rcx, %rsi), %xmm1 - movaps %xmm4, (%rdx, %rsi) - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %rax - lea 16(%rsi), %rsi -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%rcx, %rsi), %xmm2 - movaps %xmm1, (%rdx, %rsi) - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - lea 16(%rsi), %rsi -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%rcx, %rsi), %xmm3 - movaps %xmm2, (%rdx, %rsi) - pcmpeqb %xmm3, %xmm0 - pmovmskb %xmm0, %rax - lea 16(%rsi), %rsi -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) -# endif - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - movaps %xmm3, (%rdx, %rsi) - mov %rcx, %rax - lea 16(%rcx, %rsi), %rcx - and $-0x40, %rcx - sub %rcx, %rax - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - lea 112(%r8, %rax), %r8 -# endif - mov $-0x40, %rsi - - .p2align 4 -L(Aligned64Loop): - movaps (%rcx), %xmm2 - movaps %xmm2, %xmm4 - movaps 16(%rcx), %xmm5 - movaps 32(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 48(%rcx), %xmm7 - pminub %xmm5, %xmm2 - pminub %xmm7, %xmm3 - pminub %xmm2, %xmm3 - pcmpeqb %xmm0, %xmm3 - pmovmskb %xmm3, %rax - lea 64(%rdx), %rdx - lea 64(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeaveCase2OrCase3) -# endif - test %rax, %rax - jnz L(Aligned64Leave) - movaps %xmm4, -64(%rdx) - movaps %xmm5, -48(%rdx) - movaps %xmm6, -32(%rdx) - movaps %xmm7, -16(%rdx) - jmp L(Aligned64Loop) - -L(Aligned64Leave): -# ifdef USE_AS_STRNCPY - lea 48(%r8), %r8 -# endif - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm0, %rax - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm5, %xmm0 -# ifdef USE_AS_STRNCPY - lea -16(%r8), %r8 -# endif - pmovmskb %xmm0, %rax - movaps %xmm4, -64(%rdx) - test %rax, %rax - lea 16(%rsi), %rsi - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm6, %xmm0 -# ifdef USE_AS_STRNCPY - lea -16(%r8), %r8 -# endif - pmovmskb %xmm0, %rax - movaps %xmm5, -48(%rdx) - test %rax, %rax - lea 16(%rsi), %rsi - jnz L(CopyFrom1To16Bytes) - - movaps %xmm6, -32(%rdx) - pcmpeqb %xmm7, %xmm0 -# ifdef USE_AS_STRNCPY - lea -16(%r8), %r8 -# endif - pmovmskb %xmm0, %rax - lea 16(%rsi), %rsi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl1): - movaps -1(%rcx), %xmm1 - movaps 15(%rcx), %xmm2 -L(Shl1Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit1Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl1LoopExit) - - palignr $1, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 31(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit1Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl1LoopExit) - - palignr $1, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 31(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit1Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl1LoopExit) - - palignr $1, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 31(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit1Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl1LoopExit) - - palignr $1, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 31(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -15(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -1(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl1LoopStart): - movaps 15(%rcx), %xmm2 - movaps 31(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 47(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 63(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $1, %xmm4, %xmm5 - test %rax, %rax - palignr $1, %xmm3, %xmm4 - jnz L(Shl1Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave1) -# endif - palignr $1, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $1, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl1LoopStart) - -L(Shl1LoopExit): - movdqu -1(%rcx), %xmm1 - mov $15, %rsi - movdqu %xmm1, -1(%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl2): - movaps -2(%rcx), %xmm1 - movaps 14(%rcx), %xmm2 -L(Shl2Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit2Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl2LoopExit) - - palignr $2, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 30(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit2Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl2LoopExit) - - palignr $2, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 30(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit2Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl2LoopExit) - - palignr $2, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 30(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit2Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl2LoopExit) - - palignr $2, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 30(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -14(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -2(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl2LoopStart): - movaps 14(%rcx), %xmm2 - movaps 30(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 46(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 62(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $2, %xmm4, %xmm5 - test %rax, %rax - palignr $2, %xmm3, %xmm4 - jnz L(Shl2Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave2) -# endif - palignr $2, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $2, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl2LoopStart) - -L(Shl2LoopExit): - movdqu -2(%rcx), %xmm1 - mov $14, %rsi - movdqu %xmm1, -2(%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl3): - movaps -3(%rcx), %xmm1 - movaps 13(%rcx), %xmm2 -L(Shl3Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit3Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl3LoopExit) - - palignr $3, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 29(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit3Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl3LoopExit) - - palignr $3, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 29(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit3Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl3LoopExit) - - palignr $3, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 29(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit3Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl3LoopExit) - - palignr $3, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 29(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -13(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -3(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl3LoopStart): - movaps 13(%rcx), %xmm2 - movaps 29(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 45(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 61(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $3, %xmm4, %xmm5 - test %rax, %rax - palignr $3, %xmm3, %xmm4 - jnz L(Shl3Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave3) -# endif - palignr $3, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $3, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl3LoopStart) - -L(Shl3LoopExit): - movdqu -3(%rcx), %xmm1 - mov $13, %rsi - movdqu %xmm1, -3(%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl4): - movaps -4(%rcx), %xmm1 - movaps 12(%rcx), %xmm2 -L(Shl4Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit4Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl4LoopExit) - - palignr $4, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 28(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit4Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl4LoopExit) - - palignr $4, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 28(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit4Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl4LoopExit) - - palignr $4, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 28(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit4Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl4LoopExit) - - palignr $4, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 28(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -12(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -4(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl4LoopStart): - movaps 12(%rcx), %xmm2 - movaps 28(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 44(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 60(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $4, %xmm4, %xmm5 - test %rax, %rax - palignr $4, %xmm3, %xmm4 - jnz L(Shl4Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave4) -# endif - palignr $4, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $4, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl4LoopStart) - -L(Shl4LoopExit): - movdqu -4(%rcx), %xmm1 - mov $12, %rsi - movdqu %xmm1, -4(%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl5): - movaps -5(%rcx), %xmm1 - movaps 11(%rcx), %xmm2 -L(Shl5Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit5Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl5LoopExit) - - palignr $5, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 27(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit5Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl5LoopExit) - - palignr $5, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 27(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit5Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl5LoopExit) - - palignr $5, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 27(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit5Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl5LoopExit) - - palignr $5, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 27(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -11(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -5(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl5LoopStart): - movaps 11(%rcx), %xmm2 - movaps 27(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 43(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 59(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $5, %xmm4, %xmm5 - test %rax, %rax - palignr $5, %xmm3, %xmm4 - jnz L(Shl5Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave5) -# endif - palignr $5, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $5, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl5LoopStart) - -L(Shl5LoopExit): - movdqu -5(%rcx), %xmm1 - mov $11, %rsi - movdqu %xmm1, -5(%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl6): - movaps -6(%rcx), %xmm1 - movaps 10(%rcx), %xmm2 -L(Shl6Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit6Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl6LoopExit) - - palignr $6, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 26(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit6Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl6LoopExit) - - palignr $6, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 26(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit6Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl6LoopExit) - - palignr $6, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 26(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit6Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl6LoopExit) - - palignr $6, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 26(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -10(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -6(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl6LoopStart): - movaps 10(%rcx), %xmm2 - movaps 26(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 42(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 58(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $6, %xmm4, %xmm5 - test %rax, %rax - palignr $6, %xmm3, %xmm4 - jnz L(Shl6Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave6) -# endif - palignr $6, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $6, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl6LoopStart) - -L(Shl6LoopExit): - mov (%rcx), %r9 - mov 6(%rcx), %esi - mov %r9, (%rdx) - mov %esi, 6(%rdx) - mov $10, %rsi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl7): - movaps -7(%rcx), %xmm1 - movaps 9(%rcx), %xmm2 -L(Shl7Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit7Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl7LoopExit) - - palignr $7, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 25(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit7Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl7LoopExit) - - palignr $7, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 25(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit7Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl7LoopExit) - - palignr $7, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 25(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit7Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl7LoopExit) - - palignr $7, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 25(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -9(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -7(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl7LoopStart): - movaps 9(%rcx), %xmm2 - movaps 25(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 41(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 57(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $7, %xmm4, %xmm5 - test %rax, %rax - palignr $7, %xmm3, %xmm4 - jnz L(Shl7Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave7) -# endif - palignr $7, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $7, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl7LoopStart) - -L(Shl7LoopExit): - mov (%rcx), %r9 - mov 5(%rcx), %esi - mov %r9, (%rdx) - mov %esi, 5(%rdx) - mov $9, %rsi - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl8): - movaps -8(%rcx), %xmm1 - movaps 8(%rcx), %xmm2 -L(Shl8Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit8Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl8LoopExit) - - palignr $8, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 24(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit8Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl8LoopExit) - - palignr $8, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 24(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit8Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl8LoopExit) - - palignr $8, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 24(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit8Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl8LoopExit) - - palignr $8, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 24(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -8(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -8(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl8LoopStart): - movaps 8(%rcx), %xmm2 - movaps 24(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 40(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 56(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $8, %xmm4, %xmm5 - test %rax, %rax - palignr $8, %xmm3, %xmm4 - jnz L(Shl8Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave8) -# endif - palignr $8, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $8, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl8LoopStart) - -L(Shl8LoopExit): - mov (%rcx), %r9 - mov $8, %rsi - mov %r9, (%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl9): - movaps -9(%rcx), %xmm1 - movaps 7(%rcx), %xmm2 -L(Shl9Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit9Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl9LoopExit) - - palignr $9, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 23(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit9Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl9LoopExit) - - palignr $9, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 23(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit9Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl9LoopExit) - - palignr $9, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 23(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit9Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl9LoopExit) - - palignr $9, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 23(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -7(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -9(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl9LoopStart): - movaps 7(%rcx), %xmm2 - movaps 23(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 39(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 55(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $9, %xmm4, %xmm5 - test %rax, %rax - palignr $9, %xmm3, %xmm4 - jnz L(Shl9Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave9) -# endif - palignr $9, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $9, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl9LoopStart) - -L(Shl9LoopExit): - mov -1(%rcx), %r9 - mov $7, %rsi - mov %r9, -1(%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl10): - movaps -10(%rcx), %xmm1 - movaps 6(%rcx), %xmm2 -L(Shl10Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit10Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl10LoopExit) - - palignr $10, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 22(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit10Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl10LoopExit) - - palignr $10, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 22(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit10Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl10LoopExit) - - palignr $10, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 22(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit10Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl10LoopExit) - - palignr $10, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 22(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -6(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -10(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl10LoopStart): - movaps 6(%rcx), %xmm2 - movaps 22(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 38(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 54(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $10, %xmm4, %xmm5 - test %rax, %rax - palignr $10, %xmm3, %xmm4 - jnz L(Shl10Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave10) -# endif - palignr $10, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $10, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl10LoopStart) - -L(Shl10LoopExit): - mov -2(%rcx), %r9 - mov $6, %rsi - mov %r9, -2(%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl11): - movaps -11(%rcx), %xmm1 - movaps 5(%rcx), %xmm2 -L(Shl11Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit11Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl11LoopExit) - - palignr $11, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 21(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit11Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl11LoopExit) - - palignr $11, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 21(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit11Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl11LoopExit) - - palignr $11, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 21(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit11Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl11LoopExit) - - palignr $11, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 21(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -5(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -11(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl11LoopStart): - movaps 5(%rcx), %xmm2 - movaps 21(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 37(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 53(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $11, %xmm4, %xmm5 - test %rax, %rax - palignr $11, %xmm3, %xmm4 - jnz L(Shl11Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave11) -# endif - palignr $11, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $11, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl11LoopStart) - -L(Shl11LoopExit): - mov -3(%rcx), %r9 - mov $5, %rsi - mov %r9, -3(%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl12): - movaps -12(%rcx), %xmm1 - movaps 4(%rcx), %xmm2 -L(Shl12Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit12Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl12LoopExit) - - palignr $12, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 20(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit12Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl12LoopExit) - - palignr $12, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 20(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit12Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl12LoopExit) - - palignr $12, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 20(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit12Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl12LoopExit) - - palignr $12, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 20(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -4(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -12(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl12LoopStart): - movaps 4(%rcx), %xmm2 - movaps 20(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 36(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 52(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $12, %xmm4, %xmm5 - test %rax, %rax - palignr $12, %xmm3, %xmm4 - jnz L(Shl12Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave12) -# endif - palignr $12, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $12, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl12LoopStart) - -L(Shl12LoopExit): - mov (%rcx), %r9d - mov $4, %rsi - mov %r9d, (%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl13): - movaps -13(%rcx), %xmm1 - movaps 3(%rcx), %xmm2 -L(Shl13Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit13Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl13LoopExit) - - palignr $13, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 19(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit13Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl13LoopExit) - - palignr $13, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 19(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit13Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl13LoopExit) - - palignr $13, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 19(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit13Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl13LoopExit) - - palignr $13, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 19(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -3(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -13(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl13LoopStart): - movaps 3(%rcx), %xmm2 - movaps 19(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 35(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 51(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $13, %xmm4, %xmm5 - test %rax, %rax - palignr $13, %xmm3, %xmm4 - jnz L(Shl13Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave13) -# endif - palignr $13, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $13, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl13LoopStart) - -L(Shl13LoopExit): - mov -1(%rcx), %r9d - mov $3, %rsi - mov %r9d, -1(%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl14): - movaps -14(%rcx), %xmm1 - movaps 2(%rcx), %xmm2 -L(Shl14Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit14Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl14LoopExit) - - palignr $14, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 18(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit14Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl14LoopExit) - - palignr $14, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 18(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit14Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl14LoopExit) - - palignr $14, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 18(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit14Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl14LoopExit) - - palignr $14, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 18(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -2(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -14(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl14LoopStart): - movaps 2(%rcx), %xmm2 - movaps 18(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 34(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 50(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $14, %xmm4, %xmm5 - test %rax, %rax - palignr $14, %xmm3, %xmm4 - jnz L(Shl14Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave14) -# endif - palignr $14, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $14, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl14LoopStart) - -L(Shl14LoopExit): - mov -2(%rcx), %r9d - mov $2, %rsi - mov %r9d, -2(%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl15): - movaps -15(%rcx), %xmm1 - movaps 1(%rcx), %xmm2 -L(Shl15Start): - pcmpeqb %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit15Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl15LoopExit) - - palignr $15, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 17(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit15Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl15LoopExit) - - palignr $15, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 17(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit15Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl15LoopExit) - - palignr $15, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 17(%rcx), %xmm2 - - pcmpeqb %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx -# ifdef USE_AS_STRNCPY - sub $16, %r8 - jbe L(StrncpyExit15Case2OrCase3) -# endif - test %rax, %rax - jnz L(Shl15LoopExit) - - palignr $15, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 17(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -1(%rcx), %rcx - sub %rax, %rdx -# ifdef USE_AS_STRNCPY - add %rax, %r8 -# endif - movaps -15(%rcx), %xmm1 - -/* 64 bytes loop */ - .p2align 4 -L(Shl15LoopStart): - movaps 1(%rcx), %xmm2 - movaps 17(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 33(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 49(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqb %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $15, %xmm4, %xmm5 - test %rax, %rax - palignr $15, %xmm3, %xmm4 - jnz L(Shl15Start) -# ifdef USE_AS_STRNCPY - sub $64, %r8 - jbe L(StrncpyLeave15) -# endif - palignr $15, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $15, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl15LoopStart) - -L(Shl15LoopExit): - mov -3(%rcx), %r9d - mov $1, %rsi - mov %r9d, -3(%rdx) -# ifdef USE_AS_STRCAT - jmp L(CopyFrom1To16Bytes) -# endif - -# ifndef USE_AS_STRCAT - - .p2align 4 -L(CopyFrom1To16Bytes): -# ifdef USE_AS_STRNCPY - add $16, %r8 -# endif - add %rsi, %rdx - add %rsi, %rcx - - test %al, %al - jz L(ExitHigh) - test $0x01, %al - jnz L(Exit1) - test $0x02, %al - jnz L(Exit2) - test $0x04, %al - jnz L(Exit3) - test $0x08, %al - jnz L(Exit4) - test $0x10, %al - jnz L(Exit5) - test $0x20, %al - jnz L(Exit6) - test $0x40, %al - jnz L(Exit7) - - .p2align 4 -L(Exit8): - mov (%rcx), %rax - mov %rax, (%rdx) -# ifdef USE_AS_STPCPY - lea 7(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $8, %r8 - lea 8(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - - .p2align 4 -L(ExitHigh): - test $0x01, %ah - jnz L(Exit9) - test $0x02, %ah - jnz L(Exit10) - test $0x04, %ah - jnz L(Exit11) - test $0x08, %ah - jnz L(Exit12) - test $0x10, %ah - jnz L(Exit13) - test $0x20, %ah - jnz L(Exit14) - test $0x40, %ah - jnz L(Exit15) - - .p2align 4 -L(Exit16): - mov (%rcx), %rax - mov %rax, (%rdx) - mov 8(%rcx), %rax - mov %rax, 8(%rdx) -# ifdef USE_AS_STPCPY - lea 15(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $16, %r8 - lea 16(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - -# ifdef USE_AS_STRNCPY - - .p2align 4 -L(CopyFrom1To16BytesCase2): - add $16, %r8 - add %rsi, %rcx - lea (%rsi, %rdx), %rsi - lea -9(%r8), %rdx - and $1<<7, %dh - or %al, %dh - test %dh, %dh - lea (%rsi), %rdx - jz L(ExitHighCase2) - - cmp $1, %r8 - je L(Exit1) - test $0x01, %al - jnz L(Exit1) - cmp $2, %r8 - je L(Exit2) - test $0x02, %al - jnz L(Exit2) - cmp $3, %r8 - je L(Exit3) - test $0x04, %al - jnz L(Exit3) - cmp $4, %r8 - je L(Exit4) - test $0x08, %al - jnz L(Exit4) - cmp $5, %r8 - je L(Exit5) - test $0x10, %al - jnz L(Exit5) - cmp $6, %r8 - je L(Exit6) - test $0x20, %al - jnz L(Exit6) - cmp $7, %r8 - je L(Exit7) - test $0x40, %al - jnz L(Exit7) - jmp L(Exit8) - - .p2align 4 -L(ExitHighCase2): - cmp $9, %r8 - je L(Exit9) - test $0x01, %ah - jnz L(Exit9) - cmp $10, %r8 - je L(Exit10) - test $0x02, %ah - jnz L(Exit10) - cmp $11, %r8 - je L(Exit11) - test $0x04, %ah - jnz L(Exit11) - cmp $12, %r8 - je L(Exit12) - test $0x8, %ah - jnz L(Exit12) - cmp $13, %r8 - je L(Exit13) - test $0x10, %ah - jnz L(Exit13) - cmp $14, %r8 - je L(Exit14) - test $0x20, %ah - jnz L(Exit14) - cmp $15, %r8 - je L(Exit15) - test $0x40, %ah - jnz L(Exit15) - jmp L(Exit16) - -L(CopyFrom1To16BytesCase2OrCase3): - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - - .p2align 4 -L(CopyFrom1To16BytesCase3): - add $16, %r8 - add %rsi, %rdx - add %rsi, %rcx - - cmp $16, %r8 - je L(Exit16) - cmp $8, %r8 - je L(Exit8) - jg L(More8Case3) - cmp $4, %r8 - je L(Exit4) - jg L(More4Case3) - cmp $2, %r8 - jl L(Exit1) - je L(Exit2) - jg L(Exit3) -L(More8Case3): /* but less than 16 */ - cmp $12, %r8 - je L(Exit12) - jl L(Less12Case3) - cmp $14, %r8 - jl L(Exit13) - je L(Exit14) - jg L(Exit15) -L(More4Case3): /* but less than 8 */ - cmp $6, %r8 - jl L(Exit5) - je L(Exit6) - jg L(Exit7) -L(Less12Case3): /* but more than 8 */ - cmp $10, %r8 - jl L(Exit9) - je L(Exit10) - jg L(Exit11) -# endif - - .p2align 4 -L(Exit1): - movb (%rcx), %al - movb %al, (%rdx) -# ifdef USE_AS_STPCPY - lea (%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $1, %r8 - lea 1(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - - .p2align 4 -L(Exit2): - movw (%rcx), %ax - movw %ax, (%rdx) -# ifdef USE_AS_STPCPY - lea 1(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $2, %r8 - lea 2(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - - .p2align 4 -L(Exit3): - movw (%rcx), %ax - movw %ax, (%rdx) - movb 2(%rcx), %al - movb %al, 2(%rdx) -# ifdef USE_AS_STPCPY - lea 2(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $3, %r8 - lea 3(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - - .p2align 4 -L(Exit4): - movl (%rcx), %eax - movl %eax, (%rdx) -# ifdef USE_AS_STPCPY - lea 3(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $4, %r8 - lea 4(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - - .p2align 4 -L(Exit5): - movl (%rcx), %eax - movl %eax, (%rdx) - movb 4(%rcx), %al - movb %al, 4(%rdx) -# ifdef USE_AS_STPCPY - lea 4(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $5, %r8 - lea 5(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - - .p2align 4 -L(Exit6): - movl (%rcx), %eax - movl %eax, (%rdx) - movw 4(%rcx), %ax - movw %ax, 4(%rdx) -# ifdef USE_AS_STPCPY - lea 5(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $6, %r8 - lea 6(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - - .p2align 4 -L(Exit7): - movl (%rcx), %eax - movl %eax, (%rdx) - movl 3(%rcx), %eax - movl %eax, 3(%rdx) -# ifdef USE_AS_STPCPY - lea 6(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $7, %r8 - lea 7(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - - .p2align 4 -L(Exit9): - mov (%rcx), %rax - mov %rax, (%rdx) - mov 5(%rcx), %eax - mov %eax, 5(%rdx) -# ifdef USE_AS_STPCPY - lea 8(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $9, %r8 - lea 9(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - - .p2align 4 -L(Exit10): - mov (%rcx), %rax - mov %rax, (%rdx) - mov 6(%rcx), %eax - mov %eax, 6(%rdx) -# ifdef USE_AS_STPCPY - lea 9(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $10, %r8 - lea 10(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - - .p2align 4 -L(Exit11): - mov (%rcx), %rax - mov %rax, (%rdx) - mov 7(%rcx), %eax - mov %eax, 7(%rdx) -# ifdef USE_AS_STPCPY - lea 10(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $11, %r8 - lea 11(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - - .p2align 4 -L(Exit12): - mov (%rcx), %rax - mov %rax, (%rdx) - mov 8(%rcx), %eax - mov %eax, 8(%rdx) -# ifdef USE_AS_STPCPY - lea 11(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $12, %r8 - lea 12(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - - .p2align 4 -L(Exit13): - mov (%rcx), %rax - mov %rax, (%rdx) - mov 5(%rcx), %rax - mov %rax, 5(%rdx) -# ifdef USE_AS_STPCPY - lea 12(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $13, %r8 - lea 13(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - - .p2align 4 -L(Exit14): - mov (%rcx), %rax - mov %rax, (%rdx) - mov 6(%rcx), %rax - mov %rax, 6(%rdx) -# ifdef USE_AS_STPCPY - lea 13(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $14, %r8 - lea 14(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - - .p2align 4 -L(Exit15): - mov (%rcx), %rax - mov %rax, (%rdx) - mov 7(%rcx), %rax - mov %rax, 7(%rdx) -# ifdef USE_AS_STPCPY - lea 14(%rdx), %rax -# else - mov %rdi, %rax -# endif -# ifdef USE_AS_STRNCPY - sub $15, %r8 - lea 15(%rdx), %rcx - jnz L(StrncpyFillTailWithZero1) -# ifdef USE_AS_STPCPY - cmpb $1, (%rax) - sbb $-1, %rax -# endif -# endif - ret - -# ifdef USE_AS_STRNCPY - .p2align 4 -L(Fill0): - ret - - .p2align 4 -L(Fill1): - movb %dl, (%rcx) - ret - - .p2align 4 -L(Fill2): - movw %dx, (%rcx) - ret - - .p2align 4 -L(Fill3): - movw %dx, (%rcx) - movb %dl, 2(%rcx) - ret - - .p2align 4 -L(Fill4): - movl %edx, (%rcx) - ret - - .p2align 4 -L(Fill5): - movl %edx, (%rcx) - movb %dl, 4(%rcx) - ret - - .p2align 4 -L(Fill6): - movl %edx, (%rcx) - movw %dx, 4(%rcx) - ret - - .p2align 4 -L(Fill7): - movl %edx, (%rcx) - movl %edx, 3(%rcx) - ret - - .p2align 4 -L(Fill8): - mov %rdx, (%rcx) - ret - - .p2align 4 -L(Fill9): - mov %rdx, (%rcx) - movb %dl, 8(%rcx) - ret - - .p2align 4 -L(Fill10): - mov %rdx, (%rcx) - movw %dx, 8(%rcx) - ret - - .p2align 4 -L(Fill11): - mov %rdx, (%rcx) - movl %edx, 7(%rcx) - ret - - .p2align 4 -L(Fill12): - mov %rdx, (%rcx) - movl %edx, 8(%rcx) - ret - - .p2align 4 -L(Fill13): - mov %rdx, (%rcx) - mov %rdx, 5(%rcx) - ret - - .p2align 4 -L(Fill14): - mov %rdx, (%rcx) - mov %rdx, 6(%rcx) - ret - - .p2align 4 -L(Fill15): - mov %rdx, (%rcx) - mov %rdx, 7(%rcx) - ret - - .p2align 4 -L(Fill16): - mov %rdx, (%rcx) - mov %rdx, 8(%rcx) - ret - - .p2align 4 -L(StrncpyFillExit1): - lea 16(%r8), %r8 -L(FillFrom1To16Bytes): - test %r8, %r8 - jz L(Fill0) - cmp $16, %r8 - je L(Fill16) - cmp $8, %r8 - je L(Fill8) - jg L(FillMore8) - cmp $4, %r8 - je L(Fill4) - jg L(FillMore4) - cmp $2, %r8 - jl L(Fill1) - je L(Fill2) - jg L(Fill3) -L(FillMore8): /* but less than 16 */ - cmp $12, %r8 - je L(Fill12) - jl L(FillLess12) - cmp $14, %r8 - jl L(Fill13) - je L(Fill14) - jg L(Fill15) -L(FillMore4): /* but less than 8 */ - cmp $6, %r8 - jl L(Fill5) - je L(Fill6) - jg L(Fill7) -L(FillLess12): /* but more than 8 */ - cmp $10, %r8 - jl L(Fill9) - je L(Fill10) - jmp L(Fill11) - - .p2align 4 -L(StrncpyFillTailWithZero1): - xor %rdx, %rdx - sub $16, %r8 - jbe L(StrncpyFillExit1) - - pxor %xmm0, %xmm0 - mov %rdx, (%rcx) - mov %rdx, 8(%rcx) - - lea 16(%rcx), %rcx - - mov %rcx, %rdx - and $0xf, %rdx - sub %rdx, %rcx - add %rdx, %r8 - xor %rdx, %rdx - sub $64, %r8 - jb L(StrncpyFillLess64) - -L(StrncpyFillLoopMovdqa): - movdqa %xmm0, (%rcx) - movdqa %xmm0, 16(%rcx) - movdqa %xmm0, 32(%rcx) - movdqa %xmm0, 48(%rcx) - lea 64(%rcx), %rcx - sub $64, %r8 - jae L(StrncpyFillLoopMovdqa) - -L(StrncpyFillLess64): - add $32, %r8 - jl L(StrncpyFillLess32) - movdqa %xmm0, (%rcx) - movdqa %xmm0, 16(%rcx) - lea 32(%rcx), %rcx - sub $16, %r8 - jl L(StrncpyFillExit1) - movdqa %xmm0, (%rcx) - lea 16(%rcx), %rcx - jmp L(FillFrom1To16Bytes) - -L(StrncpyFillLess32): - add $16, %r8 - jl L(StrncpyFillExit1) - movdqa %xmm0, (%rcx) - lea 16(%rcx), %rcx - jmp L(FillFrom1To16Bytes) - - .p2align 4 -L(Exit0): - mov %rdx, %rax - ret - - .p2align 4 -L(StrncpyExit15Bytes): - cmp $9, %r8 - je L(Exit9) - cmpb $0, 8(%rcx) - jz L(Exit9) - cmp $10, %r8 - je L(Exit10) - cmpb $0, 9(%rcx) - jz L(Exit10) - cmp $11, %r8 - je L(Exit11) - cmpb $0, 10(%rcx) - jz L(Exit11) - cmp $12, %r8 - je L(Exit12) - cmpb $0, 11(%rcx) - jz L(Exit12) - cmp $13, %r8 - je L(Exit13) - cmpb $0, 12(%rcx) - jz L(Exit13) - cmp $14, %r8 - je L(Exit14) - cmpb $0, 13(%rcx) - jz L(Exit14) - mov (%rcx), %rax - mov %rax, (%rdx) - mov 7(%rcx), %rax - mov %rax, 7(%rdx) -# ifdef USE_AS_STPCPY - lea 14(%rdx), %rax - cmpb $1, (%rax) - sbb $-1, %rax -# else - mov %rdi, %rax -# endif - ret - - .p2align 4 -L(StrncpyExit8Bytes): - cmp $1, %r8 - je L(Exit1) - cmpb $0, (%rcx) - jz L(Exit1) - cmp $2, %r8 - je L(Exit2) - cmpb $0, 1(%rcx) - jz L(Exit2) - cmp $3, %r8 - je L(Exit3) - cmpb $0, 2(%rcx) - jz L(Exit3) - cmp $4, %r8 - je L(Exit4) - cmpb $0, 3(%rcx) - jz L(Exit4) - cmp $5, %r8 - je L(Exit5) - cmpb $0, 4(%rcx) - jz L(Exit5) - cmp $6, %r8 - je L(Exit6) - cmpb $0, 5(%rcx) - jz L(Exit6) - cmp $7, %r8 - je L(Exit7) - cmpb $0, 6(%rcx) - jz L(Exit7) - mov (%rcx), %rax - mov %rax, (%rdx) -# ifdef USE_AS_STPCPY - lea 7(%rdx), %rax - cmpb $1, (%rax) - sbb $-1, %rax -# else - mov %rdi, %rax -# endif - ret - -# endif -# endif - -# ifdef USE_AS_STRNCPY - .p2align 4 -L(StrncpyLeaveCase2OrCase3): - test %rax, %rax - jnz L(Aligned64LeaveCase2) - -L(Aligned64LeaveCase3): - lea 64(%r8), %r8 - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase3) - movaps %xmm4, -64(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase3) - movaps %xmm5, -48(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase3) - movaps %xmm6, -32(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - jmp L(CopyFrom1To16BytesCase3) - -L(Aligned64LeaveCase2): - pcmpeqb %xmm4, %xmm0 - pmovmskb %xmm0, %rax - add $48, %r8 - jle L(CopyFrom1To16BytesCase2OrCase3) - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm5, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm4, -64(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm6, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm5, -48(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(CopyFrom1To16BytesCase2OrCase3) - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - pcmpeqb %xmm7, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm6, -32(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - jmp L(CopyFrom1To16BytesCase2) -/*--------------------------------------------------*/ - .p2align 4 -L(StrncpyExit1Case2OrCase3): - movdqu -1(%rcx), %xmm0 - movdqu %xmm0, -1(%rdx) - mov $15, %rsi - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit2Case2OrCase3): - movdqu -2(%rcx), %xmm0 - movdqu %xmm0, -2(%rdx) - mov $14, %rsi - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit3Case2OrCase3): - movdqu -3(%rcx), %xmm0 - movdqu %xmm0, -3(%rdx) - mov $13, %rsi - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit4Case2OrCase3): - movdqu -4(%rcx), %xmm0 - movdqu %xmm0, -4(%rdx) - mov $12, %rsi - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit5Case2OrCase3): - movdqu -5(%rcx), %xmm0 - movdqu %xmm0, -5(%rdx) - mov $11, %rsi - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit6Case2OrCase3): - mov (%rcx), %rsi - mov 6(%rcx), %r9d - mov %r9d, 6(%rdx) - mov %rsi, (%rdx) - test %rax, %rax - mov $10, %rsi - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit7Case2OrCase3): - mov (%rcx), %rsi - mov 5(%rcx), %r9d - mov %r9d, 5(%rdx) - mov %rsi, (%rdx) - test %rax, %rax - mov $9, %rsi - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit8Case2OrCase3): - mov (%rcx), %r9 - mov $8, %rsi - mov %r9, (%rdx) - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit9Case2OrCase3): - mov -1(%rcx), %r9 - mov $7, %rsi - mov %r9, -1(%rdx) - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit10Case2OrCase3): - mov -2(%rcx), %r9 - mov $6, %rsi - mov %r9, -2(%rdx) - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit11Case2OrCase3): - mov -3(%rcx), %r9 - mov $5, %rsi - mov %r9, -3(%rdx) - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit12Case2OrCase3): - mov (%rcx), %r9d - mov $4, %rsi - mov %r9d, (%rdx) - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit13Case2OrCase3): - mov -1(%rcx), %r9d - mov $3, %rsi - mov %r9d, -1(%rdx) - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit14Case2OrCase3): - mov -2(%rcx), %r9d - mov $2, %rsi - mov %r9d, -2(%rdx) - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyExit15Case2OrCase3): - mov -3(%rcx), %r9d - mov $1, %rsi - mov %r9d, -3(%rdx) - test %rax, %rax - jnz L(CopyFrom1To16BytesCase2) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave1): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit1) - palignr $1, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 31(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit1) - palignr $1, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit1) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit1) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit1): - lea 15(%rdx, %rsi), %rdx - lea 15(%rcx, %rsi), %rcx - mov -15(%rcx), %rsi - mov -8(%rcx), %rax - mov %rsi, -15(%rdx) - mov %rax, -8(%rdx) - xor %rsi, %rsi - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave2): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit2) - palignr $2, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 30(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit2) - palignr $2, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit2) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit2) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit2): - lea 14(%rdx, %rsi), %rdx - lea 14(%rcx, %rsi), %rcx - mov -14(%rcx), %rsi - mov -8(%rcx), %rax - mov %rsi, -14(%rdx) - mov %rax, -8(%rdx) - xor %rsi, %rsi - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave3): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit3) - palignr $3, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 29(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit3) - palignr $3, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit3) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit3) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit3): - lea 13(%rdx, %rsi), %rdx - lea 13(%rcx, %rsi), %rcx - mov -13(%rcx), %rsi - mov -8(%rcx), %rax - mov %rsi, -13(%rdx) - mov %rax, -8(%rdx) - xor %rsi, %rsi - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave4): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit4) - palignr $4, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 28(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit4) - palignr $4, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit4) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit4) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit4): - lea 12(%rdx, %rsi), %rdx - lea 12(%rcx, %rsi), %rcx - mov -12(%rcx), %rsi - mov -4(%rcx), %eax - mov %rsi, -12(%rdx) - mov %eax, -4(%rdx) - xor %rsi, %rsi - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave5): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit5) - palignr $5, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 27(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit5) - palignr $5, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit5) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit5) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit5): - lea 11(%rdx, %rsi), %rdx - lea 11(%rcx, %rsi), %rcx - mov -11(%rcx), %rsi - mov -4(%rcx), %eax - mov %rsi, -11(%rdx) - mov %eax, -4(%rdx) - xor %rsi, %rsi - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave6): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit6) - palignr $6, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 26(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit6) - palignr $6, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit6) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit6) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit6): - lea 10(%rdx, %rsi), %rdx - lea 10(%rcx, %rsi), %rcx - mov -10(%rcx), %rsi - movw -2(%rcx), %ax - mov %rsi, -10(%rdx) - movw %ax, -2(%rdx) - xor %rsi, %rsi - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave7): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit7) - palignr $7, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 25(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit7) - palignr $7, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit7) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit7) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit7): - lea 9(%rdx, %rsi), %rdx - lea 9(%rcx, %rsi), %rcx - mov -9(%rcx), %rsi - movb -1(%rcx), %ah - mov %rsi, -9(%rdx) - movb %ah, -1(%rdx) - xor %rsi, %rsi - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave8): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit8) - palignr $8, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 24(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit8) - palignr $8, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit8) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit8) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit8): - lea 8(%rdx, %rsi), %rdx - lea 8(%rcx, %rsi), %rcx - mov -8(%rcx), %rax - xor %rsi, %rsi - mov %rax, -8(%rdx) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave9): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit9) - palignr $9, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 23(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit9) - palignr $9, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit9) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit9) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit9): - lea 7(%rdx, %rsi), %rdx - lea 7(%rcx, %rsi), %rcx - mov -8(%rcx), %rax - xor %rsi, %rsi - mov %rax, -8(%rdx) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave10): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit10) - palignr $10, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 22(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit10) - palignr $10, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit10) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit10) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit10): - lea 6(%rdx, %rsi), %rdx - lea 6(%rcx, %rsi), %rcx - mov -8(%rcx), %rax - xor %rsi, %rsi - mov %rax, -8(%rdx) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave11): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit11) - palignr $11, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 21(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit11) - palignr $11, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit11) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit11) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit11): - lea 5(%rdx, %rsi), %rdx - lea 5(%rcx, %rsi), %rcx - mov -8(%rcx), %rax - xor %rsi, %rsi - mov %rax, -8(%rdx) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave12): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit12) - palignr $12, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 20(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit12) - palignr $12, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit12) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit12) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit12): - lea 4(%rdx, %rsi), %rdx - lea 4(%rcx, %rsi), %rcx - mov -4(%rcx), %eax - xor %rsi, %rsi - mov %eax, -4(%rdx) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave13): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit13) - palignr $13, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 19(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit13) - palignr $13, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit13) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit13) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit13): - lea 3(%rdx, %rsi), %rdx - lea 3(%rcx, %rsi), %rcx - mov -4(%rcx), %eax - xor %rsi, %rsi - mov %eax, -4(%rdx) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave14): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit14) - palignr $14, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 18(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit14) - palignr $14, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit14) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit14) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit14): - lea 2(%rdx, %rsi), %rdx - lea 2(%rcx, %rsi), %rcx - movw -2(%rcx), %ax - xor %rsi, %rsi - movw %ax, -2(%rdx) - jmp L(CopyFrom1To16BytesCase3) - - .p2align 4 -L(StrncpyLeave15): - movaps %xmm2, %xmm3 - add $48, %r8 - jle L(StrncpyExit15) - palignr $15, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 17(%rcx), %xmm2 - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit15) - palignr $15, %xmm3, %xmm2 - movaps %xmm2, 16(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit15) - movaps %xmm4, 32(%rdx) - lea 16(%rsi), %rsi - sub $16, %r8 - jbe L(StrncpyExit15) - movaps %xmm5, 48(%rdx) - lea 16(%rsi), %rsi - lea -16(%r8), %r8 - -L(StrncpyExit15): - lea 1(%rdx, %rsi), %rdx - lea 1(%rcx, %rsi), %rcx - movb -1(%rcx), %ah - xor %rsi, %rsi - movb %ah, -1(%rdx) - jmp L(CopyFrom1To16BytesCase3) - -# endif -# ifndef USE_AS_STRCAT -END (STRCPY) -# endif -#endif diff --git a/sysdeps/x86_64/multiarch/strcpy.S b/sysdeps/x86_64/multiarch/strcpy.S deleted file mode 100644 index 77819ddc50..0000000000 --- a/sysdeps/x86_64/multiarch/strcpy.S +++ /dev/null @@ -1,99 +0,0 @@ -/* Multiple versions of strcpy - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#if !defined (USE_AS_STPCPY) && !defined (USE_AS_STRNCPY) -# ifndef STRCPY -# define STRCPY strcpy -# endif -#endif - -#ifdef USE_AS_STPCPY -# ifdef USE_AS_STRNCPY -# define STRCPY_SSSE3 __stpncpy_ssse3 -# define STRCPY_SSE2 __stpncpy_sse2 -# define STRCPY_SSE2_UNALIGNED __stpncpy_sse2_unaligned -# define __GI_STRCPY __GI_stpncpy -# define __GI___STRCPY __GI___stpncpy -# else -# define STRCPY_SSSE3 __stpcpy_ssse3 -# define STRCPY_SSE2 __stpcpy_sse2 -# define STRCPY_SSE2_UNALIGNED __stpcpy_sse2_unaligned -# define __GI_STRCPY __GI_stpcpy -# define __GI___STRCPY __GI___stpcpy -# endif -#else -# ifdef USE_AS_STRNCPY -# define STRCPY_SSSE3 __strncpy_ssse3 -# define STRCPY_SSE2 __strncpy_sse2 -# define STRCPY_SSE2_UNALIGNED __strncpy_sse2_unaligned -# define __GI_STRCPY __GI_strncpy -# else -# define STRCPY_SSSE3 __strcpy_ssse3 -# define STRCPY_SSE2 __strcpy_sse2 -# define STRCPY_SSE2_UNALIGNED __strcpy_sse2_unaligned -# define __GI_STRCPY __GI_strcpy -# endif -#endif - - -/* Define multiple versions only for the definition in libc. */ -#if IS_IN (libc) - .text -ENTRY(STRCPY) - .type STRCPY, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq STRCPY_SSE2_UNALIGNED(%rip), %rax - HAS_ARCH_FEATURE (Fast_Unaligned_Load) - jnz 2f - leaq STRCPY_SSE2(%rip), %rax - HAS_CPU_FEATURE (SSSE3) - jz 2f - leaq STRCPY_SSSE3(%rip), %rax -2: ret -END(STRCPY) - -# undef ENTRY -# define ENTRY(name) \ - .type STRCPY_SSE2, @function; \ - .align 16; \ - .globl STRCPY_SSE2; \ - .hidden STRCPY_SSE2; \ - STRCPY_SSE2: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size STRCPY_SSE2, .-STRCPY_SSE2 -# undef libc_hidden_builtin_def -/* It doesn't make sense to send libc-internal strcpy calls through a PLT. - The speedup we get from using SSSE3 instruction is likely eaten away - by the indirect call in the PLT. */ -# define libc_hidden_builtin_def(name) \ - .globl __GI_STRCPY; __GI_STRCPY = STRCPY_SSE2 -# undef libc_hidden_def -# define libc_hidden_def(name) \ - .globl __GI___STRCPY; __GI___STRCPY = STRCPY_SSE2 -#endif - -#ifndef USE_AS_STRNCPY -#include "../strcpy.S" -#endif diff --git a/sysdeps/x86_64/multiarch/strcspn-c.c b/sysdeps/x86_64/multiarch/strcspn-c.c deleted file mode 100644 index 67991b5ca7..0000000000 --- a/sysdeps/x86_64/multiarch/strcspn-c.c +++ /dev/null @@ -1,173 +0,0 @@ -/* strcspn with SSE4.2 intrinsics - Copyright (C) 2009-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "varshift.h" - -/* We use 0x2: - _SIDD_SBYTE_OPS - | _SIDD_CMP_EQUAL_ANY - | _SIDD_POSITIVE_POLARITY - | _SIDD_LEAST_SIGNIFICANT - on pcmpistri to compare xmm/mem128 - - 0 1 2 3 4 5 6 7 8 9 A B C D E F - X X X X X X X X X X X X X X X X - - against xmm - - 0 1 2 3 4 5 6 7 8 9 A B C D E F - A A A A A A A A A A A A A A A A - - to find out if the first 16byte data element has any byte A and - the offset of the first byte. There are 3 cases: - - 1. The first 16byte data element has the byte A at the offset X. - 2. The first 16byte data element has EOS and doesn't have the byte A. - 3. The first 16byte data element is valid and doesn't have the byte A. - - Here is the table of ECX, CFlag, ZFlag and SFlag for 2 cases: - - 1 X 1 0/1 0 - 2 16 0 1 0 - 3 16 0 0 0 - - We exit from the loop for cases 1 and 2 with jbe which branches - when either CFlag or ZFlag is 1. If CFlag == 1, ECX has the offset - X for case 1. */ - -#ifndef STRCSPN_SSE2 -# define STRCSPN_SSE2 __strcspn_sse2 -# define STRCSPN_SSE42 __strcspn_sse42 -#endif - -#ifdef USE_AS_STRPBRK -# define RETURN(val1, val2) return val1 -#else -# define RETURN(val1, val2) return val2 -#endif - -extern -#ifdef USE_AS_STRPBRK -char * -#else -size_t -#endif -STRCSPN_SSE2 (const char *, const char *); - - -#ifdef USE_AS_STRPBRK -char * -#else -size_t -#endif -__attribute__ ((section (".text.sse4.2"))) -STRCSPN_SSE42 (const char *s, const char *a) -{ - if (*a == 0) - RETURN (NULL, strlen (s)); - - const char *aligned; - __m128i mask; - int offset = (int) ((size_t) a & 15); - if (offset != 0) - { - /* Load masks. */ - aligned = (const char *) ((size_t) a & -16L); - __m128i mask0 = _mm_load_si128 ((__m128i *) aligned); - - mask = __m128i_shift_right (mask0, offset); - - /* Find where the NULL terminator is. */ - int length = _mm_cmpistri (mask, mask, 0x3a); - if (length == 16 - offset) - { - /* There is no NULL terminator. */ - __m128i mask1 = _mm_load_si128 ((__m128i *) (aligned + 16)); - int index = _mm_cmpistri (mask1, mask1, 0x3a); - length += index; - - /* Don't use SSE4.2 if the length of A > 16. */ - if (length > 16) - return STRCSPN_SSE2 (s, a); - - if (index != 0) - { - /* Combine mask0 and mask1. We could play games with - palignr, but frankly this data should be in L1 now - so do the merge via an unaligned load. */ - mask = _mm_loadu_si128 ((__m128i *) a); - } - } - } - else - { - /* A is aligned. */ - mask = _mm_load_si128 ((__m128i *) a); - - /* Find where the NULL terminator is. */ - int length = _mm_cmpistri (mask, mask, 0x3a); - if (length == 16) - { - /* There is no NULL terminator. Don't use SSE4.2 if the length - of A > 16. */ - if (a[16] != 0) - return STRCSPN_SSE2 (s, a); - } - } - - offset = (int) ((size_t) s & 15); - if (offset != 0) - { - /* Check partial string. */ - aligned = (const char *) ((size_t) s & -16L); - __m128i value = _mm_load_si128 ((__m128i *) aligned); - - value = __m128i_shift_right (value, offset); - - int length = _mm_cmpistri (mask, value, 0x2); - /* No need to check ZFlag since ZFlag is always 1. */ - int cflag = _mm_cmpistrc (mask, value, 0x2); - if (cflag) - RETURN ((char *) (s + length), length); - /* Find where the NULL terminator is. */ - int index = _mm_cmpistri (value, value, 0x3a); - if (index < 16 - offset) - RETURN (NULL, index); - aligned += 16; - } - else - aligned = s; - - while (1) - { - __m128i value = _mm_load_si128 ((__m128i *) aligned); - int index = _mm_cmpistri (mask, value, 0x2); - int cflag = _mm_cmpistrc (mask, value, 0x2); - int zflag = _mm_cmpistrz (mask, value, 0x2); - if (cflag) - RETURN ((char *) (aligned + index), (size_t) (aligned + index - s)); - if (zflag) - RETURN (NULL, - /* Find where the NULL terminator is. */ - (size_t) (aligned + _mm_cmpistri (value, value, 0x3a) - s)); - aligned += 16; - } -} diff --git a/sysdeps/x86_64/multiarch/strcspn.S b/sysdeps/x86_64/multiarch/strcspn.S deleted file mode 100644 index d102c7e80b..0000000000 --- a/sysdeps/x86_64/multiarch/strcspn.S +++ /dev/null @@ -1,69 +0,0 @@ -/* Multiple versions of strcspn - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -#ifdef USE_AS_STRPBRK -#define STRCSPN_SSE42 __strpbrk_sse42 -#define STRCSPN_SSE2 __strpbrk_sse2 -#define __GI_STRCSPN __GI_strpbrk -#else -#ifndef STRCSPN -#define STRCSPN strcspn -#define STRCSPN_SSE42 __strcspn_sse42 -#define STRCSPN_SSE2 __strcspn_sse2 -#define __GI_STRCSPN __GI_strcspn -#endif -#endif - -/* Define multiple versions only for the definition in libc. Don't - define multiple versions for strpbrk in static library since we - need strpbrk before the initialization happened. */ -#if (defined SHARED || !defined USE_AS_STRPBRK) && IS_IN (libc) - .text -ENTRY(STRCSPN) - .type STRCSPN, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq STRCSPN_SSE2(%rip), %rax - HAS_CPU_FEATURE (SSE4_2) - jz 2f - leaq STRCSPN_SSE42(%rip), %rax -2: ret -END(STRCSPN) - -# undef ENTRY -# define ENTRY(name) \ - .type STRCSPN_SSE2, @function; \ - .globl STRCSPN_SSE2; \ - .align 16; \ - STRCSPN_SSE2: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size STRCSPN_SSE2, .-STRCSPN_SSE2 -#endif - -#ifdef USE_AS_STRPBRK -#include "../strpbrk.S" -#else -#include "../strcspn.S" -#endif diff --git a/sysdeps/x86_64/multiarch/strncase_l-ssse3.S b/sysdeps/x86_64/multiarch/strncase_l-ssse3.S deleted file mode 100644 index 6728678688..0000000000 --- a/sysdeps/x86_64/multiarch/strncase_l-ssse3.S +++ /dev/null @@ -1,6 +0,0 @@ -#define USE_SSSE3 1 -#define USE_AS_STRNCASECMP_L -#define NO_NOLOCALE_ALIAS -#define STRCMP __strncasecmp_l_ssse3 -#define __strncasecmp __strncasecmp_ssse3 -#include "../strcmp.S" diff --git a/sysdeps/x86_64/multiarch/strncase_l.S b/sysdeps/x86_64/multiarch/strncase_l.S deleted file mode 100644 index 9c0149788e..0000000000 --- a/sysdeps/x86_64/multiarch/strncase_l.S +++ /dev/null @@ -1,8 +0,0 @@ -/* Multiple versions of strncasecmp and strncasecmp_l - All versions must be listed in ifunc-impl-list.c. */ -#define STRCMP __strncasecmp_l -#define USE_AS_STRNCASECMP_L -#include "strcmp.S" - -weak_alias (__strncasecmp_l, strncasecmp_l) -libc_hidden_def (strncasecmp_l) diff --git a/sysdeps/x86_64/multiarch/strncat-c.c b/sysdeps/x86_64/multiarch/strncat-c.c deleted file mode 100644 index a3cdbff689..0000000000 --- a/sysdeps/x86_64/multiarch/strncat-c.c +++ /dev/null @@ -1,8 +0,0 @@ -#define STRNCAT __strncat_sse2 -#ifdef SHARED -#undef libc_hidden_def -#define libc_hidden_def(name) \ - __hidden_ver1 (__strncat_sse2, __GI___strncat, __strncat_sse2); -#endif - -#include "string/strncat.c" diff --git a/sysdeps/x86_64/multiarch/strncat-sse2-unaligned.S b/sysdeps/x86_64/multiarch/strncat-sse2-unaligned.S deleted file mode 100644 index 133e1d20b0..0000000000 --- a/sysdeps/x86_64/multiarch/strncat-sse2-unaligned.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_STRNCAT -#define STRCAT __strncat_sse2_unaligned -#include "strcat-sse2-unaligned.S" diff --git a/sysdeps/x86_64/multiarch/strncat-ssse3.S b/sysdeps/x86_64/multiarch/strncat-ssse3.S deleted file mode 100644 index 6c45ff3ec7..0000000000 --- a/sysdeps/x86_64/multiarch/strncat-ssse3.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_STRNCAT -#define STRCAT __strncat_ssse3 -#include "strcat-ssse3.S" diff --git a/sysdeps/x86_64/multiarch/strncat.S b/sysdeps/x86_64/multiarch/strncat.S deleted file mode 100644 index 5c1bf41453..0000000000 --- a/sysdeps/x86_64/multiarch/strncat.S +++ /dev/null @@ -1,5 +0,0 @@ -/* Multiple versions of strncat - All versions must be listed in ifunc-impl-list.c. */ -#define STRCAT strncat -#define USE_AS_STRNCAT -#include "strcat.S" diff --git a/sysdeps/x86_64/multiarch/strncmp-ssse3.S b/sysdeps/x86_64/multiarch/strncmp-ssse3.S deleted file mode 100644 index 96380a46be..0000000000 --- a/sysdeps/x86_64/multiarch/strncmp-ssse3.S +++ /dev/null @@ -1,6 +0,0 @@ -#ifdef SHARED -# define USE_SSSE3 1 -# define STRCMP __strncmp_ssse3 -# define USE_AS_STRNCMP -# include "../strcmp.S" -#endif diff --git a/sysdeps/x86_64/multiarch/strncmp.S b/sysdeps/x86_64/multiarch/strncmp.S deleted file mode 100644 index fd5eb1397c..0000000000 --- a/sysdeps/x86_64/multiarch/strncmp.S +++ /dev/null @@ -1,5 +0,0 @@ -/* Multiple versions of strncmp - All versions must be listed in ifunc-impl-list.c. */ -#define STRCMP strncmp -#define USE_AS_STRNCMP -#include "strcmp.S" diff --git a/sysdeps/x86_64/multiarch/strncpy-c.c b/sysdeps/x86_64/multiarch/strncpy-c.c deleted file mode 100644 index 296c32cb5d..0000000000 --- a/sysdeps/x86_64/multiarch/strncpy-c.c +++ /dev/null @@ -1,8 +0,0 @@ -#define STRNCPY __strncpy_sse2 -#ifdef SHARED -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strncpy_sse2, __GI_strncpy, __strncpy_sse2); -#endif - -#include "strncpy.c" diff --git a/sysdeps/x86_64/multiarch/strncpy-sse2-unaligned.S b/sysdeps/x86_64/multiarch/strncpy-sse2-unaligned.S deleted file mode 100644 index fcc23a754a..0000000000 --- a/sysdeps/x86_64/multiarch/strncpy-sse2-unaligned.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_STRNCPY -#define STRCPY __strncpy_sse2_unaligned -#include "strcpy-sse2-unaligned.S" diff --git a/sysdeps/x86_64/multiarch/strncpy-ssse3.S b/sysdeps/x86_64/multiarch/strncpy-ssse3.S deleted file mode 100644 index bf82ee447d..0000000000 --- a/sysdeps/x86_64/multiarch/strncpy-ssse3.S +++ /dev/null @@ -1,3 +0,0 @@ -#define USE_AS_STRNCPY -#define STRCPY __strncpy_ssse3 -#include "strcpy-ssse3.S" diff --git a/sysdeps/x86_64/multiarch/strncpy.S b/sysdeps/x86_64/multiarch/strncpy.S deleted file mode 100644 index 6d87a0ba35..0000000000 --- a/sysdeps/x86_64/multiarch/strncpy.S +++ /dev/null @@ -1,5 +0,0 @@ -/* Multiple versions of strncpy - All versions must be listed in ifunc-impl-list.c. */ -#define STRCPY strncpy -#define USE_AS_STRNCPY -#include "strcpy.S" diff --git a/sysdeps/x86_64/multiarch/strpbrk-c.c b/sysdeps/x86_64/multiarch/strpbrk-c.c deleted file mode 100644 index bbf5c49d89..0000000000 --- a/sysdeps/x86_64/multiarch/strpbrk-c.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Don't define multiple versions for strpbrk in static library since we - need strpbrk before the initialization happened. */ -#ifdef SHARED -# define USE_AS_STRPBRK -# define STRCSPN_SSE2 __strpbrk_sse2 -# define STRCSPN_SSE42 __strpbrk_sse42 -# include "strcspn-c.c" -#endif diff --git a/sysdeps/x86_64/multiarch/strpbrk.S b/sysdeps/x86_64/multiarch/strpbrk.S deleted file mode 100644 index 7201d6376f..0000000000 --- a/sysdeps/x86_64/multiarch/strpbrk.S +++ /dev/null @@ -1,5 +0,0 @@ -/* Multiple versions of strpbrk - All versions must be listed in ifunc-impl-list.c. */ -#define STRCSPN strpbrk -#define USE_AS_STRPBRK -#include "strcspn.S" diff --git a/sysdeps/x86_64/multiarch/strspn-c.c b/sysdeps/x86_64/multiarch/strspn-c.c deleted file mode 100644 index 1704606b80..0000000000 --- a/sysdeps/x86_64/multiarch/strspn-c.c +++ /dev/null @@ -1,145 +0,0 @@ -/* strspn with SSE4.2 intrinsics - Copyright (C) 2009-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include "varshift.h" - -/* We use 0x12: - _SIDD_SBYTE_OPS - | _SIDD_CMP_EQUAL_ANY - | _SIDD_NEGATIVE_POLARITY - | _SIDD_LEAST_SIGNIFICANT - on pcmpistri to compare xmm/mem128 - - 0 1 2 3 4 5 6 7 8 9 A B C D E F - X X X X X X X X X X X X X X X X - - against xmm - - 0 1 2 3 4 5 6 7 8 9 A B C D E F - A A A A A A A A A A A A A A A A - - to find out if the first 16byte data element has any non-A byte and - the offset of the first byte. There are 2 cases: - - 1. The first 16byte data element has the non-A byte, including - EOS, at the offset X. - 2. The first 16byte data element is valid and doesn't have the non-A - byte. - - Here is the table of ECX, CFlag, ZFlag and SFlag for 2 cases: - - case ECX CFlag ZFlag SFlag - 1 X 1 0/1 0 - 2 16 0 0 0 - - We exit from the loop for case 1. */ - -extern size_t __strspn_sse2 (const char *, const char *); - - -size_t -__attribute__ ((section (".text.sse4.2"))) -__strspn_sse42 (const char *s, const char *a) -{ - if (*a == 0) - return 0; - - const char *aligned; - __m128i mask; - int offset = (int) ((size_t) a & 15); - if (offset != 0) - { - /* Load masks. */ - aligned = (const char *) ((size_t) a & -16L); - __m128i mask0 = _mm_load_si128 ((__m128i *) aligned); - - mask = __m128i_shift_right (mask0, offset); - - /* Find where the NULL terminator is. */ - int length = _mm_cmpistri (mask, mask, 0x3a); - if (length == 16 - offset) - { - /* There is no NULL terminator. */ - __m128i mask1 = _mm_load_si128 ((__m128i *) (aligned + 16)); - int index = _mm_cmpistri (mask1, mask1, 0x3a); - length += index; - - /* Don't use SSE4.2 if the length of A > 16. */ - if (length > 16) - return __strspn_sse2 (s, a); - - if (index != 0) - { - /* Combine mask0 and mask1. We could play games with - palignr, but frankly this data should be in L1 now - so do the merge via an unaligned load. */ - mask = _mm_loadu_si128 ((__m128i *) a); - } - } - } - else - { - /* A is aligned. */ - mask = _mm_load_si128 ((__m128i *) a); - - /* Find where the NULL terminator is. */ - int length = _mm_cmpistri (mask, mask, 0x3a); - if (length == 16) - { - /* There is no NULL terminator. Don't use SSE4.2 if the length - of A > 16. */ - if (a[16] != 0) - return __strspn_sse2 (s, a); - } - } - - offset = (int) ((size_t) s & 15); - if (offset != 0) - { - /* Check partial string. */ - aligned = (const char *) ((size_t) s & -16L); - __m128i value = _mm_load_si128 ((__m128i *) aligned); - - value = __m128i_shift_right (value, offset); - - int length = _mm_cmpistri (mask, value, 0x12); - /* No need to check CFlag since it is always 1. */ - if (length < 16 - offset) - return length; - /* Find where the NULL terminator is. */ - int index = _mm_cmpistri (value, value, 0x3a); - if (index < 16 - offset) - return length; - aligned += 16; - } - else - aligned = s; - - while (1) - { - __m128i value = _mm_load_si128 ((__m128i *) aligned); - int index = _mm_cmpistri (mask, value, 0x12); - int cflag = _mm_cmpistrc (mask, value, 0x12); - if (cflag) - return (size_t) (aligned + index - s); - aligned += 16; - } -} diff --git a/sysdeps/x86_64/multiarch/strspn.S b/sysdeps/x86_64/multiarch/strspn.S deleted file mode 100644 index adf7d9e533..0000000000 --- a/sysdeps/x86_64/multiarch/strspn.S +++ /dev/null @@ -1,50 +0,0 @@ -/* Multiple versions of strspn - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* Define multiple versions only for the definition in libc. */ -#if IS_IN (libc) - .text -ENTRY(strspn) - .type strspn, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - leaq __strspn_sse2(%rip), %rax - HAS_CPU_FEATURE (SSE4_2) - jz 2f - leaq __strspn_sse42(%rip), %rax -2: ret -END(strspn) - -# undef ENTRY -# define ENTRY(name) \ - .type __strspn_sse2, @function; \ - .globl __strspn_sse2; \ - .align 16; \ - __strspn_sse2: cfi_startproc; \ - CALL_MCOUNT -# undef END -# define END(name) \ - cfi_endproc; .size __strspn_sse2, .-__strspn_sse2 -#endif - -#include "../strspn.S" diff --git a/sysdeps/x86_64/multiarch/strstr-sse2-unaligned.S b/sysdeps/x86_64/multiarch/strstr-sse2-unaligned.S deleted file mode 100644 index 138979d10a..0000000000 --- a/sysdeps/x86_64/multiarch/strstr-sse2-unaligned.S +++ /dev/null @@ -1,374 +0,0 @@ -/* strstr with unaligned loads - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(__strstr_sse2_unaligned) - movzbl (%rsi), %eax - testb %al, %al - je L(empty) - movzbl 1(%rsi), %edx - testb %dl, %dl - je L(strchr) - movd %eax, %xmm1 - movd %edx, %xmm2 - movq %rdi, %rax - andl $4095, %eax - punpcklbw %xmm1, %xmm1 - cmpq $4031, %rax - punpcklbw %xmm2, %xmm2 - punpcklwd %xmm1, %xmm1 - punpcklwd %xmm2, %xmm2 - pshufd $0, %xmm1, %xmm1 - pshufd $0, %xmm2, %xmm2 - ja L(cross_page) - movdqu (%rdi), %xmm3 - pxor %xmm5, %xmm5 - movdqu 1(%rdi), %xmm4 - movdqa %xmm3, %xmm6 - pcmpeqb %xmm1, %xmm3 - pcmpeqb %xmm2, %xmm4 - movdqu 16(%rdi), %xmm0 - pcmpeqb %xmm5, %xmm6 - pminub %xmm4, %xmm3 - movdqa %xmm3, %xmm4 - movdqu 17(%rdi), %xmm3 - pcmpeqb %xmm0, %xmm5 - pcmpeqb %xmm2, %xmm3 - por %xmm6, %xmm4 - pcmpeqb %xmm1, %xmm0 - pminub %xmm3, %xmm0 - por %xmm5, %xmm0 - pmovmskb %xmm4, %r8d - pmovmskb %xmm0, %eax - salq $16, %rax - orq %rax, %r8 - je L(next_32_bytes) -L(next_pair_index): - bsf %r8, %rax - addq %rdi, %rax - cmpb $0, (%rax) - je L(zero1) - movzbl 2(%rsi), %edx - testb %dl, %dl - je L(found1) - cmpb 2(%rax), %dl - jne L(next_pair) - xorl %edx, %edx - jmp L(pair_loop_start) - - .p2align 4 -L(strchr): - movzbl %al, %esi - jmp __strchr_sse2 - - .p2align 4 -L(pair_loop): - addq $1, %rdx - cmpb 2(%rax,%rdx), %cl - jne L(next_pair) -L(pair_loop_start): - movzbl 3(%rsi,%rdx), %ecx - testb %cl, %cl - jne L(pair_loop) -L(found1): - ret -L(zero1): - xorl %eax, %eax - ret - - .p2align 4 -L(next_pair): - leaq -1(%r8), %rax - andq %rax, %r8 - jne L(next_pair_index) - - .p2align 4 -L(next_32_bytes): - movdqu 32(%rdi), %xmm3 - pxor %xmm5, %xmm5 - movdqu 33(%rdi), %xmm4 - movdqa %xmm3, %xmm6 - pcmpeqb %xmm1, %xmm3 - pcmpeqb %xmm2, %xmm4 - movdqu 48(%rdi), %xmm0 - pcmpeqb %xmm5, %xmm6 - pminub %xmm4, %xmm3 - movdqa %xmm3, %xmm4 - movdqu 49(%rdi), %xmm3 - pcmpeqb %xmm0, %xmm5 - pcmpeqb %xmm2, %xmm3 - por %xmm6, %xmm4 - pcmpeqb %xmm1, %xmm0 - pminub %xmm3, %xmm0 - por %xmm5, %xmm0 - pmovmskb %xmm4, %eax - salq $32, %rax - pmovmskb %xmm0, %r8d - salq $48, %r8 - orq %rax, %r8 - je L(loop_header) -L(next_pair2_index): - bsfq %r8, %rax - addq %rdi, %rax - cmpb $0, (%rax) - je L(zero2) - movzbl 2(%rsi), %edx - testb %dl, %dl - je L(found2) - cmpb 2(%rax), %dl - jne L(next_pair2) - xorl %edx, %edx - jmp L(pair_loop2_start) - - .p2align 4 -L(pair_loop2): - addq $1, %rdx - cmpb 2(%rax,%rdx), %cl - jne L(next_pair2) -L(pair_loop2_start): - movzbl 3(%rsi,%rdx), %ecx - testb %cl, %cl - jne L(pair_loop2) -L(found2): - ret - L(zero2): - xorl %eax, %eax - ret -L(empty): - mov %rdi, %rax - ret - - .p2align 4 -L(next_pair2): - leaq -1(%r8), %rax - andq %rax, %r8 - jne L(next_pair2_index) -L(loop_header): - movq $-512, %r11 - movq %rdi, %r9 - - pxor %xmm7, %xmm7 - andq $-64, %rdi - - .p2align 4 -L(loop): - movdqa 64(%rdi), %xmm3 - movdqu 63(%rdi), %xmm6 - movdqa %xmm3, %xmm0 - pxor %xmm2, %xmm3 - pxor %xmm1, %xmm6 - movdqa 80(%rdi), %xmm10 - por %xmm3, %xmm6 - pminub %xmm10, %xmm0 - movdqu 79(%rdi), %xmm3 - pxor %xmm2, %xmm10 - pxor %xmm1, %xmm3 - movdqa 96(%rdi), %xmm9 - por %xmm10, %xmm3 - pminub %xmm9, %xmm0 - pxor %xmm2, %xmm9 - movdqa 112(%rdi), %xmm8 - addq $64, %rdi - pminub %xmm6, %xmm3 - movdqu 31(%rdi), %xmm4 - pminub %xmm8, %xmm0 - pxor %xmm2, %xmm8 - pxor %xmm1, %xmm4 - por %xmm9, %xmm4 - pminub %xmm4, %xmm3 - movdqu 47(%rdi), %xmm5 - pxor %xmm1, %xmm5 - por %xmm8, %xmm5 - pminub %xmm5, %xmm3 - pminub %xmm3, %xmm0 - pcmpeqb %xmm7, %xmm0 - pmovmskb %xmm0, %eax - testl %eax, %eax - je L(loop) - pminub (%rdi), %xmm6 - pminub 32(%rdi),%xmm4 - pminub 48(%rdi),%xmm5 - pcmpeqb %xmm7, %xmm6 - pcmpeqb %xmm7, %xmm5 - pmovmskb %xmm6, %edx - movdqa 16(%rdi), %xmm8 - pcmpeqb %xmm7, %xmm4 - movdqu 15(%rdi), %xmm0 - pmovmskb %xmm5, %r8d - movdqa %xmm8, %xmm3 - pmovmskb %xmm4, %ecx - pcmpeqb %xmm1,%xmm0 - pcmpeqb %xmm2,%xmm3 - salq $32, %rcx - pcmpeqb %xmm7,%xmm8 - salq $48, %r8 - pminub %xmm0,%xmm3 - orq %rcx, %rdx - por %xmm3,%xmm8 - orq %rdx, %r8 - pmovmskb %xmm8, %eax - salq $16, %rax - orq %rax, %r8 - je L(loop) -L(next_pair_index3): - bsfq %r8, %rcx - addq %rdi, %rcx - cmpb $0, (%rcx) - je L(zero) - xorl %eax, %eax - movzbl 2(%rsi), %edx - testb %dl, %dl - je L(success3) - cmpb 1(%rcx), %dl - jne L(next_pair3) - jmp L(pair_loop_start3) - - .p2align 4 -L(pair_loop3): - addq $1, %rax - cmpb 1(%rcx,%rax), %dl - jne L(next_pair3) -L(pair_loop_start3): - movzbl 3(%rsi,%rax), %edx - testb %dl, %dl - jne L(pair_loop3) -L(success3): - lea -1(%rcx), %rax - ret - - .p2align 4 -L(next_pair3): - addq %rax, %r11 - movq %rdi, %rax - subq %r9, %rax - cmpq %r11, %rax - jl L(switch_strstr) - leaq -1(%r8), %rax - andq %rax, %r8 - jne L(next_pair_index3) - jmp L(loop) - - .p2align 4 -L(switch_strstr): - movq %rdi, %rdi - jmp __strstr_sse2 - - .p2align 4 -L(cross_page): - - movq %rdi, %rax - pxor %xmm0, %xmm0 - andq $-64, %rax - movdqa (%rax), %xmm3 - movdqu -1(%rax), %xmm4 - movdqa %xmm3, %xmm8 - movdqa 16(%rax), %xmm5 - pcmpeqb %xmm1, %xmm4 - pcmpeqb %xmm0, %xmm8 - pcmpeqb %xmm2, %xmm3 - movdqa %xmm5, %xmm7 - pminub %xmm4, %xmm3 - movdqu 15(%rax), %xmm4 - pcmpeqb %xmm0, %xmm7 - por %xmm3, %xmm8 - movdqa %xmm5, %xmm3 - movdqa 32(%rax), %xmm5 - pcmpeqb %xmm1, %xmm4 - pcmpeqb %xmm2, %xmm3 - movdqa %xmm5, %xmm6 - pmovmskb %xmm8, %ecx - pminub %xmm4, %xmm3 - movdqu 31(%rax), %xmm4 - por %xmm3, %xmm7 - movdqa %xmm5, %xmm3 - pcmpeqb %xmm0, %xmm6 - movdqa 48(%rax), %xmm5 - pcmpeqb %xmm1, %xmm4 - pmovmskb %xmm7, %r8d - pcmpeqb %xmm2, %xmm3 - pcmpeqb %xmm5, %xmm0 - pminub %xmm4, %xmm3 - movdqu 47(%rax), %xmm4 - por %xmm3, %xmm6 - movdqa %xmm5, %xmm3 - salq $16, %r8 - pcmpeqb %xmm1, %xmm4 - pcmpeqb %xmm2, %xmm3 - pmovmskb %xmm6, %r10d - pminub %xmm4, %xmm3 - por %xmm3, %xmm0 - salq $32, %r10 - orq %r10, %r8 - orq %rcx, %r8 - movl %edi, %ecx - pmovmskb %xmm0, %edx - subl %eax, %ecx - salq $48, %rdx - orq %rdx, %r8 - shrq %cl, %r8 - je L(loop_header) -L(next_pair_index4): - bsfq %r8, %rax - addq %rdi, %rax - cmpb $0, (%rax) - je L(zero) - - cmpq %rax,%rdi - je L(next_pair4) - - movzbl 2(%rsi), %edx - testb %dl, %dl - je L(found3) - cmpb 1(%rax), %dl - jne L(next_pair4) - xorl %edx, %edx - jmp L(pair_loop_start4) - - .p2align 4 -L(pair_loop4): - addq $1, %rdx - cmpb 1(%rax,%rdx), %cl - jne L(next_pair4) -L(pair_loop_start4): - movzbl 3(%rsi,%rdx), %ecx - testb %cl, %cl - jne L(pair_loop4) -L(found3): - subq $1, %rax - ret - - .p2align 4 -L(next_pair4): - leaq -1(%r8), %rax - andq %rax, %r8 - jne L(next_pair_index4) - jmp L(loop_header) - - .p2align 4 -L(found): - rep - ret - - .p2align 4 -L(zero): - xorl %eax, %eax - ret - - -END(__strstr_sse2_unaligned) diff --git a/sysdeps/x86_64/multiarch/strstr.c b/sysdeps/x86_64/multiarch/strstr.c deleted file mode 100644 index a7d181d797..0000000000 --- a/sysdeps/x86_64/multiarch/strstr.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Multiple versions of strstr. - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Redefine strstr so that the compiler won't complain about the type - mismatch with the IFUNC selector in strong_alias, below. */ -#undef strstr -#define strstr __redirect_strstr -#include -#undef strstr - -#define STRSTR __strstr_sse2 -#ifdef SHARED -# undef libc_hidden_builtin_def -# define libc_hidden_builtin_def(name) \ - __hidden_ver1 (__strstr_sse2, __GI_strstr, __strstr_sse2); -#endif - -#include "string/strstr.c" - -extern __typeof (__redirect_strstr) __strstr_sse2_unaligned attribute_hidden; -extern __typeof (__redirect_strstr) __strstr_sse2 attribute_hidden; - -#include "init-arch.h" - -/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle - ifunc symbol properly. */ -extern __typeof (__redirect_strstr) __libc_strstr; -libc_ifunc (__libc_strstr, - HAS_ARCH_FEATURE (Fast_Unaligned_Load) - ? __strstr_sse2_unaligned - : __strstr_sse2) - -#undef strstr -strong_alias (__libc_strstr, strstr) diff --git a/sysdeps/x86_64/multiarch/test-multiarch.c b/sysdeps/x86_64/multiarch/test-multiarch.c deleted file mode 100644 index 597d64e1e8..0000000000 --- a/sysdeps/x86_64/multiarch/test-multiarch.c +++ /dev/null @@ -1,96 +0,0 @@ -/* Test CPU feature data. - This file is part of the GNU C Library. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -static char *cpu_flags; - -/* Search for flags in /proc/cpuinfo and store line - in cpu_flags. */ -void -get_cpuinfo (void) -{ - FILE *f; - char *line = NULL; - size_t len = 0; - ssize_t read; - - f = fopen ("/proc/cpuinfo", "r"); - if (f == NULL) - { - printf ("cannot open /proc/cpuinfo\n"); - exit (1); - } - - while ((read = getline (&line, &len, f)) != -1) - { - if (strncmp (line, "flags", 5) == 0) - { - cpu_flags = strdup (line); - break; - } - } - fclose (f); - free (line); -} - -int -check_proc (const char *proc_name, int flag, const char *name) -{ - int found = 0; - - printf ("Checking %s:\n", name); - printf (" init-arch %d\n", flag); - if (strstr (cpu_flags, proc_name) != NULL) - found = 1; - printf (" cpuinfo (%s) %d\n", proc_name, found); - - if (found != flag) - printf (" *** failure ***\n"); - - return (found != flag); -} - -static int -do_test (int argc, char **argv) -{ - int fails; - - get_cpuinfo (); - fails = check_proc ("avx", HAS_ARCH_FEATURE (AVX_Usable), - "HAS_ARCH_FEATURE (AVX_Usable)"); - fails += check_proc ("fma4", HAS_ARCH_FEATURE (FMA4_Usable), - "HAS_ARCH_FEATURE (FMA4_Usable)"); - fails += check_proc ("sse4_2", HAS_CPU_FEATURE (SSE4_2), - "HAS_CPU_FEATURE (SSE4_2)"); - fails += check_proc ("sse4_1", HAS_CPU_FEATURE (SSE4_1) - , "HAS_CPU_FEATURE (SSE4_1)"); - fails += check_proc ("ssse3", HAS_CPU_FEATURE (SSSE3), - "HAS_CPU_FEATURE (SSSE3)"); - fails += check_proc ("popcnt", HAS_CPU_FEATURE (POPCOUNT), - "HAS_CPU_FEATURE (POPCOUNT)"); - - printf ("%d differences between /proc/cpuinfo and glibc code.\n", fails); - - return (fails != 0); -} - -#include "../../../test-skeleton.c" diff --git a/sysdeps/x86_64/multiarch/varshift.c b/sysdeps/x86_64/multiarch/varshift.c deleted file mode 100644 index 1c3e34845d..0000000000 --- a/sysdeps/x86_64/multiarch/varshift.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Helper for variable shifts of SSE registers. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "varshift.h" - -const int8_t ___m128i_shift_right[31] attribute_hidden = - { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - }; diff --git a/sysdeps/x86_64/multiarch/varshift.h b/sysdeps/x86_64/multiarch/varshift.h deleted file mode 100644 index 07bb76c4bf..0000000000 --- a/sysdeps/x86_64/multiarch/varshift.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Helper for variable shifts of SSE registers. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -extern const int8_t ___m128i_shift_right[31] attribute_hidden; - -static __inline__ __m128i -__m128i_shift_right (__m128i value, unsigned long int offset) -{ - return _mm_shuffle_epi8 (value, - _mm_loadu_si128 ((__m128i *) (___m128i_shift_right - + offset))); -} diff --git a/sysdeps/x86_64/multiarch/wcscpy-c.c b/sysdeps/x86_64/multiarch/wcscpy-c.c deleted file mode 100644 index a51a83a9be..0000000000 --- a/sysdeps/x86_64/multiarch/wcscpy-c.c +++ /dev/null @@ -1,5 +0,0 @@ -#if IS_IN (libc) -# define wcscpy __wcscpy_sse2 -#endif - -#include "wcsmbs/wcscpy.c" diff --git a/sysdeps/x86_64/multiarch/wcscpy-ssse3.S b/sysdeps/x86_64/multiarch/wcscpy-ssse3.S deleted file mode 100644 index 53857ce4f5..0000000000 --- a/sysdeps/x86_64/multiarch/wcscpy-ssse3.S +++ /dev/null @@ -1,552 +0,0 @@ -/* wcscpy with SSSE3 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) -# include - - .section .text.ssse3,"ax",@progbits -ENTRY (__wcscpy_ssse3) - - mov %rsi, %rcx - mov %rdi, %rdx - - cmpl $0, (%rcx) - jz L(Exit4) - cmpl $0, 4(%rcx) - jz L(Exit8) - cmpl $0, 8(%rcx) - jz L(Exit12) - cmpl $0, 12(%rcx) - jz L(Exit16) - - lea 16(%rcx), %rsi - and $-16, %rsi - - pxor %xmm0, %xmm0 - mov (%rcx), %r9 - mov %r9, (%rdx) - - pcmpeqd (%rsi), %xmm0 - mov 8(%rcx), %r9 - mov %r9, 8(%rdx) - - pmovmskb %xmm0, %rax - sub %rcx, %rsi - - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - mov %rdx, %rax - lea 16(%rdx), %rdx - and $-16, %rdx - sub %rdx, %rax - sub %rax, %rcx - mov %rcx, %rax - and $0xf, %rax - mov $0, %rsi - -/* case: rcx_offset == rdx_offset */ - - jz L(Align16Both) - - cmp $4, %rax - je L(Shl4) - cmp $8, %rax - je L(Shl8) - jmp L(Shl12) - -L(Align16Both): - movaps (%rcx), %xmm1 - movaps 16(%rcx), %xmm2 - movaps %xmm1, (%rdx) - pcmpeqd %xmm2, %xmm0 - pmovmskb %xmm0, %rax - lea 16(%rsi), %rsi - - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%rcx, %rsi), %xmm3 - movaps %xmm2, (%rdx, %rsi) - pcmpeqd %xmm3, %xmm0 - pmovmskb %xmm0, %rax - lea 16(%rsi), %rsi - - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%rcx, %rsi), %xmm4 - movaps %xmm3, (%rdx, %rsi) - pcmpeqd %xmm4, %xmm0 - pmovmskb %xmm0, %rax - lea 16(%rsi), %rsi - - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%rcx, %rsi), %xmm1 - movaps %xmm4, (%rdx, %rsi) - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm0, %rax - lea 16(%rsi), %rsi - - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%rcx, %rsi), %xmm2 - movaps %xmm1, (%rdx, %rsi) - pcmpeqd %xmm2, %xmm0 - pmovmskb %xmm0, %rax - lea 16(%rsi), %rsi - - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - movaps 16(%rcx, %rsi), %xmm3 - movaps %xmm2, (%rdx, %rsi) - pcmpeqd %xmm3, %xmm0 - pmovmskb %xmm0, %rax - lea 16(%rsi), %rsi - - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - movaps %xmm3, (%rdx, %rsi) - mov %rcx, %rax - lea 16(%rcx, %rsi), %rcx - and $-0x40, %rcx - sub %rcx, %rax - sub %rax, %rdx - - mov $-0x40, %rsi - - .p2align 4 -L(Aligned64Loop): - movaps (%rcx), %xmm2 - movaps %xmm2, %xmm4 - movaps 16(%rcx), %xmm5 - movaps 32(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 48(%rcx), %xmm7 - pminub %xmm5, %xmm2 - pminub %xmm7, %xmm3 - pminub %xmm2, %xmm3 - pcmpeqd %xmm0, %xmm3 - pmovmskb %xmm3, %rax - lea 64(%rdx), %rdx - lea 64(%rcx), %rcx - test %rax, %rax - jnz L(Aligned64Leave) - movaps %xmm4, -64(%rdx) - movaps %xmm5, -48(%rdx) - movaps %xmm6, -32(%rdx) - movaps %xmm7, -16(%rdx) - jmp L(Aligned64Loop) - -L(Aligned64Leave): - pcmpeqd %xmm4, %xmm0 - pmovmskb %xmm0, %rax - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - pcmpeqd %xmm5, %xmm0 - - pmovmskb %xmm0, %rax - movaps %xmm4, -64(%rdx) - test %rax, %rax - lea 16(%rsi), %rsi - jnz L(CopyFrom1To16Bytes) - - pcmpeqd %xmm6, %xmm0 - - pmovmskb %xmm0, %rax - movaps %xmm5, -48(%rdx) - test %rax, %rax - lea 16(%rsi), %rsi - jnz L(CopyFrom1To16Bytes) - - movaps %xmm6, -32(%rdx) - pcmpeqd %xmm7, %xmm0 - - pmovmskb %xmm0, %rax - lea 16(%rsi), %rsi - test %rax, %rax - jnz L(CopyFrom1To16Bytes) - - mov $-0x40, %rsi - movaps %xmm7, -16(%rdx) - jmp L(Aligned64Loop) - - .p2align 4 -L(Shl4): - movaps -4(%rcx), %xmm1 - movaps 12(%rcx), %xmm2 -L(Shl4Start): - pcmpeqd %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 - - test %rax, %rax - jnz L(Shl4LoopExit) - - palignr $4, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 28(%rcx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 - - test %rax, %rax - jnz L(Shl4LoopExit) - - palignr $4, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 28(%rcx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 - - test %rax, %rax - jnz L(Shl4LoopExit) - - palignr $4, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 28(%rcx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - - test %rax, %rax - jnz L(Shl4LoopExit) - - palignr $4, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 28(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -12(%rcx), %rcx - sub %rax, %rdx - - movaps -4(%rcx), %xmm1 - - .p2align 4 -L(Shl4LoopStart): - movaps 12(%rcx), %xmm2 - movaps 28(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 44(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 60(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqd %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $4, %xmm4, %xmm5 - test %rax, %rax - palignr $4, %xmm3, %xmm4 - jnz L(Shl4Start) - - palignr $4, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $4, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl4LoopStart) - -L(Shl4LoopExit): - movdqu -4(%rcx), %xmm1 - mov $12, %rsi - movdqu %xmm1, -4(%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl8): - movaps -8(%rcx), %xmm1 - movaps 8(%rcx), %xmm2 -L(Shl8Start): - pcmpeqd %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 - - test %rax, %rax - jnz L(Shl8LoopExit) - - palignr $8, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 24(%rcx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 - - test %rax, %rax - jnz L(Shl8LoopExit) - - palignr $8, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 24(%rcx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 - - test %rax, %rax - jnz L(Shl8LoopExit) - - palignr $8, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 24(%rcx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - - test %rax, %rax - jnz L(Shl8LoopExit) - - palignr $8, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 24(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -8(%rcx), %rcx - sub %rax, %rdx - - movaps -8(%rcx), %xmm1 - - .p2align 4 -L(Shl8LoopStart): - movaps 8(%rcx), %xmm2 - movaps 24(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 40(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 56(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqd %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $8, %xmm4, %xmm5 - test %rax, %rax - palignr $8, %xmm3, %xmm4 - jnz L(Shl8Start) - - palignr $8, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $8, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl8LoopStart) - -L(Shl8LoopExit): - mov (%rcx), %r9 - mov $8, %rsi - mov %r9, (%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(Shl12): - movaps -12(%rcx), %xmm1 - movaps 4(%rcx), %xmm2 -L(Shl12Start): - pcmpeqd %xmm2, %xmm0 - pmovmskb %xmm0, %rax - movaps %xmm2, %xmm3 - - test %rax, %rax - jnz L(Shl12LoopExit) - - palignr $12, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 20(%rcx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm1 - - test %rax, %rax - jnz L(Shl12LoopExit) - - palignr $12, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - movaps 20(%rcx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - movaps %xmm2, %xmm3 - - test %rax, %rax - jnz L(Shl12LoopExit) - - palignr $12, %xmm1, %xmm2 - movaps %xmm2, (%rdx) - movaps 20(%rcx), %xmm2 - - pcmpeqd %xmm2, %xmm0 - lea 16(%rdx), %rdx - pmovmskb %xmm0, %rax - lea 16(%rcx), %rcx - - test %rax, %rax - jnz L(Shl12LoopExit) - - palignr $12, %xmm3, %xmm2 - movaps %xmm2, (%rdx) - lea 20(%rcx), %rcx - lea 16(%rdx), %rdx - - mov %rcx, %rax - and $-0x40, %rcx - sub %rcx, %rax - lea -4(%rcx), %rcx - sub %rax, %rdx - - movaps -12(%rcx), %xmm1 - - .p2align 4 -L(Shl12LoopStart): - movaps 4(%rcx), %xmm2 - movaps 20(%rcx), %xmm3 - movaps %xmm3, %xmm6 - movaps 36(%rcx), %xmm4 - movaps %xmm4, %xmm7 - movaps 52(%rcx), %xmm5 - pminub %xmm2, %xmm6 - pminub %xmm5, %xmm7 - pminub %xmm6, %xmm7 - pcmpeqd %xmm0, %xmm7 - pmovmskb %xmm7, %rax - movaps %xmm5, %xmm7 - palignr $12, %xmm4, %xmm5 - test %rax, %rax - palignr $12, %xmm3, %xmm4 - jnz L(Shl12Start) - palignr $12, %xmm2, %xmm3 - lea 64(%rcx), %rcx - palignr $12, %xmm1, %xmm2 - movaps %xmm7, %xmm1 - movaps %xmm5, 48(%rdx) - movaps %xmm4, 32(%rdx) - movaps %xmm3, 16(%rdx) - movaps %xmm2, (%rdx) - lea 64(%rdx), %rdx - jmp L(Shl12LoopStart) - -L(Shl12LoopExit): - mov (%rcx), %r9d - mov $4, %rsi - mov %r9d, (%rdx) - jmp L(CopyFrom1To16Bytes) - - .p2align 4 -L(CopyFrom1To16Bytes): - add %rsi, %rdx - add %rsi, %rcx - - test %al, %al - jz L(ExitHigh) - test $0x01, %al - jnz L(Exit4) - - mov (%rcx), %rax - mov %rax, (%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(ExitHigh): - test $0x01, %ah - jnz L(Exit12) - - mov (%rcx), %rax - mov %rax, (%rdx) - mov 8(%rcx), %rax - mov %rax, 8(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(Exit4): - movl (%rcx), %eax - movl %eax, (%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(Exit8): - mov (%rcx), %rax - mov %rax, (%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(Exit12): - mov (%rcx), %rax - mov %rax, (%rdx) - mov 8(%rcx), %eax - mov %eax, 8(%rdx) - mov %rdi, %rax - ret - - .p2align 4 -L(Exit16): - mov (%rcx), %rax - mov %rax, (%rdx) - mov 8(%rcx), %rax - mov %rax, 8(%rdx) - mov %rdi, %rax - ret - -END(__wcscpy_ssse3) -#endif diff --git a/sysdeps/x86_64/multiarch/wcscpy.S b/sysdeps/x86_64/multiarch/wcscpy.S deleted file mode 100644 index 9150ab6d18..0000000000 --- a/sysdeps/x86_64/multiarch/wcscpy.S +++ /dev/null @@ -1,40 +0,0 @@ -/* Multiple versions of wcscpy - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in libc. */ -#if IS_IN (libc) - - .text -ENTRY(wcscpy) - .type wcscpy, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - HAS_CPU_FEATURE (SSSE3) - jnz 2f - leaq __wcscpy_sse2(%rip), %rax - ret - -2: leaq __wcscpy_ssse3(%rip), %rax - ret - -END(wcscpy) -#endif diff --git a/sysdeps/x86_64/multiarch/wcsnlen-c.c b/sysdeps/x86_64/multiarch/wcsnlen-c.c deleted file mode 100644 index e1ec7cfbb5..0000000000 --- a/sysdeps/x86_64/multiarch/wcsnlen-c.c +++ /dev/null @@ -1,9 +0,0 @@ -#if IS_IN (libc) -# include - -# define WCSNLEN __wcsnlen_sse2 - -extern __typeof (wcsnlen) __wcsnlen_sse2; -#endif - -#include "wcsmbs/wcsnlen.c" diff --git a/sysdeps/x86_64/multiarch/wcsnlen-sse4_1.S b/sysdeps/x86_64/multiarch/wcsnlen-sse4_1.S deleted file mode 100644 index a8cab0cb00..0000000000 --- a/sysdeps/x86_64/multiarch/wcsnlen-sse4_1.S +++ /dev/null @@ -1,5 +0,0 @@ -#define AS_WCSLEN -#define AS_STRNLEN -#define strlen __wcsnlen_sse4_1 - -#include "../strlen.S" diff --git a/sysdeps/x86_64/multiarch/wcsnlen.c b/sysdeps/x86_64/multiarch/wcsnlen.c deleted file mode 100644 index 304f62eec3..0000000000 --- a/sysdeps/x86_64/multiarch/wcsnlen.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Multiple versions of wcsnlen. - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for the definition in libc. */ -#if IS_IN (libc) -# define __wcsnlen __redirect_wcsnlen -# include -# undef __wcsnlen - -# define SYMBOL_NAME wcsnlen -# include - -extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden; -extern __typeof (REDIRECT_NAME) OPTIMIZE (sse4_1) attribute_hidden; - -static inline void * -IFUNC_SELECTOR (void) -{ - const struct cpu_features* cpu_features = __get_cpu_features (); - - if (CPU_FEATURES_CPU_P (cpu_features, SSE4_1)) - return OPTIMIZE (sse4_1); - - return OPTIMIZE (sse2); -} - -libc_ifunc_redirected (__redirect_wcsnlen, __wcsnlen, IFUNC_SELECTOR ()); -weak_alias (__wcsnlen, wcsnlen); -#endif diff --git a/sysdeps/x86_64/multiarch/wmemcmp-avx2-movbe.S b/sysdeps/x86_64/multiarch/wmemcmp-avx2-movbe.S deleted file mode 100644 index bfa1a16a35..0000000000 --- a/sysdeps/x86_64/multiarch/wmemcmp-avx2-movbe.S +++ /dev/null @@ -1,4 +0,0 @@ -#define MEMCMP __wmemcmp_avx2_movbe -#define USE_AS_WMEMCMP 1 - -#include "memcmp-avx2-movbe.S" diff --git a/sysdeps/x86_64/multiarch/wmemcmp-c.c b/sysdeps/x86_64/multiarch/wmemcmp-c.c deleted file mode 100644 index 46b6715e18..0000000000 --- a/sysdeps/x86_64/multiarch/wmemcmp-c.c +++ /dev/null @@ -1,9 +0,0 @@ -#if IS_IN (libc) -# include - -# define WMEMCMP __wmemcmp_sse2 - -extern __typeof (wmemcmp) __wmemcmp_sse2; -#endif - -#include "wcsmbs/wmemcmp.c" diff --git a/sysdeps/x86_64/multiarch/wmemcmp-sse4.S b/sysdeps/x86_64/multiarch/wmemcmp-sse4.S deleted file mode 100644 index b07973a4f6..0000000000 --- a/sysdeps/x86_64/multiarch/wmemcmp-sse4.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_WMEMCMP 1 -#define MEMCMP __wmemcmp_sse4_1 - -#include "memcmp-sse4.S" diff --git a/sysdeps/x86_64/multiarch/wmemcmp-ssse3.S b/sysdeps/x86_64/multiarch/wmemcmp-ssse3.S deleted file mode 100644 index a41ef95fc1..0000000000 --- a/sysdeps/x86_64/multiarch/wmemcmp-ssse3.S +++ /dev/null @@ -1,4 +0,0 @@ -#define USE_AS_WMEMCMP 1 -#define MEMCMP __wmemcmp_ssse3 - -#include "memcmp-ssse3.S" diff --git a/sysdeps/x86_64/multiarch/wmemcmp.S b/sysdeps/x86_64/multiarch/wmemcmp.S deleted file mode 100644 index 94b25a214c..0000000000 --- a/sysdeps/x86_64/multiarch/wmemcmp.S +++ /dev/null @@ -1,55 +0,0 @@ -/* Multiple versions of wmemcmp - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Define multiple versions only for the definition in libc. */ -#if IS_IN (libc) - .text -ENTRY(wmemcmp) - .type wmemcmp, @gnu_indirect_function - LOAD_RTLD_GLOBAL_RO_RDX - HAS_ARCH_FEATURE (Prefer_No_VZEROUPPER) - jnz 1f - HAS_ARCH_FEATURE (AVX2_Usable) - jz 1f - HAS_CPU_FEATURE (MOVBE) - jz 1f - HAS_ARCH_FEATURE (AVX_Fast_Unaligned_Load) - jz 1f - leaq __wmemcmp_avx2_movbe(%rip), %rax - ret - -1: HAS_CPU_FEATURE (SSSE3) - jnz 2f - leaq __wmemcmp_sse2(%rip), %rax - ret - -2: HAS_CPU_FEATURE (SSE4_1) - jz 3f - leaq __wmemcmp_sse4_1(%rip), %rax - ret - -3: leaq __wmemcmp_ssse3(%rip), %rax - ret - -END(wmemcmp) -#endif diff --git a/sysdeps/x86_64/multiarch/wmemset.c b/sysdeps/x86_64/multiarch/wmemset.c deleted file mode 100644 index dd35be6e49..0000000000 --- a/sysdeps/x86_64/multiarch/wmemset.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Multiple versions of wmemset. - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for the definition in libc. */ -#if IS_IN (libc) -# define wmemset __redirect_wmemset -# define __wmemset __redirect___wmemset -# include -# undef wmemset -# undef __wmemset - -# define SYMBOL_NAME wmemset -# include "ifunc-wmemset.h" - -libc_ifunc_redirected (__redirect_wmemset, __wmemset, IFUNC_SELECTOR ()); -weak_alias (__wmemset, wmemset) -#endif diff --git a/sysdeps/x86_64/multiarch/wmemset_chk-nonshared.S b/sysdeps/x86_64/multiarch/wmemset_chk-nonshared.S deleted file mode 100644 index 0a537fe272..0000000000 --- a/sysdeps/x86_64/multiarch/wmemset_chk-nonshared.S +++ /dev/null @@ -1,21 +0,0 @@ -/* Non-shared version of wmemset_chk for x86-64. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if IS_IN (libc) && !defined SHARED -# include "../wmemset_chk.S" -#endif diff --git a/sysdeps/x86_64/multiarch/wmemset_chk.c b/sysdeps/x86_64/multiarch/wmemset_chk.c deleted file mode 100644 index d3ded5595b..0000000000 --- a/sysdeps/x86_64/multiarch/wmemset_chk.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Multiple versions of wmemset_chk. - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Define multiple versions only for the definition in libc.so. */ -#if IS_IN (libc) && defined SHARED -# define __wmemset_chk __redirect_wmemset_chk -# include -# undef __wmemset_chk - -# define SYMBOL_NAME wmemset_chk -# include "ifunc-wmemset.h" - -libc_ifunc_redirected (__redirect_wmemset_chk, __wmemset_chk, - IFUNC_SELECTOR ()); -#endif diff --git a/sysdeps/x86_64/nptl/Makefile b/sysdeps/x86_64/nptl/Makefile deleted file mode 100644 index bad3831869..0000000000 --- a/sysdeps/x86_64/nptl/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (C) 2002-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif diff --git a/sysdeps/x86_64/nptl/pthread_spin_init.c b/sysdeps/x86_64/nptl/pthread_spin_init.c deleted file mode 100644 index f249c6fef5..0000000000 --- a/sysdeps/x86_64/nptl/pthread_spin_init.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/x86_64/nptl/pthread_spin_lock.S b/sysdeps/x86_64/nptl/pthread_spin_lock.S deleted file mode 100644 index 36ba181d9b..0000000000 --- a/sysdeps/x86_64/nptl/pthread_spin_lock.S +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -ENTRY(pthread_spin_lock) -1: LOCK - decl 0(%rdi) - jne 2f - xor %eax, %eax - ret - - .align 16 -2: rep - nop - cmpl $0, 0(%rdi) - jg 1b - jmp 2b -END(pthread_spin_lock) diff --git a/sysdeps/x86_64/nptl/pthread_spin_trylock.S b/sysdeps/x86_64/nptl/pthread_spin_trylock.S deleted file mode 100644 index 3419f1fec8..0000000000 --- a/sysdeps/x86_64/nptl/pthread_spin_trylock.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - - -#ifdef UP -# define LOCK -#else -# define LOCK lock -#endif - -ENTRY(pthread_spin_trylock) - movl $1, %eax - xorl %ecx, %ecx - LOCK - cmpxchgl %ecx, (%rdi) - movl $EBUSY, %eax - cmovel %ecx, %eax - retq -END(pthread_spin_trylock) diff --git a/sysdeps/x86_64/nptl/pthread_spin_unlock.S b/sysdeps/x86_64/nptl/pthread_spin_unlock.S deleted file mode 100644 index 58f9388a36..0000000000 --- a/sysdeps/x86_64/nptl/pthread_spin_unlock.S +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -ENTRY(pthread_spin_unlock) - movl $1, (%rdi) - xorl %eax, %eax - retq -END(pthread_spin_unlock) - - /* The implementation of pthread_spin_init is identical. */ - .globl pthread_spin_init -pthread_spin_init = pthread_spin_unlock diff --git a/sysdeps/x86_64/nptl/pthreaddef.h b/sysdeps/x86_64/nptl/pthreaddef.h deleted file mode 100644 index f248ecac80..0000000000 --- a/sysdeps/x86_64/nptl/pthreaddef.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. SSE requires 16 - bytes. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB. - - We need to store post-AVX vector registers in the TCB and we want the - storage to be aligned to at least 32 bytes. - - Some processors such as Intel Atom pay a big penalty on every - access using a segment override if that segment's base is not - aligned to the size of a cache line. (See Intel 64 and IA-32 - Architectures Optimization Reference Manual, section 13.3.3.3, - "Segment Base".) On such machines, a cache line is 64 bytes. */ -#define TCB_ALIGNMENT 64 - - -/* Location of current stack frame. The frame pointer is not usable. */ -#define CURRENT_STACK_FRAME \ - ({ register char *frame __asm__("rsp"); frame; }) diff --git a/sysdeps/x86_64/nptl/tcb-offsets.sym b/sysdeps/x86_64/nptl/tcb-offsets.sym deleted file mode 100644 index 8a25c482cb..0000000000 --- a/sysdeps/x86_64/nptl/tcb-offsets.sym +++ /dev/null @@ -1,27 +0,0 @@ -#include -#include -#include - -RESULT offsetof (struct pthread, result) -TID offsetof (struct pthread, tid) -CANCELHANDLING offsetof (struct pthread, cancelhandling) -CLEANUP_JMP_BUF offsetof (struct pthread, cleanup_jmp_buf) -CLEANUP offsetof (struct pthread, cleanup) -CLEANUP_PREV offsetof (struct _pthread_cleanup_buffer, __prev) -MUTEX_FUTEX offsetof (pthread_mutex_t, __data.__lock) -MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads) -POINTER_GUARD offsetof (tcbhead_t, pointer_guard) -VGETCPU_CACHE_OFFSET offsetof (tcbhead_t, vgetcpu_cache) -#ifndef __ASSUME_PRIVATE_FUTEX -PRIVATE_FUTEX offsetof (tcbhead_t, private_futex) -#endif - --- Not strictly offsets, but these values are also used in the TCB. -TCB_CANCELSTATE_BITMASK CANCELSTATE_BITMASK -TCB_CANCELTYPE_BITMASK CANCELTYPE_BITMASK -TCB_CANCELING_BITMASK CANCELING_BITMASK -TCB_CANCELED_BITMASK CANCELED_BITMASK -TCB_EXITING_BITMASK EXITING_BITMASK -TCB_CANCEL_RESTMASK CANCEL_RESTMASK -TCB_TERMINATED_BITMASK TERMINATED_BITMASK -TCB_PTHREAD_CANCELED PTHREAD_CANCELED diff --git a/sysdeps/x86_64/nptl/tls.h b/sysdeps/x86_64/nptl/tls.h deleted file mode 100644 index 9b8ad82550..0000000000 --- a/sysdeps/x86_64/nptl/tls.h +++ /dev/null @@ -1,367 +0,0 @@ -/* Definition for thread-local data handling. nptl/x86_64 version. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _TLS_H -#define _TLS_H 1 - -#ifndef __ASSEMBLER__ -# include /* For ARCH_SET_FS. */ -# include -# include -# include -# include -# include -# include /* For cast_to_integer. */ -# include -# include - -/* Replacement type for __m128 since this file is included by ld.so, - which is compiled with -mno-sse. It must not change the alignment - of rtld_savespace_sse. */ -typedef struct -{ - int i[4]; -} __128bits; - - -typedef struct -{ - void *tcb; /* Pointer to the TCB. Not necessarily the - thread descriptor used by libpthread. */ - dtv_t *dtv; - void *self; /* Pointer to the thread descriptor. */ - int multiple_threads; - int gscope_flag; - uintptr_t sysinfo; - uintptr_t stack_guard; - uintptr_t pointer_guard; - unsigned long int vgetcpu_cache[2]; -# ifndef __ASSUME_PRIVATE_FUTEX - int private_futex; -# else - int __glibc_reserved1; -# endif - int __glibc_unused1; - /* Reservation of some values for the TM ABI. */ - void *__private_tm[4]; - /* GCC split stack support. */ - void *__private_ss; - long int __glibc_reserved2; - /* Must be kept even if it is no longer used by glibc since programs, - like AddressSanitizer, depend on the size of tcbhead_t. */ - __128bits __glibc_unused2[8][4] __attribute__ ((aligned (32))); - - void *__padding[8]; -} tcbhead_t; - -#else /* __ASSEMBLER__ */ -# include -#endif - - -/* Alignment requirement for the stack. */ -#define STACK_ALIGN 16 - - -#ifndef __ASSEMBLER__ -/* Get system call information. */ -# include - -#ifndef LOCK_PREFIX -# ifdef UP -# define LOCK_PREFIX /* nothing */ -# else -# define LOCK_PREFIX "lock;" -# endif -#endif - -/* This is the size of the initial TCB. Can't be just sizeof (tcbhead_t), - because NPTL getpid, __libc_alloca_cutoff etc. need (almost) the whole - struct pthread even when not linked with -lpthread. */ -# define TLS_INIT_TCB_SIZE sizeof (struct pthread) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE sizeof (struct pthread) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* The TCB can have any size and the memory following the address the - thread pointer points to is unspecified. Allocate the TCB there. */ -# define TLS_TCB_AT_TP 1 -# define TLS_DTV_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include - - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(descr, dtvp) \ - ((tcbhead_t *) (descr))->dtv = (dtvp) + 1 - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtvp) \ - ({ struct pthread *__pd; \ - THREAD_SETMEM (__pd, header.dtv, (dtvp)); }) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(descr) \ - (((tcbhead_t *) (descr))->dtv) - - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. - - We have to make the syscall for both uses of the macro since the - address might be (and probably is) different. */ -# define TLS_INIT_TP(thrdescr) \ - ({ void *_thrdescr = (thrdescr); \ - tcbhead_t *_head = _thrdescr; \ - int _result; \ - \ - _head->tcb = _thrdescr; \ - /* For now the thread descriptor is at the same address. */ \ - _head->self = _thrdescr; \ - \ - /* It is a simple syscall to set the %fs value for the thread. */ \ - asm volatile ("syscall" \ - : "=a" (_result) \ - : "0" ((unsigned long int) __NR_arch_prctl), \ - "D" ((unsigned long int) ARCH_SET_FS), \ - "S" (_thrdescr) \ - : "memory", "cc", "r11", "cx"); \ - \ - _result ? "cannot set %fs base address for thread-local storage" : 0; \ - }) - -# define TLS_DEFINE_INIT_TP(tp, pd) void *tp = (pd) - - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - ({ struct pthread *__pd; \ - THREAD_GETMEM (__pd, header.dtv); }) - - -/* Return the thread descriptor for the current thread. - - The contained asm must *not* be marked volatile since otherwise - assignments like - pthread_descr self = thread_self(); - do not get optimized away. */ -# define THREAD_SELF \ - ({ struct pthread *__self; \ - asm ("mov %%fs:%c1,%0" : "=r" (__self) \ - : "i" (offsetof (struct pthread, header.self))); \ - __self;}) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF_INCLUDE /* For the FS constant. */ -# define DB_THREAD_SELF CONST_THREAD_AREA (64, FS) - -/* Read member of the thread descriptor directly. */ -# define THREAD_GETMEM(descr, member) \ - ({ __typeof (descr->member) __value; \ - if (sizeof (__value) == 1) \ - asm volatile ("movb %%fs:%P2,%b0" \ - : "=q" (__value) \ - : "0" (0), "i" (offsetof (struct pthread, member))); \ - else if (sizeof (__value) == 4) \ - asm volatile ("movl %%fs:%P1,%0" \ - : "=r" (__value) \ - : "i" (offsetof (struct pthread, member))); \ - else \ - { \ - if (sizeof (__value) != 8) \ - /* There should not be any value with a size other than 1, \ - 4 or 8. */ \ - abort (); \ - \ - asm volatile ("movq %%fs:%P1,%q0" \ - : "=r" (__value) \ - : "i" (offsetof (struct pthread, member))); \ - } \ - __value; }) - - -/* Same as THREAD_GETMEM, but the member offset can be non-constant. */ -# define THREAD_GETMEM_NC(descr, member, idx) \ - ({ __typeof (descr->member[0]) __value; \ - if (sizeof (__value) == 1) \ - asm volatile ("movb %%fs:%P2(%q3),%b0" \ - : "=q" (__value) \ - : "0" (0), "i" (offsetof (struct pthread, member[0])), \ - "r" (idx)); \ - else if (sizeof (__value) == 4) \ - asm volatile ("movl %%fs:%P1(,%q2,4),%0" \ - : "=r" (__value) \ - : "i" (offsetof (struct pthread, member[0])), "r" (idx));\ - else \ - { \ - if (sizeof (__value) != 8) \ - /* There should not be any value with a size other than 1, \ - 4 or 8. */ \ - abort (); \ - \ - asm volatile ("movq %%fs:%P1(,%q2,8),%q0" \ - : "=r" (__value) \ - : "i" (offsetof (struct pthread, member[0])), \ - "r" (idx)); \ - } \ - __value; }) - - -/* Loading addresses of objects on x86-64 needs to be treated special - when generating PIC code. */ -#ifdef __pic__ -# define IMM_MODE "nr" -#else -# define IMM_MODE "ir" -#endif - - -/* Set member of the thread descriptor directly. */ -# define THREAD_SETMEM(descr, member, value) \ - ({ if (sizeof (descr->member) == 1) \ - asm volatile ("movb %b0,%%fs:%P1" : \ - : "iq" (value), \ - "i" (offsetof (struct pthread, member))); \ - else if (sizeof (descr->member) == 4) \ - asm volatile ("movl %0,%%fs:%P1" : \ - : IMM_MODE (value), \ - "i" (offsetof (struct pthread, member))); \ - else \ - { \ - if (sizeof (descr->member) != 8) \ - /* There should not be any value with a size other than 1, \ - 4 or 8. */ \ - abort (); \ - \ - asm volatile ("movq %q0,%%fs:%P1" : \ - : IMM_MODE ((uint64_t) cast_to_integer (value)), \ - "i" (offsetof (struct pthread, member))); \ - }}) - - -/* Same as THREAD_SETMEM, but the member offset can be non-constant. */ -# define THREAD_SETMEM_NC(descr, member, idx, value) \ - ({ if (sizeof (descr->member[0]) == 1) \ - asm volatile ("movb %b0,%%fs:%P1(%q2)" : \ - : "iq" (value), \ - "i" (offsetof (struct pthread, member[0])), \ - "r" (idx)); \ - else if (sizeof (descr->member[0]) == 4) \ - asm volatile ("movl %0,%%fs:%P1(,%q2,4)" : \ - : IMM_MODE (value), \ - "i" (offsetof (struct pthread, member[0])), \ - "r" (idx)); \ - else \ - { \ - if (sizeof (descr->member[0]) != 8) \ - /* There should not be any value with a size other than 1, \ - 4 or 8. */ \ - abort (); \ - \ - asm volatile ("movq %q0,%%fs:%P1(,%q2,8)" : \ - : IMM_MODE ((uint64_t) cast_to_integer (value)), \ - "i" (offsetof (struct pthread, member[0])), \ - "r" (idx)); \ - }}) - - -/* Atomic compare and exchange on TLS, returning old value. */ -# define THREAD_ATOMIC_CMPXCHG_VAL(descr, member, newval, oldval) \ - ({ __typeof (descr->member) __ret; \ - __typeof (oldval) __old = (oldval); \ - if (sizeof (descr->member) == 4) \ - asm volatile (LOCK_PREFIX "cmpxchgl %2, %%fs:%P3" \ - : "=a" (__ret) \ - : "0" (__old), "r" (newval), \ - "i" (offsetof (struct pthread, member))); \ - else \ - /* Not necessary for other sizes in the moment. */ \ - abort (); \ - __ret; }) - - -/* Atomic logical and. */ -# define THREAD_ATOMIC_AND(descr, member, val) \ - (void) ({ if (sizeof ((descr)->member) == 4) \ - asm volatile (LOCK_PREFIX "andl %1, %%fs:%P0" \ - :: "i" (offsetof (struct pthread, member)), \ - "ir" (val)); \ - else \ - /* Not necessary for other sizes in the moment. */ \ - abort (); }) - - -/* Atomic set bit. */ -# define THREAD_ATOMIC_BIT_SET(descr, member, bit) \ - (void) ({ if (sizeof ((descr)->member) == 4) \ - asm volatile (LOCK_PREFIX "orl %1, %%fs:%P0" \ - :: "i" (offsetof (struct pthread, member)), \ - "ir" (1 << (bit))); \ - else \ - /* Not necessary for other sizes in the moment. */ \ - abort (); }) - - -/* Set the stack guard field in TCB head. */ -# define THREAD_SET_STACK_GUARD(value) \ - THREAD_SETMEM (THREAD_SELF, header.stack_guard, value) -# define THREAD_COPY_STACK_GUARD(descr) \ - ((descr)->header.stack_guard \ - = THREAD_GETMEM (THREAD_SELF, header.stack_guard)) - - -/* Set the pointer guard field in the TCB head. */ -# define THREAD_SET_POINTER_GUARD(value) \ - THREAD_SETMEM (THREAD_SELF, header.pointer_guard, value) -# define THREAD_COPY_POINTER_GUARD(descr) \ - ((descr)->header.pointer_guard \ - = THREAD_GETMEM (THREAD_SELF, header.pointer_guard)) - - -/* Get and set the global scope generation counter in the TCB head. */ -# define THREAD_GSCOPE_FLAG_UNUSED 0 -# define THREAD_GSCOPE_FLAG_USED 1 -# define THREAD_GSCOPE_FLAG_WAIT 2 -# define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res; \ - asm volatile ("xchgl %0, %%fs:%P1" \ - : "=r" (__res) \ - : "i" (offsetof (struct pthread, header.gscope_flag)), \ - "0" (THREAD_GSCOPE_FLAG_UNUSED)); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -# define THREAD_GSCOPE_SET_FLAG() \ - THREAD_SETMEM (THREAD_SELF, header.gscope_flag, THREAD_GSCOPE_FLAG_USED) -# define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/sysdeps/x86_64/preconfigure b/sysdeps/x86_64/preconfigure deleted file mode 100644 index c8f1e0e132..0000000000 --- a/sysdeps/x86_64/preconfigure +++ /dev/null @@ -1,42 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local preconfigure fragment for sysdeps/x86_64 - -test -n "$base_machine" || case "$machine" in -x86_64) - base_machine=x86_64 - # Check if we are building for x32. - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC compiles in -mx32 mode by default" >&5 -$as_echo_n "checking whether $CC compiles in -mx32 mode by default... " >&6; } -if ${libc_cv_x32+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __ILP32__ -# error not x32 -#endif -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - libc_cv_x32=yes -else - libc_cv_x32=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_x32" >&5 -$as_echo "$libc_cv_x32" >&6; } - if test $libc_cv_x32 = yes; then - machine=x86_64/x32 - else - machine=x86_64/64 - fi - ;; -esac diff --git a/sysdeps/x86_64/preconfigure.ac b/sysdeps/x86_64/preconfigure.ac deleted file mode 100644 index 600700ea1a..0000000000 --- a/sysdeps/x86_64/preconfigure.ac +++ /dev/null @@ -1,20 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local preconfigure fragment for sysdeps/x86_64 - -test -n "$base_machine" || case "$machine" in -x86_64) - base_machine=x86_64 - # Check if we are building for x32. - AC_CACHE_CHECK(whether $CC compiles in -mx32 mode by default, - libc_cv_x32, [dnl - AC_TRY_COMPILE(dnl -[#ifndef __ILP32__ -# error not x32 -#endif], [], libc_cv_x32=yes, libc_cv_x32=no)]) - if test $libc_cv_x32 = yes; then - machine=x86_64/x32 - else - machine=x86_64/64 - fi - ;; -esac diff --git a/sysdeps/x86_64/rawmemchr.S b/sysdeps/x86_64/rawmemchr.S deleted file mode 100644 index 0405c7bb99..0000000000 --- a/sysdeps/x86_64/rawmemchr.S +++ /dev/null @@ -1,202 +0,0 @@ -/* fast SSE2 memchr with 64 byte loop and pmaxub instruction using - - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY (__rawmemchr) - movd %rsi, %xmm1 - mov %rdi, %rcx - - punpcklbw %xmm1, %xmm1 - punpcklbw %xmm1, %xmm1 - - and $63, %rcx - pshufd $0, %xmm1, %xmm1 - - cmp $48, %rcx - ja L(crosscache) - - movdqu (%rdi), %xmm0 - pcmpeqb %xmm1, %xmm0 -/* Check if there is a match. */ - pmovmskb %xmm0, %eax - test %eax, %eax - - jnz L(matches) - add $16, %rdi - and $-16, %rdi - jmp L(loop_prolog) - - .p2align 4 -L(crosscache): - and $15, %rcx - and $-16, %rdi - movdqa (%rdi), %xmm0 - - pcmpeqb %xmm1, %xmm0 -/* Check if there is a match. */ - pmovmskb %xmm0, %eax -/* Remove the leading bytes. */ - sar %cl, %eax - test %eax, %eax - je L(unaligned_no_match) -/* Check which byte is a match. */ - bsf %eax, %eax - - add %rdi, %rax - add %rcx, %rax - ret - - .p2align 4 -L(unaligned_no_match): - add $16, %rdi - - .p2align 4 -L(loop_prolog): - movdqa (%rdi), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - - movdqa 16(%rdi), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches16) - - movdqa 32(%rdi), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 48(%rdi), %xmm4 - pcmpeqb %xmm1, %xmm4 - add $64, %rdi - pmovmskb %xmm4, %eax - test %eax, %eax - jnz L(matches0) - - test $0x3f, %rdi - jz L(align64_loop) - - movdqa (%rdi), %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - - movdqa 16(%rdi), %xmm2 - pcmpeqb %xmm1, %xmm2 - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches16) - - movdqa 32(%rdi), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches32) - - movdqa 48(%rdi), %xmm3 - pcmpeqb %xmm1, %xmm3 - pmovmskb %xmm3, %eax - - add $64, %rdi - test %eax, %eax - jnz L(matches0) - - and $-64, %rdi - - .p2align 4 -L(align64_loop): - movdqa (%rdi), %xmm0 - movdqa 16(%rdi), %xmm2 - movdqa 32(%rdi), %xmm3 - movdqa 48(%rdi), %xmm4 - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm1, %xmm2 - pcmpeqb %xmm1, %xmm3 - pcmpeqb %xmm1, %xmm4 - - pmaxub %xmm0, %xmm3 - pmaxub %xmm2, %xmm4 - pmaxub %xmm3, %xmm4 - pmovmskb %xmm4, %eax - - add $64, %rdi - - test %eax, %eax - jz L(align64_loop) - - sub $64, %rdi - - pmovmskb %xmm0, %eax - test %eax, %eax - jnz L(matches) - - pmovmskb %xmm2, %eax - test %eax, %eax - jnz L(matches16) - - movdqa 32(%rdi), %xmm3 - pcmpeqb %xmm1, %xmm3 - - pcmpeqb 48(%rdi), %xmm1 - pmovmskb %xmm3, %eax - test %eax, %eax - jnz L(matches32) - - pmovmskb %xmm1, %eax - bsf %eax, %eax - lea 48(%rdi, %rax), %rax - ret - - .p2align 4 -L(matches0): - bsf %eax, %eax - lea -16(%rax, %rdi), %rax - ret - - .p2align 4 -L(matches): - bsf %eax, %eax - add %rdi, %rax - ret - - .p2align 4 -L(matches16): - bsf %eax, %eax - lea 16(%rax, %rdi), %rax - ret - - .p2align 4 -L(matches32): - bsf %eax, %eax - lea 32(%rax, %rdi), %rax - ret - -END (__rawmemchr) - -weak_alias (__rawmemchr, rawmemchr) -libc_hidden_builtin_def (__rawmemchr) diff --git a/sysdeps/x86_64/rshift.S b/sysdeps/x86_64/rshift.S deleted file mode 100644 index 1686339e5c..0000000000 --- a/sysdeps/x86_64/rshift.S +++ /dev/null @@ -1,114 +0,0 @@ -/* x86-64 __mpn_rshift -- - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#include "sysdep.h" -#include "asm-syntax.h" - -#define rp %rdi -#define up %rsi -#define n %rdx -#define cnt %cl - - .text -ENTRY (__mpn_rshift) - mov %edx, %eax - and $3, %eax - jne L(nb00) -L(b00): /* n = 4, 8, 12, ... */ - mov (up), %r10 - mov 8(up), %r11 - xor %eax, %eax - shrd %cl, %r10, %rax - mov 16(up), %r8 - lea 8(up), up - lea -24(rp), rp - sub $4, n - jmp L(00) - -L(nb00):/* n = 1, 5, 9, ... */ - cmp $2, %eax - jae L(nb01) -L(b01): mov (up), %r9 - xor %eax, %eax - shrd %cl, %r9, %rax - sub $2, n - jb L(le1) - mov 8(up), %r10 - mov 16(up), %r11 - lea 16(up), up - lea -16(rp), rp - jmp L(01) -L(le1): shr %cl, %r9 - mov %r9, (rp) - ret - -L(nb01):/* n = 2, 6, 10, ... */ - jne L(b11) -L(b10): mov (up), %r8 - mov 8(up), %r9 - xor %eax, %eax - shrd %cl, %r8, %rax - sub $3, n - jb L(le2) - mov 16(up), %r10 - lea 24(up), up - lea -8(rp), rp - jmp L(10) -L(le2): shrd %cl, %r9, %r8 - mov %r8, (rp) - shr %cl, %r9 - mov %r9, 8(rp) - ret - - .p2align 4 -L(b11): /* n = 3, 7, 11, ... */ - mov (up), %r11 - mov 8(up), %r8 - xor %eax, %eax - shrd %cl, %r11, %rax - mov 16(up), %r9 - lea 32(up), up - sub $4, n - jb L(end) - - .p2align 4 -L(top): shrd %cl, %r8, %r11 - mov -8(up), %r10 - mov %r11, (rp) -L(10): shrd %cl, %r9, %r8 - mov (up), %r11 - mov %r8, 8(rp) -L(01): shrd %cl, %r10, %r9 - mov 8(up), %r8 - mov %r9, 16(rp) -L(00): shrd %cl, %r11, %r10 - mov 16(up), %r9 - mov %r10, 24(rp) - add $32, up - lea 32(rp), rp - sub $4, n - jnc L(top) - -L(end): shrd %cl, %r8, %r11 - mov %r11, (rp) - shrd %cl, %r9, %r8 - mov %r8, 8(rp) - shr %cl, %r9 - mov %r9, 16(rp) - ret -END (__mpn_rshift) diff --git a/sysdeps/x86_64/sched_cpucount.c b/sysdeps/x86_64/sched_cpucount.c deleted file mode 100644 index 408ddc9d61..0000000000 --- a/sysdeps/x86_64/sched_cpucount.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef __amdfam10 -# define POPCNT(l) \ - ({ __cpu_mask r; \ - asm ("popcntq %1, %0" : "=r" (r) : "0" (l)); \ - r; }) -#endif - -#include diff --git a/sysdeps/x86_64/setjmp.S b/sysdeps/x86_64/setjmp.S deleted file mode 100644 index 3a889033cd..0000000000 --- a/sysdeps/x86_64/setjmp.S +++ /dev/null @@ -1,66 +0,0 @@ -/* setjmp for x86-64. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - -ENTRY (__sigsetjmp) - /* Save registers. */ - movq %rbx, (JB_RBX*8)(%rdi) -#ifdef PTR_MANGLE -# ifdef __ILP32__ - /* Save the high bits of %rbp first, since PTR_MANGLE will - only handle the low bits but we cannot presume %rbp is - being used as a pointer and truncate it. Here we write all - of %rbp, but the low bits will be overwritten below. */ - movq %rbp, (JB_RBP*8)(%rdi) -# endif - mov %RBP_LP, %RAX_LP - PTR_MANGLE (%RAX_LP) - mov %RAX_LP, (JB_RBP*8)(%rdi) -#else - movq %rbp, (JB_RBP*8)(%rdi) -#endif - movq %r12, (JB_R12*8)(%rdi) - movq %r13, (JB_R13*8)(%rdi) - movq %r14, (JB_R14*8)(%rdi) - movq %r15, (JB_R15*8)(%rdi) - lea 8(%rsp), %RDX_LP /* Save SP as it will be after we return. */ -#ifdef PTR_MANGLE - PTR_MANGLE (%RDX_LP) -#endif - movq %rdx, (JB_RSP*8)(%rdi) - mov (%rsp), %RAX_LP /* Save PC we are returning to now. */ - LIBC_PROBE (setjmp, 3, LP_SIZE@%RDI_LP, -4@%esi, LP_SIZE@%RAX_LP) -#ifdef PTR_MANGLE - PTR_MANGLE (%RAX_LP) -#endif - movq %rax, (JB_PC*8)(%rdi) - -#if IS_IN (rtld) - /* In ld.so we never save the signal mask. */ - xorl %eax, %eax - retq -#else - /* Make a tail call to __sigjmp_save; it takes the same args. */ - jmp __sigjmp_save -#endif -END (__sigsetjmp) -hidden_def (__sigsetjmp) diff --git a/sysdeps/x86_64/stack-aliasing.h b/sysdeps/x86_64/stack-aliasing.h deleted file mode 100644 index 2efdacb3b4..0000000000 --- a/sysdeps/x86_64/stack-aliasing.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/x86_64/stackguard-macros.h b/sysdeps/x86_64/stackguard-macros.h deleted file mode 100644 index 1948800cd0..0000000000 --- a/sysdeps/x86_64/stackguard-macros.h +++ /dev/null @@ -1,11 +0,0 @@ -#include - -#define STACK_CHK_GUARD \ - ({ uintptr_t x; \ - asm ("mov %%fs:%c1, %0" : "=r" (x) \ - : "i" (offsetof (tcbhead_t, stack_guard))); x; }) - -#define POINTER_CHK_GUARD \ - ({ uintptr_t x; \ - asm ("mov %%fs:%c1, %0" : "=r" (x) \ - : "i" (offsetof (tcbhead_t, pointer_guard))); x; }) diff --git a/sysdeps/x86_64/stackinfo.h b/sysdeps/x86_64/stackinfo.h deleted file mode 100644 index a1cbb43322..0000000000 --- a/sysdeps/x86_64/stackinfo.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include - -/* On x86_64 the stack grows down. */ -#define _STACK_GROWS_DOWN 1 - -/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK is - * present, but it is presumed absent. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X) - -/* Access to the stack pointer. The macros are used in alloca_account - for which they need to act as barriers as well, hence the additional - (unnecessary) parameters. */ -#define stackinfo_get_sp() \ - ({ void *p__; asm volatile ("mov %%" RSP_LP ", %0" : "=r" (p__)); p__; }) -#define stackinfo_sub_sp(ptr) \ - ({ ptrdiff_t d__; \ - asm volatile ("sub %%" RSP_LP " , %0" : "=r" (d__) : "0" (ptr)); \ - d__; }) - -#endif /* stackinfo.h */ diff --git a/sysdeps/x86_64/start.S b/sysdeps/x86_64/start.S deleted file mode 100644 index 62a00eaeaa..0000000000 --- a/sysdeps/x86_64/start.S +++ /dev/null @@ -1,131 +0,0 @@ -/* Startup code compliant to the ELF x86-64 ABI. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* This is the canonical entry point, usually the first thing in the text - segment. The SVR4/i386 ABI (pages 3-31, 3-32) says that when the entry - point runs, most registers' values are unspecified, except for: - - %rdx Contains a function pointer to be registered with `atexit'. - This is how the dynamic linker arranges to have DT_FINI - functions called for shared libraries that have been loaded - before this code runs. - - %rsp The stack contains the arguments and environment: - 0(%rsp) argc - LP_SIZE(%rsp) argv[0] - ... - (LP_SIZE*argc)(%rsp) NULL - (LP_SIZE*(argc+1))(%rsp) envp[0] - ... - NULL -*/ - -#include - -ENTRY (_start) - /* Clearing frame pointer is insufficient, use CFI. */ - cfi_undefined (rip) - /* Clear the frame pointer. The ABI suggests this be done, to mark - the outermost frame obviously. */ - xorl %ebp, %ebp - - /* Extract the arguments as encoded on the stack and set up - the arguments for __libc_start_main (int (*main) (int, char **, char **), - int argc, char *argv, - void (*init) (void), void (*fini) (void), - void (*rtld_fini) (void), void *stack_end). - The arguments are passed via registers and on the stack: - main: %rdi - argc: %rsi - argv: %rdx - init: %rcx - fini: %r8 - rtld_fini: %r9 - stack_end: stack. */ - - mov %RDX_LP, %R9_LP /* Address of the shared library termination - function. */ -#ifdef __ILP32__ - mov (%rsp), %esi /* Simulate popping 4-byte argument count. */ - add $4, %esp -#else - popq %rsi /* Pop the argument count. */ -#endif - /* argv starts just at the current stack top. */ - mov %RSP_LP, %RDX_LP - /* Align the stack to a 16 byte boundary to follow the ABI. */ - and $~15, %RSP_LP - - /* Push garbage because we push 8 more bytes. */ - pushq %rax - - /* Provide the highest stack address to the user code (for stacks - which grow downwards). */ - pushq %rsp - -#ifdef SHARED - /* Pass address of our own entry points to .fini and .init. */ - mov __libc_csu_fini@GOTPCREL(%rip), %R8_LP - mov __libc_csu_init@GOTPCREL(%rip), %RCX_LP - - mov main@GOTPCREL(%rip), %RDI_LP -#else - /* Pass address of our own entry points to .fini and .init. */ - mov $__libc_csu_fini, %R8_LP - mov $__libc_csu_init, %RCX_LP - - mov $main, %RDI_LP -#endif - - /* Call the user's main function, and exit with its value. - But let the libc call main. Since __libc_start_main in - libc.so is called very early, lazy binding isn't relevant - here. Use indirect branch via GOT to avoid extra branch - to PLT slot. In case of static executable, ld in binutils - 2.26 or above can convert indirect branch into direct - branch. */ - call *__libc_start_main@GOTPCREL(%rip) - - hlt /* Crash if somehow `exit' does return. */ -END (_start) - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start diff --git a/sysdeps/x86_64/stpcpy.S b/sysdeps/x86_64/stpcpy.S deleted file mode 100644 index ec23de1416..0000000000 --- a/sysdeps/x86_64/stpcpy.S +++ /dev/null @@ -1,8 +0,0 @@ -#define USE_AS_STPCPY -#define STRCPY __stpcpy - -#include - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/x86_64/strcasecmp.S b/sysdeps/x86_64/strcasecmp.S deleted file mode 100644 index fe49e820f2..0000000000 --- a/sysdeps/x86_64/strcasecmp.S +++ /dev/null @@ -1 +0,0 @@ -/* In strcasecmp_l.S. */ diff --git a/sysdeps/x86_64/strcasecmp_l-nonascii.c b/sysdeps/x86_64/strcasecmp_l-nonascii.c deleted file mode 100644 index 30e8969603..0000000000 --- a/sysdeps/x86_64/strcasecmp_l-nonascii.c +++ /dev/null @@ -1,8 +0,0 @@ -#include - -extern int __strcasecmp_l_nonascii (const char *__s1, const char *__s2, - __locale_t __loc); - -#define __strcasecmp_l __strcasecmp_l_nonascii -#define USE_IN_EXTENDED_LOCALE_MODEL 1 -#include diff --git a/sysdeps/x86_64/strcasecmp_l.S b/sysdeps/x86_64/strcasecmp_l.S deleted file mode 100644 index 5456b3a49e..0000000000 --- a/sysdeps/x86_64/strcasecmp_l.S +++ /dev/null @@ -1,6 +0,0 @@ -#define STRCMP __strcasecmp_l -#define USE_AS_STRCASECMP_L -#include "strcmp.S" - -weak_alias (__strcasecmp_l, strcasecmp_l) -libc_hidden_def (strcasecmp_l) diff --git a/sysdeps/x86_64/strcat.S b/sysdeps/x86_64/strcat.S deleted file mode 100644 index 44e6512339..0000000000 --- a/sysdeps/x86_64/strcat.S +++ /dev/null @@ -1,258 +0,0 @@ -/* strcat(dest, src) -- Append SRC on the end of DEST. - Optimized for x86-64. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -/* Will be removed when new strcpy implementation gets merged. */ - - .text -ENTRY (strcat) - movq %rdi, %rcx /* Dest. register. */ - andl $7, %ecx /* mask alignment bits */ - movq %rdi, %rax /* Duplicate destination pointer. */ - movq $0xfefefefefefefeff,%r8 - - /* First step: Find end of destination. */ - jz 4f /* aligned => start loop */ - - neg %ecx /* We need to align to 8 bytes. */ - addl $8,%ecx - /* Search the first bytes directly. */ -0: cmpb $0x0,(%rax) /* is byte NUL? */ - je 2f /* yes => start copy */ - incq %rax /* increment pointer */ - decl %ecx - jnz 0b - - - - /* Now the source is aligned. Scan for NUL byte. */ - .p2align 4 -4: - /* First unroll. */ - movq (%rax), %rcx /* get double word (= 8 bytes) in question */ - addq $8,%rax /* adjust pointer for next word */ - movq %r8, %rdx /* magic value */ - addq %rcx, %rdx /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc 3f /* highest byte is NUL => return pointer */ - xorq %rcx, %rdx /* (word+magic)^word */ - orq %r8, %rdx /* set all non-carry bits */ - incq %rdx /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz 3f /* found NUL => return pointer */ - - /* Second unroll. */ - movq (%rax), %rcx /* get double word (= 8 bytes) in question */ - addq $8,%rax /* adjust pointer for next word */ - movq %r8, %rdx /* magic value */ - addq %rcx, %rdx /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc 3f /* highest byte is NUL => return pointer */ - xorq %rcx, %rdx /* (word+magic)^word */ - orq %r8, %rdx /* set all non-carry bits */ - incq %rdx /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz 3f /* found NUL => return pointer */ - - /* Third unroll. */ - movq (%rax), %rcx /* get double word (= 8 bytes) in question */ - addq $8,%rax /* adjust pointer for next word */ - movq %r8, %rdx /* magic value */ - addq %rcx, %rdx /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc 3f /* highest byte is NUL => return pointer */ - xorq %rcx, %rdx /* (word+magic)^word */ - orq %r8, %rdx /* set all non-carry bits */ - incq %rdx /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jnz 3f /* found NUL => return pointer */ - - /* Fourth unroll. */ - movq (%rax), %rcx /* get double word (= 8 bytes) in question */ - addq $8,%rax /* adjust pointer for next word */ - movq %r8, %rdx /* magic value */ - addq %rcx, %rdx /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc 3f /* highest byte is NUL => return pointer */ - xorq %rcx, %rdx /* (word+magic)^word */ - orq %r8, %rdx /* set all non-carry bits */ - incq %rdx /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - jz 4b /* no NUL found => continue loop */ - - .p2align 4 /* Align, it's a jump target. */ -3: subq $8,%rax /* correct pointer increment. */ - - testb %cl, %cl /* is first byte NUL? */ - jz 2f /* yes => return */ - incq %rax /* increment pointer */ - - testb %ch, %ch /* is second byte NUL? */ - jz 2f /* yes => return */ - incq %rax /* increment pointer */ - - testl $0x00ff0000, %ecx /* is third byte NUL? */ - jz 2f /* yes => return pointer */ - incq %rax /* increment pointer */ - - testl $0xff000000, %ecx /* is fourth byte NUL? */ - jz 2f /* yes => return pointer */ - incq %rax /* increment pointer */ - - shrq $32, %rcx /* look at other half. */ - - testb %cl, %cl /* is first byte NUL? */ - jz 2f /* yes => return */ - incq %rax /* increment pointer */ - - testb %ch, %ch /* is second byte NUL? */ - jz 2f /* yes => return */ - incq %rax /* increment pointer */ - - testl $0xff0000, %ecx /* is third byte NUL? */ - jz 2f /* yes => return pointer */ - incq %rax /* increment pointer */ - -2: - /* Second step: Copy source to destination. */ - - movq %rsi, %rcx /* duplicate */ - andl $7,%ecx /* mask alignment bits */ - movq %rax, %rdx /* move around */ - jz 22f /* aligned => start loop */ - - neg %ecx /* align to 8 bytes. */ - addl $8, %ecx - /* Align the source pointer. */ -21: - movb (%rsi), %al /* Fetch a byte */ - testb %al, %al /* Is it NUL? */ - movb %al, (%rdx) /* Store it */ - jz 24f /* If it was NUL, done! */ - incq %rsi - incq %rdx - decl %ecx - jnz 21b - - /* Now the sources is aligned. Unfortunatly we cannot force - to have both source and destination aligned, so ignore the - alignment of the destination. */ - .p2align 4 -22: - /* 1st unroll. */ - movq (%rsi), %rax /* Read double word (8 bytes). */ - addq $8, %rsi /* Adjust pointer for next word. */ - movq %rax, %r9 /* Save a copy for NUL finding. */ - addq %r8, %r9 /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc 23f /* highest byte is NUL => return pointer */ - xorq %rax, %r9 /* (word+magic)^word */ - orq %r8, %r9 /* set all non-carry bits */ - incq %r9 /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - - jnz 23f /* found NUL => return pointer */ - - movq %rax, (%rdx) /* Write value to destination. */ - addq $8, %rdx /* Adjust pointer. */ - - /* 2nd unroll. */ - movq (%rsi), %rax /* Read double word (8 bytes). */ - addq $8, %rsi /* Adjust pointer for next word. */ - movq %rax, %r9 /* Save a copy for NUL finding. */ - addq %r8, %r9 /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc 23f /* highest byte is NUL => return pointer */ - xorq %rax, %r9 /* (word+magic)^word */ - orq %r8, %r9 /* set all non-carry bits */ - incq %r9 /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - - jnz 23f /* found NUL => return pointer */ - - movq %rax, (%rdx) /* Write value to destination. */ - addq $8, %rdx /* Adjust pointer. */ - - /* 3rd unroll. */ - movq (%rsi), %rax /* Read double word (8 bytes). */ - addq $8, %rsi /* Adjust pointer for next word. */ - movq %rax, %r9 /* Save a copy for NUL finding. */ - addq %r8, %r9 /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc 23f /* highest byte is NUL => return pointer */ - xorq %rax, %r9 /* (word+magic)^word */ - orq %r8, %r9 /* set all non-carry bits */ - incq %r9 /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - - jnz 23f /* found NUL => return pointer */ - - movq %rax, (%rdx) /* Write value to destination. */ - addq $8, %rdx /* Adjust pointer. */ - - /* 4th unroll. */ - movq (%rsi), %rax /* Read double word (8 bytes). */ - addq $8, %rsi /* Adjust pointer for next word. */ - movq %rax, %r9 /* Save a copy for NUL finding. */ - addq %r8, %r9 /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc 23f /* highest byte is NUL => return pointer */ - xorq %rax, %r9 /* (word+magic)^word */ - orq %r8, %r9 /* set all non-carry bits */ - incq %r9 /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - - jnz 23f /* found NUL => return pointer */ - - movq %rax, (%rdx) /* Write value to destination. */ - addq $8, %rdx /* Adjust pointer. */ - jmp 22b /* Next iteration. */ - - /* Do the last few bytes. %rax contains the value to write. - The loop is unrolled twice. */ - .p2align 4 -23: - movb %al, (%rdx) /* 1st byte. */ - testb %al, %al /* Is it NUL. */ - jz 24f /* yes, finish. */ - incq %rdx /* Increment destination. */ - movb %ah, (%rdx) /* 2nd byte. */ - testb %ah, %ah /* Is it NUL?. */ - jz 24f /* yes, finish. */ - incq %rdx /* Increment destination. */ - shrq $16, %rax /* Shift... */ - jmp 23b /* and look at next two bytes in %rax. */ - - -24: - movq %rdi, %rax /* Source is return value. */ - retq -END (strcat) -libc_hidden_builtin_def (strcat) diff --git a/sysdeps/x86_64/strchr.S b/sysdeps/x86_64/strchr.S deleted file mode 100644 index 16c1726803..0000000000 --- a/sysdeps/x86_64/strchr.S +++ /dev/null @@ -1,187 +0,0 @@ -/* strchr (str, ch) -- Return pointer to first occurrence of CH in STR. - For AMD x86-64. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY (strchr) - movd %esi, %xmm1 - movl %edi, %eax - andl $4095, %eax - punpcklbw %xmm1, %xmm1 - cmpl $4032, %eax - punpcklwd %xmm1, %xmm1 - pshufd $0, %xmm1, %xmm1 - jg L(cross_page) - movdqu (%rdi), %xmm0 - pxor %xmm3, %xmm3 - movdqa %xmm0, %xmm4 - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm3, %xmm4 - por %xmm4, %xmm0 - pmovmskb %xmm0, %eax - test %eax, %eax - je L(next_48_bytes) - bsf %eax, %eax -#ifdef AS_STRCHRNUL - leaq (%rdi,%rax), %rax -#else - movl $0, %edx - leaq (%rdi,%rax), %rax - cmpb %sil, (%rax) - cmovne %rdx, %rax -#endif - ret - - .p2align 3 - L(next_48_bytes): - movdqu 16(%rdi), %xmm0 - movdqa %xmm0, %xmm4 - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm3, %xmm4 - por %xmm4, %xmm0 - pmovmskb %xmm0, %ecx - movdqu 32(%rdi), %xmm0 - movdqa %xmm0, %xmm4 - pcmpeqb %xmm1, %xmm0 - salq $16, %rcx - pcmpeqb %xmm3, %xmm4 - por %xmm4, %xmm0 - pmovmskb %xmm0, %eax - movdqu 48(%rdi), %xmm0 - pcmpeqb %xmm0, %xmm3 - salq $32, %rax - pcmpeqb %xmm1, %xmm0 - orq %rcx, %rax - por %xmm3, %xmm0 - pmovmskb %xmm0, %ecx - salq $48, %rcx - orq %rcx, %rax - testq %rax, %rax - jne L(return) -L(loop_start): - /* We use this alignment to force loop be aligned to 8 but not - 16 bytes. This gives better sheduling on AMD processors. */ - .p2align 4 - pxor %xmm6, %xmm6 - andq $-64, %rdi - .p2align 3 -L(loop64): - addq $64, %rdi - movdqa (%rdi), %xmm5 - movdqa 16(%rdi), %xmm2 - movdqa 32(%rdi), %xmm3 - pxor %xmm1, %xmm5 - movdqa 48(%rdi), %xmm4 - pxor %xmm1, %xmm2 - pxor %xmm1, %xmm3 - pminub (%rdi), %xmm5 - pxor %xmm1, %xmm4 - pminub 16(%rdi), %xmm2 - pminub 32(%rdi), %xmm3 - pminub %xmm2, %xmm5 - pminub 48(%rdi), %xmm4 - pminub %xmm3, %xmm5 - pminub %xmm4, %xmm5 - pcmpeqb %xmm6, %xmm5 - pmovmskb %xmm5, %eax - - testl %eax, %eax - je L(loop64) - - movdqa (%rdi), %xmm5 - movdqa %xmm5, %xmm0 - pcmpeqb %xmm1, %xmm5 - pcmpeqb %xmm6, %xmm0 - por %xmm0, %xmm5 - pcmpeqb %xmm6, %xmm2 - pcmpeqb %xmm6, %xmm3 - pcmpeqb %xmm6, %xmm4 - - pmovmskb %xmm5, %ecx - pmovmskb %xmm2, %eax - salq $16, %rax - pmovmskb %xmm3, %r8d - pmovmskb %xmm4, %edx - salq $32, %r8 - orq %r8, %rax - orq %rcx, %rax - salq $48, %rdx - orq %rdx, %rax - .p2align 3 -L(return): - bsfq %rax, %rax -#ifdef AS_STRCHRNUL - leaq (%rdi,%rax), %rax -#else - movl $0, %edx - leaq (%rdi,%rax), %rax - cmpb %sil, (%rax) - cmovne %rdx, %rax -#endif - ret - .p2align 4 - -L(cross_page): - movq %rdi, %rdx - pxor %xmm2, %xmm2 - andq $-64, %rdx - movdqa %xmm1, %xmm0 - movdqa (%rdx), %xmm3 - movdqa %xmm3, %xmm4 - pcmpeqb %xmm1, %xmm3 - pcmpeqb %xmm2, %xmm4 - por %xmm4, %xmm3 - pmovmskb %xmm3, %r8d - movdqa 16(%rdx), %xmm3 - movdqa %xmm3, %xmm4 - pcmpeqb %xmm1, %xmm3 - pcmpeqb %xmm2, %xmm4 - por %xmm4, %xmm3 - pmovmskb %xmm3, %eax - movdqa 32(%rdx), %xmm3 - movdqa %xmm3, %xmm4 - pcmpeqb %xmm1, %xmm3 - salq $16, %rax - pcmpeqb %xmm2, %xmm4 - por %xmm4, %xmm3 - pmovmskb %xmm3, %r9d - movdqa 48(%rdx), %xmm3 - pcmpeqb %xmm3, %xmm2 - salq $32, %r9 - pcmpeqb %xmm3, %xmm0 - orq %r9, %rax - orq %r8, %rax - por %xmm2, %xmm0 - pmovmskb %xmm0, %ecx - salq $48, %rcx - orq %rcx, %rax - movl %edi, %ecx - subb %dl, %cl - shrq %cl, %rax - testq %rax, %rax - jne L(return) - jmp L(loop_start) - -END (strchr) - -#ifndef AS_STRCHRNUL -weak_alias (strchr, index) -libc_hidden_builtin_def (strchr) -#endif diff --git a/sysdeps/x86_64/strchrnul.S b/sysdeps/x86_64/strchrnul.S deleted file mode 100644 index 841dfc2783..0000000000 --- a/sysdeps/x86_64/strchrnul.S +++ /dev/null @@ -1,27 +0,0 @@ -/* strchrnul (str, ch) -- Return pointer to first occurrence of CH in STR - or terminating NUL byte. - For AMD x86-64. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#define strchr __strchrnul -#define AS_STRCHRNUL -#include "strchr.S" - -weak_alias (__strchrnul, strchrnul) diff --git a/sysdeps/x86_64/strcmp.S b/sysdeps/x86_64/strcmp.S deleted file mode 100644 index 076be04df5..0000000000 --- a/sysdeps/x86_64/strcmp.S +++ /dev/null @@ -1,2267 +0,0 @@ -/* Highly optimized version for x86-64. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Based on i686 version contributed by Ulrich Drepper - , 1999. - Updated with SSE2 support contributed by Intel Corporation. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#undef UPDATE_STRNCMP_COUNTER - -#ifndef LABEL -#define LABEL(l) L(l) -#endif - -#ifdef USE_AS_STRNCMP -/* Since the counter, %r11, is unsigned, we branch to strcmp_exitz - if the new counter > the old one or is 0. */ -# define UPDATE_STRNCMP_COUNTER \ - /* calculate left number to compare */ \ - lea -16(%rcx, %r11), %r9; \ - cmp %r9, %r11; \ - jb LABEL(strcmp_exitz); \ - test %r9, %r9; \ - je LABEL(strcmp_exitz); \ - mov %r9, %r11 - -#elif defined USE_AS_STRCASECMP_L -# include "locale-defines.h" - -# define UPDATE_STRNCMP_COUNTER -#elif defined USE_AS_STRNCASECMP_L -# include "locale-defines.h" - -# define UPDATE_STRNCMP_COUNTER \ - /* calculate left number to compare */ \ - lea -16(%rcx, %r11), %r9; \ - cmp %r9, %r11; \ - jb LABEL(strcmp_exitz); \ - test %r9, %r9; \ - je LABEL(strcmp_exitz); \ - mov %r9, %r11 -#else -# define UPDATE_STRNCMP_COUNTER -# ifndef STRCMP -# define STRCMP strcmp -# endif -#endif - -#ifndef USE_SSSE3 - .text -#else - .section .text.ssse3,"ax",@progbits -#endif - -#ifdef USE_AS_STRCASECMP_L -# ifndef ENTRY2 -# define ENTRY2(name) ENTRY (name) -# define END2(name) END (name) -# endif - -ENTRY2 (__strcasecmp) - movq __libc_tsd_LOCALE@gottpoff(%rip),%rax - mov %fs:(%rax),%RDX_LP - - // XXX 5 byte should be before the function - /* 5-byte NOP. */ - .byte 0x0f,0x1f,0x44,0x00,0x00 -END2 (__strcasecmp) -# ifndef NO_NOLOCALE_ALIAS -weak_alias (__strcasecmp, strcasecmp) -libc_hidden_def (__strcasecmp) -# endif - /* FALLTHROUGH to strcasecmp_l. */ -#elif defined USE_AS_STRNCASECMP_L -# ifndef ENTRY2 -# define ENTRY2(name) ENTRY (name) -# define END2(name) END (name) -# endif - -ENTRY2 (__strncasecmp) - movq __libc_tsd_LOCALE@gottpoff(%rip),%rax - mov %fs:(%rax),%RCX_LP - - // XXX 5 byte should be before the function - /* 5-byte NOP. */ - .byte 0x0f,0x1f,0x44,0x00,0x00 -END2 (__strncasecmp) -# ifndef NO_NOLOCALE_ALIAS -weak_alias (__strncasecmp, strncasecmp) -libc_hidden_def (__strncasecmp) -# endif - /* FALLTHROUGH to strncasecmp_l. */ -#endif - -ENTRY (STRCMP) -#ifdef USE_AS_STRCASECMP_L - /* We have to fall back on the C implementation for locales - with encodings not matching ASCII for single bytes. */ -# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 - mov LOCALE_T___LOCALES+LC_CTYPE*LP_SIZE(%rdx), %RAX_LP -# else - mov (%rdx), %RAX_LP -# endif - testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax) - jne __strcasecmp_l_nonascii -#elif defined USE_AS_STRNCASECMP_L - /* We have to fall back on the C implementation for locales - with encodings not matching ASCII for single bytes. */ -# if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0 - mov LOCALE_T___LOCALES+LC_CTYPE*LP_SIZE(%rcx), %RAX_LP -# else - mov (%rcx), %RAX_LP -# endif - testl $1, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax) - jne __strncasecmp_l_nonascii -#endif - -/* - * This implementation uses SSE to compare up to 16 bytes at a time. - */ -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - test %rdx, %rdx - je LABEL(strcmp_exitz) - cmp $1, %rdx - je LABEL(Byte0) - mov %rdx, %r11 -#endif - mov %esi, %ecx - mov %edi, %eax -/* Use 64bit AND here to avoid long NOP padding. */ - and $0x3f, %rcx /* rsi alignment in cache line */ - and $0x3f, %rax /* rdi alignment in cache line */ -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - .section .rodata.cst16,"aM",@progbits,16 - .align 16 -.Lbelowupper: - .quad 0x4040404040404040 - .quad 0x4040404040404040 -.Ltopupper: - .quad 0x5b5b5b5b5b5b5b5b - .quad 0x5b5b5b5b5b5b5b5b -.Ltouppermask: - .quad 0x2020202020202020 - .quad 0x2020202020202020 - .previous - movdqa .Lbelowupper(%rip), %xmm5 -# define UCLOW_reg %xmm5 - movdqa .Ltopupper(%rip), %xmm6 -# define UCHIGH_reg %xmm6 - movdqa .Ltouppermask(%rip), %xmm7 -# define LCQWORD_reg %xmm7 -#endif - cmp $0x30, %ecx - ja LABEL(crosscache) /* rsi: 16-byte load will cross cache line */ - cmp $0x30, %eax - ja LABEL(crosscache) /* rdi: 16-byte load will cross cache line */ - movlpd (%rdi), %xmm1 - movlpd (%rsi), %xmm2 - movhpd 8(%rdi), %xmm1 - movhpd 8(%rsi), %xmm2 -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L -# define TOLOWER(reg1, reg2) \ - movdqa reg1, %xmm8; \ - movdqa UCHIGH_reg, %xmm9; \ - movdqa reg2, %xmm10; \ - movdqa UCHIGH_reg, %xmm11; \ - pcmpgtb UCLOW_reg, %xmm8; \ - pcmpgtb reg1, %xmm9; \ - pcmpgtb UCLOW_reg, %xmm10; \ - pcmpgtb reg2, %xmm11; \ - pand %xmm9, %xmm8; \ - pand %xmm11, %xmm10; \ - pand LCQWORD_reg, %xmm8; \ - pand LCQWORD_reg, %xmm10; \ - por %xmm8, reg1; \ - por %xmm10, reg2 - TOLOWER (%xmm1, %xmm2) -#else -# define TOLOWER(reg1, reg2) -#endif - pxor %xmm0, %xmm0 /* clear %xmm0 for null char checks */ - pcmpeqb %xmm1, %xmm0 /* Any null chars? */ - pcmpeqb %xmm2, %xmm1 /* compare first 16 bytes for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 16 bytes are same, edx == 0xffff */ - jnz LABEL(less16bytes) /* If not, find different value or null char */ -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) /* finish comparision */ -#endif - add $16, %rsi /* prepare to search next 16 bytes */ - add $16, %rdi /* prepare to search next 16 bytes */ - - /* - * Determine source and destination string offsets from 16-byte alignment. - * Use relative offset difference between the two to determine which case - * below to use. - */ - .p2align 4 -LABEL(crosscache): - and $0xfffffffffffffff0, %rsi /* force %rsi is 16 byte aligned */ - and $0xfffffffffffffff0, %rdi /* force %rdi is 16 byte aligned */ - mov $0xffff, %edx /* for equivalent offset */ - xor %r8d, %r8d - and $0xf, %ecx /* offset of rsi */ - and $0xf, %eax /* offset of rdi */ - cmp %eax, %ecx - je LABEL(ashr_0) /* rsi and rdi relative offset same */ - ja LABEL(bigger) - mov %edx, %r8d /* r8d is offset flag for exit tail */ - xchg %ecx, %eax - xchg %rsi, %rdi -LABEL(bigger): - lea 15(%rax), %r9 - sub %rcx, %r9 - lea LABEL(unaligned_table)(%rip), %r10 - movslq (%r10, %r9,4), %r9 - lea (%r10, %r9), %r10 - jmp *%r10 /* jump to corresponding case */ - -/* - * The following cases will be handled by ashr_0 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(0~15) n(0~15) 15(15+ n-n) ashr_0 - */ - .p2align 4 -LABEL(ashr_0): - - movdqa (%rsi), %xmm1 - pxor %xmm0, %xmm0 /* clear %xmm0 for null char check */ - pcmpeqb %xmm1, %xmm0 /* Any null chars? */ -#if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L - pcmpeqb (%rdi), %xmm1 /* compare 16 bytes for equality */ -#else - movdqa (%rdi), %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm2, %xmm1 /* compare 16 bytes for equality */ -#endif - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %r9d - shr %cl, %edx /* adjust 0xffff for offset */ - shr %cl, %r9d /* adjust for 16-byte offset */ - sub %r9d, %edx - /* - * edx must be the same with r9d if in left byte (16-rcx) is equal to - * the start from (16-rax) and no null char was seen. - */ - jne LABEL(less32bytes) /* mismatch or null char */ - UPDATE_STRNCMP_COUNTER - mov $16, %rcx - mov $16, %r9 - pxor %xmm0, %xmm0 /* clear xmm0, may have changed above */ - - /* - * Now both strings are aligned at 16-byte boundary. Loop over strings - * checking 32-bytes per iteration. - */ - .p2align 4 -LABEL(loop_ashr_0): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) /* mismatch or null char seen */ - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rcx - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rcx - jmp LABEL(loop_ashr_0) - -/* - * The following cases will be handled by ashr_1 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(15) n -15 0(15 +(n-15) - n) ashr_1 - */ - .p2align 4 -LABEL(ashr_1): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 /* Any null chars? */ - pslldq $15, %xmm2 /* shift first string to align with second */ - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 /* compare 16 bytes for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %r9d - shr %cl, %edx /* adjust 0xffff for offset */ - shr %cl, %r9d /* adjust for 16-byte offset */ - sub %r9d, %edx - jnz LABEL(less32bytes) /* mismatch or null char seen */ - movdqa (%rdi), %xmm3 - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads*/ - mov $1, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 1(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_1): - add $16, %r10 - jg LABEL(nibble_ashr_1) /* cross page boundary */ - -LABEL(gobble_ashr_1): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 /* store for next cycle */ - -#ifndef USE_SSSE3 - psrldq $1, %xmm3 - pslldq $15, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $1, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_1) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 /* store for next cycle */ - -#ifndef USE_SSSE3 - psrldq $1, %xmm3 - pslldq $15, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $1, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - add $16, %rcx - movdqa %xmm4, %xmm3 - jmp LABEL(loop_ashr_1) - - /* - * Nibble avoids loads across page boundary. This is to avoid a potential - * access into unmapped memory. - */ - .p2align 4 -LABEL(nibble_ashr_1): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char*/ - pmovmskb %xmm0, %edx - test $0xfffe, %edx - jnz LABEL(ashr_1_exittail) /* find null char*/ - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $15, %r11 - jbe LABEL(ashr_1_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 /* substract 4K from %r10 */ - jmp LABEL(gobble_ashr_1) - - /* - * Once find null char, determine if there is a string mismatch - * before the null char. - */ - .p2align 4 -LABEL(ashr_1_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $1, %xmm0 - psrldq $1, %xmm3 - jmp LABEL(aftertail) - -/* - * The following cases will be handled by ashr_2 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(14~15) n -14 1(15 +(n-14) - n) ashr_2 - */ - .p2align 4 -LABEL(ashr_2): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $14, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads */ - mov $2, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 2(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_2): - add $16, %r10 - jg LABEL(nibble_ashr_2) - -LABEL(gobble_ashr_2): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $2, %xmm3 - pslldq $14, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $2, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_2) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $2, %xmm3 - pslldq $14, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $2, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - jmp LABEL(loop_ashr_2) - - .p2align 4 -LABEL(nibble_ashr_2): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char */ - pmovmskb %xmm0, %edx - test $0xfffc, %edx - jnz LABEL(ashr_2_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $14, %r11 - jbe LABEL(ashr_2_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 - jmp LABEL(gobble_ashr_2) - - .p2align 4 -LABEL(ashr_2_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $2, %xmm0 - psrldq $2, %xmm3 - jmp LABEL(aftertail) - -/* - * The following cases will be handled by ashr_3 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(13~15) n -13 2(15 +(n-13) - n) ashr_3 - */ - .p2align 4 -LABEL(ashr_3): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $13, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads */ - mov $3, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 3(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_3): - add $16, %r10 - jg LABEL(nibble_ashr_3) - -LABEL(gobble_ashr_3): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $3, %xmm3 - pslldq $13, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $3, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_3) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $3, %xmm3 - pslldq $13, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $3, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - jmp LABEL(loop_ashr_3) - - .p2align 4 -LABEL(nibble_ashr_3): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char */ - pmovmskb %xmm0, %edx - test $0xfff8, %edx - jnz LABEL(ashr_3_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $13, %r11 - jbe LABEL(ashr_3_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 - jmp LABEL(gobble_ashr_3) - - .p2align 4 -LABEL(ashr_3_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $3, %xmm0 - psrldq $3, %xmm3 - jmp LABEL(aftertail) - -/* - * The following cases will be handled by ashr_4 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(12~15) n -12 3(15 +(n-12) - n) ashr_4 - */ - .p2align 4 -LABEL(ashr_4): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $12, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads */ - mov $4, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 4(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_4): - add $16, %r10 - jg LABEL(nibble_ashr_4) - -LABEL(gobble_ashr_4): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $4, %xmm3 - pslldq $12, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $4, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_4) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $4, %xmm3 - pslldq $12, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $4, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - jmp LABEL(loop_ashr_4) - - .p2align 4 -LABEL(nibble_ashr_4): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char */ - pmovmskb %xmm0, %edx - test $0xfff0, %edx - jnz LABEL(ashr_4_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $12, %r11 - jbe LABEL(ashr_4_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 - jmp LABEL(gobble_ashr_4) - - .p2align 4 -LABEL(ashr_4_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $4, %xmm0 - psrldq $4, %xmm3 - jmp LABEL(aftertail) - -/* - * The following cases will be handled by ashr_5 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(11~15) n - 11 4(15 +(n-11) - n) ashr_5 - */ - .p2align 4 -LABEL(ashr_5): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $11, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads */ - mov $5, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 5(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_5): - add $16, %r10 - jg LABEL(nibble_ashr_5) - -LABEL(gobble_ashr_5): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $5, %xmm3 - pslldq $11, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $5, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_5) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $5, %xmm3 - pslldq $11, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $5, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - jmp LABEL(loop_ashr_5) - - .p2align 4 -LABEL(nibble_ashr_5): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char */ - pmovmskb %xmm0, %edx - test $0xffe0, %edx - jnz LABEL(ashr_5_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $11, %r11 - jbe LABEL(ashr_5_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 - jmp LABEL(gobble_ashr_5) - - .p2align 4 -LABEL(ashr_5_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $5, %xmm0 - psrldq $5, %xmm3 - jmp LABEL(aftertail) - -/* - * The following cases will be handled by ashr_6 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(10~15) n - 10 5(15 +(n-10) - n) ashr_6 - */ - .p2align 4 -LABEL(ashr_6): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $10, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads */ - mov $6, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 6(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_6): - add $16, %r10 - jg LABEL(nibble_ashr_6) - -LABEL(gobble_ashr_6): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $6, %xmm3 - pslldq $10, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $6, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_6) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $6, %xmm3 - pslldq $10, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $6, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - jmp LABEL(loop_ashr_6) - - .p2align 4 -LABEL(nibble_ashr_6): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char */ - pmovmskb %xmm0, %edx - test $0xffc0, %edx - jnz LABEL(ashr_6_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $10, %r11 - jbe LABEL(ashr_6_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 - jmp LABEL(gobble_ashr_6) - - .p2align 4 -LABEL(ashr_6_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $6, %xmm0 - psrldq $6, %xmm3 - jmp LABEL(aftertail) - -/* - * The following cases will be handled by ashr_7 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(9~15) n - 9 6(15 +(n - 9) - n) ashr_7 - */ - .p2align 4 -LABEL(ashr_7): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $9, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads */ - mov $7, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 7(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_7): - add $16, %r10 - jg LABEL(nibble_ashr_7) - -LABEL(gobble_ashr_7): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $7, %xmm3 - pslldq $9, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $7, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_7) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $7, %xmm3 - pslldq $9, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $7, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - jmp LABEL(loop_ashr_7) - - .p2align 4 -LABEL(nibble_ashr_7): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char */ - pmovmskb %xmm0, %edx - test $0xff80, %edx - jnz LABEL(ashr_7_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $9, %r11 - jbe LABEL(ashr_7_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 - jmp LABEL(gobble_ashr_7) - - .p2align 4 -LABEL(ashr_7_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $7, %xmm0 - psrldq $7, %xmm3 - jmp LABEL(aftertail) - -/* - * The following cases will be handled by ashr_8 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(8~15) n - 8 7(15 +(n - 8) - n) ashr_8 - */ - .p2align 4 -LABEL(ashr_8): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $8, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads */ - mov $8, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 8(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_8): - add $16, %r10 - jg LABEL(nibble_ashr_8) - -LABEL(gobble_ashr_8): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $8, %xmm3 - pslldq $8, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $8, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_8) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $8, %xmm3 - pslldq $8, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $8, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - jmp LABEL(loop_ashr_8) - - .p2align 4 -LABEL(nibble_ashr_8): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char */ - pmovmskb %xmm0, %edx - test $0xff00, %edx - jnz LABEL(ashr_8_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $8, %r11 - jbe LABEL(ashr_8_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 - jmp LABEL(gobble_ashr_8) - - .p2align 4 -LABEL(ashr_8_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $8, %xmm0 - psrldq $8, %xmm3 - jmp LABEL(aftertail) - -/* - * The following cases will be handled by ashr_9 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(7~15) n - 7 8(15 +(n - 7) - n) ashr_9 - */ - .p2align 4 -LABEL(ashr_9): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $7, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads */ - mov $9, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 9(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_9): - add $16, %r10 - jg LABEL(nibble_ashr_9) - -LABEL(gobble_ashr_9): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $9, %xmm3 - pslldq $7, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $9, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_9) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $9, %xmm3 - pslldq $7, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $9, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 /* store for next cycle */ - jmp LABEL(loop_ashr_9) - - .p2align 4 -LABEL(nibble_ashr_9): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char */ - pmovmskb %xmm0, %edx - test $0xfe00, %edx - jnz LABEL(ashr_9_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $7, %r11 - jbe LABEL(ashr_9_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 - jmp LABEL(gobble_ashr_9) - - .p2align 4 -LABEL(ashr_9_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $9, %xmm0 - psrldq $9, %xmm3 - jmp LABEL(aftertail) - -/* - * The following cases will be handled by ashr_10 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(6~15) n - 6 9(15 +(n - 6) - n) ashr_10 - */ - .p2align 4 -LABEL(ashr_10): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $6, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads */ - mov $10, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 10(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_10): - add $16, %r10 - jg LABEL(nibble_ashr_10) - -LABEL(gobble_ashr_10): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $10, %xmm3 - pslldq $6, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $10, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_10) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $10, %xmm3 - pslldq $6, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $10, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - jmp LABEL(loop_ashr_10) - - .p2align 4 -LABEL(nibble_ashr_10): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char */ - pmovmskb %xmm0, %edx - test $0xfc00, %edx - jnz LABEL(ashr_10_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $6, %r11 - jbe LABEL(ashr_10_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 - jmp LABEL(gobble_ashr_10) - - .p2align 4 -LABEL(ashr_10_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $10, %xmm0 - psrldq $10, %xmm3 - jmp LABEL(aftertail) - -/* - * The following cases will be handled by ashr_11 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(5~15) n - 5 10(15 +(n - 5) - n) ashr_11 - */ - .p2align 4 -LABEL(ashr_11): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $5, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads */ - mov $11, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 11(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_11): - add $16, %r10 - jg LABEL(nibble_ashr_11) - -LABEL(gobble_ashr_11): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $11, %xmm3 - pslldq $5, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $11, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_11) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $11, %xmm3 - pslldq $5, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $11, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - jmp LABEL(loop_ashr_11) - - .p2align 4 -LABEL(nibble_ashr_11): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char */ - pmovmskb %xmm0, %edx - test $0xf800, %edx - jnz LABEL(ashr_11_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $5, %r11 - jbe LABEL(ashr_11_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 - jmp LABEL(gobble_ashr_11) - - .p2align 4 -LABEL(ashr_11_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $11, %xmm0 - psrldq $11, %xmm3 - jmp LABEL(aftertail) - -/* - * The following cases will be handled by ashr_12 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(4~15) n - 4 11(15 +(n - 4) - n) ashr_12 - */ - .p2align 4 -LABEL(ashr_12): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $4, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads */ - mov $12, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 12(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_12): - add $16, %r10 - jg LABEL(nibble_ashr_12) - -LABEL(gobble_ashr_12): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $12, %xmm3 - pslldq $4, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $12, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_12) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $12, %xmm3 - pslldq $4, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $12, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - jmp LABEL(loop_ashr_12) - - .p2align 4 -LABEL(nibble_ashr_12): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char */ - pmovmskb %xmm0, %edx - test $0xf000, %edx - jnz LABEL(ashr_12_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $4, %r11 - jbe LABEL(ashr_12_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 - jmp LABEL(gobble_ashr_12) - - .p2align 4 -LABEL(ashr_12_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $12, %xmm0 - psrldq $12, %xmm3 - jmp LABEL(aftertail) - -/* - * The following cases will be handled by ashr_13 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(3~15) n - 3 12(15 +(n - 3) - n) ashr_13 - */ - .p2align 4 -LABEL(ashr_13): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $3, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads */ - mov $13, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 13(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_13): - add $16, %r10 - jg LABEL(nibble_ashr_13) - -LABEL(gobble_ashr_13): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $13, %xmm3 - pslldq $3, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $13, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_13) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $13, %xmm3 - pslldq $3, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $13, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - jmp LABEL(loop_ashr_13) - - .p2align 4 -LABEL(nibble_ashr_13): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char */ - pmovmskb %xmm0, %edx - test $0xe000, %edx - jnz LABEL(ashr_13_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $3, %r11 - jbe LABEL(ashr_13_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 - jmp LABEL(gobble_ashr_13) - - .p2align 4 -LABEL(ashr_13_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $13, %xmm0 - psrldq $13, %xmm3 - jmp LABEL(aftertail) - -/* - * The following cases will be handled by ashr_14 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(2~15) n - 2 13(15 +(n - 2) - n) ashr_14 - */ - .p2align 4 -LABEL(ashr_14): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $2, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads */ - mov $14, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 14(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_14): - add $16, %r10 - jg LABEL(nibble_ashr_14) - -LABEL(gobble_ashr_14): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $14, %xmm3 - pslldq $2, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $14, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_14) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $14, %xmm3 - pslldq $2, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $14, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP | defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - jmp LABEL(loop_ashr_14) - - .p2align 4 -LABEL(nibble_ashr_14): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char */ - pmovmskb %xmm0, %edx - test $0xc000, %edx - jnz LABEL(ashr_14_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmp $2, %r11 - jbe LABEL(ashr_14_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 - jmp LABEL(gobble_ashr_14) - - .p2align 4 -LABEL(ashr_14_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $14, %xmm0 - psrldq $14, %xmm3 - jmp LABEL(aftertail) - -/* - * The following cases will be handled by ashr_15 - * rcx(offset of rsi) rax(offset of rdi) relative offset corresponding case - * n(1~15) n - 1 14(15 +(n - 1) - n) ashr_15 - */ - .p2align 4 -LABEL(ashr_15): - pxor %xmm0, %xmm0 - movdqa (%rdi), %xmm2 - movdqa (%rsi), %xmm1 - pcmpeqb %xmm1, %xmm0 - pslldq $1, %xmm2 - TOLOWER (%xmm1, %xmm2) - pcmpeqb %xmm1, %xmm2 - psubb %xmm0, %xmm2 - pmovmskb %xmm2, %r9d - shr %cl, %edx - shr %cl, %r9d - sub %r9d, %edx - jnz LABEL(less32bytes) - - movdqa (%rdi), %xmm3 - - UPDATE_STRNCMP_COUNTER - - pxor %xmm0, %xmm0 - mov $16, %rcx /* index for loads */ - mov $15, %r9d /* byte position left over from less32bytes case */ - /* - * Setup %r10 value allows us to detect crossing a page boundary. - * When %r10 goes positive we have crossed a page boundary and - * need to do a nibble. - */ - lea 15(%rdi), %r10 - and $0xfff, %r10 /* offset into 4K page */ - - sub $0x1000, %r10 /* subtract 4K pagesize */ - - .p2align 4 -LABEL(loop_ashr_15): - add $16, %r10 - jg LABEL(nibble_ashr_15) - -LABEL(gobble_ashr_15): - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $15, %xmm3 - pslldq $1, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $15, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - - add $16, %r10 - jg LABEL(nibble_ashr_15) /* cross page boundary */ - - movdqa (%rsi, %rcx), %xmm1 - movdqa (%rdi, %rcx), %xmm2 - movdqa %xmm2, %xmm4 - -#ifndef USE_SSSE3 - psrldq $15, %xmm3 - pslldq $1, %xmm2 - por %xmm3, %xmm2 /* merge into one 16byte value */ -#else - palignr $15, %xmm3, %xmm2 /* merge into one 16byte value */ -#endif - TOLOWER (%xmm1, %xmm2) - - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - sub $0xffff, %edx - jnz LABEL(exit) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub $16, %r11 - jbe LABEL(strcmp_exitz) -#endif - - add $16, %rcx - movdqa %xmm4, %xmm3 - jmp LABEL(loop_ashr_15) - - .p2align 4 -LABEL(nibble_ashr_15): - pcmpeqb %xmm3, %xmm0 /* check nibble for null char */ - pmovmskb %xmm0, %edx - test $0x8000, %edx - jnz LABEL(ashr_15_exittail) - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - cmpq $1, %r11 - jbe LABEL(ashr_15_exittail) -#endif - - pxor %xmm0, %xmm0 - sub $0x1000, %r10 - jmp LABEL(gobble_ashr_15) - - .p2align 4 -LABEL(ashr_15_exittail): - movdqa (%rsi, %rcx), %xmm1 - psrldq $15, %xmm3 - psrldq $15, %xmm0 - - .p2align 4 -LABEL(aftertail): - TOLOWER (%xmm1, %xmm3) - pcmpeqb %xmm3, %xmm1 - psubb %xmm0, %xmm1 - pmovmskb %xmm1, %edx - not %edx - - .p2align 4 -LABEL(exit): - lea -16(%r9, %rcx), %rax /* locate the exact offset for rdi */ -LABEL(less32bytes): - lea (%rdi, %rax), %rdi /* locate the exact address for first operand(rdi) */ - lea (%rsi, %rcx), %rsi /* locate the exact address for second operand(rsi) */ - test %r8d, %r8d - jz LABEL(ret) - xchg %rsi, %rdi /* recover original order according to flag(%r8d) */ - - .p2align 4 -LABEL(ret): -LABEL(less16bytes): - bsf %rdx, %rdx /* find and store bit index in %rdx */ - -#if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L - sub %rdx, %r11 - jbe LABEL(strcmp_exitz) -#endif - movzbl (%rsi, %rdx), %ecx - movzbl (%rdi, %rdx), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - leaq _nl_C_LC_CTYPE_tolower+128*4(%rip), %rdx - movl (%rdx,%rcx,4), %ecx - movl (%rdx,%rax,4), %eax -#endif - - sub %ecx, %eax - ret - -LABEL(strcmp_exitz): - xor %eax, %eax - ret - - .p2align 4 -LABEL(Byte0): - movzx (%rsi), %ecx - movzx (%rdi), %eax - -#if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L - leaq _nl_C_LC_CTYPE_tolower+128*4(%rip), %rdx - movl (%rdx,%rcx,4), %ecx - movl (%rdx,%rax,4), %eax -#endif - - sub %ecx, %eax - ret -END (STRCMP) - - .section .rodata,"a",@progbits - .p2align 3 -LABEL(unaligned_table): - .int LABEL(ashr_1) - LABEL(unaligned_table) - .int LABEL(ashr_2) - LABEL(unaligned_table) - .int LABEL(ashr_3) - LABEL(unaligned_table) - .int LABEL(ashr_4) - LABEL(unaligned_table) - .int LABEL(ashr_5) - LABEL(unaligned_table) - .int LABEL(ashr_6) - LABEL(unaligned_table) - .int LABEL(ashr_7) - LABEL(unaligned_table) - .int LABEL(ashr_8) - LABEL(unaligned_table) - .int LABEL(ashr_9) - LABEL(unaligned_table) - .int LABEL(ashr_10) - LABEL(unaligned_table) - .int LABEL(ashr_11) - LABEL(unaligned_table) - .int LABEL(ashr_12) - LABEL(unaligned_table) - .int LABEL(ashr_13) - LABEL(unaligned_table) - .int LABEL(ashr_14) - LABEL(unaligned_table) - .int LABEL(ashr_15) - LABEL(unaligned_table) - .int LABEL(ashr_0) - LABEL(unaligned_table) -libc_hidden_builtin_def (STRCMP) diff --git a/sysdeps/x86_64/strcpy.S b/sysdeps/x86_64/strcpy.S deleted file mode 100644 index 0351b0820d..0000000000 --- a/sysdeps/x86_64/strcpy.S +++ /dev/null @@ -1,156 +0,0 @@ -/* strcpy/stpcpy implementation for x86-64. - Copyright (C) 2002-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#ifndef USE_AS_STPCPY -# define STRCPY strcpy -#endif - - .text -ENTRY (STRCPY) - movq %rsi, %rcx /* Source register. */ - andl $7, %ecx /* mask alignment bits */ - movq %rdi, %rdx /* Duplicate destination pointer. */ - - jz 5f /* aligned => start loop */ - - neg %ecx /* We need to align to 8 bytes. */ - addl $8,%ecx - /* Search the first bytes directly. */ -0: - movb (%rsi), %al /* Fetch a byte */ - testb %al, %al /* Is it NUL? */ - movb %al, (%rdx) /* Store it */ - jz 4f /* If it was NUL, done! */ - incq %rsi - incq %rdx - decl %ecx - jnz 0b - -5: - movq $0xfefefefefefefeff,%r8 - - /* Now the sources is aligned. Unfortunatly we cannot force - to have both source and destination aligned, so ignore the - alignment of the destination. */ - .p2align 4 -1: - /* 1st unroll. */ - movq (%rsi), %rax /* Read double word (8 bytes). */ - addq $8, %rsi /* Adjust pointer for next word. */ - movq %rax, %r9 /* Save a copy for NUL finding. */ - addq %r8, %r9 /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc 3f /* highest byte is NUL => return pointer */ - xorq %rax, %r9 /* (word+magic)^word */ - orq %r8, %r9 /* set all non-carry bits */ - incq %r9 /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - - jnz 3f /* found NUL => return pointer */ - - movq %rax, (%rdx) /* Write value to destination. */ - addq $8, %rdx /* Adjust pointer. */ - - /* 2nd unroll. */ - movq (%rsi), %rax /* Read double word (8 bytes). */ - addq $8, %rsi /* Adjust pointer for next word. */ - movq %rax, %r9 /* Save a copy for NUL finding. */ - addq %r8, %r9 /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc 3f /* highest byte is NUL => return pointer */ - xorq %rax, %r9 /* (word+magic)^word */ - orq %r8, %r9 /* set all non-carry bits */ - incq %r9 /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - - jnz 3f /* found NUL => return pointer */ - - movq %rax, (%rdx) /* Write value to destination. */ - addq $8, %rdx /* Adjust pointer. */ - - /* 3rd unroll. */ - movq (%rsi), %rax /* Read double word (8 bytes). */ - addq $8, %rsi /* Adjust pointer for next word. */ - movq %rax, %r9 /* Save a copy for NUL finding. */ - addq %r8, %r9 /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc 3f /* highest byte is NUL => return pointer */ - xorq %rax, %r9 /* (word+magic)^word */ - orq %r8, %r9 /* set all non-carry bits */ - incq %r9 /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - - jnz 3f /* found NUL => return pointer */ - - movq %rax, (%rdx) /* Write value to destination. */ - addq $8, %rdx /* Adjust pointer. */ - - /* 4th unroll. */ - movq (%rsi), %rax /* Read double word (8 bytes). */ - addq $8, %rsi /* Adjust pointer for next word. */ - movq %rax, %r9 /* Save a copy for NUL finding. */ - addq %r8, %r9 /* add the magic value to the word. We get - carry bits reported for each byte which - is *not* 0 */ - jnc 3f /* highest byte is NUL => return pointer */ - xorq %rax, %r9 /* (word+magic)^word */ - orq %r8, %r9 /* set all non-carry bits */ - incq %r9 /* add 1: if one carry bit was *not* set - the addition will not result in 0. */ - - jnz 3f /* found NUL => return pointer */ - - movq %rax, (%rdx) /* Write value to destination. */ - addq $8, %rdx /* Adjust pointer. */ - jmp 1b /* Next iteration. */ - - /* Do the last few bytes. %rax contains the value to write. - The loop is unrolled twice. */ - .p2align 4 -3: - /* Note that stpcpy needs to return with the value of the NUL - byte. */ - movb %al, (%rdx) /* 1st byte. */ - testb %al, %al /* Is it NUL. */ - jz 4f /* yes, finish. */ - incq %rdx /* Increment destination. */ - movb %ah, (%rdx) /* 2nd byte. */ - testb %ah, %ah /* Is it NUL?. */ - jz 4f /* yes, finish. */ - incq %rdx /* Increment destination. */ - shrq $16, %rax /* Shift... */ - jmp 3b /* and look at next two bytes in %rax. */ - -4: -#ifdef USE_AS_STPCPY - movq %rdx, %rax /* Destination is return value. */ -#else - movq %rdi, %rax /* Source is return value. */ -#endif - retq -END (STRCPY) -#ifndef USE_AS_STPCPY -libc_hidden_builtin_def (strcpy) -#endif diff --git a/sysdeps/x86_64/strcspn.S b/sysdeps/x86_64/strcspn.S deleted file mode 100644 index a1d1f7dfba..0000000000 --- a/sysdeps/x86_64/strcspn.S +++ /dev/null @@ -1,125 +0,0 @@ -/* strcspn (str, ss) -- Return the length of the initial segment of STR - which contains no characters from SS. - For AMD x86-64. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper . - Bug fixes by Alan Modra . - Adopted for x86-64 by Andreas Jaeger . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -/* BEWARE: `#ifdef strcspn' means that strcspn is redefined as `strpbrk' */ -#define STRPBRK_P (defined strcspn) - - .text -ENTRY (strcspn) - - movq %rdi, %rdx /* Save SRC. */ - - /* First we create a table with flags for all possible characters. - For the ASCII (7bit/8bit) or ISO-8859-X character sets which are - supported by the C string functions we have 256 characters. - Before inserting marks for the stop characters we clear the whole - table. */ - movq %rdi, %r8 /* Save value. */ - subq $256, %rsp /* Make space for 256 bytes. */ - cfi_adjust_cfa_offset(256) - movl $32, %ecx /* 32*8 bytes = 256 bytes. */ - movq %rsp, %rdi - xorl %eax, %eax /* We store 0s. */ - cld - rep - stosq - - movq %rsi, %rax /* Setup skipset. */ - -/* For understanding the following code remember that %rcx == 0 now. - Although all the following instruction only modify %cl we always - have a correct zero-extended 64-bit value in %rcx. */ - - .p2align 4 -L(2): movb (%rax), %cl /* get byte from skipset */ - testb %cl, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%rsp,%rcx) /* set corresponding byte in skipset table */ - - movb 1(%rax), %cl /* get byte from skipset */ - testb $0xff, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%rsp,%rcx) /* set corresponding byte in skipset table */ - - movb 2(%rax), %cl /* get byte from skipset */ - testb $0xff, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%rsp,%rcx) /* set corresponding byte in skipset table */ - - movb 3(%rax), %cl /* get byte from skipset */ - addq $4, %rax /* increment skipset pointer */ - movb %cl, (%rsp,%rcx) /* set corresponding byte in skipset table */ - testb $0xff, %cl /* is NUL char? */ - jnz L(2) /* no => process next dword from skipset */ - -L(1): leaq -4(%rdx), %rax /* prepare loop */ - - /* We use a neat trick for the following loop. Normally we would - have to test for two termination conditions - 1. a character in the skipset was found - and - 2. the end of the string was found - But as a sign that the character is in the skipset we store its - value in the table. But the value of NUL is NUL so the loop - terminates for NUL in every case. */ - - .p2align 4 -L(3): addq $4, %rax /* adjust pointer for full loop round */ - - movb (%rax), %cl /* get byte from string */ - cmpb %cl, (%rsp,%rcx) /* is it contained in skipset? */ - je L(4) /* yes => return */ - - movb 1(%rax), %cl /* get byte from string */ - cmpb %cl, (%rsp,%rcx) /* is it contained in skipset? */ - je L(5) /* yes => return */ - - movb 2(%rax), %cl /* get byte from string */ - cmpb %cl, (%rsp,%rcx) /* is it contained in skipset? */ - jz L(6) /* yes => return */ - - movb 3(%rax), %cl /* get byte from string */ - cmpb %cl, (%rsp,%rcx) /* is it contained in skipset? */ - jne L(3) /* no => start loop again */ - - incq %rax /* adjust pointer */ -L(6): incq %rax -L(5): incq %rax - -L(4): addq $256, %rsp /* remove skipset */ - cfi_adjust_cfa_offset(-256) -#if STRPBRK_P - xorl %edx,%edx - orb %cl, %cl /* was last character NUL? */ - cmovzq %rdx, %rax /* Yes: return NULL */ -#else - subq %rdx, %rax /* we have to return the number of valid - characters, so compute distance to first - non-valid character */ -#endif - ret -END (strcspn) -libc_hidden_builtin_def (strcspn) diff --git a/sysdeps/x86_64/strlen.S b/sysdeps/x86_64/strlen.S deleted file mode 100644 index b5ab117c79..0000000000 --- a/sysdeps/x86_64/strlen.S +++ /dev/null @@ -1,258 +0,0 @@ -/* SSE2 version of strlen/wcslen. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#ifdef AS_WCSLEN -# define PMINU pminud -# define PCMPEQ pcmpeqd -# define SHIFT_RETURN shrq $2, %rax -#else -# define PMINU pminub -# define PCMPEQ pcmpeqb -# define SHIFT_RETURN -#endif - -/* Long lived register in strlen(s), strnlen(s, n) are: - - %xmm3 - zero - %rdi - s - %r10 (s+n) & (~(64-1)) - %r11 s+n -*/ - - -.text -ENTRY(strlen) - -/* Test 64 bytes from %rax for zero. Save result as bitmask in %rdx. */ -#define FIND_ZERO \ - PCMPEQ (%rax), %xmm0; \ - PCMPEQ 16(%rax), %xmm1; \ - PCMPEQ 32(%rax), %xmm2; \ - PCMPEQ 48(%rax), %xmm3; \ - pmovmskb %xmm0, %esi; \ - pmovmskb %xmm1, %edx; \ - pmovmskb %xmm2, %r8d; \ - pmovmskb %xmm3, %ecx; \ - salq $16, %rdx; \ - salq $16, %rcx; \ - orq %rsi, %rdx; \ - orq %r8, %rcx; \ - salq $32, %rcx; \ - orq %rcx, %rdx; - -#ifdef AS_STRNLEN -/* Do not read anything when n==0. */ - test %rsi, %rsi - jne L(n_nonzero) - xor %rax, %rax - ret -L(n_nonzero): -# ifdef AS_WCSLEN - shlq $2, %rsi -# endif - -/* Initialize long lived registers. */ - - add %rdi, %rsi - mov %rsi, %r10 - and $-64, %r10 - mov %rsi, %r11 -#endif - - pxor %xmm0, %xmm0 - pxor %xmm1, %xmm1 - pxor %xmm2, %xmm2 - pxor %xmm3, %xmm3 - movq %rdi, %rax - movq %rdi, %rcx - andq $4095, %rcx -/* Offsets 4032-4047 will be aligned into 4032 thus fit into page. */ - cmpq $4047, %rcx -/* We cannot unify this branching as it would be ~6 cycles slower. */ - ja L(cross_page) - -#ifdef AS_STRNLEN -/* Test if end is among first 64 bytes. */ -# define STRNLEN_PROLOG \ - mov %r11, %rsi; \ - subq %rax, %rsi; \ - andq $-64, %rax; \ - testq $-64, %rsi; \ - je L(strnlen_ret) -#else -# define STRNLEN_PROLOG andq $-64, %rax; -#endif - -/* Ignore bits in mask that come before start of string. */ -#define PROLOG(lab) \ - movq %rdi, %rcx; \ - xorq %rax, %rcx; \ - STRNLEN_PROLOG; \ - sarq %cl, %rdx; \ - test %rdx, %rdx; \ - je L(lab); \ - bsfq %rdx, %rax; \ - SHIFT_RETURN; \ - ret - -#ifdef AS_STRNLEN - andq $-16, %rax - FIND_ZERO -#else - /* Test first 16 bytes unaligned. */ - movdqu (%rax), %xmm4 - PCMPEQ %xmm0, %xmm4 - pmovmskb %xmm4, %edx - test %edx, %edx - je L(next48_bytes) - bsf %edx, %eax /* If eax is zeroed 16bit bsf can be used. */ - SHIFT_RETURN - ret - -L(next48_bytes): -/* Same as FIND_ZERO except we do not check first 16 bytes. */ - andq $-16, %rax - PCMPEQ 16(%rax), %xmm1 - PCMPEQ 32(%rax), %xmm2 - PCMPEQ 48(%rax), %xmm3 - pmovmskb %xmm1, %edx - pmovmskb %xmm2, %r8d - pmovmskb %xmm3, %ecx - salq $16, %rdx - salq $16, %rcx - orq %r8, %rcx - salq $32, %rcx - orq %rcx, %rdx -#endif - - /* When no zero byte is found xmm1-3 are zero so we do not have to - zero them. */ - PROLOG(loop) - - .p2align 4 -L(cross_page): - andq $-64, %rax - FIND_ZERO - PROLOG(loop_init) - -#ifdef AS_STRNLEN -/* We must do this check to correctly handle strnlen (s, -1). */ -L(strnlen_ret): - bts %rsi, %rdx - sarq %cl, %rdx - test %rdx, %rdx - je L(loop_init) - bsfq %rdx, %rax - SHIFT_RETURN - ret -#endif - .p2align 4 -L(loop_init): - pxor %xmm1, %xmm1 - pxor %xmm2, %xmm2 - pxor %xmm3, %xmm3 -#ifdef AS_STRNLEN - .p2align 4 -L(loop): - - addq $64, %rax - cmpq %rax, %r10 - je L(exit_end) - - movdqa (%rax), %xmm0 - PMINU 16(%rax), %xmm0 - PMINU 32(%rax), %xmm0 - PMINU 48(%rax), %xmm0 - PCMPEQ %xmm3, %xmm0 - pmovmskb %xmm0, %edx - testl %edx, %edx - jne L(exit) - jmp L(loop) - - .p2align 4 -L(exit_end): - cmp %rax, %r11 - je L(first) /* Do not read when end is at page boundary. */ - pxor %xmm0, %xmm0 - FIND_ZERO - -L(first): - bts %r11, %rdx - bsfq %rdx, %rdx - addq %rdx, %rax - subq %rdi, %rax - SHIFT_RETURN - ret - - .p2align 4 -L(exit): - pxor %xmm0, %xmm0 - FIND_ZERO - - bsfq %rdx, %rdx - addq %rdx, %rax - subq %rdi, %rax - SHIFT_RETURN - ret - -#else - - /* Main loop. Unrolled twice to improve L2 cache performance on core2. */ - .p2align 4 -L(loop): - - movdqa 64(%rax), %xmm0 - PMINU 80(%rax), %xmm0 - PMINU 96(%rax), %xmm0 - PMINU 112(%rax), %xmm0 - PCMPEQ %xmm3, %xmm0 - pmovmskb %xmm0, %edx - testl %edx, %edx - jne L(exit64) - - subq $-128, %rax - - movdqa (%rax), %xmm0 - PMINU 16(%rax), %xmm0 - PMINU 32(%rax), %xmm0 - PMINU 48(%rax), %xmm0 - PCMPEQ %xmm3, %xmm0 - pmovmskb %xmm0, %edx - testl %edx, %edx - jne L(exit0) - jmp L(loop) - - .p2align 4 -L(exit64): - addq $64, %rax -L(exit0): - pxor %xmm0, %xmm0 - FIND_ZERO - - bsfq %rdx, %rdx - addq %rdx, %rax - subq %rdi, %rax - SHIFT_RETURN - ret - -#endif - -END(strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/x86_64/strncase.S b/sysdeps/x86_64/strncase.S deleted file mode 100644 index 2de2ce4b96..0000000000 --- a/sysdeps/x86_64/strncase.S +++ /dev/null @@ -1 +0,0 @@ -/* In strncase_l.S. */ diff --git a/sysdeps/x86_64/strncase_l-nonascii.c b/sysdeps/x86_64/strncase_l-nonascii.c deleted file mode 100644 index 8664863778..0000000000 --- a/sysdeps/x86_64/strncase_l-nonascii.c +++ /dev/null @@ -1,8 +0,0 @@ -#include - -extern int __strncasecmp_l_nonascii (const char *__s1, const char *__s2, - size_t __n, __locale_t __loc); - -#define __strncasecmp_l __strncasecmp_l_nonascii -#define USE_IN_EXTENDED_LOCALE_MODEL 1 -#include diff --git a/sysdeps/x86_64/strncase_l.S b/sysdeps/x86_64/strncase_l.S deleted file mode 100644 index c725cd85b3..0000000000 --- a/sysdeps/x86_64/strncase_l.S +++ /dev/null @@ -1,6 +0,0 @@ -#define STRCMP __strncasecmp_l -#define USE_AS_STRNCASECMP_L -#include "strcmp.S" - -weak_alias (__strncasecmp_l, strncasecmp_l) -libc_hidden_def (strncasecmp_l) diff --git a/sysdeps/x86_64/strncmp.S b/sysdeps/x86_64/strncmp.S deleted file mode 100644 index 0af34e7f15..0000000000 --- a/sysdeps/x86_64/strncmp.S +++ /dev/null @@ -1,3 +0,0 @@ -#define STRCMP strncmp -#define USE_AS_STRNCMP -#include "strcmp.S" diff --git a/sysdeps/x86_64/strnlen.S b/sysdeps/x86_64/strnlen.S deleted file mode 100644 index d3c43ac482..0000000000 --- a/sysdeps/x86_64/strnlen.S +++ /dev/null @@ -1,6 +0,0 @@ -#define AS_STRNLEN -#define strlen __strnlen -#include "strlen.S" - -weak_alias (__strnlen, strnlen); -libc_hidden_builtin_def (strnlen) diff --git a/sysdeps/x86_64/strpbrk.S b/sysdeps/x86_64/strpbrk.S deleted file mode 100644 index 9b97ada84e..0000000000 --- a/sysdeps/x86_64/strpbrk.S +++ /dev/null @@ -1,2 +0,0 @@ -#define strcspn strpbrk -#include diff --git a/sysdeps/x86_64/strrchr.S b/sysdeps/x86_64/strrchr.S deleted file mode 100644 index e6a33bc599..0000000000 --- a/sysdeps/x86_64/strrchr.S +++ /dev/null @@ -1,228 +0,0 @@ -/* strrchr (str, ch) -- Return pointer to last occurrence of CH in STR. - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - - -#include - - .text -ENTRY (strrchr) - movd %esi, %xmm1 - movq %rdi, %rax - andl $4095, %eax - punpcklbw %xmm1, %xmm1 - cmpq $4032, %rax - punpcklwd %xmm1, %xmm1 - pshufd $0, %xmm1, %xmm1 - ja L(cross_page) - movdqu (%rdi), %xmm0 - pxor %xmm2, %xmm2 - movdqa %xmm0, %xmm3 - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm3 - pmovmskb %xmm0, %ecx - pmovmskb %xmm3, %edx - testq %rdx, %rdx - je L(next_48_bytes) - leaq -1(%rdx), %rax - xorq %rdx, %rax - andq %rcx, %rax - je L(exit) - bsrq %rax, %rax - addq %rdi, %rax - ret - - .p2align 4 -L(next_48_bytes): - movdqu 16(%rdi), %xmm4 - movdqa %xmm4, %xmm5 - movdqu 32(%rdi), %xmm3 - pcmpeqb %xmm1, %xmm4 - pcmpeqb %xmm2, %xmm5 - movdqu 48(%rdi), %xmm0 - pmovmskb %xmm5, %edx - movdqa %xmm3, %xmm5 - pcmpeqb %xmm1, %xmm3 - pcmpeqb %xmm2, %xmm5 - pcmpeqb %xmm0, %xmm2 - salq $16, %rdx - pmovmskb %xmm3, %r8d - pmovmskb %xmm5, %eax - pmovmskb %xmm2, %esi - salq $32, %r8 - salq $32, %rax - pcmpeqb %xmm1, %xmm0 - orq %rdx, %rax - movq %rsi, %rdx - pmovmskb %xmm4, %esi - salq $48, %rdx - salq $16, %rsi - orq %r8, %rsi - orq %rcx, %rsi - pmovmskb %xmm0, %ecx - salq $48, %rcx - orq %rcx, %rsi - orq %rdx, %rax - je L(loop_header2) - leaq -1(%rax), %rcx - xorq %rax, %rcx - andq %rcx, %rsi - je L(exit) - bsrq %rsi, %rsi - leaq (%rdi,%rsi), %rax - ret - - .p2align 4 -L(loop_header2): - testq %rsi, %rsi - movq %rdi, %rcx - je L(no_c_found) -L(loop_header): - addq $64, %rdi - pxor %xmm7, %xmm7 - andq $-64, %rdi - jmp L(loop_entry) - - .p2align 4 -L(loop64): - testq %rdx, %rdx - cmovne %rdx, %rsi - cmovne %rdi, %rcx - addq $64, %rdi -L(loop_entry): - movdqa 32(%rdi), %xmm3 - pxor %xmm6, %xmm6 - movdqa 48(%rdi), %xmm2 - movdqa %xmm3, %xmm0 - movdqa 16(%rdi), %xmm4 - pminub %xmm2, %xmm0 - movdqa (%rdi), %xmm5 - pminub %xmm4, %xmm0 - pminub %xmm5, %xmm0 - pcmpeqb %xmm7, %xmm0 - pmovmskb %xmm0, %eax - movdqa %xmm5, %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %r9d - movdqa %xmm4, %xmm0 - pcmpeqb %xmm1, %xmm0 - pmovmskb %xmm0, %edx - movdqa %xmm3, %xmm0 - pcmpeqb %xmm1, %xmm0 - salq $16, %rdx - pmovmskb %xmm0, %r10d - movdqa %xmm2, %xmm0 - pcmpeqb %xmm1, %xmm0 - salq $32, %r10 - orq %r10, %rdx - pmovmskb %xmm0, %r8d - orq %r9, %rdx - salq $48, %r8 - orq %r8, %rdx - testl %eax, %eax - je L(loop64) - pcmpeqb %xmm6, %xmm4 - pcmpeqb %xmm6, %xmm3 - pcmpeqb %xmm6, %xmm5 - pmovmskb %xmm4, %eax - pmovmskb %xmm3, %r10d - pcmpeqb %xmm6, %xmm2 - pmovmskb %xmm5, %r9d - salq $32, %r10 - salq $16, %rax - pmovmskb %xmm2, %r8d - orq %r10, %rax - orq %r9, %rax - salq $48, %r8 - orq %r8, %rax - leaq -1(%rax), %r8 - xorq %rax, %r8 - andq %r8, %rdx - cmovne %rdi, %rcx - cmovne %rdx, %rsi - bsrq %rsi, %rsi - leaq (%rcx,%rsi), %rax - ret - - .p2align 4 -L(no_c_found): - movl $1, %esi - xorl %ecx, %ecx - jmp L(loop_header) - - .p2align 4 -L(exit): - xorl %eax, %eax - ret - - .p2align 4 -L(cross_page): - movq %rdi, %rax - pxor %xmm0, %xmm0 - andq $-64, %rax - movdqu (%rax), %xmm5 - movdqa %xmm5, %xmm6 - movdqu 16(%rax), %xmm4 - pcmpeqb %xmm1, %xmm5 - pcmpeqb %xmm0, %xmm6 - movdqu 32(%rax), %xmm3 - pmovmskb %xmm6, %esi - movdqa %xmm4, %xmm6 - movdqu 48(%rax), %xmm2 - pcmpeqb %xmm1, %xmm4 - pcmpeqb %xmm0, %xmm6 - pmovmskb %xmm6, %edx - movdqa %xmm3, %xmm6 - pcmpeqb %xmm1, %xmm3 - pcmpeqb %xmm0, %xmm6 - pcmpeqb %xmm2, %xmm0 - salq $16, %rdx - pmovmskb %xmm3, %r9d - pmovmskb %xmm6, %r8d - pmovmskb %xmm0, %ecx - salq $32, %r9 - salq $32, %r8 - pcmpeqb %xmm1, %xmm2 - orq %r8, %rdx - salq $48, %rcx - pmovmskb %xmm5, %r8d - orq %rsi, %rdx - pmovmskb %xmm4, %esi - orq %rcx, %rdx - pmovmskb %xmm2, %ecx - salq $16, %rsi - salq $48, %rcx - orq %r9, %rsi - orq %r8, %rsi - orq %rcx, %rsi - movl %edi, %ecx - subl %eax, %ecx - shrq %cl, %rdx - shrq %cl, %rsi - testq %rdx, %rdx - je L(loop_header2) - leaq -1(%rdx), %rax - xorq %rdx, %rax - andq %rax, %rsi - je L(exit) - bsrq %rsi, %rax - addq %rdi, %rax - ret -END (strrchr) - -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/x86_64/strspn.S b/sysdeps/x86_64/strspn.S deleted file mode 100644 index 3da576f3d6..0000000000 --- a/sysdeps/x86_64/strspn.S +++ /dev/null @@ -1,115 +0,0 @@ -/* strspn (str, ss) -- Return the length of the initial segment of STR - which contains only characters from SS. - For AMD x86-64. - Copyright (C) 1994-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper . - Bug fixes by Alan Modra . - Adopted for x86-64 by Andreas Jaeger . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY (strspn) - - movq %rdi, %rdx /* Save SRC. */ - - /* First we create a table with flags for all possible characters. - For the ASCII (7bit/8bit) or ISO-8859-X character sets which are - supported by the C string functions we have 256 characters. - Before inserting marks for the stop characters we clear the whole - table. */ - movq %rdi, %r8 /* Save value. */ - subq $256, %rsp /* Make space for 256 bytes. */ - cfi_adjust_cfa_offset(256) - movl $32, %ecx /* 32*8 bytes = 256 bytes. */ - movq %rsp, %rdi - xorl %eax, %eax /* We store 0s. */ - cld - rep - stosq - - movq %rsi, %rax /* Setup stopset. */ - -/* For understanding the following code remember that %rcx == 0 now. - Although all the following instruction only modify %cl we always - have a correct zero-extended 64-bit value in %rcx. */ - - .p2align 4 -L(2): movb (%rax), %cl /* get byte from stopset */ - testb %cl, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%rsp,%rcx) /* set corresponding byte in stopset table */ - - movb 1(%rax), %cl /* get byte from stopset */ - testb $0xff, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%rsp,%rcx) /* set corresponding byte in stopset table */ - - movb 2(%rax), %cl /* get byte from stopset */ - testb $0xff, %cl /* is NUL char? */ - jz L(1) /* yes => start compare loop */ - movb %cl, (%rsp,%rcx) /* set corresponding byte in stopset table */ - - movb 3(%rax), %cl /* get byte from stopset */ - addq $4, %rax /* increment stopset pointer */ - movb %cl, (%rsp,%rcx) /* set corresponding byte in stopset table */ - testb $0xff, %cl /* is NUL char? */ - jnz L(2) /* no => process next dword from stopset */ - -L(1): leaq -4(%rdx), %rax /* prepare loop */ - - /* We use a neat trick for the following loop. Normally we would - have to test for two termination conditions - 1. a character in the stopset was found - and - 2. the end of the string was found - But as a sign that the character is in the stopset we store its - value in the table. But the value of NUL is NUL so the loop - terminates for NUL in every case. */ - - .p2align 4 -L(3): addq $4, %rax /* adjust pointer for full loop round */ - - movb (%rax), %cl /* get byte from string */ - testb %cl, (%rsp,%rcx) /* is it contained in skipset? */ - jz L(4) /* no => return */ - - movb 1(%rax), %cl /* get byte from string */ - testb %cl, (%rsp,%rcx) /* is it contained in skipset? */ - jz L(5) /* no => return */ - - movb 2(%rax), %cl /* get byte from string */ - testb %cl, (%rsp,%rcx) /* is it contained in skipset? */ - jz L(6) /* no => return */ - - movb 3(%rax), %cl /* get byte from string */ - testb %cl, (%rsp,%rcx) /* is it contained in skipset? */ - jnz L(3) /* yes => start loop again */ - - incq %rax /* adjust pointer */ -L(6): incq %rax -L(5): incq %rax - -L(4): addq $256, %rsp /* remove stopset */ - cfi_adjust_cfa_offset(-256) - subq %rdx, %rax /* we have to return the number of valid - characters, so compute distance to first - non-valid character */ - ret -END (strspn) -libc_hidden_builtin_def (strspn) diff --git a/sysdeps/x86_64/sub_n.S b/sysdeps/x86_64/sub_n.S deleted file mode 100644 index 44c0d88c58..0000000000 --- a/sysdeps/x86_64/sub_n.S +++ /dev/null @@ -1,23 +0,0 @@ -/* x86-64 __mpn_sub_n -- Add two limb vectors of the same length > 0 and store - sum in a third limb vector. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#define func __mpn_sub_n -#define ADCSBB sbb - -#include "add_n.S" diff --git a/sysdeps/x86_64/submul_1.S b/sysdeps/x86_64/submul_1.S deleted file mode 100644 index 77f772cb0b..0000000000 --- a/sysdeps/x86_64/submul_1.S +++ /dev/null @@ -1,23 +0,0 @@ -/* x86-64 __mpn_submul_1 -- Multiply a limb vector with a limb and subtract - the result from a second limb vector. - Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see . */ - -#define func __mpn_submul_1 -#define ADDSUB sub - -#include "addmul_1.S" diff --git a/sysdeps/x86_64/sysdep.h b/sysdeps/x86_64/sysdep.h deleted file mode 100644 index 1c52544fa3..0000000000 --- a/sysdeps/x86_64/sysdep.h +++ /dev/null @@ -1,169 +0,0 @@ -/* Assembler macros for x86-64. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef _X86_64_SYSDEP_H -#define _X86_64_SYSDEP_H 1 - -#include - -#ifdef __ASSEMBLER__ - -/* Syntactic details of assembler. */ - -/* This macro is for setting proper CFI with DW_CFA_expression describing - the register as saved relative to %rsp instead of relative to the CFA. - Expression is DW_OP_drop, DW_OP_breg7 (%rsp is register 7), sleb128 offset - from %rsp. */ -#define cfi_offset_rel_rsp(regn, off) .cfi_escape 0x10, regn, 0x4, 0x13, \ - 0x77, off & 0x7F | 0x80, off >> 7 - -/* ELF uses byte-counts for .align, most others use log2 of count of bytes. */ -#define ALIGNARG(log2) 1<. */ - -#include -#include -#include -#include -#include -#include -#include - -/* The following 2 functions take a caller argument, that contains the - address expected to be in the TLS descriptor. If it's changed, we - want to return immediately. */ - -/* This function is used to lazily resolve TLS_DESC RELA relocations. - The argument location is used to hold a pointer to the relocation. */ - -void -attribute_hidden -_dl_tlsdesc_resolve_rela_fixup (struct tlsdesc volatile *td, - struct link_map *l) -{ - const ElfW(Rela) *reloc = td->arg; - - if (_dl_tlsdesc_resolve_early_return_p - (td, (void*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_PLT)]) + l->l_addr))) - return; - - /* The code below was borrowed from _dl_fixup(). */ - const ElfW(Sym) *const symtab - = (const void *) D_PTR (l, l_info[DT_SYMTAB]); - const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]); - const ElfW(Sym) *sym = &symtab[ELFW(R_SYM) (reloc->r_info)]; - lookup_t result; - - /* Look up the target symbol. If the normal lookup rules are not - used don't look in the global scope. */ - if (ELFW(ST_BIND) (sym->st_info) != STB_LOCAL - && __builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0) - { - const struct r_found_version *version = NULL; - - if (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL) - { - const ElfW(Half) *vernum = - (const void *) D_PTR (l, l_info[VERSYMIDX (DT_VERSYM)]); - ElfW(Half) ndx = vernum[ELFW(R_SYM) (reloc->r_info)] & 0x7fff; - version = &l->l_versions[ndx]; - if (version->hash == 0) - version = NULL; - } - - result = _dl_lookup_symbol_x (strtab + sym->st_name, l, &sym, - l->l_scope, version, ELF_RTYPE_CLASS_PLT, - DL_LOOKUP_ADD_DEPENDENCY, NULL); - } - else - { - /* We already found the symbol. The module (and therefore its load - address) is also known. */ - result = l; - } - - if (! sym) - { - td->arg = (void*)reloc->r_addend; - td->entry = _dl_tlsdesc_undefweak; - } - else - { -# ifndef SHARED - CHECK_STATIC_TLS (l, result); -# else - if (!TRY_STATIC_TLS (l, result)) - { - td->arg = _dl_make_tlsdesc_dynamic (result, sym->st_value - + reloc->r_addend); - td->entry = _dl_tlsdesc_dynamic; - } - else -# endif - { - td->arg = (void*)(sym->st_value - result->l_tls_offset - + reloc->r_addend); - td->entry = _dl_tlsdesc_return; - } - } - - _dl_tlsdesc_wake_up_held_fixups (); -} - -/* This function is used to avoid busy waiting for other threads to - complete the lazy relocation. Once another thread wins the race to - relocate a TLS descriptor, it sets the descriptor up such that this - function is called to wait until the resolver releases the - lock. */ - -void -attribute_hidden -_dl_tlsdesc_resolve_hold_fixup (struct tlsdesc volatile *td, - void *caller) -{ - /* Maybe we're lucky and can return early. */ - if (caller != td->entry) - return; - - /* Locking here will stop execution until the running resolver runs - _dl_tlsdesc_wake_up_held_fixups(), releasing the lock. - - FIXME: We'd be better off waiting on a condition variable, such - that we didn't have to hold the lock throughout the relocation - processing. */ - __rtld_lock_lock_recursive (GL(dl_load_lock)); - __rtld_lock_unlock_recursive (GL(dl_load_lock)); -} - -/* Unmap the dynamic object, but also release its TLS descriptor table - if there is one. */ - -void -internal_function -_dl_unmap (struct link_map *map) -{ - _dl_unmap_segments (map); - -#ifdef SHARED - /* _dl_unmap is only called for dlopen()ed libraries, for which - calling free() is safe, or before we've completed the initial - relocation, in which case calling free() is probably pointless, - but still safe. */ - if (map->l_mach.tlsdesc_table) - htab_delete (map->l_mach.tlsdesc_table); -#endif -} diff --git a/sysdeps/x86_64/tlsdesc.sym b/sysdeps/x86_64/tlsdesc.sym deleted file mode 100644 index 33854975d0..0000000000 --- a/sysdeps/x86_64/tlsdesc.sym +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include -#include -#include -#include - --- - --- Abuse tls.h macros to derive offsets relative to the thread register. - -DTV_OFFSET offsetof(struct pthread, header.dtv) - -TLSDESC_ARG offsetof(struct tlsdesc, arg) - -TLSDESC_GEN_COUNT offsetof(struct tlsdesc_dynamic_arg, gen_count) -TLSDESC_MODID offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_module) -TLSDESC_MODOFF offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_offset) diff --git a/sysdeps/x86_64/tst-audit.h b/sysdeps/x86_64/tst-audit.h deleted file mode 100644 index e3c780e42c..0000000000 --- a/sysdeps/x86_64/tst-audit.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. x86_64 version. - - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef __ILP32__ -# define pltenter la_x86_64_gnu_pltenter -# define pltexit la_x86_64_gnu_pltexit -# define La_regs La_x86_64_regs -# define La_retval La_x86_64_retval -#else -# define pltenter la_x32_gnu_pltenter -# define pltexit la_x32_gnu_pltexit -# define La_regs La_x32_regs -# define La_retval La_x32_retval -#endif -#define int_retval lrv_rax diff --git a/sysdeps/x86_64/tst-audit10-aux.c b/sysdeps/x86_64/tst-audit10-aux.c deleted file mode 100644 index 4663136419..0000000000 --- a/sysdeps/x86_64/tst-audit10-aux.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Test case for preserved AVX512 registers in dynamic linker, -mavx512f part. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -tst_audit10_aux (void) -{ -#ifdef __AVX512F__ - extern __m512i audit_test (__m512i, __m512i, __m512i, __m512i, - __m512i, __m512i, __m512i, __m512i); - - __m512i zmm = _mm512_setzero_si512 (); - __m512i ret = audit_test (zmm, zmm, zmm, zmm, zmm, zmm, zmm, zmm); - - zmm = _mm512_set1_epi64 (0x12349876); - - if (memcmp (&zmm, &ret, sizeof (ret))) - abort (); - return 0; -#else /* __AVX512F__ */ - return 77; -#endif /* __AVX512F__ */ -} diff --git a/sysdeps/x86_64/tst-audit10.c b/sysdeps/x86_64/tst-audit10.c deleted file mode 100644 index bda248ac7e..0000000000 --- a/sysdeps/x86_64/tst-audit10.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Test case for preserved AVX512 registers in dynamic linker. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int tst_audit10_aux (void); - -static int -avx512_enabled (void) -{ -#ifdef bit_AVX512F - unsigned int eax, ebx, ecx, edx; - - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 - || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE)) - return 0; - - __cpuid_count (7, 0, eax, ebx, ecx, edx); - if (!(ebx & bit_AVX512F)) - return 0; - - asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0)); - - /* Verify that ZMM, YMM and XMM states are enabled. */ - return (eax & 0xe6) == 0xe6; -#else - return 0; -#endif -} - -static int -do_test (void) -{ - /* Run AVX512 test only if AVX512 is supported. */ - if (avx512_enabled ()) - return tst_audit10_aux (); - else - return 77; -} - -#define TEST_FUNCTION do_test () -#include "../../test-skeleton.c" diff --git a/sysdeps/x86_64/tst-audit3.c b/sysdeps/x86_64/tst-audit3.c deleted file mode 100644 index 0602aa25db..0000000000 --- a/sysdeps/x86_64/tst-audit3.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Test case for x86-64 preserved registers in dynamic linker. */ - -#include -#include - -#include - -extern __m128i audit_test (__m128i, __m128i, __m128i, __m128i, - __m128i, __m128i, __m128i, __m128i); -static int -do_test (void) -{ - __m128i xmm = _mm_setzero_si128 (); - __m128i ret = audit_test (xmm, xmm, xmm, xmm, xmm, xmm, xmm, xmm); - - if (memcmp (&xmm, &ret, sizeof (ret))) - abort (); - - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../../test-skeleton.c" diff --git a/sysdeps/x86_64/tst-audit4-aux.c b/sysdeps/x86_64/tst-audit4-aux.c deleted file mode 100644 index c78c51c747..0000000000 --- a/sysdeps/x86_64/tst-audit4-aux.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Test case for preserved AVX registers in dynamic linker, -mavx part. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -extern __m256i audit_test (__m256i, __m256i, __m256i, __m256i, - __m256i, __m256i, __m256i, __m256i); - -int -tst_audit4_aux (void) -{ -#ifdef __AVX__ - __m256i ymm = _mm256_setzero_si256 (); - __m256i ret = audit_test (ymm, ymm, ymm, ymm, ymm, ymm, ymm, ymm); - ymm = _mm256_set1_epi32 (0x12349876); - if (memcmp (&ymm, &ret, sizeof (ret))) - abort (); - return 0; -#else /* __AVX__ */ - return 77; -#endif /* __AVX__ */ -} diff --git a/sysdeps/x86_64/tst-audit4.c b/sysdeps/x86_64/tst-audit4.c deleted file mode 100644 index 8178f2c6d2..0000000000 --- a/sysdeps/x86_64/tst-audit4.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Test case for preserved AVX registers in dynamic linker. - Copyright (C) 2009-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int tst_audit4_aux (void); - -static int -avx_enabled (void) -{ - unsigned int eax, ebx, ecx, edx; - - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 - || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE)) - return 0; - - /* Check the OS has AVX and SSE saving enabled. */ - asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0)); - - return (eax & 6) == 6; -} - -static int -do_test (void) -{ - /* Run AVX test only if AVX is supported. */ - if (avx_enabled ()) - return tst_audit4_aux (); - else - return 77; -} - -#define TEST_FUNCTION do_test () -#include "../../test-skeleton.c" diff --git a/sysdeps/x86_64/tst-audit5.c b/sysdeps/x86_64/tst-audit5.c deleted file mode 100644 index 225b4c86ac..0000000000 --- a/sysdeps/x86_64/tst-audit5.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Test case for x86-64 preserved registers in dynamic linker. */ - -#include -#include - -#include - -extern __m128i audit_test (__m128i, __m128i, __m128i, __m128i, - __m128i, __m128i, __m128i, __m128i); -static int -do_test (void) -{ - __m128i xmm = _mm_setzero_si128 (); - __m128i ret = audit_test (xmm, xmm, xmm, xmm, xmm, xmm, xmm, xmm); - - xmm = _mm_set1_epi32 (0x12349876); - if (memcmp (&xmm, &ret, sizeof (ret))) - abort (); - - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../../test-skeleton.c" diff --git a/sysdeps/x86_64/tst-audit6.c b/sysdeps/x86_64/tst-audit6.c deleted file mode 100644 index f2f6a487c4..0000000000 --- a/sysdeps/x86_64/tst-audit6.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Test case for x86-64 preserved registers in dynamic linker. */ - -#include -#include -#include -#include - -extern __m128i audit_test (__m128i, __m128i, __m128i, __m128i, - __m128i, __m128i, __m128i, __m128i); - - -static int -avx_enabled (void) -{ - unsigned int eax, ebx, ecx, edx; - - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 - || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE)) - return 0; - - /* Check the OS has AVX and SSE saving enabled. */ - asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0)); - - return (eax & 6) == 6; -} - - -static int -do_test (void) -{ - /* Run AVX test only if AVX is supported. */ - if (avx_enabled ()) - { - __m128i xmm = _mm_setzero_si128 (); - __m128i ret = audit_test (xmm, xmm, xmm, xmm, xmm, xmm, xmm, xmm); - - xmm = _mm_set1_epi32 (0x98abcdef); - if (memcmp (&xmm, &ret, sizeof (ret))) - abort (); - } - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../../test-skeleton.c" diff --git a/sysdeps/x86_64/tst-audit7.c b/sysdeps/x86_64/tst-audit7.c deleted file mode 100644 index 1d2a7de439..0000000000 --- a/sysdeps/x86_64/tst-audit7.c +++ /dev/null @@ -1 +0,0 @@ -#include "tst-audit6.c" diff --git a/sysdeps/x86_64/tst-auditmod10a.c b/sysdeps/x86_64/tst-auditmod10a.c deleted file mode 100644 index 41c77e98a5..0000000000 --- a/sysdeps/x86_64/tst-auditmod10a.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Test case for x86-64 preserved registers in dynamic linker. */ - -#ifdef __AVX512F__ -#include -#include -#include - -__m512i -audit_test (__m512i x0, __m512i x1, __m512i x2, __m512i x3, - __m512i x4, __m512i x5, __m512i x6, __m512i x7) -{ - __m512i zmm; - - zmm = _mm512_set1_epi64 (1); - if (memcmp (&zmm, &x0, sizeof (zmm))) - abort (); - - zmm = _mm512_set1_epi64 (2); - if (memcmp (&zmm, &x1, sizeof (zmm))) - abort (); - - zmm = _mm512_set1_epi64 (3); - if (memcmp (&zmm, &x2, sizeof (zmm))) - abort (); - - zmm = _mm512_set1_epi64 (4); - if (memcmp (&zmm, &x3, sizeof (zmm))) - abort (); - - zmm = _mm512_set1_epi64 (5); - if (memcmp (&zmm, &x4, sizeof (zmm))) - abort (); - - zmm = _mm512_set1_epi64 (6); - if (memcmp (&zmm, &x5, sizeof (zmm))) - abort (); - - zmm = _mm512_set1_epi64 (7); - if (memcmp (&zmm, &x6, sizeof (zmm))) - abort (); - - zmm = _mm512_set1_epi64 (8); - if (memcmp (&zmm, &x7, sizeof (zmm))) - abort (); - - return _mm512_setzero_si512 (); -} -#endif diff --git a/sysdeps/x86_64/tst-auditmod10b.c b/sysdeps/x86_64/tst-auditmod10b.c deleted file mode 100644 index 5b9a985ca2..0000000000 --- a/sysdeps/x86_64/tst-auditmod10b.c +++ /dev/null @@ -1,231 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Verify that changing AVX512 registers in audit library won't affect - function parameter passing/return. */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -unsigned int -la_version (unsigned int v) -{ - setlinebuf (stdout); - - printf ("version: %u\n", v); - - char buf[20]; - sprintf (buf, "%u", v); - - return v; -} - -void -la_activity (uintptr_t *cookie, unsigned int flag) -{ - if (flag == LA_ACT_CONSISTENT) - printf ("activity: consistent\n"); - else if (flag == LA_ACT_ADD) - printf ("activity: add\n"); - else if (flag == LA_ACT_DELETE) - printf ("activity: delete\n"); - else - printf ("activity: unknown activity %u\n", flag); -} - -char * -la_objsearch (const char *name, uintptr_t *cookie, unsigned int flag) -{ - char buf[100]; - const char *flagstr; - if (flag == LA_SER_ORIG) - flagstr = "LA_SET_ORIG"; - else if (flag == LA_SER_LIBPATH) - flagstr = "LA_SER_LIBPATH"; - else if (flag == LA_SER_RUNPATH) - flagstr = "LA_SER_RUNPATH"; - else if (flag == LA_SER_CONFIG) - flagstr = "LA_SER_CONFIG"; - else if (flag == LA_SER_DEFAULT) - flagstr = "LA_SER_DEFAULT"; - else if (flag == LA_SER_SECURE) - flagstr = "LA_SER_SECURE"; - else - { - sprintf (buf, "unknown flag %d", flag); - flagstr = buf; - } - printf ("objsearch: %s, %s\n", name, flagstr); - - return (char *) name; -} - -unsigned int -la_objopen (struct link_map *l, Lmid_t lmid, uintptr_t *cookie) -{ - printf ("objopen: %ld, %s\n", lmid, l->l_name); - - return 3; -} - -void -la_preinit (uintptr_t *cookie) -{ - printf ("preinit\n"); -} - -unsigned int -la_objclose (uintptr_t *cookie) -{ - printf ("objclose\n"); - return 0; -} - -uintptr_t -la_symbind32 (Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind32: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -uintptr_t -la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind64: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -#include - -#ifdef __AVX512F__ -#include -#include - -static int -check_avx512 (void) -{ - unsigned int eax, ebx, ecx, edx; - - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 - || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE)) - return 0; - - __cpuid_count (7, 0, eax, ebx, ecx, edx); - if (!(ebx & bit_AVX512F)) - return 0; - - asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0)); - - /* Verify that ZMM, YMM and XMM states are enabled. */ - return (eax & 0xe6) == 0xe6; -} - -#else -#include -#endif - -ElfW(Addr) -pltenter (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, La_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - printf ("pltenter: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - -#ifdef __AVX512F__ - if (check_avx512 () && strcmp (symname, "audit_test") == 0) - { - __m512i zero = _mm512_setzero_si512 (); - if (memcmp (®s->lr_vector[0], &zero, sizeof (zero)) - || memcmp (®s->lr_vector[1], &zero, sizeof (zero)) - || memcmp (®s->lr_vector[2], &zero, sizeof (zero)) - || memcmp (®s->lr_vector[3], &zero, sizeof (zero)) - || memcmp (®s->lr_vector[4], &zero, sizeof (zero)) - || memcmp (®s->lr_vector[5], &zero, sizeof (zero)) - || memcmp (®s->lr_vector[6], &zero, sizeof (zero)) - || memcmp (®s->lr_vector[7], &zero, sizeof (zero))) - abort (); - - for (int i = 0; i < 8; i++) - regs->lr_vector[i].zmm[0] - = (La_x86_64_zmm) _mm512_set1_epi64 (i + 1); - - __m512i zmm = _mm512_set1_epi64 (-1); - asm volatile ("vmovdqa64 %0, %%zmm0" : : "x" (zmm) : "xmm0" ); - asm volatile ("vmovdqa64 %0, %%zmm1" : : "x" (zmm) : "xmm1" ); - asm volatile ("vmovdqa64 %0, %%zmm2" : : "x" (zmm) : "xmm2" ); - asm volatile ("vmovdqa64 %0, %%zmm3" : : "x" (zmm) : "xmm3" ); - asm volatile ("vmovdqa64 %0, %%zmm4" : : "x" (zmm) : "xmm4" ); - asm volatile ("vmovdqa64 %0, %%zmm5" : : "x" (zmm) : "xmm5" ); - asm volatile ("vmovdqa64 %0, %%zmm6" : : "x" (zmm) : "xmm6" ); - asm volatile ("vmovdqa64 %0, %%zmm7" : : "x" (zmm) : "xmm7" ); - - *framesizep = 1024; - } -#endif - - return sym->st_value; -} - -unsigned int -pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, const La_regs *inregs, La_retval *outregs, - const char *symname) -{ - printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n", - symname, (long int) sym->st_value, ndx, - (ptrdiff_t) outregs->int_retval); - -#ifdef __AVX512F__ - if (check_avx512 () && strcmp (symname, "audit_test") == 0) - { - __m512i zero = _mm512_setzero_si512 (); - if (memcmp (&outregs->lrv_vector0, &zero, sizeof (zero))) - abort (); - - for (int i = 0; i < 8; i++) - { - __m512i zmm = _mm512_set1_epi64 (i + 1); - if (memcmp (&inregs->lr_vector[i], &zmm, sizeof (zmm)) != 0) - abort (); - } - - outregs->lrv_vector0.zmm[0] - = (La_x86_64_zmm) _mm512_set1_epi64 (0x12349876); - - __m512i zmm = _mm512_set1_epi64 (-1); - asm volatile ("vmovdqa64 %0, %%zmm0" : : "x" (zmm) : "xmm0" ); - asm volatile ("vmovdqa64 %0, %%zmm1" : : "x" (zmm) : "xmm1" ); - } -#endif - - return 0; -} diff --git a/sysdeps/x86_64/tst-auditmod3a.c b/sysdeps/x86_64/tst-auditmod3a.c deleted file mode 100644 index 9514aba505..0000000000 --- a/sysdeps/x86_64/tst-auditmod3a.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Test case for x86-64 preserved registers in dynamic linker. */ - -#include -#include -#include - -__m128i -audit_test (__m128i x0, __m128i x1, __m128i x2, __m128i x3, - __m128i x4, __m128i x5, __m128i x6, __m128i x7) -{ - __m128i xmm = _mm_setzero_si128 (); - - if (memcmp (&xmm, &x0, sizeof (xmm)) - || memcmp (&xmm, &x1, sizeof (xmm)) - || memcmp (&xmm, &x2, sizeof (xmm)) - || memcmp (&xmm, &x3, sizeof (xmm)) - || memcmp (&xmm, &x4, sizeof (xmm)) - || memcmp (&xmm, &x5, sizeof (xmm)) - || memcmp (&xmm, &x6, sizeof (xmm)) - || memcmp (&xmm, &x7, sizeof (xmm))) - abort (); - - return xmm; -} diff --git a/sysdeps/x86_64/tst-auditmod3b.c b/sysdeps/x86_64/tst-auditmod3b.c deleted file mode 100644 index 7aad92382e..0000000000 --- a/sysdeps/x86_64/tst-auditmod3b.c +++ /dev/null @@ -1,153 +0,0 @@ -/* Verify that changing xmm registers in audit library won't affect - function parameter passing/return. */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -unsigned int -la_version (unsigned int v) -{ - setlinebuf (stdout); - - printf ("version: %u\n", v); - - char buf[20]; - sprintf (buf, "%u", v); - - return v; -} - -void -la_activity (uintptr_t *cookie, unsigned int flag) -{ - if (flag == LA_ACT_CONSISTENT) - printf ("activity: consistent\n"); - else if (flag == LA_ACT_ADD) - printf ("activity: add\n"); - else if (flag == LA_ACT_DELETE) - printf ("activity: delete\n"); - else - printf ("activity: unknown activity %u\n", flag); -} - -char * -la_objsearch (const char *name, uintptr_t *cookie, unsigned int flag) -{ - char buf[100]; - const char *flagstr; - if (flag == LA_SER_ORIG) - flagstr = "LA_SET_ORIG"; - else if (flag == LA_SER_LIBPATH) - flagstr = "LA_SER_LIBPATH"; - else if (flag == LA_SER_RUNPATH) - flagstr = "LA_SER_RUNPATH"; - else if (flag == LA_SER_CONFIG) - flagstr = "LA_SER_CONFIG"; - else if (flag == LA_SER_DEFAULT) - flagstr = "LA_SER_DEFAULT"; - else if (flag == LA_SER_SECURE) - flagstr = "LA_SER_SECURE"; - else - { - sprintf (buf, "unknown flag %d", flag); - flagstr = buf; - } - printf ("objsearch: %s, %s\n", name, flagstr); - - return (char *) name; -} - -unsigned int -la_objopen (struct link_map *l, Lmid_t lmid, uintptr_t *cookie) -{ - printf ("objopen: %ld, %s\n", lmid, l->l_name); - - return 3; -} - -void -la_preinit (uintptr_t *cookie) -{ - printf ("preinit\n"); -} - -unsigned int -la_objclose (uintptr_t *cookie) -{ - printf ("objclose\n"); - return 0; -} - -uintptr_t -la_symbind32 (Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind32: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -uintptr_t -la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind64: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -#include - -ElfW(Addr) -pltenter (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, La_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - printf ("pltenter: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - __m128i xmm = _mm_set1_epi32 (-1); - asm volatile ("movdqa %0, %%xmm0" : : "x" (xmm) : "xmm0" ); - asm volatile ("movdqa %0, %%xmm1" : : "x" (xmm) : "xmm1" ); - asm volatile ("movdqa %0, %%xmm2" : : "x" (xmm) : "xmm2" ); - asm volatile ("movdqa %0, %%xmm3" : : "x" (xmm) : "xmm3" ); - asm volatile ("movdqa %0, %%xmm4" : : "x" (xmm) : "xmm4" ); - asm volatile ("movdqa %0, %%xmm5" : : "x" (xmm) : "xmm5" ); - asm volatile ("movdqa %0, %%xmm6" : : "x" (xmm) : "xmm6" ); - asm volatile ("movdqa %0, %%xmm7" : : "x" (xmm) : "xmm7" ); - - return sym->st_value; -} - -unsigned int -pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, const La_regs *inregs, La_retval *outregs, - const char *symname) -{ - printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n", - symname, (long int) sym->st_value, ndx, - (ptrdiff_t) outregs->int_retval); - - __m128i xmm = _mm_set1_epi32 (-1); - asm volatile ("movdqa %0, %%xmm0" : : "x" (xmm) : "xmm0" ); - asm volatile ("movdqa %0, %%xmm1" : : "x" (xmm) : "xmm1" ); - asm volatile ("movdqa %0, %%xmm2" : : "x" (xmm) : "xmm2" ); - asm volatile ("movdqa %0, %%xmm3" : : "x" (xmm) : "xmm3" ); - asm volatile ("movdqa %0, %%xmm4" : : "x" (xmm) : "xmm4" ); - asm volatile ("movdqa %0, %%xmm5" : : "x" (xmm) : "xmm5" ); - asm volatile ("movdqa %0, %%xmm6" : : "x" (xmm) : "xmm6" ); - asm volatile ("movdqa %0, %%xmm7" : : "x" (xmm) : "xmm7" ); - - return 0; -} diff --git a/sysdeps/x86_64/tst-auditmod4a.c b/sysdeps/x86_64/tst-auditmod4a.c deleted file mode 100644 index c9c24c04a8..0000000000 --- a/sysdeps/x86_64/tst-auditmod4a.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Test case for x86-64 preserved registers in dynamic linker. */ - -#ifdef __AVX__ -#include -#include -#include - -__m256i -audit_test (__m256i x0, __m256i x1, __m256i x2, __m256i x3, - __m256i x4, __m256i x5, __m256i x6, __m256i x7) -{ - __m256i ymm; - - ymm = _mm256_set1_epi32 (1); - if (memcmp (&ymm, &x0, sizeof (ymm))) - abort (); - - ymm = _mm256_set1_epi32 (2); - if (memcmp (&ymm, &x1, sizeof (ymm))) - abort (); - - ymm = _mm256_set1_epi32 (3); - if (memcmp (&ymm, &x2, sizeof (ymm))) - abort (); - - ymm = _mm256_set1_epi32 (4); - if (memcmp (&ymm, &x3, sizeof (ymm))) - abort (); - - ymm = _mm256_set1_epi32 (5); - if (memcmp (&ymm, &x4, sizeof (ymm))) - abort (); - - ymm = _mm256_set1_epi32 (6); - if (memcmp (&ymm, &x5, sizeof (ymm))) - abort (); - - ymm = _mm256_set1_epi32 (7); - if (memcmp (&ymm, &x6, sizeof (ymm))) - abort (); - - ymm = _mm256_set1_epi32 (8); - if (memcmp (&ymm, &x7, sizeof (ymm))) - abort (); - - return _mm256_setzero_si256 (); -} -#endif diff --git a/sysdeps/x86_64/tst-auditmod4b.c b/sysdeps/x86_64/tst-auditmod4b.c deleted file mode 100644 index 1153ea442c..0000000000 --- a/sysdeps/x86_64/tst-auditmod4b.c +++ /dev/null @@ -1,213 +0,0 @@ -/* Verify that changing AVX registers in audit library won't affect - function parameter passing/return. */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -unsigned int -la_version (unsigned int v) -{ - setlinebuf (stdout); - - printf ("version: %u\n", v); - - char buf[20]; - sprintf (buf, "%u", v); - - return v; -} - -void -la_activity (uintptr_t *cookie, unsigned int flag) -{ - if (flag == LA_ACT_CONSISTENT) - printf ("activity: consistent\n"); - else if (flag == LA_ACT_ADD) - printf ("activity: add\n"); - else if (flag == LA_ACT_DELETE) - printf ("activity: delete\n"); - else - printf ("activity: unknown activity %u\n", flag); -} - -char * -la_objsearch (const char *name, uintptr_t *cookie, unsigned int flag) -{ - char buf[100]; - const char *flagstr; - if (flag == LA_SER_ORIG) - flagstr = "LA_SET_ORIG"; - else if (flag == LA_SER_LIBPATH) - flagstr = "LA_SER_LIBPATH"; - else if (flag == LA_SER_RUNPATH) - flagstr = "LA_SER_RUNPATH"; - else if (flag == LA_SER_CONFIG) - flagstr = "LA_SER_CONFIG"; - else if (flag == LA_SER_DEFAULT) - flagstr = "LA_SER_DEFAULT"; - else if (flag == LA_SER_SECURE) - flagstr = "LA_SER_SECURE"; - else - { - sprintf (buf, "unknown flag %d", flag); - flagstr = buf; - } - printf ("objsearch: %s, %s\n", name, flagstr); - - return (char *) name; -} - -unsigned int -la_objopen (struct link_map *l, Lmid_t lmid, uintptr_t *cookie) -{ - printf ("objopen: %ld, %s\n", lmid, l->l_name); - - return 3; -} - -void -la_preinit (uintptr_t *cookie) -{ - printf ("preinit\n"); -} - -unsigned int -la_objclose (uintptr_t *cookie) -{ - printf ("objclose\n"); - return 0; -} - -uintptr_t -la_symbind32 (Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind32: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -uintptr_t -la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind64: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -#include - -#ifdef __AVX__ -#include -#include - -static int avx = -1; - -static inline int -__attribute ((always_inline)) -check_avx (void) -{ - if (avx == -1) - { - unsigned int eax, ebx, ecx, edx; - - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) - && (ecx & bit_AVX)) - avx = 1; - else - avx = 0; - } - return avx; -} -#else -#include -#endif - -ElfW(Addr) -pltenter (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, La_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - printf ("pltenter: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - -#ifdef __AVX__ - if (check_avx () && strcmp (symname, "audit_test") == 0) - { - __m256i zero = _mm256_setzero_si256 (); - if (memcmp (®s->lr_vector[0], &zero, sizeof (zero)) - || memcmp (®s->lr_vector[1], &zero, sizeof (zero)) - || memcmp (®s->lr_vector[2], &zero, sizeof (zero)) - || memcmp (®s->lr_vector[3], &zero, sizeof (zero)) - || memcmp (®s->lr_vector[4], &zero, sizeof (zero)) - || memcmp (®s->lr_vector[5], &zero, sizeof (zero)) - || memcmp (®s->lr_vector[6], &zero, sizeof (zero)) - || memcmp (®s->lr_vector[7], &zero, sizeof (zero))) - abort (); - - for (int i = 0; i < 8; i++) - regs->lr_vector[i].ymm[0] - = (La_x86_64_ymm) _mm256_set1_epi32 (i + 1); - - __m256i ymm = _mm256_set1_epi32 (-1); - asm volatile ("vmovdqa %0, %%ymm0" : : "x" (ymm) : "xmm0" ); - asm volatile ("vmovdqa %0, %%ymm1" : : "x" (ymm) : "xmm1" ); - asm volatile ("vmovdqa %0, %%ymm2" : : "x" (ymm) : "xmm2" ); - asm volatile ("vmovdqa %0, %%ymm3" : : "x" (ymm) : "xmm3" ); - asm volatile ("vmovdqa %0, %%ymm4" : : "x" (ymm) : "xmm4" ); - asm volatile ("vmovdqa %0, %%ymm5" : : "x" (ymm) : "xmm5" ); - asm volatile ("vmovdqa %0, %%ymm6" : : "x" (ymm) : "xmm6" ); - asm volatile ("vmovdqa %0, %%ymm7" : : "x" (ymm) : "xmm7" ); - - *framesizep = 1024; - } -#endif - - return sym->st_value; -} - -unsigned int -pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, const La_regs *inregs, La_retval *outregs, - const char *symname) -{ - printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n", - symname, (long int) sym->st_value, ndx, - (ptrdiff_t) outregs->int_retval); - -#ifdef __AVX__ - if (check_avx () && strcmp (symname, "audit_test") == 0) - { - __m256i zero = _mm256_setzero_si256 (); - if (memcmp (&outregs->lrv_vector0, &zero, sizeof (zero))) - abort (); - - for (int i = 0; i < 8; i++) - { - __m256i ymm = _mm256_set1_epi32 (i + 1); - if (memcmp (&inregs->lr_vector[i], &ymm, sizeof (ymm)) != 0) - abort (); - } - - outregs->lrv_vector0.ymm[0] - = (La_x86_64_ymm) _mm256_set1_epi32 (0x12349876); - - __m256i ymm = _mm256_set1_epi32 (-1); - asm volatile ("vmovdqa %0, %%ymm0" : : "x" (ymm) : "xmm0" ); - asm volatile ("vmovdqa %0, %%ymm1" : : "x" (ymm) : "xmm1" ); - } -#endif - - return 0; -} diff --git a/sysdeps/x86_64/tst-auditmod5a.c b/sysdeps/x86_64/tst-auditmod5a.c deleted file mode 100644 index 8511a70747..0000000000 --- a/sysdeps/x86_64/tst-auditmod5a.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Test case for x86-64 preserved registers in dynamic linker. */ - -#include -#include -#include - -__m128i -audit_test (__m128i x0, __m128i x1, __m128i x2, __m128i x3, - __m128i x4, __m128i x5, __m128i x6, __m128i x7) -{ - __m128i xmm; - - xmm = _mm_set1_epi32 (1); - if (memcmp (&xmm, &x0, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (2); - if (memcmp (&xmm, &x1, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (3); - if (memcmp (&xmm, &x2, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (4); - if (memcmp (&xmm, &x3, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (5); - if (memcmp (&xmm, &x4, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (6); - if (memcmp (&xmm, &x5, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (7); - if (memcmp (&xmm, &x6, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (8); - if (memcmp (&xmm, &x7, sizeof (xmm))) - abort (); - - return _mm_setzero_si128 (); -} diff --git a/sysdeps/x86_64/tst-auditmod5b.c b/sysdeps/x86_64/tst-auditmod5b.c deleted file mode 100644 index 6a280fd61b..0000000000 --- a/sysdeps/x86_64/tst-auditmod5b.c +++ /dev/null @@ -1,185 +0,0 @@ -/* Verify that changing xmm registers in audit library won't affect - function parameter passing/return. */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -unsigned int -la_version (unsigned int v) -{ - setlinebuf (stdout); - - printf ("version: %u\n", v); - - char buf[20]; - sprintf (buf, "%u", v); - - return v; -} - -void -la_activity (uintptr_t *cookie, unsigned int flag) -{ - if (flag == LA_ACT_CONSISTENT) - printf ("activity: consistent\n"); - else if (flag == LA_ACT_ADD) - printf ("activity: add\n"); - else if (flag == LA_ACT_DELETE) - printf ("activity: delete\n"); - else - printf ("activity: unknown activity %u\n", flag); -} - -char * -la_objsearch (const char *name, uintptr_t *cookie, unsigned int flag) -{ - char buf[100]; - const char *flagstr; - if (flag == LA_SER_ORIG) - flagstr = "LA_SET_ORIG"; - else if (flag == LA_SER_LIBPATH) - flagstr = "LA_SER_LIBPATH"; - else if (flag == LA_SER_RUNPATH) - flagstr = "LA_SER_RUNPATH"; - else if (flag == LA_SER_CONFIG) - flagstr = "LA_SER_CONFIG"; - else if (flag == LA_SER_DEFAULT) - flagstr = "LA_SER_DEFAULT"; - else if (flag == LA_SER_SECURE) - flagstr = "LA_SER_SECURE"; - else - { - sprintf (buf, "unknown flag %d", flag); - flagstr = buf; - } - printf ("objsearch: %s, %s\n", name, flagstr); - - return (char *) name; -} - -unsigned int -la_objopen (struct link_map *l, Lmid_t lmid, uintptr_t *cookie) -{ - printf ("objopen: %ld, %s\n", lmid, l->l_name); - - return 3; -} - -void -la_preinit (uintptr_t *cookie) -{ - printf ("preinit\n"); -} - -unsigned int -la_objclose (uintptr_t *cookie) -{ - printf ("objclose\n"); - return 0; -} - -uintptr_t -la_symbind32 (Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind32: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -uintptr_t -la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind64: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -#include - -ElfW(Addr) -pltenter (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, La_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - printf ("pltenter: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - __m128i minusone = _mm_set1_epi32 (-1); - - if (strcmp (symname, "audit_test") == 0) - { - __m128i zero = _mm_setzero_si128 (); - if (memcmp (®s->lr_xmm[0], &zero, sizeof (zero)) - || memcmp (®s->lr_xmm[1], &zero, sizeof (zero)) - || memcmp (®s->lr_xmm[2], &zero, sizeof (zero)) - || memcmp (®s->lr_xmm[3], &zero, sizeof (zero)) - || memcmp (®s->lr_xmm[4], &zero, sizeof (zero)) - || memcmp (®s->lr_xmm[5], &zero, sizeof (zero)) - || memcmp (®s->lr_xmm[6], &zero, sizeof (zero)) - || memcmp (®s->lr_xmm[7], &zero, sizeof (zero))) - abort (); - - for (int i = 0; i < 8; i++) - regs->lr_xmm[i] = (La_x86_64_xmm) _mm_set1_epi32 (i + 1); - - *framesizep = 1024; - } - - asm volatile ("movdqa %0, %%xmm0" : : "x" (minusone) : "xmm0" ); - asm volatile ("movdqa %0, %%xmm1" : : "x" (minusone) : "xmm1" ); - asm volatile ("movdqa %0, %%xmm2" : : "x" (minusone) : "xmm2" ); - asm volatile ("movdqa %0, %%xmm3" : : "x" (minusone) : "xmm3" ); - asm volatile ("movdqa %0, %%xmm4" : : "x" (minusone) : "xmm4" ); - asm volatile ("movdqa %0, %%xmm5" : : "x" (minusone) : "xmm5" ); - asm volatile ("movdqa %0, %%xmm6" : : "x" (minusone) : "xmm6" ); - asm volatile ("movdqa %0, %%xmm7" : : "x" (minusone) : "xmm7" ); - - return sym->st_value; -} - -unsigned int -pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, const La_regs *inregs, La_retval *outregs, - const char *symname) -{ - printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n", - symname, (long int) sym->st_value, ndx, - (ptrdiff_t) outregs->int_retval); - - __m128i xmm; - - if (strcmp (symname, "audit_test") == 0) - { - __m128i zero = _mm_setzero_si128 (); - if (memcmp (&outregs->lrv_xmm0, &zero, sizeof (zero))) - abort (); - - for (int i = 0; i < 8; i++) - { - xmm = _mm_set1_epi32 (i + 1); - if (memcmp (&inregs->lr_xmm[i], &xmm, sizeof (xmm)) != 0) - abort (); - } - - outregs->lrv_xmm0 = (La_x86_64_xmm) _mm_set1_epi32 (0x12349876); - } - - xmm = _mm_set1_epi32 (-1); - asm volatile ("movdqa %0, %%xmm0" : : "x" (xmm) : "xmm0" ); - asm volatile ("movdqa %0, %%xmm1" : : "x" (xmm) : "xmm1" ); - - return 0; -} diff --git a/sysdeps/x86_64/tst-auditmod6a.c b/sysdeps/x86_64/tst-auditmod6a.c deleted file mode 100644 index c3a850ce98..0000000000 --- a/sysdeps/x86_64/tst-auditmod6a.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Test case for x86-64 preserved registers in dynamic linker. */ - -#include -#include -#include - -__m128i -audit_test (__m128i x0, __m128i x1, __m128i x2, __m128i x3, - __m128i x4, __m128i x5, __m128i x6, __m128i x7) -{ - __m128i xmm; - - xmm = _mm_set1_epi32 (0x100); - if (memcmp (&xmm, &x0, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (0x101); - if (memcmp (&xmm, &x1, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (0x102); - if (memcmp (&xmm, &x2, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (0x103); - if (memcmp (&xmm, &x3, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (0x104); - if (memcmp (&xmm, &x4, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (0x105); - if (memcmp (&xmm, &x5, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (0x106); - if (memcmp (&xmm, &x6, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (0x107); - if (memcmp (&xmm, &x7, sizeof (xmm))) - abort (); - - return _mm_setzero_si128 (); -} diff --git a/sysdeps/x86_64/tst-auditmod6b.c b/sysdeps/x86_64/tst-auditmod6b.c deleted file mode 100644 index 3533602c07..0000000000 --- a/sysdeps/x86_64/tst-auditmod6b.c +++ /dev/null @@ -1,227 +0,0 @@ -/* Verify that changing AVX registers in audit library won't affect - function parameter passing/return. */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -unsigned int -la_version (unsigned int v) -{ - setlinebuf (stdout); - - printf ("version: %u\n", v); - - char buf[20]; - sprintf (buf, "%u", v); - - return v; -} - -void -la_activity (uintptr_t *cookie, unsigned int flag) -{ - if (flag == LA_ACT_CONSISTENT) - printf ("activity: consistent\n"); - else if (flag == LA_ACT_ADD) - printf ("activity: add\n"); - else if (flag == LA_ACT_DELETE) - printf ("activity: delete\n"); - else - printf ("activity: unknown activity %u\n", flag); -} - -char * -la_objsearch (const char *name, uintptr_t *cookie, unsigned int flag) -{ - char buf[100]; - const char *flagstr; - if (flag == LA_SER_ORIG) - flagstr = "LA_SET_ORIG"; - else if (flag == LA_SER_LIBPATH) - flagstr = "LA_SER_LIBPATH"; - else if (flag == LA_SER_RUNPATH) - flagstr = "LA_SER_RUNPATH"; - else if (flag == LA_SER_CONFIG) - flagstr = "LA_SER_CONFIG"; - else if (flag == LA_SER_DEFAULT) - flagstr = "LA_SER_DEFAULT"; - else if (flag == LA_SER_SECURE) - flagstr = "LA_SER_SECURE"; - else - { - sprintf (buf, "unknown flag %d", flag); - flagstr = buf; - } - printf ("objsearch: %s, %s\n", name, flagstr); - - return (char *) name; -} - -unsigned int -la_objopen (struct link_map *l, Lmid_t lmid, uintptr_t *cookie) -{ - printf ("objopen: %ld, %s\n", lmid, l->l_name); - - return 3; -} - -void -la_preinit (uintptr_t *cookie) -{ - printf ("preinit\n"); -} - -unsigned int -la_objclose (uintptr_t *cookie) -{ - printf ("objclose\n"); - return 0; -} - -uintptr_t -la_symbind32 (Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind32: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -uintptr_t -la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind64: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -#include - -#ifdef __AVX__ -#include -#include - -static int avx = -1; - -static inline int -__attribute ((always_inline)) -check_avx (void) -{ - if (avx == -1) - { - unsigned int eax, ebx, ecx, edx; - - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) - && (ecx & bit_AVX)) - avx = 1; - else - avx = 0; - } - return avx; -} -#else -#include -#endif - -ElfW(Addr) -pltenter (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, La_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - printf ("pltenter: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - -#ifdef __AVX__ - if (check_avx () && strcmp (symname, "audit_test") == 0) - { - int i; - - __m128i xmm = _mm_setzero_si128 (); - for (i = 0; i < 8; i++) - if (memcmp (®s->lr_xmm[i], &xmm, sizeof (xmm)) - || memcmp (®s->lr_vector[i], &xmm, sizeof (xmm))) - abort (); - - for (i = 0; i < 8; i += 2) - { - regs->lr_xmm[i] = (La_x86_64_xmm) _mm_set1_epi32 (i + 1); - regs->lr_vector[i].xmm[0] = regs->lr_xmm[i]; - regs->lr_vector[i + 1].ymm[0] - = (La_x86_64_ymm) _mm256_set1_epi32 (i + 2); - regs->lr_xmm[i + 1] = regs->lr_vector[i + 1].xmm[0]; - } - - __m256i ymm = _mm256_set1_epi32 (-1); - asm volatile ("vmovdqa %0, %%ymm0" : : "x" (ymm) : "xmm0" ); - asm volatile ("vmovdqa %0, %%ymm1" : : "x" (ymm) : "xmm1" ); - asm volatile ("vmovdqa %0, %%ymm2" : : "x" (ymm) : "xmm2" ); - asm volatile ("vmovdqa %0, %%ymm3" : : "x" (ymm) : "xmm3" ); - asm volatile ("vmovdqa %0, %%ymm4" : : "x" (ymm) : "xmm4" ); - asm volatile ("vmovdqa %0, %%ymm5" : : "x" (ymm) : "xmm5" ); - asm volatile ("vmovdqa %0, %%ymm6" : : "x" (ymm) : "xmm6" ); - asm volatile ("vmovdqa %0, %%ymm7" : : "x" (ymm) : "xmm7" ); - - *framesizep = 1024; - } -#endif - - return sym->st_value; -} - -unsigned int -pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, const La_regs *inregs, La_retval *outregs, - const char *symname) -{ - printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n", - symname, (long int) sym->st_value, ndx, - (ptrdiff_t) outregs->int_retval); - -#ifdef __AVX__ - if (check_avx () && strcmp (symname, "audit_test") == 0) - { - int i; - - __m128i xmm = _mm_setzero_si128 (); - if (memcmp (&outregs->lrv_xmm0, &xmm, sizeof (xmm)) - || memcmp (&outregs->lrv_vector0, &xmm, sizeof (xmm))) - abort (); - - __m256i ymm; - - for (i = 0; i < 8; i += 2) - { - xmm = _mm_set1_epi32 (i + 0x100); - if (memcmp (&inregs->lr_xmm[i], &xmm, sizeof (xmm)) - || memcmp (&inregs->lr_vector[i], &xmm, sizeof (xmm))) - abort (); - - ymm = _mm256_set1_epi32 (i + 0x101); - if (memcmp (&inregs->lr_xmm[i + 1], - &inregs->lr_vector[i + 1].xmm[0], sizeof (xmm)) - || memcmp (&inregs->lr_vector[i + 1], &ymm, sizeof (ymm))) - abort (); - } - - outregs->lrv_vector0.ymm[0] - = (La_x86_64_ymm) _mm256_set1_epi32 (0x12349876); - - ymm = _mm256_set1_epi32 (-1); - asm volatile ("vmovdqa %0, %%ymm0" : : "x" (ymm) : "xmm0" ); - asm volatile ("vmovdqa %0, %%ymm1" : : "x" (ymm) : "xmm1" ); - } -#endif - - return 0; -} diff --git a/sysdeps/x86_64/tst-auditmod6c.c b/sysdeps/x86_64/tst-auditmod6c.c deleted file mode 100644 index 8000e89224..0000000000 --- a/sysdeps/x86_64/tst-auditmod6c.c +++ /dev/null @@ -1,232 +0,0 @@ -/* Verify that changing AVX registers in audit library won't affect - function parameter passing/return. */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -unsigned int -la_version (unsigned int v) -{ - setlinebuf (stdout); - - printf ("version: %u\n", v); - - char buf[20]; - sprintf (buf, "%u", v); - - return v; -} - -void -la_activity (uintptr_t *cookie, unsigned int flag) -{ - if (flag == LA_ACT_CONSISTENT) - printf ("activity: consistent\n"); - else if (flag == LA_ACT_ADD) - printf ("activity: add\n"); - else if (flag == LA_ACT_DELETE) - printf ("activity: delete\n"); - else - printf ("activity: unknown activity %u\n", flag); -} - -char * -la_objsearch (const char *name, uintptr_t *cookie, unsigned int flag) -{ - char buf[100]; - const char *flagstr; - if (flag == LA_SER_ORIG) - flagstr = "LA_SET_ORIG"; - else if (flag == LA_SER_LIBPATH) - flagstr = "LA_SER_LIBPATH"; - else if (flag == LA_SER_RUNPATH) - flagstr = "LA_SER_RUNPATH"; - else if (flag == LA_SER_CONFIG) - flagstr = "LA_SER_CONFIG"; - else if (flag == LA_SER_DEFAULT) - flagstr = "LA_SER_DEFAULT"; - else if (flag == LA_SER_SECURE) - flagstr = "LA_SER_SECURE"; - else - { - sprintf (buf, "unknown flag %d", flag); - flagstr = buf; - } - printf ("objsearch: %s, %s\n", name, flagstr); - - return (char *) name; -} - -unsigned int -la_objopen (struct link_map *l, Lmid_t lmid, uintptr_t *cookie) -{ - printf ("objopen: %ld, %s\n", lmid, l->l_name); - - return 3; -} - -void -la_preinit (uintptr_t *cookie) -{ - printf ("preinit\n"); -} - -unsigned int -la_objclose (uintptr_t *cookie) -{ - printf ("objclose\n"); - return 0; -} - -uintptr_t -la_symbind32 (Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind32: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -uintptr_t -la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind64: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -#include - -#ifdef __AVX__ -#include -#include - -static int avx = -1; - -static inline int -__attribute ((always_inline)) -check_avx (void) -{ - if (avx == -1) - { - unsigned int eax, ebx, ecx, edx; - - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) - && (ecx & bit_AVX)) - avx = 1; - else - avx = 0; - } - return avx; -} -#else -#include -#endif - -ElfW(Addr) -pltenter (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, La_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - printf ("pltenter: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - -#ifdef __AVX__ - if (check_avx () && strcmp (symname, "audit_test") == 0) - { - int i; - __m128i xmm; - __m256i ymm; - - for (i = 0; i < 8; i += 2) - { - xmm = _mm_set1_epi32 (i + 1); - if (memcmp (®s->lr_xmm[i], &xmm, sizeof (xmm)) - || memcmp (®s->lr_vector[i], &xmm, sizeof (xmm))) - abort (); - regs->lr_xmm[i] = (La_x86_64_xmm) _mm_set1_epi32 (i + 0x100); - regs->lr_vector[i].xmm[0] = regs->lr_xmm[i]; - - ymm = _mm256_set1_epi32 (i + 2); - if (memcmp (®s->lr_xmm[i + 1], - ®s->lr_vector[i + 1].xmm[0], sizeof (xmm)) - || memcmp (®s->lr_vector[i + 1], &ymm, sizeof (ymm))) - abort (); - regs->lr_vector[i + 1].ymm[0] - = (La_x86_64_ymm) _mm256_set1_epi32 (i + 0x101); - regs->lr_xmm[i + 1] = regs->lr_vector[i + 1].xmm[0]; - } - - ymm = _mm256_set1_epi32 (-1); - asm volatile ("vmovdqa %0, %%ymm0" : : "x" (ymm) : "xmm0" ); - asm volatile ("vmovdqa %0, %%ymm1" : : "x" (ymm) : "xmm1" ); - asm volatile ("vmovdqa %0, %%ymm2" : : "x" (ymm) : "xmm2" ); - asm volatile ("vmovdqa %0, %%ymm3" : : "x" (ymm) : "xmm3" ); - asm volatile ("vmovdqa %0, %%ymm4" : : "x" (ymm) : "xmm4" ); - asm volatile ("vmovdqa %0, %%ymm5" : : "x" (ymm) : "xmm5" ); - asm volatile ("vmovdqa %0, %%ymm6" : : "x" (ymm) : "xmm6" ); - asm volatile ("vmovdqa %0, %%ymm7" : : "x" (ymm) : "xmm7" ); - - *framesizep = 1024; - } -#endif - - return sym->st_value; -} - -unsigned int -pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, const La_regs *inregs, La_retval *outregs, - const char *symname) -{ - printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n", - symname, (long int) sym->st_value, ndx, - (ptrdiff_t) outregs->int_retval); - -#ifdef __AVX__ - if (check_avx () && strcmp (symname, "audit_test") == 0) - { - int i; - - __m256i ymm = _mm256_set1_epi32 (0x12349876);; - if (memcmp (&outregs->lrv_vector0, &ymm, sizeof (ymm))) - abort (); - - __m128i xmm; - - for (i = 0; i < 8; i += 2) - { - xmm = _mm_set1_epi32 (i + 0x100); - if (memcmp (&inregs->lr_xmm[i], &xmm, sizeof (xmm)) - || memcmp (&inregs->lr_vector[i], &xmm, sizeof (xmm))) - abort (); - - ymm = _mm256_set1_epi32 (i + 0x101); - if (memcmp (&inregs->lr_xmm[i + 1], - &inregs->lr_vector[i + 1].xmm[0], sizeof (xmm)) - || memcmp (&inregs->lr_vector[i + 1], &ymm, sizeof (ymm))) - abort (); - } - - outregs->lrv_vector0.ymm[0] - = (La_x86_64_ymm) _mm256_set1_epi32 (0x98abcdef); - - ymm = _mm256_set1_epi32 (-1); - asm volatile ("vmovdqa %0, %%ymm0" : : "x" (ymm) : "xmm0" ); - asm volatile ("vmovdqa %0, %%ymm1" : : "x" (ymm) : "xmm1" ); - } -#endif - - return 0; -} diff --git a/sysdeps/x86_64/tst-auditmod7a.c b/sysdeps/x86_64/tst-auditmod7a.c deleted file mode 100644 index b379df75d6..0000000000 --- a/sysdeps/x86_64/tst-auditmod7a.c +++ /dev/null @@ -1 +0,0 @@ -#include "tst-auditmod6a.c" diff --git a/sysdeps/x86_64/tst-auditmod7b.c b/sysdeps/x86_64/tst-auditmod7b.c deleted file mode 100644 index 5abe6d1bc9..0000000000 --- a/sysdeps/x86_64/tst-auditmod7b.c +++ /dev/null @@ -1,225 +0,0 @@ -/* Verify that changing AVX registers in audit library won't affect - function parameter passing/return. */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -unsigned int -la_version (unsigned int v) -{ - setlinebuf (stdout); - - printf ("version: %u\n", v); - - char buf[20]; - sprintf (buf, "%u", v); - - return v; -} - -void -la_activity (uintptr_t *cookie, unsigned int flag) -{ - if (flag == LA_ACT_CONSISTENT) - printf ("activity: consistent\n"); - else if (flag == LA_ACT_ADD) - printf ("activity: add\n"); - else if (flag == LA_ACT_DELETE) - printf ("activity: delete\n"); - else - printf ("activity: unknown activity %u\n", flag); -} - -char * -la_objsearch (const char *name, uintptr_t *cookie, unsigned int flag) -{ - char buf[100]; - const char *flagstr; - if (flag == LA_SER_ORIG) - flagstr = "LA_SET_ORIG"; - else if (flag == LA_SER_LIBPATH) - flagstr = "LA_SER_LIBPATH"; - else if (flag == LA_SER_RUNPATH) - flagstr = "LA_SER_RUNPATH"; - else if (flag == LA_SER_CONFIG) - flagstr = "LA_SER_CONFIG"; - else if (flag == LA_SER_DEFAULT) - flagstr = "LA_SER_DEFAULT"; - else if (flag == LA_SER_SECURE) - flagstr = "LA_SER_SECURE"; - else - { - sprintf (buf, "unknown flag %d", flag); - flagstr = buf; - } - printf ("objsearch: %s, %s\n", name, flagstr); - - return (char *) name; -} - -unsigned int -la_objopen (struct link_map *l, Lmid_t lmid, uintptr_t *cookie) -{ - printf ("objopen: %ld, %s\n", lmid, l->l_name); - - return 3; -} - -void -la_preinit (uintptr_t *cookie) -{ - printf ("preinit\n"); -} - -unsigned int -la_objclose (uintptr_t *cookie) -{ - printf ("objclose\n"); - return 0; -} - -uintptr_t -la_symbind32 (Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind32: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -uintptr_t -la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, unsigned int *flags, const char *symname) -{ - printf ("symbind64: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; -} - -#include - -#ifdef __AVX__ -#include -#include - -static int avx = -1; - -static inline int -__attribute ((always_inline)) -check_avx (void) -{ - if (avx == -1) - { - unsigned int eax, ebx, ecx, edx; - - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) - && (ecx & bit_AVX)) - avx = 1; - else - avx = 0; - } - return avx; -} -#else -#include -#endif - -ElfW(Addr) -pltenter (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, La_regs *regs, unsigned int *flags, - const char *symname, long int *framesizep) -{ - printf ("pltenter: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n", - symname, (long int) sym->st_value, ndx, *flags); - -#ifdef __AVX__ - if (check_avx () && strcmp (symname, "audit_test") == 0) - { - int i; - - __m128i xmm = _mm_setzero_si128 (); - for (i = 0; i < 8; i++) - if (memcmp (®s->lr_xmm[i], &xmm, sizeof (xmm)) - || memcmp (®s->lr_vector[i], &xmm, sizeof (xmm))) - abort (); - - for (i = 0; i < 8; i += 2) - { - regs->lr_xmm[i] = (La_x86_64_xmm) _mm_set1_epi32 (i + 0x100); - regs->lr_vector[i + 1].ymm[0] - = (La_x86_64_ymm) _mm256_set1_epi32 (i + 0x101); - } - - __m256i ymm = _mm256_set1_epi32 (-1); - asm volatile ("vmovdqa %0, %%ymm0" : : "x" (ymm) : "xmm0" ); - asm volatile ("vmovdqa %0, %%ymm1" : : "x" (ymm) : "xmm1" ); - asm volatile ("vmovdqa %0, %%ymm2" : : "x" (ymm) : "xmm2" ); - asm volatile ("vmovdqa %0, %%ymm3" : : "x" (ymm) : "xmm3" ); - asm volatile ("vmovdqa %0, %%ymm4" : : "x" (ymm) : "xmm4" ); - asm volatile ("vmovdqa %0, %%ymm5" : : "x" (ymm) : "xmm5" ); - asm volatile ("vmovdqa %0, %%ymm6" : : "x" (ymm) : "xmm6" ); - asm volatile ("vmovdqa %0, %%ymm7" : : "x" (ymm) : "xmm7" ); - - *framesizep = 1024; - } -#endif - - return sym->st_value; -} - -unsigned int -pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, - uintptr_t *defcook, const La_regs *inregs, La_retval *outregs, - const char *symname) -{ - printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n", - symname, (long int) sym->st_value, ndx, - (ptrdiff_t) outregs->int_retval); - -#ifdef __AVX__ - if (check_avx () && strcmp (symname, "audit_test") == 0) - { - int i; - - __m128i xmm = _mm_setzero_si128 (); - if (memcmp (&outregs->lrv_xmm0, &xmm, sizeof (xmm)) - || memcmp (&outregs->lrv_vector0, &xmm, sizeof (xmm))) - abort (); - - __m256i ymm; - - for (i = 0; i < 8; i += 2) - { - xmm = _mm_set1_epi32 (i + 0x100); - if (memcmp (&inregs->lr_xmm[i], &xmm, sizeof (xmm)) - || memcmp (&inregs->lr_vector[i], &xmm, sizeof (xmm))) - abort (); - - ymm = _mm256_set1_epi32 (i + 0x101); - if (memcmp (&inregs->lr_xmm[i + 1], - &inregs->lr_vector[i + 1].xmm[0], sizeof (xmm)) - || memcmp (&inregs->lr_vector[i + 1], &ymm, sizeof (ymm))) - abort (); - } - - outregs->lrv_vector0.ymm[0] - = (La_x86_64_ymm) _mm256_set1_epi32 (0x98abcdef); - - ymm = _mm256_set1_epi32 (-1); - asm volatile ("vmovdqa %0, %%ymm0" : : "x" (ymm) : "xmm0" ); - asm volatile ("vmovdqa %0, %%ymm1" : : "x" (ymm) : "xmm1" ); - } -#endif - - return 0; -} diff --git a/sysdeps/x86_64/tst-avx-aux.c b/sysdeps/x86_64/tst-avx-aux.c deleted file mode 100644 index e3807de7bb..0000000000 --- a/sysdeps/x86_64/tst-avx-aux.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Test case for preserved AVX registers in dynamic linker, -mavx part. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -tst_avx_aux (void) -{ -#ifdef __AVX__ - extern __m256i avx_test (__m256i, __m256i, __m256i, __m256i, - __m256i, __m256i, __m256i, __m256i); - - __m256i ymm0 = _mm256_set1_epi32 (0); - __m256i ymm1 = _mm256_set1_epi32 (1); - __m256i ymm2 = _mm256_set1_epi32 (2); - __m256i ymm3 = _mm256_set1_epi32 (3); - __m256i ymm4 = _mm256_set1_epi32 (4); - __m256i ymm5 = _mm256_set1_epi32 (5); - __m256i ymm6 = _mm256_set1_epi32 (6); - __m256i ymm7 = _mm256_set1_epi32 (7); - __m256i ret = avx_test (ymm0, ymm1, ymm2, ymm3, - ymm4, ymm5, ymm6, ymm7); - ymm0 = _mm256_set1_epi32 (0x12349876); - if (memcmp (&ymm0, &ret, sizeof (ret))) - abort (); - return 0; -#else /* __AVX__ */ - return 77; -#endif /* __AVX__ */ -} diff --git a/sysdeps/x86_64/tst-avx.c b/sysdeps/x86_64/tst-avx.c deleted file mode 100644 index ec2e3a79ff..0000000000 --- a/sysdeps/x86_64/tst-avx.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Test case for preserved AVX registers in dynamic linker. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int tst_avx_aux (void); - -static int -avx_enabled (void) -{ - unsigned int eax, ebx, ecx, edx; - - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 - || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE)) - return 0; - - /* Check the OS has AVX and SSE saving enabled. */ - asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0)); - - return (eax & 6) == 6; -} - -static int -do_test (void) -{ - /* Run AVX test only if AVX is supported. */ - if (avx_enabled ()) - return tst_avx_aux (); - else - return 77; -} - -#define TEST_FUNCTION do_test () -#include "../../test-skeleton.c" diff --git a/sysdeps/x86_64/tst-avx512-aux.c b/sysdeps/x86_64/tst-avx512-aux.c deleted file mode 100644 index 6cebc523f2..0000000000 --- a/sysdeps/x86_64/tst-avx512-aux.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Test case for preserved AVX512 registers in dynamic linker, - -mavx512 part. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -int -tst_avx512_aux (void) -{ -#ifdef __AVX512F__ - extern __m512i avx512_test (__m512i, __m512i, __m512i, __m512i, - __m512i, __m512i, __m512i, __m512i); - - __m512i zmm0 = _mm512_set1_epi32 (0); - __m512i zmm1 = _mm512_set1_epi32 (1); - __m512i zmm2 = _mm512_set1_epi32 (2); - __m512i zmm3 = _mm512_set1_epi32 (3); - __m512i zmm4 = _mm512_set1_epi32 (4); - __m512i zmm5 = _mm512_set1_epi32 (5); - __m512i zmm6 = _mm512_set1_epi32 (6); - __m512i zmm7 = _mm512_set1_epi32 (7); - __m512i ret = avx512_test (zmm0, zmm1, zmm2, zmm3, - zmm4, zmm5, zmm6, zmm7); - zmm0 = _mm512_set1_epi32 (0x12349876); - if (memcmp (&zmm0, &ret, sizeof (ret))) - abort (); - return 0; -#else /* __AVX512F__ */ - return 77; -#endif /* __AVX512F__ */ -} diff --git a/sysdeps/x86_64/tst-avx512.c b/sysdeps/x86_64/tst-avx512.c deleted file mode 100644 index a8e42ef553..0000000000 --- a/sysdeps/x86_64/tst-avx512.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Test case for preserved AVX512 registers in dynamic linker. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -int tst_avx512_aux (void); - -static int -avx512_enabled (void) -{ -#ifdef bit_AVX512F - unsigned int eax, ebx, ecx, edx; - - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 - || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE)) - return 0; - - __cpuid_count (7, 0, eax, ebx, ecx, edx); - if (!(ebx & bit_AVX512F)) - return 0; - - asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0)); - - /* Verify that ZMM, YMM and XMM states are enabled. */ - return (eax & 0xe6) == 0xe6; -#else - return 0; -#endif -} - -static int -do_test (void) -{ - /* Run AVX512 test only if AVX512 is supported. */ - if (avx512_enabled ()) - return tst_avx512_aux (); - else - return 77; -} - -#define TEST_FUNCTION do_test () -#include "../../test-skeleton.c" diff --git a/sysdeps/x86_64/tst-avx512mod.c b/sysdeps/x86_64/tst-avx512mod.c deleted file mode 100644 index 4cfb3a2c3d..0000000000 --- a/sysdeps/x86_64/tst-avx512mod.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Test case for x86-64 preserved AVX512 registers in dynamic linker. */ - -#ifdef __AVX512F__ -#include -#include -#include - -__m512i -avx512_test (__m512i x0, __m512i x1, __m512i x2, __m512i x3, - __m512i x4, __m512i x5, __m512i x6, __m512i x7) -{ - __m512i zmm; - - zmm = _mm512_set1_epi32 (0); - if (memcmp (&zmm, &x0, sizeof (zmm))) - abort (); - - zmm = _mm512_set1_epi32 (1); - if (memcmp (&zmm, &x1, sizeof (zmm))) - abort (); - - zmm = _mm512_set1_epi32 (2); - if (memcmp (&zmm, &x2, sizeof (zmm))) - abort (); - - zmm = _mm512_set1_epi32 (3); - if (memcmp (&zmm, &x3, sizeof (zmm))) - abort (); - - zmm = _mm512_set1_epi32 (4); - if (memcmp (&zmm, &x4, sizeof (zmm))) - abort (); - - zmm = _mm512_set1_epi32 (5); - if (memcmp (&zmm, &x5, sizeof (zmm))) - abort (); - - zmm = _mm512_set1_epi32 (6); - if (memcmp (&zmm, &x6, sizeof (zmm))) - abort (); - - zmm = _mm512_set1_epi32 (7); - if (memcmp (&zmm, &x7, sizeof (zmm))) - abort (); - - return _mm512_set1_epi32 (0x12349876); -} -#endif diff --git a/sysdeps/x86_64/tst-avxmod.c b/sysdeps/x86_64/tst-avxmod.c deleted file mode 100644 index 6e5b154997..0000000000 --- a/sysdeps/x86_64/tst-avxmod.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Test case for x86-64 preserved AVX registers in dynamic linker. */ - -#ifdef __AVX__ -#include -#include -#include - -__m256i -avx_test (__m256i x0, __m256i x1, __m256i x2, __m256i x3, - __m256i x4, __m256i x5, __m256i x6, __m256i x7) -{ - __m256i ymm; - - ymm = _mm256_set1_epi32 (0); - if (memcmp (&ymm, &x0, sizeof (ymm))) - abort (); - - ymm = _mm256_set1_epi32 (1); - if (memcmp (&ymm, &x1, sizeof (ymm))) - abort (); - - ymm = _mm256_set1_epi32 (2); - if (memcmp (&ymm, &x2, sizeof (ymm))) - abort (); - - ymm = _mm256_set1_epi32 (3); - if (memcmp (&ymm, &x3, sizeof (ymm))) - abort (); - - ymm = _mm256_set1_epi32 (4); - if (memcmp (&ymm, &x4, sizeof (ymm))) - abort (); - - ymm = _mm256_set1_epi32 (5); - if (memcmp (&ymm, &x5, sizeof (ymm))) - abort (); - - ymm = _mm256_set1_epi32 (6); - if (memcmp (&ymm, &x6, sizeof (ymm))) - abort (); - - ymm = _mm256_set1_epi32 (7); - if (memcmp (&ymm, &x7, sizeof (ymm))) - abort (); - - return _mm256_set1_epi32 (0x12349876); -} -#endif diff --git a/sysdeps/x86_64/tst-mallocalign1.c b/sysdeps/x86_64/tst-mallocalign1.c deleted file mode 100644 index 1221829b44..0000000000 --- a/sysdeps/x86_64/tst-mallocalign1.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -/* Specified by x86-64 psABI. */ -#define ALIGN_MASK (16 - 1) - -void * -test (size_t s) -{ - void *p = malloc (s); - - printf ("malloc: %ld, %p: %ld\n", (unsigned long) s, p, - ((unsigned long) p) & ALIGN_MASK); - return p; -} - -static int -do_test (void) -{ - void *p; - int ret = 0; - - p = test (2); - ret |= (unsigned long) p & ALIGN_MASK; - free (p); - - p = test (8); - ret |= (unsigned long) p & ALIGN_MASK; - free (p); - - p = test (13); - ret |= (unsigned long) p & ALIGN_MASK; - free (p); - - p = test (16); - ret |= (unsigned long) p & ALIGN_MASK; - free (p); - - p = test (23); - ret |= (unsigned long) p & ALIGN_MASK; - free (p); - - p = test (43); - ret |= (unsigned long) p & ALIGN_MASK; - free (p); - - p = test (123); - ret |= (unsigned long) p & ALIGN_MASK; - free (p); - - return ret; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/x86_64/tst-quad1.c b/sysdeps/x86_64/tst-quad1.c deleted file mode 100644 index 106bbac58b..0000000000 --- a/sysdeps/x86_64/tst-quad1.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -extern void foo (void); - -int -main (void) -{ - foo (); - return 0; -} diff --git a/sysdeps/x86_64/tst-quad1pie.c b/sysdeps/x86_64/tst-quad1pie.c deleted file mode 100644 index f5fd45f9b0..0000000000 --- a/sysdeps/x86_64/tst-quad1pie.c +++ /dev/null @@ -1 +0,0 @@ -#include "tst-quad1.c" diff --git a/sysdeps/x86_64/tst-quad2.c b/sysdeps/x86_64/tst-quad2.c deleted file mode 100644 index f5fd45f9b0..0000000000 --- a/sysdeps/x86_64/tst-quad2.c +++ /dev/null @@ -1 +0,0 @@ -#include "tst-quad1.c" diff --git a/sysdeps/x86_64/tst-quad2pie.c b/sysdeps/x86_64/tst-quad2pie.c deleted file mode 100644 index a15d8d36ac..0000000000 --- a/sysdeps/x86_64/tst-quad2pie.c +++ /dev/null @@ -1 +0,0 @@ -#include "tst-quad2.c" diff --git a/sysdeps/x86_64/tst-quadmod1.S b/sysdeps/x86_64/tst-quadmod1.S deleted file mode 100644 index a2d9af87f3..0000000000 --- a/sysdeps/x86_64/tst-quadmod1.S +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef BIAS -# define BIAS 0x7fffffff -#endif - - .section .data.rel,"aw",@progbits - .align 8 -.Ljmp: - .quad func + BIAS - .text - .globl func - .type func, @function -func: - .cfi_startproc - xorl %edi, %edi - jmp exit@PLT - .cfi_endproc - .size func, .-func - .globl foo - .type foo, @function -foo: - .cfi_startproc - .cfi_def_cfa_register 6 - movq .Ljmp(%rip), %rax - subq $BIAS, %rax - jmp *%rax - .cfi_endproc - .size foo, .-foo diff --git a/sysdeps/x86_64/tst-quadmod1pie.S b/sysdeps/x86_64/tst-quadmod1pie.S deleted file mode 100644 index c671d0cda9..0000000000 --- a/sysdeps/x86_64/tst-quadmod1pie.S +++ /dev/null @@ -1,2 +0,0 @@ -#define BIAS 0x7fff0000 -#include "tst-quadmod1.S" diff --git a/sysdeps/x86_64/tst-quadmod2.S b/sysdeps/x86_64/tst-quadmod2.S deleted file mode 100644 index 78599cdeb0..0000000000 --- a/sysdeps/x86_64/tst-quadmod2.S +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#ifndef BIAS -# define BIAS 0x7fff0000 -#endif - - .section .data.rel.local,"aw",@progbits - .align 8 -.Ljmp: - .quad func + BIAS - .text - .type func, @function -func: - .cfi_startproc - xorl %edi, %edi - jmp exit@PLT - .cfi_endproc - .size func, .-func - .globl foo - .type foo, @function -foo: - .cfi_startproc - .cfi_def_cfa_register 6 - movq .Ljmp(%rip), %rax - subq $BIAS, %rax - jmp *%rax - .cfi_endproc - .size foo, .-foo diff --git a/sysdeps/x86_64/tst-quadmod2pie.S b/sysdeps/x86_64/tst-quadmod2pie.S deleted file mode 100644 index 609183fe58..0000000000 --- a/sysdeps/x86_64/tst-quadmod2pie.S +++ /dev/null @@ -1 +0,0 @@ -#include "tst-quadmod2.S" diff --git a/sysdeps/x86_64/tst-split-dynreloc.c b/sysdeps/x86_64/tst-split-dynreloc.c deleted file mode 100644 index 2f9e9b9477..0000000000 --- a/sysdeps/x86_64/tst-split-dynreloc.c +++ /dev/null @@ -1,28 +0,0 @@ -/* This test will be used to create an executable with a specific - section layout in which .rela.dyn and .rela.plt are not contiguous. - For x86 case, readelf will report something like: - - ... - [10] .rela.dyn RELA - [11] .bar PROGBITS - [12] .rela.plt RELA - ... - - This is important as this case was not correctly handled by dynamic - linker in the bind-now case, and the second section was never - processed. */ - -#include - -const int __attribute__ ((section(".bar"))) bar = 0x12345678; -static const char foo[] = "foo"; - -static int -do_test (void) -{ - printf ("%s %d\n", foo, bar); - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/x86_64/tst-split-dynreloc.lds b/sysdeps/x86_64/tst-split-dynreloc.lds deleted file mode 100644 index 2229e698c9..0000000000 --- a/sysdeps/x86_64/tst-split-dynreloc.lds +++ /dev/null @@ -1,5 +0,0 @@ -SECTIONS -{ - .bar : { *(.bar) } -} -INSERT AFTER .rela.dyn; diff --git a/sysdeps/x86_64/tst-sse.c b/sysdeps/x86_64/tst-sse.c deleted file mode 100644 index dd1537cf27..0000000000 --- a/sysdeps/x86_64/tst-sse.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Test case for preserved SSE registers in dynamic linker. - Copyright (C) 2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -extern __m128i sse_test (__m128i, __m128i, __m128i, __m128i, - __m128i, __m128i, __m128i, __m128i); - -static int -do_test (void) -{ - __m128i xmm0 = _mm_set1_epi32 (0); - __m128i xmm1 = _mm_set1_epi32 (1); - __m128i xmm2 = _mm_set1_epi32 (2); - __m128i xmm3 = _mm_set1_epi32 (3); - __m128i xmm4 = _mm_set1_epi32 (4); - __m128i xmm5 = _mm_set1_epi32 (5); - __m128i xmm6 = _mm_set1_epi32 (6); - __m128i xmm7 = _mm_set1_epi32 (7); - __m128i ret = sse_test (xmm0, xmm1, xmm2, xmm3, - xmm4, xmm5, xmm6, xmm7); - xmm0 = _mm_set1_epi32 (0x12349876); - if (memcmp (&xmm0, &ret, sizeof (ret))) - abort (); - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../../test-skeleton.c" diff --git a/sysdeps/x86_64/tst-ssemod.c b/sysdeps/x86_64/tst-ssemod.c deleted file mode 100644 index 907a64c69e..0000000000 --- a/sysdeps/x86_64/tst-ssemod.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Test case for x86-64 preserved SSE registers in dynamic linker. */ - -#include -#include -#include - -__m128i -sse_test (__m128i x0, __m128i x1, __m128i x2, __m128i x3, - __m128i x4, __m128i x5, __m128i x6, __m128i x7) -{ - __m128i xmm; - - xmm = _mm_set1_epi32 (0); - if (memcmp (&xmm, &x0, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (1); - if (memcmp (&xmm, &x1, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (2); - if (memcmp (&xmm, &x2, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (3); - if (memcmp (&xmm, &x3, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (4); - if (memcmp (&xmm, &x4, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (5); - if (memcmp (&xmm, &x5, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (6); - if (memcmp (&xmm, &x6, sizeof (xmm))) - abort (); - - xmm = _mm_set1_epi32 (7); - if (memcmp (&xmm, &x7, sizeof (xmm))) - abort (); - - return _mm_set1_epi32 (0x12349876); -} diff --git a/sysdeps/x86_64/tst-stack-align.h b/sysdeps/x86_64/tst-stack-align.h deleted file mode 100644 index abe14deb0f..0000000000 --- a/sysdeps/x86_64/tst-stack-align.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2003-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include - -#define TEST_STACK_ALIGN() \ - ({ \ - /* AMD64 ABI mandates 16byte aligned stack. \ - Unfortunately, current GCC doesn't support __int128 or __float128 \ - types, so use aligned attribute instead. */ \ - struct _S \ - { \ - int _i __attribute__((aligned (16))); \ - int _pad[3]; \ - } _s = { ._i = 18 }; \ - double _d = 12.0; \ - long double _ld = 15.0; \ - int _ret = 0; \ - printf ("__int128: %d %p %zu\n", _s._i, &_s, __alignof (_s)); \ - if ((((uintptr_t) &_s) & (__alignof (_s) - 1)) != 0) \ - _ret = 1; \ - \ - printf ("double: %g %p %zu\n", _d, &_d, __alignof (double)); \ - if ((((uintptr_t) &_d) & (__alignof (double) - 1)) != 0) \ - _ret = 1; \ - \ - printf ("ldouble: %Lg %p %zu\n", _ld, &_ld, __alignof (long double)); \ - if ((((uintptr_t) &_ld) & (__alignof (long double) - 1)) != 0) \ - _ret = 1; \ - _ret; \ - }) diff --git a/sysdeps/x86_64/wcschr.S b/sysdeps/x86_64/wcschr.S deleted file mode 100644 index a3e7d67dec..0000000000 --- a/sysdeps/x86_64/wcschr.S +++ /dev/null @@ -1,156 +0,0 @@ -/* wcschr with SSSE3 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY (__wcschr) - - movd %rsi, %xmm1 - pxor %xmm2, %xmm2 - mov %rdi, %rcx - punpckldq %xmm1, %xmm1 - punpckldq %xmm1, %xmm1 - - and $63, %rcx - cmp $48, %rcx - ja L(cross_cache) - - movdqu (%rdi), %xmm0 - pcmpeqd %xmm0, %xmm2 - add $16, %rdi - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %rdx - pmovmskb %xmm0, %rax - or %rax, %rdx - jnz L(matches) - - and $-16, %rdi - - movdqa (%rdi), %xmm0 - pcmpeqd %xmm0, %xmm2 - add $16, %rdi - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %rdx - pmovmskb %xmm0, %rax - or %rax, %rdx - jnz L(matches) - - jmp L(loop) - -L(cross_cache): - and $15, %rcx - and $-16, %rdi - movdqa (%rdi), %xmm0 - pcmpeqd %xmm0, %xmm2 - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %rdx - pmovmskb %xmm0, %rax - - sar %cl, %rdx - sar %cl, %rax - test %rax, %rax - je L(unaligned_no_match) - - bsf %rax, %rax - test %rdx, %rdx - je L(unaligned_match) - bsf %rdx, %rdx - cmp %rdx, %rax - ja L(return_null) - -L(unaligned_match): - add %rdi, %rax - add %rcx, %rax - ret - - .p2align 4 -L(unaligned_no_match): - test %rdx, %rdx - jne L(return_null) - pxor %xmm2, %xmm2 - - add $16, %rdi - - .p2align 4 -/* Loop start on aligned string. */ -L(loop): - movdqa (%rdi), %xmm0 - pcmpeqd %xmm0, %xmm2 - add $16, %rdi - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %rdx - pmovmskb %xmm0, %rax - or %rax, %rdx - jnz L(matches) - - movdqa (%rdi), %xmm0 - pcmpeqd %xmm0, %xmm2 - add $16, %rdi - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %rdx - pmovmskb %xmm0, %rax - or %rax, %rdx - jnz L(matches) - - movdqa (%rdi), %xmm0 - pcmpeqd %xmm0, %xmm2 - add $16, %rdi - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %rdx - pmovmskb %xmm0, %rax - or %rax, %rdx - jnz L(matches) - - movdqa (%rdi), %xmm0 - pcmpeqd %xmm0, %xmm2 - add $16, %rdi - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %rdx - pmovmskb %xmm0, %rax - or %rax, %rdx - jnz L(matches) - jmp L(loop) - - .p2align 4 -L(matches): - pmovmskb %xmm2, %rdx - test %rax, %rax - jz L(return_null) - bsf %rax, %rax - test %rdx, %rdx - je L(match) - bsf %rdx, %rcx - cmp %rcx, %rax - ja L(return_null) -L(match): - sub $16, %rdi - add %rdi, %rax - ret - - .p2align 4 -L(return_null): - xor %rax, %rax - ret - -END (__wcschr) - -libc_hidden_def(__wcschr) -weak_alias (__wcschr, wcschr) -libc_hidden_weak (wcschr) diff --git a/sysdeps/x86_64/wcscmp.S b/sysdeps/x86_64/wcscmp.S deleted file mode 100644 index 3ef3341cd0..0000000000 --- a/sysdeps/x86_64/wcscmp.S +++ /dev/null @@ -1,950 +0,0 @@ -/* Optimized wcscmp for x86-64 with SSE2. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -/* Note: wcscmp uses signed comparison, not unsighed as in strcmp function. */ - - .text -ENTRY (__wcscmp) -/* - * This implementation uses SSE to compare up to 16 bytes at a time. -*/ - mov %esi, %eax - mov %edi, %edx - pxor %xmm0, %xmm0 /* clear %xmm0 for null char checks */ - mov %al, %ch - mov %dl, %cl - and $63, %eax /* rsi alignment in cache line */ - and $63, %edx /* rdi alignment in cache line */ - and $15, %cl - jz L(continue_00) - cmp $16, %edx - jb L(continue_0) - cmp $32, %edx - jb L(continue_16) - cmp $48, %edx - jb L(continue_32) - -L(continue_48): - and $15, %ch - jz L(continue_48_00) - cmp $16, %eax - jb L(continue_0_48) - cmp $32, %eax - jb L(continue_16_48) - cmp $48, %eax - jb L(continue_32_48) - - .p2align 4 -L(continue_48_48): - mov (%rsi), %ecx - cmp %ecx, (%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 4(%rsi), %ecx - cmp %ecx, 4(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 8(%rsi), %ecx - cmp %ecx, 8(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 12(%rsi), %ecx - cmp %ecx, 12(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - movdqu 16(%rdi), %xmm1 - movdqu 16(%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqu 32(%rdi), %xmm1 - movdqu 32(%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - movdqu 48(%rdi), %xmm1 - movdqu 48(%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_48) - - add $64, %rsi - add $64, %rdi - jmp L(continue_48_48) - -L(continue_0): - and $15, %ch - jz L(continue_0_00) - cmp $16, %eax - jb L(continue_0_0) - cmp $32, %eax - jb L(continue_0_16) - cmp $48, %eax - jb L(continue_0_32) - - .p2align 4 -L(continue_0_48): - mov (%rsi), %ecx - cmp %ecx, (%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 4(%rsi), %ecx - cmp %ecx, 4(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 8(%rsi), %ecx - cmp %ecx, 8(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 12(%rsi), %ecx - cmp %ecx, 12(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - movdqu 16(%rdi), %xmm1 - movdqu 16(%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqu 32(%rdi), %xmm1 - movdqu 32(%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - mov 48(%rsi), %ecx - cmp %ecx, 48(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 52(%rsi), %ecx - cmp %ecx, 52(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 56(%rsi), %ecx - cmp %ecx, 56(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 60(%rsi), %ecx - cmp %ecx, 60(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - add $64, %rsi - add $64, %rdi - jmp L(continue_0_48) - - .p2align 4 -L(continue_00): - and $15, %ch - jz L(continue_00_00) - cmp $16, %eax - jb L(continue_00_0) - cmp $32, %eax - jb L(continue_00_16) - cmp $48, %eax - jb L(continue_00_32) - - .p2align 4 -L(continue_00_48): - pcmpeqd (%rdi), %xmm0 - mov (%rdi), %eax - pmovmskb %xmm0, %ecx - test %ecx, %ecx - jnz L(less4_double_words1) - - cmp (%rsi), %eax - jne L(nequal) - - mov 4(%rdi), %eax - cmp 4(%rsi), %eax - jne L(nequal) - - mov 8(%rdi), %eax - cmp 8(%rsi), %eax - jne L(nequal) - - mov 12(%rdi), %eax - cmp 12(%rsi), %eax - jne L(nequal) - - movdqu 16(%rsi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd 16(%rdi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqu 32(%rsi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd 32(%rdi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - movdqu 48(%rsi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd 48(%rdi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_48) - - add $64, %rsi - add $64, %rdi - jmp L(continue_00_48) - - .p2align 4 -L(continue_32): - and $15, %ch - jz L(continue_32_00) - cmp $16, %eax - jb L(continue_0_32) - cmp $32, %eax - jb L(continue_16_32) - cmp $48, %eax - jb L(continue_32_32) - - .p2align 4 -L(continue_32_48): - mov (%rsi), %ecx - cmp %ecx, (%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 4(%rsi), %ecx - cmp %ecx, 4(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 8(%rsi), %ecx - cmp %ecx, 8(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 12(%rsi), %ecx - cmp %ecx, 12(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 16(%rsi), %ecx - cmp %ecx, 16(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 20(%rsi), %ecx - cmp %ecx, 20(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 24(%rsi), %ecx - cmp %ecx, 24(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 28(%rsi), %ecx - cmp %ecx, 28(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - movdqu 32(%rdi), %xmm1 - movdqu 32(%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - movdqu 48(%rdi), %xmm1 - movdqu 48(%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_48) - - add $64, %rsi - add $64, %rdi - jmp L(continue_32_48) - - .p2align 4 -L(continue_16): - and $15, %ch - jz L(continue_16_00) - cmp $16, %eax - jb L(continue_0_16) - cmp $32, %eax - jb L(continue_16_16) - cmp $48, %eax - jb L(continue_16_32) - - .p2align 4 -L(continue_16_48): - mov (%rsi), %ecx - cmp %ecx, (%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 4(%rsi), %ecx - cmp %ecx, 4(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 8(%rsi), %ecx - cmp %ecx, 8(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 12(%rsi), %ecx - cmp %ecx, 12(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - movdqu 16(%rdi), %xmm1 - movdqu 16(%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - mov 32(%rsi), %ecx - cmp %ecx, 32(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 36(%rsi), %ecx - cmp %ecx, 36(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 40(%rsi), %ecx - cmp %ecx, 40(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 44(%rsi), %ecx - cmp %ecx, 44(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - movdqu 48(%rdi), %xmm1 - movdqu 48(%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_48) - - add $64, %rsi - add $64, %rdi - jmp L(continue_16_48) - - .p2align 4 -L(continue_00_00): - movdqa (%rdi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd (%rsi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqa 16(%rdi), %xmm3 - pcmpeqd %xmm3, %xmm0 /* Any null double_word? */ - pcmpeqd 16(%rsi), %xmm3 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm3 /* packed sub of comparison results*/ - pmovmskb %xmm3, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqa 32(%rdi), %xmm5 - pcmpeqd %xmm5, %xmm0 /* Any null double_word? */ - pcmpeqd 32(%rsi), %xmm5 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm5 /* packed sub of comparison results*/ - pmovmskb %xmm5, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - movdqa 48(%rdi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd 48(%rsi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_48) - - add $64, %rsi - add $64, %rdi - jmp L(continue_00_00) - - .p2align 4 -L(continue_00_32): - movdqu (%rsi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd (%rdi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - add $16, %rsi - add $16, %rdi - jmp L(continue_00_48) - - .p2align 4 -L(continue_00_16): - movdqu (%rsi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd (%rdi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqu 16(%rsi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd 16(%rdi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - add $32, %rsi - add $32, %rdi - jmp L(continue_00_48) - - .p2align 4 -L(continue_00_0): - movdqu (%rsi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd (%rdi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqu 16(%rsi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd 16(%rdi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqu 32(%rsi), %xmm2 - pcmpeqd %xmm2, %xmm0 /* Any null double_word? */ - pcmpeqd 32(%rdi), %xmm2 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm2 /* packed sub of comparison results*/ - pmovmskb %xmm2, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - add $48, %rsi - add $48, %rdi - jmp L(continue_00_48) - - .p2align 4 -L(continue_48_00): - pcmpeqd (%rsi), %xmm0 - mov (%rdi), %eax - pmovmskb %xmm0, %ecx - test %ecx, %ecx - jnz L(less4_double_words1) - - cmp (%rsi), %eax - jne L(nequal) - - mov 4(%rdi), %eax - cmp 4(%rsi), %eax - jne L(nequal) - - mov 8(%rdi), %eax - cmp 8(%rsi), %eax - jne L(nequal) - - mov 12(%rdi), %eax - cmp 12(%rsi), %eax - jne L(nequal) - - movdqu 16(%rdi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd 16(%rsi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqu 32(%rdi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd 32(%rsi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - movdqu 48(%rdi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd 48(%rsi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_48) - - add $64, %rsi - add $64, %rdi - jmp L(continue_48_00) - - .p2align 4 -L(continue_32_00): - movdqu (%rdi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd (%rsi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - add $16, %rsi - add $16, %rdi - jmp L(continue_48_00) - - .p2align 4 -L(continue_16_00): - movdqu (%rdi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd (%rsi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqu 16(%rdi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd 16(%rsi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - add $32, %rsi - add $32, %rdi - jmp L(continue_48_00) - - .p2align 4 -L(continue_0_00): - movdqu (%rdi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd (%rsi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqu 16(%rdi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd 16(%rsi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqu 32(%rdi), %xmm1 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd 32(%rsi), %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - add $48, %rsi - add $48, %rdi - jmp L(continue_48_00) - - .p2align 4 -L(continue_32_32): - movdqu (%rdi), %xmm1 - movdqu (%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - add $16, %rsi - add $16, %rdi - jmp L(continue_48_48) - - .p2align 4 -L(continue_16_16): - movdqu (%rdi), %xmm1 - movdqu (%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqu 16(%rdi), %xmm3 - movdqu 16(%rsi), %xmm4 - pcmpeqd %xmm3, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm4, %xmm3 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm3 /* packed sub of comparison results*/ - pmovmskb %xmm3, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - add $32, %rsi - add $32, %rdi - jmp L(continue_48_48) - - .p2align 4 -L(continue_0_0): - movdqu (%rdi), %xmm1 - movdqu (%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqu 16(%rdi), %xmm3 - movdqu 16(%rsi), %xmm4 - pcmpeqd %xmm3, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm4, %xmm3 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm3 /* packed sub of comparison results*/ - pmovmskb %xmm3, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - movdqu 32(%rdi), %xmm1 - movdqu 32(%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_32) - - add $48, %rsi - add $48, %rdi - jmp L(continue_48_48) - - .p2align 4 -L(continue_0_16): - movdqu (%rdi), %xmm1 - movdqu (%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - movdqu 16(%rdi), %xmm1 - movdqu 16(%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words_16) - - add $32, %rsi - add $32, %rdi - jmp L(continue_32_48) - - .p2align 4 -L(continue_0_32): - movdqu (%rdi), %xmm1 - movdqu (%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - add $16, %rsi - add $16, %rdi - jmp L(continue_16_48) - - .p2align 4 -L(continue_16_32): - movdqu (%rdi), %xmm1 - movdqu (%rsi), %xmm2 - pcmpeqd %xmm1, %xmm0 /* Any null double_word? */ - pcmpeqd %xmm2, %xmm1 /* compare first 4 double_words for equality */ - psubb %xmm0, %xmm1 /* packed sub of comparison results*/ - pmovmskb %xmm1, %edx - sub $0xffff, %edx /* if first 4 double_words are same, edx == 0xffff */ - jnz L(less4_double_words) - - add $16, %rsi - add $16, %rdi - jmp L(continue_32_48) - - .p2align 4 -L(less4_double_words1): - cmp (%rsi), %eax - jne L(nequal) - test %eax, %eax - jz L(equal) - - mov 4(%rsi), %ecx - cmp %ecx, 4(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 8(%rsi), %ecx - cmp %ecx, 8(%rdi) - jne L(nequal) - test %ecx, %ecx - jz L(equal) - - mov 12(%rsi), %ecx - cmp %ecx, 12(%rdi) - jne L(nequal) - xor %eax, %eax - ret - - .p2align 4 -L(less4_double_words): - xor %eax, %eax - test %dl, %dl - jz L(next_two_double_words) - and $15, %dl - jz L(second_double_word) - mov (%rdi), %eax - cmp (%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(second_double_word): - mov 4(%rdi), %eax - cmp 4(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(next_two_double_words): - and $15, %dh - jz L(fourth_double_word) - mov 8(%rdi), %eax - cmp 8(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(fourth_double_word): - mov 12(%rdi), %eax - cmp 12(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(less4_double_words_16): - xor %eax, %eax - test %dl, %dl - jz L(next_two_double_words_16) - and $15, %dl - jz L(second_double_word_16) - mov 16(%rdi), %eax - cmp 16(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(second_double_word_16): - mov 20(%rdi), %eax - cmp 20(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(next_two_double_words_16): - and $15, %dh - jz L(fourth_double_word_16) - mov 24(%rdi), %eax - cmp 24(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(fourth_double_word_16): - mov 28(%rdi), %eax - cmp 28(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(less4_double_words_32): - xor %eax, %eax - test %dl, %dl - jz L(next_two_double_words_32) - and $15, %dl - jz L(second_double_word_32) - mov 32(%rdi), %eax - cmp 32(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(second_double_word_32): - mov 36(%rdi), %eax - cmp 36(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(next_two_double_words_32): - and $15, %dh - jz L(fourth_double_word_32) - mov 40(%rdi), %eax - cmp 40(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(fourth_double_word_32): - mov 44(%rdi), %eax - cmp 44(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(less4_double_words_48): - xor %eax, %eax - test %dl, %dl - jz L(next_two_double_words_48) - and $15, %dl - jz L(second_double_word_48) - mov 48(%rdi), %eax - cmp 48(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(second_double_word_48): - mov 52(%rdi), %eax - cmp 52(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(next_two_double_words_48): - and $15, %dh - jz L(fourth_double_word_48) - mov 56(%rdi), %eax - cmp 56(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(fourth_double_word_48): - mov 60(%rdi), %eax - cmp 60(%rsi), %eax - jne L(nequal) - ret - - .p2align 4 -L(nequal): - mov $1, %eax - jg L(nequal_bigger) - neg %eax - -L(nequal_bigger): - ret - - .p2align 4 -L(equal): - xor %rax, %rax - ret - -END (__wcscmp) -libc_hidden_def (__wcscmp) -weak_alias (__wcscmp, wcscmp) diff --git a/sysdeps/x86_64/wcslen.S b/sysdeps/x86_64/wcslen.S deleted file mode 100644 index c6081a482f..0000000000 --- a/sysdeps/x86_64/wcslen.S +++ /dev/null @@ -1,238 +0,0 @@ -/* Optimized wcslen for x86-64 with SSE2. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY (__wcslen) - cmpl $0, (%rdi) - jz L(exit_tail0) - cmpl $0, 4(%rdi) - jz L(exit_tail1) - cmpl $0, 8(%rdi) - jz L(exit_tail2) - cmpl $0, 12(%rdi) - jz L(exit_tail3) - cmpl $0, 16(%rdi) - jz L(exit_tail4) - cmpl $0, 20(%rdi) - jz L(exit_tail5) - cmpl $0, 24(%rdi) - jz L(exit_tail6) - cmpl $0, 28(%rdi) - jz L(exit_tail7) - - pxor %xmm0, %xmm0 - - lea 32(%rdi), %rax - lea 16(%rdi), %rcx - and $-16, %rax - - pcmpeqd (%rax), %xmm0 - pmovmskb %xmm0, %edx - pxor %xmm1, %xmm1 - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqd (%rax), %xmm1 - pmovmskb %xmm1, %edx - pxor %xmm2, %xmm2 - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqd (%rax), %xmm2 - pmovmskb %xmm2, %edx - pxor %xmm3, %xmm3 - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqd (%rax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqd (%rax), %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqd (%rax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqd (%rax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqd (%rax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqd (%rax), %xmm0 - pmovmskb %xmm0, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqd (%rax), %xmm1 - pmovmskb %xmm1, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqd (%rax), %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - pcmpeqd (%rax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 16(%rax), %rax - jnz L(exit) - - and $-0x40, %rax - - .p2align 4 -L(aligned_64_loop): - movaps (%rax), %xmm0 - movaps 16(%rax), %xmm1 - movaps 32(%rax), %xmm2 - movaps 48(%rax), %xmm6 - - pminub %xmm1, %xmm0 - pminub %xmm6, %xmm2 - pminub %xmm0, %xmm2 - pcmpeqd %xmm3, %xmm2 - pmovmskb %xmm2, %edx - test %edx, %edx - lea 64(%rax), %rax - jz L(aligned_64_loop) - - pcmpeqd -64(%rax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea 48(%rcx), %rcx - jnz L(exit) - - pcmpeqd %xmm1, %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea -16(%rcx), %rcx - jnz L(exit) - - pcmpeqd -32(%rax), %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea -16(%rcx), %rcx - jnz L(exit) - - pcmpeqd %xmm6, %xmm3 - pmovmskb %xmm3, %edx - test %edx, %edx - lea -16(%rcx), %rcx - jnz L(exit) - - jmp L(aligned_64_loop) - - .p2align 4 -L(exit): - sub %rcx, %rax - shr $2, %rax - test %dl, %dl - jz L(exit_high) - - mov %dl, %cl - and $15, %cl - jz L(exit_1) - ret - - .p2align 4 -L(exit_high): - mov %dh, %ch - and $15, %ch - jz L(exit_3) - add $2, %rax - ret - - .p2align 4 -L(exit_1): - add $1, %rax - ret - - .p2align 4 -L(exit_3): - add $3, %rax - ret - - .p2align 4 -L(exit_tail0): - xor %rax, %rax - ret - - .p2align 4 -L(exit_tail1): - mov $1, %rax - ret - - .p2align 4 -L(exit_tail2): - mov $2, %rax - ret - - .p2align 4 -L(exit_tail3): - mov $3, %rax - ret - - .p2align 4 -L(exit_tail4): - mov $4, %rax - ret - - .p2align 4 -L(exit_tail5): - mov $5, %rax - ret - - .p2align 4 -L(exit_tail6): - mov $6, %rax - ret - - .p2align 4 -L(exit_tail7): - mov $7, %rax - ret - -END (__wcslen) - -weak_alias(__wcslen, wcslen) diff --git a/sysdeps/x86_64/wcsrchr.S b/sysdeps/x86_64/wcsrchr.S deleted file mode 100644 index a6c385c511..0000000000 --- a/sysdeps/x86_64/wcsrchr.S +++ /dev/null @@ -1,282 +0,0 @@ -/* wcsrchr with SSSE3 - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY (wcsrchr) - - movd %rsi, %xmm1 - mov %rdi, %rcx - punpckldq %xmm1, %xmm1 - pxor %xmm2, %xmm2 - punpckldq %xmm1, %xmm1 - and $63, %rcx - cmp $48, %rcx - ja L(crosscache) - - movdqu (%rdi), %xmm0 - pcmpeqd %xmm0, %xmm2 - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %rcx - pmovmskb %xmm0, %rax - add $16, %rdi - - test %rax, %rax - jnz L(unaligned_match1) - - test %rcx, %rcx - jnz L(return_null) - - and $-16, %rdi - xor %r8, %r8 - jmp L(loop) - - .p2align 4 -L(unaligned_match1): - test %rcx, %rcx - jnz L(prolog_find_zero_1) - - mov %rax, %r8 - mov %rdi, %rsi - and $-16, %rdi - jmp L(loop) - - .p2align 4 -L(crosscache): - and $15, %rcx - and $-16, %rdi - pxor %xmm3, %xmm3 - movdqa (%rdi), %xmm0 - pcmpeqd %xmm0, %xmm3 - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm3, %rdx - pmovmskb %xmm0, %rax - shr %cl, %rdx - shr %cl, %rax - add $16, %rdi - - test %rax, %rax - jnz L(unaligned_match) - - test %rdx, %rdx - jnz L(return_null) - - xor %r8, %r8 - jmp L(loop) - - .p2align 4 -L(unaligned_match): - test %rdx, %rdx - jnz L(prolog_find_zero) - - mov %rax, %r8 - lea (%rdi, %rcx), %rsi - -/* Loop start on aligned string. */ - .p2align 4 -L(loop): - movdqa (%rdi), %xmm0 - pcmpeqd %xmm0, %xmm2 - add $16, %rdi - pcmpeqd %xmm1, %xmm0 - pmovmskb %xmm2, %rcx - pmovmskb %xmm0, %rax - or %rax, %rcx - jnz L(matches) - - movdqa (%rdi), %xmm3 - pcmpeqd %xmm3, %xmm2 - add $16, %rdi - pcmpeqd %xmm1, %xmm3 - pmovmskb %xmm2, %rcx - pmovmskb %xmm3, %rax - or %rax, %rcx - jnz L(matches) - - movdqa (%rdi), %xmm4 - pcmpeqd %xmm4, %xmm2 - add $16, %rdi - pcmpeqd %xmm1, %xmm4 - pmovmskb %xmm2, %rcx - pmovmskb %xmm4, %rax - or %rax, %rcx - jnz L(matches) - - movdqa (%rdi), %xmm5 - pcmpeqd %xmm5, %xmm2 - add $16, %rdi - pcmpeqd %xmm1, %xmm5 - pmovmskb %xmm2, %rcx - pmovmskb %xmm5, %rax - or %rax, %rcx - jz L(loop) - - .p2align 4 -L(matches): - test %rax, %rax - jnz L(match) -L(return_value): - test %r8, %r8 - jz L(return_null) - mov %r8, %rax - mov %rsi, %rdi - - test $15 << 4, %ah - jnz L(match_fourth_wchar) - test %ah, %ah - jnz L(match_third_wchar) - test $15 << 4, %al - jnz L(match_second_wchar) - lea -16(%rdi), %rax - ret - - .p2align 4 -L(match): - pmovmskb %xmm2, %rcx - test %rcx, %rcx - jnz L(find_zero) - mov %rax, %r8 - mov %rdi, %rsi - jmp L(loop) - - .p2align 4 -L(find_zero): - test $15, %cl - jnz L(find_zero_in_first_wchar) - test %cl, %cl - jnz L(find_zero_in_second_wchar) - test $15, %ch - jnz L(find_zero_in_third_wchar) - - and $1 << 13 - 1, %rax - jz L(return_value) - - test $15 << 4, %ah - jnz L(match_fourth_wchar) - test %ah, %ah - jnz L(match_third_wchar) - test $15 << 4, %al - jnz L(match_second_wchar) - lea -16(%rdi), %rax - ret - - .p2align 4 -L(find_zero_in_first_wchar): - test $1, %rax - jz L(return_value) - lea -16(%rdi), %rax - ret - - .p2align 4 -L(find_zero_in_second_wchar): - and $1 << 5 - 1, %rax - jz L(return_value) - - test $15 << 4, %al - jnz L(match_second_wchar) - lea -16(%rdi), %rax - ret - - .p2align 4 -L(find_zero_in_third_wchar): - and $1 << 9 - 1, %rax - jz L(return_value) - - test %ah, %ah - jnz L(match_third_wchar) - test $15 << 4, %al - jnz L(match_second_wchar) - lea -16(%rdi), %rax - ret - - .p2align 4 -L(prolog_find_zero): - add %rcx, %rdi - mov %rdx, %rcx -L(prolog_find_zero_1): - test $15, %cl - jnz L(prolog_find_zero_in_first_wchar) - test %cl, %cl - jnz L(prolog_find_zero_in_second_wchar) - test $15, %ch - jnz L(prolog_find_zero_in_third_wchar) - - and $1 << 13 - 1, %rax - jz L(return_null) - - test $15 << 4, %ah - jnz L(match_fourth_wchar) - test %ah, %ah - jnz L(match_third_wchar) - test $15 << 4, %al - jnz L(match_second_wchar) - lea -16(%rdi), %rax - ret - - .p2align 4 -L(prolog_find_zero_in_first_wchar): - test $1, %rax - jz L(return_null) - lea -16(%rdi), %rax - ret - - .p2align 4 -L(prolog_find_zero_in_second_wchar): - and $1 << 5 - 1, %rax - jz L(return_null) - - test $15 << 4, %al - jnz L(match_second_wchar) - lea -16(%rdi), %rax - ret - - .p2align 4 -L(prolog_find_zero_in_third_wchar): - and $1 << 9 - 1, %rax - jz L(return_null) - - test %ah, %ah - jnz L(match_third_wchar) - test $15 << 4, %al - jnz L(match_second_wchar) - lea -16(%rdi), %rax - ret - - .p2align 4 -L(match_second_wchar): - lea -12(%rdi), %rax - ret - - .p2align 4 -L(match_third_wchar): - lea -8(%rdi), %rax - ret - - .p2align 4 -L(match_fourth_wchar): - lea -4(%rdi), %rax - ret - - .p2align 4 -L(return_null): - xor %rax, %rax - ret - -END (wcsrchr) diff --git a/sysdeps/x86_64/wmemset.S b/sysdeps/x86_64/wmemset.S deleted file mode 100644 index f96d567fd8..0000000000 --- a/sysdeps/x86_64/wmemset.S +++ /dev/null @@ -1 +0,0 @@ -/* Implemented in memset.S. */ diff --git a/sysdeps/x86_64/wmemset_chk.S b/sysdeps/x86_64/wmemset_chk.S deleted file mode 100644 index 64c277413f..0000000000 --- a/sysdeps/x86_64/wmemset_chk.S +++ /dev/null @@ -1,33 +0,0 @@ -/* Checking wmemset for x86-64. - Copyright (C) 2004-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include "asm-syntax.h" - -#ifndef SHARED - /* For libc.so this is defined in wmemset.S. - For libc.a, this is a separate source to avoid - wmemset bringing in __chk_fail and all routines - it calls. */ - .text -ENTRY (__wmemset_chk) - cmpq %rdx, %rcx - jb __chk_fail - jmp wmemset -END (__wmemset_chk) -#endif diff --git a/sysdeps/x86_64/wordcopy.c b/sysdeps/x86_64/wordcopy.c deleted file mode 100644 index 590b6cb16b..0000000000 --- a/sysdeps/x86_64/wordcopy.c +++ /dev/null @@ -1 +0,0 @@ -/* X86-64 doesn't use memory copy functions. */ diff --git a/sysdeps/x86_64/x32/Implies-after b/sysdeps/x86_64/x32/Implies-after deleted file mode 100644 index 39a34c5f57..0000000000 --- a/sysdeps/x86_64/x32/Implies-after +++ /dev/null @@ -1 +0,0 @@ -wordsize-32 diff --git a/sysdeps/x86_64/x32/Makefile b/sysdeps/x86_64/x32/Makefile deleted file mode 100644 index f2ebc24fb0..0000000000 --- a/sysdeps/x86_64/x32/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -ifeq ($(subdir),math) -# Since x32 returns 32-bit long int and 64-bit long long int in the -# same 64-bit register, we make the 32b-bit lround an alias of the -# 64-bit llround. Add -fno-builtin-lround to silence the compiler. -CFLAGS-s_llround.c += -fno-builtin-lround -endif diff --git a/sysdeps/x86_64/x32/_itoa.h b/sysdeps/x86_64/x32/_itoa.h deleted file mode 100644 index 0f9ed47726..0000000000 --- a/sysdeps/x86_64/x32/_itoa.h +++ /dev/null @@ -1,4 +0,0 @@ -/* X32 uses 64-bit _itoa_word and _itoa is mapped to _itoa_word. */ -#define _ITOA_NEEDED 0 -#define _ITOA_WORD_TYPE unsigned long long int -#include_next <_itoa.h> diff --git a/sysdeps/x86_64/x32/divdi3.c b/sysdeps/x86_64/x32/divdi3.c deleted file mode 100644 index bc7b4c4441..0000000000 --- a/sysdeps/x86_64/x32/divdi3.c +++ /dev/null @@ -1 +0,0 @@ -/* Fortunately nothing to do. */ diff --git a/sysdeps/x86_64/x32/dl-machine.h b/sysdeps/x86_64/x32/dl-machine.h deleted file mode 100644 index 2c50688d94..0000000000 --- a/sysdeps/x86_64/x32/dl-machine.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. x32 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* Must allow to be included more than once. - See #ifdef RESOLVE_MAP in sysdeps/x86_64/dl-machine.h. */ -#include - -#ifndef _X32_DL_MACHINE_H -#define _X32_DL_MACHINE_H - -#undef ARCH_LA_PLTENTER -#undef ARCH_LA_PLTEXIT -#undef RTLD_START - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER x32_gnu_pltenter -#define ARCH_LA_PLTEXIT x32_gnu_pltexit - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ -#define RTLD_START asm ("\n\ -.text\n\ - .p2align 4\n\ -.globl _start\n\ -.globl _dl_start_user\n\ -_start:\n\ - movl %esp, %edi\n\ - call _dl_start\n\ -_dl_start_user:\n\ - # Save the user entry point address in %r12.\n\ - movl %eax, %r12d\n\ - # See if we were run as a command with the executable file\n\ - # name as an extra leading argument.\n\ - movl _dl_skip_args(%rip), %eax\n\ - # Pop the original argument count.\n\ - movl (%rsp), %edx\n\ - # Adjust the stack pointer to skip _dl_skip_args words.\n\ - lea 4(%rsp,%rax,4), %esp\n\ - # Subtract _dl_skip_args from argc.\n\ - subl %eax, %edx\n\ - # Push argc back on the stack.\n\ - subl $4, %esp\n\ - movl %edx, (%rsp)\n\ - # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env)\n\ - # argc -> rsi\n\ - movl %edx, %esi\n\ - # Save %rsp value in %r13.\n\ - movl %esp, %r13d\n\ - # And align stack for the _dl_init call.\n\ - and $-16, %esp\n\ - # _dl_loaded -> rdi\n\ - movl _rtld_local(%rip), %edi\n\ - # env -> rcx\n\ - lea 8(%r13,%rdx,4), %ecx\n\ - # argv -> rdx\n\ - lea 4(%r13), %edx\n\ - # Clear %rbp to mark outermost frame obviously even for constructors.\n\ - xorl %ebp, %ebp\n\ - # Call the function to run the initializers.\n\ - call _dl_init\n\ - # Pass our finalizer function to the user in %rdx, as per ELF ABI.\n\ - lea _dl_fini(%rip), %edx\n\ - # And make sure %rsp points to argc stored on the stack.\n\ - movl %r13d, %esp\n\ - # Jump to the user's entry point.\n\ - jmp *%r12\n\ -.previous\n\ -"); - -#endif /* !_X32_DL_MACHINE_H */ diff --git a/sysdeps/x86_64/x32/ffs.c b/sysdeps/x86_64/x32/ffs.c deleted file mode 100644 index fa7de8b887..0000000000 --- a/sysdeps/x86_64/x32/ffs.c +++ /dev/null @@ -1,4 +0,0 @@ -#define ffsl __something_else -#include -#undef ffsl -weak_alias (__ffs, ffsl) diff --git a/sysdeps/x86_64/x32/fpu/s_lrint.S b/sysdeps/x86_64/x32/fpu/s_lrint.S deleted file mode 100644 index 86d258c192..0000000000 --- a/sysdeps/x86_64/x32/fpu/s_lrint.S +++ /dev/null @@ -1,27 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__lrint) - cvtsd2si %xmm0,%eax - ret -END(__lrint) -weak_alias (__lrint, lrint) diff --git a/sysdeps/x86_64/x32/fpu/s_lrintf.S b/sysdeps/x86_64/x32/fpu/s_lrintf.S deleted file mode 100644 index 2e6f9aaf2b..0000000000 --- a/sysdeps/x86_64/x32/fpu/s_lrintf.S +++ /dev/null @@ -1,27 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 2015-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__lrintf) - cvtss2si %xmm0,%eax - ret -END(__lrintf) -weak_alias (__lrintf, lrintf) diff --git a/sysdeps/x86_64/x32/fpu/s_lrintl.S b/sysdeps/x86_64/x32/fpu/s_lrintl.S deleted file mode 100644 index 623c6fcbc9..0000000000 --- a/sysdeps/x86_64/x32/fpu/s_lrintl.S +++ /dev/null @@ -1,30 +0,0 @@ -/* Round argument to nearest integral value according to current rounding - direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - - .text -ENTRY(__lrintl) - fldt 8(%rsp) - fistpl -4(%rsp) - fwait - movl -4(%rsp),%eax - ret -END(__lrintl) -weak_alias (__lrintl, lrintl) diff --git a/sysdeps/x86_64/x32/gmp-mparam.h b/sysdeps/x86_64/x32/gmp-mparam.h deleted file mode 100644 index 1915bfc67a..0000000000 --- a/sysdeps/x86_64/x32/gmp-mparam.h +++ /dev/null @@ -1,33 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 2012-2017 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, see -. */ - -#if defined __GMP_H__ && ! defined _LONG_LONG_LIMB -#error "Included too late for _LONG_LONG_LIMB to take effect" -#endif - -#define _LONG_LONG_LIMB -#define BITS_PER_MP_LIMB 64 -#define BYTES_PER_MP_LIMB 8 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -#define IEEE_DOUBLE_BIG_ENDIAN 0 diff --git a/sysdeps/x86_64/x32/symbol-hacks.h b/sysdeps/x86_64/x32/symbol-hacks.h deleted file mode 100644 index 22aad04437..0000000000 --- a/sysdeps/x86_64/x32/symbol-hacks.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/x86_64/x32/sysdep.h b/sysdeps/x86_64/x32/sysdep.h deleted file mode 100644 index 034a3f04e9..0000000000 --- a/sysdeps/x86_64/x32/sysdep.h +++ /dev/null @@ -1,92 +0,0 @@ -/* Assembler macros for x32. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#undef LP_SIZE -#undef LP_OP -#undef ASM_ADDR - -#undef RAX_LP -#undef RBP_LP -#undef RBX_LP -#undef RCX_LP -#undef RDI_LP -#undef RDX_LP -#undef RSP_LP -#undef RSI_LP -#undef R8_LP -#undef R9_LP -#undef R10_LP -#undef R11_LP -#undef R12_LP -#undef R13_LP -#undef R14_LP -#undef R15_LP - -#ifdef __ASSEMBLER__ - -# define LP_SIZE 4 - -# define LP_OP(insn) insn##l - -# define ASM_ADDR .long - -# define RAX_LP eax -# define RBP_LP ebp -# define RBX_LP ebx -# define RCX_LP ecx -# define RDI_LP edi -# define RDX_LP edx -# define RSI_LP esi -# define RSP_LP esp -# define R8_LP r8d -# define R9_LP r9d -# define R10_LP r10d -# define R11_LP r11d -# define R12_LP r12d -# define R13_LP r13d -# define R14_LP r14d -# define R15_LP r15d - -#else /* __ASSEMBLER__ */ - -# define LP_SIZE "4" - -# define LP_OP(insn) #insn "l" - -# define ASM_ADDR ".long" - -# define RAX_LP "eax" -# define RBP_LP "ebp" -# define RBX_LP "ebx" -# define RCX_LP "ecx" -# define RDI_LP "edi" -# define RDX_LP "edx" -# define RSI_LP "esi" -# define RSP_LP "esp" -# define R8_LP "r8d" -# define R9_LP "r9d" -# define R10_LP "r10d" -# define R11_LP "r11d" -# define R12_LP "r12d" -# define R13_LP "r13d" -# define R14_LP "r14d" -# define R15_LP "r15d" - -#endif /* __ASSEMBLER__ */ -- cgit v1.2.3